ZGlmZiAtLWdpdCBhL0FCT1VULU5MUyBiL0FCT1VULU5MUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTI4ZjljCi0tLSAvZGV2L251bGwKKysrIGIvQUJPVVQtTkxTCkBAIC0wLDAgKzEsNDM1IEBACitOb3RlcyBvbiB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgIEZyZWUgc29mdHdhcmUgaXMgZ29pbmcgaW50ZXJuYXRpb25hbCEgIFRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QKK2lzIGEgd2F5IHRvIGdldCBtYWludGFpbmVycyBvZiBmcmVlIHNvZnR3YXJlLCB0cmFuc2xhdG9ycywgYW5kIHVzZXJzIGFsbAordG9nZXRoZXIsIHNvIHRoYXQgd2lsbCBncmFkdWFsbHkgYmVjb21lIGFibGUgdG8gc3BlYWsgbWFueSBsYW5ndWFnZXMuCitBIGZldyBwYWNrYWdlcyBhbHJlYWR5IHByb3ZpZGUgdHJhbnNsYXRpb25zIGZvciB0aGVpciBtZXNzYWdlcy4KKworICAgSWYgeW91IGZvdW5kIHRoaXMgYEFCT1VULU5MUycgZmlsZSBpbnNpZGUgYSBkaXN0cmlidXRpb24sIHlvdSBtYXkKK2Fzc3VtZSB0aGF0IHRoZSBkaXN0cmlidXRlZCBwYWNrYWdlIGRvZXMgdXNlIEdOVSBgZ2V0dGV4dCcgaW50ZXJuYWxseSwKK2l0c2VsZiBhdmFpbGFibGUgYXQgeW91ciBuZWFyZXN0IEdOVSBhcmNoaXZlIHNpdGUuICBCdXQgeW91IGRvIF9ub3RfCituZWVkIHRvIGluc3RhbGwgR05VIGBnZXR0ZXh0JyBwcmlvciB0byBjb25maWd1cmluZywgaW5zdGFsbGluZyBvciB1c2luZwordGhpcyBwYWNrYWdlIHdpdGggbWVzc2FnZXMgdHJhbnNsYXRlZC4KKworICAgSW5zdGFsbGVycyB3aWxsIGZpbmQgaGVyZSBzb21lIHVzZWZ1bCBoaW50cy4gIFRoZXNlIG5vdGVzIGFsc28KK2V4cGxhaW4gaG93IHVzZXJzIHNob3VsZCBwcm9jZWVkIGZvciBnZXR0aW5nIHRoZSBwcm9ncmFtcyB0byB1c2UgdGhlCithdmFpbGFibGUgdHJhbnNsYXRpb25zLiAgVGhleSB0ZWxsIGhvdyBwZW9wbGUgd2FudGluZyB0byBjb250cmlidXRlIGFuZAord29yayBhdCB0cmFuc2xhdGlvbnMgc2hvdWxkIGNvbnRhY3QgdGhlIGFwcHJvcHJpYXRlIHRlYW0uCisKKyAgIFdoZW4gcmVwb3J0aW5nIGJ1Z3MgaW4gdGhlIGBpbnRsLycgZGlyZWN0b3J5IG9yIGJ1Z3Mgd2hpY2ggbWF5IGJlCityZWxhdGVkIHRvIGludGVybmF0aW9uYWxpemF0aW9uLCB5b3Ugc2hvdWxkIHRlbGwgYWJvdXQgdGhlIHZlcnNpb24gb2YKK2BnZXR0ZXh0JyB3aGljaCBpcyB1c2VkLiAgVGhlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUKK2BpbnRsL1ZFUlNJT04nIGZpbGUsIGluIGludGVybmF0aW9uYWxpemVkIHBhY2thZ2VzLgorCitRdWljayBjb25maWd1cmF0aW9uIGFkdmljZQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgSWYgeW91IHdhbnQgdG8gZXhwbG9pdCB0aGUgZnVsbCBwb3dlciBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91CitzaG91bGQgY29uZmlndXJlIGl0IHVzaW5nCisKKyAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKKwordG8gZm9yY2UgdXNhZ2Ugb2YgaW50ZXJuYXRpb25hbGl6aW5nIHJvdXRpbmVzIHByb3ZpZGVkIHdpdGhpbiB0aGlzCitwYWNrYWdlLCBkZXNwaXRlIHRoZSBleGlzdGVuY2Ugb2YgaW50ZXJuYXRpb25hbGl6aW5nIGNhcGFiaWxpdGllcyBpbiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gd2hlcmUgdGhpcyBwYWNrYWdlIGlzIGJlaW5nIGluc3RhbGxlZC4gIFNvIGZhciwgb25seQordGhlIGBnZXR0ZXh0JyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgR05VIEMgbGlicmFyeSB2ZXJzaW9uIDIgcHJvdmlkZXMgYXMKK21hbnkgZmVhdHVyZXMgKHN1Y2ggYXMgbG9jYWxlIGFsaWFzLCBtZXNzYWdlIGluaGVyaXRhbmNlLCBhdXRvbWF0aWMKK2NoYXJzZXQgY29udmVyc2lvbiBvciBwbHVyYWwgZm9ybSBoYW5kbGluZykgYXMgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUuCitJdCBpcyBhbHNvIG5vdCBwb3NzaWJsZSB0byBvZmZlciB0aGlzIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBvbiB0b3AKK29mIGEgYGNhdGdldHMnIGltcGxlbWVudGF0aW9uLiAgRnV0dXJlIHZlcnNpb25zIG9mIEdOVSBgZ2V0dGV4dCcgd2lsbAordmVyeSBsaWtlbHkgY29udmV5IGV2ZW4gbW9yZSBmdW5jdGlvbmFsaXR5LiAgU28gaXQgbWlnaHQgYmUgYSBnb29kIGlkZWEKK3RvIGNoYW5nZSB0byBHTlUgYGdldHRleHQnIGFzIHNvb24gYXMgcG9zc2libGUuCisKKyAgIFNvIHlvdSBuZWVkIF9ub3RfIHByb3ZpZGUgdGhpcyBvcHRpb24gaWYgeW91IGFyZSB1c2luZyBHTlUgbGliYyAyIG9yCit5b3UgaGF2ZSBpbnN0YWxsZWQgYSByZWNlbnQgY29weSBvZiB0aGUgR05VIGdldHRleHQgcGFja2FnZSB3aXRoIHRoZQoraW5jbHVkZWQgYGxpYmludGwnLgorCitJTlNUQUxMIE1hdHRlcnMKKz09PT09PT09PT09PT09PQorCisgICBTb21lIHBhY2thZ2VzIGFyZSAibG9jYWxpemFibGUiIHdoZW4gcHJvcGVybHkgaW5zdGFsbGVkOyB0aGUKK3Byb2dyYW1zIHRoZXkgY29udGFpbiBjYW4gYmUgbWFkZSB0byBzcGVhayB5b3VyIG93biBuYXRpdmUgbGFuZ3VhZ2UuCitNb3N0IHN1Y2ggcGFja2FnZXMgdXNlIEdOVSBgZ2V0dGV4dCcuICBPdGhlciBwYWNrYWdlcyBoYXZlIHRoZWlyIG93bgord2F5cyB0byBpbnRlcm5hdGlvbmFsaXphdGlvbiwgcHJlZGF0aW5nIEdOVSBgZ2V0dGV4dCcuCisKKyAgIEJ5IGRlZmF1bHQsIHRoaXMgcGFja2FnZSB3aWxsIGJlIGluc3RhbGxlZCB0byBhbGxvdyB0cmFuc2xhdGlvbiBvZgorbWVzc2FnZXMuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZXRoZXIgdGhlIHN5c3RlbSBhbHJlYWR5Citwcm92aWRlcyB0aGUgR05VIGBnZXR0ZXh0JyBmdW5jdGlvbnMuICBJZiBub3QsIHRoZSBHTlUgYGdldHRleHQnIG93bgorbGlicmFyeSB3aWxsIGJlIHVzZWQuICBUaGlzIGxpYnJhcnkgaXMgd2hvbGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhpcworcGFja2FnZSwgdXN1YWxseSBpbiB0aGUgYGludGwvJyBzdWJkaXJlY3RvcnksIHNvIHByaW9yIGluc3RhbGxhdGlvbiBvZgordGhlIEdOVSBgZ2V0dGV4dCcgcGFja2FnZSBpcyBfbm90XyByZXF1aXJlZC4gIEluc3RhbGxlcnMgbWF5IHVzZQorc3BlY2lhbCBvcHRpb25zIGF0IGNvbmZpZ3VyYXRpb24gdGltZSBmb3IgY2hhbmdpbmcgdGhlIGRlZmF1bHQKK2JlaGF2aW91ci4gIFRoZSBjb21tYW5kczoKKworICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dAorICAgICAuL2NvbmZpZ3VyZSAtLWRpc2FibGUtbmxzCisKK3dpbGwgcmVzcGVjdGl2ZWx5IGJ5cGFzcyBhbnkgcHJlLWV4aXN0aW5nIGBnZXR0ZXh0JyB0byB1c2UgdGhlCitpbnRlcm5hdGlvbmFsaXppbmcgcm91dGluZXMgcHJvdmlkZWQgd2l0aGluIHRoaXMgcGFja2FnZSwgb3IgZWxzZSwKK190b3RhbGx5XyBkaXNhYmxlIHRyYW5zbGF0aW9uIG9mIG1lc3NhZ2VzLgorCisgICBXaGVuIHlvdSBhbHJlYWR5IGhhdmUgR05VIGBnZXR0ZXh0JyBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0gYW5kIHJ1bgorY29uZmlndXJlIHdpdGhvdXQgYW4gb3B0aW9uIGZvciB5b3VyIG5ldyBwYWNrYWdlLCBgY29uZmlndXJlJyB3aWxsCitwcm9iYWJseSBkZXRlY3QgdGhlIHByZXZpb3VzbHkgYnVpbHQgYW5kIGluc3RhbGxlZCBgbGliaW50bC5hJyBmaWxlIGFuZAord2lsbCBkZWNpZGUgdG8gdXNlIHRoaXMuICBUaGlzIG1pZ2h0IGJlIG5vdCB3aGF0IGlzIGRlc2lyYWJsZS4gIFlvdQorc2hvdWxkIHVzZSB0aGUgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LiAgSS5lLgoraWYgdGhlIGZpbGUgYGludGwvVkVSU0lPTicgc2hvd3MgdGhhdCB0aGUgbGlicmFyeSB3aGljaCBjb21lcyB3aXRoIHRoaXMKK3BhY2thZ2UgaXMgbW9yZSByZWNlbnQsIHlvdSBzaG91bGQgdXNlCisKKyAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKKwordG8gcHJldmVudCBhdXRvLWRldGVjdGlvbi4KKworICAgVGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyB3aWxsIG5vdCB0ZXN0IGZvciB0aGUgYGNhdGdldHMnIGZ1bmN0aW9uCithbmQgdGhlcmVmb3JlIGl0IHdpbGwgbm90IGJlIHVzZWQuICBUaGUgcmVhc29uIGlzIHRoYXQgZXZlbiBhbgorZW11bGF0aW9uIG9mIGBnZXR0ZXh0JyBvbiB0b3Agb2YgYGNhdGdldHMnIGNvdWxkIG5vdCBwcm92aWRlIGFsbCB0aGUKK2V4dGVuc2lvbnMgb2YgdGhlIEdOVSBgZ2V0dGV4dCcgbGlicmFyeS4KKworICAgSW50ZXJuYXRpb25hbGl6ZWQgcGFja2FnZXMgaGF2ZSB1c3VhbGx5IG1hbnkgYHBvL0xMLnBvJyBmaWxlcywgd2hlcmUKK0xMIGdpdmVzIGFuIElTTyA2MzkgdHdvLWxldHRlciBjb2RlIGlkZW50aWZ5aW5nIHRoZSBsYW5ndWFnZS4gIFVubGVzcwordHJhbnNsYXRpb25zIGhhdmUgYmVlbiBmb3JiaWRkZW4gYXQgYGNvbmZpZ3VyZScgdGltZSBieSB1c2luZyB0aGUKK2AtLWRpc2FibGUtbmxzJyBzd2l0Y2gsIGFsbCBhdmFpbGFibGUgdHJhbnNsYXRpb25zIGFyZSBpbnN0YWxsZWQKK3RvZ2V0aGVyIHdpdGggdGhlIHBhY2thZ2UuICBIb3dldmVyLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYExJTkdVQVMnCittYXkgYmUgc2V0LCBwcmlvciB0byBjb25maWd1cmF0aW9uLCB0byBsaW1pdCB0aGUgaW5zdGFsbGVkIHNldC4KK2BMSU5HVUFTJyBzaG91bGQgdGhlbiBjb250YWluIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgdHdvLWxldHRlcgorY29kZXMsIHN0YXRpbmcgd2hpY2ggbGFuZ3VhZ2VzIGFyZSBhbGxvd2VkLgorCitVc2luZyBUaGlzIFBhY2thZ2UKKz09PT09PT09PT09PT09PT09PQorCisgICBBcyBhIHVzZXIsIGlmIHlvdXIgbGFuZ3VhZ2UgaGFzIGJlZW4gaW5zdGFsbGVkIGZvciB0aGlzIHBhY2thZ2UsIHlvdQorb25seSBoYXZlIHRvIHNldCB0aGUgYExBTkcnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBhcHByb3ByaWF0ZQorYExMX0NDJyBjb21iaW5hdGlvbi4gIEhlcmUgYExMJyBpcyBhbiBJU08gNjM5IHR3by1sZXR0ZXIgbGFuZ3VhZ2UgY29kZSwKK2FuZCBgQ0MnIGlzIGFuIElTTyAzMTY2IHR3by1sZXR0ZXIgY291bnRyeSBjb2RlLiAgRm9yIGV4YW1wbGUsIGxldCdzCitzdXBwb3NlIHRoYXQgeW91IHNwZWFrIEdlcm1hbiBhbmQgbGl2ZSBpbiBHZXJtYW55LiAgQXQgdGhlIHNoZWxsCitwcm9tcHQsIG1lcmVseSBleGVjdXRlIGBzZXRlbnYgTEFORyBkZV9ERScgKGluIGBjc2gnKSwKK2BleHBvcnQgTEFORzsgTEFORz1kZV9ERScgKGluIGBzaCcpIG9yIGBleHBvcnQgTEFORz1kZV9ERScgKGluIGBiYXNoJykuCitUaGlzIGNhbiBiZSBkb25lIGZyb20geW91ciBgLmxvZ2luJyBvciBgLnByb2ZpbGUnIGZpbGUsIG9uY2UgYW5kIGZvcgorYWxsLgorCisgICBZb3UgbWlnaHQgdGhpbmsgdGhhdCB0aGUgY291bnRyeSBjb2RlIHNwZWNpZmljYXRpb24gaXMgcmVkdW5kYW50LgorQnV0IGluIGZhY3QsIHNvbWUgbGFuZ3VhZ2VzIGhhdmUgZGlhbGVjdHMgaW4gZGlmZmVyZW50IGNvdW50cmllcy4gIEZvcgorZXhhbXBsZSwgYGRlX0FUJyBpcyB1c2VkIGZvciBBdXN0cmlhLCBhbmQgYHB0X0JSJyBmb3IgQnJhemlsLiAgVGhlCitjb3VudHJ5IGNvZGUgc2VydmVzIHRvIGRpc3Rpbmd1aXNoIHRoZSBkaWFsZWN0cy4KKworICAgVGhlIGxvY2FsZSBuYW1pbmcgY29udmVudGlvbiBvZiBgTExfQ0MnLCB3aXRoIGBMTCcgZGVub3RpbmcgdGhlCitsYW5ndWFnZSBhbmQgYENDJyBkZW5vdGluZyB0aGUgY291bnRyeSwgaXMgdGhlIG9uZSB1c2Ugb24gc3lzdGVtcyBiYXNlZAorb24gR05VIGxpYmMuICBPbiBvdGhlciBzeXN0ZW1zLCBzb21lIHZhcmlhdGlvbnMgb2YgdGhpcyBzY2hlbWUgYXJlCit1c2VkLCBzdWNoIGFzIGBMTCcgb3IgYExMX0NDLkVOQ09ESU5HJy4gIFlvdSBjYW4gZ2V0IHRoZSBsaXN0IG9mCitsb2NhbGVzIHN1cHBvcnRlZCBieSB5b3VyIHN5c3RlbSBmb3IgeW91ciBjb3VudHJ5IGJ5IHJ1bm5pbmcgdGhlIGNvbW1hbmQKK2Bsb2NhbGUgLWEgfCBncmVwICdeTEwnJy4KKworICAgTm90IGFsbCBwcm9ncmFtcyBoYXZlIHRyYW5zbGF0aW9ucyBmb3IgYWxsIGxhbmd1YWdlcy4gIEJ5IGRlZmF1bHQsIGFuCitFbmdsaXNoIG1lc3NhZ2UgaXMgc2hvd24gaW4gcGxhY2Ugb2YgYSBub25leGlzdGVudCB0cmFuc2xhdGlvbi4gIElmIHlvdQordW5kZXJzdGFuZCBvdGhlciBsYW5ndWFnZXMsIHlvdSBjYW4gc2V0IHVwIGEgcHJpb3JpdHkgbGlzdCBvZiBsYW5ndWFnZXMuCitUaGlzIGlzIGRvbmUgdGhyb3VnaCBhIGRpZmZlcmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgY2FsbGVkCitgTEFOR1VBR0UnLiAgR05VIGBnZXR0ZXh0JyBnaXZlcyBwcmVmZXJlbmNlIHRvIGBMQU5HVUFHRScgb3ZlciBgTEFORycKK2ZvciB0aGUgcHVycG9zZSBvZiBtZXNzYWdlIGhhbmRsaW5nLCBidXQgeW91IHN0aWxsIG5lZWQgdG8gaGF2ZSBgTEFORycKK3NldCB0byB0aGUgcHJpbWFyeSBsYW5ndWFnZTsgdGhpcyBpcyByZXF1aXJlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUKK3N5c3RlbSBsaWJyYXJpZXMuICBGb3IgZXhhbXBsZSwgc29tZSBTd2VkaXNoIHVzZXJzIHdobyB3b3VsZCByYXRoZXIKK3JlYWQgdHJhbnNsYXRpb25zIGluIEdlcm1hbiB0aGFuIEVuZ2xpc2ggZm9yIHdoZW4gU3dlZGlzaCBpcyBub3QKK2F2YWlsYWJsZSwgc2V0IGBMQU5HVUFHRScgdG8gYHN2OmRlJyB3aGlsZSBsZWF2aW5nIGBMQU5HJyB0byBgc3ZfU0UnLgorCisgICBJbiB0aGUgYExBTkdVQUdFJyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgYnV0IG5vdCBpbiB0aGUgYExBTkcnCitlbnZpcm9ubWVudCB2YXJpYWJsZSwgYExMX0NDJyBjb21iaW5hdGlvbnMgY2FuIGJlIGFiYnJldmlhdGVkIGFzIGBMTCcKK3RvIGRlbm90ZSB0aGUgbGFuZ3VhZ2UncyBtYWluIGRpYWxlY3QuICBGb3IgZXhhbXBsZSwgYGRlJyBpcyBlcXVpdmFsZW50Cit0byBgZGVfREUnIChHZXJtYW4gYXMgc3Bva2VuIGluIEdlcm1hbnkpLCBhbmQgYHB0JyB0byBgcHRfUFQnCisoUG9ydHVndWVzZSBhcyBzcG9rZW4gaW4gUG9ydHVnYWwpIGluIHRoaXMgY29udGV4dC4KKworVHJhbnNsYXRpbmcgVGVhbXMKKz09PT09PT09PT09PT09PT09CisKKyAgIEZvciB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IHRvIGJlIGEgc3VjY2Vzcywgd2UgbmVlZCBpbnRlcmVzdGVkCitwZW9wbGUgd2hvIGxpa2UgdGhlaXIgb3duIGxhbmd1YWdlIGFuZCB3cml0ZSBpdCB3ZWxsLCBhbmQgd2hvIGFyZSBhbHNvCithYmxlIHRvIHN5bmVyZ2l6ZSB3aXRoIG90aGVyIHRyYW5zbGF0b3JzIHNwZWFraW5nIHRoZSBzYW1lIGxhbmd1YWdlLgorRWFjaCB0cmFuc2xhdGlvbiB0ZWFtIGhhcyBpdHMgb3duIG1haWxpbmcgbGlzdC4gIFRoZSB1cC10by1kYXRlIGxpc3Qgb2YKK3RlYW1zIGNhbiBiZSBmb3VuZCBhdCB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0J3MgaG9tZXBhZ2UsCitgaHR0cDovL3d3dy5pcm8udW1vbnRyZWFsLmNhL2NvbnRyaWIvcG8vSFRNTC8nLCBpbiB0aGUgIk5hdGlvbmFsIHRlYW1zIgorYXJlYS4KKworICAgSWYgeW91J2QgbGlrZSB0byB2b2x1bnRlZXIgdG8gX3dvcmtfIGF0IHRyYW5zbGF0aW5nIG1lc3NhZ2VzLCB5b3UKK3Nob3VsZCBiZWNvbWUgYSBtZW1iZXIgb2YgdGhlIHRyYW5zbGF0aW5nIHRlYW0gZm9yIHlvdXIgb3duIGxhbmd1YWdlLgorVGhlIHN1YnNjcmliaW5nIGFkZHJlc3MgaXMgX25vdF8gdGhlIHNhbWUgYXMgdGhlIGxpc3QgaXRzZWxmLCBpdCBoYXMKK2AtcmVxdWVzdCcgYXBwZW5kZWQuICBGb3IgZXhhbXBsZSwgc3BlYWtlcnMgb2YgU3dlZGlzaCBjYW4gc2VuZCBhCittZXNzYWdlIHRvIGBzdi1yZXF1ZXN0QGxpLm9yZycsIGhhdmluZyB0aGlzIG1lc3NhZ2UgYm9keToKKworICAgICBzdWJzY3JpYmUKKworICAgS2VlcCBpbiBtaW5kIHRoYXQgdGVhbSBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBwYXJ0aWNpcGF0ZQorX2FjdGl2ZWx5XyBpbiB0cmFuc2xhdGlvbnMsIG9yIGF0IHNvbHZpbmcgdHJhbnNsYXRpb25hbCBkaWZmaWN1bHRpZXMsCityYXRoZXIgdGhhbiBtZXJlbHkgbHVya2luZyBhcm91bmQuICBJZiB5b3VyIHRlYW0gZG9lcyBub3QgZXhpc3QgeWV0IGFuZAoreW91IHdhbnQgdG8gc3RhcnQgb25lLCBvciBpZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB3aGF0IHRvIGRvIG9yIGhvdyB0bworZ2V0IHN0YXJ0ZWQsIHBsZWFzZSB3cml0ZSB0byBgdHJhbnNsYXRpb25AaXJvLnVtb250cmVhbC5jYScgdG8gcmVhY2ggdGhlCitjb29yZGluYXRvciBmb3IgYWxsIHRyYW5zbGF0b3IgdGVhbXMuCisKKyAgIFRoZSBFbmdsaXNoIHRlYW0gaXMgc3BlY2lhbC4gIEl0IHdvcmtzIGF0IGltcHJvdmluZyBhbmQgdW5pZm9ybWl6aW5nCit0aGUgdGVybWlub2xvZ3kgaW4gdXNlLiAgUHJvdmVuIGxpbmd1aXN0aWMgc2tpbGwgYXJlIHByYWlzZWQgbW9yZSB0aGFuCitwcm9ncmFtbWluZyBza2lsbCwgaGVyZS4KKworQXZhaWxhYmxlIFBhY2thZ2VzCis9PT09PT09PT09PT09PT09PT0KKworICAgTGFuZ3VhZ2VzIGFyZSBub3QgZXF1YWxseSBzdXBwb3J0ZWQgaW4gYWxsIHBhY2thZ2VzLiAgVGhlIGZvbGxvd2luZworbWF0cml4IHNob3dzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGludGVybmF0aW9uYWxpemF0aW9uLCBhcyBvZiBBdWd1c3QKKzIwMDIuICBUaGUgbWF0cml4IHNob3dzLCBpbiByZWdhcmQgb2YgZWFjaCBwYWNrYWdlLCBmb3Igd2hpY2ggbGFuZ3VhZ2VzCitQTyBmaWxlcyBoYXZlIGJlZW4gc3VibWl0dGVkIHRvIHRyYW5zbGF0aW9uIGNvb3JkaW5hdGlvbiwgd2l0aCBhCit0cmFuc2xhdGlvbiBwZXJjZW50YWdlIG9mIGF0IGxlYXN0IDUwJS4KKworICAgICBSZWFkeSBQTyBmaWxlcyAgICBiZSBiZyBjYSBjcyBkYSBkZSBlbCBlbiBlbyBlcyBldCBmaSBmcgorICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIGEycHMgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdICAgIFtdIHwKKyAgICAgYXAtdXRpbHMgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiYXNoICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICBbXSB8CisgICAgIGJmZCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgYmludXRpbHMgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBiaXNvbiAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIGNsaXNwICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY2xpc3AgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gICAgICAgW10gfAorICAgICBjbGlzcGxvdyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNwaW8gICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgZGFya3N0YXQgICAgICAgIHwgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkaWZmdXRpbHMgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICBbXSB8CisgICAgIGVuc2NyaXB0ICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdIHwKKyAgICAgZXJyb3IgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gfAorICAgICBmZXRjaG1haWwgICAgICAgfCAgICAgICBbXSAoKSBbXSBbXSAgICAgICAgICBbXSAgICAgICAoKSB8CisgICAgIGZpbGV1dGlscyAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdIFtdICAgIFtdIHwKKyAgICAgZmluZHV0aWxzICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgW10gW10gW10gICAgW10gfAorICAgICBmbGV4ICAgICAgICAgICAgfCAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGdhcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgZ2F3ayAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gfAorICAgICBnY2FsICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGdjYyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgZ2V0dGV4dCAgICAgICAgIHwgICAgICAgW10gICAgW10gW10gICAgICAgICAgW10gICAgICAgW10gfAorICAgICBnbnVwZyAgICAgICAgICAgfCAgICAgICBbXSAgICAgICBbXSBbXSAgICBbXSBbXSBbXSAgICBbXSB8CisgICAgIGdwcm9mICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgZ3BzZHJpdmUgICAgICAgIHwgICAgICAgICAgICAgKCkgKCkgICAgKCkgICAgKCkgICAgICAgKCkgfAorICAgICBncmVwICAgICAgICAgICAgfCAgICBbXSBbXSAgICAgICBbXSBbXSAgICAgICBbXSBbXSBbXSBbXSB8CisgICAgIGdyZXRsICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3RodW1iICAgICAgICAgIHwgICAgICAgICAgICAgICAgKCkgICAgICAgICAgKCkgICAgICAgKCkgfAorICAgICBoZWxsbyAgICAgICAgICAgfCAgICAgICBbXSAgICBbXSBbXSBbXSAgICBbXSBbXSBbXSBbXSBbXSB8CisgICAgIGlkLXV0aWxzICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgIFtdIHwKKyAgICAgaW5kZW50ICAgICAgICAgIHwgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgW10gICAgW10gfAorICAgICBqcGlsb3QgICAgICAgICAgfCAgICAgICAgICAoKSBbXSBbXSAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGp3aG9pcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAga2JkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gfAorICAgICBsZCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGxpYmMgICAgICAgICAgICB8ICAgICAgIFtdIFtdIFtdIFtdIFtdICAgICAgIFtdICAgIFtdIFtdIHwKKyAgICAgbGliaWNvbnYgICAgICAgIHwgICAgICAgW10gICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgfAorICAgICBsaWZlbGluZXMgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAoKSB8CisgICAgIGxpbHlwb25kICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKyAgICAgbGluZ290ZWFjaCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gfAorICAgICBsaW5nb3RlYWNoX2xlc3NvbnN8ICAgICAgICAgICAgICAgICgpICAgICAgICAgICgpICAgICAgICAgIHwKKyAgICAgbHlueCAgICAgICAgICAgIHwgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgW10gICAgICAgfAorICAgICBtNCAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisgICAgIG1ha2UgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgbWFuLWRiICAgICAgICAgIHwgICAgICAgW10gKCkgKCkgW10gICAgICAgICAgKCkgICAgICAgKCkgfAorICAgICBteXNlY3JldGRpYXJ5ICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIG5hbm8gICAgICAgICAgICB8ICAgICAgIFtdICgpIFtdIFtdICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgbmFub18xXzAgICAgICAgIHwgICAgICAgW10gKCkgW10gW10gICAgICAgICAgW10gICAgICAgW10gfAorICAgICBvcGNvZGVzICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIHBhcnRlZCAgICAgICAgICB8ICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgcHR4ICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgW10gW10gW10gW10gW10gfAorICAgICBweXRob24gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHJlY29kZSAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdIFtdICAgIFtdIFtdICAgICAgIFtdIHwKKyAgICAgc2VkICAgICAgICAgICAgIHwgICAgICAgW10gW10gW10gW10gW10gICAgW10gW10gW10gW10gW10gfAorICAgICBzaC11dGlscyAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIHNoYXJ1dGlscyAgICAgICB8ICAgICAgICAgIFtdIFtdIFtdIFtdICAgICAgIFtdIFtdICAgIFtdIHwKKyAgICAgc2tldGNoICAgICAgICAgIHwgICAgICAgICAgICAgICAgKCkgICAgICAgICAgW10gICAgICAgKCkgfAorICAgICBzb3VuZHRyYWNrZXIgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIHNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdGFyICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gW10gICAgICAgICAgW10gW10gICAgW10gfAorICAgICB0ZXhpbmZvICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICBbXSAgICAgICAgICBbXSB8CisgICAgIHRleHR1dGlscyAgICAgICB8ICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgdXRpbC1saW51eCAgICAgIHwgICAgICAgICAgW10gW10gW10gICAgICAgICAgW10gW10gICAgW10gfAorICAgICB2b3JiaXMtdG9vbHMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIHdhc3Rlc2VkZ2UgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2RpZmYgICAgICAgICAgIHwgICAgICAgW10gICAgW10gW10gICAgICAgICAgW10gW10gICAgW10gfAorICAgICB3Z2V0ICAgICAgICAgICAgfCAgICBbXSBbXSBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSBbXSBbXSB8CisgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgYmUgYmcgY2EgY3MgZGEgZGUgZWwgZW4gZW8gZXMgZXQgZmkgZnIKKyAgICAgICAgICAgICAgICAgICAgICAgIDAgIDIgMTkgMTAgMzAgNDQgIDkgIDEgMTIgNDQgMTcgIDYgNTMKKyAgICAgCisgICAgICAgICAgICAgICAgICAgICAgIGdsIGhlIGhyIGh1IGlkIGl0IGphIGtvIGx2IG5iIG5sIG5uCisgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgYTJwcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgKCkgICAgKCkgICAgICAgW10gICAgfAorICAgICBhcC11dGlscyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJhc2ggICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmZkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBiaW51dGlscyAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGJpc29uICAgICAgICAgICB8ICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgIFtdICAgIHwKKyAgICAgY2xpc3AgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjbGlzcCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisgICAgIGNsaXNwbG93ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY3BpbyAgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gICAgfAorICAgICBkYXJrc3RhdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGRpZmZ1dGlscyAgICAgICB8IFtdIFtdICAgIFtdIFtdICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZW5zY3JpcHQgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorICAgICBlcnJvciAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGZldGNobWFpbCAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZmlsZXV0aWxzICAgICAgIHwgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBmaW5kdXRpbHMgICAgICAgfCBbXSAgICBbXSBbXSBbXSBbXSBbXSBbXSAgICAgICBbXSAgICB8CisgICAgIGZsZXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIHwKKyAgICAgZ2FzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnYXdrICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdjYWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2NjICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBnZXR0ZXh0ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICB8CisgICAgIGdudXBnICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Byb2YgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncHNkcml2ZSAgICAgICAgfCAgICAgICAgICBbXSAgICAoKSAgICAgICAgICAgICAoKSAgICB8CisgICAgIGdyZXAgICAgICAgICAgICB8IFtdIFtdIFtdIFtdIFtdIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3JldGwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBndGh1bWIgICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAoKSAgICAgICAgICAgICAgICB8CisgICAgIGhlbGxvICAgICAgICAgICB8IFtdIFtdIFtdIFtdIFtdIFtdIFtdIFtdIFtdIFtdIFtdIFtdIHwKKyAgICAgaWQtdXRpbHMgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgfAorICAgICBpbmRlbnQgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICBbXSAgICAgICAgICBbXSAgICB8CisgICAgIGpwaWxvdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICgpICAgIHwKKyAgICAgandob2lzICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrYmQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxkICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliYyAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgW10gW10gICAgW10gICAgICAgfAorICAgICBsaWJpY29udiAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpZmVsaW5lcyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGlseXBvbmQgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorICAgICBsaW5nb3RlYWNoICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpbmdvdGVhY2hfbGVzc29uc3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBseW54ICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICBbXSAgICB8CisgICAgIG00ICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgIHwKKyAgICAgbWFrZSAgICAgICAgICAgIHwgW10gW10gW10gICAgICAgICAgW10gW10gICAgICAgW10gICAgfAorICAgICBtYW4tZGIgICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAoKSAgICAgICAgICAgICAgICB8CisgICAgIG15c2VjcmV0ZGlhcnkgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbmFubyAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgfAorICAgICBuYW5vXzFfMCAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSAgICBbXSB8CisgICAgIG9wY29kZXMgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgIHwKKyAgICAgcGFydGVkICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gfAorICAgICBwdHggICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSBbXSAgICB8CisgICAgIHB5dGhvbiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcmVjb2RlICAgICAgICAgIHwgW10gW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICBzZWQgICAgICAgICAgICAgfCBbXSBbXSBbXSAgICBbXSBbXSBbXSBbXSAgICAgICBbXSAgICB8CisgICAgIHNoLXV0aWxzICAgICAgICB8ICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIFtdICAgICAgIHwKKyAgICAgc2hhcnV0aWxzICAgICAgIHwgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgfAorICAgICBza2V0Y2ggICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICB8CisgICAgIHNvdW5kdHJhY2tlciAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB0YXIgICAgICAgICAgICAgfCBbXSAgICBbXSAgICBbXSBbXSBbXSAgICAgICBbXSAgICAgICB8CisgICAgIHRleGluZm8gICAgICAgICB8ICAgIFtdIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgdGV4dHV0aWxzICAgICAgIHwgW10gICAgICAgICAgICAgICAgW10gW10gICAgW10gICAgICAgfAorICAgICB1dGlsLWxpbnV4ICAgICAgfCAgICAgICAgICAgICAgICAoKSBbXSAgICAgICAgICAgICAgICB8CisgICAgIHZvcmJpcy10b29scyAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2FzdGVzZWRnZSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3ZGlmZiAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHdnZXQgICAgICAgICAgICB8IFtdIFtdIFtdIFtdICAgICAgIFtdICAgICAgICAgIFtdICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICBnbCBoZSBociBodSBpZCBpdCBqYSBrbyBsdiBuYiBubCBubgorICAgICAgICAgICAgICAgICAgICAgICAyMyAgOSAxMiAxOSAxNiAxMyAyNiAgOSAgMSAgNyAxOSAgMworICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgbm8gcGwgcHQgcHRfQlIgcnUgc2sgc2wgc3YgdHIgdWsgemhfQ04gemhfVFcKKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICBhMnBzICAgICAgICAgICAgfCAoKSAoKSAoKSAgW10gICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICB8IDEwCisgICAgIGFwLXV0aWxzICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgIHwgIDAKKyAgICAgYmFzaCAgICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorICAgICBiZmQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8ICA1CisgICAgIGJpbnV0aWxzICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgYmlzb24gICAgICAgICAgIHwgICAgICAgICAgIFtdICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgfCAxMgorICAgICBjbGlzcCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisgICAgIGNsaXNwICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgY2xpc3Bsb3cgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorICAgICBjcGlvICAgICAgICAgICAgfCAgICBbXSAgICAgW10gICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8IDEyCisgICAgIGRhcmtzdGF0ICAgICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgIFtdICAgICAgICAoKSAgICAoKSAgIHwgIDIKKyAgICAgZGlmZnV0aWxzICAgICAgIHwgICAgW10gICAgIFtdICAgW10gICAgICAgW10gW10gICAgICAgICAgIFtdICAgfCAxNworICAgICBlbnNjcmlwdCAgICAgICAgfCAgICAgICAgICAgW10gICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8ICA4CisgICAgIGVycm9yICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICBbXSAgIHwgIDcKKyAgICAgZmV0Y2htYWlsICAgICAgIHwgICAgKCkgICAgICgpICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfCAgNgorICAgICBmaWxldXRpbHMgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgW10gICAgW10gICB8IDE0CisgICAgIGZpbmR1dGlscyAgICAgICB8ICAgIFtdICAgICBbXSAgIFtdIFtdIFtdIFtdIFtdICAgICAgICAgICAgICAgIHwgMjEKKyAgICAgZmxleCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgfCAgOQorICAgICBnYXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8ICAzCisgICAgIGdhd2sgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgIDYKKyAgICAgZ2NhbCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfCAgNAorICAgICBnY2MgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8ICA0CisgICAgIGdldHRleHQgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdIFtdICAgICAgICAgICBbXSAgIHwgMTMKKyAgICAgZ251cGcgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfCAxNAorICAgICBncHJvZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8ICA1CisgICAgIGdwc2RyaXZlICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwgIDMKKyAgICAgZ3JlcCAgICAgICAgICAgIHwgICAgW10gICAgIFtdICAgW10gICAgW10gICAgW10gICAgICAgICAgICAgICAgfCAyMAorICAgICBncmV0bCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisgICAgIGd0aHVtYiAgICAgICAgICB8ICAgICAgICAgICAoKSAgICgpICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwgIDEKKyAgICAgaGVsbG8gICAgICAgICAgIHwgW10gW10gICAgICAgICAgW10gW10gICAgW10gW10gW10gICAgICAgICAgICAgfCAyOAorICAgICBpZC11dGlscyAgICAgICAgfCAgICAgICAgICAgW10gICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8ICA5CisgICAgIGluZGVudCAgICAgICAgICB8ICAgICAgICAgICBbXSAgIFtdIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgMTQKKyAgICAganBpbG90ICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgKCkgW10gICAgICAgICAgIFtdICAgfCAgNQorICAgICBqd2hvaXMgICAgICAgICAgfCAgICAgICAgICAgW10gICAoKSAgICAgICAoKSBbXSAgICAgICAgICAgW10gICB8ICA3CisgICAgIGtiZCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgbGQgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfCAgNAorICAgICBsaWJjICAgICAgICAgICAgfCBbXSBbXSAgICAgW10gICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8IDE4CisgICAgIGxpYmljb252ICAgICAgICB8ICAgICAgICAgICBbXSAgIFtdIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgMTIKKyAgICAgbGlmZWxpbmVzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAgMQorICAgICBsaWx5cG9uZCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIGxpbmdvdGVhY2ggICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgbGluZ290ZWFjaF9sZXNzb25zfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICB8ICAwCisgICAgIGx5bnggICAgICAgICAgICB8ICAgICAgICAgICBbXSAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgMTMKKyAgICAgbTQgICAgICAgICAgICAgIHwgICAgW10gICAgIFtdICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAxMworICAgICBtYWtlICAgICAgICAgICAgfCAgICBbXSAgICAgW10gICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8IDE1CisgICAgIG1hbi1kYiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKyAgICAgbXlzZWNyZXRkaWFyeSAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfCAgNworICAgICBuYW5vICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICBbXSAgICAgICBbXSAgICBbXSAgICAgICAgICAgICB8IDEzCisgICAgIG5hbm9fMV8wICAgICAgICB8ICAgIFtdICAgICAgICAgIFtdICAgICAgIFtdICAgIFtdICAgICAgICAgICAgIHwgMTQKKyAgICAgb3Bjb2RlcyAgICAgICAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfCAgOAorICAgICBwYXJ0ZWQgICAgICAgICAgfCAgICAgICBbXSAgW10gICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8IDEyCisgICAgIHB0eCAgICAgICAgICAgICB8IFtdIFtdIFtdICBbXSAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgMTkKKyAgICAgcHl0aG9uICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorICAgICByZWNvZGUgICAgICAgICAgfCAgICBbXSAgICAgW10gICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICB8IDE1CisgICAgIHNlZCAgICAgICAgICAgICB8ICAgICAgICAgICBbXSAgIFtdIFtdIFtdIFtdIFtdICAgICAgICAgICAgICAgIHwgMjQKKyAgICAgc2gtdXRpbHMgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgfCAgOQorICAgICBzaGFydXRpbHMgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgW10gICB8IDE0CisgICAgIHNrZXRjaCAgICAgICAgICB8ICAgICAgICAgICBbXSAgICgpICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgc291bmR0cmFja2VyICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAgNgorICAgICBzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisgICAgIHRhciAgICAgICAgICAgICB8IFtdIFtdICAgICBbXSAgICAgIFtdIFtdIFtdIFtdICAgICAgICAgICAgICAgIHwgMTkKKyAgICAgdGV4aW5mbyAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAxMAorICAgICB0ZXh0dXRpbHMgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgW10gICB8IDE0CisgICAgIHV0aWwtbGludXggICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgMTAKKyAgICAgdm9yYmlzLXRvb2xzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAgMworICAgICB3YXN0ZXNlZGdlICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisgICAgIHdkaWZmICAgICAgICAgICB8ICAgICAgICAgICBbXSAgIFtdIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgMTQKKyAgICAgd2dldCAgICAgICAgICAgIHwgICAgW10gICAgICAgICAgW10gW10gW10gW10gW10gW10gICAgICAgIFtdICAgfCAyNAorICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgMzcgdGVhbXMgICAgICAgIG5vIHBsIHB0IHB0X0JSIHJ1IHNrIHNsIHN2IHRyIHVrIHpoX0NOIHpoX1RXCisgICAgICAgNjggZG9tYWlucyAgICAgICA0IDE1ICAyICAyOCAgIDI4IDEyIDEwIDQ5IDQzICA0ICAgMSAgICAgOSAgICA2MDkKKworICAgU29tZSBjb3VudGVycyBpbiB0aGUgcHJlY2VkaW5nIG1hdHJpeCBhcmUgaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZgordmlzaWJsZSBibG9ja3MgbGV0IHVzIGV4cGVjdC4gIFRoaXMgaXMgYmVjYXVzZSBhIGZldyBleHRyYSBQTyBmaWxlcyBhcmUKK3VzZWQgZm9yIGltcGxlbWVudGluZyByZWdpb25hbCB2YXJpYW50cyBvZiBsYW5ndWFnZXMsIG9yIGxhbmd1YWdlCitkaWFsZWN0cy4KKworICAgRm9yIGEgUE8gZmlsZSBpbiB0aGUgbWF0cml4IGFib3ZlIHRvIGJlIGVmZmVjdGl2ZSwgdGhlIHBhY2thZ2UgdG8KK3doaWNoIGl0IGFwcGxpZXMgc2hvdWxkIGFsc28gaGF2ZSBiZWVuIGludGVybmF0aW9uYWxpemVkIGFuZAorZGlzdHJpYnV0ZWQgYXMgc3VjaCBieSBpdHMgbWFpbnRhaW5lci4gIFRoZXJlIG1pZ2h0IGJlIGFuIG9ic2VydmFibGUKK2xhZyBiZXR3ZWVuIHRoZSBtZXJlIGV4aXN0ZW5jZSBhIFBPIGZpbGUgYW5kIGl0cyB3aWRlIGF2YWlsYWJpbGl0eSBpbiBhCitkaXN0cmlidXRpb24uCisKKyAgIElmIEF1Z3VzdCAyMDAyIHNlZW1zIHRvIGJlIG9sZCwgeW91IG1heSBmZXRjaCBhIG1vcmUgcmVjZW50IGNvcHkgb2YKK3RoaXMgYEFCT1VULU5MUycgZmlsZSBvbiBtb3N0IEdOVSBhcmNoaXZlIHNpdGVzLiAgVGhlIG1vc3QgdXAtdG8tZGF0ZQorbWF0cml4IHdpdGggZnVsbCBwZXJjZW50YWdlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGF0CitgaHR0cDovL3d3dy5pcm8udW1vbnRyZWFsLmNhL2NvbnRyaWIvcG8vSFRNTC9tYXRyaXguaHRtbCcuCisKK1VzaW5nIGBnZXR0ZXh0JyBpbiBuZXcgcGFja2FnZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgSWYgeW91IGFyZSB3cml0aW5nIGEgZnJlZWx5IGF2YWlsYWJsZSBwcm9ncmFtIGFuZCB3YW50IHRvCitpbnRlcm5hdGlvbmFsaXplIGl0IHlvdSBhcmUgd2VsY29tZSB0byB1c2UgR05VIGBnZXR0ZXh0JyBpbiB5b3VyCitwYWNrYWdlLiAgT2YgY291cnNlIHlvdSBoYXZlIHRvIHJlc3BlY3QgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHdoaWNoIGNvdmVycyB0aGUgdXNlIG9mIHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuICBUaGlzIG1lYW5zCitpbiBwYXJ0aWN1bGFyIHRoYXQgZXZlbiBub24tZnJlZSBwcm9ncmFtcyBjYW4gdXNlIGBsaWJpbnRsJyBhcyBhIHNoYXJlZAorbGlicmFyeSwgd2hlcmVhcyBvbmx5IGZyZWUgc29mdHdhcmUgY2FuIHVzZSBgbGliaW50bCcgYXMgYSBzdGF0aWMKK2xpYnJhcnkgb3IgdXNlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGBsaWJpbnRsJy4KKworICAgT25jZSB0aGUgc291cmNlcyBhcmUgY2hhbmdlZCBhcHByb3ByaWF0ZWx5IGFuZCB0aGUgc2V0dXAgY2FuIGhhbmRsZQordG8gdXNlIG9mIGBnZXR0ZXh0JyB0aGUgb25seSB0aGluZyBtaXNzaW5nIGFyZSB0aGUgdHJhbnNsYXRpb25zLiAgVGhlCitGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMgYWxzbyBhdmFpbGFibGUgZm9yIHBhY2thZ2VzIHdoaWNoIGFyZSBub3QKK2RldmVsb3BlZCBpbnNpZGUgdGhlIEdOVSBwcm9qZWN0LiAgVGhlcmVmb3JlIHRoZSBpbmZvcm1hdGlvbiBnaXZlbiBhYm92ZQorYXBwbGllcyBhbHNvIGZvciBldmVyeSBvdGhlciBGcmVlIFNvZnR3YXJlIFByb2plY3QuICBDb250YWN0CitgdHJhbnNsYXRpb25AaXJvLnVtb250cmVhbC5jYScgdG8gbWFrZSB0aGUgYC5wb3QnIGZpbGVzIGF2YWlsYWJsZSB0bwordGhlIHRyYW5zbGF0aW9uIHRlYW1zLgorCmRpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDEyMjdiCi0tLSAvZGV2L251bGwKKysrIGIvQ09QWUlORwpAQCAtMCwwICsxLDg0OSBAQAorVGhpcyBwYWNrYWdlLCB0aGUgRVhUMiBmaWxlc3lzdGVtIHV0aWxpdGllcywgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyCit0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBsaWIvZXh0MmZzCithbmQgbGliL2UycCBsaWJyYXJpZXMsIHdoaWNoIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgR05VIExpYnJhcnkKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCB0aGUgbGliL3V1aWQgbGlicmFyeSB3aGljaCBpcyBtYWRlCithdmFpbGFibGUgdW5kZXIgYSBCU0Qtc3R5bGUgbGljZW5zZSBhbmQgdGhlIGxpYi9ldCBhbmQgbGliL3NzCitsaWJyYXJpZXMgd2hpY2ggYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIGFuIE1JVC1zdHlsZSBsaWNlbnNlLiAgUGxlYXNlCitzZWUgbGliL3V1aWQvQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzIGZvciB0aGUgbGljZW5zZSBmb3IgdGhlIGZpbGVzCitjb21wcmlzaW5nIHRoZSBsaWJ1dWlkIGxpYnJhcnksIGFuZCB0aGUgc291cmNlIGZpbGUgaGVhZGVycyBvZiB0aGUKK2xpYmV0IGFuZCBsaWJzcyBsaWJyYXJpZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1RoZSBtb3N0IHJlY2VudCBvZmZpY2lhbGx5IGRpc3RyaWJ1dGVkIHZlcnNpb24gY2FuIGJlIGZvdW5kIGF0CitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC4gIElmIHlvdSBuZWVkIHRvIG1ha2UgYSBkaXN0cmlidXRpb24sCit0aGF0J3MgdGhlIG9uZSB5b3Ugc2hvdWxkIHVzZS4gIElmIHRoZXJlIGlzIHNvbWUgcmVhc29uIHdoeSB5b3UnZCBsaWtlCithIG1vcmUgcmVjZW50IHZlcnNpb24gdGhhdCBpcyBzdGlsbCBpbiBBTFBIQSB0ZXN0aW5nIChpLmUuLCBlaXRoZXIKK3VzaW5nIHRoZSAiV0lQIiB0ZXN0IGRpc3RyaWJ1dGlvbnMgb3Igb25lIGZyb20gdGhlIGhnIG9yIGdpdAorcmVwb3NpdG9yeSBmcm9tIHRoZSBkZXZlbG9wbWVudCBicmFuY2gsIHBsZWFzZSBjb250YWN0IG1lCisodHl0c29AbWl0LmVkdSkgYmVmb3JlIHlvdSBzaGlwLiAgVGhlIHJlbGVhc2Ugc2NoZWR1bGVzIGZvciB0aGlzCitwYWNrYWdlIGFyZSBmbGV4aWJsZSwgaWYgeW91IGdpdmUgbWUgZW5vdWdoIGxlYWQgdGltZS4KKworCisJCQkJCVRoZW9kb3JlIFRzJ28KKwkJCQkJMjMtSnVuZS0yMDA3CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkgIEdOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgCQkgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBHUEwuICBJdCBpcworIG51bWJlcmVkIDIgYmVjYXVzZSBpdCBnb2VzIHdpdGggdmVyc2lvbiAyIG9mIHRoZSBvcmRpbmFyeSBHUEwuXQorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZQorZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLgorCisgIFRoaXMgbGljZW5zZSwgdGhlIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lCitzcGVjaWFsbHkgZGVzaWduYXRlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUsIGFuZCB0byBhbnkKK290aGVyIGxpYnJhcmllcyB3aG9zZSBhdXRob3JzIGRlY2lkZSB0byB1c2UgaXQuICBZb3UgY2FuIHVzZSBpdCBmb3IKK3lvdXIgbGlicmFyaWVzLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYKK3lvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCB3aGV0aGVyIGdyYXRpcworb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQoreW91LiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZQorY29kZS4gIElmIHlvdSBsaW5rIGEgcHJvZ3JhbSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlCitjb21wbGV0ZSBvYmplY3QgZmlsZXMgdG8gdGhlIHJlY2lwaWVudHMgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQord2l0aCB0aGUgbGlicmFyeSwgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCitpdC4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworICBPdXIgbWV0aG9kIG9mIHByb3RlY3RpbmcgeW91ciByaWdodHMgaGFzIHR3byBzdGVwczogKDEpIGNvcHlyaWdodAordGhlIGxpYnJhcnksIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwKK3Blcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgorCisgIEFsc28sIGZvciBlYWNoIGRpc3RyaWJ1dG9yJ3MgcHJvdGVjdGlvbiwgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitsaWJyYXJ5LiAgSWYgdGhlIGxpYnJhcnkgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsCit2ZXJzaW9uLCBzbyB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uCit0aGUgb3JpZ2luYWwgYXV0aG9ycycgcmVwdXRhdGlvbnMuCisMCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgY29tcGFuaWVzIGRpc3RyaWJ1dGluZyBmcmVlCitzb2Z0d2FyZSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCB0aHVzIGluIGVmZmVjdAordHJhbnNmb3JtaW5nIHRoZSBwcm9ncmFtIGludG8gcHJvcHJpZXRhcnkgc29mdHdhcmUuICBUbyBwcmV2ZW50IHRoaXMsCit3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkgcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MKK2ZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUgb3JkaW5hcnkKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCB3YXMgZGVzaWduZWQgZm9yIHV0aWxpdHkgcHJvZ3JhbXMuICBUaGlzCitsaWNlbnNlLCB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluCitkZXNpZ25hdGVkIGxpYnJhcmllcy4gIFRoaXMgbGljZW5zZSBpcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkKK29uZTsgYmUgc3VyZSB0byByZWFkIGl0IGluIGZ1bGwsIGFuZCBkb24ndCBhc3N1bWUgdGhhdCBhbnl0aGluZyBpbiBpdCBpcwordGhlIHNhbWUgYXMgaW4gdGhlIG9yZGluYXJ5IGxpY2Vuc2UuCisKKyAgVGhlIHJlYXNvbiB3ZSBoYXZlIGEgc2VwYXJhdGUgcHVibGljIGxpY2Vuc2UgZm9yIHNvbWUgbGlicmFyaWVzIGlzIHRoYXQKK3RoZXkgYmx1ciB0aGUgZGlzdGluY3Rpb24gd2UgdXN1YWxseSBtYWtlIGJldHdlZW4gbW9kaWZ5aW5nIG9yIGFkZGluZyB0byBhCitwcm9ncmFtIGFuZCBzaW1wbHkgdXNpbmcgaXQuICBMaW5raW5nIGEgcHJvZ3JhbSB3aXRoIGEgbGlicmFyeSwgd2l0aG91dAorY2hhbmdpbmcgdGhlIGxpYnJhcnksIGlzIGluIHNvbWUgc2Vuc2Ugc2ltcGx5IHVzaW5nIHRoZSBsaWJyYXJ5LCBhbmQgaXMKK2FuYWxvZ291cyB0byBydW5uaW5nIGEgdXRpbGl0eSBwcm9ncmFtIG9yIGFwcGxpY2F0aW9uIHByb2dyYW0uICBIb3dldmVyLCBpbgorYSB0ZXh0dWFsIGFuZCBsZWdhbCBzZW5zZSwgdGhlIGxpbmtlZCBleGVjdXRhYmxlIGlzIGEgY29tYmluZWQgd29yaywgYQorZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeSwgYW5kIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCit0cmVhdHMgaXQgYXMgc3VjaC4KKworICBCZWNhdXNlIG9mIHRoaXMgYmx1cnJlZCBkaXN0aW5jdGlvbiwgdXNpbmcgdGhlIG9yZGluYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGZvciBsaWJyYXJpZXMgZGlkIG5vdCBlZmZlY3RpdmVseSBwcm9tb3RlIHNvZnR3YXJlCitzaGFyaW5nLCBiZWNhdXNlIG1vc3QgZGV2ZWxvcGVycyBkaWQgbm90IHVzZSB0aGUgbGlicmFyaWVzLiAgV2UKK2NvbmNsdWRlZCB0aGF0IHdlYWtlciBjb25kaXRpb25zIG1pZ2h0IHByb21vdGUgc2hhcmluZyBiZXR0ZXIuCisKKyAgSG93ZXZlciwgdW5yZXN0cmljdGVkIGxpbmtpbmcgb2Ygbm9uLWZyZWUgcHJvZ3JhbXMgd291bGQgZGVwcml2ZSB0aGUKK3VzZXJzIG9mIHRob3NlIHByb2dyYW1zIG9mIGFsbCBiZW5lZml0IGZyb20gdGhlIGZyZWUgc3RhdHVzIG9mIHRoZQorbGlicmFyaWVzIHRoZW1zZWx2ZXMuICBUaGlzIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0bworcGVybWl0IGRldmVsb3BlcnMgb2Ygbm9uLWZyZWUgcHJvZ3JhbXMgdG8gdXNlIGZyZWUgbGlicmFyaWVzLCB3aGlsZQorcHJlc2VydmluZyB5b3VyIGZyZWVkb20gYXMgYSB1c2VyIG9mIHN1Y2ggcHJvZ3JhbXMgdG8gY2hhbmdlIHRoZSBmcmVlCitsaWJyYXJpZXMgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZW0uICAoV2UgaGF2ZSBub3Qgc2VlbiBob3cgdG8gYWNoaWV2ZQordGhpcyBhcyByZWdhcmRzIGNoYW5nZXMgaW4gaGVhZGVyIGZpbGVzLCBidXQgd2UgaGF2ZSBhY2hpZXZlZCBpdCBhcyByZWdhcmRzCitjaGFuZ2VzIGluIHRoZSBhY3R1YWwgZnVuY3Rpb25zIG9mIHRoZSBMaWJyYXJ5LikgIFRoZSBob3BlIGlzIHRoYXQgdGhpcword2lsbCBsZWFkIHRvIGZhc3RlciBkZXZlbG9wbWVudCBvZiBmcmVlIGxpYnJhcmllcy4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4gIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhCisid29yayBiYXNlZCBvbiB0aGUgbGlicmFyeSIgYW5kIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gIFRoZQorZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGlsZSB0aGUgbGF0dGVyIG9ubHkKK3dvcmtzIHRvZ2V0aGVyIHdpdGggdGhlIGxpYnJhcnkuCisKKyAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvciBhIGxpYnJhcnkgdG8gYmUgY292ZXJlZCBieSB0aGUgb3JkaW5hcnkKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgcmF0aGVyIHRoYW4gYnkgdGhpcyBzcGVjaWFsIG9uZS4KKwwKKwkJICBHTlUgTElCUkFSWSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGxpYnJhcnkgd2hpY2gKK2NvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvciBvdGhlciBhdXRob3JpemVkCitwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpYnJhcnkKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4gIEVhY2ggbGljZW5zZWUgaXMKK2FkZHJlc3NlZCBhcyAieW91Ii4KKworICBBICJsaWJyYXJ5IiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnVuY3Rpb25zIGFuZC9vciBkYXRhCitwcmVwYXJlZCBzbyBhcyB0byBiZSBjb252ZW5pZW50bHkgbGlua2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMKKyh3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCisKKyAgVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsKK3doaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkiIG1lYW5zIGVpdGhlciB0aGUgTGlicmFyeSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyCitjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYQorcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZAorc3RyYWlnaHRmb3J3YXJkbHkgaW50byBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcworaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKKworICAiU291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucworYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKK2ludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbgorYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQorc3VjaCBhIHByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvcgord3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcworYW5kIHdoYXQgdGhlIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IGRvZXMuCisgIAorICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5J3MKK2NvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0Cit5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbgorYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QKK2FsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55Cit3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZQorTGlicmFyeS4KKworICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LAorYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYQorZmVlLgorDAorICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBMaWJyYXJ5IG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCisgICAgY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKKyAgICB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzCisgICAgdGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eQorICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAorICAgIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvcgorICAgIHRhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mCisgICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgorCisgICAgKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMKKyAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCisgICAgYXBwbGljYXRpb24uICBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkKKyAgICBhcHBsaWNhdGlvbi1zdXBwbGllZCBmdW5jdGlvbiBvciB0YWJsZSB1c2VkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdAorICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCisgICAgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZQoraXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIExpYnJhcnkuCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkKK3dpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiAgVG8gZG8KK3RoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28KK3RoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKK2luc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAgKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUKK29yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGhhcyBhcHBlYXJlZCwgdGhlbiB5b3UgY2FuIHNwZWNpZnkKK3RoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KK3RoZXNlIG5vdGljZXMuCisMCisgIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKK3RoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsCitzdWJzZXF1ZW50IGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LgorCisgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZgordGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorCisgIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yCitkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybQordW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55CitpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoCittdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICBJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQorZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKK3NvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bworZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZQorTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgorbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuICBTdWNoIGEKK3dvcmssIGluIGlzb2xhdGlvbiwgaXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5LCBhbmQKK3RoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeQorY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0Citjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZQorbGlicmFyeSIuICBUaGUgZXhlY3V0YWJsZSBpcyB0aGVyZWZvcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCitTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KKworICBXaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZQordGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCitkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4KK1doZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlCitsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQordGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KKworICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQorc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lCitmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0CitmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCit3b3JrLiAgKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZQorTGlicmFyeSB3aWxsIHN0aWxsIGZhbGwgdW5kZXIgU2VjdGlvbiA2LikKKworICBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heQorZGlzdHJpYnV0ZSB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuCitBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKK3doZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KKwwKKyAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbXBpbGUgb3IKK2xpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCit3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawordW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCitlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KKworICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKK0xpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieQordGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yaworZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKK2NvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZW0sIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UKK2RpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKK29mIHRoZXNlIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCisgICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCisgICAgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIKKyAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAorICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAorICAgIHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlCisgICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKKyAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAorICAgIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZQorICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCisgICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCisKKyAgICBiKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAorICAgIGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscworICAgIHNwZWNpZmllZCBpbiBTdWJzZWN0aW9uIDZhLCBhYm92ZSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUKKyAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCisKKyAgICBjKSBJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQorICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQorICAgIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS4KKworICAgIGQpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQorICAgIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgorCisgIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQorTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IKK3JlcHJvZHVjaW5nIHRoZSBleGVjdXRhYmxlIGZyb20gaXQuICBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLAordGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseQorZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCitjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCit3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzCit0aGUgZXhlY3V0YWJsZS4KKworICBJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZQorcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQorYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAordXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdQorZGlzdHJpYnV0ZS4KKwwKKyAgNy4gWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKK2ZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQKK2xpYnJhcnksIHByb3ZpZGVkIHRoYXQgdGhlIHNlcGFyYXRlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBiYXNlZCBvbgordGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCitwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKKyAgICBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5CisgICAgZmFjaWxpdGllcy4gIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgICAgU2VjdGlvbnMgYWJvdmUuCisKKyAgICBiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSBvZiB0aGUgZmFjdAorICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCisgICAgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCisgIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCit0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueQorYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKK3JpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywKK29yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMKK3Rlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA5LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDEwLiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeQorc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKwwKKyAgMTEuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CitwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksCithbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIExpYnJhcnkgdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQKK2FuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLAorc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzCitleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZgord3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTMuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3Cit2ZXJzaW9ucyBvZiB0aGUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLgorU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLAorYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBMaWJyYXJ5CitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKKyJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKK2xpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorDAorICAxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsCit3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcworY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIKK2RlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKK29mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nCithbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KK1dBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuCitFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUgorT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKK0tJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKK0xJQlJBUlkgSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FCitUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4KK1dSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZCitBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQorRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUKK0xJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKK1JFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBCitGQUlMVVJFIE9GIFRIRSBMSUJSQVJZIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgU09GVFdBUkUpLCBFVkVOIElGCitTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKK2V2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZworcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCitvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KKworICBUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gIEl0IGlzCitzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlCisiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnkncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIGxpYnJhcnksIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUKKyAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5OTAKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdCEKZGlmZiAtLWdpdCBhL0lOU1RBTEwgYi9JTlNUQUxMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YWZkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9JTlNUQUxMCkBAIC0wLDAgKzEsNjkgQEAKKwlUbyBpbnN0YWxsIHRoZSBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gbWFuYWdlbWVudCBwcm9ncmFtcywKK2p1c3QgZm9sbG93IHRoZSBzdGVwczoKKworMSkgQ2hhbmdlIGRpcmVjdG9yeSBpbnRvIHRoZSB0b3Agb2YgdGhlIGUyZnNwcm9ncyBzb3VyY2UgdHJlZQorCisyKSBDcmVhdGUgYSBidWlsZCBkaXJlY3RvcnkgYW5kIGNkIGludG8gaXQ6CisKKwlta2RpciBidWlsZDsgY2QgYnVpbGQKKworMykgIFJ1biB0aGUgY29uZmlndXJlIHNjcmlwdAorCisJLi4vY29uZmlndXJlCisKKwlJZiB5b3Ugd2lzaCB0byB0dXJuIG9uIEVMRiBzaGFyZWQgbGlicmFyaWVzLCBhZGQgdGhlIG9wdGlvbgorLS1lbmFibGUtZWxmLXNobGlicy4gIElmIHlvdSB3aXNoIHRvIGJ1aWxkIHByb2ZpbGluZyBsaWJyYXJpZXMsIGFkZAordGhlIG9wdGlvbiAtLWVuYWJsZS1wcm9maWxlLgorCisJTm90ZSB0aGF0IGlmIHlvdSBhcmUgYnVpbGRpbmcgb24gYW4gb2xkZXIgc3lzdGVtIChpLmUuLCBhIDIuNAora2VybmVsIGFuZC9vciBnbGliYyAyLjIpLCB0aGUgdXNlIG9mIHRocmVhZCBsb2NhbCBzdG9yYWdlIHdpbGwgcHJvYmFibHkKK2NhdXNlIHByb2dyYW1zIHRoYXQgdXNlIHRoZSB1dWlkIGxpYnJhcnkgdG8gY29yZSBkdW1wLiAgVG8gZGlzYWJsZQordGhyZWFkIGxvY2FsIHN0b3JhZ2UsIHVzZSB0aGUgY29uZmlndXJlIG9wdGlvbiAtLWRpc2FibGUtdGxzLgorCis0KSAgQ29tcGlsZSB0aGUgcHJvZ3JhbXMKKworCW1ha2UKKworNSkgICBDaGVjayB0byBtYWtlIHN1cmUgdGhlIGluc3RhbGxhdGlvbiBidWlsdCBjb3JyZWN0bHk6CisKKwltYWtlIGNoZWNrCisKKzYpICBJbnN0YWxsIHRoZSBwcm9ncmFtcworCisJUnVuIGBtYWtlIGluc3RhbGwnCisKKzcpICBJbnN0YWxsIHRoZSBpbmNsdWRlIGZpbGVzIGFuZCBsaWJyYXJpZXMKKworCVlvdSBjYW4gcnVuIGBtYWtlIGluc3RhbGwtbGlicycgdG8gaW5zdGFsbCB0aGUgaW5jbHVkZSBmaWxlcyBhbmQKK2xpYnJhcmllcy4gIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpbnN0YWxsYXRpb24gaXMgbm90IG5lZWRlZCBmb3IgdGhlCitwcm9ncmFtcyB0byB3b3JrLiAgSXQgaXMgb25seSBuZWVkZWQgaWYgeW91IGV4cGVjdCB0byBkZXZlbG9wIG90aGVyCitwcm9ncmFtcyB1c2luZyB0aGUgbGlicmFyaWVzIG9yIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgb3RoZXIgcHJvZ3JhbQordXNpbmcgdGhlc2UgbGlicmFyaWVzIChsaWtlIHRoZSA0LjRCU0QgZHVtcCBhbmQgcmVzdG9yZSBwb3J0KS4KKworOCkgIFJlbW92ZSBhbnkgcHJlLWZvcm1hdHRlZCBtYW4gcGFnZXMuICAKKworCVNvbWUgZGlzdHJpYnV0aW9ucyB3aWxsIGhhdmUgcHJlLWZvcm1hdHRlZCBtYW51YWwgcGFnZXMgd2hpY2gKK3dpbGwgYWx3YXlzIGJlIGRpc3BsYXllZCBpbiBwcmVmZXJlbmNlIHRvIG5ld2VyIG1hbiBwYWdlcyBpbiAvdXNyL21hbi4KK0lmIHRoaXMgaXMgdGhlIGNhc2UsIHlvdSBtYXkgbmVlZCB0byBtYW51YWxseSByZW1vdmUgdGhlbSBpbiBvcmRlciB0bworc2VlIHRoZSBjb3JyZWN0IG1hbnVhbCBwYWdlcy4gIFRoZSBzaGVsbCBzY3JpcHQgaW4KK2luc3RhbGwtdXRpbHMvcmVtb3ZlX3ByZWZvcm1hdF9tYW5wYWdlcyBtYXkgYmUgaGVscGZ1bCBpbiBkb2luZyBzby4KKworOSkgIE1ha2Ugc3VyZSB5b3VyIC9ldGMvZnN0YWIgZmlsZSBpcyBjb3JyZWN0LgorCisJU29tZSBkaXN0cmlidXRpb25zIGluc3RhbGwgYW4gL2V0Yy9mc3RhYiB3aGljaCBpcyBtaXNzaW5nIHRoZQorZmlmdGggYW5kIHNpeHRoIGZpZWxkIG9mIGZpbGVzeXN0ZW0gZW50cnksIHdoaWNoIGFyZSB0aGUgZHVtcAorZnJlcXVlbmN5LCBhbmQgdGhlIGZzY2sgcGFzcyBudW1iZXIsIHJlc3BlY3RpdmVseS4gIFRoZSBwcm9ibGVtIHdpdGgKK3RoaXMgaXMgdGhhdCB0aGUgZ2V0bW50ZW50KCkgbGlicmFyeSByb3V0aW5lIGludGVycHJldHMgdGhvc2UgbWlzc2luZworZmllbGRzIGFzICIwIiwgYW5kIGEgcGFzcyBudW1iZXIgb2YgMCBpcyBkb2N1bWVudGVkIGFzIG1lYW5pbmcgdGhhdAorZnNjayBzaG91bGQgbm90IGNoZWNrIHRoYXQgcGFydGljdWxhciBmaWxlc3lzdGVtLiAgSWYgeW91ciBlbnRyaWVzIGluCit5b3VyIC9ldGMvZnN0YWIgZmlsZSBsb29rIGxpa3MgdGhpczoKKworL2Rldi9oZGE0ICAgICAgIC8gICAgICAgIGV4dDIgICAgICAgIGRlZmF1bHRzCisKK3lvdSBzaG91bGQgYWRkICIxIDEiIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lLCBzbyB0aGF0IHRoZXkgbG9vayBsaWtlIHRoaXM6CisKKy9kZXYvaGRhNCAgICAgICAvICAgICAgICBleHQyICAgICAgICBkZWZhdWx0cwkxCTEKKworCVRoZXJlIGlzIGEgc2NyaXB0IGluIGluc3RhbGwtdXRpbHMvY29udmZzdGFiIChkb25hdGVkIGJ5CitNaWNoYWVsIFdlbGxlcikgdGhhdCBtYXkgaGVscCB5b3UgY29ycmVjdCB5b3VyIC9ldGMvZnN0YWIgZmlsZS4KKwpkaWZmIC0tZ2l0IGEvSU5TVEFMTC5lbGZiaW4gYi9JTlNUQUxMLmVsZmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjU0YWExCi0tLSAvZGV2L251bGwKKysrIGIvSU5TVEFMTC5lbGZiaW4KQEAgLTAsMCArMSw1MyBAQAorTk9URTogVGhpcyBpcyB0aGUgRUxGIHZlcnNpb24gb2YgdGhlIGJpbmFyeSBkaXN0cmlidXRpb24uICBJZiB5b3UgaGF2ZQorYSBETEwgc3lzdGVtLCBwbGVhc2UgY29tcGlsZSBlMmZzcHJvZ3MgZnJvbSBzb3VyY2VzIHlvdXJzZWxmLiAgKEluCitmYWN0LCBpbiBnZW5lcmFsIHlvdSdyZSBiZXR0ZXIgb2ZmIGNvbXBpbGluZyBlMmZzcHJvZ3MgZnJvbSBzb3VyY2VzCitpbnN0ZWFkIG9mIHVzaW5nIHByZWNvbXBpbGVkIGJpbmFyaWVzLikgIAorCitBbHNvIHBsZWFzZSBub3RlIHRoYXQgdGhlc2UgYmluYXJpZXMgYXNzdW1lIHRoZSB1c2Ugb2YgdGhlIEdOVSBMaWJjLgorSWYgeW91J3JlIHN0aWxsIHVzaW5nIGxpYmM1LCB5b3UnbGwgbmVlZCBidWlsZCBlMmZzcHJvZ3MgZnJvbSBzb3VyY2UuCisKKwlUbyBpbnN0YWxsIHRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uIG9mIHRoZSBzZWNvbmQgZXh0ZW5kZWQgZmlsZQorc3lzdGVtIG1hbmFnZW1lbnQgcHJvZ3JhbXMsIGp1c3QgZm9sbG93IHRoZSBzdGVwczoKKworMSkgSW5zdGFsbCB0aGlzIHRhciBmaWxlIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworCWd1bnppcCA8IGUyZnNwcm9ncy0xLjEzLWVsZmJpbi50YXIuZ3ogfCAoY2QgLzsgdGFyIFN4dnBmIC0gKQorCisyKSBSdW4gbGRjb25maWcgdG8gdXBkYXRlIHRoZSBzaGFyZWQgbGlicmFyeSBwb2ludGVycy4KKworICAgICAgICBBcyByb290LCB0eXBlIC9zYmluL2xkY29uZmlnLiBUaGlzIHdpbGwgdXBkYXRlIHRoZSBsaW5rcyB0bwordGhlIHNoYXJlZCBsaWJyYXJpZXMgaW5jbHVkZWQgaW4gdGhlIGRpc3RyaWJ1dGlvbi4gWW91IGNhbiB0aGVuIHJlbW92ZQordGhlIG9sZCB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyaWVzIGZyb20gL2xpYi4gIAorCiszKSBSZW1vdmUgYW55IHByZS1mb3JtYXR0ZWQgbWFuIHBhZ2VzLiAgCisKKwlTb21lIGRpc3RyaWJ1dGlvbnMgd2lsbCBoYXZlIHByZS1mb3JtYXR0ZWQgbWFudWFsIHBhZ2VzIHdoaWNoCit3aWxsIGFsd2F5cyBiZSBkaXNwbGF5ZWQgaW4gcHJlZmVyZW5jZSB0byBuZXdlciBtYW4gcGFnZXMgaW4gL3Vzci9tYW4uCitJZiB0aGlzIGlzIHRoZSBjYXNlLCB5b3UgbWF5IG5lZWQgdG8gbWFudWFsbHkgcmVtb3ZlIHRoZW0gaW4gb3JkZXIgdG8KK3NlZSB0aGUgY29ycmVjdCBtYW51YWwgcGFnZXMuICBUaGUgc2hlbGwgc2NyaXB0IGluCitpbnN0YWxsLXV0aWxzL3JlbW92ZV9wcmVmb3JtYXRfbWFucGFnZXMgbWF5IGJlIGhlbHBmdWwgaW4gZG9pbmcgc28uCisKKzQpIE1ha2Ugc3VyZSB5b3VyIC9ldGMvZnN0YWIgZmlsZSBpcyBjb3JyZWN0LgorCisJU29tZSBkaXN0cmlidXRpb25zIGluc3RhbGwgYW4gL2V0Yy9mc3RhYiB3aGljaCBpcyBtaXNzaW5nIHRoZQorZmlmdGggYW5kIHNpeHRoIGZpZWxkIG9mIGZpbGVzeXN0ZW0gZW50cnksIHdoaWNoIGFyZSB0aGUgZHVtcAorZnJlcXVlbmN5LCBhbmQgdGhlIGZzY2sgcGFzcyBudW1iZXIsIHJlc3BlY3RpdmVseS4gIFRoZSBwcm9ibGVtIHdpdGgKK3RoaXMgaXMgdGhhdCB0aGUgZ2V0bW50ZW50KCkgbGlicmFyeSByb3V0aW5lIGludGVycHJldHMgdGhvc2UgbWlzc2luZworZmllbGRzIGFzICIwIiwgYW5kIGEgcGFzcyBudW1iZXIgb2YgMCBpcyBkb2N1bWVudGVkIGFzIG1lYW5pbmcgdGhhdAorZnNjayBzaG91bGQgbm90IGNoZWNrIHRoYXQgcGFydGljdWxhciBmaWxlc3lzdGVtLiAgSWYgeW91ciBlbnRyaWVzIGluCit5b3VyIC9ldGMvZnN0YWIgZmlsZSBsb29rIGxpa3MgdGhpczoKKworL2Rldi9oZGE0ICAgICAgIC8gICAgICAgIGV4dDIgICAgICAgIGRlZmF1bHRzCisKK3lvdSBzaG91bGQgYWRkICIxIDEiIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lLCBzbyB0aGF0IHRoZXkgbG9vayBsaWtlIHRoaXM6CisKKy9kZXYvaGRhNCAgICAgICAvICAgICAgICBleHQyICAgICAgICBkZWZhdWx0cwkxCTEKKworCVRoZXJlIGlzIGEgc2NyaXB0IGluIGluc3RhbGwtdXRpbHMvY29udmZzdGFiIChkb25hdGVkIGJ5CitNaWNoYWVsIFdlbGxlcikgdGhhdCBtYXkgaGVscCB5b3UgY29ycmVjdCB5b3VyIC9ldGMvZnN0YWIgZmlsZS4KKworNSkgQ2xlYW51cCBmaWxlcyBmcm9tIHRoZSBpbnN0YWxsYXRpb24uCisKKwlXaGVuIHlvdSdyZSBkb25lIHdpdGggdGhlIGluc3RhbGxhdGlvbiwgeW91IHdpbGwgcHJvYmFibHkgd2FudAordG8gcmVtb3ZlIC9JTlNUQUxMICh0aGlzIGZpbGUpLCAvUkVBRE1FLCBhbmQgL2luc3RhbGwtdXRpbHMgZnJvbSB5b3VyCityb290IGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvTUNPTkZJRy5pbiBiL01DT05GSUcuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEwMDNjZgotLS0gL2Rldi9udWxsCisrKyBiL01DT05GSUcuaW4KQEAgLTAsMCArMSwyOTIgQEAKKyMgQmVnaW5uaW5nIG9mIGZpbGUgTUNPTkZJRworCithbGw6OgorCitjaGVjazo6CisKK1NIRUxMID0gL2Jpbi9zaAorCitDT01QUkVTU19FWFQgPSBneiBiejIgYnogWgorCitwcmVmaXggPSBAcHJlZml4QAorcm9vdF9wcmVmaXggPSBAcm9vdF9wcmVmaXhACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK3Jvb3RfYmluZGlyID0gQHJvb3RfYmluZGlyQAorcm9vdF9zYmluZGlyID0gQHJvb3Rfc2JpbmRpckAKK3Jvb3RfbGliZGlyID0gQHJvb3RfbGliZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitiaW5kaXIgPSBAYmluZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorbGliZGlyID0gQGxpYmRpckAKK2RhdGFkaXI9IEBkYXRhZGlyQAorbG9jYWxlZGlyID0gJChkYXRhZGlyKS9sb2NhbGUKK3Jvb3Rfc3lzY29uZmRpcj0gQHJvb3Rfc3lzY29uZmRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK21hbmRpciA9IEBtYW5kaXJACittYW4xZGlyID0gJChtYW5kaXIpL21hbjEKK21hbjNkaXIgPSAkKG1hbmRpcikvbWFuMworbWFuNWRpciA9ICQobWFuZGlyKS9tYW41CittYW44ZGlyID0gJChtYW5kaXIpL21hbjgKK2luZm9kaXIgPSBAaW5mb2RpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKworQFNFVF9NQUtFQAorCitAaWZHTlVtYWtlQCBWID0KK0BpZkdOVW1ha2VAIGlmZXEgKCQoc3RyaXAgJChWKSksKQorQGlmR05VbWFrZUAgIyAgRSA9IEBlY2hvCitAaWZHTlVtYWtlQCAjICBFUyA9IGVjaG8KK0BpZkdOVW1ha2VAICMgIFEgPSBACitAaWZHTlVtYWtlQCAgICBFID0gQEVACitAaWZHTlVtYWtlQCAgICBFUyA9IEBFU0AKK0BpZkdOVW1ha2VAICAgIFEgPSBAUUAKK0BpZkdOVW1ha2VAIGVsc2UKK0BpZkdOVW1ha2VAICAgIEUgPSBAXCMKK0BpZkdOVW1ha2VAICAgIEVTID0gXCMKK0BpZkdOVW1ha2VAICAgIFEgPQorQGlmR05VbWFrZUAgZW5kaWYKKworQGlmTm90R05VbWFrZUAgRSA9IEBFQAorQGlmTm90R05VbWFrZUAgRVMgPSBARVNACitAaWZOb3RHTlVtYWtlQCBRID0gQFFACisKK0BpZkdOVW1ha2VAIENIRUNLPXNwYXJzZQorQGlmR05VbWFrZUAgQ0hFQ0tfT1BUUz0tV3NwYXJzZS1hbGwgLVduby10cmFuc3BhcmVudC11bmlvbiAtV25vLXJldHVybi12b2lkIC1Xbm8tdW5kZWYgLVduby1ub24tcG9pbnRlci1udWxsCitAaWZHTlVtYWtlQCBpZmVxICgiJChDKSIsICIyIikKK0BpZkdOVW1ha2VAICAgQ0hFQ0tfQ01EPSQoQ0hFQ0spICQoQ0hFQ0tfT1BUUykgLVdiaXR3aXNlIC1EX19DSEVDS19FTkRJQU5fXworQGlmR05VbWFrZUAgZWxzZQorQGlmR05VbWFrZUAgICBpZmVxICgiJChDKSIsICIxIikKK0BpZkdOVW1ha2VAICAgICBDSEVDS19DTUQ9JChDSEVDSykgJChDSEVDS19PUFRTKQorQGlmR05VbWFrZUAgICAgZWxzZQorQGlmR05VbWFrZUAgICAgIENIRUNLX0NNRD1AdHJ1ZQorQGlmR05VbWFrZUAgICBlbmRpZgorQGlmR05VbWFrZUAgZW5kaWYKKworQGlmTm90R05VbWFrZUAgQ0hFQ0tfQ01EPUB0cnVlCisKK0NDID0gQENDQAorQlVJTERfQ0MgPSBAQlVJTERfQ0NACitDRkxBR1MgPSBAQ0ZMQUdTQCBAREVGU0AKK0NQUEZMQUdTID0gQElOQ0xVREVTQAorQUxMX0NGTEFHUyA9ICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKQorTERGTEFHUyA9IEBMREZMQUdTQAorQUxMX0xERkxBR1MgPSAkKExERkxBR1MpIEBMREZMQUdfRFlOQU1JQ0AKK0xERkxBR1NfU1RBVElDID0gJChMREZMQUdTKSBATERGTEFHX1NUQVRJQ0AKK0JVSUxEX0NGTEFHUyA9IEBCVUlMRF9DRkxBR1NACitCVUlMRF9MREZMQUdTID0gQEJVSUxEX0xERkxBR1NACitSRFlOQU1JQyA9IEBSRFlOQU1JQ0AKK0xJTktfQlVJTERfRkxBR1MgPSBATElOS19CVUlMRF9GTEFHU0AKK0xJTktfSU5TVEFMTF9GTEFHUyA9IEBMSU5LX0lOU1RBTExfRkxBR1NACitSTSA9IEBSTUAKK0xOID0gQExOQAorTE5fUyA9IEBMTl9TQAorTVYgPSBATVZACitDUCA9IEBDUEAKK0NITU9EID0gQENITU9EQAorQVIgPSBAQVJACitBV0sgPSBAQVdLQAorU0VEID0gQFNFREAKK1BFUkwgPSBAUEVSTEAKK1JBTkxJQiA9IEBSQU5MSUJACitTVFJJUCA9IEBTVFJJUEAKK0xEID0gJChQVVJFKSBAQ0NACitBUlVQRCA9ICQoQVIpIHIKK0FSR0VOID0gJChBUikgcmMKK0xEQ09ORklHID0gQExEQ09ORklHQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKKworIworIyBMaWJyYXJ5IGRlZmluaXRpb25zCisjCitMSUIgPSAkKHRvcF9idWlsZGRpcikvbGliCitMSUJTUyA9ICQoTElCKS9saWJzc0BMSUJfRVhUQCBAUFJJVkFURV9MSUJTX0NNVEAgQERMT1BFTl9MSUJACitMSUJDT01fRVJSID0gJChMSUIpL2xpYmNvbV9lcnJATElCX0VYVEAgQFBSSVZBVEVfTElCU19DTVRAIEBTRU1fSU5JVF9MSUJACitMSUJFMlAgPSAkKExJQikvbGliZTJwQExJQl9FWFRACitMSUJFWFQyRlMgPSAkKExJQikvbGliZXh0MmZzQExJQl9FWFRACitMSUJVVUlEID0gQExJQlVVSURAIEBTT0NLRVRfTElCQAorTElCUVVPVEEgPSBAU1RBVElDX0xJQlFVT1RBQAorTElCQkxLSUQgPSBATElCQkxLSURAIEBQUklWQVRFX0xJQlNfQ01UQCAkKExJQlVVSUQpCitMSUJJTlRMID0gQExJQklOVExACitTWVNMSUJTID0gQExJQlNACitERVBMSUJTUyA9ICQoTElCKS9saWJzc0BMSUJfRVhUQAorREVQTElCQ09NX0VSUiA9ICQoTElCKS9saWJjb21fZXJyQExJQl9FWFRACitERVBMSUJVVUlEID0gQERFUExJQlVVSURACitERVBMSUJRVU9UQSA9IEBERVBTVEFUSUNfTElCUVVPVEFACitERVBMSUJCTEtJRCA9IEBERVBMSUJCTEtJREAgQFBSSVZBVEVfTElCU19DTVRAICQoREVQTElCVVVJRCkKK1RFU1RFTlYgPSBMRF9MSUJSQVJZX1BBVEg9IiQoTElCKTokJHtMRF9MSUJSQVJZX1BBVEh9IiBEWUxEX0xJQlJBUllfUEFUSD0iJChMSUIpOiQke0RZTERfTElCUkFSWV9QQVRIfSIKKworU1RBVElDX0xJQlNTID0gJChMSUIpL2xpYnNzQFNUQVRJQ19MSUJfRVhUQCBARExPUEVOX0xJQkAKK1NUQVRJQ19MSUJDT01fRVJSID0gJChMSUIpL2xpYmNvbV9lcnJAU1RBVElDX0xJQl9FWFRAIEBTRU1fSU5JVF9MSUJACitTVEFUSUNfTElCRTJQID0gJChMSUIpL2xpYmUycEBTVEFUSUNfTElCX0VYVEAKK1NUQVRJQ19MSUJFWFQyRlMgPSAkKExJQikvbGliZXh0MmZzQFNUQVRJQ19MSUJfRVhUQAorU1RBVElDX0xJQlVVSUQgPSBAU1RBVElDX0xJQlVVSURAIEBTT0NLRVRfTElCQAorU1RBVElDX0xJQlFVT1RBID0gQFNUQVRJQ19MSUJRVU9UQUAKK1NUQVRJQ19MSUJCTEtJRCA9IEBTVEFUSUNfTElCQkxLSURAICQoU1RBVElDX0xJQlVVSUQpCitERVBTVEFUSUNfTElCU1MgPSAkKExJQikvbGlic3NAU1RBVElDX0xJQl9FWFRACitERVBTVEFUSUNfTElCQ09NX0VSUiA9ICQoTElCKS9saWJjb21fZXJyQFNUQVRJQ19MSUJfRVhUQAorREVQU1RBVElDX0xJQlVVSUQgPSBAREVQU1RBVElDX0xJQlVVSURACitERVBTVEFUSUNfTElCUVVPVEEgPSBAREVQU1RBVElDX0xJQlFVT1RBQAorREVQU1RBVElDX0xJQkJMS0lEID0gQERFUFNUQVRJQ19MSUJCTEtJREAgJChERVBTVEFUSUNfTElCVVVJRCkKKworUFJPRklMRURfTElCU1MgPSAkKExJQikvbGlic3NAUFJPRklMRURfTElCX0VYVEAgQERMT1BFTl9MSUJACitQUk9GSUxFRF9MSUJDT01fRVJSID0gJChMSUIpL2xpYmNvbV9lcnJAUFJPRklMRURfTElCX0VYVEAgQFNFTV9JTklUX0xJQkAKK1BST0ZJTEVEX0xJQkUyUCA9ICQoTElCKS9saWJlMnBAUFJPRklMRURfTElCX0VYVEAKK1BST0ZJTEVEX0xJQkVYVDJGUyA9ICQoTElCKS9saWJleHQyZnNAUFJPRklMRURfTElCX0VYVEAKK1BST0ZJTEVEX0xJQlVVSUQgPSBAUFJPRklMRURfTElCVVVJREAgQFNPQ0tFVF9MSUJACitQUk9GSUxFRF9MSUJRVU9UQSA9IEBQUk9GSUxFRF9MSUJRVU9UQUAKK1BST0ZJTEVEX0xJQkJMS0lEID0gQFBST0ZJTEVEX0xJQkJMS0lEQCAkKFBST0ZJTEVEX0xJQlVVSUQpCitERVBQUk9GSUxFRF9MSUJTUyA9ICQoTElCKS9saWJzc0BQUk9GSUxFRF9MSUJfRVhUQAorREVQUFJPRklMRURfTElCQ09NX0VSUiA9ICQoTElCKS9saWJjb21fZXJyQFBST0ZJTEVEX0xJQl9FWFRACitERVBQUk9GSUxFRF9MSUJVVUlEID0gQFBST0ZJTEVEX0xJQlVVSURACitERVBQUk9GSUxFRF9MSUJRVU9UQSA9IEBQUk9GSUxFRF9MSUJRVU9UQUAKK0RFUFBST0ZJTEVEX0xJQkJMS0lEID0gQFBST0ZJTEVEX0xJQkJMS0lEQCAkKERFUFBST0ZJTEVEX0xJQlVVSUQpCisKKyMKKyMgQSBmYXN0IHN1YnN0aXR1dGlvbiBjb21tYW5kIGZvciBmaXhpbmcgdXAgbWFuIHBhZ2VzLCBzaGVsbCBzY3JpcHRzLCBldGMuCisjCitTVUJTVF9DT05GPSQodG9wX2J1aWxkZGlyKS91dGlsL3N1YnN0LmNvbmYKK1NVQlNUSVRVVEU9ICQodG9wX2J1aWxkZGlyKS91dGlsL3N1YnN0IC1mICQoU1VCU1RfQ09ORikKK1NVQlNUSVRVVEVfVVBUSU1FPSAkKHRvcF9idWlsZGRpcikvdXRpbC9zdWJzdCAtdCAtZiAkKFNVQlNUX0NPTkYpCitERVBfU1VCU1RJVFVURT0gJCh0b3BfYnVpbGRkaXIpL3V0aWwvc3Vic3QgJChTVUJTVF9DT05GKQorCiskKHRvcF9idWlsZGRpcikvdXRpbC9zdWJzdDoKKwljZCAkKHRvcF9idWlsZGRpcikvdXRpbCA7ICQoTUFLRSkgc3Vic3QKKworIworIyBTY3JpcHQgZm9yIGluc3RhbGxpbmcgc3ltbGlua3MgKGZvciBzaGFyZWQgbGlicmFyaWVzKQorIworJCh0b3BfYnVpbGRkaXIpL3V0aWwvaW5zdGFsbC1zeW1saW5rOiAkKHRvcF9zcmNkaXIpL3V0aWwvaW5zdGFsbC1zeW1saW5rLmluIFwKKwkJCSAgICAgICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJY2QgJCh0b3BfYnVpbGRkaXIpOyBDT05GSUdfRklMRVM9dXRpbC9pbnN0YWxsLXN5bWxpbmsgLi9jb25maWcuc3RhdHVzCisJY2htb2QgK3ggJCh0b3BfYnVpbGRkaXIpL3V0aWwvaW5zdGFsbC1zeW1saW5rCisKKyQodG9wX2J1aWxkZGlyKS91dGlsL3N5bWxpbmtzOgorCWNkICQodG9wX2J1aWxkZGlyKS91dGlsIDsgJChNQUtFKSBzeW1saW5rcworCitJTlNUQUxMX1NZTUxJTksgPSAvYmluL3NoICQodG9wX2J1aWxkZGlyKS91dGlsL2luc3RhbGwtc3ltbGluayBcCisJCQlAU1lNTElOS19SRUxBVElWRUAgXAorCQkJLS1zeW1saW5rcz0kKHRvcF9idWlsZGRpcikvdXRpbC9zeW1saW5rcworREVQX0lOU1RBTExfU1lNTElOSyA9ICQodG9wX2J1aWxkZGlyKS91dGlsL2luc3RhbGwtc3ltbGluayBcCisJCQkkKHRvcF9idWlsZGRpcikvdXRpbC9zeW1saW5rcworCisjCisjIFdhcm5pbmcgZmxhZ3MKKyMKKyMgUnVuIG1ha2UgZ2NjLXdhbGwgdG8gZG8gYSBidWlsZCB3aXRoIHdhcm5pbmcgbWVzc2FnZXMuCisjCisjCitXRkxBR1M9CQktc3RkPWM5OSAtRF9YT1BFTl9TT1VSQ0U9NjAwIC1EX0dOVV9TT1VSQ0UgXAorCQkJLXBlZGFudGljICQoV0ZMQUdTX0VYVFJBKSBcCisJCQktV2FsbCAtVyAtV3dyaXRlLXN0cmluZ3MgLVdwb2ludGVyLWFyaXRoIFwKKwkJCS1XY2FzdC1xdWFsIC1XY2FzdC1hbGlnbiAtV25vLXZhcmlhZGljLW1hY3JvcyBcCisJCQktV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIFwKKwkJCS1XZm9ybWF0LXNlY3VyaXR5ICAtV2Zvcm1hdC1ub25saXRlcmFsIFwKKwkJCS1XbWlzc2luZy1mb3JtYXQtYXR0cmlidXRlIC1PMiAtV3N0cmljdC1hbGlhc2luZyBcCisJCQktV25lc3RlZC1leHRlcm5zIC1XaW5saW5lIC1ETk9fSU5MSU5FX0ZVTkNTIC1Xc2hhZG93IFwKKwkJCS1VRU5BQkxFX05MUworCitnY2Mtd2FsbC1uZXc6CisJKG1ha2UgQ0ZMQUdTPSJAQ0ZMQUdTQCAkKFdGTEFHUykiID4gL2Rldi9udWxsKSAyPiYxIHwgc2VkIC1mICQodG9wX3NyY2RpcikvdXRpbC9nY2Mtd2FsbC1jbGVhbnVwIAorCitnY2Mtd2FsbDoKKwltYWtlIGNsZWFuID4gL2Rldi9udWxsCisJbWFrZSBnY2Mtd2FsbC1uZXcKKworIworIyBJbnN0YWxsYXRpb24gdXNlciBhbmQgZ3JvdXBzCisjCitCSU5HUlA9CQliaW4KK0JJTk9XTj0JCWJpbgorQklOTU9ERT0JNTU1CitJTkNHUlA9CQliaW4KK0lOQ09XTj0JCWJpbgorSU5DTU9ERT0JNDQ0CitMSUJPV049CQliaW4KK0xJQkdSUD0JCWJpbgorTElCTU9ERT0JNDQ0CitNQU5HUlA9CQliaW4KK01BTk9XTj0JCWJpbgorTUFOTU9ERT0JNDQ0CisKKyMKKyMgQXV0b2NvbmYgbWFnaWMuLi4KKyMKKworREVQX0xJQl9NQUtFRklMRVMgPSAkKHRvcF9zcmNkaXIpL2xpYi9NYWtlZmlsZS5saWJyYXJ5IFwKKwkkKHRvcF9zcmNkaXIpL2xpYi9NYWtlZmlsZS5lbGYtbGliICBcCisJJCh0b3Bfc3JjZGlyKS9saWIvTWFrZWZpbGUuYnNkLWxpYiBcCisJJCh0b3Bfc3JjZGlyKS9saWIvTWFrZWZpbGUuZGFyd2luLWxpYiBcCisJJCh0b3Bfc3JjZGlyKS9saWIvTWFrZWZpbGUuc29sYXJpcy1saWIgXAorCSQodG9wX3NyY2RpcikvbGliL01ha2VmaWxlLnByb2ZpbGUKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlCisJY2QgJCh0b3BfYnVpbGRkaXIpOyAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCisKKyQodG9wX2J1aWxkZGlyKS9NQ09ORklHOiAkKHRvcF9zcmNkaXIpL01DT05GSUcuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwljZCAkKHRvcF9idWlsZGRpcik7IENPTkZJR19GSUxFUz1NQ09ORklHIC4vY29uZmlnLnN0YXR1cworCiskKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oOiAkKHRvcF9zcmNkaXIpL2xpYi9jb25maWcuaC5pbiBcCisJCQkgICAgICAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCWNkICQodG9wX2J1aWxkZGlyKTsgQ09ORklHX0ZJTEVTPWxpYi9jb25maWcuaCAuL2NvbmZpZy5zdGF0dXMKKworJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oOiAkKERFUF9TVUJTVElUVVRFKSAkKHRvcF9zcmNkaXIpL2xpYi9kaXJwYXRocy5oLmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFKSAkKHRvcF9zcmNkaXIpL2xpYi9kaXJwYXRocy5oLmluICRACisKKyQodG9wX2J1aWxkZGlyKS9saWIvc3Vic3RpdHV0ZV9zaDogJCh0b3Bfc3JjZGlyKS9saWIvc3Vic3RpdHV0ZV9zaC5pbiBcCisJCSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJY2QgJCh0b3BfYnVpbGRkaXIpOyBDT05GSUdfRklMRVM9bGliL3N1YnN0aXR1dGVfc2ggLi9jb25maWcuc3RhdHVzCisKKyQodG9wX2J1aWxkZGlyKS91dGlsL3N1YnN0LmNvbmY6ICQodG9wX3NyY2RpcikvdXRpbC9zdWJzdC5jb25mLmluIFwKKwkJJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwljZCAkKHRvcF9idWlsZGRpcik7IENPTkZJR19GSUxFUz11dGlsL3N1YnN0LmNvbmYgLi9jb25maWcuc3RhdHVzCisKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL01DT05GSUcgXAorCQkkKERFUF9NQUtFRklMRSkgJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwljZCAkKHRvcF9idWlsZGRpcik7IENPTkZJR19GSUxFUz0kKG15X2RpcikvTWFrZWZpbGUgLi9jb25maWcuc3RhdHVzCisKK0BNQUlOVEFJTkVSX0NNVEAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KK0BNQUlOVEFJTkVSX0NNVEAJY2QgJCh0b3Bfc3JjZGlyKSAmJiBhdXRvaGVhZGVyICYmIGF1dG9jb25mCisKK2NvdmVyYWdlLnR4dDogTWFrZWZpbGUgJChTUkNTKQorCWlmIHRlc3QgLW4gIiQoU1JDUykiOyB0aGVuIFwKKwkJZ2NvdiAtcyAkKHRvcF9zcmNkaXIpIC1vIC4gJChTUkNTKSA+IGNvdmVyYWdlLnR4dCAyPiYxIDsgXAorCWZpCisKK2NsZWFuOjoKKwkkKFJNKSAtZiAqLmdjZGEgKi5nY292ICouZ2NubyBjb3ZlcmFnZS50eHQKKworIworIyBNYWtlIGRlcGVuZCBtYWdpYy4uLgorIworCisuZGVwZW5kOiBNYWtlZmlsZSAkKFNSQ1MpICQodG9wX3NyY2RpcikvZGVwZml4LnNlZCAkKHRvcF9zcmNkaXIpL3dvcmR3cmFwLnBsCisJaWYgdGVzdCAtbiAiJChTUkNTKSIgOyB0aGVuIFwKKwkJJChDQykgLU0gJChBTExfQ0ZMQUdTKSAkKERFUEVORF9DRkxBR1MpICQoU1JDUykgfCBcCisJCQkkKFNFRCkgLWYgJCh0b3Bfc3JjZGlyKS9kZXBmaXguc2VkIFwKKwkJCSAgICAtZSAnczsgJChzcmNkaXIpLzsgJCQoc3JjZGlyKS87ZycgXAorCQkJICAgIC1lICdzOyAkKHRvcF9zcmNkaXIpLzsgJCQodG9wX3NyY2RpcikvO2cnIFwKKwkJCSAgICAtZSAnczsgJCh0b3BfYnVpbGRkaXIpLzsgJCQodG9wX2J1aWxkZGlyKS87ZycgXAorCQkJICAgIC1lICdzOyBcLi87IDtnJyBcCisJCQkgICAgLWUgJy9eIy9kJyBcCisJCQkgICAgLWUgJy9eICpcXCQkL2QnIHwgXAorCQkJJChQRVJMKSAkKHRvcF9zcmNkaXIpL3dvcmR3cmFwLnBsID4gLmRlcGVuZDsgXAorCWVsc2UgOjsgZmkKKworZGVwZW5kOjogLmRlcGVuZAorCWlmIHRlc3QgLW4gIiQoU1JDUykiIDsgdGhlbiBcCisJCXNlZCAtZSAnL14jICsrKyBEZXBlbmRlbmN5IGxpbmUgZWF0ZXIgKysrLywkJGQnIFwKKwkJCTwgJChzcmNkaXIpL01ha2VmaWxlLmluIHwgY2F0IC0gLmRlcGVuZCBcCisJCQk+ICQoc3JjZGlyKS9NYWtlZmlsZS5pbi5uZXc7IFwKKwlpZiBjbXAgLXMgJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5pbi5uZXcgOyB0aGVuIFwKKwkJJChSTSkgJChzcmNkaXIpL01ha2VmaWxlLmluLm5ldyA7IFwKKwllbHNlIFwKKwkJJChNVikgJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5pbi5vbGQ7IFwKKwkJJChNVikgJChzcmNkaXIpL01ha2VmaWxlLmluLm5ldyAkKHNyY2RpcikvTWFrZWZpbGUuaW47IFwKKwlmaSA7IGVsc2UgOjsgZmkKKworIyBFbmQgb2YgZmlsZSBNQ09ORklHCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NzI3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDE1MSBAQAorc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3RvcF9idWlsZGRpciA9IC4KK215X2RpciA9IC4KK0lOU1RBTEwgPSBASU5TVEFMTEAKKworQE1DT05GSUdACisKKyUgOiAlLnNoCisKK0BSRVNJWkVSX0NNVEBSRVNJWkVfRElSPSByZXNpemUKK0BERUJVR0ZTX0NNVEBERUJVR0ZTX0RJUj0gZGVidWdmcworQFVVSURfQ01UQFVVSURfTElCX1NVQkRJUj0gbGliL3V1aWQKK0BCTEtJRF9DTVRAQkxLSURfTElCX1NVQkRJUj0gbGliL2Jsa2lkCitRVU9UQV9MSUJfU1VCRElSPSBsaWIvcXVvdGEKKworTElCX1NVQkRJUlM9bGliL2V0IGxpYi9zcyBsaWIvZTJwICQoVVVJRF9MSUJfU1VCRElSKSAkKEJMS0lEX0xJQl9TVUJESVIpICQoUVVPVEFfTElCX1NVQkRJUikgbGliL2V4dDJmcyBpbnRsCitQUk9HX1NVQkRJUlM9ZTJmc2NrICQoREVCVUdGU19ESVIpIG1pc2MgJChSRVNJWkVfRElSKSB0ZXN0cy9wcm9ncyBwbworU1VCRElSUz11dGlsICQoTElCX1NVQkRJUlMpICQoUFJPR19TVUJESVJTKSB0ZXN0cworCitTVUJTPSB1dGlsL3N1YnN0LmNvbmYgbGliL2NvbmZpZy5oIGxpYi9kaXJwYXRocy5oIFwKKwlsaWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBsaWIvYmxraWQvYmxraWRfdHlwZXMuaCBsaWIvdXVpZC91dWlkX3R5cGVzLmgKKworVEFSPXRhcgorCithbGw6OiBzdWJzCisJJChNQUtFKSBsaWJzCisJJChNQUtFKSBwcm9ncworCSQoTUFLRSkgZG9jcworCitzdWJzOiAkKERFUF9TVUJTVElUVVRFKQorCUBmb3IgaSBpbiAkKFNVQlMpIDsgZG8gaWYgdGVzdCAtZCBgZGlybmFtZSAkJGlgIDsgXAorCQl0aGVuICQoTUFLRSkgJCRpIHx8IGV4aXQgJCQ/IDsgZmkgOyBkb25lCisJQChpZiB0ZXN0IC1kIGxpYi9ldCA7IHRoZW4gY2QgbGliL2V0ICYmICQoTUFLRSkgY29tcGlsZV9ldDsgZmkpCisJQChpZiB0ZXN0IC1kIGxpYi9leHQyZnMgOyB0aGVuIGNkIGxpYi9leHQyZnMgJiYgJChNQUtFKSBleHQyX2Vyci5oOyBmaSkKKworcHJvZ3M6IGFsbC1wcm9ncy1yZWN1cnNpdmUKK2xpYnM6IGFsbC1saWJzLXJlY3Vyc2l2ZQorYWxsLXByb2dzLXJlY3Vyc2l2ZSBhbGwtbGlicy1yZWN1cnNpdmU6IHN1YnMKKworZTJmc3Byb2dzLnNwZWM6ICQoREVQX1NVQlNUSVRVVEUpIGUyZnNwcm9ncy5zcGVjLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpOyBDT05GSUdfRklMRVM9Li9lMmZzcHJvZ3Muc3BlYyAuL2NvbmZpZy5zdGF0dXMKKworcnBtOiBlMmZzcHJvZ3Muc3BlYworCXNoIGNvbnRyaWIvYnVpbGQtcnBtCisKK2RvY3M6CisJLUB0ZXN0IC1kIGRvYyAmJiBjZCBkb2MgJiYgJChNQUtFKSBsaWJleHQyZnMuaW5mbworCitpbnN0YWxsLWRvYy1saWJzOgorCS1AdGVzdCAtZCBkb2MgJiYgY2QgZG9jICYmICQoTUFLRSkgaW5zdGFsbC1kb2MtbGlicworCit1bmluc3RhbGwtZG9jLWxpYnM6CisJLUB0ZXN0IC1kIGRvYyAmJiBjZCBkb2MgJiYgJChNQUtFKSB1bmluc3RhbGwtZG9jLWxpYnMKKworY2xlYW4tZG9jOgorCS1AdGVzdCAtZCBkb2MgJiYgY2QgZG9jICYmICQoTUFLRSkgY2xlYW4KKworZGlzdGNsZWFuLWRvYzoKKwktdGVzdCAtZCBkb2MgJiYgY2QgZG9jICYmICQoTUFLRSkgZGlzdGNsZWFuCisKK2luc3RhbGw6IHN1YnMgYWxsLWxpYnMtcmVjdXJzaXZlIGluc3RhbGwtcHJvZ3MtcmVjdXJzaXZlIFwKKyAgaW5zdGFsbC1zaGxpYnMtbGlicy1yZWN1cnNpdmUgaW5zdGFsbC1kb2MtbGlicworCWlmIHRlc3QgISAtZCBlMmZzY2sgJiYgdGVzdCAhIC1kIGRlYnVnZnMgJiYgdGVzdCAhIC1kIG1pc2MgJiYgdGVzdCAhIC1kIGV4dDJlZCA7IHRoZW4gJChNQUtFKSBpbnN0YWxsLWxpYnMgOyBmaQorCitpbnN0YWxsLXN0cmlwOiBzdWJzIGFsbC1saWJzLXJlY3Vyc2l2ZSBpbnN0YWxsLXN0cmlwLXByb2dzLXJlY3Vyc2l2ZSBcCisgIGluc3RhbGwtc2hsaWJzLXN0cmlwLWxpYnMtcmVjdXJzaXZlIGluc3RhbGwtZG9jLWxpYnMKKwordW5pbnN0YWxsOiB1bmluc3RhbGwtcHJvZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbC1zaGxpYnMtbGlicy1yZWN1cnNpdmUgdW5pbnN0YWxsLWRvYy1saWJzCisKK2luc3RhbGwtbGliczogaW5zdGFsbC1saWJzLXJlY3Vyc2l2ZQorCit1bmluc3RhbGwtbGliczogdW5pbnN0YWxsLWxpYnMtcmVjdXJzaXZlCisKK2NvdmVyYWdlLnR4dDogY292ZXJhZ2UudHh0LXJlY3Vyc2l2ZQorCitjaGVjay1yZWN1cnNpdmU6IGFsbAorCitUQUdTIGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tcmVjdXJzaXZlIGRlcGVuZC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIFwKKyAgbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIHJlYWxjbGVhbi1yZWN1cnNpdmUgY292ZXJhZ2UudHh0LXJlY3Vyc2l2ZToKKwlAZm9yIHN1YmRpciBpbiAkKFNVQkRJUlMpOyBkbyBcCisJICBpZiB0ZXN0IC1kICQkc3ViZGlyIDsgdGhlbiBcCisJICAgIHRhcmdldD1gZWNobyAkQHwkKFNFRCkgJ3MvLXJlY3Vyc2l2ZS8vJ2A7IFwKKwkgICAgZWNobyBtYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXI7IFwKKwkgICAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJCR0YXJnZXQpIHx8IGV4aXQgMTsgXAorCSAgZmkgOyBcCisJZG9uZQorCithbGwtcHJvZ3MtcmVjdXJzaXZlIGluc3RhbGwtcHJvZ3MtcmVjdXJzaXZlIGluc3RhbGwtc3RyaXAtcHJvZ3MtcmVjdXJzaXZlIFwKKyAgdW5pbnN0YWxsLXByb2dzLXJlY3Vyc2l2ZSBjb3ZlcmFnZS50eHQtcHJvZ3MtcmVjdXJzaXZlOiBhbGwtbGlicy1yZWN1cnNpdmUKKwlAZm9yIHN1YmRpciBpbiAkKFBST0dfU1VCRElSUyk7IGRvIFwKKwkgIGlmIHRlc3QgLWQgJCRzdWJkaXIgOyB0aGVuIFwKKwkgICAgdGFyZ2V0PWBlY2hvICRAfCQoU0VEKSAncy8tcHJvZ3MtcmVjdXJzaXZlLy8nYDsgXAorCSAgICBlY2hvIG1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpcjsgXAorCSAgICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkJHRhcmdldCkgfHwgZXhpdCAxOyBcCisJICBmaSA7IFwKKwlkb25lCisKK2FsbC1saWJzLXJlY3Vyc2l2ZSBpbnN0YWxsLWxpYnMtcmVjdXJzaXZlIGluc3RhbGwtc3RyaXAtbGlicy1yZWN1cnNpdmUgXAorICB1bmluc3RhbGwtbGlicy1yZWN1cnNpdmUgaW5zdGFsbC1zaGxpYnMtbGlicy1yZWN1cnNpdmUgXAorICBpbnN0YWxsLXNobGlicy1zdHJpcC1saWJzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtc2hsaWJzLWxpYnMtcmVjdXJzaXZlIFwKKyAgY292ZXJhZ2UudHh0LWxpYnMtcmVjdXJzaXZlOgorCUBmb3Igc3ViZGlyIGluICQoTElCX1NVQkRJUlMpOyBkbyBcCisJICBpZiB0ZXN0IC1kICQkc3ViZGlyIDsgdGhlbiBcCisJICAgIHRhcmdldD1gZWNobyAkQHwkKFNFRCkgJ3MvLWxpYnMtcmVjdXJzaXZlLy8nYDsgXAorCSAgICBlY2hvIG1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpcjsgXAorCSAgICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkJHRhcmdldCkgfHwgZXhpdCAxOyBcCisJICBmaSA7IFwKKwlkb25lCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUgbW9zdGx5Y2xlYW4tbG9jYWwKKworY2xlYW46OiBjbGVhbi1yZWN1cnNpdmUgY2xlYW4tbG9jYWwgY2xlYW4tZG9jCisJJChSTSkgLWYgJChTVUJTKSAKKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tZG9jIGRpc3RjbGVhbi1yZWN1cnNpdmUKKwkkKFJNKSAtcmYgYXV0b200dGUuY2FjaGUgZTJmc3Byb2dzLnNwZWMgZXh0MmVkL01ha2VmaWxlIHBvL3N0YW1wLXBvCisJJChNQUtFKSBkaXN0Y2xlYW4tbG9jYWwgCisKK3JlYWxjbGVhbjogcmVhbGNsZWFuLXJlY3Vyc2l2ZSByZWFsY2xlYW4tbG9jYWwKKworZGVwZW5kOjogZGVwZW5kLXJlY3Vyc2l2ZQorCitsaWIvZXh0MmZzL2V4dDJfdHlwZXMuaDogJChERVBfU1VCU1RJVFVURSkgYXNtX3R5cGVzLmggXAorCQkkKHNyY2RpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmguaW4KKwljZCAkKHRvcF9idWlsZGRpcik7IENPTkZJR19GSUxFUz0uL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIC4vY29uZmlnLnN0YXR1cworCitsaWIvYmxraWQvYmxraWRfdHlwZXMuaDogJChERVBfU1VCU1RJVFVURSkgYXNtX3R5cGVzLmggXAorCQkkKHNyY2RpcikvbGliL2Jsa2lkL2Jsa2lkX3R5cGVzLmguaW4KKwljZCAkKHRvcF9idWlsZGRpcik7IENPTkZJR19GSUxFUz0uL2xpYi9ibGtpZC9ibGtpZF90eXBlcy5oIC4vY29uZmlnLnN0YXR1cworCitsaWIvdXVpZC91dWlkX3R5cGVzLmg6ICQoREVQX1NVQlNUSVRVVEUpIGFzbV90eXBlcy5oIFwKKwkJJChzcmNkaXIpL2xpYi91dWlkL3V1aWRfdHlwZXMuaC5pbgorCWNkICQodG9wX2J1aWxkZGlyKTsgQ09ORklHX0ZJTEVTPS4vbGliL3V1aWQvdXVpZF90eXBlcy5oIC4vY29uZmlnLnN0YXR1cworCittb3N0bHljbGVhbi1sb2NhbDoKKwkkKFJNKSAtZiBcIyogKn4gKi5vcmlnIGNvcmUgTUFLRUxPRyAKKworY2xlYW4tbG9jYWw6IG1vc3RseWNsZWFuLWxvY2FsCisKK2Rpc3RjbGVhbi1sb2NhbDogY2xlYW4tbG9jYWwKKwkkKFJNKSAtZiAkKFNVQlMpICQoU1VCU1RfQ09ORikgXAorCQljb25maWcuc3RhdHVzIGNvbmZpZy5sb2cgY29uZmlnLmNhY2hlIE1DT05GSUcgTWFrZWZpbGUgXAorCQkkKHNyY2RpcikvVEFHUyAkKHNyY2RpcikvTWFrZWZpbGUuaW4ub2xkCisKK3JlYWxjbGVhbi1sb2NhbDogZGlzdGNsZWFuLWxvY2FsCisJJChSTSkgLWYgY29uZmlndXJlCisKK2NoZWNrOjoJYWxsIGNoZWNrLXJlY3Vyc2l2ZQorCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlZmFlOAotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRQpAQCAtMCwwICsxLDE5IEBACisJVGhpcyBpcyB0aGUgbmV3IHZlcnNpb24gKDEuNDIuMTMpIG9mIHRoZSBzZWNvbmQgZXh0ZW5kZWQgZmlsZQorc3lzdGVtIG1hbmFnZW1lbnQgcHJvZ3JhbXMuCisKKwlGcm9tIHRpbWUgdG8gdGltZSwgSSByZWxlYXNlIG5ldyB2ZXJzaW9ucyBvZiBlMmZzcHJvZ3MsIHRvIGZpeAorYnVncyBhbmQgdG8gbWFrZSB0aGUgdXRpbGl0aWVzIG1vcmUgcm9idXN0LiAgWW91IGNhbiBhbHdheXMgZmluZAoraW5mb3JtYXRpb24gYWJvdXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGF0IHRoZSB0aGUgZTJmc3Byb2dzIHdlYiBwYWdlLAord2hpY2ggaXM6CisKKwlodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldAorCisJVGhlIElOU1RBTEwgZmlsZSBoYXMgaW5zdHJ1Y3Rpb25zIG9uIGJ1aWxkaW5nIGFuZCBpbnN0YWxsaW5nCitlMmZzcHJvZ3MuICBQcm92aXNpb25zIGZvciBidWlsZGluZyBSZWQgSGF0IFJQTXMgYW5kIERlYmlhbiBkcGtnIGZpbGVzCithcmUgc3VwcGxpZWQgYXMgd2VsbC4KKworCUluIGNhc2Ugb2YgYnVncyBpbiB0aGVzZSBwcm9ncmFtcywgcGxlYXNlIGNvbnRhY3QgVGVkIFRzJ28gYXQKK3R5dHNvQG1pdC5lZHUgb3IgdHl0c29AYWx1bS5taXQuZWR1LiAgU2VlIHRoZSBlMmZzY2sgbWFuIHBhZ2UgZm9yCitzdWdnZXN0aW9ucyBvZiB3aGF0IHNvcnQgb2YgaW5mb3JtYXRpb24gdG8gaW5jbHVkZSB3aGVuIHN1Ym1pdHRpbmcgYnVnCityZXBvcnRzIGZvciB0aGVzZSBwcm9ncmFtcy4KKwpkaWZmIC0tZ2l0IGEvUkVMRUFTRS1OT1RFUyBiL1JFTEVBU0UtTk9URVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3ZTk1MAotLS0gL2Rldi9udWxsCisrKyBiL1JFTEVBU0UtTk9URVMKQEAgLTAsMCArMSw3OTIzIEBACitFMmZzcHJvZ3MgMS40Mi4xMyAoTWF5IDE3LCAyMDE1KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZWQgYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IHdoaWxlIGNsb3NpbmcgYSBmaWxlIHN5c3RlbSBpbgorbGliZXh0MmZzLiAgKENWRS0yMDE1LTE1NzIsIEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNzc4OTQ4KQorCitGaXhlZCBhIGJ1ZyB3aGljaCBjb3VsZCBjYXVzZSBlMmZzY2sgdG8gY29ycnVwdCBIdXJkIGZpbGUgc3lzdGVtcy4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzc2MDI3NSkKKworRml4ZWQgYSBkZWFkbG9jayB3aGljaCBvY2N1cnMgd2hlbiB1c2luZyBzeXN0ZW1kIGFuZCBlMmZzY2suY29uZidzCitsb2dnaW5nIGZlYXR1cmUuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM3NzUyMzQpCisKK0ZpeGVkIGEgYnVnIHdoaWNoIGNvdWxkIGNhdXNlIHByb2dyYW1zIHVzaW5nIGxpYmV4dDIncyBpbm9kZSB0YWJsZQorc2Nhbm5pbmcgZnVuY3Rpb25zIGZyb20gY3Jhc2hpbmcgb24gY2VydGFpbiBjb3JydXB0ZWQgZmlsZSBzeXN0ZW1zLgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNzczNzk1KQorCitGaXhlZCBkdW1wZTJmcyBzbyBpdCB3b24ndCBjcmFzaCBpZiB0aGUgdXNlciBkb2Vzbid0IHNwZWNpZnkgYSBibG9jaworZGV2aWNlIChmaWxlIHN5c3RlbSkuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM3NjQyOTMpCisKK0ZpeGVkIGUyZnNjayBzbyBpZiBpdCBub3RpY2VzIHVuZXhwZWN0ZWQgSFRSRUUgYmxvY2tzIGluIHBhc3MgMiwgaXQKK3dpbGwgcmVwb3J0IHRoZSBjb3JyZWN0IGRpcmVjdG9yeSBpbm9kZSBjb250YWluaW5nIHRoZSBpbmNvbnNpc3RlbmN5LgorCitJZiBlMmZzY2sgZmFpbHMgdG8gZ3JvdyB0aGUgZGlyX2luZm8gc3RydWN0dXJlIGR1ZSByZWFsbG9jKDMpIG5vdAoraGF2aW5nIGVub3VnaCBtZW1vcnksIGl0IHdpbGwgbm93IGZhaWwgd2l0aCBleHBsYW5hdG9yeSBtZXNzYWdlCitpbnN0ZWFkIG9mIHN0YWdnZXJpbmcgb24gZmFpbGluZyB3aXRoIGEgY29uZnVzaW5nIGludGVybmFsIGVycm9yCittZXNzYWdlcy4KKworVGhlIHR1bmUyZnMgcHJvZ3JhbSB3aWxsIHplcm8gb3V0IHRoZSBzdXBlcmJsb2NrIGpvdXJuYWwgYmFja3VwCitpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nIGEgam91cm5hbCBmcm9tIGEgZmlsZSBzeXN0ZW0uCisKK1RoZSBta2UyZnMgcHJvZ3JhbSBub3cgZW5hYmxlcyB0aGUgbGFyZ2VfZmlsZSBmZWF0dXJlIGJ5IGRlZmF1bHQuCisKK0ZpeGVkIGEgYnVnIHdoaWNoIGNvdWxkIGNhdXNlIGJhZGJsb2NrcyB0byBjcmFzaCBpZiB0aGVyZSBhcmUgbWlsbGlvbnMKK2FuZCBtaWxsaW9ucyBvZiBiYWQgYmxvY2tzLgorCitGaXhlZCBzb21lIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiByZXNpemUyZnMgYW5kIGUyZnNjay4KKworRml4ZWQgYSBtZW1vcnkgbGVhayBpbiB0dW5lMmZzLgorCitGaXhlZCBzb21lIGJpZ2VuZGlhbiBidWdzIHRoYXQgaGFkIGNyZXB0IGludG8gYm90aCBpbmRpcmVjdCBhbmQgZXh0ZW50CitoYW5kbGluZyBpbnNpZGUgbGliZXh0MmZzLgorCitVcGRhdGVkL2ZpeGVkIHZhcmlvdXMgbWFuIHBhZ2VzLgorCitVcGRhdGUgRXNwZXJhbnRvLCBHZXJtYW4sIGFuZCBTcGFuaXNoIHRyYW5zbGF0aW9ucy4gIEFkZGVkIERhbmlzaAordHJhbnNsYXRpb24uCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeGVkIGNvdmVyaXR5LCBzcGFyY2UgZ2NjIC1XYWxsLCBhbmQgY2xhbmcgd2FybmluZ3Mvbml0cy4KKworQ2xlYW4gdXAgc29tZSBidWlsZCBzeXN0ZW0gcHJvYmxlbXMgKGJ1aWxkIGZhaWx1cmVzIHdpdGggdmFyaW91cworY29uZmlndXJlIG9wdGlvbnMsIGZpeCBQb3NpeCBwb3J0YWJpbGl0eSBpc3N1ZXMsIGV0Yy4pCisKK1RoZSBmdW5jdGlvbnMgZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzWzJdKCkgYW5kCitleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHNbMl0oKSBub3cgY2hlY2sgdGhlIGlub2RlIGFuZCBibG9jayBudW1iZXJzCitwYXNzZWQgdG8gdGhlbSwgdG8gYXZvaWQgY3Jhc2hlcyBjYXVzZWQgYnkgYnVnZ3kgY2FsbGVycy4KKworVGhlIGxpYmV4dDJmcyBkaXJlY3RvcnkgaXRlcmF0b3Igd2lsbCBub3cgY2hlY2sgZm9yIGFuIGludmFsaWQKK2RpcmVjdG9yeSBlbnRyeSBsZW5ndGggaW5zdGVhZCBvZiBwb3NzaWJseSB3YWxraW5nIG9mZiB0aGUgZW5kIG9mIHRoZQorZGlyZWN0b3J5IGJ1ZmZlci4KKworCitFMmZzcHJvZ3MgMS40Mi4xMiAoQXVndXN0IDI1LCAyMDE0KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IHZhcmlvdXMgZTJmc2NrIGJ1Z3Mgd2hlbiB0cnlpbmcgdG8gcmVwYWlyIGJpZ2FsbG9jIGZpbGUgc3lzdGVtcy4KKworRTJmc2NrIGNhbiBub3cgcmVwYWlyIGEgZmlsZSBzeXN0ZW0gd2l0aCBhbiBvdmVybHkgbGFyZ2UKK3NfZmlyc3RfbWV0YV9iZyBmaWVsZCwgd2hpY2ggaGFkIHByZXZpb3VzbHkgY2F1c2VkIGFsbCBlMmZzcHJvZ3MKK3Byb2dyYW1zIHRvIGNyYXNoIHdoZW4gdHJ5aW5nIHRvIG9wZW4gc3VjaCBhIGZpbGUgc3lzdGVtLgorCitGaXggZTJmc2NrIHNvIHRoYXQgaXQgY2FuIGNvcnJlY3RseSBmaXggYSBudW1iZXIgb2YgcmFyZSBmaWxlIHN5c3RlbQorY29ycnVwdGlvbnMgdGhhdCB3ZXJlIGRpc2NvdmVyZWQgd2hlbiB1c2luZyBhIGZpbGUgc3lzdGVtIGZ1enplci4KKworRml4IGUyZnNjayBzbyBpdCBkb2VzIG5vdCB0cnkgdG8gd3JpdGUgYmFjayBibG9jayBncm91cCBkZXNjcmlwdG9ycyBpZgordGhleSBoYXZlIG5vdCBiZWVuIG1vZGlmaWVkLgorCitNa2UyZnMgcHJvZ3JhbSB3aWxsIG5vdyBwbGFjZSBtZXRhZGF0YSBibG9ja3MgaW4gdGhlIGxhc3QgZmxleF9iZyBzbwordGhleSBhcmUgY29udGlndW91cy4gIFRoaXMgcmVkdWNlcyBmcmVlIHNwYWNlIGZyYWdtZW50YXRpb24gaW4gYQorZnJlc2hseSBjcmVhdGVkIGZpbGUgc3lzdGVtLCBhcyB3ZWxsIGFzIGFsbG93aW5nIG1rZTJmcyBjb21tYW5kcyB3aGljaAorcmVxdWVzdCBleHRyZW1lbHkgbGFyZ2UgZmxleF9iZyBzaXplIHRvIHN1Y2NlZWQuCisKK01rZTJmcyBub3cgY3JlYXRlcyBodWdlZmlsZXMgbW9yZSBlZmZpY2llbnRseSAod2l0aCBmZXdlciBleHRlbnQgdHJlZQorYmxvY2tzKS4KKworRml4IGEgMzIvNjQtYml0IG92ZXJmbG93IGJ1ZyB0aGF0IGNvdWxkIGNhdXNlIHJlc2l6ZTJmcyB0byBsb29wCitmb3JldmVyLiAoQWRkcmVzc2VzLUxhdW5jaHBhZC1CdWc6ICMxMzIxOTU4KQorCitUaGUgcmVzaXplMmZzIHByb2dyYW0gd2lsbCBub3cgdXNlIG11Y2ggbGVzcyBtZW1vcnkgd2hlbiByZXNpemluZyB2ZXJ5CitsYXJnZSBmaWxlIHN5c3RlbXMuCisKK0ZpeCBhIGJ1ZyB3aGljaCBjb3VsZCBjYXVzZSByZXNpemUyZnMgdG8gZ2V0IGNvbmZ1c2VkIGFuZCBwcm9kdWNlIGEKK2NvcnJ1cHRlZCBmaWxlIHN5c3RlbSB3aGVuIHNocmlua2luZyBhIGZpbGUgc3lzdGVtIHRoYXQgaGFkIGJlZW4KK3ByZXZpb3VzbHkgZXhwYW5kZWQgYW5kIGNvbnZlcnRlZCB0byB1c2UgdGhlIG1ldGFfYmcgZmlsZSBzeXN0ZW0KK2Zvcm1hdCwgYnV0IHdoaWNoIG5vIGxvbmdlciBuZWVkcyB0byB1c2UgdGhlIG1ldGFfYmcgZmlsZSBzeXN0ZW0KK2Zvcm1hdCBhbnkgbG9uZ2VyLiAgVGhpcyB0eXBpY2FsbHkgaGFwcGVuZWQgd2l0aCBsYXJnZSAoPiAxNlRCKSBmaWxlCitzeXN0ZW1zLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNzU2OTIyKQorCitUaGUgZTRkZWZyYWcgcHJvZ3JhbSB3aWxsIG5vdyBkZWZyYWcgYmFja3dhcmRzLWFsbG9jYXRlZCBmaWxlcy4KKworRml4IHR1bmUyZnMgdXBkYXRpbmcgVVVJRCdzIHdoZW4gbWFuaXB1bGF0aW5nIGZpbGUgc3lzdGVtcyB3aXRoCitleHRlcm5hbCBqb3VybmFscyAoYm90aCB0aGUgZmlsZSBzeXN0ZW0gYW5kIGpvdXJuYWwgVVVJRCkuCisKK0ZpeCB0dW5lMmZzIHNvIGl0IGNhbiByZW1vdmUgYW4gZXh0ZXJuYWwgam91cm5hbCBmb3IgZmlsZSBzeXN0ZW1zIHdpdGgKK2EgMWsgYmxvY2sgc2l6ZS4KKworQWRkIGEgbmV3IGRlYnVnZnMgY29tbWFuZCwgImlub2RlX2R1bXAiLCB3aGljaCBwcmludHMgdGhlIGlub2RlIGluIGhleAorYW5kIEFTQ0lJIGZvcm1hdC4KKworVGhlIGRlYnVnZnMncyAic2V0X2lub2RlX2ZpZWxkIiB3aWxsIG5vdyBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlIGJsb2NrcworZm9yIGluZGlyZWN0IGJsb2NrcyBhbmQgZXh0ZW50IHRyZWUgYmxvY2tzLgorCitGaXggZGVidWdmcydzICJzZXRfaW5vZGVfZmllbGQiIHNvIGNhbiBwcm9wZXJseSBoYW5kbGUKKyJibG9ja1tJTkR8RElORHxUSU5EXSIuCisKK1RoZSBkZWJ1Z2ZzICJyZHVtcCIgY29tbWFuZCB3aWxsIG5vdyB0YWtlIG11bHRpcGxlIHNvdXJjZSBhcmd1bWVudHMuCisKK0ZpeGVkIGEgZG91YmxlIGNsb3NlKDIpIGJ1ZyBpbiAicmR1bXAiIGFuZCAicmR1bXAgLXAiLgorCitGaXggZGVidWdmcydzIGFyZ3VtZW50IHBhcnNpbmcgZm9yIHRoZSBmcmVlZnJhZyBjb21tYW5kLgorCitGaXggZmlsZWZyYWcgdG8gcHJvcGVybHkgaGFuZGxlIHVzaW5nIHRoZSBGSUJNQVAgaW9jdGwgKHdpdGggLUIpLgorKEFkZHJlc3NlcyBMYXVuY2hwYWQgQnVnOiAjMTM1NjQ5NikKKworQ2xhcmlmaWVkIG1lc3NhZ2VzIHRoYXQgd2VyZSBjb25mdXNpbmcgdXNlcnMgaW4gZGVidWdmcywgZTJmc2NrLAorbWtlMmZzLCBhbmQgcmVzaXplMmZzIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6ICM3NTgwMjksICM3NTc1NDMsCisjNzU3NTQ0KQorCitEdW1wZTJmcyB3aWxsIG5vdyBjb21wbGFpbiBpZiBleHRyYSBhcmd1bWVudHMgYXJlIGdpdmVuIHRvIGl0LgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNzU4MDc0KQorCitVcGRhdGVkL2ZpeGVkIHZhcmlvdXMgbWFuIHBhZ2VzLiAgKEFkZHJlc3Nlcy1EZWJpYW4tQnVnOiAjNzI2NzYwKQorCitVcGRhdGUgQ3plY2gsIER1dGNoLCBGcmVuY2gsIFBvbGlzaCwgU3BhbmlzaCwgU3dlZWRpc2gsIFVrcmFpbmlhbiwgYW5kCitWaWV0bmFtZXNlIHRyYW5zbGF0aW9ucy4KKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIFVuaXggSS9PIGxheWVyIHdpbGwgbm93IHVzZSBwcmVhZFs2NF0vcHdyaXRlWzY0XSB0byByZWR1Y2UgdGhlCitudW1iZXIgb2Ygc3lzdGVtIGNhbGxzIGlzc3VlZC4KKworRml4ZWQgcHJvZmlsZWQgYnVpbGQuCisKK1RoZSBsaWJleHQyZnMgbGlicmFyeSB3aWxsIG5vdyBtb3JlIGVmZmljaWVudGx5IHNwbGl0IGFuIGV4dGVudCB0cmVlCitpbmRleCBibG9jayB3aGVuIGFwcGVuZGluZyB0byBhbiBlbmQgb2YgYSBmaWxlLgorCitGaXhlZCBmcmVlIGJsb2NrIGFjY291bnRpbmcgZm9yIDY0LWJpdCBmaWxlIHN5c3RlbXMuCisKK0FkZCBhIG5ldyBmdW5jdGlvbiBleHQyc19pbm9kZV9zaXplX3NldCgpIHdoaWNoIHRha2VzIGNhcmUgb2YgYWxsIG9mCit0aGUgcmVxdWlyZWQgZmVhdHVyZSBmbGFnIG1vZGlmaWNhdGlvbnMuCisKK1RoZSByZWdyZXNzaW9uIHRlc3RzIG5vIGxvbmdlciByZXF1aXJlIHRoZSBwcmVzZW5jZSBvZiB0aGUgbWQ1c3VtCitwcm9ncmFtLgorCitGaXggYnVpbGQgZmFpbHVyZSBvbiBNSVBTIHBsYXRmb3JtcyBvbiBEZWJpYW4gKEFkZHJlc3NlcyBEZWJpYW4gQnVnOgorIzc1NDYwNSkKKworRml4IHZhcmlvdXMgQ292ZXJpdHkgd2FybmluZ3MgKCMxMjI1MDAzLCAjMTIyOTI0MywgIzEyNTIwMDMpCisKKworRTJmc3Byb2dzIDEuNDIuMTEgKEp1bHkgOSwgMjAxNCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FkZCBzdXBwb3J0IHNvIHRoYXQgbWtlMmZzIGNhbiBjcmVhdGUgaHVnZWZpbGVzIHNvIHRoYXQgdGhleSBhcmUKK2FsaWduZWQgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGlzaywgaW5zdGVhZCBvZiByZWxhdGl2ZSB0bwordGhlIGJlZ2lubmluZyBvZiB0aGUgcGFydGl0aW9uLCB1c2luZyB0aGUgbWtlMmZzLmNvbmYgY29uZmlndXJhdGlvbgorcGFyYW1ldGVyICJodWdlZmlsZXNfYWxpZ25fZGlzayIuCisKK0ZpeCBhIGJ1ZyB3aGljaCBjYXVzZXMgZTJmc2NrIHRvIGFib3J0IGEgam91cm5hbCByZXBsYXkgb24gYSBmaWxlCitzeXN0ZW0gd2l0aCBiaWdhbGxvYyBlbmFibGVkLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNzQ0OTUzKQorCitBZGQgc2FuaXR5IGNoZWNrcyBzbyB0aGF0IG1rZTJmcyB3aWxsIHJlZnVzZSBpbnNhbmVseSBsYXJnZSBmbGV4X2JnCitjb3VudHMgc3BlY2lmaWVkIGJ5IHRoZSAtRyBvcHRpb24uICBJbnNhbmVseSBsYXJnZSBmbGV4X2JnIHNpemVzIGNhbgorcmVzdWx0IGluIGEgZmlsZSBzeXN0ZW0gd2hpY2ggY2FuJ3QgYmUgdW5tb3VudGVkLCBvciB3aXRoIGV4dHJlbWVseQorcGVzc2ltYWwgbWV0YWRhdGEgbGF5b3V0cy4KKworVGhlIG1rZTJmcyBwcm9ncmFtIHdpbGwgcHJvdmlkZSBhIGJldHRlciBtZXRhZGF0YSBsYXlvdXQgZm9yCittb2RlcmF0ZWx5IGxhcmdlIChidXQgYmVsaWV2YWJsZSkgZmxleF9iZyBjb3VudHMsIHN1Y2ggYXMgMTMzLDA3Mi4KKworVGhlIG1rZTJmcyBwcm9nYW0gd2lsbCBhbHNvIGNoZWNrIHRoZSBrZXJuZWwgdmVyc2lvbiBudW1iZXIgdG8KK2RldGVybWluZSB3aGV0aGVyIHRoZSBsYXp5X2l0YWJsZV9pbml0IG9wdGlvbiBpcyBzdXBwb3J0ZWQsIHNvIHRoYXQKK2xhenkgaW5vZGUgdGFibGUgaW5pdGlhbGl6YXRpb24gY2FuIGJlIHVzZWQgZXZlbiBpZiB0aGUgZXh0NCBpcworY29tcGlsZWQgYXMgYSBtb2R1bGUgd2hpY2ggaXNuJ3QgbG9hZGVkIGF0IHRoZSB0aW1lIHRoYXQgbWtlMmZzIGlzCitydW4uCisKK0FkZCBkZXNjcmlwdGlvbiBvZiBleHQ0J3MgbW91bnQgb3B0aW9ucyB0byB0aGUgZXh0NCBzZWN0aW9uIDUgbWFuCitwYWdlLgorCitJbXByb3ZlIHRoZSBjaGF0dHIgbWFuIHBhZ2UgYW5kIGNsZWFuIHVwIHRoZSBjaGF0dHIgdXNhZ2UgbWVzc2FnZS4KKworRTJmc2NrIHdpbGwgbm93IGF1dG9tYXRpY2FsbHkgZml4IGEgbGFzdCBtb3VudCB0aW1lIG9yIGxhc3Qgd3JpdGUgdGltZQord2hpY2ggaXMgaW4gdGhlIGZ1dHVyZSBpbiBwcmVlbiBtb2RlLCBpbnN0ZWFkIG9mIGFib3J0aW5nIHRoZSBmc2NrCitjaGVjay4KKworTWtlMmZzIHdpbGwgbm93IGNoZWNrIHRoZSBmaWxlIHN5c3RlbSByZXZpc2lvbiBudW1iZXIgcmVxdWVzdGVkIGJ5IHRoZQorY29tbWFuZCBsaW5lLCBhbmQgcmVqZWN0IGl0IGlmIGl0IGlzIHRvbyBsYXJnZS4gIEEgZmlsZSBzeXN0ZW0gd2l0aCBhbgordW5zdXBwb3J0ZWQgcmV2aXNpb24gbnVtYmVyIHdpbGwgbm90IGJlIGFjY2VwdGVkIGJ5IGFueSBvZiB0aGUgb3RoZXIKK2ZpbGUgc3lzdGVtIHRvb2xzLCBhbmQgdGhpcyBjb21tYW5kIGxpbmUgb3B0aW9uIGlzIHJhcmVseSB1c2VkLCBzbworbGV0J3MgdHJ5IHRvIGhlbHAgdGhlIHVzZXIgbm90IHNob290IHRoZWlyIG93biBmb290IG9mZi4KKworVGhlIGRlYnVnZnMgcHJvZ2FtIGNhbiBub3cgc2V0IHRoZSBlcnJvciBjb3VudCBhbmQgYXNzb2NpYXRlZAorZmlyc3RfZXJyb3IgYW5kIGxhc3RfZXJyb3IgZmllbGRzIGluIHRoZSBzdXBlcmJsb2NrIHVzaW5nIHRoZQorc2V0X3N1cGVyX3ZhbHVlIGNvbW1hbmQuCisKK1Jlc2l6ZTJmcyB3aWxsIG5vdCB0cnkgdG8gY2FsY3VsYXRlIHRoZSBtaW5pbXVtIHNpemUgb2YgYSBmaWxlIHN5c3RlbQoraWYgaXQgY29udGFpbnMgZXJyb3JzLiAgT3RoZXJ3aXNlIGEgdmVyeSBiYWRseSBjb3JydXB0ZWQgZmlsZSBzeXN0ZW0KK2ltYWdlIGNhbiBjYXVzZSB0aGUgbWluaW11bSBzaXplIGNhbGN1bGF0aW9uIHRvIGxvb3AgZm9yd2V2ZXIuICBTaW5jZQorcmVzaXplMmZzIHdpbGwgbm90IGFsbG93IGEgZmlsZSBzeXN0ZW0gbWFya2VkIGFzIGNvbnRhaW5pbmcgZXJyb3JzIHRvCitiZSByZXNpemVkLiAgSXQncyBwb2ludGxlc3MgdG8gY2FsY3VsYXRlIHRoZSBtaW5pbXVtIHNpemUsIHNvIGp1c3QKK3NraXAgaXQuCisKK0ZpeGVkIGEgdHlwbyBpbiBvbmUgb2YgbWtlMmZzJ3MgZXJyb3IgbWVzc2FnZS4KKworSWYgZmlsZWZyYWcgcnVucyBpbnRvIGFuIGVycm9yLCBpdCB3aWxsIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIHJlc3QKK29mIHRoZSBmaWxlcyBzcGVjaWZpZWQgb24gdGhlYyBvbW1hbmQgbGluZSwgYnV0IHRoZW4gZXhpdCB3aXRoIGFuCitlcnJvciBjb2RlLgorCitGaWxlZnJhZyBub3cgcHJpbnRzIHNvbWUgYWRkaXRpb25hbCBuZXcgZmxhZ3MgKHN1Y2ggYXMKK0ZJRU1BUF9FWFRFTlRfRU5DT0RFRCksIGFuZCBwcmludCB1bmtub3duIGZsYWdzIGFzIGhleCB2YWx1ZXMuCisKK0ZpeGVkIHN1cHBvcnQgaW4gZmlsZWZyYWcgZm9yIGZpbGVzIHdpdGggPiAyKiozMiBibG9ja3Mgb24gMzItYml0CitwbGF0Zm9ybXMuCisKK0ZpeGVkIGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gZGVidWdmcyB3aGVuIGNvcHlpbmcgZmlsZXMuCisKK0ZpeGVkIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGluIDEuNDIuMTAgd2hpY2ggY2F1c2VkIG1rZTJmcyB0byBmYWlsCit0byBjcmVhdGUgZmlsZSBzeXN0ZW1zIGxhcmdlciB0aGFuIDJHQiBvbiAzMi1iaXQgcGxhdGZvcm1zLgorKEFkZHJlc3NlcyBSZWQgSGF0IEJ1Z3ppbGxhOiAjMTA5OTg5MiwgRGViaWFuIEJ1ZzogIzc1MjEwNykKKworQWRkIEVzcGFyYW50byBhbmQgVWtyYWluaWFuIHRyYW5zbGF0aW9ucywgYW5kIHVwZGF0ZSBDemVjaCwgRHV0Y2gsCitGcmVuY2gsIEdlcm1hbiwgSXRhbGlhbiwgUG9saXNoLCBTd2VlZGlzaCwgYW5kIFZpZXRuYW1lc2UKK3RyYW5zbGF0aW9ucy4KKworRml4ZWQgdmFyaW91cyBjb21waWxlciB3YXJuaW5ncy4KKworCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZ2NjICItY2hlY2tlciIgb3B0aW9uIGhhcyBiZWVuIGxvbmcgZGVwcmVjYXRlZCwgc28gcmVtb3ZlIHN1cHBvcnQKK2Zyb20gZTJmc3Byb2dzLiAgSXQgd2FzIGNhdXNpbmcgYSBmZXcgcGVvcGxlIHRvIGJlIGNvbmZ1c2VkIHdoZW4gdGhleQordHJpZWQgZW5hYmxpbmcgdGhlIGNvbmZpZ3VyZSBvcHRpb24uCisKK1VwZGF0ZSB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGNvbmZpZy5zdGF0dXMgYW5kIGNvbmZpZy5ycGF0aAorZmlsZXMsIGFzIHdlbGwgYXMgbmV3ZXIgdmVyc2lvbnMgb2YgdGhlIGF1dG9jb25mIGZpbGVzIGluIGFjbG9jYWwubTQuCitBbHNvLCBtb3ZlIHRoZSBlMmZzcHJvZ3Mtc3BlY2lmaWMgbWFjcm9zIHRvIGFjaW5jbHVkZS5tNCwgd2hpY2ggYWxsb3dzCitwZW9wbGUgd2hvIHdhbnQgdG8gdXNlIGF1dG9yZWNvbmYgdG8gZG8gc28uCisKK01ha2UgdGhlIHVzZSBvZiBzdHJwdGltZSgpIGZ1bmN0aW9uIGluIGRlYnVnZnMgdG8gYmUgbW9yZSBwb3J0YWJsZSB0bworZml4IHJlZ3Jlc3Npb24gdGVzdCBmYWlsdXJlcyBmb3IgRnJlZUJTRCBhbmQgTWFjT1MuCisKK0EgZmV3IG1pc2NlbGxhbmVvdXMgY2hhbmdlcyBkZXNpZ25lZCB0byBtYWtlIGxpZmUgZWFzaWVyIGZvcgordHJhbnNsYXRvcnMuCisKK0ZpeCB0aGUgZl9xdW90YSB0ZXN0IGFuZCBzb21lIE1ha2VmaWxlIGRlcGVuZGVuY2llcyBpZiBxdW90YSBzdXBwb3J0CitpcyBub3QgZW5hYmxlZC4KKworRml4IGNyb3NzLWNvbXBpbGF0aW9uIHN1cHBvcnQsIHdoaWNoIGdvdCBicm9rZW4gaW4gMS40Mi4xMC4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzc1MzM3NSkKKworRGVsZXRlIGxpYi9leHQyX3R5cGVzLmggb24gYSBtYWtlIGNsZWFuLCBhbmQgYnVpbGQgaXQgYXMgbmVjZXNzYXJ5LgorCitBZGQgYSBkZWJ1ZyBwcm9ncmFtIHVzZWQgZm9yIGxpYmV4dDJmcyB1bml0IHRlc3RzLgorCitDbGVhbiB1cCB0aGUgdGVzdHMgc28gdGhhdCBpdCBhdm9pZHMgdXNpbmcgR05VLXNwZWNpZmljIGJlaGF2aW91ciBpbgorbWt0ZW1wLiAgTWFrZSBzdXJlIHRoZSB0ZW1wb3JhcnkgZmlsZXMgYXJlIGNsZWFuZWQgdXAgaWYgdGhlIHRlc3RzIGFyZQoraW50ZXJydXB0ZWQuCisKK0FkZCBhIG5ldyBleHQyZnNfY2xvc2VfZnJlZSgpIGhlbHBlciBmdW5jdGlvbiB3aGljaCBhdXRvbWF0aWNhbGx5Cit0YWtlcyBjYXJlIG9mIGZyZWVpbmcgdGhlIGV4dDJfZmlsc3lzIHN0cnVjdHVyZSBldmVuIGlmIGV4dDJmc19jbG9zZSgpCityZXR1cm5zIGFuIGVycm9yLgorCisKK0UyZnNwcm9ncyAxLjQyLjEwIChNYXkgMTgsIDIwMTQpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNa2UyZnMgbm93IGNyZWF0ZXMgZmlsZSBzeXN0ZW1zIGluIHJlZ3VsYXIgZmlsZXMgKHdoaWNoIGlzIHZlcnkgb2Z0ZW4KK3VzZWQgd2hlbiBtYWludGFpbmluZyB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2VzKSB3aXRob3V0IHJlcXVpcmluZyB0aGUKK3VzZXIgdG8gdXNlIHRoZSBmb3JjZSBvcHRpb24uICBJbiBhZGRpdGlvbiwgdGhlIG1rZTJmcyBvdXRwdXQgaGFzIGJlZW4KK21hZGUgbXVjaCBsZXNzIHZlcmJvc2UgYW5kIG9ubHkgZGlzcGxheXMgaW5mb3JtYXRpb24gdGhhdCB1c2VycyB3aWxsCitiZSBtb3JlIGxpa2VseSB0byBmaW5kIHVzZWZ1bCBieSBkZWZhdWx0LgorCitNa2UyZnMgbm93IHdpbGwgYXNrIHRoZSB1c2VyIHRvIGNvbmZpcm0gdGhhdCB0aGV5IHdhbnQgdG8gY29udGludWUKK2JlZm9yZSB3aXBpbmcgb3V0IGEgcHJlLWV4aXN0aW5nIGZpbGUgc3lzdGVtLCBwYXJ0aXRpb24gdGFibGUsIG9yIExWTQorcGh5c2ljYWwgdm9sdW1lLgorCitNa2UyZnMgbm93IGhhcyB0aGUgYWJpbGl0eSB0byBjcmVhdGUgZmlsZSBzeXN0ZW1zIHdoZXJlIGFsbCB0aGUKK21ldGFkYXRhIGlzIGxvY2F0ZWQgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBkZXZpY2UuICBUaGlzIGNhbiBiZQordXNlZnVsIGZvciBmbGFzaCBkZXZpY2VzIHdoaWNoIGhhdmUgU0xDIGZsYXNoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCitkaXNrLCBmb3IgRkFUIGNvbXBhdGliaWxpdHksIGZvciBleGFtcGxlLiAgQXMgcGFydCBvZiB0aGlzLCBta2UyZnMgYW5kCit0dW5lMmZzIGNhbiBjb250cm9sIHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YSBibG9ja3MgdXNlZCBieSB0aGUKK2pvdXJuYWwgaW5vZGUuICBJbiBhZGRpdGlvbiwgdGhlIG5ldyBzcGFyc2Vfc3VwZXIyIGZlYXR1cmUgYWxsb3dzIGZvcgorZXZlbiBmZXdlciAoYW55d2hlcmUgZnJvbSB6ZXJvIHRvIHR3bykgYmFja3VwIHN1cGVyYmxvY2tzLgorCitNa2UyZnMgbm93IHVzZXMgbXVjaCBsZXNzIENQVSB3aGVuIGFsbG9jYXRpbmcgdGhlIGJsb2NrcyB1c2VkIGZvciB2ZXJ5CitsYXJnZSBmaWxlIHN5c3RlbXMuCisKK01rZTJmcyBjYW4gbm93IHN1cHBvcnQgY3JlYXRpbmcgYSBmaWxlIHN5c3RlbSBhdCBhbiBvZmZzZXQuICBUaGlzIGNhbgorYmUgdXNlZnVsIHdoZW4gY3JlYXRpbmcgYSBkaXNrIGltYWdlIGZvciB2aXJ0dWFsIG1hY2hpbmVzIChBZGRyZXNzZXMKK0RlYmlhbiBCdWc6ICM0OTc5ODQpCisKK1ByZXZpb3VzbHksIGUyZnNjayBoYWQgYSBudW1iZXIgb2YgdmVyeSBzZXJpb3VzIGJ1Z3Mgd2hlbiBjaGVja2luZyBhCitmaWxlIHN5c3RlbSB3aWNoIHVzZWQgdGhlIG5ldyB0aGUgcXVvdGEgZmlsZSBzeXN0ZW0gb3B0aW9uICh3aGVyZSB0aGUKK3F1b3RhIGlub2RlcyB3ZXJlIHN0b3JlZCBpbiBoaWRkZW4gaW5vZGVzKSBhbmQgdGhlIHF1b3RhIGlub2RlIHdhcworaW5jb25zaXN0ZW50IHdpdGggdGhlIGFjdHVhbCB1c2FnZSBkYXRhLiAgVGhpcyBwcm9ibGVtIHdhcyBkb2N1bWVudGVkCitpbiBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9RdW90YS4gIFRoZXNlIHByb2JsZW1zIGhhdmUKK2JlZW4gZml4ZWQgaW4gMS40Mi4xMCwgc28gdGhlIHF1b3RhIHNob3VsZCBiZSBzYWZlIHRvIHVzZSB3aXRoCitlMmZzcHJvZ3MgMS40Mi4xMC4KKworRml4ZWQgaW4gYSBidWcgaW4gcmVzaXplMmZzIHdoaWNoIGNvdWxkIGNhdXNlIHNocmluayBvcGVyYXRpb24gZmFpbCBpbgordGhlIHVubGlrZWx5IHNpdHVhdGlvbiB3aGVuIHRoZSBpbm9kZSB0YWJsZSBuZWVkcyB0byBiZSBtb3ZlZCB0byBhCitsb2NhdGlvbiBiZWZvcmUgdGhlIGN1cnJlbnQgbG9jYXRpb24uCisKK1Jlc2l6ZTJmcyBub3cgaGFzIGEgbXVjaCBtb3JlIGFjY3VyYXRlIChhbmQgbGVzcyBjb25zZXJ2YXRpdmUpCitlc3RpbWF0aW9uIG9mIGhvdyBmYXIgdGhlIGZpbGUgc3lzdGVtIGNhbiBiZSBzaHJ1bmsuICBUaGlzIGFsbG93cyBhCittb3N0bHkgZW1wdHkgZmlsZXN5c3RlbSB3aGljaCBpcyBhIGZldyB0ZXJhYnl0ZXMsIHRvIGJlIHNocnVuayB0byBhCitmZXcgbWVnYWJ5dGVzIGluIGEgc2luZ2xlIHJlc2l6ZTJmcyAtTSBvcGVyYXRpb24uCisKK0UyZnNjayB3aWxsIG5vdyBmb3JjZSBhIGZ1bGwgZmlsZSBzeXN0ZW0gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBmaWxlCitzeXN0ZW0gaW5jb25zaXN0ZW5jaWVzIGRldGVjdGVkIGluIHRoZSBzdXBlciBibG9jay4KKworVGhlIGZpbGVmcmFnIHByb2dyYW0gd2lsbCBub3cgZGlzcGxheSBodGUgc2hhcmVkIGV4dGVudCBmbGFnLCB3aGljaCBpcwordXNlZCBieSBmaWxlIHN5c3RlbXMgc3VjaCBhcyBidHJmcy4KKworSWYgdGhlIG51bWJlciBvZiBpbm9kZXMgaW4gdGhlIGZpbGUgc3lzdGVtcyBpcyBsYXJnZXIgdGhhbiB0aGUgdGltZQordGhhdCBmaWxlIHN5dGVtIHdhcyBjcmVhdGVkIChhcyBtZWFzdXJlZCBieSB0aGUgbnVtYmVyIG9mIHNlY29uZHMKK3NpbmNlIEphbnVhcnkgMSwgMTk3MCkgZTJmc2NrIHdvdWxkIHByaW50IGEgc2NhcnkgKGJ1dCBvdGhlcndpc2UKK2hhcm1sZXNzKSB3YXJuaW5nIG9mIGZpbGUgc3lzdGVtIGNvcnJ1cHRpb24gZm9yIGVhY2ggaW5vZGUgaW4gdGhlCitvcnBoYW4gbGlzdC4gIFRoaXMgZmFsc2UgcG9zaXRpdmUgaGFzIGJlZW4gZml4ZWQuCisKK1RoZSBlNGRlZnJhZyBwcm9ncmFtIGhhcyBiZWVuIGZpeGVkIHNvIGl0IHdpbGwgbm8gbG9uZ2VyIHJlZnVzZSB3aXRoCitmaWxlc3lzdGVtIHdpdGggdGhlIDY0LWJpdCBvciB0aGUgYmlnYWxsb2MgZmVhdHVyZSBlbmFibGVkLgorCitUaGUgbG9nc2F2ZSBwcm9nYW0gd2lsbCBwcmludCBhIG11Y2ggbGVzcyBzY2FyeSBtZXNzYWdlIHdoaWNoIGNvdWxkCitsZWFkIHVzZXJzIHRvIGJlbGlldmUgc29tZXRoaW5nIGhhcyBnb25lIHZlcnkgd3Jvbmcgd2l0aCBlMmZzY2sgZXhpdHMKK3dpdGggYSBub24temVybyBleGl0IHN0YXR1cyAoc2luY2UgdGhpcyBpcyBub3JtYWwgYWZ0ZXIgZTJmc2NrIGhhcworYXV0b21hdGljYWxseSBmaXhlZCBhIGZpbGUgc3lzdGVtIGNvcnJ1cHRpb24gZHVyaW5nIGEgcHJlZW4KK29wZXJhdGlvbikuICAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDY4ODIxKQorCitXaGVuIGNyZWF0aW5nIGEgZmlsZSBzeXN0ZW0gd2hpY2ggaXMgbGFyZ2VyIHRoYW4gMTZUQiwgdGhlCityZXNpemVfaW5vZGUgb3B0aW9uIG11c3QgYmUgZGlzYWJsZWQgLS0gc2luY2UgdGhlIHJlc2l6ZV9pbm9kZSBzaW1wbHkKK2RvZXNuJ3Qgc3VwcG9ydCByZXNlcnZpbmcgbWV0YWRhdGEgYmxvY2sgbnVtYmVycyB3aGljaCBpcyBsYXJnZXIgdGhhbgorMzIgYml0cy4gIFRoZSBta2UyZnMgcHJvZ3JhbSBkb2VzIHRoaXMgYXV0b21hdGljYWxseSBpZiB0aGUgZmlsZQorc3lzdGVtIHNpemUgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LiAgSXQgd2lsbCBub3cgYWxzbyBkbyB0aGlzIGlmCit0aGUgZmlsZSBzaXplIGlzIHNwZWNpZmllZCBleHBsaWNpdGx5LgorCitGaXhlZCBidWdzIGFzc29jaWF0ZWQgd2l0aCByZXNpemUyZnMgYW5kIHNocmlua2luZyBiaWdhbGxvYyBmaWxlCitzeXN0ZW1zLgorCitUaGUgZTJmc2NrIHByb2dyYW0gd2lsbCBubyBsb25nZXIgdHJ5IHRvIGFkZCBhIFVVSUQgb24gYSBtb3VudGVkIGZpbGUKK3N5c3RlbSB3aXRoIGNoZWNrc3VtcyBlbmFibGVkLCBzaW5jZSB0aGlzIGNvdWxkIGxlYXZlIHRoZSBmaWxlIHN5c3RlbQorY2hlY2tzdW1zIGJyb2tlbi4KKworVHVuZTJmcyB3aWxsIGFsbG93IHRoZSByZW1vdmFsIG9mIGFuIGV4dGVybmFsIGpvdXJuYWwgZnJvbSBmaWxlIHN5c3RlbQord2hpY2ggaXMgbWFya2VkIGFzIG5lZWRpbmcgdGhlIGpvdXJuYWwgcmVwbGF5ZWQgd2hlbiB0aGUgZm9yY2UgKCItZiIpCitvcHRpb24gaXMgZ2l2ZW4gdHdpY2UuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM1NTkzMDEpCisKK1R1bmUyZnMgd2lsbCBubyBsb25nZXIgc3VwcG9ydCBlbmFibGluZyBzcGFyc2Vfc3VwZXIgaWYgdGhlIG1ldGFfYmcKK2ZpbGUgc3lzdGVtIGZlYXR1cmUgaXMgZW5hYmxlZCwgc2luY2UgaXQgY291bGQgcmVzdWx0IGluIGRhdGEgbG9zcy4KK0luIHByYWN0aWNlLCBhbGwgbW9kZXJuIGZpbGUgc3lzdGVtcyBoYXZlIHNwYXJzZV9zdXBlciBpcyBlbmFibGVkLCBzbworaXQncyBub3Qgd29ydGggdHJ5aW5nIHRvIGNoYW5nZSBob3cgdHVuZTJmcyBoYW5kbGVzIGVuYWJsaW5nIHRoZQorc3BhcnNlX3N1cGVyIGZlYXR1cmUuCisKK0ZpeGVkIHN1cHBvcnQgZm9yIDFrIGJsb2NrIGZpbGUgc3lzdGVtcyB3aXRoIHRoZSBtZXRhX2JnIGZlYXR1cmUuCisKK1doZW4gdGhlIHN1cGVyYmxvY2sgaXMgY29ycnVwdCwgZTJmc2NrIGNhbid0IGZpZ3VyZSBvdXQgdGhlIGxvY2F0aW9uCitvZiB0aGUgYWx0ZXJuYXRlIHN1cGVyYmxvY2suICBVbmZvcnR1bmF0ZWx5LCB0aGUgcm91dGluZSB0aGF0CitjYWxjdWxhdGVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgYWx0ZXJuYXRlIHN1cGVyYmxvY2sgdXNlcyA4MTkzIGlmIGl0CitjYW4ndCBmaWd1cmUgdGhpcyBvdXQsIHNvIHRoZSBtZXNzYWdlIHByaW50ZWQgYnkgZTJmc2NrIGFsd2F5cworc3VnZ2VzdHMgdXNpbmcgImUyZnNjayAtYiA4MTkzIi4gIFRoaXMgbWVzc2FnZSBoYXMgYmVlbiBmaXhlZCB0bworc3VnZ2VzdCBib3RoIHRoZSBzdXBlcmJsb2NrIGxvY2F0aW9uIG9mIDgxOTMgYW5kIGFuZCAzMjc2OC4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzcxOTE4NSkKKworVGhlIGxvb2tiYWNrIG1vdW50IGRldGVjdGlvbiBjb2RlIHRoYXQgd2FzIGludHJvZHVjZWQgaW4gMS40Mi45IHdhc24ndAorYWN0dWFsbHkgY29tcGlsZWQgaW4gZHVlIHRvIGFuIGF1dG9jb25mIG9vcHMsIHNvIGl0J3MgZml4ZWQgbm93IGluCisxLjQyLjEwLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDk3OTg0KQorICAgIAorQSBidWcgaW50cm9kdWNlZCBpbiAxLjQyLjkgd291bGQgY2F1c2UgZGVidWdmcyB0byBwcmludCB0d28gZXJyb3IKK21lc3NhZ2VzIGlmIGl0IGZvdW5kIGFuIGVycm9yIHdoaWxlIHBhcnNpbmcgYSB1c2VyLXN1cHBsaWVkIGJsb2NrCitudW1iZXIuICBUaGlzIGhhcyBiZWVuIGZpeGVkIGluIDEuNDIuMTAuCisKK1VwZGF0ZSBDemVjaCwgRHV0Y2gsIEZyZW5jaCwgR2VybWFuLCBQb2xpc2gsIFNwYW5pc2gsIFN3ZWVkaXNoLCBhbmQKK1ZpZXRuYW1lc2UgdHJhbnNsYXRpb25zLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNzAzMDQ4KQorCitVcGRhdGVkL2ZpeGVkIHZhcmlvdXMgbWFuIHBhZ2VzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzcxOTE4OSwKKyM3MTkxODQpCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIFBhY2thZ2luZyBJc3N1ZXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM3MTg3MjUpCisKKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworRml4ZWQgYSBsb3Qgb2YgY292ZXJpdHksIHNwYXJjZSBnY2MgLVdhbGwsIGFuZCBjbGFuZyB3YXJuaW5ncy9uaXRzLgorCitBbGxvdyB0aGUgbG9jYXRpb24gb2YgcGtnLWNvbmZpZyBmaWxlcyB0byBiZSBzcGVjaWZpZWQgaW5kZXBlbmRlbnQgb2YKK3RoZSBsaWJkaXIgbG9jYXRpb24gdmlhIGEgbWFrZWZpbGUgdmFyaWFibGUuCisKK0ZpeGVkIHBhcnNlLXR5cGVzLnNoIG5vdCB0byBjb21wbGFpbiB3aGVuIGNyb3NzLWNvbXBpbGluZyBhbmQgdGhlCitzaXplcyBvZiB0eXBlcyBhcmUgZGlmZmVyZW50IGJldHdlZW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgYW5kIHRoZQorYXJjaGl0ZWN0dXJlIG9mIHRoZSBidWlsZCBzeXN0ZW0KKworQWxsb3cgdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSB0byB3b3JrIGNvcnJlY3RseSBvbiBzeXN0ZW1zIHdoaWNoIGRvCitub3QgaGF2ZSB0aGUgInRydW5jYXRlIiBvciAibWtzYXdwIiBwcm9ncmFtcy4KKworQWxsb3cgZTJmc2NrIHRvIGJ1aWxkIGNvcnJlY3RseSBvbiBzeXN0ZW1zIChzdWNoIGFzIEFuZHJvaWQpIHRoYXQgZG8KK25vdCBoYXZlIHRoZSBzaWduYWwuaCBmaWxlLgorCitFMmZzcHJvZ3Mgbm93IGhhcyBjb2RlIGNvdmVyYWdlIHRlc3Rpbmcgd2hpY2ggY2FuIGJlIGVuYmxlZCB1c2luZworImNvbmZpZ3VyZSAtLWVuYWJsZS1nY292Ii4KKworVGhlIGxpYmUycC5oIGhlYWRlciBmaWxlIGNhbiBub3cgYmUgdXNlZCBpbmNsdWRlZCBieSBDKysgcHJvZ3JhbXMuCisKK1RoZSBwcm9maWxlL2NvbmZpZyBmaWxlIHVzZWQgYnkgZTJmc2NrIGFuZCBta2UyZnMgd2lsbCBpbnRlcnByZXQKK251bWJlcnMgd2l0aCBhIGxlYWRpbmcgMCBjaGFyYWN0ZXIgdG8gbWVhbiB0aGF0IHRoZXkgc2hvdWxkIGJlCitpbnRlcnByZXRlZCBhcyBhbiBvY3RhbCBpbnRlZ2VyLgorCitUaGUgZXh0ZW50IGhhbmRsaW5nIGZ1bmN0aW9ucyBpbiBsaWJleHQyZnMgaGF2ZSBiZWVuIGltcHJvdmVkIHNvIHRoZXkKK2hhdmUgcHJvcGVyIHJvbGxiYWNrIHdoZW4gdGhlcmUgaXMgYW4gZXJyb3Igc3BsaXR0aW5nIGFuIGV4dGVudC4gIEFsc28KK2ZpeCBhIG51bWJlciBvZiBidWdzIHdoZW4gcHVuY2hpbmcgaG9sZXMgaW4gZmlsZXMsIGFuZCBmaXggYW4KK29mZi1ieS1vbmUgYnVnIHdoZW4gaW5zZXJ0aW5nIGFuIGV4dGVudCBpbnRvIGFuIGVtcHR5IGlub2RlLgorCitUaGUgbGliZXh0MmZzIGxpYnJhcnkgbm93IGhhbmRsZXMgdGhlIHN1cHBvcnQgb2YgQkxPQ0tfVU5JTklUIGJ5CitjbGVhcmluZyB0aGUgcG9ydGlvbiBvZiBibG9jayBiaXRtYXAgd2hlbiBpdCBpcyBsb2FkZWQsIGluc3RlYWQgb2YKK3doZW4gaXQgaXMgdXNlZC4gIFRoaXMgcmVkdWNlcyB0aGUgY2hhbmNlcyBvZiBidWdzLCBhbmQgYW5kIHNpbXBsaWZpZXMKK3RoZSBjb2RlLiAgSXQgYWxzbyBtZWFucyB0aGF0IGRlYnVnZnMgd2lsbCBwcm9wZXJseSBzaG93IHRoYXQgYmxvY2tzCitpbiB1bmluaXRpYWxpemVkIGJsb2NrIGdyb3VwcyBhcyBiZWluZyB1bnVzZWQgd2hlbiB1c2luZyB0aGUgdGVzdGIKK2NvbW1hbmQuCisKK1RoZSBlNGRlZnJhZyBwcm9ncmFtIHdpbGwgdHJ5IHRvIHVzZSBmYWR2aXNlNjQgb3IgcG9zaXhfZmFkdmlzZTY0KCkgaWYKK2l0IGlzIHByZXNlbnQsIHdoaWNoIGFsbG93cyA2NC1iaXQgb2Zmc2V0cyBvbiAzMi1iaXQgc3lzdGVtcy4KKworCitFMmZzcHJvZ3MgMS40Mi45IChEZWNlbWJlciAyOCwgMjAxMykKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNa2UyZnMgd2lsbCBkZXRlY3QgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYSBmaWxlIHN5c3RlbSBvbiBhIGxvb3AKK21vdW50ZWQgZmlsZSBhbmQgY29tcGxhaW4gd2l0aG91dCB0aGUgLUZGIG9wdGlvbi4gIEFsc28gZml4ZWQgbWtlMmZzCitzbyBpdCBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGEgZmlsZSBzeXN0ZW0gb24gYSBtb3VudGVkIGRldmljZSB3aXRoCit0d28gLUYgb3B0aW9ucywgYXMgZG9jdW1lbnRlZCBpbiB0aGUgbWFuIHBhZ2UsIGluc3RlYWQgb2YgdGhyZWUgLUYKK29wdGlvbnMuCisKK0ZpeGVkIGEgbGFyZ2UgbnVtYmVyIG9mIGJ1Z3MgaW4gcmVzaXplMmZzLCBlMmZzY2ssIGRlYnVnZnMsIGFuZAorbGliZXh0MmZzIHRvIGNvcnJlY3RseSBoYW5kbGUgYmlnYWxsb2MgYW5kIDY0LWJpdCBmaWxlIHN5c3RlbXMuICBUaGVyZQord2VyZSBtYW55IGNvcm5lciBjYXNlcyB0aGF0IGhhZCBub3QgYmVlbiBub3RpY2VkIGluIHByZXZpb3VzIHVzZXMgb2YKK3RoZXNlIGZpbGUgc3lzdGVtcywgc2luY2UgdGhleSBhcmUgbm90IGFzIGNvbW1vbi4gIFNvbWUgb2YgdGhlIGJ1Z3MKK2NvdWxkIGNhdXNlIGZpbGUgc3lzdGVtIGNvcnJ1cHRpb24gb3IgZGF0YSBsb3NzLCBzbyB1c2VycyBvZiA2NC1iaXQgb3IKK2JpZ2FsbG9jIGZpbGUgc3lzdGVtcyBhcmUgc3Ryb25nbHkgdXJnZWQgdG8gdXBncmFkZSB0byBlMmZzcHJvZ3MKKzEuNDIuOS4KKworVGhlIHR1bmUyZnMgcHJvZ3JhbSB3aWxsIG5vdyBub3QgYWxsb3cgY2hhbmdpbmcgdGhlIHV1aWQgb24gYSBtb3VudGVkCitmaWxlIHN5c3RlbSB3aGljaCBoYXMgdGhlIHVuaW5pdF9iZyBmZWF0dXJlIGVuYWJsZWQuICBUaGlzIGF2b2lkcyBhCituYXN0eSByYWNlIHdoZXJlIHRoZSBrZXJuZWwgYW5kIHR1bmUyZnMgYXJlIGJvdGggcmV0cnlpbmcgcmV3cml0ZSB0aGUKK2dyb3VwIGRlc2NyaXB0b3JzIGF0IHRoZSBzYW1lIHRpbWUsIHdpdGggZGlmZmVyZW50IGlkZWFzIGFib3V0IHdoYXQKK3RoZSBVVUlEIHNob3VsZCBiZS4KKworV2hlbiBlMmZzY2sgaXMgcmVoYXNoaW5nIGFuIGV4dGVudC1tYXBwZWQgZGlyZWN0b3J5LCBpdCdzIHBvc3NpYmxlCisoYWx0aG91Z2ggdmVyeSByYXJlKSB0aGF0IGFuIGV4dGVudCBibG9jayB3aWxsIG5lZWQgdG8gYmUgYWxsb2NhdGVkOworZml4IGUyZnNjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYmxvY2sgZ2V0cyBtYXJrZWQgYXMgdXNlZC4KKworTWtlMmZzIHdpbGwgbm93IHByb3Blcmx5IHNldCB0aGUgTEFSR0VfRklMRSBmZWF0dXJlIHdoZW4gY3JlYXRpbmcgYQoram91cm5hbCA+PSAyR0IgLS0tIHdoaWNoIGNhbiBoYXBwZW4gd2hlbiB1c2luZyA2NGsgYmxvY2sgc2l6ZS4KKworRml4ZWQgZGVidWdmcyBzbyB0aGF0IGl0cyBmcmVlaSBjb21tYW5kIHdpbGwgY29ycmVjdGx5IGhhbmRsZSBhIHJlcXVlc3QKK3RvIGZyZWUgYSByYW5nZSBvZiBjb25zZWN1dGl2ZSBpbm9kZXMuCisKK0ZpeGVkIDJmc2NrIHNvIGl0IHdpbGwgbm90IGVycm9uZW91c2x5IGNvbXBsYWluIHRoYXQgYW4gZXh0ZXJuYWwgam91cm5hbAoraXMgaW52YWxpZCBpZiBpdCBpcyBleGFjdGx5IDIqKjMyIGJsb2Nrcy4KKworRml4ZWQgZTJmc2NrIHNvIGl0IHdvbid0IHRyeSBjaGVja2luZyBmb3IsIGFuZCBhZGRpbmcsIGEgbWlzc2luZworbG9zdCtmb3VuZCBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nIGluIHJlYWQtb25seSBtb2RlLgorCitGaXhlZCBlMmltYWdlIHRvIGF2b2lkIHNvbWUgYnVmZmVyIG92ZXJydW5zIHdoaWNoIHdvdWxkIGNhdXNlIGl0IHRvIHdoZW4KK2NyZWF0aW5nIGEgInN0YW5kYXJkIChub24tcmF3LCBub24tcWNvdzIpIGltYWdlIGZpbGUuICBTdGFuZGFyZAorZTJpbWFnZSBmaWxlcyBhcmUgYWN0dWFsbHkgdmVyeSByYXJlbHkgdXNlZCwgc28gd2UgZGlkbid0IG5vdGljZSB3aGVuCit0aGUgY2hhbmdlcyB0byBlbmFibGUgdGhlIHFjb3cyIGZvcm1hdCBicm9rZSB0aGlzIGUyaW1hZ2UgbW9kZS4KKworRml4ZWQgbWtlMmZzIHNvIHRoYXQgdGhlIGV4dGVuZGVkIG9wdGlvbiAiLUUgcmVzaXplPU5OTiIgd2lsbCBub3QgdHVybgorb24gdGhlIHJlc2l6ZV9pbm9kZSBmZWF0dXJlIHdoZW4gdGhlIG1ldGFfYmcgZmVhdHVyZSBpcyBzZXQsIHNpbmNlCit0aGVzZSB0d28gZmVhdHVyZXMgY2FuIG5vdCBiZSBzZXQgYXQgdGhlIHNhbWUgdGltZS4KKworRml4ZWQgdHVuZTJmcyBzbyB0aGF0IHdoZW4gaXQgZGlzYWJsZXMgdGhlIHF1b3RhIGZlYXR1cmUsIGl0IHVwZGF0ZXMgYWxsCitvZiB0aGUgYmFja3VwIHN1cGVyYmxvY2tzLgorCitGaXhlZCBkdW1wZTJmcyB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGFib3J0IHdoZW4gcnVuIHVzaW5nIGFuIGltYWdlIGZpbGUKK3doZW4gdHJ5aW5nIHRvIHByaW50IHRoZSBqb3VybmFsIGluZm9ybWF0aW9uICh3aGljaCBpcyBub3QgcHJlc2VudCBpbgorYW4gZTJpbWFnZSBjcmVhdGVkIGltYWdlIGZpbGUpLgorCitGaXhlZCBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IGluIGUycmVlZnJhZy4KKyhBZGRyZXNzZXMtRGViaWFuLUJ1ZzogIzcxODIwNSkKKworRW5oYW5jZSBkZWJ1Z2ZzIHNvIHRoYXQgd2hlbiBjb3B5aW5nIGEgc3BhcnNlIGZpbGUgZnJvbSBhIG5hdGl2ZSBmaWxlCitzeXN0ZW0gaW50byB0aGUgZmlsZSBzeXN0ZW0gaW1hZ2UgdXNpbmcgdGhlICJ3cml0ZSIgY29tbWFuZCwgaXQgd2lsbAorY3JlYXRlIGEgc3BhcnNlIGZpbGUgaW50byB0aGUgZGVzdGluYXRpb24gZmlsZSBzeXN0ZW0uCisKK0VuaGFuY2VkIGRlYnVnZnMgc28gaXQgY2FuIHN1cHBvcnQgYSBjb21tYW5kIGxpbmUgd2hpY2ggaXMgdXAgdG8gOGsKK2xvbmcuCisKK0UyaW1hZ2Ugd2lsbCByZWZ1c2UgKHVubGVzcyB0aGUgLWYgb3B0aW9uIGlzIHNwZWNpZmllZCB0byBmb3JjZSB0aGUKK2lzc3VlKSB0byBjcmVhdGUgYSByYXcgb3IgcWNvdyBpbWFnZSB1c2luZyBhIG1vdW50ZWQgZmlsZSBzeXN0ZW0sCit1bmxlc3MgdGhlIC1mIG9wdGlvbiBpcyBzcGVjaWZpZWQgdG8gZm9yY2UgdGhlIGlzc3VlLgorCitFMmltYWdlIGhhcyBiZWVuIG9wdGltaXplZCBmb3IgdXNpbmcgaXQgdG8gZWZmaWNpZW50bHkgY29weSBhIGZpbGUKK3N5c3RlbSBieSBvbmx5IGNvcHlpbmcgdGhlIGFsbG9jYXRlZCBibG9ja3MsIGJ5IHVzaW5nIHRoZSBvcHRpb25zIC1yYS4KK05ldyBvcHRpb25zICgtbyBhbmQgLU8pIGhhdmUgYmVlbiBhZGRlZCBzbyB0aGF0IGEgc291cmNlIGFuZAorZGVzdGluYXRpb24gb2Zmc2V0IGNhbiBiZSBnaXZlbi4gIFRoZSAtcCBvcHRpb24gd2lsbCBwcmludCBwcm9ncmVzcworaW5mb3JtYXRpb24gc28gdGhlIHVzZXIgd2lsbCBrbm93IGhvdyBmYXIgYWxvbmcgdGhlIGNvcHkgaXMgZ29pbmcuCitBbmQgZmluYWxseSwgdGhlIG5ldyBvcHRpb24gLWMgaXMgdXNlZnVsIGZvciB1cGRhdGluZyBhIGZpbGUgc3lzdGVtIG9uCithbiBTU0QsIGJ5IGF2b2lkaW5nIHVubmVjZXNzYXJ5IHdyaXRlcy4gIEUyaW1hZ2UgY2FuIGFsc28gc2hpZnQgYSBmaWxlCitzeXN0ZW0gaW1hZ2UgYnkgZG9pbmcgYW4gaW4gcGxhY2UgbW92ZS4KKworRml4IGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGluIDEuNDIuOCB3aGljaCB3b3VsZCBjYXVzZSBlMmZzY2sgdG8KK2Vycm9uZW91c2x5IHJlcG9ydCB1bmluaXRpYWxpemVkIGV4dGVudHMgcGFzdCB0aGUgRU9GIChhcyBkZXRlcm1pbmVkIGJ5CitpX3NpemUpIHRvIGJlIGludmFsaWQuCisKK0ZpeGVkIHJlc2l6ZTJmcyBzbyB1bmRlciBhIGNvcm5lciBjYXNlIHdoZW4gYW4gaW5vZGUgaGFzIGEgY29tcGxleAorZXh0ZW50IHRyZWUsIGl0IHdpbGwgbm90IGNvcnJ1cHQgYW4gaW50ZXJpb3Igbm9kZSBpbiB0aGUgZXh0ZW50IHRyZWUuCisKK0ZpeGVkIHJlc2l6ZTJmcyB3aGljaCB3b3VsZCBzb21ldGltZXMgY29ycnVwdCBhIGZpbGUgc3lzdGVtIHdoZW4KK3Nocmlua2luZyBhIGZpbGUgc3lzdGVtIHRvIGEgbWluaW11bSBzaXplIHVzaW5nIHJlc2l6ZTJmcyAtTS4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzY2MDc5MykKKworRml4ZWQgcmVzaXplMmZzIHNvIHRoYXQgaXQgd2lsbCByZWxvY2F0ZSBpbm9kZSB0YWJsZSBibG9ja3MgaWYgdGhpcworYmVjb21lcyBuZWNlc3Nhcnkgd2hlbiBzaHJpbmtpbmcgdGhlIGZpbGUgc3lzdGVtLgorCitGaXhlZCByZXNpemUyZnMgYW5kIGUyZnNjayBzbyB0aGV5IHdpbGwgbm90IGNyYXNoIHdoZW4gaGl0IGEgZmFpbHVyZQord2hpbGUgb3BlcmF0aW5nIG9uIGEgZmlsZSBzeXN0ZW0gd2l0aCB0aGUgTU1QIGZlYXR1cmUgZW5hYmxlZC4KKworRml4ZWQgYSBidWcgaW4gZGVidWdmcyB3aGljaCBjYXVzZWQgaXQgY3JlYXRlIGFuIGludmFsaWQgaW5vZGUgd2hlbgordHJ5aW5nIHRvIHdyaXRlIGEgemVyby1sZW5ndGggZmlsZS4KKworRTJmc2NrIHdpbGwgbm8gbG9uZ2VyIGNyYXNoIGlmIGl0IHRyaWVzIHRvIGRlbGV0ZSBhbiBpbnZhbGlkCitleHRlbnQtbWFwcGVkIHN5bWxpbmsuCisKK0UyZnNjayB3aWxsIG5vIGxvbmdlciBjcmFzaCBpZiBpdCBjb21lcyBhY3Jvc3MgYW4gZGlyZWN0b3J5IHdoaWNoIGlzCitsYXJnZXIgdGhhbiAyR0IgKHdoaWNoIGlzIG5vdCBhbGxvd2VkIGluIHZhbGlkIGZpbGUgc3lzdGVtcykuCisKK0ZpeGVkIGRlYnVnZnMncyBoZWxwIHRleHRzIHRvIGZ1bGx5IGRvY3VtZW50IGFsbCBvcHRpb25zIGFuZCBvdGhlcndpc2UKK2JlIG1vcmUgaGVscGZ1bC4KKworVXBkYXRlZC9maXhlZCB2YXJpb3VzIG1hbiBwYWdlcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6ICM1ODYyMTgsCisjNjY5NzMwLCAjNjk4MDc2KQorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBQYWNrYWdpbmcgSXNzdWVzICgjNjk4ODc5LCAjNzIxMzY1KQorCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeCBzcGFyc2UsIGdjYyAtV2FsbCBhbmQgY2xhbmcgbml0cy4KKworVXBkYXRlIGNvbmZpZy57Z3Vlc3Msc3VifSB0byB0aGUgbGF0ZXN0IHZlcnNpb24KKworRml4ZWQgdmFyaW91cyBtZW1vcnkgYW5kIGZpbGUgZGVzY3JpcHRvciBsZWFrcyBvbiB2YXJpb3VzIGVycm9yIHBhdGhzLAorYXMgd2VsbCBhcyBzb21lIG1pc3NpbmcgZXJyb3IgcmV0dXJuIGNoZWNrcywgd2hpY2ggd2VyZSBmb3VuZCB1c2luZworQ292ZXJpdHkuCisKK1J1biBzcGFyc2UgYWdhaW5zdCBzb3VyY2UgZmlsZXMgd2hlbiBidWlsZGluZyBlMmZzcHJvZ3Mgd2l0aCAnbWFrZQorQz0xJy4gIElmIGluc3RlYWQgQz0yLCBpdCBjb25maWd1cmVzIGJhc2ljIGV4dDIgdHlwZXMgZm9yIGJpdHdpc2UKK2NoZWNraW5nIHdpdGggc3BhcnNlLCB3aGljaCBjYW4gaGVscCBmaW5kIHRoZSAobWFueSBtYW55KSBzcG90cyB3aGVyZQorY29udmVyc2lvbiBlcnJvcnMgYXJlIChwb3NzaWJseSkgaGFwcGVuaW5nLgorCitBbGxvdyB0aGUgcmVncmVzc2lvbiB0ZXN0IHRvIGJlIHJ1biBpbiBjaHJvb3RlZCBlbnZpcm9ubWVudHMgd2hlcmUKKy9ldGMvbXRhYiBtaWdodCBiZSBtaXNzaW5nLgorCitUaGUgZXh0MmZzX3B1bmNoKCkgZnVuY3Rpb24sIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGluIDEuNDIsIHdhcyBicm9rZW4KK2luIG1hbnkgd2F5cywgYnV0IHRoaXMgd2FzIG5ldmVyIG5vdGljZWQgc2luY2UgaXQgd2Fzbid0IHVzZWQgZm9yCithbnl0aGluZyBzaWduaWZpY2FudC4gIFNvbWUgb2YgdGhlIGJ1Z3MgaW5jbHVkZSBmYWlsaW5nIHdoZW4gdHJ5aW5nIHRvCitwdW5jaCBhIGNvbXBsZXRlbHkgc3BhcnNlIGZpbGUsIGZhaWxpbmcgd2hlbiBwdW5jaGluZyBhbiBleHRlbnQtbWFwcGVkCitpbm9kZSB3aGVuIHRoZSBzdGFydGluZyBibG9jayB3YXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgaW5vZGUsIGFuZAorbm90IGJlaW5nIGFibGUgdG8gcHVuY2ggYSBzaW5nbGUgYmxvY2sgKHdoZXJlIHN0YXJ0X2JsayA9PSBlbmRfYmxvY2spLgorSXQgYWxzbyBkaWRuJ3QgaGFuZGxlIGJlaW5nIHBhc3NlZCBhbiBpbnZhbGlkLCB0b28tbGFyZ2UgZW5kaW5nIGJsb2NrCitudW1iZXIsIGFuZCBkaWRuJ3QgaGFuZGxlIHByb3Blcmx5IHRlcm1pbmF0ZSBhdCB0aGUgcmlnaHQgcGxhY2Ugd2hlbgorb3BlcmF0aW5nIG9uIGFuIGluZGlyZWN0LW1hcHBlZCBpbm9kZS4KKworRml4ZWQgc29tZSBtaW5vciB0eXBvJ3MgaW4gdGhlIGVycm9yIGNhdGFsb2cgZm9yIGxpYmV4dDJmcy4KKworRml4ZWQgZXh0MmZzX2ZpbGVfc2V0X3NpemUyKCkgc28gdGhhdCBpZiBpdCB0cnVuY2F0ZXMgYW4gaW5vZGUgYnkKK3NldHRpbmcgdGhlIGZpbGUgc2l6ZSwgdG8gemVybyB0aGUgcmVzdCBvZiB0aGUgYmxvY2sgdG8gdGhlIGVuZCBvZiB0aGUKK2ZpbGUsIHNvIHRoYXQgaWYgYW4gZXh0NCBGVVNFIGRyaXZlciB0cmllcyB0byBleHRlbmRlZCB0aGUgZmlsZSwgdGhhdAord2UgZG9uJ3QgYXZvaWQgc3RhbGUgZGF0YSBmcm9tIGJlaW5nIHJldHVybmVkLgorCitGaXhlZCBleHQyZnNfYm1hcCgpIHRvIGRpc2FsbG93IGNsaWVudHMgZnJvbSB0cnlpbmcgdG8gbWFwIG9yIHNldAorbG9naWNhbCBibG9ja3Mgd2hpY2ggYXJlIGxhcmdlciB0aGFuIHdoYXQgYW4gZXh0ZW50LW1hcHBlZCBvciBpbmRpcmVjdAorYmxvY2stbWFwcGVkIGlub2RlIGNhbiBhbGxvdy4KKworSWYgZGVidWdmcyAob3Igc29tZSB1c2Vyc3BhY2UgcHJvZ3JhbSB1c2luZyBsaWJleHQyZnMpIGNyZWF0ZXMgYSBmaWxlCit3aGljaCBpcyBsYXJnZXIgdGhhbiAyR0IsIG1ha2Ugc3VyZSB0aGUgbGFyZ2VfZmlsZSBmZWF0dXJlIGZsYWcgZ2V0cworc2V0LgorCitGaXggYSBidWcgaW4gZXh0MmZzX2xpbmsoKSB3aGVyZSBpZiB0aGVyZSBpcyBtdWx0aXBsZSBlbXB0eSBzbG90cyBpbiB0aGUKK2RpcmVjdG9yeSB3aGljaCBhcmUgbGFyZ2UgZW5vdWdoLCB0aGUgZGlyZWN0b3J5IGVudHJ5IGNvdWxkIGdldAoraW5zZXJ0ZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIGRpcmVjdG9yeS4KKworSWYgcXVvdGEgc3VwcG9ydCBpcyBkaXNhYmxlZCAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLCBtYWtlIHN1cmUgdGhhdAorYWxsIHRyYWNlcyBvZiB0aGUgcXVvdGEgc3VwcG9ydCBpcyByZW1vdmVkIGZyb20gdXNhZ2UgbWVzc2FnZXMsIG1hbgorcGFnZXMsIGFuZCB0dW5lMmZzIG11c3Qgbm90IGJlIGFibGUgdG8gZW5hYmxlIHRoZSBxdW90YSBmaWxlIHN5c3RlbQorZmVhdHVyZS4gIChBZGRyZXNzZXMgUmVkIEhhdCBCdWd6aWxsYTogIzEwMTA3MDkpCisKK1RoZSBleHQyZnNfZmlsZV93cml0ZSgpIG5vdyB1cGRhdGVzIGlfc2l6ZSBvbiBhIHN1Y2Nlc3NmdWwgd3JpdGUsCitpbnN0ZWFkIG9mIG9ubHkgdXBkYXRpbmcgaV9zaXplIHdlbiB0aGUgZmlsZSBpcyBjbG9zZWQgdmlhCitleHQyZnNfZmlsZV9jbG9zZSgpLgorCitBZGRlZCBhIHNoZWxsIHNjcmlwdCwgcG9wdWxhdGUtZXh0ZnMuc2ggd2hpY2ggdXNlcyBkZWJ1Z2ZzIHRvIHBvcHVsYXRlCithbiBleHQyLzMvNCBmaWxlIHN5c3RlbSBpbWFnZSBmcm9tIGEgZ2l2ZW4gZGlyZWN0b3J5LiAgSXQgaXMgc2ltaWxhcgordG8gdGhlIGdlbmV4dDJmcyBwcm9ncmFtLCBidXQgaXQgc3VwcG9ydHMgZXh0MyBhbmQgZXh0NCBmaWxlIHN5c3RlbS4KKworQWRkIGNoYW5nZXMgdG8gdGhlIGxpYmV4dDJmcyBsaWJyYXJ5IHRvIHN1cHBvcnQgYmxvY2sgZ3JvdXAKK2Rlc2NyaXB0b3JzIGxhcmdlciB0aGFuIDY0IGJ5dGVzIChmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkpLgorCitGaXhlZCBhbiBvZmYtYnktb25lIGJ1ZyBpbiBleHQyZnNfZmlsZV9zZXRfc2l6ZTIoKSBzbyB0aGF0IGl0IHdpbGwgbm90CitsZWF2ZSBhbiBleHRyYSBibG9jayBpbiB0aGUgZmlsZSB3aGVuIHRydW5jYXRpbmcgdGhlIGZpbGUgZG93biB0bworc2l6ZS4KKworVGhlIGh0bWwgdmVyc2lvbiBpbmZvIHBhZ2VzIGFyZSBub3cgYnVpbHQgdXNpbmcgbWFrZWluZm8gLS1odG1sCitpbnN0ZWFkIG9mIHRoZSB1bm1haW50YWluZWQgYW5kIG5vdy1vYnNvbGV0ZSB0ZXhpMmh0bWwgcHJvZ3JhbS4KKworCitFMmZzcHJvZ3MgMS40Mi44IChKdW5lIDIwLCAyMDEzKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQXMgYSBwYXJ0IG9mIG1rZTJmcydzIG9wdGlvbiBwYXJzaW5nIGNsZWFudXAsIHRoZSB1c2Ugb2YgdGhlIC1SIG9wdGlvbgord2lsbCBnaXZlIGEgd2FybmluZyB0aGF0IGl0IGlzIGRlcHJlYXRlZCAoaXQgaGFzIGJlZW4gc28gZG9jdW1lbnRlZAorc2luY2UgMjAwNSkgYW5kIC1FIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisKK01rZTJmcyB3aWxsIG5vdCBnaXZlIHdhcm5pbmdzIGFib3V0IHRoZSBiaWdhbGxvYyBhbmQgcXVvdGEgb3B0aW9ucyBpbgorcXVpZXQgbW9kZS4KKworSWYgYW4gaW52YWxpZCBqb3VybmFsIHNpemUgaXMgZ2l2ZW4gdG8gbWtlMmZzLCBpdCB3aWxsIG5vdyBjb21wbGFpbgorYW5kIGV4aXQgc29vbmVyLgorCitEZWJ1Z2ZzIHdhcyBlcnJvbmVvdXNseSBnaXZpbmcgc3B1cmlvdXMgZXJyb3IgbWVzc2FnZXMgZm9yIGNlcnRhaW4KK2V4dGVudF9pbm9kZSBzdWJjb21tYW5kcyB3aGljaCB0YWtlIGFyZ3VtZW50cyAoc3BsaXRfbm9kZSwKK3JlcGxhY2Vfbm9kZSwgYW5kIGluc2VydF9ub2RlKS4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKK0ZpeCB0aGUgcGFyc2luZyBvZiB0aGUgJ3MnIChzZWN0b3JzKSBpbiBwYXJzZV9udW1fYmxvY2tzMiwgd2hpY2ggYW1vbmcKK290aGVyIHByb2dyYW1zIGlzIHVzZWQgYnkgbWtlMmZzLgorCitDaGFuZ2UgbWtlMmZzIHNvIHRoYXQgaXQgZG9lcyBub3Qgc2V0IHRoZSByb290IGRpcmVjdG9yeSB0byB0aGUgcmVhbAordWlkL2dpZCBvZiB0aGUgbWtlMmZzIHByb2Nlc3MuICBBZGQgdGhlIGV4dGVuZGVkIG9wdGlvbiByb290X293bmVyIHRvCitvdmVycmlkZSB0aGlzIGJlaGF2aW9yLgorCitGaXggcmVzaXplMmZzIHdoZW4gc2hyaW5raW5nIGZpbGUgc3lzdGVtcyB0byBtYWtlIHN1cmUgdGhhdCBiaXRtYXAKK2Jsb2NrcyBhcmVuJ3QgbGVmdCBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHNocnVua2VuIGZpbGUgc3lzdGVtLgorVGhpcyBjb3VsZCBoYXBwZW4gd2l0aCBmbGV4X2JnIGZpbGUgc3lzdGVtcyB0aGF0IHdlcmUgZ3Jvd24gdXNpbmcKK3RoZSBvbGQgb25saW5lIHJlc2l6aW5nIGFsZ29yaXRobS4KKworRTJmc2NrIHdpbGwgbm93IGRldGVjdCBhbmQgcmVwYWlyIGNvcnJ1cHRlZCBleHRlbnQgdHJlZXMgd2hpY2ggY29udGFpbgoraW52YWxpZCBleHRlbnRzIGF0IHRoZSBlbmQgb2YgdGhlIGV4dGVudCB0cmVlIGxlYWYgYmxvY2suCisKK0UyZnNjayB3aWxsIG5vdyBsb25nZXIgY29tcGxhaW4gYWJvdXQgemVybyBsZW5ndGggZXh0ZW5kZWQgYXR0cmlidXRlCit2YWx1ZXMuCisKK0ZpeCBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbiBlMmZzcHJvZ3MgdjEuNDIgd2hpY2ggY2F1c2VkIGUyaW1hZ2UgLXMKK3RvIGNyYXNoLgorCitBZGQgc2FmZXR5IGNoZWNrIHNvIHR1bmUyZnMgd2lsbCBub3QgYXR0ZW1wdCB0byBzZXQgdGhlIGlub2RlIHNpemUgdG8KK2JlIGxhcmdlciB0aGFuIHRoZSBibG9jayBzaXplLgorCitGaXggZTJmc2NrIHNvIGl0IGNhbiBjaGVjayBhIHJlYWQtb25seSByb290IGZpbGUgc3lzdGVtIHdpdGggYW4KK2V4dGVybmFsIGpvdXJuYWwuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM3MDcwMzAKKworRml4IG9mZi1saW5lIHJlc2l6aW5nIG9mIGZpbGUgc3lzdGVtcyB3aXRoIGZsZXhfYmcgJiYgIXJlc2l6ZV9pbm9kZQorKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNjk2NzQ2KQorCitGaXggZTJpbWFnZSB3aXRoIGxhcmdlICg+IDMyLWJpdCkgZmlsZSBzeXN0ZW1zIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzoKKyM3MDMwNjcpCisKK0VuaGFuY2UgY2hhdHRyIHRvIGFsbG93IGNsZWFyaW5nIHRoZSBleHRlbnQgZmxhZyBpZiB0aGUga2VybmVsIGFsbG93cworbWlncmF0aW5nIGV4dGVudCBiYXNlZCBmaWxlcyB0byB1c2UgaW5kaXJlY3QgYmxvY2tzLgorCitVcGRhdGUgR2VybWFuIHRyYW5zbGF0aW9uLgorCitVcGRhdGVkL2ZpeGVkIHZhcmlvdXMgbWFuIHBhZ2VzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzcxMjQyOSwKKyM3MTI0MzAsICM3MDc2MDkpCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIFBhY2thZ2luZyBJc3N1ZXMgKEFkZHJlc3NlcyBEZWJpYW4gQnVnICM3MDgzMDcpCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VzZSBzZWN1cmVfZ2V0ZW52KCkgaW4gcHJlZmVyZW5jZSB0byBfX3NlY3VyZV9nZXRlbnYoKS4KKworT3B0aW1pemUgQ1BVIHV0aWxpemF0aW9uIG9mIGV4dDJmc19iZ19oYXNfc3VwZXIoKS4KKworRml4IGV4dDJmc19sbHNlZWsoKSBvbiAzMi1iaXQgaTM4NiBzeXN0ZW1zIHRvIHdvcmsgY29ycmVjdGx5IHdoZW4KK1NFRUtfQ1VSIGlzIHVzZWQgd2l0aCBsYXJnZSBmaWxlcy4KKworVGhlIGV4dDJmc19yZWFkX2lub2RlX2Z1bGwoKSBmdW5jdGlvbiB3aWxsIG5vIGxvbmdlciB1c2UKK2ZzLT5yZWFkX2lub2RlKCkgaWYgdGhlIGNhbGxlciBoYXMgcmVxdWVzdGVkIG1vcmUgdGhhbiB0aGUgYmFzZSAxMjgKK2J5dGUgaW5vZGUgc3RydWN0dXJlIGFuZCB0aGUgaW5vZGUgc2l6ZSBpcyBncmVhdGVyIHRoYW4gMTI4IGJ5dGVzLgorCitGaXggYnVpbGQgZmFpbHVyZSB3aXRoIC0tZW5hYmxlLWpiZC1kZWJ1Zy4KKworQ2xlYW4gdXAgZmlsdGVyaW5nIG9mIG91dHB1dHMgZm9yIHRoZSByZWdyZXNzaW9uIHRlc3RzIGJ5IHVzaW5nIGEKK2NvbW1vbiBzZWQgc2NyaXB0LgorCitGaXggZ2NjIC1XYWxsIGFuZCBjbGFuZyBuaXRzLgorCisKK0UyZnNwcm9ncyAxLjQyLjcgKEphbnVhcnkgMjEsIDIwMTMpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBZGQgd2FybmluZ3MgdG8gbWtlMmZzLCByZXNpemUyZnMsIGFuZCB0dW5lMmZzIHRoYXQgdGhlIGJpZ2FsbG9jIGFuZAorcXVvdGEgZmVhdHVyZXMgYXJlIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50LiAgRm9yIG1vcmUgaW5mb3JtYXRpb24KK3BsZWFzZSBzZWU6CisgICAgKiBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYworICAgICogaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvUXVvdGEKKworQWRkIHNvbWUgbmV3IG9wdGlvbnMgdG8gZmlsZWZyYWcgZnJvbSBMdXN0cmUncyBwYXRjaGVzIHRvIGUyZnNwcm9nczoKKyAgICAqIGFkZCAtayBvcHRpb24gdG8gcHJpbnQgZXh0ZW50cyBpbiBrQi1zaXplZCB1bml0cyAobGlrZSBkZiAtaykKKyAgICAqIGFkZCAtYiB7YmxvY2tzaXplfSB0byBwcmludCBleHRlbnRzIGluIGJsb2Nrc2l6ZSB1bml0cworICAgICogYWRkIC1lIG9wdGlvbiB0byBwcmludCBleHRlbnQgZm9ybWF0LCBldmVuIHdoZW4gRklCTUFQIGlzIHVzZWQKKyAgICAqIGFkZCAtWCBvcHRpb24gdG8gcHJpbnQgZXh0ZW50cyBpbiBoZXhhZGVjaW1hbCBmb3JtYXQKKworRml4IHJlc2l6ZTJmcyBzbyB0aGF0IGl0IGNhbiBoYW5kbGUgb2ZmLWxpbmUgcmVzaXplcyBvZiBmaWxlIHN5c3RlbXMKK3dpdGggdGhlIGZsZXhfYmcgZmVhdHVyZSBidXQgd2l0aG91dCBhIHJlc2l6ZV9pbm9kZSAob3IgaWYgd2UgcnVuIG91dAorb2YgcmVzZXJ2ZWQgZ2R0IGJsb2NrcykuICBUaGlzIGFsc28gZml4ZXMgYSBwcm9ibGVtIHdoZXJlIGlmIHRoZSB1c2VyCitjcmVhdGVzIGEgZmlsZXN5c3RlbSB3aXRoIGEgcmVzdHJpY3RlZCBudW1iZXIgb2YgcmVzZXJ2ZWQgZ2R0IGJsb2NrcywKK2FuIG9mZi1saW5lIHJlc2l6ZSB3aGljaCBncm93cyB0aGUgZmlsZSBzeXN0ZW0gY291bGQgcG90ZW50aWFsbHkKK3Jlc3VsdCBpbiBmaWxlIHN5c3RlbSBjb3JydXB0aW9uLgorCitGaXggYSByZXNpemUyZnMgYnVnIHdoaWNoIGNvdWxkIGNhdXNlIGl0IHRvIGNvcnJ1cHQgYmlnYWxsb2MgZmlsZQorc3lzdGVtcyB3aGVuIGRvaW5nIGFuIG9mZi1saW5lIHJlc2l6ZS4KKworRnVydGhlciBvcHRpbWl6ZSByZXNpemUyZnMgc28gaXQgZG9lc24ndCB1c2UgcXVpdGUgYXMgbXVjaCBDUFUgd2hlbgorcmVzaXppbmcgdmVyeSBsYXJnZSBmaWxlIHN5c3RlbXMuIAorCitGaXhlZCAzMi1iaXQgb3ZlcmZsb3cgYnVncyB3aGljaCBjb3VsZCBjYXVzZSByZXNpemUyZnMgdG8gZmFpbCBhbmQKK3Bvc3NpYmx5IGNvcnJ1cHQgdGhlIGZpbGUgc3lzdGVtIHdoaWxlIHJlc2l6aW5nIDY0LWJpdCBmaWxlIHN5c3RlbXMuCisKK0ZpeCBhIGJ1ZyBpbiBta2UyZnMgd2hlcmUgcGFyc2luZyAiLUUgcmVzaXplPU5OTiIgd2lsbCByZXN1bHQgaW4gYQorbWtlMmZzIGNyYXNoIGR1ZSB0byBhIGRpdmlkZS1ieS16ZXJvIGlmIHRoZSA2NGJpdCBmaWxlIHN5c3RlbSBmZWF0dXJlCitpcyBlbmFibGVkLgorCitBZGQgYmV0dGVyIGVycm9yIGNoZWNraW5nIHRvIG1rZTJmcyB0byBjaGVjayBmb3IgaW52YWxpZCBwYXJhbWV0ZXJzCit3aGVuIGNyZWF0aW5nIGJpZ2FsbG9jIGZpbGUgc3lzdGVtLgorCitXaGVuIGNyZWF0aW5nIGJpZ2FsbG9jIGZpbGVzeXN0ZW1zLCB0aGUgLWcgb3B0aW9uIHRvIG1rZTJmcyB3aWxsIG5vdworc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGNsdXN0ZXJzIHBlciBibG9jayBncm91cC4KKworQWRkIHRvIGRlYnVnZnMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY29ycnVwdCBhIHNwZWNpZmljIGZpbGUgc3lzdGVtCitibG9jayB2aWEgdGhlICJ6YXBfYmxvY2siIGNvbW1hbmQuCisKK0FkZCB0byBkZWJ1Z2ZzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIHByaW50IG91dCBhIGhleCBkdW1wIG9mIGEgYmxvY2sgaW4KK3RoZSBmaWxlIHN5c3RlbSB2aWEgdGhlICJibG9ja19kdW1wIiBjb21tYW5kLgorCitBZGQgdG8gZGVidWdmcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBtYW5pcHVsYXRlIHRoZSBleHRlbnQgdHJlZQorZGlyZWN0bHkgdmlhIHRoZSAiZXh0ZW50X29wZW4iIGNvbW1hbmQuCisKK0ZpeGVkIGRlYnVnZnMncyBta25vZCBjb21tYW5kIHNvIHRoYXQgaXQgdXBkYXRlcyB0aGUgYmxvY2sgZ3JvdXAKK3N0YXRpc3RpY3MuCisKK0ZpeCBlMmZzY2sgc28gaXQgY2FuIGRldGVjdCBhbmQgZml4IGluY29uc2lzdGVuY2llcyBpbiB0aGUgaW50ZXJpb3IKK25vZGVzIG9mIGFuIGlub2RlJ3MgZXh0ZW50IHRyZWUuCisKK0ZpeCBhIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBmYWlsdXJlIGluIGUyZnNjaydzIGVycm9yIHBhdGggaWYKK3RoZSBjYWxsIHRvIGV4dDJmc19vcGVuMigpIGZhaWxzLgorCitGaXggZTJmc2NrIGlmIGl0cyBsb2dnaW5nIGZ1bmN0aW9uIGlzIGVuYWJsZWQgaW4gZTJmc2NrLmNvbmYsIGFuZCB0aGUKK3Jlc3VsdGluZyBmaWxlIG5hbWUgZm9yIHRoZSBsb2cgZmlsZSBpcyBsb25nZXIgdGhhbiAxMDAgYnl0ZXMsIHRoYXQgaXQKK3Byb3Blcmx5IGhhbmRsZXMgdGhpcyBzaXR1YXRpb24gaW5zdGVhZCBvZiBjcmFzaGluZy4KKworRTJmc2NrIHdpbGwgbm93IHJlcG9ydCB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aGF0IGl0IGF0dGVtcHRlZCB0bworYWxsb2NhdGUgd2hlbiBhIG1lbW9yeSBhbGxvY2F0aW9uIHJlcXVlc3QgZmFpbHMsIHRvIG1ha2UgaXQgZWFzaWVyIHRvCit0cmFjayBkb3duIHRoZSBwcm9ibGVtLgorCitGaXggbWtlMmZzJ3MgaGFuZGxpbmcgb2YgdGhlIG1tcF91cGRhdGVfaW50ZXJ2YWwgb3B0aW9uLiAgKEFkZHJlc3NlcworTHVzdHJlIEJ1ZzogTFUtMTg4OCkKKworRTJpbWFnZSBjYW4gbm93IGluY2x1ZGUgYWxsIGRhdGEgYmxvY2tzIGluIHRoZSBlMmltYWdlIG91dHB1dCBmaWxlCit3aGVuIHRoZSB1c2VyIHNwZWNpZmllcyB0aGUgLWEgb3B0aW9uLgorCitJZiBlMmZzcHJvZ3MgaXMgY29tcGlsZWQgd2l0aG91dCAtLWVuYWJsZS1xdW90YSwgbWFrZSBzdXJlIHRoYXQKK3R1bmUyZnMgY2FuIG5vdCB0dXJuIG9uIHRoZSBmZWF0dXJlIGZvciBuZXctc3R5bGUgcXVvdGEgc3VwcG9ydCwgc2luY2UKK2FmdGVyd2FyZHMsIG5vbmUgb2YgdGhlIGUyZnNwcm9ncyB0b29scyB3aWxsIGJlIHdpbGxpbmcgdG8gdG91Y2ggdGhhdAorZmlsZSBzeXN0ZW0uCisKK09wdGltaXplIGUyZnNjaydzIHNvIHRoYXQgaXQgdXNlcyBtdWNoIGxlc3MgQ1BVIGZvciBsYXJnZSBmaWxlCitzeXN0ZW1zLiAgVGhpcyBjYW4gcmVzdWx0IGluIHNpZ25pZmljYW50IHNwZWVkdXBzLCBlc3BlY2lhbGx5IG9uCitDUFUtY29uc3RyYWluZWQgc3lzdGVtcy4gIFRoaXMgd2FzIHByaW1hcmlseSBkb25lIGJ5IG9wdGltaXppbmcKK2xpYmV4dDJmcydzIGJpdG1hcCBmdW5jdGlvbnMuICAoQWRkcmVzc2VzIEdvb2dsZSBCdWc6ICM3NTM0ODEzKQorCitGaXggZGVidWdmcydzIGh0cmVlIGNvbW1hbmQgc28gdGhhdCBhbGwgaXRzIG1lc3NhZ2VzIGFyZSBzZW50IHRocm91Z2gKK3RoZSBwYWdlci4KKworRml4ZWQgZGVidWdmcydzICJkdW1wX2ZpbGUiIGFuZCAiY2F0IiBmdW5jdGlvbnMgd29yayBjb3JyZWN0bHkKK29uIGZpbGUgc3lzdGVtcyB3aG9zZSBibG9jayBzaXplIGlzIGdyZWF0ZXIgdGhhbiA4ay4KKworRml4IGUyZnJlZWZyYWcgc28gaXQgd29ya3Mgb24gNjQtYml0IGZpbGUgc3lzdGVtcywgYW5kIHNvIGl0IHVzZXMgbXVjaAorbGVzcyBtZW1vcnkuICAoQWRkcmVzc2VzIEdvb2dsZSBCdWc6IDcyNjk5NDgpCisKK1VwZGF0ZSB0aGUgc3BkX3JlYWRkaXIuYyBmaWxlIGluIHRoZSBjb250cmliIGRpcmVjdG9yeSB0byBpbmNsdWRlIHNvbWUKK2FkZGl0aW9ucyB3aGljaCB3ZXJlIG1hZGUgaW4gMjAwOCB0aGF0IGRpZG4ndCBnZXQgZm9sZGVkIGludG8gdGhlCit2ZXJzaW9uIHdoaWNoIHdlIGNoZWNrZWQgaW50byB0aGUgZTJmc3Byb2dzIHNvdXJjZSB0cmVlLiAgVGhlc2UKK2VuaGFuY2VtZW50cyBpbmNsdWRlIHRocmVhZCBzYWZldHksIHN1cHBvcnQgZm9yIHJlYWRkaXI2NF9yKCksIGFuZAorc2FmZV9nZXRlbnYoKSBzdXBwb3J0IGluIGNhc2Ugc3BkX3JlYWRkaXIuc28gaXMgdXNlZCBmb3Igc2V0dWlkIGJpbmFyaWVzLgorCitVcGRhdGUgQ3plY2gsIER1dGNoLCBGcmVuY2gsIEdlcm1hbiwgUG9saXNoLCBTd2VlZGlzaCwgYW5kIFZpZXRuYW1lc2UKK3RyYW5zbGF0aW9ucworCitBZGQgYSBjb21tYW5kIHRvIGRlYnVnZnMgdG8gY3JlYXRlIHN5bWxpbmtzLgorCitEb2N1bWVudCB0aGUgYmlnYWxsb2MgZmVhdHVyZSBpbiB0aGUgbWtlMmZzIG1hbiBwYWdlLiAgKEFkZHJlc3NlcworRGViaWFuIEJ1ZzogIzY2OTczMCkKKworCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXggZ2NjIC1XYWxsIG5pdHMuCisKK0ZpeCBhIHNwZWxsaW5nIHR5cG8gaW4gdGhlIGxpYmV4dDJmcyB0ZXhpbmZvIGRvY3VtZW50YXRpb24uCisKK0NoYW5nZSB0aGUgb3V0cHV0IGZyb20gIm1ha2UgY2hlY2siIHNvIHRoYXQgdG9vbHMgc3VjaCBhcyBlbWFjcydzICJNLXgKK2NvbXBpbGUiIGRvZXMgbm90IG1pc3Rha2UgdGhlIG91dHB1dCBhcyBjb250YWluaW5nIGEgY29tcGlsZXIgZXJyb3IuCisKK0V4cG9ydCB0d28gbmV3IGZ1bmN0aW9ucyBmcm9tIGxpYmV4dDJmczogZXh0MmZzX2V4dGVudF9ub2RlX3NwbGl0KCkKK2FuZCBleHQyZnNfZXh0ZW50X2dvdG8yKCkuCisKK1RoZSBleHQyZnNfZXh0ZW50c19maXhfcGFyZW50cygpIHdhcyBmaXhlZCBzbyBpdCBkb2VzIG5vdCBtb2RpZnkgdGhlCitsb2NhdGlvbiBvZiB0aGUgZXh0ZW50IGhhbmRsZSBpZiBpdHMgY3VycmVudCBsb2NhdGlvbiBpcyBhdCBhbgoraW50ZXJpb3Igbm9kZSwgcmF0aGVyIHRoYW4gYSBsZWFmIG5vZGUgb2YgYW4gaW5vZGUncyBleHRlbnQgdHJlZS4KKworQWRkIGEgcmVncmVzc2lvbiB0ZXN0IHRvIGFzc3VyZSB0aGF0IGUyZnNjayBjYW4gY29ycmVjdGx5IGZpeCBhbgoraW5jb25zaXN0ZW50IGludGVyaW9yIG5vZGUgaW4gYW4gaW5vZGUncyBleHRlbnQgdHJlZS4KKworVGhlIGV4dDJmc197bWFyayx1bm1hcmssdGVzdH1fYmxvY2tfYml0bWFwX3JhbmdlMigpIGZ1bmN0aW9ucyBub3cKK2NvcnJlY3RseSBzdXBwb3J0IGJpZ2FsbG9jIGZpbGUgc3lzdGVtcyB3aGljaCB1c2Ugc3RvcmUgYmxvY2sgdXNhZ2UKK2luZm9ybWF0aW9uIGluIHVuaXRzIG9mIGNsdXN0ZXJzLgorCitGaXhlZCB0aGUgaGVscCB0ZXh0IGluIHRoZSBjb25maWd1cmUgc2NyaXB0IGZvciAtLWVuYWJsZS1xdW90YS4KKworVGhlIG02OGstc3BlY2lmaWMgYml0b3BzIGNvZGUgaGFzIGJlZW4gcmVtb3ZlZCBzaW5jZSB0aGV5IHdlcmUKK2luY29ycmVjdGx5IHRyZWF0aW5nIGJpdCBudW1iZXJzIHdpdGggdGhlIGhpZ2ggYml0IHNldCBhcyBzaWduZWQKK2ludGVnZXJzLiAgRnVydGhlcm1vcmUsIG1vZGVybiBjb21waWxlcnMgZG8gYSBnb29kIGVub3VnaCBqb2IKK29wdGltaXppbmcgdGhlIGdlbmVyaWMgY29kZSB0aGVyZSBpcyBubyBwb2ludCBpbiBoYXZpbmcgdGhlIG02OGsKK3NwZWNpZmljIGFzbSBzdGF0ZW1lbnRzLgorCitGaXhlZCBob3cgd2UgbGluayB0aGUgdGVzdCBwcm9ncmFtcyBzbyB0aGV5IGFsd2F5cyB1c2UgdGhlIHN0YXRpYworbGlicmFyaWVzLCBzbyB0aGF0IHdlIHRlc3QgdXNpbmcgdGhlIGxpYnJhcmllcyB3aGljaCB3ZSBoYXZlIGp1c3QKK2J1aWx0LgorCitVcGRhdGUgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIHRvIHRoZSBsYXRlc3QgdmVyc2lvbnMgZnJvbSB0aGUgR05VCitwcm9qZWN0LgorCitGaXhlZCB0aGUgY29tX2Vyci50ZXhpbmZvIGZpbGUgc28gdGhhdCBpdCBjYW4gcHJvZHVjZSBhIHZhbGlkCitwb3N0c2NyaXB0L3BkZiBwcmludGVkIG91dHB1dC4KKworQWRkIGEgcmVncmVzc2lvbiB0ZXN0IHdoaWNoIGNoZWNrcyBkZWJ1Z2ZzJ3MgYWJpbGl0eSB0byBjcmVhdGUKK3N5bWxpbmtzLCBuYW1lZCBGSUZPJ3MsIGFuZCBkZXZpY2Ugbm9kZXMuCisKK0FkZCBhIGZ1bmN0aW9uIGV4dDJmc19zeW1saW5rKCksIHdoaWNoIGNyZWF0ZXMgc3ltbGlua3MgdG8gdGhlCitsaWJleHQyZnMgbGlicmFyeS4KKworQWRkIGRlYnVnZ2luZyBjb2RlIHNvIHdlIGNhbiB0ZXN0IG9sZCBrZXJuZWwgaW50ZXJmYWNlcyBmb3Igb25saW5lCityZXNpemUgdG8gcmVzaXplMmZzLiAgVGhpcyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBjaGVja2luZyBpcyBrZXllZAorb2ZmIG9mIHRoZSBSRVNJWkUyRlNfS0VSTkVMX1ZFUlNJT04sIHdoaWNoIGlzIGRlc2lnbmVkIHRvIGFsbG93IHVzIHRvCit0ZXN0IHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBrZXJuZWwncyBvbGRlciByZXNpemUgaW9jdGxzIHdpdGhvdXQKK25lZWRpbmcgdG8gaW5zdGFsbCBhbiBvbGQgdmVyc2lvbiBvZiByZXNpemUyZnMsIGFuZCB0byBhbHNvIHRlc3QgYQorbW9kZXJuIHJlc2l6ZTJmcydzIGFiaWxpdHkgdG8gd29yayB3aXRoIG9sZGVyIGtlcm5lbHMgd2l0aG91dCBoYXZpbmcKK3RvIGluc3RhbGwgYW4gb2xkZXIgdmVyc2lvbiBvZiB0aGUga2VybmVsLgorCisKK0UyZnNwcm9ncyAxLjQyLjYgKFNlcHRlbWJlciAyMSwgMjAxMikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiBta2UyZnMgY3JlYXRlcyBmaWxlIHN5c3RlbXMgd2l0aCBsYXp5IGl0YWJsZSBpbml0aWFsaXphdGlvbiwgdGhlCitwcm9ncmVzcyB1cGRhdGVzIGZvciB3cml0aW5nIHRoZSBpbm9kZSB0YWJsZSBoYXBwZW5zIHNvIHF1aWNrbHkgdGhhdAorb24gYSBzZXJpYWwgY29uc29sZSwgdGhlIHRpbWUgdG8gd3JpdGUgdGhlIHByb2dyZXNzIHVwZGF0ZXMgY2FuIGJlIHRoZQorYm90dGxlbmVjay4gIFNvIG1rZTJmcyB3aWxsIG5vdyBvbmx5IHVwZGF0ZSBpdHMgcHJvZ3Jlc3MgaW5kaWNhdG9ycworb25jZSBhIHNlY29uZC4KKworUmVzaXplMmZzIHdpbGwgc2tpcCBpbml0aWFsaXppbmcgdGhlIGlub2RlIHRhYmxlcyBpZiB0aGUga2VybmVsCitzdXBwb3J0cyBsYXp5X2l0YWJsZV9pbml0LCB3aGljaCBzcGVlZHMgdXAgZ3Jvd2luZyBvZmYtbGluZSBncm93dGggb2YKK3VuaW5pdF9iZyBmaWxlIHN5c3RlbXMgc2lnbmlmaWNhbnRseS4gIFJlc2l6ZTJmcyB3aWxsIG5vdyBhbHNvCitjb3JyZWN0bHkgc2V0IHRoZSBpdGFibGVfdW51c2VkIGZpZWxkIGluIHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9yIHRvCitzcGVlZCB1cCB0aGUgZmlyc3QgZTJmc2NrIGFmdGVyIHRoZSBmaWxlIHN5c3RlbSBpcyBncm93bi4KKworUmVzaXplMmZzIGhhcyBiZWVuIGZpeGVkIHNvIHRoYXQgb24tbGluZSByZXNpemluZyBvZiBtZXRhX2JnIGZpbGUKK3N5c3RlbXMgd29yayBjb3JyZWN0bHkuICBUaGlzIGlzIG5lZWRlZCB0byBncm93IGZpbGUgc3lzdGVtIHdoaWNoIGFyZQorbGFyZ2VyIHRoYW4gMTZULgorCitSZXNpemUyZnMgd2lsbCBub3cgY29ycmVjdGx5IGhhbmRsZSByZXNpemluZyBmaWxlIHN5c3RlbXMgdG8gMTZUQiBvbgorMzItYml0IGZpbGUgc3lzdGVtcyB3aGVuICIxNlRCIiBpcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworRml4IG1rZTJmcyBzbyB0aGF0IGl0IHdpbGwgYmUgY2FyZWZ1bCB0byBzZXQgdGhlIHJlc2VydmVkIGJsb2NrcyByYXRpbworbGFyZ2VyIHRoYW4gNTAlOyB0aGlzIGNhbiBoYXBwZW4gd2hlbiBjcmVhdGluZyBzbWFsbCBmaWxlIHN5c3RlbXMgYW5kCit3aGVuIHRoZSBsYXN0IGJsb2NrIGdyb3VwIGlzIGRyb3BwZWQgYmVjYXVzZSB0aGVyZSBhcmUgbm90IGVub3VnaAorYmxvY2tzIHRvIHN1cHBvcnQgdGhlIG1ldGFkYXRhIGJsb2NrcyBpbiB0aGUgbGFzdCBibG9jayBncm91cC4KKworRml4ZWQgc3BlbGxpbmcgbWlzdGFrZSBpbiBkZWJ1Z2ZzJ3MgaGVscCBtZXNzYWdlLgorCitGaXhlZCBhIHBvdGVudGlhbCBzZWcgZmF1bHQgaW4gZTJmc2NrIHdoZW4gdGhlcmUgaXMgYW4gSS9PIGVycm9yIHdoaWxlCityZWFkaW5nIHRoZSBzdXBlcmJsb2NrLgorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBQYWNrYWdpbmcgSXNzdWVzIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjNjc3NDk3KQorCitVcGRhdGVkL2ZpeGVkIHZhcmlvdXMgbWFuIHBhZ2VzLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6CisjMzU1OTIxMCkKKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtcmVsYXRpdmUtc3ltbGluayB3YXMgYnJva2VuIHNvIHRoYXQgaXQKK25lZWRlZCB0byBiZSAtLWVuYWJsZS1zeW1saW5rLXJlbGF0aXZlLXN5bWxpbmtzLiAgV2Ugd2lsbCBzdXBwb3J0IGJvdGgKK2ZvciBhdCBsZWFzdCB0d28geWVhcnMsIGJ1dCB0aGVuIHRoZSB3b3JuZyBjb25maWd1cmUgb3B0aW9uIHdpbGwgYmUKK3JlbW92ZWQuCisKK0ZpeGVkIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGluIDEuNDIuNSBzbyB0aGUgbGluayBvcmRlciBmb3IKK2UyZnNwcm9ncycgbGlicmFyaWVzIHdpbGwgYmUgY29ycmVjdCBmb3IgYm90aCBzdGF0aWMgYW5kIHNoYXJlZAorbGlua2luZy4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMzU1NDM0NSkKKworQWRkIHN1cHBvcnQgZm9yIGUyZnNwcm9ncyB0byBiZSBjb21waWxlZCB1c2luZyBjbGFuZy9MTFZNLgorCitGaXggcG9ydGFiaWxpdHkgcHJvYmxlbXMgb24gbm9uLUxpbnV4IHN5c3RlbXM6IGF2b2lkIGNvbXBpbGUgZmFpbHVyZXMKK29uIHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIG1hbGxvYy5oCisKK0ZpeCBmX21tcCByZWdyZXNzaW9uIHRlc3Qgc3VpdGUgc28gdGhhdCBkZWJ1Z2ZzIGdldHMga2lsbGVkIGlmIHRoZQordGVzdCBpcyBpbnRlcnJ1cHRlZC4KKworCisKK0UyZnNwcm9ncyAxLjQyLjUgKEp1bHkgMjksIDIwMTIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlZCBhIGJ1ZyB3aXRoIG1rZTJmcyB3aGVyZSBpZiB0aGVyZSBpcyBvbmx5IDggaW5vZGVzIHBlciBibG9jaworZ3JvdXAsIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIHVuaW5pdGlhbGl6ZWQgaW5vZGVzIGluIHRoZQorZmlyc3QgYmxvY2sgZ3JvdXAgd291bGQgZ28gbmVnYXRpdmUuICBUaGlzIHJlc3VsdGVkIGluICJta2UyZnMgLU4gMjU2CistdCBleHQ0IC90bXAvZm9vLmltZyAyNTZtIiB0cnlpbmcgdG8gd3JpdGUgc28gbWFueSBibG9ja3MgdGhhdCAvdG1wCit3b3VsZCBydW4gb3V0IG9mIHNwYWNlLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMzNTI4ODkyKQorCitGaXhlZCBhIGJ1ZyBpbiBob3cgZTJmc2NrIHdvdWxkIHVuaXF1aWZ5IGRpcmVjdG9yeSBlbnRyeSBuYW1lcy4KKyhBZGRyZXNzZXNTb3VyY2Vmb3JnZSBCdWc6ICMzNTQwNTQ1KQorCitQcmV2aW91c2x5LCBlMmZzY2sgd291bGQgb25seSBhbGxvdyBhIG1vdW50ZWQgZmlsZSBzeXN0ZW0gdG8gYmUKK2NoZWNrZWQgaWYgaXQgd2FzIHRoZSByb290IGZpbGUgc3lzdGVtIGFuZCBpdCB3YXMgbW91bnRlZCByZWFkLW9ubHkuCitOb3cgaXQgd2lsbCBhbGxvdyBhbnkgZmlsZSBzeXN0ZW0gbW91bnRlZCByZWFkLW9ubHkgdG8gYmUgY2hlY2tlZCBpZgordGhlIC1mIG9wdGlvbiBpcyBzcGVjaWZpZWQuICBUaGlzIG1ha2VzIGl0IGVhc2llciB0byB0ZXN0IGhvdyBlMmZzY2sKK2hhbmRsZXMgY2hlY2tpbmcgZmlsZSBzeXN0ZW1zIHdoaWNoIGFyZSBtb3VudGVkIHdpdGhvdXQgaGF2aW5nIHRvIHRlc3QKK29uIHRoZSByb290IGZpbGUgc3lzdGVtLgorCitGaXhlZCBhIHByb2JsZW0gaWYgZTJmc2NrIHdoZXJlIGlmIHRoZSByb290IGZpbGUgc3lzdGVtIGlzIG1vdW50ZWQKK3JlYWQtb25seSwgZTJmc2NrIHdvdWxkIG5vdCBjbGVhciBhbiBlcnJvciBpbmRpY2F0aW9uIGluIHRoZSBqb3VybmFsCitzdXBlcmJsb2NrLiAgQ29tYmluZWQgd2l0aCBhIGtlcm5lbCBidWcsIHRoaXMgd291bGQgY2F1c2UgdGhlIGUyZnNjawordG8gY2hlY2sgdGhlIGZpbGUgc3lzdGVtIGFmdGVyIGV2ZXJ5IHNpbmdsZSBib290LgorCitUaGUgZTRkZWZyYWcgcHJvZ3JhbSBjYW4gbm93IGhhbmRsZSBkZXZpY2Ugc3ltbGlua3MsIHN1Y2ggYXMKKy9kZXYvbWFwcGVyL3Rlc3R2Zy10ZXN0bHYsIGluc3RlYWQgb2YgaW5zaXN0aW5nIG9uIGEgbGVzcworaHVtYW4tZnJpZW5kbHkgbmFtZSBzdWNoIGFzIC9kZXYvZG0tMi4gIChBZGRyZXNzZXMgUmVkIEhhdCBCdWd6aWxsYToKKyM3MDcyMDkpCisKK0ZpeGVkIGZpbGVmcmFnIHNvIGl0IHdpbGwgbm90IGNyYXNoIHdpdGggYSBzZWdmYXVsdCBvbiBmaWxlcyBmcm9tIGEKK3ZpcnR1YWwgZmlsZSBzeXN0ZW0gc3VjaCBhcyAvcHJvYy4gIChlLmcuLCAiZmlsZWZyYWcKKy9wcm9jL3BhcnRpdGlvbnMiKQorCitGaXhlZCBmaWxlZnJhZyBzbyB0aGF0IGl0IGNvcnJlY3RseSByZXBvcnRzIHRoZSBudW1iZXIgb2YgZXh0ZW50cy4KKyhBZGRyZXNzZXMgUmVkIEhhdCBCdWd6aWxsYTogIzg0MDg0OCkKKworRml4ZWQgYSBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBsb2dzYXZlIHdoaWNoIGNvdWxkIGNhdXNlIGl0IHRvIGhhbmcuCisoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM2ODI1OTIpCisKK0ZpeGVkIGUyZnNjayBzbyB0aGF0IHRoZSBmaWxlIHN5c3RlbSBpcyBtYXJrZWQgYXMgY29udGFpbmluZyBhbiBlcnJvcgoraWYgdGhlIHVzZXIgY2hvb3NlcyBub3QgdG8gZml4IHRoZSBxdW90YSB1c2FnZSBpbmZvcm1hdGlvbi4KKworRml4ZWQgdHVuZTJmcyBzbyB0aGF0IGl0IGNvcnJlY3RseSByZW1vdmVzIHRoZSBxdW90YSBmZWF0dXJlIHdoZW4gdGhlCitsYXN0IHF1b3RhIGlub2RlIGlzIHJlbW92ZWQuCisKK0ZpeCB0dW5lMmZzIHNvIHRoYXQgYWZ0ZXIgcmVtb3ZpbmcgYSBxdW90YSBpbm9kZSwgdGhlIGJsb2NrIGJpdG1hcCBpcwordXBkYXRlZDsgb3RoZXJ3aXNlLCBlMmZzY2sgd291bGQgY29tcGxhaW4gYWZ0ZXIgcnVubmluZyAndHVuZTJmcyAtTworXnF1b3RhIDxkZXY+Jy4KKworRml4IHR1bmUyZnMgc28gdGhhdCB3aGVuIGNvbnZlcnRpbmcgYSBmaWxlIHN5c3RlbSBmcm9tIHVzaW5nIGxlZ2FjeQorcXVvdGEgZmlsZXMgdG8gdGhlIG5ldyBxdW90YSBmaWxlIHN5c3RlbSBmZWF0dXJlIHdpdGggaGlkZGVuIHF1b3RhCitmaWxlcywgdGhlIGFjY291bnRpbmcgZm9yIHRoZXNlIGZpbGVzIGlzIGhhbmRsZWQgY29ycmVjdGx5IHNvIHRoYXQKK2UyZnNjayBkb2Vzbid0IGNvbXBsYWluLgorCitJbXByb3ZlZCBlMmZzY2sncyB2ZXJib3NlIHJlcG9ydGluZyBzdGF0aXN0aWNzLCBhbmQgYWxsb3cgdGhlIG1vcmUKK3ZlcmJvc2UgcmVwb3J0aW5nIHRvIGJlIGVuYWJsZWQgdmlhIC9ldGMvZTJmc2NrLmNvbmYuCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIFBhY2thZ2luZyBJc3N1ZXMgKEFkZHJlc3NlcyBEZWJpYW4gQnVnICM2NzgzOTUpCisKK1VwZGF0ZWQvZml4ZWQgdmFyaW91cyBtYW4gcGFnZXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNjgwMTE0KQorCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeGVkIHBvcnRhYmlsaXR5IHByb2JsZW1zIG9uIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIChlLmcuLCBIdXJkIGFuZAorRnJlZUJzZCkgY2F1c2VkIGJ5IHRoZSBhdHRlbXB0ZWQgaW5jbHVzaW9uIG9mIDxzeXMvcXVvdGEuaD4uCisKK01ha2Ugc3VyZSB0aGF0IHNoYXJlZCBsaWJyYXJpZXMgbGluayB3aXRoIHRoZSBzaGFyZWQgbGlicmFyaWVzIGJ1aWx0CitpbiB0aGUgYnVpbGQgdHJlZSwgaW5zdGVhZCBvZiB0aGUgc3lzdGVtIHByb3ZpZGVkIGxpYnJhcmllcy4KK1ByZXZpb3VzbHksIGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgd2VyZSBsaW5rZWQgd2l0aCB0aGUgc3lzdGVtCitsaWJyYXJpZXMgaWYgcHJlc2VudCwgYW5kIHBvc3NpYmx5IHVzaW5nIHN0YXRpYyBhcmNoaXZlcyBpbnN0ZWFkIG9mCitzaGFyZWQgbGlicmFyaWVzLiAgVGhpcyB3YXMgYWxzbyBwcm9ibGVtYXRpYyBzaW5jZSBpZiBsaWJleHQyZnMuc28gaXMKK2xpbmtlZCB3aXRoIGEgc3RhdGljIGxpYmNvbV9lcnIuYSBmcm9tIHN5c3RlbSwgdGhlIGJ1aWxkIHN5c3RlbSB3b3VsZAorYXR0ZW1wdCB0byBsaW5rIHdpdGhvdXQgLWxwdGhyZWFkLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6CisjMzU0MjU3MikKKworCitFMmZzcHJvZ3MgMS40Mi40IChKdW5lIDEyLCAyMDEyKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZWQgbW9yZSA2NC1iaXQgYmxvY2sgbnVtYmVyIGJ1Z3MgKHdoaWNoIGNvdWxkIGVuZCB1cCBjb3JydXB0aW5nCitmaWxlIHN5c3RlbXMhKSBpbiBlMmZzY2ssIGRlYnVnZnMsIGFuZCBsaWJleHQyZnMuCisKK0ZpeGVkIGUyZnNjaydzIGhhbmRsaW5nIG9mIHRoZSBqb3VybmFsJ3Mgc19lcnJubyBmaWVsZC4gIEUyZnNjayB3YXMKK25vdCBwcm9wZXJseSBwcm9wYWdhdGluZyB0aGUgam91cm5hbCdzIHNfZXJybm8gZmllbGQgdG8gdGhlIHN1cGVyYmxvY2sKK2ZpZWxkOyBpdCB3YXMgbm90IGNoZWNraW5nIHRoaXMgZmllbGQgaWYgdGhlIGpvdXJuYWwgaGFkIGFscmVhZHkgYmVlbgorcmVwbGF5ZWQsIGFuZCBpZiB0aGUgam91cm5hbCAqd2FzKiBiZWluZyByZXBsYXllZCwgdGhlICJlcnJvciBiaXQiCit3YXNuJ3QgZ2V0dGluZyBmbHVzaGVkIG91dCB0byBkaXNrLgorCitGaXhlZCBhIGZhbHNlIHBvc2l0aXZlIGNvbXBsYWludCBieSBlMmZzY2sgaWYgYWxsIG9mIHRoZSBleHRlbnRzIGluCit0aGUgbGFzdCBleHRlbnQgdHJlZSBibG9jayBhcmUgdW5pbml0YWxpemVkIGFuZCBsb2NhdGVkIGFmdGVyIHRoZSBlbmQKK29mIHRoZSBmaWxlIGFzIGRlZmluZWQgYnkgaV9zaXplLgorCitUaGUgZHVtcGUyZnMgd2lsbCBub3cgZGlzcGxheSB0aGUgam91cm5hbCdzIHNfZXJybm8gZmllbGQgaWYgaXQgaXMKK25vbi16ZXJvLCBhbmQgaXQgd2lsbCBhbHNvIGRpc3BsYXkgdGhlIGpvdXJuYWwncyA2NC1iaXQgZmVhdHVyZSBmbGFnCitpZiBwcmVzZW50LgorCitGaXggZTJmc2NrIHNvIHRoYXQgaXQgYWx3YXlzIG9wZW5zIHRoZSBkZXZpY2UgZmlsZSBpbiBleGNsdXNpdmUgbW9kZQord2hlbiBpdCBtaWdodCBuZWVkIHRvIG1vZGlmeSB0aGUgZmlsZSBzeXN0ZW0sIGFuZCBuZXZlciBpZiB0aGUgLW4KK29wdGlvbiBpcyBzcGVjaWZpZWQuICAoUHJldmlvdXNseSwgdGhlcmUgd2VyZSBhIGZldyBjb3JuZXIgY2FzZXMgd2hlcmUKK2l0IG1pZ2h0IGdldCB0aGluZ3Mgd3JvbmcgaW4gZWl0aGVyIGRpcmVjdGlvbi4pCisKK0UyZnNjayBub3cgY29ycmVjdGx5IHRydW5jYXRlcyBvciBkZWFsbG9jYXRlcyBleHRlbnQtbWFwcGVkIGlub2RlcyBvbgordGhlIG9ycGhhbiBsaXN0LiAgVGhlIHJvb3QgY2F1c2Ugd2FzIGEgYnVnIGluIGxpYmV4dDJmcydzIGJsb2NrCitpdGVyYXRvciB3aGljaCBjb3VsZCBlbmQgdXAgc2tpcHBpbmcgYW4gZXh0ZW50IHdoZW4gdGhlIGxhc3QgYmxvY2sgaW4KK2FuIGV4dGVudCBpcyByZW1vdmVkLCBjYXVzaW5nIHRoZSBjdXJyZW50IGV4dGVudCB0byBiZSByZW1vdmVkIGZyb20KK3RoZSBleHRlbnQgdHJlZS4KKworRTJmc2NrIG5vdyBjb3JyZWN0bHkgc2V0cyB0aGUgZ2xvYmFsIGZyZWUgYmxvY2sgYW5kIGlub2RlIGNvdW50cyB3aGVuCit0cnVuY2F0aW5nIG9yIHJlbW92aW5nIGlub2RlcyBvbiB0aGUgb3JwaGFuIGxpc3QgaW4gcHJlZW4gbW9kZS4KK1ByZXZpb3VzbHksIGl0IHdvdWxkIGxlYXZlIHRoZXNlIHZhbHVlcyB3b3VsZCBiZSBzZXQgaW5jb3JyZWN0bHksCit3aGljaCBpcyBsYXJnZWx5IGEgY29zbWV0aWMgaXNzdWUgc2luY2UgdGhlIGtlcm5lbCBubyBsb25nZXIgcGF5cworYXR0ZW50aW9uIHRvIHRob3NlIGZpZWxkcywgYnV0IGl0IGNhbiBjYXVzZSBzcHVyaW91cyBjb21wbGFpbnRzIGluCitzdWJzZXF1ZW50IGUyZnNjayBydW5zLgorCitGaXggaV9ibG9ja3MgYWNjb3VudGluZyB3aGVuIHRoZSBsaWJleHQyZnMgbGlicmFyeSBuZWVkcyB0byBhZGQgb3IKK3JlbW92ZSBhbiBleHRlbnQgdHJlZSBibG9jayAgb24gYmlnYWxsb2MgZmlsZSBzeXN0ZW1zLgorCitUaGUgbHNhdHRyIGFuZCBjaGF0dHIgcHJvZ3JhbXMgbm93IHN1cHBvcnQgdGhlIE5vX0NPVyBmbGFnIGZvciB0aGUKK2JlbmVmaXQgb2YgYnRyZnMuCisKK0RlYnVnZnMgbm93IGludGVycHJldHMgZGF0ZSBzdHJpbmdzIG9mIHRoZSBmb3JtIEBkZGQgYXMgZGRkIHNlY29uZHMKK2FmdGVyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGVwb2NoLiAgVGhpcyBpcyBoYW5keSB3aGVuIHNldHRpbmcgYW4gaW5vZGUKK251bWJlciBpbnRvIHRoZSBkX3RpbWUgZmllbGQgd2hlbiBkZWJ1Z2dpbmcgb3JwaGFuIGxpc3QgaGFuZGxpbmcuCisKK0ZpeCBhIHByZWNlZGVuY2UgYnVnIHdpdGggYnVpbHQtaW4gcXVvdGEgc3VwcG9ydCB3aGljaCBtaWdodCByZXN1bHQgaW4KK2UyZnNjayBwYXlpbmcgYXR0ZW50aW9uIHRvIHRoZSBxdW90YSBpbm9kZSBmaWVsZCBldmVuIGlmIHRoZSBidWlsdC1pbgorcXVvdGEgZmVhdHVyZSBmbGFnIGlzIG5vdCBzZXQuICBGb3J0dW5hdGVseSwgaW4gcHJhY3RpY2UgdGhhdAorc3VwZXJibG9jayBmaWVsZCBzaG91bGQgYmUgemVybyBmb3Igbm9uLWJ1aWx0LWluIHF1b3RhIGZpbGUgc3lzdGVtcywKK3NvIGl0J3MgdW5saWtlbHkgdGhpcyBidWcgd291bGQgaGF2ZSBjYXVzZWQgcHJvYmxlbXMuCisKK1VwZGF0ZWQvZml4ZWQgdmFyaW91cyBtYW4gcGFnZXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNjc0NDUzLAorIzY3NDY5NCkKKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSBjYW4gbm93IHJ1biB0aGUgaW50ZWdyYXRpb24gdGVzdHMgaW4gdGhlCit0ZXN0cyBkaXJlY3RvcnkgaW4gcGFyYWxsZWwsIHZpYSAibWFrZSAtak4gY2hlY2siLgorCitBZGQgbmV3IHRlc3QsIGZfemVyb19leHRlbnRfbGVuZ3RoIHdoaWNoIHRlc3RzIGUyZnNjaydzIGhhbmRsaW5nIG9mCit0aGUgY2FzZSB3aGVyZSBhbGwgb2YgdGhlIGV4dGVudHMgaW4gdGhlIGxhc3QgZXh0ZW50IHRyZWUgYmxvY2sgYXJlCit1bmluaXRpYWxpemVkIGV4dGVudHMgYWZ0ZXIgaV9zaXplLgorCitBZGQgYSBuZXcgdGVzdCwgZl9qbmxfZXJybm8sIHdoaWNoIGNoZWNrcyBoYW5kbGluZyBvZiBhbiBlcnJvcgoraW5kaWNhdGlvbiBzZXQgaW4gdGhlIGpvdXJuYWwgc3VwZXJibG9jay4KKworRml4IHRoZSB0ZXN0IGZfam5sXzY0Yml0IHNvIHRoYXQgaXQgcHJvcGVybHkgY2hlY2tzIGUyZnNjaydzIGhhbmRsaW5nCitvZiBhIDY0LWJpdCBqb3VybmFsLgorCitBZGQgdHdvIHRlc3RzLCBmX29ycGhhbl9pbmRpcmVjdF9pbm9kZSBhbmQgZl9vcnBoYW5fZXh0ZW50X2lub2RlIHdoaWNoCit0ZXN0cyBlMmZzY2sncyBoYW5kbGluZyBvZiBvcnBoYW4gaW5vZGVzIGluIHByZWVuIG1vZGUsIGFuZCB0cnVuY2F0aW9uCitvZiBleHRlbnQgaW5vZGVzIG9uIHRoZSBvcnBoYW4gbGlzdC4KKworRml4ZWQgbW9yZSBPUyBYIHBvcnRhYmlsaXR5IGlzc3Vlcy4KKworCitFMmZzcHJvZ3MgMS40Mi4zIChNYXkgMTQsIDIwMTIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeCBhIGJ1ZyBpbiB0aGUgVW5peCBJL08gbWFuYWdlciB3aGljaCBjb3VsZCBjYXVzZSBjb3JydXB0aW9uIG9mIGZpbGUKK3N5c3RlbXMgd2l0aCBtb3JlIHRoYW4gMTZUQiB3aGVuIGUyZnNwcm9ncyBpcyBjb21waWxlZCBpbiAzMi1iaXQgbW9kZQorKGkuZS4sIHdoZW4gdW5zaWduZWQgbG9uZyBpcyAzMi1iaXRzKS4gIEFsc28gZml4IGEgYnVnIHdoaWNoIGNhdXNlZAorZHVtcGUyZnMgdG8gaW5jb3JyZWN0bHkgZGlzcGxheSBibG9jayBudW1iZXJzID4gMzItYml0cy4KKworSW1wcm92ZSB0aGUgc3VwcG9ydCBmb3IgaW50ZWdyYXRlZCBxdW90YSBmaWxlcyAod2hlcmUgcXVvdGEgaXMgYSBmaXJzdAorY2xhc3Mgc3VwcG9ydGVkIGZlYXR1cmUgdXNpbmcgaGlkZGVuIGZpbGVzIGluIHRoZSBleHQ0IGZpbGUgc3lzdGVtKS4KK1ByZXZpb3VzbHkgdGhlIHF1b3RhIGZpbGUgd2FzIGdldHRpbmcgcmV3cml0dGVuIGV2ZW4gd2hlbiBpdCB3YXMgbm90CituZWNlc3NhcnksIGFuZCBlMmZzY2sgd291bGQgZXJyb25lb3VzbHkgdHJ5IHRvIGhpZGUgcXVvdGEgZmlsZXMgd2hpY2gKK3dlcmUgYWxyZWFkeSBoaWRkZW4uCisKK1F1aWV0IGNvbXBsYWludHMgaW4gZTJmc2NrIHdoZW4gdGhlIHRvdGFsIGZyZWUgYmxvY2tzIG9yIGlub2RlcyBhcmUKK2luY29ycmVjdCBpbiB0aGUgc3VwZXJibG9jayBhZnRlciBhbiBzeXN0ZW0gY3Jhc2gsIHNpbmNlIHdlIGRvbid0Cit1cGRhdGUgbm9yIGRlcGVuZCBvbiB0aGUgc3VwZXJibG9jayBzdW1tYXJpZXMgYXQgZWFjaCBjb21taXQgYm91bmRhcnkuCisKK0ZpeGVkIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGluIDEuNDIuMiB3aGljaCB3b3VsZCBjYXVzZSBhcHBsaWNhdGlvbnMKK291dHNpZGUgb2YgZTJmc3Byb2dzIHdoaWNoIGRpZCBub3QgcGFzcyB0aGUgRVhUMl9GTEFHXzY0QklUIChhbmQgc28KK3dvdWxkIHdlcmUgc3RpbGwgdXNpbmcgdGhlIGxlZ2FjeSAzMi1iaXQgYml0bWFwcykgdG8gY3Jhc2guICBUaGlzIHdhcworZHVlIHRvIG1pc3NpbmcgMzItYml0IGNvbXBhdCBjb2RlIGluIHNpZGUgdGhlIGZ1bmN0aW9uCitleHQyZnNfZmluZF9maXJzdF96ZXJvX2dlbmVyaWNfYm1hcCgpLiAgKEFkZHJlc3NlcyBSZWQgSGF0IEJ1Z3ppbGxhOgorIzgwODQyMSkKKyAgICAKK0ZpeCBhIGJ1ZyB3aGljaCB3b3VsZCBjYXVzZSBta2UyZnMgdG8gZmFpbCBjcmVhdGluZyB0aGUgam91cm5hbCBpZgorL2V0Yy9tdGFiIGFuZCAvcHJvYy9tb3VudHMgYXJlIG1pc3NpbmcuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzoKKyMzNTA5Mzk4KQorICAgIAorVXBkYXRlZC9maXhlZCB2YXJpb3VzIG1hbiBwYWdlcy4KKworVXBkYXRlIEN6ZWNoLCBEdXRjaCwgRnJlbmNoLCBHZXJtYW4sIFBvbGlzaCwgU3dlZWRpc2gsIGFuZCBWaWV0bmFtZXNlCit0cmFuc2xhdGlvbnMKKworRml4ZWQgdmFyaW91cyBEZWJpYW4gUGFja2FnaW5nIGlzc3Vlcy4KKworCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2UgdGhlIG5vbnNlbnNpY2FsbHkgd3JvbmcgdHlwZXMgaW4gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBvZiB0aGUKK2lubGluZSBmdW5jdGlvbiBleHQyZnNfZmluZF9maXJzdF96ZXJvX2Jsb2NrX2JpdG1hcDIoKS4gIFRoaXMgd2FzCitjYXVzZWQgYnkgYSBjdXQgYW5kIHBhc3RlIGVycm9yOyBmb3J0dW5hdGVseSBubyBjb2RlIGluIGUyZnNwcm9ncyB1c2VkCit0aGlzIGlubGluZSBmdW5jdGlvbiwgYW5kIHRoZXJlIGFyZSBhbnkgdXNlcnMgb2YgdGhpcyBmdW5jdGlvbnMKK291dHNpZGUgb2YgZTJmc3Byb2dzLgorCitBZGQgc3VwcG9ydCBmb3Igc3lzdGVtcyB3aGljaCBoYXZlIHZhbGxvYygpLCBidXQgd2hpY2ggZG8gaGF2ZQorcG9zaXhfbWVtYWxpZ24oKSBub3IgbWVtYWxpZ24oKSAoc3VjaCBhcyBNYWNPUyAxMC41KS4KKworUmVmYWN0b3IgYW5kIGNsZWFuIHVwIHRoZSBhbGxvY2F0aW9uIG9mIGFsaWduZWQgYnVmZmVycyBmb3IgRGlyZWN0IEkvTworc3VwcG9ydC4gIFByZXZpb3VzbHkgc29tZSBhbGxvY2F0aW9ucyB3ZXJlIHJlcXVlc3RpbmcgYSBncmVhdGVyCithbGlnbm1lbnQgZmFjdG9yIHRoYXQgd2hhdCB3YXMgc3RyaWN0bHkgbmVjZXNzYXJ5LiAgQWxzbyBvcHRpbWl6ZQorcmVhZGluZyBhbmQgd3JpdGluZyBiaXRtYXBzIHVzaW5nIERpcmVjdCBJL08gd2hlbiB0aGUgc2l6ZSBvZiB0aGUKK2JpdG1hcCBkaWQgbm90IGZ1bGx5IGNvdmVyIHRoZSBmaWxlIHN5c3RlbSBibG9ja3NpemUuCisKK1Jlc2VydmUgdGhlIGNvZGVwb2ludHMgZm9yIHRoZSBJTkNPTVBBVCBmZWF0dXJlcyBMQVJHRURBVEEgYW5kCitJTkxJTkVEQVRBLgorCitJbXByb3ZlZCB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlIGJ5IGFkZGluZyBzb21lIG5ldyBpbnRlZ3JhdGlvbgordGVzdHMgKGZfam5sXzMyYml0LCBmX2pubF82NGJpdCkgd2hpY2ggZGV0ZWN0IGJyZWFrYWdlIG9mIHRoZSBvbi1kaXNrCitqYmQyIGZvcm1hdCwgYXMgd2VsbCBhcyBmX2VvZmJsb2NrcyB3aGljaCB0ZXN0cyB0aGUgbmV3IGhhbmRsaW5nIG9mCit1bmluaXRpYWxpemVkIGFuZCBpbml0aWFsaXplZCBibG9ja3MgYmV5b25kIGlfc2l6ZS4gIEFsc28gYWRkIGEgbmV3Cit1bml0IHRlc3Qgd2hpY2ggdmVyaWZpZXMgMzItYml0IGJpdG1hcHMgc3VwcG9ydCBhbmQgdGhlIG5ldworZmluZF9maXJzdF96ZXJvIHByaW1pdGl2ZXMuCisKK0FkZCBhIGZldyBkZXBlbmRlbmNpZXMgdG8gZml4IHBhcmFsbGVsIChtYWtlIC1qKSBidWlsZHMuCisKK1JlbW92ZWQgYmFzaCdpc21zIHdoaWNoIHdlcmUgYnJlYWtpbmcgdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSBvbgorc3lzdGVtcyB3aGVyZSAvYmluL3NoIGlzIG5vdCBiYXNoLgorCitUaGUgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHRoZSAyMDEyLTAyLTEwCit2ZXJzaW9uLgorICAgIAorRml4IGEgcG9ydGFiaWxpdHkgcHJvYmxlbSBjYXVzZWQgYnkgYXNzdW1pbmcgdGhlIHByZXNlbnQgb2YgbW50ZW50LmgKK21lYW5zIHRoYXQgc2V0bW50ZW50KCkgZXhpc3RzLiAgSW5zdGVhZCwgZXhwbGljaXRseSB0ZXN0IGZvciB0aGlzIGluCit0aGUgY29uZmlndXJlIHNjcmlwdC4KKworSWYgdGhlIHN5cy9zaWduYWwuaCBoZWFkZXIgZmlsZSBkb2VzIG5vdCBleGlzdCwgZG9uJ3QgdHJ5IHRvIGluY2x1ZGUKK2l0LCBzaW5jZSBpdCdzIG5vdCBhdmFpbGFibGUgb24gYWxsIHN5c3RlbXMuCisKK0FkZCBzdXBwb3J0IGZvciBzeXN0ZW1zIHRoYXQgZG8gbm90IHN1cHBvcnQgZ2V0cHd1aWRfcigpCisgICAgCitUaGUgY29uZmlndXJlIHNjcmlwdCBub3cgc3VwcG9ydHMgYSBuZXcgb3B0aW9uLAorLS1lbmFibGUtcmVsYXRpdmUtc3ltbGlua3MsIHdoaWNoIHdpbGwgaW5zdGFsbCByZWxhdGl2ZSBzeW1saW5rcyBmb3IKK3RoZSBFTEYgc2hhcmVkIGxpYnJhcnkgZmlsZXMuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzM1MjA3NjcpLgorICAgIAorV2hlbiBidWlsZGluZyBCU0Qgc2hhcmVkIGxpYnJhcmllcyBtYWtlIHN1cmUgdGhlIExERkxBR1MgdmFyaWFibGUgaXMKK3Bhc3NlZCB0byB0aGUgbGlua2VyLiAgRml4aW5nIHRoaXMgYWxsb3dzLCBmb3IgZXhhbXBsZSwgZTJmc3Byb2dzIHRvCitiZSBidWlsdCBpbiAzMi1iaXQgbW9kZSBvbiBNYWMgT1MgWCBMaW9uIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOgorIzM1MTcyNzIpCisgICAgCitGaXggZ2NjIC1XYWxsIG5pdHBpY2tzCisKKworRTJmc3Byb2dzIDEuNDIuMiAoTWFyY2ggMjcsIDIwMTIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHJlc2l6ZTJmcyBwcm9ncmFtIHVzZXMgbXVjaCBsZXNzIENQVSBhbmQgaXMgbXVjaCBmYXN0ZXIgZm9yIHZlcnkKK2xhcmdlIGZpbGUgc3lzdGVtcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzY2MzIzNykKKworVGhlIHNldGkgYW5kIGZyZWVpIGNvbW1hbmRzIGluIGRlYnVnZnMgY2FuIG5vdyB0YWtlIGFuIG9wdGlvbmFsIGxlbmd0aAorYXJndW1lbnQgdG8gc2V0IGFuZCBjbGVhciBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgaW5vZGVzLgorCitFMmZzY2sgd2lsbCBub3cgbWFrZSBleHBsaWNpdCBjaGVja3MgZm9yIHRoZSBFT0ZCTE9DS1NfRkwsIHNpbmNlIHdlCitwbGFuIHRvIHJlbW92ZSBzdXBwb3J0IGZvciBpdCBmcm9tIHRoZSBrZXJuZWwgZmlsZSBzeXN0ZW0gZHJpdmVyLiAgSXQKK3JlYWxseSB3YXNuJ3QgdmVyeSB1c2VmdWwgYW5kIHdhcyBjYXVzaW5nIG1vcmUgcHJvYmxlbXMgdGhhbiBpdAorc29sdmVzLiAgU2luY2UgZTJmc2NrIHdpbGwgY29tcGxhaW4gaWYgaW5vZGVzIHRoYXQgc2hvdWxkIGhhdmUKK0VPRkJMT0NLU19GTCBkbyBub3QgaGF2ZSB0aGUgZmxhZyBzZXQsIHdlIGFyZSBnb2luZyB0byByZW1vdmUgdGhpcworY2hlY2sgZnJvbSBlMmZzcHJvZ3MgZmlyc3QsIGFuZCB0aGVuIG9ubHkgcmVtb3ZlIHRoZSBmbGFnIGZyb20gdGhlCitrZXJuZWwgbXVjaCBsYXRlci4KKworVGhlIG1rZTJmcyBwcm9ncmFtIGNhbiBub3cgdXNlIGRpcmVjdCBJL08gdmlhICJta2UyZnMgLUQiLiAgVGhpcyB3aWxsCitzbG93IGRvd24gdGhlIG1rZTJmcywgYnV0IGl0IG1ha2VzIGl0IG1vcmUgcG9saXRlIG9uIGEgbG9hZGVkIHNlcnZlcgorYnkgbGltaXRpbmcgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGhhdCBnZXRzIGRpcnRpZWQgYnkgbWtlMmZzIHdoZW4gaXQKK2lzIHVzaW5nIGJ1ZmZlcmVkIEkvTy4KKworRTJmc2NrIHdhcyBuZWVkbGVzc2x5IGNsb3NpbmcgYW5kIHJlLW9wZW5pbmcgdGhlIGZpbGUgc3lzdGVtIGFzIGEgc2lkZQorZWZmZWN0IG9mIGFkZGluZyBNdWx0aXBsZSBNb3VudCBQcm90ZWN0aW9uIChNTVApLiAgVGhpcyBpc24ndAorbmVjZXNzYXJ5IGZvciBub24tTU1QIGZpbGUgc3lzdGVtcywgc28gZHJvcCBpdC4KKworUHJpbnQgZXJyb3JzIHJldHVybmVkIGJ5IGV4dDJmc19vcGVuMigpIGFuZCBleHQyZnNfY2hlY2tfZGVzYygpIHNvIHdlCitjYW4gbW9yZSBlYXNpbHkgZGlhZ25vc2UgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgY2F1c2VkIGJ5CitpbnN1ZmZpY2llbnQgbWVtb3J5LiAgRTJmc2NrIHdpbGwgbm93IGFib3J0IGlmIHRoZXJlIGFyZSBtZW1vcnkKK2FsbG9jYXRpb24gZmFpbHVyZXMgd2hlbiB0aGUgZmlsZSBzeXN0ZW0gaXMgaW5pdGlhbGx5IG9wZW5lZCBhbmQKK2R1cmluZyB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3MuICAoQWRkcmVzc2VzIEdvb2dsZSBCdWc6CisjNjIwODE4MykKKworSWYgdGhlcmUgYXJlIGluY29ycmVjdCBibG9jayBncm91cCBjaGVja3MsIGUyZnNjayB3aWxsIG5vdyByZXBvcnQgdGhlCitpbmNvcnJlY3QgYW5kIGNvcnJlY3RlZCBjaGVja3N1bSB2YWx1ZXMuCisKK1RoZSBlMmZzY2sgcHJvZ2FtIGNhbiBub3cgd3JpdGUgbG9nIGZpbGVzIGNvbnRhaW5pbmcgdGhlIGRldGFpbHMgb2YKK3RoZSBwcm9ibGVtcyB0aGF0IHdlcmUgZm91bmQgYW5kIGZpeGVkIGRpcmVjdGx5LCB2aWEgY29uZmlndXJhdGlvbgorcGFyYW1ldGVycyBpbiAvZXRjL2UyZnNjay5jb25mLgorCitBZGRlZCB0aGUgYWJpbGl0eSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHJlcG9ydGVkIGJ5IGUyZnNjaworZm9yIGEgZ2l2ZW4gcHJvYmxlbSB0eXBlLiAgVGhpcyBhdm9pZHMgYSBwb3RlbnRpYWwgYm90dGxlbmVjayBpZiB0aGVyZQoraXMgYSBzZXJpYWwgY29uc29sZSB3aGljaCBjYW4gY2F1c2UgYSBib290IHNlcXVlbmNlIHRvIHRha2UgYSBsb25nCit0aW1lIGlmIGUyZnNjayBuZWVkcyB0byByZXBvcnQgbWFueSwgbWFueSBmaWxlIHN5c3RlbSBlcnJvcnMuCisKK1RoZSBkdW1wZTJmcywgZGVidWdmcywgYW5kIHR1bmUyZnMgbm93IHVzZSByYnRyZWUgYml0bWFwcywgd2hpY2ggY2F1c2UKK3RoZW0gdG8gdXNlIG11Y2ggbGVzcyBtZW1vcnkgZm9yIGxhcmdlIGZpbGUgc3lzdGVtcy4KKworVGhlIGR1bXBlMmZzIHByb2dyYW0gd2lsbCBub3cgcHJpbnQgdGhlIGV4cGVjdGVkIGJsb2NrIGdyb3VwIGNoZWNrc3VtCitpZiBpdCBpcyBpbmNvcnJlY3QuICBUaGlzIGhlbHBzIHRvIGRpYWdub3NlIHByb2JsZW1zIGNhdXNlZCBieQoraW5jb3JyZWN0IGJsb2NrIGdyb3VwIGNoZWNrc3Vtcy4KKworRTJmc2NrIG5vdyBjaGVja3MgZm9yIGV4dGVudHMgd2l0aCBhIHplcm8gbGVuZ3RoLCBzaW5jZSB0aGUga2VybmVsCit3aWxsIG9vcHMgaWYgaXQgY29tZXMgYWNjcm9zcyBzdWNoIGEgY29ycnVwdGVkIGRhdGEgc3RydWN0dXJlLiAgKFNlZQoraHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD00Mjg1OSkKKworRTJmc2NrIGhhcyBhIG51bWJlciBvZiBidWdzIHJlbGF0aW5nIHRvIGRpc2NhcmQgdGhhdCBoYXZlIGJlZW4gZml4ZWQuCisoMSkgRml4ZWQgYSBidWcgd2hpY2ggY291bGQgY2F1c2UgZTJmc2NrIHRvIGRpc2NhcmQgcG9ydGlvbnMgb2YgdGhlCitpbm9kZSB0YWJsZSB3aGljaCB3ZXJlIGFjdHVhbGx5IGluIHVzZS4gICgyKSBFMmZzY2sgd2lsbCBub3cgYXZvaWQKK3VzaW5nIGRpc2NhcmQgaWYgdGhlIGJsb2NrIGRldmljZSBkb2Vzbid0IHplcm8gZGF0YSBvbiBkaXNjYXJkLCBzaW5jZQorb3RoZXJ3aXNlIHRoaXMgY291bGQgY2F1c2UgcHJvYmxlbXMgaWYgdGhlIGZpbGUgc3lzdGVtIGdldHMgY29ycnVwdGVkCitpbiB0aGUgZnV0dXJlLiAgKDMpIEUyZnNjayB3aWxsIG5vdyBhdm9pZCB1c2luZyBkaXNjYXJkIHdoZW4gaXQgaXMgcnVuCitpbiByZWFkLW9ubHkgbW9kZS4gICg0KSBGaXhlZCBhIGJ1ZyB3aGljaCBjYXVzZWQgZTJmc2NrIHRvIG5vdCBpc3N1ZQorZGlzY2FyZHMgaW4gdGhlIGxhc3QgYmxvY2sgZ3JvdXAuCisKK0UyZnNjaydzIENQVSB1dGlsaXphdGlvbiBpbiBwYXNzIDUgaGFzIGJlZW4gb3B0aW1pemVkLCB3aGljaCB3aWxsCitzcGVlZCB1cCBlMmZzY2sgc2xpZ2h0bHkuCisKK0UyaW1hZ2Ugd2lsbCBub3cgc2tpcCBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgYml0bWFwIGFuZCBpbm9kZSB0YWJsZQorYmxvY2tzLgorCitGaXhlZCBta2UyZnMgLVMgc28gaXQgZG9lcyBub3QgY29ycnVwdCB0aGUgZmlyc3QgYmxvY2sgZ3JvdXAncworaW5mb3JtYXRpb24uCisKK0UyZnNjayB3aWxsIG5vdyBjaGVjayB0aGUgbmV3IHN5c2ZzIGludGVyZmFjZSB0byBkZXRlcm1pbmUgaWYgd2UgYXJlCit1c2luZyB0aGUgYmF0dGVyeSBvciBBQyBtYWlucy4gIChBZGRyZXNzZXMgU291cmNlRm9yZ2UgQnVnOiAjMzQzOTI3NykKKworVXBkYXRlZC9maXhlZCB2YXJpb3VzIG1hbiBwYWdlcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzY2NTQyNykKKworRml4ZWQgdmFyaW91cyBEZWJpYW4gUGFja2FnaW5nIGlzc3Vlcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzY2NTg4NSkKKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworRml4ZWQgdmFyaW91cyBwb3J0YWJpbGl0eSBpc3N1ZXMgZm9yIG5vbi1MaW51eCBzeXN0ZW1zLCBwYXJ0aWN1bGFybHkKK01hY09TIFgsIGFzIHdlbGwgYXMgTGludXggc3lzdGVtcyBydW5uaW5nIHdpdGggdGhlIGp1c3QtcmVsZWFzZWQgZ2xpYmMKKzIuMTUuCisKK0ZpeCBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBleHQyZnNfY2xvc2UoKSBpZiB0aGUgZmlsZSBzeXN0ZW0gd2l0aAordW5pbml0X2JnIGlzIG9wZW5lZCByZWFkL29ubHkgd2l0aCBhIGJhY2t1cCBzdXBlcmJsb2NrLiAgKEFkZHJlc3NlcworU291cmNlRm9yZ2UgQnVnOiAjMzQ0NDM1MSkKKworRml4ZWQgYW4gaW52YWxpZCByZXR1cm4gaW4gYSBub24tdm9pZCBmdW5jdGlvbiBpbiB0aGUgcXVvdGEgY29kZS4KKyhBZGRyZXNzZXMgU291cmNlRm9yZ2UgQnVnOiAjMzQ2ODQyMykKKworRml4ZWQgdGhlIGRlYmlhbiBydWxlcyBmaWxlIHNvIHRoYXQgdGhlIGNhbGxzIHRvIGRwa2ctYnVpbGRmbGFncyB3b3Jrcword2hlbiB0aGUgc2hlbGwgaXMgZGFzaC4KKworVGhlIGRlYmlhbiBwYWNrYWdlIGJ1aWxkIG5vdyB1c2VzIFY9MSBzbyB0aGF0IHRoZXJlIGlzIG1vcmUKK2luZm9ybWF0aW9uIGFib3V0IHBvdGVudGlhbCBidWlsZCBmYWlsdXJlcyBpbiBkZWJpYW4gYnVpbGRkIGxvZ3MuCisKK0lmIHRoZSB1bmluaXQgZmxhZ3MgZ2V0IGNsZWFyZWQgYnkgZnVuY3Rpb25zIHN1Y2ggYXMKK2V4dDJmc19uZXdfaW5vZGUoKSBvciBleHQyZnNfbmV3X2Jsb2NrMigpLCB3ZSBub3cgbWFrZSBzdXJlIHRoZQorc3VwZXJibG9jayBpcyBtYXJrZWQgZGlydHkgYW5kIHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9yIGNoZWNrc3VtIGlzCit1cGRhdGVkIGlmIG5lY2Vzc2FyeS4KKworVGhlIGRlYmlhbiBydWxlcyBmaWxlIHdpbGwgbm93IHRyeSB0byBsb2FkIGRlYmlhbi9ydWxlcy5jdXN0b20gb2YgaXQKK2V4aXN0cy4gIFRoaXMgZmxpZSBjYW4gc2tpcCB2YXJpb3VzIGJ1aWxkcyBmb3Igc3BlZWQgcmVhc29ucyBpZiB0aGVyZQoraXMgbm8gbmVlZCBmb3IgdGhlIGUyZnNjay1zdGF0aWMgb3IgdWRlYiBwYWNrYWdlcy4gIEF2YWlsYWJsZQorY3VzdG9taXphdGlvbnMgaW4gdGhlIHJ1bGVzIGZpbGUgaW5jbHVkZXMgU0tJUF9TVEFUSUM9eWVzLAorU0tJUF9CRj15ZXMsIGFuZCBTS0lQX0RJRVRMSUJDPXllcy4KKworSW4gYWRkaXRpb24sIGlmIHRoZSBmaWxlIG1pc2MvbWtlMmZzLmNvbmYuY3VzdG9tLmluIGV4aXN0cyBpbiB0aGUKK3NvdXJjZSB0cmVlLCBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgbWlzYy5jb25mIGZpbGUgaW4KK3RoZSB1cHN0cmVhbSBzb3VyY2VzLiAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIERlYmlhbi1kZXJpdmVkIHN5c3RlbXMKK3RvIGRpc3RyaWJ1dGUgYSBjdXN0b20gbWtlMmZzLmNvbmYgZmlsZSB3aXRob3V0IGhhdmluZyB0byB3b3JyeSBhYm91dAorbWVyZ2UgaXNzdWVzIGlmIGZ1dHVyZSB2ZXJzaW9ucyBvZiBlMmZzcHJvZ3MgbWFrZXMgY2hhbmdlcyBpbiB0aGUKK3Vwc3RyZWFtIGRlZmF1bHQgdmVyc2lvbiBvZiBta2UyZnMuY29uZi4KKworCitFMmZzcHJvZ3MgMS40Mi4xIChGZWJydWFyeSAxNywgMjAxMikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBta2UyZnMgYW5kIGUyZnNjayBub3cgdXNlIHNpZ25pZmljYW50bHkgbGVzcyBtZW1vcnkgd2hlbiBjcmVhdGluZworb3IgY2hlY2tpbmcgdmVyeSBsYXJnZSBmaWxlIHN5c3RlbXMuICBUaGlzIHdhcyBlbmFibGVkIGJ5IGFkZGluZworZXh0ZW50LWJhc2VkIGJpdG1hcHMgd2hpY2ggYXJlIHN0b3JlZCB1c2luZyBhIHJlZC1ibG9jayB0cmVlLCBzaW5jZQorYmxvY2sgYW5kIGlub2RlIGFsbG9jYXRpb25zIHRlbmQgdG8gYmUgY29udGlndW91cy4KKworVGhlIGNvbW1hbmQgbWtlMmZzIC1TIGlzIHVzZWQgYXMgYSBsYXN0IGRpdGNoIHJlY292ZXJ5IGNvbW1hbmQgdG8KK3dyaXRlIG5ldyBzdXBlcmJsb2NrIGFuZCBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYnV0IF9ub3RfIHRvIGRlc3Ryb3kKK3RoZSBpbm9kZSB0YWJsZSBpbiBob3BlcyBvZiByZWNvdmVyaW5nIGZyb20gYSBiYWRseSBjb3JydXB0ZWQgZmlsZQorc3lzdGVtLiAgU28gaWYgdGhlIHVuaW5pdF9iZyBmZWF0dXJlIGlzIGVuYWJsZWQsIG1rZTJmcyAtUyB3aWxsIG5vdworc2V0IHRoZSB1bnVzZWQgaW5vZGVzIGNvdW50IGZpZWxkIHRvIHplcm8uICBPdGhlcndpc2UsIGUyZnNjayAtZnkKK2FmdGVyIHVzaW5nIG1rZTJmcyAtUyB3b3VsZCBsZWF2ZSB0aGUgZmlsZSBzeXN0ZW0gY29tcGxldGVseSBlbXB0eS4KKworU2luY2UgbWtlMmZzIHJlY29nbml6ZXMgbWtlM2ZzIGluIGFyZ3ZbMF0gdG8gbWVhbiAibWtmcy5leHQzIiwgYWxzbworaG9ub3IgIm1rZTRmcyIgdG8gd29yayB0aGUgc2FtZSBhcyAibWtlMmZzLmV4dDQiLCBzaW5jZSBSSEVMNSBoYXMKK2luc3RhbGxlZCBhbiBta2UyZnMgYmluYXJ5IHVzaW5nIHRoYXQgbmFtZS4KKworVGhlIHVzYWdlIGFuZCBoZWxwIG1lc3NhZ2VzIGZvciB0aGUgLUcsIC10IGFuZCAtVCBvcHRpb25zIGluIG1rZTJmcworaGF2ZSBiZWVuIGZpeGVkLgorCitJZiBlMmZzY2sgbmVlZHMgdG8gdXNlIHRoZSBiYWNrdXAgZ3JvdXAgZGVzY3JpcHRvcnMsIHRoZQorZXh0MmZzX29wZW4yKCkgZnVuY3Rpb24gY2xlYXJzIHRoZSBVTklOSVQgYml0cyB0byBlbnN1cmUgYWxsIG9mIHRoZQoraW5vZGVzIGluIHRoZSBmaWxlIHN5c3RlbXMgZ2V0IHNjYW5uZWQuICBIb3dldmVyLCB0aGUgY29kZSB3aGljaCByZXNldAordGhlIFVOSU5JVCBmbGFncyBkaWQgbm90IGFsc28gcmVjYWxjdWxhdGUgdGhlIGNoZWNrc3VtLCB3aGljaCBwcm9kdWNlZAorbWFueSBzcHVyaW91cyAoYW5kIHNjYXJ5KSBlMmZzY2sgbWVzc2FnZXMuICBUaGlzIGhhcyBiZWVuIGZpeGVkIGJ5CityZXNldHRpbmcgY2hla3N1bXMgd2hlbiB0aGUgVU5JTklUIGJpdHMgYXJlIGNsZWFyZWQuCisKK1JlbGF4IGEgY2hlY2sgaW4gZTJmc2NrIHdoaWNoIHJlcXVpcmVkIHRoYXQgdGhlIGJsb2NrIGJpdG1hcCB0byBiZQoraW5pdGlhbGl6ZWQgd2hlbiB0aGUgaW5vZGUgYml0bWFwIGlzIGluIHVzZS4gIFRoaXMgd2lsbCBhbGxvdyB1cyB0bworZXZlbnR1YWxseSBlbGltaW5hdGUgY29kZSBmcm9tIHRoZSBrZXJuZWwgd2hpY2ggZm9yY2libHkgaW5pdGlhbGl6ZWQKK3RoZSBibG9jayBiaXRtYXAgd2hlbiB0aGUgaW5vZGUgYml0bWFwIGlzIGZpcnN0IHVzZWQsIHJlcXVpcmluZyBhbgorZXh0cmEgam91cm5hbCBjcmVkaXQgYW5kIGRpc2sgd3JpdGUuICAoQWRkcmVzc2VzIEdvb2dsZSBCdWc6ICM1OTQ0NDQwKQorICAgIAorTWFrZSBzdXJlIHJkZWJ1Z2ZzICh3aGljaCBtYXkgYmUgaW5zdGFsbGVkIHNldHVpZCBvciBzZXRnaWQgZGlzaykgZG9lcworbm90IGhvbm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBpZiBldWlkICE9IHVpZCBvciBlZ2lkICE9IGdpZC4KKworRGVidWdmcydzIG5jaGVjayBjb21tYW5kIGhhcyBiZWVuIG9wdGltaXplZCBhbmQgbm93IGlzIG11Y2ggbW9yZQorcm9idXN0IHdpdGggZmFjZWQgd2l0aCBjb3JydXB0ZWQgZmlsZSBzeXN0ZW1zLiAgVGhlIG5jaGVjayBjb21tYW5kCithbHNvIG5vdyBoYXMgYSAtYyBvcHRpb24gd2hpY2ggd2lsbCB2ZXJpZnkgdGhlIGZpbGUgdHlwZSBpbmZvcm1hdGlvbgoraW4gdGhlIGRpcmVjdG9yeSBlbnRyeSB0byBzZWUgaWYgbWF0Y2hlcyB0aGUgaW5vZGUncyBtb2RlIGJpdHMuICBUaGlzCitpcyBleHRyZW1lbHkgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSBkZWJ1Z3NmcyB0byBkZXRlcm1pbmUgd2hpY2gKK3BhcnRzIG9mIHRoZSBmaWxlIHN5c3RlbSBtZXRhZGF0YSBjYW4gYmUgdHJ1c3RlZC4KKworRTJpbWFnZSB3aWxsIHRyeSB0byB1c2UgZnRydW5jYXRlNjQoKSB0byBzZXQgdGhlIGlfc2l6ZSBmb3IgcmF3CitpbWFnZXMsIGluc3RlYWQgb2Ygd3JpdGluZyBhIHNpbmdsZSBudWxsIGJ5dGUuICBUaGlzIGF2b2lkIGFsbG9jYXRpbmcKK2FuIGV4dHJhIGJsb2NrIHRvIHRoZSByYXcgaW1hZ2UsIGZvciB0aG9zZSBmaWxlIHN5c3RlbXMgYW5kL29yCitvcGVyYXRpbmcgc3lzdGVtcyB0aGF0IHN1cHBvcnQgdGhpcy4gIChMaW51eCBkb2VzLikgIEluIGFkZGl0aW9uLCBmaXgKK2EgbG9naWMgYnVnIHRoYXQgY2F1c2VkIHRoZSBmaWxlIHRvIG5vdCBiZSBwcm9wZXJseSBleHRlbmRlZCBpZiB0aGUKK3NpemUgb2YgdGhlIGxhc3QgaG9sZSB3YXMgZXhhY3RseSBhbiBtdWx0aXBsZSBvZiBhIG1lZ2FieXRlLgorCitGaXhlZCBhIGJ1ZyBpbiByZXNpemUyZnMgd2hlcmUgZm9yIDFrIGFuZCAyayBmaWxlIHN5c3RlbXMsIHdoZXJlCitzX2ZpcnN0X2RhdGFfYmxvY2sgaXMgbm9uLXplcm8sIHRoaXMgd2Fzbid0IHRha2VuIGludG8gYWNjb3VudCB3aGVuCitjYWxjdWxhdGUgdGhlIG1pbmltdW0gZmlsZSBzeXN0ZW0gc2l6ZSBmb3IgdXNlIHdpdGggdGhlIC1NIG9wdGlvbi4KKworRml4ZWQgdGhlIGJhZGJsb2NrcyBwcm9ncmFtIHRvIGhvbm9yIHRoZSAtcyBmbGFnIHdoZW4gaW4gcmVhZC1vbmx5IC10Cittb2RlLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnICM2NDY2MjkpCisKK1VwZGF0ZSBDemVjaCwgRHV0Y2gsIEZyZW5jaCwgUG9saXNoLCBhbmQgU3dlZWRpc2ggdHJhbnNsYXRpb24gZnJvbSB0aGUKK1RyYW5zbGF0aW9uIFByb2plY3QuCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIFBhY2thZ2luZyBpc3N1ZXMgc28gdGhhdCBkcGtnLWJ1aWxkZmxhZ3MgaXMgdXNlZAoraWYgcHJlc2VudCwgd2hpY2ggYWxsb3dzIGUyZnNwcm9ncyB0byBiZSBidWlsdCB3aXRoIHNlY3VyaXR5IGhhcmRlbmluZworZmxhZ3MuICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNjU0NDU3KQorCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXggYSBidWcgaW4gZXh0MmZzX2NsZWFyX2dlbmVyaWNfYm1hcCgpIHdoZW4gdXNlZCBmb3IgMzItYml0IGJpdG1hcHMuCitUaGlzIHdhcyBvbmx5IGFuIGlzc3VlIGZvciBwcm9ncmFtcyBjb21waWxlZCBhZ2FpbnN0IGUyZnNwcm9ncyAxLjQxCit0aGF0IG1hbmlwdWxhdGUgYml0bWFwcyBkaXJlY3RseS4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnczoKKyMzNDUxNDg2KQorCitUaGUgbGliZXh0MmZzIGxpYnJhcnkgbm93IHVzZXMgc3lzY29uZigpIHRvIGZldGNoIHRoZSBwYWdlIHNpemUsIGluc3RlYWQKK29mIHRoZSBkZXByZWNhdGVkIGdldHBhZ2VzaXplKCkuCisKK1RoZSBleHQyZnNfZ2V0X3BhdGhuYW1lKCkgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBwYXJ0aWFsIHBhdGggaWYgYW4gYQorZGlyZWN0b3J5IGluIHRoZSBwYXRoIGlzIG5vdCBhIGRpcmVjdG9yeSwgZGlzcGxheWluZyBpdCBhcyBhbiBpbm9kZQorbnVtYmVyIGluIGFuZ2xlIGJyYWNrZXRzIGluc3RlYWQgb2YgZ2l2aW5nIHVwIGFuZCBkaXNwbGF5aW5nIGFuIGVycm9yLgorVGhpcyBpcyBtdWNoIG1vcmUgaGVscGZ1bCB3aGVuIGEgdXNlciBpcyB0cnlpbmcgdG8gZGVidWcgYSBjb3JydXB0ZWQKK2ZpbGUgc3lzdGVtLgorCitDb2RlcG9pbnRzIGZvciB0aGUgUk9fQ09NUEFUX1JFUExJQ0EgZmVhdHVyZSBoYXMgYmVlbiByZXNlcnZlZC4KKworQWRkZWQgYSBuZXcgbGlicmFyeSBmdW5jdGlvbiwgZXh0MmZzX2ZpbGVfZ2V0X2lub2RlX251bSgpLCBmb3IgdXNlIGJ5CitmdXNlMmZzLgorCitGaXhlZCBhIGJ1ZyBpbiBleHQyZnNfZmlsZV9zZXRfc2l6ZTIoKSBzbyB0aGF0IHdoZW4gaXQgaXMgdHJ1bmNhdGluZyBhCitmaWxlLCBpdCBhY3R1YWxseSB3b3Jrcy4KKworVGhlIGJsb2NrIGl0ZXJhdG9yIG5vdyBwcm9wZXJseSBob25vcnMgdGhlIEJMT0NLX0FCT1JUIGZsYWcgZm9yCitleHRlbnQtYmFzZWQgZmxhZ3MuICBQcmV2aW91c2x5LCBpdCBkaWRuJ3QsIHdoaWNoIGdlbmVyYWxseSBtYWRlIGNvZGUKK2JlIGxlc3MgZWZmaWNpZW50LCBidXQgaXQgY291bGQgY2F1c2UgYnVncyBpbiBleHQyZnNfbGluaygpLCBmb3IKK2V4YW1wbGUsIGJ5IGNhdXNpbmcgaXQgdG8gaW5zZXJ0IG11bHRpcGxlIGRpcmVjdG9yeSBlbnRyaWVzLgorCitGaXhlZCBhbiAoaGFybWxlc3Mgb3RoZXIgdGhhbiBjYXVzaW5nIGEgY29tcGlsZXIgd2FybmluZykgdXNlIG9mIGFuCit1bmluaXRpYWxpemVkIHZhcmlhYmxlIGluIGUyZnNjaydzIE1NUCBjb2RlLgorCisKK0UyZnNwcm9ncyAxLjQyIChOb3ZlbWJlciAyOSwgMjAxMSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG9mIGUyZnNwcm9ncyBoYXMgc3VwcG9ydCBmb3IgZmlsZSBzeXN0ZW1zID4gMTZUQi4gIE9ubGluZQorcmVzaXplIHJlcXVpcmVzIGtlcm5lbCBzdXBwb3J0IHdoaWNoIHdpbGwgaG9wZWZ1bGx5IGJlIGluIExpbnV4Cit2ZXJzaW9uIDMuMi4gIE9mZmxpbmUgc3VwcG9ydCBpcyBub3QgeWV0IGF2YWlsYWJsZSBmb3IgPiAxNlRCIGZpbGUKK3N5c3RlbXMsIGJ1dCB3aWxsIGJlIGNvbWluZy4KKworVGhpcyByZWxlYXNlIG9mIGUyZnNwcm9ncyBoYXMgc3VwcG9ydCBmb3IgY2x1c3RlcmVkIGFsbG9jYXRpb24uICBUaGlzCityZWR1Y2VzIHRoZSBudW1iZXIgb2YgYmxvY2sgKG5vdyBjbHVzdGVyKSBiaXRtYXBzIGJ5IGFsbG9jYXRpbmcgYW5kCitkZWFsbG9jYXRpbmcgc3BhY2UgaW4gY29udGlndW91cyBwb3dlci1vZi0yIGNvbGxlY3Rpb25zIG9mIGJsb2NrcywKK3doaWNoIGFyZSBjYWxsZWQgY2x1c3RlcmVkLiAgVGhpcyBpcyBhIGZpbGUgc3lzdGVtIGxldmVsIGZlYXR1cmUsCitjYWxsZWQgJ2JpZ2FsbG9jJywgd2hpY2ggbXVzdCBiZSBlbmFibGVkIHdoZW4gdGhlIGZpbGUgc3lzdGVtIGlzCitpbml0aWFsbHkgZm9ybWF0dGVkLiAgSXQgaXMgbm90IGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggb2xkZXIKK2tlcm5lbHMuCisKK0FkZGVkIHN1cHBvcnQgZm9yIHRoZSBNdWx0aS1Nb3VudCBQcm90ZWN0aW9uIChNTVApIGZlYXR1cmUuCisKK0UyZnNjayBtb3JlIGVmZmljaWVudGx5IHVzZXMgc2NyYXRjaCBmaWxlcyBmb3IgcmVhbGx5IGJpZyBmaWxlCitzeXN0ZW1zLiAgKFRoaXMgaXMgYSBmZWF0dXJlIHRoYXQgaGFzIHRvIGJlIHR1cm5lZCBvbiBleHBsaWNpdGx5OyBzZWUKK1tzY3JhdGNoX2ZpbGVzXSBpbiB0aGUgZTJmc2NrLmNvbmYgbWFuIHBhZ2UuKQorCitGaXggYSBidWcgaW4gZTJmc2NrIHdoZXJlIGlmIHRoZSBmcmVlIGJsb2NrcyBhbmQgaW5vZGVzIGNvdW50cyBhcmUKK2luY29ycmVjdCwgZTJmc2NrIHdvdWxkIGZpeCB0aGVtIHdpdGhvdXQgcHJpbnRpbmcgYW4gZXJyb3IgbWVzc2FnZS4KK1RoaXMgd291bGQgY2F1c2UgYSAiKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioiIG1lc3NhZ2Ugd2l0aG91dAorYW55IGV4cGxhbmF0aW9uIG9mIHdoYXQgd2FzIGZpeGVkLgorCitFMmZzY2sgd2lsbCBubyBsb25nZXIgYXR0ZW1wdCB0byBjbG9uZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgaW4KK3Bhc3MxYiBoYW5kbGluZyBpZiB0aGUgZmlsZSBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBleHRlbmRlZAorYXR0cmlidXRlcy4KKworRTJmc2NrIHdpbGwgYmUgbW9yZSBjYXJlZnVsIGFjY2lkZW50YWxseSBhc2tpbmcgdGhlIHVzZXIgdG8gY29udGludWUKK2lmIHRoZSBmaWxlIHN5c3RlbSBpcyBtb3VudGVkLCBzbyB0aGF0IGFuIGVzY2FwZSBzZXF1ZW5jZSB3b24ndCBjYXVzZQorYSBmYWxzZSBwb3NpdGl2ZS4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzYxOTg1OSkKKworRTJmc2NrIG5vdyB1c2VzIGxlc3MgY3B1IHRpbWUgaW4gcGFzcyA1IHdoZW4gbGFyZ2UgcG9ydGlvbnMgb2YgdGhlCitiaXRtYXBzIGFyZSB1bmluaXRpYWxpemVkLgorCitFMmZzY2sgd2lsbCBubyBsb25nZXIgc2VnYXVsdCB3aGVuIGEgY29ycnVwdGVkIGZpbGUgc3lzdGVtIGhhcyBhIGJhZAorZXh0ZW50LCBhbmQgcmVtb3ZpbmcgaXQgbGVhZHMgdG8gYSBibG9jayBuZWVkaW5nIHRvIGJlIGRlYWxsb2NhdGVkLgorKEFkZHJlc3NlcyBTb3VyY2VGb3JnZSBCdWc6ICMyOTcxODAwKQorCitFMmZzY2sgd2lsbCBjYXRjaCB0ZXJtaW5hdGlvbiBzaWduYWxzIChzZWdmYXVsdHMsIGJ1cyBlcnJvcnMsIHNpZ2ZwZSkKK2FuZCBwcmludCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdG8gbWFrZSBpdCBlYXNpZXIgdG8gZmluZCBwb3RlbnRpYWwKK3Byb2JsZW1zLgorCitFMmZzY2sgd2lsbCBjaGVjayB0byBzZWUgaWYgdGhlIGJhZCBibG9jayBpbm9kZSBsb29rcyBpbnNhbmUsIGFuZCB3aWxsCitza2lwIHRyeWluZyB0byB1c2UgaWYgaXQgY2VydGFpbiBmaWVsZHMgd2hpY2ggc2hvdWxkIGJlIHplcm8gbG9vaworbm9uLXplcm8uICBUaGlzIGlzIHRvIGF2b2lkIGEgY29ycnVwdGVkIGJhZCBibG9jayBpbm9kZSBjYXVzaW5nIGUyZnNjawordG8gZ2V0IGNvbmZ1c2VkIGFuZCBkbyBtb3JlIGhhcm0gdGhhbiBnb29kLgorCitJZiBlMmZzY2sgbW9kaWZpZXMgY2VydGFpbiBzdXBlcmJsb2NrIGZpZWxkcyB3aGljaCB0aGUga2VybmVsIGRvZXNuJ3QKK2xvb2sgYXQsIGl0IHdpbGwgbm93IG1hcmsgdGhlIHN1cGVyYmxvY2sgYXMgZGlydHkgd2l0aG91dCBtYXJraW5nIHRoZQorZmlsZSBzeXN0ZW0gYXMgY2hhbmdlZC4gIFRoaXMgYXZvaWRzIHNpZ25hbGxpbmcgdGhlIGluaXQgc2NyaXB0cyB0aGF0CithIHJlYm9vdCBpcyBuZWNlc3NhcnksIHNpbmNlIHRoZSBrZXJuZWwgaXNuJ3QgZ29pbmcgdG8gbG9vayBhdCB0aG9zZQorZmllbGRzLCBzbyBpdCB3b24ndCBjYXJlIGlmIHRoZXkgaGF2ZSBiZWVuIGNoYW5nZWQuCisKK0ZpeGVkIGEgYnVnIGluIHRoZSBsaWJleHQyZnMgbGlicmFyeSAoaW4gdGhlIGJpbmFyeSBzZWFyY2ggcm91dGluZSBvZgordGhlIGljb3VudCBhYnN0cmFjdGlvbikgdGhhdCBjb3VsZCAodmVyeSwgdmVyeSByYXJlbHkpIGNhdXNlIGUyZnNjayB0bworZGllIGluIHRoZSBtaWRkbGUgb2YgcGFzcyAxIG9yIHBhc3MgMiBwcm9jZXNzaW5nLgorCitFMmZzY2sgd2lsbCBub3QgdHJ5IHRvIGRvIGEgZGlzY2FyZCBvcGVyYXRpb24gaWYgdGhlIC1uIG9wdGlvbiB3YXMKK3NwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCitFMmZzY2sgbm93IHN1cHBvcnRzIGFuIGV4dGVuZGVkICJkaXNjYXJkIiBvcHRpb24gd2hpY2ggd2lsbCBjYXVzZQorZTJmc2NrIHRvIGF0dGVtcHQgZGlzY2FyZCBhbGwgdW51c2VkIGJsb2NrcyBhZnRlciBhIGZ1bGwsIHN1Y2Nlc3NmdWwKK2ZpbGUgc3lzdGVtIGNoZWNrLgorCitFMmZzY2sgd2lsbCBjaGVjayBmb3IgdGhlIGJhZCBibG9jayBpbm9kZSB0byBtYWtlIHN1cmUgaXQgbG9va3Mgc2FuZQorYmVmb3JlIHRydXN0aW5nIGl0LCB0byBhdm9pZCBjYXVzaW5nIG1vcmUgaGFybSB0aGFuIGdvb2QgdG8gdGhlIGZpbGUKK3N5c3RlbS4KKworRTJmc2NrIG5vdyByZXR1cm5zIGFkZGl0aW9uYWwgc3RhdHVzIGJpdHMgaW4gaXRzIGV4aXQgY29kZSBpZiBpdAorYWJvcnRzIGVhcmx5IGluIHRoZSBlMmZzY2sgcnVuLgorCitFMmZzY2sgbm93IGNvcnJlY3RseSBjYWxjdWxhdGVzIHRoZSBtYXhpbXVtIGZpbGUgc2l6ZSBpbiB0aGUgY2FzZSBvZgordGhlIGh1Z2VfZmlsZSBmaWxlIHN5c3RlbSBmZWF0dXJlIGVuYWJsZWQgd2l0aG91dCBleHRlbnRzLgorCitUaGUgbWtlMmZzIGFuZCBlMmZzY2sgcHJvZ3JhbXMgbm93IHRyaWVzIHRvIHVzZSB0aGUgcHVuY2ggaG9sZSBjb21tYW5kCithcyBhICJkaXNjYXJkIiB3aGVuIG9wZXJhdGluZyBvbiBub3JtYWwgZmlsZXMuCisKK1RoZSBlMmltYWdlIHByb2dyYW0gbm93IHN1cHBvcnRzIHRoZSBxY293MiBmb3JtYXQsIHdoaWNoIGlzIGEgbW9yZQorZWZmaWNpZW50IHdheSBvZiBjYXB0dXJpbmcgZmlsZSBzeXN0ZW0gZHVtcHMuCisKK01rZTJmcyBub3cgc3VwcG9ydHMgdGhlIFtkZXZpY2VzXSBzdGFuemEgaW4gbWtlMmZzLmNvbmYgd2hpY2ggYWxsb3dzCitwZXItZGV2aWNlIGRlZmF1bHRzIHRvIGJlIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorCitNa2UyZnMgbm93IHN1cHBvcnRzIHRoZSByZXNlcnZlZF9yYXRpbyByZWxhdGlvbiBpbiB0aGUgW2RlZmF1bHRzXSBhbmQKK1tmc190eXBlc10gc2VjdGlvbiBpbiBta2UyZnMuY29uZi4KKworTWtlMmZzIG5vdyBjcmVhdGVzIGV4dGVudC1tYXBwZWQgZGlyZWN0b3JpZXMgZm9yIHRoZSByb290IGFuZAorbG9zdCtmb3VuZCBkaXJlY3Rvcmllcy4KKworTWtlMmZzIHdpbGwgc2tpcCB6ZXJvJ2luZyB0aGUgam91cm5hbCBpZiB0aGUgZXh0ZW5kZWQgb3B0aW9uCisibGF6eV9qb3VybmFsX2luaXQiIGlzIHNwZWNpZmllZC4gIFRoaXMgY2FuIHNhdmUgYSBsb3Qgb2YgdGltZSwgYnV0IGl0Citkb2VzIGFkZCBhIHNtYWxsIGFtb3VudCBvZiByaXNrIGlmIHRoZSBzeXN0ZW0gY3Jhc2hlcyBiZWZvcmUgdGhlCitqb3VybmFsIGlzIG92ZXJ3cml0dGVuIGVudGlyZWx5IG9uY2UuICBJdCBpcyBlcHNlY2lhbGx5IHVzZWZ1bCBmb3IKK3Rlc3RpbmcuCisKK01rZTJmcyB3aWxsIG5vdyBjcmVhdGUgZmlsZSBzeXN0ZW1zIHRoYXQgZW5hYmxlIHVzZXIgbmFtZXNwYWNlCitleHRlbmRlZCBhdHRyaWJ1dGVzIGFuZCB3aXRoIHRpbWUtIGFuZCBtb3VudCBjb3VudC1iYXNlZCBmaWxlCitzeXN0ZW0gY2hlY2tzIGRpc2FibGVkLgorCitNa2UyZnMgd2lsbCBub3Qgc2V0IGEgc3RyaWRlIG9yIHN0cmlwIHNpemUgb2Ygb25lIGJsb2NrIGJhc2VkIG9uIGJsb2NrCitkZXZpY2UgYXR0cmlidXRlcyBvYnRhaW5lZCBmcm9tIHN5c2ZzLgorCitNa2UyZnMgbm93IGRpc3BsYXlzIGEgcHJvZ3Jlc3MgcmVwb3J0IGR1cmluZyB0aGUgZGlzY2FyZCBwcm9jZXNzLgorCitNa2UyZnMgbm93IGhhbmRsZXMgZXh0cmVtZSBmaWxlIHN5c3RlbSBwYXJhbWV0ZXJzIGNvcnJlY3RseSB3aGljaAorcHJldmlvdXNseSBjYXVzZWQgdGhlIGlub2RlcyBwZXIgZ3JvdXAgdG8gZHJvcCBiZWxvdyA4LCBsZWFkaW5nIHRvIGEKK3NlZ2ZhdWx0LiAgKFRoZSBpbm9kZXMgcGVyIGdyb3VwIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4LCBidXQgdGhlIGNvZGUKK2RpZG4ndCBjb3JyZWN0bHkgZGVhbCB3aXRoIGFuIGlub2RlcyBwZXIgZ3JvdXAgY291bnQgbGVzcyB0aGFuIDguKQorCitNa2UyZnMgYW5kIHR1bmUyZnMgcHJldmlvdXNseSB3b3VsZCBnaXZlIGFuIGVycm9yIGlmIHRoZSB1c2VyIHRyaWVkCitzZXR0aW5nIHRoZSBzdHJpZGUgYW5kIHN0cmlwZS13aWR0aCBwYXJhbWV0ZXJzIHRvIHplcm87IGJ1dCB0aGlzIGlzCituZWNlc3NhcnkgdG8gZGlzYWJsZSB0aGUgc3RyaWRlIGFuZCBzdHJpcGUtd2lkdGggc2V0dGluZ3MuICBTbyBhbGxvdworc2V0dGluZyB0aGVzZSBzdXBlcmJsb2NrIGZpZWxkcyB0byB6ZXJvLiAgKEFkZHJlc3NlcyBHb29nbGUgQnVnOgorIzQ5ODg1NTcpCisKK01rZTJmcyBub3cgZ2l2ZXMgYSB3YXJuaW5nIGlmIHRoZSBhdXRvLWRldGVjdGVkIGJsb2NrIHNpemUgZXhjZWVkcyB0aGUKK3N5c3RlbSdzIHBhZ2Ugc2l6ZS4KKworSWYgdGhlIGVuYWJsZV9wZXJpb2RpY19mc2NrIG9wdGlvbiBpcyBmYWxzZSBpbiAvZXRjL21rZTJmcy5jb25mICh3aGljaAoraXMgdGhlIGRlZmF1bHQpLCBta2UyZnMgd2lsbCBub3cgc2V0IHRoZSBzX21heF9tbnRfY291bnQgc3VwZXJibG9jaworZmllbGQgdG8gLTEsIGluc3RlYWQgb2YgMC4gIEtlcm5lbHMgb2xkZXIgdGhlbiAzLjAgd2lsbCBwcmludCBhCitzcHVyaW91cyBtZXNzYWdlIG9uIGVhY2ggbW91bnQgdGhlbiB0aGV5IHNlZSBhIHNfbWF4X21udF9jb3VudCBzZXQgdG8KKzAsIHdoaWNoIHdpbGwgYW5ub3kgdXNlcnMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM2MzI2MzcpCisgICAgCitUaGUgZGVmYXVsdCBta2UyZnMuY29uZiBub3cgaGFzIGVudHJpZXMgZm9yICJiaWciIGFuZCAiaHVnZSIsIHdoaWNoCithcmUgbmVlZGVkIGZvciB2ZXJ5IGJpZyBmaWxlIHN5c3RlbXMuCisKK1RoZSByZXNpemUyZnMgcHJvZ3JhbSBub3cgaGFzIHN1cHBvcnQgZm9yIGEgbmV3IG9ubGluZSByZXNpemUgaW9jdGwKK3RoYXQgY2FuIHN1cHBvcnQgZmlsZSBzeXN0ZW1zID4gMTZUQiwgb25jZSBpdCBhcnJpdmVzIGluIHYzLngga2VybmVscy4KKworRml4ZWQgYnVnIHdoaWNoIGNhdXNlZCByZXNpemUyZnMgdG8gZmFpbCB3aGVuIHNocmlua2luZyBhbiBlbXB0eSBmaWxlCitzeXN0ZW0gZG93biB0byBpdHMgbWluaW1hbCBzaXplLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWcgIzM0MDQwNTEpCisKK0ZpeGVkIHR1bmUyZnMncyBtb3VudCBvcHRpb25zIHBhcnNpbmcuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM2NDE2NjcpCisKK0FsbG93IHR1bmUyZnMgdG8gcmVtb3ZlIGV4dGVybmFsIGpvdXJuYWxzIGlmIHRoZSBkZXZpY2UgY2FuIG5vdCBiZQorZm91bmQuCisKK0RlYnVnZnMncyBpY2hlY2sgd2lsbCBub3cgY29ycmVjdGx5IGZpbmQgaW5vZGVzIHdoaWNoIHVzZSB0aGUKK3NlYXJjaGVkLWZvciBibG9jayBhcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2suCisKK0RlYnVnZnMgbm93IGhhcyBhIG5ldyAicHVuY2giIGNvbW1hbmQgd2hpY2ggcmVtb3ZlIGJsb2NrcyBmcm9tIHRoZQorbWlkZGxlIG9mIGFuIGlub2RlLgorCitEZWJ1Z2ZzIG5vdyBoYXMgYSBuZXcgImUyZnJlZWZyYWciIGNvbW1hbmQgd2hpY2ggYW5hbHl6ZXMgdGhlIGZyZWUKK3NwYWNlIGZyYWdtZW50YXRpb24gb2YgdGhlIGZpbGUgc3lzdGVtLCB1c2luZyB0aGUgc2FtZSBjb2RlIGFzIHRoZQorZTJmcmVlZnJhZyBwcm9ncmFtLgorCitEZWJ1Z2ZzIG5vdyBoYXMgYSAiZmlsZWZyYWciIGNvbW1hbmQgd2hpY2ggZGlzcGxheXMgaW5mb3JtYXRpb24gYWJvdXQKK2EgZmlsZSdzIGZyYWdtZW50YXRpb24uCisKK0FkZCBzdXBwb3J0IHRvIGJ1aWxkIGEgbWV0YWRhdGEtb25seSwgcmVhZC1vbmx5LCBzdHJpcHBlZC1kb3duIHZlcnNpb24KK29mIGRlYnVnZnMgY2FsbGVkIHJkZWJ1Z2ZzLgorCitGaXhlZCBhIHBvdGVudGlhbCBzdGFjayBvdmVycnVuIGJ1ZyBpbiBkZWJ1Z2ZzLgorCitUaGUgYmFkYmxvY2tzIHByb2dyYW0gbm93IGNvcnJlY3RseSByZWNvdmVycyBmcm9tIEkvTyBlcnJvcnMgd2hlbgorZGlyZWN0IEkvTyBpcyBiZWluZyB1c2VkLiAgVGhlIGJhZGJsb2NrcyBjb21tYW5kIG5vdyBhbHNvIHN1cHBvcnRzIGEKKy1CIG9wdGlvbiB3aGljaCBmb3JjZXMgdGhlIHVzZSBvZiBidWZmZXJlZCBJL08sIGFuZCB0aGUgLXYgb3B0aW9uIHdpbGwKK3Byb3ZpZGUgYSBtb3JlIGRldGFpbGVkIGJyZWFrZG93biBvZiByZWFkLCB3cml0ZSwgYW5kIGZhaWxlZAorY29tcGFyaXNvbiBlcnJvcnMuCisKK0FkZGVkIGU0ZGVmcmFnIHRvb2wgd2hpY2ggdXNlcyB0aGUgRVhUNF9JT0NfTU9WRV9FWFQgaW9jdGwuCisKK0FkZGVkIHN1cHBvcnQgZm9yIGpvdXJuYWxzIGxhcmdlciB0aGFuIDJHQi4KKworU3VwcG9ydCB1c2luZyBib3RoIGhhcmQgbGlua3MgYW5kIHN5bWxpbmtzIHdoZW4gaW5zdGFsbGluZyBlMmZzcHJvZ3MuCisKK0FkZCBvdmVyZmxvdyBjaGVja2luZyB0byB0dW5lMmZzIC1pJ3MgZnNjayBpbnRlcnZhbCwgd2hpY2ggbXVzdCBmaXQgaW4KK2EgMzItYml0IGZpZWxkLgorCitUaGUgZGVidWdmcyBjb21tYW5kIG5vdyBoYXMgYSBuZXcgJ2Jsb2NrcycgY29tbWFuZCB3aGljaCBwcmludHMgb3V0CitkYXRhIGJsb2NrcyBvZiBhIHBhcnRpY3VsYXIgaW5vZGUgaW4gYSBmb3JtYXQgd2hpY2ggaXMgdXNlZnVsIGZvcgorc2NyaXB0aW5nLgorCitGaWxlZnJhZyB3aWxsIHJlcG9ydCAwIGV4dGVudHMgY29ycmVjdGx5IGluIHZlcmJvc2UgbW9kZS4gIChBZGRyZXNzZXMKK1JlZEhhdCBCdWd6aWxsYTogIzY1MzIzNCkKKworRmlsZWZyYWcgaGFzIGJlZW4gZml4ZWQgc28gaXRzIC12IHJlcG9ydCBwcmludHMgdGhlIGNvcnJlY3QgZXhwZWN0ZWQKK2Jsb2NrIG51bWJlciAocHJldmlvdXNseSB0aGVyZSBoYWQgYmVlbiBhbiBvZmYtYnktb25lIGVycm9yKS4gIEluCithZGRpdGlvbiwgaXQgd2lsbCBub3cgZGlzcGxheSB0aGUgbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZXh0ZW50cyB3aGVuIC12CitpcyBub3Qgc3BlY2lmaWVkLiAgVGhpcyBtYWtlcyBpdCBjb25zaXN0ZW50IHdpdGggdGhlIG51bWJlciBvZiBleHRlbnRzCitwcmludGVkIHdoZW4gdGhlIC12IG9wdGlvbiB3YXMgc3BlY2lmaWVkLiAgSW4gYWRkaXRpb24sIHRoZSBudW1iZXIgb2YKK2NvbnRpZ3VvdXMgZXh0ZW50cyBpcyBmYXIgbW9yZSBpbnRlcmVzdGluZy91c2VmdWwgdGhhbiB0aGUgbnVtYmVyIG9mCitwaHlzaWNhbCBleHRlbnRzIGZvciB2ZXJ5IGxhcmdlIGZpbGVzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOgorIzYzMTQ5OCwgIzY0NDc5MikKKyAgICAKK0xvZ3NhdmUncyB1c2FnZSBtZXNzYWdlIGhhcyBiZWVuIGZpeGVkLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOgorIzYxOTc4OCkKKworQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBpbiBleHQyZnNfZmluZF9ibG9ja19kZXZpY2UoKSBpZiB0aGVyZSBhcmUKK3N5bWxpbmsgbG9vcHMgaW4gL2RldiBjYXVzZWQgYnkgYSBidWdneSB1ZGV2LgorCitBZGRlZCBhIHVzZWZ1bCAiZmFsbG9jYXRlIiBwcm9ncmFtIHRvIHRoZSBjb250cmliIGRpcmVjdG9yeS4KKworRml4ZWQgYW4gQUJJIGNvbXBhdGliaWxpdHkgcHJvYmxlbSBpbiBsaWJleHQyZnMgd2hpY2ggYnJva2UgdGhlIGR1bXAKK3Byb2dyYW0uICBBbHNvIGFkZGVkIGJhY2sgc29tZSBtYWNyb3Mgd2hpY2ggZHVtcCBuZWVkZWQgc28gaXQgY291bGQKK2NvbXBpbGUgYWdhaW5zdCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZXh0Ml9mcy5oIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzoKKyM2MzY0MTgpCisKK0ZpeGVkIHBhcnNpbmcgb2YgTU5UT1BUXyBvcHRpb25zIGZvciB0dW5lMmZzIGFuZCBkZWJ1Z2ZzIChBZGRyZXNzZXMKK0RlYmlhbiBCdWc6ICM2NDE2NjcpCisKK0FkZGVkIGludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQgZm9yIGxpYmNvbV9lcnIgZXJyb3IgdGFibGUgc3RyaW5ncy4KKworRml4ZWQgdmFyaW91cyBzcGVsbGluZyBtaXN0YWtlcyBmb3VuZCBpbiB2YXJpb3VzIG91dHB1dCBzdHJpbmdzIGZvdW5kCitieSBJMThOIHRyYW5zbGF0b3JzLgorCitVcGRhdGUgdHJhbnNsYXRpb25zOiBGcmVuY2gsIENoaW5lc2UsIEdlcm1hbnksIEluZG9uZXNpYW4sIFN3ZWRpc2gsCitWaWV0bmFtZXNlLCBQb2xpc2gsIER1dGNoLCBDemVjaC4gIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6ICM1MjA5ODUsCisjNjIwNjU5KQorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBQYWNrYWdpbmcgaXNzdWVzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnczoKKyM2MTQ2NjIsICM2MzIxNjksICM2NDE4MzgsICM2Mjc1MzUsICM2MjkzNTUpCisKK1VwZGF0ZWQvY2xhcmlmaWVkIG1hbiBwYWdlcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6ICM2Mzk0MTEsCisjNjQyMTkzLCAjNjM0ODgzKQorCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitJbml0aWFsIHN1cHBvcnQgZm9yIHF1b3RhIGFzIGFuIGludGVncmF0ZWQgZmVhdHVyZSwgd2hlcmUgdGhlIHF1b3RhCitmaWxlcyBhcmUgaGlkZGVuIHN5c3RlbSBmaWxlcyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IG1haW50YWluZWQgYnkKK2UyZnNjayBpcyBwcmVzZW50LCBhbHRob3VnaCBkaXNhYmxlZCBieSBkZWZhdWx0LiAgSXQgbXVzdCBiZSBlbmFibGVkCitieSB1c2luZyB0aGUgY29uZmlndXJlIG9wdGlvbiAtLWVuYWJsZS1xdW90YS4KKworUmVzZXJ2ZWQgdGhlIG9uLWRpc2sgZmllbGRzIGZvciB0aGUgbWV0YWRhdGEgY2hlY2tzdW0gYW5kIHNuYXBzaG90CitmZWF0dXJlcywgd2hpY2ggYXJlIGN1cnJlbnRseSBpbiBkZXZlbG9wbWVudC4KKworVGhlIGV4dDJmcyBsaWJyYXJ5IG5vdyBoYXMgdGhlIG5ldyBmdW5jdGlvbnMgZXh0MmZzX3B1bmNoKCksCitleHQyZnNfZ2V0X21lbXplcm8oKSBhbmQgZXh0MmZzX2ZpbGVfZ2V0X2lub2RlKCkuCisKK1RoZSBleHQyZnMgbGlicmFyeSBub3cgaGFzIHN1cHBvcnQgZm9yIGNhbGN1bGF0aW5nIHRoZSBjcmMzMmMgY2hlY2tzdW0KKyh2aWEgdGhlIG5ldyBmdW5jdGlvbnMgZXh0MmZzX2NyYzMyY19iZSBhbmQgZXh0MmZzX2NyYzMyY19sZSkuCisKK1RoZSBJL08gbWFuYWdlciBub3cgc3VwcG9ydHMgdGhlIGRpc2NhcmQgb3BlcmF0aW9uLgorCitSZXNlcnZlZCBmaWxlIHN5c3RlbSBjb2RlIHBvaW50cyBmb3IgbmV3IDFzdCBjbGFzcyBxdW90YSBmZWF0dXJlLgorCitTaG9ydGVuZWQgdGhlIGNvbXBpbGF0aW9uIGxpbmVzIGJ5IG1vdmluZyB0aGUgYXV0b2NvbmYgZGVmaW5lcyB0bworYSBjb25maWcuaCBoZWFkZXIgZmlsZS4KKworRml4ZWQgYSBwb3RlbnRpYWwgZnJlZSBvZiBhbiB1bml0aWFsaXplZCBwb2ludGVyIGluCitleHQyZnNfdXBkYXRlX2JiX2lub2RlKCkuCisKK0ZpeGVkIG1pc2NlbGxhbmVvdXMgZ2NjIC1XYWxsIGFuZCBjb3Zlcml0eSB3YXJuaW5ncy4KKworRml4ZWQgcG9ydGFiaWxpdHkgaXNzdWVzIGZvciBNYWMgT1MgWCwgSHVyZCwgYW5kIEZyZWVCU0QuCisKK0ZpeGVkIGEgYnVpbGQgZmFpbHVyZSB3aGVuIE9NSVRfQ09NX0VSUiBpcyBkZWZpbmVkLgorCitJbXByb3ZlZCBlcnJvciBjaGVja2luZyBhbmQgZml4ZWQgbWVtb3J5IGxlYWtzIGNhdXNlZCBieSBlcnJvciByZXR1cm4KK3BhdGhzLgorCitBZGQgZXh0MmZzX2ZsdXNoMigpIGFuZCBleHQyZnNfY2xvc2UyKCkgd2hpY2ggdGFrZXMgYSBmbGFnIHRvIGFsbG93Cit0aGUgZnN5bmMoKSB0byBiZSBza2lwcGVkLgorCitBZGRlZCBhIHRlc3QgZm9yIGV4dGVudC1tYXBwZWQgam91cm5hbHMgYnkgbWtlMmZzIGFuZCB0dW5lMmZzLgorCitBZGRlZCBhIHRlc3QgZm9yIGNyZWF0aW5nIGEgbGFyZ2UgKG92ZXIgNEdCKSBqb3VybmFsIHVzaW5nIG1rZTJmcy4KKworQWRkZWQgYSB0ZXN0IHRvIG1ha2Ugc3VyZSB0aGUgaW5vZGUgc2l6ZSByZW1haW5zIGNvbnN0YW50LgorCitUaGUgcmVncmVzc2lvbiB0ZXN0IHNjcmlwdCBub3cgcHJpbnRzIHRoZSBsaXN0IG9mIHdoaWNoIHRlc3RzIGZhaWxlZC4KKworVGhlIHJlZ3Jlc3Npb24gdGVzdCBzeXN0ZW0gbm93IHVzZXMgL3RtcCBmb3IgaXRzIHNjcmF0Y2ggZmlsZXMsIHdoaWNoCitpcyBvZnRlbiBhIHRtcGZzIG1vdW50ZWQgZmlsZSBzeXN0ZW0gYW5kIGhlbmNlIG11Y2ggZmFzdGVyLgorCitUaGUgaV9lMmltYWdlIHRlc3Qgd2FzIGZpeGVkIHNvIGl0IHdvcmtzIHdpdGggdmFsZ3JpbmQuCisKK1Rlc3RzIHRoYXQgcmVseSBvbiBkZWJ1Z2ZzIGFyZSBub3cgc2tpcHBlZCBpZiBkZWJ1Z2ZzIHdhc24ndCBidWlsdC4KKworRml4ZWQgdGhlIGRlcGVuZGVuY2llcyBmb3IgIm1ha2UgY2hlY2siIHNvIGFsbCByZXF1aXJlZCBkZXBlbmRlbmNpZXMKK2FyZSBidWlsdCBiZWZvcmUgcnVubmluZyB0aGUgZ3Jlc3Npb24gdGVzdHMuCisKK0EgbGluayB0byBjb21fZXJyLmggaXMgaW5zdGFsbGVkIGluICQoaW5jbHVkZWRpcikgZHVyaW5nIGEgIm1ha2UgaW5zdGFsbCIuCisKK1RoZSBwby8qLmdtbyBmaWxlcyBhcmUgYXV0b21hdGljYWxseSByZWJ1aWx0IGlmIHRoZXkgYXJlIG1pc3Npbmcgb3IKK291dCBvZiBkYXRlLiAgVGhpcyBoZWxwcyBvdXQgRGViaWFuIHBhY2thZ2luZy4KKworQWxsb3cgZXh0MmZzX2dldF9tZW1hbGlnbigpIHRvIGNvbXBpbGUgb24gc3lzdGVtcyB0aGF0IGRvbid0IGhhdmUKK3Bvc2l4X21lbWFsaWduKCkuCisKK0ZpeGVkIGEgbmFtZXNwYWNlIGxlYWsgaW4gbGliZXh0MmZzICh0ZGJfbnVsbCkuCisKKworRTJmc3Byb2dzIDEuNDEuMTQgKERlY2VtYmVyIDIyLCAyMDEwKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXggc3B1cmlvdXMgY29tcGxhaW50IGluIG1rZTJmcyB3aGVyZSBpdCB3b3VsZCBjb21wbGFpbiBpZiB0aGUgZmlsZQorc3lzdGVtIHR5cGUgImRlZmF1bHQiIGlzIG5vdCBkZWZpbmVkIGluIG1rZTJmcy5jb25mLgorCitUaGUgcmVzaXplMmZzIHByb2dyYW0gd2lsbCBubyBsb25nZXIgY2xlYXIgdGhlIHJlc2l6ZV9pbm9kZSBmZWF0dXJlCit3aGVuIHRoZSBudW1iZXIgcmVzZXJ2ZWQgZ3JvdXAgZGVzY3JpcHRvciBibG9ja3MgcmVhY2hlcyB6ZXJvLiAgVGhpcworYWxsb3dzIGZvciBzdWJzZXF1ZW50IHNocmlua3Mgb2YgdGhlIGZpbGUgc3lzdGVtIHRvIHdvcmsgY2xlYW5seSBmb3IKK2ZsZXhfYmcgZmlsZSBzeXN0ZW1zLgorCitUaGUgcmVzaXplMmZzIHByb2dyYW0gbm93IGhhbmRsZXMgZGV2aWNlcyB3aGljaCBhcmUgZXhhY3RseSAxNlQ7CitwcmV2aW91c2x5IGl0IHdvdWxkIGdpdmUgYW4gZXJyb3Igc2F5aW5nIHRoYXQgdGhlIGZpbGUgc3lzdGVtIHdhcyB0b28KK2JpZy4KKworRTJmc2NrIChhbmQgdGhlIGxpYmV4dDJmcyBsaWJyYXJ5KSB3aWxsIG5vdCB1c2UgdGhlIGV4dGVuZGVkIHJlY19sZW4KK2VuY29kaW5nIGZvciBmaWxlIHN5c3RlbXMgd2hvc2UgYmxvY2sgc2l6ZSBpcyBsZXNzIHRoYW4gNjRrLCBmb3IKK2NvbnNpc3RlbmN5IHdpdGggdGhlIGtlcm5lbC4KKworUHJvZ3JhbW1pbmcgbm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0UyZnNwcm9ncyAxLjQxLjEzIHdvdWxkIG5vdCBjb21waWxlIG9uIGJpZy1lbmRpYW4gc3lzdGVtcy4gIFRoaXMgaGFzCitiZWVuIGZpeGVkLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMzMTM4MTE1KQorCitUaGUgZXh0MmZzX2Jsb2NrX2l0ZXJhdG9yMigpIGZ1bmN0aW9uIHBhc3NlZCBhbiBpbmNvcnJlY3QgcmVmX29mZnNldAordG8gaXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGluIHRoZSBjYXNlIG9mIHNwYXJzZSBmaWxlcy4gIChBZGRyZXNzZXMKK1NvdXJjZWZvcmdlIEJ1ZzogIzMwODEwODcpCisgICAgCitGaXggc29tZSB0eXBlLXB1bm5pbmcgd2FybmluZ3MgZ2VuZXJhdGVkIGJ5IG5ld2VyIHZlcnNpb25zIG9mIGdjYy4KKworCitFMmZzcHJvZ3MgMS40MS4xMyAoRGVjZW1iZXIgMTMsIDIwMTApCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0UyZnNjayBub3cgc3VwcG9ydHMgdGhlIGV4dGVuZGVkIG9wdGlvbiAiLUUgam91cm5hbF9vbmx5Iiwgd2hpY2gKK2NhdXNlcyBpdCB0byBvbmx5IGRvIGEgam91cm5hbCByZXBsYXkuICBUaGlzIGlzIHVzZWZ1bCBmb3Igc2NyaXB0cwordGhhdCB3YW50IHRvIGZpcnN0IHJlcGxheSB0aGUgam91cm5hbCBhbmQgdGhlbiBjaGVjayB0byBzZWUgaWYgaXQKK2NvbnRhaW5zIGVycm9ycy4KKworRTJmc2NrIHdpbGwgbm93IHN1cHBvcnQgVVVJRD0gYW5kIExBQkVMPSBzcGVjaWZpZXJzIGZvciB0aGUgLWogb3B0aW9uCisod2hpY2ggc3BlY2lmaWVzIHdoZXJlIHRvIGZpbmQgdGhlIGV4dGVybmFsIGpvdXJuYWwpLiAgKEFkZHJlc3NlcworRGViaWFuIEJ1ZyAjNTU5MzE1KQorCitFMmZzY2sgbm93IGhhcyBzdXBwb3J0IGZvciB0aGUgcHJvYmxlbXMvPHByb2JsZW0gY29kZT4vZm9yY2Vfbm8KK2NvbmZpZ3VyYXRpb24gb3B0aW9uIGluIGUyZnNjay5jb25mLCB3aGljaCBmb3JjZXMgYSBwcm9ibGVtIHRvIG5vdCBiZQorZml4ZWQuCisKK0R1bXBlMmZzIHdpbGwgbm93IGF2b2lkIHByaW50aW5nIGxhcmdlIG5lZ2F0aXZlIG9mZnNldHMgZm9yIHRoZSBiaXRtYXAKK2Jsb2NrcyBhbmQgaW5zdGVhZCBwcmludCBhIG1lc3NhZ2Ugd2hpY2ggaXMgYSBiaXQgbW9yZSBoZWxwZnVsIGZvcgorZmxleF9iZyBmaWxlIHN5c3RlbXMuCisKK01rZTJmcyB3aWxsIG5vdyBjaGVjayB0aGUgZmlsZSBzeXN0ZW0gdHlwZSAoc3BlY2lmaWVkIHdpdGggdGhlIC10CitvcHRpb24pIHRvIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIGluIHRoZSBta2UyZnMuY29uZiBmaWxlOyBpZiBpdCBpcworbm90LCBpdCB3aWxsIHByaW50IGFuIGVycm9yIGFuZCBhYm9ydC4gIElmIHRoZSB1c2FnZSB0eXBlIChzcGVjaWZpZWQKK3dpdGggdGhlIC1UIG9wdGlvbikgaXMgbm90IGRlZmluZWQgaW4gbWtlMmZzLmNvbmYsIG1rZTJmcyB3aWxsIHByaW50IGEKK3dhcm5pbmcgYnV0IHdpbGwgY29udGludWUuICAoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzU5NDYwOSkKKworQ2xhcmlmaWVkIGVycm9yIG1lc3NhZ2UgZnJvbSByZXNpemUyZnMgY2xhcmlmeWluZyB0aGF0IG9uLWxpbmUKK3Nocmlua2luZyBpcyBub3Qgc3VwcG9ydGVkIGF0IGFsbC4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjNTk5Nzg2KQorICAgIAorRml4IGFuIGUyZnNjayBidWcgdGhhdCBjb3VsZCBjYXVzZSBhIFBST0dSQU1NSU5HIEJVRyBlcnJvciB0byBiZQorZGlzcGxheWVkLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnICM1NTU0NTYpCisKK0UyZnNjayB3aWxsIG9wZW4gdGhlIGV4dGVybmFsIGpvdXJuYWwgaW4gZXhjbHVzaXZlIG1vZGUsIHRvIHByZXZlbnQKK3RoZSBqb3VybmFsIGZyb20gZ2V0dGluZyB0cnVuY2F0ZWQgd2hpbGUgaXQgaXMgaW4gdXNlIGR1ZSB0byBhIHVzZXIKK2FjY2lkZW50YWxseSB0cnlpbmcgdG8gcnVuIGUyZnNjayBvbiBhIHNuYXBzaG90dGVkIGZpbGUgc3lzdGVtIHZvbHVtZS4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjNTg3NTMxKQorCitGaXggYSBidWcgaW4gZTJmc2NrIHNvIGl0IGhhcyB0aGUgY29ycmVjdCB0ZXN0IGZvciB0aGUgRU9GQkxPQ0tTX0ZMCitmbGFnLgorCitUaGUgdHVuZTJmcyBwcm9ncmFtIGNhbiBub3cgc2V0IHRoZSB1bmluaXRfYmcgZmVhdHVyZSB3aXRob3V0CityZXF1aXJpbmcgYW4gZnNjay4KKworVGhlIHR1bmUyZnMsIGR1bXBlMmZzLCBhbmQgZGVidWdmcyBwcm9ncmFtcyBub3cgc3VwcG9ydCB0aGUgbmV3IGV4dDQKK2RlZmF1bHQgbW91bnQgb3B0aW9ucyBzZXR0aW5ncyB3aGljaCB3ZXJlIGFkZGVkIGluIDIuNi4zNS4KKworVGhlIGUyZnNjayBhbmQgZHVtcGUyZnMgcHJvZ3JhbXMgbm93IHN1cHBvcnQgdGhlIG5ldyBleHQ0IHN1cGVyYmxvY2sKK2ZpZWxkcyB3aGljaCB0cmFjayB3aGVyZSBhbmQgd2hlbiB0aGUgZmlyc3QgYW5kIG1vc3QgcmVjZW50IGZpbGUKK3N5c3RlbSBlcnJvcnMgb2NjdXJyZWQuICBUaGVzZSBmaWVsZHMgYXJlIGRpc3BsYXllZCBieSBkdW1wZTJmcyBhbmQKK2NsZWFyZWQgYnkgZTJmc2NrLiAgVGhlc2UgbmV3IHN1cGVyYmxvY2sgZmllbGRzIHdlcmUgYWRkZWQgaW4gMi42LjM2LgorCitEZWJ1Z2ZzIG5vdyB1c2VzIGEgbW9yZSBjb25jaWNzZSBmb3JtYXQgZm9yIGxpc3RpbmcgZXh0ZW50cyBpbiBpdHMKK3N0YXQgY29tbWFuZC4gIFRoaXMgZm9ybWF0IGFsc28gaW5jbHVkZXMgdGhlIGludGVyaW9yIGV4dGVudCB0cmVlCitibG9ja3MsIHdoaWNoIHByZXZpb3VzbHkgd2FzIG1pc3NpbmcgZnJvbSBzdGF0J3Mgb3V0cHV0IGZvcgorZXh0ZW50LWJhc2VkIGZpbGVzLgorCitEZWJ1Z2ZzIGhhcyBhIG5ldyBvcHRpb24sIC1ELCB3aGljaCB3aWxsIHJlcXVlc3QgRGlyZWN0IEkvTyBhY2Nlc3Mgb2YKK3RoZSBmaWxlIHN5c3RlbS4KKworTWtlMmZzIHdpbGwgc2tpcCBpbml0aWFsaXppbmcgdGhlIGlub2RlIHRhYmxlIGlmIGEgZGV2aWNlIHN1cHBvcnRzCitkaXNjYXJkIGFuZCB0aGUgZGlzY2FyZCBvcGVyYXRpb24gd2lsbCByZXN1bHQgaW4gemVybydlZCBibG9ja3MuCisKK0JhZGJsb2NrcyB3aWxsIG5vdyBjb3JyZWN0bHkgYmFja3NwYWNlIG92ZXIgVVRGLTggY2hhcmFjdGVycyB3aGVuCitkaXNwbGF5aW5nIGl0cyBwcm9ncmVzcyBiYXIuICAoQWRkcmVzc2VzIEdlbnRvbyBCdWcgIzMwOTkwOTsgQWRkcmVzc2VzCitEZWJpYW4gQnVncyAjNTgzNzgyIGFuZCAjNTg3ODM0KQorCitFMmZyZWVmcmFnIHdpbGwgbm93IGRpc3BsYXkgdGhlIHRvdGFsIG51bWJlciBvZiBmcmVlIGV4dGVudHMuCisKK1Jlc2l6ZTJmcyAtUCBubyBsb25nZXIgcmVxdWlyZXMgYSBmcmVzaGx5IGNoZWNrZWQgZmlsZXN5c3RlbSBiZWZvcmUKK3ByaW50aW5nIHRoZSBtaW5pbXVtIHJlc2l6ZSBzaXplLgorCitGaXhlZCBhIGZsb2F0aW5nIHBvaW50IHByZWNpc2lvbiBlcnJvciBpbiBhIGJpbmFyeSB0cmVlIHNlYXJjaCByb3V0aW5lCit0aGF0IGNhbiBsZWFkIHRvIHNlZyBmYXVsdCBpbiBlMmZzY2sgYW5kIHJlc2l6ZTJmcy4KKworRml4ZWQgYSBidWcgaW4gZTJmc2NrIHdoZXJlIGlmIGJvdGggdGhlIG9yaWdpbmFsIGFuZCBiYWNrdXAgc3VwZXJibG9jaworYXJlIGludmFsaWQgaW4gc29tZSB3YXksIGUyZnNjayB3aWxsIGZhaWwgZ29pbmcgYmFjayB0byB0aGUgb3JpZ2luYWwKK3N1cGVyYmxvY2sgYmVjYXVzZSBpdCBkaWRuJ3QgY2xvc2UgdGhlIGJhY2t1cCBzdXBlcmJsb2NrIGZpcnN0LCBhbmQKK3RoZSBleGNsdXNpdmUgb3BlbiBwcmV2ZW50ZWQgdGhlIGZpbGUgc3lzdGVtIGZyb20gYmVpbmcgcmVvcGVuZWQuCisKK0ZpeGVkIGEgYmlnIGluIGUyZnJlZWZyYWcgd2hpY2ggY2F1c2VkIGdldG9wdCBwYXJzaW5nIHRvIGZhaWwgb24KK2FyY2hpdGVjdHVyZXMgd2l0aCB1bnNpZ25lZCBjaGFycy4gIChBZGRyZXNzZXMgR2VudG9vIEJ1ZzogIzI5OTM4NikKKworQ2xhcmlmaWVkIGFuIG1rZTJmcyBlcnJvciBtZXNzYWdlIHNvIGEgbWlzc2VkIGNvbW1vbiBpbiBhbiAtRSBvcHRpb24KKyhpLmUuLCBta2UyZnMgLXQgZXh0NCAtRSBzdHJpZGU9MTI4IHN0cmlwZS13aWR0aD01MTIgL2Rldi9zZGExIikKK3Jlc3VsdHMgaW4gYSBtb3JlIHVuZGVyc3RhbmRhYmxlIGV4cGxhbmF0aW9uIHRvIHRoZSB1c2VyLgorCitNa2UyZnMgbm93IGRpc3BsYXlzIHRoZSBjb3JyZWN0IHZhbGlkIGlub2RlIHJhdGlvIHJhbmdlIHdoZW4KK2NvbXBsYWluaW5nIGFib3V0IGFuIGludmFsaWQgaW5vZGUgcmF0aW8gc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorCitNa2UyZnMgbm93IHVuZGVyc3RhbmRzIHRoZSBleHRlbmRlZCBvcHRpb24gImRpc2NhcmQiIGFuZCAibm9kaXNjYXJkIiwKK2FuZCB0aGUgb2xkZXIgb3B0aW9uIC1LIGlzIGRlcHJlY2F0ZWQuICBUaGUgZGVmYXVsdCBvZiB3aGV0aGVyCitkaXNjYXJkcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IGNhbiBiZSBjb250cm9sZWQgYnkgdGhlIG1rZTJmcy5jb25mCitmaWxlLgorCitNa2UyZnMncyBoYW5kbGluZyBvZiBsb2dpY2FsIGFuZCBwaHlzaWNhbCBzZWN0b3Igc2l6ZXMgaGFzIGJlZW4KK2ltcHJvdmVkIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCB0aGVyZSB3aWxsIGJlIHNvbWUgU1NEJ3Mgd2l0aCA4ayBhbmQKKzE2ayBwaHlzaWNhbCBzZWN0b3JzIGFycml2aW5nIHNvb24uICBNa2UyZnMgd2lsbCBubyBsb25nZXIgZm9yY2UgYmxvY2sKK3NpemUgdG8gYmUgdGhlIHBoeXNpY2FsIHNlY3RvciBzaXplLCBzaW5jZSB0aGVyZSB3aWxsIGJlIGRldmljZXMgd2hlcmUKK3RoZSBwaHlzaWNhbCBzZWN0b3Igc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgc3lzdGVtJ3MgcGFnZSBzaXplLCBhbmQKK2hlbmNlIGxhcmdlciB0aGFuIHRoZSBtYXhpbWFsIHN1cHBvcnRlZCBibG9jayBzaXplLiAgSW4gYWRkaXRpb24sIGlmCit0aGUgbWluaW1hbCBhbmQgb3B0aW1hbCBpbyBzaXplIGFyZSBub3QgZXhwb3J0ZWQgYnkgdGhlIGRldmljZSwgYW5kCit0aGUgcGh5c2ljYWwgc2VjdG9yIHNpemUgaXMgbGFyZ2VyIHRoYW4gdGhlIGJsb2NrIHNpemUsIHRoZSBwaHlzaWNhbAorc2VjdG9yIHNpemUgd2lsbCBiZSB1c2VkIHRvIHNldCB0aGUgUmFpZCBJL08gb3B0aW1pemF0aW9uIGhpbnRzIGluIHRoZQorc3VwZXJibG9jay4KKworRTJmc2NrIHdpbGwgbm93IGRpc3BsYXkgYSBiZXR0ZXIsIG1vcmUgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZQordXNlciBlbnRlcnMgYSB0eXBvJ2VkIGRldmljZSBuYW1lLCBpbnN0ZWFkIG9mIGJsYXRoZXJpbmcgb24gYWJvdXQKK2FsdGVybmF0ZSBzdXBlcmJsb2Nrcy4KKworRml4ZWQgdmFyaW91cyBEZWJpYW4gUGFja2FnaW5nIElzc3VlcworCitVcGRhdGVkL2NsYXJpZmllZCBtYW4gcGFnZXMgKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzU4MDIzNiwgIzU5NDAwNCwKKyM1ODkzNDUsICM1OTEwODM7IEFkZHJlc3NlcyBMYXVuY2hwYWQgQnVnOiAjNTA1NzE5KQorCitVcGRhdGUgdGhlIENoaW5lc2UsIENoemVjaCwgRHV0Y2gsIEZyZW5jaCwgR2VybWFueSwgSW5kb25lc2lhbiwKK1BvbGlzaCwgU3dlZGlzaCwgYW5kIFZpZXRuYW1lc2UgdHJhbnNsYXRpb25zLgorCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeCBhIGRlcGVuZGVuY3kgZGVmaW5pdGlvbiBmb3IgdGhlIHN0YXRpYyBhbmQgcHJvZmlsZWQgYmxraWQKK2xpYnJhcmllcyB3aGljaCBjb3VsZCBjYXVzZSBjb21waWxlIGZhaWx1cmVzIGluIHNvbWUgY29uZmlndXJhdGlvbnMuCisoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM2MDQ2MjkpCisgICAgCitBZGQgc3VwcG9ydCBmb3IgRGlyZWN0IEkvTyBpbiB0aGUgVW5peCBJL08gYWNjZXNzIGxheWVyLgorCitGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHRoZSBVbml4IEkvTyBsYXllciB3aGVuIGNoYW5naW5nIGJsb2NrIHNpemVzLgorCitGaXhlZCBtaW5vciBtZW1vcnkgbGVha3MgaW4gbWtlMmZzLgorCitBZGRlZCBhIG5ldyBmdW5jdGlvbiB0byB0aGUgZXh0MmZzIGxpYnJhcnksIGV4dDJmc19nZXRfbWVtYWxpZ24oKS4KKworVGhlIHRzdF9zdXBlcl9zaXplIHRlc3QgcHJvZ3JhbSB3aWxsIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3VwZXJibG9jaworZmllbGRzIGFyZSBjb3JyZWN0bHkgYWxpZ25lZCBhbmQgd2lsbCBwcmludCB0aGVtIG91dCBzbyB0aGV5IGNhbiBiZQorbWFudWFsbHkgY2hlY2tlZCBmb3IgY29ycmVjdG5lc3MuCisKK0ZpeGVkIHNvbWUgbWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvciB0ZXN0IHByb2dyYW1zIGluIGxpYi9leHQyZnMuCisKK1Jlc2VydmVkIHRoZSBmZWF0dXJlIGZsYWdzIGFuZCBzdXBlcmJsb2NrIGZpZWxkcyBuZWVkZWQgZm9yIHRoZSBOZXh0Mworc25hcHNob3QgZmVhdHVyZS4KKworUmVzZXJ2ZWQgdGhlIGZlYXR1cmUgZmxhZ3MgZm9yIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9ESVJEQVRBIGFuZAorRVhUNF9JTkNPTVBBVF9FQV9JTk9ERS4KKworCitFMmZzcHJvZ3MgMS40MS4xMiAoTWF5IDE3LCAyMDEwKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTWtlMmZzIG5vdyBnaXZlcyBhIGNvcnJlY3QgZXJyb3IgbWVzc2FnZSBpZiB0aGUgZXh0ZXJuYWwgam91cm5hbAorZGV2aWNlIGlzIG5vdCBmb3VuZC4gIChBZGRyZXNzZXMgUmVkIEhhdCBCdWcgIzU3MjkzNSkKKworUmVzaXplMmZzIC1QIHdpbGwgbm93IHJlZnVzZSB0byBwcmludCBhIG1pbmltdW0gc2l6ZSBpZiB0aGUgZmlsZQorc3lzdGVtIGlzIG5vdCBjbGVhbi4gIFByZXZpb3VzbHkgaXQgd291bGQgZ28gYWhlYWQgYW5kIHByaW50IGEgbWluaW11bQorc2l6ZSBhbnl3YXksIHdoaWNoIG1pZ2h0IG5vdCBiZSBjb3JyZWN0LCBsZWFkaW5nIHRvIHVzZXIgY29uZnVzaW9uLgorCitFMmZzY2sgbm93IHRlc3RzIGZvciBleHRlbnRzIHRoYXQgYmVnaW4gYXQgcGh5c2ljYWwgYmxvY2sgMCBhbmQKK3JlamVjdHMgdGhlbSBhcyBpbnZhbGlkLiAgKEFkZHJlc3NlcyBHb29nbGUgQnVnOiAjMjU3MzgwNikKKyAgICAKK0ZpeGVkIGEgYnVnIGluIGUyZnNjayB3aGljaCBjb3VsZCBjYXVzZSBpdCB0byBjcmFzaCB3aGVuIHRyeWluZyB0bworcmVtb3ZlIGFuIGludmFsaWQgZXh0ZW50IGFuZCB0aGUgYmxvY2sgYml0bWFwcyBoYWRuJ3QgeWV0IGJlZW4gbG9hZGVkLgorKEFkZHJlc3NlcyBTb3VyY2VGb3JnZSBCdWc6ICMyOTcxODAwKQorICAgIAorRTJmc2NrIG5vdyB3aWxsIGNvbXBsZXRlbHkgc2tpcCB0aW1lLWJhc2VkIGNoZWNrcyBpZiB0aGUgc3lzdGVtIGNsb2NrCitsb29rcyBpbnNhbmUgb3IgdGhlIG9wdGlvbiBicm9rZW5fc3lzdGVtX2Nsb2NrIGlzIHNldCBpbgorL2V0Yy9lMmZzY2suY29uZi4KKworRTJmc2NrIHdvdWxkIHByZXZpb3VzbHkgcmVwb3J0IGFuIGlfYmxvY2tzIGNvcnJ1cHRpb24gZm9yIGEgNFQgZmlsZQorY3JlYXRlZCB1c2luZyBwb3NpeF9mYWxsb2NhdGU7IHRoaXMgYnVnIGhhcyBiZWVuIGZpeGVkLgorCitFMmZzY2sgd2lsbCBub3cgY29ycmVjdGx5IG1hcmsgYSBzcGFyc2Ugam91cm5hbCBhcyBpbnZhbGlkIGFuZCB3aWxsCitkZWxldGUgYW5kIHJlY3JlYXRlIHRoZSBqb3VybmFsIHRvIGFkZHJlc3MgdGhlIHByb2JsZW0uCisKK0UyZnNjayB3b3VsZCBwcmV2aW91c2x5IGluY29ycmVjdGx5IGFzayB0aGUgdXNlciB3aGV0aGVyIHNoZSB3b3VsZAorbGlrZSB0byBhYm9ydCB0aGUgZmlsZSBzeXN0ZW0gY2hlY2sgYWZ0ZXIgZmluZGluZyBhIHByb2JsZW0gLS0tIGFuZAordGhlbiBhYm9ydCByZWdhcmRsZXNzIG9mIHRoZSB1c2VyJ3MgYW5zd2VyLiAgVGhpcyBpcyBhbm5veWluZywgYW5kCitoYXMgYmVlbiBmaXhlZC4KKworRTJmc2NrIGNhbiBub3cgY29udGludWUgZXZlbiBpZiBpdCBmYWlscyB0byByZWNyZWF0ZSB0aGUgcmVzaXplCitpbm9kZTsgcHJldmlvdXNseSBpdCB3b3VsZCBqdXN0IGFib3J0IHRoZSBmaWxlIHN5c3RlbSBjaGVjaworYWx0b2dldGhlci4KKworRTJmc2NrIGNvdWxkIHBvdGVudGlhbGx5IHJlbW92ZSBkaXJlY3RvcnkgZW50cmllcyBmb3IgaW5vZGVzIGZvdW5kIGluCit0aGUgdW51c2VkIHJlZ2lvbiBvZiB0aGUgaW5vZGUgdGFibGU7IHRoaXMgd291bGQgZ2VuZXJhbGx5IGhhcHBlbiBvbgorZXh0NCBmaWxlIHN5c3RlbXMgdGhhdCBkbyBub3QgdXNlIGpvdXJuYWxpbmcuICBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZAorYnkgbm90IGNsZWFyaW5nIHRoZXNlIGRpcmVjdG9yeSBlbnRyaWVzIG9uY2UgaXQgaGFzIGJlZW4gZXN0YWJsaXNoZWQKK3RoYXQgYmdfdW51c2VkX2lub2RlcyBtYXkgbm90IGJlIHRydXN0d29ydGh5OyBvbmNlIHBhc3MgIzIgaGFzIGJlZW4KK2NvbXBsZXRlZCwgZTJmc2NrIHdpbGwgcmVzdGFydCB0aGUgZmlsZSBzeXN0ZW0gY2hlY2sgZnJvbSB0aGUKK2JlZ2lubmluZywgYW5kIHRoZW4gaXQgd2lsbCBiZSBzYWZlIHRvIGRlbGV0ZSBhbnkgZGlyZWN0b3J5IGVudHJpZXMKK3BvaW50aW5nIHRvIGlub2RlcyB0aGF0IGFwcGVhciB0byBiZSBkZWxldGVkLiAgKEFkZHJlc3NlcyBHb29nbGUgQnVnOgorIzI2NDIxNjUpCisgICAgCitFMmZzY2sgd2lsbCBub3QgdHJ5IHRvIHNldCB0aGUgYmxvY2sgZ3JvdXAgY2hlY2tzdW1zIGlmIHRoZSB1c2VyCitjYW5jZWxzIHRoZSBmc2NrIHdpdGggYSBjb250cm9sLUMuICBJdCdzIGEgYmFkIGlkZWEgdG8gc2V0IHRoZQorY2hlY2tzdW1zIGlmIGUyZnNjayBoYXNuJ3QgYmVlbiBjb21wbGV0ZWQsIGFuZCBpdCBvZnRlbiByZXN1bHRzIGFuIHRoZQorZXJyb3IgbWVzc2FnZSwgIklub2RlIGJpdG1hcCBub3QgbG9hZGVkIHdoaWxlIHNldHRpbmcgYmxvY2sgZ3JvdXAKK2NoZWNrc3VtIGluZm8iLiAgKEFkZHJlc3NlcyBMYXVuY2hwYWQgQnVnOiAjNTgyMDM1KQorCitUaGUgbWtlMmZzIHByb2dyYW0gbm93IHF1ZXJpZXMgdGhlIGtlcm5lbCBmb3IgdGhlIHBoeXNpY2FsIGFzIHdlbGwgYXMKK3RoZSBsb2dpY2FsIHNlY3RvciBzaXplLCBhbmQgd2lsbCBub3QgYWxsb3cgYSBibG9ja3NpemUgYmVsb3cgdGhlCitsb2dpY2FsLCBhbmQgd2lsbCBzdHJvbmdseSBlbmNvdXJhZ2UgYSBibG9ja3NpemUgYXQgbGVhc3QgYXMgYmlnIGFzCit0aGUgcGh5c2ljYWwgYmxvY2tzaXplLiAgVGhpcyBpcyBuZWVkZWQgZm9yIDRrIHNlY3RvciBkcml2ZXMgdGhhdAorZW11bGF0ZSA1MTIgYnl0ZSBzZWN0b3Igc2l6ZXMuCisKK01rZTJmcyB3aWxsIG5vdyBhbGxvdyBhIGZsZXhfYmcgc2l6ZSBvZiAxLiAgVGhpcyBpcyB1bnVzdWFsLCBhbmQKK3JhcmVseSBuZWVkZWQsIGJ1dCBpdCBpcyBhIGxlZ2FsIHZhbHVlLgorCitFMmZzY2sgd2lsbCBjaGVjayBmb3IgY2FzZXMgd2hlcmUgdGhlIEVPRkJMT0NLU19GTCBpcyBzZXQgd2hlbiBpdCBpcworbm90IG5lZWRlZCwgYW5kIG9mZmVyIHRvIGNsZWFyIGl0OyB0aGlzIGlzIGEgc2lnbiBvZiBhIGtlcm5lbCBidWcsIGJ1dAorbW9yZSBpbXBvcnRhbnRseSwgc29tZSByZWxlYXNlZCBrZXJuZWxzIG1heSBjcmFzaCB3aGVuIHRoaXMgc2l0dWF0aW9uCitpcyBlbmNvdW50ZXJlZCBvbiBleHQ0IGZpbGUgc3lzdGVtcy4gIChBZGRyZXNzZXMgR29vZ2xlIEJ1ZzogIzI2MDQyMjQpCisgICAgCitFMmZzY2sgd2lsbCB1c2UgdGhlIEVPRkJMT0NLU19GTCBmbGFnIGV4Y2x1c2l2ZWx5IHRvIGNoZWNrIHdoZXRoZXIKK2lfc2l6ZSBpcyBjb3JyZWN0LiAgKEtlcm5lbHMgc3RhcnRpbmcgd2l0aCAyLjYuMzQgd2lsbCBzZXQKK0VPRkJMT0NLU19GTC4pCisKK1RoZSBjb21fZXJyIGxpYnJhcnkgd2lsbCBub3cgb25seSBvdXRwdXQgXk0gKGEgQ1IgY2hhcmFjdGVyKSB3aGVuIHRoZQordHR5IGlzIGluIHJhdyBtb2RlLgorCitVcGRhdGUgdGhlIEN6ZWNoLCBDaGluZXNlLCBEdXRjaCwgRnJlbmNoLCBHZXJtYW55LCBJbmRvbmVzaWFuLCBQb2xpc2gsCithbmQgVmlldG5hbWVzZSB0cmFuc2xhdGlvbnMuCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIHBhY2thZ2luZyBpc3N1ZXMgLS0tIHNlZSBkZWJpYW4vY2hhbmdlbG9nIGZvcgorZGV0YWlscy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6ICM1NzEyNDcsICM1NjM0ODcpCisKKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSBub3cgdXNlcyBpdHMgb3duIG1rZTJmcy5jb25mIGZpbGUsIHNvIHRoYXQKK2Rvd25zdHJlYW0gZGlzdHJpYnV0aW9ucyB3YW50IGNoYW5nZSB0aGUgbWtlMmZzLmNvbmYgZmlsZSB3aGljaCBpcworZGlzdHJpYnV0ZWQgaW4gdGhlIFJQTSBvciBkcGtnIGZpbGUsIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgc2NyZXdpbmcKK3VwIHRoZSByZWdyZXNzaW9uIHRlc3QgcmVzdWx0cy4KKworQWx3YXlzIGJ1aWxkIG5hbWVpLm8gc28gdGhhdCBidWlsZGluZyB3aXRoIGNvbmZpZ3VyZSAtLWRpc2FibGUtZGVidWdmcword29ya3MgY29ycmVjdGx5LiAgTG9uZy10ZXJtLCBpZiB3ZSBjYXJlIGFib3V0IHJlZHVjZWQgZTJmc3Byb2dzCitidWlsZHMsIHdlIG5lZWQgYSBtb3JlIGdlbmVyYWwgc29sdXRpb24gZm9yIGRlY2lkaW5nIHdoYXQgLm8gZmlsZXMgYXJlCituZWVkZWQgZm9yIGEgcGFydGljdWxhciBidWlsZC4gIEdpdmVuIHRoYXQgaW5zdGFsbCBmbG9wcGllcyBhcmUgZ29pbmcKKyhnb25lPykgdGhlIHdheSB0aGUgZG9kbyBiaXJkLCB3ZSBwcm9iYWJseSBkb24ndCBjYXJlLCB0aG91Z2guCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzI5MTE0MzMpCisKK0FkZCBjb25maWd1cmUgb3B0aW9ucyAtLWVuYWJsZS1zeW1saW5rLWJ1aWxkIGFuZAorLS1lbmFibGUtc3ltbGluay1pbnN0YWxsLCB3aGljaCBhbGxvdyBlMmZzcHJvZ3MgYmUgYnVpbHQgdXNpbmcKK3N5bWxpbmtzIGluc3RhZCBvZiBoYXJkIGxpbmtzLCBhbmQgdG8gYmUgaW5zdGFsbGVkIHVzaW5nIHN5bWxpbmtzCitpbnN0ZWFkIG9mIGhhcmQgbGlua3MsIHJlc3BlY3RpdmVseS4gIEl0IGlzIHVzZWZ1bCB3aGVuIHRoZSBmaWxlCitzeXN0ZW0gd2hlcmUgdGhlIGJ1aWxkIGlzIHRha2luZyBwbGFjZSwgb3IgdGhlIGZpbGUgc3lzdGVtIHdoZXJlCitlMmZzcHJvZ3MgaXMgaW5zdGFsbGVkLCBjYW4ndCBoYW5kbGUgaGFyZCBsaW5rcyBmb3Igc29tZSByZWFzb24uCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzE0MzYyOTQpCisKK0ZpeGVkIGNvbXBpbGUgd2FybmluZyBpbiBta2UyZnMuYy4KKworICAgIAorRTJmc3Byb2dzIDEuNDEuMTEgKE1hcmNoIDE0LCAyMDEwKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitFMmZzY2sgd2lsbCBubyBsb25nZXIgZ2l2ZSBhIGZhdGFsIGVycm9yIGFuZCBhYm9ydCBpZiB0aGUgcGh5c2ljYWwKK2RldmljZSBoYXMgYmVlbiByZXNpemVkIGJleW9uZCAyKiozMiBibG9ja3MuICAoQWRkcmVzc2VzIExhdW5jaHBhZAorQnVnOiAjNTIxNjQ4KQorCitEZWJ1Z2ZzIGhhcyBhIGJ1ZyBmaXhlZCBzbyB0aGF0ICJsb2dkdW1wIC1iIDxibGs+IiBub3cgcHJvcGVybHkgc2hvd3MKK3RoZSBhbGxvY2F0aW9uIHN0YXR1cyBvZiB0aGUgYmxvY2sgPGJsaz4uICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6CisjNTY0MDg0KQorICAgIAorRTJmc2NrIG5vdyBwcmludHMgYSBtdWNoIG1vcmUgZW1waGF0aWMgYW5kIGhvcGVmdWxseSBzY2FyeSBtZXNzYWdlCit3aGVuIGEgZmlsZSBzeXN0ZW0gaXMgZGV0ZWN0ZWQgYXMgbW91bnRlZCB3aGlsZSBkb2luZyBhIHJlYWQvd3JpdGUKK2NoZWNrIG9mIHRoZSBmaWxlc3lzdGVtLiAgSG9wZWZ1bGx5IHRoaXMgd2lsbCBkaXNzdWFkZSB1c2VycyBmcm9tCit0aGlua2luZywgInN1cmVseSB0aGF0IG1lc3NhZ2UgZG9lc24ndCBhcHBseSB0byAqbWUqIiA6LSgKKworRTJmc2NrIC1uIHdpbGwgbm93IGFsd2F5cyBvcGVuIHRoZSBmaWxlIHN5c3RlbSByZWFkLW9ubHkuICBXZSBub3cKK2Rpc2FsbG93IGNlcnRhaW4gY29tYmluYXRpb24gb2Ygb3B0aW9ucyB3aGljaCBwcmV2aW91c2x5IHdlcmUgbWFudWFsCitleGNlcHRpb25zOyB0aGlzIGlzIGJhZCBiZWNhdXNlIGl0IGNhdXNlcyB1c2VycyB0byB0aGluayB0aGV5IGFyZQorc21hcnRlciB0aGFuIHRoZXkgcmVhbGx5IGFyZS4gIFNvICItbiAtYyIsICItbiAtbCIsICItbiAtTCIsIGFuZCAiLW4KKy1EIiBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIChBZGRyZXNzZXMgTGF1bmNocGFkIEJ1ZzogIzUzNzQ4MykKKyAgICAKK0luIGUyZnNwcm9ncyAxLjQxLjEwLCBta2UyZnMgd291bGQgYXNrIGZvciBjb25maXJtYXRpb24gdG8gcHJvY2VlZCBpZgoraXQgZGV0ZWN0ZWQgYSBiYWRseSBhbGlnbmVkIHBhcnRpdGlvbi4gIFVuZm9ydHVuYXRlbHksIHRoaXMgYnJva2Ugc29tZQorZGlzdHJpYnV0aW9uIGluc3RhbGxhdGlvbiBzY3JpcHRzLCBzbyBpdCBub3cganVzdCBwcmludHMgdGhlIHdhcm5pbmcKK21lc3NhZ2UgYW5kIHByb2NlZWRzLiAgKEFkZHJlc3NlcyBSZWQgSGF0IEJ1ZzogIzU2OTAyMS4gQWRkcmVzc2VzCitMYXVuY2hwYWQgQnVnOiAjNTMwMDcxKQorICAgIAorTWtlMmZzIHdvdWxkIHRha2UgYSBsb25nIHRpbWUgdG8gY3JlYXRlIHZlcnkgbGFyZ2Ugam91cm5hbCBmaWxlcyBmb3IKK2V4dDQuICBUaGlzIHdhcyBjYXVzZWQgYnkgYSBidWcgaW4gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUyKCksIHdoaWNoIGlzCitub3cgZml4ZWQuCisKK0UyZnNjayBub3cgdW5kZXJzdGFuZHMgdGhlIEVPRkJMT0NLU19GTCBmbGFnIHdoaWNoIHdpbGwgYmUgdXNlZCBpbgorMi42LjM0IGtlcm5lbHMgdG8gbWFrZSBlMmZzY2sgbm90IGNvbXBsYWluIGFib3V0IGJsb2NrcyBkZWxpYmVyYXRlbHkKK2ZhbGxvY2F0ZWQoKSBiZXlvbmQgYW4gaW5vZGUncyBpX3NpemUuCisKK0UyZnNwcm9ncyAxLjQxLjEwIGludHJvZHVjZWQgYSByZWdyZXNzaW9uIChpbiBjb21taXQgYjcxZTAxOCkgd2hlcmUKK2UyZnNjayAtZkQgY2FuIGNvcnJ1cHQgbm9uLWluZGV4ZWQgZGlyZWN0b3JpZXMgd2hlbiBhcmUgZXhpc3RzIG9uZSBvcgorbW9yZSBmaWxlIG5hbWVzIHdoaWNoIGFscGhhYmV0aWNhbGx5IHNvcnQgYmVmb3JlICIuIi4gIFRoaXMgY2FuIGhhcHBlbgord2l0aCBleHQyIGZpbGVzeXN0ZW1zIG9yIGZvciBzbWFsbCBkaXJlY3RvcmllcyAodGFrZSBsZXNzIHRoYW4gYSBsb2NrKQord2hpY2ggY29udGFpbiBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgc3BhY2Ugb3Igc29tZSBvdGhlcgorcHVuY3R1YXRpb24gbWFyay4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzU3MzkyMywgQWRkcmVzc2VzIExhdW5jaHBhZAorQnVnOiAjNTI1MTE0KQorCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZCBuZXcgdGVzdCwgZl9yZWhhc2hfZGlyLCB3aGljaCBjaGVja3MgdG8gbWFrZSBzdXJlIGUyZnNjayAtRCB3b3JrcworY29ycmVjdGx5LgorCitUaGUgbGliY29tX2VyciBmdW5jdGlvbiBub3cgaGFzIHN1cHBvcnQgZm9yIEhlaW1kYWwncyBjb21fcmlnaHRfcgorZnVuY3Rpb24oKS4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMjk2Mzg2NSwgQWRkcmVzc2VzIERlYmlhbgorQnVnOiAjNTU4OTEwKQorCisKK0UyZnNwcm9ncyAxLjQxLjEwIChGZWJydWFyeSA3LCAyMDEwKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeCByZXNpemUyZnMgYnVnIHdoaWNoIGNhdXNlcyBpdCB0byBhY2Nlc3MgaW52YWxpZCBtZW1vcnkuCisKK0FkZCBsaWJzcyBzdXBwb3J0IGZvciBsaWJyZWFkbGluZS5zby42LgorICAgIAorRml4IGUyZnNjaydzIGNoZWNrIGZvciBleHRlbnQtbWFwcGVkIGRpcmVjdG9yeSB3aXRoIGFuIGluY29ycmVjdCBmaWxlCit0eXBlLgorCitBZGQgbmV3IGUyZnNjay5jb25mIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBkZWZhdWx0L2Jyb2tlbl9zeXN0ZW1fY2xvY2sKK3RvIHN1cHBvcnQgc3lzdGVtcyB3aXRoIGJyb2tlbiBDTU9TIGhhcmR3YXJlIGNsb2Nrcy4gIEFsc28sIHNpbmNlIHRvbworbWFueSBkaXN0cmlidXRpb25zIHNlZW0gdG8gaGF2ZSBicm9rZW4gdmlydHVhbGl6YXRpb24gc2NyaXB0cyBub3csCitlMmZzY2sgd2lsbCBieSBkZWZhdWx0IGFjY2VwdCBkYXRlcyB3aGljaCBhcmUgb2ZmIGJ5IHVwIHRvIDI0IGhvdXJzIGJ5CitkZWZhdWx0LiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzU1OTc3NiwgIzU1NzYzNikKKworRml4IGEgYnVnIHdoZXJlIG1rZTJmcyBtYXkgbm90IHVzZSB0aGUgYmVzdCBwbGFjZW1lbnQgb2YgdGhlIGlub2RlCit0YWJsZSB3aGVuIHRoZXJlIGlzIG9ubHkgcm9vbSBmb3IgYSBzaW5nbGUgYmxvY2sgZ3JvdXAgaW4gdGhlIGxhc3QKK2ZsZXhfYmcuCisKK0UyZnNjayBpcyBub3cgc21hcnRlciB3aGVuIGl0IG5lZWRzIHRvIGFsbG9jYXRlIGJsb2NrcyBpbiB0aGUgY291cnNlCitvZiBmaXhpbmcgZmlsZSBzeXN0ZW0gcHJvYmxlbXMuICBUaGlzIHJlZHVjZXMgdGhlIG51bWJlciBvZiBzcHVyaW91cworZGlmZmVyZW5jZXMgZm91bmQgaW4gcGFzcyAjNS4KKworRTJmc2NrIHdpbGwgbm8gbG9uZ2VyIHJlaGFzaCBkaXJlY3RvcmllcyB3aGljaCBmaXQgaW4gYSBzaW5nbGUKK2RpcmVjdG9yeSBibG9jay4KKworRTJmc2NrIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyBob2xlcyBpbiBleHRlbnQtbWFwcGVkIGRpcmVjdG9yaWVzIChpLmUuLAorc3BhcnNlIGRpcmVjdG9yaWVzIHdoaWNoIHVzZSBleHRlbnRzKS4KKworRml4IGJpZy1lbmRpYW4gcHJvYmxlbXMgd2l0aCBleHQyZnNfYm1hcCgpIGFuZCBleHQyZnNfYm1hcDIoKS4KKworRml4IGEgYnVnIGluIGZpbGVmcmFnIHdoZXJlIG9uIHBsYXRmb3JtcyB3aGljaCBjYW4gYWxsb3cgZmlsZSBzeXN0ZW1zCit3aXRoIDhrIGJsb2NrcywgdGhhdCBpdCBkb2Vzbid0IGNvcmUgZHVtcCB3aGVuIGl0IHNlZXMgYSBmaWxlIHN5c3RlbQord2l0aCA4ayBibG9jayBzaXplcy4gIChUaGFua3MgdG8gTWlrdWxhcyBQYXRvY2thIGZvciBwb2ludGluZyB0aGlzCitvdXQuKQorCitFMmZzY2sgd2lsbCBjb3JyZWN0bHkgZml4IGRpcmVjdG9yaWVzIHRoYXQgYXJlIGhhdmUgYW4gaW5hY2N1cmF0ZQoraV9zaXplIGFzIHdlbGwgYXMgb3RoZXIgcHJvYmxlbXMgaW4gYSBzaW5nbGUgcGFzcywgaW5zdGVhZCBvZgorcmVxdWlyaW5nIHR3byBlMmZzY2sgcnVucyBiZWZvcmUgdGhlIGZpbGUgc3lzdGVtIGlzIGZ1bGx5IGZpeGVkLgorCitGaXggZTJmc2NrIHNvIGl0IHdpbGwgY29ycmVjdGx5IGZpbmQgYW5kIGRldGVjdCBkdXBsaWNhdGUgZGlyZWN0b3J5CitlbnRyaWVzIGZvciBub24taW5kZXhlZCBkaXJlY3Rvcmllcy4gICggQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzoKKyMyODYyNTUxKQorICAgIAorTWtlMmZzIHdpbGwgdXNlIEJMS0RJU0NBUkQgdG8gcHJlLWRpc2NhcmQgYWxsIGJsb2NrcyBvbiBhbiBTU0Qgb3IKK3RoaW5seS1wcm92aXNpb25lZCBzdG9yYWdlIGRldmljZS4gIFRoaXMgY2FuIGJlIGRpc2FibGVkIHVzaW5nIHRoZSAtSworb3B0aW9uLgorCitFbmhhbmNlIGxpYmV4dDJmcyBzbyBpdCB3b3JrcyBhcm91bmQgYnVnIGluIExpbnV4IHZlcnNpb24gMi42LjE5CithbmQgZWFybGllciB3aGVyZSB0aGUgL3Byb2Mvc3dhcHMgZmlsZSB3YXMgbWlzc2luZyB0aGUgaGVhZGVyIG9uCit0aGUgZmlyc3QgbGluZS4KKworRml4IGJ1ZyBpbiBMaW51eCB2ZXJzaW9uIDIuNi4xOSBhbmQgZWFybGllciB3aGVyZSB0aGUgL3Byb2Mvc3dhcHMgZmlsZQord2FzIG1pc3NpbmcgdGhlIGhlYWRlciBvbiB0aGUgZmlyc3QgbGluZS4KKworRml4IHNvbWUgYmlnLWVuZGlhbiBidWdzIGluIGUyZnNjayBhbmQgbGliZXh0MmZzLgorCitGaXggcmVzaXplMmZzIHNvIGl0IHdvcmtzIGNvcnJlY3RseSBvbiBmaWxlIHN5c3RlbXMgd2l0aCBleHRlcm5hbAoram91cm5hbHMgaW5zdGVhZCBvZiBmYWlsaW5nIGVhcmx5IHdpdGggdGhlIGVycm9yICJJbGxlZ2FsIGlub2RlCitudW1iZXIiLgorCitGaXggbGlic3Mgc28gdGhhdCBpdCBkb2VzIG5vdCBzZWcgZmF1bHQgd2hlbiB1c2luZyBhIHJlYWRsaW5lIGxpYnJhcnkKK3doaWNoIGRvZXMgbm90IHN1cHBseSBhIHJlYWRsaW5lX3NodXRkb3duKCkgZnVuY3Rpb24uCisKK1VwZGF0ZWQgZHVtcGUyZnMncyB1c2FnZSBtZXNzYWdlIHNvIGl0IGNvcnJlY3RseSBnaXZlcyB0aGUgcmlnaHQKK2FyZ3VtZW50cyBzdW1tYXJ5IGZvciAiLW8gc3VwZXJibG9jaz08bnVtPiIgYW5kICItbyBibG9ja3NpemU9PG51bT4iLgorKEFkZHJlc3NlcyBMYXVuY2hwYWQgQnVnOiAjNDQ4MDk5KQorICAgCitUZWFjaCBsaWJleHQyZnMgdG8gaWdub3JlIHRoZSBoaWdoIDMyIGJpdHMgb2YgdGhlIGlfYmxvY2tzIGZpZWxkCit3aGVuIGh1Z2VfZmlsZSBmaWxlIHN5c3RlbSBmZWF0dXJlIGlzIHNldCwgYnV0IHRoZSBpbm9kZSBkb2VzIG5vdAoraGF2ZSB0aGUgSFVHRV9GSUxFX0ZMIGZsYWcgc2V0LgorCitGaXggZTJmc2NrJ3MgaGFuZGxpbmcgb2YgNjQtYml0IGlfYmxvY2tzIGZpZWxkcy4KKworRTJmc2NrIHdpbGwgbm93IHByaW50ICJJbGxlZ2FsIGluZGlyZWN0IGJsb2NrIiwgIklsbGVnYWwKK2RvdWJsZS1pbmRpcmVjdCBibG9jayIsIGV0Yy4sIGluc3RlYWQgb2YgIklsbGVnYWwgYmxvY2sgIy0xIiBvcgorIklsbGVnYWwgYmxvY2sgIy0yIiwgZXRjLiAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIHVzZXJzIHRvCit1bmRlcnN0YW5kIHdoYXQgaGFzIGdvbmUgd3JvbmcuICAoQWRkcmVzc2VzIFNvdXJjZUZvcmdlIEJ1ZzogIzI4NzE3ODIpCisKK01rZTJmcyBub3cgd2lsbCBvYnRhaW4gZ2V0IGRldmljZSB0b3BvbG9neSBpbmZvcm1hdGlvbiBmcm9tIGJsa2lkIGFuZAordXNlIGl0IHRvIHBvcHVsYXRlIHRoZSBzdXBlcmJsb2NrIHN0cmlkZSBhbmQgc3RyaXBlIHNpemVzLiAgSXQgd2lsbAorYWxzbyB3YXJuIGlmIHRoZSBibG9jayBkZXZpY2UgaXMgbWlzYWxpZ25lZAorCitGaXggZmlsZSBkZXNjcmlwdG9yIGxlYWtzIGluIGZzY2sgYW5kIGRlYnVnZnMuICAoQWRkcmVzc2VzIE5vdmVsbCBCdWc6CisjIzUyNDUyNikKKworRml4IHRoZSBsaWJleHQyZnMgbGlicmFyeSBjb2RlIHRvIHJvdW5kIHVwIHRoZSBiaXRtYXAgc2l6ZSB0byBhIDQtYnl0ZQorYm91bmRhcnksIHRvIHByZXZlbnQgc3B1cmlvdXMgc2VnIGZhdWx0cyBjYXVzZWQgYnkgdGhlIHg4NgorYXJjaGl0ZWN0dXJlLiAgVGhpcyBkb2Vzbid0IGFmZmVjdCBMaW51eCBzeXN0ZW1zLCBidXQgd2FzIGEgbWFqb3IKK3Byb2JsZW0gb24gYSBudW1iZXIgb2YgKkJTRCBzeXN0ZW1zLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6CisjMjMyODcwOCkKKworRml4IHJlc2l6ZTJmcydzIG1pbmltdW0gc2l6ZSByZXF1aXJlZCBmb3IgYSBmaWxlIHN5c3RlbSBzbyBpdCBkb2Vzbid0CitmYWlsIHdoZW4gInJlc2l6ZTJmcyAtTSIgaXMgcnVuLiAgKEFkZHJlc3NlcyBSZWRIYXQgQnVnemlsbGE6ICM1MTkxMzEpCisgICAgCitEdW1wZTJmcyBub3cgcHJpbnRzIHN1bW1hcnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbnRlbnRzIG9mIHRoZQoram91cm5hbC4KKyAgICAKK0F2b2lkIHByaW50aW5nIHNjYXJ5IGVycm9yIG1lc3NhZ2VzIHdoZW4gZTJmc2NrIHN0YXJ0cyBydW5uaW5nCitwcm9ibGVtcyBvbiBsb3ctbWVtb3J5IHN5c3RlbXMsIGFzIGl0IHRlbmRzIHRvIHBhbmljIGFuZCBtaXNsZWFkIHRoZQordXNlci4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzUwOTUyOSkKKworRml4IGJsa2lkJ3MgbW9kdWxlcy5kZXAgcGFyc2VyIHNvIGl0IGhhbmRsZXMgY29tcHJlc3NlZCAoLmtvLmd6KQorbW9kdWxlcyBmaWxlcy4gIChBZGRyZXNzIFJlZCBIYXQgQnVnOiAjNTE4NTcyKQorICAgIAorRml4IHR1bmUyZnMgc28gaXQgY2FuIGFkZCBhIGpvdXJuYWwgd2hlbiBhbiBleHRlbnQtZW5hYmxlZCBmaWxlIHN5c3RlbQoraXMgbW91bnRlZC4gIChBZGRyZXNzZXMgTGF1bmNocGFkIGJ1ZzogIzQxNjY0OCkKKworVXBkYXRlIEN6ZWNoLCBJbmRvbmVzaWFuLCBQb2xpc2ggYW5kIFZpZXRuYW1lc2UgdHJhbnNsYXRpb25zIChmcm9tIHRoZQorVHJhbnNsYXRpb24gUHJvamVjdCkuCisgICAgCitVcGRhdGUvY2xhcmlmeSBtYW4gcGFnZXMuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzI4MjIxODYpCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIHBhY2thZ2luZyBpc3N1ZXMgLS0tIHNlZSBkZWJpYW4vY2hhbmdlbG9nIGZvcgorZGV0YWlscy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6ICM1NDAxMTEpCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjb25maWd1cmUgc2NyaXB0IHN1cHBvcnRzIHRoZSAtLXdpdGgtY2MsIC0td2l0aC1jY29wdHMsIGFuZAorLS13aXRoLWxkb3B0cyBvcHRpb25zLiAgSW5zdGVhZCwgdGhlIG1vcmUgc3RhbmRhcmQgdXNlIG9mIENDPSwKK0NDRkxBR1M9LCBhbmQgTERGTEFHUz0gaW4gdGhlIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUgaXMgdXNlZCBpbnN0ZWFkLgorQWxzbywgLS13aXRoLWxkLCB3aGljaCBuZXZlciB3b3JrZWQsIHdhcyBhbHNvIHJlbW92ZWQuCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzI4NDMyNDgpCisKK1RoZSBpbi10cmVlIGhlYWRlciBmaWxlcyBhcmUgb25seSB1c2VkIGlmIHRoZSBpbi10cmVlIHV1aWQgb3IgYmxraWQKK2xpYnJhcmllcyBhcmUgdXNlZC4gIE90aGVyd2lzZSwgdXNlIHRoZSBzeXN0ZW0tcHJvdmlkZWQgdXVpZCBvciBibGtpZAoraGVhZGVyIGZpbGVzIGlmIHVzaW5nIHRoZSBzeXN0ZW0tcHJvdmlkZWQgbGlicmFyaWVzLgorCitGaXggc29tZSBidWlsZCBmYWlsdXJlcyBjYXVzZWQgYnkgLS1kaXNhYmxlLSogY29uZmlndXJlIG9wdGlvbnMuCisKK1dvcmsgYXJvdW5kIGEgYnVnIGluIGF1dG9jb25mIDIuNjQuCisKKworRTJmc3Byb2dzIDEuNDEuOSAoQXVndXN0IDIyLCAyMDA5KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXggYSBidWcgaW4gZTJmc2NrIHJvdXRpbmVzIGZvciByZWFsbG9jYXRpbmcgYW4gaW5vZGUgdGFibGUgd2hpY2gKK2NvdWxkIGNhdXNlIGl0IHRvIGxvb3AgZm9yZXZlciBvbiBhbiBleHQ0IGZpbGVzeXN0ZW0gd2l0aCB0aGUgRkxFWF9CRworZmlsZXN5c3RlbSBmZWF0dXJlIHdpdGggYSByZWxhdGl2ZWx5IHJhcmUgKGFuZCBzcGVjaWZpYykgZmlsZXN5c3RlbQorY29ycnVwdGlvbi4gIFRoaXMgZml4IGNhdXNlcyBlMmZzY2sgdG8gdHJ5IHRvIGZpbmQgc3BhY2UgZm9yIGEgbmV3Citwb3J0aW9uIG9mIHRoZSBpbm9kZSB0YWJsZSBpbiB0aGUgY29udGFpbmluZyBmbGV4X2JnLCBhbmQgaWYgdGhhdAorZmFpbHMsIHRoZSBuZXcgcG9ydGlvbiBvZiB0aGUgaW5vZGUgdGFibGUgd2lsbCBiZSBhbGxvY2F0ZWQgaW4gYW55CitmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgZmlsZXN5c3RlbS4KKworTWFrZSBlMmZzY2sgbGVzcyBhbm5veWluZyBieSBvbmx5IGFza2luZyBmb3IgcGVybWlzc2lvbiB0byByZWxvY2F0ZSBhCitibG9jayBncm91cCdzIGlub2RlIHRhYmxlIG9uY2UsIGluc3RlYWQgb2YgZm9yIGV2ZXJ5IG92ZXJsYXBwaW5nCitibG9jay4gIFNpbWlsYXJseSwgb25seSBhc2sgb25jZSB0byByZWNvbXB1dGUgdGhlIGJsb2NrIGdyb3VwCitjaGVja3N1bXMsIGluc3RlYWQgb2Ygb25jZSBmb3IgZWFjaCBjb3JydXB0ZWQgYmxvY2sgZ3JvdXAncyBjaGVja3N1bS4KKworRml4IGZpbGVmcmFnIHRvIGF2b2lkIHByaW50IHRoZSBleHRlbnQgaGVhZGVyIGlmIHRoZSBGSUVNQVAgaW9jdGwgaXMKK25vdCBwcmVzZW50LCBhbmQgaXQgbmVlZHMgdG8gZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBGSUJNQVAgaW9jdGwuCisKK0ZpeCBmaWxlZnJhZyB0byBjb3JyZWN0bHkgcHJpbnQgdGhlIG51bWJlciBvZiBleHRlbnRzIGZvciB6ZXJvLWxlbmd0aAorZmlsZXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM1NDAzNzYpCisKK0ZpbGVmcmFnIG5vdyBoYXMgYSAtQiBvcHRpb24gd2hpY2ggZm9yY2VzIHRoZSB1c2Ugb2YgdGhlIEZJQk1BUCBpb2N0bAordG8gbW9yZSBlYXNpbHkgZGVidWcgdGhlIEZJQk1BUCBjb2RlLgorCitGaXhlZCBmaWxlZnJhZyBmb3Igbm9uLWV4dGVudCBiYXNlZCBmaWxlcy4KKworQWRkIGEgbmV3IHByb2dyYW0sIGUyZnJlZWZyYWcsIHdoaWNoIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IHRoZQorZnJlZSBzcGFjZSBmcmFnbWVudGF0aW9uIGluIGFuIGV4dDIvMy80IGZpbGVzeXN0ZW0uCisKK0ZpeCBpbm9kZSByZXNpemluZyB2aWEgdHVuZTJmcyAtSSBzbyB0aGF0IGl0IHdvcmtzIGNvcnJlY3RseSBpbiB0aGUKK2ZhY2Ugb2Ygbm9uLWVtcHR5IGJhZCBibG9ja3MgaW5vZGVzLCBhbmQgaWYgdGhlIGZpbGVzeXN0ZW0gd2FzCitmb3JtYXR0ZWQgdXNpbmcgdGhlICJta2UyZnMgLUUgc3RyaWRlPU4iIG9wdGlvbiBmb3IgUkFJRCBhcnJheXMuCisKK0ZpeCByZWdyZXNzaW9uIGluIGV4dDJmc19leHRlbnRfc2V0X2JtYXAoKSBjYXVzZWQgZTJmc2NrIC1mRCB0byBmYWlsCithbmQgY29ycnVwdCBsYXJnZSBkaXJlY3RvcmllcyBpZiB0aGUgZGlyZWN0b3J5IG5lZWRzIHRvIHNocmluayBieSBtb3JlCit0aGFuIG9uZSBibG9jay4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzUzNzUxMCkKKyAgICAKK0ZpeCBlMmZzY2sncyBidWdneV9pbml0X3Njcml0cHM9MSBzbyB0aGF0IHRoZSBpZiB0aGUgbGFzdCB3cml0ZSBhbmQvb3IKK2xhc3QgbW91bnQgdGltZXMgYXJlIGluIHRoZSBmdXR1cmUsIHRoZXkgYXJlIGNvcnJlY3RlZCBldmVuIGlmCitidWdneV9pbml0X3NjcmlwdHMgaXMgc2V0LiAgVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBvdGhlcndpc2UgcmVzaXplMmZzCit3aWxsIHJlZnVzZSB0byByZXNpemUgdGhlIGZpbGVzeXN0ZW0sIGV2ZW4gYWZ0ZXIgcnVubmluZyAiZTJmc2NrIC1mIi4KKyhBZGRyZXNzZXMgTGF1bmNocGFkIGJ1ZzogIzM3MzQwOSkKKworRTJmc2NrIHdpbGwgbm93IHByaW50IG11Y2ggZnVsbGVyIGluZm9ybWF0aW9uIHdoZW4gdGhlIGxhc3QgbW91bnQgdGltZQorb3IgbGFzdCB3cml0dGVuIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZSwgc2luY2UgbW9zdCBwZW9wbGUgY2FuJ3Qgc2VlbSB0bworYmVsaWV2ZSB0aGVpciBkaXN0cmlidXRpb24gaGFzIGJ1Z2d5IGluaXQgc2NyaXB0cywgb3IgdGhleSBoYXZlIGEKK2ZhaWxlZCBDTU9TL1JUUyBjbG9jayBiYXR0ZXJ5LgorCitFbmhhbmNlIGR1bXBlMmZzIHRvIGR1bXAgdGhlIGV4dGVudCBpbmZvcm1hdGlvbiB2aWEgdGhlICdzdGF0JworY29tbWFuZCwgYW5kIG1vcmUgZGV0YWlsZWQgZXh0ZW50IGluZm9ybWF0aW9uIHZpYSB0aGUgbmV3IGNvbW1hbmQKKydkdW1wX2V4dGVudHMnLgorICAgIAorVXBkYXRlIEZyZW5jaCwgUG9saXNoLCBDemVjaCwgYW5kIFN3ZWVkaXNoIHRyYW5zbGF0aW9uIGZyb20gdGhlCitUcmFuc2xhdGlvbiBQcm9qZWN0LgorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeGVkIG1pc2NlbGxhbmVvdXMgZ2NjIC1XYWxsIHdhcm5pbmdzLgorCitGaXhlZCBtZW1vcnkgbGVhayBpbiBlcnJvciBwYXRoIGluIGV4dDJmc19ibG9ja19pdGVyYXRlMigpCisKK0ZpeGVkIG5vbi1MaW51eCBidWlsZCBvZiB0aGUgaW50bCBkaXJlY3RvcnkgYnkgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZQorRS9RL1YgbWFjcm9zLgorCitUaGUgYml0bWFwIHJlYWQvd3JpdGUgZnVuY3Rpb25zIG5vdyB0cmVhdCB1bmluaXRpYWxpemVkIGJpdG1hcHMgYXMKK3VuYWxsb2NhdGVkOyB0aGlzIGZpeGVzIGEgbnVtYmVyIG9mIHByb2JsZW1zIGluIGFsbCBlMmZzcHJvZ3MgZm9yIGV4dDQKK2ZpbGVzeXN0ZW1zIHdoZW4gdGhlcmUgaXMgYSBuZWVkIHRvIGFsbG9jYXRlIG5ldyBibG9ja3Mgb3IgaW5vZGVzLCBhbmQKK3RoZXJlIGFyZW4ndCBhbnkgZnJlZSBibG9ja3Mgb3IgaW5vZGVzIGluIHRoZSBhbHJlYWR5LXVzZWQgYmxvY2sKK2dyb3Vwcy4KKworSW1wcm92ZSBleHQyZnNfZXh0ZW50X3NldF9ibWFwKCkgdG8gYXZvaWQgY3JlYXRpbmcgbmV3IGV4dGVudHMgd2hpY2gKK2dldCBpbnNlcnRlZCBpbnRvIHRoZSBleHRlbnQgdHJlZSB3aGVuIHRoZXkgYXJlIG5vdCBuZWVkZWQuCisgICAgCisKK0UyZnNwcm9ncyAxLjQxLjggKEp1bHkgMTEsIDIwMDkpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXggcmVzaXplMmZzJ3Mgb25saW5lIHJlc2l6aW5nLCBmaXhpbmcgYSByZWdyZXNzaW9uIHdoaWNoIGluCitlMmZwc3JvZ3MgMS40MS43LiAgIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzUzNTQ1MikKKworRml4IHBvdGVudGlhbCBmaWxlc3lzdGVtIGNvcnJ1cHRpb25zIGNhdXNlZCBieSB1c2luZyByZXNpemUyZnMgdG8KK3Nocmlua2luZyBleHQ0IGZpbGVzeXN0ZW1zIHdpdGggZXh0ZW50cyBlbmFibGVkLiAgKEFkZHJlc3NlcyBSZWQgSGF0CitCdWc6ICM1MTAzNzkpCisKK09wdGltaXplIHV1aWRfZ2VuZXJhdGUoKSB0byBhdm9pZCBydW5uaW5nIHV1aWRkIGlmIGl0IGlzIG5vdCBzZXR1aWQgb3IKK3NldGdpZCBhbmQgdGhlIGN1cnJlbnRseSBydW5uaW5nIHByb2dyYW0gZG9lc24ndCBoYXZlIHdyaXRlIGFjY2VzcyB0bwordGhlIHV1aWRkIHdvcmsgZGlyZWN0b3J5LgorCitBZGQgc2FmZXR5IGNoZWNrcyAoZm9yIG5vbi1MaW51eCBzeXN0ZW1zKSBzbyB0aGF0IHV1aWRkIGlzbid0IHJ1biB3aXRoCitmaWxlIGRlc2NyaXB0b3JzIDAsIDEsIGFuZCAyIGNsb3NlZDsgYW5kIGlmIHRoZXkgYXJlIGNsb3NlZCwgdXVpZGQKK3dpbGwgYmUgY2FyZWZ1bCBub3QgdG8gY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBmb3IgaXRzIHVuaXggZG9tYWluCitzb2NrZXQgd2hlbiBpdCBkZXRhY2hlcyBpdHNlbGYgZnJvbSB0aGUgY29udHJvbGxpbmcgdHR5LiAgQWxzbyBhZGQKK3NhZmV0eSBjaGVja3Mgc28gdGhhdCBpZiB0aGUgdW5peCBkb21haW4gc29ja2V0IGJldHdlZW4gdGhlIHV1aWQKK2xpYnJhcnkgYW5kIHV1aWRkIHByb2dyYW0gaXMgY2xvc2VkIGZvciBhbnkgcmVhc29uLCBib3RoIHRoZSBsaWJyYXJ5CithbmQgdGhlIHV1aWRkIHdpbGwgcmV0dXJuIGFuIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBsb29waW5nCitpbiBhbiBpbmZpbml0ZSBsb29wLgorCitUaGUgZTJjcm9uY2hlY2sgc2NyaXB0LCB3aGljaCBjcmVhdGVzIGFuIExWTSBzbmFwc2hvdCBhbmQgdGhlbiBjaGVja3MKK3RoZSBleHQzLzQgZmlsZXN5c3RlbSB2aWEgdGhlIExWTSBzbmFwc2hvdCwgaGFzIGJlZW4gYWRkZWQgdG8gdGhlCitjb250cmliIGRpcmVjdG9yeS4KKworRml4IGZpbGVmcmFnIHByb2dyYW0gZm9yIGZpbGVzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gMTQ0IGV4dGVudHMuCisKK1VwZGF0ZSBGcmVuY2gsIFBvbGlzaCwgQ3plY2gsIEluZG9uc2lhbiwgYW5kIFN3ZWVkaXNoIHRyYW5zbGF0aW9uIGZyb20KK3RoZSBUcmFuc2xhdGlvbiBQcm9qZWN0LgorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzUzNTUzMCkKKworVXBkYXRlL2NsYXJpZnkgbWFuIHBhZ2VzLgorCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXggY29tcGlsYXRpb24gcHJvYmxlbSB3aGVuIGNvbmZpZ3VyZWQgd2l0aCAtLWRpc2FibGUtdXVpZC4KKworRG9uJ3QgYnVpbGQgdXVpZGdlbiBpZiBjb25maWd1cmVkIHdpdGggLS1kaXNhYmxlLXV1aWQuCisKK0FkZCB0aGUgbmV3IGxpYnJhcnkgZnVuY3Rpb24gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwX3JhbmdlKCksIGFuZAorb3B0aW1pemVkIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZSgpLCB3aGljaCB3aWxsIGJlIG5lZWRlZCBmb3IKK2Z1dHVyZSBvcHRpbWl6YXRpb25zIGZvciBlMmZzY2suCisKK0ZpeCBtYWtlZmlsZSBkZXBlbmRlbmNpZXMgZm9yIGxpYmNvbV9lcnIgc28gdGhhdCB0aGUgTWFrZWZpbGVzIHdvcmsKK3dlbGwgb24gbm9uLUdOVSBtYWtlIHByb2dyYW0uICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIFBhdGNoZXM6ICMyODEzODA5KQorCitFbmhhbmNlIHRoZSBidWlsZCBzeXN0ZW0gc28gdGhhdCB0aGUgZnVsbCBzZXQgb2YgY29tbWFuZHMgZXhlY3V0ZWQgYnkKK3RoZSBNYWtlZmlsZXMgYXJlIGRpc3BsYXllZCwgaW5zdGVhZCBvZiB0aGUgTGludXgga2VybmVsIHN1bW1hcnkKK291dHB1dCwgaWYgdGhlIGJ1aWxkIHdhcyBjb25maWd1cmVkIHdpdGggLS1lbmFibGUtdmVyYm9zZS1tYWtlY21kcywgb3IKK2lmIEdOVSBtYWtlIGlzIGluIHVzZSBhbmQgdGhlIFYgdmFyaWFibGUgaXMgbm9uLW51bGwsIGkuZS4sIHZpYSAibWFrZQorVj0xIi4KKworCitFMmZzcHJvZ3MgMS40MS43IChKdW5lIDI5LCAyMDA5KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IGEgYnVnIGluIGxpYmV4dDJmcyB3aGljaCBjYW4gY2F1c2UgZTJmc2NrIGFuZCByZXNpemUyZnMgdG8gd3JpdGUKK3VuaW5pdGFsaXplZCBkYXRhIGludG8gdGhlIHBvcnRpb24gb2YgdGhlIGlub2RlIGJleW9uZCB0aGUgZmlyc3QgMTI4CitieXRlcyB3aGVuIG9wZXJhdGluZyBvbiBpbm9kZXMgbWFwcGVkIHZpYSBleHRlbnRzOyBwb3RlbnRpYWxseQorY29ycnVwdGluZyBmaWxlc3lzdGVtcy4KKworRml4IG1lbW9yeSBsZWFrcyBpbiBlMmZzcHJvZ3MsIGluY2x1ZGluZyBhIHZlcnkgbGFyZ2UgbWVtb3J5IGxlYWsKK3doaWNoIGNhbiBjYXVzZSBlMmZzY2sgdG8gcnVuIG91dCBvZiBtZW1vcnkgd2hlbiBjaGVja2luZyB2ZXJ5IGxhcmdlCitmaWxlc3lzdGVtcyB1c2luZyBleHRlbnRzLgorCitUaGUgbG9nc2F2ZSBwcm9ncmFtIHdpbGwgbm93IGZpbHRlciBvdXQgdGhlIF5BIGFuZCBeQiBjaGFyYWN0ZXJzIHdoZW4KK3dyaXRpbmcgdG8gdGhlIGNvbnNvbGUuCisKK0hhcmRlbiBleHQyZnNfdmFsaWRhdGVfZW50cnkoKSBzbyB0aGF0IGxzZGVsIHdpbGwgbm90IHJlYWQgYmV5b25kIHRoZQorZW5kIG9mIHRoZSBibG9jayBldmVuIGlmIHRoZSBkaXJlY3RvcnkgYmxvY2sgaXMgY29ycnVwdGVkLgorCitGaXggZGVidWdmcyBmcm9tIGNvcmUgZHVtcGluZyBpZiB0aGUgbG9nZHVtcCBjb21tYW5kIGZhaWxzIHRvIG9wZW4gdGhlCitvdXRwdXQgZmlsZS4KKworRW5oYW5jZSBiYWRibG9ja3MgdG8gcHJpbnQgdGhlIGN1cnJlbnRseSB0ZXN0ZWQgYmxvY2sgbnVtYmVyIHdoZW4KK2ludGVycnVwdGVkIHdpdGggXkMuCisKK0ZpeCBsc2F0dHIgdG8gZXhpdCB3aXRoIGEgbm9uLXplcm8gc3RhdHVzIHdoZW4gaXQgZW5jb3VudGVycyBlcnJvcnMuCisoQWRkcmVzc2VzIFJlZEhhdCBCdWd6aWxsYSAjNDg5ODQxKQorCitGaXggZTJmc3Byb2dzIHRvIHVzZSB0aGUgc2FtZSBlbmNvZGluZyBmb3IgcmVjX2xlbiBpbiA2NGsgKGFuZCBsYXJnZXIpCitmaWxlc3lzdGVtcyBhcyB0aGUga2VybmVsIHdoZW4gZW5jb2RpbmcgcmVjX2xlbiA+PSA2NGsuICBGb3IgNjRrCitmaWxlc3lzdGVtcyAoY3VycmVudGx5IGFsbCB0aGF0IGlzIHN1cHBvcnRlZCBieSBlMmZzcHJvZ3MsIHRoaXMgaXMKK29ubHkgYSBtaW5vciBjb3JuZXIgY2FzZSkuCisKK1Jlc2l6ZTJmcyB3aWxsIG5vdyB1cGRhdGUgdGhlIGpvdXJuYWwgYmFja3VwIGZpbGVkcyBpbiB0aGUgc3VwMGVyYmxvY2sKK2lmIHRoZSBqb3VybmFsIGlzIG1vdmVkOyB0aGlzIGF2b2lkcyBhbiB1bm5lY2Vzc2FyeSBmdWxsIGZzY2sgYWZ0ZXIKK3Jlc2l6aW5nIHRoZSBmaWxlc3lzdGVtLiAgKEFkZHJlc3NlcyBSZWRIYXQgQnVnemlsbGE6ICM1MDUzMzkpCisgICAgCitGaXggbGliZXh0MmZzIHRvIHByb3Blcmx5IGluaXRpYWxpemUgaV9leHRyYV9zaXplIHdoZW4gY3JlYXRpbmcgdGhlCitqb3VybmFsIGFuZCByZXNpemUgaW5vZGVzLgorCitDaGFuZ2UgYmFkYmxvY2tzIHRvIGFsbG93IGJsb2NrIHNpemVzIGxhcmdlciB0aGFuIDRrLgorCitGaXggZmlsZWZyYWcgcHJvZ2FtIHNvIGl0IGNvcnJlY3RseSBjaGVja3MgZm9yIGVycm9ycyBmcm9tIHRoZSBmaWVtYXAgaW9jdGwuCisKK1VwZGF0ZSBDaGluZXNlIGFuZCBDemVjaCB0cmFuc2xhdGlvbiBmcm9tIHRoZSBUcmFuc2xhdGlvbiBQcm9qZWN0LgorCitDbGVhbiB1cCB2YXJpb3VzIG1hbiBwYWdlcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjNTMxMzg1IGFuZCAjNTIzMDYzKQorCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZCAtLWRpc2FibGUtbGlidXVpZCBvcHRpb24gdG8gY29uZmlndXJlIHdoaWNoIHVzZXMgYW4gaW4tc3lzdGVtCitpbnN0YWxsZWQgdmVyc2lvbiBvZiBsaWJ1dWlkOyB0aGUgcHJpdmF0ZSB2ZXJzaW9uIGlzIGVuYWJsZWQgYnkKK2RlZmF1bHQuCisKK0FkZCAtLXZhbGdyaW5kLWxlYWtjaGVjayBvcHRpb24gdG8gdGhlIHRlc3Rfc2NyaXB0IHByb2dyYW0gd2hpY2ggcnVucwordmFsZ3JpbmQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgb3B0aW9ucyB0byBmaW5kIG1lbW9yeSBsZWFrcy4KKworCitFMmZzcHJvZ3MgMS40MS42IChNYXkgMzAsIDIwMDkpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeCBhIGNyaXRpY2FsIHJlZ3Jlc3Npb24gaW4gZTJmc2NrIGludHJvZHVjZWQgdmVyc2lvbiAxLjQxLjUgd2hpY2gKK2NhbiB1bmRvIHVwZGF0ZXMgdG8gdGhlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIGFmdGVyIGEgam91cm5hbCByZXBsYXkuCisKK0lmIGUyZnNjayByZWNlaXZlcyBhbiBJL08gZXJyb3Igd2hpbGUgcmVwbGF5aW5nIHRoZSBqb3VybmFsLCBwcm9tcHQKK3RoZSB1c2VyIHdoZXRoZXIgdGhleSB3YW50IHRvIGlnbm9yZSB0aGUgZXJyb3Igb3Igbm90OyBpZiBlMmZzY2sgaXMKK3J1biBpbiBwcmVlbiBtb2RlLCBmb3JjZSBmc2NrIHRvIGFib3J0IHRoZSBwcmVlbiBwYXNzLgorCitGaXggYSBidWcgd2hpY2ggd291bGQgY2F1c2UgZTJmc2NrIHRvIGNvcmUgZHVtcCBpZiB0aGUgZmlsZXN5c3RlbQorY29udGFpbnMgYSBjb3JydXB0IGV4dGVudCBoZWFkZXIsIGFuZCB0aGUgdXNlciBkZWNsaW5lcyB0byBjbGVhciB0aGUKK2lub2RlLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMyNzkxNzk0KQorICAgIAorRml4IGUyZnNjayB0byByZXN0YXJ0IG9ubHkgb25jZSBpbiB0aGUgY2FzZSBvZiBtdWx0aXBsZSBibG9jayBncm91cHMKK3doaWNoIGlub2RlcyBpbiB1c2UgdGhhdCBhcmUgaW4gdGhlIHVuaW5pdGlhbGl6ZWQgcGFydCBvZiB0aGUgYmxvY2sKK2dyb3VwJ3MgaW5vZGUgdGFibGUuCisKK1RvIHJlZHVjZSB1c2VyIGNvbmZ1c2lvbiwgaWYgdGhlIC9ldGMvbXRhYiBmaWxlIGlzIG1pc3NpbmcKK2V4dDJmc19jaGVja19tb3VudF9wb2ludCBhbmQgZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQgd2lsbCByZXR1cm4gYQorbmV3LCBleHBsaWNpdCBlcnJvciBjb2RlIHRvIGluZGljYXRlIHRoaXMgY2FzZS4gIFRoaXMgd2lsbCBjYXVzZQorZTJmc2NrIHRvIGdpdmUgYSBjbGVhcmVyIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgdXNlciBpcyB1c2luZyBidWdneQorcmVzY3VlIENEJ3MgdGhhdCBkb24ndCBwcm9wZXJseSBzZXQgdXAgL2V0Yy9tdGFiLiAgKEFkZHJlc3NlcyBEZWJpYW4KK0J1ZzogIzUyNzg1OSkKKyAgICAKK0ZpeCBlMmZzY2sgc28gdGhhdCBpZiB0aGUgcHJpbWFyeSBncm91cCBkZXNjcmlwdG9ycyBhcmUgY29ycnVwdGVkLCBidXQKK3RoZSBiYWNrdXAgc3VwZXJibG9jayBpcyBlbnRpcmVseSBpbnZhbGlkLCB0byBnbyBiYWNrIHRvIHVzaW5nIChhbmQKK2ZpeGluZykgdGhlIHByaWFyeSBncm91cCBkZXNjcmlwdG9ycyBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZ2l2aW5nIHVwCitvbiB0aGUgZmlsZXN5c3RlbS4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzUxNjgyMCkKKyAgICAKK0NoYW5nZSBlMmZzY2sgdG8gbm90IGFib3J0IGEgcHJlZW4gcGFzcyBpZiBhbiBpbm9kZSBpcyBmb3VuZCB0byBoYXZlCitpX2ZpbGVfYWNsX2hpIG5vbi16ZXJvLiAgRXh0MyBmaWxlc3lzdGVtcyBkb24ndCBjYXJlLCBhbmQgbmV3ZXIKK2tlcm5lbHMgKHBvc3QgMi42LjI5KSB3aWxsIGlnbm9yZSB0aGlzIGZpZWxkLiAgU28gbGV0J3MgZml4IGl0CithdXRvbWF0aWNhbGx5IGR1cmluZyB0aGUgcHJlZW4gcGFzcyBpbnN0ZWFkIG9mIGZvcmNpbmcgdGhlIHVzZXIgdG8gZml4Cit0aGlzIHVwIG1hbnVhbGx5LiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNTI2NTI0KQorICAgIAorQWRkIHJlc291cmNlIHRyYWNraW5nIGZvciBlMmZzY2sgcGFzc2VzIDFiIHRocm91Z2ggMWQuCisKK1NwZWVkIHVwIGUyZnNjayBieSBlbGltaW5hdGluZyB1bm5lY2Vzc2FyeSBqb3VybmFsIGNoZWNrcyBpZiB0aGUKK2ZpbGVzeXN0ZW0gaXMgYWxyZWFkeSBtb3VudGVkIGFuZCBkb2Vzbid0IG5lZWQgcmVjb3ZlcnkgKHNpbmNlIHRoZQora2VybmVsIHdvdWxkIGhhdmUgcnVuIHRoZSBqb3VybmFsIHdoZW4gdGhlIGZpbGVzeXN0ZW0gd2FzIG1vdW50ZWQuKQorQWxzbyBzcGVlZCB1cCBlMmZzY2sgYnkgYXZvaWRpbmcgdW5uZWNlc3NhcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcgordXBkYXRlcyBpbiBleHQyZnNfY2xvc2UoKS4KKworQWRkIHN1cHBvcnQgdG8gY2hhdHRyIHRvIG1pZ3JhdGUgaW5vZGVzIGZyb20gdXNpbmcgZGlyZWN0L2luZGlyZWN0CitibG9ja3MgdG8gZXh0ZW50cy4KKworQXZvaWQgY29ycnVwdGluZyB0aGUgZmlsZXN5c3RlbSBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRvIHNocmluayBhCitmaWxlc3lzdGVtIHVzaW5nIHJlc2l6ZTJmcyBzbWFsbGVyIHRoYW4gcG9zaWJsZSBieSBtYWtpbmcKK2V4dDJmc19zZXRfYm1hcCgpIG1vcmUgY2FyZWZ1bCBub3QgdG8gZGVsZXRlIHRoZSBvbGQgYmxvY2sgdW50aWwgdGhlCituZXcgYmxvY2sgY2FuIGJlIGluc2VydGVkLiAgSW4gYWRkaXRpb24sIGZpeCBhIGJ1ZyBpbiBob3cgdGhlIG1pbmltdW0KK3NpemUgb2YgdGhlIGZpbGVzeXN0ZW0gKHBsdXMgYSBzYWZldHkgbWFyZ2luKSBpcyBjYWxjdWxhdGVkLCBhbmQKK21vZGlmeSByZXNpemUyZnMgdG8gcmVmdXNlIHRvIHNocmluayB0aGUgZmlsZXN5c3RlbSBiZWxvdyB0aGF0IG1pbmltdW0KK3NpemUgd2l0aG91dCB0aGUgZm9yY2UgZmxhZy4KKworVGVhY2ggYmxraWQgdG8gdHJ5IHRvIGZpZ3VyZSBvdXQgRE0gZGV2aWNlIG5hbWVzIHVzaW5nIHRha2UgYWR2YW50YWdlCitvZiBpbmZvcm1hdGlvbiBpbiBzeXNmcyB3aGVuIHJ1bm5pbmcgb24ga2VybmVscyAoMi42LjI5IGFuZCBsYXRlcikKK3doaWNoIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiAvc3lzL2Jsb2NrL2RtLTxOPi9kbS9uYW1lOyB0aGlzIGlzCittdWNoIGZhc3RlciB0aGFuIHNjYW5uaW5nIGZvciB0aGUgZGV2bmNpZSBudW1iZXIgaW4gL2Rldi9tYXBwZXIuCisKK0ZpeCBibGtpZCB0byBwcmVmZXIgL2Rldi9tYXBwZXIvPG5hbWU+IGRldmljZSBuYW1lcyBpbnN0YWQgb2YgdGhlCitwcml2YXRlIC9kZXYvZG0tWCBuYW1lcy4KKworQWRkIGFuIC1hIG9wdGlvbiB0byBkZWJ1Z2ZzJ3MgY2xvc2VfZmlsZXN5cyBjb21tYW5kIHdoaWNoIHdyaXRlcyBhbnkKK2NoYW5nZXMgdG8gdGhlIHN1cGVyYmxvY2sgb3IgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgdG8gYWxsIG9mIHRoZQorYmFja3VwIHN1cGVyYmxvY2sgbG9jYXRpb25zLgorICAgIAorQWRkIHN1cHBvcnQgdG8gdGhlIGZpbGVmcmFnIHByb2dyYW0gdG8gdXNlIHRoZSBGSUVNQVAgaW9jdGwuCisKK1VwZGF0ZSBDaGluZXNlIHRyYW5zbGF0aW9uIGZyb20gdGhlIFRyYW5zbGF0aW9uIFByb2plY3QuCisKK0NsZWFuIHVwIHZhcmlvdXMgbWFuIHBhZ2VzLiAgKEFkZHJlc3NlcyBSZWQgSGF0IEJ1Z3ppbGxhOiAjNTAyOTcxIGFuZAorTGF1bmNocGFkIEJ1ZzogIzM4MTg1NCkKKworRml4ZWQgdmFyaW91cyBEZWJpYW4gcGFja2FnaW5nIGlzc3VlcyAtLS0gc2VlIGRlYmlhbi9jaGFuZ2Vsb2cgZm9yCitkZXRhaWxzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnICM1MDYwNjQpCisKKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkIHRlc3QgY29kZSB0byBtYWtlIHN1cmUgZTJmc2NrJ3MgcHJvYmxlbS5jIGRvZXNuJ3QgaGF2ZSB0d28gcHJvYmxlbQorY29kZXMgYXNzaWduZWQgdG8gZHVwbGljYXRlIHZhbHVlcy4KKworQXZvaWQgdXNpbmcgYSBoYXJkLWNvZGVkIHBhdGggZm9yIC9iaW4vcm0gaW4gYmxvY2sncyB0ZXN0X3Byb2JlLmluLgorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMyNzgwMjA1KQorCitDbGVhbiB1cCBlMmZzY2sgYnkgcmVtb3ZpbmcgI2lmZGVmIFJFU09VUkNFX1RSQUNLIGJ5IGFkZGluZyBhbiBlbXB0eQorZnVuY3Rpb24gZGVjbGFyYXRpb24gZm9yIGluaXRfcmVzb3VyY2VfdHJhY2soKSBhbmQKK3ByaW50X3Jlc291cmNlX3RyYWNrKCkgd2hlbiBSRVNPVVJDRV9UUkFDSyBpcyBub3QgZGVmaW5lZC4KKworVGhlIHRlc3QgY29kZSB3aGljaCBpcyB1c2VkIHRvIGJ1aWxkIHRoZSB0c3RfY3N1bSBwcm9nYW0gaGFzIGJlZW4KK21vdmVkIGZyb20gZnJvbSB0c3RfY3N1bS5jIGludG8gY3N1bS5jIHVuZGVyIGFuICNpZmRlZiBERUJVRyB0byB0bworYXZvaWQgY29tcGlsZSBwcm9ibGVtcyBjYXVzZWQgYnkgbm90IGhhdmluZyBhIHByb3RvdHlwZSBmb3IKK2V4dDJmc19ncm91cF9kZXNjX2NzdW0oKS4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnICMyNDg0MzMxKQorCitVcGRhdGUgdGhlIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiBmaWxlIHRvIHRoZSBsYXRlc3QgZnJvbSB0aGUKK0ZTRiwgdG8gYWxsb3cgZTJmc3Byb2dzIHRvIGJ1aWxkIG9uIHRoZSBhdnIzMiBwbGF0Zm9ybS4gIChBZGRyZXNzZXMKK0RlYmlhbiBCdWc6ICM1MjgzMzApCisKK0FkZCBhIG5ldyBmdW5jdGlvbiwgZXh0MmZzX2V4dGVudF9vcGVuMigpLCB3aGljaCBiZWhhdmVzIGxpa2UKK3BleHQyZnNfZXh0ZW50X29wZW4oKSwgYnV0IHVzZXMgdGhlIHVzZXItc3VwcGxpZWQgaW5vZGUgc3RydWN0dXJlCit3aGVuIG9wZW5pbmcgYW4gZXh0ZW50IGluc3RlYWQgb2YgcmVhZGluZyB0aGUgaW5vZGUgZnJvbSBkaXNrLgorCisKK0UyZnNwcm9ncyAxLjQxLjUgKEFwcmlsIDIzLCAyMDA5KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeCBhIG51bWJlciBvZiBmaWxlc3lzdGVtIGNvcnJ1cHRpb24gYnVncyBpbiByZXNpemUyZnMgd2hlbiBncm93aW5nCitvciBzaHJpbmtpbmcgZXh0NCBmaWxlc3lzdGVtcyBvZmYtbGluZSAoaS5lLiwgd2hlbiB0aGUgZXh0NCBmaWxlc3lzdGVtCitpcyBub3QgbW91bnRlZCkuCisKK0RlYnVnZnMgY2FuIG5vdyBzZXQgaV9maWxlX2FjbF9oaWdoIHZpYSB0aGUgc2V0X2lub2Rlc19maWVsZCBjb21tYW5kLAorYW5kIHByaW50IGEgNjQtYml0IGZpbGUgYWNsLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBmaWxlc3lzdGVtCitjb3JydXB0aW9ucyB3aGVyZSB0aGUgaGlnaCBiaXRzIG9mIGlfZmlsZV9hY2xfaGlnaCBhcmUgc2V0LiAgRTJmc2NrCit3aWxsIGRldGVjdCBhbmQgZml4IG5vbi16ZXJvIGlfZmlsZV9hY2xfaGlnaCBvbiAzMi1iaXQgZmlsZXN5c3RlbXMKK3NpbmNlIHNvbWUgTGludXgga2VybmVsIHZlcnNpb25zIHBheSBhdHRlbnRpb24gdG8gdGhpcyBmaWVsZCBldmVuIHdoZW4KK3RoZXkgc2hvdWxkbid0LgorCitTcGVlZCB1cCBlMmZzY2sgd2hlbiBjaGVja2luZyBjbGVhbiBmaWxlc3lzdGVtcyBieSBhdm9pZGluZwordW5uZWNlc3NhcnkgYmxvY2sgcmVhZHMsIGFuZCBjb2FsZXNjaW5nIHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9yCitibG9ja3Mgc28gdGhleSBhcmUgcmVhZCB1c2luZyBhIHNpbmdsZSByZWFkIG9wZXJhdGlvbi4KKworVGhlIGxpYnV1aWQgbGlicmFyeSB3aWxsIG5vdyBjbG9zZSBhbGwgZmlsZSBkZXNjcmlwdG9ycyBiZWZvcmUgcnVubmluZwordXVpZGQuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aGVuIHRoZSBjYWxsaW5nIHByb2dyYW0gaGFzIG9wZW4gc29ja2V0cword2hpY2ggdGhlbiBuZXZlciBnZXQgY2xvc2VkIGJlY2F1c2UgdXVpZGQgaXMgYSBsb25nLXJ1bm5pbmcgaGVscGVyCitkYWVvbW4uICAoQWRkcmVzc2VzIExhdW5jaHBhZCBidWc6ICMzMDUwNTcpCisKK0luIG9yZGVyIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGZ1bGwgZmlsZXN5c3RlbSBjaGVja3MgYnkgZTJmc2NrIGFmdGVyCithbiBvbi1saW5lIHJlc2l6ZSwgZTJmc2NrIHdpbGwgaWdub3JlIHRoZSBORUVEU19SRUNPVkVSWSBmbGFnIHNldCBvbgordGhlIGJhY2t1cCBzdXBlcmJsb2Nrcy4gIChBZGRyZXNzZXMgUmVkIEhhdCBCdWd6aWxsYTogIzQ3MTkyNSkKKworTWtlMmZzIHdpbGwgYXZvaWQgdHJ5aW5nIHRvIGNyZWF0ZSB0aGUgam91cm5hbCB3aGVuIHJ1biBpbgorc3VwZXJibG9jay1vbmx5IG1vZGUgKG1rZTJmcyAtUyksIHNpbmNlIHRoZSBsZWZ0LW92ZXIgam91cm5hbCBpbiB0aGUKK2lub2RlIHRhYmxlIHdpbGwgY2F1c2UgbWtlMmZzIHRvIGZhaWwuCisKK0ZpeCBhIGJ1ZyBpbiBsaWJleHQyZnMgZnVuY3Rpb25zIHRoYXQgY2hlY2sgdG8gc2VlIGlmIGEgcGFydGljdWxhcgorZGV2aWNlIG9yIGZpbGVzeXN0ZW0gaW1hZ2UgaXMgbW91bnRlZCwgd2hpY2ggd291bGQgY2F1c2UgdGhlc2UKK2Z1bmN0aW9ucyB0byByZXBvcnQgdGhhdCBhIGZpbGUgaWRlbnRpY2FsIHRvIHRoZSAocmVsYXRpdmUpIHBhdGhuYW1lCit1c2VkIGJ5IGEgcHNldWRvLWZpbGVzeXN0ZW0gd2FzIG1vdW50ZWQgd2hlbiBpbiBmYWN0IGl0IHdhcyBub3QuCisKK1VwZGF0ZSBDemVjaCB0cmFuc2xhdGlvbiBmcm9tIHRoZSBUcmFuc2xhdGlvbiBQcm9qZWN0LgorCitBZGQgQ2hpbmVzZSAoc2ltcGxpZmllZCkgdHJhbnNsYXRpb24gZnJvbSB0aGUgVHJhbnNsYXRpb24gUHJvamVjdC4KKworRml4IHN1cHBvcnQgZm9yIGV4dGVybmFsIGpvdXJuYWxzICh3aGljaCB3YXMgYnJva2VuIGluIGUyZnNwcm9ncworMS40MS40KS4KKworRml4IGEgcmVncmVzc2lvbiBpbiBkZWJ1Z2ZzIHdoZXJlIHRoZSAic3RhdCIgY29tbWFuZCB3aGVuIG5vCitmaWxlc3lzdGVtIHdhcyBvcGVuIHdvdWxkIGNhdXNlIGRlYnVnZnMgdG8gY3Jhc2ggd2l0aCBhIHNlZ21lbnRhdGlvbgordmlvbGF0aW9uLgorCitTdGFydGluZyBpbiB0aGUgMi42LjI5IGxpbnV4IGtlcm5lbCwgdGhlIGV4dDQgZmlsZXN5c3RlbSBkcml2ZXIgY2FuIGJlCit1c2VkIHRvIHN1cHBvcnQgZmlsZXN5c3RlbXMgd2l0aG91dCBhIGpvdXJuYWwuICBVcGRhdGUgdGhlIGJsa2lkCitsaWJyYXJ5IHNvIGl0IHVuZGVyc3RhbmRzIHRoaXMuCisKK1RoZSBibGtpZCBsaWJyYXJ5IHdpbGwgcmVtb3ZlIGFuIGVudHJ5IGZyb20gdGhlIGJsa2lkIGNhY2hlCityZXByZXNlbnRpbmcgdGhlIGVudGlyZSBkaXNrIGlmIHBhcnRpdGlvbnMgYXJlIGZvdW5kLCBzaW5jZSBwcmVzdWFtYmx5Cit0aGUgZGV2aWNlIHByZXZpb3VzbHkgaGFkIG5vIHBhcnRpdGlvbiB0YWJsZSwgYnV0IGhhcyBub3cgdHJhbnNpdGlvbmVkCit0byB1c2luZyBhIHBhcnRpdGlvbiB0YWJsZS4KKworQWRkIGEgY2hlY2sgdG8gbWtlMmZzIGFuZCB0dW5lMmZzIHRoYXQgdGhlIGFyZ3VtZW50IHRvIHRoZSAtbSBvcHRpb24KKyh3aGljaCBzcGVjaWZpZXMgdGhlIHJlc2VydmVkIHJhdGlvKSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNTE3MDE1KQorCitBZGQgc3VwcG9ydCBmb3IgdHJhY2tpbmcgdGhlIG51bWJlciBraWxvYnl0ZXMgd3JpdHRlbiB0byB0aGUKK2ZpbGVzeXN0ZW0gdmlhIHRoZSBzdXBlcmJsb2NrIGZpZWxkIHNfa2J5dGVzX3dyaXR0ZW4uICBJdCB3aWxsIGJlCit1cGRhdGVkIGJ5IHRoZSBrZXJuZWwgYXMgd2VsbCBhcyBieSBlMmZzcHJvZ3MgcHJvZ3JhbXMgd2hpY2ggd3JpdGUgdG8KK3RoZSBmaWxlc3lzdGVtLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHRyYWNraW5nIHRoZSB3ZWFyIHRvIGZpbGVzeXN0ZW1zCitvbiBTb2xpZCBTc3RhdGUgRHJpdmVzLgorCitGaXggY29tcGF0aWJpbGl0eSBpc3N1ZSBpbiB0aGUgbGliZXh0MmZzIGluZm8gZmlsZSBhbmQgbWFrZWluZm8KK3ZlcnNpb24gNC4xMi4gIChBZGRyZXNzZXMgUmVkIEhhdCBCdWd6aWxsYTogIzQ4MTYyMCkKKworVXBkYXRlL2NsYXJpZnkgbWFuIHBhZ2VzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNTE1NjkzLCAjMzY1NjE5KQorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzUwNjI3OSkKKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworRml4IEh1cmQgY29tcGlsYXRpb24gcHJvYmxlbSBpbiBlMmZzY2sgYW5kIHR1bmUyZnMgKEFkZHJlc3NlcyBEZWJpYW4KK0J1ZzogIzUyMTYwMikKKworRml4IHZhcmlvdXMgZ2NjIGNvbXBpbGF0aW9uIHdhcm5pbmdzIGFuZCBvdGhlciBwcm9ncmFtbWluZyBjbGVhbnVwcy4KKyhBZGRyZXNzZXMgUmVkIEhhdCBCdWd6aWxsYTogIzQ4Njk5NykKKworQWRkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHRoZSBibGtpZCBjb21tYW5kIHN0YXRpY2FsbHkuCisKK0FkZCBzdXBwb3J0IGZvciBkaXNhYmxpbmcgdGhlIGJ1aWx0LWluIGJsa2lkIGxpYnJhcnkgaW4gZmF2b3Igb2YgYQorc3lzdGVtLWluc3RhbGxlZCBibGtpZCBpbXBsZW1lbnRhdGlvbiB2aWEgdGhlIGNvbmZpZ3VyZSBvcHRpb24KKy0tZGlzYWJsZS1saWJibGtpZC4KKworCitFMmZzcHJvZ3MgMS40MS40IChKYW51YXJ5IDI3LCAyMDA5KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZWQgYSBidWcgd2hpY2ggY291bGQgc29tZXRpbWVzIGNhdXNlIGJsa2lkIHRvIHJldHVybiBhbiBleGl0IHZhbHVlCitvZiB6ZXJvIGZvciBhIG5vbi1leGlzdGVudCBkZXZpY2UgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNTAyNTQxKQorCitCbGtpZCB3aWxsIG5vdyByZWNvZ25pemUgZXh0MyBmaWxlc3lzdGVtcyB0aGF0IGhhdmUgdGhlIHRlc3RfZnMgZmxhZworc2V0IGFzIGV4dDMgZmlsZXN5c3RlbXMuCisKK1RoZSBibGtpZCBsaWJyYXJ5IHdpbGwgbm93IHJlY29nbml6ZSBidHJmcyBmaWxlc3lzdGVtcyBhbmQgc3dhcAorZGV2aWNlcyBjdXJyZW50bHkgdXNlZCBieSB1c2VyLWxldmVsIHNvZnR3YXJlIHN1c3BlbmQuCisKK1R1bmUyZnMgbm93IHVwZGF0ZXMgdGhlIGJsb2NrIGdyb3VwIGNoZWNrc3VtcyB3aGVuIGNoYW5naW5nIHRoZSBVVUlECit0byBhdm9pZCBjYXVzaW5nIGUyZnNjayB0byBjb21wbGFpbiB2b2NpZmVyb3VzbHkgYXQgdGhlIG5leHQgcmVib290LgorCitUdW5lMmZzJ3MgaW5vZGUgc2l6ZSByZXNpemluZyBhbGdvcml0aG1zIGhhdmUgYmVlbiBmaXhlZCBzbyBpdCBpcyBub3QKK3Zhc3RseSBpbmVmZmljaWVudCBmb3IgbW9kZXJhdGUtdG8tbGFyZ2UgZmlsZXN5c3RlbXMsIGR1ZSB0byBzb21lCitPKG4qKjIpIGFuZCBPKG4qbSkgYWxnb3JpdGhtcyB0aGF0IGRpZG4ndCBzY2FsZSB3ZWxsIGF0IGFsbC4KKworRml4IHR1bmUyZnMncyBpbm9kZSByZXNpemluZyBhbGdvcml0aG0gc28gaXQgd2lsbCBub3QgY29ycnVwdAorZmlsZXN5c3RlbXMgbGFpZCBvdXQgZm9yIFJBSUQgZmlsZXN5c3RlbXM7IGluIGFkZGl0aW9uLCB0dW5lMmZzIHdpbGwKK3JlZnVzZSB0byBjaGFuZ2UgdGhlIGlub2RlIHNpemUgZm9yIGZpbGVzeXN0ZW1zIHRoYXQgaGF2ZSB0aGUgZmxleF9iZworZmVhdHVyZSBlbmFibGVkLiAgKFRoaXMgaXMgYSBsaW1pdGF0aW9uIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uCitvZiB0dW5lMmZzIC1JLikKKworRTJmc3Byb2dzIDEuNDEgYnJva2UgZGVidWdmcydzIGxvZ2R1bXAgY29tbWFuZCBmb3Igbm9ybWFsIGV4dDMvNAorZmlsZXN5c3RlbXMgd2l0aCAzMi1iaXQgYmxvY2sgbnVtYmVycywgd2hlbiB0aGUgaGVhZGVycyBmb3IgNjQtYml0CitibG9jayBudW1iZXJzIHdhcyBhZGRlZC4gIFRoaXMgcmVncmVzc2lvbiBoYXMgYmVlbiBmaXhlZC4KKworRGVidWdmcydzIG5jaGVjayBjb21tYW5kIGhhcyBiZWVuIGZpeGVkIHRvIGF2b2lkIHByaW50aW5nIGdhcmJhZ2UKK2NoYXJhY3RlcnMgYXQgdGhlIGVuZCBvZiBmaWxlIG5hbWVzLgorCitGaXggcmVzaXplMmZzIGZvciBleHQ0IGZpbGVzeXN0ZW1zLiAgU29tZSBibG9ja3MgdGhhdCB0aGF0IG5lZWQgbW92aW5nCit3aGVuIHNocmlua2luZyBmaWxlc3lzdGVtcyB3aXRoIHVuaW5pdF9iZyBmZWF0dXJlIHdvdWxkIG5vdCBiZSBtb3ZlZC4KK0luIGFkZGl0aW9uLCBibG9ja3MgYW5kIGlub2RlIHRhYmxlIGJsb2NrcyB3ZXJlIG5vdCBiZWluZyBjb3JyZWN0bHkKK2ZyZWVkIHdoZW4gc2hyaW5raW5nIGZpbGVzeXN0ZW1zIHdpdGggdGhlIGZsZXhfYmcgZmVhYmxlLCB3aGljaCBjYXVzZWQKK3Jlc2l6ZTJmcyAtTSB0byBmYWlsLiAgRmluYWxseSwgd2hlbiBibG9ja3MgYXJlIG1vdmVkLCBtYWtlIHN1cmUgdGhlCit1bmluaXRpYWxpemVkIGZsYWcgaW4gZXh0ZW50cyBpcyBwcmVzZXJ2ZWQuCisKK0ZpeCBidWcgd2hpY2ggY2F1c2VkIGR1bXBlMmZzIHRvIGFib3J0IHdpdGggYW4gZXJyb3IgaWYgcnVuIG9uIGEKK2ZpbGVzeXN0ZW0gdGhhdCBjb250YWluZWQgYW4gZXh0ZXJuYWwgam91cm5hbC4KKworU29tZSBkaXN0cmlidXRpb25zIHVzZWQgIm1rZTNmcyIgYXMgYW4gYWxpYXMgZm9yICJta2ZzLmV4dDMiOyBjaGVjaworZm9yIHRoaXMgaW4gYXJndlswXSB0byBwcm92aWRlIGJldHRlciBsZWdhY3kgc3VwcG9ydCBmb3IgdGhlc2UKK2Rpc3RyaWJ1dGlvbnMuICBUaGlzIGlzIGEgcHJhY3RpY2UgdGhhdCBzaG91bGQgTk9UIGJlIGNvbnRpbnVlZCwKK2hvd2V2ZXIuCisKK01rZTJmcyBub3cgaGFzIGEgbmV3IG9wdGlvbiAtVSwgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlCitVVUlEIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBuZXcgZmlsZXN5c3RlbS4KKworTWtlMmZzIHdpbGwgdHJlYXQgZGV2aWNlcyB0aGF0IGFyZSBleGFjdGx5IDE2VEIgYXMgaWYgdGhleSB3ZXJlIDE2VEIKK21pbnVzIG9uZSBibG9jay4gIFRoaXMgYWxsb3dzIHVzZXJzIHdobyBoYXZlIHJlYWQgdGhhdCBleHQzIHN1cHBvcnRzCit1cCB0byAxNlRCIGZpbGVzeXN0ZW1zIGFuZCB3aG8gY3JlYXRlIGEgMTZUQiBMVk0gdG8gbm90IGdldCBjb25mdXNlZCwKK3NpbmNlIHRoZSB0cnVlIGxpbWl0IGlzIHJlYWxseSAxNlRCIG1pbnVzIG9uZSBibG9jay4KKworRTJmc2NrIHdpbGwgbm8gbG9uZ2VyIGFib3J0IGFuIGZzY2sgcnVuIGlmIGJsb2NrIGdyb3VwIGhhcyBhbiBlcnJhbnQKK0lOT0RFX1VOSU5JVCBmbGFnLgorCitFMmZzY2sgbm93IGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBmcmFnbWVudGVkIGRpcmVjdG9yaWVzIGFuZCBmcmFnbWVudGVkCitmaWxlcyBpbiB2ZXJib3NlIG1vZGUgc3RhdGlzdGljcyBhbmQgaW4gdGhlIGZyYWdjaGVjayByZXBvcnQuCisKK0ZpeCBhIGJ1ZyBpbiBlMmZzY2sgd2hpY2ggY2FzdWVkIGl0IGRvdWJsZSBjb3VudCBub24tY29udGlndW91cworZXh0ZW50LWJhc2VkIGlub2Rlcy4KKworRTJmc2NrIHdpbGwgbGVhdmUgc29tZSBzbGFjayBzcGFjZSB3aGVuIHJlcGFja2luZyBkaXJlY3RvcmllcyB0byBhbGxvdworcm9vbSBmb3IgYSBmZXcgZGlyZWN0b3J5IGVudHJpZXMgdG8gYmUgYWRkZWQgd2l0aG91dCBjYXVzaW5nIGxlYWYKK25vZGVzIHRvIGJlIHNwbGl0IHJpZ2h0IGF3YXkuCisKK0ZpeCBhIGJ1ZyB3aGljaCBjYXVzZWQgZTJmc2NrIHRvIGNyYXNoIHdoZW4gaXQgY29tZXMgYWNyb3NzIGEKK2NvcnJ1cHRlZCBpbnRlcmlvciBub2RlIGluIGFuIGV4dGVudCB0cmVlIHdpdGggdGhlIGVycm9yIG1lc3NhZ2U6CisiRXJyb3IxOiBDb3JydXB0IGV4dGVudCBoZWFkZXIgb24gaW5vZGUgWFhYWFhYIgorCitFMmZzY2sgcHJvYmxlbSBkZXNjcmlwdGlvbnMgaW52b2x2aW5nIHRoZSBqb3VybmFsIGFyZSBubyBsb25nZXIKK3JlZmVycmVkIHRvIGFzICJleHQzIiBwcm9ibGVtcywgc2luY2UgZXh0NCBmaWxlc3lzdGVtcyBhbHNvIGhhdmUKK2pvdXJuYWxzLgorCitGaXggYSBsb25nLXN0YW5kaW5nIGJ1ZyBpbiBlMmZzY2sgd2hpY2ggd291bGQgY2F1c2UgaXQgdG8gY3Jhc2ggd2hlbgorcmVwbHlpbmcgam91cm5hbHMgZm9yIGZpbGVzeXN0ZW1zIHdpdGggYmxvY2sgc2l6ZXMgZ3JlYXRlciB0aGFuIDhrLgorCitVcGRhdGUgQ2F0YWxhbiB0cmFuc2xhdGlvbiBmcm9tIHRoZSBUcmFuc2xhdGlvbiBQcm9qZWN0LgorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6ICM1MDMwNTcsICM1MDIzMjMsICM1MTEyMDcpCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeCBidWlsZCBvZiBlMmZzY2sucHJvZmlsZWQsIGFuZCBhZGQgc3VwcG9ydCBmb3IgYnVpbGRpbmcgcHJvZmlsZWQKK2JpbmFyaWVzIGluIHRoZSBtaXNjIGRpcmVjdG9yeSBpZiBjb25maWd1cmVkIHdpdGggLS1lbmFibGUtcHJvZmlsZS4KKworVGhlIGV4dDJmc19vcGVuKCkgZnVuY3Rpb24gbm93IHBlcmZvcm1zIG1vcmUgc2FuaXR5IGNoZWNrcyBvbiB0aGUKK3N1cGVyYmxvY2sgdG8gYXZvaWQgcG90ZW50aWFsIGRpdmlkZSBieSB6ZXJvIGVycm9ycyBieSBvdGhlciBwYXJ0cyBvZgorbGlicmFyeS4KKworVGhlIGV4dDJmc19yZWFkX2lub2RlX2Z1bGwoKSBmdW5jdGlvbiBub3cgaGFzIGEgc2FmZXR5IGNoZWNrIHRvIGF2b2lkCithIHNlZ21lbnRhdGlvbiBmYXVsdCBvbiBjb3JydXB0ZWQgZmlsZXN5c3RlbXMuCisKK1RoZSBleHQyZnNfbmV3X2lub2RlKCkgZnVuY3Rpb24gbm93IGhhcyBhIHNhbml0eSBjaGVjayBzbyB0aGF0IGlmIHRoZQorc19maXJzdF9pbm9kZSBmaWVsZCBpbiB0aGUgc3VwZXJibG9jayBpcyBpbnNhbmUsIGl0IHdpbGwgcmV0dXJuCitFWFQyX0VUX0lOT0RFX0FMTE9DX0ZBSUwgaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gaW52YWxpZCBpbm9kZSBudW1iZXIuCisKK1RvIGF2b2lkIHNlZ21lbnRhdGlvbiBmYXVsdHMsIGV4dDJmc19ibG9ja19hbGxvY19zdGF0cygpIGFuZAorZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzKCkgbm93IHZhbGlkYXRlcyB0aGUgcGFzc2VkIGlub2RlIG9yIGJsb2NrCitudW1iZXIgdG8gYXZvaWQgb3ZlcnJ1bm5pbmcgYW4gYXJyYXkgYm91bmRhcnkuCisKK1ZhcmlvdXMgc2lnbmVkL3Vuc2lnbmVkIGVycm9ycyBmb3IgdmFyaWFibGVzIGNvbnRhaW5pbmcgYmxvY2sgbnVtYmVycworaGF2ZSBiZWVuIGZpeGVkLgorCitBY2NvbW9kYXRpb25zIGZvciBnY2MncyBzdHVwaWRpdHkgaW4gbm90IHJlYWxpemluZyB0aGF0IGNvbnN0YW50CitzdHJpbmdzIHRoYXQgZG8gbm90IGNvbnRhaW4gYSAnJScgY2hhcmFjdGVyIGFyZSBzYWZlIHRvIHVzZSBpbiBmb3JtYXQKK3N0cmluZ3MgaGF2ZSBiZWVuIG1hZGUgc28gdGhhdCBkaXN0cmlidXRpb25zIHRoYXQgd2FudCB0byBjb21waWxlCitlMmZzcHJvZ3Mgd2l0aCAtV2Vycm9yPWZvcm1hdC1zZWN1cml0eSBoYXZlIGFuIGVhc2llciB0aW1lIGRvaW5nIHNvLgorCitBZGRlZCBhIG5ldyA2NC1iaXQgZ2V0c2l6ZSBpbnRlcmZhY2UsIGV4dDJmc19nZXRfZGV2aWNlX3NpemUyKCkuCisKK0FkZGVkIHRoZSB1dGlsaXR5IG1ha2Utc3BhcnNlLmMgdG8gdGhlIGNvbnRyaWIgZGlyZWN0b3J5LgorCitUaGUgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUyKCkgZnVuY3Rpb24gbm93IHJlZmxlY3RzIGVycm9ycyBmcm9tCitleHQyZnNfZXh0ZW50X3NldF9ibWFwKCkgdG8gdGhlIGNhbGxlciwgaWYgdGhlIGNhbGxiYWNrIHRyaWVzIHRvCitjaGFuZ2UgYSBibG9jayBvbiBhbiBleHRlbnQtYmFzZWQgZmlsZSwgYW5kIGV4dDJmc19leHRlbnRfc2V0X2JtYXAoKQorZmFpbHMgZm9yIHNvbWUgcmVhc29uIChmb3IgZXhhbXBsZSwgdGhlcmUgaXNuJ3QgZW5vdWdoIGRpc2sgc3BhY2UgdG8KK3NwbGl0IGEgbm9kZSBhbmQgZXhwYW5kIHRoZSBleHRlbnQgdHJlZS4KKworVGhlIGV4dDJmc19ibG9ja19pdGVyYXRlMigpIGZ1bmN0aW9uIHdpbGwgcHJlc2VydmUgdGhlIHVuaW5pdCBmbGFnIGluCitleHRlbnRzIHdoZW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG1vZGlmaWVzIGEgYmxvY2sgaW4gYW4gZXh0ZW50LWJhc2VkCitmaWxlLgorCitFMmZzY2sgd2lsbCBub3cgZmxhZyBmaWxlc3lzdGVtcyB0aGF0IGhhdmUgYW4gaW5zYW5lIHNfZmlyc3RfaW5vIGZpZWxkCitpbiB0aGVpciBzdXBlcmJsb2NrLCBhbmQgYXR0ZW1wdCB0byB1c2UgYSBiYWNrdXAgc3VwZXJibG9jayB0byByZXBhaXIKK3RoZSBmaWxlc3lzdGVtLgorCisKK0UyZnNwcm9ncyAxLjQxLjMgKE9jdG9iZXIgMTIsIDIwMDgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitFMmZzY2sgaGFzIGJlZW4gZml4ZWQgc28gaXQgcHJpbnRzIHRoZSBjb3JyZWN0IGlub2RlIG51bWJlciBmb3IKK3Vpbml0X2JnIHJlbGF0ZWQgcHJvYmxlbXMuCisKK0UyZnNjayB3aWxsIG5vdyBvZmZlciB0byBjbGVhciB0aGUgdGVzdF9mcyBmbGFnIGlmIHRoZSBleHQ0IGZpbGVzeXN0ZW0KK2lzIGF2YWlsYWJsZSBvbiBsaW51eC4gIFRoaXMgY2FuIGJlIGRpc2FibGVkIHZpYSBhIGNvbmZpZ3VyYXRpb24KK29wdGlvbiBpbiAvZXRjL2UyZnNjay5jb25mLgorCitGaXggYSBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBsaWJibGtpZCB3aGVuIGNoZWNraW5nIHRvIHNlZSBpZiBhbiBleHQ0CitvciBleHQ0ZGV2IG1vZHVsZSBleGlzdHMuCisKK0ZpeCBhIGJ1ZyBpbiBlMmZzY2sgd2hlcmUgaW4gcHJlZW4gbW9kZSwgaWYgdGhlcmUgYXJlIGRpc2sgSS9PIGVycm9ycword2hpbGUgdHJ5aW5nIHRvIGNsb3NlIGEgZmlsZXN5c3RlbSBjYW4gbGVhZCB0byBpbmZpbml0ZSBsb29wcy4KKyhBZGRyZXNzZXMgUmVkIEhhdCBCdWd6aWxsYSAjNDY1Njc5KQorICAgIAorRml4IGEgYnVnIGluIHJlc2l6ZTJmcyB3aGVyZSBwYXNzaW5nIGluIGEgYm9ndXMgbmV3IHNpemUgb2YgMCBibG9ja3MKK3dpbGwgY2F1c2UgcmVzaXplMmZzIHRvIGRyb3AgaW50byBhbiBpbmZpbml0ZSBsb29wLiAgKEFkZHJlc3NlcyBSZWQKK0hhdCBCdWd6aWxsYTogIzQ2NTk4NCkKKyAgICAKK0FkZCBhIGNoZWNrIGluIHRoZSBVbml4IEkvTyBmdW5jdGlvbnMgaW4gbGliZXh0MmZzIHNvIHRoYXQgd2hlbiBhCitkZXZpY2UgaXMgb3BlbmVkIHJlYWQvd3JpdGUsIHJldHVybiBhbiBlcnJvciBpZiB0aGUgZGV2aWNlIGlzCityZWFkLW9ubHkgdXNpbmcgdGhlIEJMS1JPR0VUIGlvY3RsLgorCitGaXggZGVidWdmcydzIG5jaGVjayBjb21tYW5kIHNvIHRoYXQgaXQgcHJpbnRzIGFsbCBvZiB0aGUgbmFtZXMgb2YKK2hhcmRsaW5rcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisKK0ZpeCBhIGJ1ZyBpbiBsaWJibGtpZCBzbyBpdCBjb3JyZWN0bHkgZGV0ZWN0cyB3aGV0aGVyIHRoZSBleHQ0IGFuZAorZXh0NGRldiBmaWxlc3lzdGVtcyBhcmUgYXZhaWxhYmxlLCBzbyB0aGF0IHRoZSBleHQ0ZGV2LT5leHQ0CitmYWxsYmFjayBjb2RlIHdvcmtzIGNvcnJlY3RseS4KKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworRml4IGEgcGFyYWxsZWwgYnVpbGQgcHJvYmxlbSBieSBtYWtpbmcgc3VyZSB1dGlsL3N1YnN0IGlzIGJ1aWx0IGJlZm9yZQordHJ5aW5nIHRvIGJ1aWxkIHRoZSBsaWIvZXQgZGlyZWN0b3J5LiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6CisjMjE0MzI4MSkKKworVXBkYXRlZCAibWFrZSBkZXBlbmQiIGluZm9ybWF0aW9uIGZvciBjcmMxNi5vCisgICAgCisKK0UyZnNwcm9ncyAxLjQxLjIgKE9jdG9iZXIgMiwgMjAwOCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IGUyZnNjaydzIGF1dG9tYXRpYyBibG9ja3NpemUgZGV0ZWN0aW9uLiAgVGhpcyBmaXhlcyBhIHJlZ3Jlc3Npb24KK2Zyb20gZTJmc3Byb2dzIDEuNDAuNyB3aGljaCBjYXVzZWQgZTJmc2NrIHRvIGZhaWwgaWYgdGhlIHVzZXIKK3NwZWNpZmllcyBhIGJsb2NrIG51bWJlciB1c2luZyB0aGUgLWIgb3B0aW9uIGlmIHRoZSBibG9ja3NpemUgb3B0aW9uCitpc24ndCBhbHNvIHNwZWNpZmllZCB1c2luZyAtQi4gIFVuZm9ydHVuYXRlbHksIHVzZXJzIHZlcnkgY29tbW9ubHkKK2ludm9rZSBlMmZzY2sgdXNpbmcgImUyZnNjayAtYiAzMjc2OCAvZGV2L2hkWFhYIiB0byB1c2UgdGhlIGJhY2t1cAorc3VwZXJibG9jazsgaW4gZmFjayBlMmZzY2sgd2lsbCBvZnRlbiBzdWdnZXN0IHRoaXMga2luZCBvZiBjb21tYW5kCitsaW5lLiAgT29wcy4KKworRW5oYW5jZSB0aGUgZGVidWdmcydzICJuY2hlY2siIGNvbW1hbmQgc28gaXQgd2lsbCBwcmludCBhbGwgb2YgdGhlCitwYXRobmFtZXMgZm9yIHRoZSBzcGVjaWZpZWQgaW5vZGVzLiAgKFByZXZpb3VzbHksIGluIHNvbWUgY2FzZXMgbmNoZWNrCittaWdodCBub3QgcHJpbnQgYSBwYXRobmFtZSBmb3IgYW4gaW5vZGUgYXQgYWxsIGlmIHNvbWUgb2YgdGhlIG90aGVyCitpbm9kZXMgaGFkIG11bHRpcGxlIGhhcmQgbGlua3MuKQorCitFbmhhbmNlIGRlYnVnZnMncyAiaGFzaCIgY29tbWFuZCBzbyB0aGUgaGFzaCBzZWVkIGNhbiBiZSBzcGVjaWZpZWQgdmlhCithIGNvbW1hbmQtbGluZSBvcHRpb24uICBJbiBhZGRpdGlvbiwgYWxsb3cgdGhlIGhhc2ggYWxnb3JpdGhtIHRvIGJlCitzcGVjaWZpZWQgYnkgbmFtZSBpbnN0ZWFkIG9mIGp1c3QgYnkgbnVtYmVyLgorCitGaXggZTJmc2NrIHNvIHRoYXQgd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHByaW50IHRoZSB0cmFuc2xhdGlvbiBmaWxlJ3MKK2hlYWRlciB3aGVuIGFza2luZyB0aGUgdXNlciBhIGN1c3RvbSBxdWVzdGlvbiBzbyB0aGVyZSBpcyBubyBwcm9tcHQKK2RlZmluZWQgZm9yIGEgcGFydGljdWxhciBwcm9ibGVtIHJlY29yZC4gIEZvciBleGFtcGxlLCB0aGUgcXVlc3Rpb24KKyJSdW4gam91cm5hbCBhbnl3YXkiIHdpbGwgZ2V0IHRoZSBQTyBoZWFkZXIgdGFja2VkIG9uIGJlY2F1c2UgZTJmc2NrCitlcnJvbmVvdXNseSBwYXNzZWQgdGhlIG51bGwgc3RyaW5nIHRvIF8oKS4gIChBZGRyZXNzZXMgTGF1bmNocGFkIEJ1ZzoKKyMyNDY4OTIpCisKK0VuaGFuY2UgYmFkYmxvY2tzIHNvIHRoYXQgaXQgY2FuIHRlc3QgYSBub3JtYWwgZmlsZSB3aGljaCBpcyBncmVhdGVyCit0aGFuIDJHQi4KKworRW5oYW5jZSB0aGUgYmFkYmxvY2tzIGNvbW1hbmQgc28gdGhhdCBpdCBkaXNwbGF5cyB0aGUgdGltZSBhbmQKK3BlcmNlbnRhZ2UgY29tcGxldGUgd2hlbiBpbiB2ZXJib3NlIG1vZGUuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6CisjNDI5NzM5KQorCitGaXggYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgaW4gYSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGRlYnVnZnMncworbmNoZWNrIGZ1bmN0aW9uLgorCitGaXggYSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gcHJvYmxlbSBpZiBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzCitpbiByZXNpemUyZnMuCisKK0ZpeCB0aGUgdXNhZ2UgbWVzc2FnZSBmb3IgZGVidWdmcydzIGxvZ2R1bXAgY29tbWFuZCB0byBiZSBjb25zaXN0ZW50Cit3aXRoIGl0cyBtYW4gbWFucGFnZS4KKworVXBkYXRlIFBvbGlzaCwgRnJlbmNoLCBWaWV0bmFtZXNlLCBEdXRjaCwgSW5kb25lc2lhbiwgR2VybWFuLCBDemVjaCwKK2FuZCBTd2VlZGlzaCB0cmFuc2xhdGlvbiBmcm9tIHRoZSBUcmFuc2xhdGlvbiBQcm9qZWN0LgorCitBZGQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZpbGUgSS9PIGZ1bmN0aW9ucyB0byB0aGUgbGliZXh0MmZzLnRleGluZm8KK2ZpbGUuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0ODQ4NzcpCisgICAgCitVcGRhdGUgYW5kIGNsYXJpZmllZCB2YXJpb3VzIG1hbiBwYWdlcy4gIChBZGRyZXNzZXMgTGF1bmNocGFkIEJ1ZworIzI3NTI3MjsgQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNDk4MTAwLCAjNDk4MTAxLCAjNDk4MTAyLCAjNDk4MTAzKQorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQ5NzYxOSkKKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworRml4IGEgcG90ZW50aWFsIGZpbGUgZGVzY3JpcHRvciBsZWFjayBpbiBsaWJjb21fZXJyIGJ5IHNldHRpbmcgdGhlCitjbG9zZS1vbi1leGVjIGZsYWcgZm9yIGEgZmQgdXNlZCBmb3IgZGVidWdnaW5nLiAgKEFkZHJlc3NlcyBSZWQgSGF0CitCdWd6aWxsYSAjNDY0Njg5KQorCitGaXggYSBwb3RlbnRpYWwgcmFjZSBpbiBsaWJjb21fZXJyIGJ5IHVzaW5nIHNlbV9wb3N0L3NlbV9pbml0LiAgU3VTRQoraGFzIGJlZW4gY2FycnlpbmcgYSBwYXRjaCBmb3IgYSBsb25nIHRpbWUgdG8gcHJldmVudCBhIGxhcmdlbHkKK3RoZW9yZXRpY2FsIHJhY2UgY29uZGl0aW9uIGlmIGEgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb24gYWRkcyBhbmQKK3JlbW92ZXMgZXJyb3IgdGFibGVzIGluIG11bHRpcGxlIHRocmVhZHMuICBVbmZvcnR1bmF0ZWx5IFN1U0UncworYXBwcm9hY2ggYnJlYWtzIGNvbXBhdGliaWxpdHkgYnkgZm9yY2luZyBhcHBsaWNhdGlvbnMgdG8gbGluayBhbmQKK2NvbXBpbGUgd2l0aCB0aGUgLXB0aHJlYWQgb3B0aW9uOyB1c2luZyBwdGhyZWFkIG11dGV4ZXMgaGFzCitoaXN0b3JpY2FsbHkgYmVlbiBwcm9ibGVtYXRpYy4gIFdlIGZpeCB0aGlzIGJ5IHVzaW5nIHNlbV9wb3N0L3NlbV9pbml0CitpbnN0ZWFkLgorCitGaXggZTJmc3Byb2dzLWxpYnMgYnVpbGQgZmFpbHVyZSBkdWUgdG8gJ3N1YnMnIHRhcmdldC4gIChBZGRyZXNzZXMKK1NvdXJjZWZvcmdlIEJ1ZzogIzIwODc1MDIpCisKK0F2b2lkIGxpbmtpbmcgZTJpbml0cmRfaGVscGVyLCBkZWJ1Z2ZzLCBibGtpZCwgYW5kIGZzY2sgd2l0aCB1bm5lZWRlZAorbGlicmFyaWVzIHdoZW4gdXNpbmcgRUxGIHNoYXJlZCBsaWJyYXJpZXMuCisKK0ZpeCBFTEYgc2hhcmVkIGxpYnJhcnkgd2hlbiBidWlsZGluZyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3QgYWxyZWFkeQoraGF2ZSB0aGUgZTJmc3Byb2dzIHNoYXJlZCBsaWJyYXJpZXMgYWxyZWFkeSBpbnN0YWxsZWQuICAoQWRkcmVzc2VzCitTb3VyY2Vmb3JnZSBCdWc6ICMyMDg4NTM3KQorCitGaXggdGhlIHBrZy1jb25maWcgZmlsZXMgc28gdGhleSB3b3JrIGNvcnJlY3RseSB3aGVuIGxpbmtpbmcgd2l0aAorc3RhdGljIGxpYnJhcmllcyBhbmQgZml4IHRoZSBpbmNsdWRlIGRpcmVjdG9yeSBzbyBwcm9ncmFtcyBkb24ndCBoYXZlCit0byB1c2UgI2luY2x1ZGUgPGV4dDJmcy9leHQyZnMuaD4sIGJ1dCBjYW4gdXNlICNpbmNsdWRlIDxleHQyZnMuaD4KK2luc3RlYWQuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzIwODk1MzcpCisgICAgCitNYWtlIHN1cmUgZXh0MmZzX3N3YWI2NCgpIGlzIGNvbXBpbGVkIGZvciBhbGwgcGxhdGZvcm1zLCBhbmQgbm90IGp1c3QKK2ZvciB4ODYuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0OTc1MTUpCisgICAgCitSZW1vdmUgdGhlIHVudXNlZCBleHQyZnNfZmluZF97Zmlyc3QsZXh0fV9iaXRfc2V0KCkgZnVuY3Rpb25zIGZvciBhbGwKK25vbi14ODYgcGxhdGZvcm1zLiAgKFRoZXkgaGFkIGJlZW4gcmVtb3ZlZCBmb3IgeDg2IGVhcmxpZXIuKQorCitGaXggZGlldCBsaWJjIGNvbXBpbGF0aW9uIHN1cHBvcnQsIHdoaWNoIGhhZCBiaXRyb3R0ZWQgZHVlIHRvIGxhY2sgb2YKK1RMQy4gIEZpeGluZyB0aGlzIGltcHJvdmVzIGdlbmVyYWwgcG9ydGFiaWxpdHkuCisKK1doZW4gaW5zdGFsbGluZyB0aGUgbGluayBsaWJyYXJ5IHdoZW4gdXNpbmcgRUxGIHNoYXJlZCBsaWJyYXJpZXMsCithdm9pZCB1c2luZyBhYnNvbHV0ZSBwYXRobmFtZXMgaWYgdGhlIGxpbmsgbGlicmFyeSBhbmQgdGhlIHNoYXJlZAorbGlicmFyeSBhcmUgaW5zdGFsbGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UKK0J1ZzogIzE3ODI5MTMpCisKK0ZpeCBnZW4tdGFyYmFsbCBzbyBpdCB3aWxsIHdvcmsgZXZlbiBpZiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBoYXMKK2JlZW4gcmVuYW1lZCB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiAiZTJmc3Byb2dzIi4gIEFsc28gbWFrZQorZ2VuLXRhcmJhbGwgcHJpbnQgdGhlIHNpemUgb2YgdGhlIHJlc3VsdGluZyB0YXIuZ3ogZmlsZS4KKworCitFMmZzcHJvZ3MgMS40MS4xIChTZXB0ZW1iZXIgMSwgMjAwOCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNYW55IHBlb3BsZSBhcmUgZm9yZ2V0dGluZyB0byB1cGRhdGUgdGhlaXIgbWtlMmZzLmNvbmYgZmlsZSwgYW5kIHRoaXMKK2NhdXNlcyBleHQzLCBleHQ0LCBhbmQgZXh0NGRldiBmaWxlc3lzdGVtcyB3b24ndCBnZXQgY3JlYXRlZCB3aXRoIHRoZQorcHJvcGVyIGZlYXR1cmVzIGVuYWJsZWQuICBXZSBhZGRyZXNzIHRoaXMgaW4gdHdvIHdheXMuICBGaXJzdCwgbWtlMmZzCit3aWxsIGlzc3VlIGEgd2FybmluZyBpZiB0aGVyZSBpcyBub3QgZGVmaW5pdGlvbiBmb3IgYW4gZXh0MywgZXh0NCwgb3IKK2V4dDRkZXYgZmlsZXN5c3RlbSBhbmQgdGhlIHVzZXIgaXMgdHJ5aW5nIHRvIGNyZWF0ZSBzdWNoIGEgZmlsZXN5c3RlbQordHlwZS4gIFNlY29uZGx5LCB3aGVuIGluc3RhbGxpbmcgZnJvbSBhIHNvdXJjZSBidWlsZCwgIm1ha2UgaW5zdGFsbCIKK3dpbGwgcHJvdmlkZSBiYXNpYyBjb25maWd1cmF0aW9uIGZpbGUgaGFuZGxpbmcgZm9yIC9ldGMvbWtlMmZzLmNvbmYuCitJZiBpdCBleGlzdHMsIGFuZCBkb2VzIG5vdCBtZW50aW9uIGV4dDRkZXYsIGl0IHdpbGwgYmUgbW92ZWQgYXNpZGUgdG8KKy9ldGMvbWtlMmZzLmNvbmYuZTJmcHNyb2dzLW9sZCBhbmQgdGhlIG5ldyAvZXRjL21rZTJmcy5jb25mIGZpbGUgd2lsbAorYmUgaW5zdGFsbGVkLiAgSWYgdGhlIGV4aXN0aW5nIC9ldGMvbWtlMmZzLmNvbmYgZmlsZSBkb2VzIG1lbnRpb24KK2V4dDRkZXYsIHRoZW4gIm1ha2UgaW5zdGFsbCIgd2lsbCBpbnN0YWxsIG9mZmljaWFsIG1rZTJmcy5jb25mIGZpbGUgYXMKKy9ldGMvbWtlMmZzLmNvbmYuZTJmc3Byb2dzLW5ldyBhbmQgaXNzdWUgYSBtZXNzYWdlIHRvIHRoZSB1c2VyIHRoYXQKK3RoZXkgc2hvdWxkIGxvb2sgdG8gc2VlIGlmIGFueSBjaGFuZ2VzIG5lZWQgdG8gYmUgbWVyZ2VkLgorCitUaGUgbWtlMmZzIHByb2dyYW0gd2lsbCBub3cgY3JlYXRlIHRoZSBqb3VybmFsIGluIHRoZSBtaWRkbGUgb2YgdGhlCitmaWxlc3lzdGVtLCBzaW5jZSB0aGlzIG1pbmltaXplcyBzZWVrIHRpbWVzIG9uIGF2ZXJhZ2UgZm9yIGZzeW5jLWhlYXZ5Cit3b3JrbG9hZHMuICBJbiBhZGRpdGlvbiwgbWtlMmZzIHdpbGwgbm93IGNyZWF0ZSBqb3VybmFscyB1c2luZyBleHRlbnRzCitmb3IgZmlsZXN5c3RlbXMgdGhhdCBzdXBwb3J0IHRoZW0uICBUaGlzIHJlc3VsdHMgaW4gYSBtb3JlIGVmZmljaWVudAorZW5jb2RpbmcgZm9yIHRoZSBqb3VybmFsIHNpbmNlIGl0IGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIHVzaW5nCitpbmRpcmVjdCBibG9ja3MuCisKK1RoZSBta2UyZnMgcHJvZ3JhbSB3aWxsIGF2b2lkIGFsbG9jYXRpbmcgYW4gZXh0cmEgYmxvY2sgdG8gdGhlCitqb3VybmFsLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMxNDgzNzkxKQorCitNa2UyZnMgd2lsbCBjb3JyZWN0bHkgZW5mb3JjZSB0aGUgcHJvaGliaXRpb24gYWdhaW5zdCBmZWF0dXJlcworKHNwZWNpZmljYWxseSByZWFkLW9ubHkgZmVhdHVyZXMpIGluIHJldmlzaW9uIDAgZmlsZXN5c3RlbXMuICAoVGhhbmtzCit0byBCZW5ubyBTY2h1bGVuYmVyZyBmb3Igbm90aWNpbmcgdGhpcyBwcm9ibGVtLikKKworTWtlMmZzIHByZXZpb3VzbHkgd291bGQgb2NjYXNpb25hbHkgY3JlYXRlIHNvbWUgc2xpZ2h0bHkgbm9uLW9wdGltYWxseQorcGxhY2VkIGlub2RlIHRhYmxlczsgdGhpcyBidWcgaGFzIGJlZW4gZml4ZWQuCisKK1RoZSBta2UyZnMgYW5kIHR1bmUyZnMgcHJvZ3JhbXMgbm93IHByaW50IHRoZSBjb3JyZWN0IHVzYWdlIG1lc3NhZ2UKK2Rlc2NyaWJpbmcgdGhlIG1heGltdW0gam91cm5hbCBzaXplLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDkxNjIwKQorCitBZGQgc3VwcG9ydCBmb3Igc2V0dGluZyB0aGUgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSB1c2VkIGluIGItdHJlZQorZGlyZWN0b3JpZXMgaW4gdHVuZTJmcyAoZnJvbSBhIGNvbW1hbmQtbGluZSBvcHRpb24pIG9yIG1rZTJmcyAodmlhCitta2UyZnMuY29uZikuICBJbiBhZGRpdGlvbiwgY2hhbmdlIHRoZSBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHRvCitoYWxmX21kNCwgc2luY2UgaXQgaXMgZmFzdGVyIGFuZCBiZXR0ZXIuCisKK1RoZSBibGtpZCBsaWJyYXJ5IHdpbGwgbm93IHJlY29nbml6ZSBNYWNPUyBoZnN4IGZpbGVzeXN0ZW1zLCBhbmQKK2NvcnJlY3RseSBleHRyYWN0IHRoZSBsYWJlbCBhbmQgdXVpZCBmb3IgaGZzLCBoZnN4LCBhbmQgaGZzcGx1cworZmlsZXN5c3RlbXMuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEZlYXR1cmUgUmVxdWVzdHM6ICMyMDYwMjkyKQorCitUaGUgYmxraWQgbGlicmFyeSBoYXMgaW1wcm92ZWQgZGV0ZWN0aW9uIG9mIEpGUyBhbmQgSFBGUyBmaWxlc3lzdGVtcy4KKyhBZGRyZXNzZXMgTGF1bmNocGFkIEJ1ZzogIzI1NTI1NSkKKworVGhlIGJsa2lkIGxpYnJhcnkgaXMgbm93IG11Y2ggbW9yZSBlZmZpY2llbnRseSBoYW5kbGluZyBkZXZpY2VtYXBwZXIKK2RldmljZXMsIG1haW5seSBieSBubyBsb25nZXIgdXNpbmcgdGhlIGRldmljZW1hcHBlciBsaWJyYXJ5LiAgVGhpcyBjYW4KK3NwZWVkIHVwIGFjY2VzcyBmb3Igc3lzdGVtcyB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIGRldmljZSBtYXBwZXIKK2RldmljZXMuCisKK0Jsa2lkIGhhZCBhIG51bWJlciBvZiBjYWNoZSB2YWxpZGF0aW9uIGJ1Z3MgaW4gbGliYmxraWQgdGhhdCBoYXZlIGJlZW4KK2ZpeGVkLiAgIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQ5MzIxNikKKworUmVzaXplMmZzIHdpbGwgbm93IHByb3Blcmx5IGNsb3NlIG91dCB0aGUgInVwZGF0aW5nIGlub2RlIHJlZmVyZW5jZXMiCitwcm9ncmVzcyBiYXIgc28gdGhlcmUgaXMgYSBuZXdsaW5lIHByaW50ZWQgYmVmb3JlIHByaW50aW5nIHRoZSBmaW5hbAorInJlc2l6ZSBpcyBzdWNjZXNzZnVsIiBtZXNzYWdlLgorCitSZXNpemUyZnMgd2lsbCBub3cgY29ycmVjdGx5IGhhbmRsZSBmaWxlc3lzdGVtcyB3aXRoIGV4dGVudHMgYW5kL28KK3VuaW5pdGlhbGl6ZWQgYmxvY2sgZ3JvdXBzIGNvcnJlY3RseSB3aGVuIGZpbGUvZGlyZWN0b3J5IGJsb2NrcyBuZWVkCit0byByZWxvY2F0ZWQgKGkuZS4sIHdoZW4gc2hyaW5raW5nIGEgZmlsZXN5c3RlbSBvciBpZiB0aGUgcmVzaXplX2lub2RlCitpcyBub3QgcHJlc2VudCkuICBUbyBzdXBwb3J0IHRoaXMsIHRoZSBleHQyZnMgbGlicmFyeSBub3cgc3VwcG9ydHMKK2luaXRpYWxpemluZyBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcyB0aGF0IGFyZSBub3QgeWV0IGluaXRpYWxpemVkIHdoZW4KK2FsbG9jYXRpbmcgdGhlbSB1c2luZyBleHQyZnNfbmV3X2Jsb2NrKCkgYW5kIGV4dDJmc19uZXdfaW5vZGUoKS4gIEluCithZGRpdGlvbiwgZTJmc19ibG9ja19pdGVyYXRlMigpIGNhbiBub3cgc3VwcG9ydCBjaGFuZ2luZyB0aGUgbG9jYXRpb24KK29mIGludGVyaW9yIG5vZGVzIG9mIGFuIGV4dGVudCB0cmVlLCBhbmQgZXh0MmZzX2V4dGVudF9zZXRfYm1hcCgpIGhhcworYmVlbiBvcHRpbWl6ZWQgdG8gYXZvaWQgY3JlYXRpbmcgdW5uZWNlc3NhcnkgbmV3IGV4dGVudHMgd2hlbiB1cGRhdGluZwordGhlIGxvY2F0aW9uIG9mIGJsb2NrcyBpbiB0aGUgZXh0ZW50IHRyZWUuICBUaGlzIHdpbGwgYWxzbyBoZWxwIG91dAorZTJmc2NrJ3MgcmVjb3Zlcnkgb2Ygb2JzY3VyZWx5IGNvcnJ1cHRlZCBmaWxlc3lzdGVtcyB3aXRoIGV4dGVudHMsCit3aGVuIGJsb2NrcyBhcmUgY2xhaW1lZCBieSBtdWx0aXBsZSBpbm9kZXMuCisKK0FkZCBzdXBwb3J0IGZvciBvbi1saW5lIHJlc2l6aW5nIGV4dDQgZmlsZXN5c3RlbSB3aXRoIHRoZSBmbGV4X2JnCitmaWxlc3lzdGVtIGZlYXR1cmUuICBUaGUgbWV0aG9kIGZvciBkb2luZyBzbyBpcyBub3Qgb3B0aW1hbCwgYnV0IHRvIGRvCithIGJldHRlciBqb2Igd2lsbCByZXF1aXJlIGtlcm5lbCBzdXBwb3J0LgorCitFMmZzcHJvZ3MgMS40MS4wIGludHJkdWNlZCBhIGJ1ZyBpbiBsaWJleHQyZnMgd2hpY2ggY2FzdWVkIGUyaW1hZ2UgYW5kCitkZWJ1Z2ZzIHByb2dyYW1zIHRvIG5vdCBiZSBhYmxlIHRvIHJlYWQgZTJpbWFnZSBmaWxlczsgdGhlIHNpZ25lZAordnMuIHVuc2lnbmVkIGJ1ZyBpbiB0aGUgY29kZSB3aGljaCByZWFkIGJpdG1hcHMgZnJvbSB0aGUgZTJpbWFnZSBoYXMKK2JlZW4gZml4ZWQuICAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDk1ODMwKQorCitSZXNpemUyZnMgaXMgbm93IGNvcnJlY3RseSBtYW5hZ2luZyB0aGUgZGlyZWN0b3J5IGluLXVzZSBjb3VudHMgd2hlbgorc2hyaW5raW5nIGZpbGVzeXN0ZW1zIGFuZCBkaXJlY3RvcnkgaW5vZGVzIG5lZWRlZCB0byBiZSBtb3ZlZCBmcm9tIG9uZQorYmxvY2sgZ3JvdXAgdG8gYW5vdGhlci4gIFRoaXMgYnVnIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSBlMmZzcHJvZ3MKKzEuMjYsIGFuZCBpcyBsYXJnZWx5IGhhcm1sZXNzLCBidXQgZG9lcyBjYXVzZSBhIGZpbGVzeXN0ZW0gY29ycnVwdGlvbgord2hpY2ggd2lsbCBiZSBmbGFnZ2VkIGJ5IGUyZnNjayBhZnRlciB0aGUgZmlsZXN5c3RlbSBoYXMgYmVlbiBzaHJ1bmsuCisgCitFMmZzY2sgd2lsbCBubyBsb25nZXIgaXNzdWUgc3B1cmlvdXMgY29tcGxhaW50cyBhYm91dCB0aGUgaW5vZGUgc2l6ZQorY2F1c2VkIGJ5IHZlcnkgbGFyZ2UgZXh0ZW50LWJhc2VkIGZpbGVzLCBhbmQgYnkgYmxvY2tzIHJlYWxsb2NhdGVkCit1c2luZyBmYWxsb2NhdGUoKSB3aXRoIHRoZSBGQUxMT0NfRkxfS0VFUF9TSVpFIG9wdGlvbi4gIChBZGRyZXNzZXMKK0tlcm5lbCBCdWd6aWxsYTogIzExMzQxKQorCitNa2UyZnMgd2lsbCBub3cgc2V0IHRoZSBjcmVhdGlvbiB0aW1lc3RhbXAgb24gdGhlIGxvc3QrZm91bmQgZGlyZWN0b3J5CithbmQgdGhlIHJvb3QgZGlyZWN0b3J5LiAgKE1vcmUgZ2VuZXJhbGx5LCBhbGwgbmV3IGlub2RlcyBjcmVhdGVkIHVzaW5nCit0aGUgZXh0MmZzIGxpYnJhcnkgd2lsbCBjb3JyZWN0bHkgc2V0IHRoZSBjcmVhdGlvbiB0aW1lc3RhbXAuKQorCitFMmZzY2sgbm93IGNvcnJlY3RseSBjYWxjdWxhdGVzIGluZC9kaW5kL3RpbmQgc3RhdGlzdGljcyBpbiB0aGUKK3ByZXNlbmNlIG9mIGV4dGVudC1iYXNlZCBmaWxlcy4gIEluIGFkZGl0aW9uLCAiZTJmc2NrIC12IiB3aWxsIHJlcG9ydAorc3RhdGlzdGljcyBvZiB0aGUgZGVwdGggb2YgZXh0ZW50IHRyZWVzIGluIHRoZSBmaWxlc3lzdGVtLiAgRTJmc2NrIGNhbgorYWxzbyBnaXZlIGFuIGlub2RlIGZyYWdtZW50YXRpb24gcmVwb3J0IHVzaW5nICJlMmZzY2sgLUUgZnJhZ2NoZWNrIgord2hpY2ggY2FuIGJlIHVzZWZ1bCB3aGVuIGRlYnVnZ2luZyB0aGUga2VybmVsIGJsb2NrIGFsbG9jYXRpb24KK3JvdXRpbmVzLgorCitGaXggc3VwcG9ydCBmb3IgZW1wdHkgZGlyZWN0b3J5IGJsb2NrcyBpbiBleHQ0IGZpbGVzeXN0ZW1zIHdpdGggNjRrCitibG9ja3NpemUgZmlsZXN5c3RlbXMuCisKK0UyZnNjayB3aWxsIG5vdyBwcmludCB0aGUgZGVwdGggb2YgY29ycnVwdCBodHJlZSBkaXJlY3Rvcmllcy4KKworRGVidWdmcydzIGh0cmVlIGNvbW1hbmQgbm93IGNvcnJlY3RseSB1bmRlcnN0YW5kcyBleHRlbnQtYmFzZWQKK2RpcmVjdG9yaWVzLiAgSXQgd2lsbCBhbHNvIHByaW50IG91dCB0aGUgbWlub3IgaGFzaCBhcyB3ZWxsIGFzIHRoZQorbWFqb3IgaGFzaC4KKworRGVidWdmcyBoYXMgYSBuZXcgY29tbWFuZCB3aGljaCB3aWxsIHByaW50IHRoZSBzdXBwb3J0ZWQgZmVhdHVyZXMgb2YKK2UyZnNwcm9ncywgdG8gZW5hYmxlIHNjcmlwdHMgdG8ga25vdyB3aGV0aGVyIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZgorZTJmc3Byb2dzIGNhbiBzdXBwb3J0IGEgc3BlY2lmaWMgZmVhdHVyZS4KKworRGVidWdmcyB3aWxsIG5vdyB3cml0ZSBmaWxlcyB1c2luZyBleHRlbnRzIGZvciBmaWxlc3lzdGVtcyB0aGF0CitzdXBwb3J0IHRoZW0uCisKK1RoZSBlcnJvciBtZXNzYWdlIHByaW50ZWQgYnkgInR1bmUyZnMgLUkiIGlmIHRoZSBpbm9kZSBzaXplIHdhcyB0b28KK3NtYWxsIHdhcyByYXRoZXIgY29uZnVzaW5nLCBzbyBpdCBoYXMgYmVlbiBpbXByb3ZlZC4gIEFsc28sIHdlIHdvbid0Cit0cnkgdG8gY3JlYXRlIGFuIHVuZG8gbG9nIHVudGlsIHdlIGtub3cgdGhhdCBjb21tYW5kLWxpbmUtc3BlY2lmaWVkCitwYXJhbWV0ZXJzIHN1Y2ggYXMgInR1bmUyZnMgLUkgPGlub2RlIHNpemU+IiBhcmUgdmFsaWQuCisKK0dpdmVuIHNvbWUgZmlsZXN5c3RlbXMgZm91bmQgImluIHRoZSB3aWxkIiB0aGF0IGhhZCBub24temVybyBibG9jaworZ3JvdXAgY2hlY2tzdW1zIGV2ZW4gdGhvdWdoIHRoZSB1bmluaXRfYmcvZ2R0X3N1bSBmZWF0dXJlIHdhcyBub3QKK2VuYWJsZWQsIGUyZnNjayB3b3VsZCBpc3N1ZSBzcHVyaW91cyBlcnJvciBtZXNzYWdlcy4gIFRlYWNoCitleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3ZlcmlmeSgpIHRvIGlnbm9yZSB0aGUgYmxvY2sgZ3JvdXAgY2hlY2tzdW0KK2VudGlyZWx5IGlmIHRoZSBmZWF0dXJlIGZsYWcgaXMgbm90IHNldC4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzoKKyM0OTA2MzcpCisKK1RoZSBibGtpZCBwcm9ncmFtIHdpbGwgbm93IHByaW50IG91dCBhIHVzZXItZnJpZW5kbHkgbGlzdGluZyBvZiBhbGwgb2YKK3RoZSBibG9jayBkZXZpY2VzIGluIHRoZSBzeXN0ZW0gYW5kIHdoYXQgdGhleSBjb250YWluIHdoZW4gZ2l2ZW4gdGhlCistTCBvcHRpb24uICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0OTA1MjcpCisKK1RoZSBmaWxlZnJhZyBwcm9ncmFtIG5vdyBoYXMgYSBtb3JlIGFjY3VyYXRlIGNhbGN1bGF0aW9uIGZvciB0aGUKK251bWJlciBvZiBpZGVhbCBleHRlbnRzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDU4MzA2KQorCitUaGUgdGVzdCBJL08gbWFuYWdlciBpcyBub3cgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXRzIG92ZXJoZWFkIGlzCitvbmx5IGluY3VycmVkIHdoZW4gaXQgd291bGQgYmUgZW5hYmxlZCB2aWEgdGhlIFRFU1RfSU9fRkxBR1Mgb3IKK1RFU1RfSU9fQkxPQ0sgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCitUeXBvZ3JhcGhpY2FsIGVycm9ycyBpbiB2YXJpb3VzIHByb2dyYW0gc3RyaW5ncyBhbmQgdXNhZ2UgbWVzc2FnZXMKK2hhdmUgYmVlbiBmaXhlZDsgbW9zdCBvZiB0aGVzZSB3ZXJlIHBvaW50ZWQgb3V0IGJ5IHRoZSBlMmZzcHJvZ3MKK21lc3NhZ2UgY2F0YWxvZyB0cmFuc2xhdG9ycy4gIChUaGFua3MsIHRyYW5zbGF0b3JzISkKKworVXBkYXRlIGFuZCBjbGFyaWZpZWQgdmFyaW91cyBtYW4gcGFnZXMsIGFzIHdlbGwgYXMgc29tZSB0eXBvZ3JhcGhpY2FsCitlcnJvcnMgaW4gdGhlIGxpYmV4dDJmcyB0ZXhpbmZvIGZpbGUuCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIHBhY2thZ2luZyBpc3N1ZXMgLS0tIHNlZSBkZWJpYW4vY2hhbmdlbG9nIGZvcgorZGV0YWlscy4KKworQWRkIEluZG9uZXNpYW4gYW5kIHVwZGF0ZSBGcmVuY2gsIFBvbGlzaCwgRHV0Y2gsIEdlcm1hbiwgU3dlZWRpc2gsCitDemVjaCwgYW5kIFZpZXRuYW1lc2UgVHJhbnNsYXRpb25zLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzMxMzY5NywKKyM0MDEwOTIpCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeCBwb3J0YWJpbGl0eSBwcm9ibGVtIHdpdGggdGhlIGJhZGJsb2NrcyBncm91cDsgZm9yIHN5c3RlbXMgdGhhdAorZG9uJ3QgaGF2ZSBuYW5vc2xlZXAoKSwgdHJ5IHVzaW5nIHVzbGVlcCgpIGluc3RlYWQuCisKK1RoZSAibWFrZSBjaGVjayIgdGFyZ2V0IGluIHRoZSBlMmZzY2sgZGlyZWN0b3J5IG5vdyBzZXRzCitMRF9MSUJSQVJZX1BBVEggYmVmb3JlIHJ1bm5pbmcgdGhlIHZhcmlvdXMgZTJmc2NrIGludGVybmFsIGxpYnJhcnkKK3JlZ3Jlc3Npb24gdGVzdHMuCisKK1RoZSBjcmMzMiByZWdyZXNzaW9uIHRlc3QgaW4gdGhlIGUyZnNjayBsaWJyYXJ5IGlzIG5vdyBwb3J0YWJsZSB0bworZ3JlYXRlciB2YXJpZW50eSBvZiBlbnZpcm9ubWVudHMsIGluY2x1ZGluZyBiaWctZW5kaWFuIHN5c3RlbXMgYW5kCit3aGVuIGNyb3NzLWJ1aWxkaW5nIGUyZnNwcm9ncyBmb3IgZW1iZWRkZWQgc3lzdGVtcy4gIChBZGRyZXNzZXMKK1NvdXJjZWZvcmdlIEJ1ZzogIzIwMTkyODcpCisKK1RoZSBleHQyZnNfZXh0ZW50X3NldF9ibWFwKCkgaGFkIHNvbWUgYnVncyB3aGVuIHNldHRpbmcgdGhlIGZpcnN0CitibG9jayBpbiBhIGZpbGUsIG9yIHdoZW4gcmVwbGFjaW5nIGEgc2luZ2xlIGJsb2NrIGV4dGVudC4gIFRob3NlIGNhc2VzCitmb3J0dW5hdGVseSB3ZXJlIGNhbWUgdXAgcmVsYXRpdmVseSByYXJlbHkgd2hlbiBlMmZzY2sgd2FzIGNoZWNraW5nCitmaWxlcywgYnV0IGNhdXNlZCBzb21lIHByb2JsZW1zIHdoZW4gcmVzaXplMmZzIHdhcyBzaHJpbmtpbmcKK2V4dGVudC1iYXNlZCBmaWxlcy4KKworRml4IGEgcG90ZW50aWFsIGNvcmUtZHVtcGluZyBidWcgaW4gbGliZTJwJ3MgaXRlcmF0ZV9vbl9kaXIoKQorZnVuY3Rpb24uCisKK1ZhcmlvdXMgZXh0MmZzIGxpYnJhcnkgZnVuY3Rpb25zIC0tLSBleHQyZnNfYmxvY2tfaXRlcmF0ZTIoKSwKK2V4dDJmc19pbml0aWFsaXplKCkgYW5kIGV4dDJmc19leHRlbnRfb3BlbigpIC0tLSBub3cgY29ycmVjdGx5IGZyZWUKK2FsbG9jYXRlZCBtZW1vcnkgdG8gYXZvaWQgbWVtb3J5IGxlYWtzIGluIGFsbCBvZiB0aGVpciBlcnJvciByZXR1cm4KK3BhdGhzLgorCitFeHQyZWQgd2FzIGZhaWxpbmcgdG8gYnVpbGQgYmVjYXVzZSBtYXNpeCBzdXBwb3J0IGhhZCBiZWVuIHJlbW92ZWQgaW4KK3RoZSByZXN0IG9mIGUyZnNwcm9ncywgc28gZXh0MmVkIG5vIGxvbmdlciBoYXMgbWFzaXggc3VwcG9ydCwgZWl0aGVyLgorCitUaGUgY29uZmlndXJlIHNjcmlwdCBub3cgcmVzcGVjdHMgdGhlIExERkxBR1MgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYKK2l0IGlzIHNldCB3aGVuIGNvbmZpZ3VyZSBpcyBjYWxsZWQuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEZlYXR1cmUKK1JlcXVlc3Q6ICMxOTM3Mjg3KQorCitMaWJ1dWlkIGlzIG5vdyBtb3JlIHBvcnRhYmxlIHRvIHRoZSBXaW5kb3dzIHBsYXRmb3JtLiAgKEFkZHJlc3NlcworU291cmNlZm9yZ2UgRmVhdHVyZSBSZXF1ZXN0OiAjMTkzNzI4NykKKworVGhlIGNvbmZpZ3VyZSBzY3JpcHQgbm93IHVzZXMgQUNfTVNHX3tSRVNVTFQsV0FSTixFUlJPUn0gaW5zdGVhZCBvZgorYmFyZSBlY2hvIGNvbW1hbmRzIHNvIHRoYXQgY29uZmlndXJlIGZsYWdzIHN1Y2ggYXMgLS1xdWlldCB3b3JrCitjb3JyZWN0bHkuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIFBhdGNoZXM6ICMyMDU4Nzk0KQorCitBIGZldyB1c2VzIG9mIHNwcmludGYgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZXh0MmZzIGxpYnJhcnkgdG8KK21ha2UgbGlmZSBlYXNpZXIgZm9yIGJvb3Rsb2FkZXJzIHdpdGggYSBsaW1pdGVkIGxpYmMgZW52aXJvbm1lbnQuCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzIwNDkxMjApCisKK1RoZSBleHQyZnNfcmVhZF9pbm9kZSgpIGNoZWNrcyB0aGUgdmFsaWRpdHkgb2YgdGhlIGlub2RlIG51bWJlciBwYXNzZWQKK3RvIGl0IGVhcmxpZXIsIHRvIGF2b2lkIGRvaW5nIHNvbWUgbmVlZGxlc3Mgd29yayB3aGVuIGl0IHdvdWxkIGZhaWwKK2FueXdheS4KKworVGhlIGV4dDJmc19vcGVuKCkgY2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGUgYmxvY2tzaXplIHBhcmFtZXRlcgorcGFzc2VkIHRvIGl0IGVhcmxpZXIsIHRvIGF2b2lkIGRvaW5nIHNvbWUgbmVlZGxlc3Mgd29yayB3aGVuIGl0IHdvdWxkCitmYWlsIGFueXdheS4KKworRGlzYWJsZSBhIHZlcnkgYW5ub3lpbmcgYXV0b21hdGljICIlLnNoIC0+ICUiIEdOVSBtYWtlIHJ1bGUgaW4gdGhlCit0b3AtbGV2ZWwgTWFrZWZpbGUuICBUaGF0IGF1dG9tYXRpYyBydWxlIGlzIHVzZWQgdG8gYmV0dGVyIHN1cHBvcnQKK1NDQ1MsIGJ1dCBpdCBjYXVzZWQgcHJvYmxlbXMgZm9yIGEgcGFydGljdWxhciBuaWNoZSBkaXN0cmlidXRpb24gd2hpY2gKK2xpa2VzIHRvIHVzZSBjb25maWd1cmUuc2ggZmlsZXMgdG8gc3RvcmUgdGhlIGNvbmZpZ3VyZSBvcHRpb25zIHVzZWQgdG8KK2J1aWxkIGEgcGFja2FnZS4gIFVuZm9ydHVudGFlbHkgR05VIG1ha2Ugd2lsbCB1c2UgdGhlIGNvbmZpZ3VyZS5zaCB0bworcmVwbGFjZSB0aGUgY29uZmlndXJlIHNjcmlwdCwgcmVzdWx0aW5nIGluIGEgc2VsZi1pbmZsaWN0ZWQgZm9yayBib21iCitsZWFkaW5nIHRvIGFuIG91dC1vZi1tZW1vcnkgY3Jhc2guCisKK1RvIHN1cHBvcnQgb2xkIEdOVSBDIGNvbXBpbGVycyBkb24ndCB1c2UgQzk5L0MrKyBjb21tZW50cywgYnV0IG9ubHkKK0smUiBzdHlsZSBjb21tZW50cywgYW5kIGRvbid0IHRyeSB0byB1c2UgX19idWlsdGluX2V4cGVjdCBpZiBfX0dOVUNfXworaXMgbGVzcyB0aGFuIDMuICAoX19idWlsdGluX2V4cGVjdCBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgZ2NjIHZlcnNpb25zCisyLjk2IGFuZCB1cCwgYW5kIGl0J3MgdHJpY2t5IHRvIGNoZWNrIGZvciBnY2MgMi45NSB2cyBnY2MgMi45Njsgc2luY2UKK3RoaXMgaXMgYW4gb3B0aW1pemF0aW9uLCB3ZSBvbmx5IHRyeSB0byB1c2UgX19idWlsdGluX2V4cGVjdCBmb3IgZ2NjIDMKK2FuZCB1cC4pCisKK0luIGUyZnNjaydzIGNyYyByb3V0aW5lcywgbWFrZSBzdXJlIHdlIHVzZSBXT1JEU19CSUdFTkRJQU4gaW5zdGVhZCBvZgorX19MSVRUTEVfRU5ESUFOLCB3aGljaCBhcmUgb25seSBkZWZpbmVkIGJ5IGdsaWJjJ3MgaGVhZGVyIGZpbGVzIGFuZAoraGVuY2UgaXNuJ3QgcG9ydGFibGUuCisKK0ZvciB0aGUgY29udmVuaWVuY2UgZm9yIHNvbWUgZGlzdHJpYnV0aW9ucyB0aGF0IG5lZWQgYSBzdGF0aWMgdHVuZTJmcywKK3RoZSBNYWtlZmlsZSBmb3IgbWlzYy8gbm93IGhhcyBhIHR1bmUyZnMuc3RhdGljIHRhcmdldC4KKworVGhlIGV4dDJmc19ibG9ja19pdGVyYXRlMigpIGZ1bmN0aW9uIG5vdyBzdXBwb3J0cyBCTE9DS19GTEFHX0FQUEVORAorZm9yIGV4dGVudC1iYXNlZCBmaWxlcworCitUaGUgZXh0MmZzX2JtYXAoKSBmdW5jdGlvbiBub3cgc3VwcG9ydHMgQk1BUF9BTExPQyBmb3IgZXh0ZW50LWJhc2VkCitmaWxlcy4KKworQWxsIHNvdXJjZSBmaWxlcyBubyBsb25nZXIgaGF2ZSBhbnkgdHJhaWxpbmcgd2hpdGUgc3BhY2UuCisKK1RoZSBpb19jaGFubmVsX3JlYWRfYmxrNjQoKSBhbmQgaW9fY2hhbm5lbF93cml0ZV9ibGs2NCgpIGZ1bmN0aW9ucyBhcmUKK25vdyBmdW5jdGlvbnMgaW5zdGVhZCBvZiBDIHByZXByb2Nlc3NvciBtYWNyb3MgdG8gcHJvdmlkZSBiZXR0ZXIKK2ZvcndhcmQgY29tcGF0aWJpbGl0eS4KKworVGhlIGUyZnBzcm9ncyB0cmFuc2xhdGlvbiB0ZW1wbGF0ZSBub3cgZXhwYW5kcyB0aGUgQHggYWJicmV2YXRpb24uCisKK1ZhcmlvdXMgbmFtZXNwYWNlIGxlYWNrYWdlcyBpbiBsaWJibGtpZCwgbGliZTJwLCBhbmQgbGliZXh0MmZzIGhhdmUKK2JlZW4gZml4ZWQuCisKK0ZpeCBhIHBhcmFsbGVsIGJ1aWxkIHByb2JsZW0gaW4gZTJmc3Byb2dzLgorCitFMmZzcHJvZ3MgaXMgbm93IG1vcmUgcG9ydGFibGUgdG8gU29sYXJpcy4KKyAgKiBibGtpZCBubyBsb25nZXIgYXNzdW1lcyB0aGF0IHRoZSBUSU9DR1NJWkUgYW5kIFRJT0NHV0lOU1ogaW9jdGwncworICAgIGFyZSBhbHdheXMgcHJlc2VudC4KKyAgKiBTY3JpcHRzIGRvIG5vdCBhc3N1bWUgdGhhdCAvYmluL3RydWUgaXMgYWx3YXlzIGluIC9iaW4KKyAgKiBEb24ndCB1c2UgX19GVU5DVElPTl9fIHNpbmNlIFNvbGFyaXMncyBDOTkgZG9lc24ndCBzdXBwb3J0IGl0LgorICAqIEZsdXNoIHN0ZGlvIGhhbmRsZXMgYmVmb3JlIGNhbGxpbmcgc2V0YnVmKCksIHNpbmNlIFNvbGFyaXMgd2lsbAorICAgIGRpc2NhcmQgYW55IHBlbmRpbmcgb3V0cHV0IHRvIHRoZSBzdHJlYW0uCisgICogRGVmaW5lIF9YT1BFTl9TT1VSQ0UgdG8gNjAwIHNpbmNlIFNvbGFyaXMncyBoZWFkZXIgZmlsZXMgYXJlIHZlcnkKKyAgICBwaWNreSBhYm91dCB3aGljaCBDIGNvbXBpbGVyIGNhbiBiZXVzZWQgZm9yIFNVU3YzIGNvbmZvcm1hbmNlLgorICAgIFVzZSBvZiBDOTkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBTVVN2MiAoX1hPUEVOX1NPVVJDRT01MDApLAorICAgIGFuZCBDODkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBTVVN2MyAoX1hPUEVOX1NPVVJDRT02MDApLgorICAgIFNpbmNlIHdlIG5lZWQgc29tZSBTVVN2MyBmdW5jdGlvbnMsIGNvbnNpc3RlbnRseSB1c2UgU1VTdjMgc28KKyAgICB0aGF0IGUyZnNwcm9ncyB3aWxsIGJ1aWxkIG9uIFNvbGFyaXMgdXNpbmcgYzk5LgorICAqIFNvbGFyaXMgQzk5IGRvZXMgbm90IHN1cHBvcnQgdmFyYXJncyBDIHByZXByb2Nlc3NvciBtYWNyb3MKKyAgKiBTb2xhcmlzIGhlYWRlciBmaWxlcyBwb2xsdXRlIHRoZSBDIG5hbWVzcGFjZSBpZiBpbi9uZXRpbmV0LmgKKyAgICBpcyBpbmNsdWRlZCwgd2hpY2ggY29uZmxpY3RzIHdpdGggZTJmc3Byb2dzJyB1c2Ugb2YgdGhlIGttZW1fY2FjaGVfdAorICAgIHR5cGVkZWYuCisgICogU29sYXJpcyBzaGlwcyB3aXRoIGEgcGF0aGV0aWNhbGx5IGFuY2llbnQgc2hlbGwgaW4gL2Jpbi9zaCBzbyB3ZQorICAgIGF2b2lkIHRoZSB1c2Ugb2YgdmFyaW91cyBtb3JlIGF2YW5jZWQgc2hlbGwgY29uc3RydWN0cyBzdWNoIGFzICQoKS4KKworVGhlICJtYWtlIHJwbSIgY29tbWFuZCB3aWxsIG5vdyB0YWtlIHNvbWUgZXh0cmEgY29uZmlndXJlIG9wdGlvc24gZnJvbQordGhlIGJ1aWxkIGVudmlyb25tZW50IHdpdGhvdXQgbmVlZGluZyB0byBwYXRjaCB0aGUgc291cmNlIHRyZWUuCisKK1RoZSBleHQyZnNfYWRkX2Rpcl9ibG9jaygpIGZ1bmN0aW9uIHdpbGwgbm93IGdyb3cgdGhlIGRibGlzdCBtb3JlCithZ2dyZXNzaXZlbHkgYXMgYW4gb3B0aW1pemF0aW9uIHRvIGF2b2lkIGNvcHlpbmcgdGhlIGFycmF5IHRvbyBvZnRlbi4KKworVGhlIGUyZnNja193cml0ZV9iaXRtYXBzKCkgd2lsbCB3cml0ZSB0aGUgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMKK3RvZ2V0aGVyIGluc3RlYWQgb2YgaW4gdHdvIHBhc3Nlcy4KKworCitFMmZzcHJvZ3MgMS40MSAoSnVseSAxMCwgMjAwOCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBZGQgc3VwcG9ydCBmb3IgZXh0NCBmaWxlc3lzdGVtIGZlYXR1cmVzLCBpbiBwYXJ0aWN1bGFyIGV4dGVudHMsCit1bmluaXRfYmcsIGZsZXhfYmcsIGh1Z2VfZmlsZSwgYW5kIGRpcl9ubGluayBmZWF0dXJlcy4gIEFsc28gYWRkCitzdXBwb3J0IGZvciBjaGVja2luZyBqb3VybmFsIGNoZWNrc3Vtcy4gIERlYnVnZnMgd2lsbCBwcmludCBuZXcKK3N1cGVyYmxvY2sgYW5kIGlub2RlIGZpZWxkcyB0aGF0IHdlcmUgZGVmaW5lZCBmb3IgZXh0NC4gIEZvciBleGFtcGxlLAordGhlIG5hbm9zZWNvbmQgYW5kIGlfdmVyc2lvbiBmaWVsZHMgb2YgYW4gaW5vZGUsIGFuZCB0aGUKK3NfbWluX2V4dHJhX2lzaXplIGFuZCBzX3dhbnRlZF9leHRyYV9pc2l6ZSBmaWVsZHMgZnJvbSB0aGUgc3VwZXJibG9jay4KK05vdGU6IFJlc2l6ZTJmcyBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHRoZSBjb21iaW5hdGlvbiBvZiBmbGV4X2JnCithbmQgIXJlc2l6ZV9pbm9kZS4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzM4ODQ1MiwgIzQyNTQ3NykKKworVHVuZTJmcyBjYW4gc3VwcG9ydCBtaWdyYXRpbmcgYSBmaWxlc3lzdGVtIGZyb20gdXNpbmcgMTI4IGJ5dGUgaW5vZGVzCit0byAyNTYgYnl0ZSBpbm9kZXMsIHNvIGl0IGNhbiB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZnVsbCBmZWF0dXJlcyBvZgorZXh0NC4KKworQWRkIHN1cHBvcnQgZm9yICJ1bmRvIiBzdXBwb3J0LiAgRTJmc2NrIGFuZCBta2UyZnMgY2FuIG9wdGlvbmFsbHkKK3JlY29yZCBhbiB1bmRvIGxvZyB3aGljaCBjYW4gcmVwbGF5ZWQgYnkgdGhlIHByb2dyYW0gZTJ1bmRvLgorCitFMmZzY2sgY291bGQgZGFtYWdlIGEgZmlsZXN5c3RlbSBieSB0cnlpbmcgdG8gcmVsb2NhdGUgaW5vZGUgdGFibGVzCitkdWUgdG8gY29ycnVwdGVkIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLCB3aGVyZSB0aGUgYXR0ZW1wdGVkIGlub2RlCit0YWJsZSByZWxvY2F0aW9uIHdvdWxkIGRvIGZhciBtb3JlIGhhcm0gdGhhbiBnb29kLiAgRTJmc2NrIGhhcyBiZWVuCitmaXhlZCB0byBkZXRlY3QgdGhpcyB0aGVzZSBzb3J0cyBvZiBjb3JydXB0ZWQgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMKK211Y2ggZWFybGllciBpbiBlMmZzY2sgcHJvY2Vzc2luZywgc28gaXQgY2FuIHRyeSB0byB1c2UgdGhlIGJhY2t1cAorc3VwZXJibG9jayBhbmQgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgZmlyc3QuICBUaGlzIHNob3VsZCBiZSBhIG11Y2gKK2JldHRlciBzdHJhdGVneSBmb3IgcmVjb3ZlcmluZyB0aGVzZSB0eXBlcyBvZiBjb3JydXB0ZWQgZmlsZXN5c3RlbXMuCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzE4NDAyOTEpCisKK0UyZnNjayB3aWxsIGRpc3BsYXkgYSBtb3JlIHVuZGVyc3RhbmRhYmxlIG1lc3NhZ2Ugd2hlbiB0aGUgbGFzdCBjaGVjaworZmllbGQgaW4gdGhlIHN1cGVyYmxvY2sgaXMgaW4gdGhlIGZ1dHVyZS4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzoKKyM0NDYwMDUpLgorCitFMmZzY2sgbm93IHBlcmZvcm1zIG1vcmUgZXh0ZW5zaXZlIGFuZCBjYXJlZnVsIGNoZWNrcyBvZiBleHRlbmRlZAorYXR0cmlidXRlcyBzdG9yZWQgaW4gdGhlIGlub2RlLgorCitFbmhhbmNlIG1rZTJmcyB0byBwcmludCBhIG1vcmUgZXhwbGFuYXRvcnkgZXJyb3IgbWVzc2FnZSB3aGVuCitleHQyZnNfZ2V0X2RldmljZV9zaXplKCkgcmV0dXJucyBFRkJJRy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzoKKyM0ODg2NjMpCisKK0ZpeCBta2UyZnMgdG8gdXNlIGEgZGVmYXVsdCBibG9jayBzaXplIG9mIDRrIHdoZW4gZm9ybWF0dGluZyBhbgorZXh0ZXJuYWwgam91cm5hbCBkZXZpY2UuICBUaGlzIGlzIGRvbmUgYnkgdXNpbmcgYSBmaXhlZCBmaWxlc3lzdGVtCit0eXBlIGxpc3QgdGhhdCBjb25zaXN0cyBvbmx5IG9mIHRoZSBzaW5nbGUgZmlsZXN5c3RlbSB0eXBlICJqb3VybmFsIgord2hlbiBsb29raW5nIHVwIGNvbmZpZ3VyYXRpb24ga2V5cyBpbiAvZXRjL21rZTJmcy5jb25mLiAgKEFkZHJlc3NlcworRGViaWFuIEJ1ZzogIzQ4ODY2MykKKworU3BlZWQgdXAgaG93IG1rZTJmcyB3cml0ZXMgdGhlIGpvdXJuYWwgZGF0YSBibG9ja3MgYnkgd3JpdGluZyB0aGUgZGlzaworYmxvY2tzIGluIGxhcmdlciBjaHVua3MuCisKK0ZpeCBibGtpZCBoYW5kbGluZyBvZiBzdGFsZSBkZXZpY2VzLiAgRml4IGEgYnVnIHdoaWNoIGNvdWxkIGNhdXNlIGEKK2NvcmUgZHVtcCB3aGlsZSBnYXJiYWdlIGNvbGxlY3RpbmcgdGhlIGJsa2lkIGNhY2hlLCBhbmQgYXNzdXJlIHRoYXQKK2Jsa2lkX2ZpbmRfZGV2X3dpdGhfdGFnKCkgbmV2ZXIgcmV0dXJucyBhIG5vbi1leGlzdGVudCBkZXZpY2UuICBBbHNvLAoraWYgYSBmaWxlc3lzdGVtIGlzIGZvdW5kIGF0IGEgbmV3IC9kZXYgbG9jYXRpb24sIGVsaW1pbmF0ZSBhbnkKK2R1cGxpY2F0ZSBzdGFsZSBlbnRyaWVzIHdoaWNoIGNhbiBub3QgYmUgdmVyaWZpZWQuCisoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNDg3NzU4LCAjNDg3NzgzKQorICAgIAorQWRkIG1vcmUgcGFyYW5vaWQgY2hlY2tzIGZvciBMVk0gdm9sdW1lcyBhbmQgc3dhcCBwYXJ0aXRpb25zIGluCitibGtpZCdzIHByb2JlIGZ1bmN0aW9uLCB0byByZWR1Y2UgdGhlIGNoYW5jZXMgb2YgZmFsc2UgcG9zaXRpdmVzLgorCitUaGUgbWtlMmZzIHByb2dyYW0gbm93IGhhcyBhIG11Y2ggbW9yZSBzb3BoaXN0aWNhdGVkIHN5c3RlbSBmb3IKK2NvbnRyb2xsaW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBvZiBhIG5ld2x5IGNyZWF0ZWQgZmlsZXN5c3RlbQorYmFzZWQgb24gYSBzcGxpdCBmaWxlc3lzdGVtIGFuZCB1c2FnZSB0eXBlIHN5c3RlbS4gIFRoZSAtdCBvcHRpb24gdG8KK21rZTJmcyB3YXMgYSBkZXByZWNhdGVkIGFsaWFzIHRvIC1jOyBpdCBub3cgc3BlY2lmaWVzIGEgZmlsZXN5c3RlbQordHlwZSAoZXh0MiwgZXh0MywgZXh0NCwgZXRjLiksIHdoaWxlIHRoZSAtVCBvcHRpb24gY2FuIG5vdyBiZSBhIGNvbW1hCitzZXBhcmF0ZWQgdXNhZ2UgbGlzdC4gIFRoZSBmaWxlc3lzdGVtIHR5cGUgaW5mb3JtYXRpb24gYW5kIHR5cGUKK2luZm9ybWF0aW9uIGlzIHVzZWQgdG8gZXh0cmFjdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZnJvbSB0aGUKKy9ldGMvbWtlMmZzLmNvbmYgZmlsZS4KKworVGhlIG1rZTJmcyBwcm9ncmFtIHdpbGwgbm8gbG9uZ2VyIGNvbXBsYWluIGFuZCByZXF1ZXN0IHRoZSAtZiBvcHRpb24KK3doZW4gdGhlIHVzZXIgdHJpZXMgdG8gY3JlYXRlIGEgZmlsZXN5c3RlbSB3aXRoIGdyZWF0ZXIgdGhhbiAyKiozMQorYmxvY2tzLgorCitXaGVuIGNyZWF0aW5nIGEgZmlsZXN5c3RlbSBmb3IgdGhlIEdOVSBIdXJkIHVzZSBhIGZzLXR5cGUgb2YgSHVyZCBhbmQKK2FkanVzdCB0aGUgbWtlMmZzLmNvbmYgZmlsZSBzbyBmaWxlc3lzdGVtcyBmb3IgdGhlIEh1cmQgYXJlIGNyZWF0ZWQKK3dpdGggYSBibG9ja3NpemUgb2YgNDA5NiBhbmQgaW5vZGUgc2l6ZSBvZiAxMjgsIHdoaWNoIGlzIGFsbCBpdCBrbm93cworaG93IHRvIGhhbmRsZS4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQ3MTk3NykKKyAgICAKK01rZTJmcyB3aWxsIGFsd2F5cyBtYWtlIHN1cmUgdGhhdCBsb3N0K2ZvdW5kIGFsd2F5cyBoYXMgYXQgbGVhc3QgMgorYmxvY2tzLCBldmVuIGZvciBmaWxlc3lzdGVtcyB3aXRoIHZlcnkgbGFyZ2UgYmxvY2tzaXplcyAoaS5lLiwgNjRrYikuCisKK1Jlc2l6ZTJmcyB3aWxsIG5vdyBwcmludCB0aGUgbWluaW11bSBuZWVkZWQgZmlsZXN5c3RlbSBzaXplIGlmIGdpdmVuCit0aGUgLVAgb3B0aW9uLCBhbmQgd2lsbCByZXNpemUgdGhlIGZpbGVzeXN0ZW0gdG8gdGhlIHNtYWxsZXN0IHBvc3NpYmxlCitzaXplIGlmIGdpdmVuIHRoZSAtTSBvcHRpb24uCisKK0ZpeCByZXNpemUyZnMgdG8gY2xlYW4gdXAgdGhlIHJlc2l6ZV9pbm9kZSBpZiBhbGwgb2YgdGhlIHJlc2VydmVkIGdkdAorYmxvY2tzIGFyZSBjb25zdW1lZCBkdXJpbmcgYW4gb2ZmLWxpbmUgcmVzaXplLgorCitUaGUgImxzIiBjb21tYW5kIGluIGRlYnVnZnMgbm93IHN1cHBvcnRzIHRoZSAtcCBvcHRpb24sIHdoaWNoIGNhdXNlcworaXQgdG8gcXVvdGUgdGhlIGZpbGVuYW1lcyBzbyB0aGF0IHNwYWNlcyBvciB0YWJzIGluIGRpcmVjdG9yeSBlbnRyaWVzCithcmUgZWFzaWx5IHZpc2libGUuICAoQWRkcmVzc2VzIFJlZCBIYXQgQnVnemlsbGE6ICMxNDk0ODA7IEFkZHJlc3NlcworU291cmNlZm9yZ2UgRmVhdHVyZSBSZXF1ZXN0OiAjMTIwMTY2NykKKworRml4IGEgcG90ZW50aWFsIG9mZi1ieS1vbmUgYnVmZmVyIG92ZWZsb3cgaW4gdGhlIGZzX2RldmljZV9uYW1lIGluIGFuCitlMmltYWdlIGZpbGUuCisKK1RoZSBjaGF0dHIgcHJvZ3JhbSB3aWxsIHJldHVybiBhIG5vbi16ZXJvIGV4aXQgY29kZSBpbiBjYXNlIG9mCitmYWlsdXJlcywgYW5kIGVycm9yIG1lc3NhZ2VzIGNhbiBiZSBzdXBwcmVzc2VkIHdpdGggdGhlIC1mIG9wdGlvbi4KKyhBZGRyZXNzZXMgUmVkIEhhdCBCdWd6aWxsYTogIzE4MDU5NikKKworRml4IGEgYnVnIGluIGJhZGJsb2NrcyB3aGljaCBjYXVzZWQgaXQgdG8gb3ZlcnJ1biBhbiBhcnJheSBhbmQgbGlrZWx5CitjcmFzaCBpZiBtb3JlIHRoYW4gOCB0ZXN0IHBhdHRlcm5zIGFyZSBzcGVjaWZpZWQgdXNpbmcgdGhlIC10IG9wdGlvbi4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQ4NzI5OCkKKyAgICAKK0FkZCBzdXBwb3J0IHRvIGJhZGJsb2NrcyB0byBsaW1pdCBob3cgcXVpY2tseSBpdCByZWFkcyBmcm9tIHRoZSBkaXNrCitkcml2ZSAoc28gaXQgY2FuIGJlIHVzZWQgZm9yIGJhY2tncm91bmQgc2NydWJiaW5nKSwgYW5kIHNvIGl0IHdpbGwKK2Fib3J0IGFmdGVyIGZpbmRpbmcgYSBnaXZlbiBudW1iZXIgb2YgZXJyb3JzLgorCitSZW1vdmUgc3VwcG9ydCBmb3IgdGhlIGxlZ2FjeSBiaWctZW5kaWFuIGZpbGVzeXN0ZW0gZm9ybWF0IHdoaWNoIG9ubHkKK2V4aXN0ZWQgb24gZXh0cmVtZWx5IGxvbmctZGVhZCBQb3dlclBDIGtlcm5lbHMgYWxtb3N0IGEgZGVjYWRlIGFnby4KKworUmVtb3ZlIE1BU0lYIHN1cHBvcnQgZnJvbSBlMmZzcHJvZ3MuCisKK0FkZCBJL08gc3RhdGlzdGljcyByZXBvcnRpbmcgdG8gZTJmc2NrLgorCitVcGRhdGUgVmlldG5hbWVzZSwgUG9saXNoLCBGcmVuY2gsIFNwYW5pc2gsIEdlcm1hbiwgQ2F0YWxhbiwgRHV0Y2gsCitDemVjaCB0cmFuc2xhdGlvbnMuCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIHBhY2thZ2luZyBpc3N1ZXMgLS0tIHNlZSBkZWJpYW4vY2hhbmdlbG9nIGZvcgorZGV0YWlscy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6ICM0ODc0NDMsICM0ODc2NzUsICM0OTAwMDMpCisKK0ZpeGVkIHNwZWxsaW5nIG1pc3Rha2VzLCB0eXBvcywgYW5kIG90aGVyd2lzZSBjbGFyaWZpZWQgbWFuIHBhZ2VzLgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzM5MzMxMywgIzQ4Nzg0OSwgIzQ0MDk4MywgIzQ0MDk4MSkKKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworRmFjdG9yIG91dCBiaXRtYXAgY29kZSBpbiBwcmVwYXJhdGlvbiBmb3IgYWRkaW5nIDY0LWJpdCBuZXctc3R5bGUKK2JpdG1hcHMuCisKK0ZpeCBnY2MgLVdhbGwgd2FybmluZ3MKKworRml4IHRoZSBwa2ctY29uZmlnIGZpbGVzIHNvIHRoYXQgcHJpdmF0ZSBsaWJyYXJlcyBhcmUgc3BlY2lmaWVkIGluCisiTGlicy5wcml2YXRlOiIuCisKK0ZpeCB0aGUgbGliZXh0MmZzLnRleGluZm8gbWFudWFsIHNvIGl0IGJ1aWxkcyB3aXRoIG1vZGVybiB2ZXJzaW9ucyBvZgordGV4aW5mby4KKworU2lsZW5jZSB0aGUgbWFrZWZpbGUgZnJvbSBzaG93aW5nIHRoZSBhd2sgY29tbWFuZCB1c2VkIHRvIGJ1aWxkIHRoZQorCitDbGVhbiB1cCB0aGUgYmFkYmxvY2tzIGdyb3VwIHNvIHRvIG1ha2UgaXQgbW9yZSBwb3J0YWJsZSBhbmQgcm9idXN0LgorCitBdm9pZCB1c2luZyBwcmVkaWN0YWJsZSBmaWxlbmFtZXMgaW4gL3RtcCBpbiBibGtpZCdzIHJlZ3Jlc3Npb24gdGVzdAorc3VpdGUuICBBbHNvIHJlbW92ZSBiYXNoaXNtJ3MgaW4gdGhlIHJlZ3Jlc3Npb24gdGVzdCBzY3JpcHQuCisKK0lmIHRoZSBjb25maWd1cmUgc2NyaXB0IGlzIGdpdmVuIC0td2l0aC1kaWV0LWxpYmMsIGRvbid0IHVzZSB0aHJlYWQKK2xvY2FsIHN0b3JhZ2UsIHNpbmNlIGRpZXQgbGliYyBkb2Vzbid0IHN1cHBvcnQgVExTLiAgKEFkZHJlc3NlcworU291cmNlZm9yZ2UgQnVnOiAjMjAwMDY1NCkKKyAgICAKK0ZpeCB0aGUgYmxraWQgcmVncmVzc2lvbiB0ZXN0IHN1aXRlIHRvIHRvbGVyYXRlIG9sZGVyIHZlcnNpb25zIG9mCitta3N3YXAgdGhhdCBkb24ndCBzdXBwb3J0IHRoZSAtVSBvcHRpb24uCisKK0EgZmV3IGxpYnJhcnkgcm91dGluZXMgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byBzdXBwb3J0IDY0LWJpdCBibG9jaworbnVtYmVyczsgaW4gcGFydGljdWxhciwgdGhlIEkvTyBtYW5hZ2VyIGZ1bmN0aW9ucywgdGhlIHRlc3RfaW8sCitpbm9kZV9pbywgYW5kIHVuaXhfaW8gbWFuYWdlcnMgaGF2ZSBhbGwgYmUgY29udmVydGVkIHRvIHN1cHBvcnQgNjQtYml0CitvcGVyYXRpb24uCisKK0RlYnVnZnMgY2FuIG5vdyBiZSBleHRlbmRlZCBmb3IgdXNlIGJ5IHRlc3QgcHJvZ3JhbXMuICBTZWUKK2xpYi9leHQyZnMvZXh0ZW50cy5jIGZvciBhbiBleGFtcGxlIGZvciBob3cgaXQgY2FuIGJlIHVzZWQuICBUaGUgdGVzdAorcHJvZ3JhbSBsaW5rcyBhZ2FpbnN0IHRoZSBkZWJ1Z2ZzIG9iamVjdCBmaWxlcywgYW5kIHByb3ZpZGVzCithZGRpdGlvbmFsIGNvbW1hbmRzIGJ5IGRlZmluaW5nIGFuIGF1eGlsaWFyeSBsaWJzcyBjb21tYW5kIHRhYmxlLgorCitUaGUgbGF6eV9iZyBmaWxlc3lzdGVtIGZlYXR1cmUsIHdoaWNoIHdhcyBvbmx5IHVzZWQgYnkgZGV2ZWxvcGVyJ3MKK3Rlc3RpbmcsIGhhcyBiZWVuIHJlbW92ZWQgc2luY2UgaXQgaGFzIGJlZW4gbGFyZ2VseSBzdXBwbGFudGVkIGJ5Cit1bmluaXRfYmcuICBUaGlzIGFsc28gc2ltcGxpZmllcyB0aGUgY29kZS4KKworCitFMmZzcHJvZ3MgMS40MC4xMSAoSnVuZSAxNywgMjAwOCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNa2UyZnMsIHR1bmUyZnMsIGFuZCByZXNpemUyZnMgbm93IHVzZSBmbG9hdGluZyBwb2ludCB0byBjYWxjdWxhdGUgdGhlCitwZXJjZW50YWdlIG9mIHJlc2VydmVkIGJsb2Nrcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQ1MjYzOSkKKworVXBkYXRlZCBTcGFuaXNoIGFuZCBDYXRhbGFuIHRyYW5zbGF0aW9ucy4KKworRml4ZWQgdmFyaW91cyBEZWJpYW4gcGFja2FnaW5nIGlzc3VlcyAtLS0gc2VlIGRlYmlhbi9jaGFuZ2Vsb2cgZm9yCitkZXRhaWxzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzQ4Mzk2MiwgIzQ4MzAyMykKKworQWRkIGRldGVjdGlvbiBmb3IgWkZTIHZvbHVtZXMgdG8gdGhlIGxpYmJsa2lkIGxpYnJhcnkuCisKK0ZpeGVkIHNwZWxsaW5nIG1pc3Rha2VzLCB0eXBvcywgYW5kIG90aGVyd2lzZSBjbGFyaWZpZWQgbWFuIHBhZ2VzLgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDg2NDYzKQorCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeCBtYXJnaW5hbCBDIGNvZGUgaW4gcHJvYmVfbHZtMigpIGZ1bmN0aW9uIHRvIHRoZSBibGtpZCBsaWJyYXJ5IG1vcmUKK3BvcnRhYmxlIGZvciBvbGRlciBjb21waWxlcnMuCisKK0ZpeCBidWlsZCBwcm9ibGVtcyBvbiBNYWNPUyBYLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMxOTcyNDczKQorCitGaXggZXh0MmZzX3N3YXB7MTYsMzIsNjR9IGZ1bmN0aW9ucyBzbyB0aGV5IGNhbiBiZSB1c2VkIGJ5IGV4dGVybmFsCithcHBsaWNhdGlvbnMgb24gYmlnLWVuZGlhbiBtYWNoaW5lcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQ4NDg3OSkKKyAgICAKKworRTJmc3Byb2dzIDEuNDAuMTAgKE1heSAyMSwgMjAwOCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4gZGVjaWRpbmcgd2hldGhlciBvciBub3QgdG8gcmV2YWxpZGF0ZSBhIGJsa2lkIGNhY2hlIGVudHJ5LCBpZiB0aGUKK2RldmljZSdzIG10aW1lIGlzIG5ld2VyIHRoYW4gdGhlIGxhc3QgdGltZSB0aGUgY2FjaGVkIGVudHJ5IHdhcwordmFsaWRhdGVkLCBmb3JjZSBhIHJldmFsaWRhdGlvbi4KKworRml4IGEgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBidWcgaW4gZTJmc2NrIGluIHRoZSBqb3VybmFsIHJlcGxheS4KK1RoZSBjaGFuY2VzIG9mIHRoaXMgaXMgaGFwcGVuaW5nIGlzIGV4dHJlbWVseSByZW1vdGUsIGVzcGVjaWFsbHkgdGhlCitkZWZhdWx0IGRhdGE9b3JkZXJlZCBvciBkYXRhPXdyaXRlYmFjayBtb2Rlcy4gIEhvd2V2ZXIsIGlmIGEgYmxvY2sKK3doaWNoIGhhcyBiZWVuIGpvdXJuYWxsZWQgc3RhcnRzIHdpdGggdGhlIGZpcnN0IGZvdXIgYnl0ZXMgMHhjMDNiMzk5OCwKK3doZW4gZTJmc2NrIHJlcGxheXMgdGhlIGpvdXJuYWwsIHRob3NlIGZvdXIgYnl0ZXMgd2lsbCBiZSByZXBsYWNlZAord2l0aCB6ZXJvJ3MuICBGb3J0dW5hdGVseSwgaXQgaXMgaGlnaGx5LCBoaWdobHkgdW5saWtlbHkgZm9yIGUyZnNjaworbWV0YWRhdGEgdG8gYmVnaW4gd2l0aCB0aG9zZSBmYXRhbCA0IGJ5dGUgc2VxdWVuY2UsIGFuZCB1bmxlc3MKK2RhdGE9b3JkZXJlZCBtb2RlIGlzIGluIHVzZSwgZGF0YSBibG9ja3MgYXJlIG5ldmVyIGpvdXJuYWxlZC4KKworVXBkYXRlZCBHZXJtYW4sIER1dGNoLCBTd2VlZGlzaCwgYW5kIFZpZXRuYW1lc2UgdHJhbnNsYXRpb25zLgorCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIHBhY2thZ2luZyBpc3N1ZXMgLS0tIHNlZSBkZWJpYW4vY2hhbmdlbG9nIGZvcgorZGV0YWlscy4KKworUmVtb3ZlIGRlZmF1bHQgc2l6ZXMgb2YgdHlwZXMgd2hlbiBjcm9zcyBjb21waWxpbmcsIHNpbmNlIGF1dG9jb25mCisyLjUwIGNhbiBmaWd1cmUgdGhpcyBvdXQgYXV0b21hdGljYWxseSBub3cuCisKKworRTJmc3Byb2dzIDEuNDAuOSAoQXByaWwgMjcsIDIwMDgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU3VTRSdzIHNlY3VyaXR5IHRlYW0gYXVkaXRlZCB1dWlkZCBhbmQgY2FtZSB1cCB3aXRoIGEgZmV3IG1pbm9yCitpc3N1ZXMuICBOb25lIG9mIHRoZW0gYXJlIHNlcmlvdXMgZ2l2ZW4gdGhhdCB1dWlkZCBydW5zIHNldHVpZCBhcyBhCit1bnByaXZpbGVnZWQgdXNlciB3aGljaCBoYXMgbm8gc3BlY2lhbCBhY2Nlc3Mgb3RoZXIgdGhhbiBsaWJ1dWlkCitkaXJlY3RvcnksIGJ1dCBpdCdzIGdvb2QgdG8gZ2V0IHRoZW0gZml4ZWQuCisKK09uZSBhZGRpdGlvbmFsIGZpeCBpbiBleHQyZnNfc3dhcF9pbm9kZV9mdWxsKCkgbmVlZGVkIGZvciByZXNpemUyZnMgdG8KK3dvcmsgY29ycmVjdGx5IHdpdGggaW4taW5vZGUgZXh0ZW5kZWQgYXR0cmlidXRlcy4KKworVXBkYXRlZCBHZXJtYW4sIEN6ZWNoLCBEdXRjaCwgRnJlbmNoLCBQb2xpc2gsIFN3ZWVkaXNoLCBhbmQgVmlldG5hbWVzZQordHJhbnNsYXRpb25zLgorCitEZWJ1Z2ZzIHdpbGwgYXZvaWQgdXNpbmcgYSBwYWdlciBpZiB0aGUgc3RhbmRhcmQgb3V0cHV0IGlzIG5vdCBhIHR0eS4KKworRml4IGRlYnVnZnMgYW5kIHR1bmUyZnMgdG8gY29ycmVjdGx5IGhhbmRsZSBkYXlsaWdodCBzYXZpbmdzIHRpbWUgd2hlbgorcGFyc2luZyBhIHRpbWUgc3RyaW5nLgorCitGaXhlZCBzcGVsbGluZyBtaXN0YWtlcywgdHlwb3MsIGFuZCBvdGhlcndpc2UgY2xhcmlmaWVkIG1hbiBwYWdlcy4KKworRml4IGZzY2sgY29tcGxldGlvbiBiYXJzIHdoZW4gbXVsdGlwbGUgZmlsZXN5c3RlbXMgd2VyZSBiZWluZyBjaGVja2VkCitpbiBwYXJhbGxlbC4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQzMjg2NSwgQWRkcmVzc2VzIExhdW5jaHBhZCBCdWc6CisjMjAzMzIzLCBBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMTkyNjAyMykKKworRml4IGZzY2sgc28gdGhhdCBwcm9ncmVzcyBpbmZvcm1hdGlvbiBpcyBzZW50IGJhY2sgY29ycmVjdGx5IHdoZW4KK211bHRpcGxlIGZpbGVzeXN0ZW1zIGFyZSBiZWluZyBjaGVjayBhbmQgdGhlIG91dHB1dCBvZiBmc2NrIGlzIGJlaW5nCityZWRpcmVjdGVkIHRvIGEgZmlsZSBkZXNjcmlwdG9yLiAgQWxzbywgaW5jbHVkZSB0aGUgZGV2aWNlIG5hbWUgKHcvbworc3BhY2VzKSBpbiB0aGUgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gc2VudCBiYWNrIHZpYSBhIGZpbGUgZGVzY3JpcHRvci4KKyhBZGRyZXNzZXMgTGF1bmNocGFkIEJ1ZzogIzIwMzMyMywgQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzoKKyMxOTI2MDIzKQorCitUZWFjaCBmc2NrIHRvIHRyZWF0ICJleHQ0IiBhbmQgImV4dDRkZXYiIGFzIGV4dCogZmlsZXN5c3RlbXMuCisKK0lmIGxvZ3NhdmUgcmVjZWl2ZXMgYSBTSUdURVJNIG9yIFNJR0lOVCBzaWduYWwsIGl0IHdpbGwgbm93IHBhc3MgdGhhdAorc2lnbmFsIHRvIGl0cyBjaGlsZCBwcm9jZXNzLgorCitGaXggbWtlMmZzJ3MgY3JlYXRpb24gb2YgYXJlIHJlc2l6ZSBpbm9kZSB3aGVuIHRoZXJlIGlzIGEgbm9uLXN0YW5kYXJkCitzX2ZpcnN0X2RhdGFfYmxvY2sgc2V0dGluZy4KKworRml4IGJ1ZyBpbiBibGtpZCB3aGVuIHJ1biBieSBhbiB1bnByaXZpbGVnZWQgdXNlcjsgbW9zdCBkZXZpY2VzIHdlcmUKK25vdCByZXBvcnRlZCBjb3JyZWN0bHkuICA5QWRkcmVzc2VzIExhdW5jaHBhZCBCdWc6ICMyMjAyNzUpCisKK01rZTJmcyB3aWxsIG5vdCBhbGxvdyB0aGUgbG9naWNhbGx5IGluY29yZWN0IGNvbWJpbmF0aW9uIG9mCityZXNpemVfaW5vZGUgYW5kIG1ldGFfYmcsIHdoaWNoIGhhZCBwcmV2aW91c2x5IGNhdXNlZCBta2UyZnMgdG8gY3JlYXRlCithIGNvcnJ1cHQgZmlsZXlzdGVtLgorCitGaXggZnNjayBpbiBHZXJtYW4gbG9jYWxlcyBzbyB0aGF0IGEgJ2onIG1lYW5zIHllcy4KKyhBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMTk0NzY4MykKKworCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIHBhY2thZ2luZyBpc3N1ZXMgLS0tIHNlZSBkZWJpYW4vY2hhbmdlbG9nIGZvcgorZGV0YWlscy4KKworVXBkYXRlIHZhbGdyaW5kIG9wdGlvbnMgaW4gdGVzdF9zY3JpcHQgdG8gd29yayB3aXRoIHZhbGdyaW5kIDMuMi4zCisKK1VwZGF0ZSB0ZXhpbmZvLnRleCB0byBhIG11Y2ggbmV3ZXIgdmVyc2lvbiBmcm9tIHRoZSBGU0YuCisKK1JlbW92ZSBiYXNoaXNtIGZvciBjb25maWd1cmUgc2NyaXB0IGFuZCBmcm9tIHRoZSBsaWIvc3MgTWFrZWZpbGUuCitBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAxOTIxOTY5CisKK0ZpeCBzb21lIHNpbGVudGx5IGJyb2tlbiB0ZXN0czogbV9ub19vcHQsIG1fbWV0YV9iZywgYW5kIG1fcmFpZF9vcHQuCisKK0ZpeCBidWlsZCBzeXN0ZW0gc28gdGhhdCBpZiB0ZXhpbmZvIGlzIG5vdCBpbnN0YWxsZWQsIGl0IHdvbid0IHByaW50IGEKKyhoYXJtbGVzcykgZXJyb3IgbWVzc2FnZS4KKworCitFMmZzcHJvZ3MgMS40MC44IChNYXJjaCAxMywgMjAwOCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlZCBlMmltYWdlIC1JIHNvIGl0IHdvcmtzIG9uIGltYWdlIGZpbGVzIHdoaWNoIGFyZSBsYXJnZXIgdGhhbiAyR0IuCisKK0ZpeGVkIGUyZnNjaydzIGhhbmRsaW5nIG9mIGRpcmVjdG9yeSBpbm9kZXMgd2l0aCBhIGNvcnJ1cHQgc2l6ZSBmaWVsZC4gIElmCit0aGUgc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGJsb2NrcyBmb3VuZCBpbiB0aGUgaW5vZGUsIGRvbid0Cit0cnkgdG8gYWxsb2NhdGUgZXh0cmEgZW1wdHkgYmxvY2tzIGF0IHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeSB0byBtYWtlCit1cCB0aGUgZGlmZmVyZW5jZTsgdGhlcmUncyBubyBwb2ludCB0byBkb2luZyB0aGF0LiAgSW4gYWRkaXRpb24sIGlmCit0aGUgc2l6ZSBpcyBub3QgYSBtdWx0aXBsZSBvZiBhIGJsb2Nrc2l6ZSwgYWx3YXlzIGZpeCBpdC4KKworRTJmc2NrIGhhbmRsZWQgYSBwYXNzIDIgInNob3VsZCBuZXZlciBoYXBwZW4gZXJyb3IiIGJ5IG5vdCBnaXZpbmcKK2Vub3VnaCBpbmZvcm1hdGlvbiBhbmQgdGhlbiBjb3JlIGR1bXBpbmcuICBVbmZvcnR1bmF0ZWx5LCBpdCB3YXMgYWxsCit0b28gZWFzeSB0byB0cmlnZ2VyIHRoZSAic2hvdWxkIG5ldmVyIGhhcHBlbiIgc2l0dWF0aW9uIGlmIGEKK2RpcmVjdG9yeSdzIGlub2RlIHNpemUgd2FzIG5vdCBjb3JyZWN0LiAgVGhpcyBoYXMgYmVlbiBmaXhlZCwgYnV0CitlMmZzY2sgaGFzIGFsc28gYmVlbiB0YXVnaHQgaG93IHRvIGhhbmRsZSB0aGlzIHNpdHVhdGlvbiBtb3JlCitncmFjZWZ1bGx5LCBieSBzaW1wbHkgcmVtb3ZpbmcgdGhlIGlub2RlIGhhc2ggdHJlZSBpbmZvcm1hdGlvbiwgc28KK3RoYXQgaXQgY2FuIGJlIHJlYnVpbHQgYWdhaW4gYWZ0ZXIgZTJmc2NrJ3MgcGFzcyAzLiAgKEFkZHJlc3NlcworTGF1bmNocGFkIEJ1ZzogIzEyOTM5NSkKKworUmVzaXplMmZzIGhhZCBhIGJ1ZyByZXNpemluZyBsYXJnZSBpbm9kZXMgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzCit0aGF0IHdhcyBmaXhlZCBpbiAxLjQwLjY7IHVuZm9ydHVuYXRlbHksIGl0IHR1cm5lZCBvdXQgaXQgd2Fzbid0IGZpeGVkCitjb21wbGV0ZWx5IG9uIGJpZy1lbmRpYW4gc3lzdGVtcyBzdWNoIGFzIFBvd2VyUEMuICBUaGUgYnVnIHNob3VsZCBiZQorY29tcGxldGVseSBmaXhlZCBub3cuICBZYXkgZm9yIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZXMuICAoQWRkcmVzc2VzIFJlZAorSGF0IEJ1Z3ppbGxhOiAjNDM0ODkzKQorICAgIAorVXBkYXRlZCBHZXJtYW4sIEN6ZWNoLCBEdXRjaCwgUG9saXNoLCBTd2VlZGlzaCwgYW5kIFZpZXRuYW1lc2UKK3RyYW5zbGF0aW9ucy4gIE1hbnkgdGhhbmtzIHRvIFBoaWxpcHAgVGhvbWFzIGZyb20gTm92ZWxsIGZvciBzdGVwcGluZwordXAgdG8gYmVjb21lIHRoZSBuZXcgR2VybWFuIHRyYW5zbGF0aW9uIG1haW50YWluZXIhICAoQWRkcmVzc2VzIERlYmlhbgorQnVnczogIzMwMjUxMiwgIzM3MDI0NywgIzQwMTA5MiwgIzQxMjg4MikuCisKK1doZW4gZTJmc2NrIGlzIGNsZWFyaW5nIGEgY29ycnVwdCBpbm9kZSdzIEhUUkVFIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiwKK21ha2UgaXQgY2xlYXIgdGhhdCBpdCBpcyBqdXN0IGNsZWFyaW5nIHRoZSBIVFJFRSBpbmZvcm1hdGlvbiwgbm90IHRoZQorZW50aXJlIGlub2RlLgorCitGaXhlZCBzcGVsbGluZyBtaXN0YWtlcywgdHlwb3MsIGFuZCBvdGhlcndpc2UgY2xhcmlmaWVkIG1hbiBwYWdlcy4gIAorCitQcm9ncmFtbWVyJ3Mgbm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBZGQgbmV3IGZ1bmN0aW9ucywgZXh0MmZzX2RibGlzdF9nZXRfbGFzdCgpIGFuZAorZXh0MmZzX2RibGlzdF9kcm9wX2xhc3QoKSwgd2hpY2ggYWxsb3dzIHRoZSBjYWxsZXIgdG8gZXhhbWluZSB0aGUgbGFzdAorZGlyZWN0b3J5IGJsb2NrIGVudHJ5IGFkZGVkIHRvIHRoZSBsaXN0LCBhbmQgdG8gZHJvcCBpZiBpdCBuZWNlc3NhcnkuCisKK0ZpeGVkIGEgcG9ydGFiaWxpdHkgcHJvYmxlbSBpbiBsaWJibGtpZCB3aXRoIERKR1BQLgorCitGaXggYW4gb2J2aW91cyB0eXBvIGluIGFuICJpbnRlcm5hbCBlcnJvciIgbWVzc2FnZSBpbiBlMmZzY2suICBUaGFua3MKK3RvIFBoaWxpcHAgVGhvbWFzIGZvciBwb2ludGluZyB0aGlzIG91dC4KKworSWYgdGhlIGluZm8gZmlsZXMgYXJlIG5vdCBidWlsdCwgY2hhbmdlICJtYWtlIGluc3RhbGwiIHNvIGl0IGRvZXNuJ3QKK2ZhaWwgd2l0aCBhbiBlcnJvciBjb2RlLgorCisKK0UyZnNwcm9ncyAxLjQwLjcgKEZlYnJ1YXJ5IDI4LCAyMDA4KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbW92ZSBzdXBwb3J0IGZvciBjbGVhcmluZyB0aGUgU1BBUlNFX1NVUEVSIGZlYXR1cmUgZnJvbSB0dW5lMmZzLCBhbmQKK2RlcHJlY2lhdGUgdGhlIC1zIG9wdGlvbiwgc2luY2UgaXQgY2FuIHJlc3VsdCBpbiBmaWxlc3lzdGVtcyB3aGljaAorZTJmc2NrIGNhbid0IGZpeCBlYXNpbHkuICBUaGVyZSBhcmUgdmVyeSBnb29kIHJlYXNvbnMgZm9yIHdhbnRpbmcgdG8KK2Rpc2FibGUgc3BhcnNlX3N1cGVyOyB1c2VycyB3aG8gd2FudHMgdG8gdHVybiBvZmYgc3BhcnNlX3N1cGVyIGNhbiB1c2UKK2RlYnVnZnMuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzE4NDAyODYpCisgICAgCitBZGQgbWlzc2luZyBvcHRpb25zIHRvIG1rZTJmcydzIHVzYWdlIG1lc3NhZ2UuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlCitCdWc6ICMxNzUxMzkzKQorICAgIAorRml4IGJ1ZyBpbiByZXNpemUyZnMgd2hlbiBsYXJnZSAoZ3JlYXRlciB0aGFuIDEyOCBieXRlKSBpbm9kZXMgYXJlCittb3ZlZCB3aGVuIGEgZmlsZXN5c3RlbSBpcyBzaHJ1bms7IGl0IHdhcyBvbmx5IG1vdmluZyB0aGUgZmlyc3QgMTI4CitieXRlcywgc28gZXh0ZW5kZWQgYXR0cmlidXRlcyB3ZXJlIG5vdCBnZXR0aW5nIG1vdmVkLiAgKEFkZHJlc3NlcyBSZWQKK0hhdCBCdWd6aWxsYTogIzQzNDg5MykKKworRTJmc2NrIG5vdyBwcmludHMgYW4gZXhwbGljaXQgbWVzc2FnZSB3aGVuIHRoZSBiYWQgYmxvY2sgaW5vZGUgaXMKK3VwZGF0ZWQsIHRvIGF2b2lkIGNvbmZ1c2lvbiBhYm91dCB3aHkgdGhlIGZpbGVzeXN0ZW0gd2FzIG1vZGlmaWVkLgorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICM3NTY0NjApCisgICAgCitBbGxvdyBta2UyZnMgYW5kIHR1bmUyZnMgbWFuaXB1bGF0ZSB0aGUgbGFyZ2VfZmlsZSBmZWF0dXJlLgorUHJldmlvdXNseSB3ZSBqdXN0IGxldCB0aGUga2VybmVsIGFuZCBlMmZzY2sgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LAorYnV0IGUyZnNjayB3aWxsIG5vIGxvbmdlciBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZSBsYXJnZV9maWxlIGZlYXR1cmUuCitJdCBzdGlsbCBpc24ndCByZWFsbHkgbmVjZXNzYXJ5IHRvIHdvcnJ5IGFib3V0IHRoaXMgZmVhdHVyZSBmbGFnCitleHBsaWNpdGx5LCBidXQgc29tZSB1c2VycyBzZWVtIHRvIGNhcmUuICAoQWRkcmVzc2VzIFJlZCBIYXQgQnVnemlsbGE6CisjMjU4MzgxKQorICAgIAorU3VwcHJlc3MgbWVzc2FnZSBhYm91dCBhbiBvbGQtc3R5bGUgZnN0YWIgaWYgdGhlIGZzdGFiIGZpbGUgaXMgZW1wdHkuCisoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0NjgxNzYpCisgICAgCitGaXggKHJlYWxseSBtaW5vcikgYnVnIGluIGRlYnVnZnMncyBmaW5kX2ZyZWVfYmxvY2sgc28gaXQgYXZvaWRzCityZXBvcnRpbmcgYSBmcmVlIGJsb2NrIG1vcmUgdGhhbiBvbmNlIGlmIHRoZXJlIGFyZSB0b28gZmV3IGZyZWUgYmxvY2tzCitpbiB0aGUgZmlsZXN5c3RlbS4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMTA5NjMxNSkKKyAgICAKK0NoYW5nZSBlMmZzY2sgdG8gbm8gbG9uZ2VyIGNsZWFyIHRoZSBMQVJHRV9GSUxFUyBmZWF0dXJlIGZsYWcKK2F1dG9tYXRpY2FsbHksIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgPiAyR0IgZmlsZXMgaW4gdGhlIGZpbGVzeXN0ZW0uCitJdCdzIGJlZW4gYWxtb3N0IGEgZGVjYWRlIHNpbmNlIHRoZXJlIGhhdmUgYmVlbiBrZXJuZWxzIHRoYXQgZG9uJ3QKK3N1cHBvcnQgdGhpcyBmbGFnLCBhbmQgZTJmc2NrIGNsZWFycyBpdCBxdWlldGx5IHdpdGhvdXQgdGVsbGluZyB0aGUKK3VzZXIgd2h5IHRoZSBmaWxlc3lzdGVtIGhhcyBiZWVuIGNoYW5nZWQuCisgICAgCitGaXggYnVnIHdoaWNoIGNvdWxkIGNhdXNlIGxpYmJsa2lkIHRvIHNlZyBmYXVsdCBpZiBhIGRldmljZSBtYXBwZXIKK3ZvbHVtZSBkaXNhcHBlYXJzIHdoaWxlIGl0IGlzIGJlaW5nIHByb2JlZC4gIChBZGRyZXNzZXMgUmVkSGF0CitCdWd6aWxsYTogIzQzMzg1NykKKyAgICAKK0luaGFuY2UgZTJmc2NrJ3MgcmVwb3J0aW5nIG9mIHVuc3VwcG9ydGVkIGZpbGVzeXN0ZW0gZmVhdHVyZSBmbGFncy4KKyhBZGRyZXNzZXMgU291cmNlZm9yZ2UgRmVhdHVyZSBSZXF1ZXN0OiAjMTE3NTgwOCkKKyAgICAKK0ZpeCBvcHRpb24gc3ludGF4IGluIGR1bXBlMmZzIGZvciBleHBsaWNpdCBzdXBlcmJsb2NrIGFuZCBibG9ja3NpemUKK3BhcmFtZXRlcnMuICBXaGF0IHdhcyBjdXJyZW50bHkgZG9jdW1lbnRlZCBpbiB0aGUgbWFuIHBhZ2UgaGFzIGJlZW4KK2Jyb2tlbiBmb3Igc29tZSB0aW1lLCBkdWUgdG8gZ2V0b3B0KCkgaW1wbGVtZW50YXRpb24gY2hhbmdlcy4gIFRoZQorb3B0aW9uIHN5dGF4IGhhcyBiZWVuIGNoYW5nZWQgdG8gb25lIHdoaWNoIGlzIGNhbiBiZSBtb3JlIHBvcnRhYmxlCitzdXBwb3J0ZWQgYW5kIHdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgZm9ybWF0IGZvciBleHRlbmRlZCBvcHRpb25zCitpbiBta2UyZnMgYW5kIHR1bmUyZnMuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzE4MzA5OTQpCisgICAgCitBZGQgc3VwcG9ydCB0byB0dW5lMmZzIHRvIGNsZWFyIHRoZSByZXNpemVfaW5vZGUgZmVhdHVyZS4gIFRoaXMKK3JlcXVpcmVzIGFuIGZzY2sgYWZ0ZXJ3YXJkcy4gIChBZGRyZXNzZXMgUmVkIEhhdCBCdWd6aWxsYTogIzE2NzgxNikKKworVGVhY2ggYmxraWQgdG8gZGV0ZWN0IExWTTIgcGh5c2ljYWwgdm9sdW1lcy4gIChBZGRyZXNzZXMgUmVkIEhhdAorQnVnemlsbGE6ICM0MDkzMjEpCisKK0FkZCBzdXBwb3J0IGZvciBzZXR0aW5nIFJBSUQgc3RyaWRlIGFuZCBzdHJpcGUtd2lkdGggdmlhIG1rZTJmcyBhbmQKK3R1bmUyZnMuICBUZWFjaCBkdW1wZTJmcyB0byBwcmludCB0aGUgUkFJRCBwYXJhbWV0ZXJzLgorCitBZGQgc3VwcG9ydCBmb3Igc2V0dGluZyBuZXcgc3VwZXJibG9jayBmaWVsZHMgdG8gZGVidWdmcydzCitzZXRfc3VwZXJfdmFsdWUuCisKK0FkZCBzdXBwb3J0IGZvciBwcmludGluZyAibW9zdGx5LXByaW50YWJsZSIgZXh0ZW5kZWQgYXR0cmlidXRlcyBpbgorRGVidWdmcy4KKworQWRkIHN1cHBvcnQgZm9yIHRoZSAtTSBvcHRpb24gdG8gZnNjaywgd2hpY2ggY2F1c2VzIGl0IHRvIGlnbm9yZQorbW91bnRlZCBmaWxlc3lzdGVtLgorCitGaXggdXVpZGQgc28gdGhhdCBpdCBjcmVhdGVzIHRoZSBwaWQgZmlsZSB3aXRoIHRoZSBjb3JyZWN0IHBpZCBudW1iZXIuCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzE4OTMyNDQpCisKK0ZpeCB2YXJpb3VzIGdjYyAtV2FsbCB3YXJuaW5ncy4KKworVXBkYXRlIEN6ZWNoLCBEdXRjaCwgUG9saXNoLCBTd2VlZGlzaCwgYW5kIFZpZXRuYW1lc2UgdHJhbnNsYXRpb25zCisKK0ZpeGVkIHNwZWxsaW5nIG1pc3Rha2VzLCB0eXBvcywgYW5kIG90aGVyd2lzZSBjbGFyaWZpZWQgbWFuIHBhZ2VzLiAgCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIFBhdGNoOiAjMTM5OTMyNSkKKworCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIHBhY2thZ2luZyBpc3N1ZXMgLS0tIHNlZSBkZWJpYW4vY2hhbmdlbG9nIGZvcgorZGV0YWlscy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQ2NjkyOSkKKworQWRkIG5ldyBmbGFnIEVYVDJfRkxBR19OT05GUkVFX09OX0VSUk9SIGV4dDJmc19vcGVuMigpIHdoaWNoIHJldHVybnMgYQorcGFydGlhbGx5IGZpbGxlZC1pbiBmaWxlc3lzdGVtIG9iamVjdCBvbiBhbiBlcnJvciwgc28gdGhhdCBlMmZzY2sgY2FuCitwcmludCBtb3JlIGludGVsbGlnZW50IGVycm9yIG1lc3NhZ2VzLgorICAgIAorQWRkIGEgbmV3IGZ1bmN0aW9uIGUycF9lZGl0X2ZlYXR1cmUyKCkgd2hpY2ggYWxsb3dzIHRoZSBjYWxsZXIgdG8KK3NwZWNpZnkgd2hpY2ggZmVhdHVyZSBmbGFncyBhcmUgT0sgdG8gc2V0IG9yIGNsZWFyLCBhbmQgd2hpY2ggcmV0dXJucworbW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBmZWF0dXJlIGZsYWdzIHdoaWNoIGFyZSBub3QgYWxsb3dlZCB0bworYmUgc2V0L2NsZWFyZWQuCisgICAgCitTZXQgdGhlIEMgbG9jYWxlIGluIHRoZSB0ZXN0X3NjcmlwdCBkcml2ZXIgc2luY2UgaXQgdXNlcyBbQS1aYS16XS4KKyhBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMTg5MDUyNikKKworVXNlIGZjbnRsIGxvY2tpbmcgaW5zdGVhZCBvZiBsb2NrZiBpbiBsaWJ1dWlkIHNpbmNlIEN5Z3dpbiBkb2Vzbid0CitzdXBwb3J0IGxvY2tmKCkuCisKK0NoYW5nZSBjb25maWd1cmUuaW4gdG8gYXZvaWQgdXNpbmcgdGhlICdkYycgY29tbWFuZCB1bmxlc3MgaXQgaXMKK2Fic29sdXRlbHkgbmVlZGVkLiAoaS5lLiwgd2hlbiB1c2luZyBwYXJzaW5nIGEgV0lQLXN0eWxlIHZlcnNpb24KK251bWJlcikgIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMTg5MzAyNCkKKworQWRkIHBvcnRhYmlsaXR5IGNoZWNrcyB0byBzdXBwb3J0IGNvbXBpbGF0aW9uIHVuZGVyIERKR1BQLgorCitVcGRhdGUgdG8gdGhlIGxhdGVzdCBzYW1iYSB0ZGIgY29kZSBiZWZvcmUgdGhlIExHUEx2MyBjaGFuZ2UsIHdoaWNoCitmaXhlcyBhIHJlYWxsb2MoKSBsZWFrIG9uIGZhaWx1cmUuCisKK0ZpeCBtZW1vcnkgbGVhayBpbiBleHQyZnNfYWxsb2NfYmxvY2soKS4KKworRml4IG1ha2VmaWxlIGRlcGVuZGVuY3kgaXNzdWVzIGZvciB2YXJpb3VzIGluc3RhbGwgdGFyZ2V0cy4KKyhBZGRyZXNzZXMtU291cmNlZm9yZ2UtUGF0Y2hlczogIzE5MDM0ODQsICMxOTAzNDY2LCAjMTkwMzQ1NikKKyAgICAKK0ltcHJvdmUgZGVzY3JpcHRpb25zIGZvciB0aGUgcl9tb3ZlX2l0YWJsZSBhbmQgcl9yZXNpemVfaW5vZGUgdGVzdHMuCisKKworRTJmc3Byb2dzIDEuNDAuNiAoRmVicnVhcnkgOSwgMjAwOCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FkZCBzdXBwb3J0IGZvciByZXR1cm5pbmcgbGFiZWxzIGZvciBVREYgZmlsZXN5c3RlbXMgaW4gdGhlIGJsa2lkCitsaWJyYXJ5LgorCitGaXggYnVnIGluIHRoZSBibGtpZCBsaWJyYXJ5IHdoZXJlIGNhY2hlZCBmaWxlc3lzdGVtcyB3YXMgbm90IGJlaW5nCitmbHVzaGVkIHdoZW4gb3BlbmluZyBVU0IgZGV2aWNlcyByZXR1cm5lZCB0aGUgZXJyb3IgRU5PTUVESVVNLgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDYzNzg3KQorCitBZGRlZCBsb2dpYyB0byB0aGUgYmxraWQgbGlicmFyeSB0byBhdXRvbWF0aWNhbGx5IGNob29zZSB3aGV0aGVyIGEKK2ZpbGVzeXN0ZW0gc2hvdWxkIGJlIG1vdW50ZWQgYXMgZXh0NCBvciBleHQ0ZGV2LCBhcyBhcHByb3ByaWF0ZS4KKworQWxsb3cgdHVuZTJmcyB0byBzZXQgYW5kIGNsZWFyIHRoZSB0ZXN0X2ZzIGZsYWcgb24gZXh0NCBmaWxlc3lzdGVtcy4KKworRml4IGEgYnVnIGluIGUyZnNjayB3aGljaCBjYXVzZWQgaXQgdG8gY29yZSBkdW1wIGlmIGUyZnNwcm9ncyBoYWQgYmVlbgorY29uZmlndXJlZCB3aXRoIC0tZW5hYmxlLWpiZC1kZWJ1Zy4KKworRG9jdW1lbnQgdGhlIEJMS0lEX0ZJTEUgZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gdGhlIGxpYmJsa2lkIG1hbiBwYWdlCisKK1Byb2dyYW1tZXIncyBOb3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVXBkYXRlIGUyZnNwcm9ncyB0cmFuc2xhdGlvbiB0ZW1wbGF0ZSBhbmQgVmlldG5hbWVzZSBhbmQgQ3plY2ggdHJhbnNsYXRpb25zCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIHBhY2thZ2luZyBpc3N1ZXMgLS0tIHNlZSBkZWJpYW4vY2hhbmdlbG9nIGZvcgorZGV0YWlscy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6ICM0MzYwNTgpCisKK0Rvbid0IHRyeSB0byBjcmVhdGUgJERFU1RESVIvZXRjL2luaXQuZCBhcyBwYXJ0IG9mIG1ha2UgaW5zdGFsbCBhcyB3ZQorZG9uJ3QgaW5zdGFsbCB0aGUgaW5pdC5kIHNjcmlwdCAoYW5kIGl0J3Mgbm90IHRoZSByZWNvbW1lbmRlZCB3YXkgdG8KK3N0YXJ0IHV1aWRkIGFueXdheSkuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzE4ODUwODUpCisKK1VzZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB0byBmaXggYSB0aGVvcmV0aWNhbCByYWNlIGNvbmRpdGlvbiBpZiB0d28KK3RocmVhZHMgdHJ5IHRvIGZvcm1hdCBhbiB1bmtub3duIGVycm9yIGNvZGUgYXQgdGhlIHNhbWUgdGltZSBpbiB0aGUKK2NvbV9lcnIgbGlicmFyeS4KKworCitFMmZzcHJvZ3MgMS40MC41IChKYW51YXJ5IDI3LCAyMDA4KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IGEgcG90ZW50aWFsIG92ZXJmbG93IGJpZyBpbiBlMmltYWdlIGlmIHRoZSBkZXZpY2UgbmFtZSBpcyB0b28KK2xvbmcuCisKK01rZTJmcyB3aWxsIG5vdyBjcmVhdGUgbmV3IGZpbGVzeXN0ZW1zIHdpdGggMjU2IGJ5dGUgaW5vZGVzIGFuZCB0aGUKK2V4dF9hdHRyIGZlYXR1cmUgZmxhZyBieSBkZWZhdWx0LiAgVGhpcyBhbGxvd3MgZm9yIG11Y2ggYmV0dGVyIGZ1dHVyZQorY29tcGF0aWJpdHkgd2l0aCBleHQ0IGFuZCBzcGVlZHMgdXAgZXh0ZW5kZWQgYXR0cmlidXRlcyBldmVuIG9uIGV4dDMKK2ZpbGVzeXN0ZW1zLgorCitUZWFjaCBlMmZzY2sgdG8gaWdub3JlIGNlcnRhaW4gInNhZmUiIGZpbGVzeXN0ZW0gZmVhdHVyZXMgd2hpY2ggYXJlCitzZXQgYXV0b21hdGljYWxseSBieSB0aGUga2VybmVsLiAgSGF2aW5nIHRoZSBrZXJuZWwgc2V0IGZlYXR1cmVzCithdXRvbWFnaWNhbGx5IGJlaGluZCB0aGUgdXNlcidzIGJhY2sgaXMgYSBiYWQgaWRlYSwgYW5kIHdlIHNob3VsZCB0cnkKK3RvIGJyZWFrIHRoZSBrZXJuZWwgb2YgdGhpcyBoYWJpdCwgZXNwZWNpYWxseSBmb3IgdGhlIG5ld2VyIGV4dDQKK2ZlYXR1cmUgZmxhZ3MuICBCdXQgZm9yIG5vdywgd2Ugd2lsbCB0cnkgdG8gYXZvaWQgbmVlZGxlc3MgZnVsbCBjaGVja3MKK3doaWNoIGNhbiBhbm5veSB1c2VycyB3aG8gYXJlIGRvaW5nIGZyZXNoIGluc3RhbGxzLgorCitBZGQgc3VwcG9ydCBpbiB0dW5lMmZzIGFuZCBta2UyZnMgZm9yIG1ha2luZyBhIGZpbGVzeXN0ZW0gYXMgYmVpbmcgIm9rCit0byBiZSB1c2VkIHdpdGggdGVzdCBrZXJuZWwgY29kZSIuICBUaGlzIHdpbGwgYmUgbmVlZGVkIGZvciB1c2luZyB0ZXN0CitmaWxlc3lzdGVtcyB3aXRoIHRoZSBsYXRlc3QgZXh0NCBrZXJuZWwgY29kZS4KKworQ2hhbmdlIGUyZnNjayAtZkQgc28gdGhhdCBpdCBzb3J0cyBub24taHRyZWUgZGlyZWN0b3JpZXMgYnkgaW5vZGUKK251bWJlcnMgaW5zdGVhZCBvZiBieSBuYW1lLCBzaW5jZSB0aGF0IG9wdGltaXplcyBwZXJmb3JtYW5jZXMgbXVjaAorbW9yZSBzaWduaWZpY2FudGx5LiAgKEFkZHJlc3Nlcy1Tb3VyY2Vmb3JnZS1GZWF0dXJlLVJlcXVlc3Q6ICM1MzI0MzkpCisKK0lmIGUyaW1hZ2UgZmlsbHMgdGhlIGRpc2ssIGZpeCBpdCBzbyBpdCBleGl0cyByaWdodCBhd2F5IGluc3RlYWQgb2YKK3NwZXdpbmcgbGFyZ2UgbnVtYmVycyBvZiBlcnJvciBtZXNzYWdlcy4KKyhBZGRyZXNzZXMtU291cmNlZm9yZ2UtRmVhdHVyZS1SZXF1ZXN0OiAjNjA2NTA4KQorCitJZiBmdHJ1bmNhdGU2NCgpIGlzIG5vdCBhdmFpbGFibGUgZm9yIHJlc2l6ZTJmcywgbGV0IGl0IHVzZSBmdHJ1Y2F0ZSgpCitpbnN0ZWFkLCBidXQgaGF2ZSBpdCBjaGVjayB0byBzZWUgaWYgdGhlIHNpemUgd291bGQgZ2V0IHRydW5jYXRlZCwgYW5kCitza2lwIGNhbGxpbmcgZnRydW5jYXRlIGluIHRoYXQgY2FzZS4KKworQWRkIHN1cHBvcnQgZm9yIGRldGVjdGluZyBIRlMrIGZpbGVzeXN0ZW1zIGluIHRoZSBibGtpZCBsaWJyYXJ5LgorCitBZGQgc3VwcHJ0IGluIHRoZSBibGtpZCBsaWJyYXJ5IGZvciBleHQ0L2V4dDRkZXYgZmlsZXN5c3RlbXMuCisKK0ZpeCBhIGJ1ZyBpbiBibGtpZCB3aGVyZSBpdCBjb3VsZCBkaWUgb24gYSBmbG9hdGluZyBwb2ludCBleGNlcHRpb24KK3doZW4gcHJlc2VudGVkIHdpdGggYSBjb3JydXB0IHJlaXNlcmZzIGltYWdlLgorCitGaXggYmxraWQncyBoYW5kbGluZyBvZiBudGZzIFVVSUQncyBzbyB0aGF0IGxlYWRpbmcgemVyb3MgYXJlIHByaW50ZWQKK3N1Y2ggdGhhdCBVVUlEIHN0cmluZyBpcyBhIGZpeGVkIGxlbmd0aC4KKworQWRkIHNhbXBsZSBweXRob24gYmluZGluZ3MgZm9yIHRoZSB1dWlkIGxpYnJhcnkgdG8gdGhlIGNvbnRyaWIKK2RpcmVjdG9yeS4gIChBZGRyZXNzZXMtU291cmNlZm9yZ2UtUGF0Y2hlczogIzc3ODgxNykKKworRml4IGRlYnVnZnMncyAnbHNkZWwnIGNvbW1hbmQgc28gaXQgdXNlcyBleHQyZnNfYmxvY2tfaXRlcmF0ZTIgc28gaXQKK3dpbGwgd29yayB3aXRoIGxhcmdlIGZpbGVzLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBGZWF0dXJlIFJlcXVlc3Q6CisjMTI1NzUwMCBhbmQgU291cmNlZm9yZ2UgU3VwcG9ydCBSZXF1ZXN0OiAjMTI1MzUxMSkKKyAgICAKK0FsbG93IHRoZSBkZWJ1Z2ZzICd1bmRlbCcgY29tbWFuZCB0byB1bmRlbGV0ZSBhbiBpbm9kZSB3aXRob3V0IGxpbmtpbmcKK2l0IHRvIGEgc3BlY2lmaWMgZGVzdGluYXRpb24gZGlyZWN0b3J5LCBzaW5jZSB0aGlzIG1pZ2h0IHJlcXVpcmUKK2FsbG9jYXRpbmcgYmxvY2tzIHRoYXQgY291bGQgb3ZlcndyaXRlIHNvbWUgeWV0LXRvLWJlLXJlY292ZXJlZAorZGVsZXRlZCBmaWxlcy4gIChBZGRyZXNzZXMtU291cmNlZm9yZ2UtRmVhdHVyZS1SZXF1ZXN0OiAjOTY3MTQxKQorCitVcGRhdGUgU3dlZGlzaCB0cmFuc2xhdGlvbnMgZnJvbSB0aGUgVHJhbnNsYXRpb24gUHJvamVjdC4KKworUHJvZ3JhbW1lcidzIE5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXggY29uZmlndXJlIGhhbmRsaW5nIG9mIC0tc2JpbmRpciAod2hpY2ggc2hvdWxkIHJhcmVseSBiZSB1c2VkLCBidXQKK3NvbWVvbmUgZGlkIGNvbXBsYWluLCBzbyBsZXQncyBmaXggaXQpLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6CisjNDk4MzgxKQorCitVcGRhdGVkIGUyZnNwcm9ncy5zcGVjIGZpbGUgdG8gaW5jbHVkZSBhIG5ldyB1dWlkZCBwYWNrYWdlCisKK1VzZSBwa2ctY29uZmlnIHRvIGRldGVybWluZSB3aGVyZSB0byBmaW5kIHRoZSBkZXZtYXBwZXIgbGlicmFyeSBzbyB3ZQorY2FuIGZpbmQgb3V0IHdoZXJlIGl0IGlzIGxvY2F0ZWQgb24gZGlmZmVyZW50IGRpc3RyaWJ1dGlvbnMuCisKK0ZpeCBNYWtlZmlsZSByYWNlIHNvIHRoYXQgIm1ha2UgLWozIGRpc3RjbGVhbiIgd29ya3MgY29ycmVjdGx5CisKK0ZpeCBwb3J0YWJpbGl0eSBwcm9ibGVtcyBvbiBub24tTGludXgvbm9uLUh1cmQvbm9uLU1hc2l4IHN5c3RlbXMsCitlc3BlY2lhbGx5IG9uIE1hY09TIFggc3lzdGVtcy4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnczogIzE4NjE2MzMsCisjMTgxOTAzNCwgIzE4NjM4MTkpCisKK0ZpeGVkIHNwZWxsaW5nIG1pc3Rha2VzLCB0eXBvcywgYW5kIG90aGVyd2lzZSBjbGFyaWZpZWQgbWFuIHBhZ2VzLgorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNDU5NDAzLCAjNDU5NDc1LCAjNDU5NjE0KQorCitSZW1vdmUgdGhlIC0tZW5hYmxlLWR5bmFtaWMtc3RhdGljIGNvbmZpZ3VyZSBvcHRpb24sIGFuZCBidWlsZCBlMmZzY2sKK2R5bmFtaWNhbGx5IGJ5IGRlZmF1bHQuICBJZiB0aGUgdXNlciB3YW50cyBlMmZzY2suc3RhdGljLCBoZS9zaGUgd2lsbAorbmVlZCB0byBidWlsZCBpdCB2aWEgIm1ha2UgLUMgZTJmc2NrIGUyZnNjay5zdGF0aWMiCisKK0ZpeCB2YXJpb3VzIGJ1aWxkIHdhcm5pbmdzIGR1ZSB0byBtaXNzaW5nIHByb3RvdHlwZXMuCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIFBhdGNoOiAjMTg2MTY2MywgIzE4NjE2NTkpCisKKworRTJmc3Byb2dzIDEuNDAuNCAoRGVjZW1iZXIgMzEsIDIwMDcpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW1wcm92ZSB0aW1lLWJhc2VkIFVVSUQgZ2VuZXJhdGlvbi4gIEEgbmV3IGRhZW1vbiB1dWlkZCwgaXMgc3RhcnRlZAorYXV0b21hdGljYWxseSBieSBsaWJ1dWlkIGlmIG5lY2Vzc2FyeS4gIFRoaXMgZGFlbW9uIGlzIHNldHVpZCB0byBhbGxvdwordXBkYXRlcyB0byAvdmFyL2xpYi9saWJ1dWlkLCBzbyB0aGUgY2xvY2sgc2VxdWVuY2UgbnVtYmVyIGNhbiBiZQorc3RvcmVkIGFuZCBzbyBpZiB0aGUgY2xvY2sgaXMgc2V0IGJhY2t3YXJkcywgaXQgY2FuIGJlIGRldGVjdGVkLgorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMxNTI5NjcyLCBBZGRyZXNzZXMgUmVkIEhhdCBCdWd6aWxsYToKKyMyMzM0NzEpCisKK0ZpbHRlciBvdXQgdGhlIE5FRURTX1JFQ09WRVJZIGZlYXR1cmUgZmxhZyB3aGVuIHdyaXRpbmcgb3V0IHRoZSBiYWNrdXAKK3N1cGVyYmxvY2tzLiAgVGhpcyBhdm9pZHMgZTJmc2NrIGZyb20gY29uY2x1ZGluZyB0aGF0IGEgZnVsbAorZmlsZXN5c3RlbSBjaGVjayBpcyByZXF1aXJlZCBiZWZvcmUgYmFja2luZyB1cCB0aGUgc3VwZXJibG9jayBkdWUgdG8KK2NoYW5nZXMgaW4gdGhlIGZlYXR1cmUgZmxhZ3MuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0NTQ5MjYpCisKK0ZpeCBmc2NrIHRvIG9ubHkgdHJlYXQgdGhlICcjJyBjaGFyYWN0ZXIgYXMgYSBjb21tZW50IGF0IHRoZSBiZWdpbm5pbmcKK29mIHRoZSBsaW5lIGluIC9ldGMvZnN0YWIuICBPdGhlcndpc2UgZnN0YWJzIGZvciB0aGUgZnVzZSBmaWxlc3lzdGVtCit3aWxsIGNhdXNlIGZzY2sgdG8gaXNzdWUgYW4gYm9ndXMgd2FybmluZyBtZXNzYWdlLgorKEFkZHJlc3NlcyBHZW50b28gYnVnOiAjMTk1NDA1LCBBZGRyZXNzZXMgU291cmNlZm9yZ2UgYnVnOiAjMTgyNjE0NykKKworRm9ybWF0IGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgY2hhcmFjdGVycyB3aXRoIHRoZSBoaWdoIGVpZ2h0aCBiaXQgc2V0Cit3aGVuIHByaW50aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgYmxraWQgY2FjaGUsIHRvIHByZXZlbnQgZmlsZXN5c3RlbXMKK3dpdGggZ2FyYmFnZSBsYWJlbHMgZnJvbSBzZW5kaW5nIGVzY2FwZSBzZXF1ZW5jZXMgdG8gdGhlIHVzZXIncyBzY3JlZW4KK3RoYXQgbWlnaHQsIGZvciBleGFtcGxlIHBsYWNlIGl0IGluIGdyYXBoaWNzIG1vZGUuICAoQWRkcmVzc2VzIFVidW50dQorQnVnOiAjNzgwODcpCisKK0ZpeCBzaWduLWV4dGVuc2lvbiBwcm9ibGVtIG9uIDY0LWJpdCBzeXN0ZW1zIGluIGluIHRoZSBjb21fZXJyCitsaWJyYXJ5LiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMxODA5NjU4KQorCitBdm9pZCBkaXZpc2lvbiBieSB6ZXJvIGVycm9yIHdoZW4gcHJvYmluZyBhbiBpbnZhbGlkIEZBVCBmaWxlc3lzdGVtIGluCit0aGUgYmxraWQgbGlicmFyeS4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMTgzMTYyNykKKworVXBkYXRlIER1dGNoLCBQb2xpc2gsIGFuZCBWaWV0bmFtZXNlIHRyYW5zbGF0aW9ucyBmcm9tIHRoZSBUcmFuc2xhdGlvbgorUHJvamVjdC4gIFJlbW92ZSB0aGUgUndhbmRhbiB0cmFuc2xhdGlvbiB1cG9uIGFkdmljZSBvZiB0aGUKK1RyYW5zbGF0aW9uIFByb2plY3QuCisKK1Byb2dyYW1tZXIncyBOb3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworRml4IHRoZSBsaWJzcyAibWFrZSBjaGVjayIgcmVncmVzc2lvbiB0ZXN0IHNvIHRoYXQgaXQgd29ya3MgaWYgdGhlCitjdXJyZW50IGRpcmVjdG9yeSBpcyBub3QgaW4gdGhlIHVzZXIncyBwYXRoIG9yIGlmIHRoZSBsaWJzcyBzaGFyZWQKK2xpYnJhcnkgaXMgbm90IGluc3RhbGxlZC4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMTg0ODk3NCkKKworRml4ZWQgc3BlbGxpbmcgbWlzdGFrZXMsIHR5cG9zLCBhbmQgb3RoZXJ3aXNlIGNsYXJpZmllZCBtYW4gcGFnZXMuCisoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNDQ0ODgzLCAjNDQxODcyKQorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNDM3NzIwLCAjNDUxMTcyLCAjNDU4MDE3KQorCitGaXggYnVpbGQgZmFpbHVyZSBvbiBub24tTGludXgvbm9uLUh1cmQvbm9uLU1hc2l4IHN5c3RlbXMuCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzE4NTk3NzgpCisKK0ZpeCBIdXJkIHBvcnRhYmlsaXR5IGlzc3Vlcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQzNzcyMCkKKworCitFMmZzcHJvZ3MgMS40MC4zIChEZWNlbWJlciA1LCAyMDA3KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgd2hlcmUgYW4gdW50cnVzdGVkIGZpbGVzeXN0ZW0KK2NhbiBiZSBjb3JydXB0ZWQgaW4gc3VjaCBhIHdheSB0aGF0IGEgcHJvZ3JhbSB1c2luZyBsaWJleHQyZnMgd2lsbAorYWxsb2NhdGUgYSBidWZmZXIgd2hpY2ggaXMgZmFyIHRvbyBzbWFsbC4gIFRoaXMgY2FuIGxlYWQgdG8gZWl0aGVyIGEKK2NyYXNoIG9yIHBvdGVudGlhbGx5IGEgaGVhcC1iYXNlZCBidWZmZXIgb3ZlcmZsb3cgY3Jhc2guICBObyBrbm93bgorZXhwbG9pdHMgZXhpc3QsIGJ1dCBtYWluIGNvbmNlcm4gaXMgd2hlcmUgYW4gdW50cnVzdGVkIHVzZXIgd2hvCitwb3NzZXNzZXMgcHJpdmlsZWdlZCBhY2Nlc3MgaW4gYSBndWVzdCBYZW4gZW52aXJvbm1lbnQgY291bGQgY29ycnVwdCBhCitmaWxlc3lzdGVtIHdoaWNoIGlzIHRoZW4gYWNjZXNzZWQgYnkgdGhlIHB5Z3J1YiBwcm9ncmFtLCBydW5uaW5nIGFzCityb290IGluIHRoZSBkb20wIGhvc3QgZW52aXJvbm1lbnQsIHRodXMgYWxsb3dpbmcgdGhlIHVudHJ1c3RlZCB1c2VyIHRvCitnYWluIHByaXZpbGVnZWQgYWNjZXNzIGluIHRoZSBob3N0IE9TLiAgVGhhbmtzIHRvIHRoZSBNY0FmZWUgQVZFUlQKK1Jlc2VhcmNoIGdyb3VwIGZvciByZXBvcnRpbmcgdGhpcyBpc3N1ZS4gIChBZGRyZXNzZXMgQ1ZFLTIwMDctNTQ5Ny4pCisKK0ZpeCBodWVyaXN0aWNzIGluIGJsa2lkIHdoaWNoIGNvdWxkIGNhdXNlIGEgZGlzayB3aXRob3V0IHBhcnRpdGlvbnMgdG8KK2JlIGluY29ycmVjdGx5IHNraXBwZWQgd2hlbiBhIGxvb3BiYWNrIGRldmljZSBpcyBwcmVzZW50LiAgKEFkZHJlc3NlcworUmVkIEhhdCBCdWd6aWxsYSAjNDAwMzIxLikKKworRml4IGUyaW1hZ2Ugc28gdGhhdCBpbiByYXcgbW9kZSBpdCBkb2VzIG5vdCBjcmVhdGUgYW4gaW1hZ2UgZmlsZSB3aGljaAoraXMgb25lIGJ5dGUgdG9vIGxhcmdlLgorCitDaGFuZ2UgbWtlMmZzJ3MgdXNhZ2UgbWVzc2FnZSBzbyBpdCByZWNvbW1lbmRzIHRoZSBwcmVmZXJyZWQgLUUgb3B0aW9uCitpbnN0ZWFkIG9mIHRoZSBkZXByZWNhdGVkIC1SIG9wdGlvbi4KKworRW5oYW5jZSB0aGUgYmxraWQgbGlicmFyeSBzbyBpdCB3aWxsIHJlY29nbml6ZSBzcXVhc2hmcyBmaWxlc3lzdGVtcy4KKyhBZGRyZXNzZXMgUmVkIEhhdCBCdWd6aWxsYSAjMzA1MTUxLikKKworRW5oYW5jZSBlMmZzY2sgc28gaXQgd2lsbCBmb3JjZSB0aGUgYmFja3VwIHN1cGVyYmxvY2tzIHRvIGJlIGJhY2tlZCB1cAoraWYgdGhlIGZpbGVzeXN0ZW0gaXMgY29uc2lzdGVudCBhbmQga2V5IGNvbnN0YW50cyBoYXZlIGJlZW4gY2hhbmdlZAorKGkuZS4sIGJ5IGFuIG9uLWxpbmUgcmVzaXplKSBvciBieSBlMmZzY2sgaW4gdGhlIGNvdXJzZSBvZiBpdHMKK29wZXJhdGlvbnMuCisKK0VuaGFuY2UgYmxraWQncyBkZXRlY3Rpb24gb2YgRkFUIGZpbGVzeXN0ZW1zOyBzbyB0aGF0IFVTQiBkaXNrcyB3aXRoCitvbmx5IGEgc2luZ2xlIGJvb3RhYmxlIHBhcnRpdGlvbiB3aWxsIG5vdCBnZXQgbWlzc2VkLgorCitFMmZzY2sgd2lsbCBubyBsb25nZXIgbWFyayBhIGZpbGVzeXN0ZW0gYXMgaW52YWxpZCBpZiBpdCBoYXMgdGltZQorZXJyb3JzIChpLmUuLCBpZiBzdXBlcmJsb2NrIG1vdW50IHRpbWUgb3IgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZQorZnV0dXJlKSBhbmQgdGhlIHVzZXIgcmVmdXNlcyB0byBmaXggdGhlIHByb2JsZW0uCisKK1RoZSBVYnVudHUgaW5pdCBzY3JpcHRzIGRvbid0IHByb3Blcmx5IHNldCB0aGUgc3lzdGVtIHRpbWUgY29ycmVjdGx5Citmcm9tIGhhcmR3YXJlIGNsb2NrIGlmIHRoZSBoYXJkd2FyZSBjbG9jayBpcyBjb25maWd1cmVkIHRvIHRpY2sgbG9jYWwKK3RpbWUgaW5zdGVhZCBvZiBHTVQgdGltZS4gIFdvcmsgYXJvdW5kIHRoaXMgYXMgYmVzdCBhcyB3ZSBjYW4gYnkKK3Byb3ZpZGluZyBhbiBvcHRpb24sIGJ1Z2d5X2luaXRfc2NyaXB0cywgaW4gL2V0Yy9lMmZzY2suY29uZiB3aGljaCBjYW4KK2JlIHNldCBvbiBVYnVudHUgc3lzdGVtcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjNDQxMDkzLCBhbmQgVWJ1bnR1CitCdWcgIzEzMTIwMS4pCisKK0ZpeCBmc2NrIHRvIGlnbm9yZSAvZXRjL2ZzdGFiIGVudHJpZXMgZm9yIGJpbmQgbW91bnRzLiAgKEFkZHJlc3NlcyBSZWQKK0hhdCBCdWd6aWxsYSAjMTUxNTMzLikKKworRml4IGUyZnNjayBzbyB0aGF0IGlmIHRoZSBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQsIGJ1dCBzdGlsbCBsb29rcwordmFndWVseSBsaWtlIGFuIGV4dDIvMy80IHN1cGVyYmxvY2ssIHRoYXQgaXQgYXV0b21hdGljYWxseSB0cmllcyB0bworZmFsbCBiYWNrIHRvIHRoZSBiYWNrdXAgc3VwZXJibG9jaywgaW5zdGVhZCBvZiBmYWlsaW5nIHdpdGggYSBoYXJkCitlcnJvci4KKworTWFrZSB0aGUgZTJmc3Byb2dzIHByb2dyYW0gbW9yZSByb2J1c3Qgc28gdGhhdCB0aGV5IHdpbGwgbm90IGNyYXNoCit3aGVuIG9wZW5pbmcgYSBjb3JydXB0IGZpbGVzeXN0ZW0gd2hlcmUgc19pbm9kZV9zaXplIGlzIHplcm8uCisKK0NoYW5nZSBlMmZzY2sgc28gaXQgdXNlcyBzc2NhbmYoKSBpbnN0ZWFkIG9mIGF0b2koKSBzbyBpdCBub24tbnVtZXJpYworYXJndW1lbnRzIGFyZSBkZXRlY3RlZCBhcyBzdWNoIGFuZCB0aGUgcGFyc2UgZXJyb3IgaXMgcmVwb3J0ZWQgdG8gdGhlCit1c2VyLiAgIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjNDM1MzgxLikKKworQ2hhbmdlIGUyZnNjayBzbyBpdCB3aWxsIG5vdCBjb21wbGFpbiBpZiBhIGZpbGUgaGFzIGJsb2NrcyByZWFsbG9jYXRlZAordXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgYSBzeXN0ZW0ncyBwYWdlIHNpemUuCisKK0ZpeCBidWcgaW4gZXh0MmZzX2NoZWNrX2Rlc2MoKSB3aGljaCB3aWxsIGNhdXNlIGUyZnNjayB0byBjb21wbGFpbgorYWJvdXQgKHZhbGlkKSBmaWxlc3lzdGVtcyB3aGVyZSB0aGUgaW5vZGUgdGFibGUgZXh0ZW5kcyB0byB0aGUgbGFzdAorYmxvY2sgb2YgdGhlIGJsb2NrIGdyb3VwLiAgKEFkZHJlc3NlcyBSZWQgSGF0IEJ1Z3ppbGxhICMyMTQ3NjUuKQorCitGaXggYSBidWcgaW4gZXh0MmZzX2luaXRpYWxpemUoKSB3aGljaCBjYXVzZXMgbWtlMmZzIHRvIGZhaWwgd2hpbGUKK2FsbG9jYXRpbmcgaW5vZGUgdGFibGVzIGZvciBzb21lIHJlbGF0aXZlbHkgcmFyZSBvZGQgZGlzayBzaXplcy4KKyhBZGRyZXNzZXMgUmVkIEhhdCBCdWd6aWxsYSAjMjQxNzY3LikKKworQWRkIENhdGFsYW4gdHJhbnNsYXRpb24gYW5kIHVwZGF0ZSBEdXRjaCBhbmQgU3dlZGlzaCB0cmFuc2xhdGlvbnMKK2Zyb20gdGhlIFRyYW5zbGF0aW9uIFByb2plY3QuCisKK0ZpeCBiaWctZW5kaWFuIGJ5dGUtc3dhcHBpbmcgYnVnIGluIGV4dDJmc19zd2FwX2lub2RlX2Z1bGwoKS4gIFdlCitzdGlsbCBoYWQgYW4gaXNzdWUgd2hlbiB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGV0aGVyIHdlIG5lZWQgdG8KK2J5dGUtc3dhcCBmYXN0IHN5bWxpbmtzIHRoYXQgY29udGFpbmVkIGV4dGVuZGVkIGF0dHJpYnV0ZXMuCisKK0ZpeGVkIHNwZWxsaW5nIG1pc3Rha2VzLCB0eXBvcywgYW5kIG90aGVyd2lzZSBjbGFyaWZpZWQgbWFuIHBhZ2VzLgorKEFkZHJlc3NlcyBTb3VyY2VGb3JnZSBCdWcgIzE4MjEzMzMuKQorCisKK1Byb2dyYW1tZXIncyBOb3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworRml4IG1rZTJmcyB0ZXN0cyB0byBhdm9pZCBuZWVkaW5nIGFueSBzaWduaWZpY2FudCBeTSAoQ1IpIGNoYXJhY3RlcnMKKworQWRkICJtYWtlIGNoZWNrIiB0byB0aGUgUlBNIHNwZWMgZmlsZQorCitGaXggIm1ha2UgaW5zdGFsbCIgYW5kICdtYWtlIHVuc3RhbGwiIGluIG1pc2MvTWFrZWZpbGUuaW4gc28gdGhhdCBpdAord29ya3MgY29ycmVjdGx5IHdoZW4gdGhlIHByZWZpeCBpcyBub3QgdGhlIHJvb3QgZGlyZWN0b3J5LgorCitGaXggdGhlIHJlc2l6ZTJmcyB0ZXN0cywgcl9tb3ZlX2l0YWJsZSBhbmQgcl9yZXNpemVfaW5vZGUsIHNvIHRoZXkKK2NsZW5hIHVwIGFmdGVyIHRoZW1zZWx2ZXMgYnkgZGVsZXRpbmcgdGhlIHRlc3QuaW1nIHRlbXBvcmFyeSBmaWxlCithZnRlciBjb21wbGV0aW5nIHRoZSB0ZXN0LgorCitGaXhlZCBhIGNvcm5lciBjYXNlIGJ1ZyBleHQyZnNfdW5saW5rKCkgd2hlbiB0cnlpbmcgdG8gZGVsZXRlIHRoZQorZmlyc3QgZGlyZWN0b3J5IGVudHJ5IGluIGEgZGlyZWN0b3J5IGJsb2NrIGFuZCB0aGUgbGFzdCBkaXJlY3RvcnkKK2VudHJ5IGluIHRoZSBwcmV2aW91cyBkaXJlY3RvcnkgYmxvY2sgaXMgbm90IGluIHVzZS4gIEZvcnR1bmF0ZWx5CitleHQyZnNfdW5saW5rKCkgaXMgb25seSB1c2VkIGJ5IGRlYnVnZnMgYW5kIGUyZnNjaywgYW5kIGluIGUyZnNjayBpbgorcGxhY2VzIHdoZXJlIGl0IGlzIGV4dHJlbWVseSB1bmxpa2VseSB0byBydW4gaW50byB0aGlzIGNvcm5lciBjYXNlLgorCitGaXggbWlzc2luZyBkZXBlbmRlbmN5IHdoaWNoIHdvdWxkIGN1YXNlIHBhcmFsbGVsIGJ1aWxkcyB0byBmYWlsLgorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWcgIzE4NDIzMzEuKQorCitGaXggYSBidWlsZCBlcnJvciBvbiBuZXdlciBnY2MgY2F1c2VkIGJ5IGxpYi9leHQyZnMvaXNtb3VudGVkLmMKK2NhbGxpbmcgb3BlbihPX0NSRUFURSkgd2l0aCBhIG1pc3NpbmcgbW9kZSBwYXJhbWV0ZXIuCisKK0ZpeCB0aGUgdGVzdF9zcy5jIGluIGxpYi9zcyBzbyBpdCBjYW4gYmUgdXNlZCBhcyBhbiBleGFtcGxlCithcHBsaWNhdGlvbiBwcm9ncmFtIGZvciB0aGUgbGlicmFyeSBhcyB3ZWxsIGFzIGEgcmVncmVzc2lvbiB0ZXN0CitzdWl0ZS4KKworRml4IGV4dDJmc19kYmxpc3RfZGlyX2l0ZXJhdGUoKSBzbyB0aGF0IGVycm9yIGNvZGVzIGFuZCBhYm9ydCBjb2RlcworYXJlIHByb3Blcmx5IHBhc3NlZCBiYWNrIHVwIHRocm91Z2ggdGhlIGNhbGwgc3RhY2suCisKK0UyZnNwcm9ncyAxLjQwLjIgKEp1bHkgMTIsIDIwMDcpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBIHJlY2VudCBjaGFuZ2UgdG8gZTJmc2NrX2FkZF9kaXJfaW5mbygpIHRvIHVzZSB0ZGIgZmlsZXMgdG8gY2hlY2sKK2ZpbGVzeXN0ZW1zIHdpdGggYSB2ZXJ5IGxhcmdlIG51bWJlciBvZiBmaWxlc3lzdGVtcyBoYWQgYSB0eXBvIHdoaWNoCitjYXVzZWQgdXMgdG8gcmVzaXplIHRoZSB3cm9uZyBkYXRhIHN0cnVjdHVyZS4gIFRoaXMgd291bGQgY2F1c2UgYQorYXJyYXkgb3ZlcnJ1biBsZWFkaW5nIHRvIG1hbGxvYyBwb2ludGVyIGNvcnJ1cHRpb25zIGFuZCBzZWdmYXVsdHMuCitTaW5jZSB3ZSBub3JtYWxseSBjYW4gdmVyeSBhY2N1cmF0ZWx5IHByZWRpY3QgaG93IGJpZyB0aGUgdGhlIGRpcmluZm8KK2FycmF5IG5lZWRzIHRvIGJlLCB0aGlzIGJ1ZyBvbmx5IGdvdCB0cmlnZ2VyZWQgb24gdmVyeSBiYWRseSBjb3JydXB0ZWQKK2ZpbGVzeXN0ZW1zLgorCitGaXggYSBidWcgaW4gZTJmc2NrIHdoaWNoIGNhdXNlZCBpdCB0byBpbmNvcnJlY3RseSBzYWx2YW5nZQorZGlyZWN0b3JpZXMgd2hlbiB0aGUgbGFzdCBlbnRyeSdzIHJlY19sZW4gaXMgYm9ndXNseSB0b28gYmlnLiAgVGhpcworcmVzdWx0ZWQgaW4gYSBub25zZW5zZSBmaWxlc3lzdGVtIGNvcnJ1cHRpb24gdG8gYmUgcmVwb3J0ZWQsIGFuZAorcmVxdWlyZWQgYSBzZWNvbmQgcnVuIG9mIGUyZnNjayB0byBmdWxseSBmaXggdXAgdGhlIGRpcmVjdG9yeS4KKworVXBkYXRlIHR1bmUyZnMgbWFuIHBhZ2UgdG8gaW5jbHVkZSBtb3JlIGRpc2N1c3Npb24gb2YgcmVzZXJ2ZWQgYmxvY2tzCisoQWRkcmVzc2VzIExhdW5jaHBhZCBidWcgIzQ3ODE3KQorCitVcGRhdGUgVHVya2lzaCwgUG9saXNoLCBEdXRjaCwgYW5kIFZpZXRuYW1lc2UgUE8gZmlsZXMgZnJvbSB0aGUKK1RyYW5zbGF0aW9uIFByb2plY3QKKyAgICAKKworRTJmc3Byb2dzIDEuNDAuMSAoSnVseSA3LCAyMDA3KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXggYnVnIHdoaWNoIGNvdWxkIGNhdXNlIGxpYmJsa2lkIHRvIGxvb3AgZm9yZXZlci4gIFdoZW4gcmV2YWxpZGF0aW5nCithIHBhcnRpdGlvbiB3aGVyZSB0aGVyZSBpcyBvYnNvbGV0ZSBpbmZvcm1hdGlvbiBpbiAvZXRjL2Jsa2lkLnRhYiwgd2UKK2VuZCB1cCBmcmVlaW5nIGEgdGhlIHR5cGUgdGFnIHdpdGhvdXQgY2xlYXJpbmcgZGV2LT5iaWRfdHlwZSwgY2F1c2luZworYmxraWRfdmVyaWZ5KCkgdG8gbG9vcCBmb3JldmVyLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDMyMDUyKQorICAgIAorVGhlIFR1cmtpc2ggdHJhbnNsYXRpb24gaGFzIGEgYnVnIGluIGl0IHdoZXJlIGl0IGhhcyB0aGUgdHJhbnNsYXRpb24KK29mICJFQGUgJyVEbicgaW4gJXAgKCVpKSIgdG8gIkVARSIuICBUaGlzIGNhdXNlcyBARSB0byBiZSBleHBhbmRlZCBhdAorQEUsIHJlY3Vyc2l2ZWx5LCBmb3JldmVyLCB1bnRpbCB0aGUgc3RhY2sgZmlsbHMgdXAgYW5kIGUyZnNjayBjb3JlCitkdW1wcy4gIFdlIGZpeCB0aGlzIGJ5IG1ha2luZyBlMmZzY2sgc3RvcCBALWV4cGFuc2lvbnMgYWZ0ZXIgYQorcmVjdXJzaXZlIGRlcHRoIG9mIDEwLCB3aGljaCBpcyBmYXIgbW9yZSB0aGFuIHdlIG5lZWQuCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzE2NDYwODEpCisgICAgCitDb21waWxlIHRoZSBkZWZhdWx0IG1rZTJmcy5jb25mIGludG8gbWtlMmZzIHByb2dyYW0uICBQZW9wbGUgYXJlCitnZXR0aW5nIHN1cnByaXNlZCBieSBta2UyZnMgY3JlYXRpbmcgZmlsZXN5c3RlbXMgd2l0aCBkaWZmZXJlbnQKK2RlZmF1bHRzIHRoYW4gZWFybGllciB2ZXJzaW9ucyBvZiBta2UyZnMgaWYgbWtlMmZzLmNvbmYgaXMgbm90CitwcmVzZW50LiAgU28gd2Ugbm93IGNyZWF0ZSBhIGJ1aWx0IGluIHZlcnNpb24gb2YgbWtlMmZzLmNvbmYgZmlsZQord2hpY2ggaXMgdXNlZCBieSBta2UyZnMgaWYgdGhlIC9ldGMvbWtlMmZzLmNvbmYgaXMgbm90IHByZXNlbnQuCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlQnVnOiAjMTc0NTgxOCkKKworSW1wcm92ZSB0aGUgY29uZmlnL3BhcnNlX3R5cGVzLnNoIGhlbHBlciBzY3JpcHQuICBGaXggYSBwb3RlbnRpYWwKK3NlY3VyaXR5IHByb2JsZW0gaWYgZTJmc3Byb2dzIGlzIGJ1aWx0IGFzIHJvb3QgKGFzIEdlbnRvbyBkb2VzISkuICBJbgorYWRkaXRpb24gZml4IHRoZSBzY3JpcHQgYW5kIGhvdyBpdCBpcyBjYWxsZWQgZnJvbSB0aGUgY29uZmlndXJlIHNjcmlwdAorc28gdGhhdCBpdCBkb2VzIHRoZSByaWdodCB0aGluZyB3aGVuIGNyb3NzLWNvbXBpbGluZy4gIChGaXhlcyBHZW50b28KK2J1ZzogIzE0NjkwMykKKyAgICAKK1VwZGF0ZSBWaWV0bmFtZXNlLCBGcmVuY2gsIGFuZCBEdXRjaCBQTyBmaWxlcyBmcm9tIHRoZSBUcmFuc2xhdGlvbgorUHJvamVjdC4gIEFsc28gY3JlYXRlZCBhIG5ldyBlMmZzcHJvZ3MucG90IGZpbGUgZm9yIHRyYW5zbGF0b3IuCisgICAgCitGaXggYm9ndXMgc3RyaXAgcGVybWlzc2lvbiBlcnJvcnMgd2hlbiBidWlsZGluZyB1bmRlciBEZWJpYW4uICBXaGVuCitidWlsZGluZyB0aGUgZTJmc3Byb2dzIGRwa2cncywgdGhlIGRoX3N0cmlwIGNvbW1hbmQgZW1pdHMgYSBsYXJnZQorbnVtYmVyIG9mIGVycm9yIG1lc3NhZ2VzIGNhdXNlZCBieSB0aGUgcGVybWlzc2lvbnMgbm90IGJlaW5nIHJpZ2h0LgorU28gcnVuIGRoX2ZpeHBlcm1zIGJlZm9yZSBydW5uaW5nIGRoX3N0cmlwLgorCitQcm9ncmFtbWVyJ3MgTm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZCBuZXcgZnVuY3Rpb246IHByb2ZpbGVfc2V0X2RlZmF1bHQoKS4gIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgdmFsdWUKK29mIHRoZSBwc2V1ZG8gZmlsZSAiPGRlZmF1bHQ+Ii4gIElmIHRoZSBmaWxlICI8ZGVmYXVsdD4iIGhhZAorcHJldmlvdXNseSBiZWVuIHBhc3NlZCB0byBwcm9maWxlX2luaXQoKSwgdGhlbiBkZWZfc3RyaW5nIHBhcmFtZXRlcgord2lsbCBiZSBwYXJzZWQgYW5kIHVzZWQgYXMgdGhlIHByb2ZpbGUgaW5mb3JtYXRpb24gZm9yIHRoZSAiPGRlZmF1bHQ+IgorZmlsZS4KKyAgICAKK0ZpeCBta19jbWRzJ3MgZXJyb3IgcmVwb3J0aW5nIHNvIHRoYXQgaXQgaXMgdW5hbWJpZ3VvdXMgdGhhdCBpdCBpcyB0aGUKK21rX2NtZHMgc2NyaXB0IHdoaWNoIGlzIGdlbmVyYXRpbmcgdGhlIGVycm9yLiAgKE9idmlhdGVzIEdlbnRvbyBwYXRjaDoKK2UyZnNwcm9ncy0xLjMyLW1rX2NtZHMtY29zbWV0aWMucGF0Y2gpCisgICAgCitGaXggdGhlIHRlc3Qgc3VpdGUgdG8gdXNlIExDX0FMTCBpbnN0ZWFkIG9mIExBTkcuICBMQ19BTEwgaXMgdGhlICJoaWdoCitwcmlvcml0eSIgZW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCBvdmVycmlkZXMgYWxsIG90aGVycywgd2hlcmUgYXMKK0xBTkcgaXMgdGhlIGxvd2VzdCBwcmlvcnR5IGVudmlyb25tZW50IHZhcmlhYmxlLiAgSWYgTENfQUxMIGlzIHNldCwgaXQKK2RvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgTEFORywgTEFOR1VBR0UsIExDX0NPTExBVEUsIExDX01FU1NBR0VTLCBhbmQKK3RoZSBhbGwgdGhlIHJlc3QgYXJlIHNldC4gIFRoaXMgd2lsbCBhc3N1cmUgdGhhdCB0aGUgbG9jYWxlIHdoZW4KK3J1bm5pbmcgdGhlIHRlc3Qgc3VpdGVzIGlzIHRoZSAiQyIgbG9jYWxlLiAgKE9idmlhdGVzIEdlbnRvbyBwYXRjaDoKK2UyZnNwcm9ncy0xLjM4LXRlc3RzLWxvY2FsZS5wYXRjaCkKKyAgICAKKworRTJmc3Byb2dzIDEuNDAgKEp1bmUgMjksIDIwMDcpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IGRpdmlkZSBieSB6ZXJvIGVycm9yIGluIGJsa2lkJ3MgTlRGUyBwcm9iaW5nIGxvZ2ljLgorCitBZGQgbmV3IGJsa2lkIC1nIG9wdGlvbiB3aGljaCBjYXVzZXMgdGhlIGJsa2lkIGNhY2hlIHRvIGJlIGdhcmJhZ2UKK2NvbGxlY3RlZC4KKworRml4IGEgYnVnIGluIGxpYmJsa2lkIHdoaWNoIGNvdWxkIGNhdXNlIHRoZSBpbnRlcm5hbCBmaWVsZCBiaWRfdHlwZSB0bworYmVjb21lIGNvcnJ1cHRlZC4gIEZvcnR1bmF0ZWx5IGJpZF90eXBlIGlzbid0IHVzZWQgbXVjaCwgYW5kIGJpZF9sYWJlbAorYW5kIGJpZF91dWlkIGlzIG9ubHkgdXNlZCBieSBkZWJ1Z2dpbmcgY29kZSwgc28gdGhlIGltcGFjdCBvZiB0aGlzIGJ1Zword2FzIHZlcnkgbWlub3IuCisKK01rZTJmcyB3aWxsIG5vdyBzdG9yZSB0aGUgUkFJRCBzdHJpZGUgdmFsdWUgd2hlbiBhIGZpbGVzeXN0ZW0gaXMKK2NyZWF0ZWQgd2l0aCBhIHJlcXVlc3RlZCBSQUlEIHN0cmlkZSwgYW5kIHRoZW4gdXNlIGl0IGF1dG9tYXRpY2FsbHkgaW4KK3Jlc2l6ZTJmcy4KKworTWtlMmZzIGhhcyBhIHNhbml0eSBjaGVjayBhZGRlZCB0byBtYWtlIHN1cmUgKGlub2RlX3NpemUgKiBudW1faW5vZGVzKQoraXNuJ3QgdG9vIGJpZy4gIEluIHNvbWUgY2FzZXMgTHVzdHJlIHVzZXJzIGhhdmUgdHJpZWQgc3BlY2lmeWluZyBhbgoraW5vZGUgc2l6ZSBvZiA0MDk2IGJ5dGVzLCB3aGlsZSBrZWVwaW5nIGFuIGlub2RlIHJhdGlvIG9mIG9uZSBpbm9kZQorcGVyIDQwOTYgYnl0ZXMuICAKKworSW1wcm92ZSBzYW5pdHkgY2hlY2sgaW4gZTJmc2NrJ3MgYWxnb3JpdGhtIGZvciBmaW5kaW5nIGEgYmFja3VwCitzdXBlcmJsb2NrLCBzbyB0aGF0IGl0IHdvbid0IGFjY2lkZW50YWxseSBmaW5kIGEgc3VwZXJibG9jayB0aGF0IHdhcworbG9jYXRlZCBpbiB0aGUgam91cm5hbCwgYW5kIHRoZW4gbGF0ZXIgcmVqZWN0IGl0IGFzIGJlaW5nIG5vdCBhIHZhbGlkCitiYWNrdXAgc3VwZXJibG9jay4KKworRml4IGUyZnNjayBnZXRfc2l6ZSBsb2dpYyBzbyB0aGF0IGl0IHdpbGwgd29yayB3aXRoIHRoZSBMaW51eCBmbG9wcHkKK2RyaXZlci4gIFRoZSBMaW51eCBmbG9wcHkgZHJpdmVyIGlzIGEgYml0IGRpZmZlcmVudCBmcm9tIHRoZSBvdGhlcgorYmxvY2sgZGV2aWNlIGRyaXZlcnMsIGluIHRoYXQgaWYgdGhlIGRldmljZSBoYXMgYmVlbiBvcGVuZWQgd2l0aAorT19FWENMLCBpdCBkaXNhbGxvd3MgYW5vdGhlciBvcGVuKCksIGV2ZW4gaWYgdGhlIHNlY29uZCBvcGVuKCkgZG9lcworbm90IGhhdmUgdGhlIE9fRVhDTCBmbGFnLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDEwNTY5KQorCitGaXggZXJyb3IgY2hlY2tpbmcgb2YgYmFkYmxvY2sncyBsYXN0LWJsb2NrIGFuZCBzdGFydC1ibG9jayBhcmd1bWVudHMuCisoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0MTY0NzcpCisKK0ZpeCBlMmZzY2sgc28gdGhhdCBpdCBkb2Vzbid0IG92ZXJ3cml0ZSB0aGUgYmFja3VwIHN1cGVyYmxvY2tzIHdoZW4KK3JlY292ZXJpbmcgYSBqb3VybmFsIHVudGlsIHRoZSBtYXN0ZXIgc3VwZXJibG9jayBoYXMgYmVlbiBjb25maXJtZWQgYXMKK2JlaW5nIHNhbmUuCisKK0NoYW5nZSB0aGUgYmxraWQgbGlicmFyeSB0byBiZSBtdWNoIG1vcmUgcGFyYW5vaWQgYWJvdXQgY29uY2x1ZGluZwordGhhdCBhIHBhcnRpdGlvbiBjb250YWlucyBhbiBOVEZTIGZpbGVzeXN0ZW0sIGFuZCBmZXRjaCB0aGUgVVVJRCBhbmQKK0xBQkVMIGluZm9ybWF0aW9uIGZyb20gTlRGUyBmaWxlc3lzdGVtcy4gIChBZGRyZXNzZXMgTGF1bmNocGFkIEJ1ZzoKKyMxMTAxMzgpCisKK0ZhY3RvciBvdXQgdGhlIGNvZGUgd2hpY2ggc2V0cyB0aGUgZGVmYXVsdCBqb3VybmFsIHNpemUgYW5kIG1vdmUgaXQKK2ludG8gbGliZXh0MmZzLgorCitFbmhhbmNlIGUyZnNjayBzbyBpdCB3aWxsIHJlY3JlYXRlIHRoZSBleHQzIGpvdXJuYWwgaWYgdGhlIG9yaWdpbmFsCitqb3VybmFsIGlub2RlIHdhcyBjbGVhcmVkIHRvIGR1ZSBpdCBiZWluZyBjb3JydXB0IGFmdGVyIGZpbmlzaGluZyB0aGUKK2ZpbGVzeXN0ZW0gY2hlY2suCisKK0ZpeCBlMmZzY2sgc28gdGhhdCBpdCB1cGRhdGVzIHRoZSBqb3VybmFsIGlub2RlIGlmIGl0IGlzIGNvcnJ1cHRlZCBhbmQKK3RoZSBiYWNrdXAgam91cm5hbCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzdXBlcmJsb2NrIHdhcyBzdWNjZXNzZnVsbHkKK3VzZWQgdG8gcmVjb3ZlciB0aGUgZmlsZXN5c3RlbS4KKworRml4IGUyZnNjayBzbyB0aGF0IGl0IGNoZWNrcyBhbGwgb2YgdGhlIGJsb2NrcyBpbiB0aGUgam91cm5hbCBpbm9kZQorZm9yIHZhbGlkaXR5LiAgVGhlIG9yaWdpbmFsIGNvZGUgb25seSBjaGVja2VkIHRoZSBkaXJlY3QgYmxvY2tzIHRvCittYWtlIHN1cmUgdGhlIGpvdXJuYWwgaW5vZGUgd2FzIHNhbmUuICBVbmZvcnR1bmF0ZWx5LCBpZiBzb21lIG9yIGFsbAorb2YgdGhlIGluZGlyZWN0IG9yIGRvdWJseSBpbmRpcmVjdCBibG9ja3Mgd2VyZSBjb3JydXB0ZWQsIHRoaXMgd291bGQKK25vdCBiZSBjYXVnaHQuCisKK0FkZCBzdXBwb3J0IGluIGJsa2lkIHRvIGRldGVjdCBMVUtTIGVuY3J5cHRlZCBwYXJ0aXRpb25zLgorCitBZGQgZXh0cmEgc2FuaXR5IGNoZWNrcyBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlcyBpbiB0aGUgY2FzZSB3aGVyZSB0aGUKK3NpemUgaXMgemVybyBidXQgdGhlIG9mZnNldCBpcyB2ZXJ5IGxhcmdlLgorCitGaXggYnl0ZS1zd2FwcGluZyBpc3N1ZXMgZm9yIGxhcmdlIGlub2RlcyBpbiBleHQyZnNfcmVhZF9pbm9kZV9mdWxsKCkKK2FuZCBleHQyZnNfZ2V0X25leHRfaW5vZGVfZnVsbCgpLgorCitDbGFyaWZ5IHRoZSBjb3B5cmlnaHQgbGljZW5zZXMgdXNlZCBieSB0aGUgdmFyaW91cyBsaWJyYXJpZXMgaW4KK3RoZSB0b3AtbGV2ZWwgQ09QWUlORyAgZmlsZSAoUmVkIEhhdCBCdWd6aWxsYTogMTY2MDU4KQorCitNYWtlIG1rZTJmcydzIGRlZmF1bHRzIHdoZW4gL2V0Yy9ta2UyZnMuY29uZiBkb2Vzbid0IGV4aXN0IG1vcmUgc2FuZS4KKworRml4IG1rZTJmcyBhbmQgZGVidWdmcyB0byBzdXBwb3J0IGxhcmdlICg+IDE2IGJpdCkgdWlkJ3MgYW5kIGdpZCdzLgorCitSZW1vdmUgY2hlY2sgaW4gZTJmc2NrIHdoaWNoIHJlcXVpcmVzIEVBJ3MgaW4gaW5vZGVzIHRvIGJlIHNvcnRlZDsKK3RoZXkgZG9uJ3QgbmVlZCB0byBiZSBzb3J0ZWQsIGFuZCBlMmZzY2sgd2FzIHByZXZpb3VzbHkgd3JvbmdseQorY2xlYXJpbmcgdW5zb3J0ZWQgRUEncyBzdG9yZWQgaW4gdGhlIGlub2RlIHN0cnVjdHVyZS4KKworQWxsb3cgbWtlMmZzIG9yIHR1bmUyZnMgdG8gY3JlYXRlIGEgc3Vic3RhbnRpYWxseSBsYXJnZXIgam91cm5hbCAodXAKK3RvIDEwLDI0MCwwMDAgYmxvY2tzKS4KKworRml4IE1EIHN1cGVyYmxvY2sgZGV0ZWN0aW9uLCBhbmQgbWFrZSBzdXJlIHRoZSBjb3JyZWN0IFVVSUQgaXMKK3JlcG9ydGVkIGZyb20gdGhlIE1EIHN1cGVyYmxvY2suCisKK0ZpeCBhIHNpZ25lZCB2cy4gdW5zaWduZWQgYnVnIGluIGRlYnVnZnMuCisKK0VuaGFuY2UgZGVidWdmcydzIGRhdGUgcGFyc2VyIHNvIHRoYXQgaXQgYWNjZXB0cyBpbnRlZ2VyIHZhbHVlcy4KKworRml4IGUyZnNjaydzIHBhc3MxYyBhY2NvdW50aW5nIHNvIGl0IGRvZXNuJ3QgdGVybWluYXRlIHRvbyBlYXJseSBpZiBhCitmaWxlIHdpdGggbXVsdGlwbHkgY2xhaW1lZCBibG9ja3MgaXMgaGFyZCBsaW5rZWQuIG9yIG5vdCBhdCBhbGwgaWYgdGhlCityb290IGRpcmVjdG9yeSBjb250YWlucyBzaGFyZWQgYmxvY2tzCisKK0VuaGFuY2UgZGVidWdmcyBzbyBpdCBjYW4gbW9kaWZ5IHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9ycyB1c2luZyB0aGUKK2NvbW1hbmQgc2V0X2Jsb2NrX2dyb3VwX2Rlc2NyaXB0b3IuCisKK0ltcHJvdmUgZTJmc2NrJ3MgcmVwb3J0aW5nIG9mIEkvTyBlcnJvcnMgc28gaXQncyBjbGVhcmVyIHdoYXQgaXQgd2FzCit0cnlpbmcgdG8gZG8gd2hlbiBhbiBlcnJvciBoYXBwZW5zCisKK0ZpeCBhIGJ1ZyBpbiBpbiBob3cgZTJmc3Byb2dzIGJ5dGUgc3dhcHMgaW5vZGVzIGNvbnRhaW5pbmcgZmFzdAorc3ltbGlua3MgdGhhdCBoYXZlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuICAoQWRkcmVzc2VzIFJlZCBIYXQgQnVnemlsbGE6CisjMjMyNjYzIGFuZCBMVEMgQnVnemlsbGE6ICMyNzYzNCkKKworRml4IHBvdGVudGlhbCBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBleHQyZnNfZ2V0X2RldmljZV9zaXplKCkgaW4gYW4KK2Vycm9yIGNhc2UuCisKK0FkZCBsaWJyZWFkbGluZS5zby41IHN1cHBvcnQgdG8gbGlic3MuCisKK0ltcG92ZSBiYWRibG9ja3MgLW4vLXcgZXhjbHVzaXZlIHVzYWdlIG1lc3NhZ2UuCisKK0ZpeCBkdW1wX3VudXNlZCBzZWdmYXVsdCBpbiBkZWJ1Z2ZzIHdoZW4gYSBmaWxlc3lzdGVtIGlzIG5vdCBvcGVuCisKK0ZpeCBtZW1vcnkgbGVhayBpbiBibGtpZCBsaWJyYXJ5LiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDEzNjYxKQorCitBbGxvdyB0aGUgZGVidWdmcyBsY2QgY29tbWFuZCB0byB3b3JrIHcvbyBhIGZpbGVzeXN0ZW0gYmVpbmcgb3Blbi4KKyhBZGRyZXNzZXMgTFRDIEJ1Z3ppbGxhICMyNzUxMykKKworRml4IGUyZnNjayB0byBjbGVhciBpX3NpemUgZm9yIHNwZWNpYWwgZGV2aWNlcyB3aXRoIGEgYm9ndXMgaV9ibG9ja3MKK2ZpZWxkIG9uIHRoZSBmaXJzdCBwYXNzLgorCitGaXggZTJmc2NrIHRvIHNldCB0aGUgZmlsZSB0eXBlIG9mIHRoZSAnLi4nIGVudHJ5IHdoZW4gY29ubmVjdGluZworYSBkaXJlY3RvcnkgdG8gbG9zdCtmb3VuZC4gIChBZGRyZXNzZXMgTHVzdHJlIEJ1ZzogIzExNjQ1KQorCitFbmhhbmNlIGUyZnNjayB0byByZWNvdmVyIGRpcmVjdG9yaWVzIHdob3NlIG1vZGVzIGZpZWxkIHdlcmUgY29ycnVwdGVkCit0byBsb29rIGxpa2Ugc3BlY2lhbCBmaWxlcy4gIFRoaXMgaXMgcHJvYmFibHkgb25seSB1c2VmdWwgaW4KK2FydGlmaWNpYWwgdGVzdCBjYXNlcywgYnV0IGl0IHdpbGwgYmUgdXNlZnVsIGlmIHdlIGV2ZXIgZG8gdGhlICJpbm9kZXMKK2luIGRpcmVjdG9yeSIgaWRlYSBmb3IgZXh0NC4KKworQWxsb3cgZGVidWdmcyB0byBkdW1wIChhbmQgcmR1bXApID4gMkdCIGZpbGVzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOgorIzQxMjYxNCkKKworRml4IHJlc2l6ZTJmcyBwYXJzaW5nIG9mIHNpemUgcGFyYW1ldGVyIChpbiBzZWN0b3IgdW5pdHMpLiAgVGhpcyB3YXMKK2FjdHVhbGx5IGEgYnVnIGluIGxpYmUycCdzIHBhcnNlX251bV9ibG9ja3MoKSBmdW5jdGlvbi4gIFdoZW4gaGFuZGxpbmcKK3RoZSAncycgc3VmZml4LCBpdCB3YXMgaWdub3JpbmcgdGhlIGJsb2Nrc2l6ZSBpbmZvcm1hdGlvbiBwYXNzZWQgaW4KK2Zyb20gdGhlIGNhbGxlciBhbmQgYWx3YXlzIGludGVycHJldGluZyB0aGUgbnVtYmVyIGluIHRlcm1zIG9mIGEgMWsKK2Jsb2Nrc2l6ZS4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQwODI5OCkKKworVGhlcmUgd2FzIGEgZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uIGVycm9yIHdoaWNoIGNvdWxkIGNhdXNlIGUyZnNjayB0bworbG9vcCBmb3JldmVyIG9uIHJlYWxseSBiaWcgZmlsZXN5c3RlbXMgd2l0aCBhIGxhcmdlIGlub2RlIGNvdW50LgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDExODM4KQorCitGaXggbWVtb3J5IGxlYWsgaW4gZXh0MmZzX3dyaXRlX25ld19pbm9kZSgpCisKK0FkZCBzdXBwb3J0IGZvciB1c2luZyBhIHNjcmF0Y2ggZmlsZXMgZGlyZWN0b3J5IHRvIHJlZHVjZSBlMmZzY2sncworbWVtb3J5IHV0aWxpemF0aW9uIG9uIHJlYWxseSBiaWcgZmlsZXN5c3RlbXMuICBUaGlzIHVzZXMgdGhlIFREQgorbGlicmFyeS4gIFNlZSB0aGUgW3NjcmF0Y2hfZmlsZXNdIHNlY3Rpb24gb2YgdGhlIGUyZnNjay5jb25mIG1hbiBwYWdlCitmb3IgbW9yZSBkZXRhaWxzLgorCitGaXhlZCB0eXBlLXB1bm5pbmcgYnVnIHdoaWNoIGNhdXNlZCBkdW1wZTJmcyB0byBjcmFzaCBvbiB0aGUgQXJtCitwbGF0Zm9ybSAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICMzOTcwNDQpCisKK0FkZCBleHBsYW5hdG9yeSBtZXNzYWdlIHRvIGJhZGJsb2NrcyB0aGF0IC1uIGFuZCAtdyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlCisoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICMzNzE4NjkpCisKK0FsbG93IGRlYnVnZnMgYW5kIGR1bXBlMmZzIHRvIHN1cHBvcnQgZnMgZmVhdHVyZXMgdW5kZXIgZGV2ZWxvcG1lbnQuCisKK0FkZCBzdXBwb3J0IGZvciB0aGUgbmV3IGZsYWcgRVhUMl9GTEFHX1NPRlRTVVBQX0ZFQVRVUkVTIGZsYWcgdG8KK2V4dDJmc19vcGVuKCkgLCB3aGljaCBhbGxvd3MgYXBwbGljYXRpb24gdG8gb3BlbiBmaWxlc3lzdGVzIHdpdGggZmVhdHVyZXMKK3doaWNoIGFyZSBjdXJyZW50bHkgb25seSBwYXJ0aWFsbHkgc3VwcG9ydGVkIGJ5IGUyZnNwcm9ncy4KKworQWxsb3cgdW5peF9pbyB0byBzdXBwb3J0IG9mZnNldHMgZ3JlYXRlciB0aGFuIDJHIChBZGRyZXNzZXMKK1NvdXJjZUZvcmdlIEJ1ZzogIzE1NDc5MjIpCisKK0ZpeGVkIG92ZXJmbG93IGFuZCBzaWduZWQvdW5zaWduZWQgcHJvYmxlbXMgY2F1c2VkIGJ5IHRoZSBudW1iZXIgb2YKK2Jsb2NrcyBvciBpbm9kZXMgZXhjZWVkaW5nIDIqKjMxIG9yIGJlaW5nIGNsb3NlIHRvIDIqKjMyLTEuCisKK0FkZCBzdXBwb3J0IGZvciB1bnNpZ25lZCBkaXJlY3RvcnkgaGFzaCBjYWxjdWxhdGlvbnMgd2l0aCBoaW50cyBpbiB0aGUKK3N1cGVyYmxvY2sgdG8gZml4IGNyb3NzLWFyY2hpdGVjdHVyYWwgcG9ydGFiaWxpdHkgZm9yIGh0cmVlCitkaXJlY3RvcmllcyB3aXRoIGZpbGVuYW1lcyB3aGVyZSB0aGUgaGlnaCA4dGggYml0IGlzIHNldC4gIChBZGRyZXNzZXMKK0RlYmlhbjogIzM4OTc3MikKKworRml4IHJlc2l6ZTJmcyBzbyB0aGF0IGl0IGdpdmVzIHVzZXItaW50ZWxsaWdpYmxlIGVycm9yIG1lc3NhZ2VzIGlmIHRoZQorZmlsZXN5c3RlbSBvciB0aGUga2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb24tbGluZSByZXNpemluZy4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzM4MDU0OCkKKworUmVxdWlyZSBta2UyZnMgLUYgLUYgZm9yIHJlYWxseSBkYW5nZXJvdXMgb3BlcmF0aW9ucywgc2luY2UgLUYgaXMKK25lZWRlZCBmb3IgbGVzcyBkYW5nZXJvdXMgb3BlcmF0aW9ucyBzdWNoIGFzIGNyZWF0aW5nIGZpbGVzeXN0ZW1zCitpbWFnZXMgaW4gcmVndWxhciBmaWxlcywgb3IgY3JlYXRpbmcgZmlsZXN5c3RlbXMgb24gd2hvbGUgYmxvY2sKK2RldmljZXMuICBUaGVzZSByZWxhdGl2ZWx5IGlubm9jdW91cyB1c2FnZXMgc2hvdWxkIE5PVCBiZSBjb25mdXNlZAord2l0aCBydW5uaW5nIG1rZTJmcyBvbiBhbiBhcHBhcmVudGx5LW1vdW50ZWQgb3IgaW4tdXNlIGZpbGVzeXN0ZW0uCisKK0FsbG93IHRoZSBkZWZhdWx0IGlub2RlIHNpemUgdG8gYmUgc3BlY2lmaWVkIGludG8gdGhlIG1rZTJmcy5jb25mCitmaWxlLgorCitNYWtlIHRoZSBzbWFsbGVzdCBkZWZhdWx0IGpvdXJuYWwgc2l6ZSBpcyBiaWcgZW5vdWdoIHNvIHRoYXQgb24tbGluZQorcmVzaXppbmcgc2hvdWxkIGFsd2F5cyB3b3JrLgorCitGaXggc2lsbHkgc3BlbGxpbmcgZXJyb3IgaW4gZTJmc2NrLiAgKEFkZHJlc3NlcyBTb3VyY2VGb3JnZSBidWc6CisjMTUzMTM3MikKKworRml4IGRlYnVnZnMgY29yZWR1bXAgd2hlbiBsc2RlbCBpcyBydW4gd2l0aG91dCBhbiBvcGVuIGZpbGVzeXN0ZW0KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzM3ODMzNSkKKworRml4IGRlYnVnZnMgZGlzcGxheSBidWcgdXMgdGhhdCBieXRlcyB0aGF0IGhhdmUgdGhlIGhpZ2ggYml0IHNldCBhcmUKK2Rpc3BsYXllZCBhcyAiZWMiIGluc3RlYWQgb2YgImZmZmZmZmVjIi4KKworQWRkIHN1cHBvcnQgaW4gbHNhdHRyIHNvIGl0IHdpbGwgZGlzcGxheSB0aGUgRVhUNF9FWFRFTlRTX0ZMIGZsYWcuCisKK0RldmljZSBtYXBwZXIgc2Nhbm5pbmcgd2Fzbid0IHdvcmtpbmcgaW4gdGhlIGJsa2lkIGxpYnJhcnkgYmVjYXVzZSB0aGUKK3BhdGhuYW1lcyBoYWQgYW4gZXh0cmEgIi9kZXYiIHdoZW4gdGhleSB3ZXJlIGJlaW5nIHByb2JlZC4KKworQWRkIEdGUy9HRlMyIHN1cHBvcnQgdG8gdGhlIGJsa2lkIGxpYnJhcnkuCisKK0ZpeCBibGtpZCBzdXBwb3J0IG9mIGVtcHR5IEZBVCBmaWxlc3lzdGVtIGxhYmVscy4KKworQXZvaWQgcmVjdXJzaW5nIGZvcmV2ZXIgKG9yIGZvciBhIGxvbmcgdGltZSkgd2hlbiB0aGUgYmxraWQgbGlicmFyeQorc2VhcmNoZXMgZm9yIGEgZGV2aWNlIGFuZCB0aGVyZSBhcmUgc3ltbGlua3MgdG8gZGlyZWN0b3JpZXMgaW4gL2Rldi4KKworQXZvaWQgdW5hbGlnbmVkIGhhbGZ3b3JkIGFjY2VzcyBpbiBibGtpZCB3aGVuIGFjY2Vzc2luZyBGQVQKK3N1cGVyYmxvY2tzLCBhcyB0aGlzIHdpbGwgY2F1c2UgU3BhcmMvU29sYXJpcyBzeXN0ZW1zIHRvIHRocm93IGEKK1NJR0JVUyBlcnJvci4KKworVGhlIGxhdGVzdCBkZXZtYXBwZXIgbGlicmFyaWVzIHJlcXVpcmVzIHB0aHJlYWRzLCBhZGQgLWxwdGhyZWFkcyB0bwordGhlIHN0YXRpYyBsaW5rIGxpYnJhcmllcyBmb3IgZTJmc2NrLnN0YXRpYyBpZiBkZXZtYXBwZXIgaXMgZW5hYmxlZC4KKyhBZGRyZXNzZXMgRGViaWFuIGJ1ZzogIzM4ODcxOCkKKworSW1wcm92ZSB0aGUgKG5vbi1pbnN0YWxsZWQsIGZvciBleHBlcnRzIG9ubHkpIGZpbmRzdXBlciBwcm9ncmFtIGJ5CitwcmludGluZyB0aGUgdXVpZCBhbmQgbGFiZWwgZnJvbSB0aGUgc3VwZXJibG9ja3MsIGFzIHdlbGwgYXMgdGhlCitzdGFydGluZyBhbmQgZW5kaW5nIG9mZnNldHMgb2YgdGhlIGZpbGVzeXN0ZW0gZ2l2ZW4gdGhlIGluZm9ybWF0aW9uIGluCit0aGUgc3VwZXJibG9jay4gIE9taXQgYnkgZGVmYXVsdCBwcmludGluZyBzdXBlcmJsb2NrcyB0aGF0IGFyZSBsaWtlbHkKK2ZvdW5kIGluIGxvY2F0ZWQgaW4gYW4gZXh0MyBqb3VybmFsIHVubGVzcyBhbiBleHBsaWNpdCAtaiBvcHRpb24gaXMKK2dpdmVuLgorCitVcGRhdGVkIFNwYW5pc2gsIEZyZW5jaCBhbmQgRHV0Y2ggdHJhbnNsYXRpb25zIGFuZCBhZGRlZCBDYXRhbGFuCit0cmFuc2xhdGlvbi4gIChBZGRyZXNzZXMgRGViaWFuIGJ1ZzogIzQxMTU2MikKKworVXNlIEZyZWVCU0QncyBESU9DR01FRElBU0laRSBhbmQgRElPQ0dESU5GTyBpb2N0bHMgaWYgYXZhaWxhYmxlIHdoZW4KK2RldGVybWluaW5nIGEgcGFydGl0aW9uJ3Mgc2l6ZSwgc2luY2UgYmluYXJ5IHNlYXJjaGluZyB0byBkZXRlcm1pbmUKK3RoZSBkZXZpY2UgZG9lc24ndCB3b3JrIG9uIEZyZWVCU0QuCisKK0RvY3VtZW50YXRpb24gYWJvdXQgVVVJRCdzIGlzIGF2YWlsYWJsZSBpbiBlbm91Z2ggcGxhY2VzLCBhbmQgaXQncworYXdrd2FyZCB0byBkZWFsIHdpdGggZGViaWFuLWxlZ2FsJ3MgaW5zYW5pdGllcy4gIFNvIEknbSBjYXZpbmcgaW4gdGhlCisibW9yZS1sdW5hdGljLXRoYW4tUk1TIiB3aW5nIG9mIERlYmlhbiBieSByZW1vdmluZyBSRkMtNDEyMiBzbyB3ZQorZG9uJ3QgaGF2ZSBkbyB0aGUgZGZzZyB0YXJiYWxsLiAgQWxzbyByZW1vdmUgdGhlIHJ1bGUgdGhhdCBvbmx5IHRyaWVkCit0byBpbnN0YWxsIFJGQy00MTIyIG9uIFVidW50dSwgc2luY2UgVWJ1bnR1IHNlZW1zIHRvIHdhbnQgdG8gZmV0Y2gKK2UyZnNwcm9ncyBleGNsdXNpdmVseSBmcm9tIERlYmlhbi4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQwNzEwNykKKworRml4IHRoZSBpbmZvLWRpciBsaW5lIHNvIHRoYXQgdGhlIG1lbnUgbmFtZSBkb2VzIG5vdCBjb250YWluIGEgLmluZm8KK3ByZWZpeC4gIEZpcnN0IG9mIGFsbCwgaXQncyB1Z2x5LCBzZWNvbmRseSwgaXQgY2F1c2VzIHRoZSBpbnN0YWxsLWluZm8KK2NvbW1hbmQgdG8gZmFpbCB0byByZW1vdmUgdGhlIGNvbV9lcnIgaW5mbyBmaWxlIGZyb20gdGhlCisvdXNyL3NoYXJlL2luZm8vZGlyIGZpbGUgd2hlbiB0aGUgY29tZXJyLWRldiBwYWNrYWdlIGlzIHJlbW92ZWQgYW5kCitwdXJnZWQuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0MDE3MTEpCisKK0ZpeGVkIHNwZWxsaW5nIG1pc3Rha2VzLCB0eXBvcywgYW5kIG90aGVyd2lzZSBjbGFyaWZpZWQgbWFuIHBhZ2VzLgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjMzY5NzYxLCAjMzczMDA0LCAjMzc5Njk1KQorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzICMzODk1NTQsICMzOTA2NjQsICM0MTMyMDgsICM0MTk2MDUsCisjNDA4MzUyLCAjNDE1NTYwLCAjMzk5MTU1KQorCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworRTJmc2NrIG5vdyBzdXBwb3J0cyB0aGUgJUl0IGV4cGFuc2lvbiB3aGVuIHByaW50aW5nIGEgcHJvYmxlbSByZXBvcnQuCitJdCB3aWxsIHByaW50IHRoZSB0eXBlIG9mIHRoZSBpbm9kZSBpbiB0aGUgcHJvYmxlbSBjb250ZXh0LgorCitGaXggbWlzYy9NYWtlZmlsZS5pbiBzbyB0aGF0IGl0IGJ1aWxkcyBldmVuIGlmIGUyZnNjayBoYXNuJ3QgYmVlbiBidWlsdCB5ZXQKKyhBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMTU2NTU2MSkKKworUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgYW5kIG90aGVyIGxpbnQvZ2NjIC1XYWxsIGNsZWFudXBzCisKK0FkZCBjaGVjayB0byBleHQyZnNfZ2V0X2RldmljZV9zaXplKCkgc28gaXQgd2lsbCByZXR1cm4gRUZCSUcgZm9yIGZvcgorZmlsZXN5c3RlbXMgY29udGFpbmVkIGluIHJlZ3VsYXIgZmlsZXMgd2hlcmUgdGhlIGZpbGVzeXN0ZW0gaW1hZ2Ugc2l6ZQoraXMgcmV0dXJuZWQgYnkgc3RhdDY0KCkuCisKK1NldCBsb2NhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gQyBzbyBta19jbWRzIGFuZCBjb21waWxlX2V0IGFsd2F5cword29yay4gIChBZGRyZXNzZXMgU291cmNlRm9yZ2UgQnVnOiAjMTUzMjE3NykKKworQWRkZWQgdGhlIDY0LWJpdCBieXRlIHN3YXBwaW5nIGZ1bmN0aW9uIGV4dDJmc19zd2FiNjQoKS4KKworQWRkZWQgdHdvIG5ldyBoZWxwZXIgZnVuY3Rpb25zIHRvIHByZXZlbnQgMioqMzEvMioqMzItMSBvdmVyZmxvdworcHJvYmxlbXM6IGV4dDJmc19kaXZfY2VpbCgpIGFuZCBlMnBfcGVyY2VudCgpLgorCitDcmVhdGUgbmV3IGV4dDJmcyBsaWJyYXJ5IGlubGluZSBmdW5jdGlvbnMgZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrKCkKK2FuZCBleHQyZnNfZ3JvdXBfbGFzdF9ibG9jaygpIGluIG9yZGVyIHRvIGNhbGN1bGF0ZSB0aGUgc3RhcnRpbmcgYW5kCitlbmRpbmcgYmxvY2tzIGluIGEgYmxvY2sgZ3JvdXAuCisKK0NyZWF0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzIHJlYWQtb25seSB0byByZW1pbmQgZGV2ZWxvcGVycyBub3QgdG8gZWRpdCB0aGVtLgorCitBZGQgc3VwcG9ydCBmb3IgYXV0b2NvbmYgMi42MCAod2l0aCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3Igb2xkZXIKK3ZlcnNpb25zIG9mIGF1dG9jb25mKS4KKworQWRkZWQgYW4gIm1ha2UgcnBtIiB0YXJnZXQgdG8gdG9wLWxldmVsIE1ha2VmaWxlCisKK0FkZGVkIHZhcmlvdXMgRnJlZUJTRCBwb3J0YWJpbGl0eSBmaXhlcy4KKworRXhjbHVkZSBtZXJjdXJpYWwgZmlsZXMgZnJvbSB0aGUgUlBNIGJ1aWxkIHRyZWUgdG8gc3BlZWQgdXAgY29weS9idWlsZC4KKworVXNlIHJvb3Rfc3lzY29uZmRpciB0byBkZWZpbmUgdGhlIGxvY2F0aW9ucyBvZiBta2UyZnMuY29uZiBhbmQKK2UyZnNjay5jb25mIGluc3RlYWQgb2YgdXNpbmcgYSBoYXJkLWNvZGVkIC9ldGMgcGF0aG5hbWUuCisKK1ByZXZlbnQgZTJmc2NrLmggYW5kIGV4dDJfZXh0X2F0dHIuaCBmcm9tIGdldHRpbmcgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuCisKK0ZpeGVkICJtYWtlIGNsZWFuIiBpbiBibGtpZCdzIE1ha2VmaWxlLmluIGZpbGUgZnJvbSByZW1vdmluZyB0c3RfKi5jIGZpbGVzLgorCitJZiBkaWZmIC11IGlzIHN1cHBvcnRlZCwgdXNlIGl0IHRvIHJlcG9ydCB0ZXN0IGZhaWx1cmVzLgorCitVcGRhdGVzL2ltcHJvdmVtZW50cyB0byBSUE0gc3BlYyBmaWxlCisKK0FkZCBvbi1kaXNrIGZvcm1hdCBkZWZpbml0aW9ucyBmb3IgdGhlIGZvbGxvd2luZyBuZXcgZmVhdHVyZXM6CitFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSwgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSwKK0VYVDRfRkVBVFVSRV9ST19DT01QQVRfRElSX05MSU5LLCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQsCitFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0VYVFJBX0lTSVpFCisKK0FkZCBhIG5ldyBtYWtlIHRhcmdldCAiY2hlY2tlZC1mYWlsZWQiIGluIHRoZSB0ZXN0cyBkaXJlY3Rvcnkgd2hpY2gKK3JlcnVucyBhbnkgZmFpbGVkIHRlc3RzCisKK1VwZGF0ZSBkcmFmdC1sZWFjaC11dWlkcy1ndWlkcy0wMS50eHQgd2l0aCByZmM0MTIyLnR4dAorCitGaXggbWlzY2VsbGFuZW91cyBidWdzIHJlcG9ydGVkIGJ5IENvdmVyaXR5OiBEZWFkIGNvZGUsIHBvdGVudGlhbCBudWwKK3BvaW50ZXIgZGVyZWZlcmVuY2VzLCBtZW1vcnkgbGVha3MsIGV0Yy4gIE5vbmUgd2VyZSBzZWN1cml0eS1jcml0aWNpYWwKK3Byb2JsZW1zLgorCitGaXggdXAgdXNhZ2UgYW5kIGRlY3JlbWVudCBlcnJvciBtZXNzYWdlcyBpbiB0aGUgdGVzdF9pY291bnQgcHJvZ3JhbQorCitBZGQgZGVidWdnaW5nIGNvZGUgdG8gdGhlIGNvbV9lcnIgbGlicmFyeTsgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCitDT01FUlJfREVCVUcgaXMgc2V0IHRvIDEsIHByaW50IG91dCBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXMgZXJyb3IgdGFibGVzCithcmUgYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgY29tX2VyciBsaWJyYXJ5LiAgSWYgdGhlCitDT01FUlJfREVCVUdfRklMRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgKGFuZCB0aGUgcHJvY2VzcyBpcyBub3QKK3NldHVpZCkgdGhlIGRlYnVnZ2luZyBtZXNzYWdlcyBtYXkgYmUgcmVkaXJlY3RlZCB0byBhIGZpbGUuCisKK0NoYW5nZSBhbGwgb2YgdGhlIGUyZnNwcm9ncyBwcm9ncmFtcyB0byB1c2UgdGhlIG5ld2VyIGFkZF9lcnJvcl90YWJsZSgpCithbmQgcmVtb3ZlX2Vycm9yX3RhYmxlKCkgaW50ZXJmYWNlcyBpbnN0ZWFkIG9mIHRoZSBtdWNoIG9sZGVyCitpbml0aWFsaXplXypfZXJyb3JfdGFibGUoKSBmdW5jdGlvbi4KKworQWRkIFREQiBzdXBwb3J0IGludG8gdGhlIGV4dDJmcyBsaWJyYXJ5LiAgVGhpcyBhbGxvd3MgdXMgdG8gaGF2ZSBhCitndWFyYW50ZWVkIGxpYnJhcnkgd2UgY2FuIGNvdW50IG9uIGFsd2F5cyBiZWluZyBwcmVzZW50IHNvIHdlIGNhbgorc3RvcmUgZGF0YSBpbiBhbiBvbi1kaXNrIGRhdGFiYXNlLgorCitBZGQgc3VwcG9ydCBmb3IgdXNpbmcgVERCIHRvIHN0b3JlIHRoZSBpY291bnQgZGF0YSwgc28gd2UgZG9uJ3QgcnVuIG91dAorb2YgbWVtb3J5IHdoZW4gY2hlY2tpbmcgcmVhbGx5IGxhcmdlIGZpbGVzeXN0ZW1zLgorCitDaGFuZ2UgdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSBzbyB0aGF0IGl0IHNraXBzIGVtcHR5IHRlc3QgZGlyZWN0b3JpZXMuCisKK0RlZmluZSB0aGUgbF9pX2l2ZXJzaW9uIGZpZWxkIGluIGV4dDJfaW5vZGUuICBUaGUgbF9pX3ZlcnNpb24gZmllbGQgaXMKK25vdyBkZWZpbmVkIGZyb20gdGhlIG9sZCBsX2lfcmVzZXJ2ZWQxIGZpZWxkIGluIHRoZSBleHQyIGlub2RlLiAgVGhpcworZmllbGQgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIGhpZ2ggMzIgYml0cyBvZiB0aGUgNjQtYml0IGlub2RlIHZlcnNpb24KK251bWJlci4KKworQWRkIE1ha2VmaWxlIHByb2R1Y3Rpb24gcnVsZSBmb3IgZTJmc3Byb2dzLnNwZWMgaW4gY2FzZSBpdCBnZXRzCitkZWxldGVkLgorCitBZGQgbmV3IGZ1bmN0aW9uIHByb2ZpbGVfZ2V0X3VpbnQoKSB0byBhbGxvdyBmb3IgYSBjbGVhbiB3YXkgdG8gZmV0Y2gKK3Vuc2lnbmVkIGludGVnZXJzIGZyb20gdGhlIGNvbnRleHQuCisKK0FkZCB0ZXN0IHRvIG1ha2Ugc3VyZSB0aGUgZXh0MiBzdXBlcmJsb2NrIHN0cnVjdHVyZSBpcyAxMDI0IGJ5dGVzLgorCitGaXggdHlwbyBpbiBuYW1lIG9mIGZfZHVwNCByZWdyZXNzaW9uIHRlc3QKKworQWRkIG5ldyBmdW5jdGlvbiBibGtpZF9nY19jYWNoZSgpIHdoaWNoIHBlcmZvcm1zIGEgZ2FyYmFnZSBjb2xsZWN0aW9uCitwYXNzIG9uIHRoZSAvZXRjL2Jsa2lkLnRhYiBmaWxlLgorCitUaGUgZXh0MmZzX29wZW4oKSBmdW5jdGlvbiBub3cgc2V0cyBFWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFkuICBJbgorZ2VuZXJhbCwgb25seSBlMmZzY2sgKGFmdGVyIHRoZSBmaWxlc3lzdGVtIGlzIGNsZWFuKSwgdHVuZTJmcywgYW5kCityZXNpemUyZnMgc2hvdWxkIGNoYW5nZSB0aGUgYmFja3VwIHN1cGVyYmxvY2tzIGJ5IGRlZmF1bHQuICBNb3N0CitjYWxsZXJzIG9mIGV4dDJmc19vcGVuKCkgc2hvdWxkIG5vdCBiZSB0b3VjaGluZyBhbnkgc3VwZXJibG9jayBmaWVsZHMKK3doaWNoIHJlcXVpcmUgdGhlIGJhY2t1cHMgdG8gYmUgdG91Y2hlZC4KKworQWRkIG5ldyBmdW5jdGlvbiB0byBsaWJleHQyZnMsIGV4dDJmc19kZWZhdWx0X2pvdXJuYWxfc2l6ZSgpLCB3aGljaAorcmV0dXJucyB0aGUgZGVmYXVsdCBqb3VybmFsIHNpemUuCisKKworRTJmc3Byb2dzIDEuMzkgKE1heSAyOSwgMjAwNikgCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXggMzItYml0IGNsZWFubGluZXNzIGluIGUyZnNwcm9ncyBzbyB0aGF0IHdlIGNhbiBzdXBwb3J0IGZpbGVzeXN0ZW1zCitiZXR3ZWVuIDIqKjMxIGFuZCAyKiozMiBibG9ja3MuCisKK0NoYW5nZSBta2UyZnMgdG8gdXNlIC9ldGMvbWtlMmZzLmNvbmYgYXMgYSBjb25maWd1cmF0aW9uIGZpbGUgdG8KK2NvbmZpZ3VyZSB0aGUgZmlsZXN5c3RlbSBmZWF0dXJlcywgYmxvY2tzaXplLCBhbmQgaW5vZGVfcmF0aW8gZm9yCitkaWZmZXJlbnQgZmlsZXN5c3RlbSB0eXBlcy4KKworTWtlMmZzIHdpbGwgbm93IGNyZWF0ZSBmaWxlc3lzdGVtcyBoYXNoIHRyZWVzIGFuZCBvbi1saW5lIHJlc2l6aW5nCitlbmFibGVkIGJ5IGRlZmF1bHQsIGJhc2VkIG9uIHRoZSBuZXcgL2V0Yy9ta2UyZnMuY29uZiBmaWxlLgorCitUaGUgZTJmc3Byb2dzIHRvb2xzIChyZXNpemUyZnMsIGUyZnNjaywgbWtlMmZzKSB3aWxsIG9wZW4gdGhlCitmaWxlc3lzdGVtIGRldmljZSBub2RlIGluIGV4Y2x1c2l2ZSBtb2RlIHRvIHByZXZlbnQgYWNjaWRlbnRzIGJ5CitzeXN0ZW0gYWRtaW5pc3RyYXRvcnMuICBJbiB0aGUgY2FzZSBvZiByZXNpemUyZnMgYW5kIG1rZTJmcywgaXQgd2lsbAorb25seSB1c2UgZXhjbHVzaXZlIG1vZGUgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IG1vdW50ZWQuCisKK0ZpeGVkIGEgYnVnIGluIG1rZTJmcyB3aGljaCBjYXVzZWQgaXQgdG8gdG8gZmFpbCB3aGVuIGNyZWF0aW5nIHRoZQorcmVzaXplIGlub2RlIGZvciBsYXJnZSBmaWxlc3lzdGVtcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjMzQ2NTgwKQorCitXaGVuIGFsbG9jYXRpbmcgc3BhY2UgZm9yIHRoZSBSQUlEIGZpbGVzeXN0ZW1zIHdpdGggdGhlIHN0cmlkZQorcGFyYW1ldGVyLCBta2UyZnMgd2lsbCBub3cgcGxhY2UgZWFjaCBwb3J0aW9uIG9mIHRoZSBncm91cCdzIGlub2RlCit0YWJsZSByaWdodCB1cCBhZnRlciB0aGUgc3VwZXJibG9jayAoaWYgcHJlc2VudCkgaW4gb3JkZXIgdG8gbWluaW1pemUKK2ZyYWdtZW50YXRpb24gb2YgdGhlIGZyZWVzcGFjZS4KKworU3BlZWQgdXAgbWtlMmZzIGFuZCBlMmZzY2sgYnkgd3JpdGluZyBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcyBtb3JlCitlZmZpY2llbnRseSBieSB3cml0aW5nIHRoZSBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcyBpbiBvbmUgcGFzcywgdGh1cworcmVkdWNpbmcgdGhlIG51bWJlciBvZiBkaXNrIHNlZWtzIHJlcXVpcmVkLgorCitBZGQgc3VwcG9ydCBmb3Igb24tbGluZSByZXNpemluZyB0byByZXNpemUyZnMuCisKK0ZpeCBibGtpZCBsaWJyYXJ5IHNvIHRoYXQgbG9naWMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGEgZGV2aWNlJ3MKK2NhY2hlZCBpbmZvcm1hdGlvbiBpbiAvZXRjL2Jsa2lkLnRhYiBuZWVkcyB0byBiZSB2ZXJpZmllZCBvciBub3QKK2RvZXNuJ3QgZ2V0IGNvbmZ1c2VkIGJ5IGEgc3lzdGVtIGNsb2NrIHdoaWNoIGlzIGluc2FuZSAoZm9yIGV4YW1wbGUsCitpZiB0aGUgYmF0dGVyeSBpcyBkZWFkIG9uIGEgTWFjaW50b3NoIHJ1bm5pbmcgUFBDIExpbnV4LiAgKEFkZHJlc3NlcworUmVkIEhhdCBCdWc6ICMxODIxODgpCisKK1RoZSBibGtpZCBsaWJyYXJ5IHdpbGwgbm93IHN0b3JlIHRoZSBVVUlEIG9mIHRoZSBleHRlcm5hbCBqb3VybmFsIHVzZWQKK2J5IGV4dDMgZmlsZXN5c3RlbXMsIHNvIHRoYXQgaW4gdGhlIGZ1dHVyZSwgdGhlIHVzZXJzcGFjZSBtb3VudCBiaW5hcnkKK2NhbiB1c2UgdGhpcyB0byBmaW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbCBhbmQgcGFzcwordGhpcyBpbmZvcm1hdGlvbiB0byB0aGUga2VybmVsLgorCitFMmZzY2sgd2lsbCBub3cgY29uc3VsdCBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgL2V0Yy9lMmZzY2suY29uZiB0bworY29udHJvbCBob3cgdmFyaW91cyBvcHRpb25zIHNob3VsZCBiZSBoYW5kbGVkLiAgU2VlIHRoZSBlMmZzY2suY29uZgorbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4gICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICMxNTAyOTUpCisKK0UyZnNjayBub3cgcHJpbnRzIGFuIGV4cGxhbmF0b3J5IG1lc3NhZ2Ugd2hlbiBkZWxheWluZyBhIGZpbGVzeXN0ZW0KK2NoZWNrIHdoZW4gdGhlIHN5c3RlbSBpcyBydW5uaW5nIG9uIGJhdHRlcnkuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6CisjMzUwMzA2KQorCitFMmZzY2sgd2lsbCBkZXRlY3QgaWYgdGhlIHN1cGVyYmxvY2sncyBsYXN0IG1vdW50IGZpZWxkIG9yIGxhc3Qgd3JpdGUKK2ZpZWxkIGlzIGluIHRoZSBmdXR1cmUsIGFuZCBvZmZlciB0byBmaXggaWYgc28uICAoQWRkcmVzc2VzIERlYmlhbiBCdWcKKyMzMjc1ODApIFRoZXNlIHByb2JsZW1zIHdpbGwgYmUgZml4ZWQgYXV0b21hdGljYWxseSBpbiBwcmVlbiBtb2RlCitzaW5jZSBEZWJpYW4ncyBib290IHNlcXVlbmNlIGJvZ3VzbHkgZG9lc24ndCBzZXQgdGhlIHRpbWUgY29ycmVjdGx5Cit1bnRpbCBwb3RlbnRpYWxseSB2ZXJ5IGxhdGUgaW4gdGhlIGJvb3R1cCBwcm9jZXNzLCBhbmQgdGhpcyBjYW4gY2F1c2UKK2ZhbHNlIHBvc2l0aXZlcyB3aGljaCB3aWxsIGNhdXNlIHVzZXJzJyBzeXN0ZW1zIHRvIGZhaWwgdG8gYm9vdC4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1Z3MgIzM0MzY2MiBhbmQgIzM0MzY0NSkKKworRTJmc2NrIG5vdyBjaGVja3MgdG8gc2VlIGlmIHRoZSBzdXBlcmJsb2NrIGhpbnQgZm9yIHRoZSBsb2NhdGlvbiBvZgordGhlIGV4dGVybmFsIGpvdXJuYWwgaXMgaW5jb3JyZWN0LCBhbmQgaWYgc28sIG9mZmVyIHRvIHVwZGF0ZSBpdC4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzM1NTY0NCkKKworRml4IGUyZnNjayBmcm9tIHNlZ2ZhdWx0aW5nIG9uIGRpc2Nvbm5lY3RlZCBpbm9kZXMgdGhhdCBjb250YWluIG9uZSBvcgorbW9yZSBleHRlbmRlZCBhdHRyaWJ1dGVzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjMzE2NzM2LCAjMzE4NDYzKQorCitFMmZzY2sgd2lsbCBzdG9wIGFuZCBwcmludCBhIHdhcm5pbmcgaWYgdGhlIHVzZXIgdHJpZXMgcnVubmluZyBhCityZWFkL3dyaXRlIGJhZGJsb2NrcyB0ZXN0IG9uIGEgcmVhZC1vbmx5IG1vdW50ZWQgcm9vdCBmaWxlc3lzdGVtLgorCitGaXggYSBtZW1vcnkgbGVhayBpbiBlMmZzY2sncyBlcnJvciBwYXRocy4gIChUaGFua3MgdG8gTWljaGFlbAorQy4gVGhvbXBzb24gZm9yIHBvaW50aW5nIHRoZXNlIG91dDsgdGhleSB3ZXJlIG9yaWdpbmFsbHkgZm91bmQgdXNpbmcKK0NvdmVyaXR5LikKKworV2hlbiByZXNpemluZyBhIGZpbGUgY29udGFpbmluZyBhIGZpbGVzeXN0ZW0sIHJlc2l6ZTJmcyB3aWxsIGV4cGFuZCBvcgordHJ1bmNhdGUgYSBmaWxlIGFzIG5lY2Vzc2FyeS4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzI3MTYwNykKKworUmVzaXplMmZzIHdpbGwgbm93IGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lIHRoZSBSQUlEIHN0cmlkZSBwYXJhbWV0ZXIgdGhhdAoraGFkIGJlZW4gdXNlZCB0byBjcmVhdGUgdGhlIGZpbGVzeXN0ZW0sIGFuZCB1c2UgdGhhdCBmb3IgbmV3bHkgY3JlYXRlZAorYmxvY2sgZ3JvdXBzLiAgIFRoZSBSQUlEIHN0cmlkZSBwYXJhbWV0ZXIgbWF5IGFsc28gYmUgbWFudWFsbHkgc3BlY2lmaWVkCitvbiB0aGUgY29tbWFuZCBsaW5lIHVzaW5nIHRoZSBuZXcgLVMgb3B0aW9uIHRvIHJlc2l6ZTJmcy4KKworRml4IG1rZTJmcyBzbyB0aGF0IGl0IGNvcnJlY3RseSBjcmVhdGVzIGV4dGVybmFsIGpvdXJuYWxzIG9uCitiaWctZW5kaWFuIG1hY2hpbmVzIChzdWNoIGFzIGEgUy8zOTApLiAgCisKK0ZpeCBhIGJ1ZyBpbiB0aGUgZTJwIGxpYnJhcnkgd2hpY2ggY291bGQgY2F1c2UgZHVtcGUyZnMgdG8gKHJhcmVseSkKK2ZhaWwgdG8gcHJpbnQgb3V0IHRoZSBqb3VybmFsIG9yIGhhc2ggc2VlZCBVVUlELiAgKFRoYW5rcyB0byBHdWlsbGF1bWUKK0NoYW1icmF1ZCBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuKQorCitEdW1wZTJmcyB3aWxsIG5vdyBwcmludCB0aGUgc2l6ZSBvZiB0aGUgam91cm5hbCAoaWYgcHJlc2VudCkuCisKK0ZpeCBkZWJ1Z2ZzJ3Mgc2V0X2lub2RlX2ZpZWxkIGNvbW1hbmQgc28gaXQgY2FuIHByb3Blcmx5IHNldCB0aGUgZnJhZywKK2ZzaXplLCB1aWRfaGlnaCwgZ2lkX2hpZ2gsIGFuZCBhdXRob3IgZmllbGRzIGluIHRoZSBpbm9kZSBpbnN0ZWFkIG9mCitzaWxlbnRseSBmYWlsaW5nLCBhbmQgc28gdGhhdCBzZXR0aW5nIHRoZSBpX3NpemUgYWN0dWFsbHkgc2V0cyBpX3NpemUKK2NvcnJlY3RseS4KKworQWRkIGEgbmV3IGRlYnVnZnMgY29tbWFuZCwgc2V0X2N1cnJlbnRfdGltZSwgd2hpY2ggc2V0cyBmcy0+bm93IHNvCit0aGF0IHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZXMgY2FuIHJlcGVhdGVkbHkgbW9kaWZ5IHRoZSBmaWxlc3lzdGVtJ3MKK2xhc3Rfd3JpdGUgZmllbGRzLgorCitGaXggYSBidWcgaW4gZGVidWdmcydzIGljaGVjayB3aGljaCB3b3VsZCBpbmNvcnJlY3RseSByZXBvcnQgdGhlIG93bmVyCitvZiBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2suCisKK0ZpeCB0aGUgZGVidWdmcyBjb21tYW5kcyBodHJlZV9kdW1wLCBkeF9oYXNoLCBhbmQgbGlzdF9kaXIgc28gdGhleSBwcmludCBhCitwcmludCBhIHVzYWdlIG1lc3NhZ2Ugd2hlbiBhbiBpbGxlZ2FsIG9wdGlvbiBjaGFyYWN0ZXIgaXMgZ2l2ZW4uCisKK0ZpeCBkZWJ1Z2ZzJ3MgZHVtcF91bnN1ZWQgY29tbWFuZCBvbiBmaWxlc3lzdGVtcyB3aXRoIGEgNjRrIGJsb2Nrc2l6ZQorc28gaXQgd29uJ3QgY29yZSBkdW1wLiAgKEFkZHJlc3NlcyBTb3VyY2VGb3JnZSBidWcgIzE0MjQzMTEpCisKK0ZpeCBta2xvc3QrZm91bmQgc28gdGhhdCBpdCBjcmVhdGVzIGEgZnVsbC1zaXplZCBkaXJlY3Rvcnkgb24KK2ZpbGVzeXN0ZW1zIHdpdGggbGFyZ2VyIGJsb2NrIHNpemVzLgorCitGaXggYSBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBibGtpZCBsaWJyYXJ5LgorCitGaXggYSBkaXNwbGF5IGJ1ZyBpbiAiYmFkYmxvY2tzIC1zdiIgc28gdGhhdCB0aGUgZG9uZSBtZXNzYWdlIHByb3Blcmx5CitjbGVhcnMgdGhlIGJsb2NrIG51bWJlciBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0LiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnCisjMzIyMjMxKQorCitBbGxvdyBmcmFjdGlvbmFsIHBlcmNlbnRhZ2VzIHRvIHRoZSAtbSBvcHRpb24gaW4gbWtlMmZzIGFuZCB0dW5lMmZzCisoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM4MDIwNSkKKworVXNlIGZzdGF0L2ZzdGF0NjQgaW4gZ2V0c2l6ZS5jIGlmIHRoZSB0aGUgdGFyZ2V0IGlzIGEgcmVndWxhciBmaWxlLAoraW5zdGVhZCBvZiBhdHRlbXB0aW5nIHRvIGRvIGEgYmluYXJ5IHNlYXJjaC4gIEZpeCBzb21lIGZkIGxlYWtzIGluCitlcnJvciBjYXNlcy4KKworQWRkIHN1cHBvcnQgZm9yIGRldmljZSBtYXBwZXIgbGlicmFyeSB0byB0aGUgYmxraWQgbGlicmFyeSB0byBlbnN1cmUKK3RoYXQgdGhlICJiZXN0IiAoaS5lLiwgbGVhZikgZGV2aWNlIGlzIHByb2JlZCBieSB0aGUgYmxraWQgbGlicmFyeS4KKworRml4IHRoZSBibGtpZCBsaWJyYXJ5IHNvIHRoYXQgaXQgbm90aWNlcyB3aGVuIGFuIGV4dDIgZmlsZXN5c3RlbSBpcwordXBncmFkZWQgdG8gZXh0My4KKworSW1wcm92ZSB0aGUgYmxraWQncyBsaWJyYXJ5IFZGQVQvRkFUIGRldGVjdGlvbjsgaXQgbm93IHVuZGVyc3RhbmRzCitsYWJlbHMgc3RvcmVkIGluIHRoZSByb290IGRpcmVjdG9yeSwgYW5kIGlzIG1vcmUgcGFyYW5vaWQgYWJvdXQKK2NoZWNraW5nIHRoZSBGQVQgc3VwZXJibG9jayB2YWx1ZXMuCisKK0ZpeGVkIGEgZmQgbGVhayBpbiB0aGUgdXVpZCBsaWJyYXJ5IHdoaWNoIHdhcyBjYXVzaW5nIHByb2JsZW1zIGZvciB0aGUKK0xWTSB0b29scy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzM0NTgzMikKKworQWRkIHN1cHBvcnQgZm9yIHRoZSByZWlzZXI0IGFuZCBzb2Z0d2FyZSBzdXNwZW5kIHBhcnRpdGlvbnMgdG8gdGhlCitibGtpZCBsaWJyYXJ5LiAgQWxzbyBhZGQgc3VwcG9ydCBmb3IgZXh0cmFjdCB0aGUgbGFiZWwgZnJvbSBpc285NjYwCitmaWxlc3lzdGVtcy4KKworRml4IGEgY29tcGlsZV9ldCBidWcgd2hpY2ggbWlzY291bnQgdGhlIG51bWJlciBvZiBlcnJvciBtZXNzYWdlcyBpZgorY29udGludWF0aW9ucyBhcmUgdXNlZCBpbiB0aGUgLmV0IGZpbGUuCisKK0FkZCBleHRyYSBzYW5pdHkgY2hlY2tzIHRvIHByb3RlY3QgdXNlcnMgZnJvbSB1bnVzdWFsIGNpcnVjbXN0YW5jZXMKK3doZXJlIC9ldGMvbXRhYiBtYXkgbm90IGJlIHNhbmUsIGJ5IGNoZWNraW5nIHRvIHNlZSBpZiB0aGUgZGV2aWNlIGlzCityZXBvcnRlZCBidXN5ICh3b3JrcyBvbiBMaW51eCAyLjYpIGtlcm5lbHMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWcKKyMzMTkwMDIpCisKK1VwZGF0ZWQgRnJlbmNoLCBEdXRjaCwgUG9saXNoLCBhbmQgU3dlZGlzaCB0cmFuc2xhdGlvbnMuICAoQWRkcmVzc2VzIERlYmlhbgorQnVnOiAjMzQzMTQ5LCAjMzQxOTExLCAjMzAwODcxLCAjMzE2NjA0LCAjMzE2NzgyLCAjMzMwNzg5KQorCitGaXggdXNlLWFmdGVyLWZyZWUgYnVnIGluIGUyZnNjayB3aGVuIGZpbmlzaGluZyB1cCB0aGUgdXNlIG9mIHRoZQorZTJmc2NrIGNvbnRleHQgc3RydWN0dXJlLgorCitGaXhlZCBzcGVsbGluZyBtaXN0YWtlcywgdHlwb3MsIGFuZCBvdGhlcndpc2UgY2xhcmlmaWVkIG1hbiBwYWdlcyBhbmQKK2RvY3VtZW50YXRpb24uICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjMzI5ODU5LCAjMzIyMTg4LCAjMzE2ODExLAorIzMxMjUxNSwgIzM1MTI2OCwgIzM1Nzk1MSwgIzM0NzI5NSwgIzMxNjA0MCwgIzM2ODM5MiwgIzM2ODM5MywgIzM2ODM5NCwKKyMzNjgxNzkpCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIHBhY2thZ2luZyBpc3N1ZXMgLS0tIHNlZSBkZWJpYW4vY2hhbmdlbG9nIGZvcgorZGV0YWlscy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3MgIzMxNzg2MiwgIzMyMDM4OSwgIzI5MDQyOSwgIzMxMDk1MCwKKyMzMTA0MjgsICMzMzA3MzcsICMzMzA3MzYsICMzMjkwNzQsICMzNTYyOTMsICMzNjAwNDYsICMzNjYwMTcsICMzNjQ1MTYsCisjMzYyNTQ0LCAjMzYyOTcwKQorCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVXBkYXRlIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiB0byBsYXRlc3QgdmVyc2lvbiAoMjAwNi0wMi0yMykgZnJvbQorRlNGLgorCitGaXggYXNtX3R5cGVzLmggdHlwZSBjb25mbGljdHMgb24gQU1EIDY0IHBsYXRmb3Jtcy4gIChBZGRyZXNzZXMgRGViaWFuCitCdWdzOiAjMzYwNjYxLCAjMzYwMzE3KQorCitGaXhlZCB0aGUgTWFrZWZpbGUgc28gdGhhdCB0aGV5IHdvcmsgY29ycmVjdGx5IG9uIG5ld2VyIHZlcnNpb25zIG9mCitHTlUgbWFrZSAoaS5lLiwgMy44MSkuCisKK0FkZCB2YWxncmluZCBzdXBwb3J0IHRvIHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGVzLCBhbmQgZWxpbWluYXRlCitmYWxzZSBwb3NpdGl2ZXMgZnJvbSB2YWxncmluZC4KKworQWRkIGEgcmVncmVzc2lvbiB0ZXN0IHN1aXRlIGZvciB0aGUgYmxraWQgbGlicmFyeS4KKworRml4IGEgZmVuY2Vwb3N0IGVycm9yIGluIHJlc2l6ZTJmcyBjYXVnaHQgYnkgdmFsZ3JpbmQuICAKKworRml4IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IG1pc3NpbmcgbWVtY3B5IHByb3RvdHlwZXMuCisKK1dlIG5vIGxvbmdlciBoYXZlIHRoZSBzcGFyYyBhc3NlbWJseSBjb2RlIGluIHRoZSBoZWFkZXIgZmlsZSBhbnkgbW9yZSwKK3NvIHdlIHNob3VsZG4ndCBzZXQgX0VYVDJfSEFWRV9IQVNfQklUT1BTXyBmb3IgdGhlIHNwYXJjLiAgVGhpcyB3b3VsZAorYnJlYWsgY29tcGlsZXMgb24gdGhlIHNwYXJjIGFyY2hpdGVjdHVyZXMgd2hlbiB1c2luZyBnY2MuCisKK0luIHRoZSBsaWJleHQyZnMgbGlicmFyeSwgYWRkIHRoZSBuZXcgZmllbGQgZnMtPm5vdyB3aGljaCBpZiBub24temVybworaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBzeXN0ZW0gdGltZSB3aGVuIHNldHRpbmcgdmFyaW91cyBmaWxlc3lzdGVtCitmaWVsZHMgKGxhc3QgbW9kaWZpZWQgdGltZSwgbGFzdCB3cml0ZSB0aW1lLCBldGMuKQorCitGaXggZ2NjIDQuMDEgY29tcGxhaW50cyBieSBhZGRpbmcgYSBtaXNzaW5nICNpbmNsdWRlIDxzdHJpbmcuaD4gdG8KK2V4dDJmcy5oIHdoaWNoIGlzIG5lZWRlZCBzaW5jZSB0aGUgaW5saW5lIGZ1bmN0aW9ucyB1c2UgbWVtY3B5KCkuCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZyAjMTI1MTA2MikKKworVXNlIEJVSUxEX0NGTEFHUyBhbmQgQlVJTERfTERGTEFHUyBpbnN0ZWFkIG9mIENGTEFHUyBhbmQgTERGTEFHUyBpbgordGhlIGJ1aWxkIHN5c3RlbSB3aGVuIGJ1aWxkaW5nIGZpbGVzIGluIHRoZSB1dGlsIGRpcmVjdG9yeSB3aGljaCBhcmUKK25lZWRlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuICBUaGlzIGF2b2lkcyBwb3RlbnRpYWwgcHJvYmxlbXMgd2hlbgorY3Jvc3MtY29tcGlsaW5nIGFuZCBzb21lIG9mIHRoZSBvcHRpb25zIHNwZWNpZmllZCBpbiBDRkxBR1Mgb3IgTERGTEFHUworYXJlIG5vdCByZWNvZ25pemVkIGFzIHZhbGlkIGJ5IHRoZSBob3N0IGNvbXBpbGVyLiAgKEFkZHJlc3NlcworU291cmNlZm9yZ2UgQnVnICMxMjYxNTQ3KQorCitDbGVhbiB1cCB0aGUgYmxraWQgbGlicmFyeSBieSBtYWtpbmcgdGhlIHN1cGVyYmxvY2sgYW5kIGdlbmVyaWMgaS9vCitmdW5jdGlvbnMgdG8gYmUgbW9yZSBnZW5lcmljLiAgQ2xlYW4gdXAgaW50ZXJmYWNlIHRvIHRoZSBwcm9iZQorZnVuY3Rpb24sIGFuZCBmaXggbWVtb3J5IGxlYWsuICBGaW5hbGxseSwgcmVtb3ZlIGFuIHVubmVlZGVkIHJlZmVyZW5jZQordG8gcHJvYmUuaCBpbiB0aGUgbGliL2Jsa2lkL3Jlc29sdmUuYworCitBZGQgYW4gZXh0MmZzX3JlYWRfYmJfRklMRSByZWdyZXNzaW9uIHRlc3QgdG8gY29uZmlybSBwcm9wZXIgZGV0ZWN0aW9uCitvZiBpbnZhbGlkIGJsb2NrICMncy4KKworVGhlIHg4NiBhc20gY29uc3RyYWludHMgZm9yIGV4dDJmc197c2V0L2NsZWFyfV9iaXQgaGF2ZSBiZWVuIGZpeGVkIHRvCitpbmRpY2F0ZSB0aGF0IHRoZSB0aGUgZnVuY3Rpb24gcmVhZC93cml0ZXMgdGhlIG1lbW9yeSBsb2NhdGlvbi4KKworRml4IHZhcmlvdXMgZ2NjIC1XYWxsIGNvbXBsYWludHMuCisKK0FkZCBhIGRlcGVuZGVuY3kgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHN1YmRpcmVjdG9yaWVzIGFyZSBjcmVhdGVkCitiZWZvcmUgY3JlYXRpbmcgYWxsIG9mIHRoZSBvYmplY3QgZmlsZXMsIGluIG9yZGVyIHRvIGFkZHJlc3MgcGFyYWxsZWwKK2J1aWxkIHByb2JsZW0gaW4gdGhlIGxpYnJhcnkgTWFrZWZpbGVzLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6CisjMTI2MTU1MykKKworQWRkICQoTERGTEFHUykgdG8gdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCB3aGVuIGdlbmVyYXRpbmcgYW4gRUxGIG9yCitTb2xhcmlzIHNoYXJlZCBsaWJyYXJ5LCB0byBhbGxvdyBjcm9zcy1jb21waWxlIGFuZCBvdGhlciBidWlsZHMgdGhhdAorbWlnaHQgbmVlZCB0byBzcGVjaWZ5IC1MIHBhdGhzIHRvIG5lZWRlZCBsaWJyYXJpZXMuICAoQWRkcmVzc2VzCitTb3VyY2Vmb3JnZSBCdWcgIzEyNjE1NDkpCisKK0FkZCBhIG5ldyBmZWF0dXJlLCBFWFQyX0ZFQVRVUkVfQ09NUEFUX0xBWllfQkcsIHdoaWNoIGlzIGluaXRpYWxseQoraW50ZW5kZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuICBJdCBhbGxvd3MgYW4gZXh0Mi9leHQzIGRldmVsb3BlciB0bworY3JlYXRlIHZlcnkgbGFyZ2UgZmlsZXN5c3RlbXMgdXNpbmcgc3BhcnNlIGZpbGVzIHdoZXJlIG1vc3Qgb2YgdGhlCitibG9jayBncm91cHMgYXJlIG5vdCBpbml0aWFsaXplZCBhbmQgc28gZG8gbm90IHJlcXVpcmUgbXVjaCBkaXNrCitzcGFjZS4gIEV2ZW50dWFsbHkgaXQgY291bGQgYmUgdXNlZCBhcyBhIHdheSBvZiBzcGVlZGluZyB1cCBta2UyZnMgYW5kCitlMmZzY2sgZm9yIGxhcmdlIGZpbGVzeXN0ZW0sIGJ1dCB0aGF0IHdvdWxkIGJlIGJlc3QgZG9uZSBieSBhZGRpbmcgYW4KK1JPX0NPTVBBVCBleHRlbnNpb24gdG8gdGhlIGZpbGVzeXN0ZW0gdG8gYWxsb3cgdGhlIGlub2RlIHRhYmxlIHRvIGJlCitsYXppbHkgaW5pdGlhbGl6ZWQgb24gYSBwZXItYmxvY2sgYmFzaXMsIGluc3RlYWQgb2YgYmVpbmcgZW50aXJlbHkKK2luaXRpYWxpemVkIG9yIGVudGlyZWx5IHVudXNlZCBvbiBhIHBlci1ibG9ja2dyb3VwIGJhc2lzLgorCitGaXggYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgc28gZTJmc3Byb2dzIHdpbGwgYmV0dGVyIGNvbXBpbGUgb24gTGludXgKKzIuMC4zNSBzeXN0ZW1zLgorCitNYWtlIHRlc3Qgc2NyaXB0cyBtb3JlIHJvYnVzdCBhZ2FpbnN0IGxvY2FsZS1yZWxhdGVkIGVudmlyb25tZW50IHZhcmlhYmxlcworCitGaXggdHlwZSB3YXJuaW5nIHByb2JsZW0gd2l0aCBzaXplb2YoKSBpbiBleHQyZnNfb3BlbjIoKS4KKworRml4IHR5cGUgd2FybmluZyBwcm9ibGVtIHdpdGggdGltZV90IGluIGRlYnVnZnMuCisKKworRTJmc3Byb2dzIDEuMzggKEp1bmUgMzAsIDIwMDUpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IGJsa2lkJ3MgdGVzdCBwcm9ncmFtcyAoYnVpbHQgd2l0aCAibWFrZSBjaGVjayIpIGNvbXBpbGUgY29ycmVjdGx5CitldmVuIHdpdGhvdXQgImNvbmZpZ3VyZSAtLWVuYWJsZS1ibGtpZC1kZWJ1ZyIuCisKK0ZpeCBpYTY0IGNvcmUgZHVtcCBidWcgY2F1c2VkIGJ5IGUyZnNwcm9ncyBydW5uaW5nIGFmb3VsIG9mIEM5OSBzdHJpY3QKK3R5cGUgYWxpYXNpbmcgcnVsZXMgb24gbmV3ZXIgZ2NjIGNvbXBpbGVycy4gIChBZGRyZXNzZXMgUmVkIEhhdAorQnVnemlsbGEgIyMxNjExODMuKQorCitGaXggY29tX2VyciBsaWJyYXJ5IHRvIG1ha2UgaXQgbW9yZSBjb21wYXRpYmxlIHdpdGggcmVjZW50IGNoYW5nZXMKK21hZGUgdG8gdGhlIGNvbV9lcnIgbGlicmFyeSBpbiBNSVQgS2VyYmVyb3MgVjUgdmVyc2lvbiAxLjQuCisoQWRkcmVzc2VzIFNvdXJjZWZyb2dlIEJ1ZyAjMTE1MDE0NikKKworR2VuZXJhbCBjbGVhbnVwIG9mIG1lc3NhZ2VzIHByaW50ZWQgYnkgZTJmc3Byb2dzIHByb2dyYW1zIGZvciBncmFtbWFyLAorY29uc2lzdGVuY3ksIGFuZCB0byBtYWtlIGxpZmUgZWFzaWVyIGZvciB0cmFuc2xhdG9ycy4gIEZpeGVkIGEgZmV3CitzdHJpbmdzIGNvbnRhaW5pbmcgRW5nbGlzaCB0aGF0IGhhZCBub3QgYmVlbiBtYXJrZWQgYXMgbmVlZGluZwordHJhbnNsYXRpb25zLiAgUmVtb3ZlZCBzdHJpbmdzIHRoYXQgZG8gbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZCwgdG8KK21ha2UgbGlmZSBlYXNpZXIgZm9yIHRyYW5zbGF0b3JzLgorCitNa2UyZnMgYW5kIGJhZGJsb2NrcyB3aWxsIHRha2UgYWR2YW50YWdlIG9mIGEgZmVhdHVyZSBpbiBMaW51eCAyLjYgdG8KK3Rlc3QgdG8gc2VlIGlmIGEgZGV2aWNlIGFwcGVhcnMgdG8gYmUgaW4gdXNlIGluc3RlYWQgb2YganVzdCByZWx5aW5nCitvbiAvcHJvYy9tb3VudHMgYW5kIC9ldGMvbXRhYi4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjMzA4NTk0KS4KKworRml4IHBvcnRhYmlsaXR5IHByb2JsZW0gaW4gdGhlIGZpbGVmcmFnIHByb2dyYW0gYWZmZWN0aW5nIHBsYXRmb3Jtcword2hlcmUgdGhlIHNpemUgb2YgYW4gaW50ZWdlciBpcyBzbWFsbGVyIHRoYW4gdGhlIHNpemUgb2YgYSBsb25nLgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnICMzMDk2NTUpCisKK01rZTJmcyB3aWxsIG5vdyB1c2UgYSBsYXJnZXIgam91cm5hbCBieSBkZWZhdWx0IGZvciBmaWxlc3lzdGVtcworZ3JlYXRlciB0aGFuIDRHQi4gICgxMjggTUIgaW5zdGVhZCBvZiAzMk1CKS4KKworTWtlMmZzIHdpbGwgcmVmdXNlIHRvIGNyZWF0ZSBmaWxlc3lzdGVtcyBncmVhdGVyIHRoYW4gMioqMzEtMSBibG9ja3MsCit1bmxlc3MgZm9yY2VkLiAgVGhpcyBpcyB0byBhdm9pZCBzaWduZWQgdnMuIHVuc2lnbmVkIGtlcm5lbCBidWdzIGluCitibG9jayBudW1iZXJzIHRoYXQgc3RpbGwgbmVlZCB0byBiZSBmaXhlZC4KKworVGhlIGJsa2lkIHByb2dyYW0gaGFzIGEgbmV3IG9wdGlvbiB3aGljaCB3aWxsIG1vcmUgZWZmaWNpZW50bHkgc2VhcmNoCitmb3IgZGV2aWNlIHdoZW4gaXQgaXMga25vd24gKG9yIGV4cGVjdGVkKSB0aGF0IG9ubHkgb25lIG1hdGNoaW5nCitkZXZpY2Ugd2lsbCBiZSBmb3VuZCBpbiB0aGUgc3lzdGVtLCBzdWNoIGFzIHdoZW4gZG9pbmcgYSBsb29rdXAgYnkKK1VVSUQuCisKK0RlYmlhbidzIGUyZnNwcm9ncy1zcGVjaWZpYyBpbml0cmQgZnJhZ21lbnQgd2lsbCBhdm9pZCBpbmNsdWRpbmcKK3VubmVjZXNzYXJ5IGxpYnJhcmllcyBpbnRvIHRoZSBpbml0cmQgcmFtZGlzayBieSB1bnNldHRpbmcgTERfUFJFTE9BRAorYW5kIExEX0xJQlJBUllfUEFUSCwgYW5kIGZpbHRlcmluZyBvdXQgbGlicmFyaWVzIGZvdW5kIGluCisvZXRjL2xkLnNvLnByZWxvYWQuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICMzMDQwMDMpCisKK0ZpeGVkIGEgcG90ZW50aWFsIHBvcnRhYmlsaXR5IGlzc3VlIGluIHRoZSBibGtpZCBwcm9ncmFtcyBmb3IKK2FyY2hpdGVjdHVyZXMgd2hlcmUgdGhlIGNoYXIgdHlwZSBpcyB1bnNpZ25lZC4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UKK0J1ZzogIzExODA1ODUpCisKK0ZpeCBhIGJ1ZyBpbiBmaWxlZnJhZyBzbyB0aGF0IGl0IGRvZXNuJ3QgZmFsc2VseSBjb3VudCBhbiBleHRyYQorZGlzY29udGludWl0eSB3aGVuIHRoZSBmaXJzdCBibG9jayBmb3VuZCBpcyBhbiBpbmRpcmVjdCBibG9jay4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjMzA3NjA3KS4KKworRml4IGJsa2lkJ3MgcmVjb2duaXRpb24gb2YgY3JhbWZzIGZpbGVzeXN0ZW1zLCBhbmQgZW5oYW5jZSBpdCB0byBiZQorYWJsZSB0byBoYW5kbGUgY3JhbWZzIGxhYmVscy4KKworRml4IGRlYnVnZnMncyBzdGF0IGNvbW1hbmQgdG8gbm90IGNvcmUgZHVtcCB3aGVuIGEgZmlsZXN5c3RlbSBpcyBub3QKK29wZW4uCisKK0ZpeCBlMmZzY2sncyBoYW5kbGluZyBvZiBlcnJvciBjb25kaXRpb25zIGNhdXNlZCBieSB0aGUgcmVzaXplIGlub2RlCitjbGFpbWluZyBibG9ja3MgdGhhdCBhcmUgYWxzbyB1c2VkIGJ5IG90aGVyIGlub2RlcywgYSBmaWxlc3lzdGVtCitjb3JydXB0aW9uIHdoaWNoIHdhcyBjb21tb25seSBjYXVzZWQgYnkgYSBidWcgaW4gRmVkb3JhIENvcmUgMydzCityZXNpemUyZnMgcHJvZ3JhbS4KKworRml4ZWQgYnVnIGluIGZpbGVmcmFnIHdoaWNoIGNhdXNlZCBpdCB0byBmYWlsIG9uIG5vbi1leHQyLzMKK2ZpbGVzeXN0ZW1zLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjMzAzNTA5KQorCitJZiB0aGUgc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgaW5kaWNhdGVzIHRoYXQgdGhlIHN5c3RlbSBjbG9jayBtYXkKK25vdCBiZSBhY2N1cmF0ZSwgdGhlbiBlMmZzY2sgd2lsbCBvbWl0IGNoZWNraW5nIGlub2RlcycgZGVsZXRpb24gdGltZQorZmllbGQgZm9yIGluZGljYXRpb25zIG9mIGEgcG90ZW50aWFsIGNvcnJ1cHRlZCBvcnBoYW5lZCBpbm9kZSBsaXN0LgorKFByZXZpb3VzbHkgZTJmc2NrIG9ubHkgb21taXRlZCB0aGVzZSBMT1dfRFRJTUUgY2hlY2tzIHdoZW4gdGhlCitzdXBlcmJsb2NrJ3MgbGFzdCB3cml0ZSB0aW1lIGxvb2tlZCBpbnNhbmUuKQorCitGaXhlZCBhIElBNjQgY29yZSBkdW1wIGJ1ZyBpbiB0aGUgZTJwIGxpYnJhcnkgd2hpY2ggYWZmZWN0ZWQgZHVtcGUyZnMuCisoQWRkcmVzc2VzIERlYmlhbiBidWcgIzMwMjIwMCkKKworTWFrZSB0aGUgYmxraWQgbGlicmFyeSBtb3JlIHBhcmFub2lkIGFib3V0IGJlaW5nIHJ1biBmcm9tIHNldGdpZAorcHJvZ3JhbXMsIGFuZCB0byB1c2UgX19zZWN1cmVfZ2V0ZW52KCkgZnJvbSBsaWJjIGlmIGl0IGlzIGF2YWlsYWJsZS4KKworRml4ZWQgc3BlbGxpbmcgbWlzdGFrZXMsIHR5cG9zLCBhbmQgb3RoZXJ3aXNlIGNsYXJpZmllZCBtYW4gcGFnZXMuCisoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjMzA0NTkxLCAjMzA0NTkyLCAjMzA0NTk0LCAjMzA0NTk3LCAjMzA0NTkzCithbmQgU291cmNlZm9yZ2UgQnVnOiAjMTE4OTgwMykKKworVXBkYXRlZCBhbmQgZml4ZWQgdHJhbnNsYXRpb25zLgorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworRXh0MmZzX3NldF9iaXQoKSwgZXh0MmZzX2NsZWFyX2JpdCgpLCBhbmQgZXh0MmZzX3Rlc3RfYml0KCBoYXZlIGJlZW4KK2NoYW5nZWQgdG8gdGFrZSBhbiB1bnNpZ25lZCBpbnQgZm9yIHRoZSBiaXQgbnVtYmVyLiAgTmVnYXRpdmUgYml0CitudW1iZXJzIHdlcmUgbmV2ZXIgYWxsb3dlZCAoYW5kIGRpZG4ndCBtYWtlIGFueSBzZW5zZSksIHNvIHRoaXMgc2hvdWxkCitiZSBhIHNhZmUgY2hhbmdlLiAgVGhpcyBpcyBuZWVkZWQgdG8gYWxsb3cgc2FmZSB1c2Ugb2YgYmxvY2sgbnVtYmVycworZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDIqKjMxLgorCitUaGUgY29tcGlsZV9ldCBwcm9ncmFtIHdpbGwgYXZvaWQgcmVjcmVhdGluZyBnZW5lcmF0ZWQgZm9vX2Vyci5jIGFuZAorZm9vX2Vyci5oIGZpbGVzIGlmIG5vIGNoYW5nZXMgYXJlIG5lY2Vzc2FyeS4gIFRoZSBjb21waWxlX2V0IHByb2dyYW0KK3dpbGwgYWxzbyBhdG9taWNhbGx5IHJlcGxhY2UgdGhlc2UgZmlsZXMgdG8gYXZvaWQgYSBwb3RlbnRpYWwgcGFyYWxsZWwKK2J1aWxkIHJhY2UgcHJvYmxlbSBvbiBTTVAgc3lzdGVtcy4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOgorIzExNTc5MzMpCisKK0FkZGVkIGEgbmV3IGZ1bmN0aW9uIHRvIHRoZSBibGtpZCBsaWJyYXJ5LCBibGtpZF9wcm9iZV9hbGxfbmV3KCksCit3aGljaCBvbmx5IHByb2JlcyBuZXdseSBhZGRlZCBkaXNrIGRldmljZXMsIGFuZCBjaGFuZ2UKK2Jsa2lkX2ZpbmRfZGV2X3dpdGhfdGFnKCkgdG8gdXNlIHRoaXMgZnVuY3Rpb24gc28gdGhhdCB3aGVuIGEKK3JlcXVlc3RlZCB0YWcgaXMgbm90IGZvdW5kLCBkZXZpY2VzIHRoYXQgd2VyZSBwcmV2aW91c2x5IG5vdCBjaGVja2VkCithcmUgc2VhcmNoZWQgYmVmb3JlIHNlYXJjaGluZyBhbGwgZGV2aWNlcyBpbiB0aGUgc3lzdGVtLgorCitBZGRlZCBuZXcgZnVuY3Rpb25zIHRvIHRoZSBibGtpZCBsaWJyYXJ5LCBibGtpZF9kZXZfc2V0X3NlYXJjaCgpIGFuZAorYmxraWRfZGV2X2hhc190YWcoKS4KKworRTJmc2NrJ3MgcHJvYmxlbSBzdHJpbmdzIGNhbiBub3cgdXNlIEBtIGFuZCBAbiBhcyBhYmJyZXZhdGlvbnMgZm9yCisibXVsdGlwbHktY2xhaW1lZCIgYW5kICJpbnZhbGlkIiwgcmVzcGVjdGl2ZWx5LgorCitUaGUgZTJmc3Byb2cucG90IGZpbGUgbm93IGhhcyBhbiBleHBsYW5hdGlvbiBvZiBob3cgdGhlIEAtZXhwYW5zaW9uCithbmQgJS1leHBhbnNpb24gd29ya3MsIGFuZCBzdHJpbmdzIGluIGUyZnNjay9wcm9ibGVtLmMgd2hpY2ggY29udGFpbiBACitjaGFyYWN0ZXJzIG5vdyBoYXZlIGNvbW1lbnRzIGluIGUyZnNwcm9ncy5wb3Qgd2l0aCB0aGUgQC1leHBhbnNpb24gdG8KK21ha2UgbGlmZSBlYXNpZXIgZm9yIHRyYW5zbGF0b3JzLgorCitGaXhlZCBtaXNzaW5nIHJldHVybiB2YWx1ZXMgaW4gdGhlIGV4dDJmcyBsaWJyYXJ5IHdoaWNoIGNvdWxkIGNhdXNlIGl0Cit0byByZXR1cm4gcmFuZG9tIGdhcmJhZ2UgaW4gY2VydGFpbiBlcnJvciBjb25kaXRpb25zLgorCitBbGxvdyB0aGUgY3VycmVudCB0aW1lIHRvIGJlIG92ZXJyaWRlbiB2aWEgdGhlIEUyRlNDS19USU1FIGVudmlyb25tZW50Cit2YXJpYWJsZSBmb3IgdXNlIGluIHJlZ3Jlc3Npb24gdGVzdHMuCisKK1RoZSB0ZXN0IHNjcnBpdCBkcml2ZXIgcHJvZ3JhbSBub3cgZXhpdHMgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cyBpZgordGhlcmUgYW55IG9mIGl0cyB0ZXN0IHRoYXQgaXQgcmFuIGZhaWxlZC4KKworRml4ZWQgcHJvYmxlbXMgd2l0aCBwYXJhYnVpbGRzIG9uIFNNUCBzeXN0ZW1zLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZQorQnVnOiAjMTE1NzkzMykKKworRml4ZWQgIm1ha2UgY2hlY2siIHNvIHRoYXQgaXQgY29tcGlsZXMgY29ycmVjdGx5IGV2ZW4gd2hlbiBlMmZzcHJvZ3MnCitoZWFkZXIgZmlsZXMgaGF2ZSBub3QgYmUgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0gaW5jbHVkZSBkaXJlY3Rvcmllcy4KKyhBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMTE4MDU3MikKKworRml4ZWQgZ2NjIC1XYWxsIG5pdHMuCisKKworRTJmc3Byb2dzIDEuMzcgKE1hcmNoIDIxLCAyMDA1KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBZGQgc3VwcG9ydCBmb3IgY2hlY2tpbmcgdGhlIHZhbGlkaXR5IG9mIEV4dGVuZGVkIEF0dHJpYnV0ZXMgc3RvcmVkIGluCitpbm9kZXMgdG8gZTJmc2NrLgorCitBZGQgc3VwcG9ydCBmb3IgZHVtcGluZyB0aGUgY29udGVudHMgb2YgbGFyZ2UgaW5vZGVzIHRvIGRlYnVnZnMsCitpbmNsdWRpbmcgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZXMgc3RvcmVkIGluIGlub2Rlcy4KKworRml4IG1rZTJmcywgZTJmc2NrLCBkZWJ1Z2ZzLCBhbmQgdGhlIGV4dDJmc19ta2RpciBmdW5jdGlvbiBzbyB0aGF0Cit3aGVuIHdlIGNyZWF0ZSBhIG5ldyBpbm9kZSB3ZSBtYWtlIHN1cmUgdGhhdCB0aGUgZXh0cmEgaW5mb3JtYXRpb24gaW4KK3RoZSBpbm9kZSAoYW55IGV4dHJhIGZpZWxkcyBpbiBhIGxhcmdlIGlub2RlIGFuZCBhbnkgZWEtaW4taW5vZGUKK2luZm9ybWF0aW9uKSBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuICBUaGlzIGNhbiB0YWtlIHBsYWNlIHdoZW4KK21rZTJmcyBjcmVhdGVzIHRoZSByb290IGFuZCBsb3N0K2ZvdW5kIGRpcmVjdG9yeSwgd2hlbiBlMmZzY2sgY3JlYXRlcworYSBuZXcgcm9vdCBpbm9kZSBvciBhIG5ldyBsb3N0K2ZvdW5kIGRpcmVjdG9yeSwgYW5kIHdoZW4gdGhlIHVzZXIgdXNlcwordGhlIGRlYnVnZnMgd3JpdGUsIG1rbm9kLCBvciBta2RpciBjb21tYW5kcy4gIE90aGVyd2lzZSwgdGhlIG5ld2x5CitjcmVhdGUgaW5vZGUgY291bGQgaW5oZXJpdCBnYXJiYWdlIChvciBvbGQgRUEgaW5mb3JtYXRpb24pIGZyb20gYQorcHJldmlvdXNseSBkZWxldGVkIGlub2RlLgorCitGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sgc28gaXQgd291bGQgbm90aWNlIGlmIGEgZmlsZSB3aXRoIGFuIGV4dGVuZGVkCithdHRyaWJ1dGUgYmxvY2sgd2FzIGV4YWN0bHkgMioqMzIgYmxvY2tzLCBzdWNoIHRoYXQgaV9ibG9ja3Mgd3JhcHBlZAordG8gemVyby4KKworQWRkZWQgc3VwcG9ydCB0byBmaWxlZnJhZyB0byBkZXRlY3QgZmlsZXMgd2hpY2ggYXJlIHVzaW5nIHRoZSBuZXcKK2V4cGVyaW1lbnRhbCBmaWxlIGV4dGVudHMgZm9ybWF0LCBhbmQgdXNlIHRoZSBub24tZXh0MiBhbGdvcml0aG0gaW4KK3RoYXQgY2FzZS4gIEZpeGVkIGEgYnVnIHRvIGF2b2lkIHJlcG9ydGluZyBhIGZhbHNlIGRpc2NvbnRpbnVpdHkgaWYKK3RoZXJlIGlzIG9uZSBvciBtb3JlIHVuYWxsb2NhdGVkIGJsb2NrcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZmlsZS4KKworRHVwbGljYXRlZCBhIGNoZWNrIGZvciBub3RpY2luZyB3aGV0aGVyIG9yIG5vdCB0aGUgbnVtYmVyIG9mIGJsb2NrcworKGdpdmVuIGEgY2VydGFpbiBibG9ja3NpemUpIGlzIGdyZWF0ZXIgdGhhbiAyKiozMiB3aGVuIHRoZQorQkxLR0VUU0laRTY0IGlvY3RsIGlzIG5vdCBhdmFpbGFibGUgdG8gZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZSgpLiAgVGhpcworYWxsb3dzIG1rZTJmcyB0byBhdXRvbWF0aWNhbGx5IHVzZSBhIGxhcmdlciBibG9ja3NpemUgd2hlbiBjcmVhdGluZyBhCitmaWxlc3lzdGVtIG9uIGEgdmVyeSBsYXJnZSBkZXZpY2Ugd2hlbiBydW4gb24gc3lzdGVtcyB0aGF0IGRvIG5vdAorc3VwcG9ydCBCTEtHRVRTSVpFNjQuCisKK0ZpeCB0aGUgSTE4TiBidWlsZCB3aGljaCB3YXMgYnJva2VuIGluIGUyZnNwcm9ncyAxLjM2IGJlY2F1c2UgdGhlCitidWlsZCBzeXN0ZW0gaGFkIGJlZW4gc3dpdGNoZWQgdG8gdHJlYXQgdGhlIC5nbW8gZmlsZXMgYXMgc2hpcHBlZAorZmlsZXMgKGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHN5c3RlbXMgdGhhdCBoYXZlIG9sZGVyIEdOVQorSTE4TiB0b29scyBpbnN0YWxsZWQpLCBidXQgdGhlIGdlbl90YXJiYWxsLmluIHNjcmlwdCB3YXMgc3RpbGwKK3JlbW92aW5nIHRoZSAuZ21vIGZpbGVzIGZyb20gdGhlIG9mZmljaWFsIHNvdXJjZSBkaXN0cmlidXRpb24uCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIHBhY2thZ2luZyBpc3N1ZXMgLS0tIHNlZSBkZWJpYW4vY2hhbmdlbG9nIGZvcgorZGV0YWlscy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3MgIyMyOTY3NjksICMyOTkzNDEpCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkZWQgbmV3IGZ1bmN0aW9ucyB0byB0aGUgZTJwIGxpYnJhcnkgd2hpY2ggY29udmVydCBiZXR3ZWVuIGEgc3RyaW5nCithbmQgb3NfdHlwZTogZTJwX29zMnN0cmluZygpIGFuZCBlMnBfc3RyaW5nMm9zKCksIGFuZCB1c2VkIHRoZW0gdG8KK21ha2UgdGhlIGdlbmVyYXRlZCBiaW5hcmllcyBtb3JlIGNvbXBhY3QuCisKK0ZpeGVkIGEgY29tcGlsZS10aW1lIGVycm9yIG9uIERhcndpbiBzeXN0ZW1zLgorCitDbGVhbmVkIHVwIHRoZSBsaWIvZXh0MmZzIE1ha2VmaWxlIHNsaWdodGx5LgorCisKK0UyZnNwcm9ncyAxLjM2IChGZWJydWFyeSA0LCAyMDA1KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FsbCBvZiB0aGUgcGF0Y2hlcyB0aGF0IHdlcmUgYXBwbGllZCB0byBGZWRvcmUgQ29yZSAzJ3MKK2UyZnNwcm9ncy0xLjM1LTExLjIgaGF2ZSBiZWVuIGludGVncmF0ZWQsIGFsdGhvdWdoIHNvbWV0aW1lcyB3aXRoIGEKK2xvdCBvZiBidWcgZml4ZXMgZmlyc3QuICBVc2VycyBvZiBGZWRvcmEgQ29yZSAzIGFyZSBzdHJvbmdseQorZW5jb3VyYWdlZCB0byB1cGdyYWRlIHRvIGUyZnNwcm9ncyAxLjM2IGFzIHNvb24gYXMgcG9zc2libGUuCisKK0FkZCBzdXBwb3J0IGZvciBmaWxlc3lzdGVtIHdpdGggdGhlIG9ubGluZSByZXNpemluZyB2aWEgcmVzaXplIGlub2RlCitmZWF0dXJlLiAgRml4ZWQgbnVtZXJvdXMgYnVncyBmcm9tIHRoZSBGZWRvcmEgcGF0Y2hlcy4gIFRoZSBGZWRvcmEKK3BhdGNoZXMgYWxzbyBkaWRuJ3QgYm90aGVyIHRvIGRvIGFueSBjb25zaXN0ZW5jeSBjaGVja2luZyBvbiB0aGUKK3Jlc2l6ZSBpbm9kZSwgb3IgYWRkIGFueSB0ZXN0cyB0byB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLiAgVGhlICItUgorcmVzaXplPTRnIiBvcHRpb24gdG8gbWtlMmZzIHdhcyBhIG5vLW9wIGluIHRoZSBGZWRvcmEgcGF0Y2hlcywgZGVzcGl0ZQorYmVpbmcgbGlzdGVkIGluIG1rZTJmcydzIHVzYWdlIG1lc3NhZ2UuICBBbGwgb2YgdGhlc2Ugc2hvcnRjb21pbmdzCitoYXZlIGJlZW4gY29ycmVjdGVkLgorCitFMmZzY2sgY2FuIGFsc28gYWxzbyBmaXggZmlsZXN5c3RlbXMgdHJhc2hlZCBieSBGZWRvcmEncyByZXNpemUyZnMKK3Byb2dyYW0uICBJbiBvcmRlciB0byBkbyB0aGlzLCB0aGUgdXNlciBtdXN0IHJ1biB0aGUgY29tbWFuZHM6CisKKwlkZWJ1Z2ZzIC13IC9kZXYvaGRYWFggLVIgImZlYXR1cmVzIF5yZXNpemVfaW5vZGUiCisgICAgICAgIGUyZnNjayAtZiAvZGV2L2hkWFhYCisKK09wdGlvbmFsbHksIHRoZSBleHQycHJlcGFyZSBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHJlLWVuYWJsZSBvbmxpbmUKK3Jlc2l6aW5nIGFmdGVyIHRoZSBmaWxlc3lzdGVtIGhhcyBiZWVuIGZpeGVkLgorCitUaGUgZnNjayBwcm9ncmFtIHdpbGwgbm93IGFjY2VwdCBhbiBvcHRpb25hbCBmaWxlZGVzY3JpcHRvciBhcmd1bWVudAordG8gdGhlIC1DIG9wdGlvbi4gIChUaGUgRmVkb3JhIHZlcnNpb24gb2YgdGhpcyBwYXRjaCB3b3VsZCBzb21ldGltZXMKK2NhdXNlIGZzY2sgdG8gaWdub3JlIGEgcGFyYW1ldGVyIG9uIGZzY2sncyBjb21tYW5kIGxpbmUgaW4gc29tZSByYXJlCitjYXNlcywgc2lnaC4pCisKK01ha2Ugc3VyZSBlMmZzcHJvZ3MgZG9lc24ndCB3cml0ZSBnYXJiYWdlIGludG8gdGhlIHJlc2VydmVkIHBvcnRpb24gb2YKK2xhcmdlIGlub2Rlcy4KKworTWFrZSBzdXJlIHJlc2l6ZTJmcyByZWxlYXNlcyB0aGUgYmxvY2tzIGJlbG9uZ2luZyB0byB0aGUgb2xkIGlub2RlCit0YWJsZSBibG9ja3Mgd2hlbiBtb3ZpbmcgdGhlIGlub2RlIHRhYmxlLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOgorIzI5MDg5NCkKKworU2tpcCB0aGUgcl9yZXNpemVfaW5vZGUgdGVzdCBpZiByZXNpemUyZnMgaXMgbm90IGNvbXBpbGVkIChkdWUgdG8KK2NvbmZpZ3VyZSAtLWRpc2FibGUtcmVzaXplcikKKworRTJmc2NrIG5vdyBjaGVja3MgdGhlIHN1bW1hcnkgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uLCBhbmQKK2lmIGFueSBvZiB0aGUgaW5mb3JtYXRpb24gaXMgb2J2aW91c2x5IHdyb25nLCBpdCB3aWxsIGZvcmNlIGEgZnVsbAorZmlsZXN5c3RlbSBjaGVjay4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjMjkxNTcxKQorCitGaXggZTJmc2NrIHRvIG5vdCBjb21wbGFpbiB3aGVuIHRoZSByZXNpemVfaW5vZGUgZmVhdHVyZSBpcyBlbmFibGVkLAorc19yZXNlcnZlZF9nZHRfYmxvY2tzIGlzIHplcm8sIGFuZCB0aGVyZSBpcyBubyBESU5EIGJsb2NrIGFsbG9jYXRlZCBpbgordGhlIHJlc2l6ZSBpbm9kZS4KKworRml4IGUyZnNjayB0byBub3RlIGRlbGV0ZSBzeW1saW5rcyB0aGF0IGNvbnRhaW4gYW4gZXh0ZW5kZWQgYXR0cmlidXRlCithZnRlciB0aGUgZXh0X2F0dHIgZmVhdHVyZSBmbGFnIGhhcyBiZWVuIGNsZWFyZWQuICAoQWRkcmVzc2VzIFJlZCBIYXQKK0J1Z3ppbGxhICMxNDYyODQpLgorCitBZGQgbmV3IHV0aWxpdHkgcHJvZ3JhbSwgY29weV9zcGFyc2UuYywgd2hpY2ggaXMgdmVyeSB1c2VmdWwKK2ZvciBkZWFsaW5nIHdpdGggbGFyZ2Ugc3BhcnNlIGZpbGVzIChzdWNoIGFzIGUyaW1hZ2UgZmlsZXMpLgorCitBZGQgc3VwcG9ydCBmb3Igam5sX2Jsb2Nrc1tdIGZvciBkZWJ1Z2ZzJ3Mgc2V0X3N1cGVyX3ZhbHVlLgorCitGaXggZmlsZWZyYWcgc28gdGhhdCBpdCB3b3JrcyBjb3JyZWN0bHkgd2l0aCBzcGFyc2UgZmlsZXMuCisKK0ZpbGVmcmFnIC12IHdpbGwgcHJpbnQgZmlyc3QgYW5kIGxhc3QgYmxvY2tzLgorCitBZGQgaW50ZXJwcmV0YXRpb24gb2YgT1MgQ3JlYXRvciB2YWx1ZXMgZm9yIEZyZWVCU0QgYW5kIExpdGVzIGluIG1rZTJmcworYW5kIGR1bXBlMmZzLgorCitBZGQgbWtlMmZzIHN1cHBvcnQgc28gdGhhdCBpdCBjYW4gc3VwcG9ydCBmaWxlc3lzdGVtcyBsYXJnZXIgdGhhbiA0VEIKK2F1dG9tYXRpY2FsbHksIGJ5IHJldHJ5aW5nIHdpdGggYSA0ayBibG9ja3NpemUgaWYgdGhlIGRldmljZSBzaXplIGlzCit0b28gYmlnIHRvIGJlIGV4cHJlc3NlZCB1c2luZyBhIDFrIGJsb2Nrc2l6ZS4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UKK2J1ZyAjMTEwNjYzMSkKKworQ2hhbmdlIGJsa2lkIHRvIHRlc3QgZm9yIE5URlMgZmlyc3QgYmVjYXVzZSBXaW5kb3dzIHNvbWV0aW1lcyBkb2Vzbid0CitjbGVhciBlbm91Z2ggb2YgdGhlIHBhcml0aW9uIHRvIGNvbmZ1c2UgdGhlIHByb2Jpbmcgcm91dGluZXMgaW50bwordGhpbmtpbmcgdGhlIG9sZCBmaWxlc3lzdGVtIHR5cGUgaXMgc3RpbGwgdmFsaWQuICAoQWRkcmVzc2VzIERlYmlhbgorQnVnICMyOTE5OTApCisKK0FkZCBzdXBwb3J0IGZvciBzd2FwIHBhcnRpdGlvbiBsYWJlbCBhbmQgdXVpZCdzIGluIHRoZSBibGtpZCBsaWJyYXJ5LgorCitBZGQgc3VwcG9ydCB0byB0aGUgYmxraWQgbGlicmFyeSB0byByZWNvZ25pemUgT3JhY2xlIEFTTSB2b2x1bWVzLgorCitNYWtlIGJsa2lkIC10IGRpc3BsYXkgYWxsIGRldmljZXMgdGhhdCBtYXRjaCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhLAorbm90IGp1c3QgdGhlIGZpcnN0IG9uZSwgYW5kIHdvcmsgbW9yZSBjb25zaXN0ZW50bHkgd2hlbiB0aGUgYmxraWQKK2NhY2hlIGZpbGUgaXMgbm90IGF2YWlsYWJsZSBvciBzZXQgdG8gL2Rldi9udWxsLiAgKEFkZHJlc3NlcyBEZWJpYW4KK0J1ZyAjMjkwNTMwIGFuZCAjMjkyNDI1KQorCitCYWRibG9ja3Mgd2lsbCBub3cgY29ycmVjdGx5IGRpc3BsYXkgYmxvY2sgbnVtYmVycyBncmVhdGVyIHRoYW4KKzk5OSw5OTksOTk5IGluIGl0cyBwcm9ncmVzcyBkaXNwbGF5LgorCitUaGUgdHVuZTJmcyBwcm9ncmFtIHdpbGwgbm90IGFsbG93IHRoZSB1c2VyIGZyb20gc2V0dGluZyBhIHJpZGljdWxvdXMKK251bWJlciBvZiByZXNlcnZlZCBibG9ja3Mgd2hpY2ggd291bGQgY2F1c2UgZTJmc2NrIHRvIGFzc3VtZSB0aGUKK3N1cGVyYmxvY2sgd2FzIGNvcnJ1cHQuICBFMmZzY2sncyBzdGFuZGFyZHMgZm9yIHdoYXQgaXMgYSByaWRpY3Vsb3VzCitudW1iZXIgb2YgcmVzZXJ2ZWQgYmxvY2sgaGFzIGFsc28gYmVlbiByZWxheGVkIHRvIDUwJSBvZiB0aGUgYmxvY2tzIGluCit0aGUgZmlsZXN5c3RlbS4KKworVGhlIGJsa2lkIGxpYnJhcnkgd2lsbCByZXR1cm4gdmZhdCBpbiBwcmVmZXJlbmNlIHRvIG1zZG9zLCBhbmQgZXh0MyBpbgorcHJlZmVyZW5jZSB0byBleHQyIChpZiB0aGUgam91cm5hbGxpbmcgZmxhZyBpcyBzZXQpIHNvIHRoYXQgbW91bnQgd2lsbAorZG8gdGhlIHJpZ2h0IHRoaW5nLiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMyODc0NTUpCisgIAorTWtlMmZzIHdpbGwgbm93IHVzZSB0aGUgLUUgb3B0aW9uIGZvciBleHRlbmRlZCBvcHRpb25zOyB0aGUgb2xkIC1SCisocmFpZCBvcHRpb25zKSBvcHRpb24gaXMgc3RpbGwgYWNjZXB0ZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorRml4IGEgZG91YmxlLWZyZWUgcHJvYmxlbSBpbiByZXNpemUyZnMuICAoUmVkIEhhdCBCdWd6aWxsYSAjMTMyNzA3KQorCitNa2UyZnMgd2lsbCBub3cgYWNjZXB0IGEgc2l6ZSBpbiBtZWdhYnl0ZXMsIGdpZ2FieXRlcywgYW5kIG90aGVyIHVuaXRzCisodmlhICIzMm0iIG9yICI0ZyIgb24gdGhlIGNvbW1hbmQgbGluZSkgaWYgdGhlIHVzZXIgZmluZHMgdGhpcyBtb3JlCitjb252ZW5pZW50IHRoYW4gc3BlY2lmeWluZyBhIGJsb2NrIGNvdW50LgorCitGaXggYW4gb2JzY3VyZSwgaGFyZC10byBmaW5kIGJ1ZyBpbiAiZTJmc2NrIC1TIiBjYXVzZWQgYnkgYW4gaW5vZGUKK2NhY2hlIGNvbmhlcmVuY3kgcHJvYmxlbS4KKworRGVidWdmcyBub3cgc3VwcG9ydHMgYSBuZXcgY29tbWFuZCwgc2V0X2lub2RlX2ZpZWxkLCB3aGljaCBhbGxvd3MgYQordXNlciB0byBtYW51YWxseSBzZXQgYSBzcGVjaWZpYyBpbm9kZSBmaWVsZCBtb3JlIGNvbnZlbmllbnRseSwgYXMgd2VsbAorYXMgc2V0IGVudHJpZXMgaW4gdGhlIGluZGlyZWN0IGJsb2NrIG1hcC4KKworRGVidWdmcydzIHNldF9zdXBlcl92YWx1ZSBjb21tYW5kIGhhcyBiZWVuIGVuaGFuY2VkIHNvIHRoYXQgdGhlIHVzZXIKK2NhbiBzZXQgbW9zdCBzdXBlcmJsb2NrIGZpZWxkcywgaW5jbHVkaW5nIHRoZSBkYXRlL3RpbWUgZmllbGRzIGFuZAorc29tZSBvZiB0aGUgbW9yZSBuZXdzbHkgYWRkZWQgc3VwZXJibG9jayBmaWVsZHMuCisKK0UyZnNwcm9ncyBwcm9ncmFtcyBub3cgYWNjZXB0IGFuIG9mZnNldCB0byBiZSBwYXNzZWQgdG8gdGhlIGZpbGUKK3NwZWNpZmllcnMsIHZpYSB0aGUgc3ludGF4OiAiL3RtcC90ZXN0LmltZz9vZmZzZXQ9MTAyNCIuCisKK0UyZnNwcm9ncyBwcm9ncmFtcyB3aWxsIG5vdyBhY2NlcHQgYmxvY2tzaXplcyB1cCB0byA2NTUzNjsga2VybmVsCitzdXBwb3J0IG9uIHRoZSB4ODYgZG9lc24ndCBleGlzdCBmb3Igbm93LCBidXQgaXQgY2FuIGJlIHVzZWZ1bCBvbgorb3RoZXIgYXJjaGl0ZWN0dXJlcyB3aXRoIHBhZ2Ugc2l6ZXMgZ3JlYXRlciB0aGFuIDRrLiAgVGhlcmUgYXJlIDIuNgora2VybmVsIHBhdGNoZXMgb3V0IHRoZXJlIHdoaWNoIGVuYWJsZSB0aGlzLCBidXQgdGhleSBhcmUgb2YgdGhpcword3JpdGluZyBzdGlsbCBleHBlcmltZW50YWwuCisKK1RoZSBlMmltYWdlIGNvbW1hbmQgbm93IHRha2VzIHRoZSAtcyBvcHRpb24gd2hpY2ggd2lsbCBzY3JhbWJsZQorZGlyZWN0b3J5IGVudHJpZXMgZm9yIHJhdyBpbWFnZSBmaWxlcy4KKworRml4IGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gdGhlIGZpbGVmcmFnIHByb2dyYW0uCisKK01ha2Ugc3VyZSBlMmZzY2sgZG9lc24ndCBjcmFzaCB3aGVuIC9wcm9jL2FjcGkvYWNfYWRhcHRlciBpcyBub3QKK3ByZXNlbnQuCisKK0ZpeCBidWcgaW4gZGVidWdmcyB3aGVyZSBraWxsX2ZpbGUgd291bGQgbGVhZCB0byBlcnJvcnMgd2hlbiBkZWxldGluZworZGV2aWNlcyBhbmQgc3ltbGlua3MuICAoU291cmNlZm9yZ2UgQnVncyAjOTU0NzQxIGFuZCAjOTU3MjQ0KQorCitGaXggYnVnIGluIHRoZSBibGtpZCBsaWJyYXJ5IHdoZW4gZGV0ZWN0aW5nIHRoZSBvY2ZzMSBmaWxlc3lzdGVtIAorCitSZW1vdmUgb2Jzb2xldGUgRVZNUyAxLnggYW5kIGEub3V0IERMTCBzdXBwb3J0LgorCitFMmZzY2sgd2lsbCBhdHRlbXB0IHRvIHJlY292ZXIgZnJvbSBhIGpvdXJuYWwgY29udGFpbmluZyBpbGxlZ2FsIGJsb2Nrcy4KKworRml4ZWQgdHdvIHBvdGVudGlhbCBvcmRlcmluZyBjb25zdHJhaW50IHByb2JsZW1zIGluIGUyZnNjayB3aGljaCBtaWdodAorY2F1c2UgdGhlIGZpbGVzeXN0ZW0gdG8gYmUgY29ycnVwdGVkIGlmIGUyZnNjayBpcyBpbnRlcnJ1cHRlZCBkdXJpbmcgYQorKGV4dHJlbWVseSBuYXJyb3cpIHJhY2Ugd2luZG93LiAgVGhhbmtzIHRvIEp1bmZlbmcgWWFuZyBmcm9tIHRoZQorU3RhbmZvcmQgTWV0YWNvbXBpbGF0aW9uIGdyb3VwIGZvciBwb2ludGluZyB0aGlzIG91dC4KKworRml4ZWQgYnVnIGluIGUyZnNjayB3aGVyZSBpdCB3b3VsZCBub3QgYWNjdXJhdGVseSBkZXRlY3Qgd2hldGhlciBvcgorbm90IHRoZSBzeXN0ZW0gaXMgcnVubmluZyBvbiBhZGFwdG9yIGlmIHRoZSBBQ1BJIGRldmljZSByZXByZXNlbnRpbmcKK3RoZSBBQyBhZGFwdGVyIGRpZG4ndCBjb3JyZXNwb25kIHRvIHRoZSB3aGF0IHdhcyB1c2VkIG9uIElCTQorVGhpbmtwYWRzLgorCitDaGFuZ2UgZTJmc2NrIHRvIGFjY2VwdCBkaXJlY3RvcmllcyBncmVhdGVyIHRoYW4gMzJNQi4KKworRml4IGUyZnNjayBzbyB0aGF0IGEgY2hlY2tpbnRlcnZhbCBvZiB6ZXJvIGRpc2FibGVzIGEgdGltZS1iYXNlZCBjaGVjaworb2YgdGhlIGZpbGVzeXN0ZW0uCisKK0RlYnVnZnMgd2lsbCBjaGVjayB0aGUgREVCVUdGU19QQUdFUiBlbnZpcm9tZW50IHZhcmlhYmxlIGluIHByZWZlcmVuY2UKK3RvIHRoZSBQQUdFUiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjMjM5NTQ3KQorCitUdW5lMmZzIHdpbGwgbm90IG1hcmsgcmV3cml0ZSB0aGUgc3VwZXJibG9jayBpZiB0aGUgZmVhdHVyZSBiaXRtYXNrcyAKK2FyZSBub3QgbW9kaWZpZWQuCisKK1RoZSBkZWJ1Z2ZzIHByb2dyYW0gd2lsbCBzZXQgdGhlIGZpbGV0eXBlIGluZm9ybWF0aW9uIHdoZW4gY3JlYXRpbmcgYQorbGluay4KKworQWRkIGRlYnVnZnMgLWQgb3B0aW9uIHRvIHVzZSBhIHNlcGFyYXRlIHNvdXJjZSBvZiBkYXRhIGJsb2NrcyB3aGVuCityZWFkaW5nIGZyb20gYW4gZTJpbWFnZSBmaWxlLgorCitBZGQgZTJpbWFnZSAtSSBvcHRpb24gd2hpY2ggYWxsb3dzIHRoZSBlMmltYWdlIG1ldGFkYXRhIHRvIGJlCitpbnN0YWxsZWQgaW50byBhIGZpbGVzeXN0ZW0uCisKK0ZpeGVkIGJ1ZyBpbiB0aGUgYmFkYmxvY2tzIHByb2dyYW0gd2hpY2ggY2F1c2VkICJkb25lIiB0byBhbHdheXMKK2FwcGVhciBpbiBlbmdsaXNoIGV2ZW4gd2hlbiBhIHRyYW5zbGF0aW9uIHdhcyBhdmFpbGFibGUuICAoQWRkcmVzc2VzCitEZWJpYW4gQnVnICMyNTI4MzYpCisKK1RoZSBibGtpZCBwcm9ncmFtIGhhcyBhIG5ldyBvcHRpb24gLW8gd2hpY2ggY29udHJvbHMgdGhlIG91dHB1dCBmb3JtYXQKK29mIHRoZSBibGtpZCBwcm9ncmFtOyB0aGlzIGlzIG1ha2VzIGJsa2lkIG1vcmUgY29udmVuaWVudCB0byB1c2UgaW4KK3NoZWxsIHNjcmlwdHMuCisKK0ZpeCBhIG1pbm9yIGJ1ZyBpbiB1dWlkIGxpYnJhcnksIHdoaWNoIHdhcyBub3QgdXNpbmcgdGhlIGZ1bGwgMTQgYml0cworb2YgY2xvY2sgc2VxdWVuY2Ugd2hlbiBnZW5lcmF0aW5nIFVVSUQncy4KKworRml4IGEgWTguODg4OEsgcHJvYmxlbSBpbiB0aGUgdXVpZCBsaWJyYXJ5LgorCitMb2dzYXZlIG5vdyBjcmVhdGVzIGEgbmV3IHNlc3Npb24gaWQgZm9yIGl0c2VsZiB0byBhdm9pZCBnZXR0aW5nCitraWxsZWQgYnkgaW5pdCB3aGFuIHRyYW5zaXRpb25pbmcgYmV0d2VlbiBpbml0IGxldmVscy4KKworQ2hhbmdlIHRoZSBsaWNlbnNpbmcgb2YgdGhlIFVVSUQgbGlicmFyeSB0byBiZSB0aGUgMy1jbGF1c2UgQlNELXN0eWxlCitsaWNlbnNlOyB0aGlzIGFsbG93cyBBcHBsZSB0byB1c2UgdGhlIHV1aWQgbGlicmFyeSBpbiBEYXJ3aW4uCisKK0FkZCBvY2ZzIGFuZCBvY2ZzMiBwcm9iZSBzdXBwb3J0IGludG8gdGhlIGJsa2lkIGxpYnJhcnkuCisKK0ZpeCBhIG1lbW9yeSBhbmQgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gdGhlIGJsa2lkIGxpYnJhcnkuCisKK1RoZSBibGtpZCBsaWJyYXJ5IHdpbGwgcmV2YWxpZGF0ZSB0aGUgZGV2aWNlIGlmIHRoZSBzeXN0ZW0gdGltZSBpcworZWFybGllciB0aGFuIGxhc3QgdmVyaWZpY2F0aW9uIHRpbWUgb2YgdGhlIGRldmljZSwgc2luY2UgdGhhdAoraW5kaWNhdGVzIHRoYXQgdGhlIHN5c3RlbSB0aW1lIGlzIHByb2JhYmx5IG5vdHRydXN0d29ydGh5LgorCitUaGUgYmxraWQgbGlicmFyeSB3aWxsIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBibGtpZC50YWIKK2ZpbGUgYnkgdGhlIEJMS0lEX0ZJTEUgZW52aXJvbm1lbnQgdmFyaWFibGUsIGlmIGl0IGlzIGF2YWlsYWJsZS4KKworQ2hhbmdlIHRoZSBnZXRzaXplIGZ1bmN0aW9ucyB0byB1c2UgdGhlIEJMS0dFVFNJWkU2NCBpb2N0bCBvbiBMaW51eCAyLjYuCisKK0FkZCB2YXJpb3VzIHBvcnRhYmlsaXR5IGZpeGVzIGZvciBsYW1lIG5ldyB2ZXJzaW9ucyBvZiBnbGliYywgRGFyd2luCithbmQgR05VL0tGcmVlQlNELCBhcyB3ZWxsIGFzIHJlbW92aW5nIFhTSTppc20ncy4gIChBZGRyZXNzZXMgRGViaWFuCitCdWdzICMyMzk5MzQsICMyNjQ2MzAsICMyNjkwNDQsICMyNTU1ODksICMyODkxMzMpCisKK0FkZCBzdXBwb3J0IGZvciBXaW5kb3dzIDl4L05UIHVuZGVyIEN5Z3dpbi4KKworVXBkYXRlZCBhbmQgY2xhcmlmaWVkIHZhcmlvdXMgbWFuIHBhZ2VzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVncyAjMjM2MzgzLAorCSMyNDE5NDAsICMyMzg3NDEsICMyNDI5OTUsICMyNTY2NjksICMyNjgxNDgsICMyNTY3NjAsICMyNzM2NzkpCisKK1VwZGF0ZWQgYW5kIGZpeGVkIHRyYW5zbGF0aW9ucy4gICAoQWRkcmVzc2VzIERlYmlhbiBidWdzICMyNDQxMDUsICMyNjI4MzYpCisKK1VwZGF0ZSB0aGUgcnBtIHNwZWMgZmlsZXMgc28gdGhhdCBpdCB3b3JrcyBiZXR0ZXIgd2l0aCBGZWRvcmEgY29yZSAyCithbmQgUkg5LgorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIChzZWUgZGViaWFuL2NoYW5nZWxvZykuICBJbgorcGFydGljdWxhciwgZml4ZWQgdGhlIERlYmlhbiBpbml0cmQgc2NyaXB0cy4gICgjMjQxMTgzLCAjMjQ4MDUwLAorIzI1MzU5NSwgIzI0Nzc3NSkKKworCitQcm9ncmFtbWVyJ3Mgbm90ZXM6IAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXhlZCB2YXJpb3VzIGdjYyAtV2FsbCB3YXJuaW5ncy4KKworVGhlIHV1aWQgbGlicmFyeSBub3cgaGFzIG5ldyBmdW5jdGlvbnMgdXVpZF91bnBhcnNlX3VwcGVyKCkgYW5kCit1dWlkX3VucGFyc2VfbG93ZXIoKSB3aGljaCBmb3JjZXMgdGhlIGNhc2Ugb2YgdGhlIGhleCBkaWdpdHMgdG8gYmUKK3VwcGVyIGNhc2UsIG9yIGxvd2VyIGNhc2UuCisKK1RoZSBidWlsZCBwcm9jZXNzIGhhcyBiZWVuIHNwZWVkZWQgdXAgYnkgZW5oYW5jaW5nIHRoZSBzdWJzdCBwcm9ncmFtCit0byB1cGRhdGUgdGhlIG1vZHRpbWUgb24gdGhlIGdlbmVyYXRlZCBmaWxlcyBldmVuIHdoZW4gdGhlIGdlbmVyYXRlZAorZmlsZSBoYXNuJ3QgY2hhbmdlZC4KKworVGhlIHV1aWQgbGlicmFyeSBub3cgdXNlcyBDOTkgc3RkaW50LmggdHlwZXMgaW5zdGVhZCBvZiBjdXN0b20gdHlwZXMuCisKK1VwZGF0ZWQgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIHdpdGggbmV3ZXIgdmVyc2lvbnMgZnJvbSB0aGUgRlNGLgorCitSZW1vdmVkIG91dCBvZiBkYXRlIC5jdnNpZ25vcmUgZmlsZXMgZnJvbSB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworVGhlIGV4dDJmc191bmxpbmsoKSBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBlcnJvciBpZiBib3RoIHRoZSBuYW1lIGFuZAoraW5vZGUgbnVtYmVyIGFyZSB1bnNwZWNpZmllZCwgdG8gYXZvaWQgZG9pbmcgc29tZXRoaW5nIHN1cnByaXNpbmcKKyhzdWNoIGFzIHVuY29uZGl0aW9uYWxseSBkZWxldGluZyB0aGUgZmlyc3QgZGlyZWN0b3J5IGVudHJ5KS4KK0RpcmVjdG9yeSBlbnRyaWVzIGFyZSBub3cgZGVsZXRlZCBieSBjb2FsZXNjaW5nIHRoZW0gd2l0aCB0aGUgcHJldmlvdXMKK2RpcmVjdG9yeSBlbnRyeSBpZiBwb3NzaWJsZSwgdG8gYXZvaWQgZGlyZWN0b3J5IGZyYWdtZW50YXRpb24uICBUaGlzCitpcyBub3QgYW4gaXNzdWUgd2l0aCB0aGUgZTJmc3Byb2dzIHN1aXRlLCBidXQgbWF5IGJlIGEgcHJvYmxlbSBmb3IKK3NvbWUgb2YgdGhlIHVzZXJzIG9mIGxpYmV4dDJmcywgc3VjaCBhcyBlMnRvb2xzLgorCitBZGQgc3VwcG9ydCBmb3IgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBmb3JtICIxLjM2LXJjMSIuCisKK0ZpeCBidWlsZCBvZiBta2UyZnMuc3RhdGljLgorCitBZGQgYmFzaWMgZXh0MmZzIGxpYnJhcnkgc3VwcG9ydCBmb3IgbGFyZ2UgKEVBIGluIGlub2RlKSBpbm9kZXMuCisKK1RoZSB0ZXN0X2lvIG1lY2hhbmlzbSBjYW4gbm93IGFib3J0IGFmdGVyIG4gcmVhZHMgb3Igd3JpdGVzIHRvIGEKK3BhcnRpY3VsYXIgYmxvY2suICBUaGUgYmxvY2sgaXMgc3BlY2lmaWVkIGJ5IFRFU1RfSU9fQkxPQ0sgZW52aXJvbm1lbnQKK3ZhcmlhYmxlLCBhbmQgdGhlIHJlYWQvd3JpdGUgY291bnQgYnkgdGhlIFRFU1RfSU9fUkVBRF9BQk9SVCBhbmQKK1RFU1RfSU9fV1JJVEVfQUJPUlQgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgVGhlIGJsb2NrIGRhdGEgaXMgbm93IG9ubHkKK2R1bXBlZCBpZiB0aGUgMHgxMCBiaXQgaXMgc2V0IGluIFRFU1RfSU9fRkxBR1MuCisKK1VVSURfREVGSU5FKCkgaW4gdGhlIHV1aWQgbGlicmFyeSBub3cgY3JlYXRlcyBhIHN0YXRpYyB2YXJpYWJsZSwgd2l0aAorX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpIGlmIHdlIGFyZSB1c2luZyBHQ0MsIHNvIHRoYXQgVVVJRF9ERUZJTkUgY2FuCitiZSB1c2VkIGluIGhlYWRlciBmaWxlcy4KKworQWRkIHN1cHBvcnQgZm9yIHRoZSBpbnN0YWxsLXN0cmlwIGFuZCBpbnN0YWxsLXNobGlicy1zdHJpcCB0YXJnZXRzLCBhcworc3VnZ2VzdGVkIGJ5IHRoZSBHTlUgY29kaW5nIGd1aWVsaW5lcy4gICJtYWtlIGluc3RhbGwiIG5vIGxvbmdlcgorc3RyaXBzIHRoZSBiaW5hcmllcyB3aGljaCBhcmUgaW5zdGFsbGVkLgorCitSZW1vdmUgc3VwcG9ydCBmb3IgdGhlIC0tZW5hYmxlLW9sZC1iaXRvcHMgY29uZmlndXJlIG9wdGlvbiB3aGljaCB3YXMKK29ubHkgZm9yIHZlcnkgb2xkIHNwYXJjIHN5c3RlbXMuCisKK1JlbW92ZSBzdXBwb3J0IGZvciAtLWVuYWJsZS1jbGVhci1odHJlZTsgdGhpcyB3YXMgb25seSBuZWVkZWQgZHVyaW5nCit0aGUgZWFybHkgZGV2ZWxvcG1lbnQgb2YgdGhlIGh0cmVlIHBhdGNoLgorCitVc2UgTGludXgta2VybmVsLXN0eWxlIG1ha2VmaWxlIG91dHB1dCBzbyBpdCBpcyBlYXNpZXIgdG8gc2VlIGNvbXBpbGVyCit3YXJuaW5ncy4KKworVXBkYXRlIGdldHRleHQgZmlsZXMgdG8gdmVyc2lvbiAwLjE0LjEuCisKK1VwZGF0ZSB0byB1c2UgYXV0b2NvbmYgMi41eC4KKworSW1wcm92ZWQgc3VwcG9ydCBmb3IgY29tcGlsaW5nIGUyZnNwcm9ncyB1bmRlciBkaWV0bGliYy4KKworTWFrZSBlMmZzcHJvZ3MgcG9ydGFibGUgdG8gU29sYXJpcyBhbmQgRnJlZUJTRCBzeXN0ZW1zLgorCitBZGQgYmxraWRfdmVyaWZ5KCksIGJsa2lkX2dldF9saWJyYXJ5X3ZlcnNpb24oKSwgYW5kCitibGtpZF9wYXJzZV92ZXJzaW9uX3N0cmluZygpIGZ1bmN0aW9ucyB0byB0aGUgYmxraWQgbGlicmFyeS4KKworQWRkIHBrZy1jb25maWcgZmlsZXMgZm9yIGUyZnNwcm9ncydzIGxpYnJhcmllcy4KKworRml4ICJtYWtlIHVuaW5zdGFsbCIgdG8gc28gdGhhdCBpdCByZW1vdmVzIGV2ZXJ5dGhpbmcgdGhhdCBpcyBpbnN0YWxsZWQuCisKK0FkZCBhIGNvbmZpZ3VyZSAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgb3B0aW9uIHdoaWNoIGVuYWJsZXMgdGhlCittYWtlZmlsZSBydWxlcyB0byByZWJ1aWxkIHRoZSBjb25maWd1cmUgc2NyaXB0IGZyb20gY29uZmlndXJlLmluLCBhbmQKK3RvIHJldWJ1aWxkIHRoZSAuZ21vIGZpbGVzIGluIHBvIGRpcmVjdG9yeS4KKworRHJvcCB0aGUgc3BhcmMgYXNzZW1ibHkgYml0d2lzZSBvcGVyYXRpb25zOyBpdCdzIGxlc3MgZWZmaWNpZW50Cit0aGFuIHRoZSBHQ0MgMy40IGNvbXBpbGUgY29kZSBhbmQgdHJpZ2dlcnMgY29tcGlsZXIgd2FybmluZ3Mgb24KK3NwYXJjNjQuICBUaGFua3MgdG8gTWF0dGhpYXMgQW5kcmVlIGZvciBoaXMgYW5hbHlzaXMgYW5kIHN1Z2dlc3Rpb25zLgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnICMyMzIzMjYpCisKKworRTJmc3Byb2dzIDEuMzUgKEZlYnJ1YXJ5IDI4LCAyMDA0KSAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRTJmc2NrIGhhcyBhIG5ldyAtayBvcHRpb24sIHdoaWNoIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIC1jIG9wdGlvbnMsCitwcmVzZXJ2ZXMgdGhlIGV4aXN0aW5nIGJhZGJsb2NrcyBsaXN0LgorCitDbGVhbmVkIHVwIGUyZnNjaydzIHByZWVuLW1vZGUgbWVzc2FnZXMgZHVyaW5nIHRoZSBwYXNzZXMgMWIsIDFjLCBhbmQgMWQuCisKK0UyZnNwcm9ncyB3aWxsIG5vdyBkZWFsIGNvcnJlY3RseSB3aXRoIHN5bWxpbmtzIHRoYXQgY29udGFpbgorZXh0ZW5kZWQgYXR0cmlidXRlIGluZm9ybWF0aW9uLCB3aGljaCBjYW4gYmUgY3JlYXRlZCB1c2luZyBTRSBMaW51eC4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjMjMyMzI4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorUmVtb3ZlIGEgZG91YmxlIGxvbmdqdW1wIGludG8gYW4gaW52YWxpZCBzdGFjayBmcmFtZSBidWcgaW4gZTJmc2NrLgorKFRoaXMgd2FzIGR1cmluZyBhbiBhYm9ydCBzZXF1ZW5jZSwgd2hpY2ggbm9ybWFsbHkgd29ya2VkIG9uIExpbnV4IGFuZAorY2F1c2VkIGEgY29yZSBkdW1wIG9uIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLikKKworRml4IE5MUyBidWcgaW4gZTJmc2NrLCBieSBhdm9pZGluZyB0cnlpbmcgdG8gZXhwYW5kIGFuIGVtcHR5IHN0cmluZworKHRoZSBOTFMgbGlicmFyeSB3aWxsIHJlcGxhY2UgIiIgd2l0aCB0aGUgLnBvIGhlYWRlciBpbmZvcm1hdGlvbikuCisgCitGaXggYSBidWcgaW4gbWtlMmZzIHdoaWNoIGNhdXNlZCAtVCBsYXJnZWZpbGUgb3IgLVQgbGFyZ2VmaWxlNCB0byBjb3JlCitkdW1wIGR1ZSB0byBhIGRpdmlzaW9uIGJ5IHplcm8gZXJyb3IuICAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzIwNzA4MikKKworRml4ZWQgYSBidWcgaW4gZTJmc2NrIHdoaWNoIGNhdXNlZCBpdCB0byBpbmNvcnJlY3RseSBmaXggYSBmaWxlc3lzdGVtCit3aGVuIHJlY29ubmVjdGluZyBhIGRpcmVjdG9yeSByZXF1aXJlcyBjcmVhdGluZyBhIGxvc3QrZm91bmQKK2RpcmVjdG9yeS4gIChBZGRyZXNzZXMgRGViaWFuIGJ1ZyAjMjE5NjQwKS4KKworRml4ZWQgYSBidWcgd2hlcmUgZTJmc2NrIHdvdWxkIGJvbWIgb3V0IGlmIGEgam91cm5hbCBuZWVkZWQgdG8gYmUKK3JlcGxheWVkIHdoZW4gdXNpbmcgYW4gYWx0ZXJuYXRlIHN1cGVyYmxvY2suCisgCitFMmZzY2sgd2lsbCBnaXZlIGFuIGV4dHJhIGdyYWNlIHBlcmlvZCBiZWZvcmUgYWN0dWFsbHkgZm9yY2luZyBhIGNoZWNrCitpZiB0aGUgbGFwdG9wIGlzIHJ1bm5pbmcgb24gYmF0dGVyeS4gIFRoZSBuZXh0IHRpbWUgZnNjayBydW5zIHdoaWxlCit0aGUgc3lzdGVtIGlzIG9uIHRoZSBBQyBtYWlucywgb3IgYWZ0ZXIgdGhlIGdyYWNlIHBlcmlvZCBpcyBleGNlZWRlZCwKK3RoZSBmaWxlc3lzdGVtIHdpbGwgYmUgY2hlY2tlZC4gIChBZGRyZXNzZXMgRGViaWFuIGJ1ZyAjMjA1MTc3KQorCitFMmZzY2sgd2lsbCBpbmZvcm0gdGhlIHVzZXIgd2hlbiB0aGVyZSBhcmUgNSBvciBmZXdlciBtb3VudHMgYmVmb3JlIGEKK2ZpbGVzeXN0ZW0gY2hlY2sgd2lsbCBiZSBmb3JjZWQuICAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzE1NzE5NCkKKworRml4IGUyZnNjaydzIGhhbmRsaW5nIG9mIGNvcnJ1cHRlZCBpbmRpcmVjdCBibG9ja3MgaW4gdGhlIGJhZCBibG9jay4KK1dlIG5vdyBjb3JyZWN0bHkgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGFuIG92ZXJsYXAgYmV0d2VlbiBhCitibG9jayBncm91cCBkZXNjcmlwdG9yIG9yIGEgc3VwZXJibG9jayBhbmQgYSBiYWQgYmxvY2sgaW5kaXJlY3QgYmxvY2suCitJbiB0aGUgY2FzZSB3aGVyZSB0aGUgaW5kaXJlY3QgYmxvY2sgaXMgY29ycnVwdGVkLCB3ZSBub3cgc3VnZ2VzdAorImUyZnNjayAtYyIuCisKK0ZpeCBieXRlIHN3YXAgYnVncyBpbiBlMmZzY2sgdGhhdCBjYXVzZWQgdGhlIGpvdXJuYWwgYmFja3VwIGxvY2F0aW9uIAoraW4gdGhlIHN1cGVyYmxvY2sgYW5kIHN5bWxpbmtzIGNyZWF0ZWQgYnkgU0UgTGludXggdG8gYmUgY2xlYXJlZAorYnkgZTJmc2NrIG9uIGJpZy1lbmRpYW4gbWFjaGluZXMuICAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzIyODcyMykKKworRTJmc2NrIC1jIG5vdyByZXBsYWNlcyB0aGUgY3VycmVudCBsaXN0IG9mIGJhZCBibG9ja3Mgd2l0aCB0aGUgb25lcworZm91bmQgYnkgYmFkYmxvY2tzLgorCitGaXggYnVncyBpbiBlMmZzY2sgYW5kIHR1bmUyZnMgd2hpY2ggY291bGQgY2F1c2UgYSBjb3JlIGR1bXAgaWYgYQorbm9uLWV4aXN0ZW50IExBQkVMIG9yIFVVSUQgc3BlY2lmaWVyIGlzIHRvIGUyZnNjayBvciB0dW5lMmZzLgorCitGaXggYSBwb3RlbnRpYWwgYnVnIGluIGUyZnNjayB3aGljaCBjb3VsZCBjYXVzZSBpdCB0byBjb3JlIGR1bXAgd2hlbgordHJ5aW5nIHRvIHByaW50IHRoZSBsb2NhdGlvbiBvZiB0aGUgYmFja3VwIHN1cGVyYmxvY2suCisKK1Byb3RlY3QgYWdhaW5zdCBhIHBvdGVudGlhbCBjb3JlIGR1bXAgaW4gZTJmc2NrIHdoZW4gcHJpbnRpbmcgYQorbWVzc2FnZSBhYm91dCBiYWNrdXAgc3VwZXJibG9ja3MuCisKK0FkZCBzdXBwb3J0IGZvciBiYWNraW5nIHVwIHRoZSBqb3VybmFsIGlub2RlIGxvY2F0aW9uIGluIHRoZQorc3VwZXJibG9jay4gIEUyZnNjayB3aWxsIGF1dG9tYXRpY2FsbHkgc2F2ZSB0aGUgam91cm5hbCBpbmZvcm1hdGlvbiBpbgordGhlIHN1cGVyYmxvY2sgaWYgaXQgaXMgbm90IHRoZXJlIGFscmVhZHksIGFuZCB3aWxsIHVzZSBpdCBpZiB0aGUKK2pvdXJuYWwgaW5vZGUgYXBwZWFycyB0byBiZSBjb3JydXB0ZWQuICBleHQyZnNfYWRkX2pvdXJuYWxfaW5vZGUoKQord2lsbCBhbHNvIHNhdmUgdGhlIGJhY2t1cCBpbmZvcm1hdGlvbiwgc28gdGhhdCBuZXcgZmlsZXN5c3RlbXMgY3JlYXRlZAorYnkgbWtlMmZzIGFuZCBmaWxlc3lzdGVtcyB0aGF0IGhhdmUgam91cm5hbHMgYWRkZWQgdmlhIHR1bmUyZnMgd2lsbAorYWxzbyBoYXZlIGpvdXJuYWwgbG9jYXRpb24gd3JpdHRlbiB0byB0aGUgc3VwZXJibG9jayBhcyB3ZWxsLgorRGVidWdmcydzIGxvZ2R1bXAgY29tbWFuZCBoYXMgYmVlbiBlbmhhbmNlZCBzbyB0aGF0IGl0IGNhbiB1c2UgdGhlCitqb3VybmFsIGluZm9ybWF0aW9uIGluIHRoZSBzdXBlcmJsb2NrLgorCitFMmZzY2sgd2lsbCBub3cgdXBkYXRlIGFsbCBzdXBlcmJsb2NrcyB3aGVuIG1vdmluZyB0aGUgam91cm5hbCBpbm9kZS4KKyAgCitTaHJpbmsgdGhlIHNpemUgb2YgdGhlIGUyZnNjayBleGVjdXRhYmxlIGJ5IG1vdmluZyBzb21lIGluaXRpYWxpemVkCit2YXJpYWJsZXMgdG8gdGhlIEJTUyBzZWdtZW50LgorCitFMmZzY2sgd2lsbCBhdm9pZCBwcmludGluZyB0aGUgXkEgYW5kIF5CIGNoYXJhY3RlcnMgd2hpY2ggYnJhY2tldCB0aGUKK3Byb2dyZXNzIGJhciB3aGVuIHN0ZG91dCBhbmQgc3RkaW4gYXJlIGEgdHR5IGRldmljZSBpbnN0ZWFkIG9mIGEgcGlwZQordG8gYW5vdGhlciBwcm9ncmFtLiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMyMDQxMzcpCisKK0RlYnVnZnMncyBta2RpciBjb21tYW5kIHdpbGwgYXV0b21hdGljYWxseSBleHBhbmQgdGhlIGRpcmVjdG9yeSBpZgorbmVjZXNzYXJ5LiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjMjE3ODkyKQorIAorRml4ZWQgYSBidWcgaW4gZGVidWdmcyBzbyB0aGF0IGNvcHlpbmcgYSBmaWxlIGZyb20gL2Rldi9udWxsIHVzZXMgdGhlCitjb3JyZWN0IG1vZGUgYml0cy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzIxNzQ1NikKKyAKK0lmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgREVCVUZTX1BBR0VSIGFuZCBQQUdFUiBhcmUgbm90IHNldCwKK2RlYnVnZnMgbm93IHNlYXJjaGVzIGZvciB0aGUgYXBwcm9wcmlhdGUgcGFnZXIgdG8gdXNlLCBiZWdpbm5pbmcgd2l0aAorL3Vzci9iaW4vcGFnZXIsIGFuZCB0aGVuIGZhbGxpbmcgYmFjayB0byAnbW9yZScgYW5kICdsZXNzJy4KKyhBZGRyZXNzZXMgRGViaWFuIGJ1ZyAjMjIxOTc3KQorCitEZWJ1Z2ZzIHdpbGwgbm93IHN1cHBvcnQgMi42IGRldmljZSBudW1iZXJzIHdoZXJlIHRoZSBtYWpvciBvciBtaW5vcgorbnVtYmVyIG1heSBiZSBsYXJnZXIgdGhhbiAyNTUuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIGJ1ZyAjODY1Mjg5KQorIAorRml4IGRlYnVnZ2luZyBwcmludGYgaW4gcmVzaXplMmZzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnICMyNzE2MDUpCisKK0NoYXR0ciBub3cgc3RvcHMgcHJvY2Vzc2luZyBvcHRpb25zIHdoZW4gaXQgc2VlcyAnLS0nLiAgKEFkZHJlc3NlcworRGViaWFuIGJ1ZyAjMjI1MTg4KQorCitGaXggcmVncmVzc2lvbiB0ZXN0cyBzbyB0aGV5IHdvcmsgY29ycmVjdGx5IHdoZW4gZTJmc3Byb2dzIGlzIGNvbXBpbGVkCit3aXRoIGNvbmZpZ3VyZSAtLWRpc2FibGUtaHRyZWUuCisKK0ZpeCBidWcgaW4gdXVpZCBsaWJyYXJ5IHdoZW4gdGhlcmUgaXMgbm8gbmV0d29yayBjYXJkIGFuZCB0aGUgbGlicmFyeQoraXMgZ2VuZXJhdGluZyBhIHRpbWUtYmFzZWQgdXVpZC4gIFRoZSByYW5kb20gTUFDIGFkZHJlc3Mgd2FzIG5vdAorY29ycmVjdGx5IGdlbmVyYXRlZCB0byBiZSBhIG11bHRpY2FzdCBhZGRyZXNzLgorIAorQWRkIGNvbXBpbGVfZXQgZXh0ZW5zaW9ucyBmcm9tIEhlaW1kYWxsIHRoYXQgd2VyZSBtaXNzZWQgdGhlIGZpcnN0IHRpbWUKK2Fyb3VuZC4KKworRml4IGJ1ZyBpbiBiYWRibG9ja3Mgd2hlbiB1c2luZyBPX0RJUkVDVDsgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdAord2UncmUgcmVhZGluZyBmcm9tIGFuIG9mZnNldCB3aGljaCBpcyBwYWdlIGFsaWduZWQuICBGb3IgcmVhZC1vbmx5IGFuZAorcmVhZC13cml0ZSB0ZXN0cywgd2UgdHJ5IHRvIHJlY292ZXIgYWZ0ZXIgYW4gZXJyb3Igc28gdGhhdCB3ZSBjYW4KK2NvbnRpbnVlIHJlYWRpbmcgb24gcGFnZS1hbGlnbmVkIGJvdW5kYXJpZXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWcKKyMyMDM3MTMpCisgIAorQmFkYmxvY2tzIG5vdyBjaGVja3MgNjQgYmxvY2tzIGF0IGEgdGltZSBpbnN0ZWFkIG9mIDE2LiAgKEFkZHJlc3NlcworRGViaWFuIGJ1ZyAjMjMyMjQwKQorIAorVXBkYXRlZCBhbmQgY2xhcmlmaWVkIHZhcmlvdXMgbWFuIHBhZ2VzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnCisjMjA2ODQ1LCAjMjIyNjA2LCAjMjE0OTIwLCAjMjMyNDA2KQorCitVcGRhdGVkIGFuZCBmaXhlZCB0cmFuc2xhdGlvbnMuICAgKEFkZHJlc3NlcyBEZWJpYW4gYnVncyAjMjAwMDg2LCAjMjE0NjMzKQorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIChzZWUgZGViaWFuL2NoYW5nZWxvZykuCisKK1Byb2dyYW1tZXIncyBub3RlczogCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeGVkIGEgYnVpbGQgcHJvYmxlbSBzbyB0aGF0IGUyZnNwcm9ncyB3b3VsZCBjb21waWxlIHdpdGggdGhlCistLWVuYWJsZS1wcm9maWxlIG9wdGlvbiB0byBjb25maWd1cmUgc2VsZWN0ZWQuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlCitidWcgIzgxMTQwOCkKKyAKK0ZpeGVkIEMrKyBwcm9ibGVtcyB3aXRoIHRoZSBleHQyZnMuaCBoZWFkZXIuICAoQWRkcmVzc2VzIFJlZCBIYXQKK0J1Z3ppbGxhIEJ1ZyAjMTEyNDQ4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQ2VudHJhbGl6ZSBjb2RlIHdoaWNoIGNhbGN1bGF0ZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzdXBlcmJsb2NrCithbmQgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgc28gdGhhdCBpdCBpcyBpbiBhIHNpbmdsZSBsaWJyYXJ5IHJvdXRpbmUuCisKK0FkZGVkIHR3byBuZXcgZnVuY3Rpb25zLCBleHQyZnNfZmlsZV9vcGVuMigpIGFuZAorZXh0MmZzX2lub2RlX2lvX2ludGVybjIoKSB3aGljaCB0YWtlIGEgcG9pbnRlciB0byBhbiBpbm9kZSBzdHJ1Y3R1cmUuCisKK0ZpeCBjb21waWxlX2V0IHRvIG91dHB1dCB0aGUgY29ycmVjdCBwcm90b3R5cGUgZm9yCitpbml0aWFsaXplX3h4eF9lcnJfdGFibGVfcigpIGluIHRoZSBoZWFkZXIgZmlsZS4gIChBZGRyZXNzZXMgRGViaWFuCitidWcgIzIwNDMzMikKKworSW4gdGhlIGxpYi9ldCBtYWtlZmlsZSwgbWFrZSBzdXJlIGNvbV9lcnIuaW5mbyBpcyBkZWxldGVkIG9uICJtYWtlIGNsZWFuIi4KKyAgCitGaXggNjQtYml0IHdhcm5pbmdzIGluIGUyZnNwcm9ncyBwYXNzMWIgYnkgdXNpbmcgaW50dHlwZXMuaCBpZgorcHJlc2VudC4gIFRoaXMgaXMgZm9yIHdoZW4gd2UgdHJ5IHN0dWZmaW5nIGFuIGludCBpbnRvIHZvaWQgKiBwb2ludGVyLgorCitGaXggdHlwZS1wdW5uaW5nIHdoaWNoIGNhbiBjYXVzZSBnY2MgMy54IHRvIG1pc2NvbXBpbGUgY29kZSBieSBnZXR0aW5nCitjb25mdXNlZCBhYm91dCBwb2ludGVyIGFsaWFzaW5nLiAgZXh0MmZzX2dldG1lbSgpLCBleHQyZnNfZnJlZV9tZW0oKSwKK2FuZCBleHQyZnNfcmVzaXplX21lbSgpIGFsbCBub3cgdGFrZSBhICd2b2lkIConIGluc3RlYWQgb2YgYSAndm9pZAorKionLiAgVGhlIEVWTVMgY29kZSB1c2VzIGFuIHVnbHkgdW5pb24gYXBwcm9hY2ggc2luY2Ugd2UgZG9uJ3Qgd2FudCB0bworbW9kaWZ5IHRoZSBFVk1TIGludGVyZmFjZXMuIAorCitNYWtlIHN1cmUgYWxsIE1ha2VmaWxlcyB1c2UgJChNQUtFKSByYXRoZXIgdGhhbiBoYXJkY29kZWQgIm1ha2UiLCB0bworYWlkIGJ1aWxkIHByb2Nlc3Mgb24gc3lzdGVtcyBjYW4gdXNlIGludm9rZSBHTlUgbWFrZSBhcyAiZ21ha2UiLgorCitBZGRlZCByZWdyZXNzaW9uIHRlc3RpbmcgZm9yIG1rZTJmcy4KKworRml4ZWQgZ2NjIC1XYWxsIG5pdHBpY2tzLgorCitGaXhlZCB2YXJpb3VzIGNvbXBpbGVyIHdhcm5pbmdzLgorCitBZGQgcG9ydGFiaWxpdHkgZml4ZXMgZm9yIEZyZWVCU0QgYW5kIGZvciB1c2luZyBmc2N0bCB1bmRlciBEYXJ3aW4gdG8KK3N1cHBvcnQgZXh0MiBpb2N0bCdzLgorCisKK0UyZnNwcm9ncyAxLjM0IChKdWx5IDI1LCAyMDAzKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlZCBhIGJ1ZyBpbnRyb2R1Y2VkIGluIEUyZnNwcm9ncyAxLjMwIHdoaWNoIGNhdXNlZCBmc2NrIHRvIHNwaW4gaW4KK2EgdGlnaHQgbG9vcCB3aGlsZSB3YWl0aW5nIGZvciBhIGNoaWxkIGZzY2sgdG8gZXhpdCBpbiBzb21lIGNhc2VzLgorVGhpcyBidXJucyBDUFUgdGltZXMgd2hpY2ggc2xvd3MgZG93biB0aGUgbG93LWxldmVsIGZpbGVzeXN0ZW0gY2hlY2suCisKK0FkZGVkIGNvZGUgdG8gbWtlMmZzIHRvIGFzc3VyZSB0aGF0IHRoZSBkZWZhdWx0IGJsb2NrIHNpemUgZm9yIGEKK2ZpbGVzeXN0ZW0gaXMgYXQgbGVhc3QgYXMgYmlnIGFzIHRoZSBzZWN0b3Igc2l6ZSBvZiB0aGUgZGV2aWNlLCBpZiBpdAorY2FuIGJlIGRldGVybWluZWQuCisKK0NoYW5nZWQgbWtlMmZzIGFuZCByZXNpemUyZnMgdG8gcm91bmQgdGhlIGRlZmF1bHQgc2l6ZSBvZiBhIGZpbGVzeXN0ZW0KK3RvIGJlIGFuIGV2ZW4gbXVsdGlwbGUgb2YgdGhlIFZNIHBhZ2VzaXplIGluIG9yZGVyIHRvIGF2b2lkIGEgTGludXgKK2tlcm5lbCBidWcgaW50cm9kdWNlZCB3aGVuIHRoZSBzdG9yYWdlIG9mIHRoZSBidWZmZXIgY2FjaGUgd2FzIG1vdmVkCitpbnRvIHRoZSBwYWdlIGNhY2hlLgorCitNa2UyZnMgd2lsbCB3YXJuIHRoZSB1c2VyIHdoZW4gY3JlYXRpbmcgYSBmaWxlc3lzdGVtIHdpdGggam91cm5hbGluZworYW5kIGEgYmxvY2tzaXplIGdyZWF0ZXIgdGhhbiA0MDk2LiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMxOTM3NzMpCisKK0ZpeGVkIGEgYnVnIGluIHJlc2l6ZTJmcyB3aGljaCBjYXVzZWQgaXQgdG8gZmFpbCBvbiBmaWxlc3lzdGVtcyB3aXRoIGEKK25vbi1lbXB0eSBiYWQgYmxvY2sgbGlzdC4gIFJlc2l6ZTJmcyBub3cgZGlzY2FyZHMgYW55IGJsb2NrcyBvbiB0aGUKK2JhZGJsb2NrIGxpc3Qgd2hpY2ggYXJlIG5vIGxvbmdlciBwYXJ0IG9mIHRoZSBmaWxlc3lzdGVtIGFzIHRoZSByZXN1bHQKK29mIGEgZmlsZXN5c3RlbSBzaHJpbmsuICAoTm90ZTogdGhpcyBtZWFucyB0aGF0IHNocmlua2luZyBhbmQgdGhlbgorZW5sYXJnaW5nIGEgZmlsZXN5c3RlbSBpcyBubyBsb25nZXIgYSByZXZlcnNpYmxlIG9wZXJhdGlvbjsKK2luZm9ybWF0aW9uIGFib3V0IGJhZCBibG9ja3MgaW4gdGhlIHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0gd2hpY2ggaXMgdG8KK2JlIGNob3BwZWQgb2ZmIHdpbGwgYmUgbG9zdC4pCisKK0NoYW5nZWQgcmVzaXplMmZzIHNvIHRoZSB1c2VyIGNhbiB1c2UgcHJlZml4ZXMgdG8gc3BlY2lmeSB0aGUgdW5pdHMgb2YKK3RoZSBuZXcgZmlsZXN5c3RlbSBzaXplIChzZWN0b3JzLCBraWxvYnl0ZXMsIG1lZ2FieXRlcywgb3IgZ2lnYWJ5dGVzKSwKK2FuZCB0byBtYWtlIHRoZSBlcnJvciBhbmQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyBleHBsaWNpdGx5IGRpc3BsYXkKK3RoZSBibG9ja3NpemUgdXNlZCBieSB0aGUgZmlsZXN5c3RlbSwgaW4gb3JkZXIgdG8gYXZvaWQgY29uZnVzaW9uLgorKEFkZHJlc3NlcyBEZWJpYW4gYnVnOiAjMTg5ODE0KQorCitBZGRlZCBhIG5ldyBkZWJ1Z2ZzIGNvbW1hbmQsIGR1bXBfdW51c2VkLCB3aGljaCBkdW1wcyB0aGUgY29udGVudHMgb2YKK2FsbCB1bnVzZWQgYmxvY2tzIHRvIHN0ZG91dC4gIChVc2VmdWwgYXMgYW4gZW1lcmdlbmN5IHRyeS10by1maW5kCitkZWxldGVkIGRhdGEgY29tbWFuZC4pCisKK0FkZGVkIGEgbmV3IGRlYnVnZnMgY29tbWFuZCwgaW1hcCwgd2hpY2ggcHJpbnRzIHRoZSBsb2NhdGlvbiBvZiBhCitzcGVjaWZpZWQgaW5vZGUgaW4gdGhlIGlub2RlIHRhYmxlLgorCitGaXhlZCBhIGJ1ZyBpbiB0aGUgYmFkYmxvY2tzIHByb2dyYW0gd2hpY2ggY2F1c2VkIGl0IHRvIHVzZSBvbmUgYml0IG9mCityYW5kb21uZXNzIGluIGl0cyBub24tZGVzdHJ1Y3RpdmUgcmVhZC93cml0ZSB0ZXN0LCBpbnN0ZWFkIG9mIHVzaW5nIGEKK2Z1bGwgOCBiaXRzIG9mIHJhbmRvbW5lc3MuCisKK0FkZGVkIGEgbmV3IG9wdGlvbiAoLXQpIHRvIGJhZGJsb2Nrcywgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIGNvbnRyb2wKK3RoZSB0ZXN0IHBhdHRlcm4ocykgdXNlZCB3aGVuIGNoZWNraW5nIGEgZGlzay4KKworVGhlIGJsa2lkIHByb2JlIGZ1bmN0aW9uIG5vdyBtb3JlIGNvcnJlY3RseSBkZXRlY3RzIFVERiBmaWxlc3lzdGVtcy4KKworRml4ZWQgYSBidWcgaW4gdGhlIGJsa2lkIGxpYnJhcnkgd2hpY2ggY2F1c2VkIGl0IHRvIG5vdCB1cGRhdGUgaXRzCitjYWNoZSBpZiBhIGZpbGVzeXN0ZW0gY2hhbmdlcyBmcm9tIGhhdmluZyBhIGxhYmVsIHRvIG5vdCBoYXZpbmcgYQorbGFiZWwuCisKK0ZpeGVkIGEgYnVnIGluIHRoZSBibGtpZCBsaWJyYXJ5IHdpaGNoIGNvdWxkIGF2b2lkIGFuIGluZmluaXRlIGxvb3AKK2luIGJsa2lkX2ZpbmRfZGV2X3dpdGhfdGFnKCkgaWYgL3Byb2MgaXMgbm90IG1vdW50ZWQgYW5kIHRoZXJlIHRoZQorL2V0Yy9ibGtpZC50YWIgZmlsZSBoYXMgbm90IHlldCBiZWVuIGNyZWF0ZWQuCisKK0ZpeGVkIHRoZSBiYWRibG9ja3MgcHJvZ3JhbSBzbyB0aGF0IHRoZSBkZXN0cnVjdGl2ZSByZWFkL3dyaXRlIHRlc3QKK2hvbm9ycyB0aGUgLWMgb3B0aW9uLCBhbmQgdG8gdXNlIE9fRElSRUNUIHdoZW4gcG9zc2libGUgdG8gYXZvaWQKK3RocmFzaGluZyB0aGUgc3lzdGVtIGJsb2NrIGJ1ZmZlciBjYWNoZS4KKworRml4ZWQgdmFyaW91cyBOTFMgaXNzdWVzLgorIC0gQWRkZWQgQ3plY2ggYW5kIFN3ZWRpc2ggdHJhbnNsYXRpb25zCisgLSBSZW1vdmVkIHRlc3RpbmcgTllDIHRyYW5zbGF0aW9uCisgLSBGaXhlZCBOTFMgc3VwcG9ydCBmb3IgbWVzc2FnZSBhYmJyZXZhdGlvbnMgaW4gZTJmc2NrCisgLSBSZW1vdmUgZGUtdXRmLnBvLCBzaW5jZSB3ZSBzaG91bGRuJ3QgaGF2ZSB0d28gdmVyc2lvbnMgdXNpbmcgZGlmZmVyZW50CisJY2hhcnNldCBlbmNvZGluZ3MuCisgLSBVc2VkIG5nZXR0ZXh0KCkgKGFiYnJlaXZhdGVkIHdpdGggdGhlIG1hY3JvIFBfKHN0cjEsIHN0cjIsIG4pKSB0byAKKwlzaW1wbGlmeSB0aGUgc3RhdGlzdGljcyByZXBvcnRpbmcgaW4gZTJmc2NrLgorCitDaGFuZ2VkIGNvbmZpZ3VyZS5pbiBzbyB0aGF0IGl0cyBkZWZhdWx0cyBmb3IgKkJTRCBzeXN0ZW1zIG5vIGxvbmdlcgorYnVpbGQgYW4gZnNjayB3cmFwcGVyLCBhbmQgbm90IHRvIGluc3RhbGwgaW4gL3Vzci9sb2NhbCBieSBkZWZhdWx0LgorCitGaXhlZCBzb21lIG1pbm9yIHNwZWxsaW5nIGVycm9ycy90eXBvJ3MgaW4gZTJmc2NrIGFuZCB0aGUgY29uZmlndXJlCitzY3JpcHQuCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIHBhY2thZ2luZyBpc3N1ZXMgKHNlZSBkZWJpYW4vY2hhbmdlbG9nKS4gCisKK1VwZGF0ZWQgYW5kIGNsYXJpZmllZCBtYW4gcGFnZXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzE5NTYxNikKKworUHJvZ3JhbW1lcidzIG5vdGVzOiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworRml4IGdjYyAtV2FsbCBuaXRwaWNrcy4KKworVXBkYXRlZCBnZXR0ZXh0IGltcGxlbWVudGF0aW9uIHVzZWQgYnkgZTJmc3Byb2dzIHRvIDAuMTEuNSwgYW5kIGVuYWJsZQorTkxTIHN1cHBvcnQgYnkgZGVmYXVsdC4gIChBZGRlZCBwYXJ0aWFsIHdvcmthcm91bmQgZm9yIGdldHRleHQvRGFyd2luCitpbmNvbXBhdGliaWxpdHkgcHJvYmxlbXMuKQorCitBZGRlZCBmdWxsIE1JVCBLUkI1IGFuZCBIaW1kYWxsIGNvbXBhaWJpbGl0eSBzdXBwb3J0IHRvIHRoZSBjb21fZXJyCitsaWJyYXJ5IGFuZCB0aGUgY29tcGlsZV9ldCBwcm9ncmFtLiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMxOTE5MDApCisKK0FkZGVkIHRoZSBibGtpZF9rbm93bl9mc3R5cGUoKSBmdW5jdGlvbiB0byB0aGUgYmxraWQgbGlicmFyeSwgd2hpY2gKK3JldHVybnMgdHJ1ZSBpZiBpdCBpcyBwYXNzZWQgYSBmaWxlc3lzdGVtIHR5cGUgd2hpY2ggaXMgcmVjb2duaXplZCBieQordGhlIGJsa2lkIHByb2JpbmcgZnVuY3Rpb25zLgorCitJbXByb3ZlZCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGJsa2lkIGxpYnJhcnkuCisKK0FkZGVkIHRoZSBleHQyZnNfZ2V0X2RldmljZV9zZWN0c2l6ZSgpIGZ1bmN0aW9uIHRoZSB0aGUgZXh0MmZzIGxpYnJhcnksIHdoaWNoCityZXR1cm5zIHRoZSBoYXJkd2FyZSBzZWN0b3Igc2l6ZSBvZiBhIGRldmljZSwgaWYgaXQgaXMgYXZhaWxhYmxlLgorCitBZGRlZCBhIGRlcGVuZGVuY3kgaW4gdGhlIGJsa2lkIGxpYnJhcnkncyAuc28gZmlsZSB0byB0aGUgdXVpZAorbGlicmFyeSwgc2luY2UgdGhlIGZvcm1lciB1c2VzIHRoZSBsYXR0ZXIuICAoQWRkcmVzc2VzIERlYmlhbiBidWcKKyMxOTQwOTQpCisKK0FkZGVkIC0td2l0aC1kaWV0LWxpYmMgYW5kIC0tZGlzYWJsZS1ldm1zIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0LgorCitGaXhlZCBhIG1pbm9yIG1lbW9yeSBsZWFrIGluIHRoZSBiYWRibG9ja3MgcHJvZ3JhbS4KKworRml4ZWQgYSBwb3J0YWJpbGl0eSBwcm9ibGVtIGluIHR1bmUyZnMgLS0tIG5vdCBhbGwgc3lzdGVtcyBoYXZlIHN0cnB0aW1lKCkuCisKK0ZpeGVkIGEgcG9ydGFiaWxpdHkgcHJvYmxlbSBpbiBkZWJ1Z2ZzIHdpdGggdGhlIHVzZSBvZiBnZXRvcHQoKSBtb3JlCit0aGFuIG9uY2UuICBPbGQtc3R5bGUgQlNELCBuZXctc3R5bGUgQlNELCBhbmQgTGludXggQyBsaWJyYXJpZXMgYWxsIGRvCit0aGluZ3MgZGlmZmVyZW50bHkuCisKK0FkZCBzdXBwb3J0IFdpbmRvd3Mgc3VwcG9ydCB0byBleHQyZnNfZ2V0X2RldmljZV9zaXplKCkuCisKK0FkZGVkIChub3JtYWxseSBkaXNhYmxlZCkgZGVidWdnaW5nIGNvZGUgdG8gdGhlIFVuaXggSS9PIG1hbmFnZXIgd2hpY2gKK2NhdXNlcyBpdCB0byBkaXNhYmxlIGFsbCB1c2Vyc3BhY2UgY2FjaGluZyBpZiB0aGUgTk9fSU9fQ0FDSEUgaXMKK2RlZmluZWQuCisKK0NoYW5nZWQgdGhlIHRlc3QgSS9PIG1hbmFnZXIgc28gaXQgY2FuIGFsd2F5cyBiZSBsaW5rZWQgaW50byBlMmZzY2ssCitta2UyZnMsIGFuZCB0dW5lMmZzIGlmIGVuYWJsZWQgdmlhIC0tZW5hYmxlLXRlc3QtaW8tZGVidWcgdG8gdGhlCitjb25maWd1cmUgc2NyaXB0LiAgVGhlIHRlc3QgSS9PIG1hbmFnZXIgd2lsbCBvbmx5IHByaW50IGFueSBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uIGlmIHRoZSBURVNUX0lPX0ZMQUdTIG9yIFRFU1RfSU9fQkxPQ0sgZW52aXJvbm1lbnQKK3ZhcmlhYmxlcyBhcmUgc2V0LCB3aGljaCBzcGVjaWZpZXMgd2hpY2ggSS9PIG9wZXJhdGlvbnMgYXJlIGxvZ2dlZCBhbmQKK2EgYmxvY2sgbnVtYmVyIHRvIHdhdGNoLCByZXNwZWN0aXZlbHkuICBUaGUgbG9nIG1lc3NhZ2VzIGFyZSBzZW50IHRvCitzdGRlcnIgYnkgZGVmYXVsdCwgdW5sZXNzIGEgZmlsZW5hbWUgaXMgc3BlY2lmaWVkIHZpYSB0aGUKK1RFU1RfSU9fTE9HRklMRSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworCitFMmZzcHJvZ3MgMS4zMyAoQXByaWwgMjEsIDIwMDMpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FkZGVkIGEgbmV3IHV0aWxpdHkgcHJvZ3JhbSwgbG9nc2F2ZSwgd2hpY2ggY2FwdHVyZXMgdGhlIG91dHB1dCBvZiBhCitjb21tYW5kIGluIGEgbG9nIGZpbGUsIGV2ZW4gaWYgdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5IGhhc24ndCBiZWVuCittb3VudGVkIHlldCAoaW4gd2hpY2ggY2FzZSB0aGUgaXQgc2F2ZXMgdGhlIG91dHB1dCBpbiBtZW1vcnkgdW50aWwgaXQKK2NhbiB3cml0ZSBvdXQgdGhlIGxvZ2ZpbGUpLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGNhcHR1cmluZyB0aGUKK291dHB1dCBvZiBmc2NrIGR1cmluZyB0aGUgYm9vdCBzZXF1ZW5jZS4KKworRml4ZWQgc29tZSBwb3J0YWJpbGl0eSBwcm9ibGVtcyB0aGF0IHdlcmUgY2F1c2luZyBwcm9ibGVtcyB1bmRlcgordGhlIEN5Z3dpbjMyIGVudmlyb25tZW50LgorCitNa2UyZnMgbm93IGludGVycHJldHMgYSBuZWdhdGl2ZSBudW1iZXIgdG8gdGhlIC1iIG9wdGlvbiBhcyBhIG1pbmltdW0KK2Jsb2NrIHNpemUuCisKK0ZpeGVkIGEgYnVnIGluIG1rZTJmcyB3aGljaCB3YXMgaW5jb3JyZWN0bHkgY2hlY2tpbmcgdGhlIGFyZ3VtZW50IHRvCit0aGUgLWcgb3B0aW9uIGlmIHRoZSBkZWZhdWx0IGJsb2NrIHNpemUgd2FzIHVzZWQuICAoQWRkcmVzc2VzIERlYmlhbgorYnVnICMxODgzMTkpCisKK0ZzY2sgbm93IGV4cGxpY2l0bHkgaWdub3JlcyB0bXBmcyBhbmQgZGV2cHRzLCBhbmQgaXQgd2lsbCBjb21wbGFpbiBpZgoraXQgY2FuIG5vdCBmaW5kIGZpbGVzeXN0ZW0gY2hlY2tlcnMgZm9yIGpmcywgcmVzZWlyZnMsIGFuZCB4ZnMuCisKK0UyZnNjayBub3cgdXBkYXRlcyB0aGUgZ2xvYmFsIGZyZWUgYmxvY2sgYW5kIGlub2RlIGNvdW50ZXJzIGZyb20gdGhlCitibG9jayBncm91cCBzcGVjaWZpYyBjb3VudGVycyBxdWlldGx5LiAgVGhpcyBpcyBuZWVkZWQgZm9yIGFuCitleHBlcmltZW50YWwgcGF0Y2ggd2hpY2ggZWxpbWluYXRlcyBsb2NraW5nIHRoZSBlbnRpcmUgZmlsZXN5c3RlbSB3aGVuCithbGxvY2F0aW5nIGJsb2NrcyBvciBpbm9kZXM7IGlmIHRoZSBmaWxlc3lzdGVtIGlzIG5vdCB1bm1vdW50ZWQKK2NsZWFubHksIHRoZSBnbG9iYWwgY291bnRzIG1heSBub3QgYmUgYWNjdXJhdGUuCisKK0ltcG9ydGVkIGJ1ZyBmaXhlcyB0byB0aGUgRVZNUyBwbHVnaW4gZnJvbSB0aGUgRVZNUyAyLjAgdHJlZS4gIChFVk1TCisyLjAgaXMgbm90IHlldCBzdXBwb3J0ZWQ7IHRoaXMgb25seSBwdWxsZWQgaW4gdGhlIGJ1ZyBmaXhlczogZml4ZWQKK3Bvc3NpYmxlIGhhbmdzIGNhdXNlZCBieSBidWdzIGluIGNhbGxpbmcgd2FpdHBpZCwgYW5kIG5vdCBzZXR0aW5nIHRoZQorcGlwZSB0byBub24tYmxvY2tpbmcgbW9kZTsgYWxzbyBmaXhlZCBhIGZpbGUgZGVzY3JpcHRvciBsZWFrOyBtYWRlCitzdXJlIGFsbCBmdW5jdGlvbnMgY2FsbCBsb2cgZW50cnkvZXhpdCBmdW5jdGlvbnMuKQorCitCYWRibG9ja3Mgbm93IGZsdXNoZXMgaXRzIG91dHB1dCBmaWxlIGFzIGJhZCBibG9ja3MgYXJlIGRpc2NvdmVyZWQuCisKK1RoZSB1dWlkIGxpYnJhcnkgaXMgbm93IG1vcmUgcGFyYW5vaWQgYWJvdXQgYXNzdW1pbmcgdGhlIGNvcnJlY3RuZXNzCitvZiB0aGUgL2Rldi9yYW5kb20gZGV2aWNlOyBpdCBtaXhlcyBpbiBhIHN0cmVhbSBvZiBieXRlcyBmcm9tCityYW5kb20vc3JhbmRvbSwganVzdCBpbiBjYXNlLgorCitVcGRhdGUgRGViaWFuIGZpbGVzIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCBJIGFtIG5vdyB0aGUgRGViaWFuCittYWludGFpbmVyIG9mIGUyZnNwcm9ncy4gIE90aGVyIHZhcmlvdXMgRGViaWFuLXNwZWNpZmljIHBhY2thZ2luZworY2xlYW51cHMuCisKK01vdmUgdGhlIHNvdXJjZSB0YXJiYWxsIGdlbmVyYXRpb24gZnVuY3Rpb25zIGZyb20gdGhlIHRvcC1sZXZlbAorbWFrZWZpbGUgdG8gdGhlIHV0aWwvZ2VuLXRhcmJhbGwgc2NyaXB0LiAgCisKK1VwZGF0ZWQgdGhlIFR1cmtpc2ggLnBvIHRyYW5zbGF0aW9uIGZpbGUuCisKK0FkZGVkIEhlaW1kYWwgYW5kIE1JVCBrcmI1IGV4dGVuc2lvbnMgdG8gdGhlIGNvbV9lcnIgbGlicmFyeSB0byBtYWtlCitpdCBtb3JlIGNvbXBhdGlibGUgd2l0aCBjb21fZXJyIGxpYnJhcmllcyBmcm9tIHRob3NlIGRpc3RyaWJ1dGlvbnMuCisKK0NoYW5nZWQgZHVtcGUyZnMgdG8gYWx3YXlzIGRpc3BsYXkgdGhlIHN1cGVyYmxvY2sgZmllbGRzIHJlbGF0aW5nIHRvCit0aGUgam91cm5hbGxpbmcgYW5kL29yIGRpcmVjdG9yeSBpbmRleGluZyBmZWF0dXJlIGV2ZW4gaWYgdGhvc2UKK2ZlYXR1cmVzIGFyZSBub3QgZW5hYmxlZC4KKworVXBkYXRlZCBhbmQgY2xhcmlmeSBjb3B5cmlnaHQgc3RhdGVtZW50IHZpcy1hLXZpcyBhbHBoYSByZWxlYXNlcyBvZgorZTJmc3Byb2dzLgorCitUaGUgc3MgbGlicmFyeSB3aWxsIG5vdyB0cnkgdG8gZHluYW1pY2FsbHkgbGluayB0byB0aGUgcmVhZGxpbmUKK2xpYnJhcnkgYW5kIHVzZSBpdCBpZiBpdCBpcyBwcmVzZW50IGluIHRoZSBzeXN0ZW0uICBUaGlzIG1lYW5zIHRoYXQKK3RoZSBkZWJ1Z2ZzIHByb2dyYW0gbm93IGhhcyBsaW5lIGVkaXRpbmcgYW5kIGhpc3RvcnkgZmVhdHVyZXMuICBUaGUKK1NTX1JFQURMSU5FX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgdXNlZCB0byBmaW5kIGEgcmVhZGxpbmUgb3IKK3JlYWRsaW5lLWNvbXBhdGlibGUgbGlicmFyeS4KKworRTJmc2NrIG5vdyBmaW5kcyBtb3N0IGR1cGxpY2F0ZSBmaWxlbmFtZXMgKGFsbCB3aGVuIHJlYnVpbGRpbmcgYWxsCitkaXJlY3RvcmllcyB2aWEgdGhlIC1EIG9wdGlvbikgYW5kIG9mZmVycyB0byBkZWxldGUgb3IgcmVuYW1lCitkdXBsaWNhdGUgZmlsZW5hbWVzL2RpcmVjdG9yeSBlbnRyaWVzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnICMxNzY4MTQpLgorCitGaXggYnVnIGluIGUyaW1hZ2UuICBXaGVuIHdyaXRpbmcgb3V0IGEgcmF3IGltYWdlIGZpbGUsIGluY2x1ZGUgZGF0YQorYmxvY2tzIGZyb20gc3ltbGlua3MgdGhhdCBkbyBub3Qgc3RvcmUgdGhlIHN5bWxpbmsgd2l0aGluIHRoZSBpbm9kZS4KKworRml4IGJ1ZyBpbiByZXNpemUyZnMgd2hpY2ggaW5jb3JyZWN0bHkgbW92ZWQgdGhlIGJsb2NrIGFuZCBpbm9kZQorYml0bWFwcyBmb3Igc3BhcnNlIHN1cGVyYmxvY2sgZmlsZXN5c3RlbXMgYW5kIGluY29ycmVjdGx5IG1hcmtlZAorYmxvY2tzIGFzIGluIHVzZS4gIChBZGRyZXNzZXMgRGViaWFuIGJ1ZyAjMTc0NzY2KQorIAorQWRkZWQgYSBuZXcgc2hhcmVkIGxpYnJhcnksIHRoZSBibGtpZCBsaWJyYXJ5LCB3aGljaCBlZmZpY2llbnRseQorYWxsb3dzIGZzY2ssIG1rZTJmcywgZTJmc2NrLCBhbmQgdHVuZTJmcyB0byBiZSBhYmxlIHRvIGxvb2sgdXAgTEFCRUwKK2FuZCBVVUlEIGZpbGVzeXN0ZW0gc3BlY2lmaWVycyB3aXRob3V0IG5lZWRpbmcgdG8gc2VhcmNoIGFsbCBvZiB0aGUKK2RldmljZXMgaW4gdGhlIHN5c3RlbS4gIEluc3RlYWQsIHRoZSBkZXZpY2UgaXMgbG9va2VkIHVwIGluIGEgY2FjaGUKK2ZpbGUsIGFuZCB0aGVuIHZlcmlmaWVkIHRvIG1ha2Ugc3VyZSB0aGUgYmxraWQgY2FjaGUgaXMgY29ycmVjdC4KKworVHVuZTJmcyBhbmQgZTJsYWJlbCB3aWxsIGFjY2VwdCBMQUJFTD14eHggYW5kIFVJRD15eXkgc3BlY2lmaWVycyBmb3IKK3RoZSBkZXZpY2UgbmFtZSwgdXNpbmcgdGhlIGJsa2lkIGxpYnJhcnkuICAoQWRkcmVzc2VzIERlYmlhbiBidWdzCisjMTY2MDQ4LCAjMTc5NjcxKQorCitGc2NrIG5vdyBzdXBwb3J0cyBiYWNrc2xhc2ggZXNjYXBlcyBpbiAvZXRjL2ZzdGFiIHNvIHRoYXQgXDA0MCBjYW4gYmUKK3VzZWQgZm9yIHNwYWNlcyBpbiBkZXZpY2UgbGFiZWxzLgorCitSZW1vdmVkIDMyLWJpdCBsaW1pdGF0aW9ucyBmb3IgZGVidWdmcydzIGR1bXAgY29tbWFuZC4KKworSWYgdGhlIHVzZXIgc3BlY2lmaWVzIGEgbGFyZ2UgbnVtYmVyIG9mIGlub2RlcywgTWtlMmZzIHdpbGwKK2F1dG9tYXRpY2FsbHkgYWRqdXN0IHRoZSBudW1iZXIgb2YgYmxvY2tzIHBlciBncm91cCB0byBmaW5kIGEgdmFsaWQKK3NldCBvZiBmaWxlc3lzdGVtIHBhcmFtZXRlcnMuCisKK0FkZCB3b3JrYXJvdW5kIHRvIGRldGVjdCBicm9rZW4gTUQgZGV2aWNlcyB3aGVyZSB3aGVuIHNvbWUgb2YgdGhlCit1bmRlcmx5aW5nIGRldmljZXMgYXJlIG1hcmtlZCByZWFkLW9ubHksIHdyaXRlcyB0byB0aGUgTUQgZGV2aWNlIGFyZQorc2lsZW50bHkgZHJvcHBlZC4gIEUyZnNjayB3aWxsIGRldGVjdCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRvIHJ1bgordGhlIGpvdXJuYWwgdHdpY2UsIGFuZCBhYm9ydCB3aXRoIGFuIGVycm9yIGlmIHRoaXMgaXMgdGhlIGNhc2UuCisoQWRkcmVzc2VzIElCTSBCdWd6aWxsYSBidWcgIzEyMjYpCisKK0UyZnNjayB3aWxsIHByaW50IGFuIGVycm9yIGlmIG1vcmUgdGhhbiBvbmUgb2YgdGhlIC1wLy1hLCAtbiBvciAteQorb3B0aW9ucyBhcmUgc3BlY2lmaWVkLgorCitFMmZzY2sgd2lsbCBmaXggSFRSRUUgY29ycnVwdGlvbnMgaW4gcHJlZW4gbW9kZSwgd2l0aG91dCBzdG9wcGluZyB0aGUKK2Jvb3QgcHJvY2Vzcy4gIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIDIuNCBleHQyIGZpbGVzeXN0ZW0KK2FjY2lkZW50YWxseSBoYWQgdGhlIElOREVYX0ZMIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGNvZGUgcmVtb3ZlZC4KKworTWtlMmZzIG5vIGxvbmdlciBjcmVhdGVzIGZpbGVzeXN0ZW1zIHdpdGggdGhlIGRpcl9pbmRleCBmbGFnIHNldCBieQorZGVmYXVsdDsgdGhlIHVzZXIgaGFzIHRvIHNwZWNpZmljYWxseSByZXF1ZXN0IGl0LgorCitVcGRhdGUgYW5kIGNsYXJpZmllZCB2YXJpb3VzIG1hbiBwYWdlcy4gKEFkZHJlc3NlcyBEZWJpYW4gYnVncworIzE3MzYxMiwgIzE3NTIzMywgIzE3NTExMywgYW5kICMxNzA0OTcsICMxODU5NDUsICMxODgzMTgpCisKK0NyZWF0ZWQgbWFuIHBhZ2UgZm9yIHRoZSBta19jbWRzIHByb2dyYW0gKGZyb20gdGhlIGxpYnNzIGxpYnJhcnkpLgorCitQcm9ncmFtbWVyJ3Mgbm90ZXM6IAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXggdmFyaW91cyBnY2MgLVdhbGwgbml0cy4KKworRml4ZWQgYSBsb3Qgb2YgcG9ydGFiaWxpdHkgcHJvYmxlbXMgdGhhdCBjYXVzZWQgZTJmc3Byb2dzIG5vdCB0byBidWlsZAorc3VjY2Vzc2Z1bGx5IHVuZGVyIFNvbGFyaXMgYW5kIEFwcGxlL0Rhcndpbi4KKworRml4ZWQgYSBNYWtlZmlsZSBkZXBlbmRlbmN5IHRvIGFsbG93IGJ1aWxkaW5nIGUyZnNwcm9ncyB1c2luZyBwYXJhbGxlbAorbWFrZSBqb2JzLgorCitDaGFuZ2VzIHRvIGNyZWF0ZSBhIHN1YnNldCBkaXN0cmlidXRpb24gd2hpY2ggY29uc2lzdHMgb25seSBvZiB0aGUKK2V0LCBzcywgdXVpZCwgYW5kIGJsa2lkIGxpYnJhcmllcy4gIFRoZSBjb25maWd1cmUgc2NyaXB0IGFuZCB0b3AtbGV2ZWwKK21ha2VmaWxlIHdlcmUgY2hhbmdlZCB0byBzdXBwb3J0IHdvcmtpbmcgd2l0aCBhIHN1YnNldCBkaXN0cmlidXRpb24uCisKK1JlbW92ZWQgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIgbWVudGlvbiBvZiBzaW5jZSBpdCdzIG5vdAorYWN0dWFsbHkgdXNlZCwgYW5kIG1pZ2h0IHBlb3BsZSB3aG8gYXJlIGxvb2tpbmcgZm9yCitFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWCwgd2hpY2ggaXMgaW4gdXNlLgorCitVcGRhdGVkIGRlYmlhbiBmaWxlcyB0byBmaXggYSBudW1iZXIgb2YgTGludGlhbiB3YXJuaW5ncy4KKworVXBkYXRlZCBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIgd2l0aCBuZXdlciB2ZXJzaW9ucyBmcm9tIHRoZSBGU0YuCisKK1JlbW92ZWQgdW5uZWNlc3NhcnkgbGlicmFyaWVzIGZyb20gYmVpbmcgbGlua2VkIGludG8gdGhlIGZzY2ssIGxzYXR0ciwgCitjaGF0dHIsIGFuZCBibGtpZCBleGVjdXRhYmxlcy4KKworRTJmc3Byb2dzIDEuMzIgKE5vbXZlbWJlciA5LCAyMDAyKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlZCBhIGJ1ZyBpbiB0aGUgVW5peCBJL08gcm91dGluZXMgd2hpY2ggY2F1c2VkIG5lZWRsZXNzIHdyaXRlYmFja3MKK29mIGNsZWFuIGJsb2NrcyBmcm9tIHRoZSB1bml4X2lvIGNhY2hlICh0aGV5IHdlcmUgZXJyb25lb3VzbHkgbWFya2VkCithcyBiZWluZyBkaXJ0eSwgc28gdGhleSB3ZXJlIGdldHRpbmcgd3JpdHRlbiBiYWNrIHRvIGRpc2sgYmVmb3JlCitnZXR0aW5nIGV2aWN0ZWQgZnJvbSB0aGUgZGlzayBjYWNoZSkuICBUaGlzIHdhcyBoYXJtbGVzcywgYnV0IGl0CitzaWduaWZpY2FudGx5IHNsb3dlZCBkb3duIGUyZnNjay4KKworTWFkZSBzb21lIG90aGVyIG1pbm9yIG9wdGltaXphdGlvbnMgdG8gdGhlIFVuaXggSS9PIHJvdXRpbmVzIHRvIHNhdmUgYQorc21hbGwgYW1vdW50IG9mIENQVSB0aW1lLgorCitVcGRhdGVkIGludGVybmF0aW9uYWxpemF0aW9uIGZpbGVzLgorCisKK0UyZnNwcm9ncyAxLjMxIChOb212ZW1iZXIgOCwgMjAwMikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlIEVWTVMgZXh0MmZzaW0gcGx1Z2luIHdpdGggRVZNUyAxLjIuICAoV2Ugc3RpbGwgc3VwcG9ydAorY29tcGlsaW5nIHRoZSBmc2ltIHBsdWdpbiB3aXRoIEVWTVMgMS4wIGFuZCAxLjEuKSAgQWRkIGJldHRlciBlcnJvcgoraGFuZGxpbmcgZm9yIGNoaWxkIHByb2Nlc3MgdGhhdCBkaWUgdW5leHBlY3RseS4gIEFkZCBhIGhhY2sgdG8gZm9yY2UKK21rZnMgdG8gY3JlYXRlIGZpbGVzeXN0ZW1zIHRoYXQgd29uJ3QgY2F1c2UgcHJvYmxlbXMgd2l0aCBoYXJkd2FyZQordGhhdCBoYXMgMmsgb3IgNGsgbWluaW11bSBibG9ja3NpemUgcmVxdWlyZW1lbnRzLiAgUmVhZCBmcm9tIGNoaWxkCitwcm9jZXNzZXMgaW4gbm9uLWJsb2NraW5nIG1vZGUsIHNvIHRoYXQgdGhlIEdVSSBjb250aW51ZXMgdG8gdXBkYXRlLgorCitGaXggZTJmc2NrIHNvIHRoYXQgaXQgcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgZXhpdCBjb2RlIHdoZW4gdGhlIHJvb3QKK2ZpbGVzeXN0ZW0gaGFzIGJlZW4gY2hhbmdlZCwgc28gdGhhdCBzeXN0ZW0ncyByYyBzY3JpcHRzIHdpbGwgYmUgdG9sZCB0aGF0IAordGhlIHN5c3RlbSBuZWVkcyB0byBiZSByZWJvb3RlZC4KKworRml4IGEgYnVnIGluIGV4dDJmc19mbHVzaC9leHQyZnNfY2xvc2U7IHdoZW4gdGhlIE1BU1RFUl9TQl9PTkxZIGZsYWcKK3dhcyBzZXQsIHNvbWUgb2YgdGhlIGRlc2NyaXB0b3IgYmxvY2tzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiB3cml0dGVuCitvdXQgd2VyZSBnZXR0aW5nIHNraXBwZWQuCisKK0NoYW5nZWQgZTJmc2NrIHRvIGZvcmNlIG91dCBjaGFuZ2VzIHRvIHRoZSBiYWNrdXAgY29waWVzIG9mIHRoZQorc3VwZXJibG9jayBhbmQgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgd2hlbiBpbXBvcnRhbnQgY2hhbmdlcyBhcmUgbWFkZQordG8gdGhvc2UgZGF0YSBzdHJ1Y3R1cmVzLgorCitGaXggYSBidWcgd2hlcmUgZTJmc2NrIGNvdWxkIGVycm9uZW91c2x5IG1hcmsgYSBmaWxlc3lzdGVtIGFzIGJlaW5nCitjbGVhbiBpZiBhIGNoZWNrIG9mIGRpcnR5IGZpbGVzeXN0ZW0gaXMgaW50ZXJydXB0ZWQgd2l0aCBhIF5DLiAgKEJ1ZworaW50cm9kdWNlZCBpbiBlMmZzcHJvZ3MgMS4yOC4pCisKK0lmIGpvdXJuYWwgZGVidWdpbmcgaXMgZW5hYmxlZCB1c2luZyAtLWVuYWJsZS1qYmQtZGVidWcsIHRoZSBkZWJ1Z2dpbmcKK2xldmVsIGlzIG5vdyBzZXQgdmlhIHRoZSBFMkZTQ0tfSkJEX0RFQlVHIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitJZiBieXRlc3dhcHBpbmcgc3VwcG9ydCBpcyBkaXNhYmxlZCB1c2luZyBjb25maWd1cmUgLS1kaXNhYmxlLXN3YXBmcywKK3NraXAgdGhlIHRlc3RzIHdoaWNoIGRlcGVuZCBvbiBieXRlLXN3YXBwaW5nLCBzbyB0aGF0ICJtYWtlIGNoZWNrIgord29uJ3QgYm9tYiBvdXQuCisKK0xzaGF0dHIgd2lsbCBub3cgZGlzcGxheSB0aGUgaW5kZXhlZCBkaXJlY3RvcnkgZmxhZy4gIEFsc28sIHNvbWUgb2YKK3RoZSBtb3JlIGVzb3RlcmljIGNvbXByZXNzaW9uIGZsYWdzIGFyZSBzdXByZXNzZWQgdW5sZXNzIGNvbXByZXNzaW9uCitzdXBwb3J0IGhhcyBiZWVuIGVuYWJsZWQuCisKK1VwZGF0ZSBtYW4gcGFnZXMuCisKKworRTJmc3Byb2dzIDEuMzAgKE9jdG9iZXIgMzEsIDIwMDIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiByZXNpemluZyBhIGZpbGVzeXN0ZW0sIGFuZCBpbm9kZXMgbmVlZCB0byBtb3ZlZCwgcmVzaXplMmZzIHdpbGwKK3VwZGF0ZSB0aGUgaW5vZGUncyBjdGltZSBmaWVsZCwgYW5kIHRoZSBtdGltZSBmaWVsZCBvZiB0aGUgY29udGFpbmluZworZGlyZWN0b3JpZXMsIHNvIHRoYXQgaW5jcmVtZW50YWwgYmFja3VwcyB1c2luZyBkdW1wL3Jlc3RvcmUgd2lsbCB3b3JrCitjb3JyZWN0bHkuCisKK0luIG9yZGVyIHRvIGF2b2lkIHNwdXJpb3VzIGVycm9ycywgZTJmc2NrIHdpbCBjaGVjayB0aGUgbGFzdAorc3VwZXJibG9jayB3cml0ZSB0aW1lIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBjYW4gc2FmZWx5IHVzZQordGhlIExPV19EVElNRSBjaGVja3MgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBpbm9kZXMgb24gdGhlIG9ycGhhbgoraW5vZGUgbGlua2VkIGxpc3QgdGhhdCBoYWQgc29tZWhvdyBnb3R0ZW4gZGlzY29ubmVjdGVkLiAgKEFkZHJlc3NlcworU291cmNlZm9yZ2UgYnVnICM2MjA5ODApCisKK1BhcnRpdGlvbiBpbiAvcHJvYy9wYXJ0aXRpb25zIHRoYXQgYmVpbmcgd2l0aCB0aGUgc3RyaW5nICJsdm0iIGFyZQorY29uc2lkZXJlZCByZWFsIHBhcnRpdGlvbnMgZXZlbiBpZiB0aGV5IGRvIG5vdCBlbmQgd2l0aCBhIG51bWJlci4KKworRml4ZWQgYSBidWcgaW4gdGhlIHRoZSB1dWlkIGdlbmVyYXRpb24gZnVuY3Rpb24sIHdoZXJlIGlmIC9kZXYvdXJhbmRvbQoraXMgbm90IHByZXNlbnQsIGJ1dCAvZGV2L3JhbmRvbSBpcywgYW5kIHRoZXJlIGlzbid0IHN1ZmZpY2llbnQKK2VudHJvcHksIHRoZSBnZXRfcmFuZG9tX2J5dGUgZnVuY3Rpb24gY291bGQgc3BpbiBhIGxvb3AgZm9yZXZlci4KKworRTJmc2NrLCBta2UyZnMsIGV0Yy4gd2lsbCBub3cgcmVsaWFibHkgbm90aWNlIHdoZW4gaW1hZ2UgZmlsZXMgYXJlCittb3VudGVkIHVzaW5nIHRoZSBsb29wYmFjayBpbnRlcmZhY2UuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIGJ1ZworIzYxOTExOSkKKworV2hlbiBmbHVzaGluZyBidWZmZXJzIChhcyBpcyBkb25lIGJ5IGJhZGJsb2NrcywgZm9yIGV4YW1wbGUpIGNoZWNrIHRvCitzZWUgaWYgdGhlIEJMS0ZMU0JVRiBpb2N0bCBzdWNjZWVkcywgYW5kIGlmIHNvLCBhdm9pZCB1c2luZyB0aGUKK0ZERkxVU0ggaW9jdGwgd2hpY2ggY2F1c2VzIHRoZSBNRCBkZXZpY2UgZHJpdmVyIHdoaWNoIGNhdXNlcyBjb25mdXNpbmcKK3N5c2xvZyBtZXNzYWdlcyBhYm91dCBvYnNlbGV0ZSBpb2N0bCBtZXNzYWdlcy4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UKK2J1ZyAjNTQ1ODMyKS4KKworRGVidWdmcydzIHdyaXRlIGNvbW1hbmQgbm93IGNoZWNrcyB0byBzZWUgaWYgdGhlIGRlc3RpbmF0aW9uIGZpbGVuYW1lCitleGlzdHMgYmVmb3JlIGNyZWF0aW5nIGl0LiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBidWcgIzQ3ODE5NS4pCisKK1doZW4gaW5zdGFsbGluZyBtYW4gcGFnZXMsIHNlYXJjaCBmb3IgY29tcHJlc3NlZCBtYW4gcGFnZXMgdXNpbmcgYWxsCitjb21tb25seSB1c2VkIGNvbXByZXNzaW9uIGV4dGVuc2lvbnMgKGkuZS4sIC5aLCAuZ3osIC5iejIsIGV0Yy4pCisKK0ZpeGVkIGEgYnVnIGluIGZzY2sgd2hlcmUgbXVsdGlwbGUgZmlsZXN5c3RlbXMgc3BlY2lmaWVkIG9uIHRoZQorY29tbWFuZCB3ZXJlIG5vdCBiZWluZyBjaGVja2VkIGluIHBhcmFsbGVsIGR1ZSB0byBhIGxvZ2ljIGJ1ZworaW50cm9kdWNlZCB0byBzdXBwb3J0IHRoZSBGU0NLX01BWF9JTlNUIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitXZSBoYXZlIGFkZGVkIGEgbmV3IHN1cGVyYmxvY2sgZmllbGQsIHNfbWtmc190aW1lLCB3aGljaCBpbmRpY2F0ZXMKK3doZW4gYSBmaWxlc3lzdGVtIHdhcyBjcmVhdGVkLiAgSXQgaXMgc2V0IHZpYSBta2UyZnMsIGFuZCBwcmludGVkIG91dAorYnkgZHVtcGUyZnMsIGJ1dCBpcyBub3QgYWN0dWFsbHkgdG91Y2hlZCBieSB0aGUga2VybmVsLgorCitEdW1wZTJmcyBoYXMgYmVlbiBtYWRlIG1vcmUgcm9idXN0IGJ5IG5vdCBhYm9ydGluZyBpZiB0aGVyZSBpcyBhbgorZXJyb3IgcmVhZGluZyB0aGUgYmxvY2svaW5vZGUgYml0bWFwczsgaW5zdGVhZCBpdCB3aWxsIHN0aWxsIHByaW50IG91dAordGhlIGxvY2F0aW9uIG9mIHRoZSBibG9jay9pbm9kZSBiaXRtYXBzIGFuZCBpbm9kZSB0YWJsZS4KKworQWRkIHN1cHBvcnQgZm9yIHRoZSBhbiBhbHRlcm5hdGl2ZSBibG9jayBncm91cCBkZXNjcmlwdG9yIGxheW91dCB3aGljaAorYWxsb3dzIGZvciBvbi1saW5lIHJlc2l6aW5nIHdpdGhvdXQgbmVlZGluZyB0byBwcmVwYXJlIHRoZSBmaWxlc3lzdGVtCitpbiBhZHZhbmNlLiAgKFRoaXMgaXMgdGhlIGluY29tYXQgZmVhdHVyZSBmbGFnIG1ldGFfYmcuKQorCitBZGQgc3VwcG9ydCBmb3Igc3RvcmluZyBkZWZhdWx0IG1vdW50IG9wdGlvbnMgaW4gdGhlIHN1cGVyYmxvY2ssIHNvCit0aGF0IHRoZSBmaWxlc3lzdGVtIGNhbiBiZSBtb3VudGVkIHdpdGggc3BlY2lmaWMgbW91bnQgb3B0aW9ucyB3aXRob3V0CituZWVkaW5nIHRvIHNwZWNpZnkgdGhlbSBvbiB0aGUgbW91bnQgY29tbWFuZCBsaW5lIG9yIGluIHRoZSAvZXRjL2ZzdGFiCitmaWxlLgorCitBZGQgc3VwcG9ydCBmb3IgYSBuZXcgaW5vZGUgZmxhZywgd2hpY2ggaXMgdG8gYmUgdXNlZCBmb3IgaW5kaWNhdGluZwordGhlIHRvcCBvZiBkaXJlY3RvcnkgaGllcmFyY2hpZXMgZm9yIHRoZSBPcmxvdiBibG9jayBhbGxvY2F0b3IuCisKK0ZpeCBlMmZzY2sgc28gdGhhdCBpZiBpdCBjcmVhdGVzIHRoZSBsb3N0K2ZvdW5kIGRpcmVjdG9yeSwgaXQgZG9lcyBzbword2l0aCB0aGUgbW9yZSBhcHBvcnByaWF0ZSBwZXJtaXNzaW9ucyBvZiAwNzAwLiAgQWxzbyBjaGFuZ2UKK21rbG9zdCtmb3VuZCBzbyB0aGF0IGl0IGFsc28gY3JlYXRlcyB0aGUgZGlyZWN0b3J5IDA3MDAuCisKK0ZpeGVkIGZvcm1hdCBidWcgaW4gZTJmc2NrIGlmIE5MUyBpcyBpbiB1c2UuCisgIAorQWRkIGEgR2VybWFuIHRyYW5zbGF0aW9uIGZvciBlMmZzcHJvZ3MncyBOTFMgc3VwcG9ydC4KKworRml4ZWQgZTJmc2NrIHNvIHRoYXQgaXQgbW9yZSBoYW5kbGVzIEJBRF9CTE9DS19JTl9JTk9ERV9UQUJMRSBldmVuIGF0Cit0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbm9kZSB0YWJsZS4gIFRoaXMgd29uJ3QgbWF0dGVyIG11Y2gsIHNpbmNlIGlmCit0aGVyZSBpcyBhIGJhZCBibG9jayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbm9kZSB0YWJsZSwgdGhlIHJvb3QKK2RpcmVjdG9yeSB3b24ndCBiZSBhdmFpbGFibGUuICBCdXQgYXQgbGVhc3QgZTJmc2NrIHdvbid0IGNyYXNoIGluIHRoaXMKK2Nhc2UuCisKK0ZpeGVkIGVuZGlhbiBwcm9ibGVtcyBpbiB0aGUgaHRyZWUgY29kZSBmb3IgZTJmc2NrIGFuZCBkZWJ1Z2ZzLgorICAKK1doZW4gYnl0ZS1zd2FwcGluZyBhIGZpbGVzeXN0ZW0gb24gYSBQUEMgYXJjaGl0ZWN0dXJlLCBieXRlLXN3YXAgdGhlCitiaXRtYXBzIHNpbmNlIHRoZSBoaXN0b3JpY2FsIGJpZy1lbmRpYW4gZXh0MiB2YXJpYW50IGhhZCBieXRlLXN3YXBwZWQKK2JpdG1hcHMsIGFuZCB0aGUgZXh0MmZzIGxpYnJhcnkgYXNzdW1lcyB0aGlzLiAgVGhpcyBmaXhlcyB0aGUKK3JlZ3Jlc3Npb24gdGVzdCBzdWl0ZSBvbiBQUEMgbWFjaGluZXMuCisKK0ZpeCBlMmltYWdlIHNvIHRoYXQgaXQgaGFuZGxlcyBhIGJhZCBibG9jayBpbiB0aGUgaW5vZGUgdGFibGUKK2FwcHJvcHJpYXRlbHkuCisKK0UyZnNjayBub3cgdXNlcyBhIG1vcmUgc29waGlzdGljYXRlZCBhbGdvcml0aG0gdG8gc2FsdmFnZSBjb3JydXB0ZWQKK2RpcmVjdG9yaWVzIHRoYXQgcmVjb3ZlcnMgbW9yZSBpbmZvcm1hdGlvbiBpbiB0aGUgY29ycnVwdGVkIGRpcmVjdG9yeQorYmxvY2suCisKK0UyZnNjayBub3cgcGVyZm9ybXMgYWRkaXRpb25hbCBjb25zaXN0ZW5jeSBjaGVja3Mgb24gaW5kZXhlZCAoSFRSRUUpCitkaXJlY3Rvcmllcy4KKworRml4IGJ1ZyB3aGVyZSBlZnNjayBtaWdodCBnZXQgY29uZnVzZWQgYWJvdXQgd2hldGhlciBhIGNvbXBsZXRlbHkKK2VtcHR5IGRpcmVjdG9yeSBibG9jayBpcyBhbiBlbXB0eSBsZWFmIGJsb2NrIG9yIGFuIGludGVyaW9yIGh0cmVlCitub2RlLiAgVGhpcyBjb3VsZCBjYXVzZSBlMmZzY2sgdG8gZ2V0IGNvbmZ1c2VkIGludG8gdGhpbmsgdGhhdCBhIHZhbGlkCitpbmRleGVkIGRpcmVjdG9yeSB3YXMgY29ycnVwdGVkLgorCitFMmZzY2sgbm8gbG9uZ2VyIGNyZWF0ZXMgYW4gZW1wdHkgZGlyZWN0b3J5IGVudHJ5IGF0IHRoZSBlbmQgb2YgYQorZGlyZWN0b3J5IGJsb2NrIHdoZW4gb3B0aW1pemluZyBhIGRpcmVjdG9yeS4gIFRoaXMgd291bGQgY2F1c2Ugc29tZQorZWFybGllciB2ZXJzaW9ucyBvZiB0aGUgZHhkaXIga2VybmVsIGNvZGUgdG8gY29ycnVwdCB0aGUgZGlyZWN0b3J5Cit3aGVuIGF0dGVtcHRpbmcgdG8gc3BsaXQgYSBub2RlIGNvbnRhaW5pbmcgYW4gZW1wdHkgZGlyZWN0b3J5IGVudHJ5LgorCitFMmZzY2sgY291bGQgc29tZXRpbWVzIGluIHJhcmUgY2lyY3Vtc3RhbmNlcyBsZWF2ZSB0aGUgaW5kZXhlZCBmbGFnCitzZXQgYWZ0ZXIgYSBzbWFsbCBkaXJlY3Rvcnkgd2FzIG9wdGltaXplZCBieSBjb21wcmVzc2luZyBpdCBpbnN0ZWFkIG9mCitpbmRleGluZyBpdC4gIChUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gaW4gcmVhbCBsaWZlLCBzaW5jZQorZGlyZWN0b3JpZXMgdGhhdCBzbWFsbCB3b3VsZG4ndCBoYXZlIGJlZW4gaW5kZXhlZCwgYnV0IGJldHRlciBzYWZlCit0aGFuIHNvcnJ5LikKKworRTJmc2NrIG5vdyBvbmx5IHVwZGF0ZXMgdGhlIG1hc3RlciBzdXBlcmJsb2NrIGluIGFsbCBjYXNlcy4gIFRoaXMKK3NsaWdodGx5IHNob3J0ZW5zIGl0cyBydW4gdGltZS4KKworRXh0MmVkIGNhbiBkZWFsIHdpdGggZGlyZWN0b3J5IGVudHJpZXMgb2YgbGVuZ3RoIDA7IHByZXZpb3VzbHkgaXQKK3dvdWxkIGdldCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wLgorCitGc2NrIG5vdyBoYXMgc3VwcG9ydCBmb3IgcmVpc2VyZnMgdm9sdW1lcyB3aGVuIHBhcnNpbmcgTEFCRUw9IGFuZCBVVUlEPQorc3BlY2lmaWVycy4gIChTb3VyY2Vmb3JnZSBwYXRjaCAjNjEzNDQ3KQorCitCYWRibG9ja3Mgd2lsbCBub3cgd29yayBjb3JyZWN0bHkgb24gcmVhZC1vbmx5IGRldmljZXMgc3VjaCBhcworQ0QtUk9NJ3MuICAoU291cmNlZm9yZ2UgcGF0Y2ggIzYwMDQ1MSkKKworVXBkYXRlZCBhbmQgY2xhcmlmaWVkIG1hbiBwYWdlcy4gIChBZGRyZXNzZXMgRGViaWFuIGJ1ZyAjMTY3MTA4KQorCisKK0UyZnNwcm9ncyAxLjI5IChTZXB0ZW1iZXIgMjQsIDIwMDIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sgd2hpY2ggY291bGQgY29ycnVwdCBhIGRpcmVjdG9yeSB3aGVuIG9wdGltaXppbmcKK2l0ICh2aWEgdGhlIC1EIG9wdGlvbikgb3IgcmVidWlsaWRpbmcgdGhlIGhhc2ggdHJlZSBpbmRleCB3aXRoIGEgMSBpbgorNTEyIHByb2JhYmlsaXR5LCBkdWUgdG8gYSBmZW5jZSBwb3N0IGVycm9yLgorCitGaXhlZCBhIGJ1ZyBpbiB0aGUgTFZNIHN1cHBvcnQgY29kZSB3aGljaCBjYXVzZWQgTEFCRUw9J3h4eCcgbm90IHRvCit3b3JrIGNvcnJlY3RseS4KKworTWtlMmZzIG5vdyBlbmFibGVzIHRoZSBkaXJlY3RvcnkgaW5kZXhpbmcgZmxhZyBieSBkZWZhdWx0LiAgKFNpbmNlCit0aGlzIGlzIGEgY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcsIGl0J3Mgc2FmZSB0byBkbyBzby4pCisKK1R1bmUyZnMgd2lsbCBzdXBwb3J0IHNldHRpbmcgdGhlIGRpcmVjdG9yeSBpbmRleGluZyBmZWF0dXJlIGZsYWcuICBJdAord2lsbCBhdXRvbWF0aWNhbGx5IHNldCB1cCB0aGUgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSBhbmQgaGFzaCBzZWVkCitmaWVsZHMgaW4gdGhlIHN1cGVyYmxvY2suCisKK0lmIHRoZSBib25lLWhlYWRlZCB1c2VyIGVudGVycyB0aGUgcm9vdCBmaWxlc3lzdGVtIHR3aWNlIGluCisvZXRjL2ZzdGFiLCB0aGUgLVIgb3B0aW9uIHdoaWNoIHNraXBzIHRoZSByb290IGZpbGVzeXN0ZW0gd2lsbCBza2lwCithbGwgb2YgdGhlbS4gIChBZGRyZXNzZXMgRGViaWFuIGJ1ZyAjMTU5NDIzKS4gIE5vdGUhICBUaGlzIGlzIG5vdCBhCitwcmVjZWRlbnQgZm9yIGRlYWxpbmcgaW50ZWxsaWdlbnRseSB3aXRoIGFueSBvdGhlciBraW5kIG9mIGRvdWJsZWQKK2VudHJ5IGluIC9ldGMvZnN0YWIhCisKKworUHJvZ3JhbW1lcidzIG5vdGVzOiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVtb3ZlZCBwZXJyb3IgZGVjbGFyYXRpb24gaW4gbGliL2V0L2ludGVybmFsLmguICBBbGwgbW9kZXJuIHN5c3RlbXMKK2NhbiBiZSBleHBlY3RlZCB0byBkZWZpbmUgcGVycm9yKCkgdGhlc2UgZGF5cy4gIEJlc2lkZXMsIHRoZSBsaWIvZXQKK2NvZGUgd2Fzbid0IHVzaW5nIHBlcnJvciBhdCBhbGwgYW55d2F5LiAgOi0pCisKKworRTJmc3Byb2dzIDEuMjggKEF1Z3VzdCAzMSwgMjAwMikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FkZCBzdXBwb3J0IGZvciB0aGUgSGFzaGVkLVRyZWUgRGlyZWN0b3J5IEluZGV4aW5nIHRvIGUyZnNjay4gIFN1cHBvcnQKK2ZvciBzZXR0aW5nIHRoZSBodHJlZSBmbGFnIGlzIG5vdCBpbmNsdWRlZCB5ZXQsIGFsdGhvdWdoIGl0IGNhbiBiZQorbWFudWFsbHkgdHVybmVkIG9uIHZpYSB0aGUgZGVidWdmcyBwcm9ncmFtLgorCitDbGFyaWZpZWQgZTJmc2NrIGVycm9yIG1lc3NhZ2Ugd2hpY2ggaXMgcHJpbnRlZCB3aGVuIGl0IGNhbm5vdCBmaW5kCitzdWZmaWNpZW50IGNvbnRpZ3VvdXMgYmxvY2sgd2hlbiByZWxjYXRpbmcgZmlsZXN5c3RlbSBtZXRhZGF0YS4KKworQWRkZWQgc3VwcG9ydCBmb3IgYnVpbGRpbmcgYW4gRVZNUyBwbHVnaW4gbW9kdWxlIGZvciBleHQyLzMuICBUaGlzCittb2R1bGUgaXMgc3Vic3RhbnRpYWxseSB0aGUgc2FtZSBhcyB0aGUgRVZNUyBtb2R1bGUgc2hpcHBpbmcgd2l0aCBFVk1TCisxLjEsIHdpdGggb25lIG9yIHR3byBidWdmaXhlcy4gIEUyZnNwcm9ncyBjYW4gYWxzbyBidWlsZCB0aGlzIHBsdWdpbgorZm9yIHVzZSB3aXRoIEVWTVMgMS4wICh3aGljaCBkaWQgbm90IGluY2x1ZGUgdGhlIGV4dDIgcGx1Z2luIG1vZHVsZSksCitpZiB0aGUgY29uZmlndXJlIC0tZW5hYmxlLW9sZC1ldm1zIGZsYWcgaXMgZ2l2ZW4uCisKK0ZzY2sgd2lsbCBzZWFyY2ggdGhyb3VnaCBFVk1TIHZvbHVtZXMgd2hlbiB0cnlpbmcgdG8gcmVzb2x2ZQorZmlsZXN5c3RlbSBzcGVjaWZpY2F0aW9ucyBzdWNoIGFzIExBQkVMPXh4eCBvciBVVUlEPXh4eC4KKyAgCitBZGRlZCBhIG5ldyB1dGlsaXR5IHByb2dyYW0sIC9zYmluL2ZpbmRmcywgd2hpY2ggd2lsbCByZXR1cm4KK2ZpbGVzeXN0ZW0gc3BlY2lmaWNhdGlvbnMgc3VjaCBhcyBMQUJFTD14eHggb3IgVVVJRD14eHgsIGFuZCBwcmludHMKK3RoZSBkZXZpY2UgbmFtZS4KKworVXBkYXRlIGFuZCBjbGFyaWZpZWQgdmFyaW91cyBtYW4gcGFnZXMuIChhZGRyZXNzZXMgRGViaWFuIEJ1ZyAjMTQ1MDQ0LAorIzE0NjQzNywgIzEzMTM1MCwgIzE1MTk5MCwgIzE0NDYyMSwgIzE0MTkzOCkKKworSWYgdGhlcmUgYXJlIG5vIGZpbGVzeXN0ZW1zIHNwZWNpZmllZCBvbiBmc2NrJ3MgY29tbWFuZCBsaW5lLCBmc2NrIG5vdwordHJlYXQgdGhhdCBhcyBpZiB0aGUgLUFzIG9wdGlvbnMgd2VyZSBnaXZlbi4gIFByZXZpb3VzbHkgaXQgd291bGQKK3NpbXBseSBkbyBub3RoaW5nLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnICMxNTMxMDIpCisKK01rZTJmcyBubyBsb25nZXIgdHJlYXRzIGEgZmFpbHVyZSB0byBiZSBhYmxlIHRvIGNsZWFyIHRoZSBNRCBzaWduYXR1cmUKK2F0IHRoZSBlbmQgb2YgdGhlIGZpbGVzeXN0ZW0gYXMgYSBmYXRhbCBlcnJvci4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZworIzE1NTAwNykKKworVGhlIGUycCBsaWJyYXJ5IGZ1bmN0aW9ucyAod2hpY2ggYXJlIHVzZWQgYnkgbHNhdHRyIGFuZCBjaGF0dHIpIG5vdworZG91YmxlIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgZmlsZSBpcyBhIHJlZ3VsYXIgZmlsZSBvciBkaXJlY3RvcnkKK2JlZm9yZSBhdHRlbXB0aW5nIHRvIHVzZSB0aGUgZXh0MiBpb2N0bHMuICBTb21lIGRldmljZSBkcml2ZXJzCit1bmZvcnR1bmF0ZWx5IHJlc3BvbmQgdG8gdGhlIGV4dDIgaW9jdGwncyB3aXRoIHVua25vd24gYmVoYXZpb3VyLgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnICMxNTIwMjkpLgorCitUaGUgZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsaW5nIGhhcyBiZWVuIHVwZGF0ZWQgdG8gY29ycmVzcG9uZCB3aXRoCit0aGUgbGF0ZXN0IFYyIGJlc3RiaXRzIEFDTCBjb2RlLgorCitGaXhlZCBidWcgaW4gZTJmc2NrIHdoaWNoIGNhdXNlZCBpdCB0byBub3QgY2xlYXIgdGhlIGR0aW1lIGZpZWxkIHdoZW4KK3Byb2Nlc3NpbmcgdHJ1bmNhdGVkIGlub2RlcyBvbiB0aGUgb3JwaGFuIGxpc3QuICBUaGlzIGNvdWxkIGNhdXNlIGRhdGEKK2xvc3MoISkgaWYgYSBmaWxlc3lzdGVtIGlzIHJlYm9vdGVkIGJlZm9yZSBhIHRydW5jYXRlIGhhcyBiZWVuCitjb21taXR0ZWQuCisKK0UyZnNjayBub3cgdXNlcyByZWQvYmxhY2sgdHJlZXMgaW4gcGFzczFiLCB3aGljaCByZW1vdmVzIHNvbWUgTyhuKioyKQorYWxnb3JpdGhtcy4gIFRoaXMgbWFrZXMgZTJmc2NrIG11Y2ggZmFzdGVyIGluIHRoZSBjYXNlIG9mIHNldmVyZWx5Citjb3JydXB0ZWQgZmlsZXN5c3RlbXMgd2hlcmUgYSBsYXJnZSBudW1iZXIgb2YgYmxvY2tzIGFyZSBjbGFpbWVkIGJ5IGEKK2xhcmdlIG51bWJlciBvZiBpbm9kZXMuICAoVGhhbmtzIHRvIHRoZSAyLjUgSURFIGRldmljZSBkcml2ZXIgZm9yCitpbnNwaXJpbmcgdGhpcyB3b3JrLikKKworUmVzaXplMmZzIGhhcyBiZWVuIHNpZ25pZmljYW50bHkgc3BlZCB1cCB3aGVuIHNocmlua2luZyBhbmQgZXhwYW5kaW5nCithIGZpbGVzeXN0ZW0gYnkgYSB2ZXJ5IHNtYWxsIG51bWJlciBvZiBibG9ja3MgKGZvciBleGFtcGxlLCB3aGVuIEVWTVMKK2lzIGNvbnZlcnRpbmcgYSBwYXJ0aXRpb24gdG8gYmUgYW4gRVZNUyBsZWdhY3kgdm9sdW1lKS4KKworQWRkZWQgYSBuZXcgb3B0aW9uIHRvIGUyZnNjaywgLUQsIHdoaWNoIHdpbGwgb3B0aW1pemUgb3IgY29tcHJlc3MgYWxsCitvZiB0aGUgZGlyZWN0b3JpZXMgaW4gdGhlIGZpbGVzeXN0ZW0uCisKK0UyZnNjayBub3cgY2F0Y2hlcyBTSUdJTlQgYW5kIFNJR1RFUk0gdG8gbWFrZSBzdXJlIGl0IHdpbGwgY2FuCitwcm9wZXJseSBjbGVhbiB1cCBhbmQgb25seSBleGl0IGF0IHNhZmUgcG9pbnRzLiAgRnNjayB3aWxsIHBhc3MKK1NJR0lOVC9TSUdURVJNIHRvIGl0cyBjaGlsZCBwcm9jZXNzZXMsIGFuZCB3YWl0IHVudGlsIHRoZXkgaGF2ZSBhbGwKK2V4aXRlZCBiZWZvcmUgaXQgZXhpdHMuCisKK1RoZSB1dWlkIHBhcnNpbmcgY29kZSBpbiB0aGUgdXVpZCBsaWJyYXJ5IG5vdyBwcm9wZXJseSBjb21wbGFpbnMgd2hlbgorYW4gaWxsZWdhbGx5IGZvcm1hdGVkIHV1aWQgaXMgcHJlc2VudGVkIHRvIGl0LiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnCisjMTUyODkxKQorCitSZXN0cmljdCB1c2Ugb2YgdGhlIDIuNCBzZXRybGltaXQgQUJJIGYqY2t1cCB0byBrZXJuZWxzIGJldHdlZW4gMi40LjEwCithbmQgMi40LjE3LCBzaW5jZSB0aGUgd29ya2Fyb3VuZCBjYW4gY2F1c2UgcHJvYmxlbXMgd2hlbiB1c2luZyBhIDIuNAora2VybmVsIHdpdGggYW4gb2xkIHZlcnNpb24gb2YgZ2xpYmMgYnVpbHQgd2l0aCB0aGUgMi4yIGhlYWRlcnMuCisKK0ZpeGVkIGEgYnVnIGluIG1rZTJmcyB3aGVyZSBpdCB3YXNuJ3QgcHJvcGVybHkgY2xlYXJpbmcgdGhlIGluaXRpYWwKK3N1cGVyYmxvY2sgdXNlZCBieSBvdGhlciBmaWxlc3lzdGVtcy4gIChBZGRyZXNzZXMgRGViaWFuIGJ1ZyAjMTQ3MjU2LikKKworQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHN5bmNocm9ub3VzIGRpcmVjdG9yeSBmZWF0dXJlIHdyaXR0ZW4gYnkgQW5kcmV3CitNb3J0b24uCisKK1RoZSBkZWJ1Z2ZzIHByb2dyYW0gY2FuIGRlbGV0ZSBkaXJlY3RvcmllcyB1c2luZyB0aGUgcm1kaXIgY29tbWFuZC4KKworQWRkIHN1cHBvcnQgZm9yIDhrIGFuZCAxNmsgZmlsZXN5c3RlbXMgKGZvciBzeXN0ZW1zIHdpdGggcGFnZSBzaXplcwordGhhdCBhcmUgZ3JlYXRlciBvciBlcXVhbCB0byA4ayBvciAxNmssIHJlc3BlY3RpdmVseSkuICBOb3RlIHRoYXQKK3RoZXNlIGZpbGVzeXN0ZW1zIGNhbiBub3QgYmUgbW91bnRlZCBvbiB4ODYgc3lzdGVtcywgb3Igb3RoZXIgc3lzdGVtcword2l0aCBvbmx5IDRrIHBhZ2Ugc2l6ZXMsIGR1ZSB0byBsaW1pdGF0aW9ucyBpbiB0aGUgY3VycmVudCBMaW51eCBWTQorY29kZS4KKworUmVzaXplMmZzIHJlcXVpcmVzIHRoYXQgdGhlIGZpbGVzeXN0ZW0gc3RhdGUgYmUgdmFsaWQgYW5kIGhhdmUgbm8KK2Vycm9yczsgb3RoZXJ3aXNlLCBlMmZzY2sgLWYgbXVzdCBiZSBydW4gZmlyc3QuICAoUHJldmlvdXNseSBpdCBzaW1wbHkKK3JlcXVpcmVkIHRoYXQgdGhlIGxhc3QgZnNjayB0aW1lIGJlIGdyZWF0ZXIgdGhhbiB0aGUgbGFzdCBtb3VudCB0aW1lLikKKworQ29uZmlndXJlIG5vdyBkZWZhdWx0cyB0aGUgbWFuIHBhZ2VzIGRpcmVjdG9yeSB0byAvdXNyL3NoYXJlL21hbiBvbgorTGludXggc3lzdGVtcy4KKworRTJmc2NrIG5vdyBvZmZlcnMgdG8gdHJ1bmNhdGUgaW5vZGVzIHdoaWNoIGNvbnRhaW4gdG9vIG1hbnkgYmxvY2tzIChzbwordGhhdCBpX2Jsb2NrcyB3b3VsZCBvdmVyZmxvdy4gIEFsc28gZml4ZWQgaGFuZGxpbmcgb2YgbGFyZ2Ugc3BhcnNlCitmaWxlcy4KKworRTJmc2NrIG5vdyBtb3JlIGNvbXBsZXRlbHkgY2hlY2tzIGZvciBzeW1saW5rIHZhbGlkaXR5LCBpbmNsdWRpbmcKK3JlcXVpcmluZyBOVUxMIHRlcm1pbmF0aW9uIGFuZCBsZW5ndGggY2hlY2tzLgorCitFMmZzY2sgd2lsbCBvZmZlciB0byB0cnkgZm9yY2luZyBhIGRpc2sgd3JpdGUgdG8gcmVtYXAgYSBiYWQgYmxvY2sKK2FmdGVyIGZpbmRpbmcgYSByZWFkIGVycm9yIHdoZW4gcmVhZGluZyBhIGZpbGVzeXN0ZW0gbWV0YWRhdGEgYmxvY2suCisKK0ZpeGVkIGEgYnVnIGluIGRlYnVnZnMgd2hpY2ggY2F1c2VkIHRoZSAtYiBhbmQgLXMgb3B0aW9ucyB0byBjcmFzaAorZGVidWdmcywgYXMgd2VsbCBhcyBicmVha2luZyB0aGUgdGVzdGIsIHNldGIsIGFuZCBjbGVhcmIgZnVuY3Rpb25zLgorCitBZGRlZCBhIGJtYXAgY29tbWFuZCB0byBkZWJ1Z2ZzIHdoaWNoIGNhbGN1bGF0ZXMgdGhlIGxvZ2ljYWwgdG8KK3BoeXNpY2FsIGJsb2NrIG1hcHBpbmcgZm9yIGEgcGFydGljdWxhciBpbm9kZS4KKworRml4ZWQgYSBidWcgaW4gY29kZSB3aGljaCBjaGVja2VkIHRvIHNlZSBpZiBhIGRldmljZSB3YXMgbW91bnRlZCB3aGljaAorc29tZXRpbWVzIChyYXJlbHkpIGZhaWxlZCBpbiB0aGUgY2FzZSBvZiBhIHBsYWluIGZpbGUuCisKK0ZpeGVkIGEgYnVnIGluIHJlc2l6ZTJmcyB3aGVyZSB3aGVuIGl0IHJlcG9ydGVkIGFuIGVycm9yLCBpdCB3b3VsZAorcHJpbnQgYSBtZXNzYWdlIGVycm9uZW91c2x5IGluZGljYXRpbmcgdGhhdCB0aGUgZmlsZXN5c3RlbSBoYWQgYmVlbgorcmVzaXplZCBiZWZvcmUgaXQgYWJvcnRlZC4KKworV2hlbiByZXNpemluZyBhIHBsYWluIGZpbGUgd2hpY2ggaXMgc21hbGxlciB0aGFuIHRoZSByZXF1ZXN0ZWQgc2l6ZSwKK3Jlc2l6ZTJmcyB3aWxsIGF0dGVtcHQgdG8gZXh0ZW5kZWQgdGhlIGZpbGUgc28gdGhhdCBwcm9ncmFtcyBsaWtlCitlMmZzY2sgd2lsbCBub3QgY29tcGxhaW4gdGhhdCB0aGUgZmlsZSBpcyB0b28gc21hbGwuCisKK1Jlc2l6ZTJmcyB3aWxsIHByaW50IHRoZSBhY3R1YWwgbmV3IHNpemUgb2YgdGhlIGZpbGVzeXN0ZW0gd2hlbiBpdCBpcworZmluaXNoZWQgcmVzaXppbmcuCisKK0ZpeGVkIGEgYnVnIGluIGRlYnVnZnMgd2hlcmUgImxzIC1sIiB3b3VsZCByZXBvcnQgaW5jb3JyZWN0bCBmaWxlIHR5cGUKK2luZm9ybWF0aW9uIG9uIGJpZy1lbmRpYW4gc3lzdGVtcy4KKworCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeGVkIGNvbGxpc2lvbnMgd2l0aCBDKysgcmVzZXJ2ZWQgd29yZHMuCisKK0FkZGVkIHBvcnRhYmlsaXR5IGZpeGVzIGZvciBidWlsZGluZyBlMmZzcHJvZ3Mgb24gdGhlIEhVUkQgYW5kIEFJWC4KKworQWRkZWQgdGhlIGV4dDJlZCBwcm9ncmFtIGZvciBjcmVhdGlvbiBvZiB0ZXN0IGNhc2VzLiAgKGV4dDJlZCBoYXMgbWFueQorbGltaXRhdGlvbnMgYW5kIGJ1Z3Mgd2hpY2ggbWFrZSBpdCB1bnN1aXRhYmxlIGZvciBwcm9kdWN0aW9uIHVzZS4pCisKK1RoZSBleHQyZnNfcmVhZF9kaXJfYmxvY2syIGFuZCBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrIG5vdyB0YWtlIGEgbmV3CitmbGFnLCBFWFQyX0RJUkJMT0NLX1YyX1NUUlVDVCwgd2hpY2ggd2lsbCB3aWxsIHJldmVyc2Ugd2hlbiB0aGUKK25hbWVfbGVuIGZpZWxkIGlzIGJ5dGUgc3dhbXBwZWQgb24gYmlnLWVuZGlhbiBtYWNoaW5lcywgc2luY2UgaW4gdGhlCitWMiBzdHJ1Y3R1cmUsIG5hbWVfbGVuIGlzIGEgY2hhciBmaWVsZCB3aGljaCBpcyBkb2Vzbid0IG5lZWQgdG8gYmUKK2J5dGUgc3dhcHBlZCAtLS0gZXhjZXB0IGlmIGFuIG9sZC1zdHlsZSBrZXJuZWwgaGFkIGJ5dGUtc3dhcHBlZCB0aGUKK25hbWVfbGVuIGZpZWxkIGFzIHBhcnQgb2YgdGhlIFYxIHN0cnVjdHVyZS4KKyAgCisKK0UyZnNwcm9ncyAxLjI3IChNYXJjaCA4LCAyMDAyKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSB3YXJuaW5nIG1lc3NhZ2VzIGZvciBta2UyZnMgbm93IGdvIHRvIHN0YW5kYXJkIGVycm9yLgorCitGaXhlZCB0byBtYWtlIHN1cmUgIm1ha2UgY2hlY2siIHJ1bnMgYWxsIG9mIHRoZSB0ZXN0IHByb2dyYW1zIHdpdGgKK0xEX0xJQlJBUllfUEFUSCBzZXQsIHNvIHRoYXQgd2UgdGVzdCB0aGUgbGlicmFyaWVzIGluIHRoZSBidWlsZCB0cmVlLgorCitUaGUgbWtlMmZzIHByb2dyYW0gY2hlY2tzIHRoZSBib290IHNlY3RvciBmb3IgdGhlIEJTRCBkaXNrIGxhYmVsLCBhbmQKK2F2b2lkcyBlcmFzaW5nIGl0IGlmIGl0IGlzIHRoZXJlLgorCitGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sgd2hpY2ggY2F1c2VkIGl0IHRvIGNvcmUgZHVtcCBpZiB0aGUgam91cm5hbAoraW5vZGUgd2FzIG1pc3Npbmcgd2hlbiBpdCB3YXMgc3VwcG9zZWQgdG8gYmUgdGhlcmUuCisKK0UyZnNjayBub3cgcHJpbnRzIHJhbmdlcyBpbiBwYXNzIDUgd2hlbiBwcmludGluZyBkZWx0YXMgZm9yIHRoZSBibG9jaworYW5kIGlub2RlIGJpdG1hcHMuCisKK0RlYnVnZnMncyAibHMgLWwiIGNvbW1hbmQgbm93IHdpbGwgcHJpbnQgb3V0IHRoZSBmaWxlIHR5cGUgaW5mb3JtYXRpb24KK2luIHRoZSBkaXJlY3RvcnkgZW50cnkuCisKK0NyZWF0ZSBtYW4gcGFnZXMgYW5kIGhhcmQgbGlua3MgZm9yIGZzY2suZXh0MyBhbmQgbWtmcy5leHQzLiAgSWYKK21rZTJmcyBpcyBpbnZva2VkIGFzIG1rZnMuZXh0MywgY3JlYXRlIHRoZSBmaWxlc3lzdGVtIHdpdGggYSBqb3VybmFsLgorCitEZWJ1Z2ZzIGNhbiBub3cgZXhhbWluZSB0aGUgZXhwZXJpbWVudGFsIGRpcmVjdG9yeSBpbmRleGluZworaW5mb3JtYXRpb24uCisKK0ZpeGVkIGJ1ZyBpbiBkZWJ1Z2ZzIHdoaWNoIGNhdXNlZCBpdCB0byBjb3JlIGR1bXAgaWYgbW9kaWZ5X2lub2RlIGlzCitjYWxsZWQgd2l0aG91dCBhbiBvcGVuIGZpbGVzeXN0ZW0uCisKK1RoZSBkZWJ1Z2ZzIGxzZGVsIGNvbW1hbmQgbm93IHJ1bnMgaXRzIG91dHB1dCB0aHJvdWdoIGEgcGFnZXIgZmlyc3QuCisKK1doZW4gaW5zdGFsbGluZyBtYW51YWwgcGFnZXMsIHJlbW92ZSB0aGUgY29tcHJlc3NlZCBtYW51YWwgcGFnZXMgZmlyc3QuCisKK1N5bmNocm9uaXplZCB3aXRoIERlYmlhbidzIHBhY2thZ2luZyBpbmZvcm1hdGlvbiBmb3IgZTJmc3Byb2dzLTEuMjYtMS4KKworRml4IHRoZSAyLjQgcmVzb3VyY2UgbGltaXRhdGlvbiB3b3JrYXJvdW5kIGludHJvZHVjZWQgaW4gMS4yNiB3aGljaAorYWN0dWFsbHkgYnJva2UgdGhpbmdzIG9uIG1pcHMzMiwgc3BhcmMzMiwgYW5kIEFscGhhIHBsYXRmb3Jtcy4KKworVXBkYXRlZCB0aGUgSTE4TiBjb2RlIHNvIHRoYXQgY2FsbHMgdG8gc2V0bG9jYXRlKExDX0NUWVBFLCAwKSBhcmUgbWFkZQorKHdoaWNoIGlzIHJlcXVpcmVkIGJ5IHRoZSBuZXdlciBsaWJpbnRsIGxpYnJhcmllcykuCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworRml4ZWQgdmFyaW91cyBnY2MgLVdhbGwgY29tcGxhaW50cy4KKworRml4ZWQgYSBmZXcgbWVtb3J5IGxlYWtzIGluIHRoZSBlMmZzY2sgam91cm5hbGluZyBjb2RlLCBhbmQgaW4gdGhlCitpc21vdW50ZWQgY29kZSBjaGVja2luZyBmb3IgYSBzd2FwIGRldmljZS4KKworQWRkIG5ldyBpbm9kZSBJL08gYWJzdHJhY3Rpb24gaW50ZXJmYWNlIHdoaWNoIGV4cG9ydHMgYW4gaW5vZGUgYXMKK2FuIEkvTyBvYmplY3QuCisgIAorRXhwb3J0ZWQgZXh0Ml9maWxlX2ZsdXNoIGFzIGEgcHVibGljIGludGVyZmFjZS4KKyAgCitJbiBleHQyX2ZpbGVfd3JpdGUsIHdlIG5vdyBtYXJrIHRoZSBidWZmZXIgdm9pZCAqIGFyZ3VtZW50IGFzIGEgY29uc3QsIHNpbmNlIGV4dDJfZmlsZV93cml0ZSBkb2Vzbid0IG1vZGlmeSB0aGUgYnVmZmVyLgorCitMb3RzIG9mIHNtYWxsIHJhbmRvbSBwb3J0YWJpbGl0eSBmaXhlcyB0byBtYWtlIGUyZnNwcm9ncyBidWlsZCB1bmRlcgorQUlYIC0tLSBldmVuIHdpdGhvdXQgdGhlIDVMIGNvbXBhdGliaWxpdHkgdG9vbGtpdCwgYW5kIGV2ZW4gdXNpbmcgdGhlCit1YmVyLWNyaXBwbGVkIEFJWCBuYXRpdmUgQyBjb21waWxlci4KKworCitFMmZzcHJvZ3MgMS4yNiAoRmVicnVhcnkgMywgMjAwMikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitEdW1wZTJmcyB3aWxsIGtlZXAgZ29pbmcgbm93IGlmIHRoZSBiYWQgYmxvY2sgaW5vZGUgY2FuJ3QgYmUgcmVhZC4KKyhQcmV2aW91c2x5IGl0IHN0b3BwZWQgd2l0aCBhIGZhdGFsIGVycm9yLikKKworRTJmc2NrIHdpbGwgbm93IGdpdmUgYW4gb3Bwb3J0dW5pdHkgdG8gcnVuIHRoZSBqb3VybmFsIGV2ZW4gaWYgdGhlCityZWNvdmVyeSBmbGFnIGlzIG5vdCBzZXQuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBpZiBlMmZzY2sgaXMKK3VzaW5nIGEgYmFja3VwIHN1cGVyYmxvY2ssIHNpbmNlIHRoZSBuZWVkc19yZWNvdmVyeSBmbGFnIHdpbGwgbmV2ZXIgYmUKK3NldCBpbiB0aGUgYmFja3VwIHN1cGVyYmxvY2sgY29waWVzLgorCitFMmZzY2sgbm93IGF1dG9tYXRpY2FsbHkgZmluZHMgdGhlIGJhY2t1cCBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3JzCitldmVuIHdoZW4gdGhlIHByaW1hcnkgc3VwZXJibG9jayBpcyBjb21wbGV0ZWx5IGRlc3Ryb3llZCBmb3IgMmsgYW5kIDRrCitmaWxlc3lzdGVtcy4gIChQcmV2aW91c2x5IGl0IGp1c3QgZ3Vlc3NlZC9hc3N1bWVkIHRoYXQgd2Ugd2VyZSBkZWFsaW5nCit3aXRoIGEgMWsgZmlsZXN5c3RlbSBpbiB0aGF0IGNhc2UsIGFuZCB1c2VycyBoYWQgdG8gbWFudWFsbHkgc3BlY2lmeQordGhlIGJhY2t1cCBzdXBlcmJsb2NrIG51bWJlci4pCisKK0ZpeGVkIGEgYnVnIGluIGUyZnNjayB3aGVyZSBpdCBkZXJlZmVyZW5jZXMgYSBudWxsIHBvaW50ZXIgd2hlbiB0aGVyZQoraXMgYSBwcm9ibGVtIG9wZW5pbmcgYSBmaWxlc3lzdGVtIGluIHByZWVuIG1vZGUuCisKK0UyZnNjayBub3cgaGFuZGxlcyBleHRlcm5hbCBqb3VybmFscyBjb3JyZWN0bHk7IHByZXZpb3VzbHkgaXQgdHJhc2hlZAordGhlIGV4dGVybmFsIGpvdXJuYWwgZGV2aWNlIGlmIHRoZSBqb3VybmFsIG5lZWRlZCB0byBiZSByZXBsYXllZC4KKworV29yayBhcm91bmQgdWxpbWl0IGluY29tcGF0aWJpbGl0eSBwcm9ibGVtIGNhdXNlZCBieSByZWNlbnQgMi40CitrZXJuZWxzOyB0aGUgdW5peCBJTyBtb2R1bGUgd2lsbCBhdXRvbWF0aWNhbGx5IHRyeSB0byBzZXQgYW55IHJlc291cmNlCitsaW1pdHMgdG8gYmUgaW5maW5pdGUgb24gc3RhcnR1cC4KKworRml4ZWQgYSBidWcgaW4gZTJmc2NrIHdoZXJlIGl0IHdhc24ndCBhbGxvY2F0aW5nIGEgbmV3IGJsb2NrIG9yIGlub2RlCitiaXRtYXAgaWYgaXQgd2Fzbid0IHByZXNlbnQgYW5kIHRoZSBibG9ja3NpemUgd2FzIDJrIG9yIDRrLgorIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjMTE2OTc1KQorCitFMmZzY2sgd2lsbCBjaGVjayBhbmQgZml4IGJvdGNoZWQgZXh0MyBWMSB0byBWMiBzdXBlcmJsb2NrIHVwZGF0ZXMgYnkKK2NsZWFyaW5nIHRoZSBuZXcgVjIgZmllbGRzIGlmIHRoZXkgZG8gbm90IG1ha2Ugc2Vuc2Ugb3IgaWYgdGhlIGV4dDMKK3N1cGVyYmxvY2sgaXMgdmVyc2lvbiAxIHN1cGVyYmxvY2suCisKK0UyZnNjayB3aWxsIGF1dG9tYXRpY2FsbHkgcmVsb2NhdGUgdGhlIGV4dDMgam91cm5hbCBmcm9tIGEgdmlzaWJsZQorZmlsZSAoaS5lLiwgLy5qb3VybmFsKSB0byBhbiBoaWRkZW4gaW5vZGUgaWYgdGhlIGZpbGVzeXN0ZW0gaGFzIGJlZW4KK29wZW5lZCByZWFkL3dyaXRlLiAgVGhpcyBhbGxvd3MgdGhlIHVzZXJzIHRvIGFkZCBhIGpvdXJuYWwgd2hpbGUgdGhlCitmaWxlc3lzdGVtIGlzIG1vdW50ZWQsIGJ1dCB0aGUgbmV4dCB0aW1lIHRoZSBzeXN0ZW0gaXMgcmVib290ZWQsIHRoZQoram91cm5hbCBmaWxlIHdpbGwgZGlzYXBwZWFyLiAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2l0aCBiYWNrdXBzLAorc3R1cGlkIG9wZXJhdG9ycyB3aXRoIHN1cGVydXNlciBiaXRzLCBldGMuCisKK0ZpeCBhIGJ1ZyBpbiBmc2NrIHdoZXJlIGl0IHdvdWxkIG5vdCBzdXBwb3J0IGEgZmlsZXN5c3RlbSB0eXBlIG9mCisiYXV0byIgaWYgdGhlIGRldmljZSB3YXMgc3BlY2lmaWVkIGluIHRlcm1zIG9mIExBQkVMPXh4eCBvciBVVUlEPXh4eC4KKworRnNjayBub3cgc3VwcG9ydHMgZnN0YWIgZW50cmllcyBvZiB0aGUgZm9ybSAiZXh0MyxleHQyIi4gIEl0IHdpbGwgYWxzbworYXV0b21hdGljYWxseSBpZGVudGlmeSByZWlzZXJmcyBmaWxlc3lzdGVtcy4KKworVGhlIG51bWJlciBvZiBwcm9jZXNzZXMgc3Bhd25lZCBieSBmc2NrIGNhbiBub3cgYmUgbGltaXRlZCB1c2luZyB0aGUKK0ZTQ0tfTUFYX0lOU1QgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKK0ZzY2sgbm93IHNlYXJjaHMgdGhlIExWTSBwcm9jIGhpZXJhcmNoeSB0byBmaW5kIGxvZ2ljYWwgdm9sdW1lcyB3aGljaAorc2hvdWxkIGJlIHNlYXJjaGVkIGZvciAgVVVJRCBhbmQgbGFiZWwgaW5mb3JtYXRpb24uCisKK1dvcmsgYXJvdW5kIGEgYnVnIGluIDIuNC4xMCsga2VybmVscyBieSB0cnlpbmcgdG8gdW5zZXQgdGhlIGZpbGVzaXplCitsaW1pdCBpZiBhdCBhbGwgcG9zc2libGUsIHdoZW4gb3BlbmluZyBhIGJsb2NrIGRldmljZS4gIChUaGUgZmlsZXNpemUKK2xpbWl0IHNob3VsZG4ndCBiZSBhcHBsaWVkIGFnYWluc3Qgd3JpdGVzIHRvIGEgYmxvY2sgZGV2aWNlLikKKworSW4gbWtlMmZzIGFuZCBlMmZzY2ssIHNwZWNpZnlpbmcgdGhlIC1jIG9wdGlvbiB0d2ljZSB3aWxsIG5vdyBkbworYSByZWFkL3dyaXRlIHRlc3Qgb24gdGhlIGRpc2suICBVcGRhdGUgdGhlIG1hbiBwYWdlcyB0byBlbmNvdXJhZ2UKK3VzaW5nIHRoZSAtYyBvcHRpb24sIGFuZCB0byBkaXNjb3VyYWdpbmcgcnVubmluZyBiYWRibG9ja3Mgc2VwYXJhdGVseSwKK3NpbmNlIHVzZXJzIHRlbmQgdG8gZm9yZ2V0IHRvIHNldCB0aGUgYmxvY2tzaXplIHdoZW4gcnVubmluZyAKK2JhZGJsb2Nrcy4KKworTWtlMmZzIG5vdyBhdXRvbWF0aWNhbGx5IGNsZWFycyB0aGUgaW1tdXRhYmxlIGF0dHJpYnV0ZSBvbiBhCitwcmUtZXhpc3RpbmcgLmpvdXJuYWwgZmlsZSBsZWZ0IG92ZXIgZnJvbSBhIHByZXZpb3VzIGZhaWxlZCBhdHRlbXB0IHRvCithZGQgYSBqb3VybmFsIHRvIGFuIGFscmVhZHl5LW1vdW50ZWQgZmlsZXN5c3RlbS4KKworRml4ZWQgbWtlMmZzJ3MgZXhpdCBjb2RlcyB0byBjb25zaXN0ZW50bHkgaW5kaWNhdGUgd2hlbiB0aGUgbWtlMmZzCitvcGVyYXRpb24gZmFpbGVkLgorCitNa2UyZnMgbm93IGNyZWF0ZXMgdGhlIGxvc3QrZm91bmQgZGlyZWN0b3J5IHdpdGggcGVybWlzc2lvbnMgb2YgMDcwMCwKK3NvIHRoYXQgZmlsZXMgdGhhdCBoYWQgcHJldmlvdXNseSBsaXZlZCBpbiBwcm90ZWN0ZWQgZGlyZWN0b3J5IGFyZQorc2FmZSBpZiB0aGV5IGdldCBkcm9wcGVkIGluIGxvc3QrZm91bmQgYW5kIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvcgorZG9lc24ndCBkZWFsIHdpdGggaW1tZWRpYXRlbHkuICAoQWRkcmVzc2VzIERlYmlhbiAjYnVnIDExODQ0MykKKworTWtlMmZzIGFuZCBlMmZzY2sgKGFuZCBhbGwgcHJvZ3JhbXMgdGhhdCB1c2UgdGhlCitleHQyZnNfY2hlY2tfaWZfbW91bnRlZCBmdW5jdGlvbikgd2lsbCBub3cgcHJvcGVybHkgaWRlbnRpZnkgdGhhdCBhCitkZXZpY2UgaXMgbW91bnRlZCwgZXZlbiBpbiBjYXNlcyB3aGVyZSBkZXZmcyBoYXMgY29uZnVzZWQgdGhpbmdzIHdpdGgKK211bHRpcGxlIGRldmljZXMgbmFtZXMgd2l0aCB0aGUgc2FtZSBpZGVudGl0eSwgb3IgaWYgYSBkaW0td2l0dGVkCitzeXN0ZW0gYWRtaW5pc3RyYXRvciBoYXMgZG9uZSBzb21ldGhpbmcgc3R1cGlkIGxpa2UgY3JlYXRpbmcgZGV2aWNlCitmaWxlIGFsaWFzZXMgaW4gdGhlaXIgaG9tZSBkaXJlY3RvcnkuICBBbHNvIG5vdyBjaGVja3MgZm9yIHN3YXAgZGV2aWNlcworYnkgdXNpbmcgL3Byb2Mvc3dhcHMuICAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzEwNjYyMikKKworQWRkZWQgYSBuZXcgb3B0aW9uICgtVCkgdG8gdHVuZTJmcyB3aGljaCBzZXRzIHRoZSB0aW1lIGEgZmlsZXN5c3RlbQord2FzIGxhc3QgY2hlY2tlZC4KKworU3BlZWQgdXAgZTJpbWFnZSB3aGVuIGNyZWF0aW5nIHNwYXJzZSByYXcgaW1hZ2UgZmlsZXMgYnkgb3B0aW1pemluZworYXdheSBleGNlc3MgbHNlZWsoKSBzeXN0ZW0gY2FsbHMuCisKK0ZpeCBzdXBwb3J0IG9mIGxhcmdlICg+IDJHQikgZmlsZXMgd2hlbiB1c2VkIGFzIGEgZmlsZXN5c3RlbSBpbgorbWtlMmZzLCB0dW5lMmZzLCBkZWJ1Z2ZzLCBhbmQgZmluZHN1cGVyLgorCitEZWJ1Z2ZzJ3Mgc3RhdCBhbmQgaWNoZWNrIGNvbW1hbmRzIG5vdyBwcm9wZXJseSBkZWFscyB3aXRoIGxhcmdlICg+CisyR0IpIGZpbGVzLgorCitEZWJ1Z2ZzJ3Mgc2V0X3N1cGVyX3ZhbHVlIGNvbW1hbmQgbm93IHByaW50cyBvdXQgdGhlIGxpc3Qgb2YgdmFsaWQKK3N1cGVyYmxvY2sgZmllbGRzIHdoaWNoIGNhbiBiZSBzZXQgdXNpbmcgdGhlIGNvbW1hbmQuCisKK0RlYnVnZnMncyBybSBhbmQga2lsbF9maWxlIGNvbW1hbmQgbm93IHVwZGF0ZXMgdGhlIHN1cGVyYmxvY2sgZnJlZSBibG9jaworYW5kIGlub2RlIGNvdW50cywgdGh1cyBrZWVwaW5nIHRoZSBmaWxlc3lzdGVtIGNvbnNpc3RlbnQuCisKK0RlYnVnZnMncyBsc2RlbCBjb21tYW5kIG5vdyB0YWtlcyBhbiBvcHRpb25hbCBhcmd1bWVudCB3aGljaCBhbGxvd3MKK3RoZSB1c2VyIHRvIG9ubHkgc2VlIHRoZSBtb3N0IHJlY2VudGx5IGRlbGV0ZWQgZmlsZXMuCisKK0EgbmV3IGNvbW1hbmQgKHVuZGVsKSB3YXMgYWRkZWQgdG8gZGVidWdmcyB3aGljaCBhdXRvbWF0ZXMKK3VuZGVsZXRpbmcgYSBkZWxldGVkIGlub2RlIGFuZCBsaW5raW5nIGl0IGJhY2sgdG8gYSBkaXJlY3RvcnkuCisKK0RlYnVnZnMncyBscyBjb21tYW5kIG5vdyB0YWtlcyBhIG5ldyBvcHRpb24sIC1kLCB3aGljaCBsaXN0cyAKK2RlbGV0ZWQgZGlyZWN0b3J5IGVudHJpZXMuCisKK0RlYnVnZnMncyB0ZXN0YiwgZnJlZWIsIHNldGIsIGFuZCBmaW5kX2ZyZWVfYmxvY2sgY29tbWFuZHMgbm93IHRha2UgYW4KK29wdGlvbmFsIGNvdW50IGFyZ3VtZW50LgorCitBZGQgc3VwcG9ydCBmb3IgYSBuZXcgZXh0MiBmaWxlIGF0dHJpYnV0ZSwgRVhUMl9OT1RBSUxfRkwsIHdoaWNoIHdpbGwKK2JlIHVzZWQgdG8gc2lnbmFsIHRoYXQgYSBwYXJ0aWN1bGFyIGlub2RlIHNob3VsZCBub3QgYmUgZWxpZ2libGUgZm9yCit0YWlsLW1lcmdpbmcgLS0tIHRoaXMgaXMgbmVlZGVkIGZvciBwcm9ncmFtcyBsaWtlIExJTE8uCisKK1RoZSBmaW5kc3VwZXIgKGFuIHVucmVsZWFzZWQsIHVuaW5zdGFsbGVkIHV0aWxpdHkgcHJvZ3JhbSkgaGFzIGJlZW4KK2ltcHJvdmVkIHRvIGFkZCBleHRyYSB2YWxpZGl0eSBjaGVja3MgYW5kIHRvIGFkZCBhIHByb2dyZXNzIG1ldGVyLgorKEl0IGlzIHN0aWxsIGFuIHVuc3VwcG9ydGVkIHByb2dyYW07IHRoZSBvZmZpY2lhbGx5IHN1cHBvcnRlZCB3YXkgdG8KK3JlY292ZXIgZnJvbSBhIHRyYXNoZWQgcGFydGl0aW9uIHRhYmxlIGlzIHRvIHVzZSBncGFydDsgZmluZHN1cGVyIGlzCitmb3Igd2l6YXJkcyBvbmx5LiAgOi0pCisKK0RlYnVnZnMgd2FzIGZpeGVkIHRvIGNvbXBpbGUgd2l0aCAiY29uZmlndXJlIC0tZGlzYWJsZS1zd2FwZnMiLgorCitDbGVhbmVkIHVwIHZhcmlvdXMgbWFudWFsIHBhZ2VzLiAgIChBZGRyZXNzZXMgRGViaWFuIGJ1ZyAjMTE5NjI0LCAjMTIwMTcxKQorCitBZGRlZCBuZXcgdHJhbnNsYXRpb24gZmlsZSBmb3IgVHVya2lzaC4KKworUHJvZ3JhbW1lcidzIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXggZ2VuZXJhbCBnY2MgLVdhbGwgY29tcGxhaW50cy4KKworRTJmc3Byb2dzIChtb3N0bHkpIHdvcmtzIHdpdGggdGhlIGRpZXRsaWJjLgorCitUaGUgcHJvZ3JhbW1pbmcgdGV4aW5mbyBmaWxlIGhhcyBiZWVuIGV4cGFuZGVkIHRvIGluY2x1ZGUgZGVzY3JpcHRpb24KK29mIGFkZGl0aW9uYWwgbGliZXh0MmZzIGZ1bmN0aW9ucy4gIChTdGlsbCBub3QgY29tcGVsdGVseSBkb25lLCBidXQgYQorbG90IG9mIHRoZSBtb3JlIGltcG9ydGFudCBmdW5jdGlvbnMgaGF2ZSBiZWVuIGRvY3VtZW50ZWQuKQorCitBZGRlZCBhIHVtYXNrIHN0cnVjdHVyZSB0byBzdHJ1Y3RfZXh0Ml9maWxzeXMsIHdoaWNoIGN1cnJlbnRseSBvbmx5Cittb2RpZmllcyB0aGUgYmVoYXZpb3VyIG9mIGV4dDJmc19ta2RpcigpLCBidXQgaWYgd2UgYWRkIGFueSBmaWxlCitjcmVhdGlvbiBmdW5jdGlvbnMgdG8gbGliZXh0MmZzLCB3ZSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdGhleSByZXNwZWN0Cit0aGUgdW1hc2sgc2V0dGluZy4KKworVGhlIGJ1aWxkLXJwbSBzY3JpcHQgd2FzIGZpeGVkIHRvIGJlIGEgYml0IG1vcmUgc2FmZS4KKworVGhlIHRlc3RzJyBNYWtlZmlsZSBub3cgaGFzIGEgd2F5IG9mIGF1dG9tYXRpbmcgdGVzdCBjYXNlIGNyZWF0aW9uIAorZm9yIGUyZnNjaywgdXNpbmcgIm1ha2UgdGVzdG5ldyIuCisKK0NyZWF0ZWQgYSBuZXcgZnVuY3Rpb24sIGV4dDJmc19kaXJfaXRlcmF0ZTIgd2hpY2ggcGFzc2VzIG1vcmUKK2luZm9ybWF0aW9uIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbiAoaWRlbnRpY2FsIHRvIHRoZSBvbmUgdXNlZCBieQorZXh0MmZzX2RibGlzdF9kaXJfaXRlcmF0ZSkuICBUaGUgZGlyZWN0b3J5IGl0ZXJhdG9yIGZ1bmN0aW9ucyB0YWtlIGEKK25ldyBmbGFnLCBESVJFTlRfRkxBR19JTkNMVURFX1JFTU9WRUQsIHdoaWNoIHdpbGwgcmV0dXJuIGRlbGV0ZWQKK2RpcmVjdG9yeSBlbnRyaWVzLiAgSWYgdGhlIGRpcmVjdG9yeSBlbnRyeSBpcyBkZWxldGVkLCB0aGUgY2FsbGJhY2sKK2Z1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGVudHJ5IHBhcmFlbXRlciBzZXQgdG8KK0RJUkVOVF9ERUxFVEVEX0ZJTEUuCisgIAorQWRkZWQgbmV3IGZ1bmN0aW9ucywgZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzIGFuZAorZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzLCB3aGljaCB0YWtlcyB1cGRhdGVzIGJsb2NrL2lub2RlIGFsbG9jYXRpb24KK3N0YXRpc3RpY3MgaW4gdGhlIGJpdG1hcHMsIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLCBhbmQgc3VwZXJibG9jaword2hlbiBpbm9kZXMgb3IgYmxvY2tzIGFyZSBhbGxvY2F0ZWQgb3IgZGVhbGxvY2F0ZWQuCisKKworRTJmc3Byb2dzIDEuMjUgKFNlcHRlbWJlciAyMCwgMjAwMSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgcHJpbWFyaWx5IGEgYnVnLWZpeCByZWxlYXNlOyBubyBuZXcgZmVhdHVyZXMgd2VyZSBhZGRlZCwgYnV0Cit0aGVyZSBhcmUgYSBudW1iZXIgb2YgZW1iYXJhc3NpbmcgYnVnIGZpeGVzIGFuZCBjbGVhbnVwcyBhcHBsaWVkLgorCitGaXggYSBidWcgbWtlMmZzIHdoaWNoIGNhdXNlcyBzdGFjayBnYXJiYWdlIHRvIGJlIHdyaXR0ZW4gdG8gZGlzayB3aGVuCit6YXBwaW5nIGRpc2sgc2VjdG9ycy4gIChUaGlzIGJ1ZyBjb3VsZCBjYXVzZSBta2UyZnMgdG8gY29yZSBkdW1wIGZvcgorc29tZSBrZXJuZWxzLCBJIHN1c3BlY3Qgd2l0aCBzZWN1cml0eSBlbmhhbmNlbWVudCBwYXRjaGVzLikKKworUmVtb3ZlIHVubmVlZGVkICNpbmNsdWRlIG9mIDxsaW51eC9jb25maWcuaD4gd2hpY2ggd2FzIGJyZWFraW5nCitidWlsZGluZyBlMmZzcHJvZ3Mgb24gdGhlIEh1cmQuICAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzExMjQxNC4pCisKK1VwZGF0ZWQgdHVuZTJmcyBtYW4gcGFnZSB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgYWRkaW5nIG9yIHJlbW92aW5nIGEKK2pvdXJuYWwgZG9lc24ndCByZXF1aXJlIHJ1bm5pbmcgZTJmc2NrLgorCitSZW1vdmUgdXNlIG9mIEFDX1JFUVVJUkUgZnJvbSBhdXRvY29uZiB3aGljaCBoYWQgYmVlbiB1c2VkIHRvIHByZXZlbnQKK0FDX0NBTk9OSUNBTF9IT1NUIGZyb20gYmVpbmcgY2FsbGVkIHR3aWNlOyB1bmZvcnR1bmF0ZWx5IHRoaXMgY2F1c2VzCityZWNlbnQgYXV0b2NvbmYgdG8gYm9tYiBvdXQgc2luY2UgdGhleSBkb24ndCBhbGxvdyBBQ19SRVFVSVJFIHRvIGJlCit1c2VkIG91dHNpZGUgb2YgYXV0b2NvbmYgbWFjcm9zLiAgRm9ydHVuYXRlbHksIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZQorbmVjZXNzYXJ5IGFueSBtb3JlLCBhbnl3YXkuCisKK0UyZnNjayB3aWxsIG5vdyBub3QgZmFsbCBiYWNrIHRvIGFuIGFsdGVybmF0ZSBzdXBlcmJsb2NrIGlmIHRoZSB1c2VyCitzcGVjaWZpZXMgdGhlIHN1cGVyYmxvY2sgbG9jYXRpb24gZXhwbGljaXRseSBvbiB0aGUgY29tbWFuZC1saW5lLgorVGhpcyBhbGxvd3MgZWFzaWVyIHJlY292ZXJ5IGZyb20gYSBzaXR1YXRpb24gd2hlcmUgdGhlIHByaW1hcnkKK3N1cGVyYmxvY2sgYW5kIGJsb2NrIGdyb3VwcyBhcmUgc2xpZ2h0bHkgY29ycnVwdGVkLCBidXQgdGhlIGJhY2t1cAorc3VwZXJibG9ja3MgYXJlIGNvbXBsZXRlbHkgYnJva2VuLiAgCisKK0ZpeCBwcm9ibGVtIHdoaWNoIGNhdXNlZCBjb21waWxlX2V0IGFuZCBta19jbWRzIHRvIGJsb3cgdXAgaWYKK2UyZnNwcm9ncyB3YXMgaW4gYSBkaXJlY3Rvcnkgd2l0aCBhIHBhdGhuYW1lIHRoYXQgY29udGFpbmVkIHNwYWNlcy4KKworV2UgYXJlIG5vdyBtb3JlIHBhcmFub2lkIGFib3V0IGNoZWNraW5nIHRoZSBlbnRyeSBpbiAvZXRjL210YWIgdG8gbWFrZQorc3VyZSB0aGUgZmlsZXN5c3RlbSBpcyByZWFsbHkgbW91bnRlZCwgc2luY2Ugc29tZSBicm9rZW4gZGlzdHJpYnV0aW9ucworKHJlYWQ6IFNsYWNrd2FyZSkgZG9uJ3QgaW5pdGlhbGl6ZSAvZXRjL210YWIgYmVmb3JlIGNoZWNraW5nIG5vbi1yb290CitmaWxlc3lzdGVtcy4gIChTbGFja3dhcmUgYWxzbyBkb2Vzbid0IGNoZWNrIHRoZSByb290IGZpbGVzeXN0ZW0KK3NlcGFyYXRlbHksIGFuZCByZWJvb3QgaWYgdGhlIHJvb3QgZmlsZXN5c3RlbSBoYWQgY2hhbmdlcyBhcHBsaWVkIHRvCitpdCwgd2hpY2ggaXMgZGFuZ2Vyb3VzIGFuZCBicm9rZW4sIGJ1dCB0aGVyZSdzIG5vdGhpbmcgSSBjYW4gZG8gYWJvdXQKK3RoYXQuKQorCitNYWtlIFVVSUQgbGlicmFyeSBDKysgZnJpZW5kbHkgYnkgYWRkaW5nIGFwcHJvcHJpYXRlIGV4dGVybiAiQyIKK2RlY2xhcmF0aW9ucyBhbmQgdXNpbmcgY29uc3QgaW4gdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KKworRml4IHVwIHRoZSBjb21fZXJyIHRleGluZm8gZmlsZSBzbyB0aGF0IGl0IGNhbiBwcm9kdWN0IGEgdmFsaWQgaW5mbworZmlsZSAocHJldmlvdXNseSwgaXQgY291bGQgb25seSBiZSB1c2VkIHRvIGdlbmVyYXRlIHBhcGVyCitkb2N1bWVudGF0aW9uIHVzaW5nIHRleGluZm8udGV4KS4KKworCitFMmZzcHJvZ3MgMS4yNGEgKFNlcHRlbWJlciAyLCAyMDAxKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IGJyb3duLXBhcGVyIGJ1ZyBpbiBta2UyZnMgd2hpY2ggY2F1c2VkIGl0IHRvIHNlZ2ZhdWx0IHdoZW4KK3ByaW50aW5nIHRoZSB2ZXJzaW9uIHN0cmluZy4KKworCitFMmZzcHJvZ3MgMS4yNCAoQXVndXN0IDMwLCAyMDAxKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmV2ZXJ0IHRoZSBCTEtHRVRTSVpFNjQgc3VwcG9ydCwgc2luY2UgZm9yIHNvbWUgZGlzdHJpYnV0aW9ucywgdGhpcworaW9jdGwgaGFzIGJlZW4gdXNlZCBieSBhbiB1bm9mZmljaWFsIGtlcm5lbCBwYXRjaCB0byB1cGRhdGUgdGhlIGxhc3QKK3NlY3RvciBvbiB0aGUgZGlzaywgYW5kIHRoaXMgd2FzIGNhdXNpbmcgZGlzayBjb3JydXB0aW9uIHByb2JsZW1zIGFzIGEKK3Jlc3VsdC4KKworTWtlMmZzIGlzIG5vdyBtb3JlIGNhcmVmdWwgYWJvdXQgemFwcGluZyBzd2FwIHNwYWNlIHNpZ25hdHVyZXMgYW5kCitvdGhlciBmaWxlc3lzdGVtL3JhaWQgc3VwZXJibG9jayBtYWdpYyB2YWx1ZXMgc28gdGhhdCBwcm9ncmFtcyBsaWtlCittb3VudCB3aG8gdHJ5IHRvIHVzZSBodWVyaXN0aWNzIHRvIGRldGVybWluZSB0aGUgZmlsZXN5c3RlbSB0eXBlIG9mIGEKK3BhcnRpdGlvbiBhcmUgbGVzcyBsaWtlbHkgdG8gYmUgY29uZnVzZWQuCisKK0UyZnNjayB3aWxsIG5vIGxvbmdlciBjb21wbGFpbiBpZiB0aGUgdGhlIG1vZGUgb2YgRVhUMl9SRVNJWkVfSU5PIGlzIGEKK3JlZ3VsYXIgZmlsZSAoc2luY2UgQW5kcmVhcyBEaWxnZXIncyBvbi1saW5lIHJlc2l6aW5nIHRvb2xzIHdpbGwgc2V0CitpdHMgbW9kZSBiaXRzKS4KKworRml4ZWQgc29tZSBtaW5vciB0ZXhpbmZvLCBtYW4gcGFnZXMgbml0cyBmb3Igc3BlbGxpbmcgZXJyb3JzLAordGV4aW5mbyB3YXJuaW5ncywgZXRjLiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMxMTA2MjEuKQorCitFMmZzcHJvZ3MgcHJvZ3JhbSBubyBsb25nZXIgcHJpbnQgdGhlIGZpbGVzeXN0ZW0gdmVyc2lvbiBudW1iZXIKKyhpLmUuIDAuNWIpLCBzaW5jZSBpdCBvbmx5IGNvbmZ1c2VzIHBlb3BsZSBhbmQgZG9lc24ndCBzZXJ2ZSBhbnkgcmVhbAorcHVycG9zZS4KKworRTJmc2NrIHdpbGwgb25jZSBhZ2FpbiBjb21waWxlIHVuZGVyIGxpYmM1LCBzaW5jZSBpdCB3aWxsIHN1cHBseSBpdHMKK293biB2ZXJzaW9uIG9mIHN0cm5sZW4gaWYgbmVjZXNzc2FyeS4KKworbWtlMmZzIGFuZCB0dW5lMmZzIHdpbGwgYWxsb3cgdGhlIHVzZSBvZiBVVUlEPSBvciBMQUJFTD0gc3BlY2lmaWVycword2hlbiBzcGVjaWZ5aW5nIHRoZSBleHRlcm5hbCBqb3VybmFsIGRldmljZS4gIHR1bmUyZnMgd2lsbCBhbHNvIHNlYXJjaAorZGV2aWNlcyBsb29raW5nIGZvciB0aGUgZXh0ZXJubGEgam91cm5hbCBkZWJpY2Ugd2hlbiByZW1vdmluZy4gIAorCitFMmZzcHJvZ3MgMS4yMyAoQXVndXN0IDE1LCAyMDAxKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQWRkIGluaXRpYWwgc3VwcG9ydCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlcyAoRUEpOyBlMmZzY2sgd2lsbAorY29ycmVjdGx5IGhhbmRsZSBhIGZpbGVzeXN0ZW0gd2l0aCBFQSdzIGFuZCBjaGVjayB0aGUgRUEgYmxvY2tzIGZvcgorY29ycnVwdGlvbnMuCisKK0UyZnNjaydzIHN5bWxpbmsgc2FuaXR5IGNoZWNraW5nIGhhcyBiZWVuIGNsZWFuZWQgdXAuICBJdCBub3cgY2hlY2tzCit0aGUgaV9zaXplIHZhbHVlIG9mIGZhc3Qgc3ltbGlua3MsIGFuZCBjaGVja3MgZm9yIGltbXV0YWJsZSBmbGFncworYmVpbmcgc2V0IG9mIHN5bWxpbmtzLCBldGMuCisKK0UyZnNjayBub3cgb2ZmZXJzIHRvIGNsZWFyIGlub2RlcyB3aGljaCBhcmUgc3BlY2lhbCBmaWxlcyB0aGF0IGhhdmUgYQorbm9uLXplcm8gaV9ibG9ja3Mgb3IgaV9zaXplIGZpZWxkLiAgKFRoZSBpX3NpemUgZmllbGQgY2hlY2sgd2FzIGluIHRoZQorcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgY29kZSwgYnV0IGR1ZSB0byBhIGJ1ZyBpdCBkaWRuJ3Qgb2ZmZXIgdG8KK2NsZWFyIHRoZSBpbm9kZSB1bmxlc3MgaV9zaXplIGFuZCBpX3NpemVfaGlnaCB3ZXJlIGJvdGggbm9uLXplcm8uKQorCitFMmltYWdlIGNhbiBub3cgY3JlYXRlICJyYXciIGltYWdlIGZpbGVzLCB3aGljaCBvbmx5IGNvbnRhaW4gdGhlCitmaWxlc3lzdGVtIG1ldGFkYXRhIHBsYWNlZCBpbiBhIHNwYXJlIGZpbGUgc28gdGhhdCBlMmZzY2ssIGR1bXBlMmZzLAorZGVidWdmcywgZXRjLiwgY2FuIGJlIHJ1biBkaXJlY3RseSBvbiB0aGUgcmF3IGltYWdlIGZpbGUuCisKK0FkZCBzdXBwb3J0IGZvciB0aGUgNjQtYml0IGJsb2NrIGRldmljZSBwYXRjaGVzLgorCitGaXhlZCBidWdzIGluIGNyZWF0aW5nIGV4dGVybmFsIGpvdXJuYWxzIHdpdGggYSAxayBibG9ja3NpemUuCisKK0FkZCBpbml0aWFsIHN1cHBvcnQgZm9yIGV4dGVybmFsIGpvdXJuYWxzIChzbyBsb25nIGFzIHRoZSBleHRlcm5hbAoram91cm5hbCBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIGZpbGVzeXN0ZW0pIGluIGUyZnNjay4KKworUmVtb3ZlIHJlcXVpcmVtZW50IGZvciBuZWVkaW5nIHRvIHJ1biBmc2NrIG9uIGEgZmlsZXN5c3RlbSBhZnRlcgorcmVtb3ZpbmcgYSBqb3VybmFsIChlaXRoZXIgaW50ZXJuYWwgb3IgZXh0ZXJuYWwpLgorCitUaGUgbWFuIHBhZ2VzIG5vdyBkb2N1bWVudCBob3cgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgZXh0ZXJuYWwgam91cm5hbHMuCisKK1NwZWVkIHVwIHRoZSBjaGVjayBvZiBhbiBleHQzIGZpbGVzeXN0ZW1zIGJ5IGF2b2lkaW5nIGEgbmVlZGxlc3MgZmx1c2gKK29mIGFsbCBvZiB0aGUgc3VwZXJibG9jayBhbmQgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMuCisKK1NwZWVkIHVwIGNyZWF0aW5nIGFuIGludGVybmFsIGpvdXJuYWwgdXNpbmcgdHVuZTJmcyBpbiB0aGUgY2FzZSB3aGVyZQordGhlIGZpbGVzeXN0ZW0gaGFzIGEgbG90IGJsb2NrcyBhbHJlYWR5IGFsbG9jYXRlZC4KKworVHVuZTJmcyBoYXMgYmVlbiBmaXhlZCB0byBtYWtlIHN1cmUgdGhhdCBvbmx5IGVycm9yIG1lc3NhZ2VzIGdvIHRvCitzdGRlcnIsIGFuZCBub3JtYWwgbWVzc2FnZSBnbyB0byBzdGRvdXQuIChBZGRyZXNzZXMgRGViaWFuIGJ1ZyAjMTA4NTU1KQorCitGaXhlZCBhIG1pbm9yIGJ1ZyBpbiBta2UyZnM7IGlmIC1PIG5vbmUgaXMgcGFzc2VkIHRvIG1rZTJmcywgaXQgd2lsbAorbm93IG5vdCBzZXQgdGhlIHNwYXJzZV9zdXBlciBmZWF0dXJlLiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMxMDgxNjUpCisKK0FkZCBzdXBwb3J0IGluIGZzY2sgZm9yIHRoZSBmaWxlc3lzdGVtIHR5cGUgImF1dG8iLgorCitGc2NrIC1BIHdpbGwgbm90IHRyeSB0byBpbnRlcnByZXQgZGV2aWNlIG5hbWVzIGZvciBmaWxlc3lzdGVtcyB3aGljaAoraGF2ZSBhIHBhc3MgbnVtYmVyIGlzIDAuICAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzEwNjY5NikuCisKK0ZzY2sgcHJpbnRzIGEgd2FybmluZyBtZXNzYWdlIGlmIG5vdyB2YWxpZCBmaWxlc3lzdGVtcyBhcmUgcGFzc2VkIHRvCitpdC4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjMTA3NDU4LikKKworRTJmc2NrIG5vdyBnaXZlcyBhbiBleHBsaWNpdCB3YXJuaW5nIGlmIHRoZXJlIGZpbGVzeXN0ZW0gc3RpbGwgaGFzCitlcnJvcnMgYXQgdGhlIGVuZCBvZiB0aGUgcnVuLiAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzEwNDUwMikKKworRTJmc2NrIHdpbGwgc2V0IHRoZSBFWFQyX0VSUk9SX0ZTIGZsYWcgaWYgdGhlIGpvdXJuYWwgc3VwZXJibG9jaworcmVmbGVjdHMgYW4gZXJyb3IuICBFMmZzY2sgd2lsbCBhbHNvIG5vdCBydW4gdGhlIG9ycGhhbiBsaXN0IGlmIHRoZQorZmlsZXN5c3RlbSBjb250YWlucyBlcnJvcnMsIHNpbmNlIHRoZSBvcnBoYW4gbGlzdCBtaWdodCBiZSBjb3JydXB0ZWQuCisKK0UyZnNjayBub3cgcHJpbnRzIHRoZSBudW1iZXIgb2YgbGFyZ2UgZmlsZXMgd2hlbiBnaXZlbiB0aGUgLXYgb3B0aW9uLgorCitGaXhlZCBtaW5vciBtZW1vcnkgbGVha3MgaW4gZTJmc2NrLgorCitTb21lIG1pbm9yIG1hbiBwYWdlcyB1cGRhdGVzLiAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzMwODMzLCAjMTA4MTc0KQorCisKK0UyZnNwcm9ncyAxLjIyIChKdW5lIDIyLCAyMDAxKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVkIGEgYnVnIGluIGUyZnNjaydzIGhhbmRsaW5nIG9mIG9ycGhhbiBpbm9kZXMgd2hpY2ggYXJlIHNwZWNpYWwKK2ZpbGVzIChpLmUuLCBibG9jay9jaGFyYWN0ZXIgZGV2aWNlIGZpbGVzLCBuYW1lZCBGSUZPJ3MsIGV0Yy4pLgorCitGaXhlZCBhIGJ1ZyBhY2NpZGVudGFsbHkgaW50cm9kdWNlZCBpbiBlMmZzcHJvZ3MgMS4yMSB3aGljaCBjYXVzZWQKK3R1bmUyZnMgdG8gZmFpbCBhdCBhZGRpbmcgYSBqb3VybmFsIHRvIGEgbW91bnRlZCBmaWxlc3lzdGVtLgorCitGaXhlZCBhIGZldyBiaWctZW5kaWFuIGJ1Z3MgaW4gZTJmc3Byb2dzCisJKiBUaGUgZGlyZWN0b3J5IGJsb2NrIGZ1bmN0aW9ucyB3ZXJlIGFjY2lkZW50YWxseSByZXBvcnRpbmcKKwkJc29tZSBkaXJlY3RvcmllcyBhcyBjb3JydXB0ZWQgd2hlbiB0aGV5IHdlcmVuJ3QuCisJKiBJZiBlMmZzcHJvZ3MgaXMgY29tcGlsZWQgLS1kaXNhYmxlLXN3YXBmcywgdGhlIEMgbGFuZ3VhZ2UgCisJCWVxdWl2YWxlbnRzIHdlcmVuJ3QgYmVpbmcgaW5jbHVkZWQgZm9yIGJpZy1lbmRpYW4gcGxhdGZvcm1zLgorCQkoRml4ZXMgRGViaWFuIGJ1ZyAjMTAxNjg2KS4KKworRml4ZWQgYSBIdXJkIGNvbXBpbGF0aW9uIHByb2JsZW0uICAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzEwMTM2MSkKKworUHJvZ3JhbW1lcidzIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVc2UgcGxhdGZvcm0gaW5kZXBlbmRlbnQgbWV0aG9kIG9mIGRlZmluaW5nIHRoZSBCTEtGTFNCVUYgYW5kIEZERkxVU0gKK2lvY3RscywgYW5kIGFsbG93IHRoZW0gdG8gYmUgZGVmaW5lZCBmb3Igbm9uLWkzODYgcGxhdGZvcm1zLgorCitUaGUgdXVpZC5oIGhlYWRlciBmaWxlIGlzIG5vdyBwcm90ZWN0ZWQgYWdhaW5zdCBtdWx0aXBsZSBpbmNsdXNpb25zLgorCitFMmZzcHJvZ3MgaXMgbm93IGJlaW5nIGRldmVsb3BlZCB1c2luZyBCaXRLZWVwZXIuICBDaGFuZ2VkIHRoZSB0ZXN0CitzY3JpcHRzIHRvIGRlYWwgd2l0aCBCSydzIHN0cmlwcGluZyBDUiBjaGFyYWNndGVycyBmcm9tIHRleHQgZmlsZXMsCithbmQgY2hhbmdlZCB0aGUgdG9wLWxldmVsIE1ha2VmaWxlLmluIHRvIGF2b2lkIGluY2x1ZGluZyBCaXRLZWVwZXIKK2ZpbGVzIHdoZW4gZ2VuZXJhdGluZyB0aGUgc291cmNlIHRhcmJhbGwuCisKKworRTJmc3Byb2dzIDEuMjEgKEp1bmUgMTUsIDIwMDEpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQWRkZWQgbmV3IGNvbmZpZ3VyZSBmbGFncyB3aGljaCBhbGxvdyBhIHN1YnNldCBlMmZzcHJvZ3MgdG8gYmUgYnVpbHQ7Cit0aGlzIGlzIG1vc3QgdXNlZnVsIGZvciBib290IGZsb29waWVzLCBzaW5jZSB0aGUgcmVzdWx0aW5nIHNoYXJlZAorbGlicmFyaWVzIGFuZCBwcm9ncmFtcyBhcmUgc2xpbW1lZCBkb3duIGJ5IHJlbW92aW5nIGZlYXR1cmVzIHRoYXQKK2FyZW4ndCBuZWNlc3NhcnkgZm9yIGEgYm9vdCBmbG9wcHkuICBUaGUgbmV3IGZsYWdzIHRoYXQgd2VyZSBhZGRlZAorYXJlOiAtLWRpc2FibGUtc3dhcGZzLCB3aGljaCByZW1vdmVzIHN1cHBvcnQgZm9yIGJ5dGUgc3dhcHBpbmcgb2xkCitsZWdhY3kgUFBDLzY4ayBmaWxlc3lzdGVtcywgLS1kaXNhYmxlLWRlYnVnZnMsIHdoaWNoIHJlbW92ZXMgc3VwcG9ydAorZm9yIGRlYnVnZnMgZnJvbSB0aGUgbGliZXh0MmZzIGxpYnJhcnksIC0tZGlzYWJsZS1pbWFnZXIsIHdoaWNoCityZW1vdmVzIHN1cHBvcnQgZm9yIHRoZSBlMmltYWdlIHByb2dyYW0sIGFuZCAtLWRpc2FibGUtcmVzaXplciwgd2hpY2gKK3JlbW92ZXMgc3VwcG9ydCBmb3IgcmVzaXplMmZzLgorCitFMmZzY2sgbm93IHByaW50cyB0aGUgbnVtYmVyIG9mIG1vdW50cyBvciBkYXlzIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QKK2NoZWNrIHdoZW4gZTJmc2NrIGlzIGZvcmNlZCB0byBjaGVjayBhbiBvdGhlcndpc2UgY2xlYW4gZmlsZXN5c3RlbS4KKworVHVuZTJmcyBub3cgcHJpbnRzIGFuIGluZm9ybWF0aXZlIG1lc3NhZ2UgYWJvdXQgaG93IG9mdGVuIGEgZmlsZXN5c3RlbQord2lsbCBiZSBjaGVja2VkIHdoZW4gYWRkaW5nIGEgam91cm5hbCB0byB0aGUgZmlsZXN5c3RlbSwgdG8gcmVtaW5kIHRoZQordXNlciB0aGF0IGhlL3NoZSBtYXkgd2FudCB0byBhZGp1c3QgdGhvc2UgcGFyYW1ldGVycyB1c2luZyB0dW5lMmZzCistYy8taS4KKworV29ya2VkIGFyb3VuZCBodXJkIGJyYWluLWRhbWFnZSB3aGljaCBjYXVzZXMgZTJmc2NrIHRvIHNvbWV0aW1lcworYmVsaWV2ZSBhIGZpbGVzeXN0ZW0gaXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBiYXNlZCBvbiBkZXZpY2UgbnVtYmVycworKHNpbmNlIEh1cmQgZG9lc24ndCBoYXZlIGRldl90J3MsIHdoaWNoIGlzIGFyZ3VhYmx5IGEgUE9TSVguMQordmlvbGF0aW9uKS4KKworRml4ZWQgYSBidWcgaW50cm9kdWNlZCBpbiAxLjIwIHdoaWNoIGNhdXNlZCBlMmZzY2sgdG8gYWJvcnQgd2l0aCBhbgorZXJyb25lb3VzIGVycm9yIHdpdGggdGhlIC1GIG9wdGlvbiB3YXMgc3BlY2lmaWVkLgorCitGaXhlZCBhIGV4dDMgcmVjb3ZlcnkgYnVnIGluIHRoZSByZXZva2UgaGFuZGxpbmc7IHN5bmNocm9uaXplZCB3aXRoCitleHQzIDAuN2EuCisKK0ZpeGVkIHR3byBidWdzIGluIGUyZnNjaydzIGhhbmRsaW5nIG9mIGR1cCBibG9jayBoYW5kbGluZywgZGVhbGluZword2l0aCByZWxhdGl2ZWx5IHVuY29tbW9uIGVkZ2UgY2FzZXM6IGEgZGlyZWN0b3J5IHdpdGggYW4gaW5kaXJlY3QKK2Jsb2NrIHdoaWNoIGlzIGNsYWltZWQgYnkgYW5vdGhlciBmaWxlLCBhbmQgd2hlbiB0aGUgbGFzdCBpbm9kZSBpbiB0aGUKK2ZpbGVzeXN0ZW0gaGFzIGJsb2NrcyBjbGFpbWVkIGJ5IGFub3RoZXIgZmlsZS4KKworRTJmc2NrIG5vdyBjaGVja3MgdG8gc2VlIGlmIHRoZSBpX3NpemUgZmllbGQgb2YgYSBmYXN0IHN5bWxpbmsgaXMgdG9vCitiaWcsIGFuZCBvZmZlcnMgdG8gY2xlYXIgdGhlIHN5bWxpbmsgaWYgc28uCisKK0UyZnNjayBub3cgY2hlY2tzIHRvIHNlZSBpZiBpX3NpemVfaGlnaCBvZiBzcGVjaWFsIGZpbGVzIGlzIG5vbi16ZXJvLAorYW5kIG9mZmVycyB0byBjbGVhciBpX3NpemVfaGlnaC4KKworRml4IGUyZnNjaydzIGhhbmRsaW5nIG9mIGluY29tcGF0aWJsZSBqb3VybmFsIGZsYWdzIHNvIHRoYXQgdGhlIHVzZXIKK2hhcyBjaGFuY2UgdG8gYWJvcnQsIGFuZCB0aGVuIGhhcyB0aGUgb3B0aW9uIHRvIGNsZWFyIG91dCB0aGUgam91cm5hbAorZW50aXJlbHkuICAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzk4NTI3LikKKworRml4ZWQgYSBidWcgaW4gZnNjayB3aGljaCBjb3VsZCBjYXVzZSBpdCB0byBjb3JlIGR1bXAgaWYgYSBtaXggb2YKK3N0YW5kYXJkIGFuZCBub24tc3RhbmRhcmQgZGV2aWNlIG5hbWVzIGFyZSB1c2VkIGluIC9ldGMvZnN0YWIuCisoRGViaWFuIGJ1ZyAjMTAwNTU5KQorCitGaXhlZCBhIGJ1ZyBpbiBkZWJ1Z2ZzIHdoaWNoIGNhdXNlZCByZWFkIGVycm9ycyB3aGVuIGNvcHlpbmcgYSBmaWxlIHRvCitub3QgYmUgbm90aWNlZC4KKworVGhlIGRlYnVnZnMgc2V0X3N1cGVyX3ZhbHVlIGNvbW1hbmQgY2FuIG5vdyBtb2RpZnkgdGhlIHNfbGFzdGNoZWNrIGZpZWxkLgorCitGaXhlZCBhIGJ1ZyBpbiBsc2F0dHIgYW5kIGNoYXR0ciB3aGljaCB3YXMgYWNjaWRlbnRhbGx5IGludHJvZHVjZWQgaW4KKzEuMjAgdG8gc3VwcG9ydCA+IDJHQiBmaWxlczsgYm90aCBsc2F0dHIgYW5kIGNoYXR0ciB3YXNuJ3QgcmVhZGluZworZGlyZWN0b3JpZXMgY29ycmVjdGx5IGJlY2F1c2UgdGhlIGNoYW5nZSBtb2RpZmllZCB0aGUgbGF5b3V0IG9mIHN0cnVjdAorZGlyZW50IHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBsaWJlMnAgc2hhcmVkIGxpYnJhcnkuCisKK0NsZWFuZWQgdXAgdGhlIG1rZTJmcyBtYW51YWwgcGFnZSBhbmQgaW5jbHVkZWQgYSBkaXNjdXNzaW9uIGFib3V0IHdoeQoraXQncyBnb29kIHRvIHBlcmlvZGljYWxseSBjaGVjayB0aGUgZmlsZXN5c3RlbSBldmVuIHdoZW4gam91cm5hbGluZyBpcworZW5hYmxlZC4KKworUHJvZ3JhbW1lcidzIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXggZ2VuZXJhbCBnY2MgLVdhbGwgY29tcGxhaW50cy4KKworVGhlIHR5cGVzIG5lZWRlZCBieSB0aGUgZXh0MiBoZWFkZXIgZmlsZXMgYXJlIG5vdyBwcm92aWRlZCBieQorbGliL2V4dDJmcy9leHQyX3R5cGVzLmgsIGluc3RlYWQgb2YgaW5jbHVkZS9hc20vdHlwZXMuaC4KKworSW50ZWdlcnMgYXJlIG5vdyBwcmVmZXJyZWQgdG8gbG9uZ3Mgd2hlbiB0cnlpbmcgdG8gZmluZCBhIDMyLWJpdCB0eXBlCitpbiBleHQyX3R5cGVzLmguICBBbHNvLCBpZiBsaW51eC90eXBlcy5oIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCwKK2Rvbid0IHRyeSB0byByZWRlZmluZSB0aGUgdHlwZXMuCisKK0ZpeGVkIG1ha2UgZGVwZW5kIHNjcmlwdCBzbyB0aGF0IGl0IGF1dG9tYXRpY2FsbHkgY29ycmVjdHMgdGhlCitwYXRobmFtZSBjbGVhbnVwcyBwZXJmb3JtZWQgYnkgbWFrZSAtTSwgc28gSSBkb24ndCBoYXZlIHRvIGZpeCB0aGVtIHVwCitieSBoYW5kLgorCitGaXhlZCB0aGUgZF9sb2FkZHVtcCB0ZXN0IGNhc2UgdG8gYmUgbW9yZSByb2J1c3QsIGFuZCBub3QgZGVwZW5kIG9uCitiYXNoJ2lzbXMuCisKK1JlbW92ZWQgZGVidWdmcydzIGRlcGVuZGVuY2Ugb24gcHJlYWQoKSwgd2hpY2ggd2FzIGFjY2lkZW50YWxseQoraW50cnVkY2VkIGluIGUyZnNwcm9ncyAxLjIwCisKK0ZpeGVkIGEgcGVyZm9ybWFuY2UgYnVnIGluIHRoZSBsaWJleHQyZnMncyBpY291bnQgcm91dGluZTsgdGhlIHNpemUKK2VzdGltYXRlIG9mIHRoZSBpY291bnQgYXJyYXkgd2FzIGluY29ycmVjdGx5IGJlaW5nIGNhbGN1bGF0ZWQuCisKK1JlbW92ZWQgdXNlIG9mIHRoZSBiYWRibG9ja3MgY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMgaW4gdGhlIGUyZnNwcm9ncworcHJvZ3JhbXMuCisKK0FkZGVkIHBhcmFub2lhIGNvZGUgd2hpY2ggcHJvdGVjdHMgYWdhaW5zdCBzdHJhbmdlIGNhc2VzIHdoZXJlIC9ldGMKK2lzbid0IG9uIHRoZSByb290IGZpbGVzeXN0ZW0sIG9yIGlmIC9ldGMvbXRhYiBkb2Vzbid0IGV4aXN0LgorCitUaGUgaGVhZGVyIGZpbGUgZXh0Ml90eXBlcy5oIGlzIG5vdyBpbnN0YWxsZWQuCisKK0F1dG9jb25mIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZW4gd2UgYXJlIG9uIGJpZy1lbmRpYW4gbWFjaGluZXMsCitpbnN0ZWFkIG9mIGRvaW5nIHJ1bi10aW1lIHRlc3RzLCB0byBzYXZlIGEgZmV3IGJ5dGVzIG9mIGNvZGUuCisKK1RoZSBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCBhbmQgZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcAorZnVuY3Rpb25zIGFyZSBubyBsb25nZXIgaW5saW5lIGZ1bmN0aW9ucywgd2hpY2ggc2F2ZXMgc3BhY2UgYW5kCitkb2Vzbid0IHJlYWxseSBjb3N0IGFueSByZWFsIHBlcmZvcm1hbmNlLgorCitUaGUgZXh0MmZzIGxpYnJhcnkgbm8gbG9uZ2VyIGRlcGVuZHMgb24gdGhlIGUycCBsaWJyYXJ5LiAgKFdoYXQgbmVlZAordGhlcmUgd2FzIG9mIGl0IC0tLSBuYW1lbHksIGZzZXRmbGFncywgd2FzIGNvZGVkIGluLWxpbmUpLgorCitGaXhlZCB0aGUgbWFrZWZpbGUgc28gdGhhdCBsaWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBpcyBnZW5lcmF0ZWQgZXZlbgord2hlbiB0aGUgdXNlciBpcyBzdHVwaWQgYW5kIHRyaWVzIGNvbXBpbGluZyB0aGUgcGFja2FnZSB1c2luZyAibWFrZQoraW5zdGFsbCIgYXMgcm9vdC4KKworTWlzY2VsbGFuZW91cyBjb2RlIGNsZWFudXBzOgorCSogQWRkZWQgbWlzc2luZyBmaWxlcyBmcm9tIE1ha2VmaWxlLmluJ3MgU1JDUyBmaWxlLCBzbyB0aGF0IAorCQl0aGVpciBkZXBlbmRlbmNpZXMgd291bGQgYmUgcHJvcGVybHkgY2FsY3VsYXRlZC4KKwkqIFJlbW92ZWQgcmVkdW5kYW50IGNvZGUKKwkqIEZpeGVkIGNvbW1lbnRzIGluIGNvZGUKKwkqIFJlbW92ZWQgbm8tbG9uZ2VyIHVubmVlZGVkIGFyZ3N1c2VkICNwcmFnbWEuCisKKworRTJmc3Byb2dzIDEuMjAgKE1heSAyMCwgMjAwMSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FkZCBzdXBwb3J0IGZvciByZXBsYXlpbmcgdGhlIGV4dDMgam91cm5hbCBwdXJlbHkgaW4gdXNlciBtb2RlLAoraW5jbHVkaW5nIGhhbmRsaW5nIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgVXNlZCBjb2RlIGNvbnRyaWJ1dGVkIGJ5CitBbmRyZWFzIERpbGdlciwgd2l0aCBidWcgZml4ZXMgYW5kIHRoZSBvcnBoYW5lZCBpbm9kZSBoYW5kbGluZyBkb25lCitieSBUaGVvZG9yZSBUcydvLgorCitUaGUgbWtlMmZzIGFuZCB0dW5lMmZzIHByb2dyYW1zIGNhbiBjcmVhdGUgb3IgbW9kaWZ5IGEgZmlsZXN5c3RlbSB0bworaW5jbHVkZSBhbiBleHQzIGpvdXJuYWwuICBUdW5lMmZzIGFsc28gY2FuIGJlIHVzZWQgdG8gcmVtb3ZlIGFuIGV4dDMKK2pvdXJuYWwgZnJvbSBhIGZpbGVzeXN0ZW0uCisKK0UyZnNjayB3aWxsIG5vdyBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBhIGxpbmtlZCBsaXN0IG9mIG9ycGhhbgoraW5vZGVzIGluIHRoZSBzdXBlcmJsb2NrLCBhbmQgY2xlYXIgdGhvc2UgaW5vZGVzIGJlZm9yZSBzdGFydGluZyB0aGUKK3Jlc3Qgb2YgdGhlIGZpbGVzeXN0ZW0gY2hlY2sgKGJ1dCBhZnRlciB0aGUgam91cm5hbCBwbGF5YmFjaykuCisKK0UyZnNjayBub3cgdmFsaWRhdGVzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcGFzc2VkIHRvIHRoZSAtQyBvcHRpb24sCit3aGljaCBzYXZlcyBhZ2FpbnN0IHRoZSBjb21wbGV0aW9uIGJhciBnZXR0aW5nIHdyaXR0ZW4gdG8gYW4KK3VuZXhwZWN0ZWQgbG9jYXRpb24sIHN1Y2ggYXMgdGhlIGRpc2sgYmVpbmcgY2hlY2tlZC4gIChEZWJpYW4KK2J1Zy93aXNobGlzdCAjNTUyMjApCisKK0UyZnNjayB3aWxsIG5vdyBidW1wIHRoZSBmaWxlc3lzdGVtIHJldmlzaW9uIG51bWJlciBmcm9tIHplcm8gdG8gb25lCitpZiBhbnkgb2YgdGhlIGNvbXBhdGliaWxpdHkgYml0cyBhcmUgc2V0LgorCitGaXhlZCBhIGJ1ZyB3aGVyZSBhIGJhZGx5IGNvcnJ1cHRlZCBkaXJlY3Rvcnkgb24gYSBiaWcgZW5kaWFuIHN5c3RlbQorY291bGQgY2F1c2UgZTJmc2NrIHRvIGRpZSB3aXRoIGEgYnVzIGVycm9yLiAgVGhlCitleHQyZnNfcmVhZF9kaXJfYmxvY2soKSBhbmQgZXh0MmZzX3Byb2Nlc3NfZGlyX2Jsb2NrKCkgZnVuY3Rpb25zIGluCit0aGUgZXh0MiBsaWJyYXJ5IG5vdyBkb2VzIGFsaWdubWVudCBzYW5pdHkgY2hlY2tzIG9uIHRoZSByZWNfbGVuIGZpZWxkCitvZiB0aGUgZGlyZWN0b3J5IGVudHJ5IGJlZm9yZSB1c2luZyBpdC4KKworVGhlIGV4dDIgbGlicmFyeSBoYXMgYmVlbiBlbmhhbmNlZCB0byBtYWtlIHR1bmUyZnMgc2FmZSB0byBydW4gb24KK21vdW50ZWQgZmlsZXN5c3RlbXMuICAoVXNlcnMgY291bGQgdXN1YWxseSBnZXQgYXdheSB3aXRoIHVzaW5nIHR1bmUyZnMKK29uIG1vdW50ZWQgZmlsZXN5c3RlbXMgYmVmb3JlLCBidXQgd2l0aCB0aGUgYWR2ZW50IG9mIGV4dDMgYW5kCitqb3VybmFsaW5nLCBpdCBiZWNhbWUgaW1wb3J0YW50IHRvIG1ha2UgdHVuZTJmcyB3YXMgKnJlYWxseSogc2FmZSBmb3IKK3VzZSBldmVuIHdoZW4gdGhlIGZpbGVzeXN0ZW0gYmVpbmcgbW9kaWZpZWQgaXMgbW91bnRlZC4pICBFMmxhYmVsIGlzCitub3cgaW1wbGVtZW50ZWQgYnkgdHVuZTJmcyB1c2luZyBhbiBhcmd2WzBdIGRpc3BhdGNoLCBzbyB0aGF0IGUybGFiZWwKK2lzIGFsc28gbm93IHNhZmUgZm9yIHVzZSBvbiBtb3VudGVkIGZpbGVzeXN0ZW1zLgorCitBZGRlZCBhIG5ldyBwcm9ncmFtLCBlMmltYWdlLCB3aGljaCBjcmVhdGVzIGEgYmFja3VwIG9mIGNyaXRpY2FsIGV4dDIKK2ZpbGVzeXN0ZW0gZGF0YSBzdHJ1Y3R1cmVzLiAgVGhlIGdlbmVyYXRlZCBpbWFnZSBmaWxlIGNhbiBiZSBleGFtaW5lZAordXNpbmcgZHVtcGUyZnMgYW5kIGRlYnVnZnMuICBJbiB0aGUgZnV0dXJlLCBlMmZzY2sgd2lsbCBiZSBhYmxlIHRvIHVzZQordGhlIGltYWdlIGZpbGUgdG8gaGVscCByZWNvdmVyIHZlcnkgYmFkbHkgZGFtYWdlZCBmaWxlc3lzdGVtcy4KKworRml4ZWQgYSBudW1iZXIgb2YgTEZTIGJ1Z3MgaW4gZTJmc2NrOyB2ZXJ5LCB2ZXJ5IGxhcmdlICg+IDIqKjQyKSBmaWxlcworbm8gbG9uZ2VyIGNhdXNlIGUyZnNjayB0byBib21iIG91dC4gIEFsc28gdHJlYXQgZmlsZXMgPiAyR0IgYXMgYmVpbmcKK2xhcmdlIGZpbGUgd2hlbiBkZWNpZGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgZmlsZXN5c3RlbSBoYXMgbGFyZ2UgZmlsZXMuCisKK0ZpeGVkIGxzYXR0ciBhbmQgY2hhdHRyIHNvIHRoYXQgdGhleSB3b3JrIGNvcnJlY3RseSBvbiBsYXJnZSBmaWxlcy4KKyhGaXhlcyBEZWJpYW4gYnVnICM3MjY5MC4pCisKK1JlbW92ZWQgbGltaXRhdGlvbiBpbiBnZXRfZGV2aWNlX3NpemUoKSB3aGljaCBpbXBvc2VkIGEgb25lIHRlcnJhYnl0ZQorZmlsZXN5c3RlbSBsaW1pdGF0aW9uLiAgKE1vc3QgMi4yIGtlcm5lbHMgc3RpbGwgaGF2ZSBhIHNpZ25lZCBpbnQKK3Byb2JsZW0gd2hpY2ggY2F1c2UgMSBUQiBibG9jayBkZXZpY2UgbGltaXRhdGlvbi4gIEZvcnR1bmF0ZWx5LCB0aGUKK2tlcm5lbCBwYXRjaGVzIHRvIGZpeCB0aGlzIGFyZSBtdWNoIGVhc2llciB0aGFuIGZpeGluZyB0aGUgMlRCCitsaW1pdGF0aW9uIGluIHRoZSBrZXJuZWwuICA6LSkKKworQSBtYXhfbW91bnRfY291bnQgb2YgemVybyBpcyBub3cgdHJlYXRlZCBhcyBpZiBubyBtb3VudCBjb3VudCB3ZXJlCitzZXQuICAoUHJldmlvdXNseSwgbm8gbW91bnQgY291bnQgd2FzIGluZGljYXRlZCBieSB1c2luZyAtMSwgYW5kIGEKK21vdW50IGNvdW50IG9mIHplcm8gY2F1c2VkIGUyZnNjayB0byBhbHdheXMgYmUgcnVuLikKKworTWtlMmZzIHN1cHBvcnRzIHR3byBuZXcgZmlsZXN5c3RlbSB0eXBlcyBsYXJnZWZpbGUgYW5kIGxhcmdlZmlsZTQuCisKK01rZTJmcyBub3cgYWRkcyBzb21lIHJhbmRvbW5lc3MgaW4gc19tYXhfbW91bnRfY291bnQgc28gdGhhdCBtdWx0aXBsZQorZmlsZXN5c3RlbXMgd29uJ3QgYmUgYWxsIGNoZWNrZWQgYXQgdGhlIHNhbWUgdGltZSB1bmRlciBub3JtYWwKK29wZXJhdGlvbnMuCisKK0ZpeGVkIGJ1ZyBpbiB0aGUgcHJvZ3Jlc3MgYmFyIHByaW50aW5nIGNvZGUgd2hpY2ggY291bGQgY2F1c2UgZTJmc2NrCit0byBjb3JlIGR1bXAgb24gYW4gaWxsZWdhbCBmaWxlc3lzdGVtLgorCitGaXhlZCBidWcgaW4gZnNjayB3aGljaCBjb3VsZCBhbGxvdyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mIGUyZnNjawordG8gYmUgcHJpbnRpbmcgYSBwcm9ncmVzcyBiYXIuICAoRGViaWFuIGJ1ZyAjNjUyNjcpCisKK0ZzY2sgdXNpbmcgYSBVVUlEIG9yIGEgTEFCRUwgc3BlY2lmaWVyIHdpbGwgd29yayBldmVuIGlmIGRldmZzIGlzCitjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgYW5kIG5vdCBtb3VudGVkLiAgSWYgdGhlIHBhdGhuYW1lcyBpbgorL3Byb2MvcGFydGl0aW9ucyBhcmUgaW5jb3JyZWN0LCBmc2NrIHdpbGwgc2VhcmNoIC9kZXYgZm9yIHRoZSBjb3JyZWN0CitkZXZpY2UgKHVzaW5nIHRoZSBuZXcgZXh0MmZzX2ZpbmRfYmxvY2tfZGV2aWNlIGxpYnJhcnkgZnVuY3Rpb24pLgorRnNjayBub3cgYWxzbyBjaGVja3MgdGhlIFJBSUQgZGV2aWNlcyBmaXJzdCBzbyB0aGF0IHRoZXkgYXJlIHByb3Blcmx5Citmb3VuZCB3aGVuIHRoZXkgYXJlIGluIHVzZS4gIFN1cHBvcnQgaGFzIGFsc28gYmVlbiBhZGRlZCB0byBzdXBwb3J0CithZGRpdGlvbmFsIElERSBkaXNrcyBhbmQgdGhlIERBQyA5NjAgZGV2aWNlIG5hbWVzLiAgKERlYmlhbiBidWcgIzk0MTU5KQorCitGaXhlZCBhIGJ1ZyBpbiBmc2NrIHdoaWNoIGNhdXNlZCBpdCBub3QgZGVhbCBwcm9wZXJseSB3aXRoIDE2CitieXRlIGxvbmcgZmlsZXN5c3RlbSBsYWJlbHMuCisKK0ZzY2sncyAtdCBvcHRpb24gaGFzIGJlZW4gbWFkZSBhIGxvdCBtb3JlIGZsZXhpYmxlLiAgVGhlIHNlbWFudGljcyBmb3IKK3doYXQgaGFwcGVucyBpZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHRvIGZzY2sgaGFzIGJlZW4gcmVndWxhcml6ZWQsCithbmQgaXQgaXMgbm93IHBvc3NpYmxlIHRvIGZpbHRlciB3aGF0IGZpbGVzeXN0ZW1zIHdpbGwgZ2V0IGNoZWNrZWQKK2Jhc2VkIHdoYXQgaXMgaW4gdGhlIGZpbGVzeXN0ZW0ncyBmc3RhYiBlbnRyeSdzIG9wdGlvbiBmaWVsZC4gIChEZWJpYW4KK2J1ZyAjODk0ODMuKQorCitUaGUgZHVtcGUyZnMgcHJvZ3JhbSBjYW4gbm93IHByaW50IG91dCB0aGUgZ3JvdXAgZGVzY3JpcHRpb24KK2luZm9ybWF0aW9uIGluIGhleCwgYW5kIGFsc28gcHJpbnRzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3VwZXJibG9jayBhbmQKK2Jsb2NrIGdyb3VwIGRlc2NyaXB0b3IgZm9yIHRob3NlIGJsb2NrIGdyb3VwcyB0aGF0IGhhdmUgdGhlbS4KKworTWtlMmZzIG5vdyBjbGVhcnMgdGhlIGV4dDIgc3VwZXJibG9jayBiZWZvcmUgaXQgc3RhcnRzIGNyZWF0aW5nIGEKK2ZpbGVzeXN0ZW0sIHNvIHRoYXQgdGhlIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVyIGlzIG9ubHkgd3JpdHRlbiBpZiB0aGUKK2ZpbGVzeXN0ZW0gY3JlYXRpb24gcHJvY2VzcyBzdWNjZXNzZnVsbHkgY29tcGxldGVzLgorCitUaGUgZGVidWdmcyBwcm9ncmFtJ3Mgc3RhdCBjb21tYW5kIG5vdyBwcmV0dHktcHJpbnRzIHRoZSBibG9ja3MgdXNlZAorYnkgYW4gaW5vZGUgc28gdGhhdCBpdCdzIG1vcmUgY29tcGFjdCBhbmQgaW5mb3JtYXRpdmUuCisKK1RoZSBkZWJ1Z2ZzIHN0YXRzIGNvbW1hbmQgbm93IHVzZXMgdGhlIHNhbWUgbGliZTJwIGNvZGUgKHdoaWNoIGlzIHVzZWQKK2J5IGR1bXBlMmZzKSB0byBwcmludCB0aGUgc3VwZXJibG9jayBoZWFkZXIgaW5mb3JtYXRpb24uICBUaGlzIGlzIG1vcmUKK2NvbXBsZXRlLCBhbmQgaXQgYXZvaWRzIGEgYml0IG9mIGNvZGUgZHVwbGljYXRpb24uCisKK0FkZGVkIGEgbmV3IGRlYnVnZnMgY29tbWFuZCwgc2V0X3N1cGVyX3ZhbHVlIChzc3YpIHdoaWNoIGFsbG93cyB0aGUKK3VzZXIgdG8gc2V0IGFyYml0cmFyeSBzdXBlcmJsb2NrIGZpZWxkcy4KKworRGVidWdmcyB3YXMgZXh0ZW5kZWQgdG8gc3VwcG9ydCBpbm9kZSBudW1iZXJzIGluIGhleCAoYnkgcHJlZml4aW5nCit0aGVtIHdpdGggMHgpLCBhbmQgc28gdGhhdCBtb2RpZnlfaW5vZGUgY2FuIHNldCB0aGUgaW5vZGUgZ2VuZXJhdGlvbgorbnVtYmVyLiAgQWxzbywgdGhlcmUgaXMgbm93IGEgbmV3IGZ1bmN0aW9uIGNvbW1hbmQgY2FsbGVkIGxvZ2R1bXAKK3doaWNoIHdpbGwgZHVtcCBhbiBleHQzIGpvdXJuYWwuCisKK0ZpeGVkIGEgYnVnIGluIGRlYnVnZnMgc28gdGhhdCBxdWl0dGluZyBvdXQgb2YgdGhlIHBhZ2VyIGRvZXNuJ3Qga2lsbAorZGVidWdmcy4KKworRGVidWdmcydzIGR1bXAgY29tbWFuZCBub3cgc3RvcHMgaW1tZWRpYXRlbHkgdXBvbiByZXBvcnRpbmcgYSBkaXNrCityZWFkIGVycm9yLiAgKEZpeGVkIGEgYnVnIGluIGV4dDJmc19maWxlX3JlYWQgbGlicmFyeSByb3V0aW5lIHdoaWNoCitjYXVzZWQgZGVidWdmcyBub3QgdG8gc3RvcC4pICAoRGViaWFuIGJ1ZyAjNzkxNjMpCisKK09uIHN5c3RlbXMgd2l0aCAvcHJvYy9tb3VudHMgKG1haW5seSBMaW51eCBzeXN0ZW1zKSwgL3Byb2MvbW91bnRzIGlzCitjaGVja2VkIGJlZm9yZSAvZXRjL210YWIgaXMgdXNlZCwgc2luY2UgL3Byb2MvbW91bnRzIGlzIG1vcmUgbGlrZWx5IHRvCitiZSBhY2N1cmF0ZS4KKworQWRkZWQgcG9ydGFiaWxpdHkgZml4ZXMgZm9yIFNvbGFyaXMgYW5kIExpbnV4L2lhNjQuCisKK1ZhcmlvdXMgbWFudWFsIHBhZ2VzIHdlcmUgY2xhcmlmaWVkIGFuZCBjbGVhbmVkIHVwLiAgKEZpeGVkIGRlYmlhbgorYnVncyAjNjM0NDIsICM2NzQ0NiwgYW5kICM4NzIxNikKKworCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBlMmZzY2sgbWVzc2FnZSBwcmludGVyIG5vdyBzdXBwb3J0cyAlSXUgYW5kICVJZywgd2hpY2ggd2lsbCBwcmludAorb3V0IHRoZSBpbm9kZSdzIHVzZXIgYW5kIGdyb3VwIG93bmVycywgcmVzcGVjdGl2ZWx5LgorCitFMmZzcHJvZ3Mgbm93IGluY2x1ZGVzIGl0cyBvd24gdmVyc2lvbiBvZiBpbmNsdWRlL2xpbnV4L2V4dDJfZnMuaCwgc28KK3RoYXQgbm8gbG9uZ2VyIGRlcGVuZGVudCBvbiB0aGUgc3lzdGVtIGhhdmluZyB0aGUgY29ycmVjdCB2ZXJzaW9uIG9mCit0aGUga2VybmVsIGhlYWRlciBmaWxlcy4KKworQWRkZWQgYSBuZXcgZnVuY3Rpb24gdG8gbGliZXh0MiwgZXh0MmZzX2ZpbmRfYmxvY2tfZGV2aWNlKCksIHdoaWNoCitzZWFyY2hlcyB0aGUgc3lzdGVtIChpLmUuLCAvZGV2LCAvZGV2ZnMsIC9kZXZpY2VzKSBmb3IgYSBwYXRobmFtZSB0byBhCitkZXZpY2UgZ2l2ZW4gaXRzIGRldmljZSBudW1iZXIuCisKK0FkZGVkIGEgbmV3IGZ1bmN0aW9uIHRvIGxpYmV4dDIsIGV4dDJmc19zeW5jX2RldmljZSwgd2hpY2ggY2VudHJhbGl6ZXMKK2FsbCBvZiB0aGUgcGxhY2VzIHdoaWNoIG1pZ2h0IHRyeSB0byB1c2UgdGhlIEJMS0ZMU0JVRiBvciBGREZMVVNICitpb2N0bHMgKGFuZCB1c3VhbGx5IGZhaWxpbmcgdG8gZGVmaW5lIHRoZW0gc2luY2UgdGhlIHN5c3RlbSBoZWFkZXIKK2ZpbGVzIGRvbid0IHVzdWFsbHkgZG8gdGhpcyBmb3IgdXMsIGFuZCB3ZSdyZSB0cnlpbmcgdG8gYXZvaWQgdXNhZ2Ugb2YKK2tlcm5lbCBpbmNsdWRlIGZpbGVzIG5vdykuCisKK0FkZGVkIG5ldyB1dGlsaXR5IHByb2dyYW1zIGluIHRlc3RzL3Byb2dzOiByYW5kb21fZXhlcmNpc2UgYW5kCitob2xkX2lub2RlLiAgVGhleSBhcmVuJ3QgYnVpbHQgYnkgZGVmYXVsdDsgdGhleSdyZSB1c2VmdWwgZm9yCitleGVyY2lzaW5nIGV4dDMgZmlsZXN5c3RlbSBjb2RlLgorCitBZGRlZCBhIG5ldyBleHQyIGZpbGVzeXN0ZW0gZmxhZywgRVhUMl9GTEFHX1NVUEVSX09OTFksIHdoaWNoIGNhdXNlcwordGhlIGZpbGVzeXN0ZW0gY2xvc2UgZnVuY3Rpb25zIHRvIG9ubHkgdXBkYXRlIHRoZSBzdXBlcmJsb2NrLCBhbmQgdG8KK25vdCB0b3VjaCB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMuICBOZWVkZWQgYnkgdHVuZTJmcyB3aGVuCittb2RpZnlpbmcgYSBtb3VudGVkIGZpbGVzeXN0ZW0uCisKK0dvdCByaWQgb2Ygc3RydWN0IGV4dDJmc19zYiBhbmQgcmVwbGFjZWQgaXQgd2l0aCB0aGUgc3RhbmRhcmQgc3RydWN0CitleHQyX3N1cGVyX2Jsb2NrIGZyb20gaW5jbHVkZS9saW51eC9leHQyX2ZzLmguICBOb3RlOiB0aGlzIG1heSBicmVhaworc291cmNlIChidXQgbm90IGJpbmFyeSkgY29tcGF0aWJpbGl0eSBvZiBzb21lIHVzZXJzIG9mIHRoZSBleHQyCitsaWJyYXJ5LiAgVGhvc2UgYXBwbGljYXRpb25zIHNob3VsZCBqdXN0IHNpbXBseSBkbyBhIGdsb2JhbCBzZWFyY2ggYW5kCityZXBsYWNlIG9mIHN0cnVjdCBleHQyZnNfc2Igd2l0aCBzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jaywgYW5kIGluY2x1ZGUKK3RoZSBuZXcgaGVhZGVyIGZpbGUgPGV4dDJmcy9leHQyX2ZzLmg+IHdoaWNoIGRlZmluZXMgaXQuCisKK1RoZSBpbm9fdCB0eXBlIGhhcyBiZWVuIHJlbmFtZWQgZXh0Ml9pbm9fdCB0byBwcm90ZWN0IGFwcGxpY2F0aW9ucwordGhhdCBhdHRlbXB0IHRvIGNvbXBpbGUgLURfRklMRV9PRkZTRVRfQklUUz02NCwgc2luY2UgdGhpcworaW5leHBsaWNhYmx5IGNoYW5nZXMgaW5vX3QoIT8pLiAgU28gd2UgdXNlIGV4dDJfaW5vX3QgdG8gYXZvaWQgYW4KK3VuZXhwZWN0ZWQgQUJJIGNoYW5nZS4KKworVGhlIE1ha2VmaWxlcyBoYXZlIGJlZW4gcmV3b3JrZWQgc28gdGhhdCAibWFrZSBjaGVjayIgY2FuIGJlIHJ1biBmcm9tCit0aGUgdG9wLWxldmVsIE1ha2VmaWxlLgorCitGaXggZ2VuZXJhbCBnY2MgLVdhbGwgY29tcGxhaW50cyBhbmQgcmVtb3ZlZCBkZWFkIGNvZGUuCisKK1JlbW92ZSB1c2Ugb2YgTk9BUkdTLCBiZWNhdXNlIHdlIGFzc3VtZSBldmVyeW9uZSBkb2VzIEFOU0kgQyB0aGVzZQorZGF5cy4KKworQWRkZWQgYnVpbGQtcnBtIHNjcmlwdCBmcm9tIHNjdC4KKworTmV3IGZ1bmN0aW9ucyBleHQyZnNfaW1hZ2Vfe2lub2RlLHN1cGVyLGJpdG1hcH1fe3JlYWQsd3JpdGV9IGFkZGVkIAordG8gc3VwcG9ydCBlMmltYWdlLgorCitOZXcgZnVuY3Rpb24gZXh0MmZzX2ZsdXNoX2ljYWNoZSB3aGljaCBtdXN0IGJlIGNhbGxlZCBpZiB0aGUKK2FwcGxpY2F0aW9uIHByb2dyYW0gbW9kaWZpZXMgdGhlIGlub2RlIHRhYmxlIGJsb2NrcyB3aXRob3V0IGdvaW5nCit0aHJvdWdoIGV4dDJmc193cml0ZV9pbm9kZSgpIGludGVyZmFjZS4KKworTmV3IGV4dDJmc19jaGVja19tb3VudF9wb2ludCgpIGZ1bmN0aW9uLCB3aGljaCB3aWxsIHJldHVybiB0aGUgbW91bnQKK3BvaW50IG9mIGEgZGV2aWNlIGlmIG1vdW50ZWQuCisKK1RoZSBpb19jaGFubmVsIGFic3RyYWN0aW9uIG5vdyBoYXMgYW4gb3B0aW9uYWwgaW50ZXJmYWNlLAoraW9fY2hhbm5lbF93cml0ZV9yYW5nZSwgd2hpY2ggYWxsb3dzIHNwZWNpZmljIGJ5dGUgcmFuZ2VzIHRvIGJlCit3cml0dGVuLiAgCisKK1RoZSB1bml4X2lvIElPIGNoYW5uZWwgbm93IHN1cHBvcnRzIHdyaXRlLXRocm91Z2ggY2FjaGluZywgc28gdGhhdAoram91cm5hbCBjcmVhdGlvbiBpcyBtb3JlIGVmZmljaWVudC4KKworQWRkZWQgeDg2IGFzc2VtYmx5IGxhbmd1YWdlIHJvdXRpbmVzIHRvIHN1cHBvcnQgYnl0ZSBzd2FwcGluZywgdG8KK3JlZHVjZSBleGVjdXRhYmxlIHNpemUuCisKK0ZpeGVkIGJ1ZyBpbiB0aGUgdXRpbGl0eSBwcm9ncmFtIHN1YnN0IHNvIHRoYXQgaXQncyBwb3NzaWJsZSB0bworcmVwbGFjZSBhIHN1YnN0aXR1dGlvbiB2YXJpYWJsZSB3aXRoIGEgemVyby1sZW5ndGggc3RyaW5nLgorCitGaXhlZCBudW1iZXJpbmcgZTJmc2NrIHBhc3MxIHByb2JsZW0gbnVtYmVyczsgYW4gZXh0cmEgemVybyBoYWQKK3NsaXBwZWQgaW50byBzb21lIG9mIHRoZSBwcm9ibGVtIG51bWJlci4KKworRTJmc3Byb2dzIDEuMTkgKEp1bHkgMTMsIDIwMDApCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSB0aGUgcmVzaXplMmZzIHByb2dyYW0gc2luY2UgdGhlIHRpbWVvdXQgYmVmb3JlIGl0IGNvdWxkCitiZSByZWxlYXNlZCB1bmRlciB0aGUgR1BMIGhhcyBmaW5hbGx5IGV4cGlyZWQuCisKK0FkZCBleHBlcmltZW50YWwgc3VwcG9ydCBuZWVkZWQgZm9yIHRoZSBleHQyIGNvbXByZXNzaW9uIHBhdGNoZXMuCitUaGlzIHJlcXVpcmVzIGNvbXBpbGluZyBlMmZzcHJvZ3Mgd2l0aCB0aGUgLS1lbmFibGUtY29tcHJlc3Npb24gZmxhZwordG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisKK0FkZGVkIGV4dDMgam91cm5hbGxpbmcgc3VwcG9ydC4gIEUyZnNjayB3aWxsIHJ1biB0aGUgam91cm5hbCAoaWYKK25lY2Vzc2FyeSkgYnkgdGVtcG9yYXJpbHkgbW91bnRpbmcgdGhlIGZpbGVzeXN0ZW0uICAvc2Jpbi9mc2NrLmV4dDMgaXMKK2luc3RhbGxlZCBhcyBhIHN5bWxpbmsgdG8gZTJmc2NrLiAgRnNjayBoYXMgYmVlbiB0YXVnaHQgYWJvdXQgZXh0MywKK2FuZCB0cmVhdHMgaXQgdGhlIHNhbWUgYXMgZXh0MiBpbiB0ZXJtcyBvZiB0aGUgcHJvZ3Jlc3MgYmFyIGxvZ2ljLgorRHVtcGUyZnMgd2lsbCBkaXNwbGF5IHRoZSBzdXBlcmJsb2NrIGpvdXJuYWxpbmcgaW5mb3JtYXRpb24gaWYgdGhlCitmaWxlc3lzdGVtIGhhcyBhIGpvdXJuYWwuICBUaGUgZXh0MiBsaWJyYXJ5IHdpbGwgbm93IHBlcm1pdCBvcGVuaW5nIGFuCitleHQzIGZpbGVzeXN0ZW0gd2l0aCB0aGUgcmVjb3ZlcnkgZmxhZyBzZXQuICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IKK29uLWxpbmUgZHVtcCdzIHRvIHdvcmsgY29ycmVjdGx5LCBidXQgdGhlcmUgbWF5IGJlIGlzc3VlcyB3aXRoIHRoaXMKK3dvcmtpbmcgd2VsbCBzaW5jZSBleHQzIGlzIG11Y2ggbGVzcyBhZ3Jlc3NpdmUgYWJvdXQgc3luY2luZyBibG9ja3MgdG8KK3RoZSBmaWxlc3lzdGVtLCBzaW5jZSB0aGV5J3JlIHNhZmUgb24gdGhlIGpvdXJuYWwuCisKK1R1bmUyZnMgYW5kIGUyZnNjayBoYXZlIGJlZW4gY2hhbmdlZCB0byBhbGxvdyB0aGUgbW91bnRfY291bnQgY2hlY2sgdG8KK2JlIGRpc2FibGVkIGJ5IHNldHRpbmcgbWF4X21vdW50X2NvdW50IHRvIC0xLiAgKFRoaXMgd2FzIGFscmVhZHkKK3N1cHBvcnRlZCBieSB0aGUga2VybmVsLikKKworQ3JlYXRlIGEgc3ltYm9saWMgbGluayBmb3IgZnNjay5leHQzLCBzaW5jZSB0aGUgZTJmc3Byb2dzIHV0aWxpdGllcworYXJlIHVzZWQgZm9yIGV4dDMgYXMgd2VsbC4KKworQWRkZWQgaW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydCBmb3IgZTJmc3Byb2dzOyBtdXN0IGJlIGVuYWJsZWQKK2J5IHBhc3NpbmcgLS1lbmFibGUtbmxzIHRvIGNvbmZpZ3VyZS4KKworQWx3YXlzIHVzZSB0aGUgcHJvdmlkZWQgZXh0MmZzIGhlYWRlciBmaWxlcyB0byBpbnN1bGF0ZSBvdXJzZWx2ZXMgZnJvbQora2VybmVsIHZlcnNpb24gY2hhbmdlcy4gIFdoaWNoIGluY2x1ZGUgZmlsZXMgYXJlIHVzZWQgYnkgZTJmc3Byb2dzCitoYXZlIGFsc28gYmVlbiBjbGVhbmVkIHVwIHRvIGltcHJvdmUgcG9ydGFiaWxpdHkuCisKK0xpbWl0IHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBlMmZzY2sgdXBkYXRlcyB0aGUgcHJvZ3Jlc3MgYmFyIHNvIHRoYXQKK3Blb3BsZSB3aG8gYXJlIGJvb3RpbmcgdXNpbmcgYSA5NjAwIGJhdWQgY29uc29sZSBkb24ndCBnZXQgc3dhbXBwZWQgYnkKK3RvbyBtYW55IHVwZGF0ZXMuCisKK0ltcHJvdmVkIHRoZSBsb29wIGRldGVjdGlvbiBhbGdvcml0aG0gaW4gZTJzY2sncyBwYXNzICMzIHNvIHRoYXQgaXQgaXMKK211Y2gsIG11Y2ggZmFzdGVyIGZvciBsYXJnZSBmaWxlc3lzdGVtcyB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mCitkaXJlY3Rvcmllcy4KKworVGhlIG1lbW9yeSBmb290cHJpbnQgZm9yIGUyZnNjayBpcyBub3cgc2xpZ2h0bHkgc21hbGxlciB0aGFuIGJlZm9yZS4KKworRTJmc2NrIG5vdyBjaGVja3MgaWYgc3BlY2lhbCBkZXZpY2VzIGhhdmUgYSBub24temVybyBzaXplLCBhbmQgb2ZmZXJzCit0byBjbGVhciB0aGUgc2l6ZSBmaWVsZCBpZiBpdCBmaW5kcyBzdWNoIGFuIGlub2RlLiAgCisKK0UyZnNjayBub3cgY2hlY2tzIGlmIHNwZWNpYWwgZGV2aWNlcyBoYXZlIHRoZSBhcHBlbmQtb25seSBmbGFnIHNldCwKK2FuZCBvZmZlcnMgdG8gY2xlYXIgdGhlIGlub2RlLgorCitFMmZzY2sgbm93IHByb3Blcmx5IGhhbmRsZXMgc29tZSAic2hvdWxkIG5ldmVyIGZhaWwiIGNhc2VzIGR1cmluZyBhCitiaXRtYXAgY29weSBpbiBwYXNzNS4KKworRTJmc2NrIG5vdyBwcm9wZXJseSBwcmludHMgY29udHJvbCBjaGFyYWN0ZXJzIGluIGZpbGVuYW1lcyBhcyBeQSAuLiBeWi4KKworRTJmc2NrIG5vdyBjYWxjdWxhdGVzIHRoZSBjb3JyZWN0IGxvY2F0aW9uIG9mIHRoZSBiYWNrdXAgc3VwZXJibG9jayBpbgordGhlIGNhc2Ugb2YgZmlsZXN5c3RlbSBibG9ja3NpemVzID4gMWsuCisKK0ZpeGVkIGEgYnVnIGluIGUyZnNjaydzIGNhbGN1bGF0aW9uIG9mIHRoZSBudW1iZXIgb2YgaW5vZGVzX3Blcl9ibG9jaword2hpY2ggbm9ybWFsbHkgZGlkbid0IGNhdXNlIHByb2JsZW1zIHVuZGVyIG1vc3QgZmlsZXN5c3RlbSBwYXJhbWV0ZXJzLAorYnV0IGNvdWxkIGNhdXNlIGEgdmFsaWQgc3VwZXJibG9jayB0byBiZSByZWplY3RlZCBpbiBleHRyZW1lIGNhc2VzLgorT3RoZXIgY2hlY2tzIGZvciB2YWxpZGF0aW5nIHN1cGVyYmxvY2sgdmFsdWVzIHdlcmUgbWFkZSBtb3JlCitzdHJpbmdlbnQuCisKK0FkZGVkIG5vbi1kZXN0cnVjdGl2ZSB3cml0ZSB0ZXN0aW5nIHRvIHRoZSBiYWRibG9ja3MgcHJvZ3JhbSwgY291cnRlc3kKK29mIERhdmlkIEJlYXR0aWUuICBUaGUgYmFkYmxvY2tzIGFsc28gbm93IGhhcyBhbiBvcHRpb24gdG8gaW5wdXQgdGhlCitjdXJyZW50IHNldCBvZiBiYWQgYmxvY2tzLCBzbyB0aGF0IGtub3duIGJhZCBibG9ja3MgYXJlIHNraXBwZWQgdG8KK3NwZWVkIHVwIHRoZSBiYWRibG9ja3MgdGVzdC4gIFRoZXJlIGlzIGFsc28gYSBwZXJzaXN0ZW50IHJlc2NhbgorZmVhdHVyZSB3aGljaCBjYXVzZXMgYmFkYmxvY2tzIHRvIHJ1biB1bnRpbCBpdCBoYXMgY29tcGxldGVkIHNvbWUKK251bWJlciBvZiBwYXNzZXMgd2l0aG91dCBkaXNjb3ZlcmluZyBhbnkgbmV3IGJhZCBibG9ja3MuCisKK0JhZGJsb2NrcyBub3cgY2hlY2tzIHRvIHNlZSBpZiB0aGUgZGV2aWNlIGlzIG1vdW50ZWQgYW5kIHJlZnVzZXMgdG8gZG8KK3RoZSB0ZXN0cyBpbnZvbHZpbmcgd3JpdGluZyB0byB0aGUgZGV2aWNlIGlmIGl0IGlzIG1vdW50ZWQuICBBbHNvLAorYmFkYmxvY2tzIG5vdyBhbGxvd3MgdGhlIG51bWJlciBvZiBibG9ja3MgdG8gYmUgY2hlY2tlZCB0byBiZQorZGVmYXVsdGVkIHRvIHRoZSBzaXplIG9mIHRoZSBwYXJ0aXRpb24uCisKK0ZpeGVkIGEgYnVnIGluIGZzY2sgd2hpY2ggZGlkbid0IGFsbG93IG5vbi1yb290IHVzZXJzIHRvIGJlIGFibGUgdG8KK2NoZWNrIGZpbGVzeXN0ZW1zIGlmIHRoZXJlIHdlcmUgYW55IExBQkVMPSBvciBVVUlEPSBlbnRyaWVzIGluCisvZXRjL2ZzdGFiLgorCitUaGUgSHVyZCBkb2Vzbid0IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZpbGVzeXN0ZW0gZmVhdHVyZS4gIFRoZSBta2UyZnMKK3Byb2dyYW0gbm93IG1ha2VzIHN1cmUgdGhhdCBmb3IgdGhlIEh1cmQsIHRoZSBmaWxlc3R5cGUgZmVhdHVyZSBpcwordHVybmVkIG9mZi4gIEUyZnNjayB3aWxsIGNoZWNrIHRvIHNlZSBpZiB0aGUgZmlsZXR5cGUgZmVhdHVyZSBpcwordHVybmVkIG9uIGZvciBIdXJkIGZpbGVzeXN0ZW1zLCBhbmQgb2ZmZXIgdG8gdHVybiBvZmYgdGhlIGZlYXR1cmUuCisKK01rZTJmcyBub3cgaGFzIGEgc2FmZXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgbnVtYmVyIG9mIGJsb2NrcyBkbyBub3QKK2V4Y2VlZCAzMiBiaXRzIGV2ZW4gb24gYSA2NCBiaXQgcGxhdGZvcm0uCisKK1JlYWxseSBmaXhlZCBhIGJ1ZyBpbiBmc2NrIHRvIGFsbG93ICJmc2NrIC1BcyIgdG8gcnVuIGludGVyYWN0aXZlCitmc2NrJ3MuICAoRm9yIHRob3NlIHBlb3BsZSB3aG8gbGlrZSB0byBkbyBpbnRlcmFjdGl2ZSBmc2NrJ3MgaW4gdGhlCisvZXRjL3JjIHNjcmlwdHMhPyEpCisKK0RlYnVnZnMgaGFzIGEgZmV3IG5ldyBmZWF0dXJlczogdGhlIHJkdW1wIGNvbW1hbmQsIHdoaWNoIHdpbGwgZG8gYQorcmVjdXJzaXZlIGR1bXAgb2YgYSBkaXJlY3RvcnkgYW5kIGFsbCBvZiBpdHMgY29udGVudHMsIGFuZCB0aGUgbGNkCitjb21tYW5kIHdoaWNoIGRvZXMgYSBsb2NhbCBjaGRpciAobXVjaCBsaWtlIHRoZSBmdHAgY29tbWFuZCBvZiB0aGUKK3NhbWUgbmFtZSkuICBJbiBhZGRpdGlvbiwgdGhlIGRlYnVnZnMgcHJvZ3JhbSBhbmQgdGhlIG9wZW5fZmlsZXN5c3RlbQorY29tbWFuZCBub3cgdGFrZXMgdGhyZWUgbmV3IG9wdGlvbnM6IC1iIGFuZCAtcywgd2hpY2ggYWxsb3dzIHRoZQorYmxvY2tzaXplIGFuZCBzdXBlcmJsb2NrIGxvY2F0aW9uIHRvIGJlIHNwZWNpZmllZCwgYW5kIHRoZSAtYyBvcHRpb24KK3doaWNoIGlzIHVzZWQgaW4gY2F0YXN0cm9waGljIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGJsb2NrIGdyb3VwCitkZXNjcmlwdG9ycyBhcmUgY29ycnVwdC4gIElmIHRoZSAtYyBvcHRpb24gaXMgc3BlY2lmaWVkLCBkZWJ1Z2ZzIHdpbGwKK3NraXAgdHJ5aW5nIHRvIHJlYWQgaW4gdGhlIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzLgorCitEZWJ1ZnMncyBsc2RlbCBjb21tYW5kIHdhcyBmaXhlZCB0byBoYW5kbGUgYmFkIGJsb2NrcyBpbiB0aGUgaW5vZGUKK3RhYmxlLgorCitBIFkySyBidWcgaW4gZGVidWdmcydzICJscyAtbCIgaGFuZGxpbmcgd2FzIGZpeGVkIGJ5IHN3aXRjaGluZyB0byB1c2UKKzQgZGlnaXQgeWVhcnMuCisKK0dlbmVyYWwgaW1wcm92ZW1lbnRzIGluIGVycm9yIG1lc3NhZ2VzCisKKyAgLSBNa2UyZnMgcHJpbnRzIGEgc2FuZSBlcnJvciBtZXNzYWdlIGlmIHRoZSBwYXJ0aXRpb24gc2l6ZSBpcyB6ZXJvCisJKHVzdWFsbHkgYmVjYXVzZSB0aGUgcGFydGl0aW9uIHRhYmxlIHdhc24ndCByZXJlYWQgYnkgdGhlCisJa2VybmVsIGR1ZSB0byB0aGUgcGFydGl0aW9uIGJlaW5nIGJ1c3kpLCBpbnN0ZWFkIG9mICJpbnZhbGlkCisJYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSB3aGlsZSBpbml0aWFsaXppbmcgc3VwZXJibG9jayIuCisKKyAgLSBGc2NrIG5vdyBwcmludHMgbW9yZSBzZWxmLWV4cGxhbmF0b3J5IG1lc3NhZ2UgaWYgYW4gaW52YWxpZCBVVUlEPQorCW9yIExBQkVMPSBzcGVjaWZpY2F0aW9uIGlzIHBhc3NlZCB0byBpdC4KKworVVVJRCBsaWJyYXJ5IGNoYW5nZWQgdG8gdXNlIHRoZSBMR1BMLgorCitGaXhlZCBhIGJ1ZyBpbiB0aGUgVVVJRCBsaWJyYXJ5IHdoZXJlIHZlcnkgcmFwaWQgY2FsbHMgdG8gdGhlCit0aW1lLWJhc2VkIFVVSUQgZ2VuZXJhdG9yIGNvdWxkIGNhdXNlIGR1cGxpY2F0ZSBVVUlEJ3MgdG8gYmUgcmV0dXJuZWQuCitUaGlzIHdhcyBub3QgYSBwcm9ibGVtIGZvciBlMmZzcHJvZ3MsIGJ1dCBpdCBjb3VsZCBiZSBhIHByb2JsZW0gZm9yCitvdGhlciB1c2VycyBvZiB0aGUgbGlicmFyeS4KKworTWFrZSB0aGUgVVVJRCBsaWJyYXJ5IG1vcmUgcm9idXN0IGluIHRoZSBmYWNlIG9mIG1pc3Npbmcgb3IgYW4KK2ltcHJvcGVyIC9kZXYvdXJhbmRvbSBvciAvZGV2L3JhbmRvbSBmaWxlcy4KKworQWRkZWQgc29tZSByYW5kb20gcG9ydGFiaWxpdHkgZml4ZXMgZm9yIFNvbGFyaXMuCisKK1NvbWUgbWlub3IgbWFuIHBhZ2UgdXBkYXRlcy4KKworRml4ZWQgYSBtZW1vcnkgbGVhayBpbiB0aGUgc3MgbGlicmFyeS4KKworCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlIG5vdyB0cnkgdG8gdXNlIGxzZWVrNjQgYW5kIG9wZW42NCBmcm9tIHRoZSBMRlMgaWYgcG9zc2libGUuCisKK1RoZSAzcmQgcGFyYW1ldGVyIGluIGUycCdzIHByaW50X2ZsYWdzIGlzIG5vdyBhIGZsYWdzIHdvcmQsIGluc3RlYWQgb2YKK2EgYm9vbGVhbiBvcHRpb24uCisKK1RoZSBtYXJrIGFuZCB1bm1hcmsgYml0bWFwIGZ1bmN0aW9ucyBub3cgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZSBvZgordGhlIGJpdCB0aGF0IHdhcyBiZWluZyBjaGFuZ2VkLCB3aGljaCBpcyB1c2VmdWwgZm9yIHNvbWUgc3BlZWQKK29wdGltaXphdGlvbnMuCisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGhhdmUgYmVlbiBhZGRlZCB0byBlbmhhbmNlIHRoZSBiYWRibG9ja3MgbGlzdAoraGFuZGxpbmcgaW4gbGliZXh0MmZzOiBleHQyZnNfd3JpdGVfYmJfRklMRSwgZXh0MmZzX3JlYWRfYmJfRklMRTIsIGFuZAorZXh0MmZzX2JhZGJsb2Nrc19lcXVhbC4KKworVGhlIGV4dDIgaGVhZGVyIGZpbGVzIG5vdyBoYXZlIHRoZSBsYXRlc3Qgam91cm5hbGxpbmcgZmllbGRzIHRvIHRoZQorc3VwZXJibG9jay4KKworVGhlIGV4dDJmc19ta2RpciBmdW5jdGlvbiBpbiBsaWJleHQyZnMgbm93IHByb3Blcmx5IGJhY2tzIG91dCBvZiBlcnJvcgorY29uZGl0aW9ucyByb2J1c3RseS4KKworQ2xlYW5lZCB1cCBtYWtlZmlsZXM6CisgIC0gdG8gY2xlYW5seSAgY29tcGlsZSB3aXRoIHRoZSAtaiBmbGFnLgorICAtIHNvIGRpc3RjbGVhbiByZW1vdmVzIGFsbCBnZW5lcmF0ZWQgZmlsZXMuCisgIC0gc28gaW4gY2FzZSBvZiBhbiBlcnJvciB3aGlsZSBpbnN0YWxsaW5nIGhlYWRlciBmaWxlcywgdGhlIG1ha2UgYWJvcnRzLgorCitGaXggdGVzdF9zY3JpcHQgc28gdGhhdCBpdCB3b3JrcyBjb3JyZWN0bHkgd2hlbiBjb21waWxpbmcgaW4gdGhlCitzb3VyY2UgZGlyZWN0b3J5LgorCitUaGUgcmFuZG9tIFVVSUQgZ2VuZXJhdGlvbiByb3V0aW5lIGhhcyBiZWVuIG1hZGUgc2xpZ2h0bHkgYmV0dGVyIGluCit0aGUgY2FzZSB3aGVyZSAvZGV2L3JhbmRvbSBkb2Vzbid0IGV4aXN0LiAgKFVzZSBvZiByYW5kb21seS1iYXNlZCBVVUlECitpcyBzdGlsbCBub3QgcmVjb21tZW5kZWQgaWYgL2Rldi9yYW5kb20gZG9lc24ndCBleGlzdCwgaG93ZXZlcjsgaXQncworYmV0dGVyIHRvIHVzZSB0aGUgdGltZS9ldGhlcm5ldCBNQUMgYWRkcmVzcyBVVUlEIGluIHRoaXMgY2FzZS4pCisKK0NsZWFuIHVwIHRoZSBidWlsZCBwcm9jZXNzIHNvIGl0J3MgbW9yZSBmcmllbmRseSBpbiBjYXNlIG9mIG1pc3NpbmcKK2RpcmVjdG9yaWVzLgorCitUaGUgZXh0MmZzIGhlYWRlciBmaWxlIGNhbiBub3cgYmUgI2luY2x1ZGUnZCBpbnRvIEMrKyBwcm9ncmFtcy4KKworVGhlIGUycC5oIGhlYWRlciBmaWxlIGlzIG5vdyBpbnN0YWxsZWQuCisKK0FkZGVkIHdvcmthcm91bmQgdG8gYSBnYXdrIDMuMC41IGJ1ZyBpbiBsaWIvc3MvbWtfY21kcy4KKworCisKK0UyZnNwcm9ncyAxLjE4IChOb3ZlbWJlciAxMCwgMTk5OSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IGEgY29yZSBkdW1waW5nIGJ1ZyBpbiBlMmZzY2sgaWYgYW4gaW1hZ2ljIGlub2RlIGlzIHByZXNlbnQgb3IKKyhtb3JlIHJhcmVseSkgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgYmFkbHkgY29ycnVwdGVkIGVub3VnaCB0aGF0IGUyZnNjaworaGFzIHRvIHJlc3RhcnQgcGFzcyAxIHByb2Nlc3NpbmcuICBFMmZzY2sgbm93IGNsb3NlcyB0aGUgZmlsZXN5c3RlbQorYmVmb3JlIGZyZWVpbmcgYSBsYXJnZSBudW1iZXIgb2YgaXRzIGRhdGEgc3RydWN0dXJlcywgc28gaW4gdGhlIGNhc2UKK29mIGZ1dHVyZSBtZW1vcnkgZmF1bHRzLCBhdCBsZWFzdCB0aGUgZml4ZWQgZmlsZXN5c3RlbSB3aWxsIGJlIGZ1bGx5Cit3cml0dGVuIG91dC4KKworSWYgYSBmaWxlc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBpbWFnaWMgaW5vZGVzLCBhbmQgZTJmc2NrIGRpc2NvdmVycyBhbgoraW1hZ2ljIGlub2RlLCBpdCB3aWxsIG9mZmVyIHRvIGNsZWFyIHRoZSBpbWFnaWMgZmxhZy4KKworRTJmc2NrIHdpbGwgbm93IG9mZmVyIHRvIGNsZWFyIHRoZSBpbW11dGFibGUgZmxhZyBvbiBzcGVjaWFsIGZpbGVzCisoZGV2aWNlL3NvY2tldC9maWZvcykgd2hlbiBydW5uaW5nIGl0IGluIG5vbi1wcmVlbiBtb2RlLgorCitFMmZzY2sgd2lsbCBub3cgc2V0IHRoZSBmaWxldHlwZSB3aGVuIGNyZWF0aW5nIC9sb3N0K2ZvdW5kLCBhbmQgd2hlbgorY29ubmVjdGVkIG9ycGhhbmVkIGlub2RlcyB0byAvbG9zdCtmb3VuZC4KKworRGVidWdmcydzIG5jaGVjayBhbmQgaWNoZWNrIGNvbW1hbmRzIG5vdyBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRoZXJlCithcmUgYmFkIGJsb2NrcyBpbiB0aGUgaW5vZGUgdGFibGUgd2l0aG91dCBib21iaW5nIG91dC4KKworVGhlIGJhZGJsb2NrcyBsaXN0IHByb2Nlc3NpbmcgY29kZSBoYXMgYmVlbiBtYWRlIG1vcmUgZWZmaWNpZW50bHkgZm9yCithcHBlbmRpbmcgYSBsYXJnZSBudW1iZXIgb2YgKG9yZGVyZWQpIGJhZGJsb2NrcyB0byB0aGUgYmFkYmxvY2tzIGxpc3QuCisKK1NvbWUgbWlub3IgbWFuIHBhZ2UgdXBkYXRlcy4KKworRnNjayBub3cgYWxsb3dzIGludGVyYWN0aXZlIGUyZnNjaydzIHdoZW4gdXNpbmcgZnNjayAtQXMgKG5vdCBhIGNvbW1vbgorbW9kZSwgYnV0IHNvbWUgcGVvcGxlIGxpa2UgdG8gZG8gdGhpcyBpbiBib290IHNjcmlwdHMgZm9yIHNpbGx5IHJlYXNvbnMpLgorCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBpbnRlcm5hbCBlMmZzY2sgcHJvYmxlbSBjb2RlIGZvciBQUl8yX1NQTElUX0RPVCB3YXMgZml4ZWQgdG8gbWVldAord2l0aCB0aGUgcHJvYmxlbSBjb2RlIGNvbnZlbnRpb24uCisKK1RoZSBiYWRibG9ja3MgbGlzdCByZWdyZXNzaW9uIHRlc3QgcHJvZ3JhbSBoYXMgYmVlbiB1cGRhdGVkIHRvIHdvcmsKK3dpdGggcHJldmlvdXNseSBtYWRlIEFQSSBuYW1lIGNoYW5nZXMuCisKK1RoZSBleHQyZnNfZnJlZSgpIGNvbW1hbmQgbm93IHVzZXMgdGhlIG5ldyBiYWRibG9ja3MgQVBJIHRvIGF2b2lkCit1c2luZyB0aGUgY29tcGF0aWJpbGl0eSBsYXllci4KKworQWRkZWQgbmV3IHJlZ3Jlc3Npb24gdGVzdCBjYXNlczsgdGhlIHJ1bl9lMmZzY2sgdGVzdCBzY3JpcHQgbm93CitzdXBwb3J0cyB0aGUgYWJpbGl0eSBmb3IgYSB0ZXN0IGNhc2UgdG8gcnVuIGEgcHJlcHJhdG9yeSBjb21tYW5kCitiZWZvcmUgcnVubmluZyBlMmZzY2suCisKK0UyZnNwcm9ncyAxLjE3IChPY3RvYmVyIDI2LCAxOTk5KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVkIG5hc3R5IHR5cG8gaW4gZnNjayB3aGljaCBjYXVzZWQgcGFyYWxsZWxpemVkIGZzY2sncyB0byBnbyBpbnRvIGFuCitpbmZpbml0ZSBsb29wLgorCitGaXhlZCBhIGJ1ZyBpbiBmc2NrIHdoZXJlIGl0IHVzZWQgc3RybmNtcCB0byBjb21wYXJlIGEgYmluYXJ5IFVVSUQsCit0aHVzIHBvdGVudGlhbGx5IGNhdXNpbmcgcHJvYmxlbXMgaWYgYSBiaW5hcnkgVVVJRCBjb250YWluZWQgYSBOVUxMCitjaGFyYWN0ZXIuCisKK0UyZnNjayBub3cgdXNlcyBzdHJpY3RlciBjaGVja3MgZm9yIGRpcmVjdG9yeSBlbnRyaWVzIGluIHBhc3MgMjoKK3plcm8tbGVuZ3RoIGZpbGVuYW1lcyBhcmUgbm90IGFsbG93ZWQ7IG5laXRoZXIgYXJlIDggYnl0ZSBsb25nCitkaXJlY3RvcnkgZW50cmllcy4KKworVGhlIGRlYnVnZnMgImRpcnR5IiBjb21tYW5kIG5vdyBjbGVhcnMgdGhlIGZpbGVzeXN0ZW0gdmFsaWQgYml0LgorKFByZXZpb3VzbHkgdGhpcyBqdXN0IHNldCB0aGUgZGlydHktYXMtaW4tbmVlZHMtd3JpdGluZy1vdXQtdG8tZGlzaworYml0IGluIHRoZSBpbi1jb3JlIHN1cGVyYmxvY2sgaW1hZ2UuICBUaGUgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgbW9yZQord2hhdCB0aGUgdXNlciBleHBlY3RzLCBhbmQgaXMgbW9yZSB1c2VmdWwuKQorCitBZGRlZCBhIGRlYnVnZ2luZyBob29rIHRvIHRlc3QgcGFyYWxsZWwgZnNjazsgaWYgdGhlIGVudmlyb25tZW50Cit2YXJpYWJsZSBGU0NLX0ZPUkNFX0FMTF9QQVJBTExFTCwgdGhlbiBmaWxlc3lzdGVtcyBvbiB0aGUgc2FtZSBkcml2ZQord2lsbCBiZSBjaGVja2VkIGluIHBhcmFsbGVsIHdoZW4gdGhleSBub3JtYWxseSB3b3VsZCBub3QgYmUuCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworRml4ZWQgc29tZSAjaWZkZWYncyBmb3IgY29tcGlsYXRpb24gdW5kZXIgdGhlIEh1cmQgT1MuCisKK0ZpeGVkIG1pbm9yIFcySyBjb21wYXRpYmlsaXR5IHByb2JsZW1zLgorCitGaXhlZCBzb21lIG1pc2NlbGxhbmVvdXMgR0NDIHdhcm5pbmdzLgorCisKK0UyZnNwcm9ncyAxLjE2IChPY3RvYmVyIDIyLCAxOTk5KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVkIGEgcmFjZSBjb25kaXRpb24gYnVnIGluIGZzY2s7IHdoZW4gcHJpbnRpbmcgYSBwcm9ncmVzcyBiYXIsIGlmCitjaGVja2luZyBtdWx0aXBsZSBmaWxlc3lzdGVtcyBpbiBwYXJhbGxlbCwgaXQgd2FzIHBvc3NpYmxlIGZvciBmc2NrIHRvCitzZW5kIGUyZnNjayBhIFNJR1VTUjEgc2lnbmFsIGJlZm9yZSBlMmZzY2sgaGFkIGluc3RhbGxlZCBpdHMgc2lnbmFsCitoYW5kbGVyLCB3aGljaCB3b3VsZCBjYXVzZSBpdCB0byB0ZXJtaW5hdGUgd2l0aCBhIHNpZ25hbCAxMC4KKworRTJmc2NrIG5vdyBwcm9wZXJseSBoYW5kbGVzIGZpbGVzeXN0ZW1zIHRoYXQgaGF2ZSB0aGUKK0lOQ09NUEFUX0ZJTEVUWVBFIGZlYXR1cmUgdHVybmVkIG9uLiAgSXQgY2FuIGJlIHVzZWQgdG8gY29udmVydCBhCitmaWxlc3lzdGVtIGludG8gdXNpbmcgb3Igbm90IHVzaW5nIEZJTEVUWVBFIGZlYXR1cmUuCisKK0UyZnNjayBub3cgcHJvcGVybHkgaGFuZGxlcyBmaWxlc3lzdGVtcyB0aGF0IGhhdmUgdGhlIElNQUdJQyBmZWF0dXJlCit0dXJuZWQgb24gKHRoaXMgaXMgdXNlZCBvbiBMaW51eCBBRlMgc2VydmVycykuCisKK1RoZSBta2UyZnMgcHJvZ3JhbSBub3cgY3JlYXRlcyBmaWxlc3lzdGVtcyB0aGF0IGhhdmUgdGhlIGZpbGV0eXBlIGFuZAorc3BhcnNlX3N1cGVyYmxvY2sgZmVhdHVyZXMgZW5hYmxlZCBieSBkZWZhdWx0LCB1bmxlc3MgaXQgaXMgcnVuIG9uIGEKK3ByZS0yLjIga2VybmVsLiAgVGhlc2UgZmVhdHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgYSBwcmUtMi4yIGtlcm5lbCwKK3NvIHRoZXJlIGlzIG5vdyBhIG5ldyBmbGFnIC1PIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHdpdGgKK3doaWNoIGZlYXR1cmVzIHNoZSB3b3VsZCBsaWtlIHRvIGNyZWF0ZSB0aGUgZmlsZXN5c3RlbTsgIm1rZTJmcyAtTworbm9uZSIgd2lsbCBjcmVhdGUgYSBmaWxlc3lzdHNlbSBjb21wYXRpYmxlIHdpdGggMi4wIGtlcm5lbHMuCisKK1RoZSB0dW5lMmZzIHByb2dyYW0gbm93IGhhcyBhIC1PIG9wdGlvbiB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gc2V0CithbmQgcmVzZXQgInNhZmUiIGZpbGVzeXN0ZW0gZmVhdHVyZXMuICBDdXJyZW50bHksIHRoZSBvbmx5IG9uZXMgd2hpY2gKK2FsbG93cyB0byBiZSBtb2RpZmllZCBhcmUgdGhlIGZpbGV0eXBlIGFuZCBzcGFyc2Vfc3VwZXJibG9jayBmZWF0dXJlcy4KK05vdGUgc2V0dGluZyBvciBjbGVhcmluZyBlaXRoZXIgZmVhdHVyZSB3aWxsIHJlcXVpcmUgcnVubmluZyBlMmZzY2sgb24KK3RoZSBmaWxlc3lzdGVtIGFmdGVyd2FyZHMuICAobi5iLiBDbGVhcmluZyB0aGUgc3BhcnNlX3N1cGVyYmxvY2sgZmVhdHVyZQorcmVxdWlyZXMgdGhhdCB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBvbiB0aGUgZmlsZXN5c3RlbSBmb3IgdGhlCitleHRyYSBzdXBlcmJsb2NrcyB3aGljaCB3aWxsIGJlIGNyZWF0ZWQgYnkgZTJmc2NrLikKKworRGVidWdmcyBjYW4gbm93IHNldCBhbmQgcHJpbnQgZmlsZXN5c3RlbSBmZWF0dXJlcyBpbiB0aGUgc3VwZXJibG9jawordXNpbmcgdGhlICJmZWF0dXJlcyIgY29tbWFuZC4gIER1bXBlMmZzIHdpbGwgcHJpbnQgb3V0IHRoZSBjb21wbGV0ZQorc2V0IG9mIGZlYXR1cmVzIHdoZW4gbGlzdGluZyB0aGUgc3VwZXJibG9jay4KKworRHVtcGUyZnMgaGFzIG5ldyBvcHRpb25zIC1mIChmb3JjZSkgYW5kIC1oIChoZWFkZXItb25seSkuCisKK0ZpeGVkIGEgYnVnIGluIGUyZnNjayB3aGljaCBjb3VsZCBjYXVzZSB0aGUgUFJPR1JBTU1JTkcgRVJST1IvYm9uZWhlYWQKK21lc3NhZ2UgdG8gY29tZSB1cC4gIFRoaXMgY291bGQgaGFwcGVuIHdoZW4gZGVjcmVtZW50aW5nIG9yCitpbmNyZW1lbnRpbmcgYSBsaW5rIGNvdW50IGNvdWxkIHJlc3VsdCBpbiBhbiBvdmVyZmxvdy4KKworRml4ZWQgYSBidWcgaW4gZTJmc2NrIHdoZXJlIHRoZSBibG9jayBjb3VudCBvbiB0aGUgbG9zdCtmb3VuZAorZGlyZWN0b3J5IHdvdWxkIG5vdCBiZSBwcm9wZXJseSBpbmNyZW1lbnRlZCB3aGVuIHRoZSBkaXJlY3Rvcnkgd2FzCitleHBhbmRlZCB0byB0aGUgcG9pbnQgd2hlcmUgYW4gaW5kaXJlY3QgYmxvY2sgbmVlZGVkIHRvIGJlIGFsbG9jYXRlZC4KKworRTJmc2NrIG5vdyBtYWtlcyBzb21lIGFkZGl0aW9uYWwgc2FuaXR5IGNoZWNrcyBvbiB0aGUgc3VwZXJibG9jayB0bworYXZvaWQgY3Jhc2hpbmcgb3IgZ2l2aW5nIGEgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IgaWYgc29tZSBvZiB0aGUKK3ZhbHVlcyBpbiB0aGUgc3VwZXJibG9jayBhcmUgdW5yZXNvbmFibGUgKGJ1dCB0aGUgc3VwZXJibG9jayBvdGhlcndpc2UKK2xvb2tzIHZhbGlkKS4KKworRml4ZWQgYSBidWcgaW4gZTJmc2NrIHdoZXJlIGEgdmVyeSBiYWRseSBjb3JydXB0ZWQgZmlsZXN5c3RlbSBtaWdodAorcmVxdWlyZSB0d28gcGFzc2VzIHRvIGNvbXBsZXRlbHkgZml4IHRoZSBmaWxlc3lzdGVtLiAgVGhpcyBoYXBwZW5lZCBpZgorYW4gaW5vZGUgY2xhaW1lZCBibG9ja3MgdGhhdCB3YXMgcGFydCBvZiB0aGUgZmlsZXN5c3RlbSBtZXRhZGF0YQorKHR5cGljYWxseSwgd2hlbiBnYXJiYWdlIHdhcyB3cml0dGVuIGludG8gYW4gaW5vZGUgdGFibGUgb3IgaW5kaXJlY3QKK2Jsb2NrLCBzaW5jZSB0aGlzIGtpbmQgb2YgZmlsZXN5c3RlbSBjb3JydXB0aW9uIG5vcm1hbGx5IGRvZXNuJ3QKK2hhcHBlbiBvdGhlcndpc2UpLgorCitPbiB0aGUgQWxwaGEsIGdsaWJjIGRlY2xhcmVzIHN0X2ZsYWdzIGFsdGhvdWdoIGl0IGlzbid0IGFjdHVhbGx5IHVzZWQ7Cit0aGUgY29uZmlndXJlIHNjcmlwdCB3YXMgaW1wcm92ZWQgdG8gZGV0ZWN0IHRoaXMgY2FzZSBzbyB0aGF0CitlMmZzcHJvZ3MgY2FuIGF2b2lkIHVzaW5nIHRoZSBub24tZnVuY3Rpb25hbCBzdGF0IGZpZWxkLgorCitUaGUgbWFudWFsIHBhZ2VzIHdlcmUgdXBkYXRlZCB0byB1c2UgYSBtb3JlIGNvbnNpc3RlbnQgZm9ybWF0dGluZworc3R5bGUgY29uc2lzdGVudCB3aXRoIHN0YW5kYXJkIFVuaXggbWFuIHBhZ2VzLiAgTWtlMmZzJ3MgbWFuIHBhZ2UKK2FkZGVkIGRvY3VtZW50YXRpb24gZm9yIGEgZmV3IHByZXZpb3VzbHkgdW5kb2N1bWVudGVkIG9wdGlvbnMuCisKK0ZpeGVkIG1pbm9yIGRpc3BsYXkgYnVncyBpbiB0dW5lMmZzIGFuZCBta2UyZnMuCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW1wcm92ZWQgcG9ydGFiaWxpdHkgb2YgZTJmc3Byb2dzIHRvIG5vbi1Vbml4IHN5c3RlbXMgKGluIHBhcnRpY3VsYXIsIE5UKS4KKworQWRkZWQgZmVhdHVyZXMgdG8gcGFyc2UgYW5kIHByaW50IGZlYXR1cmUgc3RyaW5ncyBpbnRvIHRoZSBlMnAgbGlicmFyeS4gIAorKGUycF9mZWF0dXJlMnN0cmluZywgZTJwX3N0cmluZzJmZWF0dXJlLCBlMnBfZWRpdF9mZWF0dXJlKS4KKworZXh0MmZzX21rZGlyKCkgYW5kIGV4dDJmc19uZXdfZGlyX2Jsb2NrKCkgbm93IGNyZWF0ZXMgZGlyZWN0b3JpZXMKK3dob3NlIGRpcmVjdG9yeSBlbnRyaWVzIGNvbnRhaW4gcHJvcGVyIGZpbGV0eXBlIGluZm9ybWF0aW9uIGlmIHRoZQorZmlsZXN5c3RlbSBzdXBwb3J0cyBpdC4KKworZXh0MmZzX2xpbmsoKSBub3cgdXNlcyB0aGUgbG93IDMgYml0cyBvZiBpdHMgZmxhZ3MgcGFyYW1ldGVyIHRvIHBhc3MKK3RoZSBkaXJlY3RvcnkgZW50cnkgZmlsZXR5cGUgaW5mb3JtYXRpb24uICBUaGlzIGlzIHVzZWQgdG8gc2V0IHRoZQorZGlyZWN0b3J5IGVudHJ5IGZpbGV0eXBlIGluZm9ybWF0aW9uIGlmIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIGl0LgorCitGaXhlZCBhIGJ1ZyBpbiBleHQyZnNfZXhwYW5kX2RpcigpIHdoZXJlIHRoZSBibG9jayBjb3VudCBpbiBhCitkaXJlY3RvcnkncyBpbm9kZSB3b3VsZCBub3QgYmUgcHJvcGVybHkgaW5jcmVtZW50ZWQgd2hlbiB0aGUgZGlyZWN0b3J5Cit3YXMgZXhwYW5kZWQgdG8gdGhlIHBvaW50IHdoZXJlIGFuIGluZGlyZWN0IGJsb2NrIG5lZWRlZCB0byBiZQorYWxsb2NhdGVkLgorCisKK0UyZnNwcm9ncyAxLjE1IChKdWx5IDE4LCAxOTk5KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FkZCBjb25maWd1cmF0aW9uIGNoZWNrcyBzbyB0aGF0IGUyZnNwcm9ncyB3aWxsIGNvbXBpbGUgY2xlYW5seSBvbgorTGludXggMi4zIGtlcm5lbHMgdGhhdCBoYXZlIHJlbmFtZWQgaV92ZXJzaW9uIHRvIGlfZ2VuZXJhdGlvbi4KKworRTJmc2NrIG5vdyBwcmludHMgYSBwcm9ncmVzcy9jb21wbGV0aW9uIGJhciAoYW5kIG5vdCBqdXN0IGEgc2ltcGxlCitzcGlubmVyKSBpZiB0aGUgLUMwIG9wdGlvbiBpcyByZXF1ZXN0ZWQgb3IgaWYgaXQgcmVjZWl2ZXMgYSBTSUdVU1IxCitzaWduYWwuICBGc2NrIHdpbGwgYXV0b21hdGljYWxseSBtYW5hZ2UgdGhlIChwb3RlbnRpYWxseSBtdWxpcGxlKQorZTJmc2NrIHByb2Nlc3NlcyB0byBwcmludCBjb21wbGV0aW9uIGJhcnMgaWYgaXQgaXMgZ2l2ZW4gYSAtQyBvcHRpb24sCit3aXRoIHRoZSByaWdodCB0aGluZyBoYXBwZW5pbmcgaWYgbXVsdGlwbGUgZmlsZXN5c3RlbXMgYXJlIGJlaW5nCitjaGVja2VkIGluIHBhcmFsbGVsLgorCitNa2UyZnMgbm93IGhhcyBiZXR0ZXIgYXV0b21hdGljIGh1ZXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlc3lzdGVtCitwYXJhbWV0ZXJzIHRvIGJlIHVzZWQgZm9yIGEgcGFydGljdWxhciBmaWxlc3lzdGVtLiAgQWRkZWQgYSBuZXcgb3B0aW9uCistVCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSBob3cgdGhlIGZpbGVzeXN0ZW0gaXMgdG8gYmUgdXNlZCwKK3doaWNoIGhlbHBzIG1rZTJmcyBkbyBhIGJldHRlciBqb2Igc2VsZWN0aW5nIHRoZSBmaWxlc3lzdGVtIHBhcmFtZXRlcnMuCisKK01rZTJmcyBub3cgY3JlYXRlcyByZXZpc2lvbiAxIGZpbGVzeXN0ZW1zIGJ5IGRlZmF1bHQsIGFuZCB3aXRoIHRoZQorc3BhcnNlIHN1cGVyYmxvY2sgZmVhdHVyZSBlbmFibGVkLiAgVGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZlYXR1cmUgaXMKK25vdCB1bmRlcnN0b29kIGJ5IExpbnV4IDIuMCBrZXJuZWxzLCBzbyB0aGV5IHdpbGwgb25seSBhbGxvdyByZWFkLW9ubHkKK21vdW50cyBvZiBmaWxlc3lzdGVtcyB3aXRoIHRoaXMgc3BhcnNlIHN1cGVyYmxvY2tzLgorCitGaXggYnVnIHdoZXJlIGlmIC9kZXYvbnVsbCBjb3VsZG4ndCBiZSBvcGVuZWQgKHNob3VsZCBuZXZlciBoYXBwZW4pLAorZTJmc2NrIHdvdWxkIGhhbmcgaW4gYSB0aWdodCBsb29wLgorCitNYWtlIGUyZnNjayBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgL2xvc3QrZm91bmQgaXNuJ3QgYSBkaXJlY3RvcnkuCisKK0UyZnNjayBub3cgdXNlcyBtYWxsaW5mbyBpZiBpdCBleGlzdHMgdG8gZ2V0IGFjY3VyYXRlIHN0YXRpc3RpY3MgYWJvdXQKK2l0cyBtZW1vcnkgdXNhZ2UuCisKK0ZpeCBidWcgaW4gZTJmc2NrIHdoZXJlIGl0IHdvdWxkbid0IGNoZWNrIHRvIHNlZSBpZiBhIGRpc2Nvbm5lY3RlZAoraW5vZGUgaGFkIGFueSBwcm9ibGVtcyBiZWZvcmUgY29ubmVjdGluZyBpdCB0byAvbG9zdCtmb3VuZC4KKworQWRkIGNoZWNrIHRvIGUyZnNjayBzbyBpdCBtYWtlcyBzdXJlIHRoYXQgdG90YWwgbnVtYmVyIG9mIGlub2RlcyBpbgordGhlIGZpbGVzeXN0ZW0gaXMgYSBzYW5lIG51bWJlci4KKworRml4IGZlbmNlcG9zdCBlcnJvciB3aGVuIGNsZWFyaW5nIGFuIHRoZSBlbmQgb2YgdGhlIGJsb2NrIGJpdG1hcCB3aGljaAorY2F1c2VkIHRoZSBsYXN0IGJsb2NrIGluIHRoZSBiaXRtYXAgbm90IHRvIGdldCBjbGVhcmVkLgorCitDbGVhbmVkIHVwIGEgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIGUyZnNjazoKKwkqIFRoZSBtZXNzYWdlICJHcm91cCdzICMncyBjb3B5IG9mIHRoZSBncm91cCBkZXNjcmlwdG9yLi4uIgorCQl3YXMgZml4ZWQgc28gdGhhdCB0aGUgY29ycmVjdCBudW1iZXIgd291bGQgYmUgZGlzcGxheWVkLgorCSogQWRkZWQgbWlzc2luZyBzcGFjZSBpbiB0aGUgImRpc2sgd3JpdGUtcHJvdGVjdGVkIiBlcnJvciBtZXNzc2FnZQorCSogQ2xlYW5lZCB1cCB0aGUgZXJyb3IgbWVzc2FnZSBwcmludGVkIHdoZW4gYSBub24taW50ZXJhY3RpdmUKKwkJZTJmc2NrIG5lZWRzIHRvIGFib3J0IGEgY2hlY2sgYmVjYXVzZSB0aGUgZmlsZXN5c3RlbQorCQlhcHBlYXJzIHRvIGJlIG1vdW50ZWQuCisKK0FkZGVkIGEgbmV3IGNvbW1hbmQtbGluZSB1dGlsaXR5LCB1dWlkZ2VuLCB3aGljaCB3aWxsIGNyZWF0ZSBhbmQgcHJpbnQKK2EgVVVJRC4KKworTWFrZSBkZWJ1Z2ZzJ3MgaWNoZWNrIGNvbW1hbmQgbW9yZSByb2J1c3QgYnkgY2hlY2tpbmcgdG8gbWFrZSBzdXJlIGFuCitpbm9kZSBoYXMgdmFsaWQgYmxvY2tzIGJlZm9yZSBpbnRlcmFydGluZyBvdmVyIHRoZSBpbm9kZSdzIGJsb2Nrcy4KKworVVVJRCBnZW5lcmF0aW9uIG5vdyB1c2VzIGEgcmFuZG9tLWJhc2VkIHNjaGVtZSB3aGVuZXZlciBwb3NzaWJsZSB0bworcHJldmVudCBwb3RlbnRpYWwgcHJpdmFjeSBwcm9ibGVtcy4KKworTWFuIHBhZ2VzIGZvciBhbGwgb2YgdGhlIFVVSUQgZnVuY3Rpb25zIGluIHRoZSBsaXJiYXJ5IHdlcmUgYWRkZWQuCisKK0ZpeGVkIGJ1ZyBpbiBmc2NrIHNvIGl0IHdvbid0IGNvcmVkdW1wIGlmIGEgZmlsZXN5c3RlbSBub3QgaW4KKy9ldGMvZnN0YWIgaXMgZ2l2ZW4gdG8gaXQuCisKK0ZzY2sgbm93IHVuZGVyc3RhbmRzIHRoZSBVVUlEPXh4eHggYW5kIExBQkVMPXl5eXkgZm9ybXMgaW4gL2V0Yy9mc3RhYgordGhhdCBtb3N0IG9mIHRoZSBvdGhlciBtb3VudCB1dGlsaXRpZXMgdW5kZXJzdGFuZHMuCisKK01rZTJmcyB3aWxsIG1ha2UgYSBmaWxlc3lzdGVtIGV2ZW4gaWYgaXQgYXBwZWFycyBtb3VudGVkIGlmIHRoZSBmb3JjZQorb3B0aW9uIGlzIGdpdmVuLgorCitEdW1wZTJmcyBoYXMgbmV3IGNvbW1hbmQtbGluZSBvcHRpb25zIHdoaWNoIGFsbG93IGEgZmlsZXN5c3RlbSBleHBlcnQKK3RvIHNwZWNpZnkgdGhlIHN1cGVyYmxvY2sgYW5kIGJsb2Nrc2l6ZSB3aGVuIG9wZW5pbmcgYSBmaWxlc3lzdGVtLgorVGhpcyBpcyBtYWlubHkgdXNlZnVsIHdoZW4gZXhhbWluaW5nIHRoZSByZW1haW5zIG9mIGEgdG9hc3RlZAorZmlsZXN5c3RlbS4KKworVGhlIGJhZGJsb2NrcyBwcm9ncmFtIGhhcyBiZWVuIHVwZGF0ZWQgdG8gZGlzcGxheSBjb3JyZWN0bHkgb24gZGlza3MKK3dpdGggbGFyZ2UgYmxvY2sgbnVtYmVycy4KKworVGhlIGJhZGJsb2NrcyBwcm9ncmFtIG5vIGxvbmdlciBnaXZlcyBzcHVyaW91cyBlcnJvcnMgd2hlbiBlcnJvcnMKK29jY3VyIG9uIG5vbi1ibG9jayBib3VuZGFyaWVzLCB3aGljaCBpcyBjb21tb24gaWYgdGhlIGJsb2Nrc2l6ZSBpcworbGFyZ2VyIHRoYW4gMWsuCisKK01rZTJmcyB3aWxsIHN5bmMgdGhlIGRpc2sgZGV2aWNlIGV2ZXJ5IE1LRTJGU19TWU5DIGJsb2NrIGdyb3VwcyBpZiB0aGUKK01LRTJGU19TWU5DIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldC4gIFRoaXMgaXMgdG8gd29yayBhcm91bmQgYSBWTQorYnVnIGluIHRoZSAyLjAga2VybmVsLiAgSSd2ZSBoZWFyZCBhIHJlcG9ydCB0aGF0IGEgUkFJRCB1c2VyIHdhcyBhYmxlCit0byB0cmlnZ2VyIGl0IGV2ZW4gdXNpbmcgYSAyLjIga2VybmVsLCBidXQgaG9wZWZ1bGx5IGl0IHdpbGwgbm90IGJlCituZWVkZWQgZm9yIG1vc3QgTGludXggMi4yIHVzZXJzLgorCitGaXhlZCBtaXNjZWxsYW5lb3VzIGRvY3VtZW50YXRpb24gYW5kIG1hbiBwYWdlcy4KKworUHJvZ3JhbW1lcidzIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDbGVhbmVkIHVwIGZ1bmN0aW9ucyBzdWNoIGFzIHBhc3MxX2dldF9ibG9ja3MsIHBhc3MxX3JlYWRfaW5vZGUgd2hpY2gKK2luIGUyZnNjaydzIHBhc3MxLmMgcmVhbGx5IHNob3VsZCBoYXZlIGJlZW4gc3RhdGljLgorCitUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB1dWlkX2NvbXBhcmUoKSBmdW5jdGlvbiB3YXMgY2hhbmdlZCB0byBtYWtlIGl0CittYXRjaCB3aXRoIHRoZSBjb252ZXRpb25zIHVzZWQgYnkgc3RyY21wLCBtZW1jbXAsIGFuZCBQYXVsIExlYWNoJ3MKK1VVSUQgc2FtcGxlIGRvY3VtZW50LgorCitUaGUgIm1ha2UgZGVwZW5kIiBwcm9jZXNzIGhhcyBub3cgYmVlbiBtYWRlIG1vcmUgYXV0b21hdGVkOyBpdCBub3cKK2F1dG9tYXRpY2FsbHkgd29yZC13cmFwcyB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgb25seSByZXBsYWNlcyBzb3VyY2UKK01ha2VmaWxlLmluIGlmIHRoZXJlIGhhcyBiZWVuIGEgY2hhbmdlIGluIHRoZSBkZXBlbmRlbmNpZXMuICBBbHNvLCBhCit0b3AtbGV2ZWwgIm1ha2UgZGVwZW5kIiBub3cgcmVjdXJzZXMgdGhyb3VnaCBhbGwgdGhlIHN1YmRpcmVjdG9yaWVzCithdXRvbWF0aWNhbGx5LgorCitUaGUgTWFrZWZpbGUgaW4gLi4uL3V0aWwgaGFzIGJlZW4gY2hhbmdlZCBzbyB0aGF0IHN1YnN0IGlzIGJ1aWx0IHVzaW5nCit0aGUgbmF0aXZlIEMgY29tcGlsZXIgZHVyaW5nIGEgY3Jvc3MtY29tcGlsYXRpb24sIHNpbmNlIHRoZSBzdWJzdAorcHJvZ3JhbSBpcyBvbmx5IHVzZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiAgQWxzbyBhZGQgYW4gZXhwbGljaXQKK3J1bGUgdG8gYnVpbGQgdXRpbC9zdWJzdCBieSBjZCdpbmcgdG8gdGhlIGNvcnJlY3QgZGlyZWN0b3J5IGFuZAorcnVubmluZyBNYWtlZmlsZS4KKworVGhlIG1hbiBkaXJlY3RvcmllcyBhcmUgZGVmaW5lZCBpbiB0ZXJtcyBtYW5kaXIsIHNvIHRoYXQgdGhlIGNvbmZpZ3VyZQorc2NyaXB0IGNhbiBvdmVycmlkZSB0aGUgbG9jYXRpb24gb2YgdGhlIG1hbnVhbCBwYWdlcy4KKworVGhlIGNvbmZpZyBmaWxlcyBoYXZlIGJlZW4gdXBkYXRlZCB0byByZWNvZ25pemUgbmV3IG1hY2hpbmUgdHlwZXMgZm9yCitib3RoIHRoZSBpMzg2IGFuZCBhbHBoYSBmYW1pbGllcy4KKworRnNjayBoYXMgYmVlbiBtb2RpZmllZCBzbyB0aGF0IGl0IHdpbGwgYWNjdXJhdGVseSBjcmVhdGUgYW4KK2ZzY2tfaW5zdGFuY2UgZXZlbiB3aGVuIHRoZSBub2V4ZWN1dGUgZmxhZyBpcyBzZXQuICBUaGlzIGFsbG93cyBmb3IKK2FjY3VyYXRlIGRlYnVnZ2luZyBvZiB0aGUgZnNjayBwYXNzIHN0cnVjdHVyZS4gIEFsc28sIHdoZW4gdGhlIHZlcmJvc2UKK2ZsYWcgaXMgZ2l2ZW4gdHdpY2UsIGZzY2sgd2lsbCBwcmludCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgd2hlbgorZnNjayBpcyB3YWl0aW5nIGZvciBqb2JzIHRvIGZpbmlzaC4KKworCitFMmZzcHJvZ3MgMS4xNCAoSmFudWFyeSA5LCAxOTk5KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IHRoZSBmc3RhYiBwYXJzaW5nIGNvZGUgc28gdGhhdCBpdCBjYW4gaGFuZGxlIGJsYW5rIGxpbmVzIGFuZAorY29tbWVudCBjaGFyYWN0ZXJzLiAgQWxzbywgbWlzc2luZyBwYXNzIG51bWJlcnMgbmVlZCB0byBiZSB0cmVhdGVkIGFzCit6ZXJvLgorCitGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sgd2hlcmUgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzICh3aGVuIGUyZnNjaworbmVlZHMgdG8gcmVzdGFydCBwcm9jZXNzaW5nIGFmdGVyIGZpeGluZyBhbiBlZ3JlZ2lvdXMgaW5jb25zaXN0ZW5jeSkKK2l0IHdvdWxkIHRyeSB0byBhY2Nlc3MgYWxyZWFkeSBmcmVlZCBtZW1vcnkuCisKK0UyZnNjayBub3cgcHJpbnRzIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyBpbiBkaXJlY3RvcnkgZW50cmllcyBhbmQKK3BhdGhuYW1lcyB1c2luZyAnXicgYW5kICdNLScgbm90YXRpb24uCisKK0ZpeGVkIGNoYXR0ciBzbyB0aGF0IGl0IHdpbGwgaWdub3JlIHN5bWJvbGljIGxpbmtzIHdoZW4gZG9pbmcKK3JlY3Vyc2l2ZSBkZXNjZW50IHRyYXZlcnNhbHMuICBGb3IgYm90aCBjaGF0dHIgYW5kIGxzYXR0ciwgbm8gbG9uZ2VyCitwcmludCB0aGUgdmVyc2lvbiBzdHJpbmcgdW5sZXNzIHRoZSAtViBvcHRpb24gaXMgZ2l2ZW4uCisKK0FsbG93IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciB0byBkaXJlY3RseSBzcGVjaWZ5IHRoZSBudW1iZXIgb2YKK2lub2RlcyBkZXNpcmVkIGluIHRoZSBmaWxlc3lzdGVtLCBmb3Igc29tZSBzcGVjaWFsIGNhc2VzIHdoZXJlIHRoaXMgaXMKK25lY2Vzc2FyeS4KKworRml4IHBvcnRhYmlsaXR5IHByb2JsZW1zIHNvIHRoYXQgZTJmc3Byb2dzIGNhbiBiZSBjb21waWxlZCB1bmRlciBMaW51eAorMS4yIHN5c3RlbXMgYW5kIFNvbGFyaXMgc3lzdGVtcy4KKworVXBkYXRlIHRoZSBjb25maWcuZ3Vlc3MgZmlsZSB3aXRoIGEgbW9yZSByZWNlbnQgdmVyc2lvbiB0aGF0IHdpbGwKK2lkZW50aWZ5IG5ld2VyIExpbnV4IHBsYXRmb3Jtcy4KKworUHJvZ3JhbW1lcidzIG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworRXh0MmZzX3JlYWRfaW5vZGUgYW5kIGV4dDJmc193cml0ZV9pbm9kZSB3aWxsIG5vdyByZXR1cm4gYW4gZXJyb3IgaWYKK2FuIGlub2RlIG51bWJlciBvZiB6ZXJvIGlzIHBhc3NlZCB0byB0aGVtLgorCitFMmZzcHJvZ3MgMS4xMyAoRGVjZW1iZXIgMTUsIDE5OTgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVkIGEgYnVnIGluIGRlYnVnZnMgd2hlcmUgYW4gZXJyb3IgbWVzc2FnZXMgd2VyZW4ndCBnZXR0aW5nIHByaW50ZWQKK3doZW4gdGhlIGV4dDIgbGlicmFyeSByb3V0aW5lcyB0byByZWFkIGlub2RlcyByZXR1cm5lZCBlcnJvcnMgaW4gdGhlCitzdGF0LCBjbXJpIGFuZCBybSBjb21tYW5kcy4KKworRml4ZWQgYSBidWcgaW4gbWtlMmZzIHNvIHRoYXQgaWYgYSByaWRpY3Vsb3VzIGlub2RlIHJhdGlvIHBhcmFtZXRlciBpcworcHJvdmlkZWQsIGl0IHdvbid0IGNyZWF0ZSBhbiBpbm9kZSB0YWJsZSBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0KK251bWJlciBvZiBpbm9kZXMgcmVxdWlyZWQgZm9yIGEgcHJvcGVyIGV4dDIgZmlsZXN5c3RlbS4KKworRnNjayBub3cgcGFyc2VzIHRoZSAvZXRjL2ZzdGFiIGZpbGUgZGlyZWN0bHkgKGluc3RlYWQgb2YgdXNpbmcKK2dldG1udGVudCgpKSwgc28gdGhhdCBpdCBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIG1pc3NpbmcgcGFzcyBudW1iZXIKK2ZpZWxkIGFuZCBwYXNzIG51bWJlciBmaWVsZCBvZiB6ZXJvLiAgVGhpcyBjYXVzZWQgcHJvYmxlbXMgZm9yCitkaXNrbGVzcyB3b3Jrc3RhdGlvbnMgd2hlcmUgYWxsIG9mIHRoZSBmaWxlc3lzdGVtcyBpbiAvZXRjL2ZzdGFiIGhhdmUKK2FuIGV4cGxpY2l0IHBhc3MgbnVtYmVyIG9mIHplcm8sIGFuZCBmc2NrIGNvdWxkIG5vdCBkaXN0aW5ndWlzaCB0aGlzCitmcm9tIGEgL2V0Yy9mc3RhYiBmaWxlIHdpdGggbWlzc2luZyBwYXNzIG51bWJlcnMuCisKK0UyZnNjayB3aWxsIGNyZWF0ZSBhIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeSBpZiB0aGVyZSBpc24ndCBvbmUgaW4gdGhlCitmaWxlc3lzdGVtLCBzaW5jZSBpdCdzIHNhZmVyIHRvIGNyZWF0ZSB0aGUgbG9zdCtmb3VuZCBkaXJlY3RvcnkgYmVmb3JlCitpdCdzIG5lZWRlZC4KKworRml4ZWQgZTJmc2NrIHNvIHRoYXQgaXQgd291bGQgZGV0ZWN0IGJvZ3VzIGltbXV0YWJsZSBpbm9kZXMgd2hpY2gKK2hhcHBlbiB0byBiZSBzb2NrZXRzIGFuZCBGSUZPIGZpbGVzLCBhbmQgb2ZmZXIgdG8gY2xlYXIgdGhlbS4KKworSWYgYSBmaWxlc3lzdGVtIGhhcyBtdWx0aXBsZSByZWFzb25zIHdoeSBpdCBuZWVkcyB0byBiZSBjaGVja2VkLCBhbmQKK29uZSBvZiB0aGUgcmVhc29ucyBpcyB0aGF0IGl0IGlzIHVuY2xlYW5seSBtb3VudGVkLCBlMmZzY2sgd2lsbCBwcmludAordGhhdCBhcyB0aGUgcmVhc29uIHdoeSB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBjaGVja2VkLgorCitDbGVhbmVkIHVwIHRoZSBvdXRwdXQgcm91dGluZXMgb2YgbWtlMmZzIHNvIHRoYXQgaXQgZG9lc24ndCBvdmVyZmxvdworYW4gODAgY29sdW1uIGRpc3BsYXkgd2hlbiBmb3JtYXRpbmcgcmVhbGx5IGJpZyBmaWxlc3lzdGVtcy4KKworQWRkZWQgYSBzYW5pdHkgY2hlY2sgdG8gZTJmc2NrIHRvIG1ha2Ugc3VyZSB0aGF0IGZpbGUgZGVzY3JpcHRvcnMgMCwKKzEsIDIgYXJlIG9wZW4gYmVmb3JlIG9wZW5pbmcgdGhlIGhhcmQgZGlzay4gIFRoaXMgYXZvaWRzIGEgcHJvYmxlbQord2hlcmUgYSBicm9rZW4gcHJvZ3JhbSBtaWdodCBleGVjIGUyZnNjayB3aXRoIHRob3NlIGZpbGUgZGVzY3JpcHRvcnMKK2Nsb3NlZCwgd2hpY2ggd291bGQgY2F1c2UgZGlzYXN0cm91cyByZXN1bHRzIGlmIHRoZSBrZXJuZWwgcmV0dXJucyBhCitmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBibG9jayBkZXZpY2Ugd2hpY2ggaXMgYWxzbyB1c2VkIGJ5IEZJTEUgKgorc3Rkb3V0LgorCitGaXhlZCB1cCB0aGUgZTJmc2NrIHByb2dyZXNzIHJlcG9ydGluZyBmdW5jdGlvbnMgc28gdGhhdCB0aGUgdmFsdWVzCityZWxpYWJseSByZWFjaCAxMDAlIGF0IHRoZSBjb21wbGV0aW9uIG9mIGFsbCBvZiB0aGUgZTJmc2NrIHBhc3Nlcy4KKworRml4ZWQgbWlub3IgZG9jdW1lbnRhdGlvbiBidWdzIGluIG1hbiBwYWdlcyBhbmQgdXNhZ2UgbWVzc2FnZXMuCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworRml4ZWQgYSBudW1iZXIgb2YgbGludCB3YXJuaW5ncyBpbiB0aGUgZXh0MmZzIGxpYnJhcnkgYW5kIHBvdGVudGlhbAorcG9ydGFiaWxpdHkgcHJvYmxlbXMgZnJvbSBvdGhlciBPUydzIGhlYWRlciBmaWxlcyB0aGF0IG1pZ2h0IGRlZmluZQorQ1BQIG1hY3JvcyBmb3IgbmFtZXMgbGlrZSAibWF4IiBhbmQgIm1pbiIuCisKK2V4dDJmc19iYWRibG9ja3NfbGlzdF9hZGQoKSBoYXMgYmVlbiBtYWRlIG1vcmUgZWZmaWNpZW50IHdoZW4gaXQgbmVlZHMKK3RvIGdyb3cgdGhlIGJhZCBibG9ja3MgbGlzdC4KKworRml4ZWQgYSBidWcgaW4gZTJmc2NrIHdoaWNoIGNhdXNlZCBpdCB0byBkZXJlZmVyZW5jZSBhIGZyZWVkIHBvaW50ZXIKK2p1c3QgYmVmb3JlIGV4aXRpbmcuCisKK0ZpeGVkIHRoZSBzdWJzdGl0aW9uIHByb2Nlc3MgZm9yIGdlbmVyYXRpbmcgdGhlIG1rX2NtZHMgYW5kIGNvbXBpbGVfZXQKK3NjcmlwdHMgc28gdGhhdCB0aGV5IHdpbGwgd29yayBvdXRzaWRlIG9mIHRoZSBidWlsZCB0cmVlLgorCitBZGQgc2FuaXR5IGNoZWNrIHRvIGUyZnNjayBzbyB0aGF0IGlmIGFuIGludGVybmFsIHJvdXRpbmUKKyhleHQyZnNfZ2V0X2Rpcl9pbmZvKSByZXR1cm5zIE5VTEwsIGF2b2lkIGRlcmVmZXJlbmNpbmcgdGhlIHBvaW50ZXIKK2FuZCBjYXVzaW5nIGEgY29yZSBkdW1wLiAgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQuLi4KKworRTJmc3Byb2dzIDEuMTIgKEp1bHkgOSwgMTk5OCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRTJmc3Byb2dzIG5vdyB3b3JrcyB3aXRoIGdsaWJjIChhdCBsZWFzdCB3aXRoIHRoZSB2ZXJzaW9uIHNoaXBwZWQgd3RpaAorUmVkSGF0IDUuMCkuICBUaGUgZXh0MmZzX2xsc2VlaygpIGZ1bmN0aW9uIHNob3VsZCBub3cgd29yayBldmVuIHdpdGgKK2kzODYgRUxGIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGlmIGxsc2VlaygpIGlzIG5vdCBwcmVzZW50LiAgV2UgYWxzbworZXhwbGljaXRseSBkbyBhIGNvbmZpZ3VyZSB0ZXN0IHRvIHNlZSBpZiAoYSkgbGxzZWVrIGlzIGluIGxpYmMsIGFuZAorKGIpIGlmIGxsc2VlayBpcyBkZWNsYXJlZCBpbiB0aGUgc3lzdGVtIGhlYWRlciBmaWxlcy4gIChTZWUgc3RhbmRhcmQKK2NvbXBsYWludHMgYWJvdXQgbGliYyBkZXZlbG9wZXJzIGRvbid0IHVuZGVyc3RhbmQgdGhlIGNvbmNlcHQgb2YKK2NvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyB2ZXJzaW9ucyBvZiBsaWJjLikKKworVGhlIGV4dDJmcyBsaWJyYXJ5IG5vdyB3cml0ZXMgb3V0IHRoZSBibG9jayBncm91cCBudW1iZXIgaW4gZWFjaCBvZgordGhlIHN1cGVyYmxvY2sgY29waWVzLiAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gYXV0b21hdGljYWxseQorZGV0ZXJtaW5lIHRoZSBzdGFydGluZyBibG9jayBncm91cCBvZiB0aGUgZmlsZXN5c3RlbSB3aGVuIHRoZSBibG9jaworZ3JvdXAgaW5mb3JtYXRpb24gaXMgdHJhc2hlZC4KKworQWRkZWQgc3VwcG9ydCBmb3IgdGhlIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRSBmZWF0dXJlLAord2hpY2ggbWVhbnMgdGhhdCBlMmZzcHJvZ3Mgd2lsbCBpZ25vcmUgdGhlIGhpZ2ggOCBiaXRzIG9mIHRoZQorZGlyZWN0b3J5IGVudHJ5J3MgbmFtZV9sZW4gZmllbGQsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIG90aGVyCitwdXJwb3Nlcy4KKworQWRkZWQgc3VwcG9ydCBmb3IgdGhlIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRSBmZWF0dXJlLgorRTJmc3Byb2dzIHdpbGwgbm93IHN1cHBvcnQgZmlsZXN5c3RlbXMgd2l0aCA2NC1iaXQgc2l6ZWQgZmlsZXMuCisKK0FkZGVkIHN1cHBvcnQgZm9yIHRoZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9QUkVBTExPQyBmZWF0dXJlLgorCitBZGRlZCBuZXcgcHJvZ3JhbSAiZTJsYWJlbCIsIGNvbnRyaWJ1dGVkIGJ5IEFuZHJpZXMgQnJvdXdlci4gIEUybGFiZWwKK3Byb3ZpZGVzIGFuIGVhc3ktdG8tdXNlIGludGVyZmFjZSB0byBtb2RpZnkgdGhlIGZpbGVzeXN0ZW0gbGFiZWwuCisKK0ZpeGVkIGJ1ZyBzbyB0aGF0IGxzYXR0ciAtdiB3b3JrcyBpbnN0ZWFkIG9mIHByb2R1Y2luZyBhIGNvcmUgZHVtcC4KKworRml4ZWQgYSBtaW5vciBidWcgaW4gbWtlMmZzIHNvIHRoYXQgYWxsIGdyb3VwcyB3aXRoIGJhZCBzdXBlcmJsb2NrCitiYWNrdXAgYmxvY2tzIGFyZSBwcmludGVkIChub3QganVzdCB0aGUgZmlyc3Qgb25lKS4KKworTWtlMmZzIHdpbGwgY2hlY2sgdGhlIHNpemUgb2YgdGhlIGRldmljZSwgYW5kIGlmIHRoZSB1c2VyIHNwZWNpZmllcyBhCitmaWxlc3lzdGVtIHNpemUgbGFyZ2VyIHRoYW4gdGhlIGFwcGFyZW50IHNpemUgb2YgdGhlIGRldmljZSBpdCB3aWxsCitwcmludCBhIHdhcm5pbmcgbWVzc2FnZSBhbmQgYXNrIGlmIHRoZSB1c2VyIHdhbnRzIHRvIHByb2NlZWQuCisKK0UyZnNjayBoYXMgYSBuZXcgb3B0aW9uIC1DLCB3aGljaCBzZW5kcyBjb21wbGV0aW9uIGluZm9ybWF0aW9uIHRvIHRoZQorc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4gIEZvciB0aGUgbW9zdCBwYXJ0LCB0aGlzIGlzIGludGVuZGVkIGZvcgorcHJvZ3JhbXMgdG8gdXNlLCBhbHRob3VnaCAtQyAwIHdpbGwgcHJpbnQgYSBzcGlubmluZyBjaGFyYWN0ZXIgdG8gdGhlCitzdGRvdXQgZGV2aWNlLCB3aGljaCBtYXkgYmUgdXNlZnVsIGZvciB1c2VycyB3aG8gd2FudCB0byBzZWUgc29tZXRoaW5nCitoYXBwZW5pbmcgd2hpbGUgZTJmc2NrIGdvZXMgYWJvdXQgaXRzIGJ1c2luZXNzLgorCitGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sgd2hpY2ggY291bGQgY2F1c2UgYSBjb3JlIGR1bXAgd2hlbiBpdCBuZWVkcyB0bworZXhwYW5kIHRoZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnksIGFuZCBzb21ldGltZXMgdGhlIGJpdG1hcHMgaGF2ZW4ndAorYmVlbiBtZXJnZWQgaW4uICBBbHNvIGZpeGVkIGEgcmVsYXRlZCBidWcgd2hlcmUgZXh0MmZzX3dyaXRlX2Rpcl9ibG9jaword2FzIHVzZWQgdG8gd3JpdGUgb3V0IGEgbm9uLWRpcmVjdG9yeSBibG9jay4gIChXaGljaCB3b3VsZCBiZSBiYWQgb24gYQorbm9uLUludGVsIHBsYXRmb3JtIHdpdGggYnl0ZSBzd2FwcGluZyBnb2luZyBvbi4pCisKK0ZpeGVkIGJ1ZyBpbiBlMmZzY2sgd2hlcmUgaXQgd291bGQgcHJpbnQgYSAicHJvZ3JhbW1pbmcgZXJyb3IiIG1lc3NhZ2UKK2luc3RlYWQgb2YgY29ycmVjdGx5IGlkZW50aWZ5aW5nIHdoZXJlIGEgYmFkIGJsb2NrIHdhcyBpbiB1c2VkIHdoZW4KK3RoZSBiYWQgYmxvY2sgd2FzIGluIGEgbm9uLXByaW1hcnkgc3VwZXJibG9jayBvciBibG9jayBncm91cAorZGVzY3JpcHRvci4gIEFsc28gZml4ZWQgYSByZWxhdGVkIGJ1ZyB3aGVuIHNwYXJzZSBzdXBlcmJsb2NrcyBhcmUgaW4KK3VzZSBhbmQgdGhlcmUgaXMgYSBiYWQgYmxvY2sgd2hlcmUgYSBzdXBlcmJsb2NrIG9yIGJsb2NrIGdyb3VwCitkZXNjcmlwdG9yIHdvdWxkIGhhdmUgYmVlbiBpbiBhIGdyb3VwIHRoYXQgZG9lc24ndCBpbmNsdWRlIGEKK3N1cGVyYmxvY2suCisKK0ZpeGVkIGEgYnVnIGluIGUyZnNjayAocmVhbGx5IGluIGxpYmV4dDJmcydzIGRibGlzdCBmdW5jdGlvbikgd2hlcmUgaWYKK3RoZSBibG9jayBncm91cCBkZXNjcmlwdG9yIHRhYmxlIGlzIGNvcnJ1cHQsIGl0IHdhcyBwb3NzaWJsZSB0byB0cnkgdG8KK2FsbG9jYXRlIGEgaHVnZSBhcnJheSwgZmFpbCwgYW5kIHRoZW4gYWJvcnQgZTJmc2NrLgorZXh0MmZzX2dldF9udW1fZGlycygpIG5vdyBzYW5pdHkgY2hlY2tzIHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9yLAorYW5kIHN1YnNpdHV0ZXMgcmVhc29uYWJsZSB2YWx1ZXMgaWYgdGhlIGRlc2NyaXB0b3JzIGFyZSBvYnZpb3VzbHkgYm9ndXMuCisKK0lmIGUyZnNjayBmaW5kcyBhIGRldmljZSBmaWxlIHdoaWNoIGhhcyB0aGUgaW1tdXRhYmxlIGZsYWcgc2V0IGFuZCB0aGUKK2lfYmxvY2tzIGJleW9uZCB0aGUgbm9ybWFsIGRldmljZSBudW1iZXIgYXJlIG5vbi16ZXJvLCBlMmZzY2sgd2lsbAorb2ZmZXIgdG8gcmVtb3ZlIGl0LCBzaW5jZSBpdCdzIHByb2JhYmx5IGNhdXNlZCBieSBnYXJiYWdlIGluIHRoZSBpbm9kZQordGFibGUuCisKK1doZW4gb3BlbmluZyBhIGZpbGVzeXN0ZW0sIGUyZnNjayBzcGVjaWFsbHkgY2hlY2tzIGZvciB0aGUgRVJPRlMgZXJyb3IKK2NvZGUsIGFuZCBwcmludHMgYSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIHRvIHRoZSB1c2VyIHdoaWNoIGlzIG1vcmUKK3VzZXIgZnJpZW5kbHkuCisKK0lmIHRoZSBmaWxlc3lzdGVtIHJldmlzaW9uIGlzIHRvbyBoaWdoLCBjaGFuZ2UgdGhlIGUyZnNjayB0byBwcmludAordGhhdCB0aGlzIGlzIGVpdGhlciBiZWNhdXNlIGUyZnNjayBpcyBvdXQgb2YgZGF0ZSwgb3IgYmVjYXVzZSB0aGUKK3N1cGVyYmxvY2sgaXMgY29ycnVwdC4gIAorCitFMmZzY2sgbm93IGNoZWNrcyBmb3IgZGlyZWN0b3JpZXMgdGhhdCBoYXZlIGR1cGxpY2F0ZSAnLicgYW5kICcuLicKK2VudHJpZXMsIGFuZCBmaXhlcyB0aGlzIGNvcnJ1cHRpb24uCisKK0UyZnNjayBubyBsb25nZXIgZm9yY2VzIGEgc3luYyBvZiB0aGUgZmlsZXN5c3RlbSAod2l0aCBhdHRlbmRhbnQgc2xlZXAKK2NhbGxzKSBhdCBhbGwgdGltZXMuICBUaGUgZXh0MmZzX2ZsdXNoKCkgZnVuY3Rpb24gbm93IHBlcmZvcm1zIGEgc3luYworb25seSBpZiBpdCBuZWVkZWQgdG8gd3JpdGUgZGF0YSBibG9ja3MgdG8gZGlzay4KKworRml4ZWQgYSBtaW5vciBidWcgaW4gZTJmc2NrJ3MgcGFzczFiJ3MgZmlsZSBjbG9uaW5nIGZ1bmN0aW9uLCB3aGVyZQorY2VydGFpbiBlcnJvcnMgd291bGQgbm90IGJlIHByb3Blcmx5IHJlcG9ydGVkLgorCitVcGRhdGVkIGFuZCBleHBhbmRlZCBhIGZldyBwb2ludHMgaW4gdGhlIG1hbiBwYWdlcyB3aGljaCB1c2VycworY29tcGxhaW5lZCB3aGVyZW4ndCBleHBsaWNpdCBlbm91Z2guCisKK0FkZGVkIHNwZWNpYWwgY2FzZSBieXRlLXN3YXBwaW5nIGNvZGUgaWYgY29tcGlsaW5nIG9uIHRoZSBQb3dlclBDLCB0bworYWNjb21vZGF0ZSB0aGUgc3RyYW5nZSBiaWctZW5kaWFuIHZhcmlhbnQgb2YgdGhlIGV4dDIgZmlsZXN5c3RlbSB0aGF0Cit3YXMgcHJldmlvdXNseSB1c2VkIG9uIHRoZSBQb3dlclBDIHBvcnQuCisKKworUHJvZ3JhbW1lcidzIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZW1vdmVkIEMrKyBrZXl3b3JkcyBmcm9tIHRoZSBleHQyZnMgbGlicmFyaWVzIHNvIHRoYXQgaXQgY291bGQgYmUKK2NvbXBpbGVkIHdpdGggQysrLgorCitFMmZzY2sncyBpbnRlcm5hbCBvcmdhbml6YXRpb24gaGFzIG5vdyBiZWVuIG1hc3NpdmVseSByZW9yZ2FuaXplZCBzbwordGhhdCBwYXNzKi5jIGRvbid0IGhhdmUgYW55IHByaW50ZiBzdGF0ZW1lbnRzLiAgSW5zdGVhZCwgYWxsIHByb2JsZW1zCithcmUgcmVwb3J0ZWQgdGhyb3VnaCB0aGUgZml4X3Byb2JsZW0oKSBhYnN0cmFjdGlvbiBpbnRlcmZhY2UuICBFMmZzY2sKK2hhcyBhbHNvIGJlZW4gcmV2YW1wZWQgc28gdGhhdCBpdCBjYW4gYmUgY2FsbGVkIGFzIGEgbGlicmFyeSBmcm9tIGEKK2FwcGxpY2F0aW9uLgorCitBZGRlZCBuZXcgZmlsZWlvIHByaW1pdGl2ZXMgaW4gbGliZXh0MmZzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nCitmaWxlcyBvbiBhbiB1bm1vdW50ZWQgZXh0MiBmaWxlc3lzdGVtLiAgVGhpcyBpbnRlcmZhY2UgaXMgbm93IHVzZWQgYnkKK2RlYnVnZnMuCisKK0FkZGVkIGEgbmV3IGxpYmV4dDJmcyBmdW5jdGlvbiBmb3IgbWFwcGluZyBsb2dpY2FsIGJsb2NrIG51bWJlcnMgb2YKK2EgZmlsZSB0byBhIHBoeXNpY2FsIGJsb2NrIG51bWJlci4KKworQWRkZWQgYSBuZXcgbGliZXh0MmZzIGZ1bmN0aW9uLCBleHQyZnNfYWxsb2NfYmxvY2soKSwgd2hpY2ggYWxsb2NhdGVzCithIGJsb2NrLCB6ZXJvcyBpdCwgYW5kIHVwZGF0ZXMgdGhlIGZpbGVzeXN0ZW0gYWNjb3VudGluZyByZWNvcmRzCithcHByb3ByaWF0ZWx5LgorCitBZGRlZCBhIG5ldyBsaWJleHQyZnMgZnVuY3Rpb24sIGV4dDJmc19zZXRfYml0bWFwX3BhZGRpbmcoKSwgd2hpY2gKK3NldHMgdGhlIHBhZGRpbmcgb2YgdGhlIGJpdG1hcCB0byBiZSBhbGwgb25lJ3MuICBVc2VkIGJ5IGUyZnNjayBwYXNzIDUuCisKK1RoZSBsaWJleHQyZnMgZnVuY3Rpb25zIG5vdyB1c2UgYSBzZXQgb2YgbWVtb3J5IGFsbG9jYXRpb24gd3JhcHBlcgorZnVuY3Rpb25zOiBleHQyZnNfZ2V0X21lbSwgZXh0MmZzX2ZyZWVfbWVtLCBhbmQgZXh0MmZzX3Jlc2l6ZV9tZW0sCitpbnN0ZWFkIG9mIG1hbGxvYywgZnJlZSwgYW5kIHJlc2l6ZS4gIFRoaXMgbWFrZXMgaXQgZWFzaWVyIGZvciB1cyB0bworYmUgcG9ydGVkIHRvIHN0cmFuZ2UgZW52aXJvbm1lbnRzIHdoZXJlIG1hbGxvYywgZXQuIGFsLiBhcmVuJ3QKK25lY2Vzc2FyaWx5IGF2YWlsYWJsZS4KKworQ2hhbmdlIHRoZSBsaWJleHQyZnMgZnVjbnRpb24gdG8gcmV0dXJuIGV4dDItc3BlY2lmaWMgZXJyb3IgY29kZXMKKyhFWFQyX0RJUl9FWElTVFMgYW5kIEVYVDJfREJfTk9UX0ZPVU5ELCBmb3IgZXhhbXBsZSkgaW5zdGVhZCBvZiB1c2luZworYW5kIGRlcGVuZGluZyBvbiB0aGUgZXhpc3RlbmNlIG9mIHN5c3RlbSBlcnJvciBjb2RlcyAoc3VjaCBhcyBFRVhJU1QKK2FuZCBFTk9FTlQpLgorCitSZW5hbWVkIGlvLmggdG8gZXh0Ml9pby5oIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG90aGVyIE9TJ3MgaGVhZGVyCitmaWxlcy4KKworQWRkIHByb3RlY3Rpb24gYWdhaW5zdCBleHQyX2lvLmggYW5kIGV4dDJmcy5oIGJlaW5nIGluY2x1ZGVkIG11bHRpcGxlCit0aW1lcy4KKworVGhlIHR5cGVzIHVzZWQgZm9yIG1lbW9yeSBsZW5ndGhzLCBldGMuIGhhdmUgYmVlbiBtYWRlIG1vcmUgcG9ydGFibGUuCitJbiBnZW5lcmxhLCB0aGUgY29kZSBoYXMgYmVlbiBtYWRlIDE2LWJpdCBzYWZlLiAgQWRkZWQgTWFyaworSGFiZXJzYWNrJ3MgY29udHJpYnV0ZWQgRE9TIGRpc2sgaS9vIHJvdXRpbmVzLgorCitNaXNjZWxsYW5lb3VzIHBvcnRhYmlsaXR5IGZpeGVzLCBpbmNsdWRpbmcgbm90IGRlcGVuZGluZyBvbiBjaGFyJ3MKK2JlaW5nIHNpZ25lZC4KKworVGhlIGlvX2NoYW5uZWwgc3RydWN0dXJlIGhhcyBhIG5ldyBlbGVtZW50LCBhcHBfZGF0YSwgd2hpY2ggaXMKK2luaXRpYWxpemVkIGJ5IHRoZSBleHQyZnMgcm91dGluZXMgdG8gY29udGFpbiBhIGNvcHkgb2YgdGhlIGZpbGVzeXN0ZW0KK2hhbmRsZS4KKworZXh0MmZzX2NoZWNrX2RpcmVjdG9yeSgpJ3MgY2FsbGJhY2sgZnVuY3Rpb24gbWF5IG5vdyByZXR1cm4gdGhlIGVycm9yCitFWFQyX0VUX0NBTExCQUNLX05PVEhBTkRMRUQgaWYgaXQgd2lzaGVzIGV4dDJmc19jaGVja19kaXJlY3RvcnkoKSB0bworcmVhbGx5IGRvIHRoZSBjaGVja2luZywgZGVzcGl0ZSB0aGUgcHJlc2VuY2Ugb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorCisKK0UyZnNwcm9zZyAxLjExIChKdW5lIDE3LCAxOTk3KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVkIGUyZnNjayB0byBkZXRlY3QgKHByZXZpb3VzbHkgaWdub3JlZCkgY29uZmxpY3RzIGJldHdlZW4gdGhlCitzdXBlcmJsb2NrIG9yIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIGFuZCBibG9jayBiaXRtYXBzLCBpbm9kZQorYml0bWFwcywgYW5kIGlub2RlIHRhYmxlcy4KKworRml4ZWQgYnVnIGluIGUyZnNjayBzbyB0aGF0IHdoZW4gdGhlIG1lc3NhZ2UgcHJpbnRlZCBvdXQgd2hlbiBhIGJsb2NrCitvciBpbm9kZSBiaXRtYXAgY29uZmxpY3RzIHdpdGggb3RoZXIgZGF0YSwgaXQgaGFzIHRoZSBjb3JyZWN0IGdyb3VwCitudW1iZXIuCisKK0ZpeGVkIGJ1ZyBpbiBlMmZzY2sgYW5kIG1rZTJmcyB3aGVyZSB0aGUgYmxvY2tzaXplIHdhc24ndCBiZWluZyBwYXNzZWQKK3RvIGJhZGJsb2Nrcy4gIFRoaXMgbWVhbnQgdGhhdCBub3QgYWxsIG9mIHRoZSBmaWxlc3lzdGVtIHdhcyBiZWluZwordGVzdGVkIGZvciBiYWQgYmxvY2tzISAKKworRml4ZWQgYW4gYXJyYXkgYm91bmRhcnkgb3ZlcnJ1biBjYXNlIHdoaWNoIGNyb3BwZWQgdXAgaW4KK2V4dDJmc19iYWRibG9ja3NfbGlzdF90ZXN0IHdoZW4gYSB1c2VyIHRyaWVkIHJ1bm5pbmcgIm1rZTJmcyAtYyAKKy1iIDQwOTYiLgorCitBZGp1c3RlZCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgcHJpbnRlZCBieSBta2UyZnMgd2hlbiBkaXNwbGF5aW5nIHRoZQorc3VwZXJibG9jayBiYWNrdXBzIHRvIGF2b2lkIHJ1bm5pbmcgb3ZlciA4MCBjb2x1bW5zIHdoZW4gbWFraW5nIGEKK3JlYWxseSBiaWcgZmlsZXN5c3RlbS4KKworRml4ZWQgdXAgdGhlIG1hbiBwYWdlcyBmb3IgZTJmc2NrLCBkZWJ1Z2ZzLCBiYWRibG9ja3MsIGNoYXR0ciwKK2R1bXBlMmZzLCBmc2NrLCBta2UyZnMsIGFuZCB0dW5lMmZzICh0eXBvcyBhbmQgb3RoZXIgbWlub3IgZ3JhbW1hcgorZml4ZXMpLCB0aGFua3MgdG8gc29tZSBzdWdnZXN0aW9ucyBmcm9tIEJpbGwgSGF3ZXMgKHdoYXdlc0BzdGFyLm5ldCkuCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworRml4ZWQgaW5zdGFsbCBydWxlIGluIGxpYi9zcyBzbyB0aGF0IHNzX2Vyci5oIGlzIGFjdHVhbGx5IGdldHRpbmcKK2luc3RhbGxlZC4KKworRml4ZWQgYnVnIGluIGV4dDJmc19jb3B5X2JpdG1hcDsgdGhlIGRlc3RpbmF0aW9uIGJpdG1hcCB3YXNuJ3QgZ2V0dGluZworYmFzc2VkIGJhY2sgdG8gdGhlIGNhbGxlci4KKworRml4ZWQgYnVnIGluIGV4dDJmc19pbm9kZV9zY2FuX2dvdG9fYmxvY2tncm91cDsgaXQgaGFkIG5vdCBiZWVuCitzZXR0aW5nIHRoZSBjdXJyZW50IGlub2RlIG51bWJlciAod2hpY2ggbWVhbnQgdGhpcyBmdW5jdGlvbiB3YXNuJ3QKK3dvcmtpbmcgYXQgYWxsKS4KKworRml4ZWQgYnVnIGluIGV4dDJmc19yZXNpemVfZ2VuZXJpY19iaXRtYXA7IGl0IGhhZCBub3QgYmUgemVyb2luZyBhbGwKK2Jsb2NrcyBpbiB0aGUgYml0bWFwIHdoZW4gaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiB0aGUgYml0bWFwLgorCitDaGFuZ2VkIHRoZSBpbml0aWFsIG51bWJlciBvZiBibG9ja3MgYWxsb2NhdGVkIGJ5IGV4dDJmc19pbml0X2RibGlzdCgpCit0byBiZSBtb3JlIHJlYWxpc3RpYy4KKworQWRkZWQgYSBuZXcgZnVuY3Rpb24gZXh0MmZzX2FsbG9jYXRlX2dyb3VwX3RhYmxlLCB3aGljaCBzZXRzIHVwIHRoZQorZ3JvdXAgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiAoYW5kIGFsbG9jYXRlcyBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcywKK2FuZCBpbm9kZSB0YWJsZXMgZm9yIGEgcGFydGljdWxhciBncm91cCkuICBUaGUgZnVuY3Rpb24gd2FzIGNyZWF0ZWQgYnkKK2ZhY3RvcmluZyBvdXQgY29kZSBmb3JtIGV4dDJmc19hbGxvY2F0ZV90YWJsZXMoKS4KKworQWRkZWQgYSBuZXcgZnVuY3Rpb24gZXh0MmZzX21vdmVfYmxvY2tzIHdoaWNoIHRha2VzIGEgYml0bWFwIG9mIHRoZQorYmxvY2tzIHRvIGJlIG1vdmVkLCBhbmQgbW92ZXMgdGhlbSB0byBhbm90aGVyIGxvY2F0aW9uIG9uIHRoZQorYm9hcmRib2FyZC4KKworTWFrZSB0aGUgdW5peF9pbyBjaGFubmVsJ3MgaW9fY2hhbm5lbF9mbHVzaCBpbXBsZW1lbnRhdGlvbiBjYWxscyBzeW5jKCkKK3RvIHRvIGZsdXNoIHRoZSBrZXJuZWwgYnVmZmVycyB0byBkaXNrLgorCitBZGRlZCBhIG5ldyBmdW5jdGlvbiBleHQyZnNfZGJsaXN0X2NvdW50IHJldHVybnMgdGhlIG51bWJlciBvZgorZGlyZWN0b3J5IGJsb2NrcyBpbiBkYmxpc3QuCisKKworRTJmc3Byb2dzIDEuMTAgKEFwcmlsIDI0LCAxOTk3KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNa2UyZnMgb25jZSBhZ2FpbiBkZWZhdWx0cyB0byBjcmVhdGluZyByZXZpc2lvbiAjMCBmaWxlc3lzdGVtcywgc2luY2UKK3Blb3BsZSB3ZXJlIGNvbXBsYWluaW5nIGFib3V0IGJyZWFraW5nIGNvbXBhdGliaWxpdHkgd2l0aCAxLjIga2VybmVscy4KK1dhcm5pbmcgbWVzc2FnZXMgd2VyZSBhZGRlZCB0byB0aGUgbWtlMmZzIGFuZCB0dW5lMmZzIG1hbiBwYWdlcyB0aGF0Cit0aGUgc3BhcnNlIHN1cGVyYmxvY2sgb3B0aW9uIGlzbid0IHN1cHBvcnRlZCBieSBtb3N0IGtlcm5lbHMgeWV0ICgxLjIKK2FuZCAyLjAgYm90aCBkb24ndCBzdXBwb3J0IHBhcnNlIHN1cGVyYmxvY2tzLikKKworQWRkZWQgbmV3IGZsYWcgdG8gbWtlMmZzLCAtUiA8cmFpZCBvcHRpb25zPiwgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvCit0ZWxsIG1rZTJmcyBhYm91dCB0aGUgUkFJRCBjb25maWd1cmF0aW9uIG9mIHRoZSBmaWxlc3lzdGVtLiAgQ3VycmVudGx5Cit0aGUgb25seSBzdXBwb3J0ZWQgcmFpZCBvcHRpb24gaXMgInN0cmlkZSIgd2hpY2ggc3BlY2lmaWVzIHRoZSB3aWR0aAorb2YgdGhlIFJBSUQgc3RyaXBlLgorCitGaXhlZCBidWcgaW4gZTJmc2NrIHdoZXJlIHBhc3MxYiB3b3VsZCBib21iIG91dCBpZiB0aGVyZSB3ZXJlIGFueQorYmxvY2tzIG1hcmtlZCBiYWQgaW4gdGhlIGlub2RlIHRhYmxlLgorCitGaXhlZCByYXJlIGJ1ZyBpbiBta2UyZnMgd2hlcmUgaWYgdGhlIHVzZXIgaGFkIGEgdmVyeSB1bmx1Y2t5IG51bWJlcgorb2YgYmxvY2tzIGluIGEgZmlsZXN5c3RlbSAocHJvYmFiaWxpdHkgbGVzcyB0aGFuIC4wMDIpIHRoZSByZXN1bHRpbmcKK2ZpbGVzeXN0ZW0gd291bGQgYmUgY29ycnVwdCBpbiB0aGUgbGFzdCBibG9jayBncm91cC4KKworRml4ZWQgYnVnIHdoZXJlIGlmIGUyZnNjayB0cmllZCB0byBhbGxvY2F0ZSBhIGJsb2NrIHRvIGZpeCBhCitmaWxlc3lzdGVtIGNvcnJ1cHRpb24gcHJvYmxlbSBhbmQgdGhlIGZpbGVzeXN0ZW0gaGFkIG5vIGZyZWUgYmxvY2tzLAorZXh0MmZzX25ld19ibG9jaygpIHdvdWxkIGxvb3AgZm9yZXZlci4KKworVGhlIGNvbmZpZ3VyZSBzY3JpcHQgbm93IGNoZWNrcyBleHBsaWNpdGx5IHRvIHNlZSBpZiAiLXN0YXRpYyIgd29ya3MsCitzaW5jZSB0aGF0IGNhbid0IGJlIGFzc3VtZWQgdG8gYmUgdHJ1ZSAtLS0gUmVkSGF0IGRvZXNuJ3QgaW5zdGFsbAorbGliYy1zdGF0aWMgYnkgZGVmYXVsdC4KKworRml4ZWQgYnVnIGluIGxpYmV4dDIncyBibG9jayBpdGVyYXRvciBmdW5jdGlvbnMgd2hlcmUgdW5kZXIgc29tZQorY2lybWN1c3RhbmNlcywgZmlsZSB3aXRoIGhvbGVzIHdvdWxkIGNhdXNlIHRoZSBiY291bnQgcGFyYW1ldGVyIHRvIHRoZQorY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW5jb3JyZWN0LiAgVGhpcyBidWcgZGlkbid0IGFmZmVjdCBhbnkgb2YKK2UyZnNwcm9ncyBwcm9ncmFtcywgYnV0IGl0IHdhcyBkaXNjb3ZlcmVkIGJ5IFBhdWwgTWFja2VycmFzLCB0aGUKK2F1dGhvciBvZiB0aGUgUFBDIGJvb3QgbG9hZGVyLgorCitSZW1vdmVkIHVzZSBvZiBzdGF0aWMgdmFyaWFibGVzIHRvIHN0b3JlIHRoZSBpbm9kZSBjYWNoZSBpbiBsaWJleHQyZnMuCitUaGlzIGNhdXNlZCBwcm9ibGVtcyBpZiBtb3JlIHRoYW4gb25lIGZpbGVzeXN0ZW0gd2FzIGFjY2Vzc2VkIHZpYQorbGliZXh0MmZzIChzdGF0aWMgdmFyaWFibGVzIGluIGxpYnJhcmllcyBhcmUgZ2VuZXJhbGx5IGEgYmFkIGlkZWEpLgorQWdhaW4sIHRoaXMgZGlkbid0IGFmZmVjdCBlMmZzcHJvZ3MgcHJvZ3JhbXMsIGJ1dCBpdCB3YXMgZGlzY292ZXJlZCBieQorUGF1bCBNYWNrZXJyYXMuCisKK0ZpeGVkIG1pbm9yIGJ1Z3MgYW5kIHZlcnNpb24gY29kZSBkcmlmdCB0byBhc3N1cmUgdGhhdCBlMmZzcHJvZ3MgMS4xMAord2lsbCBjb21waWxlIGNsZWFubHkgd2l0aCAxLjIuMTMga2VybmVscyAoZXZlbiB3aXRoIGEub3V0IHNoYXJlZAorbGlicmFyaWVzISkKKworUHJvZ3JhbW1lcidzIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZGRlZCBuZXcgZnVuY3Rpb25zIHRvIGR1cGxpY2F0ZSBhbiBleHQyIGZpbGVzeXN0ZW0gaGFuZGxlLCBhbmQgaXRzCithc3NvY2lhdGVkIHN1YnN0cnVjdHVyZS4gIE5ldyBmdW5jdGlvbnM6IGV4dDJmc19kdXBfaGFuZGxlKCksCitleHQyZnNfY29weV9kYmxpc3QoKSwgZXh0MmZzX2JhZGJsb2Nrc19jb3B5KCksIGV4dDJmc19jb3B5X2JpdG1hcCgpLgorT3RoZXIgc3RydWN0dXJlcywgc3VjaCBhcyB0aGUgaW9fY2hhbm5lbCBhbmQgdGhlIGlub2RlX2NhY2hlLCBub3cgaGF2ZQorYSByZWYgY291bnQgc28gdGhhdCB0aGV5IG9ubHkgZ2V0IGZyZWVkIHdoZW4gdGhleSBhcmUgbm8gbG9uZ2VyIHVzZWQKK2J5IGFueSBmaWxlc3lzdGVtIGhhbmRsZS4gIChUaGVzZSBmdW5jdGlvbnMgd2VyZSBhZGRlZCBhcyBwYXJ0IG9mIHRoZQorZGV2ZWxvcG1lbnQgZWZmb3J0IGZvciBhbiBleHQyIHJlc2l6ZXIpLgorCitFMmZzcHJvZ3MgMS4wOSAoQXByaWwgMTQsIDE5OTcpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVkIGJ1ZyBpbiBta2UyZnMgKHJlYWxseSBpbiBsaWIvZXh0MmZzL2luaXRpYWxpemUuYykgd2hpY2ggd2FzCithY2NpZGVudGFsbHkgaW50cm9kdWNlZCBpbiB0aGUgMS4wOCByZWxlYXNlLiAgVGhlIG92ZXJoZWFkIGNhbGN1bGF0aW9uCit3YXMgYWNjaWRlbnRhbGx5IHJlbW92ZWQsIHdoaWNoIGNhdXNlZCBleHQyZnNfaW5pdGlhbGl6ZSgpIHRvIG5vdAorbm90aWNlIHdoZW4gdGhlIGZpbGVzeXN0ZW0gc2l6ZSBuZWVkZWQgdG8gYmUgYWRqdXN0ZWQgZG93biBiZWNhdXNlCit0aGVyZSB3YXNuJ3QgZW5vdWdoIHNwYWNlIGluIHRoZSBsYXN0IGJsb2NrIGdyb3VwLgorCitGaXhlZCBidWcgaW4gdmVyc2lvbiBwYXJzaW5nIGxpYnJhcnkgcm91dGluZTsgaXQgd2FzIGFsd2F5cyBwYXJzaW5nCit0aGUgbGlicmFyeSB2ZXJzaW9uIHN0cmluZywgaW5zdGVhZCBvZiB1c2luZyB0aGUgcGFzc2VkLWluIHN0cmluZy4KKworQ2xhcmlmaWVkIGNoYXR0ciBtYW4gcGFnZS4KKworRTJmc3Byb2dzIDEuMDggKEFwcmlsIDEwLCAxOTk3KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitFMmZzY2sgMS4wNyB3YXMgdmVyeSBzbG93IHdoZW4gY2hlY2tpbmcgdmVyeSBsYXJnZSBmaWxlc3lzdGVtcyB3aXRoIGEKK2xvdCBvZiBmaWxlcyB0aGF0IGhhZCBoYXJkIGxpbmtzIChpLmUuLCBuZXdzIHNwb29scykuICBUaGlzIHdhcyBmaXhlZAorYnkgc2VyaW91c2x5IHJldmFtcGluZyB0aGUgaWNvdW50IGFic3RyYWN0aW9uLiAgQWRkZWQgYSBmb3JtYWwgdGVzdAorc3VpdGUgZm9yIHRoZSBpY291bnQgYWJzdHJhY3Rpb24uCisKK0RlYnVnZnMgbm93IGhhcyBhICItbCIgb3B0aW9uIHRvIHRoZSAibHMiIGNvbW1hbmQsIHdoaWNoIGxpc3RzIHRoZQoraW5vZGUgbnVtYmVyLCBwZXJtaXNzaW9ucywgb3duZXIsIGdyb3VwLCBzaXplLCBhbmQgbmFtZSBvZiB0aGUgZmlsZXMKK2luIHRoZSBkaXJlY3RvcnkuCisKK0ZpeCBhIGJ1ZyBpbiBlMmZzY2sgd2hlcmUgd2hlbiBhIGRpcmVjdG9yeSBoYWQgaXRzIGJsb2NrcyBtb3ZlZCB0bworYW5vdGhlciBsb2NhdGlvbiBkdXJpbmcgdGhlIHBhc3MgMWIgcHJvY2Vzc2luZywgdGhlIGRpcmVjdG9yeSBibG9jaworbGlzdCB3YXNuJ3QgdXBkYXRlZCwgc28gcGFzcyAyIHdvdWxkbid0IGNoZWNrIChhbmQgY29ycmVjdCkgdGhlCitjb3JyZWN0IGRpcmVjdG9yeSBibG9jay4KKworRTJmc2NrIHdpbGwgbm93IHRyZWF0IGlub2RlcyB3aGljaCBjb250YWluIGJsb2NrcyB3aGljaCBhcmUgY2xhaW1lZCBieQordGhlIGZpbGVzeXN0ZW0gbWV0YWRhdGEgYnkgdHJlYXRpbmcgdGhlbSBhcyBtdWx0aXBseSBjbGFpbWVkIGJsb2Nrcy4KK1RoaXMgd2F5LCB0aGUgZGF0YSBpbiB0aG9zZSBibG9ja3MgY2FuIGJlIGNvcGllZCB0byBhIG5ldyBibG9jayBkdXJpbmcKK3RoZSBwYXNzIDFiLS0xZCBwcm9jZXNzaW5nLgorCitFMmZzY2sgd2lsbCBhdHRlbXB0IHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBzdXBlcmJsb2NrIG51bWJlciBhbmQKK2Rpc3BsYXkgaXQgaW4gdGhlIGRpYWdub3N0aWMgYW5kIHdhcm5pbmcgbWVzc2FnZXMgaWYgcG9zc2libGUuCisKK0FkZCBzdXBwb3J0IGZvciBhIG5ldyAoaW5jb21wYXRpYmxlKSBmZWF0dXJlLCAic3BhcnNlX3N1cGVyIi4gIFRoaXMKK2ZlYXR1cmUgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB3aGljaCBjb250YWluIGNvcGllcyBvZiBiYWNrdXAKK3N1cGVyYmxvY2tzIGFuZCBibG9jayBncm91cCBkZXNjcmlwdG9ycy4gIChJdCBpcyBvbmx5IGFuIGluY29tcGF0aWJsZQorZmVhdHVyZSBiZWNhdXNlIG9mIGEgYnVnIGluIGV4dDJfZnJlZV9ibG9ja3MuKSAgbWtlMmZzIGFuZCB0dW5lMmZzIG5vdworc3VwcG9ydCBhIG5ldyAtcyBvcHRpb247IGUyZnNjayB3aWxsIHJlY29nbml6ZSBmaWxlc3lzdGVtcyBidWlsdCB3aXRoCit0aGlzIGZlYXR1cmUgdHVybmVkIG9uLgorCitFMmZzY2sgbm93IGNoZWNrcyB0aGUgbGlicmFyeSB0byBtYWtlIHN1cmUgaXMgdGhlIGNvcnJlY3QgdmVyc2lvbiwKK3VzaW5nIG5ldyBsaWJyYXJ5IGZ1bmN0aW9ucy4gIChUaGlzIGhlbHBzIHRvIGRpYWdub3NlIGluY29ycmVjdGx5CitpbnN0YWxsZWQgZTJmc3Byb2dzIGRpc3RyaWJ1dGlvbnMuKQorCitEdW1wZTJmcyBub3cgcHJpbnRzIG1vcmUgaW5mb3JtYXRpb247IGl0cyBub3cgcHJpbnRzIHRoZSB0aGUKK2ZpbGVzeXN0ZW0gcmV2aXNpb24gbnVtYmVyLCB0aGUgZmlsZXN5c3RlbSBzcGFyc2Vfc3VwZXIgZmVhdHVyZSAoaWYKK3ByZXNlbnQpLCB0aGUgYmxvY2sgcmFuZ2VzIGZvciBlYWNoIGJsb2NrIGdyb3VwLCBhbmQgdGhlIG9mZnNldCBmcm9tCit0aGUgYmVnaW5uaW5nIG9mIHRoZSBibG9jayBncm91cC4KKworTWtlMmZzIG5vdyBkaXN0cmlidXRlcyB0aGUgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcCBibG9rIHNvIHRoYXQgdGhlCit3b24ndCBiZSBjb25jZW50cmF0ZWQgaW4gb25lIG9yIHR3byBkaXNrcyBpbiBSQUlEL3N0cmlwaW5nIHNldHVwcy4KK0Fsc28sIGlmIHRoZSB1c2VyIGNob29zZXMgYSAyayBvciA0ayBibG9jayBncm91cCwgbWtlMmZzIHdpbGwgdHJ5IHRvCitjaG9vc2UgdGhlIGxhcmdlc3QgYmxvY2tzIHBlciBncm91cCB0aGF0IGJlIGNob3Nlbi4gIChGb3IgMmsgYmxvY2tzLAoreW91IGNhbiBoYXZlIHVwIHRvIDE2Mzg0IGJsb2Nrcy9ncm91cDsgZm9yIDRrIGJsb2NrcywgeW91IGNhbiBoYXZlIHVwCit0byAzMjc2OCBibG9ja3MvZ3JvdXAuKSAgUHJldmlvdXNseSBta2UyZnMgd291bGQgbm90IGFsbG93CitzcGVjaWZpY2F0aW9uIG9mIG1vcmUgdGhhbiA4MTkyIGJsb2NrcyBwZXIgZ3JvdXAsIGV2ZW4gaWYgeW91IHdlcmUKK3VzaW5nIGEgMmsgb3IgNGsgYmxvY2sgZ3JvdXAuCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkZWQgYSBuZXcgZnVuY3Rpb24gZXh0MmZzX2NyZWF0ZV9pY291bnQyKCkgd2hpY2ggdGFrZXMgYSAiaGludCIKK2FyZ3VtZW50LiAgVGhpcyBoaW50IGFyZ3VtZW50IHByZXNldHMgdGhlIGljb3VudCBhcnJheSB3aXRoIHRoZSBsaXN0CitvZiBpbm9kZXMgd2hpY2ggYWN0dWFsbHkgbmVlZCB0byBiZSBpbiB0aGUgaWNvdW50IGFycmF5LiAgVGhpcyByZWFsbHkKK2hlbHBzIHRvIHNwZWVkIHVwIGUyZnNjay4KKworQWRkZWQgYSBuZXcgZnVuY3Rpb24gZXh0MmZzX2ljb3VudF92YWxpZGF0ZSgpIHdoaWNoIGNoZWNrcyB0aGUgcmVwCitpbnZhcmlhbnQgZm9yIHRoZSBpY291bnQgc3RydWN0dXJlLiAgVGhpcyBpcyB1c2VkIG1vc3RseSBmb3IgdGVzdGluZy4KKworVGhlIGVycm9yIG1lc2FzYWdlIGdpdmVuIHdoZW4gYSBiYWQgaW5vZGUgbnVtYmVyIGlzIHBhc3NlZCB0bwordGVzdF9nZW5lcmljX2JpdG1hcCB0byByZWZsZWN0IEVYVDJGU19URVNUX0VSUk9SIChpbnN0ZWFkIG9mCitFWFQyRlNfVU5NQVJLX0VSUk9SKS4KKworQWRkZWQgYSBuZXcgZnVuY3Rpb24gZXh0MmZzX3NldF9kaXJfYmxvY2sgd2hpY2ggc2V0cyB0aGUgYmxvY2sgb2YgYQorZGJsaXN0IGVudHJ5LCBnaXZlbiB0aGUgZGlyZWN0b3J5IGlub2RlIGFuZCBibG9ja2NudC4KKworQWRkZWQgYSBuZXcgZnVuY3Rpb24gZXh0MmZzX2dldF9saWJyYXJ5X3ZlcnNpb24oKSB3aGljaCByZXR1cm5zIHRoZQorY3VycmVudCBsaWJyYXJ5IHZlcnNpb24sIGFuZCBleHQyZnNfcGFyc2VfdmVyc2lvbl9zdHJpbmcoKSB3aGljaAorcmV0dXJucyBhIHZlcnNpb24gbnVtYmVyIGJhc2VkIG9uIGEgZTJmc3Byb2dzIHZlcnNpb24gc3RyaW5nLgorCitUaGUgaWNvdW50IGZ1bmN0aW9ucyB3aWxsIHJldHVybiBFSU5WQUwgaWYgdGhlIHBhc3NlZCBpbiBpbm9kZSBudW1iZXIKK2lzIG91dCBvZiBib3VuZHMuCisKK0UyZnNwcm9ncyAxLjA3IChNYXJjaCA5LCAxOTk3KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0UyZnNjayBpcyBub3cgdXNlcyBtdWNoIGxlc3MgbWVtb3J5IHdoZW4gY2hlY2tpbmcgcmVhbGx5IGxhcmdlCitmaWxlc3lzdGVtcyAob3IgcmF0aGVyLCBmaWxlc3lzdGVtcyB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIGlub2RlcykuCitQcmV2aW91c2x5IGEgZmlsZXN5c3RlbSB3aXRoIDEgbWlsbGlvbiBpbm9kZXMgcmVxdWlyZWQgNCBtZWdhYnl0ZXMgb2YKK21lbW9yeSB0byBzdG9yZSBpbm9kZSBjb3VudCBzdGF0aXN0aWNzOyB0aGF0IHN0b3JhZ2UgcmVxdWlyZW1lbnQgaGFzCitub3cgYmVlbiByZWR1Y2VkIHRvIHJvdWdobHkgaGFsZiBhIG1lZ2FieXRlLgorCitFMmZzY2sgY2FuIG5vdyBwcm9wZXJseSBkZWFsIHdpdGggYmFkIGJsb2NrcyBhcHBlYXJpbmcgaW5zaWRlIHRoZQoraW5vZGUgdGFibGUuICBJbnN0ZWFkIG9mIHRyeWluZyB0byByZWxvY2F0ZSB0aGUgaW5vZGUgdGFibGUgKHdoaWNoCitvZnRlbiBmYWlsZWQgYmVjYXVzZSB0aGVyZSB3YXNuJ3QgZW5vdWdoIHNwYWNlKSwgdGhlIGlub2RlcyBpbiB0aGUgYmFkCitibG9jayBhcmUgbWFya2VkIGFzIGluIHVzZS4KKworRTJmc2NrIHdpbGwgYXV0b21hdGljYWxseSB0cnkgdG8gdXNlIHRoZSBiYWNrdXAgc3VwZXJibG9ja3MgaWYgdGhlCitwcmltYXJ5IHN1cGVyYmxvY2tzIGhhdmUgYSBiYWQgbWFnaWMgbnVtYmVyIG9yIGhhdmUgbWlzc2luZyBtZXRhLWRhdGEKK2Jsb2NrcyAob3IgbWV0YS1kYXRhIGJsb2NrcyB3aGljaCBhcmUgb3V0IG9mIHJhbmdlKS4KKworRTJmc2NrJ3MgcGFzcyAzIGhhcyBiZWVuIG1hZGUgbW9yZSBlZmZpY2llbnQ7IG1vc3Qgbm90aWNlYWJsZSBvbgorZmlsZXN5c3RlbXMgd2l0aCBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mIGRpcmVjdG9yaWVzLgorCitDb21wbGV0ZWx5IHJldmFtcGVkIGUyZnNjaydzIHN5c3RlbSBvZiBwcmludGluZyBwcm9ibGVtIHJlcG9ydHMuICBJdAoraXMgbm93IHRhYmxlIGRyaXZlbiwgdG8gbWFrZSB0aGVtIG1vcmUgZWFzaWx5IGN1c3RvbWl6ZWFibGUgYW5kCitleHRlbmRhYmxlLiAgRXJyb3IgbWVzc2FnZXMgd2hpY2ggY2FuIGJlIHByaW50ZWQgb3V0IGR1cmluZyBwcmVlbiBtb2RlCithcmUgbm93IG9uZSBsaW5lIGxvbmcuCisKK0ZpeGVkIGUyZnNjaydzIGZpbGVzeXN0ZW0gc3dhcHBpbmcgY29kZSBzbyB0aGF0IGl0IHdvbid0IHRyeSB0byBzd2FwCitmYXN0IHN5bWJvbGljIGxpbmtzIG9yIGRlbGV0ZWQgZmlsZXMuCisKK0ZpeGVkIGUyZnNjayBjb3JlIGR1bXBpbmcgd2hlbiBmaXhpbmcgYSBmaWxlc3lzdGVtIHdoaWNoIGhhcyBubworZGlyZWN0b3JpZXMgKG5vdCBldmVuIGEgcm9vdCBkaXJlY3RvcnkpLgorCitBZGRlZCBhIGNoZWNrIHRvIGUyZnNjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbGVuZ3RoIG9mIGV2ZXJ5CitkaXJlY3RvcnkgZW50cnkgaXMgYSBtdWx0aXBsZSBvZiA0IChzaW5jZSB0aGUga2VybmVsIGNvbXBsYWlucyBpZiBpdAoraXNuJ3QpLgorCitBZGRlZCBhIGNoZWNrIHRvIGUyZnNjayB0byBtYWtlIHN1cmUgdGhhdCBhIGRpcmVjdG9yeSBlbnRyeSBpc24ndCBhCitsaW5rIHRvIHRoZSByb290IGRpcmVjdG9yeSwgc2luY2UgdGhhdCBpc24ndCBhbGxvd2VkLgorCitBZGRlZCBhIGNoZWNrIHRvIGUyZnNrIHRvIG5vdyBtYWtlIHN1cmUgdGhlICcuJyBhbmQgJy4uJyBkaXJlY3RvcnkKK2VudHJpZXMgYXJlIG51bGwgdGVybWluYXRlZCwgc2luY2UgdGhlIDIuMCBrZXJuZWwgcmVxdWlyZXMgaXQuCisKK0FkZGVkIGNoZWNrIHRvIHdyaXRlX2JpdG1hcHMoKSB0byBtYWtlIHN1cmUgdGhlIHN1cGVyYmxvY2sgZG9lc24ndCBnZXQKK3RyYXNoZWQgaWYgdGhlIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBpcyBtYXJrZWQgYXMgYmVpbmcgYmxvY2sgemVyby4KKworQWRkZWQgY2hlY2tpbmcgb2YgdGhlIG5ldyBmZWF0dXJlIHNldCBmaWVsZHMgaW4gdGhlIHN1cGVyYmxvY2ssIHRvCithdm9pZCBkZWFsaW5nIHdpdGggbmV3IGZpbGVzeXN0ZW0gZmVhdHVyZXMgdGhhdCB0aGlzIHBhY2thZ2Ugd2Fzbid0CitzZXQgdXAgdG8gaGFuZGxlLgorCitGaXhlZCBhIGZlbmNlcG9zdCBlcnJvciBpbiBleHQyZnNfbmV3X2Jsb2NrKCkgd2hpY2ggd291bGQgb2NjYXNpb25hbGx5Cit0cnkgdG8gYWxsb2NhdGUgYSBibG9jayBiZXlvbmQgdGhlIGVuZCBvZiBhIGZpbGVzeXN0ZW0uCisKK1doZW4gdGhlIFVVSUQgbGlicmFyeSBwaWNrcyBhIHJhbmRvbSBJRUVFIDgwMiBhZGRyZXNzIChiZWNhdXNlIGl0CitjYW4ndCBmaW5kIG9uZSBmcm9tIGEgbmV0d29yayBjYXJkKSwgaXQgc2V0cyB0aGUgbXVsdGljYXN0IGJpdCwgdG8KK2F2b2lkIGNvbmZsaWN0aW5nIHdpdGggYSBsZWdpdGltYXRlIElFRUUgODAyIGFkZHJlc3MuCisKK01rZTJmcyBub3cgc2V0cyB0aGUgcm9vdCBkaXJlY3RvcnkncyBvd25lciB0byBiZSB0aGUgcmVhbCB1aWQgb2YgdGhlCit1c2VyIHJ1bm5pbmcgbWtlMmZzLiAgSWYgdGhlIHJlYWwgdWlkIGlzIG5vbi16ZXJvLCBpdCBhbHNvIHNldHMKK3RoZSBncm91cCBvd25lcnNoaXAgb2YgdGhlIHJvb3QgZGlyZWN0b3J5IHRvIGJlIHRoZSByZWFsIGdyb3VwLWlkIG9mCit0aGUgdXNlciBydW5uaW5nIG1rZTJmcy4KKworTWtlMmZzIG5vdyBoYXMgbW9yZSBpbnRlbGxpZ2VudCBlcnJvciBjaGVja2luZyB3aGVuIGl0IGlzIGdpdmVuIGEKK25vbi1leGlzdGVudCBkZXZpY2UuCisKK1doZW4gYmFkYmxvY2tzIGlzIGdpdmVuIHRoZSAtdnYgb3B0aW9uLCBpdCBub3cgdXBkYXRlcyB0aGUgYmxvY2sgdGhhdAoraXQgaXMgY3VycmVudGx5IHRlc3Rpbmcgb24gZXZlcnkgYmxvY2suCisKK0ZpeGVkIGEgYnVnIGluIGZzY2sgd2hlcmUgaXQgd291bGRuJ3QgbW9kaWZ5IHRoZSBQQVRIIGVudmlybm9tZW50CitjdXJyZW50bHkgY29ycmVjdGx5IGlmIFBBVEggd2Fzbid0IGFscmVhZHkgc2V0LgorCitTaGFyZWQgbGlicmFyaWVzIG5vdyBidWlsdCB3aXRoIGRlcGVuZGVuY2llcy4gIFRoaXMgYWxsb3dzIHRoZSBzaGFyZWQKK2xpYnJhcnkgZmlsZXMgdG8gYmUgdXNlZCB3aXRoIGRsb3BlbigpOyBpdCBhbHNvIG1ha2VzIHRoZSB0cmFuc2l0aW9uCit0byBsaWJjIDYgZWFzaWVyLCBzaW5jZSBsZC5zbyBjYW4gdGVsbCB3aGljaCBsaWJjIGEgcGFydGljdWxhciBzaGFyZWQKK2xpYnJhcnkgZXhwZWN0cyB0byB1c2UuCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkZWQgbmV3IGFic3RyYWN0aW9uIChkZWZpbmVkIGluIGRibGlzdC5jKSBmb3IgbWFpbnRhaW5pbmcgYSBsaXN0IG9mCitibG9ja3Mgd2hpY2ggYmVsb25ncyB0byBkaXJlY3Rvcmllcy4gIFRoaXMgaXMgdXNlZCBpbiBlMmZzY2sgYW5kIG90aGVyCitwcm9ncmFtcyB3aGljaCBuZWVkIHRvIGl0ZXJhdGUgb3ZlciBhbGwgZGlyZWN0b3JpZXMuCisKK0FkZGVkIG5ldyBmdW5jdGlvbnMgd2hpY2ggdGVzdCB0byBzZWUgaWYgYSBjb250aWd1b3VzIHJhbmdlIG9mIGJsb2NrcworKG9yIGlub2RlcykgYXJlIGF2YWlsYWJsZS4gIChleHQyZnNfKl9iaXRtYXBfcmFuZ2UpLgorCitBZGRlZCBuZXcgZnVuY3Rpb24gKGV4dDJfaW5vZGVfaGFzX3ZhbGlkX2Jsb2Nrcykgd2hpY2ggcmV0dXJucyB0cnVlIGlmCithbiBpbm9kZSBoYXMgdmFsaWQgYmxvY2tzLiAgKG1vdmVkIGZyb20gZTJmc2NrIGNvZGUpLgorCitBZGRlZCBuZXcgZnVuY3Rpb24gKGV4dDJmc19hbGxvY2F0ZV90YWJsZXMpIHdoaWNoIGFsbG9jYXRlcyB0aGUKK21ldGEtZGF0YSBibG9ja3MgYXMgcGFydCBvZiBpbml0aWFsaXppbmcgYSBmaWxlc3lzdGVtLiAgKG1vdmVkIGZyb20KK21rZTJmcyBjb2RlKS4KKworQWRkZWQgYSBuZXcgSS9PIG1hbmFnZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMuICBJdCB3aWxsIGVpdGhlciBhbGxvdyBhCitwcm9ncmFtIHRvIGludGVyY2VwdCBJL08gcmVxdWVzdHMsIG9yIHByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyB0bwordHJhY2UgdGhlIGFjdGl2aXR5IG9mIGEgcHJvZ3JhbSB1c2luZyB0aGUgSS9PIG1hbmFnZXIuCisKK1RoZSBiYWRibG9ja3NfbGlzdCBmdW5jdGlvbnMgbm93IHN0b3JlIHRoZSBiYWQgYmxvY2tzIGluIGEgc29ydGVkCitvcmRlciwgYW5kIHVzZSBhIGJpbmFyeSBzZWFyY2ggdG8gc3BlZWQgdXAgYmFkYmxvY2tzX2xpc3RfdGVzdC4KKworVGhlIGlub2RlIHNjYW4gZnVuY3Rpb24gZXh0MmZzX2dldF9uZXh0X2lub2RlKCkgbWF5IG5vdyByZXR1cm4gYSBzb2Z0CitlcnJvciByZXR1cm5zOiBNSVNTSU5HX0lOT0RFX1RBQkxFIGFuZCBCQURfQkxPQ0tfSU5fSU5PREVfVEFCTEUgaW4KK3Rob3NlIGNhc2VzIHdoZXJlIHBhcnQgb2YgYW4gaW5vZGUgdGFibGUgaXMgbWlzc2luZyBvciB0aGVyZSBpcyBhIGJhZAorYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlLiAgCisKK0FkZGVkIGEgbmV3IGZ1bmN0aW9uIChleHQyZnNfYmxvY2tfaXRlcmF0ZTIpIHdoaWNoIGFkZHMgbmV3IGFyZ3VtZW50cyB0bwordGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJldHVybiBhIHBvaW50ZXIgKGJsb2NrIGFuZCBvZmZzZXQpIHRvIHRoZQorcmVmZXJlbmNlIG9mIHRoZSBibG9jay4KKworQWRkZWQgbmV3IGZ1bmN0aW9uIChleHQyZnNfaW5vZGVfc2Nhbl9nb3RvX2Jsb2NrZ3JvdXApIHdoaWNoIGFsbG93cyBhbgorYXBwbGljYXRpb24gdG8ganVtcCB0byBhIHBhcnRpY3VsYXIgYmxvY2sgZ3JvdXAgd2hpbGUgZG9pbmcgYW4gaW5vZGUKK3NjYW4uCisKK1RoZSBiYWRibG9ja3MgbGlzdCBmdW5jdGlvbnMgd2VyZSByZW5hbWVkIGZyb20gYmFkYmxvY2tzXyogdG8KK2V4dDJmc19iYWRibG9ja3NfKi4gIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlCitmb3Igbm93LCBidXQgcHJvZ3JhbXMgc2hvdWxkIGJlIG1vZGlmaWVkIHRvIHVzZSB0aGUgbmV3IGludGVyZmFjZS4KKworU29tZSBvZiB0aGUgbGlicmFyeSBmdW5jdGlvbnMgd2VyZSByZW9yZ2FuaXplZCBpbnRvIHNlcGFyYXRlIGZpbGVzIHRvCityZWR1Y2UgdGhlIHNpemUgb2Ygc29tZSBwcm9ncmFtcyB3aGljaCBzdGF0aWNhbGx5IGxpbmsgYWdhaW5zdCB0aGUKK2V4dDIgbGlicmFyeS4KKworUHV0IGluIHNvbWUgbWlzY2VsbGFuZW91cyBmaXhlcyBmb3IgdGhlIEFscGhhIHBsYXRmb3JtLgorCisKK0UyZnNwcm9ncyAxLjA2IChPY3RvYmVyIDcsIDE5OTYpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlZCBzZXJpb3VzIGJ1ZyBpbiBlMmZzY2s6IGlmIHRoZSBibG9jayBkZXNjcmlwdG9ycyBhcmUgYmFkLCBkb24ndAorc21hc2ggdGhlIGJhY2t1cCBjb3BpZXMgaW4gZXh0MmZzX2Nsb3NlKCkuICAoVGhlIHByb2JsZW0gd2FzIHRoYXQgd2hlbgorZTJmc2NrIC1wIGRpc2NvdmVyZWQgdGhlIHByb2JsZW0sIHdoaWxlIGl0IHdhcyBjbG9zaW5nIHRoZSBmaWxlc3lzdGVtCithbmQgZXhpdGluZywgaXQgd2FzIGFsc28gYmxvd2luZyBhd2F5IHRoZSBiYWNrdXAgc3VwZXJibG9ja3Mgb24gdGhlCitkaXNrLCB3aGljaCB3YXMgbGVzcyB0aGFuIGZyaWVuZGx5LikgIFdlIG5vdyBtYWtlIGl0IHRoZSBjYXNlIHRoYXQgd2UKK29ubHkgd3JpdGUgb3V0IHRoZSBiYWNrdXAgc3VwZXJibG9jayBhbmQgdGhlIGJhY2sgYmxvY2sgZGVzY3JpcHRvcnMgaWYKK3RoZSBmaWxlc3lzdGVtIGlzIGNvbXBsZXRlbHkgZnJlZSBmcm9tIHByb2JsZW1zLgorCitGaXhlZCBhIGJ1ZyBpbiBibG9ja19pbnRlcmF0ZSBpbiB0aGUgbGliL2V4dDJmcyBsaWJyYXJ5IHdoaWNoIGNhdXNlZAorZTJmc2NrIHRvIGZhaWwgb24gR05VIEh1cmQtY3JlYXRlZCBmaWxlc3lzdGVtcy4KKworQWRkIHN1cHBvcnQgZm9yIExpbnV4L0ZUJ3MgYm9vdGxvYWRlciwgd2hpY2ggYWN0dWFsbHkgdXNlcworRVhUMl9CT09UX0xPQURFUiwgYW5kIHNldHMgaXRzIG1vZGUgYml0cyB3aGljaCBjYXVzZWQgZTJmc2NrIHRvIHdhbnQKK3RvIGNsZWFyIHRoZSBpbm9kZS4KKworQWRkIHN1cHBvcnQgZm9yIHRoZSAiQSIgKG5vIGF0aW1lIHVwZGF0ZSkgYXR0cmlidXRlLiAgKE5vdGU6IHRoaXMKK2F0dHJpYnV0ZSBpcyBub3QgeWV0IGluIHByb2R1Y3Rpb24ga2VybmVscy4pCisKK1RoZSB0ZXN0IHN1aXRlIGlzIG5vdCBhdXRvbWF0aWNhbGx5IHJ1biB3aGVuIGRvaW5nIGEgIm1ha2UgYWxsIiBmcm9tCit0aGUgdG9wIGxldmVsIGRpcmVjdG9yeS4gIFVzZXJzIHNob3VsZCBtYW51YWxseSBydW4gIm1ha2UgY2hlY2siIGlmCit0aGV5IHdpc2ggdG8gcnVuIHRoZSB0ZXN0IHN1aXRlLgorCitVcG9uIGEgcHJlZW5oYWx0KCksIG1ha2UgdGhlIHByaW50ZWQgbWVzc2FnZSBtb3JlIGV4cGxpY2l0IHRoYXQKK3J1bm5pbmcgZTJmc2NrICJNQU5BVUxMWSIgbWVhbnMgd2l0aG91dCB0aGUgLXAgb3IgLWEgb3B0aW9ucy4KKworSW4gZTJmc2NrLCBpZiBhIGRpc2Nvbm5lY3RlZCBpbm9kZSBpcyB6ZXJvLWxlbmd0aCwgb2ZmZXIgdG8gY2xlYXIgaXQKK2luc3RlYWQgb2Ygb2ZmZXJpbmcgdG8gY29ubmVjdCBpdCB0byBsb3N0K2ZvdW5kLgorCitJbiBlMmZzY2ssIGlmIGEgZmlsZXN5c3RlbSB3YXMganVzdCB1bm1vdW50ZWQgdW5jbGVhbmx5LCBhbmQgbmVlZHMKK2UyZnNjayB0byBiZSBydW4gb3ZlciBpdCwgY2hhbmdlIGUyZnNjayB0byBleHBsaWNpdGx5IGRpc3BsYXkgdGhpcworZmFjdC4KKworRm9yIGR1bXBlMmZzIGFuZCBlMmZzY2ssIGNhdXNlIHRoZSAtViBvcHRpb24gdG8gcHJpbnQgb3V0IHdoaWNoCit2ZXJzaW9uIG9mIHRoZSBleHQyZnMgbGlicmFyeSBpcyBhY3R1YWxseSBnZXR0aW5nIHVzZWQuICAoVGhpcyB3aWxsCitoZWxwIGRldGVjdCBtaXNtYXRjaGVzIG9mIHVzaW5nIGEgMS4wNiB1dGlsaXR5IHdpdGggYSAxLjA1IGxpYnJhcnksCitldGMuKQorCitQcm9ncmFtbWVycycgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VYVDJfU1dBUF9CWVRFUyB3YXMgY2hhbmdlZCB0byBFWFQyX0ZMQUdfU1dBUF9CWVRFUywgd2hpY2ggYmV0dGVyIGZpdHMKK3RoZSBuYW1pbmcgY29udmVudGlvbi4KKworSW4gZXh0MmZzX2luaXRpYWxpemUoKSwgbWFrZSBzdXJlIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGlub2RlIGJpdG1hcAoraXMgY29ycmVjdGx5IGluaXRpYWxpemUuCisKK0ZpeGVkIG1pbm9yIHR5cGUgdHlwbyBpbiBleHQyZnNfYWxsb2NhdGVfZ2VuZXJpY19iaXRtYXAoKTsKKworRTJmc3Byb2dzIDEuMDUgKFNlcHRlbWJlciA3LCAxOTk2KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBZGQgc3VwcG9ydCBmb3IgbmV3IGZpZWxkcyBpbiB0aGUgZXh0MiBzdXBlcmJsb2NrIC0tLSB2b2x1bWUgbmFtZSwKK3ZvbHVtZSBVVUlELCBhbmQgbGFzdCBtb3VudGVkIGZpZWxkLiAgRHVtcGUyZnMgZGlzcGxheXMgdGhlc2UgZmllbGRzLAordHVuZTJmcyBhbmQgbWtlMmZzIGFsbG93cyB5b3UgdG8gc2V0IHRoZW0uICBFMmZzY2sgd2lsbCBhdXRvbWF0aWNhbGx5CitnZW5lcmF0ZSBhIFVVSUQgZm9yIHRob3NlIHZvbHVtZXMgdGhhdCBkb24ndCBoYXZlIHRoZW0uICAKKworUHV0IGluIHN1cHBvcnQgZm9yIGUyZnNjayB0byByZWNvZ25pemUgSFVSRCBzcGVjaWZpYyBleHQyIGZlYXR1cmVzIC0tLQorbW9zdCBub3RhYmx5LCB0aGUgdHJhbnNsYXRvciBibG9jay4gIFRoZSBlMmZzcHJvZ3MgdG9vbHMgd2lsbCBub3cgdXNlCit0aGUgY3JlYXRvcl9vcyBmaWVsZCBpbiB0aGUgc3VwZXJibG9jayB0byBjb3JyZWN0bHkgaGFuZGxlIGRpZmZlcmVudAorT1Mtc3BlY2lmaWMgdmFyaWFudHMgb2YgdGhlIGV4dDIgZmlsZXN5c3RlbS4KKworRTJmc2NrIG5vdyBmaXhlcyBpbm9kZXMgd2hpY2ggaGF2ZSBhIHRoZSBkZWxldGlvbiB0aW1lIHNldCwgYnV0IHdoaWNoCitoYXZlIGEgbm9uLXplcm8gaV9saW5rX2NvdW50IGZpZWxkIGJ5IG9mZmVyaW5nIHRvIGNsZWFyIHRoZSBkZWxldGlvbgordGltZS4gIFByZXZpb3VzbHkgZTJmc2NrIGFzc3VtZWQgdGhhdCB0aGUgaW5vZGUgd2FzIGRlbGV0ZWQgKHBlciAwLjNjCitleHQyIGtlcm5lbCBiZWhhdmlvcikgYW5kIG9mZmVyZWQgdG8gdW5saW5rIHRoZSBmaWxlLgorCitJZiBlMmZzY2sgc2V0cyB0aGUgY2xlYW4gYml0LCBidXQgbm90aGluZyBlbHNlLCBzZXQgdGhlIGV4aXQgY29kZQorRlNDS19OT05ERVNUUlVDVC4gIEFmdGVyIGFsbCwgZTJmc2NrIGRpZCBmaXggYSBmaWxlc3lzdGVtIGVycm9yIC0tLSBpdAorc2V0IHRoZSBmaWxlc3lzdGVtIHZhbGlkIGJpdCB3aGVuIGl0IHdhcyBwcmV2aW91c2x5IGNsZWFyZWQuICA6LSkgVGhpcword2FzIG5lZWRlZCB0byBtYWtlIHRoZSBIVVJEIGZzY2sgZHJpdmVyIGhhcHB5LgorCitJZiB0aGUgIHVzZXIgIHJlZnVzZXMgdG8gYXR0YWNoIGFuICB1bmF0dGFjaGVkICBpbm9kZSwgZTJmc2NrICB3aWxsIG5vCitsb25nZXIgc2V0IHRoZSBpbm9kZSdzIGxpbmsgY291bnQuICBPdGhlcndpc2UsIHRoZSAgaW5vZGUgd291bGQgZW5kIHVwCitnZXR0aW5nIG1hcmtlZCBhcyB1bnVzZWQsIHdoaWNoIG1pZ2h0IGNhdXNlIGxvc3Mgb2YgZGF0YSBsYXRlci4KKworTWFrZSB0aGUgbWVzc2FnZSBpc3N1ZWQgYnkgZTJmc2NrIHdoZW4gdGhlIHN1cGVyYmxvY2sgaXMgY29ycnVwdCBsZXNzCitjb25mdXNpbmcgZm9yIHVzZXJzLiAgSXQgbm93IG1lbnRpb25zIHRoYXQgYW5vdGhlciByZWFzb24gZm9yIHRoZQorImNvcnJ1cHQgc3VwZXJibG9jayIgbWVzc2FnZSBtaWdodCBiZSB0aGF0IHRoZSBwYXJ0aXRpb24gbWlnaHQgbm90IGJlCithbiBleHQyIGZpbGVzeXN0ZW0gYXQgYWxsIChpdCBtaWdodCBzd2FwLCBtc2RvcyBmaWxlc3lzdGVtLCB1ZnMsIGV0Yy4pCisKK01ha2UgdGhlIGxpYmV4dDIgbGlicmFyeSBtb3JlIHJvYnVlc3Qgc28gdGhhdCBlMmZzY2sgd29uJ3QgY29yZWR1bXAgb24KK2FuIGlsbGVnYWwgc3VwZXJibG9jayB3aGVyZSB0aGUgYmxvY2tzaXplIGlzIHplcm8uICAoZl9jcmFzaGRpc2sgaXMKK3RoZSB0ZXN0IGNhc2UpLgorCitCeSBkZWZhdWx0LCBjcmVhdGUgZmlsZXN5c3RlbXMgd2hlcmUgdGhlIGRlZmF1bHQgY2hlY2tpbnRlcnZhbCBpcyA2Cittb250aHMgKDE4MCBkYXlzKS4gIExpbnV4IHNlcnZlcnMgY2FuIGJlIHJvYnVzdCBlbm91Z2ggdGhhdCAyMCByZWJvb3RzCitjYW4gYmUgYSBsb25nLCBsb25nIHRpbWUuCisKK0FkZGVkIGNvbmZpZ3VyZSBmbGFnIC0tZW5hYmxlLW9sZC1iaXRvcHMsIHdoaWNoIGZvcmNlcyB0aGUgYml0b3BzIHRvCit1c2UgdGhlIG9sZCAobmF0aXZlKSBiaXRtYXNrIG9wZXJhdGlvbnMuICBCeSBkZWZhdWx0IG9uIHRoZSBzcGFyYworcGxhdGZvcm0sIHRoZSBzdGFuZGFyZCBleHQyIGJpdCBvcmRlcmluZyBpcyBub3cgdXNlZC4KKworQWRkZWQgYSBuZXcgZmVhdHVyZSB0byBlMmZzY2sgdG8gYnl0ZS1zd2FwIGZpbGVzeXN0ZW1zOyB0aGlzIGNhbiBiZQordXNlZCB0byBjb252ZXJ0IG9sZCBtNjhrIGZpbGVzeXN0ZW1zIHRvIHVzZSB0aGUgc3RhbmRhcmQgYnl0ZS1vcmRlcgorc3RvcmFnZSBmb3IgdGhlIHN1cGVyYmxvY2ssIGlub2RlcywgYW5kIGRpcmVjdG9yeSBibG9ja3MuICBUaGlzCitmdW5jdGlvbiBpcyBpbnZva2VkIGJ5IHVzaW5nIHRoZSAnLXMnIG9wdGlvbiB0byBlMmZzY2suCisKK0RlYnVnZnMncyAiZHVtcCIgY29tbWFuZCBoYXMgYmVlbiBlbmhhbmNlZCBzbyB0aGF0IGl0IHdyaXRlcyBvdXQgdGhlCitleGFjdCBzaXplIG9mIHRoZSBmaWxlIHNvIHRoYXQgdGhlIG51bGxzIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYXJlCitlbGltaW5hdGVkLiAgVGhlIGNvbW1hbmQgYWxzbyBhY2NlcHQgYSBuZXcgIi1wIiBvcHRpb24gd2hpY2ggd2lsbAorYXR0ZW1wdCBwcmVzZXJ2ZSB0byBwcmVzZXJ2ZSB0aGUgb3duZXJuc2hpcCwgcGVybWlzc2lvbnMsIGFuZAorZmlsZSBtb2RpZmljYXRpb24vYWNjZXNzIHRpbWVzLgorCitEZWJ1Z2ZzIGhhcyB0d28gbmV3IG9wdGlvbnMsIC1mIGFuZCAtUi4gIFRoZSAtUiBvcHRpb24gYWxsb3dzIHRoZSB1c2VyCit0byBleGVjdXRlIGEgc2luZ2xlIGRlYnVnZnMgY29tbWFuZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuICBUaGUgLWYKK29wdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSBhICJjb21tYW5kIGZpbGUiIGNvbnRhaW5pbmcgZGVidWdmcworY29tbWFuZHMgd2hpY2ggd2lsbCBnZXQgZXhlY3V0ZWQuCisKK0R1bXBlMmZzIG5vdyBwcmV0dHkgcHJpbnRzIHRoZSBjaGVjayBpbnRlcnZhbCwgaW5zdGVhZCBvZiBqdXN0CitwcmludGluZyB0aGUgY2hlY2sgaW50ZXJ2YWwgYXMgYSBudW1iZXIgb2Ygc2Vjb25kcy4KKworRml4IGJ1Z3MgaW4gZGVidWdmczogdGhlIHBhcmFtcyBjb21tYW5kIHdoZW4gbm8gZmlsZXN5c3RlbSBpcyBvcGVuZWQKK25vIGxvbmdlciBjYXVzZXMgYSBjb3JlIGR1bXAuICBJdCBpcyBub3cgcG9zc2libGUgdG8gdW5saW5rIGEgZmlsZQord2hlbiBhIHBhdGhhbWUgY29udGFpbmluZyBhICcvJyBpcyBzcGVjaWZpZWQuCisKK1R1bmUyZnMgaGFzIGEgbmV3IC1DIG9wdGlvbiB3aGljaCBzZXRzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlCitmaWxlc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQuCisKK0ZpeCB0aGUgY2hhdHRyICctdicgb3B0aW9uIHNvIHRoYXQgaXQgYWN0dWFsbHkgd29ya3MuICBDaGF0dHIgd2FzCitiZWluZyBidWdneSBhYm91dCB0aGUgLXYgb3B0aW9uIHBhcnNpbmcuCisKK1Byb2dyYW1tZXJzJyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRpcmVjdG9yeSBsaWIvdXVpZCBjb250YWlucyBhIHNldCBvZiBsaWJyYXJ5IHJvdXRpbmVzIHRvIGdlbmVyYXRlCitEQ0UgY29tcGF0aWJsZSBVVUlEcy4gIAorCitFeHRlbmRlZCBleHQyZnNfbmFtZWkoKSB0byBoYW5kbGUgc3ltYm9saWMgbGlua3MuICBBZGRlZCBuZXcgZnVuY3Rpb24KK2V4dDJmc19uYW1pX2ZvbGxvdygpIHdoaWNoIHdpbGwgZm9sbG93IGxhc3Qgc3ltYm9saWMgbGluayBpbiB0aGUgY2FzZQord2hlcmUgdGhlIHBhdGhuYW1lIHBvaW50cyB0byBhIHN5bSBsaW5rLgorCitUaGUgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZnVuY3Rpb24gd2lsbCBub3cgcmV0dXJuIHRoZSBIVVJEIHRyYW5zbGF0b3IKK2Jsb2NrLCBpZiBwcmVzZW50LiAgVGhlIG5ldyBmbGFnIEJMT0NLX0ZMQUdfREFUQV9PTkxZIHdpbGwgY2F1c2UgdGhlCitpdGVyYXRvciB0byByZXR1cm4gZGF0YSBibG9ja3Mgb25seS4gIFRoZSBleHQyZnMuaCBmaWxlIG5vdyBkZWZpbmVzCitjb25zdGFudHMgQkxPQ0tfQ09VTlRfSU5ELCBCTE9DS19DT1VOVF9ESU5ELCBCTE9DS19DT1VOVF9USU5ELCBhbmQKK0JMT0NLX0NPVU5UX1RSQU5TTEFUT1IsIHdoaWNoIGFyZSB0aGUgbWFnaWMgdmFsdWVzIHBhc3NlZCBpbiB0aGUgYmxvY2sKK2NvdW50IGZpZWxkIG9mIHRoZSBpdGVyYXRvciBjYWxsYmFjayBmdW5jdGlvbi4KKworVGhlIHRlc3Qgc2NyaXB0IGRyaXZlciBub3cgdGFrZXMgYW4gb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50LCB3aGljaCBpcwordGhlIHRlc3QgY2FzZSB0byBiZSBydW4uICBUaGlzIGFsbG93cyB5b3UgdG8gcnVuIGEgdGVzdCBjYXNlIHdpdGhvdXQKK25lZWRpbmcgdG8gcnVuIHRoZSBlbnRpcmUgdGVzdCBzdWl0ZS4KKworT24gTGludXggRUxGIHN5c3RlbXMsIGluc3RhbGwgdGhlIC5zbyBmaWxlcyBpbiB0aGUgY29ycmVjdCBwbGFjZXMKKygvdXNyL2xpYikuICBUaGUgLnNvIGZpbGVzIG11c3QgYmUgc3RvcmVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUKKy5hIGZpbGVzLgorCitGaXhlZCBtaXNjZWxsYW5lb3VzIEhVUkQgY29tcGlsYXRpb24gaXNzdWVzIHdpdGggaGVhZGVyIGZpbGUgYmVpbmcKK2luY2x1ZGVkIGluIHRoZSByaWdodCBvcmRlci4KKworRml4ZWQgZGVidWdmcyBzbyB0aGF0IGl0IHJlc2V0cyBvcHRpbmQgdG8gemVybywgbm90IG9uZSwgc2luY2Ugc2V0dGluZworb3B0aW5kIHRvIHplcm8gaXMgbW9yZSBjb3JyZWN0LgorCisKK0UyZnNwcm9ncyAxLjA0IChNYXkgMTYsIDE5OTYpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXJzdCAib2ZmaWNpYWwiICgxLjAzIHdhcyBhIGxpbWl0ZWQgcmVsZWFzZSBvbmx5KSB0byBzdXBwb3J0IGJ1aWxkaW5nCitlMmZzcHJvZ3MgdW5kZXIgTGludXggMi4wIGtlcm5lbHMgKGFzIHdlbGwgYXMgbGF0ZSBtb2RlbCAxLjMgYW5kIDEuOTkKK2tlcm5lbHMpLgorCitUaGlzIHBhY2thZ2UgaW5jbHVkZXMgYSBSUE0gc3BlY3MgZmlsZSwgdGhhdCBpdCBjYW4gYmUgYnVpbHQgdXNpbmcgdGhlCitSZWRIYXQgUGFja2FnZSBNYW5hZ2VyLgorCitFMmZzY2sgbm93IHByaW50cyBhIGhpbnQgdGhhdCBpZiB0aGVyZSBhcmUgbG90cyBvZiBpbmNvcnJlY3RseSBsb2NhdGVkCitpbm9kZSBiaXRtYXBzLCBibG9jayBiaXRtYXBzLCBhbmQgaW5vZGUgdGFibGUgYmxvY2tzLCB0aGUgdXNlciBtaWdodAord2FudCB0byB0cnkgdXNpbmcgZTJmc2NrIC1iIDgxOTMgZmlyc3QsIHRvIHNlZSBpZiB0aGF0IGZhcmVzIGFueQorYmV0dGVyLgorCitGb3IgZXh0MiBmaWxlc3lzdGVtIHdyaXR0ZW4gd2l0aCB0aGUgaHVyZCwgZGVidWdmcyB3aWxsIG5vdyBwcmludCBvdXQKK3RoZSB0cmFuc2xhdG9yIGZpZWxkIHdoZW4gcHJpbnRpbmcgYW4gaW5vZGUgc3RydWN0dXJlLgorCitMb3RzIG9mIG1pc2NlbGxhbmVvdXMgbGlua2luZy9pbnN0YWxsYXRpb24gY2xlYW51cHM6CisKKyAgTGlicmFyaWVzIGFyZSBub3cgbGlua2VkIHVzaW5nIGEgcmVsYXRpdmUgcGF0aG5hbWUsIGluc3RlYWQgb2YKKyAgcmVseWluZyBvbiAtTCB3b3JraW5nIGNvcnJlY3QuICBJdCBkb2Vzbid0LCBpbiBtYW55IGNhc2VzLCBpbmNsdWRpbmcKKyAgY3VycmVudCB2ZXJzaW9ucyBvZiBHTlUgbGQuICBUaGlzIGd1YXJhbnRlZXMgdGhhdCB0aGUgYnVpbGQgdHJlZSBpcworICBsaW5raW5nIHdpdGggdGhlIHJpZ2h0IGxpYnJhcmllcywgaW5zdGVhZCBvZiB0aGUgb25lcyBpbnN0YWxsZWQgaW4KKyAgL3Vzci9saWIuCisKKyAgSGVhZGVyIGZpbGVzLCBtYW4gcGFnZXMsIGFuZCB0aGUgZXQvc3Mgc2hlbGwgc2NyaXB0cyBhcmUgbm93CisgIGdlbmVyYXRlZCB1c2luZyBhIGN1c3RvbSBzdWJzdGl0dXRpb24gc2NyaXB0LCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24KKyAgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuICBUaGlzIHByZXZlbnRzIG5lZWRsZXNzIHJlY29tcGlsYXRpb24gb2YKKyAgZmlsZXM7IGluIGFkZGl0aW9uLCB0aGUgY3VzdG9tIHN1YnN0aXR1dGlvbiBzY3JpcHQgaXMgbXVjaCBmYXN0ZXIuCisKKyAgZTJmc2NrIG1heSBub3cgYmUgbGlua2VkIGR5bmFtaWNhbGx5LCBieSB1c2luZyB0aGUKKyAgLS1lbmFibGUtZHluYW1pYy1lMmZzY2sgZmxhZyB0byBjb25maWd1cmUuICBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCwKKyAgc2luY2UgaXQgaW5jcmVhc2VzIGUyZnNjaydzIGRlcGVuZGVuY2Ugb24gb3RoZXIgZmlsZXMsIGJ1dCBzb21lCisgIHBlb3BsZSBuZWVkIHRvIHNhdmUgZGlzayBzcGFjZSwgYW5kIG90aGVyIGNyaXRpY2FsIHByb2dyYW1zIG9uIHRoZWlyCisgIHN5c3RlbXMgd2VyZSBiZWluZyBsaW5rZWQgZHluYW1pY2FsbHkgYW55d2F5LgorCisgIFByb2dyYW1zIHN1Y2ggYXMgZnNjayB3aGljaCBkaWRuJ3QgbmVlZCB0byBiZSBsaW5rZWQgYWdhaW5zdAorICBsaWJleHQyZnMgKG9yIG1rZTJmcyB3aGljaCBkaWRuJ3QgbmVlZCB0byBiZSBsaW5rZWQgYWdhaW5zdCBsaWJlMnApCisgIG9ubHkgbGluayBhZ2FpbnN0IGxpYnJhcmllcyB0aGV5IGFjdHVhbGx5IG5lZWQuICBPdGhlcndpc2UsIHRob3NlCisgIHByb2dyYW1zIHdvdWxkIHJlcXVpcmUgdGhlIHByZXNlbnNlIG9mIGxpYnJhcmllcyB0aGF0IG90aGVyd2lzZQorICBjb3VsZCBiZSByZW1vdmVkIGZyb20gYSByZXNjdXNlIGRpc2tldHRlLgorCisgIFRoZSBzcyBpbmNsdWRlIGZpbGVzIGFyZSBub3cgaW5zdGFsbGVkIGNvcnJlY3RseSBzbyB0aGV5IGNhbgorICBhY3R1YWxseSBiZSB1c2VkIGJ5IGFub3RoZXIgcGFja2FnZS4KKworICBJZiB0aGUgcHJvZmlsaW5nIGxpYnJhcmllcyBhcmUgYnVpbHQsIHRoZXkgYXJlIG5vdyBpbnN0YWxsZWQgb24gYQorICAibWFrZSBpbnN0YWxsLWxpYnMiLgorCisKK0UyZnNwcm9ncyAxLjAzIChNYXJjaCAyNywgMTk5NikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ2hhbmdlIHRoZSBtNjhrIGJpdCBudW1iZXJpbmcgZm9yIGJpdG1hc2tzIHRvIG1hdGNoIHRoZSBiaXQgbnVtYmVyaW5nCit1c2VkIGJ5IGFsbCBvdGhlciBleHQyIGltcGxlbWVudGF0aW9ucy4gIChUaGlzIGNoYW5nZSB3YXMgcmVxdWVzdGVkIGJ5Cit0aGUgbTY4ayBrZXJuZWwgZGV2ZWxvcG1lbnQgdGVhbS4pCisKK1N1cHBvcnQgKGluLWRldmVsb3BtZW50KSBmaWxlc3lzdGVtIGZvcm1hdCByZXZpc2lvbiB3aGljaCBzdXBwb3J0cworKGFtb25nIG90aGVyIHRoaW5ncykgZHluYW1pY2FsbHkgc2l6ZWQgaW5vZGVzLgorCitGaXhlZCBhIGJ1ZyBpbiB0aGUgZXh0MiBsaWJyYXJ5IHNvIHRoYXQgYW4gaW50ZWxsaWdlbnQgZXJyb3IgaXMKK3JldHVybmVkIGlmIG1rZTJmcyBpcyBydW4gd2l0aCBhIHJpZGljdWxvdXNseSBzbWFsbCBudW1iZXIgb2YgYmxvY2tzCitmb3IgYSBwYXJ0aXRpb24uCisKK0ZpeGVkIGEgYnVnIGluIHRoZSBleHQyIGxpYnJhcnkgd2hpY2ggcmVxdWlyZWQgdGhhdCB0aGUgZGV2aWNlIGJlCitvcGVuYWJsZSBpbiByZWFkL3dyaXRlIG1vZGUgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGl0cyBzaXplLiAgVGhpcworY2F1c2VkIGUyZnNjayAtbiB0byByZXF1aXJlIHJlYWQvd3JpdGUgYWNjZXNzIHdoZW4gaXQgd2FzIG5vdAorcHJldmlvdXNseSBuZWNlc3NhcnkuCisKK0ZpeGVkIGEgYnVnIGluIGUyZnNjayB3aGljaCBjYXN1ZWQgaXQgdG8gb2NjYXNpb25hbGx5IGZhaWwgdGhlIHRlc3QKK3N1aXRlIGRlcGVuZGluZyBvbiB3aGljaCB2ZXJzaW9uIG9mIHRoZSBmbG9hdGluZyBwb2ludCBsaWJyYXJ5IGl0IHdhcwordXNpbmcuCisKK0ZpeGVkIGEgYnVnIGluIGUyZnNjayBzbyB0aGF0IGl0IG5vdyBoYWx0cyB3aXRoIGEgZmF0YWwgZXJyb3Igd2hlbgorY2VydGFpbiBzdXBlcmJsb2NrIGNvbnNpc3RlbmN5IGNoZWNrcyBmYWlsLiAgUHJldmlvdXNseSBpdCBjb250aW51ZWQKK3J1bm5pbmcgZTJmc2NrLCB3aXRoIHNvbWUgcG90ZW50aWFsIGNvbmZ1c2luZy9kYW1hZ2luZyBjb25zZXF1ZW5jZXMuCisKK0FkZGVkIG5ldyBmbGFnIHRvIGZzY2sgd2hpY2ggYWxsb3dzIHRoZSByb290IHRvIGJlIGNoZWNrZWQgaW4gcGFyYWxsZWwKK3dpdGggb3RoZXIgZmlsZXN5dGVtcy4gIFRoaXMgaXMgbm90IHRoZSBzYWZlc3QgdGhpbmcgaW4gdGhlIHdvcmxkIHRvCitkbywgYnV0IHNvbWUgc3lzdGVtIGFkbWluaXN0cmF0b3JzIHJlYWxseSB3YW50ZWQgaXQuCisKK0ZpeGVkIC1XYWxsIGZsYW1lcyBpbiBsaWIvc3MuCisKKworRTJmc3Byb2dzIDEuMDIgKEphbnVhcnkgMTYsIDE5OTYpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IHRvIGFsbG93IGUyZnNwcm9ncyB0byBiZSBjb21waWxlZCBvbiByZWNlbnQgMS4zIChwbDQ1Kykga2VybmVscy4KKworQ2hhbmdlIGUyZnNjayB0byBwcmludCBzdGF0aXN0aWNzIG9mIGhvdyBtYW55IG5vbi1jb250aWd1b3VzIGZpbGVzIGFyZQorb24gdGhlIHN5c3RlbS4gIE5vdGUgdGhhdCBhIGZpbGUgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gOGsgYmxvY2tzLCBpdCBpcworZ3VhcmFudGVlZCB0byBiZSBub24tY29udGlndW91cy4KKworSW4gbWtlMmZzLCBwcmludCBhIHdhcm5pbmcgbWVzc2FnZSBpZiBhIHVzZXIgdHJpZXMgdG8gZm9ybWF0IGEgd2hvbGUKK2Rpc2sgKC9kZXYvaGRhIHZlcnN1cyAvZGV2L2hkYTEpLiAgSWYgYSB1c2VyIHJlYWxseSB3YW50cyB0byBmb3JtYXQgYQord2hvbGUgZGlzaywgdGhlIC1GIChmb3JjZSkgb3B0aW9uIGZvcmNlcyBta2UyZnMgdG8gZm9ybWF0IGEgd2hvbGUgZGlzaworYXMgYSBmaWxlc3l0ZW0uCisKK0ZpeCBhIGJ1ZyBpbiBmc2NrIHdoZXJlIGluIHNvbWUgY2FzZXMgaXQgbWlnaHQgc3RhcnQgY2hlY2tpbmcKK3BhcnRpdGlvbnMgaW4gdGhlIG5leHQgcGFzcyBiZWZvcmUgaXQgZmluaXNoZXMgY2hlY2tpbmcgcGFydGl0aW9ucyBpbgordGhlIGN1cnJlbnQgcGFzcy4gIFRoaXMgc3RpbGwgd29uJ3QgY2F1c2UgdHdvIHBhcnRpdGlvbnMgb24gdGhlIHNhbWUKK2Rpc2sgd2lsbCBiZSBjaGVja2VkLCBzbyBpdCdzIHJhcmVseSBhIHByb2JsZW0gaW4gcmVhbCBsaWZlLgorCitQYXRjaCBsc2F0dHIgc28gdGhhdCBpdCB3b24ndCBoYW5nIHdoZW4gY2hlY2tpbmcgYSBuYW1lZCBwaXBlLgorCitNaW5vciBjb21waWxhdGlvbiBmaXhlczoKKwkqIEZpeCB0aGUgb3JkZXIgb2YgbGlicmFyaWVzIHRoYXQgd2VyZSBsaW5rZWQgaW4gZGVidWdmcy4KKwkqIEFsbG93IHRoZSBzb3VyY2VzIHRvIGJlIGNvbXBpbGVkIHdpdGggLWFuc2kgdHVybmVkIG9uLgpkaWZmIC0tZ2l0IGEvU0hMSUJTIGIvU0hMSUJTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmY2JiYzMKLS0tIC9kZXYvbnVsbAorKysgYi9TSExJQlMKQEAgLTAsMCArMSwzNSBAQAorTGlicmFyeTpsaWJjb21fZXJyLm8KK0Rlc2NyaXB0aW9uOiBDb21tb24gZXJyb3IgY29kZSBsaWJyYXJ5CitNYWludGFpbmVyOiBUaGVvZG9yZSBUcydvCitFbWFpbDogdHl0c29AbWl0LmVkdQorU3RhcnQ6IDB4NjY4MDAwMDAKK0VuZDogICAweDY2ODdmZmZmCisKK0xpYnJhcnk6bGlic3MubworRGVzY3JpcHRpb246IEdlbmVyaWMgU3Vic3lzdGVtIGxpYnJhcnkgKFNpbXBsZSB0dHkgVUkpCitNYWludGFpbmVyOiBUaGVvZG9yZSBUcydvCitFbWFpbDogdHl0c29AbWl0LmVkdQorU3RhcnQ6IDB4NjY4ODAwMDAKK0VuZDogICAweDY2OGZmZmZmCisKK0xpYnJhcnk6bGliZXh0MmZzLnNvCitEZXNjcmlwdGlvbjogVGhlIGV4dDJmcyAocmF3IGludGVyZmFjZSkgbGlicmFyeQorTWFpbnRhaW5lcjogVGhlb2RvcmUgVHMnbworRW1haWw6IHR5dHNvQG1pdC5lZHUKK1N0YXJ0OiAweDY2OTAwMDAwCitFbmQ6ICAgMHg2Njk3ZmZmZgorCitMaWJyYXJ5OmxpYmUycC5zbworRGVzY3JpcHRpb246IFRoZSBlMnAgKGV4dDJmcydzIHByb2dyYW1tZXJzKSBsaWJyYXJ5CitNYWludGFpbmVyOiBUaGVvZG9yZSBUcydvCitFbWFpbDogdHl0c29AbWl0LmVkdQorU3RhcnQ6IDB4NjY5ODAwMDAKK0VuZDogICAweDY2OWZmZmZmCisKK0xpYnJhcnk6bGlidXVpZC5zbworRGVzY3JpcHRpb246IERDRSBVbml2ZXJzYWxseSBVbmlxdWUgSUQgKFVVSUQpIGxpYnJhcnkKK01haW50YWluZXI6IFRoZW9kb3JlIFRzJ28KK0VtYWlsOiB0eXRzb0BtaXQuZWR1CitTdGFydDogMHg2NzkwMDAwMAorRW5kOiAgIDB4Njc5ZmZmZmYKKwpkaWZmIC0tZ2l0IGEvU1VCTUlUVElORy1QQVRDSEVTIGIvU1VCTUlUVElORy1QQVRDSEVTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OWRlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9TVUJNSVRUSU5HLVBBVENIRVMKQEAgLTAsMCArMSwzOSBAQAorCitMaWtlIHRoZSBMaW51eCBrZXJuZWwsIHN1Ym1pdHRlZCBlMmZzcHJvZ3MgcGF0Y2hlcyBub3cgcmVxdWlyZSB0aGUKK2ZvbGxvd2luZyAic2lnbi1vZmYiIHByb2NlZHVyZToKKworVGhlIHNpZ24tb2ZmIGlzIGEgc2ltcGxlIGxpbmUgYXQgdGhlIGVuZCBvZiB0aGUgZXhwbGFuYXRpb24gZm9yIHRoZQorcGF0Y2gsIHdoaWNoIGNlcnRpZmllcyB0aGF0IHlvdSB3cm90ZSBpdCBvciBvdGhlcndpc2UgaGF2ZSB0aGUgcmlnaHQgdG8KK3Bhc3MgaXQgb24gYXMgYSBvcGVuLXNvdXJjZSBwYXRjaC4gIFRoZSBydWxlcyBhcmUgcHJldHR5IHNpbXBsZTogaWYgeW91CitjYW4gY2VydGlmeSB0aGUgYmVsb3c6CisKKyAgICAgICAgRGV2ZWxvcGVyJ3MgQ2VydGlmaWNhdGUgb2YgT3JpZ2luIDEuMQorCisgICAgICAgIEJ5IG1ha2luZyBhIGNvbnRyaWJ1dGlvbiB0byB0aGlzIHByb2plY3QsIEkgY2VydGlmeSB0aGF0OgorCisgICAgICAgIChhKSBUaGUgY29udHJpYnV0aW9uIHdhcyBjcmVhdGVkIGluIHdob2xlIG9yIGluIHBhcnQgYnkgbWUgYW5kIEkKKyAgICAgICAgICAgIGhhdmUgdGhlIHJpZ2h0IHRvIHN1Ym1pdCBpdCB1bmRlciB0aGUgb3BlbiBzb3VyY2UgbGljZW5zZQorICAgICAgICAgICAgaW5kaWNhdGVkIGluIHRoZSBmaWxlOyBvcgorCisgICAgICAgIChiKSBUaGUgY29udHJpYnV0aW9uIGlzIGJhc2VkIHVwb24gcHJldmlvdXMgd29yayB0aGF0LCB0byB0aGUgYmVzdAorICAgICAgICAgICAgb2YgbXkga25vd2xlZGdlLCBpcyBjb3ZlcmVkIHVuZGVyIGFuIGFwcHJvcHJpYXRlIG9wZW4gc291cmNlCisgICAgICAgICAgICBsaWNlbnNlIGFuZCBJIGhhdmUgdGhlIHJpZ2h0IHVuZGVyIHRoYXQgbGljZW5zZSB0byBzdWJtaXQgdGhhdAorICAgICAgICAgICAgd29yayB3aXRoIG1vZGlmaWNhdGlvbnMsIHdoZXRoZXIgY3JlYXRlZCBpbiB3aG9sZSBvciBpbiBwYXJ0CisgICAgICAgICAgICBieSBtZSwgdW5kZXIgdGhlIHNhbWUgb3BlbiBzb3VyY2UgbGljZW5zZSAodW5sZXNzIEkgYW0KKyAgICAgICAgICAgIHBlcm1pdHRlZCB0byBzdWJtaXQgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSksIGFzIGluZGljYXRlZAorICAgICAgICAgICAgaW4gdGhlIGZpbGU7IG9yCisKKyAgICAgICAgKGMpIFRoZSBjb250cmlidXRpb24gd2FzIHByb3ZpZGVkIGRpcmVjdGx5IHRvIG1lIGJ5IHNvbWUgb3RoZXIKKyAgICAgICAgICAgIHBlcnNvbiB3aG8gY2VydGlmaWVkIChhKSwgKGIpIG9yIChjKSBhbmQgSSBoYXZlIG5vdCBtb2RpZmllZAorICAgICAgICAgICAgaXQuCisKKwkoZCkgSSB1bmRlcnN0YW5kIGFuZCBhZ3JlZSB0aGF0IHRoaXMgcHJvamVjdCBhbmQgdGhlIGNvbnRyaWJ1dGlvbgorCSAgICBhcmUgcHVibGljIGFuZCB0aGF0IGEgcmVjb3JkIG9mIHRoZSBjb250cmlidXRpb24gKGluY2x1ZGluZyBhbGwKKwkgICAgcGVyc29uYWwgaW5mb3JtYXRpb24gSSBzdWJtaXQgd2l0aCBpdCwgaW5jbHVkaW5nIG15IHNpZ24tb2ZmKSBpcworCSAgICBtYWludGFpbmVkIGluZGVmaW5pdGVseSBhbmQgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgY29uc2lzdGVudCB3aXRoCisJICAgIHRoaXMgcHJvamVjdCBvciB0aGUgb3BlbiBzb3VyY2UgbGljZW5zZShzKSBpbnZvbHZlZC4KKwordGhlbiB5b3UganVzdCBhZGQgYSBsaW5lIHNheWluZworCisJU2lnbmVkLW9mZi1ieTogUmFuZG9tIEogRGV2ZWxvcGVyIDxyYW5kb21AZGV2ZWxvcGVyLmV4YW1wbGUub3JnPgorCmRpZmYgLS1naXQgYS9hY2luY2x1ZGUubTQgYi9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4YTc3YwotLS0gL2Rldi9udWxsCisrKyBiL2FjaW5jbHVkZS5tNApAQCAtMCwwICsxLDE0OCBAQAorIyBmcm9tIGh0dHA6Ly9hdXRvY29uZi1hcmNoaXZlLmNyeXAudG8vYXhfdGxzLmh0bWwKKyMKKyMgVGhpcyB3YXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgcmVzcGVjdGl2ZSBBdXRvY29uZiBNYWNybydzIGNvcHlyaWdodAorIyBvd25lciBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgdGhlCisjIGNvbmZpZ3VyZSBzY3JpcHRzIHRoYXQgYXJlIHRoZSBvdXRwdXQgb2YgQXV0b2NvbmYgd2hlbiBwcm9jZXNzaW5nCisjIHRoZSBNYWNyby4gWW91IG5lZWQgbm90IGZvbGxvdyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIHdoZW4gdXNpbmcgb3IgZGlzdHJpYnV0aW5nIHN1Y2ggc2NyaXB0cywgZXZlbiB0aG91Z2gKKyMgcG9ydGlvbnMgb2YgdGhlIHRleHQgb2YgdGhlIE1hY3JvIGFwcGVhciBpbiB0aGVtLiBUaGUgR05VIEdlbmVyYWwKKyMgUHVibGljIExpY2Vuc2UgKEdQTCkgZG9lcyBnb3Zlcm4gYWxsIG90aGVyIHVzZSBvZiB0aGUgbWF0ZXJpYWwgdGhhdAorIyBjb25zdGl0dXRlcyB0aGUgQXV0b2NvbmYgTWFjcm8uCisjCisjIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBhcHBsaWVzIHRvIHZlcnNpb25zIG9mIHRoZQorIyBBdXRvY29uZiBNYWNybyByZWxlYXNlZCBieSB0aGUgQXV0b2NvbmYgTWFjcm8gQXJjaGl2ZS4gV2hlbiB5b3UgbWFrZQorIyBhbmQgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIEF1dG9jb25mIE1hY3JvLCB5b3UgbWF5CisjIGV4dGVuZCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgdG8gYXBwbHkgdG8geW91ciBtb2RpZmllZAorIyB2ZXJzaW9uIGFzIHdlbGwuCisjCitBQ19ERUZVTihbQVhfVExTXSwgWworICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHRocmVhZCBsb2NhbCBzdG9yYWdlIChUTFMpIGNsYXNzKQorICBBQ19DQUNIRV9WQUwoYWNfY3ZfdGxzLCBbCisgICAgYXhfdGxzX2tleXdvcmRzPSJfX3RocmVhZCBfX2RlY2xzcGVjKHRocmVhZCkgbm9uZSIKKyAgICBmb3IgYXhfdGxzX2tleXdvcmQgaW4gJGF4X3Rsc19rZXl3b3JkczsgZG8KKyAgICAgICBjYXNlICRheF90bHNfa2V5d29yZCBpbgorICAgICAgICAgIG5vbmUpIGFjX2N2X3Rscz1ub25lIDsgYnJlYWsgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgIEFDX1RSWV9DT01QSUxFKAorICAgICAgICAgICAgICAgIFsjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkCisgICAgICAgICAgICAgICAgIGZvbyh2b2lkKSB7CisgICAgICAgICAgICAgICAgIHN0YXRpYyBdICRheF90bHNfa2V5d29yZCBbIGludCBiYXI7CisgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgICAgICAgW2FjX2N2X3Rscz0kYXhfdGxzX2tleXdvcmQgOyBicmVha10sCisgICAgICAgICAgICAgICAgIGFjX2N2X3Rscz1ub25lCisgICAgICAgICAgICAgKQorICAgICAgICAgIGVzYWMKKyAgICBkb25lCitdKQorCisgIGlmIHRlc3QgIiRhY19jdl90bHMiICE9ICJub25lIjsgdGhlbgorICAgIGRubCBBQ19ERUZJTkUoW1RMU10sIFtdLCBbSWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGEgVExTIHN0b3JhZ2UgY2xhc3MgZGVmaW5lIGl0IHRvIHRoYXQgaGVyZV0pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtUTFNdLCAkYWNfY3ZfdGxzLCBbSWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGEgVExTIHN0b3JhZ2UgY2xhc3MgZGVmaW5lIGl0IHRvIHRoYXQgaGVyZV0pCisgIGZpCisgIEFDX01TR19SRVNVTFQoJGFjX2N2X3RscykKK10pCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICAgICAgICAgaHR0cDovL3d3dy5ub25nbnUub3JnL2F1dG9jb25mLWFyY2hpdmUvY2hlY2tfZ251X21ha2UuaHRtbAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU1lOT1BTSVMKKyMKKyMgICBDSEVDS19HTlVfTUFLRSgpCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgVGhpcyBtYWNybyBzZWFyY2hlcyBmb3IgYSBHTlUgdmVyc2lvbiBvZiBtYWtlLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCB0aGUKKyMgICBtYWtlZmlsZSB2YXJpYWJsZSBgaWZHTlVtYWtlJyBpcyBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZywgb3RoZXJ3aXNlIGl0CisjICAgaXMgc2V0IHRvICIjIi4gVGhpcyBpcyB1c2VmdWwgZm9yIGluY2x1ZGluZyBhIHNwZWNpYWwgZmVhdHVyZXMgaW4gYQorIyAgIE1ha2VmaWxlLCB3aGljaCBjYW5ub3QgYmUgaGFuZGxlZCBieSBvdGhlciB2ZXJzaW9ucyBvZiBtYWtlLiBUaGUKKyMgICB2YXJpYWJsZSBfY3ZfZ251X21ha2VfY29tbWFuZCBpcyBzZXQgdG8gdGhlIGNvbW1hbmQgdG8gaW52b2tlIEdOVSBtYWtlCisjICAgaWYgaXQgZXhpc3RzLCB0aGUgZW1wdHkgc3RyaW5nIG90aGVyd2lzZS4KKyMKKyMgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgaXRzIHVzZToKKyMKKyMgICBNYWtlZmlsZS5pbiBtaWdodCBjb250YWluOgorIworIyAgICAgICAjIEEgZmFpbHNhZmUgd2F5IG9mIHB1dHRpbmcgYSBkZXBlbmRlbmN5IHJ1bGUgaW50byBhIG1ha2VmaWxlCisjICAgICAgICQoREVQRU5EKToKKyMgICAgICAgICAgICAgICAkKENDKSAtTU0gJChzcmNkaXIpLyouYyA+ICQoREVQRU5EKQorIworIyAgICAgICBAaWZHTlVtYWtlQCBpZmVxICgkKERFUEVORCksJCh3aWxkY2FyZCAkKERFUEVORCkpKQorIyAgICAgICBAaWZHTlVtYWtlQCBpbmNsdWRlICQoREVQRU5EKQorIyAgICAgICBAaWZHTlVtYWtlQCBlbmRpZgorIworIyAgIFRoZW4gY29uZmlndXJlLmluIHdvdWxkIG5vcm1hbGx5IGNvbnRhaW46CisjCisjICAgICAgIENIRUNLX0dOVV9NQUtFKCkKKyMgICAgICAgQUNfT1VUUFVUKE1ha2VmaWxlKQorIworIyAgIFRoZW4gcGVyaGFwcyB0byBjYXVzZSBnbnUgbWFrZSB0byBvdmVycmlkZSBhbnkgb3RoZXIgbWFrZSwgd2UgY291bGQgZG8KKyMgICBzb21ldGhpbmcgbGlrZSB0aGlzIChub3RlIHRoYXQgR05VIG1ha2UgYWx3YXlzIGxvb2tzIGZvciBHTlVtYWtlZmlsZQorIyAgIGZpcnN0KToKKyMKKyMgICAgICAgaWYgICEgdGVzdCB4JF9jdl9nbnVfbWFrZV9jb21tYW5kID0geCA7IHRoZW4KKyMgICAgICAgICAgICAgICBtdiBNYWtlZmlsZSBHTlVtYWtlZmlsZQorIyAgICAgICAgICAgICAgIGVjaG8gLkRFRkFVTFQ6ID4gTWFrZWZpbGUgOworIyAgICAgICAgICAgICAgIGVjaG8gXCAgJF9jdl9nbnVfbWFrZV9jb21tYW5kIFwkQCA+PiBNYWtlZmlsZTsKKyMgICAgICAgZmkKKyMKKyMgICBUaGVuLCBpZiBhbnkgKHdlbGwgYWxtb3N0IGFueSkgb3RoZXIgbWFrZSBpcyBjYWxsZWQsIGFuZCBHTlUgbWFrZSBhbHNvCisjICAgZXhpc3RzLCB0aGVuIHRoZSBvdGhlciBtYWtlIHdyYXBzIHRoZSBHTlUgbWFrZS4KKyMKKyMgTElDRU5TRQorIworIyAgIENvcHlyaWdodCAoYykgMjAwOCBKb2huIERhcnJpbmd0b24gPGouZGFycmluZ3RvbkBlbHZpcy5tdXJkb2NoLmVkdS5hdT4KKyMKKyMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4KKyMKKyMgTm90ZTogTW9kaWZpZWQgYnkgVGVkIFRzJ28gdG8gYWRkIEBpZk5vdEdOVU1ha2VACisKK0FDX0RFRlVOKAorICAgICAgICBbQ0hFQ0tfR05VX01BS0VdLCBbIEFDX0NBQ0hFX0NIRUNLKCBmb3IgR05VIG1ha2UsX2N2X2dudV9tYWtlX2NvbW1hbmQsCisgICAgICAgICAgICAgICAgX2N2X2dudV9tYWtlX2NvbW1hbmQ9JycgOworZG5sIFNlYXJjaCBhbGwgdGhlIGNvbW1vbiBuYW1lcyBmb3IgR05VIG1ha2UKKyAgICAgICAgICAgICAgICBmb3IgYSBpbiAiJE1BS0UiIG1ha2UgZ21ha2UgZ251bWFrZSA7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkYSIgOyB0aGVuIGNvbnRpbnVlIDsgZmkgOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgICggc2ggLWMgIiRhIC0tdmVyc2lvbiIgMj4gL2Rldi9udWxsIHwgZ3JlcCBHTlUgIDI+JjEgPiAvZGV2L251bGwgKSA7ICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdl9nbnVfbWFrZV9jb21tYW5kPSRhIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUgOworICAgICAgICApIDsKK2RubCBJZiB0aGVyZSB3YXMgYSBHTlUgdmVyc2lvbiwgdGhlbiBzZXQgQGlmR05VbWFrZUAgdG8gdGhlIGVtcHR5IHN0cmluZywgJyMnIG90aGVyd2lzZQorICAgICAgICBpZiB0ZXN0ICAieCRfY3ZfZ251X21ha2VfY29tbWFuZCIgIT0gIngiICA7IHRoZW4KKyAgICAgICAgICAgICAgICBpZkdOVW1ha2U9JycgOworICAgICAgICAgICAgICAgIGlmTm90R05VbWFrZT0nIycgOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWZHTlVtYWtlPScjJyA7CisgICAgICAgICAgICAgICAgaWZOb3RHTlVtYWtlPScnIDsKKyAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKCJOb3QgZm91bmQiKTsKKyAgICAgICAgZmkKKyAgICAgICAgQUNfU1VCU1QoaWZHTlVtYWtlKQorICAgICAgICBBQ19TVUJTVChpZk5vdEdOVW1ha2UpCitdICkKKyMgd2FzIG9yaWdpbmFsbHkgZnJvbSBubHMubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKK0FDX0RFRlVOKFtBTV9NS0lOU1RBTExESVJTXSwKK1sKKyAgZG5sIElmIHRoZSBBQ19DT05GSUdfQVVYX0RJUiBtYWNybyBmb3IgYXV0b2NvbmYgaXMgdXNlZCB3ZSBwb3NzaWJseQorICBkbmwgZmluZCB0aGUgbWtpbnN0YWxsZGlycyBzY3JpcHQgaW4gYW5vdGhlciBzdWJkaXIgYnV0ICQodG9wX3NyY2RpcikuCisgIGRubCBUcnkgdG8gbG9jYXRlIGl0LgorICBNS0lOU1RBTExESVJTPQorICBpZiB0ZXN0IC1uICIkYWNfYXV4X2RpciI7IHRoZW4KKyAgICBjYXNlICIkYWNfYXV4X2RpciIgaW4KKyAgICAgIC8qKSBNS0lOU1RBTExESVJTPSIkYWNfYXV4X2Rpci9ta2luc3RhbGxkaXJzIiA7OworICAgICAgKikgTUtJTlNUQUxMRElSUz0iXCQodG9wX2J1aWxkZGlyKS8kYWNfYXV4X2Rpci9ta2luc3RhbGxkaXJzIiA7OworICAgIGVzYWMKKyAgZmkKKyAgaWYgdGVzdCAteiAiJE1LSU5TVEFMTERJUlMiOyB0aGVuCisgICAgTUtJTlNUQUxMRElSUz0iXCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyIKKyAgZmkKKyAgQUNfU1VCU1QoTUtJTlNUQUxMRElSUykKK10pCmRpZmYgLS1naXQgYS9hY2xvY2FsLm00IGIvYWNsb2NhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2YxMjNhCi0tLSAvZGV2L251bGwKKysrIGIvYWNsb2NhbC5tNApAQCAtMCwwICsxLDQzMzAgQEAKKyMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjE0LjEgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK200X2lmbmRlZihbQUNfQ09ORklHX01BQ1JPX0RJUlNdLCBbbTRfZGVmdW4oW19BTV9DT05GSUdfTUFDUk9fRElSU10sIFtdKW00X2RlZnVuKFtBQ19DT05GSUdfTUFDUk9fRElSU10sIFtfQU1fQ09ORklHX01BQ1JPX0RJUlMoJEApXSldKQorIyBjb2Rlc2V0Lm00IHNlcmlhbCA1IChnZXR0ZXh0LTAuMTguMikKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiwgMjAwNiwgMjAwOC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKworQUNfREVGVU4oW0FNX0xBTkdJTkZPX0NPREVTRVRdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIG5sX2xhbmdpbmZvIGFuZCBDT0RFU0VUXSwgW2FtX2N2X2xhbmdpbmZvX2NvZGVzZXRdLAorICAgIFtBQ19MSU5LX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgIFtbI2luY2x1ZGUgPGxhbmdpbmZvLmg+XV0sCisgICAgICAgICAgW1tjaGFyKiBjcyA9IG5sX2xhbmdpbmZvKENPREVTRVQpOyByZXR1cm4gIWNzO11dKV0sCisgICAgICAgW2FtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9eWVzXSwKKyAgICAgICBbYW1fY3ZfbGFuZ2luZm9fY29kZXNldD1ub10pCisgICAgXSkKKyAgaWYgdGVzdCAkYW1fY3ZfbGFuZ2luZm9fY29kZXNldCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9MQU5HSU5GT19DT0RFU0VUXSwgWzFdLAorICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSA8bGFuZ2luZm8uaD4gYW5kIG5sX2xhbmdpbmZvKENPREVTRVQpLl0pCisgIGZpCitdKQorCitkbmwgJ2V4dGVybiBpbmxpbmUnIGEgbGEgSVNPIEM5OS4KKworZG5sIENvcHlyaWdodCAyMDEyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX0VYVEVSTl9JTkxJTkVdLAorWworICBBSF9WRVJCQVRJTShbZXh0ZXJuX2lubGluZV0sCitbLyogUGxlYXNlIHNlZSB0aGUgR251bGliIG1hbnVhbCBmb3IgaG93IHRvIHVzZSB0aGVzZSBtYWNyb3MuCisKKyAgIFN1cHByZXNzIGV4dGVybiBpbmxpbmUgd2l0aCBIUC1VWCBjYywgYXMgaXQgYXBwZWFycyB0byBiZSBicm9rZW47IHNlZQorICAgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctdGV4aW5mby8yMDEzLTAyL21zZzAwMDMwLmh0bWw+LgorCisgICBTdXBwcmVzcyBleHRlcm4gaW5saW5lIHdpdGggU3VuIEMgaW4gc3RhbmRhcmRzLWNvbmZvcm1hbmNlIG1vZGUsIGFzIGl0CisgICBtaXNoYW5kbGVzIGlubGluZSBmdW5jdGlvbnMgdGhhdCBjYWxsIGVhY2ggb3RoZXIuICBFLmcuLCBmb3IgJ2lubGluZSB2b2lkIGYKKyAgICh2b2lkKSB7IH0gaW5saW5lIHZvaWQgZyAodm9pZCkgeyBmICgpOyB9JywgYzk5IGluY29ycmVjdGx5IGNvbXBsYWlucworICAgJ3JlZmVyZW5jZSB0byBzdGF0aWMgaWRlbnRpZmllciAiZiIgaW4gZXh0ZXJuIGlubGluZSBmdW5jdGlvbicuCisgICBUaGlzIGJ1ZyB3YXMgb2JzZXJ2ZWQgd2l0aCBTdW4gQyA1LjEyIFN1bk9TX2kzODYgMjAxMS8xMS8xNi4KKworICAgU3VwcHJlc3MgdGhlIHVzZSBvZiBleHRlcm4gaW5saW5lIG9uIEFwcGxlJ3MgcGxhdGZvcm1zLCBhcyBMaWJjIGF0IGxlYXN0CisgICB0aHJvdWdoIExpYmMtODI1LjI2ICgyMDEzLTA0LTA5KSBpcyBpbmNvbXBhdGlibGUgd2l0aCBpdDsgc2VlLCBlLmcuLAorICAgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctZ251bGliLzIwMTItMTIvbXNnMDAwMjMuaHRtbD4uCisgICBQZXJoYXBzIEFwcGxlIHdpbGwgZml4IHRoaXMgc29tZSBkYXkuICAqLworI2lmICgoX19HTlVDX18gXAorICAgICAgPyBkZWZpbmVkIF9fR05VQ19TVERDX0lOTElORV9fICYmIF9fR05VQ19TVERDX0lOTElORV9fIFwKKyAgICAgIDogKDE5OTkwMUwgPD0gX19TVERDX1ZFUlNJT05fXyBcCisgICAgICAgICAmJiAhZGVmaW5lZCBfX0hQX2NjIFwKKyAgICAgICAgICYmICEoZGVmaW5lZCBfX1NVTlBST19DICYmIF9fU1REQ19fKSkpIFwKKyAgICAgJiYgIWRlZmluZWQgX19BUFBMRV9fKQorIyBkZWZpbmUgX0dMX0lOTElORSBpbmxpbmUKKyMgZGVmaW5lIF9HTF9FWFRFUk5fSU5MSU5FIGV4dGVybiBpbmxpbmUKKyNlbGlmICgyIDwgX19HTlVDX18gKyAoNyA8PSBfX0dOVUNfTUlOT1JfXykgJiYgIWRlZmluZWQgX19TVFJJQ1RfQU5TSV9fIFwKKyAgICAgICAmJiAhZGVmaW5lZCBfX0FQUExFX18pCisjIGlmIF9fR05VQ19HTlVfSU5MSU5FX18KKyAgIC8qIF9fZ251X2lubGluZV9fIHN1cHByZXNzZXMgYSBHQ0MgNC4yIGRpYWdub3N0aWMuICAqLworIyAgZGVmaW5lIF9HTF9JTkxJTkUgZXh0ZXJuIGlubGluZSBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18pKQorIyBlbHNlCisjICBkZWZpbmUgX0dMX0lOTElORSBleHRlcm4gaW5saW5lCisjIGVuZGlmCisjIGRlZmluZSBfR0xfRVhURVJOX0lOTElORSBleHRlcm4KKyNlbHNlCisjIGRlZmluZSBfR0xfSU5MSU5FIHN0YXRpYyBfR0xfVU5VU0VECisjIGRlZmluZSBfR0xfRVhURVJOX0lOTElORSBzdGF0aWMgX0dMX1VOVVNFRAorI2VuZGlmCisKKyNpZiA0IDwgX19HTlVDX18gKyAoNiA8PSBfX0dOVUNfTUlOT1JfXykKKyMgaWYgZGVmaW5lZCBfX0dOVUNfU1REQ19JTkxJTkVfXyAmJiBfX0dOVUNfU1REQ19JTkxJTkVfXworIyAgZGVmaW5lIF9HTF9JTkxJTkVfSEVBREVSX0NPTlNUX1BSQUdNQQorIyBlbHNlCisjICBkZWZpbmUgX0dMX0lOTElORV9IRUFERVJfQ09OU1RfUFJBR01BIFwKKyAgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3N1Z2dlc3QtYXR0cmlidXRlPWNvbnN0XCIiKQorIyBlbmRpZgorICAvKiBTdXBwcmVzcyBHQ0MncyBib2d1cyAibm8gcHJldmlvdXMgcHJvdG90eXBlIGZvciAnRk9PJyIKKyAgICAgYW5kICJubyBwcmV2aW91cyBkZWNsYXJhdGlvbiBmb3IgJ0ZPTyciICBkaWFnbm9zdGljcywKKyAgICAgd2hlbiBGT08gaXMgYW4gaW5saW5lIGZ1bmN0aW9uIGluIHRoZSBoZWFkZXI7IHNlZQorICAgICA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NDExMz4uICAqLworIyBkZWZpbmUgX0dMX0lOTElORV9IRUFERVJfQkVHSU4gXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikgXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdtaXNzaW5nLXByb3RvdHlwZXNcIiIpIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XbWlzc2luZy1kZWNsYXJhdGlvbnNcIiIpIFwKKyAgICBfR0xfSU5MSU5FX0hFQURFUl9DT05TVF9QUkFHTUEKKyMgZGVmaW5lIF9HTF9JTkxJTkVfSEVBREVSX0VORCBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHBvcCIpCisjZWxzZQorIyBkZWZpbmUgX0dMX0lOTElORV9IRUFERVJfQkVHSU4KKyMgZGVmaW5lIF9HTF9JTkxJTkVfSEVBREVSX0VORAorI2VuZGlmXSkKK10pCisKKyMgZmNudGwtby5tNCBzZXJpYWwgNAorZG5sIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LgorCisjIFRlc3Qgd2hldGhlciB0aGUgZmxhZ3MgT19OT0FUSU1FIGFuZCBPX05PRk9MTE9XIGFjdHVhbGx5IHdvcmsuCisjIERlZmluZSBIQVZFX1dPUktJTkdfT19OT0FUSU1FIHRvIDEgaWYgT19OT0FUSU1FIHdvcmtzLCBvciB0byAwIG90aGVyd2lzZS4KKyMgRGVmaW5lIEhBVkVfV09SS0lOR19PX05PRk9MTE9XIHRvIDEgaWYgT19OT0ZPTExPVyB3b3Jrcywgb3IgdG8gMCBvdGhlcndpc2UuCitBQ19ERUZVTihbZ2xfRkNOVExfT19GTEFHU10sCitbCisgIGRubCBQZXJzdWFkZSBnbGliYyA8ZmNudGwuaD4gdG8gZGVmaW5lIE9fTk9BVElNRSBhbmQgT19OT0ZPTExPVy4KKyAgZG5sIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyB3YXMgaW50cm9kdWNlZCBpbiBhdXRvY29uZiAyLjYwIGFuZCBvYnNvbGV0ZXMKKyAgZG5sIEFDX0dOVV9TT1VSQ0UuCisgIG00X2lmZGVmKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorICAgIFtBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKV0sCisgICAgW0FDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKV0pCisKKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFt1bmlzdGQuaF0pCisgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW3N5bWxpbmtdKQorICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdvcmtpbmcgZmNudGwuaF0sIFtnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oXSwKKyAgICBbQUNfUlVOX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgIFtbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAgICAgICAgICAgI2lmIEhBVkVfVU5JU1REX0gKKyAgICAgICAgICAgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAgICAgICAgICAgI2Vsc2UgLyogb24gV2luZG93cyB3aXRoIE1TVkMgKi8KKyAgICAgICAgICAgIyBpbmNsdWRlIDxpby5oPgorICAgICAgICAgICAjIGluY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgICAjIGRlZmluZWQgc2xlZXAobikgX3NsZWVwICgobikgKiAxMDAwKQorICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgI2luY2x1ZGUgPGZjbnRsLmg+CisgICAgICAgICAgICNpZm5kZWYgT19OT0FUSU1FCisgICAgICAgICAgICAjZGVmaW5lIE9fTk9BVElNRSAwCisgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAjaWZuZGVmIE9fTk9GT0xMT1cKKyAgICAgICAgICAgICNkZWZpbmUgT19OT0ZPTExPVyAwCisgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICBzdGF0aWMgaW50IGNvbnN0IGNvbnN0YW50c1tdID0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgT19DUkVBVCwgT19FWENMLCBPX05PQ1RUWSwgT19UUlVOQywgT19BUFBFTkQsCisgICAgICAgICAgICAgIE9fTk9OQkxPQ0ssIE9fU1lOQywgT19BQ0NNT0RFLCBPX1JET05MWSwgT19SRFdSLCBPX1dST05MWQorICAgICAgICAgICAgfTsKKyAgICAgICAgICBdXSwKKyAgICAgICAgICBbWworICAgICAgICAgICAgaW50IHJlc3VsdCA9ICFjb25zdGFudHM7CisgICAgICAgICAgICAjaWYgSEFWRV9TWU1MSU5LCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHN5bVtdID0gImNvbmZ0ZXN0LnN5bSI7CisgICAgICAgICAgICAgIGlmIChzeW1saW5rICgiL2Rldi9udWxsIiwgc3ltKSAhPSAwKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAyOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaW50IGZkID0gb3BlbiAoc3ltLCBPX1dST05MWSB8IE9fTk9GT0xMT1cgfCBPX0NSRUFULCAwKTsKKyAgICAgICAgICAgICAgICAgIGlmIChmZCA+PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2xvc2UgKGZkKTsKKyAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gNDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKHVubGluayAoc3ltKSAhPSAwIHx8IHN5bWxpbmsgKCIuIiwgc3ltKSAhPSAwKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAyOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaW50IGZkID0gb3BlbiAoc3ltLCBPX1JET05MWSB8IE9fTk9GT0xMT1cpOworICAgICAgICAgICAgICAgICAgaWYgKGZkID49IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjbG9zZSAoZmQpOworICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSA0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB1bmxpbmsgKHN5bSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhdGljIGNoYXIgY29uc3QgZmlsZVtdID0gImNvbmZkZWZzLmgiOworICAgICAgICAgICAgICBpbnQgZmQgPSBvcGVuIChmaWxlLCBPX1JET05MWSB8IE9fTk9BVElNRSk7CisgICAgICAgICAgICAgIGlmIChmZCA8IDApCisgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDg7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCBzdDA7CisgICAgICAgICAgICAgICAgICBpZiAoZnN0YXQgKGZkLCAmc3QwKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMTY7CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyIGM7CisgICAgICAgICAgICAgICAgICAgICAgc2xlZXAgKDEpOworICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkIChmZCwgJmMsIDEpICE9IDEpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMjQ7CisgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xvc2UgKGZkKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0IHN0MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0IChmaWxlLCAmc3QxKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gNDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdDAuc3RfYXRpbWUgIT0gc3QxLnN0X2F0aW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSA2NDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0O11dKV0sCisgICAgICAgW2dsX2N2X2hlYWRlcl93b3JraW5nX2ZjbnRsX2g9eWVzXSwKKyAgICAgICBbY2FzZSAkPyBpbiAjKAorICAgICAgICA0KSBnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oPSdubyAoYmFkIE9fTk9GT0xMT1cpJzs7ICMoCisgICAgICAgIDY0KSBnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oPSdubyAoYmFkIE9fTk9BVElNRSknOzsgIygKKyAgICAgICAgNjgpIGdsX2N2X2hlYWRlcl93b3JraW5nX2ZjbnRsX2g9J25vIChiYWQgT19OT0FUSU1FLCBPX05PRk9MTE9XKSc7OyAjKAorICAgICAgICAgKikgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaD0nbm8nOzsKKyAgICAgICAgZXNhY10sCisgICAgICAgW2dsX2N2X2hlYWRlcl93b3JraW5nX2ZjbnRsX2g9Y3Jvc3MtY29tcGlsaW5nXSldKQorCisgIGNhc2UgJGdsX2N2X2hlYWRlcl93b3JraW5nX2ZjbnRsX2ggaW4gIygKKyAgKk9fTk9BVElNRSogfCBubyB8IGNyb3NzLWNvbXBpbGluZykgYWNfdmFsPTA7OyAjKAorICAqKSBhY192YWw9MTs7CisgIGVzYWMKKyAgQUNfREVGSU5FX1VOUVVPVEVEKFtIQVZFX1dPUktJTkdfT19OT0FUSU1FXSwgWyRhY192YWxdLAorICAgIFtEZWZpbmUgdG8gMSBpZiBPX05PQVRJTUUgd29ya3MuXSkKKworICBjYXNlICRnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oIGluICMoCisgICpPX05PRk9MTE9XKiB8IG5vIHwgY3Jvc3MtY29tcGlsaW5nKSBhY192YWw9MDs7ICMoCisgICopIGFjX3ZhbD0xOzsKKyAgZXNhYworICBBQ19ERUZJTkVfVU5RVU9URUQoW0hBVkVfV09SS0lOR19PX05PRk9MTE9XXSwgWyRhY192YWxdLAorICAgIFtEZWZpbmUgdG8gMSBpZiBPX05PRk9MTE9XIHdvcmtzLl0pCitdKQorCisjIGdldHRleHQubTQgc2VyaWFsIDY2IChnZXR0ZXh0LTAuMTguMikKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorZG5sCitkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CitkbmwgZnVuY3Rpb25hbGl0eS4KK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCitkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCitkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK2RubCBBdXRob3JzOgorZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KK2RubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDA2LCAyMDA4LTIwMTAuCisKK2RubCBNYWNybyB0byBhZGQgZm9yIHVzaW5nIEdOVSBnZXR0ZXh0LgorCitkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUKFtJTlRMU1lNQk9MXSwgW05FRURTWU1CT0xdLCBbSU5UTERJUl0pLgorZG5sIElOVExTWU1CT0wgY2FuIGJlIG9uZSBvZiAnZXh0ZXJuYWwnLCAnbm8tbGlidG9vbCcsICd1c2UtbGlidG9vbCcuIFRoZQorZG5sICAgIGRlZmF1bHQgKGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQgb3IgZW1wdHkpIGlzICduby1saWJ0b29sJy4KK2RubCAgICBJTlRMU1lNQk9MIHNob3VsZCBiZSAnZXh0ZXJuYWwnIGZvciBwYWNrYWdlcyB3aXRoIG5vIGludGwgZGlyZWN0b3J5LAorZG5sICAgIGFuZCAnbm8tbGlidG9vbCcgb3IgJ3VzZS1saWJ0b29sJyBmb3IgcGFja2FnZXMgd2l0aCBhbiBpbnRsIGRpcmVjdG9yeS4KK2RubCAgICBJZiBJTlRMU1lNQk9MIGlzICd1c2UtbGlidG9vbCcsIHRoZW4gYSBsaWJ0b29sIGxpYnJhcnkKK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmxhIHdpbGwgYmUgY3JlYXRlZCAoc2hhcmVkIGFuZC9vciBzdGF0aWMsCitkbmwgICAgZGVwZW5kaW5nIG9uIC0te2VuYWJsZSxkaXNhYmxlfS17c2hhcmVkLHN0YXRpY30gYW5kIG9uIHRoZSBwcmVzZW5jZSBvZgorZG5sICAgIEFNLURJU0FCTEUtU0hBUkVEKS4gSWYgSU5UTFNZTUJPTCBpcyAnbm8tbGlidG9vbCcsIGEgc3RhdGljIGxpYnJhcnkKK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmEgd2lsbCBiZSBjcmVhdGVkLgorZG5sIElmIE5FRURTWU1CT0wgaXMgc3BlY2lmaWVkIGFuZCBpcyAnbmVlZC1uZ2V0dGV4dCcsIHRoZW4gR05VIGdldHRleHQKK2RubCAgICBpbXBsZW1lbnRhdGlvbnMgKGluIGxpYmMgb3IgbGliaW50bCkgd2l0aG91dCB0aGUgbmdldHRleHQoKSBmdW5jdGlvbgorZG5sICAgIHdpbGwgYmUgaWdub3JlZC4gIElmIE5FRURTWU1CT0wgaXMgc3BlY2lmaWVkIGFuZCBpcworZG5sICAgICduZWVkLWZvcm1hdHN0cmluZy1tYWNyb3MnLCB0aGVuIEdOVSBnZXR0ZXh0IGltcGxlbWVudGF0aW9ucyB0aGF0IGRvbid0CitkbmwgICAgc3VwcG9ydCB0aGUgSVNPIEMgOTkgPGludHR5cGVzLmg+IGZvcm1hdHN0cmluZyBtYWNyb3Mgd2lsbCBiZSBpZ25vcmVkLgorZG5sIElOVExESVIgaXMgdXNlZCB0byBmaW5kIHRoZSBpbnRsIGxpYnJhcmllcy4gIElmIGVtcHR5LAorZG5sICAgIHRoZSB2YWx1ZSAnJCh0b3BfYnVpbGRkaXIpL2ludGwvJyBpcyB1c2VkLgorZG5sCitkbmwgVGhlIHJlc3VsdCBvZiB0aGUgY29uZmlndXJhdGlvbiBpcyBvbmUgb2YgdGhyZWUgY2FzZXM6CitkbmwgMSkgR05VIGdldHRleHQsIGFzIGluY2x1ZGVkIGluIHRoZSBpbnRsIHN1YmRpcmVjdG9yeSwgd2lsbCBiZSBjb21waWxlZAorZG5sICAgIGFuZCB1c2VkLgorZG5sICAgIENhdGFsb2cgZm9ybWF0OiBHTlUgLS0+IGluc3RhbGwgaW4gJChkYXRhZGlyKQorZG5sICAgIENhdGFsb2cgZXh0ZW5zaW9uOiAubW8gYWZ0ZXIgaW5zdGFsbGF0aW9uLCAuZ21vIGluIHNvdXJjZSB0cmVlCitkbmwgMikgR05VIGdldHRleHQgaGFzIGJlZW4gZm91bmQgaW4gdGhlIHN5c3RlbSdzIEMgbGlicmFyeS4KK2RubCAgICBDYXRhbG9nIGZvcm1hdDogR05VIC0tPiBpbnN0YWxsIGluICQoZGF0YWRpcikKK2RubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogLm1vIGFmdGVyIGluc3RhbGxhdGlvbiwgLmdtbyBpbiBzb3VyY2UgdHJlZQorZG5sIDMpIE5vIGludGVybmF0aW9uYWxpemF0aW9uLCBhbHdheXMgdXNlIEVuZ2xpc2ggbXNnaWQuCitkbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IG5vbmUKK2RubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogbm9uZQorZG5sIElmIElOVExTWU1CT0wgaXMgJ2V4dGVybmFsJywgb25seSBjYXNlcyAyIGFuZCAzIGNhbiBvY2N1ci4KK2RubCBUaGUgdXNlIG9mIC5nbW8gaXMgaGlzdG9yaWNhbCAoaXQgd2FzIG5lZWRlZCB0byBhdm9pZCBvdmVyd3JpdGluZyB0aGUKK2RubCBHTlUgZm9ybWF0IGNhdGFsb2dzIHdoZW4gYnVpbGRpbmcgb24gYSBwbGF0Zm9ybSB3aXRoIGFuIFgvT3BlbiBnZXR0ZXh0KSwKK2RubCBidXQgd2Uga2VlcCBpdCBpbiBvcmRlciBub3QgdG8gZm9yY2UgaXJyZWxldmFudCBmaWxlbmFtZSBjaGFuZ2VzIG9uIHRoZQorZG5sIG1haW50YWluZXJzLgorZG5sCitBQ19ERUZVTihbQU1fR05VX0dFVFRFWFRdLAorWworICBkbmwgQXJndW1lbnQgY2hlY2tpbmcuCisgIGlmZWxzZShbJDFdLCBbXSwgLCBbaWZlbHNlKFskMV0sIFtleHRlcm5hbF0sICwgW2lmZWxzZShbJDFdLCBbbm8tbGlidG9vbF0sICwgW2lmZWxzZShbJDFdLCBbdXNlLWxpYnRvb2xdLCAsCisgICAgW2VycnByaW50KFtFUlJPUjogaW52YWxpZCBmaXJzdCBhcmd1bWVudCB0byBBTV9HTlVfR0VUVEVYVAorXSldKV0pXSldKQorICBpZmVsc2UoaWZlbHNlKFskMV0sIFtdLCBbb2xkXSlbXWlmZWxzZShbJDFdLCBbbm8tbGlidG9vbF0sIFtvbGRdKSwgW29sZF0sCisgICAgW0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sIFtVc2Ugb2YgQU1fR05VX0dFVFRFWFQgd2l0aG91dCBbZXh0ZXJuYWxdIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuXSldKQorICBpZmVsc2UoWyQyXSwgW10sICwgW2lmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sICwgW2lmZWxzZShbJDJdLCBbbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zXSwgLAorICAgIFtlcnJwcmludChbRVJST1I6IGludmFsaWQgc2Vjb25kIGFyZ3VtZW50IHRvIEFNX0dOVV9HRVRURVhUCitdKV0pXSldKQorICBkZWZpbmUoW2d0X2luY2x1ZGVkX2ludGxdLAorICAgIGlmZWxzZShbJDFdLCBbZXh0ZXJuYWxdLAorICAgICAgaWZkZWYoW0FNX0dOVV9HRVRURVhUX11bSU5UTF9TVUJESVJdLCBbeWVzXSwgW25vXSksCisgICAgICBbeWVzXSkpCisgIGRlZmluZShbZ3RfbGlidG9vbF9zdWZmaXhfcHJlZml4XSwgaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sIFtsXSwgW10pKQorICBndF9ORUVEU19JTklUCisgIEFNX0dOVV9HRVRURVhUX05FRUQoWyQyXSkKKworICBBQ19SRVFVSVJFKFtBTV9QT19TVUJESVJTXSlkbmwKKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgIEFDX1JFUVVJUkUoW0FNX0lOVExfU1VCRElSXSlkbmwKKyAgXSkKKworICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBBQ19MSUJfTElOS0ZMQUdTX0JPRFkuCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisKKyAgZG5sIFNvbWV0aW1lcyBsaWJpbnRsIHJlcXVpcmVzIGxpYmljb252LCBzbyBmaXJzdCBzZWFyY2ggZm9yIGxpYmljb252LgorICBkbmwgSWRlYWxseSB3ZSB3b3VsZCBkbyB0aGlzIHNlYXJjaCBvbmx5IGFmdGVyIHRoZQorICBkbmwgICAgICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorICBkbmwgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgIT0gInllcyI7IH07IHRoZW4KKyAgZG5sIHRlc3RzLiBCdXQgaWYgY29uZmlndXJlLmluIGludm9rZXMgQU1fSUNPTlYgYWZ0ZXIgQU1fR05VX0dFVFRFWFQKKyAgZG5sIHRoZSBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG5lZWQgdG8gY29udGFpbiB0aGUgc2FtZSBzaGVsbCBjb2RlCisgIGRubCBhZ2Fpbiwgb3V0c2lkZSBhbnkgJ2lmJy4gVGhlcmUgYXJlIHR3byBzb2x1dGlvbnM6CisgIGRubCAtIEludm9rZSBBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWSBoZXJlLCBvdXRzaWRlIGFueSAnaWYnLgorICBkbmwgLSBDb250cm9sIHRoZSBleHBhbnNpb25zIGluIG1vcmUgZGV0YWlsIHVzaW5nIEFDX1BST1ZJREVfSUZFTFNFLgorICBkbmwgU2luY2UgQUNfUFJPVklERV9JRkVMU0UgaXMgb25seSBpbiBhdXRvY29uZiA+PSAyLjUyIGFuZCBub3QKKyAgZG5sIGRvY3VtZW50ZWQsIHdlIGF2b2lkIGl0LgorICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCAsIFsKKyAgICBBQ19SRVFVSVJFKFtBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWV0pCisgIF0pCisKKyAgZG5sIFNvbWV0aW1lcywgb24gTWFjIE9TIFgsIGxpYmludGwgcmVxdWlyZXMgbGlua2luZyB3aXRoIENvcmVGb3VuZGF0aW9uLgorICBndF9JTlRMX01BQ09TWAorCisgIGRubCBTZXQgVVNFX05MUy4KKyAgQUNfUkVRVUlSRShbQU1fTkxTXSkKKworICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD1ubworICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMPW5vCisgIF0pCisgIExJQklOVEw9CisgIExUTElCSU5UTD0KKyAgUE9TVUI9CisKKyAgZG5sIEFkZCBhIHZlcnNpb24gbnVtYmVyIHRvIHRoZSBjYWNoZSBtYWNyb3MuCisgIGNhc2UgIiAkZ3RfbmVlZHMgIiBpbgorICAgICoiIG5lZWQtZm9ybWF0c3RyaW5nLW1hY3JvcyAiKikgZ3RfYXBpX3ZlcnNpb249MyA7OworICAgICoiIG5lZWQtbmdldHRleHQgIiopIGd0X2FwaV92ZXJzaW9uPTIgOzsKKyAgICAqKSBndF9hcGlfdmVyc2lvbj0xIDs7CisgIGVzYWMKKyAgZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmM9Imd0X2N2X2Z1bmNfZ251Z2V0dGV4dCR7Z3RfYXBpX3ZlcnNpb259X2xpYmMiCisgIGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPSJndF9jdl9mdW5jX2dudWdldHRleHQke2d0X2FwaV92ZXJzaW9ufV9saWJpbnRsIgorCisgIGRubCBJZiB3ZSB1c2UgTkxTIGZpZ3VyZSBvdXQgd2hhdCBtZXRob2QKKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKyAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9bm8KKyAgICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgaW5jbHVkZWQgZ2V0dGV4dCBpcyByZXF1ZXN0ZWRdKQorICAgICAgQUNfQVJHX1dJVEgoW2luY2x1ZGVkLWdldHRleHRdLAorICAgICAgICBbICAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dCB1c2UgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaW5jbHVkZWQgaGVyZV0sCisgICAgICAgIG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQ9JHdpdGh2YWwsCisgICAgICAgIG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQ9bm8pCisgICAgICBBQ19NU0dfUkVTVUxUKFskbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dF0pCisKKyAgICAgIG5sc19jdl91c2VfZ251X2dldHRleHQ9IiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IgorICAgICAgaWYgdGVzdCAiJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQiICE9ICJ5ZXMiOyB0aGVuCisgICAgXSkKKyAgICAgICAgZG5sIFVzZXIgZG9lcyBub3QgaW5zaXN0IG9uIHVzaW5nIEdOVSBOTFMgbGlicmFyeS4gIEZpZ3VyZSBvdXQgd2hhdAorICAgICAgICBkbmwgdG8gdXNlLiAgSWYgR05VIGdldHRleHQgaXMgYXZhaWxhYmxlIHdlIHVzZSB0aGlzLiAgRWxzZSB3ZSBoYXZlCisgICAgICAgIGRubCB0byBmYWxsIGJhY2sgdG8gR05VIE5MUyBsaWJyYXJ5LgorCisgICAgICAgIGlmIHRlc3QgJGd0X2FwaV92ZXJzaW9uIC1nZSAzOyB0aGVuCisgICAgICAgICAgZ3RfcmV2aXNpb25fdGVzdF9jb2RlPScKKyNpZm5kZWYgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04KKyNkZWZpbmUgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04obWFqb3IpICgobWFqb3IpID09IDAgPyAwIDogLTEpCisjZW5kaWYKK2NoYW5nZXF1b3RlKCwpZG5sCit0eXBlZGVmIGludCBhcnJheSBbMiAqIChfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTigwKSA+PSAxKSAtIDFdOworY2hhbmdlcXVvdGUoWyxdKWRubAorJworICAgICAgICBlbHNlCisgICAgICAgICAgZ3RfcmV2aXNpb25fdGVzdF9jb2RlPQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0ICRndF9hcGlfdmVyc2lvbiAtZ2UgMjsgdGhlbgorICAgICAgICAgIGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlPScgKyAqIG5nZXR0ZXh0ICgiIiwgIiIsIDApJworICAgICAgICBlbHNlCisgICAgICAgICAgZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGU9CisgICAgICAgIGZpCisKKyAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjXSwgWyRndF9mdW5jX2dudWdldHRleHRfbGliY10sCisgICAgICAgICBbQUNfTElOS19JRkVMU0UoCisgICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgICAgW1sKKyNpbmNsdWRlIDxsaWJpbnRsLmg+CiskZ3RfcmV2aXNpb25fdGVzdF9jb2RlCitleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CitleHRlcm4gaW50ICpfbmxfZG9tYWluX2JpbmRpbmdzOworICAgICAgICAgICAgICAgXV0sCisgICAgICAgICAgICAgICBbWworYmluZHRleHRkb21haW4gKCIiLCAiIik7CityZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9kb21haW5fYmluZGluZ3MKKyAgICAgICAgICAgICAgIF1dKV0sCisgICAgICAgICAgICBbZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPXllcyJdLAorICAgICAgICAgICAgW2V2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliYz1ubyJdKV0pCisKKyAgICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMiOyB0ZXN0ICIkZ3RfdmFsIiAhPSAieWVzIjsgfTsgdGhlbgorICAgICAgICAgIGRubCBTb21ldGltZXMgbGliaW50bCByZXF1aXJlcyBsaWJpY29udiwgc28gZmlyc3Qgc2VhcmNoIGZvciBsaWJpY29udi4KKyAgICAgICAgICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCAsIFsKKyAgICAgICAgICAgIEFNX0lDT05WX0xJTksKKyAgICAgICAgICBdKQorICAgICAgICAgIGRubCBTZWFyY2ggZm9yIGxpYmludGwgYW5kIGRlZmluZSBMSUJJTlRMLCBMVExJQklOVEwgYW5kIElOQ0lOVEwKKyAgICAgICAgICBkbmwgYWNjb3JkaW5nbHkuIERvbid0IHVzZSBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ludGxdLFtpY29udl0pCisgICAgICAgICAgZG5sIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQgIi1saWNvbnYiIHRvIExJQklOVEwgYW5kIExUTElCSU5UTAorICAgICAgICAgIGRubCBldmVuIGlmIGxpYmljb252IGRvZXNuJ3QgZXhpc3QuCisgICAgICAgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFtpbnRsXSkKKyAgICAgICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIEdOVSBnZXR0ZXh0IGluIGxpYmludGxdLAorICAgICAgICAgICAgWyRndF9mdW5jX2dudWdldHRleHRfbGliaW50bF0sCisgICAgICAgICAgIFtndF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRJTkNJTlRMIgorICAgICAgICAgICAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJTlRMIgorICAgICAgICAgICAgZG5sIE5vdyBzZWUgd2hldGhlciBsaWJpbnRsIGV4aXN0cyBhbmQgZG9lcyBub3QgZGVwZW5kIG9uIGxpYmljb252LgorICAgICAgICAgICAgQUNfTElOS19JRkVMU0UoCisgICAgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgICAgICAgIFtbCisjaW5jbHVkZSA8bGliaW50bC5oPgorJGd0X3JldmlzaW9uX3Rlc3RfY29kZQorZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCitjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopOworICAgICAgICAgICAgICAgICBdXSwKKyAgICAgICAgICAgICAgICAgW1sKK2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOworcmV0dXJuICogZ2V0dGV4dCAoIiIpJGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgiIikKKyAgICAgICAgICAgICAgICAgXV0pXSwKKyAgICAgICAgICAgICAgW2V2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMiXSwKKyAgICAgICAgICAgICAgW2V2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD1ubyJdKQorICAgICAgICAgICAgZG5sIE5vdyBzZWUgd2hldGhlciBsaWJpbnRsIGV4aXN0cyBhbmQgZGVwZW5kcyBvbiBsaWJpY29udi4KKyAgICAgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgIT0geWVzOyB9ICYmIHRlc3QgLW4gIiRMSUJJQ09OViI7IHRoZW4KKyAgICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorICAgICAgICAgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgICAgICAgIFtbCisjaW5jbHVkZSA8bGliaW50bC5oPgorJGd0X3JldmlzaW9uX3Rlc3RfY29kZQorZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCitjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopOworICAgICAgICAgICAgICAgICAgIF1dLAorICAgICAgICAgICAgICAgICAgIFtbCitiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKK3JldHVybiAqIGdldHRleHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoIiIpCisgICAgICAgICAgICAgICAgICAgXV0pXSwKKyAgICAgICAgICAgICAgICBbTElCSU5UTD0iJExJQklOVEwgJExJQklDT05WIgorICAgICAgICAgICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJExUTElCSUNPTlYiCisgICAgICAgICAgICAgICAgIGV2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMiCisgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBDUFBGTEFHUz0iJGd0X3NhdmVfQ1BQRkxBR1MiCisgICAgICAgICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIl0pCisgICAgICAgIGZpCisKKyAgICAgICAgZG5sIElmIGFuIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQgR05VIGdldHRleHQoKSBpcyBmb3VuZCwKKyAgICAgICAgZG5sIHVzZSBpdC4gIEJ1dCBpZiB0aGlzIG1hY3JvIGlzIHVzZWQgaW4gR05VIGdldHRleHQsIGFuZCBHTlUKKyAgICAgICAgZG5sIGdldHRleHQgaXMgYWxyZWFkeSBwcmVpbnN0YWxsZWQgaW4gbGliaW50bCwgd2UgdXBkYXRlIHRoaXMKKyAgICAgICAgZG5sIGxpYmludGwuICAoQ2YuIHRoZSBpbnN0YWxsIHJ1bGUgaW4gaW50bC9NYWtlZmlsZS5pbi4pCisgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfSBcCisgICAgICAgICAgIHx8IHsgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9IFwKKyAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC1ydW50aW1lIFwKKyAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC10b29sczsgfTsgdGhlbgorICAgICAgICAgIGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dD15ZXMKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRubCBSZXNldCB0aGUgdmFsdWVzIHNldCBieSBzZWFyY2hpbmcgZm9yIGxpYmludGwuCisgICAgICAgICAgTElCSU5UTD0KKyAgICAgICAgICBMVExJQklOVEw9CisgICAgICAgICAgSU5DSU5UTD0KKyAgICAgICAgZmkKKworICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKyAgICAgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgIT0gInllcyI7IHRoZW4KKyAgICAgICAgICBkbmwgR05VIGdldHRleHQgaXMgbm90IGZvdW5kIGluIHRoZSBDIGxpYnJhcnkuCisgICAgICAgICAgZG5sIEZhbGwgYmFjayBvbiBpbmNsdWRlZCBHTlUgZ2V0dGV4dCBsaWJyYXJ5LgorICAgICAgICAgIG5sc19jdl91c2VfZ251X2dldHRleHQ9eWVzCisgICAgICAgIGZpCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgICBkbmwgTWFyayBhY3Rpb25zIHVzZWQgdG8gZ2VuZXJhdGUgR05VIE5MUyBsaWJyYXJ5LgorICAgICAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPXllcworICAgICAgICBVU0VfSU5DTFVERURfTElCSU5UTD15ZXMKKyAgICAgICAgTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExJQklDT05WICRMSUJUSFJFQUQiCisgICAgICAgIExUTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExUTElCSUNPTlYgJExUTElCVEhSRUFEIgorICAgICAgICBMSUJTPWBlY2hvICIgJExJQlMgIiB8IHNlZCAtZSAncy8gLWxpbnRsIC8gLycgLWUgJ3MvXiAvLycgLWUgJ3MvICQvLydgCisgICAgICBmaQorCisgICAgICBDQVRPQkpFWFQ9CisgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKyAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGRubCBNYXJrIGFjdGlvbnMgdG8gdXNlIEdOVSBnZXR0ZXh0IHRvb2xzLgorICAgICAgICBDQVRPQkpFWFQ9LmdtbworICAgICAgZmkKKyAgICBdKQorCisgICAgaWYgdGVzdCAtbiAiJElOVExfTUFDT1NYX0xJQlMiOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKyAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGRubCBTb21lIGV4dHJhIGZsYWdzIGFyZSBuZWVkZWQgZHVyaW5nIGxpbmtpbmcuCisgICAgICAgIExJQklOVEw9IiRMSUJJTlRMICRJTlRMX01BQ09TWF9MSUJTIgorICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJElOVExfTUFDT1NYX0xJQlMiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKyAgICAgICB8fCB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgQUNfREVGSU5FKFtFTkFCTEVfTkxTXSwgWzFdLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgdHJhbnNsYXRpb24gb2YgcHJvZ3JhbSBtZXNzYWdlcyB0byB0aGUgdXNlcidzIG5hdGl2ZSBsYW5ndWFnZQorICAgaXMgcmVxdWVzdGVkLl0pCisgICAgZWxzZQorICAgICAgVVNFX05MUz1ubworICAgIGZpCisgIGZpCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHVzZSBOTFNdKQorICBBQ19NU0dfUkVTVUxUKFskVVNFX05MU10pCisgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGVyZSB0aGUgZ2V0dGV4dCBmdW5jdGlvbiBjb21lcyBmcm9tXSkKKyAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH07IHRoZW4KKyAgICAgICAgZ3Rfc291cmNlPSJleHRlcm5hbCBsaWJpbnRsIgorICAgICAgZWxzZQorICAgICAgICBndF9zb3VyY2U9ImxpYmMiCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGd0X3NvdXJjZT0iaW5jbHVkZWQgaW50bCBkaXJlY3RvcnkiCisgICAgZmkKKyAgICBBQ19NU0dfUkVTVUxUKFskZ3Rfc291cmNlXSkKKyAgZmkKKworICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorCisgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9OyB0aGVuCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpbnRsXSkKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbJExJQklOVExdKQorICAgICAgICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNJTlRMXSkKKyAgICAgIGZpCisKKyAgICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBwYWNrYWdlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICAgIEFDX0RFRklORShbSEFWRV9HRVRURVhUXSwgWzFdLAorICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQorICAgICAgQUNfREVGSU5FKFtIQVZFX0RDR0VUVEVYVF0sIFsxXSwKKyAgICAgICBbRGVmaW5lIGlmIHRoZSBHTlUgZGNnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQorICAgIGZpCisKKyAgICBkbmwgV2UgbmVlZCB0byBwcm9jZXNzIHRoZSBwby8gZGlyZWN0b3J5LgorICAgIFBPU1VCPXBvCisgIGZpCisKKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgIGRubCBJZiB0aGlzIGlzIHVzZWQgaW4gR05VIGdldHRleHQgd2UgaGF2ZSB0byBzZXQgQlVJTERfSU5DTFVERURfTElCSU5UTAorICAgIGRubCB0byAneWVzJyBiZWNhdXNlIHNvbWUgb2YgdGhlIHRlc3RzdWl0ZSByZXF1aXJlcyBpdC4KKyAgICBpZiB0ZXN0ICIkUEFDS0FHRSIgPSBnZXR0ZXh0LXJ1bnRpbWUgfHwgdGVzdCAiJFBBQ0tBR0UiID0gZ2V0dGV4dC10b29sczsgdGhlbgorICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKKyAgICBmaQorCisgICAgZG5sIE1ha2UgYWxsIHZhcmlhYmxlcyB3ZSB1c2Uga25vd24gdG8gYXV0b2NvbmYuCisgICAgQUNfU1VCU1QoW0JVSUxEX0lOQ0xVREVEX0xJQklOVExdKQorICAgIEFDX1NVQlNUKFtVU0VfSU5DTFVERURfTElCSU5UTF0pCisgICAgQUNfU1VCU1QoW0NBVE9CSkVYVF0pCisKKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgY29uZmlndXJlLmlucyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBubHNfY3ZfaGVhZGVyX2ludGw9CisgICAgbmxzX2N2X2hlYWRlcl9saWJndD0KKworICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisgICAgREFUQURJUk5BTUU9c2hhcmUKKyAgICBBQ19TVUJTVChbREFUQURJUk5BTUVdKQorCisgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBJTlNUT0JKRVhUPS5tbworICAgIEFDX1NVQlNUKFtJTlNUT0JKRVhUXSkKKworICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisgICAgR0VOQ0FUPWdlbmNhdAorICAgIEFDX1NVQlNUKFtHRU5DQVRdKQorCisgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBJTlRMT0JKUz0KKyAgICBpZiB0ZXN0ICIkVVNFX0lOQ0xVREVEX0xJQklOVEwiID0geWVzOyB0aGVuCisgICAgICBJTlRMT0JKUz0iXCQoR0VUVE9CSlMpIgorICAgIGZpCisgICAgQUNfU1VCU1QoW0lOVExPQkpTXSkKKworICAgIGRubCBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGlmIHRoZSBzdXJyb3VuZGluZyBwYWNrYWdlIHdpc2hlcyBpdC4KKyAgICBJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWD1ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXgKKyAgICBBQ19TVUJTVChbSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVhdKQorICBdKQorCisgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisgIElOVExMSUJTPSIkTElCSU5UTCIKKyAgQUNfU1VCU1QoW0lOVExMSUJTXSkKKworICBkbmwgTWFrZSBhbGwgZG9jdW1lbnRlZCB2YXJpYWJsZXMga25vd24gdG8gYXV0b2NvbmYuCisgIEFDX1NVQlNUKFtMSUJJTlRMXSkKKyAgQUNfU1VCU1QoW0xUTElCSU5UTF0pCisgIEFDX1NVQlNUKFtQT1NVQl0pCitdKQorCisKK2RubCBndF9ORUVEU19JTklUIGVuc3VyZXMgdGhhdCB0aGUgZ3RfbmVlZHMgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQuCittNF9kZWZpbmUoW2d0X05FRURTX0lOSVRdLAorWworICBtNF9kaXZlcnRfdGV4dChbREVGQVVMVFNdLCBbZ3RfbmVlZHM9XSkKKyAgbTRfZGVmaW5lKFtndF9ORUVEU19JTklUXSwgW10pCitdKQorCisKK2RubCBVc2FnZTogQU1fR05VX0dFVFRFWFRfTkVFRChbTkVFRFNZTUJPTF0pCitBQ19ERUZVTihbQU1fR05VX0dFVFRFWFRfTkVFRF0sCitbCisgIG00X2RpdmVydF90ZXh0KFtJTklUX1BSRVBBUkVdLCBbZ3RfbmVlZHM9IiRndF9uZWVkcyAkMSJdKQorXSkKKworCitkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUX1ZFUlNJT04oW2dldHRleHQtdmVyc2lvbl0pCitBQ19ERUZVTihbQU1fR05VX0dFVFRFWFRfVkVSU0lPTl0sIFtdKQorCisjIGdsaWJjMi5tNCBzZXJpYWwgMworZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCAyMDA0LCAyMDA4LCAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRlc3QgZm9yIHRoZSBHTlUgQyBMaWJyYXJ5LCB2ZXJzaW9uIDIuMCBvciBuZXdlci4KKyMgRnJvbSBCcnVubyBIYWlibGUuCisKK0FDX0RFRlVOKFtndF9HTElCQzJdLAorICBbCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5IDIgb3IgbmV3ZXJdLAorICAgICAgW2FjX2N2X2dudV9saWJyYXJ5XzJdLAorICAgICAgW0FDX0VHUkVQX0NQUChbTHVja3kgR05VIHVzZXJdLAorICAgICAgICBbCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpZmRlZiBfX0dOVV9MSUJSQVJZX18KKyAjaWYgKF9fR0xJQkNfXyA+PSAyKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fCisgIEx1Y2t5IEdOVSB1c2VyCisgI2VuZGlmCisjZW5kaWYKKyAgICAgICAgXSwKKyAgICAgICAgW2FjX2N2X2dudV9saWJyYXJ5XzI9eWVzXSwKKyAgICAgICAgW2FjX2N2X2dudV9saWJyYXJ5XzI9bm9dKQorICAgICAgXQorICAgICkKKyAgICBBQ19TVUJTVChbR0xJQkMyXSkKKyAgICBHTElCQzI9IiRhY19jdl9nbnVfbGlicmFyeV8yIgorICBdCispCisKKyMgZ2xpYmMyMS5tNCBzZXJpYWwgNQorZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCAyMDA0LCAyMDA4LCAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRlc3QgZm9yIHRoZSBHTlUgQyBMaWJyYXJ5LCB2ZXJzaW9uIDIuMSBvciBuZXdlciwgb3IgdUNsaWJjLgorIyBGcm9tIEJydW5vIEhhaWJsZS4KKworQUNfREVGVU4oW2dsX0dMSUJDMjFdLAorICBbCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5ID49IDIuMSBvciB1Q2xpYmNdLAorICAgICAgW2FjX2N2X2dudV9saWJyYXJ5XzJfMV0sCisgICAgICBbQUNfRUdSRVBfQ1BQKFtMdWNreV0sCisgICAgICAgIFsKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2lmZGVmIF9fR05VX0xJQlJBUllfXworICNpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEpIHx8IChfX0dMSUJDX18gPiAyKQorICBMdWNreSBHTlUgdXNlcgorICNlbmRpZgorI2VuZGlmCisjaWZkZWYgX19VQ0xJQkNfXworIEx1Y2t5IHVzZXIKKyNlbmRpZgorICAgICAgICBdLAorICAgICAgICBbYWNfY3ZfZ251X2xpYnJhcnlfMl8xPXllc10sCisgICAgICAgIFthY19jdl9nbnVfbGlicmFyeV8yXzE9bm9dKQorICAgICAgXQorICAgICkKKyAgICBBQ19TVUJTVChbR0xJQkMyMV0pCisgICAgR0xJQkMyMT0iJGFjX2N2X2dudV9saWJyYXJ5XzJfMSIKKyAgXQorKQorCisjIGljb252Lm00IHNlcmlhbCAxOCAoZ2V0dGV4dC0wLjE4LjIpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKK0FDX0RFRlVOKFtBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWV0sCitbCisgIGRubCBQcmVyZXF1aXNpdGVzIG9mIEFDX0xJQl9MSU5LRkxBR1NfQk9EWS4KKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKworICBkbmwgU2VhcmNoIGZvciBsaWJpY29udiBhbmQgZGVmaW5lIExJQklDT05WLCBMVExJQklDT05WIGFuZCBJTkNJQ09OVgorICBkbmwgYWNjb3JkaW5nbHkuCisgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbaWNvbnZdKQorXSkKKworQUNfREVGVU4oW0FNX0lDT05WX0xJTktdLAorWworICBkbmwgU29tZSBzeXN0ZW1zIGhhdmUgaWNvbnYgaW4gbGliYywgc29tZSBoYXZlIGl0IGluIGxpYmljb252IChPU0YvMSBhbmQKKyAgZG5sIHRob3NlIHdpdGggdGhlIHN0YW5kYWxvbmUgcG9ydGFibGUgR05VIGxpYmljb252IGluc3RhbGxlZCkuCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcworCisgIGRubCBTZWFyY2ggZm9yIGxpYmljb252IGFuZCBkZWZpbmUgTElCSUNPTlYsIExUTElCSUNPTlYgYW5kIElOQ0lDT05WCisgIGRubCBhY2NvcmRpbmdseS4KKyAgQUNfUkVRVUlSRShbQU1fSUNPTlZfTElOS0ZMQUdTX0JPRFldKQorCisgIGRubCBBZGQgJElOQ0lDT05WIHRvIENQUEZMQUdTIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2tzLAorICBkbmwgYmVjYXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGxpYmljb252IGFuZCBub3QgZGlzYWJsZWQgaXRzIHVzZQorICBkbmwgdmlhIC0td2l0aG91dC1saWJpY29udi1wcmVmaXgsIGhlIHdhbnRzIHRvIHVzZSBpdC4gVGhlIGZpcnN0CisgIGRubCBBQ19MSU5LX0lGRUxTRSB3aWxsIHRoZW4gZmFpbCwgdGhlIHNlY29uZCBBQ19MSU5LX0lGRUxTRSB3aWxsIHN1Y2NlZWQuCisgIGFtX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DSUNPTlZdKQorCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgaWNvbnZdLCBbYW1fY3ZfZnVuY19pY29udl0sIFsKKyAgICBhbV9jdl9mdW5jX2ljb252PSJubywgY29uc2lkZXIgaW5zdGFsbGluZyBHTlUgbGliaWNvbnYiCisgICAgYW1fY3ZfbGliX2ljb252PW5vCisgICAgQUNfTElOS19JRkVMU0UoCisgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgW1sKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxpY29udi5oPgorICAgICAgICAgXV0sCisgICAgICAgICBbW2ljb252X3QgY2QgPSBpY29udl9vcGVuKCIiLCIiKTsKKyAgICAgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgICAgIGljb252X2Nsb3NlKGNkKTtdXSldLAorICAgICAgW2FtX2N2X2Z1bmNfaWNvbnY9eWVzXSkKKyAgICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgIT0geWVzOyB0aGVuCisgICAgICBhbV9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorICAgICAgQUNfTElOS19JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgIFtbCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8aWNvbnYuaD4KKyAgICAgICAgICAgXV0sCisgICAgICAgICAgIFtbaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOworICAgICAgICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgICAgIGljb252X2Nsb3NlKGNkKTtdXSldLAorICAgICAgICBbYW1fY3ZfbGliX2ljb252PXllc10KKyAgICAgICAgW2FtX2N2X2Z1bmNfaWNvbnY9eWVzXSkKKyAgICAgIExJQlM9IiRhbV9zYXZlX0xJQlMiCisgICAgZmkKKyAgXSkKKyAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIGljb252XSwgW2FtX2N2X2Z1bmNfaWNvbnZfd29ya3NdLCBbCisgICAgICBkbmwgVGhpcyB0ZXN0cyBhZ2FpbnN0IGJ1Z3MgaW4gQUlYIDUuMSwgQUlYIDYuMS4uNy4xLCBIUC1VWCAxMS4xMSwKKyAgICAgIGRubCBTb2xhcmlzIDEwLgorICAgICAgYW1fc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIGlmIHRlc3QgJGFtX2N2X2xpYl9pY29udiA9IHllczsgdGhlbgorICAgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCisgICAgICBmaQorICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSA8aWNvbnYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK2ludCBtYWluICgpCit7CisgIGludCByZXN1bHQgPSAwOworICAvKiBUZXN0IGFnYWluc3QgQUlYIDUuMSBidWc6IEZhaWx1cmVzIGFyZSBub3QgZGlzdGluZ3Vpc2hhYmxlIGZyb20gc3VjY2Vzc2Z1bAorICAgICByZXR1cm5zLiAgKi8KKyAgeworICAgIGljb252X3QgY2RfdXRmOF90b184ODU5MSA9IGljb252X29wZW4gKCJJU084ODU5LTEiLCAiVVRGLTgiKTsKKyAgICBpZiAoY2RfdXRmOF90b184ODU5MSAhPSAoaWNvbnZfdCkoLTEpKQorICAgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwzNDJcMjAyXDI1NCI7IC8qIEVVUk8gU0lHTiAqLworICAgICAgICBjaGFyIGJ1ZlsxMF07CisgICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7CisgICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IHN0cmxlbiAoaW5wdXQpOworICAgICAgICBjaGFyICpvdXRwdHIgPSBidWY7CisgICAgICAgIHNpemVfdCBvdXRieXRlc2xlZnQgPSBzaXplb2YgKGJ1Zik7CisgICAgICAgIHNpemVfdCByZXMgPSBpY29udiAoY2RfdXRmOF90b184ODU5MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7CisgICAgICAgIGlmIChyZXMgPT0gMCkKKyAgICAgICAgICByZXN1bHQgfD0gMTsKKyAgICAgICAgaWNvbnZfY2xvc2UgKGNkX3V0ZjhfdG9fODg1OTEpOworICAgICAgfQorICB9CisgIC8qIFRlc3QgYWdhaW5zdCBTb2xhcmlzIDEwIGJ1ZzogRmFpbHVyZXMgYXJlIG5vdCBkaXN0aW5ndWlzaGFibGUgZnJvbQorICAgICBzdWNjZXNzZnVsIHJldHVybnMuICAqLworICB7CisgICAgaWNvbnZfdCBjZF9hc2NpaV90b184ODU5MSA9IGljb252X29wZW4gKCJJU084ODU5LTEiLCAiNjQ2Iik7CisgICAgaWYgKGNkX2FzY2lpX3RvXzg4NTkxICE9IChpY29udl90KSgtMSkpCisgICAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGlucHV0W10gPSAiXDI2MyI7CisgICAgICAgIGNoYXIgYnVmWzEwXTsKKyAgICAgICAgY29uc3QgY2hhciAqaW5wdHIgPSBpbnB1dDsKKyAgICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gc3RybGVuIChpbnB1dCk7CisgICAgICAgIGNoYXIgKm91dHB0ciA9IGJ1ZjsKKyAgICAgICAgc2l6ZV90IG91dGJ5dGVzbGVmdCA9IHNpemVvZiAoYnVmKTsKKyAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChjZF9hc2NpaV90b184ODU5MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7CisgICAgICAgIGlmIChyZXMgPT0gMCkKKyAgICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAgICAgaWNvbnZfY2xvc2UgKGNkX2FzY2lpX3RvXzg4NTkxKTsKKyAgICAgIH0KKyAgfQorICAvKiBUZXN0IGFnYWluc3QgQUlYIDYuMS4uNy4xIGJ1ZzogQnVmZmVyIG92ZXJydW4uICAqLworICB7CisgICAgaWNvbnZfdCBjZF84ODU5MV90b191dGY4ID0gaWNvbnZfb3BlbiAoIlVURi04IiwgIklTTy04ODU5LTEiKTsKKyAgICBpZiAoY2RfODg1OTFfdG9fdXRmOCAhPSAoaWNvbnZfdCkoLTEpKQorICAgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwzMDQiOworICAgICAgICBzdGF0aWMgY2hhciBidWZbMl0gPSB7IChjaGFyKTB4REUsIChjaGFyKTB4QUQgfTsKKyAgICAgICAgY29uc3QgY2hhciAqaW5wdHIgPSBpbnB1dDsKKyAgICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gMTsKKyAgICAgICAgY2hhciAqb3V0cHRyID0gYnVmOworICAgICAgICBzaXplX3Qgb3V0Ynl0ZXNsZWZ0ID0gMTsKKyAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChjZF84ODU5MV90b191dGY4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmaW5wdHIsICZpbmJ5dGVzbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHRyLCAmb3V0Ynl0ZXNsZWZ0KTsKKyAgICAgICAgaWYgKHJlcyAhPSAoc2l6ZV90KSgtMSkgfHwgb3V0cHRyIC0gYnVmID4gMSB8fCBidWZbMV0gIT0gKGNoYXIpMHhBRCkKKyAgICAgICAgICByZXN1bHQgfD0gNDsKKyAgICAgICAgaWNvbnZfY2xvc2UgKGNkXzg4NTkxX3RvX3V0ZjgpOworICAgICAgfQorICB9CisjaWYgMCAvKiBUaGlzIGJ1ZyBjb3VsZCBiZSB3b3JrZWQgYXJvdW5kIGJ5IHRoZSBjYWxsZXIuICAqLworICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBQb3NpdGl2ZSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiAwLiAgKi8KKyAgeworICAgIGljb252X3QgY2RfODg1OTFfdG9fdXRmOCA9IGljb252X29wZW4gKCJ1dGY4IiwgImlzbzg4NTkxIik7CisgICAgaWYgKGNkXzg4NTkxX3RvX3V0ZjggIT0gKGljb252X3QpKC0xKSkKKyAgICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaW5wdXRbXSA9ICJcMzA0cmdlciBtaXQgYlwzNjZzZW4gQlwzNzRiY2hlbiBvaG5lIEF1Z2VubWFcMzM3IjsKKyAgICAgICAgY2hhciBidWZbNTBdOworICAgICAgICBjb25zdCBjaGFyICppbnB0ciA9IGlucHV0OworICAgICAgICBzaXplX3QgaW5ieXRlc2xlZnQgPSBzdHJsZW4gKGlucHV0KTsKKyAgICAgICAgY2hhciAqb3V0cHRyID0gYnVmOworICAgICAgICBzaXplX3Qgb3V0Ynl0ZXNsZWZ0ID0gc2l6ZW9mIChidWYpOworICAgICAgICBzaXplX3QgcmVzID0gaWNvbnYgKGNkXzg4NTkxX3RvX3V0ZjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZpbnB0ciwgJmluYnl0ZXNsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdHIsICZvdXRieXRlc2xlZnQpOworICAgICAgICBpZiAoKGludClyZXMgPiAwKQorICAgICAgICAgIHJlc3VsdCB8PSA4OworICAgICAgICBpY29udl9jbG9zZSAoY2RfODg1OTFfdG9fdXRmOCk7CisgICAgICB9CisgIH0KKyNlbmRpZgorICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMKKyAgICAgcHJvdmlkZWQuICAqLworICBpZiAoLyogVHJ5IHN0YW5kYXJkaXplZCBuYW1lcy4gICovCisgICAgICBpY29udl9vcGVuICgiVVRGLTgiLCAiRVVDLUpQIikgPT0gKGljb252X3QpKC0xKQorICAgICAgLyogVHJ5IElSSVgsIE9TRi8xIG5hbWVzLiAgKi8KKyAgICAgICYmIGljb252X29wZW4gKCJVVEYtOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkKKyAgICAgIC8qIFRyeSBBSVggbmFtZXMuICAqLworICAgICAgJiYgaWNvbnZfb3BlbiAoIlVURi04IiwgIklCTS1ldWNKUCIpID09IChpY29udl90KSgtMSkKKyAgICAgIC8qIFRyeSBIUC1VWCBuYW1lcy4gICovCisgICAgICAmJiBpY29udl9vcGVuICgidXRmOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkpCisgICAgcmVzdWx0IHw9IDE2OworICByZXR1cm4gcmVzdWx0OworfV1dKV0sCisgICAgICAgIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPXllc10sCisgICAgICAgIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPW5vXSwKKyAgICAgICAgWworY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICBhaXgqIHwgaHB1eCopIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICAqKSAgICAgICAgICAgIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9Imd1ZXNzaW5nIHllcyIgOzsKKyAgICAgICAgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgICAgXSkKKyAgICAgIExJQlM9IiRhbV9zYXZlX0xJQlMiCisgICAgXSkKKyAgICBjYXNlICIkYW1fY3ZfZnVuY19pY29udl93b3JrcyIgaW4KKyAgICAgICpubykgYW1fZnVuY19pY29udj1ubyBhbV9jdl9saWJfaWNvbnY9bm8gOzsKKyAgICAgICopICAgYW1fZnVuY19pY29udj15ZXMgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBhbV9mdW5jX2ljb252PW5vIGFtX2N2X2xpYl9pY29udj1ubworICBmaQorICBpZiB0ZXN0ICIkYW1fZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfSUNPTlZdLCBbMV0sCisgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uIGFuZCBpdCB3b3Jrcy5dKQorICBmaQorICBpZiB0ZXN0ICIkYW1fY3ZfbGliX2ljb252IiA9IHllczsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpY29udl0pCisgICAgQUNfTVNHX1JFU1VMVChbJExJQklDT05WXSkKKyAgZWxzZQorICAgIGRubCBJZiAkTElCSUNPTlYgZGlkbid0IGxlYWQgdG8gYSB1c2FibGUgbGlicmFyeSwgd2UgZG9uJ3QgbmVlZCAkSU5DSUNPTlYKKyAgICBkbmwgZWl0aGVyLgorICAgIENQUEZMQUdTPSIkYW1fc2F2ZV9DUFBGTEFHUyIKKyAgICBMSUJJQ09OVj0KKyAgICBMVExJQklDT05WPQorICBmaQorICBBQ19TVUJTVChbTElCSUNPTlZdKQorICBBQ19TVUJTVChbTFRMSUJJQ09OVl0pCitdKQorCitkbmwgRGVmaW5lIEFNX0lDT05WIHVzaW5nIEFDX0RFRlVOX09OQ0UgZm9yIEF1dG9jb25mID49IDIuNjQsIGluIG9yZGVyIHRvCitkbmwgYXZvaWQgd2FybmluZ3MgbGlrZQorZG5sICJ3YXJuaW5nOiBBQ19SRVFVSVJFOiBgQU1fSUNPTlYnIHdhcyBleHBhbmRlZCBiZWZvcmUgaXQgd2FzIHJlcXVpcmVkIi4KK2RubCBUaGlzIGlzIHRyaWNreSBiZWNhdXNlIG9mIHRoZSB3YXkgJ2FjbG9jYWwnIGlzIGltcGxlbWVudGVkOgorZG5sIC0gSXQgcmVxdWlyZXMgZGVmaW5pbmcgYW4gYXV4aWxpYXJ5IG1hY3JvIHdob3NlIG5hbWUgZW5kcyBpbiBBQ19ERUZVTi4KK2RubCAgIE90aGVyd2lzZSBhY2xvY2FsJ3MgaW5pdGlhbCBzY2FuIHBhc3Mgd291bGQgbWlzcyB0aGUgbWFjcm8gZGVmaW5pdGlvbi4KK2RubCAtIEl0IHJlcXVpcmVzIGEgbGluZSBicmVhayBpbnNpZGUgdGhlIEFDX0RFRlVOX09OQ0UgYW5kIEFDX0RFRlVOIGV4cGFuc2lvbnMuCitkbmwgICBPdGhlcndpc2UgYWNsb2NhbCB3b3VsZCBlbWl0IG1hbnkgIlVzZSBvZiB1bmluaXRpYWxpemVkIHZhbHVlICQxIgorZG5sICAgd2FybmluZ3MuCittNF9kZWZpbmUoW2dsX2ljb252X0FDX0RFRlVOXSwKKyAgbTRfdmVyc2lvbl9wcmVyZXEoWzIuNjRdLAorICAgIFtbQUNfREVGVU5fT05DRSgKKyAgICAgICAgWyQxXSwgWyQyXSldXSwKKyAgICBbbTRfaWZkZWYoW2dsXzAwR05VTElCXSwKKyAgICAgICBbW0FDX0RFRlVOX09OQ0UoCisgICAgICAgICAgIFskMV0sIFskMl0pXV0sCisgICAgICAgW1tBQ19ERUZVTigKKyAgICAgICAgICAgWyQxXSwgWyQyXSldXSldKSkKK2dsX2ljb252X0FDX0RFRlVOKFtBTV9JQ09OVl0sCitbCisgIEFNX0lDT05WX0xJTksKKyAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgaWNvbnYgZGVjbGFyYXRpb25dKQorICAgIEFDX0NBQ0hFX1ZBTChbYW1fY3ZfcHJvdG9faWNvbnZdLCBbCisgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgW1sKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxpY29udi5oPgorZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykKK3NpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgY2hhciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqICpvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KTsKKyNlbHNlCitzaXplX3QgaWNvbnYoKTsKKyNlbmRpZgorICAgICAgICAgICBdXSwKKyAgICAgICAgICAgW1tdXSldLAorICAgICAgICBbYW1fY3ZfcHJvdG9faWNvbnZfYXJnMT0iIl0sCisgICAgICAgIFthbV9jdl9wcm90b19pY29udl9hcmcxPSJjb25zdCJdKQorICAgICAgYW1fY3ZfcHJvdG9faWNvbnY9ImV4dGVybiBzaXplX3QgaWNvbnYgKGljb252X3QgY2QsICRhbV9jdl9wcm90b19pY29udl9hcmcxIGNoYXIgKiAqaW5idWYsIHNpemVfdCAqaW5ieXRlc2xlZnQsIGNoYXIgKiAqb3V0YnVmLCBzaXplX3QgKm91dGJ5dGVzbGVmdCk7Il0pCisgICAgYW1fY3ZfcHJvdG9faWNvbnY9YGVjaG8gIlskXWFtX2N2X3Byb3RvX2ljb252IiB8IHRyIC1zICcgJyB8IHNlZCAtZSAncy8oIC8oLydgCisgICAgQUNfTVNHX1JFU1VMVChbCisgICAgICAgICAkYW1fY3ZfcHJvdG9faWNvbnZdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChbSUNPTlZfQ09OU1RdLCBbJGFtX2N2X3Byb3RvX2ljb252X2FyZzFdLAorICAgICAgW0RlZmluZSBhcyBjb25zdCBpZiB0aGUgZGVjbGFyYXRpb24gb2YgaWNvbnYoKSBuZWVkcyBjb25zdC5dKQorICAgIGRubCBBbHNvIHN1YnN0aXR1dGUgSUNPTlZfQ09OU1QgaW4gdGhlIGdudWxpYiBnZW5lcmF0ZWQgPGljb252Lmg+LgorICAgIG00X2lmZGVmKFtnbF9JQ09OVl9IX0RFRkFVTFRTXSwKKyAgICAgIFtBQ19SRVFVSVJFKFtnbF9JQ09OVl9IX0RFRkFVTFRTXSkKKyAgICAgICBpZiB0ZXN0IC1uICIkYW1fY3ZfcHJvdG9faWNvbnZfYXJnMSI7IHRoZW4KKyAgICAgICAgIElDT05WX0NPTlNUPSJjb25zdCIKKyAgICAgICBmaQorICAgICAgXSkKKyAgZmkKK10pCisKKyMgaW50ZGl2MC5tNCBzZXJpYWwgNiAoZ2V0dGV4dC0wLjE4LjIpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA3LTIwMDgsIDIwMTAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKK0FDX0RFRlVOKFtndF9JTlRESVYwXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKworICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIFNJR0ZQRV0sCisgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUsCisgICAgWworICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9CitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgIG1hY29zKiB8IGRhcndpbls2LTldKiB8IGRhcndpblsxLTldWzAtOV0qKQorICAgICAgICAgICMgT24gTWFjIE9TIFggMTAuMiBvciBuZXdlciwganVzdCBhc3N1bWUgdGhlIHNhbWUgYXMgd2hlbiBjcm9zcy0KKyAgICAgICAgICAjIGNvbXBpbGluZy4gSWYgd2Ugd2VyZSB0byBwZXJmb3JtIHRoZSByZWFsIHRlc3QsIDEgQ3Jhc2ggUmVwb3J0CisgICAgICAgICAgIyBkaWFsb2cgd2luZG93IHdvdWxkIHBvcCB1cC4KKyAgICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgICAgICBpWzM0NTY3XTg2IHwgeDg2XzY0KQorICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICA7OworICAgICAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgaWYgdGVzdCAteiAiJGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlIjsgdGhlbgorICAgICAgICBBQ19SVU5fSUZFTFNFKAorICAgICAgICAgIFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCitzdGF0aWMgdm9pZAorc2lnZnBlX2hhbmRsZXIgKGludCBzaWcpCit7CisgIC8qIEV4aXQgd2l0aCBjb2RlIDAgaWYgU0lHRlBFLCB3aXRoIGNvZGUgMSBpZiBhbnkgb3RoZXIgc2lnbmFsLiAgKi8KKyAgZXhpdCAoc2lnICE9IFNJR0ZQRSk7Cit9CisKK2ludCB4ID0gMTsKK2ludCB5ID0gMDsKK2ludCB6OworaW50IG5hbjsKKworaW50IG1haW4gKCkKK3sKKyAgc2lnbmFsIChTSUdGUEUsIHNpZ2ZwZV9oYW5kbGVyKTsKKy8qIElSSVggYW5kIEFJWCAod2hlbiAieGxjIC1xY2hlY2siIGlzIHVzZWQpIHlpZWxkIHNpZ25hbCBTSUdUUkFQLiAgKi8KKyNpZiAoZGVmaW5lZCAoX19zZ2kpIHx8IGRlZmluZWQgKF9BSVgpKSAmJiBkZWZpbmVkIChTSUdUUkFQKQorICBzaWduYWwgKFNJR1RSQVAsIHNpZ2ZwZV9oYW5kbGVyKTsKKyNlbmRpZgorLyogTGludXgvU1BBUkMgeWllbGRzIHNpZ25hbCBTSUdJTEwuICAqLworI2lmIGRlZmluZWQgKF9fc3BhcmNfXykgJiYgZGVmaW5lZCAoX19saW51eF9fKQorICBzaWduYWwgKFNJR0lMTCwgc2lnZnBlX2hhbmRsZXIpOworI2VuZGlmCisKKyAgeiA9IHggLyB5OworICBuYW4gPSB5IC8geTsKKyAgZXhpdCAoMik7Cit9CitdXSldLAorICAgICAgICAgIFtndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT15ZXNdLAorICAgICAgICAgIFtndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT1ub10sCisgICAgICAgICAgWworICAgICAgICAgICAgIyBHdWVzcyBiYXNlZCBvbiB0aGUgQ1BVLgorY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgICAgICAgYWxwaGEqIHwgaVszNDU2N104NiB8IHg4Nl82NCB8IG02OGsgfCBzMzkwKikKKyAgICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICAgICAgXSkKKyAgICAgIGZpCisgICAgXSkKKyAgY2FzZSAiJGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlIiBpbgorICAgICp5ZXMpIHZhbHVlPTE7OworICAgICopIHZhbHVlPTA7OworICBlc2FjCisgIEFDX0RFRklORV9VTlFVT1RFRChbSU5URElWMF9SQUlTRVNfU0lHRlBFXSwgWyR2YWx1ZV0sCisgICAgW0RlZmluZSBpZiBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIHNpZ25hbCBTSUdGUEUuXSkKK10pCisKKyMgaW50bC5tNCBzZXJpYWwgMjUgKGdldHRleHQtMC4xOC4zKQorZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIEF1dGhvcnM6CitkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDkuCisKK0FDX1BSRVJFUShbMi42MF0pCisKK2RubCBDaGVja3MgZm9yIGFsbCBwcmVyZXF1aXNpdGVzIG9mIHRoZSBpbnRsIHN1YmRpcmVjdG9yeSwKK2RubCBleGNlcHQgZm9yIElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYIChhbmQgcG9zc2libHkgTElCVE9PTCksIElOVExPQkpTLAorZG5sICAgICAgICAgICAgVVNFX0lOQ0xVREVEX0xJQklOVEwsIEJVSUxEX0lOQ0xVREVEX0xJQklOVEwuCitBQ19ERUZVTihbQU1fSU5UTF9TVUJESVJdLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAorICBBQ19SRVFVSVJFKFtBQ19QUk9HX01LRElSX1BdKWRubAorICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorICBBQ19SRVFVSVJFKFtndF9HTElCQzJdKWRubAorICBBQ19SRVFVSVJFKFtBQ19QUk9HX1JBTkxJQl0pZG5sCisgIEFDX1JFUVVJUkUoW2dsX1ZJU0lCSUxJVFldKWRubAorICBBQ19SRVFVSVJFKFtndF9JTlRMX1NVQkRJUl9DT1JFXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9MT05HX0xPTkdfSU5UXSlkbmwKKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9XQ0hBUl9UXSlkbmwKKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9XSU5UX1RdKWRubAorICBBQ19SRVFVSVJFKFtnbF9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisgIEFDX1JFUVVJUkUoW2d0X1RZUEVfSU5UTUFYX1RdKQorICBBQ19SRVFVSVJFKFtndF9QUklOVEZfUE9TSVhdKQorICBBQ19SRVFVSVJFKFtnbF9HTElCQzIxXSlkbmwKKyAgQUNfUkVRVUlSRShbZ2xfWFNJWkVdKWRubAorICBBQ19SRVFVSVJFKFtnbF9GQ05UTF9PX0ZMQUdTXSlkbmwKKyAgQUNfUkVRVUlSRShbZ3RfSU5UTF9NQUNPU1hdKWRubAorICBBQ19SRVFVSVJFKFtnbF9FWFRFUk5fSU5MSU5FXSlkbmwKKworICBkbmwgU3VwcG9ydCBmb3IgYXV0b21ha2UncyAtLWVuYWJsZS1zaWxlbnQtcnVsZXMuCisgIGNhc2UgIiRlbmFibGVfc2lsZW50X3J1bGVzIiBpbgorICAgIHllcykgSU5UTF9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKKyAgICBubykgIElOVExfREVGQVVMVF9WRVJCT1NJVFk9MTs7CisgICAgKikgICBJTlRMX0RFRkFVTFRfVkVSQk9TSVRZPTE7OworICBlc2FjCisgIEFDX1NVQlNUKFtJTlRMX0RFRkFVTFRfVkVSQk9TSVRZXSkKKworICBBQ19DSEVDS19UWVBFKFtwdHJkaWZmX3RdLCAsCisgICAgW0FDX0RFRklORShbcHRyZGlmZl90XSwgW2xvbmddLAorICAgICAgIFtEZWZpbmUgYXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyB0d28gcG9pbnRlcnMsIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBkZWZpbmUgaXQuXSkKKyAgICBdKQorICBBQ19DSEVDS19IRUFERVJTKFtmZWF0dXJlcy5oIHN0ZGRlZi5oIHN0ZGxpYi5oIHN0cmluZy5oXSkKKyAgQUNfQ0hFQ0tfRlVOQ1MoW2FzcHJpbnRmIGZ3cHJpbnRmIG5ld2xvY2FsZSBwdXRlbnYgc2V0ZW52IHNldGxvY2FsZSBcCisgICAgc25wcmludGYgc3RybmxlbiB3Y3NsZW4gd2NzbmxlbiBtYnJ0b3djIHdjcnRvbWJdKQorCisgIGRubCBVc2UgdGhlIF9zbnByaW50ZiBmdW5jdGlvbiBvbmx5IGlmIGl0IGlzIGRlY2xhcmVkIChiZWNhdXNlIG9uIE5ldEJTRCBpdAorICBkbmwgaXMgZGVmaW5lZCBhcyBhIHdlYWsgYWxpYXMgb2Ygc25wcmludGY7IHdlIHByZWZlciB0byB1c2UgdGhlIGxhdHRlcikuCisgIEFDX0NIRUNLX0RFQ0xTKFtfc25wcmludGYsIF9zbndwcmludGZdLCAsICwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisKKyAgZG5sIFVzZSB0aGUgKl91bmxvY2tlZCBmdW5jdGlvbnMgb25seSBpZiB0aGV5IGFyZSBkZWNsYXJlZC4KKyAgZG5sIChiZWNhdXNlIHNvbWUgb2YgdGhlbSB3ZXJlIGRlZmluZWQgd2l0aG91dCBiZWluZyBkZWNsYXJlZCBpbiBTb2xhcmlzCisgIGRubCAyLjUuMSBidXQgd2VyZSByZW1vdmVkIGluIFNvbGFyaXMgMi42LCB3aGVyZWFzIHdlIHdhbnQgYmluYXJpZXMgYnVpbHQKKyAgZG5sIG9uIFNvbGFyaXMgMi41LjEgdG8gcnVuIG9uIFNvbGFyaXMgMi42KS4KKyAgQUNfQ0hFQ0tfREVDTFMoW2dldGNfdW5sb2NrZWRdLCAsICwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisKKyAgY2FzZSAkZ3RfY3ZfZnVuY19wcmludGZfcG9zaXggaW4KKyAgICAqeWVzKSBIQVZFX1BPU0lYX1BSSU5URj0xIDs7CisgICAgKikgSEFWRV9QT1NJWF9QUklOVEY9MCA7OworICBlc2FjCisgIEFDX1NVQlNUKFtIQVZFX1BPU0lYX1BSSU5URl0pCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2FzcHJpbnRmIiA9IHllczsgdGhlbgorICAgIEhBVkVfQVNQUklOVEY9MQorICBlbHNlCisgICAgSEFWRV9BU1BSSU5URj0wCisgIGZpCisgIEFDX1NVQlNUKFtIQVZFX0FTUFJJTlRGXSkKKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfc25wcmludGYiID0geWVzOyB0aGVuCisgICAgSEFWRV9TTlBSSU5URj0xCisgIGVsc2UKKyAgICBIQVZFX1NOUFJJTlRGPTAKKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfU05QUklOVEZdKQorICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19uZXdsb2NhbGUiID0geWVzOyB0aGVuCisgICAgSEFWRV9ORVdMT0NBTEU9MQorICBlbHNlCisgICAgSEFWRV9ORVdMT0NBTEU9MAorICBmaQorICBBQ19TVUJTVChbSEFWRV9ORVdMT0NBTEVdKQorICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY193cHJpbnRmIiA9IHllczsgdGhlbgorICAgIEhBVkVfV1BSSU5URj0xCisgIGVsc2UKKyAgICBIQVZFX1dQUklOVEY9MAorICBmaQorICBBQ19TVUJTVChbSEFWRV9XUFJJTlRGXSkKKworICBBTV9MQU5HSU5GT19DT0RFU0VUCisgIGd0X0xDX01FU1NBR0VTCisKKyAgZG5sIENvbXBpbGF0aW9uIG9uIG1pbmd3IGFuZCBDeWd3aW4gbmVlZHMgc3BlY2lhbCBNYWtlZmlsZSBydWxlcywgYmVjYXVzZQorICBkbmwgMS4gd2hlbiB3ZSBpbnN0YWxsIGEgc2hhcmVkIGxpYnJhcnksIHdlIG11c3QgYXJyYW5nZSB0byBleHBvcnQKKyAgZG5sICAgIGF1eGlsaWFyeSBwb2ludGVyIHZhcmlhYmxlcyBmb3IgZXZlcnkgZXhwb3J0ZWQgdmFyaWFibGUsCisgIGRubCAyLiB3aGVuIHdlIGluc3RhbGwgYSBzaGFyZWQgbGlicmFyeSBhbmQgYSBzdGF0aWMgbGlicmFyeSBzaW11bHRhbmVvdXNseSwKKyAgZG5sICAgIHRoZSBpbmNsdWRlIGZpbGUgc3BlY2lmaWVzIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBhbmQgdGhlcmVmb3JlIHdlCisgIGRubCAgICBtdXN0IGFycmFuZ2UgdG8gZGVmaW5lIHRoZSBhdXhpbGlhcnkgcG9pbnRlciB2YXJpYWJsZXMgZm9yIHRoZQorICBkbmwgICAgZXhwb3J0ZWQgdmFyaWFibGVzIF9hbHNvXyBpbiB0aGUgc3RhdGljIGxpYnJhcnkuCisgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllczsgdGhlbgorICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgbWluZ3cqIHwgY3lnd2luKikgaXNfd29lMzJkbGw9eWVzIDs7CisgICAgICAqKSBpc193b2UzMmRsbD1ubyA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGlzX3dvZTMyZGxsPW5vCisgIGZpCisgIFdPRTMyRExMPSRpc193b2UzMmRsbAorICBBQ19TVUJTVChbV09FMzJETExdKQorCisgIGRubCBPbiBtaW5ndyBhbmQgQ3lnd2luLCB3ZSBjYW4gYWN0aXZhdGUgc3BlY2lhbCBNYWtlZmlsZSBydWxlcyB3aGljaCBhZGQKKyAgZG5sIHZlcnNpb24gaW5mb3JtYXRpb24gdG8gdGhlIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzLgorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBtaW5ndyogfCBjeWd3aW4qKSBpc193b2UzMj15ZXMgOzsKKyAgICAqKSBpc193b2UzMj1ubyA7OworICBlc2FjCisgIFdPRTMyPSRpc193b2UzMgorICBBQ19TVUJTVChbV09FMzJdKQorICBpZiB0ZXN0ICRXT0UzMiA9IHllczsgdGhlbgorICAgIGRubCBDaGVjayBmb3IgYSBwcm9ncmFtIHRoYXQgY29tcGlsZXMgV2luZG93cyByZXNvdXJjZSBmaWxlcy4KKyAgICBBQ19DSEVDS19UT09MKFtXSU5EUkVTXSwgW3dpbmRyZXNdKQorICBmaQorCisgIGRubCBEZXRlcm1pbmUgd2hldGhlciB3aGVuIGNyZWF0aW5nIGEgbGlicmFyeSwgIi1sYyIgc2hvdWxkIGJlIHBhc3NlZCB0bworICBkbmwgbGlidG9vbCBvciBub3QuIE9uIG1hbnkgcGxhdGZvcm1zLCBpdCBpcyByZXF1aXJlZCBmb3IgdGhlIGxpYnRvb2wgb3B0aW9uCisgIGRubCAtbm8tdW5kZWZpbmVkIHRvIHdvcmsuIE9uIEhQLVVYLCBob3dldmVyLCB0aGUgLWxjIC0gc3RvcmVkIGJ5IGxpYnRvb2wKKyAgZG5sIGluIHRoZSAqLmxhIGZpbGVzIC0gbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBjcmVhdGUgbXVsdGl0aHJlYWRlZCBwcm9ncmFtcywKKyAgZG5sIGJlY2F1c2UgbGlidG9vbCBhbHNvIHJlb3JkZXJzIHRoZSAtbGMgdG8gY29tZSBiZWZvcmUgdGhlIC1wdGhyZWFkLCBhbmQKKyAgZG5sIHRoaXMgZGlzYWJsZXMgcHRocmVhZF9jcmVhdGUoKSA8aHR0cDovL2RvY3MuaHAuY29tL2VuLzE4OTYvcHRocmVhZHMuaHRtbD4uCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGhwdXgqKSBMVExJQkM9IiIgOzsKKyAgICAqKSAgICAgTFRMSUJDPSItbGMiIDs7CisgIGVzYWMKKyAgQUNfU1VCU1QoW0xUTElCQ10pCisKKyAgZG5sIFJlbmFtZSBzb21lIG1hY3JvcyBhbmQgZnVuY3Rpb25zIHVzZWQgZm9yIGxvY2tpbmcuCisgIEFIX0JPVFRPTShbCisjZGVmaW5lIF9fbGliY19sb2NrX3QgICAgICAgICAgICAgICAgICAgZ2xfbG9ja190CisjZGVmaW5lIF9fbGliY19sb2NrX2RlZmluZSAgICAgICAgICAgICAgZ2xfbG9ja19kZWZpbmUKKyNkZWZpbmUgX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkICBnbF9sb2NrX2RlZmluZV9pbml0aWFsaXplZAorI2RlZmluZSBfX2xpYmNfbG9ja19pbml0ICAgICAgICAgICAgICAgIGdsX2xvY2tfaW5pdAorI2RlZmluZSBfX2xpYmNfbG9ja19sb2NrICAgICAgICAgICAgICAgIGdsX2xvY2tfbG9jaworI2RlZmluZSBfX2xpYmNfbG9ja191bmxvY2sgICAgICAgICAgICAgIGdsX2xvY2tfdW5sb2NrCisjZGVmaW5lIF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90ICAgICAgICAgICAgICAgICAgIGdsX3JlY3Vyc2l2ZV9sb2NrX3QKKyNkZWZpbmUgX19saWJjX2xvY2tfZGVmaW5lX3JlY3Vyc2l2ZSAgICAgICAgICAgICAgZ2xfcmVjdXJzaXZlX2xvY2tfZGVmaW5lCisjZGVmaW5lIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZF9yZWN1cnNpdmUgIGdsX3JlY3Vyc2l2ZV9sb2NrX2RlZmluZV9pbml0aWFsaXplZAorI2RlZmluZSBfX2xpYmNfbG9ja19pbml0X3JlY3Vyc2l2ZSAgICAgICAgICAgICAgICBnbF9yZWN1cnNpdmVfbG9ja19pbml0CisjZGVmaW5lIF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlICAgICAgICAgICAgICAgIGdsX3JlY3Vyc2l2ZV9sb2NrX2xvY2sKKyNkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZSAgICAgICAgICAgICAgZ2xfcmVjdXJzaXZlX2xvY2tfdW5sb2NrCisjZGVmaW5lIGdsdGhyZWFkX2luX3VzZSAgbGliaW50bF90aHJlYWRfaW5fdXNlCisjZGVmaW5lIGdsdGhyZWFkX2xvY2tfaW5pdF9mdW5jICAgICBsaWJpbnRsX2xvY2tfaW5pdF9mdW5jCisjZGVmaW5lIGdsdGhyZWFkX2xvY2tfbG9ja19mdW5jICAgICBsaWJpbnRsX2xvY2tfbG9ja19mdW5jCisjZGVmaW5lIGdsdGhyZWFkX2xvY2tfdW5sb2NrX2Z1bmMgICBsaWJpbnRsX2xvY2tfdW5sb2NrX2Z1bmMKKyNkZWZpbmUgZ2x0aHJlYWRfbG9ja19kZXN0cm95X2Z1bmMgIGxpYmludGxfbG9ja19kZXN0cm95X2Z1bmMKKyNkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX2luaXRfbXVsdGl0aHJlYWRlZCAgICAgbGliaW50bF9yd2xvY2tfaW5pdF9tdWx0aXRocmVhZGVkCisjZGVmaW5lIGdsdGhyZWFkX3J3bG9ja19pbml0X2Z1bmMgICAgICAgICAgICAgIGxpYmludGxfcndsb2NrX2luaXRfZnVuYworI2RlZmluZSBnbHRocmVhZF9yd2xvY2tfcmRsb2NrX211bHRpdGhyZWFkZWQgICBsaWJpbnRsX3J3bG9ja19yZGxvY2tfbXVsdGl0aHJlYWRlZAorI2RlZmluZSBnbHRocmVhZF9yd2xvY2tfcmRsb2NrX2Z1bmMgICAgICAgICAgICBsaWJpbnRsX3J3bG9ja19yZGxvY2tfZnVuYworI2RlZmluZSBnbHRocmVhZF9yd2xvY2tfd3Jsb2NrX211bHRpdGhyZWFkZWQgICBsaWJpbnRsX3J3bG9ja193cmxvY2tfbXVsdGl0aHJlYWRlZAorI2RlZmluZSBnbHRocmVhZF9yd2xvY2tfd3Jsb2NrX2Z1bmMgICAgICAgICAgICBsaWJpbnRsX3J3bG9ja193cmxvY2tfZnVuYworI2RlZmluZSBnbHRocmVhZF9yd2xvY2tfdW5sb2NrX211bHRpdGhyZWFkZWQgICBsaWJpbnRsX3J3bG9ja191bmxvY2tfbXVsdGl0aHJlYWRlZAorI2RlZmluZSBnbHRocmVhZF9yd2xvY2tfdW5sb2NrX2Z1bmMgICAgICAgICAgICBsaWJpbnRsX3J3bG9ja191bmxvY2tfZnVuYworI2RlZmluZSBnbHRocmVhZF9yd2xvY2tfZGVzdHJveV9tdWx0aXRocmVhZGVkICBsaWJpbnRsX3J3bG9ja19kZXN0cm95X211bHRpdGhyZWFkZWQKKyNkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX2Rlc3Ryb3lfZnVuYyAgICAgICAgICAgbGliaW50bF9yd2xvY2tfZGVzdHJveV9mdW5jCisjZGVmaW5lIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXRfbXVsdGl0aHJlYWRlZCAgICAgbGliaW50bF9yZWN1cnNpdmVfbG9ja19pbml0X211bHRpdGhyZWFkZWQKKyNkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdF9mdW5jICAgICAgICAgICAgICBsaWJpbnRsX3JlY3Vyc2l2ZV9sb2NrX2luaXRfZnVuYworI2RlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19sb2NrX211bHRpdGhyZWFkZWQgICAgIGxpYmludGxfcmVjdXJzaXZlX2xvY2tfbG9ja19tdWx0aXRocmVhZGVkCisjZGVmaW5lIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2xvY2tfZnVuYyAgICAgICAgICAgICAgbGliaW50bF9yZWN1cnNpdmVfbG9ja19sb2NrX2Z1bmMKKyNkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfdW5sb2NrX211bHRpdGhyZWFkZWQgICBsaWJpbnRsX3JlY3Vyc2l2ZV9sb2NrX3VubG9ja19tdWx0aXRocmVhZGVkCisjZGVmaW5lIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX3VubG9ja19mdW5jICAgICAgICAgICAgbGliaW50bF9yZWN1cnNpdmVfbG9ja191bmxvY2tfZnVuYworI2RlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19kZXN0cm95X211bHRpdGhyZWFkZWQgIGxpYmludGxfcmVjdXJzaXZlX2xvY2tfZGVzdHJveV9tdWx0aXRocmVhZGVkCisjZGVmaW5lIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3lfZnVuYyAgICAgICAgICAgbGliaW50bF9yZWN1cnNpdmVfbG9ja19kZXN0cm95X2Z1bmMKKyNkZWZpbmUgZ2x0aHJlYWRfb25jZV9mdW5jICAgICAgICAgICAgbGliaW50bF9vbmNlX2Z1bmMKKyNkZWZpbmUgZ2x0aHJlYWRfb25jZV9zaW5nbGV0aHJlYWRlZCAgbGliaW50bF9vbmNlX3NpbmdsZXRocmVhZGVkCisjZGVmaW5lIGdsdGhyZWFkX29uY2VfbXVsdGl0aHJlYWRlZCAgIGxpYmludGxfb25jZV9tdWx0aXRocmVhZGVkCitdKQorXSkKKworCitkbmwgQ2hlY2tzIGZvciB0aGUgY29yZSBmaWxlcyBvZiB0aGUgaW50bCBzdWJkaXJlY3Rvcnk6CitkbmwgICBkY2lnZXR0ZXh0LmMKK2RubCAgIGV2YWwtcGx1cmFsLmgKK2RubCAgIGV4cGxvZGVuYW1lLmMKK2RubCAgIGZpbmRkb21haW4uYworZG5sICAgZ2V0dGV4dFAuaAorZG5sICAgZ21vLmgKK2RubCAgIGhhc2gtc3RyaW5nLmggaGFzaC1zdHJpbmcuYworZG5sICAgbDEwbmZsaXN0LmMKK2RubCAgIGxpYmdudWludGwuaC5pbiAoZXhjZXB0IHRoZSAqcHJpbnRmIHN0dWZmKQorZG5sICAgbG9hZGluZm8uaAorZG5sICAgbG9hZG1zZ2NhdC5jCitkbmwgICBsb2NhbGVhbGlhcy5jCitkbmwgICBsb2cuYworZG5sICAgcGx1cmFsLWV4cC5oIHBsdXJhbC1leHAuYworZG5sICAgcGx1cmFsLnkKK2RubCBVc2VkIGJ5IGxpYmdsb2NhbGUuCitBQ19ERUZVTihbZ3RfSU5UTF9TVUJESVJfQ09SRV0sCitbCisgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9TSVpFX1RdKWRubAorICBBQ19SRVFVSVJFKFtnbF9BQ19IRUFERVJfU1RESU5UX0hdKQorICBBQ19SRVFVSVJFKFtBQ19GVU5DX0FMTE9DQV0pZG5sCisgIEFDX1JFUVVJUkUoW0FDX0ZVTkNfTU1BUF0pZG5sCisgIEFDX1JFUVVJUkUoW2d0X0lOVERJVjBdKWRubAorICBBQ19SRVFVSVJFKFtnbF9BQ19UWVBFX1VJTlRNQVhfVF0pZG5sCisgIEFDX1JFUVVJUkUoW2d0X0lOVFRZUEVTX1BSSV0pZG5sCisgIEFDX1JFUVVJUkUoW2dsX0xPQ0tdKWRubAorCisgIEFDX0xJTktfSUZFTFNFKAorICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgW1tpbnQgZm9vIChpbnQgYSkgeyBhID0gX19idWlsdGluX2V4cGVjdCAoYSwgMTApOyByZXR1cm4gYSA9PSAxMCA/IDAgOiAxOyB9XV0sCisgICAgICAgW1tdXSldLAorICAgIFtBQ19ERUZJTkUoW0hBVkVfQlVJTFRJTl9FWFBFQ1RdLCBbMV0sCisgICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSBjb21waWxlciB1bmRlcnN0YW5kcyBfX2J1aWx0aW5fZXhwZWN0Ll0pXSkKKworICBBQ19DSEVDS19IRUFERVJTKFthcmd6LmggaW50dHlwZXMuaCBsaW1pdHMuaCB1bmlzdGQuaCBzeXMvcGFyYW0uaF0pCisgIEFDX0NIRUNLX0ZVTkNTKFtnZXRjd2QgZ2V0ZWdpZCBnZXRldWlkIGdldGdpZCBnZXR1aWQgbWVtcGNweSBtdW5tYXAgXAorICAgIHN0cGNweSBzdHJjYXNlY21wIHN0cmR1cCBzdHJ0b3VsIHRzZWFyY2ggdXNlbG9jYWxlIGFyZ3pfY291bnQgXAorICAgIGFyZ3pfc3RyaW5naWZ5IGFyZ3pfbmV4dCBfX2ZzZXRsb2NraW5nXSkKKworICBkbmwgVXNlIHRoZSAqX3VubG9ja2VkIGZ1bmN0aW9ucyBvbmx5IGlmIHRoZXkgYXJlIGRlY2xhcmVkLgorICBkbmwgKGJlY2F1c2Ugc29tZSBvZiB0aGVtIHdlcmUgZGVmaW5lZCB3aXRob3V0IGJlaW5nIGRlY2xhcmVkIGluIFNvbGFyaXMKKyAgZG5sIDIuNS4xIGJ1dCB3ZXJlIHJlbW92ZWQgaW4gU29sYXJpcyAyLjYsIHdoZXJlYXMgd2Ugd2FudCBiaW5hcmllcyBidWlsdAorICBkbmwgb24gU29sYXJpcyAyLjUuMSB0byBydW4gb24gU29sYXJpcyAyLjYpLgorICBBQ19DSEVDS19ERUNMUyhbZmVvZl91bmxvY2tlZCwgZmdldHNfdW5sb2NrZWRdLCAsICwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisKKyAgQU1fSUNPTlYKKworICBkbmwgaW50bC9wbHVyYWwuYyBpcyBnZW5lcmF0ZWQgZnJvbSBpbnRsL3BsdXJhbC55LiBJdCByZXF1aXJlcyBiaXNvbiwKKyAgZG5sIGJlY2F1c2UgcGx1cmFsLnkgdXNlcyBiaXNvbiBzcGVjaWZpYyBmZWF0dXJlcy4gSXQgcmVxdWlyZXMgYXQgbGVhc3QKKyAgZG5sIGJpc29uLTEuMjYgYmVjYXVzZSBlYXJsaWVyIHZlcnNpb25zIGdlbmVyYXRlIGEgcGx1cmFsLmMgdGhhdCBkb2Vzbid0CisgIGRubCBjb21waWxlLgorICBkbmwgYmlzb24gaXMgb25seSBuZWVkZWQgZm9yIHRoZSBtYWludGFpbmVyICh3aG8gdG91Y2hlcyBwbHVyYWwueSkuIEJ1dCBpbgorICBkbmwgb3JkZXIgdG8gYXZvaWQgc2VwYXJhdGUgTWFrZWZpbGVzIG9yIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSwgd2UgcHV0CisgIGRubCB0aGUgcnVsZSBpbiBnZW5lcmFsIE1ha2VmaWxlLiBOb3csIHNvbWUgcGVvcGxlIGNhcmVsZXNzbHkgdG91Y2ggdGhlCisgIGRubCBmaWxlcyBvciBoYXZlIGEgYnJva2VuICJtYWtlIiBwcm9ncmFtLCBoZW5jZSB0aGUgcGx1cmFsLmMgcnVsZSB3aWxsCisgIGRubCBzb21ldGltZXMgZmlyZS4gVG8gYXZvaWQgYW4gZXJyb3IsIGRlZmluZXMgQklTT04gdG8gIjoiIGlmIGl0IGlzIG5vdAorICBkbmwgcHJlc2VudCBvciB0b28gb2xkLgorICBBQ19DSEVDS19QUk9HUyhbSU5UTEJJU09OXSwgW2Jpc29uXSkKKyAgaWYgdGVzdCAteiAiJElOVExCSVNPTiI7IHRoZW4KKyAgICBhY192ZXJjX2ZhaWw9eWVzCisgIGVsc2UKKyAgICBkbmwgRm91bmQgaXQsIG5vdyBjaGVjayB0aGUgdmVyc2lvbi4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3ZlcnNpb24gb2YgYmlzb25dKQorY2hhbmdlcXVvdGUoPDwsPj4pZG5sCisgICAgYWNfcHJvZ192ZXJzaW9uPWAkSU5UTEJJU09OIC0tdmVyc2lvbiAyPiYxIHwgc2VkIC1uICdzL14uKkdOVSBCaXNvbi4qIFwoWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisgICAgY2FzZSAkYWNfcHJvZ192ZXJzaW9uIGluCisgICAgICAnJykgYWNfcHJvZ192ZXJzaW9uPSJ2LiA/Lj8/LCBiYWQiOyBhY192ZXJjX2ZhaWw9eWVzOzsKKyAgICAgIDEuMls2LTldKiB8IDEuWzMtOV1bMC05XSogfCBbMi05XS4qKQorY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgICAgYWNfcHJvZ192ZXJzaW9uPSIkYWNfcHJvZ192ZXJzaW9uLCBvayI7IGFjX3ZlcmNfZmFpbD1ubzs7CisgICAgICAqKSBhY19wcm9nX3ZlcnNpb249IiRhY19wcm9nX3ZlcnNpb24sIGJhZCI7IGFjX3ZlcmNfZmFpbD15ZXM7OworICAgIGVzYWMKKyAgICBBQ19NU0dfUkVTVUxUKFskYWNfcHJvZ192ZXJzaW9uXSkKKyAgZmkKKyAgaWYgdGVzdCAkYWNfdmVyY19mYWlsID0geWVzOyB0aGVuCisgICAgSU5UTEJJU09OPToKKyAgZmkKK10pCisKKyMgaW50bG1hY29zeC5tNCBzZXJpYWwgNSAoZ2V0dGV4dC0wLjE4LjIpCitkbmwgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KK2RubAorZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorZG5sIGZ1bmN0aW9uYWxpdHkuCitkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorCitkbmwgQ2hlY2tzIGZvciBzcGVjaWFsIG9wdGlvbnMgbmVlZGVkIG9uIE1hYyBPUyBYLgorZG5sIERlZmluZXMgSU5UTF9NQUNPU1hfTElCUy4KK0FDX0RFRlVOKFtndF9JTlRMX01BQ09TWF0sCitbCisgIGRubCBDaGVjayBmb3IgQVBJIGludHJvZHVjZWQgaW4gTWFjIE9TIFggMTAuMi4KKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlXSwKKyAgICBbZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlXSwKKyAgICBbZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgTElCUz0iJExJQlMgLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIgorICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgIFtbI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGUHJlZmVyZW5jZXMuaD5dXSwKKyAgICAgICAgICBbW0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUoTlVMTCwgTlVMTCldXSldLAorICAgICAgIFtndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWU9eWVzXSwKKyAgICAgICBbZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlPW5vXSkKKyAgICAgTElCUz0iJGd0X3NhdmVfTElCUyJdKQorICBpZiB0ZXN0ICRndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRV0sIFsxXSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjIE9TIFggZnVuY3Rpb24gQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSBpbiB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLl0pCisgIGZpCisgIGRubCBDaGVjayBmb3IgQVBJIGludHJvZHVjZWQgaW4gTWFjIE9TIFggMTAuMy4KKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBDRkxvY2FsZUNvcHlDdXJyZW50XSwgW2d0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudF0sCisgICAgW2d0X3NhdmVfTElCUz0iJExJQlMiCisgICAgIExJQlM9IiRMSUJTIC1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKKyAgICAgQUNfTElOS19JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICBbWyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkxvY2FsZS5oPl1dLAorICAgICAgICAgIFtbQ0ZMb2NhbGVDb3B5Q3VycmVudCgpO11dKV0sCisgICAgICAgW2d0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudD15ZXNdLAorICAgICAgIFtndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQ9bm9dKQorICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIl0pCisgIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9DRkxPQ0FMRUNPUFlDVVJSRU5UXSwgWzFdLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWMgT1MgWCBmdW5jdGlvbiBDRkxvY2FsZUNvcHlDdXJyZW50IGluIHRoZSBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuXSkKKyAgZmkKKyAgSU5UTF9NQUNPU1hfTElCUz0KKyAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlID0geWVzIHx8IHRlc3QgJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCA9IHllczsgdGhlbgorICAgIElOVExfTUFDT1NYX0xJQlM9Ii1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKKyAgZmkKKyAgQUNfU1VCU1QoW0lOVExfTUFDT1NYX0xJQlNdKQorXSkKKworIyBpbnRtYXgubTQgc2VyaWFsIDYgKGdldHRleHQtMC4xOC4yKQorZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDA1LCAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorZG5sIFRlc3Qgd2hldGhlciB0aGUgc3lzdGVtIGhhcyB0aGUgJ2ludG1heF90JyB0eXBlLCBidXQgZG9uJ3QgYXR0ZW1wdCB0bworZG5sIGZpbmQgYSByZXBsYWNlbWVudCBpZiBpdCBpcyBsYWNraW5nLgorCitBQ19ERUZVTihbZ3RfVFlQRV9JTlRNQVhfVF0sCitbCisgIEFDX1JFUVVJUkUoW2dsX0FDX0hFQURFUl9JTlRUWVBFU19IXSkKKyAgQUNfUkVRVUlSRShbZ2xfQUNfSEVBREVSX1NURElOVF9IXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpbnRtYXhfdF0sIFtndF9jdl9jX2ludG1heF90XSwKKyAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICBbWworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpZiBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorICAgICAgICAgIF1dLAorICAgICAgICAgIFtbaW50bWF4X3QgeCA9IC0xOworICAgICAgICAgICAgcmV0dXJuICF4O11dKV0sCisgICAgICAgW2d0X2N2X2NfaW50bWF4X3Q9eWVzXSwKKyAgICAgICBbZ3RfY3ZfY19pbnRtYXhfdD1ub10pXSkKKyAgaWYgdGVzdCAkZ3RfY3ZfY19pbnRtYXhfdCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9JTlRNQVhfVF0sIFsxXSwKKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi5dKQorICBmaQorXSkKKworIyBpbnR0eXBlcy1wcmkubTQgc2VyaWFsIDcgKGdldHRleHQtMC4xOC4yKQorZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyLCAyMDA2LCAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19QUkVSRVEoWzIuNTNdKQorCisjIERlZmluZSBQUklfTUFDUk9TX0JST0tFTiBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkZWZpbmVzIHRoZSBQUkkqCisjIG1hY3JvcyB0byBub24tc3RyaW5nIHZhbHVlcy4gIFRoaXMgaXMgdGhlIGNhc2Ugb24gQUlYIDQuMy4zLgorCitBQ19ERUZVTihbZ3RfSU5UVFlQRVNfUFJJXSwKK1sKKyAgQUNfQ0hFQ0tfSEVBREVSUyhbaW50dHlwZXMuaF0pCisgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGludHR5cGVzLmggUFJJeE5OIG1hY3JvcyBhcmUgYnJva2VuXSwKKyAgICAgIFtndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuXSwKKyAgICAgIFsKKyAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgICBbWworI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaWZkZWYgUFJJZDMyCitjaGFyICpwID0gUFJJZDMyOworI2VuZGlmCisgICAgICAgICAgICAgXV0sCisgICAgICAgICAgICAgW1tdXSldLAorICAgICAgICAgIFtndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPW5vXSwKKyAgICAgICAgICBbZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbj15ZXNdKQorICAgICAgXSkKKyAgZmkKKyAgaWYgdGVzdCAiJGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4iID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtQUklfTUFDUk9TX0JST0tFTl0sIFsxXSwKKyAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB1bnVzYWJsZSBQUkkqIG1hY3Jvcy5dKQorICAgIFBSSV9NQUNST1NfQlJPS0VOPTEKKyAgZWxzZQorICAgIFBSSV9NQUNST1NfQlJPS0VOPTAKKyAgZmkKKyAgQUNfU1VCU1QoW1BSSV9NQUNST1NfQlJPS0VOXSkKK10pCisKKyMgaW50dHlwZXNfaC5tNCBzZXJpYWwgMTAKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwNCwgMjAwNiwgMjAwOC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorCisjIERlZmluZSBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsCisjIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMgdWludG1heF90LgorCitBQ19ERUZVTihbZ2xfQUNfSEVBREVSX0lOVFRZUEVTX0hdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIGludHR5cGVzLmhdLCBbZ2xfY3ZfaGVhZGVyX2ludHR5cGVzX2hdLAorICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgIFtbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAgICAgICAgICBdXSwKKyAgICAgICAgICBbW3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7IHJldHVybiAhaTtdXSldLAorICAgICAgIFtnbF9jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXNdLAorICAgICAgIFtnbF9jdl9oZWFkZXJfaW50dHlwZXNfaD1ub10pXSkKKyAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW0hBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVhdLCBbMV0sCisgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LAorICAgICAgIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuIF0pCisgIGZpCitdKQorCisjIGxjbWVzc2FnZS5tNCBzZXJpYWwgNyAoZ2V0dGV4dC0wLjE4LjIpCitkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIsIDIwMDQtMjAwNSwgMjAwOC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KK2RubAorZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorZG5sIGZ1bmN0aW9uYWxpdHkuCitkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorCitkbmwgQXV0aG9yczoKK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LgorCisjIENoZWNrIHdoZXRoZXIgTENfTUVTU0FHRVMgaXMgYXZhaWxhYmxlIGluIDxsb2NhbGUuaD4uCisKK0FDX0RFRlVOKFtndF9MQ19NRVNTQUdFU10sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgTENfTUVTU0FHRVNdLCBbZ3RfY3ZfdmFsX0xDX01FU1NBR0VTXSwKKyAgICBbQUNfTElOS19JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICBbWyNpbmNsdWRlIDxsb2NhbGUuaD5dXSwKKyAgICAgICAgICBbW3JldHVybiBMQ19NRVNTQUdFU11dKV0sCisgICAgICAgW2d0X2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXNdLAorICAgICAgIFtndF9jdl92YWxfTENfTUVTU0FHRVM9bm9dKV0pCisgIGlmIHRlc3QgJGd0X2N2X3ZhbF9MQ19NRVNTQUdFUyA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9MQ19NRVNTQUdFU10sIFsxXSwKKyAgICAgIFtEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy5dKQorICBmaQorXSkKKworIyBsaWItbGQubTQgc2VyaWFsIDYKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMywgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBTdWJyb3V0aW5lcyBvZiBsaWJ0b29sLm00LAorZG5sIHdpdGggcmVwbGFjZW1lbnRzIHMvXypMVF9QQVRIL0FDX0xJQl9QUk9HLyBhbmQgcy9sdF8vYWNsXy8gdG8gYXZvaWQKK2RubCBjb2xsaXNpb24gd2l0aCBsaWJ0b29sLm00LgorCitkbmwgRnJvbSBsaWJ0b29sLTIuNC4gU2V0cyB0aGUgdmFyaWFibGUgd2l0aF9nbnVfbGQgdG8geWVzIG9yIG5vLgorQUNfREVGVU4oW0FDX0xJQl9QUk9HX0xEX0dOVV0sCitbQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgW2FjbF9jdl9wcm9nX2dudV9sZF0sCitbIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBhY2xfY3ZfcHJvZ19nbnVfbGQ9eWVzCisgIDs7CisqKQorICBhY2xfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWNdKQord2l0aF9nbnVfbGQ9JGFjbF9jdl9wcm9nX2dudV9sZAorXSkKKworZG5sIEZyb20gbGlidG9vbC0yLjQuIFNldHMgdGhlIHZhcmlhYmxlIExELgorQUNfREVGVU4oW0FDX0xJQl9QUk9HX0xEXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKworQUNfQVJHX1dJVEgoW2dudS1sZF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZ251LWxkXSwKKyAgICAgICAgW2Fzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub11dKV0sCisgICAgW3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllc10sCisgICAgW3dpdGhfZ251X2xkPW5vXSlkbmwKKworIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLgorIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICAjIERldGVybWluZSBQQVRIX1NFUEFSQVRPUiBieSB0cnlpbmcgdG8gZmluZCAvYmluL3NoIGluIGEgUEFUSCB3aGljaAorICAjIGNvbnRhaW5zIG9ubHkgL2Jpbi4gTm90ZSB0aGF0IGtzaCBsb29rcyBhbHNvIGF0IHRoZSBGUEFUSCB2YXJpYWJsZSwKKyAgIyBzbyB3ZSBoYXZlIHRvIHNldCB0aGF0IGFzIHdlbGwgZm9yIHRoZSB0ZXN0LgorICBQQVRIX1NFUEFSQVRPUj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICAmJiB7IChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICAgICAgICAgfHwgUEFUSF9TRVBBUkFUT1I9JzsnCisgICAgICAgfQorZmkKKworYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisgICAgICByZV9kaXJlbHQ9Jy9bW14vXV1bW14vXV0qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWBlY2hvICIkYWNfcHJvZyJ8IHNlZCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSBlY2hvICIkYWNfcHJvZyIgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworICAgICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCitlbHNlCisgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorZmkKK0FDX0NBQ0hFX1ZBTChbYWNsX2N2X3BhdGhfTERdLAorW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgYWNsX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIElGUz0iJGFjbF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgYWNsX2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGFjbF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKyAgICAgICAgdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjbF9zYXZlX2lmcyIKK2Vsc2UKKyAgYWNsX2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaV0pCitMRD0iJGFjbF9jdl9wYXRoX0xEIgoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKFskTERdKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKFtub10pCitmaQordGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKK0FDX0xJQl9QUk9HX0xEX0dOVQorXSkKKworIyBsaWItbGluay5tNCBzZXJpYWwgMjYgKGdldHRleHQtMC4xOC4yKQorZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKworQUNfUFJFUkVRKFsyLjU0XSkKKworZG5sIEFDX0xJQl9MSU5LRkxBR1MobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKK2RubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KK2RubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kCitkbmwgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLgorZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfV9QUkVGSVggdmFyaWFibGUgdG8gbm9uZW1wdHkgaWYgbGlibmFtZQorZG5sIHdhcyBmb3VuZCBpbiAke0xJQiR7TkFNRX1fUFJFRklYfS8kYWNsX2xpYmRpcnN0ZW0uCitBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU10sCitbCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisgIHB1c2hkZWYoW05hbWVdLFttNF90cmFuc2xpdChbJDFdLFsuLystXSwgW19fX19dKV0pCisgIHB1c2hkZWYoW05BTUVdLFttNF90cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vKy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19fXSldKQorICBBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSwgW2FjX2N2X2xpYltdTmFtZVtdX2xpYnNdLCBbCisgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCisgICAgYWNfY3ZfbGliW11OYW1lW11fbGlicz0iJExJQltdTkFNRSIKKyAgICBhY19jdl9saWJbXU5hbWVbXV9sdGxpYnM9IiRMVExJQltdTkFNRSIKKyAgICBhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncz0iJElOQ1tdTkFNRSIKKyAgICBhY19jdl9saWJbXU5hbWVbXV9wcmVmaXg9IiRMSUJbXU5BTUVbXV9QUkVGSVgiCisgIF0pCisgIExJQltdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2xpYnMiCisgIExUTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbHRsaWJzIgorICBJTkNbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncyIKKyAgTElCW11OQU1FW11fUFJFRklYPSIkYWNfY3ZfbGliW11OYW1lW11fcHJlZml4IgorICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKKyAgQUNfU1VCU1QoW0xJQl1OQU1FKQorICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKyAgQUNfU1VCU1QoW0xJQl1OQU1FW19QUkVGSVhdKQorICBkbmwgQWxzbyBzZXQgSEFWRV9MSUJbXU5BTUUgc28gdGhhdCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHJldXNlIHRoZQorICBkbmwgcmVzdWx0cyBvZiB0aGlzIHNlYXJjaCB3aGVuIHRoaXMgbGlicmFyeSBhcHBlYXJzIGFzIGEgZGVwZW5kZW5jeS4KKyAgSEFWRV9MSUJbXU5BTUU9eWVzCisgIHBvcGRlZihbTkFNRV0pCisgIHBvcGRlZihbTmFtZV0pCitdKQorCitkbmwgQUNfTElCX0hBVkVfTElOS0ZMQUdTKG5hbWUsIGRlcGVuZGVuY2llcywgaW5jbHVkZXMsIHRlc3Rjb2RlLCBbbWlzc2luZy1tZXNzYWdlXSkKK2RubCBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZAorZG5sIGltcGxpY2l0IGRlcGVuZGVuY2llcywgdG9nZXRoZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGluY2x1ZGUgZmlsZXMgYW5kCitkbmwgdGhlIGFiaWxpdHkgdG8gY29tcGlsZSBhbmQgbGluayB0aGUgc3BlY2lmaWVkIHRlc3Rjb2RlLiBUaGUgbWlzc2luZy1tZXNzYWdlCitkbmwgZGVmYXVsdHMgdG8gJ25vJyBhbmQgbWF5IGNvbnRhaW4gYWRkaXRpb25hbCBoaW50cyBmb3IgdGhlIHVzZXIuCitkbmwgSWYgZm91bmQsIGl0IHNldHMgYW5kIEFDX1NVQlNUcyBIQVZFX0xJQiR7TkFNRX09eWVzIGFuZCB0aGUgTElCJHtOQU1FfQorZG5sIGFuZCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUsIGFuZAorZG5sICNkZWZpbmVzIEhBVkVfTElCJHtOQU1FfSB0byAxLiBPdGhlcndpc2UsIGl0IHNldHMgYW5kIEFDX1NVQlNUcworZG5sIEhBVkVfTElCJHtOQU1FfT1ubyBhbmQgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHRvIGVtcHR5LgorZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfV9QUkVGSVggdmFyaWFibGUgdG8gbm9uZW1wdHkgaWYgbGlibmFtZQorZG5sIHdhcyBmb3VuZCBpbiAke0xJQiR7TkFNRX1fUFJFRklYfS8kYWNsX2xpYmRpcnN0ZW0uCitBQ19ERUZVTihbQUNfTElCX0hBVkVfTElOS0ZMQUdTXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKyAgcHVzaGRlZihbTmFtZV0sW200X3RyYW5zbGl0KFskMV0sWy4vKy1dLCBbX19fX10pXSkKKyAgcHVzaGRlZihbTkFNRV0sW200X3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8rLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX19dKV0pCisKKyAgZG5sIFNlYXJjaCBmb3IgbGliW11OYW1lIGFuZCBkZWZpbmUgTElCW11OQU1FLCBMVExJQltdTkFNRSBhbmQgSU5DW11OQU1FCisgIGRubCBhY2NvcmRpbmdseS4KKyAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCisKKyAgZG5sIEFkZCAkSU5DW11OQU1FIHRvIENQUEZMQUdTIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2tzLAorICBkbmwgYmVjYXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGxpYltdTmFtZSBhbmQgbm90IGRpc2FibGVkIGl0cyB1c2UKKyAgZG5sIHZpYSAtLXdpdGhvdXQtbGliW11OYW1lLXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LgorICBhY19zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbGliW10kMV0sIFthY19jdl9saWJbXU5hbWVdLCBbCisgICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBkbmwgSWYgJExJQltdTkFNRSBjb250YWlucyBzb21lIC1sIG9wdGlvbnMsIGFkZCBpdCB0byB0aGUgZW5kIG9mIExJQlMsCisgICAgZG5sIGJlY2F1c2UgdGhlc2UgLWwgb3B0aW9ucyBtaWdodCByZXF1aXJlIC1MIG9wdGlvbnMgdGhhdCBhcmUgcHJlc2VudCBpbgorICAgIGRubCBMSUJTLiAtbCBvcHRpb25zIGJlbmVmaXQgb25seSBmcm9tIHRoZSAtTCBvcHRpb25zIGxpc3RlZCBiZWZvcmUgaXQuCisgICAgZG5sIE90aGVyd2lzZSwgYWRkIGl0IHRvIHRoZSBmcm9udCBvZiBMSUJTLCBiZWNhdXNlIGl0IG1heSBiZSBhIHN0YXRpYworICAgIGRubCBsaWJyYXJ5IHRoYXQgZGVwZW5kcyBvbiBhbm90aGVyIHN0YXRpYyBsaWJyYXJ5IHRoYXQgaXMgcHJlc2VudCBpbiBMSUJTLgorICAgIGRubCBTdGF0aWMgbGlicmFyaWVzIGJlbmVmaXQgb25seSBmcm9tIHRoZSBzdGF0aWMgbGlicmFyaWVzIGxpc3RlZCBhZnRlcgorICAgIGRubCBpdC4KKyAgICBjYXNlICIgJExJQltdTkFNRSIgaW4KKyAgICAgICoiIC1sIiopIExJQlM9IiRMSUJTICRMSUJbXU5BTUUiIDs7CisgICAgICAqKSAgICAgICBMSUJTPSIkTElCW11OQU1FICRMSUJTIiA7OworICAgIGVzYWMKKyAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgIFtBQ19MQU5HX1BST0dSQU0oW1skM11dLCBbWyQ0XV0pXSwKKyAgICAgIFthY19jdl9saWJbXU5hbWU9eWVzXSwKKyAgICAgIFthY19jdl9saWJbXU5hbWU9J200X2lmKFskNV0sIFtdLCBbbm9dLCBbWyQ1XV0pJ10pCisgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKyAgXSkKKyAgaWYgdGVzdCAiJGFjX2N2X2xpYltdTmFtZSIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0xJQltdTkFNRT15ZXMKKyAgICBBQ19ERUZJTkUoW0hBVkVfTElCXU5BTUUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGxpYl1bJDEgbGlicmFyeS5dKQorICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskTElCW11OQU1FXSkKKyAgZWxzZQorICAgIEhBVkVfTElCW11OQU1FPW5vCisgICAgZG5sIElmICRMSUJbXU5BTUUgZGlkbid0IGxlYWQgdG8gYSB1c2FibGUgbGlicmFyeSwgd2UgZG9uJ3QgbmVlZAorICAgIGRubCAkSU5DW11OQU1FIGVpdGhlci4KKyAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MiCisgICAgTElCW11OQU1FPQorICAgIExUTElCW11OQU1FPQorICAgIExJQltdTkFNRVtdX1BSRUZJWD0KKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfTElCXU5BTUUpCisgIEFDX1NVQlNUKFtMSUJdTkFNRSkKKyAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisgIEFDX1NVQlNUKFtMSUJdTkFNRVtfUFJFRklYXSkKKyAgcG9wZGVmKFtOQU1FXSkKKyAgcG9wZGVmKFtOYW1lXSkKK10pCisKK2RubCBEZXRlcm1pbmUgdGhlIHBsYXRmb3JtIGRlcGVuZGVudCBwYXJhbWV0ZXJzIG5lZWRlZCB0byB1c2UgcnBhdGg6CitkbmwgICBhY2xfbGliZXh0LAorZG5sICAgYWNsX3NobGliZXh0LAorZG5sICAgYWNsX2xpYm5hbWVfc3BlYywKK2RubCAgIGFjbF9saWJyYXJ5X25hbWVzX3NwZWMsCitkbmwgICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywKK2RubCAgIGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLAorZG5sICAgYWNsX2hhcmRjb2RlX2RpcmVjdCwKK2RubCAgIGFjbF9oYXJkY29kZV9taW51c19MLgorQUNfREVGVU4oW0FDX0xJQl9SUEFUSF0sCitbCisgIGRubCBUZWxsIGF1dG9tYWtlID49IDEuMTAgdG8gY29tcGxhaW4gaWYgY29uZmlnLnJwYXRoIGlzIG1pc3NpbmcuCisgIG00X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2NvbmZpZy5ycGF0aF0pXSkKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pICAgICAgICAgICAgICAgIGRubCB3ZSB1c2UgJENDLCAkR0NDLCAkTERGTEFHUworICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJPR19MRF0pICAgICAgICAgICAgZG5sIHdlIHVzZSAkTEQsICR3aXRoX2dudV9sZAorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pICAgICAgICAgZG5sIHdlIHVzZSAkaG9zdAorICBBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSkgZG5sIHdlIHVzZSAkYWNfYXV4X2RpcgorICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbl0sIFthY2xfY3ZfcnBhdGhdLCBbCisgICAgQ0M9IiRDQyIgR0NDPSIkR0NDIiBMREZMQUdTPSIkTERGTEFHUyIgTEQ9IiRMRCIgd2l0aF9nbnVfbGQ9IiR3aXRoX2dudV9sZCIgXAorICAgICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICIkYWNfYXV4X2Rpci9jb25maWcucnBhdGgiICIkaG9zdCIgPiBjb25mdGVzdC5zaAorICAgIC4gLi9jb25mdGVzdC5zaAorICAgIHJtIC1mIC4vY29uZnRlc3Quc2gKKyAgICBhY2xfY3ZfcnBhdGg9ZG9uZQorICBdKQorICB3bD0iJGFjbF9jdl93bCIKKyAgYWNsX2xpYmV4dD0iJGFjbF9jdl9saWJleHQiCisgIGFjbF9zaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKKyAgYWNsX2xpYm5hbWVfc3BlYz0iJGFjbF9jdl9saWJuYW1lX3NwZWMiCisgIGFjbF9saWJyYXJ5X25hbWVzX3NwZWM9IiRhY2xfY3ZfbGlicmFyeV9uYW1lc19zcGVjIgorICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorICBhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgorICBhY2xfaGFyZGNvZGVfZGlyZWN0PSIkYWNsX2N2X2hhcmRjb2RlX2RpcmVjdCIKKyAgYWNsX2hhcmRjb2RlX21pbnVzX0w9IiRhY2xfY3ZfaGFyZGNvZGVfbWludXNfTCIKKyAgZG5sIERldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIHdhbnRzIHJwYXRoIGhhbmRsaW5nIGF0IGFsbC4KKyAgQUNfQVJHX0VOQUJMRShbcnBhdGhdLAorICAgIFsgIC0tZGlzYWJsZS1ycGF0aCAgICAgICAgIGRvIG5vdCBoYXJkY29kZSBydW50aW1lIGxpYnJhcnkgcGF0aHNdLAorICAgIDosIGVuYWJsZV9ycGF0aD15ZXMpCitdKQorCitkbmwgQUNfTElCX0ZST01QQUNLQUdFKG5hbWUsIHBhY2thZ2UpCitkbmwgZGVjbGFyZXMgdGhhdCBsaWJuYW1lIGNvbWVzIGZyb20gdGhlIGdpdmVuIHBhY2thZ2UuIFRoZSBjb25maWd1cmUgZmlsZQorZG5sIHdpbGwgdGhlbiBub3QgaGF2ZSBhIC0td2l0aC1saWJuYW1lLXByZWZpeCBvcHRpb24gYnV0IGEKK2RubCAtLXdpdGgtcGFja2FnZS1wcmVmaXggb3B0aW9uLiBTZXZlcmFsIGxpYnJhcmllcyBjYW4gY29tZSBmcm9tIHRoZSBzYW1lCitkbmwgcGFja2FnZS4gVGhpcyBkZWNsYXJhdGlvbiBtdXN0IG9jY3VyIGJlZm9yZSBhbiBBQ19MSUJfTElOS0ZMQUdTIG9yIHNpbWlsYXIKK2RubCBtYWNybyBjYWxsIHRoYXQgc2VhcmNoZXMgZm9yIGxpYm5hbWUuCitBQ19ERUZVTihbQUNfTElCX0ZST01QQUNLQUdFXSwKK1sKKyAgcHVzaGRlZihbTkFNRV0sW200X3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8rLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX19dKV0pCisgIGRlZmluZShbYWNsX2Zyb21wYWNrYWdlX11OQU1FLCBbJDJdKQorICBwb3BkZWYoW05BTUVdKQorICBwdXNoZGVmKFtQQUNLXSxbJDJdKQorICBwdXNoZGVmKFtQQUNLVVBdLFttNF90cmFuc2xpdChQQUNLLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vKy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX19dKV0pCisgIGRlZmluZShbYWNsX2xpYnNpbnBhY2thZ2VfXVBBQ0tVUCwKKyAgICBtNF9pZmRlZihbYWNsX2xpYnNpbnBhY2thZ2VfXVBBQ0tVUCwgW200X2RlZm4oW2FjbF9saWJzaW5wYWNrYWdlX11QQUNLVVApWywgXV0sKVtsaWIkMV0pCisgIHBvcGRlZihbUEFDS1VQXSkKKyAgcG9wZGVmKFtQQUNLXSkKK10pCisKK2RubCBBQ19MSUJfTElOS0ZMQUdTX0JPRFkobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKK2RubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KK2RubCBTZXRzIHRoZSBMSUIke05BTUV9LCBMVExJQiR7TkFNRX0gYW5kIElOQyR7TkFNRX0gdmFyaWFibGVzLgorZG5sIEFsc28sIHNldHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUgd2FzIGZvdW5kCitkbmwgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgorQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NfQk9EWV0sCitbCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSkKKyAgcHVzaGRlZihbTkFNRV0sW200X3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8rLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX19dKV0pCisgIHB1c2hkZWYoW1BBQ0tdLFttNF9pZmRlZihbYWNsX2Zyb21wYWNrYWdlX11OQU1FLCBbYWNsX2Zyb21wYWNrYWdlX11OQU1FLCBsaWJbJDFdKV0pCisgIHB1c2hkZWYoW1BBQ0tVUF0sW200X3RyYW5zbGl0KFBBQ0ssW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8rLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fX10pXSkKKyAgcHVzaGRlZihbUEFDS0xJQlNdLFttNF9pZmRlZihbYWNsX2Zyb21wYWNrYWdlX11OQU1FLCBbYWNsX2xpYnNpbnBhY2thZ2VfXVBBQ0tVUCwgbGliWyQxXSldKQorICBkbmwgQXV0b2NvbmYgPj0gMi42MSBzdXBwb3J0cyBkb3RzIGluIC0td2l0aCBvcHRpb25zLgorICBwdXNoZGVmKFtQX0FfQ19LXSxbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW200X1BBQ0tBR0VfVkVSU0lPTl0pLFsyLjYxXSksWy0xXSxbbTRfdHJhbnNsaXQoUEFDSyxbLl0sW19dKV0sUEFDSyldKQorICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKyAgdXNlX2FkZGl0aW9uYWw9eWVzCisgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorICBdKQorICBBQ19BUkdfV0lUSChQX0FfQ19LWy1wcmVmaXhdLAorW1sgIC0td2l0aC1dXVBfQV9DX0tbWy1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgXVBBQ0tMSUJTWyBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorICAtLXdpdGhvdXQtXV1QX0FfQ19LW1stcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIF1QQUNLTElCU1sgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXV0sCitbCisgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCisgICAgICB1c2VfYWRkaXRpb25hbD1ubworICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWCI7IHRoZW4KKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisgICAgICAgIF0pCisgICAgICBlbHNlCisgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVkZSIKKyAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbSIKKyAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJkaXJzdGVtMiIgIT0gIiRhY2xfbGliZGlyc3RlbSIgXAorICAgICAgICAgICAmJiAhIHRlc3QgLWQgIiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKyAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtMiIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKK10pCisgIGRubCBTZWFyY2ggdGhlIGxpYnJhcnkgYW5kIGl0cyBkZXBlbmRlbmNpZXMgaW4gJGFkZGl0aW9uYWxfbGliZGlyIGFuZAorICBkbmwgJExERkxBR1MuIFVzaW5nIGJyZWFkdGgtZmlyc3Qtc2VhY2guCisgIExJQltdTkFNRT0KKyAgTFRMSUJbXU5BTUU9CisgIElOQ1tdTkFNRT0KKyAgTElCW11OQU1FW11fUFJFRklYPQorICBkbmwgSEFWRV9MSUIke05BTUV9IGlzIGFuIGluZGljYXRvciB0aGF0IExJQiR7TkFNRX0sIExUTElCJHtOQU1FfSBoYXZlIGJlZW4KKyAgZG5sIGNvbXB1dGVkLiBTbyBpdCBoYXMgdG8gYmUgcmVzZXQgaGVyZS4KKyAgSEFWRV9MSUJbXU5BTUU9CisgIHJwYXRoZGlycz0KKyAgbHRycGF0aGRpcnM9CisgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0KKyAgbmFtZXNfbmV4dF9yb3VuZD0nJDEgJDInCisgIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KKyAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCIKKyAgICBuYW1lc19uZXh0X3JvdW5kPQorICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbworICAgICAgYWxyZWFkeV9oYW5kbGVkPQorICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsgZG8KKyAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgorICAgICAgICAgIGFscmVhZHlfaGFuZGxlZD15ZXMKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4KKyAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgorICAgICAgICBkbmwgU2VlIGlmIGl0IHdhcyBhbHJlYWR5IGxvY2F0ZWQgYnkgYW4gZWFybGllciBBQ19MSUJfTElOS0ZMQUdTCisgICAgICAgIGRubCBvciBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FsbC4KKyAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLystfEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fX3wnYAorICAgICAgICBldmFsIHZhbHVlPVwiXCRIQVZFX0xJQiR1cHBlcm5hbWVcIgorICAgICAgICBpZiB0ZXN0IC1uICIkdmFsdWUiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAiJHZhbHVlIiA9IHllczsgdGhlbgorICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTElCJHVwcGVybmFtZVwiCisgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JHZhbHVlIgorICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTFRMSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0kdmFsdWUiCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZG5sIEFuIGVhcmxpZXIgY2FsbCB0byBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgaGFzIGRldGVybWluZWQKKyAgICAgICAgICAgIGRubCB0aGF0IHRoaXMgbGlicmFyeSBkb2Vzbid0IGV4aXN0LiBTbyBqdXN0IGRyb3AgaXQuCisgICAgICAgICAgICA6CisgICAgICAgICAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRubCBTZWFyY2ggdGhlIGxpYnJhcnkgbGliJG5hbWUgaW4gJGFkZGl0aW9uYWxfbGliZGlyIGFuZCAkTERGTEFHUworICAgICAgICAgIGRubCBhbmQgdGhlIGFscmVhZHkgY29uc3RydWN0ZWQgJExJQk5BTUUvJExUTElCTkFNRS4KKyAgICAgICAgICBmb3VuZF9kaXI9CisgICAgICAgICAgZm91bmRfbGE9CisgICAgICAgICAgZm91bmRfc289CisgICAgICAgICAgZm91bmRfYT0KKyAgICAgICAgICBldmFsIGxpYm5hbWU9XCIkYWNsX2xpYm5hbWVfc3BlY1wiICAgICMgdHlwaWNhbGx5OiBsaWJuYW1lPWxpYiRuYW1lCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgIHNocmV4dD0iLiRhY2xfc2hsaWJleHQiICAgICAgICAgICAgICMgdHlwaWNhbGx5OiBzaHJleHQ9LnNvCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc2hyZXh0PQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgIGRpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgICAgZG5sIFRoZSBzYW1lIGNvZGUgYXMgaW4gdGhlIGxvb3AgYmVsb3c6CisgICAgICAgICAgICBkbmwgRmlyc3QgbG9vayBmb3IgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KKyAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKyAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG5sIFRoZW4gbG9vayBmb3IgYSBzdGF0aWMgbGlicmFyeS4KKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KKyAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgICAgICAgY2FzZSAiJHgiIGluCisgICAgICAgICAgICAgICAgLUwqKQorICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJHgiIHwgc2VkIC1lICdzL15YLUwvLydgCisgICAgICAgICAgICAgICAgICBkbmwgRmlyc3QgbG9vayBmb3IgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZG5sIFRoZW4gbG9vayBmb3IgYSBzdGF0aWMgbGlicmFyeS4KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgZG5sIEZvdW5kIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfc28iICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc2hhcmVkIGxpYnJhcnkuIFdlIGF0dGVtcHQgdG8gaGFyZGNvZGUgaXRzCisgICAgICAgICAgICAgIGRubCBkaXJlY3RvcnkgaW50byB0aGUgZXhlY3V0YWJsZSdzIHJ1bnBhdGgsIHVubGVzcyBpdCdzIHRoZQorICAgICAgICAgICAgICBkbmwgc3RhbmRhcmQgL3Vzci9saWIuCisgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gXAorICAgICAgICAgICAgICAgICB8fCB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICAgICAgIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0yIjsgdGhlbgorICAgICAgICAgICAgICAgIGRubCBObyBoYXJkY29kaW5nIGlzIG5lZWRlZC4KKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIERJUiBpbnRvIHRoZSByZXN1bHRpbmcKKyAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIGx0cnBhdGhkaXJzLgorICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCisgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkbmwgVGhlIGhhcmRjb2RpbmcgaW50byAkTElCTkFNRSBpcyBzeXN0ZW0gZGVwZW5kZW50LgorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgICAgZG5sIFVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgIGRubCByZXN1bHRpbmcgYmluYXJ5LgorICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gcnBhdGhkaXJzLgorICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMSUJOQU1FIGF0IHRoZSBlbmQuCisgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGRubCBSZWx5IG9uICItTCRmb3VuZF9kaXIiLgorICAgICAgICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdCBpZiBpdCdzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZSBMREZMQUdTCisgICAgICAgICAgICAgICAgICAgIGRubCBvciB0aGUgYWxyZWFkeSBjb25zdHJ1Y3RlZCAkTElCTkFNRQorICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJbXU5BTUU7IGRvCisgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCisgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBkbmwgV2UgY2Fubm90IHVzZSAkYWNsX2hhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLCBiZWNhdXNlIHRoaXMgZG9lc24ndCBmaXQgaW4gZmxhZ3MgcGFzc2VkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgIGRubCBjb21waWxlci4gU28gZ2l2ZSB1cC4gTm8gaGFyZGNvZGluZy4gVGhpcyBhZmZlY3RzIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICBkbmwgdmVyeSBvbGQgc3lzdGVtcy4KKyAgICAgICAgICAgICAgICAgICAgICBkbmwgRklYTUU6IE5vdCBzdXJlIHdoZXRoZXIgd2Ugc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICAgIGRubCAiLUwkZm91bmRfZGlyIC1sJG5hbWUiIG9yICItTCRmb3VuZF9kaXIgJGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9hIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc3RhdGljIGxpYnJhcnkuCisgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfYSIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRubCBXZSBzaG91bGRuJ3QgY29tZSBoZXJlLCBidXQgYW55d2F5IGl0J3MgZ29vZCB0byBoYXZlIGEKKyAgICAgICAgICAgICAgICBkbmwgZmFsbGJhY2suCisgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkbmwgQXNzdW1lIHRoZSBpbmNsdWRlIGZpbGVzIGFyZSBuZWFyYnkuCisgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9CisgICAgICAgICAgICBjYXNlICIkZm91bmRfZGlyIiBpbgorICAgICAgICAgICAgICAqLyRhY2xfbGliZGlyc3RlbSB8ICovJGFjbF9saWJkaXJzdGVtLykKKyAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgInMsLyRhY2xfbGliZGlyc3RlbS8iJyokLCwnYAorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRuYW1lIiA9ICckMSc7IHRoZW4KKyAgICAgICAgICAgICAgICAgIExJQltdTkFNRVtdX1BSRUZJWD0iJGJhc2VkaXIiCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0yIHwgKi8kYWNsX2xpYmRpcnN0ZW0yLykKKyAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgInMsLyRhY2xfbGliZGlyc3RlbTIvIicqJCwsJ2AKKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgPSAnJDEnOyB0aGVuCisgICAgICAgICAgICAgICAgICBMSUJbXU5BTUVbXV9QUkVGSVg9IiRiYXNlZGlyIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRlIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkSU5DTkFNRS4KKyAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKyAgICAgICAgICAgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9pbmNsdWRlLAorICAgICAgICAgICAgICBkbmwgICAyLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKyAgICAgICAgICAgICAgZG5sICAgMy4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTIG9yIHRoZSBhbHJlYWR5CisgICAgICAgICAgICAgIGRubCAgICAgIGNvbnN0cnVjdGVkICRJTkNOQU1FLAorICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1MgJElOQ1tdTkFNRTsgZG8KKyAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgorICAgICAgICAgICAgICAgICAgICAgIElOQ1tdTkFNRT0iJHtJTkNbXU5BTUV9JHtJTkNbXU5BTUU6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRubCBMb29rIGZvciBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZm91bmRfbGEiOyB0aGVuCisgICAgICAgICAgICAgIGRubCBSZWFkIHRoZSAubGEgZmlsZS4gSXQgZGVmaW5lcyB0aGUgdmFyaWFibGVzCisgICAgICAgICAgICAgIGRubCBkbG5hbWUsIGxpYnJhcnlfbmFtZXMsIG9sZF9saWJyYXJ5LCBkZXBlbmRlbmN5X2xpYnMsIGN1cnJlbnQsCisgICAgICAgICAgICAgIGRubCBhZ2UsIHJldmlzaW9uLCBpbnN0YWxsZWQsIGRsb3BlbiwgZGxwcmVvcGVuLCBsaWJkaXIuCisgICAgICAgICAgICAgIHNhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgICAgICAgICBjYXNlICIkZm91bmRfbGEiIGluCisgICAgICAgICAgICAgICAgKi8qIHwgKlxcKikgLiAiJGZvdW5kX2xhIiA7OworICAgICAgICAgICAgICAgICopIC4gIi4vJGZvdW5kX2xhIiA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGxpYmRpcj0iJHNhdmVfbGliZGlyIgorICAgICAgICAgICAgICBkbmwgV2UgdXNlIG9ubHkgZGVwZW5kZW5jeV9saWJzLgorICAgICAgICAgICAgICBmb3IgZGVwIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgICAgICAgICAgICAgICAgY2FzZSAiJGRlcCIgaW4KKyAgICAgICAgICAgICAgICAgIC1MKikKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1MLy8nYAorICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTElCTkFNRSBhbmQgJExUTElCTkFNRS4KKyAgICAgICAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9saWIsCisgICAgICAgICAgICAgICAgICAgIGRubCAgIDIuIGlmIGl0J3MgL3Vzci9sb2NhbC9saWIgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisgICAgICAgICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRMREZMQUdTIG9yIHRoZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgIGRubCAgICAgIGNvbnN0cnVjdGVkICRMSUJOQU1FLAorICAgICAgICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICAgICAgICAgICAgICYmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0yIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0yIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCW11OQU1FOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExJQk5BTUUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTFRMSUJOQU1FLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAtUiopCisgICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLVIvLydgCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gcnBhdGhkaXJzLgorICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIGx0cnBhdGhkaXJzLgorICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgIC1sKikKKyAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLgorICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1sLy8nYAorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgKi5sYSkKKyAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLiBUaHJvdyBhd2F5IHRoZSAubGEncworICAgICAgICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5OyBpdCBpcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiBhIHByZWNlZGluZyAtTAorICAgICAgICAgICAgICAgICAgICBkbmwgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncyxeWC4qLywsJyAtZSAncyxebGliLCwnIC1lICdzLFwubGEkLCwnYAorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgZG5sIE1vc3QgbGlrZWx5IGFuIGltbWVkaWF0ZSBsaWJyYXJ5IG5hbWUuCisgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGRlcCIKKyAgICAgICAgICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0kZGVwIgorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkbmwgRGlkbid0IGZpbmQgdGhlIGxpYnJhcnk7IGFzc3VtZSBpdCBpcyBpbiB0aGUgc3lzdGVtIGRpcmVjdG9yaWVzCisgICAgICAgICAgICBkbmwga25vd24gdG8gdGhlIGxpbmtlciBhbmQgcnVudGltZSBsb2FkZXIuIChBbGwgdGhlIHN5c3RlbQorICAgICAgICAgICAgZG5sIGRpcmVjdG9yaWVzIGtub3duIHRvIHRoZSBsaW5rZXIgc2hvdWxkIGFsc28gYmUga25vd24gdG8gdGhlCisgICAgICAgICAgICBkbmwgcnVudGltZSBsb2FkZXIsIG90aGVyd2lzZSB0aGUgc3lzdGVtIGlzIHNldmVyZWx5IG1pc2NvbmZpZ3VyZWQuKQorICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgorICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tbCRuYW1lIgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlciBtdXN0CisgICAgICBkbmwgcGFzcyBhbGwgcGF0aCBlbGVtZW50cyBpbiBvbmUgb3B0aW9uLiBXZSBjYW4gYXJyYW5nZSB0aGF0IGZvciBhCisgICAgICBkbmwgc2luZ2xlIGxpYnJhcnksIGJ1dCBub3Qgd2hlbiBtb3JlIHRoYW4gb25lICRMSUJOQU1FcyBhcmUgdXNlZC4KKyAgICAgIGFsbGRpcnM9CisgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgorICAgICAgZG9uZQorICAgICAgZG5sIE5vdGU6IGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIHVzZXMgJGxpYmRpciBhbmQgJHdsLgorICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgbGliZGlyPSIkYWxsZGlycyIKKyAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgorICAgIGVsc2UKKyAgICAgIGRubCBUaGUgLXJwYXRoIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCisgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgbGliZGlyPSIkZm91bmRfZGlyIgorICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisgICAgICBkb25lCisgICAgZmkKKyAgZmkKKyAgaWYgdGVzdCAiWCRsdHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisgICAgZG5sIFdoZW4gdXNpbmcgbGlidG9vbCwgdGhlIG9wdGlvbiB0aGF0IHdvcmtzIGZvciBib3RoIGxpYnJhcmllcyBhbmQKKyAgICBkbmwgZXhlY3V0YWJsZXMgaXMgLVIuIFRoZSAtUiBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorICAgIGZvciBmb3VuZF9kaXIgaW4gJGx0cnBhdGhkaXJzOyBkbworICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tUiRmb3VuZF9kaXIiCisgICAgZG9uZQorICBmaQorICBwb3BkZWYoW1BfQV9DX0tdKQorICBwb3BkZWYoW1BBQ0tMSUJTXSkKKyAgcG9wZGVmKFtQQUNLVVBdKQorICBwb3BkZWYoW1BBQ0tdKQorICBwb3BkZWYoW05BTUVdKQorXSkKKworZG5sIEFDX0xJQl9BUFBFTkRUT1ZBUihWQVIsIENPTlRFTlRTKSBhcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBDT05URU5UUyB0byBWQVIsCitkbmwgdW5sZXNzIGFscmVhZHkgcHJlc2VudCBpbiBWQVIuCitkbmwgV29ya3Mgb25seSBmb3IgQ1BQRkxBR1MsIG5vdCBmb3IgTElCKiB2YXJpYWJsZXMgYmVjYXVzZSB0aGF0IHNvbWV0aW1lcworZG5sIGNvbnRhaW5zIHR3byBvciB0aHJlZSBjb25zZWN1dGl2ZSBlbGVtZW50cyB0aGF0IGJlbG9uZyB0b2dldGhlci4KK0FDX0RFRlVOKFtBQ19MSUJfQVBQRU5EVE9WQVJdLAorWworICBmb3IgZWxlbWVudCBpbiBbJDJdOyBkbworICAgIGhhdmVpdD0KKyAgICBmb3IgeCBpbiAkWyQxXTsgZG8KKyAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZWxlbWVudCI7IHRoZW4KKyAgICAgICAgaGF2ZWl0PXllcworICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgIFskMV09IiR7WyQxXX0ke1skMV06KyB9JGVsZW1lbnQiCisgICAgZmkKKyAgZG9uZQorXSkKKworZG5sIEZvciB0aG9zZSBjYXNlcyB3aGVyZSBhIHZhcmlhYmxlIGNvbnRhaW5zIHNldmVyYWwgLUwgYW5kIC1sIG9wdGlvbnMKK2RubCByZWZlcnJpbmcgdG8gdW5rbm93biBsaWJyYXJpZXMgYW5kIGRpcmVjdG9yaWVzLCB0aGlzIG1hY3JvIGRldGVybWluZXMgdGhlCitkbmwgbmVjZXNzYXJ5IGFkZGl0aW9uYWwgbGlua2VyIG9wdGlvbnMgZm9yIHRoZSBydW50aW1lIHBhdGguCitkbmwgQUNfTElCX0xJTktGTEFHU19GUk9NX0xJQlMoW0xEQUREVkFSXSwgW0xJQlNWQUxVRV0sIFtVU0UtTElCVE9PTF0pCitkbmwgc2V0cyBMREFERFZBUiB0byBsaW5rZXIgb3B0aW9ucyBuZWVkZWQgdG9nZXRoZXIgd2l0aCBMSUJTVkFMVUUuCitkbmwgSWYgVVNFLUxJQlRPT0wgZXZhbHVhdGVzIHRvIG5vbi1lbXB0eSwgbGlua2luZyB3aXRoIGxpYnRvb2wgaXMgYXNzdW1lZCwKK2RubCBvdGhlcndpc2UgbGlua2luZyB3aXRob3V0IGxpYnRvb2wgaXMgYXNzdW1lZC4KK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTX0ZST01fTElCU10sCitbCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSkKKyAgJDE9CisgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKyAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIGRpcmVjdG9yaWVzIGludG8gdGhlIHJlc3VsdGluZworICAgICAgZG5sIGJpbmFyeS4KKyAgICAgIHJwYXRoZGlycz0KKyAgICAgIG5leHQ9CisgICAgICBmb3Igb3B0IGluICQyOyBkbworICAgICAgICBpZiB0ZXN0IC1uICIkbmV4dCI7IHRoZW4KKyAgICAgICAgICBkaXI9IiRuZXh0IgorICAgICAgICAgIGRubCBObyBuZWVkIHRvIGhhcmRjb2RlIHRoZSBzdGFuZGFyZCAvdXNyL2xpYi4KKyAgICAgICAgICBpZiB0ZXN0ICJYJGRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSIgXAorICAgICAgICAgICAgICYmIHRlc3QgIlgkZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtMiI7IHRoZW4KKyAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgIGZpCisgICAgICAgICAgbmV4dD0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGNhc2UgJG9wdCBpbgorICAgICAgICAgICAgLUwpIG5leHQ9eWVzIDs7CisgICAgICAgICAgICAtTCopIGRpcj1gZWNobyAiWCRvcHQiIHwgc2VkIC1lICdzLF5YLUwsLCdgCisgICAgICAgICAgICAgICAgIGRubCBObyBuZWVkIHRvIGhhcmRjb2RlIHRoZSBzdGFuZGFyZCAvdXNyL2xpYi4KKyAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iIFwKKyAgICAgICAgICAgICAgICAgICAgJiYgdGVzdCAiWCRkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0yIjsgdGhlbgorICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICBuZXh0PSA7OworICAgICAgICAgICAgKikgbmV4dD0gOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgLW4gIiIkMyIiOyB0aGVuCisgICAgICAgICAgZG5sIGxpYnRvb2wgaXMgdXNlZCBmb3IgbGlua2luZy4gVXNlIC1SIG9wdGlvbnMuCisgICAgICAgICAgZm9yIGRpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgJDE9IiR7JDF9JHskMTorIH0tUiRkaXIiCisgICAgICAgICAgZG9uZQorICAgICAgICBlbHNlCisgICAgICAgICAgZG5sIFRoZSBsaW5rZXIgaXMgdXNlZCBmb3IgbGlua2luZyBkaXJlY3RseS4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgICAgICAgICAgICBkbmwgV2VpcmQgcGxhdGZvcm06IG9ubHkgdGhlIGxhc3QgLXJwYXRoIG9wdGlvbiBjb3VudHMsIHRoZSB1c2VyCisgICAgICAgICAgICBkbmwgbXVzdCBwYXNzIGFsbCBwYXRoIGVsZW1lbnRzIGluIG9uZSBvcHRpb24uCisgICAgICAgICAgICBhbGxkaXJzPQorICAgICAgICAgICAgZm9yIGRpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGRpciIKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCisgICAgICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICAgICAgJDE9IiRmbGFnIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRubCBUaGUgLXJwYXRoIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCisgICAgICAgICAgICBmb3IgZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgICAgICAgbGliZGlyPSIkZGlyIgorICAgICAgICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisgICAgICAgICAgICAgICQxPSIkeyQxfSR7JDE6KyB9JGZsYWciCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKKyAgQUNfU1VCU1QoWyQxXSkKK10pCisKKyMgbGliLXByZWZpeC5tNCBzZXJpYWwgNyAoZ2V0dGV4dC0wLjE4KQorZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDA1LCAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitkbmwgQUNfTElCX0FSR19XSVRIIGlzIHN5bm9ueW1vdXMgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYtMi4xMywgYW5kCitkbmwgc2ltaWxhciB0byBBQ19BUkdfV0lUSCBpbiBhdXRvY29uZiAyLjUyLi4uMi41NyBleGNlcHQgdGhhdCBpcyBkb2Vzbid0CitkbmwgcmVxdWlyZSBleGNlc3NpdmUgYnJhY2tldGluZy4KK2lmZGVmKFtBQ19IRUxQX1NUUklOR10sCitbQUNfREVGVU4oW0FDX0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFtbJDJdXSxbJDNdLFskNF0pXSldLAorW0FDX0RFRlVOKFtBQ19dW0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFskMl0sWyQzXSxbJDRdKV0pXSkKKworZG5sIEFDX0xJQl9QUkVGSVggYWRkcyB0byB0aGUgQ1BQRkxBR1MgYW5kIExERkxBR1MgdGhlIGZsYWdzIHRoYXQgYXJlIG5lZWRlZAorZG5sIHRvIGFjY2VzcyBwcmV2aW91c2x5IGluc3RhbGxlZCBsaWJyYXJpZXMuIFRoZSBiYXNpYyBhc3N1bXB0aW9uIGlzIHRoYXQKK2RubCBhIHVzZXIgd2lsbCB3YW50IHBhY2thZ2VzIHRvIHVzZSBvdGhlciBwYWNrYWdlcyBoZSBwcmV2aW91c2x5IGluc3RhbGxlZAorZG5sIHdpdGggdGhlIHNhbWUgLS1wcmVmaXggb3B0aW9uLgorZG5sIFRoaXMgbWFjcm8gaXMgbm90IG5lZWRlZCBpZiBvbmx5IEFDX0xJQl9MSU5LRkxBR1MgaXMgdXNlZCB0byBsb2NhdGUKK2RubCBsaWJyYXJpZXMsIGJ1dCBpcyBvdGhlcndpc2UgdmVyeSBjb252ZW5pZW50LgorQUNfREVGVU4oW0FDX0xJQl9QUkVGSVhdLAorWworICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xJQl9MSU5LRkxBR1NdKQorICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorICB1c2VfYWRkaXRpb25hbD15ZXMKKyAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKyAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisgIF0pCisgIEFDX0xJQl9BUkdfV0lUSChbbGliLXByZWZpeF0sCitbICAtLXdpdGgtbGliLXByZWZpeFs9RElSXSBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorICAtLXdpdGhvdXQtbGliLXByZWZpeCAgICBkb24ndCBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorWworICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorICAgICAgICBdKQorICAgICAgZWxzZQorICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCisgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0iCisgICAgICBmaQorICAgIGZpCitdKQorICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKyAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTLAorICAgIGRubCAgIDMuIGlmIGl0J3MgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorICAgICAgaGF2ZWl0PQorICAgICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbworICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisgICAgICAgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMREZMQUdTLgorICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9saWIsCisgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJExERkxBR1MsCisgICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKyAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICBoYXZlaXQ9CisgICAgICBmb3IgeCBpbiAkTERGTEFHUzsgZG8KKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTERGTEFHUy4KKyAgICAgICAgICAgIExERkxBR1M9IiR7TERGTEFHU30ke0xERkxBR1M6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKK10pCisKK2RubCBBQ19MSUJfUFJFUEFSRV9QUkVGSVggY3JlYXRlcyB2YXJpYWJsZXMgYWNsX2ZpbmFsX3ByZWZpeCwKK2RubCBhY2xfZmluYWxfZXhlY19wcmVmaXgsIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byB3aGljaCAkcHJlZml4IGFuZAorZG5sICRleGVjX3ByZWZpeCB3aWxsIGV4cGFuZCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorQUNfREVGVU4oW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0sCitbCisgIGRubCBVbmZvcnR1bmF0ZWx5LCBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGdldCBvbmx5IGZpbmFsbHkgZGV0ZXJtaW5lZAorICBkbmwgYXQgdGhlIGVuZCBvZiBjb25maWd1cmUuCisgIGlmIHRlc3QgIlgkcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKyAgICBhY2xfZmluYWxfcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCisgIGVsc2UKKyAgICBhY2xfZmluYWxfcHJlZml4PSIkcHJlZml4IgorICBmaQorICBpZiB0ZXN0ICJYJGV4ZWNfcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKyAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKyAgZWxzZQorICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBmaQorICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGV2YWwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PVwiJGFjbF9maW5hbF9leGVjX3ByZWZpeFwiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKK10pCisKK2RubCBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW3N0YXRlbWVudF0pIGV2YWx1YXRlcyBzdGF0ZW1lbnQsIHdpdGggdGhlCitkbmwgdmFyaWFibGVzIHByZWZpeCBhbmQgZXhlY19wcmVmaXggYm91bmQgdG8gdGhlIHZhbHVlcyB0aGV5IHdpbGwgaGF2ZQorZG5sIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCitBQ19ERUZVTihbQUNfTElCX1dJVEhfRklOQUxfUFJFRklYXSwKK1sKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgJDEKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorXSkKKworZG5sIEFDX0xJQl9QUkVQQVJFX01VTFRJTElCIGNyZWF0ZXMKK2RubCAtIGEgdmFyaWFibGUgYWNsX2xpYmRpcnN0ZW0sIGNvbnRhaW5pbmcgdGhlIGJhc2VuYW1lIG9mIHRoZSBsaWJkaXIsIGVpdGhlcgorZG5sICAgImxpYiIgb3IgImxpYjY0IiBvciAibGliLzY0IiwKK2RubCAtIGEgdmFyaWFibGUgYWNsX2xpYmRpcnN0ZW0yLCBhcyBhIHNlY29uZGFyeSBwb3NzaWJsZSB2YWx1ZSBmb3IKK2RubCAgIGFjbF9saWJkaXJzdGVtLCBlaXRoZXIgdGhlIHNhbWUgYXMgYWNsX2xpYmRpcnN0ZW0gb3IgImxpYi9zcGFyY3Y5IiBvcgorZG5sICAgImxpYi9hbWQ2NCIuCitBQ19ERUZVTihbQUNfTElCX1BSRVBBUkVfTVVMVElMSUJdLAorWworICBkbmwgVGhlcmUgaXMgbm8gZm9ybWFsIHN0YW5kYXJkIHJlZ2FyZGluZyBsaWIgYW5kIGxpYjY0LgorICBkbmwgT24gZ2xpYmMgc3lzdGVtcywgdGhlIGN1cnJlbnQgcHJhY3RpY2UgaXMgdGhhdCBvbiBhIHN5c3RlbSBzdXBwb3J0aW5nCisgIGRubCAzMi1iaXQgYW5kIDY0LWJpdCBpbnN0cnVjdGlvbiBzZXRzIG9yIEFCSXMsIDY0LWJpdCBsaWJyYXJpZXMgZ28gdW5kZXIKKyAgZG5sICRwcmVmaXgvbGliNjQgYW5kIDMyLWJpdCBsaWJyYXJpZXMgZ28gdW5kZXIgJHByZWZpeC9saWIuIFdlIGRldGVybWluZQorICBkbmwgdGhlIGNvbXBpbGVyJ3MgZGVmYXVsdCBtb2RlIGJ5IGxvb2tpbmcgYXQgdGhlIGNvbXBpbGVyJ3MgbGlicmFyeSBzZWFyY2gKKyAgZG5sIHBhdGguIElmIGF0IGxlYXN0IG9uZSBvZiBpdHMgZWxlbWVudHMgZW5kcyBpbiAvbGliNjQgb3IgcG9pbnRzIHRvIGEKKyAgZG5sIGRpcmVjdG9yeSB3aG9zZSBhYnNvbHV0ZSBwYXRobmFtZSBlbmRzIGluIC9saWI2NCwgd2UgYXNzdW1lIGEgNjQtYml0IEFCSS4KKyAgZG5sIE90aGVyd2lzZSB3ZSB1c2UgdGhlIGRlZmF1bHQsIG5hbWVseSAibGliIi4KKyAgZG5sIE9uIFNvbGFyaXMgc3lzdGVtcywgdGhlIGN1cnJlbnQgcHJhY3RpY2UgaXMgdGhhdCBvbiBhIHN5c3RlbSBzdXBwb3J0aW5nCisgIGRubCAzMi1iaXQgYW5kIDY0LWJpdCBpbnN0cnVjdGlvbiBzZXRzIG9yIEFCSXMsIDY0LWJpdCBsaWJyYXJpZXMgZ28gdW5kZXIKKyAgZG5sICRwcmVmaXgvbGliLzY0ICh3aGljaCBpcyBhIHN5bWxpbmsgdG8gZWl0aGVyICRwcmVmaXgvbGliL3NwYXJjdjkgb3IKKyAgZG5sICRwcmVmaXgvbGliL2FtZDY0KSBhbmQgMzItYml0IGxpYnJhcmllcyBnbyB1bmRlciAkcHJlZml4L2xpYi4KKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICBhY2xfbGliZGlyc3RlbT1saWIKKyAgYWNsX2xpYmRpcnN0ZW0yPQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBzb2xhcmlzKikKKyAgICAgIGRubCBTZWUgU29sYXJpcyAxMCBTb2Z0d2FyZSBEZXZlbG9wZXIgQ29sbGVjdGlvbiA+IFNvbGFyaXMgNjQtYml0IERldmVsb3BlcidzIEd1aWRlID4gVGhlIERldmVsb3BtZW50IEVudmlyb25tZW50CisgICAgICBkbmwgPGh0dHA6Ly9kb2NzLnN1bi5jb20vYXBwL2RvY3MvZG9jLzgxNi01MTM4L2Rldi1lbnY/bD1lbiZhPXZpZXc+LgorICAgICAgZG5sICJQb3J0YWJsZSBNYWtlZmlsZXMgc2hvdWxkIHJlZmVyIHRvIGFueSBsaWJyYXJ5IGRpcmVjdG9yaWVzIHVzaW5nIHRoZSA2NCBzeW1ib2xpYyBsaW5rLiIKKyAgICAgIGRubCBCdXQgd2Ugd2FudCB0byByZWNvZ25pemUgdGhlIHNwYXJjdjkgb3IgYW1kNjQgc3ViZGlyZWN0b3J5IGFsc28gaWYgdGhlCisgICAgICBkbmwgc3ltbGluayBpcyBtaXNzaW5nLCBzbyB3ZSBzZXQgYWNsX2xpYmRpcnN0ZW0yIHRvby4KKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgNjQtYml0IGhvc3RdLCBbZ2xfY3Zfc29sYXJpc182NGJpdF0sCisgICAgICAgIFtBQ19FR1JFUF9DUFAoW3NpeHR5Zm91ciBiaXRzXSwgWworI2lmZGVmIF9MUDY0CitzaXh0eWZvdXIgYml0cworI2VuZGlmCisgICAgICAgICAgIF0sIFtnbF9jdl9zb2xhcmlzXzY0Yml0PXllc10sIFtnbF9jdl9zb2xhcmlzXzY0Yml0PW5vXSkKKyAgICAgICAgXSkKKyAgICAgIGlmIHRlc3QgJGdsX2N2X3NvbGFyaXNfNjRiaXQgPSB5ZXM7IHRoZW4KKyAgICAgICAgYWNsX2xpYmRpcnN0ZW09bGliLzY0CisgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgICBzcGFyYyopICAgICAgICBhY2xfbGliZGlyc3RlbTI9bGliL3NwYXJjdjkgOzsKKyAgICAgICAgICBpKjg2IHwgeDg2XzY0KSBhY2xfbGliZGlyc3RlbTI9bGliL2FtZDY0IDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICA7OworICAgICopCisgICAgICBzZWFyY2hwYXRoPWAoTENfQUxMPUMgJENDIC1wcmludC1zZWFyY2gtZGlycykgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJ3MsXmxpYnJhcmllczogLCxwJyB8IHNlZCAtZSAncyxePSwsJ2AKKyAgICAgIGlmIHRlc3QgLW4gIiRzZWFyY2hwYXRoIjsgdGhlbgorICAgICAgICBhY2xfc2F2ZV9JRlM9IiR7SUZTPSAJfSI7IElGUz0iOiIKKyAgICAgICAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNocGF0aDsgZG8KKyAgICAgICAgICBpZiB0ZXN0IC1kICIkc2VhcmNoZGlyIjsgdGhlbgorICAgICAgICAgICAgY2FzZSAiJHNlYXJjaGRpciIgaW4KKyAgICAgICAgICAgICAgKi9saWI2NC8gfCAqL2xpYjY0ICkgYWNsX2xpYmRpcnN0ZW09bGliNjQgOzsKKyAgICAgICAgICAgICAgKi8uLi8gfCAqLy4uICkKKyAgICAgICAgICAgICAgICAjIEJldHRlciBpZ25vcmUgZGlyZWN0b3JpZXMgb2YgdGhpcyBmb3JtLiBUaGV5IGFyZSBtaXNsZWFkaW5nLgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICopIHNlYXJjaGRpcj1gY2QgIiRzZWFyY2hkaXIiICYmIHB3ZGAKKyAgICAgICAgICAgICAgICAgY2FzZSAiJHNlYXJjaGRpciIgaW4KKyAgICAgICAgICAgICAgICAgICAqL2xpYjY0ICkgYWNsX2xpYmRpcnN0ZW09bGliNjQgOzsKKyAgICAgICAgICAgICAgICAgZXNhYyA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgSUZTPSIkYWNsX3NhdmVfSUZTIgorICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKKyAgdGVzdCAtbiAiJGFjbF9saWJkaXJzdGVtMiIgfHwgYWNsX2xpYmRpcnN0ZW0yPSIkYWNsX2xpYmRpcnN0ZW0iCitdKQorCisjIGxvY2subTQgc2VyaWFsIDEzIChnZXR0ZXh0LTAuMTguMikKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKK0FDX0RFRlVOKFtnbF9MT0NLXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfVEhSRUFETElCXSkKKyAgaWYgdGVzdCAiJGdsX3RocmVhZHNfYXBpIiA9IHBvc2l4OyB0aGVuCisgICAgIyBPU0YvMSA0LjAgYW5kIE1hYyBPUyBYIDEwLjEgbGFjayB0aGUgcHRocmVhZF9yd2xvY2tfdCB0eXBlIGFuZCB0aGUKKyAgICAjIHB0aHJlYWRfcndsb2NrXyogZnVuY3Rpb25zLgorICAgIEFDX0NIRUNLX1RZUEUoW3B0aHJlYWRfcndsb2NrX3RdLAorICAgICAgW0FDX0RFRklORShbSEFWRV9QVEhSRUFEX1JXTE9DS10sIFsxXSwKKyAgICAgICAgIFtEZWZpbmUgaWYgdGhlIFBPU0lYIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgaGFzIHJlYWQvd3JpdGUgbG9ja3MuXSldLAorICAgICAgW10sCisgICAgICBbI2luY2x1ZGUgPHB0aHJlYWQuaD5dKQorICAgICMgZ2xpYmMgZGVmaW5lcyBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSBhcyBlbnVtLCBub3QgYXMgYSBtYWNyby4KKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oCisgICAgICAgIFtbI2luY2x1ZGUgPHB0aHJlYWQuaD5dXSwKKyAgICAgICAgW1sKKyNpZiBfX0ZyZWVCU0RfXyA9PSA0CitlcnJvciAiTm8sIGluIEZyZWVCU0QgNC4wIHJlY3Vyc2l2ZSBtdXRleGVzIGFjdHVhbGx5IGRvbid0IHdvcmsuIgorI2VsaWYgKGRlZmluZWQgX19FTlZJUk9OTUVOVF9NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRF9fIFwKKyAgICAgICAmJiBfX0VOVklST05NRU5UX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEX18gPCAxMDcwKQorZXJyb3IgIk5vLCBpbiBNYWMgT1MgWCA8IDEwLjcgcmVjdXJzaXZlIG11dGV4ZXMgYWN0dWFsbHkgZG9uJ3Qgd29yay4iCisjZWxzZQoraW50IHggPSAoaW50KVBUSFJFQURfTVVURVhfUkVDVVJTSVZFOworcmV0dXJuICF4OworI2VuZGlmCisgICAgICAgIF1dKV0sCisgICAgICBbQUNfREVGSU5FKFtIQVZFX1BUSFJFQURfTVVURVhfUkVDVVJTSVZFXSwgWzFdLAorICAgICAgICAgW0RlZmluZSBpZiB0aGUgPHB0aHJlYWQuaD4gZGVmaW5lcyBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRS5dKV0pCisgIGZpCisgIGdsX1BSRVJFUV9MT0NLCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2dsdGhyZWFkL2xvY2suYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfTE9DS10sIFs6XSkKKworIyBsb25nbG9uZy5tNCBzZXJpYWwgMTcKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNywgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorCisjIERlZmluZSBIQVZFX0xPTkdfTE9OR19JTlQgaWYgJ2xvbmcgbG9uZyBpbnQnIHdvcmtzLgorIyBUaGlzIGZpeGVzIGEgYnVnIGluIEF1dG9jb25mIDIuNjEsIGFuZCBjYW4gYmUgZmFzdGVyCisjIHRoYW4gd2hhdCdzIGluIEF1dG9jb25mIDIuNjIgdGhyb3VnaCAyLjY4LgorCisjIE5vdGU6IElmIHRoZSB0eXBlICdsb25nIGxvbmcgaW50JyBleGlzdHMgYnV0IGlzIG9ubHkgMzIgYml0cyBsYXJnZQorIyAoYXMgb24gc29tZSB2ZXJ5IG9sZCBjb21waWxlcnMpLCBIQVZFX0xPTkdfTE9OR19JTlQgd2lsbCBub3QgYmUKKyMgZGVmaW5lZC4gSW4gdGhpcyBjYXNlIHlvdSBjYW4gdHJlYXQgJ2xvbmcgbG9uZyBpbnQnIGxpa2UgJ2xvbmcgaW50Jy4KKworQUNfREVGVU4oW0FDX1RZUEVfTE9OR19MT05HX0lOVF0sCitbCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HX0lOVF0pCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbG9uZyBsb25nIGludF0sIFthY19jdl90eXBlX2xvbmdfbG9uZ19pbnRdLAorICAgICBbYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PXllcworICAgICAgaWYgdGVzdCAieCR7YWNfY3ZfcHJvZ19jY19jOTktbm99IiA9IHhubzsgdGhlbgorICAgICAgICBhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9JGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludAorICAgICAgICBpZiB0ZXN0ICRhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQgPSB5ZXM7IHRoZW4KKyAgICAgICAgICBkbmwgQ2F0Y2ggYSBidWcgaW4gVGFuZGVtIE5vblN0b3AgS2VybmVsIChPU1MpIGNjIC1PIGNpcmNhIDIwMDQuCisgICAgICAgICAgZG5sIElmIGNyb3NzIGNvbXBpbGluZywgYXNzdW1lIHRoZSBidWcgaXMgbm90IGltcG9ydGFudCwgc2luY2UKKyAgICAgICAgICBkbmwgbm9ib2R5IGNyb3NzIGNvbXBpbGVzIGZvciB0aGlzIHBsYXRmb3JtIGFzIGZhciBhcyB3ZSBrbm93LgorICAgICAgICAgIEFDX1JVTl9JRkVMU0UoCisgICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgICAgW1tAJTpAaW5jbHVkZSA8bGltaXRzLmg+CisgICAgICAgICAgICAgICAgIEAlOkBpZm5kZWYgTExPTkdfTUFYCisgICAgICAgICAgICAgICAgIEAlOkAgZGVmaW5lIEhBTEYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMUxMIDw8IChzaXplb2YgKGxvbmcgbG9uZyBpbnQpICogQ0hBUl9CSVQgLSAyKSkKKyAgICAgICAgICAgICAgICAgQCU6QCBkZWZpbmUgTExPTkdfTUFYIChIQUxGIC0gMSArIEhBTEYpCisgICAgICAgICAgICAgICAgIEAlOkBlbmRpZl1dLAorICAgICAgICAgICAgICAgW1tsb25nIGxvbmcgaW50IG4gPSAxOworICAgICAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgOyBpKyspCisgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBtID0gbiA8PCBpOworICAgICAgICAgICAgICAgICAgICAgaWYgKG0gPj4gaSAhPSBuKQorICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICAgICAgIGlmIChMTE9OR19NQVggLyAyIDwgbSkKKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICByZXR1cm4gMDtdXSldLAorICAgICAgICAgICAgW10sCisgICAgICAgICAgICBbYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PW5vXSwKKyAgICAgICAgICAgIFs6XSkKKyAgICAgICAgZmkKKyAgICAgIGZpXSkKKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX0xPTkdfTE9OR19JTlRdLCBbMV0sCisgICAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgJ2xvbmcgbG9uZyBpbnQnLl0pCisgIGZpCitdKQorCisjIERlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgaWYgJ3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQnIHdvcmtzLgorIyBUaGlzIGZpeGVzIGEgYnVnIGluIEF1dG9jb25mIDIuNjEsIGFuZCBjYW4gYmUgZmFzdGVyCisjIHRoYW4gd2hhdCdzIGluIEF1dG9jb25mIDIuNjIgdGhyb3VnaCAyLjY4LgorCisjIE5vdGU6IElmIHRoZSB0eXBlICd1bnNpZ25lZCBsb25nIGxvbmcgaW50JyBleGlzdHMgYnV0IGlzIG9ubHkgMzIgYml0cworIyBsYXJnZSAoYXMgb24gc29tZSB2ZXJ5IG9sZCBjb21waWxlcnMpLCBBQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQKKyMgd2lsbCBub3QgYmUgZGVmaW5lZC4gSW4gdGhpcyBjYXNlIHlvdSBjYW4gdHJlYXQgJ3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQnCisjIGxpa2UgJ3Vuc2lnbmVkIGxvbmcgaW50Jy4KKworQUNfREVGVU4oW0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HX0lOVF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgdW5zaWduZWQgbG9uZyBsb25nIGludF0sCisgICAgW2FjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludF0sCisgICAgW2FjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludD15ZXMKKyAgICAgaWYgdGVzdCAieCR7YWNfY3ZfcHJvZ19jY19jOTktbm99IiA9IHhubzsgdGhlbgorICAgICAgIEFDX0xJTktfSUZFTFNFKAorICAgICAgICAgW19BQ19UWVBFX0xPTkdfTE9OR19TTklQUEVUXSwKKyAgICAgICAgIFtdLAorICAgICAgICAgW2FjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludD1ub10pCisgICAgIGZpXSkKKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRdLCBbMV0sCisgICAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgJ3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQnLl0pCisgIGZpCitdKQorCisjIEV4cGFuZHMgdG8gYSBDIHByb2dyYW0gdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IGZvciBzaW11bHRhbmVvdXMgc3VwcG9ydAorIyBvZiAnbG9uZyBsb25nJyBhbmQgJ3Vuc2lnbmVkIGxvbmcgbG9uZycuIFdlIGRvbid0IHdhbnQgdG8gc2F5IHRoYXQKKyMgJ2xvbmcgbG9uZycgaXMgYXZhaWxhYmxlIGlmICd1bnNpZ25lZCBsb25nIGxvbmcnIGlzIG5vdCwgb3IgdmljZSB2ZXJzYSwKKyMgYmVjYXVzZSB0b28gbWFueSBwcm9ncmFtcyByZWx5IG9uIHRoZSBzeW1tZXRyeSBiZXR3ZWVuIHNpZ25lZCBhbmQgdW5zaWduZWQKKyMgaW50ZWdlciB0eXBlcyAoZXhjbHVkaW5nICdib29sJykuCitBQ19ERUZVTihbX0FDX1RZUEVfTE9OR19MT05HX1NOSVBQRVRdLAorWworICBBQ19MQU5HX1BST0dSQU0oCisgICAgW1svKiBGb3Igbm93LCBkbyBub3QgdGVzdCB0aGUgcHJlcHJvY2Vzc29yOyBhcyBvZiAyMDA3IHRoZXJlIGFyZSB0b28gbWFueQorICAgICAgICAgaW1wbGVtZW50YXRpb25zIHdpdGggYnJva2VuIHByZXByb2Nlc3NvcnMuICBQZXJoYXBzIHRoaXMgY2FuCisgICAgICAgICBiZSByZXZpc2l0ZWQgaW4gMjAxMi4gIEluIHRoZSBtZWFudGltZSwgY29kZSBzaG91bGQgbm90IGV4cGVjdAorICAgICAgICAgI2lmIHRvIHdvcmsgd2l0aCBsaXRlcmFscyB3aWRlciB0aGFuIDMyIGJpdHMuICAqLworICAgICAgLyogVGVzdCBsaXRlcmFscy4gICovCisgICAgICBsb25nIGxvbmcgaW50IGxsID0gOTIyMzM3MjAzNjg1NDc3NTgwN2xsOworICAgICAgbG9uZyBsb25nIGludCBubGwgPSAtOTIyMzM3MjAzNjg1NDc3NTgwN0xMOworICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCB1bGwgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTDsKKyAgICAgIC8qIFRlc3QgY29uc3RhbnQgZXhwcmVzc2lvbnMuICAgKi8KKyAgICAgIHR5cGVkZWYgaW50IGFbKCgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMIDwgMCAmJiAwIDwgOTIyMzM3MjAzNjg1NDc3NTgwN2xsKQorICAgICAgICAgICAgICAgICAgICAgPyAxIDogLTEpXTsKKyAgICAgIHR5cGVkZWYgaW50IGJbKDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMIDw9ICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSAtMQorICAgICAgICAgICAgICAgICAgICAgPyAxIDogLTEpXTsKKyAgICAgIGludCBpID0gNjM7XV0sCisgICAgW1svKiBUZXN0IGF2YWlsYWJpbGl0eSBvZiBydW50aW1lIHJvdXRpbmVzIGZvciBzaGlmdCBhbmQgZGl2aXNpb24uICAqLworICAgICAgbG9uZyBsb25nIGludCBsbG1heCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbDsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWxsbWF4ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTV1bGw7CisgICAgICByZXR1cm4gKChsbCA8PCA2MykgfCAobGwgPj4gNjMpIHwgKGxsIDwgaSkgfCAobGwgPiBpKQorICAgICAgICAgICAgICB8IChsbG1heCAvIGxsKSB8IChsbG1heCAlIGxsKQorICAgICAgICAgICAgICB8ICh1bGwgPDwgNjMpIHwgKHVsbCA+PiA2MykgfCAodWxsIDw8IGkpIHwgKHVsbCA+PiBpKQorICAgICAgICAgICAgICB8ICh1bGxtYXggLyB1bGwpIHwgKHVsbG1heCAlIHVsbCkpO11dKQorXSkKKworIyBubHMubTQgc2VyaWFsIDUgKGdldHRleHQtMC4xOCkKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAwNS0yMDA2LCAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorZG5sCitkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CitkbmwgZnVuY3Rpb25hbGl0eS4KK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCitkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCitkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK2RubCBBdXRob3JzOgorZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KK2RubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDAzLgorCitBQ19QUkVSRVEoWzIuNTBdKQorCitBQ19ERUZVTihbQU1fTkxTXSwKK1sKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWRdKQorICBkbmwgRGVmYXVsdCBpcyBlbmFibGVkIE5MUworICBBQ19BUkdfRU5BQkxFKFtubHNdLAorICAgIFsgIC0tZGlzYWJsZS1ubHMgICAgICAgICAgIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnRdLAorICAgIFVTRV9OTFM9JGVuYWJsZXZhbCwgVVNFX05MUz15ZXMpCisgIEFDX01TR19SRVNVTFQoWyRVU0VfTkxTXSkKKyAgQUNfU1VCU1QoW1VTRV9OTFNdKQorXSkKKworIyBwa2cubTQgLSBNYWNyb3MgdG8gbG9jYXRlIGFuZCB1dGlsaXNlIHBrZy1jb25maWcuICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBzZXJpYWwgMSAocGtnLWNvbmZpZy0wLjI0KQorIyAKKyMgQ29weXJpZ2h0IMKpIDIwMDQgU2NvdHQgSmFtZXMgUmVtbmFudCA8c2NvdHRAbmV0c3BsaXQuY29tPi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIFBLR19QUk9HX1BLR19DT05GSUcoW01JTi1WRVJTSU9OXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW1BLR19QUk9HX1BLR19DT05GSUddLAorW200X3BhdHRlcm5fZm9yYmlkKFteXz9QS0dfW0EtWl9dKyRdKQorbTRfcGF0dGVybl9hbGxvdyhbXlBLR19DT05GSUcoXyhQQVRIfExJQkRJUnxTWVNST09UX0RJUnxBTExPV19TWVNURU1fKENGTEFHU3xMSUJTKSkpPyRdKQorbTRfcGF0dGVybl9hbGxvdyhbXlBLR19DT05GSUdfKERJU0FCTEVfVU5JTlNUQUxMRUR8VE9QX0JVSUxEX0RJUnxERUJVR19TUEVXKSRdKQorQUNfQVJHX1ZBUihbUEtHX0NPTkZJR10sIFtwYXRoIHRvIHBrZy1jb25maWcgdXRpbGl0eV0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHX1BBVEhdLCBbZGlyZWN0b3JpZXMgdG8gYWRkIHRvIHBrZy1jb25maWcncyBzZWFyY2ggcGF0aF0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHX0xJQkRJUl0sIFtwYXRoIG92ZXJyaWRpbmcgcGtnLWNvbmZpZydzIGJ1aWx0LWluIHNlYXJjaCBwYXRoXSkKKworaWYgdGVzdCAieCRhY19jdl9lbnZfUEtHX0NPTkZJR19zZXQiICE9ICJ4c2V0IjsgdGhlbgorCUFDX1BBVEhfVE9PTChbUEtHX0NPTkZJR10sIFtwa2ctY29uZmlnXSkKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKwlfcGtnX21pbl92ZXJzaW9uPW00X2RlZmF1bHQoWyQxXSwgWzAuOS4wXSkKKwlBQ19NU0dfQ0hFQ0tJTkcoW3BrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbl0pCisJaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uOyB0aGVuCisJCUFDX01TR19SRVNVTFQoW3llc10pCisJZWxzZQorCQlBQ19NU0dfUkVTVUxUKFtub10pCisJCVBLR19DT05GSUc9IiIKKwlmaQorZmlbXWRubAorXSkjIFBLR19QUk9HX1BLR19DT05GSUcKKworIyBQS0dfQ0hFQ0tfRVhJU1RTKE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCisjCisjIENoZWNrIHRvIHNlZSB3aGV0aGVyIGEgcGFydGljdWxhciBzZXQgb2YgbW9kdWxlcyBleGlzdHMuICBTaW1pbGFyCisjIHRvIFBLR19DSEVDS19NT0RVTEVTKCksIGJ1dCBkb2VzIG5vdCBzZXQgdmFyaWFibGVzIG9yIHByaW50IGVycm9ycy4KKyMKKyMgUGxlYXNlIHJlbWVtYmVyIHRoYXQgbTQgZXhwYW5kcyBBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKKyMgb25seSBhdCB0aGUgZmlyc3Qgb2NjdXJlbmNlIGluIGNvbmZpZ3VyZS5hYywgc28gaWYgdGhlIGZpcnN0IHBsYWNlCisjIGl0J3MgY2FsbGVkIG1pZ2h0IGJlIHNraXBwZWQgKHN1Y2ggYXMgaWYgaXQgaXMgd2l0aGluIGFuICJpZiIsIHlvdQorIyBoYXZlIHRvIGNhbGwgUEtHX0NIRUNLX0VYSVNUUyBtYW51YWxseQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW1BLR19DSEVDS19FWElTVFNdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICBBQ19SVU5fTE9HKFskUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJDEiXSk7IHRoZW4KKyAgbTRfZGVmYXVsdChbJDJdLCBbOl0pCittNF9pZnZhbG4oWyQzXSwgW2Vsc2UKKyAgJDNdKWRubAorZmldKQorCisjIF9QS0dfQ09ORklHKFtWQVJJQUJMRV0sIFtDT01NQU5EXSwgW01PRFVMRVNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX1BLR19DT05GSUddLAorW2lmIHRlc3QgLW4gIiQkMSI7IHRoZW4KKyAgICBwa2dfY3ZfW10kMT0iJCQxIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgUEtHX0NIRUNLX0VYSVNUUyhbJDNdLAorICAgICAgICAgICAgICAgICAgICAgW3BrZ19jdl9bXSQxPWAkUEtHX0NPTkZJRyAtLVtdJDIgIiQzIiAyPi9kZXYvbnVsbGAKKwkJICAgICAgdGVzdCAieCQ/IiAhPSAieDAiICYmIHBrZ19mYWlsZWQ9eWVzIF0sCisJCSAgICAgW3BrZ19mYWlsZWQ9eWVzXSkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaVtdZG5sCitdKSMgX1BLR19DT05GSUcKKworIyBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURURdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQoraWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpW11kbmwKK10pIyBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKKworCisjIFBLR19DSEVDS19NT0RVTEVTKFZBUklBQkxFLVBSRUZJWCwgTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sCisjIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMKKyMKKyMgTm90ZSB0aGF0IGlmIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhlIGZpcnN0IGNhbGwgdG8KKyMgUEtHX0NIRUNLX01PRFVMRVMgbWlnaHQgbm90IGhhcHBlbiwgeW91IHNob3VsZCBiZSBzdXJlIHRvIGluY2x1ZGUgYW4KKyMgZXhwbGljaXQgY2FsbCB0byBQS0dfUFJPR19QS0dfQ09ORklHIGluIHlvdXIgY29uZmlndXJlLmFjCisjCisjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbUEtHX0NIRUNLX01PRFVMRVNdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAorQUNfQVJHX1ZBUihbJDFdW19DRkxBR1NdLCBbQyBjb21waWxlciBmbGFncyBmb3IgJDEsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZ10pZG5sCitBQ19BUkdfVkFSKFskMV1bX0xJQlNdLCBbbGlua2VyIGZsYWdzIGZvciAkMSwgb3ZlcnJpZGluZyBwa2ctY29uZmlnXSlkbmwKKworcGtnX2ZhaWxlZD1ubworQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorCitfUEtHX0NPTkZJRyhbJDFdW19DRkxBR1NdLCBbY2ZsYWdzXSwgWyQyXSkKK19QS0dfQ09ORklHKFskMV1bX0xJQlNdLCBbbGlic10sIFskMl0pCisKK200X2RlZmluZShbX1BLR19URVhUXSwgW0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgJDFbXV9DRkxBR1MKK2FuZCAkMVtdX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuXSkKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorICAgCUFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgJDFbXV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAtLWNmbGFncyAtLWxpYnMgIiQyIiAyPiYxYAorICAgICAgICBlbHNlIAorCSAgICAgICAgJDFbXV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXByaW50LWVycm9ycyAtLWNmbGFncyAtLWxpYnMgIiQyIiAyPiYxYAorICAgICAgICBmaQorCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncworCWVjaG8gIiQkMVtdX1BLR19FUlJPUlMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKworCW00X2RlZmF1bHQoWyQ0XSwgW0FDX01TR19FUlJPUigKK1tQYWNrYWdlIHJlcXVpcmVtZW50cyAoJDIpIHdlcmUgbm90IG1ldDoKKworJCQxX1BLR19FUlJPUlMKKworQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91CitpbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgorCitfUEtHX1RFWFRdKVtdZG5sCisgICAgICAgIF0pCitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisgICAgIAlBQ19NU0dfUkVTVUxUKFtub10pCisJbTRfZGVmYXVsdChbJDRdLCBbQUNfTVNHX0ZBSUxVUkUoCitbVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBpcyB0b28gb2xkLiAgTWFrZSBzdXJlIGl0CitpcyBpbiB5b3VyIFBBVEggb3Igc2V0IHRoZSBQS0dfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBmdWxsCitwYXRoIHRvIHBrZy1jb25maWcuCisKK19QS0dfVEVYVAorCitUbyBnZXQgcGtnLWNvbmZpZywgc2VlIDxodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvPi5dKVtdZG5sCisgICAgICAgIF0pCitlbHNlCisJJDFbXV9DRkxBR1M9JHBrZ19jdl9bXSQxW11fQ0ZMQUdTCisJJDFbXV9MSUJTPSRwa2dfY3ZfW10kMVtdX0xJQlMKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKwkkMworZmlbXWRubAorXSkjIFBLR19DSEVDS19NT0RVTEVTCisKKworIyBQS0dfSU5TVEFMTERJUihESVJFQ1RPUlkpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3Vic3RpdHV0ZXMgdGhlIHZhcmlhYmxlIHBrZ2NvbmZpZ2RpciBhcyB0aGUgbG9jYXRpb24gd2hlcmUgYSBtb2R1bGUKKyMgc2hvdWxkIGluc3RhbGwgcGtnLWNvbmZpZyAucGMgZmlsZXMuIEJ5IGRlZmF1bHQgdGhlIGRpcmVjdG9yeSBpcworIyAkbGliZGlyL3BrZ2NvbmZpZywgYnV0IHRoZSBkZWZhdWx0IGNhbiBiZSBjaGFuZ2VkIGJ5IHBhc3NpbmcKKyMgRElSRUNUT1JZLiBUaGUgdXNlciBjYW4gb3ZlcnJpZGUgdGhyb3VnaCB0aGUgLS13aXRoLXBrZ2NvbmZpZ2RpcgorIyBwYXJhbWV0ZXIuCitBQ19ERUZVTihbUEtHX0lOU1RBTExESVJdLAorW200X3B1c2hkZWYoW3BrZ19kZWZhdWx0XSwgW200X2RlZmF1bHQoWyQxXSwgWycke2xpYmRpcn0vcGtnY29uZmlnJ10pXSkKK200X3B1c2hkZWYoW3BrZ19kZXNjcmlwdGlvbl0sCisgICAgW3BrZy1jb25maWcgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBAPDpAXXBrZ19kZWZhdWx0W0A6PkBdKQorQUNfQVJHX1dJVEgoW3BrZ2NvbmZpZ2Rpcl0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGtnY29uZmlnZGlyXSwgcGtnX2Rlc2NyaXB0aW9uKV0sLAorICAgIFt3aXRoX3BrZ2NvbmZpZ2Rpcj1dcGtnX2RlZmF1bHQpCitBQ19TVUJTVChbcGtnY29uZmlnZGlyXSwgWyR3aXRoX3BrZ2NvbmZpZ2Rpcl0pCittNF9wb3BkZWYoW3BrZ19kZWZhdWx0XSkKK200X3BvcGRlZihbcGtnX2Rlc2NyaXB0aW9uXSkKK10pIGRubCBQS0dfSU5TVEFMTERJUgorCisKKyMgUEtHX05PQVJDSF9JTlNUQUxMRElSKERJUkVDVE9SWSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTdWJzdGl0dXRlcyB0aGUgdmFyaWFibGUgbm9hcmNoX3BrZ2NvbmZpZ2RpciBhcyB0aGUgbG9jYXRpb24gd2hlcmUgYQorIyBtb2R1bGUgc2hvdWxkIGluc3RhbGwgYXJjaC1pbmRlcGVuZGVudCBwa2ctY29uZmlnIC5wYyBmaWxlcy4gQnkKKyMgZGVmYXVsdCB0aGUgZGlyZWN0b3J5IGlzICRkYXRhZGlyL3BrZ2NvbmZpZywgYnV0IHRoZSBkZWZhdWx0IGNhbiBiZQorIyBjaGFuZ2VkIGJ5IHBhc3NpbmcgRElSRUNUT1JZLiBUaGUgdXNlciBjYW4gb3ZlcnJpZGUgdGhyb3VnaCB0aGUKKyMgLS13aXRoLW5vYXJjaC1wa2djb25maWdkaXIgcGFyYW1ldGVyLgorQUNfREVGVU4oW1BLR19OT0FSQ0hfSU5TVEFMTERJUl0sCitbbTRfcHVzaGRlZihbcGtnX2RlZmF1bHRdLCBbbTRfZGVmYXVsdChbJDFdLCBbJyR7ZGF0YWRpcn0vcGtnY29uZmlnJ10pXSkKK200X3B1c2hkZWYoW3BrZ19kZXNjcmlwdGlvbl0sCisgICAgW3BrZy1jb25maWcgYXJjaC1pbmRlcGVuZGVudCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IEA8OkBdcGtnX2RlZmF1bHRbQDo+QF0pCitBQ19BUkdfV0lUSChbbm9hcmNoLXBrZ2NvbmZpZ2Rpcl0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbm9hcmNoLXBrZ2NvbmZpZ2Rpcl0sIHBrZ19kZXNjcmlwdGlvbildLCwKKyAgICBbd2l0aF9ub2FyY2hfcGtnY29uZmlnZGlyPV1wa2dfZGVmYXVsdCkKK0FDX1NVQlNUKFtub2FyY2hfcGtnY29uZmlnZGlyXSwgWyR3aXRoX25vYXJjaF9wa2djb25maWdkaXJdKQorbTRfcG9wZGVmKFtwa2dfZGVmYXVsdF0pCittNF9wb3BkZWYoW3BrZ19kZXNjcmlwdGlvbl0pCitdKSBkbmwgUEtHX05PQVJDSF9JTlNUQUxMRElSCisKKworIyBQS0dfQ0hFQ0tfVkFSKFZBUklBQkxFLCBNT0RVTEUsIENPTkZJRy1WQVJJQUJMRSwKKyMgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBwa2ctY29uZmlnIHZhcmlhYmxlIGZvciB0aGUgZ2l2ZW4gbW9kdWxlLgorQUNfREVGVU4oW1BLR19DSEVDS19WQVJdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAorQUNfQVJHX1ZBUihbJDFdLCBbdmFsdWUgb2YgJDMgZm9yICQyLCBvdmVycmlkaW5nIHBrZy1jb25maWddKWRubAorCitfUEtHX0NPTkZJRyhbJDFdLCBbdmFyaWFibGU9Il1bJDNdWyJdLCBbJDJdKQorQVNfVkFSX0NPUFkoWyQxXSwgW3BrZ19jdl9dWyQxXSkKKworQVNfVkFSX0lGKFskMV0sIFsiIl0sIFskNV0sIFskNF0pZG5sCitdKSMgUEtHX0NIRUNLX1ZBUgorCisjIHBvLm00IHNlcmlhbCAyMSAoZ2V0dGV4dC0wLjE4LjMpCitkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KK2RubAorZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorZG5sIGZ1bmN0aW9uYWxpdHkuCitkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorCitkbmwgQXV0aG9yczoKK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LTIwMDAuCitkbmwgICBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4sIDIwMDAtMjAwMy4KKworQUNfUFJFUkVRKFsyLjYwXSkKKworZG5sIENoZWNrcyBmb3IgYWxsIHByZXJlcXVpc2l0ZXMgb2YgdGhlIHBvIHN1YmRpcmVjdG9yeS4KK0FDX0RFRlVOKFtBTV9QT19TVUJESVJTXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19NQUtFX1NFVF0pZG5sCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfSU5TVEFMTF0pZG5sCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfTUtESVJfUF0pZG5sCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfU0VEXSlkbmwKKyAgQUNfUkVRVUlSRShbQU1fTkxTXSlkbmwKKworICBkbmwgUmVsZWFzZSB2ZXJzaW9uIG9mIHRoZSBnZXR0ZXh0IG1hY3Jvcy4gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0CisgIGRubCB0aGUgZ2V0dGV4dCBtYWNyb3MgYW5kIHBvL01ha2VmaWxlLmluLmluIGFyZSBpbiBzeW5jLgorICBBQ19TVUJTVChbR0VUVEVYVF9NQUNST19WRVJTSU9OXSwgWzAuMThdKQorCisgIGRubCBQZXJmb3JtIHRoZSBmb2xsb3dpbmcgdGVzdHMgYWxzbyBpZiAtLWRpc2FibGUtbmxzIGhhcyBiZWVuIGdpdmVuLAorICBkbmwgYmVjYXVzZSB0aGV5IGFyZSBuZWVkZWQgZm9yICJtYWtlIGRpc3QiIHRvIHdvcmsuCisKKyAgZG5sIFNlYXJjaCBmb3IgR05VIG1zZ2ZtdCBpbiB0aGUgUEFUSC4KKyAgZG5sIFRoZSBmaXJzdCB0ZXN0IGV4Y2x1ZGVzIFNvbGFyaXMgbXNnZm10IGFuZCBlYXJseSBHTlUgbXNnZm10IHZlcnNpb25zLgorICBkbmwgVGhlIHNlY29uZCB0ZXN0IGV4Y2x1ZGVzIEZyZWVCU0QgbXNnZm10LgorICBBTV9QQVRIX1BST0dfV0lUSF9URVNUKE1TR0ZNVCwgbXNnZm10LAorICAgIFskYWNfZGlyLyRhY193b3JkIC0tc3RhdGlzdGljcyAvZGV2L251bGwgPiZdQVNfTUVTU0FHRV9MT0dfRkRbIDI+JjEgJiYKKyAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpXSwKKyAgICA6KQorICBBQ19QQVRIX1BST0coW0dNU0dGTVRdLCBbZ21zZ2ZtdF0sIFskTVNHRk1UXSkKKworICBkbmwgVGVzdCB3aGV0aGVyIGl0IGlzIEdOVSBtc2dmbXQgPj0gMC4xNS4KK2NoYW5nZXF1b3RlKCwpZG5sCisgIGNhc2UgYCRNU0dGTVQgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbgorICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTRdIHwgMC4xWzAtNF0uKikgTVNHRk1UXzAxNT06IDs7CisgICAgKikgTVNHRk1UXzAxNT0kTVNHRk1UIDs7CisgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgQUNfU1VCU1QoW01TR0ZNVF8wMTVdKQorY2hhbmdlcXVvdGUoLClkbmwKKyAgY2FzZSBgJEdNU0dGTVQgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbgorICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTRdIHwgMC4xWzAtNF0uKikgR01TR0ZNVF8wMTU9OiA7OworICAgICopIEdNU0dGTVRfMDE1PSRHTVNHRk1UIDs7CisgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgQUNfU1VCU1QoW0dNU0dGTVRfMDE1XSkKKworICBkbmwgU2VhcmNoIGZvciBHTlUgeGdldHRleHQgMC4xMiBvciBuZXdlciBpbiB0aGUgUEFUSC4KKyAgZG5sIFRoZSBmaXJzdCB0ZXN0IGV4Y2x1ZGVzIFNvbGFyaXMgeGdldHRleHQgYW5kIGVhcmx5IEdOVSB4Z2V0dGV4dCB2ZXJzaW9ucy4KKyAgZG5sIFRoZSBzZWNvbmQgdGVzdCBleGNsdWRlcyBGcmVlQlNEIHhnZXR0ZXh0LgorICBBTV9QQVRIX1BST0dfV0lUSF9URVNUKFhHRVRURVhULCB4Z2V0dGV4dCwKKyAgICBbJGFjX2Rpci8kYWNfd29yZCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCA+Jl1BU19NRVNTQUdFX0xPR19GRFsgMj4mMSAmJgorICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpXSwKKyAgICA6KQorICBkbmwgUmVtb3ZlIGxlZnRvdmVyIGZyb20gRnJlZUJTRCB4Z2V0dGV4dCBjYWxsLgorICBybSAtZiBtZXNzYWdlcy5wbworCisgIGRubCBUZXN0IHdoZXRoZXIgaXQgaXMgR05VIHhnZXR0ZXh0ID49IDAuMTUuCitjaGFuZ2VxdW90ZSgsKWRubAorICBjYXNlIGAkWEdFVFRFWFQgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbgorICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTRdIHwgMC4xWzAtNF0uKikgWEdFVFRFWFRfMDE1PTogOzsKKyAgICAqKSBYR0VUVEVYVF8wMTU9JFhHRVRURVhUIDs7CisgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgQUNfU1VCU1QoW1hHRVRURVhUXzAxNV0pCisKKyAgZG5sIFNlYXJjaCBmb3IgR05VIG1zZ21lcmdlIDAuMTEgb3IgbmV3ZXIgaW4gdGhlIFBBVEguCisgIEFNX1BBVEhfUFJPR19XSVRIX1RFU1QoTVNHTUVSR0UsIG1zZ21lcmdlLAorICAgIFskYWNfZGlyLyRhY193b3JkIC0tdXBkYXRlIC1xIC9kZXYvbnVsbCAvZGV2L251bGwgPiZdQVNfTUVTU0FHRV9MT0dfRkRbIDI+JjFdLCA6KQorCisgIGRubCBJbnN0YWxsYXRpb24gZGlyZWN0b3JpZXMuCisgIGRubCBBdXRvY29uZiA+PSAyLjYwIGRlZmluZXMgbG9jYWxlZGlyLiBGb3Igb2xkZXIgdmVyc2lvbnMgb2YgYXV0b2NvbmYsIHdlCisgIGRubCBoYXZlIHRvIGRlZmluZSBpdCBoZXJlLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGluIHBvL01ha2VmaWxlLgorICB0ZXN0IC1uICIkbG9jYWxlZGlyIiB8fCBsb2NhbGVkaXI9JyR7ZGF0YWRpcn0vbG9jYWxlJworICBBQ19TVUJTVChbbG9jYWxlZGlyXSkKKworICBkbmwgU3VwcG9ydCBmb3IgQU1fWEdFVFRFWFRfT1BUSU9OLgorICB0ZXN0IC1uICIke1hHRVRURVhUX0VYVFJBX09QVElPTlMrc2V0fSIgfHwgWEdFVFRFWFRfRVhUUkFfT1BUSU9OUz0KKyAgQUNfU1VCU1QoW1hHRVRURVhUX0VYVFJBX09QVElPTlNdKQorCisgIEFDX0NPTkZJR19DT01NQU5EUyhbcG8tZGlyZWN0b3JpZXNdLCBbWworICAgIGZvciBhY19maWxlIGluICRDT05GSUdfRklMRVM7IGRvCisgICAgICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iCisgICAgICBjYXNlICIkYWNfZmlsZSIgaW4KKyAgICAgICAgKjoqKSBhY19maWxlPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJTouKiUlJ2AgOzsKKyAgICAgIGVzYWMKKyAgICAgICMgUE8gZGlyZWN0b3JpZXMgaGF2ZSBhIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBmcm9tIE1ha2VmaWxlLmluLmluLgorICAgICAgY2FzZSAiJGFjX2ZpbGUiIGluICovTWFrZWZpbGUuaW4pCisgICAgICAgICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLgorICAgICAgICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCisgICAgICAgIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyInxzZWQgJ3MlXlwuLyUlJ2AKKyAgICAgICAgYWNfZG90cz1gZWNobyAiJGFjX2Rpcl9zdWZmaXgifHNlZCAncyUvW14vXSolLi4vJWcnYAorICAgICAgICAjIEluIGF1dG9jb25mLTIuMTMgaXQgaXMgY2FsbGVkICRhY19naXZlbl9zcmNkaXIuCisgICAgICAgICMgSW4gYXV0b2NvbmYtMi41MCBpdCBpcyBjYWxsZWQgJHNyY2Rpci4KKyAgICAgICAgdGVzdCAtbiAiJGFjX2dpdmVuX3NyY2RpciIgfHwgYWNfZ2l2ZW5fc3JjZGlyPSIkc3JjZGlyIgorICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorICAgICAgICAgIC4pICB0b3Bfc3JjZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2AgOzsKKyAgICAgICAgICAvKikgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgICAgICAgICAqKSAgdG9wX3NyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyIiA7OworICAgICAgICBlc2FjCisgICAgICAgICMgVHJlYXQgYSBkaXJlY3RvcnkgYXMgYSBQTyBkaXJlY3RvcnkgaWYgYW5kIG9ubHkgaWYgaXQgaGFzIGEKKyAgICAgICAgIyBQT1RGSUxFUy5pbiBmaWxlLiBUaGlzIGFsbG93cyBwYWNrYWdlcyB0byBoYXZlIG11bHRpcGxlIFBPCisgICAgICAgICMgZGlyZWN0b3JpZXMgdW5kZXIgZGlmZmVyZW50IG5hbWVzIG9yIGluIGRpZmZlcmVudCBsb2NhdGlvbnMuCisgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiI7IHRoZW4KKyAgICAgICAgICBybSAtZiAiJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICBndF90YWI9YHByaW50ZiAnXHQnYAorICAgICAgICAgIGNhdCAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIiB8IHNlZCAtZSAiL14jL2QiIC1lICIvXlsgJHtndF90YWJ9XSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgorICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKKyAgICAgICAgICAjIEFMTF9MSU5HVUFTLCBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTIGRlcGVuZAorICAgICAgICAgICMgb24gJGFjX2RpciBidXQgZG9uJ3QgZGVwZW5kIG9uIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAjIHBhcmFtZXRlcnMuCisgICAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCisgICAgICAgICAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgorICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCisgICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbm1lbnQgZnJvbSBhdXRvbWFrZSA8IDEuNS4KKyAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKKyAgICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSIkUE9NQUtFRklMRURFUFMgTElOR1VBUyIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyB3YXMgZ2l2ZW4gaW4gY29uZmlndXJlLmluLgorICAgICAgICAgICAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ25tZW50IGZyb20gYXV0b21ha2UgPCAxLjUuCisgICAgICAgICAgICBldmFsICdBTExfTElOR1VBUycnPSRPQlNPTEVURV9BTExfTElOR1VBUycKKyAgICAgICAgICBmaQorICAgICAgICAgICMgQ29tcHV0ZSBQT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykucG8pCisgICAgICAgICAgIyBDb21wdXRlIFVQREFURVBPRklMRVMKKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLnBvLXVwZGF0ZSkKKyAgICAgICAgICAjIENvbXB1dGUgRFVNTVlQT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5ub3ApCisgICAgICAgICAgIyBDb21wdXRlIEdNT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykuZ21vKQorICAgICAgICAgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisgICAgICAgICAgICAuKSBzcmNkaXJwcmU9IDs7CisgICAgICAgICAgICAqKSBzcmNkaXJwcmU9JyQoc3JjZGlyKS8nIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIFBPRklMRVM9CisgICAgICAgICAgVVBEQVRFUE9GSUxFUz0KKyAgICAgICAgICBEVU1NWVBPRklMRVM9CisgICAgICAgICAgR01PRklMRVM9CisgICAgICAgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgICAgICAgUE9GSUxFUz0iJFBPRklMRVMgJHNyY2RpcnByZSRsYW5nLnBvIgorICAgICAgICAgICAgVVBEQVRFUE9GSUxFUz0iJFVQREFURVBPRklMRVMgJGxhbmcucG8tdXBkYXRlIgorICAgICAgICAgICAgRFVNTVlQT0ZJTEVTPSIkRFVNTVlQT0ZJTEVTICRsYW5nLm5vcCIKKyAgICAgICAgICAgIEdNT0ZJTEVTPSIkR01PRklMRVMgJHNyY2RpcnByZSRsYW5nLmdtbyIKKyAgICAgICAgICBkb25lCisgICAgICAgICAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBMSU5HVUFTCisgICAgICAgICAgIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgICBJTlNUX0xJTkdVQVM9CisgICAgICAgICAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgZm9yIHByZXNlbnRsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgICAgICAgICAgdXNlaXQ9bm8KKyAgICAgICAgICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRMSU5HVUFTIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmb3IgZGVzaXJlZGxhbmcgaW4gJGRlc2lyZWRsYW5ndWFnZXM7IGRvCisgICAgICAgICAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKKyAgICAgICAgICAgICAgICAjICAgYS4gZXF1YWwgdG8gcHJlc2VudGxhbmcsIG9yCisgICAgICAgICAgICAgICAgIyAgIGIuIGEgdmFyaWFudCBvZiBwcmVzZW50bGFuZyAoYmVjYXVzZSBpbiB0aGlzIGNhc2UsCisgICAgICAgICAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgIyAgICAgIHdoaWNoIGFyZSBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZGVzaXJlZGxhbmcgY2F0YWxvZykuCisgICAgICAgICAgICAgICAgY2FzZSAiJGRlc2lyZWRsYW5nIiBpbgorICAgICAgICAgICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgIElOU1RfTElOR1VBUz0iJElOU1RfTElOR1VBUyAkcHJlc2VudGxhbmciCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgICBDQVRBTE9HUz0KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkSU5TVF9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgZm9yIGxhbmcgaW4gJElOU1RfTElOR1VBUzsgZG8KKyAgICAgICAgICAgICAgQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZy5nbW8iCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9NYWtlZmlsZSIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9NYWtlZmlsZSIKKyAgICAgICAgICBzZWQgLWUgIi9eUE9URklMRVMgPS9yICRhY19kaXIvUE9URklMRVMiIC1lICIvXiMgTWFrZXZhcnMvciAkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTWFrZXZhcnMiIC1lICJzfEBQT0ZJTEVTQHwkUE9GSUxFU3xnIiAtZSAic3xAVVBEQVRFUE9GSUxFU0B8JFVQREFURVBPRklMRVN8ZyIgLWUgInN8QERVTU1ZUE9GSUxFU0B8JERVTU1ZUE9GSUxFU3xnIiAtZSAic3xAR01PRklMRVNAfCRHTU9GSUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xAUE9NQUtFRklMRURFUFNAfCRQT01BS0VGSUxFREVQU3xnIiAiJGFjX2Rpci9NYWtlZmlsZS5pbiIgPiAiJGFjX2Rpci9NYWtlZmlsZSIKKyAgICAgICAgICBmb3IgZiBpbiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyIi9SdWxlcy0qOyBkbworICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCisgICAgICAgICAgICAgIGNhc2UgIiRmIiBpbgorICAgICAgICAgICAgICAgICoub3JpZyB8ICouYmFrIHwgKn4pIDs7CisgICAgICAgICAgICAgICAgKikgY2F0ICIkZiIgPj4gIiRhY19kaXIvTWFrZWZpbGUiIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZXNhYworICAgIGRvbmVdXSwKKyAgIFsjIENhcHR1cmUgdGhlIHZhbHVlIG9mIG9ic29sZXRlIEFMTF9MSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlCisgICAgIyBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTLCBDQVRBTE9HUy4gQnV0IGhpZGUgaXQKKyAgICAjIGZyb20gYXV0b21ha2UgPCAxLjUuCisgICAgZXZhbCAnT0JTT0xFVEVfQUxMX0xJTkdVQVMnJz0iJEFMTF9MSU5HVUFTIicKKyAgICAjIENhcHR1cmUgdGhlIHZhbHVlIG9mIExJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUgQ0FUQUxPR1MuCisgICAgTElOR1VBUz0iJHtMSU5HVUFTLSVVTlNFVCV9IgorICAgXSkKK10pCisKK2RubCBQb3N0cHJvY2Vzc2VzIGEgTWFrZWZpbGUgaW4gYSBkaXJlY3RvcnkgY29udGFpbmluZyBQTyBmaWxlcy4KK0FDX0RFRlVOKFtBTV9QT1NUUFJPQ0VTU19QT19NQUtFRklMRV0sCitbCisgICMgV2hlbiB0aGlzIGNvZGUgaXMgcnVuLCBpbiBjb25maWcuc3RhdHVzLCB0d28gdmFyaWFibGVzIGhhdmUgYWxyZWFkeSBiZWVuCisgICMgc2V0OgorICAjIC0gT0JTT0xFVEVfQUxMX0xJTkdVQVMgaXMgdGhlIHZhbHVlIG9mIExJTkdVQVMgc2V0IGluIGNvbmZpZ3VyZS5pbiwKKyAgIyAtIExJTkdVQVMgaXMgdGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMSU5HVUFTIGF0IGNvbmZpZ3VyZQorICAjICAgdGltZS4KKworY2hhbmdlcXVvdGUoLClkbmwKKyAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCisgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKKyAgYWNfZGlyX3N1ZmZpeD0vYGVjaG8gIiRhY19kaXIifHNlZCAncyVeXC4vJSUnYAorICBhY19kb3RzPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCJ8c2VkICdzJS9bXi9dKiUuLi8lZydgCisgICMgSW4gYXV0b2NvbmYtMi4xMyBpdCBpcyBjYWxsZWQgJGFjX2dpdmVuX3NyY2Rpci4KKyAgIyBJbiBhdXRvY29uZi0yLjUwIGl0IGlzIGNhbGxlZCAkc3JjZGlyLgorICB0ZXN0IC1uICIkYWNfZ2l2ZW5fc3JjZGlyIiB8fCBhY19naXZlbl9zcmNkaXI9IiRzcmNkaXIiCisgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisgICAgLikgIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYCA7OworICAgIC8qKSB0b3Bfc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7OworICAgICopICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7CisgIGVzYWMKKworICAjIEZpbmQgYSB3YXkgdG8gZWNobyBzdHJpbmdzIHdpdGhvdXQgaW50ZXJwcmV0aW5nIGJhY2tzbGFzaC4KKyAgaWYgdGVzdCAiWGAoZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KKyAgICBndF9lY2hvPSdlY2hvJworICBlbHNlCisgICAgaWYgdGVzdCAiWGAocHJpbnRmICclc1xuJyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KKyAgICAgIGd0X2VjaG89J3ByaW50ZiAlc1xuJworICAgIGVsc2UKKyAgICAgIGVjaG9fZnVuYyAoKSB7CisgICAgICAgIGNhdCA8PEVPVAorJCoKK0VPVAorICAgICAgfQorICAgICAgZ3RfZWNobz0nZWNob19mdW5jJworICAgIGZpCisgIGZpCisKKyAgIyBBIHNlZCBzY3JpcHQgdGhhdCBleHRyYWN0cyB0aGUgdmFsdWUgb2YgVkFSSUFCTEUgZnJvbSBhIE1ha2VmaWxlLgorICB0YWI9YHByaW50ZiAnXHQnYAorICBzZWRfeF92YXJpYWJsZT0nCisjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCit4CitzL1AvUC8KK3gKK3RhCisjIFllcyBpdCB3YXMgZW1wdHkuIExvb2sgaWYgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgdmFyaWFibGUgZGVmaW5pdGlvbi4KKy9eWyciJHt0YWJ9IicgXSpWQVJJQUJMRVsnIiR7dGFifSInIF0qPS97CisgICMgU2VlbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KKyAgcy9eWyciJHt0YWJ9IicgXSpWQVJJQUJMRVsnIiR7dGFifSInIF0qPS8vCisgIGJhCit9CitiZAorOmEKKyMgSGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyBhIGxpbmUgZnJvbSB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KKyMgUmVtb3ZlIGNvbW1lbnQsIG1vcmUgcHJlY2lzZWx5IHJlcGxhY2UgaXQgd2l0aCBhIHNwYWNlLgorcy8jLiokLyAvCisjIFNlZSBpZiB0aGUgbGluZSBlbmRzIGluIGEgYmFja3NsYXNoLgordGIKKzpiCitzL1xcJC8vCisjIFByaW50IHRoZSBsaW5lLCB3aXRob3V0IHRoZSB0cmFpbGluZyBiYWNrc2xhc2guCitwCit0YworIyBUaGVyZSB3YXMgbm8gdHJhaWxpbmcgYmFja3NsYXNoLiBUaGUgZW5kIG9mIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGlzCisjIHJlYWNoZWQuIENsZWFyIHRoZSBob2xkIHNwYWNlLgorcy9eLiokLy8KK3gKK2JkCis6YworIyBBIHRyYWlsaW5nIGJhY2tzbGFzaCBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGNvbnRpbnVlcyBpbiB0aGUKKyMgbmV4dCBsaW5lLiBQdXQgYSBub25lbXB0eSBzdHJpbmcgaW50byB0aGUgaG9sZCBzcGFjZSB0byBpbmRpY2F0ZSB0aGlzLgorcy9eLiokL1AvCit4Cis6ZAorJworY2hhbmdlcXVvdGUoWyxdKWRubAorCisgICMgU2V0IFBPVEZJTEVTIHRvIHRoZSB2YWx1ZSBvZiB0aGUgTWFrZWZpbGUgdmFyaWFibGUgUE9URklMRVMuCisgIHNlZF94X1BPVEZJTEVTPWAkZ3RfZWNobyAiJHNlZF94X3ZhcmlhYmxlIiB8IHNlZCAtZSAnL14gKiMvZCcgLWUgJ3MvVkFSSUFCTEUvUE9URklMRVMvZydgCisgIFBPVEZJTEVTPWBzZWQgLW4gLWUgIiRzZWRfeF9QT1RGSUxFUyIgPCAiJGFjX2ZpbGUiYAorICAjIENvbXB1dGUgUE9URklMRVNfREVQUyBhcworICAjICAgJChmb3JlYWNoIGZpbGUsICQoUE9URklMRVMpLCAkKHRvcF9zcmNkaXIpLyQoZmlsZSkpCisgIFBPVEZJTEVTX0RFUFM9CisgIGZvciBmaWxlIGluICRQT1RGSUxFUzsgZG8KKyAgICBQT1RGSUxFU19ERVBTPSIkUE9URklMRVNfREVQUyAiJyQodG9wX3NyY2RpcikvJyIkZmlsZSIKKyAgZG9uZQorICBQT01BS0VGSUxFREVQUz0iIgorCisgIGlmIHRlc3QgLW4gIiRPQlNPTEVURV9BTExfTElOR1VBUyI7IHRoZW4KKyAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgorICBmaQorICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyI7IHRoZW4KKyAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgorICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCisgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgorICBlbHNlCisgICAgIyBTZXQgQUxMX0xJTkdVQVMgdG8gdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSBMSU5HVUFTLgorICAgIHNlZF94X0xJTkdVQVM9YCRndF9lY2hvICIkc2VkX3hfdmFyaWFibGUiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9MSU5HVUFTL2cnYAorICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1uIC1lICIkc2VkX3hfTElOR1VBUyIgPCAiJGFjX2ZpbGUiYAorICBmaQorICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbm1lbnQgZnJvbSBhdXRvbWFrZSA8IDEuNS4KKyAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kQUxMX0xJTkdVQVNfJworICAjIENvbXB1dGUgUE9GSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5wbykKKyAgIyBDb21wdXRlIFVQREFURVBPRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCisgICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5ub3ApCisgICMgQ29tcHV0ZSBHTU9GSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pCisgICMgQ29tcHV0ZSBQUk9QRVJUSUVTRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJCh0b3Bfc3JjZGlyKS8kKERPTUFJTilfJChsYW5nKS5wcm9wZXJ0aWVzKQorICAjIENvbXB1dGUgQ0xBU1NGSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHRvcF9zcmNkaXIpLyQoRE9NQUlOKV8kKGxhbmcpLmNsYXNzKQorICAjIENvbXB1dGUgUU1GSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5xbSkKKyAgIyBDb21wdXRlIE1TR0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGZyb2IgJChsYW5nKSkubXNnKQorICAjIENvbXB1dGUgUkVTT1VSQ0VTRExMRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQoZnJvYiAkKGxhbmcpKS8kKERPTUFJTikucmVzb3VyY2VzLmRsbCkKKyAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKyAgICAuKSBzcmNkaXJwcmU9IDs7CisgICAgKikgc3JjZGlycHJlPSckKHNyY2RpcikvJyA7OworICBlc2FjCisgIFBPRklMRVM9CisgIFVQREFURVBPRklMRVM9CisgIERVTU1ZUE9GSUxFUz0KKyAgR01PRklMRVM9CisgIFBST1BFUlRJRVNGSUxFUz0KKyAgQ0xBU1NGSUxFUz0KKyAgUU1GSUxFUz0KKyAgTVNHRklMRVM9CisgIFJFU09VUkNFU0RMTEZJTEVTPQorICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgUE9GSUxFUz0iJFBPRklMRVMgJHNyY2RpcnByZSRsYW5nLnBvIgorICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKKyAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9wIgorICAgIEdNT0ZJTEVTPSIkR01PRklMRVMgJHNyY2RpcnByZSRsYW5nLmdtbyIKKyAgICBQUk9QRVJUSUVTRklMRVM9IiRQUk9QRVJUSUVTRklMRVMgXCQodG9wX3NyY2RpcikvXCQoRE9NQUlOKV8kbGFuZy5wcm9wZXJ0aWVzIgorICAgIENMQVNTRklMRVM9IiRDTEFTU0ZJTEVTIFwkKHRvcF9zcmNkaXIpL1wkKERPTUFJTilfJGxhbmcuY2xhc3MiCisgICAgUU1GSUxFUz0iJFFNRklMRVMgJHNyY2RpcnByZSRsYW5nLnFtIgorICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCisgICAgTVNHRklMRVM9IiRNU0dGSUxFUyAkc3JjZGlycHJlJGZyb2JiZWRsYW5nLm1zZyIKKyAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZycgLWUgJ3MvXnNyLUNTL3NyLVNQLycgLWUgJ3MvQGxhdGluJC8tTGF0bi8nIC1lICdzL0BjeXJpbGxpYyQvLUN5cmwvJyAtZSAncy9ec3ItU1AkL3NyLVNQLUxhdG4vJyAtZSAncy9edXotVVokL3V6LVVaLUxhdG4vJ2AKKyAgICBSRVNPVVJDRVNETExGSUxFUz0iJFJFU09VUkNFU0RMTEZJTEVTICRzcmNkaXJwcmUkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsIgorICBkb25lCisgICMgQ0FUQUxPR1MgZGVwZW5kcyBvbiBib3RoICRhY19kaXIgYW5kIHRoZSB1c2VyJ3MgTElOR1VBUworICAjIGVudmlyb25tZW50IHZhcmlhYmxlLgorICBJTlNUX0xJTkdVQVM9CisgIGlmIHRlc3QgLW4gIiRBTExfTElOR1VBUyI7IHRoZW4KKyAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgdXNlaXQ9bm8KKyAgICAgIGlmIHRlc3QgIiVVTlNFVCUiICE9ICIkTElOR1VBUyI7IHRoZW4KKyAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCisgICAgICBlbHNlCisgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKKyAgICAgIGZpCisgICAgICBmb3IgZGVzaXJlZGxhbmcgaW4gJGRlc2lyZWRsYW5ndWFnZXM7IGRvCisgICAgICAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCisgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKKyAgICAgICAgIyAgIGIuIGEgdmFyaWFudCBvZiBwcmVzZW50bGFuZyAoYmVjYXVzZSBpbiB0aGlzIGNhc2UsCisgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcworICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KKyAgICAgICAgY2FzZSAiJGRlc2lyZWRsYW5nIiBpbgorICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKKyAgICAgICAgZXNhYworICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KKyAgICAgICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFuZyIKKyAgICAgIGZpCisgICAgZG9uZQorICBmaQorICBDQVRBTE9HUz0KKyAgSkFWQUNBVEFMT0dTPQorICBRVENBVEFMT0dTPQorICBUQ0xDQVRBTE9HUz0KKyAgQ1NIQVJQQ0FUQUxPR1M9CisgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCisgICAgZm9yIGxhbmcgaW4gJElOU1RfTElOR1VBUzsgZG8KKyAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgorICAgICAgSkFWQUNBVEFMT0dTPSIkSkFWQUNBVEFMT0dTIFwkKERPTUFJTilfJGxhbmcucHJvcGVydGllcyIKKyAgICAgIFFUQ0FUQUxPR1M9IiRRVENBVEFMT0dTICRsYW5nLnFtIgorICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKyAgICAgIFRDTENBVEFMT0dTPSIkVENMQ0FUQUxPR1MgJGZyb2JiZWRsYW5nLm1zZyIKKyAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL18vLS9nJyAtZSAncy9ec3ItQ1Mvc3ItU1AvJyAtZSAncy9AbGF0aW4kLy1MYXRuLycgLWUgJ3MvQGN5cmlsbGljJC8tQ3lybC8nIC1lICdzL15zci1TUCQvc3ItU1AtTGF0bi8nIC1lICdzL151ei1VWiQvdXotVVotTGF0bi8nYAorICAgICAgQ1NIQVJQQ0FUQUxPR1M9IiRDU0hBUlBDQVRBTE9HUyAkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsIgorICAgIGRvbmUKKyAgZmkKKworICBzZWQgLWUgInN8QFBPVEZJTEVTX0RFUFNAfCRQT1RGSUxFU19ERVBTfGciIC1lICJzfEBQT0ZJTEVTQHwkUE9GSUxFU3xnIiAtZSAic3xAVVBEQVRFUE9GSUxFU0B8JFVQREFURVBPRklMRVN8ZyIgLWUgInN8QERVTU1ZUE9GSUxFU0B8JERVTU1ZUE9GSUxFU3xnIiAtZSAic3xAR01PRklMRVNAfCRHTU9GSUxFU3xnIiAtZSAic3xAUFJPUEVSVElFU0ZJTEVTQHwkUFJPUEVSVElFU0ZJTEVTfGciIC1lICJzfEBDTEFTU0ZJTEVTQHwkQ0xBU1NGSUxFU3xnIiAtZSAic3xAUU1GSUxFU0B8JFFNRklMRVN8ZyIgLWUgInN8QE1TR0ZJTEVTQHwkTVNHRklMRVN8ZyIgLWUgInN8QFJFU09VUkNFU0RMTEZJTEVTQHwkUkVTT1VSQ0VTRExMRklMRVN8ZyIgLWUgInN8QENBVEFMT0dTQHwkQ0FUQUxPR1N8ZyIgLWUgInN8QEpBVkFDQVRBTE9HU0B8JEpBVkFDQVRBTE9HU3xnIiAtZSAic3xAUVRDQVRBTE9HU0B8JFFUQ0FUQUxPR1N8ZyIgLWUgInN8QFRDTENBVEFMT0dTQHwkVENMQ0FUQUxPR1N8ZyIgLWUgInN8QENTSEFSUENBVEFMT0dTQHwkQ1NIQVJQQ0FUQUxPR1N8ZyIgLWUgJ3MsXiNkaXN0ZGlyOixkaXN0ZGlyOiwnIDwgIiRhY19maWxlIiA+ICIkYWNfZmlsZS50bXAiCisgIHRhYj1gcHJpbnRmICdcdCdgCisgIGlmIGdyZXAgLWwgJ0BUQ0xDQVRBTE9HU0AnICIkYWNfZmlsZSIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAjIEFkZCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUgZm9ybXVsYXRlZCBhcyBhIHNpbXBsZSBzdWZmaXggcnVsZS4KKyAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAorICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCiskZnJvYmJlZGxhbmcubXNnOiAkbGFuZy5wbworJHt0YWJ9QGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8iOyBcCiske3RhYn1cJChNU0dGTVQpIC1jIC0tdGNsIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9CitFT0YKKyAgICBkb25lCisgIGZpCisgIGlmIGdyZXAgLWwgJ0BDU0hBUlBDQVRBTE9HU0AnICIkYWNfZmlsZSIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAjIEFkZCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUgZm9ybXVsYXRlZCBhcyBhIHNpbXBsZSBzdWZmaXggcnVsZS4KKyAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZycgLWUgJ3MvXnNyLUNTL3NyLVNQLycgLWUgJ3MvQGxhdGluJC8tTGF0bi8nIC1lICdzL0BjeXJpbGxpYyQvLUN5cmwvJyAtZSAncy9ec3ItU1AkL3NyLVNQLUxhdG4vJyAtZSAncy9edXotVVokL3V6LVVaLUxhdG4vJ2AKKyAgICAgIGNhdCA+PiAiJGFjX2ZpbGUudG1wIiA8PEVPRgorJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbDogJGxhbmcucG8KKyR7dGFifUBlY2hvICJcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yIFwkKERPTUFJTikiOyBcCiske3RhYn1cJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgIlwkKERPTUFJTikiIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorRU9GCisgICAgZG9uZQorICBmaQorICBpZiB0ZXN0IC1uICIkUE9NQUtFRklMRURFUFMiOyB0aGVuCisgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCitNYWtlZmlsZTogJFBPTUFLRUZJTEVERVBTCitFT0YKKyAgZmkKKyAgbXYgIiRhY19maWxlLnRtcCIgIiRhY19maWxlIgorXSkKKworZG5sIEluaXRpYWxpemVzIHRoZSBhY2N1bXVsYXRvciB1c2VkIGJ5IEFNX1hHRVRURVhUX09QVElPTi4KK0FDX0RFRlVOKFtBTV9YR0VUVEVYVF9PUFRJT05fSU5JVF0sCitbCisgIFhHRVRURVhUX0VYVFJBX09QVElPTlM9CitdKQorCitkbmwgUmVnaXN0ZXJzIGFuIG9wdGlvbiB0byBiZSBwYXNzZWQgdG8geGdldHRleHQgaW4gdGhlIHBvIHN1YmRpcmVjdG9yeS4KK0FDX0RFRlVOKFtBTV9YR0VUVEVYVF9PUFRJT05dLAorWworICBBQ19SRVFVSVJFKFtBTV9YR0VUVEVYVF9PUFRJT05fSU5JVF0pCisgIFhHRVRURVhUX0VYVFJBX09QVElPTlM9IiRYR0VUVEVYVF9FWFRSQV9PUFRJT05TICQxIgorXSkKKworIyBwcmludGYtcG9zaXgubTQgc2VyaWFsIDYgKGdldHRleHQtMC4xOC4yKQorZG5sIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KK2RubCBUZXN0IHdoZXRoZXIgdGhlIHByaW50ZigpIGZ1bmN0aW9uIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyB3aXRoCitkbmwgcG9zaXRpb25zLgorCitBQ19ERUZVTihbZ3RfUFJJTlRGX1BPU0lYXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHByaW50ZigpIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5nc10sCisgICAgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXgsCisgICAgWworICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKy8qIFRoZSBzdHJpbmcgIiUyJGQgJTEkZCIsIHdpdGggZG9sbGFyIGNoYXJhY3RlcnMgcHJvdGVjdGVkIGZyb20gdGhlIHNoZWxsJ3MKKyAgIGRvbGxhciBleHBhbnNpb24gKHBvc3NpYmx5IGFuIGF1dG9jb25mIGJ1ZykuICAqLworc3RhdGljIGNoYXIgZm9ybWF0W10gPSB7ICclJywgJzInLCAnJCcsICdkJywgJyAnLCAnJScsICcxJywgJyQnLCAnZCcsICdcMCcgfTsKK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworaW50IG1haW4gKCkKK3sKKyAgc3ByaW50ZiAoYnVmLCBmb3JtYXQsIDMzLCA1NSk7CisgIHJldHVybiAoc3RyY21wIChidWYsICI1NSAzMyIpICE9IDApOworfV1dKV0sCisgICAgICAgIFtndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD15ZXNdLAorICAgICAgICBbZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9bm9dLAorICAgICAgICBbCisgICAgICAgICAgQUNfRUdSRVBfQ1BQKFtub3Rwb3NpeF0sIFsKKyNpZiBkZWZpbmVkIF9fTmV0QlNEX18gfHwgZGVmaW5lZCBfX0JFT1NfXyB8fCBkZWZpbmVkIF9NU0NfVkVSIHx8IGRlZmluZWQgX19NSU5HVzMyX18gfHwgZGVmaW5lZCBfX0NZR1dJTl9fCisgIG5vdHBvc2l4CisjZW5kaWYKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBbZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9Imd1ZXNzaW5nIG5vIl0sCisgICAgICAgICAgICBbZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9Imd1ZXNzaW5nIHllcyJdKQorICAgICAgICBdKQorICAgIF0pCisgIGNhc2UgJGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4IGluCisgICAgKnllcykKKyAgICAgIEFDX0RFRklORShbSEFWRV9QT1NJWF9QUklOVEZdLCBbMV0sCisgICAgICAgIFtEZWZpbmUgaWYgeW91ciBwcmludGYoKSBmdW5jdGlvbiBzdXBwb3J0cyBmb3JtYXQgc3RyaW5ncyB3aXRoIHBvc2l0aW9ucy5dKQorICAgICAgOzsKKyAgZXNhYworXSkKKworIyBwcm9ndGVzdC5tNCBzZXJpYWwgNyAoZ2V0dGV4dC0wLjE4LjIpCitkbmwgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDMsIDIwMDUsIDIwMDgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorZG5sCitkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CitkbmwgZnVuY3Rpb25hbGl0eS4KK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCitkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCitkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK2RubCBBdXRob3JzOgorZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTYuCisKK0FDX1BSRVJFUShbMi41MF0pCisKKyMgU2VhcmNoIHBhdGggZm9yIGEgcHJvZ3JhbSB3aGljaCBwYXNzZXMgdGhlIGdpdmVuIHRlc3QuCisKK2RubCBBTV9QQVRIX1BST0dfV0lUSF9URVNUKFZBUklBQkxFLCBQUk9HLVRPLUNIRUNLLUZPUiwKK2RubCAgIFRFU1QtUEVSRk9STUVELU9OLUZPVU5EX1BST0dSQU0gWywgVkFMVUUtSUYtTk9ULUZPVU5EIFssIFBBVEhdXSkKK0FDX0RFRlVOKFtBTV9QQVRIX1BST0dfV0lUSF9URVNUXSwKK1sKKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgIyBEZXRlcm1pbmUgUEFUSF9TRVBBUkFUT1IgYnkgdHJ5aW5nIHRvIGZpbmQgL2Jpbi9zaCBpbiBhIFBBVEggd2hpY2gKKyAgIyBjb250YWlucyBvbmx5IC9iaW4uIE5vdGUgdGhhdCBrc2ggbG9va3MgYWxzbyBhdCB0aGUgRlBBVEggdmFyaWFibGUsCisgICMgc28gd2UgaGF2ZSB0byBzZXQgdGhhdCBhcyB3ZWxsIGZvciB0aGUgdGVzdC4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSBcCisgICAgJiYgeyAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSBcCisgICAgICAgICAgIHx8IFBBVEhfU0VQQVJBVE9SPSc7JworICAgICAgIH0KK2ZpCisKKyMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAorIyBhcyBzeXN0ZW1zIG1heSB1c2UgbWV0aG9kcyBvdGhlciB0aGFuIG1vZGUgYml0cyB0byBkZXRlcm1pbmUgZXhlY3V0YWJpbGl0eS4KK2NhdCA+Y29uZiQkLmZpbGUgPDxfQVNFT0YKKyMhIC9iaW4vc2gKK2V4aXQgMAorX0FTRU9GCitjaG1vZCAreCBjb25mJCQuZmlsZQoraWYgdGVzdCAteCBjb25mJCQuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC14IgorZWxzZQorICBhY19leGVjdXRhYmxlX3A9InRlc3QgLWYiCitmaQorcm0gLWYgY29uZiQkLmZpbGUKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkMiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJDI7IGFjX3dvcmQ9WyRdMgorQUNfTVNHX0NIRUNLSU5HKFtmb3IgJGFjX3dvcmRdKQorQUNfQ0FDSEVfVkFMKFthY19jdl9wYXRoXyQxXSwKK1tjYXNlICJbJF0kMSIgaW4KKyAgW1tcXC9dXSogfCA/OltbXFwvXV0qKQorICAgIGFjX2N2X3BhdGhfJDE9IlskXSQxIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgICA7OworICAqKQorICAgIGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gaWZlbHNlKFskNV0sICwgJFBBVEgsIFskNV0pOyBkbworICAgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICAgIGlmICRhY19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgICAgICAgZWNobyAiJGFzX21lOiB0cnlpbmcgJGFjX2Rpci8kYWNfd29yZC4uLiIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICAgIGlmIFskM107IHRoZW4KKyAgICAgICAgICAgIGFjX2N2X3BhdGhfJDE9IiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgICAgICAgICBicmVhayAyCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCitkbmwgSWYgbm8gNHRoIGFyZyBpcyBnaXZlbiwgbGVhdmUgdGhlIGNhY2hlIHZhcmlhYmxlIHVuc2V0LAorZG5sIHNvIEFDX1BBVEhfUFJPR1Mgd2lsbCBrZWVwIGxvb2tpbmcuCitpZmVsc2UoWyQ0XSwgLCAsIFsgIHRlc3QgLXogIlskXWFjX2N2X3BhdGhfJDEiICYmIGFjX2N2X3BhdGhfJDE9IiQ0IgorXSlkbmwKKyAgICA7OworZXNhY10pZG5sCiskMT0iJGFjX2N2X3BhdGhfJDEiCitpZiB0ZXN0IGlmZWxzZShbJDRdLCAsIFstbiAiWyRdJDEiXSwgWyJbJF0kMSIgIT0gIiQ0Il0pOyB0aGVuCisgIEFDX01TR19SRVNVTFQoWyRdWyQxXSkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChbbm9dKQorZmkKK0FDX1NVQlNUKFskMV0pZG5sCitdKQorCisjIHNpemVfbWF4Lm00IHNlcmlhbCAxMAorZG5sIENvcHlyaWdodCAoQykgMjAwMywgMjAwNS0yMDA2LCAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19ERUZVTihbZ2xfU0laRV9NQVhdLAorWworICBBQ19DSEVDS19IRUFERVJTKFtzdGRpbnQuaF0pCisgIGRubCBGaXJzdCB0ZXN0IHdoZXRoZXIgdGhlIHN5c3RlbSBhbHJlYWR5IGhhcyBTSVpFX01BWC4KKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBTSVpFX01BWF0sIFtnbF9jdl9zaXplX21heF0sIFsKKyAgICBnbF9jdl9zaXplX21heD0KKyAgICBBQ19FR1JFUF9DUFAoW0ZvdW5kIGl0XSwgWworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmIEhBVkVfU1RESU5UX0gKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmZGVmIFNJWkVfTUFYCitGb3VuZCBpdAorI2VuZGlmCitdLCBbZ2xfY3Zfc2l6ZV9tYXg9eWVzXSkKKyAgICBpZiB0ZXN0IC16ICIkZ2xfY3Zfc2l6ZV9tYXgiOyB0aGVuCisgICAgICBkbmwgRGVmaW5lIGl0IG91cnNlbHZlcy4gSGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgdHlwZSAnc2l6ZV90JyBpcyBub3Qgd2lkZXIKKyAgICAgIGRubCB0aGFuIHRoZSB0eXBlICd1bnNpZ25lZCBsb25nJy4gVHJ5IGhhcmQgdG8gZmluZCBhIGRlZmluaXRpb24gdGhhdCBjYW4KKyAgICAgIGRubCBiZSB1c2VkIGluIGEgcHJlcHJvY2Vzc29yICNpZiwgaS5lLiBkb2Vzbid0IGNvbnRhaW4gYSBjYXN0LgorICAgICAgQUNfQ09NUFVURV9JTlQoW3NpemVfdF9iaXRzX21pbnVzXzFdLCBbc2l6ZW9mIChzaXplX3QpICogQ0hBUl9CSVQgLSAxXSwKKyAgICAgICAgWyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD5dLCBbc2l6ZV90X2JpdHNfbWludXNfMT1dKQorICAgICAgQUNfQ09NUFVURV9JTlQoW2ZpdHNfaW5fdWludF0sIFtzaXplb2YgKHNpemVfdCkgPD0gc2l6ZW9mICh1bnNpZ25lZCBpbnQpXSwKKyAgICAgICAgWyNpbmNsdWRlIDxzdGRkZWYuaD5dLCBbZml0c19pbl91aW50PV0pCisgICAgICBpZiB0ZXN0IC1uICIkc2l6ZV90X2JpdHNfbWludXNfMSIgJiYgdGVzdCAtbiAiJGZpdHNfaW5fdWludCI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAkZml0c19pbl91aW50ID0gMTsgdGhlbgorICAgICAgICAgIGRubCBFdmVuIHRob3VnaCBTSVpFX01BWCBmaXRzIGluIGFuIHVuc2lnbmVkIGludCwgaXQgbXVzdCBiZSBvZiB0eXBlCisgICAgICAgICAgZG5sICd1bnNpZ25lZCBsb25nJyBpZiB0aGUgdHlwZSAnc2l6ZV90JyBpcyB0aGUgc2FtZSBhcyAndW5zaWduZWQgbG9uZycuCisgICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgICAgW1sjaW5jbHVkZSA8c3RkZGVmLmg+CisgICAgICAgICAgICAgICAgIGV4dGVybiBzaXplX3QgZm9vOworICAgICAgICAgICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBmb287CisgICAgICAgICAgICAgICBdXSwKKyAgICAgICAgICAgICAgIFtbXV0pXSwKKyAgICAgICAgICAgIFtmaXRzX2luX3VpbnQ9MF0pCisgICAgICAgIGZpCisgICAgICAgIGRubCBXZSBjYW5ub3QgdXNlICdleHByJyB0byBzaW1wbGlmeSB0aGlzIGV4cHJlc3Npb24sIGJlY2F1c2UgJ2V4cHInCisgICAgICAgIGRubCB3b3JrcyBvbmx5IHdpdGggJ2xvbmcnIGludGVnZXJzIGluIHRoZSBob3N0IGVudmlyb25tZW50LCB3aGlsZSB3ZQorICAgICAgICBkbmwgbWlnaHQgYmUgY3Jvc3MtY29tcGlsaW5nIGZyb20gYSAzMi1iaXQgcGxhdGZvcm0gdG8gYSA2NC1iaXQgcGxhdGZvcm0uCisgICAgICAgIGlmIHRlc3QgJGZpdHNfaW5fdWludCA9IDE7IHRoZW4KKyAgICAgICAgICBnbF9jdl9zaXplX21heD0iKCgoMVUgPDwgJHNpemVfdF9iaXRzX21pbnVzXzEpIC0gMSkgKiAyICsgMSkiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBnbF9jdl9zaXplX21heD0iKCgoMVVMIDw8ICRzaXplX3RfYml0c19taW51c18xKSAtIDEpICogMiArIDEpIgorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICBkbmwgU2hvdWxkbid0IGhhcHBlbiwgYnV0IHdobyBrbm93cy4uLgorICAgICAgICBnbF9jdl9zaXplX21heD0nKChzaXplX3QpfihzaXplX3QpMCknCisgICAgICBmaQorICAgIGZpCisgIF0pCisgIGlmIHRlc3QgIiRnbF9jdl9zaXplX21heCIgIT0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtTSVpFX01BWF0sIFskZ2xfY3Zfc2l6ZV9tYXhdLAorICAgICAgW0RlZmluZSBhcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0eXBlICdzaXplX3QnLCBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgZGVmaW5lIGl0Ll0pCisgIGZpCisgIGRubCBEb24ndCByZWRlZmluZSBTSVpFX01BWCBpbiBjb25maWcuaCBpZiBjb25maWcuaCBpcyByZS1pbmNsdWRlZCBhZnRlcgorICBkbmwgPHN0ZGludC5oPi4gUmVtZW1iZXIgdGhhdCB0aGUgI3VuZGVmIGluIEFIX1ZFUkJBVElNIGdldHMgcmVwbGFjZWQgd2l0aAorICBkbmwgI2RlZmluZSBieSBBQ19ERUZJTkVfVU5RVU9URUQuCisgIEFIX1ZFUkJBVElNKFtTSVpFX01BWF0sCitbLyogRGVmaW5lIGFzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHR5cGUgJ3NpemVfdCcsIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBkZWZpbmUKKyAgIGl0LiAqLworI2lmbmRlZiBTSVpFX01BWAorIyB1bmRlZiBTSVpFX01BWAorI2VuZGlmXSkKK10pCisKK2RubCBBdXRvY29uZiA+PSAyLjYxIGhhcyBBQ19DT01QVVRFX0lOVCBidWlsdC1pbi4KK2RubCBSZW1vdmUgdGhpcyB3aGVuIHdlIGNhbiBhc3N1bWUgYXV0b2NvbmYgPj0gMi42MS4KK200X2lmZGVmKFtBQ19DT01QVVRFX0lOVF0sIFtdLCBbCisgIEFDX0RFRlVOKFtBQ19DT01QVVRFX0lOVF0sIFtfQUNfQ09NUFVURV9JTlQoWyQyXSxbJDFdLFskM10sWyQ0XSldKQorXSkKKworIyBzdGRpbnRfaC5tNCBzZXJpYWwgOQorZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDA0LCAyMDA2LCAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisKKyMgRGVmaW5lIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYIGlmIDxzdGRpbnQuaD4gZXhpc3RzLAorIyBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4KKworQUNfREVGVU4oW2dsX0FDX0hFQURFUl9TVERJTlRfSF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkaW50LmhdLCBbZ2xfY3ZfaGVhZGVyX3N0ZGludF9oXSwKKyAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICBbWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAgICAgICAgICNpbmNsdWRlIDxzdGRpbnQuaD5dXSwKKyAgICAgICAgICBbW3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7IHJldHVybiAhaTtdXSldLAorICAgICAgIFtnbF9jdl9oZWFkZXJfc3RkaW50X2g9eWVzXSwKKyAgICAgICBbZ2xfY3ZfaGVhZGVyX3N0ZGludF9oPW5vXSldKQorICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfc3RkaW50X2ggPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW0hBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYXSwgWzFdLAorICAgICAgW0RlZmluZSBpZiA8c3RkaW50Lmg+IGV4aXN0cywgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sCisgICAgICAgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4gXSkKKyAgZmkKK10pCisKKyMgdGhyZWFkbGliLm00IHNlcmlhbCAxMCAoZ2V0dGV4dC0wLjE4LjIpCitkbmwgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitkbmwgZ2xfVEhSRUFETElCCitkbmwgLS0tLS0tLS0tLS0tCitkbmwgVGVzdHMgZm9yIGEgbXVsdGl0aHJlYWRpbmcgbGlicmFyeSB0byBiZSB1c2VkLgorZG5sIElmIHRoZSBjb25maWd1cmUuYWMgY29udGFpbnMgYSBkZWZpbml0aW9uIG9mIHRoZSBnbF9USFJFQURMSUJfREVGQVVMVF9OTworZG5sIChpdCBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgdGhlIGludm9jYXRpb24gb2YgZ2xfVEhSRUFETElCX0VBUkxZISksIHRoZW4gdGhlCitkbmwgZGVmYXVsdCBpcyAnbm8nLCBvdGhlcndpc2UgaXQgaXMgc3lzdGVtIGRlcGVuZGVudC4gSW4gYm90aCBjYXNlcywgdGhlIHVzZXIKK2RubCBjYW4gY2hhbmdlIHRoZSBjaG9pY2UgdGhyb3VnaCB0aGUgb3B0aW9ucyAtLWVuYWJsZS10aHJlYWRzPWNob2ljZSBvcgorZG5sIC0tZGlzYWJsZS10aHJlYWRzLgorZG5sIERlZmluZXMgYXQgbW9zdCBvbmUgb2YgdGhlIG1hY3JvcyBVU0VfUE9TSVhfVEhSRUFEUywgVVNFX1NPTEFSSVNfVEhSRUFEUywKK2RubCBVU0VfUFRIX1RIUkVBRFMsIFVTRV9XSU5ET1dTX1RIUkVBRFMKK2RubCBTZXRzIHRoZSB2YXJpYWJsZXMgTElCVEhSRUFEIGFuZCBMVExJQlRIUkVBRCB0byB0aGUgbGlua2VyIG9wdGlvbnMgZm9yIHVzZQorZG5sIGluIGEgTWFrZWZpbGUgKExJQlRIUkVBRCBmb3IgdXNlIHdpdGhvdXQgbGlidG9vbCwgTFRMSUJUSFJFQUQgZm9yIHVzZSB3aXRoCitkbmwgbGlidG9vbCkuCitkbmwgU2V0cyB0aGUgdmFyaWFibGVzIExJQk1VTFRJVEhSRUFEIGFuZCBMVExJQk1VTFRJVEhSRUFEIHNpbWlsYXJseSwgZm9yCitkbmwgcHJvZ3JhbXMgdGhhdCByZWFsbHkgbmVlZCBtdWx0aXRocmVhZCBmdW5jdGlvbmFsaXR5LiBUaGUgZGlmZmVyZW5jZQorZG5sIGJldHdlZW4gTElCVEhSRUFEIGFuZCBMSUJNVUxUSVRIUkVBRCBpcyB0aGF0IG9uIHBsYXRmb3JtcyBzdXBwb3J0aW5nIHdlYWsKK2RubCBzeW1ib2xzLCB0eXBpY2FsbHkgTElCVEhSRUFEPSIiIHdoZXJlYXMgTElCTVVMVElUSFJFQUQ9Ii1scHRocmVhZCIuCitkbmwgQWRkcyB0byBDUFBGTEFHUyB0aGUgZmxhZyAtRF9SRUVOVFJBTlQgb3IgLURfVEhSRUFEX1NBRkUgaWYgbmVlZGVkIGZvcgorZG5sIG11bHRpdGhyZWFkLXNhZmUgcHJvZ3JhbXMuCisKK0FDX0RFRlVOKFtnbF9USFJFQURMSUJfRUFSTFldLAorWworICBBQ19SRVFVSVJFKFtnbF9USFJFQURMSUJfRUFSTFlfQk9EWV0pCitdKQorCitkbmwgVGhlIGd1dHMgb2YgZ2xfVEhSRUFETElCX0VBUkxZLiBOZWVkcyB0byBiZSBleHBhbmRlZCBvbmx5IG9uY2UuCisKK0FDX0RFRlVOKFtnbF9USFJFQURMSUJfRUFSTFlfQk9EWV0sCitbCisgIGRubCBPcmRlcmluZyBjb25zdHJhaW50czogVGhpcyBtYWNybyBtb2RpZmllcyBDUFBGTEFHUyBpbiBhIHdheSB0aGF0CisgIGRubCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YgdGhlIGF1dG9jb25mIHRlc3RzIHRoYXQgdGVzdCBmb3IgKl91bmxvY2tlZAorICBkbmwgZGVjbGFyYXRpb25zLCBvbiBBSVggNSBhdCBsZWFzdC4gVGhlcmVmb3JlIGl0IG11c3QgY29tZSBlYXJseS4KKyAgQUNfQkVGT1JFKFskMF0sIFtnbF9GVU5DX0dMSUJDX1VOTE9DS0VEX0lPXSlkbmwKKyAgQUNfQkVGT1JFKFskMF0sIFtnbF9BUkdQXSlkbmwKKworICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisgIGRubCBfR05VX1NPVVJDRSBpcyBuZWVkZWQgZm9yIHB0aHJlYWRfcndsb2NrX3Qgb24gZ2xpYmMgc3lzdGVtcy4KKyAgZG5sIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyB3YXMgaW50cm9kdWNlZCBpbiBhdXRvY29uZiAyLjYwIGFuZCBvYnNvbGV0ZXMKKyAgZG5sIEFDX0dOVV9TT1VSQ0UuCisgIG00X2lmZGVmKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorICAgIFtBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKV0sCisgICAgW0FDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKV0pCisgIGRubCBDaGVjayBmb3IgbXVsdGl0aHJlYWRpbmcuCisgIG00X2lmZGVmKFtnbF9USFJFQURMSUJfREVGQVVMVF9OT10sCisgICAgW200X2RpdmVydF90ZXh0KFtERUZBVUxUU10sIFtnbF91c2VfdGhyZWFkc19kZWZhdWx0PW5vXSldLAorICAgIFttNF9kaXZlcnRfdGV4dChbREVGQVVMVFNdLCBbZ2xfdXNlX3RocmVhZHNfZGVmYXVsdD1dKV0pCisgIEFDX0FSR19FTkFCTEUoW3RocmVhZHNdLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXRocmVhZHM9e3Bvc2l4fHNvbGFyaXN8cHRofHdpbmRvd3N9XSwgW3NwZWNpZnkgbXVsdGl0aHJlYWRpbmcgQVBJXSltNF9pZmRlZihbZ2xfVEhSRUFETElCX0RFRkFVTFRfTk9dLCBbXSwgWworQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS10aHJlYWRzXSwgW2J1aWxkIHdpdGhvdXQgbXVsdGl0aHJlYWQgc2FmZXR5XSldKSwKKyAgICBbZ2xfdXNlX3RocmVhZHM9JGVuYWJsZXZhbF0sCisgICAgW2lmIHRlc3QgLW4gIiRnbF91c2VfdGhyZWFkc19kZWZhdWx0IjsgdGhlbgorICAgICAgIGdsX3VzZV90aHJlYWRzPSIkZ2xfdXNlX3RocmVhZHNfZGVmYXVsdCIKKyAgICAgZWxzZQorY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgIGRubCBEaXNhYmxlIG11bHRpdGhyZWFkaW5nIGJ5IGRlZmF1bHQgb24gT1NGLzEsIGJlY2F1c2UgaXQgaW50ZXJmZXJlcworICAgICAgICAgZG5sIHdpdGggZm9yaygpL2V4ZWMoKTogV2hlbiBtc2dleGVjIGlzIGxpbmtlZCB3aXRoIC1scHRocmVhZCwgaXRzCisgICAgICAgICBkbmwgY2hpbGQgcHJvY2VzcyBnZXRzIGFuIGVuZGxlc3Mgc2VnbWVudGF0aW9uIGZhdWx0IGluc2lkZSBleGVjdnAoKS4KKyAgICAgICAgIGRubCBEaXNhYmxlIG11bHRpdGhyZWFkaW5nIGJ5IGRlZmF1bHQgb24gQ3lnd2luIDEuNS54LCBiZWNhdXNlIGl0IGhhcworICAgICAgICAgZG5sIGJ1Z3MgdGhhdCBsZWFkIHRvIGVuZGxlc3MgbG9vcHMgb3IgY3Jhc2hlcy4gU2VlCisgICAgICAgICBkbmwgPGh0dHA6Ly9jeWd3aW4uY29tL21sL2N5Z3dpbi8yMDA5LTA4L21zZzAwMjgzLmh0bWw+LgorICAgICAgICAgb3NmKikgZ2xfdXNlX3RocmVhZHM9bm8gOzsKKyAgICAgICAgIGN5Z3dpbiopCisgICAgICAgICAgICAgICBjYXNlIGB1bmFtZSAtcmAgaW4KKyAgICAgICAgICAgICAgICAgMS5bMC01XS4qKSBnbF91c2VfdGhyZWFkcz1ubyA7OworICAgICAgICAgICAgICAgICAqKSAgICAgICAgIGdsX3VzZV90aHJlYWRzPXllcyA7OworICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICopICAgIGdsX3VzZV90aHJlYWRzPXllcyA7OworICAgICAgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgZmkKKyAgICBdKQorICBpZiB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0geWVzIHx8IHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSBwb3NpeDsgdGhlbgorICAgICMgRm9yIHVzaW5nIDxwdGhyZWFkLmg+OgorICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgb3NmKikKKyAgICAgICAgIyBPbiBPU0YvMSwgdGhlIGNvbXBpbGVyIG5lZWRzIHRoZSBmbGFnIC1EX1JFRU5UUkFOVCBzbyB0aGF0IGl0CisgICAgICAgICMgZ3Jva3MgPHB0aHJlYWQuaD4uIGNjIGFsc28gdW5kZXJzdGFuZHMgdGhlIGZsYWcgLXB0aHJlYWQsIGJ1dAorICAgICAgICAjIHdlIGRvbid0IHVzZSBpdCBiZWNhdXNlIDEuIGdjYy0yLjk1IGRvZXNuJ3QgdW5kZXJzdGFuZCAtcHRocmVhZCwKKyAgICAgICAgIyAyLiBwdXR0aW5nIGEgZmxhZyBpbnRvIENQUEZMQUdTIHRoYXQgaGFzIGFuIGVmZmVjdCBvbiB0aGUgbGlua2VyCisgICAgICAgICMgY2F1c2VzIHRoZSBBQ19MSU5LX0lGRUxTRSB0ZXN0IGJlbG93IHRvIHN1Y2NlZWQgdW5leHBlY3RlZGx5LAorICAgICAgICAjIGxlYWRpbmcgdG8gd3JvbmcgdmFsdWVzIG9mIExJQlRIUkVBRCBhbmQgTFRMSUJUSFJFQUQuCisgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfUkVFTlRSQU5UIgorICAgICAgICA7OworICAgIGVzYWMKKyAgICAjIFNvbWUgc3lzdGVtcyBvcHRpbWl6ZSBmb3Igc2luZ2xlLXRocmVhZGVkIHByb2dyYW1zIGJ5IGRlZmF1bHQsIGFuZAorICAgICMgbmVlZCBzcGVjaWFsIGZsYWdzIHRvIGRpc2FibGUgdGhlc2Ugb3B0aW1pemF0aW9ucy4gRm9yIGV4YW1wbGUsIHRoZQorICAgICMgZGVmaW5pdGlvbiBvZiAnZXJybm8nIGluIDxlcnJuby5oPi4KKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgIGFpeCogfCBmcmVlYnNkKikgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9USFJFQURfU0FGRSIgOzsKKyAgICAgIHNvbGFyaXMqKSBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1JFRU5UUkFOVCIgOzsKKyAgICBlc2FjCisgIGZpCitdKQorCitkbmwgVGhlIGd1dHMgb2YgZ2xfVEhSRUFETElCLiBOZWVkcyB0byBiZSBleHBhbmRlZCBvbmx5IG9uY2UuCisKK0FDX0RFRlVOKFtnbF9USFJFQURMSUJfQk9EWV0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1RIUkVBRExJQl9FQVJMWV9CT0RZXSkKKyAgZ2xfdGhyZWFkc19hcGk9bm9uZQorICBMSUJUSFJFQUQ9CisgIExUTElCVEhSRUFEPQorICBMSUJNVUxUSVRIUkVBRD0KKyAgTFRMSUJNVUxUSVRIUkVBRD0KKyAgaWYgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiAhPSBubzsgdGhlbgorICAgIGRubCBDaGVjayB3aGV0aGVyIHRoZSBjb21waWxlciBhbmQgbGlua2VyIHN1cHBvcnQgd2VhayBkZWNsYXJhdGlvbnMuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaW1wb3J0ZWQgc3ltYm9scyBjYW4gYmUgZGVjbGFyZWQgd2Vha10sCisgICAgICBbZ2xfY3ZfaGF2ZV93ZWFrXSwKKyAgICAgIFtnbF9jdl9oYXZlX3dlYWs9bm8KKyAgICAgICBkbmwgRmlyc3QsIHRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgYWNjZXB0cyBpdCBzeW50YWN0aWNhbGx5LgorICAgICAgIEFDX0xJTktfSUZFTFNFKAorICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgIFtbZXh0ZXJuIHZvaWQgeHl6enkgKCk7CisjcHJhZ21hIHdlYWsgeHl6enldXSwKKyAgICAgICAgICAgIFtbeHl6enkoKTtdXSldLAorICAgICAgICAgW2dsX2N2X2hhdmVfd2Vhaz1tYXliZV0pCisgICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV93ZWFrID0gbWF5YmU7IHRoZW4KKyAgICAgICAgIGRubCBTZWNvbmQsIHRlc3Qgd2hldGhlciBpdCBhY3R1YWxseSB3b3Jrcy4gT24gQ3lnd2luIDEuNy4yLCB3aXRoCisgICAgICAgICBkbmwgZ2NjIDQuMywgc3ltYm9scyBkZWNsYXJlZCB3ZWFrIGFsd2F5cyBldmFsdWF0ZSB0byB0aGUgYWRkcmVzcyAwLgorICAgICAgICAgQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgICAgW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNwcmFnbWEgd2VhayBmcHV0cworaW50IG1haW4gKCkKK3sKKyAgcmV0dXJuIChmcHV0cyA9PSBOVUxMKTsKK31dXSldLAorICAgICAgICAgICBbZ2xfY3ZfaGF2ZV93ZWFrPXllc10sCisgICAgICAgICAgIFtnbF9jdl9oYXZlX3dlYWs9bm9dLAorICAgICAgICAgICBbZG5sIFdoZW4gY3Jvc3MtY29tcGlsaW5nLCBhc3N1bWUgdGhhdCBvbmx5IEVMRiBwbGF0Zm9ybXMgc3VwcG9ydAorICAgICAgICAgICAgZG5sIHdlYWsgc3ltYm9scy4KKyAgICAgICAgICAgIEFDX0VHUkVQX0NQUChbRXh0ZW5zaWJsZSBMaW5raW5nIEZvcm1hdF0sCisgICAgICAgICAgICAgIFsjaWZkZWYgX19FTEZfXworICAgICAgICAgICAgICAgRXh0ZW5zaWJsZSBMaW5raW5nIEZvcm1hdAorICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgIFtnbF9jdl9oYXZlX3dlYWs9Imd1ZXNzaW5nIHllcyJdLAorICAgICAgICAgICAgICBbZ2xfY3ZfaGF2ZV93ZWFrPSJndWVzc2luZyBubyJdKQorICAgICAgICAgICBdKQorICAgICAgIGZpCisgICAgICBdKQorICAgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSB5ZXMgfHwgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHBvc2l4OyB0aGVuCisgICAgICAjIE9uIE9TRi8xLCB0aGUgY29tcGlsZXIgbmVlZHMgdGhlIGZsYWcgLXB0aHJlYWQgb3IgLURfUkVFTlRSQU5UIHNvIHRoYXQKKyAgICAgICMgaXQgZ3Jva3MgPHB0aHJlYWQuaD4uIEl0J3MgYWRkZWQgYWJvdmUsIGluIGdsX1RIUkVBRExJQl9FQVJMWV9CT0RZLgorICAgICAgQUNfQ0hFQ0tfSEVBREVSKFtwdGhyZWFkLmhdLAorICAgICAgICBbZ2xfaGF2ZV9wdGhyZWFkX2g9eWVzXSwgW2dsX2hhdmVfcHRocmVhZF9oPW5vXSkKKyAgICAgIGlmIHRlc3QgIiRnbF9oYXZlX3B0aHJlYWRfaCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIyBPdGhlciBwb3NzaWJsZSB0ZXN0czoKKyAgICAgICAgIyAgIC1scHRocmVhZHMgKEZTVSB0aHJlYWRzLCBQQ3RocmVhZHMpCisgICAgICAgICMgICAtbGd0aHJlYWRzCisgICAgICAgIGdsX2hhdmVfcHRocmVhZD0KKyAgICAgICAgIyBUZXN0IHdoZXRoZXIgYm90aCBwdGhyZWFkX211dGV4X2xvY2sgYW5kIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgZXhpc3QKKyAgICAgICAgIyBpbiBsaWJjLiBJUklYIDYuNSBoYXMgdGhlIGZpcnN0IG9uZSBpbiBib3RoIGxpYmMgYW5kIGxpYnB0aHJlYWQsIGJ1dAorICAgICAgICAjIHRoZSBzZWNvbmQgb25lIG9ubHkgaW4gbGlicHRocmVhZCwgYW5kIGxvY2suYyBuZWVkcyBpdC4KKyAgICAgICAgQUNfTElOS19JRkVMU0UoCisgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgICBbWyNpbmNsdWRlIDxwdGhyZWFkLmg+XV0sCisgICAgICAgICAgICAgW1twdGhyZWFkX211dGV4X2xvY2soKHB0aHJlYWRfbXV0ZXhfdCopMCk7CisgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4YXR0cl9pbml0KChwdGhyZWFkX211dGV4YXR0cl90KikwKTtdXSldLAorICAgICAgICAgIFtnbF9oYXZlX3B0aHJlYWQ9eWVzXSkKKyAgICAgICAgIyBUZXN0IGZvciBsaWJwdGhyZWFkIGJ5IGxvb2tpbmcgZm9yIHB0aHJlYWRfa2lsbC4gKE5vdCBwdGhyZWFkX3NlbGYsCisgICAgICAgICMgc2luY2UgaXQgaXMgZGVmaW5lZCBhcyBhIG1hY3JvIG9uIE9TRi8xLikKKyAgICAgICAgaWYgdGVzdCAtbiAiJGdsX2hhdmVfcHRocmVhZCI7IHRoZW4KKyAgICAgICAgICAjIFRoZSBwcm9ncmFtIGxpbmtzIGZpbmUgd2l0aG91dCBsaWJwdGhyZWFkLiBCdXQgaXQgbWF5IGFjdHVhbGx5CisgICAgICAgICAgIyBuZWVkIHRvIGxpbmsgd2l0aCBsaWJwdGhyZWFkIGluIG9yZGVyIHRvIGNyZWF0ZSBtdWx0aXBsZSB0aHJlYWRzLgorICAgICAgICAgIEFDX0NIRUNLX0xJQihbcHRocmVhZF0sIFtwdGhyZWFkX2tpbGxdLAorICAgICAgICAgICAgW0xJQk1VTFRJVEhSRUFEPS1scHRocmVhZCBMVExJQk1VTFRJVEhSRUFEPS1scHRocmVhZAorICAgICAgICAgICAgICMgT24gU29sYXJpcyBhbmQgSFAtVVgsIG1vc3QgcHRocmVhZCBmdW5jdGlvbnMgZXhpc3QgYWxzbyBpbiBsaWJjLgorICAgICAgICAgICAgICMgVGhlcmVmb3JlIHB0aHJlYWRfaW5fdXNlKCkgbmVlZHMgdG8gYWN0dWFsbHkgdHJ5IHRvIGNyZWF0ZSBhCisgICAgICAgICAgICAgIyB0aHJlYWQ6IHB0aHJlYWRfY3JlYXRlIGZyb20gbGliYyB3aWxsIGZhaWwsIHdoZXJlYXMKKyAgICAgICAgICAgICAjIHB0aHJlYWRfY3JlYXRlIHdpbGwgYWN0dWFsbHkgY3JlYXRlIGEgdGhyZWFkLgorICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgc29sYXJpcyogfCBocHV4KikKKyAgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtQVEhSRUFEX0lOX1VTRV9ERVRFQ1RJT05fSEFSRF0sIFsxXSwKKyAgICAgICAgICAgICAgICAgICBbRGVmaW5lIGlmIHRoZSBwdGhyZWFkX2luX3VzZSgpIGRldGVjdGlvbiBpcyBoYXJkLl0pCisgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgXSkKKyAgICAgICAgZWxzZQorICAgICAgICAgICMgU29tZSBsaWJyYXJ5IGlzIG5lZWRlZC4gVHJ5IGxpYnB0aHJlYWQgYW5kIGxpYmNfci4KKyAgICAgICAgICBBQ19DSEVDS19MSUIoW3B0aHJlYWRdLCBbcHRocmVhZF9raWxsXSwKKyAgICAgICAgICAgIFtnbF9oYXZlX3B0aHJlYWQ9eWVzCisgICAgICAgICAgICAgTElCVEhSRUFEPS1scHRocmVhZCBMVExJQlRIUkVBRD0tbHB0aHJlYWQKKyAgICAgICAgICAgICBMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWQgTFRMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWRdKQorICAgICAgICAgIGlmIHRlc3QgLXogIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCisgICAgICAgICAgICAjIEZvciBGcmVlQlNEIDQuCisgICAgICAgICAgICBBQ19DSEVDS19MSUIoW2Nfcl0sIFtwdGhyZWFkX2tpbGxdLAorICAgICAgICAgICAgICBbZ2xfaGF2ZV9wdGhyZWFkPXllcworICAgICAgICAgICAgICAgTElCVEhSRUFEPS1sY19yIExUTElCVEhSRUFEPS1sY19yCisgICAgICAgICAgICAgICBMSUJNVUxUSVRIUkVBRD0tbGNfciBMVExJQk1VTFRJVEhSRUFEPS1sY19yXSkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0IC1uICIkZ2xfaGF2ZV9wdGhyZWFkIjsgdGhlbgorICAgICAgICAgIGdsX3RocmVhZHNfYXBpPXBvc2l4CisgICAgICAgICAgQUNfREVGSU5FKFtVU0VfUE9TSVhfVEhSRUFEU10sIFsxXSwKKyAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIFBPU0lYIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgY2FuIGJlIHVzZWQuXSkKKyAgICAgICAgICBpZiB0ZXN0IC1uICIkTElCTVVMVElUSFJFQUQiIHx8IHRlc3QgLW4gIiRMVExJQk1VTFRJVEhSRUFEIjsgdGhlbgorICAgICAgICAgICAgaWYgY2FzZSAiJGdsX2N2X2hhdmVfd2VhayIgaW4gKnllcykgdHJ1ZTs7ICopIGZhbHNlOzsgZXNhYzsgdGhlbgorICAgICAgICAgICAgICBBQ19ERUZJTkUoW1VTRV9QT1NJWF9USFJFQURTX1dFQUtdLCBbMV0sCisgICAgICAgICAgICAgICAgW0RlZmluZSBpZiByZWZlcmVuY2VzIHRvIHRoZSBQT1NJWCBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IHNob3VsZCBiZSBtYWRlIHdlYWsuXSkKKyAgICAgICAgICAgICAgTElCVEhSRUFEPQorICAgICAgICAgICAgICBMVExJQlRIUkVBRD0KKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgICBpZiB0ZXN0IC16ICIkZ2xfaGF2ZV9wdGhyZWFkIjsgdGhlbgorICAgICAgaWYgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHllcyB8fCB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0gc29sYXJpczsgdGhlbgorICAgICAgICBnbF9oYXZlX3NvbGFyaXN0aHJlYWQ9CisgICAgICAgIGdsX3NhdmVfTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9IiRMSUJTIC1sdGhyZWFkIgorICAgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgIFtbCisjaW5jbHVkZSA8dGhyZWFkLmg+CisjaW5jbHVkZSA8c3luY2guaD4KKyAgICAgICAgICAgICBdXSwKKyAgICAgICAgICAgICBbW3Rocl9zZWxmKCk7XV0pXSwKKyAgICAgICAgICBbZ2xfaGF2ZV9zb2xhcmlzdGhyZWFkPXllc10pCisgICAgICAgIExJQlM9IiRnbF9zYXZlX0xJQlMiCisgICAgICAgIGlmIHRlc3QgLW4gIiRnbF9oYXZlX3NvbGFyaXN0aHJlYWQiOyB0aGVuCisgICAgICAgICAgZ2xfdGhyZWFkc19hcGk9c29sYXJpcworICAgICAgICAgIExJQlRIUkVBRD0tbHRocmVhZAorICAgICAgICAgIExUTElCVEhSRUFEPS1sdGhyZWFkCisgICAgICAgICAgTElCTVVMVElUSFJFQUQ9IiRMSUJUSFJFQUQiCisgICAgICAgICAgTFRMSUJNVUxUSVRIUkVBRD0iJExUTElCVEhSRUFEIgorICAgICAgICAgIEFDX0RFRklORShbVVNFX1NPTEFSSVNfVEhSRUFEU10sIFsxXSwKKyAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIG9sZCBTb2xhcmlzIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgY2FuIGJlIHVzZWQuXSkKKyAgICAgICAgICBpZiBjYXNlICIkZ2xfY3ZfaGF2ZV93ZWFrIiBpbiAqeWVzKSB0cnVlOzsgKikgZmFsc2U7OyBlc2FjOyB0aGVuCisgICAgICAgICAgICBBQ19ERUZJTkUoW1VTRV9TT0xBUklTX1RIUkVBRFNfV0VBS10sIFsxXSwKKyAgICAgICAgICAgICAgW0RlZmluZSBpZiByZWZlcmVuY2VzIHRvIHRoZSBvbGQgU29sYXJpcyBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IHNob3VsZCBiZSBtYWRlIHdlYWsuXSkKKyAgICAgICAgICAgIExJQlRIUkVBRD0KKyAgICAgICAgICAgIExUTElCVEhSRUFEPQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHB0aDsgdGhlbgorICAgICAgZ2xfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgICAgQUNfTElCX0xJTktGTEFHUyhbcHRoXSkKKyAgICAgIGdsX2hhdmVfcHRoPQorICAgICAgZ2xfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIExJQlM9IiRMSUJTICRMSUJQVEgiCisgICAgICBBQ19MSU5LX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxwdGguaD5dXSwgW1twdGhfc2VsZigpO11dKV0sCisgICAgICAgIFtnbF9oYXZlX3B0aD15ZXNdKQorICAgICAgTElCUz0iJGdsX3NhdmVfTElCUyIKKyAgICAgIGlmIHRlc3QgLW4gIiRnbF9oYXZlX3B0aCI7IHRoZW4KKyAgICAgICAgZ2xfdGhyZWFkc19hcGk9cHRoCisgICAgICAgIExJQlRIUkVBRD0iJExJQlBUSCIKKyAgICAgICAgTFRMSUJUSFJFQUQ9IiRMVExJQlBUSCIKKyAgICAgICAgTElCTVVMVElUSFJFQUQ9IiRMSUJUSFJFQUQiCisgICAgICAgIExUTElCTVVMVElUSFJFQUQ9IiRMVExJQlRIUkVBRCIKKyAgICAgICAgQUNfREVGSU5FKFtVU0VfUFRIX1RIUkVBRFNdLCBbMV0sCisgICAgICAgICAgW0RlZmluZSBpZiB0aGUgR05VIFB0aCBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IGNhbiBiZSB1c2VkLl0pCisgICAgICAgIGlmIHRlc3QgLW4gIiRMSUJNVUxUSVRIUkVBRCIgfHwgdGVzdCAtbiAiJExUTElCTVVMVElUSFJFQUQiOyB0aGVuCisgICAgICAgICAgaWYgY2FzZSAiJGdsX2N2X2hhdmVfd2VhayIgaW4gKnllcykgdHJ1ZTs7ICopIGZhbHNlOzsgZXNhYzsgdGhlbgorICAgICAgICAgICAgQUNfREVGSU5FKFtVU0VfUFRIX1RIUkVBRFNfV0VBS10sIFsxXSwKKyAgICAgICAgICAgICAgW0RlZmluZSBpZiByZWZlcmVuY2VzIHRvIHRoZSBHTlUgUHRoIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgc2hvdWxkIGJlIG1hZGUgd2Vhay5dKQorICAgICAgICAgICAgTElCVEhSRUFEPQorICAgICAgICAgICAgTFRMSUJUSFJFQUQ9CisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgQ1BQRkxBR1M9IiRnbF9zYXZlX0NQUEZMQUdTIgorICAgICAgZmkKKyAgICBmaQorICAgIGlmIHRlc3QgLXogIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCisgICAgICBjYXNlICIkZ2xfdXNlX3RocmVhZHMiIGluCisgICAgICAgIHllcyB8IHdpbmRvd3MgfCB3aW4zMikgIyBUaGUgJ3dpbjMyJyBpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgICBpZiB7IGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICBtaW5ndyopIHRydWU7OworICAgICAgICAgICAgICAgICAqKSBmYWxzZTs7CisgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgfTsgdGhlbgorICAgICAgICAgICAgZ2xfdGhyZWFkc19hcGk9d2luZG93cworICAgICAgICAgICAgQUNfREVGSU5FKFtVU0VfV0lORE9XU19USFJFQURTXSwgWzFdLAorICAgICAgICAgICAgICBbRGVmaW5lIGlmIHRoZSBuYXRpdmUgV2luZG93cyBtdWx0aXRocmVhZGluZyBBUEkgY2FuIGJlIHVzZWQuXSkKKyAgICAgICAgICBmaQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbXVsdGl0aHJlYWQgQVBJIHRvIHVzZV0pCisgIEFDX01TR19SRVNVTFQoWyRnbF90aHJlYWRzX2FwaV0pCisgIEFDX1NVQlNUKFtMSUJUSFJFQURdKQorICBBQ19TVUJTVChbTFRMSUJUSFJFQURdKQorICBBQ19TVUJTVChbTElCTVVMVElUSFJFQURdKQorICBBQ19TVUJTVChbTFRMSUJNVUxUSVRIUkVBRF0pCitdKQorCitBQ19ERUZVTihbZ2xfVEhSRUFETElCXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfVEhSRUFETElCX0VBUkxZXSkKKyAgQUNfUkVRVUlSRShbZ2xfVEhSRUFETElCX0JPRFldKQorXSkKKworCitkbmwgZ2xfRElTQUJMRV9USFJFQURTCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2V0cyB0aGUgZ2xfVEhSRUFETElCIGRlZmF1bHQgc28gdGhhdCB0aHJlYWRzIGFyZSBub3QgdXNlZCBieSBkZWZhdWx0LgorZG5sIFRoZSB1c2VyIGNhbiBzdGlsbCBvdmVycmlkZSBpdCBhdCBpbnN0YWxsYXRpb24gdGltZSwgYnkgdXNpbmcgdGhlCitkbmwgY29uZmlndXJlIG9wdGlvbiAnLS1lbmFibGUtdGhyZWFkcycuCisKK0FDX0RFRlVOKFtnbF9ESVNBQkxFX1RIUkVBRFNdLCBbCisgIG00X2RpdmVydF90ZXh0KFtJTklUX1BSRVBBUkVdLCBbZ2xfdXNlX3RocmVhZHNfZGVmYXVsdD1ub10pCitdKQorCisKK2RubCBTdXJ2ZXkgb2YgcGxhdGZvcm1zOgorZG5sCitkbmwgUGxhdGZvcm0gICAgICAgICAgIEF2YWlsYWJsZSAgQ29tcGlsZXIgICAgU3VwcG9ydHMgICB0ZXN0LWxvY2sKK2RubCAgICAgICAgICAgICAgICAgICAgZmxhdm91cnMgICBvcHRpb24gICAgICB3ZWFrICAgICAgIHJlc3VsdAorZG5sIC0tLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0gIC0tLS0tLS0tLSAgIC0tLS0tLS0tICAgLS0tLS0tLS0tCitkbmwgTGludXggMi40L2dsaWJjICAgIHBvc2l4ICAgICAgLWxwdGhyZWFkICAgICAgIFkgICAgICBPSworZG5sCitkbmwgR05VIEh1cmQvZ2xpYmMgICAgIHBvc2l4CitkbmwKK2RubCBGcmVlQlNEIDUuMyAgICAgICAgcG9zaXggICAgICAtbGNfciAgICAgICAgICAgWQorZG5sICAgICAgICAgICAgICAgICAgICBwb3NpeCAgICAgIC1sa3NlID8gICAgICAgICBZCitkbmwgICAgICAgICAgICAgICAgICAgIHBvc2l4ICAgICAgLWxwdGhyZWFkID8gICAgIFkKK2RubCAgICAgICAgICAgICAgICAgICAgcG9zaXggICAgICAtbHRociAgICAgICAgICAgWQorZG5sCitkbmwgRnJlZUJTRCA1LjIgICAgICAgIHBvc2l4ICAgICAgLWxjX3IgICAgICAgICAgIFkKK2RubCAgICAgICAgICAgICAgICAgICAgcG9zaXggICAgICAtbGtzZSAgICAgICAgICAgWQorZG5sICAgICAgICAgICAgICAgICAgICBwb3NpeCAgICAgIC1sdGhyICAgICAgICAgICBZCitkbmwKK2RubCBGcmVlQlNEIDQuMCw0LjEwICAgcG9zaXggICAgICAtbGNfciAgICAgICAgICAgWSAgICAgIE9LCitkbmwKK2RubCBOZXRCU0QgMS42ICAgICAgICAgLS0KK2RubAorZG5sIE9wZW5CU0QgMy40ICAgICAgICBwb3NpeCAgICAgIC1scHRocmVhZCAgICAgICBZICAgICAgT0sKK2RubAorZG5sIE1hYyBPUyBYIDEwLlsxMjNdICBwb3NpeCAgICAgIC1scHRocmVhZCAgICAgICBZICAgICAgT0sKK2RubAorZG5sIFNvbGFyaXMgNyw4LDkgICAgICBwb3NpeCAgICAgIC1scHRocmVhZCAgICAgICBZICAgICAgU29sIDcsODogMC4wOyBTb2wgOTogT0sKK2RubCAgICAgICAgICAgICAgICAgICAgc29sYXJpcyAgICAtbHRocmVhZCAgICAgICAgWSAgICAgIFNvbCA3LDg6IDAuMDsgU29sIDk6IE9LCitkbmwKK2RubCBIUC1VWCAxMSAgICAgICAgICAgcG9zaXggICAgICAtbHB0aHJlYWQgICAgICAgTiAoY2MpIE9LCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFkgKGdjYykKK2RubAorZG5sIElSSVggNi41ICAgICAgICAgICBwb3NpeCAgICAgIC1scHRocmVhZCAgICAgICBZICAgICAgMC41CitkbmwKK2RubCBBSVggNC4zLDUuMSAgICAgICAgcG9zaXggICAgICAtbHB0aHJlYWQgICAgICAgTiAgICAgIEFJWCA0OiAwLjU7IEFJWCA1OiBPSworZG5sCitkbmwgT1NGLzEgNC4wLDUuMSAgICAgIHBvc2l4ICAgICAgLXB0aHJlYWQgKGNjKSAgIE4gICAgICBPSworZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1scHRocmVhZCAoZ2NjKSBZCitkbmwKK2RubCBDeWd3aW4gICAgICAgICAgICAgcG9zaXggICAgICAtbHB0aHJlYWQgICAgICAgWSAgICAgIE9LCitkbmwKK2RubCBBbnkgb2YgdGhlIGFib3ZlICAgcHRoICAgICAgICAtbHB0aCAgICAgICAgICAgICAgICAgIDAuMAorZG5sCitkbmwgTWluZ3cgICAgICAgICAgICAgIHdpbmRvd3MgICAgICAgICAgICAgICAgICAgIE4gICAgICBPSworZG5sCitkbmwgQmVPUyA1ICAgICAgICAgICAgIC0tCitkbmwKK2RubCBUaGUgdGVzdC1sb2NrIHJlc3VsdCBzaG93cyB3aGF0IGhhcHBlbnMgaWYgaW4gdGVzdC1sb2NrLmMgRVhQTElDSVRfWUlFTEQgaXMKK2RubCB0dXJuZWQgb2ZmOgorZG5sICAgT0sgaWYgYWxsIHRocmVlIHRlc3RzIHRlcm1pbmF0ZSBPSywKK2RubCAgIDAuNSBpZiB0aGUgZmlyc3QgdGVzdCB0ZXJtaW5hdGVzIE9LIGJ1dCB0aGUgc2Vjb25kIG9uZSBsb29wcyBlbmRsZXNzbHksCitkbmwgICAwLjAgaWYgdGhlIGZpcnN0IHRlc3QgYWxyZWFkeSBsb29wcyBlbmRsZXNzbHkuCisKKyMgdWludG1heF90Lm00IHNlcmlhbCAxMgorZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDA0LCAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisKK0FDX1BSRVJFUShbMi4xM10pCisKKyMgRGVmaW5lIHVpbnRtYXhfdCB0byAndW5zaWduZWQgbG9uZycgb3IgJ3Vuc2lnbmVkIGxvbmcgbG9uZycKKyMgaWYgaXQgaXMgbm90IGFscmVhZHkgZGVmaW5lZCBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi4KKworQUNfREVGVU4oW2dsX0FDX1RZUEVfVUlOVE1BWF9UXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfQUNfSEVBREVSX0lOVFRZUEVTX0hdKQorICBBQ19SRVFVSVJFKFtnbF9BQ19IRUFERVJfU1RESU5UX0hdKQorICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IG5vICYmIHRlc3QgJGdsX2N2X2hlYWRlcl9zdGRpbnRfaCA9IG5vOyB0aGVuCisgICAgQUNfUkVRVUlSRShbQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UXSkKKyAgICB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQgPSB5ZXMgXAorICAgICAgJiYgYWNfdHlwZT0ndW5zaWduZWQgbG9uZyBsb25nJyBcCisgICAgICB8fCBhY190eXBlPSd1bnNpZ25lZCBsb25nJworICAgIEFDX0RFRklORV9VTlFVT1RFRChbdWludG1heF90XSwgWyRhY190eXBlXSwKKyAgICAgIFtEZWZpbmUgdG8gdW5zaWduZWQgbG9uZyBvciB1bnNpZ25lZCBsb25nIGxvbmcKKyAgICAgICBpZiA8c3RkaW50Lmg+IGFuZCA8aW50dHlwZXMuaD4gZG9uJ3QgZGVmaW5lLl0pCisgIGVsc2UKKyAgICBBQ19ERUZJTkUoW0hBVkVfVUlOVE1BWF9UXSwgWzFdLAorICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3VpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi5dKQorICBmaQorXSkKKworIyB2aXNpYmlsaXR5Lm00IHNlcmlhbCA1IChnZXR0ZXh0LTAuMTguMikKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMTAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKK2RubCBUZXN0cyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbgorZG5sIC1mdmlzaWJpbGl0eT1oaWRkZW4gYW5kIHRoZSBmdW5jdGlvbiBhbmQgdmFyaWFibGUgYXR0cmlidXRlcworZG5sIF9fYXR0cmlidXRlX18oKF9fdmlzaWJpbGl0eV9fKCJoaWRkZW4iKSkpIGFuZAorZG5sIF9fYXR0cmlidXRlX18oKF9fdmlzaWJpbGl0eV9fKCJkZWZhdWx0IikpKS4KK2RubCBEb2VzICpub3QqIHRlc3QgZm9yIF9fdmlzaWJpbGl0eV9fKCJwcm90ZWN0ZWQiKSAtIHdoaWNoIGhhcyB0cmlja3kKK2RubCBzZW1hbnRpY3MgKHNlZSB0aGUgJ3Zpc21haW4nIHRlc3QgaW4gZ2xpYmMpIGFuZCBkb2VzIG5vdCBleGlzdCBlLmcuIG9uCitkbmwgTWFjIE9TIFguCitkbmwgRG9lcyAqbm90KiB0ZXN0IGZvciBfX3Zpc2liaWxpdHlfXygiaW50ZXJuYWwiKSAtIHdoaWNoIGhhcyBwcm9jZXNzb3IKK2RubCBkZXBlbmRlbnQgc2VtYW50aWNzLgorZG5sIERvZXMgKm5vdCogdGVzdCBmb3IgI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGhpZGRlbikgLSB3aGljaCBpcworZG5sICJyZWFsbHkgb25seSByZWNvbW1lbmRlZCBmb3IgbGVnYWN5IGNvZGUiLgorZG5sIFNldCB0aGUgdmFyaWFibGUgQ0ZMQUdfVklTSUJJTElUWS4KK2RubCBEZWZpbmVzIGFuZCBzZXRzIHRoZSB2YXJpYWJsZSBIQVZFX1ZJU0lCSUxJVFkuCisKK0FDX0RFRlVOKFtnbF9WSVNJQklMSVRZXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIENGTEFHX1ZJU0lCSUxJVFk9CisgIEhBVkVfVklTSUJJTElUWT0wCisgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisgICAgZG5sIEZpcnN0LCBjaGVjayB3aGV0aGVyIC1XZXJyb3IgY2FuIGJlIGFkZGVkIHRvIHRoZSBjb21tYW5kIGxpbmUsIG9yCisgICAgZG5sIHdoZXRoZXIgaXQgbGVhZHMgdG8gYW4gZXJyb3IgYmVjYXVzZSBvZiBzb21lIG90aGVyIG9wdGlvbiB0aGF0IHRoZQorICAgIGRubCB1c2VyIGhhcyBwdXQgaW50byAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MuCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAtV2Vycm9yIG9wdGlvbiBpcyB1c2FibGVdKQorICAgIEFDX0NBQ0hFX1ZBTChbZ2xfY3ZfY2NfdmlzX3dlcnJvcl0sIFsKKyAgICAgIGdsX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IiCisgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbW11dKV0sCisgICAgICAgIFtnbF9jdl9jY192aXNfd2Vycm9yPXllc10sCisgICAgICAgIFtnbF9jdl9jY192aXNfd2Vycm9yPW5vXSkKKyAgICAgIENGTEFHUz0iJGdsX3NhdmVfQ0ZMQUdTIl0pCisgICAgQUNfTVNHX1JFU1VMVChbJGdsX2N2X2NjX3Zpc193ZXJyb3JdKQorICAgIGRubCBOb3cgY2hlY2sgd2hldGhlciB2aXNpYmlsaXR5IGRlY2xhcmF0aW9ucyBhcmUgc3VwcG9ydGVkLgorICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHNpbXBsZSB2aXNpYmlsaXR5IGRlY2xhcmF0aW9uc10pCisgICAgQUNfQ0FDSEVfVkFMKFtnbF9jdl9jY192aXNpYmlsaXR5XSwgWworICAgICAgZ2xfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICBDRkxBR1M9IiRDRkxBR1MgLWZ2aXNpYmlsaXR5PWhpZGRlbiIKKyAgICAgIGRubCBXZSB1c2UgdGhlIG9wdGlvbiAtV2Vycm9yIGFuZCBhIGZ1bmN0aW9uIGR1bW15ZnVuYywgYmVjYXVzZSBvbiBzb21lCisgICAgICBkbmwgcGxhdGZvcm1zIChDeWd3aW4gMS43KSB0aGUgdXNlIG9mIC1mdmlzaWJpbGl0eSB0cmlnZ2VycyBhIHdhcm5pbmcKKyAgICAgIGRubCAidmlzaWJpbGl0eSBhdHRyaWJ1dGUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGNvbmZpZ3VyYXRpb247IGlnbm9yZWQiCisgICAgICBkbmwgYXQgdGhlIGZpcnN0IGZ1bmN0aW9uIGRlZmluaXRpb24gaW4gZXZlcnkgY29tcGlsYXRpb24gdW5pdCwgYW5kIHdlCisgICAgICBkbmwgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIG9wdGlvbiBpbiB0aGlzIGNhc2UuCisgICAgICBpZiB0ZXN0ICRnbF9jdl9jY192aXNfd2Vycm9yID0geWVzOyB0aGVuCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIgorICAgICAgZmkKKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICBbW2V4dGVybiBfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiaGlkZGVuIikpKSBpbnQgaGlkZGVudmFyOworICAgICAgICAgICAgIGV4dGVybiBfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiZGVmYXVsdCIpKSkgaW50IGV4cG9ydGVkdmFyOworICAgICAgICAgICAgIGV4dGVybiBfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiaGlkZGVuIikpKSBpbnQgaGlkZGVuZnVuYyAodm9pZCk7CisgICAgICAgICAgICAgZXh0ZXJuIF9fYXR0cmlidXRlX18oKF9fdmlzaWJpbGl0eV9fKCJkZWZhdWx0IikpKSBpbnQgZXhwb3J0ZWRmdW5jICh2b2lkKTsKKyAgICAgICAgICAgICB2b2lkIGR1bW15ZnVuYyAodm9pZCkge30KKyAgICAgICAgICAgXV0sCisgICAgICAgICAgIFtbXV0pXSwKKyAgICAgICAgW2dsX2N2X2NjX3Zpc2liaWxpdHk9eWVzXSwKKyAgICAgICAgW2dsX2N2X2NjX3Zpc2liaWxpdHk9bm9dKQorICAgICAgQ0ZMQUdTPSIkZ2xfc2F2ZV9DRkxBR1MiXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskZ2xfY3ZfY2NfdmlzaWJpbGl0eV0pCisgICAgaWYgdGVzdCAkZ2xfY3ZfY2NfdmlzaWJpbGl0eSA9IHllczsgdGhlbgorICAgICAgQ0ZMQUdfVklTSUJJTElUWT0iLWZ2aXNpYmlsaXR5PWhpZGRlbiIKKyAgICAgIEhBVkVfVklTSUJJTElUWT0xCisgICAgZmkKKyAgZmkKKyAgQUNfU1VCU1QoW0NGTEFHX1ZJU0lCSUxJVFldKQorICBBQ19TVUJTVChbSEFWRV9WSVNJQklMSVRZXSkKKyAgQUNfREVGSU5FX1VOUVVPVEVEKFtIQVZFX1ZJU0lCSUxJVFldLCBbJEhBVkVfVklTSUJJTElUWV0sCisgICAgW0RlZmluZSB0byAxIG9yIDAsIGRlcGVuZGluZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyBzaW1wbGUgdmlzaWJpbGl0eSBkZWNsYXJhdGlvbnMuXSkKK10pCisKKyMgd2NoYXJfdC5tNCBzZXJpYWwgNCAoZ2V0dGV4dC0wLjE4LjIpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCitkbmwgVGVzdCB3aGV0aGVyIDxzdGRkZWYuaD4gaGFzIHRoZSAnd2NoYXJfdCcgdHlwZS4KK2RubCBQcmVyZXF1aXNpdGU6IEFDX1BST0dfQ0MKKworQUNfREVGVU4oW2d0X1RZUEVfV0NIQVJfVF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd2NoYXJfdF0sIFtndF9jdl9jX3djaGFyX3RdLAorICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgIFtbI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAgICAgICAgICAgd2NoYXJfdCBmb28gPSAod2NoYXJfdCknXDAnO11dLAorICAgICAgICAgIFtbXV0pXSwKKyAgICAgICBbZ3RfY3ZfY193Y2hhcl90PXllc10sCisgICAgICAgW2d0X2N2X2Nfd2NoYXJfdD1ub10pXSkKKyAgaWYgdGVzdCAkZ3RfY3ZfY193Y2hhcl90ID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX1dDSEFSX1RdLCBbMV0sIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd3Y2hhcl90JyB0eXBlLl0pCisgIGZpCitdKQorCisjIHdpbnRfdC5tNCBzZXJpYWwgNSAoZ2V0dGV4dC0wLjE4LjIpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorZG5sIFRlc3Qgd2hldGhlciA8d2NoYXIuaD4gaGFzIHRoZSAnd2ludF90JyB0eXBlLgorZG5sIFByZXJlcXVpc2l0ZTogQUNfUFJPR19DQworCitBQ19ERUZVTihbZ3RfVFlQRV9XSU5UX1RdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdpbnRfdF0sIFtndF9jdl9jX3dpbnRfdF0sCisgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgW1sKKy8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUKKyAgIDx3Y2hhci5oPi4KKyAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZSBpbmNsdWRlZAorICAgYmVmb3JlIDx3Y2hhci5oPi4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyAgICAgICAgICAgIHdpbnRfdCBmb28gPSAod2NoYXJfdCknXDAnO11dLAorICAgICAgICAgIFtbXV0pXSwKKyAgICAgICBbZ3RfY3ZfY193aW50X3Q9eWVzXSwKKyAgICAgICBbZ3RfY3ZfY193aW50X3Q9bm9dKV0pCisgIGlmIHRlc3QgJGd0X2N2X2Nfd2ludF90ID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX1dJTlRfVF0sIFsxXSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3dpbnRfdCcgdHlwZS5dKQorICBmaQorXSkKKworIyB4c2l6ZS5tNCBzZXJpYWwgNQorZG5sIENvcHlyaWdodCAoQykgMjAwMy0yMDA0LCAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworQUNfREVGVU4oW2dsX1hTSVpFXSwKK1sKKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3hzaXplLmguCisgIEFDX1JFUVVJUkUoW2dsX1NJWkVfTUFYXSkKKyAgQUNfQ0hFQ0tfSEVBREVSUyhbc3RkaW50LmhdKQorXSkKKworbTRfaW5jbHVkZShbYWNpbmNsdWRlLm00XSkKZGlmZiAtLWdpdCBhL2NvbmZpZy9jb25maWcuZ3Vlc3MgYi9jb25maWcvY29uZmlnLmd1ZXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNWM1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcvY29uZmlnLmd1ZXNzCkBAIC0wLDAgKzEsMTQyMCBAQAorIyEgL2Jpbi9zaAorIyBBdHRlbXB0IHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lLgorIyAgIENvcHlyaWdodCAxOTkyLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK3RpbWVzdGFtcD0nMjAxNC0wMy0yMycKKworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0CisjIHByb2dyYW0uICBUaGlzIEV4Y2VwdGlvbiBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3CisjIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMiKS4KKyMKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLgorIworIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECisjCisjIFBsZWFzZSBzZW5kIHBhdGNoZXMgd2l0aCBhIENoYW5nZUxvZyBlbnRyeSB0byBjb25maWctcGF0Y2hlc0BnbnUub3JnLgorCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dCisKK091dHB1dCB0aGUgY29uZmlndXJhdGlvbiBuYW1lIG9mIHRoZSBzeXN0ZW0gXGAkbWUnIGlzIHJ1biBvbi4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQorCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCitDb3B5cmlnaHQgMTk5Mi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgorCitoZWxwPSIKK1RyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworIyBQYXJzZSBjb21tYW5kIGxpbmUKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKKyAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKKyAgICAtLXZlcnNpb24gfCAtdiApCisgICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OworICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgIHNoaWZ0OyBicmVhayA7OworICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KKyAgICAgICBicmVhayA7OworICAgIC0qICkKKyAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiID4mMgorICAgICAgIGV4aXQgMSA7OworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgorICBleGl0IDEKK2ZpCisKK3RyYXAgJ2V4aXQgMScgMSAyIDE1CisKKyMgQ0NfRk9SX0JVSUxEIC0tIGNvbXBpbGVyIHVzZWQgYnkgdGhpcyBzY3JpcHQuIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGEKKyMgY29tcGlsZXIgdG8gYWlkIGluIHN5c3RlbSBkZXRlY3Rpb24gaXMgZGlzY291cmFnZWQgYXMgaXQgcmVxdWlyZXMKKyMgdGVtcG9yYXJ5IGZpbGVzIHRvIGJlIGNyZWF0ZWQgYW5kLCBhcyB5b3UgY2FuIHNlZSBiZWxvdywgaXQgaXMgYQorIyBoZWFkYWNoZSB0byBkZWFsIHdpdGggaW4gYSBwb3J0YWJsZSBmYXNoaW9uLgorCisjIEhpc3RvcmljYWxseSwgYENDX0ZPUl9CVUlMRCcgdXNlZCB0byBiZSBuYW1lZCBgSE9TVF9DQycuIFdlIHN0aWxsCisjIHVzZSBgSE9TVF9DQycgaWYgZGVmaW5lZCwgYnV0IGl0IGlzIGRlcHJlY2F0ZWQuCisKKyMgUG9ydGFibGUgdG1wIGRpcmVjdG9yeSBjcmVhdGlvbiBpbnNwaXJlZCBieSB0aGUgQXV0b2NvbmYgdGVhbS4KKworc2V0X2NjX2Zvcl9idWlsZD0nCit0cmFwICJleGl0Y29kZT1cJD87IChybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbCkgJiYgZXhpdCBcJGV4aXRjb2RlIiAwIDsKK3RyYXAgInJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsOyBleGl0IDEiIDEgMiAxMyAxNSA7Cis6ICR7VE1QRElSPS90bXB9IDsKKyB7IHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIiRUTVBESVIvY2dYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIgOyB9IHx8CisgeyB0ZXN0IC1uICIkUkFORE9NIiAmJiB0bXA9JFRNUERJUi9jZyQkLSRSQU5ET00gJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSA7IH0gfHwKKyB7IHRtcD0kVE1QRElSL2NnLSQkICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgJiYgZWNobyAiV2FybmluZzogY3JlYXRpbmcgaW5zZWN1cmUgdGVtcCBkaXJlY3RvcnkiID4mMiA7IH0gfHwKKyB7IGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gJFRNUERJUiIgPiYyIDsgZXhpdCAxIDsgfSA7CitkdW1teT0kdG1wL2R1bW15IDsKK3RtcGZpbGVzPSIkZHVtbXkuYyAkZHVtbXkubyAkZHVtbXkucmVsICRkdW1teSIgOworY2FzZSAkQ0NfRk9SX0JVSUxELCRIT1NUX0NDLCRDQyBpbgorICwsKSAgICBlY2hvICJpbnQgeDsiID4gJGR1bW15LmMgOworCWZvciBjIGluIGNjIGdjYyBjODkgYzk5IDsgZG8KKwkgIGlmICgkYyAtYyAtbyAkZHVtbXkubyAkZHVtbXkuYykgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgICAgQ0NfRk9SX0JVSUxEPSIkYyI7IGJyZWFrIDsKKwkgIGZpIDsKKwlkb25lIDsKKwlpZiB0ZXN0IHgiJENDX0ZPUl9CVUlMRCIgPSB4IDsgdGhlbgorCSAgQ0NfRk9SX0JVSUxEPW5vX2NvbXBpbGVyX2ZvdW5kIDsKKwlmaQorCTs7CisgLCwqKSAgIENDX0ZPUl9CVUlMRD0kQ0MgOzsKKyAsKiwqKSAgQ0NfRk9SX0JVSUxEPSRIT1NUX0NDIDs7Citlc2FjIDsgc2V0X2NjX2Zvcl9idWlsZD0gOycKKworIyBUaGlzIGlzIG5lZWRlZCB0byBmaW5kIHVuYW1lIG9uIGEgUHlyYW1pZCBPU3ggd2hlbiBydW4gaW4gdGhlIEJTRCB1bml2ZXJzZS4KKyMgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSAxOTk0LTA4LTI0KQoraWYgKHRlc3QgLWYgLy5hdHRiaW4vdW5hbWUpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwlQQVRIPSRQQVRIOi8uYXR0YmluIDsgZXhwb3J0IFBBVEgKK2ZpCisKK1VOQU1FX01BQ0hJTkU9YCh1bmFtZSAtbSkgMj4vZGV2L251bGxgIHx8IFVOQU1FX01BQ0hJTkU9dW5rbm93bgorVU5BTUVfUkVMRUFTRT1gKHVuYW1lIC1yKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfUkVMRUFTRT11bmtub3duCitVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgorVU5BTUVfVkVSU0lPTj1gKHVuYW1lIC12KSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfVkVSU0lPTj11bmtub3duCisKK2Nhc2UgIiR7VU5BTUVfU1lTVEVNfSIgaW4KK0xpbnV4fEdOVXxHTlUvKikKKwkjIElmIHRoZSBzeXN0ZW0gbGFja3MgYSBjb21waWxlciwgdGhlbiBqdXN0IHBpY2sgZ2xpYmMuCisJIyBXZSBjb3VsZCBwcm9iYWJseSB0cnkgaGFyZGVyLgorCUxJQkM9Z251CisKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJY2F0IDw8LUVPRiA+ICRkdW1teS5jCisJI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisJI2lmIGRlZmluZWQoX19VQ0xJQkNfXykKKwlMSUJDPXVjbGliYworCSNlbGlmIGRlZmluZWQoX19kaWV0bGliY19fKQorCUxJQkM9ZGlldGxpYmMKKwkjZWxzZQorCUxJQkM9Z251CisJI2VuZGlmCisJRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJyB8IHNlZCAncywgLCxnJ2AKKwk7OworZXNhYworCisjIE5vdGU6IG9yZGVyIGlzIHNpZ25pZmljYW50IC0gdGhlIGNhc2UgYnJhbmNoZXMgYXJlIG5vdCBleGNsdXNpdmUuCisKK2Nhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KKyAgICAqOk5ldEJTRDoqOiopCisJIyBOZXRCU0QgKG5ic2QpIHRhcmdldHMgc2hvdWxkICh3aGVyZSBhcHBsaWNhYmxlKSBtYXRjaCBvbmUgb3IKKwkjIG1vcmUgb2YgdGhlIHR1cGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKKwkjICotKi1uZXRic2RlY29mZiogYW5kICotKi1uZXRic2QqLiAgRm9yIHRhcmdldHMgdGhhdCByZWNlbnRseQorCSMgc3dpdGNoZWQgdG8gRUxGLCAqLSotbmV0YnNkKiB3b3VsZCBzZWxlY3QgdGhlIG9sZAorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LiAgVGhpcyBwcm92aWRlcyBib3RoIGZvcndhcmQKKwkjIGNvbXBhdGliaWxpdHkgYW5kIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4KKwkjCisJIyBOb3RlOiBOZXRCU0QgZG9lc24ndCBwYXJ0aWN1bGFybHkgY2FyZSBhYm91dCB0aGUgdmVuZG9yCisJIyBwb3J0aW9uIG9mIHRoZSBuYW1lLiAgV2UgYWx3YXlzIHNldCBpdCB0byAidW5rbm93biIuCisJc3lzY3RsPSJzeXNjdGwgLW4gaHcubWFjaGluZV9hcmNoIgorCVVOQU1FX01BQ0hJTkVfQVJDSD1gKC9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgXAorCSAgICAvdXNyL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd24pYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtZWIpIG1hY2hpbmU9YXJtZWItdW5rbm93biA7OworCSAgICBhcm0qKSBtYWNoaW5lPWFybS11bmtub3duIDs7CisJICAgIHNoM2VsKSBtYWNoaW5lPXNobC11bmtub3duIDs7CisJICAgIHNoM2ViKSBtYWNoaW5lPXNoLXVua25vd24gOzsKKwkgICAgc2g1ZWwpIG1hY2hpbmU9c2g1bGUtdW5rbm93biA7OworCSAgICAqKSBtYWNoaW5lPSR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duIDs7CisJZXNhYworCSMgVGhlIE9wZXJhdGluZyBTeXN0ZW0gaW5jbHVkaW5nIG9iamVjdCBmb3JtYXQsIGlmIGl0IGhhcyBzd2l0Y2hlZAorCSMgdG8gRUxGIHJlY2VudGx5LCBvciB3aWxsIGluIHRoZSBmdXR1cmUuCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm0qfGkzODZ8bTY4a3xuczMya3xzaDMqfHNwYXJjfHZheCkKKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBlY2hvIF9fRUxGX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCQkJfCBncmVwIC1xIF9fRUxGX18KKwkJdGhlbgorCQkgICAgIyBPbmNlIGFsbCB1dGlsaXRpZXMgY2FuIGJlIEVDT0ZGIChuZXRic2RlY29mZikgb3IgYS5vdXQgKG5ldGJzZGFvdXQpLgorCQkgICAgIyBSZXR1cm4gbmV0YnNkIGZvciBlaXRoZXIuICBGSVg/CisJCSAgICBvcz1uZXRic2QKKwkJZWxzZQorCQkgICAgb3M9bmV0YnNkZWxmCisJCWZpCisJCTs7CisJICAgICopCisJCW9zPW5ldGJzZAorCQk7OworCWVzYWMKKwkjIFRoZSBPUyByZWxlYXNlCisJIyBEZWJpYW4gR05VL05ldEJTRCBtYWNoaW5lcyBoYXZlIGEgZGlmZmVyZW50IHVzZXJsYW5kLCBhbmQKKwkjIHRodXMsIG5lZWQgYSBkaXN0aW5jdCB0cmlwbGV0LiBIb3dldmVyLCB0aGV5IGRvIG5vdCBuZWVkCisJIyBrZXJuZWwgdmVyc2lvbiBpbmZvcm1hdGlvbiwgc28gaXQgY2FuIGJlIHJlcGxhY2VkIHdpdGggYQorCSMgc3VpdGFibGUgdGFnLCBpbiB0aGUgc3R5bGUgb2YgbGludXgtZ251LgorCWNhc2UgIiR7VU5BTUVfVkVSU0lPTn0iIGluCisJICAgIERlYmlhbiopCisJCXJlbGVhc2U9Jy1nbnUnCisJCTs7CisJICAgICopCisJCXJlbGVhc2U9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy1fXS4qL1wuLydgCisJCTs7CisJZXNhYworCSMgU2luY2UgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNOgorCSMgY29udGFpbnMgcmVkdW5kYW50IGluZm9ybWF0aW9uLCB0aGUgc2hvcnRlciBmb3JtOgorCSMgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0gaXMgdXNlZC4KKwllY2hvICIke21hY2hpbmV9LSR7b3N9JHtyZWxlYXNlfSIKKwlleGl0IDs7CisgICAgKjpCaXRyaWc6KjoqKQorCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9CaXRyaWcuLy8nYAorCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tYml0cmlnJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk9wZW5CU0Q6KjoqKQorCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9PcGVuQlNELi8vJ2AKKwllY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6ZWtrb0JTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZWtrb2JzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpTb2xpZEJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc29saWRic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1hY3BwYzpNaXJCU0Q6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpNaXJCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYWxwaGE6T1NGMToqOiopCisJY2FzZSAkVU5BTUVfUkVMRUFTRSBpbgorCSo0LjApCisJCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQzfSdgCisJCTs7CisJKjUuKikKKwkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDR9J2AKKwkJOzsKKwllc2FjCisJIyBBY2NvcmRpbmcgdG8gQ29tcGFxLCAvdXNyL3NiaW4vcHNyaW5mbyBoYXMgYmVlbiBhdmFpbGFibGUgb24KKwkjIE9TRi8xIGFuZCBUcnU2NCBzeXN0ZW1zIHByb2R1Y2VkIHNpbmNlIDE5OTUuICBJIGhvcGUgdGhhdAorCSMgY292ZXJzIG1vc3Qgc3lzdGVtcyBydW5uaW5nIHRvZGF5LiAgVGhpcyBjb2RlIHBpcGVzIHRoZSBDUFUKKwkjIHR5cGVzIHRocm91Z2ggaGVhZCAtbiAxLCBzbyB3ZSBvbmx5IGRldGVjdCB0aGUgdHlwZSBvZiBDUFUgMC4KKwlBTFBIQV9DUFVfVFlQRT1gL3Vzci9zYmluL3BzcmluZm8gLXYgfCBzZWQgLW4gLWUgJ3MvXiAgVGhlIGFscGhhIFwoLipcKSBwcm9jZXNzb3IuKiQvXDEvcCcgfCBoZWFkIC1uIDFgCisJY2FzZSAiJEFMUEhBX0NQVV9UWVBFIiBpbgorCSAgICAiRVY0ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNC41ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkxDQTQgKDIxMDY2LzIxMDY4KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY1ICgyMTE2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NSIgOzsKKwkgICAgIkVWNS42ICgyMTE2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjU2IiA7OworCSAgICAiRVY1LjYgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NiIgOzsKKwkgICAgIkVWNS43ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTciIDs7CisJICAgICJFVjYgKDIxMjY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2IiA7OworCSAgICAiRVY2LjcgKDIxMjY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjciIDs7CisJICAgICJFVjYuOENCICgyMTI2NEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhBTCAoMjEyNjRCKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44Q1ggKDIxMjY0RCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOUEgKDIxMjY0L0VWNjlBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OSIgOzsKKwkgICAgIkVWNyAoMjEzNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjciIDs7CisJICAgICJFVjcuOSAoMjEzNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3OSIgOzsKKwllc2FjCisJIyBBIFBuLm4gdmVyc2lvbiBpcyBhIHBhdGNoZWQgdmVyc2lvbi4KKwkjIEEgVm4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgdmVyc2lvbi4KKwkjIEEgVG4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgZmllbGQgdGVzdCB2ZXJzaW9uLgorCSMgQSBYbi5uIHZlcnNpb24gaXMgYW4gdW5yZWxlYXNlZCBleHBlcmltZW50YWwgYmFzZWxldmVsLgorCSMgMS4yIHVzZXMgIjEuMiIgZm9yIHVuYW1lIC1yLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtb3NmYGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9eW1BWVFhdLy8nIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorCSMgUmVzZXQgRVhJVCB0cmFwIGJlZm9yZSBleGl0aW5nIHRvIGF2b2lkIHNwdXJpb3VzIG5vbi16ZXJvIGV4aXQgY29kZS4KKwlleGl0Y29kZT0kPworCXRyYXAgJycgMAorCWV4aXQgJGV4aXRjb2RlIDs7CisgICAgQWxwaGFcICo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBTaG91bGQgd2UgY2hhbmdlIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkCisJIyBvZiB0aGUgc3BlY2lmaWMgQWxwaGEgbW9kZWw/CisJZWNobyBhbHBoYS1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIDIxMDY0OldpbmRvd3NfTlQ6NTA6MykKKwllY2hvIGFscGhhLWRlYy13aW5udDMuNQorCWV4aXQgOzsKKyAgICBBbWlnYSo6VU5JWF9TeXN0ZW1fVjo0LjA6KikKKwllY2hvIG02OGstdW5rbm93bi1zeXN2NAorCWV4aXQgOzsKKyAgICAqOltBYV1taWdhW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWFtaWdhb3MKKwlleGl0IDs7CisgICAgKjpbTW1db3JwaFtPb11bU3NdOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1tb3JwaG9zCisJZXhpdCA7OworICAgICo6T1MvMzkwOio6KikKKwllY2hvIGkzNzAtaWJtLW9wZW5lZGl0aW9uCisJZXhpdCA7OworICAgICo6ei9WTToqOiopCisJZWNobyBzMzkwLWlibS16dm1vZQorCWV4aXQgOzsKKyAgICAqOk9TNDAwOio6KikKKwllY2hvIHBvd2VycGMtaWJtLW9zNDAwCisJZXhpdCA7OworICAgIGFybTpSSVNDKjoxLlswMTJdKjoqfGFybTpyaXNjaXg6MS5bMDEyXSo6KikKKwllY2hvIGFybS1hY29ybi1yaXNjaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGFybSo6cmlzY29zOio6Knxhcm0qOlJJU0NPUzoqOiopCisJZWNobyBhcm0tdW5rbm93bi1yaXNjb3MKKwlleGl0IDs7CisgICAgU1IyPzAxOkhJLVVYL01QUDoqOiogfCBTUjgwMDA6SEktVVgvTVBQOio6KikKKwllY2hvIGhwcGExLjEtaGl0YWNoaS1oaXV4bXBwCisJZXhpdCA7OworICAgIFB5cmFtaWQqOk9TeCo6KjoqIHwgTUlTKjpPU3gqOio6KiB8IE1JUyo6U01QX0RDLU9TeCo6KjoqKQorCSMgYWtlZUB3cGRpczAzLndwYWZiLmFmLm1pbCAoRWFybGUgRi4gQWtlKSBjb250cmlidXRlZCBNSVMgYW5kIE5JTEUuCisJaWYgdGVzdCAiYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAiID0gYXR0IDsgdGhlbgorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1zeXN2MworCWVsc2UKKwkJZWNobyBweXJhbWlkLXB5cmFtaWQtYnNkCisJZmkKKwlleGl0IDs7CisgICAgTklMRSo6KjoqOmRjb3N4KQorCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN2cjQKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6dW5peDo0LjA6NiopCisJZWNobyBzcGFyYy1pY2wtbng2CisJZXhpdCA7OworICAgIERSUz82MDAwOlVOSVhfU1Y6NC4yKjo3KiB8IERSUz82MDAwOmlzaXM6NC4yKjo3KikKKwljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KKwkgICAgc3BhcmMpIGVjaG8gc3BhcmMtaWNsLW54NzsgZXhpdCA7OworCWVzYWMgOzsKKyAgICBzMzkweDpTdW5PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40SDpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIGk4NnBjOkF1cm9yYVVYOjUuKjoqIHwgaTg2eGVuOkF1cm9yYVVYOjUuKjoqKQorCWVjaG8gaTM4Ni1wYy1hdXJvcmF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaTg2cGM6U3VuT1M6NS4qOiogfCBpODZ4ZW46U3VuT1M6NS4qOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCVNVTl9BUkNIPSJpMzg2IgorCSMgSWYgdGhlcmUgaXMgYSBjb21waWxlciwgc2VlIGlmIGl0IGlzIGNvbmZpZ3VyZWQgZm9yIDY0LWJpdCBvYmplY3RzLgorCSMgTm90ZSB0aGF0IHRoZSBTdW4gY2MgZG9lcyBub3QgdHVybiBfX0xQNjRfXyBpbnRvIDEgbGlrZSBnY2MgZG9lcy4KKwkjIFRoaXMgdGVzdCB3b3JrcyBmb3IgYm90aCBjb21waWxlcnMuCisJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJICAgIGlmIChlY2hvICcjaWZkZWYgX19hbWQ2NCc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCShDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCWdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJU1VOX0FSQ0g9Ing4Nl82NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtTVU5fQVJDSH0tcGMtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6Nio6KikKKwkjIEFjY29yZGluZyB0byBjb25maWcuc3ViLCB0aGlzIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGNhbm9uaWNhbGl6ZQorCSMgU3VuT1M2LiAgSGFyZCB0byBndWVzcyBleGFjdGx5IHdoYXQgU3VuT1M2IHdpbGwgYmUgbGlrZSwgYnV0CisJIyBpdCdzIGxpa2VseSB0byBiZSBtb3JlIGxpa2UgU29sYXJpcyB0aGFuIFN1bk9TNC4KKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzM2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzoqOiopCisJY2FzZSAiYC91c3IvYmluL2FyY2ggLWtgIiBpbgorCSAgICBTZXJpZXMqfFM0KikKKwkJVU5BTUVfUkVMRUFTRT1gdW5hbWUgLXZgCisJCTs7CisJZXNhYworCSMgSmFwYW5lc2UgTGFuZ3VhZ2UgdmVyc2lvbnMgaGF2ZSBhIHZlcnNpb24gbnVtYmVyIGxpa2UgYDQuMS4zLUpMJy4KKwllY2hvIHNwYXJjLXN1bi1zdW5vc2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy8nYAorCWV4aXQgOzsKKyAgICBzdW4zKjpTdW5PUzoqOiopCisJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgc3VuKjoqOjQuMkJTRDoqKQorCVVOQU1FX1JFTEVBU0U9YChzZWQgMXEgL2V0Yy9tb3RkIHwgYXdrICd7cHJpbnQgc3Vic3RyKCQ1LDEsMyl9JykgMj4vZGV2L251bGxgCisJdGVzdCAieCR7VU5BTUVfUkVMRUFTRX0iID0gIngiICYmIFVOQU1FX1JFTEVBU0U9MworCWNhc2UgImAvYmluL2FyY2hgIiBpbgorCSAgICBzdW4zKQorCQllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCSAgICBzdW40KQorCQllY2hvIHNwYXJjLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwllc2FjCisJZXhpdCA7OworICAgIGF1c2hwOlN1bk9TOio6KikKKwllY2hvIHNwYXJjLWF1c3BleC1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgIyBUaGUgc2l0dWF0aW9uIGZvciBNaU5UIGlzIGEgbGl0dGxlIGNvbmZ1c2luZy4gIFRoZSBtYWNoaW5lIG5hbWUKKyAgICAjIGNhbiBiZSB2aXJ0dWFsbHkgZXZlcnl0aGluZyAoZXZlcnl0aGluZyB3aGljaCBpcyBub3QKKyAgICAjICJhdGFyaXN0IiBvciAiYXRhcmlzdGUiIGF0IGxlYXN0IHNob3VsZCBoYXZlIGEgcHJvY2Vzc29yCisgICAgIyA+IG02ODAwMCkuICBUaGUgc3lzdGVtIG5hbWUgcmFuZ2VzIGZyb20gIk1pTlQiIG92ZXIgIkZyZWVNaU5UIgorICAgICMgdG8gdGhlIGxvd2VyY2FzZSB2ZXJzaW9uICJtaW50IiAob3IgImZyZWVtaW50IikuICBGaW5hbGx5CisgICAgIyB0aGUgc3lzdGVtIG5hbWUgIlRPUyIgZGVub3RlcyBhIHN5c3RlbSB3aGljaCBpcyBhY3R1YWxseSBub3QKKyAgICAjIE1pTlQuICBCdXQgTWlOVCBpcyBkb3dud2FyZCBjb21wYXRpYmxlIHRvIFRPUywgc28gdGhpcyBzaG91bGQKKyAgICAjIGJlIG5vIHByb2JsZW0uCisgICAgYXRhcmlzdFtlXToqTWlOVDoqOiogfCBhdGFyaXN0W2VdOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGF0YXJpKjoqTWlOVDoqOiogfCBhdGFyaSo6Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pbGFuKjoqTWlOVDoqOiogfCBtaWxhbio6Km1pbnQ6KjoqIHwgKm1pbGFuKjoqVE9TOio6KikKKwllY2hvIG02OGstbWlsYW4tbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQorCWVjaG8gbTY4ay1oYWRlcy1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOipNaU5UOio6KiB8ICo6Km1pbnQ6KjoqIHwgKjoqVE9TOio6KikKKwllY2hvIG02OGstdW5rbm93bi1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtNjhrOm1hY2h0ZW46KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBwb3dlcnBjOm1hY2h0ZW46KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSSVNDKjpNYWNoOio6KikKKwllY2hvIG1pcHMtZGVjLW1hY2hfYnNkNC4zCisJZXhpdCA7OworICAgIFJJU0MqOlVMVFJJWDoqOiopCisJZWNobyBtaXBzLWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFZBWCo6VUxUUklYKjoqOiopCisJZWNobyB2YXgtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgMjAyMDpDTElYOio6KiB8IDI0MzA6Q0xJWDoqOiopCisJZWNobyBjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlwczoqOio6VU1JUFMgfCBtaXBzOio6KjpSSVNDb3MpCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisjaWZkZWYgX19jcGx1c3BsdXMKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIHByaW50ZigpIHByb3RvdHlwZSAqLworCWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisjZWxzZQorCWludCBtYWluIChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqYXJndltdOyB7CisjZW5kaWYKKwkjaWYgZGVmaW5lZCAoaG9zdF9taXBzKSAmJiBkZWZpbmVkIChNSVBTRUIpCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1lTVikKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N5c3ZcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TVlI0KQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3ZyNFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX0JTRDQzKSB8fCBkZWZpbmVkKFNZU1RZUEVfQlNEKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzYnNkXG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2VuZGlmCisJICBleGl0ICgtMSk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYKKwkgIGR1bW15YXJnPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8IHNlZCAtbiAncy9cKFswLTldKlwpLiovXDEvcCdgICYmCisJICBTWVNURU1fTkFNRT1gJGR1bW15ICRkdW1teWFyZ2AgJiYKKwkgICAgeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyBtaXBzLW1pcHMtcmlzY29zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLW1vdG9yb2xhLXBvd2VybWF4CisJZXhpdCA7OworICAgIE1vdG9yb2xhOio6NC4zOlBMOC0qKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azoqOio6UG93ZXJNQVhfT1MgfCBTeW5lcmd5OlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6UG93ZXJfVU5JWDoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcnVuaXgKKwlleGl0IDs7CisgICAgbTg4azpDWC9VWDo3KjoqKQorCWVjaG8gbTg4ay1oYXJyaXMtY3h1eDcKKwlleGl0IDs7CisgICAgbTg4azoqOjQqOlI0KikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjQKKwlleGl0IDs7CisgICAgbTg4azoqOjMqOlIzKikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgQVZpaU9OOmRndXg6KjoqKQorCSMgREcvVVggcmV0dXJucyBBVmlpT04gZm9yIGFsbCBhcmNoaXRlY3R1cmVzCisJVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwlpZiBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTAwIF0gfHwgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODExMCBdCisJdGhlbgorCSAgICBpZiBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IG04OGtkZ3V4ZWxmeCBdIHx8IFwKKwkgICAgICAgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSB4IF0KKwkgICAgdGhlbgorCQllY2hvIG04OGstZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZWxzZQorCQllY2hvIG04OGstZGctZGd1eGJjcyR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZmkKKwllbHNlCisJICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZXhpdCA7OworICAgIE04OCo6RG9scGhpbk9TOio6KikJIyBEb2xwaGluT1MgKFNWUjMpCisJZWNobyBtODhrLWRvbHBoaW4tc3lzdjMKKwlleGl0IDs7CisgICAgTTg4KjoqOlIzKjoqKQorCSMgRGVsdGEgODhrIHN5c3RlbSBydW5uaW5nIFNWUjMKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgWEQ4OCo6KjoqOiopICMgVGVrdHJvbml4IFhEODggc3lzdGVtIHJ1bm5pbmcgVVRla1YgKFNWUjMpCisJZWNobyBtODhrLXRla3Ryb25peC1zeXN2MworCWV4aXQgOzsKKyAgICBUZWs0M1swLTldWzAtOV06VVRlazoqOiopICMgVGVrdHJvbml4IDQzMDAgc3lzdGVtIHJ1bm5pbmcgVVRlayAoQlNEKQorCWVjaG8gbTY4ay10ZWt0cm9uaXgtYnNkCisJZXhpdCA7OworICAgICo6SVJJWCo6KjoqKQorCWVjaG8gbWlwcy1zZ2ktaXJpeGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy9nJ2AKKwlleGl0IDs7CisgICAgPz8/Pz8/Pz86QUlYPzpbMTJdLjE6MikgICAjIEFJWCAyLjIuMSBvciBBSVggMi4xLjEgaXMgUlQvUEMgQUlYLgorCWVjaG8gcm9tcC1pYm0tYWl4ICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4LWNvZGUgQ1BVIGlkCisJZXhpdCA7OyAgICAgICAgICAgICAgICMgTm90ZSB0aGF0OiBlY2hvICInYHVuYW1lIC1zYCciIGdpdmVzICdBSVggJworICAgIGkqODY6QUlYOio6KikKKwllY2hvIGkzODYtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYTY0OkFJWDoqOiopCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1haXgke0lCTV9SRVZ9CisJZXhpdCA7OworICAgICo6QUlYOjI6MykKKwlpZiBncmVwIGJvczMyNSAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkJI2luY2x1ZGUgPHN5cy9zeXN0ZW1jZmcuaD4KKworCQltYWluKCkKKwkJCXsKKwkJCWlmICghX19wb3dlcl9wYygpKQorCQkJCWV4aXQoMSk7CisJCQlwdXRzKCJwb3dlcnBjLWlibS1haXgzLjIuNSIpOworCQkJZXhpdCgwKTsKKwkJCX0KK0VPRgorCQlpZiAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YAorCQl0aGVuCisJCQllY2hvICIkU1lTVEVNX05BTUUiCisJCWVsc2UKKwkJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNQorCQlmaQorCWVsaWYgZ3JlcCBib3MzMjQgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNAorCWVsc2UKKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMgorCWZpCisJZXhpdCA7OworICAgICo6QUlYOio6WzQ1NjddKQorCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAorCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlJQk1fQVJDSD1yczYwMDAKKwllbHNlCisJCUlCTV9BUkNIPXBvd2VycGMKKwlmaQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtJQk1fQVJDSH0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6KjoqKQorCWVjaG8gcnM2MDAwLWlibS1haXgKKwlleGl0IDs7CisgICAgaWJtcnQ6NC40QlNEOip8cm9tcC1pYm06QlNEOiopCisJZWNobyByb21wLWlibS1ic2Q0LjQKKwlleGl0IDs7CisgICAgaWJtcnQ6KkJTRDoqfHJvbXAtaWJtOkJTRDoqKSAgICAgICAgICAgICMgY292ZXJzIFJUL1BDIEJTRCBhbmQKKwllY2hvIHJvbXAtaWJtLWJzZCR7VU5BTUVfUkVMRUFTRX0gICAjIDQuMyB3aXRoIHVuYW1lIGFkZGVkIHRvCisJZXhpdCA7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXBvcnQ6IHJvbXAtaWJtIEJTRCA0LjMKKyAgICAqOkJPU1g6KjoqKQorCWVjaG8gcnM2MDAwLWJ1bGwtYm9zeAorCWV4aXQgOzsKKyAgICBEUFgvMj8wMDpCLk8uUy46KjoqKQorCWVjaG8gbTY4ay1idWxsLXN5c3YzCisJZXhpdCA7OworICAgIDkwMDAvWzM0XT8/OjQuM2JzZDoxLio6KikKKwllY2hvIG02OGstaHAtYnNkCisJZXhpdCA7OworICAgIGhwMzAwOjQuNEJTRDoqOiogfCA5MDAwL1szNF0/Pzo0LjNic2Q6Mi4qOiopCisJZWNobyBtNjhrLWhwLWJzZDQuNAorCWV4aXQgOzsKKyAgICA5MDAwL1szNDY3OF0/PzpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgOTAwMC8zMT8gKSAgICAgICAgICAgIEhQX0FSQ0g9bTY4MDAwIDs7CisJICAgIDkwMDAvWzM0XT8/ICkgICAgICAgICBIUF9BUkNIPW02OGsgOzsKKwkgICAgOTAwMC9bNjc4XVswLTldWzAtOV0pCisJCWlmIFsgLXggL3Vzci9iaW4vZ2V0Y29uZiBdOyB0aGVuCisJCSAgICBzY19jcHVfdmVyc2lvbj1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19DUFVfVkVSU0lPTiAyPi9kZXYvbnVsbGAKKwkJICAgIHNjX2tlcm5lbF9iaXRzPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0tFUk5FTF9CSVRTIDI+L2Rldi9udWxsYAorCQkgICAgY2FzZSAiJHtzY19jcHVfdmVyc2lvbn0iIGluCisJCSAgICAgIDUyMykgSFBfQVJDSD0iaHBwYTEuMCIgOzsgIyBDUFVfUEFfUklTQzFfMAorCQkgICAgICA1MjgpIEhQX0FSQ0g9ImhwcGExLjEiIDs7ICMgQ1BVX1BBX1JJU0MxXzEKKwkJICAgICAgNTMyKSAgICAgICAgICAgICAgICAgICAgICAjIENQVV9QQV9SSVNDMl8wCisJCQljYXNlICIke3NjX2tlcm5lbF9iaXRzfSIgaW4KKwkJCSAgMzIpIEhQX0FSQ0g9ImhwcGEyLjBuIiA7OworCQkJICA2NCkgSFBfQVJDSD0iaHBwYTIuMHciIDs7CisJCQkgICcnKSBIUF9BUkNIPSJocHBhMi4wIiA7OyAgICMgSFAtVVggMTAuMjAKKwkJCWVzYWMgOzsKKwkJICAgIGVzYWMKKwkJZmkKKwkJaWYgWyAiJHtIUF9BUkNIfSIgPSAiIiBdOyB0aGVuCisJCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCSAgICBzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKworCQkjZGVmaW5lIF9IUFVYX1NPVVJDRQorCQkjaW5jbHVkZSA8c3RkbGliLmg+CisJCSNpbmNsdWRlIDx1bmlzdGQuaD4KKworCQlpbnQgbWFpbiAoKQorCQl7CisJCSNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKwkJICAgIGxvbmcgYml0cyA9IHN5c2NvbmYoX1NDX0tFUk5FTF9CSVRTKTsKKwkJI2VuZGlmCisJCSAgICBsb25nIGNwdSAgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCisJCSAgICBzd2l0Y2ggKGNwdSkKKwkJCXsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworCQkJY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEiKTsgYnJlYWs7CisJCQljYXNlIENQVV9QQV9SSVNDMl8wOgorCQkjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisJCQkgICAgc3dpdGNoIChiaXRzKQorCQkJCXsKKwkJCQljYXNlIDY0OiBwdXRzICgiaHBwYTIuMHciKTsgYnJlYWs7CisJCQkJY2FzZSAzMjogcHV0cyAoImhwcGEyLjBuIik7IGJyZWFrOworCQkJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworCQkJCX0gYnJlYWs7CisJCSNlbHNlICAvKiAhZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpICovCisJCQkgICAgcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisJCSNlbmRpZgorCQkJZGVmYXVsdDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisJCQl9CisJCSAgICBleGl0ICgwKTsKKwkJfQorRU9GCisJCSAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD1gJGR1bW15YAorCQkgICAgdGVzdCAteiAiJEhQX0FSQ0giICYmIEhQX0FSQ0g9aHBwYQorCQlmaSA7OworCWVzYWMKKwlpZiBbICR7SFBfQVJDSH0gPSAiaHBwYTIuMHciIF0KKwl0aGVuCisJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKworCSAgICAjIGhwcGEyLjB3LWhwLWhwdXgqIGhhcyBhIDY0LWJpdCBrZXJuZWwgYW5kIGEgY29tcGlsZXIgZ2VuZXJhdGluZworCSAgICAjIDMyLWJpdCBjb2RlLiAgaHBwYTY0LWhwLWhwdXgqIGhhcyB0aGUgc2FtZSBrZXJuZWwgYW5kIGEgY29tcGlsZXIKKwkgICAgIyBnZW5lcmF0aW5nIDY0LWJpdCBjb2RlLiAgR05VIGFuZCBIUCB1c2UgZGlmZmVyZW50IG5vbWVuY2xhdHVyZToKKwkgICAgIworCSAgICAjICQgQ0NfRk9SX0JVSUxEPWNjIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTIuMHctaHAtaHB1eDExLjIzCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9ImNjICtEQTIuMHciIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTY0LWhwLWhwdXgxMS4yMworCisJICAgIGlmIGVjaG8gX19MUDY0X18gfCAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwKKwkJZ3JlcCAtcSBfX0xQNjRfXworCSAgICB0aGVuCisJCUhQX0FSQ0g9ImhwcGEyLjB3IgorCSAgICBlbHNlCisJCUhQX0FSQ0g9ImhwcGE2NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtIUF9BUkNIfS1ocC1ocHV4JHtIUFVYX1JFVn0KKwlleGl0IDs7CisgICAgaWE2NDpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJZWNobyBpYTY0LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICAzMDUwKjpISS1VWDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCWludAorCW1haW4gKCkKKwl7CisJICBsb25nIGNwdSA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisJICAvKiBUaGUgb3JkZXIgbWF0dGVycywgYmVjYXVzZSBDUFVfSVNfSFBfTUM2OEsgZXJyb25lb3VzbHkgcmV0dXJucworCSAgICAgdHJ1ZSBmb3IgQ1BVX1BBX1JJU0MxXzAuICBDUFVfSVNfUEFfUklTQyByZXR1cm5zIGNvcnJlY3QKKwkgICAgIHJlc3VsdHMsIGhvd2V2ZXIuICAqLworCSAgaWYgKENQVV9JU19QQV9SSVNDIChjcHUpKQorCSAgICB7CisJICAgICAgc3dpdGNoIChjcHUpCisJCXsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGNhc2UgQ1BVX1BBX1JJU0MyXzA6IHB1dHMgKCJocHBhMi4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBkZWZhdWx0OiBwdXRzICgiaHBwYS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoQ1BVX0lTX0hQX01DNjhLIChjcHUpKQorCSAgICBwdXRzICgibTY4ay1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGVsc2UgcHV0cyAoInVua25vd24taGl0YWNoaS1oaXV4d2UyIik7CisJICBleGl0ICgwKTsKKwl9CitFT0YKKwkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YCAmJgorCQl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKwllY2hvIHVua25vd24taGl0YWNoaS1oaXV4d2UyCisJZXhpdCA7OworICAgIDkwMDAvNz8/OjQuM2JzZDoqOiogfCA5MDAwLzg/Wzc5XTo0LjNic2Q6KjoqICkKKwllY2hvIGhwcGExLjEtaHAtYnNkCisJZXhpdCA7OworICAgIDkwMDAvOD8/OjQuM2JzZDoqOiopCisJZWNobyBocHBhMS4wLWhwLWJzZAorCWV4aXQgOzsKKyAgICAqOT8/KjpNUEUvaVg6KjoqIHwgKjMwMDAqOk1QRS9pWDoqOiopCisJZWNobyBocHBhMS4wLWhwLW1wZWl4CisJZXhpdCA7OworICAgIGhwNz8/Ok9TRjE6KjoqIHwgaHA4P1s3OV06T1NGMToqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1vc2YKKwlleGl0IDs7CisgICAgaHA4Pz86T1NGMToqOiopCisJZWNobyBocHBhMS4wLWhwLW9zZgorCWV4aXQgOzsKKyAgICBpKjg2Ok9TRjE6KjoqKQorCWlmIFsgLXggL3Vzci9zYmluL3N5c3ZlcnNpb24gXSA7IHRoZW4KKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMW1rCisJZWxzZQorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxCisJZmkKKwlleGl0IDs7CisgICAgcGFyaXNjKjpMaXRlcyo6KjoqKQorCWVjaG8gaHBwYTEuMS1ocC1saXRlcworCWV4aXQgOzsKKyAgICBDMSo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMxKjoqKQorCWVjaG8gYzEtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDMio6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMyKjoqKQorCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYworCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAorCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCisJZmkKKwlleGl0IDs7CisgICAgQzM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM0KjoqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQzM4KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM4KjoqKQorCWVjaG8gYzM4LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDNCo6KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQ1JBWSpZLU1QOio6KjoqKQorCWVjaG8geW1wLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqW0EtWl05MDoqOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IFwKKwl8IHNlZCAtZSAncy9DUkFZLipcKFtBLVpdOTBcKS9cMS8nIFwKKwkgICAgICAtZSB5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LyBcCisJICAgICAgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlRTOio6KjoqKQorCWVjaG8gdDkwLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVDNFOio6KjoqKQorCWVjaG8gYWxwaGFldjUtY3JheS11bmljb3NtayR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlNWMToqOio6KikKKwllY2hvIHN2MS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICAqOlVOSUNPUy9tcDoqOiopCisJZWNobyBjcmF5bnYtY3JheS11bmljb3NtcCR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBGMzBbMDFdOlVOSVhfU3lzdGVtX1Y6KjoqIHwgRjcwMDpVTklYX1N5c3RlbV9WOio6KikKKwlGVUpJVFNVX1BST0M9YHVuYW1lIC1tIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKwlGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzLyAvXy8nYAorCWVjaG8gIiR7RlVKSVRTVV9QUk9DfS1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisJZXhpdCA7OworICAgIDUwMDA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKKwlGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisJRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy8gL18vJ2AKKwllY2hvICJzcGFyYy1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisJZXhpdCA7OworICAgIGkqODY6QlNELzM4NjoqOiogfCBpKjg2OkJTRC9PUzoqOiogfCAqOkFzY2VuZFwgRW1iZWRkZWQvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBzcGFyYyo6QlNEL09TOio6KikKKwllY2hvIHNwYXJjLXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpCU0QvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RnJlZUJTRDoqOiopCisJVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwljYXNlICR7VU5BTUVfUFJPQ0VTU09SfSBpbgorCSAgICBhbWQ2NCkKKwkJZWNobyB4ODZfNjQtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCSAgICAqKQorCQllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBpKjpDWUdXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWN5Z3dpbgorCWV4aXQgOzsKKyAgICAqOk1JTkdXNjQqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3NjQKKwlleGl0IDs7CisgICAgKjpNSU5HVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3czMgorCWV4aXQgOzsKKyAgICAqOk1TWVMqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zeXMKKwlleGl0IDs7CisgICAgaSo6d2luZG93czMyKjoqKQorCSMgdW5hbWUgLW0gaW5jbHVkZXMgIi1wYyIgb24gdGhpcyBzeXN0ZW0uCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LW1pbmd3MzIKKwlleGl0IDs7CisgICAgaSo6UFcqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXB3MzIKKwlleGl0IDs7CisgICAgKjpJbnRlcml4KjoqKQorCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgorCSAgICB4ODYpCisJCWVjaG8gaTU4Ni1wYy1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJICAgIGF1dGhlbnRpY2FtZCB8IGdlbnVpbmVpbnRlbCB8IEVNNjRUKQorCQllY2hvIHg4Nl82NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwkgICAgSUE2NCkKKwkJZWNobyBpYTY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCWVzYWMgOzsKKyAgICBbMzQ1XTg2OldpbmRvd3NfOTU6KiB8IFszNDVdODY6V2luZG93c185ODoqIHwgWzM0NV04NjpXaW5kb3dzX05UOiopCisJZWNobyBpJHtVTkFNRV9NQUNISU5FfS1wYy1ta3MKKwlleGl0IDs7CisgICAgODY2NDpXaW5kb3dzX05UOiopCisJZWNobyB4ODZfNjQtcGMtbWtzCisJZXhpdCA7OworICAgIGkqOldpbmRvd3NfTlQqOiogfCBQZW50aXVtKjpXaW5kb3dzX05UKjoqKQorCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKwkjIEl0IGFsc28gY29uZmxpY3RzIHdpdGggcHJlLTIuMCB2ZXJzaW9ucyBvZiBBVCZUIFVXSU4uIFNob3VsZCB3ZQorCSMgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQgb2YgaTM4Nj8KKwllY2hvIGk1ODYtcGMtaW50ZXJpeAorCWV4aXQgOzsKKyAgICBpKjpVV0lOKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy11d2luCisJZXhpdCA7OworICAgIGFtZDY0OkNZR1dJTio6KjoqIHwgeDg2XzY0OkNZR1dJTio6KjoqKQorCWVjaG8geDg2XzY0LXVua25vd24tY3lnd2luCisJZXhpdCA7OworICAgIHAqOkNZR1dJTio6KikKKwllY2hvIHBvd2VycGNsZS11bmtub3duLWN5Z3dpbgorCWV4aXQgOzsKKyAgICBwcmVwKjpTdW5PUzo1Lio6KikKKwllY2hvIHBvd2VycGNsZS11bmtub3duLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgICo6R05VOio6KikKKwkjIHRoZSBHTlUgc3lzdGVtCisJZWNobyBgZWNobyAke1VOQU1FX01BQ0hJTkV9fHNlZCAtZSAncyxbLS9dLiokLCwnYC11bmtub3duLSR7TElCQ31gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncywvLiokLCwnYAorCWV4aXQgOzsKKyAgICAqOkdOVS8qOio6KikKKwkjIG90aGVyIHN5c3RlbXMgd2l0aCBHTlUgbGliYyBhbmQgdXNlcmxhbmQKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1gZWNobyAke1VOQU1FX1NZU1RFTX0gfCBzZWQgJ3MsXlteL10qLywsJyB8IHRyICdbQS1aXScgJ1thLXpdJ2BgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgLSR7TElCQ30KKwlleGl0IDs7CisgICAgaSo4NjpNaW5peDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbml4CisJZXhpdCA7OworICAgIGFhcmNoNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgYWFyY2g2NF9iZTpMaW51eDoqOiopCisJVU5BTUVfTUFDSElORT1hYXJjaDY0X2JlCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBhbHBoYTpMaW51eDoqOiopCisJY2FzZSBgc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIDwgL3Byb2MvY3B1aW5mb2AgaW4KKwkgIEVWNSkgICBVTkFNRV9NQUNISU5FPWFscGhhZXY1IDs7CisJICBFVjU2KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NTYgOzsKKwkgIFBDQTU2KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIFBDQTU3KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIEVWNikgICBVTkFNRV9NQUNISU5FPWFscGhhZXY2IDs7CisJICBFVjY3KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKKwkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OworCWVzYWMKKwlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIC1xIGxkLnNvLjEKKwlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJnbnVsaWJjMSIgOyBmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgYXJjOkxpbnV4Oio6KiB8IGFyY2ViOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGFybSo6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKwl0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwllbHNlCisJICAgIGlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJCXwgZ3JlcCAtcSBfX0FSTV9QQ1NfVkZQCisJICAgIHRoZW4KKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfWVhYmkKKwkgICAgZWxzZQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9ZWFiaWhmCisJICAgIGZpCisJZmkKKwlleGl0IDs7CisgICAgYXZyMzIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGNyaXM6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgY3Jpc3YzMjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBmcnY6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgaGV4YWdvbjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBpKjg2OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBpYTY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIG0zMnIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIG02OCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSN1bmRlZiBDUFUKKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9ZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT0ke1VOQU1FX01BQ0hJTkV9ZWwKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCisJQ1BVPSR7VU5BTUVfTUFDSElORX0KKwkjZWxzZQorCUNQVT0KKwkjZW5kaWYKKwkjZW5kaWYKK0VPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKKwl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtJHtMSUJDfSI7IGV4aXQ7IH0KKwk7OworICAgIG9wZW5yaXNjKjpMaW51eDoqOiopCisJZWNobyBvcjFrLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBvcjMyOkxpbnV4Oio6KiB8IG9yMWsqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBhZHJlOkxpbnV4Oio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQorCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwYXJpc2M6TGludXg6KjoqIHwgaHBwYTpMaW51eDoqOiopCisJIyBMb29rIGZvciBDUFUgbGV2ZWwKKwljYXNlIGBncmVwICdeY3B1W15hLXpdKjonIC9wcm9jL2NwdWluZm8gMj4vZGV2L251bGwgfCBjdXQgLWQnICcgLWYyYCBpbgorCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtJHtMSUJDfSA7OworCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtJHtMSUJDfSA7OworCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtJHtMSUJDfSA7OworCWVzYWMKKwlleGl0IDs7CisgICAgcHBjNjQ6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwcGM6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgcHBjNjRsZTpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjNjRsZS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgcHBjbGU6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgc2g2NCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgc2gqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgdGlsZSo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgdmF4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgeDg2XzY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHh0ZW5zYSo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKKwkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgorCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKKwkjIHN5c25hbWUgYW5kIG5vZGVuYW1lLgorCWVjaG8gaTM4Ni1zZXF1ZW50LXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6VU5JWF9TVjo0LjJNUDoyLiopCisJIyBVbml4d2FyZSBpcyBhbiBvZmZzaG9vdCBvZiBTVlI0LCBidXQgaXQgaGFzIGl0cyBvd24gdmVyc2lvbgorCSMgbnVtYmVyIHNlcmllcyBzdGFydGluZyB3aXRoIDIuLi4KKwkjIEkgYW0gbm90IHBvc2l0aXZlIHRoYXQgb3RoZXIgU1ZSNCBzeXN0ZW1zIHdvbid0IG1hdGNoIHRoaXMsCisJIyBJIGp1c3QgaGF2ZSB0byBob3BlLiAgLS0gcm1zLgorCSMgVXNlIHN5c3Y0LjJ1dy4uLiBzbyB0aGF0IHN5c3Y0KiBtYXRjaGVzIGl0LgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2NC4ydXcke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6T1MvMjoqOiopCisJIyBJZiB3ZSB3ZXJlIGFibGUgdG8gZmluZCBgdW5hbWUnLCB0aGVuIEVNWCBVbml4IGNvbXBhdGliaWxpdHkKKwkjIGlzIHByb2JhYmx5IGluc3RhbGxlZC4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtb3MyLWVteAorCWV4aXQgOzsKKyAgICBpKjg2OlhUUy0zMDA6KjpTVE9QKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN0b3AKKwlleGl0IDs7CisgICAgaSo4NjphdGhlb3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWF0aGVvcworCWV4aXQgOzsKKyAgICBpKjg2OnN5bGxhYmxlOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lsbGFibGUKKwlleGl0IDs7CisgICAgaSo4NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0LlswMl0qOiopCisJZWNobyBpMzg2LXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBpKjg2OipET1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1tc2Rvc2RqZ3BwCisJZXhpdCA7OworICAgIGkqODY6Kjo0Lio6KiB8IGkqODY6U1lTVEVNX1Y6NC4qOiopCisJVU5BTUVfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgJ3MvXC9NUCQvLydgCisJaWYgZ3JlcCBOb3ZlbGwgL3Vzci9pbmNsdWRlL2xpbmsuaCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bml2ZWwtc3lzdiR7VU5BTUVfUkVMfQorCWVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Yke1VOQU1FX1JFTH0KKwlmaQorCWV4aXQgOzsKKyAgICBpKjg2Oio6NTpbNjc4XSopCisJIyBVbml4V2FyZSA3LngsIE9wZW5VTklYIGFuZCBPcGVuU2VydmVyIDYuCisJY2FzZSBgL2Jpbi91bmFtZSAtWCB8IGdyZXAgIl5NYWNoaW5lImAgaW4KKwkgICAgKjQ4NiopCSAgICAgVU5BTUVfTUFDSElORT1pNDg2IDs7CisJICAgICpQZW50aXVtKQkgICAgIFVOQU1FX01BQ0hJTkU9aTU4NiA7OworCSAgICAqUGVudCp8KkNlbGVyb24pIFVOQU1FX01BQ0hJTkU9aTY4NiA7OworCWVzYWMKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSR7VU5BTUVfU1lTVEVNfSR7VU5BTUVfVkVSU0lPTn0KKwlleGl0IDs7CisgICAgaSo4NjoqOjMuMjoqKQorCWlmIHRlc3QgLWYgL3Vzci9vcHRpb25zL2NiLm5hbWU7IHRoZW4KKwkJVU5BTUVfUkVMPWBzZWQgLW4gJ3MvLipWZXJzaW9uIC8vcCcgPC91c3Ivb3B0aW9ucy9jYi5uYW1lYAorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtaXNjJFVOQU1FX1JFTAorCWVsaWYgL2Jpbi91bmFtZSAtWCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgorCQlVTkFNRV9SRUw9YCgvYmluL3VuYW1lIC1YfGdyZXAgUmVsZWFzZXxzZWQgLWUgJ3MvLio9IC8vJylgCisJCSgvYmluL3VuYW1lIC1YfGdyZXAgaTgwNDg2ID4vZGV2L251bGwpICYmIFVOQU1FX01BQ0hJTkU9aTQ4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bScgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNTg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50ICpJSScgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtIFBybycgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2CisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zY28kVU5BTUVfUkVMCisJZWxzZQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjMyCisJZmkKKwlleGl0IDs7CisgICAgcGM6KjoqOiopCisJIyBMZWZ0IGhlcmUgZm9yIGNvbXBhdGliaWxpdHk6CisJIyB1bmFtZSAtbSBwcmludHMgZm9yIERKR1BQIGFsd2F5cyAncGMnLCBidXQgaXQgcHJpbnRzIG5vdGhpbmcgYWJvdXQKKwkjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpNTg2LgorCSMgTm90ZTogd2hhdGV2ZXIgdGhpcyBpcywgaXQgTVVTVCBiZSB0aGUgc2FtZSBhcyB3aGF0IGNvbmZpZy5zdWIKKwkjIHByaW50cyBmb3IgdGhlICJkamdwcCIgaG9zdCwgb3IgZWxzZSBHREIgY29uZmlndXJ5IHdpbGwgZGVjaWRlIHRoYXQKKwkjIHRoaXMgaXMgYSBjcm9zcy1idWlsZC4KKwllY2hvIGk1ODYtcGMtbXNkb3NkamdwcAorCWV4aXQgOzsKKyAgICBJbnRlbDpNYWNoOjMqOiopCisJZWNobyBpMzg2LXBjLW1hY2gzCisJZXhpdCA7OworICAgIHBhcmFnb246KjoqOiopCisJZWNobyBpODYwLWludGVsLW9zZjEKKwlleGl0IDs7CisgICAgaTg2MDoqOjQuKjoqKSAjIGk4NjAtU1ZSNAorCWlmIGdyZXAgU3RhcmRlbnQgL3Vzci9pbmNsdWRlL3N5cy91YWRtaW4uaCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICBlY2hvIGk4NjAtc3RhcmRlbnQtc3lzdiR7VU5BTUVfUkVMRUFTRX0gIyBTdGFyZGVudCBWaXN0cmEgaTg2MC1TVlI0CisJZWxzZSAjIEFkZCBvdGhlciBpODYwLVNWUjQgdmVuZG9ycyBiZWxvdyBhcyB0aGV5IGFyZSBkaXNjb3ZlcmVkLgorCSAgZWNobyBpODYwLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0gICMgVW5rbm93biBpODYwLVNWUjQKKwlmaQorCWV4aXQgOzsKKyAgICBtaW5pKjpDVElYOlNZUyo1OiopCisJIyAibWluaWZyYW1lIgorCWVjaG8gbTY4MDEwLWNvbnZlcmdlbnQtc3lzdgorCWV4aXQgOzsKKyAgICBtYzY4azpVTklYOlNZU1RFTTU6My41MW0pCisJZWNobyBtNjhrLWNvbnZlcmdlbnQtc3lzdgorCWV4aXQgOzsKKyAgICBNNjgwPzA6RC1OSVg6NS4zOiopCisJZWNobyBtNjhrLWRpYWItZG5peAorCWV4aXQgOzsKKyAgICBNNjgqOio6UjNWWzU2NzhdKjoqKQorCXRlc3QgLXIgL3N5c1Y2OCAmJiB7IGVjaG8gJ202OGstbW90b3JvbGEtc3lzdic7IGV4aXQ7IH0gOzsKKyAgICAzWzM0NV0/PzoqOjQuMDozLjAgfCAzWzM0XT8/QToqOjQuMDozLjAgfCAzWzM0XT8/LCo6Kjo0LjA6My4wIHwgM1szNF0/Py8qOio6NC4wOjMuMCB8IDQ0MDA6Kjo0LjA6My4wIHwgNDg1MDoqOjQuMDozLjAgfCBTS0E0MDoqOjQuMDozLjAgfCBTRFMyOio6NC4wOjMuMCB8IFNIRzI6Kjo0LjA6My4wIHwgUzc1MDEqOio6NC4wOjMuMCkKKwlPU19SRUw9JycKKwl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKKwkmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7CisgICAgM1szNF0/PzoqOjQuMDoqIHwgM1szNF0/PywqOio6NC4wOiopCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4aXQ7IH0gOzsKKyAgICBOQ1IqOio6NC4yOiogfCBNUFJBUyo6Kjo0LjI6KikKKwlPU19SRUw9Jy4zJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSAgICAmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgcHRlcm9uID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OworICAgIG02OCo6THlueE9TOjIuKjoqIHwgbTY4KjpMeW54T1M6My4wKjoqKQorCWVjaG8gbTY4ay11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWM2ODAzMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorCWVjaG8gbTY4ay1hdGFyaS1zeXN2NAorCWV4aXQgOzsKKyAgICBUU1VOQU1JOkx5bnhPUzoyLio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICByczYwMDA6THlueE9TOjIuKjoqKQorCWVjaG8gcnM2MDAwLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuWzAyXSo6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNNW0JFXVM6VU5JWF9TVjoqOiopCisJZWNobyBtaXBzLWRkZS1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSTSo6UmVsaWFudFVOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICBSTSo6U0lOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICAqOlNJTklYLSo6KjoqKQorCWlmIHVuYW1lIC1wIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zbmktc3lzdjQKKwllbHNlCisJCWVjaG8gbnMzMmstc25pLXN5c3YKKwlmaQorCWV4aXQgOzsKKyAgICBQRU5USVVNOio6NC4wKjoqKQkjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAorCQkJIyBzYXlzIDxSaWNoYXJkLk0uQmFydGVsQGNjTWFpbC5DZW5zdXMuR09WPgorCWVjaG8gaTU4Ni11bmlzeXMtc3lzdjQKKwlleGl0IDs7CisgICAgKjpVTklYX1N5c3RlbV9WOjQqOkZUWCopCisJIyBGcm9tIEdlcmFsZCBIZXdlcyA8aGV3ZXNAb3Blbm1hcmtldC5jb20+LgorCSMgSG93IGFib3V0IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHN0cmF0dXMgYXJjaGl0ZWN0dXJlcz8gLWRqbQorCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgICo6KjoqOkZUWCopCisJIyBGcm9tIHNlYW5mQHN3ZGMuc3RyYXR1cy5jb20uCisJZWNobyBpODYwLXN0cmF0dXMtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICAqOlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyBocHBhMS4xLXN0cmF0dXMtdm9zCisJZXhpdCA7OworICAgIG1jNjgqOkEvVVg6KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1hdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG5ld3MqOk5FV1MtT1M6Nio6KikKKwllY2hvIG1pcHMtc29ueS1uZXdzb3M2CisJZXhpdCA7OworICAgIFJbMzRdMDAwOipTeXN0ZW1fVio6KjoqIHwgUjQwMDA6VU5JWF9TWVNWOio6KiB8IFIqMDAwOlVOSVhfU1Y6KjoqKQorCWlmIFsgLWQgL3Vzci9uZWMgXTsgdGhlbgorCQllY2hvIG1pcHMtbmVjLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZWxzZQorCQllY2hvIG1pcHMtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZXhpdCA7OworICAgIEJlQm94OkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBoYXJkd2FyZSBtYWRlIGJ5IEJlLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYmUtYmVvcworCWV4aXQgOzsKKyAgICBCZU1hYzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gTWFjIG9yIE1hYyBjbG9uZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWFwcGxlLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtYmVvcworCWV4aXQgOzsKKyAgICBCZVBDOkhhaWt1Oio6KikJIyBIYWlrdSBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWhhaWt1CisJZXhpdCA7OworICAgIHg4Nl82NDpIYWlrdToqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1oYWlrdQorCWV4aXQgOzsKKyAgICBTWC00OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNTpTVVBFUi1VWDoqOiopCisJZWNobyBzeDUtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTY6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g2LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC03OlNVUEVSLVVYOio6KikKKwllY2hvIHN4Ny1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtODpTVVBFUi1VWDoqOiopCisJZWNobyBzeDgtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLThSOlNVUEVSLVVYOio6KikKKwllY2hvIHN4OHItbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFBvd2VyKjpSaGFwc29keToqOiopCisJZWNobyBwb3dlcnBjLWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlJoYXBzb2R5Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RGFyd2luOio6KikKKwlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYCB8fCBVTkFNRV9QUk9DRVNTT1I9dW5rbm93bgorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9IHVua25vd24gOyB0aGVuCisJICAgIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjCisJZmkKKwlpZiB0ZXN0IGBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvXC4uKi8vJ2AgLWxlIDEwIDsgdGhlbgorCSAgICBpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKwkJaWYgKGVjaG8gJyNpZmRlZiBfX0xQNjRfXyc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCSAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorCQkgICAgZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkJdGhlbgorCQkgICAgY2FzZSAkVU5BTUVfUFJPQ0VTU09SIGluCisJCQlpMzg2KSBVTkFNRV9QUk9DRVNTT1I9eDg2XzY0IDs7CisJCQlwb3dlcnBjKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYzY0IDs7CisJCSAgICBlc2FjCisJCWZpCisJICAgIGZpCisJZWxpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9IGkzODYgOyB0aGVuCisJICAgICMgQXZvaWQgZXhlY3V0aW5nIGNjIG9uIE9TIFggMTAuOSwgYXMgaXQgc2hpcHMgd2l0aCBhIHN0dWIKKwkgICAgIyB0aGF0IHB1dHMgdXAgYSBncmFwaGljYWwgYWxlcnQgcHJvbXB0aW5nIHRvIGluc3RhbGwKKwkgICAgIyBkZXZlbG9wZXIgdG9vbHMuICBBbnkgc3lzdGVtIHJ1bm5pbmcgTWFjIE9TIFggMTAuNyBvcgorCSAgICAjIGxhdGVyIChEYXJ3aW4gMTEgYW5kIGxhdGVyKSBpcyByZXF1aXJlZCB0byBoYXZlIGEgNjQtYml0CisJICAgICMgcHJvY2Vzc29yLiBUaGlzIGlzIG5vdCB0cnVlIG9mIHRoZSBBUk0gdmVyc2lvbiBvZiBEYXJ3aW4KKwkgICAgIyB0aGF0IEFwcGxlIHVzZXMgaW4gcG9ydGFibGUgZGV2aWNlcy4KKwkgICAgVU5BTUVfUFJPQ0VTU09SPXg4Nl82NAorCWZpCisJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tYXBwbGUtZGFyd2luJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOnByb2NudG8qOio6KiB8ICo6UU5YOlswMTIzNDU2Nzg5XSo6KikKKwlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYAorCWlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gIng4NiI7IHRoZW4KKwkJVU5BTUVfUFJPQ0VTU09SPWkzODYKKwkJVU5BTUVfTUFDSElORT1wYworCWZpCisJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tJHtVTkFNRV9NQUNISU5FfS1udG8tcW54JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlFOWDoqOjQqKQorCWVjaG8gaTM4Ni1wYy1xbngKKwlleGl0IDs7CisgICAgTkVPLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbmVvLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE5TRS0qOk5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5zZS10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBOU1ItPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc3ItdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpOb25TdG9wLVVYOio6KikKKwllY2hvIG1pcHMtY29tcGFxLW5vbnN0b3B1eAorCWV4aXQgOzsKKyAgICBCUzIwMDA6UE9TSVgqOio6KikKKwllY2hvIGJzMjAwMC1zaWVtZW5zLXN5c3YKKwlleGl0IDs7CisgICAgRFMvKjpVTklYX1N5c3RlbV9WOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tJHtVTkFNRV9TWVNURU19LSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpQbGFuOToqOiopCisJIyAidW5hbWUgLW0iIGlzIG5vdCBjb25zaXN0ZW50LCBzbyB1c2UgJGNwdXR5cGUgaW5zdGVhZC4gMzg2CisJIyBpcyBjb252ZXJ0ZWQgdG8gaTM4NiBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciB4ODYKKwkjIG9wZXJhdGluZyBzeXN0ZW1zLgorCWlmIHRlc3QgIiRjcHV0eXBlIiA9ICIzODYiOyB0aGVuCisJICAgIFVOQU1FX01BQ0hJTkU9aTM4NgorCWVsc2UKKwkgICAgVU5BTUVfTUFDSElORT0iJGNwdXR5cGUiCisJZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1wbGFuOQorCWV4aXQgOzsKKyAgICAqOlRPUFMtMTA6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMTAKKwlleGl0IDs7CisgICAgKjpURU5FWDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRlbmV4CisJZXhpdCA7OworICAgIEtTMTA6VE9QUy0yMDoqOiogfCBLTDEwOlRPUFMtMjA6KjoqIHwgVFlQRTQ6VE9QUy0yMDoqOiopCisJZWNobyBwZHAxMC1kZWMtdG9wczIwCisJZXhpdCA7OworICAgIFhLTC0xOlRPUFMtMjA6KjoqIHwgVFlQRTU6VE9QUy0yMDoqOiopCisJZWNobyBwZHAxMC14a2wtdG9wczIwCisJZXhpdCA7OworICAgICo6VE9QUy0yMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMyMAorCWV4aXQgOzsKKyAgICAqOklUUzoqOiopCisJZWNobyBwZHAxMC11bmtub3duLWl0cworCWV4aXQgOzsKKyAgICBTRUk6KjoqOlNFSVVYKQorCWVjaG8gbWlwcy1zZWktc2VpdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RHJhZ29uRmx5Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1kcmFnb25mbHlgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgCisJZXhpdCA7OworICAgICo6KlZNUzoqOiopCisJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgorCSAgICBBKikgZWNobyBhbHBoYS1kZWMtdm1zIDsgZXhpdCA7OworCSAgICBJKikgZWNobyBpYTY0LWRlYy12bXMgOyBleGl0IDs7CisJICAgIFYqKSBlY2hvIHZheC1kZWMtdm1zIDsgZXhpdCA7OworCWVzYWMgOzsKKyAgICAqOlhFTklYOio6U3lzVikKKwllY2hvIGkzODYtcGMteGVuaXgKKwlleGl0IDs7CisgICAgaSo4Njpza3lvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNreW9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfWAgfCBzZWQgLWUgJ3MvIC4qJC8vJworCWV4aXQgOzsKKyAgICBpKjg2OnJkb3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1yZG9zCisJZXhpdCA7OworICAgIGkqODY6QVJPUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWFyb3MKKwlleGl0IDs7CisgICAgeDg2XzY0OlZNa2VybmVsOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1lc3gKKwlleGl0IDs7Citlc2FjCisKK2NhdCA+JjIgPDxFT0YKKyQwOiB1bmFibGUgdG8gZ3Vlc3Mgc3lzdGVtIHR5cGUKKworVGhpcyBzY3JpcHQsIGxhc3QgbW9kaWZpZWQgJHRpbWVzdGFtcCwgaGFzIGZhaWxlZCB0byByZWNvZ25pemUKK3RoZSBvcGVyYXRpbmcgc3lzdGVtIHlvdSBhcmUgdXNpbmcuIEl0IGlzIGFkdmlzZWQgdGhhdCB5b3UKK2Rvd25sb2FkIHRoZSBtb3N0IHVwIHRvIGRhdGUgdmVyc2lvbiBvZiB0aGUgY29uZmlnIHNjcmlwdHMgZnJvbQorCisgIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3M7aGI9SEVBRAorYW5kCisgIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKKworSWYgdGhlIHZlcnNpb24geW91IHJ1biAoJDApIGlzIGFscmVhZHkgdXAgdG8gZGF0ZSwgcGxlYXNlCitzZW5kIHRoZSBmb2xsb3dpbmcgZGF0YSBhbmQgYW55IGluZm9ybWF0aW9uIHlvdSB0aGluayBtaWdodCBiZQorcGVydGluZW50IHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPiBpbiBvcmRlciB0byBwcm92aWRlIHRoZSBuZWVkZWQKK2luZm9ybWF0aW9uIHRvIGhhbmRsZSB5b3VyIHN5c3RlbS4KKworY29uZmlnLmd1ZXNzIHRpbWVzdGFtcCA9ICR0aW1lc3RhbXAKKwordW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisKKy91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGxgCisvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGxgCisKK2hvc3RpbmZvICAgICAgICAgICAgICAgPSBgKGhvc3RpbmZvKSAyPi9kZXYvbnVsbGAKKy9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYAorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGxgCisvYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsYAorL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGxgCisvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbGAKKworVU5BTUVfTUFDSElORSA9ICR7VU5BTUVfTUFDSElORX0KK1VOQU1FX1JFTEVBU0UgPSAke1VOQU1FX1JFTEVBU0V9CitVTkFNRV9TWVNURU0gID0gJHtVTkFNRV9TWVNURU19CitVTkFNRV9WRVJTSU9OID0gJHtVTkFNRV9WRVJTSU9OfQorRU9GCisKK2V4aXQgMQorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKKyMgdGltZS1zdGFtcC1lbmQ6ICInIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9jb25maWcvY29uZmlnLnJwYXRoIGIvY29uZmlnL2NvbmZpZy5ycGF0aApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMzhiOTE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnL2NvbmZpZy5ycGF0aApAQCAtMCwwICsxLDY5MCBAQAorIyEgL2Jpbi9zaAorIyBPdXRwdXQgYSBzeXN0ZW0gZGVwZW5kZW50IHNldCBvZiB2YXJpYWJsZXMsIGRlc2NyaWJpbmcgaG93IHRvIHNldCB0aGUKKyMgcnVuIHRpbWUgc2VhcmNoIHBhdGggb2Ygc2hhcmVkIGxpYnJhcmllcyBpbiBhbiBleGVjdXRhYmxlLgorIworIyAgIENvcHlyaWdodCAxOTk2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgVGFrZW4gZnJvbSBHTlUgbGlidG9vbCwgMjAwMQorIyAgIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisjCisjICAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgICB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgICBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIGZpbGUgaXMgdGhlIGNhbm9uaWNhbCBob3N0IHNwZWNpZmljYXRpb24sCisjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yCisjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIENDLCBHQ0MsIExERkxBR1MsIExELCB3aXRoX2dudV9sZAorIyBzaG91bGQgYmUgc2V0IGJ5IHRoZSBjYWxsZXIuCisjCisjIFRoZSBzZXQgb2YgZGVmaW5lZCB2YXJpYWJsZXMgaXMgYXQgdGhlIGVuZCBvZiB0aGlzIHNjcmlwdC4KKworIyBLbm93biBsaW1pdGF0aW9uczoKKyMgLSBPbiBJUklYIDYuNSB3aXRoIENDPSJjYyIsIHRoZSBydW4gdGltZSBzZWFyY2ggcGF0Y2ggbXVzdCBub3QgYmUgbG9uZ2VyCisjICAgdGhhbiAyNTYgYnl0ZXMsIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgZHVtcCBjb3JlLiBUaGUgb25seQorIyAgIGtub3duIHdvcmthcm91bmQgaXMgdG8gY2hvb3NlIHNob3J0ZXIgZGlyZWN0b3J5IG5hbWVzIGZvciB0aGUgYnVpbGQKKyMgICBkaXJlY3RvcnkgYW5kL29yIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSAnLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCitzaHJleHQ9LnNvCisKK2hvc3Q9IiQxIgoraG9zdF9jcHU9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCitob3N0X3ZlbmRvcj1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKK2hvc3Rfb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfQ0NfQkFTRU5BTUUuCisKK2ZvciBjY190ZW1wIGluICRDQyIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YGVjaG8gIiRjY190ZW1wIiB8IHNlZCAtZSAncyVeLiovJSUnYAorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0NPTVBJTEVSX1BJQy4KKword2w9CitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB3bD0nLVdsLCcKK2Vsc2UKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgOzsKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIGVjYyopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgaWNjKiB8IGlmb3J0KikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBsZjk1KikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBuYWdmb3IqKQorICAgICAgICAgIHdsPSctV2wsLVdsLCwnCisgICAgICAgICAgOzsKKyAgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGNjYyopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgeGwqIHwgYmd4bCogfCBiZ2YqIHwgbXBpeGwqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGNvbW8pCisgICAgICAgICAgd2w9Jy1sb3B0PScKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAgICAgICAgICAgKlN1blwgRiogfCAqU3VuKkZvcnRyYW4qKQorICAgICAgICAgICAgICB3bD0KKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICpTdW5cIEMqKQorICAgICAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgbmV3c29zNikKKyAgICAgIDs7CisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHJkb3MqKQorICAgICAgOzsKKyAgICBzb2xhcmlzKikKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAgICAgICAgICB3bD0nLVFvcHRpb24gbGQgJworICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIHdsPSctUW9wdGlvbiBsZCAnCisgICAgICA7OworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICA7OworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgdW5pY29zKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICB1dHM0KikKKyAgICAgIDs7CisgIGVzYWMKK2ZpCisKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfTElOS0VSX1NITElCUy4KKworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CitoYXJkY29kZV9kaXJlY3Q9bm8KK2hhcmRjb2RlX21pbnVzX0w9bm8KKworY2FzZSAiJGhvc3Rfb3MiIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworZXNhYworCitsZF9zaGxpYnM9eWVzCitpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCisgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICMgVW5saWtlIGxpYnRvb2wsIHdlIHVzZSAtcnBhdGggaGVyZSwgbm90IC0tcnBhdGgsIHNpbmNlIHRoZSBkb2N1bWVudGVkCisgICMgb3B0aW9uIG9mIEdOVSBsZCBpcyBjYWxsZWQgLXJwYXRoLCBub3QgLS1ycGF0aC4KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXhbMy05XSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgcG93ZXJwYykKKyAgICAgICAgICA7OworICAgICAgICBtNjhrKQorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBoYWlrdSopCisgICAgICA7OworICAgIGludGVyaXhbMy05XSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICA7OworICAgIGdudSogfCBsaW51eCogfCB0cGYqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBuZXRic2QqKQorICAgICAgOzsKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xWzAtNV0uKikKKyAgICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxkX3NobGlicz1ubworICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAiJGxkX3NobGlicyIgPSBubzsgdGhlbgorICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgIGZpCitlbHNlCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGFpeDMqKQorICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgICAjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKyAgICAgICAgIyBicm9rZW4gY29sbGVjdDIuCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisgICAgYWl4WzQtOV0qKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgZWxzZQorICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKyAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQorICAgICAgICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworICAgICAgICAgICAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKyAgICAgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKyAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZG9uZQorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKKyAgICAgICAgICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisgICAgICAgICAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAorICAgICAgICAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorICAgICAgICAgICAgOgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgIyBCZWdpbiBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorICAgICAgZWNobyAnaW50IG1haW4gKCkgeyByZXR1cm4gMDsgfScgPiBjb25mdGVzdC5jCisgICAgICAke0NDfSAke0xERkxBR1N9IGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QKKyAgICAgIGFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0IDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYAorICAgICAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICAgICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgICAgICAgIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIgorICAgICAgZmkKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LmMgY29uZnRlc3QKKyAgICAgICMgRW5kIF9MVF9BQ19TWVNfTElCUEFUSF9BSVguCisgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgIGVsc2UKKyAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKyAgICAgICAgZWxzZQorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgOzsKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgcG93ZXJwYykKKyAgICAgICAgICA7OworICAgICAgICBtNjhrKQorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGJzZGlbNDVdKikKKyAgICAgIDs7CisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKyAgICAgIGxpYmV4dD1saWIKKyAgICAgIDs7CisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaWYgeyBjYXNlICRjY19iYXNlbmFtZSBpbiBpZm9ydCopIHRydWU7OyAqKSB0ZXN0ICIkR0NDIiA9IHllczs7IGVzYWM7IH07IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGRndXgqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgOzsKKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgZnJlZWJzZDIqKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICBocHV4OSopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICA7OworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgbmV0YnNkKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgbmV3c29zNikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgOzsKKyAgICBvcGVuYnNkKikKKyAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgICAgZWxzZQorICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKyAgICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgb3MyKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIG9zZjMqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIG9zZjQqIHwgb3NmNSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBlbHNlCisgICAgICAgICMgQm90aCBjYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBzb2xhcmlzKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICAgICAgc25pKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisgICAgICAgICAgOzsKKyAgICAgICAgc2llbWVucykKKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgICAgICA7OworICAgICAgICBtb3Rvcm9sYSkKKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIHN5c3Y0LjMqKQorICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisgICAgICAgIGxkX3NobGlicz15ZXMKKyAgICAgIGZpCisgICAgICA7OworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCisgICAgICA7OworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgICA7OworICAgIHV0czQqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgOzsKKyAgICAqKQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICBlc2FjCitmaQorCisjIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcworIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIuCisjIFVubGlrZSBsaWJ0b29sLm00LCBoZXJlIHdlIGRvbid0IGNhcmUgYWJvdXQgX2FsbF8gbmFtZXMgb2YgdGhlIGxpYnJhcnksIGJ1dAorIyBvbmx5IGFib3V0IHRoZSBvbmUgdGhlIGxpbmtlciBmaW5kcyB3aGVuIHBhc3NlZCAtbE5BTUUuIFRoaXMgaXMgdGhlIGxhc3QKKyMgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNCwgb3IgcG9zc2libHkgdHdvIG9mIHRoZW0gaWYgdGhlCisjIGxpbmtlciBoYXMgc3BlY2lhbCBzZWFyY2ggcnVsZXMuCitsaWJyYXJ5X25hbWVzX3NwZWM9ICAgICAgIyB0aGUgbGFzdCBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworY2FzZSAiJGhvc3Rfb3MiIGluCisgIGFpeDMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKKyAgICA7OworICBhaXhbNC05XSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgYW1pZ2FvcyopCisgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICAgcG93ZXJwYyopCisgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JyA7OworICAgICAgbTY4aykKKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJyA7OworICAgIGVzYWMKKyAgICA7OworICBiZW9zKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBic2RpWzQ1XSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIHNocmV4dD0uZGxsCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYSAkbGlibmFtZS5saWInCisgICAgOzsKKyAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICBzaHJleHQ9LmR5bGliCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgZGd1eCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgZnJlZWJzZFsxMjNdKikKKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JyA7OworICAgICAgKikKKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnIDs7CisgICAgZXNhYworICAgIDs7CisgIGdudSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaGFpa3UqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBpYTY0KikKKyAgICAgICAgc2hyZXh0PS5zbworICAgICAgICA7OworICAgICAgaHBwYSo2NCopCisgICAgICAgIHNocmV4dD0uc2wKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIHNocmV4dD0uc2wKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaW50ZXJpeFszLTldKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgY2FzZSAkTEQgaW4KKyAgICAgICAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7CisgICAgICAgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIDs7CisgICAgICAgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IDs7CisgICAgICAgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgIGxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgICAgOzsKKyAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGtuZXRic2QqLWdudSkKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBuZXRic2QqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG5ld3NvczYpCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgKm50byogfCAqcW54KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBvcGVuYnNkKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCisgICAgOzsKKyAgb3MyKikKKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgIHNocmV4dD0uZGxsCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgIDs7CisgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICByZG9zKikKKyAgICA7OworICBzb2xhcmlzKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBzdW5vczQqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICA7OworICBzeXN2NCB8IHN5c3Y0LjMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN5c3Y0Kk1QKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICB0cGYqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHV0czQqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7Citlc2FjCisKK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFsiYCRcXF1cKS9cXFwxL2cnCitlc2NhcGVkX3dsPWBlY2hvICJYJHdsIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCitzaGxpYmV4dD1gZWNobyAiJHNocmV4dCIgfCBzZWQgLWUgJ3MsXlwuLCwnYAorZXNjYXBlZF9saWJuYW1lX3NwZWM9YGVjaG8gIlgkbGlibmFtZV9zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCitlc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYz1gZWNobyAiWCRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKK2VzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz1gZWNobyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisKK0xDX0FMTD1DIHNlZCAtZSAncy9eXChbYS16QS1aMC05X10qXCk9L2FjbF9jdl9cMT0vJyA8PEVPRgorCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0iJGVzY2FwZWRfd2wiCisKKyMgU3RhdGljIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiYSIpLgorbGliZXh0PSIkbGliZXh0IgorCisjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgInNvIikuCitzaGxpYmV4dD0iJHNobGliZXh0IgorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSIkZXNjYXBlZF9saWJuYW1lX3NwZWMiCisKKyMgTGlicmFyeSBuYW1lcyB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLgorbGlicmFyeV9uYW1lc19zcGVjPSIkZXNjYXBlZF9saWJyYXJ5X25hbWVzX3NwZWMiCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGVzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSIkaGFyZGNvZGVfZGlyZWN0IgorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0iJGhhcmRjb2RlX21pbnVzX0wiCisKK0VPRgpkaWZmIC0tZ2l0IGEvY29uZmlnL2NvbmZpZy5zdWIgYi9jb25maWcvY29uZmlnLnN1YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjU0ZDAzCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnL2NvbmZpZy5zdWIKQEAgLTAsMCArMSwxNzk0IEBACisjISAvYmluL3NoCisjIENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBzdWJyb3V0aW5lIHNjcmlwdC4KKyMgICBDb3B5cmlnaHQgMTk5Mi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMTQtMDUtMDEnCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdAorIyBwcm9ncmFtLiAgVGhpcyBFeGNlcHRpb24gaXMgYW4gYWRkaXRpb25hbCBwZXJtaXNzaW9uIHVuZGVyIHNlY3Rpb24gNworIyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQTHYzIikuCisKKworIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHdpdGggYSBDaGFuZ2VMb2cgZW50cnkgdG8gY29uZmlnLXBhdGNoZXNAZ251Lm9yZy4KKyMKKyMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCisjIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KKyMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCisjIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCisKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKKworIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKKyMgYW5kIHJlY29nbml6ZSBhbGwgdGhlIENQVSB0eXBlcywgc3lzdGVtIHR5cGVzIGFuZCBhbGlhc2VzCisjIHRoYXQgYXJlIG1lYW5pbmdmdWwgd2l0aCAqYW55KiBHTlUgc29mdHdhcmUuCisjIEVhY2ggcGFja2FnZSBpcyByZXNwb25zaWJsZSBmb3IgcmVwb3J0aW5nIHdoaWNoIHZhbGlkIGNvbmZpZ3VyYXRpb25zCisjIGl0IGRvZXMgbm90IHN1cHBvcnQuICBUaGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBkaXN0aW5ndWlzaAorIyBhIGZhaWx1cmUgdG8gc3VwcG9ydCBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIG1lYW5pbmdsZXNzCisjIGNvbmZpZ3VyYXRpb24uCisKKyMgVGhlIGdvYWwgb2YgdGhpcyBmaWxlIGlzIHRvIG1hcCBhbGwgdGhlIHZhcmlvdXMgdmFyaWF0aW9ucyBvZiBhIGdpdmVuCisjIG1hY2hpbmUgc3BlY2lmaWNhdGlvbiBpbnRvIGEgc2luZ2xlIHNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yIGluIHNvbWUgY2FzZXMsIHRoZSBuZXdlciBmb3VyLXBhcnQgZm9ybToKKyMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisjIEl0IGlzIHdyb25nIHRvIGVjaG8gYW55IG90aGVyIHR5cGUgb2Ygc3BlY2lmaWNhdGlvbi4KKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0gQ1BVLU1GUi1PUFNZUworICAgICAgICQwIFtPUFRJT05dIEFMSUFTCisKK0Nhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gbmFtZS4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKKworQ29weXJpZ2h0IDE5OTItMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKKworaGVscD0iCitUcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKKyMgUGFyc2UgY29tbWFuZCBsaW5lCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCisgICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7CisgICAgLS12ZXJzaW9uIHwgLXYgKQorICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKKyAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgICBzaGlmdDsgYnJlYWsgOzsKKyAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCisgICAgICAgYnJlYWsgOzsKKyAgICAtKiApCisgICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIgorICAgICAgIGV4aXQgMSA7OworCisgICAgKmxvY2FsKikKKyAgICAgICAjIEZpcnN0IHBhc3MgdGhyb3VnaCBhbnkgbG9jYWwgbWFjaGluZSB0eXBlcy4KKyAgICAgICBlY2hvICQxCisgICAgICAgZXhpdCA7OworCisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitjYXNlICQjIGluCisgMCkgZWNobyAiJG1lOiBtaXNzaW5nIGFyZ3VtZW50JGhlbHAiID4mMgorICAgIGV4aXQgMTs7CisgMSkgOzsKKyAqKSBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworZXNhYworCisjIFNlcGFyYXRlIHdoYXQgdGhlIHVzZXIgZ2F2ZSBpbnRvIENQVS1DT01QQU5ZIGFuZCBPUyBvciBLRVJORUwtT1MgKGlmIGFueSkuCisjIEhlcmUgd2UgbXVzdCByZWNvZ25pemUgYWxsIHRoZSB2YWxpZCBLRVJORUwtT1MgY29tYmluYXRpb25zLgorbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCitjYXNlICRtYXliZV9vcyBpbgorICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1hbmRyb2lkKiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IFwKKyAgbGludXgtbXVzbCogfCBsaW51eC11Y2xpYmMqIHwgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBcCisgIGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBcCisgIGtvcGVuc29sYXJpcyotZ251KiB8IFwKKyAgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQorICAgIG9zPS0kbWF5YmVfb3MKKyAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYAorICAgIDs7CisgIGFuZHJvaWQtbGludXgpCisgICAgb3M9LWxpbnV4LWFuZHJvaWQKKyAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYC11bmtub3duCisgICAgOzsKKyAgKikKKyAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzLy1bXi1dKiQvLydgCisgICAgaWYgWyAkYmFzaWNfbWFjaGluZSAhPSAkMSBdCisgICAgdGhlbiBvcz1gZWNobyAkMSB8IHNlZCAncy8uKi0vLS8nYAorICAgIGVsc2Ugb3M9OyBmaQorICAgIDs7Citlc2FjCisKKyMjIyBMZXQncyByZWNvZ25pemUgY29tbW9uIG1hY2hpbmVzIGFzIG5vdCBiZWluZyBvcGVyYXRpbmcgc3lzdGVtcyBzbworIyMjIHRoYXQgdGhpbmdzIGxpa2UgY29uZmlnLnN1YiBkZWNzdGF0aW9uLTMxMDAgd29yay4gIFdlIGFsc28KKyMjIyByZWNvZ25pemUgc29tZSBtYW51ZmFjdHVyZXJzIGFzIG5vdCBiZWluZyBvcGVyYXRpbmcgc3lzdGVtcywgc28gd2UKKyMjIyBjYW4gcHJvdmlkZSBkZWZhdWx0IG9wZXJhdGluZyBzeXN0ZW1zIGJlbG93LgorY2FzZSAkb3MgaW4KKwktc3VuKm9zKikKKwkJIyBQcmV2ZW50IGZvbGxvd2luZyBjbGF1c2UgZnJvbSBoYW5kbGluZyB0aGlzIGludmFsaWQgaW5wdXQuCisJCTs7CisJLWRlYyogfCAtbWlwcyogfCAtc2VxdWVudCogfCAtZW5jb3JlKiB8IC1wYzUzMiogfCAtc2dpKiB8IC1zb255KiB8IFwKKwktYXR0KiB8IC03MzAwKiB8IC0zMzAwKiB8IC1kZWx0YSogfCAtbW90b3JvbGEqIHwgLXN1blsyMzRdKiB8IFwKKwktdW5pY29tKiB8IC1pYm0qIHwgLW5leHQgfCAtaHAgfCAtaXNpKiB8IC1hcG9sbG8gfCAtYWx0b3MqIHwgXAorCS1jb252ZXJnZW50KiB8IC1uY3IqIHwgLW5ld3MgfCAtMzIqIHwgLTM2MDAqIHwgLTMxMDAqIHwgLWhpdGFjaGkqIHxcCisJLWNbMTIzXSogfCAtY29udmV4KiB8IC1zdW4gfCAtY3JkcyB8IC1vbXJvbiogfCAtZGcgfCAtdWx0cmEgfCAtdHRpKiB8IFwKKwktaGFycmlzIHwgLWRvbHBoaW4gfCAtaGlnaGxldmVsIHwgLWdvdWxkIHwgLWNibSB8IC1ucyB8IC1tYXNzY29tcCB8IFwKKwktYXBwbGUgfCAtYXhpcyB8IC1rbnV0aCB8IC1jcmF5IHwgLW1pY3JvYmxhemUqKQorCQlvcz0KKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1ibHVlZ2VuZSopCisJCW9zPS1jbmsKKwkJOzsKKwktc2ltIHwgLWNpc2NvIHwgLW9raSB8IC13ZWMgfCAtd2luYm9uZCkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktc2NvdXQpCisJCTs7CisJLXdycykKKwkJb3M9LXZ4d29ya3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1jaG9ydXNvcyopCisJCW9zPS1jaG9ydXNvcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWNob3J1c3JkYikKKwkJb3M9LWNob3J1c3JkYgorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWhpdXgqKQorCQlvcz0taGl1eHdlMgorCQk7OworCS1zY282KQorCQlvcz0tc2NvNXY2CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNSkKKwkJb3M9LXNjbzMuMnY1CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNCkKKwkJb3M9LXNjbzMuMnY0CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvMy4yLls0LTldKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzL3NjbzMuMi4vc2NvMy4ydi8nYAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMnZbNC05XSopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNXY2KikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28qKQorCQlvcz0tc2NvMy4ydjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS11ZGsqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWlzYykKKwkJb3M9LWlzYzIuMgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWNsaXgqKQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaW50ZXJncmFwaAorCQk7OworCS1pc2MqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWx5bngqMTc4KQorCQlvcz0tbHlueG9zMTc4CisJCTs7CisJLWx5bngqNSkKKwkJb3M9LWx5bnhvczUKKwkJOzsKKwktbHlueCopCisJCW9zPS1seW54b3MKKwkJOzsKKwktcHR4KikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1zZXF1ZW50LydgCisJCTs7CisJLXdpbmRvd3NudCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy93aW5kb3dzbnQvd2lubnQvJ2AKKwkJOzsKKwktcHNvcyopCisJCW9zPS1wc29zCisJCTs7CisJLW1pbnQgfCAtbWludFswLTldKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCisJCW9zPS1taW50CisJCTs7Citlc2FjCisKKyMgRGVjb2RlIGFsaWFzZXMgZm9yIGNlcnRhaW4gQ1BVLUNPTVBBTlkgY29tYmluYXRpb25zLgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUuCisJIyBTb21lIGFyZSBvbWl0dGVkIGhlcmUgYmVjYXVzZSB0aGV5IGhhdmUgc3BlY2lhbCBtZWFuaW5ncyBiZWxvdy4KKwkxNzUwYSB8IDU4MCBcCisJfCBhMjlrIFwKKwl8IGFhcmNoNjQgfCBhYXJjaDY0X2JlIFwKKwl8IGFscGhhIHwgYWxwaGFldls0LThdIHwgYWxwaGFldjU2IHwgYWxwaGFldjZbNzhdIHwgYWxwaGFwY2E1WzY3XSBcCisJfCBhbHBoYTY0IHwgYWxwaGE2NGV2WzQtOF0gfCBhbHBoYTY0ZXY1NiB8IGFscGhhNjRldjZbNzhdIHwgYWxwaGE2NHBjYTVbNjddIFwKKwl8IGFtMzNfMi4wIFwKKwl8IGFyYyB8IGFyY2ViIFwKKwl8IGFybSB8IGFybVtibF1lIHwgYXJtZVtsYl0gfCBhcm12WzItOF0gfCBhcm12WzMtOF1bbGJdIHwgYXJtdjdbYXJtXSBcCisJfCBhdnIgfCBhdnIzMiBcCisJfCBiZTMyIHwgYmU2NCBcCisJfCBiZmluIFwKKwl8IGM0eCB8IGM4MDUxIHwgY2xpcHBlciBcCisJfCBkMTB2IHwgZDMwdiB8IGRseCB8IGRzcDE2eHggXAorCXwgZXBpcGhhbnkgXAorCXwgZmlkbyB8IGZyMzAgfCBmcnYgXAorCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKKwl8IGhleGFnb24gXAorCXwgaTM3MCB8IGk4NjAgfCBpOTYwIHwgaWE2NCBcCisJfCBpcDJrIHwgaXEyMDAwIFwKKwl8IGsxb20gXAorCXwgbGUzMiB8IGxlNjQgXAorCXwgbG0zMiBcCisJfCBtMzJjIHwgbTMyciB8IG0zMnJsZSB8IG02ODAwMCB8IG02OGsgfCBtODhrIFwKKwl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtaWNyb2JsYXplZWwgfCBtY29yZSB8IG1lcCB8IG1ldGFnIFwKKwl8IG1pcHMgfCBtaXBzYmUgfCBtaXBzZWIgfCBtaXBzZWwgfCBtaXBzbGUgXAorCXwgbWlwczE2IFwKKwl8IG1pcHM2NCB8IG1pcHM2NGVsIFwKKwl8IG1pcHM2NG9jdGVvbiB8IG1pcHM2NG9jdGVvbmVsIFwKKwl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJfCBtaXBzNjRyNTkwMCB8IG1pcHM2NHI1OTAwZWwgXAorCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKKwl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKKwl8IG1pcHM2NHZyNDMwMCB8IG1pcHM2NHZyNDMwMGVsIFwKKwl8IG1pcHM2NHZyNTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKKwl8IG1pcHM2NHZyNTkwMCB8IG1pcHM2NHZyNTkwMGVsIFwKKwl8IG1pcHNpc2EzMiB8IG1pcHNpc2EzMmVsIFwKKwl8IG1pcHNpc2EzMnIyIHwgbWlwc2lzYTMycjJlbCBcCisJfCBtaXBzaXNhMzJyNiB8IG1pcHNpc2EzMnI2ZWwgXAorCXwgbWlwc2lzYTY0IHwgbWlwc2lzYTY0ZWwgXAorCXwgbWlwc2lzYTY0cjIgfCBtaXBzaXNhNjRyMmVsIFwKKwl8IG1pcHNpc2E2NHI2IHwgbWlwc2lzYTY0cjZlbCBcCisJfCBtaXBzaXNhNjRzYjEgfCBtaXBzaXNhNjRzYjFlbCBcCisJfCBtaXBzaXNhNjRzcjcxayB8IG1pcHNpc2E2NHNyNzFrZWwgXAorCXwgbWlwc3I1OTAwIHwgbWlwc3I1OTAwZWwgXAorCXwgbWlwc3R4MzkgfCBtaXBzdHgzOWVsIFwKKwl8IG1uMTAyMDAgfCBtbjEwMzAwIFwKKwl8IG1veGllIFwKKwl8IG10IFwKKwl8IG1zcDQzMCBcCisJfCBuZHMzMiB8IG5kczMybGUgfCBuZHMzMmJlIFwKKwl8IG5pb3MgfCBuaW9zMiB8IG5pb3MyZWIgfCBuaW9zMmVsIFwKKwl8IG5zMTZrIHwgbnMzMmsgXAorCXwgb3BlbjggfCBvcjFrIHwgb3Ixa25kIHwgb3IzMiBcCisJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAorCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIFwKKwl8IHB5cmFtaWQgXAorCXwgcmw3OCB8IHJ4IFwKKwl8IHNjb3JlIFwKKwl8IHNoIHwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMjNdZSB8IHNoWzM0XWViIHwgc2hlYiB8IHNoYmUgfCBzaGxlIHwgc2hbMTIzNF1sZSB8IHNoM2VsZSBcCisJfCBzaDY0IHwgc2g2NGxlIFwKKwl8IHNwYXJjIHwgc3BhcmM2NCB8IHNwYXJjNjRiIHwgc3BhcmM2NHYgfCBzcGFyYzg2eCB8IHNwYXJjbGV0IHwgc3BhcmNsaXRlIFwKKwl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5diBcCisJfCBzcHUgXAorCXwgdGFob2UgfCB0aWM0eCB8IHRpYzU0eCB8IHRpYzU1eCB8IHRpYzZ4IHwgdGljODAgfCB0cm9uIFwKKwl8IHViaWNvbTMyIFwKKwl8IHY4NTAgfCB2ODUwZSB8IHY4NTBlMSB8IHY4NTBlMiB8IHY4NTBlcyB8IHY4NTBlMnYzIFwKKwl8IHdlMzJrIFwKKwl8IHg4NiB8IHhjMTZ4IHwgeHN0b3JteTE2IHwgeHRlbnNhIFwKKwl8IHo4ayB8IHo4MCkKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCTs7CisJYzU0eCkKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtdW5rbm93bgorCQk7OworCWM1NXgpCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LXVua25vd24KKwkJOzsKKwljNngpCisJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IG02OGhjczEyeCB8IG52cHR4IHwgcGljb2NoaXApCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbm9uZQorCQk7OworCW04ODExMCB8IG02ODBbMTIzNDZdMCB8IG02ODM/MiB8IG02ODM2MCB8IG01MjAwIHwgdjcwIHwgdzY1IHwgejhrKQorCQk7OworCW1zMSkKKwkJYmFzaWNfbWFjaGluZT1tdC11bmtub3duCisJCTs7CisKKwlzdHJvbmdhcm0gfCB0aHVtYiB8IHhzY2FsZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQk7OworCXhnYXRlKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LW5vbmUKKwkJOzsKKwl4c2NhbGVlYikKKwkJYmFzaWNfbWFjaGluZT1hcm1lYi11bmtub3duCisJCTs7CisKKwl4c2NhbGVlbCkKKwkJYmFzaWNfbWFjaGluZT1hcm1lbC11bmtub3duCisJCTs7CisKKwkjIFdlIHVzZSBgcGMnIHJhdGhlciB0aGFuIGB1bmtub3duJworCSMgYmVjYXVzZSAoMSkgdGhhdCdzIHdoYXQgdGhleSBub3JtYWxseSBhcmUsIGFuZAorCSMgKDIpIHRoZSB3b3JkICJ1bmtub3duIiB0ZW5kcyB0byBjb25mdXNlIGJlZ2lubmluZyB1c2Vycy4KKwlpKjg2IHwgeDg2XzY0KQorCSAgYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS1wYworCSAgOzsKKwkjIE9iamVjdCBpZiBtb3JlIHRoYW4gb25lIGNvbXBhbnkgbmFtZSB3b3JkLgorCSotKi0qKQorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IG1hY2hpbmUgXGAkYmFzaWNfbWFjaGluZVwnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRoIGNvbXBhbnkgbmFtZS4KKwk1ODAtKiBcCisJfCBhMjlrLSogXAorCXwgYWFyY2g2NC0qIHwgYWFyY2g2NF9iZS0qIFwKKwl8IGFscGhhLSogfCBhbHBoYWV2WzQtOF0tKiB8IGFscGhhZXY1Ni0qIHwgYWxwaGFldjZbNzhdLSogXAorCXwgYWxwaGE2NC0qIHwgYWxwaGE2NGV2WzQtOF0tKiB8IGFscGhhNjRldjU2LSogfCBhbHBoYTY0ZXY2Wzc4XS0qIFwKKwl8IGFscGhhcGNhNVs2N10tKiB8IGFscGhhNjRwY2E1WzY3XS0qIHwgYXJjLSogfCBhcmNlYi0qIFwKKwl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAorCXwgYXZyLSogfCBhdnIzMi0qIFwKKwl8IGJlMzItKiB8IGJlNjQtKiBcCisJfCBiZmluLSogfCBiczIwMDAtKiBcCisJfCBjWzEyM10qIHwgYzMwLSogfCBbY2p0XTkwLSogfCBjNHgtKiBcCisJfCBjODA1MS0qIHwgY2xpcHBlci0qIHwgY3JheW52LSogfCBjeWRyYS0qIFwKKwl8IGQxMHYtKiB8IGQzMHYtKiB8IGRseC0qIFwKKwl8IGVseHNpLSogXAorCXwgZjMwWzAxXS0qIHwgZjcwMC0qIHwgZmlkby0qIHwgZnIzMC0qIHwgZnJ2LSogfCBmeDgwLSogXAorCXwgaDgzMDAtKiB8IGg4NTAwLSogXAorCXwgaHBwYS0qIHwgaHBwYTEuWzAxXS0qIHwgaHBwYTIuMC0qIHwgaHBwYTIuMFtud10tKiB8IGhwcGE2NC0qIFwKKwl8IGhleGFnb24tKiBcCisJfCBpKjg2LSogfCBpODYwLSogfCBpOTYwLSogfCBpYTY0LSogXAorCXwgaXAyay0qIHwgaXEyMDAwLSogXAorCXwgazFvbS0qIFwKKwl8IGxlMzItKiB8IGxlNjQtKiBcCisJfCBsbTMyLSogXAorCXwgbTMyYy0qIHwgbTMyci0qIHwgbTMycmxlLSogXAorCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKKwl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiB8IG1ldGFnLSogXAorCXwgbWljcm9ibGF6ZS0qIHwgbWljcm9ibGF6ZWVsLSogXAorCXwgbWlwcy0qIHwgbWlwc2JlLSogfCBtaXBzZWItKiB8IG1pcHNlbC0qIHwgbWlwc2xlLSogXAorCXwgbWlwczE2LSogXAorCXwgbWlwczY0LSogfCBtaXBzNjRlbC0qIFwKKwl8IG1pcHM2NG9jdGVvbi0qIHwgbWlwczY0b2N0ZW9uZWwtKiBcCisJfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKKwl8IG1pcHM2NHI1OTAwLSogfCBtaXBzNjRyNTkwMGVsLSogXAorCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCisJfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAorCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCisJfCBtaXBzNjR2cjU5MDAtKiB8IG1pcHM2NHZyNTkwMGVsLSogXAorCXwgbWlwc2lzYTMyLSogfCBtaXBzaXNhMzJlbC0qIFwKKwl8IG1pcHNpc2EzMnIyLSogfCBtaXBzaXNhMzJyMmVsLSogXAorCXwgbWlwc2lzYTMycjYtKiB8IG1pcHNpc2EzMnI2ZWwtKiBcCisJfCBtaXBzaXNhNjQtKiB8IG1pcHNpc2E2NGVsLSogXAorCXwgbWlwc2lzYTY0cjItKiB8IG1pcHNpc2E2NHIyZWwtKiBcCisJfCBtaXBzaXNhNjRyNi0qIHwgbWlwc2lzYTY0cjZlbC0qIFwKKwl8IG1pcHNpc2E2NHNiMS0qIHwgbWlwc2lzYTY0c2IxZWwtKiBcCisJfCBtaXBzaXNhNjRzcjcxay0qIHwgbWlwc2lzYTY0c3I3MWtlbC0qIFwKKwl8IG1pcHNyNTkwMC0qIHwgbWlwc3I1OTAwZWwtKiBcCisJfCBtaXBzdHgzOS0qIHwgbWlwc3R4MzllbC0qIFwKKwl8IG1taXgtKiBcCisJfCBtdC0qIFwKKwl8IG1zcDQzMC0qIFwKKwl8IG5kczMyLSogfCBuZHMzMmxlLSogfCBuZHMzMmJlLSogXAorCXwgbmlvcy0qIHwgbmlvczItKiB8IG5pb3MyZWItKiB8IG5pb3MyZWwtKiBcCisJfCBub25lLSogfCBucDEtKiB8IG5zMTZrLSogfCBuczMyay0qIFwKKwl8IG9wZW44LSogXAorCXwgb3IxayotKiBcCisJfCBvcmlvbi0qIFwKKwl8IHBkcDEwLSogfCBwZHAxMS0qIHwgcGotKiB8IHBqbC0qIHwgcG4tKiB8IHBvd2VyLSogXAorCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogXAorCXwgcHlyYW1pZC0qIFwKKwl8IHJsNzgtKiB8IHJvbXAtKiB8IHJzNjAwMC0qIHwgcngtKiBcCisJfCBzaC0qIHwgc2hbMTIzNF0tKiB8IHNoWzI0XWEtKiB8IHNoWzI0XWFlYi0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoZWItKiB8IHNoYmUtKiBcCisJfCBzaGxlLSogfCBzaFsxMjM0XWxlLSogfCBzaDNlbGUtKiB8IHNoNjQtKiB8IHNoNjRsZS0qIFwKKwl8IHNwYXJjLSogfCBzcGFyYzY0LSogfCBzcGFyYzY0Yi0qIHwgc3BhcmM2NHYtKiB8IHNwYXJjODZ4LSogfCBzcGFyY2xldC0qIFwKKwl8IHNwYXJjbGl0ZS0qIFwKKwl8IHNwYXJjdjgtKiB8IHNwYXJjdjktKiB8IHNwYXJjdjliLSogfCBzcGFyY3Y5di0qIHwgc3YxLSogfCBzeD8tKiBcCisJfCB0YWhvZS0qIFwKKwl8IHRpYzMwLSogfCB0aWM0eC0qIHwgdGljNTR4LSogfCB0aWM1NXgtKiB8IHRpYzZ4LSogfCB0aWM4MC0qIFwKKwl8IHRpbGUqLSogXAorCXwgdHJvbi0qIFwKKwl8IHViaWNvbTMyLSogXAorCXwgdjg1MC0qIHwgdjg1MGUtKiB8IHY4NTBlMS0qIHwgdjg1MGVzLSogfCB2ODUwZTItKiB8IHY4NTBlMnYzLSogXAorCXwgdmF4LSogXAorCXwgd2UzMmstKiBcCisJfCB4ODYtKiB8IHg4Nl82NC0qIHwgeGMxNngtKiB8IHhwczEwMC0qIFwKKwl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhKi0qIFwKKwl8IHltcC0qIFwKKwl8IHo4ay0qIHwgejgwLSopCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZSwgd2l0aCBnbG9iIG1hdGNoLgorCXh0ZW5zYSopCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCSMgUmVjb2duaXplIHRoZSB2YXJpb3VzIG1hY2hpbmUgbmFtZXMgYW5kIGFsaWFzZXMgd2hpY2ggc3RhbmQKKwkjIGZvciBhIENQVSB0eXBlIGFuZCBhIGNvbXBhbnkgYW5kIHNvbWV0aW1lcyBldmVuIGFuIE9TLgorCTM4NmJzZCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LWJzZAorCQk7OworCTNiMSB8IDczMDAgfCA3MzAwLWF0dCB8IGF0dC03MzAwIHwgcGM3MzAwIHwgc2FmYXJpIHwgdW5peHBjKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1hdHQKKwkJOzsKKwkzYiopCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJYTI5a2hpZikKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJYWJhY3VzKQorCQliYXNpY19tYWNoaW5lPWFiYWN1cy11bmtub3duCisJCTs7CisJYWRvYmU2OGspCisJCWJhc2ljX21hY2hpbmU9bTY4MDEwLWFkb2JlCisJCW9zPS1zY291dAorCQk7OworCWFsbGlhbnQgfCBmeDgwKQorCQliYXNpY19tYWNoaW5lPWZ4ODAtYWxsaWFudAorCQk7OworCWFsdG9zIHwgYWx0b3MzMDY4KQorCQliYXNpY19tYWNoaW5lPW02OGstYWx0b3MKKwkJOzsKKwlhbTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLW5vbmUKKwkJb3M9LWJzZAorCQk7OworCWFtZDY0KQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQk7OworCWFtZDY0LSopCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYW1kYWhsKQorCQliYXNpY19tYWNoaW5lPTU4MC1hbWRhaGwKKwkJb3M9LXN5c3YKKwkJOzsKKwlhbWlnYSB8IGFtaWdhLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCTs7CisJYW1pZ2FvcyB8IGFtaWdhZG9zKQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tYW1pZ2FvcworCQk7OworCWFtaWdhdW5peCB8IGFtaXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1zeXN2NAorCQk7OworCWFwb2xsbzY4KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCisJCW9zPS1zeXN2CisJCTs7CisJYXBvbGxvNjhic2QpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LWJzZAorCQk7OworCWFyb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tYXJvcworCQk7OworCWF1eCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCW9zPS1hdXgKKwkJOzsKKwliYWxhbmNlKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXNlcXVlbnQKKwkJb3M9LWR5bml4CisJCTs7CisJYmxhY2tmaW4pCisJCWJhc2ljX21hY2hpbmU9YmZpbi11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCWJsYWNrZmluLSopCisJCWJhc2ljX21hY2hpbmU9YmZpbi1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwlibHVlZ2VuZSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LWNuaworCQk7OworCWM1NHgtKikKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljNTV4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYzZ4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNngtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljOTApCisJCWJhc2ljX21hY2hpbmU9YzkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCWNlZ2NjKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1jZWdjYworCQk7OworCWNvbnZleC1jMSkKKwkJYmFzaWNfbWFjaGluZT1jMS1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMikKKwkJYmFzaWNfbWFjaGluZT1jMi1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzIpCisJCWJhc2ljX21hY2hpbmU9YzMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzNCkKKwkJYmFzaWNfbWFjaGluZT1jMzQtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM4KQorCQliYXNpY19tYWNoaW5lPWMzOC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNyYXkgfCBqOTApCisJCWJhc2ljX21hY2hpbmU9ajkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCWNyYXludikKKwkJYmFzaWNfbWFjaGluZT1jcmF5bnYtY3JheQorCQlvcz0tdW5pY29zbXAKKwkJOzsKKwljcjE2IHwgY3IxNi0qKQorCQliYXNpY19tYWNoaW5lPWNyMTYtdW5rbm93bgorCQlvcz0tZWxmCisJCTs7CisJY3JkcyB8IHVub3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1jcmRzCisJCTs7CisJY3Jpc3YzMiB8IGNyaXN2MzItKiB8IGV0cmF4ZnMqKQorCQliYXNpY19tYWNoaW5lPWNyaXN2MzItYXhpcworCQk7OworCWNyaXMgfCBjcmlzLSogfCBldHJheCopCisJCWJhc2ljX21hY2hpbmU9Y3Jpcy1heGlzCisJCTs7CisJY3J4KQorCQliYXNpY19tYWNoaW5lPWNyeC11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKKwlkYTMwIHwgZGEzMC0qKQorCQliYXNpY19tYWNoaW5lPW02OGstZGEzMAorCQk7OworCWRlY3N0YXRpb24gfCBkZWNzdGF0aW9uLTMxMDAgfCBwbWF4IHwgcG1heC0qIHwgcG1pbiB8IGRlYzMxMDAgfCBkZWNzdGF0bikKKwkJYmFzaWNfbWFjaGluZT1taXBzLWRlYworCQk7OworCWRlY3N5c3RlbTEwKiB8IGRlYzEwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMxMAorCQk7OworCWRlY3N5c3RlbTIwKiB8IGRlYzIwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMyMAorCQk7OworCWRlbHRhIHwgMzMwMCB8IG1vdG9yb2xhLTMzMDAgfCBtb3Rvcm9sYS1kZWx0YSBcCisJICAgICAgfCAzMzAwLW1vdG9yb2xhIHwgZGVsdGEtbW90b3JvbGEpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1tb3Rvcm9sYQorCQk7OworCWRlbHRhODgpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1tb3Rvcm9sYQorCQlvcz0tc3lzdjMKKwkJOzsKKwlkaWNvcykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1kaWNvcworCQk7OworCWRqZ3BwKQorCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKKwkJb3M9LW1zZG9zZGpncHAKKwkJOzsKKwlkcHgyMCB8IGRweDIwLSopCisJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWJ1bGwKKwkJb3M9LWJvc3gKKwkJOzsKKwlkcHgyKiB8IGRweDIqLWJ1bGwpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1idWxsCisJCW9zPS1zeXN2MworCQk7OworCWVibW9uMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS1lYm1vbgorCQk7OworCWVseHNpKQorCQliYXNpY19tYWNoaW5lPWVseHNpLWVseHNpCisJCW9zPS1ic2QKKwkJOzsKKwllbmNvcmUgfCB1bWF4IHwgbW1heCkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1lbmNvcmUKKwkJOzsKKwllczE4MDAgfCBPU0U2OGsgfCBvc2U2OGsgfCBvc2UgfCBPU0UpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1lcmljc3NvbgorCQlvcz0tb3NlCisJCTs7CisJZngyODAwKQorCQliYXNpY19tYWNoaW5lPWk4NjAtYWxsaWFudAorCQk7OworCWdlbml4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLW5zCisJCTs7CisJZ21pY3JvKQorCQliYXNpY19tYWNoaW5lPXRyb24tZ21pY3JvCisJCW9zPS1zeXN2CisJCTs7CisJZ28zMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1nbzMyCisJCTs7CisJaDMwNTByKiB8IGhpdXgqKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCWg4MzAwaG1zKQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCWg4MzAweHJheSkKKwkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCisJCW9zPS14cmF5CisJCTs7CisJaDg1MDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDg1MDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaGFycmlzKQorCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCisJCW9zPS1zeXN2MworCQk7OworCWhwMzAwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwMzAwYnNkKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWJzZAorCQk7OworCWhwMzAwaHB1eCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCW9zPS1ocHV4CisJCTs7CisJaHAzazlbMC05XVswLTldIHwgaHA5WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHA5azJbMC05XVswLTldIHwgaHA5azMxWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWhwCisJCTs7CisJaHA5azNbMi05XVswLTldKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJOzsKKwlocDlrNlswLTldWzAtOV0gfCBocDZbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrN1swLTc5XVswLTldIHwgaHA3WzAtNzldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs3OFswLTldIHwgaHA3OFswLTldKQorCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFs2N10xIHwgaHA4WzY3XTEgfCBocDlrODBbMjRdIHwgaHA4MFsyNF0gfCBocDlrOFs3OF05IHwgaHA4Wzc4XTkgfCBocDlrODkzIHwgaHA4OTMpCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMTM2NzldIHwgaHA4WzAtOV1bMTM2NzldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFswLTldWzAtOV0gfCBocDhbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocHBhLW5leHQpCisJCW9zPS1uZXh0c3RlcDMKKwkJOzsKKwlocHBhb3NmKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LW9zZgorCQk7OworCWhwcHJvKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LXByb2VsZgorCQk7OworCWkzNzAtaWJtKiB8IGlibSopCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJOzsKKwlpKjg2djMyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3YzMgorCQk7OworCWkqODZ2NCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdjQKKwkJOzsKKwlpKjg2dikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2CisJCTs7CisJaSo4NnNvbDIpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc29sYXJpczIKKwkJOzsKKwlpMzg2bWFjaCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LW1hY2gKKwkJb3M9LW1hY2gKKwkJOzsKKwlpMzg2LXZzdGEgfCB2c3RhKQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tdnN0YQorCQk7OworCWlyaXMgfCBpcmlzNGQpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zZ2kKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1pcml4KikKKwkJCTs7CisJCSAgICAqKQorCQkJb3M9LWlyaXg0CisJCQk7OworCQllc2FjCisJCTs7CisJaXNpNjggfCBpc2kpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1pc2kKKwkJb3M9LXN5c3YKKwkJOzsKKwltNjhrbm9tbXUpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCW02OGtub21tdS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJbTg4ay1vbXJvbiopCisJCWJhc2ljX21hY2hpbmU9bTg4ay1vbXJvbgorCQk7OworCW1hZ251bSB8IG0zMjMwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcworCQlvcz0tc3lzdgorCQk7OworCW1lcmxpbikKKwkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCisJCW9zPS1zeXN2CisJCTs7CisJbWljcm9ibGF6ZSopCisJCWJhc2ljX21hY2hpbmU9bWljcm9ibGF6ZS14aWxpbngKKwkJOzsKKwltaW5ndzY0KQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQlvcz0tbWluZ3c2NAorCQk7OworCW1pbmd3MzIpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCW1pbmd3MzJjZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tbWluZ3czMmNlCisJCTs7CisJbWluaWZyYW1lKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1jb252ZXJnZW50CisJCTs7CisJKm1pbnQgfCAtbWludFswLTldKiB8ICpNaU5UIHwgKk1pTlRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworCW1pcHMzKi0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYAorCQk7OworCW1pcHMzKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AtdW5rbm93bgorCQk7OworCW1vbml0b3IpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwltb3JwaG9zKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQlvcz0tbW9ycGhvcworCQk7OworCW1zZG9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1zZG9zCisJCTs7CisJbXMxLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbXMxLS9tdC0vJ2AKKwkJOzsKKwltc3lzKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LW1zeXMKKwkJOzsKKwltdnMpCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJb3M9LW12cworCQk7OworCW5hY2wpCisJCWJhc2ljX21hY2hpbmU9bGUzMi11bmtub3duCisJCW9zPS1uYWNsCisJCTs7CisJbmNyMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1pNDg2LW5jcgorCQlvcz0tc3lzdjQKKwkJOzsKKwluZXRic2QzODYpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1uZXRic2QKKwkJOzsKKwluZXR3aW5kZXIpCisJCWJhc2ljX21hY2hpbmU9YXJtdjRsLXJlYmVsCisJCW9zPS1saW51eAorCQk7OworCW5ld3MgfCBuZXdzNzAwIHwgbmV3czgwMCB8IG5ld3M5MDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzMTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMzAtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmV3cy0zNjAwIHwgcmlzYy1uZXdzKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmVjdjcwKQorCQliYXNpY19tYWNoaW5lPXY3MC1uZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwluZXh0IHwgbSotbmV4dCApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1uZXh0CisJCWNhc2UgJG9zIGluCisJCSAgICAtbmV4dHN0ZXAqICkKKwkJCTs7CisJCSAgICAtbnMyKikKKwkJICAgICAgb3M9LW5leHRzdGVwMgorCQkJOzsKKwkJICAgICopCisJCSAgICAgIG9zPS1uZXh0c3RlcDMKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwluaDMwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaFs0NV0wMDApCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaW5keTk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1uaW5keQorCQk7OworCW1vbjk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1tb245NjAKKwkJOzsKKwlub25zdG9wdXgpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1jb21wYXEKKwkJb3M9LW5vbnN0b3B1eAorCQk7OworCW5wMSkKKwkJYmFzaWNfbWFjaGluZT1ucDEtZ291bGQKKwkJOzsKKwluZW8tdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5lby10YW5kZW0KKwkJOzsKKwluc2UtdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5zZS10YW5kZW0KKwkJOzsKKwluc3ItdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5zci10YW5kZW0KKwkJOzsKKwlvcDUwbi0qIHwgb3A2MGMtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQlvcz0tcHJvZWxmCisJCTs7CisJb3BlbnJpc2MgfCBvcGVucmlzYy0qKQorCQliYXNpY19tYWNoaW5lPW9yMzItdW5rbm93bgorCQk7OworCW9zNDAwKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1vczQwMAorCQk7OworCU9TRTY4MDAwIHwgb3NlNjgwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlvczY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5vbmUKKwkJb3M9LW9zNjhrCisJCTs7CisJcGEtaGl0YWNoaSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhpdGFjaGkKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwlwYXJhZ29uKQorCQliYXNpY19tYWNoaW5lPWk4NjAtaW50ZWwKKwkJb3M9LW9zZgorCQk7OworCXBhcmlzYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJcGFyaXNjLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwlwYmQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtdHRpCisJCTs7CisJcGJiKQorCQliYXNpY19tYWNoaW5lPW02OGstdHRpCisJCTs7CisJcGM1MzIgfCBwYzUzMi0qKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXBjNTMyCisJCTs7CisJcGM5OCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCTs7CisJcGM5OC0qKQorCQliYXNpY19tYWNoaW5lPWkzODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtIHwgcDUgfCBrNSB8IGs2IHwgbmV4Z2VuIHwgdmlhYzMpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQk7OworCXBlbnRpdW1wcm8gfCBwNiB8IDZ4ODYgfCBhdGhsb24gfCBhdGhsb25fKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bWlpIHwgcGVudGl1bTIgfCBwZW50aXVtaWlpIHwgcGVudGl1bTMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQk7OworCXBlbnRpdW00KQorCQliYXNpY19tYWNoaW5lPWk3ODYtcGMKKwkJOzsKKwlwZW50aXVtLSogfCBwNS0qIHwgazUtKiB8IGs2LSogfCBuZXhnZW4tKiB8IHZpYWMzLSopCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW1wcm8tKiB8IHA2LSogfCA2eDg2LSogfCBhdGhsb24tKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bWlpLSogfCBwZW50aXVtMi0qIHwgcGVudGl1bWlpaS0qIHwgcGVudGl1bTMtKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bTQtKikKKwkJYmFzaWNfbWFjaGluZT1pNzg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcG4pCisJCWJhc2ljX21hY2hpbmU9cG4tZ291bGQKKwkJOzsKKwlwb3dlcikJYmFzaWNfbWFjaGluZT1wb3dlci1pYm0KKwkJOzsKKwlwcGMgfCBwcGNiZSkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KKwkJOzsKKwlwcGMtKiB8IHBwY2JlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSB8IHBwYy1sZSB8IHBvd2VycGMtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS11bmtub3duCisJCTs7CisJcHBjbGUtKiB8IHBvd2VycGNsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjbGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NCkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtdW5rbm93bgorCQk7OworCXBwYzY0LSopIGJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjNjRsZSB8IHBvd2VycGM2NGxpdHRsZSB8IHBwYzY0LWxlIHwgcG93ZXJwYzY0LWxpdHRsZSkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS11bmtub3duCisJCTs7CisJcHBjNjRsZS0qIHwgcG93ZXJwYzY0bGl0dGxlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwczIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1pYm0KKwkJOzsKKwlwdzMyKQorCQliYXNpY19tYWNoaW5lPWk1ODYtdW5rbm93bgorCQlvcz0tcHczMgorCQk7OworCXJkb3MgfCByZG9zNjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCW9zPS1yZG9zCisJCTs7CisJcmRvczMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LXJkb3MKKwkJOzsKKwlyb202OGspCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwlybVs0Nl0wMCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNpZW1lbnMKKwkJOzsKKwlydHBjIHwgcnRwYy0qKQorCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCisJCTs7CisJczM5MCB8IHMzOTAtKikKKwkJYmFzaWNfbWFjaGluZT1zMzkwLWlibQorCQk7OworCXMzOTB4IHwgczM5MHgtKikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJOzsKKwlzYTI5MjAwKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwlzYjEpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxLXVua25vd24KKwkJOzsKKwlzYjFlbCkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjFlbC11bmtub3duCisJCTs7CisJc2RlKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2EzMi1zZGUKKwkJb3M9LWVsZgorCQk7OworCXNlaSkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNlaQorCQlvcz0tc2VpdXgKKwkJOzsKKwlzZXF1ZW50KQorCQliYXNpY19tYWNoaW5lPWkzODYtc2VxdWVudAorCQk7OworCXNoKQorCQliYXNpY19tYWNoaW5lPXNoLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCXNoNWVsKQorCQliYXNpY19tYWNoaW5lPXNoNWxlLXVua25vd24KKwkJOzsKKwlzaDY0KQorCQliYXNpY19tYWNoaW5lPXNoNjQtdW5rbm93bgorCQk7OworCXNwYXJjbGl0ZS13cnMgfCBzaW1zby13cnMpCisJCWJhc2ljX21hY2hpbmU9c3BhcmNsaXRlLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXNwczcpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1idWxsCisJCW9zPS1zeXN2MgorCQk7OworCXNwdXIpCisJCWJhc2ljX21hY2hpbmU9c3B1ci11bmtub3duCisJCTs7CisJc3QyMDAwKQorCQliYXNpY19tYWNoaW5lPW02OGstdGFuZGVtCisJCTs7CisJc3RyYXR1cykKKwkJYmFzaWNfbWFjaGluZT1pODYwLXN0cmF0dXMKKwkJb3M9LXN5c3Y0CisJCTs7CisJc3Ryb25nYXJtLSogfCB0aHVtYi0qKQorCQliYXNpY19tYWNoaW5lPWFybS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXN1bjIpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQk7OworCXN1bjJvczMpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuMm9zNCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW4zb3MzKQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW4zb3M0KQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW40b3MzKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuNG9zNCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjRzb2wyKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc29sYXJpczIKKwkJOzsKKwlzdW4zIHwgc3VuMy0qKQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCTs7CisJc3VuNCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJOzsKKwlzdW4zODYgfCBzdW4zODZpIHwgcm9hZHJ1bm5lcikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXN1bgorCQk7OworCXN2MSkKKwkJYmFzaWNfbWFjaGluZT1zdjEtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJc3ltbWV0cnkpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCW9zPS1keW5peAorCQk7OworCXQzZSkKKwkJYmFzaWNfbWFjaGluZT1hbHBoYWV2NS1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl0OTApCisJCWJhc2ljX21hY2hpbmU9dDkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXRpbGUqKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LWxpbnV4LWdudQorCQk7OworCXR4MzkpCisJCWJhc2ljX21hY2hpbmU9bWlwc3R4MzktdW5rbm93bgorCQk7OworCXR4MzllbCkKKwkJYmFzaWNfbWFjaGluZT1taXBzdHgzOWVsLXVua25vd24KKwkJOzsKKwl0b2FkMSkKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC14a2wKKwkJb3M9LXRvcHMyMAorCQk7OworCXRvd2VyIHwgdG93ZXItMzIpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1uY3IKKwkJOzsKKwl0cGYpCisJCWJhc2ljX21hY2hpbmU9czM5MHgtaWJtCisJCW9zPS10cGYKKwkJOzsKKwl1ZGkyOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXVsdHJhMykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLW55dQorCQlvcz0tc3ltMQorCQk7OworCXY4MTAgfCBuZWN2ODEwKQorCQliYXNpY19tYWNoaW5lPXY4MTAtbmVjCisJCW9zPS1ub25lCisJCTs7CisJdmF4dikKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCW9zPS1zeXN2CisJCTs7CisJdm1zKQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJb3M9LXZtcworCQk7OworCXZwcCp8dnh8dngtKikKKwkJYmFzaWNfbWFjaGluZT1mMzAxLWZ1aml0c3UKKwkJOzsKKwl2eHdvcmtzOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdnh3b3JrczY4KQorCQliYXNpY19tYWNoaW5lPW02OGstd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdnh3b3JrczI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXc2NSopCisJCWJhc2ljX21hY2hpbmU9dzY1LXdkYworCQlvcz0tbm9uZQorCQk7OworCXc4OWstKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLXdpbmJvbmQKKwkJb3M9LXByb2VsZgorCQk7OworCXhib3gpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCXhwcyB8IHhwczEwMCkKKwkJYmFzaWNfbWFjaGluZT14cHMxMDAtaG9uZXl3ZWxsCisJCTs7CisJeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL154c2NhbGUvYXJtLydgCisJCTs7CisJeW1wKQorCQliYXNpY19tYWNoaW5lPXltcC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl6OGstKi1jb2ZmKQorCQliYXNpY19tYWNoaW5lPXo4ay11bmtub3duCisJCW9zPS1zaW0KKwkJOzsKKwl6ODAtKi1jb2ZmKQorCQliYXNpY19tYWNoaW5lPXo4MC11bmtub3duCisJCW9zPS1zaW0KKwkJOzsKKwlub25lKQorCQliYXNpY19tYWNoaW5lPW5vbmUtbm9uZQorCQlvcz0tbm9uZQorCQk7OworCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG1hbnVmYWN0dXJlciBvZiBjZXJ0YWluIENQVSB0eXBlcy4gIEl0IGlzIGluCisjIHNvbWUgY2FzZXMgdGhlIG9ubHkgbWFudWZhY3R1cmVyLCBpbiBvdGhlcnMsIGl0IGlzIHRoZSBtb3N0IHBvcHVsYXIuCisJdzg5aykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLXdpbmJvbmQKKwkJOzsKKwlvcDUwbikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQk7OworCW9wNjBjKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCTs7CisJcm9tcCkKKwkJYmFzaWNfbWFjaGluZT1yb21wLWlibQorCQk7OworCW1taXgpCisJCWJhc2ljX21hY2hpbmU9bW1peC1rbnV0aAorCQk7OworCXJzNjAwMCkKKwkJYmFzaWNfbWFjaGluZT1yczYwMDAtaWJtCisJCTs7CisJdmF4KQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJOzsKKwlwZHAxMCkKKwkJIyB0aGVyZSBhcmUgbWFueSBjbG9uZXMsIHNvIERFQyBpcyBub3QgYSBzYWZlIGJldAorCQliYXNpY19tYWNoaW5lPXBkcDEwLXVua25vd24KKwkJOzsKKwlwZHAxMSkKKwkJYmFzaWNfbWFjaGluZT1wZHAxMS1kZWMKKwkJOzsKKwl3ZTMyaykKKwkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKKwkJOzsKKwlzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyNF1hZWIgfCBzaFszNF1lYiB8IHNoWzEyMzRdbGUgfCBzaFsyM11lbGUpCisJCWJhc2ljX21hY2hpbmU9c2gtdW5rbm93bgorCQk7OworCXNwYXJjIHwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQk7OworCWN5ZHJhKQorCQliYXNpY19tYWNoaW5lPWN5ZHJhLWN5ZHJvbWUKKwkJOzsKKwlvcmlvbikKKwkJYmFzaWNfbWFjaGluZT1vcmlvbi1oaWdobGV2ZWwKKwkJOzsKKwlvcmlvbjEwNSkKKwkJYmFzaWNfbWFjaGluZT1jbGlwcGVyLWhpZ2hsZXZlbAorCQk7OworCW1hYyB8IG1wdyB8IG1hYy1tcHcpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQorCQk7OworCXBtYWMgfCBwbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWFwcGxlCisJCTs7CisJKi11bmtub3duKQorCQkjIE1ha2Ugc3VyZSB0byBtYXRjaCBhbiBhbHJlYWR5LWNhbm9uaWNhbGl6ZWQgbWFjaGluZSBuYW1lLgorCQk7OworCSopCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogbWFjaGluZSBcYCRiYXNpY19tYWNoaW5lXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworIyBIZXJlIHdlIGNhbm9uaWNhbGl6ZSBjZXJ0YWluIGFsaWFzZXMgZm9yIG1hbnVmYWN0dXJlcnMuCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJKi1kaWdpdGFsKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9kaWdpdGFsLiovZGVjLydgCisJCTs7CisJKi1jb21tb2RvcmUqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2NvbW1vZG9yZS4qL2NibS8nYAorCQk7OworCSopCisJCTs7Citlc2FjCisKKyMgRGVjb2RlIG1hbnVmYWN0dXJlci1zcGVjaWZpYyBhbGlhc2VzIGZvciBjZXJ0YWluIG9wZXJhdGluZyBzeXN0ZW1zLgorCitpZiBbIHgiJG9zIiAhPSB4IiIgXQordGhlbgorY2FzZSAkb3MgaW4KKwkjIEZpcnN0IG1hdGNoIHNvbWUgc3lzdGVtIHR5cGUgYWxpYXNlcworCSMgdGhhdCBtaWdodCBnZXQgY29uZnVzZWQgd2l0aCB2YWxpZCBzeXN0ZW0gdHlwZXMuCisJIyAtc29sYXJpcyogaXMgYSBiYXNpYyBzeXN0ZW0gdHlwZSwgd2l0aCB0aGlzIG9uZSBleGNlcHRpb24uCisJLWF1cm9yYXV4KQorCQlvcz0tYXVyb3JhdXgKKwkJOzsKKwktc29sYXJpczEgfCAtc29sYXJpczEuKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNvbGFyaXMxfHN1bm9zNHwnYAorCQk7OworCS1zb2xhcmlzKQorCQlvcz0tc29sYXJpczIKKwkJOzsKKwktc3ZyNCopCisJCW9zPS1zeXN2NAorCQk7OworCS11bml4d2FyZSopCisJCW9zPS1zeXN2NC4ydXcKKwkJOzsKKwktZ251L2xpbnV4KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGdudS9saW51eHxsaW51eC1nbnV8J2AKKwkJOzsKKwkjIEZpcnN0IGFjY2VwdCB0aGUgYmFzaWMgc3lzdGVtIHR5cGVzLgorCSMgVGhlIHBvcnRhYmxlIHN5c3RlbXMgY29tZXMgZmlyc3QuCisJIyBFYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOIEEgKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KKwkjIC1zeXN2KiBpcyBub3QgaGVyZSBiZWNhdXNlIGl0IGNvbWVzIGxhdGVyLCBhZnRlciBzeXN2cjQuCisJLWdudSogfCAtYnNkKiB8IC1tYWNoKiB8IC1taW5peCogfCAtZ2VuaXgqIHwgLXVsdHJpeCogfCAtaXJpeCogXAorCSAgICAgIHwgLSp2bXMqIHwgLXNjbyogfCAtZXNpeCogfCAtaXNjKiB8IC1haXgqIHwgLWNuayogfCAtc3Vub3MgfCAtc3Vub3NbMzRdKlwKKwkgICAgICB8IC1ocHV4KiB8IC11bm9zKiB8IC1vc2YqIHwgLWx1bmEqIHwgLWRndXgqIHwgLWF1cm9yYXV4KiB8IC1zb2xhcmlzKiBcCisJICAgICAgfCAtc3ltKiB8IC1rb3BlbnNvbGFyaXMqIHwgLXBsYW45KiBcCisJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCisJICAgICAgfCAtYW9zKiB8IC1hcm9zKiBcCisJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKKwkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKKwkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCisJICAgICAgfCAtYml0cmlnKiB8IC1vcGVuYnNkKiB8IC1zb2xpZGJzZCogXAorCSAgICAgIHwgLWVra29ic2QqIHwgLWtmcmVlYnNkKiB8IC1mcmVlYnNkKiB8IC1yaXNjaXgqIHwgLWx5bnhvcyogXAorCSAgICAgIHwgLWJvc3gqIHwgLW5leHRzdGVwKiB8IC1jeHV4KiB8IC1hb3V0KiB8IC1lbGYqIHwgLW9hYmkqIFwKKwkgICAgICB8IC1wdHgqIHwgLWNvZmYqIHwgLWVjb2ZmKiB8IC13aW5udCogfCAtZG9tYWluKiB8IC12c3RhKiBcCisJICAgICAgfCAtdWRpKiB8IC1lYWJpKiB8IC1saXRlcyogfCAtaWVlZSogfCAtZ28zMiogfCAtYXV4KiBcCisJICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogfCAtY2VnY2MqIFwKKwkgICAgICB8IC1jeWd3aW4qIHwgLW1zeXMqIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCisJICAgICAgfCAtbWluZ3czMiogfCAtbWluZ3c2NCogfCAtbGludXgtZ251KiB8IC1saW51eC1hbmRyb2lkKiBcCisJICAgICAgfCAtbGludXgtbmV3bGliKiB8IC1saW51eC1tdXNsKiB8IC1saW51eC11Y2xpYmMqIFwKKwkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCisJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKKwkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKKwkgICAgICB8IC1zdG9ybS1jaGFvcyogfCAtdG9wczEwKiB8IC10ZW5leCogfCAtdG9wczIwKiB8IC1pdHMqIFwKKwkgICAgICB8IC1vczIqIHwgLXZvcyogfCAtcGFsbW9zKiB8IC11Y2xpbnV4KiB8IC1udWNsZXVzKiBcCisJICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKiB8IC13aW5kaXNzKiBcCisJICAgICAgfCAtcG93ZXJtYXgqIHwgLWRuaXgqIHwgLW54NiB8IC1ueDcgfCAtc2VpKiB8IC1kcmFnb25mbHkqIFwKKwkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKiB8IC1lcyogfCAtdGlydG9zKikKKwkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJCTs7CisJLXFueCopCisJCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkJICAgIHg4Ni0qIHwgaSo4Ni0qKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0tbnRvJG9zCisJCQk7OworCQllc2FjCisJCTs7CisJLW50by1xbngqKQorCQk7OworCS1udG8qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bnRvfG50by1xbnh8J2AKKwkJOzsKKwktc2ltIHwgLWVzMTgwMCogfCAtaG1zKiB8IC14cmF5IHwgLW9zNjhrKiB8IC1ub25lKiB8IC12ODhyKiBcCisJICAgICAgfCAtd2luZG93cyogfCAtb3N4IHwgLWFidWcgfCAtbmV0d2FyZSogfCAtb3M5KiB8IC1iZW9zKiB8IC1oYWlrdSogXAorCSAgICAgIHwgLW1hY29zKiB8IC1tcHcqIHwgLW1hZ2ljKiB8IC1tbWl4d2FyZSogfCAtbW9uOTYwKiB8IC1sbmV3cyopCisJCTs7CisJLW1hYyopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8J2AKKwkJOzsKKwktbGludXgtZGlldGxpYmMpCisJCW9zPS1saW51eC1kaWV0bGliYworCQk7OworCS1saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xsaW51eHxsaW51eC1nbnV8J2AKKwkJOzsKKwktc3Vub3M1KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNXxzb2xhcmlzMnwnYAorCQk7OworCS1zdW5vczYqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCdgCisJCTs7CisJLW9wZW5lZCopCisJCW9zPS1vcGVuZWRpdGlvbgorCQk7OworCS1vczQwMCopCisJCW9zPS1vczQwMAorCQk7OworCS13aW5jZSopCisJCW9zPS13aW5jZQorCQk7OworCS1vc2Zyb3NlKikKKwkJb3M9LW9zZnJvc2UKKwkJOzsKKwktb3NmKikKKwkJb3M9LW9zZgorCQk7OworCS11dGVrKikKKwkJb3M9LWJzZAorCQk7OworCS1keW5peCopCisJCW9zPS1ic2QKKwkJOzsKKwktYWNpcyopCisJCW9zPS1hb3MKKwkJOzsKKwktYXRoZW9zKikKKwkJb3M9LWF0aGVvcworCQk7OworCS1zeWxsYWJsZSopCisJCW9zPS1zeWxsYWJsZQorCQk7OworCS0zODZic2QpCisJCW9zPS1ic2QKKwkJOzsKKwktY3RpeCogfCAtdXRzKikKKwkJb3M9LXN5c3YKKwkJOzsKKwktbm92YSopCisJCW9zPS1ydG1rLW5vdmEKKwkJOzsKKwktbnMyICkKKwkJb3M9LW5leHRzdGVwMgorCQk7OworCS1uc2sqKQorCQlvcz0tbnNrCisJCTs7CisJIyBQcmVzZXJ2ZSB0aGUgdmVyc2lvbiBudW1iZXIgb2Ygc2luaXg1LgorCS1zaW5peDUuKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNpbml4fHN5c3Z8J2AKKwkJOzsKKwktc2luaXgqKQorCQlvcz0tc3lzdjQKKwkJOzsKKwktdHBmKikKKwkJb3M9LXRwZgorCQk7OworCS10cml0b24qKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktb3NzKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCS1zdnIzKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3lzdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwkjIFRoaXMgbXVzdCBjb21lIGFmdGVyIC1zeXN2cjQuCisJLXN5c3YqKQorCQk7OworCS1vc2UqKQorCQlvcz0tb3NlCisJCTs7CisJLWVzMTgwMCopCisJCW9zPS1vc2UKKwkJOzsKKwkteGVuaXgpCisJCW9zPS14ZW5peAorCQk7OworCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCW9zPS1taW50CisJCTs7CisJLWFyb3MqKQorCQlvcz0tYXJvcworCQk7OworCS16dm1vZSkKKwkJb3M9LXp2bW9lCisJCTs7CisJLWRpY29zKikKKwkJb3M9LWRpY29zCisJCTs7CisJLW5hY2wqKQorCQk7OworCS1ub25lKQorCQk7OworCSopCisJCSMgR2V0IHJpZCBvZiB0aGUgYC0nIGF0IHRoZSBiZWdpbm5pbmcgb2YgJG9zLgorCQlvcz1gZWNobyAkb3MgfCBzZWQgJ3MvW14tXSotLy8nYAorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IHN5c3RlbSBcYCRvc1wnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCitlbHNlCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBjb21lIHdpdGggdmFyaW91cyBtYWNoaW5lcy4KKyMgVGhlIHZhbHVlIHNob3VsZCBiZSB3aGF0IHRoZSB2ZW5kb3IgY3VycmVudGx5IHNoaXBzIG91dCB0aGUgZG9vciB3aXRoIHRoZWlyCisjIG1hY2hpbmUgb3IgcHV0IGFub3RoZXIgd2F5LCB0aGUgbW9zdCBwb3B1bGFyIG9zIHByb3ZpZGVkIHdpdGggdGhlIG1hY2hpbmUuCisKKyMgTm90ZSB0aGF0IGlmIHlvdSdyZSBnb2luZyB0byB0cnkgdG8gbWF0Y2ggIi1NQU5VRkFDVFVSRVIiIGhlcmUgKHNheSwKKyMgIi1zdW4iKSwgdGhlbiB5b3UgaGF2ZSB0byB0ZWxsIHRoZSBjYXNlIHN0YXRlbWVudCB1cCB0b3dhcmRzIHRoZSB0b3AKKyMgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nIHN5c3RlbS4gIE90aGVyd2lzZSwgY29kZSBhYm92ZQorIyB3aWxsIHNpZ25hbCBhbiBlcnJvciBzYXlpbmcgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nCisjIHN5c3RlbSwgYW5kIHdlJ2xsIG5ldmVyIGdldCB0byB0aGlzIHBvaW50LgorCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJc2NvcmUtKikKKwkJb3M9LWVsZgorCQk7OworCXNwdS0qKQorCQlvcz0tZWxmCisJCTs7CisJKi1hY29ybikKKwkJb3M9LXJpc2NpeDEuMgorCQk7OworCWFybSotcmViZWwpCisJCW9zPS1saW51eAorCQk7OworCWFybSotc2VtaSkKKwkJb3M9LWFvdXQKKwkJOzsKKwljNHgtKiB8IHRpYzR4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJYzgwNTEtKikKKwkJb3M9LWVsZgorCQk7OworCWhleGFnb24tKikKKwkJb3M9LWVsZgorCQk7OworCXRpYzU0eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzZ4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgorCXBkcDEwLSopCisJCW9zPS10b3BzMjAKKwkJOzsKKwlwZHAxMS0qKQorCQlvcz0tbm9uZQorCQk7OworCSotZGVjIHwgdmF4LSopCisJCW9zPS11bHRyaXg0LjIKKwkJOzsKKwltNjgqLWFwb2xsbykKKwkJb3M9LWRvbWFpbgorCQk7OworCWkzODYtc3VuKQorCQlvcz0tc3Vub3M0LjAuMgorCQk7OworCW02ODAwMC1zdW4pCisJCW9zPS1zdW5vczMKKwkJOzsKKwltNjgqLWNpc2NvKQorCQlvcz0tYW91dAorCQk7OworCW1lcC0qKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotY2lzY28pCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzKi0qKQorCQlvcz0tZWxmCisJCTs7CisJb3IzMi0qKQorCQlvcz0tY29mZgorCQk7OworCSotdHRpKQkjIG11c3QgYmUgYmVmb3JlIHNwYXJjIGVudHJ5IG9yIHdlIGdldCB0aGUgd3Jvbmcgb3MuCisJCW9zPS1zeXN2MworCQk7OworCXNwYXJjLSogfCAqLXN1bikKKwkJb3M9LXN1bm9zNC4xLjEKKwkJOzsKKwkqLWJlKQorCQlvcz0tYmVvcworCQk7OworCSotaGFpa3UpCisJCW9zPS1oYWlrdQorCQk7OworCSotaWJtKQorCQlvcz0tYWl4CisJCTs7CisJKi1rbnV0aCkKKwkJb3M9LW1taXh3YXJlCisJCTs7CisJKi13ZWMpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLXdpbmJvbmQpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLW9raSkKKwkJb3M9LXByb2VsZgorCQk7OworCSotaHApCisJCW9zPS1ocHV4CisJCTs7CisJKi1oaXRhY2hpKQorCQlvcz0taGl1eAorCQk7OworCWk4NjAtKiB8ICotYXR0IHwgKi1uY3IgfCAqLWFsdG9zIHwgKi1tb3Rvcm9sYSB8ICotY29udmVyZ2VudCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWNibSkKKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwkqLWRnKQorCQlvcz0tZGd1eAorCQk7OworCSotZG9scGhpbikKKwkJb3M9LXN5c3YzCisJCTs7CisJbTY4ay1jY3VyKQorCQlvcz0tcnR1CisJCTs7CisJbTg4ay1vbXJvbiopCisJCW9zPS1sdW5hCisJCTs7CisJKi1uZXh0ICkKKwkJb3M9LW5leHRzdGVwCisJCTs7CisJKi1zZXF1ZW50KQorCQlvcz0tcHR4CisJCTs7CisJKi1jcmRzKQorCQlvcz0tdW5vcworCQk7OworCSotbnMpCisJCW9zPS1nZW5peAorCQk7OworCWkzNzAtKikKKwkJb3M9LW12cworCQk7OworCSotbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCSotZ291bGQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1oaWdobGV2ZWwpCisJCW9zPS1ic2QKKwkJOzsKKwkqLWVuY29yZSkKKwkJb3M9LWJzZAorCQk7OworCSotc2dpKQorCQlvcz0taXJpeAorCQk7OworCSotc2llbWVucykKKwkJb3M9LXN5c3Y0CisJCTs7CisJKi1tYXNzY29tcCkKKwkJb3M9LXJ0dQorCQk7OworCWYzMFswMV0tZnVqaXRzdSB8IGY3MDAtZnVqaXRzdSkKKwkJb3M9LXV4cHYKKwkJOzsKKwkqLXJvbTY4aykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLSpidWcpCisJCW9zPS1jb2ZmCisJCTs7CisJKi1hcHBsZSkKKwkJb3M9LW1hY29zCisJCTs7CisJKi1hdGFyaSopCisJCW9zPS1taW50CisJCTs7CisJKikKKwkJb3M9LW5vbmUKKwkJOzsKK2VzYWMKK2ZpCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGUgb3MsIGFuZCB0aGUgQ1BVIHR5cGUsIGJ1dCBub3QgdGhlCisjIG1hbnVmYWN0dXJlci4gIFdlIHBpY2sgdGhlIGxvZ2ljYWwgbWFudWZhY3R1cmVyLgordmVuZG9yPXVua25vd24KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLXVua25vd24pCisJCWNhc2UgJG9zIGluCisJCQktcmlzY2l4KikKKwkJCQl2ZW5kb3I9YWNvcm4KKwkJCQk7OworCQkJLXN1bm9zKikKKwkJCQl2ZW5kb3I9c3VuCisJCQkJOzsKKwkJCS1jbmsqfC1haXgqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLWJlb3MqKQorCQkJCXZlbmRvcj1iZQorCQkJCTs7CisJCQktaHB1eCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1tcGVpeCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1oaXV4KikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktdW5vcyopCisJCQkJdmVuZG9yPWNyZHMKKwkJCQk7OworCQkJLWRndXgqKQorCQkJCXZlbmRvcj1kZworCQkJCTs7CisJCQktbHVuYSopCisJCQkJdmVuZG9yPW9tcm9uCisJCQkJOzsKKwkJCS1nZW5peCopCisJCQkJdmVuZG9yPW5zCisJCQkJOzsKKwkJCS1tdnMqIHwgLW9wZW5lZCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktb3M0MDAqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXB0eCopCisJCQkJdmVuZG9yPXNlcXVlbnQKKwkJCQk7OworCQkJLXRwZiopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktdnhzaW0qIHwgLXZ4d29ya3MqIHwgLXdpbmRpc3MqKQorCQkJCXZlbmRvcj13cnMKKwkJCQk7OworCQkJLWF1eCopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS1obXMqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS1tcHcqIHwgLW1hY29zKikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJCQl2ZW5kb3I9YXRhcmkKKwkJCQk7OworCQkJLXZvcyopCisJCQkJdmVuZG9yPXN0cmF0dXMKKwkJCQk7OworCQllc2FjCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgInMvdW5rbm93bi8kdmVuZG9yLyJgCisJCTs7Citlc2FjCisKK2VjaG8gJGJhc2ljX21hY2hpbmUkb3MKK2V4aXQKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvY29uZmlnL2luc3RhbGwtc2ggYi9jb25maWcvaW5zdGFsbC1zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OWZjOWIwCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnL2luc3RhbGwtc2gKQEAgLTAsMCArMSwyMzggQEAKKyMhIC9iaW4vc2gKKyMKKyMgaW5zdGFsbCAtIGluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQsIG9yIGRhdGFmaWxlCisjIFRoaXMgY29tZXMgZnJvbSBYMTFSNS4KKyMKKyMgQ2FsbGluZyB0aGlzIHNjcmlwdCBpbnN0YWxsLXNoIGlzIHByZWZlcnJlZCBvdmVyIGluc3RhbGwuc2gsIHRvIHByZXZlbnQKKyMgYG1ha2UnIGltcGxpY2l0IHJ1bGVzIGZyb20gY3JlYXRpbmcgYSBmaWxlIGNhbGxlZCBpbnN0YWxsIGZyb20gaXQKKyMgd2hlbiB0aGVyZSBpcyBubyBNYWtlZmlsZS4KKyMKKyMgVGhpcyBzY3JpcHQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBCU0QgaW5zdGFsbCBzY3JpcHQsIGJ1dCB3YXMgd3JpdHRlbgorIyBmcm9tIHNjcmF0Y2guCisjCisKKworIyBzZXQgRE9JVFBST0cgdG8gZWNobyB0byB0ZXN0IHRoaXMgc2NyaXB0CisKKyMgRG9uJ3QgdXNlIDotIHNpbmNlIDQuM0JTRCBhbmQgZWFybGllciBzaGVsbHMgZG9uJ3QgbGlrZSBpdC4KK2RvaXQ9IiR7RE9JVFBST0ctfSIKKworCisjIHB1dCBpbiBhYnNvbHV0ZSBwYXRocyBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGVtIGluIHlvdXIgcGF0aDsgb3IgdXNlIGVudi4gdmFycy4KKworbXZwcm9nPSIke01WUFJPRy1tdn0iCitjcHByb2c9IiR7Q1BQUk9HLWNwfSIKK2NobW9kcHJvZz0iJHtDSE1PRFBST0ctY2htb2R9IgorY2hvd25wcm9nPSIke0NIT1dOUFJPRy1jaG93bn0iCitjaGdycHByb2c9IiR7Q0hHUlBQUk9HLWNoZ3JwfSIKK3N0cmlwcHJvZz0iJHtTVFJJUFBST0ctc3RyaXB9Igorcm1wcm9nPSIke1JNUFJPRy1ybX0iCitta2RpcnByb2c9IiR7TUtESVJQUk9HLW1rZGlyfSIKKwordHJhbmZvcm1iYXNlbmFtZT0iIgordHJhbnNmb3JtX2FyZz0iIgoraW5zdGNtZD0iJG12cHJvZyIKK2NobW9kY21kPSIkY2htb2Rwcm9nIDA3NTUiCitjaG93bmNtZD0iIgorY2hncnBjbWQ9IiIKK3N0cmlwY21kPSIiCitybWNtZD0iJHJtcHJvZyAtZiIKK212Y21kPSIkbXZwcm9nIgorc3JjPSIiCitkc3Q9IiIKK2Rpcl9hcmc9IiIKKword2hpbGUgWyB4IiQxIiAhPSB4IF07IGRvCisgICAgY2FzZSAkMSBpbgorCS1jKSBpbnN0Y21kPSIkY3Bwcm9nIgorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktZCkgZGlyX2FyZz10cnVlCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1tKSBjaG1vZGNtZD0iJGNobW9kcHJvZyAkMiIKKwkgICAgc2hpZnQKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJLW8pIGNob3duY21kPSIkY2hvd25wcm9nICQyIgorCSAgICBzaGlmdAorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktZykgY2hncnBjbWQ9IiRjaGdycHByb2cgJDIiCisJICAgIHNoaWZ0CisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1zKSBzdHJpcGNtZD0iJHN0cmlwcHJvZyIKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJLXQ9KikgdHJhbnNmb3JtYXJnPWBlY2hvICQxIHwgc2VkICdzLy10PS8vJ2AKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJLWI9KikgdHJhbnNmb3JtYmFzZW5hbWU9YGVjaG8gJDEgfCBzZWQgJ3MvLWI9Ly8nYAorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwkqKSAgaWYgWyB4IiRzcmMiID0geCBdCisJICAgIHRoZW4KKwkJc3JjPSQxCisJICAgIGVsc2UKKwkJIyB0aGlzIGNvbG9uIGlzIHRvIHdvcmsgYXJvdW5kIGEgMzg2QlNEIC9iaW4vc2ggYnVnCisJCToKKwkJZHN0PSQxCisJICAgIGZpCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKyAgICBlc2FjCitkb25lCisKK2lmIFsgeCIkc3JjIiA9IHggXQordGhlbgorCWVjaG8gImluc3RhbGw6CW5vIGlucHV0IGZpbGUgc3BlY2lmaWVkIgorCWV4aXQgMQorZWxzZQorCXRydWUKK2ZpCisKK2lmIFsgeCIkZGlyX2FyZyIgIT0geCBdOyB0aGVuCisJZHN0PSRzcmMKKwlzcmM9IiIKKwkKKwlpZiBbIC1kICRkc3QgXTsgdGhlbgorCQlpbnN0Y21kPToKKwllbHNlCisJCWluc3RjbWQ9bWtkaXIKKwlmaQorZWxzZQorCisjIFdhaXRpbmcgZm9yIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlICIkaW5zdGNtZCAkc3JjICRkc3R0bXAiIGNvbW1hbmQKKyMgbWlnaHQgY2F1c2UgZGlyZWN0b3JpZXMgdG8gYmUgY3JlYXRlZCwgd2hpY2ggd291bGQgYmUgZXNwZWNpYWxseSBiYWQgCisjIGlmICRzcmMgKGFuZCB0aHVzICRkc3R0bXApIGNvbnRhaW5zICcqJy4KKworCWlmIFsgLWYgJHNyYyAtbyAtZCAkc3JjIF0KKwl0aGVuCisJCXRydWUKKwllbHNlCisJCWVjaG8gImluc3RhbGw6ICAkc3JjIGRvZXMgbm90IGV4aXN0IgorCQlleGl0IDEKKwlmaQorCQorCWlmIFsgeCIkZHN0IiA9IHggXQorCXRoZW4KKwkJZWNobyAiaW5zdGFsbDoJbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkIgorCQlleGl0IDEKKwllbHNlCisJCXRydWUKKwlmaQorCisjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyBpZiB5b3VyIHN5c3RlbQorIyBkb2VzIG5vdCBsaWtlIGRvdWJsZSBzbGFzaGVzIGluIGZpbGVuYW1lcywgeW91IG1heSBuZWVkIHRvIGFkZCBzb21lIGxvZ2ljCisKKwlpZiBbIC1kICRkc3QgXQorCXRoZW4KKwkJZHN0PSIkZHN0Ii9gYmFzZW5hbWUgJHNyY2AKKwllbHNlCisJCXRydWUKKwlmaQorZmkKKworIyMgdGhpcyBzZWQgY29tbWFuZCBlbXVsYXRlcyB0aGUgZGlybmFtZSBjb21tYW5kCitkc3RkaXI9YGVjaG8gJGRzdCB8IHNlZCAtZSAncyxbXi9dKiQsLDtzLC8kLCw7cyxeJCwuLCdgCisKKyMgTWFrZSBzdXJlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBleGlzdHMuCisjICB0aGlzIHBhcnQgaXMgdGFrZW4gZnJvbSBOb2FoIEZyaWVkbWFuJ3MgbWtpbnN0YWxsZGlycyBzY3JpcHQKKworIyBTa2lwIGxvdHMgb2Ygc3RhdCBjYWxscyBpbiB0aGUgdXN1YWwgY2FzZS4KK2lmIFsgISAtZCAiJGRzdGRpciIgXTsgdGhlbgorZGVmYXVsdElGUz0nCQorJworSUZTPSIke0lGUy0ke2RlZmF1bHRJRlN9fSIKKworb0lGUz0iJHtJRlN9IgorIyBTb21lIHNoJ3MgY2FuJ3QgaGFuZGxlIElGUz0vIGZvciBzb21lIHJlYXNvbi4KK0lGUz0nJScKK3NldCAtIGBlY2hvICR7ZHN0ZGlyfSB8IHNlZCAtZSAnc0AvQCVAZycgLWUgJ3NAXiVAL0AnYAorSUZTPSIke29JRlN9IgorCitwYXRoY29tcD0nJworCit3aGlsZSBbICQjIC1uZSAwIF0gOyBkbworCXBhdGhjb21wPSIke3BhdGhjb21wfSR7MX0iCisJc2hpZnQKKworCWlmIFsgISAtZCAiJHtwYXRoY29tcH0iIF0gOworICAgICAgICB0aGVuCisJCSRta2RpcnByb2cgIiR7cGF0aGNvbXB9IgorCWVsc2UKKwkJdHJ1ZQorCWZpCisKKwlwYXRoY29tcD0iJHtwYXRoY29tcH0vIgorZG9uZQorZmkKKworaWYgWyB4IiRkaXJfYXJnIiAhPSB4IF0KK3RoZW4KKwkkZG9pdCAkaW5zdGNtZCAkZHN0ICYmCisKKwlpZiBbIHgiJGNob3duY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNob3duY21kICRkc3Q7IGVsc2UgdHJ1ZSA7IGZpICYmCisJaWYgWyB4IiRjaGdycGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaGdycGNtZCAkZHN0OyBlbHNlIHRydWUgOyBmaSAmJgorCWlmIFsgeCIkc3RyaXBjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkc3RyaXBjbWQgJGRzdDsgZWxzZSB0cnVlIDsgZmkgJiYKKwlpZiBbIHgiJGNobW9kY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNobW9kY21kICRkc3Q7IGVsc2UgdHJ1ZSA7IGZpCitlbHNlCisKKyMgSWYgd2UncmUgZ29pbmcgdG8gcmVuYW1lIHRoZSBmaW5hbCBleGVjdXRhYmxlLCBkZXRlcm1pbmUgdGhlIG5hbWUgbm93LgorCisJaWYgWyB4IiR0cmFuc2Zvcm1hcmciID0geCBdIAorCXRoZW4KKwkJZHN0ZmlsZT1gYmFzZW5hbWUgJGRzdGAKKwllbHNlCisJCWRzdGZpbGU9YGJhc2VuYW1lICRkc3QgJHRyYW5zZm9ybWJhc2VuYW1lIHwgCisJCQlzZWQgJHRyYW5zZm9ybWFyZ2AkdHJhbnNmb3JtYmFzZW5hbWUKKwlmaQorCisjIGRvbid0IGFsbG93IHRoZSBzZWQgY29tbWFuZCB0byBjb21wbGV0ZWx5IGVsaW1pbmF0ZSB0aGUgZmlsZW5hbWUKKworCWlmIFsgeCIkZHN0ZmlsZSIgPSB4IF0gCisJdGhlbgorCQlkc3RmaWxlPWBiYXNlbmFtZSAkZHN0YAorCWVsc2UKKwkJdHJ1ZQorCWZpCisKKyMgTWFrZSBhIHRlbXAgZmlsZSBuYW1lIGluIHRoZSBwcm9wZXIgZGlyZWN0b3J5LgorCisJZHN0dG1wPSRkc3RkaXIvI2luc3QuJCQjCisKKyMgTW92ZSBvciBjb3B5IHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZQorCisJJGRvaXQgJGluc3RjbWQgJHNyYyAkZHN0dG1wICYmCisKKwl0cmFwICJybSAtZiAke2RzdHRtcH0iIDAgJiYKKworIyBhbmQgc2V0IGFueSBvcHRpb25zOyBkbyBjaG1vZCBsYXN0IHRvIHByZXNlcnZlIHNldHVpZCBiaXRzCisKKyMgSWYgYW55IG9mIHRoZXNlIGZhaWwsIHdlIGFib3J0IHRoZSB3aG9sZSB0aGluZy4gIElmIHdlIHdhbnQgdG8KKyMgaWdub3JlIGVycm9ycyBmcm9tIGFueSBvZiB0aGVzZSwganVzdCBtYWtlIHN1cmUgbm90IHRvIGlnbm9yZQorIyBlcnJvcnMgZnJvbSB0aGUgYWJvdmUgIiRkb2l0ICRpbnN0Y21kICRzcmMgJGRzdHRtcCIgY29tbWFuZC4KKworCWlmIFsgeCIkY2hvd25jbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2hvd25jbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYmCisJaWYgWyB4IiRjaGdycGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaGdycGNtZCAkZHN0dG1wOyBlbHNlIHRydWU7ZmkgJiYKKwlpZiBbIHgiJHN0cmlwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJHN0cmlwY21kICRkc3R0bXA7IGVsc2UgdHJ1ZTtmaSAmJgorCWlmIFsgeCIkY2htb2RjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2htb2RjbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYmCisKKyMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKworCSRkb2l0ICRybWNtZCAtZiAkZHN0ZGlyLyRkc3RmaWxlICYmCisJJGRvaXQgJG12Y21kICRkc3R0bXAgJGRzdGRpci8kZHN0ZmlsZSAKKworZmkgJiYKKworCitleGl0IDAKZGlmZiAtLWdpdCBhL2NvbmZpZy9ta2luc3RhbGxkaXJzIGIvY29uZmlnL21raW5zdGFsbGRpcnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGY1ODUwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9ta2luc3RhbGxkaXJzCkBAIC0wLDAgKzEsNDAgQEAKKyMhIC9iaW4vc2gKKyMgbWtpbnN0YWxsZGlycyAtLS0gbWFrZSBkaXJlY3RvcnkgaGllcmFyY2h5CisjIEF1dGhvcjogTm9haCBGcmllZG1hbiA8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgorIyBDcmVhdGVkOiAxOTkzLTA1LTE2CisjIFB1YmxpYyBkb21haW4KKworIyAkSWQ6IG1raW5zdGFsbGRpcnMsdiAxLjEzIDE5OTkvMDEvMDUgMDM6MTg6NTUgYmplIEV4cCAkCisKK2VycnN0YXR1cz0wCisKK2ZvciBmaWxlCitkbworICAgc2V0IGZub3JkIGBlY2hvICI6JGZpbGUiIHwgc2VkIC1uZSAncy9eOlwvLyMvO3MvXjovLztzL1wvLyAvZztzL14jL1wvLztwJ2AKKyAgIHNoaWZ0CisKKyAgIHBhdGhjb21wPQorICAgZm9yIGQKKyAgIGRvCisgICAgIHBhdGhjb21wPSIkcGF0aGNvbXAkZCIKKyAgICAgY2FzZSAiJHBhdGhjb21wIiBpbgorICAgICAgIC0qICkgcGF0aGNvbXA9Li8kcGF0aGNvbXAgOzsKKyAgICAgZXNhYworCisgICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorICAgICAgICBlY2hvICJta2RpciAkcGF0aGNvbXAiCisKKyAgICAgICAgbWtkaXIgIiRwYXRoY29tcCIgfHwgbGFzdGVycj0kPworCisgICAgICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorICAJICBlcnJzdGF0dXM9JGxhc3RlcnIKKyAgICAgICAgZmkKKyAgICAgZmkKKworICAgICBwYXRoY29tcD0iJHBhdGhjb21wLyIKKyAgIGRvbmUKK2RvbmUKKworZXhpdCAkZXJyc3RhdHVzCisKKyMgbWtpbnN0YWxsZGlycyBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL2NvbmZpZy9wYXJzZS10eXBlcy5zaCBiL2NvbmZpZy9wYXJzZS10eXBlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNGQyYTk5Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnL3BhcnNlLXR5cGVzLnNoCkBAIC0wLDAgKzEsMTI3IEBACisjIS9iaW4vc2gKKworY2F0ID4gc2VkLnNjcmlwdCA8PCAiRU9GIgorL14jL2QKKy9eJC9kCitzL19fZXh0ZW5zaW9uX18gLy8KK3MvdHlwZWRlZiBcKC4qXCkgX191XChbMS05XSpcKTsvI2RlZmluZSBfX1VcMl9UWVBFREVGIFwxLworcy90eXBlZGVmIFwoLipcKSBfX3NcKFsxLTldKlwpOy8jZGVmaW5lIF9fU1wyX1RZUEVERUYgXDEvCitFT0YKKworaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgIENDPWdjYworZmkKKworaWYgdGVzdCAteiAiJENQUCI7IHRoZW4KKyAgICBDUFA9IiRDQyAtRSIKK2ZpCisKKy9iaW4vZWNobyAtbiAiY2hlY2tpbmcgZm9yIF9fdU5OIHR5cGVzLi4uICIKKyMgY2FuJ3QgY2hlY2sgWyAtZiAvdXNyL2luY2x1ZGUvYXNtL3R5cGVzLmggXSBkaXJlY3RseSwgc2luY2UKKyMgdGhlIGluY2x1ZGUgcGF0aCBtaWdodCBiZSBkaWZmZXJlbnQgaWYgY3Jvc3MtY29tcGlsaW5nCitpZiBlY2hvICcjaW5jbHVkZSA8YXNtL3R5cGVzLmg+JyB8ICRDUFAgLSAyPiBwYXJzZS10eXBlcy5sb2cgfCBcCisJc2VkIC1mIHNlZC5zY3JpcHQgfCBncmVwICdeIycgPiBhc21fdHlwZXMuaDsgdGhlbgorCWVjaG8gInVzaW5nIDxhc20vdHlwZXMuaD4iCitlbHNlCisJZWNobyAidXNpbmcgZ2VuZXJpYyB0eXBlcyIKK2ZpCisKK3JtIHNlZC5zY3JpcHQKKworY3AgYXNtX3R5cGVzLmggYXNtX3R5cGVzLmMKKworY2F0ID4+IGFzbV90eXBlcy5jIDw8RU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyNpZmRlZiBfX1U4X1RZUEVERUYKKwlpZiAoc2l6ZW9mKF9fVThfVFlQRURFRikgIT0gMSkgeworCQlwcmludGYoIlNpemVvZihfX1U4X19UWVBFREVGKSBpcyAlZCBzaG91bGQgYmUgMVxuIiwgCisJCSAgICAgICAoaW50KSBzaXplb2YoX19VOF9UWVBFREVGKSk7CisJCWV4aXQoMSk7CisJfQorI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pCisjd2FybmluZyBfX1U4X1RZUEVERUYgbm90IGRlZmluZWQKKyNlbmRpZgorI2lmZGVmIF9fUzhfVFlQRURFRgorCWlmIChzaXplb2YoX19TOF9UWVBFREVGKSAhPSAxKSB7CisJCXByaW50ZigiU2l6ZW9mKF9TOF9fVFlQRURFRikgaXMgJWQgc2hvdWxkIGJlIDFcbiIsIAorCQkgICAgICAgKGludCkgc2l6ZW9mKF9fUzhfVFlQRURFRikpOworCQlleGl0KDEpOworCX0KKyNlbGlmIGRlZmluZWQoX19saW51eF9fKQorI3dhcm5pbmcgX19TOF9UWVBFREVGIG5vdCBkZWZpbmVkCisjZW5kaWYKKyNpZmRlZiBfX1UxNl9UWVBFREVGCisJaWYgKHNpemVvZihfX1UxNl9UWVBFREVGKSAhPSAyKSB7CisJCXByaW50ZigiU2l6ZW9mKF9fVTE2X19UWVBFREVGKSBpcyAlZCBzaG91bGQgYmUgMlxuIiwgCisJCSAgICAgICAoaW50KSBzaXplb2YoX19VMTZfVFlQRURFRikpOworCQlleGl0KDEpOworCX0KKyNlbGlmIGRlZmluZWQoX19saW51eF9fKQorI3dhcm5pbmcgX19VMTZfVFlQRURFRiBub3QgZGVmaW5lZAorI2VuZGlmCisjaWZkZWYgX19TMTZfVFlQRURFRgorCWlmIChzaXplb2YoX19TMTZfVFlQRURFRikgIT0gMikgeworCQlwcmludGYoIlNpemVvZihfX1MxNl9fVFlQRURFRikgaXMgJWQgc2hvdWxkIGJlIDJcbiIsIAorCQkgICAgICAgKGludCkgc2l6ZW9mKF9fUzE2X1RZUEVERUYpKTsKKwkJZXhpdCgxKTsKKwl9CisjZWxpZiBkZWZpbmVkKF9fbGludXhfXykKKyN3YXJuaW5nIF9fUzE2X1RZUEVERUYgbm90IGRlZmluZWQKKyNlbmRpZgorCisjaWZkZWYgX19VMzJfVFlQRURFRgorCWlmIChzaXplb2YoX19VMzJfVFlQRURFRikgIT0gNCkgeworCQlwcmludGYoIlNpemVvZihfX1UzMl9fVFlQRURFRikgaXMgJWQgc2hvdWxkIGJlIDRcbiIsIAorCQkgICAgICAgKGludCkgc2l6ZW9mKF9fVTMyX1RZUEVERUYpKTsKKwkJZXhpdCgxKTsKKwl9CisjZWxpZiBkZWZpbmVkKF9fbGludXhfXykKKyN3YXJuaW5nIF9fVTMyX1RZUEVERUYgbm90IGRlZmluZWQKKyNlbmRpZgorI2lmZGVmIF9fUzMyX1RZUEVERUYKKwlpZiAoc2l6ZW9mKF9fUzMyX1RZUEVERUYpICE9IDQpIHsKKwkJcHJpbnRmKCJTaXplb2YoX19TMzJfX1RZUEVERUYpIGlzICVkIHNob3VsZCBiZSA0XG4iLCAKKwkJICAgICAgIChpbnQpIHNpemVvZihfX1MzMl9UWVBFREVGKSk7CisJCWV4aXQoMSk7CisJfQorI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pCisjd2FybmluZyBfX1MzMl9UWVBFREVGIG5vdCBkZWZpbmVkCisjZW5kaWYKKworI2lmZGVmIF9fVTY0X1RZUEVERUYKKwlpZiAoc2l6ZW9mKF9fVTY0X1RZUEVERUYpICE9IDgpIHsKKwkJcHJpbnRmKCJTaXplb2YoX19VNjRfX1RZUEVERUYpIGlzICVkIHNob3VsZCBiZSA4XG4iLCAKKwkJICAgICAgIChpbnQpIHNpemVvZihfX1U2NF9UWVBFREVGKSk7CisJCWV4aXQoMSk7CisJfQorI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pCisjd2FybmluZyBfX1U2NF9UWVBFREVGIG5vdCBkZWZpbmVkCisjZW5kaWYKKyNpZmRlZiBfX1M2NF9UWVBFREVGCisJaWYgKHNpemVvZihfX1M2NF9UWVBFREVGKSAhPSA4KSB7CisJCXByaW50ZigiU2l6ZW9mKF9fUzY0X19UWVBFREVGKSBpcyAlZCBzaG91bGQgYmUgOFxuIiwgCisJCSAgICAgICAoaW50KSBzaXplb2YoX19TNjRfVFlQRURFRikpOworCQlleGl0KDEpOworCX0KKyNlbGlmIGRlZmluZWQoX19saW51eF9fKQorI3dhcm5pbmcgX19TNjRfVFlQRURFRiBub3QgZGVmaW5lZAorI2VuZGlmCisJcmV0dXJuIDA7Cit9CitFT0YKKworJHtCVUlMRF9DQy0ke0NDLWdjY319IC1vIGFzbV90eXBlcyBhc21fdHlwZXMuYworaWYgLi9hc21fdHlwZXMKK3RoZW4KKyAgICB0cnVlCitlbHNlCisgICAgaWYgWyAiJHtDUk9TU19DT01QSUxFfSIgIT0gIjEiIF07IHRoZW4KKwllY2hvICJQcm9ibGVtIGRldGVjdGVkIHdpdGggYXNtX3R5cGVzLmgiCisJZWNobyAiIiA+IGFzbV90eXBlcy5oCisgICAgZmkKK2ZpCitybSBhc21fdHlwZXMuYyBhc21fdHlwZXMKKwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5ZGUzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUKQEAgLTAsMCArMSwxNDkwMyBAQAorIyEgL2Jpbi9zaAorIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgorIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkuCisjCisjCisjIENvcHlyaWdodCAoQykgMTk5Mi0xOTk2LCAxOTk4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjCisjIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKK2ZpCisKKworYXNfbmw9JworJworZXhwb3J0IGFzX25sCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50IC1yIC0tJworICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKyAgZWxzZQorICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKyAgICAgIGFyZz0kMTsKKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorICAgICAgKiIkYXNfbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKyAgICAnCisgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCitmaQorCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CisgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgfQorZmkKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCitJRlM9IiAiIgkkYXNfbmwiCisKKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCithc19teXNlbGY9CitjYXNlICQwIGluICMoKAorICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgICAgOzsKK2VzYWMKKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgoraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICBhc19teXNlbGY9JDAKK2ZpCitpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisgIGV4aXQgMQorZmkKKworIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgorIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgorIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAorIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KK2ZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKK2RvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCisgICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgorZG9uZQorUFMxPSckICcKK1BTMj0nPiAnCitQUzQ9JysgJworCisjIE5MUyBudWlzYW5jZXMuCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFCisKKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCisjIFVzZSBhIHByb3BlciBpbnRlcm5hbCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBlbnN1cmUgd2UgZG9uJ3QgZmFsbAorICAjIGludG8gYW4gaW5maW5pdGUgbG9vcCwgY29udGludW91c2x5IHJlLWV4ZWN1dGluZyBvdXJzZWx2ZXMuCisgIGlmIHRlc3QgeCIke19hc19jYW5fcmVleGVjfSIgIT0geG5vICYmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuCisgICAgX2FzX2Nhbl9yZWV4ZWM9bm87IGV4cG9ydCBfYXNfY2FuX3JlZXhlYzsKKyAgICAjIFdlIGNhbm5vdCB5ZXQgYXNzdW1lIGEgZGVjZW50IHNoZWxsLCBzbyB3ZSBoYXZlIHRvIHByb3ZpZGUgYQorIyBuZXV0cmFsaXphdGlvbiB2YWx1ZSBmb3Igc2hlbGxzIHdpdGhvdXQgdW5zZXQ7IGFuZCB0aGlzIGFsc28KKyMgd29ya3MgYXJvdW5kIHNoZWxscyB0aGF0IGNhbm5vdCB1bnNldCBub25leGlzdGVudCB2YXJpYWJsZXMuCisjIFByZXNlcnZlIC12IGFuZCAteCB0byB0aGUgcmVwbGFjZW1lbnQgc2hlbGwuCitCQVNIX0VOVj0vZGV2L251bGwKK0VOVj0vZGV2L251bGwKKyh1bnNldCBCQVNIX0VOVikgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IEJBU0hfRU5WIEVOVgorY2FzZSAkLSBpbiAjICgoKCgKKyAgKnYqeCogfCAqeCp2KiApIGFzX29wdHM9LXZ4IDs7CisgICp2KiApIGFzX29wdHM9LXYgOzsKKyAgKngqICkgYXNfb3B0cz0teCA7OworICAqICkgYXNfb3B0cz0gOzsKK2VzYWMKK2V4ZWMgJENPTkZJR19TSEVMTCAkYXNfb3B0cyAiJGFzX215c2VsZiIgJHsxKyIkQCJ9CisjIEFkbWl0dGVkbHksIHRoaXMgaXMgcXVpdGUgcGFyYW5vaWQsIHNpbmNlIGFsbCB0aGUga25vd24gc2hlbGxzIGJhaWwKKyMgb3V0IGFmdGVyIGEgZmFpbGVkIGBleGVjJy4KKyRhc19lY2hvICIkMDogY291bGQgbm90IHJlLWV4ZWN1dGUgd2l0aCAkQ09ORklHX1NIRUxMIiA+JjIKK2FzX2ZuX2V4aXQgMjU1CisgIGZpCisgICMgV2UgZG9uJ3Qgd2FudCB0aGlzIHRvIHByb3BhZ2F0ZSB0byBvdGhlciBzdWJwcm9jZXNzZXMuCisgICAgICAgICAgeyBfYXNfY2FuX3JlZXhlYz07IHVuc2V0IF9hc19jYW5fcmVleGVjO30KK2lmIHRlc3QgIngkQ09ORklHX1NIRUxMIiA9IHg7IHRoZW4KKyAgYXNfYm91cm5lX2NvbXBhdGlibGU9ImlmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJ1wkezErXCJcJEBcIn0nPSdcIlwkQFwiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIFxgKHNldCAtbykgMj4vZGV2L251bGxcYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKK2ZpCisiCisgIGFzX3JlcXVpcmVkPSJhc19mbl9yZXR1cm4gKCkgeyAoZXhpdCBcJDEpOyB9Cithc19mbl9zdWNjZXNzICgpIHsgYXNfZm5fcmV0dXJuIDA7IH0KK2FzX2ZuX2ZhaWx1cmUgKCkgeyBhc19mbl9yZXR1cm4gMTsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgKCkgeyByZXR1cm4gMDsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgKCkgeyByZXR1cm4gMTsgfQorCitleGl0Y29kZT0wCithc19mbl9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX3JldF9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfZmFpbHVyZSBzdWNjZWVkZWQuOyB9CitpZiAoIHNldCB4OyBhc19mbl9yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9IFwiXCQxXCIgKTsgdGhlbiA6CisKK2Vsc2UKKyAgZXhpdGNvZGU9MTsgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCitmaQordGVzdCB4XCRleGl0Y29kZSA9IHgwIHx8IGV4aXQgMQordGVzdCAteCAvIHx8IGV4aXQgMSIKKyAgYXNfc3VnZ2VzdGVkPSIgIGFzX2xpbmVub18xPSI7YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQkTElORU5PO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkIiBhc19saW5lbm9fMWE9XCRMSU5FTk8KKyAgYXNfbGluZW5vXzI9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18yYT1cJExJTkVOTworICBldmFsICd0ZXN0IFwieFwkYXNfbGluZW5vXzEnXCRhc19ydW4nXCIgIT0gXCJ4XCRhc19saW5lbm9fMidcJGFzX3J1bidcIiAmJgorICB0ZXN0IFwieFxgZXhwciBcJGFzX2xpbmVub18xJ1wkYXNfcnVuJyArIDFcYFwiID0gXCJ4XCRhc19saW5lbm9fMidcJGFzX3J1bidcIicgfHwgZXhpdCAxCit0ZXN0IFwkKCggMSArIDEgKSkgPSAyIHx8IGV4aXQgMSIKKyAgaWYgKGV2YWwgIiRhc19yZXF1aXJlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKK2Vsc2UKKyAgYXNfaGF2ZV9yZXF1aXJlZD1ubworZmkKKyAgaWYgdGVzdCB4JGFzX2hhdmVfcmVxdWlyZWQgPSB4eWVzICYmIChldmFsICIkYXNfc3VnZ2VzdGVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorCitlbHNlCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2FzX2ZvdW5kPWZhbHNlCitmb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGFzX2ZvdW5kPToKKyAgY2FzZSAkYXNfZGlyIGluICMoCisJIC8qKQorCSAgIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KKwkgICAgICMgVHJ5IG9ubHkgc2hlbGxzIHRoYXQgZXhpc3QsIHRvIHNhdmUgc2V2ZXJhbCBmb3Jrcy4KKwkgICAgIGFzX3NoZWxsPSRhc19kaXIvJGFzX2Jhc2UKKwkgICAgIGlmIHsgdGVzdCAtZiAiJGFzX3NoZWxsIiB8fCB0ZXN0IC1mICIkYXNfc2hlbGwuZXhlIjsgfSAmJgorCQkgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRhc19zaGVsbCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBDT05GSUdfU0hFTEw9JGFzX3NoZWxsIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCisJCSAgIGlmIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3N1Z2dlc3RlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGJyZWFrIDIKK2ZpCitmaQorCSAgIGRvbmU7OworICAgICAgIGVzYWMKKyAgYXNfZm91bmQ9ZmFsc2UKK2RvbmUKKyRhc19mb3VuZCB8fCB7IGlmIHsgdGVzdCAtZiAiJFNIRUxMIiB8fCB0ZXN0IC1mICIkU0hFTEwuZXhlIjsgfSAmJgorCSAgICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkU0hFTEwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRTSEVMTCBhc19oYXZlX3JlcXVpcmVkPXllcworZmk7IH0KK0lGUz0kYXNfc2F2ZV9JRlMKKworCisgICAgICBpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgIT0geDsgdGhlbiA6CisgIGV4cG9ydCBDT05GSUdfU0hFTEwKKyAgICAgICAgICAgICAjIFdlIGNhbm5vdCB5ZXQgYXNzdW1lIGEgZGVjZW50IHNoZWxsLCBzbyB3ZSBoYXZlIHRvIHByb3ZpZGUgYQorIyBuZXV0cmFsaXphdGlvbiB2YWx1ZSBmb3Igc2hlbGxzIHdpdGhvdXQgdW5zZXQ7IGFuZCB0aGlzIGFsc28KKyMgd29ya3MgYXJvdW5kIHNoZWxscyB0aGF0IGNhbm5vdCB1bnNldCBub25leGlzdGVudCB2YXJpYWJsZXMuCisjIFByZXNlcnZlIC12IGFuZCAteCB0byB0aGUgcmVwbGFjZW1lbnQgc2hlbGwuCitCQVNIX0VOVj0vZGV2L251bGwKK0VOVj0vZGV2L251bGwKKyh1bnNldCBCQVNIX0VOVikgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IEJBU0hfRU5WIEVOVgorY2FzZSAkLSBpbiAjICgoKCgKKyAgKnYqeCogfCAqeCp2KiApIGFzX29wdHM9LXZ4IDs7CisgICp2KiApIGFzX29wdHM9LXYgOzsKKyAgKngqICkgYXNfb3B0cz0teCA7OworICAqICkgYXNfb3B0cz0gOzsKK2VzYWMKK2V4ZWMgJENPTkZJR19TSEVMTCAkYXNfb3B0cyAiJGFzX215c2VsZiIgJHsxKyIkQCJ9CisjIEFkbWl0dGVkbHksIHRoaXMgaXMgcXVpdGUgcGFyYW5vaWQsIHNpbmNlIGFsbCB0aGUga25vd24gc2hlbGxzIGJhaWwKKyMgb3V0IGFmdGVyIGEgZmFpbGVkIGBleGVjJy4KKyRhc19lY2hvICIkMDogY291bGQgbm90IHJlLWV4ZWN1dGUgd2l0aCAkQ09ORklHX1NIRUxMIiA+JjIKK2V4aXQgMjU1CitmaQorCisgICAgaWYgdGVzdCB4JGFzX2hhdmVfcmVxdWlyZWQgPSB4bm87IHRoZW4gOgorICAkYXNfZWNobyAiJDA6IFRoaXMgc2NyaXB0IHJlcXVpcmVzIGEgc2hlbGwgbW9yZSBtb2Rlcm4gdGhhbiBhbGwiCisgICRhc19lY2hvICIkMDogdGhlIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uIgorICBpZiB0ZXN0IHgke1pTSF9WRVJTSU9OK3NldH0gPSB4c2V0IDsgdGhlbgorICAgICRhc19lY2hvICIkMDogSW4gcGFydGljdWxhciwgenNoICRaU0hfVkVSU0lPTiBoYXMgYnVncyBhbmQgc2hvdWxkIgorICAgICRhc19lY2hvICIkMDogYmUgdXBncmFkZWQgdG8genNoIDQuMy40IG9yIGxhdGVyLiIKKyAgZWxzZQorICAgICRhc19lY2hvICIkMDogUGxlYXNlIHRlbGwgYnVnLWF1dG9jb25mQGdudS5vcmcgYWJvdXQgeW91ciBzeXN0ZW0sCiskMDogaW5jbHVkaW5nIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMKKyQwOiBtZXNzYWdlLiBUaGVuIGluc3RhbGwgYSBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1bgorJDA6IHRoZSBzY3JpcHQgdW5kZXIgc3VjaCBhIHNoZWxsIGlmIHlvdSBkbyBoYXZlIG9uZS4iCisgIGZpCisgIGV4aXQgMQorZmkKK2ZpCitmaQorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KK2V4cG9ydCBTSEVMTAorIyBVbnNldCBtb3JlIHZhcmlhYmxlcyBrbm93biB0byBpbnRlcmZlcmUgd2l0aCBiZWhhdmlvciBvZiBjb21tb24gdG9vbHMuCitDTElDT0xPUl9GT1JDRT0gR1JFUF9PUFRJT05TPQordW5zZXQgQ0xJQ09MT1JfRk9SQ0UgR1JFUF9PUFRJT05TCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBTaGVsbCBGdW5jdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgYXNfZm5fdW5zZXQgVkFSCisjIC0tLS0tLS0tLS0tLS0tLQorIyBQb3J0YWJseSB1bnNldCBWQVIuCithc19mbl91bnNldCAoKQoreworICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9Cit9Cithc191bnNldD1hc19mbl91bnNldAorCisjIGFzX2ZuX3NldF9zdGF0dXMgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCAkPyB0byBTVEFUVVMsIHdpdGhvdXQgZm9ya2luZy4KK2FzX2ZuX3NldF9zdGF0dXMgKCkKK3sKKyAgcmV0dXJuICQxCit9ICMgYXNfZm5fc2V0X3N0YXR1cworCisjIGFzX2ZuX2V4aXQgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEV4aXQgdGhlIHNoZWxsIHdpdGggU1RBVFVTLCBldmVuIGluIGEgInRyYXAgMCIgb3IgInNldCAtZSIgY29udGV4dC4KK2FzX2ZuX2V4aXQgKCkKK3sKKyAgc2V0ICtlCisgIGFzX2ZuX3NldF9zdGF0dXMgJDEKKyAgZXhpdCAkMQorfSAjIGFzX2ZuX2V4aXQKKworIyBhc19mbl9ta2Rpcl9wCisjIC0tLS0tLS0tLS0tLS0KKyMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgorYXNfZm5fbWtkaXJfcCAoKQoreworCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSA6OyBkbworICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorCisKK30gIyBhc19mbl9ta2Rpcl9wCisKKyMgYXNfZm5fZXhlY3V0YWJsZV9wIEZJTEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBpZiBGSUxFIGlzIGFuIGV4ZWN1dGFibGUgcmVndWxhciBmaWxlLgorYXNfZm5fZXhlY3V0YWJsZV9wICgpCit7CisgIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC14ICIkMSIKK30gIyBhc19mbl9leGVjdXRhYmxlX3AKKyMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCB0aGUgdGV4dCBpbiBWQUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UKKyMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGggb3ZlcgorIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRpYyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQorIyBpbXBsZW1lbnRhdGlvbnMuCitpZiAoZXZhbCAiYXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMSs9XCQyCisgIH0nCitlbHNlCisgIGFzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMT1cJCQxXCQyCisgIH0KK2ZpICMgYXNfZm5fYXBwZW5kCisKKyMgYXNfZm5fYXJpdGggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCisjIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFudGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMKKyMgbXVzdCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuCitpZiAoZXZhbCAidGVzdCBcJCgoIDEgKyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgCisgIH0KK2ZpICMgYXNfZm5fYXJpdGgKKworCisjIGFzX2ZuX2Vycm9yIFNUQVRVUyBFUlJPUiBbTElORU5PIExPR19GRF0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgImBiYXNlbmFtZSAkMGA6IGVycm9yOiBFUlJPUiIgdG8gc3RkZXJyLiBJZiBMSU5FTk8gYW5kIExPR19GRCBhcmUKKyMgcHJvdmlkZWQsIGFsc28gb3V0cHV0IHRoZSBlcnJvciB0byBMT0dfRkQsIHJlZmVyZW5jaW5nIExJTkVOTy4gVGhlbiBleGl0IHRoZQorIyBzY3JpcHQgd2l0aCBTVEFUVVMsIHVzaW5nIDEgaWYgdGhhdCB3YXMgMC4KK2FzX2ZuX2Vycm9yICgpCit7CisgIGFzX3N0YXR1cz0kMTsgdGVzdCAkYXNfc3RhdHVzIC1lcSAwICYmIGFzX3N0YXR1cz0xCisgIGlmIHRlc3QgIiQ0IjsgdGhlbgorICAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDMifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogJDIiID4mJDQKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICQyIiA+JjIKKyAgYXNfZm5fZXhpdCAkYXNfc3RhdHVzCit9ICMgYXNfZm5fZXJyb3IKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCitlbHNlCisgIGFzX2Jhc2VuYW1lPWZhbHNlCitmaQorCitpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZGlybmFtZT1kaXJuYW1lCitlbHNlCisgIGFzX2Rpcm5hbWU9ZmFsc2UKK2ZpCisKK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAorJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYLyIkMCIgfAorICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKworIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCithc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisKKworICBhc19saW5lbm9fMT0kTElORU5PIGFzX2xpbmVub18xYT0kTElORU5PCisgIGFzX2xpbmVub18yPSRMSU5FTk8gYXNfbGluZW5vXzJhPSRMSU5FTk8KKyAgZXZhbCAndGVzdCAieCRhc19saW5lbm9fMSckYXNfcnVuJyIgIT0gIngkYXNfbGluZW5vXzInJGFzX3J1biciICYmCisgIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEnJGFzX3J1bicgKyAxYCIgPSAieCRhc19saW5lbm9fMickYXNfcnVuJyInIHx8IHsKKyAgIyBCbGFtZSBMZWUgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCisgIHNlZCAtbiAnCisgICAgcAorICAgIC9bJF1MSU5FTk8vPQorICAnIDwkYXNfbXlzZWxmIHwKKyAgICBzZWQgJworICAgICAgcy9bJF1MSU5FTk8uKi8mLS8KKyAgICAgIHQgbGluZW5vCisgICAgICBiCisgICAgICA6bGluZW5vCisgICAgICBOCisgICAgICA6bG9vcAorICAgICAgcy9bJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXS4qXG5cKVwoLipcKS9cMlwxXDIvCisgICAgICB0IGxvb3AKKyAgICAgIHMvLVxuLiovLworICAgICcgPiRhc19tZS5saW5lbm8gJiYKKyAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMjsgYXNfZm5fZXhpdCAxOyB9CisKKyAgIyBJZiB3ZSBoYWQgdG8gcmUtZXhlY3V0ZSB3aXRoICRDT05GSUdfU0hFTEwsIHdlJ3JlIGVuc3VyZWQgdG8gaGF2ZQorICAjIGFscmVhZHkgZG9uZSB0aGF0LCBzbyBlbnN1cmUgd2UgZG9uJ3QgdHJ5IHRvIGRvIHNvIGFnYWluIGFuZCBmYWxsCisgICMgaW4gYW4gaW5maW5pdGUgbG9vcC4gIFRoaXMgaGFzIGFscmVhZHkgaGFwcGVuZWQgaW4gcHJhY3RpY2UuCisgIF9hc19jYW5fcmVleGVjPW5vOyBleHBvcnQgX2FzX2Nhbl9yZWV4ZWMKKyAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKKyAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCisgICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaXRpdmUgdG8gdGhpcykuCisgIC4gIi4vJGFzX21lLmxpbmVubyIKKyAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCisgIGV4aXQKK30KKworRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KK2Nhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCistbiopCisgIGNhc2UgYGVjaG8gJ3h5XGMnYCBpbgorICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKyAgeHkpICBFQ0hPX0M9J1xjJzs7CisgICopICAgZWNobyBgZWNobyBrc2g4OCBidWcgb24gQUlYIDYuMWAgPiAvZGV2L251bGwKKyAgICAgICBFQ0hPX1Q9JwknOzsKKyAgZXNhYzs7CisqKQorICBFQ0hPX049Jy1uJzs7Citlc2FjCisKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorZWxzZQorICBybSAtZiBjb25mJCQuZGlyCisgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKK2ZpCitpZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCisgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9J2xuIC1zJworICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CisgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKyAgICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXBSJy4KKyAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisgICAgICBhc19sbl9zPSdjcCAtcFInCisgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz1sbgorICBlbHNlCisgICAgYXNfbG5fcz0nY3AgLXBSJworICBmaQorZWxzZQorICBhc19sbl9zPSdjcCAtcFInCitmaQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorCitpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKK2Vsc2UKKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgYXNfbWtkaXJfcD1mYWxzZQorZmkKKworYXNfdGVzdF94PSd0ZXN0IC14JworYXNfZXhlY3V0YWJsZV9wPWFzX2ZuX2V4ZWN1dGFibGVfcAorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCithc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKwordGVzdCAtbiAiJERKRElSIiB8fCBleGVjIDc8JjAgPC9kZXYvbnVsbAorZXhlYyA2PiYxCisKKyMgTmFtZSBvZiB0aGUgaG9zdC4KKyMgaG9zdG5hbWUgb24gc29tZSBzeXN0ZW1zIChTVlIzLjIsIG9sZCBHTlUvTGludXgpIHJldHVybnMgYSBib2d1cyBleGl0IHN0YXR1cywKKyMgc28gdW5hbWUgZ2V0cyBydW4gdG9vLgorYWNfaG9zdG5hbWU9YChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisKKyMKKyMgSW5pdGlhbGl6YXRpb25zLgorIworYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAorYWNfY2xlYW5fZmlsZXM9CithY19jb25maWdfbGlib2JqX2Rpcj0uCitMSUJPQkpTPQorY3Jvc3NfY29tcGlsaW5nPW5vCitzdWJkaXJzPQorTUZMQUdTPQorTUFLRUZMQUdTPQorCisjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KK1BBQ0tBR0VfTkFNRT0KK1BBQ0tBR0VfVEFSTkFNRT0KK1BBQ0tBR0VfVkVSU0lPTj0KK1BBQ0tBR0VfU1RSSU5HPQorUEFDS0FHRV9CVUdSRVBPUlQ9CitQQUNLQUdFX1VSTD0KKworYWNfdW5pcXVlX2ZpbGU9InZlcnNpb24uaCIKKyMgRmFjdG9yaW5nIGRlZmF1bHQgaGVhZGVycyBmb3IgbW9zdCB0ZXN0cy4KK2FjX2luY2x1ZGVzX2RlZmF1bHQ9IlwKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmZGVmIFNURENfSEVBREVSUworIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjZWxzZQorIyBpZmRlZiBIQVZFX1NURExJQl9ICisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyMgaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmIGRlZmluZWQgSEFWRV9NRU1PUllfSAorIyAgaW5jbHVkZSA8bWVtb3J5Lmg+CisjIGVuZGlmCisjIGluY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKyMgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURElOVF9ICisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZiIKKworZ3RfbmVlZHM9CithY19oZWFkZXJfbGlzdD0KK2dsX3VzZV90aHJlYWRzX2RlZmF1bHQ9CithY19mdW5jX2xpc3Q9CithY19zdWJzdF92YXJzPSdMVExJQk9CSlMKK0xJQk9CSlMKK0JVSUxEX0xERkxBR1MKK0JVSUxEX0NGTEFHUworTUtJTlNUQUxMRElSUworSU5DTFVERVMKK0RPX1RFU1RfU1VJVEUKK0VUX0RJUgorU1NfRElSCitMREZMQUdfU1RBVElDCityb290X3N5c2NvbmZkaXIKK3Jvb3RfbGliZGlyCityb290X3NiaW5kaXIKK3Jvb3RfYmluZGlyCityb290X3ByZWZpeAorVU5JWF9DTVQKK0NZR1dJTl9DTVQKK0xJTlVYX0NNVAorVU5JX0RJRkZfT1BUUworU0VNX0lOSVRfTElCCitTT0NLRVRfTElCCitTSVpFT0ZfT0ZGX1QKK1NJWkVPRl9MT05HX0xPTkcKK1NJWkVPRl9MT05HCitTSVpFT0ZfSU5UCitTSVpFT0ZfU0hPUlQKK0JVSUxEX0NDCitNQUtFSU5GTworU1RSSVAKK0FSCitMRENPTkZJRworUEVSTAorQVdLCitDSE1PRAorUk0KK0NQCitNVgorTE5fUworTE4KK2lmTm90R05VbWFrZQoraWZHTlVtYWtlCitCSU5BUllfVFlQRQorUE9TVUIKK0xUTElCSU5UTAorTElCSU5UTAorSU5UTExJQlMKK0lOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYCitJTlRMT0JKUworR0VOQ0FUCitJTlNUT0JKRVhUCitEQVRBRElSTkFNRQorQ0FUT0JKRVhUCitVU0VfSU5DTFVERURfTElCSU5UTAorQlVJTERfSU5DTFVERURfTElCSU5UTAorTFRMSUJDCitXSU5EUkVTCitXT0UzMgorV09FMzJETEwKK0hBVkVfV1BSSU5URgorSEFWRV9ORVdMT0NBTEUKK0hBVkVfU05QUklOVEYKK0hBVkVfQVNQUklOVEYKK0hBVkVfUE9TSVhfUFJJTlRGCitJTlRMX0RFRkFVTFRfVkVSQk9TSVRZCitJTlRMX01BQ09TWF9MSUJTCitHTElCQzIxCitJTlRMQklTT04KK0xUTElCSUNPTlYKK0xJQklDT05WCitMVExJQk1VTFRJVEhSRUFECitMSUJNVUxUSVRIUkVBRAorTFRMSUJUSFJFQUQKK0xJQlRIUkVBRAorTElCUFRIX1BSRUZJWAorTFRMSUJQVEgKK0xJQlBUSAorUFJJX01BQ1JPU19CUk9LRU4KK0FMTE9DQQorSEFWRV9WSVNJQklMSVRZCitDRkxBR19WSVNJQklMSVRZCitSQU5MSUIKK0dMSUJDMgorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUworTVNHTUVSR0UKK1hHRVRURVhUXzAxNQorWEdFVFRFWFQKK0dNU0dGTVRfMDE1CitNU0dGTVRfMDE1CitHTVNHRk1UCitNU0dGTVQKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTgorVVNFX05MUworU0VECitNS0RJUl9QCitJTlNUQUxMX0RBVEEKK0lOU1RBTExfU0NSSVBUCitJTlNUQUxMX1BST0dSQU0KK1NFVF9NQUtFCitWRVJTSU9OCitQQUNLQUdFCitHRVRURVhUX1BBQ0tBR0UKK1VVSUREX0NNVAorRTJJTklUUkRfTUFOCitFMklOSVRSRF9QUk9HCitGU0NLX01BTgorRlNDS19QUk9HCitERUZSQUdfQ01UCitSRVNJWkVSX0NNVAorSU1BR0VSX0NNVAorREVCVUdGU19DTVQKK1FVT1RBX0NNVAorREVQUFJPRklMRURfTElCUVVPVEEKK1BST0ZJTEVEX0xJQlFVT1RBCitERVBTVEFUSUNfTElCUVVPVEEKK1NUQVRJQ19MSUJRVU9UQQorREVQTElCUVVPVEEKK0xJQlFVT1RBCitRVU9UQV9NQU5fQ09NTUVOVAorQkxLSURfQ01UCitERVBQUk9GSUxFRF9MSUJCTEtJRAorUFJPRklMRURfTElCQkxLSUQKK0RFUFNUQVRJQ19MSUJCTEtJRAorU1RBVElDX0xJQkJMS0lECitERVBMSUJCTEtJRAorTElCQkxLSUQKK1VVSURfQ01UCitERVBQUk9GSUxFRF9MSUJVVUlECitQUk9GSUxFRF9MSUJVVUlECitERVBTVEFUSUNfTElCVVVJRAorU1RBVElDX0xJQlVVSUQKK0RFUExJQlVVSUQKK0xJQlVVSUQKK1BLR19DT05GSUdfTElCRElSCitQS0dfQ09ORklHX1BBVEgKK1BLR19DT05GSUcKK1RFU1RfSU9fQ01UCitQUklWQVRFX0xJQlNfQ01UCitMREZMQUdfRFlOQU1JQworUFJPRklMRURfTElCX0VYVAorU1RBVElDX0xJQl9FWFQKK0xJQl9FWFQKK1BST0ZJTEVfQ01UCitCU0RMSUJfQ01UCitFTEZfQ01UCitIVFJFRV9DTVQKK1EKK0VTCitFCitMSU5LX0JVSUxEX0ZMQUdTCitTWU1MSU5LX1JFTEFUSVZFCitMSU5LX0lOU1RBTExfRkxBR1MKK01BSU5UQUlORVJfQ01UCitFR1JFUAorR1JFUAorQ1BQCitSRFlOQU1JQworRExPUEVOX0xJQgorT0JKRVhUCitFWEVFWFQKK2FjX2N0X0NDCitDUFBGTEFHUworTERGTEFHUworQ0ZMQUdTCitDQworaG9zdF9vcworaG9zdF92ZW5kb3IKK2hvc3RfY3B1Citob3N0CitidWlsZF9vcworYnVpbGRfdmVuZG9yCitidWlsZF9jcHUKK2J1aWxkCitFMkZTUFJPR1NfUEtHVkVSCitFMkZTUFJPR1NfVkVSU0lPTgorRTJGU1BST0dTX0RBWQorRTJGU1BST0dTX01PTlRICitFMkZTUFJPR1NfWUVBUgordGFyZ2V0X2FsaWFzCitob3N0X2FsaWFzCitidWlsZF9hbGlhcworTElCUworRUNIT19UCitFQ0hPX04KK0VDSE9fQworREVGUworbWFuZGlyCitsb2NhbGVkaXIKK2xpYmRpcgorcHNkaXIKK3BkZmRpcgorZHZpZGlyCitodG1sZGlyCitpbmZvZGlyCitkb2NkaXIKK29sZGluY2x1ZGVkaXIKK2luY2x1ZGVkaXIKK2xvY2Fsc3RhdGVkaXIKK3NoYXJlZHN0YXRlZGlyCitzeXNjb25mZGlyCitkYXRhZGlyCitkYXRhcm9vdGRpcgorbGliZXhlY2Rpcgorc2JpbmRpcgorYmluZGlyCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lCitwcmVmaXgKK2V4ZWNfcHJlZml4CitQQUNLQUdFX1VSTAorUEFDS0FHRV9CVUdSRVBPUlQKK1BBQ0tBR0VfU1RSSU5HCitQQUNLQUdFX1ZFUlNJT04KK1BBQ0tBR0VfVEFSTkFNRQorUEFDS0FHRV9OQU1FCitQQVRIX1NFUEFSQVRPUgorU0hFTEwnCithY19zdWJzdF9maWxlcz0nTUNPTkZJRworTUFLRUZJTEVfRUxGCitNQUtFRklMRV9CU0RMSUIKK01BS0VGSUxFX1BST0ZJTEUKK01BS0VGSUxFX0xJQlJBUlkKK0FTTV9UWVBFU19IRUFERVIKK1BVQkxJQ19DT05GSUdfSEVBREVSJworYWNfdXNlcl9vcHRzPScKK2VuYWJsZV9vcHRpb25fY2hlY2tpbmcKK3dpdGhfZGlldF9saWJjCit3aXRoX2NjCit3aXRoX2Njb3B0cword2l0aF9sZG9wdHMKK3dpdGhfcm9vdF9wcmVmaXgKK2VuYWJsZV9tYWludGFpbmVyX21vZGUKK2VuYWJsZV9zeW1saW5rX2luc3RhbGwKK2VuYWJsZV9yZWxhdGl2ZV9zeW1saW5rcworZW5hYmxlX3N5bWxpbmtfcmVsYXRpdmVfc3ltbGlua3MKK2VuYWJsZV9zeW1saW5rX2J1aWxkCitlbmFibGVfdmVyYm9zZV9tYWtlY21kcworZW5hYmxlX2NvbXByZXNzaW9uCitlbmFibGVfaHRyZWUKK2VuYWJsZV9lbGZfc2hsaWJzCitlbmFibGVfYnNkX3NobGlicworZW5hYmxlX3Byb2ZpbGUKK2VuYWJsZV9nY292CitlbmFibGVfamJkX2RlYnVnCitlbmFibGVfYmxraWRfZGVidWcKK2VuYWJsZV90ZXN0aW9fZGVidWcKK2VuYWJsZV9saWJ1dWlkCitlbmFibGVfbGliYmxraWQKK2VuYWJsZV9xdW90YQorZW5hYmxlX2JhY2t0cmFjZQorZW5hYmxlX2RlYnVnZnMKK2VuYWJsZV9pbWFnZXIKK2VuYWJsZV9yZXNpemVyCitlbmFibGVfZGVmcmFnCitlbmFibGVfZnNjaworZW5hYmxlX2UyaW5pdHJkX2hlbHBlcgorZW5hYmxlX3RscworZW5hYmxlX3V1aWRkCitlbmFibGVfbmxzCitlbmFibGVfdGhyZWFkcword2l0aF9nbnVfbGQKK2VuYWJsZV9ycGF0aAord2l0aF9saWJwdGhfcHJlZml4Cit3aXRoX2xpYmljb252X3ByZWZpeAord2l0aF9pbmNsdWRlZF9nZXR0ZXh0Cit3aXRoX2xpYmludGxfcHJlZml4Cit3aXRoX211bHRpYXJjaAorJworICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKK2hvc3RfYWxpYXMKK3RhcmdldF9hbGlhcworQ0MKK0NGTEFHUworTERGTEFHUworTElCUworQ1BQRkxBR1MKK0NQUAorUEtHX0NPTkZJRworUEtHX0NPTkZJR19QQVRICitQS0dfQ09ORklHX0xJQkRJUicKKworCisjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCithY19pbml0X2hlbHA9CithY19pbml0X3ZlcnNpb249ZmFsc2UKK2FjX3VucmVjb2duaXplZF9vcHRzPQorYWNfdW5yZWNvZ25pemVkX3NlcD0KKyMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCisjIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCitjYWNoZV9maWxlPS9kZXYvbnVsbAorZXhlY19wcmVmaXg9Tk9ORQorbm9fY3JlYXRlPQorbm9fcmVjdXJzaW9uPQorcHJlZml4PU5PTkUKK3Byb2dyYW1fcHJlZml4PU5PTkUKK3Byb2dyYW1fc3VmZml4PU5PTkUKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9cyx4LHgsCitzaWxlbnQ9CitzaXRlPQorc3JjZGlyPQordmVyYm9zZT0KK3hfaW5jbHVkZXM9Tk9ORQoreF9saWJyYXJpZXM9Tk9ORQorCisjIEluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb3B0aW9ucy4KKyMgVGhlc2UgYXJlIGxlZnQgdW5leHBhbmRlZCBzbyB1c2VycyBjYW4gIm1ha2UgaW5zdGFsbCBleGVjX3ByZWZpeD0vZm9vIgorIyBhbmQgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgYmFzZWQgb24gZXhlY19wcmVmaXgKKyMgYnkgZGVmYXVsdCB3aWxsIGFjdHVhbGx5IGNoYW5nZS4KKyMgVXNlIGJyYWNlcyBpbnN0ZWFkIG9mIHBhcmVucyBiZWNhdXNlIHNoLCBwZXJsLCBldGMuIGFsc28gYWNjZXB0IHRoZW0uCisjIChUaGUgbGlzdCBmb2xsb3dzIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcy4pCitiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKK3NiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCitsaWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJworZGF0YXJvb3RkaXI9JyR7cHJlZml4fS9zaGFyZScKK2RhdGFkaXI9JyR7ZGF0YXJvb3RkaXJ9Jworc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKK3NoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJworbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKK2luY2x1ZGVkaXI9JyR7cHJlZml4fS9pbmNsdWRlJworb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJworZG9jZGlyPScke2RhdGFyb290ZGlyfS9kb2MvJHtQQUNLQUdFfScKK2luZm9kaXI9JyR7ZGF0YXJvb3RkaXJ9L2luZm8nCitodG1sZGlyPScke2RvY2Rpcn0nCitkdmlkaXI9JyR7ZG9jZGlyfScKK3BkZmRpcj0nJHtkb2NkaXJ9JworcHNkaXI9JyR7ZG9jZGlyfScKK2xpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworbG9jYWxlZGlyPScke2RhdGFyb290ZGlyfS9sb2NhbGUnCittYW5kaXI9JyR7ZGF0YXJvb3RkaXJ9L21hbicKKworYWNfcHJldj0KK2FjX2Rhc2hkYXNoPQorZm9yIGFjX29wdGlvbgorZG8KKyAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorICAgIGV2YWwgJGFjX3ByZXY9XCRhY19vcHRpb24KKyAgICBhY19wcmV2PQorICAgIGNvbnRpbnVlCisgIGZpCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICo9PyopIGFjX29wdGFyZz1gZXhwciAiWCRhY19vcHRpb24iIDogJ1tePV0qPVwoLipcKSdgIDs7CisgICo9KSAgIGFjX29wdGFyZz0gOzsKKyAgKikgICAgYWNfb3B0YXJnPXllcyA7OworICBlc2FjCisKKyAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKworICBjYXNlICRhY19kYXNoZGFzaCRhY19vcHRpb24gaW4KKyAgLS0pCisgICAgYWNfZGFzaGRhc2g9eWVzIDs7CisKKyAgLWJpbmRpciB8IC0tYmluZGlyIHwgLS1iaW5kaSB8IC0tYmluZCB8IC0tYmluIHwgLS1iaSkKKyAgICBhY19wcmV2PWJpbmRpciA7OworICAtYmluZGlyPSogfCAtLWJpbmRpcj0qIHwgLS1iaW5kaT0qIHwgLS1iaW5kPSogfCAtLWJpbj0qIHwgLS1iaT0qKQorICAgIGJpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWJ1aWxkIHwgLS1idWlsZCB8IC0tYnVpbCB8IC0tYnVpIHwgLS1idSkKKyAgICBhY19wcmV2PWJ1aWxkX2FsaWFzIDs7CisgIC1idWlsZD0qIHwgLS1idWlsZD0qIHwgLS1idWlsPSogfCAtLWJ1aT0qIHwgLS1idT0qKQorICAgIGJ1aWxkX2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcCisgIHwgLS1jYWNoZS1mIHwgLS1jYWNoZS0gfCAtLWNhY2hlIHwgLS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQorICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNoZS1maT0qIFwKKyAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAtLWNhY2hlPSogfCAtLWNhY2g9KiB8IC0tY2FjPSogfCAtLWNhPSogfCAtLWM9KikKKyAgICBjYWNoZV9maWxlPSRhY19vcHRhcmcgOzsKKworICAtLWNvbmZpZy1jYWNoZSB8IC1DKQorICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNhY2hlIDs7CisKKyAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQpCisgICAgYWNfcHJldj1kYXRhZGlyIDs7CisgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSopCisgICAgZGF0YWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1kYXRhcm9vdCBcCisgIHwgLS1kYXRhcm9vIHwgLS1kYXRhcm8gfCAtLWRhdGFyKQorICAgIGFjX3ByZXY9ZGF0YXJvb3RkaXIgOzsKKyAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXAorICB8IC0tZGF0YXJvb3Q9KiB8IC0tZGF0YXJvbz0qIHwgLS1kYXRhcm89KiB8IC0tZGF0YXI9KikKKyAgICBkYXRhcm9vdGRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWRpc2FibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9bm8gOzsKKworICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQorICAgIGFjX3ByZXY9ZG9jZGlyIDs7CisgIC1kb2NkaXI9KiB8IC0tZG9jZGlyPSogfCAtLWRvY2RpPSogfCAtLWRvYz0qIHwgLS1kbz0qKQorICAgIGRvY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWR2aWRpciB8IC0tZHZpZGlyIHwgLS1kdmlkaSB8IC0tZHZpZCB8IC0tZHZpIHwgLS1kdikKKyAgICBhY19wcmV2PWR2aWRpciA7OworICAtZHZpZGlyPSogfCAtLWR2aWRpcj0qIHwgLS1kdmlkaT0qIHwgLS1kdmlkPSogfCAtLWR2aT0qIHwgLS1kdj0qKQorICAgIGR2aWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWVuYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OworCisgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKKyAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXAorICB8IC0tZXhlYyB8IC0tZXhlIHwgLS1leCkKKyAgICBhY19wcmV2PWV4ZWNfcHJlZml4IDs7CisgIC1leGVjLXByZWZpeD0qIHwgLS1leGVjX3ByZWZpeD0qIHwgLS1leGVjLXByZWZpeD0qIHwgLS1leGVjLXByZWZpPSogXAorICB8IC0tZXhlYy1wcmVmPSogfCAtLWV4ZWMtcHJlPSogfCAtLWV4ZWMtcHI9KiB8IC0tZXhlYy1wPSogfCAtLWV4ZWMtPSogXAorICB8IC0tZXhlYz0qIHwgLS1leGU9KiB8IC0tZXg9KikKKyAgICBleGVjX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLWdhcyB8IC0tZ2FzIHwgLS1nYSB8IC0tZykKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLWdhcy4KKyAgICB3aXRoX2dhcz15ZXMgOzsKKworICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC1oKQorICAgIGFjX2luaXRfaGVscD1sb25nIDs7CisgIC1oZWxwPXIqIHwgLS1oZWxwPXIqIHwgLS1oZWw9ciogfCAtLWhlPXIqIHwgLWhyKikKKyAgICBhY19pbml0X2hlbHA9cmVjdXJzaXZlIDs7CisgIC1oZWxwPXMqIHwgLS1oZWxwPXMqIHwgLS1oZWw9cyogfCAtLWhlPXMqIHwgLWhzKikKKyAgICBhY19pbml0X2hlbHA9c2hvcnQgOzsKKworICAtaG9zdCB8IC0taG9zdCB8IC0taG9zIHwgLS1obykKKyAgICBhY19wcmV2PWhvc3RfYWxpYXMgOzsKKyAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKKyAgICBob3N0X2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtaHRtbGRpciB8IC0taHRtbGRpciB8IC0taHRtbGRpIHwgLS1odG1sZCB8IC0taHRtbCB8IC0taHRtIHwgLS1odCkKKyAgICBhY19wcmV2PWh0bWxkaXIgOzsKKyAgLWh0bWxkaXI9KiB8IC0taHRtbGRpcj0qIHwgLS1odG1sZGk9KiB8IC0taHRtbGQ9KiB8IC0taHRtbD0qIHwgLS1odG09KiBcCisgIHwgLS1odD0qKQorICAgIGh0bWxkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKKyAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKKyAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKKyAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKKyAgfCAtLWluY2x1ZD0qIHwgLS1pbmNsdT0qIHwgLS1pbmNsPSogfCAtLWluYz0qKQorICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmZvZGlyIHwgLS1pbmZvZGlyIHwgLS1pbmZvZGkgfCAtLWluZm9kIHwgLS1pbmZvIHwgLS1pbmYpCisgICAgYWNfcHJldj1pbmZvZGlyIDs7CisgIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCisgICAgaW5mb2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKKyAgICBhY19wcmV2PWxpYmRpciA7OworICAtbGliZGlyPSogfCAtLWxpYmRpcj0qIHwgLS1saWJkaT0qIHwgLS1saWJkPSopCisgICAgbGliZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZXhlY2RpciB8IC0tbGliZXhlY2RpciB8IC0tbGliZXhlY2RpIHwgLS1saWJleGVjZCB8IC0tbGliZXhlYyBcCisgIHwgLS1saWJleGUgfCAtLWxpYmV4IHwgLS1saWJlKQorICAgIGFjX3ByZXY9bGliZXhlY2RpciA7OworICAtbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaT0qIHwgLS1saWJleGVjZD0qIHwgLS1saWJleGVjPSogXAorICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKKyAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKKworICAtbG9jYWxlZGlyIHwgLS1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpIHwgLS1sb2NhbGVkIHwgLS1sb2NhbGUpCisgICAgYWNfcHJldj1sb2NhbGVkaXIgOzsKKyAgLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGk9KiB8IC0tbG9jYWxlZD0qIHwgLS1sb2NhbGU9KikKKyAgICBsb2NhbGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGkgfCAtLWxvY2Fsc3RhdGVkIFwKKyAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgfCAtLWxvY2FscykKKyAgICBhY19wcmV2PWxvY2Fsc3RhdGVkaXIgOzsKKyAgLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGk9KiB8IC0tbG9jYWxzdGF0ZWQ9KiBcCisgIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogfCAtLWxvY2Fscz0qKQorICAgIGxvY2Fsc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCisgICAgYWNfcHJldj1tYW5kaXIgOzsKKyAgLW1hbmRpcj0qIHwgLS1tYW5kaXI9KiB8IC0tbWFuZGk9KiB8IC0tbWFuZD0qIHwgLS1tYW49KiB8IC0tbWE9KiB8IC0tbT0qKQorICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW5mcCB8IC0tbmZwIHwgLS1uZikKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRob3V0LWZwLgorICAgIHdpdGhfZnA9bm8gOzsKKworICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwgLS1uby1jcmUgXAorICB8IC0tbm8tY3IgfCAtLW5vLWMgfCAtbikKKyAgICBub19jcmVhdGU9eWVzIDs7CisKKyAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCisgIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKQorICAgIG5vX3JlY3Vyc2lvbj15ZXMgOzsKKworICAtb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpIHwgLS1vbGRpbmNsdWRlZCBcCisgIHwgLS1vbGRpbmNsdWRlIHwgLS1vbGRpbmNsdWQgfCAtLW9sZGluY2x1IHwgLS1vbGRpbmNsIHwgLS1vbGRpbmMgXAorICB8IC0tb2xkaW4gfCAtLW9sZGkgfCAtLW9sZCB8IC0tb2wgfCAtLW8pCisgICAgYWNfcHJldj1vbGRpbmNsdWRlZGlyIDs7CisgIC1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpPSogfCAtLW9sZGluY2x1ZGVkPSogXAorICB8IC0tb2xkaW5jbHVkZT0qIHwgLS1vbGRpbmNsdWQ9KiB8IC0tb2xkaW5jbHU9KiB8IC0tb2xkaW5jbD0qIHwgLS1vbGRpbmM9KiBcCisgIHwgLS1vbGRpbj0qIHwgLS1vbGRpPSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopCisgICAgb2xkaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKKyAgICBhY19wcmV2PXByZWZpeCA7OworICAtcHJlZml4PSogfCAtLXByZWZpeD0qIHwgLS1wcmVmaT0qIHwgLS1wcmVmPSogfCAtLXByZT0qIHwgLS1wcj0qIHwgLS1wPSopCisgICAgcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpIHwgLS1wcm9ncmFtLXByZWYgXAorICB8IC0tcHJvZ3JhbS1wcmUgfCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkKKyAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7CisgIC1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpPSogXAorICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJlPSogfCAtLXByb2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopCisgICAgcHJvZ3JhbV9wcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcCisgIHwgLS1wcm9ncmFtLXN1ZiB8IC0tcHJvZ3JhbS1zdSB8IC0tcHJvZ3JhbS1zKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9zdWZmaXggOzsKKyAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZmk9KiBcCisgIHwgLS1wcm9ncmFtLXN1ZmY9KiB8IC0tcHJvZ3JhbS1zdWY9KiB8IC0tcHJvZ3JhbS1zdT0qIHwgLS1wcm9ncmFtLXM9KikKKyAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS0gXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0gfCAtLXByb2dyYW0tdHJhbnNmb3IgXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvIHwgLS1wcm9ncmFtLXRyYW5zZiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zIHwgLS1wcm9ncmFtLXRyYW4gXAorICB8IC0tcHJvZ3ItdHJhIHwgLS1wcm9ncmFtLXRyIHwgLS1wcm9ncmFtLXQpCisgICAgYWNfcHJldj1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lIDs7CisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmE9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtPSogfCAtLXByb2dyYW0tdHJhbnNmb3I9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zPSogfCAtLXByb2dyYW0tdHJhbj0qIFwKKyAgfCAtLXByb2dyLXRyYT0qIHwgLS1wcm9ncmFtLXRyPSogfCAtLXByb2dyYW0tdD0qKQorICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OworCisgIC1wZGZkaXIgfCAtLXBkZmRpciB8IC0tcGRmZGkgfCAtLXBkZmQgfCAtLXBkZiB8IC0tcGQpCisgICAgYWNfcHJldj1wZGZkaXIgOzsKKyAgLXBkZmRpcj0qIHwgLS1wZGZkaXI9KiB8IC0tcGRmZGk9KiB8IC0tcGRmZD0qIHwgLS1wZGY9KiB8IC0tcGQ9KikKKyAgICBwZGZkaXI9JGFjX29wdGFyZyA7OworCisgIC1wc2RpciB8IC0tcHNkaXIgfCAtLXBzZGkgfCAtLXBzZCB8IC0tcHMpCisgICAgYWNfcHJldj1wc2RpciA7OworICAtcHNkaXI9KiB8IC0tcHNkaXI9KiB8IC0tcHNkaT0qIHwgLS1wc2Q9KiB8IC0tcHM9KikKKyAgICBwc2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgc2lsZW50PXllcyA7OworCisgIC1zYmluZGlyIHwgLS1zYmluZGlyIHwgLS1zYmluZGkgfCAtLXNiaW5kIHwgLS1zYmluIHwgLS1zYmkgfCAtLXNiKQorICAgIGFjX3ByZXY9c2JpbmRpciA7OworICAtc2JpbmRpcj0qIHwgLS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXAorICB8IC0tc2JpPSogfCAtLXNiPSopCisgICAgc2JpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaSBcCisgIHwgLS1zaGFyZWRzdGF0ZWQgfCAtLXNoYXJlZHN0YXRlIHwgLS1zaGFyZWRzdGF0IHwgLS1zaGFyZWRzdGEgXAorICB8IC0tc2hhcmVkc3QgfCAtLXNoYXJlZHMgfCAtLXNoYXJlZCB8IC0tc2hhcmUgfCAtLXNoYXIgXAorICB8IC0tc2hhIHwgLS1zaCkKKyAgICBhY19wcmV2PXNoYXJlZHN0YXRlZGlyIDs7CisgIC1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpPSogXAorICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSogfCAtLXNoYXJlZHN0YXQ9KiB8IC0tc2hhcmVkc3RhPSogXAorICB8IC0tc2hhcmVkc3Q9KiB8IC0tc2hhcmVkcz0qIHwgLS1zaGFyZWQ9KiB8IC0tc2hhcmU9KiB8IC0tc2hhcj0qIFwKKyAgfCAtLXNoYT0qIHwgLS1zaD0qKQorICAgIHNoYXJlZHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2l0ZSB8IC0tc2l0ZSB8IC0tc2l0KQorICAgIGFjX3ByZXY9c2l0ZSA7OworICAtc2l0ZT0qIHwgLS1zaXRlPSogfCAtLXNpdD0qKQorICAgIHNpdGU9JGFjX29wdGFyZyA7OworCisgIC1zcmNkaXIgfCAtLXNyY2RpciB8IC0tc3JjZGkgfCAtLXNyY2QgfCAtLXNyYyB8IC0tc3IpCisgICAgYWNfcHJldj1zcmNkaXIgOzsKKyAgLXNyY2Rpcj0qIHwgLS1zcmNkaXI9KiB8IC0tc3JjZGk9KiB8IC0tc3JjZD0qIHwgLS1zcmM9KiB8IC0tc3I9KikKKyAgICBzcmNkaXI9JGFjX29wdGFyZyA7OworCisgIC1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwgLS1zeXNjb25mIFwKKyAgfCAtLXN5c2NvbiB8IC0tc3lzY28gfCAtLXN5c2MgfCAtLXN5cyB8IC0tc3kpCisgICAgYWNfcHJldj1zeXNjb25mZGlyIDs7CisgIC1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpPSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcCisgIHwgLS1zeXNjb249KiB8IC0tc3lzY289KiB8IC0tc3lzYz0qIHwgLS1zeXM9KiB8IC0tc3k9KikKKyAgICBzeXNjb25mZGlyPSRhY19vcHRhcmcgOzsKKworICAtdGFyZ2V0IHwgLS10YXJnZXQgfCAtLXRhcmdlIHwgLS10YXJnIHwgLS10YXIgfCAtLXRhIHwgLS10KQorICAgIGFjX3ByZXY9dGFyZ2V0X2FsaWFzIDs7CisgIC10YXJnZXQ9KiB8IC0tdGFyZ2V0PSogfCAtLXRhcmdlPSogfCAtLXRhcmc9KiB8IC0tdGFyPSogfCAtLXRhPSogfCAtLXQ9KikKKyAgICB0YXJnZXRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC12IHwgLXZlcmJvc2UgfCAtLXZlcmJvc2UgfCAtLXZlcmJvcyB8IC0tdmVyYm8gfCAtLXZlcmIpCisgICAgdmVyYm9zZT15ZXMgOzsKKworICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC1WKQorICAgIGFjX2luaXRfdmVyc2lvbj06IDs7CisKKyAgLXdpdGgtKiB8IC0td2l0aC0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisid2l0aF8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRoLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OworCisgIC13aXRob3V0LSogfCAtLXdpdGhvdXQtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIndpdGhfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aG91dC0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9bm8gOzsKKworICAtLXgpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC14LgorICAgIHdpdGhfeD15ZXMgOzsKKworICAteC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlIHwgLS14LWluY2x1ZCB8IC0teC1pbmNsdSBcCisgIHwgLS14LWluY2wgfCAtLXgtaW5jIHwgLS14LWluIHwgLS14LWkpCisgICAgYWNfcHJldj14X2luY2x1ZGVzIDs7CisgIC14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlPSogfCAtLXgtaW5jbHVkPSogfCAtLXgtaW5jbHU9KiBcCisgIHwgLS14LWluY2w9KiB8IC0teC1pbmM9KiB8IC0teC1pbj0qIHwgLS14LWk9KikKKyAgICB4X2luY2x1ZGVzPSRhY19vcHRhcmcgOzsKKworICAteC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllIHwgLS14LWxpYnJhcmkgXAorICB8IC0teC1saWJyYXIgfCAtLXgtbGlicmEgfCAtLXgtbGliciB8IC0teC1saWIgfCAtLXgtbGkgfCAtLXgtbCkKKyAgICBhY19wcmV2PXhfbGlicmFyaWVzIDs7CisgIC14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllPSogfCAtLXgtbGlicmFyaT0qIFwKKyAgfCAtLXgtbGlicmFyPSogfCAtLXgtbGlicmE9KiB8IC0teC1saWJyPSogfCAtLXgtbGliPSogfCAtLXgtbGk9KiB8IC0teC1sPSopCisgICAgeF9saWJyYXJpZXM9JGFjX29wdGFyZyA7OworCisgIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkYWNfb3B0aW9uJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgICA7OworCisgICo9KikKKyAgICBhY19lbnZ2YXI9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4XChbXj1dKlwpPSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGNhc2UgJGFjX2VudnZhciBpbiAjKAorICAgICAgJycgfCBbMC05XSogfCAqWyFfJGFzX2NyX2FsbnVtXSogKQorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFyaWFibGUgbmFtZTogXGAkYWNfZW52dmFyJyIgOzsKKyAgICBlc2FjCisgICAgZXZhbCAkYWNfZW52dmFyPVwkYWNfb3B0YXJnCisgICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsKKworICAqKQorICAgICMgRklYTUU6IHNob3VsZCBiZSByZW1vdmVkIGluIGF1dG9jb25mIDMuMC4KKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKKyAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKyAgICA6ICIke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufSIKKyAgICA7OworCisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgIGFjX29wdGlvbj0tLWBlY2hvICRhY19wcmV2IHwgc2VkICdzL18vLS9nJ2AKKyAgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyI7IHRoZW4KKyAgY2FzZSAkZW5hYmxlX29wdGlvbl9jaGVja2luZyBpbgorICAgIG5vKSA7OworICAgIGZhdGFsKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgOzsKKyAgICAqKSAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyIDs7CisgIGVzYWMKK2ZpCisKKyMgQ2hlY2sgYWxsIGRpcmVjdG9yeSBhcmd1bWVudHMgZm9yIGNvbnNpc3RlbmN5LgorZm9yIGFjX3ZhciBpbglleGVjX3ByZWZpeCBwcmVmaXggYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhcm9vdGRpciBcCisJCWRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGluY2x1ZGVkaXIgXAorCQlvbGRpbmNsdWRlZGlyIGRvY2RpciBpbmZvZGlyIGh0bWxkaXIgZHZpZGlyIHBkZmRpciBwc2RpciBcCisJCWxpYmRpciBsb2NhbGVkaXIgbWFuZGlyCitkbworICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgIyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcy4KKyAgY2FzZSAkYWNfdmFsIGluCisgICAgKi8gKQorICAgICAgYWNfdmFsPWBleHByICJYJGFjX3ZhbCIgOiAnWFwoLipbXi9dXCknIFx8ICJYJGFjX3ZhbCIgOiAnWFwoLipcKSdgCisgICAgICBldmFsICRhY192YXI9XCRhY192YWw7OworICBlc2FjCisgICMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lcy4KKyAgY2FzZSAkYWNfdmFsIGluCisgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKyAgICBOT05FIHwgJycgKSBjYXNlICRhY192YXIgaW4gKnByZWZpeCApIGNvbnRpbnVlOzsgZXNhYzs7CisgIGVzYWMKKyAgYXNfZm5fZXJyb3IgJD8gImV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiCitkb25lCisKKyMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKKyMgdXNlZCB0byBob2xkIHRoZSBhcmd1bWVudCBvZiAtLWhvc3QgZXRjLgorIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgorYnVpbGQ9JGJ1aWxkX2FsaWFzCitob3N0PSRob3N0X2FsaWFzCit0YXJnZXQ9JHRhcmdldF9hbGlhcworCisjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCitpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiICE9IHg7IHRoZW4KKyAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW1heWJlCisgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9eWVzCisgIGZpCitmaQorCithY190b29sX3ByZWZpeD0KK3Rlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3ByZWZpeD0kaG9zdF9hbGlhcy0KKwordGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyA2Pi9kZXYvbnVsbAorCisKK2FjX3B3ZD1gcHdkYCAmJiB0ZXN0IC1uICIkYWNfcHdkIiAmJgorYWNfbHNfZGk9YGxzIC1kaSAuYCAmJgorYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJ3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIKK3Rlc3QgIlgkYWNfbHNfZGkiID0gIlgkYWNfcHdkX2xzX2RpIiB8fAorICBhc19mbl9lcnJvciAkPyAicHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IgorCisKKyMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KK2lmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCisgICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKyAgYWNfY29uZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19teXNlbGYiIHx8CiskYXNfZXhwciBYIiRhc19teXNlbGYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfbXlzZWxmIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgc3JjZGlyPSRhY19jb25mZGlyCisgIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgICAgc3JjZGlyPS4uCisgIGZpCitlbHNlCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8KK2ZpCitpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorICB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXMgJiYgc3JjZGlyPSIkYWNfY29uZmRpciBvciAuLiIKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIKK2ZpCithY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCithY19hYnNfY29uZmRpcj1gKAorCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgYXNfZm5fZXJyb3IgJD8gIiRhY19tc2ciCisJcHdkKWAKKyMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCitpZiB0ZXN0ICIkYWNfYWJzX2NvbmZkaXIiID0gIiRhY19wd2QiOyB0aGVuCisgIHNyY2Rpcj0uCitmaQorIyBSZW1vdmUgdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHNyY2Rpci4KKyMgRG91YmxlIHNsYXNoZXMgaW4gZmlsZSBuYW1lcyBpbiBvYmplY3QgZmlsZSBkZWJ1Z2dpbmcgaW5mbworIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCitjYXNlICRzcmNkaXIgaW4KKyovKSBzcmNkaXI9YGV4cHIgIlgkc3JjZGlyIiA6ICdYXCguKlteL11cKScgXHwgIlgkc3JjZGlyIiA6ICdYXCguKlwpJ2A7OworZXNhYworZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKyAgZXZhbCBhY19lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKyAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KK2RvbmUKKworIworIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLgorIworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAibG9uZyI7IHRoZW4KKyAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCisgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KKyAgY2F0IDw8X0FDRU9GCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyB0aGlzIHBhY2thZ2UgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKworVG8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZS5nLiwgQ0MsIENGTEFHUy4uLiksIHNwZWNpZnkgdGhlbSBhcworVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKworRGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgaW4gYnJhY2tldHMuCisKK0NvbmZpZ3VyYXRpb246CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKyAgICAgIC0taGVscD1yZWN1cnNpdmUgICAgZGlzcGxheSB0aGUgc2hvcnQgaGVscCBvZiBhbGwgdGhlIGluY2x1ZGVkIHBhY2thZ2VzCisgIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZyAuLi4nIG1lc3NhZ2VzCisgICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtkaXNhYmxlZF0KKyAgLUMsIC0tY29uZmlnLWNhY2hlICAgICAgYWxpYXMgZm9yIFxgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScKKyAgLW4sIC0tbm8tY3JlYXRlICAgICAgICAgZG8gbm90IGNyZWF0ZSBvdXRwdXQgZmlsZXMKKyAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddCisKK0luc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisgIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiBFUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCisKK0J5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwgYWxsIHRoZSBmaWxlcyBpbgorXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKK2FuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBcYCRhY19kZWZhdWx0X3ByZWZpeCcgdXNpbmcgXGAtLXByZWZpeCcsCitmb3IgaW5zdGFuY2UgXGAtLXByZWZpeD1cJEhPTUUnLgorCitGb3IgYmV0dGVyIGNvbnRyb2wsIHVzZSB0aGUgb3B0aW9ucyBiZWxvdy4KKworRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1iaW5kaXI9RElSICAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCisgIC0tc2JpbmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQorICAtLWxpYmV4ZWNkaXI9RElSICAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCisgIC0tc3lzY29uZmRpcj1ESVIgICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorICAtLXNoYXJlZHN0YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQorICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCisgIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCisgIC0taW5jbHVkZWRpcj1ESVIgICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KKyAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KKyAgLS1kYXRhcm9vdGRpcj1ESVIgICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQorICAtLWRhdGFkaXI9RElSICAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQorICAtLWluZm9kaXI9RElSICAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dCisgIC0tbG9jYWxlZGlyPURJUiAgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQorICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvbWFuXQorICAtLWRvY2Rpcj1ESVIgICAgICAgICAgICBkb2N1bWVudGF0aW9uIHJvb3QgW0RBVEFST09URElSL2RvYy9QQUNLQUdFXQorICAtLWh0bWxkaXI9RElSICAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1kdmlkaXI9RElSICAgICAgICAgICAgZHZpIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wZGZkaXI9RElSICAgICAgICAgICAgcGRmIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wc2Rpcj1ESVIgICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorX0FDRU9GCisKKyAgY2F0IDw8XF9BQ0VPRgorCitTeXN0ZW0gdHlwZXM6CisgIC0tYnVpbGQ9QlVJTEQgICAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgb24gQlVJTEQgW2d1ZXNzZWRdCisgIC0taG9zdD1IT1NUICAgICAgIGNyb3NzLWNvbXBpbGUgdG8gYnVpbGQgcHJvZ3JhbXMgdG8gcnVuIG9uIEhPU1QgW0JVSUxEXQorX0FDRU9GCitmaQorCitpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgorCisgIGNhdCA8PFxfQUNFT0YKKworT3B0aW9uYWwgRmVhdHVyZXM6CisgIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgIGlnbm9yZSB1bnJlY29nbml6ZWQgLS1lbmFibGUvLS13aXRoIG9wdGlvbnMKKyAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQorICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCisgIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBlbmFibGUgbWFrZWZpbGUgcnVsZXMgdXNlZnVsIGZvciBtYWludGFpbmVycworICAtLWVuYWJsZS1zeW1saW5rLWluc3RhbGwgdXNlIHN5bWxpbmtzIHdoZW4gaW5zdGFsbGluZyBpbnN0ZWFkIG9mIGhhcmQgbGlua3MKKyAgLS1lbmFibGUtcmVsYXRpdmUtc3ltbGlua3MgdXNlIHJlbGF0aXZlIHN5bWxpbmtzIHdoZW4gaW5zdGFsbGluZworCisgIC0tZW5hYmxlLXN5bWxpbmstYnVpbGQgIHVzZSBzeW1saW5rcyB3aGlsZSBidWlsZGluZyBpbnN0ZWFkIG9mIGhhcmQgbGlua3MKKyAgLS1lbmFibGUtdmVyYm9zZS1tYWtlY21kcyBlbmFibGUgdmVyYm9zZSBtYWtlIGNvbW1hbmQgb3V0cHV0CisgIC0tZW5hYmxlLWNvbXByZXNzaW9uCSAgZW5hYmxlIEVYUEVSSU1FTlRBTCBjb21wcmVzc2lvbiBzdXBwb3J0CisgIC0tZW5hYmxlLWh0cmVlICAgICAgCSAgZW5hYmxlIEVYUEVSSU1FTlRBTCBodHJlZSBkaXJlY3Rvcnkgc3VwcG9ydAorICAtLWVuYWJsZS1lbGYtc2hsaWJzCSAgc2VsZWN0IEVMRiBzaGFyZWQgbGlicmFyaWVzCisgIC0tZW5hYmxlLWJzZC1zaGxpYnMJICBzZWxlY3QgQlNEIHNoYXJlZCBsaWJyYXJpZXMKKyAgLS1lbmFibGUtcHJvZmlsZQkgIGJ1aWxkIHByb2ZpbGluZyBsaWJyYXJpZXMKKyAgLS1lbmFibGUtZ2NvdgkgIAkgIGJ1aWxkIGZvciBjb3ZlcmFnZSB0ZXN0aW5nIHVzaW5nIGdjb3YKKyAgLS1lbmFibGUtamJkLWRlYnVnICAJICBlbmFibGUgam91cm5hbCBkZWJ1Z2dpbmcKKyAgLS1lbmFibGUtYmxraWQtZGVidWcgICAgZW5hYmxlIGJsa2lkIGRlYnVnZ2luZworICAtLWRpc2FibGUtdGVzdGlvLWRlYnVnICBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIHRlc3QgSS9PIG1hbmFnZXIgZm9yIGRlYnVnZ2luZworICAtLWRpc2FibGUtbGlidXVpZAkgIGRvIG5vdCBidWlsZCBwcml2YXRlIHV1aWQgbGlicmFyeQorICAtLWRpc2FibGUtbGliYmxraWQJICBkbyBub3QgYnVpbGQgcHJpdmF0ZSBibGtpZCBsaWJyYXJ5CisgIC0tZW5hYmxlLXF1b3RhCSAgZW5hYmxlIHF1b3RhIHN1cHBvcnQKKyAgLS1kaXNhYmxlLWJhY2t0cmFjZQkgIGRpc2FibGUgdXNlIGJhY2t0cmFjZQorICAtLWRpc2FibGUtZGVidWdmcyAgIAkgIGRpc2FibGUgc3VwcG9ydCBvZiBkZWJ1Z2ZzIHByb2dyYW0KKyAgLS1kaXNhYmxlLWltYWdlciAgIAkgIGRpc2FibGUgc3VwcG9ydCBvZiBlMmltYWdlIHByb2dyYW0KKyAgLS1kaXNhYmxlLXJlc2l6ZXIgICAJICBkaXNhYmxlIHN1cHBvcnQgb2YgZTJyZXNpemUgcHJvZ3JhbQorICAtLWRpc2FibGUtZGVmcmFnICAgCSAgZGlzYWJsZSBzdXBwb3J0IG9mIGU0ZGVmcmFnIHByb2dyYW0KKyAgLS1lbmFibGUtZnNjayAgICAgICAgICAgYnVpbGQgZnNjayB3cmFwcGVyIHByb2dyYW0KKyAgLS1lbmFibGUtZTJpbml0cmQtaGVscGVyIGJ1aWxkIGUyaW5pdHJkLWhlbHBlciBwcm9ncmFtCisgIC0tZGlzYWJsZS10bHMgICAgICAgICAgIGRpc2FibGUgdXNlIG9mIHRocmVhZCBsb2NhbCBzdXBwb3J0CisgIC0tZGlzYWJsZS11dWlkZCAgICAgICAgIGRpc2FibGUgYnVpbGRpbmcgdGhlIHV1aWQgZGFlbW9uCisgIC0tZGlzYWJsZS1ubHMgICAgICAgICAgIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyAgLS1lbmFibGUtdGhyZWFkcz17cG9zaXh8c29sYXJpc3xwdGh8d2luZG93c30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBtdWx0aXRocmVhZGluZyBBUEkKKyAgLS1kaXNhYmxlLXRocmVhZHMgICAgICAgYnVpbGQgd2l0aG91dCBtdWx0aXRocmVhZCBzYWZldHkKKyAgLS1kaXNhYmxlLXJwYXRoICAgICAgICAgZG8gbm90IGhhcmRjb2RlIHJ1bnRpbWUgbGlicmFyeSBwYXRocworCitPcHRpb25hbCBQYWNrYWdlczoKKyAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCisgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKKyAgLS13aXRoLWRpZXQtbGliYyAgICAgICAgdXNlIGRpZXQgbGliYworICAtLXdpdGgtY2MgICAgICAgICAgICAgICBubyBsb25nZXIgc3VwcG9ydGVkLCB1c2UgQ0M9IGluc3RlYWQKKyAgLS13aXRoLWNjb3B0cyAgICAgICAgICAgbm8gbG9uZ2VyIHN1cHBvcnRlZCwgdXNlIENGTEFHUz0gaW5zdGVhZAorICAtLXdpdGgtbGRvcHRzICAgICAgICAgICBubyBsb25nZXIgc3VwcG9ydGVkLCB1c2UgTERGTEFHUz0gaW5zdGVhZAorICAtLXdpdGgtcm9vdC1wcmVmaXg9UFJFRklYIG92ZXJyaWRlIHByZWZpeCB2YXJpYWJsZSBmb3IgZmlsZXMgdG8gYmUgcGxhY2VkIGluIHRoZSByb290CisgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKyAgLS13aXRoLWxpYnB0aC1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGlicHRoIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisgIC0td2l0aG91dC1saWJwdGgtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYnB0aCBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXIKKyAgLS13aXRoLWxpYmljb252LXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWJpY29udiBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorICAtLXdpdGhvdXQtbGliaWNvbnYtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYmljb252IGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcgorICAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dCB1c2UgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaW5jbHVkZWQgaGVyZQorICAtLXdpdGgtbGliaW50bC1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliaW50bCBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorICAtLXdpdGhvdXQtbGliaW50bC1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliaW50bCBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXIKKyAgLS13aXRoLW11bHRpYXJjaD1BUkNIIHNwZWNpZnkgdGhlIG11bHRpYXJjaCB0cmlwbGV0CisKK1NvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorICBDQyAgICAgICAgICBDIGNvbXBpbGVyIGNvbW1hbmQKKyAgQ0ZMQUdTICAgICAgQyBjb21waWxlciBmbGFncworICBMREZMQUdTICAgICBsaW5rZXIgZmxhZ3MsIGUuZy4gLUw8bGliIGRpcj4gaWYgeW91IGhhdmUgbGlicmFyaWVzIGluIGEKKyAgICAgICAgICAgICAgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxsaWIgZGlyPgorICBMSUJTICAgICAgICBsaWJyYXJpZXMgdG8gcGFzcyB0byB0aGUgbGlua2VyLCBlLmcuIC1sPGxpYnJhcnk+CisgIENQUEZMQUdTICAgIChPYmplY3RpdmUpIEMvQysrIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYKKyAgICAgICAgICAgICAgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+CisgIENQUCAgICAgICAgIEMgcHJlcHJvY2Vzc29yCisgIFBLR19DT05GSUcgIHBhdGggdG8gcGtnLWNvbmZpZyB1dGlsaXR5CisgIFBLR19DT05GSUdfUEFUSAorICAgICAgICAgICAgICBkaXJlY3RvcmllcyB0byBhZGQgdG8gcGtnLWNvbmZpZydzIHNlYXJjaCBwYXRoCisgIFBLR19DT05GSUdfTElCRElSCisgICAgICAgICAgICAgIHBhdGggb3ZlcnJpZGluZyBwa2ctY29uZmlnJ3MgYnVpbHQtaW4gc2VhcmNoIHBhdGgKKworVXNlIHRoZXNlIHZhcmlhYmxlcyB0byBvdmVycmlkZSB0aGUgY2hvaWNlcyBtYWRlIGJ5IGBjb25maWd1cmUnIG9yIHRvIGhlbHAKK2l0IHRvIGZpbmQgbGlicmFyaWVzIGFuZCBwcm9ncmFtcyB3aXRoIG5vbnN0YW5kYXJkIG5hbWVzL2xvY2F0aW9ucy4KKworUmVwb3J0IGJ1Z3MgdG8gdGhlIHBhY2thZ2UgcHJvdmlkZXIuCitfQUNFT0YKK2FjX3N0YXR1cz0kPworZmkKKworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgorICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgorICBmb3IgYWNfZGlyIGluIDogJGFjX3N1YmRpcnNfYWxsOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQorICAgIHRlc3QgLWQgIiRhY19kaXIiIHx8CisgICAgICB7IGNkICIkc3JjZGlyIiAmJiBhY19wd2Q9YHB3ZGAgJiYgc3JjZGlyPS4gJiYgdGVzdCAtZCAiJGFjX2RpciI7IH0gfHwKKyAgICAgIGNvbnRpbnVlCisgICAgYWNfYnVpbGRkaXI9LgorCitjYXNlICIkYWNfZGlyIiBpbgorLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisqKQorICBhY19kaXJfc3VmZml4PS9gJGFzX2VjaG8gIiRhY19kaXIiIHwgc2VkICdzfF5cLltcXC9dfHwnYAorICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisgICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisgIGVzYWMgOzsKK2VzYWMKK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAorIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorCitjYXNlICRzcmNkaXIgaW4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorICAgIGFjX3NyY2Rpcj0uCisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CisgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OworICAqKSAjIFJlbGF0aXZlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKK2VzYWMKK2FjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKworICAgIGNkICIkYWNfZGlyIiB8fCB7IGFjX3N0YXR1cz0kPzsgY29udGludWU7IH0KKyAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSIgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlIiAtLWhlbHA9cmVjdXJzaXZlCisgICAgZWxzZQorICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKyAgICBmaSB8fCBhY19zdGF0dXM9JD8KKyAgICBjZCAiJGFjX3B3ZCIgfHwgeyBhY19zdGF0dXM9JD87IGJyZWFrOyB9CisgIGRvbmUKK2ZpCisKK3Rlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cworaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgorICBjYXQgPDxcX0FDRU9GCitjb25maWd1cmUKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OQorCitDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorX0FDRU9GCisgIGV4aXQKK2ZpCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQXV0b2NvbmYgaW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBhY19mbl9jX3RyeV9jb21waWxlIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gY29tcGlsZSBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9jb21waWxlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorICBpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9jb21waWxlCisKKyMgYWNfZm5fY190cnlfbGluayBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfbGluayAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKwkgdGVzdCAteCBjb25mdGVzdCRhY19leGVleHQKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgIyBEZWxldGUgdGhlIElQQS9JUE8gKEludGVyIFByb2NlZHVyYWwgQW5hbHlzaXMvT3B0aW1pemF0aW9uKSBpbmZvcm1hdGlvbgorICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCisgICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCisgICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9saW5rCisKKyMgYWNfZm5fY190cnlfY3BwIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBwcmVwcm9jZXNzIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2NwcCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gPiBjb25mdGVzdC5pICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgIGFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9jcHAKKworIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzLCBnaXZpbmcgYSB3YXJuaW5nIGlmIGl0IGNhbm5vdCBiZSBjb21waWxlZCB1c2luZworIyB0aGUgaW5jbHVkZSBmaWxlcyBpbiBJTkNMVURFUyBhbmQgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSCisjIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorZWxzZQorICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgdXNhYmlsaXR5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICQyIHVzYWJpbGl0eS4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCitlbHNlCisgIGFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorJGFzX2VjaG8gIiRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorCisjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgcHJlc2VuY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJDIgcHJlc2VuY2UuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworZWxzZQorICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorJGFzX2VjaG8gIiRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAjKCgKKyAgeWVzOm5vOiApCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorICAgIDs7CisgIG5vOnllczoqICkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICA7OworZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1cJGFjX2hlYWRlcl9jb21waWxlciIKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbAorCisjIGFjX2ZuX2NfdHJ5X3J1biBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuIEFzc3VtZXMKKyMgdGhhdCBleGVjdXRhYmxlcyAqY2FuKiBiZSBydW4uCithY19mbl9jX3RyeV9ydW4gKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorICAgICAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgICAgYWNfcmV0dmFsPSRhY19zdGF0dXMKK2ZpCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfcnVuCisKKyMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cyBhbmQgY2FuIGJlIGNvbXBpbGVkIHVzaW5nIHRoZSBpbmNsdWRlIGZpbGVzIGluCisjIElOQ0xVREVTLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkMz15ZXMiCitlbHNlCisgIGV2YWwgIiQzPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUKKworIyBhY19mbl9jX2NoZWNrX3R5cGUgTElORU5PIFRZUEUgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBUWVBFIGV4aXN0cyBhZnRlciBoYXZpbmcgaW5jbHVkZWQgSU5DTFVERVMsIHNldHRpbmcgY2FjaGUKKyMgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja190eXBlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK2lmIChzaXplb2YgKCQyKSkKKwkgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworaWYgKHNpemVvZiAoKCQyKSkpCisJICAgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgZXZhbCAiJDM9eWVzIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfdHlwZQorCisjIGFjX2ZuX2NfY2hlY2tfZnVuYyBMSU5FTk8gRlVOQyBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEZVTkMgZXhpc3RzLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkKK2FjX2ZuX2NfY2hlY2tfZnVuYyAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkMiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICQyLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICQyIGlubm9jdW91c18kMgorCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkMiAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkMgorCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICQyICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfJDIgfHwgZGVmaW5lZCBfX3N0dWJfX18kMgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAkMiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkMz15ZXMiCitlbHNlCisgIGV2YWwgIiQzPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19mdW5jCisKKyMgYWNfZm5fY19jaGVja19kZWNsIExJTkVOTyBTWU1CT0wgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIFNZTUJPTCBpcyBkZWNsYXJlZCBpbiBJTkNMVURFUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2RlY2wgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBhc19kZWNsX25hbWU9YGVjaG8gJDJ8c2VkICdzLyAqKC4qLy8nYAorICBhc19kZWNsX3VzZT1gZWNobyAkMnxzZWQgLWUgJ3MvKC8oKC8nIC1lICdzLykvKSAwJi8nIC1lICdzLywvKSAwJiAoL2cnYAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFzX2RlY2xfbmFtZSBpcyBkZWNsYXJlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhc19kZWNsX25hbWUgaXMgZGVjbGFyZWQuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CisjaWZuZGVmICRhc19kZWNsX25hbWUKKyNpZmRlZiBfX2NwbHVzcGx1cworICAodm9pZCkgJGFzX2RlY2xfdXNlOworI2Vsc2UKKyAgKHZvaWQpICRhc19kZWNsX25hbWU7CisjZW5kaWYKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2RlY2wKKworIyBhY19mbl9jX2NvbXB1dGVfaW50IExJTkVOTyBFWFBSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmllcyB0byBmaW5kIHRoZSBjb21waWxlLXRpbWUgdmFsdWUgb2YgRVhQUiBpbiBhIHByb2dyYW0gdGhhdCBpbmNsdWRlcworIyBJTkNMVURFUywgc2V0dGluZyBWQVIgYWNjb3JkaW5nbHkuIFJldHVybnMgd2hldGhlciB0aGUgdmFsdWUgY291bGQgYmUKKyMgY29tcHV0ZWQKK2FjX2ZuX2NfY29tcHV0ZV9pbnQgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMDsKK3JldHVybiB0ZXN0X2FycmF5IFswXTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMDsKK3JldHVybiB0ZXN0X2FycmF5IFswXTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGFzX2ZuX2FyaXRoICRhY19taWQgKyAxICYmIGFjX2xvPSRhc192YWwKKwkJCWlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCQkgIGFjX2xvPSBhY19oaT0KKwkJCSAgYnJlYWsKKwkJCWZpCisJCQlhc19mbl9hcml0aCAyICcqJyAkYWNfbWlkICsgMSAmJiBhY19taWQ9JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPCAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDA7CityZXR1cm4gdGVzdF9hcnJheSBbMF07CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0tMSBhY19taWQ9LTEKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMDsKK3JldHVybiB0ZXN0X2FycmF5IFswXTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2xvPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfbWlkICcpJyAtIDEgJiYgYWNfaGk9JGFzX3ZhbAorCQkJaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KKwkJCSAgYWNfbG89IGFjX2hpPQorCQkJICBicmVhaworCQkJZmkKKwkJCWFzX2ZuX2FyaXRoIDIgJyonICRhY19taWQgJiYgYWNfbWlkPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBhY19sbz0gYWNfaGk9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBhc19mbl9hcml0aCAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG8gJiYgYWNfbWlkPSRhc192YWwKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDA7CityZXR1cm4gdGVzdF9hcnJheSBbMF07CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfbWlkICcpJyArIDEgJiYgYWNfbG89JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4gIygoCis/KikgZXZhbCAiJDM9XCRhY19sbyI7IGFjX3JldHZhbD0wIDs7CisnJykgYWNfcmV0dmFsPTEgOzsKK2VzYWMKKyAgZWxzZQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitzdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiAkMjsgfQorc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuICQyOyB9CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworCisgIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7CisgIGlmICghIGYpCisgICAgcmV0dXJuIDE7CisgIGlmICgoJDIpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGludCBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgkMikpCisJcmV0dXJuIDE7CisgICAgICBmcHJpbnRmIChmLCAiJWxkIiwgaSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBpbnQgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKCQyKSkKKwlyZXR1cm4gMTsKKyAgICAgIGZwcmludGYgKGYsICIlbHUiLCBpKTsKKyAgICB9CisgIC8qIERvIG5vdCBvdXRwdXQgYSB0cmFpbGluZyBuZXdsaW5lLCBhcyB0aGlzIGNhdXNlcyBcclxuIGNvbmZ1c2lvbgorICAgICBvbiBzb21lIHBsYXRmb3Jtcy4gICovCisgIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZWNobyA+PmNvbmZ0ZXN0LnZhbDsgcmVhZCAkMyA8Y29uZnRlc3QudmFsOyBhY19yZXR2YWw9MAorZWxzZQorICBhY19yZXR2YWw9MQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorCisgIGZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfY29tcHV0ZV9pbnQKKworIyBhY19mbl9jX2NoZWNrX21lbWJlciBMSU5FTk8gQUdHUiBNRU1CRVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJpZXMgdG8gZmluZCBpZiB0aGUgZmllbGQgTUVNQkVSIGV4aXN0cyBpbiB0eXBlIEFHR1IsIGFmdGVyIGluY2x1ZGluZworIyBJTkNMVURFUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX21lbWJlciAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyLiQzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4kMy4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskNCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ1CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyAkMiBhY19hZ2dyOworaWYgKGFjX2FnZ3IuJDMpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkND15ZXMiCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ1CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyAkMiBhY19hZ2dyOworaWYgKHNpemVvZiBhY19hZ2dyLiQzKQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDQ9eWVzIgorZWxzZQorICBldmFsICIkND1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQ0CisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX21lbWJlcgorY2F0ID5jb25maWcubG9nIDw8X0FDRU9GCitUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQorcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KKworSXQgd2FzIGNyZWF0ZWQgYnkgJGFzX21lLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgICQgJDAgJEAKKworX0FDRU9GCitleGVjIDU+PmNvbmZpZy5sb2cKK3sKK2NhdCA8PF9BU1VOQU1FCisjIyAtLS0tLS0tLS0gIyMKKyMjIFBsYXRmb3JtLiAjIworIyMgLS0tLS0tLS0tICMjCisKK2hvc3RuYW1lID0gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGwgICAgIHx8IGVjaG8gdW5rbm93bmAKKworL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi9tYWNoaW5lICAgICAgICAgICA9IGAoL2Jpbi9tYWNoaW5lKSAyPi9kZXYvbnVsbCAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorCitfQVNVTkFNRQorCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgJGFzX2VjaG8gIlBBVEg6ICRhc19kaXIiCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworfSA+JjUKKworY2F0ID4mNSA8PF9BQ0VPRgorCisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyBDb3JlIHRlc3RzLiAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworX0FDRU9GCisKKworIyBLZWVwIGEgdHJhY2Ugb2YgdGhlIGNvbW1hbmQgbGluZS4KKyMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorIyBTdHJpcCBvdXQgLS1zaWxlbnQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHJlY29yZCBpdCBmb3IgZnV0dXJlIHJ1bnMuCisjIEFsc28gcXVvdGUgYW55IGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhLWNoYXJhY3RlcnMuCisjIE1ha2UgdHdvIHBhc3NlcyB0byBhbGxvdyBmb3IgcHJvcGVyIGR1cGxpY2F0ZS1hcmd1bWVudCBzdXBwcmVzc2lvbi4KK2FjX2NvbmZpZ3VyZV9hcmdzPQorYWNfY29uZmlndXJlX2FyZ3MwPQorYWNfY29uZmlndXJlX2FyZ3MxPQorYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UKK2ZvciBhY19wYXNzIGluIDEgMgorZG8KKyAgZm9yIGFjX2FyZworICBkbworICAgIGNhc2UgJGFjX2FyZyBpbgorICAgIC1uby1jcmVhdGUgfCAtLW5vLWMqIHwgLW4gfCAtbm8tcmVjdXJzaW9uIHwgLS1uby1yKikgY29udGludWUgOzsKKyAgICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgICAgY29udGludWUgOzsKKyAgICAqXCcqKQorICAgICAgYWNfYXJnPWAkYXNfZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgY2FzZSAkYWNfcGFzcyBpbgorICAgIDEpIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczAgIiAnJGFjX2FyZyciIDs7CisgICAgMikKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczEgIiAnJGFjX2FyZyciCisgICAgICBpZiB0ZXN0ICRhY19tdXN0X2tlZXBfbmV4dCA9IHRydWU7IHRoZW4KKwlhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCisgICAgICBlbHNlCisJY2FzZSAkYWNfYXJnIGluCisJICAqPSogfCAtLWNvbmZpZy1jYWNoZSB8IC1DIHwgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qIFwKKwkgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKwkgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKKwkgIHwgLXdpdGgtKiB8IC0td2l0aC0qIHwgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qIHwgLS14KQorCSAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKwkgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIgorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKK2RvbmUKK3sgYWNfY29uZmlndXJlX2FyZ3MwPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MwO30KK3sgYWNfY29uZmlndXJlX2FyZ3MxPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MxO30KKworIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQorIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKKyMgd291bGQgY2F1c2UgcHJvYmxlbXMgb3IgbG9vayB1Z2x5LgorIyBXQVJOSU5HOiBVc2UgJ1wnJyB0byByZXByZXNlbnQgYW4gYXBvc3Ryb3BoZSB3aXRoaW4gdGhlIHRyYXAuCisjIFdBUk5JTkc6IERvIG5vdCBzdGFydCB0aGUgdHJhcCBjb2RlIHdpdGggYSBuZXdsaW5lLCBkdWUgdG8gYSBGcmVlQlNEIDQuMCBidWcuCit0cmFwICdleGl0X3N0YXR1cz0kPworICAjIFNhdmUgaW50byBjb25maWcubG9nIHNvbWUgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZy4KKyAgeworICAgIGVjaG8KKworICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyBDYWNoZSB2YXJpYWJsZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjIgorICAgIGVjaG8KKyAgICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdcJydzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ1wnJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPSdcJycgJ1wnJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgIHNlZCAtbiBcCisJInMvJ1wnJy8nXCcnXFxcXCdcJycnXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcJydcXDInXCcnL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorICAgICAgOzsKKyAgICBlc2FjIHwKKyAgICBzb3J0CispCisgICAgZWNobworCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBPdXRwdXQgdmFyaWFibGVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgZWNobworICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X3ZhcnMKKyAgICBkbworICAgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgICBjYXNlICRhY192YWwgaW4KKyAgICAgICpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKyAgICAgIGVzYWMKKyAgICAgICRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKyAgICBkb25lIHwgc29ydAorICAgIGVjaG8KKworICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGaWxlIHN1YnN0aXR1dGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjIgorICAgICAgZWNobworICAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfZmlsZXMKKyAgICAgIGRvCisJZXZhbCBhY192YWw9XCQkYWNfdmFyCisJY2FzZSAkYWNfdmFsIGluCisJKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworCWVzYWMKKwkkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCisgICAgICBkb25lIHwgc29ydAorICAgICAgZWNobworICAgIGZpCisKKyAgICBpZiB0ZXN0IC1zIGNvbmZkZWZzLmg7IHRoZW4KKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLSAjIworIyMgY29uZmRlZnMuaC4gIyMKKyMjIC0tLS0tLS0tLS0tICMjIgorICAgICAgZWNobworICAgICAgY2F0IGNvbmZkZWZzLmgKKyAgICAgIGVjaG8KKyAgICBmaQorICAgIHRlc3QgIiRhY19zaWduYWwiICE9IDAgJiYKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKyAgfSA+JjUKKyAgcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qICYmCisgICAgcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorICAgIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKK2ZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbworICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyBhc19mbl9leGl0IDEnICRhY19zaWduYWwKK2RvbmUKK2FjX3NpZ25hbD0wCisKKyMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCitybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMuaAorCiskYXNfZWNobyAiLyogY29uZmRlZnMuaCAqLyIgPiBjb25mZGVmcy5oCisKKyMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiJFBBQ0tBR0VfTkFNRSIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiJFBBQ0tBR0VfVEFSTkFNRSIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiJFBBQ0tBR0VfVkVSU0lPTiIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIkUEFDS0FHRV9TVFJJTkciCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiJFBBQ0tBR0VfQlVHUkVQT1JUIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9VUkwgIiRQQUNLQUdFX1VSTCIKK19BQ0VPRgorCisKKyMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgorIyBQcmVmZXIgYW4gZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KK2FjX3NpdGVfZmlsZTE9Tk9ORQorYWNfc2l0ZV9maWxlMj1OT05FCitpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCisgICMgV2UgZG8gbm90IHdhbnQgYSBQQVRIIHNlYXJjaCBmb3IgY29uZmlnLnNpdGUuCisgIGNhc2UgJENPTkZJR19TSVRFIGluICMoKAorICAgIC0qKSAgYWNfc2l0ZV9maWxlMT0uLyRDT05GSUdfU0lURTs7CisgICAgKi8qKSBhY19zaXRlX2ZpbGUxPSRDT05GSUdfU0lURTs7CisgICAgKikgICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgZXNhYworZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgYWNfc2l0ZV9maWxlMT0kcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisgIGFjX3NpdGVfZmlsZTI9JHByZWZpeC9ldGMvY29uZmlnLnNpdGUKK2Vsc2UKKyAgYWNfc2l0ZV9maWxlMT0kYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlCitmaQorZm9yIGFjX3NpdGVfZmlsZSBpbiAiJGFjX3NpdGVfZmlsZTEiICIkYWNfc2l0ZV9maWxlMiIKK2RvCisgIHRlc3QgIngkYWNfc2l0ZV9maWxlIiA9IHhOT05FICYmIGNvbnRpbnVlCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkYWNfc2l0ZV9maWxlIiAmJiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY2O30KKyAgICBzZWQgJ3MvXi98IC8nICIkYWNfc2l0ZV9maWxlIiA+JjUKKyAgICAuICIkYWNfc2l0ZV9maWxlIiBcCisgICAgICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJmYWlsZWQgdG8gbG9hZCBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICBmaQorZG9uZQorCitpZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgIyBTb21lIHZlcnNpb25zIG9mIGJhc2ggd2lsbCBmYWlsIHRvIHNvdXJjZSAvZGV2L251bGwgKHNwZWNpYWwgZmlsZXMKKyAgIyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuICBESkdQUCBlbXVsYXRlcyBpdCBhcyBhIHJlZ3VsYXIgZmlsZS4KKyAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRjYWNoZV9maWxlIiAmJiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICBjYXNlICRjYWNoZV9maWxlIGluCisgICAgICBbXFwvXSogfCA/OltcXC9dKiApIC4gIiRjYWNoZV9maWxlIjs7CisgICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAuICIuLyRjYWNoZV9maWxlIjs7CisgICAgZXNhYworICBmaQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICA+JGNhY2hlX2ZpbGUKK2ZpCisKK2d0X25lZWRzPSIkZ3RfbmVlZHMgIgorYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3RkbGliLmgiCithc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiB1bmlzdGQuaCIKK2FzX2ZuX2FwcGVuZCBhY19oZWFkZXJfbGlzdCAiIHN5cy9wYXJhbS5oIgorYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHN5bWxpbmsiCisjIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCisjIHZhbHVlLgorYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAorICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAorICBldmFsIGFjX29sZF92YWw9XCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlCisgIGV2YWwgYWNfbmV3X3ZhbD1cJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgorICAgIHNldCwpCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworICAgICxzZXQpCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLCk7OworICAgICopCisgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCisJIyBkaWZmZXJlbmNlcyBpbiB3aGl0ZXNwYWNlIGRvIG5vdCBsZWFkIHRvIGZhaWx1cmUuCisJYWNfb2xkX3ZhbF93PWBlY2hvIHggJGFjX29sZF92YWxgCisJYWNfbmV3X3ZhbF93PWBlY2hvIHggJGFjX25ld192YWxgCisJaWYgdGVzdCAiJGFjX29sZF92YWxfdyIgIT0gIiRhY19uZXdfdmFsX3ciOyB0aGVuCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgYWNfY2FjaGVfY29ycnVwdGVkPToKKwllbHNlCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgZXZhbCAkYWNfdmFyPVwkYWNfb2xkX3ZhbAorCWZpCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mMjt9CisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mMjt9CisgICAgICBmaTs7CisgIGVzYWMKKyAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KKyAgICBjYXNlICRhY19uZXdfdmFsIGluCisgICAgKlwnKikgYWNfYXJnPSRhY192YXI9YCRhc19lY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAqKSBhY19hcmc9JGFjX3Zhcj0kYWNfbmV3X3ZhbCA7OworICAgIGVzYWMKKyAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KKyAgICAgICoiICckYWNfYXJnJyAiKikgOzsgIyBBdm9pZCBkdXBzLiAgVXNlIG9mIHF1b3RlcyBlbnN1cmVzIGFjY3VyYWN5LgorICAgICAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIiA7OworICAgIGVzYWMKKyAgZmkKK2RvbmUKK2lmICRhY19jYWNoZV9jb3JydXB0ZWQ7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKyAgYXNfZm5fZXJyb3IgJD8gInJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiICIkTElORU5PIiA1CitmaQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworCithY19hdXhfZGlyPQorZm9yIGFjX2RpciBpbiBjb25maWcgIiRzcmNkaXIiL2NvbmZpZzsgZG8KKyAgaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLXNoIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwtc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwuc2giOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKKyAgICBicmVhaworICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvc2h0b29sIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL3NodG9vbCBpbnN0YWxsIC1jIgorICAgIGJyZWFrCisgIGZpCitkb25lCitpZiB0ZXN0IC16ICIkYWNfYXV4X2RpciI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIGluc3RhbGwtc2gsIGluc3RhbGwuc2gsIG9yIHNodG9vbCBpbiBjb25maWcgXCIkc3JjZGlyXCIvY29uZmlnIiAiJExJTkVOTyIgNQorZmkKKworIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCisjIGFuZCBhcmUgaW50ZW5kZWQgdG8gYmUgd2l0aGRyYXduIGluIGEgZnV0dXJlIEF1dG9jb25mIHJlbGVhc2UuCisjIFRoZXkgY2FuIGNhdXNlIHNlcmlvdXMgcHJvYmxlbXMgaWYgYSBidWlsZGVyJ3Mgc291cmNlIHRyZWUgaXMgaW4gYSBkaXJlY3RvcnkKKyMgd2hvc2UgZnVsbCBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycy4KK2FjX2NvbmZpZ19ndWVzcz0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KK2FjX2NvbmZpZ19zdWI9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorCisKK2FjX2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMgbGliL2NvbmZpZy5oIgorCisKK01DT05GSUc9Li9NQ09ORklHCisKK0JJTkFSWV9UWVBFPWJpbgorRTJGU1BST0dTX1ZFUlNJT049YGdyZXAgRTJGU1BST0dTX1ZFUlNJT04gJHtzcmNkaXJ9L3ZlcnNpb24uaCAgXAorCXwgYXdrICd7cHJpbnQgJDN9JyB8IHRyIFwiICIgIiB8IGF3ayAne3ByaW50ICQxfSdgCitEQVRFPWBncmVwIEUyRlNQUk9HU19EQVRFICR7c3JjZGlyfS92ZXJzaW9uLmggfCBhd2sgJ3twcmludCAkM30nIFwKKwl8IHRyIFwiICIgImAKK0UyRlNQUk9HU19EQVk9YGVjaG8gJERBVEUgfCBhd2sgLUYtICd7cHJpbnQgJDF9J2AKK01PTlRIPWBlY2hvICREQVRFIHwgYXdrIC1GLSAne3ByaW50ICQyfSdgCitZRUFSPWBlY2hvICREQVRFIHwgYXdrIC1GLSAne3ByaW50ICQzfSdgCisKK2lmIGV4cHIgJFlFQVIgIj4iIDE5MDAgPiAvZGV2L251bGwgOyB0aGVuCisJRTJGU1BST0dTX1lFQVI9JFlFQVIKK2VsaWYgZXhwciAkWUVBUiAiPiIgOTAgPi9kZXYvbnVsbCA7IHRoZW4KKwlFMkZTUFJPR1NfWUVBUj0xOSRZRUFSCitlbHNlCisJRTJGU1BST0dTX1lFQVI9MjAkWUVBUgorZmkKKworY2FzZSAkTU9OVEggaW4KK0phbikJTU9OVEhfTlVNPTAxOyBFMkZTUFJPR1NfTU9OVEg9IkphbnVhcnkiIDs7CitGZWIpCU1PTlRIX05VTT0wMjsgRTJGU1BST0dTX01PTlRIPSJGZWJydWFyeSIgOzsKK01hcikJTU9OVEhfTlVNPTAzOyBFMkZTUFJPR1NfTU9OVEg9Ik1hcmNoIiA7OworQXByKQlNT05USF9OVU09MDQ7IEUyRlNQUk9HU19NT05USD0iQXByaWwiIDs7CitNYXkpCU1PTlRIX05VTT0wNTsgRTJGU1BST0dTX01PTlRIPSJNYXkiIDs7CitKdW4pCU1PTlRIX05VTT0wNjsgRTJGU1BST0dTX01PTlRIPSJKdW5lIiA7OworSnVsKQlNT05USF9OVU09MDc7IEUyRlNQUk9HU19NT05USD0iSnVseSIgOzsKK0F1ZykJTU9OVEhfTlVNPTA4OyBFMkZTUFJPR1NfTU9OVEg9IkF1Z3VzdCIgOzsKK1NlcCkJTU9OVEhfTlVNPTA5OyBFMkZTUFJPR1NfTU9OVEg9IlNlcHRlbWJlciIgOzsKK09jdCkJTU9OVEhfTlVNPTEwOyBFMkZTUFJPR1NfTU9OVEg9Ik9jdG9iZXIiIDs7CitOb3YpCU1PTlRIX05VTT0xMTsgRTJGU1BST0dTX01PTlRIPSJOb3ZlbWJlciIgOzsKK0RlYykJTU9OVEhfTlVNPTEyOyBFMkZTUFJPR1NfTU9OVEg9IkRlY2VtYmVyIiA7OworKikJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmtub3duIG1vbnRoICRNT05USD8/IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVua25vd24gbW9udGggJE1PTlRIPz8iID4mMjt9IDs7Citlc2FjCisKK2Jhc2VfdmVyPWBlY2hvICRFMkZTUFJPR1NfVkVSU0lPTiB8IFwKKwkgICAgICAgc2VkIC1lICdzLy1XSVAvLycgLWUgJ3MvcHJlLS8vJyAtZSAncy8tUExVUy8vJ2AKKworZGF0ZV9zcGVjPSR7RTJGU1BST0dTX1lFQVJ9LiR7TU9OVEhfTlVNfS4ke0UyRlNQUk9HU19EQVl9CisKK2Nhc2UgJEUyRlNQUk9HU19WRVJTSU9OIGluCisqLVdJUHxwcmUtKikKKwlFMkZTUFJPR1NfUEtHVkVSPSIkYmFzZV92ZXJ+V0lQLSRFMkZTUFJPR1NfWUVBUi0kTU9OVEhfTlVNLSRFMkZTUFJPR1NfREFZIgorCTs7CisqKQorCUUyRlNQUk9HU19QS0dWRVI9IiRiYXNlX3ZlciIKKwk7OworZXNhYworCit1bnNldCBEQVRFIE1PTlRIIFlFQVIgYmFzZV92ZXIgcHJlX3ZlcnMgZGF0ZV9zcGVjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogR2VuZXJhdGluZyBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGUyZnNwcm9ncyB2ZXJzaW9uICRFMkZTUFJPR1NfVkVSU0lPTiIgPiY1CiskYXNfZWNobyAiR2VuZXJhdGluZyBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGUyZnNwcm9ncyB2ZXJzaW9uICRFMkZTUFJPR1NfVkVSU0lPTiIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogUmVsZWFzZSBkYXRlIGlzICR7RTJGU1BST0dTX01PTlRIfSwgJHtFMkZTUFJPR1NfWUVBUn0iID4mNQorJGFzX2VjaG8gIlJlbGVhc2UgZGF0ZSBpcyAke0UyRlNQUk9HU19NT05USH0sICR7RTJGU1BST0dTX1lFQVJ9IiA+JjY7IH0KKworCisKKworCitXSVRIX0RJRVRfTElCQz0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kaWV0LWxpYmMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2RpZXRfbGliYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZGlldF9saWJjOyBDQz0iZGlldCBjYyAtbm9zdGRpbmMiCitXSVRIX0RJRVRfTElCQz15ZXMKK2lmIHRlc3QgLXogIiRMSUJTIgordGhlbgorCUxJQlM9Ii1sY29tcGF0IgorZWxzZQorCUxJQlM9IiRMSUJTIC1sY29tcGF0IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBDQz0kQ0MiID4mNQorJGFzX2VjaG8gIkNDPSRDQyIgPiY2OyB9CitmaQorIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgorJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgIiRMSU5FTk8iIDUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9idWlsZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwordGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisgIGFjX2J1aWxkX2FsaWFzPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyJgCit0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgIiRMSU5FTk8iIDUKK2FjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+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+Y29uZmRlZnMuaAorCitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfY2Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2NjOyBhc19mbl9lcnJvciAkPyAiLS13aXRoLWNjIG5vIGxvbmdlciBzdXBwb3J0ZWQ7IHVzZSBDQz0gaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jY29wdHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2Njb3B0cytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfY2NvcHRzOyBhc19mbl9lcnJvciAkPyAiLS13aXRoLWNjb3B0cyBubyBsb25nZXIgc3VwcG9ydGVkOyB1c2UgQ0ZMQUdTPSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxkb3B0cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbGRvcHRzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9sZG9wdHM7IGFzX2ZuX2Vycm9yICQ/ICItLXdpdGgtbGRvcHRzIG5vIGxvbmdlciBzdXBwb3J0ZWQ7IHVzZSBMREZMQUdTPSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSJnY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ0M9JGFjX2N0X0NDCisgIGZpCitlbHNlCisgIENDPSIkYWNfY3ZfcHJvZ19DQyIKK2ZpCisKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgZmkKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfcHJvZ19yZWplY3RlZD1ubworYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCisgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKyAgICAgICBjb250aW51ZQorICAgICBmaQorICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitpZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCisgICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KKyAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDCisgIHNoaWZ0CisgIGlmIHRlc3QgJCMgIT0gMDsgdGhlbgorICAgICMgV2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgorICAgICMgSG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9zZW4KKyAgICAjIGZpcnN0IGlmIHdlIHNldCBDQyB0byBqdXN0IHRoZSBiYXNlbmFtZTsgdXNlIHRoZSBmdWxsIGZpbGUgbmFtZS4KKyAgICBzaGlmdAorICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19kaXIvJGFjX3dvcmQkezErJyAnfSRAIgorICBmaQorZmkKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkQ0MiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9DQyIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQorZmkKKworZmkKKworCit0ZXN0IC16ICIkQ0MiICYmIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKyRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgc2VkICcxMGFcCisuLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCisgICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY19jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2NvbXBpbGVyX2dudT15ZXMKK2Vsc2UKKyAgYWNfY29tcGlsZXJfZ251PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNjsgfQoraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgIEdDQz15ZXMKK2Vsc2UKKyAgR0NDPQorZmkKK2FjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KK2FjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY2NfZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX3NhdmVfY193ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZworICAgYWNfY193ZXJyb3JfZmxhZz15ZXMKKyAgIGFjX2N2X3Byb2dfY2NfZz1ubworICAgQ0ZMQUdTPSItZyIKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitlbHNlCisgIENGTEFHUz0iIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisJIENGTEFHUz0iLWciCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCisgIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPQorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19jY19jODkrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9wcm9nX2NjX2M4OT1ubworYWNfc2F2ZV9DQz0kQ0MKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorc3RydWN0IHN0YXQ7CisvKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1LjcncyBzcmMvY29uZi5zaC4gICovCitzdHJ1Y3QgYnVmIHsgaW50IHg7IH07CitGSUxFICogKCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOworc3RhdGljIGNoYXIgKmUgKHAsIGkpCisgICAgIGNoYXIgKipwOworICAgICBpbnQgaTsKK3sKKyAgcmV0dXJuIHBbaV07Cit9CitzdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipwLCAuLi4pCit7CisgIGNoYXIgKnM7CisgIHZhX2xpc3QgdjsKKyAgdmFfc3RhcnQgKHYscCk7CisgIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7CisgIHZhX2VuZCAodik7CisgIHJldHVybiBzOworfQorCisvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcworICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgorICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCisgICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0CisgICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCisgICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKKyAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KK2ludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07CisKKy8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycworICAgaW5zaWRlIHN0cmluZ3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLworI2RlZmluZSBGT08oeCkgJ3gnCitpbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKKworaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7CitzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKK3N0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7CitpbnQgYXJnYzsKK2NoYXIgKiphcmd2OworaW50CittYWluICgpCit7CityZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19hcmcgaW4gJycgLXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9YW5zaSAtc3RkIFwKKwktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorZG8KKyAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisgIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0NDPSRhY19zYXZlX0NDCisKK2ZpCisjIEFDX0NBQ0hFX1ZBTAorY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KKyAgeCkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQorJGFzX2VjaG8gIm5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKKyAgeG5vKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1CiskYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OworICAqKQorICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7Citlc2FjCitpZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSB4bm87IHRoZW4gOgorCitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICBSRFlOQU1JQz0iLXJkeW5hbWljIgorCitmaQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQorIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KK2lmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuCisgIENQUD0KK2ZpCitpZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgorICBpZiAke2FjX2N2X3Byb2dfQ1BQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCisgICAgZG8KKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorICBicmVhaworZmkKKworICAgIGRvbmUKKyAgICBhY19jdl9wcm9nX0NQUD0kQ1BQCisKK2ZpCisgIENQUD0kYWNfY3ZfcHJvZ19DUFAKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DUFA9JENQUAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1BQIiA+JjUKKyRhc19lY2hvICIkQ1BQIiA+JjY7IH0KK2FjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorCitlbHNlCisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIkMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYWRkaXRpb25hbCBzcGVjaWFsIGNvbXBpbGVyIGZsYWdzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhZGRpdGlvbmFsIHNwZWNpYWwgY29tcGlsZXIgZmxhZ3MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiRHQ0MiID0geWVzCit0aGVuCisgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorCWFscGhhKQkJYWRkY2ZsYWdzPSItbWllZWUiIDs7CisgICAgZXNhYworZmkKK2lmIHRlc3QgIngkYWRkY2ZsYWdzIiAhPSB4Cit0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhZGRjZmxhZ3MiID4mNQorJGFzX2VjaG8gIiRhZGRjZmxhZ3MiID4mNjsgfQorICAgIENGTEFHUz0iJGFkZGNmbGFncyAkQ0ZMQUdTIgorZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAobm9uZSkiID4mNQorJGFzX2VjaG8gIihub25lKSIgPiY2OyB9CitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9HUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgIGFjX3BhdGhfR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX0dSRVAiIHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCitjYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfR1JFUCIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKKyAgICAgIGFjX3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0dSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KKyBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0VHUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyBhIHwgJEdSRVAgLUUgJyhhfGIpJyA+L2Rldi9udWxsIDI+JjEKKyAgIHRoZW4gYWNfY3ZfcGF0aF9FR1JFUD0iJEdSRVAgLUUiCisgICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9FR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGVncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfRUdSRVAiIHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRUdSRVAKK2Nhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiIGFjX3BhdGhfRUdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRUdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIgorICAgICAgYWNfcGF0aF9FR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0VHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9FR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQCitmaQorCisgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQorIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl9zdGRjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCisjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisjZWxzZQorIyBkZWZpbmUgSVNMT1dFUihjKSBcCisJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyNlbmRpZgorCisjZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQoraW50CittYWluICgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgcmV0dXJuIDI7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KK2ZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibWluaXgvY29uZmlnLmgiICJhY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oIiA9IHh5ZXM7IHRoZW4gOgorICBNSU5JWD15ZXMKK2Vsc2UKKyAgTUlOSVg9CitmaQorCisKKyAgaWYgdGVzdCAiJE1JTklYIiA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBfUE9TSVhfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIF9QT1NJWF8xX1NPVVJDRSAyIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBfTUlOSVggMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfXyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjICAgICAgICAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKyAgICAgICAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXMKK2Vsc2UKKyAgYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18iID4mNjsgfQorICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorICAgICRhc19lY2hvICIjZGVmaW5lIF9fRVhURU5TSU9OU19fIDEiID4+Y29uZmRlZnMuaAorCisgICRhc19lY2hvICIjZGVmaW5lIF9BTExfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCisgICRhc19lY2hvICIjZGVmaW5lIF9HTlVfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCisgICRhc19lY2hvICIjZGVmaW5lIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUyAxIiA+PmNvbmZkZWZzLmgKKworICAkYXNfZWNobyAiI2RlZmluZSBfVEFOREVNX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgKKworCitMSUJfRVhUPS5hCitTVEFUSUNfTElCX0VYVD0uYQorUFJPRklMRURfTElCX0VYVD0uYQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXJvb3QtcHJlZml4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9yb290X3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcm9vdF9wcmVmaXg7IHJvb3RfcHJlZml4PSR3aXRodmFsCitlbHNlCisgIHJvb3RfcHJlZml4PU5PTkUKK2ZpCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21haW50YWluZXJfbW9kZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21haW50YWluZXJfbW9kZTsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJTUFJTlRBSU5FUl9DTVQ9IworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgbWFpbnRhaW5lciBtb2RlIiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgbWFpbnRhaW5lciBtb2RlIiA+JjY7IH0KK2Vsc2UKKwlNQUlOVEFJTkVSX0NNVD0KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgbWFpbnRhaW5lciBtb2RlIiA+JjUKKyRhc19lY2hvICJFbmFibGluZyBtYWludGFpbmVyIG1vZGUiID4mNjsgfQorZmkKKworZWxzZQorICBNQUlOVEFJTkVSX0NNVD0jCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIG1haW50YWluZXIgbW9kZSBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgbWFpbnRhaW5lciBtb2RlIGJ5IGRlZmF1bHQiID4mNjsgfQorCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zeW1saW5rLWluc3RhbGwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc3ltbGlua19pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc3ltbGlua19pbnN0YWxsOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlMSU5LX0lOU1RBTExfRkxBR1M9LWYKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIHN5bWxpbmtzIGZvciBpbnN0YWxsIiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgc3ltbGlua3MgZm9yIGluc3RhbGwiID4mNjsgfQorZWxzZQorCUxJTktfSU5TVEFMTF9GTEFHUz0tc2YKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgc3ltbGlua3MgZm9yIGluc3RhbGwiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIHN5bWxpbmtzIGZvciBpbnN0YWxsIiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgTElOS19JTlNUQUxMX0ZMQUdTPS1mCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIHN5bWxpbmtzIGZvciBpbnN0YWxsIGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBzeW1saW5rcyBmb3IgaW5zdGFsbCBieSBkZWZhdWx0IiA+JjY7IH0KKworZmkKKworCityZWxhdGl2ZV9zeW1saW5rX2RlZmluZWQ9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmVsYXRpdmUtc3ltbGlua3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcmVsYXRpdmVfc3ltbGlua3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9yZWxhdGl2ZV9zeW1saW5rczsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJU1lNTElOS19SRUxBVElWRT0KKwlyZWxhdGl2ZV9zeW1saW5rX2RlZmluZWQ9eWVzCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyByZWxhdGl2ZSBzeW1saW5rcyBmb3IgaW5zdGFsbCIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIHJlbGF0aXZlIHN5bWxpbmtzIGZvciBpbnN0YWxsIiA+JjY7IH0KK2Vsc2UKKwlTWU1MSU5LX1JFTEFUSVZFPS0tcmVsYXRpdmUKKwlyZWxhdGl2ZV9zeW1saW5rX2RlZmluZWQ9eWVzCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEVuYWJsaW5nIHJlbGF0aXZlIHN5bWxpbmtzIGZvciBpbnN0YWxsIiA+JjUKKyRhc19lY2hvICJFbmFibGluZyByZWxhdGl2ZSBzeW1saW5rcyBmb3IgaW5zdGFsbCIgPiY2OyB9CitmaQorZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN5bWxpbmstcmVsYXRpdmUtc3ltbGlua3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc3ltbGlua19yZWxhdGl2ZV9zeW1saW5rcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3N5bWxpbmtfcmVsYXRpdmVfc3ltbGlua3M7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCVNZTUxJTktfUkVMQVRJVkU9eWVzCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyByZWxhdGl2ZSBzeW1saW5rcyBmb3IgaW5zdGFsbCIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIHJlbGF0aXZlIHN5bWxpbmtzIGZvciBpbnN0YWxsIiA+JjY7IH0KK2Vsc2UKKwlTWU1MSU5LX1JFTEFUSVZFPS0tcmVsYXRpdmUKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgcmVsYXRpdmUgc3ltbGlua3MgZm9yIGluc3RhbGwiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIHJlbGF0aXZlIHN5bWxpbmtzIGZvciBpbnN0YWxsIiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJHJlbGF0aXZlX3N5bWxpbmtfZGVmaW5lZCIKK3RoZW4KKwlTWU1MSU5LX1JFTEFUSVZFPQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyByZWxhdGl2ZSBzeW1saW5rcyBmb3IgaW5zdGFsbCBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgcmVsYXRpdmUgc3ltbGlua3MgZm9yIGluc3RhbGwgYnkgZGVmYXVsdCIgPiY2OyB9CitmaQorCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zeW1saW5rLWJ1aWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3N5bWxpbmtfYnVpbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zeW1saW5rX2J1aWxkOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlMSU5LX0JVSUxEX0ZMQUdTPQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgc3ltbGlua3MgZm9yIGJ1aWxkIiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgc3ltbGlua3MgZm9yIGJ1aWxkIiA+JjY7IH0KK2Vsc2UKKwlMSU5LX0JVSUxEX0ZMQUdTPS1zCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEVuYWJsaW5nIHN5bWxpbmtzIGZvciBidWlsZCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgc3ltbGlua3MgZm9yIGJ1aWxkIiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgTElOS19CVUlMRF9GTEFHUz0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgc3ltbGlua3MgZm9yIGJ1aWxkIGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBzeW1saW5rcyBmb3IgYnVpbGQgYnkgZGVmYXVsdCIgPiY2OyB9CisKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXZlcmJvc2UtbWFrZWNtZHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdmVyYm9zZV9tYWtlY21kcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3ZlcmJvc2VfbWFrZWNtZHM7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgdmVyYm9zZSBtYWtlIGNvbW1hbmRzIiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgdmVyYm9zZSBtYWtlIGNvbW1hbmRzIiA+JjY7IH0KKwlFPUBlY2hvCisJRVM9ZWNobworCVE9QAorZWxzZQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyB2ZXJib3NlIG1ha2UgY29tbWFuZHMiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIHZlcmJvc2UgbWFrZSBjb21tYW5kcyIgPiY2OyB9CisJRT1AXFwjCisJRVM9XFwjCisJUT0KK2ZpCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyB2ZXJib3NlIG1ha2UgY29tbWFuZHMiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyB2ZXJib3NlIG1ha2UgY29tbWFuZHMiID4mNjsgfQorRT1AZWNobworRVM9ZWNobworUT1ACisKK2ZpCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jb21wcmVzc2lvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9jb21wcmVzc2lvbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2NvbXByZXNzaW9uOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIGNvbXByZXNzaW9uIHN1cHBvcnQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBjb21wcmVzc2lvbiBzdXBwb3J0IiA+JjY7IH0KK2Vsc2UKKworJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX0NPTVBSRVNTSU9OIDEiID4+Y29uZmRlZnMuaAorCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEVuYWJsaW5nIGNvbXByZXNzaW9uIHN1cHBvcnQiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIGNvbXByZXNzaW9uIHN1cHBvcnQiID4mNjsgfQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogQ29tcHJlc3Npb24gc3VwcG9ydCBpcyBleHBlcmltZW50YWwiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogQ29tcHJlc3Npb24gc3VwcG9ydCBpcyBleHBlcmltZW50YWwiID4mMjt9CitmaQorCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgY29tcHJlc3Npb24gc3VwcG9ydCBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgY29tcHJlc3Npb24gc3VwcG9ydCBieSBkZWZhdWx0IiA+JjY7IH0KKworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaHRyZWUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfaHRyZWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9odHJlZTsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJSFRSRUVfQ01UPSMKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIGh0cmVlIGRpcmVjdG9yeSBzdXBwb3J0IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgaHRyZWUgZGlyZWN0b3J5IHN1cHBvcnQiID4mNjsgfQorZWxzZQorCUhUUkVFX0NNVD0KKwkkYXNfZWNobyAiI2RlZmluZSBFTkFCTEVfSFRSRUUgMSIgPj5jb25mZGVmcy5oCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgaHRyZWUgZGlyZWN0b3J5IHN1cHBvcnQiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIGh0cmVlIGRpcmVjdG9yeSBzdXBwb3J0IiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgSFRSRUVfQ01UPQorJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX0hUUkVFIDEiID4+Y29uZmRlZnMuaAorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgaHRyZWUgZGlyZWN0b3J5IHN1cHBvcnQgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgaHRyZWUgZGlyZWN0b3J5IHN1cHBvcnQgYnkgZGVmYXVsdCIgPiY2OyB9CisKK2ZpCisKKworRTJfUEtHX0NPTkZJR19TVEFUSUM9LS1zdGF0aWMKK0xERkxBR19EWU5BTUlDPQorUFJJVkFURV9MSUJTX0NNVD0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lbGYtc2hsaWJzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2VsZl9zaGxpYnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9lbGZfc2hsaWJzOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlFTEZfQ01UPSMKKwlNQUtFRklMRV9FTEY9L2Rldi9udWxsCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyBFTEYgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIEVMRiBzaGFyZWQgbGlicmFyaWVzIiA+JjY7IH0KK2Vsc2UKKwlFMl9QS0dfQ09ORklHX1NUQVRJQz0KKwlFTEZfQ01UPQorCU1BS0VGSUxFX0VMRj0kc3JjZGlyL2xpYi9NYWtlZmlsZS5lbGYtbGliCisJY2FzZSAiJGhvc3Rfb3MiIGluCisJc29sYXJpczIuKikKKwkJTUFLRUZJTEVfRUxGPSRzcmNkaXIvbGliL01ha2VmaWxlLnNvbGFyaXMtbGliCisJOzsKKwllc2FjCisJQklOQVJZX1RZUEU9ZWxmYmluCisJTElCX0VYVD0uc28KKwlQUklWQVRFX0xJQlNfQ01UPSMKKwlMREZMQUdfRFlOQU1JQz0nLVdsLC1ycGF0aC1saW5rLCQodG9wX2J1aWxkZGlyKS9saWInCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEVuYWJsaW5nIEVMRiBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvICJFbmFibGluZyBFTEYgc2hhcmVkIGxpYnJhcmllcyIgPiY2OyB9CitmaQorCitlbHNlCisgIE1BS0VGSUxFX0VMRj0vZGV2L251bGwKK0VMRl9DTVQ9IworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyBFTEYgc2hhcmVkIGxpYnJhcmllcyBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgRUxGIHNoYXJlZCBsaWJyYXJpZXMgYnkgZGVmYXVsdCIgPiY2OyB9CisKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYnNkLXNobGlicyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ic2Rfc2hsaWJzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfYnNkX3NobGliczsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJQlNETElCX0NNVD0jCisJTUFLRUZJTEVfQlNETElCPS9kZXYvbnVsbAorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgQlNEIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBCU0Qgc2hhcmVkIGxpYnJhcmllcyIgPiY2OyB9CitlbHNlCisJRTJfUEtHX0NPTkZJR19TVEFUSUM9CisJQlNETElCX0NNVD0KKwlNQUtFRklMRV9CU0RMSUI9JHNyY2Rpci9saWIvTWFrZWZpbGUuYnNkLWxpYgorCUxJQl9FWFQ9LnNvCisJY2FzZSAiJGhvc3Rfb3MiIGluCisJZGFyd2luKikKKwkJTUFLRUZJTEVfQlNETElCPSRzcmNkaXIvbGliL01ha2VmaWxlLmRhcndpbi1saWIKKwkJTElCX0VYVD0uZHlsaWIKKwk7OworCWVzYWMKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgQlNEIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIEJTRCBzaGFyZWQgbGlicmFyaWVzIiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgTUFLRUZJTEVfQlNETElCPS9kZXYvbnVsbAorQlNETElCX0NNVD0jCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIEJTRCBzaGFyZWQgbGlicmFyaWVzIGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBCU0Qgc2hhcmVkIGxpYnJhcmllcyBieSBkZWZhdWx0IiA+JjY7IH0KKworZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wcm9maWxlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3Byb2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9wcm9maWxlOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlQUk9GSUxFX0NNVD0jCisJTUFLRUZJTEVfUFJPRklMRT0vZGV2L251bGwKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIHByb2ZpbGluZyBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBwcm9maWxpbmcgbGlicmFyaWVzIiA+JjY7IH0KK2Vsc2UKKwlQUk9GSUxFX0NNVD0KKwlNQUtFRklMRV9QUk9GSUxFPSRzcmNkaXIvbGliL01ha2VmaWxlLnByb2ZpbGUKKwlQUk9GSUxFRF9MSUJfRVhUPV9wLmEKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogQnVpbGRpbmcgcHJvZmlsaW5nIGxpYnJhcmllcyIgPiY1CiskYXNfZWNobyAiQnVpbGRpbmcgcHJvZmlsaW5nIGxpYnJhcmllcyIgPiY2OyB9CitmaQorCitlbHNlCisgIFBST0ZJTEVfQ01UPSMKK01BS0VGSUxFX1BST0ZJTEU9L2Rldi9udWxsCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIHByb2ZpbGluZyBsaWJyYXJpZXMgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIHByb2ZpbGluZyBsaWJyYXJpZXMgYnkgZGVmYXVsdCIgPiY2OyB9CisKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ2NvdiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9nY292K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZ2NvdjsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAieWVzIgordGhlbgorCUNGTEFHUz0iLWcgLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIgorCUxERkxBR1M9Ii1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgZ2NvdiBzdXBwb3J0IiA+JjUKKyRhc19lY2hvICJFbmFibGluZyBnY292IHN1cHBvcnQiID4mNjsgfQorZmkKKworZmkKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWpiZC1kZWJ1ZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9qYmRfZGVidWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9qYmRfZGVidWc7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgam91cm5hbCBkZWJ1Z2dpbmciID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBqb3VybmFsIGRlYnVnZ2luZyIgPiY2OyB9CitlbHNlCisKKyRhc19lY2hvICIjZGVmaW5lIENPTkZJR19KQkRfREVCVUcgMSIgPj5jb25mZGVmcy5oCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgam91cm5hbCBkZWJ1Z2dpbmciID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIGpvdXJuYWwgZGVidWdnaW5nIiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyBqb3VybmFsIGRlYnVnZ2luZyBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgam91cm5hbCBkZWJ1Z2dpbmcgYnkgZGVmYXVsdCIgPiY2OyB9CisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ibGtpZC1kZWJ1ZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ibGtpZF9kZWJ1ZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2Jsa2lkX2RlYnVnOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIGJsa2lkIGRlYnVnZ2luZyIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIGJsa2lkIGRlYnVnZ2luZyIgPiY2OyB9CitlbHNlCisKKyRhc19lY2hvICIjZGVmaW5lIENPTkZJR19CTEtJRF9ERUJVRyAxIiA+PmNvbmZkZWZzLmgKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBibGtpZCBkZWJ1Z2dpbmciID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIGJsa2lkIGRlYnVnZ2luZyIgPiY2OyB9CitmaQorCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgYmxraWQgZGVidWdnaW5nIGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBibGtpZCBkZWJ1Z2dpbmcgYnkgZGVmYXVsdCIgPiY2OyB9CisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZXN0aW8tZGVidWcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdGVzdGlvX2RlYnVnK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdGVzdGlvX2RlYnVnOworaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyB0ZXN0aW8gZGVidWdnaW5nIiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgdGVzdGlvIGRlYnVnZ2luZyIgPiY2OyB9CisJVEVTVF9JT19DTVQ9IiMiCitlbHNlCisJVEVTVF9JT19DTVQ9CisJJGFzX2VjaG8gIiNkZWZpbmUgQ09ORklHX1RFU1RJT19ERUJVRyAxIiA+PmNvbmZkZWZzLmgKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyB0ZXN0aW8gZGVidWdnaW5nIiA+JjUKKyRhc19lY2hvICJFbmFibGluZyB0ZXN0aW8gZGVidWdnaW5nIiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEVuYWJsaW5nIHRlc3RpbyBkZWJ1Z2dpbmcgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgdGVzdGlvIGRlYnVnZ2luZyBieSBkZWZhdWx0IiA+JjY7IH0KKyRhc19lY2hvICIjZGVmaW5lIENPTkZJR19URVNUSU9fREVCVUcgMSIgPj5jb25mZGVmcy5oCisKK1RFU1RfSU9fQ01UPQorCitmaQorCisKKworCisKKworCisKKworaWYgdGVzdCAieCRhY19jdl9lbnZfUEtHX0NPTkZJR19zZXQiICE9ICJ4c2V0IjsgdGhlbgorCWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfUEtHX0NPTkZJRys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBLR19DT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJFBLR19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitQS0dfQ09ORklHPSRhY19jdl9wYXRoX1BLR19DT05GSUcKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBLR19DT05GSUciID4mNQorJGFzX2VjaG8gIiRQS0dfQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QS0dfQ09ORklHIjsgdGhlbgorICBhY19wdF9QS0dfQ09ORklHPSRQS0dfQ09ORklHCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGtnLWNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X1BLR19DT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRz0iJGFjX3B0X1BLR19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCithY19wdF9QS0dfQ09ORklHPSRhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcKK2lmIHRlc3QgLW4gIiRhY19wdF9QS0dfQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3B0X1BLR19DT05GSUciID4mNQorJGFzX2VjaG8gIiRhY19wdF9QS0dfQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfUEtHX0NPTkZJRyIgPSB4OyB0aGVuCisgICAgUEtHX0NPTkZJRz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFBLR19DT05GSUc9JGFjX3B0X1BLR19DT05GSUcKKyAgZmkKK2Vsc2UKKyAgUEtHX0NPTkZJRz0iJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyIKK2ZpCisKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKwlfcGtnX21pbl92ZXJzaW9uPTAuOS4wCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uLi4uICIgPiY2OyB9CisJaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uOyB0aGVuCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJZWxzZQorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwkJUEtHX0NPTkZJRz0iIgorCWZpCitmaQorTElCVVVJRD0KK0RFUExJQlVVSUQ9CitTVEFUSUNfTElCVVVJRD0KK0RFUFNUQVRJQ19MSUJVVUlEPQorUFJPRklMRURfTElCVVVJRD0KK0RFUFBST0ZJTEVEX0xJQlVVSUQ9CitVVUlEX0NNVD0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ1dWlkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYnV1aWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9saWJ1dWlkOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlpZiB0ZXN0IC16ICIkUEtHX0NPTkZJRyI7IHRoZW4KKwkJYXNfZm5fZXJyb3IgJD8gInBrZy1jb25maWcgbm90IGluc3RhbGxlZDsgcGxlYXNlIGluc3RhbGwgaXQuIiAiJExJTkVOTyIgNQorCWZpCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1dWlkX2dlbmVyYXRlIGluIC1sdXVpZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdXVpZF9nZW5lcmF0ZSBpbiAtbHV1aWQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3V1aWRfdXVpZF9nZW5lcmF0ZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sdXVpZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgdXVpZF9nZW5lcmF0ZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHV1aWRfZ2VuZXJhdGUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3V1aWRfdXVpZF9nZW5lcmF0ZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3V1aWRfdXVpZF9nZW5lcmF0ZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfdXVpZF91dWlkX2dlbmVyYXRlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3V1aWRfdXVpZF9nZW5lcmF0ZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl91dWlkX3V1aWRfZ2VuZXJhdGUiID0geHllczsgdGhlbiA6CisgIExJQlVVSUQ9YCRQS0dfQ09ORklHIC0tbGlicyB1dWlkYDsKKwkJIFNUQVRJQ19MSUJVVUlEPWAkUEtHX0NPTkZJRyAtLXN0YXRpYyAtLWxpYnMgdXVpZGAKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gImV4dGVybmFsIHV1aWQgbGlicmFyeSBub3QgZm91bmQiICIkTElORU5PIiA1CitmaQorCisJUFJPRklMRURfTElCVVVJRD0kTElCVVVJRAorCVVVSURfQ01UPSMKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIHByaXZhdGUgdXVpZCBsaWJyYXJ5IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgcHJpdmF0ZSB1dWlkIGxpYnJhcnkiID4mNjsgfQorZWxzZQorCUxJQlVVSUQ9JyQoTElCKS9saWJ1dWlkJyRMSUJfRVhUCisJREVQTElCVVVJRD0kTElCVVVJRAorCVNUQVRJQ19MSUJVVUlEPSckKExJQikvbGlidXVpZCckU1RBVElDX0xJQl9FWFQKKwlERVBTVEFUSUNfTElCVVVJRD0kU1RBVElDX0xJQlVVSUQKKwlQUk9GSUxFRF9MSUJVVUlEPSckKExJQikvbGlidXVpZCckUFJPRklMRURfTElCX0VYVAorCURFUFBST0ZJTEVEX0xJQlVVSUQ9JFBST0ZJTEVEX0xJQlVVSUQKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgcHJpdmF0ZSB1dWlkIGxpYnJhcnkiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIHByaXZhdGUgdXVpZCBsaWJyYXJ5IiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgTElCVVVJRD0nJChMSUIpL2xpYnV1aWQnJExJQl9FWFQKK0RFUExJQlVVSUQ9JExJQlVVSUQKK1NUQVRJQ19MSUJVVUlEPSckKExJQikvbGlidXVpZCckU1RBVElDX0xJQl9FWFQKK0RFUFNUQVRJQ19MSUJVVUlEPSRTVEFUSUNfTElCVVVJRAorUFJPRklMRURfTElCVVVJRD0nJChMSUIpL2xpYnV1aWQnJFBST0ZJTEVEX0xJQl9FWFQKK0RFUFBST0ZJTEVEX0xJQlVVSUQ9JFBST0ZJTEVEX0xJQlVVSUQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBwcml2YXRlIHV1aWQgbGlicmFyeSBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJFbmFibGluZyBwcml2YXRlIHV1aWQgbGlicmFyeSBieSBkZWZhdWx0IiA+JjY7IH0KKworZmkKKworCisKKworCisKKworCisKKworCisKKworCisKK2lmIHRlc3QgIngkYWNfY3ZfZW52X1BLR19DT05GSUdfc2V0IiAhPSAieHNldCI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1BLR19DT05GSUcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRQS0dfQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRQS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9QS0dfQ09ORklHCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQS0dfQ09ORklHIiA+JjUKKyRhc19lY2hvICIkUEtHX0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyI7IHRoZW4KKyAgYWNfcHRfUEtHX0NPTkZJRz0kUEtHX0NPTkZJRworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRhY19wdF9QS0dfQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9IiRhY19wdF9QS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorYWNfcHRfUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHCitpZiB0ZXN0IC1uICIkYWNfcHRfUEtHX0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wdF9QS0dfQ09ORklHIiA+JjUKKyRhc19lY2hvICIkYWNfcHRfUEtHX0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX3B0X1BLR19DT05GSUciID0geDsgdGhlbgorICAgIFBLR19DT05GSUc9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBQS0dfQ09ORklHPSRhY19wdF9QS0dfQ09ORklHCisgIGZpCitlbHNlCisgIFBLR19DT05GSUc9IiRhY19jdl9wYXRoX1BLR19DT05GSUciCitmaQorCitmaQoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisJX3BrZ19taW5fdmVyc2lvbj0wLjkuMAorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHBrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbi4uLiAiID4mNjsgfQorCWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbjsgdGhlbgorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCWVsc2UKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJCVBLR19DT05GSUc9IiIKKwlmaQorZmkKK0xJQkJMS0lEPQorREVQTElCQkxLSUQ9CitTVEFUSUNfTElCQkxLSUQ9CitERVBTVEFUSUNfTElCQkxLSUQ9CitQUk9GSUxFRF9MSUJCTEtJRD0KK0RFUFBST0ZJTEVEX0xJQkJMS0lEPQorQkxLSURfQ01UPQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGliYmxraWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbGliYmxraWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9saWJibGtpZDsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJaWYgdGVzdCAteiAiJFBLR19DT05GSUciOyB0aGVuCisJCWFzX2ZuX2Vycm9yICQ/ICJwa2ctY29uZmlnIG5vdCBpbnN0YWxsZWQ7IHBsZWFzZSBpbnN0YWxsIGl0LiIgIiRMSU5FTk8iIDUKKwlmaQorCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYmxraWRfZ2V0X2NhY2hlIGluIC1sYmxraWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGJsa2lkX2dldF9jYWNoZSBpbiAtbGJsa2lkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9ibGtpZF9ibGtpZF9nZXRfY2FjaGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGJsa2lkIC1sdXVpZCAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBibGtpZF9nZXRfY2FjaGUgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBibGtpZF9nZXRfY2FjaGUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2Jsa2lkX2Jsa2lkX2dldF9jYWNoZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2Jsa2lkX2Jsa2lkX2dldF9jYWNoZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfYmxraWRfYmxraWRfZ2V0X2NhY2hlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2Jsa2lkX2Jsa2lkX2dldF9jYWNoZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9ibGtpZF9ibGtpZF9nZXRfY2FjaGUiID0geHllczsgdGhlbiA6CisgIExJQkJMS0lEPWAkUEtHX0NPTkZJRyAtLWxpYnMgYmxraWRgOworCQkgU1RBVElDX0xJQkJMS0lEPWAkUEtHX0NPTkZJRyAtLXN0YXRpYyAtLWxpYnMgYmxraWRgCitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJleHRlcm5hbCBibGtpZCBsaWJyYXJ5IG5vdCBmb3VuZCIgIiRMSU5FTk8iIDUKK2ZpCisKKwlCTEtJRF9DTVQ9IworCVBST0ZJTEVEX0xJQkJMS0lEPSRMSUJCTEtJRAorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgcHJpdmF0ZSBibGtpZCBsaWJyYXJ5IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgcHJpdmF0ZSBibGtpZCBsaWJyYXJ5IiA+JjY7IH0KK2Vsc2UKKwlMSUJCTEtJRD0nJChMSUIpL2xpYmJsa2lkJyRMSUJfRVhUCisJREVQTElCQkxLSUQ9JExJQkJMS0lECisJU1RBVElDX0xJQkJMS0lEPSckKExJQikvbGliYmxraWQnJFNUQVRJQ19MSUJfRVhUCisJREVQU1RBVElDX0xJQkJMS0lEPSRTVEFUSUNfTElCQkxLSUQKKwlQUk9GSUxFRF9MSUJCTEtJRD0nJChMSUIpL2xpYmJsa2lkJyRQUk9GSUxFRF9MSUJfRVhUCisJREVQUFJPRklMRURfTElCQkxLSUQ9JFBST0ZJTEVEX0xJQkJMS0lECisJJGFzX2VjaG8gIiNkZWZpbmUgQ09ORklHX0JVSUxEX0ZJTkRGUyAxIiA+PmNvbmZkZWZzLmgKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBwcml2YXRlIGJsa2lkIGxpYnJhcnkiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIHByaXZhdGUgYmxraWQgbGlicmFyeSIgPiY2OyB9CitmaQorCitlbHNlCisgIExJQkJMS0lEPSckKExJQikvbGliYmxraWQnJExJQl9FWFQKK0RFUExJQkJMS0lEPSRMSUJCTEtJRAorU1RBVElDX0xJQkJMS0lEPSckKExJQikvbGliYmxraWQnJFNUQVRJQ19MSUJfRVhUCitERVBTVEFUSUNfTElCQkxLSUQ9JFNUQVRJQ19MSUJCTEtJRAorUFJPRklMRURfTElCQkxLSUQ9JyQoTElCKS9saWJibGtpZCckUFJPRklMRURfTElCX0VYVAorREVQUFJPRklMRURfTElCQkxLSUQ9JFBST0ZJTEVEX0xJQkJMS0lECiskYXNfZWNobyAiI2RlZmluZSBDT05GSUdfQlVJTERfRklOREZTIDEiID4+Y29uZmRlZnMuaAorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgcHJpdmF0ZSBibGtpZCBsaWJyYXJ5IGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIHByaXZhdGUgYmxraWQgbGlicmFyeSBieSBkZWZhdWx0IiA+JjY7IH0KKworZmkKKworCisKKworCisKKworCitRVU9UQV9NQU5fQ09NTUVOVD0nLlwiJworUVVPVEFfQ01UPQorCisKKworCisKKworCisKK2lmIHRlc3QgIngkYWNfY3ZfZW52X1BLR19DT05GSUdfc2V0IiAhPSAieHNldCI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1BLR19DT05GSUcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRQS0dfQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRQS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9QS0dfQ09ORklHCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQS0dfQ09ORklHIiA+JjUKKyRhc19lY2hvICIkUEtHX0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyI7IHRoZW4KKyAgYWNfcHRfUEtHX0NPTkZJRz0kUEtHX0NPTkZJRworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRhY19wdF9QS0dfQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9IiRhY19wdF9QS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorYWNfcHRfUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHCitpZiB0ZXN0IC1uICIkYWNfcHRfUEtHX0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wdF9QS0dfQ09ORklHIiA+JjUKKyRhc19lY2hvICIkYWNfcHRfUEtHX0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX3B0X1BLR19DT05GSUciID0geDsgdGhlbgorICAgIFBLR19DT05GSUc9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBQS0dfQ09ORklHPSRhY19wdF9QS0dfQ09ORklHCisgIGZpCitlbHNlCisgIFBLR19DT05GSUc9IiRhY19jdl9wYXRoX1BLR19DT05GSUciCitmaQorCitmaQoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisJX3BrZ19taW5fdmVyc2lvbj0wLjkuMAorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHBrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbi4uLiAiID4mNjsgfQorCWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbjsgdGhlbgorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCWVsc2UKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJCVBLR19DT05GSUc9IiIKKwlmaQorZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXF1b3RhIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3F1b3RhK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcXVvdGE7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCVFVT1RBX0NNVD0jCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyBxdW90YSBzdXBwb3J0IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgcXVvdGEgc3VwcG9ydCIgPiY2OyB9CitlbHNlCisJUVVPVEFfQ01UPQorCSRhc19lY2hvICIjZGVmaW5lIENPTkZJR19RVU9UQSAxIiA+PmNvbmZkZWZzLmgKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBxdW90YSBzdXBwb3J0IiA+JjUKKyRhc19lY2hvICJFbmFibGluZyBxdW90YSBzdXBwb3J0IiA+JjY7IH0KKwlRVU9UQV9NQU5fQ09NTUVOVD0iIgorCitmaQorCitlbHNlCisgIFFVT1RBX0NNVD0jCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIHF1b3RhIHN1cHBvcnQgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIHF1b3RhIHN1cHBvcnQgYnkgZGVmYXVsdCIgPiY2OyB9CisKK2ZpCisKK0xJQlFVT1RBPSckKExJQikvbGlicXVvdGEnJExJQl9FWFQKK0RFUExJQlFVT1RBPSRMSUJRVU9UQQorU1RBVElDX0xJQlFVT1RBPSckKExJQikvbGlicXVvdGEnJFNUQVRJQ19MSUJfRVhUCitERVBTVEFUSUNfTElCUVVPVEE9JFNUQVRJQ19MSUJRVU9UQQorUFJPRklMRURfTElCUVVPVEE9JyQoTElCKS9saWJxdW90YSckUFJPRklMRURfTElCX0VYVAorREVQUFJPRklMRURfTElCUVVPVEE9JFBST0ZJTEVEX0xJQlFVT1RBCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWJhY2t0cmFjZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9iYWNrdHJhY2Urc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9iYWNrdHJhY2U7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgdXNlIG9mIGJhY2t0cmFjZSIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIHVzZSBvZiBiYWNrdHJhY2UiID4mNjsgfQorCSRhc19lY2hvICIjZGVmaW5lIERJU0FCTEVfQkFDS1RSQUNFIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEVuYWJsaW5nIHVzZSBvZiBiYWNrdHJhY2UiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIHVzZSBvZiBiYWNrdHJhY2UiID4mNjsgfQorZmkKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgdXNlIG9mIGJhY2t0cmFjZSBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJFbmFibGluZyB1c2Ugb2YgYmFja3RyYWNlIGJ5IGRlZmF1bHQiID4mNjsgfQorCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVidWdmcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kZWJ1Z2ZzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGVidWdmczsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyBkZWJ1Z2ZzIHN1cHBvcnQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBkZWJ1Z2ZzIHN1cHBvcnQiID4mNjsgfQorCURFQlVHRlNfQ01UPSIjIgorZWxzZQorCURFQlVHRlNfQ01UPQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBkZWJ1Z2ZzIHN1cHBvcnQiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIGRlYnVnZnMgc3VwcG9ydCIgPiY2OyB9CitmaQorCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBkZWJ1Z2ZzIHN1cHBvcnQgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgZGVidWdmcyBzdXBwb3J0IGJ5IGRlZmF1bHQiID4mNjsgfQorREVCVUdGU19DTVQ9CisKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWltYWdlciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9pbWFnZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9pbWFnZXI7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgZTJpbWFnZSBzdXBwb3J0IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgZTJpbWFnZSBzdXBwb3J0IiA+JjY7IH0KKwlJTUFHRVJfQ01UPSIjIgorZWxzZQorCUlNQUdFUl9DTVQ9CisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEVuYWJsaW5nIGUyaW1hZ2Ugc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgZTJpbWFnZSBzdXBwb3J0IiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEVuYWJsaW5nIGUyaW1hZ2Ugc3VwcG9ydCBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJFbmFibGluZyBlMmltYWdlIHN1cHBvcnQgYnkgZGVmYXVsdCIgPiY2OyB9CitJTUFHRVJfQ01UPQorCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yZXNpemVyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3Jlc2l6ZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9yZXNpemVyOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIGUycmVzaXplIHN1cHBvcnQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBlMnJlc2l6ZSBzdXBwb3J0IiA+JjY7IH0KKwlSRVNJWkVSX0NNVD0iIyIKK2Vsc2UKKwlSRVNJWkVSX0NNVD0KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgZTJyZXNpemUgc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgZTJyZXNpemUgc3VwcG9ydCIgPiY2OyB9CitmaQorCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBlMnJlc2l6ZSBzdXBwb3J0IGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIGUycmVzaXplIHN1cHBvcnQgYnkgZGVmYXVsdCIgPiY2OyB9CitSRVNJWkVSX0NNVD0KKworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVmcmFnIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlZnJhZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RlZnJhZzsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyBlNGRlZnJhZyBzdXBwb3J0IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgZTRkZWZyYWcgc3VwcG9ydCIgPiY2OyB9CisJREVGUkFHX0NNVD0iIyIKK2Vsc2UKKwlERUZSQUdfQ01UPQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBlNGRlZnJhZyBzdXBwb3J0IiA+JjUKKyRhc19lY2hvICJFbmFibGluZyBlNGRlZnJhZyBzdXBwb3J0IiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJFdJVEhfRElFVF9MSUJDIgordGhlbgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBlNGRlZnJhZyBzdXBwb3J0IGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIGU0ZGVmcmFnIHN1cHBvcnQgYnkgZGVmYXVsdCIgPiY2OyB9CisJREVGUkFHX0NNVD0KK2Vsc2UKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIGU0ZGVmcmFnIHN1cHBvcnQgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIGU0ZGVmcmFnIHN1cHBvcnQgYnkgZGVmYXVsdCIgPiY2OyB9CisJREVGUkFHX0NNVD0iIyIKK2ZpCisKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWZzY2sgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZnNjaytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2ZzY2s7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUZTQ0tfUFJPRz0nJyBGU0NLX01BTj0nJworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBOb3QgYnVpbGRpbmcgZnNjayB3cmFwcGVyIiA+JjUKKyRhc19lY2hvICJOb3QgYnVpbGRpbmcgZnNjayB3cmFwcGVyIiA+JjY7IH0KK2Vsc2UKKwlGU0NLX1BST0c9ZnNjayBGU0NLX01BTj1mc2NrLjgKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogQnVpbGRpbmcgZnNjayB3cmFwcGVyIiA+JjUKKyRhc19lY2hvICJCdWlsZGluZyBmc2NrIHdyYXBwZXIiID4mNjsgfQorZmkKKworZWxzZQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgZ251KikKKyAgICBGU0NLX1BST0c9JycgRlNDS19NQU49JycKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogTm90IGJ1aWxkaW5nIGZzY2sgd3JhcHBlciBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJOb3QgYnVpbGRpbmcgZnNjayB3cmFwcGVyIGJ5IGRlZmF1bHQiID4mNjsgfQorICAgIDs7CisgICopCisgICAgRlNDS19QUk9HPWZzY2sgRlNDS19NQU49ZnNjay44CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEJ1aWxkaW5nIGZzY2sgd3JhcHBlciBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJCdWlsZGluZyBmc2NrIHdyYXBwZXIgYnkgZGVmYXVsdCIgPiY2OyB9Citlc2FjCisKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZTJpbml0cmQtaGVscGVyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2UyaW5pdHJkX2hlbHBlcitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2UyaW5pdHJkX2hlbHBlcjsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJRTJJTklUUkRfUFJPRz0nJyBFMklOSVRSRF9NQU49JycKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogTm90IGJ1aWxkaW5nIGUyaW5pdHJkIGhlbHBlciIgPiY1CiskYXNfZWNobyAiTm90IGJ1aWxkaW5nIGUyaW5pdHJkIGhlbHBlciIgPiY2OyB9CitlbHNlCisJRTJJTklUUkRfUFJPRz1lMmluaXRyZF9oZWxwZXIgRTJJTklUUkRfTUFOPWUyaW5pdHJkX2hlbHBlci44CisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEJ1aWxkaW5nIGUyaW5pdHJkIGhlbHBlciIgPiY1CiskYXNfZWNobyAiQnVpbGRpbmcgZTJpbml0cmQgaGVscGVyIiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgRTJJTklUUkRfUFJPRz1lMmluaXRyZF9oZWxwZXIgRTJJTklUUkRfTUFOPWUyaW5pdHJkX2hlbHBlci44Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogQnVpbGRpbmcgZTJpbml0cmQgaGVscGVyIGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkJ1aWxkaW5nIGUyaW5pdHJkIGhlbHBlciBieSBkZWZhdWx0IiA+JjY7IH0KKworZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10bHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdGxzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdGxzOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwl0cnlfdGxzPSIiCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyB0aHJlYWQgbG9jYWwgc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIHRocmVhZCBsb2NhbCBzdXBwb3J0IiA+JjY7IH0KK2Vsc2UKKwl0cnlfdGxzPSJ5ZXMiCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEVuYWJsaW5nIHRocmVhZCBsb2NhbCBzdXBwb3J0IiA+JjUKKyRhc19lY2hvICJFbmFibGluZyB0aHJlYWQgbG9jYWwgc3VwcG9ydCIgPiY2OyB9CitmaQorCitlbHNlCisgIGlmIHRlc3QgLW4gIiRXSVRIX0RJRVRfTElCQyIKK3RoZW4KKwl0cnlfdGxzPSIiCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpZXQgbGliYyBkb2VzIG5vdCBzdXBwb3J0IHRocmVhZCBsb2NhbCBzdXBwb3J0IiA+JjUKKyRhc19lY2hvICJEaWV0IGxpYmMgZG9lcyBub3Qgc3VwcG9ydCB0aHJlYWQgbG9jYWwgc3VwcG9ydCIgPiY2OyB9CitlbHNlCisJdHJ5X3Rscz0ieWVzIgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBUcnkgdXNpbmcgdGhyZWFkIGxvY2FsIHN1cHBvcnQgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiVHJ5IHVzaW5nIHRocmVhZCBsb2NhbCBzdXBwb3J0IGJ5IGRlZmF1bHQiID4mNjsgfQorZmkKKworZmkKKworaWYgdGVzdCAiJHRyeV90bHMiID0gInllcyIKK3RoZW4KKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0aHJlYWQgbG9jYWwgc3RvcmFnZSAoVExTKSBjbGFzcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgKFRMUykgY2xhc3MuLi4gIiA+JjY7IH0KKyAgaWYgJHthY19jdl90bHMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgYXhfdGxzX2tleXdvcmRzPSJfX3RocmVhZCBfX2RlY2xzcGVjKHRocmVhZCkgbm9uZSIKKyAgICBmb3IgYXhfdGxzX2tleXdvcmQgaW4gJGF4X3Rsc19rZXl3b3JkczsgZG8KKyAgICAgICBjYXNlICRheF90bHNfa2V5d29yZCBpbgorICAgICAgICAgIG5vbmUpIGFjX2N2X3Rscz1ub25lIDsgYnJlYWsgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgICAgICAgICAgZm9vKHZvaWQpIHsKKyAgICAgICAgICAgICAgICAgc3RhdGljICAkYXhfdGxzX2tleXdvcmQgIGludCBiYXI7CisgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgIH0KK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfdGxzPSRheF90bHNfa2V5d29yZCA7IGJyZWFrCitlbHNlCisgIGFjX2N2X3Rscz1ub25lCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBlc2FjCisgICAgZG9uZQorCitmaQorCisKKyAgaWYgdGVzdCAiJGFjX2N2X3RscyIgIT0gIm5vbmUiOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgVExTICRhY19jdl90bHMKK19BQ0VPRgorCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdGxzIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdGxzIiA+JjY7IH0KKworZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXV1aWRkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3V1aWRkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdXVpZGQ7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBOb3QgYnVpbGRpbmcgdXVpZGQiID4mNQorJGFzX2VjaG8gIk5vdCBidWlsZGluZyB1dWlkZCIgPiY2OyB9CisJVVVJRERfQ01UPSIjIgorZWxzZQorCSRhc19lY2hvICIjZGVmaW5lIFVTRV9VVUlERCAxIiA+PmNvbmZkZWZzLmgKKworCVVVSUREX0NNVD0iIgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBCdWlsZGluZyB1dWlkZCIgPiY1CiskYXNfZWNobyAiQnVpbGRpbmcgdXVpZGQiID4mNjsgfQorZmkKKworZWxzZQorICAkYXNfZWNobyAiI2RlZmluZSBVU0VfVVVJREQgMSIgPj5jb25mZGVmcy5oCisKK2lmIHRlc3QgLXogIiRVVUlEX0NNVCIKK3RoZW4KKwlVVUlERF9DTVQ9IiIKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogQnVpbGRpbmcgdXVpZGQgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiQnVpbGRpbmcgdXVpZGQgYnkgZGVmYXVsdCIgPiY2OyB9CitlbHNlCisJVVVJRERfQ01UPSIjIgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgdXVpZGQgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIHV1aWRkIGJ5IGRlZmF1bHQiID4mNjsgfQorZmkKKworZmkKKworCitNQUtFRklMRV9MSUJSQVJZPSRzcmNkaXIvbGliL01ha2VmaWxlLmxpYnJhcnkKKworR0VUVEVYVF9QQUNLQUdFPWUyZnNwcm9ncworUEFDS0FHRT1lMmZzcHJvZ3MKK1ZFUlNJT049IiRFMkZTUFJPR1NfVkVSU0lPTiIKK1ZFUlNJT049MC4xNC4xCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRSAiJFBBQ0tBR0UiCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFZFUlNJT04gIiRWRVJTSU9OIgorX0FDRU9GCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gIiA+JjY7IH0KK3NldCB4ICR7TUFLRS1tYWtlfQorYWNfbWFrZT1gJGFzX2VjaG8gIiQyIiB8IHNlZCAncy8rL3AvZzsgcy9bXmEtekEtWjAtOV9dL18vZydgCitpZiBldmFsIFwke2FjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QubWFrZSA8PFxfQUNFT0YKK1NIRUxMID0gL2Jpbi9zaAorYWxsOgorCUBlY2hvICdAQEAlJSU9JChNQUtFKT1AQEAlJSUnCitfQUNFT0YKKyMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcgLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KK2Nhc2UgYCR7TUFLRS1tYWtlfSAtZiBjb25mdGVzdC5tYWtlIDI+L2Rldi9udWxsYCBpbgorICAqQEBAJSUlPT8qPUBAQCUlJSopCisgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzOzsKKyAgKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubzs7Citlc2FjCitybSAtZiBjb25mdGVzdC5tYWtlCitmaQoraWYgZXZhbCB0ZXN0IFwkYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0ID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgIFNFVF9NQUtFPQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgorZmkKKworIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCisjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKKyMgaW5jb21wYXRpYmxlIHZlcnNpb25zOgorIyBTeXNWIC9ldGMvaW5zdGFsbCwgL3Vzci9zYmluL2luc3RhbGwKKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAorIyBJUklYIC9zYmluL2luc3RhbGwKKyMgQUlYIC9iaW4vaW5zdGFsbAorIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisjIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorIyBSZWplY3QgaW5zdGFsbCBwcm9ncmFtcyB0aGF0IGNhbm5vdCBpbnN0YWxsIG11bHRpcGxlIGZpbGVzLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgoraWYgJHthY19jdl9wYXRoX2luc3RhbGwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCitjYXNlICRhc19kaXIvIGluICMoKAorICAuLyB8IC4vLyB8IC9bY0NdLyogfCBcCisgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorICA/OltcXC9db3MyW1xcL11pbnN0YWxsW1xcL10qIHwgPzpbXFwvXU9TMltcXC9dSU5TVEFMTFtcXC9dKiB8IFwKKyAgL3Vzci91Y2IvKiApIDs7CisgICopCisgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKyAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKyAgICAjIGJ5IGRlZmF1bHQuCisgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCisJICAgIDoKKwkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKwkgICAgOgorCSAgZWxzZQorCSAgICBybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKwkgICAgZWNobyBvbmUgPiBjb25mdGVzdC5vbmUKKwkgICAgZWNobyB0d28gPiBjb25mdGVzdC50d28KKwkgICAgbWtkaXIgY29uZnRlc3QuZGlyCisJICAgIGlmICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtYyBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvICJgcHdkYC9jb25mdGVzdC5kaXIiICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5vbmUgJiYgdGVzdCAtcyBjb25mdGVzdC50d28gJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC5vbmUgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC50d28KKwkgICAgdGhlbgorCSAgICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKwkgICAgICBicmVhayAzCisJICAgIGZpCisJICBmaQorCWZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIDs7Citlc2FjCisKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKworZmkKKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKKyAgZWxzZQorICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGEKKyAgICAjIHZhbHVlIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCisgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCisgICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CiskYXNfZWNobyAiJElOU1RBTEwiID4mNjsgfQorCisjIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCisjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgordGVzdCAteiAiJElOU1RBTExfUFJPR1JBTSIgJiYgSU5TVEFMTF9QUk9HUkFNPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wLi4uICIgPiY2OyB9CitpZiB0ZXN0IC16ICIkTUtESVJfUCI7IHRoZW4KKyAgaWYgJHthY19jdl9wYXRoX21rZGlyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi9vcHQvc2Z3L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIG1rZGlyIGdta2RpcjsgZG8KKwkgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiB8fCBjb250aW51ZQorCSAgIGNhc2UgYCIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtLXZlcnNpb24gMj4mMWAgaW4gIygKKwkgICAgICdta2RpciAoR05VIGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGZpbGV1dGlscykgJzQuMSopCisJICAgICAgIGFjX2N2X3BhdGhfbWtkaXI9JGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dAorCSAgICAgICBicmVhayAzOzsKKwkgICBlc2FjCisJIGRvbmUKKyAgICAgICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKKworICB0ZXN0IC1kIC4vLS12ZXJzaW9uICYmIHJtZGlyIC4vLS12ZXJzaW9uCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9ta2RpcitzZXR9IiA9IHNldDsgdGhlbgorICAgIE1LRElSX1A9IiRhY19jdl9wYXRoX21rZGlyIC1wIgorICBlbHNlCisgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorICAgICMgdmFsdWUgZm9yIE1LRElSX1Agd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICBNS0RJUl9QPSIkYWNfaW5zdGFsbF9zaCAtZCIKKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1LRElSX1AiID4mNQorJGFzX2VjaG8gIiRNS0RJUl9QIiA+JjY7IH0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfU0VEKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICAgICAgICAgIGFjX3NjcmlwdD1zL2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhL2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYi8KKyAgICAgZm9yIGFjX2kgaW4gMSAyIDMgNCA1IDYgNzsgZG8KKyAgICAgICBhY19zY3JpcHQ9IiRhY19zY3JpcHQkYXNfbmwkYWNfc2NyaXB0IgorICAgICBkb25lCisgICAgIGVjaG8gIiRhY19zY3JpcHQiIDI+L2Rldi9udWxsIHwgc2VkIDk5cSA+Y29uZnRlc3Quc2VkCisgICAgIHsgYWNfc2NyaXB0PTsgdW5zZXQgYWNfc2NyaXB0O30KKyAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgYWNfcGF0aF9TRURfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9TRUQ9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX1NFRCIgfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX1NFRCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfU0VECitjYXNlIGAiJGFjX3BhdGhfU0VEIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIiBhY19wYXRoX1NFRF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX1NFRCIgLWYgY29uZnRlc3Quc2VkIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9TRURfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiCisgICAgICBhY19wYXRoX1NFRF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX1NFRF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfU0VEPSRTRUQKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9TRUQiID4mNjsgfQorIFNFRD0iJGFjX2N2X3BhdGhfU0VEIgorICBybSAtZiBjb25mdGVzdC5zZWQKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgTkxTIGlzIHJlcXVlc3RlZC4uLiAiID4mNjsgfQorICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ubHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbmxzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbmxzOyBVU0VfTkxTPSRlbmFibGV2YWwKK2Vsc2UKKyAgVVNFX05MUz15ZXMKK2ZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRVU0VfTkxTIiA+JjUKKyRhc19lY2hvICIkVVNFX05MUyIgPiY2OyB9CisKKworCisKKyAgICAgIEdFVFRFWFRfTUFDUk9fVkVSU0lPTj0wLjE4CisKKworCisKKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgIyBEZXRlcm1pbmUgUEFUSF9TRVBBUkFUT1IgYnkgdHJ5aW5nIHRvIGZpbmQgL2Jpbi9zaCBpbiBhIFBBVEggd2hpY2gKKyAgIyBjb250YWlucyBvbmx5IC9iaW4uIE5vdGUgdGhhdCBrc2ggbG9va3MgYWxzbyBhdCB0aGUgRlBBVEggdmFyaWFibGUsCisgICMgc28gd2UgaGF2ZSB0byBzZXQgdGhhdCBhcyB3ZWxsIGZvciB0aGUgdGVzdC4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSBcCisgICAgJiYgeyAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSBcCisgICAgICAgICAgIHx8IFBBVEhfU0VQQVJBVE9SPSc7JworICAgICAgIH0KK2ZpCisKKyMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAorIyBhcyBzeXN0ZW1zIG1heSB1c2UgbWV0aG9kcyBvdGhlciB0aGFuIG1vZGUgYml0cyB0byBkZXRlcm1pbmUgZXhlY3V0YWJpbGl0eS4KK2NhdCA+Y29uZiQkLmZpbGUgPDxfQVNFT0YKKyMhIC9iaW4vc2gKK2V4aXQgMAorX0FTRU9GCitjaG1vZCAreCBjb25mJCQuZmlsZQoraWYgdGVzdCAteCBjb25mJCQuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC14IgorZWxzZQorICBhY19leGVjdXRhYmxlX3A9InRlc3QgLWYiCitmaQorcm0gLWYgY29uZiQkLmZpbGUKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG1zZ2ZtdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTVNHRk1UKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAiJE1TR0ZNVCIgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgICAgYWNfY3ZfcGF0aF9NU0dGTVQ9IiRNU0dGTVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICAgIDs7CisgICopCisgICAgYWNfc2F2ZV9JRlM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICAgIElGUz0iJGFjX3NhdmVfSUZTIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgICBpZiAkYWNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICAgICAgIGVjaG8gIiRhc19tZTogdHJ5aW5nICRhY19kaXIvJGFjX3dvcmQuLi4iID4mNQorICAgICAgICAgIGlmICRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCA+JjUgMj4mMSAmJgorICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSk7IHRoZW4KKyAgICAgICAgICAgIGFjX2N2X3BhdGhfTVNHRk1UPSIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICAgICAgICAgYnJlYWsgMgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIElGUz0iJGFjX3NhdmVfSUZTIgorICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9NU0dGTVQiICYmIGFjX2N2X3BhdGhfTVNHRk1UPSI6IgorICAgIDs7Citlc2FjCitmaQorTVNHRk1UPSIkYWNfY3ZfcGF0aF9NU0dGTVQiCitpZiB0ZXN0ICIkTVNHRk1UIiAhPSAiOiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNU0dGTVQiID4mNQorJGFzX2VjaG8gIiRNU0dGTVQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnbXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnbXNnZm10OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9HTVNHRk1UKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkR01TR0ZNVCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9HTVNHRk1UPSIkR01TR0ZNVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfR01TR0ZNVD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HTVNHRk1UIiAmJiBhY19jdl9wYXRoX0dNU0dGTVQ9IiRNU0dGTVQiCisgIDs7Citlc2FjCitmaQorR01TR0ZNVD0kYWNfY3ZfcGF0aF9HTVNHRk1UCitpZiB0ZXN0IC1uICIkR01TR0ZNVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHTVNHRk1UIiA+JjUKKyRhc19lY2hvICIkR01TR0ZNVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisKKyAgICBjYXNlIGAkTVNHRk1UIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4KKyAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC00XSB8IDAuMVswLTRdLiopIE1TR0ZNVF8wMTU9OiA7OworICAgICopIE1TR0ZNVF8wMTU9JE1TR0ZNVCA7OworICBlc2FjCisKKyAgY2FzZSBgJEdNU0dGTVQgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbgorICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTRdIHwgMC4xWzAtNF0uKikgR01TR0ZNVF8wMTU9OiA7OworICAgICopIEdNU0dGTVRfMDE1PSRHTVNHRk1UIDs7CisgIGVzYWMKKworCisKKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgIyBEZXRlcm1pbmUgUEFUSF9TRVBBUkFUT1IgYnkgdHJ5aW5nIHRvIGZpbmQgL2Jpbi9zaCBpbiBhIFBBVEggd2hpY2gKKyAgIyBjb250YWlucyBvbmx5IC9iaW4uIE5vdGUgdGhhdCBrc2ggbG9va3MgYWxzbyBhdCB0aGUgRlBBVEggdmFyaWFibGUsCisgICMgc28gd2UgaGF2ZSB0byBzZXQgdGhhdCBhcyB3ZWxsIGZvciB0aGUgdGVzdC4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSBcCisgICAgJiYgeyAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSBcCisgICAgICAgICAgIHx8IFBBVEhfU0VQQVJBVE9SPSc7JworICAgICAgIH0KK2ZpCisKKyMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAorIyBhcyBzeXN0ZW1zIG1heSB1c2UgbWV0aG9kcyBvdGhlciB0aGFuIG1vZGUgYml0cyB0byBkZXRlcm1pbmUgZXhlY3V0YWJpbGl0eS4KK2NhdCA+Y29uZiQkLmZpbGUgPDxfQVNFT0YKKyMhIC9iaW4vc2gKK2V4aXQgMAorX0FTRU9GCitjaG1vZCAreCBjb25mJCQuZmlsZQoraWYgdGVzdCAteCBjb25mJCQuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC14IgorZWxzZQorICBhY19leGVjdXRhYmxlX3A9InRlc3QgLWYiCitmaQorcm0gLWYgY29uZiQkLmZpbGUKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ4Z2V0dGV4dCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgeGdldHRleHQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1hHRVRURVhUKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAiJFhHRVRURVhUIiBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgICBhY19jdl9wYXRoX1hHRVRURVhUPSIkWEdFVFRFWFQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICAgIDs7CisgICopCisgICAgYWNfc2F2ZV9JRlM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICAgIElGUz0iJGFjX3NhdmVfSUZTIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgICBpZiAkYWNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICAgICAgIGVjaG8gIiRhc19tZTogdHJ5aW5nICRhY19kaXIvJGFjX3dvcmQuLi4iID4mNQorICAgICAgICAgIGlmICRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgPiY1IDI+JjEgJiYKKyAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKTsgdGhlbgorICAgICAgICAgICAgYWNfY3ZfcGF0aF9YR0VUVEVYVD0iJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAgICAgICAgIGJyZWFrIDIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZG9uZQorICAgIGRvbmUKKyAgICBJRlM9IiRhY19zYXZlX0lGUyIKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfWEdFVFRFWFQiICYmIGFjX2N2X3BhdGhfWEdFVFRFWFQ9IjoiCisgICAgOzsKK2VzYWMKK2ZpCitYR0VUVEVYVD0iJGFjX2N2X3BhdGhfWEdFVFRFWFQiCitpZiB0ZXN0ICIkWEdFVFRFWFQiICE9ICI6IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFhHRVRURVhUIiA+JjUKKyRhc19lY2hvICIkWEdFVFRFWFQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgICBybSAtZiBtZXNzYWdlcy5wbworCisgICAgY2FzZSBgJFhHRVRURVhUIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4KKyAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC00XSB8IDAuMVswLTRdLiopIFhHRVRURVhUXzAxNT06IDs7CisgICAgKikgWEdFVFRFWFRfMDE1PSRYR0VUVEVYVCA7OworICBlc2FjCisKKworCisjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgICMgRGV0ZXJtaW5lIFBBVEhfU0VQQVJBVE9SIGJ5IHRyeWluZyB0byBmaW5kIC9iaW4vc2ggaW4gYSBQQVRIIHdoaWNoCisgICMgY29udGFpbnMgb25seSAvYmluLiBOb3RlIHRoYXQga3NoIGxvb2tzIGFsc28gYXQgdGhlIEZQQVRIIHZhcmlhYmxlLAorICAjIHNvIHdlIGhhdmUgdG8gc2V0IHRoYXQgYXMgd2VsbCBmb3IgdGhlIHRlc3QuCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgXAorICAgICYmIHsgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgXAorICAgICAgICAgICB8fCBQQVRIX1NFUEFSQVRPUj0nOycKKyAgICAgICB9CitmaQorCisjIEZpbmQgb3V0IGhvdyB0byB0ZXN0IGZvciBleGVjdXRhYmxlIGZpbGVzLiBEb24ndCB1c2UgYSB6ZXJvLWJ5dGUgZmlsZSwKKyMgYXMgc3lzdGVtcyBtYXkgdXNlIG1ldGhvZHMgb3RoZXIgdGhhbiBtb2RlIGJpdHMgdG8gZGV0ZXJtaW5lIGV4ZWN1dGFiaWxpdHkuCitjYXQgPmNvbmYkJC5maWxlIDw8X0FTRU9GCisjISAvYmluL3NoCitleGl0IDAKK19BU0VPRgorY2htb2QgK3ggY29uZiQkLmZpbGUKK2lmIHRlc3QgLXggY29uZiQkLmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAteCIKK2Vsc2UKKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorZmkKK3JtIC1mIGNvbmYkJC5maWxlCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnbWVyZ2UiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG1zZ21lcmdlOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9NU0dNRVJHRSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgIiRNU0dNRVJHRSIgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgICAgYWNfY3ZfcGF0aF9NU0dNRVJHRT0iJE1TR01FUkdFIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgICA7OworICAqKQorICAgIGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgICBJRlM9IiRhY19zYXZlX0lGUyIKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgICAgaWYgJGFjX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgICBlY2hvICIkYXNfbWU6IHRyeWluZyAkYWNfZGlyLyRhY193b3JkLi4uIiA+JjUKKyAgICAgICAgICBpZiAkYWNfZGlyLyRhY193b3JkIC0tdXBkYXRlIC1xIC9kZXYvbnVsbCAvZGV2L251bGwgPiY1IDI+JjE7IHRoZW4KKyAgICAgICAgICAgIGFjX2N2X3BhdGhfTVNHTUVSR0U9IiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgICAgICAgICBicmVhayAyCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX01TR01FUkdFIiAmJiBhY19jdl9wYXRoX01TR01FUkdFPSI6IgorICAgIDs7Citlc2FjCitmaQorTVNHTUVSR0U9IiRhY19jdl9wYXRoX01TR01FUkdFIgoraWYgdGVzdCAiJE1TR01FUkdFIiAhPSAiOiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNU0dNRVJHRSIgPiY1CiskYXNfZWNobyAiJE1TR01FUkdFIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICAgICAgdGVzdCAtbiAiJGxvY2FsZWRpciIgfHwgbG9jYWxlZGlyPScke2RhdGFkaXJ9L2xvY2FsZScKKworCisgICAgdGVzdCAtbiAiJHtYR0VUVEVYVF9FWFRSQV9PUFRJT05TK3NldH0iIHx8IFhHRVRURVhUX0VYVFJBX09QVElPTlM9CisKKworICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgcG8tZGlyZWN0b3JpZXMiCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgTGlicmFyeSAyIG9yIG5ld2VyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5IDIgb3IgbmV3ZXIuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZ251X2xpYnJhcnlfMis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaWZkZWYgX19HTlVfTElCUkFSWV9fCisgI2lmIChfX0dMSUJDX18gPj0gMikgJiYgIWRlZmluZWQgX19VQ0xJQkNfXworICBMdWNreSBHTlUgdXNlcgorICNlbmRpZgorI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIkx1Y2t5IEdOVSB1c2VyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBhY19jdl9nbnVfbGlicmFyeV8yPXllcworZWxzZQorICBhY19jdl9nbnVfbGlicmFyeV8yPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9nbnVfbGlicmFyeV8yIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZ251X2xpYnJhcnlfMiIgPiY2OyB9CisKKyAgICBHTElCQzI9IiRhY19jdl9nbnVfbGlicmFyeV8yIgorCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFJBTkxJQiIgPiY1CiskYXNfZWNobyAiJFJBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorICBhY19jdF9SQU5MSUI9JFJBTkxJQgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKK2lmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKyAgICBSQU5MSUI9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUkFOTElCPSRhY19jdF9SQU5MSUIKKyAgZmkKK2Vsc2UKKyAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCitmaQorCisKKworICBDRkxBR19WSVNJQklMSVRZPQorICBIQVZFX1ZJU0lCSUxJVFk9MAorICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgLVdlcnJvciBvcHRpb24gaXMgdXNhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIC1XZXJyb3Igb3B0aW9uIGlzIHVzYWJsZS4uLiAiID4mNjsgfQorICAgIGlmICR7Z2xfY3ZfY2NfdmlzX3dlcnJvcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGdsX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IiCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfY3ZfY2NfdmlzX3dlcnJvcj15ZXMKK2Vsc2UKKyAgZ2xfY3ZfY2NfdmlzX3dlcnJvcj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgQ0ZMQUdTPSIkZ2xfc2F2ZV9DRkxBR1MiCitmaQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9jY192aXNfd2Vycm9yIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfY2NfdmlzX3dlcnJvciIgPiY2OyB9CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNpbXBsZSB2aXNpYmlsaXR5IGRlY2xhcmF0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2ltcGxlIHZpc2liaWxpdHkgZGVjbGFyYXRpb25zLi4uICIgPiY2OyB9CisgICAgaWYgJHtnbF9jdl9jY192aXNpYmlsaXR5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgZ2xfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICBDRkxBR1M9IiRDRkxBR1MgLWZ2aXNpYmlsaXR5PWhpZGRlbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgJGdsX2N2X2NjX3Zpc193ZXJyb3IgPSB5ZXM7IHRoZW4KKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IiCisgICAgICBmaQorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworZXh0ZXJuIF9fYXR0cmlidXRlX18oKF9fdmlzaWJpbGl0eV9fKCJoaWRkZW4iKSkpIGludCBoaWRkZW52YXI7CisgICAgICAgICAgICAgZXh0ZXJuIF9fYXR0cmlidXRlX18oKF9fdmlzaWJpbGl0eV9fKCJkZWZhdWx0IikpKSBpbnQgZXhwb3J0ZWR2YXI7CisgICAgICAgICAgICAgZXh0ZXJuIF9fYXR0cmlidXRlX18oKF9fdmlzaWJpbGl0eV9fKCJoaWRkZW4iKSkpIGludCBoaWRkZW5mdW5jICh2b2lkKTsKKyAgICAgICAgICAgICBleHRlcm4gX19hdHRyaWJ1dGVfXygoX192aXNpYmlsaXR5X18oImRlZmF1bHQiKSkpIGludCBleHBvcnRlZGZ1bmMgKHZvaWQpOworICAgICAgICAgICAgIHZvaWQgZHVtbXlmdW5jICh2b2lkKSB7fQorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2NjX3Zpc2liaWxpdHk9eWVzCitlbHNlCisgIGdsX2N2X2NjX3Zpc2liaWxpdHk9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgIENGTEFHUz0iJGdsX3NhdmVfQ0ZMQUdTIgorZmkKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfY2NfdmlzaWJpbGl0eSIgPiY1CiskYXNfZWNobyAiJGdsX2N2X2NjX3Zpc2liaWxpdHkiID4mNjsgfQorICAgIGlmIHRlc3QgJGdsX2N2X2NjX3Zpc2liaWxpdHkgPSB5ZXM7IHRoZW4KKyAgICAgIENGTEFHX1ZJU0lCSUxJVFk9Ii1mdmlzaWJpbGl0eT1oaWRkZW4iCisgICAgICBIQVZFX1ZJU0lCSUxJVFk9MQorICAgIGZpCisgIGZpCisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVklTSUJJTElUWSAkSEFWRV9WSVNJQklMSVRZCitfQUNFT0YKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbmxpbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGlubGluZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2lubGluZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X2NfaW5saW5lPW5vCitmb3IgYWNfa3cgaW4gaW5saW5lIF9faW5saW5lX18gX19pbmxpbmU7IGRvCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKK3R5cGVkZWYgaW50IGZvb190Oworc3RhdGljICRhY19rdyBmb29fdCBzdGF0aWNfZm9vICgpIHtyZXR1cm4gMDsgfQorJGFjX2t3IGZvb190IGZvbyAoKSB7cmV0dXJuIDA7IH0KKyNlbmRpZgorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19pbmxpbmU9JGFjX2t3CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIHRlc3QgIiRhY19jdl9jX2lubGluZSIgIT0gbm8gJiYgYnJlYWsKK2RvbmUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19pbmxpbmUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2lubGluZSIgPiY2OyB9CisKK2Nhc2UgJGFjX2N2X2NfaW5saW5lIGluCisgIGlubGluZSB8IHllcykgOzsKKyAgKikKKyAgICBjYXNlICRhY19jdl9jX2lubGluZSBpbgorICAgICAgbm8pIGFjX3ZhbD07OworICAgICAgKikgYWNfdmFsPSRhY19jdl9jX2lubGluZTs7CisgICAgZXNhYworICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgaW5saW5lICRhY192YWwKKyNlbmRpZgorX0FDRU9GCisgICAgOzsKK2VzYWMKKworYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic2l6ZV90IiAiYWNfY3ZfdHlwZV9zaXplX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9zaXplX3QiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBzaXplX3QgdW5zaWduZWQgaW50CitfQUNFT0YKKworZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0ZGludC5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGRpbnQuaC4uLiAiID4mNjsgfQoraWYgJHtnbF9jdl9oZWFkZXJfc3RkaW50X2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgICAgICAgICAjaW5jbHVkZSA8c3RkaW50Lmg+CitpbnQKK21haW4gKCkKK3sKK3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7IHJldHVybiAhaTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9oZWFkZXJfc3RkaW50X2g9eWVzCitlbHNlCisgIGdsX2N2X2hlYWRlcl9zdGRpbnRfaD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfaGVhZGVyX3N0ZGludF9oIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX3N0ZGludF9oIiA+JjY7IH0KKyAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX3N0ZGludF9oID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVggMQorX0FDRU9GCisKKyAgZmkKKworIyBUaGUgVWx0cml4IDQuMiBtaXBzIGJ1aWx0aW4gYWxsb2NhIGRlY2xhcmVkIGJ5IGFsbG9jYS5oIG9ubHkgd29ya3MKKyMgZm9yIGNvbnN0YW50IGFyZ3VtZW50cy4gIFVzZWxlc3MhCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIGFsbG9jYS5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIGFsbG9jYS5oLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3dvcmtpbmdfYWxsb2NhX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWxsb2NhLmg+CitpbnQKK21haW4gKCkKK3sKK2NoYXIgKnAgPSAoY2hhciAqKSBhbGxvY2EgKDIgKiBzaXplb2YgKGludCkpOworCQkJICBpZiAocCkgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfd29ya2luZ19hbGxvY2FfaD15ZXMKK2Vsc2UKKyAgYWNfY3Zfd29ya2luZ19hbGxvY2FfaD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl93b3JraW5nX2FsbG9jYV9oIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl93b3JraW5nX2FsbG9jYV9oID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQUxMT0NBX0ggMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFsbG9jYSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYWxsb2NhLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fR05VQ19fCisjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorI2Vsc2UKKyMgaWZkZWYgX01TQ19WRVIKKyMgIGluY2x1ZGUgPG1hbGxvYy5oPgorIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisjIGVsc2UKKyMgIGlmZGVmIEhBVkVfQUxMT0NBX0gKKyMgICBpbmNsdWRlIDxhbGxvY2EuaD4KKyMgIGVsc2UKKyMgICBpZmRlZiBfQUlYCisgI3ByYWdtYSBhbGxvY2EKKyMgICBlbHNlCisjICAgIGlmbmRlZiBhbGxvY2EgLyogcHJlZGVmaW5lZCBieSBIUCBjYyArT2xpYmNhbGxzICovCit2b2lkICphbGxvY2EgKHNpemVfdCk7CisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworaW50CittYWluICgpCit7CitjaGFyICpwID0gKGNoYXIgKikgYWxsb2NhICgxKTsKKwkJCQkgICAgaWYgKHApIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzPXllcworZWxzZQorICBhY19jdl9mdW5jX2FsbG9jYV93b3Jrcz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzIiA+JjY7IH0KKworaWYgdGVzdCAkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BTExPQ0EgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgIyBUaGUgU1ZSMyBsaWJQVyBhbmQgU1ZSNCBsaWJ1Y2IgYm90aCBjb250YWluIGluY29tcGF0aWJsZSBmdW5jdGlvbnMKKyMgdGhhdCBjYXVzZSB0cm91YmxlLiAgU29tZSB2ZXJzaW9ucyBkbyBub3QgZXZlbiBjb250YWluIGFsbG9jYSBvcgorIyBjb250YWluIGEgYnVnZ3kgdmVyc2lvbi4gIElmIHlvdSBzdGlsbCB3YW50IHRvIHVzZSB0aGVpciBhbGxvY2EsCisjIHVzZSBhciB0byBleHRyYWN0IGFsbG9jYS5vIGZyb20gdGhlbSBpbnN0ZWFkIG9mIGNvbXBpbGluZyBhbGxvY2EuYy4KKworQUxMT0NBPVwke0xJQk9CSkRJUn1hbGxvY2EuJGFjX29iamV4dAorCiskYXNfZWNobyAiI2RlZmluZSBDX0FMTE9DQSAxIiA+PmNvbmZkZWZzLmgKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIFxgYWxsb2NhLmMnIG5lZWRzIENyYXkgaG9va3MuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfb3NfY3JheSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZiBkZWZpbmVkIENSQVkgJiYgISBkZWZpbmVkIENSQVkyCit3ZWJlY3JheQorI2Vsc2UKK3dlbm90YmVjcmF5CisjZW5kaWYKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAid2ViZWNyYXkiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGFjX2N2X29zX2NyYXk9eWVzCitlbHNlCisgIGFjX2N2X29zX2NyYXk9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb3NfY3JheSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X29zX2NyYXkiID4mNjsgfQoraWYgdGVzdCAkYWNfY3Zfb3NfY3JheSA9IHllczsgdGhlbgorICBmb3IgYWNfZnVuYyBpbiBfZ2V0YjY3IEdFVEI2NyBnZXRiNjc7IGRvCisgICAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgQ1JBWV9TVEFDS1NFR19FTkQgJGFjX2Z1bmMKK19BQ0VPRgorCisgICAgYnJlYWsKK2ZpCisKKyAgZG9uZQorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzdGFjayBkaXJlY3Rpb24gZm9yIEMgYWxsb2NhIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHN0YWNrIGRpcmVjdGlvbiBmb3IgQyBhbGxvY2EuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY19zdGFja19kaXJlY3Rpb24rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uPTAKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorZmluZF9zdGFja19kaXJlY3Rpb24gKGludCAqYWRkciwgaW50IGRlcHRoKQoreworICBpbnQgZGlyLCBkdW1teSA9IDA7CisgIGlmICghIGFkZHIpCisgICAgYWRkciA9ICZkdW1teTsKKyAgKmFkZHIgPSBhZGRyIDwgJmR1bW15ID8gMSA6IGFkZHIgPT0gJmR1bW15ID8gMCA6IC0xOworICBkaXIgPSBkZXB0aCA/IGZpbmRfc3RhY2tfZGlyZWN0aW9uIChhZGRyLCBkZXB0aCAtIDEpIDogMDsKKyAgcmV0dXJuIGRpciArIGR1bW15OworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgcmV0dXJuIGZpbmRfc3RhY2tfZGlyZWN0aW9uICgwLCBhcmdjICsgIWFyZ3YgKyAyMCkgPCAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19zdGFja19kaXJlY3Rpb249MQorZWxzZQorICBhY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0tMQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24iID4mNjsgfQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTVEFDS19ESVJFQ1RJT04gJGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uCitfQUNFT0YKKworCitmaQorCisKKworCisgIGZvciBhY19oZWFkZXIgaW4gJGFjX2hlYWRlcl9saXN0CitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKworCisKKworCitmb3IgYWNfZnVuYyBpbiBnZXRwYWdlc2l6ZQorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRwYWdlc2l6ZSIgImFjX2N2X2Z1bmNfZ2V0cGFnZXNpemUiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0cGFnZXNpemUiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HRVRQQUdFU0laRSAxCitfQUNFT0YKKworZmkKK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBtbWFwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIG1tYXAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD1ubworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorLyogbWFsbG9jIG1pZ2h0IGhhdmUgYmVlbiByZW5hbWVkIGFzIHJwbF9tYWxsb2MuICovCisjdW5kZWYgbWFsbG9jCisKKy8qIFRoYW5rcyB0byBNaWtlIEhhZXJ0ZWwgYW5kIEppbSBBdmVyYSBmb3IgdGhpcyB0ZXN0LgorICAgSGVyZSBpcyBhIG1hdHJpeCBvZiBtbWFwIHBvc3NpYmlsaXRpZXM6CisJbW1hcCBwcml2YXRlIG5vdCBmaXhlZAorCW1tYXAgcHJpdmF0ZSBmaXhlZCBhdCBzb21ld2hlcmUgY3VycmVudGx5IHVubWFwcGVkCisJbW1hcCBwcml2YXRlIGZpeGVkIGF0IHNvbWV3aGVyZSBhbHJlYWR5IG1hcHBlZAorCW1tYXAgc2hhcmVkIG5vdCBmaXhlZAorCW1tYXAgc2hhcmVkIGZpeGVkIGF0IHNvbWV3aGVyZSBjdXJyZW50bHkgdW5tYXBwZWQKKwltbWFwIHNoYXJlZCBmaXhlZCBhdCBzb21ld2hlcmUgYWxyZWFkeSBtYXBwZWQKKyAgIEZvciBwcml2YXRlIG1hcHBpbmdzLCB3ZSBzaG91bGQgdmVyaWZ5IHRoYXQgY2hhbmdlcyBjYW5ub3QgYmUgcmVhZCgpCisgICBiYWNrIGZyb20gdGhlIGZpbGUsIG5vciBtbWFwJ3MgYmFjayBmcm9tIHRoZSBmaWxlIGF0IGEgZGlmZmVyZW50CisgICBhZGRyZXNzLiAgKFRoZXJlIGhhdmUgYmVlbiBzeXN0ZW1zIHdoZXJlIHByaXZhdGUgd2FzIG5vdCBjb3JyZWN0bHkKKyAgIGltcGxlbWVudGVkIGxpa2UgdGhlIGluZmFtb3VzIGkzODYgc3ZyNC4wLCBhbmQgc3lzdGVtcyB3aGVyZSB0aGUKKyAgIFZNIHBhZ2UgY2FjaGUgd2FzIG5vdCBjb2hlcmVudCB3aXRoIHRoZSBmaWxlIHN5c3RlbSBidWZmZXIgY2FjaGUKKyAgIGxpa2UgZWFybHkgdmVyc2lvbnMgb2YgRnJlZUJTRCBhbmQgcG9zc2libHkgY29udGVtcG9yYXJ5IE5ldEJTRC4pCisgICBGb3Igc2hhcmVkIG1hcHBpbmdzLCB3ZSBzaG91bGQgY29udmVyc2VseSB2ZXJpZnkgdGhhdCBjaGFuZ2VzIGdldAorICAgcHJvcGFnYXRlZCBiYWNrIHRvIGFsbCB0aGUgcGxhY2VzIHRoZXkncmUgc3VwcG9zZWQgdG8gYmUuCisKKyAgIEdyZXAgd2FudHMgcHJpdmF0ZSBmaXhlZCBhbHJlYWR5IG1hcHBlZC4KKyAgIFRoZSBtYWluIHRoaW5ncyBncmVwIG5lZWRzIHRvIGtub3cgYWJvdXQgbW1hcCBhcmU6CisgICAqIGRvZXMgaXQgZXhpc3QgYW5kIGlzIGl0IHNhZmUgdG8gd3JpdGUgaW50byB0aGUgbW1hcCdkIGFyZWEKKyAgICogaG93IHRvIHVzZSBpdCAoQlNEIHZhcmlhbnRzKSAgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworI2lmICFkZWZpbmVkIFNURENfSEVBREVSUyAmJiAhZGVmaW5lZCBIQVZFX1NURExJQl9ICitjaGFyICptYWxsb2MgKCk7CisjZW5kaWYKKworLyogVGhpcyBtZXNzIHdhcyBjb3BpZWQgZnJvbSB0aGUgR05VIGdldHBhZ2VzaXplLmguICAqLworI2lmbmRlZiBIQVZFX0dFVFBBR0VTSVpFCisjIGlmZGVmIF9TQ19QQUdFU0laRQorIyAgZGVmaW5lIGdldHBhZ2VzaXplKCkgc3lzY29uZihfU0NfUEFHRVNJWkUpCisjIGVsc2UgLyogbm8gX1NDX1BBR0VTSVpFICovCisjICBpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjICAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjICAgaWZkZWYgRVhFQ19QQUdFU0laRQorIyAgICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBFWEVDX1BBR0VTSVpFCisjICAgZWxzZSAvKiBubyBFWEVDX1BBR0VTSVpFICovCisjICAgIGlmZGVmIE5CUEcKKyMgICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIE5CUEcgKiBDTFNJWkUKKyMgICAgIGlmbmRlZiBDTFNJWkUKKyMgICAgICBkZWZpbmUgQ0xTSVpFIDEKKyMgICAgIGVuZGlmIC8qIG5vIENMU0laRSAqLworIyAgICBlbHNlIC8qIG5vIE5CUEcgKi8KKyMgICAgIGlmZGVmIE5CUEMKKyMgICAgICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBOQlBDCisjICAgICBlbHNlIC8qIG5vIE5CUEMgKi8KKyMgICAgICBpZmRlZiBQQUdFU0laRQorIyAgICAgICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBQQUdFU0laRQorIyAgICAgIGVuZGlmIC8qIFBBR0VTSVpFICovCisjICAgICBlbmRpZiAvKiBubyBOQlBDICovCisjICAgIGVuZGlmIC8qIG5vIE5CUEcgKi8KKyMgICBlbmRpZiAvKiBubyBFWEVDX1BBR0VTSVpFICovCisjICBlbHNlIC8qIG5vIEhBVkVfU1lTX1BBUkFNX0ggKi8KKyMgICBkZWZpbmUgZ2V0cGFnZXNpemUoKSA4MTkyCS8qIHB1bnQgdG90YWxseSAqLworIyAgZW5kaWYgLyogbm8gSEFWRV9TWVNfUEFSQU1fSCAqLworIyBlbmRpZiAvKiBubyBfU0NfUEFHRVNJWkUgKi8KKworI2VuZGlmIC8qIG5vIEhBVkVfR0VUUEFHRVNJWkUgKi8KKworaW50CittYWluICgpCit7CisgIGNoYXIgKmRhdGEsICpkYXRhMiwgKmRhdGEzOworICBjb25zdCBjaGFyICpjZGF0YTI7CisgIGludCBpLCBwYWdlc2l6ZTsKKyAgaW50IGZkLCBmZDI7CisKKyAgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSAoKTsKKworICAvKiBGaXJzdCwgbWFrZSBhIGZpbGUgd2l0aCBzb21lIGtub3duIGdhcmJhZ2UgaW4gaXQuICovCisgIGRhdGEgPSAoY2hhciAqKSBtYWxsb2MgKHBhZ2VzaXplKTsKKyAgaWYgKCFkYXRhKQorICAgIHJldHVybiAxOworICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKKyAgICAqKGRhdGEgKyBpKSA9IHJhbmQgKCk7CisgIHVtYXNrICgwKTsKKyAgZmQgPSBjcmVhdCAoImNvbmZ0ZXN0Lm1tYXAiLCAwNjAwKTsKKyAgaWYgKGZkIDwgMCkKKyAgICByZXR1cm4gMjsKKyAgaWYgKHdyaXRlIChmZCwgZGF0YSwgcGFnZXNpemUpICE9IHBhZ2VzaXplKQorICAgIHJldHVybiAzOworICBjbG9zZSAoZmQpOworCisgIC8qIE5leHQsIGNoZWNrIHRoYXQgdGhlIHRhaWwgb2YgYSBwYWdlIGlzIHplcm8tZmlsbGVkLiAgRmlsZSBtdXN0IGhhdmUKKyAgICAgbm9uLXplcm8gbGVuZ3RoLCBvdGhlcndpc2Ugd2UgcmlzayBTSUdCVVMgZm9yIGVudGlyZSBwYWdlLiAgKi8KKyAgZmQyID0gb3BlbiAoImNvbmZ0ZXN0LnR4dCIsIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjAwKTsKKyAgaWYgKGZkMiA8IDApCisgICAgcmV0dXJuIDQ7CisgIGNkYXRhMiA9ICIiOworICBpZiAod3JpdGUgKGZkMiwgY2RhdGEyLCAxKSAhPSAxKQorICAgIHJldHVybiA1OworICBkYXRhMiA9IChjaGFyICopIG1tYXAgKDAsIHBhZ2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZDIsIDBMKTsKKyAgaWYgKGRhdGEyID09IE1BUF9GQUlMRUQpCisgICAgcmV0dXJuIDY7CisgIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQorICAgIGlmICgqKGRhdGEyICsgaSkpCisgICAgICByZXR1cm4gNzsKKyAgY2xvc2UgKGZkMik7CisgIGlmIChtdW5tYXAgKGRhdGEyLCBwYWdlc2l6ZSkpCisgICAgcmV0dXJuIDg7CisKKyAgLyogTmV4dCwgdHJ5IHRvIG1tYXAgdGhlIGZpbGUgYXQgYSBmaXhlZCBhZGRyZXNzIHdoaWNoIGFscmVhZHkgaGFzCisgICAgIHNvbWV0aGluZyBlbHNlIGFsbG9jYXRlZCBhdCBpdC4gIElmIHdlIGNhbiwgYWxzbyBtYWtlIHN1cmUgdGhhdAorICAgICB3ZSBzZWUgdGhlIHNhbWUgZ2FyYmFnZS4gICovCisgIGZkID0gb3BlbiAoImNvbmZ0ZXN0Lm1tYXAiLCBPX1JEV1IpOworICBpZiAoZmQgPCAwKQorICAgIHJldHVybiA5OworICBpZiAoZGF0YTIgIT0gbW1hcCAoZGF0YTIsIHBhZ2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorCQkgICAgIE1BUF9QUklWQVRFIHwgTUFQX0ZJWEVELCBmZCwgMEwpKQorICAgIHJldHVybiAxMDsKKyAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCisgICAgaWYgKCooZGF0YSArIGkpICE9ICooZGF0YTIgKyBpKSkKKyAgICAgIHJldHVybiAxMTsKKworICAvKiBGaW5hbGx5LCBtYWtlIHN1cmUgdGhhdCBjaGFuZ2VzIHRvIHRoZSBtYXBwZWQgYXJlYSBkbyBub3QKKyAgICAgcGVyY29sYXRlIGJhY2sgdG8gdGhlIGZpbGUgYXMgc2VlbiBieSByZWFkKCkuICAoVGhpcyBpcyBhIGJ1ZyBvbgorICAgICBzb21lIHZhcmlhbnRzIG9mIGkzODYgc3ZyNC4wLikgICovCisgIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQorICAgICooZGF0YTIgKyBpKSA9ICooZGF0YTIgKyBpKSArIDE7CisgIGRhdGEzID0gKGNoYXIgKikgbWFsbG9jIChwYWdlc2l6ZSk7CisgIGlmICghZGF0YTMpCisgICAgcmV0dXJuIDEyOworICBpZiAocmVhZCAoZmQsIGRhdGEzLCBwYWdlc2l6ZSkgIT0gcGFnZXNpemUpCisgICAgcmV0dXJuIDEzOworICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKKyAgICBpZiAoKihkYXRhICsgaSkgIT0gKihkYXRhMyArIGkpKQorICAgICAgcmV0dXJuIDE0OworICBjbG9zZSAoZmQpOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9eWVzCitlbHNlCisgIGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTU1BUCAxIiA+PmNvbmZkZWZzLmgKKworZmkKK3JtIC1mIGNvbmZ0ZXN0Lm1tYXAgY29uZnRlc3QudHh0CisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIFNJR0ZQRSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgU0lHRlBFLi4uICIgPiY2OyB9CitpZiAke2d0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9CisgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgbWFjb3MqIHwgZGFyd2luWzYtOV0qIHwgZGFyd2luWzEtOV1bMC05XSopCisgICAgICAgICAgIyBPbiBNYWMgT1MgWCAxMC4yIG9yIG5ld2VyLCBqdXN0IGFzc3VtZSB0aGUgc2FtZSBhcyB3aGVuIGNyb3NzLQorICAgICAgICAgICMgY29tcGlsaW5nLiBJZiB3ZSB3ZXJlIHRvIHBlcmZvcm0gdGhlIHJlYWwgdGVzdCwgMSBDcmFzaCBSZXBvcnQKKyAgICAgICAgICAjIGRpYWxvZyB3aW5kb3cgd291bGQgcG9wIHVwLgorICAgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgICAgIGlbMzQ1NjddODYgfCB4ODZfNjQpCisgICAgICAgICAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBpZiB0ZXN0IC16ICIkZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgICAgIyBHdWVzcyBiYXNlZCBvbiB0aGUgQ1BVLgorICAgICAgICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICAgICAgICAgICBhbHBoYSogfCBpWzM0NTY3XTg2IHwgeDg2XzY0IHwgbTY4ayB8IHMzOTAqKQorICAgICAgICAgICAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgIGVzYWMKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworc3RhdGljIHZvaWQKK3NpZ2ZwZV9oYW5kbGVyIChpbnQgc2lnKQoreworICAvKiBFeGl0IHdpdGggY29kZSAwIGlmIFNJR0ZQRSwgd2l0aCBjb2RlIDEgaWYgYW55IG90aGVyIHNpZ25hbC4gICovCisgIGV4aXQgKHNpZyAhPSBTSUdGUEUpOworfQorCitpbnQgeCA9IDE7CitpbnQgeSA9IDA7CitpbnQgejsKK2ludCBuYW47CisKK2ludCBtYWluICgpCit7CisgIHNpZ25hbCAoU0lHRlBFLCBzaWdmcGVfaGFuZGxlcik7CisvKiBJUklYIGFuZCBBSVggKHdoZW4gInhsYyAtcWNoZWNrIiBpcyB1c2VkKSB5aWVsZCBzaWduYWwgU0lHVFJBUC4gICovCisjaWYgKGRlZmluZWQgKF9fc2dpKSB8fCBkZWZpbmVkIChfQUlYKSkgJiYgZGVmaW5lZCAoU0lHVFJBUCkKKyAgc2lnbmFsIChTSUdUUkFQLCBzaWdmcGVfaGFuZGxlcik7CisjZW5kaWYKKy8qIExpbnV4L1NQQVJDIHlpZWxkcyBzaWduYWwgU0lHSUxMLiAgKi8KKyNpZiBkZWZpbmVkIChfX3NwYXJjX18pICYmIGRlZmluZWQgKF9fbGludXhfXykKKyAgc2lnbmFsIChTSUdJTEwsIHNpZ2ZwZV9oYW5kbGVyKTsKKyNlbmRpZgorCisgIHogPSB4IC8geTsKKyAgbmFuID0geSAvIHk7CisgIGV4aXQgKDIpOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT15ZXMKK2Vsc2UKKyAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSIgPiY1CiskYXNfZWNobyAiJGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlIiA+JjY7IH0KKyAgY2FzZSAiJGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlIiBpbgorICAgICp5ZXMpIHZhbHVlPTE7OworICAgICopIHZhbHVlPTA7OworICBlc2FjCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSU5URElWMF9SQUlTRVNfU0lHRlBFICR2YWx1ZQorX0FDRU9GCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGludHR5cGVzLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGludHR5cGVzLmguLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfaGVhZGVyX2ludHR5cGVzX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCitpbnQKK21haW4gKCkKK3sKK3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7IHJldHVybiAhaTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXMKK2Vsc2UKKyAgZ2xfY3ZfaGVhZGVyX2ludHR5cGVzX2g9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX2ludHR5cGVzX2giID4mNjsgfQorICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVggMQorX0FDRU9GCisKKyAgZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50PXllcworICAgICBpZiB0ZXN0ICJ4JHthY19jdl9wcm9nX2NjX2M5OS1ub30iID0geG5vOyB0aGVuCisgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgIC8qIEZvciBub3csIGRvIG5vdCB0ZXN0IHRoZSBwcmVwcm9jZXNzb3I7IGFzIG9mIDIwMDcgdGhlcmUgYXJlIHRvbyBtYW55CisgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgd2l0aCBicm9rZW4gcHJlcHJvY2Vzc29ycy4gIFBlcmhhcHMgdGhpcyBjYW4KKyAgICAgICAgIGJlIHJldmlzaXRlZCBpbiAyMDEyLiAgSW4gdGhlIG1lYW50aW1lLCBjb2RlIHNob3VsZCBub3QgZXhwZWN0CisgICAgICAgICAjaWYgdG8gd29yayB3aXRoIGxpdGVyYWxzIHdpZGVyIHRoYW4gMzIgYml0cy4gICovCisgICAgICAvKiBUZXN0IGxpdGVyYWxzLiAgKi8KKyAgICAgIGxvbmcgbG9uZyBpbnQgbGwgPSA5MjIzMzcyMDM2ODU0Nzc1ODA3bGw7CisgICAgICBsb25nIGxvbmcgaW50IG5sbCA9IC05MjIzMzcyMDM2ODU0Nzc1ODA3TEw7CisgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVsbCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMOworICAgICAgLyogVGVzdCBjb25zdGFudCBleHByZXNzaW9ucy4gICAqLworICAgICAgdHlwZWRlZiBpbnQgYVsoKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgPCAwICYmIDAgPCA5MjIzMzcyMDM2ODU0Nzc1ODA3bGwpCisgICAgICAgICAgICAgICAgICAgICA/IDEgOiAtMSldOworICAgICAgdHlwZWRlZiBpbnQgYlsoMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgPD0gKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpIC0xCisgICAgICAgICAgICAgICAgICAgICA/IDEgOiAtMSldOworICAgICAgaW50IGkgPSA2MzsKK2ludAorbWFpbiAoKQoreworLyogVGVzdCBhdmFpbGFiaWxpdHkgb2YgcnVudGltZSByb3V0aW5lcyBmb3Igc2hpZnQgYW5kIGRpdmlzaW9uLiAgKi8KKyAgICAgIGxvbmcgbG9uZyBpbnQgbGxtYXggPSA5MjIzMzcyMDM2ODU0Nzc1ODA3bGw7CisgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVsbG1heCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1dWxsOworICAgICAgcmV0dXJuICgobGwgPDwgNjMpIHwgKGxsID4+IDYzKSB8IChsbCA8IGkpIHwgKGxsID4gaSkKKyAgICAgICAgICAgICAgfCAobGxtYXggLyBsbCkgfCAobGxtYXggJSBsbCkKKyAgICAgICAgICAgICAgfCAodWxsIDw8IDYzKSB8ICh1bGwgPj4gNjMpIHwgKHVsbCA8PCBpKSB8ICh1bGwgPj4gaSkKKyAgICAgICAgICAgICAgfCAodWxsbWF4IC8gdWxsKSB8ICh1bGxtYXggJSB1bGwpKTsKKyAgOworICByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCIgPiY2OyB9CisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisKKworICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IG5vICYmIHRlc3QgJGdsX2N2X2hlYWRlcl9zdGRpbnRfaCA9IG5vOyB0aGVuCisKKyAgICB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQgPSB5ZXMgXAorICAgICAgJiYgYWNfdHlwZT0ndW5zaWduZWQgbG9uZyBsb25nJyBcCisgICAgICB8fCBhY190eXBlPSd1bnNpZ25lZCBsb25nJworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIHVpbnRtYXhfdCAkYWNfdHlwZQorX0FDRU9GCisKKyAgZWxzZQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1VJTlRNQVhfVCAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisKKyAgZm9yIGFjX2hlYWRlciBpbiBpbnR0eXBlcy5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJpbnR0eXBlcy5oIiAiYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIGludHR5cGVzLmggUFJJeE5OIG1hY3JvcyBhcmUgYnJva2VuIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGludHR5cGVzLmggUFJJeE5OIG1hY3JvcyBhcmUgYnJva2VuLi4uICIgPiY2OyB9CitpZiAke2d0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaWZkZWYgUFJJZDMyCitjaGFyICpwID0gUFJJZDMyOworI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbj1ubworZWxzZQorICBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuIiA+JjUKKyRhc19lY2hvICIkZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbiIgPiY2OyB9CisgIGZpCisgIGlmIHRlc3QgIiRndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuIiA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBSSV9NQUNST1NfQlJPS0VOIDEKK19BQ0VPRgorCisgICAgUFJJX01BQ1JPU19CUk9LRU49MQorICBlbHNlCisgICAgUFJJX01BQ1JPU19CUk9LRU49MAorICBmaQorCisKKworCisKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10aHJlYWRzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3RocmVhZHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV90aHJlYWRzOyBnbF91c2VfdGhyZWFkcz0kZW5hYmxldmFsCitlbHNlCisgIGlmIHRlc3QgLW4gIiRnbF91c2VfdGhyZWFkc19kZWZhdWx0IjsgdGhlbgorICAgICAgIGdsX3VzZV90aHJlYWRzPSIkZ2xfdXNlX3RocmVhZHNfZGVmYXVsdCIKKyAgICAgZWxzZQorICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3NmKikgZ2xfdXNlX3RocmVhZHM9bm8gOzsKKyAgICAgICAgIGN5Z3dpbiopCisgICAgICAgICAgICAgICBjYXNlIGB1bmFtZSAtcmAgaW4KKyAgICAgICAgICAgICAgICAgMS5bMC01XS4qKSBnbF91c2VfdGhyZWFkcz1ubyA7OworICAgICAgICAgICAgICAgICAqKSAgICAgICAgIGdsX3VzZV90aHJlYWRzPXllcyA7OworICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICopICAgIGdsX3VzZV90aHJlYWRzPXllcyA7OworICAgICAgIGVzYWMKKyAgICAgZmkKKworZmkKKworICBpZiB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0geWVzIHx8IHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSBwb3NpeDsgdGhlbgorICAgICMgRm9yIHVzaW5nIDxwdGhyZWFkLmg+OgorICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgb3NmKikKKyAgICAgICAgIyBPbiBPU0YvMSwgdGhlIGNvbXBpbGVyIG5lZWRzIHRoZSBmbGFnIC1EX1JFRU5UUkFOVCBzbyB0aGF0IGl0CisgICAgICAgICMgZ3Jva3MgPHB0aHJlYWQuaD4uIGNjIGFsc28gdW5kZXJzdGFuZHMgdGhlIGZsYWcgLXB0aHJlYWQsIGJ1dAorICAgICAgICAjIHdlIGRvbid0IHVzZSBpdCBiZWNhdXNlIDEuIGdjYy0yLjk1IGRvZXNuJ3QgdW5kZXJzdGFuZCAtcHRocmVhZCwKKyAgICAgICAgIyAyLiBwdXR0aW5nIGEgZmxhZyBpbnRvIENQUEZMQUdTIHRoYXQgaGFzIGFuIGVmZmVjdCBvbiB0aGUgbGlua2VyCisgICAgICAgICMgY2F1c2VzIHRoZSBBQ19MSU5LX0lGRUxTRSB0ZXN0IGJlbG93IHRvIHN1Y2NlZWQgdW5leHBlY3RlZGx5LAorICAgICAgICAjIGxlYWRpbmcgdG8gd3JvbmcgdmFsdWVzIG9mIExJQlRIUkVBRCBhbmQgTFRMSUJUSFJFQUQuCisgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfUkVFTlRSQU5UIgorICAgICAgICA7OworICAgIGVzYWMKKyAgICAjIFNvbWUgc3lzdGVtcyBvcHRpbWl6ZSBmb3Igc2luZ2xlLXRocmVhZGVkIHByb2dyYW1zIGJ5IGRlZmF1bHQsIGFuZAorICAgICMgbmVlZCBzcGVjaWFsIGZsYWdzIHRvIGRpc2FibGUgdGhlc2Ugb3B0aW1pemF0aW9ucy4gRm9yIGV4YW1wbGUsIHRoZQorICAgICMgZGVmaW5pdGlvbiBvZiAnZXJybm8nIGluIDxlcnJuby5oPi4KKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgIGFpeCogfCBmcmVlYnNkKikgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9USFJFQURfU0FGRSIgOzsKKyAgICAgIHNvbGFyaXMqKSBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1JFRU5UUkFOVCIgOzsKKyAgICBlc2FjCisgIGZpCisKKworCisKKworICAgICAgaWYgdGVzdCAiWCRwcmVmaXgiID0gIlhOT05FIjsgdGhlbgorICAgIGFjbF9maW5hbF9wcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKKyAgZWxzZQorICAgIGFjbF9maW5hbF9wcmVmaXg9IiRwcmVmaXgiCisgIGZpCisgIGlmIHRlc3QgIlgkZXhlY19wcmVmaXgiID0gIlhOT05FIjsgdGhlbgorICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0nJHtwcmVmaXh9JworICBlbHNlCisgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGZpCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgZXZhbCBhY2xfZmluYWxfZXhlY19wcmVmaXg9XCIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4XCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKK2Vsc2UKKyAgd2l0aF9nbnVfbGQ9bm8KK2ZpCisKKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgIyBEZXRlcm1pbmUgUEFUSF9TRVBBUkFUT1IgYnkgdHJ5aW5nIHRvIGZpbmQgL2Jpbi9zaCBpbiBhIFBBVEggd2hpY2gKKyAgIyBjb250YWlucyBvbmx5IC9iaW4uIE5vdGUgdGhhdCBrc2ggbG9va3MgYWxzbyBhdCB0aGUgRlBBVEggdmFyaWFibGUsCisgICMgc28gd2UgaGF2ZSB0byBzZXQgdGhhdCBhcyB3ZWxsIGZvciB0aGUgdGVzdC4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSBcCisgICAgJiYgeyAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSBcCisgICAgICAgICAgIHx8IFBBVEhfU0VQQVJBVE9SPSc7JworICAgICAgIH0KK2ZpCisKK2FjX3Byb2c9bGQKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gIiA+JjY7IH0KKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbXFwvXSogfCA/OltcXC9dKikKKyAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gZWNobyAiJGFjX3Byb2cifCBzZWQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgZWNobyAiJGFjX3Byb2ciIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKyAgICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICIgPiY2OyB9CitmaQoraWYgJHthY2xfY3ZfcGF0aF9MRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgYWNsX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIElGUz0iJGFjbF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgYWNsX2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGFjbF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKyAgICAgICAgdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjbF9zYXZlX2lmcyIKK2Vsc2UKKyAgYWNsX2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaQorZmkKKworTEQ9IiRhY2xfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRCIgPiY1CiskYXNfZWNobyAiJExEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQordGVzdCAteiAiJExEIiAmJiBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICIgPiY2OyB9CitpZiAke2FjbF9jdl9wcm9nX2dudV9sZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgYWNsX2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgYWNsX2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY2xfY3ZfcHJvZ19nbnVfbGQiID4mNQorJGFzX2VjaG8gIiRhY2xfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQord2l0aF9nbnVfbGQ9JGFjbF9jdl9wcm9nX2dudV9sZAorCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaGFyZWQgbGlicmFyeSBydW4gcGF0aCBvcmlnaW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbi4uLiAiID4mNjsgfQoraWYgJHthY2xfY3ZfcnBhdGgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgQ0M9IiRDQyIgR0NDPSIkR0NDIiBMREZMQUdTPSIkTERGTEFHUyIgTEQ9IiRMRCIgd2l0aF9nbnVfbGQ9IiR3aXRoX2dudV9sZCIgXAorICAgICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICIkYWNfYXV4X2Rpci9jb25maWcucnBhdGgiICIkaG9zdCIgPiBjb25mdGVzdC5zaAorICAgIC4gLi9jb25mdGVzdC5zaAorICAgIHJtIC1mIC4vY29uZnRlc3Quc2gKKyAgICBhY2xfY3ZfcnBhdGg9ZG9uZQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY2xfY3ZfcnBhdGgiID4mNQorJGFzX2VjaG8gIiRhY2xfY3ZfcnBhdGgiID4mNjsgfQorICB3bD0iJGFjbF9jdl93bCIKKyAgYWNsX2xpYmV4dD0iJGFjbF9jdl9saWJleHQiCisgIGFjbF9zaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKKyAgYWNsX2xpYm5hbWVfc3BlYz0iJGFjbF9jdl9saWJuYW1lX3NwZWMiCisgIGFjbF9saWJyYXJ5X25hbWVzX3NwZWM9IiRhY2xfY3ZfbGlicmFyeV9uYW1lc19zcGVjIgorICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorICBhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgorICBhY2xfaGFyZGNvZGVfZGlyZWN0PSIkYWNsX2N2X2hhcmRjb2RlX2RpcmVjdCIKKyAgYWNsX2hhcmRjb2RlX21pbnVzX0w9IiRhY2xfY3ZfaGFyZGNvZGVfbWludXNfTCIKKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcnBhdGggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9ycGF0aDsgOgorZWxzZQorICBlbmFibGVfcnBhdGg9eWVzCitmaQorCisKKworCisgIGFjbF9saWJkaXJzdGVtPWxpYgorICBhY2xfbGliZGlyc3RlbTI9CisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIHNvbGFyaXMqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgNjQtYml0IGhvc3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIDY0LWJpdCBob3N0Li4uICIgPiY2OyB9CitpZiAke2dsX2N2X3NvbGFyaXNfNjRiaXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpZmRlZiBfTFA2NAorc2l4dHlmb3VyIGJpdHMKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJzaXh0eWZvdXIgYml0cyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZ2xfY3Zfc29sYXJpc182NGJpdD15ZXMKK2Vsc2UKKyAgZ2xfY3Zfc29sYXJpc182NGJpdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3NvbGFyaXNfNjRiaXQiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9zb2xhcmlzXzY0Yml0IiA+JjY7IH0KKyAgICAgIGlmIHRlc3QgJGdsX2N2X3NvbGFyaXNfNjRiaXQgPSB5ZXM7IHRoZW4KKyAgICAgICAgYWNsX2xpYmRpcnN0ZW09bGliLzY0CisgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgICAgICBzcGFyYyopICAgICAgICBhY2xfbGliZGlyc3RlbTI9bGliL3NwYXJjdjkgOzsKKyAgICAgICAgICBpKjg2IHwgeDg2XzY0KSBhY2xfbGliZGlyc3RlbTI9bGliL2FtZDY0IDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICA7OworICAgICopCisgICAgICBzZWFyY2hwYXRoPWAoTENfQUxMPUMgJENDIC1wcmludC1zZWFyY2gtZGlycykgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJ3MsXmxpYnJhcmllczogLCxwJyB8IHNlZCAtZSAncyxePSwsJ2AKKyAgICAgIGlmIHRlc3QgLW4gIiRzZWFyY2hwYXRoIjsgdGhlbgorICAgICAgICBhY2xfc2F2ZV9JRlM9IiR7SUZTPSAJfSI7IElGUz0iOiIKKyAgICAgICAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNocGF0aDsgZG8KKyAgICAgICAgICBpZiB0ZXN0IC1kICIkc2VhcmNoZGlyIjsgdGhlbgorICAgICAgICAgICAgY2FzZSAiJHNlYXJjaGRpciIgaW4KKyAgICAgICAgICAgICAgKi9saWI2NC8gfCAqL2xpYjY0ICkgYWNsX2xpYmRpcnN0ZW09bGliNjQgOzsKKyAgICAgICAgICAgICAgKi8uLi8gfCAqLy4uICkKKyAgICAgICAgICAgICAgICAjIEJldHRlciBpZ25vcmUgZGlyZWN0b3JpZXMgb2YgdGhpcyBmb3JtLiBUaGV5IGFyZSBtaXNsZWFkaW5nLgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICopIHNlYXJjaGRpcj1gY2QgIiRzZWFyY2hkaXIiICYmIHB3ZGAKKyAgICAgICAgICAgICAgICAgY2FzZSAiJHNlYXJjaGRpciIgaW4KKyAgICAgICAgICAgICAgICAgICAqL2xpYjY0ICkgYWNsX2xpYmRpcnN0ZW09bGliNjQgOzsKKyAgICAgICAgICAgICAgICAgZXNhYyA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgSUZTPSIkYWNsX3NhdmVfSUZTIgorICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKKyAgdGVzdCAtbiAiJGFjbF9saWJkaXJzdGVtMiIgfHwgYWNsX2xpYmRpcnN0ZW0yPSIkYWNsX2xpYmRpcnN0ZW0iCisKKworCisgIGdsX3RocmVhZHNfYXBpPW5vbmUKKyAgTElCVEhSRUFEPQorICBMVExJQlRIUkVBRD0KKyAgTElCTVVMVElUSFJFQUQ9CisgIExUTElCTVVMVElUSFJFQUQ9CisgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgIT0gbm87IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGltcG9ydGVkIHN5bWJvbHMgY2FuIGJlIGRlY2xhcmVkIHdlYWsiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBpbXBvcnRlZCBzeW1ib2xzIGNhbiBiZSBkZWNsYXJlZCB3ZWFrLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X2hhdmVfd2Vhays6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGdsX2N2X2hhdmVfd2Vhaz1ubworICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitleHRlcm4gdm9pZCB4eXp6eSAoKTsKKyNwcmFnbWEgd2VhayB4eXp6eQoraW50CittYWluICgpCit7Cit4eXp6eSgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2hhdmVfd2Vhaz1tYXliZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV93ZWFrID0gbWF5YmU7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fRUxGX18KKyAgICAgICAgICAgICAgIEV4dGVuc2libGUgTGlua2luZyBGb3JtYXQKKyAgICAgICAgICAgICAgICNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJFeHRlbnNpYmxlIExpbmtpbmcgRm9ybWF0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBnbF9jdl9oYXZlX3dlYWs9Imd1ZXNzaW5nIHllcyIKK2Vsc2UKKyAgZ2xfY3ZfaGF2ZV93ZWFrPSJndWVzc2luZyBubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKKworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjcHJhZ21hIHdlYWsgZnB1dHMKK2ludCBtYWluICgpCit7CisgIHJldHVybiAoZnB1dHMgPT0gTlVMTCk7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9jdl9oYXZlX3dlYWs9eWVzCitlbHNlCisgIGdsX2N2X2hhdmVfd2Vhaz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9oYXZlX3dlYWsiID4mNQorJGFzX2VjaG8gIiRnbF9jdl9oYXZlX3dlYWsiID4mNjsgfQorICAgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSB5ZXMgfHwgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHBvc2l4OyB0aGVuCisgICAgICAjIE9uIE9TRi8xLCB0aGUgY29tcGlsZXIgbmVlZHMgdGhlIGZsYWcgLXB0aHJlYWQgb3IgLURfUkVFTlRSQU5UIHNvIHRoYXQKKyAgICAgICMgaXQgZ3Jva3MgPHB0aHJlYWQuaD4uIEl0J3MgYWRkZWQgYWJvdmUsIGluIGdsX1RIUkVBRExJQl9FQVJMWV9CT0RZLgorICAgICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInB0aHJlYWQuaCIgImFjX2N2X2hlYWRlcl9wdGhyZWFkX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3B0aHJlYWRfaCIgPSB4eWVzOyB0aGVuIDoKKyAgZ2xfaGF2ZV9wdGhyZWFkX2g9eWVzCitlbHNlCisgIGdsX2hhdmVfcHRocmVhZF9oPW5vCitmaQorCisKKyAgICAgIGlmIHRlc3QgIiRnbF9oYXZlX3B0aHJlYWRfaCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIyBPdGhlciBwb3NzaWJsZSB0ZXN0czoKKyAgICAgICAgIyAgIC1scHRocmVhZHMgKEZTVSB0aHJlYWRzLCBQQ3RocmVhZHMpCisgICAgICAgICMgICAtbGd0aHJlYWRzCisgICAgICAgIGdsX2hhdmVfcHRocmVhZD0KKyAgICAgICAgIyBUZXN0IHdoZXRoZXIgYm90aCBwdGhyZWFkX211dGV4X2xvY2sgYW5kIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgZXhpc3QKKyAgICAgICAgIyBpbiBsaWJjLiBJUklYIDYuNSBoYXMgdGhlIGZpcnN0IG9uZSBpbiBib3RoIGxpYmMgYW5kIGxpYnB0aHJlYWQsIGJ1dAorICAgICAgICAjIHRoZSBzZWNvbmQgb25lIG9ubHkgaW4gbGlicHRocmVhZCwgYW5kIGxvY2suYyBuZWVkcyBpdC4KKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KK2ludAorbWFpbiAoKQoreworcHRocmVhZF9tdXRleF9sb2NrKChwdGhyZWFkX211dGV4X3QqKTApOworICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgocHRocmVhZF9tdXRleGF0dHJfdCopMCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ2xfaGF2ZV9wdGhyZWFkPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICMgVGVzdCBmb3IgbGlicHRocmVhZCBieSBsb29raW5nIGZvciBwdGhyZWFkX2tpbGwuIChOb3QgcHRocmVhZF9zZWxmLAorICAgICAgICAjIHNpbmNlIGl0IGlzIGRlZmluZWQgYXMgYSBtYWNybyBvbiBPU0YvMS4pCisgICAgICAgIGlmIHRlc3QgLW4gIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCisgICAgICAgICAgIyBUaGUgcHJvZ3JhbSBsaW5rcyBmaW5lIHdpdGhvdXQgbGlicHRocmVhZC4gQnV0IGl0IG1heSBhY3R1YWxseQorICAgICAgICAgICMgbmVlZCB0byBsaW5rIHdpdGggbGlicHRocmVhZCBpbiBvcmRlciB0byBjcmVhdGUgbXVsdGlwbGUgdGhyZWFkcy4KKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwdGhyZWFkX2tpbGwgaW4gLWxwdGhyZWFkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwdGhyZWFkX2tpbGwgaW4gLWxwdGhyZWFkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfa2lsbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1scHRocmVhZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcHRocmVhZF9raWxsICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcHRocmVhZF9raWxsICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfa2lsbD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfa2lsbCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfa2lsbCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfa2lsbCIgPSB4eWVzOyB0aGVuIDoKKyAgTElCTVVMVElUSFJFQUQ9LWxwdGhyZWFkIExUTElCTVVMVElUSFJFQUQ9LWxwdGhyZWFkCisgICAgICAgICAgICAgIyBPbiBTb2xhcmlzIGFuZCBIUC1VWCwgbW9zdCBwdGhyZWFkIGZ1bmN0aW9ucyBleGlzdCBhbHNvIGluIGxpYmMuCisgICAgICAgICAgICAgIyBUaGVyZWZvcmUgcHRocmVhZF9pbl91c2UoKSBuZWVkcyB0byBhY3R1YWxseSB0cnkgdG8gY3JlYXRlIGEKKyAgICAgICAgICAgICAjIHRocmVhZDogcHRocmVhZF9jcmVhdGUgZnJvbSBsaWJjIHdpbGwgZmFpbCwgd2hlcmVhcworICAgICAgICAgICAgICMgcHRocmVhZF9jcmVhdGUgd2lsbCBhY3R1YWxseSBjcmVhdGUgYSB0aHJlYWQuCisgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICAgICBzb2xhcmlzKiB8IGhwdXgqKQorCiskYXNfZWNobyAiI2RlZmluZSBQVEhSRUFEX0lOX1VTRV9ERVRFQ1RJT05fSEFSRCAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgICAgIGVzYWMKKworZmkKKworICAgICAgICBlbHNlCisgICAgICAgICAgIyBTb21lIGxpYnJhcnkgaXMgbmVlZGVkLiBUcnkgbGlicHRocmVhZCBhbmQgbGliY19yLgorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB0aHJlYWRfa2lsbCBpbiAtbHB0aHJlYWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfa2lsbCBpbiAtbHB0aHJlYWQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxwdGhyZWFkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwdGhyZWFkX2tpbGwgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwdGhyZWFkX2tpbGwgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsPXllcworZWxzZQorICBhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2tpbGw9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsIiA9IHh5ZXM7IHRoZW4gOgorICBnbF9oYXZlX3B0aHJlYWQ9eWVzCisgICAgICAgICAgICAgTElCVEhSRUFEPS1scHRocmVhZCBMVExJQlRIUkVBRD0tbHB0aHJlYWQKKyAgICAgICAgICAgICBMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWQgTFRMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWQKK2ZpCisKKyAgICAgICAgICBpZiB0ZXN0IC16ICIkZ2xfaGF2ZV9wdGhyZWFkIjsgdGhlbgorICAgICAgICAgICAgIyBGb3IgRnJlZUJTRCA0LgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHRocmVhZF9raWxsIGluIC1sY19yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwdGhyZWFkX2tpbGwgaW4gLWxjX3IuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2Nfcl9wdGhyZWFkX2tpbGwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGNfciAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcHRocmVhZF9raWxsICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcHRocmVhZF9raWxsICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9jX3JfcHRocmVhZF9raWxsPXllcworZWxzZQorICBhY19jdl9saWJfY19yX3B0aHJlYWRfa2lsbD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfY19yX3B0aHJlYWRfa2lsbCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9jX3JfcHRocmVhZF9raWxsIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2Nfcl9wdGhyZWFkX2tpbGwiID0geHllczsgdGhlbiA6CisgIGdsX2hhdmVfcHRocmVhZD15ZXMKKyAgICAgICAgICAgICAgIExJQlRIUkVBRD0tbGNfciBMVExJQlRIUkVBRD0tbGNfcgorICAgICAgICAgICAgICAgTElCTVVMVElUSFJFQUQ9LWxjX3IgTFRMSUJNVUxUSVRIUkVBRD0tbGNfcgorZmkKKworICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIGlmIHRlc3QgLW4gIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCisgICAgICAgICAgZ2xfdGhyZWFkc19hcGk9cG9zaXgKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1BPU0lYX1RIUkVBRFMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICBpZiB0ZXN0IC1uICIkTElCTVVMVElUSFJFQUQiIHx8IHRlc3QgLW4gIiRMVExJQk1VTFRJVEhSRUFEIjsgdGhlbgorICAgICAgICAgICAgaWYgY2FzZSAiJGdsX2N2X2hhdmVfd2VhayIgaW4gKnllcykgdHJ1ZTs7ICopIGZhbHNlOzsgZXNhYzsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfUE9TSVhfVEhSRUFEU19XRUFLIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgICAgIExJQlRIUkVBRD0KKyAgICAgICAgICAgICAgTFRMSUJUSFJFQUQ9CisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAteiAiJGdsX2hhdmVfcHRocmVhZCI7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSB5ZXMgfHwgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHNvbGFyaXM7IHRoZW4KKyAgICAgICAgZ2xfaGF2ZV9zb2xhcmlzdGhyZWFkPQorICAgICAgICBnbF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICBMSUJTPSIkTElCUyAtbHRocmVhZCIKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8dGhyZWFkLmg+CisjaW5jbHVkZSA8c3luY2guaD4KKworaW50CittYWluICgpCit7Cit0aHJfc2VsZigpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2hhdmVfc29sYXJpc3RocmVhZD15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBMSUJTPSIkZ2xfc2F2ZV9MSUJTIgorICAgICAgICBpZiB0ZXN0IC1uICIkZ2xfaGF2ZV9zb2xhcmlzdGhyZWFkIjsgdGhlbgorICAgICAgICAgIGdsX3RocmVhZHNfYXBpPXNvbGFyaXMKKyAgICAgICAgICBMSUJUSFJFQUQ9LWx0aHJlYWQKKyAgICAgICAgICBMVExJQlRIUkVBRD0tbHRocmVhZAorICAgICAgICAgIExJQk1VTFRJVEhSRUFEPSIkTElCVEhSRUFEIgorICAgICAgICAgIExUTElCTVVMVElUSFJFQUQ9IiRMVExJQlRIUkVBRCIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1NPTEFSSVNfVEhSRUFEUyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgIGlmIGNhc2UgIiRnbF9jdl9oYXZlX3dlYWsiIGluICp5ZXMpIHRydWU7OyAqKSBmYWxzZTs7IGVzYWM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1NPTEFSSVNfVEhSRUFEU19XRUFLIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgICBMSUJUSFJFQUQ9CisgICAgICAgICAgICBMVExJQlRIUkVBRD0KKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICAgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSBwdGg7IHRoZW4KKyAgICAgIGdsX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGxpbmsgd2l0aCBsaWJwdGgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGxpbmsgd2l0aCBsaWJwdGguLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGlicHRoX2xpYnMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisKKworCisKKworCisKKyAgICB1c2VfYWRkaXRpb25hbD15ZXMKKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorCisgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnB0aC1wcmVmaXggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xpYnB0aF9wcmVmaXgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2xpYnB0aF9wcmVmaXg7CisgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCisgICAgICB1c2VfYWRkaXRpb25hbD1ubworICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWCI7IHRoZW4KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorCisgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgZWxzZQorICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCisgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0iCisgICAgICAgIGlmIHRlc3QgIiRhY2xfbGliZGlyc3RlbTIiICE9ICIkYWNsX2xpYmRpcnN0ZW0iIFwKKyAgICAgICAgICAgJiYgISB0ZXN0IC1kICIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbTIiCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisKK2ZpCisKKyAgICAgIExJQlBUSD0KKyAgTFRMSUJQVEg9CisgIElOQ1BUSD0KKyAgTElCUFRIX1BSRUZJWD0KKyAgICAgIEhBVkVfTElCUFRIPQorICBycGF0aGRpcnM9CisgIGx0cnBhdGhkaXJzPQorICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9CisgIG5hbWVzX25leHRfcm91bmQ9J3B0aCAnCisgIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KKyAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCIKKyAgICBuYW1lc19uZXh0X3JvdW5kPQorICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbworICAgICAgYWxyZWFkeV9oYW5kbGVkPQorICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsgZG8KKyAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgorICAgICAgICAgIGFscmVhZHlfaGFuZGxlZD15ZXMKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4KKyAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLystfEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fX3wnYAorICAgICAgICBldmFsIHZhbHVlPVwiXCRIQVZFX0xJQiR1cHBlcm5hbWVcIgorICAgICAgICBpZiB0ZXN0IC1uICIkdmFsdWUiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAiJHZhbHVlIiA9IHllczsgdGhlbgorICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTElCJHVwcGVybmFtZVwiCisgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExJQlBUSD0iJHtMSUJQVEh9JHtMSUJQVEg6KyB9JHZhbHVlIgorICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTFRMSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTFRMSUJQVEg9IiR7TFRMSUJQVEh9JHtMVExJQlBUSDorIH0kdmFsdWUiCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0KKyAgICAgICAgICBmb3VuZF9sYT0KKyAgICAgICAgICBmb3VuZF9zbz0KKyAgICAgICAgICBmb3VuZF9hPQorICAgICAgICAgIGV2YWwgbGlibmFtZT1cIiRhY2xfbGlibmFtZV9zcGVjXCIgICAgIyB0eXBpY2FsbHk6IGxpYm5hbWU9bGliJG5hbWUKKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgc2hyZXh0PSIuJGFjbF9zaGxpYmV4dCIgICAgICAgICAgICAgIyB0eXBpY2FsbHk6IHNocmV4dD0uc28KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzaHJleHQ9CisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorICAgICAgICAgICAgZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisgICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQlBUSDsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICBjYXNlICIkeCIgaW4KKyAgICAgICAgICAgICAgICAtTCopCisgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBMVExJQlBUSD0iJHtMVExJQlBUSH0ke0xUTElCUFRIOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9zbyIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gXAorICAgICAgICAgICAgICAgICB8fCB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICAgICAgIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0yIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJQVEg9IiR7TElCUFRIfSR7TElCUFRIOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlBUSD0iJHtMSUJQVEh9JHtMSUJQVEg6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJQVEg9IiR7TElCUFRIfSR7TElCUFRIOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQlBUSDsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIExJQlBUSD0iJHtMSUJQVEh9JHtMSUJQVEg6KyB9LUwkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCUFRIPSIke0xJQlBUSH0ke0xJQlBUSDorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCUFRIPSIke0xJQlBUSH0ke0xJQlBUSDorIH0tbCRuYW1lIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2EiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJQVEg9IiR7TElCUFRIfSR7TElCUFRIOisgfSRmb3VuZF9hIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJQVEg9IiR7TElCUFRIfSR7TElCUFRIOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0KKyAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9kaXIiIGluCisgICAgICAgICAgICAgICovJGFjbF9saWJkaXJzdGVtIHwgKi8kYWNsX2xpYmRpcnN0ZW0vKQorICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAicywvJGFjbF9saWJkaXJzdGVtLyInKiQsLCdgCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJG5hbWUiID0gJ3B0aCc7IHRoZW4KKyAgICAgICAgICAgICAgICAgIExJQlBUSF9QUkVGSVg9IiRiYXNlZGlyIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRlIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICovJGFjbF9saWJkaXJzdGVtMiB8ICovJGFjbF9saWJkaXJzdGVtMi8pCisgICAgICAgICAgICAgICAgYmFzZWRpcj1gZWNobyAiWCRmb3VuZF9kaXIiIHwgc2VkIC1lICdzLF5YLCwnIC1lICJzLC8kYWNsX2xpYmRpcnN0ZW0yLyInKiQsLCdgCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJG5hbWUiID0gJ3B0aCc7IHRoZW4KKyAgICAgICAgICAgICAgICAgIExJQlBUSF9QUkVGSVg9IiRiYXNlZGlyIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRlIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7CisgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJENQUEZMQUdTICRJTkNQVEg7IGRvCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgZXZhbCB4PVwiJHhcIgorICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5DUFRIPSIke0lOQ1BUSH0ke0lOQ1BUSDorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZvdW5kX2xhIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2xhIiBpbgorICAgICAgICAgICAgICAgICovKiB8ICpcXCopIC4gIiRmb3VuZF9sYSIgOzsKKyAgICAgICAgICAgICAgICAqKSAuICIuLyRmb3VuZF9sYSIgOzsKKyAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICBsaWJkaXI9IiRzYXZlX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgICAgICAgICAgICAgICAgY2FzZSAiJGRlcCIgaW4KKyAgICAgICAgICAgICAgICAgIC1MKikKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1MLy8nYAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbTIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsLyRhY2xfbGliZGlyc3RlbSIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsLyRhY2xfbGliZGlyc3RlbTIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OworICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJQVEg7IGRvCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgZXZhbCB4PVwiJHhcIgorICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlBUSD0iJHtMSUJQVEh9JHtMSUJQVEg6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCUFRIOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVExJQlBUSD0iJHtMVExJQlBUSH0ke0xUTElCUFRIOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgLVIqKQorICAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1SLy8nYAorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAtbCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtbC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICoubGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzLF5YLiovLCwnIC1lICdzLF5saWIsLCcgLWUgJ3MsXC5sYSQsLCdgCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlBUSD0iJHtMSUJQVEh9JHtMSUJQVEg6KyB9JGRlcCIKKyAgICAgICAgICAgICAgICAgICAgTFRMSUJQVEg9IiR7TFRMSUJQVEh9JHtMVExJQlBUSDorIH0kZGVwIgorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJQVEg9IiR7TElCUFRIfSR7TElCUFRIOisgfS1sJG5hbWUiCisgICAgICAgICAgICBMVExJQlBUSD0iJHtMVExJQlBUSH0ke0xUTElCUFRIOisgfS1sJG5hbWUiCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCisgIGlmIHRlc3QgIlgkcnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBhbGxkaXJzPQorICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKyAgICAgIGRvbmUKKyAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCisgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgTElCUFRIPSIke0xJQlBUSH0ke0xJQlBUSDorIH0kZmxhZyIKKyAgICBlbHNlCisgICAgICAgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgbGliZGlyPSIkZm91bmRfZGlyIgorICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisgICAgICAgIExJQlBUSD0iJHtMSUJQVEh9JHtMSUJQVEg6KyB9JGZsYWciCisgICAgICBkb25lCisgICAgZmkKKyAgZmkKKyAgaWYgdGVzdCAiWCRsdHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICBmb3IgZm91bmRfZGlyIGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgIExUTElCUFRIPSIke0xUTElCUFRIfSR7TFRMSUJQVEg6KyB9LVIkZm91bmRfZGlyIgorICAgIGRvbmUKKyAgZmkKKworCisKKworCisKKyAgICBhY19jdl9saWJwdGhfbGlicz0iJExJQlBUSCIKKyAgICBhY19jdl9saWJwdGhfbHRsaWJzPSIkTFRMSUJQVEgiCisgICAgYWNfY3ZfbGlicHRoX2NwcGZsYWdzPSIkSU5DUFRIIgorICAgIGFjX2N2X2xpYnB0aF9wcmVmaXg9IiRMSUJQVEhfUFJFRklYIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJwdGhfbGlicyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYnB0aF9saWJzIiA+JjY7IH0KKyAgTElCUFRIPSIkYWNfY3ZfbGlicHRoX2xpYnMiCisgIExUTElCUFRIPSIkYWNfY3ZfbGlicHRoX2x0bGlicyIKKyAgSU5DUFRIPSIkYWNfY3ZfbGlicHRoX2NwcGZsYWdzIgorICBMSUJQVEhfUFJFRklYPSIkYWNfY3ZfbGlicHRoX3ByZWZpeCIKKworICBmb3IgZWxlbWVudCBpbiAkSU5DUFRIOyBkbworICAgIGhhdmVpdD0KKyAgICBmb3IgeCBpbiAkQ1BQRkxBR1M7IGRvCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgZXZhbCB4PVwiJHhcIgorICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRlbGVtZW50IjsgdGhlbgorICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9JHtDUFBGTEFHUzorIH0kZWxlbWVudCIKKyAgICBmaQorICBkb25lCisKKworCisKKyAgICAgIEhBVkVfTElCUFRIPXllcworCisKKworICAgICAgZ2xfaGF2ZV9wdGg9CisgICAgICBnbF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgTElCUz0iJExJQlMgJExJQlBUSCIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxwdGguaD4KK2ludAorbWFpbiAoKQoreworcHRoX3NlbGYoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBnbF9oYXZlX3B0aD15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgTElCUz0iJGdsX3NhdmVfTElCUyIKKyAgICAgIGlmIHRlc3QgLW4gIiRnbF9oYXZlX3B0aCI7IHRoZW4KKyAgICAgICAgZ2xfdGhyZWFkc19hcGk9cHRoCisgICAgICAgIExJQlRIUkVBRD0iJExJQlBUSCIKKyAgICAgICAgTFRMSUJUSFJFQUQ9IiRMVExJQlBUSCIKKyAgICAgICAgTElCTVVMVElUSFJFQUQ9IiRMSUJUSFJFQUQiCisgICAgICAgIExUTElCTVVMVElUSFJFQUQ9IiRMVExJQlRIUkVBRCIKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1BUSF9USFJFQURTIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgIGlmIHRlc3QgLW4gIiRMSUJNVUxUSVRIUkVBRCIgfHwgdGVzdCAtbiAiJExUTElCTVVMVElUSFJFQUQiOyB0aGVuCisgICAgICAgICAgaWYgY2FzZSAiJGdsX2N2X2hhdmVfd2VhayIgaW4gKnllcykgdHJ1ZTs7ICopIGZhbHNlOzsgZXNhYzsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfUFRIX1RIUkVBRFNfV0VBSyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgICAgTElCVEhSRUFEPQorICAgICAgICAgICAgTFRMSUJUSFJFQUQ9CisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgQ1BQRkxBR1M9IiRnbF9zYXZlX0NQUEZMQUdTIgorICAgICAgZmkKKyAgICBmaQorICAgIGlmIHRlc3QgLXogIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCisgICAgICBjYXNlICIkZ2xfdXNlX3RocmVhZHMiIGluCisgICAgICAgIHllcyB8IHdpbmRvd3MgfCB3aW4zMikgIyBUaGUgJ3dpbjMyJyBpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgICBpZiB7IGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICBtaW5ndyopIHRydWU7OworICAgICAgICAgICAgICAgICAqKSBmYWxzZTs7CisgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgfTsgdGhlbgorICAgICAgICAgICAgZ2xfdGhyZWFkc19hcGk9d2luZG93cworCiskYXNfZWNobyAiI2RlZmluZSBVU0VfV0lORE9XU19USFJFQURTIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG11bHRpdGhyZWFkIEFQSSB0byB1c2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG11bHRpdGhyZWFkIEFQSSB0byB1c2UuLi4gIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF90aHJlYWRzX2FwaSIgPiY1CiskYXNfZWNobyAiJGdsX3RocmVhZHNfYXBpIiA+JjY7IH0KKworCisKKworCisKKworCisKKworCisgIGlmIHRlc3QgIiRnbF90aHJlYWRzX2FwaSIgPSBwb3NpeDsgdGhlbgorICAgICMgT1NGLzEgNC4wIGFuZCBNYWMgT1MgWCAxMC4xIGxhY2sgdGhlIHB0aHJlYWRfcndsb2NrX3QgdHlwZSBhbmQgdGhlCisgICAgIyBwdGhyZWFkX3J3bG9ja18qIGZ1bmN0aW9ucy4KKyAgICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJwdGhyZWFkX3J3bG9ja190IiAiYWNfY3ZfdHlwZV9wdGhyZWFkX3J3bG9ja190IiAiI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9wdGhyZWFkX3J3bG9ja190IiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BUSFJFQURfUldMT0NLIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisgICAgIyBnbGliYyBkZWZpbmVzIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFIGFzIGVudW0sIG5vdCBhcyBhIG1hY3JvLgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgI2luY2x1ZGUgPHB0aHJlYWQuaD4KK2ludAorbWFpbiAoKQoreworCisjaWYgX19GcmVlQlNEX18gPT0gNAorZXJyb3IgIk5vLCBpbiBGcmVlQlNEIDQuMCByZWN1cnNpdmUgbXV0ZXhlcyBhY3R1YWxseSBkb24ndCB3b3JrLiIKKyNlbGlmIChkZWZpbmVkIF9fRU5WSVJPTk1FTlRfTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRURfXyBcCisgICAgICAgJiYgX19FTlZJUk9OTUVOVF9NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRF9fIDwgMTA3MCkKK2Vycm9yICJObywgaW4gTWFjIE9TIFggPCAxMC43IHJlY3Vyc2l2ZSBtdXRleGVzIGFjdHVhbGx5IGRvbid0IHdvcmsuIgorI2Vsc2UKK2ludCB4ID0gKGludClQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRTsKK3JldHVybiAheDsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSAxIiA+PmNvbmZkZWZzLmgKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICA6CisKKworCisKKworCisKKworCisKKworCisgICAgdXNlX2FkZGl0aW9uYWw9eWVzCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKworICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKworICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJpY29udi1wcmVmaXggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xpYmljb252X3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbGliaWNvbnZfcHJlZml4OworICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKworICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKworICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgIGVsc2UKKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIgorICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYmRpcnN0ZW0yIiAhPSAiJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICYmICEgdGVzdCAtZCAiJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0yIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorCitmaQorCisgICAgICBMSUJJQ09OVj0KKyAgTFRMSUJJQ09OVj0KKyAgSU5DSUNPTlY9CisgIExJQklDT05WX1BSRUZJWD0KKyAgICAgIEhBVkVfTElCSUNPTlY9CisgIHJwYXRoZGlycz0KKyAgbHRycGF0aGRpcnM9CisgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0KKyAgbmFtZXNfbmV4dF9yb3VuZD0naWNvbnYgJworICB3aGlsZSB0ZXN0IC1uICIkbmFtZXNfbmV4dF9yb3VuZCI7IGRvCisgICAgbmFtZXNfdGhpc19yb3VuZD0iJG5hbWVzX25leHRfcm91bmQiCisgICAgbmFtZXNfbmV4dF9yb3VuZD0KKyAgICBmb3IgbmFtZSBpbiAkbmFtZXNfdGhpc19yb3VuZDsgZG8KKyAgICAgIGFscmVhZHlfaGFuZGxlZD0KKyAgICAgIGZvciBuIGluICRuYW1lc19hbHJlYWR5X2hhbmRsZWQ7IGRvCisgICAgICAgIGlmIHRlc3QgIiRuIiA9ICIkbmFtZSI7IHRoZW4KKyAgICAgICAgICBhbHJlYWR5X2hhbmRsZWQ9eWVzCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICAgIGlmIHRlc3QgLXogIiRhbHJlYWR5X2hhbmRsZWQiOyB0aGVuCisgICAgICAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0iJG5hbWVzX2FscmVhZHlfaGFuZGxlZCAkbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVybmFtZT1gZWNobyAiJG5hbWUiIHwgc2VkIC1lICd5fGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8rLXxBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX198J2AKKyAgICAgICAgZXZhbCB2YWx1ZT1cIlwkSEFWRV9MSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgaWYgdGVzdCAtbiAiJHZhbHVlIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExJQiR1cHBlcm5hbWVcIgorICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSR2YWx1ZSIKKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCisgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExUTElCSUNPTlY9IiR7TFRMSUJJQ09OVn0ke0xUTElCSUNPTlY6KyB9JHZhbHVlIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9CisgICAgICAgICAgZm91bmRfbGE9CisgICAgICAgICAgZm91bmRfc289CisgICAgICAgICAgZm91bmRfYT0KKyAgICAgICAgICBldmFsIGxpYm5hbWU9XCIkYWNsX2xpYm5hbWVfc3BlY1wiICAgICMgdHlwaWNhbGx5OiBsaWJuYW1lPWxpYiRuYW1lCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgIHNocmV4dD0iLiRhY2xfc2hsaWJleHQiICAgICAgICAgICAgICMgdHlwaWNhbGx5OiBzaHJleHQ9LnNvCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc2hyZXh0PQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgIGRpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgorICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgorICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJJQ09OVjsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICBjYXNlICIkeCIgaW4KKyAgICAgICAgICAgICAgICAtTCopCisgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBMVExJQklDT05WPSIke0xUTElCSUNPTlZ9JHtMVExJQklDT05WOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9zbyIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gXAorICAgICAgICAgICAgICAgICB8fCB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICAgICAgIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0yIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQklDT05WOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkZm91bmRfZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tTCRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfS1sJG5hbWUiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfYSIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9JGZvdW5kX2EiCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPQorICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2RpciIgaW4KKyAgICAgICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0gfCAqLyRhY2xfbGliZGlyc3RlbS8pCisgICAgICAgICAgICAgICAgYmFzZWRpcj1gZWNobyAiWCRmb3VuZF9kaXIiIHwgc2VkIC1lICdzLF5YLCwnIC1lICJzLC8kYWNsX2xpYmRpcnN0ZW0vIicqJCwsJ2AKKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgPSAnaWNvbnYnOyB0aGVuCisgICAgICAgICAgICAgICAgICBMSUJJQ09OVl9QUkVGSVg9IiRiYXNlZGlyIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRlIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICovJGFjbF9saWJkaXJzdGVtMiB8ICovJGFjbF9saWJkaXJzdGVtMi8pCisgICAgICAgICAgICAgICAgYmFzZWRpcj1gZWNobyAiWCRmb3VuZF9kaXIiIHwgc2VkIC1lICdzLF5YLCwnIC1lICJzLC8kYWNsX2xpYmRpcnN0ZW0yLyInKiQsLCdgCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJG5hbWUiID0gJ2ljb252JzsgdGhlbgorICAgICAgICAgICAgICAgICAgTElCSUNPTlZfUFJFRklYPSIkYmFzZWRpciIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJGJhc2VkaXIvaW5jbHVkZSIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OworICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGZvciB4IGluICRDUFBGTEFHUyAkSU5DSUNPTlY7IGRvCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgZXZhbCB4PVwiJHhcIgorICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5DSUNPTlY9IiR7SU5DSUNPTlZ9JHtJTkNJQ09OVjorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZvdW5kX2xhIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2xhIiBpbgorICAgICAgICAgICAgICAgICovKiB8ICpcXCopIC4gIiRmb3VuZF9sYSIgOzsKKyAgICAgICAgICAgICAgICAqKSAuICIuLyRmb3VuZF9sYSIgOzsKKyAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICBsaWJkaXI9IiRzYXZlX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgICAgICAgICAgICAgICAgY2FzZSAiJGRlcCIgaW4KKyAgICAgICAgICAgICAgICAgIC1MKikKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1MLy8nYAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbTIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsLyRhY2xfbGliZGlyc3RlbSIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsLyRhY2xfbGliZGlyc3RlbTIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OworICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJJQ09OVjsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJJQ09OVjsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJJQ09OVj0iJHtMVExJQklDT05WfSR7TFRMSUJJQ09OVjorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgIC1SKikKKyAgICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtUi8vJ2AKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgLWwqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLWwvLydgCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAqLmxhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncyxeWC4qLywsJyAtZSAncyxebGliLCwnIC1lICdzLFwubGEkLCwnYAorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRkZXAiCisgICAgICAgICAgICAgICAgICAgIExUTElCSUNPTlY9IiR7TFRMSUJJQ09OVn0ke0xUTElCSUNPTlY6KyB9JGRlcCIKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tbCRuYW1lIgorICAgICAgICAgICAgTFRMSUJJQ09OVj0iJHtMVExJQklDT05WfSR7TFRMSUJJQ09OVjorIH0tbCRuYW1lIgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgYWxsZGlycz0KKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRmb3VuZF9kaXIiCisgICAgICBkb25lCisgICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICBsaWJkaXI9IiRhbGxkaXJzIgorICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKyAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9JGZsYWciCisgICAgZWxzZQorICAgICAgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKKyAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmbGFnIgorICAgICAgZG9uZQorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkbHRycGF0aGRpcnM7IGRvCisgICAgICBMVExJQklDT05WPSIke0xUTElCSUNPTlZ9JHtMVExJQklDT05WOisgfS1SJGZvdW5kX2RpciIKKyAgICBkb25lCisgIGZpCisKKworCisKKworCisKKworCisKKworCisgICAgICAgICAgYW1fc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCisgIGZvciBlbGVtZW50IGluICRJTkNJQ09OVjsgZG8KKyAgICBoYXZlaXQ9CisgICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZWxlbWVudCI7IHRoZW4KKyAgICAgICAgaGF2ZWl0PXllcworICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSR7Q1BQRkxBR1M6KyB9JGVsZW1lbnQiCisgICAgZmkKKyAgZG9uZQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaWNvbnYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGljb252Li4uICIgPiY2OyB9CitpZiAke2FtX2N2X2Z1bmNfaWNvbnYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgYW1fY3ZfZnVuY19pY29udj0ibm8sIGNvbnNpZGVyIGluc3RhbGxpbmcgR05VIGxpYmljb252IgorICAgIGFtX2N2X2xpYl9pY29udj1ubworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGljb252Lmg+CisKK2ludAorbWFpbiAoKQoreworaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOworICAgICAgICAgICBpY29udihjZCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgaWNvbnZfY2xvc2UoY2QpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFtX2N2X2Z1bmNfaWNvbnY9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgIT0geWVzOyB0aGVuCisgICAgICBhbV9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8aWNvbnYuaD4KKworaW50CittYWluICgpCit7CitpY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7CisgICAgICAgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgICAgICAgaWNvbnZfY2xvc2UoY2QpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFtX2N2X2xpYl9pY29udj15ZXMKKyAgICAgICAgYW1fY3ZfZnVuY19pY29udj15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgTElCUz0iJGFtX3NhdmVfTElCUyIKKyAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9mdW5jX2ljb252IiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfZnVuY19pY29udiIgPiY2OyB9CisgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgaWNvbnYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgaWNvbnYuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfZnVuY19pY29udl93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgICAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiCisgICAgICBpZiB0ZXN0ICRhbV9jdl9saWJfaWNvbnYgPSB5ZXM7IHRoZW4KKyAgICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIGFpeCogfCBocHV4KikgYW1fY3ZfZnVuY19pY29udl93b3Jrcz0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICAgICopICAgICAgICAgICAgYW1fY3ZfZnVuY19pY29udl93b3Jrcz0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGljb252Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CitpbnQgbWFpbiAoKQoreworICBpbnQgcmVzdWx0ID0gMDsKKyAgLyogVGVzdCBhZ2FpbnN0IEFJWCA1LjEgYnVnOiBGYWlsdXJlcyBhcmUgbm90IGRpc3Rpbmd1aXNoYWJsZSBmcm9tIHN1Y2Nlc3NmdWwKKyAgICAgcmV0dXJucy4gICovCisgIHsKKyAgICBpY29udl90IGNkX3V0ZjhfdG9fODg1OTEgPSBpY29udl9vcGVuICgiSVNPODg1OS0xIiwgIlVURi04Iik7CisgICAgaWYgKGNkX3V0ZjhfdG9fODg1OTEgIT0gKGljb252X3QpKC0xKSkKKyAgICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaW5wdXRbXSA9ICJcMzQyXDIwMlwyNTQiOyAvKiBFVVJPIFNJR04gKi8KKyAgICAgICAgY2hhciBidWZbMTBdOworICAgICAgICBjb25zdCBjaGFyICppbnB0ciA9IGlucHV0OworICAgICAgICBzaXplX3QgaW5ieXRlc2xlZnQgPSBzdHJsZW4gKGlucHV0KTsKKyAgICAgICAgY2hhciAqb3V0cHRyID0gYnVmOworICAgICAgICBzaXplX3Qgb3V0Ynl0ZXNsZWZ0ID0gc2l6ZW9mIChidWYpOworICAgICAgICBzaXplX3QgcmVzID0gaWNvbnYgKGNkX3V0ZjhfdG9fODg1OTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZpbnB0ciwgJmluYnl0ZXNsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdHIsICZvdXRieXRlc2xlZnQpOworICAgICAgICBpZiAocmVzID09IDApCisgICAgICAgICAgcmVzdWx0IHw9IDE7CisgICAgICAgIGljb252X2Nsb3NlIChjZF91dGY4X3RvXzg4NTkxKTsKKyAgICAgIH0KKyAgfQorICAvKiBUZXN0IGFnYWluc3QgU29sYXJpcyAxMCBidWc6IEZhaWx1cmVzIGFyZSBub3QgZGlzdGluZ3Vpc2hhYmxlIGZyb20KKyAgICAgc3VjY2Vzc2Z1bCByZXR1cm5zLiAgKi8KKyAgeworICAgIGljb252X3QgY2RfYXNjaWlfdG9fODg1OTEgPSBpY29udl9vcGVuICgiSVNPODg1OS0xIiwgIjY0NiIpOworICAgIGlmIChjZF9hc2NpaV90b184ODU5MSAhPSAoaWNvbnZfdCkoLTEpKQorICAgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwyNjMiOworICAgICAgICBjaGFyIGJ1ZlsxMF07CisgICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7CisgICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IHN0cmxlbiAoaW5wdXQpOworICAgICAgICBjaGFyICpvdXRwdHIgPSBidWY7CisgICAgICAgIHNpemVfdCBvdXRieXRlc2xlZnQgPSBzaXplb2YgKGJ1Zik7CisgICAgICAgIHNpemVfdCByZXMgPSBpY29udiAoY2RfYXNjaWlfdG9fODg1OTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZpbnB0ciwgJmluYnl0ZXNsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdHIsICZvdXRieXRlc2xlZnQpOworICAgICAgICBpZiAocmVzID09IDApCisgICAgICAgICAgcmVzdWx0IHw9IDI7CisgICAgICAgIGljb252X2Nsb3NlIChjZF9hc2NpaV90b184ODU5MSk7CisgICAgICB9CisgIH0KKyAgLyogVGVzdCBhZ2FpbnN0IEFJWCA2LjEuLjcuMSBidWc6IEJ1ZmZlciBvdmVycnVuLiAgKi8KKyAgeworICAgIGljb252X3QgY2RfODg1OTFfdG9fdXRmOCA9IGljb252X29wZW4gKCJVVEYtOCIsICJJU08tODg1OS0xIik7CisgICAgaWYgKGNkXzg4NTkxX3RvX3V0ZjggIT0gKGljb252X3QpKC0xKSkKKyAgICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaW5wdXRbXSA9ICJcMzA0IjsKKyAgICAgICAgc3RhdGljIGNoYXIgYnVmWzJdID0geyAoY2hhcikweERFLCAoY2hhcikweEFEIH07CisgICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7CisgICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IDE7CisgICAgICAgIGNoYXIgKm91dHB0ciA9IGJ1ZjsKKyAgICAgICAgc2l6ZV90IG91dGJ5dGVzbGVmdCA9IDE7CisgICAgICAgIHNpemVfdCByZXMgPSBpY29udiAoY2RfODg1OTFfdG9fdXRmOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7CisgICAgICAgIGlmIChyZXMgIT0gKHNpemVfdCkoLTEpIHx8IG91dHB0ciAtIGJ1ZiA+IDEgfHwgYnVmWzFdICE9IChjaGFyKTB4QUQpCisgICAgICAgICAgcmVzdWx0IHw9IDQ7CisgICAgICAgIGljb252X2Nsb3NlIChjZF84ODU5MV90b191dGY4KTsKKyAgICAgIH0KKyAgfQorI2lmIDAgLyogVGhpcyBidWcgY291bGQgYmUgd29ya2VkIGFyb3VuZCBieSB0aGUgY2FsbGVyLiAgKi8KKyAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogUG9zaXRpdmUgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YgMC4gICovCisgIHsKKyAgICBpY29udl90IGNkXzg4NTkxX3RvX3V0ZjggPSBpY29udl9vcGVuICgidXRmOCIsICJpc284ODU5MSIpOworICAgIGlmIChjZF84ODU5MV90b191dGY4ICE9IChpY29udl90KSgtMSkpCisgICAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGlucHV0W10gPSAiXDMwNHJnZXIgbWl0IGJcMzY2c2VuIEJcMzc0YmNoZW4gb2huZSBBdWdlbm1hXDMzNyI7CisgICAgICAgIGNoYXIgYnVmWzUwXTsKKyAgICAgICAgY29uc3QgY2hhciAqaW5wdHIgPSBpbnB1dDsKKyAgICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gc3RybGVuIChpbnB1dCk7CisgICAgICAgIGNoYXIgKm91dHB0ciA9IGJ1ZjsKKyAgICAgICAgc2l6ZV90IG91dGJ5dGVzbGVmdCA9IHNpemVvZiAoYnVmKTsKKyAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChjZF84ODU5MV90b191dGY4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmaW5wdHIsICZpbmJ5dGVzbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHRyLCAmb3V0Ynl0ZXNsZWZ0KTsKKyAgICAgICAgaWYgKChpbnQpcmVzID4gMCkKKyAgICAgICAgICByZXN1bHQgfD0gODsKKyAgICAgICAgaWNvbnZfY2xvc2UgKGNkXzg4NTkxX3RvX3V0ZjgpOworICAgICAgfQorICB9CisjZW5kaWYKKyAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzCisgICAgIHByb3ZpZGVkLiAgKi8KKyAgaWYgKC8qIFRyeSBzdGFuZGFyZGl6ZWQgbmFtZXMuICAqLworICAgICAgaWNvbnZfb3BlbiAoIlVURi04IiwgIkVVQy1KUCIpID09IChpY29udl90KSgtMSkKKyAgICAgIC8qIFRyeSBJUklYLCBPU0YvMSBuYW1lcy4gICovCisgICAgICAmJiBpY29udl9vcGVuICgiVVRGLTgiLCAiZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpCisgICAgICAvKiBUcnkgQUlYIG5hbWVzLiAgKi8KKyAgICAgICYmIGljb252X29wZW4gKCJVVEYtOCIsICJJQk0tZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpCisgICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLworICAgICAgJiYgaWNvbnZfb3BlbiAoInV0ZjgiLCAiZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpKQorICAgIHJlc3VsdCB8PSAxNjsKKyAgcmV0dXJuIHJlc3VsdDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9eWVzCitlbHNlCisgIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgICBMSUJTPSIkYW1fc2F2ZV9MSUJTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9mdW5jX2ljb252X3dvcmtzIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfZnVuY19pY29udl93b3JrcyIgPiY2OyB9CisgICAgY2FzZSAiJGFtX2N2X2Z1bmNfaWNvbnZfd29ya3MiIGluCisgICAgICAqbm8pIGFtX2Z1bmNfaWNvbnY9bm8gYW1fY3ZfbGliX2ljb252PW5vIDs7CisgICAgICAqKSAgIGFtX2Z1bmNfaWNvbnY9eWVzIDs7CisgICAgZXNhYworICBlbHNlCisgICAgYW1fZnVuY19pY29udj1ubyBhbV9jdl9saWJfaWNvbnY9bm8KKyAgZmkKKyAgaWYgdGVzdCAiJGFtX2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfSUNPTlYgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKyAgaWYgdGVzdCAiJGFtX2N2X2xpYl9pY29udiIgPSB5ZXM7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBsaW5rIHdpdGggbGliaWNvbnYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGxpbmsgd2l0aCBsaWJpY29udi4uLiAiID4mNjsgfQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTElCSUNPTlYiID4mNQorJGFzX2VjaG8gIiRMSUJJQ09OViIgPiY2OyB9CisgIGVsc2UKKyAgICAgICAgICAgIENQUEZMQUdTPSIkYW1fc2F2ZV9DUFBGTEFHUyIKKyAgICBMSUJJQ09OVj0KKyAgICBMVExJQklDT05WPQorICBmaQorCisKKworICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpY29udiBkZWNsYXJhdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgaWNvbnYgZGVjbGFyYXRpb24uLi4gIiA+JjY7IH0KKyAgICBpZiAke2FtX2N2X3Byb3RvX2ljb252Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8aWNvbnYuaD4KK2V4dGVybgorI2lmZGVmIF9fY3BsdXNwbHVzCisiQyIKKyNlbmRpZgorI2lmIGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpCitzaXplX3QgaWNvbnYgKGljb252X3QgY2QsIGNoYXIgKiAqaW5idWYsIHNpemVfdCAqaW5ieXRlc2xlZnQsIGNoYXIgKiAqb3V0YnVmLCBzaXplX3QgKm91dGJ5dGVzbGVmdCk7CisjZWxzZQorc2l6ZV90IGljb252KCk7CisjZW5kaWYKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhbV9jdl9wcm90b19pY29udl9hcmcxPSIiCitlbHNlCisgIGFtX2N2X3Byb3RvX2ljb252X2FyZzE9ImNvbnN0IgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgYW1fY3ZfcHJvdG9faWNvbnY9ImV4dGVybiBzaXplX3QgaWNvbnYgKGljb252X3QgY2QsICRhbV9jdl9wcm90b19pY29udl9hcmcxIGNoYXIgKiAqaW5idWYsIHNpemVfdCAqaW5ieXRlc2xlZnQsIGNoYXIgKiAqb3V0YnVmLCBzaXplX3QgKm91dGJ5dGVzbGVmdCk7IgorZmkKKworICAgIGFtX2N2X3Byb3RvX2ljb252PWBlY2hvICIkYW1fY3ZfcHJvdG9faWNvbnYiIHwgdHIgLXMgJyAnIHwgc2VkIC1lICdzLyggLygvJ2AKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDoKKyAgICAgICAgICRhbV9jdl9wcm90b19pY29udiIgPiY1CiskYXNfZWNobyAiCisgICAgICAgICAkYW1fY3ZfcHJvdG9faWNvbnYiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIElDT05WX0NPTlNUICRhbV9jdl9wcm90b19pY29udl9hcmcxCitfQUNFT0YKKworCisgIGZpCisKKworCisKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworaW50IGZvbyAoaW50IGEpIHsgYSA9IF9fYnVpbHRpbl9leHBlY3QgKGEsIDEwKTsgcmV0dXJuIGEgPT0gMTAgPyAwIDogMTsgfQoraW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0JVSUxUSU5fRVhQRUNUIDEiID4+Y29uZmRlZnMuaAorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworICBmb3IgYWNfaGVhZGVyIGluIGFyZ3ouaCBpbnR0eXBlcy5oIGxpbWl0cy5oIHVuaXN0ZC5oIHN5cy9wYXJhbS5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgZm9yIGFjX2Z1bmMgaW4gZ2V0Y3dkIGdldGVnaWQgZ2V0ZXVpZCBnZXRnaWQgZ2V0dWlkIG1lbXBjcHkgbXVubWFwIFwKKyAgICBzdHBjcHkgc3RyY2FzZWNtcCBzdHJkdXAgc3RydG91bCB0c2VhcmNoIHVzZWxvY2FsZSBhcmd6X2NvdW50IFwKKyAgICBhcmd6X3N0cmluZ2lmeSBhcmd6X25leHQgX19mc2V0bG9ja2luZworZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworICAgICAgICAgIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImZlb2ZfdW5sb2NrZWQiICJhY19jdl9oYXZlX2RlY2xfZmVvZl91bmxvY2tlZCIgIiNpbmNsdWRlIDxzdGRpby5oPgorIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZmVvZl91bmxvY2tlZCIgPSB4eWVzOyB0aGVuIDoKKyAgYWNfaGF2ZV9kZWNsPTEKK2Vsc2UKKyAgYWNfaGF2ZV9kZWNsPTAKK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX0ZFT0ZfVU5MT0NLRUQgJGFjX2hhdmVfZGVjbAorX0FDRU9GCithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJmZ2V0c191bmxvY2tlZCIgImFjX2N2X2hhdmVfZGVjbF9mZ2V0c191bmxvY2tlZCIgIiNpbmNsdWRlIDxzdGRpby5oPgorIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZmdldHNfdW5sb2NrZWQiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9GR0VUU19VTkxPQ0tFRCAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworCisKKworICAgICAgICAgICAgICAgICAgICAgIGZvciBhY19wcm9nIGluIGJpc29uCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfSU5UTEJJU09OKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJElOVExCSVNPTiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19JTlRMQklTT049IiRJTlRMQklTT04iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19JTlRMQklTT049IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0lOVExCSVNPTj0kYWNfY3ZfcHJvZ19JTlRMQklTT04KK2lmIHRlc3QgLW4gIiRJTlRMQklTT04iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5UTEJJU09OIiA+JjUKKyRhc19lY2hvICIkSU5UTEJJU09OIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJElOVExCSVNPTiIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0IC16ICIkSU5UTEJJU09OIjsgdGhlbgorICAgIGFjX3ZlcmNfZmFpbD15ZXMKKyAgZWxzZQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHZlcnNpb24gb2YgYmlzb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdmVyc2lvbiBvZiBiaXNvbi4uLiAiID4mNjsgfQorICAgIGFjX3Byb2dfdmVyc2lvbj1gJElOVExCSVNPTiAtLXZlcnNpb24gMj4mMSB8IHNlZCAtbiAncy9eLipHTlUgQmlzb24uKiBcKFswLTldKlwuWzAtOS5dKlwpLiokL1wxL3AnYAorICAgIGNhc2UgJGFjX3Byb2dfdmVyc2lvbiBpbgorICAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisgICAgICAxLjJbNi05XSogfCAxLlszLTldWzAtOV0qIHwgWzItOV0uKikKKyAgICAgICAgIGFjX3Byb2dfdmVyc2lvbj0iJGFjX3Byb2dfdmVyc2lvbiwgb2siOyBhY192ZXJjX2ZhaWw9bm87OworICAgICAgKikgYWNfcHJvZ192ZXJzaW9uPSIkYWNfcHJvZ192ZXJzaW9uLCBiYWQiOyBhY192ZXJjX2ZhaWw9eWVzOzsKKyAgICBlc2FjCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wcm9nX3ZlcnNpb24iID4mNQorJGFzX2VjaG8gIiRhY19wcm9nX3ZlcnNpb24iID4mNjsgfQorICBmaQorICBpZiB0ZXN0ICRhY192ZXJjX2ZhaWwgPSB5ZXM7IHRoZW4KKyAgICBJTlRMQklTT049OgorICBmaQorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsb25nIGxvbmcgaW50IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsb25nIGxvbmcgaW50Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3R5cGVfbG9uZ19sb25nX2ludCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludD15ZXMKKyAgICAgIGlmIHRlc3QgIngke2FjX2N2X3Byb2dfY2NfYzk5LW5vfSIgPSB4bm87IHRoZW4KKyAgICAgICAgYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PSRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQKKyAgICAgICAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICA6CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyAgICAgICAgICAgICAgICAgI2lmbmRlZiBMTE9OR19NQVgKKyAgICAgICAgICAgICAgICAgIyBkZWZpbmUgSEFMRiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICgxTEwgPDwgKHNpemVvZiAobG9uZyBsb25nIGludCkgKiBDSEFSX0JJVCAtIDIpKQorICAgICAgICAgICAgICAgICAjIGRlZmluZSBMTE9OR19NQVggKEhBTEYgLSAxICsgSEFMRikKKyAgICAgICAgICAgICAgICAgI2VuZGlmCitpbnQKK21haW4gKCkKK3sKK2xvbmcgbG9uZyBpbnQgbiA9IDE7CisgICAgICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyA7IGkrKykKKyAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgaW50IG0gPSBuIDw8IGk7CisgICAgICAgICAgICAgICAgICAgICBpZiAobSA+PiBpICE9IG4pCisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgICAgICAgaWYgKExMT05HX01BWCAvIDIgPCBtKQorICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgICAgIGZpCisgICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50IiA+JjY7IH0KKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTE9OR19MT05HX0lOVCAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd2NoYXJfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2NoYXJfdC4uLiAiID4mNjsgfQoraWYgJHtndF9jdl9jX3djaGFyX3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisgICAgICAgICAgICB3Y2hhcl90IGZvbyA9ICh3Y2hhcl90KSdcMCc7CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGd0X2N2X2Nfd2NoYXJfdD15ZXMKK2Vsc2UKKyAgZ3RfY3ZfY193Y2hhcl90PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9jX3djaGFyX3QiID4mNQorJGFzX2VjaG8gIiRndF9jdl9jX3djaGFyX3QiID4mNjsgfQorICBpZiB0ZXN0ICRndF9jdl9jX3djaGFyX3QgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9XQ0hBUl9UIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3aW50X3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdpbnRfdC4uLiAiID4mNjsgfQoraWYgJHtndF9jdl9jX3dpbnRfdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlIGluY2x1ZGVkCisgICBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorICAgICAgICAgICAgd2ludF90IGZvbyA9ICh3Y2hhcl90KSdcMCc7CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGd0X2N2X2Nfd2ludF90PXllcworZWxzZQorICBndF9jdl9jX3dpbnRfdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfY193aW50X3QiID4mNQorJGFzX2VjaG8gIiRndF9jdl9jX3dpbnRfdCIgPiY2OyB9CisgIGlmIHRlc3QgJGd0X2N2X2Nfd2ludF90ID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfV0lOVF9UIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW50bWF4X3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGludG1heF90Li4uICIgPiY2OyB9CitpZiAke2d0X2N2X2NfaW50bWF4X3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWAorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWYgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CitpbnRtYXhfdCB4ID0gLTE7CisgICAgICAgICAgICByZXR1cm4gIXg7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ3RfY3ZfY19pbnRtYXhfdD15ZXMKK2Vsc2UKKyAgZ3RfY3ZfY19pbnRtYXhfdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfY19pbnRtYXhfdCIgPiY1CiskYXNfZWNobyAiJGd0X2N2X2NfaW50bWF4X3QiID4mNjsgfQorICBpZiB0ZXN0ICRndF9jdl9jX2ludG1heF90ID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfSU5UTUFYX1QgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHByaW50ZigpIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHByaW50ZigpIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncy4uLiAiID4mNjsgfQoraWYgJHtndF9jdl9mdW5jX3ByaW50Zl9wb3NpeCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmIGRlZmluZWQgX19OZXRCU0RfXyB8fCBkZWZpbmVkIF9fQkVPU19fIHx8IGRlZmluZWQgX01TQ19WRVIgfHwgZGVmaW5lZCBfX01JTkdXMzJfXyB8fCBkZWZpbmVkIF9fQ1lHV0lOX18KKyAgbm90cG9zaXgKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJub3Rwb3NpeCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9Imd1ZXNzaW5nIG5vIgorZWxzZQorICBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD0iZ3Vlc3NpbmcgeWVzIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKy8qIFRoZSBzdHJpbmcgIiUyJGQgJTEkZCIsIHdpdGggZG9sbGFyIGNoYXJhY3RlcnMgcHJvdGVjdGVkIGZyb20gdGhlIHNoZWxsJ3MKKyAgIGRvbGxhciBleHBhbnNpb24gKHBvc3NpYmx5IGFuIGF1dG9jb25mIGJ1ZykuICAqLworc3RhdGljIGNoYXIgZm9ybWF0W10gPSB7ICclJywgJzInLCAnJCcsICdkJywgJyAnLCAnJScsICcxJywgJyQnLCAnZCcsICdcMCcgfTsKK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworaW50IG1haW4gKCkKK3sKKyAgc3ByaW50ZiAoYnVmLCBmb3JtYXQsIDMzLCA1NSk7CisgIHJldHVybiAoc3RyY21wIChidWYsICI1NSAzMyIpICE9IDApOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9eWVzCitlbHNlCisgIGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4PW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9mdW5jX3ByaW50Zl9wb3NpeCIgPiY1CiskYXNfZWNobyAiJGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4IiA+JjY7IH0KKyAgY2FzZSAkZ3RfY3ZfZnVuY19wcmludGZfcG9zaXggaW4KKyAgICAqeWVzKQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BPU0lYX1BSSU5URiAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5ID49IDIuMSBvciB1Q2xpYmMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIExpYnJhcnkgPj0gMi4xIG9yIHVDbGliYy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9nbnVfbGlicmFyeV8yXzErOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2lmZGVmIF9fR05VX0xJQlJBUllfXworICNpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEpIHx8IChfX0dMSUJDX18gPiAyKQorICBMdWNreSBHTlUgdXNlcgorICNlbmRpZgorI2VuZGlmCisjaWZkZWYgX19VQ0xJQkNfXworIEx1Y2t5IHVzZXIKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJMdWNreSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgYWNfY3ZfZ251X2xpYnJhcnlfMl8xPXllcworZWxzZQorICBhY19jdl9nbnVfbGlicmFyeV8yXzE9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2dudV9saWJyYXJ5XzJfMSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2dudV9saWJyYXJ5XzJfMSIgPiY2OyB9CisKKyAgICBHTElCQzIxPSIkYWNfY3ZfZ251X2xpYnJhcnlfMl8xIgorCisKKworICBmb3IgYWNfaGVhZGVyIGluIHN0ZGludC5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzdGRpbnQuaCIgImFjX2N2X2hlYWRlcl9zdGRpbnRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3RkaW50X2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgU0laRV9NQVgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFNJWkVfTUFYLi4uICIgPiY2OyB9CitpZiAke2dsX2N2X3NpemVfbWF4Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGdsX2N2X3NpemVfbWF4PQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmIEhBVkVfU1RESU5UX0gKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmZGVmIFNJWkVfTUFYCitGb3VuZCBpdAorI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIkZvdW5kIGl0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBnbF9jdl9zaXplX21heD15ZXMKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICAgIGlmIHRlc3QgLXogIiRnbF9jdl9zaXplX21heCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICJzaXplb2YgKHNpemVfdCkgKiBDSEFSX0JJVCAtIDEiICJzaXplX3RfYml0c19taW51c18xIiAgICAgICAgIiNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4iOyB0aGVuIDoKKworZWxzZQorICBzaXplX3RfYml0c19taW51c18xPQorZmkKKworICAgICAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgInNpemVvZiAoc2l6ZV90KSA8PSBzaXplb2YgKHVuc2lnbmVkIGludCkiICJmaXRzX2luX3VpbnQiICAgICAgICAiI2luY2x1ZGUgPHN0ZGRlZi5oPiI7IHRoZW4gOgorCitlbHNlCisgIGZpdHNfaW5fdWludD0KK2ZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRzaXplX3RfYml0c19taW51c18xIiAmJiB0ZXN0IC1uICIkZml0c19pbl91aW50IjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICRmaXRzX2luX3VpbnQgPSAxOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisgICAgICAgICAgICAgICAgIGV4dGVybiBzaXplX3QgZm9vOworICAgICAgICAgICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBmb287CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZml0c19pbl91aW50PTAKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAkZml0c19pbl91aW50ID0gMTsgdGhlbgorICAgICAgICAgIGdsX2N2X3NpemVfbWF4PSIoKCgxVSA8PCAkc2l6ZV90X2JpdHNfbWludXNfMSkgLSAxKSAqIDIgKyAxKSIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGdsX2N2X3NpemVfbWF4PSIoKCgxVUwgPDwgJHNpemVfdF9iaXRzX21pbnVzXzEpIC0gMSkgKiAyICsgMSkiCisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ2xfY3Zfc2l6ZV9tYXg9Jygoc2l6ZV90KX4oc2l6ZV90KTApJworICAgICAgZmkKKyAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9zaXplX21heCIgPiY1CiskYXNfZWNobyAiJGdsX2N2X3NpemVfbWF4IiA+JjY7IH0KKyAgaWYgdGVzdCAiJGdsX2N2X3NpemVfbWF4IiAhPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFX01BWCAkZ2xfY3Zfc2l6ZV9tYXgKK19BQ0VPRgorCisgIGZpCisKKworCisKKyAgZm9yIGFjX2hlYWRlciBpbiBzdGRpbnQuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3RkaW50LmgiICJhY19jdl9oZWFkZXJfc3RkaW50X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N0ZGludF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKworCisgIGZvciBhY19mdW5jIGluICRhY19mdW5jX2xpc3QKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBmY250bC5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIGZjbnRsLmguLi4gIiA+JjY7IH0KK2lmICR7Z2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaD1jcm9zcy1jb21waWxpbmcKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAgICAgICAgICAgI2lmIEhBVkVfVU5JU1REX0gKKyAgICAgICAgICAgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAgICAgICAgICAgI2Vsc2UgLyogb24gV2luZG93cyB3aXRoIE1TVkMgKi8KKyAgICAgICAgICAgIyBpbmNsdWRlIDxpby5oPgorICAgICAgICAgICAjIGluY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgICAjIGRlZmluZWQgc2xlZXAobikgX3NsZWVwICgobikgKiAxMDAwKQorICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgI2luY2x1ZGUgPGZjbnRsLmg+CisgICAgICAgICAgICNpZm5kZWYgT19OT0FUSU1FCisgICAgICAgICAgICAjZGVmaW5lIE9fTk9BVElNRSAwCisgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAjaWZuZGVmIE9fTk9GT0xMT1cKKyAgICAgICAgICAgICNkZWZpbmUgT19OT0ZPTExPVyAwCisgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICBzdGF0aWMgaW50IGNvbnN0IGNvbnN0YW50c1tdID0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgT19DUkVBVCwgT19FWENMLCBPX05PQ1RUWSwgT19UUlVOQywgT19BUFBFTkQsCisgICAgICAgICAgICAgIE9fTk9OQkxPQ0ssIE9fU1lOQywgT19BQ0NNT0RFLCBPX1JET05MWSwgT19SRFdSLCBPX1dST05MWQorICAgICAgICAgICAgfTsKKworaW50CittYWluICgpCit7CisKKyAgICAgICAgICAgIGludCByZXN1bHQgPSAhY29uc3RhbnRzOworICAgICAgICAgICAgI2lmIEhBVkVfU1lNTElOSworICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdGF0aWMgY2hhciBjb25zdCBzeW1bXSA9ICJjb25mdGVzdC5zeW0iOworICAgICAgICAgICAgICBpZiAoc3ltbGluayAoIi9kZXYvbnVsbCIsIHN5bSkgIT0gMCkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGludCBmZCA9IG9wZW4gKHN5bSwgT19XUk9OTFkgfCBPX05PRk9MTE9XIHwgT19DUkVBVCwgMCk7CisgICAgICAgICAgICAgICAgICBpZiAoZmQgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNsb3NlIChmZCk7CisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmICh1bmxpbmsgKHN5bSkgIT0gMCB8fCBzeW1saW5rICgiLiIsIHN5bSkgIT0gMCkKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGludCBmZCA9IG9wZW4gKHN5bSwgT19SRE9OTFkgfCBPX05PRk9MTE9XKTsKKyAgICAgICAgICAgICAgICAgIGlmIChmZCA+PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2xvc2UgKGZkKTsKKyAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gNDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgdW5saW5rIChzeW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGZpbGVbXSA9ICJjb25mZGVmcy5oIjsKKyAgICAgICAgICAgICAgaW50IGZkID0gb3BlbiAoZmlsZSwgT19SRE9OTFkgfCBPX05PQVRJTUUpOworICAgICAgICAgICAgICBpZiAoZmQgPCAwKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSA4OworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgc3QwOworICAgICAgICAgICAgICAgICAgaWYgKGZzdGF0IChmZCwgJnN0MCkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDE2OworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2hhciBjOworICAgICAgICAgICAgICAgICAgICAgIHNsZWVwICgxKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZCAoZmQsICZjLCAxKSAhPSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDI0OworICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsb3NlIChmZCkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCBzdDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdCAoZmlsZSwgJnN0MSkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDQwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3QwLnN0X2F0aW1lICE9IHN0MS5zdF9hdGltZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gNjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGdsX2N2X2hlYWRlcl93b3JraW5nX2ZjbnRsX2g9eWVzCitlbHNlCisgIGNhc2UgJD8gaW4gIygKKyAgICAgICAgNCkgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaD0nbm8gKGJhZCBPX05PRk9MTE9XKSc7OyAjKAorICAgICAgICA2NCkgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaD0nbm8gKGJhZCBPX05PQVRJTUUpJzs7ICMoCisgICAgICAgIDY4KSBnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oPSdubyAoYmFkIE9fTk9BVElNRSwgT19OT0ZPTExPVyknOzsgIygKKyAgICAgICAgICopIGdsX2N2X2hlYWRlcl93b3JraW5nX2ZjbnRsX2g9J25vJzs7CisgICAgICAgIGVzYWMKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oIiA+JjUKKyRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaCIgPiY2OyB9CisKKyAgY2FzZSAkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfZmNudGxfaCBpbiAjKAorICAqT19OT0FUSU1FKiB8IG5vIHwgY3Jvc3MtY29tcGlsaW5nKSBhY192YWw9MDs7ICMoCisgICopIGFjX3ZhbD0xOzsKKyAgZXNhYworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfV09SS0lOR19PX05PQVRJTUUgJGFjX3ZhbAorX0FDRU9GCisKKworICBjYXNlICRnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oIGluICMoCisgICpPX05PRk9MTE9XKiB8IG5vIHwgY3Jvc3MtY29tcGlsaW5nKSBhY192YWw9MDs7ICMoCisgICopIGFjX3ZhbD0xOzsKKyAgZXNhYworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfV09SS0lOR19PX05PRk9MTE9XICRhY192YWwKK19BQ0VPRgorCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUuLi4gIiA+JjY7IH0KK2lmICR7Z3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgTElCUz0iJExJQlMgLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZQcmVmZXJlbmNlcy5oPgoraW50CittYWluICgpCit7CitDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKE5VTEwsIE5VTEwpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlPXllcworZWxzZQorICBndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIiA+JjUKKyRhc19lY2hvICIkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIiA+JjY7IH0KKyAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRSAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIENGTG9jYWxlQ29weUN1cnJlbnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIENGTG9jYWxlQ29weUN1cnJlbnQuLi4gIiA+JjY7IH0KK2lmICR7Z3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgTElCUz0iJExJQlMgLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZMb2NhbGUuaD4KK2ludAorbWFpbiAoKQoreworQ0ZMb2NhbGVDb3B5Q3VycmVudCgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudD15ZXMKK2Vsc2UKKyAgZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJGd0X3NhdmVfTElCUyIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCIgPiY1CiskYXNfZWNobyAiJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCIgPiY2OyB9CisgIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0NGTE9DQUxFQ09QWUNVUlJFTlQgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKyAgSU5UTF9NQUNPU1hfTElCUz0KKyAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlID0geWVzIHx8IHRlc3QgJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCA9IHllczsgdGhlbgorICAgIElOVExfTUFDT1NYX0xJQlM9Ii1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKKyAgZmkKKworCisKKworCisKKworCisKKworICAgIGNhc2UgIiRlbmFibGVfc2lsZW50X3J1bGVzIiBpbgorICAgIHllcykgSU5UTF9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKKyAgICBubykgIElOVExfREVGQVVMVF9WRVJCT1NJVFk9MTs7CisgICAgKikgICBJTlRMX0RFRkFVTFRfVkVSQk9TSVRZPTE7OworICBlc2FjCisKKworICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJwdHJkaWZmX3QiICJhY19jdl90eXBlX3B0cmRpZmZfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3B0cmRpZmZfdCIgPSB4eWVzOyB0aGVuIDoKKworZWxzZQorCiskYXNfZWNobyAiI2RlZmluZSBwdHJkaWZmX3QgbG9uZyIgPj5jb25mZGVmcy5oCisKKworZmkKKworICBmb3IgYWNfaGVhZGVyIGluIGZlYXR1cmVzLmggc3RkZGVmLmggc3RkbGliLmggc3RyaW5nLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICBmb3IgYWNfZnVuYyBpbiBhc3ByaW50ZiBmd3ByaW50ZiBuZXdsb2NhbGUgcHV0ZW52IHNldGVudiBzZXRsb2NhbGUgXAorICAgIHNucHJpbnRmIHN0cm5sZW4gd2NzbGVuIHdjc25sZW4gbWJydG93YyB3Y3J0b21iCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCisgICAgICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJfc25wcmludGYiICJhY19jdl9oYXZlX2RlY2xfX3NucHJpbnRmIiAiI2luY2x1ZGUgPHN0ZGlvLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9fc25wcmludGYiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9fU05QUklOVEYgJGFjX2hhdmVfZGVjbAorX0FDRU9GCithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJfc253cHJpbnRmIiAiYWNfY3ZfaGF2ZV9kZWNsX19zbndwcmludGYiICIjaW5jbHVkZSA8c3RkaW8uaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX19zbndwcmludGYiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9fU05XUFJJTlRGICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCisKKyAgICAgICAgICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJnZXRjX3VubG9ja2VkIiAiYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQiICIjaW5jbHVkZSA8c3RkaW8uaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9HRVRDX1VOTE9DS0VEICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCisKKyAgY2FzZSAkZ3RfY3ZfZnVuY19wcmludGZfcG9zaXggaW4KKyAgICAqeWVzKSBIQVZFX1BPU0lYX1BSSU5URj0xIDs7CisgICAgKikgSEFWRV9QT1NJWF9QUklOVEY9MCA7OworICBlc2FjCisKKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfYXNwcmludGYiID0geWVzOyB0aGVuCisgICAgSEFWRV9BU1BSSU5URj0xCisgIGVsc2UKKyAgICBIQVZFX0FTUFJJTlRGPTAKKyAgZmkKKworICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19zbnByaW50ZiIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1NOUFJJTlRGPTEKKyAgZWxzZQorICAgIEhBVkVfU05QUklOVEY9MAorICBmaQorCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX25ld2xvY2FsZSIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX05FV0xPQ0FMRT0xCisgIGVsc2UKKyAgICBIQVZFX05FV0xPQ0FMRT0wCisgIGZpCisKKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfd3ByaW50ZiIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1dQUklOVEY9MQorICBlbHNlCisgICAgSEFWRV9XUFJJTlRGPTAKKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbmxfbGFuZ2luZm8gYW5kIENPREVTRVQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvIGFuZCBDT0RFU0VULi4uICIgPiY2OyB9CitpZiAke2FtX2N2X2xhbmdpbmZvX2NvZGVzZXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGFuZ2luZm8uaD4KK2ludAorbWFpbiAoKQoreworY2hhciogY3MgPSBubF9sYW5naW5mbyhDT0RFU0VUKTsgcmV0dXJuICFjczsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhbV9jdl9sYW5naW5mb19jb2Rlc2V0PXllcworZWxzZQorICBhbV9jdl9sYW5naW5mb19jb2Rlc2V0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfbGFuZ2luZm9fY29kZXNldCIgPiY1CiskYXNfZWNobyAiJGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQiID4mNjsgfQorICBpZiB0ZXN0ICRhbV9jdl9sYW5naW5mb19jb2Rlc2V0ID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTEFOR0lORk9fQ09ERVNFVCAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgTENfTUVTU0FHRVMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIExDX01FU1NBR0VTLi4uICIgPiY2OyB9CitpZiAke2d0X2N2X3ZhbF9MQ19NRVNTQUdFUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsb2NhbGUuaD4KK2ludAorbWFpbiAoKQoreworcmV0dXJuIExDX01FU1NBR0VTCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ3RfY3ZfdmFsX0xDX01FU1NBR0VTPXllcworZWxzZQorICBndF9jdl92YWxfTENfTUVTU0FHRVM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfdmFsX0xDX01FU1NBR0VTIiA+JjUKKyRhc19lY2hvICIkZ3RfY3ZfdmFsX0xDX01FU1NBR0VTIiA+JjY7IH0KKyAgaWYgdGVzdCAkZ3RfY3ZfdmFsX0xDX01FU1NBR0VTID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTENfTUVTU0FHRVMgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzOyB0aGVuCisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBtaW5ndyogfCBjeWd3aW4qKSBpc193b2UzMmRsbD15ZXMgOzsKKyAgICAgICopIGlzX3dvZTMyZGxsPW5vIDs7CisgICAgZXNhYworICBlbHNlCisgICAgaXNfd29lMzJkbGw9bm8KKyAgZmkKKyAgV09FMzJETEw9JGlzX3dvZTMyZGxsCisKKworICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgbWluZ3cqIHwgY3lnd2luKikgaXNfd29lMzI9eWVzIDs7CisgICAgKikgaXNfd29lMzI9bm8gOzsKKyAgZXNhYworICBXT0UzMj0kaXNfd29lMzIKKworICBpZiB0ZXN0ICRXT0UzMiA9IHllczsgdGhlbgorICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH13aW5kcmVzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXdpbmRyZXM7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX1dJTkRSRVMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkV0lORFJFUyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19XSU5EUkVTPSIkV0lORFJFUyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX1dJTkRSRVM9IiR7YWNfdG9vbF9wcmVmaXh9d2luZHJlcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitXSU5EUkVTPSRhY19jdl9wcm9nX1dJTkRSRVMKK2lmIHRlc3QgLW4gIiRXSU5EUkVTIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFdJTkRSRVMiID4mNQorJGFzX2VjaG8gIiRXSU5EUkVTIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19XSU5EUkVTIjsgdGhlbgorICBhY19jdF9XSU5EUkVTPSRXSU5EUkVTCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAid2luZHJlcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgd2luZHJlczsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfV0lORFJFUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9XSU5EUkVTIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1dJTkRSRVM9IiRhY19jdF9XSU5EUkVTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfV0lORFJFUz0id2luZHJlcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9XSU5EUkVTPSRhY19jdl9wcm9nX2FjX2N0X1dJTkRSRVMKK2lmIHRlc3QgLW4gIiRhY19jdF9XSU5EUkVTIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1dJTkRSRVMiID4mNQorJGFzX2VjaG8gIiRhY19jdF9XSU5EUkVTIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfV0lORFJFUyIgPSB4OyB0aGVuCisgICAgV0lORFJFUz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFdJTkRSRVM9JGFjX2N0X1dJTkRSRVMKKyAgZmkKK2Vsc2UKKyAgV0lORFJFUz0iJGFjX2N2X3Byb2dfV0lORFJFUyIKK2ZpCisKKyAgZmkKKworICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBocHV4KikgTFRMSUJDPSIiIDs7CisgICAgKikgICAgIExUTElCQz0iLWxjIiA7OworICBlc2FjCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZS4uLiAiID4mNjsgfQoraWYgJHtndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBndF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBMSUJTPSIkTElCUyAtV2wsLWZyYW1ld29yayAtV2wsQ29yZUZvdW5kYXRpb24iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlByZWZlcmVuY2VzLmg+CitpbnQKK21haW4gKCkKK3sKK0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUoTlVMTCwgTlVMTCkKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWU9eWVzCitlbHNlCisgIGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUiID4mNQorJGFzX2VjaG8gIiRndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUiID4mNjsgfQorICBpZiB0ZXN0ICRndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DRlBSRUZFUkVOQ0VTQ09QWUFQUFZBTFVFIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQ0ZMb2NhbGVDb3B5Q3VycmVudCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQ0ZMb2NhbGVDb3B5Q3VycmVudC4uLiAiID4mNjsgfQoraWYgJHtndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBndF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBMSUJTPSIkTElCUyAtV2wsLWZyYW1ld29yayAtV2wsQ29yZUZvdW5kYXRpb24iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkxvY2FsZS5oPgoraW50CittYWluICgpCit7CitDRkxvY2FsZUNvcHlDdXJyZW50KCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50PXllcworZWxzZQorICBndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50IiA+JjUKKyRhc19lY2hvICIkZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50IiA+JjY7IH0KKyAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50ID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVCAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorICBJTlRMX01BQ09TWF9MSUJTPQorICBpZiB0ZXN0ICRndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgPSB5ZXMgfHwgdGVzdCAkZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50ID0geWVzOyB0aGVuCisgICAgSU5UTF9NQUNPU1hfTElCUz0iLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIgorICBmaQorCisKKworCisKKworICAgIEJVSUxEX0lOQ0xVREVEX0xJQklOVEw9bm8KKyAgICBVU0VfSU5DTFVERURfTElCSU5UTD1ubworCisgIExJQklOVEw9CisgIExUTElCSU5UTD0KKyAgUE9TVUI9CisKKyAgICBjYXNlICIgJGd0X25lZWRzICIgaW4KKyAgICAqIiBuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3MgIiopIGd0X2FwaV92ZXJzaW9uPTMgOzsKKyAgICAqIiBuZWVkLW5nZXR0ZXh0ICIqKSBndF9hcGlfdmVyc2lvbj0yIDs7CisgICAgKikgZ3RfYXBpX3ZlcnNpb249MSA7OworICBlc2FjCisgIGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPSJndF9jdl9mdW5jX2dudWdldHRleHQke2d0X2FwaV92ZXJzaW9ufV9saWJjIgorICBndF9mdW5jX2dudWdldHRleHRfbGliaW50bD0iZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0JHtndF9hcGlfdmVyc2lvbn1fbGliaW50bCIKKworICAgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PW5vCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpbmNsdWRlZCBnZXR0ZXh0IGlzIHJlcXVlc3RlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGluY2x1ZGVkIGdldHRleHQgaXMgcmVxdWVzdGVkLi4uICIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfaW5jbHVkZWRfZ2V0dGV4dCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfaW5jbHVkZWRfZ2V0dGV4dDsgbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dD0kd2l0aHZhbAorZWxzZQorICBubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0PW5vCitmaQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQiID4mNQorJGFzX2VjaG8gIiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IiA+JjY7IH0KKworICAgICAgbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dD0iJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQiCisgICAgICBpZiB0ZXN0ICIkbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dCIgIT0gInllcyI7IHRoZW4KKworCisgICAgICAgIGlmIHRlc3QgJGd0X2FwaV92ZXJzaW9uIC1nZSAzOyB0aGVuCisgICAgICAgICAgZ3RfcmV2aXNpb25fdGVzdF9jb2RlPScKKyNpZm5kZWYgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04KKyNkZWZpbmUgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04obWFqb3IpICgobWFqb3IpID09IDAgPyAwIDogLTEpCisjZW5kaWYKK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CisnCisgICAgICAgIGVsc2UKKyAgICAgICAgICBndF9yZXZpc2lvbl90ZXN0X2NvZGU9CisgICAgICAgIGZpCisgICAgICAgIGlmIHRlc3QgJGd0X2FwaV92ZXJzaW9uIC1nZSAyOyB0aGVuCisgICAgICAgICAgZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGU9JyArICogbmdldHRleHQgKCIiLCAiIiwgMCknCisgICAgICAgIGVsc2UKKyAgICAgICAgICBndF9leHByZXNzaW9uX3Rlc3RfY29kZT0KKyAgICAgICAgZmkKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyRndF9mdW5jX2dudWdldHRleHRfbGliYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGxpYmludGwuaD4KKyRndF9yZXZpc2lvbl90ZXN0X2NvZGUKK2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKK2V4dGVybiBpbnQgKl9ubF9kb21haW5fYmluZGluZ3M7CisKK2ludAorbWFpbiAoKQoreworCitiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKK3JldHVybiAqIGdldHRleHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2RvbWFpbl9iaW5kaW5ncworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPXllcyIKK2Vsc2UKKyAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorCisgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgIT0gInllcyI7IH07IHRoZW4KKworCisKKworCisKKworCisgICAgdXNlX2FkZGl0aW9uYWw9eWVzCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKworICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKworICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJpbnRsLXByZWZpeCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbGliaW50bF9wcmVmaXgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2xpYmludGxfcHJlZml4OworICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKworICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKworICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgIGVsc2UKKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIgorICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYmRpcnN0ZW0yIiAhPSAiJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICYmICEgdGVzdCAtZCAiJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0yIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorCitmaQorCisgICAgICBMSUJJTlRMPQorICBMVExJQklOVEw9CisgIElOQ0lOVEw9CisgIExJQklOVExfUFJFRklYPQorICAgICAgSEFWRV9MSUJJTlRMPQorICBycGF0aGRpcnM9CisgIGx0cnBhdGhkaXJzPQorICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9CisgIG5hbWVzX25leHRfcm91bmQ9J2ludGwgJworICB3aGlsZSB0ZXN0IC1uICIkbmFtZXNfbmV4dF9yb3VuZCI7IGRvCisgICAgbmFtZXNfdGhpc19yb3VuZD0iJG5hbWVzX25leHRfcm91bmQiCisgICAgbmFtZXNfbmV4dF9yb3VuZD0KKyAgICBmb3IgbmFtZSBpbiAkbmFtZXNfdGhpc19yb3VuZDsgZG8KKyAgICAgIGFscmVhZHlfaGFuZGxlZD0KKyAgICAgIGZvciBuIGluICRuYW1lc19hbHJlYWR5X2hhbmRsZWQ7IGRvCisgICAgICAgIGlmIHRlc3QgIiRuIiA9ICIkbmFtZSI7IHRoZW4KKyAgICAgICAgICBhbHJlYWR5X2hhbmRsZWQ9eWVzCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICAgIGlmIHRlc3QgLXogIiRhbHJlYWR5X2hhbmRsZWQiOyB0aGVuCisgICAgICAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0iJG5hbWVzX2FscmVhZHlfaGFuZGxlZCAkbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVybmFtZT1gZWNobyAiJG5hbWUiIHwgc2VkIC1lICd5fGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8rLXxBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX198J2AKKyAgICAgICAgZXZhbCB2YWx1ZT1cIlwkSEFWRV9MSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgaWYgdGVzdCAtbiAiJHZhbHVlIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExJQiR1cHBlcm5hbWVcIgorICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSR2YWx1ZSIKKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCisgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExUTElCSU5UTD0iJHtMVExJQklOVEx9JHtMVExJQklOVEw6KyB9JHZhbHVlIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9CisgICAgICAgICAgZm91bmRfbGE9CisgICAgICAgICAgZm91bmRfc289CisgICAgICAgICAgZm91bmRfYT0KKyAgICAgICAgICBldmFsIGxpYm5hbWU9XCIkYWNsX2xpYm5hbWVfc3BlY1wiICAgICMgdHlwaWNhbGx5OiBsaWJuYW1lPWxpYiRuYW1lCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgIHNocmV4dD0iLiRhY2xfc2hsaWJleHQiICAgICAgICAgICAgICMgdHlwaWNhbGx5OiBzaHJleHQ9LnNvCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc2hyZXh0PQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgIGRpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgorICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgorICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJJTlRMOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgIGNhc2UgIiR4IiBpbgorICAgICAgICAgICAgICAgIC1MKikKKyAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCR4IiB8IHNlZCAtZSAncy9eWC1MLy8nYAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICBmaQorICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIExUTElCSU5UTD0iJHtMVExJQklOVEx9JHtMVExJQklOVEw6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX3NvIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgPSBubyBcCisgICAgICAgICAgICAgICAgIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iIFwKKyAgICAgICAgICAgICAgICAgfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbTIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCSU5UTDsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9LUwkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0tbCRuYW1lIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2EiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmb3VuZF9hIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0KKyAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9kaXIiIGluCisgICAgICAgICAgICAgICovJGFjbF9saWJkaXJzdGVtIHwgKi8kYWNsX2xpYmRpcnN0ZW0vKQorICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAicywvJGFjbF9saWJkaXJzdGVtLyInKiQsLCdgCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJG5hbWUiID0gJ2ludGwnOyB0aGVuCisgICAgICAgICAgICAgICAgICBMSUJJTlRMX1BSRUZJWD0iJGJhc2VkaXIiCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0yIHwgKi8kYWNsX2xpYmRpcnN0ZW0yLykKKyAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgInMsLyRhY2xfbGliZGlyc3RlbTIvIicqJCwsJ2AKKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgPSAnaW50bCc7IHRoZW4KKyAgICAgICAgICAgICAgICAgIExJQklOVExfUFJFRklYPSIkYmFzZWRpciIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJGJhc2VkaXIvaW5jbHVkZSIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OworICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGZvciB4IGluICRDUFBGTEFHUyAkSU5DSU5UTDsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkNJTlRMPSIke0lOQ0lOVEx9JHtJTkNJTlRMOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZm91bmRfbGEiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgICAgICAgICBjYXNlICIkZm91bmRfbGEiIGluCisgICAgICAgICAgICAgICAgKi8qIHwgKlxcKikgLiAiJGZvdW5kX2xhIiA7OworICAgICAgICAgICAgICAgICopIC4gIi4vJGZvdW5kX2xhIiA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGxpYmRpcj0iJHNhdmVfbGliZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKyAgICAgICAgICAgICAgICBjYXNlICIkZGVwIiBpbgorICAgICAgICAgICAgICAgICAgLUwqKQorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLUwvLydgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSIgXAorICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtMiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvJGFjbF9saWJkaXJzdGVtMiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQklOVEw7IGRvCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgZXZhbCB4PVwiJHhcIgorICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCSU5UTDsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIke0xUTElCSU5UTH0ke0xUTElCSU5UTDorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgIC1SKikKKyAgICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtUi8vJ2AKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgLWwqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLWwvLydgCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAqLmxhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncyxeWC4qLywsJyAtZSAncyxebGliLCwnIC1lICdzLFwubGEkLCwnYAorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRkZXAiCisgICAgICAgICAgICAgICAgICAgIExUTElCSU5UTD0iJHtMVExJQklOVEx9JHtMVExJQklOVEw6KyB9JGRlcCIKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0tbCRuYW1lIgorICAgICAgICAgICAgTFRMSUJJTlRMPSIke0xUTElCSU5UTH0ke0xUTElCSU5UTDorIH0tbCRuYW1lIgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgYWxsZGlycz0KKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRmb3VuZF9kaXIiCisgICAgICBkb25lCisgICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICBsaWJkaXI9IiRhbGxkaXJzIgorICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKyAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZsYWciCisgICAgZWxzZQorICAgICAgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKKyAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmbGFnIgorICAgICAgZG9uZQorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkbHRycGF0aGRpcnM7IGRvCisgICAgICBMVExJQklOVEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisgfS1SJGZvdW5kX2RpciIKKyAgICBkb25lCisgIGZpCisKKworCisKKworCisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGdldHRleHQgaW4gbGliaW50bCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGdldHRleHQgaW4gbGliaW50bC4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBndF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRJTkNJTlRMIgorICAgICAgICAgICAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJTlRMIgorICAgICAgICAgICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bGliaW50bC5oPgorJGd0X3JldmlzaW9uX3Rlc3RfY29kZQorZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCitjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopOworCitpbnQKK21haW4gKCkKK3sKKworYmluZHRleHRkb21haW4gKCIiLCAiIik7CityZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9leHBhbmRfYWxpYXMgKCIiKQorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPXllcyIKK2Vsc2UKKyAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiICE9IHllczsgfSAmJiB0ZXN0IC1uICIkTElCSUNPTlYiOyB0aGVuCisgICAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bGliaW50bC5oPgorJGd0X3JldmlzaW9uX3Rlc3RfY29kZQorZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCitjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopOworCitpbnQKK21haW4gKCkKK3sKKworYmluZHRleHRkb21haW4gKCIiLCAiIik7CityZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9leHBhbmRfYWxpYXMgKCIiKQorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgTElCSU5UTD0iJExJQklOVEwgJExJQklDT05WIgorICAgICAgICAgICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJExUTElCSUNPTlYiCisgICAgICAgICAgICAgICAgIGV2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIENQUEZMQUdTPSIkZ3Rfc2F2ZV9DUFBGTEFHUyIKKyAgICAgICAgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiCitmaQorZXZhbCBhY19yZXM9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICAgICAgICBmaQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9IFwKKyAgICAgICAgICAgfHwgeyB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH0gXAorICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXJ1bnRpbWUgXAorICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXRvb2xzOyB9OyB0aGVuCisgICAgICAgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PXllcworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIExJQklOVEw9CisgICAgICAgICAgTFRMSUJJTlRMPQorICAgICAgICAgIElOQ0lOVEw9CisgICAgICAgIGZpCisKKworICAgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiAhPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dD15ZXMKKyAgICAgICAgZmkKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKKyAgICAgICAgVVNFX0lOQ0xVREVEX0xJQklOVEw9eWVzCisgICAgICAgIExJQklOVEw9Ilwke3RvcF9idWlsZGRpcn0vaW50bC9saWJpbnRsLmEgJExJQklDT05WICRMSUJUSFJFQUQiCisgICAgICAgIExUTElCSU5UTD0iXCR7dG9wX2J1aWxkZGlyfS9pbnRsL2xpYmludGwuYSAkTFRMSUJJQ09OViAkTFRMSUJUSFJFQUQiCisgICAgICAgIExJQlM9YGVjaG8gIiAkTElCUyAiIHwgc2VkIC1lICdzLyAtbGludGwgLyAvJyAtZSAncy9eIC8vJyAtZSAncy8gJC8vJ2AKKyAgICAgIGZpCisKKyAgICAgIENBVE9CSkVYVD0KKyAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorICAgICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgICBDQVRPQkpFWFQ9LmdtbworICAgICAgZmkKKworCisgICAgaWYgdGVzdCAtbiAiJElOVExfTUFDT1NYX0xJQlMiOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKyAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgTElCSU5UTD0iJExJQklOVEwgJElOVExfTUFDT1NYX0xJQlMiCisgICAgICAgIExUTElCSU5UTD0iJExUTElCSU5UTCAkSU5UTF9NQUNPU1hfTElCUyIKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9OTFMgMSIgPj5jb25mZGVmcy5oCisKKyAgICBlbHNlCisgICAgICBVU0VfTkxTPW5vCisgICAgZmkKKyAgZmkKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIE5MUyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIHVzZSBOTFMuLi4gIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRVU0VfTkxTIiA+JjUKKyRhc19lY2hvICIkVVNFX05MUyIgPiY2OyB9CisgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGVyZSB0aGUgZ2V0dGV4dCBmdW5jdGlvbiBjb21lcyBmcm9tIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXJlIHRoZSBnZXR0ZXh0IGZ1bmN0aW9uIGNvbWVzIGZyb20uLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH07IHRoZW4KKyAgICAgICAgZ3Rfc291cmNlPSJleHRlcm5hbCBsaWJpbnRsIgorICAgICAgZWxzZQorICAgICAgICBndF9zb3VyY2U9ImxpYmMiCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGd0X3NvdXJjZT0iaW5jbHVkZWQgaW50bCBkaXJlY3RvcnkiCisgICAgZmkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X3NvdXJjZSIgPiY1CiskYXNfZWNobyAiJGd0X3NvdXJjZSIgPiY2OyB9CisgIGZpCisKKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKworICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfTsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBsaW5rIHdpdGggbGliaW50bCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYmludGwuLi4gIiA+JjY7IH0KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMSUJJTlRMIiA+JjUKKyRhc19lY2hvICIkTElCSU5UTCIgPiY2OyB9CisKKyAgZm9yIGVsZW1lbnQgaW4gJElOQ0lOVEw7IGRvCisgICAgaGF2ZWl0PQorICAgIGZvciB4IGluICRDUFBGTEFHUzsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGVsZW1lbnQiOyB0aGVuCisgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfSRlbGVtZW50IgorICAgIGZpCisgIGRvbmUKKworICAgICAgZmkKKworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVFRFWFQgMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9EQ0dFVFRFWFQgMSIgPj5jb25mZGVmcy5oCisKKyAgICBmaQorCisgICAgICAgIFBPU1VCPXBvCisgIGZpCisKKworICAgICAgICAgICAgaWYgdGVzdCAiJFBBQ0tBR0UiID0gZ2V0dGV4dC1ydW50aW1lIHx8IHRlc3QgIiRQQUNLQUdFIiA9IGdldHRleHQtdG9vbHM7IHRoZW4KKyAgICAgIEJVSUxEX0lOQ0xVREVEX0xJQklOVEw9eWVzCisgICAgZmkKKworCisKKworCisgICAgICAgIG5sc19jdl9oZWFkZXJfaW50bD0KKyAgICBubHNfY3ZfaGVhZGVyX2xpYmd0PQorCisgICAgICAgIERBVEFESVJOQU1FPXNoYXJlCisKKworICAgICAgICBJTlNUT0JKRVhUPS5tbworCisKKyAgICAgICAgR0VOQ0FUPWdlbmNhdAorCisKKyAgICAgICAgSU5UTE9CSlM9CisgICAgaWYgdGVzdCAiJFVTRV9JTkNMVURFRF9MSUJJTlRMIiA9IHllczsgdGhlbgorICAgICAgSU5UTE9CSlM9IlwkKEdFVFRPQkpTKSIKKyAgICBmaQorCisKKyAgICAgICAgSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVg9CisKKworCisgICAgSU5UTExJQlM9IiRMSUJJTlRMIgorCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAiID4mNjsgfQorc2V0IHggJHtNQUtFLW1ha2V9CithY19tYWtlPWAkYXNfZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKK2lmIGV2YWwgXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgorU0hFTEwgPSAvYmluL3NoCithbGw6CisJQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBAQCUlJScKK19BQ0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorY2FzZSBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCisgICpAQEAlJSU9Pyo9QEBAJSUlKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OworICAqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKK2VzYWMKK3JtIC1mIGNvbmZ0ZXN0Lm1ha2UKK2ZpCitpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgU0VUX01BS0U9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCitmaQorCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIG1ha2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBtYWtlLi4uICIgPiY2OyB9CitpZiAke19jdl9nbnVfbWFrZV9jb21tYW5kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgX2N2X2dudV9tYWtlX2NvbW1hbmQ9JycgOworICAgICAgICAgICAgICAgIGZvciBhIGluICIkTUFLRSIgbWFrZSBnbWFrZSBnbnVtYWtlIDsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRhIiA7IHRoZW4gY29udGludWUgOyBmaSA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAgKCBzaCAtYyAiJGEgLS12ZXJzaW9uIiAyPiAvZGV2L251bGwgfCBncmVwIEdOVSAgMj4mMSA+IC9kZXYvbnVsbCApIDsgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N2X2dudV9tYWtlX2NvbW1hbmQ9JGEgOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZSA7CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJF9jdl9nbnVfbWFrZV9jb21tYW5kIiA+JjUKKyRhc19lY2hvICIkX2N2X2dudV9tYWtlX2NvbW1hbmQiID4mNjsgfSA7CisgICAgICAgIGlmIHRlc3QgICJ4JF9jdl9nbnVfbWFrZV9jb21tYW5kIiAhPSAieCIgIDsgdGhlbgorICAgICAgICAgICAgICAgIGlmR05VbWFrZT0nJyA7CisgICAgICAgICAgICAgICAgaWZOb3RHTlVtYWtlPScjJyA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpZkdOVW1ha2U9JyMnIDsKKyAgICAgICAgICAgICAgICBpZk5vdEdOVW1ha2U9JycgOworICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBcIk5vdCBmb3VuZFwiIiA+JjUKKyRhc19lY2hvICJcIk5vdCBmb3VuZFwiIiA+JjY7IH07CisgICAgICAgIGZpCisKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxuIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBsbjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTE4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRMTiBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9MTj0iJExOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9MTj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9MTiIgJiYgYWNfY3ZfcGF0aF9MTj0ibG4iCisgIDs7Citlc2FjCitmaQorTE49JGFjX2N2X3BhdGhfTE4KK2lmIHRlc3QgLW4gIiRMTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMTiIgPiY1CiskYXNfZWNobyAiJExOIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzLi4uICIgPiY2OyB9CitMTl9TPSRhc19sbl9zCitpZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubywgdXNpbmcgJExOX1MiID4mNQorJGFzX2VjaG8gIm5vLCB1c2luZyAkTE5fUyIgPiY2OyB9CitmaQorCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm12Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBtdjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTVYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRNViBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9NVj0iJE1WIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9NVj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9NViIgJiYgYWNfY3ZfcGF0aF9NVj0ibXYiCisgIDs7Citlc2FjCitmaQorTVY9JGFjX2N2X3BhdGhfTVYKK2lmIHRlc3QgLW4gIiRNViI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNViIgPiY1CiskYXNfZWNobyAiJE1WIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY3AiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGNwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9DUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJENQIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0NQPSIkQ1AiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wYXRoX0NQPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX0NQIiAmJiBhY19jdl9wYXRoX0NQPSJjcCIKKyAgOzsKK2VzYWMKK2ZpCitDUD0kYWNfY3ZfcGF0aF9DUAoraWYgdGVzdCAtbiAiJENQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENQIiA+JjUKKyRhc19lY2hvICIkQ1AiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJybSIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcm07IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1JNKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUk0gaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfUk09IiRSTSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfUk09IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfUk0iICYmIGFjX2N2X3BhdGhfUk09InJtIgorICA7OworZXNhYworZmkKK1JNPSRhY19jdl9wYXRoX1JNCitpZiB0ZXN0IC1uICIkUk0iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUk0iID4mNQorJGFzX2VjaG8gIiRSTSIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNobW9kIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjaG1vZDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfQ0hNT0QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRDSE1PRCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9DSE1PRD0iJENITU9EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9DSE1PRD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9DSE1PRCIgJiYgYWNfY3ZfcGF0aF9DSE1PRD0iOiIKKyAgOzsKK2VzYWMKK2ZpCitDSE1PRD0kYWNfY3ZfcGF0aF9DSE1PRAoraWYgdGVzdCAtbiAiJENITU9EIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENITU9EIiA+JjUKKyRhc19lY2hvICIkQ0hNT0QiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZm9yIGFjX3Byb2cgaW4gZ2F3ayBtYXdrIG5hd2sgYXdrCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQVdLKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BV0s9IiRBV0siICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BV0s9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0FXSz0kYWNfY3ZfcHJvZ19BV0sKK2lmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVdLIiA+JjUKKyRhc19lY2hvICIkQVdLIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJEFXSyIgJiYgYnJlYWsKK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZWdyZXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRUdSRVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBlY2hvIGEgfCAkR1JFUCAtRSAnKGF8YiknID4vZGV2L251bGwgMj4mMQorICAgdGhlbiBhY19jdl9wYXRoX0VHUkVQPSIkR1JFUCAtRSIKKyAgIGVsc2UKKyAgICAgaWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgorICBhY19wYXRoX0VHUkVQX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0VHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYWNfcGF0aF9FR1JFUCIgfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0VHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9FR1JFUAorY2FzZSBgIiRhY19wYXRoX0VHUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIgYWNfcGF0aF9FR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnRUdSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfRUdSRVAiICdFR1JFUCQnIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9FR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiCisgICAgICBhY19wYXRoX0VHUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfRUdSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0VHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGVncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9FR1JFUD0kRUdSRVAKK2ZpCisKKyAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0VHUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9FR1JFUCIgPiY2OyB9CisgRUdSRVA9IiRhY19jdl9wYXRoX0VHUkVQIgorCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic2VkIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzZWQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1NFRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFNFRCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9TRUQ9IiRTRUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wYXRoX1NFRD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9TRUQiICYmIGFjX2N2X3BhdGhfU0VEPSJzZWQiCisgIDs7Citlc2FjCitmaQorU0VEPSRhY19jdl9wYXRoX1NFRAoraWYgdGVzdCAtbiAiJFNFRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTRUQiID4mNQorJGFzX2VjaG8gIiRTRUQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwZXJsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwZXJsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9QRVJMKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUEVSTCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QRVJMPSIkUEVSTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfUEVSTD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QRVJMIiAmJiBhY19jdl9wYXRoX1BFUkw9InBlcmwiCisgIDs7Citlc2FjCitmaQorUEVSTD0kYWNfY3ZfcGF0aF9QRVJMCitpZiB0ZXN0IC1uICIkUEVSTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQRVJMIiA+JjUKKyRhc19lY2hvICIkUEVSTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxkY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBsZGNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTERDT05GSUcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRMRENPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9MRENPTkZJRz0iJExEQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9MRENPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9MRENPTkZJRyIgJiYgYWNfY3ZfcGF0aF9MRENPTkZJRz0iOiIKKyAgOzsKK2VzYWMKK2ZpCitMRENPTkZJRz0kYWNfY3ZfcGF0aF9MRENPTkZJRworaWYgdGVzdCAtbiAiJExEQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEQ09ORklHIiA+JjUKKyRhc19lY2hvICIkTERDT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0FSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICBhY19jdl9wcm9nX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitBUj0kYWNfY3ZfcHJvZ19BUgoraWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFSIiA+JjUKKyRhc19lY2hvICIkQVIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorICBhY19jdF9BUj0kQVIKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0FSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfY3RfQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKK2lmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0FSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgIEFSPSJhciIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBBUj0kYWNfY3RfQVIKKyAgZmkKK2Vsc2UKKyAgQVI9IiRhY19jdl9wcm9nX0FSIgorZmkKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1JBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUkFOTElCIiA+JjUKKyRhc19lY2hvICIkUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisgIGFjX2N0X1JBTkxJQj0kUkFOTElCCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgoraWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9SQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorICAgIFJBTkxJQj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorICBmaQorZWxzZQorICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTVFJJUCIgPiY1CiskYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KKyAgYWNfY3RfU1RSSVA9JFNUUklQCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCitpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKyAgICBTVFJJUD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBTVFJJUD0kYWNfY3RfU1RSSVAKKyAgZmkKK2Vsc2UKKyAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgorZmkKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtYWtlaW5mbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbWFrZWluZm87IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX01BS0VJTkZPKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE1BS0VJTkZPIjsgdGhlbgorICBhY19jdl9wcm9nX01BS0VJTkZPPSIkTUFLRUlORk8iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19NQUtFSU5GTz0ibWFrZWluZm8iCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTUFLRUlORk89JGFjX2N2X3Byb2dfTUFLRUlORk8KK2lmIHRlc3QgLW4gIiRNQUtFSU5GTyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUtFSU5GTyIgPiY1CiskYXNfZWNobyAiJE1BS0VJTkZPIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2lmIHRlc3QgIl8kTUFLRUlORk8iID0gIl8iOyB0aGVuCisgICAgTUFLRUlORk89IkBlY2hvIE1ha2VpbmZvIGlzIG1pc3NpbmcuIEluZm8gZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBiZSBidWlsdC47dHJ1ZSIKK2Vsc2UKKyAgICBjYXNlICIkTUFLRUlORk8iIGluCisgICAgICAqL21pc3NpbmcuKikKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOgorKioqIE1ha2VpbmZvIGlzIG1pc3NpbmcuIEluZm8gZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBiZSBidWlsdC4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzoKKyoqKiBNYWtlaW5mbyBpcyBtaXNzaW5nLiBJbmZvIGRvY3VtZW50YXRpb24gd2lsbCBub3QgYmUgYnVpbHQuIiA+JjI7fQorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgOzsKKyAgICBlc2FjCitmaQorCisKKyMgU2VlIGlmIHdlIG5lZWQgYSBzZXBhcmF0ZSBuYXRpdmUgY29tcGlsZXIuCitpZiB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSBubzsgdGhlbgorICBCVUlMRF9DQz0iJENDIgorCitlbHNlCisgIGZvciBhY19wcm9nIGluIGdjYyBjYworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0JVSUxEX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEJVSUxEX0NDIjsgdGhlbgorICBhY19jdl9wcm9nX0JVSUxEX0NDPSIkQlVJTERfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19CVUlMRF9DQz0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQlVJTERfQ0M9JGFjX2N2X3Byb2dfQlVJTERfQ0MKK2lmIHRlc3QgLW4gIiRCVUlMRF9DQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRCVUlMRF9DQyIgPiY1CiskYXNfZWNobyAiJEJVSUxEX0NDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJEJVSUxEX0NDIiAmJiBicmVhaworZG9uZQorCitmaQorZm9yIGFjX2hlYWRlciBpbiAgCWRpcmVudC5oIAllcnJuby5oIAlleGVjaW5mby5oIAlnZXRvcHQuaCAJbWFsbG9jLmggCW1udGVudC5oIAlwYXRocy5oIAlzZW1hcGhvcmUuaCAJc2V0am1wLmggCXNpZ25hbC5oIAlzdGRhcmcuaCAJc3RkaW50LmggCXN0ZGxpYi5oIAl0ZXJtaW9zLmggCXRlcm1pby5oIAl1bmlzdGQuaCAJdXRpbWUuaCAJbGludXgvZmFsbG9jLmggCWxpbnV4L2ZkLmggCWxpbnV4L21ham9yLmggCWxpbnV4L2xvb3AuaCAJbmV0L2lmX2RsLmggCW5ldGluZXQvaW4uaCAJc3lzL2Rpc2tsYWJlbC5oIAlzeXMvZGlzay5oIAlzeXMvZmlsZS5oIAlzeXMvaW9jdGwuaCAJc3lzL21rZGV2LmggCXN5cy9tbWFuLmggCXN5cy9tb3VudC5oIAlzeXMvcHJjdGwuaCAJc3lzL3Jlc291cmNlLmggCXN5cy9zZWxlY3QuaCAJc3lzL3NvY2tldC5oIAlzeXMvc29ja2lvLmggCXN5cy9zdGF0LmggCXN5cy9zeXNjYWxsLmggCXN5cy9zeXNtYWNyb3MuaCAJc3lzL3RpbWUuaCAJc3lzL3R5cGVzLmggCXN5cy91bi5oIAlzeXMvd2FpdC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKK2ZvciBhY19oZWFkZXIgaW4gbmV0L2lmLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIm5ldC9pZi5oIiAiYWNfY3ZfaGVhZGVyX25ldF9pZl9oIiAiCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25ldF9pZl9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTkVUX0lGX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworZm9yIGFjX2Z1bmMgaW4gdnByaW50ZgorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJ2cHJpbnRmIiAiYWNfY3ZfZnVuY192cHJpbnRmIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3ZwcmludGYiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9WUFJJTlRGIDEKK19BQ0VPRgorCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJfZG9wcm50IiAiYWNfY3ZfZnVuY19fZG9wcm50IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX19kb3BybnQiID0geHllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRE9QUk5UIDEiID4+Y29uZmRlZnMuaAorCitmaQorCitmaQorZG9uZQorCisKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGRpcmVudCIgImRfcmVjbGVuIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9kaXJlbnRfZF9yZWNsZW4iICIjaW5jbHVkZSA8ZGlyZW50Lmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfZGlyZW50X2RfcmVjbGVuIiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1JFQ0xFTl9ESVJFTlQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXQiICJzdF9hdGltIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2F0aW0iICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2F0aW0iID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9BVElNIDEKK19BQ0VPRgorCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNzaXplX3QiICJhY19jdl90eXBlX3NzaXplX3QiICIjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc3NpemVfdCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9UWVBFX1NTSVpFX1QgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImxsc2VlayIgImFjX2N2X2hhdmVfZGVjbF9sbHNlZWsiICIjaW5jbHVkZSA8dW5pc3RkLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9sbHNlZWsiID0geHllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTExTRUVLX1BST1RPVFlQRSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAibHNlZWs2NCIgImFjX2N2X2hhdmVfZGVjbF9sc2VlazY0IiAiI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRQorCQkgI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisJCSAjaW5jbHVkZSA8dW5pc3RkLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9sc2VlazY0IiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xTRUVLNjRfUFJPVE9UWVBFIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHNob3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2Ygc2hvcnQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2l6ZW9mX3Nob3J0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoc2hvcnQpKSIgImFjX2N2X3NpemVvZl9zaG9ydCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgorCitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX3Nob3J0IiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNob3J0KQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3Nob3J0PTAKKyAgIGZpCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2Zfc2hvcnQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2Zfc2hvcnQiID4mNjsgfQorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfU0hPUlQgJGFjX2N2X3NpemVvZl9zaG9ydAorX0FDRU9GCisKKworIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBpbnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBpbnQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2l6ZW9mX2ludCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKGludCkpIiAiYWNfY3Zfc2l6ZW9mX2ludCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgorCitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX2ludCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnQpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfaW50PTAKKyAgIGZpCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfaW50IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX2ludCIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9JTlQgJGFjX2N2X3NpemVvZl9pbnQKK19BQ0VPRgorCisKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgbG9uZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGxvbmcuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2l6ZW9mX2xvbmcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChsb25nKSkiICJhY19jdl9zaXplb2ZfbG9uZyIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgorCitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX2xvbmciID0geWVzOyB0aGVuCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZykKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9sb25nPTAKKyAgIGZpCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfbG9uZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl9sb25nIiA+JjY7IH0KKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX0xPTkcgJGFjX2N2X3NpemVvZl9sb25nCitfQUNFT0YKKworCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGxvbmcgbG9uZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGxvbmcgbG9uZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zaXplb2ZfbG9uZ19sb25nKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAobG9uZyBsb25nKSkiICJhY19jdl9zaXplb2ZfbG9uZ19sb25nIiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CisKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfbG9uZ19sb25nIiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgbG9uZykKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9MAorICAgZmkKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9sb25nX2xvbmciID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfbG9uZ19sb25nIiA+JjY7IH0KKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyAkYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZworX0FDRU9GCisKKworIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBvZmZfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIG9mZl90Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NpemVvZl9vZmZfdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKG9mZl90KSkiICJhY19jdl9zaXplb2Zfb2ZmX3QiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKKworZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9vZmZfdCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChvZmZfdCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9vZmZfdD0wCisgICBmaQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX29mZl90IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX29mZl90IiA+JjY7IH0KKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX09GRl9UICRhY19jdl9zaXplb2Zfb2ZmX3QKK19BQ0VPRgorCisKK1NJWkVPRl9TSE9SVD0kYWNfY3Zfc2l6ZW9mX3Nob3J0CitTSVpFT0ZfSU5UPSRhY19jdl9zaXplb2ZfaW50CitTSVpFT0ZfTE9ORz0kYWNfY3Zfc2l6ZW9mX2xvbmcKK1NJWkVPRl9MT05HX0xPTkc9JGFjX2N2X3NpemVvZl9sb25nX2xvbmcKK1NJWkVPRl9PRkZfVD0kYWNfY3Zfc2l6ZW9mX29mZl90CisKKworCisKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2NfYmlnZW5kaWFuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgorICAgICMgU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHVuaXZlcnNhbCBjb21waWxlci4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZuZGVmIF9fQVBQTEVfQ0NfXworCSAgICAgICBub3QgYSB1bml2ZXJzYWwgY2FwYWJsZSBjb21waWxlcgorCSAgICAgI2VuZGlmCisJICAgICB0eXBlZGVmIGludCBkdW1teTsKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKwkjIENoZWNrIGZvciBwb3RlbnRpYWwgLWFyY2ggZmxhZ3MuICBJdCBpcyBub3QgdW5pdmVyc2FsIHVubGVzcworCSMgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byAtYXJjaCBmbGFncyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMuCisJYWNfYXJjaD0KKwlhY19wcmV2PQorCWZvciBhY193b3JkIGluICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUzsgZG8KKwkgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisJICAgY2FzZSAkYWNfd29yZCBpbgorCSAgICAgaT84NiB8IHg4Nl82NCB8IHBwYyB8IHBwYzY0KQorCSAgICAgICBpZiB0ZXN0IC16ICIkYWNfYXJjaCIgfHwgdGVzdCAiJGFjX2FyY2giID0gIiRhY193b3JkIjsgdGhlbgorCQkgYWNfYXJjaD0kYWNfd29yZAorCSAgICAgICBlbHNlCisJCSBhY19jdl9jX2JpZ2VuZGlhbj11bml2ZXJzYWwKKwkJIGJyZWFrCisJICAgICAgIGZpCisJICAgICAgIDs7CisJICAgZXNhYworCSAgIGFjX3ByZXY9CisJIGVsaWYgdGVzdCAieCRhY193b3JkIiA9ICJ4LWFyY2giOyB0aGVuCisJICAgYWNfcHJldj1hcmNoCisJIGZpCisgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgorICAgICAgIyBTZWUgaWYgc3lzL3BhcmFtLmggZGVmaW5lcyB0aGUgQllURV9PUkRFUiBtYWNyby4KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKwkgICAgICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKworaW50CittYWluICgpCit7CisjaWYgISAoZGVmaW5lZCBCWVRFX09SREVSICYmIGRlZmluZWQgQklHX0VORElBTiBcCisJCSAgICAgJiYgZGVmaW5lZCBMSVRUTEVfRU5ESUFOICYmIEJZVEVfT1JERVIgJiYgQklHX0VORElBTiBcCisJCSAgICAgJiYgTElUVExFX0VORElBTikKKwkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zCisJICAgICAjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gQklHX0VORElBTiBvciBub3QuCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKwkJI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCitpbnQKK21haW4gKCkKK3sKKyNpZiBCWVRFX09SREVSICE9IEJJR19FTkRJQU4KKwkJIG5vdCBiaWcgZW5kaWFuCisJCSNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCitlbHNlCisgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgU2VlIGlmIDxsaW1pdHMuaD4gZGVmaW5lcyBfTElUVExFX0VORElBTiBvciBfQklHX0VORElBTiAoZS5nLiwgU29sYXJpcykuCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGltaXRzLmg+CisKK2ludAorbWFpbiAoKQoreworI2lmICEgKGRlZmluZWQgX0xJVFRMRV9FTkRJQU4gfHwgZGVmaW5lZCBfQklHX0VORElBTikKKwkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zCisJICAgICAjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gX0JJR19FTkRJQU4gb3Igbm90LgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGltaXRzLmg+CisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfQklHX0VORElBTgorCQkgbm90IGJpZyBlbmRpYW4KKwkJI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfY19iaWdlbmRpYW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgorICAgICAgIyBDb21waWxlIGEgdGVzdCBwcm9ncmFtLgorICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICAjIFRyeSB0byBndWVzcyBieSBncmVwcGluZyB2YWx1ZXMgZnJvbSBhbiBvYmplY3QgZmlsZS4KKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworc2hvcnQgaW50IGFzY2lpX21tW10gPQorCQkgIHsgMHg0MjQ5LCAweDQ3NjUsIDB4NkU0NCwgMHg2OTYxLCAweDZFNTMsIDB4Nzk1MywgMCB9OworCQlzaG9ydCBpbnQgYXNjaWlfaWlbXSA9CisJCSAgeyAweDY5NEMsIDB4NTQ1NCwgMHg2NTZDLCAweDZFNDUsIDB4Njk0NCwgMHg2RTYxLCAwIH07CisJCWludCB1c2VfYXNjaWkgKGludCBpKSB7CisJCSAgcmV0dXJuIGFzY2lpX21tW2ldICsgYXNjaWlfaWlbaV07CisJCX0KKwkJc2hvcnQgaW50IGViY2RpY19paVtdID0KKwkJICB7IDB4ODlEMywgMHhFM0UzLCAweDg1OTMsIDB4OTVDNSwgMHg4OUM0LCAweDk1ODEsIDAgfTsKKwkJc2hvcnQgaW50IGViY2RpY19tbVtdID0KKwkJICB7IDB4QzJDOSwgMHhDNzg1LCAweDk1QzQsIDB4ODk4MSwgMHg5NUUyLCAweEE4RTIsIDAgfTsKKwkJaW50IHVzZV9lYmNkaWMgKGludCBpKSB7CisJCSAgcmV0dXJuIGViY2RpY19tbVtpXSArIGViY2RpY19paVtpXTsKKwkJfQorCQlleHRlcm4gaW50IGZvbzsKKworaW50CittYWluICgpCit7CityZXR1cm4gdXNlX2FzY2lpIChmb28pID09IHVzZV9lYmNkaWMgKGZvbyk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWYgZ3JlcCBCSUdlbkRpYW5TeVMgY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsOyB0aGVuCisJICAgICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCisJICAgIGZpCisJICAgIGlmIGdyZXAgTGlUVGxlRW5EaWFuIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkYWNfY3ZfY19iaWdlbmRpYW4iID0gdW5rbm93bjsgdGhlbgorCQlhY19jdl9jX2JpZ2VuZGlhbj1ubworCSAgICAgIGVsc2UKKwkJIyBmaW5kaW5nIGJvdGggc3RyaW5ncyBpcyB1bmxpa2VseSB0byBoYXBwZW4sIGJ1dCB3aG8ga25vd3M/CisJCWFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KKwkgICAgICBmaQorCSAgICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CisKKwkgICAgIC8qIEFyZSB3ZSBsaXR0bGUgb3IgYmlnIGVuZGlhbj8gIEZyb20gSGFyYmlzb24mU3RlZWxlLiAgKi8KKwkgICAgIHVuaW9uCisJICAgICB7CisJICAgICAgIGxvbmcgaW50IGw7CisJICAgICAgIGNoYXIgY1tzaXplb2YgKGxvbmcgaW50KV07CisJICAgICB9IHU7CisJICAgICB1LmwgPSAxOworCSAgICAgcmV0dXJuIHUuY1tzaXplb2YgKGxvbmcgaW50KSAtIDFdID09IDE7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCitlbHNlCisgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19iaWdlbmRpYW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2JpZ2VuZGlhbiIgPiY2OyB9CisgY2FzZSAkYWNfY3ZfY19iaWdlbmRpYW4gaW4gIygKKyAgIHllcykKKyAgICAgJGFzX2VjaG8gIiNkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEiID4+Y29uZmRlZnMuaAorOzsgIygKKyAgIG5vKQorICAgICAgOzsgIygKKyAgIHVuaXZlcnNhbCkKKworJGFzX2VjaG8gIiNkZWZpbmUgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxEIDEiID4+Y29uZmRlZnMuaAorCisgICAgIDs7ICMoCisgICAqKQorICAgICBhc19mbl9lcnJvciAkPyAidW5rbm93biBlbmRpYW5uZXNzCisgcHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3aWxsIGhlbHAiICIkTElORU5PIiA1IDs7CisgZXNhYworCitpZiB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSBubzsgdGhlbgorICBCVUlMRF9DQz0iJEJVSUxEX0NDIiBDUFA9IiRDUFAiIC9iaW4vc2ggJGFjX2F1eF9kaXIvcGFyc2UtdHlwZXMuc2gKK2Vsc2UKKyAgQ1JPU1NfQ09NUElMRT0iMSIgQlVJTERfQ0M9IiRCVUlMRF9DQyIgQ1BQPSIkQ1BQIiAvYmluL3NoICRhY19hdXhfZGlyL3BhcnNlLXR5cGVzLnNoCitmaQorQVNNX1RZUEVTX0hFQURFUj0uL2FzbV90eXBlcy5oCisKK2VjaG8gIi8qIFRoZXNlIGRlZmluZXMgYXJlIG5lZWRlZCBmb3IgdGhlIHB1YmxpYyBleHQyZnMuaCBoZWFkZXIgZmlsZSAqLyIgXAorICAgICA+IHB1YmxpY19jb25maWcuaAoraWYgZ3JlcCBIQVZFX1NZU19UWVBFU19IIGNvbmZkZWZzLmggPiB0bXBfY29uZmlnLiQkOyB0aGVuCisgIHVuaXEgdG1wX2NvbmZpZy4kJCA+PiBwdWJsaWNfY29uZmlnLmgKK2Vsc2UKKyAgZWNobyAiI3VuZGVmIEhBVkVfU1lTX1RZUEVTX0giID4+IHB1YmxpY19jb25maWcuaAorZmkKK2lmIGdyZXAgV09SRFNfQklHRU5ESUFOIGNvbmZkZWZzLmggPiB0bXBfY29uZmlnLiQkOyB0aGVuCisgIHVuaXEgdG1wX2NvbmZpZy4kJCA+PiBwdWJsaWNfY29uZmlnLmgKK2Vsc2UKKyAgZWNobyAiI3VuZGVmIFdPUkRTX0JJR0VORElBTiIgPj4gcHVibGljX2NvbmZpZy5oCitmaQorcm0gLWYgdG1wX2NvbmZpZy4kJAorUFVCTElDX0NPTkZJR19IRUFERVI9Li9wdWJsaWNfY29uZmlnLmgKKworZm9yIGFjX2hlYWRlciBpbiBpbnR0eXBlcy5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJpbnR0eXBlcy5oIiAiYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgImludHB0cl90IiAiYWNfY3ZfdHlwZV9pbnRwdHJfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX2ludHB0cl90IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfSU5UUFRSX1QgMQorX0FDRU9GCisKKworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0cnVjdCBzdGF0IGhhcyBhIHN0X2ZsYWdzIGZpZWxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RydWN0IHN0YXQgaGFzIGEgc3RfZmxhZ3MgZmllbGQuLi4gIiA+JjY7IH0KK2lmICR7ZTJmc3Byb2dzX2N2X3N0cnVjdF9zdF9mbGFncys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgoraW50CittYWluICgpCit7CitzdHJ1Y3Qgc3RhdCBzdGF0OyBzdGF0LnN0X2ZsYWdzID0gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzPXllcworZWxzZQorICBlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGUyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3MiID4mNQorJGFzX2VjaG8gIiRlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzIiA+JjY7IH0KK2lmIHRlc3QgIiRlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzIiA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RfZmxhZ3MgZmllbGQgaXMgdXNlZnVsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RfZmxhZ3MgZmllbGQgaXMgdXNlZnVsLi4uICIgPiY2OyB9CisgIGlmICR7ZTJmc3Byb2dzX2N2X3N0cnVjdF9zdF9mbGFnc19pbW11dCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgoraW50CittYWluICgpCit7CitzdHJ1Y3Qgc3RhdCBzdGF0OyBzdGF0LnN0X2ZsYWdzIHw9IFVGX0lNTVVUQUJMRTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzX2ltbXV0PXllcworZWxzZQorICBlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzX2ltbXV0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZTJmc3Byb2dzX2N2X3N0cnVjdF9zdF9mbGFnc19pbW11dCIgPiY1CiskYXNfZWNobyAiJGUyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3NfaW1tdXQiID4mNjsgfQorICBpZiB0ZXN0ICIkZTJmc3Byb2dzX2N2X3N0cnVjdF9zdF9mbGFnc19pbW11dCIgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TVEFUX0ZMQUdTIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc29ja2FkZHIiICJzYV9sZW4iICJhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3NhX2xlbiIgIiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKwkgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9zYV9sZW4iID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TQV9MRU4gMQorX0FDRU9GCisKK2ZpCisKK2lmIHRlc3QgLW4gIiRCTEtJRF9DTVQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBibGtpZF9wcm9iZV9hbGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBibGtpZF9wcm9iZV9hbGwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX2Jsa2lkX3Byb2JlX2FsbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGJsa2lkX3Byb2JlX2FsbCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGJsa2lkX3Byb2JlX2FsbCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyBibGtpZDsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9ibGtpZF9wcm9iZV9hbGw9JGFjX3JlcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiAke2FjX2N2X3NlYXJjaF9ibGtpZF9wcm9iZV9hbGwrOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX2Jsa2lkX3Byb2JlX2FsbCs6fSBmYWxzZTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX2Jsa2lkX3Byb2JlX2FsbD1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2Jsa2lkX3Byb2JlX2FsbCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9ibGtpZF9wcm9iZV9hbGwiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfYmxraWRfcHJvYmVfYWxsCitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisKK2ZpCisKK2ZpCitmb3IgYWNfZnVuYyBpbiAgCV9fc2VjdXJlX2dldGVudiAJYmFja3RyYWNlIAlibGtpZF9wcm9iZV9nZXRfdG9wb2xvZ3kgCWJsa2lkX3Byb2JlX2VuYWJsZV9wYXJ0aXRpb25zIAljaGZsYWdzIAlmYWR2aXNlNjQgCWZhbGxvY2F0ZSAJZmFsbG9jYXRlNjQgCWZjaG93biAJZmRhdGFzeW5jIAlmc3RhdDY0IAlmdHJ1bmNhdGU2NCAJZnV0aW1lcyAJZ2V0Y3dkIAlnZXRkdGFibGVzaXplIAlnZXRtbnRpbmZvIAlnZXRwd3VpZF9yIAlnZXRybGltaXQgCWdldHJ1c2FnZSAJanJhbmQ0OCAJbGxzZWVrIAlsc2VlazY0IAltYWxsaW5mbyAJbWJzdG93Y3MgCW1lbWFsaWduIAltZW1wY3B5IAltbWFwIAltc3luYyAJbmFub3NsZWVwIAlvcGVuNjQgCXBhdGhjb25mIAlwb3NpeF9mYWR2aXNlIAlwb3NpeF9mYWR2aXNlNjQgCXBvc2l4X21lbWFsaWduIAlwcmN0bCAJcHJlYWQgCXB3cml0ZSAJcHJlYWQ2NCAJcHdyaXRlNjQgCXNlY3VyZV9nZXRlbnYgCXNldG1udGVudCAJc2V0cmVzZ2lkIAlzZXRyZXN1aWQgCXNucHJpbnRmIAlzcmFuZG9tIAlzdHBjcHkgCXN0cmNhc2VjbXAgCXN0cmR1cCAJc3RybmxlbiAJc3RycHRpbWUgCXN0cnRvdWxsIAlzeW5jX2ZpbGVfcmFuZ2UgCXN5c2NvbmYgCXVzbGVlcCAJdXRpbWUgCXV0aW1lcyAJdmFsbG9jCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworU09DS0VUX0xJQj0nJworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc29ja2V0IGluIC1sc29ja2V0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzb2NrZXQgaW4gLWxzb2NrZXQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3NvY2tldF9zb2NrZXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHNvY2tldCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc29ja2V0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gc29ja2V0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9zb2NrZXRfc29ja2V0PXllcworZWxzZQorICBhY19jdl9saWJfc29ja2V0X3NvY2tldD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc29ja2V0X3NvY2tldCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zb2NrZXRfc29ja2V0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3NvY2tldF9zb2NrZXQiID0geHllczsgdGhlbiA6CisgIFNPQ0tFVF9MSUI9LWxzb2NrZXQKK2ZpCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igb3B0cmVzZXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG9wdHJlc2V0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hhdmVfb3B0cmVzZXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIm9wdHJlc2V0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBhY19jdl9oYXZlX29wdHJlc2V0PXllcworZWxzZQorICBhY19jdl9oYXZlX29wdHJlc2V0PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hhdmVfb3B0cmVzZXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oYXZlX29wdHJlc2V0IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hhdmVfb3B0cmVzZXQgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9PUFRSRVNFVCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworU0VNX0lOSVRfTElCPScnCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzZW1faW5pdCIgImFjX2N2X2Z1bmNfc2VtX2luaXQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2VtX2luaXQiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2VtX2luaXQgaW4gLWxwdGhyZWFkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzZW1faW5pdCBpbiAtbHB0aHJlYWQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3B0aHJlYWRfc2VtX2luaXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHB0aHJlYWQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHNlbV9pbml0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gc2VtX2luaXQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3B0aHJlYWRfc2VtX2luaXQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9wdGhyZWFkX3NlbV9pbml0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9wdGhyZWFkX3NlbV9pbml0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3B0aHJlYWRfc2VtX2luaXQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfcHRocmVhZF9zZW1faW5pdCIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TRU1fSU5JVCAxIiA+PmNvbmZkZWZzLmgKKworICAJU0VNX0lOSVRfTElCPS1scHRocmVhZAorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzZW1faW5pdCBpbiAtbHJ0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzZW1faW5pdCBpbiAtbHJ0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9ydF9zZW1faW5pdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1scnQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHNlbV9pbml0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gc2VtX2luaXQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3J0X3NlbV9pbml0PXllcworZWxzZQorICBhY19jdl9saWJfcnRfc2VtX2luaXQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3J0X3NlbV9pbml0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3J0X3NlbV9pbml0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3J0X3NlbV9pbml0IiA9IHh5ZXM7IHRoZW4gOgorICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NFTV9JTklUIDEiID4+Y29uZmRlZnMuaAorCisgIAlTRU1fSU5JVF9MSUI9LWxydAorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzZW1faW5pdCBpbiAtbHBvc2l4NCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2VtX2luaXQgaW4gLWxwb3NpeDQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3Bvc2l4NF9zZW1faW5pdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1scG9zaXg0ICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzZW1faW5pdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHNlbV9pbml0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9wb3NpeDRfc2VtX2luaXQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9wb3NpeDRfc2VtX2luaXQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3Bvc2l4NF9zZW1faW5pdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9wb3NpeDRfc2VtX2luaXQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfcG9zaXg0X3NlbV9pbml0IiA9IHh5ZXM7IHRoZW4gOgorICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NFTV9JTklUIDEiID4+Y29uZmRlZnMuaAorCisgIAlTRU1fSU5JVF9MSUI9LWxwb3NpeDQKK2ZpCisKK2ZpCisKK2ZpCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHVuaWZpZWQgZGlmZiBvcHRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVuaWZpZWQgZGlmZiBvcHRpb24uLi4gIiA+JjY7IH0KK2lmIGRpZmYgLXUgJDAgJDAgPiAvZGV2L251bGwgMj4mMSA7IHRoZW4KKyAgIFVOSV9ESUZGX09QVFM9LXUKK2Vsc2UKKyAgIFVOSV9ESUZGX09QVFM9LWMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFVOSV9ESUZGX09QVFMiID4mNQorJGFzX2VjaG8gIiRVTklfRElGRl9PUFRTIiA+JjY7IH0KKworY2FzZSAiJGhvc3Rfb3MiIGluCitsaW51eCopCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRVhUMl9JT0NUTFMgMSIgPj5jb25mZGVmcy5oCisKKwk7OworZXNhYworTElOVVhfQ01UPSIjIgorQ1lHV0lOX0NNVD0iIyIKK1VOSVhfQ01UPQorY2FzZSAiJGhvc3Rfb3MiIGluCitsaW51eCopCisJTElOVVhfQ01UPQorCTs7CitjeWd3aW4pCisJQ1lHV0lOX0NNVD0KKwlVTklYX0NNVD0iIyIKKwk7OworZXNhYworCisKKworY2FzZSAiJGhvc3Rfb3MiIGluCitsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkKKwlpZiB0ZXN0ICIkcHJlZml4IiA9IE5PTkUgLWEgIiRyb290X3ByZWZpeCIgPSBOT05FIDsgdGhlbgorCQlyb290X3ByZWZpeD0iIjsKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IE9uICRob3N0X29zIHN5c3RlbXMsIHJvb3RfcHJlZml4IGRlZmF1bHRzIHRvICcnIiA+JjUKKyRhc19lY2hvICJPbiAkaG9zdF9vcyBzeXN0ZW1zLCByb290X3ByZWZpeCBkZWZhdWx0cyB0byAnJyIgPiY2OyB9CisJZmkKKwk7OworZXNhYworY2FzZSAiJGhvc3Rfb3MiIGluCitsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkKKwlpZiB0ZXN0ICIkcHJlZml4IiA9IE5PTkUgOyB0aGVuCisJCXByZWZpeD0iL3VzciI7CisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBPbiAkaG9zdF9vcyBzeXN0ZW1zLCBwcmVmaXggZGVmYXVsdHMgdG8gL3VzciIgPiY1CiskYXNfZWNobyAiT24gJGhvc3Rfb3Mgc3lzdGVtcywgcHJlZml4IGRlZmF1bHRzIHRvIC91c3IiID4mNjsgfQorCQlpZiB0ZXN0ICIkbWFuZGlyIiA9ICcke3ByZWZpeH0vbWFuJyA7IHRoZW4KKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAuLi5hbmQgbWFuZGlyIGRlZmF1bHRzIHRvIC91c3Ivc2hhcmUvbWFuIiA+JjUKKyRhc19lY2hvICIuLi5hbmQgbWFuZGlyIGRlZmF1bHRzIHRvIC91c3Ivc2hhcmUvbWFuIiA+JjY7IH0KKwkJCW1hbmRpcj0vdXNyL3NoYXJlL21hbgorCQlmaQorCWZpCis7OworZXNhYworaWYgdGVzdCAiJHJvb3RfcHJlZml4IiA9IE5PTkUgOyB0aGVuCisJaWYgdGVzdCAiJHByZWZpeCIgPSBOT05FIDsgdGhlbgorCQlyb290X3ByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgorCWVsc2UKKwkJcm9vdF9wcmVmaXg9IiRwcmVmaXgiCisJZmkKKwlyb290X2JpbmRpcj0kYmluZGlyCisJcm9vdF9zYmluZGlyPSRzYmluZGlyCisJcm9vdF9saWJkaXI9JGxpYmRpcgorCXJvb3Rfc3lzY29uZmRpcj0kc3lzY29uZmRpcgorZWxzZQorCXJvb3RfYmluZGlyPScke3Jvb3RfcHJlZml4fS9iaW4nCisJcm9vdF9zYmluZGlyPScke3Jvb3RfcHJlZml4fS9zYmluJworCXJvb3RfbGliZGlyPScke3Jvb3RfcHJlZml4fS9saWInCisJcm9vdF9zeXNjb25mZGlyPScke3Jvb3RfcHJlZml4fS9ldGMnCitmaQoraWYgdGVzdCAiJGJpbmRpciIgIT0gJyR7ZXhlY19wcmVmaXh9L2Jpbic7IHRoZW4KKyAgICByb290X2JpbmRpcj0kYmluZGlyCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IFNldHRpbmcgcm9vdF9iaW5kaXIgdG8gJHJvb3RfYmluZGlyIiA+JjUKKyRhc19lY2hvICJTZXR0aW5nIHJvb3RfYmluZGlyIHRvICRyb290X2JpbmRpciIgPiY2OyB9CitmaQoraWYgdGVzdCAiJHNiaW5kaXIiICE9ICcke2V4ZWNfcHJlZml4fS9zYmluJzsgdGhlbgorICAgIHJvb3Rfc2JpbmRpcj0kc2JpbmRpcgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBTZXR0aW5nIHJvb3Rfc2JpbmRpciB0byAkcm9vdF9zYmluZGlyIiA+JjUKKyRhc19lY2hvICJTZXR0aW5nIHJvb3Rfc2JpbmRpciB0byAkcm9vdF9zYmluZGlyIiA+JjY7IH0KK2ZpCitpZiB0ZXN0ICIkbGliZGlyIiAhPSAnJHtleGVjX3ByZWZpeH0vbGliJzsgdGhlbgorICAgIHJvb3RfbGliZGlyPSRsaWJkaXIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogU2V0dGluZyByb290X2xpYmRpciB0byAkcm9vdF9saWJkaXIiID4mNQorJGFzX2VjaG8gIlNldHRpbmcgcm9vdF9saWJkaXIgdG8gJHJvb3RfbGliZGlyIiA+JjY7IH0KK2ZpCitpZiB0ZXN0ICIkc3lzY29uZmRpciIgIT0gJyR7cHJlZml4fS9ldGMnOyB0aGVuCisgICAgcm9vdF9zeXNjb25mZGlyPSRzeXNjb25mZGlyCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IFNldHRpbmcgcm9vdF9zeXNjb25mZGlyIHRvICRyb290X3N5c2NvbmZkaXIiID4mNQorJGFzX2VjaG8gIlNldHRpbmcgcm9vdF9zeXNjb25mZGlyIHRvICRyb290X3N5c2NvbmZkaXIiID4mNjsgfQorZmkKKworCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbXVsdGlhcmNoIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9tdWx0aWFyY2grc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX211bHRpYXJjaDsgaWYgdGVzdCAiJHdpdGh2YWwiID0gImxpYjY0IjsgdGhlbgorICAgIGxpYmRpcj0vdXNyL2xpYjY0CisgICAgcm9vdF9saWJkaXI9L2xpYjY0CitlbHNlCisgICAgbGliZGlyPSRsaWJkaXIvJHdpdGh2YWwKKyAgICByb290X2xpYmRpcj0kcm9vdF9saWJkaXIvJHdpdGh2YWwKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgY2FuIGxpbmsgd2l0aCAtc3RhdGljIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgY2FuIGxpbmsgd2l0aCAtc3RhdGljLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2UyZnNwcm9nc191c2Vfc3RhdGljKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgU0FWRV9MREZMQUdTPSRMREZMQUdTOyBMREZMQUdTPSIkTERGTEFHUyAtc3RhdGljIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK2ZmbHVzaChzdGRvdXQpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2UyZnNwcm9nc191c2Vfc3RhdGljPXllcworZWxzZQorICBhY19jdl9lMmZzcHJvZ3NfdXNlX3N0YXRpYz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMREZMQUdTPSRTQVZFX0xERkxBR1MKK2ZpCisKK2Nhc2UgIiRob3N0X29zIiBpbgorc29sYXJpczIuKikKKwlhY19jdl9lMmZzcHJvZ3NfdXNlX3N0YXRpYz1ubworOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZTJmc3Byb2dzX3VzZV9zdGF0aWMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9lMmZzcHJvZ3NfdXNlX3N0YXRpYyIgPiY2OyB9CitMREZMQUdfU1RBVElDPQoraWYgdGVzdCAkYWNfY3ZfZTJmc3Byb2dzX3VzZV9zdGF0aWMgPSB5ZXM7IHRoZW4KKwlMREZMQUdfU1RBVElDPS1zdGF0aWMKK2ZpCisKK2Nhc2UgIiRob3N0X29zIiBpbgorZGFyd2luKikKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogVXNpbmcgQXBwbGUgRGFyd2luIC8gR05VIGxpYmludGwgd29ya2Fyb3VuZCIgPiY1CiskYXNfZWNobyAiVXNpbmcgQXBwbGUgRGFyd2luIC8gR05VIGxpYmludGwgd29ya2Fyb3VuZCIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIF9JTlRMX1JFRElSRUNUX01BQ1JPUyAxIiA+PmNvbmZkZWZzLmgKKworCTs7Citlc2FjCitTU19ESVI9YGNkICR7c3JjZGlyfS9saWIvc3M7IHB3ZGAKK0VUX0RJUj1gY2QgJHtzcmNkaXJ9L2xpYi9ldDsgcHdkYAorCisKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIDsgdGhlbgorICBET19URVNUX1NVSVRFPQorZWxzZQorICBET19URVNUX1NVSVRFPWNoZWNrCitmaQorCitJTkNMVURFUz0nLUkuIC1JJCh0b3BfYnVpbGRkaXIpL2xpYiAtSSQodG9wX3NyY2RpcikvbGliJworaWYgdGVzdCAtbiAiJENQUEZMQUdTIiA7IHRoZW4KKwlJTkNMVURFUz0iJElOQ0xVREVTICRDUFBGTEFHUyIKK2ZpCitpZiB0ZXN0ICIkVVNFX0lOQ0xVREVEX0xJQklOVEwiID0gInllcyIgOyB0aGVuCisJSU5DTFVERVM9JElOQ0xVREVTJyAtSSQodG9wX2J1aWxkZGlyKS9pbnRsIC1JJCh0b3Bfc3JjZGlyKS9pbnRsJworZmkKK2lmIHRlc3QgLW4gIiRXSVRIX0RJRVRfTElCQyIgOyB0aGVuCisJSU5DTFVERVM9IiRJTkNMVURFUyAtRF9SRUVOVFJBTlQiCitmaQorCisKKyAgICAgICAgTUtJTlNUQUxMRElSUz0KKyAgaWYgdGVzdCAtbiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgICAgY2FzZSAiJGFjX2F1eF9kaXIiIGluCisgICAgICAvKikgTUtJTlNUQUxMRElSUz0iJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyIgOzsKKyAgICAgICopIE1LSU5TVEFMTERJUlM9IlwkKHRvcF9idWlsZGRpcikvJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyIgOzsKKyAgICBlc2FjCisgIGZpCisgIGlmIHRlc3QgLXogIiRNS0lOU1RBTExESVJTIjsgdGhlbgorICAgIE1LSU5TVEFMTERJUlM9IlwkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMiCisgIGZpCisKKworaWYgdGVzdCAkY3Jvc3NfY29tcGlsaW5nID0gbm87IHRoZW4KKyAgIEJVSUxEX0NGTEFHUz0iJENGTEFHUyAkQ1BQRkxBR1MgJElOQ0xVREVTIC1ESEFWRV9DT05GSUdfSCIKKyAgIEJVSUxEX0xERkxBR1M9IiRMREZMQUdTIgorZmkKKworCit0ZXN0IC1kIGxpYiB8fCBta2RpciBsaWIKK3Rlc3QgLWQgaW5jbHVkZSB8fCBta2RpciBpbmNsdWRlCit0ZXN0IC1kIGluY2x1ZGUvbGludXggfHwgbWtkaXIgaW5jbHVkZS9saW51eAordGVzdCAtZCBpbmNsdWRlL2FzbSB8fCBta2RpciBpbmNsdWRlL2FzbQorZm9yIGkgaW4gTUNPTkZJRyBNYWtlZmlsZSBlMmZzcHJvZ3Muc3BlYyBcCisJdXRpbC9NYWtlZmlsZSB1dGlsL3N1YnN0LmNvbmYgdXRpbC9nZW4tdGFyYmFsbCB1dGlsL2luc3RhbGwtc3ltbGluayBcCisJbGliL2V0L01ha2VmaWxlIGxpYi9zcy9NYWtlZmlsZSBsaWIvZTJwL01ha2VmaWxlIFwKKwlsaWIvZXh0MmZzL01ha2VmaWxlIGxpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKwlsaWIvdXVpZC9NYWtlZmlsZSBsaWIvdXVpZC91dWlkX3R5cGVzLmggXAorCWxpYi9ibGtpZC9NYWtlZmlsZSBsaWIvYmxraWQvYmxraWRfdHlwZXMuaCBsaWIvcXVvdGEvTWFrZWZpbGUgXAorCWxpYi9zcy9zcy5wYyBsaWIvdXVpZC91dWlkLnBjIGxpYi9ldC9jb21fZXJyLnBjIFwKKwlsaWIvZTJwL2UycC5wYyBsaWIvYmxraWQvYmxraWQucGMgbGliL2V4dDJmcy9leHQyZnMucGMgXAorCW1pc2MvTWFrZWZpbGUgZXh0MmVkL01ha2VmaWxlIGUyZnNjay9NYWtlZmlsZSBcCisJZGVidWdmcy9NYWtlZmlsZSB0ZXN0cy9NYWtlZmlsZSB0ZXN0cy9wcm9ncy9NYWtlZmlsZSBcCisJcmVzaXplL01ha2VmaWxlIGRvYy9NYWtlZmlsZSBpbnRsL01ha2VmaWxlIFwKKwlpbnRsL2xpYmdudWludGwuaCBwby9NYWtlZmlsZS5pbiA7IGRvCisJaWYgdGVzdCAtZCBgZGlybmFtZSAke3NyY2Rpcn0vJGlgIDsgdGhlbgorCQlvdXRsaXN0PSIkb3V0bGlzdCAkaSIKKwlmaQorZG9uZQorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzICRvdXRsaXN0IgorCitjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCisjIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLCBzZWUgY29uZmlndXJlJ3Mgb3B0aW9uIC0tY29uZmlnLWNhY2hlLgorIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisjCisjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorIyB0aGUgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCisjCisjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKyMgbG9hZGluZyB0aGlzIGZpbGUsIG90aGVyICp1bnNldCogYGFjX2N2X2Zvbycgd2lsbCBiZSBhc3NpZ25lZCB0aGUKKyMgZm9sbG93aW5nIHZhbHVlcy4KKworX0FDRU9GCisKKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwuCisgICAgICBzZWQgLW4gXAorCSJzLycvJ1xcXFwnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorICAgICAgOzsgIygKKyAgICAqKQorICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykgfAorICBzZWQgJworICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKKyAgICAgdCBjbGVhcgorICAgICA6Y2xlYXIKKyAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworICAgICB0IGVuZAorICAgICBzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKyAgICAgOmVuZCcgPj5jb25mY2FjaGUKK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgaWYgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgICBpZiB0ZXN0ICEgLWYgIiRjYWNoZV9maWxlIiB8fCB0ZXN0IC1oICIkY2FjaGVfZmlsZSI7IHRoZW4KKwljYXQgY29uZmNhY2hlID4iJGNhY2hlX2ZpbGUiCisgICAgICBlbHNlCisgICAgICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4gIygKKyAgICAgICAgKi8qIHwgPzoqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIkJCAmJgorCSAgbXYgLWYgIiRjYWNoZV9maWxlIiQkICIkY2FjaGVfZmlsZSIgOzsgIygKKyAgICAgICAgKikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiIDs7CisJZXNhYworICAgICAgZmkKKyAgICBmaQorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgZmkKK2ZpCitybSAtZiBjb25mY2FjaGUKKwordGVzdCAieCRwcmVmaXgiID0geE5PTkUgJiYgcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAorIyBMZXQgbWFrZSBleHBhbmQgZXhlY19wcmVmaXguCit0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCisKK0RFRlM9LURIQVZFX0NPTkZJR19ICisKK2FjX2xpYm9ianM9CithY19sdGxpYm9ianM9CitVPQorZm9yIGFjX2kgaW4gOiAkTElCT0JKUzsgZG8gdGVzdCAieCRhY19pIiA9IHg6ICYmIGNvbnRpbnVlCisgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KKyAgYWNfc2NyaXB0PSdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nCisgIGFjX2k9YCRhc19lY2hvICIkYWNfaSIgfCBzZWQgIiRhY19zY3JpcHQiYAorICAjIDIuIFByZXBlbmQgTElCT0JKRElSLiAgV2hlbiB1c2VkIHdpdGggYXV0b21ha2U+PTEuMTAgTElCT0JKRElSCisgICMgICAgd2lsbCBiZSBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBMSUJPQkpTIG9iamVjdHMgYXJlIGJ1aWx0LgorICBhc19mbl9hcHBlbmQgYWNfbGlib2JqcyAiIFwke0xJQk9CSkRJUn0kYWNfaVwkVS4kYWNfb2JqZXh0IgorICBhc19mbl9hcHBlbmQgYWNfbHRsaWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycKK2RvbmUKK0xJQk9CSlM9JGFjX2xpYm9ianMKKworTFRMSUJPQkpTPSRhY19sdGxpYm9ianMKKworCisKKworOiAiJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30iCithY193cml0ZV9mYWlsPTAKK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY2O30KK2FzX3dyaXRlX2ZhaWw9MAorY2F0ID4kQ09ORklHX1NUQVRVUyA8PF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjIENvbXBpbGVyIG91dHB1dCBwcm9kdWNlZCBieSBjb25maWd1cmUsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCisjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCisKK2RlYnVnPWZhbHNlCithY19jc19yZWNoZWNrPWZhbHNlCithY19jc19zaWxlbnQ9ZmFsc2UKKworU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK2V4cG9ydCBTSEVMTAorX0FTRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCitmaQorCisKK2FzX25sPScKKycKK2V4cG9ydCBhc19ubAorIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisjIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKKyMgYnV0IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCitpZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCisgICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludCAtciAtLScKKyAgYXNfZWNob19uPSdwcmludCAtcm4gLS0nCitlbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworICBhc19lY2hvX249J3ByaW50ZiAlcycKK2Vsc2UKKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCisgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKyAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCisgIGVsc2UKKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCisgICAgICBhcmc9JDE7CisgICAgICBjYXNlICRhcmcgaW4gIygKKyAgICAgICoiJGFzX25sIiopCisJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisJYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKKyAgICAgIGVzYWM7CisgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisgICAgJworICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisgIGZpCisgIGV4cG9ydCBhc19lY2hvX2JvZHkKKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworZmkKKworIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICBQQVRIX1NFUEFSQVRPUj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKyAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAorICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIH0KK2ZpCisKKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorSUZTPSIgIiIJJGFzX25sIgorCisjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorYXNfbXlzZWxmPQorY2FzZSAkMCBpbiAjKCgKKyAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgICAgIDs7Citlc2FjCisjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KK2lmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKyAgYXNfbXlzZWxmPSQwCitmaQoraWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorICBleGl0IDEKK2ZpCisKKyMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KKyMgcHJlLTMuMCBVV0lOIGtzaCkuICBCdXQgZG8gbm90IGNhdXNlIGJ1Z3MgaW4gYmFzaCAyLjAxOyB0aGUgInx8IGV4aXQgMSIKKyMgc3VwcHJlc3NlcyBhbnkgIlNlZ21lbnRhdGlvbiBmYXVsdCIgbWVzc2FnZSB0aGVyZS4gICcoKCcgY291bGQKKyMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCitmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOViBNQUlMIE1BSUxQQVRICitkbyBldmFsIHRlc3QgeFwkeyRhc192YXIrc2V0fSA9IHhzZXQgXAorICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKK2RvbmUKK1BTMT0nJCAnCitQUzI9Jz4gJworUFM0PScrICcKKworIyBOTFMgbnVpc2FuY2VzLgorTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRQorCisjIENEUEFUSC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworCisjIGFzX2ZuX2Vycm9yIFNUQVRVUyBFUlJPUiBbTElORU5PIExPR19GRF0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgImBiYXNlbmFtZSAkMGA6IGVycm9yOiBFUlJPUiIgdG8gc3RkZXJyLiBJZiBMSU5FTk8gYW5kIExPR19GRCBhcmUKKyMgcHJvdmlkZWQsIGFsc28gb3V0cHV0IHRoZSBlcnJvciB0byBMT0dfRkQsIHJlZmVyZW5jaW5nIExJTkVOTy4gVGhlbiBleGl0IHRoZQorIyBzY3JpcHQgd2l0aCBTVEFUVVMsIHVzaW5nIDEgaWYgdGhhdCB3YXMgMC4KK2FzX2ZuX2Vycm9yICgpCit7CisgIGFzX3N0YXR1cz0kMTsgdGVzdCAkYXNfc3RhdHVzIC1lcSAwICYmIGFzX3N0YXR1cz0xCisgIGlmIHRlc3QgIiQ0IjsgdGhlbgorICAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDMifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogJDIiID4mJDQKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICQyIiA+JjIKKyAgYXNfZm5fZXhpdCAkYXNfc3RhdHVzCit9ICMgYXNfZm5fZXJyb3IKKworCisjIGFzX2ZuX3NldF9zdGF0dXMgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCAkPyB0byBTVEFUVVMsIHdpdGhvdXQgZm9ya2luZy4KK2FzX2ZuX3NldF9zdGF0dXMgKCkKK3sKKyAgcmV0dXJuICQxCit9ICMgYXNfZm5fc2V0X3N0YXR1cworCisjIGFzX2ZuX2V4aXQgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEV4aXQgdGhlIHNoZWxsIHdpdGggU1RBVFVTLCBldmVuIGluIGEgInRyYXAgMCIgb3IgInNldCAtZSIgY29udGV4dC4KK2FzX2ZuX2V4aXQgKCkKK3sKKyAgc2V0ICtlCisgIGFzX2ZuX3NldF9zdGF0dXMgJDEKKyAgZXhpdCAkMQorfSAjIGFzX2ZuX2V4aXQKKworIyBhc19mbl91bnNldCBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFBvcnRhYmx5IHVuc2V0IFZBUi4KK2FzX2ZuX3Vuc2V0ICgpCit7CisgIHsgZXZhbCAkMT07IHVuc2V0ICQxO30KK30KK2FzX3Vuc2V0PWFzX2ZuX3Vuc2V0CisjIGFzX2ZuX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCisjIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZCBsaW5lYXIgZ3Jvd3RoIG92ZXIKKyMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKKyMgaW1wbGVtZW50YXRpb25zLgoraWYgKGV2YWwgImFzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeFwkYXNfdmFyID0geDEyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDErPVwkMgorICB9JworZWxzZQorICBhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDE9XCQkMVwkMgorICB9CitmaSAjIGFzX2ZuX2FwcGVuZAorCisjIGFzX2ZuX2FyaXRoIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQorIyBnbG9iYWwgJGFzX3ZhbC4gVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLiBUaGUgYXJndW1lbnRzCisjIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgoraWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9JCgoICQqICkpCisgIH0nCitlbHNlCisgIGFzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAorICB9CitmaSAjIGFzX2ZuX2FyaXRoCisKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCitlbHNlCisgIGFzX2Jhc2VuYW1lPWZhbHNlCitmaQorCitpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZGlybmFtZT1kaXJuYW1lCitlbHNlCisgIGFzX2Rpcm5hbWU9ZmFsc2UKK2ZpCisKK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAorJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYLyIkMCIgfAorICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKworIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCithc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisKK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CitjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAorLW4qKQorICBjYXNlIGBlY2hvICd4eVxjJ2AgaW4KKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisgIHh5KSAgRUNIT19DPSdcYyc7OworICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisgICAgICAgRUNIT19UPScJJzs7CisgIGVzYWM7OworKikKKyAgRUNIT19OPSctbic7OworZXNhYworCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQoraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKK2Vsc2UKKyAgcm0gLWYgY29uZiQkLmRpcgorICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCitmaQoraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPSdsbiAtcycKKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wUicuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXBSJworICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9bG4KKyAgZWxzZQorICAgIGFzX2xuX3M9J2NwIC1wUicKKyAgZmkKK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXBSJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKworCisjIGFzX2ZuX21rZGlyX3AKKyMgLS0tLS0tLS0tLS0tLQorIyBDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCithc19mbl9ta2Rpcl9wICgpCit7CisKKyAgY2FzZSAkYXNfZGlyIGluICMoCisgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKyAgZXNhYworICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rpcl9wIHx8IHsKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIDo7IGRvCisgICAgICBjYXNlICRhc19kaXIgaW4gIygKKyAgICAgICpcJyopIGFzX3FkaXI9YCRhc19lY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMnKAorICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKyAgICAgIGVzYWMKKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgIGRvbmUKKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiCisKKworfSAjIGFzX2ZuX21rZGlyX3AKK2lmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJworZWxzZQorICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICBhc19ta2Rpcl9wPWZhbHNlCitmaQorCisKKyMgYXNfZm5fZXhlY3V0YWJsZV9wIEZJTEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBpZiBGSUxFIGlzIGFuIGV4ZWN1dGFibGUgcmVndWxhciBmaWxlLgorYXNfZm5fZXhlY3V0YWJsZV9wICgpCit7CisgIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC14ICIkMSIKK30gIyBhc19mbl9leGVjdXRhYmxlX3AKK2FzX3Rlc3RfeD0ndGVzdCAteCcKK2FzX2V4ZWN1dGFibGVfcD1hc19mbl9leGVjdXRhYmxlX3AKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCithc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisKK2V4ZWMgNj4mMQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiAkQ09ORklHX1NUQVRVUyBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworX0FTRU9GCit0ZXN0ICRhc193cml0ZV9mYWlsID0gMCAmJiBjaG1vZCAreCAkQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBTYXZlIHRoZSBsb2cgbWVzc2FnZSwgdG8ga2VlcCAkMCBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCisjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKKyMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCithY19sb2c9IgorVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSAkYXNfbWUsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisKKyAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUworICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKKyAgQ09ORklHX0xJTktTICAgID0gJENPTkZJR19MSU5LUworICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCisgICQgJDAgJEAKKworb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisiCisKK19BQ0VPRgorCitjYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2ZpbGVzOyBzaGlmdDsgYWNfY29uZmlnX2ZpbGVzPSQqOzsKK2VzYWMKKworY2FzZSAkYWNfY29uZmlnX2hlYWRlcnMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Citlc2FjCisKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCitjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCitjb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgorY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgorCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfY3NfdXNhZ2U9IlwKK1xgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gYWN0aW9ucworZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBVbmxlc3MgdGhlIGZpbGVzCithbmQgYWN0aW9ucyBhcmUgc3BlY2lmaWVkIGFzIFRBR3MsIGFsbCBhcmUgaW5zdGFudGlhdGVkIGJ5IGRlZmF1bHQuCisKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVEFHXS4uLgorCisgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0CisgICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworICAgICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCisgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKworQ29uZmlndXJhdGlvbiBmaWxlczoKKyRjb25maWdfZmlsZXMKKworQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorJGNvbmZpZ19oZWFkZXJzCisKK0NvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiskY29uZmlnX2NvbW1hbmRzCisKK1JlcG9ydCBidWdzIHRvIHRoZSBwYWNrYWdlIHByb3ZpZGVyLiIKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCithY19jc192ZXJzaW9uPSJcXAorY29uZmlnLnN0YXR1cworY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LAorICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIKKworQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWcuc3RhdHVzIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorCithY19wd2Q9JyRhY19wd2QnCitzcmNkaXI9JyRzcmNkaXInCitJTlNUQUxMPSckSU5TVEFMTCcKK01LRElSX1A9JyRNS0RJUl9QJworQVdLPSckQVdLJwordGVzdCAtbiAiXCRBV0siIHx8IEFXSz1hd2sKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFRoZSBkZWZhdWx0IGxpc3RzIGFwcGx5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgYW55IGZpbGUuCithY19uZWVkX2RlZmF1bHRzPToKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKyAgY2FzZSAkMSBpbgorICAtLSo9PyopCisgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9YGV4cHIgIlgkMSIgOiAnWFtePV0qPVwoLipcKSdgCisgICAgYWNfc2hpZnQ9OgorICAgIDs7CisgIC0tKj0pCisgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9CisgICAgYWNfc2hpZnQ9OgorICAgIDs7CisgICopCisgICAgYWNfb3B0aW9uPSQxCisgICAgYWNfb3B0YXJnPSQyCisgICAgYWNfc2hpZnQ9c2hpZnQKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICMgSGFuZGxpbmcgb2YgdGhlIG9wdGlvbnMuCisgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorICAgIGFjX2NzX3JlY2hlY2s9OiA7OworICAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtLXZlciB8IC0tdmUgfCAtLXYgfCAtViApCisgICAgJGFzX2VjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7OworICAtLWNvbmZpZyB8IC0tY29uZmkgfCAtLWNvbmYgfCAtLWNvbiB8IC0tY28gfCAtLWMgKQorICAgICRhc19lY2hvICIkYWNfY3NfY29uZmlnIjsgZXhpdCA7OworICAtLWRlYnVnIHwgLS1kZWJ1IHwgLS1kZWIgfCAtLWRlIHwgLS1kIHwgLWQgKQorICAgIGRlYnVnPTogOzsKKyAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKKyAgICAkYWNfc2hpZnQKKyAgICBjYXNlICRhY19vcHRhcmcgaW4KKyAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICcnKSBhc19mbl9lcnJvciAkPyAibWlzc2luZyBmaWxlIGFyZ3VtZW50IiA7OworICAgIGVzYWMKKyAgICBhc19mbl9hcHBlbmQgQ09ORklHX0ZJTEVTICIgJyRhY19vcHRhcmcnIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlYWRlciB8IC0taGVhZGUgfCAtLWhlYWQgfCAtLWhlYSApCisgICAgJGFjX3NoaWZ0CisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19IRUFERVJTICIgJyRhY19vcHRhcmcnIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlIHwgLS1oKQorICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCisgICAgYXNfZm5fZXJyb3IgJD8gImFtYmlndW91cyBvcHRpb246IFxgJDEnCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiI7OworICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCA7OworICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCB8IC0tc2kgfCAtLXMpCisgICAgYWNfY3Nfc2lsZW50PTogOzsKKworICAjIFRoaXMgaXMgYW4gZXJyb3IuCisgIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkMScKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA7OworCisgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWdfdGFyZ2V0cyAiICQxIgorICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlIDs7CisKKyAgZXNhYworICBzaGlmdAorZG9uZQorCithY19jb25maWd1cmVfZXh0cmFfYXJncz0KKworaWYgJGFjX2NzX3NpbGVudDsgdGhlbgorICBleGVjIDY+L2Rldi9udWxsCisgIGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPSIkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1zaWxlbnQiCitmaQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQoraWYgXCRhY19jc19yZWNoZWNrOyB0aGVuCisgIHNldCBYICRTSEVMTCAnJDAnICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCisgIHNoaWZ0CisgIFwkYXNfZWNobyAicnVubmluZyBDT05GSUdfU0hFTEw9JFNIRUxMIFwkKiIgPiY2CisgIENPTkZJR19TSEVMTD0nJFNIRUxMJworICBleHBvcnQgQ09ORklHX1NIRUxMCisgIGV4ZWMgIlwkQCIKK2ZpCisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorZXhlYyA1Pj5jb25maWcubG9nCit7CisgIGVjaG8KKyAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKKyMjIFJ1bm5pbmcgJGFzX21lLiAjIworX0FTQk9YCisgICRhc19lY2hvICIkYWNfbG9nIgorfSA+JjUKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMKKyMgSU5JVC1DT01NQU5EUworIworIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBvYnNvbGV0ZSBBTExfTElOR1VBUyBiZWNhdXNlIHdlIG5lZWQgaXQgdG8gY29tcHV0ZQorICAgICMgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUywgQ0FUQUxPR1MuIEJ1dCBoaWRlIGl0CisgICAgIyBmcm9tIGF1dG9tYWtlIDwgMS41LgorICAgIGV2YWwgJ09CU09MRVRFX0FMTF9MSU5HVUFTJyc9IiRBTExfTElOR1VBUyInCisgICAgIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlIENBVEFMT0dTLgorICAgIExJTkdVQVM9IiR7TElOR1VBUy0lVU5TRVQlfSIKKworCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorCisjIEhhbmRsaW5nIG9mIGFyZ3VtZW50cy4KK2ZvciBhY19jb25maWdfdGFyZ2V0IGluICRhY19jb25maWdfdGFyZ2V0cworZG8KKyAgY2FzZSAkYWNfY29uZmlnX3RhcmdldCBpbgorICAgICJsaWIvY29uZmlnLmgiKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIGxpYi9jb25maWcuaCIgOzsKKyAgICAicG8tZGlyZWN0b3JpZXMiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgcG8tZGlyZWN0b3JpZXMiIDs7CisgICAgIiRvdXRsaXN0IikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTICRvdXRsaXN0IiA7OworCisgICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OworICBlc2FjCitkb25lCisKKworIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLAorIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCisjIFdlIHVzZSB0aGUgbG9uZyBmb3JtIGZvciB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGJlY2F1c2Ugb2YgYW4gZXh0cmVtZWx5CisjIGJpemFycmUgYnVnIG9uIFN1bk9TIDQuMS4zLgoraWYgJGFjX25lZWRfZGVmYXVsdHM7IHRoZW4KKyAgdGVzdCAiJHtDT05GSUdfRklMRVMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0ZJTEVTPSRjb25maWdfZmlsZXMKKyAgdGVzdCAiJHtDT05GSUdfSEVBREVSUytzZXR9IiA9IHNldCB8fCBDT05GSUdfSEVBREVSUz0kY29uZmlnX2hlYWRlcnMKKyAgdGVzdCAiJHtDT05GSUdfQ09NTUFORFMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0NPTU1BTkRTPSRjb25maWdfY29tbWFuZHMKK2ZpCisKKyMgSGF2ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIGNvbnZlbmllbmNlLiAgTWFrZSBpdCBpbiB0aGUgYnVpbGQgdHJlZQorIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gYWdhaW5zdCBoYXZpbmcgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAorIyBjcmVhdGluZyBhbmQgbW92aW5nIGZpbGVzIGZyb20gL3RtcCBjYW4gc29tZXRpbWVzIGNhdXNlIHByb2JsZW1zLgorIyBIb29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgorIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOgorIyBhZnRlciBpdHMgY3JlYXRpb24gYnV0IGJlZm9yZSBpdHMgbmFtZSBoYXMgYmVlbiBhc3NpZ25lZCB0byBgJHRtcCcuCiskZGVidWcgfHwKK3sKKyAgdG1wPSBhY190bXA9CisgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/CisgIDogIiR7YWNfdG1wOj0kdG1wfSIKKyAgeyB0ZXN0ICEgLWQgIiRhY190bXAiIHx8IHJtIC1mciAiJGFjX3RtcCI7IH0gJiYgZXhpdCAkZXhpdF9zdGF0dXMKKycgMAorICB0cmFwICdhc19mbl9leGl0IDEnIDEgMiAxMyAxNQorfQorIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCisKK3sKKyAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiLi9jb25mWFhYWFhYIikgMj4vZGV2L251bGxgICYmCisgIHRlc3QgLWQgIiR0bXAiCit9ICB8fAoreworICB0bXA9Li9jb25mJCQtJFJBTkRPTQorICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikKK30gfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIC4iICIkTElORU5PIiA1CithY190bXA9JHRtcAorCisjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBjb25maWcuaCcuCitpZiB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIjsgdGhlbgorCitpZiAkQVdLICdCRUdJTiB7IGdldGxpbmUgPCIvZGV2L251bGwiIH0nIDwvZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKyAgYWNfY3NfYXdrX2dldGxpbmU9OgorICBhY19jc19hd2tfcGlwZV9pbml0PQorICBhY19jc19hd2tfcmVhZF9maWxlPScKKyAgICAgIHdoaWxlICgoZ2V0bGluZSBhbGluZSA8IChGW2tleV0pKSA+IDApCisJcHJpbnQoYWxpbmUpCisgICAgICBjbG9zZShGW2tleV0pJworICBhY19jc19hd2tfcGlwZV9maW5pPQorZWxzZQorICBhY19jc19hd2tfZ2V0bGluZT1mYWxzZQorICBhY19jc19hd2tfcGlwZV9pbml0PSJwcmludCBcImNhdCA8PCd8I18hIV8jfCcgJiZcIiIKKyAgYWNfY3NfYXdrX3JlYWRfZmlsZT0nCisgICAgICBwcmludCAifCNfISFfI3wiCisgICAgICBwcmludCAiY2F0ICIgRltrZXldICIgJiYiCisgICAgICAnJGFjX2NzX2F3a19waXBlX2luaXQKKyAgIyBUaGUgZmluYWwgYDonIGZpbmlzaGVzIHRoZSBBTkQgbGlzdC4KKyAgYWNfY3NfYXdrX3BpcGVfZmluaT0nRU5EIHsgcHJpbnQgInwjXyEhXyN8IjsgcHJpbnQgIjoiIH0nCitmaQorYWNfY3I9YGVjaG8gWCB8IHRyIFggJ1wwMTUnYAorIyBPbiBjeWd3aW4sIGJhc2ggY2FuIGVhdCBcciBpbnNpZGUgYGAgaWYgdGhlIHVzZXIgcmVxdWVzdGVkIGlnbmNyLgorIyBCdXQgd2Uga25vdyBvZiBubyBvdGhlciBzaGVsbCB3aGVyZSBhY19jciB3b3VsZCBiZSBlbXB0eSBhdCB0aGlzCisjIHBvaW50LCBzbyB3ZSBjYW4gdXNlIGEgYmFzaGlzbSBhcyBhIGZhbGxiYWNrLgoraWYgdGVzdCAieCRhY19jciIgPSB4OyB0aGVuCisgIGV2YWwgYWNfY3I9XCRcJ1xcclwnCitmaQorYWNfY3NfYXdrX2NyPWAkQVdLICdCRUdJTiB7IHByaW50ICJhXHJiIiB9JyA8L2Rldi9udWxsIDI+L2Rldi9udWxsYAoraWYgdGVzdCAiJGFjX2NzX2F3a19jciIgPSAiYSR7YWNfY3J9YiI7IHRoZW4KKyAgYWNfY3NfYXdrX2NyPSdcXHInCitlbHNlCisgIGFjX2NzX2F3a19jcj0kYWNfY3IKK2ZpCisKK2VjaG8gJ0JFR0lOIHsnID4iJGFjX3RtcC9zdWJzMS5hd2siICYmCitfQUNFT0YKKworIyBDcmVhdGUgY29tbWFuZHMgdG8gc3Vic3RpdHV0ZSBmaWxlIG91dHB1dCB2YXJpYWJsZXMuCit7CisgIGVjaG8gImNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MSIgJiYKKyAgZWNobyAnY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJicgJiYKKyAgZWNobyAiJGFjX3N1YnN0X2ZpbGVzIiB8IHNlZCAncy8uKi9GWyImIl09IiQmIi8nICYmCisgIGVjaG8gIl9BQ0FXSyIgJiYKKyAgZWNobyAiX0FDRU9GIgorfSA+Y29uZiQkZmlsZXMuc2ggJiYKKy4gLi9jb25mJCRmaWxlcy5zaCB8fAorICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CitybSAtZiBjb25mJCRmaWxlcy5zaAorCit7CisgIGVjaG8gImNhdCA+Y29uZiQkc3Vicy5hd2sgPDxfQUNFT0YiICYmCisgIGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IHNlZCAncy8uKi8mISQmJGFjX2RlbGltLycgJiYKKyAgZWNobyAiX0FDRU9GIgorfSA+Y29uZiQkc3Vicy5zaCB8fAorICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CithY19kZWxpbV9udW09YGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IGdyZXAgLWMgJ14nYAorYWNfZGVsaW09JyUhXyEjICcKK2ZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSA6OyBkbworICAuIC4vY29uZiQkc3Vicy5zaCB8fAorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKworICBhY19kZWxpbV9uPWBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuYXdrIHwgZ3JlcCAtYyBYYAorICBpZiB0ZXN0ICRhY19kZWxpbV9uID0gJGFjX2RlbGltX251bTsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgZmkKK2RvbmUKK3JtIC1mIGNvbmYkJHN1YnMuc2gKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitjYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PFxcX0FDQVdLICYmCitfQUNFT0YKK3NlZCAtbiAnCitoCitzL14vU1siLzsgcy8hLiovIl09LworcAorZworcy9eW14hXSohLy8KKzpyZXBsCit0IHJlcGwKK3MvJyIkYWNfZGVsaW0iJyQvLwordCBkZWxpbQorOm5sCitoCitzL1woLlx7MTQ4XH1cKS4uKi9cMS8KK3QgbW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcbiJcXC8KK3AKK24KK2IgcmVwbAorOm1vcmUxCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5cezE0OFx9Ly8KK3QgbmwKKzpkZWxpbQoraAorcy9cKC5cezE0OFx9XCkuLiovXDEvCit0IG1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iLworcAorYgorOm1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5cezE0OFx9Ly8KK3QgZGVsaW0KKycgPGNvbmYkJHN1YnMuYXdrIHwgc2VkICcKKy9eW14iIl0veworICBOCisgIHMvXG4vLworfQorJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorcm0gLWYgY29uZiQkc3Vicy5hd2sKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorX0FDQVdLCitjYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PF9BQ0FXSyAmJgorICBmb3IgKGtleSBpbiBTKSBTX2lzX3NldFtrZXldID0gMQorICBGUyA9ICIHIgorICBcJGFjX2NzX2F3a19waXBlX2luaXQKK30KK3sKKyAgbGluZSA9ICQgMAorICBuZmllbGRzID0gc3BsaXQobGluZSwgZmllbGQsICJAIikKKyAgc3Vic3RlZCA9IDAKKyAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorICBmb3IgKGkgPSAyOyBpIDwgbmZpZWxkczsgaSsrKSB7CisgICAga2V5ID0gZmllbGRbaV0KKyAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorICAgIGlmIChTX2lzX3NldFtrZXldKSB7CisgICAgICB2YWx1ZSA9IFNba2V5XQorICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorICAgICAgbGVuICs9IGxlbmd0aCh2YWx1ZSkgKyBsZW5ndGgoZmllbGRbKytpXSkKKyAgICAgIHN1YnN0ZWQgPSAxCisgICAgfSBlbHNlCisgICAgICBsZW4gKz0gMSArIGtleWxlbgorICB9CisgIGlmIChuZmllbGRzID09IDMgJiYgIXN1YnN0ZWQpIHsKKyAgICBrZXkgPSBmaWVsZFsyXQorICAgIGlmIChGW2tleV0gIT0gIiIgJiYgbGluZSB+IC9eWwkgXSpALipAWwkgXSokLykgeworICAgICAgXCRhY19jc19hd2tfcmVhZF9maWxlCisgICAgICBuZXh0CisgICAgfQorICB9CisgIHByaW50IGxpbmUKK30KK1wkYWNfY3NfYXdrX3BpcGVfZmluaQorX0FDQVdLCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2lmIHNlZCAicy8kYWNfY3IvLyIgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICBzZWQgInMvJGFjX2NyXCQvLzsgcy8kYWNfY3IvJGFjX2NzX2F3a19jci9nIgorZWxzZQorICBjYXQKK2ZpIDwgIiRhY190bXAvc3ViczEuYXdrIiA+ICIkYWNfdG1wL3N1YnMuYXdrIiBcCisgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGZpbGVzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKK19BQ0VPRgorCisjIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlIHNvbGUgJChzcmNkaXIpLAorIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGVudHJpZXMgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAorIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKKyMgKGFjdHVhbGx5IHdlIGxlYXZlIGFuIGVtcHR5IGxpbmUgdG8gcHJlc2VydmUgbGluZSBudW1iZXJzKS4KK2lmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCisgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj1bCSBdKi97CitoCitzLy8vCitzL14vOi8KK3MvWwkgXSokLzovCitzLzpcJChzcmNkaXIpOi86L2cKK3MvOlwke3NyY2Rpcn06LzovZworcy86QHNyY2RpckA6LzovZworcy9eOiovLworcy86KiQvLworeAorcy9cKD1bCSBdKlwpLiovXDEvCitHCitzL1xuLy8KK3MvXltePV0qPVsJIF0qJC8vCit9JworZmkKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgorCisjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0hFQURFUlMgc2VjdGlvbi4KKyMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfSEVBREVSUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgTWFrZWZpbGUnLgoraWYgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIjsgdGhlbgorY2F0ID4iJGFjX3RtcC9kZWZpbmVzLmF3ayIgPDxcX0FDQVdLIHx8CitCRUdJTiB7CitfQUNFT0YKKworIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGFuIGF3ayBzY3JpcHQgYGRlZmluZXMuYXdrJywgZW1iZWRkZWQgYXMKKyMgaGVyZS1kb2N1bWVudCBpbiBjb25maWcuc3RhdHVzLCB0aGF0IHN1YnN0aXR1dGVzIHRoZSBwcm9wZXIgdmFsdWVzIGludG8KKyMgY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4KKworIyBDcmVhdGUgYSBkZWxpbWl0ZXIgc3RyaW5nIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gY29uZmRlZnMuaCwgdG8gZWFzZQorIyBoYW5kbGluZyBvZiBsb25nIGxpbmVzLgorYWNfZGVsaW09JyUhXyEjICcKK2ZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSA6OyBkbworICBhY190dD1gc2VkIC1uICIvJGFjX2RlbGltL3AiIGNvbmZkZWZzLmhgCisgIGlmIHRlc3QgLXogIiRhY190dCI7IHRoZW4KKyAgICBicmVhaworICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX0hFQURFUlMiICIkTElORU5PIiA1CisgIGVsc2UKKyAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorICBmaQorZG9uZQorCisjIEZvciB0aGUgYXdrIHNjcmlwdCwgRCBpcyBhbiBhcnJheSBvZiBtYWNybyB2YWx1ZXMga2V5ZWQgYnkgbmFtZSwKKyMgbGlrZXdpc2UgUCBjb250YWlucyBtYWNybyBwYXJhbWV0ZXJzIGlmIGFueS4gIFByZXNlcnZlIGJhY2tzbGFzaAorIyBuZXdsaW5lIHNlcXVlbmNlcy4KKworYWNfd29yZF9yZT1bXyRhc19jcl9MZXR0ZXJzXVtfJGFzX2NyX2FsbnVtXSoKK3NlZCAtbiAnCitzLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKK3QgcnNldAorOnJzZXQKK3MvXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qLyAvCit0IGRlZgorZAorOmRlZgorcy9cXCQvLwordCBic25sCitzL1siXFxdL1xcJi9nCitzL14gXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpL1BbIlwxIl09IlwyIlwKK0RbIlwxIl09IiBcMyIvcAorcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDIiL3AKK2QKKzpic25sCitzL1siXFxdL1xcJi9nCitzL14gXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpL1BbIlwxIl09IlwyIlwKK0RbIlwxIl09IiBcM1xcXFxcXG4iXFwvcAordCBjb250CitzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMlxcXFxcXG4iXFwvcAordCBjb250CitkCis6Y29udAorbgorcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCit0IGNsZWFyCis6Y2xlYXIKK3MvXFwkLy8KK3QgYnNubGMKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvcAorZAorOmJzbmxjCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXFxcXFxuIlxcL3AKK2IgY29udAorJyA8Y29uZmRlZnMuaCB8IHNlZCAnCitzLyciJGFjX2RlbGltIicvIlxcXAorIi9nJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyAgZm9yIChrZXkgaW4gRCkgRF9pc19zZXRba2V5XSA9IDEKKyAgRlMgPSAiByIKK30KKy9eW1x0IF0qI1tcdCBdKihkZWZpbmV8dW5kZWYpW1x0IF0rJGFjX3dvcmRfcmUoW1x0IChdfFwkKS8geworICBsaW5lID0gXCQgMAorICBzcGxpdChsaW5lLCBhcmcsICIgIikKKyAgaWYgKGFyZ1sxXSA9PSAiIyIpIHsKKyAgICBkZWZ1bmRlZiA9IGFyZ1syXQorICAgIG1hYzEgPSBhcmdbM10KKyAgfSBlbHNlIHsKKyAgICBkZWZ1bmRlZiA9IHN1YnN0cihhcmdbMV0sIDIpCisgICAgbWFjMSA9IGFyZ1syXQorICB9CisgIHNwbGl0KG1hYzEsIG1hYzIsICIoIikgIykKKyAgbWFjcm8gPSBtYWMyWzFdCisgIHByZWZpeCA9IHN1YnN0cihsaW5lLCAxLCBpbmRleChsaW5lLCBkZWZ1bmRlZikgLSAxKQorICBpZiAoRF9pc19zZXRbbWFjcm9dKSB7CisgICAgIyBQcmVzZXJ2ZSB0aGUgd2hpdGUgc3BhY2Ugc3Vycm91bmRpbmcgdGhlICIjIi4KKyAgICBwcmludCBwcmVmaXggImRlZmluZSIsIG1hY3JvIFBbbWFjcm9dIERbbWFjcm9dCisgICAgbmV4dAorICB9IGVsc2UgeworICAgICMgUmVwbGFjZSAjdW5kZWYgd2l0aCBjb21tZW50cy4gIFRoaXMgaXMgbmVjZXNzYXJ5LCBmb3IgZXhhbXBsZSwKKyAgICAjIGluIHRoZSBjYXNlIG9mIF9QT1NJWF9TT1VSQ0UsIHdoaWNoIGlzIHByZWRlZmluZWQgYW5kIHJlcXVpcmVkCisgICAgIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCisgICAgaWYgKGRlZnVuZGVmID09ICJ1bmRlZiIpIHsKKyAgICAgIHByaW50ICIvKiIsIHByZWZpeCBkZWZ1bmRlZiwgbWFjcm8sICIqLyIKKyAgICAgIG5leHQKKyAgICB9CisgIH0KK30KK3sgcHJpbnQgfQorX0FDQVdLCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBzZXR1cCBjb25maWcgaGVhZGVycyBtYWNoaW5lcnkiICIkTElORU5PIiA1CitmaSAjIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyIKKworCitldmFsIHNldCBYICIgIDpGICRDT05GSUdfRklMRVMgIDpIICRDT05GSUdfSEVBREVSUyAgICA6QyAkQ09ORklHX0NPTU1BTkRTIgorc2hpZnQKK2ZvciBhY190YWcKK2RvCisgIGNhc2UgJGFjX3RhZyBpbgorICA6W0ZITENdKSBhY19tb2RlPSRhY190YWc7IGNvbnRpbnVlOzsKKyAgZXNhYworICBjYXNlICRhY19tb2RlJGFjX3RhZyBpbgorICA6W0ZITF0qOiopOzsKKyAgOkwqIHwgOkMqOiopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHRhZyBcYCRhY190YWcnIiAiJExJTkVOTyIgNTs7CisgIDpbRkhdLSkgYWNfdGFnPS06LTs7CisgIDpbRkhdKikgYWNfdGFnPSRhY190YWc6JGFjX3RhZy5pbjs7CisgIGVzYWMKKyAgYWNfc2F2ZV9JRlM9JElGUworICBJRlM9OgorICBzZXQgeCAkYWNfdGFnCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgc2hpZnQKKyAgYWNfZmlsZT0kMQorICBzaGlmdAorCisgIGNhc2UgJGFjX21vZGUgaW4KKyAgOkwpIGFjX3NvdXJjZT0kMTs7CisgIDpbRkhdKQorICAgIGFjX2ZpbGVfaW5wdXRzPQorICAgIGZvciBhY19mCisgICAgZG8KKyAgICAgIGNhc2UgJGFjX2YgaW4KKyAgICAgIC0pIGFjX2Y9IiRhY190bXAvc3RkaW4iOzsKKyAgICAgICopICMgTG9vayBmb3IgdGhlIGZpbGUgZmlyc3QgaW4gdGhlIGJ1aWxkIHRyZWUsIHRoZW4gaW4gdGhlIHNvdXJjZSB0cmVlCisJICMgKGlmIHRoZSBwYXRoIGlzIG5vdCBhYnNvbHV0ZSkuICBUaGUgYWJzb2x1dGUgcGF0aCBjYW5ub3QgYmUgRE9TLXN0eWxlLAorCSAjIGJlY2F1c2UgJGFjX2YgY2Fubm90IGNvbnRhaW4gYDonLgorCSB0ZXN0IC1mICIkYWNfZiIgfHwKKwkgICBjYXNlICRhY19mIGluCisJICAgW1xcLyRdKikgZmFsc2U7OworCSAgICopIHRlc3QgLWYgIiRzcmNkaXIvJGFjX2YiICYmIGFjX2Y9IiRzcmNkaXIvJGFjX2YiOzsKKwkgICBlc2FjIHx8CisJICAgYXNfZm5fZXJyb3IgMSAiY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogXGAkYWNfZiciICIkTElORU5PIiA1OzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX2YgaW4gKlwnKikgYWNfZj1gJGFzX2VjaG8gIiRhY19mIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7IGVzYWMKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19maWxlX2lucHV0cyAiICckYWNfZiciCisgICAgZG9uZQorCisgICAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKKyAgICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6CisgICAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KKyAgICBjb25maWd1cmVfaW5wdXQ9J0dlbmVyYXRlZCBmcm9tICdgCisJICAkYXNfZWNobyAiJCoiIHwgc2VkICdzfF5bXjpdKi98fDtzfDpbXjpdKi98LCB8ZycKKwlgJyBieSBjb25maWd1cmUuJworICAgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICAgIGNvbmZpZ3VyZV9pbnB1dD0iJGFjX2ZpbGUuICAkY29uZmlndXJlX2lucHV0IgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KKyAgICBmaQorICAgICMgTmV1dHJhbGl6ZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW50ZXJwcmV0ZWQgYnkgc2VkIGluIHJlcGxhY2VtZW50IHN0cmluZ3MuCisgICAgY2FzZSAkY29uZmlndXJlX2lucHV0IGluICMoCisgICAgKlwmKiB8ICpcfCogfCAqXFwqICkKKyAgICAgICBhY19zZWRfY29uZl9pbnB1dD1gJGFzX2VjaG8gIiRjb25maWd1cmVfaW5wdXQiIHwKKyAgICAgICBzZWQgJ3MvW1xcXFwmfF0vXFxcXCYvZydgOzsgIygKKyAgICAqKSBhY19zZWRfY29uZl9pbnB1dD0kY29uZmlndXJlX2lucHV0OzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRhY190YWcgaW4KKyAgICAqOi06KiB8ICo6LSkgY2F0ID4iJGFjX3RtcC9zdGRpbiIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1IDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKworICBhY19kaXI9YCRhc19kaXJuYW1lIC0tICIkYWNfZmlsZSIgfHwKKyRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYWNfZmlsZSIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgIGFzX2Rpcj0iJGFjX2RpciI7IGFzX2ZuX21rZGlyX3AKKyAgYWNfYnVpbGRkaXI9LgorCitjYXNlICIkYWNfZGlyIiBpbgorLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisqKQorICBhY19kaXJfc3VmZml4PS9gJGFzX2VjaG8gIiRhY19kaXIiIHwgc2VkICdzfF5cLltcXC9dfHwnYAorICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisgICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisgIGVzYWMgOzsKK2VzYWMKK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAorIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorCitjYXNlICRzcmNkaXIgaW4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorICAgIGFjX3NyY2Rpcj0uCisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CisgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OworICAqKSAjIFJlbGF0aXZlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKK2VzYWMKK2FjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKworCisgIGNhc2UgJGFjX21vZGUgaW4KKyAgOkYpCisgICMKKyAgIyBDT05GSUdfRklMRQorICAjCisKKyAgY2FzZSAkSU5TVEFMTCBpbgorICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhY19JTlNUQUxMPSRJTlNUQUxMIDs7CisgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZF9wcmVmaXgkSU5TVEFMTCA7OworICBlc2FjCisgIGFjX01LRElSX1A9JE1LRElSX1AKKyAgY2FzZSAkTUtESVJfUCBpbgorICBbXFwvJF0qIHwgPzpbXFwvXSogKSA7OworICAqLyopIGFjX01LRElSX1A9JGFjX3RvcF9idWlsZF9wcmVmaXgkTUtESVJfUCA7OworICBlc2FjCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBJZiB0aGUgdGVtcGxhdGUgZG9lcyBub3Qga25vdyBhYm91dCBkYXRhcm9vdGRpciwgZXhwYW5kIGl0LgorIyBGSVhNRTogVGhpcyBoYWNrIHNob3VsZCBiZSByZW1vdmVkIGEgZmV3IHllYXJzIGFmdGVyIDIuNjAuCithY19kYXRhcm9vdGRpcl9oYWNrPTsgYWNfZGF0YXJvb3RkaXJfc2Vlbj0KK2FjX3NlZF9kYXRhcm9vdD0nCisvZGF0YXJvb3RkaXIvIHsKKyAgcAorICBxCit9CisvQGRhdGFkaXJAL3AKKy9AZG9jZGlyQC9wCisvQGluZm9kaXJAL3AKKy9AbG9jYWxlZGlyQC9wCisvQG1hbmRpckAvcCcKK2Nhc2UgYGV2YWwgInNlZCAtbiBcIlwkYWNfc2VkX2RhdGFyb290XCIgJGFjX2ZpbGVfaW5wdXRzImAgaW4KKypkYXRhcm9vdGRpciopIGFjX2RhdGFyb290ZGlyX3NlZW49eWVzOzsKKypAZGF0YWRpckAqfCpAZG9jZGlyQCp8KkBpbmZvZGlyQCp8KkBsb2NhbGVkaXJAKnwqQG1hbmRpckAqKQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mMjt9CitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBhY19kYXRhcm9vdGRpcl9oYWNrPScKKyAgcyZAZGF0YWRpckAmJGRhdGFkaXImZworICBzJkBkb2NkaXJAJiRkb2NkaXImZworICBzJkBpbmZvZGlyQCYkaW5mb2RpciZnCisgIHMmQGxvY2FsZWRpckAmJGxvY2FsZWRpciZnCisgIHMmQG1hbmRpckAmJG1hbmRpciZnCisgIHMmXFxcJHtkYXRhcm9vdGRpcn0mJGRhdGFyb290ZGlyJmcnIDs7Citlc2FjCitfQUNFT0YKKworIyBOZXV0cmFsaXplIFZQQVRIIHdoZW4gYCRzcmNkaXInID0gYC4nLgorIyBTaGVsbCBjb2RlIGluIGNvbmZpZ3VyZS5hYyBtaWdodCBzZXQgZXh0cmFzdWIuCisjIEZJWE1FOiBkbyB3ZSByZWFsbHkgd2FudCB0byBtYWludGFpbiB0aGlzIGZlYXR1cmU/CitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX3NlZF9leHRyYT0iJGFjX3Zwc3ViCiskZXh0cmFzdWIKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorOnQKKy9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWIKK3N8QGNvbmZpZ3VyZV9pbnB1dEB8JGFjX3NlZF9jb25mX2lucHV0fDt0IHQKK3MmQHRvcF9idWlsZGRpckAmJGFjX3RvcF9idWlsZGRpcl9zdWImO3QgdAorcyZAdG9wX2J1aWxkX3ByZWZpeEAmJGFjX3RvcF9idWlsZF9wcmVmaXgmO3QgdAorcyZAc3JjZGlyQCYkYWNfc3JjZGlyJjt0IHQKK3MmQGFic19zcmNkaXJAJiRhY19hYnNfc3JjZGlyJjt0IHQKK3MmQHRvcF9zcmNkaXJAJiRhY190b3Bfc3JjZGlyJjt0IHQKK3MmQGFic190b3Bfc3JjZGlyQCYkYWNfYWJzX3RvcF9zcmNkaXImO3QgdAorcyZAYnVpbGRkaXJAJiRhY19idWlsZGRpciY7dCB0CitzJkBhYnNfYnVpbGRkaXJAJiRhY19hYnNfYnVpbGRkaXImO3QgdAorcyZAYWJzX3RvcF9idWlsZGRpckAmJGFjX2Fic190b3BfYnVpbGRkaXImO3QgdAorcyZASU5TVEFMTEAmJGFjX0lOU1RBTEwmO3QgdAorcyZATUtESVJfUEAmJGFjX01LRElSX1AmO3QgdAorJGFjX2RhdGFyb290ZGlyX2hhY2sKKyIKK2V2YWwgc2VkIFwiXCRhY19zZWRfZXh0cmFcIiAiJGFjX2ZpbGVfaW5wdXRzIiB8CitpZiAkYWNfY3NfYXdrX2dldGxpbmU7IHRoZW4KKyAgJEFXSyAtZiAiJGFjX3RtcC9zdWJzLmF3ayIKK2Vsc2UKKyAgJEFXSyAtZiAiJGFjX3RtcC9zdWJzLmF3ayIgfCAkU0hFTEwKK2ZpIFwKKyAgPiRhY190bXAvb3V0IHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorCit0ZXN0IC16ICIkYWNfZGF0YXJvb3RkaXJfaGFjayRhY19kYXRhcm9vdGRpcl9zZWVuIiAmJgorICB7IGFjX291dD1gc2VkIC1uICcvXCR7ZGF0YXJvb3RkaXJ9L3AnICIkYWNfdG1wL291dCJgOyB0ZXN0IC1uICIkYWNfb3V0IjsgfSAmJgorICB7IGFjX291dD1gc2VkIC1uICcvXlsJIF0qZGF0YXJvb3RkaXJbCSBdKjoqPS9wJyBcCisgICAgICAiJGFjX3RtcC9vdXQiYDsgdGVzdCAteiAiJGFjX291dCI7IH0gJiYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCIgPiYyO30KKworICBybSAtZiAiJGFjX3RtcC9zdGRpbiIKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAtKSBjYXQgIiRhY190bXAvb3V0IiAmJiBybSAtZiAiJGFjX3RtcC9vdXQiOzsKKyAgKikgcm0gLWYgIiRhY19maWxlIiAmJiBtdiAiJGFjX3RtcC9vdXQiICIkYWNfZmlsZSI7OworICBlc2FjIFwKKyAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgOzsKKyAgOkgpCisgICMKKyAgIyBDT05GSUdfSEVBREVSCisgICMKKyAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgIHsKKyAgICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJGFjX3RtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiCisgICAgfSA+IiRhY190bXAvY29uZmlnLmgiIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorICAgIGlmIGRpZmYgIiRhY19maWxlIiAiJGFjX3RtcC9jb25maWcuaCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNjt9CisgICAgZWxzZQorICAgICAgcm0gLWYgIiRhY19maWxlIgorICAgICAgbXYgIiRhY190bXAvY29uZmlnLmgiICIkYWNfZmlsZSIgXAorCXx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorICAgIGZpCisgIGVsc2UKKyAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKyAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiRhY190bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAtIiAiJExJTkVOTyIgNQorICBmaQorIDs7CisKKyAgOkMpICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNjt9CisgOzsKKyAgZXNhYworCisKKyAgY2FzZSAkYWNfZmlsZSRhY19tb2RlIGluCisgICAgInBvLWRpcmVjdG9yaWVzIjpDKQorICAgIGZvciBhY19maWxlIGluICRDT05GSUdfRklMRVM7IGRvCisgICAgICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iCisgICAgICBjYXNlICIkYWNfZmlsZSIgaW4KKyAgICAgICAgKjoqKSBhY19maWxlPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJTouKiUlJ2AgOzsKKyAgICAgIGVzYWMKKyAgICAgICMgUE8gZGlyZWN0b3JpZXMgaGF2ZSBhIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBmcm9tIE1ha2VmaWxlLmluLmluLgorICAgICAgY2FzZSAiJGFjX2ZpbGUiIGluICovTWFrZWZpbGUuaW4pCisgICAgICAgICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLgorICAgICAgICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCisgICAgICAgIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyInxzZWQgJ3MlXlwuLyUlJ2AKKyAgICAgICAgYWNfZG90cz1gZWNobyAiJGFjX2Rpcl9zdWZmaXgifHNlZCAncyUvW14vXSolLi4vJWcnYAorICAgICAgICAjIEluIGF1dG9jb25mLTIuMTMgaXQgaXMgY2FsbGVkICRhY19naXZlbl9zcmNkaXIuCisgICAgICAgICMgSW4gYXV0b2NvbmYtMi41MCBpdCBpcyBjYWxsZWQgJHNyY2Rpci4KKyAgICAgICAgdGVzdCAtbiAiJGFjX2dpdmVuX3NyY2RpciIgfHwgYWNfZ2l2ZW5fc3JjZGlyPSIkc3JjZGlyIgorICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorICAgICAgICAgIC4pICB0b3Bfc3JjZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2AgOzsKKyAgICAgICAgICAvKikgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgICAgICAgICAqKSAgdG9wX3NyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyIiA7OworICAgICAgICBlc2FjCisgICAgICAgICMgVHJlYXQgYSBkaXJlY3RvcnkgYXMgYSBQTyBkaXJlY3RvcnkgaWYgYW5kIG9ubHkgaWYgaXQgaGFzIGEKKyAgICAgICAgIyBQT1RGSUxFUy5pbiBmaWxlLiBUaGlzIGFsbG93cyBwYWNrYWdlcyB0byBoYXZlIG11bHRpcGxlIFBPCisgICAgICAgICMgZGlyZWN0b3JpZXMgdW5kZXIgZGlmZmVyZW50IG5hbWVzIG9yIGluIGRpZmZlcmVudCBsb2NhdGlvbnMuCisgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiI7IHRoZW4KKyAgICAgICAgICBybSAtZiAiJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICBndF90YWI9YHByaW50ZiAnXHQnYAorICAgICAgICAgIGNhdCAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIiB8IHNlZCAtZSAiL14jL2QiIC1lICIvXlsgJHtndF90YWJ9XSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgorICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKKyAgICAgICAgICAjIEFMTF9MSU5HVUFTLCBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTIGRlcGVuZAorICAgICAgICAgICMgb24gJGFjX2RpciBidXQgZG9uJ3QgZGVwZW5kIG9uIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAjIHBhcmFtZXRlcnMuCisgICAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCisgICAgICAgICAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgorICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCisgICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbm1lbnQgZnJvbSBhdXRvbWFrZSA8IDEuNS4KKyAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKKyAgICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSIkUE9NQUtFRklMRURFUFMgTElOR1VBUyIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyB3YXMgZ2l2ZW4gaW4gY29uZmlndXJlLmluLgorICAgICAgICAgICAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ25tZW50IGZyb20gYXV0b21ha2UgPCAxLjUuCisgICAgICAgICAgICBldmFsICdBTExfTElOR1VBUycnPSRPQlNPTEVURV9BTExfTElOR1VBUycKKyAgICAgICAgICBmaQorICAgICAgICAgICMgQ29tcHV0ZSBQT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykucG8pCisgICAgICAgICAgIyBDb21wdXRlIFVQREFURVBPRklMRVMKKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLnBvLXVwZGF0ZSkKKyAgICAgICAgICAjIENvbXB1dGUgRFVNTVlQT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5ub3ApCisgICAgICAgICAgIyBDb21wdXRlIEdNT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykuZ21vKQorICAgICAgICAgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisgICAgICAgICAgICAuKSBzcmNkaXJwcmU9IDs7CisgICAgICAgICAgICAqKSBzcmNkaXJwcmU9JyQoc3JjZGlyKS8nIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIFBPRklMRVM9CisgICAgICAgICAgVVBEQVRFUE9GSUxFUz0KKyAgICAgICAgICBEVU1NWVBPRklMRVM9CisgICAgICAgICAgR01PRklMRVM9CisgICAgICAgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgICAgICAgUE9GSUxFUz0iJFBPRklMRVMgJHNyY2RpcnByZSRsYW5nLnBvIgorICAgICAgICAgICAgVVBEQVRFUE9GSUxFUz0iJFVQREFURVBPRklMRVMgJGxhbmcucG8tdXBkYXRlIgorICAgICAgICAgICAgRFVNTVlQT0ZJTEVTPSIkRFVNTVlQT0ZJTEVTICRsYW5nLm5vcCIKKyAgICAgICAgICAgIEdNT0ZJTEVTPSIkR01PRklMRVMgJHNyY2RpcnByZSRsYW5nLmdtbyIKKyAgICAgICAgICBkb25lCisgICAgICAgICAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBMSU5HVUFTCisgICAgICAgICAgIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgICBJTlNUX0xJTkdVQVM9CisgICAgICAgICAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgZm9yIHByZXNlbnRsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgICAgICAgICAgdXNlaXQ9bm8KKyAgICAgICAgICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRMSU5HVUFTIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmb3IgZGVzaXJlZGxhbmcgaW4gJGRlc2lyZWRsYW5ndWFnZXM7IGRvCisgICAgICAgICAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKKyAgICAgICAgICAgICAgICAjICAgYS4gZXF1YWwgdG8gcHJlc2VudGxhbmcsIG9yCisgICAgICAgICAgICAgICAgIyAgIGIuIGEgdmFyaWFudCBvZiBwcmVzZW50bGFuZyAoYmVjYXVzZSBpbiB0aGlzIGNhc2UsCisgICAgICAgICAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgIyAgICAgIHdoaWNoIGFyZSBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZGVzaXJlZGxhbmcgY2F0YWxvZykuCisgICAgICAgICAgICAgICAgY2FzZSAiJGRlc2lyZWRsYW5nIiBpbgorICAgICAgICAgICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgIElOU1RfTElOR1VBUz0iJElOU1RfTElOR1VBUyAkcHJlc2VudGxhbmciCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgICBDQVRBTE9HUz0KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkSU5TVF9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgZm9yIGxhbmcgaW4gJElOU1RfTElOR1VBUzsgZG8KKyAgICAgICAgICAgICAgQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZy5nbW8iCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9NYWtlZmlsZSIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9NYWtlZmlsZSIKKyAgICAgICAgICBzZWQgLWUgIi9eUE9URklMRVMgPS9yICRhY19kaXIvUE9URklMRVMiIC1lICIvXiMgTWFrZXZhcnMvciAkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTWFrZXZhcnMiIC1lICJzfEBQT0ZJTEVTQHwkUE9GSUxFU3xnIiAtZSAic3xAVVBEQVRFUE9GSUxFU0B8JFVQREFURVBPRklMRVN8ZyIgLWUgInN8QERVTU1ZUE9GSUxFU0B8JERVTU1ZUE9GSUxFU3xnIiAtZSAic3xAR01PRklMRVNAfCRHTU9GSUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xAUE9NQUtFRklMRURFUFNAfCRQT01BS0VGSUxFREVQU3xnIiAiJGFjX2Rpci9NYWtlZmlsZS5pbiIgPiAiJGFjX2Rpci9NYWtlZmlsZSIKKyAgICAgICAgICBmb3IgZiBpbiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyIi9SdWxlcy0qOyBkbworICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCisgICAgICAgICAgICAgIGNhc2UgIiRmIiBpbgorICAgICAgICAgICAgICAgICoub3JpZyB8ICouYmFrIHwgKn4pIDs7CisgICAgICAgICAgICAgICAgKikgY2F0ICIkZiIgPj4gIiRhY19kaXIvTWFrZWZpbGUiIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZXNhYworICAgIGRvbmUgOzsKKworICBlc2FjCitkb25lICMgZm9yIGFjX3RhZworCisKK2FzX2ZuX2V4aXQgMAorX0FDRU9GCithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQorCit0ZXN0ICRhY193cml0ZV9mYWlsID0gMCB8fAorICBhc19mbl9lcnJvciAkPyAid3JpdGUgZmFpbHVyZSBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKworCisjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCisjIGNvbmZpZy5zdGF0dXMgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLCBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZy4KKyMgVW5mb3J0dW5hdGVseSwgb24gRE9TIHRoaXMgZmFpbHMsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdCBvcGVuCisjIGJ5IGNvbmZpZ3VyZSwgc28gY29uZmlnLnN0YXR1cyB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0OyBpdHMKKyMgb3V0cHV0IGlzIHNpbXBseSBkaXNjYXJkZWQuICBTbyB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsCisjIGVmZmVjdGl2ZWx5IGNsb3NpbmcgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kCisjIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5zdGF0dXMuICBXaGVuIGNvbWluZyBiYWNrIHRvIGNvbmZpZ3VyZSwgd2UKKyMgbmVlZCB0byBtYWtlIHRoZSBGRCBhdmFpbGFibGUgYWdhaW4uCitpZiB0ZXN0ICIkbm9fY3JlYXRlIiAhPSB5ZXM7IHRoZW4KKyAgYWNfY3Nfc3VjY2Vzcz06CisgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0KKyAgdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKyAgICBhY19jb25maWdfc3RhdHVzX2FyZ3M9IiRhY19jb25maWdfc3RhdHVzX2FyZ3MgLS1xdWlldCIKKyAgZXhlYyA1Pi9kZXYvbnVsbAorICAkU0hFTEwgJENPTkZJR19TVEFUVVMgJGFjX2NvbmZpZ19zdGF0dXNfYXJncyB8fCBhY19jc19zdWNjZXNzPWZhbHNlCisgIGV4ZWMgNT4+Y29uZmlnLmxvZworICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAorICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KKyAgJGFjX2NzX3N1Y2Nlc3MgfHwgYXNfZm5fZXhpdCAxCitmaQoraWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIiAmJiB0ZXN0ICIkZW5hYmxlX29wdGlvbl9jaGVja2luZyIgIT0gbm87IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMjt9CitmaQorCitpZiB0ZXN0IC1mIHV0aWwvZ2VuLXRhcmJhbGw7IHRoZW4gY2htb2QgK3ggdXRpbC9nZW4tdGFyYmFsbDsgZmkKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTQ2YmZlCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmluCkBAIC0wLDAgKzEsMTM0NiBAQAorQUNfSU5JVCh2ZXJzaW9uLmgpCitBQ19QUkVSRVEoMi41NCkKK0FDX0NPTkZJR19BVVhfRElSKGNvbmZpZykKK0FDX0NPTkZJR19IRUFERVJTKFtsaWIvY29uZmlnLmhdKQorQUhfQk9UVE9NKFsjaW5jbHVkZSA8ZGlycGF0aHMuaD5dKQorTUNPTkZJRz0uL01DT05GSUcKK0FDX1NVQlNUX0ZJTEUoTUNPTkZJRykKK0JJTkFSWV9UWVBFPWJpbgorZG5sCitkbmwgVGhpcyBpcyB0byBmaWd1cmUgb3V0IHRoZSB2ZXJzaW9uIG51bWJlciBhbmQgdGhlIGRhdGUuLi4uCitkbmwKK0UyRlNQUk9HU19WRVJTSU9OPWBncmVwIEUyRlNQUk9HU19WRVJTSU9OICR7c3JjZGlyfS92ZXJzaW9uLmggIFwKKwl8IGF3ayAne3ByaW50ICQzfScgfCB0ciBcIiAiICIgfCBhd2sgJ3twcmludCAkMX0nYAorREFURT1gZ3JlcCBFMkZTUFJPR1NfREFURSAke3NyY2Rpcn0vdmVyc2lvbi5oIHwgYXdrICd7cHJpbnQgJDN9JyBcCisJfCB0ciBcIiAiICJgCitFMkZTUFJPR1NfREFZPWBlY2hvICREQVRFIHwgYXdrIC1GLSAne3ByaW50ICQxfSdgCitNT05USD1gZWNobyAkREFURSB8IGF3ayAtRi0gJ3twcmludCAkMn0nYAorWUVBUj1gZWNobyAkREFURSB8IGF3ayAtRi0gJ3twcmludCAkM30nYAorCitpZiBleHByICRZRUFSICI+IiAxOTAwID4gL2Rldi9udWxsIDsgdGhlbgorCUUyRlNQUk9HU19ZRUFSPSRZRUFSCitlbGlmIGV4cHIgJFlFQVIgIj4iIDkwID4vZGV2L251bGwgOyB0aGVuCisJRTJGU1BST0dTX1lFQVI9MTkkWUVBUgorZWxzZQorCUUyRlNQUk9HU19ZRUFSPTIwJFlFQVIKK2ZpCisKK2Nhc2UgJE1PTlRIIGluCitKYW4pCU1PTlRIX05VTT0wMTsgRTJGU1BST0dTX01PTlRIPSJKYW51YXJ5IiA7OworRmViKQlNT05USF9OVU09MDI7IEUyRlNQUk9HU19NT05USD0iRmVicnVhcnkiIDs7CitNYXIpCU1PTlRIX05VTT0wMzsgRTJGU1BST0dTX01PTlRIPSJNYXJjaCIgOzsKK0FwcikJTU9OVEhfTlVNPTA0OyBFMkZTUFJPR1NfTU9OVEg9IkFwcmlsIiA7OworTWF5KQlNT05USF9OVU09MDU7IEUyRlNQUk9HU19NT05USD0iTWF5IiA7OworSnVuKQlNT05USF9OVU09MDY7IEUyRlNQUk9HU19NT05USD0iSnVuZSIgOzsKK0p1bCkJTU9OVEhfTlVNPTA3OyBFMkZTUFJPR1NfTU9OVEg9Ikp1bHkiIDs7CitBdWcpCU1PTlRIX05VTT0wODsgRTJGU1BST0dTX01PTlRIPSJBdWd1c3QiIDs7CitTZXApCU1PTlRIX05VTT0wOTsgRTJGU1BST0dTX01PTlRIPSJTZXB0ZW1iZXIiIDs7CitPY3QpCU1PTlRIX05VTT0xMDsgRTJGU1BST0dTX01PTlRIPSJPY3RvYmVyIiA7OworTm92KQlNT05USF9OVU09MTE7IEUyRlNQUk9HU19NT05USD0iTm92ZW1iZXIiIDs7CitEZWMpCU1PTlRIX05VTT0xMjsgRTJGU1BST0dTX01PTlRIPSJEZWNlbWJlciIgOzsKKyopCUFDX01TR19XQVJOKFtVbmtub3duIG1vbnRoICRNT05USD8/XSkgOzsKK2VzYWMKKworYmFzZV92ZXI9YGVjaG8gJEUyRlNQUk9HU19WRVJTSU9OIHwgXAorCSAgICAgICBzZWQgLWUgJ3MvLVdJUC8vJyAtZSAncy9wcmUtLy8nIC1lICdzLy1QTFVTLy8nYAorCitkYXRlX3NwZWM9JHtFMkZTUFJPR1NfWUVBUn0uJHtNT05USF9OVU19LiR7RTJGU1BST0dTX0RBWX0KKworY2FzZSAkRTJGU1BST0dTX1ZFUlNJT04gaW4KKyotV0lQfHByZS0qKQorCUUyRlNQUk9HU19QS0dWRVI9IiRiYXNlX3Zlcn5XSVAtJEUyRlNQUk9HU19ZRUFSLSRNT05USF9OVU0tJEUyRlNQUk9HU19EQVkiCisJOzsKKyopCisJRTJGU1BST0dTX1BLR1ZFUj0iJGJhc2VfdmVyIgorCTs7Citlc2FjCisKK3Vuc2V0IERBVEUgTU9OVEggWUVBUiBiYXNlX3ZlciBwcmVfdmVycyBkYXRlX3NwZWMKK0FDX01TR19SRVNVTFQoW0dlbmVyYXRpbmcgY29uZmlndXJhdGlvbiBmaWxlIGZvciBlMmZzcHJvZ3MgdmVyc2lvbiAkRTJGU1BST0dTX1ZFUlNJT05dKQorQUNfTVNHX1JFU1VMVChbUmVsZWFzZSBkYXRlIGlzICR7RTJGU1BST0dTX01PTlRIfSwgJHtFMkZTUFJPR1NfWUVBUn1dKQorQUNfU1VCU1QoRTJGU1BST0dTX1lFQVIpCitBQ19TVUJTVChFMkZTUFJPR1NfTU9OVEgpCitBQ19TVUJTVChFMkZTUFJPR1NfREFZKQorQUNfU1VCU1QoRTJGU1BST0dTX1ZFUlNJT04pCitBQ19TVUJTVChFMkZTUFJPR1NfUEtHVkVSKQorZG5sCitkbmwgVXNlIGRpZXQgbGliYworZG5sIAorV0lUSF9ESUVUX0xJQkM9CitBQ19BUkdfV0lUSChbZGlldC1saWJjXSwKK1sgIC0td2l0aC1kaWV0LWxpYmMgICAgICAgIHVzZSBkaWV0IGxpYmNdLAorQ0M9ImRpZXQgY2MgLW5vc3RkaW5jIgorV0lUSF9ESUVUX0xJQkM9eWVzCitpZiB0ZXN0IC16ICIkTElCUyIKK3RoZW4KKwlMSUJTPSItbGNvbXBhdCIKK2Vsc2UKKwlMSUJTPSIkTElCUyAtbGNvbXBhdCIKK2ZpCitBQ19NU0dfUkVTVUxUKENDPSRDQykpZG5sCitkbmwKK0FDX0NBTk9OSUNBTF9IT1NUCitkbmwKK2RubCBDaGVjayB0byBzZWUgaWYgbGliZGwgZXhpc3RzIGZvciB0aGUgc2FrZSBvZiBkbG9wZW4KK2RubAorRExPUEVOX0xJQj0nJworQUNfQ0hFQ0tfTElCKGRsLCBkbG9wZW4sCitbRExPUEVOX0xJQj0tbGRsCitBQ19ERUZJTkUoSEFWRV9ETE9QRU4sIDEsIFtEZWZpbmUgdG8gMSBpZiBkbG9wZW4vbGliZGwgZXhpc3RzXSldKQorQUNfU1VCU1QoRExPUEVOX0xJQikKK2RubAorQUNfQVJHX1dJVEgoW2NjXSwKK0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtY2NdLFtubyBsb25nZXIgc3VwcG9ydGVkLCB1c2UgQ0M9IGluc3RlYWRdKSwKK0FDX01TR19FUlJPUihbLS13aXRoLWNjIG5vIGxvbmdlciBzdXBwb3J0ZWQ7IHVzZSBDQz0gaW5zdGVhZF0pKQorZG5sCitBQ19BUkdfV0lUSChbY2NvcHRzXSwKK0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtY2NvcHRzXSxbbm8gbG9uZ2VyIHN1cHBvcnRlZCwgdXNlIENGTEFHUz0gaW5zdGVhZF0pLAorQUNfTVNHX0VSUk9SKFstLXdpdGgtY2NvcHRzIG5vIGxvbmdlciBzdXBwb3J0ZWQ7IHVzZSBDRkxBR1M9IGluc3RlYWRdKSkKK2RubAorQUNfQVJHX1dJVEgoW2xkb3B0c10sCitBQ19IRUxQX1NUUklORyhbLS13aXRoLWxkb3B0c10sW25vIGxvbmdlciBzdXBwb3J0ZWQsIHVzZSBMREZMQUdTPSBpbnN0ZWFkXSksCitBQ19NU0dfRVJST1IoWy0td2l0aC1sZG9wdHMgbm8gbG9uZ2VyIHN1cHBvcnRlZDsgdXNlIExERkxBR1M9IGluc3RlYWRdKSkKK2RubAorQUNfUFJPR19DQworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIFJEWU5BTUlDPSItcmR5bmFtaWMiCisgICBBQ19TVUJTVChSRFlOQU1JQykKK2ZpCitBQ19QUk9HX0NQUAorZG5sCitkbmwgQWxwaGEgY29tcHV0ZXJzIHVzZSBmYXN0IGFuZCBpbXByZWNpc2UgZmxvYXRpbmcgcG9pbnQgY29kZSB0aGF0IG1heQorZG5sIG1pc3MgZXhjZXB0aW9ucyBieSBkZWZhdWx0LiBGb3JjZSBzYW5lIG9wdGlvbnMgaWYgd2UncmUgdXNpbmcgR0NDLgorQUNfTVNHX0NIRUNLSU5HKGZvciBhZGRpdGlvbmFsIHNwZWNpYWwgY29tcGlsZXIgZmxhZ3MpCitpZiB0ZXN0ICIkR0NDIiA9IHllcwordGhlbgorICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKwlhbHBoYSkJCWFkZGNmbGFncz0iLW1pZWVlIiA7OworICAgIGVzYWMKK2ZpCitpZiB0ZXN0ICJ4JGFkZGNmbGFncyIgIT0geAordGhlbgorICAgIEFDX01TR19SRVNVTFQoJGFkZGNmbGFncykKKyAgICBDRkxBR1M9IiRhZGRjZmxhZ3MgJENGTEFHUyIKK2Vsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtbKG5vbmUpXV0pCitmaQorQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCitkbmwKK2RubCBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGxpYnJhcnkgZXh0ZW50aW9ucy4gIFdpbGwgYmUgZGVhbHQgd2l0aCBhZnRlcgorZG5sIHBhcnNpbmcgY29uZmlndXJhdGlvbiBvcGlvbnMsIHdoaWNoIG1heSBtb2RpZnkgdGhlc2UKK2RubAorTElCX0VYVD0uYQorU1RBVElDX0xJQl9FWFQ9LmEKK1BST0ZJTEVEX0xJQl9FWFQ9LmEKK2RubAorZG5sIEFsbG93IHNlcGFyYXRlIGByb290X3ByZWZpeCcgdG8gYmUgc3BlY2lmaWVkCitkbmwKK0FDX0FSR19XSVRIKFtyb290LXByZWZpeF0sCitbICAtLXdpdGgtcm9vdC1wcmVmaXg9UFJFRklYIG92ZXJyaWRlIHByZWZpeCB2YXJpYWJsZSBmb3IgZmlsZXMgdG8gYmUgcGxhY2VkIGluIHRoZSByb290XSwKK3Jvb3RfcHJlZml4PSR3aXRodmFsLAorcm9vdF9wcmVmaXg9Tk9ORSlkbmwKK2RubAorZG5sIGhhbmRsZSAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUKK2RubAorQUNfQVJHX0VOQUJMRShbbWFpbnRhaW5lci1tb2RlXSwKK1sgIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBlbmFibGUgbWFrZWZpbGUgcnVsZXMgdXNlZnVsIGZvciBtYWludGFpbmVyc10sCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlNQUlOVEFJTkVSX0NNVD0jCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIG1haW50YWluZXIgbW9kZV0pCitlbHNlCisJTUFJTlRBSU5FUl9DTVQ9CisJQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgbWFpbnRhaW5lciBtb2RlXSkKK2ZpCissCitNQUlOVEFJTkVSX0NNVD0jCitBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgbWFpbnRhaW5lciBtb2RlIGJ5IGRlZmF1bHRdKQorKQorQUNfU1VCU1QoTUFJTlRBSU5FUl9DTVQpCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtc3ltbGluay1pbnN0YWxsCitkbmwKK0FDX0FSR19FTkFCTEUoW3N5bWxpbmstaW5zdGFsbF0sCitbICAtLWVuYWJsZS1zeW1saW5rLWluc3RhbGwgdXNlIHN5bWxpbmtzIHdoZW4gaW5zdGFsbGluZyBpbnN0ZWFkIG9mIGhhcmQgbGlua3NdLAoraWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJTElOS19JTlNUQUxMX0ZMQUdTPS1mCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHN5bWxpbmtzIGZvciBpbnN0YWxsXSkKK2Vsc2UKKwlMSU5LX0lOU1RBTExfRkxBR1M9LXNmCisJQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgc3ltbGlua3MgZm9yIGluc3RhbGxdKQorZmkKKywKK0xJTktfSU5TVEFMTF9GTEFHUz0tZgorQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHN5bWxpbmtzIGZvciBpbnN0YWxsIGJ5IGRlZmF1bHRdKQorKQorQUNfU1VCU1QoTElOS19JTlNUQUxMX0ZMQUdTKQorZG5sCitkbmwgaGFuZGxlIC0tZW5hYmxlLXJlbGF0aXZlLXN5bWxpbmtzCitkbmwKK3JlbGF0aXZlX3N5bWxpbmtfZGVmaW5lZD0KK0FDX0FSR19FTkFCTEUoW3JlbGF0aXZlLXN5bWxpbmtzXSwKK1sgIC0tZW5hYmxlLXJlbGF0aXZlLXN5bWxpbmtzIHVzZSByZWxhdGl2ZSBzeW1saW5rcyB3aGVuIGluc3RhbGxpbmddLAoraWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJU1lNTElOS19SRUxBVElWRT0KKwlyZWxhdGl2ZV9zeW1saW5rX2RlZmluZWQ9eWVzCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHJlbGF0aXZlIHN5bWxpbmtzIGZvciBpbnN0YWxsXSkKK2Vsc2UKKwlTWU1MSU5LX1JFTEFUSVZFPS0tcmVsYXRpdmUKKwlyZWxhdGl2ZV9zeW1saW5rX2RlZmluZWQ9eWVzCisJQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgcmVsYXRpdmUgc3ltbGlua3MgZm9yIGluc3RhbGxdKQorZmkpCitBQ19BUkdfRU5BQkxFKFtzeW1saW5rLXJlbGF0aXZlLXN5bWxpbmtzXSwsCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlTWU1MSU5LX1JFTEFUSVZFPXllcworCUFDX01TR19SRVNVTFQoW0Rpc2FibGluZyByZWxhdGl2ZSBzeW1saW5rcyBmb3IgaW5zdGFsbF0pCitlbHNlCisJU1lNTElOS19SRUxBVElWRT0tLXJlbGF0aXZlCisJQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgcmVsYXRpdmUgc3ltbGlua3MgZm9yIGluc3RhbGxdKQorZmkKKywKK2lmIHRlc3QgLXogIiRyZWxhdGl2ZV9zeW1saW5rX2RlZmluZWQiCit0aGVuCisJU1lNTElOS19SRUxBVElWRT0KK0FDX01TR19SRVNVTFQoW0Rpc2FibGluZyByZWxhdGl2ZSBzeW1saW5rcyBmb3IgaW5zdGFsbCBieSBkZWZhdWx0XSkKK2ZpCispCitBQ19TVUJTVChTWU1MSU5LX1JFTEFUSVZFKQorZG5sCitkbmwgaGFuZGxlIC0tZW5hYmxlLXN5bWxpbmstYnVpbGQKK2RubAorQUNfQVJHX0VOQUJMRShbc3ltbGluay1idWlsZF0sCitbICAtLWVuYWJsZS1zeW1saW5rLWJ1aWxkICB1c2Ugc3ltbGlua3Mgd2hpbGUgYnVpbGRpbmcgaW5zdGVhZCBvZiBoYXJkIGxpbmtzXSwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUxJTktfQlVJTERfRkxBR1M9CisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHN5bWxpbmtzIGZvciBidWlsZF0pCitlbHNlCisJTElOS19CVUlMRF9GTEFHUz0tcworCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIHN5bWxpbmtzIGZvciBidWlsZF0pCitmaQorLAorTElOS19CVUlMRF9GTEFHUz0KK0FDX01TR19SRVNVTFQoW0Rpc2FibGluZyBzeW1saW5rcyBmb3IgYnVpbGQgYnkgZGVmYXVsdF0pCispCitBQ19TVUJTVChMSU5LX0JVSUxEX0ZMQUdTKQorZG5sCitkbmwgaGFuZGxlIC0tZW5hYmxlLXZlcmJvc2UtbWFrZWNtZHMKK2RubAorQUNfQVJHX0VOQUJMRShbdmVyYm9zZS1tYWtlY21kc10sCitbICAtLWVuYWJsZS12ZXJib3NlLW1ha2VjbWRzIGVuYWJsZSB2ZXJib3NlIG1ha2UgY29tbWFuZCBvdXRwdXRdLAoraWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHZlcmJvc2UgbWFrZSBjb21tYW5kc10pCisJRT1AZWNobworCUVTPWVjaG8KKwlRPUAKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyB2ZXJib3NlIG1ha2UgY29tbWFuZHNdKQorCUU9QFxcIworCUVTPVxcIworCVE9IAorZmkKKywKK0FDX01TR19SRVNVTFQoW0Rpc2FibGluZyB2ZXJib3NlIG1ha2UgY29tbWFuZHNdKQorRT1AZWNobworRVM9ZWNobworUT1ACispCitBQ19TVUJTVChFKQorQUNfU1VCU1QoRVMpCitBQ19TVUJTVChRKQorZG5sCitkbmwgaGFuZGxlIC0tZW5hYmxlLWNvbXByZXNzaW9uCitkbmwKK0FDX0FSR19FTkFCTEUoW2NvbXByZXNzaW9uXSwKK1sgIC0tZW5hYmxlLWNvbXByZXNzaW9uCSAgZW5hYmxlIEVYUEVSSU1FTlRBTCBjb21wcmVzc2lvbiBzdXBwb3J0XSwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUFDX01TR19SRVNVTFQoW0Rpc2FibGluZyBjb21wcmVzc2lvbiBzdXBwb3J0XSkKK2Vsc2UKKwlBQ19ERUZJTkUoRU5BQkxFX0NPTVBSRVNTSU9OLCAxLAorCQlbRGVmaW5lIHRvIDEgaWYgZXh0MiBjb21wcmVzc2lvbiBlbmFibGVkXSkKKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyBjb21wcmVzc2lvbiBzdXBwb3J0XSkKKwlBQ19NU0dfV0FSTihbQ29tcHJlc3Npb24gc3VwcG9ydCBpcyBleHBlcmltZW50YWxdKQorZmkKKywKK0FDX01TR19SRVNVTFQoW0Rpc2FibGluZyBjb21wcmVzc2lvbiBzdXBwb3J0IGJ5IGRlZmF1bHRdKQorKQorZG5sCitkbmwgaGFuZGxlIC0tZW5hYmxlLWh0cmVlCitkbmwKK0FIX1RFTVBMQVRFKFtFTkFCTEVfSFRSRUVdLCBbRGVmaW5lIHRvIDEgaWYgZXh0My80IGh0cmVlIHN1cHBvcnQgZW5hYmxlZF0pCitBQ19BUkdfRU5BQkxFKFtodHJlZV0sCitbICAtLWVuYWJsZS1odHJlZSAgICAgIAkgIGVuYWJsZSBFWFBFUklNRU5UQUwgaHRyZWUgZGlyZWN0b3J5IHN1cHBvcnRdLAoraWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJSFRSRUVfQ01UPSMKKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgaHRyZWUgZGlyZWN0b3J5IHN1cHBvcnRdKQorZWxzZQorCUhUUkVFX0NNVD0KKwlBQ19ERUZJTkUoRU5BQkxFX0hUUkVFLCAxKQorCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIGh0cmVlIGRpcmVjdG9yeSBzdXBwb3J0XSkKK2ZpCissCitIVFJFRV9DTVQ9CitBQ19ERUZJTkUoRU5BQkxFX0hUUkVFLCAxKQorQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgaHRyZWUgZGlyZWN0b3J5IHN1cHBvcnQgYnkgZGVmYXVsdF0pCispCitBQ19TVUJTVChIVFJFRV9DTVQpCitkbmwKK2RubCBUaGlzIG5lZWRzIHRvIGJlIGJlZm9yZSBhbGwgb2YgdGhlIC0tZW5hYmxlLSotc2hsaWJzIG9wdGlvbnMKK2RubAorRTJfUEtHX0NPTkZJR19TVEFUSUM9LS1zdGF0aWMKK0xERkxBR19EWU5BTUlDPQorUFJJVkFURV9MSUJTX0NNVD0KK2RubAorZG5sIGhhbmRsZSAtLWVuYWJsZS1lbGYtc2hsaWJzCitkbmwKK0FDX0FSR19FTkFCTEUoW2VsZi1zaGxpYnNdLAorWyAgLS1lbmFibGUtZWxmLXNobGlicwkgIHNlbGVjdCBFTEYgc2hhcmVkIGxpYnJhcmllc10sCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlFTEZfQ01UPSMKKwlNQUtFRklMRV9FTEY9L2Rldi9udWxsCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIEVMRiBzaGFyZWQgbGlicmFyaWVzXSkKK2Vsc2UKKwlFMl9QS0dfQ09ORklHX1NUQVRJQz0KKwlFTEZfQ01UPQorCU1BS0VGSUxFX0VMRj0kc3JjZGlyL2xpYi9NYWtlZmlsZS5lbGYtbGliCisJW2Nhc2UgIiRob3N0X29zIiBpbgorCXNvbGFyaXMyLiopCisJCU1BS0VGSUxFX0VMRj0kc3JjZGlyL2xpYi9NYWtlZmlsZS5zb2xhcmlzLWxpYgorCTs7CisJZXNhY10KKwlCSU5BUllfVFlQRT1lbGZiaW4KKwlMSUJfRVhUPS5zbworCVBSSVZBVEVfTElCU19DTVQ9IworCUxERkxBR19EWU5BTUlDPVsnLVdsLC1ycGF0aC1saW5rLCQodG9wX2J1aWxkZGlyKS9saWInXQorCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIEVMRiBzaGFyZWQgbGlicmFyaWVzXSkKK2ZpCissCitNQUtFRklMRV9FTEY9L2Rldi9udWxsCitFTEZfQ01UPSMKK0FDX01TR19SRVNVTFQoW0Rpc2FibGluZyBFTEYgc2hhcmVkIGxpYnJhcmllcyBieSBkZWZhdWx0XSkKKykKK0FDX1NVQlNUKEVMRl9DTVQpCitBQ19TVUJTVF9GSUxFKE1BS0VGSUxFX0VMRikKK2RubAorZG5sIGhhbmRsZSAtLWVuYWJsZS1ic2Qtc2hsaWJzCitkbmwKK0FDX0FSR19FTkFCTEUoW2JzZC1zaGxpYnNdLAorWyAgLS1lbmFibGUtYnNkLXNobGlicwkgIHNlbGVjdCBCU0Qgc2hhcmVkIGxpYnJhcmllc10sCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlCU0RMSUJfQ01UPSMKKwlNQUtFRklMRV9CU0RMSUI9L2Rldi9udWxsCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIEJTRCBzaGFyZWQgbGlicmFyaWVzXSkKK2Vsc2UKKwlFMl9QS0dfQ09ORklHX1NUQVRJQz0KKwlCU0RMSUJfQ01UPQorCU1BS0VGSUxFX0JTRExJQj0kc3JjZGlyL2xpYi9NYWtlZmlsZS5ic2QtbGliCisJTElCX0VYVD0uc28KKwlbY2FzZSAiJGhvc3Rfb3MiIGluCisJZGFyd2luKikKKwkJTUFLRUZJTEVfQlNETElCPSRzcmNkaXIvbGliL01ha2VmaWxlLmRhcndpbi1saWIKKwkJTElCX0VYVD0uZHlsaWIKKwk7OworCWVzYWNdCisJQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgQlNEIHNoYXJlZCBsaWJyYXJpZXNdKQorZmkKKywKK01BS0VGSUxFX0JTRExJQj0vZGV2L251bGwKK0JTRExJQl9DTVQ9IworQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIEJTRCBzaGFyZWQgbGlicmFyaWVzIGJ5IGRlZmF1bHRdKQorKQorQUNfU1VCU1QoQlNETElCX0NNVCkKK0FDX1NVQlNUX0ZJTEUoTUFLRUZJTEVfQlNETElCKQorZG5sCitkbmwgaGFuZGxlIC0tZW5hYmxlLXByb2ZpbGUKK2RubAorQUNfQVJHX0VOQUJMRShbcHJvZmlsZV0sCitbICAtLWVuYWJsZS1wcm9maWxlCSAgYnVpbGQgcHJvZmlsaW5nIGxpYnJhcmllc10sCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlQUk9GSUxFX0NNVD0jCisJTUFLRUZJTEVfUFJPRklMRT0vZGV2L251bGwKKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgcHJvZmlsaW5nIGxpYnJhcmllc10pCitlbHNlCisJUFJPRklMRV9DTVQ9CisJTUFLRUZJTEVfUFJPRklMRT0kc3JjZGlyL2xpYi9NYWtlZmlsZS5wcm9maWxlCisJUFJPRklMRURfTElCX0VYVD1fcC5hCisJQUNfTVNHX1JFU1VMVChbQnVpbGRpbmcgcHJvZmlsaW5nIGxpYnJhcmllc10pCitmaQorLAorUFJPRklMRV9DTVQ9IworTUFLRUZJTEVfUFJPRklMRT0vZGV2L251bGwKK0FDX01TR19SRVNVTFQoW0Rpc2FibGluZyBwcm9maWxpbmcgbGlicmFyaWVzIGJ5IGRlZmF1bHRdKQorKQorQUNfU1VCU1QoUFJPRklMRV9DTVQpCitBQ19TVUJTVF9GSUxFKE1BS0VGSUxFX1BST0ZJTEUpCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtZ2NvdgorZG5sCitBQ19BUkdfRU5BQkxFKFtnY292XSwKK1sgIC0tZW5hYmxlLWdjb3YJICAJICBidWlsZCBmb3IgY292ZXJhZ2UgdGVzdGluZyB1c2luZyBnY292XSwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gInllcyIKK3RoZW4KKwlDRkxBR1M9Ii1nIC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIKKwlMREZMQUdTPSItZnByb2ZpbGUtYXJjcyAtZnRlc3QtY292ZXJhZ2UiCisJQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgZ2NvdiBzdXBwb3J0XSkKK2ZpCispCisKK2RubAorZG5sIFN1YnN0aXR1dGUgbGlicmFyeSBleHRlbnNpb25zCitkbmwKK0FDX1NVQlNUKExJQl9FWFQpCitBQ19TVUJTVChTVEFUSUNfTElCX0VYVCkKK0FDX1NVQlNUKFBST0ZJTEVEX0xJQl9FWFQpCitBQ19TVUJTVChMREZMQUdfRFlOQU1JQykKK0FDX1NVQlNUKFBSSVZBVEVfTElCU19DTVQpCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtamJkLWRlYnVnCitkbmwKK0FDX0FSR19FTkFCTEUoW2piZC1kZWJ1Z10sCitbICAtLWVuYWJsZS1qYmQtZGVidWcgIAkgIGVuYWJsZSBqb3VybmFsIGRlYnVnZ2luZ10sCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgam91cm5hbCBkZWJ1Z2dpbmddKQorZWxzZQorCUFDX0RFRklORShDT05GSUdfSkJEX0RFQlVHLCAxLAorCQlbRGVmaW5lIHRvIDEgaWYgZGVidWdnaW5nIGV4dDMvNCBqb3VybmFsIGNvZGVdKQorCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIGpvdXJuYWwgZGVidWdnaW5nXSkKK2ZpCissCitBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgam91cm5hbCBkZWJ1Z2dpbmcgYnkgZGVmYXVsdF0pCispCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtYmxraWQtZGVidWcKK2RubAorQUNfQVJHX0VOQUJMRShbYmxraWQtZGVidWddLAorWyAgLS1lbmFibGUtYmxraWQtZGVidWcgICAgZW5hYmxlIGJsa2lkIGRlYnVnZ2luZ10sCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgYmxraWQgZGVidWdnaW5nXSkKK2Vsc2UKKwlBQ19ERUZJTkUoQ09ORklHX0JMS0lEX0RFQlVHLCAxLAorCQlbRGVmaW5lIHRvIDEgaWYgZGVidWdnaW5nIHRoZSBibGtpZCBsaWJyYXJ5XSkKKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyBibGtpZCBkZWJ1Z2dpbmddKQorZmkKKywKK0FDX01TR19SRVNVTFQoW0Rpc2FibGluZyBibGtpZCBkZWJ1Z2dpbmcgYnkgZGVmYXVsdF0pCispCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtdGVzdGlvLWRlYnVnCitkbmwKK0FDX0FSR19FTkFCTEUoW3Rlc3Rpby1kZWJ1Z10sCitbICAtLWRpc2FibGUtdGVzdGlvLWRlYnVnICBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIHRlc3QgSS9PIG1hbmFnZXIgZm9yIGRlYnVnZ2luZ10sCitBSF9URU1QTEFURShbQ09ORklHX1RFU1RJT19ERUJVR10sCisJW0RlZmluZSB0byAxIGlmIHRoZSB0ZXN0aW8gSS9PIG1hbmFnZXIgc2hvdWxkIGJlIGVuYWJsZWRdKQoraWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHRlc3RpbyBkZWJ1Z2dpbmddKQorCVRFU1RfSU9fQ01UPSIjIgorZWxzZQorCVRFU1RfSU9fQ01UPQorCUFDX0RFRklORShDT05GSUdfVEVTVElPX0RFQlVHLCAxKQorCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIHRlc3RpbyBkZWJ1Z2dpbmddKQorZmkKKywKK0FDX01TR19SRVNVTFQoW0VuYWJsaW5nIHRlc3RpbyBkZWJ1Z2dpbmcgYnkgZGVmYXVsdF0pCitBQ19ERUZJTkUoQ09ORklHX1RFU1RJT19ERUJVRywgMSkKK1RFU1RfSU9fQ01UPQorKQorQUNfU1VCU1QoVEVTVF9JT19DTVQpCitkbmwKK2RubCBoYW5kbGUgLS1kaXNhYmxlLWxpYnV1aWQKK2RubAorUEtHX1BST0dfUEtHX0NPTkZJRworTElCVVVJRD0KK0RFUExJQlVVSUQ9CitTVEFUSUNfTElCVVVJRD0KK0RFUFNUQVRJQ19MSUJVVUlEPQorUFJPRklMRURfTElCVVVJRD0KK0RFUFBST0ZJTEVEX0xJQlVVSUQ9CitVVUlEX0NNVD0KK0FDX0FSR19FTkFCTEUoW2xpYnV1aWRdLAorWyAgLS1kaXNhYmxlLWxpYnV1aWQJICBkbyBub3QgYnVpbGQgcHJpdmF0ZSB1dWlkIGxpYnJhcnldLAoraWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJaWYgdGVzdCAteiAiJFBLR19DT05GSUciOyB0aGVuCisJCUFDX01TR19FUlJPUihbcGtnLWNvbmZpZyBub3QgaW5zdGFsbGVkOyBwbGVhc2UgaW5zdGFsbCBpdC5dKQorCWZpCisKKwlBQ19DSEVDS19MSUIodXVpZCwgdXVpZF9nZW5lcmF0ZSwKKwkJW0xJQlVVSUQ9YCRQS0dfQ09ORklHIC0tbGlicyB1dWlkYDsKKwkJIFNUQVRJQ19MSUJVVUlEPWAkUEtHX0NPTkZJRyAtLXN0YXRpYyAtLWxpYnMgdXVpZGBdLAorCQlbQUNfTVNHX0VSUk9SKFtleHRlcm5hbCB1dWlkIGxpYnJhcnkgbm90IGZvdW5kXSldKQorCVBST0ZJTEVEX0xJQlVVSUQ9JExJQlVVSUQKKwlVVUlEX0NNVD0jCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHByaXZhdGUgdXVpZCBsaWJyYXJ5XSkKK2Vsc2UKKwlMSUJVVUlEPSckKExJQikvbGlidXVpZCckTElCX0VYVAorCURFUExJQlVVSUQ9JExJQlVVSUQKKwlTVEFUSUNfTElCVVVJRD0nJChMSUIpL2xpYnV1aWQnJFNUQVRJQ19MSUJfRVhUCisJREVQU1RBVElDX0xJQlVVSUQ9JFNUQVRJQ19MSUJVVUlECisJUFJPRklMRURfTElCVVVJRD0nJChMSUIpL2xpYnV1aWQnJFBST0ZJTEVEX0xJQl9FWFQKKwlERVBQUk9GSUxFRF9MSUJVVUlEPSRQUk9GSUxFRF9MSUJVVUlECisJQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgcHJpdmF0ZSB1dWlkIGxpYnJhcnldKQorZmkKKywKK0xJQlVVSUQ9JyQoTElCKS9saWJ1dWlkJyRMSUJfRVhUCitERVBMSUJVVUlEPSRMSUJVVUlECitTVEFUSUNfTElCVVVJRD0nJChMSUIpL2xpYnV1aWQnJFNUQVRJQ19MSUJfRVhUCitERVBTVEFUSUNfTElCVVVJRD0kU1RBVElDX0xJQlVVSUQKK1BST0ZJTEVEX0xJQlVVSUQ9JyQoTElCKS9saWJ1dWlkJyRQUk9GSUxFRF9MSUJfRVhUCitERVBQUk9GSUxFRF9MSUJVVUlEPSRQUk9GSUxFRF9MSUJVVUlECitBQ19NU0dfUkVTVUxUKFtFbmFibGluZyBwcml2YXRlIHV1aWQgbGlicmFyeSBieSBkZWZhdWx0XSkKKykKK0FDX1NVQlNUKExJQlVVSUQpCitBQ19TVUJTVChERVBMSUJVVUlEKQorQUNfU1VCU1QoU1RBVElDX0xJQlVVSUQpCitBQ19TVUJTVChERVBTVEFUSUNfTElCVVVJRCkKK0FDX1NVQlNUKFBST0ZJTEVEX0xJQlVVSUQpCitBQ19TVUJTVChERVBQUk9GSUxFRF9MSUJVVUlEKQorQUNfU1VCU1QoVVVJRF9DTVQpCitkbmwKK2RubCBoYW5kbGUgLS1kaXNhYmxlLWxpYmJsa2lkCitkbmwKK1BLR19QUk9HX1BLR19DT05GSUcKK0xJQkJMS0lEPQorREVQTElCQkxLSUQ9CitTVEFUSUNfTElCQkxLSUQ9CitERVBTVEFUSUNfTElCQkxLSUQ9CitQUk9GSUxFRF9MSUJCTEtJRD0KK0RFUFBST0ZJTEVEX0xJQkJMS0lEPQorQkxLSURfQ01UPQorQUhfVEVNUExBVEUoW0NPTkZJR19CVUlMRF9GSU5ERlNdLCBbRGVmaW5lIHRvIDEgdG8gY29tcGlsZSBmaW5kZnNdKQorQUNfQVJHX0VOQUJMRShbbGliYmxraWRdLAorWyAgLS1kaXNhYmxlLWxpYmJsa2lkCSAgZG8gbm90IGJ1aWxkIHByaXZhdGUgYmxraWQgbGlicmFyeV0sCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlpZiB0ZXN0IC16ICIkUEtHX0NPTkZJRyI7IHRoZW4KKwkJQUNfTVNHX0VSUk9SKFtwa2ctY29uZmlnIG5vdCBpbnN0YWxsZWQ7IHBsZWFzZSBpbnN0YWxsIGl0Ll0pCisJZmkKKworCUFDX0NIRUNLX0xJQihibGtpZCwgYmxraWRfZ2V0X2NhY2hlLAorCQlbTElCQkxLSUQ9YCRQS0dfQ09ORklHIC0tbGlicyBibGtpZGA7CisJCSBTVEFUSUNfTElCQkxLSUQ9YCRQS0dfQ09ORklHIC0tc3RhdGljIC0tbGlicyBibGtpZGBdLAorCQlbQUNfTVNHX0VSUk9SKFtleHRlcm5hbCBibGtpZCBsaWJyYXJ5IG5vdCBmb3VuZF0pXSwgLWx1dWlkKQorCUJMS0lEX0NNVD0jCisJUFJPRklMRURfTElCQkxLSUQ9JExJQkJMS0lECisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHByaXZhdGUgYmxraWQgbGlicmFyeV0pCitlbHNlCisJTElCQkxLSUQ9JyQoTElCKS9saWJibGtpZCckTElCX0VYVAorCURFUExJQkJMS0lEPSRMSUJCTEtJRAorCVNUQVRJQ19MSUJCTEtJRD0nJChMSUIpL2xpYmJsa2lkJyRTVEFUSUNfTElCX0VYVAorCURFUFNUQVRJQ19MSUJCTEtJRD0kU1RBVElDX0xJQkJMS0lECisJUFJPRklMRURfTElCQkxLSUQ9JyQoTElCKS9saWJibGtpZCckUFJPRklMRURfTElCX0VYVAorCURFUFBST0ZJTEVEX0xJQkJMS0lEPSRQUk9GSUxFRF9MSUJCTEtJRAorCUFDX0RFRklORShDT05GSUdfQlVJTERfRklOREZTLCAxKQorCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIHByaXZhdGUgYmxraWQgbGlicmFyeV0pCitmaQorLAorTElCQkxLSUQ9JyQoTElCKS9saWJibGtpZCckTElCX0VYVAorREVQTElCQkxLSUQ9JExJQkJMS0lECitTVEFUSUNfTElCQkxLSUQ9JyQoTElCKS9saWJibGtpZCckU1RBVElDX0xJQl9FWFQKK0RFUFNUQVRJQ19MSUJCTEtJRD0kU1RBVElDX0xJQkJMS0lECitQUk9GSUxFRF9MSUJCTEtJRD0nJChMSUIpL2xpYmJsa2lkJyRQUk9GSUxFRF9MSUJfRVhUCitERVBQUk9GSUxFRF9MSUJCTEtJRD0kUFJPRklMRURfTElCQkxLSUQKK0FDX0RFRklORShDT05GSUdfQlVJTERfRklOREZTLCAxKQorQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgcHJpdmF0ZSBibGtpZCBsaWJyYXJ5IGJ5IGRlZmF1bHRdKQorKQorQUNfU1VCU1QoTElCQkxLSUQpCitBQ19TVUJTVChERVBMSUJCTEtJRCkKK0FDX1NVQlNUKFNUQVRJQ19MSUJCTEtJRCkKK0FDX1NVQlNUKERFUFNUQVRJQ19MSUJCTEtJRCkKK0FDX1NVQlNUKFBST0ZJTEVEX0xJQkJMS0lEKQorQUNfU1VCU1QoREVQUFJPRklMRURfTElCQkxLSUQpCitBQ19TVUJTVChCTEtJRF9DTVQpCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtcXVvdGEKK2RubAorUVVPVEFfTUFOX0NPTU1FTlQ9Jy5cIicKK1FVT1RBX0NNVD0KK0FDX1NVQlNUKFFVT1RBX01BTl9DT01NRU5UKQorUEtHX1BST0dfUEtHX0NPTkZJRworQUhfVEVNUExBVEUoW0NPTkZJR19RVU9UQV0sIFtEZWZpbmUgdG8gMSB0byBlbmFibGUgcXVvdGEgc3VwcG9ydF0pCitBQ19BUkdfRU5BQkxFKFtxdW90YV0sCitbICAtLWVuYWJsZS1xdW90YQkgIGVuYWJsZSBxdW90YSBzdXBwb3J0XSwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCVFVT1RBX0NNVD0jCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHF1b3RhIHN1cHBvcnRdKQorZWxzZQorCVFVT1RBX0NNVD0KKwlBQ19ERUZJTkUoQ09ORklHX1FVT1RBLCAxKQorCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIHF1b3RhIHN1cHBvcnRdKQorCVFVT1RBX01BTl9DT01NRU5UPSIiCisJQUNfU1VCU1QoUVVPVEFfTUFOX0NPTU1FTlQpCitmaQorLAorUVVPVEFfQ01UPSMKK0FDX01TR19SRVNVTFQoW0Rpc2FibGluZyBxdW90YSBzdXBwb3J0IGJ5IGRlZmF1bHRdKQorKQorZG5sCitkbmwgRGVmaW5lIHN0dWZmIGV4cGVjdGVkIGZvciBxdW90YSBsaWJyYXJ5CitkbmwKK0xJQlFVT1RBPSckKExJQikvbGlicXVvdGEnJExJQl9FWFQKK0RFUExJQlFVT1RBPSRMSUJRVU9UQQorU1RBVElDX0xJQlFVT1RBPSckKExJQikvbGlicXVvdGEnJFNUQVRJQ19MSUJfRVhUCitERVBTVEFUSUNfTElCUVVPVEE9JFNUQVRJQ19MSUJRVU9UQQorUFJPRklMRURfTElCUVVPVEE9JyQoTElCKS9saWJxdW90YSckUFJPRklMRURfTElCX0VYVAorREVQUFJPRklMRURfTElCUVVPVEE9JFBST0ZJTEVEX0xJQlFVT1RBCitBQ19TVUJTVChMSUJRVU9UQSkKK0FDX1NVQlNUKERFUExJQlFVT1RBKQorQUNfU1VCU1QoU1RBVElDX0xJQlFVT1RBKQorQUNfU1VCU1QoREVQU1RBVElDX0xJQlFVT1RBKQorQUNfU1VCU1QoUFJPRklMRURfTElCUVVPVEEpCitBQ19TVUJTVChERVBQUk9GSUxFRF9MSUJRVU9UQSkKK0FDX1NVQlNUKFFVT1RBX0NNVCkKK2RubAorZG5sIGhhbmRsZSAtLWRpc2FibGUtYmFja3RyYWNlCitkbmwKK0FIX1RFTVBMQVRFKFtESVNBQkxFX0JBQ0tUUkFDRV0sIFtEZWZpbmUgdG8gMSB0byBkaXNhYmxlIHVzZSBvZiBiYWNrdHJhY2VdKQorQUNfQVJHX0VOQUJMRShbYmFja3RyYWNlXSwKK1sgIC0tZGlzYWJsZS1iYWNrdHJhY2UJICBkaXNhYmxlIHVzZSBiYWNrdHJhY2VdLAoraWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHVzZSBvZiBiYWNrdHJhY2VdKQorCUFDX0RFRklORShESVNBQkxFX0JBQ0tUUkFDRSwgMSkKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyB1c2Ugb2YgYmFja3RyYWNlXSkKK2ZpCissCitBQ19NU0dfUkVTVUxUKFtFbmFibGluZyB1c2Ugb2YgYmFja3RyYWNlIGJ5IGRlZmF1bHRdKQorKQorZG5sCitkbmwgaGFuZGxlIC0tZW5hYmxlLWRlYnVnZnMKK2RubAorQUNfQVJHX0VOQUJMRShbZGVidWdmc10sCitbICAtLWRpc2FibGUtZGVidWdmcyAgIAkgIGRpc2FibGUgc3VwcG9ydCBvZiBkZWJ1Z2ZzIHByb2dyYW1dLAoraWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIGRlYnVnZnMgc3VwcG9ydF0pCisJREVCVUdGU19DTVQ9IiMiCitlbHNlCisJREVCVUdGU19DTVQ9CisJQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgZGVidWdmcyBzdXBwb3J0XSkKK2ZpCissCitBQ19NU0dfUkVTVUxUKFtFbmFibGluZyBkZWJ1Z2ZzIHN1cHBvcnQgYnkgZGVmYXVsdF0pCitERUJVR0ZTX0NNVD0KKykKK0FDX1NVQlNUKERFQlVHRlNfQ01UKQorZG5sCitkbmwgaGFuZGxlIC0tZW5hYmxlLWltYWdlcgorZG5sCitBQ19BUkdfRU5BQkxFKFtpbWFnZXJdLAorWyAgLS1kaXNhYmxlLWltYWdlciAgIAkgIGRpc2FibGUgc3VwcG9ydCBvZiBlMmltYWdlIHByb2dyYW1dLAoraWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIGUyaW1hZ2Ugc3VwcG9ydF0pCisJSU1BR0VSX0NNVD0iIyIKK2Vsc2UKKwlJTUFHRVJfQ01UPQorCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIGUyaW1hZ2Ugc3VwcG9ydF0pCitmaQorLAorQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgZTJpbWFnZSBzdXBwb3J0IGJ5IGRlZmF1bHRdKQorSU1BR0VSX0NNVD0KKykKK0FDX1NVQlNUKElNQUdFUl9DTVQpCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtcmVzaXplcgorZG5sCitBQ19BUkdfRU5BQkxFKFtyZXNpemVyXSwKK1sgIC0tZGlzYWJsZS1yZXNpemVyICAgCSAgZGlzYWJsZSBzdXBwb3J0IG9mIGUycmVzaXplIHByb2dyYW1dLAoraWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIGUycmVzaXplIHN1cHBvcnRdKQorCVJFU0laRVJfQ01UPSIjIgorZWxzZQorCVJFU0laRVJfQ01UPQorCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIGUycmVzaXplIHN1cHBvcnRdKQorZmkKKywKK0FDX01TR19SRVNVTFQoW0VuYWJsaW5nIGUycmVzaXplIHN1cHBvcnQgYnkgZGVmYXVsdF0pCitSRVNJWkVSX0NNVD0KKykKK0FDX1NVQlNUKFJFU0laRVJfQ01UKQorZG5sCitkbmwgaGFuZGxlIC0tZW5hYmxlLWRlZnJhZworZG5sCitBQ19BUkdfRU5BQkxFKFtkZWZyYWddLAorWyAgLS1kaXNhYmxlLWRlZnJhZyAgIAkgIGRpc2FibGUgc3VwcG9ydCBvZiBlNGRlZnJhZyBwcm9ncmFtXSwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUFDX01TR19SRVNVTFQoW0Rpc2FibGluZyBlNGRlZnJhZyBzdXBwb3J0XSkKKwlERUZSQUdfQ01UPSIjIgorZWxzZQorCURFRlJBR19DTVQ9CisJQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgZTRkZWZyYWcgc3VwcG9ydF0pCitmaQorLAoraWYgdGVzdCAteiAiJFdJVEhfRElFVF9MSUJDIgordGhlbgorCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIGU0ZGVmcmFnIHN1cHBvcnQgYnkgZGVmYXVsdF0pCisJREVGUkFHX0NNVD0KK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgZTRkZWZyYWcgc3VwcG9ydCBieSBkZWZhdWx0XSkKKwlERUZSQUdfQ01UPSIjIgorZmkKKykKK0FDX1NVQlNUKERFRlJBR19DTVQpCitkbmwKK2RubCBTZWUgd2hldGhlciB0byBpbnN0YWxsIHRoZSBgZnNjaycgd3JhcHBlciBwcm9ncmFtICh0aGF0IGNhbGxzIGUyZnNjaykKK2RubAorQUNfQVJHX0VOQUJMRShbZnNja10sCitbICAtLWVuYWJsZS1mc2NrICAgICAgICAgICBidWlsZCBmc2NrIHdyYXBwZXIgcHJvZ3JhbV0sCitbaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJRlNDS19QUk9HPScnIEZTQ0tfTUFOPScnCisJQUNfTVNHX1JFU1VMVChbTm90IGJ1aWxkaW5nIGZzY2sgd3JhcHBlcl0pCitlbHNlCisJRlNDS19QUk9HPWZzY2sgRlNDS19NQU49ZnNjay44CisJQUNfTVNHX1JFU1VMVChbQnVpbGRpbmcgZnNjayB3cmFwcGVyXSkKK2ZpXQorLAorW2Nhc2UgIiRob3N0X29zIiBpbgorICBnbnUqKQorICAgIEZTQ0tfUFJPRz0nJyBGU0NLX01BTj0nJworICAgIEFDX01TR19SRVNVTFQoW05vdCBidWlsZGluZyBmc2NrIHdyYXBwZXIgYnkgZGVmYXVsdF0pCisgICAgOzsKKyAgKikKKyAgICBGU0NLX1BST0c9ZnNjayBGU0NLX01BTj1mc2NrLjgKKyAgICBBQ19NU0dfUkVTVUxUKFtCdWlsZGluZyBmc2NrIHdyYXBwZXIgYnkgZGVmYXVsdF0pCitlc2FjXQorKQorQUNfU1VCU1QoRlNDS19QUk9HKQorQUNfU1VCU1QoRlNDS19NQU4pCitkbmwKK2RubCBTZWUgd2hldGhlciB0byBpbnN0YWxsIHRoZSBgZTJpbml0cmQtaGVscGVyJyBwcm9ncmFtCitkbmwKK0FDX0FSR19FTkFCTEUoW2UyaW5pdHJkLWhlbHBlcl0sCitbICAtLWVuYWJsZS1lMmluaXRyZC1oZWxwZXIgYnVpbGQgZTJpbml0cmQtaGVscGVyIHByb2dyYW1dLAorW2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUUySU5JVFJEX1BST0c9JycgRTJJTklUUkRfTUFOPScnCisJQUNfTVNHX1JFU1VMVChbTm90IGJ1aWxkaW5nIGUyaW5pdHJkIGhlbHBlcl0pCitlbHNlCisJRTJJTklUUkRfUFJPRz1lMmluaXRyZF9oZWxwZXIgRTJJTklUUkRfTUFOPWUyaW5pdHJkX2hlbHBlci44CisJQUNfTVNHX1JFU1VMVChbQnVpbGRpbmcgZTJpbml0cmQgaGVscGVyXSkKK2ZpXQorLAorRTJJTklUUkRfUFJPRz1lMmluaXRyZF9oZWxwZXIgRTJJTklUUkRfTUFOPWUyaW5pdHJkX2hlbHBlci44CitBQ19NU0dfUkVTVUxUKFtCdWlsZGluZyBlMmluaXRyZCBoZWxwZXIgYnkgZGVmYXVsdF0pCispCitBQ19TVUJTVChFMklOSVRSRF9QUk9HKQorQUNfU1VCU1QoRTJJTklUUkRfTUFOKQorZG5sCitkbmwKK2RubAorQUNfQVJHX0VOQUJMRShbdGxzXSwKK1sgIC0tZGlzYWJsZS10bHMgICAgICAgICAgIGRpc2FibGUgdXNlIG9mIHRocmVhZCBsb2NhbCBzdXBwb3J0XSwKK1tpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwl0cnlfdGxzPSIiCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHRocmVhZCBsb2NhbCBzdXBwb3J0XSkKK2Vsc2UKKwl0cnlfdGxzPSJ5ZXMiCisJQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgdGhyZWFkIGxvY2FsIHN1cHBvcnRdKQorZmldCissCitpZiB0ZXN0IC1uICIkV0lUSF9ESUVUX0xJQkMiCit0aGVuCisJdHJ5X3Rscz0iIgorCUFDX01TR19SRVNVTFQoW0RpZXQgbGliYyBkb2VzIG5vdCBzdXBwb3J0IHRocmVhZCBsb2NhbCBzdXBwb3J0XSkKK2Vsc2UKKwl0cnlfdGxzPSJ5ZXMiCisJQUNfTVNHX1JFU1VMVChbVHJ5IHVzaW5nIHRocmVhZCBsb2NhbCBzdXBwb3J0IGJ5IGRlZmF1bHRdKQorZmkKKykKK2lmIHRlc3QgIiR0cnlfdGxzIiA9ICJ5ZXMiCit0aGVuCitBWF9UTFMKK2ZpCitkbmwKK2RubAorZG5sCitBSF9URU1QTEFURShbVVNFX1VVSUREXSwgW0RlZmluZSB0byAxIHRvIGJ1aWxkIHV1aWRkXSkKK0FDX0FSR19FTkFCTEUoW3V1aWRkXSwKK1sgIC0tZGlzYWJsZS11dWlkZCAgICAgICAgIGRpc2FibGUgYnVpbGRpbmcgdGhlIHV1aWQgZGFlbW9uXSwKK1tpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlBQ19NU0dfUkVTVUxUKFtOb3QgYnVpbGRpbmcgdXVpZGRdKQorCVVVSUREX0NNVD0iIyIKK2Vsc2UKKwlBQ19ERUZJTkUoVVNFX1VVSURELCAxKQorCVVVSUREX0NNVD0iIgorCUFDX01TR19SRVNVTFQoW0J1aWxkaW5nIHV1aWRkXSkKK2ZpXQorLAorQUNfREVGSU5FKFVTRV9VVUlERCwgMSkKK2lmIHRlc3QgLXogIiRVVUlEX0NNVCIKK3RoZW4KKwlVVUlERF9DTVQ9IiIKKwlBQ19NU0dfUkVTVUxUKFtCdWlsZGluZyB1dWlkZCBieSBkZWZhdWx0XSkKK2Vsc2UKKwlVVUlERF9DTVQ9IiMiCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHV1aWRkIGJ5IGRlZmF1bHRdKQorZmkKKykKK0FDX1NVQlNUKFVVSUREX0NNVCkKK2RubAorZG5sCitkbmwKK01BS0VGSUxFX0xJQlJBUlk9JHNyY2Rpci9saWIvTWFrZWZpbGUubGlicmFyeQorQUNfU1VCU1RfRklMRShNQUtFRklMRV9MSUJSQVJZKQorZG5sCitkbmwgQWRkIGludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQsIHVzaW5nIGdldHRleHQuCitkbmwKK0dFVFRFWFRfUEFDS0FHRT1lMmZzcHJvZ3MKK1BBQ0tBR0U9ZTJmc3Byb2dzCitWRVJTSU9OPSIkRTJGU1BST0dTX1ZFUlNJT04iCitWRVJTSU9OPTAuMTQuMQorQUNfREVGSU5FX1VOUVVPVEVEKFBBQ0tBR0UsICIkUEFDS0FHRSIsIFtwYWNrYWdlIG5hbWUgZm9yIGdldHRleHRdKQorQUNfREVGSU5FX1VOUVVPVEVEKFZFUlNJT04sICIkVkVSU0lPTiIsIFt2ZXJzaW9uIGZvciBnZXR0ZXh0XSkKK0FDX1NVQlNUKEdFVFRFWFRfUEFDS0FHRSkKK0FDX1NVQlNUKFBBQ0tBR0UpCitBQ19TVUJTVChWRVJTSU9OKQorCitBTV9HTlVfR0VUVEVYVAorZG5sCitkbmwgRW5kIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworZG5sCitBQ19TVUJTVChCSU5BUllfVFlQRSkKK0FDX1BST0dfTUFLRV9TRVQKK0NIRUNLX0dOVV9NQUtFCitBQ19QQVRIX1BST0coTE4sIGxuLCBsbikKK0FDX1BST0dfTE5fUworQUNfUEFUSF9QUk9HKE1WLCBtdiwgbXYpCitBQ19QQVRIX1BST0coQ1AsIGNwLCBjcCkKK0FDX1BBVEhfUFJPRyhSTSwgcm0sIHJtKQorQUNfUEFUSF9QUk9HKENITU9ELCBjaG1vZCwgOikKK0FDX1BST0dfQVdLCitBQ19QUk9HX0VHUkVQCitBQ19QQVRIX1BST0coU0VELCBzZWQsIHNlZCkKK0FDX1BBVEhfUFJPRyhQRVJMLCBwZXJsLCBwZXJsKQorQUNfUEFUSF9QUk9HKExEQ09ORklHLCBsZGNvbmZpZywgOikKK0FDX0NIRUNLX1RPT0woQVIsIGFyLCBhcikKK0FDX0NIRUNLX1RPT0woUkFOTElCLCByYW5saWIsIDopCitBQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCwgOikKK0FDX0NIRUNLX1BST0coTUFLRUlORk8sIG1ha2VpbmZvLCBtYWtlaW5mbywgKQoraWYgdGVzdCAiXyRNQUtFSU5GTyIgPSAiXyI7IHRoZW4KKyAgICBNQUtFSU5GTz0iQGVjaG8gTWFrZWluZm8gaXMgbWlzc2luZy4gSW5mbyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IGJlIGJ1aWx0Ljt0cnVlIgorZWxzZQorICAgIGNhc2UgIiRNQUtFSU5GTyIgaW4KKyAgICAgICovbWlzc2luZy4qKQorICAgICAgICBBQ19NU0dfV0FSTihbCisqKiogTWFrZWluZm8gaXMgbWlzc2luZy4gSW5mbyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IGJlIGJ1aWx0Ll0pCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICA7OworICAgIGVzYWMKK2ZpCitBQ19TVUJTVChNQUtFSU5GTykKK0FDX1BST0dfSU5TVEFMTAorIyBTZWUgaWYgd2UgbmVlZCBhIHNlcGFyYXRlIG5hdGl2ZSBjb21waWxlci4KK2lmIHRlc3QgJGNyb3NzX2NvbXBpbGluZyA9IG5vOyB0aGVuCisgIEJVSUxEX0NDPSIkQ0MiCisgIEFDX1NVQlNUKEJVSUxEX0NDKQorZWxzZQorICBBQ19DSEVDS19QUk9HUyhCVUlMRF9DQywgZ2NjIGNjKQorZmkKK0FDX0NIRUNLX0hFQURFUlMobTRfZmxhdHRlbihbCisJZGlyZW50LmgKKwllcnJuby5oCisJZXhlY2luZm8uaAorCWdldG9wdC5oCisJbWFsbG9jLmgKKwltbnRlbnQuaAorCXBhdGhzLmgKKwlzZW1hcGhvcmUuaAorCXNldGptcC5oCisJc2lnbmFsLmgKKwlzdGRhcmcuaAorCXN0ZGludC5oCisJc3RkbGliLmgKKwl0ZXJtaW9zLmgKKwl0ZXJtaW8uaAorCXVuaXN0ZC5oCisJdXRpbWUuaAorCWxpbnV4L2ZhbGxvYy5oCisJbGludXgvZmQuaAorCWxpbnV4L21ham9yLmgKKwlsaW51eC9sb29wLmgKKwluZXQvaWZfZGwuaAorCW5ldGluZXQvaW4uaAorCXN5cy9kaXNrbGFiZWwuaAorCXN5cy9kaXNrLmgKKwlzeXMvZmlsZS5oCisJc3lzL2lvY3RsLmgKKwlzeXMvbWtkZXYuaAorCXN5cy9tbWFuLmgKKwlzeXMvbW91bnQuaAorCXN5cy9wcmN0bC5oCisJc3lzL3Jlc291cmNlLmgKKwlzeXMvc2VsZWN0LmgKKwlzeXMvc29ja2V0LmgKKwlzeXMvc29ja2lvLmgKKwlzeXMvc3RhdC5oCisJc3lzL3N5c2NhbGwuaAorCXN5cy9zeXNtYWNyb3MuaAorCXN5cy90aW1lLmgKKwlzeXMvdHlwZXMuaAorCXN5cy91bi5oCisJc3lzL3dhaXQuaAorXSkpCitBQ19DSEVDS19IRUFERVJTKG5ldC9pZi5oLCwsCitbWworI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorXV0pCitBQ19GVU5DX1ZQUklOVEYKK2RubCBDaGVjayB0byBzZWUgaWYgZGlyZW50IGhhcyBtZW1iZXIgZF9yZWNsZW4uIE9uIGN5Z3dpbiB0aG9zZSBkX3JlY2xlbgorZG5sIGlzIG5vdCBkZWNsZWFyZWQuCitBQ19DSEVDS19NRU1CRVIoc3RydWN0IGRpcmVudC5kX3JlY2xlbixbQUNfREVGSU5FKEhBVkVfUkVDTEVOX0RJUkVOVCwgMSwKKwkJICAgICAgIFtEZWZpbmUgdG8gMSBpZiBkaXJlbnQgaGFzIGRfcmVjbGVuXSldLCwKKwkJWyNpbmNsdWRlIDxkaXJlbnQuaD5dKQorQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHN0YXQuc3RfYXRpbV0pCitkbmwgQ2hlY2sgdG8gc2VlIGlmIHNzaXplX3Qgd2FzIGRlY2xhcmVkCitBQ19DSEVDS19UWVBFKHNzaXplX3QsW0FDX0RFRklORShIQVZFX1RZUEVfU1NJWkVfVCwgMSwKKwkJW0RlZmluZSB0byAxIGlmIHNzaXplX3QgZGVjbGFyZWRdKV0sLAorCSAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSkKK2RubAorZG5sIENoZWNrIHRvIHNlZSBpZiBsbHNlZWsoKSBpcyBkZWNsYXJlZCBpbiB1bmlzdGQuaC4gIE9uIHNvbWUgbGliYydzIAorZG5sIGl0IGlzLCBhbmQgb24gb3RoZXJzIGl0IGlzbid0Li4uLi4gVGhhbmsgeW91IGdsaWJjIGRldmVsb3BlcnMuLi4uCitkbmwKK0FDX0NIRUNLX0RFQ0wobGxzZWVrLFtBQ19ERUZJTkUoSEFWRV9MTFNFRUtfUFJPVE9UWVBFLCAxLAorCQkJW0RlZmluZSB0byAxIGlmIGxsc2VlayBkZWNsYXJlZCBpbiB1bmlzdGQuaF0pXSwsCisJICAgICAgWyNpbmNsdWRlIDx1bmlzdGQuaD5dKQorZG5sCitkbmwgQ2hlY2sgdG8gc2VlIGlmIGxzZWVrNjQoKSBpcyBkZWNsYXJlZCBpbiB1bmlzdGQuaC4gIEdsaWJjJ3MgaGVhZGVyIGZpbGVzCitkbmwgYXJlIHNvIGNvbnZvbHV0ZWQgdGhhdCBJIGNhbid0IHRlbGwgd2hldGhlciBpdCB3aWxsIGFsd2F5cyBiZSBkZWZpbmVkLAorZG5sIGFuZCBpZiBpdCBpc24ndCBkZWZpbmVkIHdoaWxlIGxzZWVrNjQgaXMgZGVmaW5lZCBpbiB0aGUgbGlicmFyeSwgCitkbmwgZGlzYXN0ZXIgd2lsbCBzdHJpa2UuICAKK2RubAorZG5sIFdhcm5pbmchICBVc2Ugb2YgLS1lbmFibGUtZ2NjLXdhbGwgbWF5IHRocm93IG9mZiB0aGlzIHRlc3QuCitkbmwKK2RubAorQUNfQ0hFQ0tfREVDTChsc2VlazY0LFtBQ19ERUZJTkUoSEFWRV9MU0VFSzY0X1BST1RPVFlQRSwgMSwKKwkJCVtEZWZpbmUgdG8gMSBpZiBsc2VlazY0IGRlY2xhcmVkIGluIHVuaXN0ZC5oXSldLCwKKwkJWyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKwkJICNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCQkgI2luY2x1ZGUgPHVuaXN0ZC5oPl0pCitkbmwKK2RubCBXb3JkIHNpemVzLi4uCitkbmwKK0FDX0NIRUNLX1NJWkVPRihzaG9ydCkKK0FDX0NIRUNLX1NJWkVPRihpbnQpCitBQ19DSEVDS19TSVpFT0YobG9uZykKK0FDX0NIRUNLX1NJWkVPRihsb25nIGxvbmcpCitBQ19DSEVDS19TSVpFT0Yob2ZmX3QpCitTSVpFT0ZfU0hPUlQ9JGFjX2N2X3NpemVvZl9zaG9ydAorU0laRU9GX0lOVD0kYWNfY3Zfc2l6ZW9mX2ludAorU0laRU9GX0xPTkc9JGFjX2N2X3NpemVvZl9sb25nCitTSVpFT0ZfTE9OR19MT05HPSRhY19jdl9zaXplb2ZfbG9uZ19sb25nCitTSVpFT0ZfT0ZGX1Q9JGFjX2N2X3NpemVvZl9vZmZfdAorQUNfU1VCU1QoU0laRU9GX1NIT1JUKQorQUNfU1VCU1QoU0laRU9GX0lOVCkKK0FDX1NVQlNUKFNJWkVPRl9MT05HKQorQUNfU1VCU1QoU0laRU9GX0xPTkdfTE9ORykKK0FDX1NVQlNUKFNJWkVPRl9PRkZfVCkKK0FDX0NfQklHRU5ESUFOCitpZiB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSBubzsgdGhlbgorICBCVUlMRF9DQz0iJEJVSUxEX0NDIiBDUFA9IiRDUFAiIC9iaW4vc2ggJGFjX2F1eF9kaXIvcGFyc2UtdHlwZXMuc2gKK2Vsc2UKKyAgQ1JPU1NfQ09NUElMRT0iMSIgQlVJTERfQ0M9IiRCVUlMRF9DQyIgQ1BQPSIkQ1BQIiAvYmluL3NoICRhY19hdXhfZGlyL3BhcnNlLXR5cGVzLnNoCitmaQorQVNNX1RZUEVTX0hFQURFUj0uL2FzbV90eXBlcy5oCitBQ19TVUJTVF9GSUxFKEFTTV9UWVBFU19IRUFERVIpCitkbmwKK2RubCBTYXZlIHRoZSBjb25maWd1cmF0aW9uICNkZWZpbmVzIG5lZWRlZCBmb3IgdGhlIHB1YmxpYyBleHQyZnMuaAorZG5sIGhlYWRlciBmaWxlCitkbmwKK2VjaG8gIi8qIFRoZXNlIGRlZmluZXMgYXJlIG5lZWRlZCBmb3IgdGhlIHB1YmxpYyBleHQyZnMuaCBoZWFkZXIgZmlsZSAqLyIgXAorICAgICA+IHB1YmxpY19jb25maWcuaAoraWYgZ3JlcCBIQVZFX1NZU19UWVBFU19IIGNvbmZkZWZzLmggPiB0bXBfY29uZmlnLiQkOyB0aGVuCisgIHVuaXEgdG1wX2NvbmZpZy4kJCA+PiBwdWJsaWNfY29uZmlnLmgKK2Vsc2UKKyAgZWNobyAiI3VuZGVmIEhBVkVfU1lTX1RZUEVTX0giID4+IHB1YmxpY19jb25maWcuaAorZmkKK2lmIGdyZXAgV09SRFNfQklHRU5ESUFOIGNvbmZkZWZzLmggPiB0bXBfY29uZmlnLiQkOyB0aGVuCisgIHVuaXEgdG1wX2NvbmZpZy4kJCA+PiBwdWJsaWNfY29uZmlnLmgKK2Vsc2UKKyAgZWNobyAiI3VuZGVmIFdPUkRTX0JJR0VORElBTiIgPj4gcHVibGljX2NvbmZpZy5oCitmaQorcm0gLWYgdG1wX2NvbmZpZy4kJAorUFVCTElDX0NPTkZJR19IRUFERVI9Li9wdWJsaWNfY29uZmlnLmgKK0FDX1NVQlNUX0ZJTEUoUFVCTElDX0NPTkZJR19IRUFERVIpCitkbmwKK2RubCBTZWUgaWYgd2UgaGF2ZSBpbnR0eXBlcy5oIGFuZCBpZiBpbnRwdHJfdCBpcyBkZWZpbmVkCitkbmwKK0FDX0NIRUNLX0hFQURFUlMoW2ludHR5cGVzLmhdKQorQUNfQ0hFQ0tfVFlQRVMoaW50cHRyX3QpCitkbmwKK2RubCBTZWUgaWYgc3RydWN0IHN0YXQgaGFzIGEgc3RfZmxhZ3MgZmllbGQsIGluIHdoaWNoIGNhc2Ugd2UgY2FuIGdldCBmaWxlCitkbmwgZmxhZ3Mgc29tZXdoYXQgcG9ydGFibHkuICBBbHNvIGNoZWNrIGZvciB0aGUgYW5hbG9nb3VzIHNldHRlciwgY2hmbGFncygpLgorZG5sCitBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBzdHJ1Y3Qgc3RhdCBoYXMgYSBzdF9mbGFncyBmaWVsZCkKK0FDX0NBQ0hFX1ZBTChlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzLAorCUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3N0YXQuaD5dLAorCQlbc3RydWN0IHN0YXQgc3RhdDsgc3RhdC5zdF9mbGFncyA9IDA7XSwKKwkJW2UyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3M9eWVzXSwKKwkJW2UyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3M9bm9dKSkKK0FDX01TR19SRVNVTFQoJGUyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3MpCitpZiB0ZXN0ICIkZTJmc3Byb2dzX2N2X3N0cnVjdF9zdF9mbGFncyIgPSB5ZXM7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgc3RfZmxhZ3MgZmllbGQgaXMgdXNlZnVsKQorICBBQ19DQUNIRV9WQUwoZTJmc3Byb2dzX2N2X3N0cnVjdF9zdF9mbGFnc19pbW11dCwKKwlBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy9zdGF0Lmg+XSwKKwkJW3N0cnVjdCBzdGF0IHN0YXQ7IHN0YXQuc3RfZmxhZ3MgfD0gVUZfSU1NVVRBQkxFO10sCisJCVtlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzX2ltbXV0PXllc10sCisJCVtlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzX2ltbXV0PW5vXSkpCisgIEFDX01TR19SRVNVTFQoJGUyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3NfaW1tdXQpCisgIGlmIHRlc3QgIiRlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzX2ltbXV0IiA9IHllczsgdGhlbgorCSAgQUNfREVGSU5FKEhBVkVfU1RBVF9GTEFHUywgMSwKKwkJW0RlZmluZSB0byAxIGlmIHN0cnVjdCBzdGF0IGhhcyBzdF9mbGFnc10pCisgIGZpCitmaQorZG5sCitkbmwgQ2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBTQV9MRU4KK2RubAorQUNfQ0hFQ0tfTUVNQkVSKHN0cnVjdCBzb2NrYWRkci5zYV9sZW4sCisJCUFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NBX0xFTiwxLAorCQkJW0RlZmluZSB0byAxIGlmIGlmIHN0cnVjdCBzb2NrYWRkciBjb250YWlucyBzYV9sZW5dKSwsCisJWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKwkgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dKQorZG5sCitkbmwgVGhpcyB3aWxsIGFkZCAtbGJsa2lkIHRvIHRoZSBBQ19DSEVDS19GVU5DUyBzZWFyY2ggaWYgd2UgYXJlIHVzaW5nCitkbmwgdGhlIHN5c3RlbS1wcm92aWRlZCBibGtpZCBsaWJyYXJ5CitkbmwKK2lmIHRlc3QgLW4gIiRCTEtJRF9DTVQiOyB0aGVuCisgIEFDX1NFQVJDSF9MSUJTKFtibGtpZF9wcm9iZV9hbGxdLCBbYmxraWRdKQorZmkKK2RubAorQUNfQ0hFQ0tfRlVOQ1MobTRfZmxhdHRlbihbCisJX19zZWN1cmVfZ2V0ZW52CisJYmFja3RyYWNlCisJYmxraWRfcHJvYmVfZ2V0X3RvcG9sb2d5CisJYmxraWRfcHJvYmVfZW5hYmxlX3BhcnRpdGlvbnMKKwljaGZsYWdzCisJZmFkdmlzZTY0CisJZmFsbG9jYXRlCisJZmFsbG9jYXRlNjQKKwlmY2hvd24KKwlmZGF0YXN5bmMKKwlmc3RhdDY0CisJZnRydW5jYXRlNjQKKwlmdXRpbWVzCisJZ2V0Y3dkCisJZ2V0ZHRhYmxlc2l6ZQorCWdldG1udGluZm8KKwlnZXRwd3VpZF9yCisJZ2V0cmxpbWl0CisJZ2V0cnVzYWdlCisJanJhbmQ0OAorCWxsc2VlaworCWxzZWVrNjQKKwltYWxsaW5mbworCW1ic3Rvd2NzCisJbWVtYWxpZ24KKwltZW1wY3B5CisJbW1hcAorCW1zeW5jCisJbmFub3NsZWVwCisJb3BlbjY0CisJcGF0aGNvbmYKKwlwb3NpeF9mYWR2aXNlCisJcG9zaXhfZmFkdmlzZTY0CisJcG9zaXhfbWVtYWxpZ24KKwlwcmN0bAorCXByZWFkCisJcHdyaXRlCisJcHJlYWQ2NAorCXB3cml0ZTY0CisJc2VjdXJlX2dldGVudgorCXNldG1udGVudAorCXNldHJlc2dpZAorCXNldHJlc3VpZAorCXNucHJpbnRmCisJc3JhbmRvbQorCXN0cGNweQorCXN0cmNhc2VjbXAKKwlzdHJkdXAKKwlzdHJubGVuCisJc3RycHRpbWUKKwlzdHJ0b3VsbAorCXN5bmNfZmlsZV9yYW5nZQorCXN5c2NvbmYKKwl1c2xlZXAKKwl1dGltZQorCXV0aW1lcworCXZhbGxvYworXSkpCitkbmwKK2RubCBDaGVjayB0byBzZWUgaWYgLWxzb2NrZXQgaXMgcmVxdWlyZWQgKHNvbGFyaXMpIHRvIG1ha2Ugc29tZXRoaW5nCitkbmwgdGhhdCB1c2VzIHNvY2tldCgpIHRvIGNvbXBpbGU7IHRoaXMgaXMgbmVlZGVkIGZvciB0aGUgVVVJRCBsaWJyYXJ5CitkbmwKK1NPQ0tFVF9MSUI9JycKK0FDX0NIRUNLX0xJQihzb2NrZXQsIHNvY2tldCwgW1NPQ0tFVF9MSUI9LWxzb2NrZXRdKQorQUNfU1VCU1QoU09DS0VUX0xJQikKK2RubAorZG5sIFNlZSBpZiBvcHRyZXNldCBleGlzdHMKK2RubAorQUNfTVNHX0NIRUNLSU5HKGZvciBvcHRyZXNldCkKK0FDX0NBQ0hFX1ZBTChhY19jdl9oYXZlX29wdHJlc2V0LAorW0FDX0VHUkVQX0hFQURFUihvcHRyZXNldCwgdW5pc3RkLmgsCisgIGFjX2N2X2hhdmVfb3B0cmVzZXQ9eWVzLCBhY19jdl9oYXZlX29wdHJlc2V0PW5vKV0pZG5sCitBQ19NU0dfUkVTVUxUKCRhY19jdl9oYXZlX29wdHJlc2V0KQoraWYgdGVzdCAkYWNfY3ZfaGF2ZV9vcHRyZXNldCA9IHllczsgdGhlbgorICBBQ19ERUZJTkUoSEFWRV9PUFRSRVNFVCwgMSwgW0RlZmluZSB0byAxIGlmIG9wdHJlc2V0IGZvciBnZXRvcHQgaXMgcHJlc2VudF0pCitmaQorZG5sCitkbmwgVGVzdCBmb3Igc2VtX2luaXQsIGFuZCB3aGljaCBsaWJyYXJ5IGl0IG1pZ2h0IHJlcXVpcmU6CitkbmwKK0FIX1RFTVBMQVRFKFtIQVZFX1NFTV9JTklUXSwgW0RlZmluZSB0byAxIGlmIHNlbV9pbml0KCkgZXhpc3RzXSkKK1NFTV9JTklUX0xJQj0nJworQUNfQ0hFQ0tfRlVOQyhzZW1faW5pdCwgLAorICBBQ19DSEVDS19MSUIocHRocmVhZCwgc2VtX2luaXQsCisgIAlBQ19ERUZJTkUoSEFWRV9TRU1fSU5JVCwgMSkKKyAgCVNFTV9JTklUX0xJQj0tbHB0aHJlYWQsCisgIEFDX0NIRUNLX0xJQihydCwgc2VtX2luaXQsCisgIAlBQ19ERUZJTkUoSEFWRV9TRU1fSU5JVCwgMSkKKyAgCVNFTV9JTklUX0xJQj0tbHJ0LAorICBBQ19DSEVDS19MSUIocG9zaXg0LCBzZW1faW5pdCwKKyAgCUFDX0RFRklORShIQVZFX1NFTV9JTklULCAxKQorICAJU0VNX0lOSVRfTElCPS1scG9zaXg0KSkpKWRubAorQUNfU1VCU1QoU0VNX0lOSVRfTElCKQorZG5sCitkbmwgQ2hlY2sgZm9yIHVuaWZpZWQgZGlmZgorZG5sCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHVuaWZpZWQgZGlmZiBvcHRpb24pCitpZiBkaWZmIC11ICQwICQwID4gL2Rldi9udWxsIDI+JjEgOyB0aGVuCisgICBVTklfRElGRl9PUFRTPS11CitlbHNlCisgICBVTklfRElGRl9PUFRTPS1jCitmaQorQUNfTVNHX1JFU1VMVCgkVU5JX0RJRkZfT1BUUykKK0FDX1NVQlNUKFVOSV9ESUZGX09QVFMpCitkbmwKK2RubCBXZSB1c2UgdGhlIEVYVDIgaW9jdGxzIG9ubHkgdW5kZXIgTGludXgKK2RubAorY2FzZSAiJGhvc3Rfb3MiIGluCitsaW51eCopCisJQUNfREVGSU5FKEhBVkVfRVhUMl9JT0NUTFMsIDEsIFtEZWZpbmUgdG8gMSBpZiBFeHQyIGlvY3RscyBwcmVzZW50XSkKKwk7OworZXNhYworZG5sCitkbmwgT1Mtc3BlY2lmaWMgdW5jb21tZW50IGNvbnRyb2wKK2RubAorTElOVVhfQ01UPSIjIgorQ1lHV0lOX0NNVD0iIyIKK1VOSVhfQ01UPQorY2FzZSAiJGhvc3Rfb3MiIGluCitsaW51eCopCisJTElOVVhfQ01UPQorCTs7CitjeWd3aW4pCisJQ1lHV0lOX0NNVD0KKwlVTklYX0NNVD0iIyIKKwk7OworZXNhYworQUNfU1VCU1QoTElOVVhfQ01UKQorQUNfU1VCU1QoQ1lHV0lOX0NNVCkKK0FDX1NVQlNUKFVOSVhfQ01UKQorZG5sCitkbmwgTGludXggYW5kIEh1cmQgcGxhY2VzIHJvb3QgZmlsZXMgaW4gdGhlIC8gYnkgZGVmYXVsdAorZG5sCitjYXNlICIkaG9zdF9vcyIgaW4KK2xpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KQorCWlmIHRlc3QgIiRwcmVmaXgiID0gTk9ORSAtYSAiJHJvb3RfcHJlZml4IiA9IE5PTkUgOyB0aGVuCisJCXJvb3RfcHJlZml4PSIiOworCQlBQ19NU0dfUkVTVUxUKFtPbiAkaG9zdF9vcyBzeXN0ZW1zLCByb290X3ByZWZpeCBkZWZhdWx0cyB0byAnJ10pCisJZmkKKwk7OworZXNhYworZG5sCitkbmwgT24gTGludXgvaHVyZCwgZm9yY2UgdGhlIHByZWZpeCB0byBiZSAvdXNyCitkbmwKK2Nhc2UgIiRob3N0X29zIiBpbgorbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpCisJaWYgdGVzdCAiJHByZWZpeCIgPSBOT05FIDsgdGhlbgorCQlwcmVmaXg9Ii91c3IiOworCQlBQ19NU0dfUkVTVUxUKFtPbiAkaG9zdF9vcyBzeXN0ZW1zLCBwcmVmaXggZGVmYXVsdHMgdG8gL3Vzcl0pCisJCWlmIHRlc3QgIiRtYW5kaXIiID0gJyR7cHJlZml4fS9tYW4nIDsgdGhlbgorCQkJQUNfTVNHX1JFU1VMVChbLi4uYW5kIG1hbmRpciBkZWZhdWx0cyB0byAvdXNyL3NoYXJlL21hbl0pCisJCQltYW5kaXI9L3Vzci9zaGFyZS9tYW4KKwkJZmkKKwlmaQorOzsKK2VzYWMKK2lmIHRlc3QgIiRyb290X3ByZWZpeCIgPSBOT05FIDsgdGhlbgorCWlmIHRlc3QgIiRwcmVmaXgiID0gTk9ORSA7IHRoZW4KKwkJcm9vdF9wcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKKwllbHNlCisJCXJvb3RfcHJlZml4PSIkcHJlZml4IgorCWZpCisJcm9vdF9iaW5kaXI9JGJpbmRpcgorCXJvb3Rfc2JpbmRpcj0kc2JpbmRpcgorCXJvb3RfbGliZGlyPSRsaWJkaXIKKwlyb290X3N5c2NvbmZkaXI9JHN5c2NvbmZkaXIKK2Vsc2UKKwlyb290X2JpbmRpcj0nJHtyb290X3ByZWZpeH0vYmluJworCXJvb3Rfc2JpbmRpcj0nJHtyb290X3ByZWZpeH0vc2JpbicKKwlyb290X2xpYmRpcj0nJHtyb290X3ByZWZpeH0vbGliJworCXJvb3Rfc3lzY29uZmRpcj0nJHtyb290X3ByZWZpeH0vZXRjJworZmkKK2lmIHRlc3QgIiRiaW5kaXIiICE9ICcke2V4ZWNfcHJlZml4fS9iaW4nOyB0aGVuCisgICAgcm9vdF9iaW5kaXI9JGJpbmRpcgorICAgIEFDX01TR19SRVNVTFQoW1NldHRpbmcgcm9vdF9iaW5kaXIgdG8gJHJvb3RfYmluZGlyXSkKK2ZpCitpZiB0ZXN0ICIkc2JpbmRpciIgIT0gJyR7ZXhlY19wcmVmaXh9L3NiaW4nOyB0aGVuCisgICAgcm9vdF9zYmluZGlyPSRzYmluZGlyCisgICAgQUNfTVNHX1JFU1VMVChbU2V0dGluZyByb290X3NiaW5kaXIgdG8gJHJvb3Rfc2JpbmRpcl0pCitmaQoraWYgdGVzdCAiJGxpYmRpciIgIT0gJyR7ZXhlY19wcmVmaXh9L2xpYic7IHRoZW4KKyAgICByb290X2xpYmRpcj0kbGliZGlyCisgICAgQUNfTVNHX1JFU1VMVChbU2V0dGluZyByb290X2xpYmRpciB0byAkcm9vdF9saWJkaXJdKQorZmkKK2lmIHRlc3QgIiRzeXNjb25mZGlyIiAhPSAnJHtwcmVmaXh9L2V0Yyc7IHRoZW4KKyAgICByb290X3N5c2NvbmZkaXI9JHN5c2NvbmZkaXIKKyAgICBBQ19NU0dfUkVTVUxUKFtTZXR0aW5nIHJvb3Rfc3lzY29uZmRpciB0byAkcm9vdF9zeXNjb25mZGlyXSkKK2ZpCitBQ19TVUJTVChyb290X3ByZWZpeCkKK0FDX1NVQlNUKHJvb3RfYmluZGlyKQorQUNfU1VCU1Qocm9vdF9zYmluZGlyKQorQUNfU1VCU1Qocm9vdF9saWJkaXIpCitBQ19TVUJTVChyb290X3N5c2NvbmZkaXIpCitkbmwKK2RubCBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIHRoZSBtdWx0aWFyY2ggYXJjaAorZG5sCitBQ19BUkdfV0lUSChbbXVsdGlhcmNoXSwKK1sgIC0td2l0aC1tdWx0aWFyY2g9QVJDSCBzcGVjaWZ5IHRoZSBtdWx0aWFyY2ggdHJpcGxldF0sCitpZiB0ZXN0ICIkd2l0aHZhbCIgPSAibGliNjQiOyB0aGVuCisgICAgbGliZGlyPS91c3IvbGliNjQKKyAgICByb290X2xpYmRpcj0vbGliNjQKK2Vsc2UKKyAgICBsaWJkaXI9JGxpYmRpci8kd2l0aHZhbAorICAgIHJvb3RfbGliZGlyPSRyb290X2xpYmRpci8kd2l0aHZhbAorZmkKKylkbmwKK2RubAorZG5sIFNlZSBpZiAtc3RhdGljIHdvcmtzLiAgVGhpcyBjb3VsZCBmYWlsIGlmIHRoZSBsaW5rZXIgZG9lcyBub3QKK2RubCBzdXBwb3J0IC1zdGF0aWMsIG9yIGlmIHJlcXVpcmVkIGV4dGVybmFsIGxpYnJhcmllcyBhcmUgbm90IGF2YWlsYWJsZQorZG5sIGluIHN0YXRpYyBmb3JtLgorZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgd2UgY2FuIGxpbmsgd2l0aCAtc3RhdGljXSkKK0FDX0NBQ0hFX1ZBTChhY19jdl9lMmZzcHJvZ3NfdXNlX3N0YXRpYywKK1tTQVZFX0xERkxBR1M9JExERkxBR1M7IExERkxBR1M9IiRMREZMQUdTIC1zdGF0aWMiCitBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN0ZGlvLmg+XSxbZmZsdXNoKHN0ZG91dCk7XSwKKyBhY19jdl9lMmZzcHJvZ3NfdXNlX3N0YXRpYz15ZXMsIGFjX2N2X2UyZnNwcm9nc191c2Vfc3RhdGljPW5vKQorTERGTEFHUz0kU0FWRV9MREZMQUdTXSkKK2RubAorZG5sIFJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0ZXN0IHR1cm5zIG91dCwgU29sYXJpcyBkb2Vzbid0IGhhbmRsZSAtc3RhdGljCitkbmwgVGhpcyBpcyBjYXVzZWQgYnkgdGhlIHNvY2tldCBsaWJyYXJ5IHJlcXVpcmluZyB0aGUgbnNsIGxpYnJhcnksIHdoaWNoCitkbmwgcmVxdWlyZXMgdGhlIC1kbCBsaWJyYXJ5LCB3aGljaCBvbmx5IHdvcmtzIGZvciBkeW5hbWljYWxseSBsaW5rZWQgCitkbmwgcHJvZ3JhbXMuICBJdCBiYXNpY2FsbHkgbWVhbnMgeW91IGNhbid0IGhhdmUgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMKK2RubCB3aGljaCB1c2UgdGhlIG5ldHdvcmsgdW5kZXIgU29sYXJpcy4gIAorZG5sCitjYXNlICIkaG9zdF9vcyIgaW4KK3NvbGFyaXMyLiopCisJYWNfY3ZfZTJmc3Byb2dzX3VzZV9zdGF0aWM9bm8JCis7OworZXNhYworQUNfTVNHX1JFU1VMVCgkYWNfY3ZfZTJmc3Byb2dzX3VzZV9zdGF0aWMpCitMREZMQUdfU1RBVElDPQoraWYgdGVzdCAkYWNfY3ZfZTJmc3Byb2dzX3VzZV9zdGF0aWMgPSB5ZXM7IHRoZW4KKwlMREZMQUdfU1RBVElDPS1zdGF0aWMKK2ZpCitBQ19TVUJTVChMREZMQUdfU1RBVElDKQorZG5sCitkbmwgV29yayBhcm91bmQgbXlzdGVyaW91cyBEYXJ3aW4gLyBHTlUgbGliaW50bCBwcm9ibGVtCitkbmwgKF9fYXNtX18gcmVkaXJlY3Rpb24gZG9lc24ndCB3b3JrIGZvciBzb21lIG15c3RlcmlvdXMgcmVhc29uLiAgTG9va3MgbGlrZQorZG5sIEFwcGxlIGhhY2tlZCBnY2Mgc29tZWhvdz8pCitkbmwKK2Nhc2UgIiRob3N0X29zIiBpbgorZGFyd2luKikKKwlBQ19NU0dfUkVTVUxUKFtVc2luZyBBcHBsZSBEYXJ3aW4gLyBHTlUgbGliaW50bCB3b3JrYXJvdW5kXSkKKwlBQ19ERUZJTkUoX0lOVExfUkVESVJFQ1RfTUFDUk9TLCAxLAorCQlbRGVmaW5lIHRvIDEgaWYgQXBwbGUgRGFyd2luIGxpYmludGwgd29ya2Fyb3VuZCBpcyBuZWVkZWRdKQorCTs7Citlc2FjCitkbmwKK2RubCBNYWtlIHRoZSBzcyBhbmQgZXQgZGlyZWN0b3JpZXMgd29yayBjb3JyZWN0bHkuCitkbmwKK1NTX0RJUj1gY2QgJHtzcmNkaXJ9L2xpYi9zczsgcHdkYAorRVRfRElSPWBjZCAke3NyY2Rpcn0vbGliL2V0OyBwd2RgCitBQ19TVUJTVChTU19ESVIpCitBQ19TVUJTVChFVF9ESVIpCitkbmwKK2RubCBPbmx5IHRyeSB0byBydW4gdGhlIHRlc3Qgc3VpdGUgaWYgd2UncmUgbm90IGNyb3NzIGNvbXBpbGluZy4KK2RubAoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgOyB0aGVuCisgIERPX1RFU1RfU1VJVEU9CitlbHNlCisgIERPX1RFU1RfU1VJVEU9Y2hlY2sKK2ZpCitBQ19TVUJTVChET19URVNUX1NVSVRFKQorZG5sCitkbmwgT25seSBpbmNsdWRlIHRoZSBpbnRsIGluY2x1ZGUgZmlsZXMgaWYgd2UncmUgYnVpbGRpbmcgd2l0aCB0aGVtCitkbmwKK0lOQ0xVREVTPSctSS4gLUkkKHRvcF9idWlsZGRpcikvbGliIC1JJCh0b3Bfc3JjZGlyKS9saWInCitpZiB0ZXN0IC1uICIkQ1BQRkxBR1MiIDsgdGhlbgorCUlOQ0xVREVTPSIkSU5DTFVERVMgJENQUEZMQUdTIgorZmkKK2lmIHRlc3QgIiRVU0VfSU5DTFVERURfTElCSU5UTCIgPSAieWVzIiA7IHRoZW4KKwlJTkNMVURFUz0kSU5DTFVERVMnIC1JJCh0b3BfYnVpbGRkaXIpL2ludGwgLUkkKHRvcF9zcmNkaXIpL2ludGwnCitmaQoraWYgdGVzdCAtbiAiJFdJVEhfRElFVF9MSUJDIiA7IHRoZW4KKwlJTkNMVURFUz0iJElOQ0xVREVTIC1EX1JFRU5UUkFOVCIKK2ZpCitBQ19TVUJTVChJTkNMVURFUykKK0FNX01LSU5TVEFMTERJUlMKK2RubAorZG5sIEJ1aWxkIENGTEFHUworZG5sCitpZiB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSBubzsgdGhlbgorICAgQlVJTERfQ0ZMQUdTPSIkQ0ZMQUdTICRDUFBGTEFHUyAkSU5DTFVERVMgLURIQVZFX0NPTkZJR19IIgorICAgQlVJTERfTERGTEFHUz0iJExERkxBR1MiCitmaQorQUNfU1VCU1QoQlVJTERfQ0ZMQUdTKQorQUNfU1VCU1QoQlVJTERfTERGTEFHUykKK2RubAorZG5sIE1ha2Ugb3VyIG91dHB1dCBmaWxlcywgYmVpbmcgc3VyZSB0aGF0IHdlIGNyZWF0ZSB0aGUgc29tZSBtaXNjZWxsYW5lb3VzIAorZG5sIGRpcmVjdG9yaWVzCitkbmwKK3Rlc3QgLWQgbGliIHx8IG1rZGlyIGxpYgordGVzdCAtZCBpbmNsdWRlIHx8IG1rZGlyIGluY2x1ZGUKK3Rlc3QgLWQgaW5jbHVkZS9saW51eCB8fCBta2RpciBpbmNsdWRlL2xpbnV4Cit0ZXN0IC1kIGluY2x1ZGUvYXNtIHx8IG1rZGlyIGluY2x1ZGUvYXNtCitmb3IgaSBpbiBNQ09ORklHIE1ha2VmaWxlIGUyZnNwcm9ncy5zcGVjIFwKKwl1dGlsL01ha2VmaWxlIHV0aWwvc3Vic3QuY29uZiB1dGlsL2dlbi10YXJiYWxsIHV0aWwvaW5zdGFsbC1zeW1saW5rIFwKKwlsaWIvZXQvTWFrZWZpbGUgbGliL3NzL01ha2VmaWxlIGxpYi9lMnAvTWFrZWZpbGUgXAorCWxpYi9leHQyZnMvTWFrZWZpbGUgbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorCWxpYi91dWlkL01ha2VmaWxlIGxpYi91dWlkL3V1aWRfdHlwZXMuaCBcCisJbGliL2Jsa2lkL01ha2VmaWxlIGxpYi9ibGtpZC9ibGtpZF90eXBlcy5oIGxpYi9xdW90YS9NYWtlZmlsZSBcCisJbGliL3NzL3NzLnBjIGxpYi91dWlkL3V1aWQucGMgbGliL2V0L2NvbV9lcnIucGMgXAorCWxpYi9lMnAvZTJwLnBjIGxpYi9ibGtpZC9ibGtpZC5wYyBsaWIvZXh0MmZzL2V4dDJmcy5wYyBcCisJbWlzYy9NYWtlZmlsZSBleHQyZWQvTWFrZWZpbGUgZTJmc2NrL01ha2VmaWxlIFwKKwlkZWJ1Z2ZzL01ha2VmaWxlIHRlc3RzL01ha2VmaWxlIHRlc3RzL3Byb2dzL01ha2VmaWxlIFwKKwlyZXNpemUvTWFrZWZpbGUgZG9jL01ha2VmaWxlIGludGwvTWFrZWZpbGUgXAorCWludGwvbGliZ251aW50bC5oIHBvL01ha2VmaWxlLmluIDsgZG8KKwlpZiB0ZXN0IC1kIGBkaXJuYW1lICR7c3JjZGlyfS8kaWAgOyB0aGVuCisJCW91dGxpc3Q9IiRvdXRsaXN0ICRpIgorCWZpCitkb25lCitBQ19PVVRQVVQoJG91dGxpc3QpCitpZiB0ZXN0IC1mIHV0aWwvZ2VuLXRhcmJhbGw7IHRoZW4gY2htb2QgK3ggdXRpbC9nZW4tdGFyYmFsbDsgZmkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnVpbGQtcnBtIGIvY29udHJpYi9idWlsZC1ycG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwNjA3MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYnVpbGQtcnBtCkBAIC0wLDAgKzEsNDUgQEAKKyMhL2Jpbi9zaAorCisjIGVuYWJsZSB4dHJhY2Ugb3V0cHV0IGlmIHJlcXVlc3RlZAoraWYgWyAtbiAke0VOQUJMRV9YVFJBQ0U6LScnfSBdOyB0aGVuCisgICAgc2V0IC14CitmaQorCisjIEJ1aWxkIGFuIGUyZnNwcm9ncyBSUE0gZnJvbSBjdnMKKworcHdkPWBwd2RgCitjdXJyZGlyPWBiYXNlbmFtZSAkcHdkYAorcGtnbmFtZT1gZ3JlcCBOYW1lOiBlMmZzcHJvZ3Muc3BlYyB8IGF3ayAne3ByaW50ICQyO30nYAorcGtndmVycz1gZ3JlcCBWZXJzaW9uOiBlMmZzcHJvZ3Muc3BlYyB8IGF3ayAne3ByaW50ICQyO30nYAorYnVpbGRkaXI9JHtwa2duYW1lfS0ke3BrZ3ZlcnN9CisKKyMgZW5zdXJlIHRoYXQgJFRNUCBpcyBzZXQgdG8gc29tZXRoaW5nCitUTVA9JHtUTVA6LScvdG1wJ30KKworY2QgLi4KK3RtcGRpcj1gbWt0ZW1wIC1kICR7UlBNX1RNUERJUjotJFRNUH0vcnBtdG1wLlhYWFhYWGAKKworIyBXZSBuZWVkIHRvIGJ1aWxkIGEgdGFyYmFsbCBmb3IgdGhlIFNSUE0gdXNpbmcgJGJ1aWxkZGlyIGFzIHRoZSAKKyMgZGlyZWN0b3J5IG5hbWUgKHNpbmNlIHRoYXQncyB3aGF0IFJQTSB3aWxsIGV4cGVjdCBpdCB0byB1bnBhY2sKKyMgaW50bykuICBUaGF0IG1heSByZXF1aXJlIGEgc3ltbGluay4KKworIyBNYWtlIGEgcmVjdXJzaXZlLXN5bWxpbmsgY29weSBvZiB0aGUgc291cmNlIGRpcgorY3AgLXNSIGBwd2RgLyRjdXJyZGlyICR0bXBkaXIvJGJ1aWxkZGlyIHx8IGV4aXQgMQorCisjIFJlbW92ZSBhbnkgYnVpbGQgZmlsZXMgZnJvbSB0aGUgdGVtcG9yYXJ5IHRhcmJhbGwgZGlyZWN0b3J5CitbIC1mICR0bXBkaXIvJGJ1aWxkZGlyL01ha2VmaWxlIF0gJiYgbWFrZSAtQyAkdG1wZGlyLyRidWlsZGRpciBkaXN0Y2xlYW4KKworRVhDTFVERT0iLS1leGNsdWRlIC5oZyogLS1leGNsdWRlIC5wYyoiCisoY2QgJHRtcGRpciAmJiB0YXIgY3pmaCAke2J1aWxkZGlyfS50YXIuZ3ogJEVYQ0xVREUgJGJ1aWxkZGlyKQorCitbICJgcnBtYnVpbGQgLS12ZXJzaW9uIDI+IC9kZXYvbnVsbGAiIF0gJiYgUlBNPXJwbWJ1aWxkIHx8IFJQTT1ycG0KKworJFJQTSAtLWRlZmluZSAiX3NvdXJjZWRpciAkdG1wZGlyIiBcCisgICAgIC0tZGVmaW5lICJfdG9wZGlyICR7UlBNX1RPUERJUjotJChycG0gLUUgJV90b3BkaXIpfSIgXAorICAgICAtLWRlZmluZSAiX3RtcGRpciAke1JQTV9UTVBESVI6LSRUTVB9IiBcCisgICAgIC0tZGVmaW5lICJleHRyYV9jb25maWdfZmxhZ3MgJHtFWFRSQV9DT05GSUdfRkxBR1M6LScnfSIgXAorICAgICAtYmEgJGN1cnJkaXIvZTJmc3Byb2dzLnNwZWMKKworcnBtX2V4aXQ9JD8KK3JtIC1yZiAkdG1wZGlyCitleGl0ICRycG1fZXhpdApkaWZmIC0tZ2l0IGEvY29udHJpYi9kY29uZiBiL2NvbnRyaWIvZGNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VmNGNjNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZGNvbmYKQEAgLTAsMCArMSwxMTggQEAKKyMhL2Jpbi9zaAorIyRJZCQKKyMgQ3JlYXRlIEFkb2JlLVBvc3RTY3JpcHQgZmlsZSB0aGF0IGdyYXBoaWNhbGx5IGRpc3BsYXlzIHRoZSBvdXRwdXQgb2YKKyMgZHVtcGUyZnMoOCkuIFVzZSAiZHVtcGUyZnMgfCBkY29uZiIgdG8gY3JlYXRlIGEgUG9zdFNjcmlwdCBmaWxlIG9uIHN0ZG91dC4KKyMgRGV2ZWxvcGVkIGFuZCB0ZXN0ZWQgZm9yIExpbnV4IDEuMC4KKyMgQ29weXJpZ2h0IChjKSAxOTk0CisjIFVscmljaCBXaW5kbAorIyBBTHRlIFJlZ2Vuc2J1cmdlciBTdHJhc3NlIDExYQorIyBELTkzMTQ5IE5pdHRlbmF1LCBHZXJtYW55CisjIDxVbHJpY2guV2luZGxAcnoudW5pLXJlZ2Vuc2J1cmcuZGU+CitTRUxGPWBiYXNlbmFtZSAkMGAKK0FXS0ZJTEU9L3RtcC8ke1NFTEZ9LmF3aworVEVNUEZJTEU9L3RtcC8ke1NFTEZ9LnRtcAorZWNobyAnCitCRUdJTiB7CisJcHJpbnQgIkIiCit9CisvXklub2RlIGNvdW50Oi8geworCWljPSQzOyBuZXh0Cit9CisvXkJsb2NrIGNvdW50Oi8geworCWJjPSQzOyBuZXh0Cit9CisvXkZpcnN0IGJsb2NrOi8geworCWZiPSQzOyBuZXh0Cit9CisvXkJsb2NrIHNpemU6LyB7CisJYnM9JDM7IG5leHQKK30KKy9eQmxvY2tzIHBlciBncm91cDovIHsKKwlicGc9JDQKKwlwcmludGYoIkJDICVkXG4iLCBicGcpCisJcHJpbnRmKCJHQyAlZFxuIiwgKGJjICsgYnBnIC0gMSkgLyBicGcpCisJbmV4dAorfQorL15Jbm9kZXMgcGVyIGdyb3VwOi8geworCWlwZz0kNDsgbmV4dAorfQorL15MYXN0IHdyaXRlIHRpbWU6LyB7CisJbHd0aW1lPSQwOyBnc3ViKCJMYXN0IHdyaXRlIHRpbWU6WyBdKyIsICIiLCBsd3RpbWUpCisJcHJpbnRmKCJUICVzXG4iLCBsd3RpbWUpCisJbmV4dAorfQorL15Hcm91cCBbMC05XSs6LyB7CisJZ3JvdXA9JDI7IGdzdWIoIjoiLCAiIiwgZ3JvdXApCisJYmxvY2s9IiIKKwlncm91cF9zdGFydD1ncm91cCpicGcrZmIKKwlncm91cF9lbmQ9Z3JvdXBfc3RhcnQrYnBnCisJcHJpbnRmKCJHICVkIDogJWQgLSAlZFxuIiwgZ3JvdXAsIGdyb3VwX3N0YXJ0LCBncm91cF9lbmQpCisJbmV4dAorfQorL15bIF0rRnJlZSBibG9ja3M6IC8geworCWZvciAoIGk9MzsgaSA8IE5GOyArK2kgKSB7CisJCWJsb2NrPSRpOyBnc3ViKCIsIiwgIiIsIGJsb2NrKQorCQlpZiAoIGluZGV4KGJsb2NrLCAiLSIpID09IDAgKSBibG9jaz1ibG9jayAiLSIgYmxvY2sKKwkJcG9zPWluZGV4KGJsb2NrLCAiLSIpCisJCXByaW50ZigiRkIgJWQtJWRcbiIsCisJCSAgICAgICBzdWJzdHIoYmxvY2ssIDAsIHBvcykgLSBncm91cF9zdGFydCwKKwkJICAgICAgIHN1YnN0cihibG9jaywgcG9zICsgMSkgLSBncm91cF9zdGFydCkKKwl9CisJaWYgKCBibG9jayA9PSAiIiApIHByaW50ZigiR3JvdXAgJWQgaXMgZnVsbFxuIiwgZ3JvdXApCisJcHJpbnQgIi0tLS0iCisJbmV4dAorfQorRU5EIHsKKwlwcmludGYoIkUgJXNcbiIsIGx3dGltZSkKK30nID4kQVdLRklMRQorYXdrIC1mICRBV0tGSUxFICQqID4kVEVNUEZJTEUKK2VjaG8gJworQkVHSU4geworICAgICAgICBwcmludGYoIiUlIVBTLUFkb2JlXG4iKQorICAgICAgICBwcmludGYoIiUlJSVCb3VuZGluZ0JveDogMCAwIDEgMVxuIikKKwlwcmludGYoIi9yZWN0IHsveTIgZXhjaCBkZWYgL3gyIGV4Y2ggZGVmIC95MSBleGNoIGRlZiAveDEgZXhjaCBkZWZcbiIpCisJcHJpbnRmKCIgICAgICAgbmV3cGF0aCB4MSB5MSBtb3ZldG8geDIgeTEgbGluZXRvIHgyIHkyIGxpbmV0b1xuIikKKwlwcmludGYoIiAgICAgICB4MSB5MiBsaW5ldG8gY2xvc2VwYXRofSBkZWZcbiIpCisJcHJpbnRmKCIvZmIge3JlY3QgZ3NhdmUgMS4wIHNldGdyYXkgZmlsbCBncmVzdG9yZX0gZGVmXG4iKQorCXByaW50ZigiL2RnIHtyZWN0IGdzYXZlIGdzYXZlIDAuMCBzZXRncmF5IGZpbGwgZ3Jlc3RvcmVcbiIpCisJcHJpbnRmKCIgICAgIDAuNSBzZXRncmF5IHN0cm9rZSBncmVzdG9yZX0gZGVmXG4iKQorCXByaW50ZigiL3RleHR4eSB7bW92ZXRvIHNob3d9IGJpbmQgZGVmXG4iKQorCXByaW50ZigiMC4wMDAxIHNldGxpbmV3aWR0aFxuIikKK30KKyQxID09ICJHQyIgJiYgTkYgPT0gMiB7CisJbnVtYmVyX29mX2dyb3Vwcz0kMgorCXByaW50ZigiL1RpbWVzLVJvbWFuIGZpbmRmb250ICVnIHNjYWxlZm9udCBzZXRmb250XG4iLAorCSAgICAgICAxLjAgLyBudW1iZXJfb2ZfZ3JvdXBzKQorCW5leHQKK30KKyQxID09ICJCQyIgJiYgTkYgPT0gMiB7CisJYmxvY2tzX3Blcl9ncm91cD0kMjsgbmV4dAorfQorJDEgPT0gIlQiICYmIE5GID4gMSB7CisJcHJpbnRmKCIoJXMpICVnICVnIHRleHR4eVxuIiwKKwkgICAgICAgc3Vic3RyKCQwLCAyKSwgMCwgMS4wMikKKwluZXh0Cit9CiskMSA9PSAiRyIgJiYgTkYgPT0gNiAmJiAkMyA9PSAiOiIgJiYgJDUgPT0gIi0iIHsKKwlncm91cF9pbmRleD0kMgorCWdzPSQ0CisJZ2U9JDYKKwloZWlnaHQ9MS4wIC8gbnVtYmVyX29mX2dyb3VwcworCXZzdGFydD1ncm91cF9pbmRleCAqIGhlaWdodAorCXByaW50ZigiJSUgZ3JvdXAgJWQgb2YgJWQ6XG4wICVnIDEgJWcgZGdcbiIsCisJICAgICAgIGdyb3VwX2luZGV4LCBudW1iZXJfb2ZfZ3JvdXBzLCB2c3RhcnQsIHZzdGFydCArIGhlaWdodCkKKwlwcmludGYoIihHcm91cCAlcykgMS4wMiAlZyB0ZXh0eHlcbiIsIGdyb3VwX2luZGV4LCB2c3RhcnQpCisJbmV4dAorfQorJDEgPT0gIkZCIiAmJiBORiA9PSAyIHsKKwlwb3MgPSBpbmRleCgkMiwgIi0iKQorCXByaW50ZigiJSUgaG9sZSAlc1xuJWcgJWcgJWcgJWcgZmJcbiIsCisJICAgICAgICQyLCBzdWJzdHIoJDIsIDAsIHBvcykgLyBibG9ja3NfcGVyX2dyb3VwLCB2c3RhcnQsCisJICAgICAgIChzdWJzdHIoJDIsIHBvcyArIDEpICsgMSkgLyBibG9ja3NfcGVyX2dyb3VwLCB2c3RhcnQgKyBoZWlnaHQpCisJbmV4dAorfQorRU5EIHsKKyAgICAJcHJpbnRmKCIlJSUlRU9GXG4iKQorfQorJyA+JEFXS0ZJTEUKK2F3ayAtZiAkQVdLRklMRSAkVEVNUEZJTEUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZTJjcm9uY2hlY2sgYi9jb250cmliL2UyY3JvbmNoZWNrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRlMGI0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2UyY3JvbmNoZWNrCkBAIC0wLDAgKzEsNDcgQEAKKyMhL2Jpbi9zaAorIworIyBlMmNyb25jaGVjayAtLSBydW4gZTJmc2NrIGF1dG9tYXRpY2FsbHkgb3V0IG9mIC9ldGMvY3Jvbi53ZWVrbHkKKyMKKyMgVGhpcyBzY3JpcHQgaXMgaW50ZW5kZWQgdG8gYmUgcnVuIGJ5IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciAKKyMgcGVyaW9kaWNhbGx5IGZyb20gdGhlIGNvbW1hbmQgbGluZSwgb3IgdG8gYmUgcnVuIG9uY2UgYSB3ZWVrCisjIG9yIHNvIGJ5IHRoZSBjcm9uIGRhZW1vbiB0byBjaGVjayBhIG1vdW50ZWQgZmlsZXN5c3RlbSAobm9ybWFsbHkKKyMgdGhlIHJvb3QgZmlsZXN5c3RlbSwgYnV0IGl0IGNvdWxkIGJlIHVzZWQgdG8gY2hlY2sgb3RoZXIgZmlsZXN5c3RlbXMKKyMgdGhhdCBhcmUgYWx3YXlzIG1vdW50ZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGJvb3RlZCkuCisjCisjIE1ha2Ugc3VyZSB5b3UgY3VzdG9taXplICJWRyIgc28gaXQgaXMgeW91ciBMVk0gdm9sdW1lIGdyb3VwIG5hbWUsIAorIyAiVk9MVU1FIiBzbyBpdCBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZXN5c3RlbSdzIGxvZ2ljYWwgdm9sdW1lLCAKKyMgYW5kICJFTUFJTCIgdG8gYmUgeW91ciBlLW1haWwgYWRkcmVzcworIworIyBXcml0dGVuIGJ5IFRoZW9kb3JlIFRzJ28sIENvcHlyaWdodCAyMDA3LCAyMDA4LCAyMDA5LgorIworIyBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSAKKyMgR05VIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisjCisKK1ZHPXNzZAorVk9MVU1FPXJvb3QKK1NOQVBTSVpFPTEwMG0KK0VNQUlMPXN5c2FkbWluQGV4YW1wbGUuY29tCisKK1RNUEZJTEU9YG1rdGVtcCAke1RNUERJUjotL3RtcH0vZTJmc2NrLmxvZy5YWFhYWFhYWFhYYAorCitPUFRTPSItRnR0diAtQzAiCisjT1BUUz0iLUZ0dHYgLUUgZnJhZ2NoZWNrIgorCitzZXQgLWUKK1NUQVJUPSIkKGRhdGUgKyclWSVtJWQlSCVNJVMnKSIKK2x2Y3JlYXRlIC1zIC1MICR7U05BUFNJWkV9IC1uICIke1ZPTFVNRX0tc25hcCIgIiR7Vkd9LyR7Vk9MVU1FfSIKK2lmIG5pY2UgbG9nc2F2ZSAtYXMgJFRNUEZJTEUgZTJmc2NrIC1wICRPUFRTICIvZGV2LyR7Vkd9LyR7Vk9MVU1FfS1zbmFwIiAmJiBcCisgICBuaWNlIGxvZ3NhdmUgLWFzICRUTVBGSUxFIGUyZnNjayAtZnkgJE9QVFMgIi9kZXYvJHtWR30vJHtWT0xVTUV9LXNuYXAiIDsgdGhlbgorICBlY2hvICdCYWNrZ3JvdW5kIHNjcnViYmluZyBzdWNjZWVkZWQhJworICB0dW5lMmZzIC1DIDAgLVQgIiR7U1RBUlR9IiAiL2Rldi8ke1ZHfS8ke1ZPTFVNRX0iCitlbHNlCisgIGVjaG8gJ0JhY2tncm91bmQgc2NydWJiaW5nIGZhaWxlZCEgUmVib290IHRvIGZzY2sgc29vbiEnCisgIHR1bmUyZnMgLUMgMTYwMDAgLVQgIjE5MDAwMTAxIiAiL2Rldi8ke1ZHfS8ke1ZPTFVNRX0iCisgIGlmIHRlc3QgLW4gIiRSUFQtRU1BSUwiOyB0aGVuIAorICAgIG1haWwgLXMgIkUyZnNjayBvZiAvZGV2LyR7Vkd9LyR7Vk9MVU1FfSBmYWlsZWQhIiAkRU1BSUwgPCAkVE1QRklMRQorICBmaQorZmkKK2x2cmVtb3ZlIC1mICIke1ZHfS8ke1ZPTFVNRX0tc25hcCIKK3JtICRUTVBGSUxFCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFsbG9jYXRlLmMgYi9jb250cmliL2ZhbGxvY2F0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOWI1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2ZhbGxvY2F0ZS5jCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogZmFsbG9jYXRlIC0gdXRpbGl0eSB0byB1c2UgdGhlIGZhbGxvY2F0ZSBzeXN0ZW0gY2FsbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IEVyaWMgU2FuZGVlbiA8c2FuZGVlbkByZWRoYXQuY29tPgorICoKKyAqIGN2dG51bSByb3V0aW5lIHRha2VuIGZyb20geGZzcHJvZ3MsCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisvLyAjaW5jbHVkZSA8bGludXgvZmFsbG9jLmg+CisjZGVmaW5lIEZBTExPQ19GTF9LRUVQX1NJWkUJMHgwMQorI2RlZmluZSBGQUxMT0NfRkxfUFVOQ0hfSE9MRQkweDAyIC8qIGRlLWFsbG9jYXRlcyByYW5nZSAqLworCit2b2lkIHVzYWdlKHZvaWQpCit7CisJcHJpbnRmKCJVc2FnZTogZmFsbG9jYXRlIFstbnB0XSBbLW8gb2Zmc2V0XSAtbCBsZW5ndGggZmlsZW5hbWVcbiIpOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworI2RlZmluZSBFWEFCWVRFUyh4KSAgICAgKChsb25nIGxvbmcpKHgpIDw8IDYwKQorI2RlZmluZSBQRVRBQllURVMoeCkgICAgKChsb25nIGxvbmcpKHgpIDw8IDUwKQorI2RlZmluZSBURVJBQllURVMoeCkgICAgKChsb25nIGxvbmcpKHgpIDw8IDQwKQorI2RlZmluZSBHSUdBQllURVMoeCkgICAgKChsb25nIGxvbmcpKHgpIDw8IDMwKQorI2RlZmluZSBNRUdBQllURVMoeCkgICAgKChsb25nIGxvbmcpKHgpIDw8IDIwKQorI2RlZmluZSBLSUxPQllURVMoeCkgICAgKChsb25nIGxvbmcpKHgpIDw8IDEwKQorCitsb25nIGxvbmcKK2N2dG51bShjaGFyICpzKQoreworCWxvbmcgbG9uZwlpOworCWNoYXIJCSpzcDsKKwlpbnQJCWM7CisKKwlpID0gc3RydG9sbChzLCAmc3AsIDApOworCWlmIChpID09IDAgJiYgc3AgPT0gcykKKwkJcmV0dXJuIC0xTEw7CisJaWYgKCpzcCA9PSAnXDAnKQorCQlyZXR1cm4gaTsKKwlpZiAoc3BbMV0gIT0gJ1wwJykKKwkJcmV0dXJuIC0xTEw7CisKKwljID0gdG9sb3dlcigqc3ApOworCXN3aXRjaCAoYykgeworCWNhc2UgJ2snOgorCQlyZXR1cm4gS0lMT0JZVEVTKGkpOworCWNhc2UgJ20nOgorCQlyZXR1cm4gTUVHQUJZVEVTKGkpOworCWNhc2UgJ2cnOgorCQlyZXR1cm4gR0lHQUJZVEVTKGkpOworCWNhc2UgJ3QnOgorCQlyZXR1cm4gVEVSQUJZVEVTKGkpOworCWNhc2UgJ3AnOgorCQlyZXR1cm4gUEVUQUJZVEVTKGkpOworCWNhc2UgJ2UnOgorCQlyZXR1cm4gIEVYQUJZVEVTKGkpOworCX0KKworCXJldHVybiAtMUxMOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CWZkOworCWNoYXIJKmZuYW1lOworCWludAlvcHQ7CisJbG9mZl90CWxlbmd0aCA9IC0yTEw7CisJbG9mZl90CW9mZnNldCA9IDA7CisJaW50CWZhbGxvY19tb2RlID0gMDsKKwlpbnQJZXJyb3I7CisJaW50CXRmbGFnID0gMDsKKworCXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJucGw6bzp0IikpICE9IC0xKSB7CisJCXN3aXRjaChvcHQpIHsKKwkJY2FzZSAnbic6CisJCQkvKiBkbyBub3QgY2hhbmdlIGZpbGVzaXplICovCisJCQlmYWxsb2NfbW9kZSA9IEZBTExPQ19GTF9LRUVQX1NJWkU7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQkvKiBwdW5jaCBtb2RlICovCisJCQlmYWxsb2NfbW9kZSA9IChGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8CisJCQkJICAgICAgIEZBTExPQ19GTF9LRUVQX1NJWkUpOworCQkJYnJlYWs7CisJCWNhc2UgJ2wnOgorCQkJbGVuZ3RoID0gY3Z0bnVtKG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAnbyc6CisJCQlvZmZzZXQgPSBjdnRudW0ob3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCXRmbGFnKys7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKCk7CisJCX0KKwl9CisKKwlpZiAobGVuZ3RoID09IC0yTEwpIHsKKwkJcHJpbnRmKCJFcnJvcjogbm8gbGVuZ3RoIGFyZ3VtZW50IHNwZWNpZmllZFxuIik7CisJCXVzYWdlKCk7CisJfQorCisJaWYgKGxlbmd0aCA8PSAwKSB7CisJCXByaW50ZigiRXJyb3I6IGludmFsaWQgbGVuZ3RoIHZhbHVlIHNwZWNpZmllZFxuIik7CisJCXVzYWdlKCk7CisJfQorCisJaWYgKG9mZnNldCA8IDApIHsKKwkJcHJpbnRmKCJFcnJvcjogaW52YWxpZCBvZmZzZXQgdmFsdWUgc3BlY2lmaWVkXG4iKTsKKwkJdXNhZ2UoKTsKKwl9CisKKwlpZiAodGZsYWcgJiYgKGZhbGxvY19tb2RlICYgRkFMTE9DX0ZMX0tFRVBfU0laRSkpIHsKKwkJcHJpbnRmKCItbiBhbmQgLXQgb3B0aW9ucyBpbmNvbXBhdGlibGVcbiIpOworCQl1c2FnZSgpOworCX0KKworCWlmICh0ZmxhZyAmJiBvZmZzZXQpIHsKKwkJcHJpbnRmKCItbiBhbmQgLW8gb3B0aW9ucyBpbmNvbXBhdGlibGVcbiIpOworCQl1c2FnZSgpOworCX0KKworCWlmIChvcHRpbmQgPT0gYXJnYykgeworCQlwcmludGYoIkVycm9yOiBubyBmaWxlbmFtZSBzcGVjaWZpZWRcbiIpOworCQl1c2FnZSgpOworCX0KKworCWZuYW1lID0gYXJndltvcHRpbmQrK107CisKKwkvKiBTaG91bGQgd2UgY3JlYXRlIHRoZSBmaWxlIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdD8gKi8KKwlmZCA9IG9wZW4oZm5hbWUsIE9fV1JPTkxZfE9fTEFSR0VGSUxFKTsKKwlpZiAoZmQgPCAwKSB7CisJCXBlcnJvcigiRXJyb3Igb3BlbmluZyBmaWxlIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlpZiAodGZsYWcpCisJCWVycm9yID0gZnRydW5jYXRlKGZkLCBsZW5ndGgpOworCWVsc2UKKwkJZXJyb3IgPSBzeXNjYWxsKFNZU19mYWxsb2NhdGUsIGZkLCBmYWxsb2NfbW9kZSwgb2Zmc2V0LCBsZW5ndGgpOworCisJaWYgKGVycm9yIDwgMCkgeworCQlwZXJyb3IoImZhbGxvY2F0ZSBmYWlsZWQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWNsb3NlKGZkKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbWFrZS1zcGFyc2UuYyBiL2NvbnRyaWIvbWFrZS1zcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjNkNTUwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tYWtlLXNwYXJzZS5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBtYWtlLXNwYXJzZS5jIC0tLSBtYWtlIGEgc3BhcnNlIGZpbGUgZnJvbSBzdGRpbgorICogCisgKiBDb3B5cmlnaHQgMjAwNCBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRQorI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCitpbnQgZnVsbF9yZWFkKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IGdvdCwgdG90YWwgPSAwOworCWludCBwYXNzID0gMDsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJZ290ID0gcmVhZChmZCwgYnVmLCBjb3VudCk7CisJCWlmIChnb3QgPT0gLTEpIHsKKwkJCWlmICgoZXJybm8gPT0gRUlOVFIpIHx8IChlcnJubyA9PSBFQUdBSU4pKSAKKwkJCQljb250aW51ZTsKKwkJCXJldHVybiB0b3RhbCA/IHRvdGFsIDogLTE7CisJCX0KKwkJaWYgKGdvdCA9PSAwKSB7CisJCQlpZiAocGFzcysrID49IDMpCisJCQkJcmV0dXJuIHRvdGFsOworCQkJY29udGludWU7CisJCX0KKwkJcGFzcyA9IDA7CisJCWJ1ZiArPSBnb3Q7CisJCXRvdGFsICs9IGdvdDsKKwkJY291bnQgLT0gZ290OworCX0KKwlyZXR1cm4gdG90YWw7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgZmQsIGdvdCwgaTsKKwlpbnQgemZsYWcgPSAwOworCWNoYXIgYnVmWzEwMjRdOworCisJaWYgKGFyZ2MgIT0gMikgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBtYWtlLXNwYXJzZSBvdXQtZmlsZVxuIik7CisJCWV4aXQoMSk7CisJfQorCWZkID0gb3Blbihhcmd2WzFdLCBPX1dST05MWXxPX0NSRUFUfE9fVFJVTkN8T19MQVJHRUZJTEUsIDA3NzcpOworCWlmIChmZCA8IDApIHsKKwkJcGVycm9yKGFyZ3ZbMV0pOworCQlleGl0KDEpOworCX0KKwl3aGlsZSAoMSkgeworCQlnb3QgPSBmdWxsX3JlYWQoMCwgYnVmLCBzaXplb2YoYnVmKSk7CisJCWlmIChnb3QgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoZ290ID09IHNpemVvZihidWYpKSB7CisJCQlmb3IgKGk9MDsgaSA8IHNpemVvZihidWYpOyBpKyspIAorCQkJCWlmIChidWZbaV0pCisJCQkJCWJyZWFrOworCQkJaWYgKGkgPT0gc2l6ZW9mKGJ1ZikpIHsKKwkJCQlsc2VlayhmZCwgc2l6ZW9mKGJ1ZiksIFNFRUtfQ1VSKTsKKwkJCQl6ZmxhZyA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJemZsYWcgPSAwOworCQl3cml0ZShmZCwgYnVmLCBnb3QpOworCX0KKwlpZiAoemZsYWcpIHsKKwkJbHNlZWsoZmQsIC0xLCBTRUVLX0NVUik7CisJCWJ1ZlswXSA9IDA7CisJCXdyaXRlKGZkLCBidWYsIDEpOworCX0KKwlyZXR1cm4gMDsKK30KKwkJCmRpZmYgLS1naXQgYS9jb250cmliL3BvcHVsYXRlLWV4dGZzLnNoIGIvY29udHJpYi9wb3B1bGF0ZS1leHRmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMWQzZDFmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wb3B1bGF0ZS1leHRmcy5zaApAQCAtMCwwICsxLDEwNSBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgc2NyaXB0IHVzZXMgZGVidWdmcyBjb21tYW5kIHRvIHBvcHVsYXRlIHRoZSBleHQyLzMvNCBmaWxlc3lzdGVtCisjIGZyb20gYSBnaXZlbiBkaXJlY3RvcnkuCisjCisKK2RvX3VzYWdlICgpIHsKKwljYXQgPDwgX0VPRgorVXNhZ2U6IHBvcHVsYXRlLWV4dGZzLnNoIDxzb3VyY2U+IDxkZXZpY2U+CitDcmVhdGUgYW4gZXh0Mi9leHQzL2V4dDQgZmlsZXN5c3RlbSBmcm9tIGEgZGlyZWN0b3J5IG9yIGZpbGUKKworICBzb3VyY2U6IFRoZSBzb3VyY2UgZGlyZWN0b3J5IG9yIGZpbGUKKyAgZGV2aWNlOiBUaGUgdGFyZ2V0IGRldmljZQorCitfRU9GCisJZXhpdCAxCit9CisKK1sgJCMgLW5lIDIgXSAmJiBkb191c2FnZQorCitTUkNESVI9JHsxJSUvfQorREVWSUNFPSQyCisKKyMgRmluZCB3aGVyZSBpcyB0aGUgZGVidWdmcyBjb21tYW5kIGlmIG5vdCBmb3VuZCBpbiB0aGUgZW52LgoraWYgWyAteiAiJERFQlVHRlMiIF07IHRoZW4KKwlDT05UUklCX0RJUj0kKGRpcm5hbWUgJChyZWFkbGluayAtZiAkMCkpCisJREVCVUdGUz0iJENPTlRSSUJfRElSLy4uL2RlYnVnZnMvZGVidWdmcyIKK2ZpCisKK3sKKwlDV0Q9Ii8iCisJZmluZCAkU1JDRElSIHwgd2hpbGUgcmVhZCBGSUxFOyBkbworICAgICAgICAgICAgICAgIFRHVD0iJHtGSUxFIyMqL30iCisgICAgICAgICAgICAgICAgRElSPSIke0ZJTEUjJFNSQ0RJUn0iCisgICAgICAgICAgICAgICAgRElSPSIke0RJUiUkVEdUfSIKKworCQkjIFNraXAgdGhlIHJvb3QgZGlyCisJCVsgISAteiAiJERJUiIgXSB8fCBjb250aW51ZQorCQlbICEgLXogIiRUR1QiIF0gfHwgY29udGludWUKKworCQlpZiBbICIkRElSIiAhPSAiJENXRCIgXTsgdGhlbgorCQkJZWNobyAiY2QgJERJUiIKKwkJCUNXRD0iJERJUiIKKwkJZmkKKworCQkjIE9ubHkgc3RhdCBvbmNlIHNpbmNlIHN0YXQgaXMgYSB0aW1lIGNvbnN1bWluZyBjb21tYW5kCisJCVNUQVQ9JChzdGF0IC1jICJUWVBFPVwiJUZcIjtERVZOTz1cIjB4JXQgMHglVFwiO01PREU9XCIlZlwiO1U9XCIldVwiO0c9XCIlZ1wiIiAkRklMRSkKKwkJZXZhbCAkU1RBVAorCisJCWNhc2UgJFRZUEUgaW4KKwkJImRpcmVjdG9yeSIpCisJCQllY2hvICJta2RpciAkVEdUIgorCQkJOzsKKwkJInJlZ3VsYXIgZmlsZSIgfCAicmVndWxhciBlbXB0eSBmaWxlIikKKwkJCWVjaG8gIndyaXRlICRGSUxFICRUR1QiCisJCQk7OworCQkic3ltYm9saWMgbGluayIpCisJCQlMSU5LX1RHVD0kKHJlYWRsaW5rICRGSUxFKQorCQkJZWNobyAic3ltbGluayAkVEdUICRMSU5LX1RHVCIKKwkJCTs7CisJCSJibG9jayBzcGVjaWFsIGZpbGUiKQorCQkJZWNobyAibWtub2QgJFRHVCBiICRERVZOTyIKKwkJCTs7CisJCSJjaGFyYWN0ZXIgc3BlY2lhbCBmaWxlIikKKwkJCWVjaG8gIm1rbm9kICRUR1QgYyAkREVWTk8iCisJCQk7OworCQkiZmlmbyIpCisJCQllY2hvICJta25vZCAkVEdUIHAiCisJCQk7OworCQkqKQorCQkJZWNobyAiVW5rbm93bi91bmhhbmRsZWQgZmlsZSB0eXBlICckVFlQRScgZmlsZTogJEZJTEUiIDE+JjIKKwkJCTs7CisJCWVzYWMKKworCQkjIFNldCB0aGUgZmlsZSBtb2RlCisJCWVjaG8gInNpZiAkVEdUIG1vZGUgMHgkTU9ERSIKKworCQkjIFNldCB1aWQgYW5kIGdpZAorCQllY2hvICJzaWYgJFRHVCB1aWQgJFUiCisJCWVjaG8gInNpZiAkVEdUIGdpZCAkRyIKKwlkb25lCisKKwkjIEhhbmRsZSB0aGUgaGFyZCBsaW5rcy4KKwkjIFNhdmUgdGhlIGhhcmQgbGlua3MgdG8gYSBmaWxlLCB1c2UgdGhlIGlub2RlIG51bWJlciBhcyB0aGUgZmlsZW5hbWUsIGZvciBleGFtcGxlOgorCSMgSWYgYSBhbmQgYidzIGlub2RlIG51bWJlciBpcyA2Nzc1OTI4LCBzYXZlIGEgYW5kIGIgdG8gL3RtcC90bXAuVnJDd0hoNWdkdC82Nzc1OTI4LgorCUlOT0RFX0RJUj1gbWt0ZW1wIC1kYCB8fCBleGl0IDEKKwlmb3IgaSBpbiBgZmluZCAkU1JDRElSIC10eXBlIGYgLWxpbmtzICsxIC1wcmludGYgJ0lOT0RFPSVpIyMjRk49JXBcbidgOyBkbworCQlldmFsIGBlY2hvICRpIHwgc2VkICdzJCMjIyQgJCdgCisJCWVjaG8gJHtGTiMkU1JDRElSfSA+PiRJTk9ERV9ESVIvJElOT0RFCisJZG9uZQorCSMgVXNlIHRoZSBkZWJ1Z2ZzJyBsbiBhbmQgInNpZiBsaW5rc19jb3VudCIgdG8gaGFuZGxlIHRoZW0uCisJZm9yIGkgaW4gYGxzICRJTk9ERV9ESVJgOyBkbworCQkjIFRoZSBsaW5rIHNvdXJjZQorCQlTUkM9YGhlYWQgLTEgJElOT0RFX0RJUi8kaWAKKwkJIyBSZW1vdmUgdGhlIGZpbGVzIGFuZCBsaW5rIHRoZW0gYWdhaW4gZXhjZXB0IHRoZSBmaXJzdCBvbmUKKwkJZm9yIFRHVCBpbiBgc2VkIC1uIC1lICcxIXAnICRJTk9ERV9ESVIvJGlgOyBkbworCQkJZWNobyAicm0gJFRHVCIKKwkJCWVjaG8gImxuICRTUkMgJFRHVCIKKwkJZG9uZQorCQlMTl9DTlQ9YGNhdCAkSU5PREVfRElSLyRpIHwgd2MgLWxgCisJCSMgU2V0IHRoZSBsaW5rcyBjb3VudAorCQllY2hvICJzaWYgJFNSQyBsaW5rc19jb3VudCAkTE5fQ05UIgorCWRvbmUKKwlybSAtZnIgJElOT0RFX0RJUgorfSB8ICRERUJVR0ZTIC13IC1mIC0gJERFVklDRQpkaWZmIC0tZ2l0IGEvY29udHJpYi9weXRob24tdXVpZC9zZXR1cC5weSBiL2NvbnRyaWIvcHl0aG9uLXV1aWQvc2V0dXAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzkzNGQxNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcHl0aG9uLXV1aWQvc2V0dXAucHkKQEAgLTAsMCArMSwxMSBAQAorIyEvdXNyL2Jpbi9weXRob24KK2Zyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwLCBFeHRlbnNpb24KKwordXVpZCA9IEV4dGVuc2lvbignZTJmc3Byb2dzX3V1aWQnLAorICAgICAgICAgICAgICAgICBzb3VyY2VzID0gWyd1dWlkLmMnXSwKKyAgICAgICAgICAgICAgICAgbGlicmFyaWVzID0gWyd1dWlkJ10pCisKK3NldHVwIChuYW1lID0gJ2UyZnNwcm9nc191dWlkJywKKyAgICAgICB2ZXJzaW9uID0gJzEuMCcsCisgICAgICAgZGVzY3JpcHRpb24gPSAnVGhpcyBpcyBweXRob24gdXVpZCBpbnRlcmZhY2UnLAorICAgICAgIGV4dF9tb2R1bGVzID0gW3V1aWRdKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9weXRob24tdXVpZC90ZXN0LnB5IGIvY29udHJpYi9weXRob24tdXVpZC90ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyNjRmNjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3B5dGhvbi11dWlkL3Rlc3QucHkKQEAgLTAsMCArMSwxOCBAQAorIyEvdXNyL2Jpbi9weXRob24KK2ltcG9ydCBlMmZzcHJvZ3NfdXVpZAoraW1wb3J0IHRpbWUKKworcHJpbnQgIkdlbmVyYXRpbmcgdXVpZC4uLiIsCit0cnk6CisgICAgdGltZSA9IHRpbWUudGltZSgpCisgICAgdSA9IGUyZnNwcm9nc191dWlkLmdlbmVyYXRlKCkKK2V4Y2VwdDoKKyAgICB1ID0gIkZBSUwiCitwcmludCB1LCAiLi4uIiwgdGltZQorCitwcmludCAiQ2FsbGluZyBnZW5lcmF0ZSB3aXRoIHBhcmFtLi4uIiwKK3RyeToKKyAgICBlMmZzcHJvZ3NfdXVpZC5nZW5lcmF0ZSgicGFyYW0iKQorICAgIHByaW50ICJGQUlMLiIKK2V4Y2VwdDoKKyAgICBwcmludCAiT0siCmRpZmYgLS1naXQgYS9jb250cmliL3B5dGhvbi11dWlkL3V1aWQuYyBiL2NvbnRyaWIvcHl0aG9uLXV1aWQvdXVpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZGQ1NmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3B5dGhvbi11dWlkL3V1aWQuYwpAQCAtMCwwICsxLDIzIEBACisjaW5jbHVkZSA8UHl0aG9uLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHV1aWQvdXVpZC5oPgorCitzdGF0aWMgUHlPYmplY3QgKiBfdXVpZF9nZW5lcmF0ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgIHV1aWRfdCB1OworICBjaGFyIHV1aWRbMzddOworICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIiIpKSByZXR1cm4gTlVMTDsKKyAgdXVpZF9nZW5lcmF0ZSh1KTsKKyAgdXVpZF91bnBhcnNlKHUsIHV1aWQpOworICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgicyIsIHV1aWQpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgX3V1aWRfbWV0aG9kc1tdID0geworICB7ImdlbmVyYXRlIiwgX3V1aWRfZ2VuZXJhdGUsIE1FVEhfVkFSQVJHUywgIkdlbmVyYXRlIFVVSUQifSwKKyAge05VTEwsIE5VTEwsIDAsIE5VTEx9Cit9OworCit2b2lkIGluaXRlMmZzcHJvZ3NfdXVpZCh2b2lkKQoreworICAodm9pZCkgUHlfSW5pdE1vZHVsZSgiZTJmc3Byb2dzX3V1aWQiLCBfdXVpZF9tZXRob2RzKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3BkX3JlYWRkaXIuYyBiL2NvbnRyaWIvc3BkX3JlYWRkaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzQ1ZmExCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zcGRfcmVhZGRpci5jCkBAIC0wLDAgKzEsNDU4IEBACisvKgorICogcmVhZGRpciBhY2NlbGVyYXRvcgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMywgMjAwNCwgMjAwOCBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqIDIwMDgtMDYtMDggTW9kaWZpZWQgYnkgUm9zcyBCb3lsYW4gPFJvc3NCb3lsYW4gc3RhbmZvcmRhbHVtbmkgb3JnPgorICogICAgQWRkZWQgc3VwcG9ydCBmb3IgcmVhZGRpcl9yIGFuZCByZWFkZGlyNjRfciBjYWxscy4gIE5vdGUKKyAqICAgICB0aGlzIGhhcyBub3QgYmVlbiB0ZXN0ZWQgb24gYW55dGhpbmcgb3RoZXIgdGhhbiBHTlUvTGludXggaTM4NiwKKyAqICAgICBhbmQgdGhhdCB0aGUgcmVndWxhciByZWFkZGlyIHdyYXBwZXIgd2lsbCB0YWtlIHNsaWdodGx5IG1vcmUKKyAqICAgICBzcGFjZSB0aGFuIFRlZCdzIG9yaWdpbmFsIHNpbmNlIGl0IG5vdyBpbmNsdWRlcyBhIGxvY2suCisgKgorICogQ29tcGlsZSB1c2luZyB0aGUgY29tbWFuZDoKKyAqCisgKiBnY2MgLW8gc3BkX3JlYWRkaXIuc28gLXNoYXJlZCAtZnBpYyBzcGRfcmVhZGRpci5jIC1sZGwKKyAqCisgKiBVc2UgaXQgYnkgc2V0dGluZyB0aGUgTERfUFJFTE9BRCBlbnZpcm9ubWVudCB2YXJpYWJsZToKKyAqIAorICogZXhwb3J0IExEX1BSRUxPQUQ9L3Vzci9sb2NhbC9zYmluL3NwZF9yZWFkZGlyLnNvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqIAorICovCisKKyNkZWZpbmUgQUxMT0NfU1RFUFNJWkUJMTAwCisjZGVmaW5lIE1BWF9ESVJTSVpFCTAKKworI2RlZmluZSBERUJVRworLyogVXRpbCB3ZSBhdXRvY29uZmlzY2F0ZSBzcGRfcmVhZGRpci4uLiAqLworI2RlZmluZSBIQVZFX19fU0VDVVJFX0dFVEVOVgkxCisjZGVmaW5lIEhBVkVfUFJDVEwJCTEKKyNkZWZpbmUgSEFWRV9TWVNfUFJDVExfSAkxCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBERUJVR19ESVIoeCkJe2lmIChkb19kZWJ1ZykgeyB4OyB9fQorI2Vsc2UKKyNkZWZpbmUgREVCVUdfRElSKHgpCisjZW5kaWYKKworI2RlZmluZSBfR05VX1NPVVJDRQorI2RlZmluZSBfX1VTRV9MQVJHRUZJTEU2NAorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpZmRlZiBIQVZFX1NZU19QUkNUTF9ICisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjZWxzZQorI2RlZmluZSBQUl9HRVRfRFVNUEFCTEUgMworI2VuZGlmCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCitzdHJ1Y3QgZGlyZW50X3MgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBkX2lubzsKKwlsb25nIGxvbmcgZF9vZmY7CisJdW5zaWduZWQgc2hvcnQgaW50IGRfcmVjbGVuOworCXVuc2lnbmVkIGNoYXIgZF90eXBlOworCWNoYXIgKmRfbmFtZTsKK307CisKK3N0cnVjdCBkaXJfcyB7CisJRElSCSpkaXI7CisJcHRocmVhZF9tdXRleF90IGxvY2s7IC8qIE11dGV4IGxvY2sgZm9yIHRoaXMgc3RydWN0dXJlLiAgKi8KKwlpbnQJbnVtOworCWludAltYXg7CisJc3RydWN0IGRpcmVudF9zICpkcDsKKwlpbnQJcG9zOworCWludAlkaXJlY3Q7CisJc3RydWN0IGRpcmVudCByZXRfZGlyOworCXN0cnVjdCBkaXJlbnQ2NCByZXRfZGlyNjQ7Cit9OworCitzdGF0aWMgaW50ICgqcmVhbF9jbG9zZWRpcikoRElSICpkaXIpID0gMDsKK3N0YXRpYyBESVIgKigqcmVhbF9vcGVuZGlyKShjb25zdCBjaGFyICpuYW1lKSA9IDA7CitzdGF0aWMgRElSICooKnJlYWxfZmRvcGVuZGlyKShpbnQgZmQpID0gMDsKK3N0YXRpYyB2b2lkICooKnJlYWxfcmV3aW5kZGlyKShESVIgKmRpcnApID0gMDsKK3N0YXRpYyBzdHJ1Y3QgZGlyZW50ICooKnJlYWxfcmVhZGRpcikoRElSICpkaXIpID0gMDsKK3N0YXRpYyBpbnQgKCpyZWFsX3JlYWRkaXJfcikoRElSICpkaXIsIHN0cnVjdCBkaXJlbnQgKmVudHJ5LAorCQkJICAgICBzdHJ1Y3QgZGlyZW50ICoqcmVzdWx0KSA9IDA7CitzdGF0aWMgc3RydWN0IGRpcmVudDY0ICooKnJlYWxfcmVhZGRpcjY0KShESVIgKmRpcikgPSAwOworc3RhdGljIGludCAoKnJlYWxfcmVhZGRpcjY0X3IpKERJUiAqZGlyLCBzdHJ1Y3QgZGlyZW50NjQgKmVudHJ5LAorCQkJICAgICAgIHN0cnVjdCBkaXJlbnQ2NCAqKnJlc3VsdCkgPSAwOworc3RhdGljIG9mZl90ICgqcmVhbF90ZWxsZGlyKShESVIgKmRpcikgPSAwOworc3RhdGljIHZvaWQgKCpyZWFsX3NlZWtkaXIpKERJUiAqZGlyLCBvZmZfdCBvZmZzZXQpID0gMDsKK3N0YXRpYyBpbnQgKCpyZWFsX2RpcmZkKShESVIgKmRpcikgPSAwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X2RpcnNpemUgPSBNQVhfRElSU0laRTsKK3N0YXRpYyBpbnQgbnVtX29wZW4gPSAwOworI2lmZGVmIERFQlVHCitzdGF0aWMgaW50IGRvX2RlYnVnID0gMDsKKyNlbmRpZgorCitzdGF0aWMgY2hhciAqc2FmZV9nZXRlbnYoY29uc3QgY2hhciAqYXJnKQoreworCWlmICgoZ2V0dWlkKCkgIT0gZ2V0ZXVpZCgpKSB8fCAoZ2V0Z2lkKCkgIT0gZ2V0ZWdpZCgpKSkKKwkJcmV0dXJuIE5VTEw7CisjaWYgSEFWRV9QUkNUTAorCWlmIChwcmN0bChQUl9HRVRfRFVNUEFCTEUsIDAsIDAsIDAsIDApID09IDApCisJCXJldHVybiBOVUxMOworI2Vsc2UKKyNpZiAoZGVmaW5lZChsaW51eCkgJiYgZGVmaW5lZChTWVNfcHJjdGwpKQorCWlmIChzeXNjYWxsKFNZU19wcmN0bCwgUFJfR0VUX0RVTVBBQkxFLCAwLCAwLCAwLCAwKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBIQVZFX19fU0VDVVJFX0dFVEVOVgorCXJldHVybiBfX3NlY3VyZV9nZXRlbnYoYXJnKTsKKyNlbHNlCisJcmV0dXJuIGdldGVudihhcmcpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3B0cigpCit7CisJY2hhciAqY3A7CisKKwlyZWFsX29wZW5kaXIgPSBkbHN5bShSVExEX05FWFQsICJvcGVuZGlyIik7CisJcmVhbF9mZG9wZW5kaXIgPSBkbHN5bShSVExEX05FWFQsICJmZG9wZW5kaXIiKTsKKwlyZWFsX2Nsb3NlZGlyID0gZGxzeW0oUlRMRF9ORVhULCAiY2xvc2VkaXIiKTsKKwlyZWFsX3Jld2luZGRpciA9IGRsc3ltKFJUTERfTkVYVCwgInJld2luZGRpciIpOworCXJlYWxfcmVhZGRpciA9IGRsc3ltKFJUTERfTkVYVCwgInJlYWRkaXIiKTsKKwlyZWFsX3JlYWRkaXJfciA9IGRsc3ltKFJUTERfTkVYVCwgInJlYWRkaXJfciIpOworCXJlYWxfcmVhZGRpcjY0ID0gZGxzeW0oUlRMRF9ORVhULCAicmVhZGRpcjY0Iik7CisJcmVhbF9yZWFkZGlyNjRfciA9IGRsc3ltKFJUTERfTkVYVCwgInJlYWRkaXI2NF9yIik7CisJcmVhbF90ZWxsZGlyID0gZGxzeW0oUlRMRF9ORVhULCAidGVsbGRpciIpOworCXJlYWxfc2Vla2RpciA9IGRsc3ltKFJUTERfTkVYVCwgInNlZWtkaXIiKTsKKwlyZWFsX2RpcmZkID0gZGxzeW0oUlRMRF9ORVhULCAiZGlyZmQiKTsKKwlpZiAoKGNwID0gc2FmZV9nZXRlbnYoIlNQRF9SRUFERElSX01BWF9TSVpFIikpICE9IE5VTEwpIHsKKwkJbWF4X2RpcnNpemUgPSBhdG9sKGNwKTsKKwl9CisjaWZkZWYgREVCVUcKKwlpZiAoc2FmZV9nZXRlbnYoIlNQRF9SRUFERElSX0RFQlVHIikpIHsKKwkJcHJpbnRmKCJpbml0aWFsaXplZCFcbiIpOworCQlkb19kZWJ1ZysrOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBmcmVlX2NhY2hlZF9kaXIoc3RydWN0IGRpcl9zICpkaXJzdHJ1Y3QpCit7CisJaW50IGk7CisKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJihkaXJzdHJ1Y3QtPmxvY2spKTsKKworCWlmICghZGlyc3RydWN0LT5kcCkKKwkJcmV0dXJuOworCisJZm9yIChpPTA7IGkgPCBkaXJzdHJ1Y3QtPm51bTsgaSsrKSB7CisJCWZyZWUoZGlyc3RydWN0LT5kcFtpXS5kX25hbWUpOworCX0KKwlmcmVlKGRpcnN0cnVjdC0+ZHApOworCWRpcnN0cnVjdC0+ZHAgPSAwOworCWRpcnN0cnVjdC0+bWF4ID0gZGlyc3RydWN0LT5udW0gPSAwOworfQkKKworc3RhdGljIGludCBpbm9fY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IGRpcmVudF9zICpkc19hID0gKGNvbnN0IHN0cnVjdCBkaXJlbnRfcyAqKSBhOworCWNvbnN0IHN0cnVjdCBkaXJlbnRfcyAqZHNfYiA9IChjb25zdCBzdHJ1Y3QgZGlyZW50X3MgKikgYjsKKwlpbm9fdCBpX2EsIGlfYjsKKwkKKwlpX2EgPSBkc19hLT5kX2lubzsKKwlpX2IgPSBkc19iLT5kX2lubzsKKworCWlmIChkc19hLT5kX25hbWVbMF0gPT0gJy4nKSB7CisJCWlmIChkc19hLT5kX25hbWVbMV0gPT0gMCkKKwkJCWlfYSA9IDA7CisJCWVsc2UgaWYgKChkc19hLT5kX25hbWVbMV0gPT0gJy4nKSAmJiAoZHNfYS0+ZF9uYW1lWzJdID09IDApKQorCQkJaV9hID0gMTsKKwl9CisJaWYgKGRzX2ItPmRfbmFtZVswXSA9PSAnLicpIHsKKwkJaWYgKGRzX2ItPmRfbmFtZVsxXSA9PSAwKQorCQkJaV9iID0gMDsKKwkJZWxzZSBpZiAoKGRzX2ItPmRfbmFtZVsxXSA9PSAnLicpICYmIChkc19iLT5kX25hbWVbMl0gPT0gMCkpCisJCQlpX2IgPSAxOworCX0KKworCXJldHVybiAoaV9hIC0gaV9iKTsKK30KKworc3RhdGljIHN0cnVjdCBkaXJfcyAqYWxsb2NfZGlyc3RydWN0KERJUiAqZGlyKQoreworCXN0cnVjdCBkaXJfcwkqZGlyc3RydWN0OworCXN0YXRpYyBwdGhyZWFkX211dGV4YXR0cl90IG11dGV4YXR0cjsKKwltdXRleGF0dHIuX19hbGlnbiA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFOworCisJZGlyc3RydWN0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGlyX3MpKTsKKwlpZiAoZGlyc3RydWN0KQorCQltZW1zZXQoZGlyc3RydWN0LCAwLCBzaXplb2Yoc3RydWN0IGRpcl9zKSk7CisJZGlyc3RydWN0LT5kaXIgPSBkaXI7CisJcHRocmVhZF9tdXRleF9pbml0KCYoZGlyc3RydWN0LT5sb2NrKSwgJm11dGV4YXR0cik7CisJcmV0dXJuIGRpcnN0cnVjdDsKK30KKworc3RhdGljIHZvaWQgY2FjaGVfZGlyc3RydWN0KHN0cnVjdCBkaXJfcyAqZGlyc3RydWN0KQoreworCXN0cnVjdCBkaXJlbnRfcyAqZHMsICpkbmV3OworCXN0cnVjdCBkaXJlbnQ2NCAqZDsKKworCXdoaWxlICgoZCA9ICgqcmVhbF9yZWFkZGlyNjQpKGRpcnN0cnVjdC0+ZGlyKSkgIT0gTlVMTCkgeworCQlpZiAoZGlyc3RydWN0LT5udW0gPj0gZGlyc3RydWN0LT5tYXgpIHsKKwkJCWRpcnN0cnVjdC0+bWF4ICs9IEFMTE9DX1NURVBTSVpFOworCQkJREVCVUdfRElSKHByaW50ZigiUmVhbGxvY2F0aW5nIHRvIHNpemUgJWRcbiIsIAorCQkJCQkgZGlyc3RydWN0LT5tYXgpKTsKKwkJCWRuZXcgPSByZWFsbG9jKGRpcnN0cnVjdC0+ZHAsIAorCQkJCSAgICAgICBkaXJzdHJ1Y3QtPm1heCAqIHNpemVvZihzdHJ1Y3QgZGlyX3MpKTsKKwkJCWlmICghZG5ldykKKwkJCQlnb3RvIG5vbWVtOworCQkJZGlyc3RydWN0LT5kcCA9IGRuZXc7CisJCX0KKwkJZHMgPSAmZGlyc3RydWN0LT5kcFtkaXJzdHJ1Y3QtPm51bSsrXTsKKwkJZHMtPmRfaW5vID0gZC0+ZF9pbm87CisJCWRzLT5kX29mZiA9IGQtPmRfb2ZmOworCQlkcy0+ZF9yZWNsZW4gPSBkLT5kX3JlY2xlbjsKKwkJZHMtPmRfdHlwZSA9IGQtPmRfdHlwZTsKKwkJaWYgKChkcy0+ZF9uYW1lID0gbWFsbG9jKHN0cmxlbihkLT5kX25hbWUpKzEpKSA9PSBOVUxMKSB7CisJCQlkaXJzdHJ1Y3QtPm51bS0tOworCQkJZ290byBub21lbTsKKwkJfQorCQlzdHJjcHkoZHMtPmRfbmFtZSwgZC0+ZF9uYW1lKTsKKwkJREVCVUdfRElSKHByaW50ZigicmVhZGRpcjogJWx1ICVzXG4iLCAKKwkJCQkgKHVuc2lnbmVkIGxvbmcpIGQtPmRfaW5vLCBkLT5kX25hbWUpKTsKKwl9CisJcXNvcnQoZGlyc3RydWN0LT5kcCwgZGlyc3RydWN0LT5udW0sIHNpemVvZihzdHJ1Y3QgZGlyZW50X3MpLCBpbm9fY21wKTsKKwlyZXR1cm47Citub21lbToKKwlERUJVR19ESVIocHJpbnRmKCJObyBtZW1vcnksIGJhY2tpbmcgb2ZmIHRvIGRpcmVjdCByZWFkZGlyXG4iKSk7CisJZnJlZV9jYWNoZWRfZGlyKGRpcnN0cnVjdCk7CisJZGlyc3RydWN0LT5kaXJlY3QgPSAxOworfQorCitESVIgKm9wZW5kaXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyX3MJKmRpcnN0cnVjdDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICghcmVhbF9vcGVuZGlyKQorCQlzZXR1cF9wdHIoKTsKKworCURFQlVHX0RJUihwcmludGYoIk9wZW5kaXIoJXMpICglZCBvcGVuKVxuIiwgbmFtZSwgbnVtX29wZW4rKykpOworCWRpciA9ICgqcmVhbF9vcGVuZGlyKShuYW1lKTsKKwlpZiAoIWRpcikKKwkJcmV0dXJuIE5VTEw7CisKKwlkaXJzdHJ1Y3QgPSBhbGxvY19kaXJzdHJ1Y3QoZGlyKTsKKwlpZiAoIWRpcnN0cnVjdCkgeworCQkoKnJlYWxfY2xvc2VkaXIpKGRpcik7CisJCWVycm5vID0gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKG1heF9kaXJzaXplICYmIChzdGF0KG5hbWUsICZzdCkgPT0gMCkgJiYgCisJICAgIChzdC5zdF9zaXplID4gbWF4X2RpcnNpemUpKSB7CisJCURFQlVHX0RJUihwcmludGYoIkRpcmVjdG9yeSBzaXplICVsZCwgdXNpbmcgZGlyZWN0IHJlYWRkaXJcbiIsCisJCQkJIHN0LnN0X3NpemUpKTsKKwkJZGlyc3RydWN0LT5kaXJlY3QgPSAxOworCQlyZXR1cm4gKERJUiAqKSBkaXJzdHJ1Y3Q7CisJfQorCisJY2FjaGVfZGlyc3RydWN0KGRpcnN0cnVjdCk7CisJcmV0dXJuICgoRElSICopIGRpcnN0cnVjdCk7Cit9CisKK0RJUiAqZmRvcGVuZGlyKGludCBmZCkKK3sKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyX3MJKmRpcnN0cnVjdDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICghcmVhbF9mZG9wZW5kaXIpCisJCXNldHVwX3B0cigpOworCisJREVCVUdfRElSKHByaW50ZigiZmRvcGVuZGlyKCVkKSAoJWQgb3BlbilcbiIsIGZkLCBudW1fb3BlbisrKSk7CisJZGlyID0gKCpyZWFsX2Zkb3BlbmRpcikoZmQpOworCWlmICghZGlyKQorCQlyZXR1cm4gTlVMTDsKKworCWRpcnN0cnVjdCA9IGFsbG9jX2RpcnN0cnVjdChkaXIpOworCWlmICghZGlyc3RydWN0KSB7CisJCSgqcmVhbF9jbG9zZWRpcikoZGlyKTsKKwkJZXJybm8gPSAtRU5PTUVNOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAobWF4X2RpcnNpemUgJiYgKGZzdGF0KGZkLCAmc3QpID09IDApICYmIAorCSAgICAoc3Quc3Rfc2l6ZSA+IG1heF9kaXJzaXplKSkgeworCQlERUJVR19ESVIocHJpbnRmKCJEaXJlY3Rvcnkgc2l6ZSAlbGQsIHVzaW5nIGRpcmVjdCByZWFkZGlyXG4iLAorCQkJCSBzdC5zdF9zaXplKSk7CisJCWRpcnN0cnVjdC0+ZGlyID0gZGlyOworCQlkaXJzdHJ1Y3QtPmRpcmVjdCA9IDE7CisJCXJldHVybiAoRElSICopIGRpcnN0cnVjdDsKKwl9CisKKwljYWNoZV9kaXJzdHJ1Y3QoZGlyc3RydWN0KTsKKwlyZXR1cm4gKChESVIgKikgZGlyc3RydWN0KTsKK30KKworaW50IGNsb3NlZGlyKERJUiAqZGlyKQoreworCXN0cnVjdCBkaXJfcwkqZGlyc3RydWN0ID0gKHN0cnVjdCBkaXJfcyAqKSBkaXI7CisKKwlERUJVR19ESVIocHJpbnRmKCJDbG9zZWRpciAoJWQgb3BlbilcbiIsIC0tbnVtX29wZW4pKTsKKwlpZiAoZGlyc3RydWN0LT5kaXIpCisJCSgqcmVhbF9jbG9zZWRpcikoZGlyc3RydWN0LT5kaXIpOworCisJZnJlZV9jYWNoZWRfZGlyKGRpcnN0cnVjdCk7CisJZnJlZShkaXJzdHJ1Y3QpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZGlyZW50ICpyZWFkZGlyKERJUiAqZGlyKQoreworCXN0cnVjdCBkaXJfcwkqZGlyc3RydWN0ID0gKHN0cnVjdCBkaXJfcyAqKSBkaXI7CisJc3RydWN0IGRpcmVudF9zICpkczsKKworCWlmIChkaXJzdHJ1Y3QtPmRpcmVjdCkKKwkJcmV0dXJuICgqcmVhbF9yZWFkZGlyKShkaXJzdHJ1Y3QtPmRpcik7CisKKwlpZiAoZGlyc3RydWN0LT5wb3MgPj0gZGlyc3RydWN0LT5udW0pCisJCXJldHVybiBOVUxMOworCisJZHMgPSAmZGlyc3RydWN0LT5kcFtkaXJzdHJ1Y3QtPnBvcysrXTsKKwlkaXJzdHJ1Y3QtPnJldF9kaXIuZF9pbm8gPSBkcy0+ZF9pbm87CisJZGlyc3RydWN0LT5yZXRfZGlyLmRfb2ZmID0gZHMtPmRfb2ZmOworCWRpcnN0cnVjdC0+cmV0X2Rpci5kX3JlY2xlbiA9IGRzLT5kX3JlY2xlbjsKKwlkaXJzdHJ1Y3QtPnJldF9kaXIuZF90eXBlID0gZHMtPmRfdHlwZTsKKwlzdHJuY3B5KGRpcnN0cnVjdC0+cmV0X2Rpci5kX25hbWUsIGRzLT5kX25hbWUsCisJCXNpemVvZihkaXJzdHJ1Y3QtPnJldF9kaXIuZF9uYW1lKSk7CisKKwlyZXR1cm4gKCZkaXJzdHJ1Y3QtPnJldF9kaXIpOworfQorCitpbnQgcmVhZGRpcl9yKERJUiAqZGlyLCBzdHJ1Y3QgZGlyZW50ICplbnRyeSwgc3RydWN0IGRpcmVudCAqKnJlc3VsdCkKK3sKKwlzdHJ1Y3QgZGlyX3MJKmRpcnN0cnVjdCA9IChzdHJ1Y3QgZGlyX3MgKikgZGlyOworCXN0cnVjdCBkaXJlbnRfcyAqZHM7CisKKwlpZiAoZGlyc3RydWN0LT5kaXJlY3QpCisJCXJldHVybiAoKnJlYWxfcmVhZGRpcl9yKShkaXJzdHJ1Y3QtPmRpciwgZW50cnksIHJlc3VsdCk7CisKKwlwdGhyZWFkX211dGV4X2xvY2soJihkaXJzdHJ1Y3QtPmxvY2spKTsKKwlpZiAoZGlyc3RydWN0LT5wb3MgPj0gZGlyc3RydWN0LT5udW0pIHsKKwkJKnJlc3VsdCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJZHMgPSAmZGlyc3RydWN0LT5kcFtkaXJzdHJ1Y3QtPnBvcysrXTsKKwkJZW50cnktPmRfaW5vID0gZHMtPmRfaW5vOworCQllbnRyeS0+ZF9vZmYgPSBkcy0+ZF9vZmY7CisJCWVudHJ5LT5kX3JlY2xlbiA9IGRzLT5kX3JlY2xlbjsKKwkJZW50cnktPmRfdHlwZSA9IGRzLT5kX3R5cGU7CisJCXN0cm5jcHkoZW50cnktPmRfbmFtZSwgZHMtPmRfbmFtZSwgc2l6ZW9mKGVudHJ5LT5kX25hbWUpKTsKKwkJKnJlc3VsdCA9IGVudHJ5OworCX0KKwlwdGhyZWFkX211dGV4X3VubG9jaygmKGRpcnN0cnVjdC0+bG9jaykpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZGlyZW50NjQgKnJlYWRkaXI2NChESVIgKmRpcikKK3sKKwlzdHJ1Y3QgZGlyX3MJKmRpcnN0cnVjdCA9IChzdHJ1Y3QgZGlyX3MgKikgZGlyOworCXN0cnVjdCBkaXJlbnRfcyAqZHM7CisKKwlpZiAoZGlyc3RydWN0LT5kaXJlY3QpCisJCXJldHVybiAoKnJlYWxfcmVhZGRpcjY0KShkaXJzdHJ1Y3QtPmRpcik7CisKKwlpZiAoZGlyc3RydWN0LT5wb3MgPj0gZGlyc3RydWN0LT5udW0pCisJCXJldHVybiBOVUxMOworCisJZHMgPSAmZGlyc3RydWN0LT5kcFtkaXJzdHJ1Y3QtPnBvcysrXTsKKwlkaXJzdHJ1Y3QtPnJldF9kaXI2NC5kX2lubyA9IGRzLT5kX2lubzsKKwlkaXJzdHJ1Y3QtPnJldF9kaXI2NC5kX29mZiA9IGRzLT5kX29mZjsKKwlkaXJzdHJ1Y3QtPnJldF9kaXI2NC5kX3JlY2xlbiA9IGRzLT5kX3JlY2xlbjsKKwlkaXJzdHJ1Y3QtPnJldF9kaXI2NC5kX3R5cGUgPSBkcy0+ZF90eXBlOworCXN0cm5jcHkoZGlyc3RydWN0LT5yZXRfZGlyNjQuZF9uYW1lLCBkcy0+ZF9uYW1lLAorCQlzaXplb2YoZGlyc3RydWN0LT5yZXRfZGlyNjQuZF9uYW1lKSk7CisKKwlyZXR1cm4gKCZkaXJzdHJ1Y3QtPnJldF9kaXI2NCk7Cit9CisKK2ludCByZWFkZGlyNjRfciAoRElSICpfX3Jlc3RyaWN0IGRpciwKKwkJIHN0cnVjdCBkaXJlbnQ2NCAqX19yZXN0cmljdCBlbnRyeSwKKwkJIHN0cnVjdCBkaXJlbnQ2NCAqKl9fcmVzdHJpY3QgcmVzdWx0KQoreworCXN0cnVjdCBkaXJfcwkqZGlyc3RydWN0ID0gKHN0cnVjdCBkaXJfcyAqKSBkaXI7CisJc3RydWN0IGRpcmVudF9zICpkczsKKworCWlmIChkaXJzdHJ1Y3QtPmRpcmVjdCkKKwkJcmV0dXJuICgqcmVhbF9yZWFkZGlyNjRfcikoZGlyLCBlbnRyeSwgcmVzdWx0KTsKKwlwdGhyZWFkX211dGV4X2xvY2soJihkaXJzdHJ1Y3QtPmxvY2spKTsKKwlpZiAoZGlyc3RydWN0LT5wb3MgPj0gZGlyc3RydWN0LT5udW0pIHsKKwkJKnJlc3VsdCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJZHMgPSAmZGlyc3RydWN0LT5kcFtkaXJzdHJ1Y3QtPnBvcysrXTsKKwkJZW50cnktPmRfaW5vID0gZHMtPmRfaW5vOworCQllbnRyeS0+ZF9vZmYgPSBkcy0+ZF9vZmY7CisJCWVudHJ5LT5kX3JlY2xlbiA9IGRzLT5kX3JlY2xlbjsKKwkJZW50cnktPmRfdHlwZSA9IGRzLT5kX3R5cGU7CisJCXN0cm5jcHkoZW50cnktPmRfbmFtZSwgZHMtPmRfbmFtZSwKKwkJCXNpemVvZihlbnRyeS0+ZF9uYW1lKSk7CisJCSpyZXN1bHQgPSBlbnRyeTsKKwl9CisJcHRocmVhZF9tdXRleF91bmxvY2soJihkaXJzdHJ1Y3QtPmxvY2spKTsKKwlyZXR1cm4gMDsKK30KKworb2ZmX3QgdGVsbGRpcihESVIgKmRpcikKK3sKKwlzdHJ1Y3QgZGlyX3MJKmRpcnN0cnVjdCA9IChzdHJ1Y3QgZGlyX3MgKikgZGlyOworCisJaWYgKGRpcnN0cnVjdC0+ZGlyZWN0KQorCQlyZXR1cm4gKCpyZWFsX3RlbGxkaXIpKGRpcnN0cnVjdC0+ZGlyKTsKKworCXJldHVybiAoKG9mZl90KSBkaXJzdHJ1Y3QtPnBvcyk7Cit9CisKK3ZvaWQgc2Vla2RpcihESVIgKmRpciwgb2ZmX3Qgb2Zmc2V0KQoreworCXN0cnVjdCBkaXJfcwkqZGlyc3RydWN0ID0gKHN0cnVjdCBkaXJfcyAqKSBkaXI7CisKKwlpZiAoZGlyc3RydWN0LT5kaXJlY3QpIHsKKwkJKCpyZWFsX3NlZWtkaXIpKGRpcnN0cnVjdC0+ZGlyLCBvZmZzZXQpOworCQlyZXR1cm47CisJfQorCisJZGlyc3RydWN0LT5wb3MgPSBvZmZzZXQ7Cit9CisKK3ZvaWQgcmV3aW5kZGlyKERJUiAqZGlyKQoreworCXN0cnVjdCBkaXJfcwkqZGlyc3RydWN0ID0gKHN0cnVjdCBkaXJfcyAqKSBkaXI7CisKKwkoKnJlYWxfcmV3aW5kZGlyKShkaXJzdHJ1Y3QtPmRpcik7CisJaWYgKGRpcnN0cnVjdC0+ZGlyZWN0KQorCQlyZXR1cm47CisJCisJcHRocmVhZF9tdXRleF9sb2NrKCYoZGlyc3RydWN0LT5sb2NrKSk7CisJZGlyc3RydWN0LT5wb3MgPSAwOworCWZyZWVfY2FjaGVkX2RpcihkaXJzdHJ1Y3QpOworCWNhY2hlX2RpcnN0cnVjdChkaXJzdHJ1Y3QpOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYoZGlyc3RydWN0LT5sb2NrKSk7Cit9CisKK2ludCBkaXJmZChESVIgKmRpcikKK3sKKwlzdHJ1Y3QgZGlyX3MJKmRpcnN0cnVjdCA9IChzdHJ1Y3QgZGlyX3MgKikgZGlyOworCWludCBmZCA9ICgqcmVhbF9kaXJmZCkoZGlyc3RydWN0LT5kaXIpOworCisJREVCVUdfRElSKHByaW50ZigiZGlyZmQgJWQsICVwXG4iLCBmZCwgcmVhbF9kaXJmZCkpOworCXJldHVybiBmZDsKK30KZGlmZiAtLWdpdCBhL2RlYmlhbi9hdHRpYy9jb21lcnJnLWRldi5pbmZvIGIvZGViaWFuL2F0dGljL2NvbWVycmctZGV2LmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJkMzQ0YgotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9hdHRpYy9jb21lcnJnLWRldi5pbmZvCkBAIC0wLDAgKzEsNCBAQAorREVTQ1I9IlRoZSBDb21tb24gRXJyb3IgRGVzY3JpcHRpb24gbGlicmFyeS4iCitTRUNUSU9OX01BVENIPSJEZXZlbG9wbWVudCIKK1NFQ1RJT05fTkFNRT0iRGV2ZWxvcG1lbnQiCitGSUxFPWNvbV9lcnIuaW5mbwpkaWZmIC0tZ2l0IGEvZGViaWFuL2F0dGljL2NvbWVycmctZGV2Lm1lbnUgYi9kZWJpYW4vYXR0aWMvY29tZXJyZy1kZXYubWVudQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGRkYWIzCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2F0dGljL2NvbWVycmctZGV2Lm1lbnUKQEAgLTAsMCArMSw3IEBACis/cGFja2FnZShjb21lcnJnLWRldik6bmVlZHM9ImR3d3ciIHNlY3Rpb249IkFwcHMvUHJvZ3JhbW1pbmciXAorICB0aXRsZT0iVGhlIGNvbV9lcnIgbGlicmFyeSIgXAorICBsb25ndGl0bGU9IlRoZSBDb21tb24gRXJyb3IgRGVzY3JpcHRpb24gbGlicmFyeSJcCisgIGRlc2NyaXB0aW9uPSJsaWJjb21lcnIgaXMgYW4gYXR0ZW1wdCB0byBwcmVzZW50IGEgY29tbW9uIGVycm9yLWhhbmRsaW5nIG1lY2hhbmlzbSB0byBcCisJbWFuaXB1bGF0ZSB0aGUgbW9zdCBjb21tb24gZm9ybSBvZiBlcnJvciBjb2RlIGluIGEgZmFzaGlvbiB0aGF0IGRvZXMgbm90IFwKKwloYXZlIHRoZSBwcm9ibGVtcyBpZGVudGlmaWVkIHdpdGggbWVjaGFuaXNtcyBjb21tb25seSBpbiB1c2UuIiBcCisgIGNvbW1hbmQ9Ii91c3IvZG9jL2NvbWVycmctZGV2L2h0bWwtaW5mby9jb21fZXJyX3RvYy5odG1sIgpkaWZmIC0tZ2l0IGEvZGViaWFuL2F0dGljL2UyZnNsaWJzZy1kZXYuaW5mbyBiL2RlYmlhbi9hdHRpYy9lMmZzbGlic2ctZGV2LmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFiZTk1MAotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9hdHRpYy9lMmZzbGlic2ctZGV2LmluZm8KQEAgLTAsMCArMSw0IEBACitERVNDUj0iTGlicmFyeSBvZiByb3V0aW5lcyB0byBtYW5pcHVsYXRlIGFuIGV4dDIgZmlsZXN5c3RlbS4iCitTRUNUSU9OX01BVENIPSJEZXZlbG9wbWVudCIKK1NFQ1RJT05fTkFNRT0iRGV2ZWxvcG1lbnQiCitGSUxFPWxpYmV4dDJmcy5pbmZvCmRpZmYgLS1naXQgYS9kZWJpYW4vYXR0aWMvZTJmc2xpYnNnLWRldi5tZW51IGIvZGViaWFuL2F0dGljL2UyZnNsaWJzZy1kZXYubWVudQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWNlOGMwCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2F0dGljL2UyZnNsaWJzZy1kZXYubWVudQpAQCAtMCwwICsxLDQgQEAKKz9wYWNrYWdlKGUyZnNsaWJzZy1kZXYpOm5lZWRzPSJkd3d3IiBzZWN0aW9uPSJBcHBzL1Byb2dyYW1taW5nIlwKKyAgdGl0bGU9IlRoZSBleHQyZnMgbGlicmFyeS4iIFwKKyAgbG9uZ3RpdGxlPSJBIGxpYnJhcnkgdG8gaGFuZGxlIGxvdy1sZXZlbCBzdHJ1Y3R1cmVzIGluIGFuIGV4dDIgZmlsZXN5c3RlbSJcCisgIGNvbW1hbmQ9Ii91c3IvZG9jL2UyZnNsaWJzZy1kZXYvaHRtbC1pbmZvL2xpYmV4dDJmc190b2MuaHRtbCIKZGlmZiAtLWdpdCBhL2RlYmlhbi9hdHRpYy9saWJzL2NvbWVycjJnLmZpbGVzIGIvZGViaWFuL2F0dGljL2xpYnMvY29tZXJyMmcuZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYxZjU1MgotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9hdHRpYy9saWJzL2NvbWVycjJnLmZpbGVzCkBAIC0wLDAgKzEsMiBAQAorbGliL2xpYmNvbV9lcnIuc28uPy4qCitsaWIvbGliY29tX2Vyci5zby4/CmRpZmYgLS1naXQgYS9kZWJpYW4vYXR0aWMvbGlicy9jb250cm9sIGIvZGViaWFuL2F0dGljL2xpYnMvY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjA1MTIwCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2F0dGljL2xpYnMvY29udHJvbApAQCAtMCwwICsxLDExNCBAQAorU291cmNlOiBlMmZzcHJvZ3MKK1NlY3Rpb246IGJhc2UKK1ByaW9yaXR5OiByZXF1aXJlZAorTWFpbnRhaW5lcjogWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPgorU3RhbmRhcmRzLVZlcnNpb246IDIuNC4wLjAKKworUGFja2FnZTogZTJmc3Byb2dzCitFc3NlbnRpYWw6IHllcworRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30KK0NvbmZsaWN0czogZTJmc3Byb2dzZywgZHVtcCAoPDwgMC40YjQtNCksIHF1b3RhICg8PCAxLjU1LTguMSkKK0FyY2hpdGVjdHVyZTogYW55CitEZXNjcmlwdGlvbjogVGhlIEVYVDIgZmlsZSBzeXN0ZW0gdXRpbGl0aWVzLgorIEVYVDIgc3RhbmRzIGZvciAiRXh0ZW5kZWQgRmlsZXN5c3RlbSIsIHZlcnNpb24gMi4gSXQncyB0aGUgbWFpbgorIGZpbGVzeXN0ZW0gdHlwZSB1c2VkIGZvciBoYXJkIGRpc2tzIG9uIERlYmlhbiBhbmQgb3RoZXIgTGludXggc3lzdGVtcy4KKyAuCisgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHByb2dyYW1zIGZvciBjcmVhdGluZywgY2hlY2tpbmcsIGFuZCBtYWludGFpbmluZyBFWFQyCisgZmlsZXN5c3RlbXMsIGFuZCB0aGUgZ2VuZXJpYyBgZnNjaycgd3JhcHBlci4KKyAuCisgVGhpcyByZWxlYXNlIG1heSBicmVhayBvbGRlciB2ZXJzaW9ucyBvZiBkdW1wIGFuZCBxdW90YS4KKworUGFja2FnZTogY29tZXJyMmcKK0RlcGVuZHM6ICR7c2hsaWJzOkRlcGVuZHN9CitDb25mbGljdHM6IGUyZnNwcm9ncyAoPDwgMS4xMC02KSwgY29tZXJyMgorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBUaGUgQ29tbW9uIEVycm9yIERlc2NyaXB0aW9uIGxpYnJhcnkgLSBzaGFyZWQgbGlicmFyaWVzLgorIGxpYmNvbWVyciBpcyBhbiBhdHRlbXB0IHRvIHByZXNlbnQgYSBjb21tb24gZXJyb3ItaGFuZGxpbmcgbWVjaGFuaXNtIHRvCisgbWFuaXB1bGF0ZSB0aGUgbW9zdCBjb21tb24gZm9ybSBvZiBlcnJvciBjb2RlIGluIGEgZmFzaGlvbiB0aGF0IGRvZXMgbm90CisgaGF2ZSB0aGUgcHJvYmxlbXMgaWRlbnRpZmllZCB3aXRoIG1lY2hhbmlzbXMgY29tbW9ubHkgaW4gdXNlLgorIC4KKyBJdCBpcyBtYWlubHkgdXNlZCBieSB0aGUgRVhUMi1maWxlc3lzdGVtIHRvb2xzLgorCitQYWNrYWdlOiBzczJnCitEZXBlbmRzOiAke3NobGliczpEZXBlbmRzfQorQ29uZmxpY3RzOiBlMmZzcHJvZ3MgKDw8IDEuMTAtNiksIHNzMgorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiAiU3ViLVN5c3RlbSIgbGlicmFyeSBmb3Igc2ltcGxlIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgcGFyc2luZyAtIHNoYXJlZCBsaWJzCisgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBzaGFyZWQgbGlicyB0byBzdXBwb3J0IGNvbW1hbmQtbGluZQorIGludGVyZmFjZSBwYXJzZXJzIGdlbmVyYXRlZCB3aXRoIHRoZSBzc2ctZGV2IHBhY2thZ2UuCisgLiAKKyBJdCB3YXMgb3JpZ2luYWxseSBpbnNwaXJlZCBieSB0aGUgTXVsdGljcyBTdWJTeXN0ZW0gbGlicmFyeS4KKworUGFja2FnZTogZTJmc2xpYnNnCitEZXBlbmRzOiAke3NobGliczpEZXBlbmRzfQorUHJvdmlkZXM6IGV4dDJmczJnLCBlMnAyZywgdXVpZDFnCitDb25mbGljdHM6IGUyZnNwcm9ncyAoPD0gMS4xMC03KQorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBUaGUgRVhUMiBmaWxlIHN5c3RlbSBzaGFyZWQgbGlicy4KKyBFWFQyIHN0YW5kcyBmb3IgIkV4dGVuZGVkIEZpbGVzeXN0ZW0iLCB2ZXJzaW9uIDIuIEl0J3MgdGhlIGZpbGVzeXN0ZW0gdHlwZQorIHVzZWQgZm9yIGhhcmQgZGlza3Mgb24gRGViaWFuIGFuZCBvdGhlciBMaW51eCBzeXN0ZW1zLgorIC4KKyBUaGlzIHBhY2thZ2UgY29udGFpbnMgc2hhcmVkIGxpYnJhcmllcyBuZWVkZWQgYnkgdGhlIHV0aWxpdHkgcHJvZ3JhbXMuCisKK1BhY2thZ2U6IGNvbWVycmctZGV2CitTZWN0aW9uOiBkZXZlbAorUHJpb3JpdHk6IGV4dHJhCitEZXBlbmRzOiAke2xpYmNkZXY6RGVwZW5kc30sIGNvbWVycjJnCitTdWdnZXN0czogZG9jLWJhc2UKK0NvbmZsaWN0czogZTJmc3Byb2dzICg8PCAxLjEwLTYpLCBjb21lcnItZGV2CitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IFRoZSBDb21tb24gRXJyb3IgRGVzY3JpcHRpb24gbGlicmFyeSAtIGhlYWRlcnMgYW5kIHN0YXRpYyBsaWJyYXJpZXMuCisgbGliY29tZXJyIGlzIGFuIGF0dGVtcHQgdG8gcHJlc2VudCBhIGNvbW1vbiBlcnJvci1oYW5kbGluZyBtZWNoYW5pc20gdG8KKyBtYW5pcHVsYXRlIHRoZSBtb3N0IGNvbW1vbiBmb3JtIG9mIGVycm9yIGNvZGUgaW4gYSBmYXNoaW9uIHRoYXQgZG9lcyBub3QKKyBoYXZlIHRoZSBwcm9ibGVtcyBpZGVudGlmaWVkIHdpdGggbWVjaGFuaXNtcyBjb21tb25seSBpbiB1c2UuCisKK1BhY2thZ2U6IHNzZy1kZXYKK1NlY3Rpb246IGRldmVsCitQcmlvcml0eTogZXh0cmEKK0RlcGVuZHM6ICR7bGliY2RldjpEZXBlbmRzfSwgc3MyZworQ29uZmxpY3RzOiBlMmZzcHJvZ3MgKDw8IDEuMTAtNiksIHNzLWRldgorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiAiU3ViLVN5c3RlbSIgbGlicmFyeSBmb3Igc2ltcGxlIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgcGFyc2luZyAtIGRldmVsLiBmaWxlcworIFRoaXMgcGFja2FnZSBpbmNsdWRlcyBhIHRvb2wgdGhhdCBwYXJzZXMgYSBjb21tYW5kIHRhYmxlIHRvIGdlbmVyYXRlCisgYSBzaW1wbGUgY29tbWFuZC1saW5lIGludGVyZmFjZSBwYXJzZXIsIHRoZSBpbmNsdWRlIGZpbGVzIG5lZWRlZCB0bworIGNvbXBpbGUgYW5kIHVzZSBpdCwgYW5kIHRoZSBzdGF0aWMgbGlicy4KKyAuIAorIEl0IHdhcyBvcmlnaW5hbGx5IGluc3BpcmVkIGJ5IHRoZSBNdWx0aWNzIFN1YlN5c3RlbSBsaWJyYXJ5LgorCitQYWNrYWdlOiBlMmZzbGlic2ctZGV2CitTZWN0aW9uOiBkZXZlbAorUHJpb3JpdHk6IGV4dHJhCitEZXBlbmRzOiAke2xpYmNkZXY6RGVwZW5kc30sIGUyZnNsaWJzZywgY29tZXJyZy1kZXYKK1N1Z2dlc3RzOiBkb2MtYmFzZQorUHJvdmlkZXM6IGV4dDJmc2ctZGV2LCBlMnBnLWRldiwgdXVpZGctZGV2CitDb25mbGljdHM6IGUyZnNwcm9ncyAoPDwgMS4xMC02KSwgZTJmc2xpYnMtZGV2CitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IFRoZSBoZWFkZXJzIGFuZCBzdGF0aWMgbGlicmFyaWVzIGZvciBleHQyZnMtYXdhcmUgdG9vbHMtZGV2ZWxvcG1lbnQuCisgRVhUMkZTIHN0YW5kcyBmb3IgIkV4dGVuZGVkIEZpbGVzeXN0ZW0iLCB2ZXJzaW9uIDIuIEl0J3MgdGhlIGZpbGVzeXN0ZW0KKyB0eXBlIHVzZWQgZm9yIGhhcmQgZGlza3Mgb24gRGViaWFuIGFuZCBvdGhlciBMaW51eCBzeXN0ZW1zLgorIC4KKyBUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIGhlYWRlcnMgYW5kIHNoYXJlZCBsaWJyYXJpZXMgbmVlZGVkIHRvIGNvbXBpbGUKKyBleHQyZnMtYXdhcmUgcHJvZ3JhbXMuIE9ubHkgcHJvZ3JhbW1lcnMgdGhhdCByZWFsbHkgbWFuaXB1bGF0ZQorIGZlYXR1cmVzIHNwZWNpZmljIHRvIHRoZSBleHQyIGZpbGVzeXN0ZW0gd2lsbCBuZWVkIHRoaXMuIE1vc3QKKyBwcm9ncmFtbWVycyB3aWxsIHVzZSB0aGUgZ2VuZXJpYyBmaWxlc3lzdGVtLWluZGVwZW5kZW50IGludGVyZmFjZQorIGZyb20gbGliYy4KKyAuCisgSXQgYWxzbyBjb250YWlucyBkZXYgZmlsZXMgZm9yIDIgb3RoZXIgbGlicyAoZTJwIGFuZCB1dWlkKSB1c2VkIGJ5CisgdGhlIGUyZnNwcm9ncywgYnV0IHdoaWNoIGFyZSBub3QgeWV0IHBhY2thZ2VkIGFsbCBieSB0aGVtc2VsdmVzCisgYmVjYXVzZSB0aGV5IGxhY2sgZG9jdW1lbnRhdGlvbi4gVGhleSBtYXkgYWxzbyBsYWNrIHNvbWUgc3VwcG9ydAorIGZpbGVzLCBieSBJIGNhbid0IHJlYWxseSBrbm93IHVudGlsIHNvbWVvbmUgdXNlcyB0aGVtLi4uCisgLgorIGxpYmUycCBpcyBmb3IgdXNlci1sZXZlbCBlMmZzcHJvZ3MgY29tbWFuZHMuICBJdCdzIHVzZWQgYnkgZHVtcGUyZnMsCisgY2hhdHRyLCBhbmQgbHNhdHRyLiAgRnVuY3Rpb25zIGluIGxpYmUycCB0eXBpY2FsbHkgaGF2ZSB0d28KKyBjaGFyYWN0ZXJpc3RpY3MgKGEpIGRvbid0IHJlcXVpcmUgdGhhdCBibG9jayBkZXZpY2UgY29udGFpbmluZyB0aGUKKyBmaWxlc3lzdGVtIGJlIG9wZW5lZCBkaXJlY3RseSAoZnVuY3Rpb25zIGluIGxpYmV4dDJmcyBkbyksIGFuZCAoYikKKyBsaWJlMnAgdHlwaWNhbGx5IGNvbnRhaW5zIHByaW50ZiBzdGF0ZW1lbnRzIG9yIHBhcnNlIHVzZXIgaW5wdXQsIGFuZCBzbworIGhhdmUgbW9yZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBpc3N1ZXMuCisgLgorIGxpYnV1aWQgZ2VuZXJhdGVzIGFuZCBwYXJzZXMgMTI4LWJpdCB1bml2ZXJzYWxseSB1bmlxdWUgaWQncyAoVVVJRCdzKSwKKyB1c2luZyBhIHN0YW5kYXJkIHdoaWNoIGlzIGJsZXNzZWQgYnkgYm90aCBNaWNyb3NvZnQgYW5kIERDRSwgYW5kIGlzCisgYmVpbmcgcHJvcG9zZWQgYXMgYW4gaW50ZXJuZXQgc3RhbmRhcmQuICBTZWUgdGhlIGludGVybmV0LWRyYWZ0OgorIC4KKyAgICAgICAgICAgICAgICBkcmFmdC1sZWFjaC11dWlkcy1ndWlkcy0wMS50eHQKKyAuCisgZm9yIG1vcmUgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9kZWJpYW4vYXR0aWMvbGlicy9lMmZzbGlic2cuZmlsZXMgYi9kZWJpYW4vYXR0aWMvbGlicy9lMmZzbGlic2cuZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3NzA4NAotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9hdHRpYy9saWJzL2UyZnNsaWJzZy5maWxlcwpAQCAtMCwwICsxLDMgQEAKK2xpYi8qLnNvLj8uKgorbGliLyouc28uPwordXNyL2RvYy9lMmZzbGlic2cvKgpkaWZmIC0tZ2l0IGEvZGViaWFuL2F0dGljL2xpYnMvcnVsZXMgYi9kZWJpYW4vYXR0aWMvbGlicy9ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2YzYzhkCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2F0dGljL2xpYnMvcnVsZXMKQEAgLTAsMCArMSwxODIgQEAKKyMhIC91c3IvYmluL21ha2UgLWYKKyMgLSotIG1ha2VmaWxlIC0qLQorIworIyBJbnZva2UgZWFjaCB0YXJnZXQgd2l0aCBgLi9kZWJpYW4vcnVsZXMgPHRhcmdldD4nLiAgQWxsIHRhcmdldHMgc2hvdWxkIGJlCisjIGludm9rZWQgd2l0aCB0aGUgcGFja2FnZSByb290IGFzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKyMKKyMgVGhlIGBiaW5hcnknIHRhcmdldCBtdXN0IGJlIHJ1biBhcyByb290LCBhcyBpdCBuZWVkcyB0byBpbnN0YWxsIGZpbGVzIHdpdGgKKyMgc3BlY2lmaWMgb3duZXJzaGlwcy4KKworIyBVbmNvbW1lbnQgdGhpcyB0byB0dXJuIG9uIHZlcmJvc2UgbW9kZS4KK2V4cG9ydCBESF9WRVJCT1NFPTEKKworcGFja2FnZSA9IGUyZnNwcm9ncworQVJDSCA9ICQoc2hlbGwgZHBrZyAtLXByaW50LWFyY2hpdGVjdHVyZSkKKworIyBmaW5kIHRoZSB2ZXJzaW9uIGZvciB0aGUgbWFpbiBwYWNrYWdlLCBmcm9tIGNoYW5nZWxvZyBmaWxlCitNQUlOX1ZFUlNJT04gPSAkKHNoZWxsIGhlYWQgLTEgZGViaWFuL2NoYW5nZWxvZyB8IGN1dCAnLWQgJyAtZiAyIHwgc2VkICdzL1soKV0vL2cnKQorIyBmaW5kIHZlcnNpb25zIGZvciBsaWJyYXJpZXMgZ29pbmcgaW50byB0aGVpciBvd24gcGFja2FnZXMsIGZyb20gdGhlaXIgTWFrZWZpbGUuaW4ncworQ09NRVJSX1ZFUlNJT04gPSAkKHNoZWxsIGdyZXAgRUxGX1ZFUlNJT04gbGliL2V0L01ha2VmaWxlLmluIHwgY3V0ICctZCAnIC1mMykKK0NPTUVSUl9NQUpPUiA9ICQod29yZCAxLCQoc3Vic3QgLiwgLCQoQ09NRVJSX1ZFUlNJT04pKSkKK1NTX1ZFUlNJT04gPSAkKHNoZWxsIGdyZXAgRUxGX1ZFUlNJT04gbGliL3NzL01ha2VmaWxlLmluIHwgY3V0ICctZCAnIC1mMykKK1NTX01BSk9SID0gJCh3b3JkIDEsJChzdWJzdCAuLCAsJChTU19WRVJTSU9OKSkpCisKK3RvcGRpciA9ICQoc2hlbGwgcHdkKQorZGViZGlyID0gJCh0b3BkaXIpL2RlYmlhbgorbWFpbmRpciA9ICQoZGViZGlyKS90bXAKK2J1aWxkZGlyID0gJCh0b3BkaXIpL2J1aWxkZGlyCitkb2NkaXIgPSAkKG1haW5kaXIpL3Vzci9kb2MvJChwYWNrYWdlKQorCitTVUJQQUNLQUdFU19ESVJTID0gdG1wIGUyZnNsaWJzZyBlMmZzbGlic2ctZGV2IGNvbWVyciQoQ09NRVJSX01BSk9SKWcgY29tZXJyZy1kZXYgXAorCXNzJChTU19NQUpPUilnIHNzZy1kZXYKKworaW5zdGFsbGRvYyA9IGluc3RhbGwgLW0gNjQ0CitpbnN0YWxsYmluID0gaW5zdGFsbCAtbSA3NTUKKworaWZlcSAoJChBUkNIKSxhbHBoYSkKK0NDT1BUUyA9IC1nIC1PMiAtZnNpZ25lZC1jaGFyIC1ESEFWRV9ORVRJTkVUX0lOX0gKK0xJQkMtREVWID0gbGliYzYuMS1kZXYKK2Vsc2UKK0NDT1BUUyA9IC1nIC1PMiAtZnNpZ25lZC1jaGFyCitMSUJDLURFViA9IGxpYmM2LWRldgorZW5kaWYKKworYnVpbGQ6IGNvbmZpZ3VyZWQKKwlkaF90ZXN0ZGlyCisJbWFrZSAtQyAkKGJ1aWxkZGlyKQorCW1ha2UgLUMgJChidWlsZGRpcikvbWlzYyBmaW5kc3VwZXIKKwljZCBkb2MgJiYgdGV4aTJodG1sIC1zcGxpdF9jaGFwdGVyIGxpYmV4dDJmcy50ZXhpbmZvCisJY2QgbGliL2V0ICYmIHRleGkyaHRtbCAtc3BsaXRfY2hhcHRlciAtZXhwYW5kaW5mbyBjb21fZXJyLnRleGluZm8KKwl0b3VjaCBidWlsZAorCitjb25maWd1cmVkOgorCWRoX3Rlc3RkaXIKKwlta2RpciAtcCAkKGJ1aWxkZGlyKQorCWNkICQoYnVpbGRkaXIpICYmIENGTEFHUz0iJChDRkxBR1MpIiBcCisJCS4uL2NvbmZpZ3VyZSAtLWVuYWJsZS1lbGYtc2hsaWJzIC0tZW5hYmxlLWR5bmFtaWMtZTJmc2NrIFwKKwkJLS13aXRoLWNjb3B0cz0iJChDQ09QVFMpIgorCXRvdWNoIGNvbmZpZ3VyZWQKKworY2xlYW46CisJZGhfdGVzdGRpcgorCXJtIC1mIGJ1aWxkIGNvbmZpZ3VyZWQgaW5zdGFsbAorCS1tYWtlIC1DICQoYnVpbGRkaXIpIC1pIGRpc3RjbGVhbgorCXJtIC1yZiAkKGJ1aWxkZGlyKQorCXJtIC1mIGRvYy9saWJleHQyZnNfKi5odG1sIGxpYi9ldC9jb21fZXJyXyouaHRtbAorCWRoX2NsZWFuCisKK2JpbmFyeS1pbmRlcDogYnVpbGQKKyAgIyBubyBhcmNoLWluZGVwZW5kYW50IGRlYnMuCisKK2JpbmFyeS1hcmNoOiBidWlsZAorCWRoX3Rlc3R2ZXJzaW9uIDAuNTYgIyA9PSAwLjUzICsgZml4ZXMKKwlkaF90ZXN0ZGlyIC1hCisJZGhfdGVzdHJvb3QgLWEKKwlkaF9jbGVhbiAtYSAtaworCWRoX2luc3RhbGxkaXJzIC1hCisKKwltYWtlIC1DICQoYnVpbGRkaXIpIGluc3RhbGwgREVTVERJUj0kKG1haW5kaXIpCisJaW5zdGFsbCAtbSA3NTUgJChidWlsZGRpcikvbWlzYy9maW5kc3VwZXIgJChtYWluZGlyKS9zYmluCisgICMgc3RhdGljIGxpYnMgYW5kIC5oIGZpbGVzCisJbWFrZSAtQyAkKGJ1aWxkZGlyKSBpbnN0YWxsLWxpYnMgREVTVERJUj0kKG1haW5kaXIpCisJaW5zdGFsbCAtbSA2NDQgJChidWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQobWFpbmRpcikvdXNyL2luY2x1ZGUvc3MvCisKKyMgZml4IGFuZCBpbnN0YWxsIGNvbXBpbGVfZXQgc2NyaXB0CisJc2VkIHMlJCh0b3BkaXIpL2xpYi9ldCUvdXNyL3NoYXJlL2NvbWVyciUgXAorCSAgPCQoYnVpbGRkaXIpL2xpYi9ldC9jb21waWxlX2V0IFwKKwkgID4kKGRlYmRpcikvY29tZXJyZy1kZXYvdXNyL2Jpbi9jb21waWxlX2V0CisJY2htb2QgNzU1ICQoZGViZGlyKS9jb21lcnJnLWRldi91c3IvYmluL2NvbXBpbGVfZXQKKyMgYWRkIHN1cHBvcnQgZmlsZXMgZm9yIGNvbXBpbGVfZXQKKwlpbnN0YWxsIC1tIDY0NCBsaWIvZXQvZXRfYy5hd2sgbGliL2V0L2V0X2guYXdrIFwKKwkgICQoZGViZGlyKS9jb21lcnJnLWRldi91c3Ivc2hhcmUvY29tZXJyLworCisjIGZpeCBhbmQgaW5zdGFsbCBta19jbWRzIHNjcmlwdAorCXNlZCBzJSQodG9wZGlyKS9saWIvc3MlL3Vzci9zaGFyZS9zcyUgXAorCSAgPCQoYnVpbGRkaXIpL2xpYi9zcy9ta19jbWRzIFwKKwkgID4kKGRlYmRpcikvc3NnLWRldi91c3IvYmluL21rX2NtZHMKKwljaG1vZCA3NTUgJChkZWJkaXIpL3NzZy1kZXYvdXNyL2Jpbi9ta19jbWRzCisjIGFkZCBzdXBwb3J0IGZpbGVzIGZvciBta19jbWRzCisJaW5zdGFsbCAtbSA2NDQgbGliL3NzL2N0X2MuYXdrIGxpYi9zcy9jdF9jLnNlZCBcCisJICAkKGRlYmRpcikvc3NnLWRldi91c3Ivc2hhcmUvc3MvCisKKyMgZG9jcworCW1rZGlyIC1wICQoZGViZGlyKS9lMmZzbGlic2ctZGV2L3Vzci9kb2MvZTJmc2xpYnNnCisJbG4gLXNmIGUyZnNsaWJzZyAkKGRlYmRpcikvZTJmc2xpYnNnLWRldi91c3IvZG9jL2UyZnNsaWJzZy1kZXYKKwlta2RpciAtcCAkKG1haW5kaXIpL3Vzci9kb2MvZTJmc2xpYnNnCisJbG4gLXNmIGUyZnNsaWJzZyAkKG1haW5kaXIpL3Vzci9kb2MvZTJmc3Byb2dzCisJbWtkaXIgLXAgJChkZWJkaXIpL2NvbWVycmctZGV2L3Vzci9kb2MvY29tZXJyJChDT01FUlJfTUFKT1IpZworCWxuIC1zZiBjb21lcnIkKENPTUVSUl9NQUpPUilnICQoZGViZGlyKS9jb21lcnJnLWRldi91c3IvZG9jL2NvbWVycmctZGV2CisJbWtkaXIgLXAgJChkZWJkaXIpL3NzZy1kZXYvdXNyL2RvYy9zcyQoU1NfTUFKT1IpZworCWxuIC1zZiBzcyQoU1NfTUFKT1IpZyAkKGRlYmRpcikvc3NnLWRldi91c3IvZG9jL3NzZy1kZXYKKwlkaF9pbnN0YWxsZG9jcyAtYQorCisgICMgSFRNTCBkb2NzCisJaW5zdGFsbCAtZCAkKGRlYmRpcikvZTJmc2xpYnNnLWRldi91c3IvZG9jL2UyZnNsaWJzZy1kZXYvaHRtbC1pbmZvLworCWluc3RhbGwgLXAgJCh0b3BkaXIpL2RvYy9saWJleHQyZnNfKi5odG1sIFwKKwkgICAkKGRlYmRpcikvZTJmc2xpYnNnLWRldi91c3IvZG9jL2UyZnNsaWJzZy1kZXYvaHRtbC1pbmZvLworCWluc3RhbGwgLWQgJChkZWJkaXIpL2NvbWVycmctZGV2L3Vzci9kb2MvY29tZXJyZy1kZXYvaHRtbC1pbmZvLworCWluc3RhbGwgLXAgJCh0b3BkaXIpL2xpYi9ldC9jb21fZXJyXyouaHRtbCBcCisJICAgJChkZWJkaXIpL2NvbWVycmctZGV2L3Vzci9kb2MvY29tZXJyZy1kZXYvaHRtbC1pbmZvLworCisgICMgdGV4aW5mbyBkb2NzCisJaW5zdGFsbCAtcCAkKHRvcGRpcikvZG9jL2xpYmV4dDJmcy50ZXhpbmZvIFwKKwkgICAkKGRlYmRpcikvZTJmc2xpYnNnLWRldi91c3IvZG9jL2UyZnNsaWJzZy9saWJleHQyZnMudGV4aQorCWluc3RhbGwgLXAgJCh0b3BkaXIpL2xpYi9ldC9jb21fZXJyLnRleGluZm8gXAorCSAgICQoZGViZGlyKS9jb21lcnJnLWRldi91c3IvZG9jL2NvbWVycjJnL2NvbV9lcnIudGV4aQorCisgICMgZG9jLWJhc2Ugc3VwcG9ydAorCWluc3RhbGwgLWQgJChkZWJkaXIpL2UyZnNsaWJzZy1kZXYvdXNyL3NoYXJlL2RvYy1iYXNlLworCWluc3RhbGwgLXAgLW0gNjQ0ICQoZGViZGlyKS9saWJleHQyZnMuZG9jYmFzZSBcCisJICAgJChkZWJkaXIpL2UyZnNsaWJzZy1kZXYvdXNyL3NoYXJlL2RvYy1iYXNlL2xpYmV4dDJmcworCWluc3RhbGwgLWQgJChkZWJkaXIpL2NvbWVycmctZGV2L3Vzci9zaGFyZS9kb2MtYmFzZS8KKwlpbnN0YWxsIC1wIC1tIDY0NCAkKGRlYmRpcikvY29tX2Vyci5kb2NiYXNlIFwKKwkgICAkKGRlYmRpcikvY29tZXJyZy1kZXYvdXNyL3NoYXJlL2RvYy1iYXNlL2NvbV9lcnIKKworICAjIGV4YW1wbGVzCisJZGhfaW5zdGFsbGV4YW1wbGVzIC1hCisKKyAgIyBkaF9pbnN0YWxsbWFucGFnZXMgc3RpbGwgbWFrZXMgYSBtZXNzIGFzIG9mIDAuNTQgKHNlZSBiZWxvdyBkaF9tb3ZlZmlsZXMpCisJaW5zdGFsbCAtcCAkKHRvcGRpcikvbGliL2V0L2NvbXBpbGVfZXQuMSAkKG1haW5kaXIpL3Vzci9tYW4vbWFuMS8KKwlpbnN0YWxsIC1kICQobWFpbmRpcikvdXNyL21hbi9tYW4zLworCWluc3RhbGwgLXAgJCh0b3BkaXIpL2xpYi9ldC9jb21fZXJyLjMgJChtYWluZGlyKS91c3IvbWFuL21hbjMvCisJbG4gLXMgZTJmc2NrLjggJChtYWluZGlyKS91c3IvbWFuL21hbjgvZnNjay5leHQyLjgKKwlsbiAtcyBta2UyZnMuOCAkKG1haW5kaXIpL3Vzci9tYW4vbWFuOC9ta2ZzLmV4dDIuOAorCisJZGhfbW92ZWZpbGVzIC1hCisgICMgY2xlYW51cCBlbXB0eSBkaXJzCisJY2QgICQobWFpbmRpcikgJiYgcm1kaXIgdXNyL21hbi9jYXQ/IGJpbiBsaWIgdXNyL2luY2x1ZGUvKiB1c3IvaW5jbHVkZSBcCisJCXVzci9pbmZvIHVzci9saWIgdXNyL21hbi9tYW4zIHVzci9kb2MvZTJmc2xpYnNnCisKKyMJZGhfaW5zdGFsbG1lbnUgLWEKKworICAjIGJyb2tlbiArIHVzZWxlc3MgaW4gMC41MgorICAjCWRoX2luc3RhbGxtYW5wYWdlcyAtYQorCisJZGhfdW5kb2N1bWVudGVkIC1hCisKKwlkaF9pbnN0YWxsY2hhbmdlbG9ncyAtcGUyZnNsaWJzZyAtcGNvbWVyciQoQ09NRVJSX01BSk9SKWcgLXBzcyQoU1NfTUFKT1IpZyBDaGFuZ2VMb2cKKworCWRoX3N0cmlwIC1hCisJZGhfY29tcHJlc3MgLWEKKwlkaF9maXhwZXJtcyAtYQorCisJZWNobyAibGliY2RldjpEZXBlbmRzPSQoTElCQy1ERVYpIiA+IGRlYmlhbi9jb21lcnJnLWRldi5zdWJzdHZhcnMKKwllY2hvICJsaWJjZGV2OkRlcGVuZHM9JChMSUJDLURFVikiID4gZGViaWFuL3NzZy1kZXYuc3Vic3R2YXJzCisJZWNobyAibGliY2RldjpEZXBlbmRzPSQoTElCQy1ERVYpIiA+IGRlYmlhbi9lMmZzbGlic2ctZGV2LnN1YnN0dmFycworCisJZGhfaW5zdGFsbGRlYiAtYQorCUxEX0xJQlJBUllfUEFUSD0kKGJ1aWxkZGlyKS9saWI6L2xpYjovdXNyL2xpYiBcCisJICBkaF9zaGxpYmRlcHMgLWEKKwlkaF9nZW5jb250cm9sIC11ICctaXNwJyAtcGUyZnNwcm9ncyAtcGUyZnNsaWJzZyAtcGUyZnNsaWJzZy1kZXYKKwlkaF9nZW5jb250cm9sIC11ICctaXNwJyAtcGNvbWVyciQoQ09NRVJSX01BSk9SKWcgLXBjb21lcnJnLWRldiBcCisJICAtdSAnLXYkKENPTUVSUl9WRVJTSU9OKS0kKE1BSU5fVkVSU0lPTiknCisJZGhfZ2VuY29udHJvbCAtdSAnLWlzcCcgLXBzcyQoU1NfTUFKT1IpZyAtcHNzZy1kZXYgXAorCSAgLXUgJy12JChTU19WRVJTSU9OKS0kKE1BSU5fVkVSU0lPTiknCisJZGhfbWFrZXNobGlicyAtYQorIwlkaF9kdSAtYQorCWRoX21kNXN1bXMgLWEKKwlkaF9idWlsZGRlYiAtYQorCitiaW5hcnk6IGJpbmFyeS1pbmRlcCBiaW5hcnktYXJjaAorCisuUEhPTlk6IGJpbmFyeSBiaW5hcnktYXJjaCBiaW5hcnktaW5kZXAgY2xlYW4gY2hlY2tyb290CmRpZmYgLS1naXQgYS9kZWJpYW4vYXR0aWMvbGlicy9zczJnLmZpbGVzIGIvZGViaWFuL2F0dGljL2xpYnMvc3MyZy5maWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjcxN2NiCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2F0dGljL2xpYnMvc3MyZy5maWxlcwpAQCAtMCwwICsxLDIgQEAKK2xpYi9saWJzcy5zby4/LioKK2xpYi9saWJzcy5zby4/CmRpZmYgLS1naXQgYS9kZWJpYW4vY2hhbmdlbG9nIGIvZGViaWFuL2NoYW5nZWxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTA2OTM5Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2NoYW5nZWxvZwpAQCAtMCwwICsxLDM3MjMgQEAKK2UyZnNwcm9ncyAoMS40Mi4xMy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSB2ZXJzaW9uCisgICogTk1VIGFja25vd2xlZGdlIChDbG9zZXM6ICM3Nzg5NDgpCisgICogRml4ZWQgYSBidWcgd2hpY2ggY291bGQgY2F1c2UgZTJmc2NrIHRvIGNvcnJ1cHQgSHVyZCBmaWxlIHN5c3RlbXMuCisgICAgKENsb3NlczogIzc2MDI3NSkKKyAgKiBGaXhlZCBhIGRlYWRsb2NrIHdoaWNoIG9jY3VycyB3aGVuIHVzaW5nIHN5c3RlbWQgYW5kIGUyZnNjay5jb25mJ3MKKyAgICBsb2dnaW5nIGZlYXR1cmUuICAoQ2xvc2VzOiAjNzc1MjM0KQorICAqIEZpeGVkIGEgYnVnIHdoaWNoIGNvdWxkIGNhdXNlIHByb2dyYW1zIHVzaW5nIGxpYmV4dDIncyBpbm9kZSB0YWJsZQorICAgIHNjYW5uaW5nIGZ1bmN0aW9ucyBmcm9tIGNyYXNoaW5nIG9uIGNlcnRhaW4gY29ycnVwdGVkIGZpbGUgc3lzdGVtcy4KKyAgICAoQ2xvc2VzOiAjNzczNzk1KQorICAqIEZpeGVkIGR1bXBlMmZzIHNvIGl0IHdvbid0IGNyYXNoIGlmIHRoZSB1c2VyIGRvZXNuJ3Qgc3BlY2lmeSBhIGJsb2NrCisgICAgZGV2aWNlIChmaWxlIHN5c3RlbSkuICAoQ2xvc2VzOiAjNzY0MjkzKQorICAqIEZpeGVkIGUyZnNjayBzbyBpZiBpdCBub3RpY2VzIHVuZXhwZWN0ZWQgSFRSRUUgYmxvY2tzIGluIHBhc3MgMiwgaXQKKyAgICB3aWxsIHJlcG9ydCB0aGUgY29ycmVjdCBkaXJlY3RvcnkgaW5vZGUgY29udGFpbmluZyB0aGUgaW5jb25zaXN0ZW5jeS4KKyAgKiBJZiBlMmZzY2sgZmFpbHMgdG8gZ3JvdyB0aGUgZGlyX2luZm8gc3RydWN0dXJlIGR1ZSByZWFsbG9jKDMpIG5vdAorICAgIGhhdmluZyBlbm91Z2ggbWVtb3J5LCBpdCB3aWxsIG5vdyBmYWlsIHdpdGggZXhwbGFuYXRvcnkgbWVzc2FnZQorICAgIGluc3RlYWQgb2Ygc3RhZ2dlcmluZyBvbiBmYWlsaW5nIHdpdGggYSBjb25mdXNpbmcgaW50ZXJuYWwgZXJyb3IKKyAgICBtZXNzYWdlcy4KKyAgKiBUaGUgdHVuZTJmcyBwcm9ncmFtIHdpbGwgemVybyBvdXQgdGhlIHN1cGVyYmxvY2sgam91cm5hbCBiYWNrdXAKKyAgICBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nIGEgam91cm5hbCBmcm9tIGEgZmlsZSBzeXN0ZW0uCisgICogVGhlIG1rZTJmcyBwcm9ncmFtIG5vdyBlbmFibGVzIHRoZSBsYXJnZV9maWxlIGZlYXR1cmUgYnkgZGVmYXVsdC4KKyAgKiBGaXhlZCBhIGJ1ZyB3aGljaCBjb3VsZCBjYXVzZSBiYWRibG9ja3MgdG8gY3Jhc2ggaWYgdGhlcmUgYXJlIG1pbGxpb25zCisgICAgYW5kIG1pbGxpb25zIG9mIGJhZCBibG9ja3MuCisgICogRml4ZWQgc29tZSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gcmVzaXplMmZzIGFuZCBlMmZzY2suCisgICogRml4ZWQgc29tZSBiaWdlbmRpYW4gYnVncyB0aGF0IGhhZCBjcmVwdCBpbnRvIGJvdGggaW5kaXJlY3QgYW5kIGV4dGVudAorICAgIGhhbmRsaW5nIGluc2lkZSBsaWJleHQyZnMuCisgICogVXBkYXRlZC9maXhlZCB2YXJpb3VzIG1hbiBwYWdlcy4KKyAgKiBVcGRhdGUgRXNwZXJhbnRvLCBHZXJtYW4sIGFuZCBTcGFuaXNoIHRyYW5zbGF0aW9ucy4gIEFkZGVkIERhbmlzaAorICAgIHRyYW5zbGF0aW9uLgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFN1biwgMTcgTWF5IDIwMTUgMjA6Mzg6MjcgLTA0MDAKKworZTJmc3Byb2dzICgxLjQyLjEyLTEuMSkgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAorCisgICogTm9uLW1haW50YWluZXIgdXBsb2FkIGJ5IHRoZSBTZWN1cml0eSBUZWFtLgorICAqIEZpeCBDVkUtMjAxNS0xNTcyOiBpbmNvbXBsZXRlIGZpeCBmb3IgQ1ZFLTIwMTUtMDI0NyAoY2xvc2VzOiAjNzc4OTQ4KS4KKworIC0tIE1pY2hhZWwgR2lsYmVydCA8bWdpbGJlcnRAZGViaWFuLm9yZz4gIFN1biwgMjIgRmViIDIwMTUgMDE6NTA6NTcgKzAwMDAKKworZTJmc3Byb2dzICgxLjQyLjEyLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHZlcnNpb24KKyAgKiBGaXggdmFyaW91cyBlMmZzY2sgYnVncyB3aGVuIHRyeWluZyB0byByZXBhaXIgYmlnYWxsb2MgZmlsZSBzeXN0ZW1zLgorICAqIEUyZnNjayBjYW4gbm93IHJlcGFpciBhIGZpbGUgc3lzdGVtIHdpdGggYW4gb3Zlcmx5IGxhcmdlCisgICAgc19maXJzdF9tZXRhX2JnIGZpZWxkLCB3aGljaCBoYWQgcHJldmlvdXNseSBjYXVzZWQgYWxsIGUyZnNwcm9ncworICAgIHByb2dyYW1zIHRvIGNyYXNoIHdoZW4gdHJ5aW5nIHRvIG9wZW4gc3VjaCBhIGZpbGUgc3lzdGVtLgorICAqIEZpeCBlMmZzY2sgc28gdGhhdCBpdCBjYW4gY29ycmVjdGx5IGZpeCBhIG51bWJlciBvZiByYXJlIGZpbGUgc3lzdGVtCisgICAgY29ycnVwdGlvbnMgdGhhdCB3ZXJlIGRpc2NvdmVyZWQgd2hlbiB1c2luZyBhIGZpbGUgc3lzdGVtIGZ1enplci4KKyAgKiBGaXggZTJmc2NrIHNvIGl0IGRvZXMgbm90IHRyeSB0byB3cml0ZSBiYWNrIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzCisgICAgaWYgdGhleSBoYXZlIG5vdCBiZWVuIG1vZGlmaWVkLgorICAqIFRoZSBta2UyZnMgcHJvZ3JhbSB3aWxsIG5vdyBwbGFjZSBtZXRhZGF0YSBibG9ja3MgaW4gdGhlIGxhc3QKKyAgICBmbGV4X2JnIHNvIHRoZXkgYXJlIGNvbnRpZ3VvdXMuICBUaGlzIHJlZHVjZXMgZnJlZSBzcGFjZQorICAgIGZyYWdtZW50YXRpb24gaW4gYSBmcmVzaGx5IGNyZWF0ZWQgZmlsZSBzeXN0ZW0sIGFzIHdlbGwgYXMgYWxsb3dpbmcKKyAgICBta2UyZnMgY29tbWFuZHMgd2hpY2ggcmVxdWVzdCBleHRyZW1lbHkgbGFyZ2UgZmxleF9iZyBzaXplIHRvIHN1Y2NlZWQuCisgICogTWtlMmZzIG5vdyBjcmVhdGVzIGh1Z2VmaWxlcyBtb3JlIGVmZmljaWVudGx5ICh3aXRoIGZld2VyIGV4dGVudAorICAgIHRyZWUgYmxvY2tzKS4KKyAgKiBGaXggYSAzMi82NC1iaXQgb3ZlcmZsb3cgYnVnIHRoYXQgY291bGQgY2F1c2UgcmVzaXplMmZzIHRvIGxvb3AKKyAgICBmb3JldmVyLgorICAqIFJlZHVjZSB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uIG9mIHJlc2l6ZTJmcyBmb3IgdmVyeSBsYXJnZSBmaWxlCisgICAgc3lzdGVtcy4KKyAgKiBGaXggYSBidWcgdGhhdCBjb3VsZCBjYXVzZSByZXNpemUyZnMgdG8gY3JlYXRlIGEgY29ycnVwdGVkIGZpbGUKKyAgICBzeXN0ZW0gd2hlbiBzaHJpbmtpbmcgYSB2ZXJ5IGxhcmdlIGZpbGUgc3lzdGVtICh0eXBpY2FsbHkgPiAxNlRCKQorICAgIHRoYXQgaGFkIGJlZW4gcHJldmlvdXNseSBncm93biB1c2luZyByZXNpemUyZnMuICAoQ2xvc2VzOiAjNzU2OTIyKQorICAqIEZpeCB0dW5lMmZzIHVwZGF0aW5nIFVVSUQncyB3aGVuIG1hbmlwdWxhdGluZyBmaWxlIHN5c3RlbXMgd2l0aAorICAgIGV4dGVybmFsIGpvdXJuYWxzIChib3RoIHRoZSBmaWxlIHN5c3RlbSBhbmQgam91cm5hbCBVVUlEKS4KKyAgKiBGaXggdHVuZTJmcyBzbyBpdCBjYW4gcmVtb3ZlIGFuIGV4dGVybmFsIGpvdXJuYWwgZm9yIGZpbGUgc3lzdGVtcworICAgIHdpdGggYSAxayBibG9jayBzaXplLgorICAqIEFkZCBhIG5ldyBkZWJ1Z2ZzIGNvbW1hbmQsICJpbm9kZV9kdW1wIiwgd2hpY2ggcHJpbnRzIHRoZSBpbm9kZSBpbgorICAgIGhleCBhbmQgQVNDSUkgZm9ybWF0LgorICAqIFRoZSBkZWJ1Z2ZzIGNvbW1hbmQgInNldF9pbm9kZV9maWVsZCIgd2lsbCBub3cgYXV0b21hdGljYWxseQorICAgIGFsbG9jYXRlIGJsb2NrcyBmb3IgaW5kaXJlY3QgYmxvY2tzIGFuZCBleHRlbnQgdHJlZSBibG9ja3MuCisgICogRml4IGRlYnVnZnMncyAic2V0X2lub2RlX2ZpZWxkIiBzbyBjYW4gcHJvcGVybHkgaGFuZGxlCisgICAgImJsb2NrW0lORHxESU5EfFRJTkRdIi4KKyAgKiBUaGUgZGVidWdmcyAicmR1bXAiIGNvbW1hbmQgd2lsbCBub3cgdGFrZSBtdWx0aXBsZSBzb3VyY2UgYXJndW1lbnRzLgorICAqIEZpeCBkZWJ1Z2ZzJ3MgYXJndW1lbnQgcGFyc2luZyBmb3IgdGhlIGZyZWVmcmFnIGNvbW1hbmQuCisgICogRml4ZWQgYSBkb3VibGUgY2xvc2UoMikgYnVnIGluICJyZHVtcCIgYW5kICJyZHVtcCAtcCIuCisgICogRml4IGZpbGVmcmFnIHRvIHByb3Blcmx5IGhhbmRsZSB1c2luZyB0aGUgRklCTUFQIGlvY3RsICh3aXRoIC1CKS4KKyAgKiBlNGRlZnJhZyB3aWxsIG5vdyBkZWZyYWcgYmFja3dhcmRzLWFsbG9jYXRlZCBmaWxlcworICAqIENsYXJpZmllZCBtZXNzYWdlcyB0aGF0IHdlcmUgY29uZnVzaW5nIHVzZXJzIGluIGRlYnVnZnMsIGUyZnNjaywKKyAgICBta2UyZnMsIGFuZCByZXNpemUyZnMgKENsb3NlczogIzc1ODAyOSwgIzc1NzU0MywgIzc1NzU0NCkKKyAgKiBEdW1wZTJmcyB3aWxsIG5vdyBjb21wbGFpbiBpZiBleHRyYSBhcmd1bWVudHMgYXJlIGdpdmVuIHRvIGl0LgorICAgIChDbG9zZXM6ICM3NTgwNzQpCisgICogVXBkYXRlL2NsYXJpZnkgdmFyaW91cyBtYW4gcGFnZXMgKENsb3NlczogIzcyNjc2MCkKKyAgKiBVcGRhdGUgQ3plY2gsIER1dGNoLCBGcmVuY2gsIFBvbGlzaCwgU3BhbmlzaCwgU3dlZWRpc2gsIFVrcmFpbmlhbiwKKyAgICBhbmQgVmlldG5hbWVzZSB0cmFuc2xhdGlvbnMKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBGcmksIDI5IEF1ZyAyMDE0IDA4OjUwOjQ4IC0wNDAwCisKK2UyZnNwcm9ncyAoMS40Mi4xMS0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIERvbid0IHRyeSB0byBidWlsZCBsaWIvZXh0MmZzL3RzdF9leHQyZnMgdW5sZXNzIHJ1bm5pbmcgIm1ha2UKKyAgICBjaGVjayI7IHRoaXMgZml4ZXMgYSBNSVBTIEZUQkZTIHByb2JsZW0gYmVjYXVzZSBtaXBzIGhhcyBhIHNwZWNpYWwKKyAgICBuby1waWNzIGJ1aWxkIG5lZWRlZCBmb3IgYm9vdGxvYWRlcnMgd2hlcmUgd2Ugb25seSBidWlsZCBsaWJleHQyZnMKKyAgICBidXQgbm90IGxpYnNzIG9yIG90aGVyIGxpYnJhcmllcyAoQ2xvc2VzOiAjNzU0NjA1KQorICAqIFVwZGF0ZSBGcmVuY2ggdHJhbnNsYXRpb24KKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBTdW4sIDEzIEp1bCAyMDE0IDE2OjE4OjI3IC0wNDAwCisKK2UyZnNwcm9ncyAoMS40Mi4xMS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1tZWRpdW0KKworICAqIE5ldyB1cHN0cmVhbSB2ZXJzaW9uCisgICogTk1VIGFja25vd2xlZGdlIChDbG9zZXM6ICM3NTIxMDcpCisgICogbWtlMmZzIGNhbiBub3cgY3JlYXRlIGh1Z2VmaWxlcyB3aGljaCBhcmUgYWxpZ25lZCB0byB0aGUgYmVnaW5uaW5nCisgICAgb2YgdGhlIGRpc2sgKGluc3RlYWQgb2YgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFydGl0aW9uKSwKKyAgICBjb250cm9sbGVkIHZpYSBhIG1rZTJmcy5jb25mIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLgorICAqIEZpeCBhIGJ1ZyB3aGljaCBjYXVzZWQgZTJmc2NrIHRvIGFib3J0IGEgam91cm5hbCByZXBsYXkgb24gYSBmaWxlCisgICAgc3lzdGVtIHdpdGggYmlnYWxsb2MgZW5hYmxlZC4gIChDbG9zZXM6ICM3NDQ5NTMpCisgICogRml4IG1rZTJmcyBzbyBpdCBtb3JlIGNvcnJlY3RseSBoYW5kbGVzIGxhcmdlIGZsZXhfYmcgY291bnRzCisgICogTWtlMmZzIHdpbGwgY2hlY2sgdGhlIGtlcm5lbCB2ZXJzaW9uIG51bWJlciBhbmQgbm90IGp1c3QgdGhlIHN5c2ZzCisgICAgZmVhdHVyZSBmbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZW5hYmxlIGxhenkKKyAgICBpbm9kZSB0YWJsZSBpbml0aWFsaXphdGlvbiwgc28gaXQgd29uJ3QgZ2V0IGZha2VkIG91dCBpZiB0aGUgZXh0NCBpcworICAgIGNvbXBpbGVkIGFzIGEgbWRvdWxlIHdoaWNoIGhhc24ndCBoYXBwZW5lZCB0byBiZSBsb2FkZWQgeWV0LgorICAqIEUyZnNjayB3aWxsIG5vdyBhdXRvbWF0aWNhbGx5IGZpeCBhIGxhc3QgbW91bnQgdGltZSBvciBsYXN0IHdyaXRlIHRpbWUKKyAgICB3aGljaCBpcyBpbiB0aGUgZnV0dXJlIGluIHByZWVuIG1vZGUuCisgICogTWtlMmZzIHdpbGwgbm93IGNoZWNrIHRoZSBmaWxlIHN5c3RlbSByZXZpc2lvbiBudW1iZXIgcmVxdWVzdGVkIGJ5IHRoZQorICAgIGNvbW1hbmQgbGluZSwgYW5kIHJlamVjdCBpdCBpZiBpdCBpcyB0b28gbGFyZ2UuCisgICogSWYgZmlsZWZyYWcgcnVucyBpbnRvIGFuIGVycm9yLCBpdCB3aWxsIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIHJlc3QKKyAgICBvZiB0aGUgZmlsZXMgc3BlY2lmaWVkIG9uIHRoZWMgb21tYW5kIGxpbmUsIGJ1dCB0aGVuIGV4aXQgd2l0aCBhbgorICAgIGVycm9yIGNvZGUuCisgICogRmlsZWZyYWcgbm93IHByaW50cyBzb21lIGFkZGl0aW9uYWwgbmV3IGZsYWdzIChzdWNoIGFzCisgICAgRklFTUFQX0VYVEVOVF9FTkNPREVEKSwgYW5kIHByaW50IHVua25vd24gZmxhZ3MgYXMgaGV4IHZhbHVlcy4KKyAgKiBGaXhlZCBzdXBwb3J0IGluIGZpbGVmcmFnIGZvciBmaWxlcyB3aXRoID4gMioqMzIgYmxvY2tzIG9uIDMyLWJpdAorICAgIHBsYXRmb3Jtcy4KKyAgKiBGaXhlZCBhIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIGRlYnVnZnMgd2hlbiBjb3B5aW5nIGZpbGVzLgorICAqIEFkZCBFc3BhcmFudG8gYW5kIFVrcmFpbmlhbiB0cmFuc2xhdGlvbnMsIGFuZCB1cGRhdGUgQ3plY2gsIER1dGNoLAorICAgIEZyZW5jaCwgR2VybWFuLCBJdGFsaWFuLCBQb2xpc2gsIFN3ZWVkaXNoLCBhbmQgVmlldG5hbWVzZSB0cmFuc2xhdGlvbnMuCisgICogRml4ZWQgY3Jvc3MtY29tcGlsYXRpb24gc3VwcG9ydC4gIChDbG9zZXM6ICM3NTMzNzUpCisgICogVXBkYXRlL2ZpeCB2YXJpb3VzIG1hbiBwYWdlcworCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFdlZCwgOSBKdWx5IDIwMTQgMjM6NDM6MjcgLTA0MDAKKworZTJmc3Byb2dzICgxLjQyLjEwLTEuMSkgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCisKKyAgKiBOb24tbWFpbnRhaW5lciB1cGxvYWQuCisgICogQWRkIHBhdGNoIGZyb20gdXBzdHJlYW0gZ2l0IHRoYXQgZml4ZXMgY3JlYXRpbmcgZmlsZXN5c3RlbXMgaW4gZmlsZXMKKyAgICBsYXJnZXIgdGhhbiAyR0Igb24gMzIgYml0IGFyY2hpdGVjdHVyZXMgKENsb3NlczogIzc1MjEwNykKKworIC0tIEhpbGtvIEJlbmdlbiA8YmVuZ2VuQGRlYmlhbi5vcmc+ICBTYXQsIDIxIEp1biAyMDE0IDEyOjU3OjI1ICswMjAwCisKK2UyZnNwcm9ncyAoMS40Mi4xMC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1tZWRpdW0KKworICAqIE5ldyB1cHN0cmVhbSB2ZXJzaW9uCisgICogVGhlIG1rZTJmcyBwcm9ncmFtIG5vIGxvbmdlciByZXF1aXJlcyBhIGZvcmNlICgtRikgb3B0aW9uIHdoZW4KKyAgICB3aGVuIGNyZWF0aW5nIGEgZmlsZSBzeXN0ZW0gaW4gYSByZWd1bGFyIGZpbGUsIHNpbmNlIHRoaXMgaXMgYSB2ZXJ5CisgICAgY29tbW9uIHVzZSBjYXNlIHdoZW4gbWFuYWdpbmcgdmlydHVhbCBtYWNoaW5lIGltYWdlcworICAqIFRoZSBta2UyZnMgcHJvZ3JhbSB3aWxsIG5vdyBhc2sgZm9yIGNvbmZpcm1hdGlvbiBiZWZvcmUgd2lwaW5nIG91dCBhCisgICAgcHJlLWV4aXN0aW5nIGZpbGUgc3lzdGVtLCBwYXJ0aXRpb24gbGFiZWwsIG9yIHBoeXNpY2FsIHZvbHVtZQorICAqIEZpeCBlMmZzY2sgc28gdGhhdCBpdCBwcm9wZXJseSBoYW5kbGVzIGFuIGluY29uc2lzdGVudCBxdW90YSBpbm9kZS4KKyAgICBQcmV2aW91c2x5IHRoZSBxdW90YSBpbm9kZSBjb3VsZCBiZSBjb21wbGV0ZWx5IGNvcnJ1cHRlZCwgYW5kCisgICAgbWlzc2luZyBxdW90YSByZWNvcmRzIGNvdWxkIGJlIG5vdCBub3RpY2VkCisgICogRml4IG1rZTJmcyBzbyBpZiBwYWNrZWQgbWV0YWRhdGEgYmxvY2tzIGFyZSBlbmFibGVkIHRoYXQgdGhlIGJsb2NrCisgICAgZ3JvdXAgY2hlY2tzdW0gYXJlIHNldCBjb3JyZWN0bHkKKyAgKiBEZWJ1Z2ZzIGhhcyBuZXcgY29tbWFuZHMgdG8gYWxsb3cgdGhlIHF1b3RhIGlub2RlIHRvIGJlIHF1ZXJpZWQgZGlyZWN0bHkKKyAgKiBUdW5lMmZzIHdpbGwgYWxsb3cgcmVtb3ZhbCBvZiBkaXJ0eSBqb3VybmFsIHdpdGggdHdvICItZiIgb3B0aW9ucworICAgIChDbG9zZXM6ICM1NTkzMDEpCisgICogRml4ZWQgc29tZSBvZmYtbGluZSByZXNpemUyZnMgYnVncyB3aGVuIHJlbG9jYXRpbmcgbWV0YWRhdGEgYmxvY2tzCisgICAgd2hlbiBncm93aW5nIG9yIHNocmlua2luZyBiaWdhbGxvYyBmaWxlIHN5c3RlbXMKKyAgKiBGaXhlZCByZXNpemUyZnMncyBjYWxjdWxhdGlvbiBvZiB0aGUgbWluaW11bSByZXF1aXJlZCBmaWxlIHN5c3RlbQorICAgIHNpemUuICBUaGlzIGFsbG93cyByZXNpemUyZnMgLU0gdG8gc2hyaW5rIHRoZSBmaWxlIHN5c3RlbSBtb3JlCisgICAgYWdncmVzc2l2ZWx5CisgICogRml4ZWQgcmVzaXplMmZzIHRvIHByb3Blcmx5IGhhbmRsZSBzaHJpbmtpbmcgYSB2ZXJ5IGxhcmdlIGFuZCBlbXB0eQorICAgIGZpbGUgc3lzdGVtIHRvIGEgdmVyeSB2ZXJ5IHNtYWxsIHNpemUKKyAgKiBGaXhlZCBlNGRlZnJhZyB0byB3b3JrIHdpdGggNjQtYml0IGFuZCBiaWdhbGxvYyBmaWxlIHN5c3RlbXMKKyAgKiBGaXhlZCBlMmZzY2sgdG8gbm90IGlzc3VlIGEgbGFyZ2UgbnVtYmVyIG9mIHZlcnkgc2NhcnkgKGJ1dAorICAgIGhhcm1sZXNzKSBjb3JydXB0aW9uIG1lc3NhZ2VzIHdoZW4gY2hlY2tpbmcgdmVyeSBsYXJnZSBmaWxlIHN5c3RlbXMKKyAgICB3aGVuIHRoZSBmaWxlIHN5c3RlbSBoYXMgbW9yZSBpbm9kZXMgdGhhbiB0aGUgbnVtYmVyIG9mIHNlY29uZHMKKyAgICBzaW5jZSBKYW51YXJ5IDEsIDE5NzAuCisgICogRTJmc2NrIHdpbGwgbm93IGNoZWNrIHRoZSB3aG9sZSBmaWxlIHN5c3RlbSBpZiBmaWxlIHN5c3RlbSBwcm9ibGVtcworICAgIGFyZSBkZXRlY3RlZCBkdXJpbmdzIGl0cyBpbml0aWFsICJwYXNzIDAiIHNhbml0eSBjaGVjaworICAqIEZpbGVmcmFnIG5vdyBwcmludHMgdGhlICJzaGFyZWQgZXh0ZW50IiBmbGFnIHdoaWNoIGlzIHVzZWQgYnkgc29tZQorICAgIGZpbGUgc3lzdGVtcyBzdWNoIGFzIGJ0cmZzCisgICogVGhlIG1rZTJmcyBwcm9ncmFtIHdvdWxkIHByZXZpb3VzbHkgY29ycmVjdGx5IG9taXQgdGhlIHJlc2l6ZV9pbm9kZQorICAgIGZlYXR1cmUgd2hlbiBjcmVhdGluZyBhIGZpbGUgc3lzdGVtID4gMTZUQiB3aGVuIHRoZSBmcyBzaXplIHdhcworICAgIGRldGVybWluZWQgYXV0b21hdGljYWxseS4gIEl0IHdpbGwgbm93IGFsc28gZG8gdGhlIHJpZ2h0IHRoaW5nIHdoZW4KKyAgICB0aGUgdXNlciBleHBsaWNpdGx5IHNwZWNpZmllcyB0aGUgZmlsZSBzeXN0ZW0gc2l6ZS4KKyAgKiBUaGUgbWVzc2FnZSBwcmludGVkIGJ5IGxvZ3NhdmUgaXMgbm93IG11Y2ggbGVzcyBzY2FyeSAoQ2xvc2VzOiAjNDY4ODIxKQorICAqIEZpeCBzcGVsbGluZyB0eXBvIGluIHRoZSBwYWNrYWdlIGRlc2NyaXB0aW9ucworICAqIFVwZGF0ZSBDemVjaCwgRHV0Y2gsIEZyZW5jaCwgR2VybWFuLCBQb2xpc2gsIFNwYW5pc2gsIFN3ZWVkaXNoLCBhbmQKKyAgICBWaWV0bmFtZXNlIHRyYW5zbGF0aW9ucyAoQ2xvc2VzOiAjNzAzMDQ4KQorICAqIFVwZGF0ZS9maXggdmFyaW91cyBtYW4gcGFnZXMKKyAgKiBGaXggZGViaWFuL3J1bGVzIGNvbXBhdGliaWxpdHkgcHJvYmxlbSB3aXRoIEdOVSBtYWtlIDQuMAorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFN1biwgMTggTWF5IDIwMTQgMjI6NTQ6MzggLTA0MDAKKworZTJmc3Byb2dzICgxLjQyLjktMykgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCisKKyAgKiBBZGQgdGhlIGFiaWxpdHkgZm9yIG1rZTJmcyB0byBjcmVhdGUgaHVnZWZpbGVzCisgICogQWRkIHN1cHBvcnQgZm9yIHRoZSBzcGFyc2Vfc3VwZXIyIGNvbXBhdCBmZWF0dXJlCisgICogTWtlMmZzIGNhbiBub3cgZm9yY2UgYWxsIG9mIHRoZSBtZXRhZGF0YSBibG9ja3MgdG8gYmUgYXQgdGhlCisgICAgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIHN5c3RlbQorICAqIEZpeCBsb29wYmFjayBtb3VudCBkZXRlY3Rpb24gKENsb3NlczogIzQ5Nzk4NCkKKyAgKiBBZGQgc3VwcG9ydCB0byBta2UyZnMgdG8gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gYXQgYW4gb2Zmc2V0CisgICAgKENsb3NlczogIzQxNzM4NSkKKyAgKiBNZW50aW9uIGJhZGJsb2NrcyBpbiB0aGUgcGFja2FnZSBkZXNjcmlwdGlvbiAoQ2xvc2VzOiAjNzE4NzI1KQorICAqIFVwZGF0ZS9maXggdmFyaW91cyBtYW4gcGFnZXMgKENsb3NlczogIzcxOTE4NCwgIzcxOTE4OSkKKyAgKiBJbXByb3ZlIGUyZnNjaydzICJzdXBlcmJsb2NrIGNvcnJ1cHQiIG1lc3NhZ2UgKENsb3NlczogIzcxOTE4NSkKKyAgKiBNaXNjZWxsYW5lb3VzIENvdmVyaXR5IGNsZWFuIHVwcworCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFR1ZSwgMDQgRmViIDIwMTQgMjI6MTc6MjIgLTA1MDAKKworZTJmc3Byb2dzICgxLjQyLjktMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBGaXggbGludGlhbiB3YXJuaW5nOiBkZWJpYW4tY2hhbmdlbG9nLWhhcy13cm9uZy13ZWVrZGF5CisgICogRml4IGxpbnRpYW4gd2FybmluZzogbm9uLXN0YW5kYXJkLWRpci1wZXJtIGJ5IHVzaW5nIGRoX3N0cmlwJ3MKKyAgICAtLWRiZy1wYWNrYWdlIG9wdGlvbiBpbnN0ZWFkIG9mIG1hbnVhbGx5IG1hbmFnaW5nIHRoZSBkZWJ1ZyBmaWxlcworICAqIEZpeCBwcmludGYgdHlwZSBmb3JtYXQgbWlzbWF0Y2ggaW4gZTJpbWFnZQorICAqIEltcHJvdmVkIGRlYnVnZnMncyBlcnJvciByZXBvcnRpbmcgd2hlbiBwYXJzaW5nIGJsb2NrIG51bWJlcnMKKyAgKiBVc2UgY29uc2lzdGVudCBjb25maWd1cmUgb3B0aW9ucyBhY3Jvc3MgdGhlIG11bHRpcGxlIGUyZnNwcm9ncworICAgIGJ1aWxkczsgdGhpcyBtZWFucyB0aGF0IGUyZnNjay5zdGF0aWMgd2lsbCBub3cgdXNlIHRoZSBibGtpZCBsaWJyYXJ5CisgICAgc2hpcHBlZCB3aXRoIHV0aWwtbGludXgsIGluc3RlYWQgb2YgdGhlIGludGVybmFsIG9uZSBzaGlwcGVkIHdpdGgKKyAgICB0aGUgZTJmc3Byb2dzIHNvdXJjZXMuCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgTW9uLCAzMCBEZWMgMjAxMyAxNjo1Njo1MCAtMDUwMAorCitlMmZzcHJvZ3MgKDEuNDIuOS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSB2ZXJzaW9uCisgICogTk1VIGFjayAoQ2xvc2VzOiAjNjk4ODc5KQorICAqIEZpeCBjcm9zcy1idWlsZCBzdXBwb3J0IChDbG9zZXM6ICM3MjEzNjUpCisgICogbWtlMmZzIHdpbGwgZGV0ZWN0IGFuIGF0dGVtcHQgdG8gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gb24gYQorICAgIGxvb3AtbW91bnRlZCBpbWFnZSBmaWxlCisgICogRml4ZWQgYSBsYXJnZSBudW1iZXIgb2YgYnVncyBpbiByZXNpemUyZnMsIGUyZnNjaywgZGVidWdmcywgdG8KKyAgICBoYW5kbGUgYmlnYWxsb2MgYW5kIDY0LWJpdCBmaWxlIHN5c3RlbXMuCisgICogVHVuZTJmcyB3aWxsIG5vIGxvbmdlciBhbGxvdyBjaGFuZ2luZyB0aGUgdXVpZCBvbiBhIG1vdW50ZWQgZmlsZQorICAgIHN5c3RlbSB3aXRoIHRoZSB1bmluaXRfYmcgZmVhdHVyZSBlbmFibGVkLgorICAqIEUyZnNjayB3aWxsIHByb3Blcmx5IGFsbG9jYXRlIGEgbmV3IGV4dGVudCB0cmVlIGJsb2NrIGluIHRoZSByYXJlCisgICAgY2FzZSB3aGVyZSBvbmUgaXMgbmVlZGVkIHdoZW4gcmVoYXNoaW5nIGFuIGV4dGVudC1tYXBwZWQgZGlyZWN0b3J5LgorICAqIE1rZTJmcyB3aWwgbm93IHByb3Blcmx5IHNldCB0aGUgTEFSR0VfRklMRSBmZWF0dXJlIHdoZW4gY3JlYXRpbmcgYQorICAgIGpvdXJuYWwgPiAyR0IuCisgICogRGVidWdmcyB3aWxsIG5vdyBjb3JyZWN0bHkgaGFuZGxlIGZyZWUgYSByYW5nZSBvZiBpbm9kZXMgdXNpbmcgdGhlCisgICAgZnJlZWkgY29tbWFuZC4KKyAgKiBFMmZzY2sgd2lsbCBubyBsb25nZXIgY29tcGxhaW4gaWYgYW4gZXh0ZXJuYWwgam91cm5hbCB3YXMgZXhhY3RseQorICAgIDIqKjMyIGJsb2Nrcy4KKyAgKiBFMmZzY2sgd2lsbCBub3QgbG9uZ2VyIHRyeSB0byBhZGQgYSBtaXNzaW5nIGxvc3QrZm91bmQgZGlyZWN0b3J5CisgICAgd2hlbiBydW4gaW4gcmVhZC1vbmx5IG1vZGUuCisgICogRml4ZWQgc29tZSBidWZmZXIgb3ZlcnJ1biBidWdzIHdoZW4gY3JlYXRpbmcgc3RhbmRhcmQgZTJpbWFnZSBmaWxlcworICAqIE1rZTJmcyB3aWxsIG5vdCB0cnkgdG8gc2V0IGJvdGggdGhlIG1ldGFfYmcgYW5kIHJlc2l6ZV9pbm9kZSBmZWF0dXJlCisgICAgd2hlbiB0aGUgZXh0ZW5kZWQgb3B0aW9uICItRSByZXNpemU9Tk5OIiBpcyBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCisgICogRHVtcGUyZnMgd2lsbCBubyBsb25nZXIgYWJvcnQgd2hlbiB0cnlpbmcgdG8gcHJpbnQgdGhlIGpvdXJuYWwKKyAgICBpbmZvcm1hdGlvbiBmcm9tIGFuIGUyaW1hZ2UtY3JlYXRlZCBpbWFnZSBmaWxlLgorICAqIERlYnVnZnMncyAid3JpdGUiIGNvbW1hbmQgY2FuIG5vdyBjcmVhdGUgYSBzcGFyc2UgZmlsZXMKKyAgKiBEZWJ1Z2ZzIGNhbiBub3cgc3VwcG9ydCBhIGNvbW1hbmQgbGluZSB3aGljaCBpcyB1cCB0byA4ayBsb25nCisgICogRTJpbWFnZSB3aWxsIHJlZnVzZSB0byBjcmVhdGUgYSByYXcgb3IgcWNvbXcgaW1hZ2UgdXNpbmcgYSBtb3VudGVkCisgICAgZmlsZSBzeXN0ZW0gdW5sZXNzIHRoZSAtZiBvcHRpb24gaXMgZ2l2ZW4uCisgICogRTJpbWFnZSBoYXMgYmVlbiBtYWRlIG1vcmUgdXNlZnVsIGZvciBlZmZpY2llbnRseSBjb3B5aW5nIGZpbGUKKyAgICBzeXN0ZW1zIHVzaW5nIHRoZSAtcmEgb3B0aW9ucy4gIE5ldyBvcHRpb25zIHRvIGhlbHAgd2l0aCB0aGlzIHVzZQorICAgIGNhc2UgdGhhdCB3ZXJlIGFkZGVkOiAtbywgLU8sIC1wLCBhbmQgLWMuCisgICogRml4ZWQgYSByZWdyZXNzaW9uIGludHJvZHVjZWQgaW4gMS40Mi44IHdoaWNoIHdvdWxkIGNhdXNlIGUyZnNjayB0bworICAgIGVycm9uZW91c2x5IHJlcG9ydCB1bmluaXRpYWxpemVkIGV4dGVudHMgcGFzdCBpX3NpemUgdG8gYmUgaW52YWxpZC4KKyAgKiBGaXhlZCBjYXNlcyB3aGVyZSByZXNpemUyZnMgY291bGQgY29ycnVwdCBhIGZpbGUgc3lzdGVtLCBlc3BlY2lhbGx5CisgICAgd2hlbiBzaHJpbmtpbmcgYSBmaWxlIHN5c3RlbS4gIChDbG9zZXM6ICM2NjA3OTMpCisgICogRml4ZWQgcmVzaXplMmZzIGFuZCBlMmZzY2sgdG8gbm90IGNyYXNoIHdoZW4gb3BlcmF0aW5nIG9uIGEgZmlsZQorICAgIHN5c3RlbSB3aXRoIHRoZSBNTVAgZmVhdHVyZSBlbmFibGVkLgorICAqIEZpeGVkIGRlYnVnZnMncyB3cml0ZSBjb21tYW5kIHRvIHByb3Blcmx5IGNyZWF0ZSBhIHplcm8tbGVuZ3RoIGZpbGUKKyAgICAoaW5zdGVhZCBvZiBjcmVhdGluZyBhbiBpbnZhbGlkIGlub2RlKS4KKyAgKiBGaXhlZCBlMmZzY2sgdG8gbm90IGNyYXNoIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSBhbiBpbnZhbGlkCisgICAgZXh0ZW50LW1hcHBlZCBzeW1saW5rLgorICAqIEltcHJvdmVkIGRlYnVnZnMncyBoZWxwIHRleHRzCisgICogRml4ZWQgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBwcm9ibGVtIGluIGUyZnJlZWZyYWcKKyAgICAoQ2xvc2VzOiAjNzE4MjA1KQorICAqIFRoZSBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIgZmlsZXMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdGhlCisgICAgbGF0ZXN0IHRvIGhlbHAgd2l0aCB0aGUgcHBjbGUgcG9ydC4gIChDbG9zZXM6ICM3MzIwNzYpCisgICogVXBkYXRlZC9maXhlZCB2YXJpb3VzIG1hbiBwYWdlcy4gIChDbG9zZXM6ICM1ODYyMTgsICM2Njk3MzAsCisgICAgIzY5ODA3NiwgIzczMTMyOSkKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBTYXQsIDI4IERlYyAyMDEzIDIzOjE4OjM2IC0wNTAwCisKK2UyZnNwcm9ncyAoMS40Mi44LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHZlcnNpb24KKyAgKiBXb3JrIGFyb3VuZCBEZWJpYW4gQnVnICM3MTI1MzAgKENsb3NlczogIzcwODMwNykKKyAgKiBGaXggZTJmc2NrIHNvIGl0IGNhbiBjaGVjayBhIHJlYWQtb25seSByb290IGZpbGUgc3lzdGVtIHdpdGggYW4KKyAgICBleHRlcm5hbCBqb3VybmFsLiAgKENsb3NlczogIzcwNzAzMCkKKyAgKiBGaXggb2ZmLWxpbmUgcmVzaXppbmcgb2YgZmlsZSBzeXN0ZW1zIHdpdGggZmxleF9iZyAmJiAhcmVzaXplX2lub2RlCisgICAgKENsb3NlczogIzY5Njc0NikKKyAgKiBDaGFuZ2UgbWtlMmZzIHNvIHRoYXQgaXQgZG9lcyBub3Qgc2V0IHRoZSByb290IGRpcmVjdG9yeSB0byB0aGUgcmVhbAorICAgIHVpZC9naWQgb2YgdGhlIG1rZTJmcyBwcm9jZXNzLiAgQWRkIHRoZSBleHRlbmRlZCBvcHRpb24gcm9vdF9vd25lciB0bworICAgIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3IuCisgICogSWYgYW4gaW52YWxpZCBqb3VybmFsIHNpemUgaXMgZ2l2ZW4gdG8gbWtlMmZzLCBpdCB3aWxsIG5vdyBjb21wbGFpbgorICAgIGFuZCBleGl0IHNvb25lci4KKyAgKiBGaXggcmVzaXplMmZzIHdoZW4gc2hyaW5raW5nIGZpbGUgc3lzdGVtcyB0byBtYWtlIHN1cmUgdGhhdCBiaXRtYXAKKyAgICBibG9ja3MgYXJlbid0IGxlZnQgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBzaHJ1bmtlbiBmaWxlIHN5c3RlbS4KKyAgICBUaGlzIGNvdWxkIGhhcHBlbiB3aXRoIGZsZXhfYmcgZmlsZSBzeXN0ZW1zIHRoYXQgd2VyZSBncm93biB1c2luZworICAgIHRoZSBvbGQgb25saW5lIHJlc2l6aW5nIGFsZ29yaXRobS4KKyAgKiBFMmZzY2sgd2lsbCBub3cgZGV0ZWN0IGFuZCByZXBhaXIgY29ycnVwdGVkIGV4dGVudCB0cmVlcyB3aGljaCBjb250YWluCisgICAgaW52YWxpZCBleHRlbnRzIGF0IHRoZSBlbmQgb2YgdGhlIGV4dGVudCB0cmVlIGxlYWYgYmxvY2suCisgICogRTJmc2NrIHdpbGwgbm93IGxvbmdlciBjb21wbGFpbiBhYm91dCB6ZXJvIGxlbmd0aCBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWVzLgorICAqIEZpeCBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbiBlMmZzcHJvZ3MgdjEuNDIgd2hpY2ggY2F1c2VkIGUyaW1hZ2UgLXMKKyAgICB0byBjcmFzaC4KKyAgKiBBZGQgc2FmZXR5IGNoZWNrIHNvIHR1bmUyZnMgd2lsbCBub3QgYXR0ZW1wdCB0byBzZXQgdGhlIGlub2RlIHNpemUgdG8KKyAgICBiZSBsYXJnZXIgdGhhbiB0aGUgYmxvY2sgc2l6ZS4KKyAgKiBFbmhhbmNlIGNoYXR0ciB0byBhbGxvdyBjbGVhcmluZyB0aGUgZXh0ZW50IGZsYWcgaWYgdGhlIGtlcm5lbCBhbGxvd3MgaXQKKyAgKiBGaXggZTJpbWFnZSB3aXRoIGxhcmdlICg+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+ICBUdWUsIDUgTWFyIDE5OTYgMDA6MDA6MDAgKzAwMDAKKworZTJmc3Byb2dzICgxLjAxLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogcmVtb3ZlZCBkZWJ1Z2dpbmcgc3ltYm9scyBmcm9tIGxpYnMgYW5kIGVuYWJsZWQgbW9yZSBvcHRpbWl6YXRpb24KKyAgICBhcyBzdWdnZXN0ZWQgYnkgUm9sZiBSb3NzaXVzCisgICogYWxzbyByZW1vdmVkIHRoZSAvdmFyL2NhdG1hbiBwYWdlcworICAqIGNoYW5nZWQgdG8gZWxmIGNvbXBpbGF0aW9uCisKKyAtLSBBbmRyZXcgRC4gRmVybmFuZGVzIDxhZGZlcm5hbkBjbmQubWNnaWxsLmNhPiAgTW9uLCAyMCBOb3YgMTk5NSAwMDowMDowMCArMDAwMAorCitlMmZzcHJvZ3MgKDAuNWItMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBVcGdyYWRlZCB0byBsYXRlc3QgdmVyc2lvbiwgdG8gMS4wMSBmcm9tIDAuNWIuCisgICogY2hhbmdlZCB0aGUgaW5zdGFsbGF0aW9uIGdyb3VwcyBmcm9tIGJpbiB0byByb290IGluIE1DT05GSUcuaW4KKyAgKiBjaGFuZ2VkIGNvbmZpZ3VyZSB0byBzZXQgdXNyX3ByZWZpeD0iXCR7cHJlZml4fS91c3IiCisgICogbW92ZWQgdGhlIGNhdCBwYWdlcyB0byAvdmFyL2NhdG1hbiBpbiBNQ09ORklHLmluCisKKyAtLSBBbmRyZXcgRC4gRmVybmFuZGVzIDxhZGZlcm5hbkBjbmQubWNnaWxsLmNhPiAgU2F0LCA3IE9jdCAxOTk1IDAwOjAwOjAwICswMDAwCisKK2UyZnNwcm9ncyAoMC41Yi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE1hZGUgImZzY2sgLXQgPGZpbGVzeXN0ZW0tdHlwZT4gPGRldmljZT4iIHdvcmsgY29ycmVjdGx5LiBGb3JtZXJseQorICAgIHRoZSAtdCBhcmd1bWVudCB3YXMgb3ZlcnJpZGVuIGJ5IHRoZSBmaWxlc3lzdGVtIHR5cGUgbGlzdGVkIGZvciB0aGUKKyAgICBkZXZpY2UgaW4gL2V0Yy9mc3RhYi4KKyAgKiBhZGRlZCBEZWJpYW4gR05VL0xpbnV4IHBhY2thZ2UgbWFpbnRlbmFuY2Ugc3lzdGVtIGZpbGVzCisKKyAtLSBCcnVjZSBQZXJlbnMgPEJydWNlQFBpeGFyLmNvbT4gIFRodSwgMyBBdWcgMTk5NSAwMDowMDowMCArMDAwMApkaWZmIC0tZ2l0IGEvZGViaWFuL2NvbWVyci1kZXYuZG9jLWJhc2UgYi9kZWJpYW4vY29tZXJyLWRldi5kb2MtYmFzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjNlYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2NvbWVyci1kZXYuZG9jLWJhc2UKQEAgLTAsMCArMSwxMiBAQAorRG9jdW1lbnQ6IGNvbWVyci1tYW51YWwKK1RpdGxlOiBUaGUgY29tX2VyciBsaWJyYXJ5CitBdXRob3I6IEtlbiBSYWVidXJuIGFuZCBCaWxsIFNvbW1lcmZlbGQKK0Fic3RyYWN0OiBBIGxpYnJhcnksIGFuZCBhc3NvY2lhdGVkIHV0aWxpdGllcywKKyB3aGljaCBhbGxvdyBhIG1vcmUgdW5pZm9ybSB3YXkgZm9yIGxpYnJhcmllcworIHRvIHJldHVybiBlcnJvcnMgdG8gdGhlaXIgY2FsbGVycywgYW5kIGZvciBwcm9ncmFtcworIHRvIGRlc2NyaWJlIGVycm9ycyBhbmQgZXhjZXB0aW9uYWwgY29uZGl0aW9ucyB0byB0aGVpciB1c2Vycy4KK1NlY3Rpb246IFByb2dyYW1taW5nCisKK0Zvcm1hdDogSFRNTAorSW5kZXg6IC91c3Ivc2hhcmUvZG9jL2NvbWVyci1kZXYvaHRtbC1pbmZvL2NvbV9lcnIuaHRtbAorRmlsZXM6IC91c3Ivc2hhcmUvZG9jL2NvbWVyci1kZXYvaHRtbC1pbmZvLyouaHRtbApkaWZmIC0tZ2l0IGEvZGViaWFuL2NvbWVyci1kZXYuZXhhbXBsZXMgYi9kZWJpYW4vY29tZXJyLWRldi5leGFtcGxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmYyMGNjCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2NvbWVyci1kZXYuZXhhbXBsZXMKQEAgLTAsMCArMSwyIEBACitsaWIvc3Mvc3NfZXJyLmV0CitkZWJpYW4vQlVJTEQtU1REL2xpYi9leHQyZnMvZXh0Ml9lcnIuZXQKZGlmZiAtLWdpdCBhL2RlYmlhbi9jb21lcnItZGV2LmZpbGVzLmluIGIvZGViaWFuL2NvbWVyci1kZXYuZmlsZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiOGIwZQotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9jb21lcnItZGV2LmZpbGVzLmluCkBAIC0wLDAgKzEsOSBAQAordXNyL2xpYi8qL2xpYmNvbV9lcnIuYQordXNyL2xpYi8qL2xpYmNvbV9lcnIuc28KK3Vzci9pbmNsdWRlL2V0LyoKK3Vzci9pbmNsdWRlL2NvbV9lcnIuaAordXNyL3NoYXJlL21hbi9tYW4xL2NvbXBpbGVfZXQqCit1c3Ivc2hhcmUvbWFuL21hbjMvY29tX2Vyci4zKgordXNyL2Jpbi9jb21waWxlX2V0Cit1c3Ivc2hhcmUvZXQvKgordXNyL2xpYi8qL3BrZ2NvbmZpZy9jb21fZXJyLnBjCmRpZmYgLS1naXQgYS9kZWJpYW4vY29tcGF0IGIvZGViaWFuL2NvbXBhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjhmMDExCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2NvbXBhdApAQCAtMCwwICsxIEBACis3CmRpZmYgLS1naXQgYS9kZWJpYW4vY29udHJvbC5pbiBiL2RlYmlhbi9jb250cm9sLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MjQwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vY29udHJvbC5pbgpAQCAtMCwwICsxLDMzNyBAQAorZGVmaW5lKE1VTFRJQVJDSF9IRUFERVJTLGlmZGVmKGBET19NVUxUSUFSQ0gnLAorTXVsdGktQXJjaDogc2FtZQorUHJlLURlcGVuZHM6ICR7bWlzYzpQcmUtRGVwZW5kc30sUkVNT1ZFX01FKSlkbmwKK2RlZmluZShVVElMX0xJTlVYX05HX0RFRklORVMsCitpZmRlZihgVVRJTF9MSU5VWF9ORycsIGBgbGliYmxraWQtZGV2ICg+PSAyLjE2KSwgdXVpZC1kZXYgKD49IDIuMTYpLCcnKSlkbmwKK2RlZmluZShESUVUTElCQ19ERUZJTkVTLAoraWZkZWYoYERJRVRMSUJDJywgYGBkaWV0bGliYy1kZXYgKD4+IDAuMzApIFthbHBoYSBhbWQ2NCBhcm0gaHBwYSBpMzg2IGlhNjQgcG93ZXJwYyBwcGM2NCBzMzkwIHNwYXJjXSwnJykpZG5sCitTb3VyY2U6IGUyZnNwcm9ncworU2VjdGlvbjogYWRtaW4KK1ByaW9yaXR5OiByZXF1aXJlZAorTWFpbnRhaW5lcjogVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4KK0J1aWxkLURlcGVuZHM6IGdldHRleHQsIHRleGluZm8sIHBrZy1jb25maWcsIERJRVRMSUJDX0RFRklORVMgZ2NjLW11bHRpbGliIFttaXBzIG1pcHNlbF0sIGRlYmhlbHBlciAoPj0gNy4wKSwgVVRJTF9MSU5VWF9OR19ERUZJTkVTIG00CitTdGFuZGFyZHMtVmVyc2lvbjogMy45LjYKK0hvbWVwYWdlOiBodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldAorCitpZmRlZihgRTJGU0NLX1NUQVRJQycsYGAKK1BhY2thZ2U6IGUyZnNjay1zdGF0aWMKK1ByaW9yaXR5OiBvcHRpb25hbAorRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30sICR7bWlzYzpEZXBlbmRzfQorUmVjb21tZW5kczogc2FzaCB8IGJhc2gtc3RhdGljIHwgenNoLXN0YXRpYyB8IGJ1c3lib3gtc3RhdGljIHwgenNoMzAtc3RhdGljCitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IHN0YXRpY2FsbHktbGlua2VkIHZlcnNpb24gb2YgdGhlIGV4dDIvZXh0My9leHQ0IGZpbGVzeXN0ZW0gY2hlY2tlcgorIFRoaXMgbWF5IGJlIG9mIHNvbWUgaGVscCB0byB5b3UgaWYgeW91ciBmaWxlc3lzdGVtIGdldHMgY29ycnVwdGVkIGVub3VnaAorIHRvIGJyZWFrIHRoZSBzaGFyZWQgbGlicmFyaWVzIHVzZWQgYnkgdGhlIGR5bmFtaWNhbGx5IGxpbmtlZCBjaGVja2VyLgorIC4KKyBUaGlzIGJpbmFyeSB0YWtlcyBtdWNoIG1vcmUgc3BhY2UgdGhhbiBpdHMgZHluYW1pYyBjb3VudGVycGFydCBsb2NhdGVkCisgaW4gZTJmc3Byb2dzLCB0aG91Z2guCisgLgorIFlvdSBtYXkgd2FudCB0byBpbnN0YWxsIGEgc3RhdGljYWxseS1saW5rZWQgc2hlbGwgYXMgd2VsbCwgdG8gYmUgYWJsZQorIHRvIHJ1biB0aGlzIHByb2dyYW0gaWYgc29tZXRoaW5nIGxpa2UgeW91ciBDIGxpYnJhcnkgZ2V0cyBjb3JydXB0ZWQuCisnJylkbmwKKworUGFja2FnZTogbGliY29tZXJyMgorU2VjdGlvbjogbGlicworUHJvdmlkZXM6IGxpYmNvbWVyci1rdGgtY29tcGF0CitEZXBlbmRzOiAke3NobGliczpEZXBlbmRzfSwgJHttaXNjOkRlcGVuZHN9CitSZXBsYWNlczogZTJmc3Byb2dzICg8PCAxLjM0LTEpCitBcmNoaXRlY3R1cmU6IGFueQorTVVMVElBUkNIX0hFQURFUlMKK0Rlc2NyaXB0aW9uOiBjb21tb24gZXJyb3IgZGVzY3JpcHRpb24gbGlicmFyeQorIGxpYmNvbWVyciBpcyBhbiBhdHRlbXB0IHRvIHByZXNlbnQgYSBjb21tb24gZXJyb3ItaGFuZGxpbmcgbWVjaGFuaXNtIHRvCisgbWFuaXB1bGF0ZSB0aGUgbW9zdCBjb21tb24gZm9ybSBvZiBlcnJvciBjb2RlIGluIGEgZmFzaGlvbiB0aGF0IGRvZXMgbm90CisgaGF2ZSB0aGUgcHJvYmxlbXMgaWRlbnRpZmllZCB3aXRoIG1lY2hhbmlzbXMgY29tbW9ubHkgaW4gdXNlLgorCitQYWNrYWdlOiBjb21lcnItZGV2CitTZWN0aW9uOiBsaWJkZXZlbAorUHJpb3JpdHk6IGV4dHJhCitEZXBlbmRzOiBsaWJjNi1kZXYgfCBsaWJjLWRldiwgbGliY29tZXJyMiAoPSAke21haW5CaW5hcnl9KSwgJHttaXNjOkRlcGVuZHN9CitTdWdnZXN0czogZG9jLWJhc2UKK1JlcGxhY2VzOiBlMmZzbGlicy1kZXYgKDw8IDEuMzMtMiksIGxpYmtyYjUtZGV2ICg8PCAxLjMpCitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IGNvbW1vbiBlcnJvciBkZXNjcmlwdGlvbiBsaWJyYXJ5IC0gaGVhZGVycyBhbmQgc3RhdGljIGxpYnJhcmllcworIGxpYmNvbV9lcnIgaXMgYW4gYXR0ZW1wdCB0byBwcmVzZW50IGEgY29tbW9uIGVycm9yLWhhbmRsaW5nIG1lY2hhbmlzbSB0bworIG1hbmlwdWxhdGUgdGhlIG1vc3QgY29tbW9uIGZvcm0gb2YgZXJyb3IgY29kZSBpbiBhIGZhc2hpb24gdGhhdCBkb2VzIG5vdAorIGhhdmUgdGhlIHByb2JsZW1zIGlkZW50aWZpZWQgd2l0aCBtZWNoYW5pc21zIGNvbW1vbmx5IGluIHVzZS4KKyAuCisgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBmb3IgdGhlIGNvbV9lcnIgbGlicmFyeS4KKworUGFja2FnZTogbGlic3MyCitTZWN0aW9uOiBsaWJzCitEZXBlbmRzOiBsaWJjb21lcnIyLCAke3NobGliczpEZXBlbmRzfSwgJHttaXNjOkRlcGVuZHN9CitSZXBsYWNlczogZTJmc3Byb2dzICg8PCAxLjM0LTEpCitBcmNoaXRlY3R1cmU6IGFueQorTVVMVElBUkNIX0hFQURFUlMKK0Rlc2NyaXB0aW9uOiBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIHBhcnNpbmcgbGlicmFyeQorIGxpYnNzIHByb3ZpZGVzIGEgc2ltcGxlIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgcGFyc2VyIHdoaWNoIHdpbGwKKyBhY2NlcHQgaW5wdXQgZnJvbSB0aGUgdXNlciwgcGFyc2UgdGhlIGNvbW1hbmQgaW50byBhbiBhcmd2IGFyZ3VtZW50CisgdmVjdG9yLCBhbmQgdGhlbiBkaXNwYXRjaCBpdCB0byBhIGhhbmRsZXIgZnVuY3Rpb24uCisgLiAKKyBJdCB3YXMgb3JpZ2luYWxseSBpbnNwaXJlZCBieSB0aGUgTXVsdGljcyBTdWJTeXN0ZW0gbGlicmFyeS4KKworUGFja2FnZTogc3MtZGV2CitTZWN0aW9uOiBsaWJkZXZlbAorUHJpb3JpdHk6IGV4dHJhCitEZXBlbmRzOiBsaWJjNi1kZXYgfCBsaWJjLWRldiwgbGlic3MyICg9ICR7bWFpbkJpbmFyeX0pLCBjb21lcnItZGV2LCAke21pc2M6RGVwZW5kc30KK0FyY2hpdGVjdHVyZTogYW55CitEZXNjcmlwdGlvbjogY29tbWFuZC1saW5lIGludGVyZmFjZSBwYXJzaW5nIGxpYnJhcnkgLSBoZWFkZXJzIGFuZCBzdGF0aWMgbGlicmFyaWVzCisgVGhpcyBwYWNrYWdlIGluY2x1ZGVzIGEgdG9vbCB0aGF0IHBhcnNlcyBhIGNvbW1hbmQgdGFibGUgdG8gZ2VuZXJhdGUKKyBhIHNpbXBsZSBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIHBhcnNlciwgdGhlIGluY2x1ZGUgZmlsZXMgbmVlZGVkIHRvCisgY29tcGlsZSBhbmQgdXNlIGl0LCBhbmQgdGhlIHN0YXRpYyBsaWJzLgorIC4gCisgSXQgd2FzIG9yaWdpbmFsbHkgaW5zcGlyZWQgYnkgdGhlIE11bHRpY3MgU3ViU3lzdGVtIGxpYnJhcnkuCisgLgorIFRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgZm9yIHRoZSBzcyBsaWJyYXJ5LgoraWZkZWYoYFVUSUxfTElOVVhfTkcnLCxgYAorUGFja2FnZTogbGlidXVpZDEKK1NlY3Rpb246IGxpYnMKK0RlcGVuZHM6IHBhc3N3ZCwgJHtzaGxpYnM6RGVwZW5kc30sICR7bWlzYzpEZXBlbmRzfQorUmVjb21tZW5kczogdXVpZC1ydW50aW1lCitSZXBsYWNlczogZTJmc3Byb2dzICg8PCAxLjM0LTEpCitBcmNoaXRlY3R1cmU6IGFueQorTVVMVElBUkNIX0hFQURFUlMKK0Rlc2NyaXB0aW9uOiBVbml2ZXJzYWxseSBVbmlxdWUgSUQgbGlicmFyeQorIFRoZSBsaWJ1dWlkIGxpYnJhcnkgZ2VuZXJhdGVzIGFuZCBwYXJzZXMgMTI4LWJpdCB1bml2ZXJzYWxseSB1bmlxdWUKKyBpZHMgKFVVSURzKS4gIEEgVVVJRCBpcyBhbiBpZGVudGlmaWVyIHRoYXQgaXMgdW5pcXVlIGFjcm9zcyBib3RoCisgc3BhY2UgYW5kIHRpbWUsIHdpdGggcmVzcGVjdCB0byB0aGUgc3BhY2Ugb2YgYWxsIFVVSURzLiAgQSBVVUlEIGNhbgorIGJlIHVzZWQgZm9yIG11bHRpcGxlIHB1cnBvc2VzLCBmcm9tIHRhZ2dpbmcgb2JqZWN0cyB3aXRoIGFuIGV4dHJlbWVseQorIHNob3J0IGxpZmV0aW1lLCB0byByZWxpYWJseSBpZGVudGlmeWluZyB2ZXJ5IHBlcnNpc3RlbnQgb2JqZWN0cworIGFjcm9zcyBhIG5ldHdvcmsuCisgLgorIFNlZSBSRkMgNDEyMiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIAorCitQYWNrYWdlOiB1dWlkLXJ1bnRpbWUKK1NlY3Rpb246IGxpYnMKK1ByaW9yaXR5OiBvcHRpb25hbAorRGVwZW5kczogcGFzc3dkLCBsaWJ1dWlkMSAoPj4gMS40MC4zLTEpLCAke3NobGliczpEZXBlbmRzfSwgJHttaXNjOkRlcGVuZHN9CitSZXBsYWNlczogZTJmc3Byb2dzICg8PSAxLjQwLjMtMXVidW50dTEpCitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IHJ1bnRpbWUgY29tcG9uZW50cyBmb3IgdGhlIFVuaXZlcnNhbGx5IFVuaXF1ZSBJRCBsaWJyYXJ5CisgVGhlIGxpYnV1aWQgbGlicmFyeSBnZW5lcmF0ZXMgYW5kIHBhcnNlcyAxMjgtYml0IHVuaXZlcnNhbGx5IHVuaXF1ZQorIGlkcyAoVVVJRHMpLiAgQSBVVUlEIGlzIGFuIGlkZW50aWZpZXIgdGhhdCBpcyB1bmlxdWUgYWNyb3NzIGJvdGgKKyBzcGFjZSBhbmQgdGltZSwgd2l0aCByZXNwZWN0IHRvIHRoZSBzcGFjZSBvZiBhbGwgVVVJRHMuICBBIFVVSUQgY2FuCisgYmUgdXNlZCBmb3IgbXVsdGlwbGUgcHVycG9zZXMsIGZyb20gdGFnZ2luZyBvYmplY3RzIHdpdGggYW4gZXh0cmVtZWx5Cisgc2hvcnQgbGlmZXRpbWUsIHRvIHJlbGlhYmx5IGlkZW50aWZ5aW5nIHZlcnkgcGVyc2lzdGVudCBvYmplY3RzCisgYWNyb3NzIGEgbmV0d29yay4KKyAuCisgU2VlIFJGQyA0MTIyIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgCisgLgorIFRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgdXVpZGdlbiBwcm9ncmFtIGFuZCB0aGUgdXVpZGQgZGFlbW9uLgorIC4KKyBUaGUgdXVpZGQgZGFlbW9uIGlzIHVzZWQgdG8gZ2VuZXJhdGUgVVVJRHMsIGVzcGVjaWFsbHkgdGltZS1iYXNlZAorIFVVSUTigJlzLCBpbiBhIHNlY3VyZSBhbmQgZ3VhcmFudGVlZC11bmlxdWUgZmFzaGlvbiwgZXZlbiBpbiB0aGUgZmFjZQorIG9mIGxhcmdlIG51bWJlcnMgb2YgdGhyZWFkcyB0cnlpbmcgdG8gZ3JhYiBVVUlE4oCZcyBydW5uaW5nIG9uCisgZGlmZmVyZW50IENQVeKAmXMuIEl0IGlzIHVzZWQgYnkgbGlidXVpZCBhcyB3ZWxsIGFzIHRoZSB1dWlkZ2VuCisgcHJvZ3JhbS4KKworaWZkZWYoYFVERUJfUEtHUycsYGAKK1BhY2thZ2U6IGxpYnV1aWQxLXVkZWIKK1hDLVBhY2thZ2UtVHlwZTogdWRlYgorU2VjdGlvbjogZGViaWFuLWluc3RhbGxlcgorUHJpb3JpdHk6IG9wdGlvbmFsCitEZXBlbmRzOiAke3NobGliczpEZXBlbmRzfQorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBzdHJpcHBlZCBkb3duIHVuaXZlcnNhbGx5IHVuaXF1ZSBpZCBsaWJyYXJ5LCBmb3IgZGViaWFuLWluc3RhbGxlcgorIGxpYnV1aWQgZ2VuZXJhdGVzIGFuZCBwYXJzZXMgMTI4LWJpdCB1bml2ZXJzYWxseSB1bmlxdWUgaWRzIChVVUlEcykuCisgU2VlIFJGQyA0MTIyIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIC4KKyBUaGlzIGlzIGEgbWluaW1hbCBwYWNrYWdlIGZvciBkZWJpYW4taW5zdGFsbGVyLgorJycpZG5sCisKK1BhY2thZ2U6IHV1aWQtZGV2CitTZWN0aW9uOiBsaWJkZXZlbAorUHJpb3JpdHk6IGV4dHJhCitEZXBlbmRzOiBsaWJjNi1kZXYgfCBsaWJjLWRldiwgbGlidXVpZDEgKD0gJHttYWluQmluYXJ5fSksICR7bWlzYzpEZXBlbmRzfQorUmVwbGFjZXM6IGUyZnNsaWJzLWRldiAoPDwgMS4xNSkKK0FyY2hpdGVjdHVyZTogYW55CitEZXNjcmlwdGlvbjogdW5pdmVyc2FsbHkgdW5pcXVlIGlkIGxpYnJhcnkgLSBoZWFkZXJzIGFuZCBzdGF0aWMgbGlicmFyaWVzCisgbGlidXVpZCBnZW5lcmF0ZXMgYW5kIHBhcnNlcyAxMjgtYml0IHVuaXZlcnNhbGx5IHVuaXF1ZSBpZHMgKFVVSURzKS4KKyBTZWUgUkZDIDQxMjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgLgorIFRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgZm9yIHRoZSB1dWlkIGxpYnJhcnkuCisKK1BhY2thZ2U6IGxpYmJsa2lkMQorU2VjdGlvbjogbGlicworRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30sICR7bWlzYzpEZXBlbmRzfQorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBibG9jayBkZXZpY2UgaWQgbGlicmFyeQorIFRoZSBibGtpZCBsaWJyYXJ5IHdoaWNoIGFsbG93cyBzeXN0ZW0gcHJvZ3JhbXMgbGlrZSBmc2NrIGFuZCAKKyBtb3VudCB0byBxdWlja2x5IGFuZCBlYXNpbHkgZmluZCBibG9jayBkZXZpY2VzIGJ5IGZpbGVzeXN0ZW0gVVVJRCBhbmQgCisgTEFCRUwuICBUaGlzIGFsbG93cyBzeXN0ZW0gYWRtaW5pc3RyYXRvcnMgdG8gYXZvaWQgc3BlY2lmeWluZyAKKyBmaWxlc3lzdGVtcyBieSBoYXJkLWNvZGVkIGRldmljZSBuYW1lcywgYnV0IHZpYSBhIGxvZ2ljYWwgbmFtaW5nIAorIHN5c3RlbSBpbnN0ZWFkLgorCitpZmRlZihgVURFQl9QS0dTJyxgYAorUGFja2FnZTogbGliYmxraWQxLXVkZWIKK1hDLVBhY2thZ2UtVHlwZTogdWRlYgorU2VjdGlvbjogZGViaWFuLWluc3RhbGxlcgorUHJpb3JpdHk6IG9wdGlvbmFsCitEZXBlbmRzOiAke3NobGliczpEZXBlbmRzfSwgJHttaXNjOkRlcGVuZHN9CitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IHN0cmlwcGVkIGRvd24gYmxvY2sgZGV2aWNlIGlkIGxpYnJhcnksIGZvciBkZWJpYW4taW5zdGFsbGVyCisgVGhlIGJsa2lkIGxpYnJhcnkgd2hpY2ggYWxsb3dzIHN5c3RlbSBwcm9ncmFtcyBsaWtlIGZzY2sgYW5kIAorIG1vdW50IHRvIHF1aWNrbHkgYW5kIGVhc2lseSBmaW5kIGJsb2NrIGRldmljZXMgYnkgZmlsZXN5c3RlbSBVVUlEIGFuZCAKKyBMQUJFTC4gIFRoaXMgYWxsb3dzIHN5c3RlbSBhZG1pbmlzdHJhdG9ycyB0byBhdm9pZCBzcGVjaWZpeWluZyAKKyBmaWxlc3lzdGVtcyBieSBoYXJkLWNvZGVkIGRldmljZSBuYW1lcywgYnV0IHZpYSBhIGxvZ2ljYWwgbmFtaW5nIAorIHN5c3RlbSBpbnN0ZWFkLgorIC4KKyBUaGlzIGlzIGEgbWluaW1hbCBwYWNrYWdlIGZvciBkZWJpYW4taW5zdGFsbGVyLgorJycpZG5sCisKK1BhY2thZ2U6IGxpYmJsa2lkLWRldgorU2VjdGlvbjogbGliZGV2ZWwKK1ByaW9yaXR5OiBleHRyYQorRGVwZW5kczogbGliYzYtZGV2IHwgbGliYy1kZXYsIGxpYmJsa2lkMSAoPSAke2JpbmFyeTpWZXJzaW9ufSksICR7bWlzYzpEZXBlbmRzfQorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBibG9jayBkZXZpY2UgaWQgbGlicmFyeSAtIGhlYWRlcnMgYW5kIHN0YXRpYyBsaWJyYXJpZXMKKyBUaGUgYmxraWQgbGlicmFyeSB3aGljaCBhbGxvd3Mgc3lzdGVtIHByb2dyYW1zIGxpa2UgZnNjayBhbmQgCisgbW91bnQgdG8gcXVpY2tseSBhbmQgZWFzaWx5IGZpbmQgYmxvY2sgZGV2aWNlcyBieSBmaWxlc3lzdGVtIFVVSUQgYW5kIAorIExBQkVMLiAgVGhpcyBhbGxvd3Mgc3lzdGVtIGFkbWluaXN0cmF0b3JzIHRvIGF2b2lkIHNwZWNpZml5aW5nIAorIGZpbGVzeXN0ZW1zIGJ5IGhhcmQtY29kZWQgZGV2aWNlIG5hbWVzLCBidXQgdmlhIGEgbG9naWNhbCBuYW1pbmcgCisgc3lzdGVtIGluc3RlYWQuCisgLgorIFRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgZm9yIHRoZSBibGtpZCBsaWJyYXJ5LgorJycpZG5sCisKK2lmZGVmKGBVREVCX1BLR1MnLGBgCitQYWNrYWdlOiBlMmZzcHJvZ3MtdWRlYgorWEMtUGFja2FnZS1UeXBlOiB1ZGViCitTZWN0aW9uOiBkZWJpYW4taW5zdGFsbGVyCitQcmlvcml0eTogb3B0aW9uYWwKK0RlcGVuZHM6ICR7c2hsaWJzOkRlcGVuZHN9LCAke21pc2M6RGVwZW5kc30KK0FyY2hpdGVjdHVyZTogYW55CitEZXNjcmlwdGlvbjogc3RyaXBwZWQtZG93biB2ZXJzaW9ucyBvZiBlMmZzcHJvZ3MsIGZvciBkZWJpYW4taW5zdGFsbGVyCisgVGhpcyBwYWNrYWdlIGlzIGFuIGUyZnNwcm9ncyBwYWNrYWdlIGJ1aWx0IGZvciBhIHJlZHVjZWQgc2l6ZSwgc28gdGhhdAorIGl0IGNhbiBoZWxwIHRvIHNhdmUgc3BhY2UgaW4gZGViaWFuLWluc3RhbGxlci4KKyAuCisgRG9uJycnYGB0IGF0dGVtcHQgdG8gaW5zdGFsbCB0aGlzIHBhY2thZ2UsIGl0IGhhcyBubyBzdXBwb3J0IGZvciBhIGNvdXBsZSBvZgorIGZlYXR1cmVzIHlvdSBzdXJlbHkgd2FudC4gIEFueXdheSBpdCBzaG91bGQgcmVmdXNlIHRvIGluc3RhbGwuCisnJylkbmwKKworUGFja2FnZTogZTJmc2xpYnMKK1NlY3Rpb246IGxpYnMKK0RlcGVuZHM6ICR7c2hsaWJzOkRlcGVuZHN9LCAke21pc2M6RGVwZW5kc30KK1JlcGxhY2VzOiBlMmZzcHJvZ3MgKDw8IDEuMzQtMSkKK1Byb3ZpZGVzOiBsaWJleHQyZnMyLCBsaWJlMnAyCitBcmNoaXRlY3R1cmU6IGFueQorTVVMVElBUkNIX0hFQURFUlMKK0Rlc2NyaXB0aW9uOiBleHQyL2V4dDMvZXh0NCBmaWxlIHN5c3RlbSBsaWJyYXJpZXMKKyBUaGUgZXh0MiwgZXh0MyBhbmQgZXh0NCBmaWxlIHN5c3RlbXMgYXJlIHN1Y2Nlc3NvcnMgb2YgdGhlIG9yaWdpbmFsIGV4dAorICgiZXh0ZW5kZWQiKSBmaWxlIHN5c3RlbS4gVGhleSBhcmUgdGhlIG1haW4gZmlsZSBzeXN0ZW0gdHlwZXMgdXNlZCBmb3IKKyBoYXJkIGRpc2tzIG9uIERlYmlhbiBhbmQgb3RoZXIgTGludXggc3lzdGVtcy4KKyAuCisgVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSBleHQyZnMgYW5kIGUycCBsaWJyYXJpZXMsIGZvciB1c2Vyc3BhY2Ugc29mdHdhcmUKKyB0aGF0IGRpcmVjdGx5IGFjY2Vzc2VzIGV4dGVuZGVkIGZpbGUgc3lzdGVtcy4gUHJvZ3JhbXMgdGhhdCB1c2UgbGliZXh0MmZzCisgaW5jbHVkZSBlMmZzY2ssIG1rZTJmcywgYW5kIHR1bmUyZnMuIFByb2dyYW1zIHRoYXQgdXNlIGxpYmUycCBpbmNsdWRlCisgZHVtcGUyZnMsIGNoYXR0ciwgYW5kIGxzYXR0ci4KKworUGFja2FnZTogZTJmc2xpYnMtZGV2CitTZWN0aW9uOiBsaWJkZXZlbAorUHJpb3JpdHk6IGV4dHJhCitEZXBlbmRzOiBsaWJjNi1kZXYgfCBsaWJjLWRldiwgY29tZXJyLWRldiwgZTJmc2xpYnMgKD0gJHtiaW5hcnk6VmVyc2lvbn0pLCAke21pc2M6RGVwZW5kc30KK1N1Z2dlc3RzOiBkb2MtYmFzZQorUHJvdmlkZXM6IGV4dDJmcy1kZXYsIGUycC1kZXYKK1JlcGxhY2VzOiBsaWJrcmI1LWRldiAoPDwgMS4zKQorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBleHQyL2V4dDMvZXh0NCBmaWxlIHN5c3RlbSBsaWJyYXJpZXMgLSBoZWFkZXJzIGFuZCBzdGF0aWMgbGlicmFyaWVzCisgVGhlIGV4dDIsIGV4dDMgYW5kIGV4dDQgZmlsZSBzeXN0ZW1zIGFyZSBzdWNjZXNzb3JzIG9mIHRoZSBvcmlnaW5hbCBleHQKKyAoImV4dGVuZGVkIikgZmlsZSBzeXN0ZW0uIFRoZXkgYXJlIHRoZSBtYWluIGZpbGUgc3lzdGVtIHR5cGVzIHVzZWQgZm9yCisgaGFyZCBkaXNrcyBvbiBEZWJpYW4gYW5kIG90aGVyIExpbnV4IHN5c3RlbXMuCisgLgorIFRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgZm9yIHRoZSBleHQyZnMgYW5kIGUycCAKKyBsaWJyYXJpZXMuCisKK1BhY2thZ2U6IGUyZnNwcm9ncworRXNzZW50aWFsOiB5ZXMKK2lmZGVmKGBVVElMX0xJTlVYX05HJywKK2BgUHJlLURlcGVuZHM6ICR7c2hsaWJzOkRlcGVuZHN9LCAke21pc2M6RGVwZW5kc30sIHV0aWwtbGludXggKD49IDIuMTV+cmMxLTEpCisnJywKK2BgUHJlLURlcGVuZHM6ICR7c2hsaWJzOkRlcGVuZHN9LCAke21pc2M6RGVwZW5kc30KKycnKWRubAorTXVsdGktQXJjaDogZm9yZWlnbgorU3VnZ2VzdHM6IGdwYXJ0LCBwYXJ0ZWQsIGUyZnNjay1zdGF0aWMKK0NvbmZsaWN0czogZHVtcCAoPDwgMC40YjQtNCksIHF1b3RhICg8PCAxLjU1LTguMSksIGluaXRzY3JpcHRzICg8PCAyLjg1LTQpLCBzeXN2aW5pdCAoPDwgMi44NS00KQorUmVwbGFjZXM6IGh1cmQgKDw9IDIwMDQwMzAxLTEpLCBsaWJibGtpZDEgKDw8IDEuMzgrMS4zOS1XSVAtMjAwNS4xMi4xMC0yKSwgbGlidXVpZDEgKDw8IDEuMzgrMS4zOS1XSVAtMjAwNS4xMi4xMC0yKQorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBleHQyL2V4dDMvZXh0NCBmaWxlIHN5c3RlbSB1dGlsaXRpZXMKKyBUaGUgZXh0MiwgZXh0MyBhbmQgZXh0NCBmaWxlIHN5c3RlbXMgYXJlIHN1Y2Nlc3NvcnMgb2YgdGhlIG9yaWdpbmFsIGV4dAorICgiZXh0ZW5kZWQiKSBmaWxlIHN5c3RlbS4gVGhleSBhcmUgdGhlIG1haW4gZmlsZSBzeXN0ZW0gdHlwZXMgdXNlZCBmb3IKKyBoYXJkIGRpc2tzIG9uIERlYmlhbiBhbmQgb3RoZXIgTGludXggc3lzdGVtcy4KKyAuCisgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHByb2dyYW1zIGZvciBjcmVhdGluZywgY2hlY2tpbmcsIGFuZCBtYWludGFpbmluZworIGV4dDIvMy80LWJhc2VkIGZpbGUgc3lzdGVtcy4gIEl0IGFsc28gaW5jbHVkZXMgdGhlICJiYWRibG9ja3MiIHByb2dyYW0sCisgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc2NhbiBmb3IgYmFkIGJsb2NrcyBvbiBhIGRpc2sgb3Igb3RoZXIgc3RvcmFnZSBkZXZpY2UuCisKK1BhY2thZ2U6IGUyZnNwcm9ncy1kYmcKK1NlY3Rpb246IGRlYnVnCitQcmlvcml0eTogZXh0cmEKK0RlcGVuZHM6IGUyZnNwcm9ncyAoPSAke2JpbmFyeTpWZXJzaW9ufSksICR7bWlzYzpEZXBlbmRzfQorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGUyZnNwcm9ncworIFRoaXMgcGFja2FnZSBpbmNsdWRlcyB0aGUgZGVidWcgaW5mb3JtYXRpb24gdXNlZnVsIGZvciBkZWJ1Z2dpbmcgZTJmc3Byb2dzCisgYW5kIGl0cyBsaWJyYXJpZXMsIGNvbnRhaW5lZCBpbiB0aGUgZTJmc3Byb2dzIGFuZCBlMmZzY2stc3RhdGljIHBhY2thZ2VzLgorIFRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpcyB1c2VkIGZvciBleGVjdXRpb24gdHJhY2luZyBhbmQgY29yZQorIGR1bXAgYW5hbHlzaXMuIAoraWZkZWYoYFVUSUxfTElOVVhfTkcnLCxgYAorUGFja2FnZTogdXVpZC1ydW50aW1lLWRiZworU2VjdGlvbjogZGVidWcKK1ByaW9yaXR5OiBleHRyYQorRGVwZW5kczogdXVpZC1ydW50aW1lICg9ICR7YmluYXJ5OlZlcnNpb259KSwgJHttaXNjOkRlcGVuZHN9CitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgdXVpZC1ydW50aW1lCisgVGhpcyBwYWNrYWdlIGluY2x1ZGVzIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiB1c2VmdWwgZm9yIGRlYnVnZ2luZyB0aGUKKyB1dWlkIHJ1bnRpbWUgcHJvZ3JhbXMsIGNvbnRhaW5lZCBpbiB0aGUgdXVpZC1ydW50aW1lIHBhY2thZ2UuCisgVGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcyB1c2VkIGZvciBleGVjdXRpb24gdHJhY2luZyBhbmQgY29yZQorIGR1bXAgYW5hbHlzaXMuCisnJylkbmwKKworUGFja2FnZTogZTJmc2xpYnMtZGJnCitTZWN0aW9uOiBkZWJ1ZworUHJpb3JpdHk6IGV4dHJhCitEZXBlbmRzOiBlMmZzbGlicyAoPSAke2JpbmFyeTpWZXJzaW9ufSksICR7bWlzYzpEZXBlbmRzfQorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGUyZnNsaWJzCisgVGhpcyBwYWNrYWdlIGluY2x1ZGVzIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiB1c2VmdWwgZm9yIGRlYnVnZ2luZyB0aGUKKyBleHQyZnMgYW5kIGUycCBsaWJyYXJpZXMsIGNvbnRhaW5lZCBpbiB0aGUgZTJmc2xpYnMgcGFja2FnZS4gIFRoZSBkZWJ1ZworIGluZm9ybWF0aW9uIGlzIHVzZWQgZm9yIGV4ZWN1dGlvbiB0cmFjaW5nIGFuZCBjb3JlIGR1bXAgYW5hbHlzaXMuCisKK1BhY2thZ2U6IGxpYmNvbWVycjItZGJnCitTZWN0aW9uOiBkZWJ1ZworUHJpb3JpdHk6IGV4dHJhCitEZXBlbmRzOiBsaWJjb21lcnIyICg9ICR7YmluYXJ5OlZlcnNpb259KSwgJHttaXNjOkRlcGVuZHN9CitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgbGliY29tZXJyMgorIFRoaXMgcGFja2FnZSBpbmNsdWRlcyB0aGUgZGVidWcgaW5mb3JtYXRpb24gdXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGhlCisgY29tX2VyciBsaWJyYXJ5LCBjb250YWluZWQgaW4gdGhlIGxpYmNvbWVycjIgcGFja2FnZS4gIFRoZSBkZWJ1Z2dpbmcKKyBpbmZvcm1hdGlvbiBpcyB1c2VkIGZvciBleGVjdXRpb24gdHJhY2luZyBhbmQgY29yZSBkdW1wIGFuYWx5c2lzLgorCitQYWNrYWdlOiBsaWJzczItZGJnCitTZWN0aW9uOiBkZWJ1ZworUHJpb3JpdHk6IGV4dHJhCitEZXBlbmRzOiBsaWJzczIgKD0gJHtiaW5hcnk6VmVyc2lvbn0pLCAke21pc2M6RGVwZW5kc30KK0FyY2hpdGVjdHVyZTogYW55CitEZXNjcmlwdGlvbjogZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciBsaWJzczIKKyBUaGlzIHBhY2thZ2UgaW5jbHVkZXMgdGhlIGRlYnVnIGluZm9ybWF0aW9uIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRoZQorIHNzIGxpYnJhcnksIGNvbnRhaW5lZCBpbiB0aGUgbGlic3MyIHBhY2thZ2UuICBUaGUgZGVidWcgaW5mb3JtYXRpb24KKyBpcyB1c2VkIGZvciBleGVjdXRpb24gdHJhY2luZyBhbmQgY29yZSBkdW1wIGFuYWx5c2lzLgoraWZkZWYoYFVUSUxfTElOVVhfTkcnLCxgYAorUGFja2FnZTogbGliYmxraWQxLWRiZworU2VjdGlvbjogZGVidWcKK1ByaW9yaXR5OiBleHRyYQorRGVwZW5kczogbGliYmxraWQxICg9ICR7YmluYXJ5OlZlcnNpb259KSwgJHttaXNjOkRlcGVuZHN9CitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgbGliYmxraWQxCisgVGhpcyBwYWNrYWdlIGluY2x1ZGVzIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiB1c2VmdWwgZm9yIGRlYnVnZ2luZyB0aGUKKyBibGtpZCBsaWJyYXJ5LCBjb250YWluZWQgaW4gdGhlIGxpYmJsa2lkMSBwYWNrYWdlLiAgVGhlIGRlYnVnCisgaW5mb3JtYXRpb24gaXMgdXNlZCBmb3IgZXhlY3V0aW9uIHRyYWNpbmcgYW5kIGNvcmUgZHVtcCBhbmFseXNpcy4KKworUGFja2FnZTogbGlidXVpZDEtZGJnCitTZWN0aW9uOiBkZWJ1ZworUHJpb3JpdHk6IGV4dHJhCitEZXBlbmRzOiBsaWJ1dWlkMSAoPSAke2JpbmFyeTpWZXJzaW9ufSksICR7bWlzYzpEZXBlbmRzfQorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGxpYnV1aWQxCisgVGhpcyBwYWNrYWdlIGluY2x1ZGVzIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiB1c2VmdWwgZm9yIGRlYnVnZ2luZyB0aGUKKyBVVUlEIGxpYnJhcnksIGNvbnRhaW5lZCBpbiB0aGUgbGlidXVpZDEgcGFja2FnZS4gIFRoZSBkZWJ1ZworIGluZm9ybWF0aW9uIGlzIHVzZWQgZm9yIGV4ZWN1dGlvbiB0cmFjaW5nIGFuZCBjb3JlIGR1bXAgYW5hbHlzaXMuCisnJylkbmwKZGlmZiAtLWdpdCBhL2RlYmlhbi9jb3B5cmlnaHQgYi9kZWJpYW4vY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTRkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vY29weXJpZ2h0CkBAIC0wLDAgKzEsNzMgQEAKK1RoaXMgaXMgdGhlIERlYmlhbiBHTlUvTGludXggcHJlcGFja2FnZWQgdmVyc2lvbiBvZiB0aGUgRVhUMiBmaWxlCitzeXN0ZW0gdXRpbGl0aWVzIChlMmZzY2ssIG1rZTJmcywgZXRjLikuICBUaGUgRVhUMiB1dGlsaXRpZXMgd2VyZQord3JpdHRlbiBieSBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PiBhbmQgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPi4KKworU291cmNlcyB3ZXJlIG9idGFpbmVkIGZyb20gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lMmZzcHJvZ3MKKworUGFja2FnaW5nIGlzIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CisgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMDMgWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPgorCSAgICAgQ29weXJpZ2h0IChjKSAyMDAxIEFsY292ZSA8aHR0cDovL3d3dy5hbGNvdmUuY29tLz4KKwkgICAgIENvcHlyaWdodCAoYykgMTk5NyBLbGVlIERpZW5lcworCSAgICAgQ29weXJpZ2h0IChjKSAxOTk1LTE5OTYgTWljaGFlbCBOb253ZWlsZXIgPG1ybjIwQGNhbS5hYy51az4KKworVXBzdHJlYW0gQXV0aG9yOiBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorCitDb3B5cmlnaHQgbm90aWNlOgorCitUaGlzIHBhY2thZ2UsIHRoZSBFWFQyIGZpbGVzeXN0ZW0gdXRpbGl0aWVzLCBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIKK3RoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGxpYi9leHQyZnMKK2FuZCBsaWIvZTJwIGxpYnJhcmllcywgd2hpY2ggYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgTGlicmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIHRoZSBsaWIvdXVpZCBsaWJyYXJ5IHdoaWNoIGlzIG1hZGUKK2F2YWlsYWJsZSB1bmRlciBhIEJTRC1zdHlsZSBsaWNlbnNlIGFuZCB0aGUgbGliL2V0IGFuZCBsaWIvc3MKK2xpYnJhcmllcyB3aGljaCBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgYW4gTUlULXN0eWxlIGxpY2Vuc2UuCisKKwlDb3B5cmlnaHQgKGMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIAorCTIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggYnkgVGhlb2RvcmUgVHMnbworCitPbiBEZWJpYW4gR05VIHN5c3RlbXMsIHRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgY2FuIGJlIGZvdW5kIGluIGAvdXNyL3NoYXJlL2NvbW1vbi1saWNlbnNlcy9HUEwtMicuICBUaGUKK2NvbXBsZXRlIHRleHQgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIGZvdW5kCitpbiAnL3Vzci9zaGFyZS9jb21tb24tbGljZW5zZXMvTEdQTC0yJy4KKworCitUaGUgbGljZW5zZSB1c2VkIGZvciBsaWIvZXQgYW5kIGxpYi9zcyBsaWJyYXJpZXMgaXM6CisKKyAgIENvcHlyaWdodCAxOTg3IGJ5IHRoZSBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQKKyAgIG9mIHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5CisKKyAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgICBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQKKyAgIHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlIHVzZWQgaW4KKyAgIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlCisgICBNLkkuVC4gUy5JLlAuQi4gbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgICB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorICAgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorCitUaGUgbGljZW5zZSB1c2VkIGZvciBsaWIvdXVpZCBpczoKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgICAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgICAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgICAgICB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgICBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICAgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisgICBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICAgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgICBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICAgREFNQUdFLgpkaWZmIC0tZ2l0IGEvZGViaWFuL2UyZnNjay1zdGF0aWMuY29weXJpZ2h0IGIvZGViaWFuL2UyZnNjay1zdGF0aWMuY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYmRjNjcKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vZTJmc2NrLXN0YXRpYy5jb3B5cmlnaHQKQEAgLTAsMCArMSwyNiBAQAorVGhpcyBpcyB0aGUgRGViaWFuIEdOVS9MaW51eCBwcmVwYWNrYWdlZCB2ZXJzaW9uIG9mIHRoZSBzdGF0aWMgRVhUMgorZmlsZSBzeXN0ZW0gY29uc2lzdGVuY3kgY2hlY2tlciAoZTJmc2NrLnN0YXRpYykuICBUaGUgRVhUMiB1dGlsaXRpZXMKK3dlcmUgd3JpdHRlbiBieSBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PiBhbmQgUmVteSBDYXJkCis8Y2FyZEBtYXNpLmlicC5mcj4uCisKK1NvdXJjZXMgd2VyZSBvYnRhaW5lZCBmcm9tIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZTJmc3Byb2dzCisKK1BhY2thZ2luZyBpcyBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNiBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMTk5Ny0yMDAzIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4KKwkgICAgIENvcHlyaWdodCAoYykgMjAwMSBBbGNvdmUgPGh0dHA6Ly93d3cuYWxjb3ZlLmNvbS8+CisJICAgICBDb3B5cmlnaHQgKGMpIDE5OTcgS2xlZSBEaWVuZXMKKwkgICAgIENvcHlyaWdodCAoYykgMTk5NS0xOTk2IE1pY2hhZWwgTm9ud2VpbGVyIDxtcm4yMEBjYW0uYWMudWs+CisKK1Vwc3RyZWFtIEF1dGhvcjogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KKworQ29weXJpZ2h0IG5vdGljZToKKworVGhpcyBwYWNrYWdlLCB0aGUgRVhUMiBmaWxlc3lzdGVtIHV0aWxpdGllcywgaXMgcHJvdGVjdGVkIGJ5IHRoZSBHTlUKK1B1YmxpYyBMaWNlbnNlLgorCisJQ29weXJpZ2h0IChjKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorCTIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggYnkgVGhlb2RvcmUgVHMnbworCitPbiBEZWJpYW4gR05VIHN5c3RlbXMsIHRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoZSBHTlUgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgY2FuIGJlIGZvdW5kIGluIGAvdXNyL3NoYXJlL2NvbW1vbi1saWNlbnNlcy9HUEwtMicuCisKZGlmZiAtLWdpdCBhL2RlYmlhbi9lMmZzY2stc3RhdGljLmZpbGVzIGIvZGViaWFuL2UyZnNjay1zdGF0aWMuZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhNzcxNgotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9lMmZzY2stc3RhdGljLmZpbGVzCkBAIC0wLDAgKzEsMiBAQAorL3NiaW4vZTJmc2NrLnN0YXRpYworL3Vzci9zaGFyZS9tYW4vbWFuOC9lMmZzY2suc3RhdGljKgpkaWZmIC0tZ2l0IGEvZGViaWFuL2UyZnNjay1zdGF0aWMucHJlaW5zdCBiL2RlYmlhbi9lMmZzY2stc3RhdGljLnByZWluc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc1NmFkZQotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9lMmZzY2stc3RhdGljLnByZWluc3QKQEAgLTAsMCArMSwxOSBAQAorIyEvYmluL3NoCisKKyMgQWJvcnQgb24gZXJyb3IuCitzZXQgLWUKKworUEtHPWUyZnNjay1zdGF0aWMKK0RPQ0xOSz0vdXNyL3NoYXJlL2RvYy8kUEtHCitpZiB0ZXN0ICIkMSIgPSB1cGdyYWRlIFwKKyAgICAtYSAtTCAkRE9DTE5LCit0aGVuCisgICAgcm0gJERPQ0xOSworZmkKKworIyBkaF9pbnN0YWxsZGViIHdpbGwgcmVwbGFjZSB0aGlzIHdpdGggc2hlbGwgY29kZSBhdXRvbWF0aWNhbGx5CisjIGdlbmVyYXRlZCBieSBvdGhlciBkZWJoZWxwZXIgc2NyaXB0cy4KKworI0RFQkhFTFBFUiMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9kZWJpYW4vZTJmc2xpYnMtZGV2LmRvYy1iYXNlIGIvZGViaWFuL2UyZnNsaWJzLWRldi5kb2MtYmFzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWQwNGY0Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2UyZnNsaWJzLWRldi5kb2MtYmFzZQpAQCAtMCwwICsxLDEwIEBACitEb2N1bWVudDogbGliZXh0MmZzCitUaXRsZTogVGhlIEVYVDJGUyBsaWJyYXJ5CitBdXRob3I6IFRoZW9kb3JlIFRzJ28KK0Fic3RyYWN0OiBUaGUgRVhUMkZTIGxpYnJhcnkgaXMgZGVzaWduZWQgdG8gYWxsb3cKKyB1c2VyLWxldmVsIHByb2dyYW1zIHRvIG1hbmlwdWxhdGUgYW4gZXh0MiBmaWxlc3lzdGVtLgorU2VjdGlvbjogUHJvZ3JhbW1pbmcKKworRm9ybWF0OiBIVE1MCitJbmRleDogL3Vzci9zaGFyZS9kb2MvZTJmc2xpYnMvaHRtbC1pbmZvL2xpYmV4dDJmcy5odG1sCitGaWxlczogL3Vzci9zaGFyZS9kb2MvZTJmc2xpYnMvaHRtbC1pbmZvLyouaHRtbCAKZGlmZiAtLWdpdCBhL2RlYmlhbi9lMmZzbGlicy1kZXYuZmlsZXMuaW4gYi9kZWJpYW4vZTJmc2xpYnMtZGV2LmZpbGVzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyY2Q2YzkKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vZTJmc2xpYnMtZGV2LmZpbGVzLmluCkBAIC0wLDAgKzEsOSBAQAordXNyL2xpYi8qL2xpYmV4dDJmcyouc28KK3Vzci9saWIvKi9saWJleHQyZnMqLmEKK3Vzci9saWIvKi9saWJlMnAqLnNvCit1c3IvbGliLyovbGliZTJwKi5hCit1c3IvaW5jbHVkZS9leHQyZnMKK3Vzci9pbmNsdWRlL2UycAordXNyL3NoYXJlL2luZm8vbGliZXh0MmZzLmluZm8qCit1c3IvbGliLyovcGtnY29uZmlnL2UycC5wYwordXNyL2xpYi8qL3BrZ2NvbmZpZy9leHQyZnMucGMKZGlmZiAtLWdpdCBhL2RlYmlhbi9lMmZzbGlicy5maWxlcy5pbiBiL2RlYmlhbi9lMmZzbGlicy5maWxlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTE5OGY3Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2UyZnNsaWJzLmZpbGVzLmluCkBAIC0wLDAgKzEsMiBAQAorbGliLyovbGliZXh0MmZzKi5zby4qCitsaWIvKi9saWJlMnAqLnNvLioKZGlmZiAtLWdpdCBhL2RlYmlhbi9lMmZzbGlicy5zeW1ib2xzIGIvZGViaWFuL2UyZnNsaWJzLnN5bWJvbHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhhNWZiNgotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9lMmZzbGlicy5zeW1ib2xzCkBAIC0wLDAgKzEsNTYyIEBACitsaWJlMnAuc28uMiBlMmZzbGlicyAjTUlOVkVSIworIGUycF9lZGl0X2ZlYXR1cmUyQEJhc2UgMS40MC43CisgZTJwX2VkaXRfZmVhdHVyZUBCYXNlIDEuMzcKKyBlMnBfZWRpdF9tbnRvcHRzQEJhc2UgMS4zNworIGUycF9mZWF0dXJlMnN0cmluZ0BCYXNlIDEuMzcKKyBlMnBfaGFzaDJzdHJpbmdAQmFzZSAxLjM3CisgZTJwX2lzX251bGxfdXVpZEBCYXNlIDEuMzcKKyBlMnBfanJubF9mZWF0dXJlMnN0cmluZ0BCYXNlIDEuNDEuMQorIGUycF9qcm5sX3N0cmluZzJmZWF0dXJlQEJhc2UgMS40MS4xCisgZTJwX21udG9wdDJzdHJpbmdAQmFzZSAxLjM3CisgZTJwX29zMnN0cmluZ0BCYXNlIDEuMzcKKyBlMnBfcGVyY2VudEBCYXNlIDEuNDAKKyBlMnBfc3RyaW5nMmZlYXR1cmVAQmFzZSAxLjM3CisgZTJwX3N0cmluZzJoYXNoQEJhc2UgMS4zNworIGUycF9zdHJpbmcybW50b3B0QEJhc2UgMS4zNworIGUycF9zdHJpbmcyb3NAQmFzZSAxLjM3CisgZTJwX3V1aWQyc3RyQEJhc2UgMS4zNworIGUycF91dWlkX3RvX3N0ckBCYXNlIDEuMzcKKyBmZ2V0ZmxhZ3NAQmFzZSAxLjM3CisgZmdldHZlcnNpb25AQmFzZSAxLjM3CisgZnNldGZsYWdzQEJhc2UgMS4zNworIGZzZXR2ZXJzaW9uQEJhc2UgMS4zNworIGdldGZsYWdzQEJhc2UgMS4zNworIGdldHZlcnNpb25AQmFzZSAxLjM3CisgaXRlcmF0ZV9vbl9kaXJAQmFzZSAxLjM3CisgbGlzdF9zdXBlcjJAQmFzZSAxLjM3CisgbGlzdF9zdXBlckBCYXNlIDEuMzcKKyBwYXJzZV9udW1fYmxvY2tzMkBCYXNlIDEuNDIKKyBwYXJzZV9udW1fYmxvY2tzQEJhc2UgMS4zNworIHByaW50X2ZsYWdzQEJhc2UgMS4zNworIHByaW50X2ZzX2Vycm9yc0BCYXNlIDEuMzcKKyBwcmludF9mc19zdGF0ZUBCYXNlIDEuMzcKKyBzZXRmbGFnc0BCYXNlIDEuMzcKKyBzZXR2ZXJzaW9uQEJhc2UgMS4zNworbGliZXh0MmZzLnNvLjIgZTJmc2xpYnMgI01JTlZFUiMKKyBiYWRibG9ja3NfbGlzdF9hZGRAQmFzZSAxLjM3CisgYmFkYmxvY2tzX2xpc3RfY3JlYXRlQEJhc2UgMS4zNworIGJhZGJsb2Nrc19saXN0X2ZyZWVAQmFzZSAxLjM3CisgYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZUBCYXNlIDEuMzcKKyBiYWRibG9ja3NfbGlzdF9pdGVyYXRlX2JlZ2luQEJhc2UgMS4zNworIGJhZGJsb2Nrc19saXN0X2l0ZXJhdGVfZW5kQEJhc2UgMS4zNworIGJhZGJsb2Nrc19saXN0X3Rlc3RAQmFzZSAxLjM3CisgZXRfZXh0Ml9lcnJvcl90YWJsZUBCYXNlIDEuMzcKKyBleHQyZnNfYWRkX2Rpcl9ibG9jazJAQmFzZSAxLjQyCisgZXh0MmZzX2FkZF9kaXJfYmxvY2tAQmFzZSAxLjM3CisgZXh0MmZzX2FkZF9qb3VybmFsX2RldmljZUBCYXNlIDEuMzcKKyBleHQyZnNfYWRkX2pvdXJuYWxfaW5vZGUyQEJhc2UgMS40Mi45LTN+CisgZXh0MmZzX2FkZF9qb3VybmFsX2lub2RlQEJhc2UgMS4zNworIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyQEJhc2UgMS40MgorIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnRAQmFzZSAxLjM3CisgZXh0MmZzX2FsbG9jX2Jsb2NrMkBCYXNlIDEuNDIKKyBleHQyZnNfYWxsb2NfYmxvY2tAQmFzZSAxLjM3CisgZXh0MmZzX2FsbG9jX2dlbmVyaWNfYm1hcEBCYXNlIDEuNDIKKyBleHQyZnNfYWxsb2NhdGVfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19hbGxvY2F0ZV9nZW5lcmljX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfYWxsb2NhdGVfZ3JvdXBfdGFibGVAQmFzZSAxLjM3CisgZXh0MmZzX2FsbG9jYXRlX2lub2RlX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfYWxsb2NhdGVfc3ViY2x1c3Rlcl9iaXRtYXBAQmFzZSAxLjQyCisgZXh0MmZzX2FsbG9jYXRlX3RhYmxlc0BCYXNlIDEuMzcKKyBleHQyZnNfYmFkYmxvY2tzX2NvcHlAQmFzZSAxLjM3CisgZXh0MmZzX2JhZGJsb2Nrc19lcXVhbEBCYXNlIDEuMzcKKyBleHQyZnNfYmFkYmxvY2tzX2xpc3RfYWRkQEJhc2UgMS4zNworIGV4dDJmc19iYWRibG9ja3NfbGlzdF9jcmVhdGVAQmFzZSAxLjM3CisgZXh0MmZzX2JhZGJsb2Nrc19saXN0X2RlbEBCYXNlIDEuMzcKKyBleHQyZnNfYmFkYmxvY2tzX2xpc3RfZnJlZUBCYXNlIDEuMzcKKyBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZUBCYXNlIDEuMzcKKyBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9iZWdpbkBCYXNlIDEuMzcKKyBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9lbmRAQmFzZSAxLjM3CisgZXh0MmZzX2JhZGJsb2Nrc19saXN0X3Rlc3RAQmFzZSAxLjM3CisgZXh0MmZzX2JnX2NoZWNrc3VtQEJhc2UgMS40MgorIGV4dDJmc19iZ19jaGVja3N1bV9zZXRAQmFzZSAxLjQyCisgZXh0MmZzX2JnX2ZsYWdzQEJhc2UgMS40MgorIGV4dDJmc19iZ19mbGFnc19jbGVhckBCYXNlIDEuNDIKKyBleHQyZnNfYmdfZmxhZ3Nfc2V0QEJhc2UgMS40MgorIGV4dDJmc19iZ19mbGFnc190ZXN0QEJhc2UgMS40MgorIGV4dDJmc19iZ19mbGFnc196YXBAQmFzZSAxLjQyCisgZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50QEJhc2UgMS40MgorIGV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudF9zZXRAQmFzZSAxLjQyCisgZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50QEJhc2UgMS40MgorIGV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudF9zZXRAQmFzZSAxLjQyCisgZXh0MmZzX2JnX2hhc19zdXBlckBCYXNlIDEuMzcKKyBleHQyZnNfYmdfaXRhYmxlX3VudXNlZEBCYXNlIDEuNDIKKyBleHQyZnNfYmdfaXRhYmxlX3VudXNlZF9zZXRAQmFzZSAxLjQyCisgZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudEBCYXNlIDEuNDIKKyBleHQyZnNfYmdfdXNlZF9kaXJzX2NvdW50X3NldEBCYXNlIDEuNDIKKyBleHQyZnNfYml0Y291bnRAQmFzZSAxLjQyLjcKKyBleHQyZnNfYmxrbWFwNjRfYml0YXJyYXlAQmFzZSAxLjQyCisgZXh0MmZzX2Jsa21hcDY0X3JidHJlZUBCYXNlIDEuNDIuMQorIGV4dDJmc19ibG9ja19hbGxvY19zdGF0czJAQmFzZSAxLjQyCisgZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzQEJhc2UgMS4zNworIGV4dDJmc19ibG9ja19hbGxvY19zdGF0c19yYW5nZUBCYXNlIDEuNDIuOS0zfgorIGV4dDJmc19ibG9ja19iaXRtYXBfbG9jQEJhc2UgMS40MgorIGV4dDJmc19ibG9ja19iaXRtYXBfbG9jX3NldEBCYXNlIDEuNDIKKyBleHQyZnNfYmxvY2tfaXRlcmF0ZTJAQmFzZSAxLjM3CisgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzQEJhc2UgMS40MgorIGV4dDJmc19ibG9ja19pdGVyYXRlQEJhc2UgMS4zNworIGV4dDJmc19ibG9ja3NfY291bnRAQmFzZSAxLjQyCisgZXh0MmZzX2Jsb2Nrc19jb3VudF9hZGRAQmFzZSAxLjQyCisgZXh0MmZzX2Jsb2Nrc19jb3VudF9zZXRAQmFzZSAxLjQyCisgZXh0MmZzX2JtYXAyQEJhc2UgMS40MS4wCisgZXh0MmZzX2JtYXBAQmFzZSAxLjM3CisgZXh0MmZzX2NoZWNrX2Rlc2NAQmFzZSAxLjM3CisgZXh0MmZzX2NoZWNrX2RpcmVjdG9yeUBCYXNlIDEuMzcKKyBleHQyZnNfY2hlY2tfaWZfbW91bnRlZEBCYXNlIDEuMzcKKyBleHQyZnNfY2hlY2tfbW91bnRfcG9pbnRAQmFzZSAxLjM3CisgZXh0MmZzX2NsZWFyX2JpdDY0QEJhc2UgMS40MgorIGV4dDJmc19jbGVhcl9iaXRAQmFzZSAxLjM3CisgZXh0MmZzX2NsZWFyX2Jsb2NrX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfY2xlYXJfZ2VuZXJpY19iaXRtYXBAQmFzZSAxLjQxLjAKKyBleHQyZnNfY2xlYXJfZ2VuZXJpY19ibWFwQEJhc2UgMS40MgorIGV4dDJmc19jbGVhcl9pbm9kZV9iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX2Nsb3NlMkBCYXNlIDEuNDIKKyBleHQyZnNfY2xvc2VAQmFzZSAxLjM3CisgZXh0MmZzX2Nsb3NlX2ZyZWVAQmFzZSAxLjQyLjExCisgZXh0MmZzX2Nsb3NlX2lub2RlX3NjYW5AQmFzZSAxLjM3CisgZXh0MmZzX2NvbXBhcmVfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19jb21wYXJlX2dlbmVyaWNfYml0bWFwQEJhc2UgMS40MS4wCisgZXh0MmZzX2NvbXBhcmVfZ2VuZXJpY19ibWFwQEJhc2UgMS40MgorIGV4dDJmc19jb21wYXJlX2lub2RlX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfY29udmVydF9zdWJjbHVzdGVyX2JpdG1hcEBCYXNlIDEuNDIKKyBleHQyZnNfY29weV9iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX2NvcHlfZGJsaXN0QEJhc2UgMS4zNworIGV4dDJmc19jb3B5X2dlbmVyaWNfYml0bWFwQEJhc2UgMS40MS4wCisgZXh0MmZzX2NvcHlfZ2VuZXJpY19ibWFwQEJhc2UgMS40MgorIGV4dDJmc19jcmMxNkBCYXNlIDEuNDEuMQorIGV4dDJmc19jcmMzMmNfYmVAQmFzZSAxLjQyCisgZXh0MmZzX2NyYzMyY19sZUBCYXNlIDEuNDIKKyBleHQyZnNfY3JlYXRlX2ljb3VudDJAQmFzZSAxLjM3CisgZXh0MmZzX2NyZWF0ZV9pY291bnRAQmFzZSAxLjM3CisgZXh0MmZzX2NyZWF0ZV9pY291bnRfdGRiQEJhc2UgMS40MAorIGV4dDJmc19jcmVhdGVfam91cm5hbF9zdXBlcmJsb2NrQEJhc2UgMS4zNworIGV4dDJmc19jcmVhdGVfcmVzaXplX2lub2RlQEJhc2UgMS4zNworIGV4dDJmc19kYmxpc3RfY291bnQyQEJhc2UgMS40MgorIGV4dDJmc19kYmxpc3RfY291bnRAQmFzZSAxLjM3CisgZXh0MmZzX2RibGlzdF9kaXJfaXRlcmF0ZUBCYXNlIDEuMzcKKyBleHQyZnNfZGJsaXN0X2Ryb3BfbGFzdEBCYXNlIDEuNDAuOAorIGV4dDJmc19kYmxpc3RfZ2V0X2xhc3QyQEJhc2UgMS40MgorIGV4dDJmc19kYmxpc3RfZ2V0X2xhc3RAQmFzZSAxLjQwLjgKKyBleHQyZnNfZGJsaXN0X2l0ZXJhdGUyQEJhc2UgMS40MgorIGV4dDJmc19kYmxpc3RfaXRlcmF0ZUBCYXNlIDEuMzcKKyBleHQyZnNfZGJsaXN0X3NvcnQyQEJhc2UgMS40MgorIGV4dDJmc19kYmxpc3Rfc29ydEBCYXNlIDEuMzcKKyBleHQyZnNfZGVmYXVsdF9qb3VybmFsX3NpemVAQmFzZSAxLjQwCisgZXh0MmZzX2Rlc2NyaXB0b3JfYmxvY2tfbG9jMkBCYXNlIDEuNDIKKyBleHQyZnNfZGVzY3JpcHRvcl9ibG9ja19sb2NAQmFzZSAxLjM3CisgZXh0MmZzX2Rpcl9pdGVyYXRlMkBCYXNlIDEuMzcKKyBleHQyZnNfZGlyX2l0ZXJhdGVAQmFzZSAxLjM3CisgZXh0MmZzX2Rpcmhhc2hAQmFzZSAxLjM3CisgZXh0MmZzX2RpdjY0X2NlaWxAQmFzZSAxLjQyCisgZXh0MmZzX2Rpdl9jZWlsQEJhc2UgMS40MAorIGV4dDJmc19kdXBfaGFuZGxlQEJhc2UgMS4zNworIGV4dDJmc19leHBhbmRfZGlyQEJhc2UgMS4zNworIGV4dDJmc19leHRfYXR0cl9oYXNoX2VudHJ5QEJhc2UgMS40MS4wCisgZXh0MmZzX2V4dGVudF9kZWxldGVAQmFzZSAxLjQxLjAKKyBleHQyZnNfZXh0ZW50X2ZpeF9wYXJlbnRzQEJhc2UgMS40Mi43CisgZXh0MmZzX2V4dGVudF9mcmVlQEJhc2UgMS40MS4wCisgZXh0MmZzX2V4dGVudF9nZXRAQmFzZSAxLjQxLjAKKyBleHQyZnNfZXh0ZW50X2dldF9pbmZvQEJhc2UgMS40MS4wCisgZXh0MmZzX2V4dGVudF9nb3RvMkBCYXNlIDEuNDIuNworIGV4dDJmc19leHRlbnRfZ290b0BCYXNlIDEuNDEuMAorIGV4dDJmc19leHRlbnRfaGVhZGVyX3ZlcmlmeUBCYXNlIDEuNDEuMAorIGV4dDJmc19leHRlbnRfaW5zZXJ0QEJhc2UgMS40MS4wCisgZXh0MmZzX2V4dGVudF9ub2RlX3NwbGl0QEJhc2UgMS40Mi43CisgZXh0MmZzX2V4dGVudF9vcGVuMkBCYXNlIDEuNDEuNgorIGV4dDJmc19leHRlbnRfb3BlbkBCYXNlIDEuNDEuMAorIGV4dDJmc19leHRlbnRfcmVwbGFjZUBCYXNlIDEuNDEuMAorIGV4dDJmc19leHRlbnRfc2V0X2JtYXBAQmFzZSAxLjQxLjAKKyBleHQyZnNfZmFzdF9jbGVhcl9iaXQ2NEBCYXNlIDEuNDIKKyBleHQyZnNfZmFzdF9jbGVhcl9iaXRAQmFzZSAxLjM5CisgZXh0MmZzX2Zhc3RfbWFya19ibG9ja19iaXRtYXAyQEJhc2UgMS40MgorIGV4dDJmc19mYXN0X21hcmtfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19mYXN0X21hcmtfYmxvY2tfYml0bWFwX3JhbmdlMkBCYXNlIDEuNDIKKyBleHQyZnNfZmFzdF9tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZUBCYXNlIDEuMzcKKyBleHQyZnNfZmFzdF9tYXJrX2lub2RlX2JpdG1hcDJAQmFzZSAxLjQyCisgZXh0MmZzX2Zhc3RfbWFya19pbm9kZV9iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX2Zhc3Rfc2V0X2JpdDY0QEJhc2UgMS40MgorIGV4dDJmc19mYXN0X3NldF9iaXRAQmFzZSAxLjM5CisgZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXAyQEJhc2UgMS40MgorIGV4dDJmc19mYXN0X3Rlc3RfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19mYXN0X3Rlc3RfYmxvY2tfYml0bWFwX3JhbmdlMkBCYXNlIDEuNDIKKyBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZUBCYXNlIDEuMzcKKyBleHQyZnNfZmFzdF90ZXN0X2lub2RlX2JpdG1hcDJAQmFzZSAxLjQyCisgZXh0MmZzX2Zhc3RfdGVzdF9pbm9kZV9iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX2Zhc3RfdW5tYXJrX2Jsb2NrX2JpdG1hcDJAQmFzZSAxLjQyCisgZXh0MmZzX2Zhc3RfdW5tYXJrX2Jsb2NrX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfZmFzdF91bm1hcmtfYmxvY2tfYml0bWFwX3JhbmdlMkBCYXNlIDEuNDIKKyBleHQyZnNfZmFzdF91bm1hcmtfYmxvY2tfYml0bWFwX3JhbmdlQEJhc2UgMS4zNworIGV4dDJmc19mYXN0X3VubWFya19pbm9kZV9iaXRtYXAyQEJhc2UgMS40MgorIGV4dDJmc19mYXN0X3VubWFya19pbm9kZV9iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrQEJhc2UgMS40MgorIGV4dDJmc19maWxlX2FjbF9ibG9ja19zZXRAQmFzZSAxLjQyCisgZXh0MmZzX2ZpbGVfYmxvY2tfb2Zmc2V0X3Rvb19iaWdAQmFzZSAxLjQyLjkKKyBleHQyZnNfZmlsZV9jbG9zZUBCYXNlIDEuMzcKKyBleHQyZnNfZmlsZV9mbHVzaEBCYXNlIDEuMzcKKyBleHQyZnNfZmlsZV9nZXRfZnNAQmFzZSAxLjM3CisgZXh0MmZzX2ZpbGVfZ2V0X2lub2RlQEJhc2UgMS40MgorIGV4dDJmc19maWxlX2dldF9pbm9kZV9udW1AQmFzZSAxLjQyLjEKKyBleHQyZnNfZmlsZV9nZXRfbHNpemVAQmFzZSAxLjM3CisgZXh0MmZzX2ZpbGVfZ2V0X3NpemVAQmFzZSAxLjM3CisgZXh0MmZzX2ZpbGVfbGxzZWVrQEJhc2UgMS4zNworIGV4dDJmc19maWxlX2xzZWVrQEJhc2UgMS4zNworIGV4dDJmc19maWxlX29wZW4yQEJhc2UgMS4zNworIGV4dDJmc19maWxlX29wZW5AQmFzZSAxLjM3CisgZXh0MmZzX2ZpbGVfcmVhZEBCYXNlIDEuMzcKKyBleHQyZnNfZmlsZV9zZXRfc2l6ZTJAQmFzZSAxLjQyCisgZXh0MmZzX2ZpbGVfc2V0X3NpemVAQmFzZSAxLjM3CisgZXh0MmZzX2ZpbGVfd3JpdGVAQmFzZSAxLjM3CisgZXh0MmZzX2ZpbmRfYmxvY2tfZGV2aWNlQEJhc2UgMS4zNworIGV4dDJmc19maW5kX2ZpcnN0X3NldF9ibG9ja19iaXRtYXAyQEJhc2UgMS40Mi45LTN+CisgZXh0MmZzX2ZpbmRfZmlyc3Rfc2V0X2dlbmVyaWNfYml0bWFwQEJhc2UgMS40Mi45LTN+CisgZXh0MmZzX2ZpbmRfZmlyc3Rfc2V0X2dlbmVyaWNfYm1hcEBCYXNlIDEuNDIuOS0zfgorIGV4dDJmc19maW5kX2ZpcnN0X3NldF9pbm9kZV9iaXRtYXAyQEJhc2UgMS40Mi45LTN+CisgZXh0MmZzX2ZpbmRfZmlyc3RfemVyb19ibG9ja19iaXRtYXAyQEJhc2UgMS40Mi4yCisgZXh0MmZzX2ZpbmRfZmlyc3RfemVyb19nZW5lcmljX2JpdG1hcEBCYXNlIDEuNDIuMworIGV4dDJmc19maW5kX2ZpcnN0X3plcm9fZ2VuZXJpY19ibWFwQEJhc2UgMS40Mi4yCisgZXh0MmZzX2ZpbmRfZmlyc3RfemVyb19pbm9kZV9iaXRtYXAyQEJhc2UgMS40Mi4yCisgZXh0MmZzX2ZsdXNoMkBCYXNlIDEuNDIKKyBleHQyZnNfZmx1c2hAQmFzZSAxLjM3CisgZXh0MmZzX2ZsdXNoX2ljYWNoZUBCYXNlIDEuMzcKKyBleHQyZnNfZm9sbG93X2xpbmtAQmFzZSAxLjM3CisgZXh0MmZzX2ZyZWVAQmFzZSAxLjM3CisgZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudEBCYXNlIDEuNDIKKyBleHQyZnNfZnJlZV9ibG9ja3NfY291bnRfYWRkQEJhc2UgMS40MgorIGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudF9zZXRAQmFzZSAxLjQyCisgZXh0MmZzX2ZyZWVfZGJsaXN0QEJhc2UgMS4zNworIGV4dDJmc19mcmVlX2dlbmVyaWNfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19mcmVlX2dlbmVyaWNfYm1hcEBCYXNlIDEuNDIKKyBleHQyZnNfZnJlZV9pY291bnRAQmFzZSAxLjM3CisgZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19mcmVlX21lbUBCYXNlIDEuMzcKKyBleHQyZnNfZnN0YXRAQmFzZSAxLjQyCisgZXh0MmZzX2Z1ZGdlX2Jsb2NrX2JpdG1hcF9lbmQyQEJhc2UgMS40MgorIGV4dDJmc19mdWRnZV9ibG9ja19iaXRtYXBfZW5kQEJhc2UgMS4zNworIGV4dDJmc19mdWRnZV9nZW5lcmljX2JpdG1hcF9lbmRAQmFzZSAxLjQxLjAKKyBleHQyZnNfZnVkZ2VfZ2VuZXJpY19ibWFwX2VuZEBCYXNlIDEuNDIKKyBleHQyZnNfZnVkZ2VfaW5vZGVfYml0bWFwX2VuZEBCYXNlIDEuMzcKKyBleHQyZnNfZ2V0X2FycmF5QEJhc2UgMS40MC4zCisgZXh0MmZzX2dldF9hcnJheXplcm9AQmFzZSAxLjQyCisgZXh0MmZzX2dldF9iaXRtYXBfZ3JhbnVsYXJpdHlAQmFzZSAxLjQyCisgZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfZW5kMkBCYXNlIDEuNDIKKyBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9lbmRAQmFzZSAxLjM3CisgZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfcmFuZ2UyQEJhc2UgMS40MgorIGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3JhbmdlQEJhc2UgMS40MS4wCisgZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfc3RhcnQyQEJhc2UgMS40MgorIGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3N0YXJ0QEJhc2UgMS4zNworIGV4dDJmc19nZXRfYmxvY2tzQEJhc2UgMS4zNworIGV4dDJmc19nZXRfZGF0YV9pb0BCYXNlIDEuMzcKKyBleHQyZnNfZ2V0X2RldmljZV9waHlzX3NlY3RzaXplQEJhc2UgMS40MS4xMgorIGV4dDJmc19nZXRfZGV2aWNlX3NlY3RzaXplQEJhc2UgMS4zNworIGV4dDJmc19nZXRfZGV2aWNlX3NpemUyQEJhc2UgMS40MS40CisgZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZUBCYXNlIDEuMzcKKyBleHQyZnNfZ2V0X2Rpb19hbGlnbm1lbnRAQmFzZSAxLjQyLjMKKyBleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzMkBCYXNlIDEuNDIKKyBleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzQEJhc2UgMS4zNworIGV4dDJmc19nZXRfZ2VuZXJpY19iaXRtYXBfZW5kQEJhc2UgMS40MS4wCisgZXh0MmZzX2dldF9nZW5lcmljX2JpdG1hcF9yYW5nZUBCYXNlIDEuNDEuMAorIGV4dDJmc19nZXRfZ2VuZXJpY19iaXRtYXBfc3RhcnRAQmFzZSAxLjQxLjAKKyBleHQyZnNfZ2V0X2dlbmVyaWNfYm1hcF9lbmRAQmFzZSAxLjQyCisgZXh0MmZzX2dldF9nZW5lcmljX2JtYXBfcmFuZ2VAQmFzZSAxLjQyCisgZXh0MmZzX2dldF9nZW5lcmljX2JtYXBfc3RhcnRAQmFzZSAxLjQyCisgZXh0MmZzX2dldF9pY291bnRfc2l6ZUBCYXNlIDEuMzcKKyBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9lbmQyQEJhc2UgMS40MgorIGV4dDJmc19nZXRfaW5vZGVfYml0bWFwX2VuZEBCYXNlIDEuMzcKKyBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9yYW5nZTJAQmFzZSAxLjQyCisgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfcmFuZ2VAQmFzZSAxLjQxLjAKKyBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9zdGFydDJAQmFzZSAxLjQyCisgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfc3RhcnRAQmFzZSAxLjM3CisgZXh0MmZzX2dldF9saWJyYXJ5X3ZlcnNpb25AQmFzZSAxLjM3CisgZXh0MmZzX2dldF9tZW1AQmFzZSAxLjM3CisgZXh0MmZzX2dldF9tZW1hbGlnbkBCYXNlIDEuNDEuMTMKKyBleHQyZnNfZ2V0X21lbXplcm9AQmFzZSAxLjQyCisgZXh0MmZzX2dldF9uZXh0X2lub2RlQEJhc2UgMS4zNworIGV4dDJmc19nZXRfbmV4dF9pbm9kZV9mdWxsQEJhc2UgMS4zNworIGV4dDJmc19nZXRfbnVtX2RpcnNAQmFzZSAxLjM3CisgZXh0MmZzX2dldF9wYXRobmFtZUBCYXNlIDEuMzcKKyBleHQyZnNfZ2V0X3JlY19sZW5AQmFzZSAxLjQxLjcKKyBleHQyZnNfZ3JvdXBfYmxvY2tzX2NvdW50QEJhc2UgMS40MgorIGV4dDJmc19ncm91cF9kZXNjQEJhc2UgMS40MgorIGV4dDJmc19ncm91cF9kZXNjX2NzdW1AQmFzZSAxLjQyLjIKKyBleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldEBCYXNlIDEuNDEuMAorIGV4dDJmc19ncm91cF9kZXNjX2NzdW1fdmVyaWZ5QEJhc2UgMS40MS4wCisgZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMkBCYXNlIDEuNDIKKyBleHQyZnNfZ3JvdXBfZmlyc3RfYmxvY2tAQmFzZSAxLjQwCisgZXh0MmZzX2dyb3VwX2xhc3RfYmxvY2syQEJhc2UgMS40MgorIGV4dDJmc19ncm91cF9sYXN0X2Jsb2NrQEJhc2UgMS40MAorIGV4dDJmc19ncm91cF9vZl9ibGsyQEJhc2UgMS40MgorIGV4dDJmc19ncm91cF9vZl9ibGtAQmFzZSAxLjM3CisgZXh0MmZzX2dyb3VwX29mX2lub0BCYXNlIDEuMzcKKyBleHQyZnNfaWJsa19hZGRfYmxvY2tzQEJhc2UgMS40MS4wCisgZXh0MmZzX2libGtfc2V0QEJhc2UgMS40MS4wCisgZXh0MmZzX2libGtfc3ViX2Jsb2Nrc0BCYXNlIDEuNDEuMAorIGV4dDJmc19pY291bnRfZGVjcmVtZW50QEJhc2UgMS4zNworIGV4dDJmc19pY291bnRfZmV0Y2hAQmFzZSAxLjM3CisgZXh0MmZzX2ljb3VudF9pbmNyZW1lbnRAQmFzZSAxLjM3CisgZXh0MmZzX2ljb3VudF9zdG9yZUBCYXNlIDEuMzcKKyBleHQyZnNfaWNvdW50X3ZhbGlkYXRlQEJhc2UgMS4zNworIGV4dDJmc19pbWFnZV9iaXRtYXBfcmVhZEBCYXNlIDEuMzcKKyBleHQyZnNfaW1hZ2VfYml0bWFwX3dyaXRlQEJhc2UgMS4zNworIGV4dDJmc19pbWFnZV9pbm9kZV9yZWFkQEJhc2UgMS4zNworIGV4dDJmc19pbWFnZV9pbm9kZV93cml0ZUBCYXNlIDEuMzcKKyBleHQyZnNfaW1hZ2Vfc3VwZXJfcmVhZEBCYXNlIDEuMzcKKyBleHQyZnNfaW1hZ2Vfc3VwZXJfd3JpdGVAQmFzZSAxLjM3CisgZXh0MmZzX2luaXRfZGJsaXN0QEJhc2UgMS4zNworIGV4dDJmc19pbml0aWFsaXplQEJhc2UgMS4zNworIGV4dDJmc19pbm9kZV9hbGxvY19zdGF0czJAQmFzZSAxLjM3CisgZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzQEJhc2UgMS4zNworIGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jQEJhc2UgMS40MgorIGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jX3NldEBCYXNlIDEuNDIKKyBleHQyZnNfaW5vZGVfZGF0YV9ibG9ja3MyQEJhc2UgMS40MgorIGV4dDJmc19pbm9kZV9kYXRhX2Jsb2Nrc0BCYXNlIDEuMzcKKyBleHQyZnNfaW5vZGVfaGFzX3ZhbGlkX2Jsb2NrczJAQmFzZSAxLjQyCisgZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3NAQmFzZSAxLjM3CisgZXh0MmZzX2lub2RlX2lfYmxvY2tzQEJhc2UgMS40MgorIGV4dDJmc19pbm9kZV9pb19pbnRlcm4yQEJhc2UgMS4zNworIGV4dDJmc19pbm9kZV9pb19pbnRlcm5AQmFzZSAxLjM3CisgZXh0MmZzX2lub2RlX3NjYW5fZmxhZ3NAQmFzZSAxLjM3CisgZXh0MmZzX2lub2RlX3NjYW5fZ290b19ibG9ja2dyb3VwQEJhc2UgMS4zNworIGV4dDJmc19pbm9kZV9zaXplX3NldEBCYXNlIDEuNDIuMTIKKyBleHQyZnNfaW5vZGVfdGFibGVfbG9jQEJhc2UgMS40MgorIGV4dDJmc19pbm9kZV90YWJsZV9sb2Nfc2V0QEJhc2UgMS40MgorIGV4dDJmc19qb3VybmFsX3NiX3N0YXJ0QEJhc2UgMS40Mi4xMgorIGV4dDJmc19saW5rQEJhc2UgMS4zNworIGV4dDJmc19sbHNlZWtAQmFzZSAxLjM3CisgZXh0MmZzX2xvb2t1cEBCYXNlIDEuMzcKKyBleHQyZnNfbWFrZV9nZW5lcmljX2JpdG1hcEBCYXNlIDEuNDEuMAorIGV4dDJmc19tYXBfY2x1c3Rlcl9ibG9ja0BCYXNlIDEuNDIuOQorIGV4dDJmc19tYXJrX2JiX2RpcnR5QEJhc2UgMS4zNworIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDJAQmFzZSAxLjQyCisgZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTJAQmFzZSAxLjQyCisgZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwX3JhbmdlQEJhc2UgMS4zNworIGV4dDJmc19tYXJrX2NoYW5nZWRAQmFzZSAxLjM3CisgZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX21hcmtfZ2VuZXJpY19ibWFwQEJhc2UgMS40MgorIGV4dDJmc19tYXJrX2liX2RpcnR5QEJhc2UgMS4zNworIGV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDJAQmFzZSAxLjQyCisgZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19tYXJrX3N1cGVyX2RpcnR5QEJhc2UgMS4zNworIGV4dDJmc19tYXJrX3ZhbGlkQEJhc2UgMS4zNworIGV4dDJmc19tZW1faXNfemVyb0BCYXNlIDEuNDIKKyBleHQyZnNfbWtkaXJAQmFzZSAxLjM3CisgZXh0MmZzX21tcF9jbGVhckBCYXNlIDEuNDIKKyBleHQyZnNfbW1wX2luaXRAQmFzZSAxLjQyCisgZXh0MmZzX21tcF9uZXdfc2VxQEJhc2UgMS40MgorIGV4dDJmc19tbXBfcmVhZEBCYXNlIDEuNDIKKyBleHQyZnNfbW1wX3N0YXJ0QEJhc2UgMS40MgorIGV4dDJmc19tbXBfc3RvcEBCYXNlIDEuNDIKKyBleHQyZnNfbW1wX3VwZGF0ZUBCYXNlIDEuNDIKKyBleHQyZnNfbW1wX3dyaXRlQEJhc2UgMS40MgorIGV4dDJmc19uYW1laUBCYXNlIDEuMzcKKyBleHQyZnNfbmFtZWlfZm9sbG93QEJhc2UgMS4zNworIGV4dDJmc19uYXRpdmVfZmxhZ0BCYXNlIDEuMzcKKyBleHQyZnNfbmV3X2Jsb2NrMkBCYXNlIDEuNDIKKyBleHQyZnNfbmV3X2Jsb2NrQEJhc2UgMS4zNworIGV4dDJmc19uZXdfZGlyX2Jsb2NrQEJhc2UgMS4zNworIGV4dDJmc19uZXdfaW5vZGVAQmFzZSAxLjM3CisgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfY2xvc2VAQmFzZSAxLjQyCisgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfaW5pdEBCYXNlIDEuNDIKKyBleHQyZnNfbnVtZXJpY19wcm9ncmVzc191cGRhdGVAQmFzZSAxLjQyCisgZXh0MmZzX29wZW4yQEJhc2UgMS4zNworIGV4dDJmc19vcGVuQEJhc2UgMS4zNworIGV4dDJmc19vcGVuX2ZpbGVAQmFzZSAxLjQyCisgZXh0MmZzX29wZW5faW5vZGVfc2NhbkBCYXNlIDEuMzcKKyBleHQyZnNfcGFyc2VfdmVyc2lvbl9zdHJpbmdAQmFzZSAxLjM3CisgZXh0MmZzX3Byb2Nlc3NfZGlyX2Jsb2NrQEJhc2UgMS4zNworIGV4dDJmc19wdW5jaEBCYXNlIDEuNDIKKyBleHQyZnNfcl9ibG9ja3NfY291bnRAQmFzZSAxLjQyCisgZXh0MmZzX3JfYmxvY2tzX2NvdW50X2FkZEBCYXNlIDEuNDIKKyBleHQyZnNfcl9ibG9ja3NfY291bnRfc2V0QEJhc2UgMS40MgorIGV4dDJmc19yYl9hdWdtZW50X2VyYXNlX2JlZ2luQEJhc2UgMS40Mi4xCisgZXh0MmZzX3JiX2F1Z21lbnRfZXJhc2VfZW5kQEJhc2UgMS40Mi4xCisgZXh0MmZzX3JiX2F1Z21lbnRfaW5zZXJ0QEJhc2UgMS40Mi4xCisgZXh0MmZzX3JiX2VyYXNlQEJhc2UgMS40Mi4xCisgZXh0MmZzX3JiX2ZpcnN0QEJhc2UgMS40Mi4xCisgZXh0MmZzX3JiX2luc2VydF9jb2xvckBCYXNlIDEuNDIuMQorIGV4dDJmc19yYl9sYXN0QEJhc2UgMS40Mi4xCisgZXh0MmZzX3JiX25leHRAQmFzZSAxLjQyLjEKKyBleHQyZnNfcmJfcHJldkBCYXNlIDEuNDIuMQorIGV4dDJmc19yYl9yZXBsYWNlX25vZGVAQmFzZSAxLjQyLjEKKyBleHQyZnNfcmVhZF9iYl9GSUxFMkBCYXNlIDEuMzcKKyBleHQyZnNfcmVhZF9iYl9GSUxFQEJhc2UgMS4zNworIGV4dDJmc19yZWFkX2JiX2lub2RlQEJhc2UgMS4zNworIGV4dDJmc19yZWFkX2JpdG1hcHNAQmFzZSAxLjM3CisgZXh0MmZzX3JlYWRfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19yZWFkX2Rpcl9ibG9jazJAQmFzZSAxLjM3CisgZXh0MmZzX3JlYWRfZGlyX2Jsb2NrM0BCYXNlIDEuNDIKKyBleHQyZnNfcmVhZF9kaXJfYmxvY2tAQmFzZSAxLjM3CisgZXh0MmZzX3JlYWRfZXh0X2F0dHIyQEJhc2UgMS40MgorIGV4dDJmc19yZWFkX2V4dF9hdHRyQEJhc2UgMS4zNworIGV4dDJmc19yZWFkX2luZF9ibG9ja0BCYXNlIDEuMzcKKyBleHQyZnNfcmVhZF9pbm9kZUBCYXNlIDEuMzcKKyBleHQyZnNfcmVhZF9pbm9kZV9iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX3JlYWRfaW5vZGVfZnVsbEBCYXNlIDEuMzcKKyBleHQyZnNfcmVzZXJ2ZV9zdXBlcl9hbmRfYmdkQEJhc2UgMS4zNworIGV4dDJmc19yZXNpemVfYmxvY2tfYml0bWFwMkBCYXNlIDEuNDIKKyBleHQyZnNfcmVzaXplX2Jsb2NrX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfcmVzaXplX2dlbmVyaWNfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19yZXNpemVfZ2VuZXJpY19ibWFwQEJhc2UgMS40MgorIGV4dDJmc19yZXNpemVfaW5vZGVfYml0bWFwMkBCYXNlIDEuNDIKKyBleHQyZnNfcmVzaXplX2lub2RlX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfcmVzaXplX21lbUBCYXNlIDEuMzcKKyBleHQyZnNfcmV3cml0ZV90b19pb0BCYXNlIDEuMzcKKyBleHQyZnNfc2V0X2FsbG9jX2Jsb2NrX2NhbGxiYWNrQEJhc2UgMS40MS4wCisgZXh0MmZzX3NldF9iaXQ2NEBCYXNlIDEuNDIKKyBleHQyZnNfc2V0X2JpdEBCYXNlIDEuMzcKKyBleHQyZnNfc2V0X2JpdG1hcF9wYWRkaW5nQEJhc2UgMS4zNworIGV4dDJmc19zZXRfYmxvY2tfYWxsb2Nfc3RhdHNfY2FsbGJhY2tAQmFzZSAxLjQxLjAKKyBleHQyZnNfc2V0X2Jsb2NrX2JpdG1hcF9yYW5nZTJAQmFzZSAxLjQyCisgZXh0MmZzX3NldF9ibG9ja19iaXRtYXBfcmFuZ2VAQmFzZSAxLjQxLjAKKyBleHQyZnNfc2V0X2RhdGFfaW9AQmFzZSAxLjM3CisgZXh0MmZzX3NldF9kaXJfYmxvY2syQEJhc2UgMS40MgorIGV4dDJmc19zZXRfZGlyX2Jsb2NrQEJhc2UgMS4zNworIGV4dDJmc19zZXRfZ2R0X2NzdW1AQmFzZSAxLjQxLjAKKyBleHQyZnNfc2V0X2dlbmVyaWNfYml0bWFwX3BhZGRpbmdAQmFzZSAxLjQxLjAKKyBleHQyZnNfc2V0X2dlbmVyaWNfYml0bWFwX3JhbmdlQEJhc2UgMS40MS4wCisgZXh0MmZzX3NldF9nZW5lcmljX2JtYXBfcGFkZGluZ0BCYXNlIDEuNDIKKyBleHQyZnNfc2V0X2dlbmVyaWNfYm1hcF9yYW5nZUBCYXNlIDEuNDIKKyBleHQyZnNfc2V0X2lub2RlX2JpdG1hcF9yYW5nZTJAQmFzZSAxLjQyCisgZXh0MmZzX3NldF9pbm9kZV9iaXRtYXBfcmFuZ2VAQmFzZSAxLjQxLjAKKyBleHQyZnNfc2V0X2lub2RlX2NhbGxiYWNrQEJhc2UgMS4zNworIGV4dDJmc19zZXRfcmVjX2xlbkBCYXNlIDEuNDEuNworIGV4dDJmc19zdGF0QEJhc2UgMS40MgorIGV4dDJmc19zdXBlcl9hbmRfYmdkX2xvYzJAQmFzZSAxLjQyCisgZXh0MmZzX3N1cGVyX2FuZF9iZ2RfbG9jQEJhc2UgMS4zNworIGV4dDJmc19zd2FiMTZAQmFzZSAxLjM3CisgZXh0MmZzX3N3YWIzMkBCYXNlIDEuMzcKKyBleHQyZnNfc3dhYjY0QEJhc2UgMS40MAorIGV4dDJmc19zeW1saW5rQEJhc2UgMS40Mi43CisgZXh0MmZzX3N5bmNfZGV2aWNlQEJhc2UgMS4zNworIGV4dDJmc190ZGJfYXBwZW5kQEJhc2UgMS40MAorIGV4dDJmc190ZGJfY2hhaW5sb2NrQEJhc2UgMS40MAorIGV4dDJmc190ZGJfY2hhaW5sb2NrX21hcmtAQmFzZSAxLjQwLjcKKyBleHQyZnNfdGRiX2NoYWlubG9ja19ub25ibG9ja0BCYXNlIDEuNDAuNworIGV4dDJmc190ZGJfY2hhaW5sb2NrX3JlYWRAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9jaGFpbmxvY2tfdW5tYXJrQEJhc2UgMS40MC43CisgZXh0MmZzX3RkYl9jaGFpbnVubG9ja0BCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2NoYWludW5sb2NrX3JlYWRAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9jbG9zZUBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2RlbGV0ZUBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2R1bXBfYWxsQEJhc2UgMS40MAorIGV4dDJmc190ZGJfZW5hYmxlX3NlcW51bUBCYXNlIDEuNDAuNworIGV4dDJmc190ZGJfZXJyb3JAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9lcnJvcnN0ckBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2V4aXN0c0BCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2ZkQEJhc2UgMS40MAorIGV4dDJmc190ZGJfZmV0Y2hAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9maXJzdGtleUBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2dldF9mbGFnc0BCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2dldF9sb2dnaW5nX3ByaXZhdGVAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9nZXRfc2VxbnVtQEJhc2UgMS40MAorIGV4dDJmc190ZGJfaGFzaF9zaXplQEJhc2UgMS40MAorIGV4dDJmc190ZGJfaW5jcmVtZW50X3NlcW51bV9ub25ibG9ja0BCYXNlIDEuNDAuNworIGV4dDJmc190ZGJfbG9ja19ub25ibG9ja0BCYXNlIDEuNDAuNworIGV4dDJmc190ZGJfbG9ja2FsbEBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2xvY2thbGxfbWFya0BCYXNlIDEuNDAuNworIGV4dDJmc190ZGJfbG9ja2FsbF9ub25ibG9ja0BCYXNlIDEuNDAuNworIGV4dDJmc190ZGJfbG9ja2FsbF9yZWFkQEJhc2UgMS40MAorIGV4dDJmc190ZGJfbG9ja2FsbF9yZWFkX25vbmJsb2NrQEJhc2UgMS40MC43CisgZXh0MmZzX3RkYl9sb2NrYWxsX3VubWFya0BCYXNlIDEuNDAuNworIGV4dDJmc190ZGJfbG9nX2ZuQEJhc2UgMS40MAorIGV4dDJmc190ZGJfbWFwX3NpemVAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9uYW1lQEJhc2UgMS40MAorIGV4dDJmc190ZGJfbmV4dGtleUBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX29wZW5AQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9vcGVuX2V4QEJhc2UgMS40MAorIGV4dDJmc190ZGJfcGFyc2VfcmVjb3JkQEJhc2UgMS40MAorIGV4dDJmc190ZGJfcHJpbnRmcmVlbGlzdEBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX3Jlb3BlbkBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX3Jlb3Blbl9hbGxAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9zZXRfbG9nZ2luZ19mdW5jdGlvbkBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX3NldF9tYXhfZGVhZEBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX3N0b3JlQEJhc2UgMS40MAorIGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fY2FuY2VsQEJhc2UgMS40MAorIGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fY29tbWl0QEJhc2UgMS40MAorIGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fcmVjb3ZlckBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX3RyYW5zYWN0aW9uX3N0YXJ0QEJhc2UgMS40MAorIGV4dDJmc190ZGJfdHJhdmVyc2VAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl90cmF2ZXJzZV9yZWFkQEJhc2UgMS40MAorIGV4dDJmc190ZGJfdW5sb2NrYWxsQEJhc2UgMS40MAorIGV4dDJmc190ZGJfdW5sb2NrYWxsX3JlYWRAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl92YWxpZGF0ZV9mcmVlbGlzdEBCYXNlIDEuNDAKKyBleHQyZnNfdGVzdF9iYl9kaXJ0eUBCYXNlIDEuMzcKKyBleHQyZnNfdGVzdF9iaXQ2NEBCYXNlIDEuNDIKKyBleHQyZnNfdGVzdF9iaXRAQmFzZSAxLjM3CisgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMkBCYXNlIDEuNDIKKyBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwX3JhbmdlMkBCYXNlIDEuNDIKKyBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2VAQmFzZSAxLjM3CisgZXh0MmZzX3Rlc3RfY2hhbmdlZEBCYXNlIDEuMzcKKyBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfdGVzdF9nZW5lcmljX2JtYXBAQmFzZSAxLjQyCisgZXh0MmZzX3Rlc3RfaWJfZGlydHlAQmFzZSAxLjM3CisgZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMkBCYXNlIDEuNDIKKyBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwX3JhbmdlQEJhc2UgMS40MS44CisgZXh0MmZzX3Rlc3RfdmFsaWRAQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9jb3B5QEJhc2UgMS4zNworIGV4dDJmc191MzJfbGlzdF9hZGRAQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9saXN0X2NvdW50QEJhc2UgMS4zNworIGV4dDJmc191MzJfbGlzdF9jcmVhdGVAQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9saXN0X2RlbEBCYXNlIDEuMzcKKyBleHQyZnNfdTMyX2xpc3RfZXF1YWxAQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9saXN0X2ZpbmRAQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9saXN0X2ZyZWVAQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9saXN0X2l0ZXJhdGVAQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9saXN0X2l0ZXJhdGVfYmVnaW5AQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9saXN0X2l0ZXJhdGVfZW5kQEJhc2UgMS4zNworIGV4dDJmc191MzJfbGlzdF90ZXN0QEJhc2UgMS4zNworIGV4dDJmc191bmxpbmtAQmFzZSAxLjM3CisgZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAyQEJhc2UgMS40MgorIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwX3JhbmdlMkBCYXNlIDEuNDIKKyBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZUBCYXNlIDEuMzcKKyBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc191bm1hcmtfZ2VuZXJpY19ibWFwQEJhc2UgMS40MgorIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMkBCYXNlIDEuNDIKKyBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfdW5tYXJrX3ZhbGlkQEJhc2UgMS4zNworIGV4dDJmc191cGRhdGVfYmJfaW5vZGVAQmFzZSAxLjM3CisgZXh0MmZzX3VwZGF0ZV9keW5hbWljX3JldkBCYXNlIDEuMzcKKyBleHQyZnNfd2Fybl9iaXRtYXAyQEJhc2UgMS4zNworIGV4dDJmc193YXJuX2JpdG1hcDMyQEJhc2UgMS40MgorIGV4dDJmc193YXJuX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfd3JpdGVfYmJfRklMRUBCYXNlIDEuMzcKKyBleHQyZnNfd3JpdGVfYml0bWFwc0BCYXNlIDEuMzcKKyBleHQyZnNfd3JpdGVfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc193cml0ZV9kaXJfYmxvY2syQEJhc2UgMS4zNworIGV4dDJmc193cml0ZV9kaXJfYmxvY2szQEJhc2UgMS40MgorIGV4dDJmc193cml0ZV9kaXJfYmxvY2tAQmFzZSAxLjM3CisgZXh0MmZzX3dyaXRlX2V4dF9hdHRyMkBCYXNlIDEuNDIKKyBleHQyZnNfd3JpdGVfZXh0X2F0dHJAQmFzZSAxLjM3CisgZXh0MmZzX3dyaXRlX2luZF9ibG9ja0BCYXNlIDEuMzcKKyBleHQyZnNfd3JpdGVfaW5vZGVAQmFzZSAxLjM3CisgZXh0MmZzX3dyaXRlX2lub2RlX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfd3JpdGVfaW5vZGVfZnVsbEBCYXNlIDEuMzcKKyBleHQyZnNfd3JpdGVfbmV3X2lub2RlQEJhc2UgMS4zNworIGV4dDJmc196ZXJvX2Jsb2NrczJAQmFzZSAxLjQyCisgZXh0MmZzX3plcm9fYmxvY2tzQEJhc2UgMS40MS4wCisgaW5pdGlhbGl6ZV9leHQyX2Vycm9yX3RhYmxlQEJhc2UgMS4zNworIGluaXRpYWxpemVfZXh0Ml9lcnJvcl90YWJsZV9yQEJhc2UgMS4zNworIGlub2RlX2lvX21hbmFnZXJAQmFzZSAxLjM3CisgaW9fY2hhbm5lbF9hbGxvY19idWZAQmFzZSAxLjQyLjMKKyBpb19jaGFubmVsX2Rpc2NhcmRAQmFzZSAxLjQyCisgaW9fY2hhbm5lbF9yZWFkX2JsazY0QEJhc2UgMS40MS4xCisgaW9fY2hhbm5lbF9zZXRfb3B0aW9uc0BCYXNlIDEuMzcKKyBpb19jaGFubmVsX3dyaXRlX2JsazY0QEJhc2UgMS40MS4xCisgaW9fY2hhbm5lbF93cml0ZV9ieXRlQEJhc2UgMS4zNworIHFjb3cyX3JlYWRfaGVhZGVyQEJhc2UgMS40MgorIHFjb3cyX3dyaXRlX3Jhd19pbWFnZUBCYXNlIDEuNDIKKyBzZXRfdW5kb19pb19iYWNraW5nX21hbmFnZXJAQmFzZSAxLjQxLjAKKyBzZXRfdW5kb19pb19iYWNrdXBfZmlsZUBCYXNlIDEuNDEuMAorIHRlc3RfaW9fYmFja2luZ19tYW5hZ2VyQEJhc2UgMS4zNworIHRlc3RfaW9fY2JfcmVhZF9ibGs2NEBCYXNlIDEuNDEuMAorIHRlc3RfaW9fY2JfcmVhZF9ibGtAQmFzZSAxLjM3CisgdGVzdF9pb19jYl9zZXRfYmxrc2l6ZUBCYXNlIDEuMzcKKyB0ZXN0X2lvX2NiX3dyaXRlX2JsazY0QEJhc2UgMS40MS4wCisgdGVzdF9pb19jYl93cml0ZV9ibGtAQmFzZSAxLjM3CisgdGVzdF9pb19jYl93cml0ZV9ieXRlQEJhc2UgMS4zNworIHRlc3RfaW9fbWFuYWdlckBCYXNlIDEuMzcKKyB1bmRvX2lvX21hbmFnZXJAQmFzZSAxLjQxLjAKKyB1bml4X2lvX21hbmFnZXJAQmFzZSAxLjM3CmRpZmYgLS1naXQgYS9kZWJpYW4vZTJmc3Byb2dzLXVkZWIuc2hsaWJzLmxvY2FsIGIvZGViaWFuL2UyZnNwcm9ncy11ZGViLnNobGlicy5sb2NhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDFiNTgzCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2UyZnNwcm9ncy11ZGViLnNobGlicy5sb2NhbApAQCAtMCwwICsxLDYgQEAKK2xpYmJsa2lkIDEgbGliYmxraWQxLXVkZWIKKyMgZm9yY2UgdGhlIGRlcGVuZGVuY3kgdG8gbGliYmxraWQxLXVkZWIsIGV2ZW4gaWYgaXQgZG9uJ3QgaW5jbHVkZSB0aGUgbGliCitsaWJjb21fZXJyIDIgbGliYmxraWQxLXVkZWIKK2xpYnV1aWQgMSBsaWJ1dWlkMS11ZGViCitsaWJleHQyZnMgMiBsaWJibGtpZDEtdWRlYgorbGliZTJwIDIgbGliYmxraWQxLXVkZWIKZGlmZiAtLWdpdCBhL2RlYmlhbi9lMmZzcHJvZ3MuZG9jcyBiL2RlYmlhbi9lMmZzcHJvZ3MuZG9jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWY5NzMzCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2UyZnNwcm9ncy5kb2NzCkBAIC0wLDAgKzEsMiBAQAorUkVBRE1FCitSRUxFQVNFLU5PVEVTCmRpZmYgLS1naXQgYS9kZWJpYW4vZTJmc3Byb2dzLmZpbGVzIGIvZGViaWFuL2UyZnNwcm9ncy5maWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U1NGRhCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2UyZnNwcm9ncy5maWxlcwpAQCAtMCwwICsxLDYgQEAKK3NiaW4KK3Vzci9iaW4KK3Vzci9zYmluCit1c3Ivc2hhcmUvbWFuCit1c3Ivc2hhcmUvbG9jYWxlCitldGMKZGlmZiAtLWdpdCBhL2RlYmlhbi9lMmZzcHJvZ3MucHJlaW5zdCBiL2RlYmlhbi9lMmZzcHJvZ3MucHJlaW5zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmE5ZjZiCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2UyZnNwcm9ncy5wcmVpbnN0CkBAIC0wLDAgKzEsMTkgQEAKKyMhL2Jpbi9zaAorCisjIEFib3J0IG9uIGVycm9yLgorc2V0IC1lCisKK1BLRz1lMmZzcHJvZ3MKK0RPQ0xOSz0vdXNyL3NoYXJlL2RvYy8kUEtHCitpZiB0ZXN0ICIkMSIgPSB1cGdyYWRlIFwKKyAgICAtYSAtTCAkRE9DTE5LCit0aGVuCisgICAgcm0gJERPQ0xOSworZmkKKworIyBkaF9pbnN0YWxsZGViIHdpbGwgcmVwbGFjZSB0aGlzIHdpdGggc2hlbGwgY29kZSBhdXRvbWF0aWNhbGx5CisjIGdlbmVyYXRlZCBieSBvdGhlciBkZWJoZWxwZXIgc2NyaXB0cy4KKworI0RFQkhFTFBFUiMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9kZWJpYW4vZTJmc3Byb2dzLnNobGlicy5sb2NhbC5pbiBiL2RlYmlhbi9lMmZzcHJvZ3Muc2hsaWJzLmxvY2FsLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMWI3NWEKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vZTJmc3Byb2dzLnNobGlicy5sb2NhbC5pbgpAQCAtMCwwICsxLDggQEAKK2xpYmNvbV9lcnIgMiBsaWJjb21lcnIyICg+PSAxLjQyfldJUC0yMDExLTEwLTA1LTEpCitsaWJzcyAyIGxpYnNzMiAoPj0gMS4zNC0xKQoraWZkZWYoYFVUSUxfTElOVVhfTkcnLCwKK2BgbGlidXVpZCAxIGxpYnV1aWQxICg+PSAxLjM0LTEpCitsaWJibGtpZCAxIGxpYmJsa2lkMSAoPj0gMS4zNC0xKQorJycpZG5sCitsaWJleHQyZnMgMiBlMmZzbGlicyAoPSAke1NvdXJjZS1WZXJzaW9ufSkKK2xpYmUycCAyIGUyZnNsaWJzICg9ICR7U291cmNlLVZlcnNpb259KQpkaWZmIC0tZ2l0IGEvZGViaWFuL2xpYmJsa2lkLWRldi5maWxlcy5pbiBiL2RlYmlhbi9saWJibGtpZC1kZXYuZmlsZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzZGEzNgotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9saWJibGtpZC1kZXYuZmlsZXMuaW4KQEAgLTAsMCArMSw0IEBACit1c3IvbGliLyovbGliYmxraWQqLnNvLioKK3Vzci9pbmNsdWRlL2Jsa2lkCit1c3Ivc2hhcmUvbWFuL21hbjMvbGliYmxraWQuMwordXNyL2xpYi8qL3BrZ2NvbmZpZy9ibGtpZC5wYwpkaWZmIC0tZ2l0IGEvZGViaWFuL2xpYmJsa2lkLmNvcHlyaWdodCBiL2RlYmlhbi9saWJibGtpZC5jb3B5cmlnaHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlODE4YgotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9saWJibGtpZC5jb3B5cmlnaHQKQEAgLTAsMCArMSwxOSBAQAorVGhpcyBwYWNrYWdlIHdhcyBhZGRlZCB0byB0aGUgZTJmc3Byb2dzIGRlYmlhbiBzb3VyY2UgcGFja2FnZSBieQorVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4gb24gU2F0IE1hciAxNSAxNTozMzozNyBFU1QgMjAwMworCitJdCBpcyBwYXJ0IG9mIHRoZSBtYWluIGUyZnNwcm9ncyBkaXN0cmlidXRpb24sIHdoaWNoIGNhbiBiZSBmb3VuZCBhdDoKKworCWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZTJmc3Byb2dzCisKK1Vwc3RyZWFtIEF1dGhvcjogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KKworQ29weXJpZ2h0OgorCitDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDEgYnkgQW5kcmllcyBCcm91d2VyCitDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMgYnkgVGhlb2RvcmUgVHMnbworCitZb3UgYXJlIGZyZWUgdG8gZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitMZXNzZXIgKExpYnJhcnkpIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK09uIERlYmlhbiBzeXN0ZW1zLCB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGUgR05VIExlc3NlciAoTGlicmFyeSkKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIGZvdW5kIGluIC91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMi4KZGlmZiAtLWdpdCBhL2RlYmlhbi9saWJibGtpZDEuZmlsZXMuaW4gYi9kZWJpYW4vbGliYmxraWQxLmZpbGVzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZWY4NmQKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vbGliYmxraWQxLmZpbGVzLmluCkBAIC0wLDAgKzEgQEAKK2xpYi8qL2xpYmJsa2lkKi5zby4qCmRpZmYgLS1naXQgYS9kZWJpYW4vbGliYmxraWQxLnN5bWJvbHMgYi9kZWJpYW4vbGliYmxraWQxLnN5bWJvbHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFiOTFmNQotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9saWJibGtpZDEuc3ltYm9scwpAQCAtMCwwICsxLDQxIEBACitsaWJibGtpZC5zby4xIGxpYmJsa2lkMSAjTUlOVkVSIworIGJsa2lkX19zY2FuX2RpckBCYXNlIDEuNDEuMQorIGJsa2lkX2RlYnVnX21hc2tAQmFzZSAxLjMzCisgYmxraWRfZGV2X2Rldm5hbWVAQmFzZSAxLjMzCisgYmxraWRfZGV2X2hhc190YWdAQmFzZSAxLjM4CisgYmxraWRfZGV2X2l0ZXJhdGVfYmVnaW5AQmFzZSAxLjMzCisgYmxraWRfZGV2X2l0ZXJhdGVfZW5kQEJhc2UgMS4zMworIGJsa2lkX2Rldl9uZXh0QEJhc2UgMS4zMworIGJsa2lkX2Rldl9zZXRfc2VhcmNoQEJhc2UgMS4zOAorI01JU1NJTkc6IDEuNDEuMSMgYmxraWRfZGV2ZGlyc0BCYXNlIDEuMzQKKyBibGtpZF9kZXZub190b19kZXZuYW1lQEJhc2UgMS4zMworIGJsa2lkX2ZpbmRfZGV2X3dpdGhfdGFnQEJhc2UgMS4zMworIGJsa2lkX2ZpbmRfdGFnX2RldkBCYXNlIDEuMzMKKyBibGtpZF9mbHVzaF9jYWNoZUBCYXNlIDEuMzMKKyBibGtpZF9mcmVlX2RldkBCYXNlIDEuMzMKKyBibGtpZF9mcmVlX3RhZ0BCYXNlIDEuMzMKKyBibGtpZF9nY19jYWNoZUBCYXNlIDEuNDAKKyBibGtpZF9nZXRfY2FjaGVAQmFzZSAxLjMzCisgYmxraWRfZ2V0X2RldkBCYXNlIDEuMzMKKyBibGtpZF9nZXRfZGV2X3NpemVAQmFzZSAxLjMzCisgYmxraWRfZ2V0X2Rldm5hbWVAQmFzZSAxLjMzCisgYmxraWRfZ2V0X2xpYnJhcnlfdmVyc2lvbkBCYXNlIDEuMzcKKyBibGtpZF9nZXRfdGFnX3ZhbHVlQEJhc2UgMS4zMworIGJsa2lkX2tub3duX2ZzdHlwZUBCYXNlIDEuMzQKKyBibGtpZF9sbHNlZWtAQmFzZSAxLjMzCisgYmxraWRfbmV3X2RldkBCYXNlIDEuMzMKKyBibGtpZF9wYXJzZV90YWdfc3RyaW5nQEJhc2UgMS4zMworIGJsa2lkX3BhcnNlX3ZlcnNpb25fc3RyaW5nQEJhc2UgMS4zNworIGJsa2lkX3Byb2JlX2FsbEBCYXNlIDEuMzMKKyBibGtpZF9wcm9iZV9hbGxfbmV3QEJhc2UgMS4zOAorIGJsa2lkX3B1dF9jYWNoZUBCYXNlIDEuMzMKKyBibGtpZF9yZWFkX2NhY2hlQEJhc2UgMS4zMworIGJsa2lkX3NldF90YWdAQmFzZSAxLjMzCisgYmxraWRfc3RyZHVwQEJhc2UgMS4zMworIGJsa2lkX3N0cm5kdXBAQmFzZSAxLjMzCisgYmxraWRfdGFnX2l0ZXJhdGVfYmVnaW5AQmFzZSAxLjMzCisgYmxraWRfdGFnX2l0ZXJhdGVfZW5kQEJhc2UgMS4zMworIGJsa2lkX3RhZ19uZXh0QEJhc2UgMS4zMworIGJsa2lkX3ZlcmlmeUBCYXNlIDEuMzcKKyNNSVNTSU5HOiAxLjQwLjcjIGNoZWNrX2Zvcl9tb2R1bGVzQEJhc2UgMS40MC42CisjTUlTU0lORzogMS40MC43IyBmc19wcm9jX2NoZWNrQEJhc2UgMS40MC42CmRpZmYgLS1naXQgYS9kZWJpYW4vbGliY29tZXJyMi5jb3B5cmlnaHQgYi9kZWJpYW4vbGliY29tZXJyMi5jb3B5cmlnaHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc4NjI4YQotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9saWJjb21lcnIyLmNvcHlyaWdodApAQCAtMCwwICsxLDI0IEBACitUaGlzIGlzIHRoZSBEZWJpYW4gR05VL0xpbnV4IHByZXBhY2thZ2VkIHZlcnNpb24gb2YgdGhlIENvbW1vbiBFcnJvcgorRGVzY3JpcHRpb24gbGlicmFyeS4gSXQgaXMgY3VycmVudGx5IGRpc3RyaWJ1dGVkIHRvZ2V0aGVyIHdpdGggdGhlIEVYVDIgZmlsZQorc3lzdGVtIHV0aWxpdGllcywgd2hpY2ggYXJlIG90aGVyd2lzZSBwYWNrYWdlZCBhcyAiZTJmc3Byb2dzIi4KKworVGhpcyBwYWNrYWdlIHdhcyBwdXQgdG9nZXRoZXIgYnkgWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiwKK2Zyb20gc291cmNlcyBvYnRhaW5lZCBmcm9tIGEgbWlycm9yIG9mOgorIHRzeC0xMS5taXQuZWR1Oi9wdWIvbGludXgvcGFja2FnZXMvZXh0MmZzLworCitGcm9tIHRoZSBvcmlnaW5hbCBkaXN0cmlidXRpb246CisKK0NvcHlyaWdodCAxOTg3LCAxOTg4IGJ5IHRoZSBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQKKwlvZiB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neQorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCithbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcworaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UKK2FwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZAordGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLAorYW5kIHRoYXQgdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUKK3VzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uCitvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0Cit0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcworcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KZGlmZiAtLWdpdCBhL2RlYmlhbi9saWJjb21lcnIyLmZpbGVzLmluIGIvZGViaWFuL2xpYmNvbWVycjIuZmlsZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZiMDM5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9saWJjb21lcnIyLmZpbGVzLmluCkBAIC0wLDAgKzEgQEAKK2xpYi8qL2xpYmNvbV9lcnIqLnNvLioKZGlmZiAtLWdpdCBhL2RlYmlhbi9saWJjb21lcnIyLnN5bWJvbHMgYi9kZWJpYW4vbGliY29tZXJyMi5zeW1ib2xzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlM2I3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vbGliY29tZXJyMi5zeW1ib2xzCkBAIC0wLDAgKzEsMjEgQEAKK2xpYmNvbV9lcnIuc28uMiBsaWJjb21lcnIyICNNSU5WRVIjCisgX2V0X2R5bmFtaWNfbGlzdEBCYXNlIDEuMzgKKyBfZXRfbGlzdEBCYXNlIDEuMDEKKyBhZGRfZXJyb3JfdGFibGVAQmFzZSAxLjM0CisgYWRkX3RvX2Vycm9yX3RhYmxlQEJhc2UgMS4zNAorIGNvbV9lcnJAQmFzZSAxLjAxCisgY29tX2Vycl9ob29rQEJhc2UgMS4wMQorIGNvbV9lcnJfdmFAQmFzZSAxLjAxCisgY29tX3JpZ2h0QEJhc2UgMS4zNAorIGNvbV9yaWdodF9yQEJhc2UgMS40MS4xMQorIGVycm9yX21lc3NhZ2VAQmFzZSAxLjAxCisgZXJyb3JfdGFibGVfbmFtZUBCYXNlIDEuMDEKKyBldF9saXN0X2xvY2tAQmFzZSAxLjQxLjIKKyBldF9saXN0X3VubG9ja0BCYXNlIDEuNDEuMgorIGZyZWVfZXJyb3JfdGFibGVAQmFzZSAxLjM0CisgaW5pdF9lcnJvcl90YWJsZUBCYXNlIDEuMDEKKyBpbml0aWFsaXplX2Vycm9yX3RhYmxlX3JAQmFzZSAxLjM0CisgcmVtb3ZlX2Vycm9yX3RhYmxlQEJhc2UgMS4zNAorIHJlc2V0X2NvbV9lcnJfaG9va0BCYXNlIDEuMDEKKyBzZXRfY29tX2Vycl9nZXR0ZXh0QEJhc2UgMS40MS45OQorIHNldF9jb21fZXJyX2hvb2tAQmFzZSAxLjAxCmRpZmYgLS1naXQgYS9kZWJpYW4vbGlic3MyLmNvcHlyaWdodCBiL2RlYmlhbi9saWJzczIuY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjYxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vbGlic3MyLmNvcHlyaWdodApAQCAtMCwwICsxLDI1IEBACitUaGlzIGlzIHRoZSBEZWJpYW4gR05VL0xpbnV4IHByZXBhY2thZ2VkIHZlcnNpb24gb2YgdGhlIHNzCitjb21tYW5kLWxpbmUgaW50ZXJmYWNlIHBhcnNpbmcgbGlicmFyeSBsaWJyYXJ5LiBJdCBpcyBjdXJyZW50bHkKK2Rpc3RyaWJ1dGVkIHRvZ2V0aGVyIHdpdGggdGhlIEVYVDIgZmlsZSBzeXN0ZW0gdXRpbGl0aWVzLCB3aGljaCBhcmUKK290aGVyd2lzZSBwYWNrYWdlZCBhcyAiZTJmc3Byb2dzIi4KKworVGhpcyBwYWNrYWdlIHdhcyBwdXQgdG9nZXRoZXIgYnkgWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiwKK2Zyb20gc291cmNlcyBvYnRhaW5lZCBmcm9tIGEgbWlycm9yIG9mOgorIHRzeC0xMS5taXQuZWR1Oi9wdWIvbGludXgvcGFja2FnZXMvZXh0MmZzLworCitGcm9tIHRoZSBvcmlnaW5hbCBkaXN0cmlidXRpb246CisKK0NvcHlyaWdodCAxOTg3LCAxOTg4IGJ5IHRoZSBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQKKwlvZiB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neQorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCithbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcworaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UKK2FwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZAordGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLAorYW5kIHRoYXQgdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUKK3VzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uCitvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0Cit0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcworcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KZGlmZiAtLWdpdCBhL2RlYmlhbi9saWJzczIuZmlsZXMuaW4gYi9kZWJpYW4vbGlic3MyLmZpbGVzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NmUxODUKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vbGlic3MyLmZpbGVzLmluCkBAIC0wLDAgKzEgQEAKK2xpYi8qL2xpYnNzKi5zby4qCmRpZmYgLS1naXQgYS9kZWJpYW4vbGlic3MyLnN5bWJvbHMgYi9kZWJpYW4vbGlic3MyLnN5bWJvbHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZmZTQwYgotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9saWJzczIuc3ltYm9scwpAQCAtMCwwICsxLDM1IEBACitsaWJzcy5zby4yIGxpYnNzMiAjTUlOVkVSIworIF9zc19wYWdlcl9uYW1lQEJhc2UgMS4wMQorIF9zc190YWJsZUBCYXNlIDEuMDEKKyBldF9zc19lcnJvcl90YWJsZUBCYXNlIDEuMzUKKyBpbml0aWFsaXplX3NzX2Vycm9yX3RhYmxlQEJhc2UgMS4wMQorIGluaXRpYWxpemVfc3NfZXJyb3JfdGFibGVfckBCYXNlIDEuMzQKKyBzc19hYm9ydF9zdWJzeXN0ZW1AQmFzZSAxLjAxCisgc3NfYWRkX2luZm9fZGlyQEJhc2UgMS4wMQorIHNzX2FkZF9yZXF1ZXN0X3RhYmxlQEJhc2UgMS4wMQorIHNzX2NyZWF0ZV9pbnZvY2F0aW9uQEJhc2UgMS4wMQorIHNzX2RlbGV0ZV9pbmZvX2RpckBCYXNlIDEuMDEKKyBzc19kZWxldGVfaW52b2NhdGlvbkBCYXNlIDEuMDEKKyBzc19kZWxldGVfcmVxdWVzdF90YWJsZUBCYXNlIDEuMDEKKyBzc19lcnJvckBCYXNlIDEuMDEKKyBzc19leGVjdXRlX2NvbW1hbmRAQmFzZSAxLjAxCisgc3NfZXhlY3V0ZV9saW5lQEJhc2UgMS4wMQorIHNzX2dldF9wcm9tcHRAQmFzZSAxLjAxCisgc3NfZ2V0X3JlYWRsaW5lQEJhc2UgMS4zNAorIHNzX2hlbHBAQmFzZSAxLjAxCisgc3NfbGlzdF9yZXF1ZXN0c0BCYXNlIDEuMDEKKyBzc19saXN0ZW5AQmFzZSAxLjAxCisgc3NfbmFtZUBCYXNlIDEuMDEKKyBzc19wYWdlX3N0ZGluQEJhc2UgMS4wMQorIHNzX3BhZ2VyX2NyZWF0ZUBCYXNlIDEuMDEKKyBzc19wYXJzZUBCYXNlIDEuMDEKKyBzc19wZXJyb3JAQmFzZSAxLjAxCisgc3NfcXVpdEBCYXNlIDEuMDEKKyBzc19ybF9jb21wbGV0aW9uQEJhc2UgMS4zNAorIHNzX3NhZmVfZ2V0ZW52QEJhc2UgMS4zOAorIHNzX3NlbGZfaWRlbnRpZnlAQmFzZSAxLjAxCisgc3Nfc2V0X3Byb21wdEBCYXNlIDEuMDEKKyBzc19zdGRfcmVxdWVzdHNAQmFzZSAxLjAxCisgc3Nfc3Vic3lzdGVtX25hbWVAQmFzZSAxLjAxCisgc3Nfc3Vic3lzdGVtX3ZlcnNpb25AQmFzZSAxLjAxCisgc3NfdW5pbXBsZW1lbnRlZEBCYXNlIDEuMDEKZGlmZiAtLWdpdCBhL2RlYmlhbi9saWJ1dWlkMS5jb3B5cmlnaHQgYi9kZWJpYW4vbGlidXVpZDEuY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNDY3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vbGlidXVpZDEuY29weXJpZ2h0CkBAIC0wLDAgKzEsMzggQEAKK1RoaXMgcGFja2FnZSB3YXMgYWRkZWQgdG8gdGhlIGUyZnNwcm9ncyBkZWJpYW4gc291cmNlIHBhY2thZ2UgYnkKK1RoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+IG9uIFNhdCBNYXIgMTUgMTU6MzM6MzcgRVNUIDIwMDMKKworSXQgaXMgcGFydCBvZiB0aGUgbWFpbiBlMmZzcHJvZ3MgZGlzdHJpYnV0aW9uLCB3aGljaCBjYW4gYmUgZm91bmQgYXQ6CisKKwlodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UyZnNwcm9ncworCitVcHN0cmVhbSBBdXRob3I6IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CisKK0NvcHlyaWdodDoKKworQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAzLCAyMDA0IGJ5IFRoZW9kb3JlIFRzJ28KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgICB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECitXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCitXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCitCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCitVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFLgpkaWZmIC0tZ2l0IGEvZGViaWFuL2xpYnV1aWQxLmZpbGVzLmluIGIvZGViaWFuL2xpYnV1aWQxLmZpbGVzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NjFmM2IKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vbGlidXVpZDEuZmlsZXMuaW4KQEAgLTAsMCArMSBAQAorbGliLyovbGlidXVpZCouc28uKgpkaWZmIC0tZ2l0IGEvZGViaWFuL2xpYnV1aWQxLnBvc3RpbnN0IGIvZGViaWFuL2xpYnV1aWQxLnBvc3RpbnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMzZmY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vbGlidXVpZDEucG9zdGluc3QKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisKK3NldCAtZQorCitBRERVU0VSQ09ORj0nL2V0Yy9hZGR1c2VyLmNvbmYnCisKK2lmIHRlc3QgLWYgJEFERFVTRVJDT05GOyB0aGVuCisgICAgRklSU1RfU1lTVEVNX1VJRD0kKHNlZCAtbiAicy9eW1s6c3BhY2U6XV0qRklSU1RfU1lTVEVNX1VJRFtbOnNwYWNlOl1dKj1bWzpzcGFjZTpdXSpbXCInXVw/XChbXlwiJ10qXClbXCInXVw/L1wxL3AiICRBRERVU0VSQ09ORikKKyAgICBMQVNUX1NZU1RFTV9VSUQ9JChzZWQgLW4gInMvXltbOnNwYWNlOl1dKkxBU1RfU1lTVEVNX1VJRFtbOnNwYWNlOl1dKj1bWzpzcGFjZTpdXSpbXCInXVw/XChbXlwiJ10qXClbXCInXVw/L1wxL3AiICRBRERVU0VSQ09ORikKKyAgICBGSVJTVF9TWVNURU1fR0lEPSQoc2VkIC1uICJzL15bWzpzcGFjZTpdXSpGSVJTVF9TWVNURU1fR0lEW1s6c3BhY2U6XV0qPVtbOnNwYWNlOl1dKltcIiddXD9cKFteXCInXSpcKVtcIiddXD8vXDEvcCIgJEFERFVTRVJDT05GKQorICAgIExBU1RfU1lTVEVNX0dJRD0kKHNlZCAtbiAicy9eW1s6c3BhY2U6XV0qTEFTVF9TWVNURU1fR0lEW1s6c3BhY2U6XV0qPVtbOnNwYWNlOl1dKltcIiddXD9cKFteXCInXSpcKVtcIiddXD8vXDEvcCIgJEFERFVTRVJDT05GKQorZmkKKworaWYgdGVzdCAteiAiJEZJUlNUX1NZU1RFTV9VSUQiOyB0aGVuCisgICAgRklSU1RfU1lTVEVNX1VJRD0xMDAKK2ZpCitpZiB0ZXN0IC16ICIkTEFTVF9TWVNURU1fVUlEIjsgdGhlbgorICAgIExBU1RfU1lTVEVNX1VJRD05OTkKK2ZpCitpZiB0ZXN0IC16ICIkRklSU1RfU1lTVEVNX0dJRCI7IHRoZW4KKyAgICBGSVJTVF9TWVNURU1fR0lEPTEwMAorZmkKK2lmIHRlc3QgLXogIiRMQVNUX1NZU1RFTV9HSUQiOyB0aGVuCisgICAgTEFTVF9TWVNURU1fR0lEPTk5OQorZmkKKworaWYgISBnZXRlbnQgZ3JvdXAgfCBncmVwIC1xIGxpYnV1aWQ7IHRoZW4KKyAgZ3JvdXBhZGQgLWYgLUsgR0lEX01JTj0kRklSU1RfU1lTVEVNX0dJRCAtSyBHSURfTUFYPSRMQVNUX1NZU1RFTV9HSUQgbGlidXVpZAorZmkKK2lmICEgZ2V0ZW50IHBhc3N3ZCB8IGdyZXAgLXEgbGlidXVpZDsgdGhlbgorICAgdXNlcmFkZCAtZCAvdmFyL2xpYi9saWJ1dWlkIC1LIFVJRF9NSU49JEZJUlNUX1NZU1RFTV9VSUQgLUsgVUlEX01BWD0kTEFTVF9TWVNURU1fVUlEIC1nIGxpYnV1aWQgbGlidXVpZAorZmkKKworbWtkaXIgLXAgL3Zhci9saWIvbGlidXVpZAorY2hvd24gbGlidXVpZDpsaWJ1dWlkIC92YXIvbGliL2xpYnV1aWQKK2NobW9kIDI3NzUgL3Zhci9saWIvbGlidXVpZAorCisjREVCSEVMUEVSIworCitleGl0IDAKZGlmZiAtLWdpdCBhL2RlYmlhbi9saWJ1dWlkMS5wb3N0cm0gYi9kZWJpYW4vbGlidXVpZDEucG9zdHJtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMjg2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vbGlidXVpZDEucG9zdHJtCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorc2V0IC1lCitpZiBbICIkMSIgPSBwdXJnZSBdCit0aGVuCisJcm0gLXJmIC92YXIvbGliL2xpYnV1aWQKK2ZpCisKKyNERUJIRUxQRVIjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvZGViaWFuL2xpYnV1aWQxLnN5bWJvbHMgYi9kZWJpYW4vbGlidXVpZDEuc3ltYm9scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTAwNDMxCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2xpYnV1aWQxLnN5bWJvbHMKQEAgLTAsMCArMSwxOSBAQAorbGlidXVpZC5zby4xIGxpYnV1aWQxICNNSU5WRVIjCisgdXVpZF9fZ2VuZXJhdGVfcmFuZG9tQEJhc2UgMS40MC40CisgdXVpZF9fZ2VuZXJhdGVfdGltZUBCYXNlIDEuNDAuNAorIHV1aWRfY2xlYXJAQmFzZSAxLjA1CisgdXVpZF9jb21wYXJlQEJhc2UgMS4wNQorIHV1aWRfY29weUBCYXNlIDEuMDUKKyB1dWlkX2dlbmVyYXRlQEJhc2UgMS4wNQorIHV1aWRfZ2VuZXJhdGVfcmFuZG9tQEJhc2UgMS4xNQorIHV1aWRfZ2VuZXJhdGVfdGltZUBCYXNlIDEuMTUKKyB1dWlkX2lzX251bGxAQmFzZSAxLjA1CisgdXVpZF9wYWNrQEJhc2UgMS4wNQorIHV1aWRfcGFyc2VAQmFzZSAxLjA1CisgdXVpZF90aW1lQEJhc2UgMS4xNQorIHV1aWRfdHlwZUBCYXNlIDEuMTUKKyB1dWlkX3VucGFja0BCYXNlIDEuMDUKKyB1dWlkX3VucGFyc2VAQmFzZSAxLjA1CisgdXVpZF91bnBhcnNlX2xvd2VyQEJhc2UgMS4zNgorIHV1aWRfdW5wYXJzZV91cHBlckBCYXNlIDEuMzYKKyB1dWlkX3ZhcmlhbnRAQmFzZSAxLjE1CmRpZmYgLS1naXQgYS9kZWJpYW4vcnVsZXMgYi9kZWJpYW4vcnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWU1NWU2OAotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9ydWxlcwpAQCAtMCwwICsxLDY5MiBAQAorIyEgL3Vzci9iaW4vbWFrZSAtZgorIyAtKi0gbWFrZWZpbGUgLSotCisjCisjIEludm9rZSBlYWNoIHRhcmdldCB3aXRoIGAuL2RlYmlhbi9ydWxlcyA8dGFyZ2V0PicuICBBbGwgdGFyZ2V0cyBzaG91bGQgYmUKKyMgaW52b2tlZCB3aXRoIHRoZSBwYWNrYWdlIHJvb3QgYXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorIworIyBUaGUgYGJpbmFyeScgdGFyZ2V0IG11c3QgYmUgcnVuIGFzIHJvb3QsIGFzIGl0IG5lZWRzIHRvIGluc3RhbGwgZmlsZXMgd2l0aAorIyBzcGVjaWZpYyBvd25lcnNoaXBzLgorCistaW5jbHVkZSBkZWJpYW4vcnVsZXMuY3VzdG9tCisKKyMgYmUgcGFyYW5vaWQKK2V4cG9ydCBMQ19BTEwgPz0gQworCisjIFRoZXNlIGFyZSB1c2VkIGZvciBjcm9zcy1jb21waWxpbmcgYW5kIGZvciBzYXZpbmcgdGhlIGNvbmZpZ3VyZSBzY3JpcHQKKyMgZnJvbSBoYXZpbmcgdG8gZ3Vlc3Mgb3VyIHBsYXRmb3JtIChzaW5jZSB3ZSBrbm93IGl0IGFscmVhZHkpCitERUJfSE9TVF9BUkNICQk/PSAkKHNoZWxsIGRwa2ctYXJjaGl0ZWN0dXJlIC1xREVCX0hPU1RfQVJDSCkKK0RFQl9CVUlMRF9BUkNICQk/PSAkKHNoZWxsIGRwa2ctYXJjaGl0ZWN0dXJlIC1xREVCX0JVSUxEX0FSQ0gpCitERUJfSE9TVF9PUwkJPz0gJChzaGVsbCBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX09TKQorREVCX0hPU1RfR05VX1RZUEUJPz0gJChzaGVsbCBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX0dOVV9UWVBFKQorREVCX0JVSUxEX0dOVV9UWVBFCT89ICQoc2hlbGwgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfQlVJTERfR05VX1RZUEUpCitERUJfSE9TVF9NVUxUSUFSQ0gJPz0gJChzaGVsbCBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX01VTFRJQVJDSCAyPi9kZXYvbnVsbCkKKworIyBBbGxvdyBkaXN0cm8tc3BlY2lmaWMgYmVoYXZpb3VyCitESVNUUk8gOj0kKHNoZWxsIHNlZCAtbmUgJy9ESVNUUklCX0lEL3MvLio9Ly9wJyAvZXRjL2xzYi1yZWxlYXNlIDI+L2Rldi9udWxsIHx8IGVjaG8gRGViaWFuKQorVVRJTF9MSU5VWF9ORyA/PSB5ZXMKKworIyBmaW5kIHRoZSB2ZXJzaW9uIGZvciB0aGUgbWFpbiBwYWNrYWdlLCBmcm9tIGNoYW5nZWxvZyBmaWxlCitNQUlOX1ZFUlNJT04gPSAkKHNoZWxsIGhlYWQgLW4gMSBkZWJpYW4vY2hhbmdlbG9nIHwgY3V0ICctZCAnIC1mIDIgfCBzZWQgJ3MvWygpXS8vZycpCisjIGZpbmQgdmVyc2lvbnMgZm9yIGxpYnJhcmllcyBnb2luZyBpbnRvIHRoZWlyIG93biBwYWNrYWdlcywgZnJvbSB0aGVpciBNYWtlZmlsZS5pbidzLAorIyBhbmQgc29uYW1lcyBmb3IgYWxsIGxpYnMKK0NPTUVSUl9WRVJTSU9OID89ICQoc2hlbGwgZ3JlcCBFTEZfVkVSU0lPTiBsaWIvZXQvTWFrZWZpbGUuaW4gfCBjdXQgJy1kICcgLWYzKQorQ09NRVJSX1NPVkVSU0lPTiA/PSAkKHNoZWxsIGdyZXAgRUxGX1NPX1ZFUlNJT04gbGliL2V0L01ha2VmaWxlLmluIHwgY3V0ICctZCAnIC1mMykKK1NTX1ZFUlNJT04gPz0gJChzaGVsbCBncmVwIEVMRl9WRVJTSU9OIGxpYi9zcy9NYWtlZmlsZS5pbiB8IGN1dCAnLWQgJyAtZjMpCitTU19TT1ZFUlNJT04gPz0gJChzaGVsbCBncmVwIEVMRl9TT19WRVJTSU9OIGxpYi9zcy9NYWtlZmlsZS5pbiB8IGN1dCAnLWQgJyAtZjMpCisKK2lmbmVxICgkKFVUSUxfTElOVVhfTkcpLHllcykKK1VVSURfVkVSU0lPTiA/PSAkKHNoZWxsIGdyZXAgRUxGX1ZFUlNJT04gbGliL3V1aWQvTWFrZWZpbGUuaW4gfCBjdXQgJy1kICcgLWYzKQorVVVJRF9TT1ZFUlNJT04gPz0gJChzaGVsbCBncmVwIEVMRl9TT19WRVJTSU9OIGxpYi91dWlkL01ha2VmaWxlLmluIHwgY3V0ICctZCAnIC1mMykKKworQkxLSURfVkVSU0lPTiA/PSAkKHNoZWxsIGdyZXAgRUxGX1ZFUlNJT04gbGliL2Jsa2lkL01ha2VmaWxlLmluIHwgY3V0ICctZCAnIC1mMykKK0JMS0lEX1NPVkVSU0lPTiA/PSAkKHNoZWxsIGdyZXAgRUxGX1NPX1ZFUlNJT04gbGliL2Jsa2lkL01ha2VmaWxlLmluIHwgY3V0ICctZCAnIC1mMykKK2VuZGlmCisKK0VYVDJGU19TT1ZFUlNJT04gPz0gJChzaGVsbCBncmVwIEVMRl9TT19WRVJTSU9OIGxpYi9leHQyZnMvTWFrZWZpbGUuaW4gfCBjdXQgJy1kICcgLWYzKQorRTJQX1NPVkVSU0lPTiA/PSAkKHNoZWxsIGdyZXAgRUxGX1NPX1ZFUlNJT04gbGliL2UycC9NYWtlZmlsZS5pbiB8IGN1dCAnLWQgJyAtZjMpCisKK3BhY2thZ2UJCT89IGUyZnNwcm9ncworCit0b3BkaXIJCT89ICQoc2hlbGwgcHdkKQorZGViZGlyCQk/PSAke3RvcGRpcn0vZGViaWFuCit0bXBkaXIJCT89ICR7ZGViZGlyfS90bXAKK3VkZWJkaXIJCT89ICR7ZGViZGlyfS9lMmZzcHJvZ3MtdWRlYgoraWZuZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorYmxraWR1ZGViZGlyCT89ICR7ZGViZGlyfS9saWJibGtpZDEtdWRlYgordXVpZHVkZWJkaXIJPz0gJHtkZWJkaXJ9L2xpYnV1aWQxLXVkZWIKK2VuZGlmCitsaWJjb21lcnJkaXIJPz0gJHtkZWJkaXJ9L2xpYmNvbWVyciR7Q09NRVJSX1NPVkVSU0lPTn0KK2NvbWVycmRldmRpcgk/PSAke2RlYmRpcn0vY29tZXJyLWRldgorbGliY29tZXJyZGJnZGlyCT89ICR7ZGViZGlyfS9saWJjb21lcnIyLWRiZworbGlic3NkaXIJPz0gJHtkZWJkaXJ9L2xpYnNzJHtTU19TT1ZFUlNJT059Citzc2RldmRpcgk/PSAke2RlYmRpcn0vc3MtZGV2CitsaWJzc2RiZ2Rpcgk/PSAke2RlYmRpcn0vbGlic3MyLWRiZworaWZuZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorbGliYmxraWRkaXIJPz0gJHtkZWJkaXJ9L2xpYmJsa2lkJHtCTEtJRF9TT1ZFUlNJT059CitsaWJibGtpZGRldmRpcgk/PSAke2RlYmRpcn0vbGliYmxraWQtZGV2CitsaWJibGtpZGRiZ2Rpcgk/PSAke2RlYmRpcn0vbGliYmxraWQxLWRiZworbGlidXVpZGRpcgk/PSAke2RlYmRpcn0vbGlidXVpZCR7VVVJRF9TT1ZFUlNJT059Cit1dWlkZGV2ZGlyCT89ICR7ZGViZGlyfS91dWlkLWRldgorbGlidXVpZGRiZ2Rpcgk/PSAke2RlYmRpcn0vbGlidXVpZDEtZGJnCit1dWlkcnVudGltZWRpcgk/PSAke2RlYmRpcn0vdXVpZC1ydW50aW1lCit1dWlkcnVudGltZWRiZ2RpciA/PSAke2RlYmRpcn0vdXVpZC1ydW50aW1lLWRiZworZW5kaWYKK2xpYmV4dDJkaXIJPz0gJHtkZWJkaXJ9L2UyZnNsaWJzCitsaWJleHQyZGV2ZGlyCT89ICR7ZGViZGlyfS9lMmZzbGlicy1kZXYKK2xpYmV4dDJkYmdkaXIJPz0gJHtkZWJkaXJ9L2UyZnNsaWJzLWRiZworbWFpbmRpcgkJPz0gJHtkZWJkaXJ9L2UyZnNwcm9ncworZTJmc2Nrc3RhdGljZGlyCT89ICR7ZGViZGlyfS9lMmZzY2stc3RhdGljCitkZWJ1Z2Rpcgk/PSAke2RlYmRpcn0vZTJmc3Byb2dzLWRiZworc3RkYnVpbGRkaXIJPz0gJHtkZWJkaXJ9L0JVSUxELVNURAorc3RhdGljYnVpbGRkaXIJPz0gJHtkZWJkaXJ9L0JVSUxELVNUQVRJQworbWlwc2J1aWxkZGlyCT89ICR7ZGViZGlyfS9CVUlMRC1NSVBTCittaXBzYnVpbGRkaXI2NAk/PSAke2RlYmRpcn0vQlVJTEQtTUlQUy02NAorIyBkb2NkaXIJPz0gJHttYWluZGlyfS91c3Ivc2hhcmUvZG9jLyR7cGFja2FnZX0KK01BTkRJUgkJPz0gL3Vzci9zaGFyZS9tYW4KK21hbmRpcgkJPz0gJHt0bXBkaXJ9JHtNQU5ESVJ9CisKK1VERUJfTkFNRSAJPz0gJChwYWNrYWdlKS11ZGViXyQoTUFJTl9WRVJTSU9OKV8kKERFQl9IT1NUX0FSQ0gpLnVkZWIKK1VERUJfUFJJT1JJVFkJPz0gJChzaGVsbCBncmVwICdeUGFja2FnZTogZTJmc3Byb2dzLXVkZWInIGRlYmlhbi9jb250cm9sLmluIC1BIDEwIHwgZ3JlcCBeUHJpb3JpdHk6IHwgY3V0IC1kICcgJyAtZiAyKQorCitpZm5lcSAoJChVVElMX0xJTlVYX05HKSx5ZXMpCitCTEtJRF9VREVCX05BTUUgPz0gbGliYmxraWQxLXVkZWJfJChNQUlOX1ZFUlNJT04pXyQoREVCX0hPU1RfQVJDSCkudWRlYgorQkxLSURfVURFQl9QUklPUklUWSA/PSAkKHNoZWxsIGdyZXAgJ15QYWNrYWdlOiBsaWJibGtpZDEtdWRlYicgZGViaWFuL2NvbnRyb2wuaW4gLUEgMTAgfCBncmVwIF5Qcmlvcml0eTogfCBjdXQgLWQgJyAnIC1mIDIpCisKK1VVSURfVURFQl9OQU1FID89IGxpYnV1aWQxLXVkZWJfJChNQUlOX1ZFUlNJT04pXyQoREVCX0hPU1RfQVJDSCkudWRlYgorVVVJRF9VREVCX1BSSU9SSVRZID89ICQoc2hlbGwgZ3JlcCAnXlBhY2thZ2U6IGxpYnV1aWQxLXVkZWInIGRlYmlhbi9jb250cm9sLmluIC1BIDEwIHwgZ3JlcCBeUHJpb3JpdHk6IHwgY3V0IC1kICcgJyAtZiAyKQorZW5kaWYKKworU1RBTVBTRElSCT89IGRlYmlhbi9zdGFtcGRpcgorQ0ZHU1REU1RBTVAJPz0gJHtTVEFNUFNESVJ9L2NvbmZpZ3VyZS1zdGQtc3RhbXAKK0NGR0JGU1RBTVAJPz0gJHtTVEFNUFNESVJ9L2NvbmZpZ3VyZS1iZi1zdGFtcAorQ0ZHU1RBVElDU1RBTVAJPz0gJHtTVEFNUFNESVJ9L2NvbmZpZ3VyZS1zdGF0aWMtc3RhbXAKK0JVSUxEU1REU1RBTVAJPz0gJHtTVEFNUFNESVJ9L2J1aWxkLXN0ZC1zdGFtcAorQlVJTERCRlNUQU1QCT89ICR7U1RBTVBTRElSfS9idWlsZC1iZi1zdGFtcAorQlVJTERTVEFUSUNTVEFNUCA/PSR7U1RBTVBTRElSfS9idWlsZC1zdGF0aWMtc3RhbXAKKworSU5TVEFMTCA/PSBpbnN0YWxsCitJTlNUQUxMX1BST0dSQU0gPz0gJChJTlNUQUxMKSAtcCAtbyByb290IC1nIHJvb3QgLW0gMDc1NQorCisjaWZlcSAoLCQoZmluZHN0cmluZyBub3N0cmlwLCQoREVCX0JVSUxEX09QVElPTlMpKSkKKyNJTlNUQUxMX1BST0dSQU0gKz0gLXMKKyNlbmRpZgorCitpZm5lcSAoLCQoZmluZHN0cmluZyB1cGRhdGUtc3ltYm9scywkKERFQl9CVUlMRF9PUFRJT05TKSkpCitTWU1CT0xfTElCUyA6PSBlMmZzbGlicyBsaWJjb21lcnIyIGxpYnNzMgoraWZuZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorU1lNQk9MX0xJQlMgKz0gbGliYmxraWQxIGxpYnV1aWQxCitlbmRpZgorZW5kaWYKKworREVGQVVMVF9DRkxBR1MgPz0gLWcgLU8yCitERUZBVUxUX0xERkxBR1MgPz0gLVdsLC1Cc3ltYm9saWMtZnVuY3Rpb25zCisKK0NGTEFHUyA/PSAkKHNoZWxsIGlmIGRwa2ctYnVpbGRmbGFncyA+IC9kZXYvbnVsbCAyPiYxIDsgdGhlbiBcCisJZHBrZy1idWlsZGZsYWdzIC0tZ2V0IENGTEFHUzsgZWxzZSBlY2hvICQoREVGQVVMVF9DRkxBR1MpIDsgZmkpCitMREZMQUdTID89ICQoc2hlbGwgaWYgZHBrZy1idWlsZGZsYWdzID4gL2Rldi9udWxsIDI+JjEgOyB0aGVuIFwKKwlkcGtnLWJ1aWxkZmxhZ3MgLS1nZXQgTERGTEFHUzsgZWxzZSBlY2hvICQoREVGQVVMVF9MREZMQUdTKSA7IGZpKQorQ1BQRkxBR1MgPz0gJChzaGVsbCBpZiBkcGtnLWJ1aWxkZmxhZ3MgPiAvZGV2L251bGwgMj4mMSA7IHRoZW4gXAorCWRwa2ctYnVpbGRmbGFncyAtLWdldCBDUFBGTEFHUzsgZmkpCisKK2lmZXEgKCR7REVCX0hPU1RfQVJDSH0sYWxwaGEpCitDRkxBR1MgKz0gLURIQVZFX05FVElORVRfSU5fSAorZWxzZQorQ0ZMQUdTICs9IC1EX19OT19TVFJJTkdfSU5MSU5FUworZW5kaWYKKworaWZuZXEgKCR7REVCX0hPU1RfQVJDSF9PU30sbGludXgpCitTS0lQX1NUQVRJQyA9IHllcworZW5kaWYKKworaWZlcSAoJChTS0lQX1NUQVRJQykseWVzKQorQlVJTERfU1RBVElDID0KK0UyRlNDS19TVEFUSUMgPSAke3N0ZGJ1aWxkZGlyfS9lMmZzY2svZTJmc2NrLnN0YXRpYworZWxzZQorQlVJTERfU1RBVElDID0gYnVpbGQtc3RhdGljCitFMkZTQ0tfU1RBVElDID0gJHtzdGF0aWNidWlsZGRpcn0vZTJmc2NrL2UyZnNjay5zdGF0aWMKK2VuZGlmCisKK2lmbmVxICgkKFNLSVBfVURFQiksKQorU0tJUF9CRiA/PSB5ZXMKK2VuZGlmCisKK2lmZXEgKCQoU0tJUF9CRikseWVzKQorQlVJTERfQkYgPQorYmZidWlsZGRpcgk/PSAke3N0ZGJ1aWxkZGlyfQorZWxzZQorQlVJTERfQkYgPSBidWlsZC1iZgorYmZidWlsZGRpcgk/PSAke2RlYmRpcn0vQlVJTEQtQkYKK2VuZGlmCisKK0JGX0NGTEFHUyA9IC1PcyAtZm9taXQtZnJhbWUtcG9pbnRlcgorCitpZmVxICgkKFVUSUxfTElOVVhfTkcpLHllcykKK1VUSUxfQ09ORl9GTEFHUyA/PSAtLWRpc2FibGUtZnNjayAtLWRpc2FibGUtbGliYmxraWQgXAorCQkJLS1kaXNhYmxlLWxpYnV1aWQgLS1kaXNhYmxlLXV1aWRkCitlbHNlCitVVElMX0NPTkZfRkxBR1MgPz0gLS1lbmFibGUtZnNjayAtLWVuYWJsZS1saWJibGtpZCBcCisJCQktLWVuYWJsZS1saWJ1dWlkIC0tZW5hYmxlLXV1aWRkCitlbmRpZgorCitpZm5lcSAoJChzdHJpcCAkKERFQl9IT1NUX01VTFRJQVJDSCkpLCkKK01VTFRJQVJDSF9DT05GID89IC0td2l0aC1tdWx0aWFyY2g9JChERUJfSE9TVF9NVUxUSUFSQ0gpCisjIFRoaXMgZG9lc24ndCB3b3JrIHlldCBiZWNhdXNlIGdkYiBhbmQgbGludGlhbiBkb24ndCBleHBlY3QgYW5kL29yCisjIGRvbid0IHdvcmsgd2l0aCAvdXNyL2xpYi88dHJpcGxldD4vZGVidWcKKyNVU1JMSUIgPSAvdXNyL2xpYi8kKERFQl9IT1NUX01VTFRJQVJDSCkKK1VTUkxJQiA/PSAvdXNyL2xpYgorZWxzZQorVVNSTElCID89IC91c3IvbGliCitlbmRpZgorCitCQUNLVFJBQ0VfQ09ORl9GTEFHUyA/PSAkKHNoZWxsIGlmICR7ZGViZGlyfS9zY3JpcHRzL3Rlc3QtYmFja3RyYWNlIDsgdGhlbiBlY2hvIC0tZGlzYWJsZS1iYWNrdHJhY2UgOyBmaSkKKworQ09NTU9OX0NPTkZfRkxBR1MgPSAtLWRpc2FibGUtZTJpbml0cmQtaGVscGVyIC0tZW5hYmxlLXF1b3RhIFwKKwktLWluZm9kaXI9L3Vzci9zaGFyZS9pbmZvICAtLWVuYWJsZS1zeW1saW5rLWluc3RhbGwgXAorCSQoTVVMVElBUkNIX0NPTkYpICQoQkFDS1RSQUNFX0NPTkZfRkxBR1MpICQoVVRJTF9DT05GX0ZMQUdTKQorCitTVERfQ09ORl9GTEFHUyA/PSAtLWVuYWJsZS1lbGYtc2hsaWJzCisKK0JGX0NPTkZfRkxBR1MgPz0gLS1lbmFibGUtZWxmLXNobGlicyAtLWRpc2FibGUtbmxzIC0tZGlzYWJsZS1pbWFnZXIgXAorCS0tZGlzYWJsZS10ZXN0aW8tZGVidWcgLS1kaXNhYmxlLXV1aWRkIC0tZGlzYWJsZS10bHMgLS1kaXNhYmxlLWRlYnVnZnMKKworU1RBVElDX0NPTkZfRkxBR1MgPz0gLS1kaXNhYmxlLW5scyAtLWRpc2FibGUtaW1hZ2VyIFwKKwktLWRpc2FibGUtdXVpZGQgLS1kaXNhYmxlLXRscworCitNSVBTX05PUElDX0NPTkZfRkxBR1MgPz0gLS1kaXNhYmxlLW5scyAtLWRpc2FibGUtaW1hZ2VyIFwKKwktLWRpc2FibGUtdXVpZGQgLS1kaXNhYmxlLXRscyBcCisgICAgICAgIC0tZGlzYWJsZS1yZXNpemVyICMgLS1kaXNhYmxlLWRlYnVnZnMKKworIyB3ZSBjYW4ndCB1c2UgdGhvc2UgZmxhZ3MgYXQgY29uZmlndXJlIHRpbWUKK01JUFNfQ0ZMQUdTID89IC1HIDAgLWZuby1waWMgLW1uby1hYmljYWxscworTUlQU19DRkxBR1NfNjQgPz0gLW1hYmk9NjQgLUcgMCAtZm5vLXBpYyAtbW5vLWFiaWNhbGxzCisKK2lmZXEgKCQoREVCX0JVSUxEX0FSQ0gpLCQoREVCX0hPU1RfQVJDSCkpCitpZm5lcSAoLCQoZmluZHN0cmluZyAkKERFQl9CVUlMRF9BUkNIKSxtaXBzIG1pcHNlbCkpCitpc21pcHM9aXNtaXBzCitlbmRpZgorZW5kaWYKKworTTRfQVJHUz0KK2lmZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorTTRfQVJHUys9LURVVElMX0xJTlVYX05HCitlbHNlCitNNF9BUkdTKz0tVVVUSUxfTElOVVhfTkcKK2VuZGlmCisKK2lmbmVxICgkKHN0cmlwICQoREVCX0hPU1RfTVVMVElBUkNIKSksKQorTTRfQVJHUys9LURET19NVUxUSUFSQ0gKK2Vsc2UKK000X0FSR1MrPS1VRE9fTVVMVElBUkNICitlbmRpZgorCitpZm5lcSAoJChTS0lQX0RJRVRMSUJDKSwpCitNNF9BUkdTKz0tVURJRVRMSUJDCitXSVRIX0RJRVRfTElCQyA9IAorZWxzZQorTTRfQVJHUys9LURESUVUTElCQworV0lUSF9ESUVUX0xJQkMgPSAtLXdpdGgtZGlldC1saWJjIC0tZW5hYmxlLWxpYnV1aWQgLS1lbmFibGUtbGliYmxraWQKK2VuZGlmCisKK2lmbmVxICgkKEJVSUxEX0UyRlNDS19TVEFUSUMpLG5vKQorTTRfQVJHUys9LURFMkZTQ0tfU1RBVElDCitlbHNlCitNNF9BUkdTKz0tVUUyRlNDS19TVEFUSUMKK2VuZGlmCisKK2lmZXEgKCQoU0tJUF9VREVCKSwpCitJTlNUQUxMX1VERUIgPSBpbnN0YWxsLXVkZWIKK000X0FSR1MrPS1EVURFQl9QS0dTCitlbHNlCitNNF9BUkdTKz0tVVVERUJfUEtHUworZW5kaWYKKworRklMRVNfRklYVVA9IGxpYmNvbWVycjIuZmlsZXMgY29tZXJyLWRldi5maWxlcyBsaWJzczIuZmlsZXMgc3MtZGV2LmZpbGVzIFwKKwlsaWJ1dWlkMS5maWxlcyB1dWlkLWRldi5maWxlcyBsaWJibGtpZDEuZmlsZXMgbGliYmxraWQtZGV2LmZpbGVzIFwKKwllMmZzbGlicy5maWxlcyBlMmZzbGlicy1kZXYuZmlsZXMKKworZGViaWFuLWZpbGVzOiBkZWJpYW4vY29udHJvbCBkZWJpYW4vZTJmc3Byb2dzLnNobGlicy5sb2NhbAoraWZlcSAoJChzdHJpcCAkKERFQl9IT1NUX01VTFRJQVJDSCkpLCkKKwlmb3IgaSBpbiAkKEZJTEVTX0ZJWFVQKTsgZG8gXAorCQlzZWQgLWUgJ3M7bGliL1wqLztsaWIvOycgZGViaWFuLyQkaS5pbiA+IGRlYmlhbi8kJGk7IFwKKwlkb25lCitlbHNlCisJZm9yIGkgaW4gJChGSUxFU19GSVhVUCk7IGRvIGNwIGRlYmlhbi8kJGkuaW4gZGViaWFuLyQkaTsgZG9uZQorZW5kaWYKKworbXJwcm9wZXI6IGNsZWFuCisJcm0gZGViaWFuL2NvbnRyb2wgZGViaWFuL2UyZnNwcm9ncy5zaGxpYnMubG9jYWwKKworZGViaWFuL2NvbnRyb2w6IGRlYmlhbi9jb250cm9sLmluIGRlYmlhbi9ydWxlcworCW00ICQoTTRfQVJHUykgPCBkZWJpYW4vY29udHJvbC5pbiB8IGdyZXAgLXYgXlJFTU9WRV9NRSQkID4gJEAKKworZGViaWFuL2UyZnNwcm9ncy5zaGxpYnMubG9jYWw6IGRlYmlhbi9lMmZzcHJvZ3Muc2hsaWJzLmxvY2FsLmluCisJbTQgJChNNF9BUkdTKSA8IGRlYmlhbi9lMmZzcHJvZ3Muc2hsaWJzLmxvY2FsLmluID4gJEAKKworJHtDRkdTVERTVEFNUH06CisJZGhfdGVzdGRpcgorCisJIyBNYWtlIHN1cmUgd2UgZG9uJ3QgdHJ5IHRvIHJlYnVpbGQgdGhlIGNvbmZpZ3VyZSBzY3JpcHRzCisJZmluZCAuIC1uYW1lIGNvbmZpZ3VyZSB8IHhhcmdzIHRvdWNoCisKKwlta2RpciAtcCAke3N0ZGJ1aWxkZGlyfQoraWZlcSAoJChERUJfQlVJTERfQVJDSCksJChERUJfSE9TVF9BUkNIKSkKKwljZCAke3N0ZGJ1aWxkZGlyfSAmJiBBV0s9L3Vzci9iaW4vYXdrIFwKKwkJJHt0b3BkaXJ9L2NvbmZpZ3VyZSAke0NPTU1PTl9DT05GX0ZMQUdTfSAke1NURF9DT05GX0ZMQUdTfSBcCisJCSR7RVhUUkFfQ09ORl9GTEFHU30gQ0ZMQUdTPSIke0NGTEFHU30iIENQUEZMQUdTPSIkKENQUEZMQUdTKSIgXAorCQlMREZMQUdTPSIkKExERkxBR1MpIgorZWxzZQorCWNkICR7c3RkYnVpbGRkaXJ9ICYmIEFXSz0vdXNyL2Jpbi9hd2sgQ0M9IiR7REVCX0hPU1RfR05VX1RZUEV9LWdjYyIgXAorCQkke3RvcGRpcn0vY29uZmlndXJlICR7Q09NTU9OX0NPTkZfRkxBR1N9ICR7U1REX0NPTkZfRkxBR1N9IFwKKwkJJHtFWFRSQV9DT05GX0ZMQUdTfSAtLWJ1aWxkPSQoREVCX0JVSUxEX0dOVV9UWVBFKSBcCisJCS0taG9zdD0kKERFQl9IT1NUX0dOVV9UWVBFKSBDRkxBR1M9IiR7Q0ZMQUdTfSIgXAorCQlDUFBGTEFHUz0iJChDUFBGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiCitlbmRpZgorCisgICMgc3BlY2lhbGx5LWJ1aWx0IE1JUFMgbGlicworaWZuZXEgKCQoaXNtaXBzKSwpCisJbWtkaXIgLXAgJHttaXBzYnVpbGRkaXJ9ICR7bWlwc2J1aWxkZGlyNjR9CisJY2QgJHttaXBzYnVpbGRkaXJ9ICYmIEFXSz0vdXNyL2Jpbi9hd2sgXAorCQkke3RvcGRpcn0vY29uZmlndXJlICR7Q09NTU9OX0NPTkZfRkxBR1N9IFwKKwkJJHtNSVBTX05PUElDX0NPTkZfRkxBR1N9IENGTEFHUz0iJHtDRkxBR1N9IiBcCisJCUNQUEZMQUdTPSIkKENQUEZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIKKwljZCAke21pcHNidWlsZGRpcjY0fSAmJiBBV0s9L3Vzci9iaW4vYXdrIFwKKwkJJHt0b3BkaXJ9L2NvbmZpZ3VyZSAke0NPTU1PTl9DT05GX0ZMQUdTfSBcCisJCSR7TUlQU19OT1BJQ19DT05GX0ZMQUdTfSBDRkxBR1M9IiR7Q0ZMQUdTfSIgXAorCQlDUFBGTEFHUz0iJChDUFBGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiCitlbmRpZgorCisJbWtkaXIgLXAgJHtTVEFNUFNESVJ9CisJdG91Y2ggJHtDRkdTVERTVEFNUH0KKworJHtDRkdCRlNUQU1QfToKKwlkaF90ZXN0ZGlyCisJcm0gLWYgY29uZmlnLmNhY2hlCisKKwlta2RpciAtcCAke2JmYnVpbGRkaXJ9CitpZmVxICgkKERFQl9CVUlMRF9BUkNIKSwkKERFQl9IT1NUX0FSQ0gpKQorCWNkICR7YmZidWlsZGRpcn0gJiYgQVdLPS91c3IvYmluL2F3ayBcCisJCSR7dG9wZGlyfS9jb25maWd1cmUgJHtDT01NT05fQ09ORl9GTEFHU30gJHtCRl9DT05GX0ZMQUdTfSBcCisJCSR7RVhUUkFfQ09ORl9GTEFHU30gQ0ZMQUdTPSIke0NGTEFHU30gJHtCRl9DRkxBR1N9IiBcCisJCUNQUEZMQUdTPSIkKENQUEZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIKK2Vsc2UKKwljZCAke2JmYnVpbGRkaXJ9ICYmIEFXSz0vdXNyL2Jpbi9hd2sgQ0M9IiR7REVCX0hPU1RfR05VX1RZUEV9LWdjYyIgXAorCQkke3RvcGRpcn0vY29uZmlndXJlICR7Q09NTU9OX0NPTkZfRkxBR1N9ICR7QkZfQ09ORl9GTEFHU30gXAorCQkke0VYVFJBX0NPTkZfRkxBR1N9IC0tYnVpbGQ9JChERUJfQlVJTERfR05VX1RZUEUpIFwKKwkJLS1ob3N0PSQoREVCX0hPU1RfR05VX1RZUEUpIENGTEFHUz0iJHtDRkxBR1N9IiBcCisJCUNQUEZMQUdTPSIkKENQUEZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIKK2VuZGlmCisJbWtkaXIgLXAgJHtTVEFNUFNESVJ9CisJdG91Y2ggJHtDRkdCRlNUQU1QfQorCiske0NGR1NUQVRJQ1NUQU1QfToKKwlkaF90ZXN0ZGlyCisJcm0gLWYgY29uZmlnLmNhY2hlCisKKwlta2RpciAtcCAke3N0YXRpY2J1aWxkZGlyfQoraWZlcSAoJChERUJfQlVJTERfQVJDSCksJChERUJfSE9TVF9BUkNIKSkKKwlpZiB0eXBlIGRpZXQgPiAvZGV2L251bGwgIDI+JjEgOyB0aGVuIFwKKwkJY2QgJHtzdGF0aWNidWlsZGRpcn0gJiYgQVdLPS91c3IvYmluL2F3ayBcCisJCSR7dG9wZGlyfS9jb25maWd1cmUgJHtDT01NT05fQ09ORl9GTEFHU30gJHtTVEFUSUNfQ09ORl9GTEFHU30gXAorCQkke0VYVFJBX0NPTkZfRkxBR1N9ICR7V0lUSF9ESUVUX0xJQkN9IENGTEFHUz0iJHtDRkxBR1N9IiBcCisJCUNQUEZMQUdTPSIkKENQUEZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSI7IFwKKwllbHNlIFwKKwkJY2QgJHtzdGF0aWNidWlsZGRpcn0gJiYgQVdLPS91c3IvYmluL2F3ayBcCisJCQkke3RvcGRpcn0vY29uZmlndXJlICR7Q09NTU9OX0NPTkZfRkxBR1N9IFwKKwkJCSR7U1RBVElDX0NPTkZfRkxBR1N9ICR7RVhUUkFfQ09ORl9GTEFHU30gXAorCQkJQ0ZMQUdTPSIke0NGTEFHU30iIENQUEZMQUdTPSIkKENQUEZMQUdTKSIgXAorCQkJTERGTEFHUz0iJChMREZMQUdTKSI7IFwKKwlmaQorZWxzZQorCWNkICR7c3RhdGljYnVpbGRkaXJ9ICYmIEFXSz0vdXNyL2Jpbi9hd2sgQ0M9IiR7REVCX0hPU1RfR05VX1RZUEV9LWdjYyIgXAorCQkke3RvcGRpcn0vY29uZmlndXJlICR7Q09NTU9OX0NPTkZfRkxBR1N9ICR7U1RBVElDX0NPTkZfRkxBR1N9IFwKKwkJJHtFWFRSQV9DT05GX0ZMQUdTfSAtLWJ1aWxkPSQoREVCX0JVSUxEX0dOVV9UWVBFKSBcCisJCS0taG9zdD0kKERFQl9IT1NUX0dOVV9UWVBFKSBDRkxBR1M9IiR7Q0ZMQUdTfSIgXAorCQlDUFBGTEFHUz0iJChDUFBGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiCitlbmRpZgorCW1rZGlyIC1wICR7U1RBTVBTRElSfQorCXRvdWNoICR7Q0ZHU1RBVElDU1RBTVB9CisKK2J1aWxkLWFyY2g6IGJ1aWxkCitidWlsZC1pbmRlcDogYnVpbGQKK2J1aWxkOiBidWlsZC1zdGQgJChCVUlMRF9CRikgJChCVUlMRF9TVEFUSUMpCisKK2J1aWxkLXN0ZDogJHtCVUlMRFNURFNUQU1QfQorJHtCVUlMRFNURFNUQU1QfTogJHtDRkdTVERTVEFNUH0KKwlkaF90ZXN0ZGlyCisJJChNQUtFKSAtQyAke3N0ZGJ1aWxkZGlyfSBWPTEgYWxsCitpZm5lcSAoJChCVUlMRF9FMkZTQ0tfU1RBVElDKSxubykKKwkkKE1BS0UpIC1DICR7c3RkYnVpbGRkaXJ9L2UyZnNjayBWPTEgZTJmc2NrLnN0YXRpYworZW5kaWYKKwkkKE1BS0UpIC1DICR7c3RkYnVpbGRkaXJ9L3BvIFY9MSB1cGRhdGUtZ21vCisKKwkoIGNkICR7c3RkYnVpbGRkaXJ9L2RvYyAmJiAkKE1BS0UpIFY9MSBsaWJleHQyZnMuaHRtbCApCisJKCBjZCAke3N0ZGJ1aWxkZGlyfS9saWIvZXQgJiYgJChNQUtFKSBWPTEgY29tX2Vyci5pbmZvIGNvbV9lcnIuaHRtbCApCisKKyAgIyBzcGVjaWFsbHktYnVpbHQgTUlQUyBsaWJzCitpZm5lcSAoJChpc21pcHMpLCkKKwkkKE1BS0UpIC1DICR7bWlwc2J1aWxkZGlyfS91dGlsIFY9MQorCSQoTUFLRSkgLUMgJHttaXBzYnVpbGRkaXJ9IFY9MSBcCisJCUNGTEFHUz0iJHtDRkxBR1N9ICR7TUlQU19DRkxBR1N9IiBcCisJCUxJQl9TVUJESVJTPSJsaWIvZXQgbGliL2V4dDJmcyIgbGlicworCSQoTUFLRSkgLUMgJHttaXBzYnVpbGRkaXI2NH0vdXRpbCBWPTEKKwkkKE1BS0UpIC1DICR7bWlwc2J1aWxkZGlyNjR9IFY9MSBcCisJCUNGTEFHUz0iJHtDRkxBR1N9ICR7TUlQU19DRkxBR1NfNjR9IiBcCisJCUxJQl9TVUJESVJTPSJsaWIvZXQgbGliL2V4dDJmcyIgbGlicworZW5kaWYKKworCXRvdWNoICR7QlVJTERTVERTVEFNUH0KKworYnVpbGQtYmY6ICR7QlVJTERCRlNUQU1QfQorJHtCVUlMREJGU1RBTVB9OiAke0NGR0JGU1RBTVB9CisJZGhfdGVzdGRpcgorCSQoTUFLRSkgLUMgJHtiZmJ1aWxkZGlyfSBWPTEgbGlicworCSQoTUFLRSkgLUMgJHtiZmJ1aWxkZGlyfS9lMmZzY2sgVj0xIGFsbAorCSQoTUFLRSkgLUMgJHtiZmJ1aWxkZGlyfS9taXNjIFY9MSBhbGwKKwkkKE1BS0UpIC1DICR7YmZidWlsZGRpcn0vcmVzaXplIFY9MSBhbGwKKwl0b3VjaCAke0JVSUxEQkZTVEFNUH0KKworYnVpbGQtc3RhdGljOiAke0JVSUxEU1RBVElDU1RBTVB9Ciske0JVSUxEU1RBVElDU1RBTVB9OiAke0NGR1NUQVRJQ1NUQU1QfQorCWRoX3Rlc3RkaXIKKwkkKE1BS0UpIC1DICR7c3RhdGljYnVpbGRkaXJ9IFY9MSBsaWJzCitpZm5lcSAoJChCVUlMRF9FMkZTQ0tfU1RBVElDKSxubykKKwkkKE1BS0UpIC1DICR7c3RhdGljYnVpbGRkaXJ9L2UyZnNjayBWPTEgYWxsIGUyZnNjay5zdGF0aWMKK2VuZGlmCisJdG91Y2ggJHtCVUlMRFNUQVRJQ1NUQU1QfQorCitjbGVhbjoKKwlkaF90ZXN0ZGlyCisJcm0gLXJmICR7U1RBTVBTRElSfQorCVsgISAtZiAke3N0ZGJ1aWxkZGlyfS9NYWtlZmlsZSBdIHx8ICQoTUFLRSkgLUMgJHtzdGRidWlsZGRpcn0gVj0xIGRpc3RjbGVhbgorCVsgISAtZiAke2JmYnVpbGRkaXJ9L01ha2VmaWxlIF0gfHwgJChNQUtFKSAtQyAke2JmYnVpbGRkaXJ9IFY9MSBkaXN0Y2xlYW4KKwlbICEgLWYgJHtzdGF0aWNidWlsZGRpcn0vTWFrZWZpbGUgXSB8fCAkKE1BS0UpIC1DICR7c3RhdGljYnVpbGRkaXJ9IFY9MSBkaXN0Y2xlYW4KKwlybSAtcmYgJHtzdGRidWlsZGRpcn0gJHtiZmJ1aWxkZGlyfSAke3N0YXRpY2J1aWxkZGlyfSAke21pcHNidWlsZGRpcn0gJHttaXBzYnVpbGRkaXI2NH0KKwlybSAtZiBkZWJpYW4vKi5zdWJzdHZhcnMKKwlkaF9jbGVhbgorCitpbnN0YWxsOiBjbGVhbnVwIGluc3RhbGwtc3RkCisKKyMgVGhpcyBydWxlIGFsbG93cyB0byBmYWN0b3JpemUgdGhlIGRoX2NsZWFuIGJldHdlZW4gdGhlIDIgaW5zdGFsbCBydWxlcworIyBUaGlzIG11c3QgYmUgbGF1bmNoZWQgYmVmb3JlIGluc3RhbGwtKiAoaWYgbGF1bmNoaW5nIHRoZW0gYnkgaGFuZCwgZm9yCisjIGV4ZW1wbGUpIG9yIHJlc3VsdHMgYXJlIHVucHJlZGljdGFibGUKK2NsZWFudXA6CisJZGhfdGVzdGRpcgorCWRoX3Rlc3Ryb290CisJZGhfcHJlcAorCitpbnN0YWxsLXN0ZDogREhfT1BUSU9OUz0KK2luc3RhbGwtc3RkOiBidWlsZAorCWRoX3Rlc3RkaXIKKwlkaF90ZXN0cm9vdAorCWRoX2luc3RhbGxkaXJzCisKKwlta2RpciAtcCAke3RtcGRpcn0vc2JpbgorCSQoTUFLRSkgLUMgJHtzdGRidWlsZGRpcn0gVj0xIGluc3RhbGwgREVTVERJUj0ke3RtcGRpcn0gXAorCQlJTlNUQUxMX1BST0dSQU09IiR7SU5TVEFMTF9QUk9HUkFNfSIgTERDT05GSUc9dHJ1ZQorICAjIHN0YXRpYyBsaWJzIGFuZCAuaCBmaWxlcworCSQoTUFLRSkgLUMgJHtzdGRidWlsZGRpcn0gVj0xIGluc3RhbGwtbGlicyBERVNURElSPSR7dG1wZGlyfSBMRENPTkZJRz10cnVlCisKK2lmbmVxICgkKEJVSUxEX0UyRlNDS19TVEFUSUMpLG5vKQorICAjIHN0YXRpY2FsbHktbGlua2VkIGZzY2sKKwkke0lOU1RBTExfUFJPR1JBTX0gJChFMkZTQ0tfU1RBVElDKSAke3RtcGRpcn0vc2JpbgorCWNwICR7bWFuZGlyfS9tYW44L2UyZnNjay44ICR7bWFuZGlyfS9tYW44L2UyZnNjay5zdGF0aWMuOAorZW5kaWYKKworaWZlcSAoJChERUJfQlVJTERfR05VX1NZU1RFTSksIGdudSkgCisJJHtJTlNUQUxMfSAtbSAwNjQ0IG1pc2MvbWtlMmZzLWh1cmQuY29uZiAke3RtcGRpcn0vZXRjL21rZTJmcy5jb25mCitlbmRpZgorCisJZGhfbW92ZWZpbGVzCisJdGVzdCAteiAiYGZpbmQgJHt0bXBkaXJ9IC10eXBlIGZgIgorCisgICMgc3BlY2lhbGx5LWJ1aWx0IE1JUFMgbGlicworaWZuZXEgKCQoaXNtaXBzKSwpCisJJChJTlNUQUxMKSAtcCAtbSAwNjQ0ICR7bWlwc2J1aWxkZGlyfS9saWIvbGliZXh0MmZzLmEgXAorCQkke2RlYmRpcn0vZTJmc2xpYnMtZGV2L3Vzci9saWIvbGliZXh0MmZzLW5vcGljLmEKKwkkKElOU1RBTEwpIC1wIC1tIDA2NDQgJHttaXBzYnVpbGRkaXI2NH0vbGliL2xpYmV4dDJmcy5hIFwKKwkJJHtkZWJkaXJ9L2UyZnNsaWJzLWRldi91c3IvbGliL2xpYjY0ZXh0MmZzLW5vcGljLmEKK2VuZGlmCisKK2luc3RhbGwtdWRlYjogREhfT1BUSU9OUz0KK2luc3RhbGwtdWRlYjogYnVpbGQKKwlkaF90ZXN0ZGlyCisJZGhfdGVzdHJvb3QKKworCSQoTUFLRSkgLUMgJHtiZmJ1aWxkZGlyfSBWPTEgaW5zdGFsbC1zaGxpYnMtbGlicy1yZWN1cnNpdmUgREVTVERJUj0ke3VkZWJkaXJ9IFwKKwkJSU5TVEFMTF9QUk9HUkFNPSIke0lOU1RBTExfUFJPR1JBTX0iIExEQ09ORklHPXRydWUKKwkkKE1BS0UpIC1DICR7YmZidWlsZGRpcn0vZTJmc2NrIFY9MSBpbnN0YWxsIERFU1RESVI9JHt1ZGViZGlyfSBcCisJCUlOU1RBTExfUFJPR1JBTT0iJHtJTlNUQUxMX1BST0dSQU19IiBMRENPTkZJRz10cnVlCisJJChNQUtFKSAtQyAke2JmYnVpbGRkaXJ9L21pc2MgVj0xIGluc3RhbGwgREVTVERJUj0ke3VkZWJkaXJ9IFwKKwkJSU5TVEFMTF9QUk9HUkFNPSIke0lOU1RBTExfUFJPR1JBTX0iIExEQ09ORklHPXRydWUKKwkkKE1BS0UpIC1DICR7YmZidWlsZGRpcn0vcmVzaXplIFY9MSBpbnN0YWxsIERFU1RESVI9JHt1ZGViZGlyfSBcCisJCUlOU1RBTExfUFJPR1JBTT0iJHtJTlNUQUxMX1BST0dSQU19IiBMRENPTkZJRz10cnVlCisKKwlybSAtcmYgJHt1ZGViZGlyfS91c3IKKwlmaW5kICR7dWRlYmRpcn0vc2JpbiAtdHlwZSBmIC1hICEgLW5hbWUgZTJmc2NrIFwKKwkJLWEgISAtbmFtZSBta2UyZnMgLWEgISAtbmFtZSB0dW5lMmZzIFwKKwkJLWEgISAtbmFtZSByZXNpemUyZnMgLWEgISAtbmFtZSBiYWRibG9ja3MgLXByaW50IHwgeGFyZ3Mgcm0KKworCShjZCAke3VkZWJkaXJ9L3NiaW47IGxuIC1zZiBlMmZzY2sgZnNjay5leHQyIDsgXAorCQlsbiAtc2YgZTJmc2NrIGZzY2suZXh0MyA7IGxuIC1zZiBlMmZzY2sgZnNjay5leHQ0IDsgXAorCQlsbiAtc2YgbWtlMmZzIG1rZnMuZXh0MiA7IGxuIC1zZiBta2UyZnMgbWtmcy5leHQzIDsgXAorCQlsbiAtc2YgbWtlMmZzIG1rZnMuZXh0NCkKKworaWZuZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorCW1rZGlyIC1wICR7YmxraWR1ZGViZGlyfS9saWIKKwltdiAke3VkZWJkaXJ9L2xpYi9saWJibGtpZC4qICR7YmxraWR1ZGViZGlyfS9saWIKKworCW1rZGlyIC1wICR7dXVpZHVkZWJkaXJ9L2xpYgorCW12ICR7dWRlYmRpcn0vbGliL2xpYnV1aWQuKiAke3V1aWR1ZGViZGlyfS9saWIKK2VuZGlmCisKK2JpbmFyeS1pbmRlcDogCisgICMgbm8gYXJjaC1pbmRlcGVuZGFudCBkZWJzLgorCitiaW5hcnktYXJjaDogREhfT1BUSU9OUz0gLWEKK2JpbmFyeS1hcmNoOiBpbnN0YWxsICQoSU5TVEFMTF9VREVCKQorCWRoX3Rlc3RkaXIKKwlkaF90ZXN0cm9vdAorCisgICMgbGludGlhbiBvdmVycmlkZXMKKwlmb3IgaSBpbiAkJChjZCBkZWJpYW4gJiYgZWNobyAqLmxpbnRpYW4tb3ZlcnJpZGVzKTsgZG8gXAorCQlwa2c9JCR7aSUubGludGlhbi1vdmVycmlkZXN9IDtcCisJCWlmIHRlc3QgIiQke3BrZ30iICE9IHNvdXJjZSA7IHRoZW4gXAorCQkJJChJTlNUQUxMKSAtbSAwNjQ0IC1EIC1wIGRlYmlhbi8kJGkgJHtkZWJkaXJ9LyQke3BrZ30vdXNyL3NoYXJlL2xpbnRpYW4vb3ZlcnJpZGVzLyQke3BrZ30gO1wKKwkJZmkgO1wKKwlkb25lCisKKyAgIyBzeW1saW5rcyB0byBwcmVwYXJlIGRoX2luc3RhbGxkb2NzIHJ1bgorCitpZm5lcSAoJChVVElMX0xJTlVYX05HKSx5ZXMpCisJbWtkaXIgLXAgJHtkZWJkaXJ9L2xpYmJsa2lkJHtCTEtJRF9TT1ZFUlNJT059L3Vzci9zaGFyZS9kb2MvbGliYmxraWQke0JMS0lEX1NPVkVSU0lPTn0KKwlta2RpciAtcCAke2RlYmRpcn0vbGliYmxraWQtZGV2L3Vzci9zaGFyZS9kb2MKKwlsbiAtc2YgbGliYmxraWQke0JMS0lEX1NPVkVSU0lPTn0gJHtkZWJkaXJ9L2xpYmJsa2lkLWRldi91c3Ivc2hhcmUvZG9jL2xpYmJsa2lkLWRldgorZW5kaWYKKworCW1rZGlyIC1wICR7ZGViZGlyfS9saWJzcyR7U1NfU09WRVJTSU9OfS91c3Ivc2hhcmUvZG9jL2xpYnNzJHtTU19TT1ZFUlNJT059CisJbWtkaXIgLXAgJHtkZWJkaXJ9L3NzLWRldi91c3Ivc2hhcmUvZG9jCisJbG4gLXNmIGxpYnNzJHtTU19TT1ZFUlNJT059ICR7ZGViZGlyfS9zcy1kZXYvdXNyL3NoYXJlL2RvYy9zcy1kZXYKKworCW1rZGlyIC1wICR7ZGViZGlyfS9saWJjb21lcnIke0NPTUVSUl9TT1ZFUlNJT059L3Vzci9zaGFyZS9kb2MvbGliY29tZXJyJHtDT01FUlJfU09WRVJTSU9OfQorCW1rZGlyIC1wICR7ZGViZGlyfS9jb21lcnItZGV2L3Vzci9zaGFyZS9kb2MKKwlsbiAtc2YgbGliY29tZXJyJHtDT01FUlJfU09WRVJTSU9OfSAke2RlYmRpcn0vY29tZXJyLWRldi91c3Ivc2hhcmUvZG9jL2NvbWVyci1kZXYKKworaWZuZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorCW1rZGlyIC1wICR7ZGViZGlyfS9saWJ1dWlkJHtVVUlEX1NPVkVSU0lPTn0vdXNyL3NoYXJlL2RvYy9saWJ1dWlkJHtVVUlEX1NPVkVSU0lPTn0KKwlta2RpciAtcCAke2RlYmRpcn0vdXVpZC1kZXYvdXNyL3NoYXJlL2RvYworIwlsbiAtc2YgbGlidXVpZCR7VVVJRF9TT1ZFUlNJT059ICR7ZGViZGlyfS91dWlkLWRldi91c3Ivc2hhcmUvZG9jL3V1aWQtZGV2CitlbmRpZgorCisJbWtkaXIgLXAgJHtkZWJkaXJ9L2UyZnNsaWJzL3Vzci9zaGFyZS9kb2MvZTJmc2xpYnMKKwlta2RpciAtcCAke2RlYmRpcn0vZTJmc2xpYnMtZGV2L3Vzci9zaGFyZS9kb2MKKwlsbiAtc2YgZTJmc2xpYnMgJHtkZWJkaXJ9L2UyZnNsaWJzLWRldi91c3Ivc2hhcmUvZG9jL2UyZnNsaWJzLWRldgorCitpZm5lcSAoJChVVElMX0xJTlVYX05HKSx5ZXMpCisJJChJTlNUQUxMKSAtcCAtbSAwNjQ0IGRlYmlhbi9saWJibGtpZC5jb3B5cmlnaHQgXAorCQkke2RlYmRpcn0vbGliYmxraWQke0JMS0lEX1NPVkVSU0lPTn0vdXNyL3NoYXJlL2RvYy9saWJibGtpZCR7QkxLSURfU09WRVJTSU9OfS9jb3B5cmlnaHQKK2VuZGlmCisKKwlkaF9pbnN0YWxsZG9jcyAtTmUyZnNwcm9ncy11ZGViIC1ObGliYmxraWQxLXVkZWIgLU5saWJ1dWlkMS11ZGViCisKKyAgIyBIVE1MIGRvY3MKKwkkKElOU1RBTEwpIC1kICR7ZGViZGlyfS9lMmZzbGlicy1kZXYvdXNyL3NoYXJlL2RvYy9lMmZzbGlicy9odG1sLWluZm8vCisJJChJTlNUQUxMKSAtcCAtbSAwNjQ0ICR7c3RkYnVpbGRkaXJ9L2RvYy8qLmh0bWwgXAorCSAgICR7ZGViZGlyfS9lMmZzbGlicy1kZXYvdXNyL3NoYXJlL2RvYy9lMmZzbGlicy9odG1sLWluZm8vCisJJChJTlNUQUxMKSAtZCAke2RlYmRpcn0vY29tZXJyLWRldi91c3Ivc2hhcmUvZG9jL2xpYmNvbWVyciR7Q09NRVJSX1NPVkVSU0lPTn0vaHRtbC1pbmZvLworCSQoSU5TVEFMTCkgLXAgLW0gMDY0NCAke3N0ZGJ1aWxkZGlyfS9saWIvZXQvKi5odG1sIFwKKwkgICAke2RlYmRpcn0vY29tZXJyLWRldi91c3Ivc2hhcmUvZG9jL2xpYmNvbWVyciR7Q09NRVJSX1NPVkVSU0lPTn0vaHRtbC1pbmZvLworCisgICMgdGV4aW5mbyBkb2NzCisJbWtkaXIgLXAgJHtkZWJkaXJ9L2NvbWVyci1kZXYvdXNyL3NoYXJlL2RvYy9saWJjb21lcnIke0NPTUVSUl9TT1ZFUlNJT059CisJJChJTlNUQUxMKSAtcCAtbSAwNjQ0ICR7dG9wZGlyfS9kb2MvbGliZXh0MmZzLnRleGluZm8gXAorCSAgICR7ZGViZGlyfS9lMmZzbGlicy1kZXYvdXNyL3NoYXJlL2RvYy9lMmZzbGlicy9saWJleHQyZnMudGV4aQorCSQoSU5TVEFMTCkgLXAgLW0gMDY0NCAke3RvcGRpcn0vbGliL2V0L2NvbV9lcnIudGV4aW5mbyBcCisJICAgJHtkZWJkaXJ9L2NvbWVyci1kZXYvdXNyL3NoYXJlL2RvYy9saWJjb21lcnIke0NPTUVSUl9TT1ZFUlNJT059L2NvbV9lcnIudGV4aQorCisJJChJTlNUQUxMKSAtZCAke2RlYmRpcn0vY29tZXJyLWRldi91c3Ivc2hhcmUvZG9jL2xpYmNvbWVyciR7Q09NRVJSX1NPVkVSU0lPTn0vZXhhbXBsZXMKKwkkKElOU1RBTEwpIC1wIC1tIDA2NDQgbGliL3NzL3NzX2Vyci5ldCBcCisJCSR7c3RkYnVpbGRkaXJ9L2xpYi9leHQyZnMvZXh0Ml9lcnIuZXQgXAorCQkke2RlYmRpcn0vY29tZXJyLWRldi91c3Ivc2hhcmUvZG9jL2xpYmNvbWVyciR7Q09NRVJSX1NPVkVSU0lPTn0vZXhhbXBsZXMKKwkkKElOU1RBTEwpIC1kICR7ZGViZGlyfS9zcy1kZXYvdXNyL3NoYXJlL2RvYy9saWJzcyR7U1NfU09WRVJTSU9OfS9leGFtcGxlcworCSQoSU5TVEFMTCkgLXAgLW0gMDY0NCBkZWJ1Z2ZzL2RlYnVnX2NtZHMuY3QgXAorCQkke2RlYmRpcn0vc3MtZGV2L3Vzci9zaGFyZS9kb2MvbGlic3Mke1NTX1NPVkVSU0lPTn0vZXhhbXBsZXMKKworCWRoX2luc3RhbGxpbmZvIC1wY29tZXJyLWRldiAke3N0ZGJ1aWxkZGlyfS9saWIvZXQvY29tX2Vyci5pbmZvCisJZGhfaW5zdGFsbGluZm8gLXBlMmZzbGlicy1kZXYgJHtzdGRidWlsZGRpcn0vZG9jL2xpYmV4dDJmcy5pbmZvCisKKwlESF9PUFRJT05TPSBkaF9pbnN0YWxsY2hhbmdlbG9ncyAtcGUyZnNwcm9ncyBcCisJCS1wbGliY29tZXJyJHtDT01FUlJfU09WRVJTSU9OfSBcCisJCS1wbGlic3Mke1NTX1NPVkVSU0lPTn0gXAorCQktcGUyZnNsaWJzIFwKKwkJLXBlMmZzcHJvZ3MtZGJnIC1wZTJmc2xpYnMtZGJnIFwKKwkJLXBsaWJjb21lcnIyLWRiZyAtcGxpYnNzMi1kYmcKK2lmbmVxICgkKEJVSUxEX0UyRlNDS19TVEFUSUMpLG5vKQorCURIX09QVElPTlM9IGRoX2luc3RhbGxjaGFuZ2Vsb2dzIC1wZTJmc2NrLXN0YXRpYworZW5kaWYKK2lmbmVxICgkKFVUSUxfTElOVVhfTkcpLHllcykKKwlESF9PUFRJT05TPSBkaF9pbnN0YWxsY2hhbmdlbG9ncyAtcGxpYnV1aWQke1VVSURfU09WRVJTSU9OfSBcCisJCS1wdXVpZC1kZXYgLXB1dWlkLXJ1bnRpbWUgLXB1dWlkLXJ1bnRpbWUtZGJnIC1wbGlidXVpZDEtZGJnIFwKKwkJLXBsaWJibGtpZCR7QkxLSURfU09WRVJTSU9OfSAtcGxpYmJsa2lkMS1kYmcKK2VuZGlmCisKKwlkaF9maXhwZXJtcworCWRoX3N0cmlwIC1wZTJmc3Byb2dzIC0tZGJnLXBhY2thZ2U9ZTJmc3Byb2dzLWRiZworaWZuZXEgKCQoQlVJTERfRTJGU0NLX1NUQVRJQyksbm8pCisJZGhfc3RyaXAgLXBlMmZzY2stc3RhdGljIC0tZGJnLXBhY2thZ2U9ZTJmc3Byb2dzLWRiZworZW5kaWYKK2lmbmVxICgkKGlzbWlwcyksKQorCWRoX3N0cmlwIC1wZTJmc2xpYnMgLS1kYmctcGFja2FnZT1lMmZzbGlicy1kYmcgLVhsaWI2NGV4dDJmcy1ub3BpYy5hCitlbHNlCisJZGhfc3RyaXAgLXBlMmZzbGlicyAtLWRiZy1wYWNrYWdlPWUyZnNsaWJzLWRiZworZW5kaWYKKwlkaF9zdHJpcCAtcGxpYnNzJHtTU19TT1ZFUlNJT059IC0tZGJnLXBhY2thZ2U9bGlic3Mke1NTX1NPVkVSU0lPTn0tZGJnCisJZGhfc3RyaXAgLXBsaWJjb21lcnIke0NPTUVSUl9TT1ZFUlNJT059IFwKKwkJLS1kYmctcGFja2FnZT1saWJjb21lcnIke0NPTUVSUl9TT1ZFUlNJT059LWRiZworaWZuZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorCWRoX3N0cmlwIC1wbGliYmxraWQke0JMS0lEX1NPVkVSU0lPTn0gXAorCQktLWRiZy1wYWNrYWdlPWxpYmJsa2lkJHtCTEtJRF9TT1ZFUlNJT059LWRiZworCWRoX3N0cmlwIC1wbGlidXVpZCR7VVVJRF9TT1ZFUlNJT059IC0tZGJnLXBhY2thZ2U9bGlidXVpZCR7VVVJRF9TT1ZFUlNJT059LWRiZworZW5kaWYKKwlkaF9zdHJpcAorCisJIyBkcGtnIHN5bWJvbCBoYW5kbGluZworCWZvciBpIGluICQoU1lNQk9MX0xJQlMpOyBcCisJZG8gXAorCQllY2hvICJHZW5lcmF0aW5nIHN5bWJvbHMgZm9yICQkaS4uLiI7IFwKKwkJZHBrZy1nZW5zeW1ib2xzIC1wJCRpIC1QZGViaWFuLyQkaSA+IGRlYmlhbi8kJGkudG1wLXBhdGNoOyBcCisJCWNhdCBkZWJpYW4vJCRpLnRtcC1wYXRjaDsgXAorCQlwYXRjaCBkZWJpYW4vJCRpLnN5bWJvbHMgPCBkZWJpYW4vJCRpLnRtcC1wYXRjaDsgXAorCQkvYmluL3JtIGRlYmlhbi8kJGkudG1wLXBhdGNoOyBcCisJZG9uZQorCisJZm9yIGkgaW4gZTJmc3Byb2dzIGUyZnNwcm9ncy1kYmcgZTJmc2xpYnMgZTJmc2xpYnMtZGJnOyBkbyBcCisJICAgJChJTlNUQUxMKSAtcCAtbSAwNjQ0IGRlYmlhbi9jb3B5cmlnaHQgXAorCQkke2RlYmRpcn0vJCRpL3Vzci9zaGFyZS9kb2MvJCRpL2NvcHlyaWdodDsgXAorCWRvbmUKKworaWZuZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorCSQoSU5TVEFMTCkgLXAgLW0gMDY0NCBkZWJpYW4vdXVpZC1ydW50aW1lLmNvcHlyaWdodCBcCisJCSR7dXVpZHJ1bnRpbWVkYmdkaXJ9L3Vzci9zaGFyZS9kb2MvdXVpZC1ydW50aW1lLWRiZy9jb3B5cmlnaHQKK2VuZGlmCisKKwkkKElOU1RBTEwpIC1wIC1tIDA2NDQgZGViaWFuL2xpYmNvbWVycjIuY29weXJpZ2h0IFwKKwkJJHtsaWJjb21lcnJkYmdkaXJ9L3Vzci9zaGFyZS9kb2MvbGliY29tZXJyMi1kYmcvY29weXJpZ2h0CisKKwkkKElOU1RBTEwpIC1wIC1tIDA2NDQgZGViaWFuL2xpYnNzMi5jb3B5cmlnaHQgXAorCQkke2xpYnNzZGJnZGlyfS91c3Ivc2hhcmUvZG9jL2xpYnNzMi1kYmcvY29weXJpZ2h0CisKK2lmbmVxICgkKFVUSUxfTElOVVhfTkcpLHllcykKKwkkKElOU1RBTEwpIC1wIC1tIDA2NDQgZGViaWFuL2xpYmJsa2lkLmNvcHlyaWdodCBcCisJCSR7bGliYmxraWRkYmdkaXJ9L3Vzci9zaGFyZS9kb2MvbGliYmxraWQxLWRiZy9jb3B5cmlnaHQKKworCSQoSU5TVEFMTCkgLXAgLW0gMDY0NCBkZWJpYW4vbGlidXVpZDEuY29weXJpZ2h0IFwKKwkJJHtsaWJ1dWlkZGJnZGlyfS91c3Ivc2hhcmUvZG9jL2xpYnV1aWQxLWRiZy9jb3B5cmlnaHQKK2VuZGlmCisKKwlkaF9jb21wcmVzcworCisJZGhfbWFrZXNobGlicyAtTmUyZnNwcm9ncy11ZGViIC1ObGliYmxraWQxLXVkZWIgLU5saWJ1dWlkMS11ZGViCitpZmVxICgkKFNLSVBfVURFQiksKQorCWRoX21ha2VzaGxpYnMgLS1hZGQtdWRlYj1lMmZzcHJvZ3MtdWRlYiAtcGxpYmNvbWVyciR7Q09NRVJSX1NPVkVSU0lPTn0gXAorCQktViAnbGliY29tZXJyMiAoPj0gMS4zMy0zKScKK2lmbmVxICgkKFVUSUxfTElOVVhfTkcpLHllcykKKwlkaF9tYWtlc2hsaWJzIC1wbGliYmxraWQke0JMS0lEX1NPVkVSU0lPTn0gLVYgJ2xpYmJsa2lkMSAoPj0gMS4zOS0xKScKKwllY2hvICJ1ZGViOiBsaWJibGtpZCAxIGxpYmJsa2lkMS11ZGViIiA+PiBcCisJCWRlYmlhbi9saWJibGtpZDEvREVCSUFOL3NobGlicworCWVjaG8gInVkZWI6IGxpYnV1aWQgMSBsaWJ1dWlkMS11ZGViIiA+PiBkZWJpYW4vbGlidXVpZDEvREVCSUFOL3NobGlicworZW5kaWYKK2VuZGlmCisKKwlkaF9pbnN0YWxsZGViCisJZGhfc2hsaWJkZXBzIC1sJHtzdGRidWlsZGRpcn0vbGliCisJZGhfc2hsaWJkZXBzIC1wZTJmc3Byb2dzIC1sJHtzdGRidWlsZGRpcn0vbGliIFwKKwkJLXUiLUxkZWJpYW4vZTJmc3Byb2dzLnNobGlicy5sb2NhbCIKK2lmZXEgKCQoU0tJUF9VREVCKSwpCisJZGhfc2hsaWJkZXBzIC1wZTJmc3Byb2dzLXVkZWIgLWwke3N0ZGJ1aWxkZGlyfS9saWIgXAorCQktdSItTGRlYmlhbi9lMmZzcHJvZ3MtdWRlYi5zaGxpYnMubG9jYWwiCitlbmRpZgorCisJZGhfZ2VuY29udHJvbCAtTmNvbWVyci1kZXYgLU5zcy1kZXYgLU51dWlkLWRldiBcCisJCS1OZTJmc3Byb2dzLXVkZWIgLU5saWJibGtpZDEtdWRlYiAtTmxpYnV1aWQxLXVkZWIKKwlESF9PUFRJT05TPSBkaF9nZW5jb250cm9sIC1wY29tZXJyLWRldiBcCisJICAtdSAnLXYke0NPTUVSUl9WRVJTSU9OfS0ke01BSU5fVkVSU0lPTn0gLVZtYWluQmluYXJ5PSR7TUFJTl9WRVJTSU9OfScKKwlESF9PUFRJT05TPSBkaF9nZW5jb250cm9sIC1wc3MtZGV2IFwKKwkgIC11ICctdiR7U1NfVkVSU0lPTn0tJHtNQUlOX1ZFUlNJT059IC1WbWFpbkJpbmFyeT0ke01BSU5fVkVSU0lPTn0nCitpZm5lcSAoJChVVElMX0xJTlVYX05HKSx5ZXMpCisJREhfT1BUSU9OUz0gZGhfZ2VuY29udHJvbCAtcHV1aWQtZGV2IFwKKwkgIC11ICctdiR7VVVJRF9WRVJTSU9OfS0ke01BSU5fVkVSU0lPTn0gLVZtYWluQmluYXJ5PSR7TUFJTl9WRVJTSU9OfScKK2VuZGlmCitpZmVxICgkKFNLSVBfVURFQiksKQorCWRoX2dlbmNvbnRyb2wJLXBlMmZzcHJvZ3MtdWRlYiAtLSAtZmRlYmlhbi9maWxlc34KK2lmbmVxICgkKFVUSUxfTElOVVhfTkcpLHllcykKKwlkaF9nZW5jb250cm9sCS1wbGliYmxraWQxLXVkZWIgLS0gLWZkZWJpYW4vZmlsZXN+CisJZGhfZ2VuY29udHJvbAktcGxpYnV1aWQxLXVkZWIgLS0gLWZkZWJpYW4vZmlsZXN+CitlbmRpZgorZW5kaWYKKworaWZlcSAoJChTS0lQX1VERUIpLCkKKwlkcGtnLWRpc3RhZGRmaWxlICQoVURFQl9OQU1FKSBkZWJpYW4taW5zdGFsbGVyICQoVURFQl9QUklPUklUWSkKK2lmbmVxICgkKFVUSUxfTElOVVhfTkcpLHllcykKKwlkcGtnLWRpc3RhZGRmaWxlICQoQkxLSURfVURFQl9OQU1FKSBkZWJpYW4taW5zdGFsbGVyICQoQkxLSURfVURFQl9QUklPUklUWSkKKwlkcGtnLWRpc3RhZGRmaWxlICQoVVVJRF9VREVCX05BTUUpIGRlYmlhbi1pbnN0YWxsZXIgJChVVUlEX1VERUJfUFJJT1JJVFkpCitlbmRpZgorZW5kaWYKKwlkaF9tZDVzdW1zIC1OZTJmc3Byb2dzLXVkZWIgLU5saWJibGtpZDEtdWRlYiAtTmxpYnV1aWQxLXVkZWIKKwlkaF9idWlsZGRlYiAtTmUyZnNwcm9ncy11ZGViIC1ObGliYmxraWQxLXVkZWIgLU5saWJ1dWlkMS11ZGViCitpZmVxICgkKFNLSVBfVURFQiksKQorCWRoX2J1aWxkZGViIC1wZTJmc3Byb2dzLXVkZWIgLS1maWxlbmFtZT0kKFVERUJfTkFNRSkKK2lmbmVxICgkKFVUSUxfTElOVVhfTkcpLHllcykKKwlkaF9idWlsZGRlYiAtcGxpYmJsa2lkMS11ZGViIC0tZmlsZW5hbWU9JChCTEtJRF9VREVCX05BTUUpCisJZGhfYnVpbGRkZWIgLXBsaWJ1dWlkMS11ZGViIC0tZmlsZW5hbWU9JChVVUlEX1VERUJfTkFNRSkKK2VuZGlmCitlbmRpZgorCitiaW5hcnk6IGJpbmFyeS1pbmRlcCBiaW5hcnktYXJjaAorCisuUEhPTlk6IGJpbmFyeSBiaW5hcnktYXJjaCBiaW5hcnktaW5kZXAgY2xlYW4gY2hlY2tyb290IG1ycHJvcGVyIFwKKwlkZWJ1Z19mbGFncyBkZWJpYW4tZmlsZXMKKworZGVidWdfZmxhZ3M6CisJQGVjaG8gQ0ZMQUdTIGlzICQoQ0ZMQUdTKQorCUBlY2hvIExERkxBR1MgaXMgJChMREZMQUdTKQorCUBlY2hvIENQUEZMQUdTIGlzICQoQ1BQRkxBR1MpCmRpZmYgLS1naXQgYS9kZWJpYW4vc2NyaXB0cy90ZXN0LWJhY2t0cmFjZSBiL2RlYmlhbi9zY3JpcHRzL3Rlc3QtYmFja3RyYWNlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ5MDQ4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vc2NyaXB0cy90ZXN0LWJhY2t0cmFjZQpAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKyMKKyMgVGVzdCB0byBzZWUgaWYgYmFja3RyYWNlIHJlcXVpcmVzIGEgbGlicmFyeSBpbiAvdXNyL2xpYgorIyBSZXR1cm5zIHRydWUgaWYgdGhlIGJhY2t0cmFjZSBjb21tYW5kIHdvcmtzIGFuZCByZXF1aXJlcyBhIGxpYnJhcnkgaW4gL3Vzci9saWIKKyMgVGhpcyBpcyBhIG5hc3R5IHdvcmthcm91bmQgZm9yIERlYmlhbiBidWcgIzcwODMwNywgd2hpY2ggaXMgcmVhbGx5IGEgZ2xpYmMgYnVnCisjCisKK2NhdCA+IC90bXAvYmFja3RyYWNlJCQuYyA8PCBFT0YKKworI2luY2x1ZGUgPGV4ZWNpbmZvLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICAgICB2b2lkICpzdGFja19zeW1zWzMyXTsKKyAgICAgICBpbnQgZnJhbWVzOworCisgICAgICAgZnJhbWVzID0gYmFja3RyYWNlKHN0YWNrX3N5bXMsIDMyKTsKKyAgICAgICBiYWNrdHJhY2Vfc3ltYm9sc19mZChzdGFja19zeW1zLCBmcmFtZXMsIDApOworfQorRU9GCisKK2lmICEgY2MgLW8gL3RtcC9iYWNrdHJhY2UkJCAvdG1wL2JhY2t0cmFjZSQkLmM7IHRoZW4KKyAgIGV4aXQgMQorZmkKKworaWYgISBsZGQgL3RtcC9iYWNrdHJhY2UkJCA+IC90bXAvYmFja3RyYWNlJCQubGRkIDI+JjEgOyB0aGVuCisgICBleGl0IDEKK2ZpCisKK2dyZXAgLXEgL3Vzci9saWIgL3RtcC9iYWNrdHJhY2UkJC5sZGQKK3JldD0kPworCisvYmluL3JtIC1mIC90bXAvYmFja3RyYWNlJCQqCitleGl0ICRyZXQKZGlmZiAtLWdpdCBhL2RlYmlhbi9zaGxpYnMubG9jYWwgYi9kZWJpYW4vc2hsaWJzLmxvY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NzhkZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vc2hsaWJzLmxvY2FsCkBAIC0wLDAgKzEsNiBAQAorbGliZXh0MmZzCTIKK2xpYmUycAkJMgorbGlidXVpZAkJMQorbGliY29tX2VycgkyCitsaWJzcwkJMgorbGliYmxraWQJMQpkaWZmIC0tZ2l0IGEvZGViaWFuL3NvdXJjZS5saW50aWFuLW92ZXJyaWRlcyBiL2RlYmlhbi9zb3VyY2UubGludGlhbi1vdmVycmlkZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1OTdkZgotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9zb3VyY2UubGludGlhbi1vdmVycmlkZXMKQEAgLTAsMCArMSw0IEBACitlMmZzcHJvZ3Mgc291cmNlOiB3ZWFrLWxpYnJhcnktZGV2LWRlcGVuZGVuY3kgc3MtZGV2IG9uIGxpYnNzMiAoPSAke21haW5CaW5hcnl9KQorZTJmc3Byb2dzIHNvdXJjZTogd2Vhay1saWJyYXJ5LWRldi1kZXBlbmRlbmN5IGNvbWVyci1kZXYgb24gbGliY29tZXJyMiAoPSAke21haW5CaW5hcnl9KQorZTJmc3Byb2dzIHNvdXJjZTogd2Vhay1saWJyYXJ5LWRldi1kZXBlbmRlbmN5IHV1aWQtZGV2IG9uIGxpYnV1aWQxICg9ICR7bWFpbkJpbmFyeX0pCitlMmZzcHJvZ3Mgc291cmNlOiBzb3VyY2UtaXMtbWlzc2luZyBtaXNjL3V0aWwubwpkaWZmIC0tZ2l0IGEvZGViaWFuL3NvdXJjZS9mb3JtYXQgYi9kZWJpYW4vc291cmNlL2Zvcm1hdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjNhYWY4Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL3NvdXJjZS9mb3JtYXQKQEAgLTAsMCArMSBAQAorMy4wIChxdWlsdCkKZGlmZiAtLWdpdCBhL2RlYmlhbi9zcy1kZXYuZXhhbXBsZXMgYi9kZWJpYW4vc3MtZGV2LmV4YW1wbGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3OTMwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vc3MtZGV2LmV4YW1wbGVzCkBAIC0wLDAgKzEgQEAKK2RlYnVnZnMvZGVidWdfY21kcy5jdApkaWZmIC0tZ2l0IGEvZGViaWFuL3NzLWRldi5maWxlcy5pbiBiL2RlYmlhbi9zcy1kZXYuZmlsZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBjNzg4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9zcy1kZXYuZmlsZXMuaW4KQEAgLTAsMCArMSw3IEBACit1c3IvbGliLyovbGlic3Muc28KK3Vzci9saWIvKi9saWJzcy5hCit1c3IvaW5jbHVkZS9zcy8qCit1c3IvYmluL21rX2NtZHMKK3Vzci9zaGFyZS9zcy8qCit1c3Ivc2hhcmUvbWFuL21hbjEvbWtfY21kcyoKK3Vzci9saWIvKi9wa2djb25maWcvc3MucGMKZGlmZiAtLWdpdCBhL2RlYmlhbi91dWlkLWRldi5SRUFETUUuRGViaWFuIGIvZGViaWFuL3V1aWQtZGV2LlJFQURNRS5EZWJpYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4Y2M4OQotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi91dWlkLWRldi5SRUFETUUuRGViaWFuCkBAIC0wLDAgKzEsMjMgQEAKKworSW4gb3JkZXIgdG8gc2FudGl6ZSBlMmZzcHJvZ3MgdG8gYmUgREZTRyBmcmVlLCB0aGUgZmlsZQorZHJhZnQtbGVhY2gtdXVpZHMtZ3VpZHMtMDEudHh0IGhhcyBiZWVuIHJlbW92ZWQuICBJdCBjYW4gYmUgb2J0YWluZWQKK2J5IGRvd25sb2FkaW5nIGUyZnNwcm9ncyBmcm9tIHRoZSB1cHN0cmVhbSBzb3VyY2VzLiAgSXQgbWF5IGFsc28gYmUKK2F2YWlsYWJsZSBmcm9tIG90aGVyIHNpdGVzIG9uIHRoZSBuZXR3b3JrLCBpZiB5b3UgZG8gYSBxdWljayB3ZWIKK3NlYXJjaCBmb3IgdGhlIHN0cmluZyAiZHJhZnQtbGVhY2gtdXVpZHMtZ3VpZHMtMDEiLgorCitOb3RlIHRoYXQgZGViaWFuL3J1bGVzIGlzIHNldCB1cCB0byBpbmNsdWRlIHRoZSBmaWxlIG9uIFVidW50dQorc3lzdGVtcywgc28gZm9yIHBlb3BsZSB0cnlpbmcgdG8gYnVpbGQgZTJmc3Byb2dzIG9uIFVidW50dSBzeXN0ZW1zLAordGhleSBzaG91bGQgc3RhcnQgZnJvbSB0aGUgdXBzdHJlYW0gc291cmNlcywgYW5kIG5vdCB0aGUKK0RlYmlhbi1leHB1cmdhdGVkIHNvdXJjZXMgZm91bmQgaW4gdGhlIERlYmlhbiByZXBvc2l0b3J5LiAgKG4uYi4sIGZvcgorV0lQIHJlbGVhc2VzIHRoZSBjb21tYW5kICIuL3V0aWwvZ2VuLXRhcmJhbGwgdWJ1bnR1IiB3aWxsIGhlbHAgY3JlYXRlCit0YXIgZmlsZSB3aGljaCBpcyBhcHByb3ByaWF0ZWx5IG5hbWVkIHRvIG1ha2UgbGlmZSBlYXNpZXIgZm9yCitkcGtnLWJ1aWxkcGFja2FnZS4pICBTaW5jZSBVYnVudHUgZG9lc24ndCBoYXZlIHRoZSBERlNHIHJlc3RyaWN0aW9ucywKK3RoZSBkb2N1bWVudGF0aW9uIHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQgZm9yIERlYmlhbidzIERGU0cgbGljZW5zZQorcHVyaXR5IHNob3VsZG4ndCBiZSBkZW5pZWQgdG8gVWJ1bnR1IHVzZXJzLgorCisJCQkJCVRoZW9kb3JlIFRzJ28KKwkJCQkJT2NvdG9iZXIgMywgMjAwNgorCisKKworCmRpZmYgLS1naXQgYS9kZWJpYW4vdXVpZC1kZXYuY29weXJpZ2h0IGIvZGViaWFuL3V1aWQtZGV2LmNvcHlyaWdodApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzQ2NzM5Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL3V1aWQtZGV2LmNvcHlyaWdodApAQCAtMCwwICsxLDM4IEBACitUaGlzIHBhY2thZ2Ugd2FzIGFkZGVkIHRvIHRoZSBlMmZzcHJvZ3MgZGViaWFuIHNvdXJjZSBwYWNrYWdlIGJ5CitUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PiBvbiBTYXQgTWFyIDE1IDE1OjMzOjM3IEVTVCAyMDAzCisKK0l0IGlzIHBhcnQgb2YgdGhlIG1haW4gZTJmc3Byb2dzIGRpc3RyaWJ1dGlvbiwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0OgorCisJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lMmZzcHJvZ3MKKworVXBzdHJlYW0gQXV0aG9yOiBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorCitDb3B5cmlnaHQ6CisKK0NvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCBieSBUaGVvZG9yZSBUcydvCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKK09GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KZGlmZiAtLWdpdCBhL2RlYmlhbi91dWlkLWRldi5maWxlcy5pbiBiL2RlYmlhbi91dWlkLWRldi5maWxlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzRiOTJjCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL3V1aWQtZGV2LmZpbGVzLmluCkBAIC0wLDAgKzEsNSBAQAordXNyL2xpYi8qL2xpYnV1aWQuc28KK3Vzci9saWIvKi9saWJ1dWlkLmEKK3Vzci9pbmNsdWRlL3V1aWQvKgordXNyL3NoYXJlL21hbi9tYW4zL3V1aWQqCit1c3IvbGliLyovcGtnY29uZmlnL3V1aWQucGMKZGlmZiAtLWdpdCBhL2RlYmlhbi91dWlkLXJ1bnRpbWUuY29weXJpZ2h0IGIvZGViaWFuL3V1aWQtcnVudGltZS5jb3B5cmlnaHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjZDRjNQotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi91dWlkLXJ1bnRpbWUuY29weXJpZ2h0CkBAIC0wLDAgKzEsMzkgQEAKK1RoaXMgcGFja2FnZSB3YXMgYWRkZWQgdG8gdGhlIGUyZnNwcm9ncyBkZWJpYW4gc291cmNlIHBhY2thZ2UgYnkKK1RoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+IG9uIEZyaSBEZWMgMTQgMjI6MjQ6MzUgRVNUIDIwMDcKKworSXQgaXMgcGFydCBvZiB0aGUgbWFpbiBlMmZzcHJvZ3MgZGlzdHJpYnV0aW9uLCB3aGljaCBjYW4gYmUgZm91bmQgYXQ6CisKKwlodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UyZnNwcm9ncworCitVcHN0cmVhbSBBdXRob3I6IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CisKK0NvcHlyaWdodDoKKworQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IGJ5CitUaGVvZG9yZSBUcydvCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKK09GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KZGlmZiAtLWdpdCBhL2RlYmlhbi91dWlkLXJ1bnRpbWUuZmlsZXMgYi9kZWJpYW4vdXVpZC1ydW50aW1lLmZpbGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmOGQ4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vdXVpZC1ydW50aW1lLmZpbGVzCkBAIC0wLDAgKzEsNCBAQAordXNyL2Jpbi91dWlkZ2VuCit1c3Ivc2Jpbi91dWlkZAordXNyL3NoYXJlL21hbi9tYW44L3V1aWRkLioKK3Vzci9zaGFyZS9tYW4vbWFuMS91dWlkZ2VuLioKZGlmZiAtLWdpdCBhL2RlYmlhbi91dWlkLXJ1bnRpbWUubGludGlhbi1vdmVycmlkZXMgYi9kZWJpYW4vdXVpZC1ydW50aW1lLmxpbnRpYW4tb3ZlcnJpZGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NDJkMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vdXVpZC1ydW50aW1lLmxpbnRpYW4tb3ZlcnJpZGVzCkBAIC0wLDAgKzEgQEAKK3V1aWQtcnVudGltZTogY29tbWFuZC13aXRoLXBhdGgtaW4tbWFpbnRhaW5lci1zY3JpcHQgcHJlcm06NSAvdXNyL3NiaW4vdXVpZGQKZGlmZiAtLWdpdCBhL2RlYmlhbi91dWlkLXJ1bnRpbWUucG9zdGluc3QgYi9kZWJpYW4vdXVpZC1ydW50aW1lLnBvc3RpbnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMWFkYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vdXVpZC1ydW50aW1lLnBvc3RpbnN0CkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWUKK2lmICEgZ2V0ZW50IGdyb3VwIHwgZ3JlcCAtcSBsaWJ1dWlkOyB0aGVuCitncm91cGFkZCAtZiAtSyBHSURfTUlOPTEgLUsgR0lEX01BWD05OTkgbGlidXVpZAorZmkKK2lmICEgZ2V0ZW50IHBhc3N3ZCB8IGdyZXAgLXEgbGlidXVpZDsgdGhlbgorICAgdXNlcmFkZCAtZCAvdmFyL2xpYi9saWJ1dWlkIC1LIFVJRF9NSU49MSAtSyBVSURfTUFYPTQ5OSAtZyBsaWJ1dWlkIGxpYnV1aWQKK2ZpCitjaG93biBsaWJ1dWlkOmxpYnV1aWQgL3Vzci9zYmluL3V1aWRkCitjaG1vZCA2NzU1IC91c3Ivc2Jpbi91dWlkZAorCisjREVCSEVMUEVSIworCitleGl0IDAKZGlmZiAtLWdpdCBhL2RlYmlhbi91dWlkLXJ1bnRpbWUucG9zdHJtIGIvZGViaWFuL3V1aWQtcnVudGltZS5wb3N0cm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3NzAwMQotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi91dWlkLXJ1bnRpbWUucG9zdHJtCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorc2V0IC1lCitpZiBbICIkMSIgPSBwdXJnZSBdCit0aGVuCisJcm0gLXJmIC92YXIvcnVuL3V1aWRkCitmaQorCisjREVCSEVMUEVSIworCitleGl0IDAKZGlmZiAtLWdpdCBhL2RlYmlhbi91dWlkLXJ1bnRpbWUucHJlcm0gYi9kZWJpYW4vdXVpZC1ydW50aW1lLnByZXJtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNGUxNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vdXVpZC1ydW50aW1lLnByZXJtCkBAIC0wLDAgKzEsMTAgQEAKKyMhIC9iaW4vc2gKK3NldCAtZQoraWYgWyAteCAvdXNyL3NiaW4vdXVpZGQgXQordGhlbgorCS91c3Ivc2Jpbi91dWlkZCAtayB8fCB0cnVlCitmaQorCisjREVCSEVMUEVSIworCitleGl0IDAKZGlmZiAtLWdpdCBhL2RlYmlhbi91dWlkLXJ1bnRpbWUuc2hsaWJzLmxvY2FsIGIvZGViaWFuL3V1aWQtcnVudGltZS5zaGxpYnMubG9jYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5NzY3NAotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi91dWlkLXJ1bnRpbWUuc2hsaWJzLmxvY2FsCkBAIC0wLDAgKzEgQEAKK2xpYnV1aWQgMSBsaWJ1dWlkMSAoPiAxLjQwLjMtMSkKZGlmZiAtLWdpdCBhL2RlYmlhbi93YXRjaCBiL2RlYmlhbi93YXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmY2MWQzCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL3dhdGNoCkBAIC0wLDAgKzEsNCBAQAordmVyc2lvbj0zCitodHRwOi8vc2YubmV0L2UyZnNwcm9ncy9lMmZzcHJvZ3MtKFswLTldLispXC50YXJcLmd6CisjZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvdHl0c28vZTJmc3Byb2dzL2UyZnNwcm9ncy0oWzAtOV0uKylcLnRhclwuZ3oKKwpkaWZmIC0tZ2l0IGEvZGVidWdmcy9NYWtlZmlsZS5pbiBiL2RlYnVnZnMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RkMDZmMAotLS0gL2Rldi9udWxsCisrKyBiL2RlYnVnZnMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyODcgQEAKKyMKKyMgU3RhbmRhcmQgZTJmc3Byb2dzIHByb2xvZ3VlLi4uLgorIworCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLi4KK215X2RpciA9IGRlYnVnZnMKK0lOU1RBTEwgPSBASU5TVEFMTEAKKworQE1DT05GSUdACisKK1BST0dTPQkJZGVidWdmcworTUFOUEFHRVM9CWRlYnVnZnMuOAorCitNS19DTURTPQlfU1NfRElSX09WRVJSSURFPS4uL2xpYi9zcyAuLi9saWIvc3MvbWtfY21kcworCitERUJVR19PQkpTPSBkZWJ1Z19jbWRzLm8gZGVidWdmcy5vIHV0aWwubyBuY2hlY2subyBpY2hlY2subyBscy5vIFwKKwlsc2RlbC5vIGR1bXAubyBzZXRfZmllbGRzLm8gbG9nZHVtcC5vIGh0cmVlLm8gdW51c2VkLm8gZTJmcmVlZnJhZy5vIFwKKwlmaWxlZnJhZy5vIGV4dGVudF9jbWRzLm8gZXh0ZW50X2lub2RlLm8gemFwLm8gcXVvdGEubworCitST19ERUJVR19PQkpTPSByb19kZWJ1Z19jbWRzLm8gcm9fZGVidWdmcy5vIHV0aWwubyBuY2hlY2subyBpY2hlY2subyBscy5vIFwKKwlsc2RlbC5vIGxvZ2R1bXAubyBodHJlZS5vIGUyZnJlZWZyYWcubyBmaWxlZnJhZy5vIGV4dGVudF9jbWRzLm8gXAorCWV4dGVudF9pbm9kZS5vIHF1b3RhLm8KKworU1JDUz0gZGVidWdfY21kcy5jICQoc3JjZGlyKS9kZWJ1Z2ZzLmMgJChzcmNkaXIpL3V0aWwuYyAkKHNyY2RpcikvbHMuYyBcCisJJChzcmNkaXIpL25jaGVjay5jICQoc3JjZGlyKS9pY2hlY2suYyAkKHNyY2RpcikvbHNkZWwuYyBcCisJJChzcmNkaXIpL2R1bXAuYyAkKHNyY2Rpcikvc2V0X2ZpZWxkcy5jICR7c3JjZGlyfS9sb2dkdW1wLmMgXAorCSQoc3JjZGlyKS9odHJlZS5jICQoc3JjZGlyKS91bnVzZWQuYyAke3NyY2Rpcn0vLi4vbWlzYy9lMmZyZWVmcmFnLmMgXAorCSQoc3JjZGlyKS9maWxlZnJhZy5jICQoc3JjZGlyKS9leHRlbnRfaW5vZGUuYyAkKHNyY2RpcikvemFwLmMgXAorCSQoc3JjZGlyKS9xdW90YS5jCisKK0xJQlM9ICQoTElCUVVPVEEpICQoTElCRVhUMkZTKSAkKExJQkUyUCkgJChMSUJTUykgJChMSUJDT01fRVJSKSAkKExJQkJMS0lEKSBcCisJJChMSUJVVUlEKSAkKFNZU0xJQlMpCitERVBMSUJTPSAkKERFUExJQlFVT1RBKSAkKExJQkVYVDJGUykgJChMSUJFMlApICQoREVQTElCU1MpICQoREVQTElCQ09NX0VSUikgXAorCSQoREVQTElCQkxLSUQpICQoREVQTElCVVVJRCkKKworU1RBVElDX0xJQlM9ICQoU1RBVElDX0xJQlFVT1RBKSAkKFNUQVRJQ19MSUJFWFQyRlMpICQoU1RBVElDX0xJQlNTKSBcCisJJChTVEFUSUNfTElCQ09NX0VSUikgJChTVEFUSUNfTElCQkxLSUQpICQoU1RBVElDX0xJQlVVSUQpIFwKKwkkKFNUQVRJQ19MSUJFMlApICQoU1lTTElCUykKK1NUQVRJQ19ERVBMSUJTPSAkKFNUQVRJQ19MSUJFWFQyRlMpICQoREVQU1RBVElDX0xJQlNTKSBcCisJCSQoREVQU1RBVElDX0xJQkNPTV9FUlIpICQoREVQU1RBVElDX0xJQlVVSUQpIFwKKwkJJChERVBTVEFUSUNfTElCRTJQKQorCisuYy5vOgorCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpIC1jICQoQUxMX0NGTEFHUykgJDwgLW8gJEAKKwkkKFEpICQoQ0hFQ0tfQ01EKSAkKEFMTF9DRkxBR1MpICQ8CisKK2FsbDo6ICQoUFJPR1MpICQoTUFOUEFHRVMpCisKK2RlYnVnZnM6ICQoREVCVUdfT0JKUykgJChERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIGRlYnVnZnMgJChERUJVR19PQkpTKSAkKExJQlMpCisKK2RlYnVnZnMuc3RhdGljOiAkKERFQlVHX09CSlMpICQoU1RBVElDX0RFUExJQlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChMREZMQUdTX1NUQVRJQykgLW8gZGVidWdmcy5zdGF0aWMgJChERUJVR19PQkpTKSBcCisJCSQoU1RBVElDX0xJQlMpICQoUkVBRExJTkVfTElCKQorCityZGVidWdmczogJChST19ERUJVR19PQkpTKSAkKERFUExJQlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gcmRlYnVnZnMgJChST19ERUJVR19PQkpTKSAkKExJQlMpCisKK2RlYnVnX2NtZHMuYyBkZWJ1Z19jbWRzLmg6IGRlYnVnX2NtZHMuY3QKKwkkKEUpICIJTUtfQ01EUyAkQCIKKwkkKFEpICQoTUtfQ01EUykgJChzcmNkaXIpL2RlYnVnX2NtZHMuY3QKKworZXh0ZW50X2NtZHMuYyBleHRlbnRfY21kcy5oOiBleHRlbnRfY21kcy5jdAorCSQoRSkgIglNS19DTURTICRAIgorCSQoUSkgJChNS19DTURTKSAkKHNyY2RpcikvZXh0ZW50X2NtZHMuY3QKKworcm9fZGVidWdfY21kcy5jIHJvX2RlYnVnX2NtZHMuaDogcm9fZGVidWdfY21kcy5jdAorCSQoRSkgIglNS19DTURTICRAIgorCSQoUSkgJChNS19DTURTKSAkKHNyY2Rpcikvcm9fZGVidWdfY21kcy5jdAorCityb19kZWJ1Z2ZzLm86IGRlYnVnZnMuYworCSQoRSkgIglDQyAkQCIKKwkkKFEpICQoQ0MpIC1jICQoQUxMX0NGTEFHUykgJDwgLURSRUFEX09OTFkgLW8gJEAKKworZTJmcmVlZnJhZy5vOiAkKHNyY2RpcikvLi4vbWlzYy9lMmZyZWVmcmFnLmMKKwkkKEUpICIJQ0MgJEAiCisJJChRKSAkKENDKSAtYyAkKEFMTF9DRkxBR1MpIC1JJChzcmNkaXIpICQ8IC1EREVCVUdGUyAtbyAkQAorCitkZWJ1Z2ZzLjg6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9kZWJ1Z2ZzLjguaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvZGVidWdmcy44LmluIGRlYnVnZnMuOAorCitpbnN0YWxsZGlyczoKKwkkKEUpICIJTUtJTlNUQUxMRElSUyAkKHJvb3Rfc2JpbmRpcikgJChtYW44ZGlyKSIKKwkkKFEpICQoTUtJTlNUQUxMRElSUykgJChERVNURElSKSQocm9vdF9zYmluZGlyKSBcCisJCSQoREVTVERJUikkKG1hbjhkaXIpCisKK2luc3RhbGw6ICQoUFJPR1MpICQoTUFOUEFHRVMpIGluc3RhbGxkaXJzCisJJChRKSBmb3IgaSBpbiAkKFBST0dTKTsgZG8gXAorCQllY2hvICIJSU5TVEFMTCAkKHJvb3Rfc2JpbmRpcikvJCRpIjsgXAorCQkkKElOU1RBTExfUFJPR1JBTSkgJCRpICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvJCRpOyBcCisJZG9uZQorCSQoUSkgZm9yIGkgaW4gJChNQU5QQUdFUyk7IGRvIFwKKwkJZm9yIGogaW4gJChDT01QUkVTU19FWFQpOyBkbyBcCisJCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW44ZGlyKS8kJGkuJCRqOyBcCisJCWRvbmU7IFwKKwkJZWNobyAiCUlOU1RBTExfREFUQSAkKG1hbjhkaXIpLyQkaSI7IFwKKwkJJChJTlNUQUxMX0RBVEEpICQkaSAkKERFU1RESVIpJChtYW44ZGlyKS8kJGk7IFwKKwlkb25lCisKK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKwkkKFEpIGZvciBpIGluICQoUFJPR1MpOyBkbyBcCisJCWVjaG8gIglTVFJJUCAkKHJvb3Rfc2JpbmRpcikvJCRpIjsgXAorCQkkKFNUUklQKSAkKERFU1RESVIpJChyb290X3NiaW5kaXIpLyQkaTsgXAorCWRvbmUKKwordW5pbnN0YWxsOgorCWZvciBpIGluICQoUFJPR1MpOyBkbyBcCisJCSQoUk0pIC1mICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvJCRpOyBcCisJZG9uZQorCWZvciBpIGluICQoTUFOUEFHRVMpOyBkbyBcCisJCSQoUk0pIC1mICQoREVTVERJUikkKG1hbjhkaXIpLyQkaTsgXAorCWRvbmUKKworY2xlYW46OgorCSQoUk0pIC1mICQoUFJPR1MpIGRlYnVnZnMuOCBcIyogKi5zICoubyAqLmEgKn4gZGVidWdfY21kcy5jIFwKKwkJZXh0ZW50X2NtZHMuYyByb19kZWJ1Z19jbWRzLmMgY29yZSByZGVidWdmcyBkZWJ1Z2ZzLnN0YXRpYworCittb3N0bHljbGVhbjogY2xlYW4KK2Rpc3RjbGVhbjogY2xlYW4KKwkkKFJNKSAtZiBkZWJ1Z19jbWRzLmMgLmRlcGVuZCBNYWtlZmlsZSAkKHNyY2RpcikvVEFHUyBcCisJCSQoc3JjZGlyKS9NYWtlZmlsZS5pbi5vbGQKKworIyArKysgRGVwZW5kZW5jeSBsaW5lIGVhdGVyICsrKworIyAKKyMgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvbGxvdy4gIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBzZWN0aW9uIGluCisjIHRoZSBNYWtlZmlsZS5pbiBmaWxlCisjCitkZWJ1Z19jbWRzLm86IGRlYnVnX2NtZHMuYyAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaAorZGVidWdmcy5vOiAkKHNyY2RpcikvZGVidWdmcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZGVidWdmcy5oICQodG9wX3NyY2RpcikvbGliL3NzL3NzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmggXAorICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCAkKHRvcF9zcmNkaXIpL3ZlcnNpb24uaCAkKHNyY2RpcikvamZzX3VzZXIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2tlcm5lbC1qYmQuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvamZzX2NvbXBhdC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWxpc3QuaAordXRpbC5vOiAkKHNyY2RpcikvdXRpbC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2RlYnVnZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oCitscy5vOiAkKHNyY2RpcikvbHMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2RlYnVnZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oCituY2hlY2subzogJChzcmNkaXIpL25jaGVjay5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZGVidWdmcy5oICQodG9wX3NyY2RpcikvbGliL3NzL3NzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmgKK2ljaGVjay5vOiAkKHNyY2RpcikvaWNoZWNrLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9kZWJ1Z2ZzLmggJCh0b3Bfc3JjZGlyKS9saWIvc3Mvc3MuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorbHNkZWwubzogJChzcmNkaXIpL2xzZGVsLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9kZWJ1Z2ZzLmggJCh0b3Bfc3JjZGlyKS9saWIvc3Mvc3MuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorZHVtcC5vOiAkKHNyY2RpcikvZHVtcC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZGVidWdmcy5oICQodG9wX3NyY2RpcikvbGliL3NzL3NzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmgKK3NldF9maWVsZHMubzogJChzcmNkaXIpL3NldF9maWVsZHMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2RlYnVnZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmgKK2xvZ2R1bXAubzogJChzcmNkaXIpL2xvZ2R1bXAuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2RlYnVnZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oIFwKKyAkKHNyY2RpcikvamZzX3VzZXIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWpiZC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvamZzX2NvbXBhdC5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtbGlzdC5oCitodHJlZS5vOiAkKHNyY2RpcikvaHRyZWUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2RlYnVnZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmgKK3VudXNlZC5vOiAkKHNyY2RpcikvdW51c2VkLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9kZWJ1Z2ZzLmggJCh0b3Bfc3JjZGlyKS9saWIvc3Mvc3MuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorZTJmcmVlZnJhZy5vOiAkKHNyY2RpcikvLi4vbWlzYy9lMmZyZWVmcmFnLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS8uLi9taXNjL2UyZnJlZWZyYWcuaAorZmlsZWZyYWcubzogJChzcmNkaXIpL2ZpbGVmcmFnLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9kZWJ1Z2ZzLmggJCh0b3Bfc3JjZGlyKS9saWIvc3Mvc3MuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorZXh0ZW50X2lub2RlLm86ICQoc3JjZGlyKS9leHRlbnRfaW5vZGUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2RlYnVnZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oCit6YXAubzogJChzcmNkaXIpL3phcC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZGVidWdmcy5oICQodG9wX3NyY2RpcikvbGliL3NzL3NzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmgKK3F1b3RhLm86ICQoc3JjZGlyKS9xdW90YS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZGVidWdmcy5oICQodG9wX3NyY2RpcikvbGliL3NzL3NzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmgKZGlmZiAtLWdpdCBhL2RlYnVnZnMvZGVidWdfY21kcy5jdCBiL2RlYnVnZnMvZGVidWdfY21kcy5jdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDM3MjhmCi0tLSAvZGV2L251bGwKKysrIGIvZGVidWdmcy9kZWJ1Z19jbWRzLmN0CkBAIC0wLDAgKzEsMjA0IEBACisjCisjIENvcHlyaWdodCAoQykgMTk5MyBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorIworY29tbWFuZF90YWJsZSBkZWJ1Z19jbWRzOworCityZXF1ZXN0IGRvX3Nob3dfZGVidWdmc19wYXJhbXMsICJTaG93IGRlYnVnZnMgcGFyYW1ldGVycyIsCisJc2hvd19kZWJ1Z2ZzX3BhcmFtcywgcGFyYW1zOworCityZXF1ZXN0IGRvX29wZW5fZmlsZXN5cywgIk9wZW4gYSBmaWxlc3lzdGVtIiwKKwlvcGVuX2ZpbGVzeXMsIG9wZW47CisKK3JlcXVlc3QgZG9fY2xvc2VfZmlsZXN5cywgIkNsb3NlIHRoZSBmaWxlc3lzdGVtIiwKKwljbG9zZV9maWxlc3lzLCBjbG9zZTsKKworcmVxdWVzdCBkb19mcmVlZnJhZywgIlJlcG9ydCBmcmVlIHNwYWNlIGZyYWdtZW50YXRpb24iLAorCWZyZWVmcmFnLCBlMmZyZWVmcmFnOworCityZXF1ZXN0IGRvX2ZlYXR1cmVzLCAiU2V0L3ByaW50IHN1cGVyYmxvY2sgZmVhdHVyZXMiLAorCWZlYXR1cmUsIGZlYXR1cmVzOworCityZXF1ZXN0IGRvX2RpcnR5X2ZpbGVzeXMsICJNYXJrIHRoZSBmaWxlc3lzdGVtIGFzIGRpcnR5IiwKKwlkaXJ0eV9maWxlc3lzLCBkaXJ0eTsKKworcmVxdWVzdCBkb19pbml0X2ZpbGVzeXMsICJJbml0aWFsaXplIGEgZmlsZXN5c3RlbSAoREVTVFJPWVMgREFUQSkiLAorCWluaXRfZmlsZXN5czsKKworcmVxdWVzdCBkb19zaG93X3N1cGVyX3N0YXRzLCAiU2hvdyBzdXBlcmJsb2NrIHN0YXRpc3RpY3MiLAorCXNob3dfc3VwZXJfc3RhdHMsIHN0YXRzOworCityZXF1ZXN0IGRvX25jaGVjaywgIkRvIGlub2RlLT5uYW1lIHRyYW5zbGF0aW9uIiwKKwluY2hlY2s7CisKK3JlcXVlc3QgZG9faWNoZWNrLCAiRG8gYmxvY2stPmlub2RlIHRyYW5zbGF0aW9uIiwKKwlpY2hlY2s7CisKK3JlcXVlc3QgZG9fY2hyb290LCAiQ2hhbmdlIHJvb3QgZGlyZWN0b3J5IiwKKwljaGFuZ2Vfcm9vdF9kaXJlY3RvcnksIGNocm9vdDsKKworcmVxdWVzdCBkb19jaGFuZ2Vfd29ya2luZ19kaXIsICJDaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkiLAorCWNoYW5nZV93b3JraW5nX2RpcmVjdG9yeSwgY2Q7CisKK3JlcXVlc3QgZG9fbGlzdF9kaXIsICJMaXN0IGRpcmVjdG9yeSIsCisJbGlzdF9kaXJlY3RvcnksIGxzOworCityZXF1ZXN0IGRvX3N0YXQsICJTaG93IGlub2RlIGluZm9ybWF0aW9uICIsCisJc2hvd19pbm9kZV9pbmZvLCBzdGF0OworCityZXF1ZXN0IGRvX2R1bXBfZXh0ZW50cywgIkR1bXAgZXh0ZW50cyBpbmZvcm1hdGlvbiAiLAorCWR1bXBfZXh0ZW50cywgZXh0ZW50cywgZXg7CisKK3JlcXVlc3QgZG9fYmxvY2tzLCAiRHVtcCBibG9ja3MgdXNlZCBieSBhbiBpbm9kZSAiLAorCWJsb2NrczsKKworcmVxdWVzdCBkb19maWxlZnJhZywgIlJlcG9ydCBmcmFnbWVudGF0aW9uIGluZm9ybWF0aW9uIGZvciBhbiBpbm9kZSIsCisJZmlsZWZyYWc7CisKK3JlcXVlc3QgZG9fbGluaywgIkNyZWF0ZSBkaXJlY3RvcnkgbGluayIsCisJbGluaywgbG47CisKK3JlcXVlc3QgZG9fdW5saW5rLCAiRGVsZXRlIGEgZGlyZWN0b3J5IGxpbmsiLAorCXVubGluazsKKworcmVxdWVzdCBkb19ta2RpciwgIkNyZWF0ZSBhIGRpcmVjdG9yeSIsCisJbWtkaXI7CisKK3JlcXVlc3QgZG9fcm1kaXIsICJSZW1vdmUgYSBkaXJlY3RvcnkiLAorCXJtZGlyOworCityZXF1ZXN0IGRvX3JtLCAiUmVtb3ZlIGEgZmlsZSAodW5saW5rIGFuZCBraWxsX2ZpbGUsIGlmIGFwcHJvcHJpYXRlKSIsCisJcm07CisKK3JlcXVlc3QgZG9fa2lsbF9maWxlLCAiRGVhbGxvY2F0ZSBhbiBpbm9kZSBhbmQgaXRzIGJsb2NrcyIsCisJa2lsbF9maWxlOworCityZXF1ZXN0IGRvX2NscmksICJDbGVhciBhbiBpbm9kZSdzIGNvbnRlbnRzIiwKKwljbHJpOworCityZXF1ZXN0IGRvX2ZyZWVpLCAiQ2xlYXIgYW4gaW5vZGUncyBpbi11c2UgZmxhZyIsCisJZnJlZWk7CisKK3JlcXVlc3QgZG9fc2V0aSwgIlNldCBhbiBpbm9kZSdzIGluLXVzZSBmbGFnIiwKKwlzZXRpOworCityZXF1ZXN0IGRvX3Rlc3RpLCAiVGVzdCBhbiBpbm9kZSdzIGluLXVzZSBmbGFnIiwKKwl0ZXN0aTsKKworcmVxdWVzdCBkb19mcmVlYiwgIkNsZWFyIGEgYmxvY2sncyBpbi11c2UgZmxhZyIsCisJZnJlZWI7CisKK3JlcXVlc3QgZG9fc2V0YiwgIlNldCBhIGJsb2NrJ3MgaW4tdXNlIGZsYWciLAorCXNldGI7CisKK3JlcXVlc3QgZG9fdGVzdGIsICJUZXN0IGEgYmxvY2sncyBpbi11c2UgZmxhZyIsCisJdGVzdGI7CisKK3JlcXVlc3QgZG9fbW9kaWZ5X2lub2RlLCAiTW9kaWZ5IGFuIGlub2RlIGJ5IHN0cnVjdHVyZSIsCisJbW9kaWZ5X2lub2RlLCBtaTsKKworcmVxdWVzdCBkb19maW5kX2ZyZWVfYmxvY2ssICJGaW5kIGZyZWUgYmxvY2socykiLAorCWZpbmRfZnJlZV9ibG9jaywgZmZiOworCityZXF1ZXN0IGRvX2ZpbmRfZnJlZV9pbm9kZSwgIkZpbmQgZnJlZSBpbm9kZShzKSIsCisJZmluZF9mcmVlX2lub2RlLCBmZmk7CisKK3JlcXVlc3QJZG9fcHJpbnRfd29ya2luZ19kaXJlY3RvcnksICJQcmludCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IiwKKwlwcmludF93b3JraW5nX2RpcmVjdG9yeSwgcHdkOyAKKworcmVxdWVzdAlkb19leHBhbmRfZGlyLCAiRXhwYW5kIGRpcmVjdG9yeSIsCisJZXhwYW5kX2RpciwgZXhwYW5kOworCityZXF1ZXN0IGRvX21rbm9kLCAiQ3JlYXRlIGEgc3BlY2lhbCBmaWxlIiwKKwlta25vZDsKKworcmVxdWVzdCBkb19sc2RlbCwgIkxpc3QgZGVsZXRlZCBpbm9kZXMiLAorCWxpc3RfZGVsZXRlZF9pbm9kZXMsIGxzZGVsOworCityZXF1ZXN0IGRvX3VuZGVsLCAiVW5kZWxldGUgZmlsZSIsCisJdW5kZWxldGUsIHVuZGVsOworCityZXF1ZXN0IGRvX3dyaXRlLCAiQ29weSBhIGZpbGUgZnJvbSB5b3VyIG5hdGl2ZSBmaWxlc3lzdGVtIiwKKwl3cml0ZTsKKworcmVxdWVzdCBkb19kdW1wLCAiRHVtcCBhbiBpbm9kZSBvdXQgdG8gYSBmaWxlIiwKKwlkdW1wX2lub2RlLCBkdW1wOworCityZXF1ZXN0IGRvX2NhdCwgIkR1bXAgYW4gaW5vZGUgb3V0IHRvIHN0ZG91dCIsCisJY2F0OworCityZXF1ZXN0IGRvX2xjZCwgIkNoYW5nZSB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb24geW91ciBuYXRpdmUgZmlsZXN5c3RlbSIsCisJbGNkOworCityZXF1ZXN0IGRvX3JkdW1wLCAiUmVjdXJzaXZlbHkgZHVtcCBhIGRpcmVjdG9yeSB0byB0aGUgbmF0aXZlIGZpbGVzeXN0ZW0iLAorCXJkdW1wOworCityZXF1ZXN0IGRvX3NldF9zdXBlciwgIlNldCBzdXBlcmJsb2NrIHZhbHVlIiwKKwlzZXRfc3VwZXJfdmFsdWUsIHNzdjsKKworcmVxdWVzdCBkb19zZXRfaW5vZGUsICJTZXQgaW5vZGUgZmllbGQiLAorCXNldF9pbm9kZV9maWVsZCwgc2lmOworCityZXF1ZXN0IGRvX3NldF9ibG9ja19ncm91cF9kZXNjcmlwdG9yLCAiU2V0IGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgZmllbGQiLAorCXNldF9ibG9ja19ncm91cCwgc2V0X2JnOworCityZXF1ZXN0IGRvX2xvZ2R1bXAsICJEdW1wIHRoZSBjb250ZW50cyBvZiB0aGUgam91cm5hbCIsCisJbG9nZHVtcDsKKworcmVxdWVzdCBkb19odHJlZV9kdW1wLCAiRHVtcCBhIGhhc2gtaW5kZXhlZCBkaXJlY3RvcnkiLAorCWh0cmVlX2R1bXAsIGh0cmVlOworCityZXF1ZXN0IGRvX2R4X2hhc2gsICJDYWxjdWxhdGUgdGhlIGRpcmVjdG9yeSBoYXNoIG9mIGEgZmlsZW5hbWUiLAorCWR4X2hhc2gsIGhhc2g7CisKK3JlcXVlc3QgZG9fZGlyc2VhcmNoLCAiU2VhcmNoIGEgZGlyZWN0b3J5IGZvciBhIHBhcnRpY3VsYXIgZmlsZW5hbWUiLAorCWRpcnNlYXJjaDsKKworcmVxdWVzdCBkb19ibWFwLCAiQ2FsY3VsYXRlIHRoZSBsb2dpY2FsLT5waHlzaWNhbCBibG9jayBtYXBwaW5nIGZvciBhbiBpbm9kZSIsCisJYm1hcDsKKworcmVxdWVzdCBkb19wdW5jaCwgIlB1bmNoIChvciB0cnVuY2F0ZSkgYmxvY2tzIGZyb20gYW4gaW5vZGUgYnkgZGVhbGxvY2F0aW5nIHRoZW0iLAorCXB1bmNoLCB0cnVuY2F0ZTsKKworcmVxdWVzdCBkb19zeW1saW5rLCAiQ3JlYXRlIGEgc3ltYm9saWMgbGluayIsCisJc3ltbGluazsKKworcmVxdWVzdCBkb19pbWFwLCAiQ2FsY3VsYXRlIHRoZSBsb2NhdGlvbiBvZiBhbiBpbm9kZSIsCisJaW1hcDsKKworcmVxdWVzdAlkb19kdW1wX3VudXNlZCwgIkR1bXAgdW51c2VkIGJsb2NrcyIsCisJZHVtcF91bnVzZWQ7CisKK3JlcXVlc3QgZG9fc2V0X2N1cnJlbnRfdGltZSwgIlNldCBjdXJyZW50IHRpbWUgdG8gdXNlIHdoZW4gc2V0dGluZyBmaWxlc3lzdGVtIGZpZWxkcyIsCisJc2V0X2N1cnJlbnRfdGltZTsKKworcmVxdWVzdCBkb19zdXBwb3J0ZWRfZmVhdHVyZXMsICJQcmludCBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIGUyZnNwcm9ncyIsCisJc3VwcG9ydGVkX2ZlYXR1cmVzOworCityZXF1ZXN0IGRvX2R1bXBfbW1wLCAiRHVtcCBNTVAgaW5mb3JtYXRpb24iLAorCWR1bXBfbW1wOworCityZXF1ZXN0IGRvX3NldF9tbXBfdmFsdWUsICJTZXQgTU1QIHZhbHVlIiwKKwlzZXRfbW1wX3ZhbHVlLCBzbW1wOworCityZXF1ZXN0IGRvX2V4dGVudF9vcGVuLCAiT3BlbiBpbm9kZSBmb3IgZXh0ZW50IG1hbmlwdWxhdGlvbiIsCisJZXh0ZW50X29wZW4sIGVvOworCityZXF1ZXN0IGRvX3phcF9ibG9jaywgIlphcCBibG9jazogZmlsbCB3aXRoIDAsIHBhdHRlcm4sIGZsaXAgYml0cyBldGMuIiwKKwl6YXBfYmxvY2ssIHphcDsKKworcmVxdWVzdCBkb19ibG9ja19kdW1wLCAiRHVtcCBjb250ZW50cyBvZiBhIGJsb2NrIiwKKwlibG9ja19kdW1wLCBiZHVtcCwgYmQ7CisKK3JlcXVlc3QgZG9fbGlzdF9xdW90YSwgIkxpc3QgcXVvdGEiLAorCWxpc3RfcXVvdGEsIGxxOworCityZXF1ZXN0IGRvX2dldF9xdW90YSwgIkdldCBxdW90YSIsCisJZ2V0X3F1b3RhLCBncTsKKworcmVxdWVzdCBkb19pZHVtcCwgIkR1bXAgdGhlIGlub2RlIHN0cnVjdHVyZSBpbiBoZXgiLAorCWlub2RlX2R1bXAsIGlkdW1wLCBpZDsKKworCitlbmQ7CisKZGlmZiAtLWdpdCBhL2RlYnVnZnMvZGVidWdmcy44LmluIGIvZGVidWdmcy9kZWJ1Z2ZzLjguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFlMTRkYgotLS0gL2Rldi9udWxsCisrKyBiL2RlYnVnZnMvZGVidWdmcy44LmluCkBAIC0wLDAgKzEsNzIzIEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAxOTkzLCAxOTk0LCAxOTk1IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiCisuVEggREVCVUdGUyA4ICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCitkZWJ1Z2ZzIFwtIGV4dDIvZXh0My9leHQ0IGZpbGUgc3lzdGVtIGRlYnVnZ2VyCisuU0ggU1lOT1BTSVMKKy5CIGRlYnVnZnMKK1sKKy5CIFwtRFZ3Y2kKK10KK1sKKy5CIFwtYgorYmxvY2tzaXplCitdCitbCisuQiBcLXMKK3N1cGVyYmxvY2sKK10KK1sKKy5CIFwtZgorY21kX2ZpbGUKK10KK1sKKy5CIFwtUgorcmVxdWVzdAorXQorWworLkIgXC1kCitkYXRhX3NvdXJjZV9kZXZpY2UKK10KK1sKK2RldmljZQorXQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIGRlYnVnZnMKK3Byb2dyYW0gaXMgYW4gaW50ZXJhY3RpdmUgZmlsZSBzeXN0ZW0gZGVidWdnZXIuIEl0IGNhbiBiZSB1c2VkIHRvCitleGFtaW5lIGFuZCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFuIGV4dDIsIGV4dDMsIG9yIGV4dDQgZmlsZSBzeXN0ZW0uCisuYnIKKy5JIGRldmljZQoraXMgdGhlIHNwZWNpYWwgZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBkZXZpY2UgY29udGFpbmluZyB0aGUKK2ZpbGUgc3lzdGVtIChlLmcgL2Rldi9oZFhYKS4KKy5TSCBPUFRJT05TCisuVFAKKy5JIFwtdworU3BlY2lmaWVzIHRoYXQgdGhlIGZpbGUgc3lzdGVtIHNob3VsZCBiZSBvcGVuZWQgaW4gcmVhZC13cml0ZSBtb2RlLgorV2l0aG91dCB0aGlzIG9wdGlvbiwgdGhlIGZpbGUgc3lzdGVtIGlzIG9wZW5lZCBpbiByZWFkLW9ubHkgbW9kZS4KKy5UUAorLkkgXC1jCitTcGVjaWZpZXMgdGhhdCB0aGUgZmlsZSBzeXN0ZW0gc2hvdWxkIGJlIG9wZW5lZCBpbiBjYXRhc3Ryb3BoaWMgbW9kZSwgaW4KK3doaWNoIHRoZSBpbm9kZSBhbmQgZ3JvdXAgYml0bWFwcyBhcmUgbm90IHJlYWQgaW5pdGlhbGx5LiAgVGhpcyBjYW4gYmUKK3VzZWZ1bCBmb3IgZmlsZXN5c3RlbXMgd2l0aCBzaWduaWZpY2FudCBjb3JydXB0aW9uLCBidXQgYmVjYXVzZSBvZiB0aGlzLAorY2F0YXN0cm9waGljIG1vZGUgZm9yY2VzIHRoZSBmaWxlc3lzdGVtIHRvIGJlIG9wZW5lZCByZWFkLW9ubHkuCisuVFAKKy5JIFwtaQorU3BlY2lmaWVzIHRoYXQKKy5JIGRldmljZQorcmVwcmVzZW50cyBhbiBleHQyIGltYWdlIGZpbGUgY3JlYXRlZCBieSB0aGUKKy5CIGUyaW1hZ2UKK3Byb2dyYW0uICBTaW5jZSB0aGUgZXh0MiBpbWFnZSBmaWxlIG9ubHkgY29udGFpbnMgdGhlIHN1cGVyYmxvY2ssIGJsb2NrCitncm91cCBkZXNjcmlwdG9yLCBibG9jayBhbmQgaW5vZGUgYWxsb2NhdGlvbiBiaXRtYXBzLCBhbmQKK3RoZSBpbm9kZSB0YWJsZSwgbWFueQorLkIgZGVidWdmcworY29tbWFuZHMgd2lsbCBub3QgZnVuY3Rpb24gcHJvcGVybHkuCisuQiBXYXJuaW5nOgorbm8gc2FmZXR5IGNoZWNrcyBhcmUgaW4gcGxhY2UsIGFuZAorLkIgZGVidWdmcworbWF5IGZhaWwgaW4gaW50ZXJlc3Rpbmcgd2F5cyBpZiBjb21tYW5kcyBzdWNoIGFzCisuSVIgbHMgIiwgIiBkdW1wICIsICIKK2V0Yy4gYXJlIHRyaWVkIHdpdGhvdXQgc3BlY2lmeWluZyB0aGUKKy5JIGRhdGFfc291cmNlX2RldmljZQordXNpbmcgdGhlCisuSSBcLWQKK29wdGlvbi4KKy5CIGRlYnVnZnMKK2lzIGEgZGVidWdnaW5nIHRvb2wuICBJdCBoYXMgcm91Z2ggZWRnZXMhCisuVFAKKy5JIC1kIGRhdGFfc291cmNlX2RldmljZQorVXNlZCB3aXRoIHRoZQorLkkgXC1pCitvcHRpb24sIHNwZWNpZmllcyB0aGF0CisuSSBkYXRhX3NvdXJjZV9kZXZpY2UKK3Nob3VsZCBiZSB1c2VkIHdoZW4gcmVhZGluZyBibG9ja3Mgbm90IGZvdW5kIGluIHRoZSBleHQyIGltYWdlIGZpbGUuCitUaGlzIGluY2x1ZGVzIGRhdGEsIGRpcmVjdG9yeSwgYW5kIGluZGlyZWN0IGJsb2Nrcy4KKy5UUAorLkkgLWIgYmxvY2tzaXplCitGb3JjZXMgdGhlIHVzZSBvZiB0aGUgZ2l2ZW4gYmxvY2sgc2l6ZSBmb3IgdGhlIGZpbGUgc3lzdGVtLCByYXRoZXIgdGhhbgorZGV0ZWN0aW5nIHRoZSBjb3JyZWN0IGJsb2NrIHNpemUgYXMgbm9ybWFsLgorLlRQCisuSSAtcyBzdXBlcmJsb2NrCitDYXVzZXMgdGhlIGZpbGUgc3lzdGVtIHN1cGVyYmxvY2sgdG8gYmUgcmVhZCBmcm9tIHRoZSBnaXZlbiBibG9jaworbnVtYmVyLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgKGxvY2F0ZWQgYXQgYW4gb2Zmc2V0IG9mCisxMDI0IGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZXN5c3RlbSkuICBJZiB5b3Ugc3BlY2lmeSB0aGUKKy5JIC1zCitvcHRpb24sIHlvdSBtdXN0IGFsc28gcHJvdmlkZSB0aGUgYmxvY2tzaXplIG9mIHRoZSBmaWxlc3lzdGVtIHZpYSB0aGUKKy5JIC1iCitvcHRpb24uCisuVFAKKy5JIC1mIGNtZF9maWxlCitDYXVzZXMKKy5CIGRlYnVnZnMKK3RvIHJlYWQgaW4gY29tbWFuZHMgZnJvbQorLklSIGNtZF9maWxlICwKK2FuZCBleGVjdXRlIHRoZW0uICBXaGVuCisuQiBkZWJ1Z2ZzCitpcyBmaW5pc2hlZCBleGVjdXRpbmcgdGhvc2UgY29tbWFuZHMsIGl0IHdpbGwgZXhpdC4KKy5UUAorLkkgLUQKK0NhdXNlcworLkIgZGVidWdmcwordG8gb3BlbiB0aGUgZGV2aWNlIHVzaW5nIERpcmVjdCBJL08sIGJ5cGFzc2luZyB0aGUgYnVmZmVyIGNhY2hlLiAgTm90ZQordGhhdCBzb21lIExpbnV4IGRldmljZXMsIG5vdGFibHkgZGV2aWNlIG1hcHBlciBhcyBvZiB0aGlzIHdyaXRpbmcsIGRvCitub3Qgc3VwcG9ydCBEaXJlY3QgSS9PLgorLlRQCisuSSAtUiByZXF1ZXN0CitDYXVzZXMKKy5CIGRlYnVnZnMKK3RvIGV4ZWN1dGUgdGhlIHNpbmdsZSBjb21tYW5kCisuSVIgcmVxdWVzdCAsCithbmQgdGhlbiBleGl0LgorLlRQCisuSSAtVgorcHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyIG9mCisuQiBkZWJ1Z2ZzCithbmQgZXhpdC4KKy5TSCBTUEVDSUZZSU5HIEZJTEVTCitNYW55CisuQiBkZWJ1Z2ZzCitjb21tYW5kcyB0YWtlIGEKKy5JIGZpbGVzcGVjCithcyBhbiBhcmd1bWVudCB0byBzcGVjaWZ5IGFuIGlub2RlIChhcyBvcHBvc2VkIHRvIGEgcGF0aG5hbWUpCitpbiB0aGUgZmlsZXN5c3RlbSB3aGljaCBpcyBjdXJyZW50bHkgb3BlbmVkIGJ5CisuQlIgZGVidWdmcyAuCitUaGUKKy5JIGZpbGVzcGVjCithcmd1bWVudCBtYXkgYmUgc3BlY2lmaWVkIGluIHR3byBmb3Jtcy4gIFRoZSBmaXJzdCBmb3JtIGlzIGFuIGlub2RlCitudW1iZXIgc3Vycm91bmRlZCBieSBhbmdsZSBicmFja2V0cywgZS5nLiwKKy5JUiA8Mj4gLgorVGhlIHNlY29uZCBmb3JtIGlzIGEgcGF0aG5hbWU7IGlmIHRoZSBwYXRobmFtZSBpcyBwcmVmaXhlZCBieSBhIGZvcndhcmQgc2xhc2gKKygnLycpLCB0aGVuIGl0IGlzIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBmaWxlc3lzdGVtCit3aGljaCBpcyBjdXJyZW50bHkgb3BlbmVkIGJ5CisuQlIgZGVidWdmcyAuCitJZiBub3QsIHRoZSBwYXRobmFtZSBpcworaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYXMgbWFpbnRhaW5lZCBieQorLkJSIGRlYnVnZnMgLgorVGhpcyBtYXkgYmUgbW9kaWZpZWQgYnkgdXNpbmcgdGhlCisuQiBkZWJ1Z2ZzCitjb21tYW5kCisuSVIgY2QgLgorLlwiCisuXCIKKy5cIgorLlNIIENPTU1BTkRTCitUaGlzIGlzIGEgbGlzdCBvZiB0aGUgY29tbWFuZHMgd2hpY2gKKy5CIGRlYnVnZnMKK3N1cHBvcnRzLgorLlRQCisuQkkgYmxvY2tzICIgZmlsZXNwYWNlIgorUHJpbnQgdGhlIGJsb2NrcyB1c2VkIGJ5IHRoZSBpbm9kZQorLkkgZmlsZXNwZWMKK3RvIHN0ZG91dC4KKy5UUAorLkJJIGJtYXAgIiBmaWxlc3BlYyBsb2dpY2FsX2Jsb2NrIgorUHJpbnQgdGhlIHBoeXNpY2FsIGJsb2NrIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2dpY2FsIGJsb2NrIG51bWJlcgorLkkgbG9naWNhbF9ibG9jaworaW4gdGhlIGlub2RlCisuSVIgZmlsZXNwZWMgLgorLlRQCisuQkkgYmxvY2tfZHVtcCAiIFstZiBmaWxlc3BlY10gYmxvY2tfbnVtIgorRHVtcCB0aGUgZmlsZXN5c3RlbSBibG9jayBnaXZlbiBieQorLkkgYmxvY2tfbnVtCitpbiBoZXggYW5kIEFTQ0lJIGZvcm1hdCB0byB0aGUgY29uc29sZS4gIElmIHRoZQorLkkgLWYKK29wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBibG9jayBudW1iZXIgaXMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBnaXZlbgorLkJSIGZpbGVzcGVjIC4KKy5UUAorLkJJIGNhdCAiIGZpbGVzcGVjIgorRHVtcCB0aGUgY29udGVudHMgb2YgdGhlIGlub2RlCisuSSBmaWxlc3BlYwordG8gc3Rkb3V0LgorLlRQCisuQkkgY2QgIiBmaWxlc3BlYyIKK0NoYW5nZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB0bworLklSIGZpbGVzcGVjIC4KKy5UUAorLkJJIGNocm9vdCAiIGZpbGVzcGVjIgorQ2hhbmdlIHRoZSByb290IGRpcmVjdG9yeSB0byBiZSB0aGUgZGlyZWN0b3J5CisuSVIgZmlsZXNwZWMgLgorLlRQCisuQkkgY2xvc2UgIiBbLWFdIgorQ2xvc2UgdGhlIGN1cnJlbnRseSBvcGVuIGZpbGUgc3lzdGVtLiAgSWYgdGhlCisuSSAtYQorb3B0aW9uIGlzIHNwZWNpZmllZCwgd3JpdGUgb3V0IGFueSBjaGFuZ2VzIHRvIHRoZSBzdXBlcmJsb2NrIGFuZCBibG9jaworZ3JvdXAgZGVzY3JpcHRvcnMgdG8gYWxsIG9mIHRoZSBiYWNrdXAgc3VwZXJibG9ja3MsIG5vdCBqdXN0IHRvIHRoZQorbWFzdGVyIHN1cGVyYmxvY2suCisuVFAKKy5CSSBjbHJpICIgZmlsZXNwZWMiCitDbGVhciB0aGUgY29udGVudHMgb2YgdGhlIGlub2RlCisuSVIgZmlsZXNwZWMgLgorLlRQCisuQkkgZGlyc2VhcmNoICIgZmlsZXNwZWMgZmlsZW5hbWUiCitTZWFyY2ggdGhlIGRpcmVjdG9yeQorLkkgZmlsZXNwZWMKK2ZvcgorLklSIGZpbGVuYW1lIC4KKy5UUAorLkIgZGlydHkKK01hcmsgdGhlIGZpbGVzeXN0ZW0gYXMgZGlydHksIHNvIHRoYXQgdGhlIHN1cGVyYmxvY2tzIHdpbGwgYmUgd3JpdHRlbiBvbiBleGl0LgorLlRQCisuQkkgZHVtcCAiIFstcF0gZmlsZXNwZWMgb3V0X2ZpbGUiCitEdW1wIHRoZSBjb250ZW50cyBvZiB0aGUgaW5vZGUKKy5JIGZpbGVzcGVjCit0byB0aGUgb3V0cHV0IGZpbGUKKy5JUiBvdXRfZmlsZSAuCitJZiB0aGUKKy5JIC1wCitvcHRpb24gaXMgZ2l2ZW4gc2V0IHRoZSBvd25lciwgZ3JvdXAgYW5kIHBlcm1pc3Npb25zIGluZm9ybWF0aW9uIG9uCisuSSBvdXRfZmlsZQordG8gbWF0Y2gKKy5JUiBmaWxlc3BlYyAuCisuVFAKKy5CIGR1bXBfbW1wCitEaXNwbGF5IHRoZSBtdWx0aXBsZS1tb3VudCBwcm90ZWN0aW9uIChtbXApIGZpZWxkIHZhbHVlcy4KKy5UUAorLkJJIGR4X2hhc2ggIiBbLWggaGFzaF9hbGddIFstcyBoYXNoX3NlZWRdIGZpbGVuYW1lIgorQ2FsY3VsYXRlIHRoZSBkaXJlY3RvcnkgaGFzaCBvZgorLklSIGZpbGVuYW1lIC4KK1RoZSBoYXNoIGFsZ29yaXRobSBzcGVjaWZpZWQgd2l0aAorLkkgLWgKK21heSBiZQorLkJSIGxlZ2FjeSAsICIgaGFsZl9tZDQiICIsIG9yICIgdGVhIC4KK1RoZSBoYXNoIHNlZWQgc3BlY2lmaWVkIHdpdGgKKy5JIC1zCittdXN0IGJlIGluIFVVSUQgZm9ybWF0LgorLlRQCisuQkkgZHVtcF9leHRlbnRzICIgWy1uXSBbLWxdIGZpbGVzcGVjIgorRHVtcCB0aGUgdGhlIGV4dGVudCB0cmVlIG9mIHRoZSBpbm9kZQorLklSIGZpbGVzcGVjIC4KK1RoZQorLkkgLW4KK2ZsYWcgd2lsbCBjYXVzZQorLkIgZHVtcF9leHRlbnRzCit0byBvbmx5IGRpc3BsYXkgdGhlIGludGVyaW9yIG5vZGVzIGluIHRoZSBleHRlbnQgdHJlZS4gICBUaGUKKy5JIC1sCitmbGFnIHdpbGwgY2F1c2UKKy5CIGR1bXBfZXh0ZW50cwordG8gb25seSBkaXNwbGF5IHRoZSBsZWFmIG5vZGVzIGluIHRoZSBleHRlbnQgdHJlZS4KKy5JUAorKFBsZWFzZSBub3RlIHRoYXQgdGhlIGxlbmd0aCBhbmQgcmFuZ2Ugb2YgYmxvY2tzIGZvciB0aGUgbGFzdCBleHRlbnQgaW4KK2FuIGludGVyaW9yIG5vZGUgaXMgYW4gZXN0aW1hdGUgYnkgdGhlIGV4dGVudHMgbGlicmFyeSBmdW5jdGlvbnMsIGFuZCBpcworbm90IHN0b3JlZCBpbiBmaWxlc3lzdGVtIGRhdGEgc3RydWN0dXJlcy4gICBIZW5jZSwgdGhlIHZhbHVlcyBkaXNwbGF5ZWQKK21heSBub3QgbmVjZXNzYXJpbHkgYnkgYWNjdXJhdGUgYW5kIGRvZXMgbm90IGluZGljYXRlIGEgcHJvYmxlbSBvcgorY29ycnVwdGlvbiBpbiB0aGUgZmlsZSBzeXN0ZW0uKQorLlRQCisuQkkgZXhwYW5kX2RpciAiIGZpbGVzcGVjIgorRXhwYW5kIHRoZSBkaXJlY3RvcnkKKy5JUiBmaWxlc3BlYyAuCisuVFAKKy5CSSBmZWF0dXJlICIgW2ZzX2ZlYXR1cmVdIFstZnNfZmVhdHVyZV0gLi4uIgorU2V0IG9yIGNsZWFyIHZhcmlvdXMgZmlsZXN5c3RlbSBmZWF0dXJlcyBpbiB0aGUgc3VwZXJibG9jay4gIEFmdGVyIHNldHRpbmcKK29yIGNsZWFyaW5nIGFueSBmaWxlc3lzdGVtIGZlYXR1cmVzIHRoYXQgd2VyZSByZXF1ZXN0ZWQsIHByaW50IHRoZSBjdXJyZW50CitzdGF0ZSBvZiB0aGUgZmlsZXN5c3RlbSBmZWF0dXJlIHNldC4KKy5UUAorLkJJIGZpbGVmcmFnICIgWy1kdnJdIGZpbGVzcGVjIgorUHJpbnQgdGhlIG51bWJlciBvZiBjb250aWd1b3VzIGV4dGVudHMgaW4KKy5JUiBmaWxlc3BlYyAuCitJZgorLkkgZmlsZXNwZWMKK2lzIGEgZGlyZWN0b3J5IGFuZCB0aGUKKy5JIC1kCitvcHRpb24gaXMgbm90IHNwZWNpZmllZCwKKy5JIGZpbGVmcmFnCit3aWxsIHByaW50IHRoZSBudW1iZXIgb2YgY29udGlndW91cyBleHRlbnRzIGZvciBlYWNoIGZpbGUgaW4KK3RoZSBkaXJlY3RvcnkuICBUaGUKKy5JIC12CitvcHRpb24gd2lsbCBjYXVzZQorLkkgZmlsZWZyYWcKK3ByaW50IGEgdGFidWxhciBsaXN0aW5nIG9mIHRoZSBjb250aWd1b3VzIGV4dGVudHMgaW4gdGhlCitmaWxlLiAgVGhlCisuSSAtcgorb3B0aW9uIHdpbGwgY2F1c2UKKy5JIGZpbGVmcmFnCit0byBkbyBhIHJlY3Vyc2l2ZSBsaXN0aW5nIG9mIHRoZSBkaXJlY3RvcnkuCisuVFAKKy5CSSBmaW5kX2ZyZWVfYmxvY2sgIiBbY291bnQgW2dvYWxdXSIKK0ZpbmQgdGhlIGZpcnN0CisuSSBjb3VudAorZnJlZSBibG9ja3MsIHN0YXJ0aW5nIGZyb20KKy5JIGdvYWwKK2FuZCBhbGxvY2F0ZSBpdC4gIEFsc28gYXZhaWxhYmxlIGFzCisuQlIgZmZiIC4KKy5UUAorLkJJIGZpbmRfZnJlZV9pbm9kZSAiIFtkaXIgW21vZGVdXSIKK0ZpbmQgYSBmcmVlIGlub2RlIGFuZCBhbGxvY2F0ZSBpdC4gIElmIHByZXNlbnQsCisuSSBkaXIKK3NwZWNpZmllcyB0aGUgaW5vZGUgbnVtYmVyIG9mIHRoZSBkaXJlY3RvcnkKK3doaWNoIHRoZSBpbm9kZSBpcyB0byBiZSBsb2NhdGVkLiAgVGhlIHNlY29uZAorb3B0aW9uYWwgYXJndW1lbnQKKy5JIG1vZGUKK3NwZWNpZmllcyB0aGUgcGVybWlzc2lvbnMgb2YgdGhlIG5ldyBpbm9kZS4gIChJZiB0aGUgZGlyZWN0b3J5IGJpdCBpcyBzZXQKK29uIHRoZSBtb2RlLCB0aGUgYWxsb2NhdGlvbiByb3V0aW5lIHdpbGwgZnVuY3Rpb24gZGlmZmVyZW50bHkuKSAgQWxzbworYXZhaWxhYmxlIGFzCisuQlIgZmZpIC4KKy5UUAorLkJJIGZyZWViICIgYmxvY2sgW2NvdW50XSIKK01hcmsgdGhlIGJsb2NrIG51bWJlcgorLkkgYmxvY2sKK2FzIG5vdCBhbGxvY2F0ZWQuCitJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQKKy5JIGNvdW50CitpcyBwcmVzZW50LCB0aGVuCisuSSBjb3VudAorYmxvY2tzIHN0YXJ0aW5nIGF0IGJsb2NrIG51bWJlcgorLkkgYmxvY2sKK3dpbGwgYmUgbWFya2VkIGFzIG5vdCBhbGxvY2F0ZWQuCisuVFAKKy5CSSBmcmVlZnJhZyAiIFstYyBjaHVua19rYl0iCitSZXBvcnQgZnJlZSBzcGFjZSBmcmFnbWVudGF0aW9uIG9uIHRoZSBjdXJyZW50bHkgb3BlbiBmaWxlIHN5c3RlbS4KK0lmIHRoZQorLkkgXC1jCitvcHRpb24gaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpbGVmcmFnIGNvbW1hbmQgd2lsbCBwcmludCBob3cgbWFueSBmcmVlCitjaHVua3Mgb2Ygc2l6ZQorLkkgY2h1bmtfa2IKK2NhbiBiZSBmb3VuZCBpbiB0aGUgZmlsZSBzeXN0ZW0uICBUaGUgY2h1bmsgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvCithbmQgYmUgbGFyZ2VyIHRoYW4gdGhlIGZpbGUgc3lzdGVtIGJsb2NrIHNpemUuCisuVFAKKy5CSSBmcmVlaSAiIGZpbGVzcGVjIFtudW1dIgorRnJlZSB0aGUgaW5vZGUgc3BlY2lmaWVkIGJ5CisuSVIgZmlsZXNwZWMgLgorSWYKKy5JIG51bQoraXMgc3BlY2lmaWVkLCBhbHNvIGNsZWFyIG51bS0xIGlub2RlcyBhZnRlciB0aGUgc3BlY2lmaWVkIGlub2RlLgorLlRQCisuQiBoZWxwCitQcmludCBhIGxpc3Qgb2YgY29tbWFuZHMgdW5kZXJzdG9vZCBieQorLkJSIGRlYnVnZnMgLgorLlRQCisuQkkgaHRyZWVfZHVtcCAiIGZpbGVzcGVjIgorRHVtcCB0aGUgaGFzaC1pbmRleGVkIGRpcmVjdG9yeQorLklSIGZpbGVzcGVjICwKK3Nob3dpbmcgaXRzIHRyZWUgc3RydWN0dXJlLgorLlRQCisuQkkgaWNoZWNrICIgYmxvY2sgLi4uIgorUHJpbnQgYSBsaXN0aW5nIG9mIHRoZSBpbm9kZXMgd2hpY2ggdXNlIHRoZSBvbmUgb3IgbW9yZSBibG9ja3Mgc3BlY2lmaWVkCitvbiB0aGUgY29tbWFuZCBsaW5lLgorLlRQCisuQkkgaW5vZGVfZHVtcCAiIGZpbGVzcGVjIgorUHJpbnQgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbm9kZSBkYXRhIHN0cnVjdHVyZSBpbiBoZXggYW5kIEFTQ0lJIGZvcm1hdC4KKy5UUAorLkJJIGltYXAgIiBmaWxlc3BlYyIKK1ByaW50IHRoZSBsb2NhdGlvbiBvZiB0aGUgaW5vZGUgZGF0YSBzdHJ1Y3R1cmUgKGluIHRoZSBpbm9kZSB0YWJsZSkKK29mIHRoZSBpbm9kZQorLklSIGZpbGVzcGVjIC4KKy5UUAorLkJJIGluaXRfZmlsZXN5cyAiIGRldmljZSBibG9ja3NpemUiCitDcmVhdGUgYW4gZXh0MiBmaWxlIHN5c3RlbSBvbgorLkkgZGV2aWNlCit3aXRoIGRldmljZSBzaXplCisuSVIgYmxvY2tzaXplIC4KK05vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGZ1bGx5IGluaXRpYWxpemUgYWxsIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXM7Cit0byBkbyB0aGlzLCB1c2UgdGhlCisuQlIgbWtlMmZzICg4KQorcHJvZ3JhbS4gIFRoaXMgaXMganVzdCBhIGNhbGwgdG8gdGhlIGxvdy1sZXZlbCBsaWJyYXJ5LCB3aGljaCBzZXRzIHVwCit0aGUgc3VwZXJibG9jayBhbmQgYmxvY2sgZGVzY3JpcHRvcnMuCisuVFAKKy5CSSBraWxsX2ZpbGUgIiBmaWxlc3BlYyIKK0RlYWxsb2NhdGUgdGhlIGlub2RlCisuSSBmaWxlc3BlYworYW5kIGl0cyBibG9ja3MuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCByZW1vdmUgYW55IGRpcmVjdG9yeQorZW50cmllcyAoaWYgYW55KSB0byB0aGlzIGlub2RlLiAgU2VlIHRoZQorLkJSIHJtICgxKQorY29tbWFuZCBpZiB5b3Ugd2lzaCB0byB1bmxpbmsgYSBmaWxlLgorLlRQCisuQkkgbGNkICIgZGlyZWN0b3J5IgorQ2hhbmdlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoZQorLkIgZGVidWdmcworcHJvY2VzcyB0bworLkkgZGlyZWN0b3J5CitvbiB0aGUgbmF0aXZlIGZpbGVzeXN0ZW0uCisuVFAKKy5CSSBsbiAiIGZpbGVzcGVjIGRlc3RfZmlsZSIKK0NyZWF0ZSBhIGxpbmsgbmFtZWQKKy5JIGRlc3RfZmlsZQord2hpY2ggaXMgYSBoYXJkIGxpbmsgdG8KKy5JUiBmaWxlc3BlYyAuCitOb3RlIHRoaXMgZG9lcyBub3QgYWRqdXN0IHRoZSBpbm9kZSByZWZlcmVuY2UgY291bnRzLgorLlRQCisuQkkgbG9nZHVtcCAiIFstYWNzXSBbLWIgYmxvY2tdIFstaSBmaWxlc3BlY10gWy1mIGpvdXJuYWxfZmlsZV0gW291dHB1dF9maWxlXSIKK0R1bXAgdGhlIGNvbnRlbnRzIG9mIHRoZSBleHQzIGpvdXJuYWwuICBCeSBkZWZhdWx0LCBkdW1wIHRoZSBqb3VybmFsIGlub2RlIGFzCitzcGVjaWZpZWQgaW4gdGhlIHN1cGVyYmxvY2suICBIb3dldmVyLCB0aGlzIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlCisuSSBcLWkKK29wdGlvbiwgd2hpY2ggZHVtcHMgdGhlIGpvdXJuYWwgZnJvbSB0aGUgaW50ZXJuYWwgaW5vZGUgZ2l2ZW4gYnkKKy5JUiBmaWxlc3BlYyAuCitBIHJlZ3VsYXIgZmlsZSBjb250YWluaW5nIGpvdXJuYWwgZGF0YSBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZQorLkkgXC1mCitvcHRpb24uICBGaW5hbGx5LCB0aGUKKy5JIFwtcworb3B0aW9uIHV0aWxpemVzIHRoZSBiYWNrdXAgaW5mb3JtYXRpb24gaW4gdGhlIHN1cGVyYmxvY2sgdG8gbG9jYXRlIHRoZQoram91cm5hbC4KKy5JUAorVGhlCisuSSBcLWEKK29wdGlvbiBjYXVzZXMgdGhlCisuQiBsb2dkdW1wCitwcm9ncmFtIHRvIHByaW50IHRoZSBjb250ZW50cyBvZiBhbGwgb2YgdGhlIGRlc2NyaXB0b3IgYmxvY2tzLgorVGhlCisuSSBcLWIKK29wdGlvbiBjYXVzZXMKKy5CIGxvZ2R1bXAKK3RvIHByaW50IGFsbCBqb3VybmFsIHJlY29yZHMgdGhhdCBhcmUgcmVmZXIgdG8gdGhlIHNwZWNpZmllZCBibG9jay4KK1RoZQorLkkgXC1jCitvcHRpb24gd2lsbCBwcmludCBvdXQgdGhlIGNvbnRlbnRzIG9mIGFsbCBvZiB0aGUgZGF0YSBibG9ja3Mgc2VsZWN0ZWQgYnkKK3RoZQorLkkgXC1hCithbmQKKy5JIFwtYgorb3B0aW9ucy4KKy5UUAorLkJJIGxzICIgWy1kXSBbLWxdIFstcF0gZmlsZXNwZWMiCitQcmludCBhIGxpc3Rpbmcgb2YgdGhlIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkKKy5JUiBmaWxlc3BlYyAuCitUaGUKKy5JIFwtZAorZmxhZyB3aWxsIGxpc3QgZGVsZXRlZCBlbnRyaWVzIGluIHRoZSBkaXJlY3RvcnkuCitUaGUKKy5JIFwtbAorZmxhZyB3aWxsIGxpc3QgZmlsZXMgdXNpbmcgYSBtb3JlIHZlcmJvc2UgZm9ybWF0LgorVGhlCisuSSBcLXAKK2ZsYWcgd2lsbCBsaXN0IHRoZSBmaWxlcyBpbiBhIGZvcm1hdCB3aGljaCBpcyBtb3JlIGVhc2lseSBwYXJzYWJsZSBieQorc2NyaXB0cywgYXMgd2VsbCBhcyBtYWtpbmcgaXQgbW9yZSBjbGVhciB3aGVuIHRoZXJlIGFyZSBzcGFjZXMgb3Igb3RoZXIKK25vbi1wcmludGluZyBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQgb2YgZmlsZW5hbWVzLgorLlRQCisuQkkgbGlzdF9kZWxldGVkX2lub2RlcyAiIFtsaW1pdF0iCitMaXN0IGRlbGV0ZWQgaW5vZGVzLCBvcHRpb25hbGx5IGxpbWl0ZWQgdG8gdGhvc2UgZGVsZXRlZCB3aXRoaW4KKy5JIGxpbWl0CitzZWNvbmRzIGFnby4gIEFsc28gYXZhaWxhYmxlIGFzCisuQlIgbHNkZWwgLgorLklQCitUaGlzIGNvbW1hbmQgd2FzIHVzZWZ1bCBmb3IgcmVjb3ZlcmluZyBmcm9tIGFjY2lkZW50YWwgZmlsZSBkZWxldGlvbnMKK2ZvciBleHQyIGZpbGUgc3lzdGVtcy4gIFVuZm9ydHVuYXRlbHksIGl0IGlzIG5vdCB1c2VmdWwgZm9yIHRoaXMgcHVycG9zZQoraWYgdGhlIGZpbGVzIHdlcmUgZGVsZXRlZCB1c2luZyBleHQzIG9yIGV4dDQsIHNpbmNlIHRoZSBpbm9kZSdzCitkYXRhIGJsb2NrcyBhcmUgbm8gbG9uZ2VyIGF2YWlsYWJsZSBhZnRlciB0aGUgaW5vZGUgaXMgcmVsZWFzZWQuCisuVFAKKy5CSSBtb2RpZnlfaW5vZGUgIiBmaWxlc3BlYyIKK01vZGlmeSB0aGUgY29udGVudHMgb2YgdGhlIGlub2RlIHN0cnVjdHVyZSBpbiB0aGUgaW5vZGUKKy5JUiBmaWxlc3BlYyAuCitBbHNvIGF2YWlsYWJsZSBhcworLkJSIG1pIC4KKy5UUAorLkJJIG1rZGlyICIgZmlsZXNwZWMiCitNYWtlIGEgZGlyZWN0b3J5LgorLlRQCisuQkkgbWtub2QgIiBmaWxlc3BlYyBbcHxbW2N8Yl0gbWFqb3IgbWlub3JdXSIKK0NyZWF0ZSBhIHNwZWNpYWwgZGV2aWNlIGZpbGUgKGEgbmFtZWQgcGlwZSwgY2hhcmFjdGVyIG9yIGJsb2NrIGRldmljZSkuCitJZiBhIGNoYXJhY3RlciBvciBibG9jayBkZXZpY2UgaXMgdG8gYmUgbWFkZSwgdGhlCisuSSBtYWpvcgorYW5kCisuSSBtaW5vcgorZGV2aWNlIG51bWJlcnMgbXVzdCBiZSBzcGVjaWZpZWQuCisuVFAKKy5CSSBuY2hlY2sgIiBbLWNdIGlub2RlX251bSAuLi4iCitUYWtlIHRoZSByZXF1ZXN0ZWQgbGlzdCBvZiBpbm9kZSBudW1iZXJzLCBhbmQgcHJpbnQgYSBsaXN0aW5nIG9mIHBhdGhuYW1lcwordG8gdGhvc2UgaW5vZGVzLiAgVGhlCisuSSAtYworZmxhZyB3aWxsIGVuYWJsZSBjaGVja2luZyB0aGUgZmlsZSB0eXBlIGluZm9ybWF0aW9uIGluIHRoZSBkaXJlY3RvcnkKK2VudHJ5IHRvIG1ha2Ugc3VyZSBpdCBtYXRjaGVzIHRoZSBpbm9kZSdzIHR5cGUuCisuVFAKKy5CSSBvcGVuICIgWy13ZWZpY0RdIFstYiBibG9ja3NpemVdIFstcyBzdXBlcmJsb2NrXSBkZXZpY2UiCitPcGVuIGEgZmlsZXN5c3RlbSBmb3IgZWRpdGluZy4gIFRoZQorLkkgLWYKK2ZsYWcgZm9yY2VzIHRoZSBmaWxlc3lzdGVtIHRvIGJlIG9wZW5lZCBldmVuIGlmIHRoZXJlIGFyZSBzb21lIHVua25vd24KK29yIGluY29tcGF0aWJsZSBmaWxlc3lzdGVtIGZlYXR1cmVzIHdoaWNoIHdvdWxkIG5vcm1hbGx5CitwcmV2ZW50IHRoZSBmaWxlc3lzdGVtIGZyb20gYmVpbmcgb3BlbmVkLiAgVGhlCisuSSAtZQorZmxhZyBjYXVzZXMgdGhlIGZpbGVzeXN0ZW0gdG8gYmUgb3BlbmVkIGluIGV4Y2x1c2l2ZSBtb2RlLiAgVGhlCisuSVIgLWIgIiwgIiAtYyAiLCAiIC1pICIsICIgLXMgIiwgIiAtdyAiLCBhbmQgIiAtRAorb3B0aW9ucyBiZWhhdmUgdGhlIHNhbWUgYXMgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIHRvCisuQlIgZGVidWdmcyAuCisuVFAKKy5CSSBwdW5jaCAiIGZpbGVzcGVjIHN0YXJ0X2JsayBbZW5kX2Jsa10iCitEZWxldGUgdGhlIGJsb2NrcyBpbiB0aGUgaW5vZGUgcmFuZ2luZyBmcm9tCisuSSBzdGFydF9ibGsKK3RvCisuSVIgZW5kX2JsayAuCitJZgorLkkgZW5kX2JsaworaXMgb21pdHRlZCB0aGVuIHRoaXMgY29tbWFuZCB3aWxsIGZ1bmN0aW9uIGFzIGEgdHJ1bmNhdGUgY29tbWFuZDsgdGhhdAoraXMsIGFsbCBvZiB0aGUgYmxvY2tzIHN0YXJ0aW5nIGF0CisuSSBzdGFydF9ibGsKK3Rocm91Z2ggdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSB3aWxsIGJlIGRlYWxsb2NhdGVkLgorLlRQCisuQkkgc3ltbGluayAiIGZpbGVzcGVjIHRhcmdldCIKK01ha2UgYSBzeW1ib2xpYyBsaW5rLgorLlRQCisuQiBwd2QKK1ByaW50IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorLlRQCisuQiBxdWl0CitRdWl0CisuQiBkZWJ1Z2ZzCisuVFAKKy5CSSByZHVtcCAiIGRpcmVjdG9yeVsuLi5dIGRlc3RpbmF0aW9uIgorUmVjdXJzaXZlbHkgZHVtcAorLklSIGRpcmVjdG9yeSAsCitvciBtdWx0aXBsZQorLklSIGRpcmVjdG9yaWVzICwKK2FuZCBhbGwgaXRzIGNvbnRlbnRzIChpbmNsdWRpbmcgcmVndWxhciBmaWxlcywgc3ltYm9saWMgbGlua3MsIGFuZCBvdGhlcgorZGlyZWN0b3JpZXMpIGludG8gdGhlIG5hbWVkCisuSVIgZGVzdGluYXRpb24gLAord2hpY2ggc2hvdWxkIGJlIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSBvbiB0aGUgbmF0aXZlIGZpbGVzeXN0ZW0uCisuVFAKKy5CSSBybSAiIHBhdGhuYW1lIgorVW5saW5rCisuSVIgcGF0aG5hbWUgLgorSWYgdGhpcyBjYXVzZXMgdGhlIGlub2RlIHBvaW50ZWQgdG8gYnkKKy5JIHBhdGhuYW1lCit0byBoYXZlIG5vIG90aGVyIHJlZmVyZW5jZXMsIGRlYWxsb2NhdGUgdGhlIGZpbGUuICBUaGlzIGNvbW1hbmQgZnVuY3Rpb25zCithcyB0aGUgdW5saW5rKCkgc3lzdGVtIGNhbGwuCisuSQorLlRQCisuQkkgcm1kaXIgIiBmaWxlc3BlYyIKK1JlbW92ZSB0aGUgZGlyZWN0b3J5CisuSVIgZmlsZXNwZWMgLgorLlRQCisuQkkgc2V0YiAiIGJsb2NrIFtjb3VudF0iCitNYXJrIHRoZSBibG9jayBudW1iZXIKKy5JIGJsb2NrCithcyBhbGxvY2F0ZWQuCitJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQKKy5JIGNvdW50CitpcyBwcmVzZW50LCB0aGVuCisuSSBjb3VudAorYmxvY2tzIHN0YXJ0aW5nIGF0IGJsb2NrIG51bWJlcgorLkkgYmxvY2sKK3dpbGwgYmUgbWFya2VkIGFzIGFsbG9jYXRlZC4KKy5UUAorLkJJIHNldF9ibG9ja19ncm91cCAiIGJnbnVtIGZpZWxkIHZhbHVlIgorTW9kaWZ5IHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9yIHNwZWNpZmllZCBieQorLkkgYmdudW0KK3NvIHRoYXQgdGhlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgZmllbGQKKy5JIGZpZWxkCitoYXMgdmFsdWUKKy5JUiB2YWx1ZSAuCitBbHNvIGF2YWlsYWJsZSBhcworLkJSIHNldF9iZyAuCisuVFAKKy5CSSBzZXRpICIgZmlsZXNwZWMgW251bV0iCitNYXJrIGlub2RlCisuSSBmaWxlc3BlYworYXMgaW4gdXNlIGluIHRoZSBpbm9kZSBiaXRtYXAuICBJZgorLkkgbnVtCitpcyBzcGVjaWZpZWQsIGFsc28gc2V0IG51bS0xIGlub2RlcyBhZnRlciB0aGUgc3BlY2lmaWVkIGlub2RlLgorLlRQCisuQkkgc2V0X2lub2RlX2ZpZWxkICIgZmlsZXNwZWMgZmllbGQgdmFsdWUiCitNb2RpZnkgdGhlIGlub2RlIHNwZWNpZmllZCBieQorLkkgZmlsZXNwZWMKK3NvIHRoYXQgdGhlIGlub2RlIGZpZWxkCisuSSBmaWVsZAoraGFzIHZhbHVlCisuSSB2YWx1ZS4KK1RoZSBsaXN0IG9mIHZhbGlkIGlub2RlIGZpZWxkcyB3aGljaCBjYW4gYmUgc2V0IHZpYSB0aGlzIGNvbW1hbmQKK2NhbiBiZSBkaXNwbGF5ZWQgYnkgdXNpbmcgdGhlIGNvbW1hbmQ6CisuQiBzZXRfaW5vZGVfZmllbGQgLWwKK0Fsc28gYXZhaWxhYmxlIGFzCisuQlIgc2lmIC4KKy5UUAorLkJJIHNldF9tbXBfdmFsdWUgIiBmaWVsZCB2YWx1ZSIKK01vZGlmeSB0aGUgbXVsdGlwbGUtbW91bnQgcHJvdGVjdGlvbiAoTU1QKSBkYXRhIHNvIHRoYXQgdGhlIE1NUCBmaWVsZAorLkkgZmllbGQKK2hhcyB2YWx1ZQorLkkgdmFsdWUuCitUaGUgbGlzdCBvZiB2YWxpZCBNTVAgZmllbGRzIHdoaWNoIGNhbiBiZSBzZXQgdmlhIHRoaXMgY29tbWFuZAorY2FuIGJlIGRpc3BsYXllZCBieSB1c2luZyB0aGUgY29tbWFuZDoKKy5CIHNldF9tbXBfdmFsdWUgLWwKK0Fsc28gYXZhaWxhYmxlIGFzCisuQlIgc21tcCAuCisuVFAKKy5CSSBzZXRfc3VwZXJfdmFsdWUgIiBmaWVsZCB2YWx1ZSIKK1NldCB0aGUgc3VwZXJibG9jayBmaWVsZAorLkkgZmllbGQKK3RvCisuSSB2YWx1ZS4KK1RoZSBsaXN0IG9mIHZhbGlkIHN1cGVyYmxvY2sgZmllbGRzIHdoaWNoIGNhbiBiZSBzZXQgdmlhIHRoaXMgY29tbWFuZAorY2FuIGJlIGRpc3BsYXllZCBieSB1c2luZyB0aGUgY29tbWFuZDoKKy5CIHNldF9zdXBlcl92YWx1ZSAtbAorQWxzbyBhdmFpbGFibGUgYXMKKy5CUiBzc3YgLgorLlRQCisuQkkgc2hvd19zdXBlcl9zdGF0cyAiIFstaF0iCitMaXN0IHRoZSBjb250ZW50cyBvZiB0aGUgc3VwZXIgYmxvY2sgYW5kIHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9ycy4gIElmIHRoZQorLkkgLWgKK2ZsYWcgaXMgZ2l2ZW4sIG9ubHkgcHJpbnQgb3V0IHRoZSBzdXBlcmJsb2NrIGNvbnRlbnRzLiBBbHNvIGF2YWlsYWJsZSBhcworLkJSIHN0YXRzIC4KKy5UUAorLkJJIHN0YXQgIiBmaWxlc3BlYyIKK0Rpc3BsYXkgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbm9kZSBzdHJ1Y3R1cmUgb2YgdGhlIGlub2RlCisuSVIgZmlsZXNwZWMgLgorLlRQCisuQkkgdGVzdGIgIiBibG9jayBbY291bnRdIgorVGVzdCBpZiB0aGUgYmxvY2sgbnVtYmVyCisuSSBibG9jaworaXMgbWFya2VkIGFzIGFsbG9jYXRlZCBpbiB0aGUgYmxvY2sgYml0bWFwLgorSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50CisuSSBjb3VudAoraXMgcHJlc2VudCwgdGhlbgorLkkgY291bnQKK2Jsb2NrcyBzdGFydGluZyBhdCBibG9jayBudW1iZXIKKy5JIGJsb2NrCit3aWxsIGJlIHRlc3RlZC4KKy5UUAorLkJJIHRlc3RpICIgZmlsZXNwZWMiCitUZXN0IGlmIHRoZSBpbm9kZQorLkkgZmlsZXNwZWMKK2lzIG1hcmtlZCBhcyBhbGxvY2F0ZWQgaW4gdGhlIGlub2RlIGJpdG1hcC4KKy5UUAorLkJJIHVuZGVsICIgPGlub2RlX251bWJlcj4gW3BhdGhuYW1lXSIKK1VuZGVsZXRlIHRoZSBzcGVjaWZpZWQgaW5vZGUgbnVtYmVyICh3aGljaCBtdXN0IGJlIHN1cnJvdW5kZWQgYnkgYW5nbGUKK2JyYWNrZXRzKSBzbyB0aGF0IGl0IGFuZCBpdHMgYmxvY2tzIGFyZSBtYXJrZWQgaW4gdXNlLCBhbmQgb3B0aW9uYWxseQorbGluayB0aGUgcmVjb3ZlcmVkIGlub2RlIHRvIHRoZSBzcGVjaWZpZWQgcGF0aG5hbWUuICBUaGUKKy5CIGUyZnNjaworY29tbWFuZCBzaG91bGQgYWx3YXlzIGJlIHJ1biBhZnRlciB1c2luZyB0aGUKKy5CIHVuZGVsCitjb21tYW5kIHRvIHJlY292ZXIgZGVsZXRlZCBmaWxlcy4KKy5JUAorTm90ZSB0aGF0IGlmIHlvdSBhcmUgcmVjb3ZlcmluZyBhIGxhcmdlIG51bWJlciBvZiBkZWxldGVkIGZpbGVzLCBsaW5raW5nCit0aGUgaW5vZGUgdG8gYSBkaXJlY3RvcnkgbWF5IHJlcXVpcmUgdGhlIGRpcmVjdG9yeSB0byBiZSBleHBhbmRlZCwgd2hpY2gKK2NvdWxkIGFsbG9jYXRlIGEgYmxvY2sgdGhhdCBoYWQgYmVlbiB1c2VkIGJ5IG9uZSBvZiB0aGUKK3lldC10by1iZS11bmRlbGV0ZWQgZmlsZXMuICBTbyBpdCBpcyBzYWZlciB0byB1bmRlbGV0ZSBhbGwgb2YgdGhlCitpbm9kZXMgd2l0aG91dCBzcGVjaWZ5aW5nIGEgZGVzdGluYXRpb24gcGF0aG5hbWUsIGFuZCB0aGVuIGluIGEgc2VwYXJhdGUKK3Bhc3MsIHVzZSB0aGUgZGVidWdmcworLkIgbGluaworY29tbWFuZCB0byBsaW5rIHRoZSBpbm9kZSB0byB0aGUgZGVzdGluYXRpb24gcGF0aG5hbWUsIG9yIHVzZQorLkIgZTJmc2NrCit0byBjaGVjayB0aGUgZmlsZXN5c3RlbSBhbmQgbGluayBhbGwgb2YgdGhlIHJlY292ZXJlZCBpbm9kZXMgdG8gdGhlCitsb3N0K2ZvdW5kIGRpcmVjdG9yeS4KKy5UUAorLkJJIHVubGluayAiIHBhdGhuYW1lIgorUmVtb3ZlIHRoZSBsaW5rIHNwZWNpZmllZCBieQorLkkgcGF0aG5hbWUKK3RvIGFuIGlub2RlLiAgTm90ZSB0aGlzIGRvZXMgbm90IGFkanVzdCB0aGUgaW5vZGUgcmVmZXJlbmNlIGNvdW50cy4KKy5UUAorLkJJIHdyaXRlICIgc291cmNlX2ZpbGUgb3V0X2ZpbGUiCitDb3B5IHRoZSBjb250ZW50cyBvZgorLkkgc291cmNlX2ZpbGUKK2ludG8gYSBuZXdseS1jcmVhdGVkIGZpbGUgaW4gdGhlIGZpbGVzeXN0ZW0gbmFtZWQKKy5JUiBvdXRfZmlsZSAuCisuVFAKKy5CSSB6YXBfYmxvY2sgIiBbLWYgZmlsZXNwZWNdIFstbyBvZmZzZXRdIFstbCBsZW5ndGhdIFstcCBwYXR0ZXJuXSBibG9ja19udW0iCisuVFAKK092ZXJ3cml0ZSB0aGUgYmxvY2sgc3BlY2lmaWVkIGJ5CisuSSBibG9ja19udW0KK3dpdGggemVybyAoTlVMKSBieXRlcywgb3IgaWYKKy5JIC1wCitpcyBnaXZlbiB1c2UgdGhlIGJ5dGUgc3BlY2lmaWVkIGJ5CisuSVIgcGF0dGVybiAuCitJZgorLkkgLWYKK2lzIGdpdmVuIHRoZW4KKy5JIGJsb2NrX251bQoraXMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIGdpdmVuIGJ5CisuSVIgZmlsZXNwZWMgLgorVGhlCisuSSAtbworYW5kCisuSSAtbAorb3B0aW9ucyBsaW1pdCB0aGUgcmFuZ2Ugb2YgYnl0ZXMgdG8gemFwIHRvIHRoZSBzcGVjaWZpZWQKKy5JIG9mZnNldAorYW5kCisuSSBsZW5ndGgKK3JlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgYmxvY2suCisuVFAKKy5CSSB6YXBfYmxvY2sgIiBbLWYgZmlsZXNwZWNdIFstYiBiaXRdIGJsb2NrX251bSIKK0JpdC1mbGlwIHBvcnRpb25zIG9mIHRoZSBwaHlzaWNhbAorLklSIGJsb2NrX251bSAuCitJZgorLkkgLWYKK2lzIGdpdmVuLCB0aGVuCisuSSBibG9ja19udW0KK2lzIGEgbG9naWNhbCBibG9jayByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YKKy5JUiBmaWxlc3BlYyAuCisuU0ggRU5WSVJPTk1FTlQgVkFSSUFCTEVTCisuVFAKKy5CIERFQlVHRlNfUEFHRVIsIFBBR0VSCitUaGUKKy5CIGRlYnVnZnMKK3Byb2dyYW0gYWx3YXlzIHBpcGVzIHRoZSBvdXRwdXQgb2YgdGhlIHNvbWUgY29tbWFuZHMgdGhyb3VnaCBhCitwYWdlciBwcm9ncmFtLiAgVGhlc2UgY29tbWFuZHMgaW5jbHVkZToKKy5JUiBzaG93X3N1cGVyX3N0YXRzICIgKCIgc3RhdHMgKSwKKy5JUiBsaXN0X2RpcmVjdG9yeSAiICgiIGxzICksCisuSVIgc2hvd19pbm9kZV9pbmZvICIgKCIgc3RhdCApLAorLklSIGxpc3RfZGVsZXRlZF9pbm9kZXMgIiAoIiBsc2RlbCApLAorYW5kCisuSVIgaHRyZWVfZHVtcCAuCitUaGUgc3BlY2lmaWMgcGFnZXIgY2FuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGJ5IHRoZQorLkIgREVCVUdGU19QQUdFUgorZW52aXJvbm1lbnQgdmFyaWFibGUsIGFuZCBpZiBpdCBpcyBub3Qgc2V0LCBieSB0aGUKKy5CIFBBR0VSCitlbnZpcm9ubWVudCB2YXJpYWJsZS4KKy5JUAorTm90ZSB0aGF0IHNpbmNlIGEgcGFnZXIgaXMgYWx3YXlzIHVzZWQsIHRoZQorLkJSIGxlc3MgKDEpCitwYWdlciBpcyBub3QgcGFydGljdWxhcmx5IGFwcHJvcHJpYXRlLCBzaW5jZSBpdCBjbGVhcnMgdGhlIHNjcmVlbiBiZWZvcmUKK2Rpc3BsYXlpbmcgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZCBhbmQgY2xlYXJzIHRoZSBvdXRwdXQgdGhlIHNjcmVlbgord2hlbiB0aGUgcGFnZXIgaXMgZXhpdGVkLiAgTWFueSB1c2VycyBwcmVmZXIgdG8gdXNlIHRoZQorLkJSIGxlc3MgKDEpCitwYWdlciBmb3IgbW9zdCBwdXJwb3Nlcywgd2hpY2ggaXMgd2h5IHRoZQorLkIgREVCVUdGU19QQUdFUgorZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgYXZhaWxhYmxlIHRvIG92ZXJyaWRlIHRoZSBtb3JlIGdlbmVyYWwKKy5CIFBBR0VSCitlbnZpcm9ubWVudCB2YXJpYWJsZS4KKy5TSCBBVVRIT1IKKy5CIGRlYnVnZnMKK3dhcyB3cml0dGVuIGJ5IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+LgorLlNIIFNFRSBBTFNPCisuQlIgZHVtcGUyZnMgKDgpLAorLkJSIHR1bmUyZnMgKDgpLAorLkJSIGUyZnNjayAoOCksCisuQlIgbWtlMmZzICg4KSwKKy5CUiBleHQ0ICg1KQpkaWZmIC0tZ2l0IGEvZGVidWdmcy9kZWJ1Z2ZzLmMgYi9kZWJ1Z2ZzL2RlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDIzNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvZGVidWdmcy9kZWJ1Z2ZzLmMKQEAgLTAsMCArMSwyNTU3IEBACisvKgorICogZGVidWdmcy5jIC0tLSBhIHByb2dyYW0gd2hpY2ggYWxsb3dzIHlvdSB0byBhdHRhY2ggYW4gZXh0MmZzCisgKiBmaWxlc3lzdGVtIGFuZCBwbGF5IHdpdGggaXQuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzIFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorICoKKyAqIE1vZGlmaWNhdGlvbnMgYnkgUm9iZXJ0IFNhbmRlcnMgPGd0ODEzNGJAcHJpc20uZ2F0ZWNoLmVkdT4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGludCBvcHRpbmQ7CitleHRlcm4gY2hhciAqb3B0YXJnOworI2VuZGlmCisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgImRlYnVnZnMuaCIKKyNpbmNsdWRlICJ1dWlkL3V1aWQuaCIKKyNpbmNsdWRlICJlMnAvZTJwLmgiCisKKyNpbmNsdWRlIDxleHQyZnMvZXh0Ml9leHRfYXR0ci5oPgorCisjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorI2luY2x1ZGUgImpmc191c2VyLmgiCisKKyNpZm5kZWYgQlVGU0laCisjZGVmaW5lIEJVRlNJWiA4MTkyCisjZW5kaWYKKworLyogNjRLaUIgaXMgdGhlIG1pbmltaXVtIGJsa3NpemUgdG8gYmVzdCBtaW5pbWl6ZSBzeXN0ZW0gY2FsbCBvdmVyaGVhZC4gKi8KKyNpZm5kZWYgSU9fQlVGU0laRQorI2RlZmluZSBJT19CVUZTSVpFIDY0KjEwMjQKKyNlbmRpZgorCisvKiBCbG9jayBzaXplIGZvciBgc3RfYmxvY2tzJyAqLworI2lmbmRlZiBTX0JMS1NJWkUKKyNkZWZpbmUgU19CTEtTSVpFIDUxMgorI2VuZGlmCisKK3NzX3JlcXVlc3RfdGFibGUgKmV4dHJhX2NtZHM7Citjb25zdCBjaGFyICpkZWJ1Z19wcm9nX25hbWU7CitpbnQgc2NpX2lkeDsKKworZXh0Ml9maWxzeXMJY3VycmVudF9mcyA9IE5VTEw7CitxdW90YV9jdHhfdAljdXJyZW50X3FjdHg7CitleHQyX2lub190CXJvb3QsIGN3ZDsKKworc3RhdGljIHZvaWQgb3Blbl9maWxlc3lzdGVtKGNoYXIgKmRldmljZSwgaW50IG9wZW5fZmxhZ3MsIGJsazY0X3Qgc3VwZXJibG9jaywKKwkJCSAgICBibGs2NF90IGJsb2Nrc2l6ZSwgaW50IGNhdGFzdHJvcGhpYywKKwkJCSAgICBjaGFyICpkYXRhX2ZpbGVuYW1lKQoreworCWludAlyZXR2YWw7CisJaW9fY2hhbm5lbCBkYXRhX2lvID0gMDsKKworCWlmIChzdXBlcmJsb2NrICE9IDAgJiYgYmxvY2tzaXplID09IDApIHsKKwkJY29tX2VycihkZXZpY2UsIDAsICJpZiB5b3Ugc3BlY2lmeSB0aGUgc3VwZXJibG9jaywgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHRoZSBibG9jayBzaXplIik7CisJCWN1cnJlbnRfZnMgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJaWYgKGRhdGFfZmlsZW5hbWUpIHsKKwkJaWYgKChvcGVuX2ZsYWdzICYgRVhUMl9GTEFHX0lNQUdFX0ZJTEUpID09IDApIHsKKwkJCWNvbV9lcnIoZGV2aWNlLCAwLAorCQkJCSJUaGUgLWQgb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2hlbiByZWFkaW5nIGFuIGUyaW1hZ2UgZmlsZSIpOworCQkJY3VycmVudF9mcyA9IE5VTEw7CisJCQlyZXR1cm47CisJCX0KKwkJcmV0dmFsID0gdW5peF9pb19tYW5hZ2VyLT5vcGVuKGRhdGFfZmlsZW5hbWUsIDAsICZkYXRhX2lvKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycihkYXRhX2ZpbGVuYW1lLCAwLCAid2hpbGUgb3BlbmluZyBkYXRhIHNvdXJjZSIpOworCQkJY3VycmVudF9mcyA9IE5VTEw7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoY2F0YXN0cm9waGljICYmIChvcGVuX2ZsYWdzICYgRVhUMl9GTEFHX1JXKSkgeworCQljb21fZXJyKGRldmljZSwgMCwKKwkJCSJvcGVuaW5nIHJlYWQtb25seSBiZWNhdXNlIG9mIGNhdGFzdHJvcGhpYyBtb2RlIik7CisJCW9wZW5fZmxhZ3MgJj0gfkVYVDJfRkxBR19SVzsKKwl9CisJaWYgKGNhdGFzdHJvcGhpYykKKwkJb3Blbl9mbGFncyB8PSBFWFQyX0ZMQUdfU0tJUF9NTVA7CisKKwlyZXR2YWwgPSBleHQyZnNfb3BlbihkZXZpY2UsIG9wZW5fZmxhZ3MsIHN1cGVyYmxvY2ssIGJsb2Nrc2l6ZSwKKwkJCSAgICAgdW5peF9pb19tYW5hZ2VyLCAmY3VycmVudF9mcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGRldmljZSwgcmV0dmFsLCAid2hpbGUgb3BlbmluZyBmaWxlc3lzdGVtIik7CisJCWN1cnJlbnRfZnMgPSBOVUxMOworCQlyZXR1cm47CisJfQorCWN1cnJlbnRfZnMtPmRlZmF1bHRfYml0bWFwX3R5cGUgPSBFWFQyRlNfQk1BUDY0X1JCVFJFRTsKKworCWlmIChjYXRhc3Ryb3BoaWMpCisJCWNvbV9lcnIoZGV2aWNlLCAwLCAiY2F0YXN0cm9waGljIG1vZGUgLSBub3QgcmVhZGluZyBpbm9kZSBvciBncm91cCBiaXRtYXBzIik7CisJZWxzZSB7CisJCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlX2JpdG1hcChjdXJyZW50X2ZzKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycihkZXZpY2UsIHJldHZhbCwgIndoaWxlIHJlYWRpbmcgaW5vZGUgYml0bWFwIik7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQlyZXR2YWwgPSBleHQyZnNfcmVhZF9ibG9ja19iaXRtYXAoY3VycmVudF9mcyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoZGV2aWNlLCByZXR2YWwsICJ3aGlsZSByZWFkaW5nIGJsb2NrIGJpdG1hcCIpOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwl9CisKKwlpZiAoZGF0YV9pbykgeworCQlyZXR2YWwgPSBleHQyZnNfc2V0X2RhdGFfaW8oY3VycmVudF9mcywgZGF0YV9pbyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoZGV2aWNlLCByZXR2YWwsCisJCQkJIndoaWxlIHNldHRpbmcgZGF0YSBzb3VyY2UiKTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJfQorCisJcm9vdCA9IGN3ZCA9IEVYVDJfUk9PVF9JTk87CisJcmV0dXJuOworCitlcnJvdXQ6CisJcmV0dmFsID0gZXh0MmZzX2Nsb3NlX2ZyZWUoJmN1cnJlbnRfZnMpOworCWlmIChyZXR2YWwpCisJCWNvbV9lcnIoZGV2aWNlLCByZXR2YWwsICJ3aGlsZSB0cnlpbmcgdG8gY2xvc2UgZmlsZXN5c3RlbSIpOworfQorCit2b2lkIGRvX29wZW5fZmlsZXN5cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CWMsIGVycjsKKwlpbnQJY2F0YXN0cm9waGljID0gMDsKKwlibGs2NF90CXN1cGVyYmxvY2sgPSAwOworCWJsazY0X3QJYmxvY2tzaXplID0gMDsKKwlpbnQJb3Blbl9mbGFncyA9IEVYVDJfRkxBR19TT0ZUU1VQUF9GRUFUVVJFUyB8IEVYVDJfRkxBR182NEJJVFM7IAorCWNoYXIJKmRhdGFfZmlsZW5hbWUgPSAwOworCisJcmVzZXRfZ2V0b3B0KCk7CisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiaXdmZWNiOnM6ZDpEIikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnaSc6CisJCQlvcGVuX2ZsYWdzIHw9IEVYVDJfRkxBR19JTUFHRV9GSUxFOworCQkJYnJlYWs7CisJCWNhc2UgJ3cnOgorI2lmZGVmIFJFQURfT05MWQorCQkJZ290byBwcmludF91c2FnZTsKKyNlbHNlCisJCQlvcGVuX2ZsYWdzIHw9IEVYVDJfRkxBR19SVzsKKyNlbmRpZiAvKiBSRUFEX09OTFkgKi8KKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCW9wZW5fZmxhZ3MgfD0gRVhUMl9GTEFHX0ZPUkNFOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJb3Blbl9mbGFncyB8PSBFWFQyX0ZMQUdfRVhDTFVTSVZFOworCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJY2F0YXN0cm9waGljID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCWRhdGFfZmlsZW5hbWUgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAnRCc6CisJCQlvcGVuX2ZsYWdzIHw9IEVYVDJfRkxBR19ESVJFQ1RfSU87CisJCQlicmVhazsKKwkJY2FzZSAnYic6CisJCQlibG9ja3NpemUgPSBwYXJzZV91bG9uZyhvcHRhcmcsIGFyZ3ZbMF0sCisJCQkJCQkiYmxvY2sgc2l6ZSIsICZlcnIpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm47CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQllcnIgPSBzdHJ0b2Jsayhhcmd2WzBdLCBvcHRhcmcsCisJCQkJICAgICAgICJzdXBlcmJsb2NrIGJsb2NrIG51bWJlciIsICZzdXBlcmJsb2NrKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIHByaW50X3VzYWdlOworCQl9CisJfQorCWlmIChvcHRpbmQgIT0gYXJnYy0xKSB7CisJCWdvdG8gcHJpbnRfdXNhZ2U7CisJfQorCWlmIChjaGVja19mc19ub3Rfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCW9wZW5fZmlsZXN5c3RlbShhcmd2W29wdGluZF0sIG9wZW5fZmxhZ3MsCisJCQlzdXBlcmJsb2NrLCBibG9ja3NpemUsIGNhdGFzdHJvcGhpYywKKwkJCWRhdGFfZmlsZW5hbWUpOworCXJldHVybjsKKworcHJpbnRfdXNhZ2U6CisJZnByaW50ZihzdGRlcnIsICIlczogVXNhZ2U6IG9wZW4gWy1zIHN1cGVyYmxvY2tdIFstYiBibG9ja3NpemVdICIKKwkJIlstZCBpbWFnZV9maWxlbmFtZV0gWy1jXSBbLWldIFstZl0gWy1lXSBbLURdICIKKyNpZm5kZWYgUkVBRF9PTkxZCisJCSJbLXddICIKKyNlbmRpZgorCQkiPGRldmljZT5cbiIsIGFyZ3ZbMF0pOworfQorCit2b2lkIGRvX2xjZChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaWYgKGFyZ2MgIT0gMikgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogJXMgJXMiLCBhcmd2WzBdLCAiPG5hdGl2ZSBkaXI+Iik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY2hkaXIoYXJndlsxXSkgPT0gLTEpIHsKKwkJY29tX2Vycihhcmd2WzBdLCBlcnJubywKKwkJCSJ3aGlsZSB0cnlpbmcgdG8gY2hhbmdlIG5hdGl2ZSBkaXJlY3RvcnkgdG8gJXMiLAorCQkJYXJndlsxXSk7CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNsb3NlX2ZpbGVzeXN0ZW0oTk9BUkdTKQoreworCWludAlyZXR2YWw7CisKKwlpZiAoY3VycmVudF9mcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfSUJfRElSVFkpIHsKKwkJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlX2JpdG1hcChjdXJyZW50X2ZzKTsKKwkJaWYgKHJldHZhbCkKKwkJCWNvbV9lcnIoImV4dDJmc193cml0ZV9pbm9kZV9iaXRtYXAiLCByZXR2YWwsIDApOworCX0KKwlpZiAoY3VycmVudF9mcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfQkJfRElSVFkpIHsKKwkJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2Jsb2NrX2JpdG1hcChjdXJyZW50X2ZzKTsKKwkJaWYgKHJldHZhbCkKKwkJCWNvbV9lcnIoImV4dDJmc193cml0ZV9ibG9ja19iaXRtYXAiLCByZXR2YWwsIDApOworCX0KKwlpZiAoY3VycmVudF9xY3R4KQorCQlxdW90YV9yZWxlYXNlX2NvbnRleHQoJmN1cnJlbnRfcWN0eCk7CisJcmV0dmFsID0gZXh0MmZzX2Nsb3NlX2ZyZWUoJmN1cnJlbnRfZnMpOworCWlmIChyZXR2YWwpCisJCWNvbV9lcnIoImV4dDJmc19jbG9zZSIsIHJldHZhbCwgMCk7CisJcmV0dXJuOworfQorCit2b2lkIGRvX2Nsb3NlX2ZpbGVzeXMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludAljOworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCXJlc2V0X2dldG9wdCgpOworCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgImEiKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdhJzoKKwkJCWN1cnJlbnRfZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gcHJpbnRfdXNhZ2U7CisJCX0KKwl9CisKKwlpZiAoYXJnYyA+IG9wdGluZCkgeworCXByaW50X3VzYWdlOgorCQljb21fZXJyKDAsIDAsICJVc2FnZTogY2xvc2VfZmlsZXN5cyBbLWFdIik7CisJCXJldHVybjsKKwl9CisKKwljbG9zZV9maWxlc3lzdGVtKCk7Cit9CisKKyNpZm5kZWYgUkVBRF9PTkxZCit2b2lkIGRvX2luaXRfZmlsZXN5cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgcGFyYW07CisJZXJyY29kZV90CXJldHZhbDsKKwlpbnQJCWVycjsKKwlibGs2NF90CQlibG9ja3M7CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAzLCAzLCAiaW5pdGlhbGl6ZSIsCisJCQkJIjxkZXZpY2U+IDxibG9ja3M+IiwgQ0hFQ0tfRlNfTk9UT1BFTikpCisJCXJldHVybjsKKworCW1lbXNldCgmcGFyYW0sIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jaykpOworCWVyciA9IHN0cnRvYmxrKGFyZ3ZbMF0sIGFyZ3ZbMl0sICJibG9ja3MgY291bnQiLCAmYmxvY2tzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisJZXh0MmZzX2Jsb2Nrc19jb3VudF9zZXQoJnBhcmFtLCBibG9ja3MpOworCXJldHZhbCA9IGV4dDJmc19pbml0aWFsaXplKGFyZ3ZbMV0sIDAsICZwYXJhbSwKKwkJCQkgICB1bml4X2lvX21hbmFnZXIsICZjdXJyZW50X2ZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlsxXSwgcmV0dmFsLCAid2hpbGUgaW5pdGlhbGl6aW5nIGZpbGVzeXN0ZW0iKTsKKwkJY3VycmVudF9mcyA9IE5VTEw7CisJCXJldHVybjsKKwl9CisJcm9vdCA9IGN3ZCA9IEVYVDJfUk9PVF9JTk87CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBwcmludF9mZWF0dXJlcyhzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqIHMsIEZJTEUgKmYpCit7CisJaW50CWksIGosIHByaW50ZWQ9MDsKKwlfX3UzMgkqbWFzayA9ICZzLT5zX2ZlYXR1cmVfY29tcGF0LCBtOworCisJZnB1dHMoIkZpbGVzeXN0ZW0gZmVhdHVyZXM6IiwgZik7CisJZm9yIChpPTA7IGkgPDM7IGkrKyxtYXNrKyspIHsKKwkJZm9yIChqPTAsbT0xOyBqIDwgMzI7IGorKywgbTw8PTEpIHsKKwkJCWlmICgqbWFzayAmIG0pIHsKKwkJCQlmcHJpbnRmKGYsICIgJXMiLCBlMnBfZmVhdHVyZTJzdHJpbmcoaSwgbSkpOworCQkJCXByaW50ZWQrKzsKKwkJCX0KKwkJfQorCX0KKwlpZiAocHJpbnRlZCA9PSAwKQorCQlmcHV0cygiKG5vbmUpIiwgZik7CisJZnB1dHMoIlxuIiwgZik7Cit9CisjZW5kaWYgLyogUkVBRF9PTkxZICovCisKK3N0YXRpYyB2b2lkIHByaW50X2JnX29wdHMoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgaW50IG1hc2ssCisJCQkgIGNvbnN0IGNoYXIgKnN0ciwgaW50ICpmaXJzdCwgRklMRSAqZikKK3sKKwlpZiAoZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGdyb3VwLCBtYXNrKSkgeworCQlpZiAoKmZpcnN0KSB7CisJCQlmcHV0cygiICAgICAgICAgICBbIiwgZik7CisJCQkqZmlyc3QgPSAwOworCQl9IGVsc2UKKwkJCWZwdXRzKCIsICIsIGYpOworCQlmcHV0cyhzdHIsIGYpOworCX0KK30KKwordm9pZCBkb19zaG93X3N1cGVyX3N0YXRzKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY29uc3QgY2hhciAqdW5pdHMgPSJibG9jayI7CisJZGdycF90CWk7CisJRklMRSAJKm91dDsKKwlpbnQJYywgaGVhZGVyX29ubHkgPSAwOworCWludAludW1kaXJzID0gMCwgZmlyc3QsIGdkdF9jc3VtOworCisJcmVzZXRfZ2V0b3B0KCk7CisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiaCIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2gnOgorCQkJaGVhZGVyX29ubHkrKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBwcmludF91c2FnZTsKKwkJfQorCX0KKwlpZiAob3B0aW5kICE9IGFyZ2MpIHsKKwkJZ290byBwcmludF91c2FnZTsKKwl9CisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKwlvdXQgPSBvcGVuX3BhZ2VyKCk7CisKKwlpZiAoRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoY3VycmVudF9mcy0+c3VwZXIsCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpKQorCQl1bml0cyA9ICJjbHVzdGVyIjsKKworCWxpc3Rfc3VwZXIyKGN1cnJlbnRfZnMtPnN1cGVyLCBvdXQpOworCWZvciAoaT0wOyBpIDwgY3VycmVudF9mcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKQorCQludW1kaXJzICs9IGV4dDJmc19iZ191c2VkX2RpcnNfY291bnQoY3VycmVudF9mcywgaSk7CisJZnByaW50ZihvdXQsICJEaXJlY3RvcmllczogICAgICAgICAgICAgICVkXG4iLCBudW1kaXJzKTsKKworCWlmIChoZWFkZXJfb25seSkgeworCQljbG9zZV9wYWdlcihvdXQpOworCQlyZXR1cm47CisJfQorCisJZ2R0X2NzdW0gPSBFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShjdXJyZW50X2ZzLT5zdXBlciwKKwkJCQkJICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSk7CisJZm9yIChpID0gMDsgaSA8IGN1cnJlbnRfZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlmcHJpbnRmKG91dCwgIiBHcm91cCAlMmQ6IGJsb2NrIGJpdG1hcCBhdCAlbGx1LCAiCisJCSAgICAgICAgImlub2RlIGJpdG1hcCBhdCAlbGx1LCAiCisJCSAgICAgICAgImlub2RlIHRhYmxlIGF0ICVsbHVcbiIKKwkJICAgICAgICAiICAgICAgICAgICAldSBmcmVlICVzJXMsICIKKwkJICAgICAgICAiJXUgZnJlZSAlcywgIgorCQkgICAgICAgICIldSB1c2VkICVzJXMiLAorCQkgICAgICAgIGksIGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGN1cnJlbnRfZnMsIGkpLAorCQkgICAgICAgIGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGN1cnJlbnRfZnMsIGkpLAorCQkJZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhjdXJyZW50X2ZzLCBpKSwKKwkJICAgICAgICBleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnQoY3VycmVudF9mcywgaSksIHVuaXRzLAorCQkgICAgICAgIGV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudChjdXJyZW50X2ZzLCBpKSAhPSAxID8KKwkJCSJzIiA6ICIiLAorCQkgICAgICAgIGV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudChjdXJyZW50X2ZzLCBpKSwKKwkJICAgICAgICBleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnQoY3VycmVudF9mcywgaSkgIT0gMSA/CisJCQkiaW5vZGVzIiA6ICJpbm9kZSIsCisJCSAgICAgICAgZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudChjdXJyZW50X2ZzLCBpKSwKKwkJICAgICAgICBleHQyZnNfYmdfdXNlZF9kaXJzX2NvdW50KGN1cnJlbnRfZnMsIGkpICE9IDEgPyAiZGlyZWN0b3JpZXMiCisgCQkJCTogImRpcmVjdG9yeSIsIGdkdF9jc3VtID8gIiwgIiA6ICJcbiIpOworCQlpZiAoZ2R0X2NzdW0pCisJCQlmcHJpbnRmKG91dCwgIiV1IHVudXNlZCAlc1xuIiwKKwkJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZChjdXJyZW50X2ZzLCBpKSwKKwkJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZChjdXJyZW50X2ZzLCBpKSAhPSAxID8KKwkJCQkiaW5vZGVzIiA6ICJpbm9kZSIpOworCQlmaXJzdCA9IDE7CisJCXByaW50X2JnX29wdHMoY3VycmVudF9mcywgaSwgRVhUMl9CR19JTk9ERV9VTklOSVQsICJJbm9kZSBub3QgaW5pdCIsCisJCQkgICAgICAmZmlyc3QsIG91dCk7CisJCXByaW50X2JnX29wdHMoY3VycmVudF9mcywgaSwgRVhUMl9CR19CTE9DS19VTklOSVQsICJCbG9jayBub3QgaW5pdCIsCisJCQkgICAgICAmZmlyc3QsIG91dCk7CisJCWlmIChnZHRfY3N1bSkgeworCQkJZnByaW50ZihvdXQsICIlc0NoZWNrc3VtIDB4JTA0eCIsCisJCQkJZmlyc3QgPyAiICAgICAgICAgICBbIjoiLCAiLCBleHQyZnNfYmdfY2hlY2tzdW0oY3VycmVudF9mcywgaSkpOworCQkJZmlyc3QgPSAwOworCQl9CisJCWlmICghZmlyc3QpCisJCQlmcHV0cygiXVxuIiwgb3V0KTsKKwl9CisJY2xvc2VfcGFnZXIob3V0KTsKKwlyZXR1cm47CitwcmludF91c2FnZToKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiBVc2FnZTogc2hvd19zdXBlciBbLWhdXG4iLCBhcmd2WzBdKTsKK30KKworI2lmbmRlZiBSRUFEX09OTFkKK3ZvaWQgZG9fZGlydHlfZmlsZXN5cyhpbnQgYXJnYyBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIGNoYXIgKiphcmd2IEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCWlmIChjaGVja19mc19yZWFkX3dyaXRlKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJndlsxXSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItY2xlYW4iKSkKKwkJY3VycmVudF9mcy0+c3VwZXItPnNfc3RhdGUgfD0gRVhUMl9WQUxJRF9GUzsKKwllbHNlCisJCWN1cnJlbnRfZnMtPnN1cGVyLT5zX3N0YXRlICY9IH5FWFQyX1ZBTElEX0ZTOworCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGN1cnJlbnRfZnMpOworfQorI2VuZGlmIC8qIFJFQURfT05MWSAqLworCitzdHJ1Y3QgbGlzdF9ibG9ja3Nfc3RydWN0IHsKKwlGSUxFCQkqZjsKKwllMl9ibGtjbnRfdAl0b3RhbDsKKwlibGs2NF90CQlmaXJzdF9ibG9jaywgbGFzdF9ibG9jazsKKwllMl9ibGtjbnRfdAlmaXJzdF9iY250LCBsYXN0X2JjbnQ7CisJZTJfYmxrY250X3QJZmlyc3Q7Cit9OworCitzdGF0aWMgdm9pZCBmaW5pc2hfcmFuZ2Uoc3RydWN0IGxpc3RfYmxvY2tzX3N0cnVjdCAqbGIpCit7CisJaWYgKGxiLT5maXJzdF9ibG9jayA9PSAwKQorCQlyZXR1cm47CisJaWYgKGxiLT5maXJzdCkKKwkJbGItPmZpcnN0ID0gMDsKKwllbHNlCisJCWZwcmludGYobGItPmYsICIsICIpOworCWlmIChsYi0+Zmlyc3RfYmxvY2sgPT0gbGItPmxhc3RfYmxvY2spCisJCWZwcmludGYobGItPmYsICIoJWxsZCk6JWxsdSIsCisJCQkobG9uZyBsb25nKWxiLT5maXJzdF9iY250LCBsYi0+Zmlyc3RfYmxvY2spOworCWVsc2UKKwkJZnByaW50ZihsYi0+ZiwgIiglbGxkLSVsbGQpOiVsbHUtJWxsdSIsCisJCQkobG9uZyBsb25nKWxiLT5maXJzdF9iY250LCAobG9uZyBsb25nKWxiLT5sYXN0X2JjbnQsCisJCQlsYi0+Zmlyc3RfYmxvY2ssIGxiLT5sYXN0X2Jsb2NrKTsKKwlsYi0+Zmlyc3RfYmxvY2sgPSAwOworfQorCitzdGF0aWMgaW50IGxpc3RfYmxvY2tzX3Byb2MoZXh0Ml9maWxzeXMgZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgIGJsazY0X3QgKmJsb2NrbnIsIGUyX2Jsa2NudF90IGJsb2NrY250LAorCQkJICAgIGJsazY0X3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgdm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgbGlzdF9ibG9ja3Nfc3RydWN0ICpsYiA9IChzdHJ1Y3QgbGlzdF9ibG9ja3Nfc3RydWN0ICopIHByaXZhdGU7CisKKwlsYi0+dG90YWwrKzsKKwlpZiAoYmxvY2tjbnQgPj0gMCkgeworCQkvKgorCQkgKiBTZWUgaWYgd2UgY2FuIGFkZCBvbiB0byB0aGUgZXhpc3RpbmcgcmFuZ2UgKGlmIGl0IGV4aXN0cykKKwkJICovCisJCWlmIChsYi0+Zmlyc3RfYmxvY2sgJiYKKwkJICAgIChsYi0+bGFzdF9ibG9jaysxID09ICpibG9ja25yKSAmJgorCQkgICAgKGxiLT5sYXN0X2JjbnQrMSA9PSBibG9ja2NudCkpIHsKKwkJCWxiLT5sYXN0X2Jsb2NrID0gKmJsb2NrbnI7CisJCQlsYi0+bGFzdF9iY250ID0gYmxvY2tjbnQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQkvKgorCQkgKiBTdGFydCBhIG5ldyByYW5nZS4KKwkJICovCisJCWZpbmlzaF9yYW5nZShsYik7CisJCWxiLT5maXJzdF9ibG9jayA9IGxiLT5sYXN0X2Jsb2NrID0gKmJsb2NrbnI7CisJCWxiLT5maXJzdF9iY250ID0gbGItPmxhc3RfYmNudCA9IGJsb2NrY250OworCQlyZXR1cm4gMDsKKwl9CisJLyoKKwkgKiBOb3QgYSBub3JtYWwgYmxvY2suICBBbHdheXMgZm9yY2UgYSBuZXcgcmFuZ2UuCisJICovCisJZmluaXNoX3JhbmdlKGxiKTsKKwlpZiAobGItPmZpcnN0KQorCQlsYi0+Zmlyc3QgPSAwOworCWVsc2UKKwkJZnByaW50ZihsYi0+ZiwgIiwgIik7CisJaWYgKGJsb2NrY250ID09IC0xKQorCQlmcHJpbnRmKGxiLT5mLCAiKElORCk6JWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpICpibG9ja25yKTsKKwllbHNlIGlmIChibG9ja2NudCA9PSAtMikKKwkJZnByaW50ZihsYi0+ZiwgIihESU5EKTolbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgKmJsb2NrbnIpOworCWVsc2UgaWYgKGJsb2NrY250ID09IC0zKQorCQlmcHJpbnRmKGxiLT5mLCAiKFRJTkQpOiVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKSAqYmxvY2tucik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfeGF0dHJfc3RyaW5nKEZJTEUgKm91dCwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKQoreworCWludCBwcmludGFibGUgPSAwOworCWludCBpOworCisJLyogY2hlY2s6IGlzIHN0cmluZyAicHJpbnRhYmxlIGVub3VnaD8iICovCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAoaXNwcmludChzdHJbaV0pKQorCQkJcHJpbnRhYmxlKys7CisKKwlpZiAocHJpbnRhYmxlIDw9IGxlbio3LzgpCisJCXByaW50YWJsZSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWlmIChwcmludGFibGUpCisJCQlmcHJpbnRmKG91dCwgaXNwcmludChzdHJbaV0pID8gIiVjIiA6ICJcXCUwM28iLAorCQkJCSh1bnNpZ25lZCBjaGFyKXN0cltpXSk7CisJCWVsc2UKKwkJCWZwcmludGYob3V0LCAiJTAyeCAiLCAodW5zaWduZWQgY2hhcilzdHJbaV0pOworfQorCitzdGF0aWMgdm9pZCBpbnRlcm5hbF9kdW1wX2lub2RlX2V4dHJhKEZJTEUgKm91dCwKKwkJCQkgICAgICBjb25zdCBjaGFyICpwcmVmaXggRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCSAgICAgIGV4dDJfaW5vX3QgaW5vZGVfbnVtIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQkgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqaW5vZGUpCit7CisJc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkgKmVudHJ5OworCV9fdTMyICptYWdpYzsKKwljaGFyICpzdGFydCwgKmVuZDsKKworCWZwcmludGYob3V0LCAiU2l6ZSBvZiBleHRyYSBpbm9kZSBmaWVsZHM6ICV1XG4iLCBpbm9kZS0+aV9leHRyYV9pc2l6ZSk7CisJaWYgKGlub2RlLT5pX2V4dHJhX2lzaXplID4gRVhUMl9JTk9ERV9TSVpFKGN1cnJlbnRfZnMtPnN1cGVyKSAtCisJCQlFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUpIHsKKwkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGlub2RlLT5pX2V4dHJhX2lzaXplICgldSlcbiIsCisJCQkJaW5vZGUtPmlfZXh0cmFfaXNpemUpOworCQlyZXR1cm47CisJfQorCW1hZ2ljID0gKF9fdTMyICopKChjaGFyICopaW5vZGUgKyBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgKworCQkJaW5vZGUtPmlfZXh0cmFfaXNpemUpOworCWlmICgqbWFnaWMgPT0gRVhUMl9FWFRfQVRUUl9NQUdJQykgeworCQlmcHJpbnRmKG91dCwgIkV4dGVuZGVkIGF0dHJpYnV0ZXMgc3RvcmVkIGluIGlub2RlIGJvZHk6IFxuIik7CisJCWVuZCA9IChjaGFyICopIGlub2RlICsgRVhUMl9JTk9ERV9TSVpFKGN1cnJlbnRfZnMtPnN1cGVyKTsKKwkJc3RhcnQgPSAoY2hhciAqKSBtYWdpYyArIHNpemVvZihfX3UzMik7CisJCWVudHJ5ID0gKHN0cnVjdCBleHQyX2V4dF9hdHRyX2VudHJ5ICopIHN0YXJ0OworCQl3aGlsZSAoIUVYVDJfRVhUX0lTX0xBU1RfRU5UUlkoZW50cnkpKSB7CisJCQlzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9lbnRyeSAqbmV4dCA9CisJCQkJRVhUMl9FWFRfQVRUUl9ORVhUKGVudHJ5KTsKKwkJCWNoYXIgKm5hbWUgPSBFWFQyX0VYVF9BVFRSX05BTUUoZW50cnkpOworCQkJY2hhciAqdmFsdWUgPSBzdGFydCArIGVudHJ5LT5lX3ZhbHVlX29mZnM7CisKKwkJCWlmIChuYW1lICsgZW50cnktPmVfbmFtZV9sZW4gPj0gZW5kIHx8CisJCQkgICAgdmFsdWUgKyBlbnRyeS0+ZV92YWx1ZV9zaXplID49IGVuZCB8fAorCQkJICAgIChjaGFyICopIG5leHQgPj0gZW5kKSB7CisJCQkJZnByaW50ZihvdXQsICJpbnZhbGlkIEVBIGVudHJ5IGluIGlub2RlXG4iKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlmcHJpbnRmKG91dCwgIiAgIik7CisJCQlkdW1wX3hhdHRyX3N0cmluZyhvdXQsIG5hbWUsIGVudHJ5LT5lX25hbWVfbGVuKTsKKwkJCWZwcmludGYob3V0LCAiID0gXCIiKTsKKwkJCWR1bXBfeGF0dHJfc3RyaW5nKG91dCwgdmFsdWUsIGVudHJ5LT5lX3ZhbHVlX3NpemUpOworCQkJZnByaW50ZihvdXQsICJcIiAoJXUpXG4iLCBlbnRyeS0+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+IDIpIHsKKwkJbW9kZSA9IHN0cnRvbChhcmd2WzJdLCAmdG1wLCAwKTsKKwkJaWYgKCp0bXApIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgMCwgIkJhZCBtb2RlIC0gJXMiLCBhcmd2WzJdKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZQorCQltb2RlID0gMDEwNzU1OworCisJcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShjdXJyZW50X2ZzLCBkaXIsIG1vZGUsIDAsICZmcmVlX2lub2RlKTsKKwlpZiAocmV0dmFsKQorCQljb21fZXJyKCJleHQyZnNfbmV3X2lub2RlIiwgcmV0dmFsLCAwKTsKKwllbHNlCisJCXByaW50ZigiRnJlZSBpbm9kZSBmb3VuZDogJXVcbiIsIGZyZWVfaW5vZGUpOworfQorCisjaWZuZGVmIFJFQURfT05MWQorc3RhdGljIGVycmNvZGVfdCBjb3B5X2ZpbGUoaW50IGZkLCBleHQyX2lub190IG5ld2ZpbGUsIGludCBidWZzaXplLAorCQkJICAgaW50IG1ha2VfaG9sZXMpCit7CisJZXh0Ml9maWxlX3QJZTJfZmlsZTsKKwllcnJjb2RlX3QJcmV0dmFsLCBjbG9zZV9yZXQ7CisJaW50CQlnb3Q7CisJdW5zaWduZWQgaW50CXdyaXR0ZW47CisJY2hhcgkJKmJ1ZjsKKwljaGFyCQkqcHRyOworCWNoYXIJCSp6ZXJvX2J1ZjsKKwlpbnQJCWNtcDsKKworCXJldHZhbCA9IGV4dDJmc19maWxlX29wZW4oY3VycmVudF9mcywgbmV3ZmlsZSwKKwkJCQkgIEVYVDJfRklMRV9XUklURSwgJmUyX2ZpbGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShidWZzaXplLCAmYnVmKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImNvcHlfZmlsZSIsIHJldHZhbCwgImNhbid0IGFsbG9jYXRlIGJ1ZmZlclxuIik7CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KKworCS8qIFRoaXMgaXMgdXNlZCBmb3IgY2hlY2tpbmcgd2hldGhlciB0aGUgd2hvbGUgYmxvY2sgaXMgemVybyAqLworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtemVybyhidWZzaXplLCAmemVyb19idWYpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAiY2FuJ3QgYWxsb2NhdGUgemVybyBidWZmZXJcbiIpOworCQlnb3RvIG91dF9mcmVlX2J1ZjsKKwl9CisKKwl3aGlsZSAoMSkgeworCQlnb3QgPSByZWFkKGZkLCBidWYsIGJ1ZnNpemUpOworCQlpZiAoZ290ID09IDApCisJCQlicmVhazsKKwkJaWYgKGdvdCA8IDApIHsKKwkJCXJldHZhbCA9IGVycm5vOworCQkJZ290byBmYWlsOworCQl9CisJCXB0ciA9IGJ1ZjsKKworCQkvKiBTcGFyc2UgY29weSAqLworCQlpZiAobWFrZV9ob2xlcykgeworCQkJLyogQ2hlY2sgd2hldGhlciBhbGwgaXMgemVybyAqLworCQkJY21wID0gbWVtY21wKHB0ciwgemVyb19idWYsIGdvdCk7CisJCQlpZiAoY21wID09IDApIHsKKwkJCQkgLyogVGhlIHdob2xlIGJsb2NrIGlzIHplcm8sIG1ha2UgYSBob2xlICovCisJCQkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfbHNlZWsoZTJfZmlsZSwgZ290LAorCQkJCQkJCSAgIEVYVDJfU0VFS19DVVIsIE5VTEwpOworCQkJCWlmIChyZXR2YWwpCisJCQkJCWdvdG8gZmFpbDsKKwkJCQlnb3QgPSAwOworCQkJfQorCQl9CisKKwkJLyogTm9ybWFsIGNvcHkgKi8KKwkJd2hpbGUgKGdvdCA+IDApIHsKKwkJCXJldHZhbCA9IGV4dDJmc19maWxlX3dyaXRlKGUyX2ZpbGUsIHB0ciwKKwkJCQkJCSAgIGdvdCwgJndyaXR0ZW4pOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGZhaWw7CisKKwkJCWdvdCAtPSB3cml0dGVuOworCQkJcHRyICs9IHdyaXR0ZW47CisJCX0KKwl9CisKK2ZhaWw6CisJZXh0MmZzX2ZyZWVfbWVtKCZ6ZXJvX2J1Zik7CitvdXRfZnJlZV9idWY6CisJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworb3V0X2Nsb3NlOgorCWNsb3NlX3JldCA9IGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dmFsID0gY2xvc2VfcmV0OworCXJldHVybiByZXR2YWw7Cit9CisKKwordm9pZCBkb193cml0ZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludAkJZmQ7CisJc3RydWN0IHN0YXQJc3RhdGJ1ZjsKKwlleHQyX2lub190CW5ld2ZpbGU7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKwlpbnQJCWJ1ZnNpemUgPSBJT19CVUZTSVpFOworCWludAkJbWFrZV9ob2xlcyA9IDA7CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAzLCAzLCAid3JpdGUiLAorCQkJCSI8bmF0aXZlIGZpbGU+IDxuZXcgZmlsZT4iLCBDSEVDS19GU19SVykpCisJCXJldHVybjsKKworCWZkID0gb3Blbihhcmd2WzFdLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQljb21fZXJyKGFyZ3ZbMV0sIGVycm5vLCAwKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZnN0YXQoZmQsICZzdGF0YnVmKSA8IDApIHsKKwkJY29tX2Vycihhcmd2WzFdLCBlcnJubywgMCk7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuOworCX0KKworCXJldHZhbCA9IGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBjd2QsIGFyZ3ZbMl0sICZuZXdmaWxlKTsKKwlpZiAocmV0dmFsID09IDApIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiVGhlIGZpbGUgJyVzJyBhbHJlYWR5IGV4aXN0c1xuIiwgYXJndlsyXSk7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuOworCX0KKworCXJldHZhbCA9IGV4dDJmc19uZXdfaW5vZGUoY3VycmVudF9mcywgY3dkLCAwMTA3NTUsIDAsICZuZXdmaWxlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm47CisJfQorCXByaW50ZigiQWxsb2NhdGVkIGlub2RlOiAldVxuIiwgbmV3ZmlsZSk7CisJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgY3dkLCBhcmd2WzJdLCBuZXdmaWxlLAorCQkJICAgICBFWFQyX0ZUX1JFR19GSUxFKTsKKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisJCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIGN3ZCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgYXJndlsyXSwgbmV3ZmlsZSwKKwkJCQkgICAgIEVYVDJfRlRfUkVHX0ZJTEUpOworCX0KKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlsyXSwgcmV0dmFsLCAwKTsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm47CisJfQorICAgICAgICBpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdXJyZW50X2ZzLT5pbm9kZV9tYXAsbmV3ZmlsZSkpCisJCWNvbV9lcnIoYXJndlswXSwgMCwgIldhcm5pbmc6IGlub2RlIGFscmVhZHkgc2V0Iik7CisJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihjdXJyZW50X2ZzLCBuZXdmaWxlLCArMSwgMCk7CisJbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKGlub2RlKSk7CisJaW5vZGUuaV9tb2RlID0gKHN0YXRidWYuc3RfbW9kZSAmIH5MSU5VWF9TX0lGTVQpIHwgTElOVVhfU19JRlJFRzsKKwlpbm9kZS5pX2F0aW1lID0gaW5vZGUuaV9jdGltZSA9IGlub2RlLmlfbXRpbWUgPQorCQljdXJyZW50X2ZzLT5ub3cgPyBjdXJyZW50X2ZzLT5ub3cgOiB0aW1lKDApOworCWlub2RlLmlfbGlua3NfY291bnQgPSAxOworCXJldHZhbCA9IGV4dDJmc19pbm9kZV9zaXplX3NldChjdXJyZW50X2ZzLCAmaW5vZGUsIHN0YXRidWYuc3Rfc2l6ZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMl0sIHJldHZhbCwgMCk7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoY3VycmVudF9mcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKSB7CisJCWludCBpOworCQlzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICplaDsKKworCQllaCA9IChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopICZpbm9kZS5pX2Jsb2NrWzBdOworCQllaC0+ZWhfZGVwdGggPSAwOworCQllaC0+ZWhfZW50cmllcyA9IDA7CisJCWVoLT5laF9tYWdpYyA9IGV4dDJmc19jcHVfdG9fbGUxNihFWFQzX0VYVF9NQUdJQyk7CisJCWkgPSAoc2l6ZW9mKGlub2RlLmlfYmxvY2spIC0gc2l6ZW9mKCplaCkpIC8KKwkJCXNpemVvZihzdHJ1Y3QgZXh0M19leHRlbnQpOworCQllaC0+ZWhfbWF4ID0gZXh0MmZzX2NwdV90b19sZTE2KGkpOworCQlpbm9kZS5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKwl9CisJaWYgKGRlYnVnZnNfd3JpdGVfbmV3X2lub2RlKG5ld2ZpbGUsICZpbm9kZSwgYXJndlswXSkpIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm47CisJfQorCWlmIChMSU5VWF9TX0lTUkVHKGlub2RlLmlfbW9kZSkpIHsKKwkJaWYgKHN0YXRidWYuc3RfYmxvY2tzIDwgc3RhdGJ1Zi5zdF9zaXplIC8gU19CTEtTSVpFKSB7CisJCQltYWtlX2hvbGVzID0gMTsKKwkJCS8qCisJCQkgKiBVc2UgSS9PIGJsb2Nrc2l6ZSBhcyBidWZmZXIgc2l6ZSB3aGVuCisJCQkgKiBjb3B5aW5nIHNwYXJzZSBmaWxlcy4KKwkJCSAqLworCQkJYnVmc2l6ZSA9IHN0YXRidWYuc3RfYmxrc2l6ZTsKKwkJfQorCQlyZXR2YWwgPSBjb3B5X2ZpbGUoZmQsIG5ld2ZpbGUsIGJ1ZnNpemUsIG1ha2VfaG9sZXMpOworCQlpZiAocmV0dmFsKQorCQkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAwKTsKKwl9CisJY2xvc2UoZmQpOworfQorCit2b2lkIGRvX21rbm9kKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdW5zaWduZWQgbG9uZwltb2RlLCBtYWpvciwgbWlub3I7CisJZXh0Ml9pbm9fdAluZXdmaWxlOworCWVycmNvZGVfdCAJcmV0dmFsOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCWludAkJZmlsZXR5cGUsIG5yOworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKwlpZiAoYXJnYyA8IDMgfHwgYXJndlsyXVsxXSkgeworCXVzYWdlOgorCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogbWtub2QgPG5hbWU+IFtwfCBbY3xiXSA8bWFqb3I+IDxtaW5vcj5dIik7CisJCXJldHVybjsKKwl9CisJbW9kZSA9IG1pbm9yID0gbWFqb3IgPSAwOworCXN3aXRjaCAoYXJndlsyXVswXSkgeworCQljYXNlICdwJzoKKwkJCW1vZGUgPSBMSU5VWF9TX0lGSUZPOworCQkJZmlsZXR5cGUgPSBFWFQyX0ZUX0ZJRk87CisJCQluciA9IDM7CisJCQlicmVhazsKKwkJY2FzZSAnYyc6CisJCQltb2RlID0gTElOVVhfU19JRkNIUjsKKwkJCWZpbGV0eXBlID0gRVhUMl9GVF9DSFJERVY7CisJCQluciA9IDU7CisJCQlicmVhazsKKwkJY2FzZSAnYic6CisJCQltb2RlID0gTElOVVhfU19JRkJMSzsKKwkJCWZpbGV0eXBlID0gRVhUMl9GVF9CTEtERVY7CisJCQluciA9IDU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWZpbGV0eXBlID0gMDsKKwkJCW5yID0gMDsKKwl9CisJaWYgKG5yID09IDUpIHsKKwkJbWFqb3IgPSBzdHJ0b3VsKGFyZ3ZbM10sIGFyZ3YrMywgMCk7CisJCW1pbm9yID0gc3RydG91bChhcmd2WzRdLCBhcmd2KzQsIDApOworCQlpZiAobWFqb3IgPiA2NTUzNSB8fCBtaW5vciA+IDY1NTM1IHx8IGFyZ3ZbM11bMF0gfHwgYXJndls0XVswXSkKKwkJCW5yID0gMDsKKwl9CisJaWYgKGFyZ2MgIT0gbnIpCisJCWdvdG8gdXNhZ2U7CisJaWYgKGNoZWNrX2ZzX3JlYWRfd3JpdGUoYXJndlswXSkpCisJCXJldHVybjsKKwlyZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGN1cnJlbnRfZnMsIGN3ZCwgMDEwNzU1LCAwLCAmbmV3ZmlsZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgMCk7CisJCXJldHVybjsKKwl9CisJcHJpbnRmKCJBbGxvY2F0ZWQgaW5vZGU6ICV1XG4iLCBuZXdmaWxlKTsKKwlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGFyZ3ZbMV0sIG5ld2ZpbGUsIGZpbGV0eXBlKTsKKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisJCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIGN3ZCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworCQkJcmV0dXJuOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgYXJndlsxXSwgbmV3ZmlsZSwKKwkJCQkgICAgIGZpbGV0eXBlKTsKKwl9CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMV0sIHJldHZhbCwgMCk7CisJCXJldHVybjsKKwl9CisgICAgICAgIGlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN1cnJlbnRfZnMtPmlub2RlX21hcCxuZXdmaWxlKSkKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiV2FybmluZzogaW5vZGUgYWxyZWFkeSBzZXQiKTsKKwlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGN1cnJlbnRfZnMsIG5ld2ZpbGUsICsxLCAwKTsKKwltZW1zZXQoJmlub2RlLCAwLCBzaXplb2YoaW5vZGUpKTsKKwlpbm9kZS5pX21vZGUgPSBtb2RlOworCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9CisJCWN1cnJlbnRfZnMtPm5vdyA/IGN1cnJlbnRfZnMtPm5vdyA6IHRpbWUoMCk7CisJaWYgKChtYWpvciA8IDI1NikgJiYgKG1pbm9yIDwgMjU2KSkgeworCQlpbm9kZS5pX2Jsb2NrWzBdID0gbWFqb3IqMjU2K21pbm9yOworCQlpbm9kZS5pX2Jsb2NrWzFdID0gMDsKKwl9IGVsc2UgeworCQlpbm9kZS5pX2Jsb2NrWzBdID0gMDsKKwkJaW5vZGUuaV9ibG9ja1sxXSA9IChtaW5vciAmIDB4ZmYpIHwgKG1ham9yIDw8IDgpIHwgKChtaW5vciAmIH4weGZmKSA8PCAxMik7CisJfQorCWlub2RlLmlfbGlua3NfY291bnQgPSAxOworCWlmIChkZWJ1Z2ZzX3dyaXRlX25ld19pbm9kZShuZXdmaWxlLCAmaW5vZGUsIGFyZ3ZbMF0pKQorCQlyZXR1cm47Cit9CisKK3ZvaWQgZG9fbWtkaXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljaGFyCSpjcDsKKwlleHQyX2lub190CXBhcmVudDsKKwljaGFyCSpuYW1lOworCWVycmNvZGVfdCByZXR2YWw7CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAyLCAyLCAibWtkaXIiLAorCQkJCSI8ZmlsZW5hbWU+IiwgQ0hFQ0tfRlNfUlcpKQorCQlyZXR1cm47CisKKwljcCA9IHN0cnJjaHIoYXJndlsxXSwgJy8nKTsKKwlpZiAoY3ApIHsKKwkJKmNwID0gMDsKKwkJcGFyZW50ID0gc3RyaW5nX3RvX2lub2RlKGFyZ3ZbMV0pOworCQlpZiAoIXBhcmVudCkgeworCQkJY29tX2Vycihhcmd2WzFdLCBFTk9FTlQsIDApOworCQkJcmV0dXJuOworCQl9CisJCW5hbWUgPSBjcCsxOworCX0gZWxzZSB7CisJCXBhcmVudCA9IGN3ZDsKKwkJbmFtZSA9IGFyZ3ZbMV07CisJfQorCit0cnlfYWdhaW46CisJcmV0dmFsID0gZXh0MmZzX21rZGlyKGN1cnJlbnRfZnMsIHBhcmVudCwgMCwgbmFtZSk7CisJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBwYXJlbnQpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKwkJCXJldHVybjsKKwkJfQorCQlnb3RvIHRyeV9hZ2FpbjsKKwl9CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfbWtkaXIiLCByZXR2YWwsIDApOworCQlyZXR1cm47CisJfQorCit9CisKK3N0YXRpYyBpbnQgcmVsZWFzZV9ibG9ja3NfcHJvYyhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCAqYmxvY2tuciwKKwkJCSAgICAgICBlMl9ibGtjbnRfdCBibG9ja2NudCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICAgYmxrNjRfdCByZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICAgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgICB2b2lkICpwcml2YXRlIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlibGs2NF90CWJsb2NrOworCisJYmxvY2sgPSAqYmxvY2tucjsKKwlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBibG9jaywgLTEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBraWxsX2ZpbGVfYnlfaW5vZGUoZXh0Ml9pbm9fdCBpbm9kZSkKK3sKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZV9idWY7CisKKwlpZiAoZGVidWdmc19yZWFkX2lub2RlKGlub2RlLCAmaW5vZGVfYnVmLCAwKSkKKwkJcmV0dXJuOworCWlub2RlX2J1Zi5pX2R0aW1lID0gY3VycmVudF9mcy0+bm93ID8gY3VycmVudF9mcy0+bm93IDogdGltZSgwKTsKKwlpZiAoZGVidWdmc193cml0ZV9pbm9kZShpbm9kZSwgJmlub2RlX2J1ZiwgMCkpCisJCXJldHVybjsKKwlpZiAoIWV4dDJmc19pbm9kZV9oYXNfdmFsaWRfYmxvY2tzMihjdXJyZW50X2ZzLCAmaW5vZGVfYnVmKSkKKwkJcmV0dXJuOworCisJZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGN1cnJlbnRfZnMsIGlub2RlLCBCTE9DS19GTEFHX1JFQURfT05MWSwgTlVMTCwKKwkJCSAgICAgIHJlbGVhc2VfYmxvY2tzX3Byb2MsIE5VTEwpOworCXByaW50ZigiXG4iKTsKKwlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGN1cnJlbnRfZnMsIGlub2RlLCAtMSwKKwkJCQkgIExJTlVYX1NfSVNESVIoaW5vZGVfYnVmLmlfbW9kZSkpOworfQorCisKK3ZvaWQgZG9fa2lsbF9maWxlKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXh0Ml9pbm9fdCBpbm9kZV9udW07CisKKwlpZiAoY29tbW9uX2lub2RlX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAmaW5vZGVfbnVtLCBDSEVDS19GU19SVykpCisJCXJldHVybjsKKworCWtpbGxfZmlsZV9ieV9pbm9kZShpbm9kZV9udW0pOworfQorCit2b2lkIGRvX3JtKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IHJldHZhbDsKKwlleHQyX2lub190IGlub2RlX251bTsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDIsIDIsICJybSIsCisJCQkJIjxmaWxlbmFtZT4iLCBDSEVDS19GU19SVykpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBjd2QsIGFyZ3ZbMV0sICZpbm9kZV9udW0pOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSB0cnlpbmcgdG8gcmVzb2x2ZSBmaWxlbmFtZSIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGRlYnVnZnNfcmVhZF9pbm9kZShpbm9kZV9udW0sICZpbm9kZSwgYXJndlswXSkpCisJCXJldHVybjsKKworCWlmIChMSU5VWF9TX0lTRElSKGlub2RlLmlfbW9kZSkpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiZmlsZSBpcyBhIGRpcmVjdG9yeSIpOworCQlyZXR1cm47CisJfQorCisJLS1pbm9kZS5pX2xpbmtzX2NvdW50OworCWlmIChkZWJ1Z2ZzX3dyaXRlX2lub2RlKGlub2RlX251bSwgJmlub2RlLCBhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJdW5saW5rX2ZpbGVfYnlfbmFtZShhcmd2WzFdKTsKKwlpZiAoaW5vZGUuaV9saW5rc19jb3VudCA9PSAwKQorCQlraWxsX2ZpbGVfYnlfaW5vZGUoaW5vZGVfbnVtKTsKK30KKworc3RydWN0IHJkX3N0cnVjdCB7CisJZXh0Ml9pbm9fdAlwYXJlbnQ7CisJaW50CQllbXB0eTsKK307CisKK3N0YXRpYyBpbnQgcm1kaXJfcHJvYyhleHQyX2lub190IGRpciBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIGludAllbnRyeSBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkgICAgICBpbnQJb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgaW50CWJsb2Nrc2l6ZSBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIGNoYXIJKmJ1ZiBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIHZvaWQJKnByaXZhdGUpCit7CisJc3RydWN0IHJkX3N0cnVjdCAqcmRzID0gKHN0cnVjdCByZF9zdHJ1Y3QgKikgcHJpdmF0ZTsKKworCWlmIChkaXJlbnQtPmlub2RlID09IDApCisJCXJldHVybiAwOworCWlmICgoKGRpcmVudC0+bmFtZV9sZW4mMHhGRikgPT0gMSkgJiYgKGRpcmVudC0+bmFtZVswXSA9PSAnLicpKQorCQlyZXR1cm4gMDsKKwlpZiAoKChkaXJlbnQtPm5hbWVfbGVuJjB4RkYpID09IDIpICYmIChkaXJlbnQtPm5hbWVbMF0gPT0gJy4nKSAmJgorCSAgICAoZGlyZW50LT5uYW1lWzFdID09ICcuJykpIHsKKwkJcmRzLT5wYXJlbnQgPSBkaXJlbnQtPmlub2RlOworCQlyZXR1cm4gMDsKKwl9CisJcmRzLT5lbXB0eSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZG9fcm1kaXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgcmV0dmFsOworCWV4dDJfaW5vX3QgaW5vZGVfbnVtOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCXN0cnVjdCByZF9zdHJ1Y3QgcmRzOworCisJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMiwgMiwgInJtZGlyIiwKKwkJCQkiPGZpbGVuYW1lPiIsIENIRUNLX0ZTX1JXKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX25hbWVpKGN1cnJlbnRfZnMsIHJvb3QsIGN3ZCwgYXJndlsxXSwgJmlub2RlX251bSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIHRyeWluZyB0byByZXNvbHZlIGZpbGVuYW1lIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZGVidWdmc19yZWFkX2lub2RlKGlub2RlX251bSwgJmlub2RlLCBhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaWYgKCFMSU5VWF9TX0lTRElSKGlub2RlLmlfbW9kZSkpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiZmlsZSBpcyBub3QgYSBkaXJlY3RvcnkiKTsKKwkJcmV0dXJuOworCX0KKworCXJkcy5wYXJlbnQgPSAwOworCXJkcy5lbXB0eSA9IDE7CisKKwlyZXR2YWwgPSBleHQyZnNfZGlyX2l0ZXJhdGUyKGN1cnJlbnRfZnMsIGlub2RlX251bSwgMCwKKwkJCQkgICAgMCwgcm1kaXJfcHJvYywgJnJkcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGl0ZXJhdGluZyBvdmVyIGRpcmVjdG9yeSIpOworCQlyZXR1cm47CisJfQorCWlmIChyZHMuZW1wdHkgPT0gMCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJkaXJlY3Rvcnkgbm90IGVtcHR5Iik7CisJCXJldHVybjsKKwl9CisKKwlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMDsKKwlpZiAoZGVidWdmc193cml0ZV9pbm9kZShpbm9kZV9udW0sICZpbm9kZSwgYXJndlswXSkpCisJCXJldHVybjsKKworCXVubGlua19maWxlX2J5X25hbWUoYXJndlsxXSk7CisJa2lsbF9maWxlX2J5X2lub2RlKGlub2RlX251bSk7CisKKwlpZiAocmRzLnBhcmVudCkgeworCQlpZiAoZGVidWdmc19yZWFkX2lub2RlKHJkcy5wYXJlbnQsICZpbm9kZSwgYXJndlswXSkpCisJCQlyZXR1cm47CisJCWlmIChpbm9kZS5pX2xpbmtzX2NvdW50ID4gMSkKKwkJCWlub2RlLmlfbGlua3NfY291bnQtLTsKKwkJaWYgKGRlYnVnZnNfd3JpdGVfaW5vZGUocmRzLnBhcmVudCwgJmlub2RlLCBhcmd2WzBdKSkKKwkJCXJldHVybjsKKwl9Cit9CisjZW5kaWYgLyogUkVBRF9PTkxZICovCisKK3ZvaWQgZG9fc2hvd19kZWJ1Z2ZzX3BhcmFtcyhpbnQgYXJnYyBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgY2hhciAqYXJndltdIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlpZiAoY3VycmVudF9mcykKKwkJcHJpbnRmKCJPcGVuIG1vZGU6IHJlYWQtJXNcbiIsCisJCSAgICAgICBjdXJyZW50X2ZzLT5mbGFncyAmIEVYVDJfRkxBR19SVyA/ICJ3cml0ZSIgOiAib25seSIpOworCXByaW50ZigiRmlsZXN5c3RlbSBpbiB1c2U6ICVzXG4iLAorCSAgICAgICBjdXJyZW50X2ZzID8gY3VycmVudF9mcy0+ZGV2aWNlX25hbWUgOiAiLS1ub25lLS0iKTsKK30KKworI2lmbmRlZiBSRUFEX09OTFkKK3ZvaWQgZG9fZXhwYW5kX2RpcihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWV4dDJfaW5vX3QgaW5vZGU7CisJaW50IHJldHZhbDsKKworCWlmIChjb21tb25faW5vZGVfYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsICZpbm9kZSwgQ0hFQ0tfRlNfUlcpKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBpbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJY29tX2VycigiZXh0MmZzX2V4cGFuZF9kaXIiLCByZXR2YWwsIDApOworCXJldHVybjsKK30KKwordm9pZCBkb19mZWF0dXJlcyhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludAlpOworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCWlmICgoYXJnYyAhPSAxKSAmJiBjaGVja19mc19yZWFkX3dyaXRlKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisJZm9yIChpPTE7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKGUycF9lZGl0X2ZlYXR1cmUoYXJndltpXSwKKwkJCQkgICAgICZjdXJyZW50X2ZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCwgMCkpCisJCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVbmtub3duIGZlYXR1cmU6ICVzXG4iLAorCQkJCWFyZ3ZbaV0pOworCQllbHNlCisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShjdXJyZW50X2ZzKTsKKwl9CisJcHJpbnRfZmVhdHVyZXMoY3VycmVudF9mcy0+c3VwZXIsIHN0ZG91dCk7Cit9CisjZW5kaWYgLyogUkVBRF9PTkxZICovCisKK3ZvaWQgZG9fYm1hcChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWV4dDJfaW5vX3QJaW5vOworCWJsazY0X3QJCWJsaywgcGJsazsKKwlpbnQJCWVycjsKKwllcnJjb2RlX3QJZXJyY29kZTsKKworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDMsIDMsIGFyZ3ZbMF0sCisJCQkJIjxmaWxlPiBsb2dpY2FsX2JsayIsIDApKQorCQlyZXR1cm47CisKKwlpbm8gPSBzdHJpbmdfdG9faW5vZGUoYXJndlsxXSk7CisJaWYgKCFpbm8pCisJCXJldHVybjsKKwllcnIgPSBzdHJ0b2Jsayhhcmd2WzBdLCBhcmd2WzJdLCAibG9naWNhbCBibG9jayIsICZibGspOworCWlmIChlcnIpCisJCXJldHVybjsKKworCWVycmNvZGUgPSBleHQyZnNfYm1hcDIoY3VycmVudF9mcywgaW5vLCAwLCAwLCAwLCBibGssIDAsICZwYmxrKTsKKwlpZiAoZXJyY29kZSkgeworCQljb21fZXJyKGFyZ3ZbMF0sIGVycmNvZGUsCisJCQkid2hpbGUgbWFwcGluZyBsb2dpY2FsIGJsb2NrICVsbHVcbiIsIGJsayk7CisJCXJldHVybjsKKwl9CisJcHJpbnRmKCIlbGx1XG4iLCBwYmxrKTsKK30KKwordm9pZCBkb19pbWFwKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXh0Ml9pbm9fdAlpbm87CisJdW5zaWduZWQgbG9uZyAJZ3JvdXAsIGJsb2NrLCBibG9ja19uciwgb2Zmc2V0OworCisJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMiwgMiwgYXJndlswXSwKKwkJCQkiPGZpbGU+IiwgMCkpCisJCXJldHVybjsKKwlpbm8gPSBzdHJpbmdfdG9faW5vZGUoYXJndlsxXSk7CisJaWYgKCFpbm8pCisJCXJldHVybjsKKworCWdyb3VwID0gKGlubyAtIDEpIC8gRVhUMl9JTk9ERVNfUEVSX0dST1VQKGN1cnJlbnRfZnMtPnN1cGVyKTsKKwlvZmZzZXQgPSAoKGlubyAtIDEpICUgRVhUMl9JTk9ERVNfUEVSX0dST1VQKGN1cnJlbnRfZnMtPnN1cGVyKSkgKgorCQlFWFQyX0lOT0RFX1NJWkUoY3VycmVudF9mcy0+c3VwZXIpOworCWJsb2NrID0gb2Zmc2V0ID4+IEVYVDJfQkxPQ0tfU0laRV9CSVRTKGN1cnJlbnRfZnMtPnN1cGVyKTsKKwlpZiAoIWV4dDJmc19pbm9kZV90YWJsZV9sb2MoY3VycmVudF9mcywgKHVuc2lnbmVkKWdyb3VwKSkgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJJbm9kZSB0YWJsZSBmb3IgZ3JvdXAgJWx1IGlzIG1pc3NpbmdcbiIsCisJCQlncm91cCk7CisJCXJldHVybjsKKwl9CisJYmxvY2tfbnIgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGN1cnJlbnRfZnMsICh1bnNpZ25lZClncm91cCkgKworCQlibG9jazsKKwlvZmZzZXQgJj0gKEVYVDJfQkxPQ0tfU0laRShjdXJyZW50X2ZzLT5zdXBlcikgLSAxKTsKKworCXByaW50ZigiSW5vZGUgJWQgaXMgcGFydCBvZiBibG9jayBncm91cCAlbHVcbiIKKwkgICAgICAgIlx0bG9jYXRlZCBhdCBibG9jayAlbHUsIG9mZnNldCAweCUwNGx4XG4iLCBpbm8sIGdyb3VwLAorCSAgICAgICBibG9ja19uciwgb2Zmc2V0KTsKKworfQorCit2b2lkIGRvX2lkdW1wKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXh0Ml9pbm9fdAlpbm87CisJdW5zaWduZWQgY2hhcgkqYnVmOworCWVycmNvZGVfdAllcnI7CisJaW50CQlpc2l6ZTsKKworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDIsIDIsIGFyZ3ZbMF0sCisJCQkJIjxmaWxlPiIsIDApKQorCQlyZXR1cm47CisJaW5vID0gc3RyaW5nX3RvX2lub2RlKGFyZ3ZbMV0pOworCWlmICghaW5vKQorCQlyZXR1cm47CisKKwlpc2l6ZSA9IEVYVDJfSU5PREVfU0laRShjdXJyZW50X2ZzLT5zdXBlcik7CisJZXJyID0gZXh0MmZzX2dldF9tZW0oaXNpemUsICZidWYpOworCWlmIChlcnIpIHsKKwkJY29tX2Vycihhcmd2WzBdLCBlcnIsICJ3aGlsZSBhbGxvY2F0aW5nIG1lbW9yeSIpOworCQlyZXR1cm47CisJfQorCisJZXJyID0gZXh0MmZzX3JlYWRfaW5vZGVfZnVsbChjdXJyZW50X2ZzLCBpbm8sCisJCQkJICAgICAoc3RydWN0IGV4dDJfaW5vZGUgKilidWYsIGlzaXplKTsKKwlpZiAoZXJyKSB7CisJCWNvbV9lcnIoYXJndlswXSwgZXJyLCAid2hpbGUgcmVhZGluZyBpbm9kZSAlZCIsIGlubyk7CisJCWdvdG8gZXJyOworCX0KKworCWRvX2J5dGVfaGV4ZHVtcChzdGRvdXQsIGJ1ZiwgaXNpemUpOworZXJyOgorCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKK30KKworI2lmbmRlZiBSRUFEX09OTFkKK3ZvaWQgZG9fc2V0X2N1cnJlbnRfdGltZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXRpbWVfdCBub3c7CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAyLCAyLCBhcmd2WzBdLAorCQkJCSI8dGltZT4iLCAwKSkKKwkJcmV0dXJuOworCisJbm93ID0gc3RyaW5nX3RvX3RpbWUoYXJndlsxXSk7CisJaWYgKG5vdyA9PSAoKHRpbWVfdCkgLTEpKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgIkNvdWxkbid0IHBhcnNlIGFyZ3VtZW50IGFzIGEgdGltZTogJXNcbiIsCisJCQlhcmd2WzFdKTsKKwkJcmV0dXJuOworCisJfSBlbHNlIHsKKwkJcHJpbnRmKCJTZXR0aW5nIGN1cnJlbnQgdGltZSB0byAlc1xuIiwgdGltZV90b19zdHJpbmcobm93KSk7CisJCWN1cnJlbnRfZnMtPm5vdyA9IG5vdzsKKwl9Cit9CisjZW5kaWYgLyogUkVBRF9PTkxZICovCisKK3N0YXRpYyBpbnQgZmluZF9zdXBwX2ZlYXR1cmUoX191MzIgKnN1cHAsIGludCBmZWF0dXJlX3R5cGUsIGNoYXIgKm5hbWUpCit7CisJaW50IGNvbXBhdCwgYml0LCByZXQ7CisJdW5zaWduZWQgaW50IGZlYXR1cmVfbWFzazsKKworCWlmIChuYW1lKSB7CisJCWlmIChmZWF0dXJlX3R5cGUgPT0gRTJQX0ZTX0ZFQVRVUkUpCisJCQlyZXQgPSBlMnBfc3RyaW5nMmZlYXR1cmUobmFtZSwgJmNvbXBhdCwgJmZlYXR1cmVfbWFzayk7CisJCWVsc2UKKwkJCXJldCA9IGUycF9qcm5sX3N0cmluZzJmZWF0dXJlKG5hbWUsICZjb21wYXQsCisJCQkJCQkgICAgICAmZmVhdHVyZV9tYXNrKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKCEoc3VwcFtjb21wYXRdICYgZmVhdHVyZV9tYXNrKSkKKwkJCXJldHVybiAxOworCX0gZWxzZSB7CisJICAgICAgICBmb3IgKGNvbXBhdCA9IDA7IGNvbXBhdCA8IDM7IGNvbXBhdCsrKSB7CisJCSAgICAgICAgZm9yIChiaXQgPSAwLCBmZWF0dXJlX21hc2sgPSAxOyBiaXQgPCAzMjsKKwkJCSAgICAgYml0KyssIGZlYXR1cmVfbWFzayA8PD0gMSkgeworCQkJICAgICAgICBpZiAoc3VwcFtjb21wYXRdICYgZmVhdHVyZV9tYXNrKSB7CisJCQkJCWlmIChmZWF0dXJlX3R5cGUgPT0gRTJQX0ZTX0ZFQVRVUkUpCisJCQkJCQlmcHJpbnRmKHN0ZG91dCwgIiAlcyIsCisJCQkJCQllMnBfZmVhdHVyZTJzdHJpbmcoY29tcGF0LAorCQkJCQkJZmVhdHVyZV9tYXNrKSk7CisJCQkJCWVsc2UKKwkJCQkJCWZwcmludGYoc3Rkb3V0LCAiICVzIiwKKwkJCQkJCWUycF9qcm5sX2ZlYXR1cmUyc3RyaW5nKGNvbXBhdCwKKwkJCQkJCWZlYXR1cmVfbWFzaykpOworCQkJCX0KKwkgICAgICAgIAl9CisJCX0KKwkgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkb19zdXBwb3J0ZWRfZmVhdHVyZXMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICAgICAgaW50CXJldDsKKwlfX3UzMglzdXBwWzNdID0geyBFWFQyX0xJQl9GRUFUVVJFX0NPTVBBVF9TVVBQLAorCQkJICAgIEVYVDJfTElCX0ZFQVRVUkVfSU5DT01QQVRfU1VQUCwKKwkJCSAgICBFWFQyX0xJQl9GRUFUVVJFX1JPX0NPTVBBVF9TVVBQIH07CisJX191MzIJanJubF9zdXBwWzNdID0geyBKRlNfS05PV05fQ09NUEFUX0ZFQVRVUkVTLAorCQkJCSBKRlNfS05PV05fSU5DT01QQVRfRkVBVFVSRVMsCisJCQkJIEpGU19LTk9XTl9ST0NPTVBBVF9GRUFUVVJFUyB9OworCisJaWYgKGFyZ2MgPiAxKSB7CisJCXJldCA9IGZpbmRfc3VwcF9mZWF0dXJlKHN1cHAsIEUyUF9GU19GRUFUVVJFLCBhcmd2WzFdKTsKKwkJaWYgKHJldCkgeworCQkJcmV0ID0gZmluZF9zdXBwX2ZlYXR1cmUoanJubF9zdXBwLCBFMlBfSk9VUk5BTF9GRUFUVVJFLAorCQkJCQkJYXJndlsxXSk7CisJCX0KKwkJaWYgKHJldCkKKwkJCWNvbV9lcnIoYXJndlswXSwgMCwgIlVua25vd24gZmVhdHVyZTogJXNcbiIsIGFyZ3ZbMV0pOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZG91dCwgIlN1cHBvcnRlZCBmZWF0dXJlOiAlc1xuIiwgYXJndlsxXSk7CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRvdXQsICJTdXBwb3J0ZWQgZmVhdHVyZXM6Iik7CisJCXJldCA9IGZpbmRfc3VwcF9mZWF0dXJlKHN1cHAsIEUyUF9GU19GRUFUVVJFLCBOVUxMKTsKKwkJcmV0ID0gZmluZF9zdXBwX2ZlYXR1cmUoanJubF9zdXBwLCBFMlBfSk9VUk5BTF9GRUFUVVJFLCBOVUxMKTsKKwl9Cit9CisKKyNpZm5kZWYgUkVBRF9PTkxZCit2b2lkIGRvX3B1bmNoKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXh0Ml9pbm9fdAlpbm87CisJYmxrNjRfdAkJc3RhcnQsIGVuZDsKKwlpbnQJCWVycjsKKwllcnJjb2RlX3QJZXJyY29kZTsKKworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDMsIDQsIGFyZ3ZbMF0sCisJCQkJIjxmaWxlPiBzdGFydF9ibGsgW2VuZF9ibGtdIiwKKwkJCQlDSEVDS19GU19SVyB8IENIRUNLX0ZTX0JJVE1BUFMpKQorCQlyZXR1cm47CisKKwlpbm8gPSBzdHJpbmdfdG9faW5vZGUoYXJndlsxXSk7CisJaWYgKCFpbm8pCisJCXJldHVybjsKKwllcnIgPSBzdHJ0b2Jsayhhcmd2WzBdLCBhcmd2WzJdLCAibG9naWNhbCBibG9jayIsICZzdGFydCk7CisJaWYgKGVycikKKwkJcmV0dXJuOworCWlmIChhcmdjID09IDQpIHsKKwkJZXJyID0gc3RydG9ibGsoYXJndlswXSwgYXJndlszXSwgImxvZ2ljYWwgYmxvY2siLCAmZW5kKTsKKwkJaWYgKGVycikKKwkJCXJldHVybjsKKwl9IGVsc2UKKwkJZW5kID0gfjA7CisKKwllcnJjb2RlID0gZXh0MmZzX3B1bmNoKGN1cnJlbnRfZnMsIGlubywgMCwgMCwgc3RhcnQsIGVuZCk7CisKKwlpZiAoZXJyY29kZSkgeworCQljb21fZXJyKGFyZ3ZbMF0sIGVycmNvZGUsCisJCQkid2hpbGUgdHJ1bmNhdGluZyBpbm9kZSAldSBmcm9tICVsbHUgdG8gJWxsdVxuIiwgaW5vLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpIGVuZCk7CisJCXJldHVybjsKKwl9Cit9CisjZW5kaWYgLyogUkVBRF9PTkxZICovCisKK3ZvaWQgZG9fc3ltbGluayhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNoYXIJCSpjcDsKKwlleHQyX2lub190CXBhcmVudDsKKwljaGFyCQkqbmFtZSwgKnRhcmdldDsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMywgMywgInN5bWxpbmsiLAorCQkJCSI8ZmlsZW5hbWU+IDx0YXJnZXQ+IiwgQ0hFQ0tfRlNfUlcpKQorCQlyZXR1cm47CisKKwljcCA9IHN0cnJjaHIoYXJndlsxXSwgJy8nKTsKKwlpZiAoY3ApIHsKKwkJKmNwID0gMDsKKwkJcGFyZW50ID0gc3RyaW5nX3RvX2lub2RlKGFyZ3ZbMV0pOworCQlpZiAoIXBhcmVudCkgeworCQkJY29tX2Vycihhcmd2WzFdLCBFTk9FTlQsIDApOworCQkJcmV0dXJuOworCQl9CisJCW5hbWUgPSBjcCsxOworCX0gZWxzZSB7CisJCXBhcmVudCA9IGN3ZDsKKwkJbmFtZSA9IGFyZ3ZbMV07CisJfQorCXRhcmdldCA9IGFyZ3ZbMl07CisKK3RyeV9hZ2FpbjoKKwlyZXR2YWwgPSBleHQyZnNfc3ltbGluayhjdXJyZW50X2ZzLCBwYXJlbnQsIDAsIG5hbWUsIHRhcmdldCk7CisJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBwYXJlbnQpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKwkJCXJldHVybjsKKwkJfQorCQlnb3RvIHRyeV9hZ2FpbjsKKwl9CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfc3ltbGluayIsIHJldHZhbCwgMCk7CisJCXJldHVybjsKKwl9CisKK30KKwordm9pZCBkb19kdW1wX21tcChpbnQgYXJnYyBFWFQyRlNfQVRUUigodW51c2VkKSksIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3QgbW1wX3N0cnVjdCAqbW1wX3M7CisJdGltZV90IHQ7CisJZXJyY29kZV90IHJldHZhbCA9IDA7CisKKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaWYgKGN1cnJlbnRfZnMtPm1tcF9idWYgPT0gTlVMTCkgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShjdXJyZW50X2ZzLT5ibG9ja3NpemUsCisJCQkJCSZjdXJyZW50X2ZzLT5tbXBfYnVmKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJhbGxvY2F0aW5nIE1NUCBidWZmZXIuXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCW1tcF9zID0gY3VycmVudF9mcy0+bW1wX2J1ZjsKKworCXJldHZhbCA9IGV4dDJmc19tbXBfcmVhZChjdXJyZW50X2ZzLCBjdXJyZW50X2ZzLT5zdXBlci0+c19tbXBfYmxvY2ssCisJCQkJIGN1cnJlbnRfZnMtPm1tcF9idWYpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJyZWFkaW5nIE1NUCBibG9jay5cbiIpOworCQlyZXR1cm47CisJfQorCisJdCA9IG1tcF9zLT5tbXBfdGltZTsKKwlmcHJpbnRmKHN0ZG91dCwgImJsb2NrX251bWJlcjogJWxsdVxuIiwgY3VycmVudF9mcy0+c3VwZXItPnNfbW1wX2Jsb2NrKTsKKwlmcHJpbnRmKHN0ZG91dCwgInVwZGF0ZV9pbnRlcnZhbDogJWRcbiIsCisJCWN1cnJlbnRfZnMtPnN1cGVyLT5zX21tcF91cGRhdGVfaW50ZXJ2YWwpOworCWZwcmludGYoc3Rkb3V0LCAiY2hlY2tfaW50ZXJ2YWw6ICVkXG4iLCBtbXBfcy0+bW1wX2NoZWNrX2ludGVydmFsKTsKKwlmcHJpbnRmKHN0ZG91dCwgInNlcXVlbmNlOiAlMDh4XG4iLCBtbXBfcy0+bW1wX3NlcSk7CisJZnByaW50ZihzdGRvdXQsICJ0aW1lOiAlbGxkIC0tICVzIiwgbW1wX3MtPm1tcF90aW1lLCBjdGltZSgmdCkpOworCWZwcmludGYoc3Rkb3V0LCAibm9kZV9uYW1lOiAlc1xuIiwgbW1wX3MtPm1tcF9ub2RlbmFtZSk7CisJZnByaW50ZihzdGRvdXQsICJkZXZpY2VfbmFtZTogJXNcbiIsIG1tcF9zLT5tbXBfYmRldm5hbWUpOworCWZwcmludGYoc3Rkb3V0LCAibWFnaWM6IDB4JXhcbiIsIG1tcF9zLT5tbXBfbWFnaWMpOworfQorCitzdGF0aWMgaW50IHNvdXJjZV9maWxlKGNvbnN0IGNoYXIgKmNtZF9maWxlLCBpbnQgc3NfaWR4KQoreworCUZJTEUJCSpmOworCWNoYXIJCWJ1ZltCVUZTSVpdOworCWNoYXIJCSpjcDsKKwlpbnQJCWV4aXRfc3RhdHVzID0gMDsKKwlpbnQJCXJldHZhbDsKKworCWlmIChzdHJjbXAoY21kX2ZpbGUsICItIikgPT0gMCkKKwkJZiA9IHN0ZGluOworCWVsc2UgeworCQlmID0gZm9wZW4oY21kX2ZpbGUsICJyIik7CisJCWlmICghZikgeworCQkJcGVycm9yKGNtZF9maWxlKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJZmZsdXNoKHN0ZG91dCk7CisJZmZsdXNoKHN0ZGVycik7CisJc2V0YnVmKHN0ZG91dCwgTlVMTCk7CisJc2V0YnVmKHN0ZGVyciwgTlVMTCk7CisJd2hpbGUgKCFmZW9mKGYpKSB7CisJCWlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWNwID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7CisJCWlmIChjcCkKKwkJCSpjcCA9IDA7CisJCWNwID0gc3RyY2hyKGJ1ZiwgJ1xyJyk7CisJCWlmIChjcCkKKwkJCSpjcCA9IDA7CisJCXByaW50ZigiZGVidWdmczogJXNcbiIsIGJ1Zik7CisJCXJldHZhbCA9IHNzX2V4ZWN1dGVfbGluZShzc19pZHgsIGJ1Zik7CisJCWlmIChyZXR2YWwpIHsKKwkJCXNzX3BlcnJvcihzc19pZHgsIHJldHZhbCwgYnVmKTsKKwkJCWV4aXRfc3RhdHVzKys7CisJCX0KKwl9CisJaWYgKGYgIT0gc3RkaW4pCisJCWZjbG9zZShmKTsKKwlyZXR1cm4gZXhpdF9zdGF0dXM7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQJCXJldHZhbDsKKwljb25zdCBjaGFyCSp1c2FnZSA9IAorCQkiVXNhZ2U6ICVzIFstYiBibG9ja3NpemVdIFstcyBzdXBlcmJsb2NrXSBbLWYgY21kX2ZpbGVdICIKKwkJIlstUiByZXF1ZXN0XSBbLVZdIFsiCisjaWZuZGVmIFJFQURfT05MWQorCQkiWy13XSAiCisjZW5kaWYKKwkJIlstY10gZGV2aWNlXSI7CisJaW50CQljOworCWludAkJb3Blbl9mbGFncyA9IEVYVDJfRkxBR19TT0ZUU1VQUF9GRUFUVVJFUyB8IEVYVDJfRkxBR182NEJJVFM7CisJY2hhcgkJKnJlcXVlc3QgPSAwOworCWludAkJZXhpdF9zdGF0dXMgPSAwOworCWNoYXIJCSpjbWRfZmlsZSA9IDA7CisJYmxrNjRfdAkJc3VwZXJibG9jayA9IDA7CisJYmxrNjRfdAkJYmxvY2tzaXplID0gMDsKKwlpbnQJCWNhdGFzdHJvcGhpYyA9IDA7CisJY2hhcgkJKmRhdGFfZmlsZW5hbWUgPSAwOworI2lmZGVmIFJFQURfT05MWQorCWNvbnN0IGNoYXIJKm9wdF9zdHJpbmcgPSAiaWNSOmY6YjpzOlZkOkQiOworI2Vsc2UKKwljb25zdCBjaGFyCSpvcHRfc3RyaW5nID0gIml3Y1I6ZjpiOnM6VmQ6RCI7CisjZW5kaWYKKworCWlmIChkZWJ1Z19wcm9nX25hbWUgPT0gMCkKKyNpZmRlZiBSRUFEX09OTFkKKwkJZGVidWdfcHJvZ19uYW1lID0gInJkZWJ1Z2ZzIjsKKyNlbHNlCisJCWRlYnVnX3Byb2dfbmFtZSA9ICJkZWJ1Z2ZzIjsKKyNlbmRpZgorCWFkZF9lcnJvcl90YWJsZSgmZXRfZXh0Ml9lcnJvcl90YWJsZSk7CisJZnByaW50ZiAoc3RkZXJyLCAiJXMgJXMgKCVzKVxuIiwgZGVidWdfcHJvZ19uYW1lLAorCQkgRTJGU1BST0dTX1ZFUlNJT04sIEUyRlNQUk9HU19EQVRFKTsKKworCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgb3B0X3N0cmluZykpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnUic6CisJCQlyZXF1ZXN0ID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ2YnOgorCQkJY21kX2ZpbGUgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQlkYXRhX2ZpbGVuYW1lID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJb3Blbl9mbGFncyB8PSBFWFQyX0ZMQUdfSU1BR0VfRklMRTsKKwkJCWJyZWFrOworI2lmbmRlZiBSRUFEX09OTFkKKwkJY2FzZSAndyc6CisJCQlvcGVuX2ZsYWdzIHw9IEVYVDJfRkxBR19SVzsKKwkJCWJyZWFrOworI2VuZGlmCisJCWNhc2UgJ0QnOgorCQkJb3Blbl9mbGFncyB8PSBFWFQyX0ZMQUdfRElSRUNUX0lPOworCQkJYnJlYWs7CisJCWNhc2UgJ2InOgorCQkJYmxvY2tzaXplID0gcGFyc2VfdWxvbmcob3B0YXJnLCBhcmd2WzBdLAorCQkJCQkJImJsb2NrIHNpemUiLCAwKTsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCXJldHZhbCA9IHN0cnRvYmxrKGFyZ3ZbMF0sIG9wdGFyZywKKwkJCQkJICAic3VwZXJibG9jayBibG9jayBudW1iZXIiLAorCQkJCQkgICZzdXBlcmJsb2NrKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIDE7CisJCQlicmVhazsKKwkJY2FzZSAnYyc6CisJCQljYXRhc3Ryb3BoaWMgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ1YnOgorCQkJLyogUHJpbnQgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQgKi8KKwkJCWZwcmludGYoc3RkZXJyLCAiXHRVc2luZyAlc1xuIiwKKwkJCQllcnJvcl9tZXNzYWdlKEVYVDJfRVRfQkFTRSkpOworCQkJZXhpdCgwKTsKKwkJZGVmYXVsdDoKKwkJCWNvbV9lcnIoYXJndlswXSwgMCwgdXNhZ2UsIGRlYnVnX3Byb2dfbmFtZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlpZiAob3B0aW5kIDwgYXJnYykKKwkJb3Blbl9maWxlc3lzdGVtKGFyZ3Zbb3B0aW5kXSwgb3Blbl9mbGFncywKKwkJCQlzdXBlcmJsb2NrLCBibG9ja3NpemUsIGNhdGFzdHJvcGhpYywKKwkJCQlkYXRhX2ZpbGVuYW1lKTsKKworCXNjaV9pZHggPSBzc19jcmVhdGVfaW52b2NhdGlvbihkZWJ1Z19wcm9nX25hbWUsICIwLjAiLCAoY2hhciAqKSBOVUxMLAorCQkJCSAgICAgICAmZGVidWdfY21kcywgJnJldHZhbCk7CisJaWYgKHJldHZhbCkgeworCQlzc19wZXJyb3Ioc2NpX2lkeCwgcmV0dmFsLCAiY3JlYXRpbmcgaW52b2NhdGlvbiIpOworCQlleGl0KDEpOworCX0KKwlzc19nZXRfcmVhZGxpbmUoc2NpX2lkeCk7CisKKwkodm9pZCkgc3NfYWRkX3JlcXVlc3RfdGFibGUgKHNjaV9pZHgsICZzc19zdGRfcmVxdWVzdHMsIDEsICZyZXR2YWwpOworCWlmIChyZXR2YWwpIHsKKwkJc3NfcGVycm9yKHNjaV9pZHgsIHJldHZhbCwgImFkZGluZyBzdGFuZGFyZCByZXF1ZXN0cyIpOworCQlleGl0ICgxKTsKKwl9CisJaWYgKGV4dHJhX2NtZHMpCisJCXNzX2FkZF9yZXF1ZXN0X3RhYmxlIChzY2lfaWR4LCBleHRyYV9jbWRzLCAxLCAmcmV0dmFsKTsKKwlpZiAocmV0dmFsKSB7CisJCXNzX3BlcnJvcihzY2lfaWR4LCByZXR2YWwsICJhZGRpbmcgZXh0cmEgcmVxdWVzdHMiKTsKKwkJZXhpdCAoMSk7CisJfQorCWlmIChyZXF1ZXN0KSB7CisJCXJldHZhbCA9IDA7CisJCXJldHZhbCA9IHNzX2V4ZWN1dGVfbGluZShzY2lfaWR4LCByZXF1ZXN0KTsKKwkJaWYgKHJldHZhbCkgeworCQkJc3NfcGVycm9yKHNjaV9pZHgsIHJldHZhbCwgcmVxdWVzdCk7CisJCQlleGl0X3N0YXR1cysrOworCQl9CisJfSBlbHNlIGlmIChjbWRfZmlsZSkgeworCQlleGl0X3N0YXR1cyA9IHNvdXJjZV9maWxlKGNtZF9maWxlLCBzY2lfaWR4KTsKKwl9IGVsc2UgeworCQlzc19saXN0ZW4oc2NpX2lkeCk7CisJfQorCisJc3NfZGVsZXRlX2ludm9jYXRpb24oc2NpX2lkeCk7CisKKwlpZiAoY3VycmVudF9mcykKKwkJY2xvc2VfZmlsZXN5c3RlbSgpOworCisJcmVtb3ZlX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKwlyZXR1cm4gZXhpdF9zdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9kZWJ1Z2ZzL2RlYnVnZnMuaCBiL2RlYnVnZnMvZGVidWdmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzVjZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJ1Z2ZzL2RlYnVnZnMuaApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIGRlYnVnZnMuaCAtLS0gaGVhZGVyIGZpbGUgZm9yIHRoZSBkZWJ1Z2ZzIHByb2dyYW0KKyAqLworCisjaW5jbHVkZSAic3Mvc3MuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKyNpbmNsdWRlICJxdW90YS9xdW90YWlvLmgiCisKKyNpZmRlZiBfX1NURENfXworI2RlZmluZSBOT0FSR1Mgdm9pZAorI2Vsc2UKKyNkZWZpbmUgTk9BUkdTCisjZGVmaW5lIGNvbnN0CisjZW5kaWYKKworLyoKKyAqIEZsYWdzIHVzZWQgYnkgdGhlIGNvbW1vbiBhcmd1bWVudCBwcm9jZXNzaW5nIGZ1bmN0aW9ucworICovCisjZGVmaW5lIENIRUNLX0ZTX1JXCQkweDAwMDEKKyNkZWZpbmUgQ0hFQ0tfRlNfQklUTUFQUwkweDAwMDIKKyNkZWZpbmUgQ0hFQ0tfRlNfTk9UT1BFTgkweDAwMDQKKworZXh0ZXJuIGV4dDJfZmlsc3lzIGN1cnJlbnRfZnM7CitleHRlcm4gcXVvdGFfY3R4X3QgY3VycmVudF9xY3R4OworZXh0ZXJuIGV4dDJfaW5vX3QJcm9vdCwgY3dkOworZXh0ZXJuIGludCBzY2lfaWR4OworZXh0ZXJuIHNzX3JlcXVlc3RfdGFibGUgZGVidWdfY21kcywgZXh0ZW50X2NtZHM7CisKK2V4dGVybiB2b2lkIHJlc2V0X2dldG9wdCh2b2lkKTsKK2V4dGVybiBGSUxFICpvcGVuX3BhZ2VyKHZvaWQpOworZXh0ZXJuIHZvaWQgY2xvc2VfcGFnZXIoRklMRSAqc3RyZWFtKTsKK2V4dGVybiBpbnQgY2hlY2tfZnNfb3BlbihjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgY2hlY2tfZnNfbm90X29wZW4oY2hhciAqbmFtZSk7CitleHRlcm4gaW50IGNoZWNrX2ZzX3JlYWRfd3JpdGUoY2hhciAqbmFtZSk7CitleHRlcm4gaW50IGNoZWNrX2ZzX2JpdG1hcHMoY2hhciAqbmFtZSk7CitleHRlcm4gZXh0Ml9pbm9fdCBzdHJpbmdfdG9faW5vZGUoY2hhciAqc3RyKTsKK2V4dGVybiBjaGFyICp0aW1lX3RvX3N0cmluZyhfX3UzMik7CitleHRlcm4gdGltZV90IHN0cmluZ190b190aW1lKGNvbnN0IGNoYXIgKik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBwYXJzZV91bG9uZyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmNtZCwKKwkJCQkgY29uc3QgY2hhciAqZGVzY3IsIGludCAqZXJyKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgcGFyc2VfdWxvbmdsb25nKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqY21kLAorCQkJCQkgIGNvbnN0IGNoYXIgKmRlc2NyLCBpbnQgKmVycik7CitleHRlcm4gaW50IHN0cnRvYmxrKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICplcnJtc2csCisJCSAgICBibGs2NF90ICpyZXQpOworZXh0ZXJuIGludCBjb21tb25fYXJnc19wcm9jZXNzKGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBtaW5fYXJnYywKKwkJCSAgICAgICBpbnQgbWF4X2FyZ2MsIGNvbnN0IGNoYXIgKmNtZCwKKwkJCSAgICAgICBjb25zdCBjaGFyICp1c2FnZSwgaW50IGZsYWdzKTsKK2V4dGVybiBpbnQgY29tbW9uX2lub2RlX2FyZ3NfcHJvY2VzcyhpbnQgYXJnYywgY2hhciAqYXJndltdLAorCQkJCSAgICAgZXh0Ml9pbm9fdCAqaW5vZGUsIGludCBmbGFncyk7CitleHRlcm4gaW50IGNvbW1vbl9ibG9ja19hcmdzX3Byb2Nlc3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwKKwkJCQkgICAgIGJsazY0X3QgKmJsb2NrLCBibGs2NF90ICpjb3VudCk7CitleHRlcm4gaW50IGRlYnVnZnNfcmVhZF9pbm9kZShleHQyX2lub190IGlubywgc3RydWN0IGV4dDJfaW5vZGUgKiBpbm9kZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmNtZCk7CitleHRlcm4gaW50IGRlYnVnZnNfcmVhZF9pbm9kZV9mdWxsKGV4dDJfaW5vX3QgaW5vLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLAorCQkJCSAgIGNvbnN0IGNoYXIgKmNtZCwgaW50IGJ1ZnNpemUpOworZXh0ZXJuIGludCBkZWJ1Z2ZzX3dyaXRlX2lub2RlKGV4dDJfaW5vX3QgaW5vLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmNtZCk7CitleHRlcm4gaW50IGRlYnVnZnNfd3JpdGVfaW5vZGVfZnVsbChleHQyX2lub190IGlubywgc3RydWN0IGV4dDJfaW5vZGUgKiBpbm9kZSwKKwkJCQkgICAgY29uc3QgY2hhciAqY21kLCBpbnQgYnVmc2l6ZSk7CitleHRlcm4gaW50IGRlYnVnZnNfd3JpdGVfbmV3X2lub2RlKGV4dDJfaW5vX3QgaW5vLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLAorCQkJCSAgIGNvbnN0IGNoYXIgKmNtZCk7CitleHRlcm4gaW50IGV4dDJfZmlsZV90eXBlKHVuc2lnbmVkIGludCBtb2RlKTsKKworLyogc3MgY29tbWFuZCBmdW5jdGlvbnMgKi8KKworLyogZHVtcC5jICovCitleHRlcm4gdm9pZCBkb19kdW1wKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19jYXQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3JkdW1wKGludCBhcmdjLCBjaGFyICoqYXJndik7CisKKy8qIGV4dGVudF9pbm9kZS5jICovCitleHRlcm4gdm9pZCBkb19leHRlbnRfb3BlbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fZXh0ZW50X2Nsb3NlKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19jdXJyZW50X25vZGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3Jvb3Rfbm9kZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fbGFzdF9sZWFmKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19maXJzdF9zaWIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2xhc3Rfc2liKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19uZXh0X3NpYihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fcHJldl9zaWIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX25leHRfbGVhZihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fcHJldl9sZWFmKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19uZXh0KGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19wcmV2KGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb191cChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fZG93bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fZGVsZXRlX25vZGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3JlcGxhY2Vfbm9kZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fc3BsaXRfbm9kZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9faW5zZXJ0X25vZGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3NldF9ibWFwKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19wcmludF9hbGwoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2ZpeF9wYXJlbnRzKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19pbmZvKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19nb3RvX2Jsb2NrKGludCBhcmdjLCBjaGFyICoqYXJndik7CisKKy8qIGh0cmVlLmMgKi8KK2V4dGVybiB2b2lkIGRvX2h0cmVlX2R1bXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2R4X2hhc2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2RpcnNlYXJjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworCisvKiBsb2dkdW1wLmMgKi8KK2V4dGVybiB2b2lkIGRvX2xvZ2R1bXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKKworLyogbHNkZWwuYyAqLworZXh0ZXJuIHZvaWQgZG9fbHNkZWwoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKKworLyogaWNoZWNrLmMgKi8KK2V4dGVybiB2b2lkIGRvX2ljaGVjayhpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworCisvKiBuY2hlY2suYyAqLworZXh0ZXJuIHZvaWQgZG9fbmNoZWNrKGludCBhcmdjLCBjaGFyICoqYXJndik7CisKKy8qIHNldF9maWVsZHMuYyAqLworZXh0ZXJuIHZvaWQgZG9fc2V0X3N1cGVyKGludCBhcmdjLCBjaGFyICoqKTsKK2V4dGVybiB2b2lkIGRvX3NldF9pbm9kZShpbnQgYXJnYywgY2hhciAqKik7CitleHRlcm4gdm9pZCBkb19zZXRfYmxvY2tfZ3JvdXBfZGVzY3JpcHRvcihpbnQgYXJnYywgY2hhciAqKik7CisKKy8qIHVudXNlZC5jICovCitleHRlcm4gdm9pZCBkb19kdW1wX3VudXNlZChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworCisvKiBkZWJ1Z2ZzLmMgKi8KK2V4dGVybiB2b2lkIGludGVybmFsX2R1bXBfaW5vZGUoRklMRSAqLCBjb25zdCBjaGFyICosIGV4dDJfaW5vX3QsCisJCQkJc3RydWN0IGV4dDJfaW5vZGUgKiwgaW50KTsKKworZXh0ZXJuIHZvaWQgZG9fZGlydHlfZmlsZXN5cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fb3Blbl9maWxlc3lzKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19jbG9zZV9maWxlc3lzKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19sY2QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2luaXRfZmlsZXN5cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fc2hvd19zdXBlcl9zdGF0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fa2lsbF9maWxlKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19ybShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fbGluayhpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fdW5kZWwoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3VubGluayhpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fZmluZF9mcmVlX2Jsb2NrKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19maW5kX2ZyZWVfaW5vZGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3N0YXQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2R1bXBfZXh0ZW50cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fYmxvY2tzKGludCBhcmdjLCBjaGFyICphcmd2W10pOworCitleHRlcm4gdm9pZCBkb19jaHJvb3QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2NscmkoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2ZyZWVpKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19zZXRpKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb190ZXN0aShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fZnJlZWIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3NldGIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3Rlc3RiKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19tb2RpZnlfaW5vZGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2xpc3RfZGlyKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19jaGFuZ2Vfd29ya2luZ19kaXIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3ByaW50X3dvcmtpbmdfZGlyZWN0b3J5KGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb193cml0ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fbWtub2QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX21rZGlyKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19ybWRpcihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fc2hvd19kZWJ1Z2ZzX3BhcmFtcyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fZXhwYW5kX2RpcihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fZmVhdHVyZXMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2JtYXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2ltYXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3NldF9jdXJyZW50X3RpbWUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3N1cHBvcnRlZF9mZWF0dXJlcyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fcHVuY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3N5bWxpbmsoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKKworZXh0ZXJuIHZvaWQgZG9fZHVtcF9tbXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3NldF9tbXBfdmFsdWUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKKworZXh0ZXJuIHZvaWQgZG9fZnJlZWZyYWcoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2ZpbGVmcmFnKGludCBhcmdjLCBjaGFyICphcmd2W10pOworCisvKiBxdW90YS5jICovCitleHRlcm4gdm9pZCBkb19saXN0X3F1b3RhKGludCBhcmdjLCBjaGFyICphcmd2W10pOworZXh0ZXJuIHZvaWQgZG9fZ2V0X3F1b3RhKGludCBhcmdjLCBjaGFyICphcmd2W10pOworCisvKiB1dGlsLmMgKi8KK2V4dGVybiB0aW1lX3Qgc3RyaW5nX3RvX3RpbWUoY29uc3QgY2hhciAqYXJnKTsKKworLyogemFwLmMgKi8KK2V4dGVybiB2b2lkIGRvX3phcF9ibG9jayhpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fYmxvY2tfZHVtcChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fYnl0ZV9oZXhkdW1wKEZJTEUgKmZwLCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZzaXplKTsKZGlmZiAtLWdpdCBhL2RlYnVnZnMvZHVtcC5jIGIvZGVidWdmcy9kdW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5Nzg4NgotLS0gL2Rldi9udWxsCisrKyBiL2RlYnVnZnMvZHVtcC5jCkBAIC0wLDAgKzEsMzg0IEBACisvKgorICogZHVtcC5jIC0tLSBkdW1wIHRoZSBjb250ZW50cyBvZiBhbiBpbm9kZSBvdXQgdG8gYSBmaWxlCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyNkZWZpbmUgX0dOVV9TT1VSQ0UgLyogZm9yIE9fTEFSR0VGSUxFICovCisjZW5kaWYKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1dGltZS5oPgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gaW50IG9wdGluZDsKK2V4dGVybiBjaGFyICpvcHRhcmc7CisjZW5kaWYKKworI2luY2x1ZGUgImRlYnVnZnMuaCIKKworI2lmbmRlZiBPX0xBUkdFRklMRQorI2RlZmluZSBPX0xBUkdFRklMRSAwCisjZW5kaWYKKworLyoKKyAqIFRoZSBtb2RlX3hsYXRlIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgYSBsaW51eCBtb2RlIGludG8gYSBuYXRpdmUtT1MgbW9kZV90LgorICovCitzdGF0aWMgc3RydWN0IHsKKwlfX3UxNiBsbWFzazsKKwltb2RlX3QgbWFzazsKK30gbW9kZV90YWJsZVtdID0geworCXsgTElOVVhfU19JUlVTUiwgU19JUlVTUiB9LAorCXsgTElOVVhfU19JV1VTUiwgU19JV1VTUiB9LAorCXsgTElOVVhfU19JWFVTUiwgU19JWFVTUiB9LAorCXsgTElOVVhfU19JUkdSUCwgU19JUkdSUCB9LAorCXsgTElOVVhfU19JV0dSUCwgU19JV0dSUCB9LAorCXsgTElOVVhfU19JWEdSUCwgU19JWEdSUCB9LAorCXsgTElOVVhfU19JUk9USCwgU19JUk9USCB9LAorCXsgTElOVVhfU19JV09USCwgU19JV09USCB9LAorCXsgTElOVVhfU19JWE9USCwgU19JWE9USCB9LAorCXsgMCwgMCB9Cit9OworCitzdGF0aWMgbW9kZV90IG1vZGVfeGxhdGUoX191MTYgbG1vZGUpCit7CisJbW9kZV90CW1vZGUgPSAwOworCWludAlpOworCisJZm9yIChpPTA7IG1vZGVfdGFibGVbaV0ubG1hc2s7IGkrKykgeworCQlpZiAobG1vZGUgJiBtb2RlX3RhYmxlW2ldLmxtYXNrKQorCQkJbW9kZSB8PSBtb2RlX3RhYmxlW2ldLm1hc2s7CisJfQorCXJldHVybiBtb2RlOworfQorCitzdGF0aWMgdm9pZCBmaXhfcGVybXMoY29uc3QgY2hhciAqY21kLCBjb25zdCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCSAgICAgIGludCBmZCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgdXRpbWJ1ZiB1dDsKKwlpbnQgaTsKKworCWlmIChmZCAhPSAtMSkKKwkJaSA9IGZjaG1vZChmZCwgbW9kZV94bGF0ZShpbm9kZS0+aV9tb2RlKSk7CisJZWxzZQorCQlpID0gY2htb2QobmFtZSwgbW9kZV94bGF0ZShpbm9kZS0+aV9tb2RlKSk7CisJaWYgKGkgPT0gLTEpCisJCWNvbV9lcnIoY21kLCBlcnJubywgIndoaWxlIHNldHRpbmcgcGVybWlzc2lvbnMgb2YgJXMiLCBuYW1lKTsKKworI2lmbmRlZiBIQVZFX0ZDSE9XTgorCWkgPSBjaG93bihuYW1lLCBpbm9kZS0+aV91aWQsIGlub2RlLT5pX2dpZCk7CisjZWxzZQorCWlmIChmZCAhPSAtMSkKKwkJaSA9IGZjaG93bihmZCwgaW5vZGUtPmlfdWlkLCBpbm9kZS0+aV9naWQpOworCWVsc2UKKwkJaSA9IGNob3duKG5hbWUsIGlub2RlLT5pX3VpZCwgaW5vZGUtPmlfZ2lkKTsKKyNlbmRpZgorCWlmIChpID09IC0xKQorCQljb21fZXJyKGNtZCwgZXJybm8sICJ3aGlsZSBjaGFuZ2luZyBvd25lcnNoaXAgb2YgJXMiLCBuYW1lKTsKKworCXV0LmFjdGltZSA9IGlub2RlLT5pX2F0aW1lOworCXV0Lm1vZHRpbWUgPSBpbm9kZS0+aV9tdGltZTsKKwlpZiAodXRpbWUobmFtZSwgJnV0KSA9PSAtMSkKKwkJY29tX2VycihjbWQsIGVycm5vLCAid2hpbGUgc2V0dGluZyB0aW1lcyBvZiAlcyIsIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2ZpbGUoY29uc3QgY2hhciAqY21kbmFtZSwgZXh0Ml9pbm9fdCBpbm8sIGludCBmZCwKKwkJICAgICAgaW50IHByZXNlcnZlLCBjaGFyICpvdXRuYW1lKQoreworCWVycmNvZGVfdCByZXR2YWw7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJY2hhcgkJKmJ1ZiA9IDA7CisJZXh0Ml9maWxlX3QJZTJfZmlsZTsKKwlpbnQJCW5ieXRlczsKKwl1bnNpZ25lZCBpbnQJZ290LCBibG9ja3NpemUgPSBjdXJyZW50X2ZzLT5ibG9ja3NpemU7CisKKwlpZiAoZGVidWdmc19yZWFkX2lub2RlKGlubywgJmlub2RlLCBjbWRuYW1lKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2ZpbGVfb3BlbihjdXJyZW50X2ZzLCBpbm8sIDAsICZlMl9maWxlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoY21kbmFtZSwgcmV0dmFsLCAid2hpbGUgb3BlbmluZyBleHQyIGZpbGUiKTsKKwkJcmV0dXJuOworCX0KKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShibG9ja3NpemUsICZidWYpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihjbWRuYW1lLCByZXR2YWwsICJ3aGlsZSBhbGxvY2F0aW5nIG1lbW9yeSIpOworCQlyZXR1cm47CisJfQorCXdoaWxlICgxKSB7CisJCXJldHZhbCA9IGV4dDJmc19maWxlX3JlYWQoZTJfZmlsZSwgYnVmLCBibG9ja3NpemUsICZnb3QpOworCQlpZiAocmV0dmFsKQorCQkJY29tX2VycihjbWRuYW1lLCByZXR2YWwsICJ3aGlsZSByZWFkaW5nIGV4dDIgZmlsZSIpOworCQlpZiAoZ290ID09IDApCisJCQlicmVhazsKKwkJbmJ5dGVzID0gd3JpdGUoZmQsIGJ1ZiwgZ290KTsKKwkJaWYgKCh1bnNpZ25lZCkgbmJ5dGVzICE9IGdvdCkKKwkJCWNvbV9lcnIoY21kbmFtZSwgZXJybm8sICJ3aGlsZSB3cml0aW5nIGZpbGUiKTsKKwl9CisJaWYgKGJ1ZikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCXJldHZhbCA9IGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihjbWRuYW1lLCByZXR2YWwsICJ3aGlsZSBjbG9zaW5nIGV4dDIgZmlsZSIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHByZXNlcnZlKQorCQlmaXhfcGVybXMoImR1bXBfZmlsZSIsICZpbm9kZSwgZmQsIG91dG5hbWUpOworCisJcmV0dXJuOworfQorCit2b2lkIGRvX2R1bXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWV4dDJfaW5vX3QJaW5vZGU7CisJaW50CQlmZDsKKwlpbnQJCWM7CisJaW50CQlwcmVzZXJ2ZSA9IDA7CisJY2hhcgkJKmluX2ZuLCAqb3V0X2ZuOworCisJcmVzZXRfZ2V0b3B0KCk7CisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAicCIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ3AnOgorCQkJcHJlc2VydmUrKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQlwcmludF91c2FnZToKKwkJCWNvbV9lcnIoYXJndlswXSwgMCwgIlVzYWdlOiBkdW1wX2lub2RlIFstcF0gIgorCQkJCSI8ZmlsZT4gPG91dHB1dF9maWxlPiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCWlmIChvcHRpbmQgIT0gYXJnYy0yKQorCQlnb3RvIHByaW50X3VzYWdlOworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCWluX2ZuID0gYXJndltvcHRpbmRdOworCW91dF9mbiA9IGFyZ3Zbb3B0aW5kKzFdOworCisJaW5vZGUgPSBzdHJpbmdfdG9faW5vZGUoaW5fZm4pOworCWlmICghaW5vZGUpCisJCXJldHVybjsKKworCWZkID0gb3BlbihvdXRfZm4sIE9fQ1JFQVQgfCBPX1dST05MWSB8IE9fVFJVTkMgfCBPX0xBUkdFRklMRSwgMDY2Nik7CisJaWYgKGZkIDwgMCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIGVycm5vLCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZHVtcF9pbm9kZSIsCisJCQlvdXRfZm4pOworCQlyZXR1cm47CisJfQorCisJZHVtcF9maWxlKGFyZ3ZbMF0sIGlub2RlLCBmZCwgcHJlc2VydmUsIG91dF9mbik7CisJaWYgKGNsb3NlKGZkKSAhPSAwKSB7CisJCWNvbV9lcnIoYXJndlswXSwgZXJybm8sICJ3aGlsZSBjbG9zaW5nICVzIGZvciBkdW1wX2lub2RlIiwKKwkJCW91dF9mbik7CisJCXJldHVybjsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHJkdW1wX3N5bWxpbmsoZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCSAgY29uc3QgY2hhciAqZnVsbG5hbWUpCit7CisJZXh0Ml9maWxlX3QgZTJfZmlsZTsKKwljaGFyICpidWY7CisJZXJyY29kZV90IHJldHZhbDsKKworCWJ1ZiA9IG1hbGxvYyhpbm9kZS0+aV9zaXplICsgMSk7CisJaWYgKCFidWYpIHsKKwkJY29tX2VycigicmR1bXAiLCBlcnJubywgIndoaWxlIGFsbG9jYXRpbmcgZm9yIHN5bWxpbmsiKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJLyogQXBwYXJlbnRseSwgdGhpcyBpcyB0aGUgcmlnaHQgd2F5IHRvIGRldGVjdCBhbmQgaGFuZGxlIGZhc3QKKwkgKiBzeW1saW5rczsgc2VlIGRvX3N0YXQoKSBpbiBkZWJ1Z2ZzLmMuICovCisJaWYgKGlub2RlLT5pX2Jsb2NrcyA9PSAwKQorCQlzdHJjcHkoYnVmLCAoY2hhciAqKSBpbm9kZS0+aV9ibG9jayk7CisJZWxzZSB7CisJCXVuc2lnbmVkIGJ5dGVzID0gaW5vZGUtPmlfc2l6ZTsKKwkJY2hhciAqcCA9IGJ1ZjsKKwkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfb3BlbihjdXJyZW50X2ZzLCBpbm8sIDAsICZlMl9maWxlKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigicmR1bXAiLCByZXR2YWwsICJ3aGlsZSBvcGVuaW5nIHN5bWxpbmsiKTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWZvciAoOzspIHsKKwkJCXVuc2lnbmVkIGludCBnb3Q7CisJCQlyZXR2YWwgPSBleHQyZnNfZmlsZV9yZWFkKGUyX2ZpbGUsIHAsIGJ5dGVzLCAmZ290KTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCQljb21fZXJyKCJyZHVtcCIsIHJldHZhbCwgIndoaWxlIHJlYWRpbmcgc3ltbGluayIpOworCQkJCWdvdG8gZXJyb3V0OworCQkJfQorCQkJYnl0ZXMgLT0gZ290OworCQkJcCArPSBnb3Q7CisJCQlpZiAoZ290ID09IDAgfHwgYnl0ZXMgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCQlidWZbaW5vZGUtPmlfc2l6ZV0gPSAwOworCQlyZXR2YWwgPSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKwkJaWYgKHJldHZhbCkKKwkJCWNvbV9lcnIoInJkdW1wIiwgcmV0dmFsLCAid2hpbGUgY2xvc2luZyBzeW1saW5rIik7CisJfQorCisJaWYgKHN5bWxpbmsoYnVmLCBmdWxsbmFtZSkgPT0gLTEpIHsKKwkJY29tX2VycigicmR1bXAiLCBlcnJubywgIndoaWxlIGNyZWF0aW5nIHN5bWxpbmsgJXMgLT4gJXMiLCBidWYsIGZ1bGxuYW1lKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCitlcnJvdXQ6CisJZnJlZShidWYpOworfQorCitzdGF0aWMgaW50IHJkdW1wX2RpcmVudChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKiwgaW50LCBpbnQsIGNoYXIgKiwgdm9pZCAqKTsKKworc3RhdGljIHZvaWQgcmR1bXBfaW5vZGUoZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCWNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmR1bXByb290KQoreworCWNoYXIgKmZ1bGxuYW1lOworCisJLyogVGhlcmUgYXJlIG1vcmUgZWZmaWNpZW50IHdheXMgdG8gZG8gdGhpcywgYnV0IHRoaXMgbWV0aG9kCisJICogcmVxdWlyZXMgb25seSBtaW5pbWFsIGRlYnVnZ2luZy4gKi8KKwlmdWxsbmFtZSA9IG1hbGxvYyhzdHJsZW4oZHVtcHJvb3QpICsgc3RybGVuKG5hbWUpICsgMik7CisJaWYgKCFmdWxsbmFtZSkgeworCQljb21fZXJyKCJyZHVtcCIsIGVycm5vLCAid2hpbGUgYWxsb2NhdGluZyBtZW1vcnkiKTsKKwkJcmV0dXJuOworCX0KKwlzcHJpbnRmKGZ1bGxuYW1lLCAiJXMvJXMiLCBkdW1wcm9vdCwgbmFtZSk7CisKKwlpZiAoTElOVVhfU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKKwkJcmR1bXBfc3ltbGluayhpbm8sIGlub2RlLCBmdWxsbmFtZSk7CisJZWxzZSBpZiAoTElOVVhfU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgeworCQlpbnQgZmQ7CisJCWZkID0gb3BlbihmdWxsbmFtZSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQyB8IE9fTEFSR0VGSUxFLCBTX0lSV1hVKTsKKwkJaWYgKGZkID09IC0xKSB7CisJCQljb21fZXJyKCJyZHVtcCIsIGVycm5vLCAid2hpbGUgb3BlbmluZyAlcyIsIGZ1bGxuYW1lKTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWR1bXBfZmlsZSgicmR1bXAiLCBpbm8sIGZkLCAxLCBmdWxsbmFtZSk7CisJCWlmIChjbG9zZShmZCkgIT0gMCkgeworCQkJY29tX2VycigicmR1bXAiLCBlcnJubywgIndoaWxlIGNsb3NpbmcgJXMiLCBmdWxsbmFtZSk7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCX0KKwllbHNlIGlmIChMSU5VWF9TX0lTRElSKGlub2RlLT5pX21vZGUpICYmIHN0cmNtcChuYW1lLCAiLiIpICYmIHN0cmNtcChuYW1lLCAiLi4iKSkgeworCQllcnJjb2RlX3QgcmV0dmFsOworCisJCS8qIENyZWF0ZSB0aGUgZGlyZWN0b3J5IHdpdGggMDcwMCBwZXJtaXNzaW9ucywgYmVjYXVzZSB3ZQorCQkgKiBleHBlY3QgdG8gaGF2ZSB0byBjcmVhdGUgZW50cmllcyBpdC4gIFRoZW4gZml4IGl0cyBwZXJtcworCQkgKiBvbmNlIHdlJ3ZlIGRvbmUgdGhlIHRyYXZlcnNhbC4gKi8KKwkJaWYgKG1rZGlyKGZ1bGxuYW1lLCBTX0lSV1hVKSA9PSAtMSkgeworCQkJY29tX2VycigicmR1bXAiLCBlcnJubywgIndoaWxlIG1ha2luZyBkaXJlY3RvcnkgJXMiLCBmdWxsbmFtZSk7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCisJCXJldHZhbCA9IGV4dDJmc19kaXJfaXRlcmF0ZShjdXJyZW50X2ZzLCBpbm8sIDAsIDAsCisJCQkJCSAgICByZHVtcF9kaXJlbnQsICh2b2lkICopIGZ1bGxuYW1lKTsKKwkJaWYgKHJldHZhbCkKKwkJCWNvbV9lcnIoInJkdW1wIiwgcmV0dmFsLCAid2hpbGUgZHVtcGluZyAlcyIsIGZ1bGxuYW1lKTsKKworCQlmaXhfcGVybXMoInJkdW1wIiwgaW5vZGUsIC0xLCBmdWxsbmFtZSk7CisJfQorCS8qIGVsc2UgZG8gbm90aGluZyAoZG9uJ3QgZHVtcCBkZXZpY2UgZmlsZXMsIHNvY2tldHMsIGZpZm9zLCBldGMuKSAqLworCitlcnJvdXQ6CisJZnJlZShmdWxsbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgcmR1bXBfZGlyZW50KHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkJaW50IG9mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQlpbnQgYmxvY2tzaXplIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCWNoYXIgKmJ1ZiBFWFQyRlNfQVRUUigodW51c2VkKSksIHZvaWQgKnByaXZhdGUpCit7CisJY2hhciBuYW1lW0VYVDJfTkFNRV9MRU4gKyAxXTsKKwlpbnQgdGhpc2xlbjsKKwljb25zdCBjaGFyICpkdW1wcm9vdCA9IHByaXZhdGU7CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisKKwl0aGlzbGVuID0gZGlyZW50LT5uYW1lX2xlbiAmIDB4RkY7CisJc3RybmNweShuYW1lLCBkaXJlbnQtPm5hbWUsIHRoaXNsZW4pOworCW5hbWVbdGhpc2xlbl0gPSAwOworCisJaWYgKGRlYnVnZnNfcmVhZF9pbm9kZShkaXJlbnQtPmlub2RlLCAmaW5vZGUsIG5hbWUpKQorCQlyZXR1cm4gMDsKKworCXJkdW1wX2lub2RlKGRpcmVudC0+aW5vZGUsICZpbm9kZSwgbmFtZSwgZHVtcHJvb3QpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZG9fcmR1bXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIgKmRlc3RfZGlyOworCWludCBpOworCisJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMywgSU5UX01BWCwgInJkdW1wIiwKKwkJCQkiPGRpcmVjdG9yeT4uLi4gPG5hdGl2ZSBkaXJlY3Rvcnk+IiwgMCkpCisJCXJldHVybjsKKworCS8qIFB1bGwgb3V0IGxhc3QgYXJndW1lbnQgKi8KKwlkZXN0X2RpciA9IGFyZ3ZbYXJnYyAtIDFdOworCWFyZ2MtLTsKKworCS8qIEVuc3VyZSBsYXN0IGFyZyBpcyBhIGRpcmVjdG9yeS4gKi8KKwlpZiAoc3RhdChkZXN0X2RpciwgJnN0KSA9PSAtMSkgeworCQljb21fZXJyKCJyZHVtcCIsIGVycm5vLCAid2hpbGUgc3RhdHRpbmcgJXMiLCBkZXN0X2Rpcik7CisJCXJldHVybjsKKwl9CisJaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCWNvbV9lcnIoInJkdW1wIiwgMCwgIiVzIGlzIG5vdCBhIGRpcmVjdG9yeSIsIGRlc3RfZGlyKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY2hhciAqYXJnID0gYXJndltpXSwgKmJhc2VuYW1lOworCQlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKwkJZXh0Ml9pbm9fdCBpbm8gPSBzdHJpbmdfdG9faW5vZGUoYXJnKTsKKwkJaWYgKCFpbm8pCisJCQljb250aW51ZTsKKworCQlpZiAoZGVidWdmc19yZWFkX2lub2RlKGlubywgJmlub2RlLCBhcmcpKQorCQkJY29udGludWU7CisKKwkJYmFzZW5hbWUgPSBzdHJyY2hyKGFyZywgJy8nKTsKKwkJaWYgKGJhc2VuYW1lKQorCQkJYmFzZW5hbWUrKzsKKwkJZWxzZQorCQkJYmFzZW5hbWUgPSBhcmc7CisKKwkJcmR1bXBfaW5vZGUoaW5vLCAmaW5vZGUsIGJhc2VuYW1lLCBkZXN0X2Rpcik7CisJfQorfQorCit2b2lkIGRvX2NhdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXh0Ml9pbm9fdAlpbm9kZTsKKworCWlmIChjb21tb25faW5vZGVfYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsICZpbm9kZSwgMCkpCisJCXJldHVybjsKKworCWZmbHVzaChzdGRvdXQpOworCWZmbHVzaChzdGRlcnIpOworCWR1bXBfZmlsZShhcmd2WzBdLCBpbm9kZSwgMSwgMCwgYXJndlsyXSk7CisKKwlyZXR1cm47Cit9CisKZGlmZiAtLWdpdCBhL2RlYnVnZnMvZXh0ZW50X2NtZHMuY3QgYi9kZWJ1Z2ZzL2V4dGVudF9jbWRzLmN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYzQzOTUKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJ1Z2ZzL2V4dGVudF9jbWRzLmN0CkBAIC0wLDAgKzEsNzcgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTkzIFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisjCitjb21tYW5kX3RhYmxlIGV4dGVudF9jbWRzOworCityZXF1ZXN0IGRvX2N1cnJlbnRfbm9kZSwgIkN1cnJlbnQgZXh0ZW50IG5vZGUiLAorCWN1cnJlbnRfbm9kZSwgY3VycmVudDsKKworcmVxdWVzdCBkb19yb290X25vZGUsICJHb3RvIHJvb3QgZXh0ZW50IiwKKwlyb290X25vZGUsIHJvb3Q7CisKK3JlcXVlc3QgZG9fbGFzdF9sZWFmLCAiR290byBsYXN0IGxlYWYiLAorCWxhc3RfbGVhZjsKKworcmVxdWVzdCBkb19maXJzdF9zaWIsICJHb3RvIGZpcnN0IHNpYmxpbmciLAorCWZpcnN0X3NpYmxpbmcsIGZpcnN0X3NpYjsKKworcmVxdWVzdCBkb19sYXN0X3NpYiwgIkdvdG8gbGFzdCBzaWJsaW5nIiwKKwlsYXN0X3NpYmxpbmcsIGxhc3Rfc2liOworCityZXF1ZXN0IGRvX25leHRfc2liLCAiR290byBuZXh0IHNpYmxpbmciLAorCW5leHRfc2libGluZywgbmV4dF9zaWIsIG5zOworCityZXF1ZXN0IGRvX3ByZXZfc2liLCAiR290byBwcmV2aW91cyBzaWJsaW5nIiwKKwlwcmV2X3NpYmxpbmcsIHByZXZfc2liLCBwczsKKworcmVxdWVzdCBkb19uZXh0X2xlYWYsICJHb3RvIG5leHQgbGVhZiIsCisJbmV4dF9sZWFmLCBubDsKKworcmVxdWVzdCBkb19wcmV2X2xlYWYsICJHb3RvIHByZXZpb3VzIGxlYWYiLAorCXByZXZfbGVhZiwgcGw7CisKK3JlcXVlc3QgZG9fbmV4dCwgIkdvdG8gbmV4dCBub2RlIiwKKwluZXh0LCBuOworCityZXF1ZXN0IGRvX3ByZXYsICJHb3RvIHByZXZpb3VzIG5vZGUiLAorCXByZXZpb3VzLCBwcmV2LCBwOworCityZXF1ZXN0IGRvX3VwLCAiVXAgbm9kZSIsCisJdXBfbm9kZSwgdXAsIHU7CisKK3JlcXVlc3QgZG9fZG93biwgIkRvd24gbm9kZSIsCisJZG93bl9ub2RlLCBkb3duLCBkOworCityZXF1ZXN0IGRvX2RlbGV0ZV9ub2RlLCAiRGVsZXRlIG5vZGUiLAorCWRlbGV0ZV9ub2RlLCBkZWxldGU7CisKK3JlcXVlc3QgZG9faW5zZXJ0X25vZGUsICJJbnNlcnQgbm9kZSIsCisJaW5zZXJ0X25vZGUsIGluc2VydDsKKworcmVxdWVzdCBkb19zcGxpdF9ub2RlLCAiU3BsaXQgbm9kZSIsCisJc3BsaXRfbm9kZSwgc3BsaXQ7CisKK3JlcXVlc3QgZG9fZml4X3BhcmVudHMsICJGaXggcGFyZW50cyIsCisJZml4X3BhcmVudHMsIGZpeHA7CisKK3JlcXVlc3QgZG9fc2V0X2JtYXAsICJTZXQgYmxvY2sgbWFwcGluZyIsCisJc2V0X2JtYXA7CisKK3JlcXVlc3QgZG9fcmVwbGFjZV9ub2RlLCAiSW5zZXJ0IG5vZGUiLAorCXJlcGxhY2Vfbm9kZSwgcmVwbGFjZTsKKworcmVxdWVzdCBkb19wcmludF9hbGwsICJJdGVyYXRlIG92ZXIgYWxsIG5vZGVzIGFuZCBwcmludCB0aGVtIiwKKwlwcmludF9hbGwsIGFsbDsKKworcmVxdWVzdCBkb19nb3RvX2Jsb2NrLCAiR290byBleHRlbnQgY29udGFpbmluZyBzcGVjaWZpZWQgYmxvY2siLAorCWdvdG9fYmxvY2ssIGdvdG87CisKK3JlcXVlc3QgZG9faW5mbywgIlByaW50IGV4dGVudCBpbmZvIiwKKwlpbmZvOworCityZXF1ZXN0IGRvX2V4dGVudF9jbG9zZSwgIkNsb3NlIGV4dGVudCBoYW5kbGUiLAorCWV4dGVudF9jbG9zZSwgZWM7CisKK2VuZDsKKwpkaWZmIC0tZ2l0IGEvZGVidWdmcy9leHRlbnRfaW5vZGUuYyBiL2RlYnVnZnMvZXh0ZW50X2lub2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyMmY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RlYnVnZnMvZXh0ZW50X2lub2RlLmMKQEAgLTAsMCArMSw1MzcgQEAKKy8qCisgKiBleHRlbnRfaW5vZGUuYyAtLS0gZGlyZWN0IGV4dGVudCB0cmVlIG1hbmlwdWxhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBpbnQgb3B0aW5kOworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyNlbmRpZgorCisjaW5jbHVkZSAiZGVidWdmcy5oIgorCitzdGF0aWMgZXh0Ml9pbm9fdAljdXJyZW50X2lubzsKK3N0YXRpYyBleHQyX2V4dGVudF9oYW5kbGVfdCBjdXJyZW50X2hhbmRsZTsKKworc3RhdGljIHZvaWQgZGJnX3ByaW50X2V4dGVudChjaGFyICpkZXNjLCBzdHJ1Y3QgZXh0MmZzX2V4dGVudCAqZXh0ZW50KQoreworCWlmIChkZXNjKQorCQlwcmludGYoIiVzOiAiLCBkZXNjKTsKKwlwcmludGYoImV4dGVudDogbGJsayAlbGx1LS0lbGx1LCBsZW4gJXUsIHBibGsgJWxsdSwgZmxhZ3M6ICIsCisJICAgICAgIGV4dGVudC0+ZV9sYmxrLCBleHRlbnQtPmVfbGJsayArIGV4dGVudC0+ZV9sZW4gLSAxLAorCSAgICAgICBleHRlbnQtPmVfbGVuLCBleHRlbnQtPmVfcGJsayk7CisJaWYgKGV4dGVudC0+ZV9mbGFncyAmIEVYVDJfRVhURU5UX0ZMQUdTX0xFQUYpCisJCWZwdXRzKCJMRUFGICIsIHN0ZG91dCk7CisJaWYgKGV4dGVudC0+ZV9mbGFncyAmIEVYVDJfRVhURU5UX0ZMQUdTX1VOSU5JVCkKKwkJZnB1dHMoIlVOSU5JVCAiLCBzdGRvdXQpOworCWlmIChleHRlbnQtPmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19TRUNPTkRfVklTSVQpCisJCWZwdXRzKCIyTkRfVklTSVQgIiwgc3Rkb3V0KTsKKwlpZiAoIWV4dGVudC0+ZV9mbGFncykKKwkJZnB1dHMoIihub25lKSIsIHN0ZG91dCk7CisJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKKworfQorCitzdGF0aWMgaW50IGNvbW1vbl9leHRlbnRfYXJnc19wcm9jZXNzKGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBtaW5fYXJnYywKKwkJCQkgICAgICBpbnQgbWF4X2FyZ2MsIGNvbnN0IGNoYXIgKmNtZCwKKwkJCQkgICAgICBjb25zdCBjaGFyICp1c2FnZSwgaW50IGZsYWdzKQoreworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIG1pbl9hcmdjLCBtYXhfYXJnYywgY21kLAorCQkJCXVzYWdlLCBmbGFncykpCisJCXJldHVybiAxOworCisJaWYgKCFjdXJyZW50X2hhbmRsZSkgeworCQljb21fZXJyKGNtZCwgMCwgIkV4dGVudCBoYW5kbGUgbm90IG9wZW4iKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqb3JpZ19wcm9tcHQsICpleHRlbnRfcHJvbXB0OworCit2b2lkIGRvX2V4dGVudF9vcGVuKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXh0Ml9pbm9fdAlpbm9kZTsKKwlpbnQJCXJldDsKKwllcnJjb2RlX3QJcmV0dmFsOworCWNoYXIJCSpjcDsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA9PSAxKSB7CisJCWlmIChjdXJyZW50X2lubykKKwkJCXByaW50ZigiQ3VycmVudCBpbm9kZSBpcyAlZFxuIiwgY3VycmVudF9pbm8pOworCQllbHNlCisJCQlwcmludGYoIk5vIGN1cnJlbnQgaW5vZGVcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNvbW1vbl9pbm9kZV9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgJmlub2RlLCAwKSkKKwkJcmV0dXJuOworCisJY3VycmVudF9pbm8gPSAwOworCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9vcGVuKGN1cnJlbnRfZnMsIGlub2RlLCAmY3VycmVudF9oYW5kbGUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzFdLCByZXR2YWwsICJ3aGlsZSBvcGVuaW5nIGV4dGVudCBoYW5kbGUiKTsKKwkJcmV0dXJuOworCX0KKworCWN1cnJlbnRfaW5vID0gaW5vZGU7CisKKwlvcmlnX3Byb21wdCA9IHNzX2dldF9wcm9tcHQoc2NpX2lkeCk7CisJZXh0ZW50X3Byb21wdCA9IG1hbGxvYyhzdHJsZW4ob3JpZ19wcm9tcHQpICsgMzIpOworCXN0cmNweShleHRlbnRfcHJvbXB0LCBvcmlnX3Byb21wdCk7CisJY3AgPSBzdHJjaHIoZXh0ZW50X3Byb21wdCwgJzonKTsKKwlpZiAoY3ApCisJCSpjcCA9IDA7CisJc3ByaW50ZihleHRlbnRfcHJvbXB0ICsgc3RybGVuKGV4dGVudF9wcm9tcHQpLCAiIChleHRlbnQgaW5vICVkKTogIiwKKwkJY3VycmVudF9pbm8pOworCXNzX2FkZF9yZXF1ZXN0X3RhYmxlKHNjaV9pZHgsICZleHRlbnRfY21kcywgMSwgJnJldCk7CisJc3Nfc2V0X3Byb21wdChzY2lfaWR4LCBleHRlbnRfcHJvbXB0KTsKKwlyZXR1cm47Cit9CisKK3ZvaWQgZG9fZXh0ZW50X2Nsb3NlKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IHJldDsKKworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDEsIDEsCisJCQkJImV4dGVudF9jbG9zZSIsICIiLCAwKSkKKwkJcmV0dXJuOworCisJaWYgKCFjdXJyZW50X2hhbmRsZSkgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJFeHRlbnQgaGFuZGxlIG5vdCBvcGVuIik7CisJCXJldHVybjsKKwl9CisKKwlleHQyZnNfZXh0ZW50X2ZyZWUoY3VycmVudF9oYW5kbGUpOworCWN1cnJlbnRfaGFuZGxlID0gTlVMTDsKKwljdXJyZW50X2lubyA9IDA7CisJc3NfZGVsZXRlX3JlcXVlc3RfdGFibGUoc2NpX2lkeCwgJmV4dGVudF9jbWRzLCAmcmV0KTsKKwlzc19zZXRfcHJvbXB0KHNjaV9pZHgsIG9yaWdfcHJvbXB0KTsKKwlmcmVlKGV4dGVudF9wcm9tcHQpOworCWV4dGVudF9wcm9tcHQgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmljX2dvdG9fbm9kZShjb25zdCBjaGFyICpteV9uYW1lLCBpbnQgYXJnYywKKwkJCSAgICAgIGNoYXIgKiphcmd2LCBpbnQgb3ApCit7CisJc3RydWN0IGV4dDJmc19leHRlbnQJZXh0ZW50OworCWVycmNvZGVfdAkJcmV0dmFsOworCisJaWYgKG15X25hbWUgJiYgY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAxLCAxLAorCQkJCQkgICBteV9uYW1lLCAiIiwgMCkpCisJCXJldHVybjsKKworCWlmICghY3VycmVudF9oYW5kbGUpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiRXh0ZW50IGhhbmRsZSBub3Qgb3BlbiIpOworCQlyZXR1cm47CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoY3VycmVudF9oYW5kbGUsIG9wLCAmZXh0ZW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKwkJcmV0dXJuOworCX0KKwlkYmdfcHJpbnRfZXh0ZW50KDAsICZleHRlbnQpOworfQorCit2b2lkIGRvX2N1cnJlbnRfbm9kZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWdlbmVyaWNfZ290b19ub2RlKCJjdXJyZW50X25vZGUiLCBhcmdjLCBhcmd2LCBFWFQyX0VYVEVOVF9DVVJSRU5UKTsKK30KKwordm9pZCBkb19yb290X25vZGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlnZW5lcmljX2dvdG9fbm9kZSgicm9vdF9ub2RlIiwgYXJnYywgYXJndiwgRVhUMl9FWFRFTlRfUk9PVCk7Cit9CisKK3ZvaWQgZG9fbGFzdF9sZWFmKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZ2VuZXJpY19nb3RvX25vZGUoImxhc3RfbGVhZiIsIGFyZ2MsIGFyZ3YsIEVYVDJfRVhURU5UX0xBU1RfTEVBRik7Cit9CisKK3ZvaWQgZG9fZmlyc3Rfc2liKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZ2VuZXJpY19nb3RvX25vZGUoImZpcnN0X3NpYiIsIGFyZ2MsIGFyZ3YsIEVYVDJfRVhURU5UX0ZJUlNUX1NJQik7Cit9CisKK3ZvaWQgZG9fbGFzdF9zaWIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlnZW5lcmljX2dvdG9fbm9kZSgibmV4dF9zaWIiLCBhcmdjLCBhcmd2LCBFWFQyX0VYVEVOVF9MQVNUX1NJQik7Cit9CisKK3ZvaWQgZG9fbmV4dF9zaWIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlnZW5lcmljX2dvdG9fbm9kZSgibmV4dF9zaWIiLCBhcmdjLCBhcmd2LCBFWFQyX0VYVEVOVF9ORVhUX1NJQik7Cit9CisKK3ZvaWQgZG9fcHJldl9zaWIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlnZW5lcmljX2dvdG9fbm9kZSgicHJldl9zaWIiLCBhcmdjLCBhcmd2LCBFWFQyX0VYVEVOVF9QUkVWX1NJQik7Cit9CisKK3ZvaWQgZG9fbmV4dF9sZWFmKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZ2VuZXJpY19nb3RvX25vZGUoIm5leHRfbGVhZiIsIGFyZ2MsIGFyZ3YsIEVYVDJfRVhURU5UX05FWFRfTEVBRik7Cit9CisKK3ZvaWQgZG9fcHJldl9sZWFmKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZ2VuZXJpY19nb3RvX25vZGUoInByZXZfbGVhZiIsIGFyZ2MsIGFyZ3YsIEVYVDJfRVhURU5UX1BSRVZfTEVBRik7Cit9CisKK3ZvaWQgZG9fbmV4dChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWdlbmVyaWNfZ290b19ub2RlKCJuZXh0IiwgYXJnYywgYXJndiwgRVhUMl9FWFRFTlRfTkVYVCk7Cit9CisKK3ZvaWQgZG9fcHJldihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWdlbmVyaWNfZ290b19ub2RlKCJwcmV2IiwgYXJnYywgYXJndiwgRVhUMl9FWFRFTlRfUFJFVik7Cit9CisKK3ZvaWQgZG9fdXAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlnZW5lcmljX2dvdG9fbm9kZSgidXAiLCBhcmdjLCBhcmd2LCBFWFQyX0VYVEVOVF9VUCk7Cit9CisKK3ZvaWQgZG9fZG93bihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWdlbmVyaWNfZ290b19ub2RlKCJkb3duIiwgYXJnYywgYXJndiwgRVhUMl9FWFRFTlRfRE9XTik7Cit9CisKK3ZvaWQgZG9fZGVsZXRlX25vZGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3QgZXh0MmZzX2V4dGVudCBleHRlbnQ7CisJZXJyY29kZV90CXJldHZhbDsKKworCWlmIChjb21tb25fZXh0ZW50X2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAxLCAxLCAiZGVsZXRlX25vZGUiLAorCQkJCSAgICAgICAiIiwgQ0hFQ0tfRlNfUlcgfCBDSEVDS19GU19CSVRNQVBTKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9kZWxldGUoY3VycmVudF9oYW5kbGUsIDApOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIDApOworCQlyZXR1cm47CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoY3VycmVudF9oYW5kbGUsIEVYVDJfRVhURU5UX0NVUlJFTlQsCisJCQkJICAgJmV4dGVudCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuOworCWRiZ19wcmludF9leHRlbnQoMCwgJmV4dGVudCk7Cit9CisKK3ZvaWQgZG9fcmVwbGFjZV9ub2RlKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY29uc3QgY2hhcgkqdXNhZ2UgPSAiWy0tdW5pbml0XSA8bGJsaz4gPGxlbj4gPHBibGs+IjsKKwllcnJjb2RlX3QJcmV0dmFsOworCXN0cnVjdCBleHQyZnNfZXh0ZW50IGV4dGVudDsKKwlpbnQgZXJyOworCisJaWYgKGNvbW1vbl9leHRlbnRfYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDMsIDUsICJyZXBsYWNlX25vZGUiLAorCQkJCSAgICAgICB1c2FnZSwgQ0hFQ0tfRlNfUlcgfCBDSEVDS19GU19CSVRNQVBTKSkKKwkJcmV0dXJuOworCisJZXh0ZW50LmVfZmxhZ3MgPSAwOworCisJaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tdW5pbml0IikpIHsKKwkJYXJnYy0tOworCQlhcmd2Kys7CisJCWV4dGVudC5lX2ZsYWdzIHw9IEVYVDJfRVhURU5UX0ZMQUdTX1VOSU5JVDsKKwl9CisKKwlpZiAoYXJnYyAhPSA0KSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzICVzXG4iLCBhcmd2WzBdLCB1c2FnZSk7CisJCXJldHVybjsKKwl9CisKKwllcnIgPSBzdHJ0b2Jsayhhcmd2WzBdLCBhcmd2WzFdLCAibG9naWNhbCBibG9jayIsICZleHRlbnQuZV9sYmxrKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwlleHRlbnQuZV9sZW4gPSBwYXJzZV91bG9uZyhhcmd2WzJdLCBhcmd2WzBdLCAibGVuZ3RoIiwgJmVycik7CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJZXJyID0gc3RydG9ibGsoYXJndlswXSwgYXJndlszXSwgInBoeXNpY2FsIGJsb2NrIiwgJmV4dGVudC5lX3BibGspOworCWlmIChlcnIpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfcmVwbGFjZShjdXJyZW50X2hhbmRsZSwgMCwgJmV4dGVudCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgMCk7CisJCXJldHVybjsKKwl9CisJZ2VuZXJpY19nb3RvX25vZGUoTlVMTCwgYXJnYywgYXJndiwgRVhUMl9FWFRFTlRfQ1VSUkVOVCk7Cit9CisKK3ZvaWQgZG9fc3BsaXRfbm9kZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAoY29tbW9uX2V4dGVudF9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMSwgMSwgInNwbGl0X25vZGUiLAorCQkJCSAgICAgICAiIiwgQ0hFQ0tfRlNfUlcgfCBDSEVDS19GU19CSVRNQVBTKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9ub2RlX3NwbGl0KGN1cnJlbnRfaGFuZGxlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKwkJcmV0dXJuOworCX0KKwlnZW5lcmljX2dvdG9fbm9kZShOVUxMLCBhcmdjLCBhcmd2LCBFWFQyX0VYVEVOVF9DVVJSRU5UKTsKK30KKwordm9pZCBkb19pbnNlcnRfbm9kZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNoYXIJKnVzYWdlID0gIlstLWFmdGVyXSBbLS11bmluaXRdIDxsYmxrPiA8bGVuPiA8cGJsaz4iOworCWVycmNvZGVfdAlyZXR2YWw7CisJc3RydWN0IGV4dDJmc19leHRlbnQgZXh0ZW50OworCWNoYXIgKmNtZDsKKwlpbnQgZXJyOworCWludCBmbGFncyA9IDA7CisKKwlpZiAoY29tbW9uX2V4dGVudF9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMywgNiwgImluc2VydF9ub2RlIiwKKwkJCQkgICAgICAgdXNhZ2UsIENIRUNLX0ZTX1JXIHwgQ0hFQ0tfRlNfQklUTUFQUykpCisJCXJldHVybjsKKworCWNtZCA9IGFyZ3ZbMF07CisKKwlleHRlbnQuZV9mbGFncyA9IDA7CisKKwl3aGlsZSAoYXJnYyA+IDIpIHsKKwkJaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tYWZ0ZXIiKSkgeworCQkJYXJnYy0tOworCQkJYXJndisrOworCQkJZmxhZ3MgfD0gRVhUMl9FWFRFTlRfSU5TRVJUX0FGVEVSOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tdW5pbml0IikpIHsKKwkJCWFyZ2MtLTsKKwkJCWFyZ3YrKzsKKwkJCWV4dGVudC5lX2ZsYWdzIHw9IEVYVDJfRVhURU5UX0ZMQUdTX1VOSU5JVDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKworCWlmIChhcmdjICE9IDQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgJXNcbiIsIGNtZCwgdXNhZ2UpOworCQlyZXR1cm47CisJfQorCisJZXJyID0gc3RydG9ibGsoY21kLCBhcmd2WzFdLCAibG9naWNhbCBibG9jayIsICZleHRlbnQuZV9sYmxrKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwlleHRlbnQuZV9sZW4gPSBwYXJzZV91bG9uZyhhcmd2WzJdLCBjbWQsICJsZW5ndGgiLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwllcnIgPSBzdHJ0b2JsayhjbWQsIGFyZ3ZbM10sICJwaHlzaWNhbCBibG9jayIsICZleHRlbnQuZV9wYmxrKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2luc2VydChjdXJyZW50X2hhbmRsZSwgZmxhZ3MsICZleHRlbnQpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihjbWQsIHJldHZhbCwgMCk7CisJCXJldHVybjsKKwl9CisJZ2VuZXJpY19nb3RvX25vZGUoTlVMTCwgYXJnYywgYXJndiwgRVhUMl9FWFRFTlRfQ1VSUkVOVCk7Cit9CisKK3ZvaWQgZG9fc2V0X2JtYXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIJKnVzYWdlID0gIlstLXVuaW5pdF0gPGxibGs+IDxwYmxrPiI7CisJc3RydWN0IGV4dDJmc19leHRlbnQgZXh0ZW50OworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrNjRfdAkJbG9naWNhbDsKKwlibGs2NF90CQlwaHlzaWNhbDsKKwljaGFyCQkqY21kID0gYXJndlswXTsKKwlpbnQJCWZsYWdzID0gMDsKKwlpbnQJCWVycjsKKworCWlmIChjb21tb25fZXh0ZW50X2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAzLCA1LCAic2V0X2JtYXAiLAorCQkJCSAgICAgICB1c2FnZSwgQ0hFQ0tfRlNfUlcgfCBDSEVDS19GU19CSVRNQVBTKSkKKwkJcmV0dXJuOworCisJaWYgKGFyZ2MgPiAyICYmICFzdHJjbXAoYXJndlsxXSwgIi0tdW5pbml0IikpIHsKKwkJYXJnYy0tOworCQlhcmd2Kys7CisJCWZsYWdzIHw9IEVYVDJfRVhURU5UX1NFVF9CTUFQX1VOSU5JVDsKKwl9CisKKwlpZiAoYXJnYyAhPSAzKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzICVzXG4iLCBjbWQsIHVzYWdlKTsKKwkJcmV0dXJuOworCX0KKworCWVyciA9IHN0cnRvYmxrKGNtZCwgYXJndlsxXSwgImxvZ2ljYWwgYmxvY2siLCAmbG9naWNhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJZXJyID0gc3RydG9ibGsoY21kLCBhcmd2WzJdLCAicGh5c2ljYWwgYmxvY2siLCAmcGh5c2ljYWwpOworCWlmIChlcnIpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfc2V0X2JtYXAoY3VycmVudF9oYW5kbGUsIGxvZ2ljYWwsCisJCQkJCXBoeXNpY2FsLCBmbGFncyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGNtZCwgcmV0dmFsLCAwKTsKKwkJcmV0dXJuOworCX0KKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGN1cnJlbnRfaGFuZGxlLCBFWFQyX0VYVEVOVF9DVVJSRU5ULAorCQkJCSAgICZleHRlbnQpOworCWlmIChyZXR2YWwpCisJCXJldHVybjsKKwlkYmdfcHJpbnRfZXh0ZW50KDAsICZleHRlbnQpOworfQorCit2b2lkIGRvX3ByaW50X2FsbChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhcgkqdXNhZ2UgPSAiWy0tbGVhZi1vbmx5fC0tcmV2ZXJzZXwtLXJldmVyc2UtbGVhZl0iOworCXN0cnVjdCBleHQyZnNfZXh0ZW50CWV4dGVudDsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwllcnJjb2RlX3QJCWVuZF9lcnIgPSBFWFQyX0VUX0VYVEVOVF9OT19ORVhUOworCWludAkJCW9wID0gRVhUMl9FWFRFTlRfTkVYVDsKKwlpbnQJCQlmaXJzdF9vcCA9IEVYVDJfRVhURU5UX1JPT1Q7CisKKworCWlmIChjb21tb25fZXh0ZW50X2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAxLCAyLCAicHJpbnRfYWxsIiwKKwkJCQkgICAgICAgdXNhZ2UsIDApKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA9PSAyKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbMV0sICItLWxlYWYtb25seSIpKQorCQkJb3AgPSBFWFQyX0VYVEVOVF9ORVhUX0xFQUY7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tcmV2ZXJzZSIpKSB7CisJCQlvcCA9IEVYVDJfRVhURU5UX1BSRVY7CisJCQlmaXJzdF9vcCA9IEVYVDJfRVhURU5UX0xBU1RfTEVBRjsKKwkJCWVuZF9lcnIgPSBFWFQyX0VUX0VYVEVOVF9OT19QUkVWOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tcmV2ZXJzZS1sZWFmIikpIHsKKwkJCW9wID0gRVhUMl9FWFRFTlRfUFJFVl9MRUFGOworCQkJZmlyc3Rfb3AgPSBFWFQyX0VYVEVOVF9MQVNUX0xFQUY7CisJCQllbmRfZXJyID0gRVhUMl9FVF9FWFRFTlRfTk9fUFJFVjsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzICVzXG4iLCBhcmd2WzBdLCB1c2FnZSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChjdXJyZW50X2hhbmRsZSwgZmlyc3Rfb3AsICZleHRlbnQpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIDApOworCQlyZXR1cm47CisJfQorCWRiZ19wcmludF9leHRlbnQoMCwgJmV4dGVudCk7CisKKwl3aGlsZSAoMSkgeworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChjdXJyZW50X2hhbmRsZSwgb3AsICZleHRlbnQpOworCQlpZiAocmV0dmFsID09IGVuZF9lcnIpCisJCQlicmVhazsKKworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgMCk7CisJCQlyZXR1cm47CisJCX0KKwkJZGJnX3ByaW50X2V4dGVudCgwLCAmZXh0ZW50KTsKKwl9Cit9CisKK3ZvaWQgZG9fZml4X3BhcmVudHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWVycmNvZGVfdAkJcmV0dmFsOworCisJaWYgKGNvbW1vbl9leHRlbnRfYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDEsIDEsICJmaXhfcGFyZW50cyIsICIiLAorCQkJCSAgICAgICBDSEVDS19GU19SVykpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZml4X3BhcmVudHMoY3VycmVudF9oYW5kbGUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIDApOworCQlyZXR1cm47CisJfQorfQorCit2b2lkIGRvX2luZm8oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBleHQyZnNfZXh0ZW50CWV4dGVudDsKKwlzdHJ1Y3QgZXh0Ml9leHRlbnRfaW5mbwlpbmZvOworCWVycmNvZGVfdAkJcmV0dmFsOworCisJaWYgKGNvbW1vbl9leHRlbnRfYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDEsIDEsICJpbmZvIiwgIiIsIDApKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldF9pbmZvKGN1cnJlbnRfaGFuZGxlLCAmaW5mbyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgMCk7CisJCXJldHVybjsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChjdXJyZW50X2hhbmRsZSwKKwkJCQkgICBFWFQyX0VYVEVOVF9DVVJSRU5ULCAmZXh0ZW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKwkJcmV0dXJuOworCX0KKworCWRiZ19wcmludF9leHRlbnQoMCwgJmV4dGVudCk7CisKKwlwcmludGYoIkN1cnJlbnQgaGFuZGxlIGxvY2F0aW9uOiAlZC8lZCAobWF4OiAlZCwgYnl0ZXMgJWQpLCBsZXZlbCAlZC8lZFxuIiwKKwkgICAgICAgaW5mby5jdXJyX2VudHJ5LCBpbmZvLm51bV9lbnRyaWVzLCBpbmZvLm1heF9lbnRyaWVzLAorCSAgICAgICBpbmZvLmJ5dGVzX2F2YWlsLCBpbmZvLmN1cnJfbGV2ZWwsIGluZm8ubWF4X2RlcHRoKTsKKwlwcmludGYoIlx0bWF4IGxibGs6ICVsbHUsIG1heCBwYmxrOiAlbGx1XG4iLCBpbmZvLm1heF9sYmxrLAorCSAgICAgICBpbmZvLm1heF9wYmxrKTsKKwlwcmludGYoIlx0bWF4X2xlbjogJXUsIG1heF91bmluaXRfbGVuOiAldVxuIiwgaW5mby5tYXhfbGVuLAorCSAgICAgICBpbmZvLm1heF91bmluaXRfbGVuKTsKK30KKwordm9pZCBkb19nb3RvX2Jsb2NrKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlibGs2NF90CQkJYmxrOworCWludAkJCWxldmVsID0gMCwgZXJyOworCisJaWYgKGNvbW1vbl9leHRlbnRfYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDIsIDMsICJnb3RvX2Jsb2NrIiwKKwkJCQkgICAgICAgImJsb2NrIFtsZXZlbF0iLCAwKSkKKwkJcmV0dXJuOworCisJaWYgKHN0cnRvYmxrKGFyZ3ZbMF0sIGFyZ3ZbMV0sIE5VTEwsICZibGspKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA9PSAzKSB7CisJCWxldmVsID0gcGFyc2VfdWxvbmcoYXJndlsyXSwgYXJndlswXSwgImxldmVsIiwgJmVycik7CisJCWlmIChlcnIpCisJCQlyZXR1cm47CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nb3RvMihjdXJyZW50X2hhbmRsZSwgbGV2ZWwsIChibGs2NF90KSBibGspOworCisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwKKwkJCSJ3aGlsZSB0cnlpbmcgdG8gZ28gdG8gYmxvY2sgJWxsdSwgbGV2ZWwgJWQiLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgYmxrLCBsZXZlbCk7CisJCXJldHVybjsKKwl9CisKKwlnZW5lcmljX2dvdG9fbm9kZShOVUxMLCBhcmdjLCBhcmd2LCBFWFQyX0VYVEVOVF9DVVJSRU5UKTsKK30KZGlmZiAtLWdpdCBhL2RlYnVnZnMvZmlsZWZyYWcuYyBiL2RlYnVnZnMvZmlsZWZyYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWRlYTQwCi0tLSAvZGV2L251bGwKKysrIGIvZGVidWdmcy9maWxlZnJhZy5jCkBAIC0wLDAgKzEsMzI0IEBACisvKgorICogZmlsZWZyYWcuYyAtLS0gZGlzcGxheSB0aGUgZnJhZ21lbnRhdGlvbiBpbmZvcm1hdGlvbiBmb3IgYSBmaWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dXRpbWUuaD4KKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGludCBvcHRpbmQ7CitleHRlcm4gY2hhciAqb3B0YXJnOworI2VuZGlmCisKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisKKyNkZWZpbmUgVkVSQk9TRV9PUFQJMHgwMDAxCisjZGVmaW5lIERJUl9PUFQJCTB4MDAwMgorI2RlZmluZSBSRUNVUlNJVkVfT1BUCTB4MDAwNAorCitzdHJ1Y3QgZGlyX2xpc3QgeworCWNoYXIJCSpuYW1lOworCWV4dDJfaW5vX3QJaW5vOworCXN0cnVjdCBkaXJfbGlzdAkqbmV4dDsKK307CisKK3N0cnVjdCBmaWxlZnJhZ19zdHJ1Y3QgeworCUZJTEUJCSpmOworCWNvbnN0IGNoYXIJKm5hbWU7CisJY29uc3QgY2hhcgkqZGlyX25hbWU7CisJaW50CQlvcHRpb25zOworCWludAkJbG9naWNhbF93aWR0aDsKKwlpbnQJCXBoeXNpY2FsX3dpZHRoOworCWludAkJZXh0OworCWludAkJY29udF9leHQ7CisJZTJfYmxrY250X3QJbnVtOworCWUyX2Jsa2NudF90CWxvZ2ljYWxfc3RhcnQ7CisJYmxrNjRfdAkJcGh5c2ljYWxfc3RhcnQ7CisJYmxrNjRfdAkJZXhwZWN0ZWQ7CisJc3RydWN0IGRpcl9saXN0ICpkaXJfbGlzdCwgKmRpcl9sYXN0OworfTsKKworc3RhdGljIGludCBpbnRfbG9nMTAodW5zaWduZWQgbG9uZyBsb25nIGFyZykKK3sKKwlpbnQgICAgIGwgPSAwOworCisJYXJnID0gYXJnIC8gMTA7CisJd2hpbGUgKGFyZykgeworCQlsKys7CisJCWFyZyA9IGFyZyAvIDEwOworCX0KKwlyZXR1cm4gbDsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfaGVhZGVyKHN0cnVjdCBmaWxlZnJhZ19zdHJ1Y3QgKmZzKQoreworCWlmIChmcy0+b3B0aW9ucyAmIFZFUkJPU0VfT1BUKSB7CisJCWZwcmludGYoZnMtPmYsICIlNHMgJSpzICUqcyAlKnMgJSpzXG4iLCAiZXh0IiwKKwkJCWZzLT5sb2dpY2FsX3dpZHRoLCAibG9naWNhbCIsIGZzLT5waHlzaWNhbF93aWR0aCwKKwkJCSJwaHlzaWNhbCIsIGZzLT5waHlzaWNhbF93aWR0aCwgImV4cGVjdGVkIiwKKwkJCWZzLT5sb2dpY2FsX3dpZHRoLCAibGVuZ3RoIik7CisJfQorfQorCitzdGF0aWMgdm9pZCByZXBvcnRfZmlsZWZyYWcoc3RydWN0IGZpbGVmcmFnX3N0cnVjdCAqZnMpCit7CisJaWYgKGZzLT5udW0gPT0gMCkKKwkJcmV0dXJuOworCWlmIChmcy0+b3B0aW9ucyAmIFZFUkJPU0VfT1BUKSB7CisJCWlmIChmcy0+ZXhwZWN0ZWQpCisJCQlmcHJpbnRmKGZzLT5mLCAiJTRkICUqbHUgJSpsbHUgJSpsbHUgJSpsdVxuIiwgZnMtPmV4dCwKKwkJCQlmcy0+bG9naWNhbF93aWR0aCwKKwkJCQkodW5zaWduZWQgbG9uZykgZnMtPmxvZ2ljYWxfc3RhcnQsCisJCQkJZnMtPnBoeXNpY2FsX3dpZHRoLCBmcy0+cGh5c2ljYWxfc3RhcnQsCisJCQkJZnMtPnBoeXNpY2FsX3dpZHRoLCBmcy0+ZXhwZWN0ZWQsCisJCQkJZnMtPmxvZ2ljYWxfd2lkdGgsICh1bnNpZ25lZCBsb25nKSBmcy0+bnVtKTsKKwkJZWxzZQorCQkJZnByaW50Zihmcy0+ZiwgIiU0ZCAlKmx1ICUqbGx1ICUqcyAlKmx1XG4iLCBmcy0+ZXh0LAorCQkJCWZzLT5sb2dpY2FsX3dpZHRoLAorCQkJCSh1bnNpZ25lZCBsb25nKSBmcy0+bG9naWNhbF9zdGFydCwKKwkJCQlmcy0+cGh5c2ljYWxfd2lkdGgsIGZzLT5waHlzaWNhbF9zdGFydCwKKwkJCQlmcy0+cGh5c2ljYWxfd2lkdGgsICIiLAorCQkJCWZzLT5sb2dpY2FsX3dpZHRoLCAodW5zaWduZWQgbG9uZykgZnMtPm51bSk7CisJfQorCWZzLT5leHQrKzsKK30KKworc3RhdGljIGludCBmaWxlZnJhZ19ibG9ja3NfcHJvYyhleHQyX2ZpbHN5cyBleHQ0X2ZzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQlibGs2NF90ICpibG9ja25yLCBlMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJCQlibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJaW50IHJlZl9vZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCXZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IGZpbGVmcmFnX3N0cnVjdCAqZnMgPSBwcml2YXRlOworCisJaWYgKGJsb2NrY250IDwgMCB8fCAqYmxvY2tuciA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmICgoZnMtPm51bSA9PSAwKSB8fCAoYmxvY2tjbnQgIT0gZnMtPmxvZ2ljYWxfc3RhcnQgKyBmcy0+bnVtKSB8fAorCSAgICAoKmJsb2NrbnIgIT0gZnMtPnBoeXNpY2FsX3N0YXJ0ICsgZnMtPm51bSkpIHsKKwkJcmVwb3J0X2ZpbGVmcmFnKGZzKTsKKwkJaWYgKGJsb2NrY250ID09IGZzLT5sb2dpY2FsX3N0YXJ0ICsgZnMtPm51bSkKKwkJCWZzLT5leHBlY3RlZCA9IGZzLT5waHlzaWNhbF9zdGFydCArIGZzLT5udW07CisJCWVsc2UKKwkJCWZzLT5leHBlY3RlZCA9IDA7CisJCWZzLT5sb2dpY2FsX3N0YXJ0ID0gYmxvY2tjbnQ7CisJCWZzLT5waHlzaWNhbF9zdGFydCA9ICpibG9ja25yOworCQlmcy0+bnVtID0gMTsKKwkJZnMtPmNvbnRfZXh0Kys7CisJfSBlbHNlCisJCWZzLT5udW0rKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmlsZWZyYWcoZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJICAgICBzdHJ1Y3QgZmlsZWZyYWdfc3RydWN0ICpmcykKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJYmxvY2tzaXplID0gY3VycmVudF9mcy0+YmxvY2tzaXplOworCisJZnMtPmxvZ2ljYWxfd2lkdGggPSBpbnRfbG9nMTAoKEVYVDJfSV9TSVpFKGlub2RlKSArIGJsb2Nrc2l6ZSAtIDEpIC8KKwkJCQkgICAgICBibG9ja3NpemUpICsgMTsKKwlpZiAoZnMtPmxvZ2ljYWxfd2lkdGggPCA3KQorCQlmcy0+bG9naWNhbF93aWR0aCA9IDc7CisJZnMtPmV4dCA9IDA7CisJZnMtPmNvbnRfZXh0ID0gMDsKKwlmcy0+bG9naWNhbF9zdGFydCA9IDA7CisJZnMtPnBoeXNpY2FsX3N0YXJ0ID0gMDsKKwlmcy0+bnVtID0gMDsKKworCWlmIChmcy0+b3B0aW9ucyAmIFZFUkJPU0VfT1BUKSB7CisJCWJsazY0X3QgbnVtX2Jsb2NrcyA9IGV4dDJmc19pbm9kZV9pX2Jsb2NrcyhjdXJyZW50X2ZzLCBpbm9kZSk7CisKKwkJaWYgKCEoY3VycmVudF9mcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCQkgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSB8fAorCQkgICAgIShpbm9kZS0+aV9mbGFncyAmIEVYVDRfSFVHRV9GSUxFX0ZMKSkKKwkJCW51bV9ibG9ja3MgLz0gY3VycmVudF9mcy0+YmxvY2tzaXplIC8gNTEyOworCisJCWZwcmludGYoZnMtPmYsICJcbiVzIGhhcyAlbGx1IGJsb2NrKHMpLCBpX3NpemUgaXMgJWxsdVxuIiwKKwkJCWZzLT5uYW1lLCBudW1fYmxvY2tzLCBFWFQyX0lfU0laRShpbm9kZSkpOworCX0KKwlwcmludF9oZWFkZXIoZnMpOworCXJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhjdXJyZW50X2ZzLCBpbm8sCisJCQkJICAgICAgIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLCBOVUxMLAorCQkJCSAgICAgICBmaWxlZnJhZ19ibG9ja3NfcHJvYywgZnMpOworCWlmIChyZXR2YWwpCisJCWNvbV9lcnIoImV4dDJmc19ibG9ja19pdGVyYXRlMyIsIHJldHZhbCwgMCk7CisKKwlyZXBvcnRfZmlsZWZyYWcoZnMpOworCWZwcmludGYoZnMtPmYsICIlczogJWQgY29udGlndW91cyBleHRlbnRzJXNcbiIsIGZzLT5uYW1lLCBmcy0+ZXh0LAorCQlMSU5VWF9TX0lTRElSKGlub2RlLT5pX21vZGUpID8gIiAoZGlyKSIgOiAiIik7Cit9CisKK3N0YXRpYyBpbnQgZmlsZWZyYWdfZGlyX3Byb2MoZXh0Ml9pbm9fdCBkaXIgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICBpbnQJZW50cnksCisJCQkgICAgIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkJICAgICBpbnQJb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgaW50CWJsb2Nrc2l6ZSBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgIGNoYXIJKmJ1ZiBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgIHZvaWQJKnByaXZhdGUpCit7CisJc3RydWN0IGZpbGVmcmFnX3N0cnVjdCAqZnMgPSBwcml2YXRlOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCWV4dDJfaW5vX3QJCWlubzsKKwljaGFyCQkJbmFtZVtFWFQyX05BTUVfTEVOICsgMV07CisJY2hhcgkJCSpjcDsKKwlpbnQJCQl0aGlzbGVuOworCisJaWYgKGVudHJ5ID09IERJUkVOVF9ERUxFVEVEX0ZJTEUpCisJCXJldHVybiAwOworCisJdGhpc2xlbiA9IGRpcmVudC0+bmFtZV9sZW4gJiAweEZGOworCXN0cm5jcHkobmFtZSwgZGlyZW50LT5uYW1lLCB0aGlzbGVuKTsKKwluYW1lW3RoaXNsZW5dID0gJ1wwJzsKKwlpbm8gPSBkaXJlbnQtPmlub2RlOworCisJaWYgKCFzdHJjbXAobmFtZSwgIi4iKSB8fCAhc3RyY21wKG5hbWUsICIuLiIpKQorCQlyZXR1cm4gMDsKKworCWNwID0gbWFsbG9jKHN0cmxlbihmcy0+ZGlyX25hbWUpICsgc3RybGVuKG5hbWUpICsgMik7CisJaWYgKCFjcCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgJXMvJXNcbiIsCisJCQlmcy0+ZGlyX25hbWUsIG5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzcHJpbnRmKGNwLCAiJXMvJXMiLCBmcy0+ZGlyX25hbWUsIG5hbWUpOworCWZzLT5uYW1lID0gY3A7CisKKwlpZiAoZGVidWdmc19yZWFkX2lub2RlKGlubywgJmlub2RlLCBmcy0+bmFtZSkpCisJCWdvdG8gZXJyb3V0OworCisJZmlsZWZyYWcoaW5vLCAmaW5vZGUsIGZzKTsKKworCWlmICgoZnMtPm9wdGlvbnMgJiBSRUNVUlNJVkVfT1BUKSAmJiBMSU5VWF9TX0lTRElSKGlub2RlLmlfbW9kZSkpIHsKKwkJc3RydWN0IGRpcl9saXN0ICpwOworCisJCXAgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaXJfbGlzdCkpOworCQlpZiAoIXApIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgYWxsb2NhdGUgZGlyX2xpc3QgZm9yICVzXG4iLAorCQkJCWZzLT5uYW1lKTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCW1lbXNldChwLCAwLCBzaXplb2Yoc3RydWN0IGRpcl9saXN0KSk7CisJCXAtPm5hbWUgPSBjcDsKKwkJcC0+aW5vID0gaW5vOworCQlpZiAoZnMtPmRpcl9sYXN0KQorCQkJZnMtPmRpcl9sYXN0LT5uZXh0ID0gcDsKKwkJZWxzZQorCQkJZnMtPmRpcl9saXN0ID0gcDsKKwkJZnMtPmRpcl9sYXN0ID0gcDsKKwkJcmV0dXJuIDA7CisJfQorZXJyb3V0OgorCWZyZWUoY3ApOworCWZzLT5uYW1lID0gMDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBkaXJfaXRlcmF0ZShleHQyX2lub190IGlubywgc3RydWN0IGZpbGVmcmFnX3N0cnVjdCAqZnMpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgZGlyX2xpc3QJKnAgPSBOVUxMOworCisJZnMtPmRpcl9uYW1lID0gZnMtPm5hbWU7CisKKwl3aGlsZSAoMSkgeworCQlyZXR2YWwgPSBleHQyZnNfZGlyX2l0ZXJhdGUyKGN1cnJlbnRfZnMsIGlubywgMCwKKwkJCQkJICAgICAwLCBmaWxlZnJhZ19kaXJfcHJvYywgZnMpOworCQlpZiAocmV0dmFsKQorCQkJY29tX2VycigiZXh0MmZzX2Rpcl9pdGVyYXRlMiIsIHJldHZhbCwgMCk7CisJCWlmIChwKSB7CisJCQlmcmVlKHAtPm5hbWUpOworCQkJZnMtPmRpcl9saXN0ID0gcC0+bmV4dDsKKwkJCWlmICghZnMtPmRpcl9saXN0KQorCQkJCWZzLT5kaXJfbGFzdCA9IDA7CisJCQlmcmVlKHApOworCQl9CisJCXAgPSBmcy0+ZGlyX2xpc3Q7CisJCWlmICghcCkKKwkJCWJyZWFrOworCQlpbm8gPSBwLT5pbm87CisJCWZzLT5kaXJfbmFtZSA9IHAtPm5hbWU7CisJfQorfQorCit2b2lkIGRvX2ZpbGVmcmFnKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IGZpbGVmcmFnX3N0cnVjdCBmczsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKwlleHQyX2lub190CWlubzsKKwlpbnQJCWM7CisKKwltZW1zZXQoJmZzLCAwLCBzaXplb2YoZnMpKTsKKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJcmVzZXRfZ2V0b3B0KCk7CisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJkdnIiKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdkJzoKKwkJCWZzLm9wdGlvbnMgfD0gRElSX09QVDsKKwkJCWJyZWFrOworCQljYXNlICd2JzoKKwkJCWZzLm9wdGlvbnMgfD0gVkVSQk9TRV9PUFQ7CisJCQlicmVhazsKKwkJY2FzZSAncic6CisJCQlmcy5vcHRpb25zIHw9IFJFQ1VSU0lWRV9PUFQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gcHJpbnRfdXNhZ2U7CisJCX0KKwl9CisKKwlpZiAoYXJnYyA+IG9wdGluZCsxKSB7CisJcHJpbnRfdXNhZ2U6CisJCWNvbV9lcnIoMCwgMCwgIlVzYWdlOiBmaWxlZnJhZyBbLWR2cl0gZmlsZSIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGFyZ2MgPT0gb3B0aW5kKSB7CisJCWlubyA9IGN3ZDsKKwkJZnMubmFtZSA9ICIuIjsKKwl9IGVsc2UgeworCQlpbm8gPSBzdHJpbmdfdG9faW5vZGUoYXJndltvcHRpbmRdKTsKKwkJZnMubmFtZSA9IGFyZ3Zbb3B0aW5kXTsKKwl9CisJaWYgKCFpbm8pCisJCXJldHVybjsKKworCWlmIChkZWJ1Z2ZzX3JlYWRfaW5vZGUoaW5vLCAmaW5vZGUsIGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlmcy5mID0gb3Blbl9wYWdlcigpOworCWZzLnBoeXNpY2FsX3dpZHRoID0gaW50X2xvZzEwKGV4dDJmc19ibG9ja3NfY291bnQoY3VycmVudF9mcy0+c3VwZXIpKTsKKwlmcy5waHlzaWNhbF93aWR0aCsrOworCWlmIChmcy5waHlzaWNhbF93aWR0aCA8IDgpCisJCWZzLnBoeXNpY2FsX3dpZHRoID0gODsKKworCWlmICghTElOVVhfU19JU0RJUihpbm9kZS5pX21vZGUpIHx8IChmcy5vcHRpb25zICYgRElSX09QVCkpCisJCWZpbGVmcmFnKGlubywgJmlub2RlLCAmZnMpOworCWVsc2UKKwkJZGlyX2l0ZXJhdGUoaW5vLCAmZnMpOworCisJZnByaW50Zihmcy5mLCAiXG4iKTsKKwljbG9zZV9wYWdlcihmcy5mKTsKKworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RlYnVnZnMvaHRyZWUuYyBiL2RlYnVnZnMvaHRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGY4MjUwCi0tLSAvZGV2L251bGwKKysrIGIvZGVidWdmcy9odHJlZS5jCkBAIC0wLDAgKzEsNDA5IEBACisvKgorICogaHRyZWUuYyAtLS0gaGFzaCB0cmVlIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGludCBvcHRpbmQ7CitleHRlcm4gY2hhciAqb3B0YXJnOworI2VuZGlmCisKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisjaW5jbHVkZSAidXVpZC91dWlkLmgiCisjaW5jbHVkZSAiZTJwL2UycC5oIgorCitzdGF0aWMgRklMRSAqcGFnZXI7CisKK3N0YXRpYyB2b2lkIGh0cmVlX2R1bXBfbGVhZl9ub2RlKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCSBzdHJ1Y3QgZXh0Ml9keF9yb290X2luZm8gKiByb290bm9kZSwKKwkJCQkgYmxrNjRfdCBibGssIGNoYXIgKmJ1ZikKK3sKKwllcnJjb2RlX3QJZXJyY29kZTsKKwlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudDsKKwlpbnQJCXRoaXNsZW4sIGNvbCA9IDA7CisJdW5zaWduZWQgaW50CW9mZnNldCA9IDA7CisJY2hhcgkJbmFtZVtFWFQyX05BTUVfTEVOICsgMV07CisJY2hhcgkJdG1wW0VYVDJfTkFNRV9MRU4gKyA2NF07CisJYmxrNjRfdAkJcGJsazsKKwlleHQyX2Rpcmhhc2hfdCAJaGFzaCwgbWlub3JfaGFzaDsKKwl1bnNpZ25lZCBpbnQJcmVjX2xlbjsKKwlpbnQJCWhhc2hfYWxnOworCisJZXJyY29kZSA9IGV4dDJmc19ibWFwMihmcywgaW5vLCBpbm9kZSwgYnVmLCAwLCBibGssIDAsICZwYmxrKTsKKwlpZiAoZXJyY29kZSkgeworCQljb21fZXJyKCJodHJlZV9kdW1wX2xlYWZfbm9kZSIsIGVycmNvZGUsCisJCQkid2hpbGUgbWFwcGluZyBsb2dpY2FsIGJsb2NrICVsbHVcbiIsIGJsayk7CisJCXJldHVybjsKKwl9CisKKwlmcHJpbnRmKHBhZ2VyLCAiUmVhZGluZyBkaXJlY3RvcnkgYmxvY2sgJWxsdSwgcGh5cyAlbGx1XG4iLCBibGssIHBibGspOworCWVycmNvZGUgPSBleHQyZnNfcmVhZF9kaXJfYmxvY2syKGN1cnJlbnRfZnMsIHBibGssIGJ1ZiwgMCk7CisJaWYgKGVycmNvZGUpIHsKKwkJY29tX2VycigiaHRyZWVfZHVtcF9sZWFmX25vZGUiLCBlcnJjb2RlLAorCQkJIndoaWxlIHJlYWRpbmcgYmxvY2sgJWxsdSAoJWxsdSlcbiIsCisJCQlibGssIHBibGspOworCQlyZXR1cm47CisJfQorCWhhc2hfYWxnID0gcm9vdG5vZGUtPmhhc2hfdmVyc2lvbjsKKwlpZiAoKGhhc2hfYWxnIDw9IEVYVDJfSEFTSF9URUEpICYmCisJICAgIChmcy0+c3VwZXItPnNfZmxhZ3MgJiBFWFQyX0ZMQUdTX1VOU0lHTkVEX0hBU0gpKQorCQloYXNoX2FsZyArPSAzOworCisJd2hpbGUgKG9mZnNldCA8IGZzLT5ibG9ja3NpemUpIHsKKwkJZGlyZW50ID0gKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSAoYnVmICsgb2Zmc2V0KTsKKwkJZXJyY29kZSA9IGV4dDJmc19nZXRfcmVjX2xlbihmcywgZGlyZW50LCAmcmVjX2xlbik7CisJCWlmIChlcnJjb2RlKSB7CisJCQljb21fZXJyKCJodHJlZV9kdW1wX2xlYWZfaW5vZGUiLCBlcnJjb2RlLAorCQkJCSJ3aGlsZSBnZXR0aW5nIHJlY19sZW4gZm9yIGJsb2NrICVsdSIsCisJCQkJKHVuc2lnbmVkIGxvbmcpIGJsayk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKCgob2Zmc2V0ICsgcmVjX2xlbikgPiBmcy0+YmxvY2tzaXplKSB8fAorCQkgICAgKHJlY19sZW4gPCA4KSB8fAorCQkgICAgKChyZWNfbGVuICUgNCkgIT0gMCkgfHwKKwkJICAgICgoKCh1bnNpZ25lZCkgZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpKzgpID4gcmVjX2xlbikpIHsKKwkJCWZwcmludGYocGFnZXIsICJDb3JydXB0ZWQgZGlyZWN0b3J5IGJsb2NrICglbGx1KSFcbiIsCisJCQkJYmxrKTsKKwkJCWJyZWFrOworCQl9CisJCXRoaXNsZW4gPSBkaXJlbnQtPm5hbWVfbGVuICYgMHhGRjsKKwkJc3RybmNweShuYW1lLCBkaXJlbnQtPm5hbWUsIHRoaXNsZW4pOworCQluYW1lW3RoaXNsZW5dID0gJ1wwJzsKKwkJZXJyY29kZSA9IGV4dDJmc19kaXJoYXNoKGhhc2hfYWxnLCBuYW1lLAorCQkJCQkgdGhpc2xlbiwgZnMtPnN1cGVyLT5zX2hhc2hfc2VlZCwKKwkJCQkJICZoYXNoLCAmbWlub3JfaGFzaCk7CisJCWlmIChlcnJjb2RlKQorCQkJY29tX2VycigiaHRyZWVfZHVtcF9sZWFmX25vZGUiLCBlcnJjb2RlLAorCQkJCSJ3aGlsZSBjYWxjdWxhdGluZyBoYXNoIik7CisJCXNucHJpbnRmKHRtcCwgRVhUMl9OQU1FX0xFTiArIDY0LCAiJXUgMHglMDh4LSUwOHggKCVkKSAlcyAgICIsCisJCQlkaXJlbnQtPmlub2RlLCBoYXNoLCBtaW5vcl9oYXNoLCByZWNfbGVuLCBuYW1lKTsKKwkJdGhpc2xlbiA9IHN0cmxlbih0bXApOworCQlpZiAoY29sICsgdGhpc2xlbiA+IDgwKSB7CisJCQlmcHJpbnRmKHBhZ2VyLCAiXG4iKTsKKwkJCWNvbCA9IDA7CisJCX0KKwkJZnByaW50ZihwYWdlciwgIiVzIiwgdG1wKTsKKwkJY29sICs9IHRoaXNsZW47CisJCW9mZnNldCArPSByZWNfbGVuOworCX0KKwlmcHJpbnRmKHBhZ2VyLCAiXG4iKTsKK30KKworCitzdGF0aWMgdm9pZCBodHJlZV9kdW1wX2ludF9ibG9jayhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCQkgc3RydWN0IGV4dDJfZHhfcm9vdF9pbmZvICogcm9vdG5vZGUsCisJCQkJIGJsazY0X3QgYmxrLCBjaGFyICpidWYsIGludCBsZXZlbCk7CisKKworc3RhdGljIHZvaWQgaHRyZWVfZHVtcF9pbnRfbm9kZShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCXN0cnVjdCBleHQyX2R4X3Jvb3RfaW5mbyAqIHJvb3Rub2RlLAorCQkJCXN0cnVjdCBleHQyX2R4X2VudHJ5ICplbnQsCisJCQkJY2hhciAqYnVmLCBpbnQgbGV2ZWwpCit7CisJc3RydWN0IGV4dDJfZHhfY291bnRsaW1pdAlsaW1pdDsKKwlzdHJ1Y3QgZXh0Ml9keF9lbnRyeQkJZTsKKwlpbnQJCQkJaGFzaCwgaTsKKworCisJbGltaXQgPSAqKChzdHJ1Y3QgZXh0Ml9keF9jb3VudGxpbWl0ICopIGVudCk7CisJbGltaXQuY291bnQgPSBleHQyZnNfbGUxNl90b19jcHUobGltaXQuY291bnQpOworCWxpbWl0LmxpbWl0ID0gZXh0MmZzX2xlMTZfdG9fY3B1KGxpbWl0LmxpbWl0KTsKKworCWZwcmludGYocGFnZXIsICJOdW1iZXIgb2YgZW50cmllcyAoY291bnQpOiAlZFxuIiwgbGltaXQuY291bnQpOworCWZwcmludGYocGFnZXIsICJOdW1iZXIgb2YgZW50cmllcyAobGltaXQpOiAlZFxuIiwgbGltaXQubGltaXQpOworCisJZm9yIChpPTA7IGkgPCBsaW1pdC5jb3VudDsgaSsrKSB7CisJCWhhc2ggPSBpID8gZXh0MmZzX2xlMzJfdG9fY3B1KGVudFtpXS5oYXNoKSA6IDA7CisJCWZwcmludGYocGFnZXIsICJFbnRyeSAjJWQ6IEhhc2ggMHglMDh4JXMsIGJsb2NrICV1XG4iLCBpLAorCQkJaGFzaCwgKGhhc2ggJiAxKSA/ICIgKCoqKSIgOiAiIiwKKwkJCWV4dDJmc19sZTMyX3RvX2NwdShlbnRbaV0uYmxvY2spKTsKKwkJfQorCisJZnByaW50ZihwYWdlciwgIlxuIik7CisKKwlmb3IgKGk9MDsgaSA8IGxpbWl0LmNvdW50OyBpKyspIHsKKwkJZS5oYXNoID0gZXh0MmZzX2xlMzJfdG9fY3B1KGVudFtpXS5oYXNoKTsKKwkJZS5ibG9jayA9IGV4dDJmc19sZTMyX3RvX2NwdShlbnRbaV0uYmxvY2spOworCQlmcHJpbnRmKHBhZ2VyLCAiRW50cnkgIyVkOiBIYXNoIDB4JTA4eCwgYmxvY2sgJXVcbiIsIGksCisJCSAgICAgICBpID8gZS5oYXNoIDogMCwgZS5ibG9jayk7CisJCWlmIChsZXZlbCkKKwkJCWh0cmVlX2R1bXBfaW50X2Jsb2NrKGZzLCBpbm8sIGlub2RlLCByb290bm9kZSwKKwkJCQkJICAgICBlLmJsb2NrLCBidWYsIGxldmVsLTEpOworCQllbHNlCisJCQlodHJlZV9kdW1wX2xlYWZfbm9kZShmcywgaW5vLCBpbm9kZSwgcm9vdG5vZGUsCisJCQkJCSAgICAgZS5ibG9jaywgYnVmKTsKKwl9CisKKwlmcHJpbnRmKHBhZ2VyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKK30KKworc3RhdGljIHZvaWQgaHRyZWVfZHVtcF9pbnRfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkJIHN0cnVjdCBleHQyX2R4X3Jvb3RfaW5mbyAqIHJvb3Rub2RlLAorCQkJCSBibGs2NF90IGJsaywgY2hhciAqYnVmLCBpbnQgbGV2ZWwpCit7CisJY2hhcgkJKmNidWY7CisJZXJyY29kZV90CWVycmNvZGU7CisJYmxrNjRfdAkJcGJsazsKKworCWNidWYgPSBtYWxsb2MoZnMtPmJsb2Nrc2l6ZSk7CisJaWYgKCFjYnVmKSB7CisJCWZwcmludGYocGFnZXIsICJDb3VsZG4ndCBhbGxvY2F0ZSBjaGlsZCBibG9jay5cbiIpOworCQlyZXR1cm47CisJfQorCisJZXJyY29kZSA9IGV4dDJmc19ibWFwMihmcywgaW5vLCBpbm9kZSwgYnVmLCAwLCBibGssIDAsICZwYmxrKTsKKwlpZiAoZXJyY29kZSkgeworCQljb21fZXJyKCJodHJlZV9kdW1wX2ludF9ibG9jayIsIGVycmNvZGUsCisJCQkid2hpbGUgbWFwcGluZyBsb2dpY2FsIGJsb2NrICVsbHVcbiIsIGJsayk7CisJCWdvdG8gZXJyb3V0OworCX0KKworCWVycmNvZGUgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoY3VycmVudF9mcy0+aW8sIHBibGssIDEsIGJ1Zik7CisJaWYgKGVycmNvZGUpIHsKKwkJY29tX2VycigiaHRyZWVfZHVtcF9pbnRfYmxvY2siLCBlcnJjb2RlLAorCQkJIndoaWxlIAlyZWFkaW5nIGJsb2NrICVsbHVcbiIsIGJsayk7CisJCWdvdG8gZXJyb3V0OworCX0KKworCWh0cmVlX2R1bXBfaW50X25vZGUoZnMsIGlubywgaW5vZGUsIHJvb3Rub2RlLAorCQkJICAgIChzdHJ1Y3QgZXh0Ml9keF9lbnRyeSAqKSAoYnVmKzgpLAorCQkJICAgIGNidWYsIGxldmVsKTsKK2Vycm91dDoKKwlmcmVlKGNidWYpOworfQorCisKKwordm9pZCBkb19odHJlZV9kdW1wKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXh0Ml9pbm9fdAlpbm87CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisJYmxrNjRfdAkJYmxrOworCWNoYXIJCSpidWYgPSBOVUxMOworCXN0cnVjdCAJCWV4dDJfZHhfcm9vdF9pbmZvICAqcm9vdG5vZGU7CisJc3RydWN0IAkJZXh0Ml9keF9lbnRyeSAqZW50OworCWVycmNvZGVfdAllcnJjb2RlOworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCXBhZ2VyID0gb3Blbl9wYWdlcigpOworCisJaWYgKGNvbW1vbl9pbm9kZV9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgJmlubywgMCkpCisJCWdvdG8gZXJyb3V0OworCisJaWYgKGRlYnVnZnNfcmVhZF9pbm9kZShpbm8sICZpbm9kZSwgYXJndlsxXSkpCisJCWdvdG8gZXJyb3V0OworCisJaWYgKCFMSU5VWF9TX0lTRElSKGlub2RlLmlfbW9kZSkpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiTm90IGEgZGlyZWN0b3J5Iik7CisJCWdvdG8gZXJyb3V0OworCX0KKworCWlmICgoaW5vZGUuaV9mbGFncyAmIEVYVDJfQlRSRUVfRkwpID09IDApIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiTm90IGEgaGFzaC1pbmRleGVkIGRpcmVjdG9yeSIpOworCQlnb3RvIGVycm91dDsKKwl9CisKKwlidWYgPSBtYWxsb2MoMipjdXJyZW50X2ZzLT5ibG9ja3NpemUpOworCWlmICghYnVmKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgIkNvdWxkbid0IGFsbG9jYXRlIGh0cmVlIGJ1ZmZlciIpOworCQlnb3RvIGVycm91dDsKKwl9CisKKwllcnJjb2RlID0gZXh0MmZzX2JtYXAyKGN1cnJlbnRfZnMsIGlubywgJmlub2RlLCBidWYsIDAsIDAsIDAsICZibGspOworCWlmIChlcnJjb2RlKSB7CisJCWNvbV9lcnIoImRvX2h0cmVlX2Jsb2NrIiwgZXJyY29kZSwKKwkJCSJ3aGlsZSBtYXBwaW5nIGxvZ2ljYWwgYmxvY2sgMFxuIik7CisJCWdvdG8gZXJyb3V0OworCX0KKworCWVycmNvZGUgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoY3VycmVudF9mcy0+aW8sIGJsaywKKwkJCQkJMSwgYnVmKTsKKwlpZiAoZXJyY29kZSkgeworCQljb21fZXJyKGFyZ3ZbMF0sIGVycmNvZGUsICJFcnJvciByZWFkaW5nIHJvb3Qgbm9kZSIpOworCQlnb3RvIGVycm91dDsKKwl9CisKKwlyb290bm9kZSA9IChzdHJ1Y3QgZXh0Ml9keF9yb290X2luZm8gKikgKGJ1ZiArIDI0KTsKKworCWZwcmludGYocGFnZXIsICJSb290IG5vZGUgZHVtcDpcbiIpOworCWZwcmludGYocGFnZXIsICJcdCBSZXNlcnZlZCB6ZXJvOiAldVxuIiwgcm9vdG5vZGUtPnJlc2VydmVkX3plcm8pOworCWZwcmludGYocGFnZXIsICJcdCBIYXNoIFZlcnNpb246ICVkXG4iLCByb290bm9kZS0+aGFzaF92ZXJzaW9uKTsKKwlmcHJpbnRmKHBhZ2VyLCAiXHQgSW5mbyBsZW5ndGg6ICVkXG4iLCByb290bm9kZS0+aW5mb19sZW5ndGgpOworCWZwcmludGYocGFnZXIsICJcdCBJbmRpcmVjdCBsZXZlbHM6ICVkXG4iLCByb290bm9kZS0+aW5kaXJlY3RfbGV2ZWxzKTsKKwlmcHJpbnRmKHBhZ2VyLCAiXHQgRmxhZ3M6ICVkXG4iLCByb290bm9kZS0+dW51c2VkX2ZsYWdzKTsKKworCWVudCA9IChzdHJ1Y3QgZXh0Ml9keF9lbnRyeSAqKSAoYnVmICsgMjQgKyByb290bm9kZS0+aW5mb19sZW5ndGgpOworCisJaHRyZWVfZHVtcF9pbnRfbm9kZShjdXJyZW50X2ZzLCBpbm8sICZpbm9kZSwgcm9vdG5vZGUsIGVudCwKKwkJCSAgICBidWYgKyBjdXJyZW50X2ZzLT5ibG9ja3NpemUsCisJCQkgICAgcm9vdG5vZGUtPmluZGlyZWN0X2xldmVscyk7CisKK2Vycm91dDoKKwlmcmVlKGJ1Zik7CisJY2xvc2VfcGFnZXIocGFnZXIpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmludHMgdGhlIGhhc2ggb2YgYSBnaXZlbiBmaWxlLgorICovCit2b2lkIGRvX2R4X2hhc2goaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlleHQyX2Rpcmhhc2hfdCBoYXNoLCBtaW5vcl9oYXNoOworCWVycmNvZGVfdAllcnI7CisJaW50CQljOworCWludAkJaGFzaF92ZXJzaW9uID0gMDsKKwlfX3UzMgkJaGFzaF9zZWVkWzRdOworCisJaGFzaF9zZWVkWzBdID0gaGFzaF9zZWVkWzFdID0gaGFzaF9zZWVkWzJdID0gaGFzaF9zZWVkWzNdID0gMDsKKworCXJlc2V0X2dldG9wdCgpOworCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgImg6czoiKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdoJzoKKwkJCWhhc2hfdmVyc2lvbiA9IGUycF9zdHJpbmcyaGFzaChvcHRhcmcpOworCQkJaWYgKGhhc2hfdmVyc2lvbiA8IDApCisJCQkJaGFzaF92ZXJzaW9uID0gYXRvaShvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJaWYgKHV1aWRfcGFyc2Uob3B0YXJnLCAodW5zaWduZWQgY2hhciAqKSBoYXNoX3NlZWQpKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFVVSUQgZm9ybWF0OiAlc1xuIiwKKwkJCQkJb3B0YXJnKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gcHJpbnRfdXNhZ2U7CisJCX0KKwl9CisJaWYgKG9wdGluZCAhPSBhcmdjLTEpIHsKKwlwcmludF91c2FnZToKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAidXNhZ2U6IGR4X2hhc2ggWy1oIGhhc2hfYWxnXSAiCisJCQkiWy1zIGhhc2hfc2VlZF0gZmlsZW5hbWUiKTsKKwkJcmV0dXJuOworCX0KKwllcnIgPSBleHQyZnNfZGlyaGFzaChoYXNoX3ZlcnNpb24sIGFyZ3Zbb3B0aW5kXSwgc3RybGVuKGFyZ3Zbb3B0aW5kXSksCisJCQkgICAgIGhhc2hfc2VlZCwgJmhhc2gsICZtaW5vcl9oYXNoKTsKKwlpZiAoZXJyKSB7CisJCWNvbV9lcnIoYXJndlswXSwgZXJyLCAid2hpbGUgY2FjbHVsYXRpbmcgaGFzaCIpOworCQlyZXR1cm47CisJfQorCXByaW50ZigiSGFzaCBvZiAlcyBpcyAweCUweCAobWlub3IgMHglMHgpXG4iLCBhcmd2W29wdGluZF0sCisJICAgICAgIGhhc2gsIG1pbm9yX2hhc2gpOworfQorCisvKgorICogU2VhcmNoIGZvciBwYXJ0aWN1bGFyIGRpcmVjdG9yeSBlbnRyeSAodXNlZnVsIGZvciBkZWJ1Z2dpbmcgdmVyeQorICogbGFyZ2UgaGFzaCB0cmVlIGRpcmVjdG9yaWVzIHRoYXQgaGF2ZSBsb3N0IHNvbWUgYmxvY2tzIGZyb20gdGhlCisgKiBidHJlZSBpbmRleCkuCisgKi8KK3N0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCB7CisJY2hhcgkqc2VhcmNoX25hbWU7CisJY2hhcgkqYnVmOworCWludAlsZW47Cit9OworCitzdGF0aWMgaW50IHNlYXJjaF9kaXJfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgKmJsb2NrbnIsCisJCQkgICAgZTJfYmxrY250X3QgYmxvY2tjbnQsIGJsazY0X3QgcmVmX2JsaywKKwkJCSAgICBpbnQgcmVmX29mZnNldCwgdm9pZCAqcHJpdl9kYXRhKTsKKwordm9pZCBkb19kaXJzZWFyY2goaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlleHQyX2lub190CWlub2RlOworCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCBwYjsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyAhPSAzKSB7CisJCWNvbV9lcnIoMCwgMCwgIlVzYWdlOiBkaXJzZWFyY2ggZGlyIGZpbGVuYW1lIik7CisJCXJldHVybjsKKwl9CisKKwlpbm9kZSA9IHN0cmluZ190b19pbm9kZShhcmd2WzFdKTsKKwlpZiAoIWlub2RlKQorCQlyZXR1cm47CisKKwlwYi5idWYgPSBtYWxsb2MoY3VycmVudF9mcy0+YmxvY2tzaXplKTsKKwlpZiAoIXBiLmJ1ZikgeworCQljb21fZXJyKCJkaXJzZWFyY2giLCAwLCAiQ291bGRuJ3QgYWxsb2NhdGUgYnVmZmVyIik7CisJCXJldHVybjsKKwl9CisJcGIuc2VhcmNoX25hbWUgPSBhcmd2WzJdOworCXBiLmxlbiA9IHN0cmxlbihwYi5zZWFyY2hfbmFtZSk7CisKKwlleHQyZnNfYmxvY2tfaXRlcmF0ZTMoY3VycmVudF9mcywgaW5vZGUsIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLCAwLAorCQkJICAgICAgc2VhcmNoX2Rpcl9ibG9jaywgJnBiKTsKKworCWZyZWUocGIuYnVmKTsKK30KKworCitzdGF0aWMgaW50IHNlYXJjaF9kaXJfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgKmJsb2NrbnIsCisJCQkgICAgZTJfYmxrY250X3QgYmxvY2tjbnQsCisJCQkgICAgYmxrNjRfdCByZWZfYmxrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCAqcDsKKwlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudDsKKwllcnJjb2RlX3QJICAgICAgIAllcnJjb2RlOworCXVuc2lnbmVkIGludAkJb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBpbnQJCXJlY19sZW47CisKKwlpZiAoYmxvY2tjbnQgPCAwKQorCQlyZXR1cm4gMDsKKworCXAgPSAoc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0ICopIHByaXZfZGF0YTsKKworCWVycmNvZGUgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoY3VycmVudF9mcy0+aW8sICpibG9ja25yLCAxLCBwLT5idWYpOworCWlmIChlcnJjb2RlKSB7CisJCWNvbV9lcnIoInNlYXJjaF9kaXJfYmxvY2siLCBlcnJjb2RlLAorCQkJIndoaWxlIHJlYWRpbmcgYmxvY2sgJWx1IiwgKHVuc2lnbmVkIGxvbmcpICpibG9ja25yKTsKKwkJcmV0dXJuIEJMT0NLX0FCT1JUOworCX0KKworCXdoaWxlIChvZmZzZXQgPCBmcy0+YmxvY2tzaXplKSB7CisJCWRpcmVudCA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikgKHAtPmJ1ZiArIG9mZnNldCk7CisJCWVycmNvZGUgPSBleHQyZnNfZ2V0X3JlY19sZW4oZnMsIGRpcmVudCwgJnJlY19sZW4pOworCQlpZiAoZXJyY29kZSkgeworCQkJY29tX2VycigiaHRyZWVfZHVtcF9sZWFmX2lub2RlIiwgZXJyY29kZSwKKwkJCQkid2hpbGUgZ2V0dGluZyByZWNfbGVuIGZvciBibG9jayAlbHUiLAorCQkJCSh1bnNpZ25lZCBsb25nKSAqYmxvY2tucik7CisJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCX0KKwkJaWYgKGRpcmVudC0+aW5vZGUgJiYKKwkJICAgIHAtPmxlbiA9PSAoZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpICYmCisJCSAgICBzdHJuY21wKHAtPnNlYXJjaF9uYW1lLCBkaXJlbnQtPm5hbWUsCisJCQkgICAgcC0+bGVuKSA9PSAwKSB7CisJCQlwcmludGYoIkVudHJ5IGZvdW5kIGF0IGxvZ2ljYWwgYmxvY2sgJWxsZCwgIgorCQkJICAgICAgICJwaHlzICVsbHUsIG9mZnNldCAldVxuIiwgKGxvbmcgbG9uZylibG9ja2NudCwKKwkJCSAgICAgICAqYmxvY2tuciwgb2Zmc2V0KTsKKwkJCXByaW50Zigib2Zmc2V0ICV1XG4iLCBvZmZzZXQpOworCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQl9CisJCW9mZnNldCArPSByZWNfbGVuOworCX0KKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZGVidWdmcy9pY2hlY2suYyBiL2RlYnVnZnMvaWNoZWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I5YmQxNAotLS0gL2Rldi9udWxsCisrKyBiL2RlYnVnZnMvaWNoZWNrLmMKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBpY2hlY2suYyAtLS0gZ2l2ZW4gYSBsaXN0IG9mIGJsb2NrcywgZ2VuZXJhdGUgYSBsaXN0IG9mIGlub2RlcworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisKK3N0cnVjdCBibG9ja19pbmZvIHsKKwlibGs2NF90CQlibGs7CisJZXh0Ml9pbm9fdAlpbm87Cit9OworCitzdHJ1Y3QgYmxvY2tfd2Fsa19zdHJ1Y3QgeworCXN0cnVjdCBibG9ja19pbmZvCSpiYXJyYXk7CisJZTJfYmxrY250X3QJCWJsb2Nrc19sZWZ0OworCWUyX2Jsa2NudF90CQludW1fYmxvY2tzOworCWV4dDJfaW5vX3QJCWlub2RlOworfTsKKworc3RhdGljIGludCBpY2hlY2tfcHJvYyhleHQyX2ZpbHN5cyBmcyBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgICBibGs2NF90CSpibG9ja19uciwKKwkJICAgICAgIGUyX2Jsa2NudF90IGJsb2NrY250IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgIGJsazY0X3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgIHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IGJsb2NrX3dhbGtfc3RydWN0ICpidyA9IChzdHJ1Y3QgYmxvY2tfd2Fsa19zdHJ1Y3QgKikgcHJpdmF0ZTsKKwllMl9ibGtjbnRfdAlpOworCisJZm9yIChpPTA7IGkgPCBidy0+bnVtX2Jsb2NrczsgaSsrKSB7CisJCWlmICghYnctPmJhcnJheVtpXS5pbm8gJiYgYnctPmJhcnJheVtpXS5ibGsgPT0gKmJsb2NrX25yKSB7CisJCQlidy0+YmFycmF5W2ldLmlubyA9IGJ3LT5pbm9kZTsKKwkJCWJ3LT5ibG9ja3NfbGVmdC0tOworCQl9CisJfQorCWlmICghYnctPmJsb2Nrc19sZWZ0KQorCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkb19pY2hlY2soaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBibG9ja193YWxrX3N0cnVjdCBidzsKKwlzdHJ1Y3QgYmxvY2tfaW5mbwkqYmluZm87CisJaW50CQkJaTsKKwlleHQyX2lub2RlX3NjYW4JCXNjYW4gPSAwOworCWV4dDJfaW5vX3QJCWlubzsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwljaGFyCQkJKmJsb2NrX2J1ZjsKKworCWlmIChhcmdjIDwgMikgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogaWNoZWNrIDxibG9jayBudW1iZXI+IC4uLiIpOworCQlyZXR1cm47CisJfQorCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlidy5iYXJyYXkgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBibG9ja19pbmZvKSAqIGFyZ2MpOworCWlmICghYncuYmFycmF5KSB7CisJCWNvbV9lcnIoImljaGVjayIsIEVOT01FTSwKKwkJCSJ3aGlsZSBhbGxvY2F0aW5nIGlub2RlIGluZm8gYXJyYXkiKTsKKwkJcmV0dXJuOworCX0KKwltZW1zZXQoYncuYmFycmF5LCAwLCBzaXplb2Yoc3RydWN0IGJsb2NrX2luZm8pICogYXJnYyk7CisKKwlibG9ja19idWYgPSBtYWxsb2MoY3VycmVudF9mcy0+YmxvY2tzaXplICogMyk7CisJaWYgKCFibG9ja19idWYpIHsKKwkJY29tX2VycigiaWNoZWNrIiwgRU5PTUVNLCAid2hpbGUgYWxsb2NhdGluZyBibG9jayBidWZmZXIiKTsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJZm9yIChpPTE7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKHN0cnRvYmxrKGFyZ3ZbMF0sIGFyZ3ZbaV0sIE5VTEwsICZidy5iYXJyYXlbaS0xXS5ibGspKQorCQkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJYncubnVtX2Jsb2NrcyA9IGJ3LmJsb2Nrc19sZWZ0ID0gYXJnYy0xOworCisJcmV0dmFsID0gZXh0MmZzX29wZW5faW5vZGVfc2NhbihjdXJyZW50X2ZzLCAwLCAmc2Nhbik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJpY2hlY2siLCByZXR2YWwsICJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iKTsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJZG8geworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X25leHRfaW5vZGUoc2NhbiwgJmlubywgJmlub2RlKTsKKwl9IHdoaWxlIChyZXR2YWwgPT0gRVhUMl9FVF9CQURfQkxPQ0tfSU5fSU5PREVfVEFCTEUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiaWNoZWNrIiwgcmV0dmFsLCAid2hpbGUgc3RhcnRpbmcgaW5vZGUgc2NhbiIpOworCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwl3aGlsZSAoaW5vKSB7CisJCWJsazY0X3QgYmxrOworCisJCWlmICghaW5vZGUuaV9saW5rc19jb3VudCkKKwkJCWdvdG8gbmV4dDsKKworCQlidy5pbm9kZSA9IGlubzsKKworCQlibGsgPSBleHQyZnNfZmlsZV9hY2xfYmxvY2soY3VycmVudF9mcywgJmlub2RlKTsKKwkJaWYgKGJsaykgeworCQkJaWNoZWNrX3Byb2MoY3VycmVudF9mcywgJmJsaywgMCwKKwkJCQkgICAgMCwgMCwgJmJ3KTsKKwkJCWlmIChidy5ibG9ja3NfbGVmdCA9PSAwKQorCQkJCWJyZWFrOworCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrX3NldChjdXJyZW50X2ZzLCAmaW5vZGUsIGJsayk7CisJCX0KKworCQlpZiAoIWV4dDJmc19pbm9kZV9oYXNfdmFsaWRfYmxvY2tzMihjdXJyZW50X2ZzLCAmaW5vZGUpKQorCQkJZ290byBuZXh0OworCQkvKgorCQkgKiBUbyBoYW5kbGUgZmlsZXN5c3RlbXMgdG91Y2hlZCBieSAwLjNjIGV4dGZzOyBjYW4gYmUKKwkJICogcmVtb3ZlZCBsYXRlci4KKwkJICovCisJCWlmIChpbm9kZS5pX2R0aW1lKQorCQkJZ290byBuZXh0OworCisJCXJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhjdXJyZW50X2ZzLCBpbm8sCisJCQkJCSAgICAgICBCTE9DS19GTEFHX1JFQURfT05MWSwgYmxvY2tfYnVmLAorCQkJCQkgICAgICAgaWNoZWNrX3Byb2MsICZidyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoImljaGVjayIsIHJldHZhbCwKKwkJCQkid2hpbGUgY2FsbGluZyBleHQyZnNfYmxvY2tfaXRlcmF0ZSIpOworCQkJZ290byBuZXh0OworCQl9CisKKwkJaWYgKGJ3LmJsb2Nrc19sZWZ0ID09IDApCisJCQlicmVhazsKKworCW5leHQ6CisJCWRvIHsKKwkJCXJldHZhbCA9IGV4dDJmc19nZXRfbmV4dF9pbm9kZShzY2FuLCAmaW5vLCAmaW5vZGUpOworCQl9IHdoaWxlIChyZXR2YWwgPT0gRVhUMl9FVF9CQURfQkxPQ0tfSU5fSU5PREVfVEFCTEUpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKCJpY2hlY2siLCByZXR2YWwsCisJCQkJIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iKTsKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQl9CisJfQorCisJcHJpbnRmKCJCbG9ja1x0SW5vZGUgbnVtYmVyXG4iKTsKKwlmb3IgKGk9MCwgYmluZm8gPSBidy5iYXJyYXk7IGkgPCBidy5udW1fYmxvY2tzOyBpKyssIGJpbmZvKyspIHsKKwkJaWYgKGJpbmZvLT5pbm8gPT0gMCkgeworCQkJcHJpbnRmKCIlbGx1XHQ8YmxvY2sgbm90IGZvdW5kPlxuIiwgYmluZm8tPmJsayk7CisJCQljb250aW51ZTsKKwkJfQorCQlwcmludGYoIiVsbHVcdCV1XG4iLCBiaW5mby0+YmxrLCBiaW5mby0+aW5vKTsKKwl9CisKK2Vycm9yX291dDoKKwlmcmVlKGJ3LmJhcnJheSk7CisJZnJlZShibG9ja19idWYpOworCWlmIChzY2FuKQorCQlleHQyZnNfY2xvc2VfaW5vZGVfc2NhbihzY2FuKTsKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kZWJ1Z2ZzL2pmc191c2VyLmggYi9kZWJ1Z2ZzL2pmc191c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA3MGNkNQotLS0gL2Rldi9udWxsCisrKyBiL2RlYnVnZnMvamZzX3VzZXIuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX0pGU19VU0VSX0gKKyNkZWZpbmUgX0pGU19VU0VSX0gKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBrZGV2X3Q7CisKKyNpbmNsdWRlIDxleHQyZnMva2VybmVsLWpiZC5oPgorCisjZW5kaWYgLyogX0pGU19VU0VSX0ggKi8KZGlmZiAtLWdpdCBhL2RlYnVnZnMvbG9nZHVtcC5jIGIvZGVidWdmcy9sb2dkdW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjM2IzMAotLS0gL2Rldi9udWxsCisrKyBiL2RlYnVnZnMvbG9nZHVtcC5jCkBAIC0wLDAgKzEsNjk2IEBACisvKgorICogbG9nZHVtcC5jIC0tLSBkdW1wIHRoZSBjb250ZW50cyBvZiB0aGUgam91cm5hbCBvdXQgdG8gYSBmaWxlCisgKgorICogQXV0aHJvOiBTdGVwaGVuIEMuIFR3ZWVkaWUsIDIwMDEgIDxzY3RAcmVkaGF0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwMSBSZWQgSGF0LCBJbmMuCisgKiBCYXNlZCBvbiBwb3J0aW9ucyAgQ29weXJpZ2h0IChDKSAxOTk0IFRoZW9kb3JlIFRzJ28uCisgKgorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHV0aW1lLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBpbnQgb3B0aW5kOworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyNlbmRpZgorCisjaW5jbHVkZSAiZGVidWdmcy5oIgorI2luY2x1ZGUgImJsa2lkL2Jsa2lkLmgiCisjaW5jbHVkZSAiamZzX3VzZXIuaCIKKyNpbmNsdWRlIDx1dWlkL3V1aWQuaD4KKworZW51bSBqb3VybmFsX2xvY2F0aW9uIHtKT1VSTkFMX0lTX0lOVEVSTkFMLCBKT1VSTkFMX0lTX0VYVEVSTkFMfTsKKworI2RlZmluZSBBTllfQkxPQ0sgKChibGs2NF90KSAtMSkKKworc3RhdGljIGludAkJZHVtcF9hbGwsIGR1bXBfY29udGVudHMsIGR1bXBfZGVzY3JpcHRvcnM7CitzdGF0aWMgYmxrNjRfdAkJYmxvY2tfdG9fZHVtcCwgYml0bWFwX3RvX2R1bXAsIGlub2RlX2Jsb2NrX3RvX2R1bXA7CitzdGF0aWMgdW5zaWduZWQgaW50CWdyb3VwX3RvX2R1bXAsIGlub2RlX29mZnNldF90b19kdW1wOworc3RhdGljIGV4dDJfaW5vX3QJaW5vZGVfdG9fZHVtcDsKKworc3RydWN0IGpvdXJuYWxfc291cmNlCit7CisJZW51bSBqb3VybmFsX2xvY2F0aW9uIHdoZXJlOworCWludCBmZDsKKwlleHQyX2ZpbGVfdCBmaWxlOworfTsKKworc3RhdGljIHZvaWQgZHVtcF9qb3VybmFsKGNoYXIgKiwgRklMRSAqLCBzdHJ1Y3Qgam91cm5hbF9zb3VyY2UgKik7CisKK3N0YXRpYyB2b2lkIGR1bXBfZGVzY3JpcHRvcl9ibG9jayhGSUxFICosIHN0cnVjdCBqb3VybmFsX3NvdXJjZSAqLAorCQkJCSAgY2hhciAqLCBqb3VybmFsX3N1cGVyYmxvY2tfdCAqLAorCQkJCSAgdW5zaWduZWQgaW50ICosIGludCwgdGlkX3QpOworCitzdGF0aWMgdm9pZCBkdW1wX3Jldm9rZV9ibG9jayhGSUxFICosIGNoYXIgKiwgam91cm5hbF9zdXBlcmJsb2NrX3QgKiwKKwkJCQkgIHVuc2lnbmVkIGludCwgaW50LCB0aWRfdCk7CisKK3N0YXRpYyB2b2lkIGR1bXBfbWV0YWRhdGFfYmxvY2soRklMRSAqLCBzdHJ1Y3Qgam91cm5hbF9zb3VyY2UgKiwKKwkJCQlqb3VybmFsX3N1cGVyYmxvY2tfdCosCisJCQkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwKKwkJCQlpbnQsIHRpZF90KTsKKworc3RhdGljIHZvaWQgZG9faGV4ZHVtcCAoRklMRSAqLCBjaGFyICosIGludCk7CisKKyNkZWZpbmUgV1JBUChqc2IsIGJsb2NrbnIpCQkJCQlcCisJaWYgKGJsb2NrbnIgPj0gYmUzMl90b19jcHUoKGpzYiktPnNfbWF4bGVuKSkJCVwKKwkJYmxvY2tuciAtPSAoYmUzMl90b19jcHUoKGpzYiktPnNfbWF4bGVuKSAtCVwKKwkJCSAgICBiZTMyX3RvX2NwdSgoanNiKS0+c19maXJzdCkpOworCit2b2lkIGRvX2xvZ2R1bXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludAkJYzsKKwlpbnQJCXJldHZhbDsKKwljaGFyCQkqb3V0X2ZuOworCUZJTEUJCSpvdXRfZmlsZTsKKworCWNoYXIJCSppbm9kZV9zcGVjID0gTlVMTDsKKwljaGFyCQkqam91cm5hbF9mbiA9IE5VTEw7CisJaW50CQlqb3VybmFsX2ZkID0gMDsKKwlpbnQJCXVzZV9zYiA9IDA7CisJZXh0Ml9pbm9fdAlqb3VybmFsX2ludW07CisJc3RydWN0IGV4dDJfaW5vZGUgam91cm5hbF9pbm9kZTsKKwlleHQyX2ZpbGVfdCAJam91cm5hbF9maWxlOworCWNoYXIJCSp0bXA7CisJc3RydWN0IGpvdXJuYWxfc291cmNlIGpvdXJuYWxfc291cmNlOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICplcyA9IE5VTEw7CisKKwlqb3VybmFsX3NvdXJjZS53aGVyZSA9IEpPVVJOQUxfSVNfSU5URVJOQUw7CisJam91cm5hbF9zb3VyY2UuZmQgPSAwOworCWpvdXJuYWxfc291cmNlLmZpbGUgPSAwOworCWR1bXBfYWxsID0gMDsKKwlkdW1wX2NvbnRlbnRzID0gMDsKKwlkdW1wX2Rlc2NyaXB0b3JzID0gMTsKKwlibG9ja190b19kdW1wID0gQU5ZX0JMT0NLOworCWJpdG1hcF90b19kdW1wID0gLTE7CisJaW5vZGVfYmxvY2tfdG9fZHVtcCA9IEFOWV9CTE9DSzsKKwlpbm9kZV90b19kdW1wID0gLTE7CisKKwlyZXNldF9nZXRvcHQoKTsKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJhYjpjaTpmOnMiKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdhJzoKKwkJCWR1bXBfYWxsKys7CisJCQlicmVhazsKKwkJY2FzZSAnYic6CisJCQlibG9ja190b19kdW1wID0gc3RydG91bChvcHRhcmcsICZ0bXAsIDApOworCQkJaWYgKCp0bXApIHsKKwkJCQljb21fZXJyKGFyZ3ZbMF0sIDAsCisJCQkJCSJCYWQgYmxvY2sgbnVtYmVyIC0gJXMiLCBvcHRhcmcpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWR1bXBfZGVzY3JpcHRvcnMgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJZHVtcF9jb250ZW50cysrOworCQkJYnJlYWs7CisJCWNhc2UgJ2YnOgorCQkJam91cm5hbF9mbiA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdpJzoKKwkJCWlub2RlX3NwZWMgPSBvcHRhcmc7CisJCQlkdW1wX2Rlc2NyaXB0b3JzID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCXVzZV9zYisrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIHByaW50X3VzYWdlOworCQl9CisJfQorCWlmIChvcHRpbmQgIT0gYXJnYyAmJiBvcHRpbmQgIT0gYXJnYy0xKSB7CisJCWdvdG8gcHJpbnRfdXNhZ2U7CisJfQorCisJaWYgKGN1cnJlbnRfZnMpCisJCWVzID0gY3VycmVudF9mcy0+c3VwZXI7CisKKwlpZiAoaW5vZGVfc3BlYykgeworCQlpbnQgaW5vZGVfZ3JvdXAsIGdyb3VwX29mZnNldCwgaW5vZGVzX3Blcl9ibG9jazsKKworCQlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJCXJldHVybjsKKworCQlpbm9kZV90b19kdW1wID0gc3RyaW5nX3RvX2lub2RlKGlub2RlX3NwZWMpOworCQlpZiAoIWlub2RlX3RvX2R1bXApCisJCQlyZXR1cm47CisKKwkJaW5vZGVfZ3JvdXAgPSAoKGlub2RlX3RvX2R1bXAgLSAxKQorCQkJICAgICAgIC8gZXMtPnNfaW5vZGVzX3Blcl9ncm91cCk7CisJCWdyb3VwX29mZnNldCA9ICgoaW5vZGVfdG9fZHVtcCAtIDEpCisJCQkJJSBlcy0+c19pbm9kZXNfcGVyX2dyb3VwKTsKKwkJaW5vZGVzX3Blcl9ibG9jayA9IChjdXJyZW50X2ZzLT5ibG9ja3NpemUKKwkJCQkgICAgLyBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKworCQlpbm9kZV9ibG9ja190b19kdW1wID0KKwkJCWV4dDJmc19pbm9kZV90YWJsZV9sb2MoY3VycmVudF9mcywgaW5vZGVfZ3JvdXApICsKKwkJCShncm91cF9vZmZzZXQgLyBpbm9kZXNfcGVyX2Jsb2NrKTsKKwkJaW5vZGVfb2Zmc2V0X3RvX2R1bXAgPSAoKGdyb3VwX29mZnNldCAlIGlub2Rlc19wZXJfYmxvY2spCisJCQkJCSogc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSk7CisJCXByaW50ZigiSW5vZGUgJXUgaXMgYXQgZ3JvdXAgJXUsIGJsb2NrICVsbHUsIG9mZnNldCAldVxuIiwKKwkJICAgICAgIGlub2RlX3RvX2R1bXAsIGlub2RlX2dyb3VwLAorCQkgICAgICAgaW5vZGVfYmxvY2tfdG9fZHVtcCwgaW5vZGVfb2Zmc2V0X3RvX2R1bXApOworCX0KKworCWlmIChvcHRpbmQgPT0gYXJnYykgeworCQlvdXRfZmlsZSA9IHN0ZG91dDsKKwl9IGVsc2UgeworCQlvdXRfZm4gPSBhcmd2W29wdGluZF07CisJCW91dF9maWxlID0gZm9wZW4ob3V0X2ZuLCAidyIpOworCQlpZiAoIW91dF9maWxlKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIGVycm5vLCAid2hpbGUgb3BlbmluZyAlcyBmb3IgbG9nZHVtcCIsCisJCQkJb3V0X2ZuKTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJfQorCisJaWYgKGJsb2NrX3RvX2R1bXAgIT0gQU5ZX0JMT0NLICYmIGN1cnJlbnRfZnMgIT0gTlVMTCkgeworCQlncm91cF90b19kdW1wID0gKChibG9ja190b19kdW1wIC0KKwkJCQkgIGVzLT5zX2ZpcnN0X2RhdGFfYmxvY2spCisJCQkJIC8gZXMtPnNfYmxvY2tzX3Blcl9ncm91cCk7CisJCWJpdG1hcF90b19kdW1wID0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoY3VycmVudF9mcywgZ3JvdXBfdG9fZHVtcCk7CisJfQorCisJaWYgKCFqb3VybmFsX2ZuICYmIGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCWdvdG8gZXJyb3V0OworCisJaWYgKGpvdXJuYWxfZm4pIHsKKwkJLyogU2V0IHVwIHRvIHJlYWQgam91cm5hbCBmcm9tIGEgcmVndWxhciBmaWxlIHNvbWV3aGVyZSAqLworCQlqb3VybmFsX2ZkID0gb3Blbihqb3VybmFsX2ZuLCBPX1JET05MWSwgMCk7CisJCWlmIChqb3VybmFsX2ZkIDwgMCkgeworCQkJY29tX2Vycihhcmd2WzBdLCBlcnJubywgIndoaWxlIG9wZW5pbmcgJXMgZm9yIGxvZ2R1bXAiLAorCQkJCWpvdXJuYWxfZm4pOworCQkJZ290byBlcnJvdXQ7CisJCX0KKworCQlqb3VybmFsX3NvdXJjZS53aGVyZSA9IEpPVVJOQUxfSVNfRVhURVJOQUw7CisJCWpvdXJuYWxfc291cmNlLmZkID0gam91cm5hbF9mZDsKKwl9IGVsc2UgaWYgKChqb3VybmFsX2ludW0gPSBlcy0+c19qb3VybmFsX2ludW0pKSB7CisJCWlmICh1c2Vfc2IpIHsKKwkJCWlmIChlcy0+c19qbmxfYmFja3VwX3R5cGUgIT0gRVhUM19KTkxfQkFDS1VQX0JMT0NLUykgeworCQkJCWNvbV9lcnIoYXJndlswXSwgMCwKKwkJCQkJIm5vIGpvdXJuYWwgYmFja3VwIGluIHN1cGVyIGJsb2NrXG4iKTsKKwkJCQlnb3RvIGVycm91dDsKKwkJCX0KKwkJCW1lbXNldCgmam91cm5hbF9pbm9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSk7CisJCQltZW1jcHkoJmpvdXJuYWxfaW5vZGUuaV9ibG9ja1swXSwgZXMtPnNfam5sX2Jsb2NrcywKKwkJCSAgICAgICBFWFQyX05fQkxPQ0tTKjQpOworCQkJam91cm5hbF9pbm9kZS5pX3NpemVfaGlnaCA9IGVzLT5zX2pubF9ibG9ja3NbMTVdOworCQkJam91cm5hbF9pbm9kZS5pX3NpemUgPSBlcy0+c19qbmxfYmxvY2tzWzE2XTsKKwkJCWpvdXJuYWxfaW5vZGUuaV9saW5rc19jb3VudCA9IDE7CisJCQlqb3VybmFsX2lub2RlLmlfbW9kZSA9IExJTlVYX1NfSUZSRUcgfCAwNjAwOworCQl9IGVsc2UgeworCQkJaWYgKGRlYnVnZnNfcmVhZF9pbm9kZShqb3VybmFsX2ludW0sICZqb3VybmFsX2lub2RlLAorCQkJCQkgICAgICAgYXJndlswXSkpCisJCQkJZ290byBlcnJvdXQ7CisJCX0KKworCQlyZXR2YWwgPSBleHQyZnNfZmlsZV9vcGVuMihjdXJyZW50X2ZzLCBqb3VybmFsX2ludW0sCisJCQkJCSAgICZqb3VybmFsX2lub2RlLCAwLCAmam91cm5hbF9maWxlKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBvcGVuaW5nIGV4dDIgZmlsZSIpOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJam91cm5hbF9zb3VyY2Uud2hlcmUgPSBKT1VSTkFMX0lTX0lOVEVSTkFMOworCQlqb3VybmFsX3NvdXJjZS5maWxlID0gam91cm5hbF9maWxlOworCX0gZWxzZSB7CisJCWNoYXIgdXVpZFszN107CisKKwkJdXVpZF91bnBhcnNlKGVzLT5zX2pvdXJuYWxfdXVpZCwgdXVpZCk7CisJCWpvdXJuYWxfZm4gPSBibGtpZF9nZXRfZGV2bmFtZShOVUxMLCAiVVVJRCIsIHV1aWQpOworCQlpZiAoIWpvdXJuYWxfZm4pCisJCQkJam91cm5hbF9mbiA9IGJsa2lkX2Rldm5vX3RvX2Rldm5hbWUoZXMtPnNfam91cm5hbF9kZXYpOworCQlpZiAoIWpvdXJuYWxfZm4pIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgMCwgImZpbGVzeXN0ZW0gaGFzIG5vIGpvdXJuYWwiKTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWpvdXJuYWxfZmQgPSBvcGVuKGpvdXJuYWxfZm4sIE9fUkRPTkxZLCAwKTsKKwkJaWYgKGpvdXJuYWxfZmQgPCAwKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIGVycm5vLCAid2hpbGUgb3BlbmluZyAlcyBmb3IgbG9nZHVtcCIsCisJCQkJam91cm5hbF9mbik7CisJCQlmcmVlKGpvdXJuYWxfZm4pOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJZnByaW50ZihvdXRfZmlsZSwgIlVzaW5nIGV4dGVybmFsIGpvdXJuYWwgZm91bmQgYXQgJXNcbiIsCisJCQlqb3VybmFsX2ZuKTsKKwkJZnJlZShqb3VybmFsX2ZuKTsKKwkJam91cm5hbF9zb3VyY2Uud2hlcmUgPSBKT1VSTkFMX0lTX0VYVEVSTkFMOworCQlqb3VybmFsX3NvdXJjZS5mZCA9IGpvdXJuYWxfZmQ7CisJfQorCisJZHVtcF9qb3VybmFsKGFyZ3ZbMF0sIG91dF9maWxlLCAmam91cm5hbF9zb3VyY2UpOworCisJaWYgKGpvdXJuYWxfc291cmNlLndoZXJlID09IEpPVVJOQUxfSVNfSU5URVJOQUwpCisJCWV4dDJmc19maWxlX2Nsb3NlKGpvdXJuYWxfZmlsZSk7CisJZWxzZQorCQljbG9zZShqb3VybmFsX2ZkKTsKKworZXJyb3V0OgorCWlmIChvdXRfZmlsZSAmJiAob3V0X2ZpbGUgIT0gc3Rkb3V0KSkKKwkJZmNsb3NlKG91dF9maWxlKTsKKworCXJldHVybjsKKworcHJpbnRfdXNhZ2U6CisJZnByaW50ZihzdGRlcnIsICIlczogVXNhZ2U6IGxvZ2R1bXAgWy1hY3NdIFstYjxibG9jaz5dIFstaTxmaWxlc3BlYz5dXG5cdCIKKwkJIlstZjxqb3VybmFsX2ZpbGU+XSBbb3V0cHV0X2ZpbGVdXG4iLCBhcmd2WzBdKTsKK30KKworCitzdGF0aWMgaW50IHJlYWRfam91cm5hbF9ibG9jayhjb25zdCBjaGFyICpjbWQsIHN0cnVjdCBqb3VybmFsX3NvdXJjZSAqc291cmNlLAorCQkJICAgICAgb2ZmX3Qgb2Zmc2V0LCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBzaXplKQoreworCWludCByZXR2YWw7CisJdW5zaWduZWQgaW50IGdvdDsKKworCWlmIChzb3VyY2UtPndoZXJlID09IEpPVVJOQUxfSVNfRVhURVJOQUwpIHsKKwkJaWYgKGxzZWVrKHNvdXJjZS0+ZmQsIG9mZnNldCwgU0VFS19TRVQpIDwgMCkgeworCQkJcmV0dmFsID0gZXJybm87CisJCQlnb3RvIHNlZWtfZXJyOworCQl9CisJCXJldHZhbCA9IHJlYWQoc291cmNlLT5mZCwgYnVmLCBzaXplKTsKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCXJldHZhbCA9IGVycm5vOworCQkJZ290byByZWFkX2VycjsKKwkJfQorCQlnb3QgPSByZXR2YWw7CisJCXJldHZhbCA9IDA7CisJfSBlbHNlIHsKKwkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfbHNlZWsoc291cmNlLT5maWxlLCBvZmZzZXQsCisJCQkJCSAgIEVYVDJfU0VFS19TRVQsIE5VTEwpOworCQlpZiAocmV0dmFsKSB7CisJCXNlZWtfZXJyOgorCQkJY29tX2VycihjbWQsIHJldHZhbCwgIndoaWxlIHNlZWtpbmcgaW4gcmVhZGluZyBqb3VybmFsIik7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19maWxlX3JlYWQoc291cmNlLT5maWxlLCBidWYsIHNpemUsICZnb3QpOworCQlpZiAocmV0dmFsKSB7CisJCXJlYWRfZXJyOgorCQkJY29tX2VycihjbWQsIHJldHZhbCwgIndoaWxlIHJlYWRpbmcgam91cm5hbCIpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCX0KKwlpZiAoZ290ICE9IHNpemUpIHsKKwkJY29tX2VycihjbWQsIDAsICJzaG9ydCByZWFkIChyZWFkICV1LCBleHBlY3RlZCAldSkgIgorCQkJIndoaWxlIHJlYWRpbmcgam91cm5hbCIsIGdvdCwgc2l6ZSk7CisJCXJldHZhbCA9IC0xOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdHlwZV90b19uYW1lKGludCBidHlwZSkKK3sKKwlzd2l0Y2ggKGJ0eXBlKSB7CisJY2FzZSBKRlNfREVTQ1JJUFRPUl9CTE9DSzoKKwkJcmV0dXJuICJkZXNjcmlwdG9yIGJsb2NrIjsKKwljYXNlIEpGU19DT01NSVRfQkxPQ0s6CisJCXJldHVybiAiY29tbWl0IGJsb2NrIjsKKwljYXNlIEpGU19TVVBFUkJMT0NLX1YxOgorCQlyZXR1cm4gIlYxIHN1cGVyYmxvY2siOworCWNhc2UgSkZTX1NVUEVSQkxPQ0tfVjI6CisJCXJldHVybiAiVjIgc3VwZXJibG9jayI7CisJY2FzZSBKRlNfUkVWT0tFX0JMT0NLOgorCQlyZXR1cm4gInJldm9rZSB0YWJsZSI7CisJfQorCXJldHVybiAidW5yZWNvZ25pc2VkIHR5cGUiOworfQorCisKK3N0YXRpYyB2b2lkIGR1bXBfam91cm5hbChjaGFyICpjbWRuYW1lLCBGSUxFICpvdXRfZmlsZSwKKwkJCSBzdHJ1Y3Qgam91cm5hbF9zb3VyY2UgKnNvdXJjZSkKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2I7CisJY2hhcgkJCWpzYl9idWZmZXJbMTAyNF07CisJY2hhcgkJCWJ1Zls4MTkyXTsKKwlqb3VybmFsX3N1cGVyYmxvY2tfdAkqanNiOworCXVuc2lnbmVkIGludAkJYmxvY2tzaXplID0gMTAyNDsKKwlpbnQJCQlyZXR2YWw7CisJX191MzIJCQltYWdpYywgc2VxdWVuY2UsIGJsb2NrdHlwZTsKKwlqb3VybmFsX2hlYWRlcl90CSpoZWFkZXI7CisKKwl0aWRfdAkJCXRyYW5zYWN0aW9uOworCXVuc2lnbmVkIGludAkJYmxvY2tuciA9IDA7CisKKwkvKiBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYW4gZXh0MiBzdXBlcmJsb2NrIGhlYWRlciAqLworCXJldHZhbCA9IHJlYWRfam91cm5hbF9ibG9jayhjbWRuYW1lLCBzb3VyY2UsIDAsIGJ1ZiwgMjA0OCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuOworCisJanNiID0gKGpvdXJuYWxfc3VwZXJibG9ja190ICopIGJ1ZjsKKwlzYiA9IChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqKSAoYnVmKzEwMjQpOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCWlmIChzYi0+c19tYWdpYyA9PSBleHQyZnNfc3dhYjE2KEVYVDJfU1VQRVJfTUFHSUMpKQorCQlleHQyZnNfc3dhcF9zdXBlcihzYik7CisjZW5kaWYKKworCWlmICgoYmUzMl90b19jcHUoanNiLT5zX2hlYWRlci5oX21hZ2ljKSAhPSBKRlNfTUFHSUNfTlVNQkVSKSAmJgorCSAgICAoc2ItPnNfbWFnaWMgPT0gRVhUMl9TVVBFUl9NQUdJQykgJiYKKwkgICAgKHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfSk9VUk5BTF9ERVYpKSB7CisJCWJsb2Nrc2l6ZSA9IEVYVDJfQkxPQ0tfU0laRShzYik7CisJCWJsb2NrbnIgPSAoYmxvY2tzaXplID09IDEwMjQpID8gMiA6IDE7CisJCXV1aWRfdW5wYXJzZShzYi0+c191dWlkLCBqc2JfYnVmZmVyKTsKKwkJZnByaW50ZihvdXRfZmlsZSwgIkV4dDIgc3VwZXJibG9jayBoZWFkZXIgZm91bmQuXG4iKTsKKwkJaWYgKGR1bXBfYWxsKSB7CisJCQlmcHJpbnRmKG91dF9maWxlLCAiXHR1dWlkPSVzXG4iLCBqc2JfYnVmZmVyKTsKKwkJCWZwcmludGYob3V0X2ZpbGUsICJcdGJsb2Nrc2l6ZT0lZFxuIiwgYmxvY2tzaXplKTsKKwkJCWZwcmludGYob3V0X2ZpbGUsICJcdGpvdXJuYWwgZGF0YSBzaXplICVsdVxuIiwKKwkJCQkodW5zaWduZWQgbG9uZykgZXh0MmZzX2Jsb2Nrc19jb3VudChzYikpOworCQl9CisJfQorCisJLyogTmV4dCwgcmVhZCB0aGUgam91cm5hbCBzdXBlcmJsb2NrICovCisKKwlyZXR2YWwgPSByZWFkX2pvdXJuYWxfYmxvY2soY21kbmFtZSwgc291cmNlLCBibG9ja25yKmJsb2Nrc2l6ZSwKKwkJCQkgICAganNiX2J1ZmZlciwgMTAyNCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuOworCisJanNiID0gKGpvdXJuYWxfc3VwZXJibG9ja190ICopIGpzYl9idWZmZXI7CisJaWYgKGJlMzJfdG9fY3B1KGpzYi0+c19oZWFkZXIuaF9tYWdpYykgIT0gSkZTX01BR0lDX05VTUJFUikgeworCQlmcHJpbnRmKG91dF9maWxlLAorCQkJIkpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXIgaW52YWxpZCFcbiIpOworCQlyZXR1cm47CisJfQorCWJsb2Nrc2l6ZSA9IGJlMzJfdG9fY3B1KGpzYi0+c19ibG9ja3NpemUpOworCXRyYW5zYWN0aW9uID0gYmUzMl90b19jcHUoanNiLT5zX3NlcXVlbmNlKTsKKwlibG9ja25yID0gYmUzMl90b19jcHUoanNiLT5zX3N0YXJ0KTsKKworCWZwcmludGYob3V0X2ZpbGUsICJKb3VybmFsIHN0YXJ0cyBhdCBibG9jayAldSwgdHJhbnNhY3Rpb24gJXVcbiIsCisJCWJsb2NrbnIsIHRyYW5zYWN0aW9uKTsKKworCWlmICghYmxvY2tucikKKwkJLyogRW1wdHkgam91cm5hbCwgbm90aGluZyB0byBkby4gKi8KKwkJcmV0dXJuOworCisJd2hpbGUgKDEpIHsKKwkJcmV0dmFsID0gcmVhZF9qb3VybmFsX2Jsb2NrKGNtZG5hbWUsIHNvdXJjZSwKKwkJCQkJICAgIGJsb2NrbnIqYmxvY2tzaXplLCBidWYsCisJCQkJCSAgICBibG9ja3NpemUpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuOworCisJCWhlYWRlciA9IChqb3VybmFsX2hlYWRlcl90ICopIGJ1ZjsKKworCQltYWdpYyA9IGJlMzJfdG9fY3B1KGhlYWRlci0+aF9tYWdpYyk7CisJCXNlcXVlbmNlID0gYmUzMl90b19jcHUoaGVhZGVyLT5oX3NlcXVlbmNlKTsKKwkJYmxvY2t0eXBlID0gYmUzMl90b19jcHUoaGVhZGVyLT5oX2Jsb2NrdHlwZSk7CisKKwkJaWYgKG1hZ2ljICE9IEpGU19NQUdJQ19OVU1CRVIpIHsKKwkJCWZwcmludGYgKG91dF9maWxlLCAiTm8gbWFnaWMgbnVtYmVyIGF0IGJsb2NrICV1OiAiCisJCQkJICJlbmQgb2Ygam91cm5hbC5cbiIsIGJsb2NrbnIpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHNlcXVlbmNlICE9IHRyYW5zYWN0aW9uKSB7CisJCQlmcHJpbnRmIChvdXRfZmlsZSwgIkZvdW5kIHNlcXVlbmNlICV1IChub3QgJXUpIGF0ICIKKwkJCQkgImJsb2NrICV1OiBlbmQgb2Ygam91cm5hbC5cbiIsCisJCQkJIHNlcXVlbmNlLCB0cmFuc2FjdGlvbiwgYmxvY2tucik7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoZHVtcF9kZXNjcmlwdG9ycykgeworCQkJZnByaW50ZiAob3V0X2ZpbGUsICJGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSAldSwgIgorCQkJCSAidHlwZSAldSAoJXMpIGF0IGJsb2NrICV1XG4iLAorCQkJCSBzZXF1ZW5jZSwgYmxvY2t0eXBlLAorCQkJCSB0eXBlX3RvX25hbWUoYmxvY2t0eXBlKSwgYmxvY2tucik7CisJCX0KKworCQlzd2l0Y2ggKGJsb2NrdHlwZSkgeworCQljYXNlIEpGU19ERVNDUklQVE9SX0JMT0NLOgorCQkJZHVtcF9kZXNjcmlwdG9yX2Jsb2NrKG91dF9maWxlLCBzb3VyY2UsIGJ1ZiwganNiLAorCQkJCQkgICAgICAmYmxvY2tuciwgYmxvY2tzaXplLAorCQkJCQkgICAgICB0cmFuc2FjdGlvbik7CisJCQljb250aW51ZTsKKworCQljYXNlIEpGU19DT01NSVRfQkxPQ0s6CisJCQl0cmFuc2FjdGlvbisrOworCQkJYmxvY2tucisrOworCQkJV1JBUChqc2IsIGJsb2NrbnIpOworCQkJY29udGludWU7CisKKwkJY2FzZSBKRlNfUkVWT0tFX0JMT0NLOgorCQkJZHVtcF9yZXZva2VfYmxvY2sob3V0X2ZpbGUsIGJ1ZiwganNiLAorCQkJCQkgIGJsb2NrbnIsIGJsb2Nrc2l6ZSwKKwkJCQkJICB0cmFuc2FjdGlvbik7CisJCQlibG9ja25yKys7CisJCQlXUkFQKGpzYiwgYmxvY2tucik7CisJCQljb250aW51ZTsKKworCQlkZWZhdWx0OgorCQkJZnByaW50ZiAob3V0X2ZpbGUsICJVbmV4cGVjdGVkIGJsb2NrIHR5cGUgJXUgYXQgIgorCQkJCSAiYmxvY2sgJXUuXG4iLCBibG9ja3R5cGUsIGJsb2NrbnIpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGR1bXBfZGVzY3JpcHRvcl9ibG9jayhGSUxFICpvdXRfZmlsZSwKKwkJCQkgIHN0cnVjdCBqb3VybmFsX3NvdXJjZSAqc291cmNlLAorCQkJCSAgY2hhciAqYnVmLAorCQkJCSAgam91cm5hbF9zdXBlcmJsb2NrX3QgKmpzYiwKKwkJCQkgIHVuc2lnbmVkIGludCAqYmxvY2twLCBpbnQgYmxvY2tzaXplLAorCQkJCSAgdGlkX3QgdHJhbnNhY3Rpb24pCit7CisJaW50CQkJb2Zmc2V0LCB0YWdfc2l6ZSA9IEpCRF9UQUdfU0laRTMyOworCWNoYXIJCQkqdGFncDsKKwlqb3VybmFsX2Jsb2NrX3RhZ190CSp0YWc7CisJdW5zaWduZWQgaW50CQlibG9ja25yOworCV9fdTMyCQkJdGFnX2Jsb2NrOworCV9fdTMyCQkJdGFnX2ZsYWdzOworCisJaWYgKGJlMzJfdG9fY3B1KGpzYi0+c19mZWF0dXJlX2luY29tcGF0KSAmIEpGU19GRUFUVVJFX0lOQ09NUEFUXzY0QklUKQorCQl0YWdfc2l6ZSA9IEpCRF9UQUdfU0laRTY0OworCisJb2Zmc2V0ID0gc2l6ZW9mKGpvdXJuYWxfaGVhZGVyX3QpOworCWJsb2NrbnIgPSAqYmxvY2twOworCisJaWYgKGR1bXBfYWxsKQorCQlmcHJpbnRmKG91dF9maWxlLCAiRHVtcGluZyBkZXNjcmlwdG9yIGJsb2NrLCBzZXF1ZW5jZSAldSwgYXQgIgorCQkJImJsb2NrICV1OlxuIiwgdHJhbnNhY3Rpb24sIGJsb2NrbnIpOworCisJKytibG9ja25yOworCVdSQVAoanNiLCBibG9ja25yKTsKKworCWRvIHsKKwkJLyogV29yayBvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjdXJyZW50IHRhZywgYW5kIHNraXAgdG8KKwkJICogdGhlIG5leHQgb25lLi4uICovCisJCXRhZ3AgPSAmYnVmW29mZnNldF07CisJCXRhZyA9IChqb3VybmFsX2Jsb2NrX3RhZ190ICopIHRhZ3A7CisJCW9mZnNldCArPSB0YWdfc2l6ZTsKKworCQkvKiAuLi4gYW5kIGlmIHdlIGhhdmUgZ29uZSB0b28gZmFyLCB0aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlCisJCSAgIGVuZCBvZiB0aGlzIGJsb2NrLiAqLworCQlpZiAob2Zmc2V0ID4gYmxvY2tzaXplKQorCQkJYnJlYWs7CisKKwkJdGFnX2Jsb2NrID0gYmUzMl90b19jcHUodGFnLT50X2Jsb2NrbnIpOworCQl0YWdfZmxhZ3MgPSBiZTMyX3RvX2NwdSh0YWctPnRfZmxhZ3MpOworCisJCWlmICghKHRhZ19mbGFncyAmIEpGU19GTEFHX1NBTUVfVVVJRCkpCisJCQlvZmZzZXQgKz0gMTY7CisKKwkJZHVtcF9tZXRhZGF0YV9ibG9jayhvdXRfZmlsZSwgc291cmNlLCBqc2IsCisJCQkJICAgIGJsb2NrbnIsIHRhZ19ibG9jaywgdGFnX2ZsYWdzLCBibG9ja3NpemUsCisJCQkJICAgIHRyYW5zYWN0aW9uKTsKKworCQkrK2Jsb2NrbnI7CisJCVdSQVAoanNiLCBibG9ja25yKTsKKworCX0gd2hpbGUgKCEodGFnX2ZsYWdzICYgSkZTX0ZMQUdfTEFTVF9UQUcpKTsKKworCSpibG9ja3AgPSBibG9ja25yOworfQorCisKK3N0YXRpYyB2b2lkIGR1bXBfcmV2b2tlX2Jsb2NrKEZJTEUgKm91dF9maWxlLCBjaGFyICpidWYsCisJCQkgICAgICBqb3VybmFsX3N1cGVyYmxvY2tfdCAqanNiIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBibG9ja25yLAorCQkJICAgICAgaW50IGJsb2Nrc2l6ZSBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICB0aWRfdCB0cmFuc2FjdGlvbikKK3sKKwlpbnQJCQlvZmZzZXQsIG1heDsKKwlqb3VybmFsX3Jldm9rZV9oZWFkZXJfdCAqaGVhZGVyOworCXVuc2lnbmVkIGludAkJKmVudHJ5LCByYmxvY2s7CisKKwlpZiAoZHVtcF9hbGwpCisJCWZwcmludGYob3V0X2ZpbGUsICJEdW1waW5nIHJldm9rZSBibG9jaywgc2VxdWVuY2UgJXUsIGF0ICIKKwkJCSJibG9jayAldTpcbiIsIHRyYW5zYWN0aW9uLCBibG9ja25yKTsKKworCWhlYWRlciA9IChqb3VybmFsX3Jldm9rZV9oZWFkZXJfdCAqKSBidWY7CisJb2Zmc2V0ID0gc2l6ZW9mKGpvdXJuYWxfcmV2b2tlX2hlYWRlcl90KTsKKwltYXggPSBiZTMyX3RvX2NwdShoZWFkZXItPnJfY291bnQpOworCisJd2hpbGUgKG9mZnNldCA8IG1heCkgeworCQllbnRyeSA9ICh1bnNpZ25lZCBpbnQgKikgKGJ1ZiArIG9mZnNldCk7CisJCXJibG9jayA9IGJlMzJfdG9fY3B1KCplbnRyeSk7CisJCWlmIChkdW1wX2FsbCB8fCByYmxvY2sgPT0gYmxvY2tfdG9fZHVtcCkgeworCQkJZnByaW50ZihvdXRfZmlsZSwgIiAgUmV2b2tlIEZTIGJsb2NrICV1IiwgcmJsb2NrKTsKKwkJCWlmIChkdW1wX2FsbCkKKwkJCQlmcHJpbnRmKG91dF9maWxlLCAiXG4iKTsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKG91dF9maWxlLCIgYXQgYmxvY2sgJXUsIHNlcXVlbmNlICV1XG4iLAorCQkJCQlibG9ja25yLCB0cmFuc2FjdGlvbik7CisJCX0KKwkJb2Zmc2V0ICs9IDQ7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHNob3dfZXh0ZW50KEZJTEUgKm91dF9maWxlLCBpbnQgc3RhcnRfZXh0ZW50LCBpbnQgZW5kX2V4dGVudCwKKwkJCV9fdTMyIGZpcnN0X2Jsb2NrKQoreworCWlmIChzdGFydF9leHRlbnQgPj0gMCAmJiBmaXJzdF9ibG9jayAhPSAwKQorCQlmcHJpbnRmKG91dF9maWxlLCAiKCVkKyV1KTogJXUgIiwKKwkJCXN0YXJ0X2V4dGVudCwgZW5kX2V4dGVudC1zdGFydF9leHRlbnQsIGZpcnN0X2Jsb2NrKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19pbmRpcmVjdChGSUxFICpvdXRfZmlsZSwgY29uc3QgY2hhciAqbmFtZSwgX191MzIgd2hlcmUpCit7CisJaWYgKHdoZXJlKQorCQlmcHJpbnRmKG91dF9maWxlLCAiKCVzKTogJXUgIiwgbmFtZSwgd2hlcmUpOworfQorCisKK3N0YXRpYyB2b2lkIGR1bXBfbWV0YWRhdGFfYmxvY2soRklMRSAqb3V0X2ZpbGUsIHN0cnVjdCBqb3VybmFsX3NvdXJjZSAqc291cmNlLAorCQkJCWpvdXJuYWxfc3VwZXJibG9ja190ICpqc2IgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCXVuc2lnbmVkIGludCBsb2dfYmxvY2tuciwKKwkJCQl1bnNpZ25lZCBpbnQgZnNfYmxvY2tuciwKKwkJCQl1bnNpZ25lZCBpbnQgbG9nX3RhZ19mbGFncywKKwkJCQlpbnQgYmxvY2tzaXplLAorCQkJCXRpZF90IHRyYW5zYWN0aW9uKQoreworCWludAkJcmV0dmFsOworCWNoYXIgCQlidWZbODE5Ml07CisKKwlpZiAoIShkdW1wX2FsbAorCSAgICAgIHx8IChmc19ibG9ja25yID09IGJsb2NrX3RvX2R1bXApCisJICAgICAgfHwgKGZzX2Jsb2NrbnIgPT0gaW5vZGVfYmxvY2tfdG9fZHVtcCkKKwkgICAgICB8fCAoZnNfYmxvY2tuciA9PSBiaXRtYXBfdG9fZHVtcCkpKQorCQlyZXR1cm47CisKKwlmcHJpbnRmKG91dF9maWxlLCAiICBGUyBibG9jayAldSBsb2dnZWQgYXQgIiwgZnNfYmxvY2tucik7CisJaWYgKCFkdW1wX2FsbCkKKwkJZnByaW50ZihvdXRfZmlsZSwgInNlcXVlbmNlICV1LCAiLCB0cmFuc2FjdGlvbik7CisJZnByaW50ZihvdXRfZmlsZSwgImpvdXJuYWwgYmxvY2sgJXUgKGZsYWdzIDB4JXgpXG4iLCBsb2dfYmxvY2tuciwKKwkJbG9nX3RhZ19mbGFncyk7CisKKwkvKiBUaGVyZSBhcmUgdHdvIG1ham9yIHNwZWNpYWwgY2FzZXMgdG8gcGFyc2U6CisJICoKKwkgKiBJZiB0aGlzIGJsb2NrIGlzIGEgYmxvY2sKKwkgKiBiaXRtYXAgYmxvY2ssIHdlIG5lZWQgdG8gZ2l2ZSBpdCBzcGVjaWFsIHRyZWF0bWVudCBzbyB0aGF0IHdlCisJICogY2FuIGxvZyBhbnkgYWxsb2NhdGVzIGFuZCBkZWFsbG9jYXRlcyB3aGljaCBhZmZlY3QgdGhlCisJICogYmxvY2tfdG9fZHVtcCBxdWVyeSBibG9jay4KKwkgKgorCSAqIElmIHRoZSBibG9jayBpcyBhbiBpbm9kZSBibG9jayBmb3IgdGhlIGlub2RlIGJlaW5nIHNlYXJjaGVkCisJICogZm9yLCB0aGVuIHdlIG5lZWQgdG8gZHVtcCB0aGUgY29udGVudHMgb2YgdGhhdCBpbm9kZQorCSAqIHN0cnVjdHVyZSBzeW1ib2xpY2FsbHkuCisJICovCisKKwlpZiAoIShkdW1wX2NvbnRlbnRzICYmIGR1bXBfYWxsKQorCSAgICAmJiBmc19ibG9ja25yICE9IGJsb2NrX3RvX2R1bXAKKwkgICAgJiYgZnNfYmxvY2tuciAhPSBiaXRtYXBfdG9fZHVtcAorCSAgICAmJiBmc19ibG9ja25yICE9IGlub2RlX2Jsb2NrX3RvX2R1bXApCisJCXJldHVybjsKKworCXJldHZhbCA9IHJlYWRfam91cm5hbF9ibG9jaygibG9nZHVtcCIsIHNvdXJjZSwKKwkJCQkgICAgYmxvY2tzaXplICogbG9nX2Jsb2NrbnIsCisJCQkJICAgIGJ1ZiwgYmxvY2tzaXplKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm47CisKKwlpZiAoZnNfYmxvY2tuciA9PSBiaXRtYXBfdG9fZHVtcCkgeworCQlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXI7CisJCWludCBvZmZzZXQ7CisKKwkJc3VwZXIgPSBjdXJyZW50X2ZzLT5zdXBlcjsKKwkJb2Zmc2V0ID0gKChibG9ja190b19kdW1wIC0gc3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgJQorCQkJICBzdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwKTsKKworCQlmcHJpbnRmKG91dF9maWxlLCAiICAgIChibG9jayBiaXRtYXAgZm9yIGJsb2NrICVsbHU6ICIKKwkJCSJibG9jayBpcyAlcylcbiIsCisJCQlibG9ja190b19kdW1wLAorCQkJZXh0MmZzX3Rlc3RfYml0KG9mZnNldCwgYnVmKSA/ICJTRVQiIDogIkNMRUFSIik7CisJfQorCisJaWYgKGZzX2Jsb2NrbnIgPT0gaW5vZGVfYmxvY2tfdG9fZHVtcCkgeworCQlzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGU7CisJCWludCBmaXJzdCwgcHJldiwgdGhpcywgc3RhcnRfZXh0ZW50LCBpOworCisJCWZwcmludGYob3V0X2ZpbGUsICIgICAgKGlub2RlIGJsb2NrIGZvciBpbm9kZSAldSk6XG4iLAorCQkJaW5vZGVfdG9fZHVtcCk7CisKKwkJaW5vZGUgPSAoc3RydWN0IGV4dDJfaW5vZGUgKikgKGJ1ZiArIGlub2RlX29mZnNldF90b19kdW1wKTsKKwkJaW50ZXJuYWxfZHVtcF9pbm9kZShvdXRfZmlsZSwgIiAgICAiLCBpbm9kZV90b19kdW1wLCBpbm9kZSwgMCk7CisKKwkJLyogRHVtcCBvdXQgdGhlIGRpcmVjdC9pbmRpcmVjdCBibG9ja3MgaGVyZToKKwkJICogaW50ZXJuYWxfZHVtcF9pbm9kZSBjYW4gb25seSBkdW1wIHRoZW0gZnJvbSB0aGUgbWFpbgorCQkgKiBvbi1kaXNrIGlub2RlLCBub3QgZnJvbSB0aGUgam91cm5hbGVkIGNvcHkgb2YgdGhlCisJCSAqIGlub2RlLiAqLworCisJCWZwcmludGYgKG91dF9maWxlLCAiICAgIEJsb2NrczogICIpOworCQlmaXJzdCA9IHByZXYgPSBzdGFydF9leHRlbnQgPSAtMTsKKworCQlmb3IgKGk9MDsgaTxFWFQyX05ESVJfQkxPQ0tTOyBpKyspIHsKKwkJCXRoaXMgPSBpbm9kZS0+aV9ibG9ja1tpXTsKKwkJCWlmIChzdGFydF9leHRlbnQgPj0gMCAgJiYgdGhpcyA9PSBwcmV2KzEpIHsKKwkJCQlwcmV2ID0gdGhpczsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJc2hvd19leHRlbnQob3V0X2ZpbGUsIHN0YXJ0X2V4dGVudCwgaSwgZmlyc3QpOworCQkJCXN0YXJ0X2V4dGVudCA9IGk7CisJCQkJZmlyc3QgPSBwcmV2ID0gdGhpczsKKwkJCX0KKwkJfQorCQlzaG93X2V4dGVudChvdXRfZmlsZSwgc3RhcnRfZXh0ZW50LCBpLCBmaXJzdCk7CisJCXNob3dfaW5kaXJlY3Qob3V0X2ZpbGUsICJJTkQiLCBpbm9kZS0+aV9ibG9ja1tpKytdKTsKKwkJc2hvd19pbmRpcmVjdChvdXRfZmlsZSwgIkRJTkQiLCBpbm9kZS0+aV9ibG9ja1tpKytdKTsKKwkJc2hvd19pbmRpcmVjdChvdXRfZmlsZSwgIlRJTkQiLCBpbm9kZS0+aV9ibG9ja1tpKytdKTsKKworCQlmcHJpbnRmKG91dF9maWxlLCAiXG4iKTsKKwl9CisKKwlpZiAoZHVtcF9jb250ZW50cykKKwkJZG9faGV4ZHVtcChvdXRfZmlsZSwgYnVmLCBibG9ja3NpemUpOworCit9CisKK3N0YXRpYyB2b2lkIGRvX2hleGR1bXAgKEZJTEUgKm91dF9maWxlLCBjaGFyICpidWYsIGludCBibG9ja3NpemUpCit7CisJaW50IGksajsKKwlpbnQgKmludHA7CisJY2hhciAqY2hhcnA7CisJdW5zaWduZWQgY2hhciBjOworCisJaW50cCA9IChpbnQgKikgYnVmOworCWNoYXJwID0gKGNoYXIgKikgYnVmOworCisJZm9yIChpPTA7IGk8YmxvY2tzaXplOyBpKz0xNikgeworCQlmcHJpbnRmKG91dF9maWxlLCAiICAgICUwNHg6ICAiLCBpKTsKKwkJZm9yIChqPTA7IGo8MTY7IGorPTQpCisJCQlmcHJpbnRmKG91dF9maWxlLCAiJTA4eCAiLCAqaW50cCsrKTsKKwkJZm9yIChqPTA7IGo8MTY7IGorKykgeworCQkJYyA9ICpjaGFycCsrOworCQkJaWYgKGMgPCAnICcgfHwgYyA+PSAxMjcpCisJCQkJYyA9ICcuJzsKKwkJCWZwcmludGYob3V0X2ZpbGUsICIlYyIsIGMpOworCQl9CisJCWZwcmludGYob3V0X2ZpbGUsICJcbiIpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZGVidWdmcy9scy5jIGIvZGVidWdmcy9scy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MDM2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJ1Z2ZzL2xzLmMKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBscy5jIC0tLSBsaXN0IGRpcmVjdG9yaWVzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGludCBvcHRpbmQ7CitleHRlcm4gY2hhciAqb3B0YXJnOworI2VuZGlmCisKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisKKy8qCisgKiBsaXN0IGRpcmVjdG9yeQorICovCisKKyNkZWZpbmUgTE9OR19PUFQJMHgwMDAxCisjZGVmaW5lIERFTEVURURfT1BUCTB4MDAwMgorI2RlZmluZSBQQVJTRV9PUFQJMHgwMDA0CisKK3N0cnVjdCBsaXN0X2Rpcl9zdHJ1Y3QgeworCUZJTEUJKmY7CisJaW50CWNvbDsKKwlpbnQJb3B0aW9uczsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICptb25zdHJbXSA9IHsgIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwKKwkJCQkiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMifTsKKworc3RhdGljIGludCBsaXN0X2Rpcl9wcm9jKGV4dDJfaW5vX3QgZGlyIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSBpbnQJZW50cnksCisJCQkgc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCQkgaW50CW9mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgaW50CWJsb2Nrc2l6ZSBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgY2hhcgkqYnVmIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSB2b2lkCSpwcml2YXRlKQoreworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCWV4dDJfaW5vX3QJCWlubzsKKwlzdHJ1Y3QgdG0JCSp0bV9wOworCXRpbWVfdAkJCW1vZHRpbWU7CisJY2hhcgkJCW5hbWVbRVhUMl9OQU1FX0xFTiArIDFdOworCWNoYXIJCQl0bXBbRVhUMl9OQU1FX0xFTiArIDE2XTsKKwljaGFyCQkJZGF0ZXN0cls4MF07CisJY2hhcgkJCWxiciwgcmJyOworCWludAkJCXRoaXNsZW47CisJc3RydWN0IGxpc3RfZGlyX3N0cnVjdCAqbHMgPSAoc3RydWN0IGxpc3RfZGlyX3N0cnVjdCAqKSBwcml2YXRlOworCisJdGhpc2xlbiA9IGRpcmVudC0+bmFtZV9sZW4gJiAweEZGOworCXN0cm5jcHkobmFtZSwgZGlyZW50LT5uYW1lLCB0aGlzbGVuKTsKKwluYW1lW3RoaXNsZW5dID0gJ1wwJzsKKwlpbm8gPSBkaXJlbnQtPmlub2RlOworCisJaWYgKGVudHJ5ID09IERJUkVOVF9ERUxFVEVEX0ZJTEUpIHsKKwkJbGJyID0gJzwnOworCQlyYnIgPSAnPic7CisJCWlubyA9IDA7CisJfSBlbHNlIHsKKwkJbGJyID0gcmJyID0gJyAnOworCX0KKwlpZiAobHMtPm9wdGlvbnMgJiBQQVJTRV9PUFQpIHsKKwkJaWYgKGlubykgeworCQkJaWYgKGRlYnVnZnNfcmVhZF9pbm9kZShpbm8sICZpbm9kZSwgbmFtZSkpCisJCQkJcmV0dXJuIDA7CisJCX0gZWxzZQorCQkJbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSk7CisJCWZwcmludGYobHMtPmYsIi8ldS8lMDZvLyVkLyVkLyVzLyIsaW5vLGlub2RlLmlfbW9kZSxpbm9kZS5pX3VpZCwgaW5vZGUuaV9naWQsbmFtZSk7CisJCWlmIChMSU5VWF9TX0lTRElSKGlub2RlLmlfbW9kZSkpCisJCQlmcHJpbnRmKGxzLT5mLCAiLyIpOworCQllbHNlCisJCQlmcHJpbnRmKGxzLT5mLCAiJWxsZC8iLCBFWFQyX0lfU0laRSgmaW5vZGUpKTsKKwkJZnByaW50Zihscy0+ZiwgIlxuIik7CisJfSBlbHNlIGlmIChscy0+b3B0aW9ucyAmIExPTkdfT1BUKSB7CisJCWlmIChpbm8pIHsKKwkJCWlmIChkZWJ1Z2ZzX3JlYWRfaW5vZGUoaW5vLCAmaW5vZGUsIG5hbWUpKQorCQkJCXJldHVybiAwOworCQkJbW9kdGltZSA9IGlub2RlLmlfbXRpbWU7CisJCQl0bV9wID0gbG9jYWx0aW1lKCZtb2R0aW1lKTsKKwkJCXNwcmludGYoZGF0ZXN0ciwgIiUyZC0lcy0lNGQgJTAyZDolMDJkIiwKKwkJCQl0bV9wLT50bV9tZGF5LCBtb25zdHJbdG1fcC0+dG1fbW9uXSwKKwkJCQkxOTAwICsgdG1fcC0+dG1feWVhciwgdG1fcC0+dG1faG91ciwKKwkJCQl0bV9wLT50bV9taW4pOworCQl9IGVsc2UgeworCQkJc3RyY3B5KGRhdGVzdHIsICIgICAgICAgICAgICAgICAgICIpOworCQkJbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSk7CisJCX0KKwkJZnByaW50Zihscy0+ZiwgIiVjJTZ1JWMgJTZvICglZCkgICU1ZCAgJTVkICAgIiwgbGJyLCBpbm8sIHJiciwKKwkJCWlub2RlLmlfbW9kZSwgZGlyZW50LT5uYW1lX2xlbiA+PiA4LAorCQkJaW5vZGVfdWlkKGlub2RlKSwgaW5vZGVfZ2lkKGlub2RlKSk7CisJCWlmIChMSU5VWF9TX0lTRElSKGlub2RlLmlfbW9kZSkpCisJCQlmcHJpbnRmKGxzLT5mLCAiJTVkIiwgaW5vZGUuaV9zaXplKTsKKwkJZWxzZQorCQkJZnByaW50Zihscy0+ZiwgIiU1bGx1IiwgRVhUMl9JX1NJWkUoJmlub2RlKSk7CisJCWZwcmludGYgKGxzLT5mLCAiICVzICVzXG4iLCBkYXRlc3RyLCBuYW1lKTsKKwl9IGVsc2UgeworCQlzcHJpbnRmKHRtcCwgIiVjJXUlYyAoJWQpICVzICAgIiwgbGJyLCBkaXJlbnQtPmlub2RlLCByYnIsCisJCQlkaXJlbnQtPnJlY19sZW4sIG5hbWUpOworCQl0aGlzbGVuID0gc3RybGVuKHRtcCk7CisKKwkJaWYgKGxzLT5jb2wgKyB0aGlzbGVuID4gODApIHsKKwkJCWZwcmludGYobHMtPmYsICJcbiIpOworCQkJbHMtPmNvbCA9IDA7CisJCX0KKwkJZnByaW50Zihscy0+ZiwgIiVzIiwgdG1wKTsKKwkJbHMtPmNvbCArPSB0aGlzbGVuOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBkb19saXN0X2RpcihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWV4dDJfaW5vX3QJaW5vZGU7CisJaW50CQlyZXR2YWw7CisJaW50CQljOworCWludAkJZmxhZ3M7CisJc3RydWN0IGxpc3RfZGlyX3N0cnVjdCBsczsKKworCWxzLm9wdGlvbnMgPSAwOworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlyZXNldF9nZXRvcHQoKTsKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJkbHAiKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdsJzoKKwkJCWxzLm9wdGlvbnMgfD0gTE9OR19PUFQ7CisJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQlscy5vcHRpb25zIHw9IERFTEVURURfT1BUOworCQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQkJbHMub3B0aW9ucyB8PSBQQVJTRV9PUFQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gcHJpbnRfdXNhZ2U7CisJCX0KKwl9CisKKwlpZiAoYXJnYyA+IG9wdGluZCsxKSB7CisJcHJpbnRfdXNhZ2U6CisJCWNvbV9lcnIoMCwgMCwgIlVzYWdlOiBscyBbLWxdIFstZF0gWy1wXSBmaWxlIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYXJnYyA9PSBvcHRpbmQpCisJCWlub2RlID0gY3dkOworCWVsc2UKKwkJaW5vZGUgPSBzdHJpbmdfdG9faW5vZGUoYXJndltvcHRpbmRdKTsKKwlpZiAoIWlub2RlKQorCQlyZXR1cm47CisKKwlscy5mID0gb3Blbl9wYWdlcigpOworCWxzLmNvbCA9IDA7CisJZmxhZ3MgPSBESVJFTlRfRkxBR19JTkNMVURFX0VNUFRZOworCWlmIChscy5vcHRpb25zICYgREVMRVRFRF9PUFQpCisJCWZsYWdzIHw9IERJUkVOVF9GTEFHX0lOQ0xVREVfUkVNT1ZFRDsKKworCXJldHZhbCA9IGV4dDJmc19kaXJfaXRlcmF0ZTIoY3VycmVudF9mcywgaW5vZGUsIGZsYWdzLAorCQkJCSAgICAwLCBsaXN0X2Rpcl9wcm9jLCAmbHMpOworCWZwcmludGYobHMuZiwgIlxuIik7CisJY2xvc2VfcGFnZXIobHMuZik7CisJaWYgKHJldHZhbCkKKwkJY29tX2Vycihhcmd2WzFdLCByZXR2YWwsIDApOworCisJcmV0dXJuOworfQorCisKZGlmZiAtLWdpdCBhL2RlYnVnZnMvbHNkZWwuYyBiL2RlYnVnZnMvbHNkZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWIyZDIwCi0tLSAvZGV2L251bGwKKysrIGIvZGVidWdmcy9sc2RlbC5jCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogbHNkZWwuYyAtLS0gcm91dGluZXMgdG8gdHJ5IHRvIGhlbHAgYSB1c2VyIHJlY292ZXIgYSBkZWxldGVkIGZpbGUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxCisgKiBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgImRlYnVnZnMuaCIKKworc3RydWN0IGRlbGV0ZWRfaW5mbyB7CisJZXh0Ml9pbm9fdAlpbm87CisJdW5zaWduZWQgc2hvcnQJbW9kZTsKKwlfX3UzMgkJdWlkOworCV9fdTY0CQlzaXplOworCXRpbWVfdAkJZHRpbWU7CisJZTJfYmxrY250X3QJbnVtX2Jsb2NrczsKKwllMl9ibGtjbnRfdAlmcmVlX2Jsb2NrczsKK307CisKK3N0cnVjdCBsc2RlbF9zdHJ1Y3QgeworCWV4dDJfaW5vX3QJCWlub2RlOworCWUyX2Jsa2NudF90CQludW1fYmxvY2tzOworCWUyX2Jsa2NudF90CQlmcmVlX2Jsb2NrczsKKwllMl9ibGtjbnRfdAkJYmFkX2Jsb2NrczsKK307CisKK3N0YXRpYyBpbnQgZGVsZXRlZF9pbmZvX2NvbXBhcmUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgZGVsZXRlZF9pbmZvICphcmcxLCAqYXJnMjsKKworCWFyZzEgPSAoY29uc3Qgc3RydWN0IGRlbGV0ZWRfaW5mbyAqKSBhOworCWFyZzIgPSAoY29uc3Qgc3RydWN0IGRlbGV0ZWRfaW5mbyAqKSBiOworCisJcmV0dXJuIGFyZzEtPmR0aW1lIC0gYXJnMi0+ZHRpbWU7Cit9CisKK3N0YXRpYyBpbnQgbHNkZWxfcHJvYyhleHQyX2ZpbHN5cyBmcywKKwkJICAgICAgYmxrNjRfdAkqYmxvY2tfbnIsCisJCSAgICAgIGUyX2Jsa2NudF90IGJsb2NrY250IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgYmxrNjRfdCByZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IGxzZGVsX3N0cnVjdCAqbHNkID0gKHN0cnVjdCBsc2RlbF9zdHJ1Y3QgKikgcHJpdmF0ZTsKKworCWxzZC0+bnVtX2Jsb2NrcysrOworCisJaWYgKCpibG9ja19uciA8IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrIHx8CisJICAgICpibG9ja19uciA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpIHsKKwkJbHNkLT5iYWRfYmxvY2tzKys7CisJCXJldHVybiBCTE9DS19BQk9SVDsKKwl9CisKKwlpZiAoIWV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoZnMtPmJsb2NrX21hcCwqYmxvY2tfbnIpKQorCQlsc2QtPmZyZWVfYmxvY2tzKys7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkb19sc2RlbChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGxzZGVsX3N0cnVjdCAJbHNkOworCXN0cnVjdCBkZWxldGVkX2luZm8JKmRlbGFycmF5OworCWludAkJCW51bV9kZWxhcnJheSwgbWF4X2RlbGFycmF5OworCWV4dDJfaW5vZGVfc2NhbgkJc2NhbiA9IDA7CisJZXh0Ml9pbm9fdAkJaW5vOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCWVycmNvZGVfdAkJcmV0dmFsOworCWNoYXIJCQkqYmxvY2tfYnVmOworCWludAkJCWk7CisgCWxvbmcJCQlzZWNzID0gMDsKKyAJY2hhcgkJCSp0bXA7CisJdGltZV90CQkJbm93OworCUZJTEUJCQkqb3V0OworCisJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMSwgMiwgImxpc3RfZGVsZXRlZF9pbm9kZXMiLAorCQkJCSJbc2Vjc10iLCAwKSkKKwkJcmV0dXJuOworCisJaWYgKGFyZ2MgPiAxKSB7CisJCXNlY3MgPSBzdHJ0b2woYXJndlsxXSwmdG1wLDApOworCQlpZiAoKnRtcCkgeworCQkJY29tX2Vycihhcmd2WzBdLCAwLCAiQmFkIHRpbWUgLSAlcyIsYXJndlsxXSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlub3cgPSBjdXJyZW50X2ZzLT5ub3cgPyBjdXJyZW50X2ZzLT5ub3cgOiB0aW1lKDApOworCW1heF9kZWxhcnJheSA9IDEwMDsKKwludW1fZGVsYXJyYXkgPSAwOworCWRlbGFycmF5ID0gbWFsbG9jKG1heF9kZWxhcnJheSAqIHNpemVvZihzdHJ1Y3QgZGVsZXRlZF9pbmZvKSk7CisJaWYgKCFkZWxhcnJheSkgeworCQljb21fZXJyKCJsc19kZWxldGVkX2lub2RlcyIsIEVOT01FTSwKKwkJCSJ3aGlsZSBhbGxvY2F0aW5nIGRlbGV0ZWQgaW5mb3JtYXRpb24gc3RvcmFnZSIpOworCQlleGl0KDEpOworCX0KKworCWJsb2NrX2J1ZiA9IG1hbGxvYyhjdXJyZW50X2ZzLT5ibG9ja3NpemUgKiAzKTsKKwlpZiAoIWJsb2NrX2J1ZikgeworCQljb21fZXJyKCJsc19kZWxldGVkX2lub2RlcyIsIEVOT01FTSwgIndoaWxlIGFsbG9jYXRpbmcgYmxvY2sgYnVmZmVyIik7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCXJldHZhbCA9IGV4dDJmc19vcGVuX2lub2RlX3NjYW4oY3VycmVudF9mcywgMCwgJnNjYW4pOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigibHNfZGVsZXRlZF9pbm9kZXMiLCByZXR2YWwsCisJCQkid2hpbGUgb3BlbmluZyBpbm9kZSBzY2FuIik7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCWRvIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9uZXh0X2lub2RlKHNjYW4sICZpbm8sICZpbm9kZSk7CisJfSB3aGlsZSAocmV0dmFsID09IEVYVDJfRVRfQkFEX0JMT0NLX0lOX0lOT0RFX1RBQkxFKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImxzX2RlbGV0ZWRfaW5vZGVzIiwgcmV0dmFsLAorCQkJIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iKTsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJd2hpbGUgKGlubykgeworCQlpZiAoKGlub2RlLmlfZHRpbWUgPT0gMCkgfHwKKwkJICAgIChzZWNzICYmICgodW5zaWduZWQpIGFicyhub3cgLSBzZWNzKSA+IGlub2RlLmlfZHRpbWUpKSkKKwkJCWdvdG8gbmV4dDsKKworCQlsc2QuaW5vZGUgPSBpbm87CisJCWxzZC5udW1fYmxvY2tzID0gMDsKKwkJbHNkLmZyZWVfYmxvY2tzID0gMDsKKwkJbHNkLmJhZF9ibG9ja3MgPSAwOworCisJCXJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhjdXJyZW50X2ZzLCBpbm8sCisJCQkJCSAgICAgICBCTE9DS19GTEFHX1JFQURfT05MWSwgYmxvY2tfYnVmLAorCQkJCQkgICAgICAgbHNkZWxfcHJvYywgJmxzZCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoImxzX2RlbGV0ZWRfaW5vZGVzIiwgcmV0dmFsLAorCQkJCSJ3aGlsZSBjYWxsaW5nIGV4dDJmc19ibG9ja19pdGVyYXRlMiIpOworCQkJZ290byBuZXh0OworCQl9CisJCWlmIChsc2QuZnJlZV9ibG9ja3MgJiYgIWxzZC5iYWRfYmxvY2tzKSB7CisJCQlpZiAobnVtX2RlbGFycmF5ID49IG1heF9kZWxhcnJheSkgeworCQkJCW1heF9kZWxhcnJheSArPSA1MDsKKwkJCQlkZWxhcnJheSA9IHJlYWxsb2MoZGVsYXJyYXksCisJCQkgICBtYXhfZGVsYXJyYXkgKiBzaXplb2Yoc3RydWN0IGRlbGV0ZWRfaW5mbykpOworCQkJCWlmICghZGVsYXJyYXkpIHsKKwkJCQkJY29tX2VycigibHNfZGVsZXRlZF9pbm9kZXMiLAorCQkJCQkJRU5PTUVNLAorCQkJCQkJIndoaWxlIHJlYWxsb2NhdGluZyBhcnJheSIpOworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCX0KKworCQkJZGVsYXJyYXlbbnVtX2RlbGFycmF5XS5pbm8gPSBpbm87CisJCQlkZWxhcnJheVtudW1fZGVsYXJyYXldLm1vZGUgPSBpbm9kZS5pX21vZGU7CisJCQlkZWxhcnJheVtudW1fZGVsYXJyYXldLnVpZCA9IGlub2RlX3VpZChpbm9kZSk7CisJCQlkZWxhcnJheVtudW1fZGVsYXJyYXldLnNpemUgPSBFWFQyX0lfU0laRSgmaW5vZGUpOworCQkJZGVsYXJyYXlbbnVtX2RlbGFycmF5XS5kdGltZSA9IGlub2RlLmlfZHRpbWU7CisJCQlkZWxhcnJheVtudW1fZGVsYXJyYXldLm51bV9ibG9ja3MgPSBsc2QubnVtX2Jsb2NrczsKKwkJCWRlbGFycmF5W251bV9kZWxhcnJheV0uZnJlZV9ibG9ja3MgPSBsc2QuZnJlZV9ibG9ja3M7CisJCQludW1fZGVsYXJyYXkrKzsKKwkJfQorCisJbmV4dDoKKwkJZG8geworCQkJcmV0dmFsID0gZXh0MmZzX2dldF9uZXh0X2lub2RlKHNjYW4sICZpbm8sICZpbm9kZSk7CisJCX0gd2hpbGUgKHJldHZhbCA9PSBFWFQyX0VUX0JBRF9CTE9DS19JTl9JTk9ERV9UQUJMRSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoImxzX2RlbGV0ZWRfaW5vZGVzIiwgcmV0dmFsLAorCQkJCSJ3aGlsZSBkb2luZyBpbm9kZSBzY2FuIik7CisJCQlnb3RvIGVycm9yX291dDsKKwkJfQorCX0KKworCW91dCA9IG9wZW5fcGFnZXIoKTsKKworCWZwcmludGYob3V0LCAiIElub2RlICBPd25lciAgTW9kZSAgICBTaXplICAgICAgQmxvY2tzICAgVGltZSBkZWxldGVkXG4iKTsKKworCXFzb3J0KGRlbGFycmF5LCBudW1fZGVsYXJyYXksIHNpemVvZihzdHJ1Y3QgZGVsZXRlZF9pbmZvKSwKKwkgICAgICBkZWxldGVkX2luZm9fY29tcGFyZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2RlbGFycmF5OyBpKyspIHsKKwkJZnByaW50ZihvdXQsICIlNnUgJTZkICU2byAlNmxsdSAlNmxsZC8lNmxsZCAlcyIsCisJCQlkZWxhcnJheVtpXS5pbm8sCisJCQlkZWxhcnJheVtpXS51aWQsIGRlbGFycmF5W2ldLm1vZGUsIGRlbGFycmF5W2ldLnNpemUsCisJCQlkZWxhcnJheVtpXS5mcmVlX2Jsb2NrcywgZGVsYXJyYXlbaV0ubnVtX2Jsb2NrcywKKwkJCXRpbWVfdG9fc3RyaW5nKGRlbGFycmF5W2ldLmR0aW1lKSk7CisJfQorCWZwcmludGYob3V0LCAiJWQgZGVsZXRlZCBpbm9kZXMgZm91bmQuXG4iLCBudW1fZGVsYXJyYXkpOworCWNsb3NlX3BhZ2VyKG91dCk7CisKK2Vycm9yX291dDoKKwlmcmVlKGJsb2NrX2J1Zik7CisJZnJlZShkZWxhcnJheSk7CisJaWYgKHNjYW4pCisJCWV4dDJmc19jbG9zZV9pbm9kZV9zY2FuKHNjYW4pOworCXJldHVybjsKK30KKworCisKZGlmZiAtLWdpdCBhL2RlYnVnZnMvbmNoZWNrLmMgYi9kZWJ1Z2ZzL25jaGVjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZjNhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJ1Z2ZzL25jaGVjay5jCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogbmNoZWNrLmMgLS0tIGdpdmVuIGEgbGlzdCBvZiBpbm9kZXMsIGdlbmVyYXRlIGEgbGlzdCBvZiBuYW1lcworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBpbnQgb3B0aW5kOworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyNlbmRpZgorCisjaW5jbHVkZSAiZGVidWdmcy5oIgorCitzdHJ1Y3QgaW5vZGVfd2Fsa19zdHJ1Y3QgeworCWV4dDJfaW5vX3QJCWRpcjsKKwlleHQyX2lub190CQkqaWFycmF5OworCWludAkJCWlub2Rlc19sZWZ0OworCWludAkJCW51bV9pbm9kZXM7CisJaW50CQkJcG9zaXRpb247CisJY2hhcgkJCSpwYXJlbnQ7CisJdW5zaWduZWQgaW50CQlnZXRfcGF0aG5hbWVfZmFpbGVkOjE7CisJdW5zaWduZWQgaW50CQljaGVja19kaXJlbnQ6MTsKK307CisKK3N0YXRpYyBpbnQgbmNoZWNrX3Byb2Moc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCSAgICAgICBpbnQJb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgIGludAlibG9ja3NpemUgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICAgY2hhcgkqYnVmIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgIHZvaWQJKnByaXZhdGUpCit7CisJc3RydWN0IGlub2RlX3dhbGtfc3RydWN0ICppdyA9IChzdHJ1Y3QgaW5vZGVfd2Fsa19zdHJ1Y3QgKikgcHJpdmF0ZTsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJZmlsZXR5cGUgPSBkaXJlbnQtPm5hbWVfbGVuID4+IDg7CisJaW50CQlpOworCisJaXctPnBvc2l0aW9uKys7CisJaWYgKGl3LT5wb3NpdGlvbiA8PSAyKQorCQlyZXR1cm4gMDsKKwlmb3IgKGk9MDsgaSA8IGl3LT5udW1faW5vZGVzOyBpKyspIHsKKwkJaWYgKGl3LT5pYXJyYXlbaV0gPT0gZGlyZW50LT5pbm9kZSkgeworCQkJaWYgKCFpdy0+cGFyZW50ICYmICFpdy0+Z2V0X3BhdGhuYW1lX2ZhaWxlZCkgeworCQkJCXJldHZhbCA9IGV4dDJmc19nZXRfcGF0aG5hbWUoY3VycmVudF9mcywKKwkJCQkJCQkgICAgIGl3LT5kaXIsCisJCQkJCQkJICAgICAwLCAmaXctPnBhcmVudCk7CisJCQkJaWYgKHJldHZhbCkgeworCQkJCQljb21fZXJyKCJuY2hlY2siLCByZXR2YWwsCisJCSJ3aGlsZSBjYWxsaW5nIGV4dDJmc19nZXRfcGF0aG5hbWUgZm9yIGlub2RlICMldSIsIGl3LT5kaXIpOworCQkJCQlpdy0+Z2V0X3BhdGhuYW1lX2ZhaWxlZCA9IDE7CisJCQkJfQorCQkJfQorCQkJaWYgKGl3LT5wYXJlbnQpCisJCQkJcHJpbnRmKCIldVx0JXMvJS4qcyIsIGl3LT5pYXJyYXlbaV0sCisJCQkJICAgICAgIGl3LT5wYXJlbnQsCisJCQkJICAgICAgIChkaXJlbnQtPm5hbWVfbGVuICYgMHhGRiksIGRpcmVudC0+bmFtZSk7CisJCQllbHNlCisJCQkJcHJpbnRmKCIldVx0PCV1Pi8lLipzIiwgaXctPmlhcnJheVtpXSwKKwkJCQkgICAgICAgaXctPmRpciwKKwkJCQkgICAgICAgKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSwgZGlyZW50LT5uYW1lKTsKKwkJCWlmIChpdy0+Y2hlY2tfZGlyZW50ICYmIGZpbGV0eXBlKSB7CisJCQkJaWYgKCFkZWJ1Z2ZzX3JlYWRfaW5vZGUoZGlyZW50LT5pbm9kZSwgJmlub2RlLAorCQkJCQkJCSJuY2hlY2siKSAmJgorCQkJCSAgICBmaWxldHlwZSAhPSBleHQyX2ZpbGVfdHlwZShpbm9kZS5pX21vZGUpKSB7CisJCQkJCXByaW50ZigiICA8LS0tIEJBRCBGSUxFVFlQRSIpOworCQkJCX0KKwkJCX0KKwkJCXB1dGMoJ1xuJywgc3Rkb3V0KTsKKwkJfQorCX0KKwlpZiAoIWl3LT5pbm9kZXNfbGVmdCkKKwkJcmV0dXJuIERJUkVOVF9BQk9SVDsKKworCXJldHVybiAwOworfQorCit2b2lkIGRvX25jaGVjayhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGlub2RlX3dhbGtfc3RydWN0IGl3OworCWludAkJCWMsIGk7CisJZXh0Ml9pbm9kZV9zY2FuCQlzY2FuID0gMDsKKwlleHQyX2lub190CQlpbm87CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJZXJyY29kZV90CQlyZXR2YWw7CisJY2hhcgkJCSp0bXA7CisKKwlpdy5jaGVja19kaXJlbnQgPSAwOworCisJcmVzZXRfZ2V0b3B0KCk7CisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiYyIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2MnOgorCQkJaXcuY2hlY2tfZGlyZW50ID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBwcmludF91c2FnZTsKKwkJfQorCX0KKwlhcmdjIC09IG9wdGluZDsKKwlhcmd2ICs9IG9wdGluZDsKKworCWlmIChhcmdjIDwgMSkgeworCXByaW50X3VzYWdlOgorCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogbmNoZWNrIFstY10gPGlub2RlIG51bWJlcj4gLi4uIik7CisJCXJldHVybjsKKwl9CisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCWl3LmlhcnJheSA9IG1hbGxvYyhzaXplb2YoZXh0Ml9pbm9fdCkgKiBhcmdjKTsKKwlpZiAoIWl3LmlhcnJheSkgeworCQljb21fZXJyKCJuY2hlY2siLCBFTk9NRU0sCisJCQkid2hpbGUgYWxsb2NhdGluZyBpbm9kZSBudW1iZXIgYXJyYXkiKTsKKwkJcmV0dXJuOworCX0KKwltZW1zZXQoaXcuaWFycmF5LCAwLCBzaXplb2YoZXh0Ml9pbm9fdCkgKiBhcmdjKTsKKworCWZvciAoaT0wOyBpIDwgYXJnYzsgaSsrKSB7CisJCWl3LmlhcnJheVtpXSA9IHN0cnRvbChhcmd2W2ldLCAmdG1wLCAwKTsKKwkJaWYgKCp0bXApIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgMCwgIkJhZCBpbm9kZSAtICVzIiwgYXJndltpXSk7CisJCQlnb3RvIGVycm9yX291dDsKKwkJfQorCX0KKworCWl3Lm51bV9pbm9kZXMgPSBpdy5pbm9kZXNfbGVmdCA9IGFyZ2M7CisKKwlyZXR2YWwgPSBleHQyZnNfb3Blbl9pbm9kZV9zY2FuKGN1cnJlbnRfZnMsIDAsICZzY2FuKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoIm5jaGVjayIsIHJldHZhbCwgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIpOworCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwlkbyB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbmV4dF9pbm9kZShzY2FuLCAmaW5vLCAmaW5vZGUpOworCX0gd2hpbGUgKHJldHZhbCA9PSBFWFQyX0VUX0JBRF9CTE9DS19JTl9JTk9ERV9UQUJMRSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJuY2hlY2siLCByZXR2YWwsICJ3aGlsZSBzdGFydGluZyBpbm9kZSBzY2FuIik7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCXByaW50ZigiSW5vZGVcdFBhdGhuYW1lXG4iKTsKKwl3aGlsZSAoaW5vKSB7CisJCWlmICghaW5vZGUuaV9saW5rc19jb3VudCkKKwkJCWdvdG8gbmV4dDsKKwkJLyoKKwkJICogVG8gaGFuZGxlIGZpbGVzeXN0ZW1zIHRvdWNoZWQgYnkgMC4zYyBleHRmczsgY2FuIGJlCisJCSAqIHJlbW92ZWQgbGF0ZXIuCisJCSAqLworCQlpZiAoaW5vZGUuaV9kdGltZSkKKwkJCWdvdG8gbmV4dDsKKwkJLyogSWdub3JlIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBkaXJlY3RvcnkgKi8KKwkJaWYgKCFMSU5VWF9TX0lTRElSKGlub2RlLmlfbW9kZSkpCisJCQlnb3RvIG5leHQ7CisKKwkJaXcucG9zaXRpb24gPSAwOworCQlpdy5wYXJlbnQgPSAwOworCQlpdy5kaXIgPSBpbm87CisJCWl3LmdldF9wYXRobmFtZV9mYWlsZWQgPSAwOworCisJCXJldHZhbCA9IGV4dDJmc19kaXJfaXRlcmF0ZShjdXJyZW50X2ZzLCBpbm8sIDAsIDAsCisJCQkJCSAgICBuY2hlY2tfcHJvYywgJml3KTsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZpdy5wYXJlbnQpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKCJuY2hlY2siLCByZXR2YWwsCisJCQkJIndoaWxlIGNhbGxpbmcgZXh0Ml9kaXJfaXRlcmF0ZSIpOworCQkJZ290byBuZXh0OworCQl9CisKKwkJaWYgKGl3Lmlub2Rlc19sZWZ0ID09IDApCisJCQlicmVhazsKKworCW5leHQ6CisJCWRvIHsKKwkJCXJldHZhbCA9IGV4dDJmc19nZXRfbmV4dF9pbm9kZShzY2FuLCAmaW5vLCAmaW5vZGUpOworCQl9IHdoaWxlIChyZXR2YWwgPT0gRVhUMl9FVF9CQURfQkxPQ0tfSU5fSU5PREVfVEFCTEUpOworCisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoIm5jaGVjayIsIHJldHZhbCwKKwkJCQkid2hpbGUgZG9pbmcgaW5vZGUgc2NhbiIpOworCQkJZ290byBlcnJvcl9vdXQ7CisJCX0KKwl9CisKK2Vycm9yX291dDoKKwlmcmVlKGl3LmlhcnJheSk7CisJaWYgKHNjYW4pCisJCWV4dDJmc19jbG9zZV9pbm9kZV9zY2FuKHNjYW4pOworCXJldHVybjsKK30KKworCisKZGlmZiAtLWdpdCBhL2RlYnVnZnMvcXVvdGEuYyBiL2RlYnVnZnMvcXVvdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjEyZjY0Ci0tLSAvZGV2L251bGwKKysrIGIvZGVidWdmcy9xdW90YS5jCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogcXVvdGEuYyAtLS0gZGVidWdmcyBxdW90YSBjb21tYW5kcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBpbnQgb3B0aW5kOworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyNlbmRpZgorCisjaW5jbHVkZSAiZGVidWdmcy5oIgorCitjb25zdCBjaGFyICpxdW90YV90eXBlW10gPSB7ICJ1c2VyIiwgImdyb3VwIiwgTlVMTCB9OworCitzdGF0aWMgaW50IGxvYWRfcXVvdGFfY3R4KGNoYXIgKnByb2duYW1lKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAoY2hlY2tfZnNfb3Blbihwcm9nbmFtZSkpCisJCXJldHVybiAxOworCisJaWYgKCFFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShjdXJyZW50X2ZzLT5zdXBlciwKKwkJCQkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9RVU9UQSkpIHsKKwkJY29tX2Vycihwcm9nbmFtZSwgMCwgInF1b3RhIGZlYXR1cmUgbm90IGVuYWJsZWQiKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGN1cnJlbnRfcWN0eCkKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBxdW90YV9pbml0X2NvbnRleHQoJmN1cnJlbnRfcWN0eCwgY3VycmVudF9mcywgLTEpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihjdXJyZW50X2ZzLT5kZXZpY2VfbmFtZSwgcmV0dmFsLAorCQkJIndoaWxlIHRyeWluZyB0byBsb2FkIHF1b3RhIGluZm9ybWF0aW9uIik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9xdW90YV90eXBlKGNvbnN0IGNoYXIgKmNtZG5hbWUsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWNoYXIJCSp0OworCWludAkJZmxhZ3MgPSAwOworCWludAkJaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhRVU9UQVM7IGkrKykgeworCQlpZiAoc3RyY2FzZWNtcChzdHIsIHF1b3RhX3R5cGVbaV0pID09IDApCisJCQlicmVhazsKKwl9CisJaWYgKGkgPj0gTUFYUVVPVEFTKSB7CisJCWkgPSBzdHJ0b2woc3RyLCAmdCwgMCk7CisJCWlmICgqdCkKKwkJCWkgPSAtMTsKKwl9CisJaWYgKGkgPCAwIHx8IGkgPj0gTUFYUVVPVEFTKSB7CisJCWNvbV9lcnIoMCwgMCwgIkludmFsaWQgcXVvdGEgdHlwZTogJXMiLCBzdHIpOworCQlwcmludGYoIlZhbGlkIHF1b3RhIHR5cGVzIGFyZTogIik7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhRVU9UQVM7IGkrKykKKwkJCXByaW50ZigiJXMgIiwgcXVvdGFfdHlwZVtpXSk7CisJCXByaW50ZigiXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChjdXJyZW50X2ZzLT5mbGFncyAmIEVYVDJfRkxBR19SVykKKwkJZmxhZ3MgfD0gRVhUMl9GSUxFX1dSSVRFOworCisJcmV0dmFsID0gcXVvdGFfZmlsZV9vcGVuKGN1cnJlbnRfcWN0eCwgTlVMTCwgMCwgaSwgLTEsIGZsYWdzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoY21kbmFtZSwgcmV0dmFsLAorCQkJIndoaWxlIG9wZW5pbmcgcXVvdGEgaW5vZGUgKHR5cGUgJWQpIiwgaSk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIGk7Cit9CisKKworc3RhdGljIGludCBsaXN0X3F1b3RhX2NhbGxiYWNrKHN0cnVjdCBkcXVvdCAqZHEsIHZvaWQgKmNiX2RhdGEpCit7CisJcHJpbnRmKCIlOHUgICAlOGxsZCAlOGxsZCAlOGxsZCAgICAlOGxsZCAlOGxsZCAlOGxsZFxuIiwKKwkgICAgICAgZHEtPmRxX2lkLCAobG9uZyBsb25nKWRxLT5kcV9kcWIuZHFiX2N1cnNwYWNlLAorCSAgICAgICAobG9uZyBsb25nKWRxLT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQsCisJICAgICAgIChsb25nIGxvbmcpZHEtPmRxX2RxYi5kcWJfYmhhcmRsaW1pdCwKKwkgICAgICAgKGxvbmcgbG9uZylkcS0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMsCisJICAgICAgIChsb25nIGxvbmcpZHEtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCwKKwkgICAgICAgKGxvbmcgbG9uZylkcS0+ZHFfZHFiLmRxYl9paGFyZGxpbWl0KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkb19saXN0X3F1b3RhKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlpbnQJCXR5cGU7CisJc3RydWN0IHF1b3RhX2hhbmRsZSAqcWg7CisKKwlpZiAobG9hZF9xdW90YV9jdHgoYXJndlswXSkpCisJCXJldHVybjsKKworCWlmIChhcmdjICE9IDIpIHsKKwkJY29tX2VycigwLCAwLCAiVXNhZ2U6IGxpc3RfcXVvdGEgPHF1b3RhX3R5cGU+XG4iKTsKKwkJcmV0dXJuOworCX0KKworCXR5cGUgPSBwYXJzZV9xdW90YV90eXBlKGFyZ3ZbMF0sIGFyZ3ZbMV0pOworCWlmICh0eXBlIDwgMCkKKwkJcmV0dXJuOworCisJcHJpbnRmKCIlOHMgICAlOHMgJThzICU4cyAgICAlOHMgJThzICU4c1xuIiwKKwkgICAgICAgKHR5cGUgPT0gMCkgPyAidXNlciBpZCIgOiAiZ3JvdXAgaWQiLAorCSAgICAgICAiYmxvY2tzIiwgInF1b3RhIiwgImxpbWl0IiwgImlub2RlcyIsICJxdW90YSIsICJsaW1pdCIpOworCXFoID0gY3VycmVudF9xY3R4LT5xdW90YV9maWxlW3R5cGVdOworCXJldHZhbCA9IHFoLT5xaF9vcHMtPnNjYW5fZHF1b3RzKHFoLCBsaXN0X3F1b3RhX2NhbGxiYWNrLCBOVUxMKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgc2Nhbm5pbmcgZHF1b3RzIik7CisJCXJldHVybjsKKwl9Cit9CisKK3ZvaWQgZG9fZ2V0X3F1b3RhKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50CQllcnIsIHR5cGU7CisJc3RydWN0IHF1b3RhX2hhbmRsZSAqcWg7CisJc3RydWN0IGRxdW90CSpkcTsKKwlxaWRfdAkJaWQ7CisKKwlpZiAobG9hZF9xdW90YV9jdHgoYXJndlswXSkpCisJCXJldHVybjsKKworCWlmIChhcmdjICE9IDMpIHsKKwkJY29tX2VycigwLCAwLCAiVXNhZ2U6IGdldF9xdW90YSA8cXVvdGFfdHlwZT4gPGlkPlxuIik7CisJCXJldHVybjsKKwl9CisKKwl0eXBlID0gcGFyc2VfcXVvdGFfdHlwZShhcmd2WzBdLCBhcmd2WzFdKTsKKwlpZiAodHlwZSA8IDApCisJCXJldHVybjsKKworCWlkID0gcGFyc2VfdWxvbmcoYXJndlsyXSwgYXJndlswXSwgImlkIiwgJmVycik7CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJcHJpbnRmKCIlOHMgICAlOHMgJThzICU4cyAgICAlOHMgJThzICU4c1xuIiwKKwkgICAgICAgKHR5cGUgPT0gMCkgPyAidXNlciBpZCIgOiAiZ3JvdXAgaWQiLAorCSAgICAgICAiYmxvY2tzIiwgInF1b3RhIiwgImxpbWl0IiwgImlub2RlcyIsICJxdW90YSIsICJsaW1pdCIpOworCisJcWggPSBjdXJyZW50X3FjdHgtPnF1b3RhX2ZpbGVbdHlwZV07CisKKwlkcSA9IHFoLT5xaF9vcHMtPnJlYWRfZHF1b3QocWgsIGlkKTsKKwlpZiAoZHEpIHsKKwkJbGlzdF9xdW90YV9jYWxsYmFjayhkcSwgTlVMTCk7CisJCWV4dDJmc19mcmVlX21lbSgmZHEpOworCX0gZWxzZSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgImNvdWxkbid0IHJlYWQgcXVvdGEgcmVjb3JkIik7CisJfQorfQpkaWZmIC0tZ2l0IGEvZGVidWdmcy9yb19kZWJ1Z19jbWRzLmN0IGIvZGVidWdmcy9yb19kZWJ1Z19jbWRzLmN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNmFkZTYKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJ1Z2ZzL3JvX2RlYnVnX2NtZHMuY3QKQEAgLTAsMCArMSw5OSBAQAorIworIyBSZXN0cmljdGVkIHNldCBvZiBkZWJ1Z2ZzIGNvbW1hbmRzCisjCisjIENvcHlyaWdodCAoQykgMTk5MyBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorIworY29tbWFuZF90YWJsZSBkZWJ1Z19jbWRzOworCityZXF1ZXN0IGRvX3Nob3dfZGVidWdmc19wYXJhbXMsICJTaG93IGRlYnVnZnMgcGFyYW1ldGVycyIsCisJc2hvd19kZWJ1Z2ZzX3BhcmFtcywgcGFyYW1zOworCityZXF1ZXN0IGRvX29wZW5fZmlsZXN5cywgIk9wZW4gYSBmaWxlc3lzdGVtIiwKKwlvcGVuX2ZpbGVzeXMsIG9wZW47CisKK3JlcXVlc3QgZG9fY2xvc2VfZmlsZXN5cywgIkNsb3NlIHRoZSBmaWxlc3lzdGVtIiwKKwljbG9zZV9maWxlc3lzLCBjbG9zZTsKKworcmVxdWVzdCBkb19mcmVlZnJhZywgIlJlcG9ydCBmcmVlIHNwYWNlIGZyYWdtZW50YXRpb24iLAorCWZyZWVmcmFnLCBlMmZyZWVmcmFnOworCityZXF1ZXN0IGRvX3Nob3dfc3VwZXJfc3RhdHMsICJTaG93IHN1cGVyYmxvY2sgc3RhdGlzdGljcyIsCisJc2hvd19zdXBlcl9zdGF0cywgc3RhdHM7CisKK3JlcXVlc3QgZG9fbmNoZWNrLCAiRG8gaW5vZGUtPm5hbWUgdHJhbnNsYXRpb24iLAorCW5jaGVjazsKKworcmVxdWVzdCBkb19pY2hlY2ssICJEbyBibG9jay0+aW5vZGUgdHJhbnNsYXRpb24iLAorCWljaGVjazsKKworcmVxdWVzdCBkb19jaHJvb3QsICJDaGFuZ2Ugcm9vdCBkaXJlY3RvcnkiLAorCWNoYW5nZV9yb290X2RpcmVjdG9yeSwgY2hyb290OworCityZXF1ZXN0IGRvX2NoYW5nZV93b3JraW5nX2RpciwgIkNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeSIsCisJY2hhbmdlX3dvcmtpbmdfZGlyZWN0b3J5LCBjZDsKKworcmVxdWVzdCBkb19saXN0X2RpciwgIkxpc3QgZGlyZWN0b3J5IiwKKwlsaXN0X2RpcmVjdG9yeSwgbHM7CisKK3JlcXVlc3QgZG9fc3RhdCwgIlNob3cgaW5vZGUgaW5mb3JtYXRpb24gIiwKKwlzaG93X2lub2RlX2luZm8sIHN0YXQ7CisKK3JlcXVlc3QgZG9fZHVtcF9leHRlbnRzLCAiRHVtcCBleHRlbnRzIGluZm9ybWF0aW9uICIsCisJZHVtcF9leHRlbnRzLCBleHRlbnRzLCBleDsKKworcmVxdWVzdCBkb19ibG9ja3MsICJEdW1wIGJsb2NrcyB1c2VkIGJ5IGFuIGlub2RlICIsCisJYmxvY2tzOworCityZXF1ZXN0IGRvX2ZpbGVmcmFnLCAiUmVwb3J0IGZyYWdtZW50YXRpb24gaW5mb3JtYXRpb24gZm9yIGFuIGlub2RlIiwKKwlmaWxlZnJhZzsKKworcmVxdWVzdCBkb190ZXN0aSwgIlRlc3QgYW4gaW5vZGUncyBpbi11c2UgZmxhZyIsCisJdGVzdGk7CisKK3JlcXVlc3QgZG9fZmluZF9mcmVlX2Jsb2NrLCAiRmluZCBmcmVlIGJsb2NrKHMpIiwKKwlmaW5kX2ZyZWVfYmxvY2ssIGZmYjsKKworcmVxdWVzdCBkb19maW5kX2ZyZWVfaW5vZGUsICJGaW5kIGZyZWUgaW5vZGUocykiLAorCWZpbmRfZnJlZV9pbm9kZSwgZmZpOworCityZXF1ZXN0CWRvX3ByaW50X3dvcmtpbmdfZGlyZWN0b3J5LCAiUHJpbnQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIsCisJcHJpbnRfd29ya2luZ19kaXJlY3RvcnksIHB3ZDsgCisKK3JlcXVlc3QgZG9fbHNkZWwsICJMaXN0IGRlbGV0ZWQgaW5vZGVzIiwKKwlsaXN0X2RlbGV0ZWRfaW5vZGVzLCBsc2RlbDsKKworcmVxdWVzdCBkb19sb2dkdW1wLCAiRHVtcCB0aGUgY29udGVudHMgb2YgdGhlIGpvdXJuYWwiLAorCWxvZ2R1bXA7CisKK3JlcXVlc3QgZG9faHRyZWVfZHVtcCwgIkR1bXAgYSBoYXNoLWluZGV4ZWQgZGlyZWN0b3J5IiwKKwlodHJlZV9kdW1wLCBodHJlZTsKKworcmVxdWVzdCBkb19keF9oYXNoLCAiQ2FsY3VsYXRlIHRoZSBkaXJlY3RvcnkgaGFzaCBvZiBhIGZpbGVuYW1lIiwKKwlkeF9oYXNoLCBoYXNoOworCityZXF1ZXN0IGRvX2RpcnNlYXJjaCwgIlNlYXJjaCBhIGRpcmVjdG9yeSBmb3IgYSBwYXJ0aWN1bGFyIGZpbGVuYW1lIiwKKwlkaXJzZWFyY2g7CisKK3JlcXVlc3QgZG9fYm1hcCwgIkNhbGN1bGF0ZSB0aGUgbG9naWNhbC0+cGh5c2ljYWwgYmxvY2sgbWFwcGluZyBmb3IgYW4gaW5vZGUiLAorCWJtYXA7CisKK3JlcXVlc3QgZG9faW1hcCwgIkNhbGN1bGF0ZSB0aGUgbG9jYXRpb24gb2YgYW4gaW5vZGUiLAorCWltYXA7CisKK3JlcXVlc3QgZG9fc3VwcG9ydGVkX2ZlYXR1cmVzLCAiUHJpbnQgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBlMmZzcHJvZ3MiLAorCXN1cHBvcnRlZF9mZWF0dXJlczsKKworcmVxdWVzdCBkb19kdW1wX21tcCwgIkR1bXAgTU1QIGluZm9ybWF0aW9uIiwKKwlkdW1wX21tcDsKKworcmVxdWVzdCBkb19leHRlbnRfb3BlbiwgIk9wZW4gaW5vZGUgZm9yIGV4dGVudCBtYW5pcHVsYXRpb24iLAorCWV4dGVudF9vcGVuLCBlbzsKKworcmVxdWVzdCBkb19saXN0X3F1b3RhLCAiTGlzdCBxdW90YSIsCisJbG9zdF9xdW90YSwgbHE7CisKK3JlcXVlc3QgZG9fZ2V0X3F1b3RhLCAiR2V0IHF1b3RhIiwKKwlnZXRfcXVvdGEsIGdxOworCitlbmQ7CmRpZmYgLS1naXQgYS9kZWJ1Z2ZzL3NldF9maWVsZHMuYyBiL2RlYnVnZnMvc2V0X2ZpZWxkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMDRiMmIKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJ1Z2ZzL3NldF9maWVsZHMuYwpAQCAtMCwwICsxLDg0NCBAQAorLyoKKyAqIHNldF9maWVsZHMuYyAtLS0gc2V0IGEgc3VwZXJibG9jayB2YWx1ZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2RlZmluZSBfWE9QRU5fU09VUkNFIDYwMCAvKiBmb3IgaW5jbHVzaW9uIG9mIHN0cnB0aW1lKCkgYW5kIHN0cnRvdWxsICovCisKKyNpZmRlZiBIQVZFX1NUUlRPVUxMCisjZGVmaW5lIFNUUlRPVUxMIHN0cnRvdWxsCisjZWxzZQorI2RlZmluZSBTVFJUT1VMTCBzdHJ0b3VsCisjZW5kaWYKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HU19ICisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1dGltZS5oPgorCisjaW5jbHVkZSAiZGVidWdmcy5oIgorI2luY2x1ZGUgInV1aWQvdXVpZC5oIgorI2luY2x1ZGUgImUycC9lMnAuaCIKKworc3RhdGljIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHNldF9zYjsKK3N0YXRpYyBzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSBzZXRfaW5vZGU7CitzdGF0aWMgc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyBzZXRfZ2Q7CitzdGF0aWMgc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyBzZXRfZ2Q0Oworc3RhdGljIHN0cnVjdCBtbXBfc3RydWN0IHNldF9tbXA7CitzdGF0aWMgZGdycF90IHNldF9iZzsKK3N0YXRpYyBleHQyX2lub190IHNldF9pbm87CitzdGF0aWMgaW50IGFycmF5X2lkeDsKKworI2RlZmluZSBGTEFHX0FSUkFZCTB4MDAwMQorCitzdHJ1Y3QgZmllbGRfc2V0X2luZm8geworCWNvbnN0IGNoYXIJKm5hbWU7CisJdm9pZAkqcHRyOworCXZvaWQJKnB0cjI7CisJdW5zaWduZWQgaW50CXNpemU7CisJZXJyY29kZV90ICgqZnVuYykoc3RydWN0IGZpZWxkX3NldF9pbmZvICppbmZvLCBjaGFyICpmaWVsZCwgY2hhciAqYXJnKTsKKwlpbnQgZmxhZ3M7CisJaW50IG1heF9pZHg7Cit9OworCitzdGF0aWMgZXJyY29kZV90IHBhcnNlX3VpbnQoc3RydWN0IGZpZWxkX3NldF9pbmZvICppbmZvLCBjaGFyICpmaWVsZCwgY2hhciAqYXJnKTsKK3N0YXRpYyBlcnJjb2RlX3QgcGFyc2VfaW50KHN0cnVjdCBmaWVsZF9zZXRfaW5mbyAqaW5mbywgY2hhciAqZmllbGQsIGNoYXIgKmFyZyk7CitzdGF0aWMgZXJyY29kZV90IHBhcnNlX3N0cmluZyhzdHJ1Y3QgZmllbGRfc2V0X2luZm8gKmluZm8sIGNoYXIgKmZpZWxkLCBjaGFyICphcmcpOworc3RhdGljIGVycmNvZGVfdCBwYXJzZV91dWlkKHN0cnVjdCBmaWVsZF9zZXRfaW5mbyAqaW5mbywgY2hhciAqZmllbGQsIGNoYXIgKmFyZyk7CitzdGF0aWMgZXJyY29kZV90IHBhcnNlX2hhc2hhbGcoc3RydWN0IGZpZWxkX3NldF9pbmZvICppbmZvLCBjaGFyICpmaWVsZCwgY2hhciAqYXJnKTsKK3N0YXRpYyBlcnJjb2RlX3QgcGFyc2VfdGltZShzdHJ1Y3QgZmllbGRfc2V0X2luZm8gKmluZm8sIGNoYXIgKmZpZWxkLCBjaGFyICphcmcpOworc3RhdGljIGVycmNvZGVfdCBwYXJzZV9ibWFwKHN0cnVjdCBmaWVsZF9zZXRfaW5mbyAqaW5mbywgY2hhciAqZmllbGQsIGNoYXIgKmFyZyk7CitzdGF0aWMgZXJyY29kZV90IHBhcnNlX2dkX2NzdW0oc3RydWN0IGZpZWxkX3NldF9pbmZvICppbmZvLCBjaGFyICpmaWVsZCwgY2hhciAqYXJnKTsKK3N0YXRpYyBlcnJjb2RlX3QgcGFyc2VfbW1wX2NsZWFyKHN0cnVjdCBmaWVsZF9zZXRfaW5mbyAqaW5mbywgY2hhciAqZmllbGQsCisJCQkJIGNoYXIgKmFyZyk7CisKK3N0YXRpYyBzdHJ1Y3QgZmllbGRfc2V0X2luZm8gc3VwZXJfZmllbGRzW10gPSB7CisJeyAiaW5vZGVzX2NvdW50IiwgJnNldF9zYi5zX2lub2Rlc19jb3VudCwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImJsb2Nrc19jb3VudCIsICZzZXRfc2Iuc19ibG9ja3NfY291bnQsICZzZXRfc2Iuc19ibG9ja3NfY291bnRfaGksCisJCTQsIHBhcnNlX3VpbnQgfSwKKwl7ICJyX2Jsb2Nrc19jb3VudCIsICZzZXRfc2Iuc19yX2Jsb2Nrc19jb3VudCwKKwkJJnNldF9zYi5zX3JfYmxvY2tzX2NvdW50X2hpLCA0LCBwYXJzZV91aW50IH0sCisJeyAiZnJlZV9ibG9ja3NfY291bnQiLCAmc2V0X3NiLnNfZnJlZV9ibG9ja3NfY291bnQsCisJCSZzZXRfc2Iuc19mcmVlX2Jsb2Nrc19oaSwgNCwgcGFyc2VfdWludCB9LAorCXsgImZyZWVfaW5vZGVzX2NvdW50IiwgJnNldF9zYi5zX2ZyZWVfaW5vZGVzX2NvdW50LCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiZmlyc3RfZGF0YV9ibG9jayIsICZzZXRfc2Iuc19maXJzdF9kYXRhX2Jsb2NrLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAibG9nX2Jsb2NrX3NpemUiLCAmc2V0X3NiLnNfbG9nX2Jsb2NrX3NpemUsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJsb2dfY2x1c3Rlcl9zaXplIiwgJnNldF9zYi5zX2xvZ19jbHVzdGVyX3NpemUsIE5VTEwsIDQsIHBhcnNlX2ludCB9LAorCXsgImJsb2Nrc19wZXJfZ3JvdXAiLCAmc2V0X3NiLnNfYmxvY2tzX3Blcl9ncm91cCwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImNsdXN0ZXJzX3Blcl9ncm91cCIsICZzZXRfc2Iuc19jbHVzdGVyc19wZXJfZ3JvdXAsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJpbm9kZXNfcGVyX2dyb3VwIiwgJnNldF9zYi5zX2lub2Rlc19wZXJfZ3JvdXAsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJtdGltZSIsICZzZXRfc2Iuc19tdGltZSwgTlVMTCwgNCwgcGFyc2VfdGltZSB9LAorCXsgInd0aW1lIiwgJnNldF9zYi5zX3d0aW1lLCBOVUxMLCA0LCBwYXJzZV90aW1lIH0sCisJeyAibW50X2NvdW50IiwgJnNldF9zYi5zX21udF9jb3VudCwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgIm1heF9tbnRfY291bnQiLCAmc2V0X3NiLnNfbWF4X21udF9jb3VudCwgTlVMTCwgMiwgcGFyc2VfaW50IH0sCisJLyogc19tYWdpYyAqLworCXsgInN0YXRlIiwgJnNldF9zYi5zX3N0YXRlLCBOVUxMLCAyLCBwYXJzZV91aW50IH0sCisJeyAiZXJyb3JzIiwgJnNldF9zYi5zX2Vycm9ycywgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgIm1pbm9yX3Jldl9sZXZlbCIsICZzZXRfc2Iuc19taW5vcl9yZXZfbGV2ZWwsIE5VTEwsIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJsYXN0Y2hlY2siLCAmc2V0X3NiLnNfbGFzdGNoZWNrLCBOVUxMLCA0LCBwYXJzZV90aW1lIH0sCisJeyAiY2hlY2tpbnRlcnZhbCIsICZzZXRfc2Iuc19jaGVja2ludGVydmFsLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiY3JlYXRvcl9vcyIsICZzZXRfc2Iuc19jcmVhdG9yX29zLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAicmV2X2xldmVsIiwgJnNldF9zYi5zX3Jldl9sZXZlbCwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImRlZl9yZXN1aWQiLCAmc2V0X3NiLnNfZGVmX3Jlc3VpZCwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgImRlZl9yZXNnaWQiLCAmc2V0X3NiLnNfZGVmX3Jlc2dpZCwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgImZpcnN0X2lubyIsICZzZXRfc2Iuc19maXJzdF9pbm8sIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJpbm9kZV9zaXplIiwgJnNldF9zYi5zX2lub2RlX3NpemUsIE5VTEwsIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJibG9ja19ncm91cF9uciIsICZzZXRfc2Iuc19ibG9ja19ncm91cF9uciwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgImZlYXR1cmVfY29tcGF0IiwgJnNldF9zYi5zX2ZlYXR1cmVfY29tcGF0LCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiZmVhdHVyZV9pbmNvbXBhdCIsICZzZXRfc2Iuc19mZWF0dXJlX2luY29tcGF0LCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiZmVhdHVyZV9yb19jb21wYXQiLCAmc2V0X3NiLnNfZmVhdHVyZV9yb19jb21wYXQsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJ1dWlkIiwgJnNldF9zYi5zX3V1aWQsIE5VTEwsIDE2LCBwYXJzZV91dWlkIH0sCisJeyAidm9sdW1lX25hbWUiLCAgJnNldF9zYi5zX3ZvbHVtZV9uYW1lLCBOVUxMLCAxNiwgcGFyc2Vfc3RyaW5nIH0sCisJeyAibGFzdF9tb3VudGVkIiwgICZzZXRfc2Iuc19sYXN0X21vdW50ZWQsIE5VTEwsIDY0LCBwYXJzZV9zdHJpbmcgfSwKKwl7ICJsYXN0Y2hlY2siLCAgJnNldF9zYi5zX2xhc3RjaGVjaywgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImFsZ29yaXRobV91c2FnZV9iaXRtYXAiLCAmc2V0X3NiLnNfYWxnb3JpdGhtX3VzYWdlX2JpdG1hcCwgTlVMTCwKKwkJICA0LCBwYXJzZV91aW50IH0sCisJeyAicHJlYWxsb2NfYmxvY2tzIiwgJnNldF9zYi5zX3ByZWFsbG9jX2Jsb2NrcywgTlVMTCwgMSwgcGFyc2VfdWludCB9LAorCXsgInByZWFsbG9jX2Rpcl9ibG9ja3MiLCAmc2V0X3NiLnNfcHJlYWxsb2NfZGlyX2Jsb2NrcywgTlVMTCwgMSwKKwkJICBwYXJzZV91aW50IH0sCisJeyAicmVzZXJ2ZWRfZ2R0X2Jsb2NrcyIsICZzZXRfc2Iuc19yZXNlcnZlZF9nZHRfYmxvY2tzLCBOVUxMLCAyLAorCQkgIHBhcnNlX3VpbnQgfSwKKwl7ICJqb3VybmFsX3V1aWQiLCAmc2V0X3NiLnNfam91cm5hbF91dWlkLCBOVUxMLCAxNiwgcGFyc2VfdXVpZCB9LAorCXsgImpvdXJuYWxfaW51bSIsICZzZXRfc2Iuc19qb3VybmFsX2ludW0sIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJqb3VybmFsX2RldiIsICZzZXRfc2Iuc19qb3VybmFsX2RldiwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImxhc3Rfb3JwaGFuIiwgJnNldF9zYi5zX2xhc3Rfb3JwaGFuLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiaGFzaF9zZWVkIiwgJnNldF9zYi5zX2hhc2hfc2VlZCwgTlVMTCwgMTYsIHBhcnNlX3V1aWQgfSwKKwl7ICJkZWZfaGFzaF92ZXJzaW9uIiwgJnNldF9zYi5zX2RlZl9oYXNoX3ZlcnNpb24sIE5VTEwsIDEsIHBhcnNlX2hhc2hhbGcgfSwKKwl7ICJqbmxfYmFja3VwX3R5cGUiLCAmc2V0X3NiLnNfam5sX2JhY2t1cF90eXBlLCBOVUxMLCAxLCBwYXJzZV91aW50IH0sCisJeyAiZGVzY19zaXplIiwgJnNldF9zYi5zX2Rlc2Nfc2l6ZSwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgImRlZmF1bHRfbW91bnRfb3B0cyIsICZzZXRfc2Iuc19kZWZhdWx0X21vdW50X29wdHMsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJmaXJzdF9tZXRhX2JnIiwgJnNldF9zYi5zX2ZpcnN0X21ldGFfYmcsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJta2ZzX3RpbWUiLCAmc2V0X3NiLnNfbWtmc190aW1lLCBOVUxMLCA0LCBwYXJzZV90aW1lIH0sCisJeyAiam5sX2Jsb2NrcyIsICZzZXRfc2Iuc19qbmxfYmxvY2tzWzBdLCBOVUxMLCA0LCBwYXJzZV91aW50LCBGTEFHX0FSUkFZLAorCSAgMTcgfSwKKwl7ICJtaW5fZXh0cmFfaXNpemUiLCAmc2V0X3NiLnNfbWluX2V4dHJhX2lzaXplLCBOVUxMLCAyLCBwYXJzZV91aW50IH0sCisJeyAid2FudF9leHRyYV9pc2l6ZSIsICZzZXRfc2Iuc193YW50X2V4dHJhX2lzaXplLCBOVUxMLCAyLCBwYXJzZV91aW50IH0sCisJeyAiZmxhZ3MiLCAmc2V0X3NiLnNfZmxhZ3MsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJyYWlkX3N0cmlkZSIsICZzZXRfc2Iuc19yYWlkX3N0cmlkZSwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgIm1pbl9leHRyYV9pc2l6ZSIsICZzZXRfc2Iuc19taW5fZXh0cmFfaXNpemUsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJtbXBfaW50ZXJ2YWwiLCAmc2V0X3NiLnNfbW1wX3VwZGF0ZV9pbnRlcnZhbCwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgIm1tcF9ibG9jayIsICZzZXRfc2Iuc19tbXBfYmxvY2ssIE5VTEwsIDgsIHBhcnNlX3VpbnQgfSwKKwl7ICJyYWlkX3N0cmlwZV93aWR0aCIsICZzZXRfc2Iuc19yYWlkX3N0cmlwZV93aWR0aCwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImxvZ19ncm91cHNfcGVyX2ZsZXgiLCAmc2V0X3NiLnNfbG9nX2dyb3Vwc19wZXJfZmxleCwgTlVMTCwgMSwgcGFyc2VfdWludCB9LAorCXsgImtieXRlc193cml0dGVuIiwgJnNldF9zYi5zX2tieXRlc193cml0dGVuLCBOVUxMLCA4LCBwYXJzZV91aW50IH0sCisJeyAic25hcHNob3RfaW51bSIsICZzZXRfc2Iuc19zbmFwc2hvdF9pbnVtLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAic25hcHNob3RfaWQiLCAmc2V0X3NiLnNfc25hcHNob3RfaWQsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJzbmFwc2hvdF9yX2Jsb2Nrc19jb3VudCIsICZzZXRfc2Iuc19zbmFwc2hvdF9yX2Jsb2Nrc19jb3VudCwKKwkgIE5VTEwsIDgsIHBhcnNlX3VpbnQgfSwKKwl7ICJzbmFwc2hvdF9saXN0IiwgJnNldF9zYi5zX3NuYXBzaG90X2xpc3QsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJtb3VudF9vcHRzIiwgICZzZXRfc2Iuc19tb3VudF9vcHRzLCBOVUxMLCA2NCwgcGFyc2Vfc3RyaW5nIH0sCisJeyAidXNyX3F1b3RhX2ludW0iLCAmc2V0X3NiLnNfdXNyX3F1b3RhX2ludW0sIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJncnBfcXVvdGFfaW51bSIsICZzZXRfc2Iuc19ncnBfcXVvdGFfaW51bSwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgIm92ZXJoZWFkX2Jsb2NrcyIsICZzZXRfc2Iuc19vdmVyaGVhZF9ibG9ja3MsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJiYWNrdXBfYmdzIiwgJnNldF9zYi5zX2JhY2t1cF9iZ3NbMF0sIE5VTEwsIDQsIHBhcnNlX3VpbnQsCisJICBGTEFHX0FSUkFZLCAyIH0sCisJeyAiY2hlY2tzdW0iLCAmc2V0X3NiLnNfY2hlY2tzdW0sIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJlcnJvcl9jb3VudCIsICZzZXRfc2Iuc19lcnJvcl9jb3VudCwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImZpcnN0X2Vycm9yX3RpbWUiLCAmc2V0X3NiLnNfZmlyc3RfZXJyb3JfdGltZSwgTlVMTCwgNCwgcGFyc2VfdGltZSB9LAorCXsgImZpcnN0X2Vycm9yX2lubyIsICZzZXRfc2Iuc19maXJzdF9lcnJvcl9pbm8sIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJmaXJzdF9lcnJvcl9ibG9jayIsICZzZXRfc2Iuc19maXJzdF9lcnJvcl9ibG9jaywgTlVMTCwgOCwgcGFyc2VfdWludCB9LAorCXsgImZpcnN0X2Vycm9yX2Z1bmMiLCAmc2V0X3NiLnNfZmlyc3RfZXJyb3JfZnVuYywgTlVMTCwgMzIsIHBhcnNlX3N0cmluZyB9LAorCXsgImZpcnN0X2Vycm9yX2xpbmUiLCAmc2V0X3NiLnNfZmlyc3RfZXJyb3JfaW5vLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAibGFzdF9lcnJvcl90aW1lIiwgJnNldF9zYi5zX2xhc3RfZXJyb3JfdGltZSwgTlVMTCwgNCwgcGFyc2VfdGltZSB9LAorCXsgImxhc3RfZXJyb3JfaW5vIiwgJnNldF9zYi5zX2xhc3RfZXJyb3JfaW5vLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAibGFzdF9lcnJvcl9ibG9jayIsICZzZXRfc2Iuc19sYXN0X2Vycm9yX2Jsb2NrLCBOVUxMLCA4LCBwYXJzZV91aW50IH0sCisJeyAibGFzdF9lcnJvcl9mdW5jIiwgJnNldF9zYi5zX2xhc3RfZXJyb3JfZnVuYywgTlVMTCwgMzIsIHBhcnNlX3N0cmluZyB9LAorCXsgImxhc3RfZXJyb3JfbGluZSIsICZzZXRfc2Iuc19sYXN0X2Vycm9yX2lubywgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgMCwgMCwgMCwgMCB9Cit9OworCitzdGF0aWMgc3RydWN0IGZpZWxkX3NldF9pbmZvIGlub2RlX2ZpZWxkc1tdID0geworCXsgImlub2Rlc19jb3VudCIsICZzZXRfc2Iuc19pbm9kZXNfY291bnQsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJtb2RlIiwgJnNldF9pbm9kZS5pX21vZGUsIE5VTEwsIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJ1aWQiLCAmc2V0X2lub2RlLmlfdWlkLCAmc2V0X2lub2RlLm9zZDIubGludXgyLmxfaV91aWRfaGlnaCwKKwkJMiwgcGFyc2VfdWludCB9LAorCXsgInNpemUiLCAmc2V0X2lub2RlLmlfc2l6ZSwgJnNldF9pbm9kZS5pX3NpemVfaGlnaCwgNCwgcGFyc2VfdWludCB9LAorCXsgImF0aW1lIiwgJnNldF9pbm9kZS5pX2F0aW1lLCBOVUxMLCA0LCBwYXJzZV90aW1lIH0sCisJeyAiY3RpbWUiLCAmc2V0X2lub2RlLmlfY3RpbWUsIE5VTEwsIDQsIHBhcnNlX3RpbWUgfSwKKwl7ICJtdGltZSIsICZzZXRfaW5vZGUuaV9tdGltZSwgTlVMTCwgNCwgcGFyc2VfdGltZSB9LAorCXsgImR0aW1lIiwgJnNldF9pbm9kZS5pX2R0aW1lLCBOVUxMLCA0LCBwYXJzZV90aW1lIH0sCisJeyAiZ2lkIiwgJnNldF9pbm9kZS5pX2dpZCwgJnNldF9pbm9kZS5vc2QyLmxpbnV4Mi5sX2lfZ2lkX2hpZ2gsCisJCTIsIHBhcnNlX3VpbnQgfSwKKwl7ICJsaW5rc19jb3VudCIsICZzZXRfaW5vZGUuaV9saW5rc19jb3VudCwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCS8qIFNwZWNpYWwgY2FzZTogaV9ibG9ja3MgaXMgNCBieXRlcywgaV9ibG9ja3NfaGlnaCBpcyAyIGJ5dGVzICovCisJeyAiYmxvY2tzIiwgJnNldF9pbm9kZS5pX2Jsb2NrcywgJnNldF9pbm9kZS5vc2QyLmxpbnV4Mi5sX2lfYmxvY2tzX2hpLAorCQk2LCBwYXJzZV91aW50IH0sCisJeyAiZmxhZ3MiLCAmc2V0X2lub2RlLmlfZmxhZ3MsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJ2ZXJzaW9uIiwgJnNldF9pbm9kZS5vc2QxLmxpbnV4MS5sX2lfdmVyc2lvbiwKKwkJJnNldF9pbm9kZS5pX3ZlcnNpb25faGksIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJ0cmFuc2xhdG9yIiwgJnNldF9pbm9kZS5vc2QxLmh1cmQxLmhfaV90cmFuc2xhdG9yLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiYmxvY2siLCAmc2V0X2lub2RlLmlfYmxvY2tbMF0sIE5VTEwsIDQsIHBhcnNlX3VpbnQsIEZMQUdfQVJSQVksCisJICBFWFQyX05ESVJfQkxPQ0tTIH0sCisJeyAiYmxvY2tbSU5EXSIsICZzZXRfaW5vZGUuaV9ibG9ja1tFWFQyX0lORF9CTE9DS10sIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJibG9ja1tESU5EXSIsICZzZXRfaW5vZGUuaV9ibG9ja1tFWFQyX0RJTkRfQkxPQ0tdLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiYmxvY2tbVElORF0iLCAmc2V0X2lub2RlLmlfYmxvY2tbRVhUMl9USU5EX0JMT0NLXSwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImdlbmVyYXRpb24iLCAmc2V0X2lub2RlLmlfZ2VuZXJhdGlvbiwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCS8qIFNwZWNpYWwgY2FzZTogaV9maWxlX2FjbF9oaWdoIGlzIDIgYnl0ZXMgKi8KKwl7ICJmaWxlX2FjbCIsICZzZXRfaW5vZGUuaV9maWxlX2FjbCwgCisJCSZzZXRfaW5vZGUub3NkMi5saW51eDIubF9pX2ZpbGVfYWNsX2hpZ2gsIDYsIHBhcnNlX3VpbnQgfSwKKwl7ICJkaXJfYWNsIiwgJnNldF9pbm9kZS5pX2Rpcl9hY2wsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJmYWRkciIsICZzZXRfaW5vZGUuaV9mYWRkciwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImZyYWciLCAmc2V0X2lub2RlLm9zZDIuaHVyZDIuaF9pX2ZyYWcsIE5VTEwsIDEsIHBhcnNlX3VpbnQgfSwKKwl7ICJmc2l6ZSIsICZzZXRfaW5vZGUub3NkMi5odXJkMi5oX2lfZnNpemUsIE5VTEwsIDEsIHBhcnNlX3VpbnQgfSwKKwl7ICJjaGVja3N1bSIsICZzZXRfaW5vZGUub3NkMi5saW51eDIubF9pX2NoZWNrc3VtX2xvLCAKKwkJJnNldF9pbm9kZS5pX2NoZWNrc3VtX2hpLCAyLCBwYXJzZV91aW50IH0sCisJeyAiYXV0aG9yIiwgJnNldF9pbm9kZS5vc2QyLmh1cmQyLmhfaV9hdXRob3IsIE5VTEwsCisJCTQsIHBhcnNlX3VpbnQgfSwKKwl7ICJleHRyYV9pc2l6ZSIsICZzZXRfaW5vZGUuaV9leHRyYV9pc2l6ZSwgTlVMTCwKKwkJMiwgcGFyc2VfdWludCB9LAorCXsgImN0aW1lX2V4dHJhIiwgJnNldF9pbm9kZS5pX2N0aW1lX2V4dHJhLCBOVUxMLAorCQk0LCBwYXJzZV91aW50IH0sCisJeyAibXRpbWVfZXh0cmEiLCAmc2V0X2lub2RlLmlfbXRpbWVfZXh0cmEsIE5VTEwsCisJCTQsIHBhcnNlX3VpbnQgfSwKKwl7ICJhdGltZV9leHRyYSIsICZzZXRfaW5vZGUuaV9hdGltZV9leHRyYSwgTlVMTCwKKwkJNCwgcGFyc2VfdWludCB9LAorCXsgImNydGltZSIsICZzZXRfaW5vZGUuaV9jcnRpbWUsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJjcnRpbWVfZXh0cmEiLCAmc2V0X2lub2RlLmlfY3J0aW1lX2V4dHJhLCBOVUxMLAorCQk0LCBwYXJzZV91aW50IH0sCisJeyAiYm1hcCIsIE5VTEwsIE5VTEwsIDQsIHBhcnNlX2JtYXAsIEZMQUdfQVJSQVkgfSwKKwl7IDAsIDAsIDAsIDAgfQorfTsKKworc3RhdGljIHN0cnVjdCBmaWVsZF9zZXRfaW5mbyBleHQyX2JnX2ZpZWxkc1tdID0geworCXsgImJsb2NrX2JpdG1hcCIsICZzZXRfZ2QuYmdfYmxvY2tfYml0bWFwLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiaW5vZGVfYml0bWFwIiwgJnNldF9nZC5iZ19pbm9kZV9iaXRtYXAsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJpbm9kZV90YWJsZSIsICZzZXRfZ2QuYmdfaW5vZGVfdGFibGUsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJmcmVlX2Jsb2Nrc19jb3VudCIsICZzZXRfZ2QuYmdfZnJlZV9ibG9ja3NfY291bnQsIE5VTEwsIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJmcmVlX2lub2Rlc19jb3VudCIsICZzZXRfZ2QuYmdfZnJlZV9pbm9kZXNfY291bnQsIE5VTEwsIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJ1c2VkX2RpcnNfY291bnQiLCAmc2V0X2dkLmJnX3VzZWRfZGlyc19jb3VudCwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgImZsYWdzIiwgJnNldF9nZC5iZ19mbGFncywgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgIml0YWJsZV91bnVzZWQiLCAmc2V0X2dkLmJnX2l0YWJsZV91bnVzZWQsIE5VTEwsIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJjaGVja3N1bSIsICZzZXRfZ2QuYmdfY2hlY2tzdW0sIE5VTEwsIDIsIHBhcnNlX2dkX2NzdW0gfSwKKwl7IDAsIDAsIDAsIDAgfQorfTsKKworc3RhdGljIHN0cnVjdCBmaWVsZF9zZXRfaW5mbyBleHQ0X2JnX2ZpZWxkc1tdID0geworCXsgImJsb2NrX2JpdG1hcCIsICZzZXRfZ2Q0LmJnX2Jsb2NrX2JpdG1hcCwKKwkJJnNldF9nZDQuYmdfYmxvY2tfYml0bWFwX2hpLCA0LCBwYXJzZV91aW50IH0sCisJeyAiaW5vZGVfYml0bWFwIiwgJnNldF9nZDQuYmdfaW5vZGVfYml0bWFwLAorCQkmc2V0X2dkNC5iZ19pbm9kZV9iaXRtYXBfaGksIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJpbm9kZV90YWJsZSIsICZzZXRfZ2Q0LmJnX2lub2RlX3RhYmxlLAorCQkmc2V0X2dkNC5iZ19pbm9kZV90YWJsZV9oaSwgNCwgcGFyc2VfdWludCB9LAorCXsgImZyZWVfYmxvY2tzX2NvdW50IiwgJnNldF9nZDQuYmdfZnJlZV9ibG9ja3NfY291bnQsCisJCSZzZXRfZ2Q0LmJnX2ZyZWVfYmxvY2tzX2NvdW50X2hpLCAyLCBwYXJzZV91aW50IH0sCisJeyAiZnJlZV9pbm9kZXNfY291bnQiLCAmc2V0X2dkNC5iZ19mcmVlX2lub2Rlc19jb3VudCwKKwkJJnNldF9nZDQuYmdfZnJlZV9pbm9kZXNfY291bnRfaGksIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJ1c2VkX2RpcnNfY291bnQiLCAmc2V0X2dkNC5iZ191c2VkX2RpcnNfY291bnQsCisJCSZzZXRfZ2Q0LmJnX3VzZWRfZGlyc19jb3VudF9oaSwgMiwgcGFyc2VfdWludCB9LAorCXsgImZsYWdzIiwgJnNldF9nZDQuYmdfZmxhZ3MsIE5VTEwsIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJleGNsdWRlX2JpdG1hcCIsICZzZXRfZ2Q0LmJnX2V4Y2x1ZGVfYml0bWFwX2xvLAorCQkmc2V0X2dkNC5iZ19leGNsdWRlX2JpdG1hcF9oaSwgNCwgcGFyc2VfdWludCB9LAorCXsgImJsb2NrX2JpdG1hcF9jc3VtIiwgJnNldF9nZDQuYmdfYmxvY2tfYml0bWFwX2NzdW1fbG8sCisJCSZzZXRfZ2Q0LmJnX2Jsb2NrX2JpdG1hcF9jc3VtX2hpLCAyLCBwYXJzZV91aW50IH0sCisJeyAiaW5vZGVfYml0bWFwX2NzdW0iLCAmc2V0X2dkNC5iZ19pbm9kZV9iaXRtYXBfY3N1bV9sbywKKwkJJnNldF9nZDQuYmdfaW5vZGVfYml0bWFwX2NzdW1faGksIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJpdGFibGVfdW51c2VkIiwgJnNldF9nZDQuYmdfaXRhYmxlX3VudXNlZCwKKwkJJnNldF9nZDQuYmdfaXRhYmxlX3VudXNlZF9oaSwgMiwgcGFyc2VfdWludCB9LAorCXsgImNoZWNrc3VtIiwgJnNldF9nZDQuYmdfY2hlY2tzdW0sIE5VTEwsIDIsIHBhcnNlX2dkX2NzdW0gfSwKKwl7IDAsIDAsIDAsIDAgfQorfTsKKworc3RhdGljIHN0cnVjdCBmaWVsZF9zZXRfaW5mbyBtbXBfZmllbGRzW10gPSB7CisJeyAiY2xlYXIiLCAmc2V0X21tcC5tbXBfbWFnaWMsIE5VTEwsIHNpemVvZihzZXRfbW1wKSwgcGFyc2VfbW1wX2NsZWFyIH0sCisJeyAibWFnaWMiLCAmc2V0X21tcC5tbXBfbWFnaWMsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJzZXEiLCAmc2V0X21tcC5tbXBfc2VxLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAidGltZSIsICZzZXRfbW1wLm1tcF90aW1lLCBOVUxMLCA4LCBwYXJzZV91aW50IH0sCisJeyAibm9kZW5hbWUiLCAmc2V0X21tcC5tbXBfbm9kZW5hbWUsIE5VTEwsIHNpemVvZihzZXRfbW1wLm1tcF9ub2RlbmFtZSksCisJCXBhcnNlX3N0cmluZyB9LAorCXsgImJkZXZuYW1lIiwgJnNldF9tbXAubW1wX2JkZXZuYW1lLCBOVUxMLCBzaXplb2Yoc2V0X21tcC5tbXBfYmRldm5hbWUpLAorCQlwYXJzZV9zdHJpbmcgfSwKKwl7ICJjaGVja19pbnRlcnZhbCIsICZzZXRfbW1wLm1tcF9jaGVja19pbnRlcnZhbCwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorfTsKKworc3RhdGljIGludCBjaGVja19zdWZmaXgoY29uc3QgY2hhciAqZmllbGQpCit7CisJaW50IGxlbiA9IHN0cmxlbihmaWVsZCk7CisKKwlpZiAobGVuIDw9IDMpCisJCXJldHVybiAwOworCWZpZWxkICs9IGxlbi0zOworCWlmICghc3RyY21wKGZpZWxkLCAiX2xvIikpCisJCXJldHVybiAxOworCWlmICghc3RyY21wKGZpZWxkLCAiX2hpIikpCisJCXJldHVybiAyOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpZWxkX3NldF9pbmZvICpmaW5kX2ZpZWxkKHN0cnVjdCBmaWVsZF9zZXRfaW5mbyAqZmllbGRzLAorCQkJCQkgY2hhciAqZmllbGQpCit7CisJc3RydWN0IGZpZWxkX3NldF9pbmZvICpzczsKKwljb25zdCBjaGFyCSpwcmVmaXg7CisJY2hhcgkJKmFyZywgKmRlbGltLCAqaWR4LCAqdG1wOworCWludAkJc3VmZml4LCBwcmVmaXhfbGVuOworCisJaWYgKGZpZWxkcyA9PSBzdXBlcl9maWVsZHMpCisJCXByZWZpeCA9ICJzXyI7CisJZWxzZSBpZiAoZmllbGRzID09IGlub2RlX2ZpZWxkcykKKwkJcHJlZml4ID0gImlfIjsKKwllbHNlCisJCXByZWZpeCA9ICJiZ18iOworCXByZWZpeF9sZW4gPSBzdHJsZW4ocHJlZml4KTsKKwlpZiAoc3RybmNtcChmaWVsZCwgcHJlZml4LCBwcmVmaXhfbGVuKSA9PSAwKQorCQlmaWVsZCArPSBwcmVmaXhfbGVuOworCisJYXJnID0gbWFsbG9jKHN0cmxlbihmaWVsZCkrMSk7CisJaWYgKCFhcmcpCisJCXJldHVybiBOVUxMOworCXN0cmNweShhcmcsIGZpZWxkKTsKKworCWlkeCA9IHN0cmNocihhcmcsICdbJyk7CisJaWYgKGlkeCkgeworCQkqaWR4KysgPSAwOworCQlkZWxpbSA9IGlkeCArIHN0cmxlbihpZHgpIC0gMTsKKwkJaWYgKCEqaWR4IHx8ICpkZWxpbSAhPSAnXScpCisJCQlpZHggPSAwOworCQllbHNlCisJCQkqZGVsaW0gPSAwOworCX0KKwkvKgorCSAqIENhbiB3ZSBwYXJzZSB0aGUgbnVtYmVyPworCSAqLworCWlmIChpZHgpIHsKKwkJYXJyYXlfaWR4ID0gc3RydG9sKGlkeCwgJnRtcCwgMCk7CisJCWlmICgqdG1wKSB7CisJCQkqKC0taWR4KSA9ICdbJzsKKwkJCSpkZWxpbSA9ICddJzsKKwkJCWlkeCA9IDA7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGEgdmFsaWQgX2hpIG9yIGEgX2xvIHN1ZmZpeCwgc3RyaXAgaXQgb2ZmCisJICovCisJc3VmZml4ID0gY2hlY2tfc3VmZml4KGFyZyk7CisJaWYgKHN1ZmZpeCA+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+bmFtZSk7CisJCXJldHVybiBFSU5WQUw7CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2JtYXAyKGN1cnJlbnRfZnMsIHNldF9pbm8sCisJCQkgICAgICAoc3RydWN0IGV4dDJfaW5vZGUgKikgJnNldF9pbm9kZSwKKwkJCSAgICAgIE5VTEwsIEJNQVBfQUxMT0MgfCBCTUFQX1NFVCwgYXJyYXlfaWR4LCBOVUxMLAorCQkJICAgICAgJmJsayk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJzZXRfaW5vZGUiLCByZXR2YWwsICJ3aGlsZSBzZXR0aW5nIGJsb2NrIG1hcCIpOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHBhcnNlX2dkX2NzdW0oc3RydWN0IGZpZWxkX3NldF9pbmZvICppbmZvLCBjaGFyICpmaWVsZCwKKwkJCSAgICAgICBjaGFyICphcmcpCit7CisKKwlpZiAoc3RyY21wKGFyZywgImNhbGMiKSA9PSAwKSB7CisJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGN1cnJlbnRfZnMsIHNldF9iZyk7CisJCW1lbWNweSgmc2V0X2dkLCBleHQyZnNfZ3JvdXBfZGVzYyhjdXJyZW50X2ZzLAorCQkJCQljdXJyZW50X2ZzLT5ncm91cF9kZXNjLAorCQkJCQlzZXRfYmcpLAorCQkJc2l6ZW9mKHNldF9nZCkpOworCQlwcmludGYoIkNoZWNrc3VtIHNldCB0byAweCUwNHhcbiIsCisJCSAgICAgICBleHQyZnNfYmdfY2hlY2tzdW0oY3VycmVudF9mcywgc2V0X2JnKSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBwYXJzZV91aW50KGluZm8sIGZpZWxkLCBhcmcpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9wb3NzaWJsZV9maWVsZHMoc3RydWN0IGZpZWxkX3NldF9pbmZvICpmaWVsZHMpCit7CisJc3RydWN0IGZpZWxkX3NldF9pbmZvICpzczsKKwljb25zdCBjaGFyCSp0eXBlLCAqY21kOworCUZJTEUgKmY7CisJY2hhciBuYW1lWzQwXSwgaWR4WzQwXTsKKworCWlmIChmaWVsZHMgPT0gc3VwZXJfZmllbGRzKSB7CisJCXR5cGUgPSAiU3VwZXJibG9jayI7CisJCWNtZCA9ICJzZXRfc3VwZXJfdmFsdWUiOworCX0gZWxzZSBpZiAoZmllbGRzID09IGlub2RlX2ZpZWxkcykgeworCQl0eXBlID0gIklub2RlIjsKKwkJY21kID0gInNldF9pbm9kZSI7CisJfSBlbHNlIGlmIChmaWVsZHMgPT0gbW1wX2ZpZWxkcykgeworCQl0eXBlID0gIk1NUCI7CisJCWNtZCA9ICJzZXRfbW1wX3ZhbHVlIjsKKwl9IGVsc2UgeworCQl0eXBlID0gIkJsb2NrIGdyb3VwIGRlc2NyaXB0b3IiOworCQljbWQgPSAic2V0X2Jsb2NrX2dyb3VwIjsKKwl9CisJZiA9IG9wZW5fcGFnZXIoKTsKKworCWZwcmludGYoZiwgIiVzIGZpZWxkcyBzdXBwb3J0ZWQgYnkgdGhlICVzIGNvbW1hbmQ6XG4iLCB0eXBlLCBjbWQpOworCisJZm9yIChzcyA9IGZpZWxkcyA7IHNzLT5uYW1lIDsgc3MrKykgeworCQl0eXBlID0gInVua25vd24iOworCQlpZiAoc3MtPmZ1bmMgPT0gcGFyc2Vfc3RyaW5nKQorCQkJdHlwZSA9ICJzdHJpbmciOworCQllbHNlIGlmIChzcy0+ZnVuYyA9PSBwYXJzZV9pbnQpCisJCQl0eXBlID0gImludGVnZXIiOworCQllbHNlIGlmIChzcy0+ZnVuYyA9PSBwYXJzZV91aW50KQorCQkJdHlwZSA9ICJ1bnNpZ25lZCBpbnRlZ2VyIjsKKwkJZWxzZSBpZiAoc3MtPmZ1bmMgPT0gcGFyc2VfdXVpZCkKKwkJCXR5cGUgPSAiVVVJRCI7CisJCWVsc2UgaWYgKHNzLT5mdW5jID09IHBhcnNlX2hhc2hhbGcpCisJCQl0eXBlID0gImhhc2ggYWxnb3JpdGhtIjsKKwkJZWxzZSBpZiAoc3MtPmZ1bmMgPT0gcGFyc2VfdGltZSkKKwkJCXR5cGUgPSAiZGF0ZS90aW1lIjsKKwkJZWxzZSBpZiAoc3MtPmZ1bmMgPT0gcGFyc2VfYm1hcCkKKwkJCXR5cGUgPSAic2V0IHBoeXNpY2FsLT5sb2dpY2FsIGJsb2NrIG1hcCI7CisJCWVsc2UgaWYgKHNzLT5mdW5jID09IHBhcnNlX2dkX2NzdW0pCisJCQl0eXBlID0gInVuc2lnbmVkIGludGVnZXIgT1IgXCJjYWxjXCIiOworCQlzdHJjcHkobmFtZSwgc3MtPm5hbWUpOworCQlpZiAoc3MtPmZsYWdzICYgRkxBR19BUlJBWSkgeworCQkJaWYgKHNzLT5tYXhfaWR4ID4gMCkKKwkJCQlzcHJpbnRmKGlkeCwgIlslZF0iLCBzcy0+bWF4X2lkeCk7CisJCQllbHNlCisJCQkJc3RyY3B5KGlkeCwgIltdIik7CisJCQlzdHJjYXQobmFtZSwgaWR4KTsKKwkJfQorCQlpZiAoc3MtPnB0cjIpCisJCQlzdHJjYXQobmFtZSwgIltfaGl8X2xvXSIpOworCQlmcHJpbnRmKGYsICJcdCUtMjVzXHQlc1xuIiwgbmFtZSwgdHlwZSk7CisJfQorCWNsb3NlX3BhZ2VyKGYpOworfQorCisKK3ZvaWQgZG9fc2V0X3N1cGVyKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY29uc3QgY2hhciAqdXNhZ2UgPSAiPGZpZWxkPiA8dmFsdWU+XG4iCisJCSJcdFwic2V0X3N1cGVyX3ZhbHVlIC1sXCIgd2lsbCBsaXN0IHRoZSBuYW1lcyBvZiAiCisJCSJzdXBlcmJsb2NrIGZpZWxkc1xuXHR3aGljaCBjYW4gYmUgc2V0LiI7CisJc3RhdGljIHN0cnVjdCBmaWVsZF9zZXRfaW5mbyAqc3M7CisKKwlpZiAoKGFyZ2MgPT0gMikgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWwiKSkgeworCQlwcmludF9wb3NzaWJsZV9maWVsZHMoc3VwZXJfZmllbGRzKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDMsIDMsICJzZXRfc3VwZXJfdmFsdWUiLAorCQkJCXVzYWdlLCBDSEVDS19GU19SVykpCisJCXJldHVybjsKKworCWlmICgoc3MgPSBmaW5kX2ZpZWxkKHN1cGVyX2ZpZWxkcywgYXJndlsxXSkpID09IDApIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiaW52YWxpZCBmaWVsZCBzcGVjaWZpZXI6ICVzIiwgYXJndlsxXSk7CisJCXJldHVybjsKKwl9CisJc2V0X3NiID0gKmN1cnJlbnRfZnMtPnN1cGVyOworCWlmIChzcy0+ZnVuYyhzcywgYXJndlsxXSwgYXJndlsyXSkgPT0gMCkgeworCQkqY3VycmVudF9mcy0+c3VwZXIgPSBzZXRfc2I7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGN1cnJlbnRfZnMpOworCX0KK30KKwordm9pZCBkb19zZXRfaW5vZGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljb25zdCBjaGFyICp1c2FnZSA9ICI8aW5vZGU+IDxmaWVsZD4gPHZhbHVlPlxuIgorCQkiXHRcInNldF9pbm9kZV9maWVsZCAtbFwiIHdpbGwgbGlzdCB0aGUgbmFtZXMgb2YgIgorCQkidGhlIGZpZWxkcyBpbiBhbiBleHQyIGlub2RlXG5cdHdoaWNoIGNhbiBiZSBzZXQuIjsKKwlzdGF0aWMgc3RydWN0IGZpZWxkX3NldF9pbmZvICpzczsKKworCWlmICgoYXJnYyA9PSAyKSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItbCIpKSB7CisJCXByaW50X3Bvc3NpYmxlX2ZpZWxkcyhpbm9kZV9maWVsZHMpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgNCwgNCwgInNldF9pbm9kZSIsCisJCQkJdXNhZ2UsIENIRUNLX0ZTX1JXKSkKKwkJcmV0dXJuOworCisJaWYgKChzcyA9IGZpbmRfZmllbGQoaW5vZGVfZmllbGRzLCBhcmd2WzJdKSkgPT0gMCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJpbnZhbGlkIGZpZWxkIHNwZWNpZmllcjogJXMiLCBhcmd2WzJdKTsKKwkJcmV0dXJuOworCX0KKworCXNldF9pbm8gPSBzdHJpbmdfdG9faW5vZGUoYXJndlsxXSk7CisJaWYgKCFzZXRfaW5vKQorCQlyZXR1cm47CisKKwlpZiAoZGVidWdmc19yZWFkX2lub2RlX2Z1bGwoc2V0X2lubywKKwkJCShzdHJ1Y3QgZXh0Ml9pbm9kZSAqKSAmc2V0X2lub2RlLCBhcmd2WzFdLAorCQkJCSAgICBzaXplb2Yoc2V0X2lub2RlKSkpCisJCXJldHVybjsKKworCWlmIChzcy0+ZnVuYyhzcywgYXJndlsyXSwgYXJndlszXSkgPT0gMCkgeworCQlpZiAoZGVidWdmc193cml0ZV9pbm9kZV9mdWxsKHNldF9pbm8sIAorCQkJICAgICAoc3RydWN0IGV4dDJfaW5vZGUgKikgJnNldF9pbm9kZSwKKwkJCSAgICAgYXJndlsxXSwgc2l6ZW9mKHNldF9pbm9kZSkpKQorCQkJcmV0dXJuOworCX0KK30KKwordm9pZCBkb19zZXRfYmxvY2tfZ3JvdXBfZGVzY3JpcHRvcihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNoYXIgKnVzYWdlID0gIjxiZyBudW1iZXI+IDxmaWVsZD4gPHZhbHVlPlxuIgorCQkiXHRcInNldF9ibG9ja19ncm91cF9kZXNjcmlwdG9yIC1sXCIgd2lsbCBsaXN0IHRoZSBuYW1lcyBvZiAiCisJCSJ0aGUgZmllbGRzIGluIGEgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvclxuXHR3aGljaCBjYW4gYmUgc2V0LiI7CisJc3RydWN0IGZpZWxkX3NldF9pbmZvCSp0YWJsZTsKKwlzdHJ1Y3QgZmllbGRfc2V0X2luZm8JKnNzOworCWNoYXIJCQkqZW5kOworCXZvaWQJCQkqZWRpdCwgKnRhcmdldDsKKwlpbnQJCQlzaXplOworCisJLyoKKwkgKiBEZXRlcm1pbmUgd2hldGhlciB3ZSBhcmUgZWRpdGluZyBhbiBleHQyIG9yIGV4dDQgYmxvY2sgZ3JvdXAKKwkgKiBkZXNjcmlwdG9yLiAgRGVzY3JpcHRvcnMgbGFyZ2VyIHRoYW4gZXh0NF9ncm91cF9kZXNjIGNhbm5vdAorCSAqIGhhdmUgdGhlaXIgZmllbGRzIGVkaXRlZCB5ZXQsIGJlY2F1c2UgdGhleSBkbyBub3QgaGF2ZSBhbnkKKwkgKiBuYW1lcyBhc3NpZ25lZC4gIFdoZW4gdGhhdCBoYXBwZW5zLCB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvCisJICogYmUgdXBkYXRlZCBmb3IgdGhlIG5ldyBkZXNjcmlwdG9yIHN0cnVjdCBhbmQgZmllbGRzLgorCSAqLworCWlmIChjdXJyZW50X2ZzICYmCisJICAgIEVYVDJfREVTQ19TSVpFKGN1cnJlbnRfZnMtPnN1cGVyKSA+PSBFWFQyX01JTl9ERVNDX1NJWkVfNjRCSVQpIHsKKwkJdGFibGUgPSBleHQ0X2JnX2ZpZWxkczsKKwkJZWRpdCA9ICZzZXRfZ2Q0OworCQlzaXplID0gc2l6ZW9mKHNldF9nZDQpOworCX0gZWxzZSB7CisJCXRhYmxlID0gZXh0Ml9iZ19maWVsZHM7CisJCWVkaXQgPSAmc2V0X2dkOworCQlzaXplID0gc2l6ZW9mKHNldF9nZCk7CisJfQorCisJaWYgKChhcmdjID09IDIpICYmICFzdHJjbXAoYXJndlsxXSwgIi1sIikpIHsKKwkJcHJpbnRfcG9zc2libGVfZmllbGRzKHRhYmxlKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDQsIDQsICJzZXRfYmxvY2tfZ3JvdXBfZGVzY3JpcHRvciIsCisJCQkJdXNhZ2UsIENIRUNLX0ZTX1JXKSkKKwkJcmV0dXJuOworCisJc2V0X2JnID0gc3RydG91bChhcmd2WzFdLCAmZW5kLCAwKTsKKwlpZiAoKmVuZCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJpbnZhbGlkIGJsb2NrIGdyb3VwIG51bWJlcjogJXMiLCBhcmd2WzFdKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzZXRfYmcgPj0gY3VycmVudF9mcy0+Z3JvdXBfZGVzY19jb3VudCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJibG9jayBncm91cCBudW1iZXIgdG9vIGJpZzogJWQiLCBzZXRfYmcpOworCQlyZXR1cm47CisJfQorCisJaWYgKChzcyA9IGZpbmRfZmllbGQodGFibGUsIGFyZ3ZbMl0pKSA9PSAwKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgImludmFsaWQgZmllbGQgc3BlY2lmaWVyOiAlcyIsIGFyZ3ZbMl0pOworCQlyZXR1cm47CisJfQorCisJdGFyZ2V0ID0gZXh0MmZzX2dyb3VwX2Rlc2MoY3VycmVudF9mcywgY3VycmVudF9mcy0+Z3JvdXBfZGVzYywgc2V0X2JnKTsKKwltZW1jcHkoZWRpdCwgdGFyZ2V0LCBzaXplKTsKKwlpZiAoc3MtPmZ1bmMoc3MsIGFyZ3ZbMl0sIGFyZ3ZbM10pID09IDApIHsKKwkJbWVtY3B5KHRhcmdldCwgZWRpdCwgc2l6ZSk7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGN1cnJlbnRfZnMpOworCX0KK30KKworc3RhdGljIGVycmNvZGVfdCBwYXJzZV9tbXBfY2xlYXIoc3RydWN0IGZpZWxkX3NldF9pbmZvICppbmZvLAorCQkJCSBjaGFyICpmaWVsZCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJIGNoYXIgKmFyZyBFWFQyRlNfQVRUUigodW51c2VkKSkpCit7CisJZXJyY29kZV90IHJldHZhbDsKKworCXJldHZhbCA9IGV4dDJmc19tbXBfY2xlYXIoY3VycmVudF9mcyk7CisJaWYgKHJldHZhbCAhPSAwKQorCQljb21fZXJyKCJzZXRfbW1wX3ZhbHVlIiwgcmV0dmFsLCAid2hpbGUgY2xlYXJpbmcgTU1QIGJsb2NrXG4iKTsKKwllbHNlCisJCW1lbWNweShpbmZvLT5wdHIsIGN1cnJlbnRfZnMtPm1tcF9idWYsIGluZm8tPnNpemUpOworCisJcmV0dXJuIDE7IC8qIHdlIGRvbid0IG5lZWQgdGhlIE1NUCBibG9jayB3cml0dGVuIGFnYWluICovCit9CisKK3ZvaWQgZG9fc2V0X21tcF92YWx1ZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNoYXIgKnVzYWdlID0gIjxmaWVsZD4gPHZhbHVlPlxuIgorCQkiXHRcInNldF9tbXBfdmFsdWUgLWxcIiB3aWxsIGxpc3QgdGhlIG5hbWVzIG9mICIKKwkJIk1NUCBmaWVsZHNcblx0d2hpY2ggY2FuIGJlIHNldC4iOworCXN0YXRpYyBzdHJ1Y3QgZmllbGRfc2V0X2luZm8gKnNtbXA7CisJc3RydWN0IG1tcF9zdHJ1Y3QgKm1tcF9zOworCWVycmNvZGVfdCByZXR2YWw7CisKKwlpZiAoYXJnYyA9PSAyICYmIHN0cmNtcChhcmd2WzFdLCAiLWwiKSA9PSAwKSB7CisJCXByaW50X3Bvc3NpYmxlX2ZpZWxkcyhtbXBfZmllbGRzKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoY3VycmVudF9mcy0+c3VwZXItPnNfbW1wX2Jsb2NrID09IDApIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAibm8gTU1QIGJsb2NrIGFsbG9jYXRlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAyLCAzLCAic2V0X21tcF92YWx1ZSIsCisJCQkJdXNhZ2UsIENIRUNLX0ZTX1JXKSkKKwkJcmV0dXJuOworCisJbW1wX3MgPSBjdXJyZW50X2ZzLT5tbXBfYnVmOworCWlmIChtbXBfcyA9PSBOVUxMKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGN1cnJlbnRfZnMtPmJsb2Nrc2l6ZSwgJm1tcF9zKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJhbGxvY2F0aW5nIE1NUCBidWZmZXJcbiIpOworCQkJcmV0dXJuOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19tbXBfcmVhZChjdXJyZW50X2ZzLAorCQkJCQkgY3VycmVudF9mcy0+c3VwZXItPnNfbW1wX2Jsb2NrLCBtbXBfcyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAicmVhZGluZyBNTVAgYmxvY2sgJWxsdS5cbiIsCisJCQkJKGxvbmcgbG9uZyljdXJyZW50X2ZzLT5zdXBlci0+c19tbXBfYmxvY2spOworCQkJZXh0MmZzX2ZyZWVfbWVtKCZtbXBfcyk7CisJCQlyZXR1cm47CisJCX0KKwkJY3VycmVudF9mcy0+bW1wX2J1ZiA9IG1tcF9zOworCX0KKworCXNtbXAgPSBmaW5kX2ZpZWxkKG1tcF9maWVsZHMsIGFyZ3ZbMV0pOworCWlmIChzbW1wID09IDApIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiaW52YWxpZCBmaWVsZCBzcGVjaWZpZXI6ICVzIiwgYXJndlsxXSk7CisJCXJldHVybjsKKwl9CisKKwlzZXRfbW1wID0gKm1tcF9zOworCWlmIChzbW1wLT5mdW5jKHNtbXAsIGFyZ3ZbMV0sIGFyZ3ZbMl0pID09IDApIHsKKwkJZXh0MmZzX21tcF93cml0ZShjdXJyZW50X2ZzLCBjdXJyZW50X2ZzLT5zdXBlci0+c19tbXBfYmxvY2ssCisJCQkJICZzZXRfbW1wKTsKKwkJKm1tcF9zID0gc2V0X21tcDsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2RlYnVnZnMvdW51c2VkLmMgYi9kZWJ1Z2ZzL3VudXNlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYjExOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJ1Z2ZzL3VudXNlZC5jCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiB1bnVzZWQuYyAtLS0gcXVpY2sgYW5kIGRpcnR5IHVudXNlZCBzcGFjZSBkdW1wZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgVGhlb2RvcmUgVHMnby4gIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gaW50IG9wdGluZDsKK2V4dGVybiBjaGFyICpvcHRhcmc7CisjZW5kaWYKKworI2luY2x1ZGUgImRlYnVnZnMuaCIKKwordm9pZCBkb19kdW1wX3VudXNlZChpbnQgYXJnYyBFWFQyRlNfQVRUUigodW51c2VkKSksIGNoYXIgKiphcmd2KQoreworCWJsazY0X3QJCWJsazsKKwl1bnNpZ25lZCBjaGFyCWJ1ZltFWFQyX01BWF9CTE9DS19TSVpFXTsKKwl1bnNpZ25lZCBpbnQJaTsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMSwgMSwKKwkJCQkiZHVtcF91bnVzZWQiLCAiIiwgMCkpCisJCXJldHVybjsKKworCWZvciAoYmxrPWN1cnJlbnRfZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2s7CisJICAgICBibGsgPCBleHQyZnNfYmxvY2tzX2NvdW50KGN1cnJlbnRfZnMtPnN1cGVyKTsgYmxrKyspIHsKKwkJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoY3VycmVudF9mcy0+YmxvY2tfbWFwLGJsaykpCisJCQljb250aW51ZTsKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGN1cnJlbnRfZnMtPmlvLCBibGssIDEsIGJ1Zik7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAiV2hpbGUgcmVhZGluZyBibG9ja1xuIik7CisJCQlyZXR1cm47CisJCX0KKwkJZm9yIChpPTA7IGkgPCBjdXJyZW50X2ZzLT5ibG9ja3NpemU7IGkrKykKKwkJCWlmIChidWZbaV0pCisJCQkJYnJlYWs7CisJCWlmIChpID49IGN1cnJlbnRfZnMtPmJsb2Nrc2l6ZSkKKwkJCWNvbnRpbnVlOworCQlwcmludGYoIlxuVW51c2VkIGJsb2NrICVsbHUgY29udGFpbnMgbm9uLXplcm8gZGF0YTpcblxuIiwKKwkJICAgICAgIGJsayk7CisJCWZvciAoaT0wOyBpIDwgY3VycmVudF9mcy0+YmxvY2tzaXplOyBpKyspCisJCQlmcHV0YyhidWZbaV0sIHN0ZG91dCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZGVidWdmcy91dGlsLmMgYi9kZWJ1Z2ZzL3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGM2YzYxCi0tLSAvZGV2L251bGwKKysrIGIvZGVidWdmcy91dGlsLmMKQEAgLTAsMCArMSw0OTkgQEAKKy8qCisgKiB1dGlsLmMgLS0tIHV0aWxpdGllcyBmb3IgdGhlIGRlYnVnZnMgcHJvZ3JhbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZQorICogcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqCisgKi8KKworI2RlZmluZSBfWE9QRU5fU09VUkNFIDYwMCAvKiBuZWVkZWQgZm9yIHN0cnB0aW1lICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gaW50IG9wdGluZDsKK2V4dGVybiBjaGFyICpvcHRhcmc7CisjZW5kaWYKKyNpZmRlZiBIQVZFX09QVFJFU0VUCitleHRlcm4gaW50IG9wdHJlc2V0OwkJLyogZGVmaW5lZCBieSBCU0QsIGJ1dCBub3Qgb3RoZXJzICovCisjZW5kaWYKKworI2luY2x1ZGUgInNzL3NzLmgiCisjaW5jbHVkZSAiZGVidWdmcy5oIgorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIGxpYmMgZ2V0b3B0KCkgZnVuY3Rpb24sIHdoaWNoIGtlZXBzCisgKiBpbnRlcm5hbCBzdGF0ZS4gIEJhZCBkZXNpZ24hICBTdHVwaWQgbGliYyBBUEkgZGVzaWduZXJzISAgTm8KKyAqIGJpc2N1aXQhCisgKgorICogQlNELWRlcml2ZWQgZ2V0b3B0KCkgZnVuY3Rpb25zIHJlcXVpcmUgdGhhdCBvcHRpbmQgYmUgcmVzZXQgdG8gMSBpbgorICogb3JkZXIgdG8gcmVzZXQgZ2V0b3B0KCkgc3RhdGUuICBUaGlzIHVzZWQgdG8gYmUgZ2VuZXJhbGx5IGFjY2VwdGVkCisgKiB3YXkgb2YgcmVzZXR0aW5nIGdldG9wdCgpLiAgSG93ZXZlciwgZ2xpYmMncyBnZXRvcHQoKQorICogaGFzIGFkZGl0aW9uYWwgZ2V0b3B0KCkgc3RhdGUgYmV5b25kIG9wdGluZCwgYW5kIHJlcXVpcmVzIHRoYXQKKyAqIG9wdGluZCBiZSBzZXQgemVybyB0byByZXNldCBpdHMgc3RhdGUuICBTbyB0aGUgdW5mb3J0dW5hdGUgc3RhdGUgb2YKKyAqIGFmZmFpcnMgaXMgdGhhdCBCU0QtZGVyaXZlZCB2ZXJzaW9ucyBvZiBnZXRvcHQoKSBtaXNiZWhhdmUgaWYKKyAqIG9wdGluZCBpcyBzZXQgdG8gMCBpbiBvcmRlciB0byByZXNldCBnZXRvcHQoKSwgYW5kIGdsaWJjJ3MgZ2V0b3B0KCkKKyAqIHdpbGwgY29yZSBkdW1wIGlmIG9wdGluZCBpcyBzZXQgMSBpbiBvcmRlciB0byByZXNldCBnZXRvcHQoKS4KKyAqCisgKiBNb3JlIG1vZGVybiB2ZXJzaW9ucyBvZiBCU0QgcmVxdWlyZSB0aGF0IG9wdHJlc2V0IGJlIHNldCB0byAxIGluCisgKiBvcmRlciB0byByZXNldCBnZXRvcHQoKS4gICBTaWdoLiAgU3RhbmRhcmRzLCBhbnlvbmU/CisgKgorICogV2UgaGlkZSB0aGUgaGFpciBoZXJlLgorICovCit2b2lkIHJlc2V0X2dldG9wdCh2b2lkKQoreworI2lmIGRlZmluZWQoX19HTElCQ19fKSB8fCBkZWZpbmVkKF9fbGludXhfXykKKwlvcHRpbmQgPSAwOworI2Vsc2UKKwlvcHRpbmQgPSAxOworI2VuZGlmCisjaWZkZWYgSEFWRV9PUFRSRVNFVAorCW9wdHJlc2V0ID0gMTsJCS8qIE1ha2VzIEJTRCBnZXRvcHQgaGFwcHkgKi8KKyNlbmRpZgorfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGFnZXJfc2VhcmNoX2xpc3RbXSA9IHsgInBhZ2VyIiwgIm1vcmUiLCAibGVzcyIsIDAgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpwYWdlcl9kaXJfbGlzdFtdID0geyAiL3Vzci9iaW4iLCAiL2JpbiIsIDAgfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfcGFnZXIoY2hhciAqYnVmKQoreworCWNvbnN0IGNoYXIgKippLCAqKmo7CisKKwlmb3IgKGkgPSBwYWdlcl9zZWFyY2hfbGlzdDsgKmk7IGkrKykgeworCQlmb3IgKGogPSBwYWdlcl9kaXJfbGlzdDsgKmo7IGorKykgeworCQkJc3ByaW50ZihidWYsICIlcy8lcyIsICpqLCAqaSk7CisJCQlpZiAoYWNjZXNzKGJ1ZiwgWF9PSykgPT0gMCkKKwkJCQlyZXR1cm4oYnVmKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworRklMRSAqb3Blbl9wYWdlcih2b2lkKQoreworCUZJTEUgKm91dGZpbGUgPSAwOworCWNvbnN0IGNoYXIgKnBhZ2VyID0gc3Nfc2FmZV9nZXRlbnYoIkRFQlVHRlNfUEFHRVIiKTsKKwljaGFyIGJ1Zls4MF07CisKKwlzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7CisJaWYgKCFpc2F0dHkoMSkpCisJCXJldHVybiBzdGRvdXQ7CisJaWYgKCFwYWdlcikKKwkJcGFnZXIgPSBzc19zYWZlX2dldGVudigiUEFHRVIiKTsKKwlpZiAoIXBhZ2VyKQorCQlwYWdlciA9IGZpbmRfcGFnZXIoYnVmKTsKKwlpZiAoIXBhZ2VyIHx8CisJICAgIChzdHJjbXAocGFnZXIsICJfX25vbmVfXyIpID09IDApIHx8CisJICAgICgob3V0ZmlsZSA9IHBvcGVuKHBhZ2VyLCAidyIpKSA9PSAwKSkKKwkJcmV0dXJuIHN0ZG91dDsKKwlyZXR1cm4gb3V0ZmlsZTsKK30KKwordm9pZCBjbG9zZV9wYWdlcihGSUxFICpzdHJlYW0pCit7CisJaWYgKHN0cmVhbSAmJiBzdHJlYW0gIT0gc3Rkb3V0KSBwY2xvc2Uoc3RyZWFtKTsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHdoZW5ldmVyIGEgY29tbWFuZCBuZWVkcyB0byB0dXJuIGEgc3RyaW5nIGludG8KKyAqIGFuIGlub2RlLgorICovCitleHQyX2lub190IHN0cmluZ190b19pbm9kZShjaGFyICpzdHIpCit7CisJZXh0Ml9pbm9fdAlpbm87CisJaW50CQlsZW4gPSBzdHJsZW4oc3RyKTsKKwljaGFyCQkqZW5kOworCWludAkJcmV0dmFsOworCisJLyoKKwkgKiBJZiB0aGUgc3RyaW5nIGlzIG9mIHRoZSBmb3JtIDxpbm8+LCB0aGVuIHRyZWF0IGl0IGFzIGFuCisJICogaW5vZGUgbnVtYmVyLgorCSAqLworCWlmICgobGVuID4gMikgJiYgKHN0clswXSA9PSAnPCcpICYmIChzdHJbbGVuLTFdID09ICc+JykpIHsKKwkJaW5vID0gc3RydG91bChzdHIrMSwgJmVuZCwgMCk7CisJCWlmICgqZW5kPT0nPicpCisJCQlyZXR1cm4gaW5vOworCX0KKworCXJldHZhbCA9IGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBjd2QsIHN0ciwgJmlubyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHN0ciwgcmV0dmFsLCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBpbm87Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyAxIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG5vdCBvcGVuLCBhbmQgcHJpbnRzIGFuCisgKiBlcnJvciBtZXNzYWdlIHRvIHRoYXQgZWZmZWN0LgorICovCitpbnQgY2hlY2tfZnNfb3BlbihjaGFyICpuYW1lKQoreworCWlmICghY3VycmVudF9mcykgeworCQljb21fZXJyKG5hbWUsIDAsICJGaWxlc3lzdGVtIG5vdCBvcGVuIik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIDEgaWYgYSBmaWxlc3lzdGVtIGlzIG9wZW4sIGFuZCBwcmludHMgYW4KKyAqIGVycm9yIG1lc3NhZ2UgdG8gdGhhdCBlZmZlY3QuCisgKi8KK2ludCBjaGVja19mc19ub3Rfb3BlbihjaGFyICpuYW1lKQoreworCWlmIChjdXJyZW50X2ZzKSB7CisJCWNvbV9lcnIobmFtZSwgMCwKKwkJCSJGaWxlc3lzdGVtICVzIGlzIHN0aWxsIG9wZW4uICBDbG9zZSBpdCBmaXJzdC5cbiIsCisJCQljdXJyZW50X2ZzLT5kZXZpY2VfbmFtZSk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIDEgaWYgYSBmaWxlc3lzdGVtIGlzIG5vdCBvcGVuZWQgcmVhZC93cml0ZSwKKyAqIGFuZCBwcmludHMgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGF0IGVmZmVjdC4KKyAqLworaW50IGNoZWNrX2ZzX3JlYWRfd3JpdGUoY2hhciAqbmFtZSkKK3sKKwlpZiAoIShjdXJyZW50X2ZzLT5mbGFncyAmIEVYVDJfRkxBR19SVykpIHsKKwkJY29tX2VycihuYW1lLCAwLCAiRmlsZXN5c3RlbSBvcGVuZWQgcmVhZC9vbmx5Iik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIDEgaWYgYSBmaWxlc3lzdGVtIGlzIGRvZXNuJ3QgaGF2ZSBpdHMgaW5vZGUKKyAqIGFuZCBibG9jayBiaXRtYXBzIGxvYWRlZCwgYW5kIHByaW50cyBhbiBlcnJvciBtZXNzYWdlIHRvIHRoYXQKKyAqIGVmZmVjdC4KKyAqLworaW50IGNoZWNrX2ZzX2JpdG1hcHMoY2hhciAqbmFtZSkKK3sKKwlpZiAoIWN1cnJlbnRfZnMtPmJsb2NrX21hcCB8fCAhY3VycmVudF9mcy0+aW5vZGVfbWFwKSB7CisJCWNvbV9lcnIobmFtZSwgMCwgIkZpbGVzeXN0ZW0gYml0bWFwcyBub3QgbG9hZGVkIik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBfX3UzMiB0aW1lIHZhbHVlIGFuZCBjb252ZXJ0cyBpdCB0byBhIHN0cmluZywKKyAqIHVzaW5nIGN0aW1lCisgKi8KK2NoYXIgKnRpbWVfdG9fc3RyaW5nKF9fdTMyIGNsKQoreworCXN0YXRpYyBpbnQJZG9fZ210ID0gLTE7CisJdGltZV90CQl0ID0gKHRpbWVfdCkgY2w7CisJY29uc3QgY2hhcgkqdHo7CisKKwlpZiAoZG9fZ210ID09IC0xKSB7CisJCS8qIFRoZSBkaWV0IGxpYmMgZG9lc24ndCByZXNwZWN0IHRoZSBUWiBlbnZpcm9uZW1udCB2YXJpYWJsZSAqLworCQl0eiA9IHNzX3NhZmVfZ2V0ZW52KCJUWiIpOworCQlpZiAoIXR6KQorCQkJdHogPSAiIjsKKwkJZG9fZ210ID0gIXN0cmNtcCh0eiwgIkdNVCIpIHwgIXN0cmNtcCh0eiwgIkdNVDAiKTsKKwl9CisKKwlyZXR1cm4gYXNjdGltZSgoZG9fZ210KSA/IGdtdGltZSgmdCkgOiBsb2NhbHRpbWUoJnQpKTsKK30KKworLyoKKyAqIFBhcnNlIGEgc3RyaW5nIGFzIGEgdGltZS4gIFJldHVybiAoKHRpbWVfdCktMSkgaWYgdGhlIHN0cmluZworICogZG9lc24ndCBhcHBlYXIgdG8gYmUgYSBzYW5lIHRpbWUuCisgKi8KK3RpbWVfdCBzdHJpbmdfdG9fdGltZShjb25zdCBjaGFyICphcmcpCit7CisJc3RydWN0CXRtCXRzOworCXRpbWVfdAkJcmV0OworCWNoYXIgKnRtcDsKKworCWlmIChzdHJjbXAoYXJnLCAibm93IikgPT0gMCkgeworCQlyZXR1cm4gdGltZSgwKTsKKwl9CisJaWYgKGFyZ1swXSA9PSAnQCcpIHsKKwkJLyogaW50ZXJwcmV0IGl0IGFzIGFuIGludGVnZXIgKi8KKwkJYXJnKys7CisJZmFsbGJhY2s6CisJCXJldCA9IHN0cnRvdWwoYXJnLCAmdG1wLCAwKTsKKwkJaWYgKCp0bXApCisJCQlyZXR1cm4gKCh0aW1lX3QpIC0xKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJbWVtc2V0KCZ0cywgMCwgc2l6ZW9mKHRzKSk7CisjaWZkZWYgSEFWRV9TVFJQVElNRQorCXRtcCA9IHN0cnB0aW1lKGFyZywgIiVZJW0lZCVIJU0lUyIsICZ0cyk7CisJaWYgKHRtcCA9PSBOVUxMKQorCQlnb3RvIGZhbGxiYWNrOworI2Vsc2UKKwlzc2NhbmYoYXJnLCAiJTRkJTJkJTJkJTJkJTJkJTJkIiwgJnRzLnRtX3llYXIsICZ0cy50bV9tb24sCisJICAgICAgICZ0cy50bV9tZGF5LCAmdHMudG1faG91ciwgJnRzLnRtX21pbiwgJnRzLnRtX3NlYyk7CisJdHMudG1feWVhciAtPSAxOTAwOworCXRzLnRtX21vbiAtPSAxOworCWlmICh0cy50bV95ZWFyIDwgMCB8fCB0cy50bV9tb24gPCAwIHx8IHRzLnRtX21vbiA+IDExIHx8CisJICAgIHRzLnRtX21kYXkgPCAwIHx8IHRzLnRtX21kYXkgPiAzMSB8fCB0cy50bV9ob3VyID4gMjMgfHwKKwkgICAgdHMudG1fbWluID4gNTkgfHwgdHMudG1fc2VjID4gNjEpCisJCXRzLnRtX21kYXkgPSAwOworI2VuZGlmCisJdHMudG1faXNkc3QgPSAtMTsKKwkvKiBzdHJwdGltZSgpIG1heSBvbmx5IHVwZGF0ZSB0aGUgc3BlY2lmaWVkIGZpZWxkcywgd2hpY2ggZG9lcyBub3QKKwkgKiBuZWNlc3NhcmlseSBpbmNsdWRlIHRzLnRtX3lkYXkgKCVqKS4gIENhbGN1bGF0ZSB0aGlzIGlmIHVuc2V0OgorCSAqCisJICogSmFuIEZlYiBNYXIgQXByIE1heSBKdW4gSnVsIEF1ZyBTZXAgT2N0IE5vdiBEZWMKKwkgKiAzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxCisJICoKKwkgKiBTdGFydCB3aXRoIDMxIGRheXMgcGVyIG1vbnRoLiAgRXZlbiBtb250aHMgaGF2ZSBvbmx5IDMwIGRheXMsIGJ1dAorCSAqIHJldmVyc2UgaW4gQXVndXN0LCBzdWJ0cmFjdCBvbmUgZGF5IGZvciB0aG9zZSBtb250aHMuIEZlYnJ1YXJ5IGhhcworCSAqIG9ubHkgMjggZGF5cywgbm90IDMwLCBzdWJ0cmFjdCB0d28gZGF5cy4gQWRkIGRheSBvZiBtb250aCwgbWludXMKKwkgKiBvbmUsIHNpbmNlIGRheSBpcyBub3QgZmluaXNoZWQgeWV0LiAgTGVhcCB5ZWFycyBoYW5kbGVkIGFmdGVyd2FyZC4gKi8KKwlpZiAodHMudG1feWRheSA9PSAwKQorCQl0cy50bV95ZGF5ID0gKHRzLnRtX21vbiAqIDMxKSAtCisJCQkoKHRzLnRtX21vbiAtICh0cy50bV9tb24gPiA3KSkgLyAyKSAtCisJCQkyICogKHRzLnRtX21vbiA+IDEpICsgdHMudG1fbWRheSAtIDE7CisJcmV0ID0gdHMudG1fc2VjICsgdHMudG1fbWluKjYwICsgdHMudG1faG91ciozNjAwICsgdHMudG1feWRheSo4NjQwMCArCisJCSh0cy50bV95ZWFyLTcwKSozMTUzNjAwMCArICgodHMudG1feWVhci02OSkvNCkqODY0MDAgLQorCQkoKHRzLnRtX3llYXItMSkvMTAwKSo4NjQwMCArICgodHMudG1feWVhcisyOTkpLzQwMCkqODY0MDA7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcsIHByaW50aW5nCisgKiBhbiBlcnJvciBtZXNzYWdlIGlmIGl0IGZhaWxzLCBhbmQgcmV0dXJuaW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBpbiBlcnIuCisgKi8KK3Vuc2lnbmVkIGxvbmcgcGFyc2VfdWxvbmcoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpjbWQsCisJCQkgIGNvbnN0IGNoYXIgKmRlc2NyLCBpbnQgKmVycikKK3sKKwljaGFyCQkqdG1wOworCXVuc2lnbmVkIGxvbmcJcmV0OworCisJcmV0ID0gc3RydG91bChzdHIsICZ0bXAsIDApOworCWlmICgqdG1wID09IDApIHsKKwkJaWYgKGVycikKKwkJCSplcnIgPSAwOworCQlyZXR1cm4gcmV0OworCX0KKwljb21fZXJyKGNtZCwgMCwgIkJhZCAlcyAtICVzIiwgZGVzY3IsIHN0cik7CisJaWYgKGVycikKKwkJKmVyciA9IDE7CisJZWxzZQorCQlleGl0KDEpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBzdHJpbmcgdG8gYW4gdW5zaWduZWQgbG9uZyBsb25nLCBwcmludGluZworICogYW4gZXJyb3IgbWVzc2FnZSBpZiBpdCBmYWlscywgYW5kIHJldHVybmluZyBzdWNjZXNzIG9yIGZhaWx1cmUgaW4gZXJyLgorICovCit1bnNpZ25lZCBsb25nIGxvbmcgcGFyc2VfdWxvbmdsb25nKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqY21kLAorCQkJCSAgIGNvbnN0IGNoYXIgKmRlc2NyLCBpbnQgKmVycikKK3sKKwljaGFyCQkJKnRtcDsKKwl1bnNpZ25lZCBsb25nIGxvbmcJcmV0OworCisJcmV0ID0gc3RydG91bGwoc3RyLCAmdG1wLCAwKTsKKwlpZiAoKnRtcCA9PSAwKSB7CisJCWlmIChlcnIpCisJCQkqZXJyID0gMDsKKwkJcmV0dXJuIHJldDsKKwl9CisJY29tX2VycihjbWQsIDAsICJCYWQgJXMgLSAlcyIsIGRlc2NyLCBzdHIpOworCWlmIChlcnIpCisJCSplcnIgPSAxOworCWVsc2UKKwkJZXhpdCgxKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgc3RyaW5nIHRvIGEgYmxvY2sgbnVtYmVyLiAgSXQgcmV0dXJucworICogMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUuICBPbiBmYWlsdXJlLCBpdCBvdXRwdXRzIGVpdGhlciBhbiBvcHRpb25hbGx5CisgKiBzcGVjaWZpZWQgZXJyb3IgbWVzc2FnZSBvciBhIGRlZmF1bHQuCisgKi8KK2ludCBzdHJ0b2Jsayhjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZXJybXNnLAorCSAgICAgYmxrNjRfdCAqcmV0KQoreworCWJsazY0X3QJYmxrOworCWludAllcnI7CisKKwlpZiAoZXJybXNnID09IE5VTEwpCisJCWJsayA9IHBhcnNlX3Vsb25nbG9uZyhzdHIsIGNtZCwgImJsb2NrIG51bWJlciIsICZlcnIpOworCWVsc2UKKwkJYmxrID0gcGFyc2VfdWxvbmdsb25nKHN0ciwgY21kLCBlcnJtc2csICZlcnIpOworCSpyZXQgPSBibGs7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRoaXMgaXMgYSBjb21tb24gaGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIGNvbW1hbmQgcHJvY2Vzc2luZworICogcm91dGluZXMKKyAqLworaW50IGNvbW1vbl9hcmdzX3Byb2Nlc3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgaW50IG1pbl9hcmdjLCBpbnQgbWF4X2FyZ2MsCisJCQljb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnVzYWdlLCBpbnQgZmxhZ3MpCit7CisJaWYgKGFyZ2MgPCBtaW5fYXJnYyB8fCBhcmdjID4gbWF4X2FyZ2MpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiVXNhZ2U6ICVzICVzIiwgY21kLCB1c2FnZSk7CisJCXJldHVybiAxOworCX0KKwlpZiAoZmxhZ3MgJiBDSEVDS19GU19OT1RPUEVOKSB7CisJCWlmIChjaGVja19mc19ub3Rfb3Blbihhcmd2WzBdKSkKKwkJCXJldHVybiAxOworCX0gZWxzZSB7CisJCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQkJcmV0dXJuIDE7CisJfQorCWlmICgoZmxhZ3MgJiBDSEVDS19GU19SVykgJiYgY2hlY2tfZnNfcmVhZF93cml0ZShhcmd2WzBdKSkKKwkJcmV0dXJuIDE7CisJaWYgKChmbGFncyAmIENIRUNLX0ZTX0JJVE1BUFMpICYmIGNoZWNrX2ZzX2JpdG1hcHMoYXJndlswXSkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGRvX3N0YXQsIGRvX2ZyZWVpLCBkb19zZXRpLCBhbmQKKyAqIGRvX3Rlc3RpLCBldGMuICBCYXNpY2FsbHksIGFueSBjb21tYW5kIHdoaWNoIHRha2VzIGEgc2luZ2xlCisgKiBhcmd1bWVudCB3aGljaCBpcyBhIGZpbGUvaW5vZGUgbnVtYmVyIHNwZWNpZmllci4KKyAqLworaW50IGNvbW1vbl9pbm9kZV9hcmdzX3Byb2Nlc3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwKKwkJCSAgICAgIGV4dDJfaW5vX3QgKmlub2RlLCBpbnQgZmxhZ3MpCit7CisJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMiwgMiwgYXJndlswXSwgIjxmaWxlPiIsIGZsYWdzKSkKKwkJcmV0dXJuIDE7CisKKwkqaW5vZGUgPSBzdHJpbmdfdG9faW5vZGUoYXJndlsxXSk7CisJaWYgKCEqaW5vZGUpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGRvX2ZyZWViLCBkb19zZXRiLCBhbmQgZG9fdGVzdGIKKyAqLworaW50IGNvbW1vbl9ibG9ja19hcmdzX3Byb2Nlc3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwKKwkJCSAgICAgIGJsazY0X3QgKmJsb2NrLCBibGs2NF90ICpjb3VudCkKK3sKKwlpbnQJZXJyOworCisJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMiwgMywgYXJndlswXSwKKwkJCQkiPGJsb2NrPiBbY291bnRdIiwgQ0hFQ0tfRlNfQklUTUFQUykpCisJCXJldHVybiAxOworCisJaWYgKHN0cnRvYmxrKGFyZ3ZbMF0sIGFyZ3ZbMV0sIE5VTEwsIGJsb2NrKSkKKwkJcmV0dXJuIDE7CisJaWYgKCpibG9jayA9PSAwKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgIkludmFsaWQgYmxvY2sgbnVtYmVyIDAiKTsKKwkJZXJyID0gMTsKKwl9CisKKwlpZiAoYXJnYyA+IDIpIHsKKwkJZXJyID0gc3RydG9ibGsoYXJndlswXSwgYXJndlsyXSwgImNvdW50IiwgY291bnQpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitpbnQgZGVidWdmc19yZWFkX2lub2RlX2Z1bGwoZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUsCisJCQljb25zdCBjaGFyICpjbWQsIGludCBidWZzaXplKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZV9mdWxsKGN1cnJlbnRfZnMsIGlubywgaW5vZGUsIGJ1ZnNpemUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihjbWQsIHJldHZhbCwgIndoaWxlIHJlYWRpbmcgaW5vZGUgJXUiLCBpbm8pOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBkZWJ1Z2ZzX3JlYWRfaW5vZGUoZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUsCisJCQljb25zdCBjaGFyICpjbWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGN1cnJlbnRfZnMsIGlubywgaW5vZGUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihjbWQsIHJldHZhbCwgIndoaWxlIHJlYWRpbmcgaW5vZGUgJXUiLCBpbm8pOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBkZWJ1Z2ZzX3dyaXRlX2lub2RlX2Z1bGwoZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCSAgICAgY29uc3QgY2hhciAqY21kLAorCQkJICAgICBpbnQgYnVmc2l6ZSkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlX2Z1bGwoY3VycmVudF9mcywgaW5vLAorCQkJCQkgaW5vZGUsIGJ1ZnNpemUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihjbWQsIHJldHZhbCwgIndoaWxlIHdyaXRpbmcgaW5vZGUgJXUiLCBpbm8pOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBkZWJ1Z2ZzX3dyaXRlX2lub2RlKGV4dDJfaW5vX3QgaW5vLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLAorCQkJY29uc3QgY2hhciAqY21kKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoY3VycmVudF9mcywgaW5vLCBpbm9kZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGNtZCwgcmV0dmFsLCAid2hpbGUgd3JpdGluZyBpbm9kZSAldSIsIGlubyk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGRlYnVnZnNfd3JpdGVfbmV3X2lub2RlKGV4dDJfaW5vX3QgaW5vLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLAorCQkJICAgIGNvbnN0IGNoYXIgKmNtZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX3dyaXRlX25ld19pbm9kZShjdXJyZW50X2ZzLCBpbm8sIGlub2RlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoY21kLCByZXR2YWwsICJ3aGlsZSBjcmVhdGluZyBpbm9kZSAldSIsIGlubyk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdpdmVuIGEgbW9kZSwgcmV0dXJuIHRoZSBleHQyIGZpbGUgdHlwZQorICovCitpbnQgZXh0Ml9maWxlX3R5cGUodW5zaWduZWQgaW50IG1vZGUpCit7CisJaWYgKExJTlVYX1NfSVNSRUcobW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX1JFR19GSUxFOworCisJaWYgKExJTlVYX1NfSVNESVIobW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX0RJUjsKKworCWlmIChMSU5VWF9TX0lTQ0hSKG1vZGUpKQorCQlyZXR1cm4gRVhUMl9GVF9DSFJERVY7CisKKwlpZiAoTElOVVhfU19JU0JMSyhtb2RlKSkKKwkJcmV0dXJuIEVYVDJfRlRfQkxLREVWOworCisJaWYgKExJTlVYX1NfSVNMTksobW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX1NZTUxJTks7CisKKwlpZiAoTElOVVhfU19JU0ZJRk8obW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX0ZJRk87CisKKwlpZiAoTElOVVhfU19JU1NPQ0sobW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX1NPQ0s7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RlYnVnZnMvemFwLmMgYi9kZWJ1Z2ZzL3phcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxN2JkZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJ1Z2ZzL3phcC5jCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogemFwLmMgLS0tIHphcCBibG9jaworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBpbnQgb3B0aW5kOworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyNlbmRpZgorCisjaW5jbHVkZSAiZGVidWdmcy5oIgorCit2b2lkIGRvX3phcF9ibG9jayhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXVuc2lnbmVkIGxvbmcJcGF0dGVybiA9IDA7CisJdW5zaWduZWQgY2hhcgkqYnVmOworCWV4dDJfaW5vX3QJaW5vZGU7CisJZXJyY29kZV90CWVycmNvZGU7CisJYmxrNjRfdAkJYmxvY2s7CisJY2hhcgkJKmZpbGUgPSBOVUxMOworCWludAkJYywgZXJyOworCWludAkJb2Zmc2V0ID0gLTE7CisJaW50CQlsZW5ndGggPSAtMTsKKwlpbnQJCWJpdCA9IC0xOworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKwlpZiAoY2hlY2tfZnNfcmVhZF93cml0ZShhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJcmVzZXRfZ2V0b3B0KCk7CisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiYjpmOmw6bzpwOiIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2YnOgorCQkJZmlsZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdiJzoKKwkJCWJpdCA9IHBhcnNlX3Vsb25nKG9wdGFyZywgYXJndlswXSwKKwkJCQkJICAiYml0IiwgJmVycik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybjsKKwkJCWlmIChiaXQgPj0gKGludCkgY3VycmVudF9mcy0+YmxvY2tzaXplICogOCkgeworCQkJCWNvbV9lcnIoYXJndlswXSwgMCwgIlRoZSBiaXQgdG8gZmxpcCAiCisJCQkJCSJtdXN0IGJlIHdpdGhpbiBhICVkIGJsb2NrXG4iLAorCQkJCQljdXJyZW50X2ZzLT5ibG9ja3NpemUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdwJzoKKwkJCXBhdHRlcm4gPSBwYXJzZV91bG9uZyhvcHRhcmcsIGFyZ3ZbMF0sCisJCQkJCSAgICAgICJwYXR0ZXJuIiwgJmVycik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybjsKKwkJCWlmIChwYXR0ZXJuID49IDI1NikgeworCQkJCWNvbV9lcnIoYXJndlswXSwgMCwgIlRoZSBmaWxsIHBhdHRlcm4gbXVzdCAiCisJCQkJCSJiZSBhbiA4LWJpdCB2YWx1ZVxuIik7CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ28nOgorCQkJb2Zmc2V0ID0gcGFyc2VfdWxvbmcob3B0YXJnLCBhcmd2WzBdLAorCQkJCQkgICAgICJvZmZzZXQiLCAmZXJyKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuOworCQkJaWYgKG9mZnNldCA+PSAoaW50KSBjdXJyZW50X2ZzLT5ibG9ja3NpemUpIHsKKwkJCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJUaGUgb2Zmc2V0IG11c3QgYmUgIgorCQkJCQkid2l0aGluIGEgJWQgYmxvY2tcbiIsCisJCQkJCWN1cnJlbnRfZnMtPmJsb2Nrc2l6ZSk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnJlYWs7CisKKwkJCWJyZWFrOworCQljYXNlICdsJzoKKwkJCWxlbmd0aCA9IHBhcnNlX3Vsb25nKG9wdGFyZywgYXJndlswXSwKKwkJCQkJICAgICAibGVuZ3RoIiwgJmVycik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBwcmludF91c2FnZTsKKwkJfQorCX0KKworCWlmIChiaXQgPiAwICYmIG9mZnNldCA+IDApIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiVGhlIC1vIGFuZCAtYiBvcHRpb25zIGNhbiBub3QgYmUgbWl4ZWQuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAob2Zmc2V0IDwgMCkKKwkJb2Zmc2V0ID0gMDsKKwlpZiAobGVuZ3RoIDwgMCkKKwkJbGVuZ3RoID0gY3VycmVudF9mcy0+YmxvY2tzaXplIC0gb2Zmc2V0OworCWlmICgob2Zmc2V0ICsgbGVuZ3RoKSA+IChpbnQpIGN1cnJlbnRfZnMtPmJsb2Nrc2l6ZSkgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJUaGUgc3BlY2lmaWVkIGxlbmd0aCBpcyB0b28gYnVnXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChhcmdjICE9IG9wdGluZCsxKSB7CisJcHJpbnRfdXNhZ2U6CisJCWNvbV9lcnIoMCwgMCwgIlVzYWdlOlx0emFwX2Jsb2NrIFstZiBmaWxlXSBbLW8gb2Zmc2V0XSAiCisJCQkiWy1sIGxlbmd0aF0gWy1wIHBhdHRlcm5dIGJsb2NrX251bSIpOworCQljb21fZXJyKDAsIDAsICJcdHphcF9ibG9jayBbLWYgZmlsZV0gWy1iIGJpdF0gIgorCQkJImJsb2NrX251bSIpOworCQlyZXR1cm47CisJfQorCisJYmxvY2sgPSBwYXJzZV91bG9uZ2xvbmcoYXJndltvcHRpbmRdLCBhcmd2WzBdLCAiYmxvY2siLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwlpZiAoZmlsZSkgeworCQlpbm9kZSA9IHN0cmluZ190b19pbm9kZShmaWxlKTsKKwkJaWYgKCFpbm9kZSkKKwkJCXJldHVybjsKKwkJZXJyY29kZSA9IGV4dDJmc19ibWFwMihjdXJyZW50X2ZzLCBpbm9kZSwgMCwgMCwgMCwKKwkJCQkgICAgICAgYmxvY2ssIDAsICZibG9jayk7CisJCWlmIChlcnJjb2RlKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIGVycmNvZGUsCisJCQkJIndoaWxlIG1hcHBpbmcgbG9naWNhbCBibG9jayAlbGx1XG4iLCBibG9jayk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlidWYgPSBtYWxsb2MoY3VycmVudF9mcy0+YmxvY2tzaXplKTsKKwlpZiAoIWJ1ZikgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJDb3VsZG4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIiKTsKKwkJcmV0dXJuOworCX0KKworCWVycmNvZGUgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoY3VycmVudF9mcy0+aW8sIGJsb2NrLCAxLCBidWYpOworCWlmIChlcnJjb2RlKSB7CisJCWNvbV9lcnIoYXJndlswXSwgZXJyY29kZSwKKwkJCSJ3aGlsZSByZWFkaW5nIGJsb2NrICVsbHVcbiIsIGJsb2NrKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJaWYgKGJpdCA+PSAwKQorCQlidWZbYml0ID4+IDNdIF49IDEgPDwgKGJpdCAmIDcpOworCWVsc2UKKwkJbWVtc2V0KGJ1ZitvZmZzZXQsIHBhdHRlcm4sIGxlbmd0aCk7CisKKwllcnJjb2RlID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChjdXJyZW50X2ZzLT5pbywgYmxvY2ssIDEsIGJ1Zik7CisJaWYgKGVycmNvZGUpIHsKKwkJY29tX2Vycihhcmd2WzBdLCBlcnJjb2RlLAorCQkJIndoaWxlIHdyaXRlIGJsb2NrICVsbHVcbiIsIGJsb2NrKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCitlcnJvdXQ6CisJZnJlZShidWYpOworCXJldHVybjsKK30KKwordm9pZCBkb19ibG9ja19kdW1wKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdW5zaWduZWQgY2hhcgkqYnVmOworCWV4dDJfaW5vX3QJaW5vZGU7CisJZXJyY29kZV90CWVycmNvZGU7CisJYmxrNjRfdAkJYmxvY2s7CisJY2hhcgkJKmZpbGUgPSBOVUxMOworCXVuc2lnbmVkIGludAlpLCBqOworCWludAkJYywgZXJyOworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCXJlc2V0X2dldG9wdCgpOworCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgImY6IikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnZic6CisJCQlmaWxlID0gb3B0YXJnOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWdvdG8gcHJpbnRfdXNhZ2U7CisJCX0KKwl9CisKKwlpZiAoYXJnYyAhPSBvcHRpbmQgKyAxKSB7CisJcHJpbnRfdXNhZ2U6CisJCWNvbV9lcnIoMCwgMCwgIlVzYWdlOiBibG9ja19kdW1wIFstZiBpbm9kZV0gYmxvY2tfbnVtIik7CisJCXJldHVybjsKKwl9CisKKwlibG9jayA9IHBhcnNlX3Vsb25nbG9uZyhhcmd2W29wdGluZF0sIGFyZ3ZbMF0sICJibG9jayIsICZlcnIpOworCWlmIChlcnIpCisJCXJldHVybjsKKworCWlmIChmaWxlKSB7CisJCWlub2RlID0gc3RyaW5nX3RvX2lub2RlKGZpbGUpOworCQlpZiAoIWlub2RlKQorCQkJcmV0dXJuOworCQllcnJjb2RlID0gZXh0MmZzX2JtYXAyKGN1cnJlbnRfZnMsIGlub2RlLCAwLCAwLCAwLAorCQkJCSAgICAgICBibG9jaywgMCwgJmJsb2NrKTsKKwkJaWYgKGVycmNvZGUpIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgZXJyY29kZSwKKwkJCQkid2hpbGUgbWFwcGluZyBsb2dpY2FsIGJsb2NrICVsbHVcbiIsIGJsb2NrKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWJ1ZiA9IG1hbGxvYyhjdXJyZW50X2ZzLT5ibG9ja3NpemUpOworCWlmICghYnVmKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgIkNvdWxkbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciIpOworCQlyZXR1cm47CisJfQorCisJZXJyY29kZSA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChjdXJyZW50X2ZzLT5pbywgYmxvY2ssIDEsIGJ1Zik7CisJaWYgKGVycmNvZGUpIHsKKwkJY29tX2Vycihhcmd2WzBdLCBlcnJjb2RlLAorCQkJIndoaWxlIHJlYWRpbmcgYmxvY2sgJWxsdVxuIiwgYmxvY2spOworCQlnb3RvIGVycm91dDsKKwl9CisKKwlkb19ieXRlX2hleGR1bXAoc3Rkb3V0LCBidWYsIGN1cnJlbnRfZnMtPmJsb2Nrc2l6ZSk7CitlcnJvdXQ6CisJZnJlZShidWYpOworfQorCit2b2lkIGRvX2J5dGVfaGV4ZHVtcChGSUxFICpmcCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSkKK3sKKwlzaXplX3QJCWksIGo7CisJaW50CQlzdXBwcmVzcyA9IC0xOworCisJZm9yIChpID0gMDsgaSA8IGJ1ZnNpemU7IGkgKz0gMTYpIHsKKwkJaWYgKHN1cHByZXNzIDwgMCkgeworCQkJaWYgKGkgJiYgbWVtY21wKGJ1ZiArIGksIGJ1ZiArIGkgLSAxNiwgMTYpID09IDApIHsKKwkJCQlzdXBwcmVzcyA9IGk7CisJCQkJZnByaW50ZihmcCwgIipcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKG1lbWNtcChidWYgKyBpLCBidWYgKyBzdXBwcmVzcywgMTYpID09IDApCisJCQkJY29udGludWU7CisJCQlzdXBwcmVzcyA9IC0xOworCQl9CisJCWZwcmludGYoZnAsICIlMDRvICAiLCAodW5zaWduZWQgaW50KWkpOworCQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykgeworCQkJZnByaW50ZihmcCwgIiUwMngiLCBidWZbaStqXSk7CisJCQlpZiAoKGogJSAyKSA9PSAxKQorCQkJCWZwcmludGYoZnAsICIgIik7CisJCX0KKwkJZnByaW50ZihmcCwgIiAiKTsKKwkJZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCisJCQlmcHJpbnRmKGZwLCAiJWMiLCBpc3ByaW50KGJ1ZltpK2pdKSA/IGJ1ZltpK2pdIDogJy4nKTsKKwkJZnByaW50ZihmcCwgIlxuIik7CisJfQorCWZwcmludGYoZnAsICJcbiIpOworfQpkaWZmIC0tZ2l0IGEvZGVwZml4LnNlZCBiL2RlcGZpeC5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyZDc5ZgotLS0gL2Rldi9udWxsCisrKyBiL2RlcGZpeC5zZWQKQEAgLTAsMCArMSwzNSBAQAorIworIyBJbnNlcnQgdGhlIGhlYWRlci4uLi4uCisjCisxaVwKKyMgKysrIERlcGVuZGVuY3kgbGluZSBlYXRlciArKytcCisjIFwKKyMgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvbGxvdy4gIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBzZWN0aW9uIGluXAorIyB0aGUgTWFrZWZpbGUuaW4gZmlsZVwKKyMKKworIworIyBSZW1vdmUgbGluZSBjb250aW51YXRpb25zLi4uLgorIworOkZJUlNUCit5LwkvIC8KK3MvXiAqLy8KKy9cXCQveworTgoreS8JLyAvCitzL1xcXG4gKi8gLworYkZJUlNUCit9CitzLyAgKi8gL2cKKworczsvdXNyL2luY2x1ZGUvW14gXSogKjs7ZworczsvdXNyL2xpYi9bXiBdKiAqOztnCitzOy9taXQvY3lnbnVzW14gXSogKjs7ZworcztcLlwuL1teIF0qbGliL2Jsa2lkL2Jsa2lkW14gXSogKjs7ZworcztcLlwuL1teIF0qbGliL3V1aWQvdXVpZC5oW14gXSogKjs7ZworCisjCisjIE5vdyBpbnNlcnQgYSB0cmFpbGluZyBuZXdsaW5lLi4uCisjCiskYVwKKwpkaWZmIC0tZ2l0IGEvZG9jL01ha2VmaWxlLmluIGIvZG9jL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYjI2MTIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw4NCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGRvYyBkaXJlY3RvcnkKKyMKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3RvcF9idWlsZGRpciA9IC4uCitteV9kaXIgPSBkb2MKK0lOU1RBTEwgPSBASU5TVEFMTEAKKworQE1DT05GSUdACisKK0RWST10ZXhpMmR2aQorRFZJUFM9ZHZpcHMgLW8gIiRAIgorSU5GTz1ATUFLRUlORk9ACitIVE1MPW1ha2VpbmZvIC0taHRtbCAtLW5vLXNwbGl0CitQUzJQREY9cHMycGRmCisKK2FsbDo6IGxpYmV4dDJmcy5pbmZvIGxpYmV4dDJmcy5kdmkgbGliZXh0MmZzLmh0bWwKKworaW5zdGFsbC1kb2MtbGliczogbGliZXh0MmZzLmluZm8gbGliZXh0MmZzLmR2aQorCSQoUSkgJChSTSkgLXJmICQoREVTVERJUikkKGluZm9kaXIpL2xpYmV4dDJmcy5pbmZvKgorCSQoRSkgIglNS0lOU1RBTExESVJTICQoaW5mb2RpcikiCisJJChRKSAkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKGluZm9kaXIpCisJLSQoUSkgZm9yIGkgaW4gbGliZXh0MmZzLmluZm8qIDsgZG8gXAorCQllY2hvICIJSU5TVEFMTF9EQVRBICQoaW5mb2RpcikvJCRpIiA7IFwKKwkJJChJTlNUQUxMX0RBVEEpICQkaSAkKERFU1RESVIpJChpbmZvZGlyKS8kJGkgOyBcCisJZG9uZQorCSQoRSkgIglHWklQICQoaW5mb2RpcikvbGliZXh0MmZzLmluZm8qIgorCS0kKFEpIGd6aXAgLTkgJChERVNURElSKSQoaW5mb2RpcikvbGliZXh0MmZzLmluZm8qCisKK3VuaW5zdGFsbC1kb2MtbGliczoKKwkkKFJNKSAtcmYgJChERVNURElSKSQoaW5mb2RpcikvbGliZXh0MmZzLmluZm8qCisKK2xpYmV4dDJmcy5pbmZvOiAkKHNyY2RpcikvbGliZXh0MmZzLnRleGluZm8KKwkkKEUpICIJTUFLRUlORk8gJEAiCisJLSQoUSkgJChJTkZPKSAkKHNyY2RpcikvbGliZXh0MmZzLnRleGluZm8KKworbGliZXh0MmZzLmR2aTogJChzcmNkaXIpL2xpYmV4dDJmcy50ZXhpbmZvCisJJChFKSAiCVRFWEkyRFZJICRAIgorCS0kKFEpICQoRFZJKSAkKHNyY2RpcikvbGliZXh0MmZzLnRleGluZm8KKworbGliZXh0MmZzLnBzOiBsaWJleHQyZnMuZHZpCisJJChFKSAiCURWSVBTICRAIgorCS0kKFEpICQoRFZJUFMpIGxpYmV4dDJmcy5kdmkKKworbGliZXh0MmZzLnBkZjogbGliZXh0MmZzLnBzCisJJChFKSAiCVBTMlBERiAkQCIKKwktJChRKSAkKFBTMlBERikgbGliZXh0MmZzLnBzCisKK2xpYmV4dDJmcy5odG1sOiAkKHNyY2RpcikvbGliZXh0MmZzLnRleGluZm8KKwkkKEUpICIJVEVYSTJIVE1MICRAIgorCS0kKFEpICQoSFRNTCkgJChzcmNkaXIpL2xpYmV4dDJmcy50ZXhpbmZvCisKKy5QSE9OWTogZGlzdGNsZWFuCitkaXN0Y2xlYW46OiBjbGVhbgorCSQoUk0pIC1mIE1ha2VmaWxlCisKKy5QSE9OWTogY2xlYW4KK2NsZWFuOjogY2xlYW4tYWxsCisKKy5QSE9OWTogY2xlYW4tYWxsCitjbGVhbi1hbGw6OiBjbGVhbi10ZXggY2xlYW4tYmFja3VwIGNsZWFuLWZpbmFsIGNsZWFuLXRhcmZpbGVzIGNsZWFuLWh0bWwKKworLlBIT05ZOiBjbGVhbi1maW5hbAorY2xlYW4tZmluYWw6OgorCSQoUk0pIC1mICoucHMgKi5pbmZvICouaW5mby0/ICouaHRtbCAqLnBkZgorCisuUEhPTlk6IGNsZWFuLXRleAorY2xlYW4tdGV4OjoKKwkkKFJNKSAtZiAqLmF1eCAqLmNwICouZHZpICouZm4gKi5reSAqLmxvZyAqLnBnICoudG9jICoudHAgKi52ciAqLmZucworCisuUEhPTlk6IGNsZWFuLWJhY2t1cAorY2xlYW4tYmFja3VwOjoKKwkkKFJNKSAtZiAqfiAjKgorCisuUEhPTlk6IGNsZWFuLXRhcmZpbGVzCitjbGVhbi10YXJmaWxlczo6CisJJChSTSkgLWYgKi50YXIgKi50YXIuZ3ogKi50Z3oKKworY2xlYW4taHRtbDo6CisJJChSTSkgLWYgKi5odG1sCisKZGlmZiAtLWdpdCBhL2RvYy9saWJibGtpZC50eHQgYi9kb2MvbGliYmxraWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZWExYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvbGliYmxraWQudHh0CkBAIC0wLDAgKzEsNzggQEAKK2xpYmJsa2lkIC0gYSBsaWJyYXJ5IHRvIGhhbmRsZSBkZXZpY2UgaWRlbnRpZmljYXRpb24gYW5kIHRva2VuIGV4dHJhY3Rpb24KKworQmFzaWMgdXNhZ2UgaXMgYXMgZm9sbG93cyAtIHRoZXJlIGFyZSB0d28gbm9ybWFsIHVzYWdlIHBhdHRlcm5zOgorCitGb3IgY2FzZXMgd2hlcmUgYSBwcm9ncmFtIHdhbnRzIGluZm9ybWF0aW9uIGFib3V0IG11bHRpcGxlIGRldmljZXMsIG9yCitleHBlY3RzIHRvIGJlIGRvaW5nIG11bHRpcGxlIHRva2VuIHNlYXJjaGVzLCB0aGUgcHJvZ3JhbSBzaG91bGQKK2RpcmVjdGx5IGluaXRpYWxpemUgY2FjaGUgZmlsZSB2aWEgKHNlY29uZCBwYXJhbWV0ZXIgaXMgY2FjaGUKK2ZpbGVuYW1lLCBOVUxMID0gZGVmYXVsdCk6CisKKwlibGtpZF9jYWNoZSBjYWNoZSA9IE5VTEw7CisJaWYgKGJsa2lkX2dldF9jYWNoZSgmY2FjaGUsIE5VTEwpIDwgMCkKKwkJLyogZXJyb3IgcmVhZGluZyB0aGUgY2FjaGUgZmlsZSwgbm90IHJlYWxseSBmYXRhbCAqLworCitOb3RlIHRoYXQgaWYgbm8gY2FjaGUgZmlsZSBleGlzdHMsIGFuIGVtcHR5IGNhY2hlIHN0cnVjdCBpcyBzdGlsbAorYWxsb2NhdGVkLiAgVXNhZ2Ugb2YgbGliYmxraWQgZnVuY3Rpb25zIHdpbGwgdXNlIHRoZSBjYWNoZSB0byBhdm9pZAorbmVlZGxlc3MgZGV2aWNlIHNjYW5zLgorCitUaGUgbW9kZWwgb2YgdGhlIGJsa2lkIGNhY2hlIGlzIHRoYXQgZWFjaCBkZXZpY2UgaGFzIGEgbnVtYmVyIG9mCithdHRyaWJ1dGVzIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBpdC4gIEN1cnJlbnRseSB0aGUgYXR0cmlidXRlcword2hpY2ggYXJlIHN1cHBvcnRlZCAoYW5kIHNldCkgYnkgYmxraWQgYXJlOgorCisJVFlQRQkJZmlsZXN5c3RlbSB0eXBlCisJVVVJRAkJZmlsZXN5c3RlbSB1dWlkCisJTEFCRUwJCWZpbGVzeXN0ZW0gbGFiZWwKKworCitIb3cgdG8gdXNlIGxpYmJsa2lkPyAgTm9ybWFsbHksIHlvdSBlaXRoZXIgd2FudCB0byBmaW5kIGEgZGV2aWNlIHdpdGgKK2Egc3BlY2lmaWMgTkFNRT12YWx1ZSB0b2tlbiwgb3IgeW91IHdhbnQgdG8gb3V0cHV0IHRva2VuKHMpIGZyb20gYQorZGV2aWNlLiAgVG8gZmluZCBhIGRldmljZSB0aGF0IG1hdGNoZXMgYSBmb2xsb3dpbmcgYXR0cmlidXRlLCB5b3UKK3NpbXBseSBjYWxsIHRoZSBibGtpZF9nZXRfZGV2bmFtZSgpIGZ1bmN0aW9uOiAKKworCWlmICgoZGV2bmFtZSA9IGJsa2lkX2dldF9kZXZuYW1lKGNhY2hlLCBhdHRyaWJ1dGVfbmFtZSwgdmFsdWUpKSkgeworCQkvKiBkbyBzb21ldGhpbmcgd2l0aCBkZXZuYW1lICovCisJCXN0cmluZ19mcmVlKGRldm5hbWUpOworCX0KKworVGhlIGNhY2hlIHBhcmFtZXRlciBpcyBvcHRpb25hbDsgaWYgaXQgaXMgTlVMTCwgdGhlbiB0aGUgYmxraWQgbGlicmFyeQord2lsbCBsb2FkIHRoZSBkZWZhdWx0IGJsa2lkLnRhYiBjYWNoZSBmaWxlLCBhbmQgdGhlbiByZWxlYXNlIHRoZSBjYWNoZQorYmVmb3JlIGZ1bmN0aW9uIGNhbGwgcmV0dXJucy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gYWxsb2NhdGVkIHN0cmluZword2hpY2ggaG9sZHMgdGhlIHJlc3VsdGluZyBkZXZpY2UgbmFtZSAoaWYgaXQgaXMgZm91bmQpLiAgSWYgdGhlIHZhbHVlCitpcyBOVUxMLCB0aGVuIGF0dHJpYnV0ZV9uYW1lIGlzIHBhcnNlZCBhcyBpZiBpdCB3ZXJlCisiPGF0dHJpYnV0ZV9uYW1lPj08dmFsdWU+IjsgaWYgaXQgY2Fubm90IGJlIHNvIHBhcnNlZCwgdGhlbiB0aGUKK29yaWdpbmFsIGF0dHJpYnV0ZV9uYW1lIGlzIHJldHVybmVkIGluIGEgY29waWVkIGFsbG9jYXRlZCBzdHJpbmcuCitUaGlzIGlzIGEgY29udmVuaWVuY2UgdG8gYWxsb3cgdXNlciBwcm9ncmFtcyB0byB3YW50IHRvIHRyYW5zbGF0ZSB1c2VyCitpbnB1dCwgd2hldGhlciBpdCBpcyBvZiB0aGUgZm9ybTogIi9kZXYvaGRhMSIsICJMQUJFTD1yb290IiwKKyJVVUlEPTA4MkQtMjZFMyIsIGFuZCBnZXQgYmFjayBhIGRldmljZSBuYW1lIHRoYXQgaXQgY2FuIHVzZS4KKworQWx0ZXJuYXRpdmVseSwgb2YgY291cnNlLCB0aGUgcHJvZ3JhbW1lciBjYW4gcGFzcyBhbiBhdHRyaWJ1dGUgbmFtZSBvZgorIkxBQkVMIiwgYW5kIHZhbHVlIG9mICJyb290IiwgaWYgdGhhdCBpcyBtb3JlIGNvbnZlbmllbnQuCisKK0Fub3RoZXIgY29tbW9uIHVzYWdlIGlzIHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBvZiBhIHNwZWNpZmljIGF0dHJpYnV0ZQorZm9yIGEgcGFydGljdWxhciBkZXZpY2UuICBUaGlzIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgZmlsZXN5c3RlbQordHlwZSwgb3IgbGFiZWwsIG9yIHV1aWQgZm9yIGEgcGFydGljdWxhciBkZXZpY2U6CisKKwlpZiAoKHZhbHVlID0gYmxraWRfZ2V0X3RhZ192YWx1ZShjYWNoZSwgYXR0cmlidXRlX25hbWUsIGRldm5hbWUpKSkgeworCQkvKiBkbyBzb21ldGhpbmcgd2l0aCB2YWx1ZSAqLworCQlzdHJpbmdfZnJlZSh2YWx1ZSk7CisJfQorCitJZiBhIHByb2dyYW0gbmVlZHMgdG8gY2FsbCBtdWx0aXBsZSBibGtpZCBmdW5jdGlvbnMsIHRoZW4gcGFzc2luZyBpbiBhCitjYWNoZSB2YWx1ZSBvZiBOVUxMIGlzIG5vdCByZWNvbW1lbmRlZCwgc2luY2UgdGhlIC9ldGMvYmxraWQudGFiIGZpbGUKK3dpbGwgYmUgcmVwZWF0ZWRseSBwYXJzZWQgb3ZlciBhbmQgb3ZlciBhZ2Fpbiwgd2l0aCBtZW1vcnkgYWxsb2NhdGVkCithbmQgZGVhbGxvY2F0ZWQuICBUbyBpbml0aWFsaXplIHRoZSBibGtpZCBjYWNoZSwgYmxraWRfZ2V0X2NhY2hlKCkKK2Z1bmN0aW9uIGlzIHVzZWQ6CisKKwlpZiAoYmxraWRfZ2V0X2NhY2hlKCZjYWNoZSwgTlVMTCkgPCAwKQorCQlnb3RvIGVycm91dDsKKworVGhlIHNlY29uZCBwYXJhbWV0ZXIgb2YgYmxraWRfZ2V0X2NhY2hlIChpZiBub24temVybykgaXMgdGhlIGFsdGVybmF0ZQorZmlsZW5hbWUgb2YgdGhlIGJsa2lkIGNhY2hlIGZpbGUgKHdoZXJlIHRoZSBkZWZhdWx0IGlzCisvZXRjL2Jsa2lkLnRhYikuICBOb3JtYWxseSwgcHJvZ3JhbXMgc2hvdWxkIGp1c3QgcGFzcyBpbiBOVUxMLgorCitJZiB5b3UgaGF2ZSBjYWxsZWQgYmxraWRfZ2V0X2NhY2hlKCksIHlvdSBzaG91bGQgY2FsbCBibGtpZF9wdXRfY2FjaGUoKQord2hlbiB5b3UgYXJlIGRvbmUgdXNpbmcgdGhlIGJsa2lkIGxpYnJhcnkgZnVuY3Rpb25zLiAgVGhpcyB3aWxsIHNhdmUgdGhlCitjYWNoZSB0byB0aGUgYmxraWQudGFiIGZpbGUsIGlmIHlvdSBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGUgZmlsZS4gIEl0Cit3aWxsIGFsc28gZnJlZSBhbGwgYXNzb2NpYXRlZCBkZXZpY2VzIGFuZCB0YWdzOgorCisJYmxraWRfcHV0X2NhY2hlKGNhY2hlKTsgCmRpZmYgLS1naXQgYS9kb2MvbGliZXh0MmZzLnRleGluZm8gYi9kb2MvbGliZXh0MmZzLnRleGluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2OTlmZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9saWJleHQyZnMudGV4aW5mbwpAQCAtMCwwICsxLDEzNzQgQEAKK1xpbnB1dCB0ZXhpbmZvICAgIEBjIC0qLXRleGluZm8tKi0KK0BjICUqKnN0YXJ0IG9mIGhlYWRlcgorQHNldGZpbGVuYW1lIGxpYmV4dDJmcy5pbmZvCitAc2V0dGl0bGUgVGhlIEVYVDJGUyBMaWJyYXJ5ICh2ZXJzaW9uIDEuNDIuMTMpCitAc3luaW5kZXggdHAgZm4KK0Bjb21tZW50ICUqKmVuZCBvZiBoZWFkZXIKKworQGlmaW5mbworQGRpcmNhdGVnb3J5IERldmVsb3BtZW50CitAZGlyZW50cnkKKyogbGliZXh0MmZzOiAobGliZXh0MmZzKS4gICAgICAgICAgICAgICAgICBUaGUgRVhUMkZTIGxpYnJhcnkuCitAZW5kIGRpcmVudHJ5CitAZW5kIGlmaW5mbworCitAYyBzbWFsbGJvb2sKKworQGlmdGV4CitAZmluYWxvdXQKK0BlbmQgaWZ0ZXgKKworQGMgTm90ZTogdGhlIGVkaXRpb24gbnVtYmVyIGlzIGxpc3RlZCBpbiAqdGhyZWUqIHBsYWNlczsgcGxlYXNlIHVwZGF0ZQorQGMgYWxsIHRocmVlLiAgQWxzbywgdXBkYXRlIHRoZSBtb250aCBhbmQgeWVhciB3aGVyZSBhcHByb3ByaWF0ZS4KKworQGMgPT0+IFVwZGF0ZSBlZGl0aW9uIG51bWJlciBmb3Igc2V0dGl0bGUgYW5kIHN1YnRpdGxlLCBhbmQgaW4gdGhlCitAYyA9PT4gZm9sbG93aW5nIHBhcmFncmFwaDsgdXBkYXRlIGRhdGUsIHRvby4KKworCitAaWZpbmZvCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBleHQyZnMgbGlicmFyeSwgYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgdGhlCitleHQyIGZpbGVzeXN0ZW0uCisKK0NvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKzIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgYnkgVGhlb2RvcmUgVHMnbworCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YKK3RoaXMgbWFudWFsIHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCithcmUgcHJlc2VydmVkIG9uIGFsbCBjb3BpZXMuCisKK0BpZ25vcmUKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBwcm9jZXNzIHRoaXMgZmlsZSB0aHJvdWdoIFRlWCBhbmQgcHJpbnQgdGhlCityZXN1bHRzLCBwcm92aWRlZCB0aGUgcHJpbnRlZCBkb2N1bWVudCBjYXJyaWVzIGNvcHlpbmcgcGVybWlzc2lvbgorbm90aWNlIGlkZW50aWNhbCB0byB0aGlzIG9uZSBleGNlcHQgZm9yIHRoZSByZW1vdmFsIG9mIHRoaXMgcGFyYWdyYXBoCisodGhpcyBwYXJhZ3JhcGggbm90IGJlaW5nIHJlbGV2YW50IHRvIHRoZSBwcmludGVkIG1hbnVhbCkuCisKK0BlbmQgaWdub3JlCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzCittYW51YWwgdW5kZXIgdGhlIGNvbmRpdGlvbnMgZm9yIHZlcmJhdGltIGNvcHlpbmcsIHByb3ZpZGVkIHRoYXQgdGhlIGVudGlyZQorcmVzdWx0aW5nIGRlcml2ZWQgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgYSBwZXJtaXNzaW9uCitub3RpY2UgaWRlbnRpY2FsIHRvIHRoaXMgb25lLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhpcyBtYW51YWwKK2ludG8gYW5vdGhlciBsYW5ndWFnZSwgdW5kZXIgdGhlIGFib3ZlIGNvbmRpdGlvbnMgZm9yIG1vZGlmaWVkIHZlcnNpb25zLAorZXhjZXB0IHRoYXQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBtYXkgYmUgc3RhdGVkIGluIGEgdHJhbnNsYXRpb24gYXBwcm92ZWQKK2J5IHRoZSBhdXRob3IuCitAZW5kIGlmaW5mbworCitAc2V0Y2hhcHRlcm5ld3BhZ2Ugb24KK0B0aXRsZXBhZ2UKK0BjICB1c2UgdGhlIG5ldyBmb3JtYXQgZm9yIHRpdGxlcworCitAdGl0bGUgVGhlIEVYVDJGUyBMaWJyYXJ5CitAc3VidGl0bGUgVGhlIEVYVDJGUyBMaWJyYXJ5CitAc3VidGl0bGUgVmVyc2lvbiAxLjQyLjEzCitAc3VidGl0bGUgTWF5IDIwMTUKKworQGF1dGhvciBieSBUaGVvZG9yZSBUcydvCisKK0BjIEluY2x1ZGUgdGhlIERpc3RyaWJ1dGlvbiBpbnNpZGUgdGhlIHRpdGxlcGFnZSBzbworQGMgdGhhdCBoZWFkaW5ncyBhcmUgdHVybmVkIG9mZi4KKworQHRleAorXGdsb2JhbFxwYXJpbmRlbnQ9MHB0CitcZ2xvYmFsXHBhcnNraXA9OHB0CitcZ2xvYmFsXGJhc2VsaW5lc2tpcD0xM3B0CitAZW5kIHRleAorCitAcGFnZQorQHZza2lwIDBwdCBwbHVzIDFmaWxsbAorQ29weXJpZ2h0IEBjb3B5cmlnaHR7fSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBUaGVvZG9yZSBUcydvCisKK0BzcCAyCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBtYWtlIGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZgordGhpcyBtYW51YWwgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKK2FyZSBwcmVzZXJ2ZWQgb24gYWxsIGNvcGllcy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcworbWFudWFsIHVuZGVyIHRoZSBjb25kaXRpb25zIGZvciB2ZXJiYXRpbSBjb3B5aW5nLCBwcm92aWRlZCB0aGF0IHRoZSBlbnRpcmUKK3Jlc3VsdGluZyBkZXJpdmVkIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEgcGVybWlzc2lvbgorbm90aWNlIGlkZW50aWNhbCB0byB0aGlzIG9uZS4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoaXMgbWFudWFsCitpbnRvIGFub3RoZXIgbGFuZ3VhZ2UsIHVuZGVyIHRoZSBhYm92ZSBjb25kaXRpb25zIGZvciBtb2RpZmllZCB2ZXJzaW9ucywKK2V4Y2VwdCB0aGF0IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgbWF5IGJlIHN0YXRlZCBpbiBhIHRyYW5zbGF0aW9uIGFwcHJvdmVkCitieSB0aGUgRm91bmRhdGlvbi4KK0BlbmQgdGl0bGVwYWdlCitAaGVhZGluZ3MgZG91YmxlCisKK0Bub2RlIFRvcCwgSW50cm9kdWN0aW9uIHRvIHRoZSBFWFQyRlMgTGlicmFyeSwgKGRpciksIChkaXIpCisKK0B0b3AgVGhlIEVYVDJGUyBMaWJyYXJ5CisKK1RoaXMgbWFudWFsIGRvY3VtZW50cyB0aGUgRVhUMkZTIExpYnJhcnksIHZlcnNpb24gMS40Mi4xMy4KKworQG1lbnUKKyogSW50cm9kdWN0aW9uIHRvIHRoZSBFWFQyRlMgTGlicmFyeTo6ICAKKyogRVhUMkZTIExpYnJhcnkgRnVuY3Rpb25zOjogICAgCisqIENvbmNlcHQgSW5kZXg6OiAgICAgICAgICAgICAgIAorKiBGdW5jdGlvbiBJbmRleDo6ICAgICAgICAgICAgICAKK0BlbmQgbWVudQorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIEludHJvZHVjdGlvbiB0byB0aGUgRVhUMkZTIExpYnJhcnksIEVYVDJGUyBMaWJyYXJ5IEZ1bmN0aW9ucywgVG9wLCBUb3AKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQGNoYXB0ZXIgSW50cm9kdWN0aW9uIHRvIHRoZSBFWFQyRlMgTGlicmFyeQorCitUaGUgRVhUMkZTIGxpYnJhcnkgaXMgZGVzaWduZWQgdG8gYWxsb3cgdXNlci1sZXZlbCBwcm9ncmFtcyB0bworbWFuaXB1bGF0ZSBhbiBleHQyIGZpbGVzeXN0ZW0uCisKK0Bub2RlIEVYVDJGUyBMaWJyYXJ5IEZ1bmN0aW9ucywgQ29uY2VwdCBJbmRleCwgSW50cm9kdWN0aW9uIHRvIHRoZSBFWFQyRlMgTGlicmFyeSwgVG9wCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BjaGFwdGVyIEVYVDJGUyBMaWJyYXJ5IEZ1bmN0aW9ucworCitAbWVudQorKiBGaWxlc3lzdGVtLWxldmVsIGZ1bmN0aW9uczo6ICAKKyogRmlsZSBJL08gRnVuY3Rpb25zOjogICAgICAgICAgCisqIElub2RlIEZ1bmN0aW9uczo6ICAgICAgICAgICAgIAorKiBEaXJlY3RvcnkgZnVuY3Rpb25zOjogICAgICAgICAKKyogQml0bWFwIEZ1bmN0aW9uczo6ICAgICAgICAgICAgCisqIEVYVDIgZGF0YSBhYnN0cmFjdGlvbnM6OiAgICAgIAorKiBCeXRlLXN3YXBwaW5nIGZ1bmN0aW9uczo6ICAgICAKKyogT3RoZXIgZnVuY3Rpb25zOjogICAgICAgICAgICAgCitAZW5kIG1lbnUKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBGaWxlc3lzdGVtLWxldmVsIGZ1bmN0aW9ucywgRmlsZSBJL08gRnVuY3Rpb25zLCBFWFQyRlMgTGlicmFyeSBGdW5jdGlvbnMsIEVYVDJGUyBMaWJyYXJ5IEZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc2VjdGlvbiBGaWxlc3lzdGVtLWxldmVsIGZ1bmN0aW9ucworCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIGEgZmlsZXN5c3RlbSBoYW5kbGUuICBNb3N0IEVYVDJGUworTGlicmFyeSBmdW5jdGlvbnMgcmVxdWlyZSBhIGZpbGVzeXN0ZW0gaGFuZGxlIGFzIHRoZWlyIGZpcnN0IGFyZ3VtZW50LgorVGhlcmUgYXJlIHR3byBmdW5jdGlvbnMgd2hpY2ggY3JlYXRlIGEgZmlsZXN5c3RlbSBoYW5kbGUsCitAY29kZXtleHQyZnNfb3Blbn0gYW5kIEBjb2Rle2V4dDJmc19pbml0aWFsaXplfS4gIAorCitUaGUgZmlsZXN5c3RlbSBjYW4gYWxzbyBiZSBjbG9zZWQgdXNpbmcgQGNvZGV7ZXh0MmZzX2Nsb3NlfSwgYW5kIGFueQorY2hhbmdlcyB0byB0aGUgc3VwZXJibG9jayBhbmQgZ3JvdXAgZGVzY3JpcHRzIGNhbiBiZSB3cml0dGVuIG91dCB0byBkaXNrCit1c2luZyBAY29kZXtleHQyZnNfZmx1c2h9LgorCitAbWVudQorKiBPcGVuaW5nIGFuIGV4dDIgZmlsZXN5c3RlbTo6ICAKKyogQ2xvc2luZyBhbmQgZmx1c2hpbmcgb3V0IGNoYW5nZXM6OiAgCisqIEluaXRpYWxpemluZyBhIGZpbGVzeXN0ZW06OiAgIAorKiBGaWxlc3lzdGVtIGZsYWcgZnVuY3Rpb25zOjogICAKK0BlbmQgbWVudQorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIE9wZW5pbmcgYW4gZXh0MiBmaWxlc3lzdGVtLCBDbG9zaW5nIGFuZCBmbHVzaGluZyBvdXQgY2hhbmdlcywgRmlsZXN5c3RlbS1sZXZlbCBmdW5jdGlvbnMsIEZpbGVzeXN0ZW0tbGV2ZWwgZnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIE9wZW5pbmcgYW4gZXh0MiBmaWxlc3lzdGVtCisKK01vc3QgbGliZXh0MmZzIGZ1bmN0aW9ucyB0YWtlIGEgZmlsZXN5c3RlbSBoYW5kbGUgb2YgdHlwZQorQGNvZGV7ZXh0Ml9maWxzeXN9LiAgQSBmaWxlc3lzdGVtIGhhbmRsZSBpcyBjcmVhdGVkIGVpdGhlciBieSBvcGVuaW5nCithbiBleGlzdGluZyBmdW5jdGlvbiB1c2luZyBAY29kZXtleHQyZnNfb3Blbn0sIG9yIGJ5IGluaXRpYWxpemluZyBhIG5ldworZmlsZXN5c3RlbSB1c2luZyBAY29kZXtleHQyZnNfaW5pdGlhbGl6ZX0uCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfb3BlbiAoY29uc3QgY2hhciAqQHZhcntuYW1lfSwgaW50IEB2YXJ7ZmxhZ3N9LCBpbnQgQHZhcntzdXBlcmJsb2NrfSwgaW50IEB2YXJ7YmxvY2tfc2l6ZX0sIGlvX21hbmFnZXIgQHZhcnttYW5hZ2VyfSwgZXh0Ml9maWxzeXMgKkB2YXJ7cmV0X2ZzfSkKKworT3BlbnMgYSBmaWxlc3lzdGVtIG5hbWVkIEB2YXJ7bmFtZX0sIHVzaW5nIHRoZSB0aGUgaW9fbWFuYWdlcgorQHZhcnttYW5hZ2VyfSB0byBkZWZpbmUgdGhlIGlucHV0L291dHB1dCByb3V0aW5lcyBuZWVkZWQgdG8gcmVhZCBhbmQKK3dyaXRlIHRoZSBmaWxlc3lzdGVtLiAgSW4gdGhlIGNhc2Ugb2YgdGhlIEBjb2Rle3VuaXhfaW99IGlvX21hbmFnZXIsCitAdmFye25hbWV9IGlzIGludGVycHJldGVkIGFzIHRoZSBVbml4IGZpbGVuYW1lIG9mIHRoZSBmaWxlc3lzdGVtIGltYWdlLgorVGhpcyBpcyBvZnRlbiBhIGRldmljZSBmaWxlLCBzdWNoIGFzIEBmaWxley9kZXYvaGRhMX0uCisKK1RoZSBAdmFye3N1cGVyYmxvY2t9IHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIGJsb2NrIG51bWJlciBvZiB0aGUKK3N1cGVyYmxvY2sgd2hpY2ggc2hvdWxkIGJlIHVzZWQgd2hlbiBvcGVuaW5nIHRoZSBmaWxlc3lzdGVtLgorSWYgQHZhcntzdXBlcmJsb2NrfSBpcyB6ZXJvLCBAY29kZXtleHQyZnNfb3Blbn0gd2lsbCB1c2UgdGhlIHByaW1hcnkKK3N1cGVyYmxvY2sgbG9jYXRlZCBhdCBvZmZzZXQgMTAyNCBieXRlcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZmlsZXN5c3RlbQoraW1hZ2UuCisKK1RoZSBAdmFye2Jsb2NrX3NpemV9IHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIGJsb2NrIHNpemUgdXNlZCBieSB0aGUKK2ZpbGVzeXN0ZW0uICBOb3JtYWxseSB0aGlzIGlzIGRldGVybWluZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZQorZmlsZXN5c3RlbSB1cGVyYmxvY2suICBJZiBAdmFye2Jsb2NrX3NpemV9IGlzIG5vbi16ZXJvLCBpdCBtdXN0IG1hdGNoCit0aGUgYmxvY2sgc2l6ZSBmb3VuZCBpbiB0aGUgc3VwZXJibG9jaywgb3IgdGhlIGVycm9yCitAY29kZXtFWFQyX0VUX1VORVhQRUNURURfQkxPQ0tfU0laRX0gd2lsbCBiZSByZXR1cm5lZC4gIFRoZQorQHZhcntibG9ja19zaXplfSBwYXJhbWV0ZXIgaXMgYWxzbyB1c2VkIHRvIGhlbHAgZnVuZCB0aGUgc3VwZXJibG9jayB3aGVuCitAdmFye3N1cGVyYmxvY2t9IGlzIG5vbi16ZXJvLgorCitUaGUgQHZhcntmbGFnc30gYXJndW1lbnQgY29udGFpbnMgYSBiaXRtYXNrIG9mIGZsYWdzIHdoaWNoIGNvbnRyb2wgaG93Cit0aGUgZmlsZXN5c3RlbSBvcGVuIHNob3VsZCBiZSBoYW5kbGVkLgorCitAdGFibGUgQGNvZGUKK0BpdGVtIEVYVDJfRkxBR19SVworT3BlbiB0aGUgZmlsZXN5c3RlbSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4gIFdpdGhvdXQgdGhpcyBmbGFnLCB0aGUKK2ZpbGVzeXN0ZW0gaXMgb3BlbmVkIGZvciByZWFkaW5nIG9ubHkuCisKK0BpdGVtIEVYVDJfRkxBR19GT1JDRQorT3BlbiB0aGUgZmlsZXN5c3RlbSByZWdhcmRsZXNzIG9mIHRoZSBmZWF0dXJlIHNldHMgbGlzdGVkIGluIHRoZQorc3VwZXJibG9jay4KKworQGVuZCB0YWJsZQorQGVuZCBkZWZ0eXBlZnVuCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgQ2xvc2luZyBhbmQgZmx1c2hpbmcgb3V0IGNoYW5nZXMsIEluaXRpYWxpemluZyBhIGZpbGVzeXN0ZW0sIE9wZW5pbmcgYW4gZXh0MiBmaWxlc3lzdGVtLCBGaWxlc3lzdGVtLWxldmVsIGZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBDbG9zaW5nIGFuZCBmbHVzaGluZyBvdXQgY2hhbmdlcworCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2ZsdXNoIChleHQyX2ZpbHN5cyBAdmFye2ZzfSkKKworV3JpdGUgYW55IGNoYW5nZXMgdG8gdGhlIGhpZ2gtbGV2ZWwgZmlsZXN5c3RlbSBkYXRhIHN0cnVjdHVyZXMgaW4gdGhlCitAdmFye2ZzfSBmaWxlc3lzdGVtLiAgVGhlIGZvbGxvd2luZyBkYXRhIHN0cnVjdHVyZXMgd2lsbCBiZSB3cml0dGVuIG91dDoKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0gVGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jaworQGl0ZW0gVGhlIGZpbGVzeXN0ZW0gZ3JvdXAgZGVzY3JpcHRvcnMKK0BpdGVtIFRoZSBmaWxlc3lzdGVtIGJpdG1hcHMsIGlmIHJlYWQgaW4gdmlhIEBjb2Rle2V4dDJmc19yZWFkX2JpdG1hcHN9LgorQGVuZCBpdGVtaXplCisKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19mcmVlIChleHQyX2ZpbHN5cyBAdmFye2ZzfSkKKworQ2xvc2UgdGhlIGlvX21hbmFnZXIgYWJzdHJhY3Rpb24gZm9yIEB2YXJ7ZnN9IGFuZCByZWxlYXNlIGFsbCBtZW1vcnkKK2Fzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZXN5c3RlbSBoYW5kbGUuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19jbG9zZSAoZXh0Ml9maWxzeXMgQHZhcntmc30pCisKK0ZsdXNoIG91dCBhbnkgY2hhbmdlcyB0byB0aGUgaGlnaC1sZXZlbCBmaWxlc3lzdGVtIGRhdGEgc3RydWN0dXJlcyB1c2luZworQGNvZGV7ZXh0MmZzX2ZsdXNofSBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtYXJrZWQgZGlydHk7IHRoZW4gY2xvc2UgYW5kCitmcmVlIHRoZSBmaWxlc3lzdGVtIHVzaW5nIEBjb2Rle2V4dDJmc19mcmVlfS4KKworQGVuZCBkZWZ0eXBlZnVuCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgSW5pdGlhbGl6aW5nIGEgZmlsZXN5c3RlbSwgRmlsZXN5c3RlbSBmbGFnIGZ1bmN0aW9ucywgQ2xvc2luZyBhbmQgZmx1c2hpbmcgb3V0IGNoYW5nZXMsIEZpbGVzeXN0ZW0tbGV2ZWwgZnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIEluaXRpYWxpemluZyBhIGZpbGVzeXN0ZW0KKworQW4gZXh0MiBmaWxlc3lzdGVtIGlzIGluaXRpYWxpemluZyBieSB0aGUgQGNvZGV7bWtlMmZzfSBwcm9ncmFtLiAgVGhlCit0d28gZnVuY3Rpb25zIGRlc2NyaWJlZCBoZXJlLCBAY29kZXtleHQyZnNfaW5pdGlhbGl6ZX0gYW5kCitAY29kZXtleHQyZnNfYWxsb2NhdGVfdGFibGVzfSBkbyBtdWNoIG9mIHRoZSBpbml0aWFsIHdvcmsgZm9yIHNldHRpbmcgdXAKK2EgZmlsZXN5c3RlbS4gIEhvd2V2ZXIsIHRoZXkgZG9uJ3QgZG8gdGhlIHdob2xlIGpvYi4gIEBjb2Rle21rZTJmc30KK2NhbGxzIEBjb2Rle2V4dDJmc19pbml0aWFsaXplfSB0byBzZXQgdXAgdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jaywgYW5kCitjYWxscyBAY29kZXtleHQyZnNfYWxsb2NhdGVfdGFibGVzfSB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGlub2RlCit0YWJsZSwgYW5kIHRoZSBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcy4gIEluIGFkZGl0aW9uLCBAY29kZXtta2UyZnN9IG11c3QKK2Fsc28gaW5pdGlhbGl6ZSB0aGUgaW5vZGUgdGFibGVzIGJ5IGNsZWFyaW5nIHRoZW0gd2l0aCB6ZXJvcywgY3JlYXRlIHRoZQorcm9vdCBhbmQgbG9zdCtmb3VuZCBkaXJlY3RvcmllcywgYW5kIHJlc2VydmUgdGhlIHJlc2VydmVkIGlub2Rlcy4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19pbml0aWFsaXplIChjb25zdCBjaGFyICpAdmFye25hbWV9LCBpbnQgQHZhcntmbGFnc30sIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpAdmFye3BhcmFtfSwgaW9fbWFuYWdlciBAdmFye21hbmFnZXJ9LCBleHQyX2ZpbHN5cyAqQHZhcntyZXRfZnN9KQorCitUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIEBjb2Rle21rZTJmc30gcHJvZ3JhbSB0byBpbml0aWFsaXplIGEKK2ZpbGVzeXN0ZW0uICBUaGUgQGNvZGV7ZXh0MmZzX2luaXRpYWxpemV9IGZ1bmN0aW9uIGNyZWF0ZXMgYSBmaWxlc3lzdGVtCitoYW5kbGUgd2hpY2ggaXMgcmV0dXJuZWQgaW4gQHZhcntyZXRfZnN9IHRoYXQgaGFzIGJlZW4gcHJvcGVybHkgc2V0dXAKK2ZvciBhIGZpbGVzeXN0ZW0gdG8gYmUgbG9jYXRlZCBpbiBAdmFye25hbWV9LCB1c2luZyB0aGUgaW9fbWFuYWdlcgorQHZhcnttYW5hZ2VyfS4gIFRoZSBwcm90b3R5cGUgc3VwZXJibG9jayBpbiBAdmFye3BhcmFtfSBpcyB1c2VkIHRvCitzdXBwbHkgcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBudW1iZXIgb2YgYmxvY2tzIGluIHRoZSBmaWxlc3lzdGVtLCB0aGUKK2Jsb2NrIHNpemUsIGV0Yy4gIAorCitUaGUgQGNvZGV7ZXh0MmZzX2luaXRpYWxpemV9IGZ1bmN0aW9uIGRvZXMgbm90IGFjdHVhbGx5IGRvIGFueSBJL087IHRoYXQKK3dpbGwgYmUgZG9uZSB3aGVuIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtIGNhbGxzIEBjb2Rle2V4dDJmc19jbG9zZX0gb3IKK0Bjb2Rle2V4dDJmc19mbHVzaH0uICBBbHNvLCB0aGlzIGZ1bmN0aW9uIG9ubHkgaW5pdGlhbGl6ZXMgdGhlCitzdXBlcmJsb2NrIGFuZCBncm91cCBkZXNjcmlwdG9yIHN0cnVjdHVyZXMuICBJdCBkb2VzIG5vdCBjcmVhdGUgdGhlCitpbm9kZSB0YWJsZSBvciB0aGUgcm9vdCBkaXJlY3RvcnkuICBUaGlzIG11c3QgYmUgZG9uZSBieSB0aGUgY2FsbGluZworYXBwbGljYXRpb24sIHN1Y2ggYXMgQGNvZGV7bWtlMmZzfS4KKworVGhlIGZvbGxvd2luZyB2YWx1ZXMgbWF5IGJlIHNldCBpbiB0aGUgQHZhcntwYXJhbX0gcHJvdG90eXBlIHN1cGVyYmxvY2s7CitpZiBhIHZhbHVlIG9mIDAgaXMgZm91bmQgaW4gYSBmaWVsZCwgQGNvZGV7ZXh0MmZzX2luaXRpYWxpemV9IHdpbGwgdXNlIGEKK2RlZmF1bHQgdmFsdWUuICBUaGUgY2FsbGluZyBhcHBsaWNhdGlvbiBzaG91bGQgemVybyBvdXQgdGhlIHByb3RvdHlwZQorZW50aXJlIHN1cGVyYmxvY2ssIGFuZCB0aGVuIGZpbGwgaW4gYW55IGFwcHJvcHJpYXRlIHZhbHVlcy4KKworQHRhYmxlIEBjb2RlCisKK0BpdGVtIHNfYmxvY2tzX2NvdW50CitUaGUgbnVtYmVyIG9mIGJsb2NrcyBpbiB0aGUgZmlsZXN5c3RlbS4gIFRoaXMgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBhbmQKK211c3QgYmUgc2V0IGJ5IHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLgorCitAaXRlbSBzX2lub2Rlc19jb3VudAorVGhlIG51bWJlciBvZiBpbm9kZXMgaW4gdGhlIGZpbGVzeXN0ZW0uICBUaGUKK2RlZmF1bHQgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSBjYWxjdWxhdGluZyB0aGUgc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbSwKK2FuZCBjcmVhdGluZyBvbmUgaW5vZGUgZm9yIGV2ZXJ5IDQwOTYgYnl0ZXMuCisKK0BpdGVtIHNfcl9ibG9ja3NfY291bnQKK1RoZSBudW1iZXIgb2YgYmxvY2tzIHdoaWNoIHNob3VsZCBiZSByZXNlcnZlZCBmb3IgdGhlIHN1cGVydXNlci4gIFRoZQorZGVmYXVsdCB2YWx1ZSBpcyB6ZXJvIGJsb2Nrcy4KKworQGl0ZW0gc19sb2dfYmxvY2tfc2l6ZQorVGhlIGJsb2Nrc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbS4gIFZhbGlkIHZhbHVlcyBhcmUgMCAoMTAyNCBieXRlcyksIDEKKygyMDQ4IGJ5dGVzKSwgb3IgMiAoNDA5NiBieXRlcykuICBUaGUgZGVmYXVsdCBibG9ja3NpemUgaXMgMTAyNCBieXRlcy4KKworQGl0ZW0gc19sb2dfZnJhZ19zaXplCitUaGUgc2l6ZSBvZiBmcmFnbWVudHMuICBUaGUgZXh0MiBmaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnRzCisoYW5kIG1heSBuZXZlciBzdXBwb3J0IGZyYWdtZW50cykuICBDdXJyZW50bHkgdGhpcyBmaWVsZCBtdXN0IGJlIHRoZQorc2FtZSBhcyBAY29kZXtzX2xvZ19ibG9ja19zaXplfS4KKworQGl0ZW0gc19maXJzdF9kYXRhX2Jsb2NrCitUaGUgZmlyc3QgZGF0YSBibG9jayBmb3IgdGhlIGZpbGVzeXN0ZW0uICBGb3IgZmlsZXN5c3RlbSB3aXRoIGEKK2Jsb2Nrc2l6ZSBvZiAxMDI0IGJ5dGVzLCB0aGlzIHZhbHVlIG11c3QgYmUgYXQgbGVhc3QgMSwgc2luY2UgdGhlCitzdXBlcmJsb2NrIGlzIGxvY2F0ZWQgaW4gYmxvY2sgbnVtYmVyIDEuICBGb3IgZmlsZXN5c3RlbXMgd2l0aCBsYXJnZXIKK2Jsb2Nrc2l6ZXMsIHRoZSBzdXBlcmJsb2NrIGlzIHN0aWxsIGxvY2F0ZWQgYXQgYW4gb2Zmc2V0IG9mIDEwMjQgYnl0ZXMsCitzbyB0aGUgc3VwZXJibG9jayBpcyBsb2NhdGVkIGluIGJsb2NrIG51bWJlciAwLiAgQnkgZGVmYXVsdCwgdGhpcyB2YWx1ZQoraXMgc2V0IHRvIDEgZm9yIGZpbGVzeXN0ZW1zIHdpdGggYSBibG9jayBzaXplIG9mIDEwMjQgYnl0ZXMsIG9yIDAgZm9yCitmaWxlc3lzdGVtcyB3aXRoIGxhcmdlciBibG9ja3NpemVzLgorCitAaXRlbSBzX21heF9tbnRfY291bnQKK1RoaXMgZmllbGQgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIGZpbGVzeXN0ZW0gY2FuIGJlCittb3VudGVkIGJlZm9yZSBpdCBzaG91bGQgYmUgY2hlY2tlZCB1c2luZyBAY29kZXtlMmZzY2t9LiAgV2hlbgorQGNvZGV7ZTJmc2NrfSBpcyBydW4gd2l0aG91dCB0aGUgQHNhbXB7LWZ9IG9wdGlvbiwgQGNvZGV7ZTJmc2NrfSB3aWxsCitza2lwIHRoZSBmaWxlc3lzdGVtIGNoZWNrIGlmIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgZmlsZXN5c3RlbSBoYXMKK2JlZW4gbW91bnRlZCBpcyBsZXNzIHRoYW4gQGNvZGV7c19tYXhfbW50X2NvdW50fSBhbmQgaWYgdGhlIGludGVydmFsCitiZXR3ZWVuIHRoZSBsYXN0IHRpbWUgYSBmaWxlc3lzdGVtIGNoZWNrIHdhcyBwZXJmb3JtZWQgYW5kIHRoZSBjdXJyZW50Cit0aW1lIGlzIGxlc3MgdGhhbiBAY29kZXtzX2NoZWNraW50ZXJ2YWx9IChzZWUgYmVsb3cpLiAgVGhlIGRlZmF1bHQgdmFsdWUKK29mIEBjb2Rle3NfbWF4X21udF9jb3VudH0gaXMgMjAuCisKK0BpdGVtIHNfY2hlY2tpbnRlcnZhbAorVGhpcyBmaWVsZCBkZWZpbmVzIHRoZSBtaW5pbWFsIGludGVydmFsIGJldHdlZW4gZmlsZXN5c3RlbSBjaGVja3MuICBTZWUKK3RoZSBwcmV2aW91cyBlbnRyeSBmb3IgYSBkaXNjdXNzaW9uIG9mIGhvdyB0aGlzIGZpZWxkIGlzIHVzZWQgYnkKK0Bjb2Rle2UyZnNja30uICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIGZpZWxkIGlzIDE4MCBkYXlzIChzaXgKK21vbnRocykuCisKK0BpdGVtIHNfZXJyb3JzCitUaGlzIGZpZWxkIGRlZmluZXMgdGhlIGJlaGF2aW9yIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBrZXJuZWwgb2YKK2Vycm9ycyBhcmUgZGV0ZWN0ZWQgaW4gdGhlIGZpbGVzeXN0ZW0uICBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZToKKworQHRhYmxlIEBzYW1wCitAaXRlbSBFWFQyX0VSUk9SU19DT05USU5VRQorQ29udGludWUgZXhlY3V0aW9uIHdoZW4gZXJyb3JzIGFyZSBkZXRlY3RlZC4KKworQGl0ZW0gRVhUMl9FUlJPUlNfUk8KK1JlbW91bnQgdGhlIGZpbGVzeXN0ZW0gcmVhZC1vbmx5LgorCitAaXRlbSBFWFQyX0VSUk9SU19QQU5JQworUGFuaWMuCisKK0BlbmQgdGFibGUKKworVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgQHNhbXB7RVhUMl9FUlJPUlNfQ09OVElOVUV9LgorCitAZW5kIHRhYmxlCisKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2FsbG9jYXRlX3RhYmxlcyAoZXh0Ml9maWxzeXMgQHZhcntmc30pCitBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGlub2RlIHRhYmxlIGFuZCB0aGUgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMuICBUaGUKK2lub2RlIHRhYmxlcyBhbmQgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMgYXJlbid0IGFjdHVhbGx5IGluaXRpYWxpemVkOwordGhpcyBmdW5jdGlvbiBqdXN0IGFsbG9jYXRlcyB0aGUgc3BhY2UgZm9yIHRoZW0uCitAZW5kIGRlZnR5cGVmdW4KKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBGaWxlc3lzdGVtIGZsYWcgZnVuY3Rpb25zLCAgLCBJbml0aWFsaXppbmcgYSBmaWxlc3lzdGVtLCBGaWxlc3lzdGVtLWxldmVsIGZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBGaWxlc3lzdGVtIGZsYWcgZnVuY3Rpb25zCisKK1RoZSBmaWxlc3lzdGVtIGhhbmRsZSBoYXMgYSBudW1iZXIgb2YgZmxhZ3Mgd2hpY2ggY2FuIGJlIG1hbmlwdWxhdGVkCit1c2luZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLiAgU29tZSBvZiB0aGVzZSBmbGFncyBhZmZlY3QgaG93IHRoZQorbGliZXh0MmZzIGZpbGVzeXN0ZW0gYmVoYXZlczsgb3RoZXJzIGFyZSBwcm92aWRlZCBzb2xlbHkgZm9yIHRoZQorYXBwbGljYXRpb24ncyBjb252ZW5pZW5jZS4KKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfbWFya19jaGFuZ2VkIChleHQyX2ZpbHN5cyBAdmFye2ZzfSkKK0BkZWZ0eXBlZnVueCBpbnQgZXh0MmZzX3Rlc3RfY2hhbmdlZCAoZXh0Ml9maWxzeXMgQHZhcntmc30pCitUaGlzIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBmaWxlc3lzdGVtIGhhcyBiZWVuIGNoYW5nZWQuIAorSXQgaXMgbm90IHVzZWQgYnkgdGhlIGV4dDJmcyBsaWJyYXJ5LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZXh0MmZzX21hcmtfc3VwZXJfZGlydHkgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9KQorTWFyayB0aGUgZmlsZXN5c3RlbSBAdmFye2ZzfSBhcyBiZWluZyBkaXJ0eTsgdGhpcyB3aWxsIGNhdXNlCit0aGUgc3VwZXJibG9jayBpbmZvcm1hdGlvbiB0byBiZSBmbHVzaGVkIG91dCB3aGVuIEBjb2Rle2V4dDJmc19jbG9zZX0gaXMKK2NhbGxlZC4gIEBjb2Rle2V4dDJmc19tYXJrX3N1cGVyX2RpcnR5fSB3aWxsIGFsc28gc2V0IHRoZSBmaWxlc3lzdGVtIAorY2hhbmdlZCBmbGFnLiAgVGhlIGRpcnR5IGZsYWcgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGJ5CitAY29kZXtleHQyZnNfZmx1c2h9IHdoZW4gdGhlIHN1cGVyYmxvY2sgaXMgd3JpdHRlbiB0byBkaXNrLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZXh0MmZzX21hcmtfdmFsaWQgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9KQorQGRlZnR5cGVmdW54IHZvaWQgZXh0MmZzX3VubWFya192YWxpZCAoZXh0Ml9maWxzeXMgQHZhcntmc30pCitAZGVmdHlwZWZ1bnggaW50IGV4dDJmc190ZXN0X3ZhbGlkIChleHQyX2ZpbHN5cyBAdmFye2ZzfSkKK1RoaXMgZmxhZyBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGZpbGVzeXN0ZW0gaXMgZnJlZSBvZiBlcnJvcnMuCitJdCBpcyBub3QgdXNlZCBieSBsaWJleHQyZnMsIGFuZCBpcyBzb2xlbHkgZm9yIHRoZSBhcHBsaWNhdGlvbidzIAorY29udmVuaWVuY2UuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfbWFya19pYl9kaXJ0eSAoZXh0Ml9maWxzeXMgQHZhcntmc30pCitAZGVmdHlwZWZ1bnggdm9pZCBleHQyZnNfbWFya19iYl9kaXJ0eSAoZXh0Ml9maWxzeXMgQHZhcntmc30pCitAZGVmdHlwZWZ1bnggaW50IGV4dDJmc190ZXN0X2liX2RpcnR5IChleHQyX2ZpbHN5cyBAdmFye2ZzfSkKK0BkZWZ0eXBlZnVueCBpbnQgZXh0MmZzX3Rlc3RfYmJfZGlydHkgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9KQorVGhlc2UgZmxhZ3MgaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhlIGlub2RlIG9yIGJsb2NrIGJpdG1hcHMgaGF2ZSBiZWVuCittb2RpZmllZC4gICBJZiB0aGUgZmxhZyBpcyBzZXQsIGl0IHdpbGwgY2F1c2UgdGhlIGFwcHJvcHJpYXRlIGJpdG1hcAordG8gYmUgd3JpdHRlbiB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIGNsb3NlZCBvciBmbHVzaGVkLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgRmlsZSBJL08gRnVuY3Rpb25zLCBJbm9kZSBGdW5jdGlvbnMsIEZpbGVzeXN0ZW0tbGV2ZWwgZnVuY3Rpb25zLCBFWFQyRlMgTGlicmFyeSBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHNlY3Rpb24gRmlsZSBJL08gRnVuY3Rpb25zCisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHByb3ZpZGUgYSBjb252ZW5pZW50IGFic3RyYWN0aW9uIHRvIHJlYWQgb3IKK3dyaXRlIGEgZmlsZSBpbiBhbiBmaWxlc3lzdGVtLiAgVGhlIGludGVyZmFjZSBpcyBzaW1pbGFyIGluIHNwaXJpdCB0bwordGhlIExpbnV4L1BPU0lYIGZpbGUgSS9PIHN5c3RlbSBjYWxscy4KKworQG1lbnUKKyogRmlsZSBoYW5kbGUgbWFuaXB1bGF0aW9uOjogICAgCisqIFJlYWRpbmcgYW5kIHdyaXRpbmcgZGF0YTo6ICAgIAorKiBDaGFuZ2luZyB0aGUgZmlsZSBvZmZzZXQgOjogICAKKyogR2V0dGluZyB0aGUgZmlsZSBzaXplOjogICAgICAgCitAZW5kIG1lbnUKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBGaWxlIGhhbmRsZSBtYW5pcHVsYXRpb24sIFJlYWRpbmcgYW5kIHdyaXRpbmcgZGF0YSwgRmlsZSBJL08gRnVuY3Rpb25zLCBGaWxlIEkvTyBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gRmlsZSBoYW5kbGUgbWFuaXB1bGF0aW9uCisKK1RoZSBmaWxlIGhhbmRsZSBmdW5jdGlvbnMgbXVjaCBsaWtlIGEgZmlsZSBkZXNjcmlwdG9yIGluIHRoZSBMaW51eC9QT1NJWAorZmlsZSBJL08gc3lzdGVtIGNhbGxzLiAgVW5saWtlIHRoZSBMaW51eC9QT1NJWCBzeXN0ZW0gY2FsbHMsIGZpbGVzIGFyZQorb3BlbmVkIHZpYSBpbm9kZSBudW1iZXJzIGluc3RlYWQgb2YgdmlhIHBhdGhuYW1lcy4gIFRvIHJlc29sdmUgYQorcGF0aG5hbWUgdG8gYW4gaW5vZGUgbnVtYmVyLCB1c2UgdGhlIGZ1bmN0aW9uIEBjb2Rle2V4dDJmc19uYW1laX0gb3IgdG8KK2NyZWF0ZSBhIG5ldyBmaWxlLCB1c2UgQGNvZGV7ZXh0MmZzX25ld19pbm9kZX0gYW5kIEBjb2Rle2V4dDJmc19saW5rfS4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19maWxlX29wZW4yIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye2lub30sIHN0cnVjdCBleHQyX2lub2RlICpAdmFye2lub2RlfSwgaW50IEB2YXJ7ZmxhZ3N9LCBleHQyX2ZpbGVfdCAqQHZhcntyZXR9KQorQGRlZnR5cGVmdW54IGVycmNvZGVfdCBleHQyZnNfZmlsZV9vcGVuIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye2lub30sIGludCBAdmFye2ZsYWdzfSwgZXh0Ml9maWxlX3QgKkB2YXJ7cmV0fSkKKworT3BlbnMgYSBmaWxlIGlkZW50aWZpZWQgYnkgaW5vZGUgbnVtYmVyIEB2YXJ7aW5vfSBpbiBmaWxlc3lzdGVtIEB2YXJ7ZnN9CithbmQgcmV0dXJucyBhIGZpbGUgaGFuZGxlIGluIEB2YXJ7cmV0fS4gIElmIGFuIGlub2RlIHN0cnVjdHVyZSBpcworcHJvdmlkZWQgaW4gQHZhcntpbm9kZX0sIHRoZW4gaXQgaXMgdXNlZCBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlIGlub2RlCitmcm9tIHRoZSBmaWxlc3lzdGVtLgorCitUaGUgQHZhcntmbGFnc30gYXJndW1lbnQgY29udGFpbnMgYSBiaXRtYXNrIG9mIGZsYWdzIHdoaWNoIGNvbnRyb2wgaG93Cit0aGUgZmlsZSBzaG91bGQgYmUgb3BlbmVkLgorCitAdGFibGUgQGNvZGUKK0BpdGVtIEVYVDJfRklMRV9XUklURQorT3BlbiB0aGUgZmlsZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4gIFdpdGhvdXQgdGhpcyBmbGFnLCB0aGUgZmlsZSBpcworb3BlbmVkIGZvciB3cml0aW5nIG9ubHkuCisKK0BpdGVtIEVYVDJfRklMRV9DUkVBVEUKK0NyZWF0ZSB0aGUgZmlsZSBpZiBpdCBpcyBub3QgYWxyZWFkeSBwcmVzZW50LgorCitAZW5kIHRhYmxlCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXh0Ml9maWxzeXMgZXh0MmZzX2ZpbGVfZ2V0X2ZzIChleHQyX2ZpbGVfdCBAdmFye2ZpbGV9KQorUmV0dXJuIHRoZSBmaWxlc3lzdGVtIGhhbmRsZSB3aGVyZSB0aGUgb3BlbiBmaWxlIEB2YXJ7ZmlsZX0gd2FzIG9wZW5lZC4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfY2xvc2UgKGV4dDJfZmlsZV90IEB2YXJ7ZmlsZX0pCitDbG9zZSB0aGUgZmlsZSBoYW5kbGUgQHZhcntmaWxlfS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfZmx1c2ggKGV4dDJfZmlsZV90IEB2YXJ7ZmlsZX0pCitGb3JjZSBhbnkgZGF0YSB3cml0dGVuIHZpYSBAY29kZXtleHQyZnNfZmlsZV93cml0ZX0gdG8gZGlzay4KK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIFJlYWRpbmcgYW5kIHdyaXRpbmcgZGF0YSwgQ2hhbmdpbmcgdGhlIGZpbGUgb2Zmc2V0ICwgRmlsZSBoYW5kbGUgbWFuaXB1bGF0aW9uLCBGaWxlIEkvTyBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gUmVhZGluZyBhbmQgd3JpdGluZyBkYXRhCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfZmlsZV9yZWFkIChleHQyX2ZpbGVfdCBAdmFye2ZpbGV9LCB2b2lkICpAdmFye2J1Zn0sIHVuc2lnbmVkIGludCBAdmFye3dhbnRlZH0sIHVuc2lnbmVkIGludCAqQHZhcntnb3R9KQorUmVhZCBAdmFye3dhbnRlZH0gYnl0ZXMgb2YgZGF0YSBmcm9tIEB2YXJ7ZmlsZX0gc3RvcmUgaXQgaW4gdGhlIGJ1ZmZlcgorQHZhcntidWZ9LiAgVGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdhcyBhY3R1YWxseSByZWFkIGlzIHJldHVybmVkCit2aWEgQHZhcntnb3R9LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfZmlsZV93cml0ZSAoZXh0Ml9maWxlX3QgQHZhcntmaWxlfSwgY29uc3Qgdm9pZCAqQHZhcntidWZ9LCB1bnNpZ25lZCBpbnQgQHZhcntuYnl0ZXN9LCB1bnNpZ25lZCBpbnQgKkB2YXJ7d3JpdHRlbn0pCitXcml0ZSBAdmFye3dhbnRlZH0gYnl0ZXMgb2YgZGF0YSBmcm9tIHRoZSBidWZmZXIgQHZhcntidWZ9IHRvIHRoZQorY3VycmVudCBmaWxlIHBvc2l0aW9uIG9mIEB2YXJ7ZmlsZX0uICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2FzIAorYWN0dWFsbHkgd3JpdHRlbiBpcyByZXR1cm5lZCB2aWEgQHZhcntnb3R9LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgQ2hhbmdpbmcgdGhlIGZpbGUgb2Zmc2V0ICwgR2V0dGluZyB0aGUgZmlsZSBzaXplLCBSZWFkaW5nIGFuZCB3cml0aW5nIGRhdGEsIEZpbGUgSS9PIEZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBDaGFuZ2luZyB0aGUgZmlsZSBvZmZzZXQKKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19maWxlX2xsc2VlayAoZXh0Ml9maWxlX3QgQHZhcntmaWxlfSwgX191NjQgQHZhcntvZmZzZXR9LCBpbnQgQHZhcnt3aGVuY2V9LCBfX3U2NCAqQHZhcntyZXRfcG9zfSkKK0BkZWZ0eXBlZnVueCBlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfbHNlZWsgKGV4dDJfZmlsZV90IEB2YXJ7ZmlsZX0sIGV4dDJfb2ZmX3QgQHZhcntvZmZzZXR9LCBpbnQgQHZhcnt3aGVuY2V9LCBleHQyX29mZl90ICpAdmFye3JldF9wb3N9KQorQ2hhbmdlIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gb2YgQHZhcntmaWxlfSBhY2NvcmRpbmcgdG8gdGhlCitkaXJlY3RpdmUgQHZhcnt3aGVuY2V9IGFzIGZvbGxvd3M6CisKK0B0YWJsZSBAY29kZQorQGl0ZW0gRVhUMl9TRUVLX1NFVAorVGhlIGZpbGUgcG9zaXRpb24gaXMgc2V0IHRvIEB2YXJ7b2Zmc2V0fSBieXRlcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlCitmaWxlLgorCitAaXRlbSBFWFQyX1NFRUtfQ1VSCitUaGUgZmlsZSBwb3NpdGlvbiBzZXQgdG8gaXRzIGN1cnJlbnQgbG9jYXRpb24gcGx1cyBAdmFye29mZnNldH0gYnl0ZXMuCisKK0BpdGVtIEVYVDJfU0VFS19FTkQKK1RoZSBmaWxlIHBvc2l0aW9uIGlzIHNldCB0byB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBwbHVzIEB2YXJ7b2Zmc2V0fQorYnl0ZXMuCitAZW5kIHRhYmxlCisKK1RoZSBjdXJyZW50IG9mZnNldCBpcyByZXR1cm5lZCB2aWEgQHZhcntyZXRfcG9zfS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIEdldHRpbmcgdGhlIGZpbGUgc2l6ZSwgICwgQ2hhbmdpbmcgdGhlIGZpbGUgb2Zmc2V0ICwgRmlsZSBJL08gRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIEdldHRpbmcgdGhlIGZpbGUgc2l6ZQorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfZ2V0X2xzaXplIChleHQyX2ZpbGVfdCBAdmFye2ZpbGV9LCBfX3U2NCAqQHZhcntyZXRfc2l6ZX0pCitSZXR1cm4gdGhlIHNpemUgb2YgdGhlIGZpbGUgQHZhcntmaWxlfSBpbiBAdmFye3JldF9zaXplfS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBleHQyX29mZl90IGV4dDJmc19maWxlX2dldF9zaXplIChleHQyX2ZpbGVfdCBAdmFye2ZpbGV9KQorUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBmaWxlIEB2YXJ7ZmlsZX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBJbm9kZSBGdW5jdGlvbnMsIERpcmVjdG9yeSBmdW5jdGlvbnMsIEZpbGUgSS9PIEZ1bmN0aW9ucywgRVhUMkZTIExpYnJhcnkgRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzZWN0aW9uIElub2RlIEZ1bmN0aW9ucworCitAbWVudQorKiBSZWFkaW5nIGFuZCB3cml0aW5nIGlub2Rlczo6ICAKKyogSXRlcmF0aW5nIG92ZXIgaW5vZGVzIGluIGEgZmlsZXN5c3RlbTo6ICAKKyogSXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGFuIGlub2RlOjogIAorKiBJbm9kZSBDb252ZW5pZW5jZSBGdW5jdGlvbnM6OiAgCitAZW5kIG1lbnUKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBSZWFkaW5nIGFuZCB3cml0aW5nIGlub2RlcywgSXRlcmF0aW5nIG92ZXIgaW5vZGVzIGluIGEgZmlsZXN5c3RlbSwgSW5vZGUgRnVuY3Rpb25zLCBJbm9kZSBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gUmVhZGluZyBhbmQgd3JpdGluZyBpbm9kZXMKKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19yZWFkX2lub2RlIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye2lub30sIHN0cnVjdCBleHQyX2lub2RlICpAdmFye2lub2RlfSkKK1JlYWQgdGhlIGlub2RlIG51bWJlciBAdmFye2lub30gaW50byBAdmFye2lub2RlfS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2lub2RlIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye2lub30sIHN0cnVjdCBleHQyX2lub2RlICpAdmFye2lub2RlfSkKK1dyaXRlIEB2YXJ7aW5vZGV9IHRvIGlub2RlIEB2YXJ7aW5vfS4KK0BlbmQgZGVmdHlwZWZ1bgorCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgSXRlcmF0aW5nIG92ZXIgaW5vZGVzIGluIGEgZmlsZXN5c3RlbSwgSXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGFuIGlub2RlLCBSZWFkaW5nIGFuZCB3cml0aW5nIGlub2RlcywgSW5vZGUgRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIEl0ZXJhdGluZyBvdmVyIGlub2RlcyBpbiBhIGZpbGVzeXN0ZW0KKworVGhlIGlub2RlX3NjYW4gYWJzdHJhY3Rpb24gaXMgdXNlZnVsIGZvciBpdGVyYXRpbmcgb3ZlciBhbGwgdGhlIGlub2RlcworaW4gYSBmaWxlc3lzdGVtLiAgCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfb3Blbl9pbm9kZV9zY2FuIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgaW50IEB2YXJ7YnVmZmVyX2Jsb2Nrc30sIGV4dDJfaW5vZGVfc2NhbiAqQHZhcntzY2FufSkKK0luaXRpYWxpemUgdGhlIGl0ZXJhdGlvbiB2YXJpYWJsZSBAdmFye3NjYW59LiAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5CitAY29kZXtleHQyZnNfZ2V0X25leHRfaW5vZGV9LiAgVGhlIEB2YXJ7YnVmZmVyX2Jsb2Nrc30gcGFyYW1ldGVyCitjb250cm9scyBob3cgbWFueSBibG9ja3Mgb2YgdGhlIGlub2RlIHRhYmxlIGFyZSByZWFkIGluIGF0IGEgdGltZS4gIEEKK2xhcmdlIG51bWJlciBvZiBibG9ja3MgcmVxdWlyZXMgbW9yZSBtZW1vcnksIGJ1dCByZWR1Y2VzIHRoZSBvdmVyaGVhZCBpbgorc2Vla2luZyBhbmQgcmVhZGluZyBmcm9tIHRoZSBkaXNrLiAgSWYgQHZhcntidWZmZXJfYmxvY2tzfSBpcyB6ZXJvLCBhCitzdWl0YWJsZSBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgdXNlZC4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19jbG9zZV9pbm9kZV9zY2FuIChleHQyX2lub2RlX3NjYW4gQHZhcntzY2FufSkKK1JlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggQHZhcntzY2FufSBhbmQgaW52YWxpZGF0ZSBpdC4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2dldF9uZXh0X2lub2RlIChleHQyX2lub2RlX3NjYW4gQHZhcntzY2FufSwgZXh0Ml9pbm9fdCAqQHZhcntpbm99LCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqQHZhcntpbm9kZX0pCisKK1RoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbmV4dCBpbm9kZSBmcm9tIHRoZSBmaWxlc3lzdGVtOyB0aGUgaW5vZGUKK251bWJlciBvZiB0aGUgaW5vZGUgaXMgc3RvcmVkIGluIEB2YXJ7aW5vfSwgYW5kIHRoZSBpbm9kZSBpcyBzdG9yZWQgaW4KK0B2YXJ7aW5vZGV9LiAgCisKK0lmIHRoZSBpbm9kZSBpcyBsb2NhdGVkIGluIGEgYmxvY2sgdGhhdCBoYXMgYmVlbiBtYXJrZWQgYXMgYmFkLAorQGNvZGV7ZXh0MmZzX2dldF9uZXh0X2lub2RlfSB3aWxsIHJldHVybiB0aGUgZXJyb3IKK0Bjb2Rle0VYVDJfRVRfQkFEX0JMT0NLX0lOX0lOT0RFX1RBQkxFfS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2lub2RlX3NjYW5fZ290b19ibG9ja2dyb3VwIChleHQyX2lub2RlX3NjYW4gQHZhcntzY2FufSwgaW50IEB2YXJ7Z3JvdXB9KQorU3RhcnQgdGhlIGlub2RlIHNjYW4gYXQgYSBwYXJ0aWN1bGFyIGV4dDIgYmxvY2tncm91cCwgQHZhcntncm91cH0uICAKK1RoaXMgZnVuY3Rpb24gbWF5IGJlIHNhZmVseSBjYWxsZWQgYXQgYW55IHRpbWUgd2hpbGUgQHZhcntzY2FufSBpcyB2YWxpZC4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19zZXRfaW5vZGVfY2FsbGJhY2sgKGV4dDJfaW5vZGVfc2NhbiBAdmFye3NjYW59LCBlcnJjb2RlX3QgKCpkb25lX2dyb3VwKShleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9kZV9zY2FuIEB2YXJ7c2Nhbn0sIGRncnBfdCBAdmFye2dyb3VwfSwgdm9pZCAqIEB2YXJ7cHJpdmF0ZX0pLCB2b2lkICpAdmFye2RvbmVfZ3JvdXBfZGF0YX0pCitSZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGJ5CitAY29kZXtleHQyX2dldF9uZXh0X2lub2RlfSB3aGVuIGFsbCBvZiB0aGUgaW5vZGVzIGluIGEgYmxvY2sgZ3JvdXAgaGF2ZQorYmVlbiBwcm9jZXNzZWQuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gaW50IGV4dDJmc19pbm9kZV9zY2FuX2ZsYWdzIChleHQyX2lub2RlX3NjYW4gQHZhcntzY2FufSwgaW50IEB2YXJ7c2V0X2ZsYWdzfSwgaW50IEB2YXJ7Y2xlYXJfZmxhZ3N9KQorCitTZXQgdGhlIHNjYW5fZmxhZ3MgQHZhcntzZXRfZmxhZ3N9IGFuZCBjbGVhciB0aGUgc2Nhbl9mbGFncyBAdmFye2NsZWFyX2ZsYWdzfS4KK1RoZSBmb2xsb3dpbmcgZmxhZ3MgY2FuIGJlIHNldCB1c2luZyB0aGlzIGludGVyZmFjZToKKworQHRhYmxlIEBzYW1wCisKK0BpdGVtIEVYVDJfU0ZfU0tJUF9NSVNTSU5HX0lUQUJMRSAKK1doZW4gYSBibG9jayBncm91cCBpcyBtaXNzaW5nIGFuIGlub2RlIHRhYmxlLCBza2lwIGl0LiAgSWYgdGhpcyBmbGFnIGlzCitub3Qgc2V0IEBjb2Rle2V4dDJmc19nZXRfbmV4dF9pbm9kZX0gd2lsbCByZXR1cm4gdGhlIGVycm9yCitFWFQyX0VUX01JU1NJTkdfSU5PREVfVEFCTEUuCisKK0BlbmQgdGFibGUKKworQGVuZCBkZWZ0eXBlZnVuCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgSXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGFuIGlub2RlLCBJbm9kZSBDb252ZW5pZW5jZSBGdW5jdGlvbnMsIEl0ZXJhdGluZyBvdmVyIGlub2RlcyBpbiBhIGZpbGVzeXN0ZW0sIElub2RlIEZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBJdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gYW4gaW5vZGUKKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19ibG9ja19pdGVyYXRlIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye2lub30sIGludCBAdmFye2ZsYWdzfSwgY2hhciAqYmxvY2tfYnVmLCBpbnQgKCpmdW5jKShleHQyX2ZpbHN5cyBAdmFye2ZzfSwgYmxrX3QgKkB2YXJ7YmxvY2tucn0sIGludCBAdmFye2Jsb2NrY250fSwgdm9pZCAqQHZhcntwcml2YXRlfSksIHZvaWQgKkB2YXJ7cHJpdmF0ZX0pCisKK0l0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIGJsb2NrcyBpbiBpbm9kZSBudW1iZXIgQHZhcntpbm99IGluIGZpbGVzeXN0ZW0KK0B2YXJ7ZnN9LCBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbiBAdmFye2Z1bmN9IGZvciBlYWNoIGJsb2NrIGluIHRoZQoraW5vZGUuICBUaGUgQHZhcntibG9ja19idWZ9IHBhcmFtZXRlciBzaG91bGQgZWl0aGVyIGJlIE5VTEwsIG9yIGlmIHRoZQorQGNvZGV7ZXh0MmZzX2Jsb2NrX2l0ZXJhdGV9IGZ1bmN0aW9uIGlzIGNhbGxlZCByZXBlYXRlZGx5LCB0aGUgb3ZlcmhlYWQKK29mIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgc2NyYXRjaCBtZW1vcnkgY2FuIGJlIGF2b2lkZWQgYnkgcGFzc2luZyBhCitwb2ludGVyIHRvIGEgc2NyYXRjaCBidWZmZXIgd2hpY2ggbXVzdCBiZSBhdCBsZWFzdCBhcyBiaWcgYXMgdGhyZWUgdGltZXMgdGhlCitmaWxlc3lzdGVtJ3MgYmxvY2tzaXplLiAgCisKK1RoZSBAdmFye2ZsYWdzfSBwYXJhbWV0ZXIgY29udHJvbHMgaG93IHRoZSBpdGVyYXRvciB3aWxsIGZ1bmN0aW9uOgorCitAdGFibGUgQHNhbXAKKworQGl0ZW0gQkxPQ0tfRkxBR19IT0xFCitUaGlzIGZsYWcgaW5kaWNpYXRlcyB0aGF0IHRoZSBpbnRlcmF0b3IgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbgorYmxvY2tzIHdoZXJlIHRoZSBibG9jayBudW1iZXIgaXMgemVybyAoYWxzbyBrbm93biBhcyBgYGhvbGVzJycuKSAgSXQgaXMKK2Fsc28ga25vd24gYXMgQkxPQ0tfRkxBR19BUFBFTkQsIHNpbmNlIGl0IGlzIGFsc28gdXNlZCBieSBmdW5jdGlvbnMKK3N1Y2ggYXMgZXh0MmZzX2V4cGFuZF9kaXIoKSB0byBhZGQgYSBuZXcgYmxvY2sgdG8gYW4gaW5vZGUuCisKK0BpdGVtIEJMT0NLX0ZMQUdfREVQVEhfVFJBVkVSU0UKK1RoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgaXRlcmF0b3IgZnVuY3Rpb24gZm9yIHRoZQoraW5kaXJlY3QsIGRvdWJseSBpbmRpcmVjdCwgZXRjLiBibG9ja3Mgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBhbGwKK29mIHRoZSBibG9ja3MgY29udGFpbmluZWQgaW4gdGhlIGluZGlyZWN0IGJsb2NrcyBhcmUgcHJvY2Vzc2VkLgorVGhpcyBpcyB1c2VmdWwgaWYgeW91IGFyZSBnb2luZyB0byBiZSBkZWFsbG9jYXRpbmcgYmxvY2tzIGZyb20gYW4KK2lub2RlLgorCitAaXRlbSBCTE9DS19GTEFHX0RBVEFfT05MWQorVGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBpdGVyYXRvciBmdW5jdGlvbiBzaG91bGQgYmUKK2NhbGxlZCBmb3IgZGF0YSBibG9ja3Mgb25seS4KKworQGVuZCB0YWJsZQorCitUaGUgY2FsbGJhY2sgZnVuY3Rpb24gQHZhcntmdW5jfSBpcyBjYWxsZWQgd2l0aCBhIG51bWJlciBvZiBwYXJhbWV0ZXJzOwordGhlIEB2YXJ7ZnN9IGFuZCBAdmFye3ByaXZhdGV9IHBhcmFtZXRlcnMgYXJlIHNlbGYtZXhwbGFuYXRvcnksIGFuZAordGhlaXIgdmFsdWVzIGFyZSB0YWtlbiBmcm9tIHRoZSBwYXJhbWV0ZXJzIHRvCitAY29kZXtleHQyZnNfYmxvY2tfaXRlcmF0ZX0uICAoVGhlIEB2YXJ7cHJpdmF0ZX0gZGF0YSBzdHJ1Y3R1cmUgaXMKK2dlbmVyYWxseSB1c2VkIGJ5IGNhbGxlcnMgdG8gQGNvZGV7ZXh0MmZzX2Jsb2NrX2l0ZXJhdGV9IHNvIHRoYXQgc29tZQorcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSBjYW4gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gIFRoZSAKK0B2YXJ7YmxvY2tjbnR9IHBhcmFtZXRlciwgaWYgbm9uLW5lZ2F0aXZlLCBpbmRpY2F0ZXMgdGhlIGxvZ2ljYWwgYmxvY2sKK251bWJlciBvZiBhIGRhdGEgYmxvY2sgaW4gdGhlIGlub2RlLiAgSWYgQHZhcntibG9ja2NudH0gaXMgbGVzcyB0aGFuCit6ZXJvLCB0aGVuIEB2YXJ7ZnVuY30gd2FzIGNhbGxlZCBvbiBhIG1ldGFkYXRhIGJsb2NrLCBhbmQgQHZhcntibG9ja2NudH0KK3dpbGwgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOiAgQkxPQ0tfQ09VTlRfSU5ELCBCTE9DS19DT1VOVF9ESU5ELAorQkxPQ0tfQ09VTlRfVElORCwgb3IgQkxPQ0tfQ09VTlRfVFJBTlNMQVRPUi4gIFRoZSBAdmFye2Jsb2NrbnJ9IGlzIGEKK3BvaW50ZXIgdG8gdGhlIGlub2RlIG9yIGluZGlyZWN0IGJsb2NrIGVudHJ5IGxpc3RpbmcgcGh5c2ljYWwgYmxvY2sKK251bWJlci4gIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBtYXkgbW9kaWZ5IHRoZSBwaHlzaWNhbCBibG9jayBudW1iZXIsIGlmCitpdCByZXR1cm5zIHRoZSBAdmFye0JMT0NLX0NIQU5HRUR9IGZsYWcuCisKKworVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIEB2YXJ7ZnVuY30gcmV0dXJucyBhIHJlc3VsdCBjb2RlIHdoaWNoIGlzIGNvbXBvc2VkIG9mCit0aGUgbG9naWNhbCBPUiBvZiB0aGUgZm9sbG93aW5nIGZsYWdzOgorCitAdGFibGUgQHNhbXAKKworQGl0ZW0gQkxPQ0tfQ0hBTkdFRAorCitUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgY2FsbGJhY2sgZnVuY3Rpb24gaGFzIG1vZGlmaWVkIHRoZSBwaHlzaWNhbAorYmxvY2sgbnVtYmVyIHBvaW50ZWQgdG8gYnkgQHZhcntibG9ja25yfS4KKworQGl0ZW0gQkxPQ0tfQUJPUlQKKworVGhpcyBmbGFnIHJlcXVlc3RzIHRoYXQgQGNvZGV7ZXh0MmZzX2Jsb2NrX2l0ZXJhdGV9IHRvIHN0b3AgaW1tZWRpYXRlbHkKK2FuZCByZXR1cm4gdG8gdGhlIGNhbGxlci4KKworQGVuZCB0YWJsZQorCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19ibG9ja19pdGVyYXRlMiAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntpbm99LCBpbnQgQHZhcntmbGFnc30sIGNoYXIgKkB2YXJ7YmxvY2t9X2J1ZiwgaW50ICgqZnVuYykoZXh0Ml9maWxzeXMgQHZhcntmc30sIGJsa190ICpAdmFye2Jsb2NrbnJ9LCBlMl9ibGtjbnRfdCBAdmFye2Jsb2NrY250fSwgYmxrX3QgQHZhcntyZWZfYmxrfSwgaW50ICBAdmFye3JlZl9vZmZzZXR9LCB2b2lkICpAdmFye3ByaXZhdGV9KSwgdm9pZCAqQHZhcntwcml2YXRlfSkKKworVGhpcyBmdW5jdGlvbiBpcyBtdWNoIGxpa2UgQGNvZGV7ZXh0MmZzX2Jsb2NrX2l0ZXJhdGV9LCBleGNlcHQgdGhhdCB0aGUKK0B2YXJ7YmxvY2tjbnR9IHR5cGUgaXMgYSA2NC1iaXQgc2lnbmVkIHF1YW50aXR5LCB0byBzdXBwb3J0IGxhcmdlcgorZmlsZXMsIGFuZCB0aGUgYWRkaXRpb24gb2YgdGhlIEB2YXJ7cmVmX2Jsa30gYW5kIEB2YXJ7cmVmX29mZnNldH0KK2FyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCBpZGVudGlmeSB0aGUgbG9jYXRpb24KK29mIHRoZSBwaHlzaWNhbCBibG9jayBwb2ludGVkIHRvIGJ5IHBvaW50ZXIgQHZhcntibG9ja25yfS4gIElmCitAdmFye3JlZl9ibGt9IGlzIHplcm8sIHRoZW4gQHZhcntyZWZfb2Zmc2V0fSBjb250YWlucyB0aGUgb2Zmc2V0IGludG8KK3RoZSBAY29kZXtpX2Jsb2Nrc30gYXJyYXkuICBJZiBAdmFye3JlZl9ibGt9IGlzIG5vbi16ZXJvLCB0aGVuIHRoZSBwaHlzaWNhbAorYmxvY2sgbG9jYXRpb24gaXMgY29udGFpbmVkIGluc2lkZSBhbiBpbmRpcmVjdCBibG9jayBncm91cCwgYW5kCitAdmFye3JlZl9vZmZzZXR9IGNvbnRhaW5zIHRoZSBvZmZzZXQgaW50byB0aGUgaW5kaXJlY3QgYmxvY2suCisKK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIElub2RlIENvbnZlbmllbmNlIEZ1bmN0aW9ucywgICwgSXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGFuIGlub2RlLCBJbm9kZSBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gQ29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBJbm9kZXMKKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19nZXRfYmxvY2tzIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye2lub30sIGJsa190ICpAdmFye2Jsb2Nrc30pCisKK1JldHVybnMgYW4gYXJyYXkgb2YgYmxvY2tzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRpcmVjdCwKK2luZGlyZWN0LCBkb3VibHkgaW5kaXJlY3QsIGFuZCB0cmlwbHkgaW5kaXJlY3QgYmxvY2tzIGFzIHN0b3JlZCBpbiB0aGUKK2lub2RlIHN0cnVjdHVyZS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2NoZWNrX2RpcmVjdG9yeSAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntpbm99KQorUmV0dXJucyAwIGlmIEB2YXJ7aW5vfSBpcyBhIGRpcmVjdG9yeSwgYW5kIEBjb2Rle0VOT1RESVJ9IGlmIGl0IGlzIG5vdC4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBpbnQgZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MgKHN0cnVjdCBleHQyX2lub2RlICpAdmFye2lub2RlfSkKKworUmV0dXJucyAxIGlmIHRoZSBpbm9kZSdzIGJsb2NrIGVudHJpZXMgYWN0dWFsbHkgdmFsaWQgYmxvY2sgZW50cmllcywgYW5kCiswIGlmIG5vdC4gIElub2RlcyB3aGljaCByZXByZXNlbnQgZGV2aWNlcyBhbmQgZmFzdCBzeW1ib2xpYyBsaW5rcyBkbyBub3QKK2NvbnRhaW4gdmFsaWQgYmxvY2sgZW50cmllcy4KK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIERpcmVjdG9yeSBmdW5jdGlvbnMsIEJpdG1hcCBGdW5jdGlvbnMsIElub2RlIEZ1bmN0aW9ucywgRVhUMkZTIExpYnJhcnkgRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzZWN0aW9uIERpcmVjdG9yeSBmdW5jdGlvbnMKKworQG1lbnUKKyogRGlyZWN0b3J5IGJsb2NrIGZ1bmN0aW9uczo6ICAgCisqIEl0ZXJhdGluZyBvdmVyIGEgZGlyZWN0b3J5OjogIAorKiBDcmVhdGluZyBhbmQgZXhwYW5kaW5nIGRpcmVjdG9yaWVzOjogIAorKiBDcmVhdGluZyBhbmQgcmVtb3ZpbmcgZGlyZWN0b3J5IGVudHJpZXM6OiAgCisqIExvb2tpbmcgdXAgZmlsZW5hbWVzOjogICAgICAgIAorKiBUcmFuc2xhdGluZyBpbm9kZSBudW1iZXJzIHRvIGZpbGVuYW1lczo6ICAKK0BlbmQgbWVudQorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIERpcmVjdG9yeSBibG9jayBmdW5jdGlvbnMsIEl0ZXJhdGluZyBvdmVyIGEgZGlyZWN0b3J5LCBEaXJlY3RvcnkgZnVuY3Rpb25zLCBEaXJlY3RvcnkgZnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIERpcmVjdG9yeSBibG9jayBmdW5jdGlvbnMKKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19yZWFkX2Rpcl9ibG9jayAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGJsa190IEB2YXJ7YmxvY2t9LCB2b2lkICpAdmFye2J1Zn0pCisKK1RoaXMgZnVuY3Rpb24gcmVhZHMgYSBkaXJlY3RvcnkgYmxvY2ssIHBlcmZvcm1pbmcgYW55IG5lY2Vzc2FyeQorYnl0ZSBzd2FwcGluZyBpZiBuZWNlc3NhcnkuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc193cml0ZV9kaXJfYmxvY2sgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBibGtfdCBAdmFye2Jsb2NrfSwgdm9pZCAqQHZhcntidWZ9KQorCitUaGlzIGZ1bmN0aW9uIHdyaXRlcyBhIGRpcmVjdG9yeSBibG9jaywgcGVyZm9ybWluZyBhbnkgbmVjZXNzYXJ5CitieXRlIHN3YXBwaW5nIGlmIG5lY2Vzc2FyeS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX25ld19kaXJfYmxvY2sgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBleHQyX2lub190IEB2YXJ7ZGlyX2lub30sIGV4dDJfaW5vX3QgQHZhcntwYXJlbnRfaW5vfSwgY2hhciAqKkB2YXJ7YmxvY2t9KQorCitUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgZGlyZWN0b3J5IGJsb2NrIGluIEB2YXJ7YmxvY2t9LiAgSWYKK0B2YXJ7ZGlyX2lub30gaXMgbm9uLXplcm8sIHRoZW4gQHZhcntkaXJfaW5mb30gYW5kIEB2YXJ7cGFyZW50X2lub30gaXMgdXNlZAordG8gaW5pdGlhbGl6ZSBkaXJlY3RvcnkgZW50cmllcyBmb3IgQGZpbGV7Ln0gYW5kIEBmaWxley4ufSwgcmVzcGVjdGl2ZWx5LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgSXRlcmF0aW5nIG92ZXIgYSBkaXJlY3RvcnksIENyZWF0aW5nIGFuZCBleHBhbmRpbmcgZGlyZWN0b3JpZXMsIERpcmVjdG9yeSBibG9jayBmdW5jdGlvbnMsIERpcmVjdG9yeSBmdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gSXRlcmF0aW5nIG92ZXIgYSBkaXJlY3RvcnkKKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19kaXJfaXRlcmF0ZSAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntkaXJ9LCBpbnQgQHZhcntmbGFnc30sIGNoYXIgKkB2YXJ7YmxvY2tfYnVmfSwgaW50ICgqQHZhcntmdW5jfSkoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpAdmFye2RpcmVudH0sIGludCBAdmFye29mZnNldH0sIGludCBAdmFye2Jsb2Nrc2l6ZX0sIGNoYXIgKkB2YXJ7YnVmfSwgdm9pZCAqQHZhcntwcml2YXRlfSksIHZvaWQgKkB2YXJ7cHJpdmF0ZX0pCisKK1RoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgb3ZlciBhbGwgb2YgdGhlIGRpcmVjdG9yeSBlbnRyaWVzIGluIHRoZQorZGlyZWN0b3J5IEB2YXJ7ZGlyfSwgY2FsbGluZyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gQHZhcntmdW5jfSBmb3IgZWFjaAorZGlyZWN0b3J5IGVudHJ5IGluIHRoZSBkaXJlY3RvcnkuICBUaGUgQHZhcntibG9ja19idWZ9IHBhcmFtZXRlciBzaG91bGQKK2VpdGhlciBiZSBOVUxMLCBvciBpZiB0aGUgQGNvZGV7ZXh0MmZzX2Rpcl9pdGVyYXRlfSBmdW5jdGlvbiBpcyAKK2NhbGxlZCByZXBlYXRlZGx5LCB0aGUgb3ZlcmhlYWQgb2YgYWxsb2NhdGluZyBhbmQgZnJlZWluZyAKK3NjcmF0Y2ggbWVtb3J5IGNhbiBiZSBhdm9pZGVkIGJ5IHBhc3NpbmcgYSBwb2ludGVyIHRvIGEgc2NyYXRjaCBidWZmZXIKK3doaWNoIG11c3QgYmUgYXQgbGVhc3QgYXMgYmlnIGFzIHRoZSBmaWxlc3lzdGVtJ3MgYmxvY2tzaXplLiAgCisKK1RoZSBAdmFye2ZsYWdzfSBwYXJhbWV0ZXIgY29udHJvbHMgaG93IHRoZSBpdGVyYXRvciB3aWxsIGZ1bmN0aW9uOgorCitAdGFibGUgQHNhbXAKKworQGl0ZW0gRElSRU5UX0ZMQUdfSU5DTFVERV9FTVBUWQorCitUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZXZlbiAKK2ZvciBkZWxldGVkIG9yIGVtcHR5IGRpcmVjdG9yeSBlbnRyaWVzLgorCitAZW5kIHRhYmxlCisKK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIENyZWF0aW5nIGFuZCBleHBhbmRpbmcgZGlyZWN0b3JpZXMsIENyZWF0aW5nIGFuZCByZW1vdmluZyBkaXJlY3RvcnkgZW50cmllcywgSXRlcmF0aW5nIG92ZXIgYSBkaXJlY3RvcnksIERpcmVjdG9yeSBmdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gQ3JlYXRpbmcgYW5kIGV4cGFuZGluZyBkaXJlY3RvcmllcworCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX21rZGlyIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye3BhcmVudH0sIGV4dDJfaW5vX3QgQHZhcntpbnVtfSwgY29uc3QgY2hhciAqQHZhcntuYW1lfSkKKworVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IGRpcmVjdG9yeS4gIElmIEB2YXJ7aW51bX0gaXMgemVybywgdGhlbiBhCituZXcgaW5vZGUgd2lsbCBiZSBhbGxvY2F0ZWQ7IG90aGVyd2lzZSwgdGhlIGRpcmVjdG9yeSB3aWxsIGJlIGNyZWF0ZWQgaW4KK3RoZSBpbm9kZSBzcGVjaWZpZWQgYnkgQHZhcntpbnVtfS4gIElmIEB2YXJ7bmFtZX0gc3BlY2lmaWVzIHRoZSBuYW1lIG9mCit0aGUgbmV3IGRpcmVjdG9yeTsgaWYgaXQgaXMgbm9uLU5VTEwsIHRoZW4gdGhlIG5ldyBkaXJlY3Rvcnkgd2lsbCBiZQorbGlua2VkIGludG8gdGhlIHBhcmVudCBkaXJlY3RvcnkgQHZhcntwYXJlbnR9LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfZXhwYW5kX2RpciAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntkaXJ9KQorCitUaGlzIGZ1bmN0aW9uIGFkZHMgYSBuZXcgZW1wdHkgZGlyZWN0b3J5IGJsb2NrIGFuZCBhcHBlbmRzIGl0IHRvIAordGhlIGRpcmVjdG9yeSBAdmFye2Rpcn0uICBUaGlzIGFsbG93cyBmdW5jdGlvbnMgc3VjaCBhcworQGNvZGV7ZXh0MmZzX2xpbmt9IHRvIGFkZCBuZXcgZGlyZWN0b3J5IGVudHJpZXMgdG8gYSBkaXJlY3Rvcnkgd2hpY2ggaXMgZnVsbC4KKworQGVuZCBkZWZ0eXBlZnVuCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgQ3JlYXRpbmcgYW5kIHJlbW92aW5nIGRpcmVjdG9yeSBlbnRyaWVzLCBMb29raW5nIHVwIGZpbGVuYW1lcywgQ3JlYXRpbmcgYW5kIGV4cGFuZGluZyBkaXJlY3RvcmllcywgRGlyZWN0b3J5IGZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBDcmVhdGluZyBhbmQgcmVtb3ZpbmcgZGlyZWN0b3J5IGVudHJpZXMKKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19saW5rIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye2Rpcn0sIGNvbnN0IGNoYXIgKkB2YXJ7bmFtZX0sIGV4dDJfaW5vX3QgQHZhcntpbm99LCBpbnQgZmxhZ3MpCisKK1RoaXMgZnVuY3Rpb24gYWRkcyBhIG5ldyBkaXJlY3RvcnkgZW50cnkgdG8gdGhlIGRpcmVjdG9yeSBAdmFye2Rpcn0sIAord2l0aCBAdmFye25hbWV9IGFuZCBAdmFye2lub30gc3BlY2lmeWluZyB0aGUgbmFtZSBhbmQgaW5vZGUgbnVtYmVyIGluCit0aGUgZGlyZWN0b3J5IGVudHJ5LCByZXNwZWN0aXZlbHkuICAKKworVGhlIGxvdyAzIGJpdHMgb2YgdGhlIGZsYWdzIGZpZWxkIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgZmlsZSB0eXBlIG9mCitpbm9kZTogICAoTm8gb3RoZXIgZmxhZ3MgYXJlIGN1cnJlbnRseSBkZWZpbmVkLikKKworQHRhYmxlIEBzYW1wCisKK0BpdGVtIEVYVDJfRlRfVU5LTk9XTgorCitUaGUgZmlsZSB0eXBlIGlzIHVua25vd24uCisKK0BpdGVtIEVYVDJfRlRfUkVHX0ZJTEUKKworVGhlIGZpbGUgdHlwZSBpcyBhIG5vcm1hbCBmaWxlLgorCitAaXRlbSBFWFQyX0ZUX0RJUgorCitUaGUgZmlsZSB0eXBlIGlzIGEgZGlyZWN0b3J5LgorCitAaXRlbSBFWFQyX0ZUX0NIUkRFVgorCitUaGUgZmlsZSB0eXBlIGlzIGEgY2hhcmFjdGVyIGRldmljZS4KKworQGl0ZW0gRVhUMl9GVF9CTEtERVYKKworVGhlIGZpbGUgdHlwZSBpcyBhIGJsb2NrIGRldmljZS4KKworQGl0ZW0gRVhUMl9GVF9GSUZPCisKK1RoZSBmaWxlIHR5cGUgaXMgYSBuYW1lZCBwaXBlLgorCitAaXRlbSBFWFQyX0ZUX1NPQ0sKKworVGhlIGZpbGUgdHlwZSBpcyBhIHVuaXggZG9tYWluIHNvY2tldC4KKworQGl0ZW0gRVhUMl9GVF9TWU1MSU5LCisKK1RoZSBmaWxlIHR5cGUgaXMgYSBzeW1ib2xpYyBsaW5rLgorQGVuZCB0YWJsZSAKKworQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfdW5saW5rIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye2Rpcn0sIGNvbnN0IGNoYXIgKkB2YXJ7bmFtZX0sIGV4dDJfaW5vX3QgQHZhcntpbm99LCBpbnQgQHZhcntmbGFnc30pCisKK1RoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhIGRpcmVjdG9yeSBlbnRyeSBmcm9tIEB2YXJ7ZGlyfS4KK1RoZSBkaXJlY3RvcnkgZW50cnkgdG8gYmUgcmVtb3ZlZCBpcyB0aGUgZmlyc3Qgb25lIHdoaWNoIGlzCittYXRjaGVkIGJ5IEB2YXJ7bmFtZX0gYW5kIEB2YXJ7aW5vfS4gIElmIEB2YXJ7bmFtZX0gaXMgbm9uLU5VTEwsIAordGhlIGRpcmVjdG9yeSBlbnRyeSdzIG5hbWUgbXVzdCBtYXRjaCBAdmFye25hbWV9LiAgSWYgQHZhcntpbm99IGlzCitub24temVybywgdGhlIGRpcmVjdG9yeSBlbnRyeSdzIGlub2RlIG51bWJlciBtdXN0IG1hdGNoIEB2YXJ7aW5vfS4KK05vIGZsYWdzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBmb3IgQGNvZGV7ZXh0MmZzX3VubGlua307IGNhbGxlcnMgc2hvdWxkCitwYXNzIGluIHplcm8gdG8gdGhpcyBwYXJhbWV0ZXIuCisKK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIExvb2tpbmcgdXAgZmlsZW5hbWVzLCBUcmFuc2xhdGluZyBpbm9kZSBudW1iZXJzIHRvIGZpbGVuYW1lcywgQ3JlYXRpbmcgYW5kIHJlbW92aW5nIGRpcmVjdG9yeSBlbnRyaWVzLCBEaXJlY3RvcnkgZnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIExvb2tpbmcgdXAgZmlsZW5hbWVzCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfbG9va3VwIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye2Rpcn0sIGNvbnN0IGNoYXIgKkB2YXJ7bmFtZX0sIGludCBAdmFye25hbWVsZW59LCBjaGFyICpAdmFye2J1Zn0sIGV4dDJfaW5vX3QgKkB2YXJ7aW5vZGV9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfbmFtZWkgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBleHQyX2lub190IEB2YXJ7cm9vdH0sIGV4dDJfaW5vX3QgQHZhcntjd2R9LCBjb25zdCBjaGFyICpAdmFye25hbWV9LCBleHQyX2lub190ICpAdmFye2lub2RlfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX25hbWVpX2ZvbGxvdyAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntyb290fSwgZXh0Ml9pbm9fdCBAdmFye2N3ZH0sIGNvbnN0IGNoYXIgKkB2YXJ7bmFtZX0sIGV4dDJfaW5vX3QgKkB2YXJ7aW5vZGV9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfZm9sbG93X2xpbmsgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBleHQyX2lub190IEB2YXJ7cm9vdH0sIGV4dDJfaW5vX3QgQHZhcntjd2R9LCBleHQyX2lub190IEB2YXJ7aW5vZGV9LCBleHQyX2lub190ICpAdmFye3Jlc31faW5vZGUpCitAZW5kIGRlZnR5cGVmdW4KKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBUcmFuc2xhdGluZyBpbm9kZSBudW1iZXJzIHRvIGZpbGVuYW1lcywgICwgTG9va2luZyB1cCBmaWxlbmFtZXMsIERpcmVjdG9yeSBmdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gVHJhbnNsYXRpbmcgaW5vZGUgbnVtYmVycyB0byBmaWxlbmFtZXMKKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19nZXRfcGF0aG5hbWUgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBleHQyX2lub190IEB2YXJ7ZGlyfSwgZXh0Ml9pbm9fdCBAdmFye2lub30sIGNoYXIgKipAdmFye25hbWV9KQorQGVuZCBkZWZ0eXBlZnVuCisKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBCaXRtYXAgRnVuY3Rpb25zLCBFWFQyIGRhdGEgYWJzdHJhY3Rpb25zLCBEaXJlY3RvcnkgZnVuY3Rpb25zLCBFWFQyRlMgTGlicmFyeSBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHNlY3Rpb24gQml0bWFwIEZ1bmN0aW9ucworCitAbWVudQorKiBSZWFkaW5nIGFuZCBXcml0aW5nIEJpdG1hcHM6OiAgCisqIEFsbG9jYXRpbmcgQml0bWFwczo6ICAgICAgICAgIAorKiBGcmVlIGJpdG1hcHM6OiAgICAgICAgICAgICAgICAKKyogQml0bWFwIE9wZXJhdGlvbnM6OiAgICAgICAgICAgCisqIENvbXBhcmluZyBiaXRtYXBzOjogICAgICAgICAgIAorKiBNb2RpZnlpbmcgQml0bWFwczo6ICAgICAgICAgICAKKyogUmVzaXppbmcgQml0bWFwczo6ICAgICAgICAgICAgCisqIENsZWFyaW5nIEJpdG1hcHM6OiAgICAgICAgICAgIAorQGVuZCBtZW51CisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgUmVhZGluZyBhbmQgV3JpdGluZyBCaXRtYXBzLCBBbGxvY2F0aW5nIEJpdG1hcHMsIEJpdG1hcCBGdW5jdGlvbnMsIEJpdG1hcCBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gUmVhZGluZyBhbmQgV3JpdGluZyBCaXRtYXBzCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfd3JpdGVfaW5vZGVfYml0bWFwIChleHQyX2ZpbHN5cyBAdmFye2ZzfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2Jsb2NrX2JpdG1hcCAoZXh0Ml9maWxzeXMgQHZhcntmc30pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19yZWFkX2lub2RlX2JpdG1hcCAoZXh0Ml9maWxzeXMgQHZhcntmc30pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19yZWFkX2Jsb2NrX2JpdG1hcCAoZXh0Ml9maWxzeXMgQHZhcntmc30pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19yZWFkX2JpdG1hcHMgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfd3JpdGVfYml0bWFwcyAoZXh0Ml9maWxzeXMgQHZhcntmc30pCitAZW5kIGRlZnR5cGVmdW4KKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBBbGxvY2F0aW5nIEJpdG1hcHMsIEZyZWUgYml0bWFwcywgUmVhZGluZyBhbmQgV3JpdGluZyBCaXRtYXBzLCBCaXRtYXAgRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIEFsbG9jYXRpbmcgQml0bWFwcworCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2FsbG9jYXRlX2dlbmVyaWNfYml0bWFwIChfX3UzMiBAdmFye3N0YXJ0fSwgX191MzIgQHZhcntlbmR9LCBfdTMyIEB2YXJ7cmVhbF9lbmR9LCBjb25zdCBjaGFyICpAdmFye2Rlc2NyfSwgZXh0MmZzX2dlbmVyaWNfYml0bWFwICpAdmFye3JldH0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19hbGxvY2F0ZV9ibG9ja19iaXRtYXAgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBjb25zdCBjaGFyICpAdmFye2Rlc2NyfSwgZXh0MmZzX2Jsb2NrX2JpdG1hcCAqQHZhcntyZXR9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfYWxsb2NhdGVfaW5vZGVfYml0bWFwIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgY29uc3QgY2hhciAqQHZhcntkZXNjcn0sIGV4dDJmc19pbm9kZV9iaXRtYXAgKkB2YXJ7cmV0fSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIEZyZWUgYml0bWFwcywgQml0bWFwIE9wZXJhdGlvbnMsIEFsbG9jYXRpbmcgQml0bWFwcywgQml0bWFwIEZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBGcmVlaW5nIGJpdG1hcHMKKworCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19mcmVlX2dlbmVyaWNfYml0bWFwIChleHQyZnNfaW5vZGVfYml0bWFwIEB2YXJ7Yml0bWFwfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19mcmVlX2Jsb2NrX2JpdG1hcCAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBAdmFye2JpdG1hcH0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAgKGV4dDJmc19pbm9kZV9iaXRtYXAgQHZhcntiaXRtYXB9KQorQGVuZCBkZWZ0eXBlZnVuCisKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBCaXRtYXAgT3BlcmF0aW9ucywgQ29tcGFyaW5nIGJpdG1hcHMsIEZyZWUgYml0bWFwcywgQml0bWFwIEZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBCaXRtYXAgT3BlcmF0aW9ucworCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBAdmFye2JpdG1hcH0sIGJsa190IEB2YXJ7YmxvY2t9KQorCitAZGVmdHlwZWZ1bnggdm9pZCBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBAdmFye2JpdG1hcH0sIGJsa190IEB2YXJ7YmxvY2t9KQorCitAZGVmdHlwZWZ1bnggaW50IGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBAdmFye2JpdG1hcH0sIGJsa190IEB2YXJ7YmxvY2t9KQorCitUaGVzZSBmdW5jdGlvbnMgc2V0LCBjbGVhciwgYW5kIHRlc3QgYml0cyBpbiBhIGJsb2NrIGJpdG1hcCBAdmFye2JpdG1hcH0uCitAZW5kIGRlZnR5cGVmdW4KKworCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19tYXJrX2lub2RlX2JpdG1hcCAoZXh0MmZzX2lub2RlX2JpdG1hcCBAdmFye2JpdG1hcH0sIGV4dDJfaW5vX3QgQHZhcntpbm9kZX0pCisKK0BkZWZ0eXBlZnVueCB2b2lkIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwIChleHQyZnNfaW5vZGVfYml0bWFwIEB2YXJ7Yml0bWFwfSwgZXh0Ml9pbm9fdCBAdmFye2lub2RlfSkKKworQGRlZnR5cGVmdW54IGludCBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAgKGV4dDJmc19pbm9kZV9iaXRtYXAgQHZhcntiaXRtYXB9LCBleHQyX2lub190IEB2YXJ7aW5vZGV9KQorCitUaGVzZSBmdW5jdGlvbnMgc2V0LCBjbGVhciwgYW5kIHRlc3QgYml0cyBpbiBhbiBpbm9kZSBiaXRtYXAgQHZhcntiaXRtYXB9LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZXh0MmZzX2Zhc3RfbWFya19ibG9ja19iaXRtYXAgKGV4dDJmc19ibG9ja19iaXRtYXAgQHZhcntiaXRtYXB9LCBibGtfdCBAdmFye2Jsb2NrfSkKKworQGRlZnR5cGVmdW54IHZvaWQgZXh0MmZzX2Zhc3RfdW5tYXJrX2Jsb2NrX2JpdG1hcCAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBAdmFye2JpdG1hcH0sIGJsa190IEB2YXJ7YmxvY2t9KQorCitAZGVmdHlwZWZ1bnggaW50IGV4dDJmc19mYXN0X3Rlc3RfYmxvY2tfYml0bWFwIChleHQyZnNfYmxvY2tfYml0bWFwIEB2YXJ7Yml0bWFwfSwgYmxrX3QgQHZhcntibG9ja30pCisKK0BkZWZ0eXBlZnVueCB2b2lkIGV4dDJmc19mYXN0X21hcmtfaW5vZGVfYml0bWFwIChleHQyZnNfaW5vZGVfYml0bWFwIEB2YXJ7Yml0bWFwfSwgZXh0Ml9pbm9fdCBAdmFye2lub2RlfSkKKworQGRlZnR5cGVmdW54IHZvaWQgZXh0MmZzX2Zhc3RfdW5tYXJrX2lub2RlX2JpdG1hcCAoZXh0MmZzX2lub2RlX2JpdG1hcCBAdmFye2JpdG1hcH0sIGV4dDJfaW5vX3QgQHZhcntpbm9kZX0pCisKK0BkZWZ0eXBlZnVueCBpbnQgZXh0MmZzX2Zhc3RfdGVzdF9pbm9kZV9iaXRtYXAgKGV4dDJmc19pbm9kZV9iaXRtYXAgQHZhcntiaXRtYXB9LCBleHQyX2lub190IEB2YXJ7aW5vZGV9KQorCitUaGVzZSBgYGZhc3QnJyBmdW5jdGlvbnMgYXJlIGxpa2UgdGhlaXIgbm9ybWFsIGNvdW50ZXJwYXJ0czsgaG93ZXZlciwKK3RoZXkgYXJlIGltcGxlbWVudGVkIGFzIGlubGluZSBmdW5jdGlvbnMgYW5kIGRvIG5vdCBwZXJmb3JtIGJvdW5kcworY2hlY2tzIG9uIHRoZSBpbm9kZSBudW1iZXIgb3IgYmxvY2sgbnVtYmVyOyB0aGV5IGFyZSBhc3N1bWVkIHRvIGJlCitjb3JyZWN0LiAgVGhleSBzaG91bGQgb25seSBiZSB1c2VkIGluIHNwZWVkLWNyaXRpY2FsIGFwcGxpY2F0aW9ucywgd2hlcmUKK3RoZSBpbm9kZSBvciBibG9jayBudW1iZXIgaGFzIGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYnkgb3RoZXIgbWVhbnMuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gYmxrX3QgZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfc3RhcnQgKGV4dDJmc19ibG9ja19iaXRtYXAgQHZhcntiaXRtYXB9KQorQGRlZnR5cGVmdW54IGV4dDJfaW5vX3QgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfc3RhcnQgKGV4dDJmc19pbm9kZV9iaXRtYXAgQHZhcntiaXRtYXB9KQorUmV0dXJuIHRoZSBmaXJzdCBpbm9kZSBvciBibG9jayB3aGljaCBpcyBzdG9yZWQgaW4gdGhlIGJpdG1hcC4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBibGtfdCBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9lbmQgKGV4dDJmc19ibG9ja19iaXRtYXAgQHZhcntiaXRtYXB9KQorQGRlZnR5cGVmdW54IGV4dDJfaW5vX3QgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfZW5kIChleHQyZnNfaW5vZGVfYml0bWFwIEB2YXJ7Yml0bWFwfSkKKworUmV0dXJuIHRoZSBsYXN0IGlub2RlIG9yIGJsb2NrIHdoaWNoIGlzIHN0b3JlZCBpbiB0aGUgYml0bWFwLgorQGVuZCBkZWZ0eXBlZnVuCisKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBDb21wYXJpbmcgYml0bWFwcywgTW9kaWZ5aW5nIEJpdG1hcHMsIEJpdG1hcCBPcGVyYXRpb25zLCBCaXRtYXAgRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIENvbXBhcmluZyBiaXRtYXBzCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfY29tcGFyZV9ibG9ja19iaXRtYXAgKGV4dDJmc19ibG9ja19iaXRtYXAgQHZhcntibTF9LCBleHQyZnNfYmxvY2tfYml0bWFwIEB2YXJ7Ym0yfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2NvbXBhcmVfaW5vZGVfYml0bWFwIChleHQyZnNfaW5vZGVfYml0bWFwIEB2YXJ7Ym0xfSwgZXh0MmZzX2lub2RlX2JpdG1hcCBAdmFye2JtMn0pCitAZW5kIGRlZnR5cGVmdW4KKworCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIE1vZGlmeWluZyBCaXRtYXBzLCBSZXNpemluZyBCaXRtYXBzLCBDb21wYXJpbmcgYml0bWFwcywgQml0bWFwIEZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBNb2RpZnlpbmcgQml0bWFwcworCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2Z1ZGdlX2lub2RlX2JpdG1hcF9lbmQgKGV4dDJmc19pbm9kZV9iaXRtYXAgQHZhcntiaXRtYXB9LCBleHQyX2lub190IEB2YXJ7ZW5kfSwgZXh0Ml9pbm9fdCAqQHZhcntvZW5kfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2Z1ZGdlX2Jsb2NrX2JpdG1hcF9lbmQgKGV4dDJmc19ibG9ja19iaXRtYXAgQHZhcntiaXRtYXB9LCBibGtfdCBAdmFye2VuZH0sIGJsa190ICpAdmFye29lbmR9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgUmVzaXppbmcgQml0bWFwcywgQ2xlYXJpbmcgQml0bWFwcywgTW9kaWZ5aW5nIEJpdG1hcHMsIEJpdG1hcCBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gUmVzaXppbmcgQml0bWFwcworCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX3Jlc2l6ZV9nZW5lcmljX2JpdG1hcCAoX191MzIgQHZhcntuZXdfZW5kfSwgX191MzIgQHZhcntuZXdfcmVhbF9lbmR9LCBleHQyZnNfZ2VuZXJpY19iaXRtYXAgQHZhcntibWFwfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX3Jlc2l6ZV9pbm9kZV9iaXRtYXAgKF9fdTMyIEB2YXJ7bmV3X2VuZH0sIF9fdTMyIEB2YXJ7bmV3X3JlYWxfZW5kfSwgZXh0MmZzX2lub2RlX2JpdG1hcCBAdmFye2JtYXB9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfcmVzaXplX2Jsb2NrX2JpdG1hcCAoX191MzIgQHZhcntuZXdfZW5kfSwgX191MzIgQHZhcntuZXdfcmVhbF9lbmR9LCBleHQyZnNfYmxvY2tfYml0bWFwIEB2YXJ7Ym1hcH0pCitAZW5kIGRlZnR5cGVmdW4KKworCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIENsZWFyaW5nIEJpdG1hcHMsICAsIFJlc2l6aW5nIEJpdG1hcHMsIEJpdG1hcCBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gQ2xlYXJpbmcgQml0bWFwcworCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19jbGVhcl9pbm9kZV9iaXRtYXAgKGV4dDJmc19pbm9kZV9iaXRtYXAgQHZhcntiaXRtYXB9KQorCitUaGlzIGZ1bmN0aW9uIHNldHMgYWxsIG9mIHRoZSBiaXRzIGluIHRoZSBpbm9kZSBiaXRtYXAgQHZhcntiaXRtYXB9IHRvIAorYmUgemVyby4KKworQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZXh0MmZzX2NsZWFyX2Jsb2NrX2JpdG1hcCAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBAdmFye2JpdG1hcH0pCisKK1RoaXMgZnVuY3Rpb24gc2V0cyBhbGwgb2YgdGhlIGJpdHMgaW4gdGhlIGJsb2NrIGJpdG1hcCBAdmFye2JpdG1hcH0gdG8gCitiZSB6ZXJvLgorQGVuZCBkZWZ0eXBlZnVuCisKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBFWFQyIGRhdGEgYWJzdHJhY3Rpb25zLCBCeXRlLXN3YXBwaW5nIGZ1bmN0aW9ucywgQml0bWFwIEZ1bmN0aW9ucywgRVhUMkZTIExpYnJhcnkgRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzZWN0aW9uIEVYVDIgZGF0YSBhYnN0cmFjdGlvbnMKKworVGhlIGV4dDIgbGlicmFyeSBoYXMgYSBudW1iZXIgb2YgYWJzdHJhY3Rpb25zIHdoaWNoIGFyZSB1c2VmdWwgZm9yIGV4dDIKK3V0aWxpdHkgcHJvZ3JhbXMuICAKKworQG1lbnUKKyogQmFkYmxvY2tzIGxpc3QgbWFuYWdlbWVudDo6ICAgCisqIERpcmVjdG9yeS1ibG9jayBsaXN0IG1hbmFnZW1lbnQ6OiAgCisqIElub2RlIGNvdW50IGZ1bmN0aW9uczo6ICAgICAgIAorQGVuZCBtZW51CisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgQmFkYmxvY2tzIGxpc3QgbWFuYWdlbWVudCwgRGlyZWN0b3J5LWJsb2NrIGxpc3QgbWFuYWdlbWVudCwgRVhUMiBkYXRhIGFic3RyYWN0aW9ucywgRVhUMiBkYXRhIGFic3RyYWN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBCYWRibG9ja3MgbGlzdCBtYW5hZ2VtZW50CisKKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19iYWRibG9ja3NfbGlzdF9jcmVhdGUgKGV4dDJfYmFkYmxvY2tzX2xpc3QgKkB2YXJ7cmV0fSwgaW50IEB2YXJ7c2l6ZX0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfZnJlZSAoZXh0Ml9iYWRibG9ja3NfbGlzdCBAdmFye2JifSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2JhZGJsb2Nrc19saXN0X2FkZCAoZXh0Ml9iYWRibG9ja3NfbGlzdCBAdmFye2JifSwgYmxrX3QgQHZhcntibGt9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGludCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfdGVzdCAoZXh0Ml9iYWRibG9ja3NfbGlzdCBAdmFye2JifSwgYmxrX3QgQHZhcntibGt9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9iZWdpbiAoZXh0Ml9iYWRibG9ja3NfbGlzdCBAdmFye2JifSwgZXh0Ml9iYWRibG9ja3NfaXRlcmF0ZSAqQHZhcntyZXR9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGludCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZSAoZXh0Ml9iYWRibG9ja3NfaXRlcmF0ZSBpdGVyLCBibGtfdCAqQHZhcntibGt9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfZW5kIChleHQyX2JhZGJsb2Nrc19pdGVyYXRlIEB2YXJ7aXRlcn0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc191cGRhdGVfYmJfaW5vZGUgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBleHQyX2JhZGJsb2Nrc19saXN0IEB2YXJ7YmJfbGlzdH0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19yZWFkX2JiX2lub2RlIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9iYWRibG9ja3NfbGlzdCAqQHZhcntiYl9saXN0fSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX3JlYWRfYmJfRklMRSAoZXh0Ml9maWxzeXMgQHZhcntmc30sIEZJTEUgKmYsIGV4dDJfYmFkYmxvY2tzX2xpc3QgKkB2YXJ7YmJfbGlzdH0sIHZvaWQgKCppbnZhbGlkKShleHQyX2ZpbHN5cyBAdmFye2ZzfSwgYmxrX3QgQHZhcntibGt9KSkKK0BlbmQgZGVmdHlwZWZ1bgorCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgRGlyZWN0b3J5LWJsb2NrIGxpc3QgbWFuYWdlbWVudCwgSW5vZGUgY291bnQgZnVuY3Rpb25zLCBCYWRibG9ja3MgbGlzdCBtYW5hZ2VtZW50LCBFWFQyIGRhdGEgYWJzdHJhY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIERpcmVjdG9yeS1ibG9jayBsaXN0IG1hbmFnZW1lbnQKKworVGhlIGRibGlzdCBhYnN0cmFjdGlvbiBzdG9yZXMgYSBsaXN0IG9mIGJsb2NrcyBiZWxvbmdpbmcgdG8KK2RpcmVjdG9yaWVzLiAgVGhpcyBsaXN0IGNhbiBiZSB1c2VmdWwgd2hlbiBhIHByb2dyYW0gbmVlZHMgdG8gaW50ZXJhdGUKK292ZXIgYWxsIGRpcmVjdG9yeSBlbnRyaWVzIGluIGEgZmlsZXN5c3RlbTsgQGNvZGV7ZTJmc2NrfSBkb2VzIHRoaXMgaW4KK3Bhc3MgMiBvZiBpdHMgb3BlcmF0aW9ucywgYW5kIEBjb2Rle2RlYnVnZnN9IG5lZWRzIHRvIGRvIHRoaXMgd2hlbiBpdCBpcwordHJ5aW5nIHRvIHR1cm4gYW4gaW5vZGUgbnVtYmVyIGludG8gYSBwYXRobmFtZS4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19pbml0X2RibGlzdCAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfZGJsaXN0ICpAdmFye3JldF9kYmxpc3R9KQorCitDcmVhdGVzIGEgZGJsaXN0IGRhdGEgc3RydWN0dXJlIGFuZCByZXR1cm4gaXQgaW4gQHZhcntyZXRfZGJsaXN0fS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19mcmVlX2RibGlzdCAoZXh0Ml9kYmxpc3QgQHZhcntkYmxpc3R9KQorCitGcmVlIGEgZGJsaXN0IGRhdGEgc3RydWN0dXJlLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfYWRkX2Rpcl9ibG9jayAoZXh0Ml9kYmxpc3QgQHZhcntkYmxpc3R9LCBleHQyX2lub190IEB2YXJ7aW5vfSwgYmxrX3QgQHZhcntibGt9LCBpbnQgQHZhcntibG9ja2NudH0pCisKK0FkZCBhbiBlbnRyeSB0byB0aGUgZGJsaXN0IGRhdGEgc3RydWN0dXJlLiAgVGhpcyBjYWxsIHJlY29yZHMgdGhlIGZhY3QKK3RoYXQgYmxvY2sgbnVtYmVyIEB2YXJ7YmxvY2tjbnR9IG9mIGRpcmVjdG9yeSBpbm9kZSBAdmFye2lub30gaXMgc3RvcmVkCitpbiBibG9jayBAdmFye2Jsa30uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19zZXRfZGlyX2Jsb2NrIChleHQyX2RibGlzdCBAdmFye2RibGlzdH0sIGV4dDJfaW5vX3QgQHZhcntpbm99LCBibGtfdCBAdmFye2Jsa30sIGludCBAdmFye2Jsb2NrY250fSkKKworQ2hhbmdlIGFuIGVudHJ5IGluIHRoZSBkYmxpc3QgZGF0YSBzdHJ1Y3R1cmU7IHRoaXMgY2hhbmdlcyB0aGUgbG9jYXRpb24KK29mIGJsb2NrIG51bWJlciBAdmFye2Jsb2NrY250fSBvZiBkaXJlY3RvcnkgaW5kb2UgQHZhcntpbm99IHRvIGJlIGJsb2NrCitAdmFye2Jsa30uIAorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfZGJsaXN0X2l0ZXJhdGUgKGV4dDJfZGJsaXN0IEB2YXJ7ZGJsaXN0fSwgaW50ICgqZnVuYykoZXh0Ml9maWxzeXMgQHZhcntmc30sIHN0cnVjdCBleHQyX2RiX2VudHJ5ICpAdmFye2RiX2luZm99LCB2b2lkICpAdmFye3ByaXZhdGV9KSwgdm9pZCAqQHZhcntwcml2YXRlfSkKKworVGhpcyBpdGVyYXRvciBjYWxscyBAdmFye2Z1bmN9IGZvciBldmVyeSBlbnRyeSBpbiB0aGUgZGJsaXN0IGRhdGEgc3RydWN0dXJlLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfZGJsaXN0X2Rpcl9pdGVyYXRlIChleHQyX2RibGlzdCBAdmFye2RibGlzdH0sIGludCBmbGFncywgY2hhciAqQHZhcntibG9ja19idWZ9LCBpbnQgKCpmdW5jKShleHQyX2lub190IEB2YXJ7ZGlyfSwgaW50ICBAdmFye2VudHJ5fSwgc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpAdmFye2RpcmVudH0sIGludCBAdmFye29mZnNldH0sIGludCBAdmFye2Jsb2Nrc2l6ZX0sIGNoYXIgKkB2YXJ7YnVmfSwgdm9pZCAqQHZhcntwcml2YXRlfSksIHZvaWQgKkB2YXJ7cHJpdmF0ZX0pCisKK1RoaXMgaXRlcmF0b3IgdGFrZXMgcmVhZHMgaW4gdGhlIGRpcmVjdG9yeSBibG9jayBpbmRpY2F0ZWQgaW4gZWFjaAorZGJsaXN0IGVudHJ5LCBhbmQgY2FsbHMgQHZhcntmdW5jfSBmb3IgZWFjaCBkaXJlY3RvcnkgZW50cnkgaW4gZWFjaAorZGlyZWN0b3J5IGJsb2NrLiAgSWYgQHZhcntkYmxpc3R9IGNvbnRhaW5zIGFsbCB0aGUgZGlyZWN0b3J5IGJsb2NrcyBpbiBhCitmaWxlc3lzdGVtLCB0aGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgY29udmVuaWVudCB3YXkgdG8gaXRlcmF0ZSBvdmVyIGFsbAorZGlyZWN0b3J5IGVudHJpZXMgZm9yIHRoYXQgZmlsZXN5c3RlbS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIElub2RlIGNvdW50IGZ1bmN0aW9ucywgICwgRGlyZWN0b3J5LWJsb2NrIGxpc3QgbWFuYWdlbWVudCwgRVhUMiBkYXRhIGFic3RyYWN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBJbm9kZSBjb3VudCBmdW5jdGlvbnMKKworVGhlIGljb3VudCBhYnN0cmFjdGlvbiBpcyBhIHNwZWNpYWxpemVkIGRhdGEgdHlwZSB1c2VkIGJ5IEBjb2Rle2UyZnNja30KK3RvIHN0b3JlIGhvdyBtYW55IHRpbWVzIGEgcGFydGljdWxhciBpbm9kZSBpcyByZWZlcmVuY2VkIGJ5IHRoZQorZmlsZXN5c3RlbS4gIFRoaXMgaXMgdXNlZCB0d2ljZTsgb25jZSB0byBzdG9yZSB0aGUgYWN0dWFsIG51bWJlciBvZiB0aW1lcwordGhhdCB0aGUgaW5vZGUgaXMgcmVmZXJlbmNlOyBhbmQgb25jZSB0byBzdG9yZSB0aGUgY2xhaW1lZCBudW1iZXIgb2YgdGltZXMKK3RoZSBpbm9kZSBpcyByZWZlcmVuY2VkIGFjY29yZGluZyB0byB0aGUgaW5vZGUgc3RydWN0dXJlLgorCitUaGlzIGFic3RyYWN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGV4dHJlbWVseSBlZmZpY2llbnQgZm9yIHN0b3JpbmcgdGhpcworc29ydCBvZiBpbmZvcm1hdGlvbiwgYnkgdGFraW5nIGFkdmFudGFnZSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgb2YKK2lub2RlIGNvdW50cywgbmFtZWx5ICgxKSBpbm9kZSBjb3VudHMgYXJlIHZlcnkgb2Z0ZW4gemVybyAoYmVjYXVzZQordGhlIGlub2RlIGlzIGN1cnJyZW50bHkgbm90IGluIHVzZSksIGFuZCAoMikgbWFueSBmaWxlcyBoYXZlIGEgaW5vZGUKK2NvdW50IG9mIDEgKGJlY2F1c2UgdGhleSBhcmUgYSBmaWxlIHdoaWNoIGhhcyBubyBhZGRpdGlvbmFsIGhhcmQgbGlua3MpLgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2NyZWF0ZV9pY291bnQyIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgaW50IEB2YXJ7ZmxhZ3N9LCBpbnQgQHZhcntzaXplfSwgZXh0Ml9pY291bnRfdCBAdmFye2hpbnR9LCBleHQyX2ljb3VudF90ICpAdmFye3JldH0pCisKK0NyZWF0ZXMgYW4gaWNvdW50IHN0dWN0dXJlIGZvciBhIGZpbGVzeXN0ZW0gQHZhcntmc30sIHdpdGggaW5pdGlhbCBzcGFjZQorZm9yIEB2YXJ7c2l6ZX0gaW5vZGVzIHdob3NlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiAxLiAgVGhlIEB2YXJ7ZmxhZ3N9CitwYXJhbWV0ZXIgaXMgZWl0aGVyIDAgb3IgQGNvZGV7RVhUMl9JQ09VTlRfT1BUX0lOQ1JFTUVOVH0sIHdoaWNoCitpbmRpY2F0ZXMgdGhhdCBpY291bnQgc3RydWN0dXJlIHNob3VsZCBiZSBhYmxlIHRvIGluY3JlbWVudCBpbm9kZSBjb3VudHMKK3F1aWNrbHkuICBUaGUgaWNvdW50IHN0cnVjdHVyZSBpcyByZXR1cm5lZCBpbiBAdmFye3JldH0uICBUaGUgcmV0dXJuZWQKK2ljb3VudCBzdHJ1Y3R1cmUgaW5pdGlhbGx5IGhhcyBhIGNvdW50IG9mIHplcm8gZm9yIGFsbCBpbm9kZXMuCisKK1RoZSBAdmFye2hpbnR9IHBhcmFtZXRlciBhbGxvd3MgdGhlIGNhbGxlciB0byBvcHRpb25hbGx5IHBhc3MgaW4gYW5vdGhlcgoraWNvdW50IHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGFycmF5IG9mIGlub2RlcyB3aG9zZQorY291bnQgaXMgZ3JlYXRlciB0aGFuIDEuICBJdCBpcyB1c2VkIHB1cmVseSBhcyBhIHNwZWVkIG9wdGltaXphdGlvbiBzbwordGhhdCB0aGUgaWNvdW50IHN0cnVjdHVyZSBjYW4gZGV0ZXJtaW5lIGluIGFkdmFuY2Ugd2hpY2ggaW5vZGVzIGFyZQorbGlrZWx5IHRvIGNvbnRhaW4gYSBjb3VudCBncmF0ZXIgdGhhbiAxLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZXh0MmZzX2ZyZWVfaWNvdW50IChleHQyX2ljb3VudF90IEB2YXJ7aWNvdW50fSkKKworRnJlZXMgYW4gaWNvdW50IHN0cnVjdHVyZS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2ljb3VudF9mZXRjaCAoZXh0Ml9pY291bnRfdCBAdmFye2ljb3VudH0sIGV4dDJfaW5vX3QgQHZhcntpbm99LCBfX3UxNiAqQHZhcntyZXR9KQorCitSZXR1cm5zIGluIEB2YXJ7cmV0fSBmZXRjaGVzIHRoZSBjb3VudCBmb3IgYSBwYXJ0aWN1bGFyIGlub2RlIEB2YXJ7aW5vfS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2ljb3VudF9pbmNyZW1lbnQgKGV4dDJfaWNvdW50X3QgQHZhcntpY291bnR9LCBleHQyX2lub190IEB2YXJ7aW5vfSwgX191MTYgKkB2YXJ7cmV0fSkKKworSW5jcmVtZW50cyB0aGUgcmVmIGNvdW50IGZvciBpbm9kZSBAdmFye2lub30uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19pY291bnRfZGVjcmVtZW50IChleHQyX2ljb3VudF90IEB2YXJ7aWNvdW50fSwgZXh0Ml9pbm9fdCBAdmFye2lub30sIF9fdTE2ICpAdmFye3JldH0pCisKK0RlY3JlbWVudHMgdGhlIHJlZiBjb3VudCBmb3IgaW5vZGUgQHZhcntpbm99LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfaWNvdW50X3N0b3JlIChleHQyX2ljb3VudF90IEB2YXJ7aWNvdW50fSwgZXh0Ml9pbm9fdCBAdmFye2lub30sIF9fdTE2IEB2YXJ7Y291bnR9KQorCitTZXRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIGlub2RlIEB2YXJ7aW5vfSB0byBiZSBAdmFye2NvdW50fS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBleHQyX2lub190IGV4dDJmc19nZXRfaWNvdW50X3NpemUgKGV4dDJfaWNvdW50X3QgQHZhcntpY291bnR9KQorCitSZXR1cm5zIHRoZSBjdXJyZW50IG51bWJlciBvZiBpbm9kZXMgaW4gQHZhcntpY291bnR9IHdoaWNoIGhhcyBhIGNvdW50CitncmVhdGVyIHRoYW4gMS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2ljb3VudF92YWxpZGF0ZSAoZXh0Ml9pY291bnRfdCBAdmFye2ljb3VudH0sIEZJTEUgKkB2YXJ7Zn0pCisKK1ZhbGlkYXRlcyB0aGUgaW50ZXJuYWwgcmVwIGludmFyaWFudCBvZiBAdmFye2ljb3VudH07IGlmIHRoZXJlIGFyZSBhbnkKK3Byb2JsZW1zLCBwcmludCBvdXQgZGVidWdnaW5nIGluZm9ybWF0aW9uIHRvIEB2YXJ7Zn0uICBUaGlzIGZ1bmN0aW9uIGlzCitpbnRlbmRlZCBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nIHVzZSBvbmx5LgorQGVuZCBkZWZ0eXBlZnVuCisKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBCeXRlLXN3YXBwaW5nIGZ1bmN0aW9ucywgT3RoZXIgZnVuY3Rpb25zLCBFWFQyIGRhdGEgYWJzdHJhY3Rpb25zLCBFWFQyRlMgTGlicmFyeSBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHNlY3Rpb24gQnl0ZS1zd2FwcGluZyBmdW5jdGlvbnMKKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfc3dhcF9zdXBlciAoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKiBAdmFye3N1cGVyfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19zd2FwX2dyb3VwX2Rlc2MgKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKkB2YXJ7Z2RwfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19zd2FwX2lub2RlIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgc3RydWN0IGV4dDJfaW5vZGUgKkB2YXJ7dG99LCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqQHZhcntmcm9tfSwgaW50IEB2YXJ7aG9zdG9yZGVyfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBpbnQgZXh0MmZzX25hdGl2ZV9mbGFnICh2b2lkKQorQGVuZCBkZWZ0eXBlZnVuCisKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBPdGhlciBmdW5jdGlvbnMsICAsIEJ5dGUtc3dhcHBpbmcgZnVuY3Rpb25zLCBFWFQyRlMgTGlicmFyeSBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHNlY3Rpb24gT3RoZXIgZnVuY3Rpb25zCisKKy8qIGFsbG9jLmMgKi8KK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfbmV3X2lub2RlIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye2Rpcn0sIGludCBAdmFye21vZGV9LCBleHQyZnNfaW5vZGVfYml0bWFwIEB2YXJ7bWFwfSwgZXh0Ml9pbm9fdCAqQHZhcntyZXR9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfbmV3X2Jsb2NrIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgYmxrX3QgQHZhcntnb2FsfSwgZXh0MmZzX2Jsb2NrX2JpdG1hcCBAdmFye21hcH0sIGJsa190ICpAdmFye3JldH0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19nZXRfZnJlZV9ibG9ja3MgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBibGtfdCBAdmFye3N0YXJ0fSwgYmxrX3QgQHZhcntmaW5pc2h9LCBpbnQgQHZhcntudW19LCBleHQyZnNfYmxvY2tfYml0bWFwIEB2YXJ7bWFwfSwgYmxrX3QgKkB2YXJ7cmV0fSkKK0BlbmQgZGVmdHlwZWZ1bgorCisvKiBjaGVja19kZXNjLmMgKi8KK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfY2hlY2tfZGVzYyAoZXh0Ml9maWxzeXMgQHZhcntmc30pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19nZXRfbnVtX2RpcnMgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBleHQyX2lub190ICpAdmFye3JldF9udW1fZGlyc30pCitAZW5kIGRlZnR5cGVmdW4KKworCisvKiBnZXRzaXplLmMgKi8KK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfZ2V0X2RldmljZV9zaXplIChjb25zdCBjaGFyICpAdmFye2ZpbGV9LCBpbnQgQHZhcntibG9ja3NpemV9LCBibGtfdCAqQHZhcntyZXRibG9ja3N9KQorQGVuZCBkZWZ0eXBlZnVuCisKKworLyogaXNtb3VudGVkLmMgKi8KK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfY2hlY2tfaWZfbW91bnRlZCAoY29uc3QgY2hhciAqQHZhcntmaWxlfSwgaW50ICpAdmFye21vdW50X2ZsYWdzfSkKK0BlbmQgZGVmdHlwZWZ1bgorCisvKiB2ZXJzaW9uLmMgKi8KKworQGRlZnR5cGVmdW4gaW50IGV4dDJmc19nZXRfbGlicmFyeV92ZXJzaW9uIChjb25zdCBjaGFyICoqQHZhcnt2ZXJfc3RyaW5nfSwgY29uc3QgY2hhciAqKkB2YXJ7ZGF0ZV9zdHJpbmd9KQorCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZXh0MiBsaWJyYXJ5LiAgVGhlCityZXR1cm4gdmFsdWUgY29udGFpbnMgYW4gaW50ZWdlciB2ZXJzaW9uIGNvZGUsIHdoaWNoIGNvbnNpc3RzIG9mIHRoZQorbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxpYnJhcnkgbXVsdGlwbGllZCBieSAxMDAsIHBsdXMgdGhlIG1pbm9yCit2ZXJzaW9uIG51bWJlciBvZiB0aGUgbGlicmFyeS4gIEhlbmNlLCBpZiB0aGUgbGlicmFyeSB2ZXJzaW9uIGlzIDEuMDgsCit0aGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBiZSAxMDguCisKK0lmIEB2YXJ7dmVyX3N0cmluZ30gYW5kL29yIEB2YXJ7ZGF0ZV9zdHJpbmd9IGFyZSBub24tTlVMTCwgdGhleSB3aWxsIGJlCitzZXQgdG8gcG9pbnQgYXQgYSBjb25zdGFudCBzdHJpbmcgY29udGFpbmluZyB0aGUgbGlicmFyeSB2ZXJzaW9uIGFuZC9vcgorcmVsZWFzZSBkYXRlLCByZXNwZWN0aXZlbHkuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gaW50IGV4dDJmc19wYXJzZV92ZXJzaW9uX3N0cmluZyAoY29uc3QgY2hhciAqQHZhcnt2ZXJfc3RyaW5nfSkKKworVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHZlcnNpb24gc3RyaW5nIHdoaWNoIG1heSBpbmNsdWRlZCBpbiBhbgorYXBwbGljYXRpb24gYW5kIHJldHVybnMgYSB2ZXJzaW9uIGNvZGUgdXNpbmcgdGhlIHNhbWUgYWxnb3JpdGhtIHVzZWQgYnkKK0Bjb2Rle2V4dDJmc19nZXRfbGlicmFyeV92ZXJzaW9ufS4gIEl0IGNhbiBiZSB1c2VkIGJ5IHByb2dyYW1zIGluY2x1ZGVkCitpbiB0aGUgQGNvZGV7ZTJmc3Byb2dzfSBkaXN0cmlidXRpb24gdG8gYXNzdXJlIHRoYXQgdGhleSBhcmUgdXNpbmcgYW4KK3VwLXRvLWRhdGUgZXh0MiBzaGFyZWQgbGlicmFyeS4KK0BlbmQgZGVmdHlwZWZ1bgorCisvKiBpbmxpbmUgZnVuY3Rpb25zICovCitAZGVmdHlwZWZ1biBpbnQgZXh0MmZzX2dyb3VwX29mX2JsayAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGJsa190IEB2YXJ7YmxrfSkKKworVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBibG9jayBncm91cCB3aGljaCBjb250YWlucyB0aGUgYmxvY2sgQHZhcntibGt9LgorCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gaW50IGV4dDJmc19ncm91cF9vZl9pbm8gKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBleHQyX2lub190IEB2YXJ7aW5vfSkKKworVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBibG9jayBncm91cCB3aGljaCBjb250YWlucyB0aGUgaW5vZGUgQHZhcntpbm99LgorQGVuZCBkZWZ0eXBlZnVuCisKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBDb25jZXB0IEluZGV4LCBGdW5jdGlvbiBJbmRleCwgRVhUMkZTIExpYnJhcnkgRnVuY3Rpb25zLCBUb3AKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHVubnVtYmVyZWQgQ29uY2VwdCBJbmRleAorQHByaW50aW5kZXggY3AKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBGdW5jdGlvbiBJbmRleCwgICwgQ29uY2VwdCBJbmRleCwgVG9wCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0B1bm51bWJlcmVkIEZ1bmN0aW9uIGFuZCBUeXBlIEluZGV4CitAcHJpbnRpbmRleCBmbgorCisKK0Bjb250ZW50cworQGJ5ZQpkaWZmIC0tZ2l0IGEvZG9jL3RleGluZm8udGV4IGIvZG9jL3RleGluZm8udGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZGQwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdGV4aW5mby50ZXgKQEAgLTAsMCArMSw3MjI2IEBACislIHRleGluZm8udGV4IC0tIFRlWCBtYWNyb3MgdG8gaGFuZGxlIFRleGluZm8gZmlsZXMuCislCislIExvYWQgcGxhaW4gaWYgbmVjZXNzYXJ5LCBpLmUuLCBpZiBydW5uaW5nIHVuZGVyIGluaXRleC4KK1xleHBhbmRhZnRlclxpZnhcY3NuYW1lIGZtdG5hbWVcZW5kY3NuYW1lXHJlbGF4XGlucHV0IHBsYWluXGZpCislCitcZGVmXHRleGluZm92ZXJzaW9uezIwMDYtMDItMTMuMTZ9CislCislIENvcHlyaWdodCAoQykgMTk4NSwgMTk4NiwgMTk4OCwgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwKKyUgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlCislIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyUKKyUgVGhpcyB0ZXhpbmZvLnRleCBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorJSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworJSBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0CislIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyUKKyUgVGhpcyB0ZXhpbmZvLnRleCBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorJSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CislIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCislIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyUKKyUgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyUgYWxvbmcgd2l0aCB0aGlzIHRleGluZm8udGV4IGZpbGU7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZQorJSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorJSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyUKKyUgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hlbiB0aGlzIGZpbGUgaXMgcmVhZCBieSBUZVggd2hlbiBwcm9jZXNzaW5nCislIGEgVGV4aW5mbyBzb3VyY2UgZG9jdW1lbnQsIHlvdSBtYXkgdXNlIHRoZSByZXN1bHQgd2l0aG91dAorJSByZXN0cmljdGlvbi4gIChUaGlzIGhhcyBiZWVuIG91ciBpbnRlbnQgc2luY2UgVGV4aW5mbyB3YXMgaW52ZW50ZWQuKQorJQorJSBQbGVhc2UgdHJ5IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0ZXhpbmZvLnRleCBiZWZvcmUgc3VibWl0dGluZyBidWcKKyUgcmVwb3J0czsgeW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb206CislICAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vICh0aGUgVGV4aW5mbyBob21lIHBhZ2UpLCBvcgorJSAgIGZ0cDovL3R1Zy5vcmcvdGV4L3RleGluZm8udGV4CislICAgICAoYW5kIGFsbCBDVEFOIG1pcnJvcnMsIHNlZSBodHRwOi8vd3d3LmN0YW4ub3JnKS4KKyUgVGhlIHRleGluZm8udGV4IGluIGFueSBnaXZlbiBkaXN0cmlidXRpb24gY291bGQgd2VsbCBiZSBvdXQKKyUgb2YgZGF0ZSwgc28gaWYgdGhhdCdzIHdoYXQgeW91J3JlIHVzaW5nLCBwbGVhc2UgY2hlY2suCislCislIFNlbmQgYnVnIHJlcG9ydHMgdG8gYnVnLXRleGluZm9AZ251Lm9yZy4gIFBsZWFzZSBpbmNsdWRlIGluY2x1ZGluZyBhCislIGNvbXBsZXRlIGRvY3VtZW50IGluIGVhY2ggYnVnIHJlcG9ydCB3aXRoIHdoaWNoIHdlIGNhbiByZXByb2R1Y2UgdGhlCislIHByb2JsZW0uICBQYXRjaGVzIGFyZSwgb2YgY291cnNlLCBncmVhdGx5IGFwcHJlY2lhdGVkLgorJQorJSBUbyBwcm9jZXNzIGEgVGV4aW5mbyBtYW51YWwgd2l0aCBUZVgsIGl0J3MgbW9zdCByZWxpYWJsZSB0byB1c2UgdGhlCislIHRleGkyZHZpIHNoZWxsIHNjcmlwdCB0aGF0IGNvbWVzIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gIEZvciBhIHNpbXBsZQorJSBtYW51YWwgZm9vLnRleGksIGhvd2V2ZXIsIHlvdSBjYW4gZ2V0IGF3YXkgd2l0aCB0aGlzOgorJSAgIHRleCBmb28udGV4aQorJSAgIHRleGluZGV4IGZvby4/PworJSAgIHRleCBmb28udGV4aQorJSAgIHRleCBmb28udGV4aQorJSAgIGR2aXBzIGZvby5kdmkgLW8gICMgb3Igd2hhdGV2ZXI7IHRoaXMgbWFrZXMgZm9vLnBzLgorJSBUaGUgZXh0cmEgVGVYIHJ1bnMgZ2V0IHRoZSBjcm9zcy1yZWZlcmVuY2UgaW5mb3JtYXRpb24gY29ycmVjdC4KKyUgU29tZXRpbWVzIG9uZSBydW4gYWZ0ZXIgdGV4aW5kZXggc3VmZmljZXMsIGFuZCBzb21ldGltZXMgeW91IG5lZWQgbW9yZQorJSB0aGFuIHR3bzsgdGV4aTJkdmkgZG9lcyBpdCBhcyBtYW55IHRpbWVzIGFzIG5lY2Vzc2FyeS4KKyUKKyUgSXQgaXMgcG9zc2libGUgdG8gYWRhcHQgdGV4aW5mby50ZXggZm9yIG90aGVyIGxhbmd1YWdlcywgdG8gc29tZQorJSBleHRlbnQuICBZb3UgY2FuIGdldCB0aGUgZXhpc3RpbmcgbGFuZ3VhZ2Utc3BlY2lmaWMgZmlsZXMgZnJvbSB0aGUKKyUgZnVsbCBUZXhpbmZvIGRpc3RyaWJ1dGlvbi4KKyUKKyUgVGhlIEdOVSBUZXhpbmZvIGhvbWUgcGFnZSBpcyBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby4KKworCitcbWVzc2FnZXtMb2FkaW5nIHRleGluZm8gW3ZlcnNpb24gXHRleGluZm92ZXJzaW9uXTp9CisKKyUgSWYgaW4gYSAuZm10IGZpbGUsIHByaW50IHRoZSB2ZXJzaW9uIG51bWJlcgorJSBhbmQgdHVybiBvbiBhY3RpdmUgY2hhcmFjdGVycyB0aGF0IHdlIGNvdWxkbid0IGRvIGVhcmxpZXIgYmVjYXVzZQorJSB0aGV5IG1pZ2h0IGhhdmUgYXBwZWFyZWQgaW4gdGhlIGlucHV0IGZpbGUgbmFtZS4KK1xldmVyeWpvYntcbWVzc2FnZXtbVGV4aW5mbyB2ZXJzaW9uIFx0ZXhpbmZvdmVyc2lvbl19JQorICBcY2F0Y29kZWArPVxhY3RpdmUgXGNhdGNvZGVgXF89XGFjdGl2ZX0KKworXG1lc3NhZ2V7QmFzaWNzLH0KK1xjaGFyZGVmXG90aGVyPTEyCisKKyUgV2UgbmV2ZXIgd2FudCBwbGFpbidzIFxvdXRlciBkZWZpbml0aW9uIG9mIFwrIGluIFRleGluZm8uCislIEZvciBAdGV4LCB3ZSBjYW4gdXNlIFx0YWJhbGlnbi4KK1xsZXRcKyA9IFxyZWxheAorCislIFNhdmUgc29tZSBwbGFpbiB0ZXggbWFjcm9zIHdob3NlIG5hbWVzIHdlIHdpbGwgcmVkZWZpbmUuCitcbGV0XHB0ZXhiPVxiCitcbGV0XHB0ZXhidWxsZXQ9XGJ1bGxldAorXGxldFxwdGV4Yz1cYworXGxldFxwdGV4Y29tbWE9XCwKK1xsZXRccHRleGRvdD1cLgorXGxldFxwdGV4ZG90cz1cZG90cworXGxldFxwdGV4ZW5kPVxlbmQKK1xsZXRccHRleGVxdWl2PVxlcXVpdgorXGxldFxwdGV4ZXhjbGFtPVwhCitcbGV0XHB0ZXhmb290bm90ZT1cZm9vdG5vdGUKK1xsZXRccHRleGd0cj0+CitcbGV0XHB0ZXhoYXQ9XgorXGxldFxwdGV4aT1caQorXGxldFxwdGV4aW5kZW50PVxpbmRlbnQKK1xsZXRccHRleGluc2VydD1caW5zZXJ0CitcbGV0XHB0ZXhsYnJhY2U9XHsKK1xsZXRccHRleGxlc3M9PAorXGxldFxwdGV4bmV3d3JpdGVcbmV3d3JpdGUKK1xsZXRccHRleG5vaW5kZW50PVxub2luZGVudAorXGxldFxwdGV4cGx1cz0rCitcbGV0XHB0ZXhyYnJhY2U9XH0KK1xsZXRccHRleHNsYXNoPVwvCitcbGV0XHB0ZXhzdGFyPVwqCitcbGV0XHB0ZXh0PVx0CisKKyUgSWYgdGhpcyBjaGFyYWN0ZXIgYXBwZWFycyBpbiBhbiBlcnJvciBtZXNzYWdlIG9yIGhlbHAgc3RyaW5nLCBpdAorJSBzdGFydHMgYSBuZXcgbGluZSBpbiB0aGUgb3V0cHV0LgorXG5ld2xpbmVjaGFyID0gYF5eSgorCislIFVzZSBUZVggMy4wJ3MgXGlucHV0bGluZW5vIHRvIGdldCB0aGUgbGluZSBudW1iZXIsIGZvciBiZXR0ZXIgZXJyb3IKKyUgbWVzc2FnZXMsIGJ1dCBpZiB3ZSdyZSB1c2luZyBhbiBvbGQgdmVyc2lvbiBvZiBUZVgsIGRvbid0IGRvIGFueXRoaW5nLgorJQorXGlmeFxpbnB1dGxpbmVub1x0aGlzaXN1bmRlZmluZWQKKyAgXGxldFxsaW5lbnVtYmVyID0gXGVtcHR5ICUgUHJlLTMuMC4KK1xlbHNlCisgIFxkZWZcbGluZW51bWJlcntsLlx0aGVcaW5wdXRsaW5lbm86XHNwYWNlfQorXGZpCisKKyUgU2V0IHVwIGZpeGVkIHdvcmRzIGZvciBFbmdsaXNoIGlmIG5vdCBhbHJlYWR5IHNldC4KK1xpZnhccHV0d29yZEFwcGVuZGl4XHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZEFwcGVuZGl4e0FwcGVuZGl4fVxmaQorXGlmeFxwdXR3b3JkQ2hhcHRlclx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkQ2hhcHRlcntDaGFwdGVyfVxmaQorXGlmeFxwdXR3b3JkZmlsZVx1bmRlZmluZWQgICAgICBcZ2RlZlxwdXR3b3JkZmlsZXtmaWxlfVxmaQorXGlmeFxwdXR3b3JkaW5cdW5kZWZpbmVkICAgICAgICBcZ2RlZlxwdXR3b3JkaW57aW59XGZpCitcaWZ4XHB1dHdvcmRJbmRleElzRW1wdHlcdW5kZWZpbmVkICAgICBcZ2RlZlxwdXR3b3JkSW5kZXhJc0VtcHR5eyhJbmRleCBpcyBlbXB0eSl9XGZpCitcaWZ4XHB1dHdvcmRJbmRleE5vbmV4aXN0ZW50XHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkSW5kZXhOb25leGlzdGVudHsoSW5kZXggaXMgbm9uZXhpc3RlbnQpfVxmaQorXGlmeFxwdXR3b3JkSW5mb1x1bmRlZmluZWQgICAgICBcZ2RlZlxwdXR3b3JkSW5mb3tJbmZvfVxmaQorXGlmeFxwdXR3b3JkSW5zdGFuY2VWYXJpYWJsZW9mXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkSW5zdGFuY2VWYXJpYWJsZW9me0luc3RhbmNlIFZhcmlhYmxlIG9mfVxmaQorXGlmeFxwdXR3b3JkTWV0aG9kb25cdW5kZWZpbmVkICBcZ2RlZlxwdXR3b3JkTWV0aG9kb257TWV0aG9kIG9ufVxmaQorXGlmeFxwdXR3b3JkTm9UaXRsZVx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkTm9UaXRsZXtObyBUaXRsZX1cZmkKK1xpZnhccHV0d29yZG9mXHVuZGVmaW5lZCAgICAgICAgXGdkZWZccHV0d29yZG9me29mfVxmaQorXGlmeFxwdXR3b3Jkb25cdW5kZWZpbmVkICAgICAgICBcZ2RlZlxwdXR3b3Jkb257b259XGZpCitcaWZ4XHB1dHdvcmRwYWdlXHVuZGVmaW5lZCAgICAgIFxnZGVmXHB1dHdvcmRwYWdle3BhZ2V9XGZpCitcaWZ4XHB1dHdvcmRzZWN0aW9uXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmRzZWN0aW9ue3NlY3Rpb259XGZpCitcaWZ4XHB1dHdvcmRTZWN0aW9uXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmRTZWN0aW9ue1NlY3Rpb259XGZpCitcaWZ4XHB1dHdvcmRzZWVcdW5kZWZpbmVkICAgICAgIFxnZGVmXHB1dHdvcmRzZWV7c2VlfVxmaQorXGlmeFxwdXR3b3JkU2VlXHVuZGVmaW5lZCAgICAgICBcZ2RlZlxwdXR3b3JkU2Vle1NlZX1cZmkKK1xpZnhccHV0d29yZFNob3J0VE9DXHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZFNob3J0VE9De1Nob3J0IENvbnRlbnRzfVxmaQorXGlmeFxwdXR3b3JkVE9DXHVuZGVmaW5lZCAgICAgICBcZ2RlZlxwdXR3b3JkVE9De1RhYmxlIG9mIENvbnRlbnRzfVxmaQorJQorXGlmeFxwdXR3b3JkTUphblx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1KYW57SmFudWFyeX1cZmkKK1xpZnhccHV0d29yZE1GZWJcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNRmVie0ZlYnJ1YXJ5fVxmaQorXGlmeFxwdXR3b3JkTU1hclx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1NYXJ7TWFyY2h9XGZpCitcaWZ4XHB1dHdvcmRNQXByXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUFwcntBcHJpbH1cZmkKK1xpZnhccHV0d29yZE1NYXlcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNTWF5e01heX1cZmkKK1xpZnhccHV0d29yZE1KdW5cdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNSnVue0p1bmV9XGZpCitcaWZ4XHB1dHdvcmRNSnVsXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUp1bHtKdWx5fVxmaQorXGlmeFxwdXR3b3JkTUF1Z1x1bmRlZmluZWQgXGdkZWZccHV0d29yZE1BdWd7QXVndXN0fVxmaQorXGlmeFxwdXR3b3JkTVNlcFx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1TZXB7U2VwdGVtYmVyfVxmaQorXGlmeFxwdXR3b3JkTU9jdFx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1PY3R7T2N0b2Jlcn1cZmkKK1xpZnhccHV0d29yZE1Ob3ZcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNTm92e05vdmVtYmVyfVxmaQorXGlmeFxwdXR3b3JkTURlY1x1bmRlZmluZWQgXGdkZWZccHV0d29yZE1EZWN7RGVjZW1iZXJ9XGZpCislCitcaWZ4XHB1dHdvcmREZWZtYWNcdW5kZWZpbmVkICAgIFxnZGVmXHB1dHdvcmREZWZtYWN7TWFjcm99XGZpCitcaWZ4XHB1dHdvcmREZWZzcGVjXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmREZWZzcGVje1NwZWNpYWwgRm9ybX1cZmkKK1xpZnhccHV0d29yZERlZnZhclx1bmRlZmluZWQgICAgXGdkZWZccHV0d29yZERlZnZhcntWYXJpYWJsZX1cZmkKK1xpZnhccHV0d29yZERlZm9wdFx1bmRlZmluZWQgICAgXGdkZWZccHV0d29yZERlZm9wdHtVc2VyIE9wdGlvbn1cZmkKK1xpZnhccHV0d29yZERlZmZ1bmNcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZERlZmZ1bmN7RnVuY3Rpb259XGZpCisKKyUgU2luY2UgdGhlIGNhdGVnb3J5IG9mIHNwYWNlIGlzIG5vdCBrbm93biwgd2UgaGF2ZSB0byBiZSBjYXJlZnVsLgorXGNoYXJkZWZcc3BhY2VjYXQgPSAxMAorXGRlZlxzcGFjZWlzc3BhY2V7XGNhdGNvZGVgXCA9XHNwYWNlY2F0fQorCislIElnbm9yZSBhIHRva2VuLgorJQorXGRlZlxnb2JibGUjMXt9CisKKyUgVGhlIGZvbGxvd2luZyBpcyB1c2VkIGluc2lkZSBzZXZlcmFsIFxlZGVmJ3MuCitcZGVmXG1ha2Vjc25hbWUjMXtcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lIzFcZW5kY3NuYW1lfQorCislIEh5cGhlbmF0aW9uIGZpeGVzLgorXGh5cGhlbmF0aW9ueworICBGbG9yLWktZGEgR2hvc3Qtc2NyaXB0IEdob3N0LXZpZXcgTWFjLU9TIFBvc3QtU2NyaXB0CisgIGFwLXBlbi1kaXggYml0LW1hcCBiaXQtbWFwcworICBkYXRhLWJhc2UgZGF0YS1iYXNlcyBlc2hlbGwgZmFsbC1pbmcgaGFsZi13YXkgbG9uZy1lc3QgbWFuLXUtc2NyaXB0CisgIG1hbi11LXNjcmlwdHMgbWluaS1idWYtZmVyIG1pbmktYnVmLWZlcnMgb3Zlci12aWV3IHBhci1hLWRpZ20KKyAgcGFyLWEtZGlnbXMgcmF0aC1lciByZWMtdGFuLWd1LWxhciByby1ib3QtaWNzIHNlLXZlcmUtbHkgc2V0LXVwIHNwYS1jZXMKKyAgc3BlbGwtaW5nIHNwZWxsLWluZ3MKKyAgc3RhbmQtYWxvbmUgc3Ryb25nLWVzdCB0aW1lLXN0YW1wIHRpbWUtc3RhbXBzIHdoaWNoLWV2ZXIgd2hpdGUtc3BhY2UKKyAgd2lkZS1zcHJlYWQgd3JhcC1hcm91bmQKK30KKworJSBNYXJnaW4gdG8gYWRkIHRvIHJpZ2h0IG9mIGV2ZW4gcGFnZXMsIHRvIGxlZnQgb2Ygb2RkIHBhZ2VzLgorXG5ld2RpbWVuXGJpbmRpbmdvZmZzZXQKK1xuZXdkaW1lblxub3JtYWxvZmZzZXQKK1xuZXdkaW1lblxwYWdld2lkdGggXG5ld2RpbWVuXHBhZ2VoZWlnaHQKKworJSBGb3IgYSBmaW5hbCBjb3B5LCB0YWtlIG91dCB0aGUgcmVjdGFuZ2xlcworJSB0aGF0IG1hcmsgb3ZlcmZ1bGwgYm94ZXMgKGluIGNhc2UgeW91IGhhdmUgZGVjaWRlZAorJSB0aGF0IHRoZSB0ZXh0IGxvb2tzIG9rIGV2ZW4gdGhvdWdoIGl0IHBhc3NlcyB0aGUgbWFyZ2luKS4KKyUKK1xkZWZcZmluYWxvdXR7XG92ZXJmdWxscnVsZT0wcHR9CisKKyUgQHwgaW5zZXJ0cyBhIGNoYW5nZWJhciB0byB0aGUgbGVmdCBvZiB0aGUgY3VycmVudCBsaW5lLiAgSXQgc2hvdWxkCislIHN1cnJvdW5kIGFueSBjaGFuZ2VkIHRleHQuICBUaGlzIGFwcHJvYWNoIGRvZXMgKm5vdCogd29yayBpZiB0aGUKKyUgY2hhbmdlIHNwYW5zIG1vcmUgdGhhbiB0d28gbGluZXMgb2Ygb3V0cHV0LiAgVG8gaGFuZGxlIHRoYXQsIHdlIHdvdWxkCislIGhhdmUgYWRvcHQgYSBtdWNoIG1vcmUgZGlmZmljdWx0IGFwcHJvYWNoIChwdXR0aW5nIG1hcmtzIGludG8gdGhlIG1haW4KKyUgdmVydGljYWwgbGlzdCBmb3IgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGVhY2ggY2hhbmdlKS4KKyUKK1xkZWZcfHslCisgICUgXHZhZGp1c3QgY2FuIG9ubHkgYmUgdXNlZCBpbiBob3Jpem9udGFsIG1vZGUuCisgIFxsZWF2ZXZtb2RlCisgICUKKyAgJSBBcHBlbmQgdGhpcyB2ZXJ0aWNhbCBtb2RlIG1hdGVyaWFsIGFmdGVyIHRoZSBjdXJyZW50IGxpbmUgaW4gdGhlIG91dHB1dC4KKyAgXHZhZGp1c3R7JQorICAgICUgV2Ugd2FudCB0byBpbnNlcnQgYSBydWxlIHdpdGggdGhlIGhlaWdodCBhbmQgZGVwdGggb2YgdGhlIGN1cnJlbnQKKyAgICAlIGxlYWRpbmc7IHRoYXQgaXMgZXhhY3RseSB3aGF0IFxzdHJ1dGJveCBpcyBzdXBwb3NlZCB0byByZWNvcmQuCisgICAgXHZza2lwLVxiYXNlbGluZXNraXAKKyAgICAlCisgICAgJSBcdmFkanVzdC1pdGVtcyBhcmUgaW5zZXJ0ZWQgYXQgdGhlIGxlZnQgZWRnZSBvZiB0aGUgdHlwZS4gIFNvCisgICAgJSB0aGUgXGxsYXAgaGVyZSBtb3ZlcyBvdXQgaW50byB0aGUgbGVmdC1oYW5kIG1hcmdpbi4KKyAgICBcbGxhcHslCisgICAgICAlCisgICAgICAlIEZvciBhIHRoaWNrZXIgb3IgdGhpbm5lciBiYXIsIGNoYW5nZSB0aGUgYDFwdCcuCisgICAgICBcdnJ1bGUgaGVpZ2h0XGJhc2VsaW5lc2tpcCB3aWR0aDFwdAorICAgICAgJQorICAgICAgJSBUaGlzIGlzIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBiYXIgYW5kIHRoZSB0ZXh0LgorICAgICAgXGhza2lwIDEycHQKKyAgICB9JQorICB9JQorfQorCislIFNvbWV0aW1lcyBpdCBpcyBjb252ZW5pZW50IHRvIGhhdmUgZXZlcnl0aGluZyBpbiB0aGUgdHJhbnNjcmlwdCBmaWxlCislIGFuZCBub3RoaW5nIG9uIHRoZSB0ZXJtaW5hbC4gIFdlIGRvbid0IGp1c3QgY2FsbCBcdHJhY2luZ2FsbCBoZXJlLAorJSBzaW5jZSB0aGF0IHByb2R1Y2VzIHNvbWUgdXNlbGVzcyBvdXRwdXQgb24gdGhlIHRlcm1pbmFsLiAgV2UgYWxzbyBtYWtlCislIHNvbWUgZWZmb3J0IHRvIG9yZGVyIHRoZSB0cmFjaW5nIGNvbW1hbmRzIHRvIHJlZHVjZSBvdXRwdXQgaW4gdGhlIGxvZworJSBmaWxlOyBjZi4gdHJhY2Uuc3R5IGluIExhVGVYLgorJQorXGRlZlxnbG9nZ2luZ2FsbHtcYmVnaW5ncm91cCBcZ2xvYmFsZGVmcyA9IDEgXGxvZ2dpbmdhbGwgXGVuZGdyb3VwfSUKK1xkZWZcbG9nZ2luZ2FsbHslCisgIFx0cmFjaW5nc3RhdHMyCisgIFx0cmFjaW5ncGFnZXMxCisgIFx0cmFjaW5nbG9zdGNoYXJzMiAgJSAyIGdpdmVzIHVzIG1vcmUgaW4gZXRleAorICBcdHJhY2luZ3BhcmFncmFwaHMxCisgIFx0cmFjaW5nb3V0cHV0MQorICBcdHJhY2luZ21hY3JvczIKKyAgXHRyYWNpbmdyZXN0b3JlczEKKyAgXHNob3dib3hicmVhZHRoXG1heGRpbWVuIFxzaG93Ym94ZGVwdGhcbWF4ZGltZW4KKyAgXGlmeFxlVGVYdmVyc2lvblx1bmRlZmluZWRcZWxzZSAlIGV0ZXggZ2l2ZXMgdXMgbW9yZSBsb2dnaW5nCisgICAgXHRyYWNpbmdzY2FudG9rZW5zMQorICAgIFx0cmFjaW5naWZzMQorICAgIFx0cmFjaW5nZ3JvdXBzMQorICAgIFx0cmFjaW5nbmVzdGluZzIKKyAgICBcdHJhY2luZ2Fzc2lnbnMxCisgIFxmaQorICBcdHJhY2luZ2NvbW1hbmRzMyAgJSAzIGdpdmVzIHVzIG1vcmUgaW4gZXRleAorICBcZXJyb3Jjb250ZXh0bGluZXMxNgorfSUKKworJSBhZGQgY2hlY2sgZm9yIFxsYXN0cGVuYWx0eSB0byBwbGFpbidzIGRlZmluaXRpb25zLiAgSWYgdGhlIGxhc3QgdGhpbmcKKyUgd2UgZGlkIHdhcyBhIFxub2JyZWFrLCB3ZSBkb24ndCB3YW50IHRvIGluc2VydCBtb3JlIHNwYWNlLgorJQorXGRlZlxzbWFsbGJyZWFre1xpZm51bVxsYXN0cGVuYWx0eTwxMDAwMFxwYXJcaWZkaW1cbGFzdHNraXA8XHNtYWxsc2tpcGFtb3VudAorICBccmVtb3ZlbGFzdHNraXBccGVuYWx0eS01MFxzbWFsbHNraXBcZmlcZml9CitcZGVmXG1lZGJyZWFre1xpZm51bVxsYXN0cGVuYWx0eTwxMDAwMFxwYXJcaWZkaW1cbGFzdHNraXA8XG1lZHNraXBhbW91bnQKKyAgXHJlbW92ZWxhc3Rza2lwXHBlbmFsdHktMTAwXG1lZHNraXBcZmlcZml9CitcZGVmXGJpZ2JyZWFre1xpZm51bVxsYXN0cGVuYWx0eTwxMDAwMFxwYXJcaWZkaW1cbGFzdHNraXA8XGJpZ3NraXBhbW91bnQKKyAgXHJlbW92ZWxhc3Rza2lwXHBlbmFsdHktMjAwXGJpZ3NraXBcZmlcZml9CisKKyUgRm9yIEBjcm9wbWFya3MgY29tbWFuZC4KKyUgRG8gQGNyb3BtYXJrcyB0byBnZXQgY3JvcCBtYXJrcy4KKyUKK1xuZXdpZlxpZmNyb3BtYXJrcworXGxldFxjcm9wbWFya3MgPSBcY3JvcG1hcmtzdHJ1ZQorJQorJSBEaW1lbnNpb25zIHRvIGFkZCBjcm9wbWFya3MgYXQgY29ybmVycy4KKyUgQWRkZWQgYnkgUC4gQS4gTWFjS2F5LCAxMiBOb3YuIDE5ODYKKyUKK1xuZXdkaW1lblxvdXRlcmhzaXplIFxuZXdkaW1lblxvdXRlcnZzaXplICUgc2V0IGJ5IHRoZSBwYXBlciBzaXplIHJvdXRpbmVzCitcbmV3ZGltZW5cY29ybmVybG9uZyAgXGNvcm5lcmxvbmc9MXBjCitcbmV3ZGltZW5cY29ybmVydGhpY2sgXGNvcm5lcnRoaWNrPS4zcHQKK1xuZXdkaW1lblx0b3BhbmRib3R0b21tYXJnaW4gXHRvcGFuZGJvdHRvbW1hcmdpbj0uNzVpbgorCislIE1haW4gb3V0cHV0IHJvdXRpbmUuCitcY2hhcmRlZlxQQUdFID0gMjU1Citcb3V0cHV0ID0ge1xvbmVwYWdlb3V0e1xwYWdlY29udGVudHNcUEFHRX19CisKK1xuZXdib3hcaGVhZGxpbmVib3gKK1xuZXdib3hcZm9vdGxpbmVib3gKKworJSBcb25lcGFnZW91dCB0YWtlcyBhIHZib3ggYXMgYW4gYXJndW1lbnQuICBOb3RlIHRoYXQgXHBhZ2Vjb250ZW50cworJSBkb2VzIGluc2VydGlvbnMsIGJ1dCB5b3UgaGF2ZSB0byBjYWxsIGl0IHlvdXJzZWxmLgorXGRlZlxvbmVwYWdlb3V0IzF7JQorICBcaWZjcm9wbWFya3MgXGhvZmZzZXQ9MHB0IFxlbHNlIFxob2Zmc2V0PVxub3JtYWxvZmZzZXQgXGZpCisgICUKKyAgXGlmb2RkXHBhZ2VubyAgXGFkdmFuY2VcaG9mZnNldCBieSBcYmluZGluZ29mZnNldAorICBcZWxzZSBcYWR2YW5jZVxob2Zmc2V0IGJ5IC1cYmluZGluZ29mZnNldFxmaQorICAlCisgICUgRG8gdGhpcyBvdXRzaWRlIG9mIHRoZSBcc2hpcG91dCBzbyBAY29kZSBldGMuIHdpbGwgYmUgZXhwYW5kZWQgaW4KKyAgJSB0aGUgaGVhZGxpbmUgYXMgdGhleSBzaG91bGQgYmUsIG5vdCB0YWtlbiBsaXRlcmFsbHkgKG91dHB1dHRpbmcgJydjb2RlKS4KKyAgXHNldGJveFxoZWFkbGluZWJveCA9IFx2Ym94e1xsZXRcaHNpemU9XHBhZ2V3aWR0aCBcbWFrZWhlYWRsaW5lfSUKKyAgXHNldGJveFxmb290bGluZWJveCA9IFx2Ym94e1xsZXRcaHNpemU9XHBhZ2V3aWR0aCBcbWFrZWZvb3RsaW5lfSUKKyAgJQorICB7JQorICAgICUgSGF2ZSB0byBkbyB0aGlzIHN0dWZmIG91dHNpZGUgdGhlIFxzaGlwb3V0IGJlY2F1c2Ugd2Ugd2FudCBpdCB0bworICAgICUgdGFrZSBlZmZlY3QgaW4gXHdyaXRlJ3MsIHlldCB0aGUgZ3JvdXAgZGVmaW5lZCBieSB0aGUgXHZib3ggZW5kcworICAgICUgYmVmb3JlIHRoZSBcc2hpcG91dCBydW5zLgorICAgICUKKyAgICBcaW5kZXhkdW1taWVzICAgICAgICAgJSBkb24ndCBleHBhbmQgY29tbWFuZHMgaW4gdGhlIG91dHB1dC4KKyAgICBcbm9ybWFsdHVybm9mZmFjdGl2ZSAgJSBcIGluIGluZGV4IGVudHJpZXMgbXVzdCBub3Qgc3RheSBcLCBlLmcuLCBpZgorICAgICAgICAgICAgICAgJSB0aGUgcGFnZSBicmVhayBoYXBwZW5zIHRvIGJlIGluIHRoZSBtaWRkbGUgb2YgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgICAgICUgV2UgZG9uJ3Qgd2FudCAudnIgKG9yIHdoYXRldmVyKSBlbnRyaWVzIGxpa2UgdGhpczoKKyAgICAgICAgICAgICAgICUgXGVudHJ5e3tcdHQgXGluZGV4YmFja3NsYXNoIH1hY3JvbnltfXszMn17XGNvZGUge1xhY3JvbnltfX0KKyAgICAgICAgICAgICAgICUgIlxhY3JvbnltIiB3b24ndCB3b3JrIHdoZW4gaXQncyByZWFkIGJhY2sgaW47CisgICAgICAgICAgICAgICAlIGl0IG5lZWRzIHRvIGJlIAorICAgICAgICAgICAgICAgJSB7XGNvZGUge3tcdHQgXGJhY2tzbGFzaGN1cmZvbnQgfWFjcm9ueW19CisgICAgXHNoaXBvdXRcdmJveHslCisgICAgICAlIERvIHRoaXMgZWFybHkgc28gcGRmIHJlZmVyZW5jZXMgZ28gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFnZS4KKyAgICAgIFxpZnBkZm1ha2VwYWdlZGVzdCBccGRmZGVzdCBuYW1le1x0aGVccGFnZW5vfSB4eXpcZmkKKyAgICAgICUKKyAgICAgIFxpZmNyb3BtYXJrcyBcdmJveCB0byBcb3V0ZXJ2c2l6ZVxiZ3JvdXAKKyAgICAgICAgXGhzaXplID0gXG91dGVyaHNpemUKKyAgICAgICAgXHZza2lwLVx0b3BhbmRib3R0b21tYXJnaW4KKyAgICAgICAgXHZ0b3AgdG8wcHR7JQorICAgICAgICAgIFxsaW5le1xld3RvcFxoZmlsXGV3dG9wfSUKKyAgICAgICAgICBcbm9pbnRlcmxpbmVza2lwCisgICAgICAgICAgXGxpbmV7JQorICAgICAgICAgICAgXHZib3h7XG1vdmVsZWZ0XGNvcm5lcnRoaWNrXG5zdG9wfSUKKyAgICAgICAgICAgIFxoZmlsbAorICAgICAgICAgICAgXHZib3h7XG1vdmVyaWdodFxjb3JuZXJ0aGlja1xuc3RvcH0lCisgICAgICAgICAgfSUKKyAgICAgICAgICBcdnNzfSUKKyAgICAgICAgXHZza2lwXHRvcGFuZGJvdHRvbW1hcmdpbgorICAgICAgICBcbGluZVxiZ3JvdXAKKyAgICAgICAgICBcaGZpbCAlIGNlbnRlciB0aGUgcGFnZSB3aXRoaW4gdGhlIG91dGVyIChwYWdlKSBoc2l6ZS4KKyAgICAgICAgICBcaWZvZGRccGFnZW5vXGhza2lwXGJpbmRpbmdvZmZzZXRcZmkKKyAgICAgICAgICBcdmJveFxiZ3JvdXAKKyAgICAgIFxmaQorICAgICAgJQorICAgICAgXHVudmJveFxoZWFkbGluZWJveAorICAgICAgXHBhZ2Vib2R5eyMxfSUKKyAgICAgIFxpZmRpbVxodFxmb290bGluZWJveCA+IDBwdAorICAgICAgICAlIE9ubHkgbGVhdmUgdGhpcyBzcGFjZSBpZiB0aGUgZm9vdGxpbmUgaXMgbm9uZW1wdHkuCisgICAgICAgICUgKFdlIGxlc3NlbmVkIFx2c2l6ZSBmb3IgaXQgaW4gXG9kZGZvb3Rpbmd4eHguKQorICAgICAgICAlIFRoZSBcYmFzZWxpbmVza2lwPTI0cHQgaW4gcGxhaW4ncyBcbWFrZWZvb3RsaW5lIGhhcyBubyBlZmZlY3QuCisgICAgICAgIFx2c2tpcCAyXGJhc2VsaW5lc2tpcAorICAgICAgICBcdW52Ym94XGZvb3RsaW5lYm94CisgICAgICBcZmkKKyAgICAgICUKKyAgICAgIFxpZmNyb3BtYXJrcworICAgICAgICAgIFxlZ3JvdXAgJSBlbmQgb2YgXHZib3hcYmdyb3VwCisgICAgICAgIFxoZmlsXGVncm91cCAlIGVuZCBvZiAoY2VudGVyaW5nKSBcbGluZVxiZ3JvdXAKKyAgICAgICAgXHZza2lwXHRvcGFuZGJvdHRvbW1hcmdpbiBwbHVzMWZpbGwgbWludXMxZmlsbAorICAgICAgICBcYm94bWF4ZGVwdGggPSBcY29ybmVydGhpY2sKKyAgICAgICAgXHZib3ggdG8wcHR7XHZzcworICAgICAgICAgIFxsaW5leyUKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlbGVmdFxjb3JuZXJ0aGlja1xuc2JvdH0lCisgICAgICAgICAgICBcaGZpbGwKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlcmlnaHRcY29ybmVydGhpY2tcbnNib3R9JQorICAgICAgICAgIH0lCisgICAgICAgICAgXG5vaW50ZXJsaW5lc2tpcAorICAgICAgICAgIFxsaW5le1xld2JvdFxoZmlsXGV3Ym90fSUKKyAgICAgICAgfSUKKyAgICAgIFxlZ3JvdXAgJSBcdmJveCBmcm9tIGZpcnN0IGNyb3BtYXJrcyBjbGF1c2UKKyAgICAgIFxmaQorICAgIH0lIGVuZCBvZiBcc2hpcG91dFx2Ym94CisgIH0lIGVuZCBvZiBncm91cCB3aXRoIFxpbmRleGR1bW1pZXMKKyAgXGFkdmFuY2VwYWdlbm8KKyAgXGlmbnVtXG91dHB1dHBlbmFsdHk+LTIwMDAwIFxlbHNlXGRvc3VwZXJlamVjdFxmaQorfQorCitcbmV3aW5zZXJ0XG1hcmdpbiBcZGltZW5cbWFyZ2luPVxtYXhkaW1lbgorCitcZGVmXHBhZ2Vib2R5IzF7XHZib3ggdG9ccGFnZWhlaWdodHtcYm94bWF4ZGVwdGg9XG1heGRlcHRoICMxfX0KK3tcY2F0Y29kZWBcQCA9MTEKK1xnZGVmXHBhZ2Vjb250ZW50cyMxe1xpZnZvaWRcdG9waW5zXGVsc2VcdW52Ym94XHRvcGluc1xmaQorJSBtYXJnaW5hbCBoYWNrcywganVoYUB2aWlzYS51dWNwIChKdWhhIFRha2FsYSkKK1xpZnZvaWRcbWFyZ2luXGVsc2UgJSBtYXJnaW5hbCBpbmZvIGlzIHByZXNlbnQKKyAgXHJsYXB7XGtlcm5caHNpemVcdmJveCB0b1x6QHtca2VybjFwdFxib3hcbWFyZ2luIFx2c3N9fVxmaQorXGRpbWVuQD1cZHAjMSBcdW52Ym94IzEKK1xpZnZvaWRcZm9vdGluc1xlbHNlXHZza2lwXHNraXBcZm9vdGluc1xmb290bm90ZXJ1bGUgXHVudmJveFxmb290aW5zXGZpCitcaWZyQGdnZWRib3R0b20gXGtlcm4tXGRpbWVuQCBcdmZpbCBcZml9Cit9CisKKyUgSGVyZSBhcmUgdGhlIHJ1bGVzIGZvciB0aGUgY3JvcG1hcmtzLiAgTm90ZSB0aGF0IHRoZXkgYXJlCislIG9mZnNldCBzbyB0aGF0IHRoZSBzcGFjZSBiZXR3ZWVuIHRoZW0gaXMgdHJ1bHkgXG91dGVyaHNpemUgb3IgXG91dGVydnNpemUKKyUgKFAuIEEuIE1hY0theSwgMTIgTm92ZW1iZXIsIDE5ODYpCislCitcZGVmXGV3dG9we1x2cnVsZSBoZWlnaHRcY29ybmVydGhpY2sgZGVwdGgwcHQgd2lkdGhcY29ybmVybG9uZ30KK1xkZWZcbnN0b3B7XHZib3gKKyAge1xocnVsZSBoZWlnaHRcY29ybmVydGhpY2sgZGVwdGhcY29ybmVybG9uZyB3aWR0aFxjb3JuZXJ0aGlja319CitcZGVmXGV3Ym90e1x2cnVsZSBoZWlnaHQwcHQgZGVwdGhcY29ybmVydGhpY2sgd2lkdGhcY29ybmVybG9uZ30KK1xkZWZcbnNib3R7XHZib3gKKyAge1xocnVsZSBoZWlnaHRcY29ybmVybG9uZyBkZXB0aFxjb3JuZXJ0aGljayB3aWR0aFxjb3JuZXJ0aGlja319CisKKyUgUGFyc2UgYW4gYXJndW1lbnQsIHRoZW4gcGFzcyBpdCB0byAjMS4gIFRoZSBhcmd1bWVudCBpcyB0aGUgcmVzdCBvZgorJSB0aGUgaW5wdXQgbGluZSAoZXhjZXB0IHdlIHJlbW92ZSBhIHRyYWlsaW5nIGNvbW1lbnQpLiAgIzEgc2hvdWxkIGJlIGEKKyUgbWFjcm8gd2hpY2ggZXhwZWN0cyBhbiBvcmRpbmFyeSB1bmRlbGltaXRlZCBUZVggYXJndW1lbnQuCislCitcZGVmXHBhcnNlYXJne1xwYXJzZWFyZ3VzaW5ne319CitcZGVmXHBhcnNlYXJndXNpbmcjMSMyeyUKKyAgXGRlZlxuZXh0eyMyfSUKKyAgXGJlZ2luZ3JvdXAKKyAgICBcb2JleWxpbmVzCisgICAgXHNwYWNlaXNzcGFjZQorICAgICMxJQorICAgIFxwYXJzZWFyZ2xpbmVcZW1wdHklIEluc2VydCB0aGUgXGVtcHR5IHRva2VuLCBzZWUgXGZpbmlzaHBhcnNlYXJnIGJlbG93LgorfQorCit7XG9iZXlsaW5lcyAlCisgIFxnZGVmXHBhcnNlYXJnbGluZSMxXl5NeyUKKyAgICBcZW5kZ3JvdXAgJSBFbmQgb2YgdGhlIGdyb3VwIHN0YXJ0ZWQgaW4gXHBhcnNlYXJnLgorICAgIFxhcmdyZW1vdmVjb21tZW50ICMxXGNvbW1lbnRcQXJnVGVybSUKKyAgfSUKK30KKworJSBGaXJzdCByZW1vdmUgYW55IEBjb21tZW50LCB0aGVuIGFueSBAYyBjb21tZW50LgorXGRlZlxhcmdyZW1vdmVjb21tZW50IzFcY29tbWVudCMyXEFyZ1Rlcm17XGFyZ3JlbW92ZWMgIzFcY1xBcmdUZXJtfQorXGRlZlxhcmdyZW1vdmVjIzFcYyMyXEFyZ1Rlcm17XGFyZ2NoZWNrc3BhY2VzIzFcXl5NXEFyZ1Rlcm19CisKKyUgRWFjaCBvY2N1cmVuY2Ugb2YgYFxeXk0nIG9yIGA8c3BhY2U+XF5eTScgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuCislCislIFxhcmdyZW1vdmVjIG1pZ2h0IGxlYXZlIHVzIHdpdGggdHJhaWxpbmcgc3BhY2UsIGUuZy4sCislICAgIEBlbmQgaXRlbWl6ZSAgQGMgZm9vCislIFRoaXMgc3BhY2UgdG9rZW4gdW5kZXJnb2VzIHRoZSBzYW1lIHByb2NlZHVyZSBhbmQgaXMgZXZlbnR1YWxseSByZW1vdmVkCislIGJ5IFxmaW5pc2hwYXJzZWFyZy4KKyUKK1xkZWZcYXJnY2hlY2tzcGFjZXMjMVxeXk17XGFyZ2NoZWNrc3BhY2VzWCMxXF5eTSBcXl5NfQorXGRlZlxhcmdjaGVja3NwYWNlc1gjMSBcXl5Ne1xhcmdjaGVja3NwYWNlc1kjMVxeXk19CitcZGVmXGFyZ2NoZWNrc3BhY2VzWSMxXF5eTSMyXF5eTSMzXEFyZ1Rlcm17JQorICBcZGVmXHRlbXB7IzN9JQorICBcaWZ4XHRlbXBcZW1wdHkKKyAgICAlIFdlIGNhbm5vdCB1c2UgXG5leHQgaGVyZSwgYXMgaXQgaG9sZHMgdGhlIG1hY3JvIHRvIHJ1bjsKKyAgICAlIHRodXMgd2UgcmV1c2UgXHRlbXAuCisgICAgXGxldFx0ZW1wXGZpbmlzaHBhcnNlYXJnCisgIFxlbHNlCisgICAgXGxldFx0ZW1wXGFyZ2NoZWNrc3BhY2VzCisgIFxmaQorICAlIFB1dCB0aGUgc3BhY2UgdG9rZW4gaW46CisgIFx0ZW1wIzEgIzNcQXJnVGVybQorfQorCislIElmIGEgX2RlbGltaXRlZF8gYXJndW1lbnQgaXMgZW5jbG9zZWQgaW4gYnJhY2VzLCB0aGV5IGdldCBzdHJpcHBlZDsgc28KKyUgdG8gZ2V0IF9leGFjdGx5XyB0aGUgcmVzdCBvZiB0aGUgbGluZSwgd2UgaGFkIHRvIHByZXZlbnQgc3VjaCBzaXR1YXRpb24uCislIFdlIHByZXBlbmRlZCBhbiBcZW1wdHkgdG9rZW4gYXQgdGhlIHZlcnkgYmVnaW5uaW5nIGFuZCB3ZSBleHBhbmQgaXQgbm93LAorJSBqdXN0IGJlZm9yZSBwYXNzaW5nIHRoZSBjb250cm9sIHRvIFxuZXh0LgorJSAoU2ltaWxhcmlseSwgd2UgaGF2ZSB0byB0aGluayBhYm91dCAjMyBvZiBcYXJnY2hlY2tzcGFjZXNZIGFib3ZlOiBpdCBpcworJSBlaXRoZXIgdGhlIG51bGwgc3RyaW5nLCBvciBpdCBlbmRzIHdpdGggXF5eTS0tLXRodXMgdGhlcmUgaXMgbm8gZGFuZ2VyCislIHRoYXQgYSBwYWlyIG9mIGJyYWNlcyB3b3VsZCBiZSBzdHJpcHBlZC4KKyUKKyUgQnV0IGZpcnN0LCB3ZSBoYXZlIHRvIHJlbW92ZSB0aGUgdHJhaWxpbmcgc3BhY2UgdG9rZW4uCislCitcZGVmXGZpbmlzaHBhcnNlYXJnIzEgXEFyZ1Rlcm17XGV4cGFuZGFmdGVyXG5leHRcZXhwYW5kYWZ0ZXJ7IzF9fQorCislIFxwYXJzZWFyZ2RlZlxmb297Li4ufQorJQlpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8KKyUgXGRlZlxmb297XHBhcnNlYXJnXFhmb299CislIFxkZWZcWGZvbyMxey4uLn0KKyUKKyUgQWN0dWFsbHksIEkgdXNlIFxjc25hbWVcc3RyaW5nXGZvb1xlbmRjc25hbWUsIGllLiBcXGZvbywgYXMgaXQgaXMgbXkKKyUgZmF2b3VyaXRlIFRlWCB0cmljay4gIC0ta2FzYWwsIDE2bm92MDMKKworXGRlZlxwYXJzZWFyZ2RlZiMxeyUKKyAgXGV4cGFuZGFmdGVyIFxkb3BhcnNlYXJnZGVmIFxjc25hbWVcc3RyaW5nIzFcZW5kY3NuYW1lICMxJQorfQorXGRlZlxkb3BhcnNlYXJnZGVmIzEjMnslCisgIFxkZWYjMntccGFyc2VhcmcjMX0lCisgIFxkZWYjMSMjMSUKK30KKworJSBTZXZlcmFsIHV0aWxpdHkgZGVmaW5pdGlvbnMgd2l0aCBhY3RpdmUgc3BhY2U6Cit7CisgIFxvYmV5c3BhY2VzCisgIFxnZGVmXG9iZXllZHNwYWNleyB9CisKKyAgJSBNYWtlIGVhY2ggc3BhY2UgY2hhcmFjdGVyIGluIHRoZSBpbnB1dCBwcm9kdWNlIGEgbm9ybWFsIGludGVyd29yZAorICAlIHNwYWNlIGluIHRoZSBvdXRwdXQuICBEb24ndCBhbGxvdyBhIGxpbmUgYnJlYWsgYXQgdGhpcyBzcGFjZSwgYXMgdGhpcworICAlIGlzIHVzZWQgb25seSBpbiBlbnZpcm9ubWVudHMgbGlrZSBAZXhhbXBsZSwgd2hlcmUgZWFjaCBsaW5lIG9mIGlucHV0CisgICUgc2hvdWxkIHByb2R1Y2UgYSBsaW5lIG9mIG91dHB1dCBhbnl3YXkuCisgICUKKyAgXGdkZWZcc2Vwc3BhY2Vze1xvYmV5c3BhY2VzXGxldCA9XHRpZX0KKworICAlIElmIGFuIGluZGV4IGNvbW1hbmQgaXMgdXNlZCBpbiBhbiBAZXhhbXBsZSBlbnZpcm9ubWVudCwgYW55IHNwYWNlcworICAlIHRoZXJlaW4gc2hvdWxkIGJlY29tZSByZWd1bGFyIHNwYWNlcyBpbiB0aGUgcmF3IGluZGV4IGZpbGUsIG5vdCB0aGUKKyAgJSBleHBhbnNpb24gb2YgXHRpZSAoXGxlYXZldm1vZGUgXHBlbmFsdHkgXEBNIFwgKS4KKyAgXGdkZWZcdW5zZXBzcGFjZXN7XGxldCA9XHNwYWNlfQorfQorCisKK1xkZWZcZmx1c2hjcntcaWZ4XHBhclxsaXNwcGFyIFxkZWZcbmV4dCMjMXt9XGVsc2UgXGxldFxuZXh0PVxyZWxheCBcZmkgXG5leHR9CisKKyUgRGVmaW5lIHRoZSBmcmFtZXdvcmsgZm9yIGVudmlyb25tZW50cyBpbiB0ZXhpbmZvLnRleC4gIEl0J3MgdXNlZCBsaWtlIHRoaXM6CislCislICAgXGVudmRlZlxmb297Li4ufQorJSAgIFxkZWZcRWZvb3suLi59CislCislIEl0J3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIFxlbnZkZWYgdG8gaW5zZXJ0IFxiZWdpbmdyb3VwIGJlZm9yZSB0aGUKKyUgYWN0dWFsIGJvZHk7IEBlbmQgY2xvc2VzIHRoZSBncm91cCBhZnRlciBjYWxsaW5nIFxFZm9vLiAgXGVudmRlZiBhbHNvCislIGRlZmluZXMgXHRoaXNlbnYsIHNvIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIGtub3duOyBAZW5kIGNoZWNrcworJSB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCBuYW1lIG1hdGNoZXMuICBUaGUgXGNoZWNrZW52IG1hY3JvIGNhbiBhbHNvIGJlCislIHVzZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyB0aGUgb25lIGV4cGVjdGVkLgorJQorJSBOb24tZmFsc2UgY29uZGl0aW9uYWxzIChAaWZ0ZXgsIEBpZnNldCkgZG9uJ3QgZml0IGludG8gdGhpcywgc28gdGhleQorJSBhcmUgbm90IHRyZWF0ZWQgYXMgZW52aXJvbWVudHM7IHRoZXkgZG9uJ3Qgb3BlbiBhIGdyb3VwLiAgKFRoZQorJSBpbXBsZW1lbnRhdGlvbiBvZiBAZW5kIHRha2VzIGNhcmUgbm90IHRvIGNhbGwgXGVuZGdyb3VwIGluIHRoaXMKKyUgc3BlY2lhbCBjYXNlLikKKworCislIEF0IHJ1bnRpbWUsIGVudmlyb25tZW50cyBzdGFydCB3aXRoIHRoaXM6CitcZGVmXHN0YXJ0ZW52aXJvbm1lbnQjMXtcYmVnaW5ncm91cFxkZWZcdGhpc2VudnsjMX19CislIGluaXRpYWxpemUKK1xsZXRcdGhpc2VudlxlbXB0eQorCislIC4uLiBidXQgdGhleSBnZXQgZGVmaW5lZCB2aWEgYGBcZW52ZGVmXGZvb3suLi59Jyc6CitcbG9uZ1xkZWZcZW52ZGVmIzEjMntcZGVmIzF7XHN0YXJ0ZW52aXJvbm1lbnQjMSMyfX0KK1xkZWZcZW52cGFyc2VhcmdkZWYjMSMye1xwYXJzZWFyZ2RlZiMxe1xzdGFydGVudmlyb25tZW50IzEjMn19CisKKyUgQ2hlY2sgd2hldGhlciB3ZSdyZSBpbiB0aGUgcmlnaHQgZW52aXJvbm1lbnQ6CitcZGVmXGNoZWNrZW52IzF7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRoaXNlbnZcdGVtcAorICBcZWxzZQorICAgIFxiYWRlbnZlcnIKKyAgXGZpCit9CisKKyUgRXZpcm9ubWVudCBtaXNtYXRjaCwgIzEgZXhwZWN0ZWQ6CitcZGVmXGJhZGVudmVycnslCisgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgIFxlcnJtZXNzYWdle1RoaXMgY29tbWFuZCBjYW4gYXBwZWFyIG9ubHkgXGluZW52aXJvbm1lbnRcdGVtcCwKKyAgICBub3QgXGluZW52aXJvbm1lbnRcdGhpc2Vudn0lCit9CitcZGVmXGluZW52aXJvbm1lbnQjMXslCisgIFxpZngjMVxlbXB0eQorICAgIG91dCBvZiBhbnkgZW52aXJvbm1lbnQlCisgIFxlbHNlCisgICAgaW4gZW52aXJvbm1lbnQgXGV4cGFuZGFmdGVyXHN0cmluZyMxJQorICBcZmkKK30KKworJSBAZW5kIGZvbyBleGVjdXRlcyB0aGUgZGVmaW5pdGlvbiBvZiBcRWZvby4KKyUgQnV0IGZpcnN0LCBpdCBleGVjdXRlcyBhIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgXGNoZWNrZW52CislCitccGFyc2VhcmdkZWZcZW5keyUKKyAgXGlmIDFcY3NuYW1lIGlzY29uZC4jMVxlbmRjc25hbWUKKyAgXGVsc2UKKyAgICAlIFRoZSBnZW5lcmFsIHdvcmRpbmcgb2YgXGJhZGVudmVyciBtYXkgbm90IGJlIGlkZWFsLCBidXQuLi4gLS1rYXNhbCwgMDZub3YwMworICAgIFxleHBhbmRhZnRlclxjaGVja2Vudlxjc25hbWUjMVxlbmRjc25hbWUKKyAgICBcY3NuYW1lIEUjMVxlbmRjc25hbWUKKyAgICBcZW5kZ3JvdXAKKyAgXGZpCit9CisKK1xuZXdoZWxwXEVNc2ltcGxle1ByZXNzIFJFVFVSTiB0byBjb250aW51ZS59CisKKworJSUgU2ltcGxlIHNpbmdsZS1jaGFyYWN0ZXIgQCBjb21tYW5kcworCislIEBAIHByaW50cyBhbiBACislIEtsdWRnZSB0aGlzIHVudGlsIHRoZSBmb250cyBhcmUgcmlnaHQgKGdycikuCitcZGVmXEB7e1x0dFxjaGFyNjR9fQorCislIFRoaXMgaXMgdHVybmVkIG9mZiBiZWNhdXNlIGl0IHdhcyBuZXZlciBkb2N1bWVudGVkCislIGFuZCB5b3UgY2FuIHVzZSBAd3suLi59IGFyb3VuZCBhIHF1b3RlIHRvIHN1cHByZXNzIGxpZ2F0dXJlcy4KKyUlIERlZmluZSBAYCBhbmQgQCcgdG8gYmUgdGhlIHNhbWUgYXMgYCBhbmQgJworJSUgYnV0IHN1cHByZXNzaW5nIGxpZ2F0dXJlcy4KKyVcZGVmXGB7e2B9fQorJVxkZWZcJ3t7J319CisKKyUgVXNlZCB0byBnZW5lcmF0ZSBxdW90ZWQgYnJhY2VzLgorXGRlZlxteWxicmFjZSB7e1x0dFxjaGFyMTIzfX0KK1xkZWZcbXlyYnJhY2Uge3tcdHRcY2hhcjEyNX19CitcbGV0XHs9XG15bGJyYWNlCitcbGV0XH09XG15cmJyYWNlCitcYmVnaW5ncm91cAorICAlIERlZmluaXRpb25zIHRvIHByb2R1Y2UgXHsgYW5kIFx9IGNvbW1hbmRzIGZvciBpbmRpY2VzLAorICAlIGFuZCBAeyBhbmQgQH0gZm9yIHRoZSBhdXgvdG9jIGZpbGVzLgorICBcY2F0Y29kZWBceyA9IFxvdGhlciBcY2F0Y29kZWBcfSA9IFxvdGhlcgorICBcY2F0Y29kZWBcWyA9IDEgXGNhdGNvZGVgXF0gPSAyCisgIFxjYXRjb2RlYFwhID0gMCBcY2F0Y29kZWBcXCA9IFxvdGhlcgorICAhZ2RlZiFsYnJhY2VjbWRbXHtdJQorICAhZ2RlZiFyYnJhY2VjbWRbXH1dJQorICAhZ2RlZiFsYnJhY2VhdGNtZFtAe10lCisgICFnZGVmIXJicmFjZWF0Y21kW0B9XSUKKyFlbmRncm91cAorCislIEBjb21tYXt9IHRvIGF2b2lkICwgcGFyc2luZyBwcm9ibGVtcy4KK1xsZXRcY29tbWEgPSAsCisKKyUgQWNjZW50czogQCwgQGRvdGFjY2VudCBAcmluZ2FjY2VudCBAdWJhcmFjY2VudCBAdWRvdGFjY2VudAorJSBPdGhlcnMgYXJlIGRlZmluZWQgYnkgcGxhaW4gVGVYOiBAYCBAJyBAIiBAXiBAfiBAPSBAdSBAdiBASC4KK1xsZXRcLCA9IFxjCitcbGV0XGRvdGFjY2VudCA9IFwuCitcZGVmXHJpbmdhY2NlbnQjMXt7XGFjY2VudDIzICMxfX0KK1xsZXRcdGllYWNjZW50ID0gXHQKK1xsZXRcdWJhcmFjY2VudCA9IFxiCitcbGV0XHVkb3RhY2NlbnQgPSBcZAorCislIE90aGVyIHNwZWNpYWwgY2hhcmFjdGVyczogQHF1ZXN0aW9uZG93biBAZXhjbGFtZG93biBAb3JkZiBAb3JkbQorJSBQbGFpbiBUZVggZGVmaW5lczogQEFBIEBBRSBATyBAT0UgQEwgKHBsdXMgbG93ZXJjYXNlIHZlcnNpb25zKSBAc3MuCitcZGVmXHF1ZXN0aW9uZG93bns/YH0KK1xkZWZcZXhjbGFtZG93bnshYH0KK1xkZWZcb3JkZntcbGVhdmV2bW9kZVxyYWlzZTFleFxoYm94e1xzZWxlY3Rmb250c1xsbGxzaXplIFx1bmRlcmJhcnthfX19CitcZGVmXG9yZG17XGxlYXZldm1vZGVccmFpc2UxZXhcaGJveHtcc2VsZWN0Zm9udHNcbGxsc2l6ZSBcdW5kZXJiYXJ7b319fQorCislIERvdGxlc3MgaSBhbmQgZG90bGVzcyBqLCB1c2VkIGZvciBhY2NlbnRzLgorXGRlZlxpbWFjcm97aX0KK1xkZWZcam1hY3Jve2p9CitcZGVmXGRvdGxlc3MjMXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxpbWFjcm8gXHB0ZXhpCisgIFxlbHNlXGlmeFx0ZW1wXGptYWNybyBcagorICBcZWxzZSBcZXJybWVzc2FnZXtAZG90bGVzcyBjYW4gYmUgdXNlZCBvbmx5IHdpdGggaSBvciBqfSUKKyAgXGZpXGZpCit9CisKKyUgVGhlIFxUZVh7fSBsb2dvLCBhcyBpbiBwbGFpbiwgYnV0IHJlc2V0dGluZyB0aGUgc3BhY2luZyBzbyB0aGF0IGEKKyUgcGVyaW9kIGZvbGxvd2luZyBjb3VudHMgYXMgZW5kaW5nIGEgc2VudGVuY2UuICAoSWRlYSBmb3VuZCBpbiBsYXRleC4pCislCitcZWRlZlxUZVh7XFRlWCBcc3BhY2VmYWN0b3I9MTAwMCB9CisKKyUgQExhVGVYe30gbG9nby4gIE5vdCBxdWl0ZSB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSBkZWZpbml0aW9uIGluCislIGxhdGV4Lmx0eCwgc2luY2Ugd2UgdXNlIGEgZGlmZmVyZW50IGZvbnQgZm9yIHRoZSByYWlzZWQgQTsgaXQncyBtb3N0CislIGNvbnZlbmllbnQgZm9yIHVzIHRvIHVzZSBhbiBleHBsaWNpdGx5IHNtYWxsZXIgZm9udCwgcmF0aGVyIHRoYW4gdXNpbmcKKyUgdGhlIFxzY3JpcHRzdHlsZSBmb250IChzaW5jZSB3ZSBkb24ndCByZXNldCBcc2NyaXB0c3R5bGUgYW5kCislIFxzY3JpcHRzY3JpcHRzdHlsZSkuCislCitcZGVmXExhVGVYeyUKKyAgTFxrZXJuLS4zNmVtCisgIHtcc2V0Ym94MD1caGJveHtUfSUKKyAgIFx2Ym94IHRvIFxodDB7XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgQX1cdnNzfX0lCisgIFxrZXJuLS4xNWVtCisgIFxUZVgKK30KKworJSBCZSBzdXJlIHdlJ3JlIGluIGhvcml6b250YWwgbW9kZSB3aGVuIGRvaW5nIGEgdGllLCBzaW5jZSB3ZSBtYWtlIHNwYWNlCislIGVxdWl2YWxlbnQgdG8gdGhpcyBpbiBAZXhhbXBsZS1saWtlIGVudmlyb25tZW50cy4gT3RoZXJ3aXNlLCBhIHNwYWNlCislIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIHdpbGwgc3RhcnQgd2l0aCBccGVuYWx0eSAtLSBhbmQKKyUgc2luY2UgXHBlbmFsdHkgaXMgdmFsaWQgaW4gdmVydGljYWwgbW9kZSwgd2UnZCBlbmQgdXAgcHV0dGluZyB0aGUKKyUgcGVuYWx0eSBvbiB0aGUgdmVydGljYWwgbGlzdCBpbnN0ZWFkIG9mIGluIHRoZSBuZXcgcGFyYWdyYXBoLgore1xjYXRjb2RlYEAgPSAxMQorICUgQXZvaWQgdXNpbmcgXEBNIGRpcmVjdGx5LCBiZWNhdXNlIHRoYXQgY2F1c2VzIHRyb3VibGUKKyAlIGlmIHRoZSBkZWZpbml0aW9uIGlzIHdyaXR0ZW4gaW50byBhbiBpbmRleCBmaWxlLgorIFxnbG9iYWxcbGV0XHRpZXBlbmFsdHkgPSBcQE0KKyBcZ2RlZlx0aWV7XGxlYXZldm1vZGVccGVuYWx0eVx0aWVwZW5hbHR5XCB9Cit9CisKKyUgQDogZm9yY2VzIG5vcm1hbCBzaXplIHdoaXRlc3BhY2UgZm9sbG93aW5nLgorXGRlZlw6e1xzcGFjZWZhY3Rvcj0xMDAwIH0KKworJSBAKiBmb3JjZXMgYSBsaW5lIGJyZWFrLgorXGRlZlwqe1xoZmlsXGJyZWFrXGhib3h7fVxpZ25vcmVzcGFjZXN9CisKKyUgQC8gYWxsb3dzIGEgbGluZSBicmVhay4KK1xsZXRcLz1cYWxsb3dicmVhaworCislIEAuIGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBwZXJpb2QuCitcZGVmXC57LlxzcGFjZWZhY3Rvcj1cZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yXHNwYWNlfQorCislIEAhIGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBiYW5nLgorXGRlZlwheyFcc3BhY2VmYWN0b3I9XGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvclxzcGFjZX0KKworJSBAPyBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgcXVlcnkuCitcZGVmXD97P1xzcGFjZWZhY3Rvcj1cZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yXHNwYWNlfQorCislIEBmcmVuY2hzcGFjaW5nIG9ufG9mZiAgc2F5cyB3aGV0aGVyIHRvIHB1dCBleHRyYSBzcGFjZSBhZnRlciBwdW5jdHVhdGlvbi4KKyUgCitcZGVmXG9ud29yZHtvbn0KK1xkZWZcb2Zmd29yZHtvZmZ9CislCitccGFyc2VhcmdkZWZcZnJlbmNoc3BhY2luZ3slCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxvbndvcmQgXHBsYWluZnJlbmNoc3BhY2luZworICBcZWxzZVxpZnhcdGVtcFxvZmZ3b3JkIFxwbGFpbm5vbmZyZW5jaHNwYWNpbmcKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGZyZW5jaHNwYWNpbmcgb3B0aW9uIGBcdGVtcCcsIG11c3QgYmUgb24vb2ZmfSUKKyAgXGZpXGZpCit9CisKKyUgQHcgcHJldmVudHMgYSB3b3JkIGJyZWFrLiAgV2l0aG91dCB0aGUgXGxlYXZldm1vZGUsIEB3IGF0IHRoZQorJSBiZWdpbm5pbmcgb2YgYSBwYXJhZ3JhcGgsIHdoZW4gVGVYIGlzIHN0aWxsIGluIHZlcnRpY2FsIG1vZGUsIHdvdWxkCislIHByb2R1Y2UgYSB3aG9sZSBsaW5lIG9mIG91dHB1dCBpbnN0ZWFkIG9mIHN0YXJ0aW5nIHRoZSBwYXJhZ3JhcGguCitcZGVmXHcjMXtcbGVhdmV2bW9kZVxoYm94eyMxfX0KKworJSBAZ3JvdXAgLi4uIEBlbmQgZ3JvdXAgZm9yY2VzIC4uLiB0byBiZSBhbGwgb24gb25lIHBhZ2UsIGJ5IGVuY2xvc2luZworJSBpdCBpbiBhIFRlWCB2Ym94LiAgV2UgdXNlIFx2dG9wIGluc3RlYWQgb2YgXHZib3ggdG8gY29uc3RydWN0IHRoZSBib3gKKyUgdG8ga2VlcCBpdHMgaGVpZ2h0IHRoYXQgb2YgYSBub3JtYWwgbGluZS4gIEFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yCislIFx0b3Bza2lwIChwLjExNCBvZiB0aGUgVGVYYm9vayksIHRoZSBnbHVlIGluc2VydGVkIGlzCislIG1heCAoXHRvcHNraXAgLSBcaHQgKGZpcnN0IGl0ZW0pLCAwKS4gIElmIHRoYXQgaGVpZ2h0IGlzIGxhcmdlLAorJSB0aGVyZWZvcmUsIG5vIGdsdWUgaXMgaW5zZXJ0ZWQsIGFuZCB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgaGVhZGxpbmUgYW5kCislIHRoZSB0ZXh0IGlzIHNtYWxsLCB3aGljaCBsb29rcyBiYWQuCislCislIEFub3RoZXIgY29tcGxpY2F0aW9uIGlzIHRoYXQgdGhlIGdyb3VwIG1pZ2h0IGJlIHZlcnkgbGFyZ2UuICBUaGlzIGNhbgorJSBjYXVzZSB0aGUgZ2x1ZSBvbiB0aGUgcHJldmlvdXMgcGFnZSB0byBiZSB1bmR1bHkgc3RyZXRjaGVkLCBiZWNhdXNlIGl0CislIGRvZXMgbm90IGhhdmUgbXVjaCBtYXRlcmlhbC4gIEluIHRoaXMgY2FzZSwgaXQncyBiZXR0ZXIgdG8gYWRkIGFuCislIGV4cGxpY2l0IFx2ZmlsbCBzbyB0aGF0IHRoZSBleHRyYSBzcGFjZSBpcyBhdCB0aGUgYm90dG9tLiAgVGhlCislIHRocmVzaG9sZCBmb3IgZG9pbmcgdGhpcyBpcyBpZiB0aGUgZ3JvdXAgaXMgbW9yZSB0aGFuIFx2ZmlsbGxpbWl0CislIHBlcmNlbnQgb2YgYSBwYWdlIChcdmZpbGxsaW1pdCBjYW4gYmUgY2hhbmdlZCBpbnNpZGUgb2YgQHRleCkuCislCitcbmV3Ym94XGdyb3VwYm94CitcZGVmXHZmaWxsbGltaXR7MC43fQorJQorXGVudmRlZlxncm91cHslCisgIFxpZm51bVxjYXRjb2RlYFxeXk09XGFjdGl2ZSBcZWxzZQorICAgIFxlcnJoZWxwID0gXGdyb3VwaW52YWxpZGhlbHAKKyAgICBcZXJybWVzc2FnZXtAZ3JvdXAgaW52YWxpZCBpbiBjb250ZXh0IHdoZXJlIGZpbGxpbmcgaXMgZW5hYmxlZH0lCisgIFxmaQorICBcc3RhcnRzYXZpbmdpbnNlcnRzCisgICUKKyAgXHNldGJveFxncm91cGJveCA9IFx2dG9wXGJncm91cAorICAgICUgRG8gQGNvbW1lbnQgc2luY2Ugd2UgYXJlIGNhbGxlZCBpbnNpZGUgYW4gZW52aXJvbm1lbnQgc3VjaCBhcworICAgICUgQGV4YW1wbGUsIHdoZXJlIGVhY2ggZW5kLW9mLWxpbmUgaW4gdGhlIGlucHV0IGNhdXNlcyBhbgorICAgICUgZW5kLW9mLWxpbmUgaW4gdGhlIG91dHB1dC4gIFdlIGRvbid0IHdhbnQgdGhlIGVuZC1vZi1saW5lIGFmdGVyCisgICAgJSB0aGUgYEBncm91cCcgdG8gcHV0IGV4dHJhIHNwYWNlIGluIHRoZSBvdXRwdXQuICBTaW5jZSBAZ3JvdXAKKyAgICAlIHNob3VsZCBhcHBlYXIgb24gYSBsaW5lIGJ5IGl0c2VsZiAoYWNjb3JkaW5nIHRvIHRoZSBUZXhpbmZvCisgICAgJSBtYW51YWwpLCB3ZSBkb24ndCB3b3JyeSBhYm91dCBlYXRpbmcgYW55IHVzZXIgdGV4dC4KKyAgICBcY29tbWVudAorfQorJQorJSBUaGUgXHZ0b3AgcHJvZHVjZXMgYSBib3ggd2l0aCBub3JtYWwgaGVpZ2h0IGFuZCBsYXJnZSBkZXB0aDsgdGh1cywgVGVYIHB1dHMKKyUgXGJhc2VsaW5lc2tpcCBnbHVlIGJlZm9yZSBpdCwgYW5kICh3aGVuIHRoZSBuZXh0IGxpbmUgb2YgdGV4dCBpcyBkb25lKQorJSBcbGluZXNraXAgZ2x1ZSBhZnRlciBpdC4gIFRodXMsIHNwYWNlIGJlbG93IGlzIG5vdCBxdWl0ZSBlcXVhbCB0byBzcGFjZQorJSBhYm92ZS4gIEJ1dCBpdCdzIHByZXR0eSBjbG9zZS4KK1xkZWZcRWdyb3VweyUKKyAgICAlIFRvIGdldCBjb3JyZWN0IGludGVybGluZSBzcGFjZSBiZXR3ZWVuIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGdyb3VwCisgICAgJSBhbmQgdGhlIGZpcnN0IGxpbmUgYWZ0ZXJ3YXJkcywgd2UgaGF2ZSB0byBwcm9wYWdhdGUgXHByZXZkZXB0aC4KKyAgICBcZW5kZ3JhZiAlIE5vdCBccGFyLCBhcyBpdCBtYXkgaGF2ZSBiZWVuIHNldCB0byBcbGlzcHBhci4KKyAgICBcZ2xvYmFsXGRpbWVuMSA9IFxwcmV2ZGVwdGgKKyAgXGVncm91cCAgICAgICAgICAgJSBFbmQgdGhlIFx2dG9wLgorICAlIFxkaW1lbjAgaXMgdGhlIHZlcnRpY2FsIHNpemUgb2YgdGhlIGdyb3VwJ3MgYm94LgorICBcZGltZW4wID0gXGh0XGdyb3VwYm94ICBcYWR2YW5jZVxkaW1lbjAgYnkgXGRwXGdyb3VwYm94CisgICUgXGRpbWVuMiBpcyBob3cgbXVjaCBzcGFjZSBpcyBsZWZ0IG9uIHRoZSBwYWdlIChtb3JlIG9yIGxlc3MpLgorICBcZGltZW4yID0gXHBhZ2VoZWlnaHQgICBcYWR2YW5jZVxkaW1lbjIgYnkgLVxwYWdldG90YWwKKyAgJSBpZiB0aGUgZ3JvdXAgZG9lc24ndCBmaXQgb24gdGhlIGN1cnJlbnQgcGFnZSwgYW5kIGl0J3MgYSBiaWcgYmlnCisgICUgZ3JvdXAsIGZvcmNlIGEgcGFnZSBicmVhay4KKyAgXGlmZGltIFxkaW1lbjAgPiBcZGltZW4yCisgICAgXGlmZGltIFxwYWdldG90YWwgPCBcdmZpbGxsaW1pdFxwYWdlaGVpZ2h0CisgICAgICBccGFnZQorICAgIFxmaQorICBcZmkKKyAgXGJveFxncm91cGJveAorICBccHJldmRlcHRoID0gXGRpbWVuMQorICBcY2hlY2tpbnNlcnRzCit9CislCislIFRlWCBwdXRzIGluIGFuIFxlc2NhcGVjaGFyIChpLmUuLCBgQCcpIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGhlbHAKKyUgbWVzc2FnZSwgc28gdGhpcyBlbmRzIHVwIHByaW50aW5nIGBAZ3JvdXAgY2FuIG9ubHkgLi4uJy4KKyUKK1xuZXdoZWxwXGdyb3VwaW52YWxpZGhlbHB7JQorZ3JvdXAgY2FuIG9ubHkgYmUgdXNlZCBpbiBlbnZpcm9ubWVudHMgc3VjaCBhcyBAZXhhbXBsZSxeXkolCit3aGVyZSBlYWNoIGxpbmUgb2YgaW5wdXQgcHJvZHVjZXMgYSBsaW5lIG9mIG91dHB1dC59CisKKyUgQG5lZWQgc3BhY2UtaW4tbWlscworJSBmb3JjZXMgYSBwYWdlIGJyZWFrIGlmIHRoZXJlIGlzIG5vdCBzcGFjZS1pbi1taWxzIHJlbWFpbmluZy4KKworXG5ld2RpbWVuXG1pbCAgXG1pbD0wLjAwMWluCisKKyUgT2xkIGRlZmluaXRpb24tLWRpZG4ndCB3b3JrLgorJVxwYXJzZWFyZ2RlZlxuZWVke1xwYXIgJQorJSUgVGhpcyBtZXRob2QgdHJpZXMgdG8gbWFrZSBUZVggYnJlYWsgdGhlIHBhZ2UgbmF0dXJhbGx5CislJSBpZiB0aGUgZGVwdGggb2YgdGhlIGJveCBkb2VzIG5vdCBmaXQuCisle1xiYXNlbGluZXNraXA9MHB0JQorJVx2dG9wIHRvICMxXG1pbHtcdmZpbH1ca2VybiAtIzFcbWlsXG5vYnJlYWsKKyVccHJldmRlcHRoPS0xMDAwcHQKKyV9fQorCitccGFyc2VhcmdkZWZcbmVlZHslCisgICUgRW5zdXJlIHZlcnRpY2FsIG1vZGUsIHNvIHdlIGRvbid0IG1ha2UgYSBiaWcgYm94IGluIHRoZSBtaWRkbGUgb2YgYQorICAlIHBhcmFncmFwaC4KKyAgXHBhcgorICAlCisgICUgSWYgdGhlIEBuZWVkIHZhbHVlIGlzIGxlc3MgdGhhbiBvbmUgbGluZSBzcGFjZSwgaXQncyB1c2VsZXNzLgorICBcZGltZW4wID0gIzFcbWlsCisgIFxkaW1lbjIgPSBcaHRcc3RydXRib3gKKyAgXGFkdmFuY2VcZGltZW4yIGJ5IFxkcFxzdHJ1dGJveAorICBcaWZkaW1cZGltZW4wID4gXGRpbWVuMgorICAgICUKKyAgICAlIERvIGEgXHN0cnV0IGp1c3QgdG8gbWFrZSB0aGUgaGVpZ2h0IG9mIHRoaXMgYm94IGJlIG5vcm1hbCwgc28gdGhlCisgICAgJSBub3JtYWwgbGVhZGluZyBpcyBpbnNlcnRlZCByZWxhdGl2ZSB0byB0aGUgcHJlY2VkaW5nIGxpbmUuCisgICAgJSBBbmQgYSBwYWdlIGJyZWFrIGhlcmUgaXMgZmluZS4KKyAgICBcdnRvcCB0byAjMVxtaWx7XHN0cnV0XHZmaWx9JQorICAgICUKKyAgICAlIFRlWCBkb2VzIG5vdCBldmVuIGNvbnNpZGVyIHBhZ2UgYnJlYWtzIGlmIGEgcGVuYWx0eSBhZGRlZCB0byB0aGUKKyAgICAlIG1haW4gdmVydGljYWwgbGlzdCBpcyAxMDAwMCBvciBtb3JlLiAgQnV0IGluIG9yZGVyIHRvIHNlZSBpZiB0aGUKKyAgICAlIGVtcHR5IGJveCB3ZSBqdXN0IGFkZGVkIGZpdHMgb24gdGhlIHBhZ2UsIHdlIG11c3QgbWFrZSBpdCBjb25zaWRlcgorICAgICUgcGFnZSBicmVha3MuICBPbiB0aGUgb3RoZXIgaGFuZCwgd2UgZG9uJ3Qgd2FudCB0byBhY3R1YWxseSBicmVhayB0aGUKKyAgICAlIHBhZ2UgYWZ0ZXIgdGhlIGVtcHR5IGJveC4gIFNvIHdlIHVzZSBhIHBlbmFsdHkgb2YgOTk5OS4KKyAgICAlCisgICAgJSBUaGVyZSBpcyBhbiBleHRyZW1lbHkgc21hbGwgY2hhbmNlIHRoYXQgVGVYIHdpbGwgYWN0dWFsbHkgYnJlYWsgdGhlCisgICAgJSBwYWdlIGF0IHRoaXMgXHBlbmFsdHksIGlmIHRoZXJlIGFyZSBubyBvdGhlciBmZWFzaWJsZSBicmVha3BvaW50cyBpbgorICAgICUgc2lnaHQuICAoSWYgdGhlIHVzZXIgaXMgdXNpbmcgbG90cyBvZiBiaWcgQGdyb3VwIGNvbW1hbmRzLCB3aGljaAorICAgICUgYWxtb3N0LWJ1dC1ub3QtcXVpdGUgZmlsbCB1cCBhIHBhZ2UsIFRlWCB3aWxsIGhhdmUgYSBoYXJkIHRpbWUgZG9pbmcKKyAgICAlIGdvb2QgcGFnZSBicmVha2luZywgZm9yIGV4YW1wbGUuKSAgSG93ZXZlciwgSSBjb3VsZCBub3QgY29uc3RydWN0IGFuCisgICAgJSBleGFtcGxlIHdoZXJlIGEgcGFnZSBicm9rZSBhdCB0aGlzIFxwZW5hbHR5OyBpZiBpdCBoYXBwZW5zIGluIGEgcmVhbAorICAgICUgZG9jdW1lbnQsIHRoZW4gd2UgY2FuIHJlY29uc2lkZXIgb3VyIHN0cmF0ZWd5LgorICAgIFxwZW5hbHR5OTk5OQorICAgICUKKyAgICAlIEJhY2sgdXAgYnkgdGhlIHNpemUgb2YgdGhlIGJveCwgd2hldGhlciB3ZSBkaWQgYSBwYWdlIGJyZWFrIG9yIG5vdC4KKyAgICBca2VybiAtIzFcbWlsCisgICAgJQorICAgICUgRG8gbm90IGFsbG93IGEgcGFnZSBicmVhayByaWdodCBhZnRlciB0aGlzIGtlcm4uCisgICAgXG5vYnJlYWsKKyAgXGZpCit9CisKKyUgQGJyICAgZm9yY2VzIHBhcmFncmFwaCBicmVhayAoYW5kIGlzIHVuZG9jdW1lbnRlZCkuCisKK1xsZXRcYnIgPSBccGFyCisKKyUgQHBhZ2UgZm9yY2VzIHRoZSBzdGFydCBvZiBhIG5ldyBwYWdlLgorJQorXGRlZlxwYWdle1xwYXJcdmZpbGxcc3VwZXJlamVjdH0KKworJSBAZXhkZW50IHRleHQuLi4uCislIG91dHB1dHMgdGV4dCBvbiBzZXBhcmF0ZSBsaW5lIGluIHJvbWFuIGZvbnQsIHN0YXJ0aW5nIGF0IHN0YW5kYXJkIHBhZ2UgbWFyZ2luCisKKyUgVGhpcyByZWNvcmRzIHRoZSBhbW91bnQgb2YgaW5kZW50IGluIHRoZSBpbm5lcm1vc3QgZW52aXJvbm1lbnQuCislIFRoYXQncyBob3cgbXVjaCBcZXhkZW50IHNob3VsZCB0YWtlIG91dC4KK1xuZXdza2lwXGV4ZGVudGFtb3VudAorCislIFRoaXMgZGVmbiBpcyB1c2VkIGluc2lkZSBmaWxsIGVudmlyb25tZW50cyBzdWNoIGFzIEBkZWZ1bi4KK1xwYXJzZWFyZ2RlZlxleGRlbnR7XGhmaWxcYnJlYWtcaGJveHtca2VybiAtXGV4ZGVudGFtb3VudHtccm0jMX19XGhmaWxcYnJlYWt9CisKKyUgVGhpcyBkZWZuIGlzIHVzZWQgaW5zaWRlIG5vZmlsbCBlbnZpcm9ubWVudHMgc3VjaCBhcyBAZXhhbXBsZS4KK1xwYXJzZWFyZ2RlZlxub2ZpbGxleGRlbnR7e1xhZHZhbmNlIFxsZWZ0c2tpcCBieSAtXGV4ZGVudGFtb3VudAorICBcbGVmdGxpbmV7XGhza2lwXGxlZnRza2lwe1xybSMxfX19fQorCislIEBpbm1hcmdpbntXSElDSH17VEVYVH0gcHV0cyBURVhUIGluIHRoZSBXSElDSCBtYXJnaW4gbmV4dCB0byB0aGUgY3VycmVudAorJSBwYXJhZ3JhcGguICBGb3IgbW9yZSBnZW5lcmFsIHB1cnBvc2VzLCB1c2UgdGhlIFxtYXJnaW4gaW5zZXJ0aW9uCislIGNsYXNzLiAgV0hJQ0ggaXMgYGwnIG9yIGByJy4KKyUKK1xuZXdza2lwXGlubWFyZ2luc3BhY2luZyBcaW5tYXJnaW5zcGFjaW5nPTFjbQorXGRlZlxzdHJ1dGRlcHRoe1xkcFxzdHJ1dGJveH0KKyUKK1xkZWZcZG9pbm1hcmdpbiMxIzJ7XHN0cnV0XHZhZGp1c3R7JQorICBcbm9icmVhaworICBca2Vybi1cc3RydXRkZXB0aAorICBcdnRvcCB0byBcc3RydXRkZXB0aHslCisgICAgXGJhc2VsaW5lc2tpcD1cc3RydXRkZXB0aAorICAgIFx2c3MKKyAgICAlIGlmIHlvdSBoYXZlIG11bHRpcGxlIGxpbmVzIG9mIHN0dWZmIHRvIHB1dCBoZXJlLCB5b3UnbGwgbmVlZCB0bworICAgICUgbWFrZSB0aGUgdmJveCB5b3Vyc2VsZiBvZiB0aGUgYXBwcm9wcmlhdGUgc2l6ZS4KKyAgICBcaWZ4IzFsJQorICAgICAgXGxsYXB7XGlnbm9yZXNwYWNlcyAjMlxoc2tpcFxpbm1hcmdpbnNwYWNpbmd9JQorICAgIFxlbHNlCisgICAgICBccmxhcHtcaHNraXBcaHNpemUgXGhza2lwXGlubWFyZ2luc3BhY2luZyBcaWdub3Jlc3BhY2VzICMyfSUKKyAgICBcZmkKKyAgICBcbnVsbAorICB9JQorfX0KK1xkZWZcaW5sZWZ0bWFyZ2lue1xkb2lubWFyZ2luIGx9CitcZGVmXGlucmlnaHRtYXJnaW57XGRvaW5tYXJnaW4gcn0KKyUKKyUgQGlubWFyZ2lue1RFWFQgWywgUklHSFQtVEVYVF19CislIChpZiBSSUdIVC1URVhUIGlzIGdpdmVuLCB1c2UgVEVYVCBmb3IgbGVmdCBwYWdlLCBSSUdIVC1URVhUIGZvciByaWdodDsKKyUgZWxzZSB1c2UgVEVYVCBmb3IgYm90aCkuCislCitcZGVmXGlubWFyZ2luIzF7XHBhcnNlaW5tYXJnaW4gIzEsLFxmaW5pc2h9CitcZGVmXHBhcnNlaW5tYXJnaW4jMSwjMiwjM1xmaW5pc2h7JSBub3QgcGVyZmVjdCwgYnV0IGJldHRlciB0aGFuIG5vdGhpbmcuCisgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn0lCisgIFxpZmRpbVx3ZDAgPiAwcHQKKyAgICBcZGVmXGxlZnR0ZXh0eyMxfSUgIGhhdmUgYm90aCB0ZXh0cworICAgIFxkZWZccmlnaHR0ZXh0eyMyfSUKKyAgXGVsc2UKKyAgICBcZGVmXGxlZnR0ZXh0eyMxfSUgIGhhdmUgb25seSBvbmUgdGV4dAorICAgIFxkZWZccmlnaHR0ZXh0eyMxfSUKKyAgXGZpCisgICUKKyAgXGlmb2RkXHBhZ2VubworICAgIFxkZWZcdGVtcHtcaW5yaWdodG1hcmdpblxyaWdodHRleHR9JSBvZGQgcGFnZSAtPiBvdXRzaWRlIGlzIHJpZ2h0IG1hcmdpbgorICBcZWxzZQorICAgIFxkZWZcdGVtcHtcaW5sZWZ0bWFyZ2luXGxlZnR0ZXh0fSUKKyAgXGZpCisgIFx0ZW1wCit9CisKKyUgQGluY2x1ZGUgZmlsZSAgICBpbnNlcnQgdGV4dCBvZiB0aGF0IGZpbGUgYXMgaW5wdXQuCislCitcZGVmXGluY2x1ZGV7XHBhcnNlYXJndXNpbmdcZmlsZW5hbWVjYXRjb2Rlc1xpbmNsdWRlenp6fQorXGRlZlxpbmNsdWRlenp6IzF7JQorICBccHVzaHRoaXNmaWxlc3RhY2sKKyAgXGRlZlx0aGlzZmlsZXsjMX0lCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcZGVmXHRlbXB7XGlucHV0ICMxIH0lCisgICAgXGV4cGFuZGFmdGVyCisgIH1cdGVtcAorICBccG9wdGhpc2ZpbGVzdGFjaworfQorXGRlZlxmaWxlbmFtZWNhdGNvZGVzeyUKKyAgXGNhdGNvZGVgXFw9XG90aGVyCisgIFxjYXRjb2RlYH49XG90aGVyCisgIFxjYXRjb2RlYF49XG90aGVyCisgIFxjYXRjb2RlYF89XG90aGVyCisgIFxjYXRjb2RlYHw9XG90aGVyCisgIFxjYXRjb2RlYDw9XG90aGVyCisgIFxjYXRjb2RlYD49XG90aGVyCisgIFxjYXRjb2RlYCs9XG90aGVyCisgIFxjYXRjb2RlYC09XG90aGVyCit9CisKK1xkZWZccHVzaHRoaXNmaWxlc3RhY2t7JQorICBcZXhwYW5kYWZ0ZXJccHVzaHRoaXNmaWxlc3RhY2tYXHBvcHRoaXNmaWxlc3RhY2tcU3RhY2tUZXJtCit9CitcZGVmXHB1c2h0aGlzZmlsZXN0YWNrWHslCisgIFxleHBhbmRhZnRlclxwdXNodGhpc2ZpbGVzdGFja1lcdGhpc2ZpbGVcU3RhY2tUZXJtCit9CitcZGVmXHB1c2h0aGlzZmlsZXN0YWNrWSAjMVxTdGFja1Rlcm0gIzJcU3RhY2tUZXJtIHslCisgIFxnZGVmXHBvcHRoaXNmaWxlc3RhY2t7XGdkZWZcdGhpc2ZpbGV7IzF9XGdkZWZccG9wdGhpc2ZpbGVzdGFja3sjMn19JQorfQorCitcZGVmXHBvcHRoaXNmaWxlc3RhY2t7XGVycnRoaXNmaWxlc3RhY2tlbXB0eX0KK1xkZWZcZXJydGhpc2ZpbGVzdGFja2VtcHR5e1xlcnJtZXNzYWdle0ludGVybmFsIGVycm9yOgorICB0aGUgc3RhY2sgb2YgZmlsZW5hbWVzIGlzIGVtcHR5Ln19CisKK1xkZWZcdGhpc2ZpbGV7fQorCislIEBjZW50ZXIgbGluZQorJSBvdXRwdXRzIHRoYXQgbGluZSwgY2VudGVyZWQuCislCitccGFyc2VhcmdkZWZcY2VudGVyeyUKKyAgXGlmaG1vZGUKKyAgICBcbGV0XG5leHRcY2VudGVySAorICBcZWxzZQorICAgIFxsZXRcbmV4dFxjZW50ZXJWCisgIFxmaQorICBcbmV4dHtcaGZpbCBcaWdub3Jlc3BhY2VzIzFcdW5za2lwIFxoZmlsfSUKK30KK1xkZWZcY2VudGVySCMxeyUKKyAgeyUKKyAgICBcaGZpbFxicmVhaworICAgIFxhZHZhbmNlXGhzaXplIGJ5IC1cbGVmdHNraXAKKyAgICBcYWR2YW5jZVxoc2l6ZSBieSAtXHJpZ2h0c2tpcAorICAgIFxsaW5leyMxfSUKKyAgICBcYnJlYWsKKyAgfSUKK30KK1xkZWZcY2VudGVyViMxe1xsaW5le1xrZXJuXGxlZnRza2lwICMxXGtlcm5ccmlnaHRza2lwfX0KKworJSBAc3AgbiAgIG91dHB1dHMgbiBsaW5lcyBvZiB2ZXJ0aWNhbCBzcGFjZQorCitccGFyc2VhcmdkZWZcc3B7XHZza2lwICMxXGJhc2VsaW5lc2tpcH0KKworJSBAY29tbWVudCAuLi5saW5lIHdoaWNoIGlzIGlnbm9yZWQuLi4KKyUgQGMgaXMgdGhlIHNhbWUgYXMgQGNvbW1lbnQKKyUgQGlnbm9yZSAuLi4gQGVuZCBpZ25vcmUgIGlzIGFub3RoZXIgd2F5IHRvIHdyaXRlIGEgY29tbWVudAorCitcZGVmXGNvbW1lbnR7XGJlZ2luZ3JvdXAgXGNhdGNvZGVgXF5eTT1cb3RoZXIlCitcY2F0Y29kZWBcQD1cb3RoZXIgXGNhdGNvZGVgXHs9XG90aGVyIFxjYXRjb2RlYFx9PVxvdGhlciUKK1xjb21tZW50eHh4fQore1xjYXRjb2RlYFxeXk09XG90aGVyIFxnZGVmXGNvbW1lbnR4eHgjMV5eTXtcZW5kZ3JvdXB9fQorCitcbGV0XGM9XGNvbW1lbnQKKworJSBAcGFyYWdyYXBoaW5kZW50IE5DSEFSUworJSBXZSdsbCB1c2UgZW1zIGZvciBOQ0hBUlMsIGNsb3NlIGVub3VnaC4KKyUgTkNIQVJTIGNhbiBhbHNvIGJlIHRoZSB3b3JkIGBhc2lzJyBvciBgbm9uZScuCislIFdlIGNhbm5vdCBmZWFzaWJseSBpbXBsZW1lbnQgQHBhcmFncmFwaGluZGVudCBhc2lzLCB0aG91Z2guCislCitcZGVmXGFzaXN3b3Jke2FzaXN9ICUgbm8gdHJhbnNsYXRpb24sIHRoZXNlIGFyZSBrZXl3b3JkcworXGRlZlxub25ld29yZHtub25lfQorJQorXHBhcnNlYXJnZGVmXHBhcmFncmFwaGluZGVudHslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxhc2lzd29yZAorICBcZWxzZQorICAgIFxpZnhcdGVtcFxub25ld29yZAorICAgICAgXGRlZmF1bHRwYXJpbmRlbnQgPSAwcHQKKyAgICBcZWxzZQorICAgICAgXGRlZmF1bHRwYXJpbmRlbnQgPSAjMWVtCisgICAgXGZpCisgIFxmaQorICBccGFyaW5kZW50ID0gXGRlZmF1bHRwYXJpbmRlbnQKK30KKworJSBAZXhhbXBsZWluZGVudCBOQ0hBUlMKKyUgV2UnbGwgdXNlIGVtcyBmb3IgTkNIQVJTIGxpa2UgQHBhcmFncmFwaGluZGVudC4KKyUgSXQgc2VlbXMgQGV4YW1wbGVpbmRlbnQgYXNpcyBpc24ndCBuZWNlc3NhcnksIGJ1dAorJSBJIHByZXNlcnZlIGl0IHRvIG1ha2UgaXQgc2ltaWxhciB0byBAcGFyYWdyYXBoaW5kZW50LgorXHBhcnNlYXJnZGVmXGV4YW1wbGVpbmRlbnR7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcYXNpc3dvcmQKKyAgXGVsc2UKKyAgICBcaWZ4XHRlbXBcbm9uZXdvcmQKKyAgICAgIFxsaXNwbmFycm93aW5nID0gMHB0CisgICAgXGVsc2UKKyAgICAgIFxsaXNwbmFycm93aW5nID0gIzFlbQorICAgIFxmaQorICBcZmkKK30KKworJSBAZmlyc3RwYXJhZ3JhcGhpbmRlbnQgV09SRAorJSBJZiBXT1JEIGlzIGBub25lJywgdGhlbiBzdXBwcmVzcyBpbmRlbnRhdGlvbiBvZiB0aGUgZmlyc3QgcGFyYWdyYXBoCislIGFmdGVyIGEgc2VjdGlvbiBoZWFkaW5nLiAgSWYgV09SRCBpcyBgaW5zZXJ0JywgdGhlbiBkbyBpbmRlbnQgYXQgc3VjaAorJSBwYXJhZ3JhcGhzLgorJQorJSBUaGUgcGFyYWdyYXBoIGluZGVudGF0aW9uIGlzIHN1cHByZXNzZWQgb3Igbm90IGJ5IGNhbGxpbmcKKyUgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQsIHdoaWNoIHRoZSBzZWN0aW9uaW5nIGNvbW1hbmRzIGRvLgorJSBXZSBzd2l0Y2ggdGhlIGRlZmluaXRpb24gb2YgdGhpcyBiYWNrIGFuZCBmb3J0aCBhY2NvcmRpbmcgdG8gV09SRC4KKyUgQnkgZGVmYXVsdCwgd2Ugc3VwcHJlc3MgaW5kZW50YXRpb24uCislCitcZGVmXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR7XGRvc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudH0KK1xkZWZcaW5zZXJ0d29yZHtpbnNlcnR9CislCitccGFyc2VhcmdkZWZcZmlyc3RwYXJhZ3JhcGhpbmRlbnR7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcbm9uZXdvcmQKKyAgICBcbGV0XHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQgPSBcZG9zdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50CisgIFxlbHNlXGlmeFx0ZW1wXGluc2VydHdvcmQKKyAgICBcbGV0XHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQgPSBccmVsYXgKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGZpcnN0cGFyYWdyYXBoaW5kZW50IG9wdGlvbiBgXHRlbXAnfSUKKyAgXGZpXGZpCit9CisKKyUgSGVyZSBpcyBob3cgd2UgYWN0dWFsbHkgc3VwcHJlc3MgaW5kZW50YXRpb24uICBSZWRlZmluZSBcZXZlcnlwYXIgdG8KKyUgXGtlcm4gYmFja3dhcmRzIGJ5IFxwYXJpbmRlbnQsIGFuZCB0aGVuIHJlc2V0IGl0c2VsZiB0byBlbXB0eS4KKyUKKyUgV2UgYWxzbyBtYWtlIFxpbmRlbnQgaXRzZWxmIG5vdCBhY3R1YWxseSBkbyBhbnl0aGluZyB1bnRpbCB0aGUgbmV4dAorJSBwYXJhZ3JhcGguCislCitcZ2RlZlxkb3N1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR7JQorICBcZ2RlZlxpbmRlbnR7JQorICAgIFxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnQKKyAgICBcaW5kZW50CisgIH0lCisgIFxnZGVmXG5vaW5kZW50eyUKKyAgICBccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50CisgICAgXG5vaW5kZW50CisgIH0lCisgIFxnbG9iYWxcZXZlcnlwYXIgPSB7JQorICAgIFxrZXJuIC1ccGFyaW5kZW50CisgICAgXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudAorICB9JQorfQorCitcZ2RlZlxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnR7JQorICBcZ2xvYmFsIFxsZXQgXGluZGVudCA9IFxwdGV4aW5kZW50CisgIFxnbG9iYWwgXGxldCBcbm9pbmRlbnQgPSBccHRleG5vaW5kZW50CisgIFxnbG9iYWwgXGV2ZXJ5cGFyID0ge30lCit9CisKKworJSBAYXNpcyBqdXN0IHlpZWxkcyBpdHMgYXJndW1lbnQuICBVc2VkIHdpdGggQHRhYmxlLCBmb3IgZXhhbXBsZS4KKyUKK1xkZWZcYXNpcyMxeyMxfQorCislIEBtYXRoIG91dHB1dHMgaXRzIGFyZ3VtZW50IGluIG1hdGggbW9kZS4KKyUKKyUgT25lIGNvbXBsaWNhdGlvbjogXyB1c3VhbGx5IG1lYW5zIHN1YnNjcmlwdHMsIGJ1dCBpdCBjb3VsZCBhbHNvIG1lYW4KKyUgYW4gYWN0dWFsIF8gY2hhcmFjdGVyLCBhcyBpbiBAbWF0aHtAdmFye3NvbWVfdmFyaWFibGV9ICsgMX0uICBTbyBtYWtlCislIF8gYWN0aXZlLCBhbmQgZGlzdGluZ3Vpc2ggYnkgc2VlaW5nIGlmIHRoZSBjdXJyZW50IGZhbWlseSBpcyBcc2xmYW0sCislIHdoaWNoIGlzIHdoYXQgQHZhciB1c2VzLgoreworICBcY2F0Y29kZWBcXyA9IFxhY3RpdmUKKyAgXGdkZWZcbWF0aHVuZGVyc2NvcmV7JQorICAgIFxjYXRjb2RlYFxfPVxhY3RpdmUKKyAgICBcZGVmX3tcaWZudW1cZmFtPVxzbGZhbSBcX1xlbHNlXHNiXGZpfSUKKyAgfQorfQorJSBBbm90aGVyIGNvbXBsaWNhdGlvbjogd2Ugd2FudCBcXCAoYW5kIEBcKSB0byBvdXRwdXQgYSBcIGNoYXJhY3Rlci4KKyUgRllJLCBwbGFpbi50ZXggdXNlcyBcXCBhcyBhIHRlbXBvcmFyeSBjb250cm9sIHNlcXVlbmNlICh3aHk/KSwgYnV0CislIHRoaXMgaXMgbm90IGFkdmVydGlzZWQgYW5kIHdlIGRvbid0IGNhcmUuICBUZXhpbmZvIGRvZXMgbm90CislIG90aGVyd2lzZSBkZWZpbmUgQFwuCislCislIFRoZSBcbWF0aGNoYXIgaXMgY2xhc3M9MD1vcmRpbmFyeSwgZmFtaWx5PTc9dHRmYW0sIHBvc2l0aW9uPTVDPVwuCitcZGVmXG1hdGhiYWNrc2xhc2h7XGlmbnVtXGZhbT1cdHRmYW0gXG1hdGhjaGFyIjA3NUMgXGVsc2VcYmFja3NsYXNoIFxmaX0KKyUKK1xkZWZcbWF0aHslCisgIFx0ZXgKKyAgXG1hdGh1bmRlcnNjb3JlCisgIFxsZXRcXCA9IFxtYXRoYmFja3NsYXNoCisgIFxtYXRoYWN0aXZlCisgICRcZmluaXNobWF0aAorfQorXGRlZlxmaW5pc2htYXRoIzF7IzEkXGVuZGdyb3VwfSAgJSBDbG9zZSB0aGUgZ3JvdXAgb3BlbmVkIGJ5IFx0ZXguCisKKyUgU29tZSBhY3RpdmUgY2hhcmFjdGVycyAoc3VjaCBhcyA8KSBhcmUgc3BhY2VkIGRpZmZlcmVudGx5IGluIG1hdGguCislIFdlIGhhdmUgdG8gcmVzZXQgdGhlaXIgZGVmaW5pdGlvbnMgaW4gY2FzZSB0aGUgQG1hdGggd2FzIGFuIGFyZ3VtZW50CislIHRvIGEgY29tbWFuZCB3aGljaCBzZXRzIHRoZSBjYXRjb2RlcyAoc3VjaCBhcyBAaXRlbSBvciBAc2VjdGlvbikuCislCit7CisgIFxjYXRjb2RlYF4gPSBcYWN0aXZlCisgIFxjYXRjb2RlYDwgPSBcYWN0aXZlCisgIFxjYXRjb2RlYD4gPSBcYWN0aXZlCisgIFxjYXRjb2RlYCsgPSBcYWN0aXZlCisgIFxnZGVmXG1hdGhhY3RpdmV7JQorICAgIFxsZXReID0gXHB0ZXhoYXQKKyAgICBcbGV0PCA9IFxwdGV4bGVzcworICAgIFxsZXQ+ID0gXHB0ZXhndHIKKyAgICBcbGV0KyA9IFxwdGV4cGx1cworICB9Cit9CisKKyUgQGJ1bGxldCBhbmQgQG1pbnVzIG5lZWQgdGhlIHNhbWUgdHJlYXRtZW50IGFzIEBtYXRoLCBqdXN0IGFib3ZlLgorXGRlZlxidWxsZXR7JFxwdGV4YnVsbGV0JH0KK1xkZWZcbWludXN7JC0kfQorCislIEBkb3Rze30gb3V0cHV0cyBhbiBlbGxpcHNpcyB1c2luZyB0aGUgY3VycmVudCBmb250LgorJSBXZSBkbyAuNWVtIHBlciBwZXJpb2Qgc28gdGhhdCBpdCBoYXMgdGhlIHNhbWUgc3BhY2luZyBpbiBhIHR5cGV3cml0ZXIKKyUgZm9udCBhcyB0aHJlZSBhY3R1YWwgcGVyaW9kIGNoYXJhY3RlcnMuCislCitcZGVmXGRvdHN7JQorICBcbGVhdmV2bW9kZQorICBcaGJveCB0byAxLjVlbXslCisgICAgXGhza2lwIDBwdCBwbHVzIDAuMjVmaWwKKyAgICAuXGhmaWwuXGhmaWwuJQorICAgIFxoc2tpcCAwcHQgcGx1cyAwLjVmaWwKKyAgfSUKK30KKworJSBAZW5kZG90c3t9IGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBlbGxpcHNpcy4KKyUKK1xkZWZcZW5kZG90c3slCisgIFxkb3RzCisgIFxzcGFjZWZhY3Rvcj1cZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yCit9CisKKyUgQGNvbW1he30gaXMgc28gY29tbWFzIGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRleHQgd2l0aG91dCBtZXNzaW5nIHVwCislIFRleGluZm8ncyBwYXJzaW5nLgorJQorXGxldFxjb21tYSA9ICwKKworJSBAcmVmaWxsIGlzIGEgbm8tb3AuCitcbGV0XHJlZmlsbD1ccmVsYXgKKworJSBJZiB3b3JraW5nIG9uIGEgbGFyZ2UgZG9jdW1lbnQgaW4gY2hhcHRlcnMsIGl0IGlzIGNvbnZlbmllbnQgdG8KKyUgYmUgYWJsZSB0byBkaXNhYmxlIGluZGV4aW5nLCBjcm9zcy1yZWZlcmVuY2luZywgYW5kIGNvbnRlbnRzLCBmb3IgdGVzdCBydW5zLgorJSBUaGlzIGlzIGRvbmUgd2l0aCBAbm92YWxpZGF0ZSAoYmVmb3JlIEBzZXRmaWxlbmFtZSkuCislCitcbmV3aWZcaWZsaW5rcyBcbGlua3N0cnVlICUgYnkgZGVmYXVsdCB3ZSB3YW50IHRoZSBhdXggZmlsZXMuCitcbGV0XG5vdmFsaWRhdGUgPSBcbGlua3NmYWxzZQorCislIEBzZXRmaWxlbmFtZSBpcyBkb25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgdGV4aW5mbyBmaWxlLgorJSBTbyBvcGVuIGhlcmUgdGhlIGZpbGVzIHdlIG5lZWQgdG8gaGF2ZSBvcGVuIHdoaWxlIHJlYWRpbmcgdGhlIGlucHV0LgorJSBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIG1ha2UgYSAuZm10IGZpbGUgZm9yIHRleGluZm8uCitcZGVmXHNldGZpbGVuYW1leyUKKyAgIFxmaXhiYWNrc2xhc2ggICUgVHVybiBvZmYgaGFjayB0byBzd2FsbG93IGBcaW5wdXQgdGV4aW5mbycuCisgICBcaWZsaW5rcworICAgICBcdHJ5YXV4ZmlsZQorICAgICAlIE9wZW4gdGhlIG5ldyBhdXggZmlsZS4gIFRlWCB3aWxsIGNsb3NlIGl0IGF1dG9tYXRpY2FsbHkgYXQgZXhpdC4KKyAgICAgXGltbWVkaWF0ZVxvcGVub3V0XGF1eGZpbGU9XGpvYm5hbWUuYXV4CisgICBcZmkgJSBcb3BlbmluZGljZXMgbmVlZHMgdG8gZG8gc29tZSB3b3JrIGluIGFueSBjYXNlLgorICAgXG9wZW5pbmRpY2VzCisgICBcbGV0XHNldGZpbGVuYW1lPVxjb21tZW50ICUgSWdub3JlIGV4dHJhIEBzZXRmaWxlbmFtZSBjbWRzLgorICAgJQorICAgJSBJZiB0ZXhpbmZvLmNuZiBpcyBwcmVzZW50IG9uIHRoZSBzeXN0ZW0sIHJlYWQgaXQuCisgICAlIFVzZWZ1bCBmb3Igc2l0ZS13aWRlIEBhZm91cnBhcGVyLCBldGMuCisgICBcb3BlbmluIDEgdGV4aW5mby5jbmYKKyAgIFxpZmVvZiAxIFxlbHNlIFxpbnB1dCB0ZXhpbmZvLmNuZiBcZmkKKyAgIFxjbG9zZWluIDEKKyAgICUKKyAgIFxjb21tZW50ICUgSWdub3JlIHRoZSBhY3R1YWwgZmlsZW5hbWUuCit9CisKKyUgQ2FsbGVkIGZyb20gXHNldGZpbGVuYW1lLgorJQorXGRlZlxvcGVuaW5kaWNlc3slCisgIFxuZXdpbmRleHtjcH0lCisgIFxuZXdjb2RlaW5kZXh7Zm59JQorICBcbmV3Y29kZWluZGV4e3ZyfSUKKyAgXG5ld2NvZGVpbmRleHt0cH0lCisgIFxuZXdjb2RlaW5kZXh7a3l9JQorICBcbmV3Y29kZWluZGV4e3BnfSUKK30KKworJSBAYnllLgorXG91dGVyXGRlZlxieWV7XHBhZ2VhbGlnbm1hY3JvXHRyYWNpbmdzdGF0cz0xXHB0ZXhlbmR9CisKKworXG1lc3NhZ2V7cGRmLH0KKyUgYWRvYmUgYHBvcnRhYmxlJyBkb2N1bWVudCBmb3JtYXQKK1xuZXdjb3VudFx0ZW1wbnVtCitcbmV3Y291bnRcbG5rY291bnQKK1xuZXd0b2tzXGZpbGVuYW1lCitcbmV3Y291bnRcZmlsZW5hbWVsZW5ndGgKK1xuZXdjb3VudFxwZ24KK1xuZXd0b2tzXHRva3NBCitcbmV3dG9rc1x0b2tzQgorXG5ld3Rva3NcdG9rc0MKK1xuZXd0b2tzXHRva3NECitcbmV3Ym94XGJveEEKK1xuZXdjb3VudFxjb3VudEEKK1xuZXdpZlxpZnBkZgorXG5ld2lmXGlmcGRmbWFrZXBhZ2VkZXN0CisKKyUgd2hlbiBwZGZ0ZXggaXMgcnVuIGluIGR2aSBtb2RlLCBccGRmb3V0cHV0IGlzIGRlZmluZWQgKHNvIFxwZGZvdXRwdXQ9MQorJSBjYW4gYmUgc2V0KS4gIFNvIHdlIHRlc3QgZm9yIFxyZWxheCBhbmQgMCBhcyB3ZWxsIGFzIFx1bmRlZmluZWQsCislIGJvcnJvd2VkIGZyb20gaWZwZGYuc3R5LgorXGlmeFxwZGZvdXRwdXRcdW5kZWZpbmVkCitcZWxzZQorICBcaWZ4XHBkZm91dHB1dFxyZWxheAorICBcZWxzZQorICAgIFxpZmNhc2VccGRmb3V0cHV0CisgICAgXGVsc2UKKyAgICAgIFxwZGZ0cnVlCisgICAgXGZpCisgIFxmaQorXGZpCisKKyUgUERGIHVzZXMgUG9zdFNjcmlwdCBzdHJpbmcgY29uc3RhbnRzIGZvciB0aGUgbmFtZXMgb2YgeHJlZiB0YXJnZXRzLAorJSBmb3IgZGlzcGxheSBpbiB0aGUgb3V0bGluZXMsIGFuZCBpbiBvdGhlciBwbGFjZXMuICBUaHVzLCB3ZSBoYXZlIHRvCislIGRvdWJsZSBhbnkgYmFja3NsYXNoZXMuICBPdGhlcndpc2UsIGEgbmFtZSBsaWtlICJcbm9kZSIgd2lsbCBiZQorJSBpbnRlcnByZXRlZCBhcyBhIG5ld2xpbmUgKFxuKSwgZm9sbG93ZWQgYnkgbywgZCwgZS4gIE5vdCBnb29kLgorJSBodHRwOi8vd3d3Lm50Zy5ubC9waXBlcm1haWwvbnRnLXBkZnRleC8yMDA0LUp1bHkvMDAwNjU0Lmh0bWwKKyUgKGFuZCByZWxhdGVkIG1lc3NhZ2VzLCB0aGUgZmluYWwgb3V0Y29tZSBpcyB0aGF0IGl0IGlzIHVwIHRvIHRoZSBUZVgKKyUgdXNlciB0byBkb3VibGUgdGhlIGJhY2tzbGFzaGVzIGFuZCBvdGhlcndpc2UgbWFrZSB0aGUgc3RyaW5nIHZhbGlkLCBzbworJSB0aGF0J3Mgd2hhdCB3ZSBkbykuCisKKyUgZG91YmxlIGFjdGl2ZSBiYWNrc2xhc2hlcy4KKyUgCit7XGNhdGNvZGVgXEA9MCBcY2F0Y29kZWBcXD1cYWN0aXZlCisgQGdkZWZAYWN0aXZlYmFja3NsYXNoZG91YmxleyUKKyAgIEBjYXRjb2RlYEBcPUBhY3RpdmUKKyAgIEBsZXRcPUBkb3VibGViYWNrc2xhc2h9Cit9CisKKyUgVG8gaGFuZGxlIHBhcmVucywgd2UgbXVzdCBhZG9wdCBhIGRpZmZlcmVudCBhcHByb2FjaCwgc2luY2UgcGFyZW5zIGFyZQorJSBub3QgYWN0aXZlIGNoYXJhY3RlcnMuICBoeXBlcnJlZi5kdHggKHdoaWNoIGhhcyB0aGUgc2FtZSBwcm9ibGVtIGFzCislIHVzKSBoYW5kbGVzIGl0IHdpdGggdGhpcyBhbWF6aW5nIG1hY3JvIHRvIHJlcGxhY2UgdG9rZW5zLiAgSSd2ZQorJSB0aW5rZXJlZCB3aXRoIGl0IGEgbGl0dGxlIGZvciB0ZXhpbmZvLCBidXQgaXQncyBkZWZpbml0ZWx5IGZyb20gdGhlcmUuCislIAorJSAjMSBpcyB0aGUgdG9rZW5zIHRvIHJlcGxhY2UuCislICMyIGlzIHRoZSByZXBsYWNlbWVudC4KKyUgIzMgaXMgdGhlIGNvbnRyb2wgc2VxdWVuY2Ugd2l0aCB0aGUgc3RyaW5nLgorJSAKK1xkZWZcSHlQc2RTdWJzdCMxIzIjM3slCisgIFxkZWZcSHlQc2RSZXBsYWNlIyMxIzEjIzJcRU5EeyUKKyAgICAjIzElCisgICAgXGlmeFxcIyMyXFwlCisgICAgXGVsc2UKKyAgICAgICMyJQorICAgICAgXEh5UmV0dXJuQWZ0ZXJGaXslCisgICAgICAgIFxIeVBzZFJlcGxhY2UjIzJcRU5ECisgICAgICB9JQorICAgIFxmaQorICB9JQorICBceGRlZiMze1xleHBhbmRhZnRlclxIeVBzZFJlcGxhY2UjMyMxXEVORH0lCit9CitcbG9uZ1xkZWZcSHlSZXR1cm5BZnRlckZpIzFcZml7XGZpIzF9CisKKyUgIzEgaXMgYSBjb250cm9sIHNlcXVlbmNlIGluIHdoaWNoIHRvIGRvIHRoZSByZXBsYWNlbWVudHMuCitcZGVmXGJhY2tzbGFzaHBhcmVucyMxeyUKKyAgXHhkZWYjMXsjMX0lIHJlZGVmaW5lIGl0IGFzIGl0cyBleHBhbnNpb247IHRoZSBkZWZpbml0aW9uIGlzIHNpbXBseQorICAgICAgICAgICAgICUgXGxhc3Rub2RlIHdoZW4gY2FsbGVkIGZyb20gXHNldHJlZiAtPiBccGRmbWtkZXN0LgorICBcSHlQc2RTdWJzdHsofXtccmVhbGJhY2tzbGFzaCh9eyMxfSUKKyAgXEh5UHNkU3Vic3R7KX17XHJlYWxiYWNrc2xhc2gpfXsjMX0lCit9CisKK1xpZnBkZgorICBcaW5wdXQgcGRmY29sb3IKKyAgXHBkZmNhdGFsb2d7L1BhZ2VNb2RlIC9Vc2VPdXRsaW5lc30lCisgIFxkZWZcZG9wZGZpbWFnZSMxIzIjM3slCisgICAgXGRlZlxpbWFnZXdpZHRoeyMyfSUKKyAgICBcZGVmXGltYWdlaGVpZ2h0eyMzfSUKKyAgICAlIHdpdGhvdXQgXGltbWVkaWF0ZSwgcGRmdGV4IHNlZyBmYXVsdHMgd2hlbiB0aGUgc2FtZSBpbWFnZSBpcworICAgICUgaW5jbHVkZWQgdHdpY2UuICAoVmVyc2lvbiAzLjE0MTU5LXByZS0xLjAtdW5vZmZpY2lhbC0yMDAxMDcwNC4pCisgICAgXGlmbnVtXHBkZnRleHZlcnNpb24gPCAxNAorICAgICAgXGltbWVkaWF0ZVxwZGZpbWFnZQorICAgIFxlbHNlCisgICAgICBcaW1tZWRpYXRlXHBkZnhpbWFnZQorICAgIFxmaQorICAgICAgXGlmeFxlbXB0eVxpbWFnZXdpZHRoXGVsc2Ugd2lkdGggXGltYWdld2lkdGggXGZpCisgICAgICBcaWZ4XGVtcHR5XGltYWdlaGVpZ2h0XGVsc2UgaGVpZ2h0IFxpbWFnZWhlaWdodCBcZmkKKyAgICAgIFxpZm51bVxwZGZ0ZXh2ZXJzaW9uPDEzCisgICAgICAgICAjMS5wZGYlCisgICAgICAgXGVsc2UKKyAgICAgICAgIHsjMS5wZGZ9JQorICAgICAgIFxmaQorICAgIFxpZm51bVxwZGZ0ZXh2ZXJzaW9uIDwgMTQgXGVsc2UKKyAgICAgIFxwZGZyZWZ4aW1hZ2UgXHBkZmxhc3R4aW1hZ2UKKyAgICBcZml9CisgIFxkZWZccGRmbWtkZXN0IzF7eyUKKyAgICAlIFdlIGhhdmUgdG8gc2V0IGR1bW1pZXMgc28gY29tbWFuZHMgc3VjaCBhcyBAY29kZSwgYW5kIGNoYXJhY3RlcnMKKyAgICAlIHN1Y2ggYXMgXCwgYXJlbid0IGV4cGFuZGVkIHdoZW4gcHJlc2VudCBpbiBhIHNlY3Rpb24gdGl0bGUuCisgICAgXGF0ZHVtbWllcworICAgIFxhY3RpdmViYWNrc2xhc2hkb3VibGUKKyAgICBcZGVmXHBkZmRlc3RuYW1leyMxfSUKKyAgICBcYmFja3NsYXNocGFyZW5zXHBkZmRlc3RuYW1lCisgICAgXHBkZmRlc3QgbmFtZXtccGRmZGVzdG5hbWV9IHh5eiUKKyAgfX0lCisgICUKKyAgJSB1c2VkIHRvIG1hcmsgdGFyZ2V0IG5hbWVzOyBtdXN0IGJlIGV4cGFuZGFibGUuCisgIFxkZWZccGRmbWtwZ24jMXsjMX0lCisgICUKKyAgXGxldFxsaW5rY29sb3IgPSBcQmx1ZSAgJSB3YXMgQ3lhbiwgYnV0IHRoYXQgc2VlbXMgbGlnaHQ/CisgIFxkZWZcZW5kbGlua3tcQmxhY2tccGRmZW5kbGlua30KKyAgJSBBZGRpbmcgb3V0bGluZXMgdG8gUERGOyBtYWNyb3MgZm9yIGNhbGN1bGF0aW5nIHN0cnVjdHVyZSBvZiBvdXRsaW5lcworICAlIGNvbWUgZnJvbSBQZXRyIE9sc2FrCisgIFxkZWZcZXhwbnVtYmVyIzF7XGV4cGFuZGFmdGVyXGlmeFxjc25hbWUjMVxlbmRjc25hbWVccmVsYXggMCUKKyAgICBcZWxzZSBcY3NuYW1lIzFcZW5kY3NuYW1lIFxmaX0KKyAgXGRlZlxhZHZhbmNlbnVtYmVyIzF7XHRlbXBudW09XGV4cG51bWJlcnsjMX1ccmVsYXgKKyAgICBcYWR2YW5jZVx0ZW1wbnVtIGJ5IDEKKyAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMVxlbmRjc25hbWV7XHRoZVx0ZW1wbnVtfX0KKyAgJQorICAlICMxIGlzIHRoZSBzZWN0aW9uIHRleHQsIHdoaWNoIGlzIHdoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlCisgICUgb3V0bGluZSBieSB0aGUgcGRmIHZpZXdlci4gICMyIGlzIHRoZSBwZGYgZXhwcmVzc2lvbiBmb3IgdGhlIG51bWJlcgorICAlIG9mIHN1YmVudHJpZXMgKG9yIGVtcHR5LCBmb3Igc3Vic3Vic2VjdGlvbnMpLiAgIzMgaXMgdGhlIG5vZGUgdGV4dCwKKyAgJSB3aGljaCBtaWdodCBiZSBlbXB0eSBpZiB0aGlzIHRvYyBlbnRyeSBoYWQgbm8gY29ycmVzcG9uZGluZyBub2RlLgorICAlICM0IGlzIHRoZSBwYWdlIG51bWJlcgorICAlCisgIFxkZWZcZG9wZGZvdXRsaW5lIzEjMiMzIzR7JQorICAgICUgR2VuZXJhdGUgYSBsaW5rIHRvIHRoZSBub2RlIHRleHQgaWYgdGhhdCBleGlzdHM7IGVsc2UsIHVzZSB0aGUKKyAgICAlIHBhZ2UgbnVtYmVyLiAgV2UgY291bGQgZ2VuZXJhdGUgYSBkZXN0aW5hdGlvbiBmb3IgdGhlIHNlY3Rpb24KKyAgICAlIHRleHQgaW4gdGhlIGNhc2Ugd2hlcmUgYSBzZWN0aW9uIGhhcyBubyBub2RlLCBidXQgaXQgZG9lc24ndAorICAgICUgc2VlbSB3b3J0aCB0aGUgdHJvdWJsZSwgc2luY2UgbW9zdCBkb2N1bWVudHMgYXJlIG5vcm1hbGx5IHN0cnVjdHVyZWQuCisgICAgXGRlZlxwZGZvdXRsaW5lZGVzdHsjM30lCisgICAgXGlmeFxwZGZvdXRsaW5lZGVzdFxlbXB0eQorICAgICAgXGRlZlxwZGZvdXRsaW5lZGVzdHsjNH0lCisgICAgXGVsc2UKKyAgICAgICUgRG91YmxlZCBiYWNrc2xhc2hlcyBpbiB0aGUgbmFtZS4KKyAgICAgIHtcYWN0aXZlYmFja3NsYXNoZG91YmxlIFx4ZGVmXHBkZm91dGxpbmVkZXN0eyMzfSUKKyAgICAgICBcYmFja3NsYXNocGFyZW5zXHBkZm91dGxpbmVkZXN0fSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBBbHNvIGRvdWJsZSB0aGUgYmFja3NsYXNoZXMgaW4gdGhlIGRpc3BsYXkgc3RyaW5nLgorICAgIHtcYWN0aXZlYmFja3NsYXNoZG91YmxlIFx4ZGVmXHBkZm91dGxpbmV0ZXh0eyMxfSUKKyAgICAgXGJhY2tzbGFzaHBhcmVuc1xwZGZvdXRsaW5ldGV4dH0lCisgICAgJQorICAgIFxwZGZvdXRsaW5lIGdvdG8gbmFtZXtccGRmbWtwZ257XHBkZm91dGxpbmVkZXN0fX0jMntccGRmb3V0bGluZXRleHR9JQorICB9CisgICUKKyAgXGRlZlxwZGZtYWtlb3V0bGluZXN7JQorICAgIFxiZWdpbmdyb3VwCisgICAgICAlIFRoYW5oJ3MgaGFjayAvIHByb3BlciBicmFjZXMgaW4gYm9va21hcmtzCisgICAgICBcZWRlZlxteWxicmFjZXtcaWZ0cnVlIFxzdHJpbmd7XGVsc2V9XGZpfVxsZXRcez1cbXlsYnJhY2UKKyAgICAgIFxlZGVmXG15cmJyYWNle1xpZmZhbHNle1xlbHNlXHN0cmluZ31cZml9XGxldFx9PVxteXJicmFjZQorICAgICAgJQorICAgICAgJSBSZWFkIHRvYyBzaWxlbnRseSwgdG8gZ2V0IGNvdW50cyBvZiBzdWJlbnRyaWVzIGZvciBccGRmb3V0bGluZS4KKyAgICAgIFxkZWZcbnVtY2hhcGVudHJ5IyMxIyMyIyMzIyM0eyUKKwlcZGVmXHRoaXNjaGFwbnVteyMjMn0lCisJXGRlZlx0aGlzc2VjbnVtezB9JQorCVxkZWZcdGhpc3N1YnNlY251bXswfSUKKyAgICAgIH0lCisgICAgICBcZGVmXG51bXNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKwlcYWR2YW5jZW51bWJlcntjaGFwXHRoaXNjaGFwbnVtfSUKKwlcZGVmXHRoaXNzZWNudW17IyMyfSUKKwlcZGVmXHRoaXNzdWJzZWNudW17MH0lCisgICAgICB9JQorICAgICAgXGRlZlxudW1zdWJzZWNlbnRyeSMjMSMjMiMjMyMjNHslCisJXGFkdmFuY2VudW1iZXJ7c2VjXHRoaXNzZWNudW19JQorCVxkZWZcdGhpc3N1YnNlY251bXsjIzJ9JQorICAgICAgfSUKKyAgICAgIFxkZWZcbnVtc3Vic3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7JQorCVxhZHZhbmNlbnVtYmVye3N1YnNlY1x0aGlzc3Vic2VjbnVtfSUKKyAgICAgIH0lCisgICAgICBcZGVmXHRoaXNjaGFwbnVtezB9JQorICAgICAgXGRlZlx0aGlzc2VjbnVtezB9JQorICAgICAgXGRlZlx0aGlzc3Vic2VjbnVtezB9JQorICAgICAgJQorICAgICAgJSB1c2UgXGRlZiByYXRoZXIgdGhhbiBcbGV0IGhlcmUgYmVjYXVzZSB3ZSByZWRlZmluZSBcY2hhcGVudHJ5IGV0CisgICAgICAlIGFsLiBhIHNlY29uZCB0aW1lLCBiZWxvdy4KKyAgICAgIFxkZWZcYXBwZW50cnl7XG51bWNoYXBlbnRyeX0lCisgICAgICBcZGVmXGFwcHNlY2VudHJ5e1xudW1zZWNlbnRyeX0lCisgICAgICBcZGVmXGFwcHN1YnNlY2VudHJ5e1xudW1zdWJzZWNlbnRyeX0lCisgICAgICBcZGVmXGFwcHN1YnN1YnNlY2VudHJ5e1xudW1zdWJzdWJzZWNlbnRyeX0lCisgICAgICBcZGVmXHVubmNoYXBlbnRyeXtcbnVtY2hhcGVudHJ5fSUKKyAgICAgIFxkZWZcdW5uc2VjZW50cnl7XG51bXNlY2VudHJ5fSUKKyAgICAgIFxkZWZcdW5uc3Vic2VjZW50cnl7XG51bXN1YnNlY2VudHJ5fSUKKyAgICAgIFxkZWZcdW5uc3Vic3Vic2VjZW50cnl7XG51bXN1YnN1YnNlY2VudHJ5fSUKKyAgICAgIFxyZWFkZGF0YWZpbGV7dG9jfSUKKyAgICAgICUKKyAgICAgICUgUmVhZCB0b2Mgc2Vjb25kIHRpbWUsIHRoaXMgdGltZSBhY3R1YWxseSBwcm9kdWNpbmcgdGhlIG91dGxpbmVzLgorICAgICAgJSBUaGUgYC0nIG1lYW5zIHRha2UgdGhlIFxleHBudW1iZXIgYXMgdGhlIGFic29sdXRlIG51bWJlciBvZgorICAgICAgJSBzdWJlbnRyaWVzLCB3aGljaCB3ZSBjYWxjdWxhdGVkIG9uIG91ciBmaXJzdCByZWFkIG9mIHRoZSAudG9jIGFib3ZlLgorICAgICAgJQorICAgICAgJSBXZSB1c2UgdGhlIG5vZGUgbmFtZXMgYXMgdGhlIGRlc3RpbmF0aW9ucy4KKyAgICAgIFxkZWZcbnVtY2hhcGVudHJ5IyMxIyMyIyMzIyM0eyUKKyAgICAgICAgXGRvcGRmb3V0bGluZXsjIzF9e2NvdW50LVxleHBudW1iZXJ7Y2hhcCMjMn19eyMjM317IyM0fX0lCisgICAgICBcZGVmXG51bXNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKyAgICAgICAgXGRvcGRmb3V0bGluZXsjIzF9e2NvdW50LVxleHBudW1iZXJ7c2VjIyMyfX17IyMzfXsjIzR9fSUKKyAgICAgIFxkZWZcbnVtc3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7JQorICAgICAgICBcZG9wZGZvdXRsaW5leyMjMX17Y291bnQtXGV4cG51bWJlcntzdWJzZWMjIzJ9fXsjIzN9eyMjNH19JQorICAgICAgXGRlZlxudW1zdWJzdWJzZWNlbnRyeSMjMSMjMiMjMyMjNHslIGNvdW50IGlzIGFsd2F5cyB6ZXJvCisgICAgICAgIFxkb3BkZm91dGxpbmV7IyMxfXt9eyMjM317IyM0fX0lCisgICAgICAlCisgICAgICAlIFBERiBvdXRsaW5lcyBhcmUgZGlzcGxheWVkIHVzaW5nIHN5c3RlbSBmb250cywgaW5zdGVhZCBvZgorICAgICAgJSBkb2N1bWVudCBmb250cy4gIFRoZXJlZm9yZSB3ZSBjYW5ub3QgdXNlIHNwZWNpYWwgY2hhcmFjdGVycywKKyAgICAgICUgc2luY2UgdGhlIGVuY29kaW5nIGlzIHVua25vd24uICBGb3IgZXhhbXBsZSwgdGhlIGVvZ29uZWsgZnJvbQorICAgICAgJSBMYXRpbiAyICgweGVhKSBnZXRzIHRyYW5zbGF0ZWQgdG8gYSB8IGNoYXJhY3Rlci4gIEluZm8gZnJvbQorICAgICAgJSBTdGFzemVrIFdhd3J5a2lld2ljeiwgMTkgSmFuIDIwMDQgMDQ6MDk6MjQgKzAxMDAuCisgICAgICAlCisgICAgICAlIHh4IHRvIGRvIHRoaXMgcmlnaHQsIHdlIGhhdmUgdG8gdHJhbnNsYXRlIDgtYml0IGNoYXJhY3RlcnMgdG8KKyAgICAgICUgdGhlaXIgImJlc3QiIGVxdWl2YWxlbnQsIGJhc2VkIG9uIHRoZSBAZG9jdW1lbnRlbmNvZGluZy4gIFJpZ2h0CisgICAgICAlIG5vdywgSSBndWVzcyB3ZSdsbCBqdXN0IGxldCB0aGUgcGRmIHJlYWRlciBoYXZlIGl0cyB3YXkuCisgICAgICBcaW5kZXhub2ZvbnRzCisgICAgICBcc2V0dXBkYXRhZmlsZQorICAgICAgXGNhdGNvZGVgXFw9XGFjdGl2ZSBcb3RoZXJiYWNrc2xhc2gKKyAgICAgIFxpbnB1dCBcam9ibmFtZS50b2MKKyAgICBcZW5kZ3JvdXAKKyAgfQorICAlCisgIFxkZWZcc2tpcHNwYWNlcyMxe1xkZWZcUFB7IzF9XGRlZlxEe3x9JQorICAgIFxpZnhcUFBcRFxsZXRcbmV4dHNwXHJlbGF4CisgICAgXGVsc2VcbGV0XG5leHRzcFxza2lwc3BhY2VzCisgICAgICBcaWZ4XHBcc3BhY2VcZWxzZVxhZGR0b2tlbnN7XGZpbGVuYW1lfXtcUFB9JQorICAgICAgICBcYWR2YW5jZVxmaWxlbmFtZWxlbmd0aCBieSAxCisgICAgICBcZmkKKyAgICBcZmkKKyAgICBcbmV4dHNwfQorICBcZGVmXGdldGZpbGVuYW1lIzF7XGZpbGVuYW1lbGVuZ3RoPTBcZXhwYW5kYWZ0ZXJcc2tpcHNwYWNlcyMxfFxyZWxheH0KKyAgXGlmbnVtXHBkZnRleHZlcnNpb24gPCAxNAorICAgIFxsZXQgXHN0YXJ0bGluayBccGRmYW5ub3RsaW5rCisgIFxlbHNlCisgICAgXGxldCBcc3RhcnRsaW5rIFxwZGZzdGFydGxpbmsKKyAgXGZpCisgICUgbWFrZSBhIGxpdmUgdXJsIGluIHBkZiBvdXRwdXQuCisgIFxkZWZccGRmdXJsIzF7JQorICAgIFxiZWdpbmdyb3VwCisgICAgICAlIGl0IHNlZW1zIHdlIHJlYWxseSBuZWVkIHlldCBhbm90aGVyIHNldCBvZiBkdW1taWVzOyBoYXZlIG5vdAorICAgICAgJSB0cmllZCB0byBmaWd1cmUgb3V0IHdoYXQgZWFjaCBjb21tYW5kIHNob3VsZCBkbyBpbiB0aGUgY29udGV4dAorICAgICAgJSBvZiBAdXJsLiAgZm9yIG5vdywganVzdCBtYWtlIEAvIGEgbm8tb3AsIHRoYXQncyB0aGUgb25seSBvbmUKKyAgICAgICUgcGVvcGxlIGhhdmUgYWN0dWFsbHkgcmVwb3J0ZWQgYSBwcm9ibGVtIHdpdGguCisgICAgICAlIAorICAgICAgXG5vcm1hbHR1cm5vZmZhY3RpdmUKKyAgICAgIFxkZWZcQHtAfSUKKyAgICAgIFxsZXRcLz1cZW1wdHkKKyAgICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgICBcbGVhdmV2bW9kZVxSZWQKKyAgICAgIFxzdGFydGxpbmsgYXR0cnsvQm9yZGVyIFswIDAgMF19JQorICAgICAgICB1c2Vyey9TdWJ0eXBlIC9MaW5rIC9BIDw8IC9TIC9VUkkgL1VSSSAoIzEpID4+fSUKKyAgICBcZW5kZ3JvdXB9CisgIFxkZWZccGRmZ2V0dG9rcyMxLntcc2V0Ym94XGJveEE9XGhib3h7XHRva3NBPXsjMS59XHRva3NCPXt9XG1ha2V0b2tzfX0KKyAgXGRlZlxhZGR0b2tlbnMjMSMye1xlZGVmXGFkZHRva3N7XG5vZXhwYW5kIzE9e1x0aGUjMSMyfX1cYWRkdG9rc30KKyAgXGRlZlxhZG4jMXtcYWRkdG9rZW5ze1x0b2tzQ317IzF9XGdsb2JhbFxjb3VudEE9MVxsZXRcbmV4dD1cbWFrZXRva3N9CisgIFxkZWZccG9wdG9rcyMxIzJ8RU5EVE9LU3x7XGxldFxmaXJzdD0jMVx0b2tzRD17IzF9XHRva3NBPXsjMn19CisgIFxkZWZcbWFrZXRva3N7JQorICAgIFxleHBhbmRhZnRlclxwb3B0b2tzXHRoZVx0b2tzQXxFTkRUT0tTfFxyZWxheAorICAgIFxpZnhcZmlyc3QwXGFkbjAKKyAgICBcZWxzZVxpZnhcZmlyc3QxXGFkbjEgXGVsc2VcaWZ4XGZpcnN0MlxhZG4yIFxlbHNlXGlmeFxmaXJzdDNcYWRuMworICAgIFxlbHNlXGlmeFxmaXJzdDRcYWRuNCBcZWxzZVxpZnhcZmlyc3Q1XGFkbjUgXGVsc2VcaWZ4XGZpcnN0NlxhZG42CisgICAgXGVsc2VcaWZ4XGZpcnN0N1xhZG43IFxlbHNlXGlmeFxmaXJzdDhcYWRuOCBcZWxzZVxpZnhcZmlyc3Q5XGFkbjkKKyAgICBcZWxzZQorICAgICAgXGlmbnVtMD1cY291bnRBXGVsc2VcbWFrZWxpbmtcZmkKKyAgICAgIFxpZnhcZmlyc3QuXGxldFxuZXh0PVxkb25lXGVsc2UKKyAgICAgICAgXGxldFxuZXh0PVxtYWtldG9rcworICAgICAgICBcYWRkdG9rZW5ze1x0b2tzQn17XHRoZVx0b2tzRH0KKyAgICAgICAgXGlmeFxmaXJzdCxcYWRkdG9rZW5ze1x0b2tzQn17XHNwYWNlfVxmaQorICAgICAgXGZpCisgICAgXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpCisgICAgXG5leHR9CisgIFxkZWZcbWFrZWxpbmt7XGFkZHRva2Vuc3tcdG9rc0J9JQorICAgIHtcbm9leHBhbmRccGRmbGlua3tcdGhlXHRva3NDfX1cdG9rc0M9e31cZ2xvYmFsXGNvdW50QT0wfQorICBcZGVmXHBkZmxpbmsjMXslCisgICAgXHN0YXJ0bGluayBhdHRyey9Cb3JkZXIgWzAgMCAwXX0gZ290byBuYW1le1xwZGZta3BnbnsjMX19CisgICAgXGxpbmtjb2xvciAjMVxlbmRsaW5rfQorICBcZGVmXGRvbmV7XGVkZWZcc3R7XGdsb2JhbFxub2V4cGFuZFx0b2tzQT17XHRoZVx0b2tzQn19XHN0fQorXGVsc2UKKyAgXGxldFxwZGZta2Rlc3QgPSBcZ29iYmxlCisgIFxsZXRccGRmdXJsID0gXGdvYmJsZQorICBcbGV0XGVuZGxpbmsgPSBccmVsYXgKKyAgXGxldFxsaW5rY29sb3IgPSBccmVsYXgKKyAgXGxldFxwZGZtYWtlb3V0bGluZXMgPSBccmVsYXgKK1xmaSAgJSBcaWZ4XHBkZm91dHB1dAorCisKK1xtZXNzYWdle2ZvbnRzLH0KKworJSBDaGFuZ2UgdGhlIGN1cnJlbnQgZm9udCBzdHlsZSB0byAjMSwgcmVtZW1iZXJpbmcgaXQgaW4gXGN1cmZvbnRzdHlsZS4KKyUgRm9yIG5vdywgd2UgZG8gbm90IGFjY3VtdWxhdGUgZm9udCBzdHlsZXM6IEBie0Bpe2Zvb319IHByaW50cyBmb28gaW4KKyUgaXRhbGljcywgbm90IGJvbGQgaXRhbGljcy4KKyUKK1xkZWZcc2V0Zm9udHN0eWxlIzF7JQorICBcZGVmXGN1cmZvbnRzdHlsZXsjMX0lIG5vdCBhcyBhIGNvbnRyb2wgc2VxdWVuY2UsIGJlY2F1c2Ugd2UgYXJlIFxlZGVmJ2QuCisgIFxjc25hbWUgdGVuIzFcZW5kY3NuYW1lICAlIGNoYW5nZSB0aGUgY3VycmVudCBmb250Cit9CisKKyUgU2VsZWN0ICMxIGZvbnRzIHdpdGggdGhlIGN1cnJlbnQgc3R5bGUuCislCitcZGVmXHNlbGVjdGZvbnRzIzF7XGNzbmFtZSAjMWZvbnRzXGVuZGNzbmFtZSBcY3NuYW1lXGN1cmZvbnRzdHlsZVxlbmRjc25hbWV9CisKK1xkZWZccm17XGZhbT0wIFxzZXRmb250c3R5bGV7cm19fQorXGRlZlxpdHtcZmFtPVxpdGZhbSBcc2V0Zm9udHN0eWxle2l0fX0KK1xkZWZcc2x7XGZhbT1cc2xmYW0gXHNldGZvbnRzdHlsZXtzbH19CitcZGVmXGJme1xmYW09XGJmZmFtIFxzZXRmb250c3R5bGV7YmZ9fVxkZWZcYmZzdHlsZW5hbWV7YmZ9CitcZGVmXHR0e1xmYW09XHR0ZmFtIFxzZXRmb250c3R5bGV7dHR9fQorCislIFRleGluZm8gc29ydCBvZiBzdXBwb3J0cyB0aGUgc2FucyBzZXJpZiBmb250IHN0eWxlLCB3aGljaCBwbGFpbiBUZVggZG9lcyBub3QuCislIFNvIHdlIHNldCB1cCBhIFxzZi4KK1xuZXdmYW1cc2ZmYW0KK1xkZWZcc2Z7XGZhbT1cc2ZmYW0gXHNldGZvbnRzdHlsZXtzZn19CitcbGV0XGxpID0gXHNmICUgU29tZXRpbWVzIHdlIGNhbGwgaXQgXGxpLCBub3QgXHNmLgorCislIFdlIGRvbid0IG5lZWQgbWF0aCBmb3IgdGhpcyBmb250IHN0eWxlLgorXGRlZlx0dHNse1xzZXRmb250c3R5bGV7dHRzbH19CisKKyUgRGVmYXVsdCBsZWFkaW5nLgorXG5ld2RpbWVuXHRleHRsZWFkaW5nICBcdGV4dGxlYWRpbmcgPSAxMy4ycHQKKworJSBTZXQgdGhlIGJhc2VsaW5lc2tpcCB0byAjMSwgYW5kIHRoZSBsaW5lc2tpcCBhbmQgc3RydXQgc2l6ZQorJSBjb3JyZXNwb25kaW5nbHkuICBUaGVyZSBpcyBubyBkZWVwIG1lYW5pbmcgYmVoaW5kIHRoZXNlIG1hZ2ljIG51bWJlcnMKKyUgdXNlZCBhcyBmYWN0b3JzOyB0aGV5IGp1c3QgbWF0Y2ggKGNsb3NlbHkgZW5vdWdoKSB3aGF0IEtudXRoIGRlZmluZWQuCislCitcZGVmXGxpbmVza2lwZmFjdG9yey4wODMzM30KK1xkZWZcc3RydXRoZWlnaHRwZXJjZW50ey43MDgzM30KK1xkZWZcc3RydXRkZXB0aHBlcmNlbnQgey4yOTE2N30KKyUKK1xkZWZcc2V0bGVhZGluZyMxeyUKKyAgXG5vcm1hbGJhc2VsaW5lc2tpcCA9ICMxXHJlbGF4CisgIFxub3JtYWxsaW5lc2tpcCA9IFxsaW5lc2tpcGZhY3Rvclxub3JtYWxiYXNlbGluZXNraXAKKyAgXG5vcm1hbGJhc2VsaW5lcworICBcc2V0Ym94XHN0cnV0Ym94ID1caGJveHslCisgICAgXHZydWxlIHdpZHRoMHB0IGhlaWdodFxzdHJ1dGhlaWdodHBlcmNlbnRcYmFzZWxpbmVza2lwCisgICAgICAgICAgICAgICAgICAgIGRlcHRoIFxzdHJ1dGRlcHRocGVyY2VudCBcYmFzZWxpbmVza2lwCisgIH0lCit9CisKKyUgU2V0IHRoZSBmb250IG1hY3JvICMxIHRvIHRoZSBmb250IG5hbWVkICMyLCBhZGRpbmcgb24gdGhlCislIHNwZWNpZmllZCBmb250IHByZWZpeCAobm9ybWFsbHkgYGNtJykuCislICMzIGlzIHRoZSBmb250J3MgZGVzaWduIHNpemUsICM0IGlzIGEgc2NhbGUgZmFjdG9yCitcZGVmXHNldGZvbnQjMSMyIzMjNHtcZm9udCMxPVxmb250cHJlZml4IzIjMyBzY2FsZWQgIzR9CisKKyUgVXNlIGNtIGFzIHRoZSBkZWZhdWx0IGZvbnQgcHJlZml4LgorJSBUbyBzcGVjaWZ5IHRoZSBmb250IHByZWZpeCwgeW91IG11c3QgZGVmaW5lIFxmb250cHJlZml4CislIGJlZm9yZSB5b3UgcmVhZCBpbiB0ZXhpbmZvLnRleC4KK1xpZnhcZm9udHByZWZpeFx1bmRlZmluZWQKK1xkZWZcZm9udHByZWZpeHtjbX0KK1xmaQorJSBTdXBwb3J0IGZvbnQgZmFtaWxpZXMgdGhhdCBkb24ndCB1c2UgdGhlIHNhbWUgbmFtaW5nIHNjaGVtZSBhcyBDTS4KK1xkZWZccm1zaGFwZXtyfQorXGRlZlxybWJzaGFwZXtieH0gICAgICAgICAgICAgICAld2hlcmUgdGhlIG5vcm1hbCBmYWNlIGlzIGJvbGQKK1xkZWZcYmZzaGFwZXtifQorXGRlZlxieHNoYXBle2J4fQorXGRlZlx0dHNoYXBle3R0fQorXGRlZlx0dGJzaGFwZXt0dH0KK1xkZWZcdHRzbHNoYXBle3NsdHR9CitcZGVmXGl0c2hhcGV7dGl9CitcZGVmXGl0YnNoYXBle2J4dGl9CitcZGVmXHNsc2hhcGV7c2x9CitcZGVmXHNsYnNoYXBle2J4c2x9CitcZGVmXHNmc2hhcGV7c3N9CitcZGVmXHNmYnNoYXBle3NzfQorXGRlZlxzY3NoYXBle2NzY30KK1xkZWZcc2Nic2hhcGV7Y3NjfQorCislIFRleHQgZm9udHMgKDExLjJwdCwgbWFnc3RlcDEpLgorXGRlZlx0ZXh0bm9taW5hbHNpemV7MTFwdH0KK1xlZGVmXG1haW5tYWdzdGVwe1xtYWdzdGVwaGFsZn0KK1xzZXRmb250XHRleHRybVxybXNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0dHRcdHRzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dGJmXGJmc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHRpdFxpdHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0c2xcc2xzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHNmXHNmc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHRzY1xzY3NoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0dHRzbFx0dHNsc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xmb250XHRleHRpPWNtbWkxMCBzY2FsZWQgXG1haW5tYWdzdGVwCitcZm9udFx0ZXh0c3k9Y21zeTEwIHNjYWxlZCBcbWFpbm1hZ3N0ZXAKKworJSBBIGZldyBmb250cyBmb3IgQGRlZnVuIG5hbWVzIGFuZCBhcmdzLgorXHNldGZvbnRcZGVmYmZcYmZzaGFwZXsxMH17XG1hZ3N0ZXAxfQorXHNldGZvbnRcZGVmdHRcdHRzaGFwZXsxMH17XG1hZ3N0ZXAxfQorXHNldGZvbnRcZGVmdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwMX0KK1xkZWZcZGZ7XGxldFx0ZW50dD1cZGVmdHQgXGxldFx0ZW5iZiA9IFxkZWZiZiBcbGV0XHRlbnR0c2w9XGRlZnR0c2wgXGJmfQorCislIEZvbnRzIGZvciBpbmRpY2VzLCBmb290bm90ZXMsIHNtYWxsIGV4YW1wbGVzICg5cHQpLgorXGRlZlxzbWFsbG5vbWluYWxzaXplezlwdH0KK1xzZXRmb250XHNtYWxscm1ccm1zaGFwZXs5fXsxMDAwfQorXHNldGZvbnRcc21hbGx0dFx0dHNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbGJmXGJmc2hhcGV7MTB9ezkwMH0KK1xzZXRmb250XHNtYWxsaXRcaXRzaGFwZXs5fXsxMDAwfQorXHNldGZvbnRcc21hbGxzbFxzbHNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHNmXHNmc2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsc2Ncc2NzaGFwZXsxMH17OTAwfQorXHNldGZvbnRcc21hbGx0dHNsXHR0c2xzaGFwZXsxMH17OTAwfQorXGZvbnRcc21hbGxpPWNtbWk5CitcZm9udFxzbWFsbHN5PWNtc3k5CisKKyUgRm9udHMgZm9yIHNtYWxsIGV4YW1wbGVzICg4cHQpLgorXGRlZlxzbWFsbGVybm9taW5hbHNpemV7OHB0fQorXHNldGZvbnRcc21hbGxlcnJtXHJtc2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJ0dFx0dHNoYXBlezh9ezEwMDB9Citcc2V0Zm9udFxzbWFsbGVyYmZcYmZzaGFwZXsxMH17ODAwfQorXHNldGZvbnRcc21hbGxlcml0XGl0c2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJzbFxzbHNoYXBlezh9ezEwMDB9Citcc2V0Zm9udFxzbWFsbGVyc2Zcc2ZzaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnNjXHNjc2hhcGV7MTB9ezgwMH0KK1xzZXRmb250XHNtYWxsZXJ0dHNsXHR0c2xzaGFwZXsxMH17ODAwfQorXGZvbnRcc21hbGxlcmk9Y21taTgKK1xmb250XHNtYWxsZXJzeT1jbXN5OAorCislIEZvbnRzIGZvciB0aXRsZSBwYWdlICgyMC40cHQpOgorXGRlZlx0aXRsZW5vbWluYWxzaXplezIwcHR9Citcc2V0Zm9udFx0aXRsZXJtXHJtYnNoYXBlezEyfXtcbWFnc3RlcDN9Citcc2V0Zm9udFx0aXRsZWl0XGl0YnNoYXBlezEwfXtcbWFnc3RlcDR9Citcc2V0Zm9udFx0aXRsZXNsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDR9Citcc2V0Zm9udFx0aXRsZXR0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDN9Citcc2V0Zm9udFx0aXRsZXR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDR9Citcc2V0Zm9udFx0aXRsZXNmXHNmYnNoYXBlezE3fXtcbWFnc3RlcDF9CitcbGV0XHRpdGxlYmY9XHRpdGxlcm0KK1xzZXRmb250XHRpdGxlc2Ncc2Nic2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xmb250XHRpdGxlaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwMworXGZvbnRcdGl0bGVzeT1jbXN5MTAgc2NhbGVkIFxtYWdzdGVwNAorXGRlZlxhdXRob3JybXtcc2Vjcm19CitcZGVmXGF1dGhvcnR0e1xzZWN0dH0KKworJSBDaGFwdGVyIChhbmQgdW5udW1iZXJlZCkgZm9udHMgKDE3LjI4cHQpLgorXGRlZlxjaGFwbm9taW5hbHNpemV7MTdwdH0KK1xzZXRmb250XGNoYXBybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXAyfQorXHNldGZvbnRcY2hhcGl0XGl0YnNoYXBlezEwfXtcbWFnc3RlcDN9Citcc2V0Zm9udFxjaGFwc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwM30KK1xzZXRmb250XGNoYXB0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAyfQorXHNldGZvbnRcY2hhcHR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDN9Citcc2V0Zm9udFxjaGFwc2Zcc2Zic2hhcGV7MTd9ezEwMDB9CitcbGV0XGNoYXBiZj1cY2hhcHJtCitcc2V0Zm9udFxjaGFwc2Ncc2Nic2hhcGV7MTB9e1xtYWdzdGVwM30KK1xmb250XGNoYXBpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAyCitcZm9udFxjaGFwc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDMKKworJSBTZWN0aW9uIGZvbnRzICgxNC40cHQpLgorXGRlZlxzZWNub21pbmFsc2l6ZXsxNHB0fQorXHNldGZvbnRcc2Vjcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwMX0KK1xzZXRmb250XHNlY2l0XGl0YnNoYXBlezEwfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxzZWNzbFxzbGJzaGFwZXsxMH17XG1hZ3N0ZXAyfQorXHNldGZvbnRcc2VjdHRcdHRic2hhcGV7MTJ9e1xtYWdzdGVwMX0KK1xzZXRmb250XHNlY3R0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxzZWNzZlxzZmJzaGFwZXsxMn17XG1hZ3N0ZXAxfQorXGxldFxzZWNiZlxzZWNybQorXHNldGZvbnRcc2Vjc2Ncc2Nic2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xmb250XHNlY2k9Y21taTEyIHNjYWxlZCBcbWFnc3RlcDEKK1xmb250XHNlY3N5PWNtc3kxMCBzY2FsZWQgXG1hZ3N0ZXAyCisKKyUgU3Vic2VjdGlvbiBmb250cyAoMTMuMTVwdCkuCitcZGVmXHNzZWNub21pbmFsc2l6ZXsxM3B0fQorXHNldGZvbnRcc3NlY3JtXHJtYnNoYXBlezEyfXtcbWFnc3RlcGhhbGZ9Citcc2V0Zm9udFxzc2VjaXRcaXRic2hhcGV7MTB9ezEzMTV9Citcc2V0Zm9udFxzc2Vjc2xcc2xic2hhcGV7MTB9ezEzMTV9Citcc2V0Zm9udFxzc2VjdHRcdHRic2hhcGV7MTJ9e1xtYWdzdGVwaGFsZn0KK1xzZXRmb250XHNzZWN0dHNsXHR0c2xzaGFwZXsxMH17MTMxNX0KK1xzZXRmb250XHNzZWNzZlxzZmJzaGFwZXsxMn17XG1hZ3N0ZXBoYWxmfQorXGxldFxzc2VjYmZcc3NlY3JtCitcc2V0Zm9udFxzc2Vjc2Ncc2Nic2hhcGV7MTB9ezEzMTV9CitcZm9udFxzc2VjaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwaGFsZgorXGZvbnRcc3NlY3N5PWNtc3kxMCBzY2FsZWQgMTMxNQorCislIFJlZHVjZWQgZm9udHMgZm9yIEBhY3JvIGluIHRleHQgKDEwcHQpLgorXGRlZlxyZWR1Y2Vkbm9taW5hbHNpemV7MTBwdH0KK1xzZXRmb250XHJlZHVjZWRybVxybXNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZHR0XHR0c2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2VkYmZcYmZzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWRpdFxpdHNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZHNsXHNsc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2Vkc2Zcc2ZzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWRzY1xzY3NoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZHR0c2xcdHRzbHNoYXBlezEwfXsxMDAwfQorXGZvbnRccmVkdWNlZGk9Y21taTEwCitcZm9udFxyZWR1Y2Vkc3k9Y21zeTEwCisKKyUgSW4gb3JkZXIgZm9yIHRoZSBmb250IGNoYW5nZXMgdG8gYWZmZWN0IG1vc3QgbWF0aCBzeW1ib2xzIGFuZCBsZXR0ZXJzLAorJSB3ZSBoYXZlIHRvIGRlZmluZSB0aGUgXHRleHRmb250IG9mIHRoZSBzdGFuZGFyZCBmYW1pbGllcy4gIFNpbmNlCislIHRleGluZm8gZG9lc24ndCBhbGxvdyBmb3IgcHJvZHVjaW5nIHN1YnNjcmlwdHMgYW5kIHN1cGVyc2NyaXB0cyBleGNlcHQKKyUgaW4gdGhlIG1haW4gdGV4dCwgd2UgZG9uJ3QgYm90aGVyIHRvIHJlc2V0IFxzY3JpcHRmb250IGFuZAorJSBcc2NyaXB0c2NyaXB0Zm9udCAod2hpY2ggd291bGQgYWxzbyByZXF1aXJlIGxvYWRpbmcgYSBsb3QgbW9yZSBmb250cykuCislCitcZGVmXHJlc2V0bWF0aGZvbnRzeyUKKyAgXHRleHRmb250MD1cdGVucm0gXHRleHRmb250MT1cdGVuaSBcdGV4dGZvbnQyPVx0ZW5zeQorICBcdGV4dGZvbnRcaXRmYW09XHRlbml0IFx0ZXh0Zm9udFxzbGZhbT1cdGVuc2wgXHRleHRmb250XGJmZmFtPVx0ZW5iZgorICBcdGV4dGZvbnRcdHRmYW09XHRlbnR0IFx0ZXh0Zm9udFxzZmZhbT1cdGVuc2YKK30KKworJSBUaGUgZm9udC1jaGFuZ2luZyBjb21tYW5kcyByZWRlZmluZSB0aGUgbWVhbmluZ3Mgb2YgXHRlblNUWUxFLCBpbnN0ZWFkCislIG9mIGp1c3QgXFNUWUxFLiAgV2UgZG8gdGhpcyBiZWNhdXNlIFxTVFlMRSBuZWVkcyB0byBhbHNvIHNldCB0aGUKKyUgY3VycmVudCBcZmFtIGZvciBtYXRoIG1vZGUuICBPdXIgXFNUWUxFIChlLmcuLCBccm0pIGNvbW1hbmRzIGhhcmR3aXJlCislIFx0ZW5TVFlMRSB0byBzZXQgdGhlIGN1cnJlbnQgZm9udC4KKyUKKyUgRWFjaCBmb250LWNoYW5naW5nIGNvbW1hbmQgYWxzbyBzZXRzIHRoZSBuYW1lcyBcbHNpemUgKG9uZSBzaXplIGxvd2VyKQorJSBhbmQgXGxsbHNpemUgKHRocmVlIHNpemVzIGxvd2VyKS4gIFRoZXNlIHJlbGF0aXZlIGNvbW1hbmRzIGFyZSB1c2VkIGluCislIHRoZSBMYVRlWCBsb2dvIGFuZCBhY3Jvbnltcy4KKyUKKyUgVGhpcyBhbGwgbmVlZHMgZ2VuZXJhbGl6aW5nLCBiYWRseS4KKyUKK1xkZWZcdGV4dGZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cdGV4dHJtIFxsZXRcdGVuaXQ9XHRleHRpdCBcbGV0XHRlbnNsPVx0ZXh0c2wKKyAgXGxldFx0ZW5iZj1cdGV4dGJmIFxsZXRcdGVudHQ9XHRleHR0dCBcbGV0XHNtYWxsY2Fwcz1cdGV4dHNjCisgIFxsZXRcdGVuc2Y9XHRleHRzZiBcbGV0XHRlbmk9XHRleHRpIFxsZXRcdGVuc3k9XHRleHRzeQorICBcbGV0XHRlbnR0c2w9XHRleHR0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7dGV4dH0lCisgIFxkZWZcbHNpemV7cmVkdWNlZH1cZGVmXGxsbHNpemV7c21hbGxlcn0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3tcdGV4dGxlYWRpbmd9fQorXGRlZlx0aXRsZWZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cdGl0bGVybSBcbGV0XHRlbml0PVx0aXRsZWl0IFxsZXRcdGVuc2w9XHRpdGxlc2wKKyAgXGxldFx0ZW5iZj1cdGl0bGViZiBcbGV0XHRlbnR0PVx0aXRsZXR0IFxsZXRcc21hbGxjYXBzPVx0aXRsZXNjCisgIFxsZXRcdGVuc2Y9XHRpdGxlc2YgXGxldFx0ZW5pPVx0aXRsZWkgXGxldFx0ZW5zeT1cdGl0bGVzeQorICBcbGV0XHRlbnR0c2w9XHRpdGxldHRzbAorICBcZGVmXGN1cmZvbnRzaXple3RpdGxlfSUKKyAgXGRlZlxsc2l6ZXtjaGFwfVxkZWZcbGxsc2l6ZXtzdWJzZWN9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MjVwdH19CitcZGVmXHRpdGxlZm9udCMxe3tcdGl0bGVmb250c1xybSAjMX19CitcZGVmXGNoYXBmb250c3slCisgIFxsZXRcdGVucm09XGNoYXBybSBcbGV0XHRlbml0PVxjaGFwaXQgXGxldFx0ZW5zbD1cY2hhcHNsCisgIFxsZXRcdGVuYmY9XGNoYXBiZiBcbGV0XHRlbnR0PVxjaGFwdHQgXGxldFxzbWFsbGNhcHM9XGNoYXBzYworICBcbGV0XHRlbnNmPVxjaGFwc2YgXGxldFx0ZW5pPVxjaGFwaSBcbGV0XHRlbnN5PVxjaGFwc3kKKyAgXGxldFx0ZW50dHNsPVxjaGFwdHRzbAorICBcZGVmXGN1cmZvbnRzaXple2NoYXB9JQorICBcZGVmXGxzaXple3NlY31cZGVmXGxsbHNpemV7dGV4dH0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxOXB0fX0KK1xkZWZcc2VjZm9udHN7JQorICBcbGV0XHRlbnJtPVxzZWNybSBcbGV0XHRlbml0PVxzZWNpdCBcbGV0XHRlbnNsPVxzZWNzbAorICBcbGV0XHRlbmJmPVxzZWNiZiBcbGV0XHRlbnR0PVxzZWN0dCBcbGV0XHNtYWxsY2Fwcz1cc2Vjc2MKKyAgXGxldFx0ZW5zZj1cc2Vjc2YgXGxldFx0ZW5pPVxzZWNpIFxsZXRcdGVuc3k9XHNlY3N5CisgIFxsZXRcdGVudHRzbD1cc2VjdHRzbAorICBcZGVmXGN1cmZvbnRzaXple3NlY30lCisgIFxkZWZcbHNpemV7c3Vic2VjfVxkZWZcbGxsc2l6ZXtyZWR1Y2VkfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezE2cHR9fQorXGRlZlxzdWJzZWNmb250c3slCisgIFxsZXRcdGVucm09XHNzZWNybSBcbGV0XHRlbml0PVxzc2VjaXQgXGxldFx0ZW5zbD1cc3NlY3NsCisgIFxsZXRcdGVuYmY9XHNzZWNiZiBcbGV0XHRlbnR0PVxzc2VjdHQgXGxldFxzbWFsbGNhcHM9XHNzZWNzYworICBcbGV0XHRlbnNmPVxzc2Vjc2YgXGxldFx0ZW5pPVxzc2VjaSBcbGV0XHRlbnN5PVxzc2Vjc3kKKyAgXGxldFx0ZW50dHNsPVxzc2VjdHRzbAorICBcZGVmXGN1cmZvbnRzaXple3NzZWN9JQorICBcZGVmXGxzaXple3RleHR9XGRlZlxsbGxzaXple3NtYWxsfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezE1cHR9fQorXGxldFxzdWJzdWJzZWNmb250cyA9IFxzdWJzZWNmb250cworXGRlZlxyZWR1Y2VkZm9udHN7JQorICBcbGV0XHRlbnJtPVxyZWR1Y2Vkcm0gXGxldFx0ZW5pdD1ccmVkdWNlZGl0IFxsZXRcdGVuc2w9XHJlZHVjZWRzbAorICBcbGV0XHRlbmJmPVxyZWR1Y2VkYmYgXGxldFx0ZW50dD1ccmVkdWNlZHR0IFxsZXRccmVkdWNlZGNhcHM9XHJlZHVjZWRzYworICBcbGV0XHRlbnNmPVxyZWR1Y2Vkc2YgXGxldFx0ZW5pPVxyZWR1Y2VkaSBcbGV0XHRlbnN5PVxyZWR1Y2Vkc3kKKyAgXGxldFx0ZW50dHNsPVxyZWR1Y2VkdHRzbAorICBcZGVmXGN1cmZvbnRzaXple3JlZHVjZWR9JQorICBcZGVmXGxzaXple3NtYWxsfVxkZWZcbGxsc2l6ZXtzbWFsbGVyfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezEwLjVwdH19CitcZGVmXHNtYWxsZm9udHN7JQorICBcbGV0XHRlbnJtPVxzbWFsbHJtIFxsZXRcdGVuaXQ9XHNtYWxsaXQgXGxldFx0ZW5zbD1cc21hbGxzbAorICBcbGV0XHRlbmJmPVxzbWFsbGJmIFxsZXRcdGVudHQ9XHNtYWxsdHQgXGxldFxzbWFsbGNhcHM9XHNtYWxsc2MKKyAgXGxldFx0ZW5zZj1cc21hbGxzZiBcbGV0XHRlbmk9XHNtYWxsaSBcbGV0XHRlbnN5PVxzbWFsbHN5CisgIFxsZXRcdGVudHRzbD1cc21hbGx0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7c21hbGx9JQorICBcZGVmXGxzaXple3NtYWxsZXJ9XGRlZlxsbGxzaXple3NtYWxsZXJ9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTAuNXB0fX0KK1xkZWZcc21hbGxlcmZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cc21hbGxlcnJtIFxsZXRcdGVuaXQ9XHNtYWxsZXJpdCBcbGV0XHRlbnNsPVxzbWFsbGVyc2wKKyAgXGxldFx0ZW5iZj1cc21hbGxlcmJmIFxsZXRcdGVudHQ9XHNtYWxsZXJ0dCBcbGV0XHNtYWxsY2Fwcz1cc21hbGxlcnNjCisgIFxsZXRcdGVuc2Y9XHNtYWxsZXJzZiBcbGV0XHRlbmk9XHNtYWxsZXJpIFxsZXRcdGVuc3k9XHNtYWxsZXJzeQorICBcbGV0XHRlbnR0c2w9XHNtYWxsZXJ0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7c21hbGxlcn0lCisgIFxkZWZcbHNpemV7c21hbGxlcn1cZGVmXGxsbHNpemV7c21hbGxlcn0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3s5LjVwdH19CisKKyUgU2V0IHRoZSBmb250cyB0byB1c2Ugd2l0aCB0aGUgQHNtYWxsLi4uIGVudmlyb25tZW50cy4KK1xsZXRcc21hbGxleGFtcGxlZm9udHMgPSBcc21hbGxmb250cworCislIEFib3V0IFxzbWFsbGV4YW1wbGVmb250cy4gIElmIHdlIHVzZSBcc21hbGxmb250cyAoOXB0KSwgQHNtYWxsZXhhbXBsZQorJSBjYW4gZml0IHRoaXMgbWFueSBjaGFyYWN0ZXJzOgorJSAgIDguNXgxMT04NiAgIHNtYWxsYm9vaz03MiAgYTQ9OTAgIGE1PTY5CislIElmIHdlIHVzZSBcc2NyaXB0Zm9udHMgKDhwdCksIHRoZW4gd2UgY2FuIGZpdCB0aGlzIG1hbnkgY2hhcmFjdGVyczoKKyUgICA4LjV4MTE9OTArICBzbWFsbGJvb2s9ODAgIGE0PTkwKyAgYTU9NzcKKyUgRm9yIG1lLCBzdWJqZWN0aXZlbHksIHRoZSBmZXcgZXh0cmEgY2hhcmFjdGVycyB0aGF0IGZpdCBhcmVuJ3Qgd29ydGgKKyUgdGhlIGFkZGl0aW9uYWwgc21hbGxuZXNzIG9mIDhwdC4gIFNvIEknbSBtYWtpbmcgdGhlIGRlZmF1bHQgOXB0LgorJQorJSBCeSB0aGUgd2F5LCBmb3IgY29tcGFyaXNvbiwgaGVyZSdzIHdoYXQgZml0cyB3aXRoIEBleGFtcGxlICgxMHB0KToKKyUgICA4LjV4MTE9NzEgIHNtYWxsYm9vaz02MCAgYTQ9NzUgIGE1PTU4CislCislIEkgd2lzaCB0aGUgVVNBIHVzZWQgQTQgcGFwZXIuCislIC0ta2FybCwgMjRqYW4wMy4KKworCislIFNldCB1cCB0aGUgZGVmYXVsdCBmb250cywgc28gd2UgY2FuIHVzZSB0aGVtIGZvciBjcmVhdGluZyBib3hlcy4KKyUKK1x0ZXh0Zm9udHMgXHJtCisKKyUgRGVmaW5lIHRoZXNlIHNvIHRoZXkgY2FuIGJlIGVhc2lseSBjaGFuZ2VkIGZvciBvdGhlciBmb250cy4KK1xkZWZcYW5nbGVsZWZ0eyRcbGFuZ2xlJH0KK1xkZWZcYW5nbGVyaWdodHskXHJhbmdsZSR9CisKKyUgQ291bnQgZGVwdGggaW4gZm9udC1jaGFuZ2VzLCBmb3IgZXJyb3IgY2hlY2tzCitcbmV3Y291bnRcZm9udGRlcHRoIFxmb250ZGVwdGg9MAorCislIEZvbnRzIGZvciBzaG9ydCB0YWJsZSBvZiBjb250ZW50cy4KK1xzZXRmb250XHNob3J0Y29udHJtXHJtc2hhcGV7MTJ9ezEwMDB9Citcc2V0Zm9udFxzaG9ydGNvbnRiZlxiZnNoYXBlezEwfXtcbWFnc3RlcDF9ICAlIG5vIGNtYjEyCitcc2V0Zm9udFxzaG9ydGNvbnRzbFxzbHNoYXBlezEyfXsxMDAwfQorXHNldGZvbnRcc2hvcnRjb250dHRcdHRzaGFwZXsxMn17MTAwMH0KKworJSUgQWRkIHNjcmliZS1saWtlIGZvbnQgZW52aXJvbm1lbnRzLCBwbHVzIEBsIGZvciBpbmxpbmUgbGlzcCAodXN1YWxseSBzYW5zCislJSBzZXJpZikgYW5kIEBpaSBmb3IgVGVYIGl0YWxpYworCislIFxzbWFydGl0YWxpY3tBUkd9IG91dHB1dHMgYXJnIGluIGl0YWxpY3MsIGZvbGxvd2VkIGJ5IGFuIGl0YWxpYyBjb3JyZWN0aW9uCislIHVubGVzcyB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciBpcyBzdWNoIGFzIG5vdCB0byBuZWVkIG9uZS4KK1xkZWZcc21hcnRpdGFsaWN4e1xpZnhcbmV4dCxcZWxzZVxpZnhcbmV4dC1cZWxzZVxpZnhcbmV4dC5cZWxzZQorICAgICAgICAgICAgICAgICAgICBccHRleHNsYXNoXGZpXGZpXGZpfQorXGRlZlxzbWFydHNsYW50ZWQjMXt7XGlmdXNpbmd0dFx0dHNsXHNsICMxfVxmdXR1cmVsZXRcbmV4dFxzbWFydGl0YWxpY3h9CitcZGVmXHNtYXJ0aXRhbGljIzF7e1xpZnVzaW5ndHRcdHRzbFxpdCAjMX1cZnV0dXJlbGV0XG5leHRcc21hcnRpdGFsaWN4fQorCislIGxpa2UgXHNtYXJ0c2xhbnRlZCBleGNlcHQgdW5jb25kaXRpb25hbGx5IHVzZXMgXHR0c2wuCislIEB2YXIgaXMgc2V0IHRvIHRoaXMgZm9yIGRlZnVuIGFyZ3VtZW50cy4KK1xkZWZcdHRzbGFudGVkIzF7e1x0dHNsICMxfVxmdXR1cmVsZXRcbmV4dFxzbWFydGl0YWxpY3h9CisKKyUgbGlrZSBcc21hcnRzbGFudGVkIGV4Y2VwdCB1bmNvbmRpdGlvbmFsbHkgdXNlIFxzbC4gIFdlIG5ldmVyIHdhbnQKKyUgdHRzbCBmb3IgYm9vayB0aXRsZXMsIGRvIHdlPworXGRlZlxjaXRlIzF7e1xzbCAjMX1cZnV0dXJlbGV0XG5leHRcc21hcnRpdGFsaWN4fQorCitcbGV0XGk9XHNtYXJ0aXRhbGljCitcbGV0XHNsYW50ZWQ9XHNtYXJ0c2xhbnRlZAorXGxldFx2YXI9XHNtYXJ0c2xhbnRlZAorXGxldFxkZm49XHNtYXJ0c2xhbnRlZAorXGxldFxlbXBoPVxzbWFydGl0YWxpYworCislIEBiLCBleHBsaWNpdCBib2xkLgorXGRlZlxiIzF7e1xiZiAjMX19CitcbGV0XHN0cm9uZz1cYgorCislIEBzYW5zc2VyaWYsIGV4cGxpY2l0IHNhbnMuCitcZGVmXHNhbnNzZXJpZiMxe3tcc2YgIzF9fQorCislIFdlIGNhbid0IGp1c3QgdXNlIFxleGh5cGhlbnBlbmFsdHksIGJlY2F1c2UgdGhhdCBvbmx5IGhhcyBlZmZlY3QgYXQKKyUgdGhlIGVuZCBvZiBhIHBhcmFncmFwaC4gIFJlc3RvcmUgbm9ybWFsIGh5cGhlbmF0aW9uIGF0IHRoZSBlbmQgb2YgdGhlCislIGdyb3VwIHdpdGhpbiB3aGljaCBcbm9oeXBoZW5hdGlvbiBpcyBwcmVzdW1hYmx5IGNhbGxlZC4KKyUKK1xkZWZcbm9oeXBoZW5hdGlvbntcaHlwaGVuY2hhclxmb250ID0gLTEgIFxhZnRlcmdyb3VwXHJlc3RvcmVoeXBoZW5hdGlvbn0KK1xkZWZccmVzdG9yZWh5cGhlbmF0aW9ue1xoeXBoZW5jaGFyXGZvbnQgPSBgLSB9CisKKyUgU2V0IHNmY29kZSB0byBub3JtYWwgZm9yIHRoZSBjaGFycyB0aGF0IHVzdWFsbHkgaGF2ZSBhbm90aGVyIHZhbHVlLgorJSBDYW4ndCB1c2UgcGxhaW4ncyBcZnJlbmNoc3BhY2luZyBiZWNhdXNlIGl0IHVzZXMgdGhlIGBceCBub3RhdGlvbiwgYW5kCislIHNvbWV0aW1lcyBceCBoYXMgYW4gYWN0aXZlIGRlZmluaXRpb24gdGhhdCBtZXNzZXMgdGhpbmdzIHVwLgorJQorXGNoYXJkZWZcY29sb25DaGFyID0gYFw6CitcY2hhcmRlZlxjb21tYUNoYXIgPSBgXCwKK1xjaGFyZGVmXGRvdENoYXIgICA9IGBcLgorXGNoYXJkZWZcZXhjbGFtQ2hhcj0gYFwhCitcY2hhcmRlZlxxdWVzdENoYXIgPSBgXD8KK1xjaGFyZGVmXHNlbWlDaGFyICA9IGBcOworJQorXGNhdGNvZGVgQD0xMQorICBcZGVmXHBsYWluZnJlbmNoc3BhY2luZ3slCisgICAgXHNmY29kZVxkb3RDaGFyICA9XEBtIFxzZmNvZGVccXVlc3RDaGFyPVxAbSBcc2Zjb2RlXGV4Y2xhbUNoYXI9XEBtCisgICAgXHNmY29kZVxjb2xvbkNoYXI9XEBtIFxzZmNvZGVcc2VtaUNoYXIgPVxAbSBcc2Zjb2RlXGNvbW1hQ2hhciA9XEBtCisgICAgXGRlZlxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3J7MTAwMH0lIGZvciBALiBhbmQgZnJpZW5kcworICB9CisgIFxkZWZccGxhaW5ub25mcmVuY2hzcGFjaW5neyUKKyAgICBcc2Zjb2RlYFwuMzAwMFxzZmNvZGVgXD8zMDAwXHNmY29kZWBcITMwMDAKKyAgICBcc2Zjb2RlYFw6MjAwMFxzZmNvZGVgXDsxNTAwXHNmY29kZWBcLDEyNTAKKyAgICBcZGVmXGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvcnszMDAwfSUgZm9yIEAuIGFuZCBmcmllbmRzCisgIH0KK1xjYXRjb2RlYEA9XG90aGVyCitcZGVmXGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvcnszMDAwfSUgZGVmYXVsdAorCitcZGVmXHQjMXslCisgIHtcdHQgXHJhd2JhY2tzbGFzaCBccGxhaW5mcmVuY2hzcGFjaW5nICMxfSUKKyAgXG51bGwKK30KK1xkZWZcc2FtcCMxe2BcdGNsb3NleyMxfSdcbnVsbH0KK1xzZXRmb250XGtleXJtXHJtc2hhcGV7OH17MTAwMH0KK1xmb250XGtleXN5PWNtc3k5CitcZGVmXGtleSMxe3tca2V5cm1cdGV4dGZvbnQyPVxrZXlzeSBcbGVhdmV2bW9kZVxoYm94eyUKKyAgXHJhaXNlMC40cHRcaGJveHtcYW5nbGVsZWZ0fVxrZXJuLS4wOGVtXHZ0b3B7JQorICAgIFx2Ym94e1xocnVsZVxrZXJuLTAuNHB0CisgICAgIFxoYm94e1xyYWlzZTAuNHB0XGhib3h7XHZwaGFudG9te1xhbmdsZWxlZnR9fSMxfX0lCisgICAgXGtlcm4tMC40cHRcaHJ1bGV9JQorICBca2Vybi0uMDZlbVxyYWlzZTAuNHB0XGhib3h7XGFuZ2xlcmlnaHR9fX19CislIFRoZSBvbGQgZGVmaW5pdGlvbiwgd2l0aCBubyBsb3plbmdlOgorJVxkZWZca2V5ICMxe3tcdHRzbCBcbm9oeXBoZW5hdGlvbiBcdXBwZXJjYXNleyMxfX1cbnVsbH0KK1xkZWZcY3RybCAjMXt7XHR0IFxyYXdiYWNrc2xhc2ggXGhhdH0jMX0KKworJSBAZmlsZSwgQG9wdGlvbiBhcmUgdGhlIHNhbWUgYXMgQHNhbXAuCitcbGV0XGZpbGU9XHNhbXAKK1xsZXRcb3B0aW9uPVxzYW1wCisKKyUgQGNvZGUgaXMgYSBtb2RpZmljYXRpb24gb2YgQHQsCislIHdoaWNoIG1ha2VzIHNwYWNlcyB0aGUgc2FtZSBzaXplIGFzIG5vcm1hbCBpbiB0aGUgc3Vycm91bmRpbmcgdGV4dC4KK1xkZWZcdGNsb3NlIzF7JQorICB7JQorICAgICUgQ2hhbmdlIG5vcm1hbCBpbnRlcndvcmQgc3BhY2UgdG8gYmUgc2FtZSBhcyBmb3IgdGhlIGN1cnJlbnQgZm9udC4KKyAgICBcc3BhY2Vza2lwID0gXGZvbnRkaW1lbjJcZm9udAorICAgICUKKyAgICAlIFN3aXRjaCB0byB0eXBld3JpdGVyLgorICAgIFx0dAorICAgICUKKyAgICAlIEJ1dCBgXCAnIHByb2R1Y2VzIHRoZSBsYXJnZSB0eXBld3JpdGVyIGludGVyd29yZCBzcGFjZS4KKyAgICBcZGVmXCB7e1xzcGFjZXNraXAgPSAwcHR7fSB9fSUKKyAgICAlCisgICAgJSBUdXJuIG9mZiBoeXBoZW5hdGlvbi4KKyAgICBcbm9oeXBoZW5hdGlvbgorICAgICUKKyAgICBccmF3YmFja3NsYXNoCisgICAgXHBsYWluZnJlbmNoc3BhY2luZworICAgICMxJQorICB9JQorICBcbnVsbAorfQorCislIFdlICptdXN0KiB0dXJuIG9uIGh5cGhlbmF0aW9uIGF0IGAtJyBhbmQgYF8nIGluIEBjb2RlLgorJSBPdGhlcndpc2UsIGl0IGlzIHRvbyBoYXJkIHRvIGF2b2lkIG92ZXJmdWxsIGhib3hlcworJSBpbiB0aGUgRW1hY3MgbWFudWFsLCB0aGUgTGlicmFyeSBtYW51YWwsIGV0Yy4KKworJSBVbmZvcnR1bmF0ZWx5LCBUZVggdXNlcyBvbmUgcGFyYW1ldGVyIChcaHlwaGVuY2hhcikgdG8gY29udHJvbAorJSBib3RoIGh5cGhlbmF0aW9uIGF0IC0gYW5kIGh5cGhlbmF0aW9uIHdpdGhpbiB3b3Jkcy4KKyUgV2UgbXVzdCB0aGVyZWZvcmUgdHVybiB0aGVtIGJvdGggb2ZmIChcdGNsb3NlIGRvZXMgdGhhdCkKKyUgYW5kIGFycmFuZ2UgZXhwbGljaXRseSB0byBoeXBoZW5hdGUgYXQgYSBkYXNoLgorJSAgLS0gcm1zLgoreworICBcY2F0Y29kZWBcLT1cYWN0aXZlCisgIFxjYXRjb2RlYFxfPVxhY3RpdmUKKyAgJQorICBcZ2xvYmFsXGRlZlxjb2Rle1xiZWdpbmdyb3VwCisgICAgXGNhdGNvZGVgXC09XGFjdGl2ZSAgXGNhdGNvZGVgXF89XGFjdGl2ZQorICAgIFxpZmFsbG93Y29kZWJyZWFrcworICAgICBcbGV0LVxjb2RlZGFzaAorICAgICBcbGV0X1xjb2RldW5kZXIKKyAgICBcZWxzZQorICAgICBcbGV0LVxyZWFsZGFzaAorICAgICBcbGV0X1xyZWFsdW5kZXIKKyAgICBcZmkKKyAgICBcY29kZXgKKyAgfQorfQorCitcZGVmXHJlYWxkYXNoey19CitcZGVmXGNvZGVkYXNoey1cZGlzY3JldGlvbmFyeXt9e317fX0KK1xkZWZcY29kZXVuZGVyeyUKKyAgJSB0aGlzIGlzIGFsbCBzbyBAbWF0aHtAY29kZXt2YXJfbmFtZX0rMX0gY2FuIHdvcmsuICBJbiBtYXRoIG1vZGUsIF8KKyAgJSBpcyAiYWN0aXZlIiAobWF0aGNvZGUiODAwMCkgYW5kIFxub3JtYWx1bmRlcnNjb3JlIChvciBcY2hhcjk1LCBldGMuKQorICAlIHdpbGwgdGhlcmVmb3JlIGV4cGFuZCB0aGUgYWN0aXZlIGRlZmluaXRpb24gb2YgXywgd2hpY2ggaXMgdXMKKyAgJSAoaW5zaWRlIEBjb2RlIHRoYXQgaXMpLCB0aGVyZWZvcmUgYW4gZW5kbGVzcyBsb29wLgorICBcaWZ1c2luZ3R0e1xpZm1tb2RlCisgICAgICAgICAgICAgICBcbWF0aGNoYXIiMDc1RiAlIGNsYXNzIDA9b3JkaW5hcnksIGZhbWlseSA3PXR0ZmFtLCBwb3MgMHg1Rj1fLgorICAgICAgICAgICAgIFxlbHNlXG5vcm1hbHVuZGVyc2NvcmUgXGZpCisgICAgICAgICAgICAgXGRpc2NyZXRpb25hcnl7fXt9e319JQorICAgICAgICAgICAge1xffSUKK30KK1xkZWZcY29kZXggIzF7XHRjbG9zZXsjMX1cZW5kZ3JvdXB9CisKKyUgQW4gYWRkaXRpb25hbCBjb21wbGljYXRpb246IHRoZSBhYm92ZSB3aWxsIGFsbG93IGJyZWFrcyBhZnRlciwgZS5nLiwKKyUgZWFjaCBvZiB0aGUgZm91ciB1bmRlcnNjb3JlcyBpbiBfX3R5cGVvZl9fLiAgVGhpcyBpcyB1bmRlc2lyYWJsZSBpbgorJSBzb21lIG1hbnVhbHMsIGVzcGVjaWFsbHkgaWYgdGhleSBkb24ndCBoYXZlIGxvbmcgaWRlbnRpZmllcnMgaW4KKyUgZ2VuZXJhbC4gIEBhbGxvd2NvZGVicmVha3MgcHJvdmlkZXMgYSB3YXkgdG8gY29udHJvbCB0aGlzLgorJSAKK1xuZXdpZlxpZmFsbG93Y29kZWJyZWFrcyAgXGFsbG93Y29kZWJyZWFrc3RydWUKKworXGRlZlxrZXl3b3JkdHJ1ZXt0cnVlfQorXGRlZlxrZXl3b3JkZmFsc2V7ZmFsc2V9CisKK1xwYXJzZWFyZ2RlZlxhbGxvd2NvZGVicmVha3N7JQorICBcZGVmXHR4aWFyZ3sjMX0lCisgIFxpZnhcdHhpYXJnXGtleXdvcmR0cnVlCisgICAgXGFsbG93Y29kZWJyZWFrc3RydWUKKyAgXGVsc2VcaWZ4XHR4aWFyZ1xrZXl3b3JkZmFsc2UKKyAgICBcYWxsb3djb2RlYnJlYWtzZmFsc2UKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGFsbG93Y29kZWJyZWFrcyBvcHRpb24gYFx0eGlhcmcnfSUKKyAgXGZpXGZpCit9CisKKyUgQGtiZCBpcyBsaWtlIEBjb2RlLCBleGNlcHQgdGhhdCBpZiB0aGUgYXJndW1lbnQgaXMganVzdCBvbmUgQGtleSBjb21tYW5kLAorJSB0aGVuIEBrYmQgaGFzIG5vIGVmZmVjdC4KKworJSBAa2JkaW5wdXRzdHlsZSAtLSBhcmcgaXMgYGRpc3RpbmN0JyAoQGtiZCB1c2VzIHNsYW50ZWQgdHR5IGZvbnQgYWx3YXlzKSwKKyUgICBgZXhhbXBsZScgKEBrYmQgdXNlcyB0dHNsIG9ubHkgaW5zaWRlIG9mIEBleGFtcGxlIGFuZCBmcmllbmRzKSwKKyUgICBvciBgY29kZScgKEBrYmQgdXNlcyBub3JtYWwgdHR5IGZvbnQgYWx3YXlzKS4KK1xwYXJzZWFyZ2RlZlxrYmRpbnB1dHN0eWxleyUKKyAgXGRlZlx0eGlhcmd7IzF9JQorICBcaWZ4XHR4aWFyZ1x3b3JkZGlzdGluY3QKKyAgICBcZ2RlZlxrYmRleGFtcGxlZm9udHtcdHRzbH1cZ2RlZlxrYmRmb250e1x0dHNsfSUKKyAgXGVsc2VcaWZ4XHR4aWFyZ1x3b3JkZXhhbXBsZQorICAgIFxnZGVmXGtiZGV4YW1wbGVmb250e1x0dHNsfVxnZGVmXGtiZGZvbnR7XHR0fSUKKyAgXGVsc2VcaWZ4XHR4aWFyZ1x3b3JkY29kZQorICAgIFxnZGVmXGtiZGV4YW1wbGVmb250e1x0dH1cZ2RlZlxrYmRmb250e1x0dH0lCisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBrYmRpbnB1dHN0eWxlIG9wdGlvbiBgXHR4aWFyZyd9JQorICBcZmlcZmlcZmkKK30KK1xkZWZcd29yZGRpc3RpbmN0e2Rpc3RpbmN0fQorXGRlZlx3b3JkZXhhbXBsZXtleGFtcGxlfQorXGRlZlx3b3JkY29kZXtjb2RlfQorCislIERlZmF1bHQgaXMgYGRpc3RpbmN0LicKK1xrYmRpbnB1dHN0eWxlIGRpc3RpbmN0CisKK1xkZWZceGtleXtca2V5fQorXGRlZlxrYmRmb28jMSMyIzNccGFye1xkZWZcb25leyMxfVxkZWZcdGhyZWV7IzN9XGRlZlx0aHJlZXh7Pz99JQorXGlmeFxvbmVceGtleVxpZnhcdGhyZWV4XHRocmVlIFxrZXl7IzJ9JQorXGVsc2V7XHRjbG9zZXtca2JkZm9udFxsb29rfX1cZmkKK1xlbHNle1x0Y2xvc2V7XGtiZGZvbnRcbG9va319XGZpfQorCislIEZvciBAaW5kaWNhdGV1cmwsIEBlbnYsIEBjb21tYW5kIHF1b3RlcyBzZWVtIHVubmVjZXNzYXJ5LCBzbyB1c2UgXGNvZGUuCitcbGV0XGluZGljYXRldXJsPVxjb2RlCitcbGV0XGVudj1cY29kZQorXGxldFxjb21tYW5kPVxjb2RlCisKKyUgQHVyZWYgKGFiYnJldmlhdGlvbiBmb3IgYHVybHJlZicpIHRha2VzIGFuIG9wdGlvbmFsIChjb21tYS1zZXBhcmF0ZWQpCislIHNlY29uZCBhcmd1bWVudCBzcGVjaWZ5aW5nIHRoZSB0ZXh0IHRvIGRpc3BsYXkgYW5kIGFuIG9wdGlvbmFsIHRoaXJkCislIGFyZyBhcyB0ZXh0IHRvIGRpc3BsYXkgaW5zdGVhZCBvZiAocmF0aGVyIHRoYW4gaW4gYWRkaXRpb24gdG8pIHRoZSB1cmwKKyUgaXRzZWxmLiAgRmlyc3QgKG1hbmRhdG9yeSkgYXJnIGlzIHRoZSB1cmwuICBQZXJoYXBzIGV2ZW50dWFsbHkgcHV0IGluCislIGEgaHlwZXJ0ZXggXHNwZWNpYWwgaGVyZS4KKyUKK1xkZWZcdXJlZiMxe1xkb3VyZWYgIzEsLCxcZmluaXNofQorXGRlZlxkb3VyZWYjMSwjMiwjMywjNFxmaW5pc2h7XGJlZ2luZ3JvdXAKKyAgXHVuc2Vwc3BhY2VzCisgIFxwZGZ1cmx7IzF9JQorICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzN9JQorICBcaWZkaW1cd2QwID4gMHB0CisgICAgXHVuaGJveDAgJSB0aGlyZCBhcmcgZ2l2ZW4sIHNob3cgb25seSB0aGF0CisgIFxlbHNlCisgICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfSUKKyAgICBcaWZkaW1cd2QwID4gMHB0CisgICAgICBcaWZwZGYKKyAgICAgICAgXHVuaGJveDAgICAgICAgICAgICAgJSBQREY6IDJuZCBhcmcgZ2l2ZW4sIHNob3cgb25seSBpdAorICAgICAgXGVsc2UKKyAgICAgICAgXHVuaGJveDBcIChcY29kZXsjMX0pJSBEVkk6IDJuZCBhcmcgZ2l2ZW4sIHNob3cgYm90aCBpdCBhbmQgdXJsCisgICAgICBcZmkKKyAgICBcZWxzZQorICAgICAgXGNvZGV7IzF9JSBvbmx5IHVybCBnaXZlbiwgc28gc2hvdyBpdAorICAgIFxmaQorICBcZmkKKyAgXGVuZGxpbmsKK1xlbmRncm91cH0KKworJSBAdXJsIHN5bm9ueW0gZm9yIEB1cmVmLCBzaW5jZSB0aGF0J3MgaG93IGV2ZXJ5b25lIHVzZXMgaXQuCislCitcbGV0XHVybD1cdXJlZgorCislIHJtcyBkb2VzIG5vdCBsaWtlIGFuZ2xlIGJyYWNrZXRzIC0ta2FybCwgMTdtYXk5Ny4KKyUgU28gbm93IEBlbWFpbCBpcyBqdXN0IGxpa2UgQHVyZWYsIHVubGVzcyB3ZSBhcmUgcGRmLgorJQorJVxkZWZcZW1haWwjMXtcYW5nbGVsZWZ0e1x0dCAjMX1cYW5nbGVyaWdodH0KK1xpZnBkZgorICBcZGVmXGVtYWlsIzF7XGRvZW1haWwjMSwsXGZpbmlzaH0KKyAgXGRlZlxkb2VtYWlsIzEsIzIsIzNcZmluaXNoe1xiZWdpbmdyb3VwCisgICAgXHVuc2Vwc3BhY2VzCisgICAgXHBkZnVybHttYWlsdG86IzF9JQorICAgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn0lCisgICAgXGlmZGltXHdkMD4wcHRcdW5oYm94MFxlbHNlXGNvZGV7IzF9XGZpCisgICAgXGVuZGxpbmsKKyAgXGVuZGdyb3VwfQorXGVsc2UKKyAgXGxldFxlbWFpbD1cdXJlZgorXGZpCisKKyUgQ2hlY2sgaWYgd2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIHR5cGV3cml0ZXIgZm9udC4gIFNpbmNlIGFsbCB0aGUKKyUgQ29tcHV0ZXIgTW9kZXJuIHR5cGV3cml0ZXIgZm9udHMgaGF2ZSB6ZXJvIGludGVyd29yZCBzdHJldGNoIChhbmQKKyUgc2hyaW5rKSwgYW5kIGl0IGlzIHJlYXNvbmFibGUgdG8gZXhwZWN0IGFsbCB0eXBld3JpdGVyIGZvbnRzIHRvIGhhdmUKKyUgdGhpcyBwcm9wZXJ0eSwgd2UgY2FuIGNoZWNrIHRoYXQgZm9udCBwYXJhbWV0ZXIuCislCitcZGVmXGlmbW9ub3NwYWNle1xpZmRpbVxmb250ZGltZW4zXGZvbnQ9MHB0IH0KKworJSBUeXBlc2V0IGEgZGltZW5zaW9uLCBlLmcuLCBgaW4nIG9yIGBwdCcuICBUaGUgb25seSByZWFzb24gZm9yIHRoZQorJSBhcmd1bWVudCBpcyB0byBtYWtlIHRoZSBpbnB1dCBsb29rIHJpZ2h0OiBAZG1ue3B0fSBpbnN0ZWFkIG9mIEBkbW57fXB0LgorJQorXGRlZlxkbW4jMXtcdGhpbnNwYWNlICMxfQorCitcZGVmXGtiZCMxe1xkZWZcbG9va3sjMX1cZXhwYW5kYWZ0ZXJca2JkZm9vXGxvb2s/P1xwYXJ9CisKKyUgQGwgd2FzIG5ldmVyIGRvY3VtZW50ZWQgdG8gbWVhbiBgYHN3aXRjaCB0byB0aGUgTGlzcCBmb250JycsCislIGFuZCBpdCBpcyBub3QgdXNlZCBhcyBzdWNoIGluIGFueSBtYW51YWwgSSBjYW4gZmluZC4gIFdlIG5lZWQgaXQgZm9yCislIFBvbGlzaCBzdXBwcmVzc2VkLWwuICAtLWthcmwsIDIyc2VwOTYuCislXGRlZlxsIzF7e1xsaSAjMX1cbnVsbH0KKworJSBFeHBsaWNpdCBmb250IGNoYW5nZXM6IEByLCBAc2MsIHVuZG9jdW1lbnRlZCBAaWkuCitcZGVmXHIjMXt7XHJtICMxfX0gICAgICAgICAgICAgICUgcm9tYW4gZm9udAorXGRlZlxzYyMxe3tcc21hbGxjYXBzIzF9fSAgICAgICAlIHNtYWxsY2FwcyBmb250CitcZGVmXGlpIzF7e1xpdCAjMX19ICAgICAgICAgICAgICUgaXRhbGljIGZvbnQKKworJSBAYWNyb255bSBmb3IgIkZCSSIsICJOQVRPIiwgYW5kIHRoZSBsaWtlLgorJSBXZSBwcmludCB0aGlzIG9uZSBwb2ludCBzaXplIHNtYWxsZXIsIHNpbmNlIGl0J3MgaW50ZW5kZWQgZm9yCislIGFsbC11cHBlcmNhc2UuCislIAorXGRlZlxhY3JvbnltIzF7XGRvYWNyb255bSAjMSwsXGZpbmlzaH0KK1xkZWZcZG9hY3JvbnltIzEsIzIsIzNcZmluaXNoeyUKKyAge1xzZWxlY3Rmb250c1xsc2l6ZSAjMX0lCisgIFxkZWZcdGVtcHsjMn0lCisgIFxpZnhcdGVtcFxlbXB0eSBcZWxzZQorICAgIFxzcGFjZSAoe1x1bnNlcHNwYWNlcyBcaWdub3Jlc3BhY2VzIFx0ZW1wIFx1bnNraXB9KSUKKyAgXGZpCit9CisKKyUgQGFiYnIgZm9yICJDb21wdXQuIEouIiBhbmQgdGhlIGxpa2UuCislIE5vIGZvbnQgY2hhbmdlLCBidXQgZG9uJ3QgZG8gZW5kLW9mLXNlbnRlbmNlIHNwYWNpbmcuCislIAorXGRlZlxhYmJyIzF7XGRvYWJiciAjMSwsXGZpbmlzaH0KK1xkZWZcZG9hYmJyIzEsIzIsIzNcZmluaXNoeyUKKyAge1xwbGFpbmZyZW5jaHNwYWNpbmcgIzF9JQorICBcZGVmXHRlbXB7IzJ9JQorICBcaWZ4XHRlbXBcZW1wdHkgXGVsc2UKKyAgICBcc3BhY2UgKHtcdW5zZXBzcGFjZXMgXGlnbm9yZXNwYWNlcyBcdGVtcCBcdW5za2lwfSklCisgIFxmaQorfQorCislIEBwb3VuZHN7fSBpcyBhIHN0ZXJsaW5nIHNpZ24sIHdoaWNoIEtudXRoIHB1dCBpbiB0aGUgQ00gaXRhbGljIGZvbnQuCislCitcZGVmXHBvdW5kc3t7XGl0XCR9fQorCislIEBldXJve30gY29tZXMgZnJvbSBhIHNlcGFyYXRlIGZvbnQsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzdHlsZS4KKyUgV2UgdXNlIHRoZSBmcmVlIGZleW0qIGZvbnRzIGZyb20gdGhlIGV1cm9zeW0gcGFja2FnZSBieSBIZW5yaWsKKyUgVGhlaWxpbmcsIHdoaWNoIHN1cHBvcnQgcmVndWxhciwgc2xhbnRlZCwgYm9sZCBhbmQgYm9sZCBzbGFudGVkIChhbmQKKyUgIm91dGxpbmVkIiAoYmxhY2tib2FyZCBib2FyZCwgc29ydCBvZikgdmVyc2lvbnMsIHdoaWNoIHdlIGRvbid0IG5lZWQpLgorJSBJdCBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LmN0YW4ub3JnL3RleC1hcmNoaXZlL2ZvbnRzL2V1cm9zeW0uCislIAorJSBBbHRob3VnaCBvbmx5IHJlZ3VsYXIgaXMgdGhlIHRydWx5IG9mZmljaWFsIEV1cm8gc3ltYm9sLCB3ZSBpZ25vcmUKKyUgdGhhdC4gIFRoZSBFdXJvIGlzIGRlc2lnbmVkIHRvIGJlIHNsaWdodGx5IHRhbGxlciB0aGFuIHRoZSByZWd1bGFyCislIGZvbnQgaGVpZ2h0LgorJSAKKyUgZmV5bXIgLSByZWd1bGFyCislIGZleW1vIC0gc2xhbnRlZAorJSBmZXliciAtIGJvbGQKKyUgZmV5Ym8gLSBib2xkIHNsYW50ZWQKKyUgCislIFRoZXJlIGlzIG5vIGdvb2QgKGZyZWUpIHR5cGV3cml0ZXIgdmVyc2lvbiwgdG8gbXkga25vd2xlZGdlLgorJSBBIGZleW1yMTAgZXVybyBpcyB+Ny4zcHQgd2lkZSwgd2hpbGUgYSBub3JtYWwgY210dDEwIGNoYXIgaXMgfjUuMjVwdCB3aWRlLgorJSBIbW0uCislIAorJSBBbHNvIGRvZXNuJ3Qgd29yayBpbiBtYXRoLiAgRG8gd2UgbmVlZCB0byBkbyBtYXRoIHdpdGggZXVybyBzeW1ib2xzPworJSBIb3BlIG5vdC4KKyUgCislIAorXGRlZlxldXJve3tcZXVyb2ZvbnQgZX19CitcZGVmXGV1cm9mb250eyUKKyAgJSBXZSBzZXQgdGhlIGZvbnQgYXQgZWFjaCBjb21tYW5kLCByYXRoZXIgdGhhbiBwcmVkZWZpbmluZyBpdCBpbgorICAlIFx0ZXh0Zm9udHMgYW5kIHRoZSBvdGhlciBmb250LXN3aXRjaGluZyBjb21tYW5kcywgc28gdGhhdAorICAlIGluc3RhbGxhdGlvbnMgd2hpY2ggbmV2ZXIgbmVlZCB0aGUgc3ltYm9sIGRvbid0IGhhdmUgdG8gaGF2ZSB0aGUKKyAgJSBmb250IGluc3RhbGxlZC4KKyAgJSAKKyAgJSBUaGVyZSBpcyBvbmx5IG9uZSBkZXNpZ25lZCBzaXplIChub21pbmFsIDEwcHQpLCBzbyB3ZSBhbHdheXMgc2NhbGUKKyAgJSB0aGF0IHRvIHRoZSBjdXJyZW50IG5vbWluYWwgc2l6ZS4KKyAgJSAKKyAgJSBCeSB0aGUgd2F5LCBzaW1wbHkgdXNpbmcgImF0IDFlbSIgd29ya3MgZm9yIGNtcjEwIGFuZCB0aGUgbGlrZSwgYnV0CisgICUgZG9lcyBub3Qgd29yayBmb3IgY21ieDEwIGFuZCBvdGhlciBleHRlbmRlZC9zaHJ1bmtlbiBmb250cy4KKyAgJSAKKyAgXGRlZlxldXJvc2l6ZXtcY3NuYW1lXGN1cmZvbnRzaXplIG5vbWluYWxzaXplXGVuZGNzbmFtZX0lCisgICUKKyAgXGlmeFxjdXJmb250c3R5bGVcYmZzdHlsZW5hbWUgCisgICAgJSBib2xkOgorICAgIFxmb250XHRoaXNldXJvZm9udCA9IFxpZnVzaW5naXR7ZmV5Ym8xMH17ZmV5YnIxMH0gYXQgXGV1cm9zaXplCisgIFxlbHNlIAorICAgICUgcmVndWxhcjoKKyAgICBcZm9udFx0aGlzZXVyb2ZvbnQgPSBcaWZ1c2luZ2l0e2ZleW1vMTB9e2ZleW1yMTB9IGF0IFxldXJvc2l6ZQorICBcZmkKKyAgXHRoaXNldXJvZm9udAorfQorCislIEByZWdpc3RlcmVkc3ltYm9sIC0gUiBpbiBhIGNpcmNsZS4gIFRoZSBmb250IGZvciB0aGUgUiBzaG91bGQgcmVhbGx5CislIGJlIHNtYWxsZXIgeWV0LCBidXQgbGxsc2l6ZSBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8gZm9yIG5vdy4KKyUgQWRhcHRlZCBmcm9tIHRoZSBwbGFpbi50ZXggZGVmaW5pdGlvbiBvZiBcY29weXJpZ2h0LgorJQorXGRlZlxyZWdpc3RlcmVkc3ltYm9seyUKKyAgJF57e1xvb2FsaWdue1xoZmlsXHJhaXNlLjA3ZXhcaGJveHtcc2VsZWN0Zm9udHNcbGxsc2l6ZSBSfSUKKyAgICAgICAgICAgICAgIFxoZmlsXGNyY3JcT3JifX0lCisgICAgfSQlCit9CisKKyUgTGF1cmVudCBTaWViZW5tYW5uIHJlcG9ydHMgXE9yYiB1bmRlZmluZWQgd2l0aDoKKyUgIFRleHR1cmVzIDEuNy43IChwcmVsb2FkZWQgZm9ybWF0PXBsYWluIDkzLjEwLjE0KSAgKDY4SykgIDE2IEFQUiAyMDA0IDAyOjM4CislIHNvIHdlJ2xsIGRlZmluZSBpdCBpZiBuZWNlc3NhcnkuCislIAorXGlmeFxPcmJcdW5kZWZpbmVkCitcZGVmXE9yYntcbWF0aGhleGJveDIwRH0KK1xmaQorCisKK1xtZXNzYWdle3BhZ2UgaGVhZGluZ3MsfQorCitcbmV3c2tpcFx0aXRsZXBhZ2V0b3BnbHVlIFx0aXRsZXBhZ2V0b3BnbHVlID0gMS41aW4KK1xuZXdza2lwXHRpdGxlcGFnZWJvdHRvbWdsdWUgXHRpdGxlcGFnZWJvdHRvbWdsdWUgPSAycGMKKworJSBGaXJzdCB0aGUgdGl0bGUgcGFnZS4gIE11c3QgZG8gQHNldHRpdGxlIGJlZm9yZSBAdGl0bGVwYWdlLgorXG5ld2lmXGlmc2VlbmF1dGhvcgorXG5ld2lmXGlmZmluaXNoZWR0aXRsZXBhZ2UKKworJSBEbyBhbiBpbXBsaWNpdCBAY29udGVudHMgb3IgQHNob3J0Y29udGVudHMgYWZ0ZXIgQGVuZCB0aXRsZXBhZ2UgaWYgdGhlCislIHVzZXIgc2F5cyBAc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZSBvciBAc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlLgorJQorXG5ld2lmXGlmc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorIFxsZXRcc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZSA9IFxzZXRjb250ZW50c2FmdGVydGl0bGVwYWdldHJ1ZQorXG5ld2lmXGlmc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlCisgXGxldFxzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UgPSBcc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdldHJ1ZQorCitccGFyc2VhcmdkZWZcc2hvcnR0aXRsZXBhZ2V7XGJlZ2luZ3JvdXBcaGJveHt9XHZza2lwIDEuNWluIFxjaGFwcm0gXGNlbnRlcmxpbmV7IzF9JQorICAgICAgICBcZW5kZ3JvdXBccGFnZVxoYm94e31ccGFnZX0KKworXGVudmRlZlx0aXRsZXBhZ2V7JQorICAlIE9wZW4gb25lIGV4dHJhIGdyb3VwLCBhcyB3ZSB3YW50IHRvIGNsb3NlIGl0IGluIHRoZSBtaWRkbGUgb2YgXEV0aXRsZXBhZ2UuCisgIFxiZWdpbmdyb3VwCisgICAgXHBhcmluZGVudD0wcHQgXHRleHRmb250cworICAgICUgTGVhdmUgc29tZSBzcGFjZSBhdCB0aGUgdmVyeSB0b3Agb2YgdGhlIHBhZ2UuCisgICAgXHZnbHVlXHRpdGxlcGFnZXRvcGdsdWUKKyAgICAlIE5vIHJ1bGUgYXQgcGFnZSBib3R0b20gdW5sZXNzIHdlIHByaW50IG9uZSBhdCB0aGUgdG9wIHdpdGggQHRpdGxlLgorICAgIFxmaW5pc2hlZHRpdGxlcGFnZXRydWUKKyAgICAlCisgICAgJSBNb3N0IHRpdGxlIGBgcGFnZXMnJyBhcmUgYWN0dWFsbHkgdHdvIHBhZ2VzIGxvbmcsIHdpdGggc3BhY2UKKyAgICAlIGF0IHRoZSB0b3Agb2YgdGhlIHNlY29uZC4gIFdlIGRvbid0IHdhbnQgdGhlIHJhZ2dlZCBsZWZ0IG9uIHRoZSBzZWNvbmQuCisgICAgXGxldFxvbGRwYWdlID0gXHBhZ2UKKyAgICBcZGVmXHBhZ2V7JQorICAgICAgXGlmZmluaXNoZWR0aXRsZXBhZ2VcZWxzZQorCSBcZmluaXNodGl0bGVwYWdlCisgICAgICBcZmkKKyAgICAgIFxsZXRccGFnZSA9IFxvbGRwYWdlCisgICAgICBccGFnZQorICAgICAgXG51bGwKKyAgICB9JQorfQorCitcZGVmXEV0aXRsZXBhZ2V7JQorICAgIFxpZmZpbmlzaGVkdGl0bGVwYWdlXGVsc2UKKwlcZmluaXNodGl0bGVwYWdlCisgICAgXGZpCisgICAgJSBJdCBpcyBpbXBvcnRhbnQgdG8gZG8gdGhlIHBhZ2UgYnJlYWsgYmVmb3JlIGVuZGluZyB0aGUgZ3JvdXAsCisgICAgJSBiZWNhdXNlIHRoZSBoZWFkbGluZSBhbmQgZm9vdGxpbmUgYXJlIG9ubHkgZW1wdHkgaW5zaWRlIHRoZSBncm91cC4KKyAgICAlIElmIHdlIHVzZSB0aGUgbmV3IGRlZmluaXRpb24gb2YgXHBhZ2UsIHdlIGFsd2F5cyBnZXQgYSBibGFuayBwYWdlCisgICAgJSBhZnRlciB0aGUgdGl0bGUgcGFnZSwgd2hpY2ggd2UgY2VydGFpbmx5IGRvbid0IHdhbnQuCisgICAgXG9sZHBhZ2UKKyAgXGVuZGdyb3VwCisgICUKKyAgJSBOZWVkIHRoaXMgYmVmb3JlIHRoZSBcLi4uYWZ0ZXJ0aXRsZXBhZ2UgY2hlY2tzIHNvIHRoYXQgaWYgdGhleSBhcmUKKyAgJSBpbiBlZmZlY3QgdGhlIHRvYyBwYWdlcyB3aWxsIGNvbWUgb3V0IHdpdGggcGFnZSBudW1iZXJzLgorICBcSEVBRElOR1NvbgorICAlCisgICUgSWYgdGhleSB3YW50IHNob3J0LCB0aGV5IGNlcnRhaW5seSB3YW50IGxvbmcgdG9vLgorICBcaWZzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyAgICBcc2hvcnRjb250ZW50cworICAgIFxjb250ZW50cworICAgIFxnbG9iYWxcbGV0XHNob3J0Y29udGVudHMgPSBccmVsYXgKKyAgICBcZ2xvYmFsXGxldFxjb250ZW50cyA9IFxyZWxheAorICBcZmkKKyAgJQorICBcaWZzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlCisgICAgXGNvbnRlbnRzCisgICAgXGdsb2JhbFxsZXRcY29udGVudHMgPSBccmVsYXgKKyAgICBcZ2xvYmFsXGxldFxzaG9ydGNvbnRlbnRzID0gXHJlbGF4CisgIFxmaQorfQorCitcZGVmXGZpbmlzaHRpdGxlcGFnZXslCisgIFx2c2tpcDRwdCBcaHJ1bGUgaGVpZ2h0IDJwdCB3aWR0aCBcaHNpemUKKyAgXHZza2lwXHRpdGxlcGFnZWJvdHRvbWdsdWUKKyAgXGZpbmlzaGVkdGl0bGVwYWdldHJ1ZQorfQorCislJSUgTWFjcm9zIHRvIGJlIHVzZWQgd2l0aGluIEB0aXRsZXBhZ2U6CisKK1xsZXRcc3VidGl0bGVybT1cdGVucm0KK1xkZWZcc3VidGl0bGVmb250e1xzdWJ0aXRsZXJtIFxub3JtYWxiYXNlbGluZXNraXAgPSAxM3B0IFxub3JtYWxiYXNlbGluZXN9CisKK1xkZWZcYXV0aG9yZm9udHtcYXV0aG9ycm0gXG5vcm1hbGJhc2VsaW5lc2tpcCA9IDE2cHQgXG5vcm1hbGJhc2VsaW5lcworCQlcbGV0XHR0PVxhdXRob3J0dH0KKworXHBhcnNlYXJnZGVmXHRpdGxleyUKKyAgXGNoZWNrZW52XHRpdGxlcGFnZQorICBcbGVmdGxpbmV7XHRpdGxlZm9udHNccm0gIzF9CisgICUgcHJpbnQgYSBydWxlIGF0IHRoZSBwYWdlIGJvdHRvbSBhbHNvLgorICBcZmluaXNoZWR0aXRsZXBhZ2VmYWxzZQorICBcdnNraXA0cHQgXGhydWxlIGhlaWdodCA0cHQgd2lkdGggXGhzaXplIFx2c2tpcDRwdAorfQorCitccGFyc2VhcmdkZWZcc3VidGl0bGV7JQorICBcY2hlY2tlbnZcdGl0bGVwYWdlCisgIHtcc3VidGl0bGVmb250IFxyaWdodGxpbmV7IzF9fSUKK30KKworJSBAYXV0aG9yIHNob3VsZCBjb21lIGxhc3QsIGJ1dCBtYXkgY29tZSBtYW55IHRpbWVzLgorJSBJdCBjYW4gYWxzbyBiZSB1c2VkIGluc2lkZSBAcXVvdGF0aW9uLgorJQorXHBhcnNlYXJnZGVmXGF1dGhvcnslCisgIFxkZWZcdGVtcHtccXVvdGF0aW9ufSUKKyAgXGlmeFx0aGlzZW52XHRlbXAKKyAgICBcZGVmXHF1b3RhdGlvbmF1dGhvcnsjMX0lIHByaW50ZWQgaW4gXEVxdW90YXRpb24uCisgIFxlbHNlCisgICAgXGNoZWNrZW52XHRpdGxlcGFnZQorICAgIFxpZnNlZW5hdXRob3JcZWxzZSBcdnNraXAgMHB0IHBsdXMgMWZpbGxsIFxzZWVuYXV0aG9ydHJ1ZSBcZmkKKyAgICB7XGF1dGhvcmZvbnQgXGxlZnRsaW5leyMxfX0lCisgIFxmaQorfQorCisKKyUlJSBTZXQgdXAgcGFnZSBoZWFkaW5ncyBhbmQgZm9vdGluZ3MuCisKK1xsZXRcdGhpc3BhZ2U9XGZvbGlvCisKK1xuZXd0b2tzXGV2ZW5oZWFkbGluZSAgICAlIGhlYWRsaW5lIG9uIGV2ZW4gcGFnZXMKK1xuZXd0b2tzXG9kZGhlYWRsaW5lICAgICAlIGhlYWRsaW5lIG9uIG9kZCBwYWdlcworXG5ld3Rva3NcZXZlbmZvb3RsaW5lICAgICUgZm9vdGxpbmUgb24gZXZlbiBwYWdlcworXG5ld3Rva3Ncb2RkZm9vdGxpbmUgICAgICUgZm9vdGxpbmUgb24gb2RkIHBhZ2VzCisKKyUgTm93IG1ha2UgVGVYIHVzZSB0aG9zZSB2YXJpYWJsZXMKK1xoZWFkbGluZT17e1x0ZXh0Zm9udHNccm0gXGlmb2RkXHBhZ2VubyBcdGhlXG9kZGhlYWRsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXGVsc2UgXHRoZVxldmVuaGVhZGxpbmUgXGZpfX0KK1xmb290bGluZT17e1x0ZXh0Zm9udHNccm0gXGlmb2RkXHBhZ2VubyBcdGhlXG9kZGZvb3RsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXGVsc2UgXHRoZVxldmVuZm9vdGxpbmUgXGZpfVxIRUFESU5HU2hvb2t9CitcbGV0XEhFQURJTkdTaG9vaz1ccmVsYXgKKworJSBDb21tYW5kcyB0byBzZXQgdGhvc2UgdmFyaWFibGVzLgorJSBGb3IgZXhhbXBsZSwgdGhpcyBpcyB3aGF0ICBAaGVhZGluZ3Mgb24gIGRvZXMKKyUgQGV2ZW5oZWFkaW5nIEB0aGlzdGl0bGV8QHRoaXNwYWdlfEB0aGlzY2hhcHRlcgorJSBAb2RkaGVhZGluZyBAdGhpc2NoYXB0ZXJ8QHRoaXNwYWdlfEB0aGlzdGl0bGUKKyUgQGV2ZW5mb290aW5nIEB0aGlzZmlsZXx8CislIEBvZGRmb290aW5nIHx8QHRoaXNmaWxlCisKKworXGRlZlxldmVuaGVhZGluZ3tccGFyc2VhcmdcZXZlbmhlYWRpbmd4eHh9CitcZGVmXGV2ZW5oZWFkaW5neHh4ICMxe1xldmVuaGVhZGluZ3l5eSAjMVx8XHxcfFx8XGZpbmlzaH0KK1xkZWZcZXZlbmhlYWRpbmd5eXkgIzFcfCMyXHwjM1x8IzRcZmluaXNoeyUKK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtccmxhcHtcY2VudGVybGluZXsjMn19XGxpbmV7IzFcaGZpbCMzfX19CisKK1xkZWZcb2RkaGVhZGluZ3tccGFyc2Vhcmdcb2RkaGVhZGluZ3h4eH0KK1xkZWZcb2RkaGVhZGluZ3h4eCAjMXtcb2RkaGVhZGluZ3l5eSAjMVx8XHxcfFx8XGZpbmlzaH0KK1xkZWZcb2RkaGVhZGluZ3l5eSAjMVx8IzJcfCMzXHwjNFxmaW5pc2h7JQorXGdsb2JhbFxvZGRoZWFkbGluZT17XHJsYXB7XGNlbnRlcmxpbmV7IzJ9fVxsaW5leyMxXGhmaWwjM319fQorCitccGFyc2VhcmdkZWZcZXZlcnloZWFkaW5ne1xvZGRoZWFkaW5neHh4eyMxfVxldmVuaGVhZGluZ3h4eHsjMX19JQorCitcZGVmXGV2ZW5mb290aW5ne1xwYXJzZWFyZ1xldmVuZm9vdGluZ3h4eH0KK1xkZWZcZXZlbmZvb3Rpbmd4eHggIzF7XGV2ZW5mb290aW5neXl5ICMxXHxcfFx8XHxcZmluaXNofQorXGRlZlxldmVuZm9vdGluZ3l5eSAjMVx8IzJcfCMzXHwjNFxmaW5pc2h7JQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xybGFwe1xjZW50ZXJsaW5leyMyfX1cbGluZXsjMVxoZmlsIzN9fX0KKworXGRlZlxvZGRmb290aW5ne1xwYXJzZWFyZ1xvZGRmb290aW5neHh4fQorXGRlZlxvZGRmb290aW5neHh4ICMxe1xvZGRmb290aW5neXl5ICMxXHxcfFx8XHxcZmluaXNofQorXGRlZlxvZGRmb290aW5neXl5ICMxXHwjMlx8IzNcfCM0XGZpbmlzaHslCisgIFxnbG9iYWxcb2RkZm9vdGxpbmUgPSB7XHJsYXB7XGNlbnRlcmxpbmV7IzJ9fVxsaW5leyMxXGhmaWwjM319JQorICAlCisgICUgTGVhdmUgc29tZSBzcGFjZSBmb3IgdGhlIGZvb3RsaW5lLiAgSG9wZWZ1bGx5IG9rIHRvIGFzc3VtZQorICAlIEBldmVuZm9vdGluZyB3aWxsIG5vdCBiZSB1c2VkIGJ5IGl0c2VsZi4KKyAgXGdsb2JhbFxhZHZhbmNlXHBhZ2VoZWlnaHQgYnkgLVxiYXNlbGluZXNraXAKKyAgXGdsb2JhbFxhZHZhbmNlXHZzaXplIGJ5IC1cYmFzZWxpbmVza2lwCit9CisKK1xwYXJzZWFyZ2RlZlxldmVyeWZvb3Rpbmd7XG9kZGZvb3Rpbmd4eHh7IzF9XGV2ZW5mb290aW5neHh4eyMxfX0KKworCislIEBoZWFkaW5ncyBkb3VibGUgICAgICB0dXJucyBoZWFkaW5ncyBvbiBmb3IgZG91YmxlLXNpZGVkIHByaW50aW5nLgorJSBAaGVhZGluZ3Mgc2luZ2xlICAgICAgdHVybnMgaGVhZGluZ3Mgb24gZm9yIHNpbmdsZS1zaWRlZCBwcmludGluZy4KKyUgQGhlYWRpbmdzIG9mZiAgICAgICAgIHR1cm5zIHRoZW0gb2ZmLgorJSBAaGVhZGluZ3Mgb24gICAgICAgICAgc2FtZSBhcyBAaGVhZGluZ3MgZG91YmxlLCByZXRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eS4KKyUgQGhlYWRpbmdzIGFmdGVyICAgICAgIHR1cm5zIG9uIGRvdWJsZS1zaWRlZCBoZWFkaW5ncyBhZnRlciB0aGlzIHBhZ2UuCislIEBoZWFkaW5ncyBkb3VibGVhZnRlciB0dXJucyBvbiBkb3VibGUtc2lkZWQgaGVhZGluZ3MgYWZ0ZXIgdGhpcyBwYWdlLgorJSBAaGVhZGluZ3Mgc2luZ2xlYWZ0ZXIgdHVybnMgb24gc2luZ2xlLXNpZGVkIGhlYWRpbmdzIGFmdGVyIHRoaXMgcGFnZS4KKyUgQnkgZGVmYXVsdCwgdGhleSBhcmUgb2ZmIGF0IHRoZSBzdGFydCBvZiBhIGRvY3VtZW50LAorJSBhbmQgdHVybmVkIGBvbicgYWZ0ZXIgQGVuZCB0aXRsZXBhZ2UuCisKK1xkZWZcaGVhZGluZ3MgIzEge1xjc25hbWUgSEVBRElOR1MjMVxlbmRjc25hbWV9CisKK1xkZWZcSEVBRElOR1NvZmZ7JQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xoZmlsfSBcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcaGZpbH0gXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9fQorXEhFQURJTkdTb2ZmCislIFdoZW4gd2UgdHVybiBoZWFkaW5ncyBvbiwgc2V0IHRoZSBwYWdlIG51bWJlciB0byAxLgorJSBGb3IgZG91YmxlLXNpZGVkIHByaW50aW5nLCBwdXQgY3VycmVudCBmaWxlIG5hbWUgaW4gbG93ZXIgbGVmdCBjb3JuZXIsCislIGNoYXB0ZXIgbmFtZSBvbiBpbnNpZGUgdG9wIG9mIHJpZ2h0IGhhbmQgcGFnZXMsIGRvY3VtZW50CislIHRpdGxlIG9uIGluc2lkZSB0b3Agb2YgbGVmdCBoYW5kIHBhZ2VzLCBhbmQgcGFnZSBudW1iZXJzIG9uIG91dHNpZGUgdG9wCislIGVkZ2Ugb2YgYWxsIHBhZ2VzLgorXGRlZlxIRUFESU5HU2RvdWJsZXslCitcZ2xvYmFsXHBhZ2Vubz0xCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcbGluZXtcZm9saW9caGZpbFx0aGlzdGl0bGV9fQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBvZGRwYWdlCit9CitcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKKworJSBGb3Igc2luZ2xlLXNpZGVkIHByaW50aW5nLCBjaGFwdGVyIHRpdGxlIGdvZXMgYWNyb3NzIHRvcCBsZWZ0IG9mIHBhZ2UsCislIHBhZ2UgbnVtYmVyIG9uIHRvcCByaWdodC4KK1xkZWZcSEVBRElOR1NzaW5nbGV7JQorXGdsb2JhbFxwYWdlbm89MQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9CitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorfQorXGRlZlxIRUFESU5HU29ue1xIRUFESU5HU2RvdWJsZX0KKworXGRlZlxIRUFESU5HU2FmdGVye1xsZXRcSEVBRElOR1Nob29rPVxIRUFESU5HU2RvdWJsZXh9CitcbGV0XEhFQURJTkdTZG91YmxlYWZ0ZXI9XEhFQURJTkdTYWZ0ZXIKK1xkZWZcSEVBRElOR1Nkb3VibGV4eyUKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1xmb2xpb1xoZmlsXHRoaXN0aXRsZX19CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcG9kZHBhZ2UKK30KKworXGRlZlxIRUFESU5HU3NpbmdsZWFmdGVye1xsZXRcSEVBRElOR1Nob29rPVxIRUFESU5HU3NpbmdsZXh9CitcZGVmXEhFQURJTkdTc2luZ2xleHslCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCit9CisKKyUgU3Vicm91dGluZXMgdXNlZCBpbiBnZW5lcmF0aW5nIGhlYWRpbmdzCislIFRoaXMgcHJvZHVjZXMgRGF5IE1vbnRoIFllYXIgc3R5bGUgb2Ygb3V0cHV0LgorJSBPbmx5IGRlZmluZSBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLCBpbiBjYXNlIGEgdHhpLT8/LnRleCBmaWxlIGhhcyBzZXQKKyUgdXAgYSBkaWZmZXJlbnQgZm9ybWF0IChlLmcuLCB0eGktY3MudGV4IGRvZXMgdGhpcykuCitcaWZ4XHRvZGF5XHVuZGVmaW5lZAorXGRlZlx0b2RheXslCisgIFxudW1iZXJcZGF5XHNwYWNlCisgIFxpZmNhc2VcbW9udGgKKyAgXG9yXHB1dHdvcmRNSmFuXG9yXHB1dHdvcmRNRmViXG9yXHB1dHdvcmRNTWFyXG9yXHB1dHdvcmRNQXByCisgIFxvclxwdXR3b3JkTU1heVxvclxwdXR3b3JkTUp1blxvclxwdXR3b3JkTUp1bFxvclxwdXR3b3JkTUF1ZworICBcb3JccHV0d29yZE1TZXBcb3JccHV0d29yZE1PY3Rcb3JccHV0d29yZE1Ob3Zcb3JccHV0d29yZE1EZWMKKyAgXGZpCisgIFxzcGFjZVxudW1iZXJceWVhcn0KK1xmaQorCislIEBzZXR0aXRsZSBsaW5lLi4uICBzcGVjaWZpZXMgdGhlIHRpdGxlIG9mIHRoZSBkb2N1bWVudCwgZm9yIGhlYWRpbmdzLgorJSBJdCBnZW5lcmF0ZXMgbm8gb3V0cHV0IG9mIGl0cyBvd24uCitcZGVmXHRoaXN0aXRsZXtccHV0d29yZE5vVGl0bGV9CitcZGVmXHNldHRpdGxle1xwYXJzZWFyZ3tcZ2RlZlx0aGlzdGl0bGV9fQorCisKK1xtZXNzYWdle3RhYmxlcyx9CislIFRhYmxlcyAtLSBAdGFibGUsIEBmdGFibGUsIEB2dGFibGUsIEBpdGVtKHgpLgorCislIGRlZmF1bHQgaW5kZW50YXRpb24gb2YgdGFibGUgdGV4dAorXG5ld2RpbWVuXHRhYmxlaW5kZW50IFx0YWJsZWluZGVudD0uOGluCislIGRlZmF1bHQgaW5kZW50YXRpb24gb2YgQGl0ZW1pemUgYW5kIEBlbnVtZXJhdGUgdGV4dAorXG5ld2RpbWVuXGl0ZW1pbmRlbnQgIFxpdGVtaW5kZW50PS4zaW4KKyUgbWFyZ2luIGJldHdlZW4gZW5kIG9mIHRhYmxlIGl0ZW0gYW5kIHN0YXJ0IG9mIHRhYmxlIHRleHQuCitcbmV3ZGltZW5caXRlbW1hcmdpbiAgXGl0ZW1tYXJnaW49LjFpbgorCislIHVzZWQgaW50ZXJuYWxseSBmb3IgXGl0ZW1pbmRlbnQgbWludXMgXGl0ZW1tYXJnaW4KK1xuZXdkaW1lblxpdGVtbWF4CisKKyUgTm90ZSBAdGFibGUsIEBmdGFibGUsIGFuZCBAdnRhYmxlIGRlZmluZSBAaXRlbSwgQGl0ZW14LCBldGMuLCB3aXRoCislIHRoZXNlIGRlZnMuCislIFRoZXkgYWxzbyBkZWZpbmUgXGl0ZW1pbmRleAorJSB0byBpbmRleCB0aGUgaXRlbSBuYW1lIGluIHdoYXRldmVyIG1hbm5lciBpcyBkZXNpcmVkIChwZXJoYXBzIG5vbmUpLgorCitcbmV3aWZcaWZpdGVteG5lZWRzbmVnYXRpdmV2c2tpcAorCitcZGVmXGl0ZW14cGFye1xwYXJcaWZpdGVteG5lZWRzbmVnYXRpdmV2c2tpcFxub2JyZWFrXHZza2lwLVxwYXJza2lwXG5vYnJlYWtcZml9CisKK1xkZWZcaW50ZXJuYWxCaXRlbXtcc21hbGxicmVhayBccGFyc2VhcmdcaXRlbXp6en0KK1xkZWZcaW50ZXJuYWxCaXRlbXh7XGl0ZW14cGFyIFxwYXJzZWFyZ1xpdGVtenp6fQorCitcZGVmXGl0ZW16enogIzF7XGJlZ2luZ3JvdXAgJQorICBcYWR2YW5jZVxoc2l6ZSBieSAtXHJpZ2h0c2tpcAorICBcYWR2YW5jZVxoc2l6ZSBieSAtXHRhYmxlaW5kZW50CisgIFxzZXRib3gwPVxoYm94e1xpdGVtaW5kaWNhdGV7IzF9fSUKKyAgXGl0ZW1pbmRleHsjMX0lCisgIFxub2JyZWFrICUgVGhpcyBwcmV2ZW50cyBhIGJyZWFrIGJlZm9yZSBAaXRlbXguCisgICUKKyAgJSBJZiB0aGUgaXRlbSB0ZXh0IGRvZXMgbm90IGZpdCBpbiB0aGUgc3BhY2Ugd2UgaGF2ZSwgcHV0IGl0IG9uIGEgbGluZQorICAlIGJ5IGl0c2VsZiwgYW5kIGRvIG5vdCBhbGxvdyBhIHBhZ2UgYnJlYWsgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGF0CisgICUgbGluZS4gIFdlIGRvIG5vdCBzdGFydCBhIHBhcmFncmFwaCBoZXJlIGJlY2F1c2UgdGhlbiBpZiB0aGUgbmV4dAorICAlIGNvbW1hbmQgaXMsIGUuZy4sIEBraW5kZXgsIHRoZSB3aGF0c2l0IHdvdWxkIGdldCBwdXQgaW50byB0aGUKKyAgJSBob3Jpem9udGFsIGxpc3Qgb24gYSBsaW5lIGJ5IGl0c2VsZiwgcmVzdWx0aW5nIGluIGV4dHJhIGJsYW5rIHNwYWNlLgorICBcaWZkaW0gXHdkMD5caXRlbW1heAorICAgICUKKyAgICAlIE1ha2UgdGhpcyBhIHBhcmFncmFwaCBzbyB3ZSBnZXQgdGhlIFxwYXJza2lwIGdsdWUgYW5kIHdyYXBwaW5nLAorICAgICUgYnV0IGxlYXZlIGl0IHJhZ2dlZC1yaWdodC4KKyAgICBcYmVnaW5ncm91cAorICAgICAgXGFkdmFuY2VcbGVmdHNraXAgYnktXHRhYmxlaW5kZW50CisgICAgICBcYWR2YW5jZVxoc2l6ZSBieVx0YWJsZWluZGVudAorICAgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5MHB0IHBsdXMxZmlsCisgICAgICBcbGVhdmV2bW9kZVx1bmhib3gwXHBhcgorICAgIFxlbmRncm91cAorICAgICUKKyAgICAlIFdlJ3JlIGdvaW5nIHRvIGJlIHN0YXJ0aW5nIGEgcGFyYWdyYXBoLCBidXQgd2UgZG9uJ3Qgd2FudCB0aGUKKyAgICAlIFxwYXJza2lwIGdsdWUgLS0gbG9naWNhbGx5IGl0J3MgcGFydCBvZiB0aGUgQGl0ZW0gd2UganVzdCBzdGFydGVkLgorICAgIFxub2JyZWFrIFx2c2tpcC1ccGFyc2tpcAorICAgICUKKyAgICAlIFN0b3AgYSBwYWdlIGJyZWFrIGF0IHRoZSBccGFyc2tpcCBnbHVlIGNvbWluZyB1cC4gIEhvd2V2ZXIsIGlmCisgICAgJSB3aGF0IGZvbGxvd3MgaXMgYW4gZW52aXJvbm1lbnQgc3VjaCBhcyBAZXhhbXBsZSwgdGhlcmUgd2lsbCBiZSBubworICAgICUgXHBhcnNraXAgZ2x1ZTsgdGhlbiB0aGUgbmVnYXRpdmUgdnNraXAgd2UganVzdCBpbnNlcnRlZCB3b3VsZAorICAgICUgY2F1c2UgdGhlIGV4YW1wbGUgYW5kIHRoZSBpdGVtIHRvIGNyYXNoIHRvZ2V0aGVyLiAgU28gd2UgdXNlIHRoaXMKKyAgICAlIGJpemFycmUgdmFsdWUgb2YgMTAwMDEgYXMgYSBzaWduYWwgdG8gXGFib3ZlZW52YnJlYWsgdG8gaW5zZXJ0CisgICAgJSBccGFyc2tpcCBnbHVlIGFmdGVyIGFsbC4gIFNlY3Rpb24gdGl0bGVzIGFyZSBoYW5kbGVkIHRoaXMgd2F5IGFsc28uCisgICAgJSAKKyAgICBccGVuYWx0eSAxMDAwMQorICAgIFxlbmRncm91cAorICAgIFxpdGVteG5lZWRzbmVnYXRpdmV2c2tpcGZhbHNlCisgIFxlbHNlCisgICAgJSBUaGUgaXRlbSB0ZXh0IGZpdHMgaW50byB0aGUgc3BhY2UuICBTdGFydCBhIHBhcmFncmFwaCwgc28gdGhhdCB0aGUKKyAgICAlIGZvbGxvd2luZyB0ZXh0IChpZiBhbnkpIHdpbGwgZW5kIHVwIG9uIHRoZSBzYW1lIGxpbmUuCisgICAgXG5vaW5kZW50CisgICAgJSBEbyB0aGlzIHdpdGgga2VybnMgYW5kIFx1bmhib3ggc28gdGhhdCBpZiB0aGVyZSBpcyBhIGZvb3Rub3RlIGluCisgICAgJSB0aGUgaXRlbSB0ZXh0LCBpdCBjYW4gbWlncmF0ZSB0byB0aGUgbWFpbiB2ZXJ0aWNhbCBsaXN0IGFuZAorICAgICUgZXZlbnR1YWxseSBiZSBwcmludGVkLgorICAgIFxub2JyZWFrXGtlcm4tXHRhYmxlaW5kZW50CisgICAgXGRpbWVuMCA9IFxpdGVtbWF4ICBcYWR2YW5jZVxkaW1lbjAgYnkgXGl0ZW1tYXJnaW4gXGFkdmFuY2VcZGltZW4wIGJ5IC1cd2QwCisgICAgXHVuaGJveDAKKyAgICBcbm9icmVha1xrZXJuXGRpbWVuMAorICAgIFxlbmRncm91cAorICAgIFxpdGVteG5lZWRzbmVnYXRpdmV2c2tpcHRydWUKKyAgXGZpCit9CisKK1xkZWZcaXRlbXtcZXJybWVzc2FnZXtAaXRlbSB3aGlsZSBub3QgaW4gYSBsaXN0IGVudmlyb25tZW50fX0KK1xkZWZcaXRlbXh7XGVycm1lc3NhZ2V7QGl0ZW14IHdoaWxlIG5vdCBpbiBhIGxpc3QgZW52aXJvbm1lbnR9fQorCislIEB0YWJsZSwgQGZ0YWJsZSwgQHZ0YWJsZS4KK1xlbnZkZWZcdGFibGV7JQorICBcbGV0XGl0ZW1pbmRleFxnb2JibGUKKyAgXHRhYmxlY2hlY2t7dGFibGV9JQorfQorXGVudmRlZlxmdGFibGV7JQorICBcZGVmXGl0ZW1pbmRleCAjIzF7XGRvaW5kIHtmbn17XGNvZGV7IyMxfX19JQorICBcdGFibGVjaGVja3tmdGFibGV9JQorfQorXGVudmRlZlx2dGFibGV7JQorICBcZGVmXGl0ZW1pbmRleCAjIzF7XGRvaW5kIHt2cn17XGNvZGV7IyMxfX19JQorICBcdGFibGVjaGVja3t2dGFibGV9JQorfQorXGRlZlx0YWJsZWNoZWNrIzF7JQorICBcaWZudW0gXHRoZVxjYXRjb2RlYFxeXk09XGFjdGl2ZQorICAgIFxlbmRncm91cAorICAgIFxlcnJtZXNzYWdle1RoaXMgY29tbWFuZCB3b24ndCB3b3JrIGluIHRoaXMgY29udGV4dDsgcGVyaGFwcyB0aGUgcHJvYmxlbSBpcworICAgICAgdGhhdCB3ZSBhcmUgXGluZW52aXJvbm1lbnRcdGhpc2Vudn0lCisgICAgXGRlZlxuZXh0e1xkb2lnbm9yZXsjMX19JQorICBcZWxzZQorICAgIFxsZXRcbmV4dFx0YWJsZXgKKyAgXGZpCisgIFxuZXh0Cit9CitcZGVmXHRhYmxleCMxeyUKKyAgXGRlZlxpdGVtaW5kaWNhdGV7IzF9JQorICBccGFyc2VhcmdcdGFibGV5Cit9CitcZGVmXHRhYmxleSMxeyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxlZGVmXHRlbXB7XG5vZXhwYW5kXHRhYmxleiAjMVxzcGFjZVxzcGFjZVxzcGFjZX0lCisgICAgXGV4cGFuZGFmdGVyCisgIH1cdGVtcCBcZW5kdGFibGV6Cit9CitcZGVmXHRhYmxleiAjMSAjMiAjMyAjNFxlbmR0YWJsZXp7JQorICBcYWJvdmVlbnZicmVhaworICBcaWZudW0gMCMxPjAgXGFkdmFuY2UgXGxlZnRza2lwIGJ5ICMxXG1pbCBcZmkKKyAgXGlmbnVtIDAjMj4wIFx0YWJsZWluZGVudD0jMlxtaWwgXGZpCisgIFxpZm51bSAwIzM+MCBcYWR2YW5jZSBccmlnaHRza2lwIGJ5ICMzXG1pbCBcZmkKKyAgXGl0ZW1tYXg9XHRhYmxlaW5kZW50CisgIFxhZHZhbmNlIFxpdGVtbWF4IGJ5IC1caXRlbW1hcmdpbgorICBcYWR2YW5jZSBcbGVmdHNraXAgYnkgXHRhYmxlaW5kZW50CisgIFxleGRlbnRhbW91bnQ9XHRhYmxlaW5kZW50CisgIFxwYXJpbmRlbnQgPSAwcHQKKyAgXHBhcnNraXAgPSBcc21hbGxza2lwYW1vdW50CisgIFxpZmRpbSBccGFyc2tpcD0wcHQgXHBhcnNraXA9MnB0IFxmaQorICBcbGV0XGl0ZW0gPSBcaW50ZXJuYWxCaXRlbQorICBcbGV0XGl0ZW14ID0gXGludGVybmFsQml0ZW14Cit9CitcZGVmXEV0YWJsZXtcZW5kZ3JhZlxhZnRlcmVudmJyZWFrfQorXGxldFxFZnRhYmxlXEV0YWJsZQorXGxldFxFdnRhYmxlXEV0YWJsZQorXGxldFxFaXRlbWl6ZVxFdGFibGUKK1xsZXRcRWVudW1lcmF0ZVxFdGFibGUKKworJSBUaGlzIGlzIHRoZSBjb3VudGVyIHVzZWQgYnkgQGVudW1lcmF0ZSwgd2hpY2ggaXMgcmVhbGx5IEBpdGVtaXplCisKK1xuZXdjb3VudCBcaXRlbW5vCisKK1xlbnZkZWZcaXRlbWl6ZXtccGFyc2VhcmdcZG9pdGVtaXplfQorCitcZGVmXGRvaXRlbWl6ZSMxeyUKKyAgXGFib3ZlZW52YnJlYWsKKyAgXGl0ZW1tYXg9XGl0ZW1pbmRlbnQKKyAgXGFkdmFuY2VcaXRlbW1heCBieSAtXGl0ZW1tYXJnaW4KKyAgXGFkdmFuY2VcbGVmdHNraXAgYnkgXGl0ZW1pbmRlbnQKKyAgXGV4ZGVudGFtb3VudD1caXRlbWluZGVudAorICBccGFyaW5kZW50PTBwdAorICBccGFyc2tpcD1cc21hbGxza2lwYW1vdW50CisgIFxpZmRpbVxwYXJza2lwPTBwdCBccGFyc2tpcD0ycHQgXGZpCisgIFxkZWZcaXRlbWNvbnRlbnRzeyMxfSUKKyAgJSBAaXRlbWl6ZSB3aXRoIG5vIGFyZyBpcyBlcXVpdmFsZW50IHRvIEBpdGVtaXplIEBidWxsZXQuCisgIFxpZnhcaXRlbWNvbnRlbnRzXGVtcHR5XGRlZlxpdGVtY29udGVudHN7XGJ1bGxldH1cZmkKKyAgXGxldFxpdGVtPVxpdGVtaXplaXRlbQorfQorCislIERlZmluaXRpb24gb2YgQGl0ZW0gd2hpbGUgaW5zaWRlIEBpdGVtaXplIGFuZCBAZW51bWVyYXRlLgorJQorXGRlZlxpdGVtaXplaXRlbXslCisgIFxhZHZhbmNlXGl0ZW1ubyBieSAxICAlIGZvciBlbnVtZXJhdGlvbnMKKyAge1xsZXRccGFyPVxlbmRncmFmIFxzbWFsbGJyZWFrfSUgcmVhc29uYWJsZSBwbGFjZSB0byBicmVhaworICB7JQorICAgJSBJZiB0aGUgZG9jdW1lbnQgaGFzIGFuIEBpdGVtaXplIGRpcmVjdGx5IGFmdGVyIGEgc2VjdGlvbiB0aXRsZSwgYQorICAgJSBcbm9icmVhayB3aWxsIGJlIGxhc3Qgb24gdGhlIGxpc3QsIGFuZCBcc2VjdGlvbmhlYWRpbmcgd2lsbCBoYXZlCisgICAlIGRvbmUgYSBcdnNraXAtXHBhcnNraXAuICBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gemVybworICAgJSBwYXJza2lwLCBvciB0aGUgaXRlbSB0ZXh0IHdpbGwgY3Jhc2ggd2l0aCB0aGUgaGVhZGluZy4gIE9uIHRoZQorICAgJSBvdGhlciBoYW5kLCB3aGVuIHRoZXJlIGlzIG5vcm1hbCB0ZXh0IHByZWNlZGluZyB0aGUgaXRlbSAoYXMgdGhlcmUKKyAgICUgdXN1YWxseSBpcyksIHdlIGRvIHdhbnQgdG8gemVybyBwYXJza2lwLCBvciB0aGVyZSB3b3VsZCBiZSB0b28gbXVjaAorICAgJSBzcGFjZS4gIEluIHRoYXQgY2FzZSwgd2Ugd29uJ3QgaGF2ZSBhIFxub2JyZWFrIGJlZm9yZS4gIEF0IGxlYXN0CisgICAlIHRoYXQncyB0aGUgdGhlb3J5LgorICAgXGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwIFxwYXJza2lwPTBpbiBcZmkKKyAgIFxub2luZGVudAorICAgXGhib3ggdG8gMHB0e1xoc3MgXGl0ZW1jb250ZW50cyBca2VyblxpdGVtbWFyZ2lufSUKKyAgIFx2YWRqdXN0e1xwZW5hbHR5IDEyMDB9fSUgbm90IGdvb2QgdG8gYnJlYWsgYWZ0ZXIgZmlyc3QgbGluZSBvZiBpdGVtLgorICBcZmx1c2hjcgorfQorCislIFxzcGxpdG9mZiBUT0tFTlNcZW5kbWFyayBkZWZpbmVzIFxmaXJzdCB0byBiZSB0aGUgZmlyc3QgdG9rZW4gaW4KKyUgVE9LRU5TLCBhbmQgXHJlc3QgdG8gYmUgdGhlIHJlbWFpbmRlci4KKyUKK1xkZWZcc3BsaXRvZmYjMSMyXGVuZG1hcmt7XGRlZlxmaXJzdHsjMX1cZGVmXHJlc3R7IzJ9fSUKKworJSBBbGxvdyBhbiBvcHRpb25hbCBhcmd1bWVudCBvZiBhbiB1cHBlcmNhc2UgbGV0dGVyLCBsb3dlcmNhc2UgbGV0dGVyLAorJSBvciBudW1iZXIsIHRvIHNwZWNpZnkgdGhlIGZpcnN0IGxhYmVsIGluIHRoZSBlbnVtZXJhdGVkIGxpc3QuICBObworJSBhcmd1bWVudCBpcyB0aGUgc2FtZSBhcyBgMScuCislCitcZW52cGFyc2VhcmdkZWZcZW51bWVyYXRle1xlbnVtZXJhdGV5ICMxICBcZW5kZW51bWVyYXRleX0KK1xkZWZcZW51bWVyYXRleSAjMSAjMlxlbmRlbnVtZXJhdGV5eyUKKyAgJSBJZiB3ZSB3ZXJlIGdpdmVuIG5vIGFyZ3VtZW50LCBwcmV0ZW5kIHdlIHdlcmUgZ2l2ZW4gYDEnLgorICBcZGVmXHRoZWFyZ3sjMX0lCisgIFxpZnhcdGhlYXJnXGVtcHR5IFxkZWZcdGhlYXJnezF9XGZpCisgICUKKyAgJSBEZXRlY3QgaWYgdGhlIGFyZ3VtZW50IGlzIGEgc2luZ2xlIHRva2VuLiAgSWYgc28sIGl0IG1pZ2h0IGJlIGEKKyAgJSBsZXR0ZXIuICBPdGhlcndpc2UsIHRoZSBvbmx5IHZhbGlkIHRoaW5nIGl0IGNhbiBiZSBpcyBhIG51bWJlci4KKyAgJSAoV2Ugd2lsbCBhbHdheXMgaGF2ZSBvbmUgdG9rZW4sIGJlY2F1c2Ugb2YgdGhlIHRlc3Qgd2UganVzdCBtYWRlLgorICAlIFRoaXMgaXMgYSBnb29kIHRoaW5nLCBzaW5jZSBcc3BsaXRvZmYgZG9lc24ndCB3b3JrIGdpdmVuIG5vdGhpbmcgYXQKKyAgJSBhbGwgLS0gdGhlIGZpcnN0IHBhcmFtZXRlciBpcyB1bmRlbGltaXRlZC4pCisgIFxleHBhbmRhZnRlclxzcGxpdG9mZlx0aGVhcmdcZW5kbWFyaworICBcaWZ4XHJlc3RcZW1wdHkKKyAgICAlIE9ubHkgb25lIHRva2VuIGluIHRoZSBhcmd1bWVudC4gIEl0IGNvdWxkIHN0aWxsIGJlIGFueXRoaW5nLgorICAgICUgQSBgYGxvd2VyY2FzZSBsZXR0ZXInJyBpcyBvbmUgd2hvc2UgXGxjY29kZSBpcyBub256ZXJvLgorICAgICUgQW4gYGB1cHBlcmNhc2UgbGV0dGVyJycgaXMgb25lIHdob3NlIFxsY2NvZGUgaXMgYm90aCBub256ZXJvLCBhbmQKKyAgICAlICAgbm90IGVxdWFsIHRvIGl0c2VsZi4KKyAgICAlIE90aGVyd2lzZSwgd2UgYXNzdW1lIGl0J3MgYSBudW1iZXIuCisgICAgJQorICAgICUgV2UgbmVlZCB0aGUgXHJlbGF4IGF0IHRoZSBlbmQgb2YgdGhlIFxpZm51bSBsaW5lcyB0byBzdG9wIFRlWCBmcm9tCisgICAgJSBjb250aW51aW5nIHRvIGxvb2sgZm9yIGEgPG51bWJlcj4uCisgICAgJQorICAgIFxpZm51bVxsY2NvZGVcZXhwYW5kYWZ0ZXJgXHRoZWFyZz0wXHJlbGF4CisgICAgICBcbnVtZXJpY2VudW1lcmF0ZSAlIGEgbnVtYmVyICh3ZSBob3BlKQorICAgIFxlbHNlCisgICAgICAlIEl0J3MgYSBsZXR0ZXIuCisgICAgICBcaWZudW1cbGNjb2RlXGV4cGFuZGFmdGVyYFx0aGVhcmc9XGV4cGFuZGFmdGVyYFx0aGVhcmdccmVsYXgKKyAgICAgICAgXGxvd2VyY2FzZWVudW1lcmF0ZSAlIGxvd2VyY2FzZSBsZXR0ZXIKKyAgICAgIFxlbHNlCisgICAgICAgIFx1cHBlcmNhc2VlbnVtZXJhdGUgJSB1cHBlcmNhc2UgbGV0dGVyCisgICAgICBcZmkKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIE11bHRpcGxlIHRva2VucyBpbiB0aGUgYXJndW1lbnQuICBXZSBob3BlIGl0J3MgYSBudW1iZXIuCisgICAgXG51bWVyaWNlbnVtZXJhdGUKKyAgXGZpCit9CisKKyUgQW4gQGVudW1lcmF0ZSB3aG9zZSBsYWJlbHMgYXJlIGludGVnZXJzLiAgVGhlIHN0YXJ0aW5nIGludGVnZXIgaXMKKyUgZ2l2ZW4gaW4gXHRoZWFyZy4KKyUKK1xkZWZcbnVtZXJpY2VudW1lcmF0ZXslCisgIFxpdGVtbm8gPSBcdGhlYXJnCisgIFxzdGFydGVudW1lcmF0aW9ue1x0aGVcaXRlbW5vfSUKK30KKworJSBUaGUgc3RhcnRpbmcgKGxvd2VyY2FzZSkgbGV0dGVyIGlzIGluIFx0aGVhcmcuCitcZGVmXGxvd2VyY2FzZWVudW1lcmF0ZXslCisgIFxpdGVtbm8gPSBcZXhwYW5kYWZ0ZXJgXHRoZWFyZworICBcc3RhcnRlbnVtZXJhdGlvbnslCisgICAgJSBCZSBzdXJlIHdlJ3JlIG5vdCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYWxwaGFiZXQuCisgICAgXGlmbnVtXGl0ZW1ubz0wCisgICAgICBcZXJybWVzc2FnZXtObyBtb3JlIGxvd2VyY2FzZSBsZXR0ZXJzIGluIEBlbnVtZXJhdGU7IGdldCBhIGJpZ2dlcgorICAgICAgICAgICAgICAgICAgYWxwaGFiZXR9JQorICAgIFxmaQorICAgIFxjaGFyXGxjY29kZVxpdGVtbm8KKyAgfSUKK30KKworJSBUaGUgc3RhcnRpbmcgKHVwcGVyY2FzZSkgbGV0dGVyIGlzIGluIFx0aGVhcmcuCitcZGVmXHVwcGVyY2FzZWVudW1lcmF0ZXslCisgIFxpdGVtbm8gPSBcZXhwYW5kYWZ0ZXJgXHRoZWFyZworICBcc3RhcnRlbnVtZXJhdGlvbnslCisgICAgJSBCZSBzdXJlIHdlJ3JlIG5vdCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYWxwaGFiZXQuCisgICAgXGlmbnVtXGl0ZW1ubz0wCisgICAgICBcZXJybWVzc2FnZXtObyBtb3JlIHVwcGVyY2FzZSBsZXR0ZXJzIGluIEBlbnVtZXJhdGU7IGdldCBhIGJpZ2dlcgorICAgICAgICAgICAgICAgICAgYWxwaGFiZXR9CisgICAgXGZpCisgICAgXGNoYXJcdWNjb2RlXGl0ZW1ubworICB9JQorfQorCislIENhbGwgXGRvaXRlbWl6ZSwgYWRkaW5nIGEgcGVyaW9kIHRvIHRoZSBmaXJzdCBhcmd1bWVudCBhbmQgc3VwcGx5aW5nIHRoZQorJSBjb21tb24gbGFzdCB0d28gYXJndW1lbnRzLiAgQWxzbyBzdWJ0cmFjdCBvbmUgZnJvbSB0aGUgaW5pdGlhbCB2YWx1ZSBpbgorJSBcaXRlbW5vLCBzaW5jZSBAaXRlbSBpbmNyZW1lbnRzIFxpdGVtbm8uCislCitcZGVmXHN0YXJ0ZW51bWVyYXRpb24jMXslCisgIFxhZHZhbmNlXGl0ZW1ubyBieSAtMQorICBcZG9pdGVtaXpleyMxLn1cZmx1c2hjcgorfQorCislIEBhbHBoYWVudW1lcmF0ZSBhbmQgQGNhcHNlbnVtZXJhdGUgYXJlIGFiYnJldmlhdGlvbnMgZm9yIGdpdmluZyBhbiBhcmcKKyUgdG8gQGVudW1lcmF0ZS4KKyUKK1xkZWZcYWxwaGFlbnVtZXJhdGV7XGVudW1lcmF0ZXthfX0KK1xkZWZcY2Fwc2VudW1lcmF0ZXtcZW51bWVyYXRle0F9fQorXGRlZlxFYWxwaGFlbnVtZXJhdGV7XEVlbnVtZXJhdGV9CitcZGVmXEVjYXBzZW51bWVyYXRle1xFZW51bWVyYXRlfQorCisKKyUgQG11bHRpdGFibGUgbWFjcm9zCislIEFteSBIZW5kcmlja3NvbiwgOC8xOC85NCwgMy82Lzk2CislCislIEBtdWx0aXRhYmxlIC4uLiBAZW5kIG11bHRpdGFibGUgd2lsbCBtYWtlIGFzIG1hbnkgY29sdW1ucyBhcyBkZXNpcmVkLgorJSBDb250ZW50cyBvZiBlYWNoIGNvbHVtbiB3aWxsIHdyYXAgYXQgd2lkdGggZ2l2ZW4gaW4gcHJlYW1ibGUuICBXaWR0aAorJSBjYW4gYmUgc3BlY2lmaWVkIGVpdGhlciB3aXRoIHNhbXBsZSB0ZXh0IGdpdmVuIGluIGEgdGVtcGxhdGUgbGluZSwKKyUgb3IgaW4gcGVyY2VudCBvZiBcaHNpemUsIHRoZSBjdXJyZW50IHdpZHRoIG9mIHRleHQgb24gcGFnZS4KKworJSBUYWJsZSBjYW4gY29udGludWUgb3ZlciBwYWdlcyBidXQgd2lsbCBvbmx5IGJyZWFrIGJldHdlZW4gbGluZXMuCisKKyUgVG8gbWFrZSBwcmVhbWJsZToKKyUKKyUgRWl0aGVyIGRlZmluZSB3aWR0aHMgb2YgY29sdW1ucyBpbiB0ZXJtcyBvZiBwZXJjZW50IG9mIFxoc2l6ZToKKyUgICBAbXVsdGl0YWJsZSBAY29sdW1uZnJhY3Rpb25zIC4yNSAuMyAuNDUKKyUgICBAaXRlbSAuLi4KKyUKKyUgICBOdW1iZXJzIGZvbGxvd2luZyBAY29sdW1uZnJhY3Rpb25zIGFyZSB0aGUgcGVyY2VudCBvZiB0aGUgdG90YWwKKyUgICBjdXJyZW50IGhzaXplIHRvIGJlIHVzZWQgZm9yIGVhY2ggY29sdW1uLiBZb3UgbWF5IHVzZSBhcyBtYW55CislICAgY29sdW1ucyBhcyBkZXNpcmVkLgorCisKKyUgT3IgdXNlIGEgdGVtcGxhdGU6CislICAgQG11bHRpdGFibGUge0NvbHVtbiAxIHRlbXBsYXRlfSB7Q29sdW1uIDIgdGVtcGxhdGV9IHtDb2x1bW4gMyB0ZW1wbGF0ZX0KKyUgICBAaXRlbSAuLi4KKyUgICB1c2luZyB0aGUgd2lkZXN0IHRlcm0gZGVzaXJlZCBpbiBlYWNoIGNvbHVtbi4KKworJSBFYWNoIG5ldyB0YWJsZSBsaW5lIHN0YXJ0cyB3aXRoIEBpdGVtLCBlYWNoIHN1YnNlcXVlbnQgbmV3IGNvbHVtbgorJSBzdGFydHMgd2l0aCBAdGFiLiBFbXB0eSBjb2x1bW5zIG1heSBiZSBwcm9kdWNlZCBieSBzdXBwbHlpbmcgQHRhYidzCislIHdpdGggbm90aGluZyBiZXR3ZWVuIHRoZW0gZm9yIGFzIG1hbnkgdGltZXMgYXMgZW1wdHkgY29sdW1ucyBhcmUgbmVlZGVkLAorJSBpZSwgQHRhYkB0YWJAdGFiIHdpbGwgcHJvZHVjZSB0d28gZW1wdHkgY29sdW1ucy4KKworJSBAaXRlbSwgQHRhYiBkbyBub3QgbmVlZCB0byBiZSBvbiB0aGVpciBvd24gbGluZXMsIGJ1dCBpdCB3aWxsIG5vdCBodXJ0CislIGlmIHRoZXkgYXJlLgorCislIFNhbXBsZSBtdWx0aXRhYmxlOgorCislICAgQG11bHRpdGFibGUge0NvbHVtbiAxIHRlbXBsYXRlfSB7Q29sdW1uIDIgdGVtcGxhdGV9IHtDb2x1bW4gMyB0ZW1wbGF0ZX0KKyUgICBAaXRlbSBmaXJzdCBjb2wgc3R1ZmYgQHRhYiBzZWNvbmQgY29sIHN0dWZmIEB0YWIgdGhpcmQgY29sCislICAgQGl0ZW0KKyUgICBmaXJzdCBjb2wgc3R1ZmYKKyUgICBAdGFiCislICAgc2Vjb25kIGNvbCBzdHVmZgorJSAgIEB0YWIKKyUgICB0aGlyZCBjb2wKKyUgICBAaXRlbSBmaXJzdCBjb2wgc3R1ZmYgQHRhYiBzZWNvbmQgY29sIHN0dWZmCislICAgQHRhYiBNYW55IHBhcmFncmFwaHMgb2YgdGV4dCBtYXkgYmUgdXNlZCBpbiBhbnkgY29sdW1uLgorJQorJSAgICAgICAgIFRoZXkgd2lsbCB3cmFwIGF0IHRoZSB3aWR0aCBkZXRlcm1pbmVkIGJ5IHRoZSB0ZW1wbGF0ZS4KKyUgICBAaXRlbUB0YWJAdGFiIFRoaXMgd2lsbCBiZSBpbiB0aGlyZCBjb2x1bW4uCislICAgQGVuZCBtdWx0aXRhYmxlCisKKyUgRGVmYXVsdCBkaW1lbnNpb25zIG1heSBiZSByZXNldCBieSB1c2VyLgorJSBAbXVsdGl0YWJsZXBhcnNraXAgaXMgdmVydGljYWwgc3BhY2UgYmV0d2VlbiBwYXJhZ3JhcGhzIGluIHRhYmxlLgorJSBAbXVsdGl0YWJsZXBhcmluZGVudCBpcyBwYXJhZ3JhcGggaW5kZW50IGluIHRhYmxlLgorJSBAbXVsdGl0YWJsZWNvbG1hcmdpbiBpcyBob3Jpem9udGFsIHNwYWNlIHRvIGJlIGxlZnQgYmV0d2VlbiBjb2x1bW5zLgorJSBAbXVsdGl0YWJsZWxpbmVzcGFjZSBpcyBzcGFjZSB0byBsZWF2ZSBiZXR3ZWVuIHRhYmxlIGl0ZW1zLCBiYXNlbGluZQorJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJhc2VsaW5lLgorJSAgIDBwdCBtZWFucyBpdCBkZXBlbmRzIG9uIGN1cnJlbnQgbm9ybWFsIGxpbmUgc3BhY2luZy4KKyUKK1xuZXdza2lwXG11bHRpdGFibGVwYXJza2lwCitcbmV3c2tpcFxtdWx0aXRhYmxlcGFyaW5kZW50CitcbmV3ZGltZW5cbXVsdGl0YWJsZWNvbHNwYWNlCitcbmV3c2tpcFxtdWx0aXRhYmxlbGluZXNwYWNlCitcbXVsdGl0YWJsZXBhcnNraXA9MHB0CitcbXVsdGl0YWJsZXBhcmluZGVudD02cHQKK1xtdWx0aXRhYmxlY29sc3BhY2U9MTJwdAorXG11bHRpdGFibGVsaW5lc3BhY2U9MHB0CisKKyUgTWFjcm9zIHVzZWQgdG8gc2V0IHVwIGhhbGlnbiBwcmVhbWJsZToKKyUKK1xsZXRcZW5kc2V0dXB0YWJsZVxyZWxheAorXGRlZlx4ZW5kc2V0dXB0YWJsZXtcZW5kc2V0dXB0YWJsZX0KK1xsZXRcY29sdW1uZnJhY3Rpb25zXHJlbGF4CitcZGVmXHhjb2x1bW5mcmFjdGlvbnN7XGNvbHVtbmZyYWN0aW9uc30KK1xuZXdpZlxpZnNldHBlcmNlbnQKKworJSAjMSBpcyB0aGUgQGNvbHVtbmZyYWN0aW9uLCB1c3VhbGx5IGEgZGVjaW1hbCBudW1iZXIgbGlrZSAuNSwgYnV0IG1pZ2h0CislIGJlIGp1c3QgMS4gIFdlIGp1c3QgdXNlIGl0LCB3aGF0ZXZlciBpdCBpcy4KKyUKK1xkZWZccGlja3Vwd2hvbGVmcmFjdGlvbiMxIHslCisgIFxnbG9iYWxcYWR2YW5jZVxjb2xjb3VudCBieSAxCisgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSBjb2xcdGhlXGNvbGNvdW50XGVuZGNzbmFtZXsjMVxoc2l6ZX0lCisgIFxzZXR1cHRhYmxlCit9CisKK1xuZXdjb3VudFxjb2xjb3VudAorXGRlZlxzZXR1cHRhYmxlIzF7JQorICBcZGVmXGZpcnN0YXJneyMxfSUKKyAgXGlmeFxmaXJzdGFyZ1x4ZW5kc2V0dXB0YWJsZQorICAgIFxsZXRcZ28gPSBccmVsYXgKKyAgXGVsc2UKKyAgICBcaWZ4XGZpcnN0YXJnXHhjb2x1bW5mcmFjdGlvbnMKKyAgICAgIFxnbG9iYWxcc2V0cGVyY2VudHRydWUKKyAgICBcZWxzZQorICAgICAgXGlmc2V0cGVyY2VudAorICAgICAgICAgXGxldFxnb1xwaWNrdXB3aG9sZWZyYWN0aW9uCisgICAgICBcZWxzZQorICAgICAgICAgXGdsb2JhbFxhZHZhbmNlXGNvbGNvdW50IGJ5IDEKKyAgICAgICAgIFxzZXRib3gwPVxoYm94eyMxXHVuc2tpcFxzcGFjZX0lIEFkZCBhIG5vcm1hbCB3b3JkIHNwYWNlIGFzIGEKKyAgICAgICAgICAgICAgICAgICAlIHNlcGFyYXRvcjsgdHlwaWNhbGx5IHRoYXQgaXMgYWx3YXlzIGluIHRoZSBpbnB1dCwgYW55d2F5LgorICAgICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIGNvbFx0aGVcY29sY291bnRcZW5kY3NuYW1le1x0aGVcd2QwfSUKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxpZnhcZ29ccGlja3Vwd2hvbGVmcmFjdGlvbgorICAgICAgJSBQdXQgdGhlIGFyZ3VtZW50IGJhY2sgZm9yIHRoZSBccGlja3Vwd2hvbGVmcmFjdGlvbiBjYWxsLCBzbworICAgICAgJSB3ZSdsbCBhbHdheXMgaGF2ZSBhIHBlcmlvZCB0aGVyZSB0byBiZSBwYXJzZWQuCisgICAgICBcZGVmXGdve1xwaWNrdXB3aG9sZWZyYWN0aW9uIzF9JQorICAgIFxlbHNlCisgICAgICBcbGV0XGdvID0gXHNldHVwdGFibGUKKyAgICBcZmklCisgIFxmaQorICBcZ28KK30KKworJSBtdWx0aXRhYmxlLW9ubHkgY29tbWFuZHMuCislCislIEBoZWFkaXRlbSBzdGFydHMgYSBoZWFkaW5nIHJvdywgd2hpY2ggd2UgdHlwZXNldCBpbiBib2xkLgorJSBBc3NpZ25tZW50cyBoYXZlIHRvIGJlIGdsb2JhbCBzaW5jZSB3ZSBhcmUgaW5zaWRlIHRoZSBpbXBsaWNpdCBncm91cAorJSBvZiBhbiBhbGlnbm1lbnQgZW50cnkuICBOb3RlIHRoYXQgXGV2ZXJ5Y3IgcmVzZXRzIFxldmVyeXRhYi4KK1xkZWZcaGVhZGl0ZW17XGNoZWNrZW52XG11bHRpdGFibGUgXGNyY3IgXGdsb2JhbFxldmVyeXRhYj17XGJmfVx0aGVcZXZlcnl0YWJ9JQorJQorJSBBIFx0YWIgdXNlZCB0byBpbmNsdWRlIFxoc2tpcDFzcC4gIEJ1dCB0aGVuIHRoZSBzcGFjZSBpbiBhIHRlbXBsYXRlCislIGxpbmUgaXMgbm90IGVub3VnaC4gIFRoYXQgaXMgYmFkLiAgU28gbGV0J3MgZ28gYmFjayB0byBqdXN0IGAmJyB1bnRpbAorJSB3ZSBlbmNvdW50ZXIgdGhlIHByb2JsZW0gaXQgd2FzIGludGVuZGVkIHRvIHNvbHZlIGFnYWluLgorJQkJCQkJLS1rYXJsLCBuYXRoYW5AYWNtLm9yZywgMjBhcHI5OS4KK1xkZWZcdGFie1xjaGVja2VudlxtdWx0aXRhYmxlICZcdGhlXGV2ZXJ5dGFifSUKKworJSBAbXVsdGl0YWJsZSAuLi4gQGVuZCBtdWx0aXRhYmxlIGRlZmluaXRpb25zOgorJQorXG5ld3Rva3NcZXZlcnl0YWIgICUgaW5zZXJ0IGFmdGVyIGV2ZXJ5IHRhYi4KKyUKK1xlbnZkZWZcbXVsdGl0YWJsZXslCisgIFx2c2tpcFxwYXJza2lwCisgIFxzdGFydHNhdmluZ2luc2VydHMKKyAgJQorICAlIEBpdGVtIHdpdGhpbiBhIG11bHRpdGFibGUgc3RhcnRzIGEgbm9ybWFsIHJvdy4KKyAgJSBXZSB1c2UgXGRlZiBpbnN0ZWFkIG9mIFxsZXQgc28gdGhhdCBpZiBvbmUgb2YgdGhlIG11bHRpdGFibGUgZW50cmllcworICAlIGNvbnRhaW5zIGFuIEBpdGVtaXplLCB3ZSBkb24ndCBjaG9rZSBvbiB0aGUgXGl0ZW0gKHNlZW4gYXMgXGNyY3IgYWthCisgICUgXGVuZHRlbXBsYXRlKSBleHBhbmRpbmcgXGRvaXRlbWl6ZS4KKyAgXGRlZlxpdGVte1xjcmNyfSUKKyAgJQorICBcdG9sZXJhbmNlPTk1MDAKKyAgXGhiYWRuZXNzPTk1MDAKKyAgXHNldG11bHRpdGFibGVzcGFjaW5nCisgIFxwYXJza2lwPVxtdWx0aXRhYmxlcGFyc2tpcAorICBccGFyaW5kZW50PVxtdWx0aXRhYmxlcGFyaW5kZW50CisgIFxvdmVyZnVsbHJ1bGU9MHB0CisgIFxnbG9iYWxcY29sY291bnQ9MAorICAlCisgIFxldmVyeWNyID0geyUKKyAgICBcbm9hbGlnbnslCisgICAgICBcZ2xvYmFsXGV2ZXJ5dGFiPXt9JQorICAgICAgXGdsb2JhbFxjb2xjb3VudD0wICUgUmVzZXQgdGhlIGNvbHVtbiBjb3VudGVyLgorICAgICAgJSBDaGVjayBmb3Igc2F2ZWQgZm9vdG5vdGVzLCBldGMuCisgICAgICBcY2hlY2tpbnNlcnRzCisgICAgICAlIEtlZXBzIHVuZGVyZnVsbCBib3ggbWVzc2FnZXMgb2ZmIHdoZW4gdGFibGUgYnJlYWtzIG92ZXIgcGFnZXMuCisgICAgICAlXGZpbGJyZWFrCisJJSBNYXliZSBzbywgYnV0IGl0IGFsc28gY3JlYXRlcyByZWFsbHkgd2VpcmQgcGFnZSBicmVha3Mgd2hlbiB0aGUKKwklIHRhYmxlIGJyZWFrcyBvdmVyIHBhZ2VzLiBXb3VsZG4ndCBcdmZpbCBiZSBiZXR0ZXI/ICBXYWl0IHVudGlsIHRoZQorCSUgcHJvYmxlbSBtYW5pZmVzdHMgaXRzZWxmLCBzbyBpdCBjYW4gYmUgZml4ZWQgZm9yIHJlYWwgLS1rYXJsLgorICAgIH0lCisgIH0lCisgICUKKyAgXHBhcnNlYXJnXGRvbXVsdGl0YWJsZQorfQorXGRlZlxkb211bHRpdGFibGUjMXslCisgICUgVG8gcGFyc2UgZXZlcnl0aGluZyBiZXR3ZWVuIEBtdWx0aXRhYmxlIGFuZCBAaXRlbToKKyAgXHNldHVwdGFibGUjMSBcZW5kc2V0dXB0YWJsZQorICAlCisgICUgVGhpcyBwcmVhbWJsZSBzZXRzIHVwIGEgZ2VuZXJpYyBjb2x1bW4gZGVmaW5pdGlvbiwgd2hpY2ggd2lsbAorICAlIGJlIHVzZWQgYXMgbWFueSB0aW1lcyBhcyB1c2VyIGNhbGxzIGZvciBjb2x1bW5zLgorICAlIFx2dG9wIHdpbGwgc2V0IGEgc2luZ2xlIGxpbmUgYW5kIHdpbGwgYWxzbyBsZXQgdGV4dCB3cmFwIGFuZAorICAlIGNvbnRpbnVlIGZvciBtYW55IHBhcmFncmFwaHMgaWYgZGVzaXJlZC4KKyAgXGhhbGlnblxiZ3JvdXAgJiUKKyAgICBcZ2xvYmFsXGFkdmFuY2VcY29sY291bnQgYnkgMQorICAgIFxtdWx0aXN0cnV0CisgICAgXHZ0b3B7JQorICAgICAgJSBVc2UgdGhlIGN1cnJlbnQgXGNvbGNvdW50IHRvIGZpbmQgdGhlIGNvcnJlY3QgY29sdW1uIHdpZHRoOgorICAgICAgXGhzaXplPVxleHBhbmRhZnRlclxjc25hbWUgY29sXHRoZVxjb2xjb3VudFxlbmRjc25hbWUKKyAgICAgICUKKyAgICAgICUgSW4gb3JkZXIgdG8ga2VlcCBlbnRyaWVzIGZyb20gYnVtcGluZyBpbnRvIGVhY2ggb3RoZXIKKyAgICAgICUgd2Ugd2lsbCBhZGQgYSBcbGVmdHNraXAgb2YgXG11bHRpdGFibGVjb2xzcGFjZSB0byBhbGwgY29sdW1ucyBhZnRlcgorICAgICAgJSB0aGUgZmlyc3Qgb25lLgorICAgICAgJQorICAgICAgJSBJZiBhIHRlbXBsYXRlIGhhcyBiZWVuIHVzZWQsIHdlIHdpbGwgYWRkIFxtdWx0aXRhYmxlY29sc3BhY2UKKyAgICAgICUgdG8gdGhlIHdpZHRoIG9mIGVhY2ggdGVtcGxhdGUgZW50cnkuCisgICAgICAlCisgICAgICAlIElmIHRoZSB1c2VyIGhhcyBzZXQgcHJlYW1ibGUgaW4gdGVybXMgb2YgcGVyY2VudCBvZiBcaHNpemUgd2Ugd2lsbAorICAgICAgJSB1c2UgdGhhdCBkaW1lbnNpb24gYXMgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4sIGFuZCB0aGUgXGxlZnRza2lwCisgICAgICAlIHdpbGwga2VlcCBlbnRyaWVzIGZyb20gYnVtcGluZyBpbnRvIGVhY2ggb3RoZXIuICBUYWJsZSB3aWxsIHN0YXJ0IGF0CisgICAgICAlIGxlZnQgbWFyZ2luIGFuZCBmaW5hbCBjb2x1bW4gd2lsbCBqdXN0aWZ5IGF0IHJpZ2h0IG1hcmdpbi4KKyAgICAgICUKKyAgICAgICUgTWFrZSBzdXJlIHdlIGRvbid0IGluaGVyaXQgXHJpZ2h0c2tpcCBmcm9tIHRoZSBvdXRlciBlbnZpcm9ubWVudC4KKyAgICAgIFxyaWdodHNraXA9MHB0CisgICAgICBcaWZudW1cY29sY291bnQ9MQorCSUgVGhlIGZpcnN0IGNvbHVtbiB3aWxsIGJlIGluZGVudGVkIHdpdGggdGhlIHN1cnJvdW5kaW5nIHRleHQuCisJXGFkdmFuY2VcaHNpemUgYnlcbGVmdHNraXAKKyAgICAgIFxlbHNlCisJXGlmc2V0cGVyY2VudCBcZWxzZQorCSAgJSBJZiB1c2VyIGhhcyBub3Qgc2V0IHByZWFtYmxlIGluIHRlcm1zIG9mIHBlcmNlbnQgb2YgXGhzaXplCisJICAlIHdlIHdpbGwgYWR2YW5jZSBcaHNpemUgYnkgXG11bHRpdGFibGVjb2xzcGFjZS4KKwkgIFxhZHZhbmNlXGhzaXplIGJ5IFxtdWx0aXRhYmxlY29sc3BhY2UKKwlcZmkKKyAgICAgICAlIEluIGVpdGhlciBjYXNlIHdlIHdpbGwgbWFrZSBcbGVmdHNraXA9XG11bHRpdGFibGVjb2xzcGFjZToKKyAgICAgIFxsZWZ0c2tpcD1cbXVsdGl0YWJsZWNvbHNwYWNlCisgICAgICBcZmkKKyAgICAgICUgSWdub3Jpbmcgc3BhY2UgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIGF2b2lkcyBhbiBvY2Nhc2lvbmFsIHNwdXJpb3VzCisgICAgICAlIGJsYW5rIGxpbmUsIHdoZW4gVGVYIGRlY2lkZXMgdG8gYnJlYWsgdGhlIGxpbmUgYXQgdGhlIHNwYWNlIGJlZm9yZSB0aGUKKyAgICAgICUgYm94IGZyb20gdGhlIG11bHRpc3RydXQsIHNvIHRoZSBzdHJ1dCBlbmRzIHVwIG9uIGEgbGluZSBieSBpdHNlbGYuCisgICAgICAlIEZvciBleGFtcGxlOgorICAgICAgJSBAbXVsdGl0YWJsZSBAY29sdW1uZnJhY3Rpb25zIC4xMSAuODkKKyAgICAgICUgQGl0ZW0gQGNvZGV7I30KKyAgICAgICUgQHRhYiBMZWdhbCBob2xpZGF5IHdoaWNoIGlzIHZhbGlkIGluIG1ham9yIHBhcnRzIG9mIHRoZSB3aG9sZSBjb3VudHJ5LgorICAgICAgJSBJcyBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIHdpdGggaGlnaGxpZ2h0aW5nIHNlcXVlbmNlcyByZXNwZWN0aXZlbHkKKyAgICAgICUgbWFya2luZyBjaGFyYWN0ZXJzLgorICAgICAgXG5vaW5kZW50XGlnbm9yZXNwYWNlcyMjXHVuc2tpcFxtdWx0aXN0cnV0CisgICAgfVxjcgorfQorXGRlZlxFbXVsdGl0YWJsZXslCisgIFxjcmNyCisgIFxlZ3JvdXAgJSBlbmQgdGhlIFxoYWxpZ24KKyAgXGdsb2JhbFxzZXRwZXJjZW50ZmFsc2UKK30KKworXGRlZlxzZXRtdWx0aXRhYmxlc3BhY2luZ3slCisgIFxkZWZcbXVsdGlzdHJ1dHtcc3RydXR9JSBqdXN0IHVzZSB0aGUgc3RhbmRhcmQgbGluZSBzcGFjaW5nCisgICUKKyAgJSBDb21wdXRlIFxtdWx0aXRhYmxlbGluZXNwYWNlIChpZiBub3QgZGVmaW5lZCBieSB1c2VyKSBmb3IgdXNlIGluCisgICUgXG11bHRpdGFibGVwYXJza2lwIGNhbGN1bGF0aW9uLiAgV2UgdXNlZCBkZWZpbmUgXG11bHRpc3RydXQgYmFzZWQgb24KKyAgJSB0aGlzLCBidXQgKGlyb25pY2FsbHkpIHRoYXQgY2F1c2VkIHRoZSBzcGFjaW5nIHRvIGJlIG9mZi4KKyAgJSBTZWUgYnVnLXRleGluZm8gcmVwb3J0IGZyb20gV2VybmVyIExlbWJlcmcsIDMxIE9jdCAyMDA0IDEyOjUyOjIwICswMTAwLgorXGlmZGltXG11bHRpdGFibGVsaW5lc3BhY2U9MHB0Citcc2V0Ym94MD1cdmJveHtYfVxnbG9iYWxcbXVsdGl0YWJsZWxpbmVzcGFjZT1cdGhlXGJhc2VsaW5lc2tpcAorXGdsb2JhbFxhZHZhbmNlXG11bHRpdGFibGVsaW5lc3BhY2UgYnktXGh0MAorXGZpCislJSBUZXN0IHRvIHNlZSBpZiBwYXJza2lwIGlzIGxhcmdlciB0aGFuIHNwYWNlIGJldHdlZW4gbGluZXMgb2YKKyUlIHRhYmxlLiBJZiBub3QsIGRvIG5vdGhpbmcuCislJSAgICAgICAgSWYgc28sIHNldCB0byBzYW1lIGRpbWVuc2lvbiBhcyBtdWx0aXRhYmxlbGluZXNwYWNlLgorXGlmZGltXG11bHRpdGFibGVwYXJza2lwPlxtdWx0aXRhYmxlbGluZXNwYWNlCitcZ2xvYmFsXG11bHRpdGFibGVwYXJza2lwPVxtdWx0aXRhYmxlbGluZXNwYWNlCitcZ2xvYmFsXGFkdmFuY2VcbXVsdGl0YWJsZXBhcnNraXAtN3B0ICUlIHRvIGtlZXAgcGFyc2tpcCBzb21ld2hhdCBzbWFsbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUlIHRoYW4gc2tpcCBiZXR3ZWVuIGxpbmVzIGluIHRoZSB0YWJsZS4KK1xmaSUKK1xpZmRpbVxtdWx0aXRhYmxlcGFyc2tpcD0wcHQKK1xnbG9iYWxcbXVsdGl0YWJsZXBhcnNraXA9XG11bHRpdGFibGVsaW5lc3BhY2UKK1xnbG9iYWxcYWR2YW5jZVxtdWx0aXRhYmxlcGFyc2tpcC03cHQgJSUgdG8ga2VlcCBwYXJza2lwIHNvbWV3aGF0IHNtYWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSUgdGhhbiBza2lwIGJldHdlZW4gbGluZXMgaW4gdGhlIHRhYmxlLgorXGZpfQorCisKK1xtZXNzYWdle2NvbmRpdGlvbmFscyx9CisKKyUgQGlmdGV4LCBAaWZub3Rkb2Nib29rLCBAaWZub3RodG1sLCBAaWZub3RpbmZvLCBAaWZub3RwbGFpbnRleHQsCislIEBpZm5vdHhtbCBhbHdheXMgc3VjY2VlZC4gIFRoZXkgY3VycmVudGx5IGRvIG5vdGhpbmc7IHdlIGRvbid0CislIGF0dGVtcHQgdG8gY2hlY2sgd2hldGhlciB0aGUgY29uZGl0aW9uYWxzIGFyZSBwcm9wZXJseSBuZXN0ZWQuICBCdXQgd2UKKyUgaGF2ZSB0byByZW1lbWJlciB0aGF0IHRoZXkgYXJlIGNvbmRpdGlvbmFscywgc28gdGhhdCBAZW5kIGRvZXNuJ3QKKyUgYXR0ZW1wdCB0byBjbG9zZSBhbiBlbnZpcm9ubWVudCBncm91cC4KKyUKK1xkZWZcbWFrZWNvbmQjMXslCisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lICMxXGVuZGNzbmFtZSA9IFxyZWxheAorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBpc2NvbmQuIzFcZW5kY3NuYW1lID0gMQorfQorXG1ha2Vjb25ke2lmdGV4fQorXG1ha2Vjb25ke2lmbm90ZG9jYm9va30KK1xtYWtlY29uZHtpZm5vdGh0bWx9CitcbWFrZWNvbmR7aWZub3RpbmZvfQorXG1ha2Vjb25ke2lmbm90cGxhaW50ZXh0fQorXG1ha2Vjb25ke2lmbm90eG1sfQorCislIElnbm9yZSBAaWdub3JlLCBAaWZodG1sLCBAaWZpbmZvLCBhbmQgdGhlIGxpa2UuCislCitcZGVmXGRpcmVudHJ5e1xkb2lnbm9yZXtkaXJlbnRyeX19CitcZGVmXGRvY3VtZW50ZGVzY3JpcHRpb257XGRvaWdub3Jle2RvY3VtZW50ZGVzY3JpcHRpb259fQorXGRlZlxkb2Nib29re1xkb2lnbm9yZXtkb2Nib29rfX0KK1xkZWZcaHRtbHtcZG9pZ25vcmV7aHRtbH19CitcZGVmXGlmZG9jYm9va3tcZG9pZ25vcmV7aWZkb2Nib29rfX0KK1xkZWZcaWZodG1se1xkb2lnbm9yZXtpZmh0bWx9fQorXGRlZlxpZmluZm97XGRvaWdub3Jle2lmaW5mb319CitcZGVmXGlmbm90dGV4e1xkb2lnbm9yZXtpZm5vdHRleH19CitcZGVmXGlmcGxhaW50ZXh0e1xkb2lnbm9yZXtpZnBsYWludGV4dH19CitcZGVmXGlmeG1se1xkb2lnbm9yZXtpZnhtbH19CitcZGVmXGlnbm9yZXtcZG9pZ25vcmV7aWdub3JlfX0KK1xkZWZcbWVudXtcZG9pZ25vcmV7bWVudX19CitcZGVmXHhtbHtcZG9pZ25vcmV7eG1sfX0KKworJSBJZ25vcmUgdGV4dCB1bnRpbCBhIGxpbmUgYEBlbmQgIzEnLCBrZWVwaW5nIHRyYWNrIG9mIG5lc3RlZCBjb25kaXRpb25hbHMuCislCislIEEgY291bnQgdG8gcmVtZW1iZXIgdGhlIGRlcHRoIG9mIG5lc3RpbmcuCitcbmV3Y291bnRcZG9pZ25vcmVjb3VudAorCitcZGVmXGRvaWdub3JlIzF7XGJlZ2luZ3JvdXAKKyAgJSBTY2FuIGluIGBgdmVyYmF0aW0nJyBtb2RlOgorICBcb2JleWxpbmVzCisgIFxjYXRjb2RlYFxAID0gXG90aGVyCisgIFxjYXRjb2RlYFx7ID0gXG90aGVyCisgIFxjYXRjb2RlYFx9ID0gXG90aGVyCisgICUKKyAgJSBNYWtlIHN1cmUgdGhhdCBzcGFjZXMgdHVybiBpbnRvIHRva2VucyB0aGF0IG1hdGNoIHdoYXQgXGRvaWdub3JldGV4dCB3YW50cy4KKyAgXHNwYWNlaXNzcGFjZQorICAlCisgICUgQ291bnQgbnVtYmVyIG9mICMxJ3MgdGhhdCB3ZSd2ZSBzZWVuLgorICBcZG9pZ25vcmVjb3VudCA9IDAKKyAgJQorICAlIFN3YWxsb3cgdGV4dCB1bnRpbCB3ZSByZWFjaCB0aGUgbWF0Y2hpbmcgYEBlbmQgIzEnLgorICBcZG9kb2lnbm9yZXsjMX0lCit9CisKK3sgXGNhdGNvZGVgXz0xMSAlIFdlIHdhbnQgdG8gdXNlIFxfU1RPUF8gd2hpY2ggY2Fubm90IGFwcGVhciBpbiB0ZXhpbmZvIHNvdXJjZS4KKyAgXG9iZXlsaW5lcyAlCisgICUKKyAgXGdkZWZcZG9kb2lnbm9yZSMxeyUKKyAgICAlICMxIGNvbnRhaW5zIHRoZSBjb21tYW5kIG5hbWUgYXMgYSBzdHJpbmcsIGUuZy4sIGBpZmluZm8nLgorICAgICUKKyAgICAlIERlZmluZSBhIGNvbW1hbmQgdG8gZmluZCB0aGUgbmV4dCBgQGVuZCAjMScuCisgICAgXGxvbmdcZGVmXGRvaWdub3JldGV4dCMjMV5eTUBlbmQgIzF7JQorICAgICAgXGRvaWdub3JldGV4dHl5eSMjMV5eTUAjMVxfU1RPUF99JQorICAgICUKKyAgICAlIEFuZCB0aGlzIGNvbW1hbmQgdG8gZmluZCBhbm90aGVyICMxIGNvbW1hbmQsIGF0IHRoZSBiZWdpbm5pbmcgb2YgYQorICAgICUgbGluZS4gIChPdGhlcndpc2UsIHdlIHdvdWxkIGNvbnNpZGVyIGEgbGluZSBgQGMgQGlmc2V0JywgZm9yCisgICAgJSBleGFtcGxlLCB0byBjb3VudCBhcyBhbiBAaWZzZXQgZm9yIG5lc3RpbmcuKQorICAgIFxsb25nXGRlZlxkb2lnbm9yZXRleHR5eXkjIzFeXk1AIzEjIzJcX1NUT1Bfe1xkb2lnbm9yZXl5eXsjIzJ9XF9TVE9QX30lCisgICAgJQorICAgICUgQW5kIG5vdyBleHBhbmQgdGhhdCBjb21tYW5kLgorICAgIFxkb2lnbm9yZXRleHQgXl5NJQorICB9JQorfQorCitcZGVmXGRvaWdub3JleXl5IzF7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcZW1wdHkJCQklIE5vdGhpbmcgZm91bmQuCisgICAgXGxldFxuZXh0XGRvaWdub3JldGV4dHp6egorICBcZWxzZQkJCQkJJSBGb3VuZCBhIG5lc3RlZCBjb25kaXRpb24sIC4uLgorICAgIFxhZHZhbmNlXGRvaWdub3JlY291bnQgYnkgMQorICAgIFxsZXRcbmV4dFxkb2lnbm9yZXRleHR5eXkJCSUgLi4uLCBsb29rIGZvciBhbm90aGVyLgorICAgICUgSWYgd2UncmUgaGVyZSwgIzEgZW5kcyB3aXRoIF5eTVxpZmluZm8gKGZvciBleGFtcGxlKS4KKyAgXGZpCisgIFxuZXh0ICMxJSB0aGUgdG9rZW4gXF9TVE9QXyBpcyBwcmVzZW50IGp1c3QgYWZ0ZXIgdGhpcyBtYWNyby4KK30KKworJSBXZSBoYXZlIHRvIHN3YWxsb3cgdGhlIHJlbWFpbmluZyAiXF9TVE9QXyIuCislCitcZGVmXGRvaWdub3JldGV4dHp6eiMxeyUKKyAgXGlmbnVtXGRvaWdub3JlY291bnQgPSAwCSUgV2UgaGF2ZSBqdXN0IGZvdW5kIHRoZSBvdXRlcm1vc3QgQGVuZC4KKyAgICBcbGV0XG5leHRcZW5kZG9pZ25vcmUKKyAgXGVsc2UJCQkJJSBTdGlsbCBpbnNpZGUgYSBuZXN0ZWQgY29uZGl0aW9uLgorICAgIFxhZHZhbmNlXGRvaWdub3JlY291bnQgYnkgLTEKKyAgICBcbGV0XG5leHRcZG9pZ25vcmV0ZXh0ICAgICAgJSBMb29rIGZvciB0aGUgbmV4dCBAZW5kLgorICBcZmkKKyAgXG5leHQKK30KKworJSBGaW5pc2ggb2ZmIGlnbm9yZWQgdGV4dC4KK3sgXG9iZXlsaW5lcyUKKyAgJSBJZ25vcmUgYW55dGhpbmcgYWZ0ZXIgdGhlIGxhc3QgYEBlbmQgIzEnOyB0aGlzIG1hdHRlcnMgaW4gdmVyYmF0aW0KKyAgJSBlbnZpcm9ubWVudHMsIHdoZXJlIG90aGVyd2lzZSB0aGUgbmV3bGluZSBhZnRlciBhbiBpZ25vcmVkIGNvbmRpdGlvbmFsCisgICUgd291bGQgcmVzdWx0IGluIGEgYmxhbmsgbGluZSBpbiB0aGUgb3V0cHV0LgorICBcZ2RlZlxlbmRkb2lnbm9yZSMxXl5Ne1xlbmRncm91cFxpZ25vcmVzcGFjZXN9JQorfQorCisKKyUgQHNldCBWQVIgc2V0cyB0aGUgdmFyaWFibGUgVkFSIHRvIGFuIGVtcHR5IHZhbHVlLgorJSBAc2V0IFZBUiBSRVNULU9GLUxJTkUgc2V0cyBWQVIgdG8gdGhlIHZhbHVlIFJFU1QtT0YtTElORS4KKyUKKyUgU2luY2Ugd2Ugd2FudCB0byBzZXBhcmF0ZSBWQVIgZnJvbSBSRVNULU9GLUxJTkUgKHdoaWNoIG1pZ2h0IGJlCislIGVtcHR5KSwgd2UgY2FuJ3QganVzdCB1c2UgXHBhcnNlYXJnOyB3ZSBoYXZlIHRvIGluc2VydCBhIHNwYWNlIG9mIG91cgorJSBvd24gdG8gZGVsaW1pdCB0aGUgcmVzdCBvZiB0aGUgbGluZSwgYW5kIHRoZW4gdGFrZSBpdCBvdXQgYWdhaW4gaWYgd2UKKyUgZGlkbid0IG5lZWQgaXQuCislIFdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBccGFyc2Vhcmcgc2V0cyBcY2F0Y29kZWBcID0xMC4KKyUKK1xwYXJzZWFyZ2RlZlxzZXR7XHNldHl5eSMxIFxlbmRzZXR5eXl9CitcZGVmXHNldHl5eSMxICMyXGVuZHNldHl5eXslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcZGVmXHRlbXB7IzJ9JQorICAgIFxlZGVmXG5leHR7XGdkZWZcbWFrZWNzbmFtZXtTRVQjMX19JQorICAgIFxpZnhcdGVtcFxlbXB0eQorICAgICAgXG5leHR7fSUKKyAgICBcZWxzZQorICAgICAgXHNldHp6eiMyXGVuZHNldHp6egorICAgIFxmaQorICB9JQorfQorJSBSZW1vdmUgdGhlIHRyYWlsaW5nIHNwYWNlIFxzZXR4eHggaW5zZXJ0ZWQuCitcZGVmXHNldHp6eiMxIFxlbmRzZXR6enp7XG5leHR7IzF9fQorCislIEBjbGVhciBWQVIgY2xlYXJzIChpLmUuLCB1bnNldHMpIHRoZSB2YXJpYWJsZSBWQVIuCislCitccGFyc2VhcmdkZWZcY2xlYXJ7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIFNFVCMxXGVuZGNzbmFtZT1ccmVsYXgKKyAgfSUKK30KKworJSBAdmFsdWV7Zm9vfSBnZXRzIHRoZSB0ZXh0IHNhdmVkIGluIHZhcmlhYmxlIGZvby4KK1xkZWZcdmFsdWV7XGJlZ2luZ3JvdXBcbWFrZXZhbHVlZXhwYW5kYWJsZVx2YWx1ZXh4eH0KK1xkZWZcdmFsdWV4eHgjMXtcZXhwYW5kYWJsZXZhbHVleyMxfVxlbmRncm91cH0KK3sKKyAgXGNhdGNvZGVgXC0gPSBcYWN0aXZlIFxjYXRjb2RlYFxfID0gXGFjdGl2ZQorICAlCisgIFxnZGVmXG1ha2V2YWx1ZWV4cGFuZGFibGV7JQorICAgIFxsZXRcdmFsdWUgPSBcZXhwYW5kYWJsZXZhbHVlCisgICAgJSBXZSBkb24ndCB3YW50IHRoZXNlIGNoYXJhY3RlcnMgYWN0aXZlLCAuLi4KKyAgICBcY2F0Y29kZWBcLT1cb3RoZXIgXGNhdGNvZGVgXF89XG90aGVyCisgICAgJSAuLi4sIGJ1dCB3ZSBtaWdodCBlbmQgdXAgd2l0aCBhY3RpdmUgb25lcyBpbiB0aGUgYXJndW1lbnQgaWYKKyAgICAlIHdlJ3JlIGNhbGxlZCBmcm9tIEBjb2RlLCBhcyBAY29kZXtAdmFsdWV7Zm9vLWJhcl99fSwgdGhvdWdoLgorICAgICUgU28gXGxldCB0aGVtIHRvIHRoZWlyIG5vcm1hbCBlcXVpdmFsZW50cy4KKyAgICBcbGV0LVxyZWFsZGFzaCBcbGV0X1xub3JtYWx1bmRlcnNjb3JlCisgIH0KK30KKworJSBXZSBoYXZlIHRoaXMgc3Vicm91dGluZSBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgYXQgbGVhc3Qgc29tZSBAdmFsdWUncworJSBwcm9wZXJseSBpbiBpbmRleGVzICh3ZSBjYWxsIFxtYWtldmFsdWVleHBhbmRhYmxlIGluIFxpbmRleGR1bW1pZXMpLgorJSBUaGUgY29tbWFuZCBoYXMgdG8gYmUgZnVsbHkgZXhwYW5kYWJsZSAoaWYgdGhlIHZhcmlhYmxlIGlzIHNldCksIHNpbmNlCislIHRoZSByZXN1bHQgd2luZHMgdXAgaW4gdGhlIGluZGV4IGZpbGUuICBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlCislIHZhcmlhYmxlJ3MgdmFsdWUgY29udGFpbnMgb3RoZXIgVGV4aW5mbyBjb21tYW5kcywgaXQncyBhbG1vc3QgY2VydGFpbgorJSBpdCB3aWxsIGZhaWwgKGFsdGhvdWdoIHBlcmhhcHMgd2UgY291bGQgZml4IHRoYXQgd2l0aCBzdWZmaWNpZW50IHdvcmsKKyUgdG8gZG8gYSBvbmUtbGV2ZWwgZXhwYW5zaW9uIG9uIHRoZSByZXN1bHQsIGluc3RlYWQgb2YgY29tcGxldGUpLgorJQorXGRlZlxleHBhbmRhYmxldmFsdWUjMXslCisgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVCMxXGVuZGNzbmFtZVxyZWxheAorICAgIHtbTm8gdmFsdWUgZm9yIGBgIzEnJ119JQorICAgIFxtZXNzYWdle1ZhcmlhYmxlIGAjMScsIHVzZWQgaW4gQHZhbHVlLCBpcyBub3Qgc2V0Ln0lCisgIFxlbHNlCisgICAgXGNzbmFtZSBTRVQjMVxlbmRjc25hbWUKKyAgXGZpCit9CisKKyUgQGlmc2V0IFZBUiAuLi4gQGVuZCBpZnNldCByZWFkcyB0aGUgYC4uLicgaWZmIFZBUiBoYXMgYmVlbiBkZWZpbmVkCislIHdpdGggQHNldC4KKyUKKyUgVG8gZ2V0IHNwZWNpYWwgdHJlYXRtZW50IG9mIGBAZW5kIGlmc2V0LCcgY2FsbCBcbWFrZW9uZCBhbmQgdGhlIHJlZGVmaW5lLgorJQorXG1ha2Vjb25ke2lmc2V0fQorXGRlZlxpZnNldHtccGFyc2Vhcmd7XGRvaWZzZXR7XGxldFxuZXh0PVxpZnNldGZhaWx9fX0KK1xkZWZcZG9pZnNldCMxIzJ7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGxldFxuZXh0PVxlbXB0eQorICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVCMyXGVuZGNzbmFtZVxyZWxheAorICAgICAgIzElIElmIG5vdCBzZXQsIHJlZGVmaW5lIFxuZXh0LgorICAgIFxmaQorICAgIFxleHBhbmRhZnRlcgorICB9XG5leHQKK30KK1xkZWZcaWZzZXRmYWlse1xkb2lnbm9yZXtpZnNldH19CisKKyUgQGlmY2xlYXIgVkFSIC4uLiBAZW5kIGlmY2xlYXIgcmVhZHMgdGhlIGAuLi4nIGlmZiBWQVIgaGFzIG5ldmVyIGJlZW4KKyUgZGVmaW5lZCB3aXRoIEBzZXQsIG9yIGhhcyBiZWVuIHVuZGVmaW5lZCB3aXRoIEBjbGVhci4KKyUKKyUgVGhlIGBcZWxzZScgaW5zaWRlIHRoZSBgXGRvaWZzZXQnIHBhcmFtZXRlciBpcyBhIHRyaWNrIHRvIHJldXNlIHRoZQorJSBhYm92ZSBjb2RlOiBpZiB0aGUgdmFyaWFibGUgaXMgbm90IHNldCwgZG8gbm90aGluZywgaWYgaXQgaXMgc2V0LAorJSB0aGVuIHJlZGVmaW5lIFxuZXh0IHRvIFxpZmNsZWFyZmFpbC4KKyUKK1xtYWtlY29uZHtpZmNsZWFyfQorXGRlZlxpZmNsZWFye1xwYXJzZWFyZ3tcZG9pZnNldHtcZWxzZSBcbGV0XG5leHQ9XGlmY2xlYXJmYWlsfX19CitcZGVmXGlmY2xlYXJmYWlse1xkb2lnbm9yZXtpZmNsZWFyfX0KKworJSBAZGlyY2F0ZWdvcnkgQ0FURUdPUlkgIC0tIHNwZWNpZnkgYSBjYXRlZ29yeSBvZiB0aGUgZGlyIGZpbGUKKyUgd2hpY2ggdGhpcyBmaWxlIHNob3VsZCBiZWxvbmcgdG8uICBJZ25vcmUgdGhpcyBpbiBUZVguCitcbGV0XGRpcmNhdGVnb3J5PVxjb21tZW50CisKKyUgQGRlZmluaW5mb2VuY2xvc2UuCitcbGV0XGRlZmluZm9lbmNsb3NlPVxjb21tZW50CisKKworXG1lc3NhZ2V7aW5kZXhpbmcsfQorJSBJbmRleCBnZW5lcmF0aW9uIGZhY2lsaXRpZXMKKworJSBEZWZpbmUgXG5ld3dyaXRlIHRvIGJlIGlkZW50aWNhbCB0byBwbGFpbiB0ZXgncyBcbmV3d3JpdGUKKyUgZXhjZXB0IG5vdCBcb3V0ZXIsIHNvIGl0IGNhbiBiZSB1c2VkIHdpdGhpbiBtYWNyb3MgYW5kIFxpZidzLgorXGVkZWZcbmV3d3JpdGV7XG1ha2Vjc25hbWV7cHRleG5ld3dyaXRlfX0KKworJSBcbmV3aW5kZXgge2Zvb30gZGVmaW5lcyBhbiBpbmRleCBuYW1lZCBmb28uCislIEl0IGF1dG9tYXRpY2FsbHkgZGVmaW5lcyBcZm9vaW5kZXggc3VjaCB0aGF0CislIFxmb29pbmRleCAuLi5yZXN0IG9mIGxpbmUuLi4gcHV0cyBhbiBlbnRyeSBpbiB0aGUgaW5kZXggZm9vLgorJSBJdCBhbHNvIGRlZmluZXMgXGZvb2luZGZpbGUgdG8gYmUgdGhlIG51bWJlciBvZiB0aGUgb3V0cHV0IGNoYW5uZWwgZm9yCislIHRoZSBmaWxlIHRoYXQgYWNjdW11bGF0ZXMgdGhpcyBpbmRleC4gIFRoZSBmaWxlJ3MgZXh0ZW5zaW9uIGlzIGZvby4KKyUgVGhlIG5hbWUgb2YgYW4gaW5kZXggc2hvdWxkIGJlIG5vIG1vcmUgdGhhbiAyIGNoYXJhY3RlcnMgbG9uZworJSBmb3IgdGhlIHNha2Ugb2Ygdm1zLgorJQorXGRlZlxuZXdpbmRleCMxeyUKKyAgXGlmbGlua3MKKyAgICBcZXhwYW5kYWZ0ZXJcbmV3d3JpdGUgXGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWUKKyAgICBcb3Blbm91dCBcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZSBcam9ibmFtZS4jMSAlIE9wZW4gdGhlIGZpbGUKKyAgXGZpCisgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSMxaW5kZXhcZW5kY3NuYW1leyUgICAgICUgRGVmaW5lIEAjMWluZGV4CisgICAgXG5vZXhwYW5kXGRvaW5kZXh7IzF9fQorfQorCislIEBkZWZpbmRleCBmb28gID09ICBcbmV3aW5kZXh7Zm9vfQorJQorXGRlZlxkZWZpbmRleHtccGFyc2VhcmdcbmV3aW5kZXh9CisKKyUgRGVmaW5lIEBkZWZjb2RlaW5kZXgsIGxpa2UgQGRlZmluZGV4IGV4Y2VwdCBwdXQgYWxsIGVudHJpZXMgaW4gQGNvZGUuCislCitcZGVmXGRlZmNvZGVpbmRleHtccGFyc2VhcmdcbmV3Y29kZWluZGV4fQorJQorXGRlZlxuZXdjb2RlaW5kZXgjMXslCisgIFxpZmxpbmtzCisgICAgXGV4cGFuZGFmdGVyXG5ld3dyaXRlIFxjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lCisgICAgXG9wZW5vdXQgXGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWUgXGpvYm5hbWUuIzEKKyAgXGZpCisgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSMxaW5kZXhcZW5kY3NuYW1leyUKKyAgICBcbm9leHBhbmRcZG9jb2RlaW5kZXh7IzF9fSUKK30KKworCislIEBzeW5pbmRleCBmb28gYmFyICAgIG1ha2VzIGluZGV4IGZvbyBmZWVkIGludG8gaW5kZXggYmFyLgorJSBEbyB0aGlzIGluc3RlYWQgb2YgQGRlZmluZGV4IGZvbyBpZiB5b3UgZG9uJ3Qgd2FudCBpdCBhcyBhIHNlcGFyYXRlIGluZGV4LgorJQorJSBAc3luY29kZWluZGV4IGZvbyBiYXIgICBzaW1pbGFyLCBidXQgcHV0IGFsbCBlbnRyaWVzIG1hZGUgZm9yIGluZGV4IGZvbworJSBpbnNpZGUgQGNvZGUuCislCitcZGVmXHN5bmluZGV4IzEgIzIge1xkb3N5bmluZGV4XGRvaW5kZXh7IzF9eyMyfX0KK1xkZWZcc3luY29kZWluZGV4IzEgIzIge1xkb3N5bmluZGV4XGRvY29kZWluZGV4eyMxfXsjMn19CisKKyUgIzEgaXMgXGRvaW5kZXggb3IgXGRvY29kZWluZGV4LCAjMiB0aGUgaW5kZXggZ2V0dGluZyByZWRlZmluZWQgKGZvbyksCislICMzIHRoZSB0YXJnZXQgaW5kZXggKGJhcikuCitcZGVmXGRvc3luaW5kZXgjMSMyIzN7JQorICAlIE9ubHkgZG8gXGNsb3Nlb3V0IGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBkb25lIGl0LCBlbHNlIHdlJ2xsIGVuZCB1cAorICAlIGNsb3NpbmcgdGhlIHRhcmdldCBpbmRleC4KKyAgXGV4cGFuZGFmdGVyIFxpZnhcY3NuYW1lIGRvbmVzeW5pbmRleCMyXGVuZGNzbmFtZSBcdW5kZWZpbmVkCisgICAgJSBUaGUgXGNsb3Nlb3V0IGhlbHBzIHJlZHVjZSB1bm5lY2Vzc2FyeSBvcGVuIGZpbGVzOyB0aGUgbGltaXQgb24gdGhlCisgICAgJSBBY29ybiBSSVNDIE9TIGlzIGEgbWVyZSAxNiBmaWxlcy4KKyAgICBcZXhwYW5kYWZ0ZXJcY2xvc2VvdXRcY3NuYW1lIzJpbmRmaWxlXGVuZGNzbmFtZQorICAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lXGRvbmVzeW5pbmRleCMyXGVuZGNzbmFtZSA9IDEKKyAgXGZpCisgICUgcmVkZWZpbmUgXGZvb2luZGZpbGU6CisgIFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXJcdGVtcFxleHBhbmRhZnRlcj1cY3NuYW1lIzNpbmRmaWxlXGVuZGNzbmFtZQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSMyaW5kZmlsZVxlbmRjc25hbWU9XHRlbXAKKyAgJSByZWRlZmluZSBcZm9vaW5kZXg6CisgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSMyaW5kZXhcZW5kY3NuYW1le1xub2V4cGFuZCMxeyMzfX0lCit9CisKKyUgRGVmaW5lIFxkb2luZGV4LCB0aGUgZHJpdmVyIGZvciBhbGwgXGZvb2luZGV4IG1hY3Jvcy4KKyUgQXJndW1lbnQgIzEgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBjYWxsaW5nIFxmb29pbmRleCBtYWNybywKKyUgIGFuZCBpdCBpcyAiZm9vIiwgdGhlIG5hbWUgb2YgdGhlIGluZGV4LgorCislIFxkb2luZGV4IGp1c3QgdXNlcyBccGFyc2Vhcmc7IGl0IGNhbGxzIFxkb2luZCBmb3IgdGhlIGFjdHVhbCB3b3JrLgorJSBUaGlzIGlzIGJlY2F1c2UgXGRvaW5kIGlzIG1vcmUgdXNlZnVsIHRvIGNhbGwgZnJvbSBvdGhlciBtYWNyb3MuCisKKyUgVGhlcmUgaXMgYWxzbyBcZG9zdWJpbmQge2luZGV4fXt0b3BpY317c3VidG9waWN9CislIHdoaWNoIG1ha2VzIGFuIGVudHJ5IGluIGEgdHdvLWxldmVsIGluZGV4IHN1Y2ggYXMgdGhlIG9wZXJhdGlvbiBpbmRleC4KKworXGRlZlxkb2luZGV4IzF7XGVkZWZcaW5kZXhuYW1leyMxfVxwYXJzZWFyZ1xzaW5nbGVpbmRleGVyfQorXGRlZlxzaW5nbGVpbmRleGVyICMxe1xkb2luZHtcaW5kZXhuYW1lfXsjMX19CisKKyUgbGlrZSB0aGUgcHJldmlvdXMgdHdvLCBidXQgdGhleSBwdXQgQGNvZGUgYXJvdW5kIHRoZSBhcmd1bWVudC4KK1xkZWZcZG9jb2RlaW5kZXgjMXtcZWRlZlxpbmRleG5hbWV7IzF9XHBhcnNlYXJnXHNpbmdsZWNvZGVpbmRleGVyfQorXGRlZlxzaW5nbGVjb2RlaW5kZXhlciAjMXtcZG9pbmR7XGluZGV4bmFtZX17XGNvZGV7IzF9fX0KKworJSBUYWtlIGNhcmUgb2YgVGV4aW5mbyBjb21tYW5kcyB0aGF0IGNhbiBhcHBlYXIgaW4gYW4gaW5kZXggZW50cnkuCislIFNpbmNlIHRoZXJlIGFyZSBzb21lIGNvbW1hbmRzIHdlIHdhbnQgdG8gZXhwYW5kLCBhbmQgb3RoZXJzIHdlIGRvbid0LAorJSB3ZSBoYXZlIHRvIGxhYm9yaW91c2x5IHByZXZlbnQgZXhwYW5zaW9uIGZvciB0aG9zZSB0aGF0IHdlIGRvbid0LgorJQorXGRlZlxpbmRleGR1bW1pZXN7JQorICBcZXNjYXBlY2hhciA9IGBcXCAgICAgJSB1c2UgYmFja3NsYXNoIGluIG91dHB1dCBmaWxlcy4KKyAgXGRlZlxAe0B9JSBjaGFuZ2UgdG8gQEAgd2hlbiB3ZSBzd2l0Y2ggdG8gQCBhcyBlc2NhcGUgY2hhciBpbiBpbmRleCBmaWxlcy4KKyAgXGRlZlwge1xyZWFsYmFja3NsYXNoXHNwYWNlIH0lCisgICUgTmVlZCB0aGVzZSBpbiBjYXNlIFx0ZXggaXMgaW4gZWZmZWN0IGFuZCBceyBpcyBhIFxkZWxpbWl0ZXIgYWdhaW4uCisgICUgQnV0IGNhbid0IHVzZSBcbGJyYWNlY21kIGFuZCBccmJyYWNlY21kIGJlY2F1c2UgdGV4aW5kZXggYXNzdW1lcworICAlIGJyYWNlcyBhbmQgYmFja3NsYXNoZXMgYXJlIHVzZWQgb25seSBhcyBkZWxpbWl0ZXJzLgorICBcbGV0XHsgPSBcbXlsYnJhY2UKKyAgXGxldFx9ID0gXG15cmJyYWNlCisgICUKKyAgJSBEbyB0aGUgcmVkZWZpbml0aW9ucy4KKyAgXGNvbW1vbmR1bW1pZXMKK30KKworJSBGb3IgdGhlIGF1eCBhbmQgdG9jIGZpbGVzLCBAIGlzIHRoZSBlc2NhcGUgY2hhcmFjdGVyLiAgU28gd2Ugd2FudCB0bworJSByZWRlZmluZSBldmVyeXRoaW5nIHVzaW5nIEAgYXMgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgKGluc3RlYWQgb2YKKyUgXHJlYWxiYWNrc2xhc2gsIHN0aWxsIHVzZWQgZm9yIGluZGV4IGZpbGVzKS4gIFdoZW4gZXZlcnl0aGluZyB1c2VzIEAsCislIHRoaXMgd2lsbCBiZSBzaW1wbGVyLgorJQorXGRlZlxhdGR1bW1pZXN7JQorICBcZGVmXEB7QEB9JQorICBcZGVmXCB7QCB9JQorICBcbGV0XHsgPSBcbGJyYWNlYXRjbWQKKyAgXGxldFx9ID0gXHJicmFjZWF0Y21kCisgICUKKyAgJSBEbyB0aGUgcmVkZWZpbml0aW9ucy4KKyAgXGNvbW1vbmR1bW1pZXMKKyAgXG90aGVyYmFja3NsYXNoCit9CisKKyUgQ2FsbGVkIGZyb20gXGluZGV4ZHVtbWllcyBhbmQgXGF0ZHVtbWllcy4KKyUKK1xkZWZcY29tbW9uZHVtbWllc3slCisgICUKKyAgJSBcZGVmaW5lZHVtbXl3b3JkIGRlZmluZXMgXCMxIGFzIFxzdHJpbmdcIzFcc3BhY2UsIHRodXMgZWZmZWN0aXZlbHkKKyAgJSBwcmV2ZW50aW5nIGl0cyBleHBhbnNpb24uICBUaGlzIGlzIHVzZWQgb25seSBmb3IgY29udHJvbCUgd29yZHMsCisgICUgbm90IGNvbnRyb2wgbGV0dGVycywgYmVjYXVzZSB0aGUgXHNwYWNlIHdvdWxkIGJlIGluY29ycmVjdCBmb3IKKyAgJSBjb250cm9sIGNoYXJhY3RlcnMsIGJ1dCBpcyBuZWVkZWQgdG8gc2VwYXJhdGUgdGhlIGNvbnRyb2wgd29yZAorICAlIGZyb20gd2hhdGV2ZXIgZm9sbG93cy4KKyAgJQorICAlIEZvciBjb250cm9sIGxldHRlcnMsIHdlIGhhdmUgXGRlZmluZWR1bW15bGV0dGVyLCB3aGljaCBvbWl0cyB0aGUKKyAgJSBzcGFjZS4KKyAgJQorICAlIFRoZXNlIGNhbiBiZSB1c2VkIGJvdGggZm9yIGNvbnRyb2wgd29yZHMgdGhhdCB0YWtlIGFuIGFyZ3VtZW50IGFuZAorICAlIHRob3NlIHRoYXQgZG8gbm90LiAgSWYgaXQgaXMgZm9sbG93ZWQgYnkge2FyZ30gaW4gdGhlIGlucHV0LCB0aGVuCisgICUgdGhhdCB3aWxsIGR1dGlmdWxseSBnZXQgd3JpdHRlbiB0byB0aGUgaW5kZXggKG9yIHdoZXJldmVyKS4KKyAgJQorICBcZGVmXGRlZmluZWR1bW15d29yZCAgIyMxe1xkZWYjIzF7XHN0cmluZyMjMVxzcGFjZX19JQorICBcZGVmXGRlZmluZWR1bW15bGV0dGVyIyMxe1xkZWYjIzF7XHN0cmluZyMjMX19JQorICBcbGV0XGRlZmluZWR1bW15YWNjZW50XGRlZmluZWR1bW15bGV0dGVyCisgICUKKyAgXGNvbW1vbmR1bW1pZXNub2ZvbnRzCisgICUKKyAgXGRlZmluZWR1bW15bGV0dGVyXF8lCisgICUKKyAgJSBOb24tRW5nbGlzaCBsZXR0ZXJzLgorICBcZGVmaW5lZHVtbXl3b3JkXEFBCisgIFxkZWZpbmVkdW1teXdvcmRcQUUKKyAgXGRlZmluZWR1bW15d29yZFxMCisgIFxkZWZpbmVkdW1teXdvcmRcT0UKKyAgXGRlZmluZWR1bW15d29yZFxPCisgIFxkZWZpbmVkdW1teXdvcmRcYWEKKyAgXGRlZmluZWR1bW15d29yZFxhZQorICBcZGVmaW5lZHVtbXl3b3JkXGwKKyAgXGRlZmluZWR1bW15d29yZFxvZQorICBcZGVmaW5lZHVtbXl3b3JkXG8KKyAgXGRlZmluZWR1bW15d29yZFxzcworICBcZGVmaW5lZHVtbXl3b3JkXGV4Y2xhbWRvd24KKyAgXGRlZmluZWR1bW15d29yZFxxdWVzdGlvbmRvd24KKyAgXGRlZmluZWR1bW15d29yZFxvcmRmCisgIFxkZWZpbmVkdW1teXdvcmRcb3JkbQorICAlCisgICUgQWx0aG91Z2ggdGhlc2UgaW50ZXJuYWwgY29tbWFuZHMgc2hvdWxkbid0IHNob3cgdXAsIHNvbWV0aW1lcyB0aGV5IGRvLgorICBcZGVmaW5lZHVtbXl3b3JkXGJmCisgIFxkZWZpbmVkdW1teXdvcmRcZ3RyCisgIFxkZWZpbmVkdW1teXdvcmRcaGF0CisgIFxkZWZpbmVkdW1teXdvcmRcbGVzcworICBcZGVmaW5lZHVtbXl3b3JkXHNmCisgIFxkZWZpbmVkdW1teXdvcmRcc2wKKyAgXGRlZmluZWR1bW15d29yZFx0Y2xvc2UKKyAgXGRlZmluZWR1bW15d29yZFx0dAorICAlCisgIFxkZWZpbmVkdW1teXdvcmRcTGFUZVgKKyAgXGRlZmluZWR1bW15d29yZFxUZVgKKyAgJQorICAlIEFzc29ydGVkIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgXGRlZmluZWR1bW15d29yZFxidWxsZXQKKyAgXGRlZmluZWR1bW15d29yZFxjb21tYQorICBcZGVmaW5lZHVtbXl3b3JkXGNvcHlyaWdodAorICBcZGVmaW5lZHVtbXl3b3JkXHJlZ2lzdGVyZWRzeW1ib2wKKyAgXGRlZmluZWR1bW15d29yZFxkb3RzCisgIFxkZWZpbmVkdW1teXdvcmRcZW5kZG90cworICBcZGVmaW5lZHVtbXl3b3JkXGVxdWl2CisgIFxkZWZpbmVkdW1teXdvcmRcZXJyb3IKKyAgXGRlZmluZWR1bW15d29yZFxldXJvCisgIFxkZWZpbmVkdW1teXdvcmRcZXhwYW5zaW9uCisgIFxkZWZpbmVkdW1teXdvcmRcbWludXMKKyAgXGRlZmluZWR1bW15d29yZFxwb3VuZHMKKyAgXGRlZmluZWR1bW15d29yZFxwb2ludAorICBcZGVmaW5lZHVtbXl3b3JkXHByaW50CisgIFxkZWZpbmVkdW1teXdvcmRccmVzdWx0CisgICUKKyAgJSBXZSB3YW50IHRvIGRpc2FibGUgYWxsIG1hY3JvcyBzbyB0aGF0IHRoZXkgYXJlIG5vdCBleHBhbmRlZCBieSBcd3JpdGUuCisgIFxtYWNyb2xpc3QKKyAgJQorICBcbm9ybWFsdHVybm9mZmFjdGl2ZQorICAlCisgICUgSGFuZGxlIHNvbWUgY2FzZXMgb2YgQHZhbHVlIC0tIHdoZXJlIGl0IGRvZXMgbm90IGNvbnRhaW4gYW55CisgICUgKG5vbi1mdWxseS1leHBhbmRhYmxlKSBjb21tYW5kcy4KKyAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKK30KKworJSBcY29tbW9uZHVtbWllc25vZm9udHM6IGNvbW1vbiB0byBcY29tbW9uZHVtbWllcyBhbmQgXGluZGV4bm9mb250cy4KKyUKK1xkZWZcY29tbW9uZHVtbWllc25vZm9udHN7JQorICAlIENvbnRyb2wgbGV0dGVycyBhbmQgYWNjZW50cy4KKyAgXGRlZmluZWR1bW15bGV0dGVyXCElCisgIFxkZWZpbmVkdW1teWFjY2VudFwiJQorICBcZGVmaW5lZHVtbXlhY2NlbnRcJyUKKyAgXGRlZmluZWR1bW15bGV0dGVyXColCisgIFxkZWZpbmVkdW1teWFjY2VudFwsJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcLiUKKyAgXGRlZmluZWR1bW15bGV0dGVyXC8lCisgIFxkZWZpbmVkdW1teWxldHRlclw6JQorICBcZGVmaW5lZHVtbXlhY2NlbnRcPSUKKyAgXGRlZmluZWR1bW15bGV0dGVyXD8lCisgIFxkZWZpbmVkdW1teWFjY2VudFxeJQorICBcZGVmaW5lZHVtbXlhY2NlbnRcYCUKKyAgXGRlZmluZWR1bW15YWNjZW50XH4lCisgIFxkZWZpbmVkdW1teXdvcmRcdQorICBcZGVmaW5lZHVtbXl3b3JkXHYKKyAgXGRlZmluZWR1bW15d29yZFxICisgIFxkZWZpbmVkdW1teXdvcmRcZG90YWNjZW50CisgIFxkZWZpbmVkdW1teXdvcmRccmluZ2FjY2VudAorICBcZGVmaW5lZHVtbXl3b3JkXHRpZWFjY2VudAorICBcZGVmaW5lZHVtbXl3b3JkXHViYXJhY2NlbnQKKyAgXGRlZmluZWR1bW15d29yZFx1ZG90YWNjZW50CisgIFxkZWZpbmVkdW1teXdvcmRcZG90bGVzcworICAlCisgICUgVGV4aW5mbyBmb250IGNvbW1hbmRzLgorICBcZGVmaW5lZHVtbXl3b3JkXGIKKyAgXGRlZmluZWR1bW15d29yZFxpCisgIFxkZWZpbmVkdW1teXdvcmRccgorICBcZGVmaW5lZHVtbXl3b3JkXHNjCisgIFxkZWZpbmVkdW1teXdvcmRcdAorICAlCisgICUgQ29tbWFuZHMgdGhhdCB0YWtlIGFyZ3VtZW50cy4KKyAgXGRlZmluZWR1bW15d29yZFxhY3JvbnltCisgIFxkZWZpbmVkdW1teXdvcmRcY2l0ZQorICBcZGVmaW5lZHVtbXl3b3JkXGNvZGUKKyAgXGRlZmluZWR1bW15d29yZFxjb21tYW5kCisgIFxkZWZpbmVkdW1teXdvcmRcZGZuCisgIFxkZWZpbmVkdW1teXdvcmRcZW1waAorICBcZGVmaW5lZHVtbXl3b3JkXGVudgorICBcZGVmaW5lZHVtbXl3b3JkXGZpbGUKKyAgXGRlZmluZWR1bW15d29yZFxrYmQKKyAgXGRlZmluZWR1bW15d29yZFxrZXkKKyAgXGRlZmluZWR1bW15d29yZFxtYXRoCisgIFxkZWZpbmVkdW1teXdvcmRcb3B0aW9uCisgIFxkZWZpbmVkdW1teXdvcmRccHhyZWYKKyAgXGRlZmluZWR1bW15d29yZFxyZWYKKyAgXGRlZmluZWR1bW15d29yZFxzYW1wCisgIFxkZWZpbmVkdW1teXdvcmRcc3Ryb25nCisgIFxkZWZpbmVkdW1teXdvcmRcdGllCisgIFxkZWZpbmVkdW1teXdvcmRcdXJlZgorICBcZGVmaW5lZHVtbXl3b3JkXHVybAorICBcZGVmaW5lZHVtbXl3b3JkXHZhcgorICBcZGVmaW5lZHVtbXl3b3JkXHZlcmIKKyAgXGRlZmluZWR1bW15d29yZFx3CisgIFxkZWZpbmVkdW1teXdvcmRceHJlZgorfQorCislIFxpbmRleG5vZm9udHMgaXMgdXNlZCB3aGVuIG91dHB1dHRpbmcgdGhlIHN0cmluZ3MgdG8gc29ydCB0aGUgaW5kZXgKKyUgYnksIGFuZCB3aGVuIGNvbnN0cnVjdGluZyBjb250cm9sIHNlcXVlbmNlIG5hbWVzLiAgSXQgZWxpbWluYXRlcyBhbGwKKyUgY29udHJvbCBzZXF1ZW5jZXMgYW5kIGp1c3Qgd3JpdGVzIHdoYXRldmVyIHRoZSBiZXN0IEFTQ0lJIHNvcnQgc3RyaW5nCislIHdvdWxkIGJlIGZvciBhIGdpdmVuIGNvbW1hbmQgKHVzdWFsbHkgaXRzIGFyZ3VtZW50KS4KKyUKK1xkZWZcaW5kZXhub2ZvbnRzeyUKKyAgJSBBY2NlbnQgY29tbWFuZHMgc2hvdWxkIGJlY29tZSBAYXNpcy4KKyAgXGRlZlxkZWZpbmVkdW1teWFjY2VudCMjMXtcbGV0IyMxXGFzaXN9JQorICAlIFdlIGNhbiBqdXN0IGlnbm9yZSBvdGhlciBjb250cm9sIGxldHRlcnMuCisgIFxkZWZcZGVmaW5lZHVtbXlsZXR0ZXIjIzF7XGxldCMjMVxlbXB0eX0lCisgICUgSG9wZWZ1bGx5LCBhbGwgY29udHJvbCB3b3JkcyBjYW4gYmVjb21lIEBhc2lzLgorICBcbGV0XGRlZmluZWR1bW15d29yZFxkZWZpbmVkdW1teWFjY2VudAorICAlCisgIFxjb21tb25kdW1taWVzbm9mb250cworICAlCisgICUgRG9uJ3Qgbm8tb3AgXHR0LCBzaW5jZSBpdCBpc24ndCBhIHVzZXItbGV2ZWwgY29tbWFuZAorICAlIGFuZCBpcyB1c2VkIGluIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgYWN0aXZlIGNoYXJzIGxpa2UgPCwgPiwgfCwgZXRjLgorICAlIExpa2V3aXNlIHdpdGggdGhlIG90aGVyIHBsYWluIHRleCBmb250IGNvbW1hbmRzLgorICAlXGxldFx0dD1cYXNpcworICAlCisgIFxkZWZcIHsgfSUKKyAgXGRlZlxAe0B9JQorICAlIGhvdyB0byBoYW5kbGUgYnJhY2VzPworICBcZGVmXF97XG5vcm1hbHVuZGVyc2NvcmV9JQorICAlCisgICUgTm9uLUVuZ2xpc2ggbGV0dGVycy4KKyAgXGRlZlxBQXtBQX0lCisgIFxkZWZcQUV7QUV9JQorICBcZGVmXEx7TH0lCisgIFxkZWZcT0V7T0V9JQorICBcZGVmXE97T30lCisgIFxkZWZcYWF7YWF9JQorICBcZGVmXGFle2FlfSUKKyAgXGRlZlxse2x9JQorICBcZGVmXG9le29lfSUKKyAgXGRlZlxve299JQorICBcZGVmXHNze3NzfSUKKyAgXGRlZlxleGNsYW1kb3dueyF9JQorICBcZGVmXHF1ZXN0aW9uZG93bns/fSUKKyAgXGRlZlxvcmRme2F9JQorICBcZGVmXG9yZG17b30lCisgICUKKyAgXGRlZlxMYVRlWHtMYVRlWH0lCisgIFxkZWZcVGVYe1RlWH0lCisgICUKKyAgJSBBc3NvcnRlZCBzcGVjaWFsIGNoYXJhY3RlcnMuCisgICUgKFRoZSBmb2xsb3dpbmcge30gd2lsbCBlbmQgdXAgaW4gdGhlIHNvcnQgc3RyaW5nLCBidXQgdGhhdCdzIG9rLikKKyAgXGRlZlxidWxsZXR7YnVsbGV0fSUKKyAgXGRlZlxjb21tYXssfSUKKyAgXGRlZlxjb3B5cmlnaHR7Y29weXJpZ2h0fSUKKyAgXGRlZlxyZWdpc3RlcmVkc3ltYm9se1J9JQorICBcZGVmXGRvdHN7Li4ufSUKKyAgXGRlZlxlbmRkb3Rzey4uLn0lCisgIFxkZWZcZXF1aXZ7PT19JQorICBcZGVmXGVycm9ye2Vycm9yfSUKKyAgXGRlZlxldXJve2V1cm99JQorICBcZGVmXGV4cGFuc2lvbns9PT59JQorICBcZGVmXG1pbnVzey19JQorICBcZGVmXHBvdW5kc3twb3VuZHN9JQorICBcZGVmXHBvaW50ey59JQorICBcZGVmXHByaW50ey18fSUKKyAgXGRlZlxyZXN1bHR7PT59JQorICAlCisgICUgV2UgbmVlZCB0byBnZXQgcmlkIG9mIGFsbCBtYWNyb3MsIGxlYXZpbmcgb25seSB0aGUgYXJndW1lbnRzIChpZiBwcmVzZW50KS4KKyAgJSBPZiBjb3Vyc2UgdGhpcyBpcyBub3QgbmVhcmx5IGNvcnJlY3QsIGJ1dCBpdCBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8gZm9yIG5vdy4KKyAgJSBtYWtlaW5mbyBkb2VzIG5vdCBleHBhbmQgbWFjcm9zIGluIHRoZSBhcmd1bWVudCB0byBAZGVmZm4sIHdoaWNoIGVuZHMgdXAKKyAgJSB3cml0aW5nIGFuIGluZGV4IGVudHJ5LCBhbmQgdGV4aW5kZXggaXNuJ3QgcHJlcGFyZWQgZm9yIGFuIGluZGV4IHNvcnQgZW50cnkKKyAgJSB0aGF0IHN0YXJ0cyB3aXRoIFwuCisgICUgCisgICUgU2luY2UgbWFjcm8gaW52b2NhdGlvbnMgYXJlIGZvbGxvd2VkIGJ5IGJyYWNlcywgd2UgY2FuIGp1c3QgcmVkZWZpbmUgdGhlbQorICAlIHRvIHRha2UgYSBzaW5nbGUgVGVYIGFyZ3VtZW50LiAgVGhlIGNhc2Ugb2YgYSBtYWNybyBpbnZvY2F0aW9uIHRoYXQKKyAgJSBnb2VzIHRvIGVuZC1vZi1saW5lIGlzIG5vdCBoYW5kbGVkLgorICAlIAorICBcbWFjcm9saXN0Cit9CisKK1xsZXRcaW5kZXhiYWNrc2xhc2g9MCAgJW92ZXJyaWRkZW4gZHVyaW5nIFxwcmludGluZGV4LgorXGxldFxTRVRtYXJnaW5pbmRleD1ccmVsYXggJSBwdXQgaW5kZXggZW50cmllcyBpbiBtYXJnaW4gKHVuZG9jdW1lbnRlZCk/CisKKyUgTW9zdCBpbmRleCBlbnRyaWVzIGdvIHRocm91Z2ggaGVyZSwgYnV0IFxkb3N1YmluZCBpcyB0aGUgZ2VuZXJhbCBjYXNlLgorJSAjMSBpcyB0aGUgaW5kZXggbmFtZSwgIzIgaXMgdGhlIGVudHJ5IHRleHQuCitcZGVmXGRvaW5kIzEjMntcZG9zdWJpbmR7IzF9eyMyfXt9fQorCislIFdvcmtob3JzZSBmb3IgYWxsIFxmb29pbmRleGVzLgorJSAjMSBpcyBuYW1lIG9mIGluZGV4LCAjMiBpcyBzdHVmZiB0byBwdXQgdGhlcmUsICMzIGlzIHN1YmVudHJ5IC0tCislIGVtcHR5IGlmIGNhbGxlZCBmcm9tIFxkb2luZCwgYXMgd2UgdXN1YWxseSBhcmUgKHRoZSBtYWluIGV4Y2VwdGlvbgorJSBpcyB3aXRoIG1vc3QgZGVmdW5zLCB3aGljaCBjYWxsIHVzIGRpcmVjdGx5KS4KKyUKK1xkZWZcZG9zdWJpbmQjMSMyIzN7JQorICBcaWZsaW5rcworICB7JQorICAgICUgU3RvcmUgdGhlIG1haW4gaW5kZXggZW50cnkgdGV4dCAoaW5jbHVkaW5nIHRoZSB0aGlyZCBhcmcpLgorICAgIFx0b2tzMCA9IHsjMn0lCisgICAgJSBJZiB0aGlyZCBhcmcgaXMgcHJlc2VudCwgcHJlY2VkZSBpdCB3aXRoIGEgc3BhY2UuCisgICAgXGRlZlx0aGlyZGFyZ3sjM30lCisgICAgXGlmeFx0aGlyZGFyZ1xlbXB0eSBcZWxzZQorICAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1x0aGVcdG9rczAgXHNwYWNlICMzfSUKKyAgICBcZmkKKyAgICAlCisgICAgXGVkZWZcd3JpdGV0b3tcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZX0lCisgICAgJQorICAgIFxpZnZtb2RlCisgICAgICBcZG9zdWJpbmRzYW5pdGl6ZQorICAgIFxlbHNlCisgICAgICBcZG9zdWJpbmR3cml0ZQorICAgIFxmaQorICB9JQorICBcZmkKK30KKworJSBXcml0ZSB0aGUgZW50cnkgaW4gXHRva3MwIHRvIHRoZSBpbmRleCBmaWxlOgorJQorXGRlZlxkb3N1YmluZHdyaXRleyUKKyAgJSBQdXQgdGhlIGluZGV4IGVudHJ5IGluIHRoZSBtYXJnaW4gaWYgZGVzaXJlZC4KKyAgXGlmeFxTRVRtYXJnaW5pbmRleFxyZWxheFxlbHNlCisgICAgXGluc2VydFxtYXJnaW57XGhib3h7XHZydWxlIGhlaWdodDhwdCBkZXB0aDNwdCB3aWR0aDBwdCBcdGhlXHRva3MwfX0lCisgIFxmaQorICAlCisgICUgUmVtZW1iZXIsIHdlIGFyZSB3aXRoaW4gYSBncm91cC4KKyAgXGluZGV4ZHVtbWllcyAlIE11c3QgZG8gdGhpcyBoZXJlLCBzaW5jZSBcYmYsIGV0YyBleHBhbmQgYXQgdGhpcyBzdGFnZQorICBcZGVmXGJhY2tzbGFzaGN1cmZvbnR7XGluZGV4YmFja3NsYXNofSUgXGluZGV4YmFja3NsYXNoIGlzbid0IGRlZmluZWQgbm93CisgICAgICAlIHNvIGl0IHdpbGwgYmUgb3V0cHV0IGFzIGlzOyBhbmQgaXQgd2lsbCBwcmludCBhcyBiYWNrc2xhc2guCisgICUKKyAgJSBQcm9jZXNzIHRoZSBpbmRleCBlbnRyeSB3aXRoIGFsbCBmb250IGNvbW1hbmRzIHR1cm5lZCBvZmYsIHRvCisgICUgZ2V0IHRoZSBzdHJpbmcgdG8gc29ydCBieS4KKyAge1xpbmRleG5vZm9udHMKKyAgIFxlZGVmXHRlbXB7XHRoZVx0b2tzMH0lIG5lZWQgZnVsbCBleHBhbnNpb24KKyAgIFx4ZGVmXGluZGV4c29ydHRtcHtcdGVtcH0lCisgIH0lCisgICUKKyAgJSBTZXQgdXAgdGhlIGNvbXBsZXRlIGluZGV4IGVudHJ5LCB3aXRoIGJvdGggdGhlIHNvcnQga2V5IGFuZAorICAlIHRoZSBvcmlnaW5hbCB0ZXh0LCBpbmNsdWRpbmcgYW55IGZvbnQgY29tbWFuZHMuICBXZSB3cml0ZQorICAlIHRocmVlIGFyZ3VtZW50cyB0byBcZW50cnkgdG8gdGhlIC4/PyBmaWxlIChmb3VyIGluIHRoZQorICAlIHN1YmVudHJ5IGNhc2UpLCB0ZXhpbmRleCByZWR1Y2VzIHRvIHR3byB3aGVuIHdyaXRpbmcgdGhlIC4/P3MKKyAgJSBzb3J0ZWQgcmVzdWx0LgorICBcZWRlZlx0ZW1weyUKKyAgICBcd3JpdGVcd3JpdGV0b3slCisgICAgICBcc3RyaW5nXGVudHJ5e1xpbmRleHNvcnR0bXB9e1xub2V4cGFuZFxmb2xpb317XHRoZVx0b2tzMH19JQorICB9JQorICBcdGVtcAorfQorCislIFRha2UgY2FyZSBvZiB1bndhbnRlZCBwYWdlIGJyZWFrczoKKyUKKyUgSWYgYSBza2lwIGlzIHRoZSBsYXN0IHRoaW5nIG9uIHRoZSBsaXN0IG5vdywgcHJlc2VydmUgaXQKKyUgYnkgYmFja2luZyB1cCBieSBcbGFzdHNraXAsIGRvaW5nIHRoZSBcd3JpdGUsIHRoZW4gaW5zZXJ0aW5nCislIHRoZSBza2lwIGFnYWluLiAgT3RoZXJ3aXNlLCB0aGUgd2hhdHNpdCBnZW5lcmF0ZWQgYnkgdGhlCislIFx3cml0ZSB3aWxsIG1ha2UgXGxhc3Rza2lwIHplcm8uICBUaGUgcmVzdWx0IGlzIHRoYXQgc2VxdWVuY2VzCislIGxpa2UgdGhpczoKKyUgQGVuZCBkZWZ1bgorJSBAdGluZGV4IHdoYXRldmVyCislIEBkZWZ1biAuLi4KKyUgd2lsbCBoYXZlIGV4dHJhIHNwYWNlIGluc2VydGVkLCBiZWNhdXNlIHRoZSBcbWVkYnJlYWsgaW4gdGhlCislIHN0YXJ0IG9mIHRoZSBAZGVmdW4gd29uJ3Qgc2VlIHRoZSBza2lwIGluc2VydGVkIGJ5IHRoZSBAZW5kIG9mCislIHRoZSBwcmV2aW91cyBkZWZ1bi4KKyUKKyUgQnV0IGRvbid0IGRvIGFueSBvZiB0aGlzIGlmIHdlJ3JlIG5vdCBpbiB2ZXJ0aWNhbCBtb2RlLiAgV2UKKyUgZG9uJ3Qgd2FudCB0byBkbyBhIFx2c2tpcCBhbmQgcHJlbWF0dXJlbHkgZW5kIGEgcGFyYWdyYXBoLgorJQorJSBBdm9pZCBwYWdlIGJyZWFrcyBkdWUgdG8gdGhlc2UgZXh0cmEgc2tpcHMsIHRvby4KKyUKKyUgQnV0IHdhaXQsIHRoZXJlIGlzIGEgY2F0Y2ggdGhlcmU6CislIFdlJ2xsIGhhdmUgdG8gY2hlY2sgd2hldGhlciBcbGFzdHNraXAgaXMgemVybyBza2lwLiAgXGlmZGltIGlzIG5vdAorJSBzdWZmaWNpZW50IGZvciB0aGlzIHB1cnBvc2UsIGFzIGl0IGlnbm9yZXMgc3RyZXRjaCBhbmQgc2hyaW5rIHBhcnRzCislIG9mIHRoZSBza2lwLiAgVGhlIG9ubHkgd2F5IHNlZW1zIHRvIGJlIHRvIGNoZWNrIHRoZSB0ZXh0dWFsCislIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBza2lwLgorJQorJSBUaGUgZm9sbG93aW5nIGlzIGFsbW9zdCBsaWtlIFxkZWZcemVyb3NraXBtYWNyb3swLjBwdH0gZXhjZXB0IHRoYXQKKyUgdGhlIGBgcCcnIGFuZCBgYHQnJyBjaGFyYWN0ZXJzIGhhdmUgY2F0Y29kZSBcb3RoZXIsIG5vdCAxMSAobGV0dGVyKS4KKyUKK1xlZGVmXHplcm9za2lwbWFjcm97XGV4cGFuZGFmdGVyXHRoZVxjc25hbWUgekBza2lwXGVuZGNzbmFtZX0KKyUKKyUgLi4uLCByZWFkeSwgR086CislCitcZGVmXGRvc3ViaW5kc2FuaXRpemV7JQorICAlIFxsYXN0c2tpcCBhbmQgXGxhc3RwZW5hbHR5IGNhbm5vdCBib3RoIGJlIG5vbnplcm8gc2ltdWx0YW5lb3VzbHkuCisgIFxza2lwMCA9IFxsYXN0c2tpcAorICBcZWRlZlxsYXN0c2tpcG1hY3Jve1x0aGVcbGFzdHNraXB9JQorICBcY291bnQyNTUgPSBcbGFzdHBlbmFsdHkKKyAgJQorICAlIElmIFxsYXN0c2tpcCBpcyBub256ZXJvLCB0aGF0IG1lYW5zIHRoZSBsYXN0IGl0ZW0gd2FzIGEKKyAgJSBza2lwLiAgQW5kIHNpbmNlIGEgc2tpcCBpcyBkaXNjYXJkYWJsZSwgdGhhdCBtZWFucyB0aGlzCisgICUgLVxza2lwMCBnbHVlIHdlJ3JlIGluc2VydGluZyBpcyBwcmVjZWRlZCBieSBhCisgICUgbm9uLWRpc2NhcmRhYmxlIGl0ZW0sIHRoZXJlZm9yZSBpdCBpcyBub3QgYSBwb3RlbnRpYWwKKyAgJSBicmVha3BvaW50LCB0aGVyZWZvcmUgbm8gXG5vYnJlYWsgbmVlZGVkLgorICBcaWZ4XGxhc3Rza2lwbWFjcm9cemVyb3NraXBtYWNybworICBcZWxzZQorICAgIFx2c2tpcC1cc2tpcDAKKyAgXGZpCisgICUKKyAgXGRvc3ViaW5kd3JpdGUKKyAgJQorICBcaWZ4XGxhc3Rza2lwbWFjcm9cemVyb3NraXBtYWNybworICAgICUgSWYgXGxhc3Rza2lwIHdhcyB6ZXJvLCBwZXJoYXBzIHRoZSBsYXN0IGl0ZW0gd2FzIGEgcGVuYWx0eSwgYW5kCisgICAgJSBwZXJoYXBzIGl0IHdhcyA+PTEwMDAwLCBlLmcuLCBhIFxub2JyZWFrLiAgSW4gdGhhdCBjYXNlLCB3ZSB3YW50CisgICAgJSB0byByZS1pbnNlcnQgdGhlIHNhbWUgcGVuYWx0eSAodmFsdWVzID4xMDAwMCBhcmUgdXNlZCBmb3IgdmFyaW91cworICAgICUgc2lnbmFscyk7IHNpbmNlIHdlIGp1c3QgaW5zZXJ0ZWQgYSBub24tZGlzY2FyZGFibGUgaXRlbSwgYW55CisgICAgJSBmb2xsb3dpbmcgZ2x1ZSAoc3VjaCBhcyBhIFxwYXJza2lwKSB3b3VsZCBiZSBhIGJyZWFrcG9pbnQuICBGb3IgZXhhbXBsZToKKyAgICAlIAorICAgICUgICBAZGVmZm4gZGVmZm4td2hhdGV2ZXIKKyAgICAlICAgQHZpbmRleCBpbmRleC13aGF0ZXZlcgorICAgICUgICBEZXNjcmlwdGlvbi4KKyAgICAlIHdvdWxkIGFsbG93IGEgYnJlYWsgYmV0d2VlbiB0aGUgaW5kZXgtd2hhdGV2ZXIgd2hhdHNpdAorICAgICUgYW5kIHRoZSAiRGVzY3JpcHRpb24uIiBwYXJhZ3JhcGguCisgICAgXGlmbnVtXGNvdW50MjU1Pjk5OTkgXHBlbmFsdHlcY291bnQyNTUgXGZpCisgIFxlbHNlCisgICAgJSBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgd2UgaGFkIGEgbm9uemVybyBcbGFzdHNraXAsCisgICAgJSB0aGlzIG1ha2UtdXAgZ2x1ZSB3b3VsZCBiZSBwcmVjZWRlZCBieSBhIG5vbi1kaXNjYXJkYWJsZSBpdGVtCisgICAgJSAodGhlIHdoYXRzaXQgZnJvbSB0aGUgXHdyaXRlKSwgc28gd2UgbXVzdCBpbnNlcnQgYSBcbm9icmVhay4KKyAgICBcbm9icmVha1x2c2tpcFxza2lwMAorICBcZmkKK30KKworJSBUaGUgaW5kZXggZW50cnkgd3JpdHRlbiBpbiB0aGUgZmlsZSBhY3R1YWxseSBsb29rcyBsaWtlCislICBcZW50cnkge3NvcnRzdHJpbmd9e3BhZ2V9e3RvcGljfQorJSBvcgorJSAgXGVudHJ5IHtzb3J0c3RyaW5nfXtwYWdlfXt0b3BpY317c3VidG9waWN9CislIFRoZSB0ZXhpbmRleCBwcm9ncmFtIHJlYWRzIGluIHRoZXNlIGZpbGVzIGFuZCB3cml0ZXMgZmlsZXMKKyUgY29udGFpbmluZyB0aGVzZSBraW5kcyBvZiBsaW5lczoKKyUgIFxpbml0aWFsIHtjfQorJSAgICAgYmVmb3JlIHRoZSBmaXJzdCB0b3BpYyB3aG9zZSBpbml0aWFsIGlzIGMKKyUgIFxlbnRyeSB7dG9waWN9e3BhZ2VsaXN0fQorJSAgICAgZm9yIGEgdG9waWMgdGhhdCBpcyB1c2VkIHdpdGhvdXQgc3VidG9waWNzCislICBccHJpbWFyeSB7dG9waWN9CislICAgICBmb3IgdGhlIGJlZ2lubmluZyBvZiBhIHRvcGljIHRoYXQgaXMgdXNlZCB3aXRoIHN1YnRvcGljcworJSAgXHNlY29uZGFyeSB7c3VidG9waWN9e3BhZ2VsaXN0fQorJSAgICAgZm9yIGVhY2ggc3VidG9waWMuCisKKyUgRGVmaW5lIHRoZSB1c2VyLWFjY2Vzc2libGUgaW5kZXhpbmcgY29tbWFuZHMKKyUgQGZpbmRleCwgQHZpbmRleCwgQGtpbmRleCwgQGNpbmRleC4KKworXGRlZlxmaW5kZXgge1xmbmluZGV4fQorXGRlZlxraW5kZXgge1xreWluZGV4fQorXGRlZlxjaW5kZXgge1xjcGluZGV4fQorXGRlZlx2aW5kZXgge1x2cmluZGV4fQorXGRlZlx0aW5kZXgge1x0cGluZGV4fQorXGRlZlxwaW5kZXgge1xwZ2luZGV4fQorCitcZGVmXGNpbmRleHN1YiB7XGJlZ2luZ3JvdXBcb2JleWxpbmVzXGNpbmRleHN1Yn0KK3tcb2JleWxpbmVzICUKK1xnZGVmXGNpbmRleHN1YiAiIzEiICMyXl5Ne1xlbmRncm91cCAlCitcZG9zdWJpbmR7Y3B9eyMyfXsjMX19fQorCislIERlZmluZSB0aGUgbWFjcm9zIHVzZWQgaW4gZm9ybWF0dGluZyBvdXRwdXQgb2YgdGhlIHNvcnRlZCBpbmRleCBtYXRlcmlhbC4KKworJSBAcHJpbnRpbmRleCBjYXVzZXMgYSBwYXJ0aWN1bGFyIGluZGV4ICh0aGUgPz9zIGZpbGUpIHRvIGdldCBwcmludGVkLgorJSBJdCBkb2VzIG5vdCBwcmludCBhbnkgY2hhcHRlciBoZWFkaW5nICh1c3VhbGx5IGFuIEB1bm51bWJlcmVkKS4KKyUKK1xwYXJzZWFyZ2RlZlxwcmludGluZGV4e1xiZWdpbmdyb3VwCisgIFxkb2JyZWFrIFxjaGFwaGVhZGluZ3NraXB7MTAwMDB9JQorICAlCisgIFxzbWFsbGZvbnRzIFxybQorICBcdG9sZXJhbmNlID0gOTUwMAorICBcZXZlcnlwYXIgPSB7fSUgZG9uJ3Qgd2FudCB0aGUgXGtlcm5cLXBhcmluZGVudCBmcm9tIGluZGVudGF0aW9uIHN1cHByZXNzaW9uLgorICAlCisgICUgU2VlIGlmIHRoZSBpbmRleCBmaWxlIGV4aXN0cyBhbmQgaXMgbm9uZW1wdHkuCisgICUgQ2hhbmdlIGNhdGNvZGUgb2YgQCBoZXJlIHNvIHRoYXQgaWYgdGhlIGluZGV4IGZpbGUgY29udGFpbnMKKyAgJSBcaW5pdGlhbCB7QH0KKyAgJSBhcyBpdHMgZmlyc3QgbGluZSwgVGVYIGRvZXNuJ3QgY29tcGxhaW4gYWJvdXQgbWlzbWF0Y2hlZCBicmFjZXMKKyAgJSAoYmVjYXVzZSBpdCB0aGlua3MgQH0gaXMgYSBjb250cm9sIHNlcXVlbmNlKS4KKyAgXGNhdGNvZGVgXEAgPSAxMQorICBcb3BlbmluIDEgXGpvYm5hbWUuIzFzCisgIFxpZmVvZiAxCisgICAgJSBcZW5kZG91YmxlY29sdW1ucyBnZXRzIGNvbmZ1c2VkIGlmIHRoZXJlIGlzIG5vIHRleHQgaW4gdGhlIGluZGV4LAorICAgICUgYW5kIGl0IGxvc2VzIHRoZSBjaGFwdGVyIHRpdGxlIGFuZCB0aGUgYXV4IGZpbGUgZW50cmllcyBmb3IgdGhlCisgICAgJSBpbmRleC4gIFRoZSBlYXNpZXN0IHdheSB0byBwcmV2ZW50IHRoaXMgcHJvYmxlbSBpcyB0byBtYWtlIHN1cmUKKyAgICAlIHRoZXJlIGlzIHNvbWUgdGV4dC4KKyAgICBccHV0d29yZEluZGV4Tm9uZXhpc3RlbnQKKyAgXGVsc2UKKyAgICAlCisgICAgJSBJZiB0aGUgaW5kZXggZmlsZSBleGlzdHMgYnV0IGlzIGVtcHR5LCB0aGVuIFxvcGVuaW4gbGVhdmVzIFxpZmVvZgorICAgICUgZmFsc2UuICBXZSBoYXZlIHRvIG1ha2UgVGVYIHRyeSB0byByZWFkIHNvbWV0aGluZyBmcm9tIHRoZSBmaWxlLCBzbworICAgICUgaXQgY2FuIGRpc2NvdmVyIGlmIHRoZXJlIGlzIGFueXRoaW5nIGluIGl0LgorICAgIFxyZWFkIDEgdG8gXHRlbXAKKyAgICBcaWZlb2YgMQorICAgICAgXHB1dHdvcmRJbmRleElzRW1wdHkKKyAgICBcZWxzZQorICAgICAgJSBJbmRleCBmaWxlcyBhcmUgYWxtb3N0IFRleGluZm8gc291cmNlLCBidXQgd2UgdXNlIFwgYXMgdGhlIGVzY2FwZQorICAgICAgJSBjaGFyYWN0ZXIuICBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIEAsIGJ1dCB0aGF0J3MgdG9vIGJpZyBhIGNoYW5nZQorICAgICAgJSB0byBtYWtlIHJpZ2h0IG5vdy4KKyAgICAgIFxkZWZcaW5kZXhiYWNrc2xhc2h7XGJhY2tzbGFzaGN1cmZvbnR9JQorICAgICAgXGNhdGNvZGVgXFwgPSAwCisgICAgICBcZXNjYXBlY2hhciA9IGBcXAorICAgICAgXGJlZ2luZG91YmxlY29sdW1ucworICAgICAgXGlucHV0IFxqb2JuYW1lLiMxcworICAgICAgXGVuZGRvdWJsZWNvbHVtbnMKKyAgICBcZmkKKyAgXGZpCisgIFxjbG9zZWluIDEKK1xlbmRncm91cH0KKworJSBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgYnkgdGhlIHNvcnRlZCBpbmRleCBmaWxlIGl0c2VsZi4KKyUgQ2hhbmdlIHRoZW0gdG8gY29udHJvbCB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgaW5kZXguCisKK1xkZWZcaW5pdGlhbCMxe3slCisgICUgU29tZSBtaW5vciBmb250IGNoYW5nZXMgZm9yIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMuCisgIFxsZXRcdGVudHQ9XHNlY3R0IFxsZXRcdHQ9XHNlY3R0IFxsZXRcc2Y9XHNlY3R0CisgICUKKyAgJSBSZW1vdmUgYW55IGdsdWUgd2UgbWF5IGhhdmUsIHdlJ2xsIGJlIGluc2VydGluZyBvdXIgb3duLgorICBccmVtb3ZlbGFzdHNraXAKKyAgJQorICAlIFdlIGxpa2UgYnJlYWtzIGJlZm9yZSB0aGUgaW5kZXggaW5pdGlhbHMsIHNvIGluc2VydCBhIGJvbnVzLgorICBcbm9icmVhaworICBcdnNraXAgMHB0IHBsdXMgM1xiYXNlbGluZXNraXAKKyAgXHBlbmFsdHkgMAorICBcdnNraXAgMHB0IHBsdXMgLTNcYmFzZWxpbmVza2lwCisgICUKKyAgJSBUeXBlc2V0IHRoZSBpbml0aWFsLiAgTWFraW5nIHRoaXMgYWRkIHVwIHRvIGEgd2hvbGUgbnVtYmVyIG9mCisgICUgYmFzZWxpbmVza2lwcyBpbmNyZWFzZXMgdGhlIGNoYW5jZSBvZiB0aGUgZG90cyBsaW5pbmcgdXAgZnJvbSBjb2x1bW4KKyAgJSB0byBjb2x1bW4uICBJdCBzdGlsbCB3b24ndCBvZnRlbiBiZSBwZXJmZWN0LCBiZWNhdXNlIG9mIHRoZSBzdHJldGNoCisgICUgd2UgbmVlZCBiZWZvcmUgZWFjaCBlbnRyeSwgYnV0IGl0J3MgYmV0dGVyLgorICAlCisgICUgTm8gc2hyaW5rIGJlY2F1c2UgaXQgY29uZnVzZXMgXGJhbGFuY2Vjb2x1bW5zLgorICBcdnNraXAgMS42N1xiYXNlbGluZXNraXAgcGx1cyAuNVxiYXNlbGluZXNraXAKKyAgXGxlZnRsaW5le1xzZWNiZiAjMX0lCisgICUgRG8gb3VyIGJlc3Qgbm90IHRvIGJyZWFrIGFmdGVyIHRoZSBpbml0aWFsLgorICBcbm9icmVhaworICBcdnNraXAgLjMzXGJhc2VsaW5lc2tpcCBwbHVzIC4xXGJhc2VsaW5lc2tpcAorfX0KKworJSBcZW50cnkgdHlwZXNldHMgYSBwYXJhZ3JhcGggY29uc2lzdGluZyBvZiB0aGUgdGV4dCAoIzEpLCBkb3QgbGVhZGVycywgYW5kCislIHRoZW4gcGFnZSBudW1iZXIgKCMyKSBmbHVzaGVkIHRvIHRoZSByaWdodCBtYXJnaW4uICBJdCBpcyB1c2VkIGZvciBpbmRleAorJSBhbmQgdGFibGUgb2YgY29udGVudHMgZW50cmllcy4gIFRoZSBwYXJhZ3JhcGggaXMgaW5kZW50ZWQgYnkgXGxlZnRza2lwLgorJQorJSBBIHN0cmFpZ2h0Zm9yd2FyZCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBzdGFydCBsaWtlIHRoaXM6CislCVxkZWZcZW50cnkjMSMyey4uLgorJSBCdXQgdGhpcyBmcm96ZXMgdGhlIGNhdGNvZGVzIGluIHRoZSBhcmd1bWVudCwgYW5kIGNhbiBjYXVzZSBwcm9ibGVtcyB0bworJSBAY29kZSwgd2hpY2ggc2V0cyAtIGFjdGl2ZS4gIFRoaXMgcHJvYmxlbSB3YXMgZml4ZWQgYnkgYSBrbHVkZ2UtLS0KKyUgYGAtJycgd2FzIGFjdGl2ZSB0aHJvdWdob3V0IHdob2xlIGluZGV4LCBidXQgdGhpcyBpc24ndCByZWFsbHkgcmlnaHQuCislCislIFRoZSByaWdodCBzb2x1dGlvbiBpcyB0byBwcmV2ZW50IFxlbnRyeSBmcm9tIHN3YWxsb3dpbmcgdGhlIHdob2xlIHRleHQuCislICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1rYXNhbCwgMjFub3YwMworXGRlZlxlbnRyeXslCisgIFxiZWdpbmdyb3VwCisgICAgJQorICAgICUgU3RhcnQgYSBuZXcgcGFyYWdyYXBoIGlmIG5lY2Vzc2FyeSwgc28gb3VyIGFzc2lnbm1lbnRzIGJlbG93IGNhbid0CisgICAgJSBhZmZlY3QgcHJldmlvdXMgdGV4dC4KKyAgICBccGFyCisgICAgJQorICAgICUgRG8gbm90IGZpbGwgb3V0IHRoZSBsYXN0IGxpbmUgd2l0aCB3aGl0ZSBzcGFjZS4KKyAgICBccGFyZmlsbHNraXAgPSAwaW4KKyAgICAlCisgICAgJSBObyBleHRyYSBzcGFjZSBhYm92ZSB0aGlzIHBhcmFncmFwaC4KKyAgICBccGFyc2tpcCA9IDBpbgorICAgICUKKyAgICAlIERvIG5vdCBwcmVmZXIgYSBzZXBhcmF0ZSBsaW5lIGVuZGluZyB3aXRoIGEgaHlwaGVuIHRvIGZld2VyIGxpbmVzLgorICAgIFxmaW5hbGh5cGhlbmRlbWVyaXRzID0gMAorICAgICUKKyAgICAlIFxoYW5naW5kZW50IGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB0aGUgZW50cnkgdGV4dCBhbmQgcGFnZSBudW1iZXIKKyAgICAlIGRvbid0IGJvdGggZml0IG9uIG9uZSBsaW5lLiAgSW4gdGhhdCBjYXNlLCBib2Igc3VnZ2VzdHMgc3RhcnRpbmcgdGhlCisgICAgJSBkb3RzIHByZXR0eSBmYXIgb3ZlciBvbiB0aGUgbGluZS4gIFVuZm9ydHVuYXRlbHksIGEgbGFyZ2UKKyAgICAlIGluZGVudGF0aW9uIGxvb2tzIHdyb25nIHdoZW4gdGhlIGVudHJ5IHRleHQgaXRzZWxmIGlzIGJyb2tlbiBhY3Jvc3MKKyAgICAlIGxpbmVzLiAgU28gd2UgdXNlIGEgc21hbGwgaW5kZW50YXRpb24gYW5kIHB1dCB1cCB3aXRoIGxvbmcgbGVhZGVycy4KKyAgICAlCisgICAgJSBcaGFuZ2FmdGVyIGlzIHJlc2V0IHRvIDEgKHdoaWNoIGlzIHRoZSB2YWx1ZSB3ZSB3YW50KSBhdCB0aGUgc3RhcnQKKyAgICAlIG9mIGVhY2ggcGFyYWdyYXBoLCBzbyB3ZSBuZWVkIG5vdCBkbyBhbnl0aGluZyB3aXRoIHRoYXQuCisgICAgXGhhbmdpbmRlbnQgPSAyZW0KKyAgICAlCisgICAgJSBXaGVuIHRoZSBlbnRyeSB0ZXh0IG5lZWRzIHRvIGJlIGJyb2tlbiwganVzdCBmaWxsIG91dCB0aGUgZmlyc3QgbGluZQorICAgICUgd2l0aCBibGFuayBzcGFjZS4KKyAgICBccmlnaHRza2lwID0gMHB0IHBsdXMxZmlsCisgICAgJQorICAgICUgQSBiaXQgb2Ygc3RyZXRjaCBiZWZvcmUgZWFjaCBlbnRyeSBmb3IgdGhlIGJlbmVmaXQgb2YgYmFsYW5jaW5nCisgICAgJSBjb2x1bW5zLgorICAgIFx2c2tpcCAwcHQgcGx1czFwdAorICAgICUKKyAgICAlIFN3YWxsb3cgdGhlIGxlZnQgYnJhY2Ugb2YgdGhlIHRleHQgKGZpcnN0IHBhcmFtZXRlcik6CisgICAgXGFmdGVyYXNzaWdubWVudFxkb2VudHJ5CisgICAgXGxldFx0ZW1wID0KK30KK1xkZWZcZG9lbnRyeXslCisgICAgXGJncm91cCAlIEluc3RlYWQgb2YgdGhlIHN3YWxsb3dlZCBicmFjZS4KKyAgICAgIFxub2luZGVudAorICAgICAgXGFmdGVyZ3JvdXBcZmluaXNoZW50cnkKKyAgICAgICUgQW5kIG5vdyBjb21lcyB0aGUgdGV4dCBvZiB0aGUgZW50cnkuCit9CitcZGVmXGZpbmlzaGVudHJ5IzF7JQorICAgICUgIzEgaXMgdGhlIHBhZ2UgbnVtYmVyLgorICAgICUKKyAgICAlIFRoZSBmb2xsb3dpbmcgaXMga2x1ZGdlZCB0byBub3Qgb3V0cHV0IGEgbGluZSBvZiBkb3RzIGluIHRoZSBpbmRleCBpZgorICAgICUgdGhlcmUgYXJlIG5vIHBhZ2UgbnVtYmVycy4gIFRoZSBuZXh0IHBlcnNvbiB3aG8gYnJlYWtzIHRoaXMgd2lsbCBiZQorICAgICUgY3Vyc2VkIGJ5IGEgVW5peCBkYWVtb24uCisgICAgXGRlZlx0ZW1wYXt7XHJtIH19JQorICAgIFxkZWZcdGVtcGJ7IzF9JQorICAgIFxlZGVmXHRlbXBje1x0ZW1wYX0lCisgICAgXGVkZWZcdGVtcGR7XHRlbXBifSUKKyAgICBcaWZ4XHRlbXBjXHRlbXBkCisgICAgICBcICUKKyAgICBcZWxzZQorICAgICAgJQorICAgICAgJSBJZiB3ZSBtdXN0LCBwdXQgdGhlIHBhZ2UgbnVtYmVyIG9uIGEgbGluZSBvZiBpdHMgb3duLCBhbmQgZmlsbCBvdXQKKyAgICAgICUgdGhpcyBsaW5lIHdpdGggYmxhbmsgc3BhY2UuICAoVGhlIFxoZmlsIGlzIG92ZXJ3aGVsbWVkIHdpdGggdGhlCisgICAgICAlIGZpbGwgbGVhZGVycyBnbHVlIGluIFxpbmRleGRvdGZpbGwgaWYgdGhlIHBhZ2UgbnVtYmVyIGRvZXMgZml0LikKKyAgICAgIFxoZmlsXHBlbmFsdHk1MAorICAgICAgXG51bGxcbm9icmVha1xpbmRleGRvdGZpbGwgJSBIYXZlIGxlYWRlcnMgYmVmb3JlIHRoZSBwYWdlIG51bWJlci4KKyAgICAgICUKKyAgICAgICUgVGhlIGBcICcgaGVyZSBpcyByZW1vdmVkIGJ5IHRoZSBpbXBsaWNpdCBcdW5za2lwIHRoYXQgVGVYIGRvZXMgYXMKKyAgICAgICUgcGFydCBvZiAodGhlIHByaW1pdGl2ZSkgXHBhci4gIFdpdGhvdXQgaXQsIGEgc3B1cmlvdXMgdW5kZXJmdWxsCisgICAgICAlIFxoYm94IGVuc3Vlcy4KKyAgICAgIFxpZnBkZgorCVxwZGZnZXR0b2tzIzEuJQorCVwgXHRoZVx0b2tzQQorICAgICAgXGVsc2UKKwlcICMxJQorICAgICAgXGZpCisgICAgXGZpCisgICAgXHBhcgorICBcZW5kZ3JvdXAKK30KKworJSBMaWtlIFxkb3RmaWxsIGV4Y2VwdCB0YWtlcyBhdCBsZWFzdCAxIGVtLgorXGRlZlxpbmRleGRvdGZpbGx7XGNsZWFkZXJzCisgIFxoYm94eyRcbWF0aHN1cnJvdW5kPTBwdCBcbWtlcm4xLjVtdSAke1xpdCAufSQgXG1rZXJuMS41bXUkfVxoc2tpcCAxZW0gcGx1cyAxZmlsbH0KKworXGRlZlxwcmltYXJ5ICMxe1xsaW5leyMxXGhmaWx9fQorCitcbmV3c2tpcFxzZWNvbmRhcnlpbmRlbnQgXHNlY29uZGFyeWluZGVudD0wLjVjbQorXGRlZlxzZWNvbmRhcnkjMSMye3slCisgIFxwYXJmaWxsc2tpcD0waW4KKyAgXHBhcnNraXA9MGluCisgIFxoYW5naW5kZW50PTFpbgorICBcaGFuZ2FmdGVyPTEKKyAgXG5vaW5kZW50XGhza2lwXHNlY29uZGFyeWluZGVudFxoYm94eyMxfVxpbmRleGRvdGZpbGwKKyAgXGlmcGRmCisgICAgXHBkZmdldHRva3MjMi5cIFx0aGVcdG9rc0EgJSBUaGUgcGFnZSBudW1iZXIgZW5kcyB0aGUgcGFyYWdyYXBoLgorICBcZWxzZQorICAgICMyCisgIFxmaQorICBccGFyCit9fQorCislIERlZmluZSB0d28tY29sdW1uIG1vZGUsIHdoaWNoIHdlIHVzZSB0byB0eXBlc2V0IGluZGV4ZXMuCislIEFkYXB0ZWQgZnJvbSB0aGUgVGVYYm9vaywgcGFnZSA0MTYsIHdoaWNoIGlzIHRvIHNheSwKKyUgdGhlIG1hbm1hYy50ZXggZm9ybWF0IHVzZWQgdG8gcHJpbnQgdGhlIFRlWGJvb2sgaXRzZWxmLgorXGNhdGNvZGVgXEA9MTEKKworXG5ld2JveFxwYXJ0aWFscGFnZQorXG5ld2RpbWVuXGRvdWJsZWNvbHVtbmhzaXplCisKK1xkZWZcYmVnaW5kb3VibGVjb2x1bW5ze1xiZWdpbmdyb3VwICUgZW5kZWQgYnkgXGVuZGRvdWJsZWNvbHVtbnMKKyAgJSBHcmFiIGFueSBzaW5nbGUtY29sdW1uIG1hdGVyaWFsIGFib3ZlIHVzLgorICBcb3V0cHV0ID0geyUKKyAgICAlCisgICAgJSBIZXJlIGlzIGEgcG9zc2liaWxpdHkgbm90IGZvcmVzZWVuIGluIG1hbm1hYzogaWYgd2UgYWNjdW11bGF0ZSBhCisgICAgJSB3aG9sZSBsb3Qgb2YgbWF0ZXJpYWwsIHdlIG1pZ2h0IGVuZCB1cCBjYWxsaW5nIHRoaXMgXG91dHB1dAorICAgICUgcm91dGluZSB0d2ljZSBpbiBhIHJvdyAoc2VlIHRoZSBkb3VibGVjb2wtbG9zZSB0ZXN0LCB3aGljaCBpcworICAgICUgZXNzZW50aWFsbHkgYSBjb3VwbGUgb2YgaW5kZXhlcyB3aXRoIEBzZXRjaGFwdGVybmV3cGFnZSBvZmYpLiAgSW4KKyAgICAlIHRoYXQgY2FzZSB3ZSBqdXN0IHNoaXAgb3V0IHdoYXQgaXMgaW4gXHBhcnRpYWxwYWdlIHdpdGggdGhlIG5vcm1hbAorICAgICUgb3V0cHV0IHJvdXRpbmUuICBHZW5lcmFsbHksIFxwYXJ0aWFscGFnZSB3aWxsIGJlIGVtcHR5IHdoZW4gdGhpcworICAgICUgcnVucyBhbmQgdGhpcyB3aWxsIGJlIGEgbm8tb3AuICBTZWUgdGhlIGluZGV4c3ByZWFkLnRleCB0ZXN0IGNhc2UuCisgICAgXGlmdm9pZFxwYXJ0aWFscGFnZSBcZWxzZQorICAgICAgXG9uZXBhZ2VvdXR7XHBhZ2Vjb250ZW50c1xwYXJ0aWFscGFnZX0lCisgICAgXGZpCisgICAgJQorICAgIFxnbG9iYWxcc2V0Ym94XHBhcnRpYWxwYWdlID0gXHZib3h7JQorICAgICAgJSBVbnZib3ggdGhlIG1haW4gb3V0cHV0IHBhZ2UuCisgICAgICBcdW52Ym94XFBBR0UKKyAgICAgIFxrZXJuLVx0b3Bza2lwIFxrZXJuXGJhc2VsaW5lc2tpcAorICAgIH0lCisgIH0lCisgIFxlamVjdCAlIHJ1biB0aGF0IG91dHB1dCByb3V0aW5lIHRvIHNldCBccGFydGlhbHBhZ2UKKyAgJQorICAlIFVzZSB0aGUgZG91YmxlLWNvbHVtbiBvdXRwdXQgcm91dGluZSBmb3Igc3Vic2VxdWVudCBwYWdlcy4KKyAgXG91dHB1dCA9IHtcZG91YmxlY29sdW1ub3V0fSUKKyAgJQorICAlIENoYW5nZSB0aGUgcGFnZSBzaXplIHBhcmFtZXRlcnMuICBXZSBjb3VsZCBkbyB0aGlzIG9uY2Ugb3V0c2lkZSB0aGlzCisgICUgcm91dGluZSwgaW4gZWFjaCBvZiBAc21hbGxib29rLCBAYWZvdXJwYXBlciwgYW5kIHRoZSBkZWZhdWx0IDguNXgxMQorICAlIGZvcm1hdCwgYnV0IHRoZW4gd2UgcmVwZWF0IHRoZSBzYW1lIGNvbXB1dGF0aW9uLiAgUmVwZWF0aW5nIGEgY291cGxlCisgICUgb2YgYXNzaWdubWVudHMgb25jZSBwZXIgaW5kZXggaXMgY2xlYXJseSBtZWFuaW5nbGVzcyBmb3IgdGhlCisgICUgZXhlY3V0aW9uIHRpbWUsIHNvIHdlIG1heSBhcyB3ZWxsIGRvIGl0IGluIG9uZSBwbGFjZS4KKyAgJQorICAlIEZpcnN0IHdlIGhhbHZlIHRoZSBsaW5lIGxlbmd0aCwgbGVzcyBhIGxpdHRsZSBmb3IgdGhlIGd1dHRlciBiZXR3ZWVuCisgICUgdGhlIGNvbHVtbnMuICBXZSBjb21wdXRlIHRoZSBndXR0ZXIgYmFzZWQgb24gdGhlIGxpbmUgbGVuZ3RoLCBzbyBpdAorICAlIGNoYW5nZXMgYXV0b21hdGljYWxseSB3aXRoIHRoZSBwYXBlciBmb3JtYXQuICBUaGUgbWFnaWMgY29uc3RhbnQKKyAgJSBiZWxvdyBpcyBjaG9zZW4gc28gdGhhdCB0aGUgZ3V0dGVyIGhhcyB0aGUgc2FtZSB2YWx1ZSAod2VsbCwgKy08MXB0KQorICAlIGFzIGl0IGRpZCB3aGVuIHdlIGhhcmQtY29kZWQgaXQuCisgICUKKyAgJSBXZSBwdXQgdGhlIHJlc3VsdCBpbiBhIHNlcGFyYXRlIHJlZ2lzdGVyLCBcZG91YmxlY29sdW1oc2l6ZSwgc28gd2UKKyAgJSBjYW4gcmVzdG9yZSBpdCBpbiBccGFnZXNvZmFyLCBhZnRlciBcaHNpemUgaXRzZWxmIGhhcyAocG90ZW50aWFsbHkpCisgICUgYmVlbiBjbG9iYmVyZWQuCisgICUKKyAgXGRvdWJsZWNvbHVtbmhzaXplID0gXGhzaXplCisgICAgXGFkdmFuY2VcZG91YmxlY29sdW1uaHNpemUgYnkgLS4wNDE1NFxoc2l6ZQorICAgIFxkaXZpZGVcZG91YmxlY29sdW1uaHNpemUgYnkgMgorICBcaHNpemUgPSBcZG91YmxlY29sdW1uaHNpemUKKyAgJQorICAlIERvdWJsZSB0aGUgXHZzaXplIGFzIHdlbGwuICAoV2UgZG9uJ3QgbmVlZCBhIHNlcGFyYXRlIHJlZ2lzdGVyIGhlcmUsCisgICUgc2luY2Ugbm9ib2R5IGNsb2JiZXJzIFx2c2l6ZS4pCisgIFx2c2l6ZSA9IDJcdnNpemUKK30KKworJSBUaGUgZG91YmxlLWNvbHVtbiBvdXRwdXQgcm91dGluZSBmb3IgYWxsIGRvdWJsZS1jb2x1bW4gcGFnZXMgZXhjZXB0CislIHRoZSBsYXN0LgorJQorXGRlZlxkb3VibGVjb2x1bW5vdXR7JQorICBcc3BsaXR0b3Bza2lwPVx0b3Bza2lwIFxzcGxpdG1heGRlcHRoPVxtYXhkZXB0aAorICAlIEdldCB0aGUgYXZhaWxhYmxlIHNwYWNlIGZvciB0aGUgZG91YmxlIGNvbHVtbnMgLS0gdGhlIG5vcm1hbAorICAlICh1bmRvdWJsZWQpIHBhZ2UgaGVpZ2h0IG1pbnVzIGFueSBtYXRlcmlhbCBsZWZ0IG92ZXIgZnJvbSB0aGUKKyAgJSBwcmV2aW91cyBwYWdlLgorICBcZGltZW5AID0gXHZzaXplCisgIFxkaXZpZGVcZGltZW5AIGJ5IDIKKyAgXGFkdmFuY2VcZGltZW5AIGJ5IC1caHRccGFydGlhbHBhZ2UKKyAgJQorICAlIGJveDAgd2lsbCBiZSB0aGUgbGVmdC1oYW5kIGNvbHVtbiwgYm94MiB0aGUgcmlnaHQuCisgIFxzZXRib3gwPVx2c3BsaXQyNTUgdG9cZGltZW5AIFxzZXRib3gyPVx2c3BsaXQyNTUgdG9cZGltZW5ACisgIFxvbmVwYWdlb3V0XHBhZ2Vzb2ZhcgorICBcdW52Ym94MjU1CisgIFxwZW5hbHR5XG91dHB1dHBlbmFsdHkKK30KKyUKKyUgUmUtb3V0cHV0IHRoZSBjb250ZW50cyBvZiB0aGUgb3V0cHV0IHBhZ2UgLS0gYW55IHByZXZpb3VzIG1hdGVyaWFsLAorJSBmb2xsb3dlZCBieSB0aGUgdHdvIGJveGVzIHdlIGp1c3Qgc3BsaXQsIGluIGJveDAgYW5kIGJveDIuCitcZGVmXHBhZ2Vzb2ZhcnslCisgIFx1bnZib3hccGFydGlhbHBhZ2UKKyAgJQorICBcaHNpemUgPSBcZG91YmxlY29sdW1uaHNpemUKKyAgXHdkMD1caHNpemUgXHdkMj1caHNpemUKKyAgXGhib3ggdG9ccGFnZXdpZHRoe1xib3gwXGhmaWxcYm94Mn0lCit9CislCislIEFsbCBkb25lIHdpdGggZG91YmxlIGNvbHVtbnMuCitcZGVmXGVuZGRvdWJsZWNvbHVtbnN7JQorICBcb3V0cHV0ID0geyUKKyAgICAlIFNwbGl0IHRoZSBsYXN0IG9mIHRoZSBkb3VibGUtY29sdW1uIG1hdGVyaWFsLiAgTGVhdmUgaXQgb24gdGhlCisgICAgJSBjdXJyZW50IHBhZ2UsIG5vIGF1dG9tYXRpYyBwYWdlIGJyZWFrLgorICAgIFxiYWxhbmNlY29sdW1ucworICAgICUKKyAgICAlIElmIHdlIGVuZCB1cCBzcGxpdHRpbmcgdG9vIG11Y2ggbWF0ZXJpYWwgZm9yIHRoZSBjdXJyZW50IHBhZ2UsCisgICAgJSB0aG91Z2gsIHRoZXJlIHdpbGwgYmUgYW5vdGhlciBwYWdlIGJyZWFrIHJpZ2h0IGFmdGVyIHRoaXMgXG91dHB1dAorICAgICUgaW52b2NhdGlvbiBlbmRzLiAgSGF2aW5nIGNhbGxlZCBcYmFsYW5jZWNvbHVtbnMgb25jZSwgd2UgZG8gbm90CisgICAgJSB3YW50IHRvIGNhbGwgaXQgYWdhaW4uICBUaGVyZWZvcmUsIHJlc2V0IFxvdXRwdXQgdG8gaXRzIG5vcm1hbAorICAgICUgZGVmaW5pdGlvbiByaWdodCBhd2F5LiAgKFdlIGhvcGUgXGJhbGFuY2Vjb2x1bW5zIHdpbGwgbmV2ZXIgYmUKKyAgICAlIGNhbGxlZCBvbiB0byBiYWxhbmNlIHRvbyBtdWNoIG1hdGVyaWFsLCBidXQgaWYgaXQgaXMsIHRoaXMgbWFrZXMKKyAgICAlIHRoZSBvdXRwdXQgc29tZXdoYXQgbW9yZSBwYWxhdGFibGUuKQorICAgIFxnbG9iYWxcb3V0cHV0ID0ge1xvbmVwYWdlb3V0e1xwYWdlY29udGVudHNcUEFHRX19JQorICB9JQorICBcZWplY3QKKyAgXGVuZGdyb3VwICUgc3RhcnRlZCBpbiBcYmVnaW5kb3VibGVjb2x1bW5zCisgICUKKyAgJSBccGFnZWdvYWwgd2FzIHNldCB0byB0aGUgZG91YmxlZCBcdnNpemUgYWJvdmUsIHNpbmNlIHdlIHJlc3RhcnRlZAorICAlIHRoZSBjdXJyZW50IHBhZ2UuICBXZSdyZSBub3cgYmFjayB0byBub3JtYWwgc2luZ2xlLWNvbHVtbgorICAlIHR5cGVzZXR0aW5nLCBzbyByZXNldCBccGFnZWdvYWwgdG8gdGhlIG5vcm1hbCBcdnNpemUgKGFmdGVyIHRoZQorICAlIFxlbmRncm91cCB3aGVyZSBcdnNpemUgZ290IHJlc3RvcmVkKS4KKyAgXHBhZ2Vnb2FsID0gXHZzaXplCit9CislCislIENhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZSBkb3VibGUgY29sdW1uIG1hdGVyaWFsLgorXGRlZlxiYWxhbmNlY29sdW1uc3slCisgIFxzZXRib3gwID0gXHZib3h7XHVudmJveDI1NX0lIGxpa2UgXGJveDI1NSBidXQgbW9yZSBlZmZpY2llbnQsIHNlZSBwLjEyMC4KKyAgXGRpbWVuQCA9IFxodDAKKyAgXGFkdmFuY2VcZGltZW5AIGJ5IFx0b3Bza2lwCisgIFxhZHZhbmNlXGRpbWVuQCBieS1cYmFzZWxpbmVza2lwCisgIFxkaXZpZGVcZGltZW5AIGJ5IDIgJSB0YXJnZXQgdG8gc3BsaXQgdG8KKyAgJWRlYnVnXG1lc3NhZ2V7ZmluYWwgMi1jb2x1bW4gbWF0ZXJpYWwgaGVpZ2h0PVx0aGVcaHQwLCB0YXJnZXQ9XHRoZVxkaW1lbkAufSUKKyAgXHNwbGl0dG9wc2tpcCA9IFx0b3Bza2lwCisgICUgTG9vcCB1bnRpbCB3ZSBnZXQgYSBkZWNlbnQgYnJlYWtwb2ludC4KKyAgeyUKKyAgICBcdmJhZG5lc3MgPSAxMDAwMAorICAgIFxsb29wCisgICAgICBcZ2xvYmFsXHNldGJveDMgPSBcY29weTAKKyAgICAgIFxnbG9iYWxcc2V0Ym94MSA9IFx2c3BsaXQzIHRvIFxkaW1lbkAKKyAgICBcaWZkaW1caHQzPlxkaW1lbkAKKyAgICAgIFxnbG9iYWxcYWR2YW5jZVxkaW1lbkAgYnkgMXB0CisgICAgXHJlcGVhdAorICB9JQorICAlZGVidWdcbWVzc2FnZXtzcGxpdCB0byBcdGhlXGRpbWVuQCwgY29sdW1uIGhlaWdodHM6IFx0aGVcaHQxLCBcdGhlXGh0My59JQorICBcc2V0Ym94MD1cdmJveCB0b1xkaW1lbkB7XHVudmJveDF9JQorICBcc2V0Ym94Mj1cdmJveCB0b1xkaW1lbkB7XHVudmJveDN9JQorICAlCisgIFxwYWdlc29mYXIKK30KK1xjYXRjb2RlYFxAID0gXG90aGVyCisKKworXG1lc3NhZ2V7c2VjdGlvbmluZyx9CislIENoYXB0ZXJzLCBzZWN0aW9ucywgZXRjLgorCislIFx1bm51bWJlcmVkbm8gaXMgYW4gb3h5bW9yb24sIG9mIGNvdXJzZS4gIEJ1dCB3ZSBjb3VudCB0aGUgdW5udW1iZXJlZAorJSBzZWN0aW9ucyBzbyB0aGF0IHdlIGNhbiByZWZlciB0byB0aGVtIHVuYW1iaWd1b3VzbHkgaW4gdGhlIHBkZgorJSBvdXRsaW5lcyBieSB0aGVpciAic2VjdGlvbiBudW1iZXIiLiAgV2UgYXZvaWQgY29sbGlzaW9ucyB3aXRoIGNoYXB0ZXIKKyUgbnVtYmVycyBieSBzdGFydGluZyB0aGVtIGF0IDEwMDAwLiAgKElmIGEgZG9jdW1lbnQgZXZlciBoYXMgMTAwMDAKKyUgY2hhcHRlcnMsIHdlJ3JlIGluIHRyb3VibGUgYW55d2F5LCBJJ20gc3VyZS4pCitcbmV3Y291bnRcdW5udW1iZXJlZG5vIFx1bm51bWJlcmVkbm8gPSAxMDAwMAorXG5ld2NvdW50XGNoYXBubworXG5ld2NvdW50XHNlY25vICAgICAgICBcc2Vjbm89MAorXG5ld2NvdW50XHN1YnNlY25vICAgICBcc3Vic2Vjbm89MAorXG5ld2NvdW50XHN1YnN1YnNlY25vICBcc3Vic3Vic2Vjbm89MAorCislIFRoaXMgY291bnRlciBpcyBmdW5ueSBzaW5jZSBpdCBjb3VudHMgdGhyb3VnaCBjaGFyY29kZXMgb2YgbGV0dGVycyBBLCBCLCAuLi4KK1xuZXdjb3VudFxhcHBlbmRpeG5vICBcYXBwZW5kaXhubyA9IGBcQAorJQorJSBcZGVmXGFwcGVuZGl4bGV0dGVye1xjaGFyXHRoZVxhcHBlbmRpeG5vfQorJSBXZSBkbyB0aGUgZm9sbG93aW5nIHVnbHkgY29uZGl0aW9uYWwgaW5zdGVhZCBvZiB0aGUgYWJvdmUgc2ltcGxlCislIGNvbnN0cnVjdCBmb3IgdGhlIHNha2Ugb2YgcGRmdGV4LCB3aGljaCBuZWVkcyB0aGUgYWN0dWFsCislIGxldHRlciBpbiB0aGUgZXhwYW5zaW9uLCBub3QganVzdCB0eXBlc2V0LgorJQorXGRlZlxhcHBlbmRpeGxldHRlcnslCisgIFxpZm51bVxhcHBlbmRpeG5vPWBBIEElCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEIgQiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gQyBDJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBEIEQlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEUgRSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRiBGJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBHIEclCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEggSCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gSSBJJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBKIEolCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEsgSyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gTCBMJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBNIE0lCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YE4gTiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gTyBPJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBQIFAlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFEgUSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUiBSJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBTIFMlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFQgVCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gVSBVJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBWIFYlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFcgVyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gWCBYJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBZIFklCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFogWiUKKyAgJSBUaGUgXHRoZSBpcyBuZWNlc3NhcnksIGRlc3BpdGUgYXBwZWFyYW5jZXMsIGJlY2F1c2UgXGFwcGVuZGl4bGV0dGVyIGlzCisgICUgZXhwYW5kZWQgd2hpbGUgd3JpdGluZyB0aGUgLnRvYyBmaWxlLiAgXGNoYXJcYXBwZW5kaXhubyBpcyBub3QKKyAgJSBleHBhbmRhYmxlLCB0aHVzIGl0IGlzIHdyaXR0ZW4gbGl0ZXJhbGx5LCB0aHVzIGFsbCBhcHBlbmRpeGVzIGNvbWUgb3V0CisgICUgd2l0aCB0aGUgc2FtZSBsZXR0ZXIgKG9yIEApIGluIHRoZSB0b2Mgd2l0aG91dCBpdC4KKyAgXGVsc2VcY2hhclx0aGVcYXBwZW5kaXhubworICBcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmkKKyAgXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpfQorCislIEVhY2ggQGNoYXB0ZXIgZGVmaW5lcyB0aGlzIGFzIHRoZSBuYW1lIG9mIHRoZSBjaGFwdGVyLgorJSBwYWdlIGhlYWRpbmdzIGFuZCBmb290aW5ncyBjYW4gdXNlIGl0LiAgQHNlY3Rpb24gZG9lcyBsaWtld2lzZS4KKyUgSG93ZXZlciwgdGhleSBhcmUgbm90IHJlbGlhYmxlLCBiZWNhdXNlIHdlIGRvbid0IHVzZSBtYXJrcy4KK1xkZWZcdGhpc2NoYXB0ZXJ7fQorXGRlZlx0aGlzc2VjdGlvbnt9CisKK1xuZXdjb3VudFxhYnNzZWNsZXZlbCAlIHVzZWQgdG8gY2FsY3VsYXRlIHByb3BlciBoZWFkaW5nIGxldmVsCitcbmV3Y291bnRcc2VjYmFzZVxzZWNiYXNlPTAgJSBAcmFpc2VzZWN0aW9ucy9AbG93ZXJzZWN0aW9ucyBtb2RpZnkgdGhpcyBjb3VudAorCislIEByYWlzZXNlY3Rpb25zOiB0cmVhdCBAc2VjdGlvbiBhcyBjaGFwdGVyLCBAc3Vic2VjdGlvbiBhcyBzZWN0aW9uLCBldGMuCitcZGVmXHJhaXNlc2VjdGlvbnN7XGdsb2JhbFxhZHZhbmNlXHNlY2Jhc2UgYnkgLTF9CitcbGV0XHVwPVxyYWlzZXNlY3Rpb25zICUgb3JpZ2luYWwgQkZveCBuYW1lCisKKyUgQGxvd2Vyc2VjdGlvbnM6IHRyZWF0IEBjaGFwdGVyIGFzIHNlY3Rpb24sIEBzZWN0aW9uIGFzIHN1YnNlY3Rpb24sIGV0Yy4KK1xkZWZcbG93ZXJzZWN0aW9uc3tcZ2xvYmFsXGFkdmFuY2Vcc2VjYmFzZSBieSAxfQorXGxldFxkb3duPVxsb3dlcnNlY3Rpb25zICUgb3JpZ2luYWwgQkZveCBuYW1lCisKKyUgd2Ugb25seSBoYXZlIHN1YnN1Yi4KK1xjaGFyZGVmXG1heHNlY2xldmVsID0gMworJQorJSBBIG51bWJlcmVkIHNlY3Rpb24gd2l0aGluIGFuIHVubnVtYmVyZWQgY2hhbmdlcyB0byB1bm51bWJlcmVkIHRvby4KKyUgVG8gYWNoaXZlIHRoaXMsIHJlbWVtYmVyIHRoZSAiYmlnZ2VzdCIgdW5udW0uIHNlYy4gd2UgYXJlIGN1cnJlbnRseSBpbjoKK1xjaGFyZGVmXHVubWxldmVsID0gXG1heHNlY2xldmVsCislCislIFRyYWNlIHdoZXRoZXIgdGhlIGN1cnJlbnQgY2hhcHRlciBpcyBhbiBhcHBlbmRpeCBvciBub3Q6CislIFxjaGFwaGVhZHR5cGUgaXMgIk4iIG9yICJBIiwgdW5udW1iZXJlZCBjaGFwdGVycyBhcmUgaWdub3JlZC4KK1xkZWZcY2hhcGhlYWR0eXBle059CisKKyUgQ2hvb3NlIGEgaGVhZGluZyBtYWNybworJSAjMSBpcyBoZWFkaW5nIHR5cGUKKyUgIzIgaXMgaGVhZGluZyBsZXZlbAorJSAjMyBpcyB0ZXh0IGZvciBoZWFkaW5nCitcZGVmXGdlbmhlYWQjMSMyIzN7JQorICAlIENvbXB1dGUgdGhlIGFicy4gc2VjLiBsZXZlbDoKKyAgXGFic3NlY2xldmVsPSMyCisgIFxhZHZhbmNlXGFic3NlY2xldmVsIGJ5IFxzZWNiYXNlCisgICUgTWFrZSBzdXJlIFxhYnNzZWNsZXZlbCBkb2Vzbid0IGZhbGwgb3V0c2lkZSB0aGUgcmFuZ2U6CisgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPCAwCisgICAgXGFic3NlY2xldmVsID0gMAorICBcZWxzZQorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPiAzCisgICAgICBcYWJzc2VjbGV2ZWwgPSAzCisgICAgXGZpCisgIFxmaQorICAlIFRoZSBoZWFkaW5nIHR5cGU6CisgIFxkZWZcaGVhZHR5cGV7IzF9JQorICBcaWYgXGhlYWR0eXBlIFUlCisgICAgXGlmbnVtIFxhYnNzZWNsZXZlbCA8IFx1bm1sZXZlbAorICAgICAgXGNoYXJkZWZcdW5tbGV2ZWwgPSBcYWJzc2VjbGV2ZWwKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIENoZWNrIGZvciBhcHBlbmRpeCBzZWN0aW9uczoKKyAgICBcaWZudW0gXGFic3NlY2xldmVsID0gMAorICAgICAgXGVkZWZcY2hhcGhlYWR0eXBle1xoZWFkdHlwZX0lCisgICAgXGVsc2UKKyAgICAgIFxpZiBcaGVhZHR5cGUgQVxpZiBcY2hhcGhlYWR0eXBlIE4lCisJXGVycm1lc3NhZ2V7QGFwcGVuZGl4Li4uIHdpdGhpbiBhIG5vbi1hcHBlbmRpeCBjaGFwdGVyfSUKKyAgICAgIFxmaVxmaQorICAgIFxmaQorICAgICUgQ2hlY2sgZm9yIG51bWJlcmVkIHdpdGhpbiB1bm51bWJlcmVkOgorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPiBcdW5tbGV2ZWwKKyAgICAgIFxkZWZcaGVhZHR5cGV7VX0lCisgICAgXGVsc2UKKyAgICAgIFxjaGFyZGVmXHVubWxldmVsID0gMworICAgIFxmaQorICBcZmkKKyAgJSBOb3cgcHJpbnQgdGhlIGhlYWRpbmc6CisgIFxpZiBcaGVhZHR5cGUgVSUKKyAgICBcaWZjYXNlXGFic3NlY2xldmVsCisJXHVubnVtYmVyZWR6enp7IzN9JQorICAgIFxvciBcdW5udW1iZXJlZHNlY3p6ensjM30lCisgICAgXG9yIFx1bm51bWJlcmVkc3Vic2Vjenp6eyMzfSUKKyAgICBcb3IgXHVubnVtYmVyZWRzdWJzdWJzZWN6enp7IzN9JQorICAgIFxmaQorICBcZWxzZQorICAgIFxpZiBcaGVhZHR5cGUgQSUKKyAgICAgIFxpZmNhc2VcYWJzc2VjbGV2ZWwKKwkgIFxhcHBlbmRpeHp6ensjM30lCisgICAgICBcb3IgXGFwcGVuZGl4c2VjdGlvbnp6ensjM30lCisgICAgICBcb3IgXGFwcGVuZGl4c3Vic2Vjenp6eyMzfSUKKyAgICAgIFxvciBcYXBwZW5kaXhzdWJzdWJzZWN6enp7IzN9JQorICAgICAgXGZpCisgICAgXGVsc2UKKyAgICAgIFxpZmNhc2VcYWJzc2VjbGV2ZWwKKwkgIFxjaGFwdGVyenp6eyMzfSUKKyAgICAgIFxvciBcc2Vjenp6eyMzfSUKKyAgICAgIFxvciBcbnVtYmVyZWRzdWJzZWN6enp7IzN9JQorICAgICAgXG9yIFxudW1iZXJlZHN1YnN1YnNlY3p6ensjM30lCisgICAgICBcZmkKKyAgICBcZmkKKyAgXGZpCisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50Cit9CisKKyUgYW4gaW50ZXJmYWNlOgorXGRlZlxudW1oZWFke1xnZW5oZWFkIE59CitcZGVmXGFwcGhlYWR7XGdlbmhlYWQgQX0KK1xkZWZcdW5ubWhlYWR7XGdlbmhlYWQgVX0KKworJSBAY2hhcHRlciwgQGFwcGVuZGl4LCBAdW5udW1iZXJlZC4gIEluY3JlbWVudCB0b3AtbGV2ZWwgY291bnRlciwgcmVzZXQKKyUgYWxsIGxvd2VyLWxldmVsIHNlY3Rpb25pbmcgY291bnRlcnMgdG8gemVyby4KKyUKKyUgQWxzbyBzZXQgXGNoYXBsZXZlbHByZWZpeCwgd2hpY2ggd2UgcHJlcGVuZCB0byBAZmxvYXQgc2VxdWVuY2UgbnVtYmVycworJSAoZS5nLiwgZmlndXJlcyksIHEudi4gIEJ5IGRlZmF1bHQgKGJlZm9yZSBhbnkgY2hhcHRlciksIHRoYXQgaXMgZW1wdHkuCitcbGV0XGNoYXBsZXZlbHByZWZpeCA9IFxlbXB0eQorJQorXG91dGVyXHBhcnNlYXJnZGVmXGNoYXB0ZXJ7XG51bWhlYWQweyMxfX0gJSBub3JtYWxseSBudW1oZWFkMCBjYWxscyBjaGFwdGVyenp6CitcZGVmXGNoYXB0ZXJ6enojMXslCisgICUgc2VjdGlvbiByZXNldHRpbmcgaXMgXGdsb2JhbCBpbiBjYXNlIHRoZSBjaGFwdGVyIGlzIGluIGEgZ3JvdXAsIHN1Y2gKKyAgJSBhcyBhbiBAaW5jbHVkZSBmaWxlLgorICBcZ2xvYmFsXHNlY25vPTAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MAorICAgIFxnbG9iYWxcYWR2YW5jZVxjaGFwbm8gYnkgMQorICAlCisgICUgVXNlZCBmb3IgXGZsb2F0LgorICBcZ2RlZlxjaGFwbGV2ZWxwcmVmaXh7XHRoZVxjaGFwbm8ufSUKKyAgXHJlc2V0YWxsZmxvYXRub3MKKyAgJQorICBcbWVzc2FnZXtccHV0d29yZENoYXB0ZXJcc3BhY2UgXHRoZVxjaGFwbm99JQorICAlCisgICUgV3JpdGUgdGhlIGFjdHVhbCBoZWFkaW5nLgorICBcY2hhcG1hY3JveyMxfXtZbnVtYmVyZWR9e1x0aGVcY2hhcG5vfSUKKyAgJQorICAlIFNvIEBzZWN0aW9uIGFuZCB0aGUgbGlrZSBhcmUgbnVtYmVyZWQgdW5kZXJuZWF0aCB0aGlzIGNoYXB0ZXIuCisgIFxnbG9iYWxcbGV0XHNlY3Rpb24gPSBcbnVtYmVyZWRzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnNlYworICBcZ2xvYmFsXGxldFxzdWJzdWJzZWN0aW9uID0gXG51bWJlcmVkc3Vic3Vic2VjCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlxhcHBlbmRpeHtcYXBwaGVhZDB7IzF9fSAlIG5vcm1hbGx5IGFwcGhlYWQwIGNhbGxzIGFwcGVuZGl4enp6CitcZGVmXGFwcGVuZGl4enp6IzF7JQorICBcZ2xvYmFsXHNlY25vPTAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MAorICAgIFxnbG9iYWxcYWR2YW5jZVxhcHBlbmRpeG5vIGJ5IDEKKyAgXGdkZWZcY2hhcGxldmVscHJlZml4e1xhcHBlbmRpeGxldHRlci59JQorICBccmVzZXRhbGxmbG9hdG5vcworICAlCisgIFxkZWZcYXBwZW5kaXhudW17XHB1dHdvcmRBcHBlbmRpeFxzcGFjZSBcYXBwZW5kaXhsZXR0ZXJ9JQorICBcbWVzc2FnZXtcYXBwZW5kaXhudW19JQorICAlCisgIFxjaGFwbWFjcm97IzF9e1lhcHBlbmRpeH17XGFwcGVuZGl4bGV0dGVyfSUKKyAgJQorICBcZ2xvYmFsXGxldFxzZWN0aW9uID0gXGFwcGVuZGl4c2VjCisgIFxnbG9iYWxcbGV0XHN1YnNlY3Rpb24gPSBcYXBwZW5kaXhzdWJzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic3Vic2VjdGlvbiA9IFxhcHBlbmRpeHN1YnN1YnNlYworfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHtcdW5ubWhlYWQweyMxfX0gJSBub3JtYWxseSB1bm5taGVhZDAgY2FsbHMgdW5udW1iZXJlZHp6egorXGRlZlx1bm51bWJlcmVkenp6IzF7JQorICBcZ2xvYmFsXHNlY25vPTAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MAorICAgIFxnbG9iYWxcYWR2YW5jZVx1bm51bWJlcmVkbm8gYnkgMQorICAlCisgICUgU2luY2UgYW4gdW5udW1iZXJlZCBoYXMgbm8gbnVtYmVyLCBubyBwcmVmaXggZm9yIGZpZ3VyZXMuCisgIFxnbG9iYWxcbGV0XGNoYXBsZXZlbHByZWZpeCA9IFxlbXB0eQorICBccmVzZXRhbGxmbG9hdG5vcworICAlCisgICUgVGhpcyB1c2VkIHRvIGJlIHNpbXBseSBcbWVzc2FnZXsjMX0sIGJ1dCBUZVggZnVsbHkgZXhwYW5kcyB0aGUKKyAgJSBhcmd1bWVudCB0byBcbWVzc2FnZS4gIFRoZXJlZm9yZSwgaWYgIzEgY29udGFpbmVkIEAtY29tbWFuZHMsIFRlWAorICAlIGV4cGFuZGVkIHRoZW0uICBGb3IgZXhhbXBsZSwgaW4gYEB1bm51bWJlcmVkIFRoZSBAY2l0ZXtCb29rfScsIFRlWAorICAlIGV4cGFuZGVkIEBjaXRlICh3aGljaCB0dXJucyBvdXQgdG8gY2F1c2UgZXJyb3JzIGJlY2F1c2UgXGNpdGUgaXMgbWVhbnQKKyAgJSB0byBiZSBleGVjdXRlZCwgbm90IGV4cGFuZGVkKS4KKyAgJQorICAlIEFueXdheSwgd2UgZG9uJ3Qgd2FudCB0aGUgZnVsbHktZXhwYW5kZWQgZGVmaW5pdGlvbiBvZiBAY2l0ZSB0byBhcHBlYXIKKyAgJSBhcyBhIHJlc3VsdCBvZiB0aGUgXG1lc3NhZ2UsIHdlIGp1c3Qgd2FudCBgQGNpdGUnIGl0c2VsZi4gIFdlIHVzZQorICAlIFx0aGU8dG9rcyByZWdpc3Rlcj4gdG8gYWNoaWV2ZSB0aGlzOiBUZVggZXhwYW5kcyBcdGhlPHRva3M+IG9ubHkgb25jZSwKKyAgJSBzaW1wbHkgeWllbGRpbmcgdGhlIGNvbnRlbnRzIG9mIDx0b2tzIHJlZ2lzdGVyPi4gIChXZSBhbHNvIGRvIHRoaXMgZm9yCisgICUgdGhlIHRvYyBlbnRyaWVzLikKKyAgXHRva3MwID0geyMxfSUKKyAgXG1lc3NhZ2V7KFx0aGVcdG9rczApfSUKKyAgJQorICBcY2hhcG1hY3JveyMxfXtZbm90aGluZ317XHRoZVx1bm51bWJlcmVkbm99JQorICAlCisgIFxnbG9iYWxcbGV0XHNlY3Rpb24gPSBcdW5udW1iZXJlZHNlYworICBcZ2xvYmFsXGxldFxzdWJzZWN0aW9uID0gXHVubnVtYmVyZWRzdWJzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic3Vic2VjdGlvbiA9IFx1bm51bWJlcmVkc3Vic3Vic2VjCit9CisKKyUgQGNlbnRlcmNoYXAgaXMgbGlrZSBAdW5udW1iZXJlZCwgYnV0IHRoZSBoZWFkaW5nIGlzIGNlbnRlcmVkLgorXG91dGVyXHBhcnNlYXJnZGVmXGNlbnRlcmNoYXB7JQorICAlIFdlbGwsIHdlIGNvdWxkIGRvIHRoZSBmb2xsb3dpbmcgaW4gYSBncm91cCwgYnV0IHRoYXQgd291bGQgYnJlYWsKKyAgJSBhbiBhc3N1bXB0aW9uIHRoYXQgXGNoYXBtYWNybyBpcyBjYWxsZWQgYXQgdGhlIG91dGVybW9zdCBsZXZlbC4KKyAgJSBUaHVzIHdlIGFyZSBzYWZlciB0aGlzIHdheToJCS0ta2FzYWwsIDI0ZmViMDQKKyAgXGxldFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUgPSBcY2VudGVycGFyYW1ldGVycworICBcdW5ubWhlYWQweyMxfSUKKyAgXGxldFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUgPSBccmVsYXgKK30KKworJSBAdG9wIGlzIGxpa2UgQHVubnVtYmVyZWQuCitcbGV0XHRvcFx1bm51bWJlcmVkCisKKyUgU2VjdGlvbnMuCitcb3V0ZXJccGFyc2VhcmdkZWZcbnVtYmVyZWRzZWN7XG51bWhlYWQxeyMxfX0gJSBub3JtYWxseSBjYWxscyBzZWN6enoKK1xkZWZcc2Vjenp6IzF7JQorICBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WW51bWJlcmVkfXtcdGhlXGNoYXBuby5cdGhlXHNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXGFwcGVuZGl4c2VjdGlvbntcYXBwaGVhZDF7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIGFwcGVuZGl4c2VjdGlvbnp6egorXGRlZlxhcHBlbmRpeHNlY3Rpb256enojMXslCisgIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c2VjfXtZYXBwZW5kaXh9e1xhcHBlbmRpeGxldHRlci5cdGhlXHNlY25vfSUKK30KK1xsZXRcYXBwZW5kaXhzZWNcYXBwZW5kaXhzZWN0aW9uCisKK1xvdXRlclxwYXJzZWFyZ2RlZlx1bm51bWJlcmVkc2Vje1x1bm5taGVhZDF7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIHVubnVtYmVyZWRzZWN6enoKK1xkZWZcdW5udW1iZXJlZHNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1lub3RoaW5nfXtcdGhlXHVubnVtYmVyZWRuby5cdGhlXHNlY25vfSUKK30KKworJSBTdWJzZWN0aW9ucy4KK1xvdXRlclxwYXJzZWFyZ2RlZlxudW1iZXJlZHN1YnNlY3tcbnVtaGVhZDJ7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIG51bWJlcmVkc3Vic2Vjenp6CitcZGVmXG51bWJlcmVkc3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic2VjfXtZbnVtYmVyZWR9e1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlxhcHBlbmRpeHN1YnNlY3tcYXBwaGVhZDJ7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIGFwcGVuZGl4c3Vic2Vjenp6CitcZGVmXGFwcGVuZGl4c3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic2VjfXtZYXBwZW5kaXh9JQorICAgICAgICAgICAgICAgICB7XGFwcGVuZGl4bGV0dGVyLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlx1bm51bWJlcmVkc3Vic2Vje1x1bm5taGVhZDJ7IzF9fSAlbm9ybWFsbHkgY2FsbHMgdW5udW1iZXJlZHN1YnNlY3p6egorXGRlZlx1bm51bWJlcmVkc3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic2VjfXtZbm90aGluZ30lCisgICAgICAgICAgICAgICAgIHtcdGhlXHVubnVtYmVyZWRuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm99JQorfQorCislIFN1YnN1YnNlY3Rpb25zLgorXG91dGVyXHBhcnNlYXJnZGVmXG51bWJlcmVkc3Vic3Vic2Vje1xudW1oZWFkM3sjMX19ICUgbm9ybWFsbHkgbnVtYmVyZWRzdWJzdWJzZWN6enoKK1xkZWZcbnVtYmVyZWRzdWJzdWJzZWN6enojMXslCisgIFxnbG9iYWxcYWR2YW5jZVxzdWJzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZbnVtYmVyZWR9JQorICAgICAgICAgICAgICAgICB7XHRoZVxjaGFwbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vLlx0aGVcc3Vic3Vic2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXhzdWJzdWJzZWN7XGFwcGhlYWQzeyMxfX0gJSBub3JtYWxseSBhcHBlbmRpeHN1YnN1YnNlY3p6egorXGRlZlxhcHBlbmRpeHN1YnN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHN1YnN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzdWJzZWN9e1lhcHBlbmRpeH0lCisgICAgICAgICAgICAgICAgIHtcYXBwZW5kaXhsZXR0ZXIuXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vLlx0aGVcc3Vic3Vic2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHN1YnN1YnNlY3tcdW5ubWhlYWQzeyMxfX0gJW5vcm1hbGx5IHVubnVtYmVyZWRzdWJzdWJzZWN6enoKK1xkZWZcdW5udW1iZXJlZHN1YnN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHN1YnN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzdWJzZWN9e1lub3RoaW5nfSUKKyAgICAgICAgICAgICAgICAge1x0aGVcdW5udW1iZXJlZG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vfSUKK30KKworJSBUaGVzZSBtYWNyb3MgY29udHJvbCB3aGF0IHRoZSBzZWN0aW9uIGNvbW1hbmRzIGRvLCBhY2NvcmRpbmcKKyUgdG8gd2hhdCBraW5kIG9mIGNoYXB0ZXIgd2UgYXJlIGluIChvcmRpbmFyeSwgYXBwZW5kaXgsIG9yIHVubnVtYmVyZWQpLgorJSBEZWZpbmUgdGhlbSBieSBkZWZhdWx0IGZvciBhIG51bWJlcmVkIGNoYXB0ZXIuCitcbGV0XHNlY3Rpb24gPSBcbnVtYmVyZWRzZWMKK1xsZXRcc3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnNlYworXGxldFxzdWJzdWJzZWN0aW9uID0gXG51bWJlcmVkc3Vic3Vic2VjCisKKyUgRGVmaW5lIEBtYWpvcmhlYWRpbmcsIEBoZWFkaW5nIGFuZCBAc3ViaGVhZGluZworCislIE5PVEUgb24gdXNlIG9mIFx2Ym94IGZvciBjaGFwdGVyIGhlYWRpbmdzLCBzZWN0aW9uIGhlYWRpbmdzLCBhbmQgc3VjaDoKKyUgICAgICAgMSkgV2UgdXNlIFx2Ym94IHJhdGhlciB0aGFuIHRoZSBlYXJsaWVyIFxsaW5lIHRvIHBlcm1pdAorJSAgICAgICAgICBvdmVybG9uZyBoZWFkaW5ncyB0byBmb2xkLgorJSAgICAgICAyKSBcaHlwaGVucGVuYWx0eSBpcyBzZXQgdG8gMTAwMDAgYmVjYXVzZSBoeXBoZW5hdGlvbiBpbiBhCislICAgICAgICAgIGhlYWRpbmcgaXMgb2Jub3hpb3VzOyB0aGlzIGZvcmJpZHMgaXQuCislICAgICAgIDMpIExpa2V3aXNlLCBoZWFkaW5ncyBsb29rIGJlc3QgaWYgbm8gXHBhcmluZGVudCBpcyB1c2VkLCBhbmQKKyUgICAgICAgICAgaWYganVzdGlmaWNhdGlvbiBpcyBub3QgYXR0ZW1wdGVkLiAgSGVuY2UgXHJhZ2dlZHJpZ2h0LgorCisKK1xkZWZcbWFqb3JoZWFkaW5neyUKKyAge1xhZHZhbmNlXGNoYXBoZWFkaW5nc2tpcCBieSAxMHB0IFxjaGFwYnJlYWsgfSUKKyAgXHBhcnNlYXJnXGNoYXBoZWFkaW5nenp6Cit9CisKK1xkZWZcY2hhcGhlYWRpbmd7XGNoYXBicmVhayBccGFyc2VhcmdcY2hhcGhlYWRpbmd6enp9CitcZGVmXGNoYXBoZWFkaW5nenp6IzF7JQorICB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAorICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdFxyYWdnZWRyaWdodAorICAgICAgICAgICAgICAgICAgICBccm0gIzFcaGZpbGx9fSUKKyAgXGJpZ3NraXAgXHBhclxwZW5hbHR5IDIwMFxyZWxheAorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudAorfQorCislIEBoZWFkaW5nLCBAc3ViaGVhZGluZywgQHN1YnN1YmhlYWRpbmcuCitccGFyc2VhcmdkZWZcaGVhZGluZ3tcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WW9taXRmcm9tdG9jfXt9CisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50fQorXHBhcnNlYXJnZGVmXHN1YmhlYWRpbmd7XHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1lvbWl0ZnJvbXRvY317fQorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudH0KK1xwYXJzZWFyZ2RlZlxzdWJzdWJoZWFkaW5ne1xzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZb21pdGZyb210b2N9e30KKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR9CisKKyUgVGhlc2UgbWFjcm9zIGdlbmVyYXRlIGEgY2hhcHRlciwgc2VjdGlvbiwgZXRjLiBoZWFkaW5nIG9ubHkKKyUgKGluY2x1ZGluZyB3aGl0ZXNwYWNlLCBsaW5lYnJlYWtpbmcsIGV0Yy4gYXJvdW5kIGl0KSwKKyUgZ2l2ZW4gYWxsIHRoZSBpbmZvcm1hdGlvbiBpbiBjb252ZW5pZW50LCBwYXJzZWQgZm9ybS4KKworJSUlIEFyZ3MgYXJlIHRoZSBza2lwIGFuZCBwZW5hbHR5ICh1c3VhbGx5IG5lZ2F0aXZlKQorXGRlZlxkb2JyZWFrIzEjMntccGFyXGlmZGltXGxhc3Rza2lwPCMxXHJlbW92ZWxhc3Rza2lwXHBlbmFsdHkjMlx2c2tpcCMxXGZpfQorCislJSUgRGVmaW5lIHBsYWluIGNoYXB0ZXIgc3RhcnRzLCBhbmQgcGFnZSBvbi9vZmYgc3dpdGNoaW5nIGZvciBpdAorJSBQYXJhbWV0ZXIgY29udHJvbGxpbmcgc2tpcCBiZWZvcmUgY2hhcHRlciBoZWFkaW5ncyAoaWYgbmVlZGVkKQorCitcbmV3c2tpcFxjaGFwaGVhZGluZ3NraXAKKworXGRlZlxjaGFwYnJlYWt7XGRvYnJlYWsgXGNoYXBoZWFkaW5nc2tpcCB7LTQwMDB9fQorXGRlZlxjaGFwcGFnZXJ7XHBhclx2ZmlsbFxzdXBlcmVqZWN0fQorXGRlZlxjaGFwb2RkcGFnZXtcY2hhcHBhZ2VyIFxpZm9kZFxwYWdlbm8gXGVsc2UgXGhib3ggdG8gMHB0e30gXGNoYXBwYWdlclxmaX0KKworXGRlZlxzZXRjaGFwdGVybmV3cGFnZSAjMSB7XGNzbmFtZSBDSEFQUEFHIzFcZW5kY3NuYW1lfQorCitcZGVmXENIQVBQQUdvZmZ7JQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorXGdsb2JhbFxsZXRccGNoYXBzZXBtYWNybz1cY2hhcGJyZWFrCitcZ2xvYmFsXGxldFxwYWdlYWxpZ25tYWNybz1cY2hhcHBhZ2VyfQorCitcZGVmXENIQVBQQUdvbnslCitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCitcZ2xvYmFsXGxldFxwY2hhcHNlcG1hY3JvPVxjaGFwcGFnZXIKK1xnbG9iYWxcbGV0XHBhZ2VhbGlnbm1hY3JvPVxjaGFwcGFnZXIKK1xnbG9iYWxcZGVmXEhFQURJTkdTb257XEhFQURJTkdTc2luZ2xlfX0KKworXGRlZlxDSEFQUEFHb2RkeyUKK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwb2RkcGFnZQorXGdsb2JhbFxsZXRccGNoYXBzZXBtYWNybz1cY2hhcG9kZHBhZ2UKK1xnbG9iYWxcbGV0XHBhZ2VhbGlnbm1hY3JvPVxjaGFwb2RkcGFnZQorXGdsb2JhbFxkZWZcSEVBRElOR1NvbntcSEVBRElOR1Nkb3VibGV9fQorCitcQ0hBUFBBR29uCisKKyUgQ2hhcHRlciBvcGVuaW5nLgorJQorJSAjMSBpcyB0aGUgdGV4dCwgIzIgaXMgdGhlIHNlY3Rpb24gdHlwZSAoWW51bWJlcmVkLCBZbm90aGluZywKKyUgWWFwcGVuZGl4LCBZb21pdGZyb210b2MpLCAjMyB0aGUgY2hhcHRlciBudW1iZXIuCislCislIFRvIHRlc3QgYWdhaW5zdCBvdXIgYXJndW1lbnQuCitcZGVmXFlub3RoaW5na2V5d29yZHtZbm90aGluZ30KK1xkZWZcWW9taXRmcm9tdG9ja2V5d29yZHtZb21pdGZyb210b2N9CitcZGVmXFlhcHBlbmRpeGtleXdvcmR7WWFwcGVuZGl4fQorJQorXGRlZlxjaGFwbWFjcm8jMSMyIzN7JQorICBccGNoYXBzZXBtYWNybworICB7JQorICAgIFxjaGFwZm9udHMgXHJtCisgICAgJQorICAgICUgSGF2ZSB0byBkZWZpbmUgXHRoaXNzZWN0aW9uIGJlZm9yZSBjYWxsaW5nIFxkb25vZGVyZWYsIGJlY2F1c2UgdGhlCisgICAgJSB4cmVmIGNvZGUgZXZlbnR1YWxseSB1c2VzIGl0LiAgT24gdGhlIG90aGVyIGhhbmQsIGl0IGhhcyB0byBiZSBjYWxsZWQKKyAgICAlIGFmdGVyIFxwY2hhcHNlcG1hY3JvLCBvciB0aGUgaGVhZGxpbmUgd2lsbCBjaGFuZ2UgdG9vIHNvb24uCisgICAgXGdkZWZcdGhpc3NlY3Rpb257IzF9JQorICAgIFxnZGVmXHRoaXNjaGFwdGVybmFtZXsjMX0lCisgICAgJQorICAgICUgT25seSBpbnNlcnQgdGhlIHNlcGFyYXRpbmcgc3BhY2UgaWYgd2UgaGF2ZSBhIGNoYXB0ZXIvYXBwZW5kaXgKKyAgICAlIG51bWJlciwgYW5kIGRvbid0IHByaW50IHRoZSB1bm51bWJlcmVkIGBgbnVtYmVyJycuCisgICAgXGRlZlx0ZW1wdHlwZXsjMn0lCisgICAgXGlmeFx0ZW1wdHlwZVxZbm90aGluZ2tleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7fSUKKyAgICAgIFxkZWZcdG9jdHlwZXt1bm5jaGFwfSUKKyAgICAgIFxnZGVmXHRoaXNjaGFwdGVyeyMxfSUKKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWW9taXRmcm9tdG9ja2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHt9JSBjb250ZW50cyBsaWtlIHVubnVtYmVyZWQsIGJ1dCBubyB0b2MgZW50cnkKKyAgICAgIFxkZWZcdG9jdHlwZXtvbWl0fSUKKyAgICAgIFxnZGVmXHRoaXNjaGFwdGVye30lCisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlhcHBlbmRpeGtleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7XHB1dHdvcmRBcHBlbmRpeHt9ICMzXGVuc3BhY2V9JQorICAgICAgXGRlZlx0b2N0eXBle2FwcH0lCisgICAgICAlIFdlIGRvbid0IHN1YnN0aXR1dGUgdGhlIGFjdHVhbCBjaGFwdGVyIG5hbWUgaW50byBcdGhpc2NoYXB0ZXIKKyAgICAgICUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IGl0cyBtYWNyb3MgZXZhbHVhdGVkIG5vdy4gIEFuZCB3ZSBkb24ndAorICAgICAgJSB1c2UgXHRoaXNzZWN0aW9uIGJlY2F1c2UgdGhhdCBjaGFuZ2VzIHdpdGggZWFjaCBzZWN0aW9uLgorICAgICAgJQorICAgICAgXHhkZWZcdGhpc2NoYXB0ZXJ7XHB1dHdvcmRBcHBlbmRpeHt9IFxhcHBlbmRpeGxldHRlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFxub2V4cGFuZFx0aGlzY2hhcHRlcm5hbWV9JQorICAgIFxlbHNlCisgICAgICBcc2V0Ym94MCA9IFxoYm94eyMzXGVuc3BhY2V9JQorICAgICAgXGRlZlx0b2N0eXBle251bWNoYXB9JQorICAgICAgXHhkZWZcdGhpc2NoYXB0ZXJ7XHB1dHdvcmRDaGFwdGVye30gXHRoZVxjaGFwbm86CisgICAgICAgICAgICAgICAgICAgICAgICBcbm9leHBhbmRcdGhpc2NoYXB0ZXJuYW1lfSUKKyAgICBcZmlcZmlcZmkKKyAgICAlCisgICAgJSBXcml0ZSB0aGUgdG9jIGVudHJ5IGZvciB0aGlzIGNoYXB0ZXIuICBNdXN0IGNvbWUgYmVmb3JlIHRoZQorICAgICUgXGRvbm9kZXJlZiwgYmVjYXVzZSB3ZSBpbmNsdWRlIHRoZSBjdXJyZW50IG5vZGUgbmFtZSBpbiB0aGUgdG9jCisgICAgJSBlbnRyeSwgYW5kIFxkb25vZGVyZWYgcmVzZXRzIGl0IHRvIGVtcHR5LgorICAgIFx3cml0ZXRvY2VudHJ5e1x0b2N0eXBlfXsjMX17IzN9JQorICAgICUKKyAgICAlIEZvciBwZGZ0ZXgsIHdlIGhhdmUgdG8gd3JpdGUgb3V0IHRoZSBub2RlIGRlZmluaXRpb24gKGFrYSwgbWFrZQorICAgICUgdGhlIHBkZmRlc3QpIGFmdGVyIGFueSBwYWdlIGJyZWFrLCBidXQgYmVmb3JlIHRoZSBhY3R1YWwgdGV4dCBoYXMKKyAgICAlIGJlZW4gdHlwZXNldC4gIElmIHRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHBkZiBvdXRsaW5lIGlzIGFmdGVyIHRoZQorICAgICUgdGV4dCwgdGhlbiBqdW1waW5nIGZyb20gdGhlIG91dGxpbmUgbWF5IHdpbmQgdXAgd2l0aCB0aGUgdGV4dCBub3QKKyAgICAlIGJlaW5nIHZpc2libGUsIGZvciBpbnN0YW5jZSB1bmRlciBoaWdoIG1hZ25pZmljYXRpb24uCisgICAgXGRvbm9kZXJlZnsjMn0lCisgICAgJQorICAgICUgVHlwZXNldCB0aGUgYWN0dWFsIGhlYWRpbmcuCisgICAgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDAgXHRvbGVyYW5jZT01MDAwIFxwYXJpbmRlbnQ9MHB0IFxyYWdnZWRyaWdodAorICAgICAgICAgIFxoYW5naW5kZW50PVx3ZDAgXGNlbnRlcnBhcmFtZXRlcnNtYXliZQorICAgICAgICAgIFx1bmhib3gwICMxXHBhcn0lCisgIH0lCisgIFxub2JyZWFrXGJpZ3NraXAgJSBubyBwYWdlIGJyZWFrIGFmdGVyIGEgY2hhcHRlciB0aXRsZQorICBcbm9icmVhaworfQorCislIEBjZW50ZXJjaGFwIC0tIGNlbnRlcmVkIGFuZCB1bm51bWJlcmVkLgorXGxldFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUgPSBccmVsYXgKK1xkZWZcY2VudGVycGFyYW1ldGVyc3slCisgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieSAzXHJpZ2h0c2tpcAorICBcbGVmdHNraXAgPSBccmlnaHRza2lwCisgIFxwYXJmaWxsc2tpcCA9IDBwdAorfQorCisKKyUgSSBkb24ndCB0aGluayB0aGlzIGNoYXB0ZXIgc3R5bGUgaXMgc3VwcG9ydGVkIGFueSBtb3JlLCBzbyBJJ20gbm90CislIHVwZGF0aW5nIGl0IHdpdGggdGhlIG5ldyBub2RlcmVmIHN0dWZmLiAgV2UnbGwgc2VlLiAgLS1rYXJsLCAxMWF1ZzAzLgorJQorXGRlZlxzZXRjaGFwdGVyc3R5bGUgIzEge1xjc25hbWUgQ0hBUEYjMVxlbmRjc25hbWV9CislCitcZGVmXHVubmNoZm9wZW4gIzF7JQorXGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwXHRvbGVyYW5jZT01MDAwCisgICAgICAgICAgICAgICAgICAgICAgIFxwYXJpbmRlbnQ9MHB0XHJhZ2dlZHJpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgIFxybSAjMVxoZmlsbH19XGJpZ3NraXAgXHBhclxub2JyZWFrCit9CitcZGVmXGNoZm9wZW4gIzEjMntcY2hhcG9kZHBhZ2Uge1xjaGFwZm9udHMKK1x2Ym94IHRvIDNpbntcdmZpbCBcaGJveCB0b1xoc2l6ZXtcaGZpbCAjMn0gXGhib3ggdG9caHNpemV7XGhmaWwgIzF9IFx2ZmlsfX0lCitccGFyXHBlbmFsdHkgNTAwMCAlCit9CitcZGVmXGNlbnRlcmNoZm9wZW4gIzF7JQorXGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwXHRvbGVyYW5jZT01MDAwCisgICAgICAgICAgICAgICAgICAgICAgIFxwYXJpbmRlbnQ9MHB0CisgICAgICAgICAgICAgICAgICAgICAgIFxoZmlsbCB7XHJtICMxfVxoZmlsbH19XGJpZ3NraXAgXHBhclxub2JyZWFrCit9CitcZGVmXENIQVBGb3BlbnslCisgIFxnbG9iYWxcbGV0XGNoYXBtYWNybz1cY2hmb3BlbgorICBcZ2xvYmFsXGxldFxjZW50ZXJjaGFwbWFjcm89XGNlbnRlcmNoZm9wZW59CisKKworJSBTZWN0aW9uIHRpdGxlcy4gIFRoZXNlIG1hY3JvcyBjb21iaW5lIHRoZSBzZWN0aW9uIG51bWJlciBwYXJ0cyBhbmQKKyUgY2FsbCB0aGUgZ2VuZXJpYyBcc2VjdGlvbmhlYWRpbmcgdG8gZG8gdGhlIHByaW50aW5nLgorJQorXG5ld3NraXBcc2VjaGVhZGluZ3NraXAKK1xkZWZcc2VjaGVhZGluZ2JyZWFre1xkb2JyZWFrIFxzZWNoZWFkaW5nc2tpcHstMTAwMH19CisKKyUgU3Vic2VjdGlvbiB0aXRsZXMuCitcbmV3c2tpcFxzdWJzZWNoZWFkaW5nc2tpcAorXGRlZlxzdWJzZWNoZWFkaW5nYnJlYWt7XGRvYnJlYWsgXHN1YnNlY2hlYWRpbmdza2lwey01MDB9fQorCislIFN1YnN1YnNlY3Rpb24gdGl0bGVzLgorXGRlZlxzdWJzdWJzZWNoZWFkaW5nc2tpcHtcc3Vic2VjaGVhZGluZ3NraXB9CitcZGVmXHN1YnN1YnNlY2hlYWRpbmdicmVha3tcc3Vic2VjaGVhZGluZ2JyZWFrfQorCisKKyUgUHJpbnQgYW55IHNpemUsIGFueSB0eXBlLCBzZWN0aW9uIHRpdGxlLgorJQorJSAjMSBpcyB0aGUgdGV4dCwgIzIgaXMgdGhlIHNlY3Rpb24gbGV2ZWwgKHNlYy9zdWJzZWMvc3Vic3Vic2VjKSwgIzMgaXMKKyUgdGhlIHNlY3Rpb24gdHlwZSBmb3IgeHJlZnMgKFludW1iZXJlZCwgWW5vdGhpbmcsIFlhcHBlbmRpeCksICM0IGlzIHRoZQorJSBzZWN0aW9uIG51bWJlci4KKyUKK1xkZWZcc2VjdGlvbmhlYWRpbmcjMSMyIzMjNHslCisgIHslCisgICAgJSBTd2l0Y2ggdG8gdGhlIHJpZ2h0IHNldCBvZiBmb250cy4KKyAgICBcY3NuYW1lICMyZm9udHNcZW5kY3NuYW1lIFxybQorICAgICUKKyAgICAlIEluc2VydCBzcGFjZSBhYm92ZSB0aGUgaGVhZGluZy4KKyAgICBcY3NuYW1lICMyaGVhZGluZ2JyZWFrXGVuZGNzbmFtZQorICAgICUKKyAgICAlIE9ubHkgaW5zZXJ0IHRoZSBzcGFjZSBhZnRlciB0aGUgbnVtYmVyIGlmIHdlIGhhdmUgYSBzZWN0aW9uIG51bWJlci4KKyAgICBcZGVmXHNlY3Rpb25sZXZlbHsjMn0lCisgICAgXGRlZlx0ZW1wdHlwZXsjM30lCisgICAgJQorICAgIFxpZnhcdGVtcHR5cGVcWW5vdGhpbmdrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e30lCisgICAgICBcZGVmXHRvY3R5cGV7dW5ufSUKKyAgICAgIFxnZGVmXHRoaXNzZWN0aW9ueyMxfSUKKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWW9taXRmcm9tdG9ja2V5d29yZAorICAgICAgJSBmb3IgQGhlYWRpbmdzIC0tIG5vIHNlY3Rpb24gbnVtYmVyLCBkb24ndCBpbmNsdWRlIGluIHRvYywKKyAgICAgICUgYW5kIGRvbid0IHJlZGVmaW5lIFx0aGlzc2VjdGlvbi4KKyAgICAgIFxzZXRib3gwID0gXGhib3h7fSUKKyAgICAgIFxkZWZcdG9jdHlwZXtvbWl0fSUKKyAgICAgIFxsZXRcc2VjdGlvbmxldmVsPVxlbXB0eQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZYXBwZW5kaXhrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94eyM0XGVuc3BhY2V9JQorICAgICAgXGRlZlx0b2N0eXBle2FwcH0lCisgICAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgXGVsc2UKKyAgICAgIFxzZXRib3gwID0gXGhib3h7IzRcZW5zcGFjZX0lCisgICAgICBcZGVmXHRvY3R5cGV7bnVtfSUKKyAgICAgIFxnZGVmXHRoaXNzZWN0aW9ueyMxfSUKKyAgICBcZmlcZmlcZmkKKyAgICAlCisgICAgJSBXcml0ZSB0aGUgdG9jIGVudHJ5IChiZWZvcmUgXGRvbm9kZXJlZikuICBTZWUgY29tbWVudHMgaW4gXGNoYXBtYWNyby4KKyAgICBcd3JpdGV0b2NlbnRyeXtcdG9jdHlwZVxzZWN0aW9ubGV2ZWx9eyMxfXsjNH0lCisgICAgJQorICAgICUgV3JpdGUgdGhlIG5vZGUgcmVmZXJlbmNlICg9IHBkZiBkZXN0aW5hdGlvbiBmb3IgcGRmdGV4KS4KKyAgICAlIEFnYWluLCBzZWUgY29tbWVudHMgaW4gXGNoYXBtYWNyby4KKyAgICBcZG9ub2RlcmVmeyMzfSUKKyAgICAlCisgICAgJSBJbnRlcmxpbmUgZ2x1ZSB3aWxsIGJlIGluc2VydGVkIHdoZW4gdGhlIHZib3ggaXMgY29tcGxldGVkLgorICAgICUgVGhhdCBnbHVlIHdpbGwgYmUgYSB2YWxpZCBicmVha3BvaW50IGZvciB0aGUgcGFnZSwgc2luY2UgaXQnbGwgYmUKKyAgICAlIHByZWNlZGVkIGJ5IGEgd2hhdHNpdCAodXN1YWxseSBmcm9tIHRoZSBcZG9ub2RlcmVmLCBvciBmcm9tIHRoZQorICAgICUgXHdyaXRldG9jZW50cnkgaWYgdGhlcmUgd2FzIG5vIG5vZGUpLiAgV2UgZG9uJ3Qgd2FudCB0byBhbGxvdyB0aGF0CisgICAgJSBicmVhaywgc2luY2UgdGhlbiB0aGUgd2hhdHNpdHMgY291bGQgZW5kIHVwIG9uIHBhZ2UgbiB3aGlsZSB0aGUKKyAgICAlIHNlY3Rpb24gaXMgb24gcGFnZSBuKzEsIHRodXMgdG9jL2V0Yy4gYXJlIHdyb25nLiAgRGViaWFuIGJ1ZyAyNzYwMDAuCisgICAgXG5vYnJlYWsKKyAgICAlCisgICAgJSBPdXRwdXQgdGhlIGFjdHVhbCBzZWN0aW9uIGhlYWRpbmcuCisgICAgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDAgXHRvbGVyYW5jZT01MDAwIFxwYXJpbmRlbnQ9MHB0IFxyYWdnZWRyaWdodAorICAgICAgICAgIFxoYW5naW5kZW50PVx3ZDAgICUgemVybyBpZiBubyBzZWN0aW9uIG51bWJlcgorICAgICAgICAgIFx1bmhib3gwICMxfSUKKyAgfSUKKyAgJSBBZGQgZXh0cmEgc3BhY2UgYWZ0ZXIgdGhlIGhlYWRpbmcgLS0gaGFsZiBvZiB3aGF0ZXZlciBjYW1lIGFib3ZlIGl0LgorICAlIERvbid0IGFsbG93IHN0cmV0Y2gsIHRob3VnaC4KKyAgXGtlcm4gLjUgXGNzbmFtZSAjMmhlYWRpbmdza2lwXGVuZGNzbmFtZQorICAlCisgICUgRG8gbm90IGxldCB0aGUga2VybiBiZSBhIHBvdGVudGlhbCBicmVha3BvaW50LCBhcyBpdCB3b3VsZCBiZSBpZiBpdAorICAlIHdhcyBmb2xsb3dlZCBieSBnbHVlLgorICBcbm9icmVhaworICAlCisgICUgV2UnbGwgYWxtb3N0IGNlcnRhaW5seSBzdGFydCBhIHBhcmFncmFwaCBuZXh0LCBzbyBkb24ndCBsZXQgdGhhdAorICAlIGdsdWUgYWNjdW11bGF0ZS4gIChOb3QgYSBicmVha3BvaW50IGJlY2F1c2UgaXQncyBwcmVjZWRlZCBieSBhCisgICUgZGlzY2FyZGFibGUgaXRlbS4pCisgIFx2c2tpcC1ccGFyc2tpcAorICAlIAorICAlIFRoaXMgaXMgcHVyZWx5IHNvIHRoZSBsYXN0IGl0ZW0gb24gdGhlIGxpc3QgaXMgYSBrbm93biBccGVuYWx0eSA+CisgICUgMTAwMDAuICBUaGlzIGlzIHNvIFxzdGFydGRlZnVuIGNhbiBhdm9pZCBhbGxvd2luZyBicmVha3BvaW50cyBhZnRlcgorICAlIHNlY3Rpb24gaGVhZGluZ3MuICBPdGhlcndpc2UsIGl0IHdvdWxkIGluc2VydCBhIHZhbGlkIGJyZWFrcG9pbnQgYmV0d2VlbjoKKyAgJSAKKyAgJSAgIEBzZWN0aW9uIHNlYy13aGF0ZXZlcgorICAlICAgQGRlZmZuIGRlZi13aGF0ZXZlcgorICBccGVuYWx0eSAxMDAwMQorfQorCisKK1xtZXNzYWdle3RvYyx9CislIFRhYmxlIG9mIGNvbnRlbnRzLgorXG5ld3dyaXRlXHRvY2ZpbGUKKworJSBXcml0ZSBhbiBlbnRyeSB0byB0aGUgdG9jIGZpbGUsIG9wZW5pbmcgaXQgaWYgbmVjZXNzYXJ5LgorJSBDYWxsZWQgZnJvbSBAY2hhcHRlciwgZXRjLgorJQorJSBFeGFtcGxlIHVzYWdlOiBcd3JpdGV0b2NlbnRyeXtzZWN9e1NlY3Rpb24gTmFtZX17XHRoZVxjaGFwbm8uXHRoZVxzZWNub30KKyUgV2UgYXBwZW5kIHRoZSBjdXJyZW50IG5vZGUgbmFtZSAoaWYgYW55KSBhbmQgcGFnZSBudW1iZXIgYXMgYWRkaXRpb25hbAorJSBhcmd1bWVudHMgZm9yIHRoZSBce2NoYXAsc2VjLC4uLn1lbnRyeSBtYWNyb3Mgd2hpY2ggd2lsbCBldmVudHVhbGx5CislIHJlYWQgdGhpcy4gIFRoZSBub2RlIG5hbWUgaXMgdXNlZCBpbiB0aGUgcGRmIG91dGxpbmVzIGFzIHRoZQorJSBkZXN0aW5hdGlvbiB0byBqdW1wIHRvLgorJQorJSBXZSBvcGVuIHRoZSAudG9jIGZpbGUgZm9yIHdyaXRpbmcgaGVyZSBpbnN0ZWFkIG9mIGF0IEBzZXRmaWxlbmFtZSAob3IKKyUgYW55IG90aGVyIGZpeGVkIHRpbWUpIHNvIHRoYXQgQGNvbnRlbnRzIGNhbiBiZSBhbnl3aGVyZSBpbiB0aGUgZG9jdW1lbnQuCislIEJ1dCBpZiAjMSBpcyBgb21pdCcsIHRoZW4gd2UgZG9uJ3QgZG8gYW55dGhpbmcuICBUaGlzIGlzIHVzZWQgZm9yIHRoZQorJSB0YWJsZSBvZiBjb250ZW50cyBjaGFwdGVyIG9wZW5pbmdzIHRoZW1zZWx2ZXMuCislCitcbmV3aWZcaWZ0b2NmaWxlb3BlbmVkCitcZGVmXG9taXRrZXl3b3Jke29taXR9JQorJQorXGRlZlx3cml0ZXRvY2VudHJ5IzEjMiMzeyUKKyAgXGVkZWZcd3JpdGV0b2N0eXBleyMxfSUKKyAgXGlmeFx3cml0ZXRvY3R5cGVcb21pdGtleXdvcmQgXGVsc2UKKyAgICBcaWZ0b2NmaWxlb3BlbmVkXGVsc2UKKyAgICAgIFxpbW1lZGlhdGVcb3Blbm91dFx0b2NmaWxlID0gXGpvYm5hbWUudG9jCisgICAgICBcZ2xvYmFsXHRvY2ZpbGVvcGVuZWR0cnVlCisgICAgXGZpCisgICAgJQorICAgIFxpZmxpbmtzCisgICAgICB7XGF0ZHVtbWllcworICAgICAgIFxlZGVmXHRlbXB7JQorICAgICAgICAgXHdyaXRlXHRvY2ZpbGV7QCMxZW50cnl7IzJ9eyMzfXtcbGFzdG5vZGV9e1xub2V4cGFuZFxmb2xpb319fSUKKyAgICAgICBcdGVtcAorICAgICAgfSUKKyAgICBcZmkKKyAgXGZpCisgICUKKyAgJSBUZWxsIFxzaGlwb3V0IHRvIGNyZWF0ZSBhIHBkZiBkZXN0aW5hdGlvbiBvbiBlYWNoIHBhZ2UsIGlmIHdlJ3JlCisgICUgd3JpdGluZyBwZGYuICBUaGVzZSBhcmUgdXNlZCBpbiB0aGUgdGFibGUgb2YgY29udGVudHMuICBXZSBjYW4ndAorICAlIGp1c3Qgd3JpdGUgb25lIG9uIGV2ZXJ5IHBhZ2UgYmVjYXVzZSB0aGUgdGl0bGUgcGFnZXMgYXJlIG51bWJlcmVkCisgICUgMSBhbmQgMiAodGhlIHBhZ2UgbnVtYmVycyBhcmVuJ3QgcHJpbnRlZCksIGFuZCBzbyBhcmUgdGhlIGZpcnN0CisgICUgdHdvIHBhZ2VzIG9mIHRoZSBkb2N1bWVudC4gIFRodXMsIHdlJ2QgaGF2ZSB0d28gZGVzdGluYXRpb25zIG5hbWVkCisgICUgYDEnLCBhbmQgdHdvIG5hbWVkIGAyJy4KKyAgXGlmcGRmIFxnbG9iYWxccGRmbWFrZXBhZ2VkZXN0dHJ1ZSBcZmkKK30KKworCislIFRoZXNlIGNoYXJhY3RlcnMgZG8gbm90IHByaW50IHByb3Blcmx5IGluIHRoZSBDb21wdXRlciBNb2Rlcm4gcm9tYW4KKyUgZm9udHMsIHNvIHdlIG11c3QgdGFrZSBzcGVjaWFsIGNhcmUuICBUaGlzIGlzIG1vcmUgb3IgbGVzcyByZWR1bmRhbnQKKyUgd2l0aCB0aGUgVGV4aW5mbyBpbnB1dCBmb3JtYXQgc2V0dXAgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCislIAorXGRlZlxhY3RpdmVjYXRjb2Rlc3slCisgIFxjYXRjb2RlYFwiPVxhY3RpdmUKKyAgXGNhdGNvZGVgXCQ9XGFjdGl2ZQorICBcY2F0Y29kZWBcPD1cYWN0aXZlCisgIFxjYXRjb2RlYFw+PVxhY3RpdmUKKyAgXGNhdGNvZGVgXFw9XGFjdGl2ZQorICBcY2F0Y29kZWBcXj1cYWN0aXZlCisgIFxjYXRjb2RlYFxfPVxhY3RpdmUKKyAgXGNhdGNvZGVgXHw9XGFjdGl2ZQorICBcY2F0Y29kZWBcfj1cYWN0aXZlCit9CisKKworJSBSZWFkIHRoZSB0b2MgZmlsZSwgd2hpY2ggaXMgZXNzZW50aWFsbHkgVGV4aW5mbyBpbnB1dC4KK1xkZWZccmVhZHRvY2ZpbGV7JQorICBcc2V0dXBkYXRhZmlsZQorICBcYWN0aXZlY2F0Y29kZXMKKyAgXGlucHV0IFxqb2JuYW1lLnRvYworfQorCitcbmV3c2tpcFxjb250ZW50c3JpZ2h0bWFyZ2luIFxjb250ZW50c3JpZ2h0bWFyZ2luPTFpbgorXG5ld2NvdW50XHNhdmVwYWdlbm8KK1xuZXdjb3VudFxsYXN0bmVnYXRpdmVwYWdlbm8gXGxhc3RuZWdhdGl2ZXBhZ2VubyA9IC0xCisKKyUgUHJlcGFyZSB0byByZWFkIHdoYXQgd2UndmUgd3JpdHRlbiB0byBcdG9jZmlsZS4KKyUKK1xkZWZcc3RhcnRjb250ZW50cyMxeyUKKyAgJSBJZiBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb24sIGFuZCBAaGVhZGluZ3MgZG91YmxlLCB0aGUgY29udGVudHMgc2hvdWxkCisgICUgc3RhcnQgb24gYW4gb2RkIHBhZ2UsIHVubGlrZSBjaGFwdGVycy4gIFRodXMsIHdlIG1haW50YWluCisgICUgXGNvbnRlbnRzYWxpZ25tYWNybyBpbiBwYXJhbGxlbCB3aXRoIFxwYWdlYWxpZ25tYWNyby4KKyAgJSBGcm9tOiBUb3Jiam9ybiBHcmFubHVuZCA8dGVnZUBtYXRlbWF0aWsuc3Uuc2U+CisgIFxjb250ZW50c2FsaWdubWFjcm8KKyAgXGltbWVkaWF0ZVxjbG9zZW91dFx0b2NmaWxlCisgICUKKyAgJSBEb24ndCBuZWVkIHRvIHB1dCBgQ29udGVudHMnIG9yIGBTaG9ydCBDb250ZW50cycgaW4gdGhlIGhlYWRsaW5lLgorICAlIEl0IGlzIGFidW5kYW50bHkgY2xlYXIgd2hhdCB0aGV5IGFyZS4KKyAgXGRlZlx0aGlzY2hhcHRlcnt9JQorICBcY2hhcG1hY3JveyMxfXtZb21pdGZyb210b2N9e30lCisgICUKKyAgXHNhdmVwYWdlbm8gPSBccGFnZW5vCisgIFxiZWdpbmdyb3VwICAgICAgICAgICAgICAgICAgJSBTZXQgdXAgdG8gaGFuZGxlIGNvbnRlbnRzIGZpbGVzIHByb3Blcmx5LgorICAgIFxyYWdnZWRib3R0b20gICAgICAgICAgICAgICUgV29ycnkgbW9yZSBhYm91dCBicmVha3BvaW50cyB0aGFuIHRoZSBib3R0b20uCisgICAgXGFkdmFuY2VcaHNpemUgYnkgLVxjb250ZW50c3JpZ2h0bWFyZ2luICUgRG9uJ3QgdXNlIHRoZSBmdWxsIGxpbmUgbGVuZ3RoLgorICAgICUKKyAgICAlIFJvbWFuIG51bWVyYWxzIGZvciBwYWdlIG51bWJlcnMuCisgICAgXGlmbnVtIFxwYWdlbm8+MCBcZ2xvYmFsXHBhZ2VubyA9IFxsYXN0bmVnYXRpdmVwYWdlbm8gXGZpCit9CisKKworJSBOb3JtYWwgKGxvbmcpIHRvYy4KK1xkZWZcY29udGVudHN7JQorICBcc3RhcnRjb250ZW50c3tccHV0d29yZFRPQ30lCisgICAgXG9wZW5pbiAxIFxqb2JuYW1lLnRvYworICAgIFxpZmVvZiAxIFxlbHNlCisgICAgICBccmVhZHRvY2ZpbGUKKyAgICBcZmkKKyAgICBcdmZpbGwgXGVqZWN0CisgICAgXGNvbnRlbnRzYWxpZ25tYWNybyAlIGluIGNhc2UgQHNldGNoYXB0ZXJuZXdwYWdlIG9kZCBpcyBpbiBlZmZlY3QKKyAgICBcaWZlb2YgMSBcZWxzZQorICAgICAgXHBkZm1ha2VvdXRsaW5lcworICAgIFxmaQorICAgIFxjbG9zZWluIDEKKyAgXGVuZGdyb3VwCisgIFxsYXN0bmVnYXRpdmVwYWdlbm8gPSBccGFnZW5vCisgIFxnbG9iYWxccGFnZW5vID0gXHNhdmVwYWdlbm8KK30KKworJSBBbmQganVzdCB0aGUgY2hhcHRlcnMuCitcZGVmXHN1bW1hcnljb250ZW50c3slCisgIFxzdGFydGNvbnRlbnRze1xwdXR3b3JkU2hvcnRUT0N9JQorICAgICUKKyAgICBcbGV0XG51bWNoYXBlbnRyeSA9IFxzaG9ydGNoYXBlbnRyeQorICAgIFxsZXRcYXBwZW50cnkgPSBcc2hvcnRjaGFwZW50cnkKKyAgICBcbGV0XHVubmNoYXBlbnRyeSA9IFxzaG9ydHVubmNoYXBlbnRyeQorICAgICUgV2Ugd2FudCBhIHRydWUgcm9tYW4gaGVyZSBmb3IgdGhlIHBhZ2UgbnVtYmVycy4KKyAgICBcc2VjZm9udHMKKyAgICBcbGV0XHJtPVxzaG9ydGNvbnRybSBcbGV0XGJmPVxzaG9ydGNvbnRiZgorICAgIFxsZXRcc2w9XHNob3J0Y29udHNsIFxsZXRcdHQ9XHNob3J0Y29udHR0CisgICAgXHJtCisgICAgXGh5cGhlbnBlbmFsdHkgPSAxMDAwMAorICAgIFxhZHZhbmNlXGJhc2VsaW5lc2tpcCBieSAxcHQgJSBPcGVuIGl0IHVwIGEgbGl0dGxlLgorICAgIFxkZWZcbnVtc2VjZW50cnkjIzEjIzIjIzMjIzR7fQorICAgIFxsZXRcYXBwc2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XHVubnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFxudW1zdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcYXBwc3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XHVubnN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFxudW1zdWJzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcYXBwc3Vic3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XHVubnN1YnN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXG9wZW5pbiAxIFxqb2JuYW1lLnRvYworICAgIFxpZmVvZiAxIFxlbHNlCisgICAgICBccmVhZHRvY2ZpbGUKKyAgICBcZmkKKyAgICBcY2xvc2VpbiAxCisgICAgXHZmaWxsIFxlamVjdAorICAgIFxjb250ZW50c2FsaWdubWFjcm8gJSBpbiBjYXNlIEBzZXRjaGFwdGVybmV3cGFnZSBvZGQgaXMgaW4gZWZmZWN0CisgIFxlbmRncm91cAorICBcbGFzdG5lZ2F0aXZlcGFnZW5vID0gXHBhZ2VubworICBcZ2xvYmFsXHBhZ2VubyA9IFxzYXZlcGFnZW5vCit9CitcbGV0XHNob3J0Y29udGVudHMgPSBcc3VtbWFyeWNvbnRlbnRzCisKKyUgVHlwZXNldCB0aGUgbGFiZWwgZm9yIGEgY2hhcHRlciBvciBhcHBlbmRpeCBmb3IgdGhlIHNob3J0IGNvbnRlbnRzLgorJSBUaGUgYXJnIGlzLCBlLmcuLCBgQScgZm9yIGFuIGFwcGVuZGl4LCBvciBgMycgZm9yIGEgY2hhcHRlci4KKyUKK1xkZWZcc2hvcnRjaGFwbGFiZWwjMXslCisgICUgVGhpcyBzcGFjZSBzaG91bGQgYmUgZW5vdWdoLCBzaW5jZSBhIHNpbmdsZSBudW1iZXIgaXMgLjVlbSwgYW5kIHRoZQorICAlIHdpZGVzdCBsZXR0ZXIgKE0pIGlzIDFlbSwgYXQgbGVhc3QgaW4gdGhlIENvbXB1dGVyIE1vZGVybiBmb250cy4KKyAgJSBCdXQgdXNlIFxoc3MganVzdCBpbiBjYXNlLgorICAlIChUaGlzIHNwYWNlIGRvZXNuJ3QgaW5jbHVkZSB0aGUgZXh0cmEgc3BhY2UgdGhhdCBnZXRzIGFkZGVkIGFmdGVyCisgICUgdGhlIGxhYmVsOyB0aGF0IGdldHMgcHV0IGluIGJ5IFxzaG9ydGNoYXBlbnRyeSBhYm92ZS4pCisgICUKKyAgJSBXZSdkIGxpa2UgdG8gcmlnaHQtanVzdGlmeSBjaGFwdGVyIG51bWJlcnMsIGJ1dCB0aGF0IGxvb2tzIHN0cmFuZ2UKKyAgJSB3aXRoIGFwcGVuZGl4IGxldHRlcnMuICBBbmQgcmlnaHQtanVzdGlmeWluZyBudW1iZXJzIGFuZAorICAlIGxlZnQtanVzdGlmeWluZyBsZXR0ZXJzIGxvb2tzIHN0cmFuZ2Ugd2hlbiB0aGVyZSBpcyBsZXNzIHRoYW4gMTAKKyAgJSBjaGFwdGVycy4gIEhhdmUgdG8gcmVhZCB0aGUgd2hvbGUgdG9jIG9uY2UgdG8ga25vdyBob3cgbWFueSBjaGFwdGVycworICAlIHRoZXJlIGFyZSBiZWZvcmUgZGVjaWRpbmcgLi4uCisgIFxoYm94IHRvIDFlbXsjMVxoc3N9JQorfQorCislIFRoZXNlIG1hY3JvcyBnZW5lcmF0ZSBpbmRpdmlkdWFsIGVudHJpZXMgaW4gdGhlIHRhYmxlIG9mIGNvbnRlbnRzLgorJSBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNoYXB0ZXIgb3Igc2VjdGlvbiBuYW1lLgorJSBUaGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgcGFnZSBudW1iZXIuCislIFRoZSBhcmd1bWVudHMgaW4gYmV0d2VlbiBhcmUgdGhlIGNoYXB0ZXIgbnVtYmVyLCBzZWN0aW9uIG51bWJlciwgLi4uCisKKyUgQ2hhcHRlcnMsIGluIHRoZSBtYWluIGNvbnRlbnRzLgorXGRlZlxudW1jaGFwZW50cnkjMSMyIzMjNHtcZG9jaGFwZW50cnl7IzJcbGFiZWxzcGFjZSMxfXsjNH19CislCislIENoYXB0ZXJzLCBpbiB0aGUgc2hvcnQgdG9jLgorJSBTZWUgY29tbWVudHMgaW4gXGRvY2hhcGVudHJ5IHJlIHZib3ggYW5kIHJlbGF0ZWQgc2V0dGluZ3MuCitcZGVmXHNob3J0Y2hhcGVudHJ5IzEjMiMzIzR7JQorICBcdG9jZW50cnl7XHNob3J0Y2hhcGxhYmVseyMyfVxsYWJlbHNwYWNlICMxfXtcZG9zaG9ydHBhZ2Vub1xiZ3JvdXAjNFxlZ3JvdXB9JQorfQorCislIEFwcGVuZGljZXMsIGluIHRoZSBtYWluIGNvbnRlbnRzLgorJSBOZWVkIHRoZSB3b3JkIEFwcGVuZGl4LCBhbmQgYSBmaXhlZC1zaXplIGJveC4KKyUKK1xkZWZcYXBwZW5kaXhib3gjMXslCisgICUgV2UgdXNlIE0gc2luY2UgaXQncyBwcm9iYWJseSB0aGUgd2lkZXN0IGxldHRlci4KKyAgXHNldGJveDAgPSBcaGJveHtccHV0d29yZEFwcGVuZGl4e30gTX0lCisgIFxoYm94IHRvIFx3ZDB7XHB1dHdvcmRBcHBlbmRpeHt9ICMxXGhzc319CislCitcZGVmXGFwcGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5e1xhcHBlbmRpeGJveHsjMn1cbGFiZWxzcGFjZSMxfXsjNH19CisKKyUgVW5udW1iZXJlZCBjaGFwdGVycy4KK1xkZWZcdW5uY2hhcGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5eyMxfXsjNH19CitcZGVmXHNob3J0dW5uY2hhcGVudHJ5IzEjMiMzIzR7XHRvY2VudHJ5eyMxfXtcZG9zaG9ydHBhZ2Vub1xiZ3JvdXAjNFxlZ3JvdXB9fQorCislIFNlY3Rpb25zLgorXGRlZlxudW1zZWNlbnRyeSMxIzIjMyM0e1xkb3NlY2VudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorXGxldFxhcHBzZWNlbnRyeT1cbnVtc2VjZW50cnkKK1xkZWZcdW5uc2VjZW50cnkjMSMyIzMjNHtcZG9zZWNlbnRyeXsjMX17IzR9fQorCislIFN1YnNlY3Rpb25zLgorXGRlZlxudW1zdWJzZWNlbnRyeSMxIzIjMyM0e1xkb3N1YnNlY2VudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorXGxldFxhcHBzdWJzZWNlbnRyeT1cbnVtc3Vic2VjZW50cnkKK1xkZWZcdW5uc3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzZWNlbnRyeXsjMX17IzR9fQorCislIEFuZCBzdWJzdWJzZWN0aW9ucy4KK1xkZWZcbnVtc3Vic3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzdWJzZWNlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KK1xsZXRcYXBwc3Vic3Vic2VjZW50cnk9XG51bXN1YnN1YnNlY2VudHJ5CitcZGVmXHVubnN1YnN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic3Vic2VjZW50cnl7IzF9eyM0fX0KKworJSBUaGlzIHBhcmFtZXRlciBjb250cm9scyB0aGUgaW5kZW50YXRpb24gb2YgdGhlIHZhcmlvdXMgbGV2ZWxzLgorJSBTYW1lIGFzIFxkZWZhdWx0cGFyaW5kZW50LgorXG5ld2RpbWVuXHRvY2luZGVudCBcdG9jaW5kZW50ID0gMTVwdAorCislIE5vdyBmb3IgdGhlIGFjdHVhbCB0eXBlc2V0dGluZy4gSW4gYWxsIHRoZXNlLCAjMSBpcyB0aGUgdGV4dCBhbmQgIzIgaXMgdGhlCislIHBhZ2UgbnVtYmVyLgorJQorJSBJZiB0aGUgdG9jIGhhcyB0byBiZSBicm9rZW4gb3ZlciBwYWdlcywgd2Ugd2FudCBpdCB0byBiZSBhdCBjaGFwdGVycworJSBpZiBhdCBhbGwgcG9zc2libGU7IGhlbmNlIHRoZSBccGVuYWx0eS4KK1xkZWZcZG9jaGFwZW50cnkjMSMyeyUKKyAgIFxwZW5hbHR5LTMwMCBcdnNraXAxXGJhc2VsaW5lc2tpcCBwbHVzLjMzXGJhc2VsaW5lc2tpcCBtaW51cy4yNVxiYXNlbGluZXNraXAKKyAgIFxiZWdpbmdyb3VwCisgICAgIFxjaGFwZW50cnlmb250cworICAgICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorICAgXGVuZGdyb3VwCisgICBcbm9icmVha1x2c2tpcCAuMjVcYmFzZWxpbmVza2lwIHBsdXMuMVxiYXNlbGluZXNraXAKK30KKworXGRlZlxkb3NlY2VudHJ5IzEjMntcYmVnaW5ncm91cAorICBcc2VjZW50cnlmb250cyBcbGVmdHNraXA9XHRvY2luZGVudAorICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorXGVuZGdyb3VwfQorCitcZGVmXGRvc3Vic2VjZW50cnkjMSMye1xiZWdpbmdyb3VwCisgIFxzdWJzZWNlbnRyeWZvbnRzIFxsZWZ0c2tpcD0yXHRvY2luZGVudAorICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorXGVuZGdyb3VwfQorCitcZGVmXGRvc3Vic3Vic2VjZW50cnkjMSMye1xiZWdpbmdyb3VwCisgIFxzdWJzdWJzZWNlbnRyeWZvbnRzIFxsZWZ0c2tpcD0zXHRvY2luZGVudAorICBcdG9jZW50cnl7IzF9e1xkb3BhZ2Vub1xiZ3JvdXAjMlxlZ3JvdXB9JQorXGVuZGdyb3VwfQorCislIFdlIHVzZSB0aGUgc2FtZSBcZW50cnkgbWFjcm8gYXMgZm9yIHRoZSBpbmRleCBlbnRyaWVzLgorXGxldFx0b2NlbnRyeSA9IFxlbnRyeQorCislIFNwYWNlIGJldHdlZW4gY2hhcHRlciAob3Igd2hhdGV2ZXIpIG51bWJlciBhbmQgdGhlIHRpdGxlLgorXGRlZlxsYWJlbHNwYWNle1xoc2tpcDFlbSBccmVsYXh9CisKK1xkZWZcZG9wYWdlbm8jMXt7XHJtICMxfX0KK1xkZWZcZG9zaG9ydHBhZ2VubyMxe3tccm0gIzF9fQorCitcZGVmXGNoYXBlbnRyeWZvbnRze1xzZWNmb250cyBccm19CitcZGVmXHNlY2VudHJ5Zm9udHN7XHRleHRmb250c30KK1xkZWZcc3Vic2VjZW50cnlmb250c3tcdGV4dGZvbnRzfQorXGRlZlxzdWJzdWJzZWNlbnRyeWZvbnRze1x0ZXh0Zm9udHN9CisKKworXG1lc3NhZ2V7ZW52aXJvbm1lbnRzLH0KKyUgQGZvbyAuLi4gQGVuZCBmb28uCisKKyUgQHBvaW50e30sIEByZXN1bHR7fSwgQGV4cGFuc2lvbnt9LCBAcHJpbnR7fSwgQGVxdWl2e30uCislCislIFNpbmNlIHRoZXNlIGNoYXJhY3RlcnMgYXJlIHVzZWQgaW4gZXhhbXBsZXMsIGl0IHNob3VsZCBiZSBhbiBldmVuIG51bWJlciBvZgorJSBcdHQgd2lkdGhzLiBFYWNoIFx0dCBjaGFyYWN0ZXIgaXMgMWVuLCBzbyB0d28gbWFrZXMgaXQgMWVtLgorJQorXGRlZlxwb2ludHskXHN0YXIkfQorXGRlZlxyZXN1bHR7XGxlYXZldm1vZGVccmFpc2UuMTVleFxoYm94IHRvIDFlbXtcaGZpbCRcUmlnaHRhcnJvdyRcaGZpbH19CitcZGVmXGV4cGFuc2lvbntcbGVhdmV2bW9kZVxyYWlzZS4xZXhcaGJveCB0byAxZW17XGhmaWwkXG1hcHN0byRcaGZpbH19CitcZGVmXHByaW50e1xsZWF2ZXZtb2RlXGxvd2VyLjFleFxoYm94IHRvIDFlbXtcaGZpbCRcZGFzaHYkXGhmaWx9fQorXGRlZlxlcXVpdntcbGVhdmV2bW9kZVxsb3dlci4xZXhcaGJveCB0byAxZW17XGhmaWwkXHB0ZXhlcXVpdiRcaGZpbH19CisKKyUgVGhlIEBlcnJvcnt9IGNvbW1hbmQuCislIEFkYXB0ZWQgZnJvbSB0aGUgVGVYYm9vaydzIFxib3hpdC4KKyUKK1xuZXdib3hcZXJyb3Jib3gKKyUKK3tcdGVudHQgXGdsb2JhbFxkaW1lbjAgPSAzZW19JSBXaWR0aCBvZiB0aGUgYm94LgorXGRpbWVuMiA9IC41NXB0ICUgVGhpY2tuZXNzIG9mIHJ1bGVzCislIFRoZSB0ZXh0LiAoYHInIGlzIG9wZW4gb24gdGhlIHJpZ2h0LCBgZScgc29tZXdoYXQgbGVzcyBzbyBvbiB0aGUgbGVmdC4pCitcc2V0Ym94MCA9IFxoYm94e1xrZXJuLS43NXB0IFx0ZW5zZiBlcnJvclxrZXJuLTEuNXB0fQorJQorXHNldGJveFxlcnJvcmJveD1caGJveCB0byBcZGltZW4we1xoZmlsCisgICBcaHNpemUgPSBcZGltZW4wIFxhZHZhbmNlXGhzaXplIGJ5IC01LjhwdCAlIFNwYWNlIHRvIGxlZnQrcmlnaHQuCisgICBcYWR2YW5jZVxoc2l6ZSBieSAtMlxkaW1lbjIgJSBSdWxlcy4KKyAgIFx2Ym94eyUKKyAgICAgIFxocnVsZSBoZWlnaHRcZGltZW4yCisgICAgICBcaGJveHtcdnJ1bGUgd2lkdGhcZGltZW4yIFxrZXJuM3B0ICAgICAgICAgICUgU3BhY2UgdG8gbGVmdCBvZiB0ZXh0LgorICAgICAgICAgXHZ0b3B7XGtlcm4yLjRwdCBcYm94MCBca2VybjIuNHB0fSUgU3BhY2UgYWJvdmUvYmVsb3cuCisgICAgICAgICBca2VybjNwdFx2cnVsZSB3aWR0aFxkaW1lbjJ9JSBTcGFjZSB0byByaWdodC4KKyAgICAgIFxocnVsZSBoZWlnaHRcZGltZW4yfQorICAgIFxoZmlsfQorJQorXGRlZlxlcnJvcntcbGVhdmV2bW9kZVxsb3dlci43ZXhcY29weVxlcnJvcmJveH0KKworJSBAdGV4IC4uLiBAZW5kIHRleCAgICBlc2NhcGVzIGludG8gcmF3IFRleCB0ZW1wb3JhcmlseS4KKyUgT25lIGV4Y2VwdGlvbjogQCBpcyBzdGlsbCBhbiBlc2NhcGUgY2hhcmFjdGVyLCBzbyB0aGF0IEBlbmQgdGV4IHdvcmtzLgorJSBCdXQgXEAgb3IgQEAgd2lsbCBnZXQgYSBwbGFpbiB0ZXggQCBjaGFyYWN0ZXIuCisKK1xlbnZkZWZcdGV4eyUKKyAgXGNhdGNvZGUgYFxcPTAgXGNhdGNvZGUgYFx7PTEgXGNhdGNvZGUgYFx9PTIKKyAgXGNhdGNvZGUgYFwkPTMgXGNhdGNvZGUgYFwmPTQgXGNhdGNvZGUgYFwjPTYKKyAgXGNhdGNvZGUgYFxePTcgXGNhdGNvZGUgYFxfPTggXGNhdGNvZGUgYFx+PVxhY3RpdmUgXGxldH49XHRpZQorICBcY2F0Y29kZSBgXCU9MTQKKyAgXGNhdGNvZGUgYFwrPVxvdGhlcgorICBcY2F0Y29kZSBgXCI9XG90aGVyCisgIFxjYXRjb2RlIGBcfD1cb3RoZXIKKyAgXGNhdGNvZGUgYFw8PVxvdGhlcgorICBcY2F0Y29kZSBgXD49XG90aGVyCisgIFxlc2NhcGVjaGFyPWBcXAorICAlCisgIFxsZXRcYj1ccHRleGIKKyAgXGxldFxidWxsZXQ9XHB0ZXhidWxsZXQKKyAgXGxldFxjPVxwdGV4YworICBcbGV0XCw9XHB0ZXhjb21tYQorICBcbGV0XC49XHB0ZXhkb3QKKyAgXGxldFxkb3RzPVxwdGV4ZG90cworICBcbGV0XGVxdWl2PVxwdGV4ZXF1aXYKKyAgXGxldFwhPVxwdGV4ZXhjbGFtCisgIFxsZXRcaT1ccHRleGkKKyAgXGxldFxpbmRlbnQ9XHB0ZXhpbmRlbnQKKyAgXGxldFxub2luZGVudD1ccHRleG5vaW5kZW50CisgIFxsZXRcez1ccHRleGxicmFjZQorICBcbGV0XCs9XHRhYmFsaWduCisgIFxsZXRcfT1ccHRleHJicmFjZQorICBcbGV0XC89XHB0ZXhzbGFzaAorICBcbGV0XCo9XHB0ZXhzdGFyCisgIFxsZXRcdD1ccHRleHQKKyAgXGxldFxmcmVuY2hzcGFjaW5nPVxwbGFpbmZyZW5jaHNwYWNpbmcKKyAgJQorICBcZGVmXGVuZGxkb3Rze1xtYXRoaW5uZXJ7XGxkb3RzXGxkb3RzXGxkb3RzXGxkb3RzfX0lCisgIFxkZWZcZW5kZG90c3tccmVsYXhcaWZtbW9kZVxlbmRsZG90c1xlbHNlJFxtYXRoc3Vycm91bmQ9MHB0IFxlbmRsZG90c1wsJFxmaX0lCisgIFxkZWZcQHtAfSUKK30KKyUgVGhlcmUgaXMgbm8gbmVlZCB0byBkZWZpbmUgXEV0ZXguCisKKyUgRGVmaW5lIEBsaXNwIC4uLiBAZW5kIGxpc3AuCislIEBsaXNwIGVudmlyb25tZW50IGZvcm1zIGEgZ3JvdXAgc28gaXQgY2FuIHJlYmluZCB0aGluZ3MsCislIGluY2x1ZGluZyB0aGUgZGVmaW5pdGlvbiBvZiBAZW5kIGxpc3AgKHdoaWNoIG5vcm1hbGx5IGlzIGVycm9uZW91cykuCisKKyUgQW1vdW50IHRvIG5hcnJvdyB0aGUgbWFyZ2lucyBieSBmb3IgQGxpc3AuCitcbmV3c2tpcFxsaXNwbmFycm93aW5nIFxsaXNwbmFycm93aW5nPTAuNGluCisKKyUgVGhpcyBpcyB0aGUgZGVmaW5pdGlvbiB0aGF0IF5eTSBnZXRzIGluc2lkZSBAbGlzcCwgQGV4YW1wbGUsIGFuZCBvdGhlcgorJSBzdWNoIGVudmlyb25tZW50cy4gIFxudWxsIGlzIGJldHRlciB0aGFuIGEgc3BhY2UsIHNpbmNlIGl0IGRvZXNuJ3QKKyUgaGF2ZSBhbnkgd2lkdGguCitcZGVmXGxpc3BwYXJ7XG51bGxcZW5kZ3JhZn0KKworJSBUaGlzIHNwYWNlIGlzIGFsd2F5cyBwcmVzZW50IGFib3ZlIGFuZCBiZWxvdyBlbnZpcm9ubWVudHMuCitcbmV3c2tpcFxlbnZza2lwYW1vdW50IFxlbnZza2lwYW1vdW50ID0gMHB0CisKKyUgTWFrZSBzcGFjaW5nIGFuZCBiZWxvdyBlbnZpcm9ubWVudCBzeW1tZXRyaWNhbC4gIFdlIHVzZSBccGFyc2tpcCBoZXJlCislIHRvIGhlbHAgaW4gZG9pbmcgdGhhdCwgc2luY2UgaW4gQGV4YW1wbGUtbGlrZSBlbnZpcm9ubWVudHMgXHBhcnNraXAKKyUgaXMgcmVzZXQgdG8gemVybzsgdGh1cyB0aGUgXGFmdGVyZW52YnJlYWsgaW5zZXJ0cyBubyBzcGFjZSAtLSBidXQgdGhlCislIHN0YXJ0IG9mIHRoZSBuZXh0IHBhcmFncmFwaCB3aWxsIGluc2VydCBccGFyc2tpcC4KKyUKK1xkZWZcYWJvdmVlbnZicmVha3t7JQorICAlID0xMDAwMCBpbnN0ZWFkIG9mIDwxMDAwMCBiZWNhdXNlIG9mIGEgc3BlY2lhbCBjYXNlIGluIFxpdGVtenp6IGFuZAorICAlIFxzZWN0aW9uaGVhZGluZywgcS52LgorICBcaWZudW0gXGxhc3RwZW5hbHR5PTEwMDAwIFxlbHNlCisgICAgXGFkdmFuY2VcZW52c2tpcGFtb3VudCBieSBccGFyc2tpcAorICAgIFxlbmRncmFmCisgICAgXGlmZGltXGxhc3Rza2lwPFxlbnZza2lwYW1vdW50CisgICAgICBccmVtb3ZlbGFzdHNraXAKKyAgICAgICUgaXQncyBub3QgYSBnb29kIHBsYWNlIHRvIGJyZWFrIGlmIHRoZSBsYXN0IHBlbmFsdHkgd2FzIFxub2JyZWFrCisgICAgICAlIG9yIGJldHRlciAuLi4KKyAgICAgIFxpZm51bVxsYXN0cGVuYWx0eTwxMDAwMCBccGVuYWx0eS01MCBcZmkKKyAgICAgIFx2c2tpcFxlbnZza2lwYW1vdW50CisgICAgXGZpCisgIFxmaQorfX0KKworXGxldFxhZnRlcmVudmJyZWFrID0gXGFib3ZlZW52YnJlYWsKKworJSBcbm9uYXJyb3dpbmcgaXMgYSBmbGFnLiAgSWYgInNldCIsIEBsaXNwIGV0YyBkb24ndCBuYXJyb3cgbWFyZ2luczsgaXQgd2lsbAorJSBhbHNvIGNsZWFyIGl0LCBzbyB0aGF0IGl0cyBlbWJlZGRlZCBlbnZpcm9ubWVudHMgZG8gdGhlIG5hcnJvd2luZyBhZ2Fpbi4KK1xsZXRcbm9uYXJyb3dpbmc9XHJlbGF4CisKKyUgQGNhcnRvdWNoZSAuLi4gQGVuZCBjYXJ0b3VjaGU6IGRyYXcgcmVjdGFuZ2xlIHcvcm91bmRlZCBjb3JuZXJzIGFyb3VuZAorJSBlbnZpcm9ubWVudCBjb250ZW50cy4KK1xmb250XGNpcmNsZT1sY2lyY2xlMTAKK1xuZXdkaW1lblxjaXJjdGhpY2sKK1xuZXdkaW1lblxjYXJ0b3V0ZXJcbmV3ZGltZW5cY2FydGlubmVyCitcbmV3c2tpcFxub3JtYnNraXBcbmV3c2tpcFxub3JtcHNraXBcbmV3c2tpcFxub3JtbHNraXAKK1xjaXJjdGhpY2s9XGZvbnRkaW1lbjhcY2lyY2xlCislCitcZGVmXGN0bHt7XGNpcmNsZVxjaGFyJzAxM1xoc2tpcCAtNnB0fX0lIDZwdCBmcm9tIHBsIGZpbGU6IDEvMmNoYXJ3aWR0aAorXGRlZlxjdHJ7e1xoc2tpcCA2cHRcY2lyY2xlXGNoYXInMDEwfX0KK1xkZWZcY2Jse3tcY2lyY2xlXGNoYXInMDEyXGhza2lwIC02cHR9fQorXGRlZlxjYnJ7e1xoc2tpcCA2cHRcY2lyY2xlXGNoYXInMDExfX0KK1xkZWZcY2FydHRvcHtcaGJveCB0byBcY2FydG91dGVye1xoc2tpcFxsc2tpcAorICAgICAgICBcY3RsXGxlYWRlcnNcaHJ1bGUgaGVpZ2h0XGNpcmN0aGlja1xoZmlsXGN0cgorICAgICAgICBcaHNraXBccnNraXB9fQorXGRlZlxjYXJ0Ym90e1xoYm94IHRvIFxjYXJ0b3V0ZXJ7XGhza2lwXGxza2lwCisgICAgICAgIFxjYmxcbGVhZGVyc1xocnVsZSBoZWlnaHRcY2lyY3RoaWNrXGhmaWxcY2JyCisgICAgICAgIFxoc2tpcFxyc2tpcH19CislCitcbmV3c2tpcFxsc2tpcFxuZXdza2lwXHJza2lwCisKK1xlbnZkZWZcY2FydG91Y2hleyUKKyAgXGlmaG1vZGVccGFyXGZpICAlIGNhbid0IGJlIGluIHRoZSBtaWRzdCBvZiBhIHBhcmFncmFwaC4KKyAgXHN0YXJ0c2F2aW5naW5zZXJ0cworICBcbHNraXA9XGxlZnRza2lwIFxyc2tpcD1ccmlnaHRza2lwCisgIFxsZWZ0c2tpcD0wcHRccmlnaHRza2lwPTBwdCAlIHdlIHdhbnQgdGhlc2UgKm91dHNpZGUqLgorICBcY2FydGlubmVyPVxoc2l6ZSBcYWR2YW5jZVxjYXJ0aW5uZXIgYnktXGxza2lwCisgIFxhZHZhbmNlXGNhcnRpbm5lciBieS1ccnNraXAKKyAgXGNhcnRvdXRlcj1caHNpemUKKyAgXGFkdmFuY2VcY2FydG91dGVyIGJ5IDE4LjRwdAklIGFsbG93IGZvciAzcHQga2VybnMgb24gZWl0aGVyCisJCQkJJSBzaWRlLCBhbmQgZm9yIDZwdCB3YXN0ZSBmcm9tCisJCQkJJSBlYWNoIGNvcm5lciBjaGFyLCBhbmQgcnVsZSB0aGlja25lc3MKKyAgXG5vcm1ic2tpcD1cYmFzZWxpbmVza2lwIFxub3JtcHNraXA9XHBhcnNraXAgXG5vcm1sc2tpcD1cbGluZXNraXAKKyAgJSBGbGFnIHRvIHRlbGwgQGxpc3AsIGV0Yy4sIG5vdCB0byBuYXJyb3cgbWFyZ2luLgorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXHZib3hcYmdyb3VwCisgICAgICBcYmFzZWxpbmVza2lwPTBwdFxwYXJza2lwPTBwdFxsaW5lc2tpcD0wcHQKKyAgICAgIFxjYXJ0dG9wCisgICAgICBcaGJveFxiZ3JvdXAKKwkgIFxoc2tpcFxsc2tpcAorCSAgXHZydWxlXGtlcm4zcHQKKwkgIFx2Ym94XGJncm91cAorCSAgICAgIFxrZXJuM3B0CisJICAgICAgXGhzaXplPVxjYXJ0aW5uZXIKKwkgICAgICBcYmFzZWxpbmVza2lwPVxub3JtYnNraXAKKwkgICAgICBcbGluZXNraXA9XG5vcm1sc2tpcAorCSAgICAgIFxwYXJza2lwPVxub3JtcHNraXAKKwkgICAgICBcdnNraXAgLVxwYXJza2lwCisJICAgICAgXGNvbW1lbnQgJSBGb3IgZXhwbGFuYXRpb24sIHNlZSB0aGUgZW5kIG9mIFxkZWZcZ3JvdXAuCit9CitcZGVmXEVjYXJ0b3VjaGV7JQorICAgICAgICAgICAgICBcaWZobW9kZVxwYXJcZmkKKwkgICAgICBca2VybjNwdAorCSAgXGVncm91cAorCSAgXGtlcm4zcHRcdnJ1bGUKKwkgIFxoc2tpcFxyc2tpcAorICAgICAgXGVncm91cAorICAgICAgXGNhcnRib3QKKyAgXGVncm91cAorICBcY2hlY2tpbnNlcnRzCit9CisKKworJSBUaGlzIG1hY3JvIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFsbCB0aGUgQGV4YW1wbGUgdmFyaWFudHMsCislIGluc2lkZSBhIGdyb3VwLgorXGRlZlxub25maWxsc3RhcnR7JQorICBcYWJvdmVlbnZicmVhaworICBcaGZ1enogPSAxMnB0ICUgRG9uJ3QgYmUgZnVzc3kKKyAgXHNlcHNwYWNlcyAlIE1ha2Ugc3BhY2VzIGJlIHdvcmQtc2VwYXJhdG9ycyByYXRoZXIgdGhhbiBzcGFjZSB0b2tlbnMuCisgIFxsZXRccGFyID0gXGxpc3BwYXIgJSBkb24ndCBpZ25vcmUgYmxhbmsgbGluZXMKKyAgXG9iZXlsaW5lcyAlIGVhY2ggbGluZSBvZiBpbnB1dCBpcyBhIGxpbmUgb2Ygb3V0cHV0CisgIFxwYXJza2lwID0gMHB0CisgIFxwYXJpbmRlbnQgPSAwcHQKKyAgXGVtZXJnZW5jeXN0cmV0Y2ggPSAwcHQgJSBkb24ndCB0cnkgdG8gYXZvaWQgb3ZlcmZ1bGwgYm94ZXMKKyAgXGlmeFxub25hcnJvd2luZ1xyZWxheAorICAgIFxhZHZhbmNlIFxsZWZ0c2tpcCBieSBcbGlzcG5hcnJvd2luZworICAgIFxleGRlbnRhbW91bnQ9XGxpc3BuYXJyb3dpbmcKKyAgXGVsc2UKKyAgICBcbGV0XG5vbmFycm93aW5nID0gXHJlbGF4CisgIFxmaQorICBcbGV0XGV4ZGVudD1cbm9maWxsZXhkZW50Cit9CisKKyUgSWYgeW91IHdhbnQgYWxsIGV4YW1wbGVzIGV0Yy4gc21hbGw6IEBzZXQgZGlzcGVudnNpemUgc21hbGwuCislIElmIHlvdSB3YW50IGV2ZW4gc21hbGwgZXhhbXBsZXMgdGhlIGZ1bGwgc2l6ZTogQHNldCBkaXNwZW52c2l6ZSBub3NtYWxsLgorJSBUaGlzIGFmZmVjdHMgdGhlIGZvbGxvd2luZyBkaXNwbGF5ZWQgZW52aXJvbm1lbnRzOgorJSAgICBAZXhhbXBsZSwgQGRpc3BsYXksIEBmb3JtYXQsIEBsaXNwCislCitcZGVmXHNtYWxsd29yZHtzbWFsbH0KK1xkZWZcbm9zbWFsbHdvcmR7bm9zbWFsbH0KK1xsZXRcU0VUZGlzcGVudnNpemVccmVsYXgKK1xkZWZcc2V0bm9ybWFsZGlzcGVudnslCisgIFxpZnhcU0VUZGlzcGVudnNpemVcc21hbGx3b3JkCisgICAgXHNtYWxsZXhhbXBsZWZvbnRzIFxybQorICBcZmkKK30KK1xkZWZcc2V0c21hbGxkaXNwZW52eyUKKyAgXGlmeFxTRVRkaXNwZW52c2l6ZVxub3NtYWxsd29yZAorICBcZWxzZQorICAgIFxzbWFsbGV4YW1wbGVmb250cyBccm0KKyAgXGZpCit9CisKKyUgV2Ugb2Z0ZW4gZGVmaW5lIHR3byBlbnZpcm9ubWVudHMsIEBmb28gYW5kIEBzbWFsbGZvby4KKyUgTGV0J3MgZG8gaXQgYnkgb25lIGNvbW1hbmQ6CitcZGVmXG1ha2VkaXNwZW52ICMxIzJ7CisgIFxleHBhbmRhZnRlclxlbnZkZWZcY3NuYW1lIzFcZW5kY3NuYW1lIHtcc2V0bm9ybWFsZGlzcGVudiAjMn0KKyAgXGV4cGFuZGFmdGVyXGVudmRlZlxjc25hbWUgc21hbGwjMVxlbmRjc25hbWUge1xzZXRzbWFsbGRpc3BlbnYgIzJ9CisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIEUjMVxlbmRjc25hbWUgXGFmdGVyZW52YnJlYWsKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgRXNtYWxsIzFcZW5kY3NuYW1lIFxhZnRlcmVudmJyZWFrCit9CisKKyUgRGVmaW5lIHR3byBzeW5vbnltczoKK1xkZWZcbWFrZXR3b2Rpc3BlbnZzICMxIzIjM3sKKyAgXG1ha2VkaXNwZW52eyMxfXsjM30KKyAgXG1ha2VkaXNwZW52eyMyfXsjM30KK30KKworJSBAbGlzcDogaW5kZW50ZWQsIG5hcnJvd2VkLCB0eXBld3JpdGVyIGZvbnQ7IEBleGFtcGxlOiBzYW1lIGFzIEBsaXNwLgorJQorJSBAc21hbGxleGFtcGxlIGFuZCBAc21hbGxsaXNwOiB1c2Ugc21hbGxlciBmb250cy4KKyUgT3JpZ2luYWxseSBjb250cmlidXRlZCBieSBQYXZlbEB4ZXJveC4KKyUKK1xtYWtldHdvZGlzcGVudnMge2xpc3B9e2V4YW1wbGV9eyUKKyAgXG5vbmZpbGxzdGFydAorICBcdHQKKyAgXGxldFxrYmRmb250ID0gXGtiZGV4YW1wbGVmb250ICUgQWxsb3cgQGtiZCB0byBkbyBzb21ldGhpbmcgc3BlY2lhbC4KKyAgXGdvYmJsZSAgICAgICAlIGVhdCByZXR1cm4KK30KKworJSBAZGlzcGxheS9Ac21hbGxkaXNwbGF5OiBzYW1lIGFzIEBsaXNwIGV4Y2VwdCBrZWVwIGN1cnJlbnQgZm9udC4KKyUKK1xtYWtlZGlzcGVudiB7ZGlzcGxheX17JQorICBcbm9uZmlsbHN0YXJ0CisgIFxnb2JibGUKK30KKworJSBAZm9ybWF0L0BzbWFsbGZvcm1hdDogc2FtZSBhcyBAZGlzcGxheSBleGNlcHQgZG9uJ3QgbmFycm93IG1hcmdpbnMuCislCitcbWFrZWRpc3BlbnZ7Zm9ybWF0fXslCisgIFxsZXRcbm9uYXJyb3dpbmcgPSB0JQorICBcbm9uZmlsbHN0YXJ0CisgIFxnb2JibGUKK30KKworJSBAZmx1c2hsZWZ0OiBzYW1lIGFzIEBmb3JtYXQsIGJ1dCBkb2Vzbid0IG9iZXkgXFNFVGRpc3BlbnZzaXplLgorXGVudmRlZlxmbHVzaGxlZnR7JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICBcZ29iYmxlCit9CitcbGV0XEVmbHVzaGxlZnQgPSBcYWZ0ZXJlbnZicmVhaworCislIEBmbHVzaHJpZ2h0LgorJQorXGVudmRlZlxmbHVzaHJpZ2h0eyUKKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFxub25maWxsc3RhcnQKKyAgXGFkdmFuY2VcbGVmdHNraXAgYnkgMHB0IHBsdXMgMWZpbGwKKyAgXGdvYmJsZQorfQorXGxldFxFZmx1c2hyaWdodCA9IFxhZnRlcmVudmJyZWFrCisKKworJSBAcXVvdGF0aW9uIGRvZXMgbm9ybWFsIGxpbmVicmVha2luZyAoaGVuY2Ugd2UgY2FuJ3QgdXNlIFxub25maWxsc3RhcnQpCislIGFuZCBuYXJyb3dzIHRoZSBtYXJnaW5zLiAgV2Uga2VlcCBccGFyc2tpcCBub256ZXJvIGluIGdlbmVyYWwsIHNpbmNlCislIHdlJ3JlIGRvaW5nIG5vcm1hbCBmaWxsaW5nLiAgU28sIHdoZW4gdXNpbmcgXGFib3ZlZW52YnJlYWsgYW5kCislIFxhZnRlcmVudmJyZWFrLCB0ZW1wb3JhcmlseSBtYWtlIFxwYXJza2lwIDAuCislCitcZW52ZGVmXHF1b3RhdGlvbnslCisgIHtccGFyc2tpcD0wcHQgXGFib3ZlZW52YnJlYWt9JSBiZWNhdXNlIFxhYm92ZWVudmJyZWFrIGluc2VydHMgXHBhcnNraXAKKyAgXHBhcmluZGVudD0wcHQKKyAgJQorICAlIEBjYXJ0b3VjaGUgZGVmaW5lcyBcbm9uYXJyb3dpbmcgdG8gaW5oaWJpdCBuYXJyb3dpbmcgYXQgbmV4dCBsZXZlbCBkb3duLgorICBcaWZ4XG5vbmFycm93aW5nXHJlbGF4CisgICAgXGFkdmFuY2VcbGVmdHNraXAgYnkgXGxpc3BuYXJyb3dpbmcKKyAgICBcYWR2YW5jZVxyaWdodHNraXAgYnkgXGxpc3BuYXJyb3dpbmcKKyAgICBcZXhkZW50YW1vdW50ID0gXGxpc3BuYXJyb3dpbmcKKyAgXGVsc2UKKyAgICBcbGV0XG5vbmFycm93aW5nID0gXHJlbGF4CisgIFxmaQorICBccGFyc2VhcmdccXVvdGF0aW9ubGFiZWwKK30KKworJSBXZSBoYXZlIHJldGFpbmVkIGEgbm9uemVybyBwYXJza2lwIGZvciB0aGUgZW52aXJvbm1lbnQsIHNpbmNlIHdlJ3JlCislIGRvaW5nIG5vcm1hbCBmaWxsaW5nLgorJQorXGRlZlxFcXVvdGF0aW9ueyUKKyAgXHBhcgorICBcaWZ4XHF1b3RhdGlvbmF1dGhvclx1bmRlZmluZWRcZWxzZQorICAgICUgaW5kZW50IGEgYml0LgorICAgIFxsZWZ0bGluZXtca2VybiAyXGxlZnRza2lwIFxzbCAtLS1ccXVvdGF0aW9uYXV0aG9yfSUKKyAgXGZpCisgIHtccGFyc2tpcD0wcHQgXGFmdGVyZW52YnJlYWt9JQorfQorCislIElmIHdlJ3JlIGdpdmVuIGFuIGFyZ3VtZW50LCB0eXBlc2V0IGl0IGluIGJvbGQgd2l0aCBhIGNvbG9uIGFmdGVyLgorXGRlZlxxdW90YXRpb25sYWJlbCMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGVtcHR5IFxlbHNlCisgICAge1xiZiAjMTogfSUKKyAgXGZpCit9CisKKworJSBMYVRlWC1saWtlIEB2ZXJiYXRpbS4uLkBlbmQgdmVyYmF0aW0gYW5kIEB2ZXJiezxjaGFyPi4uLjxjaGFyPn0KKyUgSWYgd2Ugd2FudCB0byBhbGxvdyBhbnkgPGNoYXI+IGFzIGRlbGltaXRlciwKKyUgd2UgbmVlZCB0aGUgY3VybHkgYnJhY2VzIHNvIHRoYXQgbWFrZWluZm8gc2VlcyB0aGUgQHZlcmIgY29tbWFuZCwgZWc6CislIGBAdmVyYnguLi54JyB3b3VsZCBsb29rIGxpa2UgdGhlICdAdmVyYngnIGNvbW1hbmQuICAtLWphbm5la2VAZ251Lm9yZworJQorJSBbS251dGhdOiBEb25hbGQgRXJ2aW4gS251dGgsIDE5OTYuICBUaGUgVGVYYm9vay4KKyUKKyUgW0tudXRoXSBwLjM0NDsgb25seSB3ZSBuZWVkIHRvIGRvIHRoZSBvdGhlciBjaGFyYWN0ZXJzIFRleGluZm8gc2V0cworJSBhY3RpdmUgdG9vLiAgT3RoZXJ3aXNlLCB0aGV5IGdldCBsb3N0IGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb24gYQorJSB2ZXJiYXRpbSBsaW5lLgorXGRlZlxkb3NwZWNpYWxzeyUKKyAgXGRvXCBcZG9cXFxkb1x7XGRvXH1cZG9cJFxkb1wmJQorICBcZG9cI1xkb1xeXGRvXF5eS1xkb1xfXGRvXF5eQVxkb1wlXGRvXH4lCisgIFxkb1w8XGRvXD5cZG9cfFxkb1xAXGRvK1xkb1wiJQorfQorJQorJSBbS251dGhdIHAuIDM4MAorXGRlZlx1bmNhdGNvZGVzcGVjaWFsc3slCisgIFxkZWZcZG8jIzF7XGNhdGNvZGVgIyMxPVxvdGhlcn1cZG9zcGVjaWFsc30KKyUKKyUgW0tudXRoXSBwcC4gMzgwLDM4MSwzOTEKKyUgRGlzYWJsZSBTcGFuaXNoIGxpZ2F0dXJlcyA/YCBhbmQgIWAgb2YgXHR0IGZvbnQKK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFxgPVxhY3RpdmVcZ2RlZmB7XHJlbGF4XGxxfQorXGVuZGdyb3VwCislCislIFNldHVwIGZvciB0aGUgQHZlcmIgY29tbWFuZC4KKyUKKyUgRWlnaHQgc3BhY2VzIGZvciBhIHRhYgorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXF5eST1cYWN0aXZlCisgIFxnZGVmXHRhYmVpZ2h0c3BhY2Vze1xjYXRjb2RlYFxeXkk9XGFjdGl2ZVxkZWZeXkl7XCBcIFwgXCBcIFwgXCBcIH19CitcZW5kZ3JvdXAKKyUKK1xkZWZcc2V0dXB2ZXJieyUKKyAgXHR0ICAlIGVhc2llc3QgKGFuZCBjb252ZW50aW9uYWxseSB1c2VkKSBmb250IGZvciB2ZXJiYXRpbQorICBcZGVmXHBhcntcbGVhdmV2bW9kZVxlbmRncmFmfSUKKyAgXGNhdGNvZGVgXGA9XGFjdGl2ZQorICBcdGFiZWlnaHRzcGFjZXMKKyAgJSBSZXNwZWN0IGxpbmUgYnJlYWtzLAorICAlIHByaW50IHNwZWNpYWwgc3ltYm9scyBhcyB0aGVtc2VsdmVzLCBhbmQKKyAgJSBtYWtlIGVhY2ggc3BhY2UgY291bnQKKyAgJSBtdXN0IGRvIGluIHRoaXMgb3JkZXI6CisgIFxvYmV5bGluZXMgXHVuY2F0Y29kZXNwZWNpYWxzIFxzZXBzcGFjZXMKK30KKworJSBTZXR1cCBmb3IgdGhlIEB2ZXJiYXRpbSBlbnZpcm9ubWVudAorJQorJSBSZWFsIHRhYiBleHBhbnNpb24KK1xuZXdkaW1lblx0YWJ3IFxzZXRib3gwPVxoYm94e1x0dFxzcGFjZX0gXHRhYnc9OFx3ZDAgJSB0YWIgYW1vdW50CislCitcZGVmXHN0YXJ0dGFiYm94e1xzZXRib3gwPVxoYm94XGJncm91cH0KK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFxeXkk9XGFjdGl2ZQorICBcZ2RlZlx0YWJleHBhbmR7JQorICAgIFxjYXRjb2RlYFxeXkk9XGFjdGl2ZQorICAgIFxkZWZeXkl7XGxlYXZldm1vZGVcZWdyb3VwCisgICAgICBcZGltZW4wPVx3ZDAgJSB0aGUgd2lkdGggc28gZmFyLCBvciBzaW5jZSB0aGUgcHJldmlvdXMgdGFiCisgICAgICBcZGl2aWRlXGRpbWVuMCBieVx0YWJ3CisgICAgICBcbXVsdGlwbHlcZGltZW4wIGJ5XHRhYncgJSBjb21wdXRlIHByZXZpb3VzIG11bHRpcGxlIG9mIFx0YWJ3CisgICAgICBcYWR2YW5jZVxkaW1lbjAgYnlcdGFidyAgJSBhZHZhbmNlIHRvIG5leHQgbXVsdGlwbGUgb2YgXHRhYncKKyAgICAgIFx3ZDA9XGRpbWVuMCBcYm94MCBcc3RhcnR0YWJib3gKKyAgICB9JQorICB9CitcZW5kZ3JvdXAKK1xkZWZcc2V0dXB2ZXJiYXRpbXslCisgIFxsZXRcbm9uYXJyb3dpbmcgPSB0JQorICBcbm9uZmlsbHN0YXJ0CisgICUgRWFzaWVzdCAoYW5kIGNvbnZlbnRpb25hbGx5IHVzZWQpIGZvbnQgZm9yIHZlcmJhdGltCisgIFx0dAorICBcZGVmXHBhcntcbGVhdmV2bW9kZVxlZ3JvdXBcYm94MFxlbmRncmFmfSUKKyAgXGNhdGNvZGVgXGA9XGFjdGl2ZQorICBcdGFiZXhwYW5kCisgICUgUmVzcGVjdCBsaW5lIGJyZWFrcywKKyAgJSBwcmludCBzcGVjaWFsIHN5bWJvbHMgYXMgdGhlbXNlbHZlcywgYW5kCisgICUgbWFrZSBlYWNoIHNwYWNlIGNvdW50CisgICUgbXVzdCBkbyBpbiB0aGlzIG9yZGVyOgorICBcb2JleWxpbmVzIFx1bmNhdGNvZGVzcGVjaWFscyBcc2Vwc3BhY2VzCisgIFxldmVyeXBhcntcc3RhcnR0YWJib3h9JQorfQorCislIERvIHRoZSBAdmVyYiBtYWdpYzogdmVyYmF0aW0gdGV4dCBpcyBxdW90ZWQgYnkgdW5pcXVlCislIGRlbGltaXRlciBjaGFyYWN0ZXJzLiAgQmVmb3JlIGZpcnN0IGRlbGltaXRlciBleHBlY3QgYQorJSByaWdodCBicmFjZSwgYWZ0ZXIgbGFzdCBkZWxpbWl0ZXIgZXhwZWN0IGNsb3NpbmcgYnJhY2U6CislCislICAgIFxkZWZcZG92ZXJiJ3snPGNoYXI+IzE8Y2hhcj4nfSd7IzF9CislCislIFtLbnV0aF0gcC4gMzgyOyBvbmx5IGVhdCBvdXRlciB7fQorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgWz0xXGNhdGNvZGVgXT0yXGNhdGNvZGVgXHs9XG90aGVyXGNhdGNvZGVgXH09XG90aGVyCisgIFxnZGVmXGRvdmVyYnsjMVtcZGVmXG5leHQjIzEjMX1bIyMxXGVuZGdyb3VwXVxuZXh0XQorXGVuZGdyb3VwCislCitcZGVmXHZlcmJ7XGJlZ2luZ3JvdXBcc2V0dXB2ZXJiXGRvdmVyYn0KKyUKKyUKKyUgRG8gdGhlIEB2ZXJiYXRpbSBtYWdpYzogZGVmaW5lIHRoZSBtYWNybyBcZG92ZXJiYXRpbSBzbyB0aGF0CislIHRoZSAoZmlyc3QpIGFyZ3VtZW50IGVuZHMgd2hlbiAnQGVuZCB2ZXJiYXRpbScgaXMgcmVhY2hlZCwgaWU6CislCislICAgICBcZGVmXGRvdmVyYmF0aW0jMUBlbmQgdmVyYmF0aW17IzF9CislCislIEZvciBUZXhpbmZvIGl0J3MgYSBsb3QgZWFzaWVyIHRoYW4gZm9yIExhVGVYLAorJSBiZWNhdXNlIHRleGluZm8ncyBcdmVyYmF0aW0gZG9lc24ndCBzdG9wIGF0ICdcZW5ke3ZlcmJhdGltfSc6CislIHdlIG5lZWQgbm90IHJlZGVmaW5lICdcJywgJ3snIGFuZCAnfScuCislCislIEluc3BpcmVkIGJ5IExhVGVYJ3MgdmVyYmF0aW0gY29tbWFuZCBzZXQgW2xhdGV4Lmx0eF0KKyUKK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFwgPVxhY3RpdmUKKyAgXG9iZXlsaW5lcyAlCisgICUgaWdub3JlIGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGZpcnN0IF5eTSwgdGhhdCdzIHRoZSBuZXdsaW5lIGF0IHRoZSBlbmQKKyAgJSBvZiB0aGUgQHZlcmJhdGltIGlucHV0IGxpbmUgaXRzZWxmLiAgT3RoZXJ3aXNlIHdlIGdldCBhbiBleHRyYSBibGFuaworICAlIGxpbmUgaW4gdGhlIG91dHB1dC4KKyAgXHhkZWZcZG92ZXJiYXRpbSMxXl5NIzJAZW5kIHZlcmJhdGlteyMyXG5vZXhwYW5kXGVuZFxnb2JibGUgdmVyYmF0aW19JQorICAlIFdlIHJlYWxseSB3YW50IHsuLi5cZW5kIHZlcmJhdGltfSBpbiB0aGUgYm9keSBvZiB0aGUgbWFjcm8sIGJ1dAorICAlIHdpdGhvdXQgdGhlIGFjdGl2ZSBzcGFjZTsgdGh1cyB3ZSBoYXZlIHRvIHVzZSBceGRlZiBhbmQgXGdvYmJsZS4KK1xlbmRncm91cAorJQorXGVudmRlZlx2ZXJiYXRpbXslCisgICAgXHNldHVwdmVyYmF0aW1cZG92ZXJiYXRpbQorfQorXGxldFxFdmVyYmF0aW0gPSBcYWZ0ZXJlbnZicmVhaworCisKKyUgQHZlcmJhdGltaW5jbHVkZSBGSUxFIC0gaW5zZXJ0IHRleHQgb2YgZmlsZSBpbiB2ZXJiYXRpbSBlbnZpcm9ubWVudC4KKyUKK1xkZWZcdmVyYmF0aW1pbmNsdWRle1xwYXJzZWFyZ3VzaW5nXGZpbGVuYW1lY2F0Y29kZXNcZG92ZXJiYXRpbWluY2x1ZGV9CislCitcZGVmXGRvdmVyYmF0aW1pbmNsdWRlIzF7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXHNldHVwdmVyYmF0aW0KKyAgICBcaW5wdXQgIzEKKyAgICBcYWZ0ZXJlbnZicmVhaworICB9JQorfQorCislIEBjb3B5aW5nIC4uLiBAZW5kIGNvcHlpbmcuCislIFNhdmUgdGhlIHRleHQgYXdheSBmb3IgQGluc2VydGNvcHlpbmcgbGF0ZXIuCislCislIFdlIHNhdmUgdGhlIHVuaW50ZXJwcmV0ZWQgdG9rZW5zLCByYXRoZXIgdGhhbiBjcmVhdGluZyBhIGJveC4KKyUgU2F2aW5nIHRoZSB0ZXh0IGluIGEgYm94IHdvdWxkIGJlIG11Y2ggZWFzaWVyLCBidXQgdGhlbiBhbGwgdGhlCislIHR5cGVzZXR0aW5nIGNvbW1hbmRzIChAc21hbGxib29rLCBmb250IGNoYW5nZXMsIGV0Yy4pIGhhdmUgdG8gYmUgZG9uZQorJSBiZWZvcmVoYW5kIC0tIGFuZCBhKSB3ZSB3YW50IEBjb3B5aW5nIHRvIGJlIGRvbmUgZmlyc3QgaW4gdGhlIHNvdXJjZQorJSBmaWxlOyBiKSBsZXR0aW5nIHVzZXJzIGRlZmluZSB0aGUgZnJvbnRtYXR0ZXIgaW4gYXMgZmxleGlibGUgb3JkZXIgYXMKKyUgcG9zc2libGUgaXMgdmVyeSBkZXNpcmFibGUuCislCitcZGVmXGNvcHlpbmd7XGNoZWNrZW52e31cYmVnaW5ncm91cFxzY2FuYXJnY3R4dFxkb2NvcHlpbmd9CitcZGVmXGRvY29weWluZyMxQGVuZCBjb3B5aW5ne1xlbmRncm91cFxkZWZcY29weWluZ3RleHR7IzF9fQorJQorXGRlZlxpbnNlcnRjb3B5aW5neyUKKyAgXGJlZ2luZ3JvdXAKKyAgICBccGFyaW5kZW50ID0gMHB0ICAlIHBhcmFncmFwaCBpbmRlbnRhdGlvbiBsb29rcyB3cm9uZyBvbiB0aXRsZSBwYWdlCisgICAgXHNjYW5leHBcY29weWluZ3RleHQKKyAgXGVuZGdyb3VwCit9CisKK1xtZXNzYWdle2RlZnVucyx9CislIEBkZWZ1biBldGMuCisKK1xuZXdza2lwXGRlZmJvZHlpbmRlbnQgXGRlZmJvZHlpbmRlbnQ9LjRpbgorXG5ld3NraXBcZGVmYXJnc2luZGVudCBcZGVmYXJnc2luZGVudD01MHB0CitcbmV3c2tpcFxkZWZsYXN0YXJnbWFyZ2luIFxkZWZsYXN0YXJnbWFyZ2luPTE4cHQKKworJSBTdGFydCB0aGUgcHJvY2Vzc2luZyBvZiBAZGVmZm46CitcZGVmXHN0YXJ0ZGVmdW57JQorICBcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDAKKyAgICBcbWVkYnJlYWsKKyAgXGVsc2UKKyAgICAlIElmIHRoZXJlIGFyZSB0d28gQGRlZiBjb21tYW5kcyBpbiBhIHJvdywgd2UnbGwgaGF2ZSBhIFxub2JyZWFrLAorICAgICUgd2hpY2ggaXMgdGhlcmUgdG8ga2VlcCB0aGUgZnVuY3Rpb24gZGVzY3JpcHRpb24gdG9nZXRoZXIgd2l0aCBpdHMKKyAgICAlIGhlYWRlci4gIEJ1dCBpZiB0aGVyZSdzIG5vdGhpbmcgYnV0IGhlYWRlcnMsIHdlIG5lZWQgdG8gYWxsb3cgYQorICAgICUgYnJlYWsgc29tZXdoZXJlLiAgQ2hlY2sgc3BlY2lmaWNhbGx5IGZvciBwZW5hbHR5IDEwMDAyLCBpbnNlcnRlZAorICAgICUgYnkgXGRlZmFyZ3Njb21tb25lbmRpbmcsIGluc3RlYWQgb2YgMTAwMDAsIHNpbmNlIHRoZSBzZWN0aW9uaW5nCisgICAgJSBjb21tYW5kcyBhbHNvIGluc2VydCBhIG5vYnJlYWsgcGVuYWx0eSwgYW5kIHdlIGRvbid0IHdhbnQgdG8gYWxsb3cKKyAgICAlIGEgYnJlYWsgYmV0d2VlbiBhIHNlY3Rpb24gaGVhZGluZyBhbmQgYSBkZWZ1bi4KKyAgICAlIAorICAgIFxpZm51bVxsYXN0cGVuYWx0eT0xMDAwMiBccGVuYWx0eTIwMDAgXGZpCisgICAgJQorICAgICUgU2ltaWxhcmx5LCBhZnRlciBhIHNlY3Rpb24gaGVhZGluZywgZG8gbm90IGFsbG93IGEgYnJlYWsuCisgICAgJSBCdXQgZG8gaW5zZXJ0IHRoZSBnbHVlLgorICAgIFxtZWRza2lwICAlIHByZWNlZGVkIGJ5IGRpc2NhcmRhYmxlIHBlbmFsdHksIHNvIG5vdCBhIGJyZWFrcG9pbnQKKyAgXGZpCisgICUKKyAgXHBhcmluZGVudD0waW4KKyAgXGFkdmFuY2VcbGVmdHNraXAgYnkgXGRlZmJvZHlpbmRlbnQKKyAgXGV4ZGVudGFtb3VudD1cZGVmYm9keWluZGVudAorfQorCitcZGVmXGRvZGVmdW54IzF7JQorICAlIEZpcnN0LCBjaGVjayB3aGV0aGVyIHdlIGFyZSBpbiB0aGUgcmlnaHQgZW52aXJvbm1lbnQ6CisgIFxjaGVja2VudiMxJQorICAlCisgICUgQXMgYWJvdmUsIGFsbG93IGxpbmUgYnJlYWsgaWYgd2UgaGF2ZSBtdWx0aXBsZSB4IGhlYWRlcnMgaW4gYSByb3cuCisgICUgSXQncyBub3QgYSBncmVhdCBwbGFjZSwgdGhvdWdoLgorICBcaWZudW1cbGFzdHBlbmFsdHk9MTAwMDIgXHBlbmFsdHkzMDAwIFxmaQorICAlCisgICUgQW5kIG5vdywgaXQncyB0aW1lIHRvIHJldXNlIHRoZSBib2R5IG9mIHRoZSBvcmlnaW5hbCBkZWZ1bjoKKyAgXGV4cGFuZGFmdGVyXGdvYmJsZWRlZnVuIzElCit9CitcZGVmXGdvYmJsZWRlZnVuIzFcc3RhcnRkZWZ1bnt9CisKKyUgXHByaW50ZGVmdW5saW5lIFxkZWZmbmhlYWRlcnt0ZXh0fQorJQorXGRlZlxwcmludGRlZnVubGluZSMxIzJ7JQorICBcYmVnaW5ncm91cAorICAgICUgY2FsbCBcZGVmZm5oZWFkZXI6CisgICAgIzEjMiBcZW5kaGVhZGVyCisgICAgJSBjb21tb24gZW5kaW5nOgorICAgIFxpbnRlcmxpbmVwZW5hbHR5ID0gMTAwMDAKKyAgICBcYWR2YW5jZVxyaWdodHNraXAgYnkgMHB0IHBsdXMgMWZpbAorICAgIFxlbmRncmFmCisgICAgXG5vYnJlYWtcdnNraXAgLVxwYXJza2lwCisgICAgXHBlbmFsdHkgMTAwMDIgICUgc2lnbmFsIHRvIFxzdGFydGRlZnVuIGFuZCBcZG9kZWZ1bngKKyAgICAlIFNvbWUgb2YgdGhlIEBkZWZ1bi10eXBlIHRhZ3MgZG8gbm90IGVuYWJsZSBtYWdpYyBwYXJlbnRoZXNlcywKKyAgICAlIHJlbmRlcmluZyB0aGUgZm9sbG93aW5nIGNoZWNrIHJlZHVuZGFudC4gIEJ1dCB3ZSBkb24ndCBvcHRpbWl6ZS4KKyAgICBcY2hlY2twYXJlbmNvdW50cworICBcZW5kZ3JvdXAKK30KKworXGRlZlxFZGVmdW57XGVuZGdyYWZcbWVkYnJlYWt9CisKKyUgXG1ha2VkZWZ1bntkZWZmbn0gY3JlYXRlcyBcZGVmZm4sIFxkZWZmbnggYW5kIFxFZGVmZm47CislIHRoZSBvbmx5IHRoaW5nIHJlbWFpbm5pZyBpcyB0byBkZWZpbmUgXGRlZmZuaGVhZGVyLgorJQorXGRlZlxtYWtlZGVmdW4jMXslCisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIEUjMVxlbmRjc25hbWUgPSBcRWRlZnVuCisgIFxlZGVmXHRlbXB7XG5vZXhwYW5kXGRvbWFrZWRlZnVuCisgICAgXG1ha2Vjc25hbWV7IzF9XG1ha2Vjc25hbWV7IzF4fVxtYWtlY3NuYW1leyMxaGVhZGVyfX0lCisgIFx0ZW1wCit9CisKKyUgXGRvbWFrZWRlZnVuIFxkZWZmbiBcZGVmZm54IFxkZWZmbmhlYWRlcgorJQorJSBEZWZpbmUgXGRlZmZuIGFuZCBcZGVmZm54LCB3aXRob3V0IHBhcmFtZXRlcnMuCislIFxkZWZmbmhlYWRlciBoYXMgdG8gYmUgZGVmaW5lZCBleHBsaWNpdGx5LgorJQorXGRlZlxkb21ha2VkZWZ1biMxIzIjM3slCisgIFxlbnZkZWYjMXslCisgICAgXHN0YXJ0ZGVmdW4KKyAgICBccGFyc2Vhcmd1c2luZ1xhY3RpdmVwYXJlbnN7XHByaW50ZGVmdW5saW5lIzN9JQorICB9JQorICBcZGVmIzJ7XGRvZGVmdW54IzF9JQorICBcZGVmIzMlCit9CisKKyUlJSBVbnR5cGVkIGZ1bmN0aW9uczoKKworJSBAZGVmZm4gY2F0ZWdvcnkgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZmZufXtcZGVmZm5nZW5lcmFse319CisKKyUgQGRlZmZuIGNhdGVnb3J5IGNsYXNzIG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZvcH0jMSB7XGRlZm9wb257IzFcIFxwdXR3b3Jkb259fQorCislIFxkZWZvcG9uIHtjYXRlZ29yeSBvbn1jbGFzcyBuYW1lIGFyZ3MKK1xkZWZcZGVmb3BvbiMxIzIge1xkZWZmbmdlbmVyYWx7XHB1dHdvcmRvblwgXGNvZGV7IzJ9fXsjMVwgXGNvZGV7IzJ9fSB9CisKKyUgXGRlZmZuZ2VuZXJhbCB7c3ViaW5kfWNhdGVnb3J5IG5hbWUgYXJncworJQorXGRlZlxkZWZmbmdlbmVyYWwjMSMyICMzICM0XGVuZGhlYWRlcnslCisgICUgUmVtZW1iZXIgdGhhdCBcZG9zdWJpbmR7Zm59e2Zvb317fSBpcyBlcXVpdmFsZW50IHRvIFxkb2luZHtmbn17Zm9vfS4KKyAgXGRvc3ViaW5ke2ZufXtcY29kZXsjM319eyMxfSUKKyAgXGRlZm5hbWV7IzJ9e317IzN9XG1hZ2ljYW1wXGRlZnVuYXJnc3sjNFx1bnNraXB9JQorfQorCislJSUgVHlwZWQgZnVuY3Rpb25zOgorCislIEBkZWZ0eXBlZm4gY2F0ZWdvcnkgdHlwZSBuYW1lIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdHlwZWZufXtcZGVmdHlwZWZuZ2VuZXJhbHt9fQorCislIEBkZWZ0eXBlb3AgY2F0ZWdvcnkgY2xhc3MgdHlwZSBuYW1lIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdHlwZW9wfSMxIHtcZGVmdHlwZW9wb257IzFcIFxwdXR3b3Jkb259fQorCislIFxkZWZ0eXBlb3BvbiB7Y2F0ZWdvcnkgb259Y2xhc3MgdHlwZSBuYW1lIGFyZ3MKK1xkZWZcZGVmdHlwZW9wb24jMSMyIHtcZGVmdHlwZWZuZ2VuZXJhbHtccHV0d29yZG9uXCBcY29kZXsjMn19eyMxXCBcY29kZXsjMn19IH0KKworJSBcZGVmdHlwZWZuZ2VuZXJhbCB7c3ViaW5kfWNhdGVnb3J5IHR5cGUgbmFtZSBhcmdzCislCitcZGVmXGRlZnR5cGVmbmdlbmVyYWwjMSMyICMzICM0ICM1XGVuZGhlYWRlcnslCisgIFxkb3N1YmluZHtmbn17XGNvZGV7IzR9fXsjMX0lCisgIFxkZWZuYW1leyMyfXsjM317IzR9XGRlZnVuYXJnc3sjNVx1bnNraXB9JQorfQorCislJSUgVHlwZWQgdmFyaWFibGVzOgorCislIEBkZWZ0eXBldnIgY2F0ZWdvcnkgdHlwZSB2YXIgYXJncworXG1ha2VkZWZ1bntkZWZ0eXBldnJ9e1xkZWZ0eXBlY3ZnZW5lcmFse319CisKKyUgQGRlZnR5cGVjdiBjYXRlZ29yeSBjbGFzcyB0eXBlIHZhciBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGVjdn0jMSB7XGRlZnR5cGVjdm9meyMxXCBccHV0d29yZG9mfX0KKworJSBcZGVmdHlwZWN2b2Yge2NhdGVnb3J5IG9mfWNsYXNzIHR5cGUgdmFyIGFyZ3MKK1xkZWZcZGVmdHlwZWN2b2YjMSMyIHtcZGVmdHlwZWN2Z2VuZXJhbHtccHV0d29yZG9mXCBcY29kZXsjMn19eyMxXCBcY29kZXsjMn19IH0KKworJSBcZGVmdHlwZWN2Z2VuZXJhbCB7c3ViaW5kfWNhdGVnb3J5IHR5cGUgdmFyIGFyZ3MKKyUKK1xkZWZcZGVmdHlwZWN2Z2VuZXJhbCMxIzIgIzMgIzQgIzVcZW5kaGVhZGVyeyUKKyAgXGRvc3ViaW5ke3ZyfXtcY29kZXsjNH19eyMxfSUKKyAgXGRlZm5hbWV7IzJ9eyMzfXsjNH1cZGVmdW5hcmdzeyM1XHVuc2tpcH0lCit9CisKKyUlJSBVbnR5cGVkIHZhcmlhYmxlczoKKworJSBAZGVmdnIgY2F0ZWdvcnkgdmFyIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdnJ9IzEge1xkZWZ0eXBldnJoZWFkZXJ7IzF9IHt9IH0KKworJSBAZGVmY3YgY2F0ZWdvcnkgY2xhc3MgdmFyIGFyZ3MKK1xtYWtlZGVmdW57ZGVmY3Z9IzEge1xkZWZjdm9meyMxXCBccHV0d29yZG9mfX0KKworJSBcZGVmY3ZvZiB7Y2F0ZWdvcnkgb2Z9Y2xhc3MgdmFyIGFyZ3MKK1xkZWZcZGVmY3ZvZiMxIzIge1xkZWZ0eXBlY3ZvZnsjMX0jMiB7fSB9CisKKyUlJSBUeXBlOgorJSBAZGVmdHAgY2F0ZWdvcnkgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZnRwfSMxICMyICMzXGVuZGhlYWRlcnslCisgIFxkb2luZHt0cH17XGNvZGV7IzJ9fSUKKyAgXGRlZm5hbWV7IzF9e317IzJ9XGRlZnVuYXJnc3sjM1x1bnNraXB9JQorfQorCislIFJlbWFpbmluZyBAZGVmdW4tbGlrZSBzaG9ydGN1dHM6CitcbWFrZWRlZnVue2RlZnVufXtcZGVmZm5oZWFkZXJ7XHB1dHdvcmREZWZmdW5jfSB9CitcbWFrZWRlZnVue2RlZm1hY317XGRlZmZuaGVhZGVye1xwdXR3b3JkRGVmbWFjfSB9CitcbWFrZWRlZnVue2RlZnNwZWN9e1xkZWZmbmhlYWRlcntccHV0d29yZERlZnNwZWN9IH0KK1xtYWtlZGVmdW57ZGVmdHlwZWZ1bn17XGRlZnR5cGVmbmhlYWRlcntccHV0d29yZERlZmZ1bmN9IH0KK1xtYWtlZGVmdW57ZGVmdmFyfXtcZGVmdnJoZWFkZXJ7XHB1dHdvcmREZWZ2YXJ9IH0KK1xtYWtlZGVmdW57ZGVmb3B0fXtcZGVmdnJoZWFkZXJ7XHB1dHdvcmREZWZvcHR9IH0KK1xtYWtlZGVmdW57ZGVmdHlwZXZhcn17XGRlZnR5cGV2cmhlYWRlcntccHV0d29yZERlZnZhcn0gfQorXG1ha2VkZWZ1bntkZWZtZXRob2R9e1xkZWZvcG9uXHB1dHdvcmRNZXRob2Rvbn0KK1xtYWtlZGVmdW57ZGVmdHlwZW1ldGhvZH17XGRlZnR5cGVvcG9uXHB1dHdvcmRNZXRob2Rvbn0KK1xtYWtlZGVmdW57ZGVmaXZhcn17XGRlZmN2b2ZccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZn0KK1xtYWtlZGVmdW57ZGVmdHlwZWl2YXJ9e1xkZWZ0eXBlY3ZvZlxwdXR3b3JkSW5zdGFuY2VWYXJpYWJsZW9mfQorCislIFxkZWZuYW1lLCB3aGljaCBmb3JtYXRzIHRoZSBuYW1lIG9mIHRoZSBAZGVmIChub3QgdGhlIGFyZ3MpLgorJSAjMSBpcyB0aGUgY2F0ZWdvcnksIHN1Y2ggYXMgIkZ1bmN0aW9uIi4KKyUgIzIgaXMgdGhlIHJldHVybiB0eXBlLCBpZiBhbnkuCislICMzIGlzIHRoZSBmdW5jdGlvbiBuYW1lLgorJQorJSBXZSBhcmUgZm9sbG93ZWQgYnkgKGJ1dCBub3QgcGFzc2VkKSB0aGUgYXJndW1lbnRzLCBpZiBhbnkuCislCitcZGVmXGRlZm5hbWUjMSMyIzN7JQorICAlIEdldCB0aGUgdmFsdWVzIG9mIFxsZWZ0c2tpcCBhbmQgXHJpZ2h0c2tpcCBhcyB0aGV5IHdlcmUgb3V0c2lkZSB0aGUgQGRlZi4uLgorICBcYWR2YW5jZVxsZWZ0c2tpcCBieSAtXGRlZmJvZHlpbmRlbnQKKyAgJQorICAlIEhvdyB3ZSdsbCBmb3JtYXQgdGhlIHR5cGUgbmFtZS4gIFB1dHRpbmcgaXQgaW4gYnJhY2tldHMgaGVscHMKKyAgJSBkaXN0aW5ndWlzaCBpdCBmcm9tIHRoZSBib2R5IHRleHQgdGhhdCBtYXkgZW5kIHVwIG9uIHRoZSBuZXh0IGxpbmUKKyAgJSBqdXN0IGJlbG93IGl0LgorICBcZGVmXHRlbXB7IzF9JQorICBcc2V0Ym94MD1caGJveHtca2VyblxkZWZsYXN0YXJnbWFyZ2luIFxpZnhcdGVtcFxlbXB0eVxlbHNlIFtccm1cdGVtcF1cZml9CisgICUKKyAgJSBGaWd1cmUgb3V0IGxpbmUgc2l6ZXMgZm9yIHRoZSBwYXJhZ3JhcGggc2hhcGUuCisgICUgVGhlIGZpcnN0IGxpbmUgbmVlZHMgc3BhY2UgZm9yIFxib3gwOyBidXQgaWYgXHJpZ2h0c2tpcCBpcyBub256ZXJvLAorICAlIHdlIG5lZWQgb25seSBzcGFjZSBmb3IgdGhlIHBhcnQgb2YgXGJveDAgd2hpY2ggZXhjZWVkcyBpdDoKKyAgXGRpbWVuMD1caHNpemUgIFxhZHZhbmNlXGRpbWVuMCBieSAtXHdkMCAgXGFkdmFuY2VcZGltZW4wIGJ5IFxyaWdodHNraXAKKyAgJSBUaGUgY29udGludWF0aW9uczoKKyAgXGRpbWVuMj1caHNpemUgIFxhZHZhbmNlXGRpbWVuMiBieSAtXGRlZmFyZ3NpbmRlbnQKKyAgJSAocGxhaW4udGV4IHNheXMgdGhhdCBcZGltZW4xIHNob3VsZCBiZSB1c2VkIG9ubHkgYXMgZ2xvYmFsLikKKyAgXHBhcnNoYXBlIDIgMGluIFxkaW1lbjAgXGRlZmFyZ3NpbmRlbnQgXGRpbWVuMgorICAlCisgICUgUHV0IHRoZSB0eXBlIG5hbWUgdG8gdGhlIHJpZ2h0IG1hcmdpbi4KKyAgXG5vaW5kZW50CisgIFxoYm94IHRvIDBwdHslCisgICAgXGhmaWxcYm94MCBca2Vybi1caHNpemUKKyAgICAlIFxoc2l6ZSBoYXMgdG8gYmUgc2hvcnRlbmVkIHRoaXMgd2F5OgorICAgIFxrZXJuXGxlZnRza2lwCisgICAgJSBJbnRlbnRpb25hbGx5IGRvIG5vdCByZXNwZWN0IFxyaWdodHNraXAsIHNpbmNlIHdlIG5lZWQgdGhlIHNwYWNlLgorICB9JQorICAlCisgICUgQWxsb3cgYWxsIGxpbmVzIHRvIGJlIHVuZGVyZnVsbCB3aXRob3V0IGNvbXBsYWludDoKKyAgXHRvbGVyYW5jZT0xMDAwMCBcaGJhZG5lc3M9MTAwMDAKKyAgXGV4ZGVudGFtb3VudD1cZGVmYm9keWluZGVudAorICB7JQorICAgICUgZGVmdW4gZm9udHMuIFdlIHVzZSB0eXBld3JpdGVyIGJ5IGRlZmF1bHQgKHVzZWQgdG8gYmUgYm9sZCkgYmVjYXVzZToKKyAgICAlIC4gd2UncmUgcHJpbnRpbmcgaWRlbnRpZmllcnMsIHRoZXkgc2hvdWxkIGJlIGluIHR0IGluIHByaW5jaXBsZS4KKyAgICAlIC4gaW4gbGFuZ3VhZ2VzIHdpdGggbWFueSBhY2NlbnRzLCBzdWNoIGFzIEN6ZWNoIG9yIEZyZW5jaCwgaXQncworICAgICUgICBjb21tb24gdG8gbGVhdmUgYWNjZW50cyBvZmYgaWRlbnRpZmllcnMuICBUaGUgcmVzdWx0IGxvb2tzIG9rIGluCisgICAgJSAgIHR0LCBidXQgZXhjZWVkaW5nbHkgc3RyYW5nZSBpbiBybS4KKyAgICAlIC4gd2UgZG9uJ3Qgd2FudCAtLSBhbmQgLS0tIHRvIGJlIHRyZWF0ZWQgYXMgbGlnYXR1cmVzLgorICAgICUgLiB0aGlzIHN0aWxsIGRvZXMgbm90IGZpeCB0aGUgP2AgYW5kICFgIGxpZ2F0dXJlcywgYnV0IHNvIGZhciBubworICAgICUgICBvbmUgaGFzIG1hZGUgaWRlbnRpZmllcnMgdXNpbmcgdGhlbSA6KS4KKyAgICBcZGYgXHR0CisgICAgXGRlZlx0ZW1weyMyfSUgcmV0dXJuIHZhbHVlIHR5cGUKKyAgICBcaWZ4XHRlbXBcZW1wdHlcZWxzZSBcdGNsb3Nle1x0ZW1wfSBcZmkKKyAgICAjMyUgb3V0cHV0IGZ1bmN0aW9uIG5hbWUKKyAgfSUKKyAge1xybVxlbnNraXB9JSBoc2tpcCAwLjUgZW0gb2YgXHRlbnJtCisgICUKKyAgXGJvbGRicmF4CisgICUgYXJndW1lbnRzIHdpbGwgYmUgb3V0cHV0IG5leHQsIGlmIGFueS4KK30KKworJSBQcmludCBhcmd1bWVudHMgaW4gc2xhbnRlZCByb21hbiAobm90IHR0c2wpLCBpbmNvbnNpc3RlbnRseSB3aXRoIHVzaW5nCislIHR0IGZvciB0aGUgbmFtZS4gIFRoaXMgaXMgYmVjYXVzZSBsaXRlcmFsIHRleHQgaXMgc29tZXRpbWVzIG5lZWRlZCBpbgorJSB0aGUgYXJndW1lbnQgbGlzdCAoZ3JvZmYgbWFudWFsKSwgYW5kIHR0c2wgYW5kIHR0IGFyZSBub3QgdmVyeQorJSBkaXN0aW5ndWlzaGFibGUuICBQcmV2ZW50IGh5cGhlbmF0aW9uIGF0IGAtJyBjaGFycy4KKyUKK1xkZWZcZGVmdW5hcmdzIzF7JQorICAlIHVzZSBzbCBieSBkZWZhdWx0IChub3QgdHRzbCksCisgICUgdHQgZm9yIHRoZSBuYW1lcy4KKyAgXGRmIFxzbCBcaHlwaGVuY2hhclxmb250PTAKKyAgJQorICAlIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBhbiBhcmd1bWVudCBoYXMgdHdvIGRhc2hlcyAoZm9yIGluc3RhbmNlKSwgd2UKKyAgJSB3YW50IGEgd2F5IHRvIGdldCB0dHNsLiAgTGV0J3MgdHJ5IEB2YXIgZm9yIHRoYXQuCisgIFxsZXRcdmFyPVx0dHNsYW50ZWQKKyAgIzElCisgIFxzbFxoeXBoZW5jaGFyXGZvbnQ9NDUKK30KKworJSBXZSB3YW50ICgpJltdIHRvIHByaW50IHNwZWNpYWxseSBvbiB0aGUgZGVmdW4gbGluZS4KKyUKK1xkZWZcYWN0aXZlcGFyZW5zeyUKKyAgXGNhdGNvZGVgXCg9XGFjdGl2ZSBcY2F0Y29kZWBcKT1cYWN0aXZlCisgIFxjYXRjb2RlYFxbPVxhY3RpdmUgXGNhdGNvZGVgXF09XGFjdGl2ZQorICBcY2F0Y29kZWBcJj1cYWN0aXZlCit9CisKKyUgTWFrZSBjb250cm9sIHNlcXVlbmNlcyB3aGljaCBhY3QgbGlrZSBub3JtYWwgcGFyZW50aGVzaXMgY2hhcnMuCitcbGV0XGxwYXJlbiA9ICggXGxldFxycGFyZW4gPSApCisKKyUgQmUgc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGEgZGVmaW5pdGlvbiBmb3IgYCgnLCBldGMuICBGb3IgZXhhbXBsZSwKKyUgaWYgdGhlIGZuIG5hbWUgaGFzIHBhcmVucyBpbiBpdCwgXGJvbGRicmF4IHdpbGwgbm90IGJlIGluIGVmZmVjdCB5ZXQsCislIHNvIFRlWCB3b3VsZCBvdGhlcndpc2UgY29tcGxhaW4gYWJvdXQgdW5kZWZpbmVkIGNvbnRyb2wgc2VxdWVuY2UuCit7CisgIFxhY3RpdmVwYXJlbnMKKyAgXGdsb2JhbFxsZXQoPVxscGFyZW4gXGdsb2JhbFxsZXQpPVxycGFyZW4KKyAgXGdsb2JhbFxsZXRbPVxsYnJhY2sgXGdsb2JhbFxsZXRdPVxyYnJhY2sKKyAgXGdsb2JhbFxsZXQmID0gXCYKKworICBcZ2RlZlxib2xkYnJheHtcbGV0KD1cb3BuclxsZXQpPVxjbG5yXGxldFs9XGxicmJcbGV0XT1ccmJyYn0KKyAgXGdkZWZcbWFnaWNhbXB7XGxldCY9XGFtcHJtfQorfQorCitcbmV3Y291bnRccGFyZW5jb3VudAorCislIElmIHdlIGVuY291bnRlciAmZm9vLCB0aGVuIHR1cm4gb24gKCktaGFja2luZyBhZnRlcndhcmRzCitcbmV3aWZcaWZhbXBzZWVuCitcZGVmXGFtcHJtIzEge1xhbXBzZWVudHJ1ZXtcYmZcJiMxIH19CisKK1xkZWZccGFyZW5mb250eyUKKyAgXGlmYW1wc2VlbgorICAgICUgQXQgdGhlIGZpcnN0IGxldmVsLCBwcmludCBwYXJlbnMgaW4gcm9tYW4sCisgICAgJSBvdGhlcndpc2UgdXNlIHRoZSBkZWZhdWx0IGZvbnQuCisgICAgXGlmbnVtIFxwYXJlbmNvdW50PTEgXHJtIFxmaQorICBcZWxzZQorICAgICUgVGhlIFxzZiBwYXJlbnMgKGluIFxib2xkYnJheCkgYWN0dWFsbHkgYXJlIGEgbGl0dGxlIGJvbGRlciB0aGFuCisgICAgJSB0aGUgY29udGFpbmVkIHRleHQuICBUaGlzIGlzIGVzcGVjaWFsbHkgbmVlZGVkIGZvciBbIGFuZCBdIC4KKyAgICBcc2YKKyAgXGZpCit9CitcZGVmXGluZmlyc3RsZXZlbCMxeyUKKyAgXGlmYW1wc2VlbgorICAgIFxpZm51bVxwYXJlbmNvdW50PTEKKyAgICAgICMxJQorICAgIFxmaQorICBcZmkKK30KK1xkZWZcYmZhZnRlcndvcmQjMSB7IzEgXGJmfQorCitcZGVmXG9wbnJ7JQorICBcZ2xvYmFsXGFkdmFuY2VccGFyZW5jb3VudCBieSAxCisgIHtccGFyZW5mb250KH0lCisgIFxpbmZpcnN0bGV2ZWwgXGJmYWZ0ZXJ3b3JkCit9CitcZGVmXGNsbnJ7JQorICB7XHBhcmVuZm9udCl9JQorICBcaW5maXJzdGxldmVsIFxzbAorICBcZ2xvYmFsXGFkdmFuY2VccGFyZW5jb3VudCBieSAtMQorfQorCitcbmV3Y291bnRcYnJhY2tjb3VudAorXGRlZlxsYnJieyUKKyAgXGdsb2JhbFxhZHZhbmNlXGJyYWNrY291bnQgYnkgMQorICB7XGJmW30lCit9CitcZGVmXHJicmJ7JQorICB7XGJmXX0lCisgIFxnbG9iYWxcYWR2YW5jZVxicmFja2NvdW50IGJ5IC0xCit9CisKK1xkZWZcY2hlY2twYXJlbmNvdW50c3slCisgIFxpZm51bVxwYXJlbmNvdW50PTAgXGVsc2UgXGJhZHBhcmVuY291bnQgXGZpCisgIFxpZm51bVxicmFja2NvdW50PTAgXGVsc2UgXGJhZGJyYWNrY291bnQgXGZpCit9CitcZGVmXGJhZHBhcmVuY291bnR7JQorICBcZXJybWVzc2FnZXtVbmJhbGFuY2VkIHBhcmVudGhlc2VzIGluIEBkZWZ9JQorICBcZ2xvYmFsXHBhcmVuY291bnQ9MAorfQorXGRlZlxiYWRicmFja2NvdW50eyUKKyAgXGVycm1lc3NhZ2V7VW5iYWxhbmNlZCBzcXVhcmUgYnJhY2VzIGluIEBkZWZ9JQorICBcZ2xvYmFsXGJyYWNrY291bnQ9MAorfQorCisKK1xtZXNzYWdle21hY3Jvcyx9CislIEBtYWNyby4KKworJSBUbyBkbyB0aGlzIHJpZ2h0IHdlIG5lZWQgYSBmZWF0dXJlIG9mIGUtVGVYLCBcc2NhbnRva2VucywKKyUgd2hpY2ggd2UgYXJyYW5nZSB0byBlbXVsYXRlIHdpdGggYSB0ZW1wb3JhcnkgZmlsZSBpbiBvcmRpbmFyeSBUZVguCitcaWZ4XGVUZVh2ZXJzaW9uXHVuZGVmaW5lZAorICBcbmV3d3JpdGVcbWFjc2NyaWJibGUKKyAgXGRlZlxzY2FudG9rZW5zIzF7JQorICAgIFx0b2tzMD17IzF9JQorICAgIFxpbW1lZGlhdGVcb3Blbm91dFxtYWNzY3JpYmJsZT1cam9ibmFtZS50bXAKKyAgICBcaW1tZWRpYXRlXHdyaXRlXG1hY3NjcmliYmxle1x0aGVcdG9rczB9JQorICAgIFxpbW1lZGlhdGVcY2xvc2VvdXRcbWFjc2NyaWJibGUKKyAgICBcaW5wdXQgXGpvYm5hbWUudG1wCisgIH0KK1xmaQorCitcZGVmXHNjYW5tYWNybyMxeyUKKyAgXGJlZ2luZ3JvdXAKKyAgICBcbmV3bGluZWNoYXJgXF5eTQorICAgIFxsZXRceGVhdHNwYWNlc1xlYXRzcGFjZXMKKyAgICAlIFVuZG8gY2F0Y29kZSBjaGFuZ2VzIG9mIFxzdGFydGNvbnRlbnRzIGFuZCBcZG9wcmludGluZGV4CisgICAgJSBXaGVuIGNhbGxlZCBmcm9tIEBpbnNlcnRjb3B5aW5nIG9yIChzaG9ydCljYXB0aW9uLCB3ZSBuZWVkIGFjdGl2ZQorICAgICUgYmFja3NsYXNoIHRvIGdldCBpdCBwcmludGVkIGNvcnJlY3RseS4gIFByZXZpb3VzbHksIHdlIGhhZAorICAgICUgXGNhdGNvZGVgXFw9XG90aGVyIGluc3RlYWQuICBXZSdsbCBzZWUgd2hldGhlciBhIHByb2JsZW0gYXBwZWFycworICAgICUgd2l0aCBtYWNybyBleHBhbnNpb24uCQkJCS0ta2FzYWwsIDE5YXVnMDQKKyAgICBcY2F0Y29kZWBcQD0wIFxjYXRjb2RlYFxcPVxhY3RpdmUgXGVzY2FwZWNoYXI9YFxACisgICAgJSAuLi4gYW5kIFxleGFtcGxlCisgICAgXHNwYWNlaXNzcGFjZQorICAgICUKKyAgICAlIEFwcGVuZCBcZW5kaW5wdXQgdG8gbWFrZSBzdXJlIHRoYXQgVGVYIGRvZXMgbm90IHNlZSB0aGUgZW5kaW5nIG5ld2xpbmUuCisgICAgJQorICAgICUgSSd2ZSB2ZXJpZmllZCB0aGF0IGl0IGlzIG5lY2Vzc2FyeSBib3RoIGZvciBlLVRlWCBhbmQgZm9yIG9yZGluYXJ5IFRlWAorICAgICUJCQkJCQkJLS1rYXNhbCwgMjlub3YwMworICAgIFxzY2FudG9rZW5zeyMxXGVuZGlucHV0fSUKKyAgXGVuZGdyb3VwCit9CisKK1xkZWZcc2NhbmV4cCMxeyUKKyAgXGVkZWZcdGVtcHtcbm9leHBhbmRcc2Nhbm1hY3JveyMxfX0lCisgIFx0ZW1wCit9CisKK1xuZXdjb3VudFxwYXJhbW5vICAgJSBDb3VudCBvZiBwYXJhbWV0ZXJzCitcbmV3dG9rc1xtYWNuYW1lICAgICUgTWFjcm8gbmFtZQorXG5ld2lmXGlmcmVjdXJzaXZlICAlIElzIGl0IHJlY3Vyc2l2ZT8KKworJSBMaXN0IG9mIGFsbCBkZWZpbmVkIG1hY3JvcyBpbiB0aGUgZm9ybQorJSAgICBcZGVmaW5lZHVtbXl3b3JkXG1hY3JvMVxkZWZpbmVkdW1teXdvcmRcbWFjcm8yLi4uCislIEN1cnJlbnRseSBpcyBhbHNvIGNvbnRhaW5zIGFsbCBAYWxpYXNlczsgdGhlIGxpc3QgY2FuIGJlIHNwbGl0CislIGlmIHRoZXJlIGlzIGEgbmVlZC4KK1xkZWZcbWFjcm9saXN0e30KKworJSBBZGQgdGhlIG1hY3JvIHRvIFxtYWNyb2xpc3QKK1xkZWZcYWRkdG9tYWNyb2xpc3QjMXtcZXhwYW5kYWZ0ZXIgXGFkZHRvbWFjcm9saXN0eHh4IFxjc25hbWUjMVxlbmRjc25hbWV9CitcZGVmXGFkZHRvbWFjcm9saXN0eHh4IzF7JQorICAgICBcdG9rczAgPSBcZXhwYW5kYWZ0ZXJ7XG1hY3JvbGlzdFxkZWZpbmVkdW1teXdvcmQjMX0lCisgICAgIFx4ZGVmXG1hY3JvbGlzdHtcdGhlXHRva3MwfSUKK30KKworJSBVdGlsaXR5IHJvdXRpbmVzLgorJSBUaGlzIGRvZXMgXGxldCAjMSA9ICMyLCB3aXRoIFxjc25hbWVzOyB0aGF0IGlzLAorJSAgIFxsZXQgXGNzbmFtZSMxXGVuZGNzbmFtZSA9IFxjc25hbWUjMlxlbmRjc25hbWUKKyUgKGV4Y2VwdCBvZiBjb3Vyc2Ugd2UgaGF2ZSB0byBwbGF5IGV4cGFuc2lvbiBnYW1lcykuCislIAorXGRlZlxjc2xldCMxIzJ7JQorICBcZXhwYW5kYWZ0ZXJcbGV0CisgIFxjc25hbWUjMVxleHBhbmRhZnRlclxlbmRjc25hbWUKKyAgXGNzbmFtZSMyXGVuZGNzbmFtZQorfQorCislIFRyaW0gbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIG9mZiBhIHN0cmluZy4KKyUgQ29uY2VwdHMgZnJvbSBhcm8tYmVuZCBwcm9ibGVtIDE1IChzZWUgQ1RBTikuCit7XGNhdGNvZGVgXEA9MTEKK1xnZGVmXGVhdHNwYWNlcyAjMXtcZXhwYW5kYWZ0ZXJcdHJpbUBcZXhwYW5kYWZ0ZXJ7IzEgfX0KK1xnZGVmXHRyaW1AICMxe1x0cmltQEAgQCMxIEAgIzEgQCBAQH0KK1xnZGVmXHRyaW1AQCAjMUAgIzJAICMzQEB7XHRyaW1AQEBcZW1wdHkgIzIgQH0KK1xkZWZcdW5icmFjZSMxeyMxfQorXHVuYnJhY2V7XGdkZWZcdHJpbUBAQCAjMSB9ICMyQHsjMX0KK30KKworJSBUcmltIGEgc2luZ2xlIHRyYWlsaW5nIF5eTSBvZmYgYSBzdHJpbmcuCit7XGNhdGNvZGVgXF5eTT1cb3RoZXIgXGNhdGNvZGVgXFE9MyUKK1xnZGVmXGVhdGNyICMxe1xlYXRjcmEgIzFRXl5NUX0lCitcZ2RlZlxlYXRjcmEjMV5eTVF7XGVhdGNyYiMxUX0lCitcZ2RlZlxlYXRjcmIjMVEjMlF7IzF9JQorfQorCislIE1hY3JvIGJvZGllcyBhcmUgYWJzb3JiZWQgYXMgYW4gYXJndW1lbnQgaW4gYSBjb250ZXh0IHdoZXJlCislIGFsbCBjaGFyYWN0ZXJzIGFyZSBjYXRjb2RlIDEwLCAxMSBvciAxMiwgZXhjZXB0IFwgd2hpY2ggaXMgYWN0aXZlCislIChhcyBpbiBub3JtYWwgdGV4aW5mbykuIEl0IGlzIG5lY2Vzc2FyeSB0byBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgXC4KKworJSBJdCdzIG5lY2Vzc2FyeSB0byBoYXZlIGhhcmQgQ1JzIHdoZW4gdGhlIG1hY3JvIGlzIGV4ZWN1dGVkLiBUaGlzIGlzCislIGRvbmUgYnkgIG1ha2luZyBeXk0gKFxlbmRsaW5lY2hhcikgY2F0Y29kZSAxMiB3aGVuIHJlYWRpbmcgdGhlIG1hY3JvCislIGJvZHksIGFuZCB0aGVuIG1ha2luZyBpdCB0aGUgXG5ld2xpbmVjaGFyIGluIFxzY2FubWFjcm8uCisKK1xkZWZcc2NhbmN0eHR7JQorICBcY2F0Y29kZWBcIj1cb3RoZXIKKyAgXGNhdGNvZGVgXCs9XG90aGVyCisgIFxjYXRjb2RlYFw8PVxvdGhlcgorICBcY2F0Y29kZWBcPj1cb3RoZXIKKyAgXGNhdGNvZGVgXEA9XG90aGVyCisgIFxjYXRjb2RlYFxePVxvdGhlcgorICBcY2F0Y29kZWBcXz1cb3RoZXIKKyAgXGNhdGNvZGVgXHw9XG90aGVyCisgIFxjYXRjb2RlYFx+PVxvdGhlcgorfQorCitcZGVmXHNjYW5hcmdjdHh0eyUKKyAgXHNjYW5jdHh0CisgIFxjYXRjb2RlYFxcPVxvdGhlcgorICBcY2F0Y29kZWBcXl5NPVxvdGhlcgorfQorCitcZGVmXG1hY3JvYm9keWN0eHR7JQorICBcc2NhbmN0eHQKKyAgXGNhdGNvZGVgXHs9XG90aGVyCisgIFxjYXRjb2RlYFx9PVxvdGhlcgorICBcY2F0Y29kZWBcXl5NPVxvdGhlcgorICBcdXNlbWJvZHliYWNrc2xhc2gKK30KKworXGRlZlxtYWNyb2FyZ2N0eHR7JQorICBcc2NhbmN0eHQKKyAgXGNhdGNvZGVgXFw9XG90aGVyCit9CisKKyUgXG1ib2R5YmFja3NsYXNoIGlzIHRoZSBkZWZpbml0aW9uIG9mIFwgaW4gQG1hY3JvIGJvZGllcy4KKyUgSXQgbWFwcyBcZm9vXCA9PiBcY3NuYW1lIG1hY2FyZy5mb29cZW5kY3NuYW1lID0+ICNOCislIHdoZXJlIE4gaXMgdGhlIG1hY3JvIHBhcmFtZXRlciBudW1iZXIuCislIFdlIGRlZmluZSBcY3NuYW1lIG1hY2FyZy5cZW5kY3NuYW1lIHRvIGJlIFxyZWFsYmFja3NsYXNoLCBzbworJSBcXCBpbiBtYWNybyByZXBsYWNlbWVudCB0ZXh0IGdldHMgeW91IGEgYmFja3NsYXNoLgorCit7XGNhdGNvZGVgQD0wIEBjYXRjb2RlYEBcPUBhY3RpdmUKKyBAZ2RlZkB1c2VtYm9keWJhY2tzbGFzaHtAbGV0XD1AbWJvZHliYWNrc2xhc2h9CisgQGdkZWZAbWJvZHliYWNrc2xhc2gjMVx7QGNzbmFtZSBtYWNhcmcuIzFAZW5kY3NuYW1lfQorfQorXGV4cGFuZGFmdGVyXGRlZlxjc25hbWUgbWFjYXJnLlxlbmRjc25hbWV7XHJlYWxiYWNrc2xhc2h9CisKK1xkZWZcbWFjcm97XHJlY3Vyc2l2ZWZhbHNlXHBhcnNlYXJnXG1hY3JveHh4fQorXGRlZlxybWFjcm97XHJlY3Vyc2l2ZXRydWVccGFyc2VhcmdcbWFjcm94eHh9CisKK1xkZWZcbWFjcm94eHgjMXslCisgIFxnZXRhcmdzeyMxfSUgICAgICAgICAgIG5vdyBcbWFjbmFtZSBpcyB0aGUgbWFjbmFtZSBhbmQgXGFyZ2wgdGhlIGFyZ2xpc3QKKyAgXGlmeFxhcmdsXGVtcHR5ICAgICAgICUgbm8gYXJndW1lbnRzCisgICAgIFxwYXJhbW5vPTAlCisgIFxlbHNlCisgICAgIFxleHBhbmRhZnRlclxwYXJzZW1hcmdkZWYgXGFyZ2w7JQorICBcZmkKKyAgXGlmMVxjc25hbWUgaXNtYWNyby5cdGhlXG1hY25hbWVcZW5kY3NuYW1lCisgICAgIFxtZXNzYWdle1dhcm5pbmc6IHJlZGVmaW5pbmcgXHRoZVxtYWNuYW1lfSUKKyAgXGVsc2UKKyAgICAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgXHRoZVxtYWNuYW1lXGVuZGNzbmFtZSBccmVsYXgKKyAgICAgXGVsc2UgXGVycm1lc3NhZ2V7TWFjcm8gbmFtZSBcdGhlXG1hY25hbWVcc3BhY2UgYWxyZWFkeSBkZWZpbmVkfVxmaQorICAgICBcZ2xvYmFsXGNzbGV0e21hY3NhdmUuXHRoZVxtYWNuYW1lfXtcdGhlXG1hY25hbWV9JQorICAgICBcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgaXNtYWNyby5cdGhlXG1hY25hbWVcZW5kY3NuYW1lPTElCisgICAgIFxhZGR0b21hY3JvbGlzdHtcdGhlXG1hY25hbWV9JQorICBcZmkKKyAgXGJlZ2luZ3JvdXAgXG1hY3JvYm9keWN0eHQKKyAgXGlmcmVjdXJzaXZlIFxleHBhbmRhZnRlclxwYXJzZXJtYWNib2R5CisgIFxlbHNlIFxleHBhbmRhZnRlclxwYXJzZW1hY2JvZHkKKyAgXGZpfQorCitccGFyc2VhcmdkZWZcdW5tYWNyb3slCisgIFxpZjFcY3NuYW1lIGlzbWFjcm8uIzFcZW5kY3NuYW1lCisgICAgXGdsb2JhbFxjc2xldHsjMX17bWFjc2F2ZS4jMX0lCisgICAgXGdsb2JhbFxleHBhbmRhZnRlclxsZXQgXGNzbmFtZSBpc21hY3JvLiMxXGVuZGNzbmFtZT0wJQorICAgICUgUmVtb3ZlIHRoZSBtYWNybyBuYW1lIGZyb20gXG1hY3JvbGlzdDoKKyAgICBcYmVnaW5ncm91cAorICAgICAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUjMVxlbmRjc25hbWUgXHJlbGF4CisgICAgICBcbGV0XGRlZmluZWR1bW15d29yZFx1bm1hY3JvZG8KKyAgICAgIFx4ZGVmXG1hY3JvbGlzdHtcbWFjcm9saXN0fSUKKyAgICBcZW5kZ3JvdXAKKyAgXGVsc2UKKyAgICBcZXJybWVzc2FnZXtNYWNybyAjMSBub3QgZGVmaW5lZH0lCisgIFxmaQorfQorCislIENhbGxlZCBieSBcZG8gZnJvbSBcZG91bm1hY3JvIG9uIGVhY2ggbWFjcm8uICBUaGUgaWRlYSBpcyB0byBvbWl0IGFueQorJSBtYWNybyBkZWZpbml0aW9ucyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHRvIFxyZWxheC4KKyUKK1xkZWZcdW5tYWNyb2RvIzF7JQorICBcaWZ4ICMxXHJlbGF4CisgICAgJSByZW1vdmUgdGhpcworICBcZWxzZQorICAgIFxub2V4cGFuZFxkZWZpbmVkdW1teXdvcmQgXG5vZXhwYW5kIzElCisgIFxmaQorfQorCislIFRoaXMgbWFrZXMgdXNlIG9mIHRoZSBvYnNjdXJlIGZlYXR1cmUgdGhhdCBpZiB0aGUgbGFzdCB0b2tlbiBvZiBhCislIDxwYXJhbWV0ZXIgbGlzdD4gaXMgIywgdGhlbiB0aGUgcHJlY2VkaW5nIGFyZ3VtZW50IGlzIGRlbGltaXRlZCBieQorJSBhbiBvcGVuaW5nIGJyYWNlLCBhbmQgdGhhdCBvcGVuaW5nIGJyYWNlIGlzIG5vdCBjb25zdW1lZC4KK1xkZWZcZ2V0YXJncyMxe1xnZXRhcmdzeHh4IzF7fX0KK1xkZWZcZ2V0YXJnc3h4eCMxI3tcZ2V0bWFjbmFtZSAjMSBccmVsYXhcZ2V0bWFjYXJnc30KK1xkZWZcZ2V0bWFjbmFtZSAjMSAjMlxyZWxheHtcbWFjbmFtZT17IzF9fQorXGRlZlxnZXRtYWNhcmdzIzF7XGRlZlxhcmdseyMxfX0KKworJSBQYXJzZSB0aGUgb3B0aW9uYWwge3BhcmFtc30gbGlzdC4gIFNldCB1cCBccGFyYW1ubyBhbmQgXHBhcmFtbGlzdAorJSBzbyBcZGVmbWFjcm8ga25vd3Mgd2hhdCB0byBkby4gIERlZmluZSBcbWFjYXJnLmJsYWggZm9yIGVhY2ggYmxhaAorJSBpbiB0aGUgcGFyYW1zIGxpc3QsIHRvIGJlICMjTiB3aGVyZSBOIGlzIHRoZSBwb3NpdGlvbiBpbiB0aGF0IGxpc3QuCislIFRoYXQgZ2V0cyB1c2VkIGJ5IFxtYm9keWJhY2tzbGFzaCAoYWJvdmUpLgorCislIFdlIG5lZWQgdG8gZ2V0IGBtYWNybyBwYXJhbWV0ZXIgY2hhciAjJyBpbnRvIHNldmVyYWwgZGVmaW5pdGlvbnMuCislIFRoZSB0ZWNobmlxdWUgdXNlZCBpcyBzdG9sZW4gZnJvbSBMYVRlWDogIGxldCBcaGFzaCBiZSBzb21ldGhpbmcKKyUgdW5leHBhbmRhYmxlLCBpbnNlcnQgdGhhdCB3aGVyZXZlciB5b3UgbmVlZCBhICMsIGFuZCB0aGVuIHJlZGVmaW5lCislIGl0IHRvICMganVzdCBiZWZvcmUgdXNpbmcgdGhlIHRva2VuIGxpc3QgcHJvZHVjZWQuCislCislIFRoZSBzYW1lIHRlY2huaXF1ZSBpcyB1c2VkIHRvIHByb3RlY3QgXGVhdHNwYWNlcyB0aWxsIGp1c3QgYmVmb3JlCislIHRoZSBtYWNybyBpcyB1c2VkLgorCitcZGVmXHBhcnNlbWFyZ2RlZiMxO3tccGFyYW1ubz0wXGRlZlxwYXJhbWxpc3R7fSUKKyAgICAgICAgXGxldFxoYXNoXHJlbGF4XGxldFx4ZWF0c3BhY2VzXHJlbGF4XHBhcnNlbWFyZ2RlZnh4eCMxLDssfQorXGRlZlxwYXJzZW1hcmdkZWZ4eHgjMSx7JQorICBcaWYjMTtcbGV0XG5leHQ9XHJlbGF4CisgIFxlbHNlIFxsZXRcbmV4dD1ccGFyc2VtYXJnZGVmeHh4CisgICAgXGFkdmFuY2VccGFyYW1ubyBieSAxJQorICAgIFxleHBhbmRhZnRlclxlZGVmXGNzbmFtZSBtYWNhcmcuXGVhdHNwYWNlc3sjMX1cZW5kY3NuYW1lCisgICAgICAgIHtceGVhdHNwYWNlc3tcaGFzaFx0aGVccGFyYW1ub319JQorICAgIFxlZGVmXHBhcmFtbGlzdHtccGFyYW1saXN0XGhhc2hcdGhlXHBhcmFtbm8sfSUKKyAgXGZpXG5leHR9CisKKyUgVGhlc2UgdHdvIGNvbW1hbmRzIHJlYWQgcmVjdXJzaXZlIGFuZCBub25yZWN1cnNpdmUgbWFjcm8gYm9kaWVzLgorJSAoVGhleSdyZSBkaWZmZXJlbnQgc2luY2UgcmVjIGFuZCBub25yZWMgbWFjcm9zIGVuZCBkaWZmZXJlbnRseS4pCisKK1xsb25nXGRlZlxwYXJzZW1hY2JvZHkjMUBlbmQgbWFjcm8lCit7XHhkZWZcdGVtcHtcZWF0Y3J7IzF9fVxlbmRncm91cFxkZWZtYWNyb30lCitcbG9uZ1xkZWZccGFyc2VybWFjYm9keSMxQGVuZCBybWFjcm8lCit7XHhkZWZcdGVtcHtcZWF0Y3J7IzF9fVxlbmRncm91cFxkZWZtYWNyb30lCisKKyUgVGhpcyBkZWZpbmVzIHRoZSBtYWNybyBpdHNlbGYuIFRoZXJlIGFyZSBzaXggY2FzZXM6IHJlY3Vyc2l2ZSBhbmQKKyUgbm9ucmVjdXJzaXZlIG1hY3JvcyBvZiB6ZXJvLCBvbmUsIGFuZCBtYW55IGFyZ3VtZW50cy4KKyUgTXVjaCBtYWdpYyB3aXRoIFxleHBhbmRhZnRlciBoZXJlLgorJSBceGRlZiBpcyB1c2VkIHNvIHRoYXQgbWFjcm8gZGVmaW5pdGlvbnMgd2lsbCBzdXJ2aXZlIHRoZSBmaWxlCislIHRoZXkncmUgZGVmaW5lZCBpbjsgQGluY2x1ZGUgcmVhZHMgdGhlIGZpbGUgaW5zaWRlIGEgZ3JvdXAuCitcZGVmXGRlZm1hY3JveyUKKyAgXGxldFxoYXNoPSMjJSBjb252ZXJ0IHBsYWNlaG9sZGVycyB0byBtYWNybyBwYXJhbWV0ZXIgY2hhcnMKKyAgXGlmcmVjdXJzaXZlCisgICAgXGlmY2FzZVxwYXJhbW5vCisgICAgJSAwCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH19JQorICAgIFxvciAlIDEKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKKyAgICAgICAgIFxub2V4cGFuZFxicmFjZW9ybGluZQorICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lfSUKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lIyMxeyUKKyAgICAgICAgIFxlZ3JvdXBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfX0lCisgICAgXGVsc2UgJSBtYW55CisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0CisgICAgICAgICBcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lIyMxeyUKKyAgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUgIyMxLH0lCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgICAgXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lCisgICAgICAgICAgXHBhcmFtbGlzdHtcZWdyb3VwXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH19JQorICAgIFxmaQorICBcZWxzZQorICAgIFxpZmNhc2VccGFyYW1ubworICAgICUgMAorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgIFxub2V4cGFuZFxub3JlY3Vyc2V7XHRoZVxtYWNuYW1lfSUKKyAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH1cZWdyb3VwfSUKKyAgICBcb3IgJSAxCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0CisgICAgICAgICBcbm9leHBhbmRcYnJhY2VvcmxpbmUKKyAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgIFxlZ3JvdXAKKyAgICAgICAgXG5vZXhwYW5kXG5vcmVjdXJzZXtcdGhlXG1hY25hbWV9JQorICAgICAgICBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfVxlZ3JvdXB9JQorICAgIFxlbHNlICUgbWFueQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lICMjMSx9JQorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZgorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICBcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUKKyAgICAgIFxwYXJhbWxpc3R7JQorICAgICAgICAgIFxlZ3JvdXAKKyAgICAgICAgICBcbm9leHBhbmRcbm9yZWN1cnNle1x0aGVcbWFjbmFtZX0lCisgICAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH1cZWdyb3VwfSUKKyAgICBcZmkKKyAgXGZpfQorCitcZGVmXG5vcmVjdXJzZSMxe1xiZ3JvdXBcY3NsZXR7IzF9e21hY3NhdmUuIzF9fQorCislIFxicmFjZW9ybGluZSBkZWNpZGVzIHdoZXRoZXIgdGhlIG5leHQgbm9ud2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgYQorJSB7LiAgSWYgc28gaXQgcmVhZHMgdXAgdG8gdGhlIGNsb3NpbmcgfSwgaWYgbm90LCBpdCByZWFkcyB0aGUgd2hvbGUKKyUgbGluZS4gIFdoYXRldmVyIHdhcyByZWFkIGlzIHRoZW4gZmVkIHRvIHRoZSBuZXh0IGNvbnRyb2wgc2VxdWVuY2UKKyUgYXMgYW4gYXJndW1lbnQgKGJ5IFxwYXJzZWJyYWNlIG9yIFxwYXJzZWFyZykKK1xkZWZcYnJhY2VvcmxpbmUjMXtcbGV0XG5leHQ9IzFcZnV0dXJlbGV0XG5jaGFyXGJyYWNlb3JsaW5leHh4fQorXGRlZlxicmFjZW9ybGluZXh4eHslCisgIFxpZnhcbmNoYXJcYmdyb3VwXGVsc2UKKyAgICBcZXhwYW5kYWZ0ZXJccGFyc2VhcmcKKyAgXGZpIFxuZXh0fQorCisKKyUgQGFsaWFzLgorJSBXZSBuZWVkIHNvbWUgdHJpY2tlcnkgdG8gcmVtb3ZlIHRoZSBvcHRpb25hbCBzcGFjZXMgYXJvdW5kIHRoZSBlcXVhbAorJSBzaWduLiAgSnVzdCBtYWtlIHRoZW0gYWN0aXZlIGFuZCB0aGVuIGV4cGFuZCB0aGVtIGFsbCB0byBub3RoaW5nLgorXGRlZlxhbGlhc3tccGFyc2Vhcmd1c2luZ1xvYmV5c3BhY2VzXGFsaWFzeHh4fQorXGRlZlxhbGlhc3h4eCAjMXtcYWxpYXN5eXkjMVxyZWxheH0KK1xkZWZcYWxpYXN5eXkgIzE9IzJccmVsYXh7JQorICB7JQorICAgIFxleHBhbmRhZnRlclxsZXRcb2JleWVkc3BhY2U9XGVtcHR5CisgICAgXGFkZHRvbWFjcm9saXN0eyMxfSUKKyAgICBceGRlZlxuZXh0e1xnbG9iYWxcbGV0XG1ha2Vjc25hbWV7IzF9PVxtYWtlY3NuYW1leyMyfX0lCisgIH0lCisgIFxuZXh0Cit9CisKKworXG1lc3NhZ2V7Y3Jvc3MgcmVmZXJlbmNlcyx9CisKK1xuZXd3cml0ZVxhdXhmaWxlCisKK1xuZXdpZlxpZmhhdmV4cmVmcyAgICAlIFRydWUgaWYgeHJlZiB2YWx1ZXMgYXJlIGtub3duLgorXG5ld2lmXGlmd2FybmVkeHJlZnMgICUgVHJ1ZSBpZiB3ZSB3YXJuZWQgb25jZSB0aGF0IHRoZXkgYXJlbid0IGtub3duLgorCislIEBpbmZvcmVmIGlzIHJlbGF0aXZlbHkgc2ltcGxlLgorXGRlZlxpbmZvcmVmICMxe1xpbmZvcmVmenp6ICMxLCwsLCoqfQorXGRlZlxpbmZvcmVmenp6ICMxLCMyLCMzLCM0Kip7XHB1dHdvcmRTZWV7fSBccHV0d29yZEluZm97fSBccHV0d29yZGZpbGV7fSBcZmlsZXtcaWdub3Jlc3BhY2VzICMze319LAorICBub2RlIFxzYW1we1xpZ25vcmVzcGFjZXMjMXt9fX0KKworJSBAbm9kZSdzIG9ubHkgam9iIGluIFRlWCBpcyB0byBkZWZpbmUgXGxhc3Rub2RlLCB3aGljaCBpcyB1c2VkIGluCislIGNyb3NzLXJlZmVyZW5jZXMuICBUaGUgQG5vZGUgbGluZSBtaWdodCBvciBtaWdodCBub3QgaGF2ZSBjb21tYXMsIGFuZAorJSBtaWdodCBvciBtaWdodCBub3QgaGF2ZSBzcGFjZXMgYmVmb3JlIHRoZSBmaXJzdCBjb21tYSwgbGlrZToKKyUgQG5vZGUgZm9vICwgYmFyICwgLi4uCislIFdlIGRvbid0IHdhbnQgc3VjaCB0cmFpbGluZyBzcGFjZXMgaW4gdGhlIG5vZGUgbmFtZS4KKyUKK1xwYXJzZWFyZ2RlZlxub2Rle1xjaGVja2Vudnt9XGRvbm9kZSAjMSAsXGZpbmlzaG5vZGVwYXJzZX0KKyUKKyUgYWxzbyByZW1vdmUgYSB0cmFpbGluZyBjb21tYSwgaW4gY2FzZSBvZiBzb21ldGhpbmcgbGlrZSB0aGlzOgorJSBAbm9kZSBIZWxwLUNyb3NzLCAgLCAgLCBDcm9zcy1yZWZzCitcZGVmXGRvbm9kZSMxICwjMlxmaW5pc2hub2RlcGFyc2V7XGRvZG9ub2RlICMxLFxmaW5pc2hub2RlcGFyc2V9CitcZGVmXGRvZG9ub2RlIzEsIzJcZmluaXNobm9kZXBhcnNle1xnZGVmXGxhc3Rub2RleyMxfX0KKworXGxldFxud25vZGU9XG5vZGUKK1xsZXRcbGFzdG5vZGU9XGVtcHR5CisKKyUgV3JpdGUgYSBjcm9zcy1yZWZlcmVuY2UgZGVmaW5pdGlvbiBmb3IgdGhlIGN1cnJlbnQgbm9kZS4gICMxIGlzIHRoZQorJSB0eXBlIChZbnVtYmVyZWQsIFlhcHBlbmRpeCwgWW5vdGhpbmcpLgorJQorXGRlZlxkb25vZGVyZWYjMXslCisgIFxpZnhcbGFzdG5vZGVcZW1wdHlcZWxzZQorICAgIFxzZXRyZWZ7XGxhc3Rub2RlfXsjMX0lCisgICAgXGdsb2JhbFxsZXRcbGFzdG5vZGU9XGVtcHR5CisgIFxmaQorfQorCislIEBhbmNob3J7TkFNRX0gLS0gZGVmaW5lIHhyZWYgdGFyZ2V0IGF0IGFyYml0cmFyeSBwb2ludC4KKyUKK1xuZXdjb3VudFxzYXZlc2ZyZWdpc3RlcgorJQorXGRlZlxzYXZlc2Z7XHJlbGF4IFxpZmhtb2RlIFxzYXZlc2ZyZWdpc3Rlcj1cc3BhY2VmYWN0b3IgXGZpfQorXGRlZlxyZXN0b3Jlc2Z7XHJlbGF4IFxpZmhtb2RlIFxzcGFjZWZhY3Rvcj1cc2F2ZXNmcmVnaXN0ZXIgXGZpfQorXGRlZlxhbmNob3IjMXtcc2F2ZXNmIFxzZXRyZWZ7IzF9e1lub3RoaW5nfVxyZXN0b3Jlc2YgXGlnbm9yZXNwYWNlc30KKworJSBcc2V0cmVme05BTUV9e1NOVH0gZGVmaW5lcyBhIGNyb3NzLXJlZmVyZW5jZSBwb2ludCBOQU1FIChhIG5vZGUgb3IgYW4KKyUgYW5jaG9yKSwgd2hpY2ggY29uc2lzdHMgb2YgdGhyZWUgcGFydHM6CislIDEpIE5BTUUtdGl0bGUgLSB0aGUgY3VycmVudCBzZWN0aW9uaW5nIG5hbWUgdGFrZW4gZnJvbSBcdGhpc3NlY3Rpb24sCislICAgICAgICAgICAgICAgICBvciB0aGUgYW5jaG9yIG5hbWUuCislIDIpIE5BTUUtc250ICAgLSBzZWN0aW9uIG51bWJlciBhbmQgdHlwZSwgcGFzc2VkIGFzIHRoZSBTTlQgYXJnLCBvcgorJSAgICAgICAgICAgICAgICAgZW1wdHkgZm9yIGFuY2hvcnMuCislIDMpIE5BTUUtcGcgICAgLSB0aGUgcGFnZSBudW1iZXIuCislCislIFRoaXMgaXMgY2FsbGVkIGZyb20gXGRvbm9kZXJlZiwgXGFuY2hvciwgYW5kIFxkb2Zsb2F0LiAgSW4gdGhlIGNhc2Ugb2YKKyUgZmxvYXRzLCB0aGVyZSBpcyBhbiBhZGRpdGlvbmFsIHBhcnQsIHdoaWNoIGlzIG5vdCB3cml0dGVuIGhlcmU6CislIDQpIE5BTUUtbG9mICAgLSB0aGUgdGV4dCBhcyBpdCBzaG91bGQgYXBwZWFyIGluIGEgQGxpc3RvZmZsb2F0cy4KKyUKK1xkZWZcc2V0cmVmIzEjMnslCisgIFxwZGZta2Rlc3R7IzF9JQorICBcaWZsaW5rcworICAgIHslCisgICAgICBcYXRkdW1taWVzICAlIHByZXNlcnZlIGNvbW1hbmRzLCBidXQgZG9uJ3QgZXhwYW5kIHRoZW0KKyAgICAgIFxlZGVmXHdyaXRleHJkZWYjIzEjIzJ7JQorCVx3cml0ZVxhdXhmaWxle0B4cmRlZnsjMS0lICMxIG9mIFxzZXRyZWYsIGV4cGFuZGVkIGJ5IHRoZSBcZWRlZgorCSAgIyMxfXsjIzJ9fSUgdGhlc2UgYXJlIHBhcmFtZXRlcnMgb2YgXHdyaXRleHJkZWYKKyAgICAgIH0lCisgICAgICBcdG9rczAgPSBcZXhwYW5kYWZ0ZXJ7XHRoaXNzZWN0aW9ufSUKKyAgICAgIFxpbW1lZGlhdGUgXHdyaXRleHJkZWZ7dGl0bGV9e1x0aGVcdG9rczAgfSUKKyAgICAgIFxpbW1lZGlhdGUgXHdyaXRleHJkZWZ7c250fXtcY3NuYW1lICMyXGVuZGNzbmFtZX0lIFxZbnVtYmVyZWQgZXRjLgorICAgICAgXHdyaXRleHJkZWZ7cGd9e1xmb2xpb30lIHdpbGwgYmUgd3JpdHRlbiBsYXRlciwgZHVyaW5nIFxzaGlwb3V0CisgICAgfSUKKyAgXGZpCit9CisKKyUgQHhyZWYsIEBweHJlZiwgYW5kIEByZWYgZ2VuZXJhdGUgY3Jvc3MtcmVmZXJlbmNlcy4gIEZvciBceHJlZlgsICMxIGlzCislIHRoZSBub2RlIG5hbWUsICMyIHRoZSBuYW1lIG9mIHRoZSBJbmZvIGNyb3NzLXJlZmVyZW5jZSwgIzMgdGhlIHByaW50ZWQKKyUgbm9kZSBuYW1lLCAjNCB0aGUgbmFtZSBvZiB0aGUgSW5mbyBmaWxlLCAjNSB0aGUgbmFtZSBvZiB0aGUgcHJpbnRlZAorJSBtYW51YWwuICBBbGwgYnV0IHRoZSBub2RlIG5hbWUgY2FuIGJlIG9taXR0ZWQuCislCitcZGVmXHB4cmVmIzF7XHB1dHdvcmRzZWV7fSBceHJlZlhbIzEsLCwsLCwsXX0KK1xkZWZceHJlZiMxe1xwdXR3b3JkU2Vle30gXHhyZWZYWyMxLCwsLCwsLF19CitcZGVmXHJlZiMxe1x4cmVmWFsjMSwsLCwsLCxdfQorXGRlZlx4cmVmWFsjMSwjMiwjMywjNCwjNSwjNl17XGJlZ2luZ3JvdXAKKyAgXHVuc2Vwc3BhY2VzCisgIFxkZWZccHJpbnRlZG1hbnVhbHtcaWdub3Jlc3BhY2VzICM1fSUKKyAgXGRlZlxwcmludGVkcmVmbmFtZXtcaWdub3Jlc3BhY2VzICMzfSUKKyAgXHNldGJveDE9XGhib3h7XHByaW50ZWRtYW51YWxcdW5za2lwfSUKKyAgXHNldGJveDA9XGhib3h7XHByaW50ZWRyZWZuYW1lXHVuc2tpcH0lCisgIFxpZmRpbSBcd2QwID0gMHB0CisgICAgJSBObyBwcmludGVkIG5vZGUgbmFtZSB3YXMgZXhwbGljaXRseSBnaXZlbi4KKyAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVR4cmVmLWF1dG9tYXRpYy1zZWN0aW9uLXRpdGxlXGVuZGNzbmFtZVxyZWxheAorICAgICAgJSBVc2UgdGhlIG5vZGUgbmFtZSBpbnNpZGUgdGhlIHNxdWFyZSBicmFja2V0cy4KKyAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XGlnbm9yZXNwYWNlcyAjMX0lCisgICAgXGVsc2UKKyAgICAgICUgVXNlIHRoZSBhY3R1YWwgY2hhcHRlci9zZWN0aW9uIHRpdGxlIGFwcGVhciBpbnNpZGUKKyAgICAgICUgdGhlIHNxdWFyZSBicmFja2V0cy4gIFVzZSB0aGUgcmVhbCBzZWN0aW9uIHRpdGxlIGlmIHdlIGhhdmUgaXQuCisgICAgICBcaWZkaW0gXHdkMSA+IDBwdAorICAgICAgICAlIEl0IGlzIGluIGFub3RoZXIgbWFudWFsLCBzbyB3ZSBkb24ndCBoYXZlIGl0LgorICAgICAgICBcZGVmXHByaW50ZWRyZWZuYW1le1xpZ25vcmVzcGFjZXMgIzF9JQorICAgICAgXGVsc2UKKyAgICAgICAgXGlmaGF2ZXhyZWZzCisgICAgICAgICAgJSBXZSBrbm93IHRoZSByZWFsIHRpdGxlIGlmIHdlIGhhdmUgdGhlIHhyZWYgdmFsdWVzLgorICAgICAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XHJlZnh7IzEtdGl0bGV9e319JQorICAgICAgICBcZWxzZQorICAgICAgICAgICUgT3RoZXJ3aXNlIGp1c3QgY29weSB0aGUgSW5mbyBub2RlIG5hbWUuCisgICAgICAgICAgXGRlZlxwcmludGVkcmVmbmFtZXtcaWdub3Jlc3BhY2VzICMxfSUKKyAgICAgICAgXGZpJQorICAgICAgXGZpCisgICAgXGZpCisgIFxmaQorICAlCisgICUgTWFrZSBsaW5rIGluIHBkZiBvdXRwdXQuCisgIFxpZnBkZgorICAgIFxsZWF2ZXZtb2RlCisgICAgXGdldGZpbGVuYW1leyM0fSUKKyAgICB7XHR1cm5vZmZhY3RpdmUKKyAgICAgJSBTZWUgY29tbWVudHMgYXQgXGFjdGl2ZWJhY2tzbGFzaGRvdWJsZS4KKyAgICAge1xhY3RpdmViYWNrc2xhc2hkb3VibGUgXHhkZWZccGRmeHJlZmRlc3R7IzF9JQorICAgICAgXGJhY2tzbGFzaHBhcmVuc1xwZGZ4cmVmZGVzdH0lCisgICAgICUKKyAgICAgXGlmbnVtXGZpbGVuYW1lbGVuZ3RoPjAKKyAgICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSUKKyAgICAgICAgIGdvdG8gZmlsZXtcdGhlXGZpbGVuYW1lLnBkZn0gbmFtZXtccGRmeHJlZmRlc3R9JQorICAgICBcZWxzZQorICAgICAgIFxzdGFydGxpbmsgYXR0cnsvQm9yZGVyIFswIDAgMF19JQorICAgICAgICAgZ290byBuYW1le1xwZGZta3BnbntccGRmeHJlZmRlc3R9fSUKKyAgICAgXGZpCisgICAgfSUKKyAgICBcbGlua2NvbG9yCisgIFxmaQorICAlCisgICUgRmxvYXQgcmVmZXJlbmNlcyBhcmUgcHJpbnRlZCBjb21wbGV0ZWx5IGRpZmZlcmVudGx5OiAiRmlndXJlIDEuMiIKKyAgJSBpbnN0ZWFkIG9mICJbc29tZW5vZGVdLCBwLjMiLiAgV2UgZGlzdGluZ3Vpc2ggdGhlbSBieSB0aGUKKyAgJSBMQUJFTC10aXRsZSBiZWluZyBzZXQgdG8gYSBtYWdpYyBzdHJpbmcuCisgIHslCisgICAgJSBIYXZlIHRvIG90aGVyaWZ5IGV2ZXJ5dGhpbmcgc3BlY2lhbCB0byBhbGxvdyB0aGUgXGNzbmFtZSB0bworICAgICUgaW5jbHVkZSBhbiBfIGluIHRoZSB4cmVmIG5hbWUsIGV0Yy4KKyAgICBcaW5kZXhub2ZvbnRzCisgICAgXHR1cm5vZmZhY3RpdmUKKyAgICBcZXhwYW5kYWZ0ZXJcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlclxYdGhpc3JlZnRpdGxlCisgICAgICBcY3NuYW1lIFhSIzEtdGl0bGVcZW5kY3NuYW1lCisgIH0lCisgIFxpZmZsb2F0XFh0aGlzcmVmdGl0bGUKKyAgICAlIElmIHRoZSB1c2VyIHNwZWNpZmllZCB0aGUgcHJpbnQgbmFtZSAodGhpcmQgYXJnKSB0byB0aGUgcmVmLAorICAgICUgcHJpbnQgaXQgaW5zdGVhZCBvZiBvdXIgdXN1YWwgIkZpZ3VyZSAxLjIiLgorICAgIFxpZmRpbVx3ZDAgPSAwcHQKKyAgICAgIFxyZWZ4eyMxLXNudH17fSUKKyAgICBcZWxzZQorICAgICAgXHByaW50ZWRyZWZuYW1lCisgICAgXGZpCisgICAgJQorICAgICUgaWYgdGhlIHVzZXIgYWxzbyBnYXZlIHRoZSBwcmludGVkIG1hbnVhbCBuYW1lIChmaWZ0aCBhcmcpLCBhcHBlbmQKKyAgICAlICJpbiBNQU5VQUxOQU1FIi4KKyAgICBcaWZkaW0gXHdkMSA+IDBwdAorICAgICAgXHNwYWNlIFxwdXR3b3JkaW57fSBcY2l0ZXtccHJpbnRlZG1hbnVhbH0lCisgICAgXGZpCisgIFxlbHNlCisgICAgJSBub2RlL2FuY2hvciAobm9uLWZsb2F0KSByZWZlcmVuY2VzLgorICAgICUKKyAgICAlIElmIHdlIHVzZSBcdW5oYm94MCBhbmQgXHVuaGJveDEgdG8gcHJpbnQgdGhlIG5vZGUgbmFtZXMsIFRlWCBkb2VzIG5vdAorICAgICUgaW5zZXJ0IGVtcHR5IGRpc2NyZXRpb25hcmllcyBhZnRlciBoeXBoZW5zLCB3aGljaCBtZWFucyB0aGF0IGl0IHdpbGwKKyAgICAlIG5vdCBmaW5kIGEgbGluZSBicmVhayBhdCBhIGh5cGhlbiBpbiBhIG5vZGUgbmFtZXMuICBTaW5jZSBzb21lIG1hbnVhbHMKKyAgICAlIGFyZSBiZXN0IHdyaXR0ZW4gd2l0aCBmYWlybHkgbG9uZyBub2RlIG5hbWVzLCBjb250YWluaW5nIGh5cGhlbnMsIHRoaXMKKyAgICAlIGlzIGEgbG9zcy4gIFRoZXJlZm9yZSwgd2UgZ2l2ZSB0aGUgdGV4dCBvZiB0aGUgbm9kZSBuYW1lIGFnYWluLCBzbyBpdAorICAgICUgaXMgYXMgaWYgVGVYIGlzIHNlZWluZyBpdCBmb3IgdGhlIGZpcnN0IHRpbWUuCisgICAgXGlmZGltIFx3ZDEgPiAwcHQKKyAgICAgIFxwdXR3b3Jkc2VjdGlvbnt9IGBgXHByaW50ZWRyZWZuYW1lJycgXHB1dHdvcmRpbnt9IFxjaXRle1xwcmludGVkbWFudWFsfSUKKyAgICBcZWxzZQorICAgICAgJSBfIChmb3IgZXhhbXBsZSkgaGFzIHRvIGJlIHRoZSBjaGFyYWN0ZXIgXyBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoZQorICAgICAgJSBjb250cm9sIHNlcXVlbmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5vZGUsIGJ1dCBpdCBoYXMgdG8gZXhwYW5kCisgICAgICAlIGludG8gdGhlIHVzdWFsIFxsZWF2ZXZtb2RlLi4uXHZydWxlIHN0dWZmIGZvciBwdXJwb3NlcyBvZgorICAgICAgJSBwcmludGluZy4gU28gd2UgXHR1cm5vZmZhY3RpdmUgZm9yIHRoZSBccmVmeC1zbnQsIGJhY2sgb24gZm9yIHRoZQorICAgICAgJSBwcmludGluZywgYmFjayBvZmYgZm9yIHRoZSBccmVmeC1wZy4KKyAgICAgIHtcdHVybm9mZmFjdGl2ZQorICAgICAgICUgT25seSBvdXRwdXQgYSBmb2xsb3dpbmcgc3BhY2UgaWYgdGhlIC1zbnQgcmVmIGlzIG5vbmVtcHR5OyBmb3IKKyAgICAgICAlIEB1bm51bWJlcmVkIGFuZCBAYW5jaG9yLCBpdCB3b24ndCBiZS4KKyAgICAgICBcc2V0Ym94MiA9IFxoYm94e1xpZ25vcmVzcGFjZXMgXHJlZnh7IzEtc250fXt9fSUKKyAgICAgICBcaWZkaW0gXHdkMiA+IDBwdCBccmVmeHsjMS1zbnR9XHNwYWNlXGZpCisgICAgICB9JQorICAgICAgJSBvdXRwdXQgdGhlIGBbbXlub2RlXScgdmlhIGEgbWFjcm8gc28gaXQgY2FuIGJlIG92ZXJyaWRkZW4uCisgICAgICBceHJlZnByaW50bm9kZW5hbWVccHJpbnRlZHJlZm5hbWUKKyAgICAgICUKKyAgICAgICUgQnV0IHdlIGFsd2F5cyB3YW50IGEgY29tbWEgYW5kIGEgc3BhY2U6CisgICAgICAsXHNwYWNlCisgICAgICAlCisgICAgICAlIG91dHB1dCB0aGUgYHBhZ2UgMycuCisgICAgICBcdHVybm9mZmFjdGl2ZSBccHV0d29yZHBhZ2VcdGllXHJlZnh7IzEtcGd9e30lCisgICAgXGZpCisgIFxmaQorICBcZW5kbGluaworXGVuZGdyb3VwfQorCislIFRoaXMgbWFjcm8gaXMgY2FsbGVkIGZyb20gXHhyZWZYIGZvciB0aGUgYFtub2RlbmFtZV0nIHBhcnQgb2YgeHJlZgorJSBvdXRwdXQuICBJdCdzIGEgc2VwYXJhdGUgbWFjcm8gb25seSBzbyBpdCBjYW4gYmUgY2hhbmdlZCBtb3JlIGVhc2lseSwKKyUgc2luY2Ugc3F1YXJlIGJyYWNrZXRzIGRvbid0IHdvcmsgd2VsbCBpbiBzb21lIGRvY3VtZW50cy4gIFBhcnRpY3VsYXJseQorJSBvbmUgdGhhdCBCb2IgaXMgd29ya2luZyBvbiA6KS4KKyUKK1xkZWZceHJlZnByaW50bm9kZW5hbWUjMXtbIzFdfQorCislIFRoaW5ncyByZWZlcnJlZCB0byBieSBcc2V0cmVmLgorJQorXGRlZlxZbm90aGluZ3t9CitcZGVmXFlvbWl0ZnJvbXRvY3t9CitcZGVmXFludW1iZXJlZHslCisgIFxpZm51bVxzZWNubz0wCisgICAgXHB1dHdvcmRDaGFwdGVyQHRpZSBcdGhlXGNoYXBubworICBcZWxzZSBcaWZudW1cc3Vic2Vjbm89MAorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUgXHRoZVxjaGFwbm8uXHRoZVxzZWNubworICBcZWxzZSBcaWZudW1cc3Vic3Vic2Vjbm89MAorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUgXHRoZVxjaGFwbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vCisgIFxlbHNlCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBcdGhlXGNoYXBuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNubworICBcZmlcZmlcZmkKK30KK1xkZWZcWWFwcGVuZGl4eyUKKyAgXGlmbnVtXHNlY25vPTAKKyAgICAgXHB1dHdvcmRBcHBlbmRpeEB0aWUgQGNoYXJcdGhlXGFwcGVuZGl4bm97fSUKKyAgXGVsc2UgXGlmbnVtXHN1YnNlY25vPTAKKyAgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBAY2hhclx0aGVcYXBwZW5kaXhuby5cdGhlXHNlY25vCisgIFxlbHNlIFxpZm51bVxzdWJzdWJzZWNubz0wCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBAY2hhclx0aGVcYXBwZW5kaXhuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8KKyAgXGVsc2UKKyAgICBccHV0d29yZFNlY3Rpb25AdGllCisgICAgICBAY2hhclx0aGVcYXBwZW5kaXhuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNubworICBcZmlcZmlcZmkKK30KKworJSBEZWZpbmUgXHJlZnh7TkFNRX17U1VGRklYfSB0byByZWZlcmVuY2UgYSBjcm9zcy1yZWZlcmVuY2Ugc3RyaW5nIG5hbWVkIE5BTUUuCislIElmIGl0cyB2YWx1ZSBpcyBub25lbXB0eSwgU1VGRklYIGlzIG91dHB1dCBhZnRlcndhcmQuCislCitcZGVmXHJlZngjMSMyeyUKKyAgeyUKKyAgICBcaW5kZXhub2ZvbnRzCisgICAgXG90aGVyYmFja3NsYXNoCisgICAgXGV4cGFuZGFmdGVyXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXJcdGhpc3JlZlgKKyAgICAgIFxjc25hbWUgWFIjMVxlbmRjc25hbWUKKyAgfSUKKyAgXGlmeFx0aGlzcmVmWFxyZWxheAorICAgICUgSWYgbm90IGRlZmluZWQsIHNheSBzb21ldGhpbmcgYXQgbGVhc3QuCisgICAgXGFuZ2xlbGVmdCB1blwtZGVcLWZpbmVkXGFuZ2xlcmlnaHQKKyAgICBcaWZsaW5rcworICAgICAgXGlmaGF2ZXhyZWZzCisgICAgICAgIFxtZXNzYWdle1xsaW5lbnVtYmVyIFVuZGVmaW5lZCBjcm9zcyByZWZlcmVuY2UgYCMxJy59JQorICAgICAgXGVsc2UKKyAgICAgICAgXGlmd2FybmVkeHJlZnNcZWxzZQorICAgICAgICAgIFxnbG9iYWxcd2FybmVkeHJlZnN0cnVlCisgICAgICAgICAgXG1lc3NhZ2V7Q3Jvc3MgcmVmZXJlbmNlIHZhbHVlcyB1bmtub3duOyB5b3UgbXVzdCBydW4gVGVYIGFnYWluLn0lCisgICAgICAgIFxmaQorICAgICAgXGZpCisgICAgXGZpCisgIFxlbHNlCisgICAgJSBJdCdzIGRlZmluZWQsIHNvIGp1c3QgdXNlIGl0LgorICAgIFx0aGlzcmVmWAorICBcZmkKKyAgIzIlIE91dHB1dCB0aGUgc3VmZml4IGluIGFueSBjYXNlLgorfQorCislIFRoaXMgaXMgdGhlIG1hY3JvIGludm9rZWQgYnkgZW50cmllcyBpbiB0aGUgYXV4IGZpbGUuICBVc3VhbGx5IGl0J3MKKyUganVzdCBhIFxkZWYgKHdlIHByZXBlbmQgWFIgdG8gdGhlIGNvbnRyb2wgc2VxdWVuY2UgbmFtZSB0byBhdm9pZAorJSBjb2xsaXNpb25zKS4gIEJ1dCBpZiB0aGlzIGlzIGEgZmxvYXQgdHlwZSwgd2UgaGF2ZSBtb3JlIHdvcmsgdG8gZG8uCislCitcZGVmXHhyZGVmIzEjMnslCisgIFxleHBhbmRhZnRlclxnZGVmXGNzbmFtZSBYUiMxXGVuZGNzbmFtZXsjMn0lIHJlbWVtYmVyIHRoaXMgeHJlZiB2YWx1ZS4KKyAgJQorICAlIFdhcyB0aGF0IHhyZWYgY29udHJvbCBzZXF1ZW5jZSB0aGF0IHdlIGp1c3QgZGVmaW5lZCBmb3IgYSBmbG9hdD8KKyAgXGV4cGFuZGFmdGVyXGlmZmxvYXRcY3NuYW1lIFhSIzFcZW5kY3NuYW1lCisgICAgJSBpdCB3YXMgYSBmbG9hdCwgYW5kIHdlIGhhdmUgdGhlIChzYWZlKSBmbG9hdCB0eXBlIGluIFxpZmZsb2F0dHlwZS4KKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXGZsb2F0bGlzdAorICAgICAgXGNzbmFtZSBmbG9hdGxpc3RcaWZmbG9hdHR5cGVcZW5kY3NuYW1lCisgICAgJQorICAgICUgSXMgdGhpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIHRoaXMgZmxvYXQgdHlwZT8KKyAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGZsb2F0bGlzdFxyZWxheAorICAgICAgXHRva3MwID0ge1xkb30lIHllcywgc28ganVzdCBcZG8KKyAgICBcZWxzZQorICAgICAgJSBoYWQgaXQgYmVmb3JlLCBzbyBwcmVzZXJ2ZSBwcmV2aW91cyBlbGVtZW50cyBpbiBsaXN0LgorICAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1xmbG9hdGxpc3RcZG99JQorICAgIFxmaQorICAgICUKKyAgICAlIFJlbWVtYmVyIHRoaXMgeHJlZiBpbiB0aGUgY29udHJvbCBzZXF1ZW5jZSBcZmxvYXRsaXN0RkxPQVRUWVBFLAorICAgICUgZm9yIGxhdGVyIHVzZSBpbiBcbGlzdG9mZmxvYXRzLgorICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSBmbG9hdGxpc3RcaWZmbG9hdHR5cGVcZW5kY3NuYW1le1x0aGVcdG9rczB7IzF9fSUKKyAgXGZpCit9CisKKyUgUmVhZCB0aGUgbGFzdCBleGlzdGluZyBhdXggZmlsZSwgaWYgYW55LiAgTm8gZXJyb3IgaWYgbm9uZSBleGlzdHMuCislCitcZGVmXHRyeWF1eGZpbGV7JQorICBcb3BlbmluIDEgXGpvYm5hbWUuYXV4CisgIFxpZmVvZiAxIFxlbHNlCisgICAgXHJlYWRkYXRhZmlsZXthdXh9JQorICAgIFxnbG9iYWxcaGF2ZXhyZWZzdHJ1ZQorICBcZmkKKyAgXGNsb3NlaW4gMQorfQorCitcZGVmXHNldHVwZGF0YWZpbGV7JQorICBcY2F0Y29kZWBcXl5APVxvdGhlcgorICBcY2F0Y29kZWBcXl5BPVxvdGhlcgorICBcY2F0Y29kZWBcXl5CPVxvdGhlcgorICBcY2F0Y29kZWBcXl5DPVxvdGhlcgorICBcY2F0Y29kZWBcXl5EPVxvdGhlcgorICBcY2F0Y29kZWBcXl5FPVxvdGhlcgorICBcY2F0Y29kZWBcXl5GPVxvdGhlcgorICBcY2F0Y29kZWBcXl5HPVxvdGhlcgorICBcY2F0Y29kZWBcXl5IPVxvdGhlcgorICBcY2F0Y29kZWBcXl5LPVxvdGhlcgorICBcY2F0Y29kZWBcXl5MPVxvdGhlcgorICBcY2F0Y29kZWBcXl5OPVxvdGhlcgorICBcY2F0Y29kZWBcXl5QPVxvdGhlcgorICBcY2F0Y29kZWBcXl5RPVxvdGhlcgorICBcY2F0Y29kZWBcXl5SPVxvdGhlcgorICBcY2F0Y29kZWBcXl5TPVxvdGhlcgorICBcY2F0Y29kZWBcXl5UPVxvdGhlcgorICBcY2F0Y29kZWBcXl5VPVxvdGhlcgorICBcY2F0Y29kZWBcXl5WPVxvdGhlcgorICBcY2F0Y29kZWBcXl5XPVxvdGhlcgorICBcY2F0Y29kZWBcXl5YPVxvdGhlcgorICBcY2F0Y29kZWBcXl5aPVxvdGhlcgorICBcY2F0Y29kZWBcXl5bPVxvdGhlcgorICBcY2F0Y29kZWBcXl5cPVxvdGhlcgorICBcY2F0Y29kZWBcXl5dPVxvdGhlcgorICBcY2F0Y29kZWBcXl5ePVxvdGhlcgorICBcY2F0Y29kZWBcXl5fPVxvdGhlcgorICAlIEl0IHdhcyBzdWdnZXN0ZWQgdG8gc2V0IHRoZSBjYXRjb2RlIG9mIF4gdG8gNywgd2hpY2ggd291bGQgYWxsb3cgXl5lNCBldGMuCisgICUgaW4geHJlZiB0YWdzLCBpLmUuLCBub2RlIG5hbWVzLiAgQnV0IHNpbmNlIF5eZTQgbm90YXRpb24gaXNuJ3QKKyAgJSBzdXBwb3J0ZWQgaW4gdGhlIG1haW4gdGV4dCwgaXQgZG9lc24ndCBzZWVtIGRlc2lyYWJsZS4gIEZ1cnRoZXJtb3JlLAorICAlIHRoYXQgaXMgbm90IGVub3VnaDogZm9yIG5vZGUgbmFtZXMgdGhhdCBhY3R1YWxseSBjb250YWluIGEgXgorICAlIGNoYXJhY3Rlciwgd2Ugd291bGQgZW5kIHVwIHdyaXRpbmcgYSBsaW5lIGxpa2UgdGhpczogJ3hyZGVmIHsnaGF0CisgICUgYi10aXRsZX17J2hhdCBifSBhbmQgXHhyZGVmIGRvZXMgYSBcY3NuYW1lLi4uXGVuZGNzbmFtZSBvbiB0aGUgZmlyc3QKKyAgJSBhcmd1bWVudCwgYW5kIFxoYXQgaXMgbm90IGFuIGV4cGFuZGFibGUgY29udHJvbCBzZXF1ZW5jZS4gIEl0IGNvdWxkCisgICUgYWxsIGJlIHdvcmtlZCBvdXQsIGJ1dCB3aHk/ICBFaXRoZXIgd2Ugc3VwcG9ydCBeXiBvciB3ZSBkb24ndC4KKyAgJQorICAlIFRoZSBvdGhlciBjaGFuZ2UgbmVjZXNzYXJ5IGZvciB0aGlzIHdhcyB0byBkZWZpbmUgXGF1eGhhdDoKKyAgJSBcZGVmXGF1eGhhdHtcZGVmXnsnaGF0IH19JSBleHRyYSBzcGFjZSBzbyBvayBpZiBmb2xsb3dlZCBieSBsZXR0ZXIKKyAgJSBhbmQgdGhlbiB0byBjYWxsIFxhdXhoYXQgaW4gXHNldHEuCisgICUKKyAgXGNhdGNvZGVgXF49XG90aGVyCisgICUKKyAgJSBTcGVjaWFsIGNoYXJhY3RlcnMuICBTaG91bGQgYmUgdHVybmVkIG9mZiBhbnl3YXksIGJ1dC4uLgorICBcY2F0Y29kZWBcfj1cb3RoZXIKKyAgXGNhdGNvZGVgXFs9XG90aGVyCisgIFxjYXRjb2RlYFxdPVxvdGhlcgorICBcY2F0Y29kZWBcIj1cb3RoZXIKKyAgXGNhdGNvZGVgXF89XG90aGVyCisgIFxjYXRjb2RlYFx8PVxvdGhlcgorICBcY2F0Y29kZWBcPD1cb3RoZXIKKyAgXGNhdGNvZGVgXD49XG90aGVyCisgIFxjYXRjb2RlYFwkPVxvdGhlcgorICBcY2F0Y29kZWBcIz1cb3RoZXIKKyAgXGNhdGNvZGVgXCY9XG90aGVyCisgIFxjYXRjb2RlYFwlPVxvdGhlcgorICBcY2F0Y29kZWArPVxvdGhlciAlIGF2b2lkIFwrIGZvciBwYXJhbm9pYSBldmVuIHRob3VnaCB3ZSd2ZSB0dXJuZWQgaXQgb2ZmCisgICUKKyAgJSBUaGlzIGlzIHRvIHN1cHBvcnQgXCBpbiBub2RlIG5hbWVzIGFuZCB0aXRsZXMsIHNpbmNlIHRoZSBcCisgICUgY2hhcmFjdGVycyBlbmQgdXAgaW4gYSBcY3NuYW1lLiAgSXQncyBlYXNpZXIgdGhhbgorICAlIGxlYXZpbmcgaXQgYWN0aXZlIGFuZCBtYWtpbmcgaXRzIGFjdGl2ZSBkZWZpbml0aW9uIGFuIGFjdHVhbCBcCisgICUgY2hhcmFjdGVyLiAgV2hhdCBJIGRvbid0IHVuZGVyc3RhbmQgaXMgd2h5IGl0IHdvcmtzIGluIHRoZSAqdmFsdWUqCisgICUgb2YgdGhlIHhyZGVmLiAgU2VlbXMgbGlrZSBpdCBzaG91bGQgYmUgYSBjYXRjb2RlMTIgXCwgYW5kIHRoYXQKKyAgJSBzaG91bGQgbm90IHR5cGVzZXQgcHJvcGVybHkuICBCdXQgaXQgd29ya3MsIHNvIEknbSBtb3Zpbmcgb24gZm9yCisgICUgbm93LiAgLS1rYXJsLCAxNWphbjA0LgorICBcY2F0Y29kZWBcXD1cb3RoZXIKKyAgJQorICAlIE1ha2UgdGhlIGNoYXJhY3RlcnMgMTI4LTI1NSBiZSBwcmludGluZyBjaGFyYWN0ZXJzLgorICB7JQorICAgIFxjb3VudDE9MTI4CisgICAgXGRlZlxsb29weyUKKyAgICAgIFxjYXRjb2RlXGNvdW50MT1cb3RoZXIKKyAgICAgIFxhZHZhbmNlXGNvdW50MSBieSAxCisgICAgICBcaWZudW0gXGNvdW50MTwyNTYgXGxvb3AgXGZpCisgICAgfSUKKyAgfSUKKyAgJQorICAlIEAgaXMgb3VyIGVzY2FwZSBjaGFyYWN0ZXIgaW4gLmF1eCBmaWxlcywgYW5kIHdlIG5lZWQgYnJhY2VzLgorICBcY2F0Y29kZWBcez0xCisgIFxjYXRjb2RlYFx9PTIKKyAgXGNhdGNvZGVgXEA9MAorfQorCitcZGVmXHJlYWRkYXRhZmlsZSMxeyUKK1xiZWdpbmdyb3VwCisgIFxzZXR1cGRhdGFmaWxlCisgIFxpbnB1dFxqb2JuYW1lLiMxCitcZW5kZ3JvdXB9CisKK1xtZXNzYWdle2luc2VydGlvbnMsfQorJSBpbmNsdWRpbmcgZm9vdG5vdGVzLgorCitcbmV3Y291bnQgXGZvb3Rub3Rlbm8KKworJSBUaGUgdHJhaWxpbmcgc3BhY2UgaW4gdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIGZvciBzdXBlcmVqZWN0IGlzCislIHZpdGFsIGZvciBwcm9wZXIgZmlsbGluZzsgcGFnZXMgY29tZSBvdXQgdW5hbGlnbmVkIHdoZW4geW91IGRvIGEKKyUgcGFnZWFsaWdubWFjcm8gY2FsbCBpZiB0aGF0IHNwYWNlIGJlZm9yZSB0aGUgY2xvc2luZyBicmFjZSBpcworJSByZW1vdmVkLiAoR2VuZXJhbGx5LCBudW1lcmljIGNvbnN0YW50cyBzaG91bGQgYWx3YXlzIGJlIGZvbGxvd2VkIGJ5IGEKKyUgc3BhY2UgdG8gcHJldmVudCBzdHJhbmdlIGV4cGFuc2lvbiBlcnJvcnMuKQorXGRlZlxzdXBlcmVqZWN0e1xwYXJccGVuYWx0eSAtMjAwMDBcZm9vdG5vdGVubyA9MCB9CisKKyUgQGZvb3Rub3Rlc3R5bGUgaXMgbWVhbmluZ2Z1bCBmb3IgaW5mbyBvdXRwdXQgb25seS4KK1xsZXRcZm9vdG5vdGVzdHlsZT1cY29tbWVudAorCit7XGNhdGNvZGUgYFxAPTExCislCislIEF1dG8tbnVtYmVyIGZvb3Rub3Rlcy4gIE90aGVyd2lzZSBsaWtlIHBsYWluLgorXGdkZWZcZm9vdG5vdGV7JQorICBcbGV0XGluZGVudD1ccHRleGluZGVudAorICBcbGV0XG5vaW5kZW50PVxwdGV4bm9pbmRlbnQKKyAgXGdsb2JhbFxhZHZhbmNlXGZvb3Rub3Rlbm8gYnkgXEBuZQorICBcZWRlZlx0aGlzZm9vdG5veyRee1x0aGVcZm9vdG5vdGVub30kfSUKKyAgJQorICAlIEluIGNhc2UgdGhlIGZvb3Rub3RlIGNvbWVzIGF0IHRoZSBlbmQgb2YgYSBzZW50ZW5jZSwgcHJlc2VydmUgdGhlCisgICUgZXh0cmEgc3BhY2luZyBhZnRlciB3ZSBkbyB0aGUgZm9vdG5vdGUgbnVtYmVyLgorICBcbGV0XEBzZlxlbXB0eQorICBcaWZobW9kZVxlZGVmXEBzZntcc3BhY2VmYWN0b3JcdGhlXHNwYWNlZmFjdG9yfVxwdGV4c2xhc2hcZmkKKyAgJQorICAlIFJlbW92ZSBpbmFkdmVydGVudCBibGFuayBzcGFjZSBiZWZvcmUgdHlwZXNldHRpbmcgdGhlIGZvb3Rub3RlIG51bWJlci4KKyAgXHVuc2tpcAorICBcdGhpc2Zvb3Rub1xAc2YKKyAgXGRvZm9vdG5vdGUKK30lCisKKyUgRG9uJ3QgYm90aGVyIHdpdGggdGhlIHRyaWNrZXJ5IGluIHBsYWluLnRleCB0byBub3QgcmVxdWlyZSB0aGUKKyUgZm9vdG5vdGUgdGV4dCBhcyBhIHBhcmFtZXRlci4gIE91ciBmb290bm90ZXMgZG9uJ3QgbmVlZCB0byBiZSBzbyBnZW5lcmFsLgorJQorJSBPaCB5ZXMsIHRoZXkgZG87IG90aGVyd2lzZSwgQGlmc2V0IChhbmQgYW55dGhpbmcgZWxzZSB0aGF0IHVzZXMKKyUgXHBhcnNlYXJnbGluZSkgZmFpbHMgaW5zaWRlIGZvb3Rub3RlcyBiZWNhdXNlIHRoZSB0b2tlbnMgYXJlIGZpeGVkIHdoZW4KKyUgdGhlIGZvb3Rub3RlIGlzIHJlYWQuICAtLWthcmwsIDE2bm92OTYuCislCitcZ2RlZlxkb2Zvb3Rub3RleyUKKyAgXGluc2VydFxmb290aW5zXGJncm91cAorICAlIFdlIHdhbnQgdG8gdHlwZXNldCB0aGlzIHRleHQgYXMgYSBub3JtYWwgcGFyYWdyYXBoLCBldmVuIGlmIHRoZQorICAlIGZvb3Rub3RlIHJlZmVyZW5jZSBvY2N1cnMgaW4gKGZvciBleGFtcGxlKSBhIGRpc3BsYXkgZW52aXJvbm1lbnQuCisgICUgU28gcmVzZXQgc29tZSBwYXJhbWV0ZXJzLgorICBcaHNpemU9XHBhZ2V3aWR0aAorICBcaW50ZXJsaW5lcGVuYWx0eVxpbnRlcmZvb3Rub3RlbGluZXBlbmFsdHkKKyAgXHNwbGl0dG9wc2tpcFxodFxzdHJ1dGJveCAlIHRvcCBiYXNlbGluZSBmb3IgYnJva2VuIGZvb3Rub3RlcworICBcc3BsaXRtYXhkZXB0aFxkcFxzdHJ1dGJveAorICBcZmxvYXRpbmdwZW5hbHR5XEBNTQorICBcbGVmdHNraXBcekBza2lwCisgIFxyaWdodHNraXBcekBza2lwCisgIFxzcGFjZXNraXBcekBza2lwCisgIFx4c3BhY2Vza2lwXHpAc2tpcAorICBccGFyaW5kZW50XGRlZmF1bHRwYXJpbmRlbnQKKyAgJQorICBcc21hbGxmb250cyBccm0KKyAgJQorICAlIEJlY2F1c2Ugd2UgdXNlIGhhbmdpbmcgaW5kZW50YXRpb24gaW4gZm9vdG5vdGVzLCBhIEBub2luZGVudCBhcHBlYXJzCisgICUgdG8gZXhkZW50IHRoaXMgdGV4dCwgc28gbWFrZSBpdCBiZSBhIG5vLW9wLiAgbWFrZWluZm8gZG9lcyBub3QgdXNlCisgICUgaGFuZ2luZyBpbmRlbnRhdGlvbiBzbyBAbm9pbmRlbnQgY2FuIHN0aWxsIGJlIG5lZWRlZCB3aXRoaW4gZm9vdG5vdGUKKyAgJSB0ZXh0IGFmdGVyIGFuIEBleGFtcGxlIG9yIHRoZSBsaWtlIChub3QgdGhhdCB0aGlzIGlzIGdvb2Qgc3R5bGUpLgorICBcbGV0XG5vaW5kZW50ID0gXHJlbGF4CisgICUKKyAgJSBIYW5nIHRoZSBmb290bm90ZSB0ZXh0IG9mZiB0aGUgbnVtYmVyLiAgVXNlIFxldmVyeXBhciBpbiBjYXNlIHRoZQorICAlIGZvb3Rub3RlIGV4dGVuZHMgZm9yIG1vcmUgdGhhbiBvbmUgcGFyYWdyYXBoLgorICBcZXZlcnlwYXIgPSB7XGhhbmd9JQorICBcdGV4dGluZGVudHtcdGhpc2Zvb3Rub30lCisgICUKKyAgJSBEb24ndCBjcmFzaCBpbnRvIHRoZSBsaW5lIGFib3ZlIHRoZSBmb290bm90ZSB0ZXh0LiAgU2luY2UgdGhpcworICAlIGV4cGFuZHMgaW50byBhIGJveCwgaXQgbXVzdCBjb21lIHdpdGhpbiB0aGUgcGFyYWdyYXBoLCBsZXN0IGl0CisgICUgcHJvdmlkZSBhIHBsYWNlIHdoZXJlIFRlWCBjYW4gc3BsaXQgdGhlIGZvb3Rub3RlLgorICBcZm9vdHN0cnV0CisgIFxmdXR1cmVsZXRcbmV4dFxmb0B0Cit9Cit9JWVuZCBcY2F0Y29kZSBgXEA9MTEKKworJSBJbiBjYXNlIGEgQGZvb3Rub3RlIGFwcGVhcnMgaW4gYSB2Ym94LCBzYXZlIHRoZSBmb290bm90ZSB0ZXh0IGFuZCBjcmVhdGUKKyUgdGhlIHJlYWwgXGluc2VydCBqdXN0IGFmdGVyIHRoZSB2Ym94IGZpbmlzaGVkLiAgT3RoZXJ3aXNlLCB0aGUgaW5zZXJ0aW9uCislIHdvdWxkIGJlIGxvc3QuCislIFNpbWlsYXJpbHksIGlmIGEgQGZvb3Rub3RlIGFwcGVhcnMgaW5zaWRlIGFuIGFsaWdubWVudCwgc2F2ZSB0aGUgZm9vdG5vdGUKKyUgdGV4dCB0byBhIGJveCBhbmQgbWFrZSB0aGUgXGluc2VydCB3aGVuIGEgcm93IG9mIHRoZSB0YWJsZSBpcyBmaW5pc2hlZC4KKyUgQW5kIHRoZSBzYW1lIGNhbiBiZSBkb25lIGZvciBvdGhlciBpbnNlcnQgY2xhc3Nlcy4gIC0ta2FzYWwsIDE2bm92MDMuCisKKyUgUmVwbGFjZSB0aGUgXGluc2VydCBwcmltaXRpdmUgYnkgYSBjaGVhdGluZyBtYWNyby4KKyUgRGVlcGVyIGluc2lkZSwganVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgc2F2ZWQgaW5zZXJ0aW9ucyBhcmUgbm90IHNwaWxsZWQKKyUgb3V0IHByZW1hdHVyZWx5LgorJQorXGRlZlxzdGFydHNhdmluZ2luc2VydHN7JQorICBcaWZ4IFxpbnNlcnRccHRleGluc2VydAorICAgIFxsZXRcaW5zZXJ0XHNhdmVpbnNlcnQKKyAgXGVsc2UKKyAgICBcbGV0XGNoZWNraW5zZXJ0c1xyZWxheAorICBcZmkKK30KKworJSBUaGlzIFxpbnNlcnQgcmVwbGFjZW1lbnQgd29ya3MgZm9yIGJvdGggXGluc2VydFxmb290aW5ze2Zvb30gYW5kCislIFxpbnNlcnRcZm9vdGluc1xiZ3JvdXAgZm9vXGVncm91cCwgYnV0IGl0IGRvZXNuJ3Qgd29yayBmb3IgXGluc2VydDI3e2Zvb30uCislCitcZGVmXHNhdmVpbnNlcnQjMXslCisgIFxlZGVmXG5leHR7XG5vZXhwYW5kXHNhdmV0b2JveCBcbWFrZVNBVkVuYW1lIzF9JQorICBcYWZ0ZXJhc3NpZ25tZW50XG5leHQKKyAgJSBzd2FsbG93IHRoZSBsZWZ0IGJyYWNlCisgIFxsZXRcdGVtcCA9Cit9CitcZGVmXG1ha2VTQVZFbmFtZSMxe1xtYWtlY3NuYW1le1NBVkVcZXhwYW5kYWZ0ZXJcZ29iYmxlXHN0cmluZyMxfX0KK1xkZWZcc2F2ZXRvYm94IzF7XGdsb2JhbFxzZXRib3gjMSA9IFx2Ym94XGJncm91cCBcdW52Ym94IzF9CisKK1xkZWZcY2hlY2tzYXZlaW5zIzF7XGlmdm9pZCMxXGVsc2UgXHBsYWNlc2F2ZWlucyMxXGZpfQorCitcZGVmXHBsYWNlc2F2ZWlucyMxeyUKKyAgXHB0ZXhpbnNlcnQgXGNzbmFtZVxleHBhbmRhZnRlclxnb2JibGVzYXZlXHN0cmluZyMxXGVuZGNzbmFtZQorICAgIHtcYm94IzF9JQorfQorCislIGVhdCBAU0FWRSAtLSBiZXdhcmUsIGFsbCBvZiB0aGVtIGhhdmUgY2F0Y29kZSBcb3RoZXI6Cit7CisgIFxkZWZcZG9zcGVjaWFsc3tcZG8gU1xkbyBBXGRvIFZcZG8gRX0gXHVuY2F0Y29kZXNwZWNpYWxzICAlICA7LSkKKyAgXGdkZWZcZ29iYmxlc2F2ZSBAU0FWRXt9Cit9CisKKyUgaW5pdGlhbGl6YXRpb246CitcZGVmXG5ld3NhdmVpbnMgIzF7JQorICBcZWRlZlxuZXh0e1xub2V4cGFuZFxuZXdzYXZlaW5zWCBcbWFrZVNBVkVuYW1lIzF9JQorICBcbmV4dAorfQorXGRlZlxuZXdzYXZlaW5zWCAjMXslCisgIFxjc25hbWUgbmV3Ym94XGVuZGNzbmFtZSAjMSUKKyAgXGV4cGFuZGFmdGVyXGRlZlxleHBhbmRhZnRlclxjaGVja2luc2VydHNcZXhwYW5kYWZ0ZXJ7XGNoZWNraW5zZXJ0cworICAgIFxjaGVja3NhdmVpbnMgIzF9JQorfQorCislIGluaXRpYWxpemU6CitcbGV0XGNoZWNraW5zZXJ0c1xlbXB0eQorXG5ld3NhdmVpbnNcZm9vdGlucworXG5ld3NhdmVpbnNcbWFyZ2luCisKKworJSBAaW1hZ2UuICBXZSB1c2UgdGhlIG1hY3JvcyBmcm9tIGVwc2YudGV4IHRvIHN1cHBvcnQgdGhpcy4KKyUgSWYgZXBzZi50ZXggaXMgbm90IGluc3RhbGxlZCBhbmQgQGltYWdlIGlzIHVzZWQsIHdlIGNvbXBsYWluLgorJQorJSBDaGVjayBmb3IgYW5kIHJlYWQgZXBzZi50ZXggdXAgZnJvbnQuICBJZiB3ZSByZWFkIGl0IG9ubHkgYXQgQGltYWdlCislIHRpbWUsIHdlIG1pZ2h0IGJlIGluc2lkZSBhIGdyb3VwLCBhbmQgdGhlbiBpdHMgZGVmaW5pdGlvbnMgd291bGQgZ2V0CislIHVuZG9uZSBhbmQgdGhlIG5leHQgaW1hZ2Ugd291bGQgZmFpbC4KK1xvcGVuaW4gMSA9IGVwc2YudGV4CitcaWZlb2YgMSBcZWxzZQorICAlIERvIG5vdCBib3RoZXIgc2hvd2luZyBiYW5uZXIgd2l0aCBlcHNmLnRleCB2Mi43ayAoYXZhaWxhYmxlIGluCisgICUgZG9jL2Vwc2YudGV4IGFuZCBvbiBjdGFuKS4KKyAgXGRlZlxlcHNmYW5ub3VuY2V7XHRva3MwID0gfSUKKyAgXGlucHV0IGVwc2YudGV4CitcZmkKK1xjbG9zZWluIDEKKyUKKyUgV2Ugd2lsbCBvbmx5IGNvbXBsYWluIG9uY2UgYWJvdXQgbGFjayBvZiBlcHNmLnRleC4KK1xuZXdpZlxpZndhcm5lZG5vZXBzZgorXG5ld2hlbHBcbm9lcHNmaGVscHtlcHNmLnRleCBtdXN0IGJlIGluc3RhbGxlZCBmb3IgaW1hZ2VzIHRvCisgIHdvcmsuICBJdCBpcyBhbHNvIGluY2x1ZGVkIGluIHRoZSBUZXhpbmZvIGRpc3RyaWJ1dGlvbiwgb3IgeW91IGNhbiBnZXQKKyAgaXQgZnJvbSBmdHA6Ly90dWcub3JnL3RleC9lcHNmLnRleC59CislCitcZGVmXGltYWdlIzF7JQorICBcaWZ4XGVwc2Zib3hcdW5kZWZpbmVkCisgICAgXGlmd2FybmVkbm9lcHNmIFxlbHNlCisgICAgICBcZXJyaGVscCA9IFxub2Vwc2ZoZWxwCisgICAgICBcZXJybWVzc2FnZXtlcHNmLnRleCBub3QgZm91bmQsIGltYWdlcyB3aWxsIGJlIGlnbm9yZWR9JQorICAgICAgXGdsb2JhbFx3YXJuZWRub2Vwc2Z0cnVlCisgICAgXGZpCisgIFxlbHNlCisgICAgXGltYWdleHh4ICMxLCwsLCxcZmluaXNoCisgIFxmaQorfQorJQorJSBBcmd1bWVudHMgdG8gQGltYWdlOgorJSAjMSBpcyAobWFuZGF0b3J5KSBpbWFnZSBmaWxlbmFtZTsgd2UgdGFjayBvbiAuZXBzIGV4dGVuc2lvbi4KKyUgIzIgaXMgKG9wdGlvbmFsKSB3aWR0aCwgIzMgaXMgKG9wdGlvbmFsKSBoZWlnaHQuCislICM0IGlzIChpZ25vcmVkIG9wdGlvbmFsKSBodG1sIGFsdCB0ZXh0LgorJSAjNSBpcyAoaWdub3JlZCBvcHRpb25hbCkgZXh0ZW5zaW9uLgorJSAjNiBpcyBqdXN0IHRoZSB1c3VhbCBleHRyYSBpZ25vcmVkIGFyZyBmb3IgcGFyc2luZyB0aGlzIHN0dWZmLgorXG5ld2lmXGlmaW1hZ2V2bW9kZQorXGRlZlxpbWFnZXh4eCMxLCMyLCMzLCM0LCM1LCM2XGZpbmlzaHtcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcXl5NID0gNSAgICAgJSBpbiBjYXNlIHdlJ3JlIGluc2lkZSBhbiBleGFtcGxlCisgIFxub3JtYWx0dXJub2ZmYWN0aXZlICAlIGFsbG93IF8gZXQgYWwuIGluIG5hbWVzCisgICUgSWYgdGhlIGltYWdlIGlzIGJ5IGl0c2VsZiwgY2VudGVyIGl0LgorICBcaWZ2bW9kZQorICAgIFxpbWFnZXZtb2RldHJ1ZQorICAgIFxub2JyZWFrXGJpZ3NraXAKKyAgICAlIFVzdWFsbHkgd2UnbGwgaGF2ZSB0ZXh0IGFmdGVyIHRoZSBpbWFnZSB3aGljaCB3aWxsIGluc2VydAorICAgICUgXHBhcnNraXAgZ2x1ZSwgc28gaW5zZXJ0IGl0IGhlcmUgdG9vIHRvIGVxdWFsaXplIHRoZSBzcGFjZQorICAgICUgYWJvdmUgYW5kIGJlbG93LgorICAgIFxub2JyZWFrXHZza2lwXHBhcnNraXAKKyAgICBcbm9icmVhaworICAgIFxsaW5lXGJncm91cAorICBcZmkKKyAgJQorICAlIE91dHB1dCB0aGUgaW1hZ2UuCisgIFxpZnBkZgorICAgIFxkb3BkZmltYWdleyMxfXsjMn17IzN9JQorICBcZWxzZQorICAgICUgXGVwc2Zib3ggaXRzZWxmIHJlc2V0cyBcZXBzZj9zaXplIGF0IGVhY2ggZmlndXJlLgorICAgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn1caWZkaW1cd2QwID4gMHB0IFxlcHNmeHNpemU9IzJccmVsYXggXGZpCisgICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMzfVxpZmRpbVx3ZDAgPiAwcHQgXGVwc2Z5c2l6ZT0jM1xyZWxheCBcZmkKKyAgICBcZXBzZmJveHsjMS5lcHN9JQorICBcZmkKKyAgJQorICBcaWZpbWFnZXZtb2RlIFxlZ3JvdXAgXGJpZ2JyZWFrIFxmaSAgJSBzcGFjZSBhZnRlciB0aGUgaW1hZ2UKK1xlbmRncm91cH0KKworCislIEBmbG9hdCBGTE9BVFRZUEUsTEFCRUwsTE9DIC4uLiBAZW5kIGZsb2F0IGZvciBkaXNwbGF5ZWQgZmlndXJlcywgdGFibGVzLAorJSBldGMuICBXZSBkb24ndCBhY3R1YWxseSBpbXBsZW1lbnQgZmxvYXRpbmcgeWV0LCB3ZSBhbHdheXMgaW5jbHVkZSB0aGUKKyUgZmxvYXQgImhlcmUiLiAgQnV0IGl0IHNlZW1lZCB0aGUgYmVzdCBuYW1lIGZvciB0aGUgZnV0dXJlLgorJQorXGVudnBhcnNlYXJnZGVmXGZsb2F0e1xlYXRjb21tYXNwYWNlXGVhdGNvbW1hc3BhY2VcZG9mbG9hdCMxLCAsICxcZmluaXNofQorCislIFRoZXJlIG1heSBiZSBhIHNwYWNlIGJlZm9yZSBzZWNvbmQgYW5kL29yIHRoaXJkIHBhcmFtZXRlcjsgZGVsZXRlIGl0LgorXGRlZlxlYXRjb21tYXNwYWNlIzEsIHsjMSx9CisKKyUgIzEgaXMgdGhlIG9wdGlvbmFsIEZMT0FUVFlQRSwgdGhlIHRleHQgbGFiZWwgZm9yIHRoaXMgZmxvYXQsIHR5cGljYWxseQorJSAiRmlndXJlIiwgIlRhYmxlIiwgIkV4YW1wbGUiLCBldGMuICBDYW4ndCBjb250YWluIGNvbW1hcy4gIElmIG9taXR0ZWQsCislIHRoaXMgZmxvYXQgd2lsbCBub3QgYmUgbnVtYmVyZWQgYW5kIGNhbm5vdCBiZSByZWZlcnJlZCB0by4KKyUKKyUgIzIgaXMgdGhlIG9wdGlvbmFsIHhyZWYgbGFiZWwuICBBbHNvIG11c3QgYmUgcHJlc2VudCBmb3IgdGhlIGZsb2F0IHRvCislIGJlIHJlZmVyYWJsZS4KKyUKKyUgIzMgaXMgdGhlIG9wdGlvbmFsIHBvc2l0aW9uaW5nIGFyZ3VtZW50OyBmb3Igbm93LCBpdCBpcyBpZ25vcmVkLiAgSXQKKyUgd2lsbCBzb21laG93IHNwZWNpZnkgdGhlIHBvc2l0aW9ucyBhbGxvd2VkIHRvIGZsb2F0IHRvIChoZXJlLCB0b3AsIGJvdHRvbSkuCislCislIFdlIGtlZXAgYSBzZXBhcmF0ZSBjb3VudGVyIGZvciBlYWNoIEZMT0FUVFlQRSwgd2hpY2ggd2UgcmVzZXQgYXQgZWFjaAorJSBjaGFwdGVyLWxldmVsIGNvbW1hbmQuCitcbGV0XHJlc2V0YWxsZmxvYXRub3M9XGVtcHR5CislCitcZGVmXGRvZmxvYXQjMSwjMiwjMywjNFxmaW5pc2h7JQorICBcbGV0XHRoaXNjYXB0aW9uPVxlbXB0eQorICBcbGV0XHRoaXNzaG9ydGNhcHRpb249XGVtcHR5CisgICUKKyAgJSBkb24ndCBsb3NlIGZvb3Rub3RlcyBpbnNpZGUgQGZsb2F0LgorICAlCisgICUgQkVXQVJFOiB3aGVuIHRoZSBmbG9hdHMgc3RhcnQgZmxvYXQsIHdlIGhhdmUgdG8gaXNzdWUgd2FybmluZyB3aGVuZXZlciBhbgorICAlIGluc2VydCBhcHBlYXJzIGluc2lkZSBhIGZsb2F0IHdoaWNoIGNvdWxkIHBvc3NpYmx5IGZsb2F0LiAtLWthc2FsLCAyNm1heTA0CisgICUKKyAgXHN0YXJ0c2F2aW5naW5zZXJ0cworICAlCisgICUgV2UgY2FuJ3QgYmUgdXNlZCBpbnNpZGUgYSBwYXJhZ3JhcGguCisgIFxwYXIKKyAgJQorICBcdnRvcFxiZ3JvdXAKKyAgICBcZGVmXGZsb2F0dHlwZXsjMX0lCisgICAgXGRlZlxmbG9hdGxhYmVseyMyfSUKKyAgICBcZGVmXGZsb2F0bG9jeyMzfSUgd2UgZG8gbm90aGluZyB3aXRoIHRoaXMgeWV0LgorICAgICUKKyAgICBcaWZ4XGZsb2F0dHlwZVxlbXB0eQorICAgICAgXGxldFxzYWZlZmxvYXR0eXBlPVxlbXB0eQorICAgIFxlbHNlCisgICAgICB7JQorICAgICAgICAlIHRoZSBmbG9hdHR5cGUgbWlnaHQgaGF2ZSBhY2NlbnRzIG9yIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycywKKyAgICAgICAgJSBidXQgd2UgbmVlZCB0byB1c2UgaXQgaW4gYSBjb250cm9sIHNlcXVlbmNlIG5hbWUuCisgICAgICAgIFxpbmRleG5vZm9udHMKKyAgICAgICAgXHR1cm5vZmZhY3RpdmUKKyAgICAgICAgXHhkZWZcc2FmZWZsb2F0dHlwZXtcZmxvYXR0eXBlfSUKKyAgICAgIH0lCisgICAgXGZpCisgICAgJQorICAgICUgSWYgbGFiZWwgaXMgZ2l2ZW4gYnV0IG5vIHR5cGUsIHdlIGhhbmRsZSB0aGF0IGFzIHRoZSBlbXB0eSB0eXBlLgorICAgIFxpZnhcZmxvYXRsYWJlbFxlbXB0eSBcZWxzZQorICAgICAgJSBXZSB3YW50IGVhY2ggRkxPQVRUWVBFIHRvIGJlIG51bWJlcmVkIHNlcGFyYXRlbHkgKEZpZ3VyZSAxLAorICAgICAgJSBUYWJsZSAxLCBGaWd1cmUgMiwgLi4uKS4gIChBbmQgaWYgbm8gbGFiZWwsIG5vIG51bWJlci4pCisgICAgICAlCisgICAgICBcZXhwYW5kYWZ0ZXJcZ2V0ZmxvYXRub1xjc25hbWVcc2FmZWZsb2F0dHlwZSBmbG9hdG5vXGVuZGNzbmFtZQorICAgICAgXGdsb2JhbFxhZHZhbmNlXGZsb2F0bm8gYnkgMQorICAgICAgJQorICAgICAgeyUKKyAgICAgICAgJSBUaGlzIG1hZ2ljIHZhbHVlIGZvciBcdGhpc3NlY3Rpb24gaXMgb3V0cHV0IGJ5IFxzZXRyZWYgYXMgdGhlCisgICAgICAgICUgWFJFRkxBQkVMLXRpdGxlIHZhbHVlLiAgXHhyZWZYIHVzZXMgaXQgdG8gZGlzdGluZ3Vpc2ggZmxvYXQKKyAgICAgICAgJSBsYWJlbHMgKHdoaWNoIGhhdmUgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBvdXRwdXQgZm9ybWF0KSBmcm9tCisgICAgICAgICUgbm9kZSBhbmQgYW5jaG9yIGxhYmVscy4gIEFuZCBceHJkZWYgdXNlcyBpdCB0byBjb25zdHJ1Y3QgdGhlCisgICAgICAgICUgbGlzdHMgb2YgZmxvYXRzLgorICAgICAgICAlCisgICAgICAgIFxlZGVmXHRoaXNzZWN0aW9ue1xmbG9hdG1hZ2ljPVxzYWZlZmxvYXR0eXBlfSUKKyAgICAgICAgXHNldHJlZntcZmxvYXRsYWJlbH17WWZsb2F0fSUKKyAgICAgIH0lCisgICAgXGZpCisgICAgJQorICAgICUgc3RhcnQgd2l0aCBccGFyc2tpcCBnbHVlLCBJIGd1ZXNzLgorICAgIFx2c2tpcFxwYXJza2lwCisgICAgJQorICAgICUgRG9uJ3Qgc3VwcHJlc3MgaW5kZW50YXRpb24gaWYgYSBmbG9hdCBoYXBwZW5zIHRvIHN0YXJ0IGEgc2VjdGlvbi4KKyAgICBccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50Cit9CisKKyUgd2UgaGF2ZSB0aGVzZSBwb3NzaWJpbGl0aWVzOgorJSBAZmxvYXQgRm9vLGxibCAmIEBjYXB0aW9ue0NhcH06IEZvbyAxLjE6IENhcAorJSBAZmxvYXQgRm9vLGxibCAmIG5vIGNhcHRpb246ICAgIEZvbyAxLjEKKyUgQGZsb2F0IEZvbyAmIEBjYXB0aW9ue0NhcH06ICAgICBGb286IENhcAorJSBAZmxvYXQgRm9vICYgbm8gY2FwdGlvbjogICAgICAgIEZvbworJSBAZmxvYXQgLGxibCAmIENhcHRpb257Q2FwfTogICAgIDEuMTogQ2FwCislIEBmbG9hdCAsbGJsICYgbm8gY2FwdGlvbjogICAgICAgMS4xCislIEBmbG9hdCAmIEBjYXB0aW9ue0NhcH06ICAgICAgICAgQ2FwCislIEBmbG9hdCAmIG5vIGNhcHRpb246CislCitcZGVmXEVmbG9hdHslCisgICAgXGxldFxmbG9hdGlkZW50ID0gXGVtcHR5CisgICAgJQorICAgICUgSW4gYWxsIGNhc2VzLCBpZiB3ZSBoYXZlIGEgZmxvYXQgdHlwZSwgaXQgY29tZXMgZmlyc3QuCisgICAgXGlmeFxmbG9hdHR5cGVcZW1wdHkgXGVsc2UgXGRlZlxmbG9hdGlkZW50e1xmbG9hdHR5cGV9XGZpCisgICAgJQorICAgICUgSWYgd2UgaGF2ZSBhbiB4cmVmIGxhYmVsLCB0aGUgbnVtYmVyIGNvbWVzIG5leHQuCisgICAgXGlmeFxmbG9hdGxhYmVsXGVtcHR5IFxlbHNlCisgICAgICBcaWZ4XGZsb2F0dHlwZVxlbXB0eSBcZWxzZSAlIGlmIGFsc28gaGFkIGZsb2F0IHR5cGUsIG5lZWQgdGllIGZpcnN0LgorICAgICAgICBcYXBwZW5kdG9tYWNyb1xmbG9hdGlkZW50e1x0aWV9JQorICAgICAgXGZpCisgICAgICAlIHRoZSBudW1iZXIuCisgICAgICBcYXBwZW5kdG9tYWNyb1xmbG9hdGlkZW50e1xjaGFwbGV2ZWxwcmVmaXhcdGhlXGZsb2F0bm99JQorICAgIFxmaQorICAgICUKKyAgICAlIFN0YXJ0IHRoZSBwcmludGVkIGNhcHRpb24gd2l0aCB3aGF0IHdlJ3ZlIGNvbnN0cnVjdGVkIGluCisgICAgJSBcZmxvYXRpZGVudCwgYnV0IGtlZXAgaXQgc2VwYXJhdGU7IHdlIG5lZWQgXGZsb2F0aWRlbnQgYWdhaW4uCisgICAgXGxldFxjYXB0aW9ubGluZSA9IFxmbG9hdGlkZW50CisgICAgJQorICAgIFxpZnhcdGhpc2NhcHRpb25cZW1wdHkgXGVsc2UKKyAgICAgIFxpZnhcZmxvYXRpZGVudFxlbXB0eSBcZWxzZQorCVxhcHBlbmR0b21hY3JvXGNhcHRpb25saW5lezogfSUgaGFkIGlkZW50LCBzbyBuZWVkIGEgY29sb24gYmV0d2VlbgorICAgICAgXGZpCisgICAgICAlCisgICAgICAlIGNhcHRpb24gdGV4dC4KKyAgICAgIFxhcHBlbmR0b21hY3JvXGNhcHRpb25saW5le1xzY2FuZXhwXHRoaXNjYXB0aW9ufSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBJZiB3ZSBoYXZlIGFueXRoaW5nIHRvIHByaW50LCBwcmludCBpdCwgd2l0aCBzcGFjZSBiZWZvcmUuCisgICAgJSBFdmVudHVhbGx5IHRoaXMgbmVlZHMgdG8gYmVjb21lIGFuIFxpbnNlcnQuCisgICAgXGlmeFxjYXB0aW9ubGluZVxlbXB0eSBcZWxzZQorICAgICAgXHZza2lwLjVccGFyc2tpcAorICAgICAgXGNhcHRpb25saW5lCisgICAgICAlCisgICAgICAlIFNwYWNlIGJlbG93IGNhcHRpb24uCisgICAgICBcdnNraXBccGFyc2tpcAorICAgIFxmaQorICAgICUKKyAgICAlIElmIGhhdmUgYW4geHJlZiBsYWJlbCwgd3JpdGUgdGhlIGxpc3Qgb2YgZmxvYXRzIGluZm8uICBEbyB0aGlzCisgICAgJSBhZnRlciB0aGUgY2FwdGlvbiwgdG8gYXZvaWQgY2hhbmNlIG9mIGl0IGJlaW5nIGEgYnJlYWtwb2ludC4KKyAgICBcaWZ4XGZsb2F0bGFiZWxcZW1wdHkgXGVsc2UKKyAgICAgICUgV3JpdGUgdGhlIHRleHQgdGhhdCBnb2VzIGluIHRoZSBsb2YgdG8gdGhlIGF1eCBmaWxlIGFzCisgICAgICAlIFxmbG9hdGxhYmVsLWxvZi4gIEJlc2lkZXMgXGZsb2F0aWRlbnQsIHdlIGluY2x1ZGUgdGhlIHNob3J0CisgICAgICAlIGNhcHRpb24gaWYgc3BlY2lmaWVkLCBlbHNlIHRoZSBmdWxsIGNhcHRpb24gaWYgc3BlY2lmaWVkLCBlbHNlIG5vdGhpbmcuCisgICAgICB7JQorICAgICAgICBcYXRkdW1taWVzCisgICAgICAgICUKKyAgICAgICAgJSBzaW5jZSB3ZSByZWFkIHRoZSBjYXB0aW9uIHRleHQgaW4gdGhlIG1hY3JvIHdvcmxkLCB3aGVyZSBeXk0KKyAgICAgICAgJSBpcyB0dXJuZWQgaW50byBhIG5vcm1hbCBjaGFyYWN0ZXIsIHdlIGhhdmUgdG8gc2NhbiBpdCBiYWNrLCBzbworICAgICAgICAlIHdlIGRvbid0IHdyaXRlIHRoZSBsaXRlcmFsIHRocmVlIGNoYXJhY3RlcnMgIl5eTSIgaW50byB0aGUgYXV4IGZpbGUuCisJXHNjYW5leHB7JQorCSAgXHhkZWZcbm9leHBhbmRcZ3RlbXB7JQorCSAgICBcaWZ4XHRoaXNzaG9ydGNhcHRpb25cZW1wdHkKKwkgICAgICBcdGhpc2NhcHRpb24KKwkgICAgXGVsc2UKKwkgICAgICBcdGhpc3Nob3J0Y2FwdGlvbgorCSAgICBcZmkKKwkgIH0lCisJfSUKKyAgICAgICAgXGltbWVkaWF0ZVx3cml0ZVxhdXhmaWxle0B4cmRlZntcZmxvYXRsYWJlbC1sb2Z9e1xmbG9hdGlkZW50CisJICBcaWZ4XGd0ZW1wXGVtcHR5IFxlbHNlIDogXGd0ZW1wIFxmaX19JQorICAgICAgfSUKKyAgICBcZmkKKyAgXGVncm91cCAgJSBlbmQgb2YgXHZ0b3AKKyAgJQorICAlIHBsYWNlIHRoZSBjYXB0dXJlZCBpbnNlcnRzCisgICUKKyAgJSBCRVdBUkU6IHdoZW4gdGhlIGZsb2F0cyBzdGFydCBmbG9hdGluZywgd2UgaGF2ZSB0byBpc3N1ZSB3YXJuaW5nCisgICUgd2hlbmV2ZXIgYW4gaW5zZXJ0IGFwcGVhcnMgaW5zaWRlIGEgZmxvYXQgd2hpY2ggY291bGQgcG9zc2libHkKKyAgJSBmbG9hdC4gLS1rYXNhbCwgMjZtYXkwNAorICAlCisgIFxjaGVja2luc2VydHMKK30KKworJSBBcHBlbmQgdGhlIHRva2VucyAjMiB0byB0aGUgZGVmaW5pdGlvbiBvZiBtYWNybyAjMSwgbm90IGV4cGFuZGluZyBlaXRoZXIuCislCitcZGVmXGFwcGVuZHRvbWFjcm8jMSMyeyUKKyAgXGV4cGFuZGFmdGVyXGRlZlxleHBhbmRhZnRlciMxXGV4cGFuZGFmdGVyeyMxIzJ9JQorfQorCislIEBjYXB0aW9uLCBAc2hvcnRjYXB0aW9uCislCitcZGVmXGNhcHRpb257XGRvY2FwdGlvblx0aGlzY2FwdGlvbn0KK1xkZWZcc2hvcnRjYXB0aW9ue1xkb2NhcHRpb25cdGhpc3Nob3J0Y2FwdGlvbn0KK1xkZWZcZG9jYXB0aW9ue1xjaGVja2VudlxmbG9hdCBcYmdyb3VwXHNjYW5hcmdjdHh0XGRlZmNhcHRpb259CitcZGVmXGRlZmNhcHRpb24jMSMye1xlZ3JvdXAgXGRlZiMxeyMyfX0KKworJSBUaGUgcGFyYW1ldGVyIGlzIHRoZSBjb250cm9sIHNlcXVlbmNlIGlkZW50aWZ5aW5nIHRoZSBjb3VudGVyIHdlIGFyZQorJSBnb2luZyB0byB1c2UuICBDcmVhdGUgaXQgaWYgaXQgZG9lc24ndCBleGlzdCBhbmQgYXNzaWduIGl0IHRvIFxmbG9hdG5vLgorXGRlZlxnZXRmbG9hdG5vIzF7JQorICBcaWZ4IzFccmVsYXgKKyAgICAgICUgSGF2ZW4ndCBzZWVuIHRoaXMgZmlndXJlIHR5cGUgYmVmb3JlLgorICAgICAgXGNzbmFtZSBuZXdjb3VudFxlbmRjc25hbWUgIzElCisgICAgICAlCisgICAgICAlIFJlbWVtYmVyIHRvIHJlc2V0IHRoaXMgZmxvYXRubyBhdCB0aGUgbmV4dCBjaGFwLgorICAgICAgXGV4cGFuZGFmdGVyXGdkZWZcZXhwYW5kYWZ0ZXJccmVzZXRhbGxmbG9hdG5vcworICAgICAgICBcZXhwYW5kYWZ0ZXJ7XHJlc2V0YWxsZmxvYXRub3MgIzE9MCB9JQorICBcZmkKKyAgXGxldFxmbG9hdG5vIzElCit9CisKKyUgXHNldHJlZiBjYWxscyB0aGlzIHRvIGdldCB0aGUgWFJFRkxBQkVMLXNudCB2YWx1ZS4gIFdlIHdhbnQgYW4gQHhyZWYKKyUgdG8gdGhlIEZMT0FUTEFCRUwgdG8gZXhwYW5kIHRvICJGaWd1cmUgMy4xIi4gIFdlIGNhbGwgXHNldHJlZiB3aGVuIHdlCislIGZpcnN0IHJlYWQgdGhlIEBmbG9hdCBjb21tYW5kLgorJQorXGRlZlxZZmxvYXR7XGZsb2F0dHlwZUB0aWUgXGNoYXBsZXZlbHByZWZpeFx0aGVcZmxvYXRub30lCisKKyUgTWFnaWMgc3RyaW5nIHVzZWQgZm9yIHRoZSBYUkVGTEFCRUwtdGl0bGUgdmFsdWUsIHNvIFx4cmVmWCBjYW4KKyUgZGlzdGluZ3Vpc2ggZmxvYXRzIGZyb20gb3RoZXIgeHJlZiB0eXBlcy4KK1xkZWZcZmxvYXRtYWdpY3shIWZsb2F0ISF9CisKKyUgIzEgaXMgdGhlIGNvbnRyb2wgc2VxdWVuY2Ugd2UgYXJlIHBhc3NlZDsgd2UgZXhwYW5kIGludG8gYSBjb25kaXRpb25hbAorJSB3aGljaCBpcyB0cnVlIGlmICMxIHJlcHJlc2VudHMgYSBmbG9hdCByZWYuICBUaGF0IGlzLCB0aGUgbWFnaWMKKyUgXHRoaXNzZWN0aW9uIHZhbHVlIHdoaWNoIHdlIFxzZXRyZWYgYWJvdmUuCislCitcZGVmXGlmZmxvYXQjMXtcZXhwYW5kYWZ0ZXJcZG9pZmZsb2F0IzE9PVxmaW5pc2h9CislCislICMxIGlzIChtYXliZSkgdGhlIFxmbG9hdG1hZ2ljIHN0cmluZy4gIElmIHNvLCAjMiB3aWxsIGJlIHRoZQorJSAoc2FmZSkgZmxvYXQgdHlwZSBmb3IgdGhpcyBmbG9hdC4gIFdlIHNldCBcaWZmbG9hdHR5cGUgdG8gIzIuCislCitcZGVmXGRvaWZmbG9hdCMxPSMyPSMzXGZpbmlzaHslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxkZWZcaWZmbG9hdHR5cGV7IzJ9JQorICBcaWZ4XHRlbXBcZmxvYXRtYWdpYworfQorCislIEBsaXN0b2ZmbG9hdHMgRkxPQVRUWVBFIC0gcHJpbnQgYSBsaXN0IG9mIGZsb2F0cyBsaWtlIGEgdGFibGUgb2YgY29udGVudHMuCislCitccGFyc2VhcmdkZWZcbGlzdG9mZmxvYXRzeyUKKyAgXGRlZlxmbG9hdHR5cGV7IzF9JSBmbG9hdHR5cGUKKyAgeyUKKyAgICAlIHRoZSBmbG9hdHR5cGUgbWlnaHQgaGF2ZSBhY2NlbnRzIG9yIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycywKKyAgICAlIGJ1dCB3ZSBuZWVkIHRvIHVzZSBpdCBpbiBhIGNvbnRyb2wgc2VxdWVuY2UgbmFtZS4KKyAgICBcaW5kZXhub2ZvbnRzCisgICAgXHR1cm5vZmZhY3RpdmUKKyAgICBceGRlZlxzYWZlZmxvYXR0eXBle1xmbG9hdHR5cGV9JQorICB9JQorICAlCisgICUgXHhyZGVmIHNhdmVzIHRoZSBmbG9hdHMgYXMgYSBcZG8tbGlzdCBpbiBcZmxvYXRsaXN0U0FGRUZMT0FUVFlQRS4KKyAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgZmxvYXRsaXN0XHNhZmVmbG9hdHR5cGVcZW5kY3NuYW1lIFxyZWxheAorICAgIFxpZmhhdmV4cmVmcworICAgICAgJSBpZiB0aGUgdXNlciBzYWlkIEBsaXN0b2ZmbG9hdHMgZm9vIGJ1dCBuZXZlciBAZmxvYXQgZm9vLgorICAgICAgXG1lc3NhZ2V7XGxpbmVudW1iZXIgTm8gYFxzYWZlZmxvYXR0eXBlJyBmbG9hdHMgdG8gbGlzdC59JQorICAgIFxmaQorICBcZWxzZQorICAgIFxiZWdpbmdyb3VwCisgICAgICBcbGVmdHNraXA9XHRvY2luZGVudCAgJSBpbmRlbnQgdGhlc2UgZW50cmllcyBsaWtlIGEgdG9jCisgICAgICBcbGV0XGRvPVxsaXN0b2ZmbG9hdHNkbworICAgICAgXGNzbmFtZSBmbG9hdGxpc3Rcc2FmZWZsb2F0dHlwZVxlbmRjc25hbWUKKyAgICBcZW5kZ3JvdXAKKyAgXGZpCit9CisKKyUgVGhpcyBpcyBjYWxsZWQgb24gZWFjaCBlbnRyeSBpbiBhIGxpc3Qgb2YgZmxvYXRzLiAgV2UncmUgcGFzc2VkIHRoZQorJSB4cmVmIGxhYmVsLCBpbiB0aGUgZm9ybSBMQUJFTC10aXRsZSwgd2hpY2ggaXMgaG93IHdlIHNhdmUgaXQgaW4gdGhlCislIGF1eCBmaWxlLiAgV2Ugc3RyaXAgb2ZmIHRoZSAtdGl0bGUgYW5kIGxvb2sgdXAgXFhSTEFCRUwtbG9mLCB3aGljaAorJSBoYXMgdGhlIHRleHQgd2UncmUgc3VwcG9zZWQgdG8gdHlwZXNldCBoZXJlLgorJQorJSBGaWd1cmVzIHdpdGhvdXQgeHJlZiBsYWJlbHMgd2lsbCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIGxpc3QgKHNpbmNlCislIHRoZXkgd29uJ3QgYXBwZWFyIGluIHRoZSBhdXggZmlsZSkuCislCitcZGVmXGxpc3RvZmZsb2F0c2RvIzF7XGxpc3RvZmZsb2F0c2RvZW50cnkjMVxmaW5pc2h9CitcZGVmXGxpc3RvZmZsb2F0c2RvZW50cnkjMS10aXRsZVxmaW5pc2h7eyUKKyAgJSBDYW4ndCBmdWxseSBleHBhbmQgWFIjMS1sb2YgYmVjYXVzZSBpdCBjYW4gY29udGFpbiBhbnl0aGluZy4gIEp1c3QKKyAgJSBwYXNzIHRoZSBjb250cm9sIHNlcXVlbmNlLiAgT24gdGhlIG90aGVyIGhhbmQsIFhSIzEtcGcgaXMganVzdCB0aGUKKyAgJSBwYWdlIG51bWJlciwgYW5kIHdlIHdhbnQgdG8gZnVsbHkgZXhwYW5kIHRoYXQgc28gd2UgY2FuIGdldCBhIGxpbmsKKyAgJSBpbiBwZGYgb3V0cHV0LgorICBcdG9rc0EgPSBcZXhwYW5kYWZ0ZXJ7XGNzbmFtZSBYUiMxLWxvZlxlbmRjc25hbWV9JQorICAlCisgICUgdXNlIHRoZSBzYW1lIFxlbnRyeSBtYWNybyB3ZSB1c2UgdG8gZ2VuZXJhdGUgdGhlIFRPQyBhbmQgaW5kZXguCisgIFxlZGVmXHdyaXRlZW50cnl7XG5vZXhwYW5kXGVudHJ5e1x0aGVcdG9rc0F9e1xjc25hbWUgWFIjMS1wZ1xlbmRjc25hbWV9fSUKKyAgXHdyaXRlZW50cnkKK319CisKK1xtZXNzYWdle2xvY2FsaXphdGlvbix9CislIGFuZCBpMThuLgorCislIEBkb2N1bWVudGxhbmd1YWdlIGlzIHVzdWFsbHkgZ2l2ZW4gdmVyeSBlYXJseSwganVzdCBhZnRlcgorJSBAc2V0ZmlsZW5hbWUuICBJZiBkb25lIHRvbyBsYXRlLCBpdCBtYXkgbm90IG92ZXJyaWRlIGV2ZXJ5dGhpbmcKKyUgcHJvcGVybHkuICBTaW5nbGUgYXJndW1lbnQgaXMgdGhlIGxhbmd1YWdlIGFiYnJldmlhdGlvbi4KKyUgSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCBzZXQgdXAgYSBoeXBoZW5hdGlvbiBmaWxlIGhlcmUuCislCitccGFyc2VhcmdkZWZcZG9jdW1lbnRsYW5ndWFnZXslCisgIFx0ZXggJSByZWFkIHR4aS0/Py50ZXggZmlsZSBpbiBwbGFpbiBUZVguCisgICAgJSBSZWFkIHRoZSBmaWxlIGlmIGl0IGV4aXN0cy4KKyAgICBcb3BlbmluIDEgdHhpLSMxLnRleAorICAgIFxpZmVvZiAxCisgICAgICBcZXJyaGVscCA9IFxub2xhbmdoZWxwCisgICAgICBcZXJybWVzc2FnZXtDYW5ub3QgcmVhZCBsYW5ndWFnZSBmaWxlIHR4aS0jMS50ZXh9JQorICAgIFxlbHNlCisgICAgICBcaW5wdXQgdHhpLSMxLnRleAorICAgIFxmaQorICAgIFxjbG9zZWluIDEKKyAgXGVuZGdyb3VwCit9CitcbmV3aGVscFxub2xhbmdoZWxwe1RoZSBnaXZlbiBsYW5ndWFnZSBkZWZpbml0aW9uIGZpbGUgY2Fubm90IGJlIGZvdW5kIG9yCitpcyBlbXB0eS4gIE1heWJlIHlvdSBuZWVkIHRvIGluc3RhbGwgaXQ/ICBJbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKK3Nob3VsZCB3b3JrIGlmIG5vd2hlcmUgZWxzZSBkb2VzLn0KKworCislIEBkb2N1bWVudGVuY29kaW5nIHNob3VsZCBjaGFuZ2Ugc29tZXRoaW5nIGluIFRlWCBldmVudHVhbGx5LCBtb3N0CislIGxpa2VseSwgYnV0IGZvciBub3cganVzdCByZWNvZ25pemUgaXQuCitcbGV0XGRvY3VtZW50ZW5jb2RpbmcgPSBcY29tbWVudAorCisKKyUgUGFnZSBzaXplIHBhcmFtZXRlcnMuCislCitcbmV3ZGltZW5cZGVmYXVsdHBhcmluZGVudCBcZGVmYXVsdHBhcmluZGVudCA9IDE1cHQKKworXGNoYXBoZWFkaW5nc2tpcCA9IDE1cHQgcGx1cyA0cHQgbWludXMgMnB0Citcc2VjaGVhZGluZ3NraXAgPSAxMnB0IHBsdXMgM3B0IG1pbnVzIDJwdAorXHN1YnNlY2hlYWRpbmdza2lwID0gOXB0IHBsdXMgMnB0IG1pbnVzIDJwdAorCislIFByZXZlbnQgdW5kZXJmdWxsIHZib3ggZXJyb3IgbWVzc2FnZXMuCitcdmJhZG5lc3MgPSAxMDAwMAorCislIERvbid0IGJlIHNvIGZpbmlja3kgYWJvdXQgdW5kZXJmdWxsIGhib3hlcywgZWl0aGVyLgorXGhiYWRuZXNzID0gMjAwMAorCislIEZvbGxvd2luZyBHZW9yZ2UgQnVzaCwganVzdCBnZXQgcmlkIG9mIHdpZG93cyBhbmQgb3JwaGFucy4KK1x3aWRvd3BlbmFsdHk9MTAwMDAKK1xjbHVicGVuYWx0eT0xMDAwMAorCislIFVzZSBUZVggMy4wJ3MgXGVtZXJnZW5jeXN0cmV0Y2ggdG8gaGVscCBsaW5lIGJyZWFraW5nLCBidXQgaWYgd2UncmUKKyUgdXNpbmcgYW4gb2xkIHZlcnNpb24gb2YgVGVYLCBkb24ndCBkbyBhbnl0aGluZy4gIFdlIHdhbnQgdGhlIGFtb3VudCBvZgorJSBzdHJldGNoIGFkZGVkIHRvIGRlcGVuZCBvbiB0aGUgbGluZSBsZW5ndGgsIGhlbmNlIHRoZSBkZXBlbmRlbmNlIG9uCislIFxoc2l6ZS4gIFdlIGNhbGwgdGhpcyB3aGVuZXZlciB0aGUgcGFwZXIgc2l6ZSBpcyBzZXQuCislCitcZGVmXHNldGVtZXJnZW5jeXN0cmV0Y2h7JQorICBcaWZ4XGVtZXJnZW5jeXN0cmV0Y2hcdGhpc2lzdW5kZWZpbmVkCisgICAgJSBBbGxvdyB1cyB0byBhc3NpZ24gdG8gXGVtZXJnZW5jeXN0cmV0Y2ggYW55d2F5LgorICAgIFxkZWZcZW1lcmdlbmN5c3RyZXRjaHtcZGltZW4wfSUKKyAgXGVsc2UKKyAgICBcZW1lcmdlbmN5c3RyZXRjaCA9IC4xNVxoc2l6ZQorICBcZmkKK30KKworJSBQYXJhbWV0ZXJzIGluIG9yZGVyOiAxKSB0ZXh0aGVpZ2h0OyAyKSB0ZXh0d2lkdGg7CislIDMpIHZvZmZzZXQ7IDQpIGhvZmZzZXQ7IDUpIGJpbmRpbmcgb2Zmc2V0OyA2KSB0b3Bza2lwOworJSA3KSBwaHlzaWNhbCBwYWdlIGhlaWdodDsgOCkgcGh5c2ljYWwgcGFnZSB3aWR0aC4KKyUKKyUgV2UgYWxzbyBjYWxsIFxzZXRsZWFkaW5ne1x0ZXh0bGVhZGluZ30sIHNvIHRoZSBjYWxsZXIgc2hvdWxkIGRlZmluZQorJSBcdGV4dGxlYWRpbmcuICBUaGUgY2FsbGVyIHNob3VsZCBhbHNvIHNldCBccGFyc2tpcC4KKyUKK1xkZWZcaW50ZXJuYWxwYWdlc2l6ZXMjMSMyIzMjNCM1IzYjNyM4eyUKKyAgXHZvZmZzZXQgPSAjM1xyZWxheAorICBcdG9wc2tpcCA9ICM2XHJlbGF4CisgIFxzcGxpdHRvcHNraXAgPSBcdG9wc2tpcAorICAlCisgIFx2c2l6ZSA9ICMxXHJlbGF4CisgIFxhZHZhbmNlXHZzaXplIGJ5IFx0b3Bza2lwCisgIFxvdXRlcnZzaXplID0gXHZzaXplCisgIFxhZHZhbmNlXG91dGVydnNpemUgYnkgMlx0b3BhbmRib3R0b21tYXJnaW4KKyAgXHBhZ2VoZWlnaHQgPSBcdnNpemUKKyAgJQorICBcaHNpemUgPSAjMlxyZWxheAorICBcb3V0ZXJoc2l6ZSA9IFxoc2l6ZQorICBcYWR2YW5jZVxvdXRlcmhzaXplIGJ5IDAuNWluCisgIFxwYWdld2lkdGggPSBcaHNpemUKKyAgJQorICBcbm9ybWFsb2Zmc2V0ID0gIzRccmVsYXgKKyAgXGJpbmRpbmdvZmZzZXQgPSAjNVxyZWxheAorICAlCisgIFxpZnBkZgorICAgIFxwZGZwYWdlaGVpZ2h0ICM3XHJlbGF4CisgICAgXHBkZnBhZ2V3aWR0aCAjOFxyZWxheAorICBcZmkKKyAgJQorICBcc2V0bGVhZGluZ3tcdGV4dGxlYWRpbmd9CisgICUKKyAgXHBhcmluZGVudCA9IFxkZWZhdWx0cGFyaW5kZW50CisgIFxzZXRlbWVyZ2VuY3lzdHJldGNoCit9CisKKyUgQGxldHRlcnBhcGVyICh0aGUgZGVmYXVsdCkuCitcZGVmXGxldHRlcnBhcGVye3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAzcHQgcGx1cyAycHQgbWludXMgMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEzLjJwdAorICAlCisgICUgSWYgcGFnZSBpcyBub3RoaW5nIGJ1dCB0ZXh0LCBtYWtlIGl0IGNvbWUgb3V0IGV2ZW4uCisgIFxpbnRlcm5hbHBhZ2VzaXplc3s0NlxiYXNlbGluZXNraXB9ezZpbn0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17LjI1aW59JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezM2cHR9JQorICAgICAgICAgICAgICAgICAgICB7MTFpbn17OC41aW59JQorfX0KKworJSBVc2UgQHNtYWxsYm9vayB0byByZXNldCBwYXJhbWV0ZXJzIGZvciA3eDkuMjUgdHJpbSBzaXplLgorXGRlZlxzbWFsbGJvb2t7e1xnbG9iYWxkZWZzID0gMQorICBccGFyc2tpcCA9IDJwdCBwbHVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMnB0CisgICUKKyAgXGludGVybmFscGFnZXNpemVzezcuNWlufXs1aW59JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9ey4yNWlufSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXsxNnB0fSUKKyAgICAgICAgICAgICAgICAgICAgezkuMjVpbn17N2lufSUKKyAgJQorICBcbGlzcG5hcnJvd2luZyA9IDAuM2luCisgIFx0b2xlcmFuY2UgPSA3MDAKKyAgXGhmdXp6ID0gMXB0CisgIFxjb250ZW50c3JpZ2h0bWFyZ2luID0gMHB0CisgIFxkZWZib2R5aW5kZW50ID0gLjVjbQorfX0KKworJSBVc2UgQHNtYWxsZXJib29rIHRvIHJlc2V0IHBhcmFtZXRlcnMgZm9yIDZ4OSB0cmltIHNpemUuCislIChKdXN0IHRlc3RpbmcsIHBhcmFtZXRlcnMgc3RpbGwgaW4gZmx1eC4pCitcZGVmXHNtYWxsZXJib29re3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAxLjVwdCBwbHVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMnB0CisgICUKKyAgXGludGVybmFscGFnZXNpemVzezcuNGlufXs0Ljhpbn0lCisgICAgICAgICAgICAgICAgICAgIHstLjJpbn17LS40aW59JQorICAgICAgICAgICAgICAgICAgICB7MHB0fXsxNHB0fSUKKyAgICAgICAgICAgICAgICAgICAgezlpbn17NmlufSUKKyAgJQorICBcbGlzcG5hcnJvd2luZyA9IDAuMjVpbgorICBcdG9sZXJhbmNlID0gNzAwCisgIFxoZnV6eiA9IDFwdAorICBcY29udGVudHNyaWdodG1hcmdpbiA9IDBwdAorICBcZGVmYm9keWluZGVudCA9IC40Y20KK319CisKKyUgVXNlIEBhZm91cnBhcGVyIHRvIHByaW50IG9uIEV1cm9wZWFuIEE0IHBhcGVyLgorXGRlZlxhZm91cnBhcGVye3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAzcHQgcGx1cyAycHQgbWludXMgMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEzLjJwdAorICAlCisgICUgRG91YmxlLXNpZGUgcHJpbnRpbmcgdmlhIHBvc3RzY3JpcHQgb24gTGFzZXJqZXQgNDA1MAorICAlIHByaW50cyBkb3VibGUtc2lkZWQgbmljZWx5IHdoZW4gXGJpbmRpbmdvZmZzZXQ9MTBtbSBhbmQgXGhvZmZzZXQ9LTZtbS4KKyAgJSBUbyBjaGFuZ2UgdGhlIHNldHRpbmdzIGZvciBhIGRpZmZlcmVudCBwcmludGVyIG9yIHNpdHVhdGlvbiwgYWRqdXN0CisgICUgXG5vcm1hbG9mZnNldCB1bnRpbCB0aGUgZnJvbnQtc2lkZSBhbmQgYmFjay1zaWRlIHRleHRzIGFsaWduLiAgVGhlbgorICAlIGRvIHRoZSBzYW1lIGZvciBcYmluZGluZ29mZnNldC4gIFlvdSBjYW4gc2V0IHRoZXNlIGZvciB0ZXN0aW5nIGluCisgICUgeW91ciB0ZXhpbmZvIHNvdXJjZSBmaWxlIGxpa2UgdGhpczoKKyAgJSBAdGV4CisgICUgXGdsb2JhbFxub3JtYWxvZmZzZXQgPSAtNm1tCisgICUgXGdsb2JhbFxiaW5kaW5nb2Zmc2V0ID0gMTBtbQorICAlIEBlbmQgdGV4CisgIFxpbnRlcm5hbHBhZ2VzaXplc3s1MVxiYXNlbGluZXNraXB9ezE2MG1tfQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9e1xob2Zmc2V0fSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXs0NHB0fSUKKyAgICAgICAgICAgICAgICAgICAgezI5N21tfXsyMTBtbX0lCisgICUKKyAgXHRvbGVyYW5jZSA9IDcwMAorICBcaGZ1enogPSAxcHQKKyAgXGNvbnRlbnRzcmlnaHRtYXJnaW4gPSAwcHQKKyAgXGRlZmJvZHlpbmRlbnQgPSA1bW0KK319CisKKyUgVXNlIEBhZml2ZXBhcGVyIHRvIHByaW50IG9uIEV1cm9wZWFuIEE1IHBhcGVyLgorJSBGcm9tIHJvbWlsZG9AdXJhbm8uaWNlYi51Zm9wLmJyLCAyIEp1bHkgMjAwMC4KKyUgSGUgYWxzbyByZWNvbW1lbmRzIG1ha2luZyBAZXhhbXBsZSBhbmQgQGxpc3AgYmUgc21hbGwuCitcZGVmXGFmaXZlcGFwZXJ7e1xnbG9iYWxkZWZzID0gMQorICBccGFyc2tpcCA9IDJwdCBwbHVzIDFwdCBtaW51cyAwLjFwdAorICBcdGV4dGxlYWRpbmcgPSAxMi41cHQKKyAgJQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7MTYwbW19ezEyMG1tfSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXtcaG9mZnNldH0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17OHB0fSUKKyAgICAgICAgICAgICAgICAgICAgezIxMG1tfXsxNDhtbX0lCisgICUKKyAgXGxpc3BuYXJyb3dpbmcgPSAwLjJpbgorICBcdG9sZXJhbmNlID0gODAwCisgIFxoZnV6eiA9IDEuMnB0CisgIFxjb250ZW50c3JpZ2h0bWFyZ2luID0gMHB0CisgIFxkZWZib2R5aW5kZW50ID0gMm1tCisgIFx0YWJsZWluZGVudCA9IDEybW0KK319CisKKyUgQSBzcGVjaWZpYyB0ZXh0IGxheW91dCwgMjR4MTVjbSBvdmVyYWxsLCBpbnRlbmRlZCBmb3IgQTQgcGFwZXIuCitcZGVmXGFmb3VybGF0ZXh7e1xnbG9iYWxkZWZzID0gMQorICBcYWZvdXJwYXBlcgorICBcaW50ZXJuYWxwYWdlc2l6ZXN7MjM3bW19ezE1MG1tfSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXs0LjZtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17N21tfSUKKyAgICAgICAgICAgICAgICAgICAgezI5N21tfXsyMTBtbX0lCisgICUKKyAgJSBNdXN0IGV4cGxpY2l0bHkgcmVzZXQgdG8gMCBiZWNhdXNlIHdlIGNhbGwgXGFmb3VycGFwZXIuCisgIFxnbG9iYWxkZWZzID0gMAorfX0KKworJSBVc2UgQGFmb3Vyd2lkZSB0byBwcmludCBvbiBBNCBwYXBlciBpbiBsYW5kc2NhcGUgZm9ybWF0LgorXGRlZlxhZm91cndpZGV7e1xnbG9iYWxkZWZzID0gMQorICBcYWZvdXJwYXBlcgorICBcaW50ZXJuYWxwYWdlc2l6ZXN7MjQxbW19ezE2NW1tfSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXstMi45NW1tfSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXs3bW19JQorICAgICAgICAgICAgICAgICAgICB7Mjk3bW19ezIxMG1tfSUKKyAgXGdsb2JhbGRlZnMgPSAwCit9fQorCislIEBwYWdlc2l6ZXMgVEVYVEhFSUdIVFssVEVYVFdJRFRIXQorJSBQZXJoYXBzIHdlIHNob3VsZCBhbGxvdyBzZXR0aW5nIHRoZSBtYXJnaW5zLCBcdG9wc2tpcCwgXHBhcnNraXAsCislIGFuZC9vciBsZWFkaW5nLCBhbHNvLiBPciBwZXJoYXBzIHdlIHNob3VsZCBjb21wdXRlIHRoZW0gc29tZWhvdy4KKyUKK1xwYXJzZWFyZ2RlZlxwYWdlc2l6ZXN7XHBhZ2VzaXplc3l5eSAjMSwsXGZpbmlzaH0KK1xkZWZccGFnZXNpemVzeXl5IzEsIzIsIzNcZmluaXNoe3slCisgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn1caWZkaW1cd2QwID4gMHB0IFxoc2l6ZT0jMlxyZWxheCBcZmkKKyAgXGdsb2JhbGRlZnMgPSAxCisgICUKKyAgXHBhcnNraXAgPSAzcHQgcGx1cyAycHQgbWludXMgMXB0CisgIFxzZXRsZWFkaW5ne1x0ZXh0bGVhZGluZ30lCisgICUKKyAgXGRpbWVuMCA9ICMxCisgIFxhZHZhbmNlXGRpbWVuMCBieSBcdm9mZnNldAorICAlCisgIFxkaW1lbjIgPSBcaHNpemUKKyAgXGFkdmFuY2VcZGltZW4yIGJ5IFxub3JtYWxvZmZzZXQKKyAgJQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7IzF9e1xoc2l6ZX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17XG5vcm1hbG9mZnNldH0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17NDRwdH0lCisgICAgICAgICAgICAgICAgICAgIHtcZGltZW4wfXtcZGltZW4yfSUKK319CisKKyUgU2V0IGRlZmF1bHQgdG8gbGV0dGVyLgorJQorXGxldHRlcnBhcGVyCisKKworXG1lc3NhZ2V7YW5kIHR1cm5pbmcgb24gdGV4aW5mbyBpbnB1dCBmb3JtYXQufQorCislIERlZmluZSBtYWNyb3MgdG8gb3V0cHV0IHZhcmlvdXMgY2hhcmFjdGVycyB3aXRoIGNhdGNvZGUgZm9yIG5vcm1hbCB0ZXh0LgorXGNhdGNvZGVgXCI9XG90aGVyCitcY2F0Y29kZWBcfj1cb3RoZXIKK1xjYXRjb2RlYFxePVxvdGhlcgorXGNhdGNvZGVgXF89XG90aGVyCitcY2F0Y29kZWBcfD1cb3RoZXIKK1xjYXRjb2RlYFw8PVxvdGhlcgorXGNhdGNvZGVgXD49XG90aGVyCitcY2F0Y29kZWBcKz1cb3RoZXIKK1xjYXRjb2RlYFwkPVxvdGhlcgorXGRlZlxub3JtYWxkb3VibGVxdW90ZXsifQorXGRlZlxub3JtYWx0aWxkZXt+fQorXGRlZlxub3JtYWxjYXJldHtefQorXGRlZlxub3JtYWx1bmRlcnNjb3Jle199CitcZGVmXG5vcm1hbHZlcnRpY2FsYmFye3x9CitcZGVmXG5vcm1hbGxlc3N7PH0KK1xkZWZcbm9ybWFsZ3JlYXRlcns+fQorXGRlZlxub3JtYWxwbHVzeyt9CitcZGVmXG5vcm1hbGRvbGxhcnskfSUkIGZvbnQtbG9jayBmaXgKKworJSBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gbWFrZSBhIGNoYXJhY3RlciBwcmludCBvbmUgd2F5IGluIFx0dAorJSAod2hlcmUgaXQgY2FuIHByb2JhYmx5IGJlIG91dHB1dCBhcy1pcyksIGFuZCBhbm90aGVyIHdheSBpbiBvdGhlciBmb250cywKKyUgd2hlcmUgc29tZXRoaW5nIGhhaXJpZXIgcHJvYmFibHkgbmVlZHMgdG8gYmUgZG9uZS4KKyUKKyUgIzEgaXMgd2hhdCB0byBwcmludCBpZiB3ZSBhcmUgaW5kZWVkIHVzaW5nIFx0dDsgIzIgaXMgd2hhdCB0byBwcmludAorJSBvdGhlcndpc2UuICBTaW5jZSBhbGwgdGhlIENvbXB1dGVyIE1vZGVybiB0eXBld3JpdGVyIGZvbnRzIGhhdmUgemVybworJSBpbnRlcndvcmQgc3RyZXRjaCAoYW5kIHNocmluayksIGFuZCBpdCBpcyByZWFzb25hYmxlIHRvIGV4cGVjdCBhbGwKKyUgdHlwZXdyaXRlciBmb250cyB0byBoYXZlIHRoaXMsIHdlIGNhbiBjaGVjayB0aGF0IGZvbnQgcGFyYW1ldGVyLgorJQorXGRlZlxpZnVzaW5ndHQjMSMye1xpZmRpbSBcZm9udGRpbWVuM1xmb250PTBwdCAjMVxlbHNlICMyXGZpfQorCislIFNhbWUgYXMgYWJvdmUsIGJ1dCBjaGVjayBmb3IgaXRhbGljIGZvbnQuICBBY3R1YWxseSB0aGlzIGFsc28gY2F0Y2hlcworJSBub24taXRhbGljIHNsYW50ZWQgZm9udHMgc2luY2UgaXQgaXMgaW1wb3NzaWJsZSB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20KKyUgaXRhbGljIGZvbnRzLiAgQnV0IHNpbmNlIHRoaXMgaXMgb25seSB1c2VkIGJ5ICQgYW5kIGl0IHVzZXMgXHNsIGFueXdheQorJSB0aGlzIGlzIG5vdCBhIHByb2JsZW0uCitcZGVmXGlmdXNpbmdpdCMxIzJ7XGlmZGltIFxmb250ZGltZW4xXGZvbnQ+MHB0ICMxXGVsc2UgIzJcZml9CisKKyUgVHVybiBvZmYgYWxsIHNwZWNpYWwgY2hhcmFjdGVycyBleGNlcHQgQAorJSAoYW5kIHRob3NlIHdoaWNoIHRoZSB1c2VyIGNhbiB1c2UgYXMgaWYgdGhleSB3ZXJlIG9yZGluYXJ5KS4KKyUgTW9zdCBvZiB0aGVzZSB3ZSBzaW1wbHkgcHJpbnQgZnJvbSB0aGUgXHR0IGZvbnQsIGJ1dCBmb3Igc29tZSwgd2UgY2FuCislIHVzZSBtYXRoIG9yIG90aGVyIHZhcmlhbnRzIHRoYXQgbG9vayBiZXR0ZXIgaW4gbm9ybWFsIHRleHQuCisKK1xjYXRjb2RlYFwiPVxhY3RpdmUKK1xkZWZcYWN0aXZlZG91YmxlcXVvdGV7e1x0dFxjaGFyMzR9fQorXGxldCI9XGFjdGl2ZWRvdWJsZXF1b3RlCitcY2F0Y29kZWBcfj1cYWN0aXZlCitcZGVmfnt7XHR0XGNoYXIxMjZ9fQorXGNoYXJkZWZcaGF0PWBcXgorXGNhdGNvZGVgXF49XGFjdGl2ZQorXGRlZl57e1x0dCBcaGF0fX0KKworXGNhdGNvZGVgXF89XGFjdGl2ZQorXGRlZl97XGlmdXNpbmd0dFxub3JtYWx1bmRlcnNjb3JlXF99CitcbGV0XHJlYWx1bmRlcj1fCislIFN1YnJvdXRpbmUgZm9yIHRoZSBwcmV2aW91cyBtYWNyby4KK1xkZWZcX3tcbGVhdmV2bW9kZSBca2Vybi4wN2VtIFx2Ym94e1xocnVsZSB3aWR0aC4zZW0gaGVpZ2h0LjFleH1ca2VybiAuMDdlbSB9CisKK1xjYXRjb2RlYFx8PVxhY3RpdmUKK1xkZWZ8e3tcdHRcY2hhcjEyNH19CitcY2hhcmRlZiBcbGVzcz1gXDwKK1xjYXRjb2RlYFw8PVxhY3RpdmUKK1xkZWY8e3tcdHQgXGxlc3N9fQorXGNoYXJkZWYgXGd0cj1gXD4KK1xjYXRjb2RlYFw+PVxhY3RpdmUKK1xkZWY+e3tcdHQgXGd0cn19CitcY2F0Y29kZWBcKz1cYWN0aXZlCitcZGVmK3t7XHR0IFxjaGFyIDQzfX0KK1xjYXRjb2RlYFwkPVxhY3RpdmUKK1xkZWYke1xpZnVzaW5naXR7e1xzbFwkfX1cbm9ybWFsZG9sbGFyfSUkIGZvbnQtbG9jayBmaXgKKworJSBJZiBhIC5mbXQgZmlsZSBpcyBiZWluZyB1c2VkLCBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYXBwZWFyIGluIGEgZmlsZQorJSBuYW1lIGNhbm5vdCBiZSBhY3RpdmUgdW50aWwgd2UgaGF2ZSBwYXJzZWQgdGhlIGNvbW1hbmQgbGluZS4KKyUgU28gdHVybiB0aGVtIG9mZiBhZ2FpbiwgYW5kIGhhdmUgXGV2ZXJ5am9iIChvciBAc2V0ZmlsZW5hbWUpIHR1cm4gdGhlbSBvbi4KKyUgXG90aGVyaWZ5YWN0aXZlIGlzIGNhbGxlZCBuZWFyIHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorXGRlZlxvdGhlcmlmeWFjdGl2ZXtcY2F0Y29kZWArPVxvdGhlciBcY2F0Y29kZWBcXz1cb3RoZXJ9CisKKyUgVXNlZCBzb21ldGltZXMgdG8gdHVybiBvZmYgKGVmZmVjdGl2ZWx5KSB0aGUgYWN0aXZlIGNoYXJhY3RlcnMgZXZlbiBhZnRlcgorJSBwYXJzaW5nIHRoZW0uCitcZGVmXHR1cm5vZmZhY3RpdmV7JQorICBcbm9ybWFsdHVybm9mZmFjdGl2ZQorICBcb3RoZXJiYWNrc2xhc2gKK30KKworXGNhdGNvZGVgXEA9MAorCislIFxiYWNrc2xhc2hjdXJmb250IG91dHB1dHMgb25lIGJhY2tzbGFzaCBjaGFyYWN0ZXIgaW4gY3VycmVudCBmb250LAorJSBhcyBpbiBcY2hhcmBcXC4KK1xnbG9iYWxcY2hhcmRlZlxiYWNrc2xhc2hjdXJmb250PWBcXAorXGdsb2JhbFxsZXRccmF3YmFja3NsYXNoeHg9XGJhY2tzbGFzaGN1cmZvbnQgICUgbGV0IGV4aXN0aW5nIC4/P3MgZmlsZXMgd29yaworCislIFxyZWFsYmFja3NsYXNoIGlzIGFuIGFjdHVhbCBjaGFyYWN0ZXIgYFwnIHdpdGggY2F0Y29kZSBvdGhlciwgYW5kCislIFxkb3VibGViYWNrc2xhc2ggaXMgdHdvIG9mIHRoZW0gKGZvciB0aGUgcGRmIG91dGxpbmVzKS4KK3tcY2F0Y29kZWBcXD1cb3RoZXIgQGdkZWZAcmVhbGJhY2tzbGFzaHtcfSBAZ2RlZkBkb3VibGViYWNrc2xhc2h7XFx9fQorCislIEluIHRleGluZm8sIGJhY2tzbGFzaCBpcyBhbiBhY3RpdmUgY2hhcmFjdGVyOyBpdCBwcmludHMgdGhlIGJhY2tzbGFzaAorJSBpbiBmaXhlZCB3aWR0aCBmb250LgorXGNhdGNvZGVgXFw9XGFjdGl2ZQorQGRlZkBub3JtYWxiYWNrc2xhc2h7e0B0dEBiYWNrc2xhc2hjdXJmb250fX0KKyUgT24gc3RhcnR1cCwgQGZpeGJhY2tzbGFzaCBhc3NpZ25zOgorJSAgQGxldCBcID0gQG5vcm1hbGJhY2tzbGFzaAorCislIFxyYXdiYWNrc2xhc2ggZGVmaW5lcyBhbiBhY3RpdmUgXCB0byBkbyBcYmFja3NsYXNoY3VyZm9udC4KKyUgXG90aGVyYmFja3NsYXNoIGRlZmluZXMgYW4gYWN0aXZlIFwgdG8gYmUgYSBsaXRlcmFsIGBcJyBjaGFyYWN0ZXIgd2l0aAorJSBjYXRjb2RlIG90aGVyLgorQGdkZWZAcmF3YmFja3NsYXNoe0BsZXRcPUBiYWNrc2xhc2hjdXJmb250fQorQGdkZWZAb3RoZXJiYWNrc2xhc2h7QGxldFw9QHJlYWxiYWNrc2xhc2h9CisKKyUgU2FtZSBhcyBAdHVybm9mZmFjdGl2ZSBleGNlcHQgb3V0cHV0cyBcIGFzIHtcdHRcY2hhcmBcXH0gaW5zdGVhZCBvZgorJSB0aGUgbGl0ZXJhbCBjaGFyYWN0ZXIgYFwnLgorJSAKK0BkZWZAbm9ybWFsdHVybm9mZmFjdGl2ZXslCisgIEBsZXRcPUBub3JtYWxiYWNrc2xhc2gKKyAgQGxldCI9QG5vcm1hbGRvdWJsZXF1b3RlCisgIEBsZXR+PUBub3JtYWx0aWxkZQorICBAbGV0Xj1Abm9ybWFsY2FyZXQKKyAgQGxldF89QG5vcm1hbHVuZGVyc2NvcmUKKyAgQGxldHw9QG5vcm1hbHZlcnRpY2FsYmFyCisgIEBsZXQ8PUBub3JtYWxsZXNzCisgIEBsZXQ+PUBub3JtYWxncmVhdGVyCisgIEBsZXQrPUBub3JtYWxwbHVzCisgIEBsZXQkPUBub3JtYWxkb2xsYXIgJSQgZm9udC1sb2NrIGZpeAorICBAdW5zZXBzcGFjZXMKK30KKworJSBNYWtlIF8gYW5kICsgXG90aGVyIGNoYXJhY3RlcnMsIHRlbXBvcmFyaWx5LgorJSBUaGlzIGlzIGNhbmNlbGVkIGJ5IEBmaXhiYWNrc2xhc2guCitAb3RoZXJpZnlhY3RpdmUKKworJSBJZiBhIC5mbXQgZmlsZSBpcyBiZWluZyB1c2VkLCB3ZSBkb24ndCB3YW50IHRoZSBgXGlucHV0IHRleGluZm8nIHRvIHNob3cgdXAuCislIFRoYXQgaXMgd2hhdCBcZWF0aW5wdXQgaXMgZm9yOyBhZnRlciB0aGF0LCB0aGUgYFwnIHNob3VsZCByZXZlcnQgdG8gcHJpbnRpbmcKKyUgYSBiYWNrc2xhc2guCislCitAZ2RlZkBlYXRpbnB1dCBpbnB1dCB0ZXhpbmZve0BmaXhiYWNrc2xhc2h9CitAZ2xvYmFsQGxldFwgPSBAZWF0aW5wdXQKKworJSBPbiB0aGUgb3RoZXIgaGFuZCwgcGVyaGFwcyB0aGUgZmlsZSBkaWQgbm90IGhhdmUgYSBgXGlucHV0IHRleGluZm8nLiBUaGVuCislIHRoZSBmaXJzdCBgXCcgaW4gdGhlIGZpbGUgd291bGQgY2F1c2UgYW4gZXJyb3IuIFRoaXMgbWFjcm8gdHJpZXMgdG8gZml4CislIHRoYXQsIGFzc3VtaW5nIGl0IGlzIGNhbGxlZCBiZWZvcmUgdGhlIGZpcnN0IGBcJyBjb3VsZCBwbGF1c2libHkgb2NjdXIuCislIEFsc28gdHVybiBiYWNrIG9uIGFjdGl2ZSBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYXBwZWFyIGluIHRoZSBpbnB1dAorJSBmaWxlIG5hbWUsIGluIGNhc2Ugbm90IHVzaW5nIGEgcHJlLWR1bXBlZCBmb3JtYXQuCislCitAZ2RlZkBmaXhiYWNrc2xhc2h7JQorICBAaWZ4XEBlYXRpbnB1dCBAbGV0XCA9IEBub3JtYWxiYWNrc2xhc2ggQGZpCisgIEBjYXRjb2RlYCs9QGFjdGl2ZQorICBAY2F0Y29kZWBAXz1AYWN0aXZlCit9CisKKyUgU2F5IEBmb28sIG5vdCBcZm9vLCBpbiBlcnJvciBtZXNzYWdlcy4KK0Blc2NhcGVjaGFyID0gYEBACisKKyUgVGhlc2UgbG9vayBvayBpbiBhbGwgZm9udHMsIHNvIGp1c3QgbWFrZSB0aGVtIG5vdCBzcGVjaWFsLgorQGNhdGNvZGVgQCYgPSBAb3RoZXIKK0BjYXRjb2RlYEAjID0gQG90aGVyCitAY2F0Y29kZWBAJSA9IEBvdGhlcgorCisKK0BjIExvY2FsIHZhcmlhYmxlczoKK0BjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKK0BjIHBhZ2UtZGVsaW1pdGVyOiAiXlxcXFxtZXNzYWdlIgorQGMgdGltZS1zdGFtcC1zdGFydDogImRlZlxcXFx0ZXhpbmZvdmVyc2lvbnsiCitAYyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKK0BjIHRpbWUtc3RhbXAtZW5kOiAifSIKK0BjIEVuZDoKKworQGMgdmltOnN3PTI6CisKK0BpZ25vcmUKKyAgIGFyY2gtdGFnOiBlMWIzNmUzMi1jOTZlLTQxMzUtYTQxYS0wYjJlZmEyZWExMTUKK0BlbmQgaWdub3JlCmRpZmYgLS1naXQgYS9lMmZzY2svQ0hBTkdFUyBiL2UyZnNjay9DSEFOR0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMTM1YjYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svQ0hBTkdFUwpAQCAtMCwwICsxLDUzIEBACitbdHl0c286MTk5NDAxMDEuMTIwMEVTVF0KKworQWRkIG5ldyBvcHRpb25zIC1sIGFuZCAtTCwgdG8gYXBwZW5kIHRvIGFuZCBtb2RpZnkgdGhlIGJhZC1ibG9ja3MgbGlzdC4KKworRml4IGJ1Z3MgaW4gYmFkLWJsb2NrIGNsb25pbmcuCisKK1t0eXRzbzoxOTkzMTIzMC4xODMyRVNUXQorCitDbGVhbiB1cCBlMmZzY2sgYW5kIGxpYnJhcnkgdG8gYmUgY2xlYW4gZXZlbiB3aGVuIGNvbXBpbGluZyB3aXRoIGZ1bGwKK3dhcm5pbmdzIGVuYWJsZWQuCisKK01ha2UgZTJmc2NrIGRlYWwgd2l0aCB6ZXJvLWxlbmd0aCBkaXJlY3RvcmllcyBjb3JyZWN0bHkuCisKK0RlbGV0ZWQgaW5vZGVzIGZyb20gb2xkIGV4dDJmcyBjb2RlIChpbm9kZXMgd2l0aCBkdGltZSBzZXQgYnV0Citub24temVybyBsaW5rIGNvdW50KSBhcmUgZGV0ZWN0ZWQsIGFuZCB0aGUgdXNlciBpcyBnaXZlbiB0aGUKK29wcG9ydHVuaXR5IHRvIGNsZWFyIHRoZW0uCisKK1RoZSBsYXN0IGJpdCBpbiB0aGUgbGFzdCBncm91cCBvZiB0aGUgYmxvY2sgYml0bWFwIGJhZGRpbmcgd2FzIG5vdAorYmVpbmcgY2hlY2tlZDsgbm93IGZpeGVkLgorCitUaGUgZnJlZV9ibG9ja3MgYW5kIGZyZWVfaW5vZGVzIGNvdW50IGluIHRoZSBsYXN0IGdyb3VwIHdlcmVuJ3QgYmVpbmcKK2NoZWNrZWQuICBOb3cgZml4ZWQuCisKK1t0eXRzbzoxOTkzMTEwMS4wMDA3RVNUXQorCitGaXhlZCBidWdzIHdpdGggcm9vdCByZWFsbG9jYXRpb247IHByZXZpb3VzbHkgdGhlIHBhcmVudCBwb2ludGVycyBpbgordGhlIGRpcmluZm8gc3RydWN0dXJlIHdvdWxkIGdldCBjb3JydXB0ZWQsIGNhdXNpbmcgbWFueSBkaWZmZXJlbnQgJy4uJworbGlua3MgdG8gYmUgd3JvbmcuICBBbHNvLCB0aGUgaW5vZGUgbGluayBjb3VudCBmb3IgdGhlIHJvb3QgZGlyZWN0b3J5Cit3YXNuJ3QgYWx3YXlzIGJlaW5nIHNldCBjb3JyZWN0bHkuICAoQWxsIG9mIHRoaXMgd291bGQgYmUgZml4ZWQgb24KK3RoZSBzZWNvbmQgZTJmc2NrLCBob3dldmVyKS4KKworRml4ZWQgdG8gcmVjb2duaXplIGZpbGVzeXN0ZW0gY29ycnVwdGlvbiBjYXVzZWQgYnkgbWtlMmZzIDAuMmIgKHdoZXJlCisvIGFuZCAvbG9zdCtmb3VuZCBoYWQgbm9uLXplcm8gZHRpbWUgZW50cmllcykuICBPZmZlcnMgdG8gZml4IC8ncworZHRpbWUgZW50cnkuCisKK2UyZnNjayB3aWxsIG5vdyBleHBhbmQgdGhlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeSBpZiBpdCBydW5zIG91dCBvZiByb29tLgorCitGaXhlZCBkZXBlbmRlbmN5IG9uIEJMT0NLX1NJWkUgaW4gcGFzczIuICBlMmZzY2sgd2lsbCBub3cgaGFuZGxlIDRrCitmaWxlc3lzdGVtcyB3L28gcHJvYmxlbXMuCisKK2UyZnNjayB3aWxsIG5vdyBtb3ZlIGJhZCBibG9ja3MgZm91bmQgaW4gdGhlIGlub2RlIGJpdG1hcHMsIGJsb2NrCitiaXRtYXBzLCBhbmQgaW4gdGhlIGlub2RlIHRhYmxlcy4gIChDYW4ndCBoYW5kbGUgYmFkIGJsb2NrcyBmb3VuZCBpbgordGhlIHN1cGVyYmxvY2sgYW5kIHRoZSBncm91cCBkZXNjcmlwdG9ycy4pICAoRG9lc24ndCB1cGRhdGUgYWx0ZXJuYXRlCitzdXBlcmJsb2NrcywgZ3JvdXAgZGVzY3JpcHRvcnMuKQorCitlMmZzY2sgbm93IHN1cHBvcnRzIHRoZSAtYiBvcHRpb24sIHRvIGFsbG93IGEgdXNlciB0byBzcGVjaWZ5IGFuCithbHRlcm5hdGUgc3VwZXJibG9jay4KKworVGhlIC1CIG9wdGlvbiBub3cgc3BlY2lmaWVzIHRoZSBibG9ja3NpemUgb2YgdGhlIGZpbGVzeXN0ZW0uICAoSWYgbm90CitzcGVjaWZpZWQsIGFuZCB0aGUgLWIgb3B0aW9uIGlzIHNwZWNpZmllZCwgZTJmc2NrIHdpbGwgYXR0ZW1wdCB0bworc2VhcmNoIHRocm91Z2ggdmFyaW91cyBibG9ja3NpemVzIHRvIGZpbmQgdGhlIGNvcnJlY3Qgb25lLikKKworQWRkZWQgbWFudWFsIHBhZ2UuCmRpZmYgLS1naXQgYS9lMmZzY2svTWFrZWZpbGUuaW4gYi9lMmZzY2svTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFjZTIyMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDU1NiBAQAorIworIyBNYWtlZmlsZSBmb3IgZTJmc2NrCisjCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACit0b3BfYnVpbGRkaXIgPSAuLgorbXlfZGlyID0gZTJmc2NrCitJTlNUQUxMID0gQElOU1RBTExACisKK0BNQ09ORklHQAorCitQUk9HUz0JCWUyZnNjaworTUFOUEFHRVM9CWUyZnNjay44CitGTUFOUEFHRVM9CWUyZnNjay5jb25mLjUKKworTElCUz0gJChMSUJRVU9UQSkgJChMSUJFWFQyRlMpICQoTElCQ09NX0VSUikgJChMSUJCTEtJRCkgJChMSUJVVUlEKSBcCisJJChMSUJJTlRMKSAkKExJQkUyUCkgJChTWVNMSUJTKQorREVQTElCUz0gJChERVBMSUJRVU9UQSkgJChMSUJFWFQyRlMpICQoREVQTElCQ09NX0VSUikgJChERVBMSUJCTEtJRCkgXAorCSAkKERFUExJQlVVSUQpICQoREVQTElCRTJQKQorCitTVEFUSUNfTElCUz0gJChTVEFUSUNfTElCUVVPVEEpICQoU1RBVElDX0xJQkVYVDJGUykgJChTVEFUSUNfTElCQ09NX0VSUikgXAorCSAgICAgJChTVEFUSUNfTElCQkxLSUQpICQoU1RBVElDX0xJQlVVSUQpICQoTElCSU5UTCkgJChTVEFUSUNfTElCRTJQKSBcCisJICAgICAkKFNZU0xJQlMpCitTVEFUSUNfREVQTElCUz0gJChERVBTVEFUSUNfTElCUVVPVEEpICQoU1RBVElDX0xJQkVYVDJGUykgXAorCQkkKERFUFNUQVRJQ19MSUJDT01fRVJSKSAkKERFUFNUQVRJQ19MSUJCTEtJRCkgXAorCQkkKERFUFNUQVRJQ19MSUJVVUlEKSAkKERFUFNUQVRJQ19MSUJFMlApCisKK1BST0ZJTEVEX0xJQlM9ICQoUFJPRklMRURfTElCUVVPVEEpICQoUFJPRklMRURfTElCRVhUMkZTKSBcCisJICAgICAgICQoUFJPRklMRURfTElCQ09NX0VSUikgJChQUk9GSUxFRF9MSUJCTEtJRCkgJChQUk9GSUxFRF9MSUJVVUlEKSBcCisJICAgICAgICQoUFJPRklMRURfTElCRTJQKSAkKExJQklOVEwpICQoU1lTTElCUykKK1BST0ZJTEVEX0RFUExJQlM9ICQoREVQUFJPRklMRURfTElCUVVPVEEpICQoUFJPRklMRURfTElCRVhUMkZTKSBcCisJCSAgJChERVBQUk9GSUxFRF9MSUJDT01fRVJSKSAkKERFUFBST0ZJTEVEX0xJQkJMS0lEKSBcCisJCSAgJChERVBQUk9GSUxFRF9MSUJVVUlEKSAkKERFUFBST0ZJTEVEX0xJQkUyUCkKKworQ09NUElMRV9FVD0kKHRvcF9idWlsZGRpcikvbGliL2V0L2NvbXBpbGVfZXQgLS1idWlsZC10cmVlCisKKy5jLm86CisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgLWMgJChBTExfQ0ZMQUdTKSAkPCAtbyAkQAorCSQoUSkgJChDSEVDS19DTUQpICQoQUxMX0NGTEFHUykgJDwKK0BQUk9GSUxFX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1nIC1wZyAtbyBwcm9maWxlZC8kKi5vIC1jICQ8CisKKyMKKyMgRmxhZ3MgZm9yIGRvaW5nIG10cmFjZSAtLS0gdW5jb21tZW50IHRvIHByb2R1Y2UgbXRyYWNpbmcgZTJmc2NrCisjIAlOb3RlOiAgVGhlIG9wdGltaXphdGlvbiBmbGFncyBtdXN0IGluY2x1ZGUgLWcKKyMKKyNNVFJBQ0U9CS1ETVRSQUNFCisjTVRSQUNFX09CSj0gbXRyYWNlLm8KKyNNVFJBQ0VfU1JDPSAkKHNyY2RpcikvbXRyYWNlLmMKKyNPUFQ9IC1nCisKKyMKKyMgRmxhZ3MgZm9yIGRvaW5nIG1jaGVjayAtLS0gdW5jb21tZW50IHRvIHByb2R1Y2UgbWNoZWNraW5nIGUyZnNjaworIyAJTm90ZTogIFRoZSBvcHRpbWl6YXRpb24gZmxhZ3MgbXVzdCBpbmNsdWRlIC1nCisjCisjTUNIRUNLPSAtRE1DSEVDSworCitPQkpTPSBjcmMzMi5vIGRpY3QubyB1bml4Lm8gZTJmc2NrLm8gc3VwZXIubyBwYXNzMS5vIHBhc3MxYi5vIHBhc3MyLm8gXAorCXBhc3MzLm8gcGFzczQubyBwYXNzNS5vIGpvdXJuYWwubyBiYWRibG9ja3MubyB1dGlsLm8gZGlyaW5mby5vIFwKKwlkeF9kaXJpbmZvLm8gZWhhbmRsZXIubyBwcm9ibGVtLm8gbWVzc2FnZS5vIHF1b3RhLm8gcmVjb3ZlcnkubyBcCisJcmVnaW9uLm8gcmV2b2tlLm8gZWFfcmVmY291bnQubyByZWhhc2gubyBwcm9maWxlLm8gcHJvZl9lcnIubyBcCisJbG9nZmlsZS5vIHNpZ2NhdGNoZXIubyAkKE1UUkFDRV9PQkopCisKK1BST0ZJTEVEX09CSlM9IHByb2ZpbGVkL2RpY3QubyBwcm9maWxlZC91bml4Lm8gcHJvZmlsZWQvZTJmc2NrLm8gXAorCXByb2ZpbGVkL3N1cGVyLm8gcHJvZmlsZWQvcGFzczEubyBwcm9maWxlZC9wYXNzMWIubyBcCisJcHJvZmlsZWQvcGFzczIubyBwcm9maWxlZC9wYXNzMy5vIHByb2ZpbGVkL3Bhc3M0Lm8gcHJvZmlsZWQvcGFzczUubyBcCisJcHJvZmlsZWQvam91cm5hbC5vIHByb2ZpbGVkL2JhZGJsb2Nrcy5vIHByb2ZpbGVkL3V0aWwubyBcCisJcHJvZmlsZWQvZGlyaW5mby5vIHByb2ZpbGVkL2R4X2RpcmluZm8ubyBwcm9maWxlZC9laGFuZGxlci5vIFwKKwlwcm9maWxlZC9tZXNzYWdlLm8gcHJvZmlsZWQvcHJvYmxlbS5vIHByb2ZpbGVkL3F1b3RhLm8gXAorCXByb2ZpbGVkL3JlY292ZXJ5Lm8gcHJvZmlsZWQvcmVnaW9uLm8gcHJvZmlsZWQvcmV2b2tlLm8gXAorCXByb2ZpbGVkL2VhX3JlZmNvdW50Lm8gcHJvZmlsZWQvcmVoYXNoLm8gcHJvZmlsZWQvcHJvZmlsZS5vIFwKKwlwcm9maWxlZC9jcmMzMi5vIHByb2ZpbGVkL3Byb2ZfZXJyLm8gcHJvZmlsZWQvbG9nZmlsZS5vIFwKKwlwcm9maWxlZC9zaWdjYXRjaGVyLm8KKworU1JDUz0gJChzcmNkaXIpL2UyZnNjay5jIFwKKwkkKHNyY2RpcikvY3JjMzIuYyBcCisJJChzcmNkaXIpL2dlbl9jcmMzMnRhYmxlLmMgXAorCSQoc3JjZGlyKS9kaWN0LmMgXAorCSQoc3JjZGlyKS9zdXBlci5jIFwKKwkkKHNyY2RpcikvcGFzczEuYyBcCisJJChzcmNkaXIpL3Bhc3MxYi5jIFwKKwkkKHNyY2RpcikvcGFzczIuYyBcCisJJChzcmNkaXIpL3Bhc3MzLmMgXAorCSQoc3JjZGlyKS9wYXNzNC5jIFwKKwkkKHNyY2RpcikvcGFzczUuYyBcCisJJChzcmNkaXIpL2pvdXJuYWwuYyBcCisJJChzcmNkaXIpL3JlY292ZXJ5LmMgXAorCSQoc3JjZGlyKS9yZXZva2UuYyBcCisJJChzcmNkaXIpL2JhZGJsb2Nrcy5jIFwKKwkkKHNyY2RpcikvdXRpbC5jIFwKKwkkKHNyY2RpcikvdW5peC5jIFwKKwkkKHNyY2RpcikvZGlyaW5mby5jIFwKKwkkKHNyY2RpcikvZHhfZGlyaW5mby5jIFwKKwkkKHNyY2RpcikvZWhhbmRsZXIuYyBcCisJJChzcmNkaXIpL3Byb2JsZW0uYyBcCisJJChzcmNkaXIpL21lc3NhZ2UuYyBcCisJJChzcmNkaXIpL2VhX3JlZmNvdW50LmMgXAorCSQoc3JjZGlyKS9yZWhhc2guYyBcCisJJChzcmNkaXIpL3JlZ2lvbi5jIFwKKwkkKHNyY2RpcikvcHJvZmlsZS5jIFwKKwkkKHNyY2Rpcikvc2lnY2F0Y2hlci5jIFwKKwkkKHNyY2RpcikvbG9nZmlsZS5jIFwKKwlwcm9mX2Vyci5jIFwKKwkkKHNyY2RpcikvcXVvdGEuYyBcCisJJChNVFJBQ0VfU1JDKQorCithbGw6OiBwcm9maWxlZCAkKFBST0dTKSBlMmZzY2sgJChNQU5QQUdFUykgJChGTUFOUEFHRVMpCisKK0BQUk9GSUxFX0NNVEBhbGw6OiBlMmZzY2sucHJvZmlsZWQKKworcHJvZl9lcnIuYyBwcm9mX2Vyci5oOiBwcm9mX2Vyci5ldAorCSQoRSkgIglDT01QSUxFX0VUIHByb2ZfZXJyLmV0IgorCSQoUSkgJChDT01QSUxFX0VUKSAkKHNyY2RpcikvcHJvZl9lcnIuZXQKKworZTJmc2NrOiAkKE9CSlMpICAkKERFUExJQlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChMRCkgJChBTExfTERGTEFHUykgJChSRFlOQU1JQykgLW8gZTJmc2NrICQoT0JKUykgJChMSUJTKSAKKworZTJmc2NrLnN0YXRpYzogJChPQkpTKSAkKFNUQVRJQ19ERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoTEQpICQoTERGTEFHU19TVEFUSUMpIC1vIGUyZnNjay5zdGF0aWMgJChPQkpTKSAkKFNUQVRJQ19MSUJTKSAKKworZTJmc2NrLnByb2ZpbGVkOiAkKE9CSlMpICAkKFBST0ZJTEVEX0RFUExJQlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChMRCkgJChBTExfTERGTEFHUykgLWcgLXBnIC1vIGUyZnNjay5wcm9maWxlZCAkKFBST0ZJTEVEX09CSlMpIFwKKwkJJChQUk9GSUxFRF9MSUJTKSAKKworZ2VuX2NyYzMydGFibGU6ICQoc3JjZGlyKS9nZW5fY3JjMzJ0YWJsZS5jCisJJChFKSAiCUNDICRAIgorCSQoUSkgJChCVUlMRF9DQykgJChCVUlMRF9DRkxBR1MpICQoQlVJTERfTERGTEFHUykgLW8gZ2VuX2NyYzMydGFibGUgXAorCQkkKHNyY2RpcikvZ2VuX2NyYzMydGFibGUuYworCitjcmMzMnRhYmxlLmg6IGdlbl9jcmMzMnRhYmxlCisJJChFKSAiCUdFTjMyVEFCTEUgJEAiCisJJChRKSAuL2dlbl9jcmMzMnRhYmxlID4gY3JjMzJ0YWJsZS5oCisKK3RzdF9zaWdjYXRjaGVyOiAkKHNyY2Rpcikvc2lnY2F0Y2hlci5jIHNpZ2NhdGNoZXIubworCSQoRSkgIglDQyAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgJChBTExfTERGTEFHUykgJChSRFlOQU1JQykgXAorCQkkKHNyY2Rpcikvc2lnY2F0Y2hlci5jIC1EREVCVUcgLW8gdHN0X3NpZ2NhdGNoZXIKKwordHN0X3Byb2JsZW06ICQoc3JjZGlyKS9wcm9ibGVtLmMgJChzcmNkaXIpL3Byb2JsZW0uaCAkKExJQkVYVDJGUykgXAorCSQoREVQTElCQ09NX0VSUikKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgJChBTExfTERGTEFHUykgLW8gdHN0X3Byb2JsZW0gXAorCQkkKHNyY2RpcikvcHJvYmxlbS5jIC1EVU5JVFRFU1QgJChMSUJFWFQyRlMpICQoTElCQ09NX0VSUikgXAorCQkkKExJQklOVEwpICQoU1lTTElCUykKKwordHN0X2NyYzMyOiAkKHNyY2RpcikvY3JjMzIuYyAkKExJQkVYVDJGUykgJChERVBMSUJDT01fRVJSKQorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgJChBTExfQ0ZMQUdTKSAtbyB0c3RfY3JjMzIgJChzcmNkaXIpL2NyYzMyLmMgXAorCQktRFVOSVRURVNUICQoTElCRVhUMkZTKSAkKExJQkNPTV9FUlIpICQoU1lTTElCUykKKwordHN0X3JlZmNvdW50OiBlYV9yZWZjb3VudC5jICQoREVQTElCQ09NX0VSUikKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfcmVmY291bnQgJChzcmNkaXIpL2VhX3JlZmNvdW50LmMgXAorCQkkKEFMTF9DRkxBR1MpICQoQUxMX0xERkxBR1MpIC1EVEVTVF9QUk9HUkFNIFwKKwkJJChMSUJDT01fRVJSKSAkKExJQkVYVDJGUykgJChTWVNMSUJTKQorCit0c3RfbG9nZmlsZTogJChzcmNkaXIpL2xvZ2ZpbGUuYworCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9sb2dmaWxlICQoc3JjZGlyKS9sb2dmaWxlLmMgXAorCQkkKEFMTF9DRkxBR1MpICQoQUxMX0xERkxBR1MpIC1EVEVTVF9QUk9HUkFNICQoU1lTTElCUykKKwordHN0X3JlZ2lvbjogcmVnaW9uLmMgJChERVBMSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9yZWdpb24gJChzcmNkaXIpL3JlZ2lvbi5jIFwKKwkJJChBTExfQ0ZMQUdTKSAkKEFMTF9MREZMQUdTKSAtRFRFU1RfUFJPR1JBTSBcCisJCSQoTElCQ09NX0VSUikgJChTWVNMSUJTKQorCitjaGVjazo6IHRzdF9yZWZjb3VudCB0c3RfcmVnaW9uIHRzdF9jcmMzMiB0c3RfcHJvYmxlbQorCSQoVEVTVEVOVikgLi90c3RfcmVmY291bnQKKwkkKFRFU1RFTlYpIC4vdHN0X3JlZ2lvbgorCSQoVEVTVEVOVikgLi90c3RfY3JjMzIKKwkkKFRFU1RFTlYpIC4vdHN0X3Byb2JsZW0KKworZXh0ZW5kOiBleHRlbmQubworCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoTEQpICQoQUxMX0xERkxBR1MpIC1vIGV4dGVuZCBleHRlbmQubyAkKENIRUNLTElCKQorCitmbHVzaGI6IGZsdXNoYi5vCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChMRCkgJChBTExfTERGTEFHUykgLW8gZmx1c2hiIGZsdXNoYi5vICQoQ0hFQ0tMSUIpCisKK2lzY2FuOiBpc2Nhbi5vIHV0aWwubyBlaGFuZGxlci5vICQoREVQTElCUykKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKExEKSAkKEFMTF9MREZMQUdTKSAtbyBpc2NhbiBpc2Nhbi5vIHV0aWwubyBlaGFuZGxlci5vICQoTElCUykKKwordGVzdF9wcm9maWxlOiAkKHNyY2RpcikvcHJvZmlsZS5jIHByb2ZpbGVfaGVscGVycy5vIGFyZ3ZfcGFyc2UubyBcCisJCXByb2ZfZXJyLm8gcHJvZmlsZS5oICQoREVQU1RBVElDX0xJQkNPTV9FUlIpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdGVzdF9wcm9maWxlIC1EREVCVUdfUFJPR1JBTSAkKHNyY2RpcikvcHJvZmlsZS5jIHByb2ZfZXJyLm8gXAorCQlwcm9maWxlX2hlbHBlcnMubyBhcmd2X3BhcnNlLm8gJChTVEFUSUNfTElCQ09NX0VSUikgXAorCQkkKEFMTF9DRkxBR1MpCisKK3Byb2ZpbGVkOgorQFBST0ZJTEVfQ01UQAkkKEUpICIJTUtESVIgJEAiCitAUFJPRklMRV9DTVRACSQoUSkgbWtkaXIgcHJvZmlsZWQKKworZTJmc2NrLjg6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9lMmZzY2suOC5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9lMmZzY2suOC5pbiBlMmZzY2suOAorCitlMmZzY2suY29uZi41OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvZTJmc2NrLmNvbmYuNS5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9lMmZzY2suY29uZi41LmluIGUyZnNjay5jb25mLjUKKworaW5zdGFsbGRpcnM6CisJJChFKSAiCU1LSU5TVEFMTERJUlMgJChyb290X3NiaW5kaXIpICQobWFuOGRpcikiCisJJChRKSAkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikgXAorCQkkKERFU1RESVIpJChtYW44ZGlyKSAkKERFU1RESVIpJChtYW41ZGlyKQorCitpbnN0YWxsOiAkKFBST0dTKSAkKE1BTlBBR0VTKSAkKEZNQU5QQUdFUykgaW5zdGFsbGRpcnMKKwkkKFEpIGZvciBpIGluICQoUFJPR1MpOyBkbyBcCisJCSQoRVMpICIJSU5TVEFMTCAkKHJvb3Rfc2JpbmRpcikvJCRpIjsgXAorCQkkKElOU1RBTExfUFJPR1JBTSkgJCRpICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvJCRpOyBcCisJZG9uZQorCSQoUSkgZm9yIGkgaW4gZXh0MiBleHQzIGV4dDQgZXh0NGRldjsgZG8gXAorCQkkKEVTKSAiCUxJTksgJChyb290X3NiaW5kaXIpL2ZzY2suJCRpIjsgXAorCQkoY2QgJChERVNURElSKSQocm9vdF9zYmluZGlyKTsgXAorCQkJJChMTikgJChMSU5LX0lOU1RBTExfRkxBR1MpIGUyZnNjayBmc2NrLiQkaSk7IFwKKwlkb25lCisJJChRKSBmb3IgaSBpbiAkKE1BTlBBR0VTKTsgZG8gXAorCQlmb3IgaiBpbiAkKENPTVBSRVNTX0VYVCk7IGRvIFwKKwkJCSQoUk0pIC1mICQoREVTVERJUikkKG1hbjhkaXIpLyQkaS4kJGo7IFwKKwkJZG9uZTsgXAorCQkkKEVTKSAiCUlOU1RBTExfREFUQSAkKG1hbjhkaXIpLyQkaSI7IFwKKwkJJChJTlNUQUxMX0RBVEEpICQkaSAkKERFU1RESVIpJChtYW44ZGlyKS8kJGk7IFwKKwlkb25lCisJJChRKSBmb3IgaSBpbiAkKEZNQU5QQUdFUyk7IGRvIFwKKwkJZm9yIGogaW4gJChDT01QUkVTU19FWFQpOyBkbyBcCisJCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW41ZGlyKS8kJGkuJCRqOyBcCisJCWRvbmU7IFwKKwkJJChFUykgIglJTlNUQUxMX0RBVEEgJChtYW41ZGlyKS8kJGkiOyBcCisJCSQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQobWFuNWRpcikvJCRpOyBcCisJZG9uZQorCSQoUSkgZm9yIGkgaW4gZXh0MiBleHQzIGV4dDQgZXh0NGRldjsgZG8gXAorCQkkKEVTKSAiCUxJTksgJChtYW44ZGlyKS9mc2NrLiQkaS44IjsgXAorCQkoY2QgJChERVNURElSKSQobWFuOGRpcik7IFwKKwkJCSQoTE4pICQoTElOS19JTlNUQUxMX0ZMQUdTKSBlMmZzY2suOCBmc2NrLiQkaS44KTsgXAorCWRvbmUKKworaW5zdGFsbC1zdHJpcDogaW5zdGFsbAorCSQoUSkgZm9yIGkgaW4gJChQUk9HUyk7IGRvIFwKKwkJJChFUykgIglTVFJJUCAkKHJvb3Rfc2JpbmRpcikvJCRpIjsgXAorCQkkKFNUUklQKSAkKERFU1RESVIpJChyb290X3NiaW5kaXIpLyQkaTsgXAorCWRvbmUKKwordW5pbnN0YWxsOgorCWZvciBpIGluICQoUFJPR1MpOyBkbyBcCisJCSQoUk0pIC1mICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvJCRpOyBcCisJZG9uZQorCSQoUk0pIC1mICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvZnNjay5leHQyIFwKKwkJJChERVNURElSKSQocm9vdF9zYmluZGlyKS9mc2NrLmV4dDMgXAorCQkkKERFU1RESVIpJChyb290X3NiaW5kaXIpL2ZzY2suZXh0NCBcCisJCSQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvZnNjay5leHQ0ZGV2CisJZm9yIGkgaW4gJChNQU5QQUdFUyk7IGRvIFwKKwkJJChSTSkgLWYgJChERVNURElSKSQobWFuOGRpcikvJCRpOyBcCisJZG9uZQorCWZvciBpIGluICQoRk1BTlBBR0VTKTsgZG8gXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW41ZGlyKS8kJGk7IFwKKwlkb25lCisJJChSTSkgLWYgJChERVNURElSKSQocm9vdF9zYmluZGlyKS9mc2NrLmV4dDIgXAorCQkJJChERVNURElSKSQocm9vdF9zYmluZGlyKS9mc2NrLmV4dDMgXAorCQkJJChERVNURElSKSQocm9vdF9zYmluZGlyKS9mc2NrLmV4dDQgXAorCQkJJChERVNURElSKSQocm9vdF9zYmluZGlyKS9mc2NrLmV4dDRkZXYKKworY2xlYW46OgorCSQoUk0pIC1mICQoUFJPR1MpIFwjKiAqXCMgKi5zICoubyAqLmEgKn4gY29yZSBlMmZzY2suc3RhdGljIFwKKwkJZTJmc2NrLnNoYXJlZCBlMmZzY2sucHJvZmlsZWQgZmx1c2hiIGUyZnNjay44IFwKKwkJdHN0X3Byb2JsZW0gdHN0X2NyYzMyIHRzdF9yZWdpb24gdHN0X3JlZmNvdW50IGdlbl9jcmMzMnRhYmxlIFwKKwkJY3JjMzJ0YWJsZS5oIGUyZnNjay5jb25mLjUgcHJvZl9lcnIuYyBwcm9mX2Vyci5oIFwKKwkJdGVzdF9wcm9maWxlCisJJChSTSkgLXJmIHByb2ZpbGVkCisKK21vc3RseWNsZWFuOiBjbGVhbgorZGlzdGNsZWFuOiBjbGVhbgorCSQoUk0pIC1mIC5kZXBlbmQgTWFrZWZpbGUgJChzcmNkaXIpL1RBR1MgJChzcmNkaXIpL01ha2VmaWxlLmluLm9sZAorCisjICsrKyBEZXBlbmRlbmN5IGxpbmUgZWF0ZXIgKysrCisjIAorIyBNYWtlZmlsZSBkZXBlbmRlbmNpZXMgZm9sbG93LiAgVGhpcyBtdXN0IGJlIHRoZSBsYXN0IHNlY3Rpb24gaW4KKyMgdGhlIE1ha2VmaWxlLmluIGZpbGUKKyMKK2UyZnNjay5vOiAkKHNyY2RpcikvZTJmc2NrLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMmZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaCAkKHNyY2RpcikvcHJvYmxlbS5oCitjcmMzMi5vOiAkKHNyY2RpcikvY3JjMzIuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UyZnNjay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oICQoc3JjZGlyKS9jcmMzMmRlZnMuaCBjcmMzMnRhYmxlLmgKK2dlbl9jcmMzMnRhYmxlLm86ICQoc3JjZGlyKS9nZW5fY3JjMzJ0YWJsZS5jICQoc3JjZGlyKS9jcmMzMmRlZnMuaAorZGljdC5vOiAkKHNyY2RpcikvZGljdC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZGljdC5oCitzdXBlci5vOiAkKHNyY2Rpcikvc3VwZXIuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UyZnNjay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oICQoc3JjZGlyKS9wcm9ibGVtLmgKK3Bhc3MxLm86ICQoc3JjZGlyKS9wYXNzMS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggXAorICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmggJChzcmNkaXIpL3Byb2JsZW0uaAorcGFzczFiLm86ICQoc3JjZGlyKS9wYXNzMWIuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZTJmc2NrLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oICQoc3JjZGlyKS9wcm9ibGVtLmggJChzcmNkaXIpL2RpY3QuaAorcGFzczIubzogJChzcmNkaXIpL3Bhc3MyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMmZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaCAkKHNyY2RpcikvcHJvYmxlbS5oICQoc3JjZGlyKS9kaWN0LmgKK3Bhc3MzLm86ICQoc3JjZGlyKS9wYXNzMy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggXAorICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmggJChzcmNkaXIpL3Byb2JsZW0uaAorcGFzczQubzogJChzcmNkaXIpL3Bhc3M0LmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMmZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaCAkKHNyY2RpcikvcHJvYmxlbS5oCitwYXNzNS5vOiAkKHNyY2RpcikvcGFzczUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UyZnNjay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oICQoc3JjZGlyKS9wcm9ibGVtLmgKK2pvdXJuYWwubzogJChzcmNkaXIpL2pvdXJuYWwuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2pmc191c2VyLmggJChzcmNkaXIpL2UyZnNjay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtamJkLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9qZnNfY29tcGF0LmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2tlcm5lbC1saXN0LmggXAorICQoc3JjZGlyKS9wcm9ibGVtLmgKK3JlY292ZXJ5Lm86ICQoc3JjZGlyKS9yZWNvdmVyeS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvamZzX3VzZXIuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggXAorICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2tlcm5lbC1qYmQuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2pmc19jb21wYXQuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWxpc3QuaAorcmV2b2tlLm86ICQoc3JjZGlyKS9yZXZva2UuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2pmc191c2VyLmggJChzcmNkaXIpL2UyZnNjay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtamJkLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9qZnNfY29tcGF0LmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2tlcm5lbC1saXN0LmgKK2JhZGJsb2Nrcy5vOiAkKHNyY2RpcikvYmFkYmxvY2tzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2UyZnNjay5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAordXRpbC5vOiAkKHNyY2RpcikvdXRpbC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggXAorICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmgKK3VuaXgubzogJChzcmNkaXIpL3VuaXguYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9lMmZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaCAkKHNyY2RpcikvcHJvYmxlbS5oIFwKKyAkKHRvcF9zcmNkaXIpL3ZlcnNpb24uaAorZGlyaW5mby5vOiAkKHNyY2RpcikvZGlyaW5mby5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggXAorICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL3RkYi5oCitkeF9kaXJpbmZvLm86ICQoc3JjZGlyKS9keF9kaXJpbmZvLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMmZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorZWhhbmRsZXIubzogJChzcmNkaXIpL2VoYW5kbGVyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMmZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorcHJvYmxlbS5vOiAkKHNyY2RpcikvcHJvYmxlbS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggXAorICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmggJChzcmNkaXIpL3Byb2JsZW0uaCAkKHNyY2RpcikvcHJvYmxlbVAuaAorbWVzc2FnZS5vOiAkKHNyY2RpcikvbWVzc2FnZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggXAorICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmggJChzcmNkaXIpL3Byb2JsZW0uaAorZWFfcmVmY291bnQubzogJChzcmNkaXIpL2VhX3JlZmNvdW50LmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMmZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorcmVoYXNoLm86ICQoc3JjZGlyKS9yZWhhc2guYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UyZnNjay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oICQoc3JjZGlyKS9wcm9ibGVtLmgKK3JlZ2lvbi5vOiAkKHNyY2RpcikvcmVnaW9uLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMmZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorcHJvZmlsZS5vOiAkKHNyY2RpcikvcHJvZmlsZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaAorc2lnY2F0Y2hlci5vOiAkKHNyY2Rpcikvc2lnY2F0Y2hlci5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggXAorICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmgKK2xvZ2ZpbGUubzogJChzcmNkaXIpL2xvZ2ZpbGUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UyZnNjay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oCitwcm9mX2Vyci5vOiBwcm9mX2Vyci5jCitxdW90YS5vOiAkKHNyY2RpcikvcXVvdGEuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UyZnNjay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oICQoc3JjZGlyKS9wcm9ibGVtLmgKZGlmZiAtLWdpdCBhL2UyZnNjay9hcmd2X3BhcnNlLmMgYi9lMmZzY2svYXJndl9wYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMmY2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svYXJndl9wYXJzZS5jCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogYXJndl9wYXJzZS5jIC0tLSB1dGlsaXR5IGZ1bmN0aW9uIGZvciBwYXJzaW5nIGEgc3RyaW5nIGludG8gYQorICogCWFyZ2MsIGFyZ3YgYXJyYXkuCisgKgorICogVGhpcyBmaWxlIGRlZmluZXMgYSBmdW5jdGlvbiBhcmd2X3BhcnNlKCkgd2hpY2ggcGFyc2luZyBhCisgKiBwYXNzZWQtaW4gc3RyaW5nLCBoYW5kbGluZyBkb3VibGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgYW5kCisgKiBjcmVhdGVzIGFuIGFsbG9jYXRlZCBhcmd2IHZlY3RvciB3aGljaCBjYW4gYmUgZnJlZWQgdXNpbmcgdGhlCisgKiBhcmd2X2ZyZWUoKSBmdW5jdGlvbi4KKyAqCisgKiBTZWUgYXJndl9wYXJzZS5oIGZvciB0aGUgZm9ybWFsIGRlZmluaXRpb24gb2YgdGhlIGZ1bmN0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgMTk5OSBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yCisgKiBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsCisgKiBjb3BpZXMuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFT0RPUkUgVFMnTyAoVEhFCisgKiBBVVRIT1IpIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorICogSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCisgKiBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyAqIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SCisgKiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLiAgKElzbid0CisgKiBpdCBzaWNrIHRoYXQgdGhlIFUuUy4gY3VsdHVyZSBvZiBsYXdzdWl0LWhhcHB5IGxhd3llcnMgcmVxdWlyZXMKKyAqIHRoaXMga2luZCBvZiBkaXNjbGFpbWVyPykKKyAqCisgKiBWZXJzaW9uIDEuMSwgbW9kaWZpZWQgMi8yNy8xOTk5CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiYXJndl9wYXJzZS5oIgorCisjZGVmaW5lIFNUQVRFX1dISVRFU1BBQ0UJMQorI2RlZmluZSBTVEFURV9UT0tFTgkJMgorI2RlZmluZSBTVEFURV9RVU9URUQJCTMKKworLyoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitpbnQgYXJndl9wYXJzZShjaGFyICppbl9idWYsIGludCAqcmV0X2FyZ2MsIGNoYXIgKioqcmV0X2FyZ3YpCit7CisJaW50CWFyZ2MgPSAwLCBtYXhfYXJnYyA9IDA7CisJY2hhciAJKiphcmd2LCAqKm5ld19hcmd2LCAqYnVmLCBjaDsKKwljaGFyCSpjcCA9IDAsICpvdXRjcCA9IDA7CisJaW50CXN0YXRlID0gU1RBVEVfV0hJVEVTUEFDRTsKKworCWJ1ZiA9IG1hbGxvYyhzdHJsZW4oaW5fYnVmKSsxKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC0xOworCisJbWF4X2FyZ2MgPSAwOyBhcmdjID0gMDsgYXJndiA9IDA7CisJb3V0Y3AgPSBidWY7CisJZm9yIChjcCA9IGluX2J1ZjsgKGNoID0gKmNwKTsgY3ArKykgeworCQlpZiAoc3RhdGUgPT0gU1RBVEVfV0hJVEVTUEFDRSkgeworCQkJaWYgKGlzc3BhY2UoKGludCkgY2gpKQorCQkJCWNvbnRpbnVlOworCQkJLyogTm90IHdoaXRlc3BhY2UsIHNvIHN0YXJ0IGEgbmV3IHRva2VuICovCisJCQlzdGF0ZSA9IFNUQVRFX1RPS0VOOworCQkJaWYgKGFyZ2MgPj0gbWF4X2FyZ2MpIHsKKwkJCQltYXhfYXJnYyArPSAzOworCQkJCW5ld19hcmd2ID0gcmVhbGxvYyhhcmd2LAorCQkJCQkJICAobWF4X2FyZ2MrMSkqc2l6ZW9mKGNoYXIgKikpOworCQkJCWlmICghbmV3X2FyZ3YpIHsKKwkJCQkJZnJlZShhcmd2KTsKKwkJCQkJZnJlZShidWYpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJCWFyZ3YgPSBuZXdfYXJndjsKKwkJCX0KKwkJCWFyZ3ZbYXJnYysrXSA9IG91dGNwOworCQl9CisJCWlmIChzdGF0ZSA9PSBTVEFURV9RVU9URUQpIHsKKwkJCWlmIChjaCA9PSAnIicpCisJCQkJc3RhdGUgPSBTVEFURV9UT0tFTjsKKwkJCWVsc2UKKwkJCQkqb3V0Y3ArKyA9IGNoOworCQkJY29udGludWU7CisJCX0KKwkJLyogTXVzdCBiZSBwcm9jZXNzaW5nIGNoYXJhY3RlcnMgaW4gYSB3b3JkICovCisJCWlmIChpc3NwYWNlKChpbnQpIGNoKSkgeworCQkJLyoKKwkJCSAqIFRlcm1pbmF0ZSB0aGUgY3VycmVudCB3b3JkIGFuZCBzdGFydAorCQkJICogbG9va2luZyBmb3IgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCB3b3JkLgorCQkJICovCisJCQkqb3V0Y3ArKyA9IDA7CisJCQlzdGF0ZSA9IFNUQVRFX1dISVRFU1BBQ0U7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY2ggPT0gJyInKSB7CisJCQlzdGF0ZSA9IFNUQVRFX1FVT1RFRDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjaCA9PSAnXFwnKSB7CisJCQljaCA9ICorK2NwOworCQkJc3dpdGNoIChjaCkgeworCQkJY2FzZSAnXDAnOgorCQkJCWNoID0gJ1xcJzsgY3AtLTsgYnJlYWs7CisJCQljYXNlICduJzoKKwkJCQljaCA9ICdcbic7IGJyZWFrOworCQkJY2FzZSAndCc6CisJCQkJY2ggPSAnXHQnOyBicmVhazsKKwkJCWNhc2UgJ2InOgorCQkJCWNoID0gJ1xiJzsgYnJlYWs7CisJCQl9CisJCX0KKwkJKm91dGNwKysgPSBjaDsKKwl9CisJaWYgKHN0YXRlICE9IFNUQVRFX1dISVRFU1BBQ0UpCisJCSpvdXRjcCsrID0gJ1wwJzsKKwlpZiAoYXJndiA9PSAwKSB7CisJCWFyZ3YgPSBtYWxsb2Moc2l6ZW9mKGNoYXIgKikpOworCQlmcmVlKGJ1Zik7CisJfQorCWFyZ3ZbYXJnY10gPSAwOworCWlmIChyZXRfYXJnYykKKwkJKnJldF9hcmdjID0gYXJnYzsKKwlpZiAocmV0X2FyZ3YpCisJCSpyZXRfYXJndiA9IGFyZ3Y7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXJndl9mcmVlKGNoYXIgKiphcmd2KQoreworCWZyZWUoKmFyZ3YpOworCWZyZWUoYXJndik7Cit9CisKKyNpZmRlZiBERUJVRworLyoKKyAqIEZvciBkZWJ1Z2dpbmcKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludAlhYywgcmV0OworCWNoYXIJKiphdiwgKipjcHA7CisJY2hhcglidWZbMjU2XTsKKworCXdoaWxlICghZmVvZihzdGRpbikpIHsKKwkJaWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCXJldCA9IGFyZ3ZfcGFyc2UoYnVmLCAmYWMsICZhdik7CisJCWlmIChyZXQgIT0gMCkgeworCQkJcHJpbnRmKCJBcmd2X3BhcnNlIHJldHVybmVkICVkIVxuIiwgcmV0KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXByaW50ZigiQXJndl9wYXJzZSByZXR1cm5lZCAlZCBhcmd1bWVudHMuLi5cbiIsIGFjKTsKKwkJZm9yIChjcHAgPSBhdjsgKmNwcDsgY3BwKyspIHsKKwkJCWlmIChjcHAgIT0gYXYpCisJCQkJcHJpbnRmKCIsICIpOworCQkJcHJpbnRmKCInJXMnIiwgKmNwcCk7CisJCX0KKwkJcHJpbnRmKCJcbiIpOworCQlhcmd2X2ZyZWUoYXYpOworCX0KKwlleGl0KDApOworfQorI2VuZGlmIC8qIERFQlVHICovCmRpZmYgLS1naXQgYS9lMmZzY2svYXJndl9wYXJzZS5oIGIvZTJmc2NrL2FyZ3ZfcGFyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmY0NTY0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL2FyZ3ZfcGFyc2UuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogYXJndl9wYXJzZS5oIC0tLSBoZWFkZXIgZmlsZSBmb3IgdGhlIGFyZ3YgcGFyc2VyLgorICoKKyAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBmdW5jdGlvbnMgYXJndl9wYXJzZSgpIGFuZAorICogYXJndl9mcmVlKCkuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpbnQgYXJndl9wYXJzZShjaGFyICppbl9idWYsIGludCAqcmV0X2FyZ2MsIGNoYXIgKioqcmV0X2FyZ3YpCisgKgorICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBpdHMgZmlyc3QgYXJndW1lbnQgYSBzdHJpbmcgd2hpY2ggaXQgd2lsbAorICogcGFyc2UgaW50byBhbiBhcmd2IGFyZ3VtZW50IHZlY3Rvciwgd2l0aCBlYWNoIHdoaXRlLXNwYWNlIHNlcGFyYXRlZAorICogd29yZCBwbGFjZWQgaW50byBpdHMgb3duIHNsb3QgaW4gdGhlIGFyZ3YuICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMKKyAqIGRvdWJsZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzIHNvIHRoYXQgdGhlIHBhcnNlZCB3b3JkcyBjYW4gY29udGFpbgorICogc3BlY2lhbCBjaGFyYWN0ZXJzLiAgIFRoZSBjb3VudCBvZiB0aGUgbnVtYmVyIHdvcmRzIGZvdW5kIGluIHRoZQorICogcGFyc2VkIHN0cmluZywgYXMgd2VsbCBhcyB0aGUgYXJndW1lbnQgdmVjdG9yLCBhcmUgcmV0dXJuZWQgaW50bworICogcmV0X2FyZ2MgYW5kIHJldF9hcmd2LCByZXNwZWN0aXZlbHkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGV4dGVybiB2b2lkIGFyZ3ZfZnJlZShjaGFyICoqYXJndik7CisgKgorICogVGhpcyBmdW5jdGlvbiBmcmVlcyB0aGUgYXJndW1lbnQgdmVjdG9yIGNyZWF0ZWQgYnkgYXJndl9wYXJzZSgpLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IDE5OTkgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvcgorICogYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbAorICogY29waWVzLiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRU9ET1JFIFRTJ08gKFRIRQorICogQVVUSE9SKSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKKyAqIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAorICogSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisgKiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUgorICogSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4gIChJc24ndAorICogaXQgc2ljayB0aGF0IHRoZSBVLlMuIGN1bHR1cmUgb2YgbGF3c3VpdC1oYXBweSBsYXd5ZXJzIHJlcXVpcmVzCisgKiB0aGlzIGtpbmQgb2YgZGlzY2xhaW1lcj8pCisgKgorICogVmVyc2lvbiAxLjEsIG1vZGlmaWVkIDIvMjcvMTk5OQorICovCisKK2V4dGVybiBpbnQgYXJndl9wYXJzZShjaGFyICppbl9idWYsIGludCAqcmV0X2FyZ2MsIGNoYXIgKioqcmV0X2FyZ3YpOworZXh0ZXJuIHZvaWQgYXJndl9mcmVlKGNoYXIgKiphcmd2KTsKZGlmZiAtLWdpdCBhL2UyZnNjay9iYWRibG9ja3MuYyBiL2UyZnNjay9iYWRibG9ja3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjM2NDFiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL2JhZGJsb2Nrcy5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogYmFkYmxvY2tzLmMgLS0tIHJlcGxhY2UvYXBwZW5kIGJhZCBibG9ja3MgdG8gdGhlIGJhZCBibG9jayBpbm9kZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZQorICogcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGV0L2NvbV9lcnIuaD4KKyNpbmNsdWRlICJlMmZzY2suaCIKKworc3RhdGljIGludCBjaGVja19iYl9pbm9kZV9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsIGJsa190ICpibG9ja19uciwgaW50IGJsb2NrY250LAorCQkJCSB2b2lkICpwcml2X2RhdGEpOworCisKK3N0YXRpYyB2b2lkIGludmFsaWRfYmxvY2soZXh0Ml9maWxzeXMgZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLCBibGtfdCBibGspCit7CisJcHJpbnRmKF8oIkJhZCBibG9jayAldSBvdXQgb2YgcmFuZ2U7IGlnbm9yZWQuXG4iKSwgYmxrKTsKKwlyZXR1cm47Cit9CisKK3ZvaWQgcmVhZF9iYWRfYmxvY2tzX2ZpbGUoZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICpiYWRfYmxvY2tzX2ZpbGUsCisJCQkgIGludCByZXBsYWNlX2JhZF9ibG9ja3MpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWVycmNvZGVfdAlyZXR2YWw7CisJYmFkYmxvY2tzX2xpc3QJYmJfbGlzdCA9IDA7CisJRklMRQkJKmY7CisJY2hhcgkJYnVmWzEwMjRdOworCisJZTJmc2NrX3JlYWRfYml0bWFwcyhjdHgpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIGJhZCBibG9jayBpbm9kZSBpcyBzYW5lLiAgSWYgdGhlcmUgYXJlIGFueQorCSAqIGlsbGVnYWwgYmxvY2tzLCBjbGVhciB0aGVtLgorCSAqLworCXJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlKGZzLCBFWFQyX0JBRF9JTk8sIDAsIDAsCisJCQkJICAgICAgY2hlY2tfYmJfaW5vZGVfYmxvY2tzLCAwKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJmc19ibG9ja19pdGVyYXRlIiwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgc2FuaXR5IGNoZWNraW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIikpOworCQlnb3RvIGZhdGFsOworCX0KKworCS8qCisJICogSWYgd2UncmUgYXBwZW5kaW5nIHRvIHRoZSBiYWQgYmxvY2tzIGlub2RlLCByZWFkIGluIHRoZQorCSAqIGN1cnJlbnQgYmFkIGJsb2Nrcy4KKwkgKi8KKwlpZiAoIXJlcGxhY2VfYmFkX2Jsb2NrcykgeworCQlyZXR2YWwgPSBleHQyZnNfcmVhZF9iYl9pbm9kZShmcywgJmJiX2xpc3QpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKCJleHQyZnNfcmVhZF9iYl9pbm9kZSIsIHJldHZhbCwgIiVzIiwKKwkJCQlfKCJ3aGlsZSByZWFkaW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIikpOworCQkJZ290byBmYXRhbDsKKwkJfQorCX0KKworCS8qCisJICogTm93IHJlYWQgaW4gdGhlIGJhZCBibG9ja3MgZnJvbSB0aGUgZmlsZTsgaWYKKwkgKiBiYWRfYmxvY2tzX2ZpbGUgaXMgbnVsbCwgdGhlbiB0cnkgdG8gcnVuIHRoZSBiYWRibG9ja3MKKwkgKiBjb21tYW5kLgorCSAqLworCWlmIChiYWRfYmxvY2tzX2ZpbGUpIHsKKwkJZiA9IGZvcGVuKGJhZF9ibG9ja3NfZmlsZSwgInIiKTsKKwkJaWYgKCFmKSB7CisJCQljb21fZXJyKCJyZWFkX2JhZF9ibG9ja3NfZmlsZSIsIGVycm5vLAorCQkJCV8oIndoaWxlIHRyeWluZyB0byBvcGVuICVzIiksIGJhZF9ibG9ja3NfZmlsZSk7CisJCQlnb3RvIGZhdGFsOworCQl9CisJfSBlbHNlIHsKKwkJc3ByaW50ZihidWYsICJiYWRibG9ja3MgLWIgJWQgLVggJXMlcyVzICVsbHUiLCBmcy0+YmxvY2tzaXplLAorCQkJKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pID8gIiIgOiAiLXMgIiwKKwkJCShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1dSSVRFQ0hFQ0spID8gIi1uICIgOiAiIiwKKwkJCWZzLT5kZXZpY2VfbmFtZSwgZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpLTEpOworCQlmID0gcG9wZW4oYnVmLCAiciIpOworCQlpZiAoIWYpIHsKKwkJCWNvbV9lcnIoInJlYWRfYmFkX2Jsb2Nrc19maWxlIiwgZXJybm8sCisJCQkJXygid2hpbGUgdHJ5aW5nIHBvcGVuICclcyciKSwgYnVmKTsKKwkJCWdvdG8gZmF0YWw7CisJCX0KKwl9CisJcmV0dmFsID0gZXh0MmZzX3JlYWRfYmJfRklMRShmcywgZiwgJmJiX2xpc3QsIGludmFsaWRfYmxvY2spOworCWlmIChiYWRfYmxvY2tzX2ZpbGUpCisJCWZjbG9zZShmKTsKKwllbHNlCisJCXBjbG9zZShmKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJmc19yZWFkX2JiX0ZJTEUiLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSByZWFkaW5nIGluIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIGZpbGUiKSk7CisJCWdvdG8gZmF0YWw7CisJfQorCisJLyoKKwkgKiBGaW5hbGx5LCB1cGRhdGUgdGhlIGJhZCBibG9ja3MgZnJvbSB0aGUgYmFkX2Jsb2NrX21hcAorCSAqLworCXByaW50ZigiJXM6IFVwZGF0aW5nIGJhZCBibG9jayBpbm9kZS5cbiIsIGN0eC0+ZGV2aWNlX25hbWUpOworCXJldHZhbCA9IGV4dDJmc191cGRhdGVfYmJfaW5vZGUoZnMsIGJiX2xpc3QpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZXh0MmZzX3VwZGF0ZV9iYl9pbm9kZSIsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIHVwZGF0aW5nIGJhZCBibG9jayBpbm9kZSIpKTsKKwkJZ290byBmYXRhbDsKKwl9CisKKwlleHQyZnNfYmFkYmxvY2tzX2xpc3RfZnJlZShiYl9saXN0KTsKKwlyZXR1cm47CisKK2ZhdGFsOgorCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJaWYgKGJiX2xpc3QpCisJCWV4dDJmc19iYWRibG9ja3NfbGlzdF9mcmVlKGJiX2xpc3QpOworCXJldHVybjsKKworfQorCitzdGF0aWMgaW50IGNoZWNrX2JiX2lub2RlX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywKKwkJCQkgYmxrX3QgKmJsb2NrX25yLAorCQkJCSBpbnQgYmxvY2tjbnQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCSB2b2lkICpwcml2X2RhdGEgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWlmICghKmJsb2NrX25yKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIGJsb2NrIG51bWJlciBpcyBvdXRyYWdlb3VzLCBjbGVhciBpdCBhbmQgaWdub3JlIGl0LgorCSAqLworCWlmICgqYmxvY2tfbnIgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpIHx8CisJICAgICpibG9ja19uciA8IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSB7CisJCXByaW50ZihfKCJXYXJuaW5nOiBpbGxlZ2FsIGJsb2NrICV1IGZvdW5kIGluIGJhZCBibG9jayBpbm9kZS4gICIKKwkJCSAiQ2xlYXJlZC5cbiIpLCAqYmxvY2tfbnIpOworCQkqYmxvY2tfbnIgPSAwOworCQlyZXR1cm4gQkxPQ0tfQ0hBTkdFRDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc2NrL2NyYzMyLmMgYi9lMmZzY2svY3JjMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDk3YTM4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL2NyYzMyLmMKQEAgLTAsMCArMSw1NzAgQEAKKy8qCisgKiBjcmMzMi5jIC0tLSBDUkMzMiBmdW5jdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqIE9jdCAxNSwgMjAwMCBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+CisgKiBOaWNlciBjcmMzMiBmdW5jdGlvbnMvZG9jcyBzdWJtaXR0ZWQgYnkgbGludXhAaG9yaXpvbi5jb20uICBUaGFua3MhCisgKiBDb2RlIHdhcyBmcm9tIHRoZSBwdWJsaWMgZG9tYWluLCBjb3B5cmlnaHQgYWJhbmRvbmVkLiAgQ29kZSB3YXMKKyAqIHN1YnNlcXVlbnRseSBpbmNsdWRlZCBpbiB0aGUga2VybmVsLCB0aHVzIHdhcyByZS1saWNlbnNlZCB1bmRlciB0aGUKKyAqIEdOVSBHUEwgdjIuCisgKgorICogT2N0IDEyLCAyMDAwIE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KKyAqIFNhbWUgY3JjMzIgZnVuY3Rpb24gd2FzIHVzZWQgaW4gNSBvdGhlciBwbGFjZXMgaW4gdGhlIGtlcm5lbC4KKyAqIEkgbWFkZSBvbmUgdmVyc2lvbiwgYW5kIGRlbGV0ZWQgdGhlIG90aGVycy4KKyAqIFRoZXJlIGFyZSB2YXJpb3VzIGluY2FudGF0aW9ucyBvZiBjcmMzMigpLiAgU29tZSB1c2UgYSBzZWVkIG9mIDAgb3IgfjAuCisgKiBTb21lIHhvciBhdCB0aGUgZW5kIHdpdGggfjAuICBUaGUgZ2VuZXJpYyBjcmMzMigpIGZ1bmN0aW9uIHRha2VzCisgKiBzZWVkIGFzIGFuIGFyZ3VtZW50LCBhbmQgZG9lc24ndCB4b3IgYXQgdGhlIGVuZC4gIFRoZW4gaW5kaXZpZHVhbAorICogdXNlcnMgY2FuIGRvIHdoYXRldmVyIHRoZXkgbmVlZC4KKyAqICAgZHJpdmVycy9uZXQvc21jOTE5NC5jIHVzZXMgc2VlZCB+MCwgZG9lc24ndCB4b3Igd2l0aCB+MC4KKyAqICAgZnMvamZmczIgdXNlcyBzZWVkIDAsIGRvZXNuJ3QgeG9yIHdpdGggfjAuCisgKiAgIGZzL3BhcnRpdGlvbnMvZWZpLmMgdXNlcyBzZWVkIH4wLCB4b3IncyB3aXRoIH4wLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogVmVyc2lvbiAyLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+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+PiA4KTsKKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikgeDsKK30KKworLyoKKyAqIFRoaXMgY2hlY2tzIHRoYXQgQ1JDKGJ1ZiArIENSQyhidWYpKSA9IDAsIGFuZCB0aGF0CisgKiBDUkMgY29tbXV0ZXMgd2l0aCBiaXQtcmV2ZXJzYWwuICBUaGlzIGhhcyB0aGUgc2lkZSBlZmZlY3QKKyAqIG9mIGJ5dGV3aXNlIGJpdC1yZXZlcnNpbmcgdGhlIGlucHV0IGJ1ZmZlciwgYW5kIHJldHVybnMKKyAqIHRoZSBDUkMgb2YgdGhlIHJldmVyc2VkIGJ1ZmZlci4KKyAqLworc3RhdGljIF9fdTMyIHRlc3Rfc3RlcChfX3UzMiBpbml0LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJX191MzIgY3JjMSwgY3JjMjsKKwlzaXplX3QgaTsKKworCWNyYzEgPSBjcmMzMl9iZShpbml0LCBidWYsIGxlbik7CisJc3RvcmVfYmUoY3JjMSwgYnVmICsgbGVuKTsKKwljcmMyID0gY3JjMzJfYmUoaW5pdCwgYnVmLCBsZW4gKyA0KTsKKwlpZiAoY3JjMikKKwkJcHJpbnRmKCJcbkNSQyBjYW5jZWxsYXRpb24gZmFpbDogMHglMDh4IHNob3VsZCBiZSAwXG4iLAorCQkgICAgICAgY3JjMik7CisKKwlmb3IgKGkgPSAwOyBpIDw9IGxlbiArIDQ7IGkrKykgeworCQljcmMyID0gY3JjMzJfYmUoaW5pdCwgYnVmLCBpKTsKKwkJY3JjMiA9IGNyYzMyX2JlKGNyYzIsIGJ1ZiArIGksIGxlbiArIDQgLSBpKTsKKwkJaWYgKGNyYzIpCisJCQlwcmludGYoIlxuQ1JDIHNwbGl0IGZhaWw6IDB4JTA4eFxuIiwgY3JjMik7CisJfQorCisJLyogTm93IHN3YXAgaXQgYXJvdW5kIGZvciB0aGUgb3RoZXIgdGVzdCAqLworCisJYnl0ZXJldmVyc2UoYnVmLCBsZW4gKyA0KTsKKwlpbml0ID0gYml0cmV2MzIoaW5pdCk7CisJY3JjMiA9IGJpdHJldjMyKGNyYzEpOworCWlmIChjcmMxICE9IGJpdHJldjMyKGNyYzIpKQorCQlwcmludGYoIlxuQml0IHJldmVyc2FsIGZhaWw6IDB4JTA4eCAtPiAweCUwOHggLT4gMHglMDh4XG4iLAorCQkgICAgICAgY3JjMSwgY3JjMiwgYml0cmV2MzIoY3JjMikpOworCWNyYzEgPSBjcmMzMl9sZShpbml0LCBidWYsIGxlbik7CisJaWYgKGNyYzEgIT0gY3JjMikKKwkJcHJpbnRmKCJcbkNSQyBlbmRpYW5uZXNzIGZhaWw6IDB4JTA4eCAhPSAweCUwOHhcbiIsIGNyYzEsCisJCSAgICAgICBjcmMyKTsKKwljcmMyID0gY3JjMzJfbGUoaW5pdCwgYnVmLCBsZW4gKyA0KTsKKwlpZiAoY3JjMikKKwkJcHJpbnRmKCJcbkNSQyBjYW5jZWxsYXRpb24gZmFpbDogMHglMDh4IHNob3VsZCBiZSAwXG4iLAorCQkgICAgICAgY3JjMik7CisKKwlmb3IgKGkgPSAwOyBpIDw9IGxlbiArIDQ7IGkrKykgeworCQljcmMyID0gY3JjMzJfbGUoaW5pdCwgYnVmLCBpKTsKKwkJY3JjMiA9IGNyYzMyX2xlKGNyYzIsIGJ1ZiArIGksIGxlbiArIDQgLSBpKTsKKwkJaWYgKGNyYzIpCisJCQlwcmludGYoIlxuQ1JDIHNwbGl0IGZhaWw6IDB4JTA4eFxuIiwgY3JjMik7CisJfQorCisJcmV0dXJuIGNyYzE7Cit9CisKKyNkZWZpbmUgU0laRSA2NAorI2RlZmluZSBJTklUMSAwCisjZGVmaW5lIElOSVQyIDAKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGNoYXIgYnVmMVtTSVpFICsgNF07CisJdW5zaWduZWQgY2hhciBidWYyW1NJWkUgKyA0XTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZjNbU0laRSArIDRdOworCWludCBpLCBqOworCV9fdTMyIGNyYzEsIGNyYzIsIGNyYzM7CisJaW50IGV4aXRfc3RhdHVzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPD0gU0laRTsgaSsrKSB7CisJCXByaW50ZigiXHJUZXN0aW5nIGxlbmd0aCAlZC4uLiIsIGkpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJcmFuZG9tX2dhcmJhZ2UoYnVmMSwgaSk7CisJCXJhbmRvbV9nYXJiYWdlKGJ1ZjIsIGkpOworCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQkJYnVmM1tqXSA9IGJ1ZjFbal0gXiBidWYyW2pdOworCisJCWNyYzEgPSB0ZXN0X3N0ZXAoSU5JVDEsIGJ1ZjEsIGkpOworCQljcmMyID0gdGVzdF9zdGVwKElOSVQyLCBidWYyLCBpKTsKKwkJLyogTm93IGNoZWNrIHRoYXQgQ1JDKGJ1ZjEgXiBidWYyKSA9IENSQyhidWYxKSBeIENSQyhidWYyKSAqLworCQljcmMzID0gdGVzdF9zdGVwKElOSVQxIF4gSU5JVDIsIGJ1ZjMsIGkpOworCQlpZiAoY3JjMyAhPSAoY3JjMSBeIGNyYzIpKSB7CisJCQlwcmludGYoIkNSQyBYT1IgZmFpbDogMHglMDh4ICE9IDB4JTA4eCBeIDB4JTA4eFxuIiwKKwkJCSAgICAgICBjcmMzLCBjcmMxLCBjcmMyKTsKKwkJCWV4aXRfc3RhdHVzKys7CisJCX0KKwl9CisJcHJpbnRmKCJcbkFsbCB0ZXN0IGNvbXBsZXRlLiAgTm8gZmFpbHVyZXMgZXhwZWN0ZWQuXG4iKTsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCQkJCS8qIFVOSVRURVNUICovCmRpZmYgLS1naXQgYS9lMmZzY2svY3JjMzJkZWZzLmggYi9lMmZzY2svY3JjMzJkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc0MTRkMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9jcmMzMmRlZnMuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogVGhlcmUgYXJlIG11bHRpcGxlIDE2LWJpdCBDUkMgcG9seW5vbWlhbHMgaW4gY29tbW9uIHVzZSwgYnV0IHRoaXMgaXMKKyAqICp0aGUqIHN0YW5kYXJkIENSQy0zMiBwb2x5bm9taWFsLCBmaXJzdCBwb3B1bGFyaXplZCBieSBFdGhlcm5ldC4KKyAqIHheMzIreF4yNit4XjIzK3heMjIreF4xNit4XjEyK3heMTEreF4xMCt4XjgreF43K3heNSt4XjQreF4yK3heMSt4XjAKKyAqLworI2RlZmluZSBDUkNQT0xZX0xFIDB4ZWRiODgzMjAKKyNkZWZpbmUgQ1JDUE9MWV9CRSAweDA0YzExZGI3CisKKy8qIEhvdyBtYW55IGJpdHMgYXQgYSB0aW1lIHRvIHVzZS4gIFJlcXVpcmVzIGEgdGFibGUgb2YgNDw8Q1JDX3h4X0JJVFMgYnl0ZXMuICovCisvKiBGb3IgbGVzcyBwZXJmb3JtYW5jZS1zZW5zaXRpdmUsIHVzZSA0ICovCisjaWZuZGVmIENSQ19MRV9CSVRTCisjIGRlZmluZSBDUkNfTEVfQklUUyA4CisjZW5kaWYKKyNpZm5kZWYgQ1JDX0JFX0JJVFMKKyMgZGVmaW5lIENSQ19CRV9CSVRTIDgKKyNlbmRpZgorCisvKgorICogTGl0dGxlLWVuZGlhbiBDUkMgY29tcHV0YXRpb24uICBVc2VkIHdpdGggc2VyaWFsIGJpdCBzdHJlYW1zIHNlbnQKKyAqIGxzYml0LWZpcnN0LiAgQmUgc3VyZSB0byB1c2UgY3B1X3RvX2xlMzIoKSB0byBhcHBlbmQgdGhlIGNvbXB1dGVkIENSQy4KKyAqLworI2lmIENSQ19MRV9CSVRTID4gOCB8fCBDUkNfTEVfQklUUyA8IDEgfHwgQ1JDX0xFX0JJVFMgJiBDUkNfTEVfQklUUy0xCisjIGVycm9yIENSQ19MRV9CSVRTIG11c3QgYmUgYSBwb3dlciBvZiAyIGJldHdlZW4gMSBhbmQgOAorI2VuZGlmCisKKy8qCisgKiBCaWctZW5kaWFuIENSQyBjb21wdXRhdGlvbi4gIFVzZWQgd2l0aCBzZXJpYWwgYml0IHN0cmVhbXMgc2VudAorICogbXNiaXQtZmlyc3QuICBCZSBzdXJlIHRvIHVzZSBjcHVfdG9fYmUzMigpIHRvIGFwcGVuZCB0aGUgY29tcHV0ZWQgQ1JDLgorICovCisjaWYgQ1JDX0JFX0JJVFMgPiA4IHx8IENSQ19CRV9CSVRTIDwgMSB8fCBDUkNfQkVfQklUUyAmIENSQ19CRV9CSVRTLTEKKyMgZXJyb3IgQ1JDX0JFX0JJVFMgbXVzdCBiZSBhIHBvd2VyIG9mIDIgYmV0d2VlbiAxIGFuZCA4CisjZW5kaWYKKworI2RlZmluZSBfX19jb25zdGFudF9zd2FiMzIoeCkgXAorCSgoX191MzIpKCBcCisJCSgoKF9fdTMyKSh4KSAmIChfX3UzMikweDAwMDAwMGZmVUwpIDw8IDI0KSB8IFwKKwkJKCgoX191MzIpKHgpICYgKF9fdTMyKTB4MDAwMGZmMDBVTCkgPDwgIDgpIHwgXAorCQkoKChfX3UzMikoeCkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiAgOCkgfCBcCisJCSgoKF9fdTMyKSh4KSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+IDI0KSApKQorCisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGUzMih4KSBfX19jb25zdGFudF9zd2FiMzIoKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19iZTMyKHgpICh4KQorI2RlZmluZSBfX2JlMzJfdG9fY3B1KHgpICh4KQorI2RlZmluZSBfX2NwdV90b19iZTMyKHgpICh4KQorI2RlZmluZSBfX2NwdV90b19sZTMyKHgpIChleHQyZnNfc3dhYjMyKCh4KSkpCisjZGVmaW5lIF9fbGUzMl90b19jcHUoeCkgKGV4dDJmc19zd2FiMzIoKHgpKSkKKyNlbHNlCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoeCkgKHgpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoeCkgX19fY29uc3RhbnRfc3dhYjMyKCh4KSkKKyNkZWZpbmUgX19iZTMyX3RvX2NwdSh4KSAoZXh0MmZzX3N3YWIzMigoeCkpKQorI2RlZmluZSBfX2NwdV90b19iZTMyKHgpIChleHQyZnNfc3dhYjMyKCh4KSkpCisjZGVmaW5lIF9fY3B1X3RvX2xlMzIoeCkgKHgpCisjZGVmaW5lIF9fbGUzMl90b19jcHUoeCkgKHgpCisjZW5kaWYKKworI2lmIChfX0dOVUNfXyA+PSAzKQorI2RlZmluZSBsaWtlbHkoeCkJX19idWlsdGluX2V4cGVjdCghISh4KSwgMSkKKyNkZWZpbmUgdW5saWtlbHkoeCkJX19idWlsdGluX2V4cGVjdCghISh4KSwgMCkKKyNlbHNlCisjZGVmaW5lIGxpa2VseSh4KQkoeCkKKyNkZWZpbmUgdW5saWtlbHkoeCkJKHgpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNjay9kaWN0LmMgYi9lMmZzY2svZGljdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYzRkODQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svZGljdC5jCkBAIC0wLDAgKzEsMTUyMiBAQAorLyoKKyAqIERpY3Rpb25hcnkgQWJzdHJhY3QgRGF0YSBUeXBlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgS2F6IEt5bGhla3UgPGthekBhc2hpLmZvb3RwcmludHMubmV0PgorICoKKyAqIEZyZWUgU29mdHdhcmUgTGljZW5zZToKKyAqCisgKiBBbGwgcmlnaHRzIGFyZSByZXNlcnZlZCBieSB0aGUgYXV0aG9yLCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uczoKKyAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBmcmVlbHkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUsCisgKiBwb3NzaWJseSBpbiBleGNoYW5nZSBmb3IgYSBmZWUsIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMKKyAqIGludGFjdC4gUGVybWlzc2lvbiBpcyBhbHNvIGdyYW50ZWQgdG8gYWRhcHQgdGhpcyBzb2Z0d2FyZSB0byBwcm9kdWNlCisgKiBkZXJpdmF0aXZlIHdvcmtzLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9ucyBjYXJyeSB0aGlzIGNvcHlyaWdodAorICogbm90aWNlIGFuZCBhZGRpdGlvbmFsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoZSB3b3JrIGhhcyBiZWVuIG1vZGlmaWVkLgorICogVGhpcyBzb3VyY2UgY29kZSBtYXkgYmUgdHJhbnNsYXRlZCBpbnRvIGV4ZWN1dGFibGUgZm9ybSBhbmQgaW5jb3Jwb3JhdGVkCisgKiBpbnRvIHByb3ByaWV0YXJ5IHNvZnR3YXJlOyB0aGVyZSBpcyBubyByZXF1aXJlbWVudCBmb3Igc3VjaCBzb2Z0d2FyZSB0bworICogY29udGFpbiBhIGNvcHlyaWdodCBub3RpY2UgcmVsYXRlZCB0byB0aGlzIHNvdXJjZS4KKyAqCisgKiAkSWQ6IGRpY3QuYyx2IDEuNDAuMi43IDIwMDAvMTEvMTMgMDE6MzY6NDQga2F6IEV4cCAkCisgKiAkTmFtZToga2F6bGliXzFfMjAgJAorICovCisKKyNkZWZpbmUgTkRFQlVHCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBFWFQyRlNfQVRUUih4KSBfX2F0dHJpYnV0ZV9fKHgpCisjZWxzZQorI2RlZmluZSBFWFQyRlNfQVRUUih4KQorI2VuZGlmCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNkZWZpbmUgRElDVF9JTVBMRU1FTlRBVElPTgorI2luY2x1ZGUgImRpY3QuaCIKKworI2lmZGVmIEtBWkxJQl9SQ1NJRAorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICIkSWQ6IGRpY3QuYyx2IDEuNDAuMi43IDIwMDAvMTEvMTMgMDE6MzY6NDQga2F6IEV4cCAkIjsKKyNlbmRpZgorCisvKgorICogVGhlc2UgbWFjcm9zIHByb3ZpZGUgc2hvcnQgY29udmVuaWVudCBuYW1lcyBmb3Igc3RydWN0dXJlIG1lbWJlcnMsCisgKiB3aGljaCBhcmUgZW1iZWxsaXNoZWQgd2l0aCBkaWN0XyBwcmVmaXhlcyBzbyB0aGF0IHRoZXkgYXJlCisgKiBwcm9wZXJseSBjb25maW5lZCB0byB0aGUgZG9jdW1lbnRlZCBuYW1lc3BhY2UuIEl0J3MgbGVnYWwgZm9yIGEKKyAqIHByb2dyYW0gd2hpY2ggdXNlcyBkaWN0IHRvIGRlZmluZSwgZm9yIGluc3RhbmNlLCBhIG1hY3JvIGNhbGxlZCBgYHBhcmVudCcnLgorICogU3VjaCBhIG1hY3JvIHdvdWxkIGludGVyZmVyZSB3aXRoIHRoZSBkbm9kZV90IHN0cnVjdCBkZWZpbml0aW9uLgorICogSW4gZ2VuZXJhbCwgaGlnaGx5IHBvcnRhYmxlIGFuZCByZXVzYWJsZSBDIG1vZHVsZXMgd2hpY2ggZXhwb3NlIHRoZWlyCisgKiBzdHJ1Y3R1cmVzIG5lZWQgdG8gY29uZmluZSBzdHJ1Y3R1cmUgbWVtYmVyIG5hbWVzIHRvIHdlbGwtZGVmaW5lZCBzcGFjZXMuCisgKiBUaGUgcmVzdWx0aW5nIGlkZW50aWZpZXJzIGFyZW4ndCBuZWNlc3NhcmlseSBjb252ZW5pZW50IHRvIHVzZSwgbm9yCisgKiByZWFkYWJsZSwgaW4gdGhlIGltcGxlbWVudGF0aW9uLCBob3dldmVyIQorICovCisKKyNkZWZpbmUgbGVmdCBkaWN0X2xlZnQKKyNkZWZpbmUgcmlnaHQgZGljdF9yaWdodAorI2RlZmluZSBwYXJlbnQgZGljdF9wYXJlbnQKKyNkZWZpbmUgY29sb3IgZGljdF9jb2xvcgorI2RlZmluZSBrZXkgZGljdF9rZXkKKyNkZWZpbmUgZGF0YSBkaWN0X2RhdGEKKworI2RlZmluZSBuaWxub2RlIGRpY3Rfbmlsbm9kZQorI2RlZmluZSBub2RlY291bnQgZGljdF9ub2RlY291bnQKKyNkZWZpbmUgbWF4Y291bnQgZGljdF9tYXhjb3VudAorI2RlZmluZSBjb21wYXJlIGRpY3RfY29tcGFyZQorI2RlZmluZSBhbGxvY25vZGUgZGljdF9hbGxvY25vZGUKKyNkZWZpbmUgZnJlZW5vZGUgZGljdF9mcmVlbm9kZQorI2RlZmluZSBjb250ZXh0IGRpY3RfY29udGV4dAorI2RlZmluZSBkdXBlcyBkaWN0X2R1cGVzCisKKyNkZWZpbmUgZGljdHB0ciBkaWN0X2RpY3RwdHIKKworI2RlZmluZSBkaWN0X3Jvb3QoRCkgKChEKS0+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+IDkpIHsKKwkJCXB1dHMoImludmFsaWQgbnVtYmVyIik7CisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgIGRpY3RfbWVyZ2UoJmRhcnJheVtkaWN0MV0sICZkYXJyYXlbZGljdDJdKTsKKwkJfQorCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJcHV0Y2hhcignPycpOworCQlwdXRjaGFyKCdcbicpOworCQlicmVhazsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc2NrL2RpY3QuaCBiL2UyZnNjay9kaWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM4MDc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9kaWN0LmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBEaWN0aW9uYXJ5IEFic3RyYWN0IERhdGEgVHlwZQorICogQ29weXJpZ2h0IChDKSAxOTk3IEtheiBLeWxoZWt1IDxrYXpAYXNoaS5mb290cHJpbnRzLm5ldD4KKyAqCisgKiBGcmVlIFNvZnR3YXJlIExpY2Vuc2U6CisgKgorICogQWxsIHJpZ2h0cyBhcmUgcmVzZXJ2ZWQgYnkgdGhlIGF1dGhvciwgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnM6CisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gZnJlZWx5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlLAorICogcG9zc2libHkgaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLCBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IG5vdGljZSBhcHBlYXJzCisgKiBpbnRhY3QuIFBlcm1pc3Npb24gaXMgYWxzbyBncmFudGVkIHRvIGFkYXB0IHRoaXMgc29mdHdhcmUgdG8gcHJvZHVjZQorICogZGVyaXZhdGl2ZSB3b3JrcywgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbnMgY2FycnkgdGhpcyBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgYWRkaXRpb25hbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGUgd29yayBoYXMgYmVlbiBtb2RpZmllZC4KKyAqIFRoaXMgc291cmNlIGNvZGUgbWF5IGJlIHRyYW5zbGF0ZWQgaW50byBleGVjdXRhYmxlIGZvcm0gYW5kIGluY29ycG9yYXRlZAorICogaW50byBwcm9wcmlldGFyeSBzb2Z0d2FyZTsgdGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQgZm9yIHN1Y2ggc29mdHdhcmUgdG8KKyAqIGNvbnRhaW4gYSBjb3B5cmlnaHQgbm90aWNlIHJlbGF0ZWQgdG8gdGhpcyBzb3VyY2UuCisgKgorICogJElkOiBkaWN0LmgsdiAxLjIyLjIuNiAyMDAwLzExLzEzIDAxOjM2OjQ0IGtheiBFeHAgJAorICogJE5hbWU6IGthemxpYl8xXzIwICQKKyAqLworCisjaWZuZGVmIERJQ1RfSAorI2RlZmluZSBESUNUX0gKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmZGVmIEtBWkxJQl9TSURFRUZGRUNUX0RFQlVHCisjaW5jbHVkZSAic2Z4LmgiCisjZW5kaWYKKworLyoKKyAqIEJsdXJiIGZvciBpbmNsdXNpb24gaW50byBDKysgdHJhbnNsYXRpb24gdW5pdHMKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBkaWN0Y291bnRfdDsKKyNkZWZpbmUgRElDVENPVU5UX1RfTUFYIFVMT05HX01BWAorCisvKgorICogVGhlIGRpY3Rpb25hcnkgaXMgaW1wbGVtZW50ZWQgYXMgYSByZWQtYmxhY2sgdHJlZQorICovCisKK3R5cGVkZWYgZW51bSB7IGRub2RlX3JlZCwgZG5vZGVfYmxhY2sgfSBkbm9kZV9jb2xvcl90OworCit0eXBlZGVmIHN0cnVjdCBkbm9kZV90IHsKKyNpZiBkZWZpbmVkKERJQ1RfSU1QTEVNRU5UQVRJT04pIHx8ICFkZWZpbmVkKEtBWkxJQl9PUEFRVUVfREVCVUcpCisgICAgc3RydWN0IGRub2RlX3QgKmRpY3RfbGVmdDsKKyAgICBzdHJ1Y3QgZG5vZGVfdCAqZGljdF9yaWdodDsKKyAgICBzdHJ1Y3QgZG5vZGVfdCAqZGljdF9wYXJlbnQ7CisgICAgZG5vZGVfY29sb3JfdCBkaWN0X2NvbG9yOworICAgIGNvbnN0IHZvaWQgKmRpY3Rfa2V5OworICAgIHZvaWQgKmRpY3RfZGF0YTsKKyNlbHNlCisgICAgaW50IGRpY3RfZHVtbXk7CisjZW5kaWYKK30gZG5vZGVfdDsKKwordHlwZWRlZiBpbnQgKCpkaWN0X2NvbXBfdCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwordHlwZWRlZiBkbm9kZV90ICooKmRub2RlX2FsbG9jX3QpKHZvaWQgKik7Cit0eXBlZGVmIHZvaWQgKCpkbm9kZV9mcmVlX3QpKGRub2RlX3QgKiwgdm9pZCAqKTsKKwordHlwZWRlZiBzdHJ1Y3QgZGljdF90IHsKKyNpZiBkZWZpbmVkKERJQ1RfSU1QTEVNRU5UQVRJT04pIHx8ICFkZWZpbmVkKEtBWkxJQl9PUEFRVUVfREVCVUcpCisgICAgZG5vZGVfdCBkaWN0X25pbG5vZGU7CisgICAgZGljdGNvdW50X3QgZGljdF9ub2RlY291bnQ7CisgICAgZGljdGNvdW50X3QgZGljdF9tYXhjb3VudDsKKyAgICBkaWN0X2NvbXBfdCBkaWN0X2NvbXBhcmU7CisgICAgZG5vZGVfYWxsb2NfdCBkaWN0X2FsbG9jbm9kZTsKKyAgICBkbm9kZV9mcmVlX3QgZGljdF9mcmVlbm9kZTsKKyAgICB2b2lkICpkaWN0X2NvbnRleHQ7CisgICAgaW50IGRpY3RfZHVwZXM7CisjZWxzZQorICAgIGludCBkaWN0X2R1bW1teTsKKyNlbmRpZgorfSBkaWN0X3Q7CisKK3R5cGVkZWYgdm9pZCAoKmRub2RlX3Byb2Nlc3NfdCkoZGljdF90ICosIGRub2RlX3QgKiwgdm9pZCAqKTsKKwordHlwZWRlZiBzdHJ1Y3QgZGljdF9sb2FkX3QgeworI2lmIGRlZmluZWQoRElDVF9JTVBMRU1FTlRBVElPTikgfHwgIWRlZmluZWQoS0FaTElCX09QQVFVRV9ERUJVRykKKyAgICBkaWN0X3QgKmRpY3RfZGljdHB0cjsKKyAgICBkbm9kZV90IGRpY3Rfbmlsbm9kZTsKKyNlbHNlCisgICAgaW50IGRpY3RfZHVtbW15OworI2VuZGlmCit9IGRpY3RfbG9hZF90OworCitleHRlcm4gZGljdF90ICpkaWN0X2NyZWF0ZShkaWN0Y291bnRfdCwgZGljdF9jb21wX3QpOworZXh0ZXJuIHZvaWQgZGljdF9zZXRfYWxsb2NhdG9yKGRpY3RfdCAqLCBkbm9kZV9hbGxvY190LCBkbm9kZV9mcmVlX3QsIHZvaWQgKik7CitleHRlcm4gdm9pZCBkaWN0X2Rlc3Ryb3koZGljdF90ICopOworZXh0ZXJuIHZvaWQgZGljdF9mcmVlX25vZGVzKGRpY3RfdCAqKTsKK2V4dGVybiB2b2lkIGRpY3RfZnJlZShkaWN0X3QgKik7CitleHRlcm4gZGljdF90ICpkaWN0X2luaXQoZGljdF90ICosIGRpY3Rjb3VudF90LCBkaWN0X2NvbXBfdCk7CitleHRlcm4gdm9pZCBkaWN0X2luaXRfbGlrZShkaWN0X3QgKiwgY29uc3QgZGljdF90ICopOworZXh0ZXJuIGludCBkaWN0X3ZlcmlmeShkaWN0X3QgKik7CitleHRlcm4gaW50IGRpY3Rfc2ltaWxhcihjb25zdCBkaWN0X3QgKiwgY29uc3QgZGljdF90ICopOworZXh0ZXJuIGRub2RlX3QgKmRpY3RfbG9va3VwKGRpY3RfdCAqLCBjb25zdCB2b2lkICopOworZXh0ZXJuIGRub2RlX3QgKmRpY3RfbG93ZXJfYm91bmQoZGljdF90ICosIGNvbnN0IHZvaWQgKik7CitleHRlcm4gZG5vZGVfdCAqZGljdF91cHBlcl9ib3VuZChkaWN0X3QgKiwgY29uc3Qgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGRpY3RfaW5zZXJ0KGRpY3RfdCAqLCBkbm9kZV90ICosIGNvbnN0IHZvaWQgKik7CitleHRlcm4gZG5vZGVfdCAqZGljdF9kZWxldGUoZGljdF90ICosIGRub2RlX3QgKik7CitleHRlcm4gaW50IGRpY3RfYWxsb2NfaW5zZXJ0KGRpY3RfdCAqLCBjb25zdCB2b2lkICosIHZvaWQgKik7CitleHRlcm4gdm9pZCBkaWN0X2RlbGV0ZV9mcmVlKGRpY3RfdCAqLCBkbm9kZV90ICopOworZXh0ZXJuIGRub2RlX3QgKmRpY3RfZmlyc3QoZGljdF90ICopOworZXh0ZXJuIGRub2RlX3QgKmRpY3RfbGFzdChkaWN0X3QgKik7CitleHRlcm4gZG5vZGVfdCAqZGljdF9uZXh0KGRpY3RfdCAqLCBkbm9kZV90ICopOworZXh0ZXJuIGRub2RlX3QgKmRpY3RfcHJldihkaWN0X3QgKiwgZG5vZGVfdCAqKTsKK2V4dGVybiBkaWN0Y291bnRfdCBkaWN0X2NvdW50KGRpY3RfdCAqKTsKK2V4dGVybiBpbnQgZGljdF9pc2VtcHR5KGRpY3RfdCAqKTsKK2V4dGVybiBpbnQgZGljdF9pc2Z1bGwoZGljdF90ICopOworZXh0ZXJuIGludCBkaWN0X2NvbnRhaW5zKGRpY3RfdCAqLCBkbm9kZV90ICopOworZXh0ZXJuIHZvaWQgZGljdF9hbGxvd19kdXBlcyhkaWN0X3QgKik7CitleHRlcm4gaW50IGRub2RlX2lzX2luX2FfZGljdChkbm9kZV90ICopOworZXh0ZXJuIGRub2RlX3QgKmRub2RlX2NyZWF0ZSh2b2lkICopOworZXh0ZXJuIGRub2RlX3QgKmRub2RlX2luaXQoZG5vZGVfdCAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZG5vZGVfZGVzdHJveShkbm9kZV90ICopOworZXh0ZXJuIHZvaWQgKmRub2RlX2dldChkbm9kZV90ICopOworZXh0ZXJuIGNvbnN0IHZvaWQgKmRub2RlX2dldGtleShkbm9kZV90ICopOworZXh0ZXJuIHZvaWQgZG5vZGVfcHV0KGRub2RlX3QgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGRpY3RfcHJvY2VzcyhkaWN0X3QgKiwgdm9pZCAqLCBkbm9kZV9wcm9jZXNzX3QpOworZXh0ZXJuIHZvaWQgZGljdF9sb2FkX2JlZ2luKGRpY3RfbG9hZF90ICosIGRpY3RfdCAqKTsKK2V4dGVybiB2b2lkIGRpY3RfbG9hZF9uZXh0KGRpY3RfbG9hZF90ICosIGRub2RlX3QgKiwgY29uc3Qgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGRpY3RfbG9hZF9lbmQoZGljdF9sb2FkX3QgKik7CitleHRlcm4gdm9pZCBkaWN0X21lcmdlKGRpY3RfdCAqLCBkaWN0X3QgKik7CisKKyNpZiBkZWZpbmVkKERJQ1RfSU1QTEVNRU5UQVRJT04pIHx8ICFkZWZpbmVkKEtBWkxJQl9PUEFRVUVfREVCVUcpCisjaWZkZWYgS0FaTElCX1NJREVFRkZFQ1RfREVCVUcKKyNkZWZpbmUgZGljdF9pc2Z1bGwoRCkgKFNGWF9DSEVDSyhEKS0+ZGljdF9ub2RlY291bnQgPT0gKEQpLT5kaWN0X21heGNvdW50KQorI2Vsc2UKKyNkZWZpbmUgZGljdF9pc2Z1bGwoRCkgKChEKS0+ZGljdF9ub2RlY291bnQgPT0gKEQpLT5kaWN0X21heGNvdW50KQorI2VuZGlmCisjZGVmaW5lIGRpY3RfY291bnQoRCkgKChEKS0+ZGljdF9ub2RlY291bnQpCisjZGVmaW5lIGRpY3RfaXNlbXB0eShEKSAoKEQpLT5kaWN0X25vZGVjb3VudCA9PSAwKQorI2RlZmluZSBkbm9kZV9nZXQoTikgKChOKS0+ZGljdF9kYXRhKQorI2RlZmluZSBkbm9kZV9nZXRrZXkoTikgKChOKS0+ZGljdF9rZXkpCisjZGVmaW5lIGRub2RlX3B1dChOLCBYKSAoKE4pLT5kaWN0X2RhdGEgPSAoWCkpCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzY2svZGlyaW5mby5jIGIvZTJmc2NrL2RpcmluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWI1YTEzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL2RpcmluZm8uYwpAQCAtMCwwICsxLDQ2NCBAQAorLyoKKyAqIGRpcmluZm8uYyAtLS0gbWFpbnRhaW5zIHRoZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24gdGFibGUgZm9yIGUyZnNjay4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgVGhlb2RvcmUgVHMnby4gIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisgKi8KKworI3VuZGVmIERJUklORk9fREVCVUcKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImUyZnNjay5oIgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlICJ1dWlkL3V1aWQuaCIKKworI2luY2x1ZGUgPGV4dDJmcy90ZGIuaD4KKworc3RydWN0IGRpcl9pbmZvX2RiIHsKKwlpbnQJCWNvdW50OworCWludAkJc2l6ZTsKKwlzdHJ1Y3QgZGlyX2luZm8gKmFycmF5OworCXN0cnVjdCBkaXJfaW5mbyAqbGFzdF9sb29rdXA7CisJY2hhcgkJKnRkYl9mbjsKKwlUREJfQ09OVEVYVAkqdGRiOworfTsKKworc3RydWN0IGRpcl9pbmZvX2l0ZXIgeworCWludAlpOworCVREQl9EQVRBCXRkYl9pdGVyOworfTsKKworc3RydWN0IGRpcl9pbmZvX2VudCB7CisJZXh0Ml9pbm9fdAkJZG90ZG90OwkvKiBQYXJlbnQgYWNjb3JkaW5nIHRvICcuLicgKi8KKwlleHQyX2lub190CQlwYXJlbnQ7IC8qIFBhcmVudCBhY2NvcmRpbmcgdG8gdHJlZXdhbGsgKi8KK307CisKKworc3RhdGljIHZvaWQgZTJmc2NrX3B1dF9kaXJfaW5mbyhlMmZzY2tfdCBjdHgsIHN0cnVjdCBkaXJfaW5mbyAqZGlyKTsKKworc3RhdGljIHZvaWQgc2V0dXBfdGRiKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBudW1fZGlycykKK3sKKwlzdHJ1Y3QgZGlyX2luZm9fZGIJKmRiID0gY3R4LT5kaXJfaW5mbzsKKwl1bnNpZ25lZCBpbnQJCXRocmVzaG9sZDsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwltb2RlX3QJCQlzYXZlX3VtYXNrOworCWNoYXIJCQkqdGRiX2RpciwgdXVpZFs0MF07CisJaW50CQkJZmQsIGVuYWJsZTsKKworCXByb2ZpbGVfZ2V0X3N0cmluZyhjdHgtPnByb2ZpbGUsICJzY3JhdGNoX2ZpbGVzIiwgImRpcmVjdG9yeSIsIDAsIDAsCisJCQkgICAmdGRiX2Rpcik7CisJcHJvZmlsZV9nZXRfdWludChjdHgtPnByb2ZpbGUsICJzY3JhdGNoX2ZpbGVzIiwKKwkJCSAibnVtZGlyc190aHJlc2hvbGQiLCAwLCAwLCAmdGhyZXNob2xkKTsKKwlwcm9maWxlX2dldF9ib29sZWFuKGN0eC0+cHJvZmlsZSwgInNjcmF0Y2hfZmlsZXMiLAorCQkJICAgICJkaXJpbmZvIiwgMCwgMSwgJmVuYWJsZSk7CisKKwlpZiAoIWVuYWJsZSB8fCAhdGRiX2RpciB8fCBhY2Nlc3ModGRiX2RpciwgV19PSykgfHwKKwkgICAgKHRocmVzaG9sZCAmJiBudW1fZGlycyA8PSB0aHJlc2hvbGQpKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzdHJsZW4odGRiX2RpcikgKyA2NCwgJmRiLT50ZGJfZm4pOworCWlmIChyZXR2YWwpCisJCXJldHVybjsKKworCXV1aWRfdW5wYXJzZShjdHgtPmZzLT5zdXBlci0+c191dWlkLCB1dWlkKTsKKwlzcHJpbnRmKGRiLT50ZGJfZm4sICIlcy8lcy1kaXJpbmZvLVhYWFhYWCIsIHRkYl9kaXIsIHV1aWQpOworCXNhdmVfdW1hc2sgPSB1bWFzaygwNzcpOworCWZkID0gbWtzdGVtcChkYi0+dGRiX2ZuKTsKKwl1bWFzayhzYXZlX3VtYXNrKTsKKwlpZiAoZmQgPCAwKSB7CisJCWRiLT50ZGIgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJaWYgKG51bV9kaXJzIDwgOTk5OTEpCisJCW51bV9kaXJzID0gOTk5OTE7IC8qIGxhcmdlc3QgNSBkaWdpdCBwcmltZSAqLworCisJZGItPnRkYiA9IHRkYl9vcGVuKGRiLT50ZGJfZm4sIG51bV9kaXJzLCBUREJfTk9MT0NLIHwgVERCX05PU1lOQywKKwkJCSAgIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjAwKTsKKwljbG9zZShmZCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2RiKGUyZnNja190IGN0eCkKK3sKKwlzdHJ1Y3QgZGlyX2luZm9fZGIJKmRiOworCWV4dDJfaW5vX3QJCW51bV9kaXJzOworCWVycmNvZGVfdAkJcmV0dmFsOworCisJZGIgPSAoc3RydWN0IGRpcl9pbmZvX2RiICopCisJCWUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LCBzaXplb2Yoc3RydWN0IGRpcl9pbmZvX2RiKSwKKwkJCQkgICAgICAgImRpcmVjdG9yeSBtYXAgZGIiKTsKKwlkYi0+Y291bnQgPSBkYi0+c2l6ZSA9IDA7CisJZGItPmFycmF5ID0gMDsKKworCWN0eC0+ZGlyX2luZm8gPSBkYjsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbnVtX2RpcnMoY3R4LT5mcywgJm51bV9kaXJzKTsKKwlpZiAocmV0dmFsKQorCQludW1fZGlycyA9IDEwMjQ7CS8qIEd1ZXNzICovCisKKwlzZXR1cF90ZGIoY3R4LCBudW1fZGlycyk7CisKKwlpZiAoZGItPnRkYikgeworI2lmZGVmIERJUklORk9fREVCVUcKKwkJcHJpbnRmKCJOb3RlOiB1c2luZyB0ZGIhXG4iKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCisJZGItPnNpemUgPSBudW1fZGlycyArIDEwOworCWRiLT5hcnJheSAgPSAoc3RydWN0IGRpcl9pbmZvICopCisJCWUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LCBkYi0+c2l6ZQorCQkJCSAgICAgICAqIHNpemVvZiAoc3RydWN0IGRpcl9pbmZvKSwKKwkJCQkgICAgICAgImRpcmVjdG9yeSBtYXAiKTsKK30KKworLyoKKyAqIFRoaXMgc3Vicm91dGluZSBpcyBjYWxsZWQgZHVyaW5nIHBhc3MxIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSBpbmZvCisgKiBlbnRyeS4gIER1cmluZyBwYXNzMSwgdGhlIHBhc3NlZC1pbiBwYXJlbnQgaXMgMDsgaXQgd2lsbCBnZXQgZmlsbGVkCisgKiBpbiBkdXJpbmcgcGFzczIuCisgKi8KK3ZvaWQgZTJmc2NrX2FkZF9kaXJfaW5mbyhlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLCBleHQyX2lub190IHBhcmVudCkKK3sKKwlzdHJ1Y3QgZGlyX2luZm9fZGIgCSpkYjsKKwlzdHJ1Y3QgZGlyX2luZm8JCSpkaXIsIGVudCwgKm9sZF9hcnJheTsKKwlpbnQJCQlpLCBqOworCWVycmNvZGVfdAkJcmV0dmFsOworCXVuc2lnbmVkIGxvbmcJCW9sZF9zaXplOworCisjaWZkZWYgRElSSU5GT19ERUJVRworCXByaW50ZigiYWRkX2Rpcl9pbmZvIGZvciBpbm9kZSAoJWx1LCAlbHUpLi4uXG4iLCBpbm8sIHBhcmVudCk7CisjZW5kaWYKKwlpZiAoIWN0eC0+ZGlyX2luZm8pCisJCXNldHVwX2RiKGN0eCk7CisJZGIgPSBjdHgtPmRpcl9pbmZvOworCisJaWYgKGN0eC0+ZGlyX2luZm8tPmNvdW50ID49IGN0eC0+ZGlyX2luZm8tPnNpemUpIHsKKwkJb2xkX3NpemUgPSBjdHgtPmRpcl9pbmZvLT5zaXplICogc2l6ZW9mKHN0cnVjdCBkaXJfaW5mbyk7CisJCWN0eC0+ZGlyX2luZm8tPnNpemUgKz0gMTA7CisJCW9sZF9hcnJheSA9IGN0eC0+ZGlyX2luZm8tPmFycmF5OworCQlyZXR2YWwgPSBleHQyZnNfcmVzaXplX21lbShvbGRfc2l6ZSwgY3R4LT5kaXJfaW5mby0+c2l6ZSAqCisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgZGlyX2luZm8pLAorCQkJCQkgICAmY3R4LT5kaXJfaW5mby0+YXJyYXkpOworCQlpZiAocmV0dmFsKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHJlYWxsb2NhdGUgZGlyX2luZm8gIgorCQkJCSJzdHJ1Y3R1cmUgdG8gJWQgZW50cmllc1xuIiwKKwkJCQljdHgtPmRpcl9pbmZvLT5zaXplKTsKKwkJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJCQljdHgtPmRpcl9pbmZvLT5zaXplIC09IDEwOworCQkJcmV0dXJuOworCQl9CisJCWlmIChvbGRfYXJyYXkgIT0gY3R4LT5kaXJfaW5mby0+YXJyYXkpCisJCQljdHgtPmRpcl9pbmZvLT5sYXN0X2xvb2t1cCA9IE5VTEw7CisJfQorCisJZW50LmlubyA9IGlubzsKKwllbnQucGFyZW50ID0gcGFyZW50OworCWVudC5kb3Rkb3QgPSBwYXJlbnQ7CisKKwlpZiAoZGItPnRkYikgeworCQllMmZzY2tfcHV0X2Rpcl9pbmZvKGN0eCwgJmVudCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE5vcm1hbGx5LCBhZGRfZGlyX2luZm8gaXMgY2FsbGVkIHdpdGggZWFjaCBpbm9kZSBpbgorCSAqIHNlcXVlbnRpYWwgb3JkZXI7IGJ1dCBvbmNlIGluIGEgd2hpbGUgKGxpa2Ugd2hlbiBwYXNzIDMKKwkgKiBuZWVkcyB0byByZWNyZWF0ZSB0aGUgcm9vdCBkaXJlY3Rvcnkgb3IgbG9zdCtmb3VuZAorCSAqIGRpcmVjdG9yeSkgaXQgaXMgY2FsbGVkIG91dCBvZiBvcmRlci4gIEluIHRob3NlIGNhc2VzLCB3ZQorCSAqIG5lZWQgdG8gbW92ZSB0aGUgZGlyX2luZm8gZW50cmllcyBkb3duIHRvIG1ha2Ugcm9vbSwgc2luY2UKKwkgKiB0aGUgZGlyX2luZm8gYXJyYXkgbmVlZHMgdG8gYmUgc29ydGVkIGJ5IGlub2RlIG51bWJlciBmb3IKKwkgKiBnZXRfZGlyX2luZm8oKSdzIHNha2UuCisJICovCisJaWYgKGN0eC0+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+cGFyZW50OworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBvbmx5IHNldHMgdGhlIGRvdCBkb3QgcG9pbnRlciwgYW5kIHJlcXVpcmVzIHRoYXQKKyAqIGRpcmluZm8gc3RydWN0dXJlIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZC4KKyAqLworaW50IGUyZnNja19kaXJfaW5mb19nZXRfZG90ZG90KGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgICAgZXh0Ml9pbm9fdCAqZG90ZG90KQoreworCXN0cnVjdCBkaXJfaW5mbyAqcDsKKworCXAgPSBlMmZzY2tfZ2V0X2Rpcl9pbmZvKGN0eCwgaW5vKTsKKwlpZiAoIXApCisJCXJldHVybiAxOworCSpkb3Rkb3QgPSBwLT5kb3Rkb3Q7CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2UyZnNjay9keF9kaXJpbmZvLmMgYi9lMmZzY2svZHhfZGlyaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTNmZmYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svZHhfZGlyaW5mby5jCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogZGlyaW5mby5jIC0tLSBtYWludGFpbnMgdGhlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiB0YWJsZSBmb3IgZTJmc2NrLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MyBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZTJmc2NrLmgiCisjaWZkZWYgRU5BQkxFX0hUUkVFCisKKy8qCisgKiBUaGlzIHN1YnJvdXRpbmUgaXMgY2FsbGVkIGR1cmluZyBwYXNzMSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgaW5mbworICogZW50cnkuICBEdXJpbmcgcGFzczEsIHRoZSBwYXNzZWQtaW4gcGFyZW50IGlzIDA7IGl0IHdpbGwgZ2V0IGZpbGxlZAorICogaW4gZHVyaW5nIHBhc3MyLgorICovCit2b2lkIGUyZnNja19hZGRfZHhfZGlyKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sIGludCBudW1fYmxvY2tzKQoreworCXN0cnVjdCBkeF9kaXJfaW5mbyAqZGlyOworCWludAkJaSwgajsKKwllcnJjb2RlX3QJcmV0dmFsOworCXVuc2lnbmVkIGxvbmcJb2xkX3NpemU7CisKKyNpZiAwCisJcHJpbnRmKCJhZGRfZHhfZGlyX2luZm8gZm9yIGlub2RlICVsdS4uLlxuIiwgaW5vKTsKKyNlbmRpZgorCWlmICghY3R4LT5keF9kaXJfaW5mbykgeworCQljdHgtPmR4X2Rpcl9pbmZvX2NvdW50ID0gMDsKKwkJY3R4LT5keF9kaXJfaW5mb19zaXplID0gMTAwOyAvKiBHdWVzcyAqLworCQljdHgtPmR4X2Rpcl9pbmZvICA9IChzdHJ1Y3QgZHhfZGlyX2luZm8gKikKKwkJCWUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LCBjdHgtPmR4X2Rpcl9pbmZvX3NpemUKKwkJCQkJICAgICAgICogc2l6ZW9mIChzdHJ1Y3QgZHhfZGlyX2luZm8pLAorCQkJCQkgICAgICAgImRpcmVjdG9yeSBtYXAiKTsKKwl9CisKKwlpZiAoY3R4LT5keF9kaXJfaW5mb19jb3VudCA+PSBjdHgtPmR4X2Rpcl9pbmZvX3NpemUpIHsKKwkJb2xkX3NpemUgPSBjdHgtPmR4X2Rpcl9pbmZvX3NpemUgKiBzaXplb2Yoc3RydWN0IGR4X2Rpcl9pbmZvKTsKKwkJY3R4LT5keF9kaXJfaW5mb19zaXplICs9IDEwOworCQlyZXR2YWwgPSBleHQyZnNfcmVzaXplX21lbShvbGRfc2l6ZSwgY3R4LT5keF9kaXJfaW5mb19zaXplICoKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBkeF9kaXJfaW5mbyksCisJCQkJCSAgICZjdHgtPmR4X2Rpcl9pbmZvKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCByZWFsbG9jYXRlIGR4X2Rpcl9pbmZvICIKKwkJCQkic3RydWN0dXJlIHRvICVkIGVudHJpZXNcbiIsCisJCQkJY3R4LT5keF9kaXJfaW5mb19zaXplKTsKKwkJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJCQljdHgtPmR4X2Rpcl9pbmZvX3NpemUgLT0gMTA7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKgorCSAqIE5vcm1hbGx5LCBhZGRfZHhfZGlyX2luZm8gaXMgY2FsbGVkIHdpdGggZWFjaCBpbm9kZSBpbgorCSAqIHNlcXVlbnRpYWwgb3JkZXI7IGJ1dCBvbmNlIGluIGEgd2hpbGUgKGxpa2Ugd2hlbiBwYXNzIDMKKwkgKiBuZWVkcyB0byByZWNyZWF0ZSB0aGUgcm9vdCBkaXJlY3Rvcnkgb3IgbG9zdCtmb3VuZAorCSAqIGRpcmVjdG9yeSkgaXQgaXMgY2FsbGVkIG91dCBvZiBvcmRlci4gIEluIHRob3NlIGNhc2VzLCB3ZQorCSAqIG5lZWQgdG8gbW92ZSB0aGUgZHhfZGlyX2luZm8gZW50cmllcyBkb3duIHRvIG1ha2Ugcm9vbSwgc2luY2UKKwkgKiB0aGUgZHhfZGlyX2luZm8gYXJyYXkgbmVlZHMgdG8gYmUgc29ydGVkIGJ5IGlub2RlIG51bWJlciBmb3IKKwkgKiBnZXRfZHhfZGlyX2luZm8oKSdzIHNha2UuCisJICovCisJaWYgKGN0eC0+ZHhfZGlyX2luZm9fY291bnQgJiYKKwkgICAgY3R4LT5keF9kaXJfaW5mb1tjdHgtPmR4X2Rpcl9pbmZvX2NvdW50LTFdLmlubyA+PSBpbm8pIHsKKwkJZm9yIChpID0gY3R4LT5keF9kaXJfaW5mb19jb3VudC0xOyBpID4gMDsgaS0tKQorCQkJaWYgKGN0eC0+ZHhfZGlyX2luZm9baS0xXS5pbm8gPCBpbm8pCisJCQkJYnJlYWs7CisJCWRpciA9ICZjdHgtPmR4X2Rpcl9pbmZvW2ldOworCQlpZiAoZGlyLT5pbm8gIT0gaW5vKQorCQkJZm9yIChqID0gY3R4LT5keF9kaXJfaW5mb19jb3VudCsrOyBqID4gaTsgai0tKQorCQkJCWN0eC0+ZHhfZGlyX2luZm9bal0gPSBjdHgtPmR4X2Rpcl9pbmZvW2otMV07CisJfSBlbHNlCisJCWRpciA9ICZjdHgtPmR4X2Rpcl9pbmZvW2N0eC0+ZHhfZGlyX2luZm9fY291bnQrK107CisKKwlkaXItPmlubyA9IGlubzsKKwlkaXItPm51bWJsb2NrcyA9IG51bV9ibG9ja3M7CisJZGlyLT5oYXNodmVyc2lvbiA9IDA7CisJZGlyLT5keF9ibG9jayA9IGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LCBudW1fYmxvY2tzCisJCQkJICAgICAgICogc2l6ZW9mIChzdHJ1Y3QgZHhfZGlyYmxvY2tfaW5mbyksCisJCQkJICAgICAgICJkeF9ibG9jayBpbmZvIGFycmF5Iik7CisKK30KKworLyoKKyAqIGdldF9keF9kaXJfaW5mbygpIC0tLSBnaXZlbiBhbiBpbm9kZSBudW1iZXIsIHRyeSB0byBmaW5kIHRoZSBkaXJlY3RvcnkKKyAqIGluZm9ybWF0aW9uIGVudHJ5IGZvciBpdC4KKyAqLworc3RydWN0IGR4X2Rpcl9pbmZvICplMmZzY2tfZ2V0X2R4X2Rpcl9pbmZvKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8pCit7CisJaW50CWxvdywgaGlnaCwgbWlkOworCisJbG93ID0gMDsKKwloaWdoID0gY3R4LT5keF9kaXJfaW5mb19jb3VudC0xOworCWlmICghY3R4LT5keF9kaXJfaW5mbykKKwkJcmV0dXJuIDA7CisJaWYgKGlubyA9PSBjdHgtPmR4X2Rpcl9pbmZvW2xvd10uaW5vKQorCQlyZXR1cm4gJmN0eC0+ZHhfZGlyX2luZm9bbG93XTsKKwlpZiAgKGlubyA9PSBjdHgtPmR4X2Rpcl9pbmZvW2hpZ2hdLmlubykKKwkJcmV0dXJuICZjdHgtPmR4X2Rpcl9pbmZvW2hpZ2hdOworCisJd2hpbGUgKGxvdyA8IGhpZ2gpIHsKKwkJbWlkID0gKGxvdytoaWdoKS8yOworCQlpZiAobWlkID09IGxvdyB8fCBtaWQgPT0gaGlnaCkKKwkJCWJyZWFrOworCQlpZiAoaW5vID09IGN0eC0+ZHhfZGlyX2luZm9bbWlkXS5pbm8pCisJCQlyZXR1cm4gJmN0eC0+ZHhfZGlyX2luZm9bbWlkXTsKKwkJaWYgKGlubyA8IGN0eC0+ZHhfZGlyX2luZm9bbWlkXS5pbm8pCisJCQloaWdoID0gbWlkOworCQllbHNlCisJCQlsb3cgPSBtaWQ7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogRnJlZSB0aGUgZHhfZGlyX2luZm8gc3RydWN0dXJlIHdoZW4gaXQgaXNuJ3QgbmVlZGVkIGFueSBtb3JlLgorICovCit2b2lkIGUyZnNja19mcmVlX2R4X2Rpcl9pbmZvKGUyZnNja190IGN0eCkKK3sKKwlpbnQJaTsKKwlzdHJ1Y3QgZHhfZGlyX2luZm8gKmRpcjsKKworCWlmIChjdHgtPmR4X2Rpcl9pbmZvKSB7CisJCWRpciA9IGN0eC0+ZHhfZGlyX2luZm87CisJCWZvciAoaT0wOyBpIDwgY3R4LT5keF9kaXJfaW5mb19jb3VudDsgaSsrLGRpcisrKSB7CisJCQlpZiAoZGlyLT5keF9ibG9jaykgeworCQkJCWV4dDJmc19mcmVlX21lbSgmZGlyLT5keF9ibG9jayk7CisJCQkJZGlyLT5keF9ibG9jayA9IDA7CisJCQl9CisJCX0KKwkJZXh0MmZzX2ZyZWVfbWVtKCZjdHgtPmR4X2Rpcl9pbmZvKTsKKwkJY3R4LT5keF9kaXJfaW5mbyA9IDA7CisJfQorCWN0eC0+ZHhfZGlyX2luZm9fc2l6ZSA9IDA7CisJY3R4LT5keF9kaXJfaW5mb19jb3VudCA9IDA7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGNvdW50IG9mIG51bWJlciBvZiBkaXJlY3RvcmllcyBpbiB0aGUgZHhfZGlyX2luZm8gc3RydWN0dXJlCisgKi8KK2ludCBlMmZzY2tfZ2V0X251bV9keF9kaXJpbmZvKGUyZnNja190IGN0eCkKK3sKKwlyZXR1cm4gY3R4LT5keF9kaXJfaW5mb19jb3VudDsKK30KKworLyoKKyAqIEEgc2ltcGxlIGludGVyYXRvciBmdW5jdGlvbgorICovCitzdHJ1Y3QgZHhfZGlyX2luZm8gKmUyZnNja19keF9kaXJfaW5mb19pdGVyKGUyZnNja190IGN0eCwgaW50ICpjb250cm9sKQoreworCWlmICgqY29udHJvbCA+PSBjdHgtPmR4X2Rpcl9pbmZvX2NvdW50KQorCQlyZXR1cm4gMDsKKworCXJldHVybihjdHgtPmR4X2Rpcl9pbmZvICsgKCpjb250cm9sKSsrKTsKK30KKworI2VuZGlmIC8qIEVOQUJMRV9IVFJFRSAqLwpkaWZmIC0tZ2l0IGEvZTJmc2NrL2UyZnNjay44LmluIGIvZTJmc2NrL2UyZnNjay44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZWQ3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svZTJmc2NrLjguaW4KQEAgLTAsMCArMSw0MTcgQEAKKy5cIiAtKi0gbnJvZmYgLSotCisuXCIgQ29weXJpZ2h0IDE5OTMsIDE5OTQsIDE5OTUgYnkgVGhlb2RvcmUgVHMnby4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisuXCIgVGhpcyBmaWxlIG1heSBiZSBjb3BpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisuXCIgCisuVEggRTJGU0NLIDggIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2UyZnNjayBcLSBjaGVjayBhIExpbnV4IGV4dDIvZXh0My9leHQ0IGZpbGUgc3lzdGVtCisuU0ggU1lOT1BTSVMKKy5CIGUyZnNjaworWworLkIgXC1wYWNueXJkZmt2dERGVgorXQorWworLkIgXC1iCisuSSBzdXBlcmJsb2NrCitdCitbCisuQiBcLUIKKy5JIGJsb2Nrc2l6ZQorXQorWworLkJSIFwtbCB8IFwtTAorLkkgYmFkX2Jsb2Nrc19maWxlCitdCitbCisuQiBcLUMKKy5JIGZkCitdCitASkRFVkBbCitASkRFVkAuQiBcLWoKK0BKREVWQC5JIGV4dGVybmFsLWpvdXJuYWwKK0BKREVWQF0KK1sKKy5CIFwtRQorLkkgZXh0ZW5kZWRfb3B0aW9ucworXQorLkkgZGV2aWNlCisuU0ggREVTQ1JJUFRJT04KKy5CIGUyZnNjaworaXMgdXNlZCB0byBjaGVjayB0aGUgZXh0Mi9leHQzL2V4dDQgZmFtaWx5IG9mIGZpbGUgc3lzdGVtcy4gICAKK0ZvciBleHQzIGFuZCBleHQ0IGZpbGVzeXN0ZW1zIHRoYXQgdXNlIGEgam91cm5hbCwgaWYgdGhlIHN5c3RlbSBoYXMgYmVlbgorc2h1dCBkb3duIHVuY2xlYW5seSB3aXRob3V0IGFueSBlcnJvcnMsIG5vcm1hbGx5LCBhZnRlciByZXBsYXlpbmcgdGhlCitjb21taXR0ZWQgdHJhbnNhY3Rpb25zICBpbiB0aGUgam91cm5hbCwgdGhlIGZpbGUgc3lzdGVtIHNob3VsZCBiZQorbWFya2VkIGFzIGNsZWFuLiAgIEhlbmNlLCBmb3IgZmlsZXN5c3RlbXMgdGhhdCB1c2Ugam91cm5hbGxpbmcsCisuQiBlMmZzY2sKK3dpbGwgbm9ybWFsbHkgcmVwbGF5IHRoZSBqb3VybmFsIGFuZCBleGl0LCB1bmxlc3MgaXRzIHN1cGVyYmxvY2sKK2luZGljYXRlcyB0aGF0IGZ1cnRoZXIgY2hlY2tpbmcgaXMgcmVxdWlyZWQuCisuUFAKKy5JIGRldmljZQoraXMgdGhlIGRldmljZSBmaWxlIHdoZXJlIHRoZSBmaWxlc3lzdGVtIGlzIHN0b3JlZCAoZS5nLgorLklSIC9kZXYvaGRjMSApLgorLlBQCitOb3RlIHRoYXQgaW4gZ2VuZXJhbCBpdCBpcyBub3Qgc2FmZSB0byBydW4KKy5CIGUyZnNjaworb24gbW91bnRlZCBmaWxlc3lzdGVtcy4gIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBpZiB0aGUKKy5CIFwtbgorb3B0aW9uIGlzIHNwZWNpZmllZCwgYW5kIAorLkJSIFwtYyAsIAorLkJSIFwtbCAsCitvcgorLkIgLUwKK29wdGlvbnMgYXJlIAorLkkgbm90CitzcGVjaWZpZWQuICAgSG93ZXZlciwgZXZlbiBpZiBpdCBpcyBzYWZlIHRvIGRvIHNvLCB0aGUgcmVzdWx0cyBwcmludGVkIGJ5CisuQiBlMmZzY2sKK2FyZSBub3QgdmFsaWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4gICBJZiAKKy5CIGUyZnNjaworYXNrcyB3aGV0aGVyIG9yIG5vdCB5b3Ugc2hvdWxkIGNoZWNrIGEgZmlsZXN5c3RlbSB3aGljaCBpcyBtb3VudGVkLCAKK3RoZSBvbmx5IGNvcnJlY3QgYW5zd2VyIGlzIGBgbm8nJy4gIE9ubHkgZXhwZXJ0cyB3aG8gcmVhbGx5IGtub3cgd2hhdAordGhleSBhcmUgZG9pbmcgc2hvdWxkIGNvbnNpZGVyIGFuc3dlcmluZyB0aGlzIHF1ZXN0aW9uIGluIGFueSBvdGhlciB3YXkuCisuU0ggT1BUSU9OUworLlRQCisuQiBcLWEgCitUaGlzIG9wdGlvbiBkb2VzIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSAKKy5CIFwtcAorb3B0aW9uLiAgSXQgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG9ubHk7IGl0IGlzCitzdWdnZXN0ZWQgdGhhdCBwZW9wbGUgdXNlIAorLkIgXC1wIAorb3B0aW9uIHdoZW5ldmVyIHBvc3NpYmxlLgorLlRQCisuQkkgXC1iICIgc3VwZXJibG9jayIKK0luc3RlYWQgb2YgdXNpbmcgdGhlIG5vcm1hbCBzdXBlcmJsb2NrLCB1c2UgYW4gYWx0ZXJuYXRpdmUgc3VwZXJibG9jaworc3BlY2lmaWVkIGJ5IAorLklSIHN1cGVyYmxvY2sgLgorVGhpcyBvcHRpb24gaXMgbm9ybWFsbHkgdXNlZCB3aGVuIHRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgaGFzIGJlZW4KK2NvcnJ1cHRlZC4gIFRoZSBsb2NhdGlvbiBvZiB0aGUgYmFja3VwIHN1cGVyYmxvY2sgaXMgZGVwZW5kZW50IG9uIHRoZQorZmlsZXN5c3RlbSdzIGJsb2Nrc2l6ZS4gIEZvciBmaWxlc3lzdGVtcyB3aXRoIDFrIGJsb2Nrc2l6ZXMsIGEgYmFja3VwCitzdXBlcmJsb2NrIGNhbiBiZSBmb3VuZCBhdCBibG9jayA4MTkzOyBmb3IgZmlsZXN5c3RlbXMgd2l0aCAyaworYmxvY2tzaXplcywgYXQgYmxvY2sgMTYzODQ7IGFuZCBmb3IgNGsgYmxvY2tzaXplcywgYXQgYmxvY2sgMzI3NjguICAKKy5JUAorQWRkaXRpb25hbCBiYWNrdXAgc3VwZXJibG9ja3MgY2FuIGJlIGRldGVybWluZWQgYnkgdXNpbmcgdGhlIAorLkIgbWtlMmZzIAorcHJvZ3JhbSB1c2luZyB0aGUgCisuQiBcLW4KK29wdGlvbiB0byBwcmludCBvdXQgd2hlcmUgdGhlIHN1cGVyYmxvY2tzIHdlcmUgY3JlYXRlZC4gICBUaGUgCisuQiBcLWIgCitvcHRpb24gdG8gCisuQlIgbWtlMmZzICwKK3doaWNoIHNwZWNpZmllcyBibG9ja3NpemUgb2YgdGhlIGZpbGVzeXN0ZW0gbXVzdCBiZSBzcGVjaWZpZWQgaW4gb3JkZXIKK2ZvciB0aGUgc3VwZXJibG9jayBsb2NhdGlvbnMgdGhhdCBhcmUgcHJpbnRlZCBvdXQgdG8gYmUgYWNjdXJhdGUuCisuSVAKK0lmIGFuIGFsdGVybmF0aXZlIHN1cGVyYmxvY2sgaXMgc3BlY2lmaWVkIGFuZCAgCit0aGUgZmlsZXN5c3RlbSBpcyBub3Qgb3BlbmVkIHJlYWQtb25seSwgZTJmc2NrIHdpbGwgbWFrZSBzdXJlIHRoYXQgdGhlCitwcmltYXJ5IHN1cGVyYmxvY2sgaXMgdXBkYXRlZCBhcHByb3ByaWF0ZWx5IHVwb24gY29tcGxldGlvbiBvZiB0aGUgCitmaWxlc3lzdGVtIGNoZWNrLgorLlRQCisuQkkgXC1CICIgYmxvY2tzaXplIgorTm9ybWFsbHksIAorLkIgZTJmc2NrCit3aWxsIHNlYXJjaCBmb3IgdGhlIHN1cGVyYmxvY2sgYXQgdmFyaW91cyBkaWZmZXJlbnQKK2Jsb2NrIHNpemVzIGluIGFuIGF0dGVtcHQgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgYmxvY2sgc2l6ZS4KK1RoaXMgc2VhcmNoIGNhbiBiZSBmb29sZWQgaW4gc29tZSBjYXNlcy4gIFRoaXMgb3B0aW9uIGZvcmNlcyAKKy5CIGUyZnNjawordG8gb25seSB0cnkgbG9jYXRpbmcgdGhlIHN1cGVyYmxvY2sgYXQgYSBwYXJ0aWN1bGFyIGJsb2Nrc2l6ZS4KK0lmIHRoZSBzdXBlcmJsb2NrIGlzIG5vdCBmb3VuZCwgCisuQiBlMmZzY2sgCit3aWxsIHRlcm1pbmF0ZSB3aXRoIGEgZmF0YWwgZXJyb3IuCisuVFAKKy5CIFwtYworVGhpcyBvcHRpb24gY2F1c2VzIAorLkIgZTJmc2NrIAordG8gdXNlIAorLkJSIGJhZGJsb2NrcyAoOCkKK3Byb2dyYW0gdG8gZG8gYSByZWFkLW9ubHkgc2NhbiBvZiB0aGUgZGV2aWNlIGluIG9yZGVyIHRvIGZpbmQgYW55IGJhZAorYmxvY2tzLiAgSWYgYW55IGJhZCBibG9ja3MgYXJlIGZvdW5kLCB0aGV5IGFyZSBhZGRlZCB0byB0aGUgYmFkIGJsb2NrCitpbm9kZSB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyBhbGxvY2F0ZWQgdG8gYSBmaWxlIG9yIGRpcmVjdG9yeS4gIElmCit0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQgdHdpY2UsIHRoZW4gdGhlIGJhZCBibG9jayBzY2FuIHdpbGwgYmUgZG9uZQordXNpbmcgYSBub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSB0ZXN0LgorLlRQCisuQkkgXC1DICIgZmQiCitUaGlzIG9wdGlvbiBjYXVzZXMKKy5CIGUyZnNjawordG8gd3JpdGUgY29tcGxldGlvbiBpbmZvcm1hdGlvbiB0byB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvciAKK3NvIHRoYXQgdGhlIHByb2dyZXNzIG9mIHRoZSBmaWxlc3lzdGVtIAorY2hlY2sgY2FuIGJlIG1vbml0b3JlZC4gIFRoaXMgb3B0aW9uIGlzIHR5cGljYWxseSB1c2VkIGJ5IHByb2dyYW1zIAord2hpY2ggYXJlIHJ1bm5pbmcKKy5CUiBlMmZzY2sgLgorSWYgdGhlIGZpbGUgZGVzY3JpcHRvciBudW1iZXIgaXMgbmVnYXRpdmUsIHRoZW4gYWJzb2x1dGUgdmFsdWUgb2YKK3RoZSBmaWxlIGRlc2NyaXB0b3Igd2lsbCBiZSB1c2VkLCBhbmQgdGhlIHByb2dyZXNzIGluZm9ybWF0aW9uIHdpbGwgYmUKK3N1cHByZXNzZWQgaW5pdGlhbGx5LiAgSXQgY2FuIGxhdGVyIGJlIGVuYWJsZWQgYnkgc2VuZGluZyB0aGUKKy5CIGUyZnNjaworcHJvY2VzcyBhIFNJR1VTUjEgc2lnbmFsLgorSWYgdGhlIGZpbGUgZGVzY3JpcHRvciBzcGVjaWZpZWQgaXMgMCwgCisuQiBlMmZzY2sKK3dpbGwgcHJpbnQgYSBjb21wbGV0aW9uIGJhciBhcyBpdCBnb2VzIGFib3V0IGl0cyBidXNpbmVzcy4gIFRoaXMgcmVxdWlyZXMKK3RoYXQgZTJmc2NrIGlzIHJ1bm5pbmcgb24gYSB2aWRlbyBjb25zb2xlIG9yIHRlcm1pbmFsLgorLlRQCisuQiBcLWQKK1ByaW50IGRlYnVnZ2luZyBvdXRwdXQgKHVzZWxlc3MgdW5sZXNzIHlvdSBhcmUgZGVidWdnaW5nCisuQlIgZTJmc2NrICkuCisuVFAKKy5CIFwtRAorT3B0aW1pemUgZGlyZWN0b3JpZXMgaW4gZmlsZXN5c3RlbS4gIFRoaXMgb3B0aW9uIGNhdXNlcyBlMmZzY2sgdG8KK3RyeSB0byBvcHRpbWl6ZSBhbGwgZGlyZWN0b3JpZXMsIGVpdGhlciBieSByZWluZGV4aW5nIHRoZW0gaWYgdGhlCitmaWxlc3lzdGVtIHN1cHBvcnRzIGRpcmVjdG9yeSBpbmRleGluZywgIG9yIGJ5IHNvcnRpbmcgYW5kIGNvbXByZXNzaW5nCitkaXJlY3RvcmllcyBmb3Igc21hbGxlciBkaXJlY3Rvcmllcywgb3IgZm9yIGZpbGVzeXN0ZW1zIHVzaW5nCit0cmFkaXRpb25hbCBsaW5lYXIgZGlyZWN0b3JpZXMuCisuSVAKK0V2ZW4gd2l0aG91dCB0aGUKKy5CIFwtRAorb3B0aW9uLAorLkIgZTJmc2NrCittYXkgc29tZXRpbWVzIG9wdGltaXplIGEgZmV3IGRpcmVjdG9yaWVzIC0tLSBmb3IgZXhhbXBsZSwgaWYKK2RpcmVjdG9yeSBpbmRleGluZyBpcyBlbmFibGVkIGFuZCBhIGRpcmVjdG9yeSBpcyBub3QgaW5kZXhlZCBhbmQgd291bGQKK2JlbmVmaXQgZnJvbSBiZWluZyBpbmRleGVkLCBvciBpZiB0aGUgaW5kZXggc3RydWN0dXJlcyBhcmUgY29ycnVwdGVkCithbmQgbmVlZCB0byBiZSByZWJ1aWx0LiAgVGhlCisuQiBcLUQKK29wdGlvbiBmb3JjZXMgYWxsIGRpcmVjdG9yaWVzIGluIHRoZSBmaWxlc3lzdGVtIHRvIGJlIG9wdGltaXplZC4gIFRoaXMgY2FuCitzb21ldGltZXMgbWFrZSB0aGVtIGEgbGl0dGxlIHNtYWxsZXIgYW5kIHNsaWdodGx5IGZhc3RlciB0byBzZWFyY2gsIGJ1dAoraW4gcHJhY3RpY2UsIHlvdSBzaG91bGQgcmFyZWx5IG5lZWQgdG8gdXNlIHRoaXMgb3B0aW9uLgorLklQCitUaGUKKy5CIFwtRAorb3B0aW9uIHdpbGwgZGV0ZWN0IGRpcmVjdG9yeSBlbnRyaWVzIHdpdGggZHVwbGljYXRlIG5hbWVzIGluIGEgc2luZ2xlCitkaXJlY3RvcnksIHdoaWNoIGUyZnNjayBub3JtYWxseSBkb2VzIG5vdCBlbmZvcmNlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorLlRQCisuQkkgXC1FICIgZXh0ZW5kZWRfb3B0aW9ucyIKK1NldCBlMmZzY2sgZXh0ZW5kZWQgb3B0aW9ucy4gIEV4dGVuZGVkIG9wdGlvbnMgYXJlIGNvbW1hCitzZXBhcmF0ZWQsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB1c2luZyB0aGUgZXF1YWxzICgnPScpIHNpZ24uICBUaGUgCitmb2xsb3dpbmcgb3B0aW9ucyBhcmUgc3VwcG9ydGVkOgorLlJTIDEuMmkKKy5UUAorLkJJIGVhX3Zlcj0gZXh0ZW5kZWRfYXR0cmlidXRlX3ZlcnNpb24KK1NldCB0aGUgdmVyc2lvbiBvZiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrcyB3aGljaAorLkIgZTJmc2NrCit3aWxsIHJlcXVpcmUgd2hpbGUgY2hlY2tpbmcgdGhlIGZpbGVzeXN0ZW0uICBUaGUgdmVyc2lvbiBudW1iZXIgbWF5IAorYmUgMSBvciAyLiAgVGhlIGRlZmF1bHQgZXh0ZW5kZWQgYXR0cmlidXRlIHZlcnNpb24gZm9ybWF0IGlzIDIuCisuVFAKKy5CSSBqb3VybmFsX29ubHkKK09ubHkgcmVwbGF5IHRoZSBqb3VybmFsIGlmIHJlcXVpcmVkLCBidXQgZG8gbm90IHBlcmZvcm0gYW55IGZ1cnRoZXIgY2hlY2tzCitvciByZXBhaXJzLgorLlRQCisuQkkgZnJhZ2NoZWNrCitEdXJpbmcgcGFzcyAxLCBwcmludCBhIGRldGFpbGVkIHJlcG9ydCBvZiBhbnkgZGlzY29udGlndW91cyBibG9ja3MgZm9yCitmaWxlcyBpbiB0aGUgZmlsZXN5c3RlbS4KKy5UUAorLkJJIGRpc2NhcmQKK0F0dGVtcHQgdG8gZGlzY2FyZCBmcmVlIGJsb2NrcyBhbmQgdW51c2VkIGlub2RlIGJsb2NrcyBhZnRlciB0aGUgZnVsbAorZmlsZXN5c3RlbSBjaGVjayAoZGlzY2FyZGluZyBibG9ja3MgaXMgdXNlZnVsIG9uIHNvbGlkIHN0YXRlIGRldmljZXMgYW5kIHNwYXJzZQorLyB0aGluLXByb3Zpc2lvbmVkIHN0b3JhZ2UpLiBOb3RlIHRoYXQgZGlzY2FyZCBpcyBkb25lIGluIHBhc3MgNSBBRlRFUiB0aGUKK2ZpbGVzeXN0ZW0gaGFzIGJlZW4gZnVsbHkgY2hlY2tlZCBhbmQgb25seSBpZiBpdCBkb2VzIG5vdCBjb250YWluIHJlY29nbml6YWJsZQorZXJyb3JzLiBIb3dldmVyIHRoZXJlIG1pZ2h0IGJlIGNhc2VzIHdoZXJlCisuQiBlMmZzY2sKK2RvZXMgbm90IGZ1bGx5IHJlY29nbml6ZSBhIHByb2JsZW0gYW5kIGhlbmNlIGluIHRoaXMgY2FzZSB0aGlzCitvcHRpb24gbWF5IHByZXZlbnQgeW91IGZyb20gZnVydGhlciBtYW51YWwgZGF0YSByZWNvdmVyeS4KKy5UUAorLkJJIG5vZGlzY2FyZAorRG8gbm90IGF0dGVtcHQgdG8gZGlzY2FyZCBmcmVlIGJsb2NrcyBhbmQgdW51c2VkIGlub2RlIGJsb2Nrcy4gVGhpcyBvcHRpb24gaXMKK2V4YWN0bHkgdGhlIG9wcG9zaXRlIG9mIGRpc2NhcmQgb3B0aW9uLiBUaGlzIGlzIHNldCBhcyBkZWZhdWx0LgorLlJFCisuVFAKKy5CIFwtZgorRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiB0aGUgZmlsZSBzeXN0ZW0gc2VlbXMgY2xlYW4uCisuVFAKKy5CIFwtRgorRmx1c2ggdGhlIGZpbGVzeXN0ZW0gZGV2aWNlJ3MgYnVmZmVyIGNhY2hlcyBiZWZvcmUgYmVnaW5uaW5nLiAgT25seQorcmVhbGx5IHVzZWZ1bCBmb3IgZG9pbmcgCisuQiBlMmZzY2sgCit0aW1lIHRyaWFscy4KK0BKREVWQC5UUAorQEpERVZALkJJIFwtaiAiIGV4dGVybmFsLWpvdXJuYWwiCitASkRFVkBTZXQgdGhlIHBhdGhuYW1lIHdoZXJlIHRoZSBleHRlcm5hbC1qb3VybmFsIGZvciB0aGlzIGZpbGVzeXN0ZW0gY2FuIGJlCitASkRFVkBmb3VuZC4KKy5UUAorLkJJIFwtaworV2hlbiBjb21iaW5lZCB3aXRoIHRoZSAKKy5CIFwtYworb3B0aW9uLCBhbnkgZXhpc3RpbmcgYmFkIGJsb2NrcyBpbiB0aGUgYmFkIGJsb2NrcyBsaXN0IGFyZSBwcmVzZXJ2ZWQsCithbmQgYW55IG5ldyBiYWQgYmxvY2tzIGZvdW5kIGJ5IHJ1bm5pbmcKKy5CUiBiYWRibG9ja3MgKDgpIAord2lsbCBiZSBhZGRlZCB0byB0aGUgZXhpc3RpbmcgYmFkIGJsb2NrcyBsaXN0LgorLlRQCisuQkkgXC1sICIgZmlsZW5hbWUiCitBZGQgdGhlIGJsb2NrIG51bWJlcnMgbGlzdGVkIGluIHRoZSBmaWxlIHNwZWNpZmllZCBieSAKKy5JIGZpbGVuYW1lCit0byB0aGUgbGlzdCBvZiBiYWQgYmxvY2tzLiAgVGhlIGZvcm1hdCBvZiB0aGlzIGZpbGUgaXMgdGhlIHNhbWUgYXMgdGhlCitvbmUgZ2VuZXJhdGVkIGJ5IHRoZSAKKy5CUiBiYWRibG9ja3MgKDgpCitwcm9ncmFtLiAgTm90ZSB0aGF0IHRoZSBibG9jayBudW1iZXJzIGFyZSBiYXNlZCBvbiB0aGUgYmxvY2tzaXplCitvZiB0aGUgZmlsZXN5c3RlbS4gIEhlbmNlLCAKKy5CUiBiYWRibG9ja3MgKDgpCittdXN0IGJlIGdpdmVuIHRoZSBibG9ja3NpemUgb2YgdGhlIGZpbGVzeXN0ZW0gaW4gb3JkZXIgdG8gb2J0YWluIGNvcnJlY3QKK3Jlc3VsdHMuICBBcyBhIHJlc3VsdCwgaXQgaXMgbXVjaCBzaW1wbGVyIGFuZCBzYWZlciB0byB1c2UgdGhlIAorLkIgLWMKK29wdGlvbiB0byAKKy5CUiBlMmZzY2sgLAorc2luY2UgaXQgd2lsbCBhc3N1cmUgdGhhdCB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gdGhlCisuQiBiYWRibG9ja3MKK3Byb2dyYW0uCisuVFAKKy5CSSBcLUwgIiBmaWxlbmFtZSIKK1NldCB0aGUgYmFkIGJsb2NrcyBsaXN0IHRvIGJlIHRoZSBsaXN0IG9mIGJsb2NrcyBzcGVjaWZpZWQgYnkgCisuSVIgZmlsZW5hbWUgLgorKFRoaXMgb3B0aW9uIGlzIHRoZSBzYW1lIGFzIHRoZSAKKy5CIFwtbAorb3B0aW9uLCBleGNlcHQgdGhlIGJhZCBibG9ja3MgbGlzdCBpcyBjbGVhcmVkIGJlZm9yZSB0aGUgYmxvY2tzIGxpc3RlZAoraW4gdGhlIGZpbGUgYXJlIGFkZGVkIHRvIHRoZSBiYWQgYmxvY2tzIGxpc3QuKQorLlRQCisuQiBcLW4KK09wZW4gdGhlIGZpbGVzeXN0ZW0gcmVhZC1vbmx5LCBhbmQgYXNzdW1lIGFuIGFuc3dlciBvZiBgbm8nIHRvIGFsbAorcXVlc3Rpb25zLiAgQWxsb3dzCisuQiBlMmZzY2sKK3RvIGJlIHVzZWQgbm9uLWludGVyYWN0aXZlbHkuICBUaGlzIG9wdGlvbgorbWF5IG5vdCBiZSBzcGVjaWZpZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgCisuQiBcLXAKK29yCisuQiBcLXkKK29wdGlvbnMuCisuVFAKKy5CIFwtcAorQXV0b21hdGljYWxseSByZXBhaXIgKCJwcmVlbiIpIHRoZSBmaWxlIHN5c3RlbS4gIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2UKKy5CIGUyZnNjawordG8gYXV0b21hdGljYWxseQorZml4IGFueSBmaWxlc3lzdGVtIHByb2JsZW1zIHRoYXQgY2FuIGJlIHNhZmVseSBmaXhlZCB3aXRob3V0IGh1bWFuCitpbnRlcnZlbnRpb24uICBJZiAKKy5CIGUyZnNjaworZGlzY292ZXJzIGEgcHJvYmxlbSB3aGljaCBtYXkgcmVxdWlyZSB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IKK3RvIHRha2UgYWRkaXRpb25hbCBjb3JyZWN0aXZlIGFjdGlvbiwgCisuQiBlMmZzY2sKK3dpbGwgcHJpbnQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvYmxlbSBhbmQgdGhlbiBleGl0IHdpdGggdGhlIHZhbHVlIDQKK2xvZ2ljYWxseSBvcidlZCBpbnRvIHRoZSBleGl0IGNvZGUuICAoU2VlIHRoZSBcZkJFWElUIENPREVcZlIgc2VjdGlvbi4pCitUaGlzIG9wdGlvbiBpcyBub3JtYWxseSB1c2VkIGJ5IHRoZSBzeXN0ZW0ncyBib290IHNjcmlwdHMuICBJdCBtYXkgbm90IAorYmUgc3BlY2lmaWVkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlCisuQiBcLW4KK29yCisuQiBcLXkKK29wdGlvbnMuCisuVFAKKy5CIFwtcgorVGhpcyBvcHRpb24gZG9lcyBub3RoaW5nIGF0IGFsbDsgaXQgaXMgcHJvdmlkZWQgb25seSBmb3IgYmFja3dhcmRzCitjb21wYXRpYmlsaXR5LgorLlRQCisuQiBcLXQKK1ByaW50IHRpbWluZyBzdGF0aXN0aWNzIGZvcgorLkJSIGUyZnNjayAuCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHR3aWNlLCBhZGRpdGlvbmFsIHRpbWluZyBzdGF0aXN0aWNzIGFyZSBwcmludGVkCitvbiBhIHBhc3MgYnkgcGFzcyBiYXNpcy4KKy5UUAorLkIgXC12CitWZXJib3NlIG1vZGUuCisuVFAKKy5CIFwtVgorUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdC4KKy5UUAorLkIgXC15CitBc3N1bWUgYW4gYW5zd2VyIG9mIGB5ZXMnIHRvIGFsbCBxdWVzdGlvbnM7IGFsbG93cyAKKy5CIGUyZnNjawordG8gYmUgdXNlZCBub24taW50ZXJhY3RpdmVseS4gIFRoaXMgb3B0aW9uCittYXkgbm90IGJlIHNwZWNpZmllZCBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSAKKy5CIFwtbgorb3IKKy5CIFwtcAorb3B0aW9ucy4KKy5TSCBFWElUIENPREUKK1RoZSBleGl0IGNvZGUgcmV0dXJuZWQgYnkKKy5CIGUyZnNjaworaXMgdGhlIHN1bSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisuYnIKK1wJMFwJXC1cIE5vIGVycm9ycworLmJyCitcCTFcCVwtXCBGaWxlIHN5c3RlbSBlcnJvcnMgY29ycmVjdGVkCisuYnIKK1wJMlwJXC1cIEZpbGUgc3lzdGVtIGVycm9ycyBjb3JyZWN0ZWQsIHN5c3RlbSBzaG91bGQKKy5icgorXAlcCVwgXCBiZSByZWJvb3RlZAorLmJyCitcCTRcCVwtXCBGaWxlIHN5c3RlbSBlcnJvcnMgbGVmdCB1bmNvcnJlY3RlZAorLmJyCitcCThcCVwtXCBPcGVyYXRpb25hbCBlcnJvcgorLmJyCitcCTE2XAlcLVwgVXNhZ2Ugb3Igc3ludGF4IGVycm9yCisuYnIKK1wJMzJcCVwtXCBFMmZzY2sgY2FuY2VsZWQgYnkgdXNlciByZXF1ZXN0CisuYnIKK1wJMTI4XAlcLVwgU2hhcmVkIGxpYnJhcnkgZXJyb3IKKy5icgorLlNIIFNJR05BTFMKK1RoZSBmb2xsb3dpbmcgc2lnbmFscyBoYXZlIHRoZSBmb2xsb3dpbmcgZWZmZWN0IHdoZW4gc2VudCB0byAKKy5CUiBlMmZzY2sgLgorLlRQCisuQiBTSUdVU1IxCitUaGlzIHNpZ25hbCBjYXVzZXMKKy5CIGUyZnNjawordG8gc3RhcnQgZGlzcGxheWluZyBhIGNvbXBsZXRpb24gYmFyIG9yIGVtaXR0aW5nIHByb2dyZXNzIGluZm9ybWF0aW9uLiAgCisoU2VlIGRpc2N1c3Npb24gb2YgdGhlIAorLkIgXC1DCitvcHRpb24uKQorLlRQCisuQiBTSUdVU1IyCitUaGlzIHNpZ25hbCBjYXVzZXMKKy5CIGUyZnNjayAKK3RvIHN0b3AgZGlzcGxheWluZyBhIGNvbXBsZXRpb24gYmFyIG9yIGVtaXR0aW5nIHByb2dyZXNzIGluZm9ybWF0aW9uLgorLlNIIFJFUE9SVElORyBCVUdTCitBbG1vc3QgYW55IHBpZWNlIG9mIHNvZnR3YXJlIHdpbGwgaGF2ZSBidWdzLiAgSWYgeW91IG1hbmFnZSB0byBmaW5kIGEKK2ZpbGVzeXN0ZW0gd2hpY2ggY2F1c2VzIAorLkIgZTJmc2NrCit0byBjcmFzaCwgb3Igd2hpY2ggCisuQiBlMmZzY2sKK2lzIHVuYWJsZSB0byByZXBhaXIsIHBsZWFzZSByZXBvcnQgaXQgdG8gdGhlIGF1dGhvci4KKy5QUAorUGxlYXNlIGluY2x1ZGUgYXMgbXVjaCBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZSBpbiB5b3VyIGJ1ZyByZXBvcnQuCitJZGVhbGx5LCBpbmNsdWRlIGEgY29tcGxldGUgdHJhbnNjcmlwdCBvZiB0aGUKKy5CIGUyZnNjaworcnVuLCBzbyBJIGNhbiBzZWUgZXhhY3RseSB3aGF0IGVycm9yIG1lc3NhZ2VzIGFyZSBkaXNwbGF5ZWQuICAoTWFrZSBzdXJlCit0aGUgbWVzc2FnZXMgcHJpbnRlZCBieSAKKy5CIGUyZnNjayAKK2FyZSBpbiBFbmdsaXNoOyBpZiB5b3VyIHN5c3RlbSBoYXMgYmVlbgorY29uZmlndXJlZCBzbyB0aGF0IAorLkJSIGUyZnNjayAncworbWVzc2FnZXMgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLCBwbGVhc2Ugc2V0IHRoZSB0aGUKKy5CIExDX0FMTAorZW52aXJvbm1lbnQgdmFyaWFibGUgdG8KKy5CIEMKK3NvIHRoYXQgdGhlIHRyYW5zY3JpcHQgb2YgZTJmc2NrJ3Mgb3V0cHV0IHdpbGwgYmUgdXNlZnVsIHRvIG1lLikKK0lmIHlvdQoraGF2ZSBhIHdyaXRhYmxlIGZpbGVzeXN0ZW0gd2hlcmUgdGhlIHRyYW5zY3JpcHQgY2FuIGJlIHN0b3JlZCwgdGhlIAorLkJSIHNjcmlwdCAoMSkKK3Byb2dyYW0gaXMgYSBoYW5keSB3YXkgdG8gc2F2ZSB0aGUgb3V0cHV0IG9mCisuQiBlMmZzY2sKK3RvIGEgZmlsZS4KKy5QUAorSXQgaXMgYWxzbyB1c2VmdWwgdG8gc2VuZCB0aGUgb3V0cHV0IG9mIAorLkJSIGR1bXBlMmZzICg4KS4KK0lmIGEgc3BlY2lmaWMgaW5vZGUgb3IgaW5vZGVzIHNlZW1zIHRvIGJlIGdpdmluZyAKKy5CIGUyZnNjayAKK3Ryb3VibGUsIHRyeSBydW5uaW5nIHRoZQorLkJSIGRlYnVnZnMgKDgpCitjb21tYW5kIGFuZCBzZW5kIHRoZSBvdXRwdXQgb2YgdGhlIAorLkJSIHN0YXQgKDF1KQorY29tbWFuZCBydW4gb24gdGhlIHJlbGV2YW50IGlub2RlKHMpLiAgSWYgdGhlIGlub2RlIGlzIGEgZGlyZWN0b3J5LCB0aGUgCisuQiBkZWJ1Z2ZzCisuSSBkdW1wCitjb21tYW5kIHdpbGwgYWxsb3cgeW91IHRvIGV4dHJhY3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBkaXJlY3RvcnkgaW5vZGUsCit3aGljaCBjYW4gc2VudCB0byBtZSBhZnRlciBiZWluZyBmaXJzdCBydW4gdGhyb3VnaAorLkJSIHV1ZW5jb2RlICgxKS4gIAorVGhlIG1vc3QgdXNlZnVsIGRhdGEgeW91IGNhbiBzZW5kIHRvIGhlbHAgcmVwcm9kdWNlCit0aGUgYnVnIGlzIGEgY29tcHJlc3NlZCByYXcgaW1hZ2UgZHVtcCBvZiB0aGUgZmlsZXN5c3RlbSwgZ2VuZXJhdGVkIHVzaW5nCisuQlIgZTJpbWFnZSAoOCkuCitTZWUgdGhlIAorLkJSIGUyaW1hZ2UgKDgpCittYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLgorLlBQCitBbHdheXMgaW5jbHVkZSB0aGUgZnVsbCB2ZXJzaW9uIHN0cmluZyB3aGljaCAKKy5CIGUyZnNjaworZGlzcGxheXMgd2hlbiBpdCBpcyBydW4sIHNvIEkga25vdyB3aGljaCB2ZXJzaW9uIHlvdSBhcmUgcnVubmluZy4KKy5TSCBBVVRIT1IKK1RoaXMgdmVyc2lvbiBvZiAKKy5CIGUyZnNjaword2FzIHdyaXR0ZW4gYnkgVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4uCisuU0ggU0VFIEFMU08KKy5CUiBlMmZzY2suY29uZiAoNSksCisuQlIgYmFkYmxvY2tzICg4KSwKKy5CUiBkdW1wZTJmcyAoOCksCisuQlIgZGVidWdmcyAoOCksCisuQlIgZTJpbWFnZSAoOCksCisuQlIgbWtlMmZzICg4KSwKKy5CUiB0dW5lMmZzICg4KQpkaWZmIC0tZ2l0IGEvZTJmc2NrL2UyZnNjay5jIGIvZTJmc2NrL2UyZnNjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYzE1NDAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svZTJmc2NrLmMKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBlMmZzY2suYyAtIGEgY29uc2lzdGVuY3kgY2hlY2tlciBmb3IgdGhlIG5ldyBleHRlbmRlZCBmaWxlIHN5c3RlbS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZTJmc2NrLmgiCisjaW5jbHVkZSAicHJvYmxlbS5oIgorCisvKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYW4gZTJmc2NrIGNvbnRleHQKKyAqLworZXJyY29kZV90IGUyZnNja19hbGxvY2F0ZV9jb250ZXh0KGUyZnNja190ICpyZXQpCit7CisJZTJmc2NrX3QJY29udGV4dDsKKwllcnJjb2RlX3QJcmV0dmFsOworCWNoYXIJCSp0aW1lX2VudjsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgZTJmc2NrX3N0cnVjdCksICZjb250ZXh0KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJbWVtc2V0KGNvbnRleHQsIDAsIHNpemVvZihzdHJ1Y3QgZTJmc2NrX3N0cnVjdCkpOworCisJY29udGV4dC0+cHJvY2Vzc19pbm9kZV9zaXplID0gMjU2OworCWNvbnRleHQtPmV4dF9hdHRyX3ZlciA9IDI7CisJY29udGV4dC0+YmxvY2tzX3Blcl9wYWdlID0gMTsKKwljb250ZXh0LT5odHJlZV9zbGFja19wZXJjZW50YWdlID0gMjU1OworCisJdGltZV9lbnYgPSBnZXRlbnYoIkUyRlNDS19USU1FIik7CisJaWYgKHRpbWVfZW52KQorCQljb250ZXh0LT5ub3cgPSBzdHJ0b3VsKHRpbWVfZW52LCBOVUxMLCAwKTsKKwllbHNlIHsKKwkJY29udGV4dC0+bm93ID0gdGltZSgwKTsKKwkJaWYgKGNvbnRleHQtPm5vdyA8IDEyNjIzMjIwMDApIC8qIEphbnVhcnkgMSAyMDEwICovCisJCQljb250ZXh0LT5mbGFncyB8PSBFMkZfRkxBR19USU1FX0lOU0FORTsKKwl9CisKKwkqcmV0ID0gY29udGV4dDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVzZXRzIGFuIGUyZnNjayBjb250ZXh0OyBpdCBpcyBjYWxsZWQgd2hlbiBlMmZzY2sKKyAqIG5lZWRzIHRvIGJlIHJlc3RhcnRlZC4KKyAqLworZXJyY29kZV90IGUyZnNja19yZXNldF9jb250ZXh0KGUyZnNja190IGN0eCkKK3sKKwlpbnQJaTsKKworCWN0eC0+ZmxhZ3MgJj0gRTJGX1JFU0VUX0ZMQUdTOworCWN0eC0+bG9zdF9hbmRfZm91bmQgPSAwOworCWN0eC0+YmFkX2xvc3RfYW5kX2ZvdW5kID0gMDsKKwlpZiAoY3R4LT5pbm9kZV91c2VkX21hcCkgeworCQlleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAoY3R4LT5pbm9kZV91c2VkX21hcCk7CisJCWN0eC0+aW5vZGVfdXNlZF9tYXAgPSAwOworCX0KKwlpZiAoY3R4LT5pbm9kZV9kaXJfbWFwKSB7CisJCWV4dDJmc19mcmVlX2lub2RlX2JpdG1hcChjdHgtPmlub2RlX2Rpcl9tYXApOworCQljdHgtPmlub2RlX2Rpcl9tYXAgPSAwOworCX0KKwlpZiAoY3R4LT5pbm9kZV9yZWdfbWFwKSB7CisJCWV4dDJmc19mcmVlX2lub2RlX2JpdG1hcChjdHgtPmlub2RlX3JlZ19tYXApOworCQljdHgtPmlub2RlX3JlZ19tYXAgPSAwOworCX0KKwlpZiAoY3R4LT5ibG9ja19mb3VuZF9tYXApIHsKKwkJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKGN0eC0+YmxvY2tfZm91bmRfbWFwKTsKKwkJY3R4LT5ibG9ja19mb3VuZF9tYXAgPSAwOworCX0KKwlpZiAoY3R4LT5pbm9kZV9saW5rX2luZm8pIHsKKwkJZXh0MmZzX2ZyZWVfaWNvdW50KGN0eC0+aW5vZGVfbGlua19pbmZvKTsKKwkJY3R4LT5pbm9kZV9saW5rX2luZm8gPSAwOworCX0KKwlpZiAoY3R4LT5qb3VybmFsX2lvKSB7CisJCWlmIChjdHgtPmZzICYmIGN0eC0+ZnMtPmlvICE9IGN0eC0+am91cm5hbF9pbykKKwkJCWlvX2NoYW5uZWxfY2xvc2UoY3R4LT5qb3VybmFsX2lvKTsKKwkJY3R4LT5qb3VybmFsX2lvID0gMDsKKwl9CisJaWYgKGN0eC0+ZnMgJiYgY3R4LT5mcy0+ZGJsaXN0KSB7CisJCWV4dDJmc19mcmVlX2RibGlzdChjdHgtPmZzLT5kYmxpc3QpOworCQljdHgtPmZzLT5kYmxpc3QgPSAwOworCX0KKwllMmZzY2tfZnJlZV9kaXJfaW5mbyhjdHgpOworI2lmZGVmIEVOQUJMRV9IVFJFRQorCWUyZnNja19mcmVlX2R4X2Rpcl9pbmZvKGN0eCk7CisjZW5kaWYKKwlpZiAoY3R4LT5yZWZjb3VudCkgeworCQllYV9yZWZjb3VudF9mcmVlKGN0eC0+cmVmY291bnQpOworCQljdHgtPnJlZmNvdW50ID0gMDsKKwl9CisJaWYgKGN0eC0+cmVmY291bnRfZXh0cmEpIHsKKwkJZWFfcmVmY291bnRfZnJlZShjdHgtPnJlZmNvdW50X2V4dHJhKTsKKwkJY3R4LT5yZWZjb3VudF9leHRyYSA9IDA7CisJfQorCWlmIChjdHgtPmJsb2NrX2R1cF9tYXApIHsKKwkJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKGN0eC0+YmxvY2tfZHVwX21hcCk7CisJCWN0eC0+YmxvY2tfZHVwX21hcCA9IDA7CisJfQorCWlmIChjdHgtPmJsb2NrX2VhX21hcCkgeworCQlleHQyZnNfZnJlZV9ibG9ja19iaXRtYXAoY3R4LT5ibG9ja19lYV9tYXApOworCQljdHgtPmJsb2NrX2VhX21hcCA9IDA7CisJfQorCWlmIChjdHgtPmlub2RlX2JiX21hcCkgeworCQlleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAoY3R4LT5pbm9kZV9iYl9tYXApOworCQljdHgtPmlub2RlX2JiX21hcCA9IDA7CisJfQorCWlmIChjdHgtPmlub2RlX2JhZF9tYXApIHsKKwkJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGN0eC0+aW5vZGVfYmFkX21hcCk7CisJCWN0eC0+aW5vZGVfYmFkX21hcCA9IDA7CisJfQorCWlmIChjdHgtPmlub2RlX2ltYWdpY19tYXApIHsKKwkJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGN0eC0+aW5vZGVfaW1hZ2ljX21hcCk7CisJCWN0eC0+aW5vZGVfaW1hZ2ljX21hcCA9IDA7CisJfQorCWlmIChjdHgtPmRpcnNfdG9faGFzaCkgeworCQlleHQyZnNfdTMyX2xpc3RfZnJlZShjdHgtPmRpcnNfdG9faGFzaCk7CisJCWN0eC0+ZGlyc190b19oYXNoID0gMDsKKwl9CisKKwkvKgorCSAqIENsZWFyIHRoZSBhcnJheSBvZiBpbnZhbGlkIG1ldGEtZGF0YSBmbGFncworCSAqLworCWlmIChjdHgtPmludmFsaWRfaW5vZGVfYml0bWFwX2ZsYWcpIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZjdHgtPmludmFsaWRfaW5vZGVfYml0bWFwX2ZsYWcpOworCQljdHgtPmludmFsaWRfaW5vZGVfYml0bWFwX2ZsYWcgPSAwOworCX0KKwlpZiAoY3R4LT5pbnZhbGlkX2Jsb2NrX2JpdG1hcF9mbGFnKSB7CisJCWV4dDJmc19mcmVlX21lbSgmY3R4LT5pbnZhbGlkX2Jsb2NrX2JpdG1hcF9mbGFnKTsKKwkJY3R4LT5pbnZhbGlkX2Jsb2NrX2JpdG1hcF9mbGFnID0gMDsKKwl9CisJaWYgKGN0eC0+aW52YWxpZF9pbm9kZV90YWJsZV9mbGFnKSB7CisJCWV4dDJmc19mcmVlX21lbSgmY3R4LT5pbnZhbGlkX2lub2RlX3RhYmxlX2ZsYWcpOworCQljdHgtPmludmFsaWRfaW5vZGVfdGFibGVfZmxhZyA9IDA7CisJfQorCisJLyogQ2xlYXIgc3RhdGlzdGljIGNvdW50ZXJzICovCisJY3R4LT5mc19kaXJlY3RvcnlfY291bnQgPSAwOworCWN0eC0+ZnNfcmVndWxhcl9jb3VudCA9IDA7CisJY3R4LT5mc19ibG9ja2Rldl9jb3VudCA9IDA7CisJY3R4LT5mc19jaGFyZGV2X2NvdW50ID0gMDsKKwljdHgtPmZzX2xpbmtzX2NvdW50ID0gMDsKKwljdHgtPmZzX3N5bWxpbmtzX2NvdW50ID0gMDsKKwljdHgtPmZzX2Zhc3Rfc3ltbGlua3NfY291bnQgPSAwOworCWN0eC0+ZnNfZmlmb19jb3VudCA9IDA7CisJY3R4LT5mc190b3RhbF9jb3VudCA9IDA7CisJY3R4LT5mc19iYWRibG9ja3NfY291bnQgPSAwOworCWN0eC0+ZnNfc29ja2V0c19jb3VudCA9IDA7CisJY3R4LT5mc19pbmRfY291bnQgPSAwOworCWN0eC0+ZnNfZGluZF9jb3VudCA9IDA7CisJY3R4LT5mc190aW5kX2NvdW50ID0gMDsKKwljdHgtPmZzX2ZyYWdtZW50ZWQgPSAwOworCWN0eC0+ZnNfZnJhZ21lbnRlZF9kaXIgPSAwOworCWN0eC0+bGFyZ2VfZmlsZXMgPSAwOworCisJZm9yIChpPTA7IGkgPCBNQVhfRVhURU5UX0RFUFRIX0NPVU5UOyBpKyspCisJCWN0eC0+ZXh0ZW50X2RlcHRoX2NvdW50W2ldID0gMDsKKworCS8qIFJlc2V0IHRoZSBzdXBlcmJsb2NrIHRvIHRoZSB1c2VyJ3MgcmVxdWVzdGVkIHZhbHVlICovCisJY3R4LT5zdXBlcmJsb2NrID0gY3R4LT51c2Vfc3VwZXJibG9jazsKKworCXJldHVybiAwOworfQorCit2b2lkIGUyZnNja19mcmVlX2NvbnRleHQoZTJmc2NrX3QgY3R4KQoreworCWlmICghY3R4KQorCQlyZXR1cm47CisKKwllMmZzY2tfcmVzZXRfY29udGV4dChjdHgpOworCWlmIChjdHgtPmJsa2lkKQorCQlibGtpZF9wdXRfY2FjaGUoY3R4LT5ibGtpZCk7CisKKwlpZiAoY3R4LT5wcm9maWxlKQorCQlwcm9maWxlX3JlbGVhc2UoY3R4LT5wcm9maWxlKTsKKworCWlmIChjdHgtPmZpbGVzeXN0ZW1fbmFtZSkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZjdHgtPmZpbGVzeXN0ZW1fbmFtZSk7CisKKwlpZiAoY3R4LT5kZXZpY2VfbmFtZSkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZjdHgtPmRldmljZV9uYW1lKTsKKworCWlmIChjdHgtPmxvZ19mbikKKwkJZnJlZShjdHgtPmxvZ19mbik7CisKKwlleHQyZnNfZnJlZV9tZW0oJmN0eCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJ1bnMgdGhyb3VnaCB0aGUgZTJmc2NrIHBhc3NlcyBhbmQgY2FsbHMgdGhlbSBhbGwsCisgKiByZXR1cm5pbmcgcmVzdGFydCwgYWJvcnQsIG9yIGNhbmNlbCBhcyBuZWNlc3NhcnkuLi4KKyAqLwordHlwZWRlZiB2b2lkICgqcGFzc190KShlMmZzY2tfdCBjdHgpOworCitzdGF0aWMgcGFzc190IGUyZnNja19wYXNzZXNbXSA9IHsKKwllMmZzY2tfcGFzczEsIGUyZnNja19wYXNzMiwgZTJmc2NrX3Bhc3MzLCBlMmZzY2tfcGFzczQsCisJZTJmc2NrX3Bhc3M1LCAwIH07CisKKyNkZWZpbmUgRTJGX0ZMQUdfUlVOX1JFVFVSTgkoRTJGX0ZMQUdfU0lHTkFMX01BU0t8RTJGX0ZMQUdfUkVTVEFSVCkKKworaW50IGUyZnNja19ydW4oZTJmc2NrX3QgY3R4KQoreworCWludAlpOworCXBhc3NfdAllMmZzY2tfcGFzczsKKworI2lmZGVmIEhBVkVfU0VUSk1QX0gKKwlpZiAoc2V0am1wKGN0eC0+YWJvcnRfbG9jKSkgeworCQljdHgtPmZsYWdzICY9IH5FMkZfRkxBR19TRVRKTVBfT0s7CisJCXJldHVybiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1JVTl9SRVRVUk4pOworCX0KKwljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX1NFVEpNUF9PSzsKKyNlbmRpZgorCisJZm9yIChpPTA7IChlMmZzY2tfcGFzcyA9IGUyZnNja19wYXNzZXNbaV0pOyBpKyspIHsKKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19SVU5fUkVUVVJOKQorCQkJYnJlYWs7CisJCWlmIChlMmZzY2tfbW1wX3VwZGF0ZShjdHgtPmZzKSkKKwkJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJCWUyZnNja19wYXNzKGN0eCk7CisJCWlmIChjdHgtPnByb2dyZXNzKQorCQkJKHZvaWQpIChjdHgtPnByb2dyZXNzKShjdHgsIDAsIDAsIDApOworCX0KKwljdHgtPmZsYWdzICY9IH5FMkZfRkxBR19TRVRKTVBfT0s7CisKKwlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1JVTl9SRVRVUk4pCisJCXJldHVybiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1JVTl9SRVRVUk4pOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc2NrL2UyZnNjay5jb25mLjUuaW4gYi9lMmZzY2svZTJmc2NrLmNvbmYuNS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWJmYmJmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL2UyZnNjay5jb25mLjUuaW4KQEAgLTAsMCArMSw0MzEgQEAKKy5cIiAtKi0gbnJvZmYgLSotCisuXCIgQ29weXJpZ2h0IDIwMDYgYnkgVGhlb2RvcmUgVHMnby4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisuXCIgVGhpcyBmaWxlIG1heSBiZSBjb3BpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisuXCIgCisuVEggZTJmc2NrLmNvbmYgNSAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQorZTJmc2NrLmNvbmYgXC0gQ29uZmlndXJhdGlvbiBmaWxlIGZvciBlMmZzY2sKKy5TSCBERVNDUklQVElPTgorLkkgZTJmc2NrLmNvbmYKK2lzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIAorLkJSIGUyZnNjayAoOCkuICAKK0l0IGNvbnRyb2xzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIAorLkJSIGUyZnNjayAoOCkKK3doaWxlIGl0IGlzIGNoZWNraW5nIGV4dDIsIGV4dDMsIG9yIGV4dDQgZmlsZXN5c3RlbXMuCisuUFAKK1RoZQorLkkgZTJmc2NrLmNvbmYKK2ZpbGUgdXNlcyBhbiBJTkktc3R5bGUgZm9ybWF0LiAgU3Rhbnphcywgb3IgdG9wLWxldmVsIHNlY3Rpb25zLCBhcmUgCitkZWxpbWl0ZWQgYnkgc3F1YXJlIGJyYWNlczogWyBdLiAgV2l0aGluIGVhY2ggc2VjdGlvbiwgZWFjaCBsaW5lIAorZGVmaW5lcyBhIHJlbGF0aW9uLCB3aGljaCBhc3NpZ25zIHRhZ3MgdG8gdmFsdWVzLCBvciB0byBhIHN1YnNlY3Rpb24sCit3aGljaCBjb250YWlucyBmdXJ0aGVyIHJlbGF0aW9ucyBvciBzdWJzZWN0aW9ucy4gICAKKy5cIiBUYWdzIGNhbiBiZSBhc3NpZ25lZCBtdWx0aXBsZSB2YWx1ZXMKK0FuIGV4YW1wbGUgb2YgdGhlIElOSS1zdHlsZSBmb3JtYXQgdXNlZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSAKK2ZvbGxvd3MgYmVsb3c6CisuUAorCVtzZWN0aW9uMV0KKy5icgorCQl0YWcxID0gdmFsdWVfYQorLmJyCisJCXRhZzEgPSB2YWx1ZV9iCisuYnIKKwkJdGFnMiA9IHZhbHVlX2MKKy5QCisJW3NlY3Rpb24gMl0KKy5icgorCQl0YWczID0geworLmJyCisJCQlzdWJ0YWcxID0gc3VidGFnX3ZhbHVlX2EKKy5icgorCQkJc3VidGFnMSA9IHN1YnRhZ192YWx1ZV9iCisuYnIKKwkJCXN1YnRhZzIgPSBzdWJ0YWdfdmFsdWVfYworLmJyCisJCX0KKy5icgorCQl0YWcxID0gdmFsdWVfZAorLmJyCisJCXRhZzIgPSB2YWx1ZV9lCisuYnIKKwl9CisuUAorQ29tbWVudHMgYXJlIGRlbGltaXRlZCBieSBhIHNlbWljb2xvbiAoJzsnKSBvciBhIGhhc2ggKCcjJykgY2hhcmFjdGVyIAorYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29tbWVudCwgYW5kIGFyZSB0ZXJtaW5hdGVkIGJ5IHRoZSBlbmQgb2YgCitsaW5lIGNoYXJhY3Rlci4KKy5QCitUYWdzIGFuZCB2YWx1ZXMgbXVzdCBiZSBxdW90ZWQgdXNpbmcgZG91YmxlIHF1b3RlcyBpZiB0aGV5IGNvbnRhaW4KK3NwYWNlcy4gIFdpdGhpbiBhIHF1b3RlZCBzdHJpbmcsIHRoZSBzdGFuZGFyZCBiYWNrc2xhc2ggaW50ZXJwcmV0YXRpb25zIAorYXBwbHk6ICJcZW4iIChmb3IgdGhlIG5ld2xpbmUgY2hhcmFjdGVyKSwgCisiXGV0IiAoZm9yIHRoZSB0YWIgY2hhcmFjdGVyKSwgIlxlYiIgKGZvciB0aGUgYmFja3NwYWNlIGNoYXJhY3RlciksIAorYW5kICJcZVxlIiAoZm9yIHRoZSBiYWNrc2xhc2ggY2hhcmFjdGVyKS4KKy5QCitUaGUgZm9sbG93aW5nIHN0YW56YXMgYXJlIHVzZWQgaW4gdGhlIAorLkkgZTJmc2NrLmNvbmYKK2ZpbGUuICBUaGV5IHdpbGwgYmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIGZ1dHVyZSBzZWN0aW9ucyBvZiB0aGlzCitkb2N1bWVudC4KKy5UUCAKKy5JIFtvcHRpb25zXQorVGhpcyBzdGFuemEgY29udGFpbnMgZ2VuZXJhbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIAorLkJSIGUyZnNjayAncworYmVoYXZpb3IuCisuVFAKKy5JIFtwcm9ibGVtc10KK1RoaXMgc3RhbnphIGFsbG93cyB0aGUgYWRtaW5pc3RyYXRvciB0byByZWNvbmZpZ3VyZSBob3cgZTJmc2NrIGhhbmRsZXMKK3ZhcmlvdXMgZmlsZXN5c3RlbSBpbmNvbnNpc3RlbmNpZXMuCisuVFAKKy5JIFtzY3JhdGNoX2ZpbGVzXQorVGhpcyBzdGFuemEgY29udHJvbHMgd2hlbiBlMmZzY2sgd2lsbCBhdHRlbXB0IHRvIHVzZSBzY3JhdGNoIGZpbGVzIHRvCityZWR1Y2UgdGhlIG5lZWQgZm9yIG1lbW9yeS4KKy5TSCBUSEUgW29wdGlvbnNdIFNUQU5aQQorVGhlIGZvbGxvd2luZyByZWxhdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlIAorLkkgW29wdGlvbnNdCitzdGFuemEuCisuVFAKKy5JIGFsbG93X2NhbmNlbGxhdGlvbgorSWYgdGhpcyByZWxhdGlvbiBpcyBzZXQgdG8gYSBib29sZWFuIHZhbHVlIG9mIHRydWUsIHRoZW4gaWYgdGhlIHVzZXIgCitpbnRlcnJ1cHRzIGUyZnNjayB1c2luZyBeQywgYW5kIHRoZSBmaWxlc3lzdGVtIGlzIG5vdCBleHBsaWNpdGx5IGZsYWdnZWQKK2FzIGNvbnRhaW5pbmcgZXJyb3JzLCBlMmZzY2sgd2lsbCBleGl0IHdpdGggYW4gZXhpdCBzdGF0dXMgb2YgMCBpbnN0ZWFkCitvZiAzMi4gIFRoaXMgc2V0dGluZyBkZWZhdWx0cyB0byBmYWxzZS4KKy5UUAorLkkgYWNjZXB0X3RpbWVfZnVkZ2UKK1VuZm9ydHVuYXRlbHksIGR1ZSB0byBXaW5kb3dzJyB1bmZvcnR1bmF0ZSBkZXNpZ24gZGVjaXNpb24KK3RvIGNvbmZpZ3VyZSB0aGUgaGFyZHdhcmUgY2xvY2sgdG8gdGljayBsb2NhbHRpbWUsIGluc3RlYWQKK29mIHRoZSBtb3JlIHByb3BlciBhbmQgbGVzcyBlcnJvci1wcm9uZSBVVEMgdGltZSwgbWFueQordXNlcnMgZW5kIHVwIGluIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlIHN5c3RlbSBjbG9jayBpcworaW5jb3JyZWN0bHkgc2V0IGF0IHRoZSB0aW1lIHdoZW4gZTJmc2NrIGlzIHJ1bi4KKy5JUAorSGlzdG9yaWNhbGx5IHRoaXMgd2FzIHVzdWFsbHkgZHVlIHRvIHNvbWUgZGlzdHJpYnV0aW9ucworaGF2aW5nIGJ1Z2d5IGluaXQgc2NyaXB0cyBhbmQvb3IgaW5zdGFsbGVycyB0aGF0IGRpZG4ndAorY29ycmVjdGx5IGRldGVjdCB0aGlzIGNhc2UgYW5kIHRha2UgYXBwcm9wcmlhdGUKK2NvdW50ZXJtZWFzdXJlcy4gIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMgb2NjYXNpb25hbGx5Cit0cnVlIGV2ZW4gdG9kYXksIHVzdWFsbHkgZHVlIHRvIGEKK2J1Z2d5IG9yIG1pc2NvbmZpZ3VyZWQgdmlydHVhbGl6YXRpb24gbWFuYWdlciBvciB0aGUKK2luc3RhbGxlciBub3QgaGF2aW5nIGFjY2VzcyB0byBhIG5ldHdvcmsgdGltZSBzZXJ2ZXIKK2R1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuICBTbyBieSBkZWZhdWx0LCB3ZSBhbGxvdwordGhlIHN1cGVyYmxvY2sgdGltZXMgdG8gYmUgZnVkZ2VkIGJ5IHVwIHRvIDI0IGhvdXJzLgorVGhpcyBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZworLkkgYWNjZXB0X3RpbWVfZnVkZ2UKK3RvIHRoZQorYm9vbGVhbiB2YWx1ZSBvZiBmYWxzZS4gIFRoaXMgc2V0dGluZyBkZWZhdWx0cyB0byB0cnVlLgorLlRQCisuSSBicm9rZW5fc3lzdGVtX2Nsb2NrCitUaGUKKy5CUiBlMmZzY2sgKDgpCitwcm9ncmFtIGhhcyBzb21lIGhldXJpc3RpY3MgdGhhdCBhc3N1bWUgdGhhdCB0aGUgc3lzdGVtIGNsb2NrIGlzCitjb3JyZWN0LiAgSW4gYWRkaXRpb24sIG1hbnkgc3lzdGVtIHByb2dyYW1zIG1ha2Ugc2ltaWxhciBhc3N1bXB0aW9ucy4KK0ZvciBleGFtcGxlLCB0aGUgVVVJRCBsaWJyYXJ5IGRlcGVuZHMgb24gdGltZSBub3QgZ29pbmcgYmFja3dhcmRzIGluCitvcmRlciBmb3IgaXQgdG8gYmUgYWJsZSB0byBtYWtlIGl0cyBndWFyYW50ZWVzIGFib3V0IGlzc3VpbmcgdW5pdmVyc2FsbHkKK3VuaXF1ZSBJRCdzLiAgU3lzdGVtcyB3aXRoIGJyb2tlbiBzeXN0ZW0gY2xvY2tzLCBhcmUgd2VsbCwgYnJva2VuLgorSG93ZXZlciwgYnJva2VuIHN5c3RlbSBjbG9ja3MsIHBhcnRpY3VsYXJseSBpbiBlbWJlZGRlZCBzeXN0ZW1zLCBkbworZXhpc3QuICBFMmZzY2sgd2lsbCBhdHRlbXB0IHRvIHVzZSBoZXVyaXN0aWNzIHRvIGRldGVybWluZSBpZiB0aGUgdGltZQorY2FuIG5vdCBiZSB0cnVzdGVkOyBhbmQgdG8gc2tpcCB0aW1lLWJhc2VkIGNoZWNrcyBpZiB0aGlzIGlzIHRydWUuICBJZgordGhpcyBib29sZWFuIGlzIHNldCB0byB0cnVlLCB0aGVuIGUyZnNjayB3aWxsIGFsd2F5cyBhc3N1bWUgdGhhdCB0aGUKK3N5c3RlbSBjbG9jayBjYW4gbm90IGJlIHRydXN0ZWQuCisuVFAKKy5JIGJ1Z2d5X2luaXRfc2NyaXB0cworVGhpcyBib29sZWFuIHJlbGF0aW9uIGlzIGFuIGFsaWFzIGZvcgorLkkgYWNjZXB0X3RpbWVfZnVkZ2UKK2ZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTsgaXQgdXNlZCB0bworYmUgdGhhdCB0aGUgYmVoYXZpb3IgZGVmaW5lZCBieQorLkkgYWNjZXB0X3RpbWVfZnVkZ2UKK2Fib3ZlIGRlZmF1bHRlZCB0byBmYWxzZSwgYW5kCisuSSBidWdneV9pbml0X3NjcmlwdHMKK3dvdWxkIGVuYWJsZSBzdXBlcmJsb2NrIHRpbWUgZmllbGQgdG8gYmUgd3JvbmcgYnkgdXAgdG8gMjQgaG91cnMuICBXaGVuCit3ZSBjaGFuZ2VkIHRoZSBkZWZhdWx0LCB3ZSBhbHNvIHJlbmFtZWQgdGhpcyBib29sZWFuIHJlbGF0aW9uIHRvCisuSVIgYWNjZXB0X3RpbWVfZnVkZ2UuCisuVFAKKy5JIGNsZWFyX3Rlc3RfZnNfZmxhZworVGhpcyBib29sZWFuIHJlbGF0aW9uIGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IAorLkJSIGUyZnNjayAoOCkKK3dpbGwgb2ZmZXIgdG8gY2xlYXIKK3RoZSB0ZXN0X2ZzIGZsYWcgaWYgdGhlIGV4dDQgZmlsZXN5c3RlbSBpcyBhdmFpbGFibGUgb24gdGhlIHN5c3RlbS4gIEl0CitkZWZhdWx0cyB0byB0cnVlLgorLlRQIAorLkkgZGVmZXJfY2hlY2tfb25fYmF0dGVyeQorVGhpcyBib29sZWFuIHJlbGF0aW9uIGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBpbnRlcnZhbCBiZXR3ZWVuIAorZmlsZXN5c3RlbSBjaGVja3MgKGVpdGhlciBiYXNlZCBvbiB0aW1lIG9yIG51bWJlciBvZiBtb3VudHMpIHNob3VsZCAKK2JlIGRvdWJsZWQgaWYgdGhlIHN5c3RlbSBpcyBydW5uaW5nIG9uIGJhdHRlcnkuICBUaGlzIHNldHRpbmcgZGVmYXVsdHMgdG8gCit0cnVlLgorLlRQCisuSSBpbmRleGVkX2Rpcl9zbGFja19wZXJjZW50YWdlCitXaGVuCisuQlIgZTJmc2NrICg4KQorcmVwYWNrcyBhIGluZGV4ZWQgZGlyZWN0b3J5LCByZXNlcnZlIHRoZSBzcGVjaWZpZWQgcGVyY2VudGFnZSBvZgorZW1wdHkgc3BhY2UgaW4gZWFjaCBsZWFmIG5vZGVzIHNvIHRoYXQgYSBmZXcgbmV3IGVudHJpZXMgY2FuCitiZSBhZGRlZCB0byB0aGUgZGlyZWN0b3J5IHdpdGhvdXQgc3BsaXR0aW5nIGxlYWYgbm9kZXMsIHNvIHRoYXQKK3RoZSBhdmVyYWdlIGZpbGwgcmF0aW8gb2YgZGlyZWN0b3JpZXMgY2FuIGJlIG1haW50YWluZWQgYXQgYQoraGlnaGVyLCBtb3JlIGVmZmljaWVudCBsZXZlbC4gIFRoaXMgcmVsYXRpb24gZGVmYXVsdHMgdG8gMjAKK3BlcmNlbnQuCisuVFAKKy5JIGxvZ19kaXIKK0lmIHRoZQorLkkgbG9nX2ZpbGVuYW1lCityZWxhdGlvbiBjb250YWlucyBhIHJlbGF0aXZlIHBhdGhuYW1lLCB0aGVuIHRoZSBsb2cgZmlsZSB3aWxsIGJlIHBsYWNlZAoraW4gdGhlIGRpcmVjdG9yeSBuYW1lZCBieSB0aGUKKy5JIGxvZ19kaXIKK3JlbGF0aW9uLgorLlRQCisuSSBsb2dfZGlyX2ZhbGxiYWNrCitUaGlzIHJlbGF0aW9uIGNvbnRhaW5zIGFuIGFsdGVybmF0ZSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIHVzZWQgaWYgdGhlCitkaXJlY3Rvcnkgc3BlY2lmaWVkIGJ5CisuSSBsb2dfZGlyCitpcyBub3QgYXZhaWxhYmxlIG9yIGlzIG5vdCB3cml0ZWFibGUuCisuVFAKKy5JIGxvZ19kaXJfd2FpdAorSWYgdGhpcyBib29sZWFuIHJlbGF0aW9uIGlzIHRydWUsIHRoZW0gaWYgdGhlIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieQorLkkgbG9nX2Rpcgorb3IKKy5JIGxvZ19kaXJfZmFsbGJhY2sKK2FyZSBub3QgYXZhaWxhYmxlIG9yIGFyZSBub3QgeWV0IHdyaXRlYWJsZSwgZTJmc2NrIHdpbGwgc2F2ZSB0aGUgb3V0cHV0CitpbiBhIG1lbW9yeSBidWZmZXIsIGFuZCBhIGNoaWxkIHByb2Nlc3Mgd2lsbCBwZXJpb2RpY2FsbHkgdGVzdCB0byBzZWUgaWYKK3RoZSBsb2cgZGlyZWN0b3J5IGhhcyBiZWNvbWUgYXZhaWxhYmxlIGFmdGVyIHRoZSBib290IHNlcXVlbmNlIGhhcworbW91bnRlZCB0aGUgcmVxdWlzdGUgZmlsZXN5dGVtIGZvciByZWFkaW5nL3dyaXRpbmcuICBUaGlzIGltcGxlbWVudHMgdGhlCitmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5CisuQlIgbG9nc2F2ZSAoOCkKK2ZvciBlMmZzY2sgbG9nIGZpbGVzLgorLlRQCisuSSBsb2dfZmlsZW5hbWUKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBmaWxlIG5hbWUgd2hlcmUgYSBjb3B5IG9mIGUyZnNjaydzIG91dHB1dAord2lsbCBiZSB3cml0dGVuLiAgIElmIGNlcnRhaW4gcHJvYmxlbSByZXBvcnRzIGFyZSBzdXBwcmVzc2VkIHVzaW5nIHRoZQorLkkgbWF4X2NvdW50X3Byb2JsZW1zCityZWxhdGlvbiwgKG9yIG9uIGEgcGVyLXByb2JsZW0gYmFzaXMgdXNpbmcgdGhlCisuSSBtYXhfY291bnQKK3JlbGF0aW9uKSwgdGhlIGZ1bGwgc2V0IG9mIHByb2JsZW0gcmVwb3J0cyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGxvZworZmlsZS4gIFRoZSBmaWxlbmFtZSBtYXkgY29udGFpbiB2YXJpb3VzIHBlcmNlbnQtZXhwcmVzc2lvbnMgKCVELCAlVCwgJU4sCitldGMuKSB3aGljaCB3aWxsIGJlIGV4cGFuZGVkIHNvIHRoYXQgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIGxvZyBmaWxlIGNhbgoraW5jbHVkZSB0aGluZ3MgbGlrZSBkYXRlLCB0aW1lLCBkZXZpY2UgbmFtZSwgYW5kIG90aGVyIHJ1bi10aW1lCitwYXJhbWV0ZXJzLiAgU2VlIHRoZQorLkIgTE9HR0lORworc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorLlRQCisuSSBtYXhfY291bnRfcHJvYmxlbXMKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwcm9ibGVtIHJlcG9ydHMgb2YgYQorcGFydGljdWxhciB0eXBlIHdpbGwgYmUgcHJpbnRlZCB0byBzdGRvdXQgYmVmb3JlIGZ1cnRoZXIgcHJvYmxlbSByZXBvcnRzCitvZiB0aGF0IHR5cGUgYXJlIHNxdWVsY2hlZC4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB0aGUgY29uc29sZSBpcyBzbG93CisoaS5lLiwgY29ubmVjdGVkIHRvIGEgc2VyaWFsIHBvcnQpIGFuZCBzbyBhIGxhcmdlIGFtb3VudCBvZiBvdXRwdXQgY291bGQKK2VuZCB1cCBkZWxheWluZyB0aGUgYm9vdCBwcm9jZXNzIGZvciBhIGxvbmcgdGltZSAocG90ZW50aWFsbHkgaG91cnMpLgorLlRQCisuSSByZXBvcnRfZmVhdHVyZXMKK0lmIHRoaXMgYm9vbGVhbiByZWxhdGlvbiBpcyB0cnVlLCBlMmZzY2sgd2lsbCBwcmludCB0aGUgZmlsZSBzeXN0ZW0KK2ZlYXR1cmVzIGFzIHBhcnQgb2YgaXRzIHZlcmJvc2UgcmVwb3J0aW5nIChpLmUuLCBpZiB0aGUKKy5CIC12CitvcHRpb24gaXMgc3BlY2lmaWVkKQorLlRQCisuSSByZXBvcnRfdGltZQorSWYgdGhpcyBib29sZWFuIHJlbGF0aW9uIGlzIHRydWUsIGUyZnNjayB3aWxsIHJ1biBhcyBpZiB0aGUgb3B0aW9ucworLkIgLXR0CithcmUgYWx3YXlzIHNwZWNpZmllZC4gIFRoaXMgd2lsbCBjYXVzZSBlMmZzY2sgdG8gcHJpbnQgdGltaW5nIHN0YXRpc3RpY3MKK29uIGEgcGFzcyBieSBwYXNzIGJhc2lzIGZvciBmdWxsIGZpbGUgc3lzdGVtIGNoZWNrcy4KKy5UUAorLkkgcmVwb3J0X3ZlcmJvc2UKK0lmIHRoaXMgYm9vbGVhbiByZWxhdGlvbiBpcyB0cnVlLCBlMmZzY2sgd2lsbCBydW4gYXMgaWYgdGhlIG9wdGlvbgorLkIgLXYKK2lzIGFsd2F5cyBzcGVjaWZpZWQuICBUaGlzIHdpbGwgY2F1c2UgZTJmc2NrIHRvIHByaW50IHNvbWUgYWRkaXRpb25hbAoraW5mb3JtYXRpb24gYXQgdGhlIGVuZCBvZiBlYWNoIGZ1bGwgZmlsZSBzeXN0ZW0gY2hlY2suCisuU0ggVEhFIFtwcm9ibGVtc10gU1RBTlpBCitFYWNoIHRhZyBpbiB0aGUKKy5JIFtwcm9ibGVtc10gCitzdGFuemEgbmFtZXMgYSBwcm9ibGVtIGNvZGUgc3BlY2lmaWVkIHdpdGggYSBsZWFkaW5nICIweCIgZm9sbG93ZWQgYnkKK3NpeCBoZXggZGlnaXRzLiAgIAorVGhlIHZhbHVlIG9mIHRoZSB0YWcgaXMgYSBzdWJzZWN0aW9uIHdoZXJlIHRoZSByZWxhdGlvbnMgaW4gdGhhdAorc3Vic2VjdGlvbiBvdmVycmlkZSB0aGUgZGVmYXVsdCB0cmVhdG1lbnQgb2YgdGhhdCBwYXJ0aWN1bGFyIHByb2JsZW0gCitjb2RlLgorLlAKK05vdGUgdGhhdCBpbmFwcHJvcHJpYXRlIHNldHRpbmdzIGluIHRoaXMgc3RhbnphIG1heSBjYXVzZSAKKy5CIGUyZnNjawordG8gYmVoYXZlIGluY29ycmVjdGx5LCBvciBldmVuIGNyYXNoLiAgTW9zdCBzeXN0ZW0gYWRtaW5pc3RyYXRvcnMgc2hvdWxkCitub3QgYmUgbWFraW5nIGNoYW5nZXMgdG8gdGhpcyBzZWN0aW9uIHdpdGhvdXQgcmVmZXJyaW5nIHRvIHNvdXJjZSBjb2RlLgorLlAKK1dpdGhpbiBlYWNoIHByb2JsZW0gY29kZSdzIHN1YnNlY3Rpb24sIHRoZSBmb2xsb3dpbmcgdGFncyBtYXkgYmUgdXNlZDoKKy5UUAorLkkgZGVzY3JpcHRpb24KK1RoaXMgcmVsYXRpb24gYWxsb3dzIHRoZSBtZXNzYWdlIHdoaWNoIGlzIHByaW50ZWQgd2hlbiB0aGlzIGZpbGVzeXN0ZW0KK2luY29uc2lzdGVuY3kgaXMgZGV0ZWN0ZWQgdG8gYmUgb3ZlcnJpZGRlbi4KKy5UUAorLkkgcHJlZW5fb2sKK1RoaXMgYm9vbGVhbiByZWxhdGlvbiBvdmVycmlkZXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IgY29udHJvbGxpbmcgCit3aGV0aGVyIHRoaXMgZmlsZXN5c3RlbSBwcm9ibGVtIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IGZpeGVkIHdoZW4KKy5CIGUyZnNjaworaXMgcnVubmluZyBpbiBwcmVlbiBtb2RlLgorLlRQCisuSSBtYXhfY291bnQKK1RoaXMgaW50ZWdlciByZWxhdGlvbiBvdmVycmlkZXMgdGhlIAorLkkgbWF4X2NvdW50X3Byb2JsZW1zCitwYXJhbWV0ZXIgKHNldCBpbiB0aGUgb3B0aW9ucyBzZWN0aW9uKSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHByb2JsZW0uCisuVFAKKy5JIG5vX29rCitUaGlzIGJvb2xlYW4gcmVsYXRpb24gb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGRldGVybWluaW5nCit3aGV0aGVyIG9yIG5vdCB0aGUgZmlsZXN5c3RlbSB3aWxsIGJlIG1hcmtlZCBhcyBpbmNvbnNpc3RlbnQgaWYgdGhlIHVzZXIKK2RlY2xpbmVzIHRvIGZpeCB0aGUgcmVwb3J0ZWQgcHJvYmxlbS4KKy5UUAorLkkgbm9fZGVmYXVsdAorVGhpcyBib29sZWFuIHJlbGF0aW9uIG92ZXJyaWRlcyB3aGV0aGVyIHRoZSBkZWZhdWx0IGFuc3dlciBmb3IgdGhpcyAKK3Byb2JsZW0gKG9yIHF1ZXN0aW9uKSBzaG91bGQgYmUgIm5vIi4KKy5UUCAKKy5JIHByZWVuX25vbWVzc2FnZQorVGhpcyBib29sZWFuIHJlbGF0aW9uIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBjb250cm9sbGluZyAKK3doZXRoZXIgb3Igbm90IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBmaWxlc3lzdGVtIHByb2JsZW0gc2hvdWxkCitiZSBzdXBwcmVzc2VkIHdoZW4KKy5CIGUyZnNjaworaXMgcnVubmluZyBpbiBwcmVlbiBtb2RlLgorLlRQCisuSSBub19ub21zZworVGhpcyBib29sZWFuIHJlbGF0aW9uIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBjb250cm9sbGluZyAKK3doZXRoZXIgb3Igbm90IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBmaWxlc3lzdGVtIHByb2JsZW0gc2hvdWxkCitiZSBzdXBwcmVzc2VkIHdoZW4gYSBwcm9ibGVtIGZvcmNlZCBub3QgdG8gYmUgZml4ZWQsIGVpdGhlciBiZWNhdXNlCisuQiBlMmZzY2sKK2lzIHJ1biB3aXRoIHRoZQorLkIgLW4KK29wdGlvbiBvciBiZWNhdXNlIHRoZQorLkkgZm9yY2Vfbm8KK2ZsYWcgaGFzIGJlZW4gc2V0IGZvciB0aGUgcHJvYmxlbS4KKy5UUAorLkkgZm9yY2Vfbm8KK1RoaXMgYm9vbGVhbiBvcHRpb24sIGlmIHNldCB0byB0cnVlLCBmb3JjZXMgYSBwcm9ibGVtIHRvIG5ldmVyIGJlIGZpeGVkLgorVGhhdCBpcywgaXQgd2lsbCBiZSBhcyBpZiB0aGUgdXNlciBwcm9ibGVtIHJlc3BvbmRzICdubycgdG8gdGhlIHF1ZXN0aW9uCitvZiAnc2hvdWxkIHRoaXMgcHJvYmxlbSBiZSBmaXhlZD8nLiAgVGhlCisuSSBmb3JjZV9ubworb3B0aW9uIGV2ZW4gb3ZlcnJpZGVzIHRoZQorLkIgLXkKK29wdGlvbiBnaXZlbiBvbiB0aGUgY29tbWFuZC1saW5lIChqdXN0IGZvciB0aGUgc3BlY2lmaWMgcHJvYmxlbSwgb2YgY291cnNlKS4KKy5TSCBUSEUgW3NjcmF0Y2hfZmlsZXNdIFNUQU5aQQorVGhlIGZvbGxvd2luZyByZWxhdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlIAorLkkgW3NjcmF0Y2hfZmlsZXNdCitzdGFuemEuCisuVFAKKy5JIGRpcmVjdG9yeQorSWYgdGhlIGRpcmVjdG9yeSBuYW1lZCBieSB0aGlzIHJlbGF0aW9uIGV4aXN0cyBhbmQgaXMgd3JpdGVhYmxlLCB0aGVuCitlMmZzY2sgd2lsbCBhdHRlbXB0IHRvIHVzZSB0aGlzIGRpcmVjdG9yeSB0byBzdG9yZSBzY3JhdGNoIGZpbGVzIGluc3RlYWQKK29mIHVzaW5nIGluLW1lbW9yeSBkYXRhIHN0cnVjdHVyZXMuCisuVFAKKy5JIG51bWRpcnNfdGhyZXNob2xkCitJZiB0aGlzIHJlbGF0aW9uIGlzIHNldCwgdGhlbiBpbi1tZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIGJlIHVzZWQgaWYgdGhlCitudW1iZXIgb2YgZGlyZWN0b3JpZXMgaW4gdGhlIGZpbGVzeXN0ZW0gYXJlIGZld2VyIHRoYW4gYW1vdW50IHNwZWNpZmllZC4KKy5UUAorLkkgZGlyaW5mbworVGhpcyByZWxhdGlvbiBjb250cm9scyB3aGV0aGVyIG9yIG5vdCB0aGUgc2NyYXRjaCBmaWxlIGRpcmVjdG9yeSBpcyB1c2VkCitpbnN0ZWFkIG9mIGFuIGluLW1lbW9yeSBkYXRhIHN0cnVjdHVyZSBmb3IgZGlyZWN0b3J5IGluZm9ybWF0aW9uLiAgSXQKK2RlZmF1bHRzIHRvIHRydWUuCisuVFAKKy5JIGljb3VudAorVGhpcyByZWxhdGlvbiBjb250cm9scyB3aGV0aGVyIG9yIG5vdCB0aGUgc2NyYXRjaCBmaWxlIGRpcmVjdG9yeSBpcyB1c2VkCitpbnN0ZWFkIG9mIGFuIGluLW1lbW9yeSBkYXRhIHN0cnVjdHVyZSB3aGVuIHRyYWNraW5nIGlub2RlIGNvdW50cy4gIEl0CitkZWZhdWx0cyB0byB0cnVlLgorLlNIIExPR0dJTkcKK0UyZnNjayBoYXMgdGhlIGZhY2lsaXR5IHRvIHNhdmUgdGhlIGluZm9ybWF0aW9uIGZyb20gYW4gZTJmc2NrIHJ1biBpbiBhCitkaXJlY3Rvcnkgc28gdGhhdCBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGNhbiByZXZpZXcgaXRzIG91dHB1dCBhdCB0aGVpcgorbGVpc3VyZS4gIFRoaXMgYWxsb3dzIGluZm9ybWF0aW9uIGNhcHR1cmVkIGR1cmluZyB0aGUgYXV0b21hdGljIGUyZnNjaworcHJlZW4gcnVuLCBhcyB3ZWxsIGFzIGEgbWFudWFsbHkgc3RhcnRlZCBlMmZzY2sgcnVuLCB0byBiZSBzYXZlZCBmb3IKK3Bvc3Rlcml0eS4gIFRoaXMgZmFjaWxpdHkgaXMgY29udHJvbGxlZCBieSB0aGUKKy5JUiBsb2dfZmlsZW5hbWUgLAorLklSIGxvZ19kaXIgLAorLklSIGxvZ19kaXJfZmFsbGJhY2sgLAorYW5kCisuSSBsb2dfZGlyX3dhaXQKK3JlbGF0aW9ucyBpbiB0aGUKKy5JIFtvcHRpb25zXQorc3RhbnphLgorLlBQCitUaGUgZmlsZW5hbWUgaW4KKy5JIGxvZ19maWxlbmFtZQorbWF5IGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwZXJjZW50LWV4cHJlc3Npb25zIHRoYXQgd2lsbCBiZSBleHBhbmRlZCBhcworZm9sbG93cy4KKy5UUAorLkIgJWQKK1RoZSBjdXJyZW50IGRheSBvZiB0aGUgbW9udGgKKy5UUAorLkIgJUQKK1RoZSBjdXJyZW50IGRhdGU7IHRoaXMgaXMgYSBlcXVpdmFsZW50IG9mCisuQiAlWSVtJWQKKy5UUAorLkIgJWgKK1RoZSBob3N0bmFtZSBvZiB0aGUgc3lzdGVtLgorLlRQCisuQiAlSAorVGhlIGN1cnJlbnQgaG91ciBpbiAyNC1ob3VyIGZvcm1hdCAoMDAuLjIzKQorLlRQCisuQiAlbQorVGhlIGN1cnJlbnQgbW9udGggYXMgYSB0d28tZGlnaXQgbnVtYmVyICgwMS4uMTIpCisuVFAKKy5CICVNCitUaGUgY3VycmVudCBtaW51dGUgKDAwLi41OSkKKy5UUAorLkIgJU4KK1RoZSBuYW1lIG9mIHRoZSBibG9jayBkZXZpY2UgY29udGFpbmluZyB0aGUgZmlsZSBzeXN0ZW0sIHdpdGggYW55CitkaXJlY3RvcnkgcGF0aG5hbWUgc3RyaXBwZWQgb2ZmLgorLlRQCisuQiAlcAorVGhlIHBpZCBvZiB0aGUgZTJmc2NrIHByb2Nlc3MKKy5UUAorLkIgJXMKK1RoZSBjdXJyZW50IHRpbWUgZXhwcmVzc2VkIGFzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSAxOTcwLTAxLTAxCiswMDowMDowMCBVVEMKKy5UUAorLkIgJVMKK1RoZSBjdXJyZW50IHNlY29uZCAoMDAuLjU5KQorLlRQCisuQiAlVAorVGhlIGN1cnJlbnQgdGltZTsgdGhpcyBpcyBlcXVpdmFsZW50IG9mCisuQiAlSCVNJVMKKy5UUAorLkIgJXUKK1RoZSBuYW1lIG9mIHRoZSB1c2VyIHJ1bm5pbmcgZTJmc2NrLgorLlRQCisuQiAlVQorVGhpcyBwZXJjZW50IGV4cHJlc3Npb24gZG9lcyBub3QgZXhwYW5kIHRvIGFueXRoaW5nLCBidXQgaXQgc2lnbmFscyB0aGF0CithbnkgZm9sbG93aW5nIGRhdGUgb3IgdGltZSBleHByZXNzaW9ucyBzaG91bGQgYmUgZXhwcmVzc2VkIGluIFVUQyB0aW1lCitpbnN0ZWFkIG9mIHRoZSBsb2NhbCB0aW16ZW9uZS4KKy5UUAorLkIgJXkKK1RoZSBsYXN0IHR3byBkaWdpdHMgb2YgdGhlIGN1cnJlbnQgeWVhciAoMDAuLjk5KQorLlRQCisuQiAlWQorVGhlIGN1cnJlbnQgeWVhciAoaS5lLiwgMjAxMikuCisuU0ggRVhBTVBMRVMKK1RoZSBmb2xsb3dpbmcgcmVjaXBlIHdpbGwgcHJldmVudCBlMmZzY2sgZnJvbSBhYm9ydGluZyBkdXJpbmcgdGhlIGJvb3QKK3Byb2Nlc3Mgd2hlbiBhIGZpbGVzeXN0ZW0gY29udGFpbnMgb3JwaGFuZWQgZmlsZXMuICAoT2YgY291cnNlLCB0aGlzIGlzCitub3QgYWx3YXlzIGEgZ29vZCBpZGVhLCBzaW5jZSBjcml0aWNhbCBmaWxlcyB0aGF0IGFyZSBuZWVkZWQgZm9yIHRoZQorc2VjdXJpdHkgb2YgdGhlIHN5c3RlbSBjb3VsZCBwb3RlbnRpYWxseSBlbmQgdXAgaW4gbG9zdCtmb3VuZCwgYW5kCitzdGFydGluZyB0aGUgc3lzdGVtIHdpdGhvdXQgZmlyc3QgaGF2aW5nIGEgc3lzdGVtIGFkbWluaXN0cmF0b3IgY2hlY2sKK3RoaW5ncyBvdXQgbWF5IGJlIGRhbmdlcm91cy4pCisuUAorLmJyCisJW3Byb2JsZW1zXQorLmJyCisJCTB4MDQwMDAyID0geworLmJyCisJCQlwcmVlbl9vayA9IHRydWUKKy5icgorCQkJZGVzY3JpcHRpb24gPSAiQHUgQGkgJWkuICAiCisuYnIKKwkJfQorLlAKK1RoZSBmb2xsb3dpbmcgcmVjaXBlIHdpbGwgY2F1c2UgYW4gZTJmc2NrIGxvZ2ZpbGUgdG8gYmUgd3JpdHRlbiB0byB0aGUKK2RpcmVjdG9yeSAvdmFyL2xvZy9lMmZzY2ssIHdpdGggYSBmaWxlbmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBkZXZpY2UKK25hbWUsIHRoZSBob3N0bmFtZSBvZiB0aGUgc3lzdGVtLCB0aGUgZGF0ZSwgYW5kIHRpbWU6IGUuZy4sCisiZTJmc2NrLXNkYTMuc2VydmVyLklORk8uMjAxMjAzMTQtMTEyMTQyIi4gIElmIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZworL3Zhci9sb2cgaXMgbG9jYXRlZCBvbiB0aGUgcm9vdCBmaWxlIHN5c3RlbQord2hpY2ggaXMgaW5pdGlhbGx5IG1vdW50ZWQgcmVhZC1vbmx5LCB0aGVuIHRoZSBvdXRwdXQgd2lsbCBiZSBzYXZlZCBpbgorbWVtb3J5IGFuZCB3cml0dGVuIG91dCBvbmNlIHRoZSByb290IGZpbGUgc3lzdGVtIGhhcyBiZWVuIHJlbW91bnRlZAorcmVhZC93cml0ZS4gICBUbyBhdm9pZCB0b28gbXVjaCBkZXRhaWwgZnJvbSBiZWluZyB3cml0dGVuIHRvIHRoZSBzZXJpYWwKK2NvbnNvbGUgKHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IHNsb3cgZG93biB0aGUgYm9vdCBzZXF1ZW5jZSksIG9ubHkgcHJpbnQKK25vIG1vcmUgdGhhbiAxNiBpbnN0YW5jZXMgb2YgZWFjaCB0eXBlIG9mIGZpbGUgc3lzdGVtIGNvcnJ1cHRpb24uCisuUAorLmJyCisJW29wdGlvbnNdCisuYnIKKwkJbWF4X2NvdW50X3Byb2JsZW1zID0gMTYKKy5icgorCQlsb2dfZGlyID0gL3Zhci9sb2cvZTJmc2NrCisuYnIKKwkJbG9nX2ZpbGVuYW1lID0gZTJmc2NrLSVOLiVoLklORk8uJUQtJVQKKy5icgorCQlsb2dfZGlyX3dhaXQgPSB0cnVlCisuUAorLlNIIEZJTEVTCisuVFAKKy5JIC9ldGMvZTJmc2NrLmNvbmYKK1RoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIAorLkJSIGUyZnNjayAoOCkuCisuU0ggU0VFIEFMU08KKy5CUiBlMmZzY2sgKDgpCmRpZmYgLS1naXQgYS9lMmZzY2svZTJmc2NrLmggYi9lMmZzY2svZTJmc2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwNDAyNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9lMmZzY2suaApAQCAtMCwwICsxLDU4NyBAQAorLyoKKyAqIGUyZnNjay5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0IFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlCisgKiByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorICoKKyAqLworCisjaWZuZGVmIF9FMkZTQ0tfSAorI2RlZmluZSBfRTJGU0NLX0gKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NFVEpNUF9ICisjaW5jbHVkZSA8c2V0am1wLmg+CisjZW5kaWYKKworI2lmIEVYVDJfRkxBVF9JTkNMVURFUworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKyNpbmNsdWRlICJibGtpZC5oIgorI2Vsc2UKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKyNpbmNsdWRlICJibGtpZC9ibGtpZC5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJwcm9maWxlLmgiCisjaW5jbHVkZSAicHJvZl9lcnIuaCIKKworI2lmZGVmIEVOQUJMRV9OTFMKKyNpbmNsdWRlIDxsaWJpbnRsLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisjZGVmaW5lIF8oYSkgKGdldHRleHQgKGEpKQorI2lmZGVmIGdldHRleHRfbm9vcAorI2RlZmluZSBOXyhhKSBnZXR0ZXh0X25vb3AgKGEpCisjZWxzZQorI2RlZmluZSBOXyhhKSAoYSkKKyNlbmRpZgorI2RlZmluZSBQXyhzaW5ndWxhciwgcGx1cmFsLCBuKSAobmdldHRleHQgKHNpbmd1bGFyLCBwbHVyYWwsIG4pKQorI2lmbmRlZiBOTFNfQ0FUX05BTUUKKyNkZWZpbmUgTkxTX0NBVF9OQU1FICJlMmZzcHJvZ3MiCisjZW5kaWYKKyNpZm5kZWYgTE9DQUxFRElSCisjZGVmaW5lIExPQ0FMRURJUiAiL3Vzci9zaGFyZS9sb2NhbGUiCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIF8oYSkgKGEpCisjZGVmaW5lIE5fKGEpIGEKKyNkZWZpbmUgUF8oc2luZ3VsYXIsIHBsdXJhbCwgbikgKChuKSA9PSAxID8gKHNpbmd1bGFyKSA6IChwbHVyYWwpKQorI2VuZGlmCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBFMkZTQ0tfQVRUUih4KSBfX2F0dHJpYnV0ZV9fKHgpCisjZWxzZQorI2RlZmluZSBFMkZTQ0tfQVRUUih4KQorI2VuZGlmCisKKyNpbmNsdWRlICJxdW90YS9xdW90YWlvLmgiCisKKy8qCisgKiBFeGl0IGNvZGVzIHVzZWQgYnkgZnNjay10eXBlIHByb2dyYW1zCisgKi8KKyNkZWZpbmUgRlNDS19PSyAgICAgICAgICAwCS8qIE5vIGVycm9ycyAqLworI2RlZmluZSBGU0NLX05PTkRFU1RSVUNUIDEJLyogRmlsZSBzeXN0ZW0gZXJyb3JzIGNvcnJlY3RlZCAqLworI2RlZmluZSBGU0NLX1JFQk9PVCAgICAgIDIJLyogU3lzdGVtIHNob3VsZCBiZSByZWJvb3RlZCAqLworI2RlZmluZSBGU0NLX1VOQ09SUkVDVEVEIDQJLyogRmlsZSBzeXN0ZW0gZXJyb3JzIGxlZnQgdW5jb3JyZWN0ZWQgKi8KKyNkZWZpbmUgRlNDS19FUlJPUiAgICAgICA4CS8qIE9wZXJhdGlvbmFsIGVycm9yICovCisjZGVmaW5lIEZTQ0tfVVNBR0UgICAgICAgMTYJLyogVXNhZ2Ugb3Igc3ludGF4IGVycm9yICovCisjZGVmaW5lIEZTQ0tfQ0FOQ0VMRUQJIDMyCS8qIEFib3J0ZWQgd2l0aCBhIHNpZ25hbCBvciBeQyAqLworI2RlZmluZSBGU0NLX0xJQlJBUlkgICAgIDEyOAkvKiBTaGFyZWQgbGlicmFyeSBlcnJvciAqLworCisvKgorICogVGhlIGxhc3QgZXh0MmZzIHJldmlzaW9uIGxldmVsIHRoYXQgdGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBpcyBhYmxlIHRvCisgKiBzdXBwb3J0CisgKi8KKyNkZWZpbmUgRTJGU0NLX0NVUlJFTlRfUkVWCTEKKworLyoKKyAqIFRoZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24gc3RydWN0dXJlOyBzdG9yZXMgZGlyZWN0b3J5IGluZm9ybWF0aW9uCisgKiBjb2xsZWN0ZWQgaW4gZWFybGllciBwYXNzZXMsIHRvIGF2b2lkIGRpc2sgaS9vIGluIGZldGNoaW5nIHRoZQorICogZGlyZWN0b3J5IGluZm9ybWF0aW9uLgorICovCitzdHJ1Y3QgZGlyX2luZm8geworCWV4dDJfaW5vX3QJCWlubzsJLyogSW5vZGUgbnVtYmVyICovCisJZXh0Ml9pbm9fdAkJZG90ZG90OwkvKiBQYXJlbnQgYWNjb3JkaW5nIHRvICcuLicgKi8KKwlleHQyX2lub190CQlwYXJlbnQ7IC8qIFBhcmVudCBhY2NvcmRpbmcgdG8gdHJlZXdhbGsgKi8KK307CisKKworLyoKKyAqIFRoZSBpbmRleGVkIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmU7IHN0b3JlcyBpbmZvcm1hdGlvbiBmb3IKKyAqIGRpcmVjdG9yaWVzIHdoaWNoIGNvbnRhaW4gYSBoYXNoIHRyZWUgaW5kZXguCisgKi8KK3N0cnVjdCBkeF9kaXJfaW5mbyB7CisJZXh0Ml9pbm9fdAkJaW5vOyAJCS8qIElub2RlIG51bWJlciAqLworCWludAkJCW51bWJsb2NrczsJLyogbnVtYmVyIG9mIGJsb2NrcyAqLworCWludAkJCWhhc2h2ZXJzaW9uOworCXNob3J0CQkJZGVwdGg7CQkvKiBkZXB0aCBvZiB0cmVlICovCisJc3RydWN0IGR4X2RpcmJsb2NrX2luZm8JKmR4X2Jsb2NrOyAJLyogQXJyYXkgb2Ygc2l6ZSBudW1ibG9ja3MgKi8KK307CisKKyNkZWZpbmUgRFhfRElSQkxPQ0tfUk9PVAkxCisjZGVmaW5lIERYX0RJUkJMT0NLX0xFQUYJMgorI2RlZmluZSBEWF9ESVJCTE9DS19OT0RFCTMKKyNkZWZpbmUgRFhfRElSQkxPQ0tfQ09SUlVQVAk0CisjZGVmaW5lIERYX0RJUkJMT0NLX0NMRUFSRUQJOAorCitzdHJ1Y3QgZHhfZGlyYmxvY2tfaW5mbyB7CisJaW50CQl0eXBlOworCWJsazY0X3QJCXBoeXM7CisJaW50CQlmbGFnczsKKwlibGs2NF90CQlwYXJlbnQ7CisJZXh0Ml9kaXJoYXNoX3QJbWluX2hhc2g7CisJZXh0Ml9kaXJoYXNoX3QJbWF4X2hhc2g7CisJZXh0Ml9kaXJoYXNoX3QJbm9kZV9taW5faGFzaDsKKwlleHQyX2Rpcmhhc2hfdAlub2RlX21heF9oYXNoOworfTsKKworI2RlZmluZSBEWF9GTEFHX1JFRkVSRU5DRUQJMQorI2RlZmluZSBEWF9GTEFHX0RVUF9SRUYJCTIKKyNkZWZpbmUgRFhfRkxBR19GSVJTVAkJNAorI2RlZmluZSBEWF9GTEFHX0xBU1QJCTgKKworI2RlZmluZSBSRVNPVVJDRV9UUkFDSworCisjaWZkZWYgUkVTT1VSQ0VfVFJBQ0sKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBrZWVwaW5nIHRyYWNrIG9mIGhvdyBtdWNoIHJlc291cmNlcyBoYXZlCisgKiBiZWVuIHVzZWQgZm9yIGEgcGFydGljdWxhciBwYXNzIG9mIGUyZnNjay4KKyAqLworc3RydWN0IHJlc291cmNlX3RyYWNrIHsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lX3N0YXJ0OworCXN0cnVjdCB0aW1ldmFsIHVzZXJfc3RhcnQ7CisJc3RydWN0IHRpbWV2YWwgc3lzdGVtX3N0YXJ0OworCXZvaWQJKmJya19zdGFydDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNfcmVhZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNfd3JpdHRlbjsKK307CisjZW5kaWYKKworLyoKKyAqIEUyZnNjayBvcHRpb25zCisgKi8KKyNkZWZpbmUgRTJGX09QVF9SRUFET05MWQkweDAwMDEKKyNkZWZpbmUgRTJGX09QVF9QUkVFTgkJMHgwMDAyCisjZGVmaW5lIEUyRl9PUFRfWUVTCQkweDAwMDQKKyNkZWZpbmUgRTJGX09QVF9OTwkJMHgwMDA4CisjZGVmaW5lIEUyRl9PUFRfVElNRQkJMHgwMDEwCisjZGVmaW5lIEUyRl9PUFRfVElNRTIJCTB4MDAyMAorI2RlZmluZSBFMkZfT1BUX0NIRUNLQkxPQ0tTCTB4MDA0MAorI2RlZmluZSBFMkZfT1BUX0RFQlVHCQkweDAwODAKKyNkZWZpbmUgRTJGX09QVF9GT1JDRQkJMHgwMTAwCisjZGVmaW5lIEUyRl9PUFRfV1JJVEVDSEVDSwkweDAyMDAKKyNkZWZpbmUgRTJGX09QVF9DT01QUkVTU19ESVJTCTB4MDQwMAorI2RlZmluZSBFMkZfT1BUX0ZSQUdDSEVDSwkweDA4MDAKKyNkZWZpbmUgRTJGX09QVF9KT1VSTkFMX09OTFkJMHgxMDAwIC8qIG9ubHkgcmVwbGF5IHRoZSBqb3VybmFsICovCisjZGVmaW5lIEUyRl9PUFRfRElTQ0FSRAkJMHgyMDAwCisKKy8qCisgKiBFMmZzY2sgZmxhZ3MKKyAqLworI2RlZmluZSBFMkZfRkxBR19BQk9SVAkJMHgwMDAxIC8qIEFib3J0IHNpZ25hbGVkICovCisjZGVmaW5lIEUyRl9GTEFHX0NBTkNFTAkJMHgwMDAyIC8qIENhbmNlbCBzaWduYWxlZCAqLworI2RlZmluZSBFMkZfRkxBR19TSUdOQUxfTUFTSwkweDAwMDMKKyNkZWZpbmUgRTJGX0ZMQUdfUkVTVEFSVAkweDAwMDQgLyogUmVzdGFydCBzaWduYWxlZCAqLworI2RlZmluZSBFMkZfRkxBR19SRVNUQVJUX0xBVEVSCTB4MDAwOCAvKiBSZXN0YXJ0IGFmdGVyIGFsbCBpdGVyYXRpb25zIGRvbmUgKi8KKworI2RlZmluZSBFMkZfRkxBR19TRVRKTVBfT0sJMHgwMDEwIC8qIFNldGptcCB2YWxpZCBmb3IgYWJvcnQgKi8KKworI2RlZmluZSBFMkZfRkxBR19QUk9HX0JBUgkweDAwMjAgLyogUHJvZ3Jlc3MgYmFyIG9uIHNjcmVlbiAqLworI2RlZmluZSBFMkZfRkxBR19QUk9HX1NVUFBSRVNTCTB4MDA0MCAvKiBQcm9ncmVzcyBzdXNwZW5kZWQgKi8KKyNkZWZpbmUgRTJGX0ZMQUdfSk9VUk5BTF9JTk9ERQkweDAwODAgLyogQ3JlYXRlIGEgbmV3IGV4dDMgam91cm5hbCBpbm9kZSAqLworI2RlZmluZSBFMkZfRkxBR19TQl9TUEVDSUZJRUQJMHgwMTAwIC8qIFRoZSBzdXBlcmJsb2NrIHdhcyBleHBsaWNpdGx5CisJCQkJCSogc3BlY2lmaWVkIGJ5IHRoZSB1c2VyICovCisjZGVmaW5lIEUyRl9GTEFHX1JFU1RBUlRFRAkweDAyMDAgLyogRTJmc2NrIGhhcyBiZWVuIHJlc3RhcnRlZCAqLworI2RlZmluZSBFMkZfRkxBR19SRVNJWkVfSU5PREUJMHgwNDAwIC8qIFJlcXVlc3QgdG8gcmVjcmVhdGUgcmVzaXplIGlub2RlICovCisjZGVmaW5lIEUyRl9GTEFHX0dPVF9ERVZTSVpFCTB4MDgwMCAvKiBEZXZpY2Ugc2l6ZSBoYXMgYmVlbiBmZXRjaGVkICovCisjZGVmaW5lIEUyRl9GTEFHX0VYSVRJTkcJMHgxMDAwIC8qIEUyZnNjayBleGl0aW5nIGR1ZSB0byBlcnJvcnMgKi8KKyNkZWZpbmUgRTJGX0ZMQUdfVElNRV9JTlNBTkUJMHgyMDAwIC8qIFRpbWUgaXMgaW5zYW5lICovCisjZGVmaW5lIEUyRl9GTEFHX1BST0JMRU1TX0ZJWEVECTB4NDAwMCAvKiBBdCBsZWFzdCBvbmUgcHJvYmxlbSB3YXMgZml4ZWQgKi8KKworI2RlZmluZSBFMkZfUkVTRVRfRkxBR1MgKEUyRl9GTEFHX1RJTUVfSU5TQU5FIHwgRTJGX0ZMQUdfUFJPQkxFTVNfRklYRUQpCisKKy8qCisgKiBEZWZpbmVzIGZvciBpbmRpY2F0aW5nIHRoZSBlMmZzY2sgcGFzcyBudW1iZXIKKyAqLworI2RlZmluZSBFMkZfUEFTU18xCTEKKyNkZWZpbmUgRTJGX1BBU1NfMgkyCisjZGVmaW5lIEUyRl9QQVNTXzMJMworI2RlZmluZSBFMkZfUEFTU180CTQKKyNkZWZpbmUgRTJGX1BBU1NfNQk1CisjZGVmaW5lIEUyRl9QQVNTXzFCCTYKKworLyoKKyAqIERlZmluZSB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIHJlZmNvdW50IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdCBlYV9yZWZjb3VudCAqZXh0Ml9yZWZjb3VudF90OworCisvKgorICogVGhpcyBpcyB0aGUgZ2xvYmFsIGUyZnNjayBzdHJ1Y3R1cmUuCisgKi8KK3R5cGVkZWYgc3RydWN0IGUyZnNja19zdHJ1Y3QgKmUyZnNja190OworCisjZGVmaW5lIE1BWF9FWFRFTlRfREVQVEhfQ09VTlQgNQorCitzdHJ1Y3QgZTJmc2NrX3N0cnVjdCB7CisJZXh0Ml9maWxzeXMgZnM7CisJY29uc3QgY2hhciAqcHJvZ3JhbV9uYW1lOworCWNoYXIgKmZpbGVzeXN0ZW1fbmFtZTsKKwljaGFyICpkZXZpY2VfbmFtZTsKKwljaGFyICppb19vcHRpb25zOworCUZJTEUJKmxvZ2Y7CisJY2hhcgkqbG9nX2ZuOworCWludAlmbGFnczsJCS8qIEUyZnNjayBpbnRlcm5hbCBmbGFncyAqLworCWludAlvcHRpb25zOworCWludAlibG9ja3NpemU7CS8qIGJsb2Nrc2l6ZSAqLworCWJsazY0X3QJdXNlX3N1cGVyYmxvY2s7CS8qIHNiIHJlcXVlc3RlZCBieSB1c2VyICovCisJYmxrNjRfdAlzdXBlcmJsb2NrOwkvKiBzYiB1c2VkIHRvIG9wZW4gZnMgKi8KKwlibGs2NF90CW51bV9ibG9ja3M7CS8qIFRvdGFsIG51bWJlciBvZiBibG9ja3MgKi8KKwlibGs2NF90IGZyZWVfYmxvY2tzOworCWlub190CWZyZWVfaW5vZGVzOworCWludAltb3VudF9mbGFnczsKKwlpbnQJb3BlbmZzX2ZsYWdzOworCWJsa2lkX2NhY2hlIGJsa2lkOwkvKiBibGtpZCBjYWNoZSAqLworCisjaWZkZWYgSEFWRV9TRVRKTVBfSAorCWptcF9idWYJYWJvcnRfbG9jOworI2VuZGlmCisJdW5zaWduZWQgbG9uZyBhYm9ydF9jb2RlOworCisJaW50ICgqcHJvZ3Jlc3MpKGUyZnNja190IGN0eCwgaW50IHBhc3MsIHVuc2lnbmVkIGxvbmcgY3VyLAorCQkJdW5zaWduZWQgbG9uZyBtYXgpOworCisJZXh0MmZzX2lub2RlX2JpdG1hcCBpbm9kZV91c2VkX21hcDsgLyogSW5vZGVzIHdoaWNoIGFyZSBpbiB1c2UgKi8KKwlleHQyZnNfaW5vZGVfYml0bWFwIGlub2RlX2JhZF9tYXA7IC8qIElub2RlcyB3aGljaCBhcmUgYmFkIHNvbWVob3cgKi8KKwlleHQyZnNfaW5vZGVfYml0bWFwIGlub2RlX2Rpcl9tYXA7IC8qIElub2RlcyB3aGljaCBhcmUgZGlyZWN0b3JpZXMgKi8KKwlleHQyZnNfaW5vZGVfYml0bWFwIGlub2RlX2JiX21hcDsgLyogSW5vZGVzIHdoaWNoIGFyZSBpbiBiYWQgYmxvY2tzICovCisJZXh0MmZzX2lub2RlX2JpdG1hcCBpbm9kZV9pbWFnaWNfbWFwOyAvKiBBRlMgaW5vZGVzICovCisJZXh0MmZzX2lub2RlX2JpdG1hcCBpbm9kZV9yZWdfbWFwOyAvKiBJbm9kZXMgd2hpY2ggYXJlIHJlZ3VsYXIgZmlsZXMqLworCisJZXh0MmZzX2Jsb2NrX2JpdG1hcCBibG9ja19mb3VuZF9tYXA7IC8qIEJsb2NrcyB3aGljaCBhcmUgaW4gdXNlICovCisJZXh0MmZzX2Jsb2NrX2JpdG1hcCBibG9ja19kdXBfbWFwOyAvKiBCbGtzIHJlZmVyZW5jZWQgbW9yZSB0aGFuIG9uY2UgKi8KKwlleHQyZnNfYmxvY2tfYml0bWFwIGJsb2NrX2VhX21hcDsgLyogQmxvY2tzIHdoaWNoIGFyZSB1c2VkIGJ5IEVBJ3MgKi8KKworCS8qCisJICogSW5vZGUgY291bnQgYXJyYXlzCisJICovCisJZXh0Ml9pY291bnRfdAlpbm9kZV9jb3VudDsKKwlleHQyX2ljb3VudF90IGlub2RlX2xpbmtfaW5mbzsKKworCWV4dDJfcmVmY291bnRfdAlyZWZjb3VudDsKKwlleHQyX3JlZmNvdW50X3QgcmVmY291bnRfZXh0cmE7CisKKwkvKgorCSAqIEFycmF5IG9mIGZsYWdzIGluZGljYXRpbmcgd2hldGhlciBhbiBpbm9kZSBiaXRtYXAsIGJsb2NrCisJICogYml0bWFwLCBvciBpbm9kZSB0YWJsZSBpcyBpbnZhbGlkCisJICovCisJaW50ICppbnZhbGlkX2lub2RlX2JpdG1hcF9mbGFnOworCWludCAqaW52YWxpZF9ibG9ja19iaXRtYXBfZmxhZzsKKwlpbnQgKmludmFsaWRfaW5vZGVfdGFibGVfZmxhZzsKKwlpbnQgaW52YWxpZF9iaXRtYXBzOwkvKiBUaGVyZSBhcmUgaW52YWxpZCBiaXRtYXBzL2l0YWJsZSAqLworCisJLyoKKwkgKiBCbG9jayBidWZmZXIKKwkgKi8KKwljaGFyICpibG9ja19idWY7CisKKwkvKgorCSAqIEZvciBwYXNzMV9jaGVja19kaXJlY3RvcnkgYW5kIHBhc3MxX2dldF9ibG9ja3MKKwkgKi8KKwlleHQyX2lub190IHN0YXNoZWRfaW5vOworCXN0cnVjdCBleHQyX2lub2RlICpzdGFzaGVkX2lub2RlOworCisJLyoKKwkgKiBMb2NhdGlvbiBvZiB0aGUgbG9zdCBhbmQgZm91bmQgZGlyZWN0b3J5CisJICovCisJZXh0Ml9pbm9fdCBsb3N0X2FuZF9mb3VuZDsKKwlpbnQgYmFkX2xvc3RfYW5kX2ZvdW5kOworCisJLyoKKwkgKiBEaXJlY3RvcnkgaW5mb3JtYXRpb24KKwkgKi8KKwlzdHJ1Y3QgZGlyX2luZm9fZGIJKmRpcl9pbmZvOworCisJLyoKKwkgKiBJbmRleGVkIGRpcmVjdG9yeSBpbmZvcm1hdGlvbgorCSAqLworCWludAkJZHhfZGlyX2luZm9fY291bnQ7CisJaW50CQlkeF9kaXJfaW5mb19zaXplOworCXN0cnVjdCBkeF9kaXJfaW5mbyAqZHhfZGlyX2luZm87CisKKwkvKgorCSAqIERpcmVjdG9yaWVzIHRvIGhhc2gKKwkgKi8KKwlleHQyX3UzMl9saXN0CWRpcnNfdG9faGFzaDsKKworCS8qCisJICogVHVuaW5nIHBhcmFtZXRlcnMKKwkgKi8KKwlpbnQgcHJvY2Vzc19pbm9kZV9zaXplOworCWludCBpbm9kZV9idWZmZXJfYmxvY2tzOworCXVuc2lnbmVkIGludCBodHJlZV9zbGFja19wZXJjZW50YWdlOworCisJLyoKKwkgKiBleHQzIGpvdXJuYWwgc3VwcG9ydAorCSAqLworCWlvX2NoYW5uZWwJam91cm5hbF9pbzsKKwljaGFyCSpqb3VybmFsX25hbWU7CisKKwkvKgorCSAqIEV4dDQgcXVvdGEgc3VwcG9ydAorCSAqLworCXF1b3RhX2N0eF90IHFjdHg7CisjaWZkZWYgUkVTT1VSQ0VfVFJBQ0sKKwkvKgorCSAqIEZvciB0aW1pbmcgcHVycG9zZXMKKwkgKi8KKwlzdHJ1Y3QgcmVzb3VyY2VfdHJhY2sJZ2xvYmFsX3J0cmFjazsKKyNlbmRpZgorCisJLyoKKwkgKiBIb3cgd2UgZGlzcGxheSB0aGUgcHJvZ3Jlc3MgdXBkYXRlIChmb3IgdW5peCkKKwkgKi8KKwlpbnQgcHJvZ3Jlc3NfZmQ7CisJaW50IHByb2dyZXNzX3BvczsKKwlpbnQgcHJvZ3Jlc3NfbGFzdF9wZXJjZW50OworCXVuc2lnbmVkIGludCBwcm9ncmVzc19sYXN0X3RpbWU7CisJaW50IGludGVyYWN0aXZlOwkvKiBBcmUgd2UgY29ubmVjdGVkIGRpcmVjdGx5IHRvIGEgdHR5PyAqLworCWNoYXIgc3RhcnRfbWV0YVsyXSwgc3RvcF9tZXRhWzJdOworCisJLyogRmlsZSBjb3VudHMgKi8KKwlfX3UzMiBmc19kaXJlY3RvcnlfY291bnQ7CisJX191MzIgZnNfcmVndWxhcl9jb3VudDsKKwlfX3UzMiBmc19ibG9ja2Rldl9jb3VudDsKKwlfX3UzMiBmc19jaGFyZGV2X2NvdW50OworCV9fdTMyIGZzX2xpbmtzX2NvdW50OworCV9fdTMyIGZzX3N5bWxpbmtzX2NvdW50OworCV9fdTMyIGZzX2Zhc3Rfc3ltbGlua3NfY291bnQ7CisJX191MzIgZnNfZmlmb19jb3VudDsKKwlfX3UzMiBmc190b3RhbF9jb3VudDsKKwlfX3UzMiBmc19iYWRibG9ja3NfY291bnQ7CisJX191MzIgZnNfc29ja2V0c19jb3VudDsKKwlfX3UzMiBmc19pbmRfY291bnQ7CisJX191MzIgZnNfZGluZF9jb3VudDsKKwlfX3UzMiBmc190aW5kX2NvdW50OworCV9fdTMyIGZzX2ZyYWdtZW50ZWQ7CisJX191MzIgZnNfZnJhZ21lbnRlZF9kaXI7CisJX191MzIgbGFyZ2VfZmlsZXM7CisJX191MzIgZnNfZXh0X2F0dHJfaW5vZGVzOworCV9fdTMyIGZzX2V4dF9hdHRyX2Jsb2NrczsKKwlfX3UzMiBleHRlbnRfZGVwdGhfY291bnRbTUFYX0VYVEVOVF9ERVBUSF9DT1VOVF07CisKKwkvKiBtaXNjIGZpZWxkcyAqLworCXRpbWVfdCBub3c7CisJdGltZV90IHRpbWVfZnVkZ2U7CS8qIEZvciB3b3JraW5nIGFyb3VuZCBidWdneSBpbml0IHNjcmlwdHMgKi8KKwlpbnQgZXh0X2F0dHJfdmVyOworCXByb2ZpbGVfdAlwcm9maWxlOworCWludCBibG9ja3NfcGVyX3BhZ2U7CisKKwkvKiBSZXNlcnZlIGJsb2NrcyBmb3Igcm9vdCBhbmQgbCtmIHJlLWNyZWF0aW9uICovCisJYmxrNjRfdCByb290X3JlcGFpcl9ibG9jaywgbG5mX3JlcGFpcl9ibG9jazsKKworCS8qCisJICogRm9yIHRoZSB1c2Ugb2YgY2FsbGVycyBvZiB0aGUgZTJmc2NrIGZ1bmN0aW9uczsgbm90IHVzZWQgYnkKKwkgKiBlMmZzY2sgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuCisJICovCisJdm9pZCAqcHJpdl9kYXRhOworfTsKKworLyogVXNlZCBieSB0aGUgcmVnaW9uIGFsbG9jYXRpb24gY29kZSAqLwordHlwZWRlZiBfX3UzMiByZWdpb25fYWRkcl90OwordHlwZWRlZiBzdHJ1Y3QgcmVnaW9uX3N0cnVjdCAqcmVnaW9uX3Q7CisKKyNpZm5kZWYgSEFWRV9TVFJOTEVOCisjZGVmaW5lIHN0cm5sZW4oc3RyLCB4KSBlMmZzY2tfc3Rybmxlbigoc3RyKSwoeCkpCitleHRlcm4gaW50IGUyZnNja19zdHJubGVuKGNvbnN0IGNoYXIgKiBzLCBpbnQgY291bnQpOworI2VuZGlmCisKKy8qCisgKiBQcm9jZWR1cmUgZGVjbGFyYXRpb25zCisgKi8KKworZXh0ZXJuIHZvaWQgZTJmc2NrX3Bhc3MxKGUyZnNja190IGN0eCk7CitleHRlcm4gdm9pZCBlMmZzY2tfcGFzczFfZHVwYmxvY2tzKGUyZnNja190IGN0eCwgY2hhciAqYmxvY2tfYnVmKTsKK2V4dGVybiB2b2lkIGUyZnNja19wYXNzMihlMmZzY2tfdCBjdHgpOworZXh0ZXJuIHZvaWQgZTJmc2NrX3Bhc3MzKGUyZnNja190IGN0eCk7CitleHRlcm4gdm9pZCBlMmZzY2tfcGFzczQoZTJmc2NrX3QgY3R4KTsKK2V4dGVybiB2b2lkIGUyZnNja19wYXNzNShlMmZzY2tfdCBjdHgpOworCisvKiBlMmZzY2suYyAqLworZXh0ZXJuIGVycmNvZGVfdCBlMmZzY2tfYWxsb2NhdGVfY29udGV4dChlMmZzY2tfdCAqcmV0KTsKK2V4dGVybiBlcnJjb2RlX3QgZTJmc2NrX3Jlc2V0X2NvbnRleHQoZTJmc2NrX3QgY3R4KTsKK2V4dGVybiB2b2lkIGUyZnNja19mcmVlX2NvbnRleHQoZTJmc2NrX3QgY3R4KTsKK2V4dGVybiBpbnQgZTJmc2NrX3J1bihlMmZzY2tfdCBjdHgpOworCisKKy8qIGJhZGJsb2NrLmMgKi8KK2V4dGVybiB2b2lkIHJlYWRfYmFkX2Jsb2Nrc19maWxlKGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqYmFkX2Jsb2Nrc19maWxlLAorCQkJCSBpbnQgcmVwbGFjZV9iYWRfYmxvY2tzKTsKKworLyogY3JjMzIuYyAqLworZXh0ZXJuIF9fdTMyIGNyYzMyX2JlKF9fdTMyIGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqcCwgc2l6ZV90IGxlbik7CisKKy8qIGRpcmluZm8uYyAqLworZXh0ZXJuIHZvaWQgZTJmc2NrX2FkZF9kaXJfaW5mbyhlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLCBleHQyX2lub190IHBhcmVudCk7CitleHRlcm4gdm9pZCBlMmZzY2tfZnJlZV9kaXJfaW5mbyhlMmZzY2tfdCBjdHgpOworZXh0ZXJuIGludCBlMmZzY2tfZ2V0X251bV9kaXJpbmZvKGUyZnNja190IGN0eCk7CitleHRlcm4gc3RydWN0IGRpcl9pbmZvX2l0ZXIgKmUyZnNja19kaXJfaW5mb19pdGVyX2JlZ2luKGUyZnNja190IGN0eCk7CitleHRlcm4gc3RydWN0IGRpcl9pbmZvICplMmZzY2tfZGlyX2luZm9faXRlcihlMmZzY2tfdCBjdHgsCisJCQkJCSAgICAgc3RydWN0IGRpcl9pbmZvX2l0ZXIgKik7CitleHRlcm4gdm9pZCBlMmZzY2tfZGlyX2luZm9faXRlcl9lbmQoZTJmc2NrX3QgY3R4LCBzdHJ1Y3QgZGlyX2luZm9faXRlciAqKTsKK2V4dGVybiBpbnQgZTJmc2NrX2Rpcl9pbmZvX3NldF9wYXJlbnQoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubywKKwkJCQkgICAgICBleHQyX2lub190IHBhcmVudCk7CitleHRlcm4gaW50IGUyZnNja19kaXJfaW5mb19zZXRfZG90ZG90KGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICAgICAgZXh0Ml9pbm9fdCBkb3Rkb3QpOworZXh0ZXJuIGludCBlMmZzY2tfZGlyX2luZm9fZ2V0X3BhcmVudChlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgICAgIGV4dDJfaW5vX3QgKnBhcmVudCk7CitleHRlcm4gaW50IGUyZnNja19kaXJfaW5mb19nZXRfZG90ZG90KGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICAgICAgZXh0Ml9pbm9fdCAqZG90ZG90KTsKKworLyogZHhfZGlyaW5mby5jICovCitleHRlcm4gdm9pZCBlMmZzY2tfYWRkX2R4X2RpcihlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLCBpbnQgbnVtX2Jsb2Nrcyk7CitleHRlcm4gc3RydWN0IGR4X2Rpcl9pbmZvICplMmZzY2tfZ2V0X2R4X2Rpcl9pbmZvKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8pOworZXh0ZXJuIHZvaWQgZTJmc2NrX2ZyZWVfZHhfZGlyX2luZm8oZTJmc2NrX3QgY3R4KTsKK2V4dGVybiBpbnQgZTJmc2NrX2dldF9udW1fZHhfZGlyaW5mbyhlMmZzY2tfdCBjdHgpOworZXh0ZXJuIHN0cnVjdCBkeF9kaXJfaW5mbyAqZTJmc2NrX2R4X2Rpcl9pbmZvX2l0ZXIoZTJmc2NrX3QgY3R4LCBpbnQgKmNvbnRyb2wpOworCisvKiBlYV9yZWZjb3VudC5jICovCitleHRlcm4gZXJyY29kZV90IGVhX3JlZmNvdW50X2NyZWF0ZShpbnQgc2l6ZSwgZXh0Ml9yZWZjb3VudF90ICpyZXQpOworZXh0ZXJuIHZvaWQgZWFfcmVmY291bnRfZnJlZShleHQyX3JlZmNvdW50X3QgcmVmY291bnQpOworZXh0ZXJuIGVycmNvZGVfdCBlYV9yZWZjb3VudF9mZXRjaChleHQyX3JlZmNvdW50X3QgcmVmY291bnQsIGJsazY0X3QgYmxrLCBpbnQgKnJldCk7CitleHRlcm4gZXJyY29kZV90IGVhX3JlZmNvdW50X2luY3JlbWVudChleHQyX3JlZmNvdW50X3QgcmVmY291bnQsCisJCQkJICAgICAgIGJsazY0X3QgYmxrLCBpbnQgKnJldCk7CitleHRlcm4gZXJyY29kZV90IGVhX3JlZmNvdW50X2RlY3JlbWVudChleHQyX3JlZmNvdW50X3QgcmVmY291bnQsCisJCQkJICAgICAgIGJsazY0X3QgYmxrLCBpbnQgKnJldCk7CitleHRlcm4gZXJyY29kZV90IGVhX3JlZmNvdW50X3N0b3JlKGV4dDJfcmVmY291bnRfdCByZWZjb3VudCwKKwkJCQkgICBibGs2NF90IGJsaywgaW50IGNvdW50KTsKK2V4dGVybiBibGtfdCBleHQyZnNfZ2V0X3JlZmNvdW50X3NpemUoZXh0Ml9yZWZjb3VudF90IHJlZmNvdW50KTsKK2V4dGVybiB2b2lkIGVhX3JlZmNvdW50X2ludHJfYmVnaW4oZXh0Ml9yZWZjb3VudF90IHJlZmNvdW50KTsKK2V4dGVybiBibGs2NF90IGVhX3JlZmNvdW50X2ludHJfbmV4dChleHQyX3JlZmNvdW50X3QgcmVmY291bnQsIGludCAqcmV0KTsKKworLyogZWhhbmRsZXIuYyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmVoYW5kbGVyX29wZXJhdGlvbihjb25zdCBjaGFyICpvcCk7CitleHRlcm4gdm9pZCBlaGFuZGxlcl9pbml0KGlvX2NoYW5uZWwgY2hhbm5lbCk7CisKKy8qIGpvdXJuYWwuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBlMmZzY2tfY2hlY2tfZXh0M19qb3VybmFsKGUyZnNja190IGN0eCk7CitleHRlcm4gZXJyY29kZV90IGUyZnNja19ydW5fZXh0M19qb3VybmFsKGUyZnNja190IGN0eCk7CitleHRlcm4gdm9pZCBlMmZzY2tfbW92ZV9leHQzX2pvdXJuYWwoZTJmc2NrX3QgY3R4KTsKK2V4dGVybiBpbnQgZTJmc2NrX2ZpeF9leHQzX2pvdXJuYWxfaGludChlMmZzY2tfdCBjdHgpOworCisvKiBsb2dmaWxlLmMgKi8KK2V4dGVybiB2b2lkIHNldF91cF9sb2dnaW5nKGUyZnNja190IGN0eCk7CisKKy8qIHF1b3RhLmMgKi8KK2V4dGVybiB2b2lkIGUyZnNja19oaWRlX3F1b3RhKGUyZnNja190IGN0eCk7CisKKy8qIHBhc3MxLmMgKi8KK2V4dGVybiB2b2lkIGUyZnNja19zZXR1cF90ZGJfaWNvdW50KGUyZnNja190IGN0eCwgaW50IGZsYWdzLAorCQkJCSAgICBleHQyX2ljb3VudF90ICpyZXQpOworZXh0ZXJuIHZvaWQgZTJmc2NrX3VzZV9pbm9kZV9zaG9ydGN1dHMoZTJmc2NrX3QgY3R4LCBpbnQgdXNlX3Nob3J0Y3V0cyk7CitleHRlcm4gaW50IGUyZnNja19wYXNzMV9jaGVja19kZXZpY2VfaW5vZGUoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSk7CitleHRlcm4gaW50IGUyZnNja19wYXNzMV9jaGVja19zeW1saW5rKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIGNoYXIgKmJ1Zik7CitleHRlcm4gdm9pZCBlMmZzY2tfY2xlYXJfaW5vZGUoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubywKKwkJCSAgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIGludCByZXN0YXJ0X2ZsYWcsCisJCQkgICAgICAgY29uc3QgY2hhciAqc291cmNlKTsKK2V4dGVybiB2b2lkIGUyZnNja19pbnRlcmNlcHRfYmxvY2tfYWxsb2NhdGlvbnMoZTJmc2NrX3QgY3R4KTsKKworLyogcGFzczIuYyAqLworZXh0ZXJuIGludCBlMmZzY2tfcHJvY2Vzc19iYWRfaW5vZGUoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGRpciwKKwkJCQkgICAgZXh0Ml9pbm9fdCBpbm8sIGNoYXIgKmJ1Zik7CisKKy8qIHBhc3MzLmMgKi8KK2V4dGVybiBpbnQgZTJmc2NrX3JlY29ubmVjdF9maWxlKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm9kZSk7CitleHRlcm4gZXJyY29kZV90IGUyZnNja19leHBhbmRfZGlyZWN0b3J5KGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBkaXIsCisJCQkJCSBpbnQgbnVtLCBpbnQgZ2F1cmFudGVlZF9zaXplKTsKK2V4dGVybiBleHQyX2lub190IGUyZnNja19nZXRfbG9zdF9hbmRfZm91bmQoZTJmc2NrX3QgY3R4LCBpbnQgZml4KTsKK2V4dGVybiBlcnJjb2RlX3QgZTJmc2NrX2FkanVzdF9pbm9kZV9jb3VudChlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLAorCQkJCQkgICBpbnQgYWRqKTsKKworCisvKiByZWdpb24uYyAqLworZXh0ZXJuIHJlZ2lvbl90IHJlZ2lvbl9jcmVhdGUocmVnaW9uX2FkZHJfdCBtaW4sIHJlZ2lvbl9hZGRyX3QgbWF4KTsKK2V4dGVybiB2b2lkIHJlZ2lvbl9mcmVlKHJlZ2lvbl90IHJlZ2lvbik7CitleHRlcm4gaW50IHJlZ2lvbl9hbGxvY2F0ZShyZWdpb25fdCByZWdpb24sIHJlZ2lvbl9hZGRyX3Qgc3RhcnQsIGludCBuKTsKKworLyogcmVoYXNoLmMgKi8KK2VycmNvZGVfdCBlMmZzY2tfcmVoYXNoX2RpcihlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vKTsKK3ZvaWQgZTJmc2NrX3JlaGFzaF9kaXJlY3RvcmllcyhlMmZzY2tfdCBjdHgpOworCisvKiBzaWdjYXRjaGVyLmMgKi8KK3ZvaWQgc2lnY2F0Y2hlcl9zZXR1cCh2b2lkKTsKKworLyogc3VwZXIuYyAqLwordm9pZCBjaGVja19zdXBlcl9ibG9jayhlMmZzY2tfdCBjdHgpOworaW50IGNoZWNrX2JhY2t1cF9zdXBlcl9ibG9jayhlMmZzY2tfdCBjdHgpOwordm9pZCBjaGVja19yZXNpemVfaW5vZGUoZTJmc2NrX3QgY3R4KTsKKworLyogdXRpbC5jICovCitleHRlcm4gdm9pZCAqZTJmc2NrX2FsbG9jYXRlX21lbW9yeShlMmZzY2tfdCBjdHgsIHVuc2lnbmVkIGludCBzaXplLAorCQkJCSAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbik7CitleHRlcm4gaW50IGFzayhlMmZzY2tfdCBjdHgsIGNvbnN0IGNoYXIgKiBzdHJpbmcsIGludCBkZWYpOworZXh0ZXJuIGludCBhc2tfeW4oZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICogc3RyaW5nLCBpbnQgZGVmKTsKK2V4dGVybiB2b2lkIGZhdGFsX2Vycm9yKGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqIGZtdF9zdHJpbmcpOworZXh0ZXJuIHZvaWQgbG9nX291dChlMmZzY2tfdCBjdHgsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCUUyRlNDS19BVFRSKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOworZXh0ZXJuIHZvaWQgbG9nX2VycihlMmZzY2tfdCBjdHgsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCUUyRlNDS19BVFRSKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOworZXh0ZXJuIHZvaWQgZTJmc2NrX3JlYWRfYml0bWFwcyhlMmZzY2tfdCBjdHgpOworZXh0ZXJuIHZvaWQgZTJmc2NrX3dyaXRlX2JpdG1hcHMoZTJmc2NrX3QgY3R4KTsKK2V4dGVybiB2b2lkIHByZWVuaGFsdChlMmZzY2tfdCBjdHgpOworZXh0ZXJuIGNoYXIgKnN0cmluZ19jb3B5KGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKTsKK2V4dGVybiBlcnJjb2RlX3QgZTJmc2NrX3plcm9fYmxvY2tzKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibGssIGludCBudW0sCisJCQkJICAgIGJsa190ICpyZXRfYmxrLCBpbnQgKnJldF9jb3VudCk7CitleHRlcm4gaW50IGZzX3Byb2NfY2hlY2soY29uc3QgY2hhciAqZnNfbmFtZSk7CitleHRlcm4gaW50IGNoZWNrX2Zvcl9tb2R1bGVzKGNvbnN0IGNoYXIgKmZzX25hbWUpOworI2lmZGVmIFJFU09VUkNFX1RSQUNLCitleHRlcm4gdm9pZCBwcmludF9yZXNvdXJjZV90cmFjayhlMmZzY2tfdCBjdHgsCisJCQkJIGNvbnN0IGNoYXIgKmRlc2MsCisJCQkJIHN0cnVjdCByZXNvdXJjZV90cmFjayAqdHJhY2ssCisJCQkJIGlvX2NoYW5uZWwgY2hhbm5lbCk7CitleHRlcm4gdm9pZCBpbml0X3Jlc291cmNlX3RyYWNrKHN0cnVjdCByZXNvdXJjZV90cmFjayAqdHJhY2ssCisJCQkJaW9fY2hhbm5lbCBjaGFubmVsKTsKKyNlbHNlCisjZGVmaW5lIHByaW50X3Jlc291cmNlX3RyYWNrKGN0eCwgZGVzYywgdHJhY2ssIGNoYW5uZWwpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaW5pdF9yZXNvdXJjZV90cmFjayh0cmFjaywgY2hhbm5lbCkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCitleHRlcm4gaW50IGlub2RlX2hhc192YWxpZF9ibG9ja3Moc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKTsKK2V4dGVybiB2b2lkIGUyZnNja19yZWFkX2lub2RlKGUyZnNja190IGN0eCwgdW5zaWduZWQgbG9uZyBpbm8sCisJCQkgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLCBjb25zdCBjaGFyICogcHJvYyk7CitleHRlcm4gdm9pZCBlMmZzY2tfcmVhZF9pbm9kZV9mdWxsKGUyZnNja190IGN0eCwgdW5zaWduZWQgbG9uZyBpbm8sCisJCQkJICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCSAgIGNvbnN0IGludCBidWZzaXplLCBjb25zdCBjaGFyICpwcm9jKTsKK2V4dGVybiB2b2lkIGUyZnNja193cml0ZV9pbm9kZShlMmZzY2tfdCBjdHgsIHVuc2lnbmVkIGxvbmcgaW5vLAorCQkJICAgICAgIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUsIGNvbnN0IGNoYXIgKiBwcm9jKTsKK2V4dGVybiB2b2lkIGUyZnNja193cml0ZV9pbm9kZV9mdWxsKGUyZnNja190IGN0eCwgdW5zaWduZWQgbG9uZyBpbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV4dDJfaW5vZGUgKiBpbm9kZSwgaW50IGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvYyk7CisjaWZkZWYgTVRSQUNFCitleHRlcm4gdm9pZCBtdHJhY2VfcHJpbnQoY2hhciAqbWVzZyk7CisjZW5kaWYKK2V4dGVybiBibGs2NF90IGdldF9iYWNrdXBfc2IoZTJmc2NrX3QgY3R4LCBleHQyX2ZpbHN5cyBmcywKKwkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGlvX21hbmFnZXIgbWFuYWdlcik7CitleHRlcm4gaW50IGV4dDJfZmlsZV90eXBlKHVuc2lnbmVkIGludCBtb2RlKTsKK2V4dGVybiBpbnQgd3JpdGVfYWxsKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwordm9pZCBkdW1wX21tcF9tc2coc3RydWN0IG1tcF9zdHJ1Y3QgKm1tcCwgY29uc3QgY2hhciAqbXNnKTsKK2VycmNvZGVfdCBlMmZzY2tfbW1wX3VwZGF0ZShleHQyX2ZpbHN5cyBmcyk7CisKK2V4dGVybiB2b2lkIGUyZnNja19zZXRfYml0bWFwX3R5cGUoZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgdW5zaWduZWQgaW50IGRlZmF1bHRfdHlwZSwKKwkJCQkgICBjb25zdCBjaGFyICpwcm9maWxlX25hbWUsCisJCQkJICAgdW5zaWduZWQgaW50ICpvbGRfdHlwZSk7CitleHRlcm4gZXJyY29kZV90IGUyZnNja19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKmRlc2NyLAorCQkJCQkgICAgICBpbnQgZGVmYXVsdF90eXBlLAorCQkJCQkgICAgICBjb25zdCBjaGFyICpwcm9maWxlX25hbWUsCisJCQkJCSAgICAgIGV4dDJmc19pbm9kZV9iaXRtYXAgKnJldCk7CitleHRlcm4gZXJyY29kZV90IGUyZnNja19hbGxvY2F0ZV9ibG9ja19iaXRtYXAoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKmRlc2NyLAorCQkJCQkgICAgICBpbnQgZGVmYXVsdF90eXBlLAorCQkJCQkgICAgICBjb25zdCBjaGFyICpwcm9maWxlX25hbWUsCisJCQkJCSAgICAgIGV4dDJmc19ibG9ja19iaXRtYXAgKnJldCk7CitleHRlcm4gZXJyY29kZV90IGUyZnNja19hbGxvY2F0ZV9zdWJjbHVzdGVyX2JpdG1hcChleHQyX2ZpbHN5cyBmcywKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKmRlc2NyLAorCQkJCQkJICAgaW50IGRlZmF1bHRfdHlwZSwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKnByb2ZpbGVfbmFtZSwKKwkJCQkJCSAgIGV4dDJmc19ibG9ja19iaXRtYXAgKnJldCk7CisKKy8qIHVuaXguYyAqLworZXh0ZXJuIHZvaWQgZTJmc2NrX2NsZWFyX3Byb2diYXIoZTJmc2NrX3QgY3R4KTsKK2V4dGVybiBpbnQgZTJmc2NrX3NpbXBsZV9wcm9ncmVzcyhlMmZzY2tfdCBjdHgsIGNvbnN0IGNoYXIgKmxhYmVsLAorCQkJCSAgZmxvYXQgcGVyY2VudCwgdW5zaWduZWQgaW50IGRweW51bSk7CisjZW5kaWYgLyogX0UyRlNDS19IICovCmRpZmYgLS1naXQgYS9lMmZzY2svZWFfcmVmY291bnQuYyBiL2UyZnNjay9lYV9yZWZjb3VudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZmFmNDkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svZWFfcmVmY291bnQuYwpAQCAtMCwwICsxLDQ2MSBAQAorLyoKKyAqIGVhX3JlZmNvdW50LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgVGhlb2RvcmUgVHMnby4gIFRoaXMgZmlsZSBtYXkgYmUKKyAqIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBURVNUX1BST0dSQU0KKyN1bmRlZiBFTkFCTEVfTkxTCisjZW5kaWYKKyNpbmNsdWRlICJlMmZzY2suaCIKKworLyoKKyAqIFRoZSBzdHJhdGVneSB3ZSB1c2UgZm9yIGtlZXBpbmcgdHJhY2sgb2YgRUEgcmVmY291bnRzIGlzIGFzCisgKiBmb2xsb3dzLiAgV2Uga2VlcCBhIHNvcnRlZCBhcnJheSBvZiBmaXJzdCBFQSBibG9ja3MgYW5kIGl0cworICogcmVmZXJlbmNlIGNvdW50cy4gIE9uY2UgdGhlIHJlZmNvdW50IGhhcyBkcm9wcGVkIHRvIHplcm8sIGl0IGlzCisgKiByZW1vdmVkIGZyb20gdGhlIGFycmF5IHRvIHNhdmUgbWVtb3J5IHNwYWNlLiAgT25jZSB0aGUgRUEgYmxvY2sgaXMKKyAqIGNoZWNrZWQsIGl0cyBiaXQgaXMgc2V0IGluIHRoZSBibG9ja19lYV9tYXAgYml0bWFwLgorICovCitzdHJ1Y3QgZWFfcmVmY291bnRfZWwgeworCWJsazY0X3QJZWFfYmxrOworCWludAllYV9jb3VudDsKK307CisKK3N0cnVjdCBlYV9yZWZjb3VudCB7CisJYmxrX3QJCWNvdW50OworCWJsa190CQlzaXplOworCWJsa190CQljdXJzb3I7CisJc3RydWN0IGVhX3JlZmNvdW50X2VsCSpsaXN0OworfTsKKwordm9pZCBlYV9yZWZjb3VudF9mcmVlKGV4dDJfcmVmY291bnRfdCByZWZjb3VudCkKK3sKKwlpZiAoIXJlZmNvdW50KQorCQlyZXR1cm47CisKKwlpZiAocmVmY291bnQtPmxpc3QpCisJCWV4dDJmc19mcmVlX21lbSgmcmVmY291bnQtPmxpc3QpOworCWV4dDJmc19mcmVlX21lbSgmcmVmY291bnQpOworfQorCitlcnJjb2RlX3QgZWFfcmVmY291bnRfY3JlYXRlKGludCBzaXplLCBleHQyX3JlZmNvdW50X3QgKnJldCkKK3sKKwlleHQyX3JlZmNvdW50X3QJcmVmY291bnQ7CisJZXJyY29kZV90CXJldHZhbDsKKwlzaXplX3QJCWJ5dGVzOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBlYV9yZWZjb3VudCksICZyZWZjb3VudCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwltZW1zZXQocmVmY291bnQsIDAsIHNpemVvZihzdHJ1Y3QgZWFfcmVmY291bnQpKTsKKworCWlmICghc2l6ZSkKKwkJc2l6ZSA9IDUwMDsKKwlyZWZjb3VudC0+c2l6ZSA9IHNpemU7CisJYnl0ZXMgPSAoc2l6ZV90KSAoc2l6ZSAqIHNpemVvZihzdHJ1Y3QgZWFfcmVmY291bnRfZWwpKTsKKyNpZmRlZiBERUJVRworCXByaW50ZigiUmVmY291bnQgYWxsb2NhdGVkICVkIGVudHJpZXMsICVkIGJ5dGVzLlxuIiwKKwkgICAgICAgcmVmY291bnQtPnNpemUsIGJ5dGVzKTsKKyNlbmRpZgorCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGJ5dGVzLCAmcmVmY291bnQtPmxpc3QpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCW1lbXNldChyZWZjb3VudC0+bGlzdCwgMCwgYnl0ZXMpOworCisJcmVmY291bnQtPmNvdW50ID0gMDsKKwlyZWZjb3VudC0+Y3Vyc29yID0gMDsKKworCSpyZXQgPSByZWZjb3VudDsKKwlyZXR1cm4gMDsKKworZXJyb3V0OgorCWVhX3JlZmNvdW50X2ZyZWUocmVmY291bnQpOworCXJldHVybihyZXR2YWwpOworfQorCisvKgorICogY29sbGFwc2VfcmVmY291bnQoKSAtLS0gZ28gdGhyb3VnaCB0aGUgcmVmY291bnQgYXJyYXksIGFuZCBnZXQgcmlkCisgKiBvZiBhbnkgY291bnQgPT0gemVybyBlbnRyaWVzCisgKi8KK3N0YXRpYyB2b2lkIHJlZmNvdW50X2NvbGxhcHNlKGV4dDJfcmVmY291bnRfdCByZWZjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQJaSwgajsKKwlzdHJ1Y3QgZWFfcmVmY291bnRfZWwJKmxpc3Q7CisKKwlsaXN0ID0gcmVmY291bnQtPmxpc3Q7CisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCByZWZjb3VudC0+Y291bnQ7IGkrKykgeworCQlpZiAobGlzdFtpXS5lYV9jb3VudCkgeworCQkJaWYgKGkgIT0gaikKKwkJCQlsaXN0W2pdID0gbGlzdFtpXTsKKwkJCWorKzsKKwkJfQorCX0KKyNpZiBkZWZpbmVkKERFQlVHKSB8fCBkZWZpbmVkKFRFU1RfUFJPR1JBTSkKKwlwcmludGYoIlJlZmNvdW50X2NvbGxhcHNlOiBzaXplIHdhcyAlZCwgbm93ICVkXG4iLAorCSAgICAgICByZWZjb3VudC0+Y291bnQsIGopOworI2VuZGlmCisJcmVmY291bnQtPmNvdW50ID0gajsKK30KKworCisvKgorICogaW5zZXJ0X3JlZmNvdW50X2VsKCkgLS0tIEluc2VydCBhIG5ldyBlbnRyeSBpbnRvIHRoZSBzb3J0ZWQgbGlzdCBhdCBhCisgKiAJc3BlY2lmaWVkIHBvc2l0aW9uLgorICovCitzdGF0aWMgc3RydWN0IGVhX3JlZmNvdW50X2VsICppbnNlcnRfcmVmY291bnRfZWwoZXh0Ml9yZWZjb3VudF90IHJlZmNvdW50LAorCQkJCQkJIGJsazY0X3QgYmxrLCBpbnQgcG9zKQoreworCXN0cnVjdCBlYV9yZWZjb3VudF9lbCAJKmVsOworCWVycmNvZGVfdAkJcmV0dmFsOworCWJsa190CQkJbmV3X3NpemUgPSAwOworCWludAkJCW51bTsKKworCWlmIChyZWZjb3VudC0+Y291bnQgPj0gcmVmY291bnQtPnNpemUpIHsKKwkJbmV3X3NpemUgPSByZWZjb3VudC0+c2l6ZSArIDEwMDsKKyNpZmRlZiBERUJVRworCQlwcmludGYoIlJlYWxsb2NhdGluZyByZWZjb3VudCAlZCBlbnRyaWVzLi4uXG4iLCBuZXdfc2l6ZSk7CisjZW5kaWYKKwkJcmV0dmFsID0gZXh0MmZzX3Jlc2l6ZV9tZW0oKHNpemVfdCkgcmVmY291bnQtPnNpemUgKgorCQkJCQkgICBzaXplb2Yoc3RydWN0IGVhX3JlZmNvdW50X2VsKSwKKwkJCQkJICAgKHNpemVfdCkgbmV3X3NpemUgKgorCQkJCQkgICBzaXplb2Yoc3RydWN0IGVhX3JlZmNvdW50X2VsKSwKKwkJCQkJICAgJnJlZmNvdW50LT5saXN0KTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiAwOworCQlyZWZjb3VudC0+c2l6ZSA9IG5ld19zaXplOworCX0KKwludW0gPSAoaW50KSByZWZjb3VudC0+Y291bnQgLSBwb3M7CisJaWYgKG51bSA8IDApCisJCXJldHVybiAwOwkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJaWYgKG51bSkgeworCQltZW1tb3ZlKCZyZWZjb3VudC0+bGlzdFtwb3MrMV0sICZyZWZjb3VudC0+bGlzdFtwb3NdLAorCQkJc2l6ZW9mKHN0cnVjdCBlYV9yZWZjb3VudF9lbCkgKiBudW0pOworCX0KKwlyZWZjb3VudC0+Y291bnQrKzsKKwllbCA9ICZyZWZjb3VudC0+bGlzdFtwb3NdOworCWVsLT5lYV9jb3VudCA9IDA7CisJZWwtPmVhX2JsayA9IGJsazsKKwlyZXR1cm4gZWw7Cit9CisKKworLyoKKyAqIGdldF9yZWZjb3VudF9lbCgpIC0tLSBnaXZlbiBhbiBibG9jayBudW1iZXIsIHRyeSB0byBmaW5kIHJlZmNvdW50CisgKiAJaW5mb3JtYXRpb24gaW4gdGhlIHNvcnRlZCBsaXN0LiAgSWYgdGhlIGNyZWF0ZSBmbGFnIGlzIHNldCwKKyAqIAlhbmQgd2UgY2FuJ3QgZmluZCBhbiBlbnRyeSwgY3JlYXRlIG9uZSBpbiB0aGUgc29ydGVkIGxpc3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZWFfcmVmY291bnRfZWwgKmdldF9yZWZjb3VudF9lbChleHQyX3JlZmNvdW50X3QgcmVmY291bnQsCisJCQkJCSAgICAgIGJsazY0X3QgYmxrLCBpbnQgY3JlYXRlKQoreworCWludAlsb3csIGhpZ2gsIG1pZDsKKworCWlmICghcmVmY291bnQgfHwgIXJlZmNvdW50LT5saXN0KQorCQlyZXR1cm4gMDsKK3JldHJ5OgorCWxvdyA9IDA7CisJaGlnaCA9IChpbnQpIHJlZmNvdW50LT5jb3VudC0xOworCWlmIChjcmVhdGUgJiYgKChyZWZjb3VudC0+Y291bnQgPT0gMCkgfHwKKwkJICAgICAgIChibGsgPiByZWZjb3VudC0+bGlzdFtoaWdoXS5lYV9ibGspKSkgeworCQlpZiAocmVmY291bnQtPmNvdW50ID49IHJlZmNvdW50LT5zaXplKQorCQkJcmVmY291bnRfY29sbGFwc2UocmVmY291bnQpOworCisJCXJldHVybiBpbnNlcnRfcmVmY291bnRfZWwocmVmY291bnQsIGJsaywKKwkJCQkJICAodW5zaWduZWQpIHJlZmNvdW50LT5jb3VudCk7CisJfQorCWlmIChyZWZjb3VudC0+Y291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAocmVmY291bnQtPmN1cnNvciA+PSByZWZjb3VudC0+Y291bnQpCisJCXJlZmNvdW50LT5jdXJzb3IgPSAwOworCWlmIChibGsgPT0gcmVmY291bnQtPmxpc3RbcmVmY291bnQtPmN1cnNvcl0uZWFfYmxrKQorCQlyZXR1cm4gJnJlZmNvdW50LT5saXN0W3JlZmNvdW50LT5jdXJzb3IrK107CisjaWZkZWYgREVCVUcKKwlwcmludGYoIk5vbi1jdXJzb3IgZ2V0X3JlZmNvdW50X2VsOiAldVxuIiwgYmxrKTsKKyNlbmRpZgorCXdoaWxlIChsb3cgPD0gaGlnaCkgeworCQltaWQgPSAobG93K2hpZ2gpLzI7CisJCWlmIChibGsgPT0gcmVmY291bnQtPmxpc3RbbWlkXS5lYV9ibGspIHsKKwkJCXJlZmNvdW50LT5jdXJzb3IgPSBtaWQrMTsKKwkJCXJldHVybiAmcmVmY291bnQtPmxpc3RbbWlkXTsKKwkJfQorCQlpZiAoYmxrIDwgcmVmY291bnQtPmxpc3RbbWlkXS5lYV9ibGspCisJCQloaWdoID0gbWlkLTE7CisJCWVsc2UKKwkJCWxvdyA9IG1pZCsxOworCX0KKwkvKgorCSAqIElmIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGVudHJ5LCBpdCBzaG91bGQgYmUgcmlnaHQgYXQKKwkgKiBsb3cgKHdoZXJlIGhpZ2ggd2lsbCBiZSBsZWZ0IGF0IGxvdy0xKS4KKwkgKi8KKwlpZiAoY3JlYXRlKSB7CisJCWlmIChyZWZjb3VudC0+Y291bnQgPj0gcmVmY291bnQtPnNpemUpIHsKKwkJCXJlZmNvdW50X2NvbGxhcHNlKHJlZmNvdW50KTsKKwkJCWlmIChyZWZjb3VudC0+Y291bnQgPCByZWZjb3VudC0+c2l6ZSkKKwkJCQlnb3RvIHJldHJ5OworCQl9CisJCXJldHVybiBpbnNlcnRfcmVmY291bnRfZWwocmVmY291bnQsIGJsaywgbG93KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBlYV9yZWZjb3VudF9mZXRjaChleHQyX3JlZmNvdW50X3QgcmVmY291bnQsIGJsazY0X3QgYmxrLAorCQkJCWludCAqcmV0KQoreworCXN0cnVjdCBlYV9yZWZjb3VudF9lbAkqZWw7CisKKwllbCA9IGdldF9yZWZjb3VudF9lbChyZWZjb3VudCwgYmxrLCAwKTsKKwlpZiAoIWVsKSB7CisJCSpyZXQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJKnJldCA9IGVsLT5lYV9jb3VudDsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGVhX3JlZmNvdW50X2luY3JlbWVudChleHQyX3JlZmNvdW50X3QgcmVmY291bnQsIGJsazY0X3QgYmxrLCBpbnQgKnJldCkKK3sKKwlzdHJ1Y3QgZWFfcmVmY291bnRfZWwJKmVsOworCisJZWwgPSBnZXRfcmVmY291bnRfZWwocmVmY291bnQsIGJsaywgMSk7CisJaWYgKCFlbCkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworCWVsLT5lYV9jb3VudCsrOworCisJaWYgKHJldCkKKwkJKnJldCA9IGVsLT5lYV9jb3VudDsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGVhX3JlZmNvdW50X2RlY3JlbWVudChleHQyX3JlZmNvdW50X3QgcmVmY291bnQsIGJsazY0X3QgYmxrLCBpbnQgKnJldCkKK3sKKwlzdHJ1Y3QgZWFfcmVmY291bnRfZWwJKmVsOworCisJZWwgPSBnZXRfcmVmY291bnRfZWwocmVmY291bnQsIGJsaywgMCk7CisJaWYgKCFlbCB8fCBlbC0+ZWFfY291bnQgPT0gMCkKKwkJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKworCWVsLT5lYV9jb3VudC0tOworCisJaWYgKHJldCkKKwkJKnJldCA9IGVsLT5lYV9jb3VudDsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGVhX3JlZmNvdW50X3N0b3JlKGV4dDJfcmVmY291bnRfdCByZWZjb3VudCwgYmxrNjRfdCBibGssIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgZWFfcmVmY291bnRfZWwJKmVsOworCisJLyoKKwkgKiBHZXQgdGhlIHJlZmNvdW50IGVsZW1lbnQKKwkgKi8KKwllbCA9IGdldF9yZWZjb3VudF9lbChyZWZjb3VudCwgYmxrLCBjb3VudCA/IDEgOiAwKTsKKwlpZiAoIWVsKQorCQlyZXR1cm4gY291bnQgPyBFWFQyX0VUX05PX01FTU9SWSA6IDA7CisJZWwtPmVhX2NvdW50ID0gY291bnQ7CisJcmV0dXJuIDA7Cit9CisKK2Jsa190IGV4dDJmc19nZXRfcmVmY291bnRfc2l6ZShleHQyX3JlZmNvdW50X3QgcmVmY291bnQpCit7CisJaWYgKCFyZWZjb3VudCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gcmVmY291bnQtPnNpemU7Cit9CisKK3ZvaWQgZWFfcmVmY291bnRfaW50cl9iZWdpbihleHQyX3JlZmNvdW50X3QgcmVmY291bnQpCit7CisJcmVmY291bnQtPmN1cnNvciA9IDA7Cit9CisKKworYmxrNjRfdCBlYV9yZWZjb3VudF9pbnRyX25leHQoZXh0Ml9yZWZjb3VudF90IHJlZmNvdW50LAorCQkJCWludCAqcmV0KQoreworCXN0cnVjdCBlYV9yZWZjb3VudF9lbAkqbGlzdDsKKworCXdoaWxlICgxKSB7CisJCWlmIChyZWZjb3VudC0+Y3Vyc29yID49IHJlZmNvdW50LT5jb3VudCkKKwkJCXJldHVybiAwOworCQlsaXN0ID0gcmVmY291bnQtPmxpc3Q7CisJCWlmIChsaXN0W3JlZmNvdW50LT5jdXJzb3JdLmVhX2NvdW50KSB7CisJCQlpZiAocmV0KQorCQkJCSpyZXQgPSBsaXN0W3JlZmNvdW50LT5jdXJzb3JdLmVhX2NvdW50OworCQkJcmV0dXJuIGxpc3RbcmVmY291bnQtPmN1cnNvcisrXS5lYV9ibGs7CisJCX0KKwkJcmVmY291bnQtPmN1cnNvcisrOworCX0KK30KKworCisjaWZkZWYgVEVTVF9QUk9HUkFNCisKK2VycmNvZGVfdCBlYV9yZWZjb3VudF92YWxpZGF0ZShleHQyX3JlZmNvdW50X3QgcmVmY291bnQsIEZJTEUgKm91dCkKK3sKKwllcnJjb2RlX3QJcmV0ID0gMDsKKwlpbnQJCWk7CisJY29uc3QgY2hhciAqYmFkID0gImJhZCByZWZjb3VudCI7CisKKwlpZiAocmVmY291bnQtPmNvdW50ID4gcmVmY291bnQtPnNpemUpIHsKKwkJZnByaW50ZihvdXQsICIlczogY291bnQgPiBzaXplXG4iLCBiYWQpOworCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCX0KKwlmb3IgKGk9MTsgaSA8IHJlZmNvdW50LT5jb3VudDsgaSsrKSB7CisJCWlmIChyZWZjb3VudC0+bGlzdFtpLTFdLmVhX2JsayA+PSByZWZjb3VudC0+bGlzdFtpXS5lYV9ibGspIHsKKwkJCWZwcmludGYob3V0LAorCQkJCSIlczogbGlzdFslZF0uYmxrPSVsbHUsIGxpc3RbJWRdLmJsaz0lbGx1XG4iLAorCQkJCWJhZCwgaS0xLCByZWZjb3VudC0+bGlzdFtpLTFdLmVhX2JsaywKKwkJCQlpLCByZWZjb3VudC0+bGlzdFtpXS5lYV9ibGspOworCQkJcmV0ID0gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgQkNPREVfRU5ECTAKKyNkZWZpbmUgQkNPREVfQ1JFQVRFCTEKKyNkZWZpbmUgQkNPREVfRlJFRQkyCisjZGVmaW5lIEJDT0RFX1NUT1JFCTMKKyNkZWZpbmUgQkNPREVfSU5DUgk0CisjZGVmaW5lIEJDT0RFX0RFQ1IJNQorI2RlZmluZSBCQ09ERV9GRVRDSAk2CisjZGVmaW5lIEJDT0RFX1ZBTElEQVRFCTcKKyNkZWZpbmUgQkNPREVfTElTVAk4CisjZGVmaW5lIEJDT0RFX0NPTExBUFNFIDkKKworaW50IGJjb2RlX3Byb2dyYW1bXSA9IHsKKwlCQ09ERV9DUkVBVEUsIDUsCisJQkNPREVfU1RPUkUsIDMsIDMsCisJQkNPREVfU1RPUkUsIDQsIDQsCisJQkNPREVfU1RPUkUsIDEsIDEsCisJQkNPREVfU1RPUkUsIDgsIDgsCisJQkNPREVfU1RPUkUsIDIsIDIsCisJQkNPREVfU1RPUkUsIDQsIDAsCisJQkNPREVfU1RPUkUsIDIsIDAsCisJQkNPREVfU1RPUkUsIDYsIDYsCisJQkNPREVfVkFMSURBVEUsCisJQkNPREVfU1RPUkUsIDQsIDQsCisJQkNPREVfU1RPUkUsIDIsIDIsCisJQkNPREVfRkVUQ0gsIDEsCisJQkNPREVfRkVUQ0gsIDIsCisJQkNPREVfSU5DUiwgMywKKwlCQ09ERV9JTkNSLCAzLAorCUJDT0RFX0RFQ1IsIDQsCisJQkNPREVfU1RPUkUsIDQsIDQsCisJQkNPREVfVkFMSURBVEUsCisJQkNPREVfU1RPUkUsIDIwLCAyMCwKKwlCQ09ERV9TVE9SRSwgNDAsIDQwLAorCUJDT0RFX1NUT1JFLCAzMCwgMzAsCisJQkNPREVfU1RPUkUsIDEwLCAxMCwKKwlCQ09ERV9ERUNSLCAzMCwKKwlCQ09ERV9GRVRDSCwgMzAsCisJQkNPREVfREVDUiwgMiwKKwlCQ09ERV9ERUNSLCAyLAorCUJDT0RFX0NPTExBUFNFLAorCUJDT0RFX0xJU1QsCisJQkNPREVfVkFMSURBVEUsCisJQkNPREVfRlJFRSwKKwlCQ09ERV9FTkQKK307CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQJaSA9IDA7CisJZXh0Ml9yZWZjb3VudF90IHJlZmNvdW50OworCWludAkJc2l6ZSwgYXJnOworCWJsazY0X3QJCWJsazsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJd2hpbGUgKDEpIHsKKwkJc3dpdGNoIChiY29kZV9wcm9ncmFtW2krK10pIHsKKwkJY2FzZSBCQ09ERV9FTkQ6CisJCQlleGl0KDApOworCQljYXNlIEJDT0RFX0NSRUFURToKKwkJCXNpemUgPSBiY29kZV9wcm9ncmFtW2krK107CisJCQlyZXR2YWwgPSBlYV9yZWZjb3VudF9jcmVhdGUoc2l6ZSwgJnJlZmNvdW50KTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCQljb21fZXJyKCJlYV9yZWZjb3VudF9jcmVhdGUiLCByZXR2YWwsCisJCQkJCSJ3aGlsZSBjcmVhdGluZyBzaXplICVkIiwgc2l6ZSk7CisJCQkJZXhpdCgxKTsKKwkJCX0gZWxzZQorCQkJCXByaW50ZigiQ3JlYXRpbmcgcmVmY291bnQgd2l0aCBzaXplICVkXG4iLAorCQkJCSAgICAgICBzaXplKTsKKwkJCWJyZWFrOworCQljYXNlIEJDT0RFX0ZSRUU6CisJCQllYV9yZWZjb3VudF9mcmVlKHJlZmNvdW50KTsKKwkJCXJlZmNvdW50ID0gMDsKKwkJCXByaW50ZigiRnJlZWluZyByZWZjb3VudFxuIik7CisJCQlicmVhazsKKwkJY2FzZSBCQ09ERV9TVE9SRToKKwkJCWJsayA9IChibGtfdCkgYmNvZGVfcHJvZ3JhbVtpKytdOworCQkJYXJnID0gYmNvZGVfcHJvZ3JhbVtpKytdOworCQkJcHJpbnRmKCJTdG9yaW5nIGJsayAlbGx1IHdpdGggdmFsdWUgJWRcbiIsIGJsaywgYXJnKTsKKwkJCXJldHZhbCA9IGVhX3JlZmNvdW50X3N0b3JlKHJlZmNvdW50LCBibGssIGFyZyk7CisJCQlpZiAocmV0dmFsKQorCQkJCWNvbV9lcnIoImVhX3JlZmNvdW50X3N0b3JlIiwgcmV0dmFsLAorCQkJCQkid2hpbGUgc3RvcmluZyBibGsgJWxsdSIsIGJsayk7CisJCQlicmVhazsKKwkJY2FzZSBCQ09ERV9GRVRDSDoKKwkJCWJsayA9IChibGtfdCkgYmNvZGVfcHJvZ3JhbVtpKytdOworCQkJcmV0dmFsID0gZWFfcmVmY291bnRfZmV0Y2gocmVmY291bnQsIGJsaywgJmFyZyk7CisJCQlpZiAocmV0dmFsKQorCQkJCWNvbV9lcnIoImVhX3JlZmNvdW50X2ZldGNoIiwgcmV0dmFsLAorCQkJCQkid2hpbGUgZmV0Y2hpbmcgYmxrICVsbHUiLCBibGspOworCQkJZWxzZQorCQkJCXByaW50ZigiYmNvZGVfZmV0Y2goJWxsdSkgcmV0dXJucyAlZFxuIiwKKwkJCQkgICAgICAgYmxrLCBhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgQkNPREVfSU5DUjoKKwkJCWJsayA9IChibGtfdCkgYmNvZGVfcHJvZ3JhbVtpKytdOworCQkJcmV0dmFsID0gZWFfcmVmY291bnRfaW5jcmVtZW50KHJlZmNvdW50LCBibGssICZhcmcpOworCQkJaWYgKHJldHZhbCkKKwkJCQljb21fZXJyKCJlYV9yZWZjb3VudF9pbmNyZW1lbnQiLCByZXR2YWwsCisJCQkJCSJ3aGlsZSBpbmNyZW1lbnRpbmcgYmxrICVsbHUiLCBibGspOworCQkJZWxzZQorCQkJCXByaW50ZigiYmNvZGVfaW5jcmVtZW50KCVsbHUpIHJldHVybnMgJWRcbiIsCisJCQkJICAgICAgIGJsaywgYXJnKTsKKwkJCWJyZWFrOworCQljYXNlIEJDT0RFX0RFQ1I6CisJCQlibGsgPSAoYmxrX3QpIGJjb2RlX3Byb2dyYW1baSsrXTsKKwkJCXJldHZhbCA9IGVhX3JlZmNvdW50X2RlY3JlbWVudChyZWZjb3VudCwgYmxrLCAmYXJnKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJY29tX2VycigiZWFfcmVmY291bnRfZGVjcmVtZW50IiwgcmV0dmFsLAorCQkJCQkid2hpbGUgZGVjcmVtZW50aW5nIGJsayAlbGx1IiwgYmxrKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoImJjb2RlX2RlY3JlbWVudCglbGx1KSByZXR1cm5zICVkXG4iLAorCQkJCSAgICAgICBibGssIGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSBCQ09ERV9WQUxJREFURToKKwkJCXJldHZhbCA9IGVhX3JlZmNvdW50X3ZhbGlkYXRlKHJlZmNvdW50LCBzdGRlcnIpOworCQkJaWYgKHJldHZhbCkKKwkJCQljb21fZXJyKCJlYV9yZWZjb3VudF92YWxpZGF0ZSIsIHJldHZhbCwKKwkJCQkJIndoaWxlIHZhbGlkYXRpbmciKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIlJlZmNvdW50IHZhbGlkYXRpb24gT0suXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIEJDT0RFX0xJU1Q6CisJCQllYV9yZWZjb3VudF9pbnRyX2JlZ2luKHJlZmNvdW50KTsKKwkJCXdoaWxlICgxKSB7CisJCQkJYmxrID0gZWFfcmVmY291bnRfaW50cl9uZXh0KHJlZmNvdW50LCAmYXJnKTsKKwkJCQlpZiAoIWJsaykKKwkJCQkJYnJlYWs7CisJCQkJcHJpbnRmKCJcdGJsaz0lbGx1LCBjb3VudD0lZFxuIiwgYmxrLCBhcmcpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQkNPREVfQ09MTEFQU0U6CisJCQlyZWZjb3VudF9jb2xsYXBzZShyZWZjb3VudCk7CisJCQlicmVhazsKKwkJfQorCisJfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNjay9laGFuZGxlci5jIGIvZTJmc2NrL2VoYW5kbGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRkZGY5YwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9laGFuZGxlci5jCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogZWhhbmRsZXIuYyAtLS0gaGFuZGxlIGJhZCBibG9jayBlcnJvcnMgd2hpY2ggY29tZSB1cCBkdXJpbmcgdGhlCisgKiAJY291cnNlIG9mIGFuIGUyZnNjayBzZXNzaW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisKKyNpbmNsdWRlICJlMmZzY2suaCIKKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyICpvcGVyYXRpb247CisKK3N0YXRpYyBlcnJjb2RlX3QgZTJmc2NrX2hhbmRsZV9yZWFkX2Vycm9yKGlvX2NoYW5uZWwgY2hhbm5lbCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJCQkgIGludCBjb3VudCwKKwkJCQkJICB2b2lkICpkYXRhLAorCQkJCQkgIHNpemVfdCBzaXplIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQkJICBpbnQgYWN0dWFsIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQkJICBlcnJjb2RlX3QgZXJyb3IpCit7CisJaW50CWk7CisJY2hhcgkqcDsKKwlleHQyX2ZpbHN5cyBmcyA9IChleHQyX2ZpbHN5cykgY2hhbm5lbC0+YXBwX2RhdGE7CisJZTJmc2NrX3QgY3R4OworCisJY3R4ID0gKGUyZnNja190KSBmcy0+cHJpdl9kYXRhOworCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfRVhJVElORykKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBJZiBtb3JlIHRoYW4gb25lIGJsb2NrIHdhcyByZWFkLCB0cnkgcmVhZGluZyBlYWNoIGJsb2NrCisJICogc2VwYXJhdGVseS4gIFdlIGNvdWxkIHVzZSB0aGUgYWN0dWFsIGJ5dGVzIHJlYWQgdG8gZmlndXJlCisJICogb3V0IHdoZXJlIHRvIHN0YXJ0LCBidXQgd2UgZG9uJ3QgYm90aGVyLgorCSAqLworCWlmIChjb3VudCA+IDEpIHsKKwkJcCA9IChjaGFyICopIGRhdGE7CisJCWZvciAoaT0wOyBpIDwgY291bnQ7IGkrKywgcCArPSBjaGFubmVsLT5ibG9ja19zaXplLCBibG9jaysrKSB7CisJCQllcnJvciA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChjaGFubmVsLCBibG9jaywKKwkJCQkJCSAgICAxLCBwKTsKKwkJCWlmIChlcnJvcikKKwkJCQlyZXR1cm4gZXJyb3I7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCWlmIChvcGVyYXRpb24pCisJCXByaW50ZihfKCJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIiksIGJsb2NrLAorCQkgICAgICAgZXJyb3JfbWVzc2FnZShlcnJvciksIG9wZXJhdGlvbik7CisJZWxzZQorCQlwcmludGYoXygiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKS4gICIpLCBibG9jaywKKwkJICAgICAgIGVycm9yX21lc3NhZ2UoZXJyb3IpKTsKKwlwcmVlbmhhbHQoY3R4KTsKKwlpZiAoYXNrKGN0eCwgXygiSWdub3JlIGVycm9yIiksIDEpKSB7CisJCWlmIChhc2soY3R4LCBfKCJGb3JjZSByZXdyaXRlIiksIDEpKQorCQkJaW9fY2hhbm5lbF93cml0ZV9ibGs2NChjaGFubmVsLCBibG9jaywgY291bnQsIGRhdGEpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgZTJmc2NrX2hhbmRsZV93cml0ZV9lcnJvcihpb19jaGFubmVsIGNoYW5uZWwsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJCQkgICAgaW50IGNvdW50LAorCQkJCQkgICAgY29uc3Qgdm9pZCAqZGF0YSwKKwkJCQkJICAgIHNpemVfdCBzaXplIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQkJICAgIGludCBhY3R1YWwgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCQkgICAgZXJyY29kZV90IGVycm9yKQoreworCWludAkJaTsKKwljb25zdCBjaGFyCSpwOworCWV4dDJfZmlsc3lzIGZzID0gKGV4dDJfZmlsc3lzKSBjaGFubmVsLT5hcHBfZGF0YTsKKwllMmZzY2tfdCBjdHg7CisKKwljdHggPSAoZTJmc2NrX3QpIGZzLT5wcml2X2RhdGE7CisJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19FWElUSU5HKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgbW9yZSB0aGFuIG9uZSBibG9jayB3YXMgd3JpdHRlbiwgdHJ5IHdyaXRpbmcgZWFjaCBibG9jaworCSAqIHNlcGFyYXRlbHkuICBXZSBjb3VsZCB1c2UgdGhlIGFjdHVhbCBieXRlcyByZWFkIHRvIGZpZ3VyZQorCSAqIG91dCB3aGVyZSB0byBzdGFydCwgYnV0IHdlIGRvbid0IGJvdGhlci4KKwkgKi8KKwlpZiAoY291bnQgPiAxKSB7CisJCXAgPSAoY29uc3QgY2hhciAqKSBkYXRhOworCQlmb3IgKGk9MDsgaSA8IGNvdW50OyBpKyssIHAgKz0gY2hhbm5lbC0+YmxvY2tfc2l6ZSwgYmxvY2srKykgeworCQkJZXJyb3IgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGNoYW5uZWwsIGJsb2NrLAorCQkJCQkJICAgICAxLCBwKTsKKwkJCWlmIChlcnJvcikKKwkJCQlyZXR1cm4gZXJyb3I7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG9wZXJhdGlvbikKKwkJcHJpbnRmKF8oIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiKSwgYmxvY2ssCisJCSAgICAgICBlcnJvcl9tZXNzYWdlKGVycm9yKSwgb3BlcmF0aW9uKTsKKwllbHNlCisJCXByaW50ZihfKCJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpLiAgIiksIGJsb2NrLAorCQkgICAgICAgZXJyb3JfbWVzc2FnZShlcnJvcikpOworCXByZWVuaGFsdChjdHgpOworCWlmIChhc2soY3R4LCBfKCJJZ25vcmUgZXJyb3IiKSwgMSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGVycm9yOworfQorCitjb25zdCBjaGFyICplaGFuZGxlcl9vcGVyYXRpb24oY29uc3QgY2hhciAqb3ApCit7CisJY29uc3QgY2hhciAqcmV0ID0gb3BlcmF0aW9uOworCisJb3BlcmF0aW9uID0gb3A7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBlaGFuZGxlcl9pbml0KGlvX2NoYW5uZWwgY2hhbm5lbCkKK3sKKwljaGFubmVsLT5yZWFkX2Vycm9yID0gZTJmc2NrX2hhbmRsZV9yZWFkX2Vycm9yOworCWNoYW5uZWwtPndyaXRlX2Vycm9yID0gZTJmc2NrX2hhbmRsZV93cml0ZV9lcnJvcjsKK30KZGlmZiAtLWdpdCBhL2UyZnNjay9lbXB0eWRpci5jIGIvZTJmc2NrL2VtcHR5ZGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiZmQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9lbXB0eWRpci5jCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogZW1wdHlkaXIuYyAtLS0gY2xlYXIgZW1wdHkgZGlyZWN0b3J5IGJsb2NrcworICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqCisgKiBUaGlzIGZpbGUgaGFzIHRoZSBuZWNlc3Nhcnkgcm91dGluZXMgdG8gc2VhcmNoIGZvciBlbXB0eSBkaXJlY3RvcnkKKyAqIGJsb2NrcyBhbmQgZ2V0IHJpZCBvZiB0aGVtLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJlMmZzY2suaCIKKyNpbmNsdWRlICJwcm9ibGVtLmgiCisKKy8qCisgKiBGb3IgZTJmc2NrLmgKKyAqLworc3RydWN0IGVtcHR5X2Rpcl9pbmZvX3N0cnVjdCB7CisJZXh0Ml9kYmxpc3QgZW1wdHlfZGJsaXN0OworCWV4dDJmc19ibG9ja19iaXRtYXAgZW1wdHlfZGlyX2Jsb2NrczsKKwlleHQyZnNfaW5vZGVfYml0bWFwIGRpcl9tYXA7CisJY2hhciAqYmxvY2tfYnVmOworCWV4dDJfaW5vX3QgaW5vOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCWJsazY0X3QJbG9nYmxrOworCWJsazY0X3QJZnJlZWRfYmxvY2tzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgZW1wdHlfZGlyX2luZm9fc3RydWN0ICplbXB0eV9kaXJfaW5mbzsKKworZXh0ZXJuIGVtcHR5X2Rpcl9pbmZvIGluaXRfZW1wdHlfZGlyKGUyZnNja190IGN0eCk7CitleHRlcm4gdm9pZCBmcmVlX2VtcHR5X2RpcmJsb2NrKGVtcHR5X2Rpcl9pbmZvIGVkaSk7CitleHRlcm4gdm9pZCBhZGRfZW1wdHlfZGlyYmxvY2soZW1wdHlfZGlyX2luZm8gZWRpLAorCQkJICAgICAgIHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqZGIpOworZXh0ZXJuIHZvaWQgcHJvY2Vzc19lbXB0eV9kaXJibG9jayhlMmZzY2tfdCBjdHgsIGVtcHR5X2Rpcl9pbmZvIGVkaSk7CisKKworZW1wdHlfZGlyX2luZm8gaW5pdF9lbXB0eV9kaXIoZTJmc2NrX3QgY3R4KQoreworCWVtcHR5X2Rpcl9pbmZvCWVkaTsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJZWRpID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZW1wdHlfZGlyX2luZm9fc3RydWN0KSk7CisJaWYgKCFlZGkpCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KGVkaSwgMCwgc2l6ZW9mKHN0cnVjdCBlbXB0eV9kaXJfaW5mb19zdHJ1Y3QpKTsKKworCXJldHZhbCA9IGV4dDJmc19pbml0X2RibGlzdChjdHgtPmZzLCAmZWRpLT5lbXB0eV9kYmxpc3QpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCisJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcChjdHgtPmZzLCBfKCJlbXB0eSBkaXJibG9ja3MiKSwKKwkJCQkJICAgICAgJmVkaS0+ZW1wdHlfZGlyX2Jsb2Nrcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfaW5vZGVfYml0bWFwKGN0eC0+ZnMsIF8oImVtcHR5IGRpciBtYXAiKSwKKwkJCQkJICAgICAgJmVkaS0+ZGlyX21hcCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlyZXR1cm4gKGVkaSk7CisKK2Vycm91dDoKKwlmcmVlX2VtcHR5X2RpcmJsb2NrKGVkaSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgZnJlZV9lbXB0eV9kaXJibG9jayhlbXB0eV9kaXJfaW5mbyBlZGkpCit7CisJaWYgKCFlZGkpCisJCXJldHVybjsKKwlpZiAoZWRpLT5lbXB0eV9kYmxpc3QpCisJCWV4dDJmc19mcmVlX2RibGlzdChlZGktPmVtcHR5X2RibGlzdCk7CisJaWYgKGVkaS0+ZW1wdHlfZGlyX2Jsb2NrcykKKwkJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKGVkaS0+ZW1wdHlfZGlyX2Jsb2Nrcyk7CisJaWYgKGVkaS0+ZGlyX21hcCkKKwkJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGVkaS0+ZGlyX21hcCk7CisKKwltZW1zZXQoZWRpLCAwLCBzaXplb2Yoc3RydWN0IGVtcHR5X2Rpcl9pbmZvX3N0cnVjdCkpOworCWZyZWUoZWRpKTsKK30KKwordm9pZCBhZGRfZW1wdHlfZGlyYmxvY2soZW1wdHlfZGlyX2luZm8gZWRpLAorCQkJc3RydWN0IGV4dDJfZGJfZW50cnkyICpkYikKK3sKKwlpZiAoIWVkaSB8fCAhZGIpCisJCXJldHVybjsKKworCWlmIChkYi0+aW5vID09IDExKQorCQlyZXR1cm47CQkvKiBJbm9kZSBudW1iZXIgMTEgaXMgdXN1YWxseSBsb3N0K2ZvdW5kICovCisKKwlwcmludGYoXygiRW1wdHkgZGlyZWN0b3J5IGJsb2NrICV1ICgjJWQpIGluIGlub2RlICV1XG4iKSwKKwkgICAgICAgZGItPmJsaywgZGItPmJsb2NrY250LCBkYi0+aW5vKTsKKworCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoZWRpLT5lbXB0eV9kaXJfYmxvY2tzLCBkYi0+YmxrKTsKKwlpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwKGVkaS0+ZGlyX21hcCwgZGItPmlubykpCisJCXJldHVybjsKKwlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAoZWRpLT5kaXJfbWFwLCBkYi0+aW5vKTsKKworCWV4dDJmc19hZGRfZGlyX2Jsb2NrMihlZGktPmVtcHR5X2RibGlzdCwgZGItPmlubywKKwkJCSAgICAgIGRiLT5ibGssIGRiLT5ibG9ja2NudCk7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBmaXhfZGlyZWN0b3J5LgorICoKKyAqIFhYWCBuZWVkIHRvIGZpbmlzaCB0aGlzLiAgR2VuZXJhbCBhcHByb2FjaCBpcyB0byB1c2UgYm1hcCB0bworICogaXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgbG9naWNhbCBibG9ja3MgdXNpbmcgdGhlIGJtYXAgZnVuY3Rpb24sIGFuZAorICogY29weSB0aGUgYmxvY2sgcmVmZXJlbmNlIGFzIG5lY2Vzc2FyeS4gIEJpZyBxdWVzdGlvbiAtLS0gd2hhdCBkbworICogYWJvdXQgZXJyb3IgcmVjb3Zlcnk/CisgKgorICogQWxzbyBxdWVzdGlvbiAtLS0gaG93IHRvIGZyZWUgdGhlIGluZGlyZWN0IGJsb2Nrcy4KKyAqLworaW50IGVtcHR5X3Bhc3MxKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90ICpibG9ja19uciwgZTJfYmxrY250X3QgYmxvY2tjbnQsCisJCWJsazY0X3QgcmVmX2Jsb2NrLCBpbnQgcmVmX29mZnNldCwgdm9pZCAqcHJpdl9kYXRhKQoreworCWVtcHR5X2Rpcl9pbmZvIGVkaSA9IChlbXB0eV9kaXJfaW5mbykgcHJpdl9kYXRhOworCWJsazY0X3QJYmxvY2ssIG5ld19ibG9jazsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJaWYgKGJsb2NrY250IDwgMCkKKwkJcmV0dXJuIDA7CisJYmxvY2sgPSAqYmxvY2tfbnI7CisJZG8geworCQlyZXR2YWwgPSBleHQyZnNfYm1hcDIoZnMsIGVkaS0+aW5vLCAmZWRpLT5pbm9kZSwKKwkJCQkgICAgICBlZGktPmJsb2NrX2J1ZiwgMCwgZWRpLT5sb2dibGssIDAsCisJCQkJICAgICAgJm5ld19ibG9jayk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gRElSRU5UX0FCT1JUOyAgIC8qIFhYWCB3aGF0IHRvIGRvPyAqLworCQlpZiAobmV3X2Jsb2NrID09IDApCisJCQlicmVhazsKKwkJZWRpLT5sb2dibGsrKzsKKwl9IHdoaWxlIChleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGVkaS0+ZW1wdHlfZGlyX2Jsb2NrcywgbmV3X2Jsb2NrKSk7CisKKwlpZiAobmV3X2Jsb2NrID09IGJsb2NrKQorCQlyZXR1cm4gMDsKKwlpZiAobmV3X2Jsb2NrID09IDApCisJCWVkaS0+ZnJlZWRfYmxvY2tzKys7CisJKmJsb2NrX25yID0gbmV3X2Jsb2NrOworCXJldHVybiBCTE9DS19DSEFOR0VEOworfQorCitzdGF0aWMgaW50IGZpeF9kaXJlY3RvcnkoZXh0Ml9maWxzeXMgZnMsCisJCQkgc3RydWN0IGV4dDJfZGJfZW50cnkyICpkYiwKKwkJCSB2b2lkICpwcml2X2RhdGEpCit7CisJZXJyY29kZV90CXJldHZhbDsKKworCWVtcHR5X2Rpcl9pbmZvIGVkaSA9IChlbXB0eV9kaXJfaW5mbykgcHJpdl9kYXRhOworCisJZWRpLT5sb2dibGsgPSAwOworCWVkaS0+ZnJlZWRfYmxvY2tzID0gMDsKKwllZGktPmlubyA9IGRiLT5pbm87CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgZGItPmlubywgJmVkaS0+aW5vZGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiAwOworCisJcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBkYi0+aW5vLCAwLCBlZGktPmJsb2NrX2J1ZiwKKwkJCQkgICAgICAgZW1wdHlfcGFzczEsIGVkaSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZWRpLT5mcmVlZF9ibG9ja3MpIHsKKwkJZWRpLT5pbm9kZS5pX3NpemUgLT0gZWRpLT5mcmVlZF9ibG9ja3MgKiBmcy0+YmxvY2tzaXplOworCQlleHQyZnNfaWJsa19hZGRfYmxvY2tzKGZzLCAmZWRpLT5pbm9kZSwgZWRpLT5mcmVlZF9ibG9ja3MpOworCQlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoZnMsIGRiLT5pbm8sICZlZGktPmlub2RlKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBwcm9jZXNzX2VtcHR5X2RpcmJsb2NrKGUyZnNja190IGN0eCwgZW1wdHlfZGlyX2luZm8gZWRpKQoreworCWlmICghZWRpKQorCQlyZXR1cm47CisKKwllZGktPmJsb2NrX2J1ZiA9IG1hbGxvYyhjdHgtPmZzLT5ibG9ja3NpemUgKiAzKTsKKworCWlmIChlZGktPmJsb2NrX2J1ZikgeworCQkodm9pZCkgZXh0MmZzX2RibGlzdF9pdGVyYXRlMihlZGktPmVtcHR5X2RibGlzdCwKKwkJCQkJICAgICAgZml4X2RpcmVjdG9yeSwgJmVkaSk7CisJfQorCWZyZWUoZWRpLT5ibG9ja19idWYpOworCWZyZWVfZW1wdHlfZGlyYmxvY2soZWRpKTsKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc2NrL2V4dGVuZC5jIGIvZTJmc2NrL2V4dGVuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYjYyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svZXh0ZW5kLmMKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIGV4dGVuZC5jIC0tLSBleHRlbmQgYSBmaWxlIHNvIHRoYXQgaXQgaGFzIGF0IGxlYXN0IGEgc3BlY2lmaWVkCisgKiAJbnVtYmVyIG9mIGJsb2Nrcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUgVGhlb2RvcmUgVHMnby4KKyAqCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSAiLi4vbWlzYy9ubHMtZW5hYmxlLmgiCisKK3N0YXRpYyB2b2lkIHVzYWdlKGNoYXIgKnByb2duYW1lKQoreworCWZwcmludGYoc3RkZXJyLCBfKCIlczogJXMgZmlsZW5hbWUgbmJsb2NrcyBibG9ja3NpemVcbiIpLAorCQlwcm9nbmFtZSwgcHJvZ25hbWUpOworCWV4aXQoMSk7Cit9CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNoYXIJKmZpbGVuYW1lOworCWludAluYmxvY2tzLCBibG9ja3NpemU7CisJaW50CWZkOworCWNoYXIJKmJsb2NrOworCWludAlyZXQ7CisKKwlpZiAoYXJnYyAhPSA0KQorCQl1c2FnZShhcmd2WzBdKTsKKworCWZpbGVuYW1lID0gYXJndlsxXTsKKwluYmxvY2tzID0gc3RydG91bChhcmd2WzJdLCAwLCAwKSAtIDE7CisJYmxvY2tzaXplID0gc3RydG91bChhcmd2WzNdLCAwLCAwKTsKKworCWlmIChuYmxvY2tzIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiSWxsZWdhbCBudW1iZXIgb2YgYmxvY2tzIVxuIikpOworCQlleGl0KDEpOworCX0KKworCWJsb2NrID0gbWFsbG9jKGJsb2Nrc2l6ZSk7CisJaWYgKGJsb2NrID09IDApIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIkNvdWxkbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciAoc2l6ZT0lZClcbiIpLAorCQkJYmxvY2tzaXplKTsKKwkJZXhpdCgxKTsKKwl9CisJbWVtc2V0KGJsb2NrLCAwLCBibG9ja3NpemUpOworCisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JEV1IpOworCWlmIChmZCA8IDApIHsKKwkJcGVycm9yKGZpbGVuYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisJcmV0ID0gbHNlZWsoZmQsIG5ibG9ja3MqYmxvY2tzaXplLCBTRUVLX1NFVCk7CisJaWYgKHJldCA8IDApIHsKKwkJcGVycm9yKCJsc2VlayIpOworCQlleGl0KDEpOworCX0KKwlyZXQgPSByZWFkKGZkLCBibG9jaywgYmxvY2tzaXplKTsKKwlpZiAocmV0IDwgMCkgeworCQlwZXJyb3IoInJlYWQiKTsKKwkJZXhpdCgxKTsKKwl9CisJcmV0ID0gbHNlZWsoZmQsIG5ibG9ja3MqYmxvY2tzaXplLCBTRUVLX1NFVCk7CisJaWYgKHJldCA8IDApIHsKKwkJcGVycm9yKCJsc2VlayAjMiIpOworCQlleGl0KDEpOworCX0KKwlyZXQgPSB3cml0ZShmZCwgYmxvY2ssIGJsb2Nrc2l6ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcGVycm9yKCJyZWFkIik7CisJCWV4aXQoMSk7CisJfQorCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9lMmZzY2svZmx1c2hiLmMgYi9lMmZzY2svZmx1c2hiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEwMGZjNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9mbHVzaGIuYwpAQCAtMCwwICsxLDY3IEBACisvKgorICogZmx1c2hiLmMgLS0tIFRoaXMgcm91dGluZSBmbHVzaGVzIHRoZSBkaXNrIGJ1ZmZlcnMgZm9yIGEgZGlzaworICoKKyAqIENvcHlyaWdodCAxOTk3LCAyMDAwLCBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqIFdBUk5JTkc6IHVzZSBvZiBmbHVzaGIgb24gc29tZSBvbGRlciAyLjIga2VybmVscyBvbiBhIGhlYXZpbHkgbG9hZGVkCisgKiBzeXN0ZW0gd2lsbCBjb3JydXB0IGZpbGVzeXN0ZW1zLiAgVGhpcyBwcm9ncmFtIGlzIG5vdCByZWFsbHkgdXNlZnVsCisgKiBiZXlvbmQgZm9yIGJlbmNobWFya2luZyBzY3JpcHRzLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNpbmNsdWRlICIuLi9taXNjL25scy1lbmFibGUuaCIKKworLyogRm9yIExpbnV4LCBkZWZpbmUgQkxLRkxTQlVGIGlmIG5lY2Vzc2FyeSAqLworI2lmICghZGVmaW5lZChCTEtGTFNCVUYpICYmIGRlZmluZWQoX19saW51eF9fKSkKKyNkZWZpbmUgQkxLRkxTQlVGCV9JTygweDEyLDk3KQkvKiBmbHVzaCBidWZmZXIgY2FjaGUgKi8KKyNlbmRpZgorCitjb25zdCBjaGFyICpwcm9nbmFtZTsKKworc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgXygiVXNhZ2U6ICVzIGRpc2tcbiIpLCBwcm9nbmFtZSk7CisJZXhpdCgxKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludAlmZDsKKworCXByb2duYW1lID0gYXJndlswXTsKKwlpZiAoYXJnYyAhPSAyKQorCQl1c2FnZSgpOworCisJZmQgPSBvcGVuKGFyZ3ZbMV0sIE9fUkRPTkxZLCAwKTsKKwlpZiAoZmQgPCAwKSB7CisJCXBlcnJvcigib3BlbiIpOworCQlleGl0KDEpOworCX0KKwkvKgorCSAqIE5vdGU6IHRvIHJlcmVhZCB0aGUgcGFydGl0aW9uIHRhYmxlLCB1c2UgdGhlIGlvY3RsCisJICogQkxLUlJQQVJUIGluc3RlYWQgb2YgQkxLRlNMQlVGLgorCSAqLworI2lmZGVmIEJMS0ZMU0JVRgorCWlmIChpb2N0bChmZCwgQkxLRkxTQlVGLCAwKSA8IDApIHsKKwkJcGVycm9yKCJpb2N0bCBCTEtGTFNCVUYiKTsKKwkJZXhpdCgxKTsKKwl9CisJcmV0dXJuIDA7CisjZWxzZQorCWZwcmludGYoc3RkZXJyLAorCQlfKCJCTEtGTFNCVUYgaW9jdGwgbm90IHN1cHBvcnRlZCEgIENhbid0IGZsdXNoIGJ1ZmZlcnMuXG4iKSk7CisJcmV0dXJuIDE7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2UyZnNjay9nZW5fY3JjMzJ0YWJsZS5jIGIvZTJmc2NrL2dlbl9jcmMzMnRhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxYWE4ZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9nZW5fY3JjMzJ0YWJsZS5jCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogZ2VuX2NyYzMydGFibGUuYyAtLS0gR2VuZXJhdGUgQ1JDMzIgdGFibGVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiY3JjMzJkZWZzLmgiCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworI2RlZmluZSBFTlRSSUVTX1BFUl9MSU5FIDQKKworI2RlZmluZSBMRV9UQUJMRV9TSVpFICgxIDw8IENSQ19MRV9CSVRTKQorI2RlZmluZSBCRV9UQUJMRV9TSVpFICgxIDw8IENSQ19CRV9CSVRTKQorCitzdGF0aWMgdWludDMyX3QgY3JjMzJ0YWJsZV9sZVtMRV9UQUJMRV9TSVpFXTsKK3N0YXRpYyB1aW50MzJfdCBjcmMzMnRhYmxlX2JlW0JFX1RBQkxFX1NJWkVdOworCisvKioKKyAqIGNyYzMyaW5pdF9sZSgpIC0gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgTEUgdGFibGUgZGF0YQorICoKKyAqIGNyYyBpcyB0aGUgY3JjIG9mIHRoZSBieXRlIGk7IG90aGVyIGVudHJpZXMgYXJlIGZpbGxlZCBpbiBiYXNlZCBvbiB0aGUKKyAqIGZhY3QgdGhhdCBjcmN0YWJsZVtpXmpdID0gY3JjdGFibGVbaV0gXiBjcmN0YWJsZVtqXS4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIGNyYzMyaW5pdF9sZSh2b2lkKQoreworCXVuc2lnbmVkIGksIGo7CisJdWludDMyX3QgY3JjID0gMTsKKworCWNyYzMydGFibGVfbGVbMF0gPSAwOworCisJZm9yIChpID0gMSA8PCAoQ1JDX0xFX0JJVFMgLSAxKTsgaTsgaSA+Pj0gMSkgeworCQljcmMgPSAoY3JjID4+IDEpIF4gKChjcmMgJiAxKSA/IENSQ1BPTFlfTEUgOiAwKTsKKwkJZm9yIChqID0gMDsgaiA8IExFX1RBQkxFX1NJWkU7IGogKz0gMiAqIGkpCisJCQljcmMzMnRhYmxlX2xlW2kgKyBqXSA9IGNyYyBeIGNyYzMydGFibGVfbGVbal07CisJfQorfQorCisvKioKKyAqIGNyYzMyaW5pdF9iZSgpIC0gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgQkUgdGFibGUgZGF0YQorICovCitzdGF0aWMgdm9pZCBjcmMzMmluaXRfYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBpLCBqOworCXVpbnQzMl90IGNyYyA9IDB4ODAwMDAwMDA7CisKKwljcmMzMnRhYmxlX2JlWzBdID0gMDsKKworCWZvciAoaSA9IDE7IGkgPCBCRV9UQUJMRV9TSVpFOyBpIDw8PSAxKSB7CisJCWNyYyA9IChjcmMgPDwgMSkgXiAoKGNyYyAmIDB4ODAwMDAwMDApID8gQ1JDUE9MWV9CRSA6IDApOworCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQkJY3JjMzJ0YWJsZV9iZVtpICsgal0gPSBjcmMgXiBjcmMzMnRhYmxlX2JlW2pdOworCX0KK30KKworc3RhdGljIHZvaWQgb3V0cHV0X3RhYmxlKHVpbnQzMl90IHRhYmxlW10sIGludCBsZW4sIGNvbnN0IGNoYXIgKnRyYW5zKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykgeworCQlpZiAoaSAlIEVOVFJJRVNfUEVSX0xJTkUgPT0gMCkKKwkJCXByaW50ZigiXG4iKTsKKwkJcHJpbnRmKCIlcygweCU4Ljh4TCksICIsIHRyYW5zLCB0YWJsZVtpXSk7CisJfQorCXByaW50ZigiJXMoMHglOC44eEwpXG4iLCB0cmFucywgdGFibGVbbGVuIC0gMV0pOworfQorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgQVRUUih4KSBfX2F0dHJpYnV0ZV9fKHgpCisjZWxzZQorI2RlZmluZSBBVFRSKHgpCisjZW5kaWYKKworaW50IG1haW4oaW50IGFyZ2MgQVRUUigodW51c2VkKSksIGNoYXIqKiBhcmd2IEFUVFIoKHVudXNlZCkpKQoreworCXByaW50ZigiLyogdGhpcyBmaWxlIGlzIGdlbmVyYXRlZCAtIGRvIG5vdCBlZGl0ICovXG5cbiIpOworCisJcHJpbnRmKCIjaWZkZWYgVU5JVFRFU1RcbiIpOworCWlmIChDUkNfTEVfQklUUyA+IDEpIHsKKwkJY3JjMzJpbml0X2xlKCk7CisJCXByaW50Zigic3RhdGljIGNvbnN0IF9fdTMyIGNyYzMydGFibGVfbGVbXSA9IHsiKTsKKwkJb3V0cHV0X3RhYmxlKGNyYzMydGFibGVfbGUsIExFX1RBQkxFX1NJWkUsICJ0b2xlIik7CisJCXByaW50ZigifTtcbiIpOworCX0KKwlwcmludGYoIiNlbmRpZiAvKiBVTklUVEVTVCAqL1xuIik7CisKKwlpZiAoQ1JDX0JFX0JJVFMgPiAxKSB7CisJCWNyYzMyaW5pdF9iZSgpOworCQlwcmludGYoInN0YXRpYyBjb25zdCBfX3UzMiBjcmMzMnRhYmxlX2JlW10gPSB7Iik7CisJCW91dHB1dF90YWJsZShjcmMzMnRhYmxlX2JlLCBCRV9UQUJMRV9TSVpFLCAidG9iZSIpOworCQlwcmludGYoIn07XG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNjay9pc2Nhbi5jIGIvZTJmc2NrL2lzY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjYWQxMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9pc2Nhbi5jCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogVGVzdCB0byBzZWUgaG93IHF1aWNrbHkgd2UgY2FuIHNjYW4gdGhlIGlub2RlIHRhYmxlIChub3QgZG9pbmcKKyAqIGFueXRoaW5nIGVsc2UpCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpZmRlZiBIQVZFX01BTExPQ19ICisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyNpbmNsdWRlICJlMmZzY2suaCIKKyNpbmNsdWRlICIuLi92ZXJzaW9uLmgiCisKK2V4dGVybiBpbnQgaXNhdHR5KGludCk7CisKK2NvbnN0IGNoYXIgKiBwcm9ncmFtX25hbWUgPSAiaXNjYW4iOworY29uc3QgY2hhciAqIGRldmljZV9uYW1lID0gTlVMTDsKKworaW50IHlmbGFnID0gMDsKK2ludCBuZmxhZyA9IDA7CitpbnQgcHJlZW4gPSAwOworaW50IGlub2RlX2J1ZmZlcl9ibG9ja3MgPSAwOworaW50IGludmFsaWRfYml0bWFwcyA9IDA7CisKK3N0cnVjdCByZXNvdXJjZV90cmFjawlnbG9iYWxfcnRyYWNrOworCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLAorCQlfKCJVc2FnZTogJXMgWy1GXSBbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gZGV2aWNlXG4iKSwKKwkJcHJvZ3JhbV9uYW1lKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgdm9pZCBQUlMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQJCWZsdXNoID0gMDsKKwlpbnQJCWM7CisjaWZkZWYgTVRSQUNFCisJZXh0ZXJuIHZvaWQJKm1hbGx3YXRjaDsKKyNlbmRpZgorCWVycmNvZGVfdAlyZXR2YWw7CisKKwlzZXRidWYoc3Rkb3V0LCBOVUxMKTsKKwlzZXRidWYoc3RkZXJyLCBOVUxMKTsKKwlpbml0aWFsaXplX2V4dDJfZXJyb3JfdGFibGUoKTsKKworCWlmIChhcmdjICYmICphcmd2KQorCQlwcm9ncmFtX25hbWUgPSAqYXJndjsKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJGSSIpKSAhPSBFT0YpCisJCXN3aXRjaCAoYykgeworCQljYXNlICdGJzoKKwkJCWZsdXNoID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdJJzoKKwkJCWlub2RlX2J1ZmZlcl9ibG9ja3MgPSBhdG9pKG9wdGFyZyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlICgpOworCQl9CisJZGV2aWNlX25hbWUgPSBhcmd2W29wdGluZF07CisJaWYgKGZsdXNoKSB7CisJCWludAlmZCA9IG9wZW4oZGV2aWNlX25hbWUsIE9fUkRPTkxZLCAwKTsKKworCQlpZiAoZmQgPCAwKSB7CisJCQljb21fZXJyKCJvcGVuIiwgZXJybm8sCisJCQkgICAgXygid2hpbGUgb3BlbmluZyAlcyBmb3IgZmx1c2hpbmciKSwgZGV2aWNlX25hbWUpOworCQkJZXhpdChGU0NLX0VSUk9SKTsKKwkJfQorCQlpZiAoKHJldHZhbCA9IGV4dDJmc19zeW5jX2RldmljZShmZCwgMSkpKSB7CisJCQljb21fZXJyKCJleHQyZnNfc3luY19kZXZpY2UiLCByZXR2YWwsCisJCQkJXygid2hpbGUgdHJ5aW5nIHRvIGZsdXNoICVzIiksIGRldmljZV9uYW1lKTsKKwkJCWV4aXQoRlNDS19FUlJPUik7CisJCX0KKwkJY2xvc2UoZmQpOworCX0KK30KKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisJaW50CQlleGl0X3ZhbHVlID0gRlNDS19PSzsKKwlleHQyX2ZpbHN5cwlmczsKKwlleHQyX2lub190CWlubzsKKwlfX3UzMgludW1faW5vZGVzID0gMDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKwlleHQyX2lub2RlX3NjYW4Jc2NhbjsKKworCWluaXRfcmVzb3VyY2VfdHJhY2soJmdsb2JhbF9ydHJhY2spOworCisJUFJTKGFyZ2MsIGFyZ3YpOworCisJcmV0dmFsID0gZXh0MmZzX29wZW4oZGV2aWNlX25hbWUsIDAsCisJCQkgICAgIDAsIDAsIHVuaXhfaW9fbWFuYWdlciwgJmZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsIF8oIndoaWxlIHRyeWluZyB0byBvcGVuICclcyciKSwKKwkJCWRldmljZV9uYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisKKwllaGFuZGxlcl9pbml0KGZzLT5pbyk7CisKKwlyZXR2YWwgPSBleHQyZnNfb3Blbl9pbm9kZV9zY2FuKGZzLCBpbm9kZV9idWZmZXJfYmxvY2tzLCAmc2Nhbik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCBfKCJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iKSk7CisJCWV4aXQoMSk7CisJfQorCisJd2hpbGUgKDEpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9uZXh0X2lub2RlKHNjYW4sICZpbm8sICZpbm9kZSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQkJXygid2hpbGUgZ2V0dGluZyBuZXh0IGlub2RlIikpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAoaW5vID09IDApCisJCQlicmVhazsKKwkJbnVtX2lub2RlcysrOworCX0KKworCXByaW50X3Jlc291cmNlX3RyYWNrKE5VTEwsICZnbG9iYWxfcnRyYWNrKTsKKwlwcmludGYoXygiJXUgaW5vZGVzIHNjYW5uZWQuXG4iKSwgbnVtX2lub2Rlcyk7CisKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvZTJmc2NrL2pmc191c2VyLmggYi9lMmZzY2svamZzX3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmMxYmNkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL2pmc191c2VyLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb21wYXRpYmlsaXR5IGhlYWRlciBmaWxlIGZvciBlMmZzY2sgd2hpY2ggc2hvdWxkIGJlIGluY2x1ZGVkCisgKiBpbnN0ZWFkIG9mIGxpbnV4L2pmcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIFN0ZXBoZW4gQy4gVHdlZWRpZQorICoKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgb3IgYXQgeW91ciBkaXNjcmV0aW9uCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKgorICogUHVsbCBpbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZTJmc2NrIGNvbnRleHQgc3RydWN0dXJlCisgKi8KKyNpbmNsdWRlICJlMmZzY2suaCIKKworc3RydWN0IGJ1ZmZlcl9oZWFkIHsKKwllMmZzY2tfdAliX2N0eDsKKwlpb19jaGFubmVsIAliX2lvOworCWludAkgCWJfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYl9ibG9ja25yOworCWludAkgCWJfZGlydHk7CisJaW50CSAJYl91cHRvZGF0ZTsKKwlpbnQJIAliX2VycjsKKwljaGFyCQliX2RhdGFbMTAyNF07Cit9OworCitzdHJ1Y3QgaW5vZGUgeworCWUyZnNja190CWlfY3R4OworCWV4dDJfaW5vX3QJaV9pbm87CisJc3RydWN0IGV4dDJfaW5vZGUgaV9leHQyOworfTsKKworc3RydWN0IGtkZXZfcyB7CisJZTJmc2NrX3QJa19jdHg7CisJaW50CQlrX2RldjsKK307CisKKyNkZWZpbmUgS19ERVZfRlMJMQorI2RlZmluZSBLX0RFVl9KT1VSTkFMCTIKKwordHlwZWRlZiBzdHJ1Y3Qga2Rldl9zICprZGV2X3Q7CisKKyNkZWZpbmUgbG9ja19idWZmZXIoYmgpIGRvIHt9IHdoaWxlKDApCisjZGVmaW5lIHVubG9ja19idWZmZXIoYmgpIGRvIHt9IHdoaWxlKDApCisjZGVmaW5lIGJ1ZmZlcl9yZXEoYmgpIDEKKyNkZWZpbmUgZG9fcmVhZGFoZWFkKGpvdXJuYWwsIHN0YXJ0KSBkbyB7fSB3aGlsZSgwKQorCitleHRlcm4gZTJmc2NrX3QgZTJmc2NrX2dsb2JhbF9jdHg7ICAvKiBUcnkgeW91ciB2ZXJ5IGJlc3Qgbm90IHRvIHVzZSB0aGlzISAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50CW9iamVjdF9sZW5ndGg7Cit9IGxrbWVtX2NhY2hlX3Q7CisKKyNkZWZpbmUga21lbV9jYWNoZV9hbGxvYyhjYWNoZSxmbGFncykgbWFsbG9jKChjYWNoZSktPm9iamVjdF9sZW5ndGgpCisjZGVmaW5lIGttZW1fY2FjaGVfZnJlZShjYWNoZSxvYmopIGZyZWUob2JqKQorI2RlZmluZSBrbWVtX2NhY2hlX2NyZWF0ZShuYW1lLGxlbixhLGIsYyxkKSBkb19jYWNoZV9jcmVhdGUobGVuKQorI2RlZmluZSBrbWVtX2NhY2hlX2Rlc3Ryb3koY2FjaGUpIGRvX2NhY2hlX2Rlc3Ryb3koY2FjaGUpCisjZGVmaW5lIGttYWxsb2MobGVuLGZsYWdzKSBtYWxsb2MobGVuKQorI2RlZmluZSBrZnJlZShwKSBmcmVlKHApCisKKyNkZWZpbmUgY29uZF9yZXNjaGVkKCkJZG8geyB9IHdoaWxlICgwKQorCit0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JlMzI7Cit0eXBlZGVmIF9fdTY0IF9fYmU2NDsKKworI2RlZmluZSBfX2luaXQKKworLyoKKyAqIE5vdyBwdWxsIGluIHRoZSByZWFsIGxpbnV4L2pmcy5oIGRlZmluaXRpb25zLgorICovCisjaW5jbHVkZSA8ZXh0MmZzL2tlcm5lbC1qYmQuaD4KKworLyoKKyAqIFdlIHVzZSB0aGUgc3RhbmRhcmQgbGliZXh0MmZzIHBvcnRhYmlsaXR5IHRyaWNrcyBmb3IgaW5saW5lCisgKiBmdW5jdGlvbnMuCisgKi8KKyNpZmRlZiBOT19JTkxJTkVfRlVOQ1MKK2V4dGVybiBsa21lbV9jYWNoZV90ICogZG9fY2FjaGVfY3JlYXRlKGludCBsZW4pOworZXh0ZXJuIHZvaWQgZG9fY2FjaGVfZGVzdHJveShsa21lbV9jYWNoZV90ICpjYWNoZSk7CitleHRlcm4gc2l6ZV90IGpvdXJuYWxfdGFnX2J5dGVzKGpvdXJuYWxfdCAqam91cm5hbCk7CisjZW5kaWYKKworI2lmIChkZWZpbmVkKEUyRlNDS19JTkNMVURFX0lOTElORV9GVU5DUykgfHwgIWRlZmluZWQoTk9fSU5MSU5FX0ZVTkNTKSkKKyNpZmRlZiBFMkZTQ0tfSU5DTFVERV9JTkxJTkVfRlVOQ1MKKyNpZiAoX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKQorI2RlZmluZSBfSU5MSU5FXyBleHRlcm4gaW5saW5lCisjZWxzZQorI2RlZmluZSBfSU5MSU5FXyBpbmxpbmUKKyNlbmRpZgorI2Vsc2UgLyogIUUyRlNDS19JTkNMVURFX0lOTElORSBGVU5DUyAqLworI2lmIChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisjZGVmaW5lIF9JTkxJTkVfIGlubGluZQorI2Vsc2UgLyogbm90IEM5OSAqLworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9JTkxJTkVfIGV4dGVybiBfX2lubGluZV9fCisjZWxzZQkJCQkvKiBGb3IgV2F0Y29tIEMgKi8KKyNkZWZpbmUgX0lOTElORV8gZXh0ZXJuIGlubGluZQorI2VuZGlmIC8qIF9fR05VQ19fICovCisjZW5kaWYgLyogX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMICovCisjZW5kaWYgLyogRTJGU0NLX0lOQ0xVREVfSU5MSU5FX0ZVTkNTICovCisKKworX0lOTElORV8gbGttZW1fY2FjaGVfdCAqIGRvX2NhY2hlX2NyZWF0ZShpbnQgbGVuKQoreworCWxrbWVtX2NhY2hlX3QgKm5ld19jYWNoZTsKKwluZXdfY2FjaGUgPSBtYWxsb2Moc2l6ZW9mKCpuZXdfY2FjaGUpKTsKKwlpZiAobmV3X2NhY2hlKQorCQluZXdfY2FjaGUtPm9iamVjdF9sZW5ndGggPSBsZW47CisJcmV0dXJuIG5ld19jYWNoZTsKK30KKworX0lOTElORV8gdm9pZCBkb19jYWNoZV9kZXN0cm95KGxrbWVtX2NhY2hlX3QgKmNhY2hlKQoreworCWZyZWUoY2FjaGUpOworfQorCisvKgorICogaGVscGVyIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggMzIgb3IgNjRiaXQgYmxvY2sgbnVtYmVycy4KKyAqLworX0lOTElORV8gc2l6ZV90IGpvdXJuYWxfdGFnX2J5dGVzKGpvdXJuYWxfdCAqam91cm5hbCkKK3sKKwlpZiAoSkZTX0hBU19JTkNPTVBBVF9GRUFUVVJFKGpvdXJuYWwsIEpGU19GRUFUVVJFX0lOQ09NUEFUXzY0QklUKSkKKwkJcmV0dXJuIEpCRF9UQUdfU0laRTY0OworCWVsc2UKKwkJcmV0dXJuIEpCRF9UQUdfU0laRTMyOworfQorCisjdW5kZWYgX0lOTElORV8KKyNlbmRpZgorCisvKgorICogS2VybmVsIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIGpvdXJuYWwuYworICovCitpbnQgam91cm5hbF9ibWFwKGpvdXJuYWxfdCAqam91cm5hbCwgYmxrNjRfdCBibG9jaywgdW5zaWduZWQgbG9uZyBsb25nICpwaHlzKTsKK3N0cnVjdCBidWZmZXJfaGVhZCAqZ2V0YmxrKGtkZXZfdCBjdHgsIGJsazY0X3QgYmxvY2tuciwgaW50IGJsb2Nrc2l6ZSk7Cit2b2lkIHN5bmNfYmxvY2tkZXYoa2Rldl90IGtkZXYpOwordm9pZCBsbF9yd19ibG9jayhpbnQgcncsIGludCBkdW1teSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaFtdKTsKK3ZvaWQgbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7Cit2b2lkIG1hcmtfYnVmZmVyX3VwdG9kYXRlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB2YWwpOwordm9pZCBicmVsc2Uoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CitpbnQgYnVmZmVyX3VwdG9kYXRlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwordm9pZCB3YWl0X29uX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKKworLyoKKyAqIERlZmluZSBuZXdlciAyLjUgaW50ZXJmYWNlcworICovCisjZGVmaW5lIF9fZ2V0YmxrKGRldiwgYmxvY2tuciwgYmxvY2tzaXplKSBnZXRibGsoZGV2LCBibG9ja25yLCBibG9ja3NpemUpCisjZGVmaW5lIHNldF9idWZmZXJfdXB0b2RhdGUoYmgpIG1hcmtfYnVmZmVyX3VwdG9kYXRlKGJoLCAxKQpkaWZmIC0tZ2l0IGEvZTJmc2NrL2pvdXJuYWwuYyBiL2UyZnNjay9qb3VybmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I0MGUwMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9qb3VybmFsLmMKQEAgLTAsMCArMSwxMDk0IEBACisvKgorICogam91cm5hbC5jIC0tLSBjb2RlIGZvciBoYW5kbGluZyB0aGUgImV4dDMiIGpvdXJuYWwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgQW5kcmVhcyBEaWxnZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMCBUaGVvZG9yZSBUcydvCisgKgorICogUGFydHMgb2YgdGhlIGNvZGUgYXJlIGJhc2VkIG9uIGZzL2pmcy9qb3VybmFsLmMgYnkgU3RlcGhlbiBDLiBUd2VlZGllCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgUmVkIEhhdCBTb2Z0d2FyZQorICoKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgb3IgYXQgeW91ciBkaXNjcmV0aW9uCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2RlZmluZSBNTlRfRkwgKE1TX01HQ19WQUwgfCBNU19SRE9OTFkpCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisKKyNkZWZpbmUgRTJGU0NLX0lOQ0xVREVfSU5MSU5FX0ZVTkNTCisjaW5jbHVkZSAiamZzX3VzZXIuaCIKKyNpbmNsdWRlICJwcm9ibGVtLmgiCisjaW5jbHVkZSAidXVpZC91dWlkLmgiCisKKyNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCQkvKiBFbmFibGVkIGJ5IGNvbmZpZ3VyZSAtLWVuYWJsZS1qZnMtZGVidWcgKi8KK3N0YXRpYyBpbnQgYmhfY291bnQgPSAwOworI2VuZGlmCisKKy8qCisgKiBEZWZpbmUgVVNFX0lOT0RFX0lPIHRvIHVzZSB0aGUgaW5vZGVfaW8uYyAvIGZpbGVpby5jIGNvZGVwYXRocy4KKyAqIFRoaXMgY3JlYXRlcyBhIGxhcmdlciBzdGF0aWMgYmluYXJ5LCBhbmQgYSBzbWFsbGVyIGJpbmFyeSB1c2luZworICogc2hhcmVkIGxpYnJhcmllcy4gIEl0J3MgYWxzbyBwcm9iYWJseSBzbGlnaHRseSBsZXNzIENQVS1lZmZpY2llbnQsCisgKiB3aGljaCBpcyB3aHkgaXQncyBub3Qgb24gYnkgZGVmYXVsdC4gIEJ1dCwgaXQncyBhIGdvb2Qgd2F5IG9mCisgKiB0ZXN0aW5nIHRoZSBmdW5jdGlvbnMgaW4gaW5vZGVfaW8uYyBhbmQgZmlsZWlvLmMuCisgKi8KKyN1bmRlZiBVU0VfSU5PREVfSU8KKworLyogS2VybmVsIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIGZvciBoYW5kbGluZyB0aGUgam91cm5hbC4gIFRoZXNlIGFsbG93IHVzCisgKiB0byB1c2UgdGhlIHJlY292ZXJ5LmMgZmlsZSB2aXJ0dWFsbHkgdW5jaGFuZ2VkIGZyb20gdGhlIGtlcm5lbCwgc28gd2UKKyAqIGRvbid0IGhhdmUgdG8gZG8gbXVjaCB0byBrZWVwIGtlcm5lbCBhbmQgdXNlciByZWNvdmVyeSBpbiBzeW5jLgorICovCitpbnQgam91cm5hbF9ibWFwKGpvdXJuYWxfdCAqam91cm5hbCwgYmxrNjRfdCBibG9jaywgdW5zaWduZWQgbG9uZyBsb25nICpwaHlzKQoreworI2lmZGVmIFVTRV9JTk9ERV9JTworCSpwaHlzID0gYmxvY2s7CisJcmV0dXJuIDA7CisjZWxzZQorCXN0cnVjdCBpbm9kZSAJKmlub2RlID0gam91cm5hbC0+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+YmxvY2tzaXplKTsKKworCWlmIChleHRfam91cm5hbCkgeworCQlibGs2NF90IG1heGxlbjsKKworCQlzdGFydCA9IGV4dDJmc19qb3VybmFsX3NiX3N0YXJ0KGN0eC0+ZnMtPmJsb2Nrc2l6ZSkgLSAxOworCQliaCA9IGdldGJsayhkZXZfam91cm5hbCwgc3RhcnQsIGN0eC0+ZnMtPmJsb2Nrc2l6ZSk7CisJCWlmICghYmgpIHsKKwkJCXJldHZhbCA9IEVYVDJfRVRfTk9fTUVNT1JZOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJbGxfcndfYmxvY2soUkVBRCwgMSwgJmJoKTsKKwkJaWYgKChyZXR2YWwgPSBiaC0+Yl9lcnIpICE9IDApIHsKKwkJCWJyZWxzZShiaCk7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQltZW1jcHkoJmpzdXBlciwgc3RhcnQgPyBiaC0+Yl9kYXRhIDogIGJoLT5iX2RhdGEgKyBTVVBFUkJMT0NLX09GRlNFVCwKKwkJICAgICAgIHNpemVvZihqc3VwZXIpKTsKKwkJYnJlbHNlKGJoKTsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJaWYgKGpzdXBlci5zX21hZ2ljID09IGV4dDJmc19zd2FiMTYoRVhUMl9TVVBFUl9NQUdJQykpCisJCQlleHQyZnNfc3dhcF9zdXBlcigmanN1cGVyKTsKKyNlbmRpZgorCQlpZiAoanN1cGVyLnNfbWFnaWMgIT0gRVhUMl9TVVBFUl9NQUdJQyB8fAorCQkgICAgIShqc3VwZXIuc19mZWF0dXJlX2luY29tcGF0ICYgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0pPVVJOQUxfREVWKSkgeworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8wX0VYVF9KT1VSTkFMX0JBRF9TVVBFUiwgJnBjdHgpOworCQkJcmV0dmFsID0gRVhUMl9FVF9MT0FEX0VYVF9KT1VSTkFMOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJLyogTWFrZSBzdXJlIHRoZSBqb3VybmFsIFVVSUQgaXMgY29ycmVjdCAqLworCQlpZiAobWVtY21wKGpzdXBlci5zX3V1aWQsIGN0eC0+ZnMtPnN1cGVyLT5zX2pvdXJuYWxfdXVpZCwKKwkJCSAgIHNpemVvZihqc3VwZXIuc191dWlkKSkpIHsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KT1VSTkFMX0JBRF9VVUlELCAmcGN0eCk7CisJCQlyZXR2YWwgPSBFWFQyX0VUX0xPQURfRVhUX0pPVVJOQUw7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCisJCW1heGxlbiA9IGV4dDJmc19ibG9ja3NfY291bnQoJmpzdXBlcik7CisJCWpvdXJuYWwtPmpfbWF4bGVuID0gKG1heGxlbiA8IDFVTEwgPDwgMzIpID8gbWF4bGVuIDogKDFVTEwgPDwgMzIpIC0gMTsKKwkJc3RhcnQrKzsKKwl9CisKKwlpZiAoIShiaCA9IGdldGJsayhkZXZfam91cm5hbCwgc3RhcnQsIGpvdXJuYWwtPmpfYmxvY2tzaXplKSkpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9OT19NRU1PUlk7CisJCWdvdG8gZXJyb3V0OworCX0KKworCWpvdXJuYWwtPmpfc2JfYnVmZmVyID0gYmg7CisJam91cm5hbC0+al9zdXBlcmJsb2NrID0gKGpvdXJuYWxfc3VwZXJibG9ja190ICopYmgtPmJfZGF0YTsKKworI2lmZGVmIFVTRV9JTk9ERV9JTworCWlmIChqX2lub2RlKQorCQlleHQyZnNfZnJlZV9tZW0oJmpfaW5vZGUpOworI2VuZGlmCisKKwkqcmV0X2pvdXJuYWwgPSBqb3VybmFsOworCWUyZnNja191c2VfaW5vZGVfc2hvcnRjdXRzKGN0eCwgMCk7CisJcmV0dXJuIDA7CisKK2Vycm91dDoKKwllMmZzY2tfdXNlX2lub2RlX3Nob3J0Y3V0cyhjdHgsIDApOworCWlmIChkZXZfZnMpCisJCWV4dDJmc19mcmVlX21lbSgmZGV2X2ZzKTsKKwlpZiAoal9pbm9kZSkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZqX2lub2RlKTsKKwlpZiAoam91cm5hbCkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZqb3VybmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IGUyZnNja19qb3VybmFsX2ZpeF9iYWRfaW5vZGUoZTJmc2NrX3QgY3R4LAorCQkJCQkgICAgICBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGN0eC0+ZnMtPnN1cGVyOworCWludCByZWNvdmVyID0gY3R4LT5mcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCUVYVDNfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSOworCWludCBoYXNfam91cm5hbCA9IGN0eC0+ZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICYKKwkJRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTDsKKworCWlmIChoYXNfam91cm5hbCB8fCBzYi0+c19qb3VybmFsX2ludW0pIHsKKwkJLyogVGhlIGpvdXJuYWwgaW5vZGUgaXMgYm9ndXMsIHJlbW92ZSBhbmQgZm9yY2UgZnVsbCBmc2NrICovCisJCXBjdHgtPmlubyA9IHNiLT5zX2pvdXJuYWxfaW51bTsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KT1VSTkFMX0JBRF9JTk9ERSwgcGN0eCkpIHsKKwkJCWlmIChoYXNfam91cm5hbCAmJiBzYi0+c19qb3VybmFsX2ludW0pCisJCQkJcHJpbnRmKCIqKiogZXh0MyBqb3VybmFsIGhhcyBiZWVuIGRlbGV0ZWQgLSAiCisJCQkJICAgICAgICJmaWxlc3lzdGVtIGlzIG5vdyBleHQyIG9ubHkgKioqXG5cbiIpOworCQkJc2ItPnNfZmVhdHVyZV9jb21wYXQgJj0gfkVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUw7CisJCQlzYi0+c19qb3VybmFsX2ludW0gPSAwOworCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19KT1VSTkFMX0lOT0RFOworCQkJY3R4LT5mcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19NQVNURVJfU0JfT05MWTsKKwkJCWUyZnNja19jbGVhcl9yZWNvdmVyKGN0eCwgMSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gRVhUMl9FVF9CQURfSU5PREVfTlVNOworCX0gZWxzZSBpZiAocmVjb3ZlcikgeworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8wX0pPVVJOQUxfUkVDT1ZFUl9TRVQsIHBjdHgpKSB7CisJCQllMmZzY2tfY2xlYXJfcmVjb3ZlcihjdHgsIDEpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIEVYVDJfRVRfVU5TVVBQX0ZFQVRVUkU7CisJfQorCXJldHVybiAwOworfQorCisjZGVmaW5lIFYxX1NCX1NJWkUJMHgwMDI0CitzdGF0aWMgdm9pZCBjbGVhcl92Ml9qb3VybmFsX2ZpZWxkcyhqb3VybmFsX3QgKmpvdXJuYWwpCit7CisJZTJmc2NrX3QgY3R4ID0gam91cm5hbC0+al9kZXYtPmtfY3R4OworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgcGN0eDsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwlpZiAoIWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9DTEVBUl9WMl9KT1VSTkFMLCAmcGN0eCkpCisJCXJldHVybjsKKworCW1lbXNldCgoKGNoYXIgKikgam91cm5hbC0+al9zdXBlcmJsb2NrKSArIFYxX1NCX1NJWkUsIDAsCisJICAgICAgIGN0eC0+ZnMtPmJsb2Nrc2l6ZS1WMV9TQl9TSVpFKTsKKwltYXJrX2J1ZmZlcl9kaXJ0eShqb3VybmFsLT5qX3NiX2J1ZmZlcik7Cit9CisKKworc3RhdGljIGVycmNvZGVfdCBlMmZzY2tfam91cm5hbF9sb2FkKGpvdXJuYWxfdCAqam91cm5hbCkKK3sKKwllMmZzY2tfdCBjdHggPSBqb3VybmFsLT5qX2Rldi0+a19jdHg7CisJam91cm5hbF9zdXBlcmJsb2NrX3QgKmpzYjsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmpiaCA9IGpvdXJuYWwtPmpfc2JfYnVmZmVyOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgcGN0eDsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwlsbF9yd19ibG9jayhSRUFELCAxLCAmamJoKTsKKwlpZiAoamJoLT5iX2VycikgeworCQljb21fZXJyKGN0eC0+ZGV2aWNlX25hbWUsIGpiaC0+Yl9lcnIsICIlcyIsCisJCQlfKCJyZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9ja1xuIikpOworCQlyZXR1cm4gamJoLT5iX2VycjsKKwl9CisKKwlqc2IgPSBqb3VybmFsLT5qX3N1cGVyYmxvY2s7CisJLyogSWYgd2UgZG9uJ3QgZXZlbiBoYXZlIEpGU19NQUdJQywgd2UgcHJvYmFibHkgaGF2ZSBhIHdyb25nIGlub2RlICovCisJaWYgKGpzYi0+c19oZWFkZXIuaF9tYWdpYyAhPSBodG9ubChKRlNfTUFHSUNfTlVNQkVSKSkKKwkJcmV0dXJuIGUyZnNja19qb3VybmFsX2ZpeF9iYWRfaW5vZGUoY3R4LCAmcGN0eCk7CisKKwlzd2l0Y2ggKG50b2hsKGpzYi0+c19oZWFkZXIuaF9ibG9ja3R5cGUpKSB7CisJY2FzZSBKRlNfU1VQRVJCTE9DS19WMToKKwkJam91cm5hbC0+al9mb3JtYXRfdmVyc2lvbiA9IDE7CisJCWlmIChqc2ItPnNfZmVhdHVyZV9jb21wYXQgfHwKKwkJICAgIGpzYi0+c19mZWF0dXJlX2luY29tcGF0IHx8CisJCSAgICBqc2ItPnNfZmVhdHVyZV9yb19jb21wYXQgfHwKKwkJICAgIGpzYi0+c19ucl91c2VycykKKwkJCWNsZWFyX3YyX2pvdXJuYWxfZmllbGRzKGpvdXJuYWwpOworCQlicmVhazsKKworCWNhc2UgSkZTX1NVUEVSQkxPQ0tfVjI6CisJCWpvdXJuYWwtPmpfZm9ybWF0X3ZlcnNpb24gPSAyOworCQlpZiAobnRvaGwoanNiLT5zX25yX3VzZXJzKSA+IDEgJiYKKwkJICAgIHV1aWRfaXNfbnVsbChjdHgtPmZzLT5zdXBlci0+c19qb3VybmFsX3V1aWQpKQorCQkJY2xlYXJfdjJfam91cm5hbF9maWVsZHMoam91cm5hbCk7CisJCWlmIChudG9obChqc2ItPnNfbnJfdXNlcnMpID4gMSkgeworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8wX0pPVVJOQUxfVU5TVVBQX01VTFRJRlMsICZwY3R4KTsKKwkJCXJldHVybiBFWFQyX0VUX0pPVVJOQUxfVU5TVVBQX1ZFUlNJT047CisJCX0KKwkJYnJlYWs7CisKKwkvKgorCSAqIFRoZXNlIHNob3VsZCBuZXZlciBhcHBlYXIgaW4gYSBqb3VybmFsIHN1cGVyIGJsb2NrLCBzbyBpZgorCSAqIHRoZXkgZG8sIHRoZSBqb3VybmFsIGlzIGJhZGx5IGNvcnJ1cHRlZC4KKwkgKi8KKwljYXNlIEpGU19ERVNDUklQVE9SX0JMT0NLOgorCWNhc2UgSkZTX0NPTU1JVF9CTE9DSzoKKwljYXNlIEpGU19SRVZPS0VfQkxPQ0s6CisJCXJldHVybiBFWFQyX0VUX0NPUlJVUFRfU1VQRVJCTE9DSzsKKworCS8qIElmIHdlIGRvbid0IHVuZGVyc3RhbmQgdGhlIHN1cGVyYmxvY2sgbWFqb3IgdHlwZSwgYnV0IHRoZXJlCisJICogaXMgYSBtYWdpYyBudW1iZXIsIHRoZW4gaXQgaXMgbGlrZWx5IHRvIGJlIGEgbmV3IGZvcm1hdCB3ZQorCSAqIGp1c3QgZG9uJ3QgdW5kZXJzdGFuZCwgc28gbGVhdmUgaXQgYWxvbmUuICovCisJZGVmYXVsdDoKKwkJcmV0dXJuIEVYVDJfRVRfSk9VUk5BTF9VTlNVUFBfVkVSU0lPTjsKKwl9CisKKwlpZiAoSkZTX0hBU19JTkNPTVBBVF9GRUFUVVJFKGpvdXJuYWwsIH5KRlNfS05PV05fSU5DT01QQVRfRkVBVFVSRVMpKQorCQlyZXR1cm4gRVhUMl9FVF9VTlNVUFBfRkVBVFVSRTsKKworCWlmIChKRlNfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGpvdXJuYWwsIH5KRlNfS05PV05fUk9DT01QQVRfRkVBVFVSRVMpKQorCQlyZXR1cm4gRVhUMl9FVF9ST19VTlNVUFBfRkVBVFVSRTsKKworCS8qIFdlIGhhdmUgbm93IGNoZWNrZWQgd2hldGhlciB3ZSBrbm93IGVub3VnaCBhYm91dCB0aGUgam91cm5hbAorCSAqIGZvcm1hdCB0byBiZSBhYmxlIHRvIHByb2NlZWQgc2FmZWx5LCBzbyBhbnkgb3RoZXIgY2hlY2tzIHRoYXQKKwkgKiBmYWlsIHdlIHNob3VsZCBhdHRlbXB0IHRvIHJlY292ZXIgZnJvbS4gKi8KKwlpZiAoanNiLT5zX2Jsb2Nrc2l6ZSAhPSBodG9ubChqb3VybmFsLT5qX2Jsb2Nrc2l6ZSkpIHsKKwkJY29tX2VycihjdHgtPnByb2dyYW1fbmFtZSwgRVhUMl9FVF9DT1JSVVBUX1NVUEVSQkxPQ0ssCisJCQlfKCIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iKSwKKwkJCWN0eC0+ZGV2aWNlX25hbWUpOworCQlyZXR1cm4gRVhUMl9FVF9DT1JSVVBUX1NVUEVSQkxPQ0s7CisJfQorCisJaWYgKG50b2hsKGpzYi0+c19tYXhsZW4pIDwgam91cm5hbC0+al9tYXhsZW4pCisJCWpvdXJuYWwtPmpfbWF4bGVuID0gbnRvaGwoanNiLT5zX21heGxlbik7CisJZWxzZSBpZiAobnRvaGwoanNiLT5zX21heGxlbikgPiBqb3VybmFsLT5qX21heGxlbikgeworCQljb21fZXJyKGN0eC0+cHJvZ3JhbV9uYW1lLCBFWFQyX0VUX0NPUlJVUFRfU1VQRVJCTE9DSywKKwkJCV8oIiVzOiBqb3VybmFsIHRvbyBzaG9ydFxuIiksCisJCQljdHgtPmRldmljZV9uYW1lKTsKKwkJcmV0dXJuIEVYVDJfRVRfQ09SUlVQVF9TVVBFUkJMT0NLOworCX0KKworCWpvdXJuYWwtPmpfdGFpbF9zZXF1ZW5jZSA9IG50b2hsKGpzYi0+c19zZXF1ZW5jZSk7CisJam91cm5hbC0+al90cmFuc2FjdGlvbl9zZXF1ZW5jZSA9IGpvdXJuYWwtPmpfdGFpbF9zZXF1ZW5jZTsKKwlqb3VybmFsLT5qX3RhaWwgPSBudG9obChqc2ItPnNfc3RhcnQpOworCWpvdXJuYWwtPmpfZmlyc3QgPSBudG9obChqc2ItPnNfZmlyc3QpOworCWpvdXJuYWwtPmpfbGFzdCA9IG50b2hsKGpzYi0+c19tYXhsZW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGUyZnNja19qb3VybmFsX3Jlc2V0X3N1cGVyKGUyZnNja190IGN0eCwgam91cm5hbF9zdXBlcmJsb2NrX3QgKmpzYiwKKwkJCQkgICAgICAgam91cm5hbF90ICpqb3VybmFsKQoreworCWNoYXIgKnA7CisJdW5pb24geworCQl1dWlkX3QgdXVpZDsKKwkJX191MzIgdmFsWzRdOworCX0gdTsKKwlfX3UzMiBuZXdfc2VxID0gMDsKKwlpbnQgaTsKKworCS8qIExlYXZlIGEgdmFsaWQgZXhpc3RpbmcgVjEgc3VwZXJibG9jayBzaWduYXR1cmUgYWxvbmUuCisJICogQW55dGhpbmcgdW5yZWNvZ25pc2FibGUgd2Ugb3ZlcndyaXRlIHdpdGggYSBuZXcgVjIKKwkgKiBzaWduYXR1cmUuICovCisKKwlpZiAoanNiLT5zX2hlYWRlci5oX21hZ2ljICE9IGh0b25sKEpGU19NQUdJQ19OVU1CRVIpIHx8CisJICAgIGpzYi0+c19oZWFkZXIuaF9ibG9ja3R5cGUgIT0gaHRvbmwoSkZTX1NVUEVSQkxPQ0tfVjEpKSB7CisJCWpzYi0+c19oZWFkZXIuaF9tYWdpYyA9IGh0b25sKEpGU19NQUdJQ19OVU1CRVIpOworCQlqc2ItPnNfaGVhZGVyLmhfYmxvY2t0eXBlID0gaHRvbmwoSkZTX1NVUEVSQkxPQ0tfVjIpOworCX0KKworCS8qIFplcm8gb3V0IGV2ZXJ5dGhpbmcgZWxzZSBiZXlvbmQgdGhlIHN1cGVyYmxvY2sgaGVhZGVyICovCisKKwlwID0gKChjaGFyICopIGpzYikgKyBzaXplb2Yoam91cm5hbF9oZWFkZXJfdCk7CisJbWVtc2V0IChwLCAwLCBjdHgtPmZzLT5ibG9ja3NpemUtc2l6ZW9mKGpvdXJuYWxfaGVhZGVyX3QpKTsKKworCWpzYi0+c19ibG9ja3NpemUgPSBodG9ubChjdHgtPmZzLT5ibG9ja3NpemUpOworCWpzYi0+c19tYXhsZW4gPSBodG9ubChqb3VybmFsLT5qX21heGxlbik7CisJanNiLT5zX2ZpcnN0ID0gaHRvbmwoMSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBqb3VybmFsIHNlcXVlbmNlIG51bWJlciBzbyB0aGF0IHRoZXJlIGlzICJubyIKKwkgKiBjaGFuY2Ugd2Ugd2lsbCBmaW5kIG9sZCAidmFsaWQiIHRyYW5zYWN0aW9ucyBpbiB0aGUgam91cm5hbC4KKwkgKiBUaGlzIGF2b2lkcyB0aGUgbmVlZCB0byB6ZXJvIHRoZSB3aG9sZSBqb3VybmFsIChzbG93IHRvIGRvLAorCSAqIGFuZCByaXNreSB3aGVuIHdlIGFyZSBqdXN0IHJlY292ZXJpbmcgdGhlIGZpbGVzeXN0ZW0pLgorCSAqLworCXV1aWRfZ2VuZXJhdGUodS51dWlkKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSArKykKKwkJbmV3X3NlcSBePSB1LnZhbFtpXTsKKwlqc2ItPnNfc2VxdWVuY2UgPSBodG9ubChuZXdfc2VxKTsKKworCW1hcmtfYnVmZmVyX2RpcnR5KGpvdXJuYWwtPmpfc2JfYnVmZmVyKTsKKwlsbF9yd19ibG9jayhXUklURSwgMSwgJmpvdXJuYWwtPmpfc2JfYnVmZmVyKTsKK30KKworc3RhdGljIGVycmNvZGVfdCBlMmZzY2tfam91cm5hbF9maXhfY29ycnVwdF9zdXBlcihlMmZzY2tfdCBjdHgsCisJCQkJCQkgIGpvdXJuYWxfdCAqam91cm5hbCwKKwkJCQkJCSAgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCkKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IgPSBjdHgtPmZzLT5zdXBlcjsKKwlpbnQgcmVjb3ZlciA9IGN0eC0+ZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQlFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUjsKKworCWlmIChzYi0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwpIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KT1VSTkFMX0JBRF9TVVBFUiwgcGN0eCkpIHsKKwkJCWUyZnNja19qb3VybmFsX3Jlc2V0X3N1cGVyKGN0eCwgam91cm5hbC0+al9zdXBlcmJsb2NrLAorCQkJCQkJICAgam91cm5hbCk7CisJCQlqb3VybmFsLT5qX3RyYW5zYWN0aW9uX3NlcXVlbmNlID0gMTsKKwkJCWUyZnNja19jbGVhcl9yZWNvdmVyKGN0eCwgcmVjb3Zlcik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gRVhUMl9FVF9DT1JSVVBUX1NVUEVSQkxPQ0s7CisJfSBlbHNlIGlmIChlMmZzY2tfam91cm5hbF9maXhfYmFkX2lub2RlKGN0eCwgcGN0eCkpCisJCXJldHVybiBFWFQyX0VUX0NPUlJVUFRfU1VQRVJCTE9DSzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlMmZzY2tfam91cm5hbF9yZWxlYXNlKGUyZnNja190IGN0eCwgam91cm5hbF90ICpqb3VybmFsLAorCQkJCSAgIGludCByZXNldCwgaW50IGRyb3ApCit7CisJam91cm5hbF9zdXBlcmJsb2NrX3QgKmpzYjsKKworCWlmIChkcm9wKQorCQltYXJrX2J1ZmZlcl9jbGVhbihqb3VybmFsLT5qX3NiX2J1ZmZlcik7CisJZWxzZSBpZiAoIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1JFQURPTkxZKSkgeworCQlqc2IgPSBqb3VybmFsLT5qX3N1cGVyYmxvY2s7CisJCWpzYi0+c19zZXF1ZW5jZSA9IGh0b25sKGpvdXJuYWwtPmpfdHJhbnNhY3Rpb25fc2VxdWVuY2UpOworCQlpZiAocmVzZXQpCisJCQlqc2ItPnNfc3RhcnQgPSAwOyAvKiB0aGlzIG1hcmtzIHRoZSBqb3VybmFsIGFzIGVtcHR5ICovCisJCW1hcmtfYnVmZmVyX2RpcnR5KGpvdXJuYWwtPmpfc2JfYnVmZmVyKTsKKwl9CisJYnJlbHNlKGpvdXJuYWwtPmpfc2JfYnVmZmVyKTsKKworCWlmIChjdHgtPmpvdXJuYWxfaW8pIHsKKwkJaWYgKGN0eC0+ZnMgJiYgY3R4LT5mcy0+aW8gIT0gY3R4LT5qb3VybmFsX2lvKQorCQkJaW9fY2hhbm5lbF9jbG9zZShjdHgtPmpvdXJuYWxfaW8pOworCQljdHgtPmpvdXJuYWxfaW8gPSAwOworCX0KKworI2lmbmRlZiBVU0VfSU5PREVfSU8KKwlpZiAoam91cm5hbC0+al9pbm9kZSkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZqb3VybmFsLT5qX2lub2RlKTsKKyNlbmRpZgorCWlmIChqb3VybmFsLT5qX2ZzX2RldikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZqb3VybmFsLT5qX2ZzX2Rldik7CisJZXh0MmZzX2ZyZWVfbWVtKCZqb3VybmFsKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IHRoZSBzdXBlcmJsb2NrIGZpZWxkcyByZWdhcmRpbmcgdGhlCisgKiBqb3VybmFsIGFyZSBjb25zaXN0ZW50LgorICovCitlcnJjb2RlX3QgZTJmc2NrX2NoZWNrX2V4dDNfam91cm5hbChlMmZzY2tfdCBjdHgpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiID0gY3R4LT5mcy0+c3VwZXI7CisJam91cm5hbF90ICpqb3VybmFsOworCWludCByZWNvdmVyID0gY3R4LT5mcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCUVYVDNfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgcGN0eDsKKwlwcm9ibGVtX3QgcHJvYmxlbTsKKwlpbnQgcmVzZXQgPSAwLCBmb3JjZV9mc2NrID0gMDsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgam91cm5hbCBmZWF0dXJlcywgZG9uJ3QgZG8gYW55dGhpbmcgbW9yZSAqLworCWlmICghKHNiLT5zX2ZlYXR1cmVfY29tcGF0ICYgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCkgJiYKKwkgICAgIXJlY292ZXIgJiYgc2ItPnNfam91cm5hbF9pbnVtID09IDAgJiYgc2ItPnNfam91cm5hbF9kZXYgPT0gMCAmJgorCSAgICB1dWlkX2lzX251bGwoc2ItPnNfam91cm5hbF91dWlkKSkKKyAJCXJldHVybiAwOworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlwY3R4Lm51bSA9IHNiLT5zX2pvdXJuYWxfaW51bTsKKworCXJldHZhbCA9IGUyZnNja19nZXRfam91cm5hbChjdHgsICZqb3VybmFsKTsKKwlpZiAocmV0dmFsKSB7CisJCWlmICgocmV0dmFsID09IEVYVDJfRVRfQkFEX0lOT0RFX05VTSkgfHwKKwkJICAgIChyZXR2YWwgPT0gRVhUMl9FVF9CQURfQkxPQ0tfTlVNKSB8fAorCQkgICAgKHJldHZhbCA9PSBFWFQyX0VUX0pPVVJOQUxfVE9PX1NNQUxMKSB8fAorCQkgICAgKHJldHZhbCA9PSBFWFQyX0VUX05PX0pPVVJOQUwpKQorCQkJcmV0dXJuIGUyZnNja19qb3VybmFsX2ZpeF9iYWRfaW5vZGUoY3R4LCAmcGN0eCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dmFsID0gZTJmc2NrX2pvdXJuYWxfbG9hZChqb3VybmFsKTsKKwlpZiAocmV0dmFsKSB7CisJCWlmICgocmV0dmFsID09IEVYVDJfRVRfQ09SUlVQVF9TVVBFUkJMT0NLKSB8fAorCQkgICAgKChyZXR2YWwgPT0gRVhUMl9FVF9VTlNVUFBfRkVBVFVSRSkgJiYKKwkJICAgICghZml4X3Byb2JsZW0oY3R4LCBQUl8wX0pPVVJOQUxfVU5TVVBQX0lOQ09NUEFULAorCQkJCSAgJnBjdHgpKSkgfHwKKwkJICAgICgocmV0dmFsID09IEVYVDJfRVRfUk9fVU5TVVBQX0ZFQVRVUkUpICYmCisJCSAgICAoIWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KT1VSTkFMX1VOU1VQUF9ST0NPTVBBVCwKKwkJCQkgICZwY3R4KSkpIHx8CisJCSAgICAoKHJldHZhbCA9PSBFWFQyX0VUX0pPVVJOQUxfVU5TVVBQX1ZFUlNJT04pICYmCisJCSAgICAoIWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KT1VSTkFMX1VOU1VQUF9WRVJTSU9OLCAmcGN0eCkpKSkKKwkJCXJldHZhbCA9IGUyZnNja19qb3VybmFsX2ZpeF9jb3JydXB0X3N1cGVyKGN0eCwgam91cm5hbCwKKwkJCQkJCQkJICAmcGN0eCk7CisJCWUyZnNja19qb3VybmFsX3JlbGVhc2UoY3R4LCBqb3VybmFsLCAwLCAxKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKgorCSAqIFdlIHdhbnQgdG8gbWFrZSB0aGUgZmxhZ3MgY29uc2lzdGVudCBoZXJlLiAgV2Ugd2lsbCBub3QgbGVhdmUgd2l0aAorCSAqIG5lZWRzX3JlY292ZXJ5IHNldCBidXQgaGFzX2pvdXJuYWwgY2xlYXIuICBXZSBjYW4ndCBnZXQgaW4gYSBsb29wCisJICogd2l0aCAteSwgLW4sIG9yIC1wLCBvbmx5IGlmIGEgdXNlciBpc24ndCBtYWtpbmcgdXAgdGhlaXIgbWluZC4KKwkgKi8KK25vX2hhc19qb3VybmFsOgorCWlmICghKHNiLT5zX2ZlYXR1cmVfY29tcGF0ICYgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCkpIHsKKwkJcmVjb3ZlciA9IHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUjsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KT1VSTkFMX0hBU19KT1VSTkFMLCAmcGN0eCkpIHsKKwkJCWlmIChyZWNvdmVyICYmCisJCQkgICAgIWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KT1VSTkFMX1JFQ09WRVJfU0VULCAmcGN0eCkpCisJCQkJZ290byBub19oYXNfam91cm5hbDsKKwkJCS8qCisJCQkgKiBOZWVkIGEgZnVsbCBmc2NrIGlmIHdlIGFyZSByZWxlYXNpbmcgYQorCQkJICogam91cm5hbCBzdG9yZWQgb24gYSByZXNlcnZlZCBpbm9kZS4KKwkJCSAqLworCQkJZm9yY2VfZnNjayA9IHJlY292ZXIgfHwKKwkJCQkoc2ItPnNfam91cm5hbF9pbnVtIDwgRVhUMl9GSVJTVF9JTk9ERShzYikpOworCQkJLyogQ2xlYXIgYWxsIG9mIHRoZSBqb3VybmFsIGZpZWxkcyAqLworCQkJc2ItPnNfam91cm5hbF9pbnVtID0gMDsKKwkJCXNiLT5zX2pvdXJuYWxfZGV2ID0gMDsKKwkJCW1lbXNldChzYi0+c19qb3VybmFsX3V1aWQsIDAsCisJCQkgICAgICAgc2l6ZW9mKHNiLT5zX2pvdXJuYWxfdXVpZCkpOworCQkJZTJmc2NrX2NsZWFyX3JlY292ZXIoY3R4LCBmb3JjZV9mc2NrKTsKKwkJfSBlbHNlIGlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUkVBRE9OTFkpKSB7CisJCQlzYi0+c19mZWF0dXJlX2NvbXBhdCB8PSBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMOworCQkJY3R4LT5mcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19NQVNURVJfU0JfT05MWTsKKwkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGN0eC0+ZnMpOworCQl9CisJfQorCisJaWYgKHNiLT5zX2ZlYXR1cmVfY29tcGF0ICYgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCAmJgorCSAgICAhKHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUikgJiYKKwkgICAgam91cm5hbC0+al9zdXBlcmJsb2NrLT5zX3N0YXJ0ICE9IDApIHsKKwkJLyogUHJpbnQgc3RhdHVzIGluZm9ybWF0aW9uICovCisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KT1VSTkFMX1JFQ09WRVJZX0NMRUFSLCAmcGN0eCk7CisJCWlmIChjdHgtPnN1cGVyYmxvY2spCisJCQlwcm9ibGVtID0gUFJfMF9KT1VSTkFMX1JVTl9ERUZBVUxUOworCQllbHNlCisJCQlwcm9ibGVtID0gUFJfMF9KT1VSTkFMX1JVTjsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgcHJvYmxlbSwgJnBjdHgpKSB7CisJCQljdHgtPm9wdGlvbnMgfD0gRTJGX09QVF9GT1JDRTsKKwkJCXNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgfD0KKwkJCQlFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUjsKKwkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGN0eC0+ZnMpOworCQl9IGVsc2UgaWYgKGZpeF9wcm9ibGVtKGN0eCwKKwkJCQkgICAgICAgUFJfMF9KT1VSTkFMX1JFU0VUX0pPVVJOQUwsICZwY3R4KSkgeworCQkJcmVzZXQgPSAxOworCQkJc2ItPnNfc3RhdGUgJj0gfkVYVDJfVkFMSURfRlM7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShjdHgtPmZzKTsKKwkJfQorCQkvKgorCQkgKiBJZiB0aGUgdXNlciBhbnN3ZXJzIG5vIHRvIHRoZSBhYm92ZSBxdWVzdGlvbiwgd2UKKwkJICogaWdub3JlIHRoZSBmYWN0IHRoYXQgam91cm5hbCBhcHBhcmVudGx5IGhhcyBkYXRhOworCQkgKiBhY2NpZGVudGFsbHkgcmVwbGF5aW5nIG92ZXIgdmFsaWQgZGF0YSB3b3VsZCBiZSBmYXIKKwkJICogd29yc2UgdGhhbiBza2lwcGluZyBhIHF1ZXN0aW9uYWJsZSByZWNvdmVyeS4KKwkJICoKKwkJICogWFhYIHNob3VsZCB3ZSBhYm9ydCB3aXRoIGEgZmF0YWwgZXJyb3IgaGVyZT8gIFdoYXQKKwkJICogd2lsbCB0aGUgZXh0MyBrZXJuZWwgY29kZSBkbyBpZiBhIGZpbGVzeXN0ZW0gd2l0aAorCQkgKiAhTkVFRFNfUkVDT1ZFUlkgYnV0IHdpdGggYSBub24temVybworCQkgKiBqb3VybmFsLT5qX3N1cGVyYmxvY2stPnNfc3RhcnQgaXMgbW91bnRlZD8KKwkJICovCisJfQorCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBuZWVkIHRvIGRvIHJlcGxheSB0aGUgam91cm5hbCwgY2hlY2sgdG8gc2VlIGlmCisJICogdGhlIGpvdXJuYWwncyBlcnJubyBpcyBzZXQ7IGlmIHNvLCB3ZSBuZWVkIHRvIG1hcmsgdGhlIGZpbGUKKwkgKiBzeXN0ZW0gYXMgYmVpbmcgY29ycnVwdCBhbmQgY2xlYXIgdGhlIGpvdXJuYWwncyBzX2Vycm5vLgorCSAqLworCWlmICghKHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUikgJiYKKwkgICAgam91cm5hbC0+al9zdXBlcmJsb2NrLT5zX2Vycm5vKSB7CisJCWN0eC0+ZnMtPnN1cGVyLT5zX3N0YXRlIHw9IEVYVDJfRVJST1JfRlM7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGN0eC0+ZnMpOworCQlqb3VybmFsLT5qX3N1cGVyYmxvY2stPnNfZXJybm8gPSAwOworCQltYXJrX2J1ZmZlcl9kaXJ0eShqb3VybmFsLT5qX3NiX2J1ZmZlcik7CisJfQorCisJZTJmc2NrX2pvdXJuYWxfcmVsZWFzZShjdHgsIGpvdXJuYWwsIHJlc2V0LCAwKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHJlY292ZXJfZXh0M19qb3VybmFsKGUyZnNja190IGN0eCkKK3sKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0CXBjdHg7CisJam91cm5hbF90ICpqb3VybmFsOworCWVycmNvZGVfdCByZXR2YWw7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCisJam91cm5hbF9pbml0X3Jldm9rZV9jYWNoZXMoKTsKKwlyZXR2YWwgPSBlMmZzY2tfZ2V0X2pvdXJuYWwoY3R4LCAmam91cm5hbCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHZhbCA9IGUyZnNja19qb3VybmFsX2xvYWQoam91cm5hbCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlyZXR2YWwgPSBqb3VybmFsX2luaXRfcmV2b2tlKGpvdXJuYWwsIDEwMjQpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCisJcmV0dmFsID0gLWpvdXJuYWxfcmVjb3Zlcihqb3VybmFsKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCWlmIChqb3VybmFsLT5qX2ZhaWxlZF9jb21taXQpIHsKKwkJcGN0eC5pbm8gPSBqb3VybmFsLT5qX2ZhaWxlZF9jb21taXQ7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KTkxfVFhOX0NPUlJVUFQsICZwY3R4KTsKKwkJam91cm5hbC0+al9zdXBlcmJsb2NrLT5zX2Vycm5vID0gLUVJTlZBTDsKKwkJbWFya19idWZmZXJfZGlydHkoam91cm5hbC0+al9zYl9idWZmZXIpOworCX0KKworZXJyb3V0OgorCWpvdXJuYWxfZGVzdHJveV9yZXZva2Uoam91cm5hbCk7CisJam91cm5hbF9kZXN0cm95X3Jldm9rZV9jYWNoZXMoKTsKKwllMmZzY2tfam91cm5hbF9yZWxlYXNlKGN0eCwgam91cm5hbCwgMSwgMCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGUyZnNja19ydW5fZXh0M19qb3VybmFsKGUyZnNja190IGN0eCkKK3sKKwlpb19tYW5hZ2VyIGlvX3B0ciA9IGN0eC0+ZnMtPmlvLT5tYW5hZ2VyOworCWludCBibG9ja3NpemUgPSBjdHgtPmZzLT5ibG9ja3NpemU7CisJZXJyY29kZV90CXJldHZhbCwgcmVjb3Zlcl9yZXR2YWw7CisJaW9fc3RhdHMJc3RhdHMgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBrYnl0ZXNfd3JpdHRlbiA9IDA7CisKKwlwcmludGYoXygiJXM6IHJlY292ZXJpbmcgam91cm5hbFxuIiksIGN0eC0+ZGV2aWNlX25hbWUpOworCWlmIChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1JFQURPTkxZKSB7CisJCXByaW50ZihfKCIlczogd29uJ3QgZG8gam91cm5hbCByZWNvdmVyeSB3aGlsZSByZWFkLW9ubHlcbiIpLAorCQkgICAgICAgY3R4LT5kZXZpY2VfbmFtZSk7CisJCXJldHVybiBFWFQyX0VUX0ZJTEVfUk87CisJfQorCisJaWYgKGN0eC0+ZnMtPmZsYWdzICYgRVhUMl9GTEFHX0RJUlRZKQorCQlleHQyZnNfZmx1c2goY3R4LT5mcyk7CS8qIEZvcmNlIG91dCBhbnkgbW9kaWZpY2F0aW9ucyAqLworCisJcmVjb3Zlcl9yZXR2YWwgPSByZWNvdmVyX2V4dDNfam91cm5hbChjdHgpOworCisJLyoKKwkgKiBSZWxvYWQgdGhlIGZpbGVzeXN0ZW0gY29udGV4dCB0byBnZXQgdXAtdG8tZGF0ZSBkYXRhIGZyb20gZGlzaworCSAqIGJlY2F1c2Ugam91cm5hbCByZWNvdmVyeSB3aWxsIGNoYW5nZSB0aGUgZmlsZXN5c3RlbSB1bmRlciB1cy4KKwkgKi8KKwlpZiAoY3R4LT5mcy0+c3VwZXItPnNfa2J5dGVzX3dyaXR0ZW4gJiYKKwkgICAgY3R4LT5mcy0+aW8tPm1hbmFnZXItPmdldF9zdGF0cykKKwkJY3R4LT5mcy0+aW8tPm1hbmFnZXItPmdldF9zdGF0cyhjdHgtPmZzLT5pbywgJnN0YXRzKTsKKwlpZiAoc3RhdHMgJiYgc3RhdHMtPmJ5dGVzX3dyaXR0ZW4pCisJCWtieXRlc193cml0dGVuID0gc3RhdHMtPmJ5dGVzX3dyaXR0ZW4gPj4gMTA7CisKKwlleHQyZnNfbW1wX3N0b3AoY3R4LT5mcyk7CisJZXh0MmZzX2ZyZWUoY3R4LT5mcyk7CisJcmV0dmFsID0gZXh0MmZzX29wZW4oY3R4LT5maWxlc3lzdGVtX25hbWUsIGN0eC0+b3BlbmZzX2ZsYWdzLAorCQkJICAgICBjdHgtPnN1cGVyYmxvY2ssIGJsb2Nrc2l6ZSwgaW9fcHRyLAorCQkJICAgICAmY3R4LT5mcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGN0eC0+cHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gcmUtb3BlbiAlcyIpLAorCQkJY3R4LT5kZXZpY2VfbmFtZSk7CisJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJfQorCWN0eC0+ZnMtPnByaXZfZGF0YSA9IGN0eDsKKwljdHgtPmZzLT5ub3cgPSBjdHgtPm5vdzsKKwljdHgtPmZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFk7CisJY3R4LT5mcy0+c3VwZXItPnNfa2J5dGVzX3dyaXR0ZW4gKz0ga2J5dGVzX3dyaXR0ZW47CisKKwkvKiBTZXQgdGhlIHN1cGVyYmxvY2sgZmxhZ3MgKi8KKwllMmZzY2tfY2xlYXJfcmVjb3ZlcihjdHgsIHJlY292ZXJfcmV0dmFsICE9IDApOworCisJLyoKKwkgKiBEbyBvbmUgbGFzdCBzYW5pdHkgY2hlY2ssIGFuZCBwcm9wYWdhdGUgam91cm5hbC0+c19lcnJubyB0bworCSAqIHRoZSBFWFQyX0VSUk9SX0ZTIGZsYWcgaW4gdGhlIGZzIHN1cGVyYmxvY2sgaWYgbmVlZGVkLgorCSAqLworCXJldHZhbCA9IGUyZnNja19jaGVja19leHQzX2pvdXJuYWwoY3R4KTsKKwlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogcmVjb3Zlcl9yZXR2YWw7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbW92ZSB0aGUgam91cm5hbCBpbm9kZSBmcm9tIGEgdmlzaWJsZSBmaWxlIGluCisgKiB0aGUgZmlsZXN5c3RlbSBkaXJlY3RvcnkgaGllcmFyY2h5IHRvIHRoZSByZXNlcnZlZCBpbm9kZSBpZiBuZWNlc3NhcnkuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgam91cm5hbF9uYW1lc1tdID0geworCSIuam91cm5hbCIsICJqb3VybmFsIiwgIi5qb3VybmFsLmRhdCIsICJqb3VybmFsLmRhdCIsIDAgfTsKKwordm9pZCBlMmZzY2tfbW92ZV9leHQzX2pvdXJuYWwoZTJmc2NrX3QgY3R4KQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGN0eC0+ZnMtPnN1cGVyOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSAJaW5vZGU7CisJZXh0Ml9maWxzeXMJCWZzID0gY3R4LT5mczsKKwlleHQyX2lub190CQlpbm87CisJZXJyY29kZV90CQlyZXR2YWw7CisJY29uc3QgY2hhciAqIGNvbnN0ICoJY3BwOworCWRncnBfdAkJCWdyb3VwOworCWludAkJCW1vdW50X2ZsYWdzOworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCS8qCisJICogSWYgdGhlIGZpbGVzeXN0ZW0gaXMgb3BlbmVkIHJlYWQtb25seSwgb3IgdGhlcmUgaXMgbm8KKwkgKiBqb3VybmFsLCB0aGVuIGRvIG5vdGhpbmcuCisJICovCisJaWYgKChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1JFQURPTkxZKSB8fAorCSAgICAoc2ItPnNfam91cm5hbF9pbnVtID09IDApIHx8CisJICAgICEoc2ItPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBSZWFkIGluIHRoZSBqb3VybmFsIGlub2RlCisJICovCisJaWYgKGV4dDJmc19yZWFkX2lub2RlKGZzLCBzYi0+c19qb3VybmFsX2ludW0sICZpbm9kZSkgIT0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiBpdCdzIG5lY2Vzc2FyeSB0byBiYWNrdXAgdGhlIGpvdXJuYWwgaW5vZGUsIGRvIHNvLgorCSAqLworCWlmICgoc2ItPnNfam5sX2JhY2t1cF90eXBlID09IDApIHx8CisJICAgICgoc2ItPnNfam5sX2JhY2t1cF90eXBlID09IEVYVDNfSk5MX0JBQ0tVUF9CTE9DS1MpICYmCisJICAgICBtZW1jbXAoaW5vZGUuaV9ibG9jaywgc2ItPnNfam5sX2Jsb2NrcywgRVhUMl9OX0JMT0NLUyo0KSkpIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9CQUNLVVBfSk5MLCAmcGN0eCkpIHsKKwkJCW1lbWNweShzYi0+c19qbmxfYmxvY2tzLCBpbm9kZS5pX2Jsb2NrLAorCQkJICAgICAgIEVYVDJfTl9CTE9DS1MqNCk7CisJCQlzYi0+c19qbmxfYmxvY2tzWzE1XSA9IGlub2RlLmlfc2l6ZV9oaWdoOworCQkJc2ItPnNfam5sX2Jsb2Nrc1sxNl0gPSBpbm9kZS5pX3NpemU7CisJCQlzYi0+c19qbmxfYmFja3VwX3R5cGUgPSBFWFQzX0pOTF9CQUNLVVBfQkxPQ0tTOworCQkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQkJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFk7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHRoZSBqb3VybmFsIGlzIGFscmVhZHkgdGhlIGhpZGRlbiBpbm9kZSwgdGhlbiBkbyBub3RoaW5nCisJICovCisJaWYgKHNiLT5zX2pvdXJuYWxfaW51bSA9PSBFWFQyX0pPVVJOQUxfSU5PKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFRoZSBqb3VybmFsIGlub2RlIGhhZCBiZXR0ZXIgaGF2ZSBvbmx5IG9uZSBsaW5rIGFuZCBub3QgYmUgcmVhZGFibGUuCisJICovCisJaWYgKGlub2RlLmlfbGlua3NfY291bnQgIT0gMSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLCBvciB3ZSBjYW4ndCB0ZWxsIHdoZXRoZXIKKwkgKiBvciBub3QgaXQncyBtb3VudGVkLCBkbyBub3RoaW5nLgorCSAqLworCXJldHZhbCA9IGV4dDJmc19jaGVja19pZl9tb3VudGVkKGN0eC0+ZmlsZXN5c3RlbV9uYW1lLCAmbW91bnRfZmxhZ3MpOworCWlmIChyZXR2YWwgfHwgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB3ZSBjYW4ndCBmaW5kIHRoZSBuYW1lIG9mIHRoZSBqb3VybmFsIGlub2RlLCB0aGVuIGRvCisJICogbm90aGluZy4KKwkgKi8KKwlmb3IgKGNwcCA9IGpvdXJuYWxfbmFtZXM7ICpjcHA7IGNwcCsrKSB7CisJCXJldHZhbCA9IGV4dDJmc19sb29rdXAoZnMsIEVYVDJfUk9PVF9JTk8sICpjcHAsCisJCQkJICAgICAgIHN0cmxlbigqY3BwKSwgMCwgJmlubyk7CisJCWlmICgocmV0dmFsID09IDApICYmIChpbm8gPT0gc2ItPnNfam91cm5hbF9pbnVtKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoKmNwcCA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBXZSBuZWVkIHRoZSBpbm9kZSBiaXRtYXAgdG8gYmUgbG9hZGVkICovCisJcmV0dmFsID0gZXh0MmZzX3JlYWRfYml0bWFwcyhmcyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuOworCisJcGN0eC5zdHIgPSAqY3BwOworCWlmICghZml4X3Byb2JsZW0oY3R4LCBQUl8wX01PVkVfSk9VUk5BTCwgJnBjdHgpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIE9LLCB3ZSd2ZSBkb25lIGFsbCB0aGUgY2hlY2tzLCBsZXQncyBhY3R1YWxseSBtb3ZlIHRoZQorCSAqIGpvdXJuYWwgaW5vZGUuICBFcnJvcnMgYXQgdGhpcyBwb2ludCBtZWFuIHdlIG5lZWQgdG8gZm9yY2UKKwkgKiBhbiBleHQyIGZpbGVzeXN0ZW0gY2hlY2suCisJICovCisJaWYgKChyZXR2YWwgPSBleHQyZnNfdW5saW5rKGZzLCBFWFQyX1JPT1RfSU5PLCAqY3BwLCBpbm8sIDApKSAhPSAwKQorCQlnb3RvIGVycl9vdXQ7CisJaWYgKChyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoZnMsIEVYVDJfSk9VUk5BTF9JTk8sICZpbm9kZSkpICE9IDApCisJCWdvdG8gZXJyX291dDsKKwlzYi0+c19qb3VybmFsX2ludW0gPSBFWFQyX0pPVVJOQUxfSU5POworCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwlmcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19NQVNURVJfU0JfT05MWTsKKwlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMDsKKwlpbm9kZS5pX2R0aW1lID0gY3R4LT5ub3c7CisJaWYgKChyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoZnMsIGlubywgJmlub2RlKSkgIT0gMCkKKwkJZ290byBlcnJfb3V0OworCisJZ3JvdXAgPSBleHQyZnNfZ3JvdXBfb2ZfaW5vKGZzLCBpbm8pOworCWV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMihmcy0+aW5vZGVfbWFwLCBpbm8pOworCWV4dDJmc19tYXJrX2liX2RpcnR5KGZzKTsKKwlleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnRfc2V0KGZzLCBncm91cCwgZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50KGZzLCBncm91cCkgKyAxKTsKKwlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgZ3JvdXApOworCWZzLT5zdXBlci0+c19mcmVlX2lub2Rlc19jb3VudCsrOworCXJldHVybjsKKworZXJyX291dDoKKwlwY3R4LmVycmNvZGUgPSByZXR2YWw7CisJZml4X3Byb2JsZW0oY3R4LCBQUl8wX0VSUl9NT1ZFX0pPVVJOQUwsICZwY3R4KTsKKwlmcy0+c3VwZXItPnNfc3RhdGUgJj0gfkVYVDJfVkFMSURfRlM7CisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCXJldHVybjsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGUgc3VwZXJibG9jayBoaW50IGZvciB0aGUgZXh0ZXJuYWwKKyAqIGpvdXJuYWwgaXMgY29ycmVjdC4KKyAqLworaW50IGUyZnNja19maXhfZXh0M19qb3VybmFsX2hpbnQoZTJmc2NrX3QgY3R4KQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGN0eC0+ZnMtPnN1cGVyOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgcGN0eDsKKwljaGFyIHV1aWRbMzddLCAqam91cm5hbF9uYW1lOworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKCEoc2ItPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMKSB8fAorCSAgICB1dWlkX2lzX251bGwoc2ItPnNfam91cm5hbF91dWlkKSkKKyAJCXJldHVybiAwOworCisJdXVpZF91bnBhcnNlKHNiLT5zX2pvdXJuYWxfdXVpZCwgdXVpZCk7CisJam91cm5hbF9uYW1lID0gYmxraWRfZ2V0X2Rldm5hbWUoY3R4LT5ibGtpZCwgIlVVSUQiLCB1dWlkKTsKKwlpZiAoIWpvdXJuYWxfbmFtZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RhdChqb3VybmFsX25hbWUsICZzdCkgPCAwKSB7CisJCWZyZWUoam91cm5hbF9uYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0LnN0X3JkZXYgIT0gc2ItPnNfam91cm5hbF9kZXYpIHsKKwkJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwkJcGN0eC5udW0gPSBzdC5zdF9yZGV2OworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8wX0VYVEVSTkFMX0pPVVJOQUxfSElOVCwgJnBjdHgpKSB7CisJCQlzYi0+c19qb3VybmFsX2RldiA9IHN0LnN0X3JkZXY7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShjdHgtPmZzKTsKKwkJfQorCX0KKworCWZyZWUoam91cm5hbF9uYW1lKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNjay9sb2dmaWxlLmMgYi9lMmZzY2svbG9nZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMDRmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svbG9nZmlsZS5jCkBAIC0wLDAgKzEsNDAwIEBACisvKgorICogbG9nZmlsZS5jIC0tLSBzZXQgdXAgZTJmc2NrIGxvZyBmaWxlcworICoKKyAqIENvcHlyaWdodCAxOTk2LCAxOTk3IGJ5IFRoZW9kb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSAiZTJmc2NrLmgiCisjaW5jbHVkZSA8cHdkLmg+CisKK2V4dGVybiBlMmZzY2tfdCBlMmZzY2tfZ2xvYmFsX2N0eDsgICAvKiBUcnkgeW91ciB2ZXJ5IGJlc3Qgbm90IHRvIHVzZSB0aGlzISAqLworCitzdHJ1Y3Qgc3RyaW5nIHsKKwljaGFyCSpzOworCWludAlsZW47CisJaW50CWVuZDsKK307CisKK3N0YXRpYyB2b2lkIGFsbG9jX3N0cmluZyhzdHJ1Y3Qgc3RyaW5nICpzLCBpbnQgbGVuKQoreworCXMtPnMgPSBtYWxsb2MobGVuKTsKKy8qIGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LCBsZW4sICJsb2dmaWxlIG5hbWUiKTsgKi8KKwlzLT5sZW4gPSBsZW47CisJcy0+ZW5kID0gMDsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZyhzdHJ1Y3Qgc3RyaW5nICpzLCBjb25zdCBjaGFyICphLCBpbnQgbGVuKQoreworCWludCBuZWVkbGVuOworCisJaWYgKCFsZW4pCisJCWxlbiA9IHN0cmxlbihhKTsKKworCW5lZWRsZW4gPSBzLT5lbmQgKyBsZW4gKyAxOworCWlmIChuZWVkbGVuID4gcy0+bGVuKSB7CisJCWNoYXIgKm47CisKKwkJaWYgKHMtPmxlbiAqIDIgPiBuZWVkbGVuKQorCQkJbmVlZGxlbiA9IHMtPmxlbiAqIDI7CisJICAgICAgICBuID0gcmVhbGxvYyhzLT5zLCBuZWVkbGVuKTsKKworCQlpZiAobikgeworCQkJcy0+cyA9IG47CisJCQlzLT5sZW4gPSBuZWVkbGVuOworCQl9IGVsc2UgeworCQkJLyogRG9uJ3QgYXBwZW5kIGlmIHdlIHJhbiBvdXQgb2YgbWVtb3J5ICovCisJCQlyZXR1cm47CisJCX0KKwl9CisJbWVtY3B5KHMtPnMgKyBzLT5lbmQsIGEsIGxlbik7CisJcy0+ZW5kICs9IGxlbjsKKwlzLT5zW3MtPmVuZF0gPSAwOworfQorCisjZGVmaW5lIEZMQUdfVVRDCTB4MDAwMQorCitzdGF0aWMgdm9pZCBleHBhbmRfcGVyY2VudF9leHByZXNzaW9uKGUyZnNja190IGN0eCwgY2hhciBjaCwKKwkJCQkgICAgICBzdHJ1Y3Qgc3RyaW5nICpzLCBpbnQgKmZsYWdzKQoreworCXN0cnVjdCB0bQkqdG0gPSBOVUxMLCB0bV9zdHJ1Y3Q7CisJc3RydWN0IHBhc3N3ZAkqcHcgPSBOVUxMLCBwd19zdHJ1Y3Q7CisJY2hhcgkJKmNwOworCWNoYXIJCWJ1ZlsyNTZdOworCisJaWYgKChjaCA9PSAnRCcpIHx8IChjaCA9PSAnZCcpIHx8IChjaCA9PSAnbScpIHx8IChjaCA9PSAneScpIHx8CisJICAgIChjaCA9PSAnWScpIHx8CisJICAgIChjaCA9PSAnVCcpIHx8IChjaCA9PSAnSCcpIHx8IChjaCA9PSAnTScpIHx8IChjaCA9PSAnUycpKSB7CisJCXR6c2V0KCk7CisJCXRtID0gKCpmbGFncyAmIEZMQUdfVVRDKSA/IGdtdGltZV9yKCZjdHgtPm5vdywgJnRtX3N0cnVjdCkgOgorCQkJbG9jYWx0aW1lX3IoJmN0eC0+bm93LCAmdG1fc3RydWN0KTsKKwl9CisKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnJSc6CisJCWFwcGVuZF9zdHJpbmcocywgIiUiLCAxKTsKKwkJcmV0dXJuOworCWNhc2UgJ2QnOgorCQlzcHJpbnRmKGJ1ZiwgIiUwMmQiLCB0bS0+dG1fbWRheSk7CisJCWJyZWFrOworCWNhc2UgJ0QnOgorCQlzcHJpbnRmKGJ1ZiwgIiVkJTAyZCUwMmQiLCB0bS0+dG1feWVhciArIDE5MDAsIHRtLT50bV9tb24gKyAxLAorCQkJdG0tPnRtX21kYXkpOworCQlicmVhazsKKwljYXNlICdoJzoKKyNpZmRlZiBURVNUX1BST0dSQU0KKwkJc3RyY3B5KGJ1ZiwgInNlcnZlciIpOworI2Vsc2UKKwkJYnVmWzBdID0gMDsKKwkJZ2V0aG9zdG5hbWUoYnVmLCBzaXplb2YoYnVmKSk7CisJCWJ1ZltzaXplb2YoYnVmKS0xXSA9IDA7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSAnSCc6CisJCXNwcmludGYoYnVmLCAiJTAyZCIsIHRtLT50bV9ob3VyKTsKKwkJYnJlYWs7CisJY2FzZSAnbSc6CisJCXNwcmludGYoYnVmLCAiJTAyZCIsIHRtLT50bV9tb24gKyAxKTsKKwkJYnJlYWs7CisJY2FzZSAnTSc6CisJCXNwcmludGYoYnVmLCAiJTAyZCIsIHRtLT50bV9taW4pOworCQlicmVhazsKKwljYXNlICdOJzoJCS8qIGJsb2NrIGRldmljZSBuYW1lICovCisJCWNwID0gc3RycmNocihjdHgtPmZpbGVzeXN0ZW1fbmFtZSwgJy8nKTsKKwkJaWYgKGNwKQorCQkJY3ArKzsKKwkJZWxzZQorCQkJY3AgPSBjdHgtPmZpbGVzeXN0ZW1fbmFtZTsKKwkJYXBwZW5kX3N0cmluZyhzLCBjcCwgMCk7CisJCXJldHVybjsKKwljYXNlICdwJzoKKwkJc3ByaW50ZihidWYsICIlbHUiLCAodW5zaWduZWQgbG9uZykgZ2V0cGlkKCkpOworCQlicmVhazsKKwljYXNlICdzJzoKKwkJc3ByaW50ZihidWYsICIlbHUiLCAodW5zaWduZWQgbG9uZykgY3R4LT5ub3cpOworCQlicmVhazsKKwljYXNlICdTJzoKKwkJc3ByaW50ZihidWYsICIlMDJkIiwgdG0tPnRtX3NlYyk7CisJCWJyZWFrOworCWNhc2UgJ1QnOgorCQlzcHJpbnRmKGJ1ZiwgIiUwMmQlMDJkJTAyZCIsIHRtLT50bV9ob3VyLCB0bS0+dG1fbWluLAorCQkJdG0tPnRtX3NlYyk7CisJCWJyZWFrOworCWNhc2UgJ3UnOgorI2lmZGVmIFRFU1RfUFJPR1JBTQorCQlzdHJjcHkoYnVmLCAidHl0c28iKTsKKwkJYnJlYWs7CisjZWxzZQorI2lmZGVmIEhBVkVfR0VUUFdVSURfUgorCQlnZXRwd3VpZF9yKGdldHVpZCgpLCAmcHdfc3RydWN0LCBidWYsIHNpemVvZihidWYpLCAmcHcpOworI2Vsc2UKKwkJcHcgPSBnZXRwd3VpZChnZXR1aWQoKSk7CisjZW5kaWYKKwkJaWYgKHB3KQorCQkJYXBwZW5kX3N0cmluZyhzLCBwdy0+cHdfbmFtZSwgMCk7CisJCXJldHVybjsKKyNlbmRpZgorCWNhc2UgJ1UnOgorCQkqZmxhZ3MgfD0gRkxBR19VVEM7CisJCXJldHVybjsKKwljYXNlICd5JzoKKwkJc3ByaW50ZihidWYsICIlMDJkIiwgdG0tPnRtX3llYXIgJSAxMDApOworCQlicmVhazsKKwljYXNlICdZJzoKKwkJc3ByaW50ZihidWYsICIlZCIsIHRtLT50bV95ZWFyICsgMTkwMCk7CisJCWJyZWFrOworCX0KKwlhcHBlbmRfc3RyaW5nKHMsIGJ1ZiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4cGFuZF9sb2dmbihlMmZzY2tfdCBjdHgsIGNvbnN0IGNoYXIgKmxvZ19mbiwgc3RydWN0IHN0cmluZyAqcykKK3sKKwljb25zdCBjaGFyCSpjcDsKKwlpbnQJCWk7CisJaW50CQlmbGFncyA9IDA7CisKKwlhbGxvY19zdHJpbmcocywgMTAwKTsKKwlmb3IgKGNwID0gbG9nX2ZuOyAqY3A7IGNwKyspIHsKKwkJaWYgKGNwWzBdID09ICclJykgeworCQkJY3ArKzsKKwkJCWV4cGFuZF9wZXJjZW50X2V4cHJlc3Npb24oY3R4LCAqY3AsIHMsICZmbGFncyk7CisJCQljb250aW51ZTsKKwkJfQorCQlmb3IgKGkgPSAwOyBjcFtpXTsgaSsrKQorCQkJaWYgKGNwW2ldID09ICclJykKKwkJCQlicmVhazsKKwkJYXBwZW5kX3N0cmluZyhzLCBjcCwgaSk7CisJCWNwICs9IGktMTsKKwl9Cit9CisKK3N0YXRpYyBpbnQJb3V0YnVmc2l6ZTsKK3N0YXRpYyB2b2lkCSpvdXRidWY7CisKK3N0YXRpYyBpbnQgZG9fcmVhZChpbnQgZmQpCit7CisJaW50CWM7CisJY2hhcgkJKm47CisJY2hhcglidWZmZXJbNDA5Nl07CisKKwljID0gcmVhZChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKS0xKTsKKwlpZiAoYyA8PSAwKQorCQlyZXR1cm4gYzsKKworCW4gPSByZWFsbG9jKG91dGJ1Ziwgb3V0YnVmc2l6ZSArIGMpOworCWlmIChuKSB7CisJCW91dGJ1ZiA9IG47CisJCW1lbWNweSgoKGNoYXIgKilvdXRidWYpK291dGJ1ZnNpemUsIGJ1ZmZlciwgYyk7CisJCW91dGJ1ZnNpemUgKz0gYzsKKwl9CisJcmV0dXJuIGM7Cit9CisKKy8qCisgKiBGb3JrIGEgY2hpbGQgcHJvY2VzcyB0byBzYXZlIHRoZSBvdXRwdXQgb2YgdGhlIGxvZ2ZpbGUgdW50aWwgdGhlCisgKiBhcHByb3ByaWF0ZSBmaWxlIHN5c3RlbSBpcyBtb3VudGVkIHJlYWQvd3JpdGUuCisgKi8KK3N0YXRpYyBGSUxFICpzYXZlX291dHB1dChjb25zdCBjaGFyICpzMCwgY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworCWludCBjLCBmZCwgZmRzWzJdOworCWNoYXIgKmNwOworCXBpZF90IHBpZDsKKwlGSUxFICpyZXQ7CisKKwlpZiAoczAgJiYgKnMwID09IDApCisJCXMwID0gMDsKKwlpZiAoczEgJiYgKnMxID09IDApCisJCXMxID0gMDsKKwlpZiAoczIgJiYgKnMyID09IDApCisJCXMyID0gMDsKKworCS8qIEF0IGxlYXN0IG9uZSBwb3RlbnRpYWwgb3V0cHV0IGZpbGUgbmFtZSBpcyB2YWxpZCAqLworCWlmICghczAgJiYgIXMxICYmICFzMikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHBpcGUoZmRzKSA8IDApIHsKKwkJcGVycm9yKCJwaXBlIik7CisJCWV4aXQoMSk7CisJfQorCisJcGlkID0gZm9yaygpOworCWlmIChwaWQgPCAwKSB7CisJCXBlcnJvcigiZm9yayIpOworCQlleGl0KDEpOworCX0KKworCWlmIChwaWQgPT0gMCkgeworCQlpZiAoZTJmc2NrX2dsb2JhbF9jdHggJiYgZTJmc2NrX2dsb2JhbF9jdHgtPnByb2dyZXNzX2ZkKQorCQkJY2xvc2UoZTJmc2NrX2dsb2JhbF9jdHgtPnByb2dyZXNzX2ZkKTsKKwkJaWYgKGRhZW1vbigwLCAwKSA8IDApIHsKKwkJCXBlcnJvcigiZGFlbW9uIik7CisJCQlleGl0KDEpOworCQl9CisJCS8qCisJCSAqIEdyYWIgdGhlIG91dHB1dCBmcm9tIG91ciBwYXJlbnQKKwkJICovCisJCWNsb3NlKGZkc1sxXSk7CisJCXdoaWxlIChkb19yZWFkKGZkc1swXSkgPiAwKQorCQkJOworCQljbG9zZShmZHNbMF0pOworCisJCS8qIE9LLCBub3cgbGV0J3MgdHJ5IHRvIG9wZW4gdGhlIG91dHB1dCBmaWxlICovCisJCWZkID0gLTE7CisJCXdoaWxlICgxKSB7CisJCQlpZiAoZmQgPCAwICYmIHMwKQorCQkJCWZkID0gb3BlbihzMCwgT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DLCAwNjQ0KTsKKwkJCWlmIChmZCA8IDAgJiYgczEpCisJCQkJZmQgPSBvcGVuKHMxLCBPX1dST05MWXxPX0NSRUFUfE9fVFJVTkMsIDA2NDQpOworCQkJaWYgKGZkIDwgMCAmJiBzMikKKwkJCQlmZCA9IG9wZW4oczIsIE9fV1JPTkxZfE9fQ1JFQVR8T19UUlVOQywgMDY0NCk7CisJCQlpZiAoZmQgPj0gMCkKKwkJCQlicmVhazsKKwkJCXNsZWVwKDEpOworCQl9CisKKwkJY3AgPSBvdXRidWY7CisJCXdoaWxlIChvdXRidWZzaXplID4gMCkgeworCQkJYyA9IHdyaXRlKGZkLCBjcCwgb3V0YnVmc2l6ZSk7CisJCQlpZiAoYyA8IDApIHsKKwkJCQlpZiAoKGVycm5vID09IEVBR0FJTikgfHwgKGVycm5vID09IEVJTlRSKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQl9CisJCQlvdXRidWZzaXplIC09IGM7CisJCQljcCArPSBjOworCQl9CisJCWV4aXQoMCk7CisJfQorCisJY2xvc2UoZmRzWzBdKTsKKwlyZXQgPSBmZG9wZW4oZmRzWzFdLCAidyIpOworCWlmICghcmV0KQorCQljbG9zZShmZHNbMV0pOworCXJldHVybiByZXQ7Cit9CisKKyNpZm5kZWYgVEVTVF9QUk9HUkFNCit2b2lkIHNldF91cF9sb2dnaW5nKGUyZnNja190IGN0eCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nIHMsIHMxLCBzMjsKKwljaGFyICpzMCA9IDAsICpsb2dfZGlyID0gMCwgKmxvZ19mbiA9IDA7CisJaW50IGxvZ19kaXJfd2FpdCA9IDA7CisKKwlzLnMgPSBzMS5zID0gczIucyA9IDA7CisKKwlwcm9maWxlX2dldF9ib29sZWFuKGN0eC0+cHJvZmlsZSwgIm9wdGlvbnMiLCAibG9nX2Rpcl93YWl0IiwgMCwgMCwKKwkJCSAgICAmbG9nX2Rpcl93YWl0KTsKKwlpZiAoY3R4LT5sb2dfZm4pCisJCWxvZ19mbiA9IHN0cmluZ19jb3B5KGN0eCwgY3R4LT5sb2dfZm4sIDApOworCWVsc2UKKwkJcHJvZmlsZV9nZXRfc3RyaW5nKGN0eC0+cHJvZmlsZSwgIm9wdGlvbnMiLCAibG9nX2ZpbGVuYW1lIiwKKwkJCQkgICAwLCAwLCAmbG9nX2ZuKTsKKwlwcm9maWxlX2dldF9zdHJpbmcoY3R4LT5wcm9maWxlLCAib3B0aW9ucyIsICJsb2dfZGlyIiwgMCwgMCwgJmxvZ19kaXIpOworCisJaWYgKCFsb2dfZm4gfHwgIWxvZ19mblswXSkKKwkJZ290byBvdXQ7CisKKwlleHBhbmRfbG9nZm4oY3R4LCBsb2dfZm4sICZzKTsKKwlpZiAoKGxvZ19mblswXSA9PSAnLycpIHx8ICFsb2dfZGlyIHx8ICFsb2dfZGlyWzBdKQorCQlzMCA9IHMuczsKKworCWlmIChsb2dfZGlyICYmIGxvZ19kaXJbMF0pIHsKKwkJYWxsb2Nfc3RyaW5nKCZzMSwgc3RybGVuKGxvZ19kaXIpICsgc3RybGVuKHMucykgKyAyKTsKKwkJYXBwZW5kX3N0cmluZygmczEsIGxvZ19kaXIsIDApOworCQlhcHBlbmRfc3RyaW5nKCZzMSwgIi8iLCAxKTsKKwkJYXBwZW5kX3N0cmluZygmczEsIHMucywgMCk7CisJfQorCisJZnJlZShsb2dfZGlyKTsKKwlwcm9maWxlX2dldF9zdHJpbmcoY3R4LT5wcm9maWxlLCAib3B0aW9ucyIsICJsb2dfZGlyX2ZhbGxiYWNrIiwgMCwgMCwKKwkJCSAgICZsb2dfZGlyKTsKKwlpZiAobG9nX2RpciAmJiBsb2dfZGlyWzBdKSB7CisJCWFsbG9jX3N0cmluZygmczIsIHN0cmxlbihsb2dfZGlyKSArIHN0cmxlbihzLnMpICsgMik7CisJCWFwcGVuZF9zdHJpbmcoJnMyLCBsb2dfZGlyLCAwKTsKKwkJYXBwZW5kX3N0cmluZygmczIsICIvIiwgMSk7CisJCWFwcGVuZF9zdHJpbmcoJnMyLCBzLnMsIDApOworCQlwcmludGYoIiVzXG4iLCBzMi5zKTsKKwl9CisKKwlpZiAoczApCisJCWN0eC0+bG9nZiA9IGZvcGVuKHMwLCAidyIpOworCWlmICghY3R4LT5sb2dmICYmIHMxLnMpCisJCWN0eC0+bG9nZiA9IGZvcGVuKHMxLnMsICJ3Iik7CisJaWYgKCFjdHgtPmxvZ2YgJiYgczIucykKKwkJY3R4LT5sb2dmID0gZm9wZW4oczIucywgInciKTsKKwlpZiAoIWN0eC0+bG9nZiAmJiBsb2dfZGlyX3dhaXQpCisJCWN0eC0+bG9nZiA9IHNhdmVfb3V0cHV0KHMwLCBzMS5zLCBzMi5zKTsKKworb3V0OgorCWZyZWUocy5zKTsKKwlmcmVlKHMxLnMpOworCWZyZWUoczIucyk7CisJZnJlZShsb2dfZm4pOworCWZyZWUobG9nX2Rpcik7CisJcmV0dXJuOworfQorI2Vsc2UKK3ZvaWQgKmUyZnNja19hbGxvY2F0ZV9tZW1vcnkoZTJmc2NrX3QgY3R4LCB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJCSAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pCit7CisJdm9pZCAqcmV0OworCWNoYXIgYnVmWzI1Nl07CisKKwlyZXQgPSBtYWxsb2Moc2l6ZSk7CisJaWYgKCFyZXQpIHsKKwkJc3ByaW50ZihidWYsICJDYW4ndCBhbGxvY2F0ZSAlc1xuIiwgZGVzY3JpcHRpb24pOworCQlleGl0KDEpOworCX0KKwltZW1zZXQocmV0LCAwLCBzaXplKTsKKwlyZXR1cm4gcmV0OworfQorCitlcnJjb2RlX3QgZTJmc2NrX2FsbG9jYXRlX2NvbnRleHQoZTJmc2NrX3QgKnJldCkKK3sKKwllMmZzY2tfdAljb250ZXh0OworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJKnRpbWVfZW52OworCisJY29udGV4dCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGUyZnNja19zdHJ1Y3QpKTsKKwlpZiAoIWNvbnRleHQpCisJCXJldHVybiBFTk9NRU07CisKKwltZW1zZXQoY29udGV4dCwgMCwgc2l6ZW9mKHN0cnVjdCBlMmZzY2tfc3RydWN0KSk7CisKKwljb250ZXh0LT5ub3cgPSAxMzMyMDA2NDc0OworCisJY29udGV4dC0+ZmlsZXN5c3RlbV9uYW1lID0gIi9kZXYvc2RhMyI7CisJY29udGV4dC0+ZGV2aWNlX25hbWUgPSAiZnNsYWJlbCI7CisKKwkqcmV0ID0gY29udGV4dDsKKwlyZXR1cm4gMDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWUyZnNja190CWN0eDsKKwlzdHJ1Y3Qgc3RyaW5nCXM7CisKKwlwdXRlbnYoIlRaPUVTVCs1OjAwIik7CisJZTJmc2NrX2FsbG9jYXRlX2NvbnRleHQoJmN0eCk7CisJZXhwYW5kX2xvZ2ZuKGN0eCwgImUyZnNjay0lTi4laC4ldS4lRC0lVCIsICZzKTsKKwlwcmludGYoIiVzXG4iLCBzLnMpOworCWZyZWUocy5zKTsKKwlleHBhbmRfbG9nZm4oY3R4LCAiZTJmc2NrLSVOLiVoLiV1LiVZJW0lZC0lSCVNJVMiLCAmcyk7CisJcHJpbnRmKCIlc1xuIiwgcy5zKTsKKwlmcmVlKHMucyk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc2NrL21lc3NhZ2UuYyBiL2UyZnNjay9tZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmNTNmYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9tZXNzYWdlLmMKQEAgLTAsMCArMSw1NjQgQEAKKy8qCisgKiBtZXNzYWdlLmMgLS0tIHByaW50IGUyZnNjayBtZXNzYWdlcyAod2l0aCBjb21wcmVzc2lvbikKKyAqCisgKiBDb3B5cmlnaHQgMTk5NiwgMTk5NyBieSBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqCisgKiBwcmludF9lMmZzY2tfbWVzc2FnZSgpIHByaW50cyBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIsIHVzaW5nCisgKiBjb21wcmVzc2lvbiB0ZWNobmlxdWVzIGFuZCBleHBhbnNpb25zIG9mIGFiYnJldmlhdGlvbnMuCisgKgorICogVGhlIGZvbGxvd2luZyAlIGV4cGFuc2lvbnMgYXJlIHN1cHBvcnRlZDoKKyAqCisgKiAJJWIJPGJsaz4JCQlibG9jayBudW1iZXIKKyAqIAklQgk8YmxrY291bnQ+CQlpbnRlcnByZXQgYmxrY291bnQgYXMgYmxrY291bnQKKyAqIAklYwk8YmxrMj4JCQlibG9jayBudW1iZXIKKyAqIAklRGkJPGRpcmVudD4tPmlubwkJaW5vZGUgbnVtYmVyCisgKiAJJURuCTxkaXJlbnQ+LT5uYW1lCQlzdHJpbmcKKyAqIAklRHIJPGRpcmVudD4tPnJlY19sZW4KKyAqIAklRGwJPGRpcmVudD4tPm5hbWVfbGVuCisgKiAJJUR0CTxkaXJlbnQ+LT5maWxldHlwZQorICogCSVkCTxkaXI+IAkJCWlub2RlIG51bWJlcgorICogCSVnCTxncm91cD4JCQlpbnRlZ2VyCisgKiAJJWkJPGlubz4JCQlpbm9kZSBudW1iZXIKKyAqIAklSXMJPGlub2RlPiAtPiBpX3NpemUKKyAqIAklSVMJPGlub2RlPiAtPiBpX2V4dHJhX2lzaXplCisgKiAJJUliCTxpbm9kZT4gLT4gaV9ibG9ja3MKKyAqIAklSWwJPGlub2RlPiAtPiBpX2xpbmtzX2NvdW50CisgKiAJJUltCTxpbm9kZT4gLT4gaV9tb2RlCisgKiAJJUlNCTxpbm9kZT4gLT4gaV9tdGltZQorICogCSVJRgk8aW5vZGU+IC0+IGlfZmFkZHIKKyAqIAklSWYJPGlub2RlPiAtPiBpX2ZpbGVfYWNsCisgKiAJJUlkCTxpbm9kZT4gLT4gaV9kaXJfYWNsCisgKiAJJUl1CTxpbm9kZT4gLT4gaV91aWQKKyAqIAklSWcJPGlub2RlPiAtPiBpX2dpZAorICoJJUl0CTxpbm9kZSB0eXBlPgorICogCSVqCTxpbm8yPgkJCWlub2RlIG51bWJlcgorICogCSVtCTxjb21fZXJyIGVycm9yIG1lc3NhZ2U+CisgKiAJJU4JPG51bT4KKyAqCSVwCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+CisgKiAJJVAJZXh0MmZzX2dldF9wYXRobmFtZSBvZiA8ZGlyZW50Pi0+aW5vIHdpdGggPGlubzI+IGFzCisgKiAJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuICAoSWYgZGlyZW50IGlzIE5VTEwKKyAqIAkJCXRoZW4gcmV0dXJuIHRoZSBwYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubzI+KQorICogCSVxCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxkaXI+CisgKiAJJVEJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4gd2l0aCA8ZGlyPiBhcworICogCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LgorICogCSVyCTxibGtjb3VudD4JCWludGVycHJldCBibGtjb3VudCBhcyByZWZjb3VudAorICogCSVzCTxzdHI+CQkJbWlzY2VsbGFuZW91cyBzdHJpbmcKKyAqIAklUwliYWNrdXAgc3VwZXJibG9jaworICogCSVYCTxudW0+IGhleGFkZWNpbWFsIGZvcm1hdAorICoKKyAqIFRoZSBmb2xsb3dpbmcgJ0AnIGV4cGFuc2lvbnMgYXJlIHN1cHBvcnRlZDoKKyAqCisgKiAJQGEJZXh0ZW5kZWQgYXR0cmlidXRlCisgKiAJQEEJZXJyb3IgYWxsb2NhdGluZworICogCUBiCWJsb2NrCisgKiAJQEIJYml0bWFwCisgKiAJQGMJY29tcHJlc3MKKyAqIAlAQwljb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrCisgKiAJQEQJZGVsZXRlZAorICogCUBkCWRpcmVjdG9yeQorICogCUBlCWVudHJ5CisgKiAJQEUJRW50cnkgJyVEbicgaW4gJXAgKCVpKQorICogCUBmCWZpbGVzeXN0ZW0KKyAqIAlARglmb3IgQGkgJWkgKCVRKSBpcworICogCUBnCWdyb3VwCisgKiAJQGgJSFRSRUUgZGlyZWN0b3J5IGlub2RlCisgKiAJQGkJaW5vZGUKKyAqIAlASQlpbGxlZ2FsCisgKiAJQGoJam91cm5hbAorICogCUBsCWxvc3QrZm91bmQKKyAqIAlATAlpcyBhIGxpbmsKKyAqCUBtCW11bHRpcGx5LWNsYWltZWQKKyAqCUBuCWludmFsaWQKKyAqIAlAbwlvcnBoYW5lZAorICogCUBwCXByb2JsZW0gaW4KKyAqCUBxCXF1b3RhCisgKiAJQHIJcm9vdCBpbm9kZQorICogCUBzCXNob3VsZCBiZQorICogCUBTCXN1cGVyYmxvY2sKKyAqIAlAdQl1bmF0dGFjaGVkCisgKiAJQHYJZGV2aWNlCisgKglAeAlleHRlbnQKKyAqIAlAegl6ZXJvLWxlbmd0aAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKworI2luY2x1ZGUgImUyZnNjay5oIgorCisjaW5jbHVkZSAicHJvYmxlbS5oIgorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgX0lOTElORV8gX19pbmxpbmVfXworI2Vsc2UKKyNkZWZpbmUgX0lOTElORV8KKyNlbmRpZgorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgYWJicmV2aWF0aW9ucyB1c2VkIGJ5IHRoZSB0ZXh0IHN0cmluZ3MKKyAqIGJlbG93LiAgVGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIGlzIHRoZSBpbmRleCBsZXR0ZXIuICBBbgorICogYWJicmV2aWF0aW9uIG9mIHRoZSBmb3JtICdAPGk+JyBpcyBleHBhbmRlZCBieSBsb29raW5nIHVwIHRoZSBpbmRleAorICogbGV0dGVyIDxpPiBpbiB0aGUgdGFibGUgYmVsb3cuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICphYmJyZXZzW10gPSB7CisJTl8oImFleHRlbmRlZCBhdHRyaWJ1dGUiKSwKKwlOXygiQWVycm9yIGFsbG9jYXRpbmciKSwKKwlOXygiYmJsb2NrIiksCisJTl8oIkJiaXRtYXAiKSwKKwlOXygiY2NvbXByZXNzIiksCisJTl8oIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIiksCisJTl8oImRkaXJlY3RvcnkiKSwKKwlOXygiRGRlbGV0ZWQiKSwKKwlOXygiZWVudHJ5IiksCisJTl8oIkVAZSAnJURuJyBpbiAlcCAoJWkpIiksCisJTl8oImZmaWxlc3lzdGVtIiksCisJTl8oIkZmb3IgQGkgJWkgKCVRKSBpcyIpLAorCU5fKCJnZ3JvdXAiKSwKKwlOXygiaEhUUkVFIEBkIEBpIiksCisJTl8oImlpbm9kZSIpLAorCU5fKCJJaWxsZWdhbCIpLAorCU5fKCJqam91cm5hbCIpLAorCU5fKCJsbG9zdCtmb3VuZCIpLAorCU5fKCJMaXMgYSBsaW5rIiksCisJTl8oIm1tdWx0aXBseS1jbGFpbWVkIiksCisJTl8oIm5pbnZhbGlkIiksCisJTl8oIm9vcnBoYW5lZCIpLAorCU5fKCJwcHJvYmxlbSBpbiIpLAorCU5fKCJxcXVvdGEiKSwKKwlOXygicnJvb3QgQGkiKSwKKwlOXygic3Nob3VsZCBiZSIpLAorCU5fKCJTc3VwZXJAYiIpLAorCU5fKCJ1dW5hdHRhY2hlZCIpLAorCU5fKCJ2ZGV2aWNlIiksCisJTl8oInhleHRlbnQiKSwKKwlOXygienplcm8tbGVuZ3RoIiksCisJIkBAIiwKKwkwCisJfTsKKworLyoKKyAqIEdpdmUgbW9yZSB1c2VyIGZyaWVuZGx5IG5hbWVzIHRvIHRoZSAic3BlY2lhbCIgaW5vZGVzLgorICovCisjZGVmaW5lIG51bV9zcGVjaWFsX2lub2RlcwkxMQorc3RhdGljIGNvbnN0IGNoYXIgKnNwZWNpYWxfaW5vZGVfbmFtZVtdID0KK3sKKwlOXygiPFRoZSBOVUxMIGlub2RlPiIpLAkJCS8qIDAgKi8KKwlOXygiPFRoZSBiYWQgYmxvY2tzIGlub2RlPiIpLAkJLyogMSAqLworCSIvIiwJCQkJCS8qIDIgKi8KKwlOXygiPFRoZSB1c2VyIHF1b3RhIGlub2RlPiIpLAkJLyogMyAqLworCU5fKCI8VGhlIGdyb3VwIHF1b3RhIGlub2RlPiIpLAkJLyogNCAqLworCU5fKCI8VGhlIGJvb3QgbG9hZGVyIGlub2RlPiIpLAkJLyogNSAqLworCU5fKCI8VGhlIHVuZGVsZXRlIGRpcmVjdG9yeSBpbm9kZT4iKSwJLyogNiAqLworCU5fKCI8VGhlIGdyb3VwIGRlc2NyaXB0b3IgaW5vZGU+IiksCS8qIDcgKi8KKwlOXygiPFRoZSBqb3VybmFsIGlub2RlPiIpLAkJLyogOCAqLworCU5fKCI8UmVzZXJ2ZWQgaW5vZGUgOT4iKSwJCS8qIDkgKi8KKwlOXygiPFJlc2VydmVkIGlub2RlIDEwPiIpLAkJLyogMTAgKi8KK307CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgInNhZmUiIHByaW50aW5nLiAgSXQgd2lsbCBjb252ZXJ0IG5vbi1wcmludGFibGUKKyAqIEFTQ0lJIGNoYXJhY3RlcnMgdXNpbmcgJ14nIGFuZCBNLSBub3RhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgc2FmZV9wcmludChGSUxFICpmLCBjb25zdCBjaGFyICpjcCwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyCWNoOworCisJaWYgKGxlbiA8IDApCisJCWxlbiA9IHN0cmxlbihjcCk7CisKKwl3aGlsZSAobGVuLS0pIHsKKwkJY2ggPSAqY3ArKzsKKwkJaWYgKGNoID4gMTI4KSB7CisJCQlmcHV0cygiTS0iLCBmKTsKKwkJCWNoIC09IDEyODsKKwkJfQorCQlpZiAoKGNoIDwgMzIpIHx8IChjaCA9PSAweDdmKSkgeworCQkJZnB1dGMoJ14nLCBmKTsKKwkJCWNoIF49IDB4NDA7IC8qIF5ALCBeQSwgXkI7IF4/IGZvciBERUwgKi8KKwkJfQorCQlmcHV0YyhjaCwgZik7CisJfQorfQorCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByaW50cyBhIHBhdGhuYW1lLCB1c2luZyB0aGUgZXh0MmZzX2dldF9wYXRobmFtZQorICogZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfcGF0aG5hbWUoRklMRSAqZiwgZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgZGlyLAorCQkJICAgZXh0Ml9pbm9fdCBpbm8pCit7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisJY2hhcgkJKnBhdGg7CisKKwlpZiAoIWRpciAmJiAoaW5vIDwgbnVtX3NwZWNpYWxfaW5vZGVzKSkgeworCQlmcHV0cyhfKHNwZWNpYWxfaW5vZGVfbmFtZVtpbm9dKSwgZik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZnMpCisJCXJldHZhbCA9IGV4dDJmc19nZXRfcGF0aG5hbWUoZnMsIGRpciwgaW5vLCAmcGF0aCk7CisJaWYgKCFmcyB8fCByZXR2YWwpCisJCWZwdXRzKCI/Pz8iLCBmKTsKKwllbHNlIHsKKwkJc2FmZV9wcmludChmLCBwYXRoLCAtMSk7CisJCWV4dDJmc19mcmVlX21lbSgmcGF0aCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmludF90aW1lKEZJTEUgKmYsIHRpbWVfdCB0KQoreworCWNvbnN0IGNoYXIgKgkJdGltZV9zdHI7CisJc3RhdGljIGludAkJZG9fZ210ID0gLTE7CisKKyNpZmRlZiBfX2RpZXRsaWJjX18KKwkJLyogVGhlIGRpZXQgbGliYyBkb2Vzbid0IHJlc3BlY3QgdGhlIFRaIGVudmlyb25lbW50IHZhcmlhYmxlICovCisJCWlmIChkb19nbXQgPT0gLTEpIHsKKwkJCXRpbWVfc3RyID0gZ2V0ZW52KCJUWiIpOworCQkJaWYgKCF0aW1lX3N0cikKKwkJCQl0aW1lX3N0ciA9ICIiOworCQkJZG9fZ210ID0gIXN0cmNtcCh0aW1lX3N0ciwgIkdNVCIpIHx8CisJCQkJIXN0cmNtcCh0aW1lX3N0ciwgIkdNVDAiKTsKKwkJfQorI2VuZGlmCisJCXRpbWVfc3RyID0gYXNjdGltZSgoZG9fZ210ID4gMCkgPyBnbXRpbWUoJnQpIDogbG9jYWx0aW1lKCZ0KSk7CisJCWZwcmludGYoZiwgIiUuMjRzIiwgdGltZV9zdHIpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSAnQCcgZXhwYW5zaW9uLiAgV2UgYWxsb3cgcmVjdXJzaXZlCisgKiBleHBhbnNpb247IGFuIEAgZXhwcmVzc2lvbiBjYW4gY29udGFpbiBmdXJ0aGVyICdAJyBhbmQgJyUnCisgKiBleHByZXNzaW9ucy4KKyAqLworc3RhdGljIF9JTkxJTkVfIHZvaWQgZXhwYW5kX2F0X2V4cHJlc3Npb24oRklMRSAqZiwgZTJmc2NrX3QgY3R4LCBjaGFyIGNoLAorCQkJCQkgIHN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHgsCisJCQkJCSAgaW50ICpmaXJzdCwgaW50IHJlY3Vyc2UpCit7CisJY29uc3QgY2hhciAqKmNwcCwgKnN0cjsKKworCS8qIFNlYXJjaCBmb3IgdGhlIGFiYnJldmlhdGlvbiAqLworCWZvciAoY3BwID0gYWJicmV2czsgKmNwcDsgY3BwKyspIHsKKwkJaWYgKGNoID09ICpjcHBbMF0pCisJCQlicmVhazsKKwl9CisJaWYgKCpjcHAgJiYgcmVjdXJzZSA8IDEwKSB7CisJCXN0ciA9IF8oKmNwcCkgKyAxOworCQlpZiAoKmZpcnN0ICYmIGlzbG93ZXIoKnN0cikpIHsKKwkJCSpmaXJzdCA9IDA7CisJCQlmcHV0Yyh0b3VwcGVyKCpzdHIrKyksIGYpOworCQl9CisJCXByaW50X2UyZnNja19tZXNzYWdlKGYsIGN0eCwgc3RyLCBwY3R4LCAqZmlyc3QsIHJlY3Vyc2UrMSk7CisJfSBlbHNlCisJCWZwcmludGYoZiwgIkAlYyIsIGNoKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZXhwYW5kcyAnJUlYJyBleHByZXNzaW9ucworICovCitzdGF0aWMgX0lOTElORV8gdm9pZCBleHBhbmRfaW5vZGVfZXhwcmVzc2lvbihGSUxFICpmLCBleHQyX2ZpbHN5cyBmcywgY2hhciBjaCwKKwkJCQkJICAgICBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IGV4dDJfaW5vZGUJKmlub2RlOworCXN0cnVjdCBleHQyX2lub2RlX2xhcmdlCSpsYXJnZV9pbm9kZTsKKworCWlmICghY3R4IHx8ICFjdHgtPmlub2RlKQorCQlnb3RvIG5vX2lub2RlOworCisJaW5vZGUgPSBjdHgtPmlub2RlOworCWxhcmdlX2lub2RlID0gKHN0cnVjdCBleHQyX2lub2RlX2xhcmdlICopIGlub2RlOworCisJc3dpdGNoIChjaCkgeworCWNhc2UgJ3MnOgorCQlpZiAoTElOVVhfU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJCWZwcmludGYoZiwgIiV1IiwgaW5vZGUtPmlfc2l6ZSk7CisJCWVsc2UgeworI2lmZGVmIEVYVDJfTk9fNjRfVFlQRQorCQkJaWYgKGlub2RlLT5pX3NpemVfaGlnaCkKKwkJCQlmcHJpbnRmKGYsICIweCV4JTA4eCIsIGlub2RlLT5pX3NpemVfaGlnaCwKKwkJCQkJaW5vZGUtPmlfc2l6ZSk7CisJCQllbHNlCisJCQkJZnByaW50ZihmLCAiJXUiLCBpbm9kZS0+aV9zaXplKTsKKyNlbHNlCisJCQlmcHJpbnRmKGYsICIlbGx1IiwgRVhUMl9JX1NJWkUoaW5vZGUpKTsKKyNlbmRpZgorCQl9CisJCWJyZWFrOworCWNhc2UgJ1MnOgorCQlmcHJpbnRmKGYsICIldSIsIGxhcmdlX2lub2RlLT5pX2V4dHJhX2lzaXplKTsKKwkJYnJlYWs7CisJY2FzZSAnYic6CisJCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCQkgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpIAorCQkJZnByaW50ZihmLCAiJWxsdSIsIGlub2RlLT5pX2Jsb2NrcyArCisJCQkJKCgobG9uZyBsb25nKSBpbm9kZS0+b3NkMi5saW51eDIubF9pX2Jsb2Nrc19oaSkKKwkJCQkgPDwgMzIpKTsKKwkJZWxzZQorCQkJZnByaW50ZihmLCAiJXUiLCBpbm9kZS0+aV9ibG9ja3MpOworCQlicmVhazsKKwljYXNlICdsJzoKKwkJZnByaW50ZihmLCAiJWQiLCBpbm9kZS0+aV9saW5rc19jb3VudCk7CisJCWJyZWFrOworCWNhc2UgJ20nOgorCQlmcHJpbnRmKGYsICIwJW8iLCBpbm9kZS0+aV9tb2RlKTsKKwkJYnJlYWs7CisJY2FzZSAnTSc6CisJCXByaW50X3RpbWUoZiwgaW5vZGUtPmlfbXRpbWUpOworCQlicmVhazsKKwljYXNlICdGJzoKKwkJZnByaW50ZihmLCAiJXUiLCBpbm9kZS0+aV9mYWRkcik7CisJCWJyZWFrOworCWNhc2UgJ2YnOgorCQlmcHJpbnRmKGYsICIlbGx1IiwgZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCBpbm9kZSkpOworCQlicmVhazsKKwljYXNlICdkJzoKKwkJZnByaW50ZihmLCAiJXUiLCAoTElOVVhfU19JU0RJUihpbm9kZS0+aV9tb2RlKSA/CisJCQkJICBpbm9kZS0+aV9kaXJfYWNsIDogMCkpOworCQlicmVhazsKKwljYXNlICd1JzoKKwkJZnByaW50ZihmLCAiJWQiLCBpbm9kZV91aWQoKmlub2RlKSk7CisJCWJyZWFrOworCWNhc2UgJ2cnOgorCQlmcHJpbnRmKGYsICIlZCIsIGlub2RlX2dpZCgqaW5vZGUpKTsKKwkJYnJlYWs7CisJY2FzZSAndCc6CisJCWlmIChMSU5VWF9TX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQkJZnB1dHMoXygicmVndWxhciBmaWxlIiksIGYpOworCQllbHNlIGlmIChMSU5VWF9TX0lTRElSKGlub2RlLT5pX21vZGUpKQorCQkJZnB1dHMoXygiZGlyZWN0b3J5IiksIGYpOworCQllbHNlIGlmIChMSU5VWF9TX0lTQ0hSKGlub2RlLT5pX21vZGUpKQorCQkJZnB1dHMoXygiY2hhcmFjdGVyIGRldmljZSIpLCBmKTsKKwkJZWxzZSBpZiAoTElOVVhfU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkKKwkJCWZwdXRzKF8oImJsb2NrIGRldmljZSIpLCBmKTsKKwkJZWxzZSBpZiAoTElOVVhfU19JU0ZJRk8oaW5vZGUtPmlfbW9kZSkpCisJCQlmcHV0cyhfKCJuYW1lZCBwaXBlIiksIGYpOworCQllbHNlIGlmIChMSU5VWF9TX0lTTE5LKGlub2RlLT5pX21vZGUpKQorCQkJZnB1dHMoXygic3ltYm9saWMgbGluayIpLCBmKTsKKwkJZWxzZSBpZiAoTElOVVhfU19JU1NPQ0soaW5vZGUtPmlfbW9kZSkpCisJCQlmcHV0cyhfKCJzb2NrZXQiKSwgZik7CisJCWVsc2UKKwkJCWZwcmludGYoZiwgXygidW5rbm93biBmaWxlIHR5cGUgd2l0aCBtb2RlIDAlbyIpLAorCQkJCWlub2RlLT5pX21vZGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCW5vX2lub2RlOgorCQlmcHJpbnRmKGYsICIlJUklYyIsIGNoKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBleHBhbmRzICclZFgnIGV4cHJlc3Npb25zCisgKi8KK3N0YXRpYyBfSU5MSU5FXyB2b2lkIGV4cGFuZF9kaXJlbnRfZXhwcmVzc2lvbihGSUxFICpmLCBleHQyX2ZpbHN5cyBmcywgY2hhciBjaCwKKwkJCQkJICAgICAgc3RydWN0IHByb2JsZW1fY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeQkqZGlyZW50OworCXVuc2lnbmVkIGludCByZWNfbGVuLCBsZW47CisKKwlpZiAoIWN0eCB8fCAhY3R4LT5kaXJlbnQpCisJCWdvdG8gbm9fZGlyZW50OworCisJZGlyZW50ID0gY3R4LT5kaXJlbnQ7CisKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnaSc6CisJCWZwcmludGYoZiwgIiV1IiwgZGlyZW50LT5pbm9kZSk7CisJCWJyZWFrOworCWNhc2UgJ24nOgorCQlsZW4gPSBkaXJlbnQtPm5hbWVfbGVuICYgMHhGRjsKKwkJaWYgKChleHQyZnNfZ2V0X3JlY19sZW4oZnMsIGRpcmVudCwgJnJlY19sZW4pID09IDApICYmCisJCSAgICAobGVuID4gcmVjX2xlbikpCisJCQlsZW4gPSByZWNfbGVuOworCQlzYWZlX3ByaW50KGYsIGRpcmVudC0+bmFtZSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSAncic6CisJCSh2b2lkKSBleHQyZnNfZ2V0X3JlY19sZW4oZnMsIGRpcmVudCwgJnJlY19sZW4pOworCQlmcHJpbnRmKGYsICIldSIsIHJlY19sZW4pOworCQlicmVhazsKKwljYXNlICdsJzoKKwkJZnByaW50ZihmLCAiJXUiLCBkaXJlbnQtPm5hbWVfbGVuICYgMHhGRik7CisJCWJyZWFrOworCWNhc2UgJ3QnOgorCQlmcHJpbnRmKGYsICIldSIsIGRpcmVudC0+bmFtZV9sZW4gPj4gOCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJbm9fZGlyZW50OgorCQlmcHJpbnRmKGYsICIlJUQlYyIsIGNoKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgX0lOTElORV8gdm9pZCBleHBhbmRfcGVyY2VudF9leHByZXNzaW9uKEZJTEUgKmYsIGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgICAgICAgY2hhciBjaCwgaW50IHdpZHRoLCBpbnQgKmZpcnN0LAorCQkJCQkgICAgICAgc3RydWN0IHByb2JsZW1fY29udGV4dCAqY3R4KQoreworCWUyZnNja190IGUyZnNja19jdHggPSBmcyA/IChlMmZzY2tfdCkgZnMtPnByaXZfZGF0YSA6IE5VTEw7CisJY29uc3QgY2hhciAqbTsKKworCWlmICghY3R4KQorCQlnb3RvIG5vX2NvbnRleHQ7CisKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnJSc6CisJCWZwdXRjKCclJywgZik7CisJCWJyZWFrOworCWNhc2UgJ2InOgorI2lmZGVmIEVYVDJfTk9fNjRfVFlQRQorCQlmcHJpbnRmKGYsICIlKnUiLCB3aWR0aCwgKHVuc2lnbmVkIGxvbmcpIGN0eC0+YmxrKTsKKyNlbHNlCisJCWZwcmludGYoZiwgIiUqbGx1Iiwgd2lkdGgsICh1bnNpZ25lZCBsb25nIGxvbmcpIGN0eC0+YmxrKTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlICdCJzoKKwkJaWYgKGN0eC0+YmxrY291bnQgPT0gQkxPQ0tfQ09VTlRfSU5EKQorCQkJbSA9IF8oImluZGlyZWN0IGJsb2NrIik7CisJCWVsc2UgaWYgKGN0eC0+YmxrY291bnQgPT0gQkxPQ0tfQ09VTlRfRElORCkKKwkJCW0gPSBfKCJkb3VibGUgaW5kaXJlY3QgYmxvY2siKTsKKwkJZWxzZSBpZiAoY3R4LT5ibGtjb3VudCA9PSBCTE9DS19DT1VOVF9USU5EKQorCQkJbSA9IF8oInRyaXBsZSBpbmRpcmVjdCBibG9jayIpOworCQllbHNlIGlmIChjdHgtPmJsa2NvdW50ID09IEJMT0NLX0NPVU5UX1RSQU5TTEFUT1IpCisJCQltID0gXygidHJhbnNsYXRvciBibG9jayIpOworCQllbHNlCisJCQltID0gXygiYmxvY2sgIyIpOworCQlpZiAoKmZpcnN0ICYmIGlzbG93ZXIobVswXSkpCisJCQlmcHV0Yyh0b3VwcGVyKCptKyspLCBmKTsKKwkJZnB1dHMobSwgZik7CisJCWlmIChjdHgtPmJsa2NvdW50ID49IDApIHsKKyNpZmRlZiBFWFQyX05PXzY0X1RZUEUKKwkJCWZwcmludGYoZiwgIiVkIiwgY3R4LT5ibGtjb3VudCk7CisjZWxzZQorCQkJZnByaW50ZihmLCAiJWxsZCIsIChsb25nIGxvbmcpIGN0eC0+YmxrY291bnQpOworI2VuZGlmCisJCX0KKwkJYnJlYWs7CisJY2FzZSAnYyc6CisjaWZkZWYgRVhUMl9OT182NF9UWVBFCisJCWZwcmludGYoZiwgIiUqdSIsIHdpZHRoLCAodW5zaWduZWQgbG9uZykgY3R4LT5ibGsyKTsKKyNlbHNlCisJCWZwcmludGYoZiwgIiUqbGx1Iiwgd2lkdGgsICh1bnNpZ25lZCBsb25nIGxvbmcpIGN0eC0+YmxrMik7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSAnZCc6CisJCWZwcmludGYoZiwgIiUqdSIsIHdpZHRoLCBjdHgtPmRpcik7CisJCWJyZWFrOworCWNhc2UgJ2cnOgorCQlmcHJpbnRmKGYsICIlKnUiLCB3aWR0aCwgY3R4LT5ncm91cCk7CisJCWJyZWFrOworCWNhc2UgJ2knOgorCQlmcHJpbnRmKGYsICIlKnUiLCB3aWR0aCwgY3R4LT5pbm8pOworCQlicmVhazsKKwljYXNlICdqJzoKKwkJZnByaW50ZihmLCAiJSp1Iiwgd2lkdGgsIGN0eC0+aW5vMik7CisJCWJyZWFrOworCWNhc2UgJ20nOgorCQlmcHJpbnRmKGYsICIlKnMiLCB3aWR0aCwgZXJyb3JfbWVzc2FnZShjdHgtPmVycmNvZGUpKTsKKwkJYnJlYWs7CisJY2FzZSAnTic6CisjaWZkZWYgRVhUMl9OT182NF9UWVBFCisJCWZwcmludGYoZiwgIiUqdSIsIHdpZHRoLCBjdHgtPm51bSk7CisjZWxzZQorCQlmcHJpbnRmKGYsICIlKmxsdSIsIHdpZHRoLCAobG9uZyBsb25nKWN0eC0+bnVtKTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlICdwJzoKKwkJcHJpbnRfcGF0aG5hbWUoZiwgZnMsIGN0eC0+aW5vLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAnUCc6CisJCXByaW50X3BhdGhuYW1lKGYsIGZzLCBjdHgtPmlubzIsCisJCQkgICAgICAgY3R4LT5kaXJlbnQgPyBjdHgtPmRpcmVudC0+aW5vZGUgOiAwKTsKKwkJYnJlYWs7CisJY2FzZSAncSc6CisJCXByaW50X3BhdGhuYW1lKGYsIGZzLCBjdHgtPmRpciwgMCk7CisJCWJyZWFrOworCWNhc2UgJ1EnOgorCQlwcmludF9wYXRobmFtZShmLCBmcywgY3R4LT5kaXIsIGN0eC0+aW5vKTsKKwkJYnJlYWs7CisJY2FzZSAncic6CisjaWZkZWYgRVhUMl9OT182NF9UWVBFCisJCWZwcmludGYoZiwgIiUqZCIsIHdpZHRoLCBjdHgtPmJsa2NvdW50KTsKKyNlbHNlCisJCWZwcmludGYoZiwgIiUqbGxkIiwgd2lkdGgsIChsb25nIGxvbmcpIGN0eC0+YmxrY291bnQpOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgJ1MnOgorCQlmcHJpbnRmKGYsICIlbGx1IiwgZ2V0X2JhY2t1cF9zYihOVUxMLCBmcywgTlVMTCwgTlVMTCkpOworCQlicmVhazsKKwljYXNlICdzJzoKKwkJZnByaW50ZihmLCAiJSpzIiwgd2lkdGgsIGN0eC0+c3RyID8gY3R4LT5zdHIgOiAiTlVMTCIpOworCQlicmVhazsKKwljYXNlICd0JzoKKwkJcHJpbnRfdGltZShmLCAodGltZV90KSBjdHgtPm51bSk7CisJCWJyZWFrOworCWNhc2UgJ1QnOgorCQlwcmludF90aW1lKGYsIGUyZnNja19jdHggPyBlMmZzY2tfY3R4LT5ub3cgOiB0aW1lKDApKTsKKwkJYnJlYWs7CisJY2FzZSAneCc6CisJCWZwcmludGYoZiwgIjB4JTAqeCIsIHdpZHRoLCBjdHgtPmNzdW0xKTsKKwkJYnJlYWs7CisJY2FzZSAnWCc6CisjaWZkZWYgRVhUMl9OT182NF9UWVBFCisJCWZwcmludGYoZiwgIjB4JTAqeCIsIHdpZHRoLCBjdHgtPm51bSk7CisjZWxzZQorCQlmcHJpbnRmKGYsICIweCUwKmxseCIsIHdpZHRoLCAobG9uZyBsb25nKWN0eC0+bnVtKTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlICd5JzoKKwkJZnByaW50ZihmLCAiMHglMCp4Iiwgd2lkdGgsIGN0eC0+Y3N1bTIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCW5vX2NvbnRleHQ6CisJCWZwcmludGYoZiwgIiUlJWMiLCBjaCk7CisJCWJyZWFrOworCX0KK30KKwordm9pZCBwcmludF9lMmZzY2tfbWVzc2FnZShGSUxFICpmLCBlMmZzY2tfdCBjdHgsIGNvbnN0IGNoYXIgKm1zZywKKwkJCSAgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCwgaW50IGZpcnN0LAorCQkJICBpbnQgcmVjdXJzZSkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJY29uc3QgY2hhciAqCWNwOworCWludAkJaSwgd2lkdGg7CisKKwllMmZzY2tfY2xlYXJfcHJvZ2JhcihjdHgpOworCWZvciAoY3AgPSBtc2c7ICpjcDsgY3ArKykgeworCQlpZiAoY3BbMF0gPT0gJ0AnKSB7CisJCQljcCsrOworCQkJZXhwYW5kX2F0X2V4cHJlc3Npb24oZiwgY3R4LCAqY3AsIHBjdHgsICZmaXJzdCwKKwkJCQkJICAgICByZWN1cnNlKTsKKwkJfSBlbHNlIGlmIChjcFswXSA9PSAnJScpIHsKKwkJCWNwKys7CisJCQl3aWR0aCA9IDA7CisJCQl3aGlsZSAoaXNkaWdpdChjcFswXSkpIHsKKwkJCQl3aWR0aCA9ICh3aWR0aCAqIDEwKSArIGNwWzBdIC0gJzAnOworCQkJCWNwKys7CisJCQl9CisJCQlpZiAoY3BbMF0gPT0gJ0knKSB7CisJCQkJY3ArKzsKKwkJCQlleHBhbmRfaW5vZGVfZXhwcmVzc2lvbihmLCBmcywgKmNwLCBwY3R4KTsKKwkJCX0gZWxzZSBpZiAoY3BbMF0gPT0gJ0QnKSB7CisJCQkJY3ArKzsKKwkJCQlleHBhbmRfZGlyZW50X2V4cHJlc3Npb24oZiwgZnMsICpjcCwgcGN0eCk7CisJCQl9IGVsc2UgeworCQkJCWV4cGFuZF9wZXJjZW50X2V4cHJlc3Npb24oZiwgZnMsICpjcCwgd2lkdGgsCisJCQkJCQkJICAmZmlyc3QsIHBjdHgpOworCQkJfQorCQl9IGVsc2UgeworCQkJZm9yIChpPTA7IGNwW2ldOyBpKyspCisJCQkJaWYgKChjcFtpXSA9PSAnQCcpIHx8IGNwW2ldID09ICclJykKKwkJCQkJYnJlYWs7CisJCQlmcHJpbnRmKGYsICIlLipzIiwgaSwgY3ApOworCQkJY3AgKz0gaS0xOworCQl9CisJCWZpcnN0ID0gMDsKKwl9Cit9CmRpZmYgLS1naXQgYS9lMmZzY2svbXRyYWNlLmF3ayBiL2UyZnNjay9tdHJhY2UuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOTZiOGEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svbXRyYWNlLmF3awpAQCAtMCwwICsxLDM3IEBACisjIS91c3IvYmluL2F3ayAtZgorIworIyAgQXdrIHByb2dyYW0gdG8gYW5hbHl6ZSBtdHJhY2UuYyBvdXRwdXQuCisjCiskMSA9PSAiKyIJeyBpZiAoYWxsb2NhdGVkWyQyXSAhPSAiIikKKwkJICAgIHByaW50ICIrIiwgJDIsICJBbGxvYyIsIE5SLCAiZHVwbGljYXRlOiIsIGFsbG9jYXRlZFskMl07CisJCSAgZWxzZQorCQkgICAgYWxsb2NhdGVkWyQyXSA9ICQzOworCQl9CiskMSA9PSAiLSIJeyBpZiAoYWxsb2NhdGVkWyQyXSAhPSAiIikgeworCQkgICAgYWxsb2NhdGVkWyQyXSA9ICIiOworCQkgICAgaWYgKGFsbG9jYXRlZFskMl0gIT0gIiIpCisJCQlwcmludCAiREVMRVRFIEZBSUxFRCIsICQyLCBhbGxvY2F0ZWRbJDJdOworCQkgIH0gZWxzZQorCQkgICAgcHJpbnQgIi0iLCAkMiwgIkZyZWUiLCBOUiwgIndhcyBuZXZlciBhbGxvYydkIjsKKwkJfQorJDEgPT0gIjwiCXsgaWYgKGFsbG9jYXRlZFskMl0gIT0gIiIpCisJCSAgICBhbGxvY2F0ZWRbJDJdID0gIiI7CisJCSAgZWxzZQorCQkgICAgcHJpbnQgIi0iLCAkMiwgIlJlYWxsb2MiLCBOUiwgIndhcyBuZXZlciBhbGxvYydkIjsKKwkJfQorJDEgPT0gIj4iCXsgaWYgKGFsbG9jYXRlZFskMl0gIT0gIiIpCisJCSAgICBwcmludCAiKyIsICQyLCAiUmVhbGxvYyIsIE5SLCAiZHVwbGljYXRlOiIsIGFsbG9jYXRlZFskMl07CisJCSAgZWxzZQorCQkgICAgYWxsb2NhdGVkWyQyXSA9ICQzOworCQl9CisKKyMgSWdub3JlICI9IFN0YXJ0IgorJDEgPT0gIj0iCXsgfQorIyBJZ25vcmUgZmFpbGVkIHJlYWxsb2MgYXR0ZW1wdHMgZm9yIG5vdworJDEgPT0gIiEiCXsgfQorCisKK0VORAkJeyBmb3IgKHggaW4gYWxsb2NhdGVkKSAKKwkJICAgIGlmIChhbGxvY2F0ZWRbeF0gIT0gIiIpCisJCSAgICAgIHByaW50ICIrIiwgeCwgYWxsb2NhdGVkW3hdOworCQl9CmRpZmYgLS1naXQgYS9lMmZzY2svbXRyYWNlLmMgYi9lMmZzY2svbXRyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3YjM0YQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9tdHJhY2UuYwpAQCAtMCwwICsxLDE2MCBAQAorLyogTW9yZSBkZWJ1Z2dpbmcgaG9va3MgZm9yIGBtYWxsb2MnLgorICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCQkgV3JpdHRlbiBBcHJpbCAyLCAxOTkxIGJ5IEpvaG4gR2lsbW9yZSBvZiBDeWdudXMgU3VwcG9ydC4KKwkJIEJhc2VkIG9uIG1jaGVjay5jIGJ5IE1pa2UgSGFlcnRlbC4KKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCitMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZgorbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsCitDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAgIFRoZSBhdXRob3IgbWF5IGJlIHJlYWNoZWQgKEVtYWlsKSBhdCB0aGUgYWRkcmVzcyBtaWtlQGFpLm1pdC5lZHUsCisgICBvciAoVVMgbWFpbCkgYXMgTWlrZSBIYWVydGVsIGMvbyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZm5kZWYJX01BTExPQ19JTlRFUk5BTAorI2RlZmluZQlfTUFMTE9DX0lOVEVSTkFMCisjaW5jbHVkZSAiLi9tdHJhY2UuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmbmRlZglfX0dOVV9MSUJSQVJZX18KK2V4dGVybiBjaGFyICpnZXRlbnYgKCk7CisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKK3N0YXRpYyBGSUxFICptYWxsc3RyZWFtOworc3RhdGljIGNoYXIgbWFsbGVudltdPSAiTUFMTE9DX1RSQUNFIjsKK3N0YXRpYyBjaGFyIG1hbGxidWZbQlVGU0laXTsJLyogQnVmZmVyIGZvciB0aGUgb3V0cHV0LiAgKi8KKworLyogQWRkcmVzcyB0byBicmVha3BvaW50IG9uIGFjY2Vzc2VzIHRvLi4uICovCitfX3B0cl90IG1hbGx3YXRjaDsKKworLyogT2xkIGhvb2sgdmFsdWVzLiAgKi8KK3N0YXRpYyB2b2lkICgqdHJfb2xkX2ZyZWVfaG9vaykgX19QICgoX19wdHJfdCBwdHIpKTsKK3N0YXRpYyBfX3B0cl90ICgqdHJfb2xkX21hbGxvY19ob29rKSBfX1AgKChzaXplX3Qgc2l6ZSkpOworc3RhdGljIF9fcHRyX3QgKCp0cl9vbGRfcmVhbGxvY19ob29rKSBfX1AgKChfX3B0cl90IHB0ciwgc2l6ZV90IHNpemUpKTsKKworLyoKKyAqIEFkZGVkIGJ5IFRZVCwgMTAvMTAvOTMgLS0tIHNvIHRoYXQgd2UgY2FuIHByaW50CisgKi8KK0ZJTEUgKm1hbGxvY19nZXRfbWFsbHN0cmVhbSgpCit7CisJcmV0dXJuIG1hbGxzdHJlYW07Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGJsb2NrIGJlaW5nIGFsbG9jJ2QsIHJlYWxsb2MnZCwgb3IKKyAgIGZyZWVkIGhhcyBhbiBhZGRyZXNzIG1hdGNoaW5nIHRoZSB2YXJpYWJsZSAibWFsbHdhdGNoIi4gIEluIGEgZGVidWdnZXIsCisgICBzZXQgIm1hbGx3YXRjaCIgdG8gdGhlIGFkZHJlc3Mgb2YgaW50ZXJlc3QsIHRoZW4gcHV0IGEgYnJlYWtwb2ludCBvbgorICAgdHJfYnJlYWsuICAqLworCit2b2lkIHRyX2JyZWFrIF9fUCAoKHZvaWQpKTsKK3ZvaWQKK3RyX2JyZWFrICgpCit7Cit9CisKK3N0YXRpYyB2b2lkIHRyX2ZyZWVob29rIF9fUCAoKF9fcHRyX3QpKTsKK3N0YXRpYyB2b2lkCit0cl9mcmVlaG9vayAocHRyKQorICAgICBfX3B0cl90IHB0cjsKK3sKKyAgZnByaW50ZiAobWFsbHN0cmVhbSwgIi0gJXBcbiIsIHB0cik7CS8qIEJlIHN1cmUgdG8gcHJpbnQgaXQgZmlyc3QuICAqLworICBpZiAocHRyID09IG1hbGx3YXRjaCkKKyAgICB0cl9icmVhayAoKTsKKyAgX19mcmVlX2hvb2sgPSB0cl9vbGRfZnJlZV9ob29rOworICBmcmVlIChwdHIpOworICBfX2ZyZWVfaG9vayA9IHRyX2ZyZWVob29rOworfQorCitzdGF0aWMgX19wdHJfdCB0cl9tYWxsb2Nob29rIF9fUCAoKHNpemVfdCkpOworc3RhdGljIF9fcHRyX3QKK3RyX21hbGxvY2hvb2sgKHNpemUpCisgICAgIHNpemVfdCBzaXplOworeworICBfX3B0cl90IGhkcjsKKworICBfX21hbGxvY19ob29rID0gdHJfb2xkX21hbGxvY19ob29rOworICBoZHIgPSAoX19wdHJfdCkgbWFsbG9jIChzaXplKTsKKyAgX19tYWxsb2NfaG9vayA9IHRyX21hbGxvY2hvb2s7CisKKyAgLyogV2UgY291bGQgYmUgcHJpbnRpbmcgYSBOVUxMIGhlcmU7IHRoYXQncyBPSy4gICovCisgIGZwcmludGYgKG1hbGxzdHJlYW0sICIrICVwICVkXG4iLCBoZHIsIHNpemUpOworCisgIGlmIChoZHIgPT0gbWFsbHdhdGNoKQorICAgIHRyX2JyZWFrICgpOworCisgIHJldHVybiBoZHI7Cit9CisKK3N0YXRpYyBfX3B0cl90IHRyX3JlYWxsb2Nob29rIF9fUCAoKF9fcHRyX3QsIHNpemVfdCkpOworc3RhdGljIF9fcHRyX3QKK3RyX3JlYWxsb2Nob29rIChwdHIsIHNpemUpCisgICAgIF9fcHRyX3QgcHRyOworICAgICBzaXplX3Qgc2l6ZTsKK3sKKyAgX19wdHJfdCBoZHI7CisKKyAgaWYgKHB0ciA9PSBtYWxsd2F0Y2gpCisgICAgdHJfYnJlYWsgKCk7CisKKyAgX19mcmVlX2hvb2sgPSB0cl9vbGRfZnJlZV9ob29rOworICBfX21hbGxvY19ob29rID0gdHJfb2xkX21hbGxvY19ob29rOworICBfX3JlYWxsb2NfaG9vayA9IHRyX29sZF9yZWFsbG9jX2hvb2s7CisgIGhkciA9IChfX3B0cl90KSByZWFsbG9jIChwdHIsIHNpemUpOworICBfX2ZyZWVfaG9vayA9IHRyX2ZyZWVob29rOworICBfX21hbGxvY19ob29rID0gdHJfbWFsbG9jaG9vazsKKyAgX19yZWFsbG9jX2hvb2sgPSB0cl9yZWFsbG9jaG9vazsKKyAgaWYgKGhkciA9PSBOVUxMKQorICAgIC8qIEZhaWxlZCByZWFsbG9jLiAgKi8KKyAgICBmcHJpbnRmIChtYWxsc3RyZWFtLCAiISAlcCAlZFxuIiwgcHRyLCBzaXplKTsKKyAgZWxzZQorICAgIGZwcmludGYgKG1hbGxzdHJlYW0sICI8ICVwXG4+ICVwICVkXG4iLCBwdHIsIGhkciwgc2l6ZSk7CisKKyAgaWYgKGhkciA9PSBtYWxsd2F0Y2gpCisgICAgdHJfYnJlYWsgKCk7CisKKyAgcmV0dXJuIGhkcjsKK30KKworLyogV2UgZW5hYmxlIHRyYWNpbmcgaWYgZWl0aGVyIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBNQUxMT0NfVFJBQ0UKKyAgIGlzIHNldCwgb3IgaWYgdGhlIHZhcmlhYmxlIG1hbGx3YXRjaCBoYXMgYmVlbiBwYXRjaGVkIHRvIGFuIGFkZHJlc3MKKyAgIHRoYXQgdGhlIGRlYnVnZ2luZyB1c2VyIHdhbnRzIHVzIHRvIHN0b3Agb24uICBXaGVuIHBhdGNoaW5nIG1hbGx3YXRjaCwKKyAgIGRvbid0IGZvcmdldCB0byBzZXQgYSBicmVha3BvaW50IG9uIHRyX2JyZWFrISAgKi8KKwordm9pZAorbXRyYWNlICgpCit7CisgIGNoYXIgKm1hbGxmaWxlOworCisgIG1hbGxmaWxlID0gZ2V0ZW52IChtYWxsZW52KTsKKyAgaWYgKG1hbGxmaWxlICE9IE5VTEwgfHwgbWFsbHdhdGNoICE9IE5VTEwpCisgICAgeworICAgICAgbWFsbHN0cmVhbSA9IGZvcGVuIChtYWxsZmlsZSAhPSBOVUxMID8gbWFsbGZpbGUgOiAiL2Rldi9udWxsIiwgInciKTsKKyAgICAgIGlmIChtYWxsc3RyZWFtICE9IE5VTEwpCisJeworCSAgLyogQmUgc3VyZSBpdCBkb2Vzbid0IG1hbGxvYyBpdHMgYnVmZmVyISAgKi8KKwkgIHNldGJ1ZiAobWFsbHN0cmVhbSwgbWFsbGJ1Zik7CisJICBmcHJpbnRmIChtYWxsc3RyZWFtLCAiPSBTdGFydFxuIik7CisJICB0cl9vbGRfZnJlZV9ob29rID0gX19mcmVlX2hvb2s7CisJICBfX2ZyZWVfaG9vayA9IHRyX2ZyZWVob29rOworCSAgdHJfb2xkX21hbGxvY19ob29rID0gX19tYWxsb2NfaG9vazsKKwkgIF9fbWFsbG9jX2hvb2sgPSB0cl9tYWxsb2Nob29rOworCSAgdHJfb2xkX3JlYWxsb2NfaG9vayA9IF9fcmVhbGxvY19ob29rOworCSAgX19yZWFsbG9jX2hvb2sgPSB0cl9yZWFsbG9jaG9vazsKKwl9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZTJmc2NrL210cmFjZS5oIGIvZTJmc2NrL210cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZDIwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svbXRyYWNlLmgKQEAgLTAsMCArMSwyMzEgQEAKKy8qIERlY2xhcmF0aW9ucyBmb3IgYG1hbGxvYycgYW5kIGZyaWVuZHMuCisgICBDb3B5cmlnaHQgMTk5MCwgMTk5MSwgMTk5MiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwkJICBXcml0dGVuIE1heSAxOTg5IGJ5IE1pa2UgSGFlcnRlbC4KKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCitMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZgorbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsCitDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAgIFRoZSBhdXRob3IgbWF5IGJlIHJlYWNoZWQgKEVtYWlsKSBhdCB0aGUgYWRkcmVzcyBtaWtlQGFpLm1pdC5lZHUsCisgICBvciAoVVMgbWFpbCkgYXMgTWlrZSBIYWVydGVsIGMvbyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAqLworCisjaWZuZGVmIF9NVFJBQ0VfSAorCisjZGVmaW5lIF9NVFJBQ0VfSAkxCisKKyNpZmRlZglfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX2NwbHVzcGx1cykgfHwgKGRlZmluZWQgKF9fU1REQ19fKSAmJiBfX1NURENfXykKKyN1bmRlZglfX1AKKyNkZWZpbmUJX19QKGFyZ3MpCWFyZ3MKKyN1bmRlZglfX3B0cl90CisjZGVmaW5lCV9fcHRyX3QJCXZvaWQgKgorI2Vsc2UgLyogTm90IEMrKyBvciBBTlNJIEMuICAqLworI3VuZGVmCV9fUAorI2RlZmluZQlfX1AoYXJncykJKCkKKyN1bmRlZgljb25zdAorI2RlZmluZQljb25zdAorI3VuZGVmCV9fcHRyX3QKKyNkZWZpbmUJX19wdHJfdAkJY2hhciAqCisjZW5kaWYgLyogQysrIG9yIEFOU0kgQy4gICovCisKKyNpZm5kZWYJTlVMTAorI2RlZmluZQlOVUxMCTAKKyNlbmRpZgorCisjaWZkZWYJX19TVERDX18KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjdW5kZWYJc2l6ZV90CisjZGVmaW5lCXNpemVfdAkJdW5zaWduZWQgaW50CisjdW5kZWYJcHRyZGlmZl90CisjZGVmaW5lCXB0cmRpZmZfdAlpbnQKKyNlbmRpZgorCisKKy8qIEFsbG9jYXRlIFNJWkUgYnl0ZXMgb2YgbWVtb3J5LiAgKi8KK2V4dGVybiBfX3B0cl90IG1hbGxvYyBfX1AgKChzaXplX3QgX19zaXplKSk7CisvKiBSZS1hbGxvY2F0ZSB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgYmxvY2sKKyAgIGluIF9fcHRyX3QsIG1ha2luZyB0aGUgbmV3IGJsb2NrIFNJWkUgYnl0ZXMgbG9uZy4gICovCitleHRlcm4gX19wdHJfdCByZWFsbG9jIF9fUCAoKF9fcHRyX3QgX19wdHIsIHNpemVfdCBfX3NpemUpKTsKKy8qIEFsbG9jYXRlIE5NRU1CIGVsZW1lbnRzIG9mIFNJWkUgYnl0ZXMgZWFjaCwgYWxsIGluaXRpYWxpemVkIHRvIDAuICAqLworZXh0ZXJuIF9fcHRyX3QgY2FsbG9jIF9fUCAoKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKSk7CisvKiBGcmVlIGEgYmxvY2sgYWxsb2NhdGVkIGJ5IGBtYWxsb2MnLCBgcmVhbGxvYycgb3IgYGNhbGxvYycuICAqLworZXh0ZXJuIHZvaWQgZnJlZSBfX1AgKChfX3B0cl90IF9fcHRyKSk7CisKKy8qIEFsbG9jYXRlIFNJWkUgYnl0ZXMgYWxsb2NhdGVkIHRvIEFMSUdOTUVOVCBieXRlcy4gICovCitleHRlcm4gX19wdHJfdCBtZW1hbGlnbiBfX1AgKChzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3NpemUpKTsKKworLyogQWxsb2NhdGUgU0laRSBieXRlcyBvbiBhIHBhZ2UgYm91bmRhcnkuICAqLworZXh0ZXJuIF9fcHRyX3QgdmFsbG9jIF9fUCAoKHNpemVfdCBfX3NpemUpKTsKKworCisjaWZkZWYgX01BTExPQ19JTlRFUk5BTAorCisjaW5jbHVkZSA8c3RkaW8uaD4JCS8qIEhhcm1sZXNzLCBnZXRzIF9fR05VX0xJQlJBUllfXyBkZWZpbmVkLiAgKi8KKworI2lmCWRlZmluZWQoX19HTlVfTElCUkFSWV9fKSB8fCBkZWZpbmVkKFNURENfSEVBREVSUykgfHwgZGVmaW5lZChVU0cpCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2lmbmRlZiBtZW1zZXQKKyNkZWZpbmUJbWVtc2V0KHMsIHplcm8sIG4pCWJ6ZXJvICgocyksIChuKSkKKyNlbmRpZgorI2lmbmRlZiBtZW1jcHkKKyNkZWZpbmUJbWVtY3B5KGQsIHMsIG4pCQliY29weSAoKHMpLCAoZCksIChuKSkKKyNlbmRpZgorI2VuZGlmCisKKworI2lmCWRlZmluZWQoX19HTlVfTElCUkFSWV9fKSB8fCBkZWZpbmVkKF9fU1REQ19fKQorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyNkZWZpbmUJQ0hBUl9CSVQJOAorI2VuZGlmCisKKy8qIFRoZSBhbGxvY2F0b3IgZGl2aWRlcyB0aGUgaGVhcCBpbnRvIGJsb2NrcyBvZiBmaXhlZCBzaXplOyBsYXJnZQorICAgcmVxdWVzdHMgcmVjZWl2ZSBvbmUgb3IgbW9yZSB3aG9sZSBibG9ja3MsIGFuZCBzbWFsbCByZXF1ZXN0cworICAgcmVjZWl2ZSBhIGZyYWdtZW50IG9mIGEgYmxvY2suICBGcmFnbWVudCBzaXplcyBhcmUgcG93ZXJzIG9mIHR3bywKKyAgIGFuZCBhbGwgZnJhZ21lbnRzIG9mIGEgYmxvY2sgYXJlIHRoZSBzYW1lIHNpemUuICBXaGVuIGFsbCB0aGUKKyAgIGZyYWdtZW50cyBpbiBhIGJsb2NrIGhhdmUgYmVlbiBmcmVlZCwgdGhlIGJsb2NrIGl0c2VsZiBpcyBmcmVlZC4gICovCisjZGVmaW5lIElOVF9CSVQJCShDSEFSX0JJVCAqIHNpemVvZihpbnQpKQorI2RlZmluZSBCTE9DS0xPRwkoSU5UX0JJVCA+IDE2ID8gMTIgOiA5KQorI2RlZmluZSBCTE9DS1NJWkUJKDEgPDwgQkxPQ0tMT0cpCisjZGVmaW5lIEJMT0NLSUZZKFNJWkUpCSgoKFNJWkUpICsgQkxPQ0tTSVpFIC0gMSkgLyBCTE9DS1NJWkUpCisKKy8qIERldGVybWluZSB0aGUgYW1vdW50IG9mIG1lbW9yeSBzcGFubmVkIGJ5IHRoZSBpbml0aWFsIGhlYXAgdGFibGUKKyAgIChub3QgYW4gYWJzb2x1dGUgbGltaXQpLiAgKi8KKyNkZWZpbmUgSEVBUAkJKElOVF9CSVQgPiAxNiA/IDQxOTQzMDQgOiA2NTUzNikKKworLyogTnVtYmVyIG9mIGNvbnRpZ3VvdXMgZnJlZSBibG9ja3MgYWxsb3dlZCB0byBidWlsZCB1cCBhdCB0aGUgZW5kIG9mCisgICBtZW1vcnkgYmVmb3JlIHRoZXkgd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgc3lzdGVtLiAgKi8KKyNkZWZpbmUgRklOQUxfRlJFRV9CTE9DS1MJOAorCisvKiBEYXRhIHN0cnVjdHVyZSBnaXZpbmcgcGVyLWJsb2NrIGluZm9ybWF0aW9uLiAgKi8KK3R5cGVkZWYgdW5pb24KKyAgeworICAgIC8qIEhlYXAgaW5mb3JtYXRpb24gZm9yIGEgYnVzeSBibG9jay4gICovCisgICAgc3RydWN0CisgICAgICB7CisJLyogWmVybyBmb3IgYSBsYXJnZSBibG9jaywgb3IgcG9zaXRpdmUgZ2l2aW5nIHRoZQorCSAgIGxvZ2FyaXRobSB0byB0aGUgYmFzZSB0d28gb2YgdGhlIGZyYWdtZW50IHNpemUuICAqLworCWludCB0eXBlOworCXVuaW9uCisJICB7CisJICAgIHN0cnVjdAorCSAgICAgIHsKKwkJc2l6ZV90IG5mcmVlOwkvKiBGcmVlIGZyYWdtZW50cyBpbiBhIGZyYWdtZW50ZWQgYmxvY2suICAqLworCQlzaXplX3QgZmlyc3Q7CS8qIEZpcnN0IGZyZWUgZnJhZ21lbnQgb2YgdGhlIGJsb2NrLiAgKi8KKwkgICAgICB9IGZyYWc7CisJICAgIC8qIFNpemUgKGluIGJsb2Nrcykgb2YgYSBsYXJnZSBjbHVzdGVyLiAgKi8KKwkgICAgc2l6ZV90IHNpemU7CisJICB9IGluZm87CisgICAgICB9IGJ1c3k7CisgICAgLyogSGVhcCBpbmZvcm1hdGlvbiBmb3IgYSBmcmVlIGJsb2NrCisgICAgICAgKHRoYXQgbWF5IGJlIHRoZSBmaXJzdCBvZiBhIGZyZWUgY2x1c3RlcikuICAqLworICAgIHN0cnVjdAorICAgICAgeworCXNpemVfdCBzaXplOwkJLyogU2l6ZSAoaW4gYmxvY2tzKSBvZiBhIGZyZWUgY2x1c3Rlci4gICovCisJc2l6ZV90IG5leHQ7CQkvKiBJbmRleCBvZiBuZXh0IGZyZWUgY2x1c3Rlci4gICovCisJc2l6ZV90IHByZXY7CQkvKiBJbmRleCBvZiBwcmV2aW91cyBmcmVlIGNsdXN0ZXIuICAqLworICAgICAgfSBmcmVlOworICB9IG1hbGxvY19pbmZvOworCisvKiBQb2ludGVyIHRvIGZpcnN0IGJsb2NrIG9mIHRoZSBoZWFwLiAgKi8KK2V4dGVybiBjaGFyICpfaGVhcGJhc2U7CisKKy8qIFRhYmxlIGluZGV4ZWQgYnkgYmxvY2sgbnVtYmVyIGdpdmluZyBwZXItYmxvY2sgaW5mb3JtYXRpb24uICAqLworZXh0ZXJuIG1hbGxvY19pbmZvICpfaGVhcGluZm87CisKKy8qIEFkZHJlc3MgdG8gYmxvY2sgbnVtYmVyIGFuZCB2aWNlIHZlcnNhLiAgKi8KKyNkZWZpbmUgQkxPQ0soQSkJKCgoY2hhciAqKSAoQSkgLSBfaGVhcGJhc2UpIC8gQkxPQ0tTSVpFICsgMSkKKyNkZWZpbmUgQUREUkVTUyhCKQkoKF9fcHRyX3QpICgoKEIpIC0gMSkgKiBCTE9DS1NJWkUgKyBfaGVhcGJhc2UpKQorCisvKiBDdXJyZW50IHNlYXJjaCBpbmRleCBmb3IgdGhlIGhlYXAgdGFibGUuICAqLworZXh0ZXJuIHNpemVfdCBfaGVhcGluZGV4OworCisvKiBMaW1pdCBvZiB2YWxpZCBpbmZvIHRhYmxlIGluZGljZXMuICAqLworZXh0ZXJuIHNpemVfdCBfaGVhcGxpbWl0OworCisvKiBEb3VibHkgbGlua2VkIGxpc3RzIG9mIGZyZWUgZnJhZ21lbnRzLiAgKi8KK3N0cnVjdCBsaXN0CisgIHsKKyAgICBzdHJ1Y3QgbGlzdCAqbmV4dDsKKyAgICBzdHJ1Y3QgbGlzdCAqcHJldjsKKyAgfTsKKworLyogRnJlZSBsaXN0IGhlYWRlcnMgZm9yIGVhY2ggZnJhZ21lbnQgc2l6ZS4gICovCitleHRlcm4gc3RydWN0IGxpc3QgX2ZyYWdoZWFkW107CisKKy8qIExpc3Qgb2YgYmxvY2tzIGFsbG9jYXRlZCB3aXRoIGBtZW1hbGlnbicgKG9yIGB2YWxsb2MnKS4gICovCitzdHJ1Y3QgYWxpZ25saXN0CisgIHsKKyAgICBzdHJ1Y3QgYWxpZ25saXN0ICpuZXh0OworICAgIF9fcHRyX3QgYWxpZ25lZDsJCS8qIFRoZSBhZGRyZXNzIHRoYXQgbWVtYWxpZ25lZCByZXR1cm5lZC4gICovCisgICAgX19wdHJfdCBleGFjdDsJCS8qIFRoZSBhZGRyZXNzIHRoYXQgbWFsbG9jIHJldHVybmVkLiAgKi8KKyAgfTsKK2V4dGVybiBzdHJ1Y3QgYWxpZ25saXN0ICpfYWxpZ25lZF9ibG9ja3M7CisKKy8qIEluc3RydW1lbnRhdGlvbi4gICovCitleHRlcm4gc2l6ZV90IF9jaHVua3NfdXNlZDsKK2V4dGVybiBzaXplX3QgX2J5dGVzX3VzZWQ7CitleHRlcm4gc2l6ZV90IF9jaHVua3NfZnJlZTsKK2V4dGVybiBzaXplX3QgX2J5dGVzX2ZyZWU7CisKKy8qIEludGVybmFsIHZlcnNpb24gb2YgYGZyZWUnIHVzZWQgaW4gYG1vcmVjb3JlJyAobWFsbG9jLmMpLiAqLworZXh0ZXJuIHZvaWQgX2ZyZWVfaW50ZXJuYWwgX19QICgoX19wdHJfdCBfX3B0cikpOworCisjZW5kaWYgLyogX01BTExPQ19JTlRFUk5BTC4gICovCisKKy8qIFVuZGVybHlpbmcgYWxsb2NhdGlvbiBmdW5jdGlvbjsgc3VjY2Vzc2l2ZSBjYWxscyBzaG91bGQKKyAgIHJldHVybiBjb250aWd1b3VzIHBpZWNlcyBvZiBtZW1vcnkuICAqLworZXh0ZXJuIF9fcHRyX3QgKCpfX21vcmVjb3JlKSBfX1AgKChwdHJkaWZmX3QgX19zaXplKSk7CisKKy8qIERlZmF1bHQgdmFsdWUgb2YgYF9fbW9yZWNvcmUnLiAgKi8KK2V4dGVybiBfX3B0cl90IF9fZGVmYXVsdF9tb3JlY29yZSBfX1AgKChwdHJkaWZmX3QgX19zaXplKSk7CisKKy8qIE5vbnplcm8gaWYgYG1hbGxvYycgaGFzIGJlZW4gY2FsbGVkIGFuZCBkb25lIGl0cyBpbml0aWFsaXphdGlvbi4gICovCitleHRlcm4gaW50IF9fbWFsbG9jX2luaXRpYWxpemVkOworCisvKiBIb29rcyBmb3IgZGVidWdnaW5nIHZlcnNpb25zLiAgKi8KK2V4dGVybiB2b2lkICgqX19mcmVlX2hvb2spIF9fUCAoKF9fcHRyX3QgX19wdHIpKTsKK2V4dGVybiBfX3B0cl90ICgqX19tYWxsb2NfaG9vaykgX19QICgoc2l6ZV90IF9fc2l6ZSkpOworZXh0ZXJuIF9fcHRyX3QgKCpfX3JlYWxsb2NfaG9vaykgX19QICgoX19wdHJfdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSkpOworCisvKiBBY3RpdmF0ZSBhIHN0YW5kYXJkIGNvbGxlY3Rpb24gb2YgZGVidWdnaW5nIGhvb2tzLiAgKi8KK2V4dGVybiB2b2lkIG1jaGVjayBfX1AgKCh2b2lkICgqX19mdW5jKSBfX1AgKCh2b2lkKSkpKTsKKworLyogQWN0aXZhdGUgYSBzdGFuZGFyZCBjb2xsZWN0aW9uIG9mIHRyYWNpbmcgaG9va3MuICAqLworZXh0ZXJuIHZvaWQgbXRyYWNlIF9fUCAoKHZvaWQpKTsKKworLyogU3RhdGlzdGljcyBhdmFpbGFibGUgdG8gdGhlIHVzZXIuICAqLworc3RydWN0IG1zdGF0cworICB7CisgICAgc2l6ZV90IGJ5dGVzX3RvdGFsOwkJLyogVG90YWwgc2l6ZSBvZiB0aGUgaGVhcC4gKi8KKyAgICBzaXplX3QgY2h1bmtzX3VzZWQ7CQkvKiBDaHVua3MgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyLiAqLworICAgIHNpemVfdCBieXRlc191c2VkOwkJLyogQnl0ZSB0b3RhbCBvZiB1c2VyLWFsbG9jYXRlZCBjaHVua3MuICovCisgICAgc2l6ZV90IGNodW5rc19mcmVlOwkJLyogQ2h1bmtzIGluIHRoZSBmcmVlIGxpc3QuICovCisgICAgc2l6ZV90IGJ5dGVzX2ZyZWU7CQkvKiBCeXRlIHRvdGFsIG9mIGNodW5rcyBpbiB0aGUgZnJlZSBsaXN0LiAqLworICB9OworCisvKiBQaWNrIHVwIHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuICovCitleHRlcm4gc3RydWN0IG1zdGF0cyBtc3RhdHMgX19QICgodm9pZCkpOworCisjaWZkZWYJX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogbXRyYWNlLmggICovCmRpZmYgLS1naXQgYS9lMmZzY2svcGFzczEuYyBiL2UyZnNjay9wYXNzMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZjQ4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svcGFzczEuYwpAQCAtMCwwICsxLDMxMTkgQEAKKy8qCisgKiBwYXNzMS5jIC0tIHBhc3MgIzEgb2YgZTJmc2NrOiBzZXF1ZW50aWFsIHNjYW4gb2YgdGhlIGlub2RlIHRhYmxlCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqCisgKiBQYXNzIDEgb2YgZTJmc2NrIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBpbm9kZXMgaW4gdGhlIGZpbGVzeXN0ZW1zLAorICogYW5kIGFwcGxpZXMgdGhlIGZvbGxvd2luZyB0ZXN0cyB0byBlYWNoIGlub2RlOgorICoKKyAqIAktIFRoZSBtb2RlIGZpZWxkIG9mIHRoZSBpbm9kZSBtdXN0IGJlIGxlZ2FsLgorICogCS0gVGhlIHNpemUgYW5kIGJsb2NrIGNvdW50IGZpZWxkcyBvZiB0aGUgaW5vZGUgYXJlIGNvcnJlY3QuCisgKiAJLSBBIGRhdGEgYmxvY2sgbXVzdCBub3QgYmUgdXNlZCBieSBhbm90aGVyIGlub2RlCisgKgorICogUGFzcyAxIGFsc28gZ2F0aGVycyB0aGUgY29sbGVjdHMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKyAqCisgKiAJLSBBIGJpdG1hcCBvZiB3aGljaCBpbm9kZXMgYXJlIGluIHVzZS4JCShpbm9kZV91c2VkX21hcCkKKyAqIAktIEEgYml0bWFwIG9mIHdoaWNoIGlub2RlcyBhcmUgZGlyZWN0b3JpZXMuCShpbm9kZV9kaXJfbWFwKQorICogCS0gQSBiaXRtYXAgb2Ygd2hpY2ggaW5vZGVzIGFyZSByZWd1bGFyIGZpbGVzLgkoaW5vZGVfcmVnX21hcCkKKyAqIAktIEEgYml0bWFwIG9mIHdoaWNoIGlub2RlcyBoYXZlIGJhZCBmaWVsZHMuCShpbm9kZV9iYWRfbWFwKQorICogCS0gQSBiaXRtYXAgb2Ygd2hpY2ggaW5vZGVzIGFyZSBpbiBiYWQgYmxvY2tzLgkoaW5vZGVfYmJfbWFwKQorICogCS0gQSBiaXRtYXAgb2Ygd2hpY2ggaW5vZGVzIGFyZSBpbWFnaWMgaW5vZGVzLgkoaW5vZGVfaW1hZ2ljX21hcCkKKyAqIAktIEEgYml0bWFwIG9mIHdoaWNoIGJsb2NrcyBhcmUgaW4gdXNlLgkJKGJsb2NrX2ZvdW5kX21hcCkKKyAqIAktIEEgYml0bWFwIG9mIHdoaWNoIGJsb2NrcyBhcmUgaW4gdXNlIGJ5IHR3byBpbm9kZXMJKGJsb2NrX2R1cF9tYXApCisgKiAJLSBUaGUgZGF0YSBibG9ja3Mgb2YgdGhlIGRpcmVjdG9yeSBpbm9kZXMuCShkaXJfbWFwKQorICoKKyAqIFBhc3MgMSBpcyBkZXNpZ25lZCB0byBzdGFzaCBhd2F5IGVub3VnaCBpbmZvcm1hdGlvbiBzbyB0aGF0IHRoZQorICogb3RoZXIgcGFzc2VzIHNob3VsZCBub3QgbmVlZCB0byByZWFkIGluIHRoZSBpbm9kZSBpbmZvcm1hdGlvbgorICogZHVyaW5nIHRoZSBub3JtYWwgY291cnNlIG9mIGEgZmlsZXN5c3RlbSBjaGVjay4gIChBbHRob2doIGlmIGFuCisgKiBpbmNvbnNpc3RlbmN5IGlzIGRldGVjdGVkLCBvdGhlciBwYXNzZXMgbWF5IG5lZWQgdG8gcmVhZCBpbiBhbgorICogaW5vZGUgdG8gZml4IGl0LikKKyAqCisgKiBOb3RlIHRoYXQgcGFzcyAxQiB3aWxsIGJlIGludm9rZWQgaWYgdGhlcmUgYXJlIGFueSBkdXBsaWNhdGUgYmxvY2tzCisgKiBmb3VuZC4KKyAqLworCisjZGVmaW5lIF9HTlVfU09VUkNFIDEgLyogZ2V0IHN0cm5sZW4oKSAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJlMmZzY2suaCIKKyNpbmNsdWRlIDxleHQyZnMvZXh0Ml9leHRfYXR0ci5oPgorCisjaW5jbHVkZSAicHJvYmxlbS5oIgorCisjaWZkZWYgTk9fSU5MSU5FX0ZVTkNTCisjZGVmaW5lIF9JTkxJTkVfCisjZWxzZQorI2RlZmluZSBfSU5MSU5FXyBpbmxpbmUKKyNlbmRpZgorCitzdGF0aWMgaW50IHByb2Nlc3NfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QJKmJsb2NrbnIsCisJCQkgZTJfYmxrY250X3QgYmxvY2tjbnQsIGJsazY0X3QgcmVmX2JsaywKKwkJCSBpbnQgcmVmX29mZnNldCwgdm9pZCAqcHJpdl9kYXRhKTsKK3N0YXRpYyBpbnQgcHJvY2Vzc19iYWRfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgKmJsb2NrX25yLAorCQkJICAgICBlMl9ibGtjbnRfdCBibG9ja2NudCwgYmxrNjRfdCByZWZfYmxrLAorCQkJICAgICBpbnQgcmVmX29mZnNldCwgdm9pZCAqcHJpdl9kYXRhKTsKK3N0YXRpYyB2b2lkIGNoZWNrX2Jsb2NrcyhlMmZzY2tfdCBjdHgsIHN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHgsCisJCQkgY2hhciAqYmxvY2tfYnVmKTsKK3N0YXRpYyB2b2lkIG1hcmtfdGFibGVfYmxvY2tzKGUyZnNja190IGN0eCk7CitzdGF0aWMgdm9pZCBhbGxvY19iYl9tYXAoZTJmc2NrX3QgY3R4KTsKK3N0YXRpYyB2b2lkIGFsbG9jX2ltYWdpY19tYXAoZTJmc2NrX3QgY3R4KTsKK3N0YXRpYyB2b2lkIG1hcmtfaW5vZGVfYmFkKGUyZnNja190IGN0eCwgaW5vX3QgaW5vKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9mc19iYWRfYmxvY2tzKGUyZnNja190IGN0eCk7CitzdGF0aWMgdm9pZCBwcm9jZXNzX2lub2RlcyhlMmZzY2tfdCBjdHgsIGNoYXIgKmJsb2NrX2J1Zik7CitzdGF0aWMgRVhUMl9RU09SVF9UWVBFIHByb2Nlc3NfaW5vZGVfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOworc3RhdGljIGVycmNvZGVfdCBzY2FuX2NhbGxiYWNrKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub2RlX3NjYW4gc2NhbiwKKwkJCQkgIGRncnBfdCBncm91cCwgdm9pZCAqIHByaXZfZGF0YSk7CitzdGF0aWMgdm9pZCBhZGp1c3RfZXh0YXR0cl9yZWZjb3VudChlMmZzY2tfdCBjdHgsIGV4dDJfcmVmY291bnRfdCByZWZjb3VudCwKKwkJCQkgICAgY2hhciAqYmxvY2tfYnVmLCBpbnQgYWRqdXN0X3NpZ24pOworLyogc3RhdGljIGNoYXIgKmRlc2NyaWJlX2lsbGVnYWxfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxvY2spOyAqLworCitzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgeworCWV4dDJfaW5vX3QJaW5vOworCXVuc2lnbmVkCWlzX2RpcjoxLCBpc19yZWc6MSwgY2xlYXI6MSwgc3VwcHJlc3M6MSwKKwkJCQlmcmFnbWVudGVkOjEsIGNvbXByZXNzZWQ6MSwgYmJjaGVjazoxLAorCQkJCWlub2RlX21vZGlmaWVkOjE7CisJYmxrNjRfdAkJbnVtX2Jsb2NrczsKKwlibGs2NF90CQltYXhfYmxvY2tzOworCWUyX2Jsa2NudF90CWxhc3RfYmxvY2s7CisJZTJfYmxrY250X3QJbGFzdF9pbml0X2xibG9jazsKKwllMl9ibGtjbnRfdAlsYXN0X2RiX2Jsb2NrOworCWludAkJbnVtX2lsbGVnYWxfYmxvY2tzOworCWJsazY0X3QJCXByZXZpb3VzX2Jsb2NrOworCXN0cnVjdCBleHQyX2lub2RlICppbm9kZTsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4OworCWV4dDJmc19ibG9ja19iaXRtYXAgZnNfbWV0YV9ibG9ja3M7CisJZTJmc2NrX3QJY3R4OworfTsKKworc3RydWN0IHByb2Nlc3NfaW5vZGVfYmxvY2sgeworCWV4dDJfaW5vX3QgaW5vOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworfTsKKworc3RydWN0IHNjYW5fY2FsbGJhY2tfc3RydWN0IHsKKwllMmZzY2tfdAljdHg7CisJY2hhcgkJKmJsb2NrX2J1ZjsKK307CisKKy8qCisgKiBGb3IgdGhlIGlub2RlcyB0byBwcm9jZXNzIGxpc3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHJvY2Vzc19pbm9kZV9ibG9jayAqaW5vZGVzX3RvX3Byb2Nlc3M7CitzdGF0aWMgaW50IHByb2Nlc3NfaW5vZGVfY291bnQ7CisKK3N0YXRpYyBfX3U2NCBleHQyX21heF9zaXplc1tFWFQyX01BWF9CTE9DS19MT0dfU0laRSAtCisJCQkgICAgRVhUMl9NSU5fQkxPQ0tfTE9HX1NJWkUgKyAxXTsKKworLyoKKyAqIEZyZWUgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgcGFzczEgaW4gcHJlcGFyYXRpb24gZm9yIHJlc3RhcnRpbmcKKyAqIHRoaW5ncy4KKyAqLworc3RhdGljIHZvaWQgdW53aW5kX3Bhc3MxKGV4dDJfZmlsc3lzIGZzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlleHQyZnNfZnJlZV9tZW0oJmlub2Rlc190b19wcm9jZXNzKTsKKwlpbm9kZXNfdG9fcHJvY2VzcyA9IDA7Cit9CisKKy8qCisgKiBDaGVjayB0byBtYWtlIHN1cmUgYSBkZXZpY2UgaW5vZGUgaXMgcmVhbC4gIFJldHVybnMgMSBpZiB0aGUgZGV2aWNlCisgKiBjaGVja3Mgb3V0LCAwIGlmIG5vdC4KKyAqCisgKiBOb3RlOiB0aGlzIHJvdXRpbmUgaXMgbm93IGFsc28gdXNlZCB0byBjaGVjayBGSUZPJ3MgYW5kIFNvY2tldHMsCisgKiBzaW5jZSB0aGV5IGhhdmUgdGhlIHNhbWUgcmVxdWlyZW1lbnQ7IHRoZSBpX2Jsb2NrIGZpZWxkcyBzaG91bGQgYmUKKyAqIHplcm8uCisgKi8KK2ludCBlMmZzY2tfcGFzczFfY2hlY2tfZGV2aWNlX2lub2RlKGV4dDJfZmlsc3lzIGZzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQkgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKQoreworCWludAlpOworCisJLyoKKwkgKiBJZiB0aGUgaW5kZXggZmxhZyBpcyBzZXQsIHRoZW4gdGhpcyBpcyBhIGJvZ3VzCisJICogZGV2aWNlL2ZpZm8vc29ja2V0CisJICovCisJaWYgKGlub2RlLT5pX2ZsYWdzICYgRVhUMl9JTkRFWF9GTCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIHRoZSB0ZXN0IGJlbG93IGFsbCB0aGUgdGltZSwgYnV0CisJICogYmVjYXVzZSB0aGUga2VybmVsIGRvZXNuJ3QgZm9yY2libHkgY2xlYXIgdGhlIGRldmljZQorCSAqIGlub2RlJ3MgYWRkaXRpb25hbCBpX2Jsb2NrIGZpZWxkcywgdGhlcmUgYXJlIHNvbWUgcmFyZQorCSAqIG9jY2FzaW9ucyB3aGVuIGEgbGVnaXRpbWF0ZSBkZXZpY2UgaW5vZGUgd2lsbCBoYXZlIG5vbi16ZXJvCisJICogYWRkaXRpb25hbCBpX2Jsb2NrIGZpZWxkcy4gIFNvIGZvciBub3csIHdlIG9ubHkgY29tcGxhaW4KKwkgKiB3aGVuIHRoZSBpbW11dGFibGUgZmxhZyBpcyBzZXQsIHdoaWNoIHNob3VsZCBuZXZlciBoYXBwZW4KKwkgKiBmb3IgZGV2aWNlcy4gIChBbmQgdGhhdCdzIHdoZW4gdGhlIHByb2JsZW0gaXMgY2F1c2VkLCBzaW5jZQorCSAqIHlvdSBjYW4ndCBzZXQgb3IgY2xlYXIgaW1tdXRhYmxlIGZsYWdzIGZvciBkZXZpY2VzLikgIE9uY2UKKwkgKiB0aGUga2VybmVsIGhhcyBiZWVuIGZpeGVkIHdlIGNhbiBjaGFuZ2UgdGhpcy4uLgorCSAqLworCWlmIChpbm9kZS0+aV9mbGFncyAmIChFWFQyX0lNTVVUQUJMRV9GTCB8IEVYVDJfQVBQRU5EX0ZMKSkgeworCQlmb3IgKGk9NDsgaSA8IEVYVDJfTl9CTE9DS1M7IGkrKykKKwkJCWlmIChpbm9kZS0+aV9ibG9ja1tpXSkKKwkJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBDaGVjayB0byBtYWtlIHN1cmUgYSBzeW1saW5rIGlub2RlIGlzIHJlYWwuICBSZXR1cm5zIDEgaWYgdGhlIHN5bWxpbmsKKyAqIGNoZWNrcyBvdXQsIDAgaWYgbm90LgorICovCitpbnQgZTJmc2NrX3Bhc3MxX2NoZWNrX3N5bWxpbmsoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwgY2hhciAqYnVmKQoreworCXVuc2lnbmVkIGludCBsZW47CisJaW50IGk7CisJYmxrNjRfdAlibG9ja3M7CisJZXh0Ml9leHRlbnRfaGFuZGxlX3QJaGFuZGxlOworCXN0cnVjdCBleHQyX2V4dGVudF9pbmZvCWluZm87CisJc3RydWN0IGV4dDJmc19leHRlbnQJZXh0ZW50OworCisJaWYgKChpbm9kZS0+aV9zaXplX2hpZ2ggfHwgaW5vZGUtPmlfc2l6ZSA9PSAwKSB8fAorCSAgICAoaW5vZGUtPmlfZmxhZ3MgJiBFWFQyX0lOREVYX0ZMKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaW5vZGUtPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpIHsKKwkJaWYgKGlub2RlLT5pX3NpemUgPiBmcy0+YmxvY2tzaXplKQorCQkJcmV0dXJuIDA7CisJCWlmIChleHQyZnNfZXh0ZW50X29wZW4yKGZzLCBpbm8sIGlub2RlLCAmaGFuZGxlKSkKKwkJCXJldHVybiAwOworCQlpID0gMDsKKwkJaWYgKGV4dDJmc19leHRlbnRfZ2V0X2luZm8oaGFuZGxlLCAmaW5mbykgfHwKKwkJICAgIChpbmZvLm51bV9lbnRyaWVzICE9IDEpIHx8CisJCSAgICAoaW5mby5tYXhfZGVwdGggIT0gMCkpCisJCQlnb3RvIGV4aXRfZXh0ZW50OworCQlpZiAoZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBFWFQyX0VYVEVOVF9ST09ULCAmZXh0ZW50KSB8fAorCQkgICAgKGV4dGVudC5lX2xibGsgIT0gMCkgfHwKKwkJICAgIChleHRlbnQuZV9sZW4gIT0gMSkgfHwKKwkJICAgIChleHRlbnQuZV9wYmxrIDwgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spIHx8CisJCSAgICAoZXh0ZW50LmVfcGJsayA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpKQorCQkJZ290byBleGl0X2V4dGVudDsKKwkJaSA9IDE7CisJZXhpdF9leHRlbnQ6CisJCWV4dDJmc19leHRlbnRfZnJlZShoYW5kbGUpOworCQlyZXR1cm4gaTsKKwl9CisKKwlibG9ja3MgPSBleHQyZnNfaW5vZGVfZGF0YV9ibG9ja3MyKGZzLCBpbm9kZSk7CisJaWYgKGJsb2NrcykgeworCQlpZiAoKGlub2RlLT5pX3NpemUgPj0gZnMtPmJsb2Nrc2l6ZSkgfHwKKwkJICAgIChibG9ja3MgIT0gZnMtPmJsb2Nrc2l6ZSA+PiA5KSB8fAorCQkgICAgKGlub2RlLT5pX2Jsb2NrWzBdIDwgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spIHx8CisJCSAgICAoaW5vZGUtPmlfYmxvY2tbMF0gPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSkKKwkJCXJldHVybiAwOworCisJCWZvciAoaSA9IDE7IGkgPCBFWFQyX05fQkxPQ0tTOyBpKyspCisJCQlpZiAoaW5vZGUtPmlfYmxvY2tbaV0pCisJCQkJcmV0dXJuIDA7CisKKwkJaWYgKGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW8sIGlub2RlLT5pX2Jsb2NrWzBdLCAxLCBidWYpKQorCQkJcmV0dXJuIDA7CisKKwkJbGVuID0gc3RybmxlbihidWYsIGZzLT5ibG9ja3NpemUpOworCQlpZiAobGVuID09IGZzLT5ibG9ja3NpemUpCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlpZiAoaW5vZGUtPmlfc2l6ZSA+PSBzaXplb2YoaW5vZGUtPmlfYmxvY2spKQorCQkJcmV0dXJuIDA7CisKKwkJbGVuID0gc3RybmxlbigoY2hhciAqKWlub2RlLT5pX2Jsb2NrLCBzaXplb2YoaW5vZGUtPmlfYmxvY2spKTsKKwkJaWYgKGxlbiA9PSBzaXplb2YoaW5vZGUtPmlfYmxvY2spKQorCQkJcmV0dXJuIDA7CisJfQorCWlmIChsZW4gIT0gaW5vZGUtPmlfc2l6ZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBJZiB0aGUgaW1tdXRhYmxlIChvciBhcHBlbmQtb25seSkgZmxhZyBpcyBzZXQgb24gdGhlIGlub2RlLCBvZmZlcgorICogdG8gY2xlYXIgaXQuCisgKi8KKyNkZWZpbmUgQkFEX1NQRUNJQUxfRkxBR1MgKEVYVDJfSU1NVVRBQkxFX0ZMIHwgRVhUMl9BUFBFTkRfRkwpCitzdGF0aWMgdm9pZCBjaGVja19pbW11dGFibGUoZTJmc2NrX3QgY3R4LCBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KQoreworCWlmICghKHBjdHgtPmlub2RlLT5pX2ZsYWdzICYgQkFEX1NQRUNJQUxfRkxBR1MpKQorCQlyZXR1cm47CisKKwlpZiAoIWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9TRVRfSU1NVVRBQkxFLCBwY3R4KSkKKwkJcmV0dXJuOworCisJcGN0eC0+aW5vZGUtPmlfZmxhZ3MgJj0gfkJBRF9TUEVDSUFMX0ZMQUdTOworCWUyZnNja193cml0ZV9pbm9kZShjdHgsIHBjdHgtPmlubywgcGN0eC0+aW5vZGUsICJwYXNzMSIpOworfQorCisvKgorICogSWYgZGV2aWNlLCBmaWZvIG9yIHNvY2tldCwgY2hlY2sgc2l6ZSBpcyB6ZXJvIC0tIGlmIG5vdCBvZmZlciB0bworICogY2xlYXIgaXQKKyAqLworc3RhdGljIHZvaWQgY2hlY2tfc2l6ZShlMmZzY2tfdCBjdHgsIHN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHgpCit7CisJc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlID0gcGN0eC0+aW5vZGU7CisKKwlpZiAoRVhUMl9JX1NJWkUoaW5vZGUpID09IDApCisJCXJldHVybjsKKworCWlmICghZml4X3Byb2JsZW0oY3R4LCBQUl8xX1NFVF9OT05aU0laRSwgcGN0eCkpCisJCXJldHVybjsKKworCWV4dDJmc19pbm9kZV9zaXplX3NldChjdHgtPmZzLCBpbm9kZSwgMCk7CisJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgcGN0eC0+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+cHJvZmlsZSwgInNjcmF0Y2hfZmlsZXMiLAorCQkJICAgICJpY291bnQiLCAwLCAxLCAmZW5hYmxlKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbnVtX2RpcnMoY3R4LT5mcywgJm51bV9kaXJzKTsKKwlpZiAocmV0dmFsKQorCQludW1fZGlycyA9IDEwMjQ7CS8qIEd1ZXNzICovCisKKwlpZiAoIWVuYWJsZSB8fCAhdGRiX2RpciB8fCBhY2Nlc3ModGRiX2RpciwgV19PSykgfHwKKwkgICAgKHRocmVzaG9sZCAmJiBudW1fZGlycyA8PSB0aHJlc2hvbGQpKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfY3JlYXRlX2ljb3VudF90ZGIoY3R4LT5mcywgdGRiX2RpciwgZmxhZ3MsIHJldCk7CisJaWYgKHJldHZhbCkKKwkJKnJldCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2VydmVfYmxvY2tfZm9yX3Jvb3RfcmVwYWlyKGUyZnNja190IGN0eCkKK3sKKwlibGs2NF90CQlibGsgPSAwOworCWVycmNvZGVfdAllcnI7CisJZXh0Ml9maWxzeXMJZnMgPSBjdHgtPmZzOworCisJY3R4LT5yb290X3JlcGFpcl9ibG9jayA9IDA7CisJaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV91c2VkX21hcCwgRVhUMl9ST09UX0lOTykpCisJCXJldHVybjsKKworCWVyciA9IGV4dDJmc19uZXdfYmxvY2syKGZzLCAwLCBjdHgtPmJsb2NrX2ZvdW5kX21hcCwgJmJsayk7CisJaWYgKGVycikKKwkJcmV0dXJuOworCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19mb3VuZF9tYXAsIGJsayk7CisJY3R4LT5yb290X3JlcGFpcl9ibG9jayA9IGJsazsKK30KKworc3RhdGljIHZvaWQgcmVzZXJ2ZV9ibG9ja19mb3JfbG5mX3JlcGFpcihlMmZzY2tfdCBjdHgpCit7CisJYmxrNjRfdAkJYmxrID0gMDsKKwllcnJjb2RlX3QJZXJyOworCWV4dDJfZmlsc3lzCWZzID0gY3R4LT5mczsKKwlzdGF0aWMgY29uc3QgY2hhciBuYW1lW10gPSAibG9zdCtmb3VuZCI7CisJZXh0Ml9pbm9fdAlpbm87CisKKwljdHgtPmxuZl9yZXBhaXJfYmxvY2sgPSAwOworCWlmICghZXh0MmZzX2xvb2t1cChmcywgRVhUMl9ST09UX0lOTywgbmFtZSwgc2l6ZW9mKG5hbWUpLTEsIDAsICZpbm8pKQorCQlyZXR1cm47CisKKwllcnIgPSBleHQyZnNfbmV3X2Jsb2NrMihmcywgMCwgY3R4LT5ibG9ja19mb3VuZF9tYXAsICZibGspOworCWlmIChlcnIpCisJCXJldHVybjsKKwlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLCBibGspOworCWN0eC0+bG5mX3JlcGFpcl9ibG9jayA9IGJsazsKK30KKwordm9pZCBlMmZzY2tfcGFzczEoZTJmc2NrX3QgY3R4KQoreworCWludAlpOworCV9fdTY0CW1heF9zaXplczsKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJZXh0Ml9pbm9fdAlpbm8gPSAwOworCXN0cnVjdCBleHQyX2lub2RlICppbm9kZSA9IE5VTEw7CisJZXh0Ml9pbm9kZV9zY2FuCXNjYW4gPSBOVUxMOworCWNoYXIJCSpibG9ja19idWYgPSBOVUxMOworI2lmZGVmIFJFU09VUkNFX1RSQUNLCisJc3RydWN0IHJlc291cmNlX3RyYWNrCXJ0cmFjazsKKyNlbmRpZgorCXVuc2lnbmVkIGNoYXIJZnJhZywgZnNpemU7CisJc3RydWN0CQlwcm9ibGVtX2NvbnRleHQgcGN0eDsKKwlzdHJ1Y3QJCXNjYW5fY2FsbGJhY2tfc3RydWN0IHNjYW5fc3RydWN0OworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGN0eC0+ZnMtPnN1cGVyOworCWNvbnN0IGNoYXIJKm9sZF9vcDsKKwl1bnNpZ25lZCBpbnQJc2F2ZV90eXBlOworCWludAkJaW1hZ2ljX2ZzLCBleHRlbnRfZnM7CisJaW50CQlsb3dfZHRpbWVfY2hlY2sgPSAxOworCWludAkJaW5vZGVfc2l6ZTsKKworCWluaXRfcmVzb3VyY2VfdHJhY2soJnJ0cmFjaywgY3R4LT5mcy0+aW8pOworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwlpZiAoIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1BSRUVOKSkKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX1BBU1NfSEVBREVSLCAmcGN0eCk7CisKKwlpZiAoKGZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYKSAmJgorCSAgICAhKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfTk8pKSB7CisJCWlmIChleHQyZnNfdTMyX2xpc3RfY3JlYXRlKCZjdHgtPmRpcnNfdG9faGFzaCwgNTApKQorCQkJY3R4LT5kaXJzX3RvX2hhc2ggPSAwOworCX0KKworI2lmZGVmIE1UUkFDRQorCW10cmFjZV9wcmludCgiUGFzcyAxIik7CisjZW5kaWYKKworI2RlZmluZSBFWFQyX0JQUChiaXRzKSAoMVVMTCA8PCAoKGJpdHMpIC0gMikpCisKKwlmb3IgKGkgPSBFWFQyX01JTl9CTE9DS19MT0dfU0laRTsgaSA8PSBFWFQyX01BWF9CTE9DS19MT0dfU0laRTsgaSsrKSB7CisJCW1heF9zaXplcyA9IEVYVDJfTkRJUl9CTE9DS1MgKyBFWFQyX0JQUChpKTsKKwkJbWF4X3NpemVzID0gbWF4X3NpemVzICsgRVhUMl9CUFAoaSkgKiBFWFQyX0JQUChpKTsKKwkJbWF4X3NpemVzID0gbWF4X3NpemVzICsgRVhUMl9CUFAoaSkgKiBFWFQyX0JQUChpKSAqIEVYVDJfQlBQKGkpOworCQltYXhfc2l6ZXMgPSAobWF4X3NpemVzICogKDFVTCA8PCBpKSk7CisJCWV4dDJfbWF4X3NpemVzW2kgLSBFWFQyX01JTl9CTE9DS19MT0dfU0laRV0gPSBtYXhfc2l6ZXM7CisJfQorI3VuZGVmIEVYVDJfQlBQCisKKwlpbWFnaWNfZnMgPSAoc2ItPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQyX0ZFQVRVUkVfQ09NUEFUX0lNQUdJQ19JTk9ERVMpOworCWV4dGVudF9mcyA9IChzYi0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpOworCisJLyoKKwkgKiBBbGxvY2F0ZSBiaXRtYXBzIHN0cnVjdHVyZXMKKwkgKi8KKwlwY3R4LmVycmNvZGUgPSBlMmZzY2tfYWxsb2NhdGVfaW5vZGVfYml0bWFwKGZzLCBfKCJpbi11c2UgaW5vZGUgbWFwIiksCisJCQkJCQkgICAgRVhUMkZTX0JNQVA2NF9SQlRSRUUsCisJCQkJCQkgICAgImlub2RlX3VzZWRfbWFwIiwKKwkJCQkJCSAgICAmY3R4LT5pbm9kZV91c2VkX21hcCk7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlwY3R4Lm51bSA9IDE7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9BTExPQ0FURV9JQklUTUFQX0VSUk9SLCAmcGN0eCk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCXJldHVybjsKKwl9CisJcGN0eC5lcnJjb2RlID0gZTJmc2NrX2FsbG9jYXRlX2lub2RlX2JpdG1hcChmcywKKwkJCV8oImRpcmVjdG9yeSBpbm9kZSBtYXAiKSwKKwkJCUVYVDJGU19CTUFQNjRfQVVUT0RJUiwKKwkJCSJpbm9kZV9kaXJfbWFwIiwgJmN0eC0+aW5vZGVfZGlyX21hcCk7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlwY3R4Lm51bSA9IDI7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9BTExPQ0FURV9JQklUTUFQX0VSUk9SLCAmcGN0eCk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCXJldHVybjsKKwl9CisJcGN0eC5lcnJjb2RlID0gZTJmc2NrX2FsbG9jYXRlX2lub2RlX2JpdG1hcChmcywKKwkJCV8oInJlZ3VsYXIgZmlsZSBpbm9kZSBtYXAiKSwgRVhUMkZTX0JNQVA2NF9SQlRSRUUsCisJCQkiaW5vZGVfcmVnX21hcCIsICZjdHgtPmlub2RlX3JlZ19tYXApOworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJcGN0eC5udW0gPSA2OworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfQUxMT0NBVEVfSUJJVE1BUF9FUlJPUiwgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCXBjdHguZXJyY29kZSA9IGUyZnNja19hbGxvY2F0ZV9zdWJjbHVzdGVyX2JpdG1hcChmcywKKwkJCV8oImluLXVzZSBibG9jayBtYXAiKSwgRVhUMkZTX0JNQVA2NF9SQlRSRUUsCisJCQkiYmxvY2tfZm91bmRfbWFwIiwgJmN0eC0+YmxvY2tfZm91bmRfbWFwKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCXBjdHgubnVtID0gMTsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0FMTE9DQVRFX0JCSVRNQVBfRVJST1IsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJcmV0dXJuOworCX0KKwllMmZzY2tfc2V0dXBfdGRiX2ljb3VudChjdHgsIDAsICZjdHgtPmlub2RlX2xpbmtfaW5mbyk7CisJaWYgKCFjdHgtPmlub2RlX2xpbmtfaW5mbykgeworCQllMmZzY2tfc2V0X2JpdG1hcF90eXBlKGZzLCBFWFQyRlNfQk1BUDY0X1JCVFJFRSwKKwkJCQkgICAgICAgImlub2RlX2xpbmtfaW5mbyIsICZzYXZlX3R5cGUpOworCQlwY3R4LmVycmNvZGUgPSBleHQyZnNfY3JlYXRlX2ljb3VudDIoZnMsIDAsIDAsIDAsCisJCQkJCQkgICAgICZjdHgtPmlub2RlX2xpbmtfaW5mbyk7CisJCWZzLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gc2F2ZV90eXBlOworCX0KKworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0FMTE9DQVRFX0lDT1VOVCwgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCWlub2RlX3NpemUgPSBFWFQyX0lOT0RFX1NJWkUoZnMtPnN1cGVyKTsKKwlpbm9kZSA9IChzdHJ1Y3QgZXh0Ml9pbm9kZSAqKQorCQllMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwgaW5vZGVfc2l6ZSwgInNjcmF0Y2ggaW5vZGUiKTsKKworCWlub2Rlc190b19wcm9jZXNzID0gKHN0cnVjdCBwcm9jZXNzX2lub2RlX2Jsb2NrICopCisJCWUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LAorCQkJCSAgICAgICAoY3R4LT5wcm9jZXNzX2lub2RlX3NpemUgKgorCQkJCQlzaXplb2Yoc3RydWN0IHByb2Nlc3NfaW5vZGVfYmxvY2spKSwKKwkJCQkgICAgICAgImFycmF5IG9mIGlub2RlcyB0byBwcm9jZXNzIik7CisJcHJvY2Vzc19pbm9kZV9jb3VudCA9IDA7CisKKwlwY3R4LmVycmNvZGUgPSBleHQyZnNfaW5pdF9kYmxpc3QoZnMsIDApOworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0FMTE9DQVRFX0RCQ09VTlQsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJZ290byBlbmRpdDsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBsYXN0IG9ycGhhbiBmaWVsZCBpcyBzZXQsIGNsZWFyIGl0LCBzaW5jZSB0aGUgcGFzczEKKwkgKiBwcm9jZXNzaW5nIHdpbGwgYXV0b21hdGljYWxseSBmaW5kIGFuZCBjbGVhciB0aGUgb3JwaGFucy4KKwkgKiBJbiB0aGUgZnV0dXJlLCB3ZSBtYXkgd2FudCB0byB0cnkgdXNpbmcgdGhlIGxhc3Rfb3JwaGFuCisJICogbGlua2VkIGxpc3Qgb3Vyc2VsdmVzLCBidXQgZm9yIG5vdywgd2UgY2xlYXIgaXQgc28gdGhhdCB0aGUKKwkgKiBleHQzIG1vdW50IGNvZGUgd29uJ3QgZ2V0IGNvbmZ1c2VkLgorCSAqLworCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUkVBRE9OTFkpKSB7CisJCWlmIChmcy0+c3VwZXItPnNfbGFzdF9vcnBoYW4pIHsKKwkJCWZzLT5zdXBlci0+c19sYXN0X29ycGhhbiA9IDA7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCX0KKwl9CisKKwltYXJrX3RhYmxlX2Jsb2NrcyhjdHgpOworCXBjdHguZXJyY29kZSA9IGV4dDJmc19jb252ZXJ0X3N1YmNsdXN0ZXJfYml0bWFwKGZzLAorCQkJCQkJJmN0eC0+YmxvY2tfZm91bmRfbWFwKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9DT05WRVJUX1NVQkNMVVNURVIsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJZ290byBlbmRpdDsKKwl9CisJYmxvY2tfYnVmID0gKGNoYXIgKikgZTJmc2NrX2FsbG9jYXRlX21lbW9yeShjdHgsIGZzLT5ibG9ja3NpemUgKiAzLAorCQkJCQkJICAgICJibG9jayBpbnRlcmF0ZSBidWZmZXIiKTsKKwllMmZzY2tfdXNlX2lub2RlX3Nob3J0Y3V0cyhjdHgsIDEpOworCWUyZnNja19pbnRlcmNlcHRfYmxvY2tfYWxsb2NhdGlvbnMoY3R4KTsKKwlvbGRfb3AgPSBlaGFuZGxlcl9vcGVyYXRpb24oXygib3BlbmluZyBpbm9kZSBzY2FuIikpOworCXBjdHguZXJyY29kZSA9IGV4dDJmc19vcGVuX2lub2RlX3NjYW4oZnMsIGN0eC0+aW5vZGVfYnVmZmVyX2Jsb2NrcywKKwkJCQkJICAgICAgJnNjYW4pOworCWVoYW5kbGVyX29wZXJhdGlvbihvbGRfb3ApOworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0lTQ0FOX0VSUk9SLCAmcGN0eCk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCWdvdG8gZW5kaXQ7CisJfQorCWV4dDJmc19pbm9kZV9zY2FuX2ZsYWdzKHNjYW4sIEVYVDJfU0ZfU0tJUF9NSVNTSU5HX0lUQUJMRSwgMCk7CisJY3R4LT5zdGFzaGVkX2lub2RlID0gaW5vZGU7CisJc2Nhbl9zdHJ1Y3QuY3R4ID0gY3R4OworCXNjYW5fc3RydWN0LmJsb2NrX2J1ZiA9IGJsb2NrX2J1ZjsKKwlleHQyZnNfc2V0X2lub2RlX2NhbGxiYWNrKHNjYW4sIHNjYW5fY2FsbGJhY2ssICZzY2FuX3N0cnVjdCk7CisJaWYgKGN0eC0+cHJvZ3Jlc3MgJiYgKChjdHgtPnByb2dyZXNzKShjdHgsIDEsIDAsCisJCQkJCSAgICAgIGN0eC0+ZnMtPmdyb3VwX2Rlc2NfY291bnQpKSkKKwkJZ290byBlbmRpdDsKKwlpZiAoKGZzLT5zdXBlci0+c193dGltZSA8IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQpIHx8CisJICAgIChmcy0+c3VwZXItPnNfbXRpbWUgPCBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KSB8fAorCSAgICAoZnMtPnN1cGVyLT5zX21rZnNfdGltZSAmJgorCSAgICAgZnMtPnN1cGVyLT5zX21rZnNfdGltZSA8IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQpKQorCQlsb3dfZHRpbWVfY2hlY2sgPSAwOworCisJaWYgKChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9NTVApICYmCisJICAgIGZzLT5zdXBlci0+c19tbXBfYmxvY2sgPiBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayAmJgorCSAgICBmcy0+c3VwZXItPnNfbW1wX2Jsb2NrIDwgZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKQorCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLAorCQkJCQkgIGZzLT5zdXBlci0+c19tbXBfYmxvY2spOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKGlubyAlIChmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCAqIDQpID09IDEpIHsKKwkJCWlmIChlMmZzY2tfbW1wX3VwZGF0ZShmcykpCisJCQkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwkJfQorCQlvbGRfb3AgPSBlaGFuZGxlcl9vcGVyYXRpb24oXygiZ2V0dGluZyBuZXh0IGlub2RlIGZyb20gc2NhbiIpKTsKKwkJcGN0eC5lcnJjb2RlID0gZXh0MmZzX2dldF9uZXh0X2lub2RlX2Z1bGwoc2NhbiwgJmlubywKKwkJCQkJCQkgIGlub2RlLCBpbm9kZV9zaXplKTsKKwkJZWhhbmRsZXJfb3BlcmF0aW9uKG9sZF9vcCk7CisJCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCQlyZXR1cm47CisJCWlmIChwY3R4LmVycmNvZGUgPT0gRVhUMl9FVF9CQURfQkxPQ0tfSU5fSU5PREVfVEFCTEUpIHsKKwkJCWlmICghY3R4LT5pbm9kZV9iYl9tYXApCisJCQkJYWxsb2NfYmJfbWFwKGN0eCk7CisJCQlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfYmJfbWFwLCBpbm8pOworCQkJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX3VzZWRfbWFwLCBpbm8pOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHBjdHguZXJyY29kZSkgeworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0lTQ0FOX0VSUk9SLCAmcGN0eCk7CisJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQkJZ290byBlbmRpdDsKKwkJfQorCQlpZiAoIWlubykKKwkJCWJyZWFrOworCQlwY3R4LmlubyA9IGlubzsKKwkJcGN0eC5pbm9kZSA9IGlub2RlOworCQljdHgtPnN0YXNoZWRfaW5vID0gaW5vOworCQlpZiAoaW5vZGUtPmlfbGlua3NfY291bnQpIHsKKwkJCXBjdHguZXJyY29kZSA9IGV4dDJmc19pY291bnRfc3RvcmUoY3R4LT5pbm9kZV9saW5rX2luZm8sCisJCQkJCSAgIGlubywgaW5vZGUtPmlfbGlua3NfY291bnQpOworCQkJaWYgKHBjdHguZXJyY29kZSkgeworCQkJCXBjdHgubnVtID0gaW5vZGUtPmlfbGlua3NfY291bnQ7CisJCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0lDT1VOVF9TVE9SRSwgJnBjdHgpOworCQkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCQkJZ290byBlbmRpdDsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIFRlc3QgZm9yIGluY29ycmVjdCBleHRlbnQgZmxhZyBzZXR0aW5ncy4KKwkJICoKKwkJICogT24gYmlnLWVuZGlhbiBtYWNoaW5lcyB3ZSBtdXN0IGJlIGNhcmVmdWw6CisJCSAqIFdoZW4gdGhlIGlub2RlIGlzIHJlYWQsIHRoZSBpX2Jsb2NrIGFycmF5IGlzIG5vdCBzd2FwcGVkCisJCSAqIGlmIHRoZSBleHRlbnQgZmxhZyBpcyBzZXQuICBUaGVyZWZvcmUgaWYgd2UgYXJlIHRlc3RpbmcKKwkJICogZm9yIG9yIGZpeGluZyBhIHdyb25nbHktc2V0IGZsYWcsIHdlIG11c3QgcG90ZW50aWFsbHkKKwkJICogKHVuKXN3YXAgYmVmb3JlIHRlc3RpbmcsIG9yIGFmdGVyIGZpeGluZy4KKwkJICovCisKKwkJLyoKKwkJICogSW4gdGhpcyBjYXNlIHRoZSBleHRlbnRzIGZsYWcgd2FzIHNldCB3aGVuIHJlYWQsIHNvCisJCSAqIGV4dGVudF9oZWFkZXJfdmVyaWZ5IGlzIG9rLiAgSWYgdGhlIGlub2RlIGlzIGNsZWFyZWQsCisJCSAqIG5vIG5lZWQgdG8gc3dhcC4uLiBzbyBubyBleHRyYSBzd2FwcGluZyBoZXJlLgorCQkgKi8KKwkJaWYgKChpbm9kZS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkgJiYgIWV4dGVudF9mcyAmJgorCQkgICAgKGlub2RlLT5pX2xpbmtzX2NvdW50IHx8IChpbm8gPT0gRVhUMl9CQURfSU5PKSB8fAorCQkgICAgIChpbm8gPT0gRVhUMl9ST09UX0lOTykgfHwgKGlubyA9PSBFWFQyX0pPVVJOQUxfSU5PKSkpIHsKKwkJCWlmICgoZXh0MmZzX2V4dGVudF9oZWFkZXJfdmVyaWZ5KGlub2RlLT5pX2Jsb2NrLAorCQkJCQkJIHNpemVvZihpbm9kZS0+aV9ibG9jaykpID09IDApICYmCisJCQkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8xX0VYVEVOVF9GRUFUVVJFLCAmcGN0eCkpIHsKKwkJCQlzYi0+c19mZWF0dXJlX2luY29tcGF0IHw9IEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTOworCQkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJCQlleHRlbnRfZnMgPSAxOworCQkJfSBlbHNlIGlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfRVhURU5UU19TRVQsICZwY3R4KSkgeworCQkJY2xlYXJfaW5vZGU6CisJCQkJZTJmc2NrX2NsZWFyX2lub2RlKGN0eCwgaW5vLCBpbm9kZSwgMCwgInBhc3MxIik7CisJCQkJaWYgKGlubyA9PSBFWFQyX0JBRF9JTk8pCisJCQkJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV91c2VkX21hcCwKKwkJCQkJCQkJIGlubyk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBGb3IgYmlnLWVuZGlhbiBtYWNoaW5lczoKKwkJICogSWYgdGhlIGlub2RlIGRpZG4ndCBoYXZlIHRoZSBleHRlbnRzIGZsYWcgc2V0IHdoZW4gaXQKKwkJICogd2FzIHJlYWQsIHRoZW4gdGhlIGlfYmxvY2tzIGFycmF5IHdhcyBzd2FwcGVkLiAgVG8gdGVzdAorCQkgKiBhcyBhbiBleHRlbnRzIGhlYWRlciwgd2UgbXVzdCBzd2FwIGl0IGJhY2sgZmlyc3QuCisJCSAqIElGIHdlIHRoZW4gc2V0IHRoZSBleHRlbnRzIGZsYWcsIHRoZSBlbnRpcmUgaV9ibG9jaworCQkgKiBhcnJheSBtdXN0IGJlIHVuL3JlLXN3YXBwZWQgdG8gbWFrZSBpdCBwcm9wZXIgZXh0ZW50cyBkYXRhLgorCQkgKi8KKwkJaWYgKGV4dGVudF9mcyAmJiAhKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSAmJgorCQkgICAgKGlub2RlLT5pX2xpbmtzX2NvdW50IHx8IChpbm8gPT0gRVhUMl9CQURfSU5PKSB8fAorCQkgICAgIChpbm8gPT0gRVhUMl9ST09UX0lOTykgfHwgKGlubyA9PSBFWFQyX0pPVVJOQUxfSU5PKSkgJiYKKwkJICAgIChMSU5VWF9TX0lTUkVHKGlub2RlLT5pX21vZGUpIHx8CisJCSAgICAgTElOVVhfU19JU0RJUihpbm9kZS0+aV9tb2RlKSkpIHsKKwkJCXZvaWQgKmVocDsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJCV9fdTMyIHRtcF9ibG9ja1tFWFQyX05fQkxPQ0tTXTsKKworCQkJZm9yIChpID0gMDsgaSA8IEVYVDJfTl9CTE9DS1M7IGkrKykKKwkJCQl0bXBfYmxvY2tbaV0gPSBleHQyZnNfc3dhYjMyKGlub2RlLT5pX2Jsb2NrW2ldKTsKKwkJCWVocCA9IHRtcF9ibG9jazsKKyNlbHNlCisJCQllaHAgPSBpbm9kZS0+aV9ibG9jazsKKyNlbmRpZgorCQkJaWYgKChleHQyZnNfZXh0ZW50X2hlYWRlcl92ZXJpZnkoZWhwLAorCQkJCQkgc2l6ZW9mKGlub2RlLT5pX2Jsb2NrKSkgPT0gMCkgJiYKKwkJCSAgICAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX1VOU0VUX0VYVEVOVF9GTCwgJnBjdHgpKSkgeworCQkJCWlub2RlLT5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJCQltZW1jcHkoaW5vZGUtPmlfYmxvY2ssIHRtcF9ibG9jaywKKwkJCQkgICAgICAgc2l6ZW9mKGlub2RlLT5pX2Jsb2NrKSk7CisjZW5kaWYKKwkJCQllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBpbm8sIGlub2RlLCAicGFzczEiKTsKKwkJCX0KKwkJfQorCisJCWlmIChpbm8gPT0gRVhUMl9CQURfSU5PKSB7CisJCQlzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgcGI7CisKKwkJCWlmICgoaW5vZGUtPmlfbW9kZSB8fCBpbm9kZS0+aV91aWQgfHwgaW5vZGUtPmlfZ2lkIHx8CisJCQkgICAgIGlub2RlLT5pX2xpbmtzX2NvdW50IHx8IGlub2RlLT5pX2ZpbGVfYWNsKSAmJgorCQkJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9JTlZBTElEX0JBRF9JTk9ERSwgJnBjdHgpKSB7CisJCQkJbWVtc2V0KGlub2RlLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwkJCQllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBpbm8sIGlub2RlLAorCQkJCQkJICAgImNsZWFyIGJhZCBpbm9kZSIpOworCQkJfQorCisJCQlwY3R4LmVycmNvZGUgPSBleHQyZnNfY29weV9iaXRtYXAoY3R4LT5ibG9ja19mb3VuZF9tYXAsCisJCQkJCQkJICAmcGIuZnNfbWV0YV9ibG9ja3MpOworCQkJaWYgKHBjdHguZXJyY29kZSkgeworCQkJCXBjdHgubnVtID0gNDsKKwkJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfQUxMT0NBVEVfQkJJVE1BUF9FUlJPUiwgJnBjdHgpOworCQkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCQkJZ290byBlbmRpdDsKKwkJCX0KKwkJCXBiLmlubyA9IEVYVDJfQkFEX0lOTzsKKwkJCXBiLm51bV9ibG9ja3MgPSBwYi5sYXN0X2Jsb2NrID0gMDsKKwkJCXBiLmxhc3RfZGJfYmxvY2sgPSAtMTsKKwkJCXBiLm51bV9pbGxlZ2FsX2Jsb2NrcyA9IDA7CisJCQlwYi5zdXBwcmVzcyA9IDA7IHBiLmNsZWFyID0gMDsgcGIuaXNfZGlyID0gMDsKKwkJCXBiLmlzX3JlZyA9IDA7IHBiLmZyYWdtZW50ZWQgPSAwOyBwYi5iYmNoZWNrID0gMDsKKwkJCXBiLmlub2RlID0gaW5vZGU7CisJCQlwYi5wY3R4ID0gJnBjdHg7CisJCQlwYi5jdHggPSBjdHg7CisJCQlwY3R4LmVycmNvZGUgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIGlubywgMCwKKwkJCQkgICAgIGJsb2NrX2J1ZiwgcHJvY2Vzc19iYWRfYmxvY2ssICZwYik7CisJCQlleHQyZnNfZnJlZV9ibG9ja19iaXRtYXAocGIuZnNfbWV0YV9ibG9ja3MpOworCQkJaWYgKHBjdHguZXJyY29kZSkgeworCQkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9CTE9DS19JVEVSQVRFLCAmcGN0eCk7CisJCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJCQlnb3RvIGVuZGl0OworCQkJfQorCQkJaWYgKHBiLmJiY2hlY2spCisJCQkJaWYgKCFmaXhfcHJvYmxlbShjdHgsIFBSXzFfQkJJTk9ERV9CQURfTUVUQUJMT0NLX1BST01QVCwgJnBjdHgpKSB7CisJCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJCQlnb3RvIGVuZGl0OworCQkJfQorCQkJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX3VzZWRfbWFwLCBpbm8pOworCQkJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKGlubyA9PSBFWFQyX1JPT1RfSU5PKSB7CisJCQkvKgorCQkJICogTWFrZSBzdXJlIHRoZSByb290IGlub2RlIGlzIGEgZGlyZWN0b3J5OyBpZgorCQkJICogbm90LCBvZmZlciB0byBjbGVhciBpdC4gIEl0IHdpbGwgYmUKKwkJCSAqIHJlZ25lcmF0ZWQgaW4gcGFzcyAjMy4KKwkJCSAqLworCQkJaWYgKCFMSU5VWF9TX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CisJCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9ST09UX05PX0RJUiwgJnBjdHgpKQorCQkJCQlnb3RvIGNsZWFyX2lub2RlOworCQkJfQorCQkJLyoKKwkJCSAqIElmIGR0aW1lIGlzIHNldCwgb2ZmZXIgdG8gY2xlYXIgaXQuICBta2UyZnMKKwkJCSAqIHZlcnNpb24gMC4yYiBjcmVhdGVkIGZpbGVzeXN0ZW1zIHdpdGggdGhlCisJCQkgKiBkdGltZSBmaWVsZCBzZXQgZm9yIHRoZSByb290IGFuZCBsb3N0K2ZvdW5kCisJCQkgKiBkaXJlY3Rvcmllcy4gIFdlIHdvbid0IHdvcnJ5IGFib3V0CisJCQkgKiAvbG9zdCtmb3VuZCwgc2luY2UgdGhhdCBjYW4gYmUgcmVnZW5lcmF0ZWQKKwkJCSAqIGVhc2lseS4gIEJ1dCB3ZSB3aWxsIGZpeCB0aGUgcm9vdCBkaXJlY3RvcnkKKwkJCSAqIGFzIGEgc3BlY2lhbCBjYXNlLgorCQkJICovCisJCQlpZiAoaW5vZGUtPmlfZHRpbWUgJiYgaW5vZGUtPmlfbGlua3NfY291bnQpIHsKKwkJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX1JPT1RfRFRJTUUsICZwY3R4KSkgeworCQkJCQlpbm9kZS0+aV9kdGltZSA9IDA7CisJCQkJCWUyZnNja193cml0ZV9pbm9kZShjdHgsIGlubywgaW5vZGUsCisJCQkJCQkJICAgInBhc3MxIik7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKGlubyA9PSBFWFQyX0pPVVJOQUxfSU5PKSB7CisJCQlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfdXNlZF9tYXAsIGlubyk7CisJCQlpZiAoZnMtPnN1cGVyLT5zX2pvdXJuYWxfaW51bSA9PSBFWFQyX0pPVVJOQUxfSU5PKSB7CisJCQkJaWYgKCFMSU5VWF9TX0lTUkVHKGlub2RlLT5pX21vZGUpICYmCisJCQkJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9KT1VSTkFMX0JBRF9NT0RFLAorCQkJCQkJJnBjdHgpKSB7CisJCQkJCWlub2RlLT5pX21vZGUgPSBMSU5VWF9TX0lGUkVHOworCQkJCQllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBpbm8sIGlub2RlLAorCQkJCQkJCSAgICJwYXNzMSIpOworCQkJCX0KKwkJCQljaGVja19ibG9ja3MoY3R4LCAmcGN0eCwgYmxvY2tfYnVmKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgoaW5vZGUtPmlfbGlua3NfY291bnQgfHwKKwkJCSAgICAgaW5vZGUtPmlfYmxvY2tzIHx8IGlub2RlLT5pX2Jsb2NrWzBdKSAmJgorCQkJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9KT1VSTkFMX0lOT0RFX05PVF9DTEVBUiwKKwkJCQkJJnBjdHgpKSB7CisJCQkJbWVtc2V0KGlub2RlLCAwLCBpbm9kZV9zaXplKTsKKwkJCQlleHQyZnNfaWNvdW50X3N0b3JlKGN0eC0+aW5vZGVfbGlua19pbmZvLAorCQkJCQkJICAgIGlubywgMCk7CisJCQkJZTJmc2NrX3dyaXRlX2lub2RlX2Z1bGwoY3R4LCBpbm8sIGlub2RlLAorCQkJCQkJCWlub2RlX3NpemUsICJwYXNzMSIpOworCQkJfQorCQl9IGVsc2UgaWYgKChpbm8gPT0gRVhUNF9VU1JfUVVPVEFfSU5PKSB8fAorCQkJICAgKGlubyA9PSBFWFQ0X0dSUF9RVU9UQV9JTk8pKSB7CisJCQlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfdXNlZF9tYXAsIGlubyk7CisJCQlpZiAoKGZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJCQkJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfUVVPVEEpICYmCisJCQkgICAgKChmcy0+c3VwZXItPnNfdXNyX3F1b3RhX2ludW0gPT0gaW5vKSB8fAorCQkJICAgICAoZnMtPnN1cGVyLT5zX2dycF9xdW90YV9pbnVtID09IGlubykpKSB7CisJCQkJaWYgKCFMSU5VWF9TX0lTUkVHKGlub2RlLT5pX21vZGUpICYmCisJCQkJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9RVU9UQV9CQURfTU9ERSwKKwkJCQkJCQkmcGN0eCkpIHsKKwkJCQkJaW5vZGUtPmlfbW9kZSA9IExJTlVYX1NfSUZSRUc7CisJCQkJCWUyZnNja193cml0ZV9pbm9kZShjdHgsIGlubywgaW5vZGUsCisJCQkJCQkJInBhc3MxIik7CisJCQkJfQorCQkJCWNoZWNrX2Jsb2NrcyhjdHgsICZwY3R4LCBibG9ja19idWYpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKChpbm9kZS0+aV9saW5rc19jb3VudCB8fAorCQkJICAgICBpbm9kZS0+aV9ibG9ja3MgfHwgaW5vZGUtPmlfYmxvY2tbMF0pICYmCisJCQkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8xX1FVT1RBX0lOT0RFX05PVF9DTEVBUiwKKwkJCQkJJnBjdHgpKSB7CisJCQkJbWVtc2V0KGlub2RlLCAwLCBpbm9kZV9zaXplKTsKKwkJCQlleHQyZnNfaWNvdW50X3N0b3JlKGN0eC0+aW5vZGVfbGlua19pbmZvLAorCQkJCQkJICAgIGlubywgMCk7CisJCQkJZTJmc2NrX3dyaXRlX2lub2RlX2Z1bGwoY3R4LCBpbm8sIGlub2RlLAorCQkJCQkJCWlub2RlX3NpemUsICJwYXNzMSIpOworCQkJfQorCQl9IGVsc2UgaWYgKGlubyA8IEVYVDJfRklSU1RfSU5PREUoZnMtPnN1cGVyKSkgeworCQkJcHJvYmxlbV90IHByb2JsZW0gPSAwOworCisJCQlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfdXNlZF9tYXAsIGlubyk7CisJCQlpZiAoaW5vID09IEVYVDJfQk9PVF9MT0FERVJfSU5PKSB7CisJCQkJaWYgKExJTlVYX1NfSVNESVIoaW5vZGUtPmlfbW9kZSkpCisJCQkJCXByb2JsZW0gPSBQUl8xX1JFU0VSVkVEX0JBRF9NT0RFOworCQkJfSBlbHNlIGlmIChpbm8gPT0gRVhUMl9SRVNJWkVfSU5PKSB7CisJCQkJaWYgKGlub2RlLT5pX21vZGUgJiYKKwkJCQkgICAgIUxJTlVYX1NfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCQkJCXByb2JsZW0gPSBQUl8xX1JFU0VSVkVEX0JBRF9NT0RFOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoaW5vZGUtPmlfbW9kZSAhPSAwKQorCQkJCQlwcm9ibGVtID0gUFJfMV9SRVNFUlZFRF9CQURfTU9ERTsKKwkJCX0KKwkJCWlmIChwcm9ibGVtKSB7CisJCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgcHJvYmxlbSwgJnBjdHgpKSB7CisJCQkJCWlub2RlLT5pX21vZGUgPSAwOworCQkJCQllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBpbm8sIGlub2RlLAorCQkJCQkJCSAgICJwYXNzMSIpOworCQkJCX0KKwkJCX0KKwkJCWNoZWNrX2Jsb2NrcyhjdHgsICZwY3R4LCBibG9ja19idWYpOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBDaGVjayBmb3IgaW5vZGVzIHdobyBtaWdodCBoYXZlIGJlZW4gcGFydCBvZiB0aGUKKwkJICogb3JwaGFuZWQgbGlzdCBsaW5rZWQgbGlzdC4gIFRoZXkgc2hvdWxkIGhhdmUgZ290dGVuCisJCSAqIGRlYWx0IHdpdGggYnkgbm93LCB1bmxlc3MgdGhlIGxpc3QgaGFkIHNvbWVob3cgYmVlbgorCQkgKiBjb3JydXB0ZWQuCisJCSAqCisJCSAqIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCBpbm9kZXMgd2hpY2ggYXJlIHN0aWxsIGluIHVzZQorCQkgKiAoYW5kIHdoaWNoIGFyZSB0aGVyZWZvcmUpIHBlbmRpbmcgdHJ1bmNhdGlvbiBzaG91bGQKKwkJICogYmUgaGFuZGxlZCBzcGVjaWFsbHkuICBSaWdodCBub3cgd2UganVzdCBjbGVhciB0aGUKKwkJICogZHRpbWUgZmllbGQsIGFuZCB0aGUgbm9ybWFsIGUyZnNjayBoYW5kbGluZyBvZgorCQkgKiBpbm9kZXMgd2hlcmUgaV9zaXplIGFuZCB0aGUgaW5vZGUgYmxvY2tzIGFyZQorCQkgKiBpbmNvbnNpc3RlbnQgaXMgdG8gZml4IGlfc2l6ZSwgaW5zdGVhZCBvZiByZWxlYXNpbmcKKwkJICogdGhlIGV4dHJhIGJsb2Nrcy4gIFRoaXMgd29uJ3QgY2F0Y2ggdGhlIGlub2RlcyB0aGF0CisJCSAqIHdhcyBhdCB0aGUgZW5kIG9mIHRoZSBvcnBoYW4gbGlzdCwgYnV0IGl0J3MgYmV0dGVyCisJCSAqIHRoYW4gbm90aGluZy4gIFRoZSByaWdodCBhbnN3ZXIgaXMgdGhhdCB0aGVyZQorCQkgKiBzaG91bGRuJ3QgYmUgYW55IGJ1Z3MgaW4gdGhlIG9ycGhhbiBsaXN0IGhhbmRsaW5nLiAgOi0pCisJCSAqLworCQlpZiAoaW5vZGUtPmlfZHRpbWUgJiYgbG93X2R0aW1lX2NoZWNrICYmCisJCSAgICBpbm9kZS0+aV9kdGltZSA8IGN0eC0+ZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCkgeworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9MT1dfRFRJTUUsICZwY3R4KSkgeworCQkJCWlub2RlLT5pX2R0aW1lID0gaW5vZGUtPmlfbGlua3NfY291bnQgPworCQkJCQkwIDogY3R4LT5ub3c7CisJCQkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgaW5vLCBpbm9kZSwKKwkJCQkJCSAgICJwYXNzMSIpOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBkZWxldGVkIGlub2RlcyBoYXZlCisJCSAqIGlfbGlua3NfY291bnQgc2V0IHRvIDAuCisJCSAqLworCQlpZiAoIWlub2RlLT5pX2xpbmtzX2NvdW50KSB7CisJCQlpZiAoIWlub2RlLT5pX2R0aW1lICYmIGlub2RlLT5pX21vZGUpIHsKKwkJCQlpZiAoZml4X3Byb2JsZW0oY3R4LAorCQkJCQkgICAgUFJfMV9aRVJPX0RUSU1FLCAmcGN0eCkpIHsKKwkJCQkJaW5vZGUtPmlfZHRpbWUgPSBjdHgtPm5vdzsKKwkJCQkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgaW5vLCBpbm9kZSwKKwkJCQkJCQkgICAicGFzczEiKTsKKwkJCQl9CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQkvKgorCQkgKiBuLmIuICAwLjNjIGV4dDJmcyBjb2RlIGRpZG4ndCBjbGVhciBpX2xpbmtzX2NvdW50IGZvcgorCQkgKiBkZWxldGVkIGZpbGVzLiAgT29wcy4KKwkJICoKKwkJICogU2luY2UgYWxsIG5ldyBleHQyIGltcGxlbWVudGF0aW9ucyBnZXQgdGhpcyByaWdodCwKKwkJICogd2Ugbm93IGFzc3VtZSB0aGF0IHRoZSBjYXNlIG9mIG5vbi16ZXJvCisJCSAqIGlfbGlua3NfY291bnQgYW5kIG5vbi16ZXJvIGR0aW1lIG1lYW5zIHRoYXQgd2UKKwkJICogc2hvdWxkIGtlZXAgdGhlIGZpbGUsIG5vdCBkZWxldGUgaXQuCisJCSAqCisJCSAqLworCQlpZiAoaW5vZGUtPmlfZHRpbWUpIHsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfU0VUX0RUSU1FLCAmcGN0eCkpIHsKKwkJCQlpbm9kZS0+aV9kdGltZSA9IDA7CisJCQkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgaW5vLCBpbm9kZSwgInBhc3MxIik7CisJCQl9CisJCX0KKworCQlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfdXNlZF9tYXAsIGlubyk7CisJCXN3aXRjaCAoZnMtPnN1cGVyLT5zX2NyZWF0b3Jfb3MpIHsKKwkJICAgIGNhc2UgRVhUMl9PU19IVVJEOgorCQkJZnJhZyA9IGlub2RlLT5vc2QyLmh1cmQyLmhfaV9mcmFnOworCQkJZnNpemUgPSBpbm9kZS0+b3NkMi5odXJkMi5oX2lfZnNpemU7CisJCQlicmVhazsKKwkJICAgIGRlZmF1bHQ6CisJCQlmcmFnID0gZnNpemUgPSAwOworCQl9CisKKwkJaWYgKGlub2RlLT5pX2ZhZGRyIHx8IGZyYWcgfHwgZnNpemUgfHwKKwkJICAgIChMSU5VWF9TX0lTRElSKGlub2RlLT5pX21vZGUpICYmIGlub2RlLT5pX2Rpcl9hY2wpKQorCQkJbWFya19pbm9kZV9iYWQoY3R4LCBpbm8pOworCQlpZiAoKGZzLT5zdXBlci0+c19jcmVhdG9yX29zID09IEVYVDJfT1NfTElOVVgpICYmCisJCSAgICAhKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkJICAgICAgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKSAmJgorCQkgICAgaW5vZGUtPm9zZDIubGludXgyLmxfaV9maWxlX2FjbF9oaWdoICE9IDApCisJCQltYXJrX2lub2RlX2JhZChjdHgsIGlubyk7CisJCWlmICgoZnMtPnN1cGVyLT5zX2NyZWF0b3Jfb3MgPT0gRVhUMl9PU19MSU5VWCkgJiYKKwkJICAgICEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYKKwkJICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpICYmCisJCSAgICAoaW5vZGUtPm9zZDIubGludXgyLmxfaV9ibG9ja3NfaGkgIT0gMCkpCisJCQltYXJrX2lub2RlX2JhZChjdHgsIGlubyk7CisJCWlmIChpbm9kZS0+aV9mbGFncyAmIEVYVDJfSU1BR0lDX0ZMKSB7CisJCQlpZiAoaW1hZ2ljX2ZzKSB7CisJCQkJaWYgKCFjdHgtPmlub2RlX2ltYWdpY19tYXApCisJCQkJCWFsbG9jX2ltYWdpY19tYXAoY3R4KTsKKwkJCQlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfaW1hZ2ljX21hcCwKKwkJCQkJCQkgaW5vKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9TRVRfSU1BR0lDLCAmcGN0eCkpIHsKKwkJCQkJaW5vZGUtPmlfZmxhZ3MgJj0gfkVYVDJfSU1BR0lDX0ZMOworCQkJCQllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBpbm8sCisJCQkJCQkJICAgaW5vZGUsICJwYXNzMSIpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWNoZWNrX2lub2RlX2V4dHJhX3NwYWNlKGN0eCwgJnBjdHgpOworCQljaGVja19pc19yZWFsbHlfZGlyKGN0eCwgJnBjdHgsIGJsb2NrX2J1Zik7CisKKwkJLyoKKwkJICogZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyIGRvZXMgbm90IGFjdHVhbGx5IGxvb2sKKwkJICogYXQgaV9ibG9ja1tdIHZhbHVlcywgc28gbm90IGVuZGlhbi1zZW5zaXRpdmUgaGVyZS4KKwkJICovCisJCWlmIChleHRlbnRfZnMgJiYgKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSAmJgorCQkgICAgTElOVVhfU19JU0xOSyhpbm9kZS0+aV9tb2RlKSAmJgorCQkgICAgIWV4dDJmc19pbm9kZV9oYXNfdmFsaWRfYmxvY2tzMihmcywgaW5vZGUpICYmCisJCSAgICBmaXhfcHJvYmxlbShjdHgsIFBSXzFfRkFTVF9TWU1MSU5LX0VYVEVOVF9GTCwgJnBjdHgpKSB7CisJCQlpbm9kZS0+aV9mbGFncyAmPSB+RVhUNF9FWFRFTlRTX0ZMOworCQkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgaW5vLCBpbm9kZSwgInBhc3MxIik7CisJCX0KKworCQlpZiAoTElOVVhfU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgeworCQkJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2Rpcl9tYXAsIGlubyk7CisJCQllMmZzY2tfYWRkX2Rpcl9pbmZvKGN0eCwgaW5vLCAwKTsKKwkJCWN0eC0+ZnNfZGlyZWN0b3J5X2NvdW50Kys7CisJCX0gZWxzZSBpZiAoTElOVVhfU19JU1JFRyAoaW5vZGUtPmlfbW9kZSkpIHsKKwkJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9yZWdfbWFwLCBpbm8pOworCQkJY3R4LT5mc19yZWd1bGFyX2NvdW50Kys7CisJCX0gZWxzZSBpZiAoTElOVVhfU19JU0NIUiAoaW5vZGUtPmlfbW9kZSkgJiYKKwkJCSAgIGUyZnNja19wYXNzMV9jaGVja19kZXZpY2VfaW5vZGUoZnMsIGlub2RlKSkgeworCQkJY2hlY2tfaW1tdXRhYmxlKGN0eCwgJnBjdHgpOworCQkJY2hlY2tfc2l6ZShjdHgsICZwY3R4KTsKKwkJCWN0eC0+ZnNfY2hhcmRldl9jb3VudCsrOworCQl9IGVsc2UgaWYgKExJTlVYX1NfSVNCTEsgKGlub2RlLT5pX21vZGUpICYmCisJCQkgICBlMmZzY2tfcGFzczFfY2hlY2tfZGV2aWNlX2lub2RlKGZzLCBpbm9kZSkpIHsKKwkJCWNoZWNrX2ltbXV0YWJsZShjdHgsICZwY3R4KTsKKwkJCWNoZWNrX3NpemUoY3R4LCAmcGN0eCk7CisJCQljdHgtPmZzX2Jsb2NrZGV2X2NvdW50Kys7CisJCX0gZWxzZSBpZiAoTElOVVhfU19JU0xOSyAoaW5vZGUtPmlfbW9kZSkgJiYKKwkJCSAgIGUyZnNja19wYXNzMV9jaGVja19zeW1saW5rKGZzLCBpbm8sIGlub2RlLAorCQkJCQkJICAgICAgYmxvY2tfYnVmKSkgeworCQkJY2hlY2tfaW1tdXRhYmxlKGN0eCwgJnBjdHgpOworCQkJY3R4LT5mc19zeW1saW5rc19jb3VudCsrOworCQkJaWYgKGV4dDJmc19pbm9kZV9kYXRhX2Jsb2NrcyhmcywgaW5vZGUpID09IDApIHsKKwkJCQljdHgtPmZzX2Zhc3Rfc3ltbGlua3NfY291bnQrKzsKKwkJCQljaGVja19ibG9ja3MoY3R4LCAmcGN0eCwgYmxvY2tfYnVmKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQllbHNlIGlmIChMSU5VWF9TX0lTRklGTyAoaW5vZGUtPmlfbW9kZSkgJiYKKwkJCSBlMmZzY2tfcGFzczFfY2hlY2tfZGV2aWNlX2lub2RlKGZzLCBpbm9kZSkpIHsKKwkJCWNoZWNrX2ltbXV0YWJsZShjdHgsICZwY3R4KTsKKwkJCWNoZWNrX3NpemUoY3R4LCAmcGN0eCk7CisJCQljdHgtPmZzX2ZpZm9fY291bnQrKzsKKwkJfSBlbHNlIGlmICgoTElOVVhfU19JU1NPQ0sgKGlub2RlLT5pX21vZGUpKSAmJgorCQkJICAgZTJmc2NrX3Bhc3MxX2NoZWNrX2RldmljZV9pbm9kZShmcywgaW5vZGUpKSB7CisJCQljaGVja19pbW11dGFibGUoY3R4LCAmcGN0eCk7CisJCQljaGVja19zaXplKGN0eCwgJnBjdHgpOworCQkJY3R4LT5mc19zb2NrZXRzX2NvdW50Kys7CisJCX0gZWxzZQorCQkJbWFya19pbm9kZV9iYWQoY3R4LCBpbm8pOworCQlpZiAoIShpbm9kZS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkpIHsKKwkJCWlmIChpbm9kZS0+aV9ibG9ja1tFWFQyX0lORF9CTE9DS10pCisJCQkJY3R4LT5mc19pbmRfY291bnQrKzsKKwkJCWlmIChpbm9kZS0+aV9ibG9ja1tFWFQyX0RJTkRfQkxPQ0tdKQorCQkJCWN0eC0+ZnNfZGluZF9jb3VudCsrOworCQkJaWYgKGlub2RlLT5pX2Jsb2NrW0VYVDJfVElORF9CTE9DS10pCisJCQkJY3R4LT5mc190aW5kX2NvdW50Kys7CisJCX0KKwkJaWYgKCEoaW5vZGUtPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpICYmCisJCSAgICAoaW5vZGUtPmlfYmxvY2tbRVhUMl9JTkRfQkxPQ0tdIHx8CisJCSAgICAgaW5vZGUtPmlfYmxvY2tbRVhUMl9ESU5EX0JMT0NLXSB8fAorCQkgICAgIGlub2RlLT5pX2Jsb2NrW0VYVDJfVElORF9CTE9DS10gfHwKKwkJICAgICBleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsIGlub2RlKSkpIHsKKwkJCWlub2Rlc190b19wcm9jZXNzW3Byb2Nlc3NfaW5vZGVfY291bnRdLmlubyA9IGlubzsKKwkJCWlub2Rlc190b19wcm9jZXNzW3Byb2Nlc3NfaW5vZGVfY291bnRdLmlub2RlID0gKmlub2RlOworCQkJcHJvY2Vzc19pbm9kZV9jb3VudCsrOworCQl9IGVsc2UKKwkJCWNoZWNrX2Jsb2NrcyhjdHgsICZwY3R4LCBibG9ja19idWYpOworCisJCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCQlnb3RvIGVuZGl0OworCisJCWlmIChwcm9jZXNzX2lub2RlX2NvdW50ID49IGN0eC0+cHJvY2Vzc19pbm9kZV9zaXplKSB7CisJCQlwcm9jZXNzX2lub2RlcyhjdHgsIGJsb2NrX2J1Zik7CisKKwkJCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCQkJZ290byBlbmRpdDsKKwkJfQorCX0KKwlwcm9jZXNzX2lub2RlcyhjdHgsIGJsb2NrX2J1Zik7CisJZXh0MmZzX2Nsb3NlX2lub2RlX3NjYW4oc2Nhbik7CisJc2NhbiA9IE5VTEw7CisKKwlyZXNlcnZlX2Jsb2NrX2Zvcl9yb290X3JlcGFpcihjdHgpOworCXJlc2VydmVfYmxvY2tfZm9yX2xuZl9yZXBhaXIoY3R4KTsKKworCS8qCisJICogSWYgYW55IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9ja3MnIHJlZmVyZW5jZSBjb3VudHMgbmVlZCB0bworCSAqIGJlIGFkanVzdGVkLCBlaXRoZXIgdXAgKGN0eC0+cmVmY291bnRfZXh0cmEpLCBvciBkb3duCisJICogKGN0eC0+cmVmY291bnQpLCB0aGVuIGZpeCB0aGVtLgorCSAqLworCWlmIChjdHgtPnJlZmNvdW50KSB7CisJCWFkanVzdF9leHRhdHRyX3JlZmNvdW50KGN0eCwgY3R4LT5yZWZjb3VudCwgYmxvY2tfYnVmLCAtMSk7CisJCWVhX3JlZmNvdW50X2ZyZWUoY3R4LT5yZWZjb3VudCk7CisJCWN0eC0+cmVmY291bnQgPSAwOworCX0KKwlpZiAoY3R4LT5yZWZjb3VudF9leHRyYSkgeworCQlhZGp1c3RfZXh0YXR0cl9yZWZjb3VudChjdHgsIGN0eC0+cmVmY291bnRfZXh0cmEsCisJCQkJCWJsb2NrX2J1ZiwgKzEpOworCQllYV9yZWZjb3VudF9mcmVlKGN0eC0+cmVmY291bnRfZXh0cmEpOworCQljdHgtPnJlZmNvdW50X2V4dHJhID0gMDsKKwl9CisKKwlpZiAoY3R4LT5pbnZhbGlkX2JpdG1hcHMpCisJCWhhbmRsZV9mc19iYWRfYmxvY2tzKGN0eCk7CisKKwkvKiBXZSBkb24ndCBuZWVkIHRoZSBibG9ja19lYV9tYXAgYW55IG1vcmUgKi8KKwlpZiAoY3R4LT5ibG9ja19lYV9tYXApIHsKKwkJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKGN0eC0+YmxvY2tfZWFfbWFwKTsKKwkJY3R4LT5ibG9ja19lYV9tYXAgPSAwOworCX0KKworCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfUkVTSVpFX0lOT0RFKSB7CisJCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJCXBjdHguZXJyY29kZSA9IGV4dDJmc19jcmVhdGVfcmVzaXplX2lub2RlKGZzKTsKKwkJaWYgKHBjdHguZXJyY29kZSkgeworCQkJaWYgKCFmaXhfcHJvYmxlbShjdHgsIFBSXzFfUkVTSVpFX0lOT0RFX0NSRUFURSwKKwkJCQkJICZwY3R4KSkgeworCQkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCQkJZ290byBlbmRpdDsKKwkJCX0KKwkJCXBjdHguZXJyY29kZSA9IDA7CisJCX0KKwkJaWYgKCFwY3R4LmVycmNvZGUpIHsKKwkJCWUyZnNja19yZWFkX2lub2RlKGN0eCwgRVhUMl9SRVNJWkVfSU5PLCBpbm9kZSwKKwkJCQkJICAicmVjcmVhdGUgaW5vZGUiKTsKKwkJCWlub2RlLT5pX210aW1lID0gY3R4LT5ub3c7CisJCQllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBFWFQyX1JFU0laRV9JTk8sIGlub2RlLAorCQkJCQkgICAicmVjcmVhdGUgaW5vZGUiKTsKKwkJfQorCQljdHgtPmZsYWdzICY9IH5FMkZfRkxBR19SRVNJWkVfSU5PREU7CisJfQorCisJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19SRVNUQVJUKSB7CisJCS8qCisJCSAqIE9ubHkgdGhlIG1hc3RlciBjb3B5IG9mIHRoZSBzdXBlcmJsb2NrIGFuZCBibG9jaworCQkgKiBncm91cCBkZXNjcmlwdG9ycyBhcmUgZ29pbmcgdG8gYmUgd3JpdHRlbiBkdXJpbmcgYQorCQkgKiByZXN0YXJ0LCBzbyBzZXQgdGhlIHN1cGVyYmxvY2sgdG8gYmUgdXNlZCB0byBiZSB0aGUKKwkJICogbWFzdGVyIHN1cGVyYmxvY2suCisJCSAqLworCQljdHgtPnVzZV9zdXBlcmJsb2NrID0gMDsKKwkJdW53aW5kX3Bhc3MxKGZzKTsKKwkJZ290byBlbmRpdDsKKwl9CisKKwlpZiAoY3R4LT5ibG9ja19kdXBfbWFwKSB7CisJCWlmIChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1BSRUVOKSB7CisJCQljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0RVUF9CTE9DS1NfUFJFRU5TVE9QLCAmcGN0eCk7CisJCX0KKwkJZTJmc2NrX3Bhc3MxX2R1cGJsb2NrcyhjdHgsIGJsb2NrX2J1Zik7CisJfQorCWV4dDJmc19mcmVlX21lbSgmaW5vZGVzX3RvX3Byb2Nlc3MpOworZW5kaXQ6CisJZTJmc2NrX3VzZV9pbm9kZV9zaG9ydGN1dHMoY3R4LCAwKTsKKworCWlmIChzY2FuKQorCQlleHQyZnNfY2xvc2VfaW5vZGVfc2NhbihzY2FuKTsKKwlpZiAoYmxvY2tfYnVmKQorCQlleHQyZnNfZnJlZV9tZW0oJmJsb2NrX2J1Zik7CisJaWYgKGlub2RlKQorCQlleHQyZnNfZnJlZV9tZW0oJmlub2RlKTsKKworCWlmICgoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1NJR05BTF9NQVNLKSA9PSAwKQorCQlwcmludF9yZXNvdXJjZV90cmFjayhjdHgsIF8oIlBhc3MgMSIpLCAmcnRyYWNrLCBjdHgtPmZzLT5pbyk7Cit9CisKKy8qCisgKiBXaGVuIHRoZSBpbm9kZV9zY2FuIHJvdXRpbmVzIGNhbGwgdGhpcyBjYWxsYmFjayBhdCB0aGUgZW5kIG9mIHRoZQorICogZ2xvY2sgZ3JvdXAsIGNhbGwgcHJvY2Vzc19pbm9kZXMuCisgKi8KK3N0YXRpYyBlcnJjb2RlX3Qgc2Nhbl9jYWxsYmFjayhleHQyX2ZpbHN5cyBmcywKKwkJCSAgICAgICBleHQyX2lub2RlX3NjYW4gc2NhbiBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICAgZGdycF90IGdyb3VwLCB2b2lkICogcHJpdl9kYXRhKQoreworCXN0cnVjdCBzY2FuX2NhbGxiYWNrX3N0cnVjdCAqc2Nhbl9zdHJ1Y3Q7CisJZTJmc2NrX3QgY3R4OworCisJc2Nhbl9zdHJ1Y3QgPSAoc3RydWN0IHNjYW5fY2FsbGJhY2tfc3RydWN0ICopIHByaXZfZGF0YTsKKwljdHggPSBzY2FuX3N0cnVjdC0+Y3R4OworCisJcHJvY2Vzc19pbm9kZXMoKGUyZnNja190KSBmcy0+cHJpdl9kYXRhLCBzY2FuX3N0cnVjdC0+YmxvY2tfYnVmKTsKKworCWlmIChjdHgtPnByb2dyZXNzKQorCQlpZiAoKGN0eC0+cHJvZ3Jlc3MpKGN0eCwgMSwgZ3JvdXArMSwKKwkJCQkgICAgY3R4LT5mcy0+Z3JvdXBfZGVzY19jb3VudCkpCisJCQlyZXR1cm4gRVhUMl9FVF9DQU5DRUxfUkVRVUVTVEVEOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQcm9jZXNzIHRoZSBpbm9kZXMgaW4gdGhlICJpbm9kZXMgdG8gcHJvY2VzcyIgbGlzdC4KKyAqLworc3RhdGljIHZvaWQgcHJvY2Vzc19pbm9kZXMoZTJmc2NrX3QgY3R4LCBjaGFyICpibG9ja19idWYpCit7CisJaW50CQkJaTsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQkqb2xkX3N0YXNoZWRfaW5vZGU7CisJZXh0Ml9pbm9fdAkJb2xkX3N0YXNoZWRfaW5vOworCWNvbnN0IGNoYXIJCSpvbGRfb3BlcmF0aW9uOworCWNoYXIJCQlidWZbODBdOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKworI2lmIDAKKwlwcmludGYoImJlZ2luIHByb2Nlc3NfaW5vZGVzOiAiKTsKKyNlbmRpZgorCWlmIChwcm9jZXNzX2lub2RlX2NvdW50ID09IDApCisJCXJldHVybjsKKwlvbGRfb3BlcmF0aW9uID0gZWhhbmRsZXJfb3BlcmF0aW9uKDApOworCW9sZF9zdGFzaGVkX2lub2RlID0gY3R4LT5zdGFzaGVkX2lub2RlOworCW9sZF9zdGFzaGVkX2lubyA9IGN0eC0+c3Rhc2hlZF9pbm87CisJcXNvcnQoaW5vZGVzX3RvX3Byb2Nlc3MsIHByb2Nlc3NfaW5vZGVfY291bnQsCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgcHJvY2Vzc19pbm9kZV9ibG9jayksIHByb2Nlc3NfaW5vZGVfY21wKTsKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCWZvciAoaT0wOyBpIDwgcHJvY2Vzc19pbm9kZV9jb3VudDsgaSsrKSB7CisJCXBjdHguaW5vZGUgPSBjdHgtPnN0YXNoZWRfaW5vZGUgPSAmaW5vZGVzX3RvX3Byb2Nlc3NbaV0uaW5vZGU7CisJCXBjdHguaW5vID0gY3R4LT5zdGFzaGVkX2lubyA9IGlub2Rlc190b19wcm9jZXNzW2ldLmlubzsKKworI2lmIDAKKwkJcHJpbnRmKCIldSAiLCBwY3R4Lmlubyk7CisjZW5kaWYKKwkJc3ByaW50ZihidWYsIF8oInJlYWRpbmcgaW5kaXJlY3QgYmxvY2tzIG9mIGlub2RlICV1IiksCisJCQlwY3R4Lmlubyk7CisJCWVoYW5kbGVyX29wZXJhdGlvbihidWYpOworCQljaGVja19ibG9ja3MoY3R4LCAmcGN0eCwgYmxvY2tfYnVmKTsKKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19TSUdOQUxfTUFTSykKKwkJCWJyZWFrOworCX0KKwljdHgtPnN0YXNoZWRfaW5vZGUgPSBvbGRfc3Rhc2hlZF9pbm9kZTsKKwljdHgtPnN0YXNoZWRfaW5vID0gb2xkX3N0YXNoZWRfaW5vOworCXByb2Nlc3NfaW5vZGVfY291bnQgPSAwOworI2lmIDAKKwlwcmludGYoImVuZCBwcm9jZXNzIGlub2Rlc1xuIik7CisjZW5kaWYKKwllaGFuZGxlcl9vcGVyYXRpb24ob2xkX29wZXJhdGlvbik7Cit9CisKK3N0YXRpYyBFWFQyX1FTT1JUX1RZUEUgcHJvY2Vzc19pbm9kZV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgcHJvY2Vzc19pbm9kZV9ibG9jayAqaWJfYSA9CisJCShjb25zdCBzdHJ1Y3QgcHJvY2Vzc19pbm9kZV9ibG9jayAqKSBhOworCWNvbnN0IHN0cnVjdCBwcm9jZXNzX2lub2RlX2Jsb2NrICppYl9iID0KKwkJKGNvbnN0IHN0cnVjdCBwcm9jZXNzX2lub2RlX2Jsb2NrICopIGI7CisJaW50CXJldDsKKworCXJldCA9IChpYl9hLT5pbm9kZS5pX2Jsb2NrW0VYVDJfSU5EX0JMT0NLXSAtCisJICAgICAgIGliX2ItPmlub2RlLmlfYmxvY2tbRVhUMl9JTkRfQkxPQ0tdKTsKKwlpZiAocmV0ID09IDApCisJCS8qCisJCSAqIFdlIG9ubHkgY2FsbCBwcm9jZXNzX2lub2RlcygpIGZvciBub24tZXh0ZW50CisJCSAqIGlub2Rlcywgc28gaXQncyBPSyB0byBwYXNzIE5VTEwgdG8KKwkJICogZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKCkgaGVyZS4KKwkJICovCisJCXJldCA9IGV4dDJmc19maWxlX2FjbF9ibG9jaygwLCAmKGliX2EtPmlub2RlKSkgLQorCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKDAsICYoaWJfYi0+aW5vZGUpKTsKKwlpZiAocmV0ID09IDApCisJCXJldCA9IGliX2EtPmlubyAtIGliX2ItPmlubzsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTWFyayBhbiBpbm9kZSBhcyBiZWluZyBiYWQgaW4gc29tZSB3aGF0CisgKi8KK3N0YXRpYyB2b2lkIG1hcmtfaW5vZGVfYmFkKGUyZnNja190IGN0eCwgaW5vX3QgaW5vKQoreworCXN0cnVjdAkJcHJvYmxlbV9jb250ZXh0IHBjdHg7CisKKwlpZiAoIWN0eC0+aW5vZGVfYmFkX21hcCkgeworCQljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCisJCXBjdHguZXJyY29kZSA9IGUyZnNja19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoY3R4LT5mcywKKwkJCQlfKCJiYWQgaW5vZGUgbWFwIiksIEVYVDJGU19CTUFQNjRfUkJUUkVFLAorCQkJCSJpbm9kZV9iYWRfbWFwIiwgJmN0eC0+aW5vZGVfYmFkX21hcCk7CisJCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJCXBjdHgubnVtID0gMzsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9BTExPQ0FURV9JQklUTUFQX0VSUk9SLCAmcGN0eCk7CisJCQkvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KKwkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCQlyZXR1cm47CisJCX0KKwl9CisJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2JhZF9tYXAsIGlubyk7Cit9CisKKworLyoKKyAqIFRoaXMgcHJvY2VkdXJlIHdpbGwgYWxsb2NhdGUgdGhlIGlub2RlICJiYiIgKGJhZGJsb2NrKSBtYXAgdGFibGUKKyAqLworc3RhdGljIHZvaWQgYWxsb2NfYmJfbWFwKGUyZnNja190IGN0eCkKK3sKKwlzdHJ1Y3QJCXByb2JsZW1fY29udGV4dCBwY3R4OworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlwY3R4LmVycmNvZGUgPSBlMmZzY2tfYWxsb2NhdGVfaW5vZGVfYml0bWFwKGN0eC0+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+ZmxhZ3MgfD0gcmVzdGFydF9mbGFnOworCisJaWYgKGlubyA9PSBFWFQyX0JBRF9JTk8pCisJCW1lbXNldChpbm9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSk7CisKKwllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBpbm8sIGlub2RlLCBzb3VyY2UpOworfQorCisvKgorICogVXNlIHRoZSBtdWx0aXBsZS1ibG9ja3MgcmVjbGFtYXRpb24gY29kZSB0byBmaXggYWxpZ25tZW50IHByb2JsZW1zIGluCisgKiBhIGJpZ2FsbG9jIGZpbGVzeXN0ZW0uICBXZSB3YW50IGEgbG9naWNhbCBjbHVzdGVyIHRvIG1hcCB0byAqb25seSogb25lCisgKiBwaHlzaWNhbCBjbHVzdGVyLCBhbmQgd2Ugd2FudCB0aGUgYmxvY2sgb2Zmc2V0cyB3aXRoaW4gdGhhdCBjbHVzdGVyIHRvCisgKiBsaW5lIHVwLgorICovCitzdGF0aWMgaW50IGhhc191bmFsaWduZWRfY2x1c3Rlcl9tYXAoZTJmc2NrX3QgY3R4LAorCQkJCSAgICAgYmxrNjRfdCBsYXN0X3BibGssIGUyX2Jsa2NudF90IGxhc3RfbGJsaywKKwkJCQkgICAgIGJsazY0X3QgcGJsaywgYmxrNjRfdCBsYmxrKQoreworCWJsazY0X3QgY2x1c3Rlcl9tYXNrOworCisJaWYgKCFjdHgtPmZzLT5jbHVzdGVyX3JhdGlvX2JpdHMpCisJCXJldHVybiAwOworCWNsdXN0ZXJfbWFzayA9IEVYVDJGU19DTFVTVEVSX01BU0soY3R4LT5mcyk7CisKKwkvKgorCSAqIElmIHRoZSBibG9jayBpbiB0aGUgbG9naWNhbCBjbHVzdGVyIGRvZXNuJ3QgYWxpZ24gd2l0aCB0aGUgYmxvY2sgaW4KKwkgKiB0aGUgcGh5c2ljYWwgY2x1c3Rlci4uLgorCSAqLworCWlmICgobGJsayAmIGNsdXN0ZXJfbWFzaykgIT0gKHBibGsgJiBjbHVzdGVyX21hc2spKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogSWYgd2UgY3Jvc3MgYSBwaHlzaWNhbCBjbHVzdGVyIGJvdW5kYXJ5IHdpdGhpbiBhIGxvZ2ljYWwgY2x1c3Rlci4uLgorCSAqLworCWlmIChsYXN0X3BibGsgJiYgKGxibGsgJiBjbHVzdGVyX21hc2spICE9IDAgJiYKKwkgICAgRVhUMkZTX0IyQyhjdHgtPmZzLCBsYmxrKSA9PSBFWFQyRlNfQjJDKGN0eC0+ZnMsIGxhc3RfbGJsaykgJiYKKwkgICAgRVhUMkZTX0IyQyhjdHgtPmZzLCBwYmxrKSAhPSBFWFQyRlNfQjJDKGN0eC0+ZnMsIGxhc3RfcGJsaykpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNjYW5fZXh0ZW50X25vZGUoZTJmc2NrX3QgY3R4LCBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4LAorCQkJICAgICBzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgKnBiLAorCQkJICAgICBibGs2NF90IHN0YXJ0X2Jsb2NrLCBibGs2NF90IGVuZF9ibG9jaywKKwkJCSAgICAgYmxrNjRfdCBlb2ZfYmxvY2ssCisJCQkgICAgIGV4dDJfZXh0ZW50X2hhbmRsZV90IGVoYW5kbGUpCit7CisJc3RydWN0IGV4dDJmc19leHRlbnQJZXh0ZW50OworCWJsazY0X3QJCQlibGssIGxhc3RfbGJsazsKKwllMl9ibGtjbnRfdAkJYmxvY2tjbnQ7CisJdW5zaWduZWQgaW50CQlpOworCWludAkJCWlzX2RpciwgaXNfbGVhZjsKKwlwcm9ibGVtX3QJCXByb2JsZW07CisJc3RydWN0IGV4dDJfZXh0ZW50X2luZm8JaW5mbzsKKworCXBjdHgtPmVycmNvZGUgPSBleHQyZnNfZXh0ZW50X2dldF9pbmZvKGVoYW5kbGUsICZpbmZvKTsKKwlpZiAocGN0eC0+ZXJyY29kZSkKKwkJcmV0dXJuOworCisJcGN0eC0+ZXJyY29kZSA9IGV4dDJmc19leHRlbnRfZ2V0KGVoYW5kbGUsIEVYVDJfRVhURU5UX0ZJUlNUX1NJQiwKKwkJCQkJICAmZXh0ZW50KTsKKwl3aGlsZSAoIXBjdHgtPmVycmNvZGUgJiYgaW5mby5udW1fZW50cmllcy0tID4gMCkgeworCQlpc19sZWFmID0gZXh0ZW50LmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19MRUFGOworCQlpc19kaXIgPSBMSU5VWF9TX0lTRElSKHBjdHgtPmlub2RlLT5pX21vZGUpOworCQlsYXN0X2xibGsgPSBleHRlbnQuZV9sYmxrICsgZXh0ZW50LmVfbGVuIC0gMTsKKworCQlwcm9ibGVtID0gMDsKKwkJaWYgKGV4dGVudC5lX3BibGsgPT0gMCB8fAorCQkgICAgZXh0ZW50LmVfcGJsayA8IGN0eC0+ZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2sgfHwKKwkJICAgIGV4dGVudC5lX3BibGsgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChjdHgtPmZzLT5zdXBlcikpCisJCQlwcm9ibGVtID0gUFJfMV9FWFRFTlRfQkFEX1NUQVJUX0JMSzsKKwkJZWxzZSBpZiAoZXh0ZW50LmVfbGJsayA8IHN0YXJ0X2Jsb2NrKQorCQkJcHJvYmxlbSA9IFBSXzFfT1VUX09GX09SREVSX0VYVEVOVFM7CisJCWVsc2UgaWYgKChlbmRfYmxvY2sgJiYgbGFzdF9sYmxrID4gZW5kX2Jsb2NrKSAmJgorCQkJICghKGV4dGVudC5lX2ZsYWdzICYgRVhUMl9FWFRFTlRfRkxBR1NfVU5JTklUICYmCisJCQkJbGFzdF9sYmxrID4gZW9mX2Jsb2NrKSkpCisJCQlwcm9ibGVtID0gUFJfMV9FWFRFTlRfRU5EX09VVF9PRl9CT1VORFM7CisJCWVsc2UgaWYgKGlzX2xlYWYgJiYgZXh0ZW50LmVfbGVuID09IDApCisJCQlwcm9ibGVtID0gUFJfMV9FWFRFTlRfTEVOR1RIX1pFUk87CisJCWVsc2UgaWYgKGlzX2xlYWYgJiYKKwkJCSAoZXh0ZW50LmVfcGJsayArIGV4dGVudC5lX2xlbikgPgorCQkJIGV4dDJmc19ibG9ja3NfY291bnQoY3R4LT5mcy0+c3VwZXIpKQorCQkJcHJvYmxlbSA9IFBSXzFfRVhURU5UX0VORFNfQkVZT05EOworCQllbHNlIGlmIChpc19sZWFmICYmIGlzX2RpciAmJgorCQkJICgoZXh0ZW50LmVfbGJsayArIGV4dGVudC5lX2xlbikgPgorCQkJICAoMSA8PCAoMjEgLSBjdHgtPmZzLT5zdXBlci0+c19sb2dfYmxvY2tfc2l6ZSkpKSkKKwkJCXByb2JsZW0gPSBQUl8xX1RPT0JJR19ESVI7CisKKwkJLyoKKwkJICogVW5pbml0aWFsaXplZCBibG9ja3MgaW4gYSBkaXJlY3Rvcnk/ICBDbGVhciB0aGUgZmxhZyBhbmQKKwkJICogd2UnbGwgaW50ZXJwcmV0IHRoZSBibG9ja3MgbGF0ZXIuCisJCSAqLworCQlpZiAoaXNfZGlyICYmIHByb2JsZW0gPT0gMCAmJgorCQkgICAgKGV4dGVudC5lX2ZsYWdzICYgRVhUMl9FWFRFTlRfRkxBR1NfVU5JTklUKSAmJgorCQkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8xX1VOSU5JVF9EQkxPQ0ssIHBjdHgpKSB7CisJCQlleHRlbnQuZV9mbGFncyAmPSB+RVhUMl9FWFRFTlRfRkxBR1NfVU5JTklUOworCQkJcGItPmlub2RlX21vZGlmaWVkID0gMTsKKwkJCXBjdHgtPmVycmNvZGUgPSBleHQyZnNfZXh0ZW50X3JlcGxhY2UoZWhhbmRsZSwgMCwKKwkJCQkJCQkgICAgICAmZXh0ZW50KTsKKwkJCWlmIChwY3R4LT5lcnJjb2RlKQorCQkJCXJldHVybjsKKwkJfQorCisJCWlmIChwcm9ibGVtKSB7CityZXBvcnRfcHJvYmxlbToKKwkJCXBjdHgtPmJsayA9IGV4dGVudC5lX3BibGs7CisJCQlwY3R4LT5ibGsyID0gZXh0ZW50LmVfbGJsazsKKwkJCXBjdHgtPm51bSA9IGV4dGVudC5lX2xlbjsKKwkJCXBjdHgtPmJsa2NvdW50ID0gZXh0ZW50LmVfbGJsayArIGV4dGVudC5lX2xlbjsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIHByb2JsZW0sIHBjdHgpKSB7CisJCQkJaWYgKGN0eC0+aW52YWxpZF9iaXRtYXBzKSB7CisJCQkJCS8qCisJCQkJCSAqIElmIGZzY2sga25vd3MgdGhlIGJpdG1hcHMgYXJlIGJhZCwKKwkJCQkJICogc2tpcCB0byB0aGUgbmV4dCBleHRlbnQgYW5kCisJCQkJCSAqIHRyeSB0byBjbGVhciB0aGlzIGV4dGVudCBhZ2FpbgorCQkJCQkgKiBhZnRlciBmaXhpbmcgdGhlIGJpdG1hcHMsIGJ5CisJCQkJCSAqIHJlc3RhcnRpbmcgZnNjay4KKwkJCQkJICovCisJCQkJCXBjdHgtPmVycmNvZGUgPSBleHQyZnNfZXh0ZW50X2dldCgKKwkJCQkJCQkgIGVoYW5kbGUsCisJCQkJCQkJICBFWFQyX0VYVEVOVF9ORVhUX1NJQiwKKwkJCQkJCQkgICZleHRlbnQpOworCQkJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX1JFU1RBUlRfTEFURVI7CisJCQkJCWlmIChwY3R4LT5lcnJjb2RlID09CisJCQkJCQkgICAgRVhUMl9FVF9OT19DVVJSRU5UX05PREUpIHsKKwkJCQkJCXBjdHgtPmVycmNvZGUgPSAwOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWUyZnNja19yZWFkX2JpdG1hcHMoY3R4KTsKKwkJCQlwYi0+aW5vZGVfbW9kaWZpZWQgPSAxOworCQkJCXBjdHgtPmVycmNvZGUgPQorCQkJCQlleHQyZnNfZXh0ZW50X2RlbGV0ZShlaGFuZGxlLCAwKTsKKwkJCQlpZiAocGN0eC0+ZXJyY29kZSkgeworCQkJCQlwY3R4LT5zdHIgPSAiZXh0MmZzX2V4dGVudF9kZWxldGUiOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCXBjdHgtPmVycmNvZGUgPSBleHQyZnNfZXh0ZW50X2ZpeF9wYXJlbnRzKGVoYW5kbGUpOworCQkJCWlmIChwY3R4LT5lcnJjb2RlICYmCisJCQkJICAgIHBjdHgtPmVycmNvZGUgIT0gRVhUMl9FVF9OT19DVVJSRU5UX05PREUpIHsKKwkJCQkJcGN0eC0+c3RyID0gImV4dDJmc19leHRlbnRfZml4X3BhcmVudHMiOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCXBjdHgtPmVycmNvZGUgPSBleHQyZnNfZXh0ZW50X2dldChlaGFuZGxlLAorCQkJCQkJCQkgIEVYVDJfRVhURU5UX0NVUlJFTlQsCisJCQkJCQkJCSAgJmV4dGVudCk7CisJCQkJaWYgKHBjdHgtPmVycmNvZGUgPT0gRVhUMl9FVF9OT19DVVJSRU5UX05PREUpIHsKKwkJCQkJcGN0eC0+ZXJyY29kZSA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWdvdG8gbmV4dDsKKwkJfQorCisJCWlmICghaXNfbGVhZikgeworCQkJYmxrNjRfdCBsYmxrID0gZXh0ZW50LmVfbGJsazsKKworCQkJYmxrID0gZXh0ZW50LmVfcGJsazsKKwkJCXBjdHgtPmVycmNvZGUgPSBleHQyZnNfZXh0ZW50X2dldChlaGFuZGxlLAorCQkJCQkJICBFWFQyX0VYVEVOVF9ET1dOLCAmZXh0ZW50KTsKKwkJCWlmIChwY3R4LT5lcnJjb2RlKSB7CisJCQkJcGN0eC0+c3RyID0gIkVYVDJfRVhURU5UX0RPV04iOworCQkJCXByb2JsZW0gPSBQUl8xX0VYVEVOVF9IRUFERVJfSU5WQUxJRDsKKwkJCQlpZiAocGN0eC0+ZXJyY29kZSA9PSBFWFQyX0VUX0VYVEVOVF9IRUFERVJfQkFEKQorCQkJCQlnb3RvIHJlcG9ydF9wcm9ibGVtOworCQkJCXJldHVybjsKKwkJCX0KKwkJCS8qIFRoZSBuZXh0IGV4dGVudCBzaG91bGQgbWF0Y2ggdGhpcyBpbmRleCdzIGxvZ2ljYWwgc3RhcnQgKi8KKwkJCWlmIChleHRlbnQuZV9sYmxrICE9IGxibGspIHsKKwkJCQlzdHJ1Y3QgZXh0Ml9leHRlbnRfaW5mbyBlX2luZm87CisKKwkJCQlleHQyZnNfZXh0ZW50X2dldF9pbmZvKGVoYW5kbGUsICZlX2luZm8pOworCQkJCXBjdHgtPmJsayA9IGxibGs7CisJCQkJcGN0eC0+YmxrMiA9IGV4dGVudC5lX2xibGs7CisJCQkJcGN0eC0+bnVtID0gZV9pbmZvLmN1cnJfbGV2ZWwgLSAxOworCQkJCXByb2JsZW0gPSBQUl8xX0VYVEVOVF9JTkRFWF9TVEFSVF9JTlZBTElEOworCQkJCWlmIChmaXhfcHJvYmxlbShjdHgsIHByb2JsZW0sIHBjdHgpKSB7CisJCQkJCXBiLT5pbm9kZV9tb2RpZmllZCA9IDE7CisJCQkJCXBjdHgtPmVycmNvZGUgPQorCQkJCQkJZXh0MmZzX2V4dGVudF9maXhfcGFyZW50cyhlaGFuZGxlKTsKKwkJCQkJaWYgKHBjdHgtPmVycmNvZGUpIHsKKwkJCQkJCXBjdHgtPnN0ciA9ICJleHQyZnNfZXh0ZW50X2ZpeF9wYXJlbnRzIjsKKwkJCQkJCXJldHVybjsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXNjYW5fZXh0ZW50X25vZGUoY3R4LCBwY3R4LCBwYiwgZXh0ZW50LmVfbGJsaywKKwkJCQkJIGxhc3RfbGJsaywgZW9mX2Jsb2NrLCBlaGFuZGxlKTsKKwkJCWlmIChwY3R4LT5lcnJjb2RlKQorCQkJCXJldHVybjsKKwkJCXBjdHgtPmVycmNvZGUgPSBleHQyZnNfZXh0ZW50X2dldChlaGFuZGxlLAorCQkJCQkJICBFWFQyX0VYVEVOVF9VUCwgJmV4dGVudCk7CisJCQlpZiAocGN0eC0+ZXJyY29kZSkgeworCQkJCXBjdHgtPnN0ciA9ICJFWFQyX0VYVEVOVF9VUCI7CisJCQkJcmV0dXJuOworCQkJfQorCQkJbWFya19ibG9ja191c2VkKGN0eCwgYmxrKTsKKwkJCXBiLT5udW1fYmxvY2tzKys7CisJCQlnb3RvIG5leHQ7CisJCX0KKworCQlpZiAoKHBiLT5wcmV2aW91c19ibG9jayAhPSAwKSAmJgorCQkgICAgKHBiLT5wcmV2aW91c19ibG9jaysxICE9IGV4dGVudC5lX3BibGspKSB7CisJCQlpZiAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9GUkFHQ0hFQ0spIHsKKwkJCQljaGFyIHR5cGUgPSAnPyc7CisKKwkJCQlpZiAocGItPmlzX2RpcikKKwkJCQkJdHlwZSA9ICdkJzsKKwkJCQllbHNlIGlmIChwYi0+aXNfcmVnKQorCQkJCQl0eXBlID0gJ2YnOworCisJCQkJcHJpbnRmKCgiJTZsdSglYyk6IGV4cGVjdGluZyAlNmx1ICIKKwkJCQkJImFjdHVhbCBleHRlbnQgIgorCQkJCQkicGh5cyAlNmx1IGxvZyAlbHUgbGVuICVsdVxuIiksCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSBwY3R4LT5pbm8sIHR5cGUsCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSBwYi0+cHJldmlvdXNfYmxvY2srMSwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIGV4dGVudC5lX3BibGssCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSBleHRlbnQuZV9sYmxrLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgZXh0ZW50LmVfbGVuKTsKKwkJCX0KKwkJCXBiLT5mcmFnbWVudGVkID0gMTsKKwkJfQorCQkvKgorCQkgKiBJZiB3ZSBub3RpY2UgYSBnYXAgaW4gdGhlIGxvZ2ljYWwgYmxvY2sgbWFwcGluZ3Mgb2YgYW4KKwkJICogZXh0ZW50LW1hcHBlZCBkaXJlY3RvcnksIG9mZmVyIHRvIGNsb3NlIHRoZSBob2xlIGJ5CisJCSAqIG1vdmluZyB0aGUgbG9naWNhbCBibG9jayBkb3duLCBvdGhlcndpc2Ugd2UnbGwgZ28gbWFkIGluCisJCSAqIHBhc3MgMyBhbGxvY2F0aW5nIGVtcHR5IGRpcmVjdG9yeSBibG9ja3MgdG8gZmlsbCB0aGUgaG9sZS4KKwkJICovCisJCWlmIChpc19kaXIgJiYKKwkJICAgIHBiLT5sYXN0X2Jsb2NrICsgMSA8IChlMl9ibGtjbnRfdClleHRlbnQuZV9sYmxrKSB7CisJCQlibGs2NF90IG5ld19sYmxrOworCisJCQluZXdfbGJsayA9IHBiLT5sYXN0X2Jsb2NrICsgMTsKKwkJCWlmIChFWFQyRlNfQ0xVU1RFUl9SQVRJTyhjdHgtPmZzKSA+IDEpCisJCQkJbmV3X2xibGsgPSAoKG5ld19sYmxrICsKKwkJCQkJICAgICBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhjdHgtPmZzKSkgJgorCQkJCQkgICAgRVhUMkZTX0NMVVNURVJfTUFTSyhjdHgtPmZzKSkgfAorCQkJCQkgICAoZXh0ZW50LmVfbGJsayAmCisJCQkJCSAgICBFWFQyRlNfQ0xVU1RFUl9NQVNLKGN0eC0+ZnMpKTsKKwkJCXBjdHgtPmJsayA9IGV4dGVudC5lX2xibGs7CisJCQlwY3R4LT5ibGsyID0gbmV3X2xibGs7CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX0NPTExBUFNFX0RCTE9DSywgcGN0eCkpIHsKKwkJCQlleHRlbnQuZV9sYmxrID0gbmV3X2xibGs7CisJCQkJcGItPmlub2RlX21vZGlmaWVkID0gMTsKKwkJCQlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2V4dGVudF9yZXBsYWNlKGVoYW5kbGUsCisJCQkJCQkJCTAsICZleHRlbnQpOworCQkJCWlmIChwY3R4LT5lcnJjb2RlKSB7CisJCQkJCXBjdHgtPmVycmNvZGUgPSAwOworCQkJCQlnb3RvIGFsbG9jX2xhdGVyOworCQkJCX0KKwkJCQlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2V4dGVudF9maXhfcGFyZW50cyhlaGFuZGxlKTsKKwkJCQlpZiAocGN0eC0+ZXJyY29kZSkKKwkJCQkJZ290byBmYWlsZWRfYWRkX2Rpcl9ibG9jazsKKwkJCQlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2V4dGVudF9nb3RvKGVoYW5kbGUsCisJCQkJCQkJCWV4dGVudC5lX2xibGspOworCQkJCWlmIChwY3R4LT5lcnJjb2RlKQorCQkJCQlnb3RvIGZhaWxlZF9hZGRfZGlyX2Jsb2NrOworCQkJCWxhc3RfbGJsayA9IGV4dGVudC5lX2xibGsgKyBleHRlbnQuZV9sZW4gLSAxOworCQkJfQorCQl9CithbGxvY19sYXRlcjoKKwkJd2hpbGUgKGlzX2RpciAmJiAoKytwYi0+bGFzdF9kYl9ibG9jayA8CisJCQkJICAoZTJfYmxrY250X3QpIGV4dGVudC5lX2xibGspKSB7CisJCQlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2FkZF9kaXJfYmxvY2syKGN0eC0+ZnMtPmRibGlzdCwKKwkJCQkJCQkgICAgICBwYi0+aW5vLCAwLAorCQkJCQkJCSAgICAgIHBiLT5sYXN0X2RiX2Jsb2NrKTsKKwkJCWlmIChwY3R4LT5lcnJjb2RlKSB7CisJCQkJcGN0eC0+YmxrID0gMDsKKwkJCQlwY3R4LT5udW0gPSBwYi0+bGFzdF9kYl9ibG9jazsKKwkJCQlnb3RvIGZhaWxlZF9hZGRfZGlyX2Jsb2NrOworCQkJfQorCQl9CisJCWlmICghY3R4LT5mcy0+Y2x1c3Rlcl9yYXRpb19iaXRzKSB7CisJCQltYXJrX2Jsb2Nrc191c2VkKGN0eCwgZXh0ZW50LmVfcGJsaywgZXh0ZW50LmVfbGVuKTsKKwkJCXBiLT5udW1fYmxvY2tzICs9IGV4dGVudC5lX2xlbjsKKwkJfQorCQlmb3IgKGJsayA9IGV4dGVudC5lX3BibGssIGJsb2NrY250ID0gZXh0ZW50LmVfbGJsaywgaSA9IDA7CisJCSAgICAgaSA8IGV4dGVudC5lX2xlbjsKKwkJICAgICBibGsrKywgYmxvY2tjbnQrKywgaSsrKSB7CisJCQlpZiAoY3R4LT5mcy0+Y2x1c3Rlcl9yYXRpb19iaXRzICYmCisJCQkgICAgIShwYi0+cHJldmlvdXNfYmxvY2sgJiYKKwkJCSAgICAgIChFWFQyRlNfQjJDKGN0eC0+ZnMsIGJsaykgPT0KKwkJCSAgICAgICBFWFQyRlNfQjJDKGN0eC0+ZnMsIHBiLT5wcmV2aW91c19ibG9jaykpICYmCisJCQkgICAgICAoYmxrICYgRVhUMkZTX0NMVVNURVJfTUFTSyhjdHgtPmZzKSkgPT0KKwkJCSAgICAgICgodW5zaWduZWQpIGJsb2NrY250ICYgRVhUMkZTX0NMVVNURVJfTUFTSyhjdHgtPmZzKSkpKSB7CisJCQkJbWFya19ibG9ja191c2VkKGN0eCwgYmxrKTsKKwkJCQlwYi0+bnVtX2Jsb2NrcysrOworCQkJfQorCQkJaWYgKGhhc191bmFsaWduZWRfY2x1c3Rlcl9tYXAoY3R4LCBwYi0+cHJldmlvdXNfYmxvY2ssCisJCQkJCQkgICAgICBwYi0+bGFzdF9ibG9jaywgYmxrLAorCQkJCQkJICAgICAgYmxvY2tjbnQpKSB7CisJCQkJcGN0eC0+YmxrID0gYmxvY2tjbnQ7CisJCQkJcGN0eC0+YmxrMiA9IGJsazsKKwkJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfTUlTQUxJR05FRF9DTFVTVEVSLCBwY3R4KTsKKwkJCQltYXJrX2Jsb2NrX3VzZWQoY3R4LCBibGspOworCQkJCW1hcmtfYmxvY2tfdXNlZChjdHgsIGJsayk7CisJCQl9CisJCQlwYi0+bGFzdF9ibG9jayA9IGJsb2NrY250OworCQkJcGItPnByZXZpb3VzX2Jsb2NrID0gYmxrOworCisJCQlpZiAoaXNfZGlyKSB7CisJCQkJcGN0eC0+ZXJyY29kZSA9IGV4dDJmc19hZGRfZGlyX2Jsb2NrMihjdHgtPmZzLT5kYmxpc3QsIHBjdHgtPmlubywgYmxrLCBibG9ja2NudCk7CisJCQkJaWYgKHBjdHgtPmVycmNvZGUpIHsKKwkJCQkJcGN0eC0+YmxrID0gYmxrOworCQkJCQlwY3R4LT5udW0gPSBibG9ja2NudDsKKwkJCQlmYWlsZWRfYWRkX2Rpcl9ibG9jazoKKwkJCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0FERF9EQkxPQ0ssIHBjdHgpOworCQkJCQkvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KKwkJCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoaXNfZGlyICYmIGV4dGVudC5lX2xlbiA+IDApCisJCQlwYi0+bGFzdF9kYl9ibG9jayA9IGJsb2NrY250IC0gMTsKKwkJcGItPnByZXZpb3VzX2Jsb2NrID0gZXh0ZW50LmVfcGJsayArIGV4dGVudC5lX2xlbiAtIDE7CisJCXN0YXJ0X2Jsb2NrID0gcGItPmxhc3RfYmxvY2sgPSBsYXN0X2xibGs7CisJCWlmIChpc19sZWFmICYmICFpc19kaXIgJiYKKwkJICAgICEoZXh0ZW50LmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19VTklOSVQpKQorCQkJcGItPmxhc3RfaW5pdF9sYmxvY2sgPSBsYXN0X2xibGs7CisJbmV4dDoKKwkJcGN0eC0+ZXJyY29kZSA9IGV4dDJmc19leHRlbnRfZ2V0KGVoYW5kbGUsCisJCQkJCQkgIEVYVDJfRVhURU5UX05FWFRfU0lCLAorCQkJCQkJICAmZXh0ZW50KTsKKwl9CisJaWYgKHBjdHgtPmVycmNvZGUgPT0gRVhUMl9FVF9FWFRFTlRfTk9fTkVYVCkKKwkJcGN0eC0+ZXJyY29kZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2Jsb2Nrc19leHRlbnRzKGUyZnNja190IGN0eCwgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCwKKwkJCQkgc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0ICpwYikKK3sKKwlzdHJ1Y3QgZXh0Ml9leHRlbnRfaW5mbyBpbmZvOworCXN0cnVjdCBleHQyX2lub2RlCSppbm9kZSA9IHBjdHgtPmlub2RlOworCWV4dDJfZXh0ZW50X2hhbmRsZV90CWVoYW5kbGU7CisJZXh0Ml9maWxzeXMJCWZzID0gY3R4LT5mczsKKwlleHQyX2lub190CQlpbm8gPSBwY3R4LT5pbm87CisJZXJyY29kZV90CQlyZXR2YWw7CisJYmxrNjRfdCAgICAgICAgICAgICAgICAgZW9mX2xibGs7CisKKwlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2V4dGVudF9vcGVuMihmcywgaW5vLCBpbm9kZSwgJmVoYW5kbGUpOworCWlmIChwY3R4LT5lcnJjb2RlKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfUkVBRF9FWFRFTlQsIHBjdHgpKQorCQkJZTJmc2NrX2NsZWFyX2lub2RlKGN0eCwgaW5vLCBpbm9kZSwgMCwKKwkJCQkJICAgImNoZWNrX2Jsb2Nrc19leHRlbnRzIik7CisJCXBjdHgtPmVycmNvZGUgPSAwOworCQlyZXR1cm47CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXRfaW5mbyhlaGFuZGxlLCAmaW5mbyk7CisJaWYgKHJldHZhbCA9PSAwKSB7CisJCWlmIChpbmZvLm1heF9kZXB0aCA+PSBNQVhfRVhURU5UX0RFUFRIX0NPVU5UKQorCQkJaW5mby5tYXhfZGVwdGggPSBNQVhfRVhURU5UX0RFUFRIX0NPVU5ULTE7CisJCWN0eC0+ZXh0ZW50X2RlcHRoX2NvdW50W2luZm8ubWF4X2RlcHRoXSsrOworCX0KKworCWVvZl9sYmxrID0gKChFWFQyX0lfU0laRShpbm9kZSkgKyBmcy0+YmxvY2tzaXplIC0gMSkgPj4KKwkJRVhUMl9CTE9DS19TSVpFX0JJVFMoZnMtPnN1cGVyKSkgLSAxOworCXNjYW5fZXh0ZW50X25vZGUoY3R4LCBwY3R4LCBwYiwgMCwgMCwgZW9mX2xibGssIGVoYW5kbGUpOworCWlmIChwY3R4LT5lcnJjb2RlICYmCisJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9FWFRFTlRfSVRFUkFURV9GQUlMVVJFLCBwY3R4KSkgeworCQlwYi0+bnVtX2Jsb2NrcyA9IDA7CisJCWlub2RlLT5pX2Jsb2NrcyA9IDA7CisJCWUyZnNja19jbGVhcl9pbm9kZShjdHgsIGlubywgaW5vZGUsIEUyRl9GTEFHX1JFU1RBUlQsCisJCQkJICAgImNoZWNrX2Jsb2Nrc19leHRlbnRzIik7CisJCXBjdHgtPmVycmNvZGUgPSAwOworCX0KKwlleHQyZnNfZXh0ZW50X2ZyZWUoZWhhbmRsZSk7Cit9CisKKy8qCisgKiBUaGlzIHN1YnJvdXRpbmUgaXMgY2FsbGVkIG9uIGVhY2ggaW5vZGUgdG8gYWNjb3VudCBmb3IgYWxsIG9mIHRoZQorICogYmxvY2tzIHVzZWQgYnkgdGhhdCBpbm9kZS4KKyAqLworc3RhdGljIHZvaWQgY2hlY2tfYmxvY2tzKGUyZnNja190IGN0eCwgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCwKKwkJCSBjaGFyICpibG9ja19idWYpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCBwYjsKKwlleHQyX2lub190CWlubyA9IHBjdHgtPmlubzsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUgPSBwY3R4LT5pbm9kZTsKKwl1bnNpZ25lZAliYWRfc2l6ZSA9IDA7CisJaW50CQlkaXJ0eV9pbm9kZSA9IDA7CisJaW50CQlleHRlbnRfZnM7CisJX191NjQJCXNpemU7CisKKwlwYi5pbm8gPSBpbm87CisJcGIubnVtX2Jsb2NrcyA9IDA7CisJcGIubGFzdF9ibG9jayA9IC0xOworCXBiLmxhc3RfaW5pdF9sYmxvY2sgPSAtMTsKKwlwYi5sYXN0X2RiX2Jsb2NrID0gLTE7CisJcGIubnVtX2lsbGVnYWxfYmxvY2tzID0gMDsKKwlwYi5zdXBwcmVzcyA9IDA7IHBiLmNsZWFyID0gMDsKKwlwYi5mcmFnbWVudGVkID0gMDsKKwlwYi5jb21wcmVzc2VkID0gMDsKKwlwYi5wcmV2aW91c19ibG9jayA9IDA7CisJcGIuaXNfZGlyID0gTElOVVhfU19JU0RJUihpbm9kZS0+aV9tb2RlKTsKKwlwYi5pc19yZWcgPSBMSU5VWF9TX0lTUkVHKGlub2RlLT5pX21vZGUpOworCXBiLm1heF9ibG9ja3MgPSAxIDw8ICgzMSAtIGZzLT5zdXBlci0+c19sb2dfYmxvY2tfc2l6ZSk7CisJcGIuaW5vZGUgPSBpbm9kZTsKKwlwYi5wY3R4ID0gcGN0eDsKKwlwYi5jdHggPSBjdHg7CisJcGIuaW5vZGVfbW9kaWZpZWQgPSAwOworCXBjdHgtPmlubyA9IGlubzsKKwlwY3R4LT5lcnJjb2RlID0gMDsKKworCWV4dGVudF9mcyA9IChjdHgtPmZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKyAgICAgICAgICAgICAgICAgICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKTsKKworCWlmIChpbm9kZS0+aV9mbGFncyAmIEVYVDJfQ09NUFJCTEtfRkwpIHsKKwkJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkJICAgIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9DT01QUkVTU0lPTikKKwkJCXBiLmNvbXByZXNzZWQgPSAxOworCQllbHNlIHsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfQ09NUFJfU0VULCBwY3R4KSkgeworCQkJCWlub2RlLT5pX2ZsYWdzICY9IH5FWFQyX0NPTVBSQkxLX0ZMOworCQkJCWRpcnR5X2lub2RlKys7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCBpbm9kZSkgJiYKKwkgICAgY2hlY2tfZXh0X2F0dHIoY3R4LCBwY3R4LCBibG9ja19idWYpKSB7CisJCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCQlnb3RvIG91dDsKKwkJcGIubnVtX2Jsb2NrcysrOworCX0KKworCWlmIChleHQyZnNfaW5vZGVfaGFzX3ZhbGlkX2Jsb2NrczIoZnMsIGlub2RlKSkgeworCQlpZiAoZXh0ZW50X2ZzICYmIChpbm9kZS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkpCisJCQljaGVja19ibG9ja3NfZXh0ZW50cyhjdHgsIHBjdHgsICZwYik7CisJCWVsc2UgeworCQkJLyoKKwkJCSAqIElmIHdlJ3ZlIG1vZGlmaWVkIHRoZSBpbm9kZSwgd3JpdGUgaXQgb3V0IGJlZm9yZQorCQkJICogaXRlcmF0ZSgpIHRyaWVzIHRvIHVzZSBpdC4KKwkJCSAqLworCQkJaWYgKGRpcnR5X2lub2RlKSB7CisJCQkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgaW5vLCBpbm9kZSwKKwkJCQkJCSAgICJjaGVja19ibG9ja3MiKTsKKwkJCQlkaXJ0eV9pbm9kZSA9IDA7CisJCQl9CisJCQlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBpbm8sCisJCQkJCQlwYi5pc19kaXIgPyBCTE9DS19GTEFHX0hPTEUgOiAwLAorCQkJCQkJYmxvY2tfYnVmLCBwcm9jZXNzX2Jsb2NrLCAmcGIpOworCQkJLyoKKwkJCSAqIFdlIGRvIG5vdCBoYXZlIHVuaW5pdGlhbGl6ZWQgZXh0ZW50cyBpbiBub24gZXh0ZW50CisJCQkgKiBmaWxlcy4KKwkJCSAqLworCQkJcGIubGFzdF9pbml0X2xibG9jayA9IHBiLmxhc3RfYmxvY2s7CisJCQkvKgorCQkJICogSWYgaXRlcmF0ZSgpIGNoYW5nZWQgYSBibG9jayBtYXBwaW5nLCB3ZSBoYXZlIHRvCisJCQkgKiByZS1yZWFkIHRoZSBpbm9kZS4gIElmIHdlIGRlY2lkZSB0byBjbGVhciB0aGUKKwkJCSAqIGlub2RlIGFmdGVyIGNsZWFyaW5nIHNvbWUgc3R1ZmYsIHdlJ2xsIHJlLXdyaXRlIHRoZQorCQkJICogYmFkIG1hcHBpbmdzIGludG8gdGhlIGlub2RlIQorCQkJICovCisJCQlpZiAocGIuaW5vZGVfbW9kaWZpZWQpCisJCQkJZTJmc2NrX3JlYWRfaW5vZGUoY3R4LCBpbm8sIGlub2RlLAorCQkJCQkJICAiY2hlY2tfYmxvY2tzIik7CisJCX0KKwl9CisJZW5kX3Byb2JsZW1fbGF0Y2goY3R4LCBQUl9MQVRDSF9CTE9DSyk7CisJZW5kX3Byb2JsZW1fbGF0Y2goY3R4LCBQUl9MQVRDSF9UT09CSUcpOworCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCWdvdG8gb3V0OworCWlmIChwY3R4LT5lcnJjb2RlKQorCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfQkxPQ0tfSVRFUkFURSwgcGN0eCk7CisKKwlpZiAocGIuZnJhZ21lbnRlZCAmJiBwYi5udW1fYmxvY2tzIDwgZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXApIHsKKwkJaWYgKExJTlVYX1NfSVNESVIoaW5vZGUtPmlfbW9kZSkpCisJCQljdHgtPmZzX2ZyYWdtZW50ZWRfZGlyKys7CisJCWVsc2UKKwkJCWN0eC0+ZnNfZnJhZ21lbnRlZCsrOworCX0KKworCWlmIChwYi5jbGVhcikgeworCQllMmZzY2tfY2xlYXJfaW5vZGUoY3R4LCBpbm8sIGlub2RlLCBFMkZfRkxBR19SRVNUQVJULAorCQkJCSAgICJjaGVja19ibG9ja3MiKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpbm9kZS0+aV9mbGFncyAmIEVYVDJfSU5ERVhfRkwpIHsKKwkJaWYgKGhhbmRsZV9odHJlZShjdHgsIHBjdHgsIGlubywgaW5vZGUsIGJsb2NrX2J1ZikpIHsKKwkJCWlub2RlLT5pX2ZsYWdzICY9IH5FWFQyX0lOREVYX0ZMOworCQkJZGlydHlfaW5vZGUrKzsKKwkJfSBlbHNlIHsKKyNpZmRlZiBFTkFCTEVfSFRSRUUKKwkJCWUyZnNja19hZGRfZHhfZGlyKGN0eCwgaW5vLCBwYi5sYXN0X2Jsb2NrKzEpOworI2VuZGlmCisJCX0KKwl9CisKKwlpZiAoIXBiLm51bV9ibG9ja3MgJiYgcGIuaXNfZGlyKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfWkVST19MRU5HVEhfRElSLCBwY3R4KSkgeworCQkJZTJmc2NrX2NsZWFyX2lub2RlKGN0eCwgaW5vLCBpbm9kZSwgMCwgImNoZWNrX2Jsb2NrcyIpOworCQkJY3R4LT5mc19kaXJlY3RvcnlfY291bnQtLTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlmIChpbm8gPT0gRVhUMl9ST09UX0lOTyB8fCBpbm8gPj0gRVhUMl9GSVJTVF9JTk9ERShjdHgtPmZzLT5zdXBlcikpIHsKKwkJcXVvdGFfZGF0YV9hZGQoY3R4LT5xY3R4LCBpbm9kZSwgaW5vLAorCQkJICAgICAgIHBiLm51bV9ibG9ja3MgKiBmcy0+YmxvY2tzaXplKTsKKwkJcXVvdGFfZGF0YV9pbm9kZXMoY3R4LT5xY3R4LCBpbm9kZSwgaW5vLCArMSk7CisJfQorCisJaWYgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYKKwkgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSkgfHwKKwkgICAgIShpbm9kZS0+aV9mbGFncyAmIEVYVDRfSFVHRV9GSUxFX0ZMKSkKKwkJcGIubnVtX2Jsb2NrcyAqPSAoZnMtPmJsb2Nrc2l6ZSAvIDUxMik7CisJcGIubnVtX2Jsb2NrcyAqPSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcyk7CisjaWYgMAorCXByaW50ZigiaW5vZGUgJXUsIGlfc2l6ZSA9ICV1LCBsYXN0X2Jsb2NrID0gJWxsZCwgaV9ibG9ja3M9JWxsdSwgbnVtX2Jsb2NrcyA9ICVsbHVcbiIsCisJICAgICAgIGlubywgaW5vZGUtPmlfc2l6ZSwgcGIubGFzdF9ibG9jaywgZXh0MmZzX2lub2RlX2lfYmxvY2tzKGZzLCBpbm9kZSksCisJICAgICAgIHBiLm51bV9ibG9ja3MpOworI2VuZGlmCisJaWYgKHBiLmlzX2RpcikgeworCQlpbnQgbmJsb2NrID0gaW5vZGUtPmlfc2l6ZSA+PiBFWFQyX0JMT0NLX1NJWkVfQklUUyhmcy0+c3VwZXIpOworCQlpZiAoaW5vZGUtPmlfc2l6ZSAmIChmcy0+YmxvY2tzaXplIC0gMSkpCisJCQliYWRfc2l6ZSA9IDU7CisJCWVsc2UgaWYgKG5ibG9jayA+IChwYi5sYXN0X2Jsb2NrICsgMSkpCisJCQliYWRfc2l6ZSA9IDE7CisJCWVsc2UgaWYgKG5ibG9jayA8IChwYi5sYXN0X2Jsb2NrICsgMSkpIHsKKwkJCWlmICgoKHBiLmxhc3RfYmxvY2sgKyAxKSAtIG5ibG9jaykgPgorCQkJICAgIGZzLT5zdXBlci0+c19wcmVhbGxvY19kaXJfYmxvY2tzKQorCQkJCWJhZF9zaXplID0gMjsKKwkJfQorCX0gZWxzZSB7CisJCWUyX2Jsa2NudF90IGJsa3BnID0gY3R4LT5ibG9ja3NfcGVyX3BhZ2U7CisKKwkJc2l6ZSA9IEVYVDJfSV9TSVpFKGlub2RlKTsKKwkJaWYgKChwYi5sYXN0X2luaXRfbGJsb2NrID49IDApICYmCisJCSAgICAvKiBhbGxvdyBhbGxvY2F0ZWQgYmxvY2tzIHRvIGVuZCBvZiBQQUdFX1NJWkUgKi8KKwkJICAgIChzaXplIDwgKF9fdTY0KXBiLmxhc3RfaW5pdF9sYmxvY2sgKiBmcy0+YmxvY2tzaXplKSAmJgorCQkgICAgKHBiLmxhc3RfaW5pdF9sYmxvY2sgLyBibGtwZyAqIGJsa3BnICE9IHBiLmxhc3RfaW5pdF9sYmxvY2sgfHwKKwkJICAgICBzaXplIDwgKF9fdTY0KShwYi5sYXN0X2luaXRfbGJsb2NrICYgfihibGtwZy0xKSkgKgorCQkgICAgIGZzLT5ibG9ja3NpemUpKQorCQkJYmFkX3NpemUgPSAzOworCQllbHNlIGlmICghKGV4dGVudF9mcyAmJiAoaW5vZGUtPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpKSAmJgorCQkJIHNpemUgPiBleHQyX21heF9zaXplc1tmcy0+c3VwZXItPnNfbG9nX2Jsb2NrX3NpemVdKQorCQkJLyogdG9vIGJpZyBmb3IgYSBkaXJlY3QvaW5kaXJlY3QtbWFwcGVkIGZpbGUgKi8KKwkJCWJhZF9zaXplID0gNDsKKwkJZWxzZSBpZiAoKGV4dGVudF9mcyAmJiAoaW5vZGUtPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpKSAmJgorCQkJIHNpemUgPgorCQkJICgoMVVMTCA8PCAoMzIgKyBFWFQyX0JMT0NLX1NJWkVfQklUUyhmcy0+c3VwZXIpKSkgLSAxKSkKKwkJCS8qIHRvbyBiaWcgZm9yIGFuIGV4dGVudC1iYXNlZCBmaWxlIC0gMzJiaXQgZWVfYmxvY2sgKi8KKwkJCWJhZF9zaXplID0gNjsKKwl9CisJLyogaV9zaXplIGZvciBzeW1saW5rcyBpcyBjaGVja2VkIGVsc2V3aGVyZSAqLworCWlmIChiYWRfc2l6ZSAmJiAhTElOVVhfU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkgeworCQlwY3R4LT5udW0gPSAocGIubGFzdF9ibG9jaysxKSAqIGZzLT5ibG9ja3NpemU7CisJCXBjdHgtPmdyb3VwID0gYmFkX3NpemU7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfQkFEX0lfU0laRSwgcGN0eCkpIHsKKwkJCWlmIChMSU5VWF9TX0lTRElSKGlub2RlLT5pX21vZGUpKQorCQkJCXBjdHgtPm51bSAmPSAweEZGRkZGRkZGVUxMOworCQkJZXh0MmZzX2lub2RlX3NpemVfc2V0KGZzLCBpbm9kZSwgcGN0eC0+bnVtKTsKKwkJCWRpcnR5X2lub2RlKys7CisJCX0KKwkJcGN0eC0+bnVtID0gMDsKKwl9CisJaWYgKExJTlVYX1NfSVNSRUcoaW5vZGUtPmlfbW9kZSkgJiYKKwkgICAgZXh0MmZzX25lZWRzX2xhcmdlX2ZpbGVfZmVhdHVyZShFWFQyX0lfU0laRShpbm9kZSkpKQorCQljdHgtPmxhcmdlX2ZpbGVzKys7CisJaWYgKChmcy0+c3VwZXItPnNfY3JlYXRvcl9vcyA9PSBFWFQyX09TX0xJTlVYKSAmJgorCSAgICAoKHBiLm51bV9ibG9ja3MgIT0gZXh0MmZzX2lub2RlX2lfYmxvY2tzKGZzLCBpbm9kZSkpIHx8CisJICAgICAoKGZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSAmJgorCSAgICAgIChpbm9kZS0+aV9mbGFncyAmIEVYVDRfSFVHRV9GSUxFX0ZMKSAmJgorCSAgICAgIChpbm9kZS0+b3NkMi5saW51eDIubF9pX2Jsb2Nrc19oaSAhPSAwKSkpKSB7CisJCXBjdHgtPm51bSA9IHBiLm51bV9ibG9ja3M7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfQkFEX0lfQkxPQ0tTLCBwY3R4KSkgeworCQkJaW5vZGUtPmlfYmxvY2tzID0gcGIubnVtX2Jsb2NrczsKKwkJCWlub2RlLT5vc2QyLmxpbnV4Mi5sX2lfYmxvY2tzX2hpID0gcGIubnVtX2Jsb2NrcyA+PiAzMjsKKwkJCWRpcnR5X2lub2RlKys7CisJCX0KKwkJcGN0eC0+bnVtID0gMDsKKwl9CisKKwlpZiAoY3R4LT5kaXJzX3RvX2hhc2ggJiYgcGIuaXNfZGlyICYmCisJICAgICEoaW5vZGUtPmlfZmxhZ3MgJiBFWFQyX0lOREVYX0ZMKSAmJgorCSAgICAoKGlub2RlLT5pX3NpemUgLyBmcy0+YmxvY2tzaXplKSA+PSAzKSkKKwkJZXh0MmZzX3UzMl9saXN0X2FkZChjdHgtPmRpcnNfdG9faGFzaCwgaW5vKTsKKworb3V0OgorCWlmIChkaXJ0eV9pbm9kZSkKKwkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgaW5vLCBpbm9kZSwgImNoZWNrX2Jsb2NrcyIpOworfQorCisjaWYgMAorLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBjYWxsZWQgYnkgcHJvY2VzcyBibG9jayB3aGVuIGFuIGlsbGVnYWwgYmxvY2sgaXMKKyAqIGZvdW5kLiAgSXQgcmV0dXJucyBhIGRlc2NyaXB0aW9uIGFib3V0IHdoeSB0aGUgYmxvY2sgaXMgaWxsZWdhbAorICovCitzdGF0aWMgY2hhciAqZGVzY3JpYmVfaWxsZWdhbF9ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibG9jaykKK3sKKwlibGs2NF90CXN1cGVyOworCWludAlpOworCXN0YXRpYyBjaGFyCXByb2JsZW1bODBdOworCisJc3VwZXIgPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwlzdHJjcHkocHJvYmxlbSwgIlBST0dSQU1NSU5HIEVSUk9SOiBVbmtub3duIHJlYXNvbiBmb3IgaWxsZWdhbCBibG9jayIpOworCWlmIChibG9jayA8IHN1cGVyKSB7CisJCXNwcmludGYocHJvYmxlbSwgIjwgRklSU1RCTE9DSyAoJXUpIiwgc3VwZXIpOworCQlyZXR1cm4ocHJvYmxlbSk7CisJfSBlbHNlIGlmIChibG9jayA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpIHsKKwkJc3ByaW50Zihwcm9ibGVtLCAiPiBCTE9DS1MgKCV1KSIsIGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSk7CisJCXJldHVybihwcm9ibGVtKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJaWYgKGJsb2NrID09IHN1cGVyKSB7CisJCQlzcHJpbnRmKHByb2JsZW0sICJpcyB0aGUgc3VwZXJibG9jayBpbiBncm91cCAlZCIsIGkpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGJsb2NrID4gc3VwZXIgJiYKKwkJICAgIGJsb2NrIDw9IChzdXBlciArIGZzLT5kZXNjX2Jsb2NrcykpIHsKKwkJCXNwcmludGYocHJvYmxlbSwgImlzIGluIHRoZSBncm91cCBkZXNjcmlwdG9ycyAiCisJCQkJIm9mIGdyb3VwICVkIiwgaSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoYmxvY2sgPT0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKSB7CisJCQlzcHJpbnRmKHByb2JsZW0sICJpcyB0aGUgYmxvY2sgYml0bWFwIG9mIGdyb3VwICVkIiwgaSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoYmxvY2sgPT0gZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpKSB7CisJCQlzcHJpbnRmKHByb2JsZW0sICJpcyB0aGUgaW5vZGUgYml0bWFwIG9mIGdyb3VwICVkIiwgaSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoYmxvY2sgPj0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkgJiYKKwkJICAgIChibG9jayA8IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpCisJCSAgICAgKyBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCkpIHsKKwkJCXNwcmludGYocHJvYmxlbSwgImlzIGluIHRoZSBpbm9kZSB0YWJsZSBvZiBncm91cCAlZCIsCisJCQkJaSk7CisJCQlicmVhazsKKwkJfQorCQlzdXBlciArPSBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwl9CisJcmV0dXJuKHByb2JsZW0pOworfQorI2VuZGlmCisKKy8qCisgKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBjaGVja19ibG9ja3MoKS4KKyAqLworc3RhdGljIGludCBwcm9jZXNzX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLAorCQkgIGJsazY0X3QJKmJsb2NrX25yLAorCQkgIGUyX2Jsa2NudF90IGJsb2NrY250LAorCQkgIGJsazY0X3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCAqcDsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4OworCWJsazY0X3QJYmxrID0gKmJsb2NrX25yOworCWludAlyZXRfY29kZSA9IDA7CisJcHJvYmxlbV90CXByb2JsZW0gPSAwOworCWUyZnNja190CWN0eDsKKworCXAgPSAoc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0ICopIHByaXZfZGF0YTsKKwlwY3R4ID0gcC0+cGN0eDsKKwljdHggPSBwLT5jdHg7CisKKwlpZiAocC0+Y29tcHJlc3NlZCAmJiAoYmxrID09IEVYVDJGU19DT01QUkVTU0VEX0JMS0FERFIpKSB7CisJCS8qIHRvZG86IENoZWNrIHRoYXQgdGhlIGNvbXByYmxrX2ZsIGlzIGhpZ2gsIHRoYXQgdGhlCisJCSAgIGJsa2FkZHIgcGF0dGVybiBsb29rcyByaWdodCAoYWxsIG5vbi1ob2xlcyB1cCB0bworCQkgICBmaXJzdCBFWFQyRlNfQ09NUFJFU1NFRF9CTEtBRERSLCB0aGVuIGFsbAorCQkgICBFWFQyRlNfQ09NUFJFU1NFRF9CTEtBRERSIHVwIHRvIGVuZCBvZiBjbHVzdGVyKSwKKwkJICAgdGhhdCB0aGUgZmVhdHVyZV9pbmNvbXBhdCBiaXQgaXMgaGlnaCwgYW5kIHRoYXQgdGhlCisJCSAgIGlub2RlIGlzIGEgcmVndWxhciBmaWxlLiAgSWYgd2UncmUgZG9pbmcgYSAiZnVsbAorCQkgICBjaGVjayIgKGEgY29uY2VwdCBpbnRyb2R1Y2VkIHRvIGUyZnNjayBieSBlMmNvbXByLAorCQkgICBtZWFuaW5nIHRoYXQgd2UgbG9vayBhdCBkYXRhIGJsb2NrcyBhcyB3ZWxsIGFzCisJCSAgIG1ldGFkYXRhKSB0aGVuIGNhbGwgc29tZSBsaWJyYXJ5IHJvdXRpbmUgdGhhdAorCQkgICBjaGVja3MgdGhlIGNvbXByZXNzZWQgZGF0YS4gIEknbGwgaGF2ZSB0byB0aGluaworCQkgICBhYm91dCB0aGlzLCBiZWNhdXNlIG9uZSBwYXJ0aWN1bGFybHkgaW1wb3J0YW50CisJCSAgIHByb2JsZW0gdG8gYmUgYWJsZSB0byBmaXggaXMgdG8gcmVjYWxjdWxhdGUgdGhlCisJCSAgIGNsdXN0ZXIgc2l6ZSBpZiBuZWNlc3NhcnkuICBJIHRoaW5rIHRoYXQgcGVyaGFwcworCQkgICB3ZSdkIGJldHRlciBkbyBtb3N0L2FsbCBlMmNvbXByLXNwZWNpZmljIGNoZWNrcworCQkgICBzZXBhcmF0ZWx5LCBhZnRlciB0aGUgbm9uLWUyY29tcHIgY2hlY2tzLiAgSWYgbm90CisJCSAgIGRvaW5nIGEgZnVsbCBjaGVjaywgaXQgbWF5IGJlIHVzZWZ1bCB0byB0ZXN0IHRoYXQKKwkJICAgdGhlIHBlcnNvbmFsaXR5IGlzIGxpbnV4OyBlLmcuIGlmIGl0IGlzbid0IHRoZW4KKwkJICAgcGVyaGFwcyB0aGlzIHJlYWxseSBpcyBqdXN0IGFuIGlsbGVnYWwgYmxvY2suICovCisJCXJldHVybiAwOworCX0KKworCS8qCisJICogRm9yIGEgZGlyZWN0b3J5LCBhZGQgbG9naWNhbCBibG9jayB6ZXJvIGZvciBwcm9jZXNzaW5nIGV2ZW4gaWYgaXQncworCSAqIG5vdCBtYXBwZWQgb3Igd2UnbGwgYmUgcGVyZW5uaWFsbHkgc3R1Y2sgd2l0aCBicm9rZW4gIi4iIGFuZCAiLi4iCisJICogZW50cmllcy4KKwkgKi8KKwlpZiAocC0+aXNfZGlyICYmIGJsb2NrY250ID09IDAgJiYgYmxrID09IDApIHsKKwkJcGN0eC0+ZXJyY29kZSA9IGV4dDJmc19hZGRfZGlyX2Jsb2NrMihmcy0+ZGJsaXN0LCBwLT5pbm8sIDAsIDApOworCQlpZiAocGN0eC0+ZXJyY29kZSkgeworCQkJcGN0eC0+YmxrID0gYmxrOworCQkJcGN0eC0+bnVtID0gYmxvY2tjbnQ7CisJCQlnb3RvIGZhaWxlZF9hZGRfZGlyX2Jsb2NrOworCQl9CisJCXAtPmxhc3RfZGJfYmxvY2srKzsKKwl9CisKKwlpZiAoYmxrID09IDApCisJCXJldHVybiAwOworCisjaWYgMAorCXByaW50ZigiUHJvY2Vzc19ibG9jaywgaW5vZGUgJWx1LCBibG9jayAldSwgIyVkXG4iLCBwLT5pbm8sIGJsaywKKwkgICAgICAgYmxvY2tjbnQpOworI2VuZGlmCisKKwkvKgorCSAqIFNpbXBsaXN0aWMgZnJhZ21lbnRhdGlvbiBjaGVjay4gIFdlIG1lcmVseSByZXF1aXJlIHRoYXQgdGhlCisJICogZmlsZSBiZSBjb250aWd1b3VzLiAgKFdoaWNoIGNhbiBuZXZlciBiZSB0cnVlIGZvciByZWFsbHkKKwkgKiBiaWcgZmlsZXMgdGhhdCBhcmUgZ3JlYXRlciB0aGFuIGEgYmxvY2sgZ3JvdXAuKQorCSAqLworCWlmICghSE9MRV9CTEtBRERSKHAtPnByZXZpb3VzX2Jsb2NrKSAmJiBwLT5pbm8gIT0gRVhUMl9SRVNJWkVfSU5PKSB7CisJCWlmIChwLT5wcmV2aW91c19ibG9jaysxICE9IGJsaykgeworCQkJaWYgKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfRlJBR0NIRUNLKSB7CisJCQkJY2hhciB0eXBlID0gJz8nOworCisJCQkJaWYgKHAtPmlzX2RpcikKKwkJCQkJdHlwZSA9ICdkJzsKKwkJCQllbHNlIGlmIChwLT5pc19yZWcpCisJCQkJCXR5cGUgPSAnZic7CisKKwkJCQlwcmludGYoXygiJTZsdSglYyk6IGV4cGVjdGluZyAlNmx1ICIKKwkJCQkJICJnb3QgcGh5cyAlNmx1IChibGtjbnQgJWxsZClcbiIpLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgcGN0eC0+aW5vLCB0eXBlLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgcC0+cHJldmlvdXNfYmxvY2srMSwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIGJsaywKKwkJCQkgICAgICAgYmxvY2tjbnQpOworCQkJfQorCQkJcC0+ZnJhZ21lbnRlZCA9IDE7CisJCX0KKwl9CisKKwlpZiAocC0+aXNfZGlyICYmIGJsb2NrY250ID4gKDEgPDwgKDIxIC0gZnMtPnN1cGVyLT5zX2xvZ19ibG9ja19zaXplKSkpCisJCXByb2JsZW0gPSBQUl8xX1RPT0JJR19ESVI7CisJaWYgKHAtPmlzX3JlZyAmJiBwLT5udW1fYmxvY2tzKzEgPj0gcC0+bWF4X2Jsb2NrcykKKwkJcHJvYmxlbSA9IFBSXzFfVE9PQklHX1JFRzsKKwlpZiAoIXAtPmlzX2RpciAmJiAhcC0+aXNfcmVnICYmIGJsb2NrY250ID4gMCkKKwkJcHJvYmxlbSA9IFBSXzFfVE9PQklHX1NZTUxJTks7CisKKwlpZiAoYmxrIDwgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2sgfHwKKwkgICAgYmxrID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkKKwkJcHJvYmxlbSA9IFBSXzFfSUxMRUdBTF9CTE9DS19OVU07CisKKwlpZiAocHJvYmxlbSkgeworCQlwLT5udW1faWxsZWdhbF9ibG9ja3MrKzsKKwkJaWYgKCFwLT5zdXBwcmVzcyAmJiAocC0+bnVtX2lsbGVnYWxfYmxvY2tzICUgMTIpID09IDApIHsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfVE9PX01BTllfQkFEX0JMT0NLUywgcGN0eCkpIHsKKwkJCQlwLT5jbGVhciA9IDE7CisJCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQkJfQorCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9TVVBQUkVTU19NRVNTQUdFUywgcGN0eCkpIHsKKwkJCQlwLT5zdXBwcmVzcyA9IDE7CisJCQkJc2V0X2xhdGNoX2ZsYWdzKFBSX0xBVENIX0JMT0NLLAorCQkJCQkJUFJMX1NVUFBSRVNTLCAwKTsKKwkJCX0KKwkJfQorCQlwY3R4LT5ibGsgPSBibGs7CisJCXBjdHgtPmJsa2NvdW50ID0gYmxvY2tjbnQ7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIHByb2JsZW0sIHBjdHgpKSB7CisJCQlibGsgPSAqYmxvY2tfbnIgPSAwOworCQkJcmV0X2NvZGUgPSBCTE9DS19DSEFOR0VEOworCQkJcC0+aW5vZGVfbW9kaWZpZWQgPSAxOworCQkJLyoKKwkJCSAqIElmIHRoZSBkaXJlY3RvcnkgYmxvY2sgaXMgdG9vIGJpZyBhbmQgaXMgYmV5b25kIHRoZQorCQkJICogZW5kIG9mIHRoZSBGUywgZG9uJ3QgYm90aGVyIHRyeWluZyB0byBhZGQgaXQgZm9yCisJCQkgKiBwcm9jZXNzaW5nIC0tIHRoZSBrZXJuZWwgd291bGQgbmV2ZXIgaGF2ZSBjcmVhdGVkIGEKKwkJCSAqIGRpcmVjdG9yeSB0aGlzIGxhcmdlLCBhbmQgd2UgcmlzayBhbiBFTk9NRU0gYWJvcnQuCisJCQkgKiBJbiBhbnkgY2FzZSwgdGhlIHRvb2JpZyBoYW5kbGVyIGZvciBleHRlbnQtYmFzZWQKKwkJCSAqIGRpcmVjdG9yaWVzIGFsc28gZG9lc24ndCBmZWVkIHRvb2JpZyBibG9ja3MgdG8KKwkJCSAqIHBhc3MgMi4KKwkJCSAqLworCQkJaWYgKHByb2JsZW0gPT0gUFJfMV9UT09CSUdfRElSKQorCQkJCXJldHVybiByZXRfY29kZTsKKwkJCWdvdG8gbWFya19kaXI7CisJCX0gZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKHAtPmlubyA9PSBFWFQyX1JFU0laRV9JTk8pIHsKKwkJLyoKKwkJICogVGhlIHJlc2l6ZSBpbm9kZSBoYXMgYWxyZWFkeSBiZSBzYW5pdHkgY2hlY2tlZAorCQkgKiBkdXJpbmcgcGFzcyAjMCAodGhlIHN1cGVyYmxvY2sgY2hlY2tzKS4gIEFsbCB3ZQorCQkgKiBoYXZlIHRvIGRvIGlzIG1hcmsgdGhlIGRvdWJsZSBpbmRpcmVjdCBibG9jayBhcworCQkgKiBiZWluZyBpbiB1c2U7IGFsbCBvZiB0aGUgb3RoZXIgYmxvY2tzIGFyZSBoYW5kbGVkCisJCSAqIGJ5IG1hcmtfdGFibGVfYmxvY2tzKCkpLgorCQkgKi8KKwkJaWYgKGJsb2NrY250ID09IEJMT0NLX0NPVU5UX0RJTkQpCisJCQltYXJrX2Jsb2NrX3VzZWQoY3R4LCBibGspOworCQlwLT5udW1fYmxvY2tzKys7CisJfSBlbHNlIGlmICghKGN0eC0+ZnMtPmNsdXN0ZXJfcmF0aW9fYml0cyAmJgorCQkgICAgIHAtPnByZXZpb3VzX2Jsb2NrICYmCisJCSAgICAgKEVYVDJGU19CMkMoY3R4LT5mcywgYmxrKSA9PQorCQkgICAgICBFWFQyRlNfQjJDKGN0eC0+ZnMsIHAtPnByZXZpb3VzX2Jsb2NrKSkgJiYKKwkJICAgICAoYmxrICYgRVhUMkZTX0NMVVNURVJfTUFTSyhjdHgtPmZzKSkgPT0KKwkJICAgICAoKHVuc2lnbmVkKSBibG9ja2NudCAmIEVYVDJGU19DTFVTVEVSX01BU0soY3R4LT5mcykpKSkgeworCQltYXJrX2Jsb2NrX3VzZWQoY3R4LCBibGspOworCQlwLT5udW1fYmxvY2tzKys7CisJfSBlbHNlIGlmIChoYXNfdW5hbGlnbmVkX2NsdXN0ZXJfbWFwKGN0eCwgcC0+cHJldmlvdXNfYmxvY2ssCisJCQkJCSAgICAgcC0+bGFzdF9ibG9jaywgYmxrLCBibG9ja2NudCkpIHsKKwkJcGN0eC0+YmxrID0gYmxvY2tjbnQ7CisJCXBjdHgtPmJsazIgPSBibGs7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9NSVNBTElHTkVEX0NMVVNURVIsIHBjdHgpOworCQltYXJrX2Jsb2NrX3VzZWQoY3R4LCBibGspOworCQltYXJrX2Jsb2NrX3VzZWQoY3R4LCBibGspOworCX0KKwlpZiAoYmxvY2tjbnQgPj0gMCkKKwkJcC0+bGFzdF9ibG9jayA9IGJsb2NrY250OworCXAtPnByZXZpb3VzX2Jsb2NrID0gYmxrOworbWFya19kaXI6CisJaWYgKHAtPmlzX2RpciAmJiAoYmxvY2tjbnQgPj0gMCkpIHsKKwkJd2hpbGUgKCsrcC0+bGFzdF9kYl9ibG9jayA8IGJsb2NrY250KSB7CisJCQlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2FkZF9kaXJfYmxvY2syKGZzLT5kYmxpc3QsCisJCQkJCQkJICAgICAgcC0+aW5vLCAwLAorCQkJCQkJCSAgICAgIHAtPmxhc3RfZGJfYmxvY2spOworCQkJaWYgKHBjdHgtPmVycmNvZGUpIHsKKwkJCQlwY3R4LT5ibGsgPSAwOworCQkJCXBjdHgtPm51bSA9IHAtPmxhc3RfZGJfYmxvY2s7CisJCQkJZ290byBmYWlsZWRfYWRkX2Rpcl9ibG9jazsKKwkJCX0KKwkJfQorCQlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2FkZF9kaXJfYmxvY2syKGZzLT5kYmxpc3QsIHAtPmlubywKKwkJCQkJCSAgICAgIGJsaywgYmxvY2tjbnQpOworCQlpZiAocGN0eC0+ZXJyY29kZSkgeworCQkJcGN0eC0+YmxrID0gYmxrOworCQkJcGN0eC0+bnVtID0gYmxvY2tjbnQ7CisJCWZhaWxlZF9hZGRfZGlyX2Jsb2NrOgorCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0FERF9EQkxPQ0ssIHBjdHgpOworCQkJLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlICovCisJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQl9CisJfQorCXJldHVybiByZXRfY29kZTsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2JhZF9ibG9jayhleHQyX2ZpbHN5cyBmcywKKwkJICAgICAgYmxrNjRfdCAqYmxvY2tfbnIsCisJCSAgICAgIGUyX2Jsa2NudF90IGJsb2NrY250LAorCQkgICAgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCAqcDsKKwlibGs2NF90CQlibGsgPSAqYmxvY2tfbnI7CisJYmxrNjRfdAkJZmlyc3RfYmxvY2s7CisJZGdycF90CQlpOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHg7CisJZTJmc2NrX3QJY3R4OworCisJLyoKKwkgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyBibG9ja3MgZm9yIHRoZSBiYWQgYmxvY2tzCisJICogaW5vZGUsIHdoaWNoIGlzIG5ldmVyIGNvbXByZXNzZWQuICBTbyB3ZSBkb24ndCB1c2UgSE9MRV9CTEtBRERSKCkuCisJICovCisKKwlpZiAoIWJsaykKKwkJcmV0dXJuIDA7CisKKwlwID0gKHN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCAqKSBwcml2X2RhdGE7CisJY3R4ID0gcC0+Y3R4OworCXBjdHggPSBwLT5wY3R4OworCisJcGN0eC0+aW5vID0gRVhUMl9CQURfSU5POworCXBjdHgtPmJsayA9IGJsazsKKwlwY3R4LT5ibGtjb3VudCA9IGJsb2NrY250OworCisJaWYgKChibGsgPCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgfHwKKwkgICAgKGJsayA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfQkJfSUxMRUdBTF9CTE9DS19OVU0sIHBjdHgpKSB7CisJCQkqYmxvY2tfbnIgPSAwOworCQkJcmV0dXJuIEJMT0NLX0NIQU5HRUQ7CisJCX0gZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKGJsb2NrY250IDwgMCkgeworCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihwLT5mc19tZXRhX2Jsb2NrcywgYmxrKSkgeworCQkJcC0+YmJjaGVjayA9IDE7CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX0JCX0ZTX0JMT0NLLCBwY3R4KSkgeworCQkJCSpibG9ja19uciA9IDA7CisJCQkJcmV0dXJuIEJMT0NLX0NIQU5HRUQ7CisJCQl9CisJCX0gZWxzZSBpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwKKwkJCQkJCSAgICBibGspKSB7CisJCQlwLT5iYmNoZWNrID0gMTsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfQkJJTk9ERV9CQURfTUVUQUJMT0NLLAorCQkJCQlwY3R4KSkgeworCQkJCSpibG9ja19uciA9IDA7CisJCQkJcmV0dXJuIEJMT0NLX0NIQU5HRUQ7CisJCQl9CisJCQlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1NJR05BTF9NQVNLKQorCQkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJfSBlbHNlCisJCQltYXJrX2Jsb2NrX3VzZWQoY3R4LCBibGspOworCQlyZXR1cm4gMDsKKwl9CisjaWYgMAorCXByaW50ZiAoIkRFQlVHOiBNYXJraW5nICV1IGFzIGJhZC5cbiIsIGJsayk7CisjZW5kaWYKKwljdHgtPmZzX2JhZGJsb2Nrc19jb3VudCsrOworCS8qCisJICogSWYgdGhlIGJsb2NrIGlzIG5vdCB1c2VkLCB0aGVuIG1hcmsgaXQgYXMgdXNlZCBhbmQgcmV0dXJuLgorCSAqIElmIGl0IGlzIGFscmVhZHkgbWFya2VkIGFzIGZvdW5kLCB0aGlzIG11c3QgbWVhbiB0aGF0CisJICogdGhlcmUncyBhbiBvdmVybGFwIGJldHdlZW4gdGhlIGZpbGVzeXN0ZW0gdGFibGUgYmxvY2tzCisJICogKGJpdG1hcHMgYW5kIGlub2RlIHRhYmxlKSBhbmQgdGhlIGJhZCBibG9jayBsaXN0LgorCSAqLworCWlmICghZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwgYmxrKSkgeworCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLCBibGspOworCQlyZXR1cm4gMDsKKwl9CisJLyoKKwkgKiBUcnkgdG8gZmluZCB0aGUgd2hlcmUgdGhlIGZpbGVzeXN0ZW0gYmxvY2sgd2FzIHVzZWQuLi4KKwkgKi8KKwlmaXJzdF9ibG9jayA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKysgKSB7CisJCXBjdHgtPmdyb3VwID0gaTsKKwkJcGN0eC0+YmxrID0gYmxrOworCQlpZiAoIWV4dDJmc19iZ19oYXNfc3VwZXIoZnMsIGkpKQorCQkJZ290byBza2lwX3N1cGVyOworCQlpZiAoYmxrID09IGZpcnN0X2Jsb2NrKSB7CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwKKwkJCQkJCVBSXzFfQkFEX1BSSU1BUllfU1VQRVJCTE9DSywKKwkJCQkJCXBjdHgpKSB7CisJCQkJCSpibG9ja19uciA9IDA7CisJCQkJCXJldHVybiBCTE9DS19DSEFOR0VEOworCQkJCX0KKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9CQURfU1VQRVJCTE9DSywgcGN0eCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoKGJsayA+IGZpcnN0X2Jsb2NrKSAmJgorCQkgICAgKGJsayA8PSBmaXJzdF9ibG9jayArIGZzLT5kZXNjX2Jsb2NrcykpIHsKKwkJCWlmIChpID09IDApIHsKKwkJCQlwY3R4LT5ibGsgPSAqYmxvY2tfbnI7CisJCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwKKwkJCVBSXzFfQkFEX1BSSU1BUllfR1JPVVBfREVTQ1JJUFRPUiwgcGN0eCkpIHsKKwkJCQkJKmJsb2NrX25yID0gMDsKKwkJCQkJcmV0dXJuIEJMT0NLX0NIQU5HRUQ7CisJCQkJfQorCQkJCXJldHVybiAwOworCQkJfQorCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0JBRF9HUk9VUF9ERVNDUklQVE9SUywgcGN0eCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCXNraXBfc3VwZXI6CisJCWlmIChibGsgPT0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKSB7CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX0JCX0JBRF9CTE9DSywgcGN0eCkpIHsKKwkJCQljdHgtPmludmFsaWRfYmxvY2tfYml0bWFwX2ZsYWdbaV0rKzsKKwkJCQljdHgtPmludmFsaWRfYml0bWFwcysrOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGJsayA9PSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSkpIHsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfSUJfQkFEX0JMT0NLLCBwY3R4KSkgeworCQkJCWN0eC0+aW52YWxpZF9pbm9kZV9iaXRtYXBfZmxhZ1tpXSsrOworCQkJCWN0eC0+aW52YWxpZF9iaXRtYXBzKys7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoKGJsayA+PSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSkgJiYKKwkJICAgIChibGsgPCAoZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkgKworCQkJICAgIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKSkpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBhcmUgYmFkIGJsb2NrcyBpbiB0aGUgaW5vZGUgdGFibGUsCisJCQkgKiB0aGUgaW5vZGUgc2NhbiBjb2RlIHdpbGwgdHJ5IHRvIGRvCisJCQkgKiBzb21ldGhpbmcgcmVhc29uYWJsZSBhdXRvbWF0aWNhbGx5LgorCQkJICovCisJCQlyZXR1cm4gMDsKKwkJfQorCQlmaXJzdF9ibG9jayArPSBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwl9CisJLyoKKwkgKiBJZiB3ZSd2ZSBnb3R0ZW4gdG8gdGhpcyBwb2ludCwgdGhlbiB0aGUgb25seQorCSAqIHBvc3NpYmlsaXR5IGlzIHRoYXQgdGhlIGJhZCBibG9jayBpbm9kZSBtZXRhIGRhdGEKKwkgKiBpcyB1c2luZyBhIGJhZCBibG9jay4KKwkgKi8KKwlpZiAoKGJsayA9PSBwLT5pbm9kZS0+aV9ibG9ja1tFWFQyX0lORF9CTE9DS10pIHx8CisJICAgIChibGsgPT0gcC0+aW5vZGUtPmlfYmxvY2tbRVhUMl9ESU5EX0JMT0NLXSkgfHwKKwkgICAgKGJsayA9PSBwLT5pbm9kZS0+aV9ibG9ja1tFWFQyX1RJTkRfQkxPQ0tdKSkgeworCQlwLT5iYmNoZWNrID0gMTsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9CQklOT0RFX0JBRF9NRVRBQkxPQ0ssIHBjdHgpKSB7CisJCQkqYmxvY2tfbnIgPSAwOworCQkJcmV0dXJuIEJMT0NLX0NIQU5HRUQ7CisJCX0KKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19TSUdOQUxfTUFTSykKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJcmV0dXJuIDA7CisJfQorCisJcGN0eC0+Z3JvdXAgPSAtMTsKKworCS8qIFdhcm4gdXNlciB0aGF0IHRoZSBibG9jayB3YXNuJ3QgY2xhaW1lZCAqLworCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9QUk9HRVJSX0NMQUlNRURfQkxPQ0ssIHBjdHgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5ld190YWJsZV9ibG9jayhlMmZzY2tfdCBjdHgsIGJsazY0X3QgZmlyc3RfYmxvY2ssIGRncnBfdCBncm91cCwKKwkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbnVtLCBibGs2NF90ICpuZXdfYmxvY2spCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWRncnBfdAkJbGFzdF9ncnA7CisJYmxrNjRfdAkJb2xkX2Jsb2NrID0gKm5ld19ibG9jazsKKwlibGs2NF90CQlsYXN0X2Jsb2NrOworCWRncnBfdAkJZmxleGJnOworCXVuc2lnbmVkCWZsZXhiZ19zaXplOworCWludAkJaSwgaXNfZmxleGJnOworCWNoYXIJCSpidWY7CisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCXBjdHguZ3JvdXAgPSBncm91cDsKKwlwY3R4LmJsayA9IG9sZF9ibG9jazsKKwlwY3R4LnN0ciA9IG5hbWU7CisKKwkvKgorCSAqIEZvciBmbGV4X2JnIGZpbGVzeXN0ZW1zLCBmaXJzdCB0cnkgdG8gYWxsb2NhdGUgdGhlIG1ldGFkYXRhCisJICogd2l0aGluIHRoZSBmbGV4X2JnLCBhbmQgaWYgdGhhdCBmYWlscyB0aGVuIHRyeSBmaW5kaW5nIHRoZQorCSAqIHNwYWNlIGFueXdoZXJlIGluIHRoZSBmaWxlc3lzdGVtLgorCSAqLworCWlzX2ZsZXhiZyA9IEVYVDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQkgICAgICBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRyk7CisJaWYgKGlzX2ZsZXhiZykgeworCQlmbGV4Ymdfc2l6ZSA9IDEgPDwgZnMtPnN1cGVyLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXg7CisJCWZsZXhiZyA9IGdyb3VwIC8gZmxleGJnX3NpemU7CisJCWZpcnN0X2Jsb2NrID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywKKwkJCQkJCQlmbGV4Ymdfc2l6ZSAqIGZsZXhiZyk7CisJCWxhc3RfZ3JwID0gZ3JvdXAgfCAoZmxleGJnX3NpemUgLSAxKTsKKwkJaWYgKGxhc3RfZ3JwID49IGZzLT5ncm91cF9kZXNjX2NvdW50KQorCQkJbGFzdF9ncnAgPSBmcy0+Z3JvdXBfZGVzY19jb3VudCAtIDE7CisJCWxhc3RfYmxvY2sgPSBleHQyZnNfZ3JvdXBfbGFzdF9ibG9jazIoZnMsIGxhc3RfZ3JwKTsKKwl9IGVsc2UKKwkJbGFzdF9ibG9jayA9IGV4dDJmc19ncm91cF9sYXN0X2Jsb2NrMihmcywgZ3JvdXApOworCXBjdHguZXJyY29kZSA9IGV4dDJmc19nZXRfZnJlZV9ibG9ja3MyKGZzLCBmaXJzdF9ibG9jaywgbGFzdF9ibG9jaywKKwkJCQkJICAgICAgIG51bSwgY3R4LT5ibG9ja19mb3VuZF9tYXAsCisJCQkJCSAgICAgICBuZXdfYmxvY2spOworCWlmIChpc19mbGV4YmcgJiYgKHBjdHguZXJyY29kZSA9PSBFWFQyX0VUX0JMT0NLX0FMTE9DX0ZBSUwpKQorCQlwY3R4LmVycmNvZGUgPSBleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzMihmcywKKwkJCQlmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaywKKwkJCQlleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlciksCisJCQkJbnVtLCBjdHgtPmJsb2NrX2ZvdW5kX21hcCwgbmV3X2Jsb2NrKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCXBjdHgubnVtID0gbnVtOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfUkVMT0NfQkxPQ0tfQUxMT0NBVEUsICZwY3R4KTsKKwkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCXJldHVybjsKKwl9CisJcGN0eC5lcnJjb2RlID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSwgJmJ1Zik7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfUkVMT0NfTUVNT1JZX0FMTE9DQVRFLCAmcGN0eCk7CisJCWV4dDJmc191bm1hcmtfdmFsaWQoZnMpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwlmcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19NQVNURVJfU0JfT05MWTsKKwlwY3R4LmJsazIgPSAqbmV3X2Jsb2NrOworCWZpeF9wcm9ibGVtKGN0eCwgKG9sZF9ibG9jayA/IFBSXzFfUkVMT0NfRlJPTV9UTyA6CisJCQkgIFBSXzFfUkVMT0NfVE8pLCAmcGN0eCk7CisJcGN0eC5ibGsyID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJcGN0eC5ibGsgPSBpOworCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLCAoKm5ld19ibG9jaykraSk7CisJCWlmIChvbGRfYmxvY2spIHsKKwkJCXBjdHguZXJyY29kZSA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW8sCisJCQkJICAgb2xkX2Jsb2NrICsgaSwgMSwgYnVmKTsKKwkJCWlmIChwY3R4LmVycmNvZGUpCisJCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX1JFTE9DX1JFQURfRVJSLCAmcGN0eCk7CisJCX0gZWxzZQorCQkJbWVtc2V0KGJ1ZiwgMCwgZnMtPmJsb2Nrc2l6ZSk7CisKKwkJcGN0eC5ibGsgPSAoKm5ld19ibG9jaykgKyBpOworCQlwY3R4LmVycmNvZGUgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgcGN0eC5ibGssCisJCQkJCSAgICAgIDEsIGJ1Zik7CisJCWlmIChwY3R4LmVycmNvZGUpCisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfUkVMT0NfV1JJVEVfRVJSLCAmcGN0eCk7CisJfQorCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBnZXRzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIHBhc3MgMSBpZiBiYWQgYmxvY2tzIGFyZQorICogZGV0ZWN0ZWQgaW4gdGhlIHN1cGVyYmxvY2ssIGdyb3VwIGRlc2NyaXB0b3JzLCBpbm9kZV9iaXRtYXBzLCBvcgorICogYmxvY2sgYml0bWFwcy4gIEF0IHRoaXMgcG9pbnQsIGFsbCBvZiB0aGUgYmxvY2tzIGhhdmUgYmVlbiBtYXBwZWQKKyAqIG91dCwgc28gd2UgY2FuIHRyeSB0byBhbGxvY2F0ZSBuZXcgYmxvY2socykgdG8gcmVwbGFjZSB0aGUgYmFkCisgKiBibG9ja3MuCisgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9mc19iYWRfYmxvY2tzKGUyZnNja190IGN0eCkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJZGdycF90CQlpOworCWJsazY0X3QJCWZpcnN0X2Jsb2NrOworCWJsazY0X3QJCW5ld19ibGs7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlmaXJzdF9ibG9jayA9IGV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZnMsIGkpOworCisJCWlmIChjdHgtPmludmFsaWRfYmxvY2tfYml0bWFwX2ZsYWdbaV0pIHsKKwkJCW5ld19ibGsgPSBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgaSk7CisJCQluZXdfdGFibGVfYmxvY2soY3R4LCBmaXJzdF9ibG9jaywgaSwgXygiYmxvY2sgYml0bWFwIiksCisJCQkJCTEsICZuZXdfYmxrKTsKKwkJCWV4dDJmc19ibG9ja19iaXRtYXBfbG9jX3NldChmcywgaSwgbmV3X2Jsayk7CisJCX0KKwkJaWYgKGN0eC0+aW52YWxpZF9pbm9kZV9iaXRtYXBfZmxhZ1tpXSkgeworCQkJbmV3X2JsayA9IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKTsKKwkJCW5ld190YWJsZV9ibG9jayhjdHgsIGZpcnN0X2Jsb2NrLCBpLCBfKCJpbm9kZSBiaXRtYXAiKSwKKwkJCQkJMSwgJm5ld19ibGspOworCQkJZXh0MmZzX2lub2RlX2JpdG1hcF9sb2Nfc2V0KGZzLCBpLCBuZXdfYmxrKTsKKwkJfQorCQlpZiAoY3R4LT5pbnZhbGlkX2lub2RlX3RhYmxlX2ZsYWdbaV0pIHsKKwkJCW5ld19ibGsgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKTsKKwkJCW5ld190YWJsZV9ibG9jayhjdHgsIGZpcnN0X2Jsb2NrLCBpLCBfKCJpbm9kZSB0YWJsZSIpLAorCQkJCQlmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCwKKwkJCQkJJm5ld19ibGspOworCQkJZXh0MmZzX2lub2RlX3RhYmxlX2xvY19zZXQoZnMsIGksIG5ld19ibGspOworCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19SRVNUQVJUOworCQl9CisJfQorCWN0eC0+aW52YWxpZF9iaXRtYXBzID0gMDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBtYXJrcyBhbGwgYmxvY2tzIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBzdXBlcmJsb2NrLAorICogZ3JvdXAgZGVzY3JpcHRvcnMsIGlub2RlIGJpdG1hcHMsIGFuZCBibG9jayBiaXRtYXBzLgorICovCitzdGF0aWMgdm9pZCBtYXJrX3RhYmxlX2Jsb2NrcyhlMmZzY2tfdCBjdHgpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWJsazY0X3QJYjsKKwlkZ3JwX3QJaTsKKwl1bnNpZ25lZCBpbnQJajsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0IHBjdHg7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJcGN0eC5ncm91cCA9IGk7CisKKwkJZXh0MmZzX3Jlc2VydmVfc3VwZXJfYW5kX2JnZChmcywgaSwgY3R4LT5ibG9ja19mb3VuZF9tYXApOworCisJCS8qCisJCSAqIE1hcmsgdGhlIGJsb2NrcyB1c2VkIGZvciB0aGUgaW5vZGUgdGFibGUKKwkJICovCisJCWlmIChleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSkgeworCQkJZm9yIChqID0gMCwgYiA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpOworCQkJICAgICBqIDwgZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCQkgICAgIGorKywgYisrKSB7CisJCQkJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19mb3VuZF9tYXAsCisJCQkJCQkJICAgICBiKSkgeworCQkJCQlwY3R4LmJsayA9IGI7CisJCQkJCWlmICghY3R4LT5pbnZhbGlkX2lub2RlX3RhYmxlX2ZsYWdbaV0gJiYKKwkJCQkJICAgIGZpeF9wcm9ibGVtKGN0eCwKKwkJCQkJCVBSXzFfSVRBQkxFX0NPTkZMSUNULCAmcGN0eCkpIHsKKwkJCQkJCWN0eC0+aW52YWxpZF9pbm9kZV90YWJsZV9mbGFnW2ldKys7CisJCQkJCQljdHgtPmludmFsaWRfYml0bWFwcysrOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkgICAgZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwKKwkJCQkJCQkgICAgIGIpOworCQkJICAgIAl9CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBNYXJrIGJsb2NrIHVzZWQgZm9yIHRoZSBibG9jayBiaXRtYXAKKwkJICovCisJCWlmIChleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgaSkpIHsKKwkJCWlmIChleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLAorCQkJCSAgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKSkgeworCQkJCXBjdHguYmxrID0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpOworCQkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfQkJfQ09ORkxJQ1QsICZwY3R4KSkgeworCQkJCQljdHgtPmludmFsaWRfYmxvY2tfYml0bWFwX2ZsYWdbaV0rKzsKKwkJCQkJY3R4LT5pbnZhbGlkX2JpdG1hcHMrKzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJICAgIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19mb3VuZF9tYXAsCisJCQkJICAgICBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgaSkpOworCQkgICAgfQorCisJCX0KKwkJLyoKKwkJICogTWFyayBibG9jayB1c2VkIGZvciB0aGUgaW5vZGUgYml0bWFwCisJCSAqLworCQlpZiAoZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpKSB7CisJCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwKKwkJCQkgICAgIGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKSkpIHsKKwkJCQlwY3R4LmJsayA9IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKTsKKwkJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX0lCX0NPTkZMSUNULCAmcGN0eCkpIHsKKwkJCQkJY3R4LT5pbnZhbGlkX2lub2RlX2JpdG1hcF9mbGFnW2ldKys7CisJCQkJCWN0eC0+aW52YWxpZF9iaXRtYXBzKys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCSAgICBleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLAorCQkJCSAgICAgZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpKTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAqIFRoZXMgc3Vicm91dGluZXMgc2hvcnQgY2lyY3VpdHMgZXh0MmZzX2dldF9ibG9ja3MgYW5kCisgKiBleHQyZnNfY2hlY2tfZGlyZWN0b3J5OyB3ZSB1c2UgdGhlbSBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIGlub2RlCisgKiBzdHJ1Y3R1cmUsIHNvIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gbGV0dGluZyB0aGUgZXh0MmZzIGxpYnJhcnkgcmVhZAorICogdGhlIGlub2RlIGFnYWluLgorICovCitzdGF0aWMgZXJyY29kZV90IHBhc3MxX2dldF9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgYmxrX3QgKmJsb2NrcykKK3sKKwllMmZzY2tfdCBjdHggPSAoZTJmc2NrX3QpIGZzLT5wcml2X2RhdGE7CisJaW50CWk7CisKKwlpZiAoKGlubyAhPSBjdHgtPnN0YXNoZWRfaW5vKSB8fCAhY3R4LT5zdGFzaGVkX2lub2RlKQorCQlyZXR1cm4gRVhUMl9FVF9DQUxMQkFDS19OT1RIQU5ETEVEOworCisJZm9yIChpPTA7IGkgPCBFWFQyX05fQkxPQ0tTOyBpKyspCisJCWJsb2Nrc1tpXSA9IGN0eC0+c3Rhc2hlZF9pbm9kZS0+aV9ibG9ja1tpXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBwYXNzMV9yZWFkX2lub2RlKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSkKK3sKKwllMmZzY2tfdCBjdHggPSAoZTJmc2NrX3QpIGZzLT5wcml2X2RhdGE7CisKKwlpZiAoKGlubyAhPSBjdHgtPnN0YXNoZWRfaW5vKSB8fCAhY3R4LT5zdGFzaGVkX2lub2RlKQorCQlyZXR1cm4gRVhUMl9FVF9DQUxMQkFDS19OT1RIQU5ETEVEOworCSppbm9kZSA9ICpjdHgtPnN0YXNoZWRfaW5vZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgcGFzczFfd3JpdGVfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSkKK3sKKwllMmZzY2tfdCBjdHggPSAoZTJmc2NrX3QpIGZzLT5wcml2X2RhdGE7CisKKwlpZiAoKGlubyA9PSBjdHgtPnN0YXNoZWRfaW5vKSAmJiBjdHgtPnN0YXNoZWRfaW5vZGUgJiYKKwkJKGlub2RlICE9IGN0eC0+c3Rhc2hlZF9pbm9kZSkpCisJCSpjdHgtPnN0YXNoZWRfaW5vZGUgPSAqaW5vZGU7CisJcmV0dXJuIEVYVDJfRVRfQ0FMTEJBQ0tfTk9USEFORExFRDsKK30KKworc3RhdGljIGVycmNvZGVfdCBwYXNzMV9jaGVja19kaXJlY3RvcnkoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vKQoreworCWUyZnNja190IGN0eCA9IChlMmZzY2tfdCkgZnMtPnByaXZfZGF0YTsKKworCWlmICgoaW5vICE9IGN0eC0+c3Rhc2hlZF9pbm8pIHx8ICFjdHgtPnN0YXNoZWRfaW5vZGUpCisJCXJldHVybiBFWFQyX0VUX0NBTExCQUNLX05PVEhBTkRMRUQ7CisKKwlpZiAoIUxJTlVYX1NfSVNESVIoY3R4LT5zdGFzaGVkX2lub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gRVhUMl9FVF9OT19ESVJFQ1RPUlk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgZTJmc2NrX2dldF9hbGxvY19ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBnb2FsLAorCQkJCQlibGs2NF90ICpyZXQpCit7CisJZTJmc2NrX3QgY3R4ID0gKGUyZnNja190KSBmcy0+cHJpdl9kYXRhOworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrNjRfdAkJbmV3X2Jsb2NrOworCisJaWYgKGN0eC0+YmxvY2tfZm91bmRfbWFwKSB7CisJCXJldHZhbCA9IGV4dDJmc19uZXdfYmxvY2syKGZzLCBnb2FsLCBjdHgtPmJsb2NrX2ZvdW5kX21hcCwKKwkJCQkJICAgJm5ld19ibG9jayk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlpZiAoZnMtPmJsb2NrX21hcCkgeworCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLCBuZXdfYmxvY2spOworCQkJZXh0MmZzX21hcmtfYmJfZGlydHkoZnMpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCFmcy0+YmxvY2tfbWFwKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfcmVhZF9ibG9ja19iaXRtYXAoZnMpOworCQkJaWYgKHJldHZhbCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQl9CisKKwkJcmV0dmFsID0gZXh0MmZzX25ld19ibG9jazIoZnMsIGdvYWwsIDAsICZuZXdfYmxvY2spOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkqcmV0ID0gbmV3X2Jsb2NrOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkIGUyZnNja19ibG9ja19hbGxvY19zdGF0cyhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibGssIGludCBpbnVzZSkKK3sKKwllMmZzY2tfdCBjdHggPSAoZTJmc2NrX3QpIGZzLT5wcml2X2RhdGE7CisKKwlpZiAoY3R4LT5ibG9ja19mb3VuZF9tYXApIHsKKwkJaWYgKGludXNlID4gMCkKKwkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19mb3VuZF9tYXAsIGJsayk7CisJCWVsc2UKKwkJCWV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwgYmxrKTsKKwl9Cit9CisKK3ZvaWQgZTJmc2NrX3VzZV9pbm9kZV9zaG9ydGN1dHMoZTJmc2NrX3QgY3R4LCBpbnQgdXNlX3Nob3J0Y3V0cykKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisKKwlpZiAodXNlX3Nob3J0Y3V0cykgeworCQlmcy0+Z2V0X2Jsb2NrcyA9IHBhc3MxX2dldF9ibG9ja3M7CisJCWZzLT5jaGVja19kaXJlY3RvcnkgPSBwYXNzMV9jaGVja19kaXJlY3Rvcnk7CisJCWZzLT5yZWFkX2lub2RlID0gcGFzczFfcmVhZF9pbm9kZTsKKwkJZnMtPndyaXRlX2lub2RlID0gcGFzczFfd3JpdGVfaW5vZGU7CisJCWN0eC0+c3Rhc2hlZF9pbm8gPSAwOworCX0gZWxzZSB7CisJCWZzLT5nZXRfYmxvY2tzID0gMDsKKwkJZnMtPmNoZWNrX2RpcmVjdG9yeSA9IDA7CisJCWZzLT5yZWFkX2lub2RlID0gMDsKKwkJZnMtPndyaXRlX2lub2RlID0gMDsKKwl9Cit9CisKK3ZvaWQgZTJmc2NrX2ludGVyY2VwdF9ibG9ja19hbGxvY2F0aW9ucyhlMmZzY2tfdCBjdHgpCit7CisJZXh0MmZzX3NldF9hbGxvY19ibG9ja19jYWxsYmFjayhjdHgtPmZzLCBlMmZzY2tfZ2V0X2FsbG9jX2Jsb2NrLCAwKTsKKwlleHQyZnNfc2V0X2Jsb2NrX2FsbG9jX3N0YXRzX2NhbGxiYWNrKGN0eC0+ZnMsCisJCQkJCQllMmZzY2tfYmxvY2tfYWxsb2Nfc3RhdHMsIDApOworfQpkaWZmIC0tZ2l0IGEvZTJmc2NrL3Bhc3MxYi5jIGIvZTJmc2NrL3Bhc3MxYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiODFkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svcGFzczFiLmMKQEAgLTAsMCArMSw5ODUgQEAKKy8qCisgKiBwYXNzMWIuYyAtLS0gUGFzcyAjMWIgb2YgZTJmc2NrCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHBhc3MxQiwgcGFzczFDLCBhbmQgcGFzczFEIG9mIGUyZnNjay4gIFRoZXkgYXJlCisgKiBvbmx5IGludm9rZWQgaWYgcGFzcyAxIGRpc2NvdmVyZWQgYmxvY2tzIHdoaWNoIGFyZSBpbiB1c2UgYnkgbW9yZQorICogdGhhbiBvbmUgaW5vZGUuCisgKgorICogUGFzczFCIHNjYW5zIHRoZSBkYXRhIGJsb2NrcyBvZiBhbGwgdGhlIGlub2RlcyBhZ2FpbiwgZ2VuZXJhdGluZyBhCisgKiBjb21wbGV0ZSBsaXN0IG9mIGR1cGxpY2F0ZSBibG9ja3MgYW5kIHdoaWNoIGlub2RlcyBoYXZlIGNsYWltZWQKKyAqIHRoZW0uCisgKgorICogUGFzczFDIGRvZXMgYSB0cmVlLXRyYXZlcnNhbCBvZiB0aGUgZmlsZXN5c3RlbSwgdG8gZGV0ZXJtaW5lIHRoZQorICogcGFyZW50IGRpcmVjdG9yaWVzIG9mIHRoZXNlIGlub2Rlcy4gIFRoaXMgc3RlcCBpcyBuZWNlc3Nhcnkgc28gdGhhdAorICogZTJmc2NrIGNhbiBwcmludCBvdXQgdGhlIHBhdGhuYW1lcyBvZiBhZmZlY3RlZCBpbm9kZXMuCisgKgorICogUGFzczFEIGlzIGEgcmVjb25jaWxpYXRpb24gcGFzcy4gIEZvciBlYWNoIGlub2RlIHdpdGggZHVwbGljYXRlCisgKiBibG9ja3MsIHRoZSB1c2VyIGlzIHByb21wdGVkIGlmIHMvaGUgd291bGQgbGlrZSB0byBjbG9uZSB0aGUgZmlsZQorICogKHNvIHRoYXQgdGhlIGZpbGUgZ2V0cyBhIGZyZXNoIGNvcHkgb2YgdGhlIGR1cGxpY2F0ZWQgYmxvY2tzKSBvcgorICogc2ltcGx5IHRvIGRlbGV0ZSB0aGUgZmlsZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0lOVFBUUl9UCit0eXBlZGVmIGxvbmcgaW50cHRyX3Q7CisjZW5kaWYKKworLyogTmVlZGVkIGZvciBhcmNoaXRlY3R1cmVzIHdoZXJlIHNpemVvZihpbnQpICE9IHNpemVvZih2b2lkICopICovCisjZGVmaW5lIElOVF9UT19WT0lEUFRSKHZhbCkgICgodm9pZCAqKShpbnRwdHJfdCkodmFsKSkKKyNkZWZpbmUgVk9JRFBUUl9UT19JTlQocHRyKSAgKChpbnQpKGludHB0cl90KShwdHIpKQorCisjaW5jbHVkZSA8ZXQvY29tX2Vyci5oPgorI2luY2x1ZGUgImUyZnNjay5oIgorCisjaW5jbHVkZSAicHJvYmxlbS5oIgorI2luY2x1ZGUgImRpY3QuaCIKKworLyogRGVmaW5lIGFuIGV4dGVuc2lvbiB0byB0aGUgZXh0MiBsaWJyYXJ5J3MgYmxvY2sgY291bnQgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgQkxPQ0tfQ09VTlRfRVhUQVRUUgkoLTUpCisKK3N0cnVjdCBjbHVzdGVyX2VsIHsKKwlibGs2NF90CWNsdXN0ZXI7CisJc3RydWN0IGNsdXN0ZXJfZWwgKm5leHQ7Cit9OworCitzdHJ1Y3QgaW5vZGVfZWwgeworCWV4dDJfaW5vX3QJaW5vZGU7CisJc3RydWN0IGlub2RlX2VsICpuZXh0OworfTsKKworc3RydWN0IGR1cF9jbHVzdGVyIHsKKwlpbnQJCW51bV9iYWQ7CisJc3RydWN0IGlub2RlX2VsICppbm9kZV9saXN0OworfTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgaW5vZGUgd2hpY2gKKyAqIGlzIHNoYXJpbmcgYmxvY2tzIHdpdGggb3RoZXIgaW5vZGVzLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBjb2xsZWN0ZWQKKyAqIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIsIHNvIHRoYXQgdGhlIHVzZXIga25vd3Mgd2hhdCBmaWxlcyBoZSBvciBzaGUKKyAqIGlzIGRlYWxpbmcgd2l0aCwgd2hlbiB0cnlpbmcgdG8gZGVjaWRlIGhvdyB0byByZXNvbHZlIHRoZSBjb25mbGljdAorICogb2YgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuCisgKi8KK3N0cnVjdCBkdXBfaW5vZGUgeworCWV4dDJfaW5vX3QJCWRpcjsKKwlpbnQJCQludW1fZHVwYmxvY2tzOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCXN0cnVjdCBjbHVzdGVyX2VsCSpjbHVzdGVyX2xpc3Q7Cit9OworCitzdGF0aWMgaW50IHByb2Nlc3NfcGFzczFiX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90CSpibG9ja25yLAorCQkJCWUyX2Jsa2NudF90IGJsb2NrY250LCBibGs2NF90IHJlZl9ibGssCisJCQkJaW50IHJlZl9vZmZzZXQsIHZvaWQgKnByaXZfZGF0YSk7CitzdGF0aWMgdm9pZCBkZWxldGVfZmlsZShlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLAorCQkJc3RydWN0IGR1cF9pbm9kZSAqZHAsIGNoYXIgKmJsb2NrX2J1Zik7CitzdGF0aWMgZXJyY29kZV90IGNsb25lX2ZpbGUoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubywKKwkJCSAgICBzdHJ1Y3QgZHVwX2lub2RlICpkcCwgY2hhciogYmxvY2tfYnVmKTsKK3N0YXRpYyBpbnQgY2hlY2tfaWZfZnNfYmxvY2soZTJmc2NrX3QgY3R4LCBibGs2NF90IHRlc3RfYmxvY2spOworc3RhdGljIGludCBjaGVja19pZl9mc19jbHVzdGVyKGUyZnNja190IGN0eCwgYmxrNjRfdCBjbHVzdGVyKTsKKworc3RhdGljIHZvaWQgcGFzczFiKGUyZnNja190IGN0eCwgY2hhciAqYmxvY2tfYnVmKTsKK3N0YXRpYyB2b2lkIHBhc3MxYyhlMmZzY2tfdCBjdHgsIGNoYXIgKmJsb2NrX2J1Zik7CitzdGF0aWMgdm9pZCBwYXNzMWQoZTJmc2NrX3QgY3R4LCBjaGFyICpibG9ja19idWYpOworCitzdGF0aWMgaW50IGR1cF9pbm9kZV9jb3VudCA9IDA7CitzdGF0aWMgaW50IGR1cF9pbm9kZV9mb3VuZGRpciA9IDA7CisKK3N0YXRpYyBkaWN0X3QgY2xzdHJfZGljdCwgaW5vX2RpY3Q7CisKK3N0YXRpYyBleHQyZnNfaW5vZGVfYml0bWFwIGlub2RlX2R1cF9tYXA7CisKK3N0YXRpYyBpbnQgZGljdF9pbnRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJaW50cHRyX3QJaWEsIGliOworCisJaWEgPSAoaW50cHRyX3QpYTsKKwlpYiA9IChpbnRwdHJfdCliOworCisJcmV0dXJuIChpYS1pYik7Cit9CisKKy8qCisgKiBBZGQgYSBkdXBsaWNhdGUgYmxvY2sgcmVjb3JkCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9kdXBlKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sIGJsazY0X3QgY2x1c3RlciwKKwkJICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpCit7CisJZG5vZGVfdAkqbjsKKwlzdHJ1Y3QgZHVwX2NsdXN0ZXIJKmRiOworCXN0cnVjdCBkdXBfaW5vZGUJKmRpOworCXN0cnVjdCBjbHVzdGVyX2VsCSpjbHVzdGVyX2VsOworCXN0cnVjdCBpbm9kZV9lbCAJKmlub19lbDsKKworCW4gPSBkaWN0X2xvb2t1cCgmY2xzdHJfZGljdCwgSU5UX1RPX1ZPSURQVFIoY2x1c3RlcikpOworCWlmIChuKQorCQlkYiA9IChzdHJ1Y3QgZHVwX2NsdXN0ZXIgKikgZG5vZGVfZ2V0KG4pOworCWVsc2UgeworCQlkYiA9IChzdHJ1Y3QgZHVwX2NsdXN0ZXIgKikgZTJmc2NrX2FsbG9jYXRlX21lbW9yeShjdHgsCisJCQlzaXplb2Yoc3RydWN0IGR1cF9jbHVzdGVyKSwgImR1cGxpY2F0ZSBjbHVzdGVyIGhlYWRlciIpOworCQlkYi0+bnVtX2JhZCA9IDA7CisJCWRiLT5pbm9kZV9saXN0ID0gMDsKKwkJZGljdF9hbGxvY19pbnNlcnQoJmNsc3RyX2RpY3QsIElOVF9UT19WT0lEUFRSKGNsdXN0ZXIpLCBkYik7CisJfQorCWlub19lbCA9IChzdHJ1Y3QgaW5vZGVfZWwgKikgZTJmc2NrX2FsbG9jYXRlX21lbW9yeShjdHgsCisJCQkgc2l6ZW9mKHN0cnVjdCBpbm9kZV9lbCksICJpbm9kZSBlbGVtZW50Iik7CisJaW5vX2VsLT5pbm9kZSA9IGlubzsKKwlpbm9fZWwtPm5leHQgPSBkYi0+aW5vZGVfbGlzdDsKKwlkYi0+aW5vZGVfbGlzdCA9IGlub19lbDsKKwlkYi0+bnVtX2JhZCsrOworCisJbiA9IGRpY3RfbG9va3VwKCZpbm9fZGljdCwgSU5UX1RPX1ZPSURQVFIoaW5vKSk7CisJaWYgKG4pCisJCWRpID0gKHN0cnVjdCBkdXBfaW5vZGUgKikgZG5vZGVfZ2V0KG4pOworCWVsc2UgeworCQlkaSA9IChzdHJ1Y3QgZHVwX2lub2RlICopIGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LAorCQkJIHNpemVvZihzdHJ1Y3QgZHVwX2lub2RlKSwgImR1cGxpY2F0ZSBpbm9kZSBoZWFkZXIiKTsKKwkJaWYgKGlubyA9PSBFWFQyX1JPT1RfSU5PKSB7CisJCQlkaS0+ZGlyID0gRVhUMl9ST09UX0lOTzsKKwkJCWR1cF9pbm9kZV9mb3VuZGRpcisrOworCQl9IGVsc2UKKwkJCWRpLT5kaXIgPSAwOworCisJCWRpLT5udW1fZHVwYmxvY2tzID0gMDsKKwkJZGktPmNsdXN0ZXJfbGlzdCA9IDA7CisJCWRpLT5pbm9kZSA9ICppbm9kZTsKKwkJZGljdF9hbGxvY19pbnNlcnQoJmlub19kaWN0LCBJTlRfVE9fVk9JRFBUUihpbm8pLCBkaSk7CisJfQorCWNsdXN0ZXJfZWwgPSAoc3RydWN0IGNsdXN0ZXJfZWwgKikgZTJmc2NrX2FsbG9jYXRlX21lbW9yeShjdHgsCisJCQkgc2l6ZW9mKHN0cnVjdCBjbHVzdGVyX2VsKSwgImNsdXN0ZXIgZWxlbWVudCIpOworCWNsdXN0ZXJfZWwtPmNsdXN0ZXIgPSBjbHVzdGVyOworCWNsdXN0ZXJfZWwtPm5leHQgPSBkaS0+Y2x1c3Rlcl9saXN0OworCWRpLT5jbHVzdGVyX2xpc3QgPSBjbHVzdGVyX2VsOworCWRpLT5udW1fZHVwYmxvY2tzKys7Cit9CisKKy8qCisgKiBGcmVlIGEgZHVwbGljYXRlIGlub2RlIHJlY29yZAorICovCitzdGF0aWMgdm9pZCBpbm9kZV9kbm9kZV9mcmVlKGRub2RlX3QgKm5vZGUsCisJCQkgICAgIHZvaWQgKmNvbnRleHQgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCXN0cnVjdCBkdXBfaW5vZGUJKmRpOworCXN0cnVjdCBjbHVzdGVyX2VsCQkqcCwgKm5leHQ7CisKKwlkaSA9IChzdHJ1Y3QgZHVwX2lub2RlICopIGRub2RlX2dldChub2RlKTsKKwlmb3IgKHAgPSBkaS0+Y2x1c3Rlcl9saXN0OyBwOyBwID0gbmV4dCkgeworCQluZXh0ID0gcC0+bmV4dDsKKwkJZnJlZShwKTsKKwl9CisJZnJlZShkaSk7CisJZnJlZShub2RlKTsKK30KKworLyoKKyAqIEZyZWUgYSBkdXBsaWNhdGUgY2x1c3RlciByZWNvcmQKKyAqLworc3RhdGljIHZvaWQgY2x1c3Rlcl9kbm9kZV9mcmVlKGRub2RlX3QgKm5vZGUsCisJCQkgICAgICAgdm9pZCAqY29udGV4dCBFWFQyRlNfQVRUUigodW51c2VkKSkpCit7CisJc3RydWN0IGR1cF9jbHVzdGVyCSpkYzsKKwlzdHJ1Y3QgaW5vZGVfZWwJCSpwLCAqbmV4dDsKKworCWRjID0gKHN0cnVjdCBkdXBfY2x1c3RlciAqKSBkbm9kZV9nZXQobm9kZSk7CisJZm9yIChwID0gZGMtPmlub2RlX2xpc3Q7IHA7IHAgPSBuZXh0KSB7CisJCW5leHQgPSBwLT5uZXh0OworCQlmcmVlKHApOworCX0KKwlmcmVlKGRjKTsKKwlmcmVlKG5vZGUpOworfQorCisKKy8qCisgKiBNYWluIHByb2NlZHVyZSBmb3IgaGFuZGxpbmcgZHVwbGljYXRlIGJsb2NrcworICovCit2b2lkIGUyZnNja19wYXNzMV9kdXBibG9ja3MoZTJmc2NrX3QgY3R4LCBjaGFyICpibG9ja19idWYpCit7CisJZXh0Ml9maWxzeXMgCQlmcyA9IGN0eC0+ZnM7CisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworI2lmZGVmIFJFU09VUkNFX1RSQUNLCisJc3RydWN0IHJlc291cmNlX3RyYWNrCXJ0cmFjazsKKyNlbmRpZgorCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCXBjdHguZXJyY29kZSA9IGUyZnNja19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoZnMsCisJCQlfKCJtdWx0aXBseSBjbGFpbWVkIGlub2RlIG1hcCIpLAorCQkJRVhUMkZTX0JNQVA2NF9SQlRSRUUsICJpbm9kZV9kdXBfbWFwIiwKKwkJCSZpbm9kZV9kdXBfbWFwKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMUJfQUxMT0NBVEVfSUJJVE1BUF9FUlJPUiwgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCisJZGljdF9pbml0KCZpbm9fZGljdCwgRElDVENPVU5UX1RfTUFYLCBkaWN0X2ludF9jbXApOworCWRpY3RfaW5pdCgmY2xzdHJfZGljdCwgRElDVENPVU5UX1RfTUFYLCBkaWN0X2ludF9jbXApOworCWRpY3Rfc2V0X2FsbG9jYXRvcigmaW5vX2RpY3QsIE5VTEwsIGlub2RlX2Rub2RlX2ZyZWUsIE5VTEwpOworCWRpY3Rfc2V0X2FsbG9jYXRvcigmY2xzdHJfZGljdCwgTlVMTCwgY2x1c3Rlcl9kbm9kZV9mcmVlLCBOVUxMKTsKKworCWluaXRfcmVzb3VyY2VfdHJhY2soJnJ0cmFjaywgY3R4LT5mcy0+aW8pOworCXBhc3MxYihjdHgsIGJsb2NrX2J1Zik7CisJcHJpbnRfcmVzb3VyY2VfdHJhY2soY3R4LCAiUGFzcyAxYiIsICZydHJhY2ssIGN0eC0+ZnMtPmlvKTsKKworCWluaXRfcmVzb3VyY2VfdHJhY2soJnJ0cmFjaywgY3R4LT5mcy0+aW8pOworCXBhc3MxYyhjdHgsIGJsb2NrX2J1Zik7CisJcHJpbnRfcmVzb3VyY2VfdHJhY2soY3R4LCAiUGFzcyAxYyIsICZydHJhY2ssIGN0eC0+ZnMtPmlvKTsKKworCWluaXRfcmVzb3VyY2VfdHJhY2soJnJ0cmFjaywgY3R4LT5mcy0+aW8pOworCXBhc3MxZChjdHgsIGJsb2NrX2J1Zik7CisJcHJpbnRfcmVzb3VyY2VfdHJhY2soY3R4LCAiUGFzcyAxZCIsICZydHJhY2ssIGN0eC0+ZnMtPmlvKTsKKworCS8qCisJICogVGltZSB0byBmcmVlIGFsbCBvZiB0aGUgYWNjdW11bGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd2UKKwkgKiBkb24ndCBuZWVkIGFueW1vcmUuCisJICovCisJZGljdF9mcmVlX25vZGVzKCZpbm9fZGljdCk7CisJZGljdF9mcmVlX25vZGVzKCZjbHN0cl9kaWN0KTsKKwlleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAoaW5vZGVfZHVwX21hcCk7Cit9CisKKy8qCisgKiBTY2FuIHRoZSBpbm9kZXMgbG9va2luZyBmb3IgaW5vZGVzIHRoYXQgY29udGFpbiBkdXBsaWNhdGUgYmxvY2tzLgorICovCitzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgeworCWUyZnNja190CWN0eDsKKwlleHQyX2lub190CWlubzsKKwlpbnQJCWR1cF9ibG9ja3M7CisJYmxrNjRfdAkJY3VyX2NsdXN0ZXIsIHBoeXNfY2x1c3RlcjsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGU7CisJc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eDsKK307CisKK3N0YXRpYyB2b2lkIHBhc3MxYihlMmZzY2tfdCBjdHgsIGNoYXIgKmJsb2NrX2J1ZikKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJZXh0Ml9pbm9fdCBpbm8gPSAwOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCWV4dDJfaW5vZGVfc2NhbglzY2FuOworCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCBwYjsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0IHBjdHg7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCisJaWYgKCEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9QUkVFTikpCisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMUJfUEFTU19IRUFERVIsICZwY3R4KTsKKwlwY3R4LmVycmNvZGUgPSBleHQyZnNfb3Blbl9pbm9kZV9zY2FuKGZzLCBjdHgtPmlub2RlX2J1ZmZlcl9ibG9ja3MsCisJCQkJCSAgICAgICZzY2FuKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMUJfSVNDQU5fRVJST1IsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJcmV0dXJuOworCX0KKwljdHgtPnN0YXNoZWRfaW5vZGUgPSAmaW5vZGU7CisJcGIuY3R4ID0gY3R4OworCXBiLnBjdHggPSAmcGN0eDsKKwlwY3R4LnN0ciA9ICJwYXNzMWIiOworCXdoaWxlICgxKSB7CisJCWlmIChpbm8gJSAoZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgKiA0KSA9PSAxKSB7CisJCQlpZiAoZTJmc2NrX21tcF91cGRhdGUoZnMpKQorCQkJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJCX0KKwkJcGN0eC5lcnJjb2RlID0gZXh0MmZzX2dldF9uZXh0X2lub2RlKHNjYW4sICZpbm8sICZpbm9kZSk7CisJCWlmIChwY3R4LmVycmNvZGUgPT0gRVhUMl9FVF9CQURfQkxPQ0tfSU5fSU5PREVfVEFCTEUpCisJCQljb250aW51ZTsKKwkJaWYgKHBjdHguZXJyY29kZSkgeworCQkJcGN0eC5pbm8gPSBpbm87CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFCX0lTQ0FOX0VSUk9SLCAmcGN0eCk7CisJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQkJcmV0dXJuOworCQl9CisJCWlmICghaW5vKQorCQkJYnJlYWs7CisJCXBjdHguaW5vID0gY3R4LT5zdGFzaGVkX2lubyA9IGlubzsKKwkJaWYgKChpbm8gIT0gRVhUMl9CQURfSU5PKSAmJgorCQkgICAgIWV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV91c2VkX21hcCwgaW5vKSkKKwkJCWNvbnRpbnVlOworCisJCXBiLmlubyA9IGlubzsKKwkJcGIuZHVwX2Jsb2NrcyA9IDA7CisJCXBiLmlub2RlID0gJmlub2RlOworCQlwYi5jdXJfY2x1c3RlciA9IH4wOworCQlwYi5waHlzX2NsdXN0ZXIgPSB+MDsKKworCQlpZiAoZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyKGZzLCAmaW5vZGUpIHx8CisJCSAgICAoaW5vID09IEVYVDJfQkFEX0lOTykpCisJCQlwY3R4LmVycmNvZGUgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIGlubywKKwkJCQkJICAgICBCTE9DS19GTEFHX1JFQURfT05MWSwgYmxvY2tfYnVmLAorCQkJCQkgICAgIHByb2Nlc3NfcGFzczFiX2Jsb2NrLCAmcGIpOworCQkvKiBJZiB0aGUgZmVhdHVyZSBpcyBub3Qgc2V0LCBhdHRycyB3aWxsIGJlIGNsZWFyZWQgbGF0ZXIgYW55d2F5ICovCisJCWlmICgoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICYgRVhUMl9GRUFUVVJFX0NPTVBBVF9FWFRfQVRUUikgJiYKKwkJICAgIGV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgJmlub2RlKSkgeworCQkJYmxrNjRfdCBibGsgPSBleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsICZpbm9kZSk7CisJCQlwcm9jZXNzX3Bhc3MxYl9ibG9jayhmcywgJmJsaywKKwkJCQkJICAgICBCTE9DS19DT1VOVF9FWFRBVFRSLCAwLCAwLCAmcGIpOworCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrX3NldChmcywgJmlub2RlLCBibGspOworCQl9CisJCWlmIChwYi5kdXBfYmxvY2tzKSB7CisJCQllbmRfcHJvYmxlbV9sYXRjaChjdHgsIFBSX0xBVENIX0RCTE9DSyk7CisJCQlpZiAoaW5vID49IEVYVDJfRklSU1RfSU5PREUoZnMtPnN1cGVyKSB8fAorCQkJICAgIGlubyA9PSBFWFQyX1JPT1RfSU5PKQorCQkJCWR1cF9pbm9kZV9jb3VudCsrOworCQl9CisJCWlmIChwY3R4LmVycmNvZGUpCisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFCX0JMT0NLX0lURVJBVEUsICZwY3R4KTsKKwl9CisJZXh0MmZzX2Nsb3NlX2lub2RlX3NjYW4oc2Nhbik7CisJZTJmc2NrX3VzZV9pbm9kZV9zaG9ydGN1dHMoY3R4LCAwKTsKK30KKworc3RhdGljIGludCBwcm9jZXNzX3Bhc3MxYl9ibG9jayhleHQyX2ZpbHN5cyBmcyBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJYmxrNjRfdAkqYmxvY2tfbnIsCisJCQkJZTJfYmxrY250X3QgYmxvY2tjbnQsCisJCQkJYmxrNjRfdCByZWZfYmxrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQlpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCAqcDsKKwllMmZzY2tfdCBjdHg7CisJYmxrNjRfdAlsYywgcGM7CisKKwlpZiAoSE9MRV9CTEtBRERSKCpibG9ja19ucikpCisJCXJldHVybiAwOworCXAgPSAoc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0ICopIHByaXZfZGF0YTsKKwljdHggPSBwLT5jdHg7CisJbGMgPSBFWFQyRlNfQjJDKGZzLCBibG9ja2NudCk7CisJcGMgPSBFWFQyRlNfQjJDKGZzLCAqYmxvY2tfbnIpOworCisJaWYgKCFleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZHVwX21hcCwgKmJsb2NrX25yKSkKKwkJZ290byBmaW5pc2g7CisKKwkvKiBPSywgdGhpcyBpcyBhIGR1cGxpY2F0ZSBibG9jayAqLworCWlmIChwLT5pbm8gIT0gRVhUMl9CQURfSU5PKSB7CisJCXAtPnBjdHgtPmJsayA9ICpibG9ja19ucjsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xQl9EVVBfQkxPQ0ssIHAtPnBjdHgpOworCX0KKwlwLT5kdXBfYmxvY2tzKys7CisJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihpbm9kZV9kdXBfbWFwLCBwLT5pbm8pOworCisJLyoKKwkgKiBRdWFsaWZpY2F0aW9ucyBmb3Igc3VibWl0dGluZyBhIGJsb2NrIGZvciBkdXBsaWNhdGUgcHJvY2Vzc2luZzoKKwkgKiBJdCdzIGFuIGV4dGVudC9pbmRpcmVjdCBibG9jayAoYW5kIGhhcyBhIG5lZ2F0aXZlIGxvZ2ljYWwgb2Zmc2V0KTsKKwkgKiB3ZSd2ZSBjcm9zc2VkIGEgbG9naWNhbCBjbHVzdGVyIGJvdW5kYXJ5OyBvciB0aGUgcGh5c2ljYWwgY2x1c3RlcgorCSAqIHN1ZGRlbmx5IGNoYW5nZWQsIHdoaWNoIGluZGljYXRlcyB0aGF0IGJsb2NrcyBpbiBhIGxvZ2ljYWwgY2x1c3RlcgorCSAqIGFyZSBtYXBwZWQgdG8gbXVsdGlwbGUgcGh5c2ljYWwgY2x1c3RlcnMuCisJICovCisJaWYgKGJsb2NrY250IDwgMCB8fCBsYyAhPSBwLT5jdXJfY2x1c3RlciB8fCBwYyAhPSBwLT5waHlzX2NsdXN0ZXIpCisJCWFkZF9kdXBlKGN0eCwgcC0+aW5vLCBFWFQyRlNfQjJDKGZzLCAqYmxvY2tfbnIpLCBwLT5pbm9kZSk7CisKK2ZpbmlzaDoKKwlwLT5jdXJfY2x1c3RlciA9IGxjOworCXAtPnBoeXNfY2x1c3RlciA9IHBjOworCXJldHVybiAwOworfQorCisvKgorICogUGFzcyAxYzogU2NhbiBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggZHVwbGljYXRlIGJsb2Nrcy4gIFRoaXMKKyAqIGlzIHVzZWQgc28gdGhhdCB3ZSBjYW4gcHJpbnQgcGF0aG5hbWVzIHdoZW4gcHJvbXB0aW5nIHRoZSB1c2VyIGZvcgorICogd2hhdCB0byBkby4KKyAqLworc3RydWN0IHNlYXJjaF9kaXJfc3RydWN0IHsKKwlpbnQJCWNvdW50OworCWV4dDJfaW5vX3QJZmlyc3RfaW5vZGU7CisJZXh0Ml9pbm9fdAltYXhfaW5vZGU7Cit9OworCitzdGF0aWMgaW50IHNlYXJjaF9kaXJlbnRfcHJvYyhleHQyX2lub190IGRpciwgaW50IGVudHJ5LAorCQkJICAgICAgc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCQkgICAgICBpbnQgb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgIGludCBibG9ja3NpemUgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICAgY2hhciAqYnVmIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2VhcmNoX2Rpcl9zdHJ1Y3QgKnNkOworCXN0cnVjdCBkdXBfaW5vZGUJKnA7CisJZG5vZGVfdAkJCSpuOworCisJc2QgPSAoc3RydWN0IHNlYXJjaF9kaXJfc3RydWN0ICopIHByaXZfZGF0YTsKKworCWlmIChkaXJlbnQtPmlub2RlID4gc2QtPm1heF9pbm9kZSkKKwkJLyogU2hvdWxkIGFib3J0IHRoaXMgaW5vZGUsIGJ1dCBub3QgZXZlcnl0aGluZyAqLworCQlyZXR1cm4gMDsKKworCWlmICgoZGlyZW50LT5pbm9kZSA8IHNkLT5maXJzdF9pbm9kZSkgfHwgKGVudHJ5IDwgRElSRU5UX09USEVSX0ZJTEUpIHx8CisJICAgICFleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGlub2RlX2R1cF9tYXAsIGRpcmVudC0+aW5vZGUpKQorCQlyZXR1cm4gMDsKKworCW4gPSBkaWN0X2xvb2t1cCgmaW5vX2RpY3QsIElOVF9UT19WT0lEUFRSKGRpcmVudC0+aW5vZGUpKTsKKwlpZiAoIW4pCisJCXJldHVybiAwOworCXAgPSAoc3RydWN0IGR1cF9pbm9kZSAqKSBkbm9kZV9nZXQobik7CisJaWYgKCFwLT5kaXIpIHsKKwkJcC0+ZGlyID0gZGlyOworCQlzZC0+Y291bnQtLTsKKwl9CisKKwlyZXR1cm4oc2QtPmNvdW50ID8gMCA6IERJUkVOVF9BQk9SVCk7Cit9CisKKworc3RhdGljIHZvaWQgcGFzczFjKGUyZnNja190IGN0eCwgY2hhciAqYmxvY2tfYnVmKQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlzdHJ1Y3Qgc2VhcmNoX2Rpcl9zdHJ1Y3Qgc2Q7CisJc3RydWN0IHByb2JsZW1fY29udGV4dCBwY3R4OworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pKQorCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFDX1BBU1NfSEVBREVSLCAmcGN0eCk7CisKKwkvKgorCSAqIFNlYXJjaCB0aHJvdWdoIGFsbCBkaXJlY3RvcmllcyB0byB0cmFuc2xhdGUgaW5vZGVzIHRvIG5hbWVzCisJICogKGJ5IHNlYXJjaGluZyBmb3IgdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5IGZvciB0aGF0IGlub2RlLikKKwkgKi8KKwlzZC5jb3VudCA9IGR1cF9pbm9kZV9jb3VudCAtIGR1cF9pbm9kZV9mb3VuZGRpcjsKKwlzZC5maXJzdF9pbm9kZSA9IEVYVDJfRklSU1RfSU5PREUoZnMtPnN1cGVyKTsKKwlzZC5tYXhfaW5vZGUgPSBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50OworCWV4dDJmc19kYmxpc3RfZGlyX2l0ZXJhdGUoZnMtPmRibGlzdCwgMCwgYmxvY2tfYnVmLAorCQkJCSAgc2VhcmNoX2RpcmVudF9wcm9jLCAmc2QpOworfQorCitzdGF0aWMgdm9pZCBwYXNzMWQoZTJmc2NrX3QgY3R4LCBjaGFyICpibG9ja19idWYpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCXN0cnVjdCBkdXBfaW5vZGUJKnAsICp0OworCXN0cnVjdCBkdXBfY2x1c3RlcgkqcTsKKwlleHQyX2lub190CQkqc2hhcmVkLCBpbm87CisJaW50CXNoYXJlZF9sZW47CisJaW50CWk7CisJaW50CWZpbGVfb2s7CisJaW50CW1ldGFfZGF0YSA9IDA7CisJc3RydWN0IHByb2JsZW1fY29udGV4dCBwY3R4OworCWRub2RlX3QJKm4sICptOworCXN0cnVjdCBjbHVzdGVyX2VsCSpzOworCXN0cnVjdCBpbm9kZV9lbCAqcjsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwlpZiAoIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1BSRUVOKSkKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xRF9QQVNTX0hFQURFUiwgJnBjdHgpOworCWUyZnNja19yZWFkX2JpdG1hcHMoY3R4KTsKKworCXBjdHgubnVtID0gZHVwX2lub2RlX2NvdW50OyAvKiBkaWN0X2NvdW50KCZpbm9fZGljdCk7ICovCisJZml4X3Byb2JsZW0oY3R4LCBQUl8xRF9OVU1fRFVQX0lOT0RFUywgJnBjdHgpOworCXNoYXJlZCA9IChleHQyX2lub190ICopIGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LAorCQkJCXNpemVvZihleHQyX2lub190KSAqIGRpY3RfY291bnQoJmlub19kaWN0KSwKKwkJCQkiU2hhcmVkIGlub2RlIGxpc3QiKTsKKwlmb3IgKG4gPSBkaWN0X2ZpcnN0KCZpbm9fZGljdCk7IG47IG4gPSBkaWN0X25leHQoJmlub19kaWN0LCBuKSkgeworCQlwID0gKHN0cnVjdCBkdXBfaW5vZGUgKikgZG5vZGVfZ2V0KG4pOworCQlzaGFyZWRfbGVuID0gMDsKKwkJZmlsZV9vayA9IDE7CisJCWlubyA9IChleHQyX2lub190KVZPSURQVFJfVE9fSU5UKGRub2RlX2dldGtleShuKSk7CisJCWlmIChpbm8gPT0gRVhUMl9CQURfSU5PIHx8IGlubyA9PSBFWFQyX1JFU0laRV9JTk8pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBGaW5kIGFsbCBvZiB0aGUgaW5vZGVzIHdoaWNoIHNoYXJlIGJsb2NrcyB3aXRoIHRoaXMKKwkJICogb25lLiAgRmlyc3Qgd2UgZmluZCBhbGwgb2YgdGhlIGR1cGxpY2F0ZSBibG9ja3MKKwkJICogYmVsb25naW5nIHRvIHRoaXMgaW5vZGUsIGFuZCB0aGVuIHNlYXJjaCBlYWNoIGJsb2NrCisJCSAqIGdldCB0aGUgbGlzdCBvZiBpbm9kZXMsIGFuZCBtZXJnZSB0aGVtIHRvZ2V0aGVyLgorCQkgKi8KKwkJZm9yIChzID0gcC0+Y2x1c3Rlcl9saXN0OyBzOyBzID0gcy0+bmV4dCkgeworCQkJbSA9IGRpY3RfbG9va3VwKCZjbHN0cl9kaWN0LAorCQkJCQlJTlRfVE9fVk9JRFBUUihzLT5jbHVzdGVyKSk7CisJCQlpZiAoIW0pCisJCQkJY29udGludWU7IC8qIFNob3VsZCBuZXZlciBoYXBwZW4uLi4gKi8KKwkJCXEgPSAoc3RydWN0IGR1cF9jbHVzdGVyICopIGRub2RlX2dldChtKTsKKwkJCWlmIChxLT5udW1fYmFkID4gMSkKKwkJCQlmaWxlX29rID0gMDsKKwkJCWlmIChjaGVja19pZl9mc19jbHVzdGVyKGN0eCwgcy0+Y2x1c3RlcikpIHsKKwkJCQlmaWxlX29rID0gMDsKKwkJCQltZXRhX2RhdGEgPSAxOworCQkJfQorCisJCQkvKgorCQkJICogQWRkIGFsbCBpbm9kZXMgdXNlZCBieSB0aGlzIGJsb2NrIHRvIHRoZQorCQkJICogc2hhcmVkW10gLS0tIHdoaWNoIGlzIGEgdW5pcXVlIGxpc3QsIHNvCisJCQkgKiBpZiBhbiBpbm9kZSBpcyBhbHJlYWR5IGluIHNoYXJlZFtdLCBkb24ndAorCQkJICogYWRkIGl0IGFnYWluLgorCQkJICovCisJCQlmb3IgKHIgPSBxLT5pbm9kZV9saXN0OyByOyByID0gci0+bmV4dCkgeworCQkJCWlmIChyLT5pbm9kZSA9PSBpbm8pCisJCQkJCWNvbnRpbnVlOworCQkJCWZvciAoaSA9IDA7IGkgPCBzaGFyZWRfbGVuOyBpKyspCisJCQkJCWlmIChzaGFyZWRbaV0gPT0gci0+aW5vZGUpCisJCQkJCQlicmVhazsKKwkJCQlpZiAoaSA9PSBzaGFyZWRfbGVuKSB7CisJCQkJCXNoYXJlZFtzaGFyZWRfbGVuKytdID0gci0+aW5vZGU7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyoKKwkJICogUmVwb3J0IHRoZSBpbm9kZSB0aGF0IHdlIGFyZSB3b3JraW5nIG9uCisJCSAqLworCQlwY3R4Lmlub2RlID0gJnAtPmlub2RlOworCQlwY3R4LmlubyA9IGlubzsKKwkJcGN0eC5kaXIgPSBwLT5kaXI7CisJCXBjdHguYmxrY291bnQgPSBwLT5udW1fZHVwYmxvY2tzOworCQlwY3R4Lm51bSA9IG1ldGFfZGF0YSA/IHNoYXJlZF9sZW4rMSA6IHNoYXJlZF9sZW47CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMURfRFVQX0ZJTEUsICZwY3R4KTsKKwkJcGN0eC5ibGtjb3VudCA9IDA7CisJCXBjdHgubnVtID0gMDsKKworCQlpZiAobWV0YV9kYXRhKQorCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8xRF9TSEFSRV9NRVRBREFUQSwgJnBjdHgpOworCisJCWZvciAoaSA9IDA7IGkgPCBzaGFyZWRfbGVuOyBpKyspIHsKKwkJCW0gPSBkaWN0X2xvb2t1cCgmaW5vX2RpY3QsIElOVF9UT19WT0lEUFRSKHNoYXJlZFtpXSkpOworCQkJaWYgKCFtKQorCQkJCWNvbnRpbnVlOyAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCQl0ID0gKHN0cnVjdCBkdXBfaW5vZGUgKikgZG5vZGVfZ2V0KG0pOworCQkJLyoKKwkJCSAqIFJlcG9ydCB0aGUgaW5vZGUgdGhhdCB3ZSBhcmUgc2hhcmluZyB3aXRoCisJCQkgKi8KKwkJCXBjdHguaW5vZGUgPSAmdC0+aW5vZGU7CisJCQlwY3R4LmlubyA9IHNoYXJlZFtpXTsKKwkJCXBjdHguZGlyID0gdC0+ZGlyOworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8xRF9EVVBfRklMRV9MSVNULCAmcGN0eCk7CisJCX0KKwkJLyoKKwkJICogRXZlbiBpZiB0aGUgZmlsZSBzaGFyZXMgYmxvY2tzIHdpdGggaXRzZWxmLCB3ZSBzdGlsbCBuZWVkIHRvCisJCSAqIGNsb25lIHRoZSBibG9ja3MuCisJCSAqLworCQlpZiAoZmlsZV9vayAmJiAobWV0YV9kYXRhID8gc2hhcmVkX2xlbisxIDogc2hhcmVkX2xlbikgIT0gMCkgeworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8xRF9EVVBfQkxPQ0tTX0RFQUxULCAmcGN0eCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xRF9DTE9ORV9RVUVTVElPTiwgJnBjdHgpKSB7CisJCQlwY3R4LmVycmNvZGUgPSBjbG9uZV9maWxlKGN0eCwgaW5vLCBwLCBibG9ja19idWYpOworCQkJaWYgKHBjdHguZXJyY29kZSkKKwkJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFEX0NMT05FX0VSUk9SLCAmcGN0eCk7CisJCQllbHNlCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMURfREVMRVRFX1FVRVNUSU9OLCAmcGN0eCkpCisJCQlkZWxldGVfZmlsZShjdHgsIGlubywgcCwgYmxvY2tfYnVmKTsKKwkJZWxzZQorCQkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisJfQorCWV4dDJmc19mcmVlX21lbSgmc2hhcmVkKTsKK30KKworLyoKKyAqIERyb3AgdGhlIHJlZmNvdW50IG9uIHRoZSBkdXBfYmxvY2sgc3RydWN0dXJlLCBhbmQgY2xlYXIgdGhlIGVudHJ5CisgKiBpbiB0aGUgYmxvY2tfZHVwX21hcCBpZiBhcHByb3ByaWF0ZS4KKyAqLworc3RhdGljIHZvaWQgZGVjcmVtZW50X2JhZGNvdW50KGUyZnNja190IGN0eCwgYmxrNjRfdCBibG9jaywKKwkJCSAgICAgICBzdHJ1Y3QgZHVwX2NsdXN0ZXIgKnApCit7CisJcC0+bnVtX2JhZC0tOworCWlmIChwLT5udW1fYmFkIDw9IDAgfHwKKwkgICAgKHAtPm51bV9iYWQgPT0gMSAmJiAhY2hlY2tfaWZfZnNfYmxvY2soY3R4LCBibG9jaykpKSB7CisJCWlmIChjaGVja19pZl9mc19jbHVzdGVyKGN0eCwgRVhUMkZTX0IyQyhjdHgtPmZzLCBibG9jaykpKQorCQkJcmV0dXJuOworCQlleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19kdXBfbWFwLCBibG9jayk7CisJfQorfQorCitzdGF0aWMgaW50IGRlbGV0ZV9maWxlX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgICBibGs2NF90CSpibG9ja19uciwKKwkJCSAgICAgZTJfYmxrY250X3QgYmxvY2tjbnQsCisJCQkgICAgIGJsazY0X3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgaW50IHJlZl9vZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0ICpwYjsKKwlzdHJ1Y3QgZHVwX2NsdXN0ZXIgKnA7CisJZG5vZGVfdAkqbjsKKwllMmZzY2tfdCBjdHg7CisJYmxrNjRfdCBjLCBsYzsKKworCXBiID0gKHN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCAqKSBwcml2X2RhdGE7CisJY3R4ID0gcGItPmN0eDsKKworCWlmIChIT0xFX0JMS0FERFIoKmJsb2NrX25yKSkKKwkJcmV0dXJuIDA7CisKKwljID0gRVhUMkZTX0IyQyhmcywgKmJsb2NrX25yKTsKKwlsYyA9IEVYVDJGU19CMkMoZnMsIGJsb2NrY250KTsKKwlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2R1cF9tYXAsICpibG9ja19ucikpIHsKKwkJbiA9IGRpY3RfbG9va3VwKCZjbHN0cl9kaWN0LCBJTlRfVE9fVk9JRFBUUihjKSk7CisJCWlmIChuKSB7CisJCQlwID0gKHN0cnVjdCBkdXBfY2x1c3RlciAqKSBkbm9kZV9nZXQobik7CisJCQlpZiAobGMgIT0gcGItPmN1cl9jbHVzdGVyKQorCQkJCWRlY3JlbWVudF9iYWRjb3VudChjdHgsICpibG9ja19uciwgcCk7CisJCX0gZWxzZQorCQkJY29tX2VycigiZGVsZXRlX2ZpbGVfYmxvY2siLCAwLAorCQkJICAgIF8oImludGVybmFsIGVycm9yOiBjYW4ndCBmaW5kIGR1cF9ibGsgZm9yICVsbHVcbiIpLAorCQkJCSpibG9ja19ucik7CisJfSBlbHNlIHsKKwkJaWYgKCgqYmxvY2tfbnIgJSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhjdHgtPmZzKSkgPT0gMCkKKwkJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsICpibG9ja19uciwgLTEpOworCQlwYi0+ZHVwX2Jsb2NrcysrOworCX0KKwlwYi0+Y3VyX2NsdXN0ZXIgPSBsYzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfZmlsZShlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLAorCQkJc3RydWN0IGR1cF9pbm9kZSAqZHAsIGNoYXIqIGJsb2NrX2J1ZikKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0IHBiOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwl1bnNpZ25lZCBpbnQJCWNvdW50OworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlwY3R4LmlubyA9IHBiLmlubyA9IGlubzsKKwlwYi5kdXBfYmxvY2tzID0gMDsKKwlwYi5jdHggPSBjdHg7CisJcGN0eC5zdHIgPSAiZGVsZXRlX2ZpbGUiOworCXBiLmN1cl9jbHVzdGVyID0gfjA7CisKKwlpZiAoZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyKGZzLCAmZHAtPmlub2RlKSkKKwkJcGN0eC5lcnJjb2RlID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBpbm8sCisJCQkJCQkgICAgIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLAorCQkJCQkJICAgICBibG9ja19idWYsCisJCQkJCQkgICAgIGRlbGV0ZV9maWxlX2Jsb2NrLCAmcGIpOworCWlmIChwY3R4LmVycmNvZGUpCisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMUJfQkxPQ0tfSVRFUkFURSwgJnBjdHgpOworCWlmIChjdHgtPmlub2RlX2JhZF9tYXApCisJCWV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2JhZF9tYXAsIGlubyk7CisJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihmcywgaW5vLCAtMSwgTElOVVhfU19JU0RJUihkcC0+aW5vZGUuaV9tb2RlKSk7CisJcXVvdGFfZGF0YV9zdWIoY3R4LT5xY3R4LCAmZHAtPmlub2RlLCBpbm8sCisJCSAgICAgICBwYi5kdXBfYmxvY2tzICogZnMtPmJsb2Nrc2l6ZSk7CisJcXVvdGFfZGF0YV9pbm9kZXMoY3R4LT5xY3R4LCAmZHAtPmlub2RlLCBpbm8sIC0xKTsKKworCS8qIElub2RlIG1heSBoYXZlIGNoYW5nZWQgYnkgYmxvY2tfaXRlcmF0ZSwgc28gcmVyZWFkIGl0ICovCisJZTJmc2NrX3JlYWRfaW5vZGUoY3R4LCBpbm8sICZkcC0+aW5vZGUsICJkZWxldGVfZmlsZSIpOworCWUyZnNja19jbGVhcl9pbm9kZShjdHgsIGlubywgJmRwLT5pbm9kZSwgMCwgImRlbGV0ZV9maWxlIik7CisJaWYgKGV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgJmRwLT5pbm9kZSkgJiYKKwkgICAgKGZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDJfRkVBVFVSRV9DT01QQVRfRVhUX0FUVFIpKSB7CisJCWNvdW50ID0gMTsKKwkJcGN0eC5lcnJjb2RlID0gZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIoZnMsCisJCQkJCWV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgJmRwLT5pbm9kZSksCisJCQkJCQkgICBibG9ja19idWYsIC0xLCAmY291bnQpOworCQlpZiAocGN0eC5lcnJjb2RlID09IEVYVDJfRVRfQkFEX0VBX0JMT0NLX05VTSkgeworCQkJcGN0eC5lcnJjb2RlID0gMDsKKwkJCWNvdW50ID0gMTsKKwkJfQorCQlpZiAocGN0eC5lcnJjb2RlKSB7CisJCQlwY3R4LmJsayA9IGV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgJmRwLT5pbm9kZSk7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFCX0FESl9FQV9SRUZDT1VOVCwgJnBjdHgpOworCQl9CisJCS8qCisJCSAqIElmIHRoZSBjb3VudCBpcyB6ZXJvLCB0aGVuIGFycmFuZ2UgdG8gaGF2ZSB0aGUKKwkJICogYmxvY2sgZGVsZXRlZC4gIElmIHRoZSBibG9jayBpcyBpbiB0aGUgYmxvY2tfZHVwX21hcCwKKwkJICogYWxzbyBjYWxsIGRlbGV0ZV9maWxlX2Jsb2NrIHNpbmNlIGl0IHdpbGwgdGFrZSBjYXJlCisJCSAqIG9mIGtlZXBpbmcgdGhlIGFjY291bnRpbmcgc3RyYWlnaHQuCisJCSAqLworCQlpZiAoKGNvdW50ID09IDApIHx8CisJCSAgICBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZHVwX21hcCwKKwkJCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCAmZHAtPmlub2RlKSkpIHsKKwkJCWJsazY0X3QgYmxrID0gZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCAmZHAtPmlub2RlKTsKKwkJCWRlbGV0ZV9maWxlX2Jsb2NrKGZzLCAmYmxrLAorCQkJCQkgIEJMT0NLX0NPVU5UX0VYVEFUVFIsIDAsIDAsICZwYik7CisJCQlleHQyZnNfZmlsZV9hY2xfYmxvY2tfc2V0KGZzLCAmZHAtPmlub2RlLCBibGspOworCQkJcXVvdGFfZGF0YV9zdWIoY3R4LT5xY3R4LCAmZHAtPmlub2RlLCBpbm8sIGZzLT5ibG9ja3NpemUpOworCQl9CisJfQorfQorCitzdHJ1Y3QgY2xvbmVfc3RydWN0IHsKKwllcnJjb2RlX3QJZXJyY29kZTsKKwlibGs2NF90CQlkdXBfY2x1c3RlcjsKKwlibGs2NF90CQlhbGxvY19ibG9jazsKKwlleHQyX2lub190CWRpciwgaW5vOworCWNoYXIJKmJ1ZjsKKwllMmZzY2tfdCBjdHg7CisJc3RydWN0IGV4dDJfaW5vZGUJKmlub2RlOworfTsKKworc3RhdGljIGludCBjbG9uZV9maWxlX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgIGJsazY0X3QJKmJsb2NrX25yLAorCQkJICAgIGUyX2Jsa2NudF90IGJsb2NrY250LAorCQkJICAgIGJsazY0X3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBkdXBfY2x1c3RlciAqcDsKKwlibGs2NF90CW5ld19ibG9jazsKKwllcnJjb2RlX3QJcmV0dmFsOworCXN0cnVjdCBjbG9uZV9zdHJ1Y3QgKmNzID0gKHN0cnVjdCBjbG9uZV9zdHJ1Y3QgKikgcHJpdl9kYXRhOworCWRub2RlX3QgKm47CisJZTJmc2NrX3QgY3R4OworCWJsazY0X3QgYzsKKwlpbnQgaXNfbWV0YSA9IDA7CisKKwljdHggPSBjcy0+Y3R4OworCisJaWYgKEhPTEVfQkxLQUREUigqYmxvY2tfbnIpKQorCQlyZXR1cm4gMDsKKworCWMgPSBFWFQyRlNfQjJDKGZzLCBibG9ja2NudCk7CisJaWYgKGNoZWNrX2lmX2ZzX2NsdXN0ZXIoY3R4LCBFWFQyRlNfQjJDKGZzLCAqYmxvY2tfbnIpKSkKKwkJaXNfbWV0YSA9IDE7CisKKwlpZiAoYyA9PSBjcy0+ZHVwX2NsdXN0ZXIgJiYgY3MtPmFsbG9jX2Jsb2NrKSB7CisJCW5ld19ibG9jayA9IGNzLT5hbGxvY19ibG9jazsKKwkJZ290byBnb3RfYmxvY2s7CisJfQorCisJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19kdXBfbWFwLCAqYmxvY2tfbnIpKSB7CisJCW4gPSBkaWN0X2xvb2t1cCgmY2xzdHJfZGljdCwKKwkJCQlJTlRfVE9fVk9JRFBUUihFWFQyRlNfQjJDKGZzLCAqYmxvY2tfbnIpKSk7CisJCWlmICghbikgeworCQkJY29tX2VycigiY2xvbmVfZmlsZV9ibG9jayIsIDAsCisJCQkgICAgXygiaW50ZXJuYWwgZXJyb3I6IGNhbid0IGZpbmQgZHVwX2JsayBmb3IgJWxsdVxuIiksCisJCQkJKmJsb2NrX25yKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJcCA9IChzdHJ1Y3QgZHVwX2NsdXN0ZXIgKikgZG5vZGVfZ2V0KG4pOworCQlpZiAoIWlzX21ldGEpCisJCQlkZWNyZW1lbnRfYmFkY291bnQoY3R4LCAqYmxvY2tfbnIsIHApOworCisJCWNzLT5kdXBfY2x1c3RlciA9IGM7CisJCS8qCisJCSAqIExldCdzIHRyeSBhbiBpbXBsaWVkIGNsdXN0ZXIgYWxsb2NhdGlvbi4gIElmIHdlIGdldCB0aGUgc2FtZQorCQkgKiBjbHVzdGVyIGJhY2ssIHRoZW4gd2UgbmVlZCB0byBmaW5kIGEgbmV3IGJsb2NrOyBvdGhlcndpc2UsCisJCSAqIHdlJ3JlIG1lcmVseSBmaXhpbmcgdGhlIHByb2JsZW0gb2Ygb25lIGxvZ2ljYWwgY2x1c3RlciBiZWluZworCQkgKiBtYXBwZWQgdG8gbXVsdGlwbGUgcGh5c2ljYWwgY2x1c3RlcnMuCisJCSAqLworCQluZXdfYmxvY2sgPSAwOworCQlyZXR2YWwgPSBleHQyZnNfbWFwX2NsdXN0ZXJfYmxvY2soZnMsIGNzLT5pbm8sIGNzLT5pbm9kZSwKKwkJCQkJCSAgYmxvY2tjbnQsICZuZXdfYmxvY2spOworCQlpZiAocmV0dmFsID09IDAgJiYgbmV3X2Jsb2NrICE9IDAgJiYKKwkJICAgIEVYVDJGU19CMkMoY3R4LT5mcywgbmV3X2Jsb2NrKSAhPQorCQkgICAgRVhUMkZTX0IyQyhjdHgtPmZzLCAqYmxvY2tfbnIpKQorCQkJZ290byBjbHVzdGVyX2FsbG9jX29rOworCQlyZXR2YWwgPSBleHQyZnNfbmV3X2Jsb2NrMihmcywgMCwgY3R4LT5ibG9ja19mb3VuZF9tYXAsCisJCQkJCSAgICZuZXdfYmxvY2spOworCQlpZiAocmV0dmFsKSB7CisJCQljcy0+ZXJyY29kZSA9IHJldHZhbDsKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJfQorY2x1c3Rlcl9hbGxvY19vazoKKwkJY3MtPmFsbG9jX2Jsb2NrID0gbmV3X2Jsb2NrOworCisJZ290X2Jsb2NrOgorCQluZXdfYmxvY2sgJj0gfkVYVDJGU19DTFVTVEVSX01BU0soZnMpOworCQluZXdfYmxvY2sgKz0gRVhUMkZTX0NMVVNURVJfTUFTSyhmcykgJiBibG9ja2NudDsKKwkJaWYgKGNzLT5kaXIgJiYgKGJsb2NrY250ID49IDApKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfc2V0X2Rpcl9ibG9jazIoZnMtPmRibGlzdCwKKwkJCQkJY3MtPmRpciwgbmV3X2Jsb2NrLCBibG9ja2NudCk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJY3MtPmVycmNvZGUgPSByZXR2YWw7CisJCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQkJfQorCQl9CisjaWYgMAorIAkJcHJpbnRmKCJDbG9uaW5nIGJsb2NrICMlbGxkIGZyb20gJWxsdSB0byAlbGx1XG4iLAorCQkgICAgICAgYmxvY2tjbnQsICpibG9ja19uciwgbmV3X2Jsb2NrKTsKKyNlbmRpZgorCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCAqYmxvY2tfbnIsIDEsIGNzLT5idWYpOworCQlpZiAocmV0dmFsKSB7CisJCQljcy0+ZXJyY29kZSA9IHJldHZhbDsKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJfQorCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgbmV3X2Jsb2NrLCAxLCBjcy0+YnVmKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY3MtPmVycmNvZGUgPSByZXR2YWw7CisJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCX0KKwkJKmJsb2NrX25yID0gbmV3X2Jsb2NrOworCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLCBuZXdfYmxvY2spOworCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsIG5ld19ibG9jayk7CisJCXJldHVybiBCTE9DS19DSEFOR0VEOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBjbG9uZV9maWxlKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgc3RydWN0IGR1cF9pbm9kZSAqZHAsIGNoYXIqIGJsb2NrX2J1ZikKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgY2xvbmVfc3RydWN0IGNzOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwlibGs2NF90CQlibGssIG5ld19ibGs7CisJZG5vZGVfdAkJKm47CisJc3RydWN0IGlub2RlX2VsCSppbm9fZWw7CisJc3RydWN0IGR1cF9jbHVzdGVyCSpkYzsKKwlzdHJ1Y3QgZHVwX2lub2RlCSpkaTsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJY3MuZXJyY29kZSA9IDA7CisJY3MuZGlyID0gMDsKKwljcy5kdXBfY2x1c3RlciA9IH4wOworCWNzLmFsbG9jX2Jsb2NrID0gMDsKKwljcy5jdHggPSBjdHg7CisJY3MuaW5vID0gaW5vOworCWNzLmlub2RlID0gJmRwLT5pbm9kZTsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmY3MuYnVmKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9kaXJfbWFwLCBpbm8pKQorCQljcy5kaXIgPSBpbm87CisKKwlwY3R4LmlubyA9IGlubzsKKwlwY3R4LnN0ciA9ICJjbG9uZV9maWxlIjsKKwlpZiAoZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyKGZzLCAmZHAtPmlub2RlKSkKKwkJcGN0eC5lcnJjb2RlID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBpbm8sIDAsIGJsb2NrX2J1ZiwKKwkJCQkJCSAgICAgY2xvbmVfZmlsZV9ibG9jaywgJmNzKTsKKwlleHQyZnNfbWFya19iYl9kaXJ0eShmcyk7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFCX0JMT0NLX0lURVJBVEUsICZwY3R4KTsKKwkJcmV0dmFsID0gcGN0eC5lcnJjb2RlOworCQlnb3RvIGVycm91dDsKKwl9CisJaWYgKGNzLmVycmNvZGUpIHsKKwkJY29tX2VycigiY2xvbmVfZmlsZSIsIGNzLmVycmNvZGUsICIlcyIsCisJCQlfKCJyZXR1cm5lZCBmcm9tIGNsb25lX2ZpbGVfYmxvY2siKSk7CisJCXJldHZhbCA9IGNzLmVycmNvZGU7CisJCWdvdG8gZXJyb3V0OworCX0KKwkvKiBUaGUgaW5vZGUgbWF5IGhhdmUgY2hhbmdlZCBvbiBkaXNrLCBzbyB3ZSBoYXZlIHRvIHJlLXJlYWQgaXQgKi8KKwllMmZzY2tfcmVhZF9pbm9kZShjdHgsIGlubywgJmRwLT5pbm9kZSwgImNsb25lIGZpbGUgRUEiKTsKKwlibGsgPSBleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsICZkcC0+aW5vZGUpOworCW5ld19ibGsgPSBibGs7CisJaWYgKGJsayAmJiAoY2xvbmVfZmlsZV9ibG9jayhmcywgJm5ld19ibGssCisJCQkJICAgICBCTE9DS19DT1VOVF9FWFRBVFRSLCAwLCAwLCAmY3MpID09CisJCSAgICBCTE9DS19DSEFOR0VEKSkgeworCQlleHQyZnNfZmlsZV9hY2xfYmxvY2tfc2V0KGZzLCAmZHAtPmlub2RlLCBuZXdfYmxrKTsKKwkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgaW5vLCAmZHAtPmlub2RlLCAiY2xvbmUgZmlsZSBFQSIpOworCQkvKgorCQkgKiBJZiB3ZSBjbG9uZWQgdGhlIEVBIGJsb2NrLCBmaW5kIGFsbCBvdGhlciBpbm9kZXMKKwkJICogd2hpY2ggcmVmZXJlZCB0byB0aGF0IEVBIGJsb2NrLCBhbmQgbW9kaWZ5CisJCSAqIHRoZW0gdG8gcG9pbnQgdG8gdGhlIG5ldyBFQSBibG9jay4KKwkJICovCisJCW4gPSBkaWN0X2xvb2t1cCgmY2xzdHJfZGljdCwKKwkJCQlJTlRfVE9fVk9JRFBUUihFWFQyRlNfQjJDKGZzLCBibGspKSk7CisJCWlmICghbikgeworCQkJY29tX2VycigiY2xvbmVfZmlsZSIsIDAsCisJCQkJXygiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSAiCisJCQkJICAiYmxvY2sgcmVjb3JkIGZvciAlbGx1IiksIGJsayk7CisJCQlyZXR2YWwgPSAwOyAvKiBPSyB0byBzdHVtYmxlIG9uLi4uICovCisJCQlnb3RvIGVycm91dDsKKwkJfQorCQlkYyA9IChzdHJ1Y3QgZHVwX2NsdXN0ZXIgKikgZG5vZGVfZ2V0KG4pOworCQlmb3IgKGlub19lbCA9IGRjLT5pbm9kZV9saXN0OyBpbm9fZWw7IGlub19lbCA9IGlub19lbC0+bmV4dCkgeworCQkJaWYgKGlub19lbC0+aW5vZGUgPT0gaW5vKQorCQkJCWNvbnRpbnVlOworCQkJbiA9IGRpY3RfbG9va3VwKCZpbm9fZGljdCwgSU5UX1RPX1ZPSURQVFIoaW5vX2VsLT5pbm9kZSkpOworCQkJaWYgKCFuKSB7CisJCQkJY29tX2VycigiY2xvbmVfZmlsZSIsIDAsCisJCQkJCV8oImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgIgorCQkJCQkgICJpbm9kZSByZWNvcmQgZm9yICV1IiksCisJCQkJCWlub19lbC0+aW5vZGUpOworCQkJCXJldHZhbCA9IDA7IC8qIE9LIHRvIHN0dW1ibGUgb24uLi4gKi8KKwkJCQlnb3RvIGVycm91dDsKKwkJCX0KKwkJCWRpID0gKHN0cnVjdCBkdXBfaW5vZGUgKikgZG5vZGVfZ2V0KG4pOworCQkJaWYgKGV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgJmRpLT5pbm9kZSkgPT0gYmxrKSB7CisJCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrX3NldChmcywgJmRpLT5pbm9kZSwKKwkJCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCAmZHAtPmlub2RlKSk7CisJCQkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgaW5vX2VsLT5pbm9kZSwKKwkJCQkJICAgJmRpLT5pbm9kZSwgImNsb25lIGZpbGUgRUEiKTsKKwkJCQlkZWNyZW1lbnRfYmFkY291bnQoY3R4LCBibGssIGRjKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR2YWwgPSAwOworZXJyb3V0OgorCWV4dDJmc19mcmVlX21lbSgmY3MuYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogVGhpcyByb3V0aW5lIHJldHVybnMgMSBpZiBhIGJsb2NrIG92ZXJsYXBzIHdpdGggb25lIG9mIHRoZSBzdXBlcmJsb2NrcywKKyAqIGdyb3VwIGRlc2NyaXB0b3JzLCBpbm9kZSBiaXRtYXBzLCBvciBibG9jayBiaXRtYXBzLgorICovCitzdGF0aWMgaW50IGNoZWNrX2lmX2ZzX2Jsb2NrKGUyZnNja190IGN0eCwgYmxrNjRfdCB0ZXN0X2Jsb2NrKQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlibGs2NF90CWZpcnN0X2Jsb2NrOworCWRncnBfdAlpOworCisJZmlyc3RfYmxvY2sgPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCisJCS8qIENoZWNrIHN1cGVyYmxvY2tzL2Jsb2NrIGdyb3VwIGRlc2NyaXB0b3JzICovCisJCWlmIChleHQyZnNfYmdfaGFzX3N1cGVyKGZzLCBpKSkgeworCQkJaWYgKHRlc3RfYmxvY2sgPj0gZmlyc3RfYmxvY2sgJiYKKwkJCSAgICAodGVzdF9ibG9jayA8PSBmaXJzdF9ibG9jayArIGZzLT5kZXNjX2Jsb2NrcykpCisJCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKiBDaGVjayB0aGUgaW5vZGUgdGFibGUgKi8KKwkJaWYgKChleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSkgJiYKKwkJICAgICh0ZXN0X2Jsb2NrID49IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpKSAmJgorCQkgICAgKHRlc3RfYmxvY2sgPCAoZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkgKworCQkJCSAgIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKSkpCisJCQlyZXR1cm4gMTsKKworCQkvKiBDaGVjayB0aGUgYml0bWFwIGJsb2NrcyAqLworCQlpZiAoKHRlc3RfYmxvY2sgPT0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKSB8fAorCQkgICAgKHRlc3RfYmxvY2sgPT0gZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpKSkKKwkJCXJldHVybiAxOworCisJCWZpcnN0X2Jsb2NrICs9IGZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIDEgaWYgYSBjbHVzdGVyIG92ZXJsYXBzIHdpdGggb25lIG9mIHRoZSBzdXBlcmJsb2NrcywKKyAqIGdyb3VwIGRlc2NyaXB0b3JzLCBpbm9kZSBiaXRtYXBzLCBvciBibG9jayBiaXRtYXBzLgorICovCitzdGF0aWMgaW50IGNoZWNrX2lmX2ZzX2NsdXN0ZXIoZTJmc2NrX3QgY3R4LCBibGs2NF90IGNsdXN0ZXIpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWJsazY0X3QJZmlyc3RfYmxvY2s7CisJZGdycF90CWk7CisKKwlmaXJzdF9ibG9jayA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisKKwkJLyogQ2hlY2sgc3VwZXJibG9ja3MvYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgKi8KKwkJaWYgKGV4dDJmc19iZ19oYXNfc3VwZXIoZnMsIGkpKSB7CisJCQlpZiAoY2x1c3RlciA+PSBFWFQyRlNfQjJDKGZzLCBmaXJzdF9ibG9jaykgJiYKKwkJCSAgICAoY2x1c3RlciA8PSBFWFQyRlNfQjJDKGZzLCBmaXJzdF9ibG9jayArCisJCQkJCQkgICBmcy0+ZGVzY19ibG9ja3MpKSkKKwkJCQlyZXR1cm4gMTsKKwkJfQorCisJCS8qIENoZWNrIHRoZSBpbm9kZSB0YWJsZSAqLworCQlpZiAoKGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpKSAmJgorCQkgICAgKGNsdXN0ZXIgPj0gRVhUMkZTX0IyQyhmcywKKwkJCQkJICAgZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkpKSAmJgorCQkgICAgKGNsdXN0ZXIgPD0gRVhUMkZTX0IyQyhmcywKKwkJCQkJICAgZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkgKworCQkJCQkgICBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCAtIDEpKSkKKwkJCXJldHVybiAxOworCisJCS8qIENoZWNrIHRoZSBiaXRtYXAgYmxvY2tzICovCisJCWlmICgoY2x1c3RlciA9PSBFWFQyRlNfQjJDKGZzLAorCQkJCQkgICBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgaSkpKSB8fAorCQkgICAgKGNsdXN0ZXIgPT0gRVhUMkZTX0IyQyhmcywKKwkJCQkJICAgZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpKSkpCisJCQlyZXR1cm4gMTsKKworCQlmaXJzdF9ibG9jayArPSBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9lMmZzY2svcGFzczIuYyBiL2UyZnNjay9wYXNzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhY2RkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svcGFzczIuYwpAQCAtMCwwICsxLDE1MDEgQEAKKy8qCisgKiBwYXNzMi5jIC0tLSBjaGVjayBkaXJlY3Rvcnkgc3RydWN0dXJlCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICoKKyAqIFBhc3MgMiBvZiBlMmZzY2sgaXRlcmF0ZXMgdGhyb3VnaCBhbGwgYWN0aXZlIGRpcmVjdG9yeSBpbm9kZXMsIGFuZAorICogYXBwbGllcyB0byBmb2xsb3dpbmcgdGVzdHMgdG8gZWFjaCBkaXJlY3RvcnkgZW50cnkgaW4gdGhlIGRpcmVjdG9yeQorICogYmxvY2tzIGluIHRoZSBpbm9kZXM6CisgKgorICoJLSBUaGUgbGVuZ3RoIG9mIHRoZSBkaXJlY3RvcnkgZW50cnkgKHJlY19sZW4pIHNob3VsZCBiZSBhdAorICogCQlsZWFzdCA4IGJ5dGVzLCBhbmQgbm8gbW9yZSB0aGFuIHRoZSByZW1haW5pbmcgc3BhY2UKKyAqIAkJbGVmdCBpbiB0aGUgZGlyZWN0b3J5IGJsb2NrLgorICogCS0gVGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBpbiB0aGUgZGlyZWN0b3J5IGVudHJ5IChuYW1lX2xlbikKKyAqIAkJc2hvdWxkIGJlIGxlc3MgdGhhbiAocmVjX2xlbiAtIDgpLgorICoJLSBUaGUgaW5vZGUgbnVtYmVyIGluIHRoZSBkaXJlY3RvcnkgZW50cnkgc2hvdWxkIGJlIHdpdGhpbgorICogCQlsZWdhbCBib3VuZHMuCisgKiAJLSBUaGUgaW5vZGUgbnVtYmVyIHNob3VsZCByZWZlciB0byBhIGluLXVzZSBpbm9kZS4KKyAqCS0gVGhlIGZpcnN0IGVudHJ5IHNob3VsZCBiZSAnLicsIGFuZCBpdHMgaW5vZGUgc2hvdWxkIGJlCisgKiAJCXRoZSBpbm9kZSBvZiB0aGUgZGlyZWN0b3J5LgorICogCS0gVGhlIHNlY29uZCBlbnRyeSBzaG91bGQgYmUgJy4uJy4KKyAqCisgKiBUbyBtaW5pbWl6ZSBkaXNrIHNlZWsgdGltZSwgdGhlIGRpcmVjdG9yeSBibG9ja3MgYXJlIHByb2Nlc3NlZCBpbgorICogc29ydGVkIG9yZGVyIG9mIGJsb2NrIG51bWJlcnMuCisgKgorICogUGFzcyAyIGFsc28gY29sbGVjdHMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKyAqIAktIFRoZSBpbm9kZSBudW1iZXJzIG9mIHRoZSBzdWJkaXJlY3RvcmllcyBmb3IgZWFjaCBkaXJlY3RvcnkuCisgKgorICogUGFzcyAyIHJlbGllcyBvbiB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGZyb20gcHJldmlvdXMgcGFzc2VzOgorICogCS0gVGhlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiBjb2xsZWN0ZWQgaW4gcGFzcyAxLgorICogCS0gVGhlIGlub2RlX3VzZWRfbWFwIGJpdG1hcAorICogCS0gVGhlIGlub2RlX2JhZF9tYXAgYml0bWFwCisgKiAJLSBUaGUgaW5vZGVfZGlyX21hcCBiaXRtYXAKKyAqCisgKiBQYXNzIDIgZnJlZXMgdGhlIGZvbGxvd2luZyBkYXRhIHN0cnVjdHVyZXMKKyAqIAktIFRoZSBpbm9kZV9iYWRfbWFwIGJpdG1hcAorICogCS0gVGhlIGlub2RlX3JlZ19tYXAgYml0bWFwCisgKi8KKworI2RlZmluZSBfR05VX1NPVVJDRSAxIC8qIGdldCBzdHJubGVuKCkgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImUyZnNjay5oIgorI2luY2x1ZGUgInByb2JsZW0uaCIKKyNpbmNsdWRlICJkaWN0LmgiCisKKyNpZmRlZiBOT19JTkxJTkVfRlVOQ1MKKyNkZWZpbmUgX0lOTElORV8KKyNlbHNlCisjZGVmaW5lIF9JTkxJTkVfIGlubGluZQorI2VuZGlmCisKKy8qICNkZWZpbmUgRFhfREVCVUcgKi8KKworLyoKKyAqIEtlZXBzIHRyYWNrIG9mIGhvdyBtYW55IHRpbWVzIGFuIGlub2RlIGlzIHJlZmVyZW5jZWQuCisgKi8KK3N0YXRpYyB2b2lkIGRlYWxsb2NhdGVfaW5vZGUoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubywgY2hhciogYmxvY2tfYnVmKTsKK3N0YXRpYyBpbnQgY2hlY2tfZGlyX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgc3RydWN0IGV4dDJfZGJfZW50cnkyICpkaXJfYmxvY2tzX2luZm8sCisJCQkgICB2b2lkICpwcml2X2RhdGEpOworc3RhdGljIGludCBhbGxvY2F0ZV9kaXJfYmxvY2soZTJmc2NrX3QgY3R4LAorCQkJICAgICAgc3RydWN0IGV4dDJfZGJfZW50cnkyICpkaXJfYmxvY2tzX2luZm8sCisJCQkgICAgICBjaGFyICpidWYsIHN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHgpOworc3RhdGljIHZvaWQgY2xlYXJfaHRyZWUoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubyk7CitzdGF0aWMgaW50IGh0cmVlX2RlcHRoKHN0cnVjdCBkeF9kaXJfaW5mbyAqZHhfZGlyLAorCQkgICAgICAgc3RydWN0IGR4X2RpcmJsb2NrX2luZm8gKmR4X2RiKTsKK3N0YXRpYyBFWFQyX1FTT1JUX1RZUEUgc3BlY2lhbF9kaXJfYmxvY2tfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOworCitzdHJ1Y3QgY2hlY2tfZGlyX3N0cnVjdCB7CisJY2hhciAqYnVmOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwlpbnQJY291bnQsIG1heDsKKwllMmZzY2tfdCBjdHg7Cit9OworCit2b2lkIGUyZnNja19wYXNzMihlMmZzY2tfdCBjdHgpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiID0gY3R4LT5mcy0+c3VwZXI7CisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCWV4dDJfZmlsc3lzIAkJZnMgPSBjdHgtPmZzOworCWNoYXIJCQkqYnVmOworI2lmZGVmIFJFU09VUkNFX1RSQUNLCisJc3RydWN0IHJlc291cmNlX3RyYWNrCXJ0cmFjazsKKyNlbmRpZgorCXN0cnVjdCBjaGVja19kaXJfc3RydWN0IGNkOworCXN0cnVjdCBkeF9kaXJfaW5mbwkqZHhfZGlyOworCXN0cnVjdCBkeF9kaXJibG9ja19pbmZvCSpkeF9kYiwgKmR4X3BhcmVudDsKKwl1bnNpZ25lZCBpbnQJCXNhdmVfdHlwZTsKKwlpbnQJCQliOworCWludAkJCWksIGRlcHRoOworCXByb2JsZW1fdAkJY29kZTsKKwlpbnQJCQliYWRfZGlyOworCisJaW5pdF9yZXNvdXJjZV90cmFjaygmcnRyYWNrLCBjdHgtPmZzLT5pbyk7CisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZjZC5wY3R4KTsKKworI2lmZGVmIE1UUkFDRQorCW10cmFjZV9wcmludCgiUGFzcyAyIik7CisjZW5kaWYKKworCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pKQorCQlmaXhfcHJvYmxlbShjdHgsIFBSXzJfUEFTU19IRUFERVIsICZjZC5wY3R4KTsKKworCWUyZnNja19zZXR1cF90ZGJfaWNvdW50KGN0eCwgRVhUMl9JQ09VTlRfT1BUX0lOQ1JFTUVOVCwKKwkJCQkmY3R4LT5pbm9kZV9jb3VudCk7CisJaWYgKGN0eC0+aW5vZGVfY291bnQpCisJCWNkLnBjdHguZXJyY29kZSA9IDA7CisJZWxzZSB7CisJCWUyZnNja19zZXRfYml0bWFwX3R5cGUoZnMsIEVYVDJGU19CTUFQNjRfUkJUUkVFLAorCQkJCSAgICAgICAiaW5vZGVfY291bnQiLCAmc2F2ZV90eXBlKTsKKwkJY2QucGN0eC5lcnJjb2RlID0gZXh0MmZzX2NyZWF0ZV9pY291bnQyKGZzLAorCQkJCQkJRVhUMl9JQ09VTlRfT1BUX0lOQ1JFTUVOVCwKKwkJCQkJCTAsIGN0eC0+aW5vZGVfbGlua19pbmZvLAorCQkJCQkJJmN0eC0+aW5vZGVfY291bnQpOworCQlmcy0+ZGVmYXVsdF9iaXRtYXBfdHlwZSA9IHNhdmVfdHlwZTsKKwl9CisJaWYgKGNkLnBjdHguZXJyY29kZSkgeworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzJfQUxMT0NBVEVfSUNPVU5ULCAmY2QucGN0eCk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCXJldHVybjsKKwl9CisJYnVmID0gKGNoYXIgKikgZTJmc2NrX2FsbG9jYXRlX21lbW9yeShjdHgsIDIqZnMtPmJsb2Nrc2l6ZSwKKwkJCQkJICAgICAgImRpcmVjdG9yeSBzY2FuIGJ1ZmZlciIpOworCisJLyoKKwkgKiBTZXQgdXAgdGhlIHBhcmVudCBwb2ludGVyIGZvciB0aGUgcm9vdCBkaXJlY3RvcnksIGlmCisJICogcHJlc2VudC4gIChJZiB0aGUgcm9vdCBkaXJlY3RvcnkgaXMgbm90IHByZXNlbnQsIHdlIHdpbGwKKwkgKiBjcmVhdGUgaXQgaW4gcGFzcyAzLikKKwkgKi8KKwkodm9pZCkgZTJmc2NrX2Rpcl9pbmZvX3NldF9wYXJlbnQoY3R4LCBFWFQyX1JPT1RfSU5PLCBFWFQyX1JPT1RfSU5PKTsKKworCWNkLmJ1ZiA9IGJ1ZjsKKwljZC5jdHggPSBjdHg7CisJY2QuY291bnQgPSAxOworCWNkLm1heCA9IGV4dDJmc19kYmxpc3RfY291bnQyKGZzLT5kYmxpc3QpOworCisJaWYgKGN0eC0+cHJvZ3Jlc3MpCisJCSh2b2lkKSAoY3R4LT5wcm9ncmVzcykoY3R4LCAyLCAwLCBjZC5tYXgpOworCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYKQorCQlleHQyZnNfZGJsaXN0X3NvcnQyKGZzLT5kYmxpc3QsIHNwZWNpYWxfZGlyX2Jsb2NrX2NtcCk7CisKKwljZC5wY3R4LmVycmNvZGUgPSBleHQyZnNfZGJsaXN0X2l0ZXJhdGUyKGZzLT5kYmxpc3QsIGNoZWNrX2Rpcl9ibG9jaywKKwkJCQkJCSAmY2QpOworCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0sgfHwgY3R4LT5mbGFncyAmIEUyRl9GTEFHX1JFU1RBUlQpCisJCXJldHVybjsKKworCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfUkVTVEFSVF9MQVRFUikgeworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX1JFU1RBUlQ7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY2QucGN0eC5lcnJjb2RlKSB7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMl9EQkxJU1RfSVRFUkFURSwgJmNkLnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCisjaWZkZWYgRU5BQkxFX0hUUkVFCisJZm9yIChpPTA7IChkeF9kaXIgPSBlMmZzY2tfZHhfZGlyX2luZm9faXRlcihjdHgsICZpKSkgIT0gMDspIHsKKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19TSUdOQUxfTUFTSykKKwkJCXJldHVybjsKKwkJaWYgKGR4X2Rpci0+bnVtYmxvY2tzID09IDApCisJCQljb250aW51ZTsKKwkJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwkJYmFkX2RpciA9IDA7CisJCXBjdHguZGlyID0gZHhfZGlyLT5pbm87CisJCWR4X2RiID0gZHhfZGlyLT5keF9ibG9jazsKKwkJaWYgKGR4X2RiLT5mbGFncyAmIERYX0ZMQUdfUkVGRVJFTkNFRCkKKwkJCWR4X2RiLT5mbGFncyB8PSBEWF9GTEFHX0RVUF9SRUY7CisJCWVsc2UKKwkJCWR4X2RiLT5mbGFncyB8PSBEWF9GTEFHX1JFRkVSRU5DRUQ7CisJCS8qCisJCSAqIEZpbmQgYWxsIG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBsZWFmIGJsb2NrcywgYW5kCisJCSAqIHVwZGF0ZSB0aGVpciBwYXJlbnQncyBtaW4gYW5kIG1heCBoYXNoIHZhbHVlcworCQkgKi8KKwkJZm9yIChiPTAsIGR4X2RiID0gZHhfZGlyLT5keF9ibG9jazsKKwkJICAgICBiIDwgZHhfZGlyLT5udW1ibG9ja3M7CisJCSAgICAgYisrLCBkeF9kYisrKSB7CisJCQlpZiAoKGR4X2RiLT50eXBlICE9IERYX0RJUkJMT0NLX0xFQUYpIHx8CisJCQkgICAgIShkeF9kYi0+ZmxhZ3MgJiAoRFhfRkxBR19GSVJTVCB8IERYX0ZMQUdfTEFTVCkpKQorCQkJCWNvbnRpbnVlOworCQkJZHhfcGFyZW50ID0gJmR4X2Rpci0+ZHhfYmxvY2tbZHhfZGItPnBhcmVudF07CisJCQkvKgorCQkJICogWFhYIE1ha2Ugc3VyZSBkeF9wYXJlbnQtPm1pbl9oYXNoID4gZHhfZGItPm1pbl9oYXNoCisJCQkgKi8KKwkJCWlmIChkeF9kYi0+ZmxhZ3MgJiBEWF9GTEFHX0ZJUlNUKQorCQkJCWR4X3BhcmVudC0+bWluX2hhc2ggPSBkeF9kYi0+bWluX2hhc2g7CisJCQkvKgorCQkJICogWFhYIE1ha2Ugc3VyZSBkeF9wYXJlbnQtPm1heF9oYXNoIDwgZHhfZGItPm1heF9oYXNoCisJCQkgKi8KKwkJCWlmIChkeF9kYi0+ZmxhZ3MgJiBEWF9GTEFHX0xBU1QpCisJCQkJZHhfcGFyZW50LT5tYXhfaGFzaCA9IGR4X2RiLT5tYXhfaGFzaDsKKwkJfQorCisJCWZvciAoYj0wLCBkeF9kYiA9IGR4X2Rpci0+ZHhfYmxvY2s7CisJCSAgICAgYiA8IGR4X2Rpci0+bnVtYmxvY2tzOworCQkgICAgIGIrKywgZHhfZGIrKykgeworCQkJcGN0eC5ibGtjb3VudCA9IGI7CisJCQlwY3R4Lmdyb3VwID0gZHhfZGItPnBhcmVudDsKKwkJCWNvZGUgPSAwOworCQkJaWYgKCEoZHhfZGItPmZsYWdzICYgRFhfRkxBR19GSVJTVCkgJiYKKwkJCSAgICAoZHhfZGItPm1pbl9oYXNoIDwgZHhfZGItPm5vZGVfbWluX2hhc2gpKSB7CisJCQkJcGN0eC5ibGsgPSBkeF9kYi0+bWluX2hhc2g7CisJCQkJcGN0eC5ibGsyID0gZHhfZGItPm5vZGVfbWluX2hhc2g7CisJCQkJY29kZSA9IFBSXzJfSFRSRUVfTUlOX0hBU0g7CisJCQkJZml4X3Byb2JsZW0oY3R4LCBjb2RlLCAmcGN0eCk7CisJCQkJYmFkX2RpcisrOworCQkJfQorCQkJaWYgKGR4X2RiLT50eXBlID09IERYX0RJUkJMT0NLX0xFQUYpIHsKKwkJCQlkZXB0aCA9IGh0cmVlX2RlcHRoKGR4X2RpciwgZHhfZGIpOworCQkJCWlmIChkZXB0aCAhPSBkeF9kaXItPmRlcHRoKSB7CisJCQkJCXBjdHgubnVtID0gZHhfZGlyLT5kZXB0aDsKKwkJCQkJY29kZSA9IFBSXzJfSFRSRUVfQkFEX0RFUFRIOworCQkJCQlmaXhfcHJvYmxlbShjdHgsIGNvZGUsICZwY3R4KTsKKwkJCQkJYmFkX2RpcisrOworCQkJCX0KKwkJCX0KKwkJCS8qCisJCQkgKiBUaGlzIHRlc3QgZG9lc24ndCBhcHBseSBmb3IgdGhlIHJvb3QgYmxvY2sKKwkJCSAqIGF0IGJsb2NrICMwCisJCQkgKi8KKwkJCWlmIChiICYmCisJCQkgICAgKGR4X2RiLT5tYXhfaGFzaCA+IGR4X2RiLT5ub2RlX21heF9oYXNoKSkgeworCQkJCXBjdHguYmxrID0gZHhfZGItPm1heF9oYXNoOworCQkJCXBjdHguYmxrMiA9IGR4X2RiLT5ub2RlX21heF9oYXNoOworCQkJCWNvZGUgPSBQUl8yX0hUUkVFX01BWF9IQVNIOworCQkJCWZpeF9wcm9ibGVtKGN0eCwgY29kZSwgJnBjdHgpOworCQkJCWJhZF9kaXIrKzsKKwkJCX0KKwkJCWlmICghKGR4X2RiLT5mbGFncyAmIERYX0ZMQUdfUkVGRVJFTkNFRCkpIHsKKwkJCQljb2RlID0gUFJfMl9IVFJFRV9OT1RSRUY7CisJCQkJZml4X3Byb2JsZW0oY3R4LCBjb2RlLCAmcGN0eCk7CisJCQkJYmFkX2RpcisrOworCQkJfSBlbHNlIGlmIChkeF9kYi0+ZmxhZ3MgJiBEWF9GTEFHX0RVUF9SRUYpIHsKKwkJCQljb2RlID0gUFJfMl9IVFJFRV9EVVBSRUY7CisJCQkJZml4X3Byb2JsZW0oY3R4LCBjb2RlLCAmcGN0eCk7CisJCQkJYmFkX2RpcisrOworCQkJfQorCQl9CisJCWlmIChiYWRfZGlyICYmIGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9IVFJFRV9DTEVBUiwgJnBjdHgpKSB7CisJCQljbGVhcl9odHJlZShjdHgsIGR4X2Rpci0+aW5vKTsKKwkJCWR4X2Rpci0+bnVtYmxvY2tzID0gMDsKKwkJfQorCX0KKwllMmZzY2tfZnJlZV9keF9kaXJfaW5mbyhjdHgpOworI2VuZGlmCisJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCWV4dDJmc19mcmVlX2RibGlzdChmcy0+ZGJsaXN0KTsKKworCWlmIChjdHgtPmlub2RlX2JhZF9tYXApIHsKKwkJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGN0eC0+aW5vZGVfYmFkX21hcCk7CisJCWN0eC0+aW5vZGVfYmFkX21hcCA9IDA7CisJfQorCWlmIChjdHgtPmlub2RlX3JlZ19tYXApIHsKKwkJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGN0eC0+aW5vZGVfcmVnX21hcCk7CisJCWN0eC0+aW5vZGVfcmVnX21hcCA9IDA7CisJfQorCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlpZiAoY3R4LT5sYXJnZV9maWxlcykgeworCQlpZiAoIShzYi0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJCSAgICAgIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRSkgJiYKKwkJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9GRUFUVVJFX0xBUkdFX0ZJTEVTLCAmcGN0eCkpIHsKKwkJCXNiLT5zX2ZlYXR1cmVfcm9fY29tcGF0IHw9CisJCQkJRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFOworCQkJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFk7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCX0KKwkJaWYgKHNiLT5zX3Jldl9sZXZlbCA9PSBFWFQyX0dPT0RfT0xEX1JFViAmJgorCQkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8xX0ZTX1JFVl9MRVZFTCwgJnBjdHgpKSB7CisJCQlleHQyZnNfdXBkYXRlX2R5bmFtaWNfcmV2KGZzKTsKKwkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJfQorCX0KKworCXByaW50X3Jlc291cmNlX3RyYWNrKGN0eCwgXygiUGFzcyAyIiksICZydHJhY2ssIGZzLT5pbyk7Cit9CisKKyNkZWZpbmUgTUFYX0RFUFRIIDMyMDAwCitzdGF0aWMgaW50IGh0cmVlX2RlcHRoKHN0cnVjdCBkeF9kaXJfaW5mbyAqZHhfZGlyLAorCQkgICAgICAgc3RydWN0IGR4X2RpcmJsb2NrX2luZm8gKmR4X2RiKQoreworCWludAlkZXB0aCA9IDA7CisKKwl3aGlsZSAoZHhfZGItPnR5cGUgIT0gRFhfRElSQkxPQ0tfUk9PVCAmJiBkZXB0aCA8IE1BWF9ERVBUSCkgeworCQlkeF9kYiA9ICZkeF9kaXItPmR4X2Jsb2NrW2R4X2RiLT5wYXJlbnRdOworCQlkZXB0aCsrOworCX0KKwlyZXR1cm4gZGVwdGg7Cit9CisKK3N0YXRpYyBpbnQgZGljdF9kZV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRlX2EsICpkZV9iOworCWludAlhX2xlbiwgYl9sZW47CisKKwlkZV9hID0gKGNvbnN0IHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSBhOworCWFfbGVuID0gZGVfYS0+bmFtZV9sZW4gJiAweEZGOworCWRlX2IgPSAoY29uc3Qgc3RydWN0IGV4dDJfZGlyX2VudHJ5ICopIGI7CisJYl9sZW4gPSBkZV9iLT5uYW1lX2xlbiAmIDB4RkY7CisKKwlpZiAoYV9sZW4gIT0gYl9sZW4pCisJCXJldHVybiAoYV9sZW4gLSBiX2xlbik7CisKKwlyZXR1cm4gc3RybmNtcChkZV9hLT5uYW1lLCBkZV9iLT5uYW1lLCBhX2xlbik7Cit9CisKKy8qCisgKiBUaGlzIGlzIHNwZWNpYWwgc29ydCBmdW5jdGlvbiB0aGF0IG1ha2VzIHN1cmUgdGhhdCBkaXJlY3RvcnkgYmxvY2tzCisgKiB3aXRoIGEgZGlyYmxvY2sgb2YgemVybyBhcmUgc29ydGVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QuCisgKiBUaGlzIGd1YXJhbnRlZXMgdGhhdCB0aGUgcm9vdCBub2RlIG9mIHRoZSBodHJlZSBkaXJlY3RvcmllcyBhcmUKKyAqIHByb2Nlc3NlZCBmaXJzdCwgc28gd2Uga25vdyB3aGF0IGhhc2ggdmVyc2lvbiB0byB1c2UuCisgKi8KK3N0YXRpYyBFWFQyX1FTT1JUX1RZUEUgc3BlY2lhbF9kaXJfYmxvY2tfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IGV4dDJfZGJfZW50cnkyICpkYl9hID0KKwkJKGNvbnN0IHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqKSBhOworCWNvbnN0IHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqZGJfYiA9CisJCShjb25zdCBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKikgYjsKKworCWlmIChkYl9hLT5ibG9ja2NudCAmJiAhZGJfYi0+YmxvY2tjbnQpCisJCXJldHVybiAxOworCisJaWYgKCFkYl9hLT5ibG9ja2NudCAmJiBkYl9iLT5ibG9ja2NudCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGRiX2EtPmJsayAhPSBkYl9iLT5ibGspCisJCXJldHVybiAoaW50KSAoZGJfYS0+YmxrIC0gZGJfYi0+YmxrKTsKKworCWlmIChkYl9hLT5pbm8gIT0gZGJfYi0+aW5vKQorCQlyZXR1cm4gKGludCkgKGRiX2EtPmlubyAtIGRiX2ItPmlubyk7CisKKwlyZXR1cm4gKGludCkgKGRiX2EtPmJsb2NrY250IC0gZGJfYi0+YmxvY2tjbnQpOworfQorCisKKy8qCisgKiBNYWtlIHN1cmUgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBkaXJlY3RvcnkgaXMgJy4nLCBhbmQgdGhhdCB0aGUKKyAqIGRpcmVjdG9yeSBlbnRyeSBpcyBzYW5lLgorICovCitzdGF0aWMgaW50IGNoZWNrX2RvdChlMmZzY2tfdCBjdHgsCisJCSAgICAgc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCSAgICAgZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHgpCit7CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpuZXh0ZGlyOworCXVuc2lnbmVkIGludAlyZWNfbGVuLCBuZXdfbGVuOworCWludAkJc3RhdHVzID0gMDsKKwlpbnQJCWNyZWF0ZWQgPSAwOworCXByb2JsZW1fdAlwcm9ibGVtID0gMDsKKworCWlmICghZGlyZW50LT5pbm9kZSkKKwkJcHJvYmxlbSA9IFBSXzJfTUlTU0lOR19ET1Q7CisJZWxzZSBpZiAoKChkaXJlbnQtPm5hbWVfbGVuICYgMHhGRikgIT0gMSkgfHwKKwkJIChkaXJlbnQtPm5hbWVbMF0gIT0gJy4nKSkKKwkJcHJvYmxlbSA9IFBSXzJfMVNUX05PVF9ET1Q7CisJZWxzZSBpZiAoZGlyZW50LT5uYW1lWzFdICE9ICdcMCcpCisJCXByb2JsZW0gPSBQUl8yX0RPVF9OVUxMX1RFUk07CisKKwkodm9pZCkgZXh0MmZzX2dldF9yZWNfbGVuKGN0eC0+ZnMsIGRpcmVudCwgJnJlY19sZW4pOworCWlmIChwcm9ibGVtKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIHByb2JsZW0sIHBjdHgpKSB7CisJCQlpZiAocmVjX2xlbiA8IDEyKQorCQkJCXJlY19sZW4gPSBkaXJlbnQtPnJlY19sZW4gPSAxMjsKKwkJCWRpcmVudC0+aW5vZGUgPSBpbm87CisJCQlkaXJlbnQtPm5hbWVfbGVuID0gMTsKKwkJCWRpcmVudC0+bmFtZVswXSA9ICcuJzsKKwkJCWRpcmVudC0+bmFtZVsxXSA9ICdcMCc7CisJCQlzdGF0dXMgPSAxOworCQkJY3JlYXRlZCA9IDE7CisJCX0KKwl9CisJaWYgKGRpcmVudC0+aW5vZGUgIT0gaW5vKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzJfQkFEX0lOT0RFX0RPVCwgcGN0eCkpIHsKKwkJCWRpcmVudC0+aW5vZGUgPSBpbm87CisJCQlzdGF0dXMgPSAxOworCQl9CisJfQorCWlmIChyZWNfbGVuID4gMTIpIHsKKwkJbmV3X2xlbiA9IHJlY19sZW4gLSAxMjsKKwkJaWYgKG5ld19sZW4gPiAxMikgeworCQkJaWYgKGNyZWF0ZWQgfHwKKwkJCSAgICBmaXhfcHJvYmxlbShjdHgsIFBSXzJfU1BMSVRfRE9ULCBwY3R4KSkgeworCQkJCW5leHRkaXIgPSAoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICopCisJCQkJCSgoY2hhciAqKSBkaXJlbnQgKyAxMik7CisJCQkJZGlyZW50LT5yZWNfbGVuID0gMTI7CisJCQkJKHZvaWQpIGV4dDJmc19zZXRfcmVjX2xlbihjdHgtPmZzLCBuZXdfbGVuLAorCQkJCQkJCSAgbmV4dGRpcik7CisJCQkJbmV4dGRpci0+aW5vZGUgPSAwOworCQkJCW5leHRkaXItPm5hbWVfbGVuID0gMDsKKwkJCQlzdGF0dXMgPSAxOworCQkJfQorCQl9CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBNYWtlIHN1cmUgdGhlIHNlY29uZCBlbnRyeSBpbiB0aGUgZGlyZWN0b3J5IGlzICcuLicsIGFuZCB0aGF0IHRoZQorICogZGlyZWN0b3J5IGVudHJ5IGlzIHNhbmUuICBXZSBkbyBub3QgY2hlY2sgdGhlIGlub2RlIG51bWJlciBvZiAnLi4nCisgKiBoZXJlOyB0aGlzIGdldHMgZG9uZSBpbiBwYXNzIDMuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfZG90ZG90KGUyZnNja190IGN0eCwKKwkJCXN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkJZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHgpCit7CisJcHJvYmxlbV90CXByb2JsZW0gPSAwOworCXVuc2lnbmVkIGludAlyZWNfbGVuOworCisJaWYgKCFkaXJlbnQtPmlub2RlKQorCQlwcm9ibGVtID0gUFJfMl9NSVNTSU5HX0RPVF9ET1Q7CisJZWxzZSBpZiAoKChkaXJlbnQtPm5hbWVfbGVuICYgMHhGRikgIT0gMikgfHwKKwkJIChkaXJlbnQtPm5hbWVbMF0gIT0gJy4nKSB8fAorCQkgKGRpcmVudC0+bmFtZVsxXSAhPSAnLicpKQorCQlwcm9ibGVtID0gUFJfMl8yTkRfTk9UX0RPVF9ET1Q7CisJZWxzZSBpZiAoZGlyZW50LT5uYW1lWzJdICE9ICdcMCcpCisJCXByb2JsZW0gPSBQUl8yX0RPVF9ET1RfTlVMTF9URVJNOworCisJKHZvaWQpIGV4dDJmc19nZXRfcmVjX2xlbihjdHgtPmZzLCBkaXJlbnQsICZyZWNfbGVuKTsKKwlpZiAocHJvYmxlbSkgeworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBwcm9ibGVtLCBwY3R4KSkgeworCQkJaWYgKHJlY19sZW4gPCAxMikKKwkJCQlkaXJlbnQtPnJlY19sZW4gPSAxMjsKKwkJCS8qCisJCQkgKiBOb3RlOiB3ZSBkb24ndCBoYXZlIHRoZSBwYXJlbnQgaW5vZGUganVzdAorCQkJICogeWV0LCBzbyB3ZSB3aWxsIGZpbGwgaXQgaW4gd2l0aCB0aGUgcm9vdAorCQkJICogaW5vZGUuICBUaGlzIHdpbGwgZ2V0IGZpeGVkIGluIHBhc3MgMy4KKwkJCSAqLworCQkJZGlyZW50LT5pbm9kZSA9IEVYVDJfUk9PVF9JTk87CisJCQlkaXJlbnQtPm5hbWVfbGVuID0gMjsKKwkJCWRpcmVudC0+bmFtZVswXSA9ICcuJzsKKwkJCWRpcmVudC0+bmFtZVsxXSA9ICcuJzsKKwkJCWRpcmVudC0+bmFtZVsyXSA9ICdcMCc7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJaWYgKGUyZnNja19kaXJfaW5mb19zZXRfZG90ZG90KGN0eCwgaW5vLCBkaXJlbnQtPmlub2RlKSkgeworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzJfTk9fRElSSU5GTywgcGN0eCk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayB0byBtYWtlIHN1cmUgYSBkaXJlY3RvcnkgZW50cnkgZG9lc24ndCBjb250YWluIGFueSBpbGxlZ2FsCisgKiBjaGFyYWN0ZXJzLgorICovCitzdGF0aWMgaW50IGNoZWNrX25hbWUoZTJmc2NrX3QgY3R4LAorCQkgICAgICBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJICAgICAgZXh0Ml9pbm9fdCBkaXJfaW5vIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCkKK3sKKwlpbnQJaTsKKwlpbnQJZml4dXAgPSAtMTsKKwlpbnQJcmV0ID0gMDsKKworCWZvciAoIGkgPSAwOyBpIDwgKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKTsgaSsrKSB7CisJCWlmIChkaXJlbnQtPm5hbWVbaV0gPT0gJy8nIHx8IGRpcmVudC0+bmFtZVtpXSA9PSAnXDAnKSB7CisJCQlpZiAoZml4dXAgPCAwKSB7CisJCQkJZml4dXAgPSBmaXhfcHJvYmxlbShjdHgsIFBSXzJfQkFEX05BTUUsIHBjdHgpOworCQkJfQorCQkJaWYgKGZpeHVwKSB7CisJCQkJZGlyZW50LT5uYW1lW2ldID0gJy4nOworCQkJCXJldCA9IDE7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENoZWNrIHRoZSBkaXJlY3RvcnkgZmlsZXR5cGUgKGlmIHByZXNlbnQpCisgKi8KK3N0YXRpYyBfSU5MSU5FXyBpbnQgY2hlY2tfZmlsZXR5cGUoZTJmc2NrX3QgY3R4LAorCQkJCSAgIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkJCSAgIGV4dDJfaW5vX3QgZGlyX2lubyBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJICAgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCkKK3sKKwlpbnQJZmlsZXR5cGUgPSBkaXJlbnQtPm5hbWVfbGVuID4+IDg7CisJaW50CXNob3VsZF9iZSA9IEVYVDJfRlRfVU5LTk9XTjsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKworCWlmICghKGN0eC0+ZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCSAgICAgIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRSkpIHsKKwkJaWYgKGZpbGV0eXBlID09IDAgfHwKKwkJICAgICFmaXhfcHJvYmxlbShjdHgsIFBSXzJfQ0xFQVJfRklMRVRZUEUsIHBjdHgpKQorCQkJcmV0dXJuIDA7CisJCWRpcmVudC0+bmFtZV9sZW4gPSBkaXJlbnQtPm5hbWVfbGVuICYgMHhGRjsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9kaXJfbWFwLCBkaXJlbnQtPmlub2RlKSkgeworCQlzaG91bGRfYmUgPSBFWFQyX0ZUX0RJUjsKKwl9IGVsc2UgaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9yZWdfbWFwLAorCQkJCQkgICAgZGlyZW50LT5pbm9kZSkpIHsKKwkJc2hvdWxkX2JlID0gRVhUMl9GVF9SRUdfRklMRTsKKwl9IGVsc2UgaWYgKGN0eC0+aW5vZGVfYmFkX21hcCAmJgorCQkgICBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfYmFkX21hcCwKKwkJCQkJICAgIGRpcmVudC0+aW5vZGUpKQorCQlzaG91bGRfYmUgPSAwOworCWVsc2UgeworCQllMmZzY2tfcmVhZF9pbm9kZShjdHgsIGRpcmVudC0+aW5vZGUsICZpbm9kZSwKKwkJCQkgICJjaGVja19maWxldHlwZSIpOworCQlzaG91bGRfYmUgPSBleHQyX2ZpbGVfdHlwZShpbm9kZS5pX21vZGUpOworCX0KKwlpZiAoZmlsZXR5cGUgPT0gc2hvdWxkX2JlKQorCQlyZXR1cm4gMDsKKwlwY3R4LT5udW0gPSBzaG91bGRfYmU7CisKKwlpZiAoZml4X3Byb2JsZW0oY3R4LCBmaWxldHlwZSA/IFBSXzJfQkFEX0ZJTEVUWVBFIDogUFJfMl9TRVRfRklMRVRZUEUsCisJCQlwY3R4KSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWRpcmVudC0+bmFtZV9sZW4gPSAoZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpIHwgc2hvdWxkX2JlIDw8IDg7CisJcmV0dXJuIDE7Cit9CisKKyNpZmRlZiBFTkFCTEVfSFRSRUUKK3N0YXRpYyB2b2lkIHBhcnNlX2ludF9ub2RlKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgc3RydWN0IGV4dDJfZGJfZW50cnkyICpkYiwKKwkJCSAgIHN0cnVjdCBjaGVja19kaXJfc3RydWN0ICpjZCwKKwkJCSAgIHN0cnVjdCBkeF9kaXJfaW5mbwkqZHhfZGlyLAorCQkJICAgY2hhciAqYmxvY2tfYnVmKQoreworCXN0cnVjdCAJCWV4dDJfZHhfcm9vdF9pbmZvICAqcm9vdDsKKwlzdHJ1Y3QgCQlleHQyX2R4X2VudHJ5ICplbnQ7CisJc3RydWN0CQlleHQyX2R4X2NvdW50bGltaXQgKmxpbWl0OworCXN0cnVjdCBkeF9kaXJibG9ja19pbmZvCSpkeF9kYjsKKwlpbnQJCWksIGV4cGVjdF9saW1pdCwgY291bnQ7CisJYmxrX3QJCWJsazsKKwlleHQyX2Rpcmhhc2hfdAltaW5faGFzaCA9IDB4ZmZmZmZmZmY7CisJZXh0Ml9kaXJoYXNoX3QJbWF4X2hhc2ggPSAwOworCWV4dDJfZGlyaGFzaF90CWhhc2ggPSAwLCBwcmV2X2hhc2g7CisKKwlpZiAoZGItPmJsb2NrY250ID09IDApIHsKKwkJcm9vdCA9IChzdHJ1Y3QgZXh0Ml9keF9yb290X2luZm8gKikgKGJsb2NrX2J1ZiArIDI0KTsKKworI2lmZGVmIERYX0RFQlVHCisJCXByaW50ZigiUm9vdCBub2RlIGR1bXA6XG4iKTsKKwkJcHJpbnRmKCJcdCBSZXNlcnZlZCB6ZXJvOiAldVxuIiwgcm9vdC0+cmVzZXJ2ZWRfemVybyk7CisJCXByaW50ZigiXHQgSGFzaCBWZXJzaW9uOiAlZFxuIiwgcm9vdC0+aGFzaF92ZXJzaW9uKTsKKwkJcHJpbnRmKCJcdCBJbmZvIGxlbmd0aDogJWRcbiIsIHJvb3QtPmluZm9fbGVuZ3RoKTsKKwkJcHJpbnRmKCJcdCBJbmRpcmVjdCBsZXZlbHM6ICVkXG4iLCByb290LT5pbmRpcmVjdF9sZXZlbHMpOworCQlwcmludGYoIlx0IEZsYWdzOiAlZFxuIiwgcm9vdC0+dW51c2VkX2ZsYWdzKTsKKyNlbmRpZgorCisJCWVudCA9IChzdHJ1Y3QgZXh0Ml9keF9lbnRyeSAqKSAoYmxvY2tfYnVmICsgMjQgKyByb290LT5pbmZvX2xlbmd0aCk7CisJfSBlbHNlIHsKKwkJZW50ID0gKHN0cnVjdCBleHQyX2R4X2VudHJ5ICopIChibG9ja19idWYrOCk7CisJfQorCWxpbWl0ID0gKHN0cnVjdCBleHQyX2R4X2NvdW50bGltaXQgKikgZW50OworCisjaWZkZWYgRFhfREVCVUcKKwlwcmludGYoIk51bWJlciBvZiBlbnRyaWVzIChjb3VudCk6ICVkXG4iLAorCSAgICAgICBleHQyZnNfbGUxNl90b19jcHUobGltaXQtPmNvdW50KSk7CisJcHJpbnRmKCJOdW1iZXIgb2YgZW50cmllcyAobGltaXQpOiAlZFxuIiwKKwkgICAgICAgZXh0MmZzX2xlMTZfdG9fY3B1KGxpbWl0LT5saW1pdCkpOworI2VuZGlmCisKKwljb3VudCA9IGV4dDJmc19sZTE2X3RvX2NwdShsaW1pdC0+Y291bnQpOworCWV4cGVjdF9saW1pdCA9IChmcy0+YmxvY2tzaXplIC0gKChjaGFyICopIGVudCAtIGJsb2NrX2J1ZikpIC8KKwkJc2l6ZW9mKHN0cnVjdCBleHQyX2R4X2VudHJ5KTsKKwlpZiAoZXh0MmZzX2xlMTZfdG9fY3B1KGxpbWl0LT5saW1pdCkgIT0gZXhwZWN0X2xpbWl0KSB7CisJCWNkLT5wY3R4Lm51bSA9IGV4dDJmc19sZTE2X3RvX2NwdShsaW1pdC0+bGltaXQpOworCQlpZiAoZml4X3Byb2JsZW0oY2QtPmN0eCwgUFJfMl9IVFJFRV9CQURfTElNSVQsICZjZC0+cGN0eCkpCisJCQlnb3RvIGNsZWFyX2FuZF9leGl0OworCX0KKwlpZiAoY291bnQgPiBleHBlY3RfbGltaXQpIHsKKwkJY2QtPnBjdHgubnVtID0gY291bnQ7CisJCWlmIChmaXhfcHJvYmxlbShjZC0+Y3R4LCBQUl8yX0hUUkVFX0JBRF9DT1VOVCwgJmNkLT5wY3R4KSkKKwkJCWdvdG8gY2xlYXJfYW5kX2V4aXQ7CisJCWNvdW50ID0gZXhwZWN0X2xpbWl0OworCX0KKworCWZvciAoaT0wOyBpIDwgY291bnQ7IGkrKykgeworCQlwcmV2X2hhc2ggPSBoYXNoOworCQloYXNoID0gaSA/IChleHQyZnNfbGUzMl90b19jcHUoZW50W2ldLmhhc2gpICYgfjEpIDogMDsKKyNpZmRlZiBEWF9ERUJVRworCQlwcmludGYoIkVudHJ5ICMlZDogSGFzaCAweCUwOHgsIGJsb2NrICV1XG4iLCBpLAorCQkgICAgICAgaGFzaCwgZXh0MmZzX2xlMzJfdG9fY3B1KGVudFtpXS5ibG9jaykpOworI2VuZGlmCisJCWJsayA9IGV4dDJmc19sZTMyX3RvX2NwdShlbnRbaV0uYmxvY2spICYgMHgwZmZmZmZmOworCQkvKiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIGJsb2NrIGlzIHZhbGlkICovCisJCWlmIChibGsgPj0gKGJsa190KSBkeF9kaXItPm51bWJsb2NrcykgeworCQkJY2QtPnBjdHguYmxrID0gYmxrOworCQkJaWYgKGZpeF9wcm9ibGVtKGNkLT5jdHgsIFBSXzJfSFRSRUVfQkFEQkxLLAorCQkJCQkmY2QtPnBjdHgpKQorCQkJCWdvdG8gY2xlYXJfYW5kX2V4aXQ7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoaGFzaCA8IHByZXZfaGFzaCAmJgorCQkgICAgZml4X3Byb2JsZW0oY2QtPmN0eCwgUFJfMl9IVFJFRV9IQVNIX09SREVSLCAmY2QtPnBjdHgpKQorCQkJZ290byBjbGVhcl9hbmRfZXhpdDsKKwkJZHhfZGIgPSAmZHhfZGlyLT5keF9ibG9ja1tibGtdOworCQlpZiAoZHhfZGItPmZsYWdzICYgRFhfRkxBR19SRUZFUkVOQ0VEKSB7CisJCQlkeF9kYi0+ZmxhZ3MgfD0gRFhfRkxBR19EVVBfUkVGOworCQl9IGVsc2UgeworCQkJZHhfZGItPmZsYWdzIHw9IERYX0ZMQUdfUkVGRVJFTkNFRDsKKwkJCWR4X2RiLT5wYXJlbnQgPSBkYi0+YmxvY2tjbnQ7CisJCX0KKwkJaWYgKGhhc2ggPCBtaW5faGFzaCkKKwkJCW1pbl9oYXNoID0gaGFzaDsKKwkJaWYgKGhhc2ggPiBtYXhfaGFzaCkKKwkJCW1heF9oYXNoID0gaGFzaDsKKwkJZHhfZGItPm5vZGVfbWluX2hhc2ggPSBoYXNoOworCQlpZiAoKGkrMSkgPCBjb3VudCkKKwkJCWR4X2RiLT5ub2RlX21heF9oYXNoID0KKwkJCSAgZXh0MmZzX2xlMzJfdG9fY3B1KGVudFtpKzFdLmhhc2gpICYgfjE7CisJCWVsc2UgeworCQkJZHhfZGItPm5vZGVfbWF4X2hhc2ggPSAweGZmZmZmZmZlOworCQkJZHhfZGItPmZsYWdzIHw9IERYX0ZMQUdfTEFTVDsKKwkJfQorCQlpZiAoaSA9PSAwKQorCQkJZHhfZGItPmZsYWdzIHw9IERYX0ZMQUdfRklSU1Q7CisJfQorI2lmZGVmIERYX0RFQlVHCisJcHJpbnRmKCJCbG9ja2NudCA9ICVkLCBtaW4gaGFzaCAweCUwOHgsIG1heCBoYXNoIDB4JTA4eFxuIiwKKwkgICAgICAgZGItPmJsb2NrY250LCBtaW5faGFzaCwgbWF4X2hhc2gpOworI2VuZGlmCisJZHhfZGIgPSAmZHhfZGlyLT5keF9ibG9ja1tkYi0+YmxvY2tjbnRdOworCWR4X2RiLT5taW5faGFzaCA9IG1pbl9oYXNoOworCWR4X2RiLT5tYXhfaGFzaCA9IG1heF9oYXNoOworCXJldHVybjsKKworY2xlYXJfYW5kX2V4aXQ6CisJY2xlYXJfaHRyZWUoY2QtPmN0eCwgY2QtPnBjdHguaW5vKTsKKwlkeF9kaXItPm51bWJsb2NrcyA9IDA7Cit9CisjZW5kaWYgLyogRU5BQkxFX0hUUkVFICovCisKKy8qCisgKiBHaXZlbiBhIGJ1c3RlZCBkaXJlY3RvcnksIHRyeSB0byBzYWx2YWdlIGl0IHNvbWVob3cuCisgKgorICovCitzdGF0aWMgdm9pZCBzYWx2YWdlX2RpcmVjdG9yeShleHQyX2ZpbHN5cyBmcywKKwkJCSAgICAgIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkJICAgICAgc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpwcmV2LAorCQkJICAgICAgdW5zaWduZWQgaW50ICpvZmZzZXQpCit7CisJY2hhcgkqY3AgPSAoY2hhciAqKSBkaXJlbnQ7CisJaW50IGxlZnQ7CisJdW5zaWduZWQgaW50IHJlY19sZW4sIHByZXZfcmVjX2xlbjsKKwl1bnNpZ25lZCBpbnQgbmFtZV9sZW4gPSBkaXJlbnQtPm5hbWVfbGVuICYgMHhGRjsKKworCSh2b2lkKSBleHQyZnNfZ2V0X3JlY19sZW4oZnMsIGRpcmVudCwgJnJlY19sZW4pOworCWxlZnQgPSBmcy0+YmxvY2tzaXplIC0gKm9mZnNldCAtIHJlY19sZW47CisKKwkvKgorCSAqIFNwZWNpYWwgY2FzZSBvZiBkaXJlY3RvcnkgZW50cnkgb2Ygc2l6ZSA4OiBjb3B5IHdoYXQncyBsZWZ0CisJICogb2YgdGhlIGRpcmVjdG9yeSBibG9jayB1cCB0byBjb3ZlciB1cCB0aGUgaW52YWxpZCBob2xlLgorCSAqLworCWlmICgobGVmdCA+PSAxMikgJiYgKHJlY19sZW4gPT0gOCkpIHsKKwkJbWVtbW92ZShjcCwgY3ArOCwgbGVmdCk7CisJCW1lbXNldChjcCArIGxlZnQsIDAsIDgpOworCQlyZXR1cm47CisJfQorCS8qCisJICogSWYgdGhlIGRpcmVjdG9yeSBlbnRyeSBvdmVycnVucyB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkKKwkgKiBibG9jaywgYW5kIHRoZSBuYW1lIGlzIHNtYWxsIGVub3VnaCB0byBmaXQsIHRoZW4gYWRqdXN0IHRoZQorCSAqIHJlY29yZCBsZW5ndGguCisJICovCisJaWYgKChsZWZ0IDwgMCkgJiYKKwkgICAgKChpbnQpIHJlY19sZW4gKyBsZWZ0ID4gOCkgJiYKKwkgICAgKChpbnQpIG5hbWVfbGVuICsgOCA8PSAoaW50KSByZWNfbGVuICsgbGVmdCkgJiYKKwkgICAgZGlyZW50LT5pbm9kZSA8PSBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50ICYmCisJICAgIHN0cm5sZW4oZGlyZW50LT5uYW1lLCBuYW1lX2xlbikgPT0gbmFtZV9sZW4pIHsKKwkJKHZvaWQpIGV4dDJmc19zZXRfcmVjX2xlbihmcywgKGludCkgcmVjX2xlbiArIGxlZnQsIGRpcmVudCk7CisJCXJldHVybjsKKwl9CisJLyoKKwkgKiBJZiB0aGUgcmVjb3JkIGxlbmd0aCBvZiB0aGUgZGlyZWN0b3J5IGVudHJ5IGlzIGEgbXVsdGlwbGUKKwkgKiBvZiBmb3VyLCBhbmQgbm90IHRvbyBiaWcsIHN1Y2ggdGhhdCBpdCBpcyB2YWxpZCwgbGV0IHRoZQorCSAqIHByZXZpb3VzIGRpcmVjdG9yeSBlbnRyeSBhYnNvcmIgdGhlIGludmFsaWQgb25lLgorCSAqLworCWlmIChwcmV2ICYmIHJlY19sZW4gJiYgKHJlY19sZW4gJSA0KSA9PSAwICYmCisJICAgICgqb2Zmc2V0ICsgcmVjX2xlbiA8PSBmcy0+YmxvY2tzaXplKSkgeworCQkodm9pZCkgZXh0MmZzX2dldF9yZWNfbGVuKGZzLCBwcmV2LCAmcHJldl9yZWNfbGVuKTsKKwkJcHJldl9yZWNfbGVuICs9IHJlY19sZW47CisJCSh2b2lkKSBleHQyZnNfc2V0X3JlY19sZW4oZnMsIHByZXZfcmVjX2xlbiwgcHJldik7CisJCSpvZmZzZXQgKz0gcmVjX2xlbjsKKwkJcmV0dXJuOworCX0KKwkvKgorCSAqIERlZmF1bHQgc2FsdmFnZSBtZXRob2QgLS0tIGtpbGwgYWxsIG9mIHRoZSBkaXJlY3RvcnkKKwkgKiBlbnRyaWVzIGZvciB0aGUgcmVzdCBvZiB0aGUgYmxvY2suICBXZSB3aWxsIGVpdGhlciB0cnkgdG8KKwkgKiBhYnNvcmIgaXQgaW50byB0aGUgcHJldmlvdXMgZGlyZWN0b3J5IGVudHJ5LCBvciBjcmVhdGUgYQorCSAqIG5ldyBlbXB0eSBkaXJlY3RvcnkgZW50cnkgdGhlIHJlc3Qgb2YgdGhlIGRpcmVjdG9yeSBibG9jay4KKwkgKi8KKwlpZiAocHJldikgeworCQkodm9pZCkgZXh0MmZzX2dldF9yZWNfbGVuKGZzLCBwcmV2LCAmcHJldl9yZWNfbGVuKTsKKwkJcHJldl9yZWNfbGVuICs9IGZzLT5ibG9ja3NpemUgLSAqb2Zmc2V0OworCQkodm9pZCkgZXh0MmZzX3NldF9yZWNfbGVuKGZzLCBwcmV2X3JlY19sZW4sIHByZXYpOworCQkqb2Zmc2V0ID0gZnMtPmJsb2Nrc2l6ZTsKKwl9IGVsc2UgeworCQlyZWNfbGVuID0gZnMtPmJsb2Nrc2l6ZSAtICpvZmZzZXQ7CisJCSh2b2lkKSBleHQyZnNfc2V0X3JlY19sZW4oZnMsIHJlY19sZW4sIGRpcmVudCk7CisJCWRpcmVudC0+bmFtZV9sZW4gPSAwOworCQlkaXJlbnQtPmlub2RlID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfZGlyX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgc3RydWN0IGV4dDJfZGJfZW50cnkyICpkYiwKKwkJCSAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKyAJc3RydWN0IGR4X2Rpcl9pbmZvCSpkeF9kaXI7CisjaWZkZWYgRU5BQkxFX0hUUkVFCisJc3RydWN0IGR4X2RpcmJsb2NrX2luZm8JKmR4X2RiID0gMDsKKyNlbmRpZiAvKiBFTkFCTEVfSFRSRUUgKi8KKwlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgCSpkaXJlbnQsICpwcmV2OworCWV4dDJfZGlyaGFzaF90CQloYXNoOworCXVuc2lnbmVkIGludAkJb2Zmc2V0ID0gMDsKKwlpbnQJCQlkaXJfbW9kaWZpZWQgPSAwOworCWludAkJCWRvdF9zdGF0ZTsKKwl1bnNpZ25lZCBpbnQJCXJlY19sZW47CisJYmxrNjRfdAkJCWJsb2NrX25yID0gZGItPmJsazsKKwlleHQyX2lub190IAkJaW5vID0gZGItPmlubzsKKwlleHQyX2lub190IAkJc3ViZGlyX3BhcmVudDsKKwlfX3UxNgkJCWxpbmtzOworCXN0cnVjdCBjaGVja19kaXJfc3RydWN0CSpjZDsKKwljaGFyIAkJCSpidWY7CisJZTJmc2NrX3QJCWN0eDsKKwlwcm9ibGVtX3QJCXByb2JsZW07CisJc3RydWN0IGV4dDJfZHhfcm9vdF9pbmZvICpyb290OworCXN0cnVjdCBleHQyX2R4X2NvdW50bGltaXQgKmxpbWl0OworCXN0YXRpYyBkaWN0X3QgZGVfZGljdDsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0CXBjdHg7CisJaW50CWR1cHNfZm91bmQgPSAwOworCWludAlyZXQ7CisKKwljZCA9IChzdHJ1Y3QgY2hlY2tfZGlyX3N0cnVjdCAqKSBwcml2X2RhdGE7CisJYnVmID0gY2QtPmJ1ZjsKKwljdHggPSBjZC0+Y3R4OworCisJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19TSUdOQUxfTUFTSyB8fCBjdHgtPmZsYWdzICYgRTJGX0ZMQUdfUkVTVEFSVCkKKwkJcmV0dXJuIERJUkVOVF9BQk9SVDsKKworCWlmIChjdHgtPnByb2dyZXNzICYmIChjdHgtPnByb2dyZXNzKShjdHgsIDIsIGNkLT5jb3VudCsrLCBjZC0+bWF4KSkKKwkJcmV0dXJuIERJUkVOVF9BQk9SVDsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSBpbm9kZSBpcyBzdGlsbCBpbiB1c2UgKGNvdWxkIGhhdmUgYmVlbgorCSAqIGRlbGV0ZWQgaW4gdGhlIGR1cGxpY2F0ZS9iYWQgYmxvY2tzIHBhc3MuCisJICovCisJaWYgKCEoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX3VzZWRfbWFwLCBpbm8pKSkKKwkJcmV0dXJuIDA7CisKKwljZC0+cGN0eC5pbm8gPSBpbm87CisJY2QtPnBjdHguYmxrID0gYmxvY2tfbnI7CisJY2QtPnBjdHguYmxrY291bnQgPSBkYi0+YmxvY2tjbnQ7CisJY2QtPnBjdHguaW5vMiA9IDA7CisJY2QtPnBjdHguZGlyZW50ID0gMDsKKwljZC0+cGN0eC5udW0gPSAwOworCisJaWYgKGRiLT5ibGsgPT0gMCkgeworCQlpZiAoYWxsb2NhdGVfZGlyX2Jsb2NrKGN0eCwgZGIsIGJ1ZiwgJmNkLT5wY3R4KSkKKwkJCXJldHVybiAwOworCQlibG9ja19uciA9IGRiLT5ibGs7CisJfQorCisJaWYgKGRiLT5ibG9ja2NudCkKKwkJZG90X3N0YXRlID0gMjsKKwllbHNlCisJCWRvdF9zdGF0ZSA9IDA7CisKKwlpZiAoY3R4LT5kaXJzX3RvX2hhc2ggJiYKKwkgICAgZXh0MmZzX3UzMl9saXN0X3Rlc3QoY3R4LT5kaXJzX3RvX2hhc2gsIGlubykpCisJCWR1cHNfZm91bmQrKzsKKworI2lmIDAKKwlwcmludGYoIkluIHByb2Nlc3NfZGlyX2Jsb2NrIGJsb2NrICVsdSwgIyVkLCBpbm9kZSAlbHVcbiIsIGJsb2NrX25yLAorCSAgICAgICBkYi0+YmxvY2tjbnQsIGlubyk7CisjZW5kaWYKKworCWVoYW5kbGVyX29wZXJhdGlvbihfKCJyZWFkaW5nIGRpcmVjdG9yeSBibG9jayIpKTsKKwljZC0+cGN0eC5lcnJjb2RlID0gZXh0MmZzX3JlYWRfZGlyX2Jsb2NrMyhmcywgYmxvY2tfbnIsIGJ1ZiwgMCk7CisJZWhhbmRsZXJfb3BlcmF0aW9uKDApOworCWlmIChjZC0+cGN0eC5lcnJjb2RlID09IEVYVDJfRVRfRElSX0NPUlJVUFRFRCkKKwkJY2QtPnBjdHguZXJyY29kZSA9IDA7IC8qIFdlJ2xsIGhhbmRsZSB0aGlzIG91cnNlbHZlcyAqLworCWlmIChjZC0+cGN0eC5lcnJjb2RlKSB7CisJCWlmICghZml4X3Byb2JsZW0oY3R4LCBQUl8yX1JFQURfRElSQkxPQ0ssICZjZC0+cGN0eCkpIHsKKwkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCQlyZXR1cm4gRElSRU5UX0FCT1JUOworCQl9CisJCW1lbXNldChidWYsIDAsIGZzLT5ibG9ja3NpemUpOworCX0KKyNpZmRlZiBFTkFCTEVfSFRSRUUKKwlkeF9kaXIgPSBlMmZzY2tfZ2V0X2R4X2Rpcl9pbmZvKGN0eCwgaW5vKTsKKwlpZiAoZHhfZGlyICYmIGR4X2Rpci0+bnVtYmxvY2tzKSB7CisJCWlmIChkYi0+YmxvY2tjbnQgPj0gZHhfZGlyLT5udW1ibG9ja3MpIHsKKwkJCXBjdHguZGlyID0gaW5vOworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9VTkVYUEVDVEVEX0hUUkVFX0JMT0NLLAorCQkJCQkmcGN0eCkpIHsKKwkJCQljbGVhcl9odHJlZShjdHgsIGlubyk7CisJCQkJZHhfZGlyLT5udW1ibG9ja3MgPSAwOworCQkJCWR4X2RiID0gMDsKKwkJCQlnb3RvIG91dF9odHJlZTsKKwkJCX0KKwkJCWZhdGFsX2Vycm9yKGN0eCwgXygiQ2FuIG5vdCBjb250aW51ZS4iKSk7CisJCX0KKwkJZHhfZGIgPSAmZHhfZGlyLT5keF9ibG9ja1tkYi0+YmxvY2tjbnRdOworCQlkeF9kYi0+dHlwZSA9IERYX0RJUkJMT0NLX0xFQUY7CisJCWR4X2RiLT5waHlzID0gYmxvY2tfbnI7CisJCWR4X2RiLT5taW5faGFzaCA9IH4wOworCQlkeF9kYi0+bWF4X2hhc2ggPSAwOworCisJCWRpcmVudCA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikgYnVmOworCQkodm9pZCkgZXh0MmZzX2dldF9yZWNfbGVuKGZzLCBkaXJlbnQsICZyZWNfbGVuKTsKKwkJbGltaXQgPSAoc3RydWN0IGV4dDJfZHhfY291bnRsaW1pdCAqKSAoYnVmKzgpOworCQlpZiAoZGItPmJsb2NrY250ID09IDApIHsKKwkJCXJvb3QgPSAoc3RydWN0IGV4dDJfZHhfcm9vdF9pbmZvICopIChidWYgKyAyNCk7CisJCQlkeF9kYi0+dHlwZSA9IERYX0RJUkJMT0NLX1JPT1Q7CisJCQlkeF9kYi0+ZmxhZ3MgfD0gRFhfRkxBR19GSVJTVCB8IERYX0ZMQUdfTEFTVDsKKwkJCWlmICgocm9vdC0+cmVzZXJ2ZWRfemVybyB8fAorCQkJICAgICByb290LT5pbmZvX2xlbmd0aCA8IDggfHwKKwkJCSAgICAgcm9vdC0+aW5kaXJlY3RfbGV2ZWxzID4gMSkgJiYKKwkJCSAgICBmaXhfcHJvYmxlbShjdHgsIFBSXzJfSFRSRUVfQkFEX1JPT1QsICZjZC0+cGN0eCkpIHsKKwkJCQljbGVhcl9odHJlZShjdHgsIGlubyk7CisJCQkJZHhfZGlyLT5udW1ibG9ja3MgPSAwOworCQkJCWR4X2RiID0gMDsKKwkJCX0KKwkJCWR4X2Rpci0+aGFzaHZlcnNpb24gPSByb290LT5oYXNoX3ZlcnNpb247CisJCQlpZiAoKGR4X2Rpci0+aGFzaHZlcnNpb24gPD0gRVhUMl9IQVNIX1RFQSkgJiYKKwkJCSAgICAoZnMtPnN1cGVyLT5zX2ZsYWdzICYgRVhUMl9GTEFHU19VTlNJR05FRF9IQVNIKSkKKwkJCQlkeF9kaXItPmhhc2h2ZXJzaW9uICs9IDM7CisJCQlkeF9kaXItPmRlcHRoID0gcm9vdC0+aW5kaXJlY3RfbGV2ZWxzICsgMTsKKwkJfSBlbHNlIGlmICgoZGlyZW50LT5pbm9kZSA9PSAwKSAmJgorCQkJICAgKHJlY19sZW4gPT0gZnMtPmJsb2Nrc2l6ZSkgJiYKKwkJCSAgIChkaXJlbnQtPm5hbWVfbGVuID09IDApICYmCisJCQkgICAoZXh0MmZzX2xlMTZfdG9fY3B1KGxpbWl0LT5saW1pdCkgPT0KKwkJCSAgICAoKGZzLT5ibG9ja3NpemUtOCkgLworCQkJICAgICBzaXplb2Yoc3RydWN0IGV4dDJfZHhfZW50cnkpKSkpCisJCQlkeF9kYi0+dHlwZSA9IERYX0RJUkJMT0NLX05PREU7CisJfQorb3V0X2h0cmVlOgorI2VuZGlmIC8qIEVOQUJMRV9IVFJFRSAqLworCisJZGljdF9pbml0KCZkZV9kaWN0LCBESUNUQ09VTlRfVF9NQVgsIGRpY3RfZGVfY21wKTsKKwlwcmV2ID0gMDsKKwlkbyB7CisJCWRncnBfdCBncm91cDsKKwkJZXh0Ml9pbm9fdCBmaXJzdF91bnVzZWRfaW5vZGU7CisKKwkJcHJvYmxlbSA9IDA7CisJCWRpcmVudCA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikgKGJ1ZiArIG9mZnNldCk7CisJCSh2b2lkKSBleHQyZnNfZ2V0X3JlY19sZW4oZnMsIGRpcmVudCwgJnJlY19sZW4pOworCQljZC0+cGN0eC5kaXJlbnQgPSBkaXJlbnQ7CisJCWNkLT5wY3R4Lm51bSA9IG9mZnNldDsKKwkJaWYgKCgob2Zmc2V0ICsgcmVjX2xlbikgPiBmcy0+YmxvY2tzaXplKSB8fAorCQkgICAgKHJlY19sZW4gPCAxMikgfHwKKwkJICAgICgocmVjX2xlbiAlIDQpICE9IDApIHx8CisJCSAgICAoKChkaXJlbnQtPm5hbWVfbGVuICYgKHVuc2lnbmVkKSAweEZGKSs4KSA+IHJlY19sZW4pKSB7CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8yX0RJUl9DT1JSVVBURUQsICZjZC0+cGN0eCkpIHsKKwkJCQlzYWx2YWdlX2RpcmVjdG9yeShmcywgZGlyZW50LCBwcmV2LCAmb2Zmc2V0KTsKKwkJCQlkaXJfbW9kaWZpZWQrKzsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZQorCQkJCWdvdG8gYWJvcnRfZnJlZV9kaWN0OworCQl9CisKKwkJaWYgKGRvdF9zdGF0ZSA9PSAwKSB7CisJCQlpZiAoY2hlY2tfZG90KGN0eCwgZGlyZW50LCBpbm8sICZjZC0+cGN0eCkpCisJCQkJZGlyX21vZGlmaWVkKys7CisJCX0gZWxzZSBpZiAoZG90X3N0YXRlID09IDEpIHsKKwkJCXJldCA9IGNoZWNrX2RvdGRvdChjdHgsIGRpcmVudCwgaW5vLCAmY2QtPnBjdHgpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBhYm9ydF9mcmVlX2RpY3Q7CisJCQlpZiAocmV0KQorCQkJCWRpcl9tb2RpZmllZCsrOworCQl9IGVsc2UgaWYgKGRpcmVudC0+aW5vZGUgPT0gaW5vKSB7CisJCQlwcm9ibGVtID0gUFJfMl9MSU5LX0RPVDsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzJfTElOS19ET1QsICZjZC0+cGN0eCkpIHsKKwkJCQlkaXJlbnQtPmlub2RlID0gMDsKKwkJCQlkaXJfbW9kaWZpZWQrKzsKKwkJCQlnb3RvIG5leHQ7CisJCQl9CisJCX0KKwkJaWYgKCFkaXJlbnQtPmlub2RlKQorCQkJZ290byBuZXh0OworCisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0aGUgaW5vZGUgbGlzdGVkIGlzIGEgbGVnYWwgb25lLgorCQkgKi8KKwkJaWYgKCgoZGlyZW50LT5pbm9kZSAhPSBFWFQyX1JPT1RfSU5PKSAmJgorCQkgICAgIChkaXJlbnQtPmlub2RlIDwgRVhUMl9GSVJTVF9JTk9ERShmcy0+c3VwZXIpKSkgfHwKKwkJICAgIChkaXJlbnQtPmlub2RlID4gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCkpIHsKKwkJCXByb2JsZW0gPSBQUl8yX0JBRF9JTk87CisJCX0gZWxzZSBpZiAoY3R4LT5pbm9kZV9iYl9tYXAgJiYKKwkJCSAgIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfYmJfbWFwLAorCQkJCQkJICAgICBkaXJlbnQtPmlub2RlKSkpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgaW5vZGUgaXMgaW4gYSBiYWQgYmxvY2ssIG9mZmVyIHRvCisJCQkgKiBjbGVhciBpdC4KKwkJCSAqLworCQkJcHJvYmxlbSA9IFBSXzJfQkJfSU5PREU7CisJCX0gZWxzZSBpZiAoKGRvdF9zdGF0ZSA+IDEpICYmCisJCQkgICAoKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSA9PSAxKSAmJgorCQkJICAgKGRpcmVudC0+bmFtZVswXSA9PSAnLicpKSB7CisJCQkvKgorCQkJICogSWYgdGhlcmUncyBhICcuJyBlbnRyeSBpbiBhbnl0aGluZyBvdGhlcgorCQkJICogdGhhbiB0aGUgZmlyc3QgZGlyZWN0b3J5IGVudHJ5LCBpdCdzIGEKKwkJCSAqIGR1cGxpY2F0ZSBlbnRyeSB0aGF0IHNob3VsZCBiZSByZW1vdmVkLgorCQkJICovCisJCQlwcm9ibGVtID0gUFJfMl9EVVBfRE9UOworCQl9IGVsc2UgaWYgKChkb3Rfc3RhdGUgPiAxKSAmJgorCQkJICAgKChkaXJlbnQtPm5hbWVfbGVuICYgMHhGRikgPT0gMikgJiYKKwkJCSAgIChkaXJlbnQtPm5hbWVbMF0gPT0gJy4nKSAmJgorCQkJICAgKGRpcmVudC0+bmFtZVsxXSA9PSAnLicpKSB7CisJCQkvKgorCQkJICogSWYgdGhlcmUncyBhICcuLicgZW50cnkgaW4gYW55dGhpbmcgb3RoZXIKKwkJCSAqIHRoYW4gdGhlIHNlY29uZCBkaXJlY3RvcnkgZW50cnksIGl0J3MgYQorCQkJICogZHVwbGljYXRlIGVudHJ5IHRoYXQgc2hvdWxkIGJlIHJlbW92ZWQuCisJCQkgKi8KKwkJCXByb2JsZW0gPSBQUl8yX0RVUF9ET1RfRE9UOworCQl9IGVsc2UgaWYgKChkb3Rfc3RhdGUgPiAxKSAmJgorCQkJICAgKGRpcmVudC0+aW5vZGUgPT0gRVhUMl9ST09UX0lOTykpIHsKKwkJCS8qCisJCQkgKiBEb24ndCBhbGxvdyBsaW5rcyB0byB0aGUgcm9vdCBkaXJlY3RvcnkuCisJCQkgKiBXZSBjaGVjayB0aGlzIHNwZWNpYWxseSB0byBtYWtlIHN1cmUgd2UKKwkJCSAqIGNhdGNoIHRoaXMgZXJyb3IgY2FzZSBldmVuIGlmIHRoZSByb290CisJCQkgKiBkaXJlY3RvcnkgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQuCisJCQkgKi8KKwkJCXByb2JsZW0gPSBQUl8yX0xJTktfUk9PVDsKKwkJfSBlbHNlIGlmICgoZG90X3N0YXRlID4gMSkgJiYKKwkJCSAgIChkaXJlbnQtPm5hbWVfbGVuICYgMHhGRikgPT0gMCkgeworCQkJLyoKKwkJCSAqIERvbid0IGFsbG93IHplcm8tbGVuZ3RoIGRpcmVjdG9yeSBuYW1lcy4KKwkJCSAqLworCQkJcHJvYmxlbSA9IFBSXzJfTlVMTF9OQU1FOworCQl9CisKKwkJaWYgKHByb2JsZW0pIHsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIHByb2JsZW0sICZjZC0+cGN0eCkpIHsKKwkJCQlkaXJlbnQtPmlub2RlID0gMDsKKwkJCQlkaXJfbW9kaWZpZWQrKzsKKwkJCQlnb3RvIG5leHQ7CisJCQl9IGVsc2UgeworCQkJCWV4dDJmc191bm1hcmtfdmFsaWQoZnMpOworCQkJCWlmIChwcm9ibGVtID09IFBSXzJfQkFEX0lOTykKKwkJCQkJZ290byBuZXh0OworCQkJfQorCQl9CisKKwkJLyoKKwkJICogSWYgdGhlIGlub2RlIHdhcyBtYXJrZWQgYXMgaGF2aW5nIGJhZCBmaWVsZHMgaW4KKwkJICogcGFzczEsIHByb2Nlc3MgaXQgYW5kIG9mZmVyIHRvIGZpeC9jbGVhciBpdC4KKwkJICogKFdlIHdhaXQgdW50aWwgbm93IHNvIHRoYXQgd2UgY2FuIGRpc3BsYXkgdGhlCisJCSAqIHBhdGhuYW1lIHRvIHRoZSB1c2VyLikKKwkJICovCisJCWlmIChjdHgtPmlub2RlX2JhZF9tYXAgJiYKKwkJICAgIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9iYWRfbWFwLAorCQkJCQkgICAgIGRpcmVudC0+aW5vZGUpKSB7CisJCQlpZiAoZTJmc2NrX3Byb2Nlc3NfYmFkX2lub2RlKGN0eCwgaW5vLAorCQkJCQkJICAgICBkaXJlbnQtPmlub2RlLAorCQkJCQkJICAgICBidWYgKyBmcy0+YmxvY2tzaXplKSkgeworCQkJCWRpcmVudC0+aW5vZGUgPSAwOworCQkJCWRpcl9tb2RpZmllZCsrOworCQkJCWdvdG8gbmV4dDsKKwkJCX0KKwkJCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCQkJcmV0dXJuIERJUkVOVF9BQk9SVDsKKwkJfQorCisJCWdyb3VwID0gZXh0MmZzX2dyb3VwX29mX2lubyhmcywgZGlyZW50LT5pbm9kZSk7CisJCWZpcnN0X3VudXNlZF9pbm9kZSA9IGdyb3VwICogZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgKworCQkJCQkxICsgZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgLQorCQkJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZChmcywgZ3JvdXApOworCQljZC0+cGN0eC5ncm91cCA9IGdyb3VwOworCisJCS8qCisJCSAqIENoZWNrIGlmIHRoZSBpbm9kZSB3YXMgbWlzc2VkIG91dCBiZWNhdXNlCisJCSAqIF9JTk9ERV9VTklOSVQgZmxhZyB3YXMgc2V0IG9yIGJnX2l0YWJsZV91bnVzZWQgd2FzCisJCSAqIGluY29ycmVjdC4gIElmIHNvLCBjbGVhciB0aGUgX0lOT0RFX1VOSU5JVCBmbGFnIGFuZAorCQkgKiByZXN0YXJ0IGUyZnNjay4gIEluIHRoZSBmdXR1cmUgaXQgd291bGQgYmUgbmljZSBpZgorCQkgKiB3ZSBjb3VsZCBjYWxsIGEgZnVuY3Rpb24gaW4gcGFzczEuYyB0aGF0IGNoZWNrcyB0aGUKKwkJICogbmV3bHkgdmlzaWJsZSBpbm9kZXMuCisJCSAqLworCQlpZiAoZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGdyb3VwLCBFWFQyX0JHX0lOT0RFX1VOSU5JVCkpIHsKKwkJCXBjdHgubnVtID0gZGlyZW50LT5pbm9kZTsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzJfSU5PUkVGX0JHX0lOT19VTklOSVQsCisJCQkJCSZjZC0+cGN0eCkpeworCQkJCWV4dDJmc19iZ19mbGFnc19jbGVhcihmcywgZ3JvdXAsCisJCQkJCQkgICAgICBFWFQyX0JHX0lOT0RFX1VOSU5JVCk7CisJCQkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfUkVTVEFSVF9MQVRFUjsKKwkJCX0gZWxzZSB7CisJCQkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisJCQkJaWYgKHByb2JsZW0gPT0gUFJfMl9CQURfSU5PKQorCQkJCQlnb3RvIG5leHQ7CisJCQl9CisJCX0gZWxzZSBpZiAoZGlyZW50LT5pbm9kZSA+PSBmaXJzdF91bnVzZWRfaW5vZGUpIHsKKwkJCXBjdHgubnVtID0gZGlyZW50LT5pbm9kZTsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzJfSU5PUkVGX0lOX1VOVVNFRCwgJmNkLT5wY3R4KSl7CisJCQkJZXh0MmZzX2JnX2l0YWJsZV91bnVzZWRfc2V0KGZzLCBncm91cCwgMCk7CisJCQkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfUkVTVEFSVF9MQVRFUjsKKwkJCX0gZWxzZSB7CisJCQkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisJCQkJaWYgKHByb2JsZW0gPT0gUFJfMl9CQURfSU5PKQorCQkJCQlnb3RvIG5leHQ7CisJCQl9CisJCX0KKworCQkvKiAKKwkJICogT2ZmZXIgdG8gY2xlYXIgdW51c2VkIGlub2RlczsgaWYgd2UgYXJlIGdvaW5nIHRvIGJlCisJCSAqIHJlc3RhcnRpbmcgdGhlIHNjYW4gZHVlIHRvIGJnX2l0YWJsZV91bnVzZWQgYmVpbmcKKwkJICogd3JvbmcsIHRoZW4gZG9uJ3QgY2xlYXIgYW55IGlub2RlcyB0byBhdm9pZCB6YXBwaW5nCisJCSAqIGlub2RlcyB0aGF0IHdlcmUgc2tpcHBlZCBkdXJpbmcgcGFzczEgZHVlIHRvIGFuCisJCSAqIGluY29ycmVjdCBiZ19pdGFibGVfdW51c2VkOyB3ZSdsbCBnZXQgYW55IHJlYWwKKwkJICogcHJvYmxlbXMgYWZ0ZXIgd2UgcmVzdGFydC4KKwkJICovCisJCWlmICghKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19SRVNUQVJUX0xBVEVSKSAmJgorCQkgICAgIShleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfdXNlZF9tYXAsCisJCQkJCQlkaXJlbnQtPmlub2RlKSkpCisJCQlwcm9ibGVtID0gUFJfMl9VTlVTRURfSU5PREU7CisKKwkJaWYgKHByb2JsZW0pIHsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIHByb2JsZW0sICZjZC0+cGN0eCkpIHsKKwkJCQlkaXJlbnQtPmlub2RlID0gMDsKKwkJCQlkaXJfbW9kaWZpZWQrKzsKKwkJCQlnb3RvIG5leHQ7CisJCQl9IGVsc2UgeworCQkJCWV4dDJmc191bm1hcmtfdmFsaWQoZnMpOworCQkJCWlmIChwcm9ibGVtID09IFBSXzJfQkFEX0lOTykKKwkJCQkJZ290byBuZXh0OworCQkJfQorCQl9CisKKwkJaWYgKGNoZWNrX25hbWUoY3R4LCBkaXJlbnQsIGlubywgJmNkLT5wY3R4KSkKKwkJCWRpcl9tb2RpZmllZCsrOworCisJCWlmIChjaGVja19maWxldHlwZShjdHgsIGRpcmVudCwgaW5vLCAmY2QtPnBjdHgpKQorCQkJZGlyX21vZGlmaWVkKys7CisKKyNpZmRlZiBFTkFCTEVfSFRSRUUKKwkJaWYgKGR4X2RiKSB7CisJCQlleHQyZnNfZGlyaGFzaChkeF9kaXItPmhhc2h2ZXJzaW9uLCBkaXJlbnQtPm5hbWUsCisJCQkJICAgICAgIChkaXJlbnQtPm5hbWVfbGVuICYgMHhGRiksCisJCQkJICAgICAgIGZzLT5zdXBlci0+c19oYXNoX3NlZWQsICZoYXNoLCAwKTsKKwkJCWlmIChoYXNoIDwgZHhfZGItPm1pbl9oYXNoKQorCQkJCWR4X2RiLT5taW5faGFzaCA9IGhhc2g7CisJCQlpZiAoaGFzaCA+IGR4X2RiLT5tYXhfaGFzaCkKKwkJCQlkeF9kYi0+bWF4X2hhc2ggPSBoYXNoOworCQl9CisjZW5kaWYKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgZGlyZWN0b3J5LCB0aGVuIG1hcmsgaXRzIHBhcmVudCBpbiBpdHMKKwkJICogZGlyX2luZm8gc3RydWN0dXJlLiAgSWYgdGhlIHBhcmVudCBmaWVsZCBpcyBhbHJlYWR5CisJCSAqIGZpbGxlZCBpbiwgdGhlbiB0aGlzIGRpcmVjdG9yeSBoYXMgbW9yZSB0aGFuIG9uZQorCQkgKiBoYXJkIGxpbmsuICBXZSBhc3N1bWUgdGhlIGZpcnN0IGxpbmsgaXMgY29ycmVjdCwKKwkJICogYW5kIGFzayB0aGUgdXNlciBpZiBoZS9zaGUgd2FudHMgdG8gY2xlYXIgdGhpcyBvbmUuCisJCSAqLworCQlpZiAoKGRvdF9zdGF0ZSA+IDEpICYmCisJCSAgICAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2Rpcl9tYXAsCisJCQkJCSAgICAgIGRpcmVudC0+aW5vZGUpKSkgeworCQkJaWYgKGUyZnNja19kaXJfaW5mb19nZXRfcGFyZW50KGN0eCwgZGlyZW50LT5pbm9kZSwKKwkJCQkJCSAgICAgICAmc3ViZGlyX3BhcmVudCkpIHsKKwkJCQljZC0+cGN0eC5pbm8gPSBkaXJlbnQtPmlub2RlOworCQkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMl9OT19ESVJJTkZPLCAmY2QtPnBjdHgpOworCQkJCWdvdG8gYWJvcnRfZnJlZV9kaWN0OworCQkJfQorCQkJaWYgKHN1YmRpcl9wYXJlbnQpIHsKKwkJCQljZC0+cGN0eC5pbm8yID0gc3ViZGlyX3BhcmVudDsKKwkJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8yX0xJTktfRElSLAorCQkJCQkJJmNkLT5wY3R4KSkgeworCQkJCQlkaXJlbnQtPmlub2RlID0gMDsKKwkJCQkJZGlyX21vZGlmaWVkKys7CisJCQkJCWdvdG8gbmV4dDsKKwkJCQl9CisJCQkJY2QtPnBjdHguaW5vMiA9IDA7CisJCQl9IGVsc2UgeworCQkJCSh2b2lkKSBlMmZzY2tfZGlyX2luZm9fc2V0X3BhcmVudChjdHgsCisJCQkJCQkgIGRpcmVudC0+aW5vZGUsIGlubyk7CisJCQl9CisJCX0KKworCQlpZiAoZHVwc19mb3VuZCkgeworCQkJOworCQl9IGVsc2UgaWYgKGRpY3RfbG9va3VwKCZkZV9kaWN0LCBkaXJlbnQpKSB7CisJCQljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCQkJcGN0eC5pbm8gPSBpbm87CisJCQlwY3R4LmRpcmVudCA9IGRpcmVudDsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMl9SRVBPUlRfRFVQX0RJUkVOVCwgJnBjdHgpOworCQkJaWYgKCFjdHgtPmRpcnNfdG9faGFzaCkKKwkJCQlleHQyZnNfdTMyX2xpc3RfY3JlYXRlKCZjdHgtPmRpcnNfdG9faGFzaCwgNTApOworCQkJaWYgKGN0eC0+ZGlyc190b19oYXNoKQorCQkJCWV4dDJmc191MzJfbGlzdF9hZGQoY3R4LT5kaXJzX3RvX2hhc2gsIGlubyk7CisJCQlkdXBzX2ZvdW5kKys7CisJCX0gZWxzZQorCQkJZGljdF9hbGxvY19pbnNlcnQoJmRlX2RpY3QsIGRpcmVudCwgZGlyZW50KTsKKworCQlleHQyZnNfaWNvdW50X2luY3JlbWVudChjdHgtPmlub2RlX2NvdW50LCBkaXJlbnQtPmlub2RlLAorCQkJCQkmbGlua3MpOworCQlpZiAobGlua3MgPiAxKQorCQkJY3R4LT5mc19saW5rc19jb3VudCsrOworCQljdHgtPmZzX3RvdGFsX2NvdW50Kys7CisJbmV4dDoKKwkJcHJldiA9IGRpcmVudDsKKwkJaWYgKGRpcl9tb2RpZmllZCkKKwkJCSh2b2lkKSBleHQyZnNfZ2V0X3JlY19sZW4oZnMsIGRpcmVudCwgJnJlY19sZW4pOworCQlvZmZzZXQgKz0gcmVjX2xlbjsKKwkJZG90X3N0YXRlKys7CisJfSB3aGlsZSAob2Zmc2V0IDwgZnMtPmJsb2Nrc2l6ZSk7CisjaWYgMAorCXByaW50ZigiXG4iKTsKKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9IVFJFRQorCWlmIChkeF9kYikgeworI2lmZGVmIERYX0RFQlVHCisJCXByaW50ZigiZGJfYmxvY2sgJWQsIHR5cGUgJWQsIG1pbl9oYXNoIDB4JTB4LCBtYXhfaGFzaCAweCUweFxuIiwKKwkJICAgICAgIGRiLT5ibG9ja2NudCwgZHhfZGItPnR5cGUsCisJCSAgICAgICBkeF9kYi0+bWluX2hhc2gsIGR4X2RiLT5tYXhfaGFzaCk7CisjZW5kaWYKKwkJY2QtPnBjdHguZGlyID0gY2QtPnBjdHguaW5vOworCQlpZiAoKGR4X2RiLT50eXBlID09IERYX0RJUkJMT0NLX1JPT1QpIHx8CisJCSAgICAoZHhfZGItPnR5cGUgPT0gRFhfRElSQkxPQ0tfTk9ERSkpCisJCQlwYXJzZV9pbnRfbm9kZShmcywgZGIsIGNkLCBkeF9kaXIsIGJ1Zik7CisJfQorI2VuZGlmIC8qIEVOQUJMRV9IVFJFRSAqLworCWlmIChvZmZzZXQgIT0gZnMtPmJsb2Nrc2l6ZSkgeworCQljZC0+cGN0eC5udW0gPSByZWNfbGVuIC0gZnMtPmJsb2Nrc2l6ZSArIG9mZnNldDsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9GSU5BTF9SRUNMRU4sICZjZC0+cGN0eCkpIHsKKwkJCWRpcmVudC0+cmVjX2xlbiA9IGNkLT5wY3R4Lm51bTsKKwkJCWRpcl9tb2RpZmllZCsrOworCQl9CisJfQorCWlmIChkaXJfbW9kaWZpZWQpIHsKKwkJY2QtPnBjdHguZXJyY29kZSA9IGV4dDJmc193cml0ZV9kaXJfYmxvY2szKGZzLCBibG9ja19uciwgYnVmLCAwKTsKKwkJaWYgKGNkLT5wY3R4LmVycmNvZGUpIHsKKwkJCWlmICghZml4X3Byb2JsZW0oY3R4LCBQUl8yX1dSSVRFX0RJUkJMT0NLLAorCQkJCQkgJmNkLT5wY3R4KSkKKwkJCQlnb3RvIGFib3J0X2ZyZWVfZGljdDsKKwkJfQorCQlleHQyZnNfbWFya19jaGFuZ2VkKGZzKTsKKwl9CisJZGljdF9mcmVlX25vZGVzKCZkZV9kaWN0KTsKKwlyZXR1cm4gMDsKK2Fib3J0X2ZyZWVfZGljdDoKKwljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCWRpY3RfZnJlZV9ub2RlcygmZGVfZGljdCk7CisJcmV0dXJuIERJUkVOVF9BQk9SVDsKK30KKworc3RydWN0IGRlbF9ibG9jayB7CisJZTJmc2NrX3QJY3R4OworCWUyX2Jsa2NudF90CW51bTsKK307CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBkZWFsbG9jYXRlIGEgYmxvY2ssIGFuZCBpcyBhbiBpbnRlcmF0b3IKKyAqIGZ1bmN0aW9uZWQgY2FsbGVkIGJ5IGRlYWxsb2NhdGUgaW5vZGUgdmlhIGV4dDJmc19pdGVyYXRlX2Jsb2NrKCkuCisgKi8KK3N0YXRpYyBpbnQgZGVhbGxvY2F0ZV9pbm9kZV9ibG9jayhleHQyX2ZpbHN5cyBmcywKKwkJCQkgIGJsazY0X3QJKmJsb2NrX25yLAorCQkJCSAgZTJfYmxrY250X3QgYmxvY2tjbnQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCSAgYmxrNjRfdCByZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCSAgaW50IHJlZl9vZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCSAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBkZWxfYmxvY2sgKnAgPSBwcml2X2RhdGE7CisKKwlpZiAoSE9MRV9CTEtBRERSKCpibG9ja19ucikpCisJCXJldHVybiAwOworCWlmICgoKmJsb2NrX25yIDwgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spIHx8CisJICAgICgqYmxvY2tfbnIgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSkKKwkJcmV0dXJuIDA7CisJaWYgKCgqYmxvY2tfbnIgJSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykpID09IDApCisJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsICpibG9ja19uciwgLTEpOworCXAtPm51bSsrOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdWN0aW9uIGRlYWxsb2NhdGVzIGFuIGlub2RlCisgKi8KK3N0YXRpYyB2b2lkIGRlYWxsb2NhdGVfaW5vZGUoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubywgY2hhciogYmxvY2tfYnVmKQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0CXBjdHg7CisJX191MzIJCQljb3VudDsKKwlzdHJ1Y3QgZGVsX2Jsb2NrCWRlbF9ibG9jazsKKworCWUyZnNja19yZWFkX2lub2RlKGN0eCwgaW5vLCAmaW5vZGUsICJkZWFsbG9jYXRlX2lub2RlIik7CisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlwY3R4LmlubyA9IGlubzsKKworCS8qCisJICogRml4IHVwIHRoZSBiaXRtYXBzLi4uCisJICovCisJZTJmc2NrX3JlYWRfYml0bWFwcyhjdHgpOworCWV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoZnMsIGlubywgLTEsIExJTlVYX1NfSVNESVIoaW5vZGUuaV9tb2RlKSk7CisKKwlpZiAoZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCAmaW5vZGUpICYmCisJICAgIChmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQyX0ZFQVRVUkVfQ09NUEFUX0VYVF9BVFRSKSkgeworCQlwY3R4LmVycmNvZGUgPSBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MihmcywKKwkJCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCAmaW5vZGUpLAorCQkJCQlibG9ja19idWYsIC0xLCAmY291bnQpOworCQlpZiAocGN0eC5lcnJjb2RlID09IEVYVDJfRVRfQkFEX0VBX0JMT0NLX05VTSkgeworCQkJcGN0eC5lcnJjb2RlID0gMDsKKwkJCWNvdW50ID0gMTsKKwkJfQorCQlpZiAocGN0eC5lcnJjb2RlKSB7CisJCQlwY3R4LmJsayA9IGV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgJmlub2RlKTsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMl9BREpfRUFfUkVGQ09VTlQsICZwY3R4KTsKKwkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKGNvdW50ID09IDApIHsKKwkJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsCisJCQkJICBleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsICZpbm9kZSksIC0xKTsKKwkJfQorCQlleHQyZnNfZmlsZV9hY2xfYmxvY2tfc2V0KGZzLCAmaW5vZGUsIDApOworCX0KKworCWlmICghZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyKGZzLCAmaW5vZGUpKQorCQlnb3RvIGNsZWFyX2lub2RlOworCisJaWYgKExJTlVYX1NfSVNSRUcoaW5vZGUuaV9tb2RlKSAmJgorCSAgICBleHQyZnNfbmVlZHNfbGFyZ2VfZmlsZV9mZWF0dXJlKEVYVDJfSV9TSVpFKCZpbm9kZSkpKQorCQljdHgtPmxhcmdlX2ZpbGVzLS07CisKKwlkZWxfYmxvY2suY3R4ID0gY3R4OworCWRlbF9ibG9jay5udW0gPSAwOworCXBjdHguZXJyY29kZSA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhmcywgaW5vLCAwLCBibG9ja19idWYsCisJCQkJCSAgICAgZGVhbGxvY2F0ZV9pbm9kZV9ibG9jaywKKwkJCQkJICAgICAmZGVsX2Jsb2NrKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMl9ERUFMTE9DX0lOT0RFLCAmcGN0eCk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCXJldHVybjsKKwl9CitjbGVhcl9pbm9kZToKKwkvKiBJbm9kZSBtYXkgaGF2ZSBjaGFuZ2VkIGJ5IGJsb2NrX2l0ZXJhdGUsIHNvIHJlcmVhZCBpdCAqLworCWUyZnNja19yZWFkX2lub2RlKGN0eCwgaW5vLCAmaW5vZGUsICJkZWFsbG9jYXRlX2lub2RlIik7CisJZTJmc2NrX2NsZWFyX2lub2RlKGN0eCwgaW5vLCAmaW5vZGUsIDAsICJkZWFsbG9jYXRlX2lub2RlIik7Cit9CisKKy8qCisgKiBUaGlzIGZ1Y3Rpb24gY2xlYXJzIHRoZSBodHJlZSBmbGFnIG9uIGFuIGlub2RlCisgKi8KK3N0YXRpYyB2b2lkIGNsZWFyX2h0cmVlKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8pCit7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisKKwllMmZzY2tfcmVhZF9pbm9kZShjdHgsIGlubywgJmlub2RlLCAiY2xlYXJfaHRyZWUiKTsKKwlpbm9kZS5pX2ZsYWdzID0gaW5vZGUuaV9mbGFncyAmIH5FWFQyX0lOREVYX0ZMOworCWUyZnNja193cml0ZV9pbm9kZShjdHgsIGlubywgJmlub2RlLCAiY2xlYXJfaHRyZWUiKTsKKwlpZiAoY3R4LT5kaXJzX3RvX2hhc2gpCisJCWV4dDJmc191MzJfbGlzdF9hZGQoY3R4LT5kaXJzX3RvX2hhc2gsIGlubyk7Cit9CisKKworaW50IGUyZnNja19wcm9jZXNzX2JhZF9pbm9kZShlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgZGlyLAorCQkJICAgICBleHQyX2lub190IGlubywgY2hhciAqYnVmKQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKwlpbnQJCQlpbm9kZV9tb2RpZmllZCA9IDA7CisJaW50CQkJbm90X2ZpeGVkID0gMDsKKwl1bnNpZ25lZCBjaGFyCQkqZnJhZywgKmZzaXplOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwlwcm9ibGVtX3QJCXByb2JsZW0gPSAwOworCisJZTJmc2NrX3JlYWRfaW5vZGUoY3R4LCBpbm8sICZpbm9kZSwgInByb2Nlc3NfYmFkX2lub2RlIik7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCXBjdHguaW5vID0gaW5vOworCXBjdHguZGlyID0gZGlyOworCXBjdHguaW5vZGUgPSAmaW5vZGU7CisKKwlpZiAoZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCAmaW5vZGUpICYmCisJICAgICEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICYgRVhUMl9GRUFUVVJFX0NPTVBBVF9FWFRfQVRUUikpIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9GSUxFX0FDTF9aRVJPLCAmcGN0eCkpIHsKKwkJCWV4dDJmc19maWxlX2FjbF9ibG9ja19zZXQoZnMsICZpbm9kZSwgMCk7CisJCQlpbm9kZV9tb2RpZmllZCsrOworCQl9IGVsc2UKKwkJCW5vdF9maXhlZCsrOworCX0KKworCWlmICghTElOVVhfU19JU0RJUihpbm9kZS5pX21vZGUpICYmICFMSU5VWF9TX0lTUkVHKGlub2RlLmlfbW9kZSkgJiYKKwkgICAgIUxJTlVYX1NfSVNDSFIoaW5vZGUuaV9tb2RlKSAmJiAhTElOVVhfU19JU0JMSyhpbm9kZS5pX21vZGUpICYmCisJICAgICFMSU5VWF9TX0lTTE5LKGlub2RlLmlfbW9kZSkgJiYgIUxJTlVYX1NfSVNGSUZPKGlub2RlLmlfbW9kZSkgJiYKKwkgICAgIShMSU5VWF9TX0lTU09DSyhpbm9kZS5pX21vZGUpKSkKKwkJcHJvYmxlbSA9IFBSXzJfQkFEX01PREU7CisJZWxzZSBpZiAoTElOVVhfU19JU0NIUihpbm9kZS5pX21vZGUpCisJCSAmJiAhZTJmc2NrX3Bhc3MxX2NoZWNrX2RldmljZV9pbm9kZShmcywgJmlub2RlKSkKKwkJcHJvYmxlbSA9IFBSXzJfQkFEX0NIQVJfREVWOworCWVsc2UgaWYgKExJTlVYX1NfSVNCTEsoaW5vZGUuaV9tb2RlKQorCQkgJiYgIWUyZnNja19wYXNzMV9jaGVja19kZXZpY2VfaW5vZGUoZnMsICZpbm9kZSkpCisJCXByb2JsZW0gPSBQUl8yX0JBRF9CTE9DS19ERVY7CisJZWxzZSBpZiAoTElOVVhfU19JU0ZJRk8oaW5vZGUuaV9tb2RlKQorCQkgJiYgIWUyZnNja19wYXNzMV9jaGVja19kZXZpY2VfaW5vZGUoZnMsICZpbm9kZSkpCisJCXByb2JsZW0gPSBQUl8yX0JBRF9GSUZPOworCWVsc2UgaWYgKExJTlVYX1NfSVNTT0NLKGlub2RlLmlfbW9kZSkKKwkJICYmICFlMmZzY2tfcGFzczFfY2hlY2tfZGV2aWNlX2lub2RlKGZzLCAmaW5vZGUpKQorCQlwcm9ibGVtID0gUFJfMl9CQURfU09DS0VUOworCWVsc2UgaWYgKExJTlVYX1NfSVNMTksoaW5vZGUuaV9tb2RlKQorCQkgJiYgIWUyZnNja19wYXNzMV9jaGVja19zeW1saW5rKGZzLCBpbm8sICZpbm9kZSwgYnVmKSkgeworCQlwcm9ibGVtID0gUFJfMl9JTlZBTElEX1NZTUxJTks7CisJfQorCisJaWYgKHByb2JsZW0pIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgcHJvYmxlbSwgJnBjdHgpKSB7CisJCQlkZWFsbG9jYXRlX2lub2RlKGN0eCwgaW5vLCAwKTsKKwkJCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlCisJCQlub3RfZml4ZWQrKzsKKwkJcHJvYmxlbSA9IDA7CisJfQorCisJaWYgKGlub2RlLmlfZmFkZHIpIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9GQUREUl9aRVJPLCAmcGN0eCkpIHsKKwkJCWlub2RlLmlfZmFkZHIgPSAwOworCQkJaW5vZGVfbW9kaWZpZWQrKzsKKwkJfSBlbHNlCisJCQlub3RfZml4ZWQrKzsKKwl9CisKKwlzd2l0Y2ggKGZzLT5zdXBlci0+c19jcmVhdG9yX29zKSB7CisJICAgIGNhc2UgRVhUMl9PU19IVVJEOgorCQlmcmFnID0gJmlub2RlLm9zZDIuaHVyZDIuaF9pX2ZyYWc7CisJCWZzaXplID0gJmlub2RlLm9zZDIuaHVyZDIuaF9pX2ZzaXplOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJZnJhZyA9IGZzaXplID0gMDsKKwl9CisJaWYgKGZyYWcgJiYgKmZyYWcpIHsKKwkJcGN0eC5udW0gPSAqZnJhZzsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9GUkFHX1pFUk8sICZwY3R4KSkgeworCQkJKmZyYWcgPSAwOworCQkJaW5vZGVfbW9kaWZpZWQrKzsKKwkJfSBlbHNlCisJCQlub3RfZml4ZWQrKzsKKwkJcGN0eC5udW0gPSAwOworCX0KKwlpZiAoZnNpemUgJiYgKmZzaXplKSB7CisJCXBjdHgubnVtID0gKmZzaXplOworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8yX0ZTSVpFX1pFUk8sICZwY3R4KSkgeworCQkJKmZzaXplID0gMDsKKwkJCWlub2RlX21vZGlmaWVkKys7CisJCX0gZWxzZQorCQkJbm90X2ZpeGVkKys7CisJCXBjdHgubnVtID0gMDsKKwl9CisKKwlpZiAoKGZzLT5zdXBlci0+c19jcmVhdG9yX29zID09IEVYVDJfT1NfTElOVVgpICYmCisJICAgICEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYKKwkgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSkgJiYKKwkgICAgKGlub2RlLm9zZDIubGludXgyLmxfaV9ibG9ja3NfaGkgIT0gMCkpIHsKKwkJcGN0eC5udW0gPSBpbm9kZS5vc2QyLmxpbnV4Mi5sX2lfYmxvY2tzX2hpOworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8yX0JMT0NLU19ISV9aRVJPLCAmcGN0eCkpIHsKKwkJCWlub2RlLm9zZDIubGludXgyLmxfaV9ibG9ja3NfaGkgPSAwOworCQkJaW5vZGVfbW9kaWZpZWQrKzsKKwkJfQorCX0KKworCWlmICgoZnMtPnN1cGVyLT5zX2NyZWF0b3Jfb3MgPT0gRVhUMl9PU19MSU5VWCkgJiYKKwkgICAgIShmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJICAgICBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpICYmCisJICAgIGlub2RlLm9zZDIubGludXgyLmxfaV9maWxlX2FjbF9oaWdoICE9IDApIHsKKwkJcGN0eC5udW0gPSBpbm9kZS5vc2QyLmxpbnV4Mi5sX2lfZmlsZV9hY2xfaGlnaDsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9JX0ZJTEVfQUNMX0hJX1pFUk8sICZwY3R4KSkgeworCQkJaW5vZGUub3NkMi5saW51eDIubF9pX2ZpbGVfYWNsX2hpZ2ggPSAwOworCQkJaW5vZGVfbW9kaWZpZWQrKzsKKwkJfSBlbHNlCisJCQlub3RfZml4ZWQrKzsKKwl9CisKKwlpZiAoZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCAmaW5vZGUpICYmCisJICAgICgoZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCAmaW5vZGUpIDwgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spIHx8CisJICAgICAoZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCAmaW5vZGUpID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkpKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzJfRklMRV9BQ0xfQkFELCAmcGN0eCkpIHsKKwkJCWV4dDJmc19maWxlX2FjbF9ibG9ja19zZXQoZnMsICZpbm9kZSwgMCk7CisJCQlpbm9kZV9tb2RpZmllZCsrOworCQl9IGVsc2UKKwkJCW5vdF9maXhlZCsrOworCX0KKwlpZiAoaW5vZGUuaV9kaXJfYWNsICYmCisJICAgIExJTlVYX1NfSVNESVIoaW5vZGUuaV9tb2RlKSkgeworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8yX0RJUl9BQ0xfWkVSTywgJnBjdHgpKSB7CisJCQlpbm9kZS5pX2Rpcl9hY2wgPSAwOworCQkJaW5vZGVfbW9kaWZpZWQrKzsKKwkJfSBlbHNlCisJCQlub3RfZml4ZWQrKzsKKwl9CisKKwlpZiAoaW5vZGVfbW9kaWZpZWQpCisJCWUyZnNja193cml0ZV9pbm9kZShjdHgsIGlubywgJmlub2RlLCAicHJvY2Vzc19iYWRfaW5vZGUiKTsKKwlpZiAoIW5vdF9maXhlZCAmJiBjdHgtPmlub2RlX2JhZF9tYXApCisJCWV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2JhZF9tYXAsIGlubyk7CisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIGFsbG9jYXRlX2Rpcl9ibG9jayAtLS0gdGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYSBuZXcgZGlyZWN0b3J5CisgKiAJYmxvY2sgZm9yIGEgcGFydGljdWxhciBpbm9kZTsgdGhpcyBpcyBkb25lIGlmIGEgZGlyZWN0b3J5IGhhcworICogCWEgImhvbGUiIGluIGl0LCBvciBpZiBhIGRpcmVjdG9yeSBoYXMgYSBpbGxlZ2FsIGJsb2NrIG51bWJlcgorICogCXRoYXQgd2FzIHplcm9lZCBvdXQgYW5kIG5vdyBuZWVkcyB0byBiZSByZXBsYWNlZC4KKyAqLworc3RhdGljIGludCBhbGxvY2F0ZV9kaXJfYmxvY2soZTJmc2NrX3QgY3R4LAorCQkJICAgICAgc3RydWN0IGV4dDJfZGJfZW50cnkyICpkYiwKKwkJCSAgICAgIGNoYXIgKmJ1ZiBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlibGs2NF90CQkJYmxrID0gMDsKKwljaGFyCQkJKmJsb2NrOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCisJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9ESVJFQ1RPUllfSE9MRSwgcGN0eCkgPT0gMCkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIFJlYWQgdGhlIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIGluOyB3ZSdsbCBiZSBtZXNzaW5nIHdpdGgKKwkgKiB0aGVtLgorCSAqLworCWUyZnNja19yZWFkX2JpdG1hcHMoY3R4KTsKKworCS8qCisJICogRmlyc3QsIGZpbmQgYSBmcmVlIGJsb2NrCisJICovCisJZTJmc2NrX3JlYWRfaW5vZGUoY3R4LCBkYi0+aW5vLCAmaW5vZGUsICJhbGxvY2F0ZV9kaXJfYmxvY2siKTsKKwlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX21hcF9jbHVzdGVyX2Jsb2NrKGZzLCBkYi0+aW5vLCAmaW5vZGUsCisJCQkJCQkgZGItPmJsb2NrY250LCAmYmxrKTsKKwlpZiAocGN0eC0+ZXJyY29kZSB8fCBibGsgPT0gMCkgeworCQlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX25ld19ibG9jazIoZnMsIDAsCisJCQkJCQkgIGN0eC0+YmxvY2tfZm91bmRfbWFwLCAmYmxrKTsKKwkJaWYgKHBjdHgtPmVycmNvZGUpIHsKKwkJCXBjdHgtPnN0ciA9ICJleHQyZnNfbmV3X2Jsb2NrIjsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMl9BTExPQ19ESVJCT0NLLCBwY3R4KTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19mb3VuZF9tYXAsIGJsayk7CisJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLCBibGspOworCWV4dDJmc19tYXJrX2JiX2RpcnR5KGZzKTsKKworCS8qCisJICogTm93IGxldCdzIGNyZWF0ZSB0aGUgYWN0dWFsIGRhdGEgYmxvY2sgZm9yIHRoZSBpbm9kZQorCSAqLworCWlmIChkYi0+YmxvY2tjbnQpCisJCXBjdHgtPmVycmNvZGUgPSBleHQyZnNfbmV3X2Rpcl9ibG9jayhmcywgMCwgMCwgJmJsb2NrKTsKKwllbHNlCisJCXBjdHgtPmVycmNvZGUgPSBleHQyZnNfbmV3X2Rpcl9ibG9jayhmcywgZGItPmlubywKKwkJCQkJCSAgICAgRVhUMl9ST09UX0lOTywgJmJsb2NrKTsKKworCWlmIChwY3R4LT5lcnJjb2RlKSB7CisJCXBjdHgtPnN0ciA9ICJleHQyZnNfbmV3X2Rpcl9ibG9jayI7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMl9BTExPQ19ESVJCT0NLLCBwY3R4KTsKKwkJcmV0dXJuIDE7CisJfQorCisJcGN0eC0+ZXJyY29kZSA9IGV4dDJmc193cml0ZV9kaXJfYmxvY2szKGZzLCBibGssIGJsb2NrLCAwKTsKKwlleHQyZnNfZnJlZV9tZW0oJmJsb2NrKTsKKwlpZiAocGN0eC0+ZXJyY29kZSkgeworCQlwY3R4LT5zdHIgPSAiZXh0MmZzX3dyaXRlX2Rpcl9ibG9jayI7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMl9BTExPQ19ESVJCT0NLLCBwY3R4KTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyoKKwkgKiBVcGRhdGUgdGhlIGlub2RlIGJsb2NrIGNvdW50CisJICovCisJZXh0MmZzX2libGtfYWRkX2Jsb2NrcyhmcywgJmlub2RlLCAxKTsKKwlpZiAoRVhUMl9JX1NJWkUoJmlub2RlKSA8IChkYi0+YmxvY2tjbnQrMSkgKiBmcy0+YmxvY2tzaXplKSB7CisJCXBjdHgtPmVycmNvZGUgPSBleHQyZnNfaW5vZGVfc2l6ZV9zZXQoZnMsICZpbm9kZSwKKwkJCQkJKGRiLT5ibG9ja2NudCsxKSAqIGZzLT5ibG9ja3NpemUpOworCQlpZiAocGN0eC0+ZXJyY29kZSkgeworCQkJcGN0eC0+c3RyID0gImV4dDJmc19pbm9kZV9zaXplX3NldCI7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzJfQUxMT0NfRElSQk9DSywgcGN0eCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBkYi0+aW5vLCAmaW5vZGUsICJhbGxvY2F0ZV9kaXJfYmxvY2siKTsKKworCS8qCisJICogRmluYWxseSwgdXBkYXRlIHRoZSBibG9jayBwb2ludGVycyBmb3IgdGhlIGlub2RlCisJICovCisJZGItPmJsayA9IGJsazsKKwlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2JtYXAyKGZzLCBkYi0+aW5vLCAmaW5vZGUsIDAsIEJNQVBfU0VULAorCQkJCSAgICAgZGItPmJsb2NrY250LCAwLCAmYmxrKTsKKwlpZiAocGN0eC0+ZXJyY29kZSkgeworCQlwY3R4LT5zdHIgPSAiZXh0MmZzX2Jsb2NrX2l0ZXJhdGUiOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzJfQUxMT0NfRElSQk9DSywgcGN0eCk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc2NrL3Bhc3MzLmMgYi9lMmZzY2svcGFzczMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjc0MjEzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL3Bhc3MzLmMKQEAgLTAsMCArMSw4NDAgQEAKKy8qCisgKiBwYXNzMy5jIC0tIHBhc3MgIzMgb2YgZTJmc2NrOiBDaGVjayBmb3IgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKgorICogUGFzcyAjMyBhc3N1cmVzIHRoYXQgYWxsIGRpcmVjdG9yaWVzIGFyZSBjb25uZWN0ZWQgdG8gdGhlCisgKiBmaWxlc3lzdGVtIHRyZWUsIHVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgorICoKKyAqIEZpcnN0LCB0aGUgcm9vdCBkaXJlY3RvcnkgaXMgY2hlY2tlZCB0byBtYWtlIHN1cmUgaXQgZXhpc3RzOyBpZgorICogbm90LCBlMmZzY2sgd2lsbCBvZmZlciB0byBjcmVhdGUgYSBuZXcgb25lLiAgSXQgaXMgdGhlbiBtYXJrZWQgYXMKKyAqICJkb25lIi4KKyAqCisgKiBUaGVuLCBwYXNzMyBpbnRlcmF0ZXMgb3ZlciBhbGwgZGlyZWN0b3J5IGlub2RlczsgZm9yIGVhY2ggZGlyZWN0b3J5CisgKiBpdCBhdHRlbXB0cyB0byB0cmFjZSB1cCB0aGUgZmlsZXN5c3RlbSB0cmVlLCB1c2luZyBkaXJpbmZvLnBhcmVudAorICogdW50aWwgaXQgcmVhY2hlcyBhIGRpcmVjdG9yeSB3aGljaCBoYXMgYmVlbiBtYXJrZWQgImRvbmUiLiAgSWYgaXQKKyAqIGNhbiBub3QgZG8gc28sIHRoZW4gdGhlIGRpcmVjdG9yeSBtdXN0IGJlIGRpc2Nvbm5lY3RlZCwgYW5kIGUyZnNjaworICogd2lsbCBvZmZlciB0byByZWNvbm5lY3QgaXQgdG8gL2xvc3QrZm91bmQuICBXaGlsZSBpdCBpcyBjaGFzaW5nCisgKiBwYXJlbnQgcG9pbnRlcnMgdXAgdGhlIGZpbGVzeXN0ZW0gdHJlZSwgaWYgcGFzczMgc2VlcyBhIGRpcmVjdG9yeQorICogdHdpY2UsIHRoZW4gaXQgaGFzIGRldGVjdGVkIGEgZmlsZXN5c3RlbSBsb29wLCBhbmQgaXQgd2lsbCBhZ2FpbgorICogb2ZmZXIgdG8gcmVjb25uZWN0IHRoZSBkaXJlY3RvcnkgdG8gL2xvc3QrZm91bmQgaW4gdG8gYnJlYWsgdGhlCisgKiBmaWxlc3lzdGVtIGxvb3AuCisgKgorICogUGFzcyAzIGFsc28gY29udGFpbnMgdGhlIHN1YnJvdXRpbmUsIGUyZnNja19yZWNvbm5lY3RfZmlsZSgpIHRvCisgKiByZWNvbm5lY3QgaW5vZGVzIHRvIC9sb3N0K2ZvdW5kOyB0aGlzIHN1YnJvdXRpbmUgaXMgYWxzbyB1c2VkIGJ5CisgKiBwYXNzIDQuICBlMmZzY2tfcmVjb25uZWN0X2ZpbGUoKSBjYWxscyBnZXRfbG9zdF9hbmRfZm91bmQoKSwgd2hpY2gKKyAqIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyAvbG9zdCtmb3VuZCBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKyAqCisgKiBQYXNzIDMgZnJlZXMgdGhlIGZvbGxvd2luZyBkYXRhIHN0cnVjdHVyZXM6CisgKiAgICAgCS0gVGhlIGRpcmluZm8gZGlyZWN0b3J5IGluZm9ybWF0aW9uIGNhY2hlLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJlMmZzY2suaCIKKyNpbmNsdWRlICJwcm9ibGVtLmgiCisKK3N0YXRpYyB2b2lkIGNoZWNrX3Jvb3QoZTJmc2NrX3QgY3R4KTsKK3N0YXRpYyBpbnQgY2hlY2tfZGlyZWN0b3J5KGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KTsKK3N0YXRpYyB2b2lkIGZpeF9kb3Rkb3QoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubywgZXh0Ml9pbm9fdCBwYXJlbnQpOworCitzdGF0aWMgZXh0MmZzX2lub2RlX2JpdG1hcCBpbm9kZV9sb29wX2RldGVjdCA9IDA7CitzdGF0aWMgZXh0MmZzX2lub2RlX2JpdG1hcCBpbm9kZV9kb25lX21hcCA9IDA7CisKK3ZvaWQgZTJmc2NrX3Bhc3MzKGUyZnNja190IGN0eCkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJc3RydWN0IGRpcl9pbmZvX2l0ZXIgKml0ZXIgPSBOVUxMOworI2lmZGVmIFJFU09VUkNFX1RSQUNLCisJc3RydWN0IHJlc291cmNlX3RyYWNrCXJ0cmFjazsKKyNlbmRpZgorCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwlzdHJ1Y3QgZGlyX2luZm8JKmRpcjsKKwl1bnNpZ25lZCBsb25nIG1heGRpcnMsIGNvdW50OworCisJaW5pdF9yZXNvdXJjZV90cmFjaygmcnRyYWNrLCBjdHgtPmZzLT5pbyk7CisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworI2lmZGVmIE1UUkFDRQorCW10cmFjZV9wcmludCgiUGFzcyAzIik7CisjZW5kaWYKKworCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pKQorCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfUEFTU19IRUFERVIsICZwY3R4KTsKKworCS8qCisJICogQWxsb2NhdGUgc29tZSBiaXRtYXBzIHRvIGRvIGxvb3AgZGV0ZWN0aW9uLgorCSAqLworCXBjdHguZXJyY29kZSA9IGUyZnNja19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoZnMsIF8oImlub2RlIGRvbmUgYml0bWFwIiksCisJCQkJCUVYVDJGU19CTUFQNjRfQVVUT0RJUiwKKwkJCQkJImlub2RlX2RvbmVfbWFwIiwgJmlub2RlX2RvbmVfbWFwKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCXBjdHgubnVtID0gMjsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8zX0FMTE9DQVRFX0lCSVRNQVBfRVJST1IsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJZ290byBhYm9ydF9leGl0OworCX0KKwlwcmludF9yZXNvdXJjZV90cmFjayhjdHgsIF8oIlBlYWsgbWVtb3J5IiksICZjdHgtPmdsb2JhbF9ydHJhY2ssIE5VTEwpOworCisJY2hlY2tfcm9vdChjdHgpOworCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCWdvdG8gYWJvcnRfZXhpdDsKKworCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoaW5vZGVfZG9uZV9tYXAsIEVYVDJfUk9PVF9JTk8pOworCisJbWF4ZGlycyA9IGUyZnNja19nZXRfbnVtX2RpcmluZm8oY3R4KTsKKwljb3VudCA9IDE7CisKKwlpZiAoY3R4LT5wcm9ncmVzcykKKwkJaWYgKChjdHgtPnByb2dyZXNzKShjdHgsIDMsIDAsIG1heGRpcnMpKQorCQkJZ290byBhYm9ydF9leGl0OworCisJaXRlciA9IGUyZnNja19kaXJfaW5mb19pdGVyX2JlZ2luKGN0eCk7CisJd2hpbGUgKChkaXIgPSBlMmZzY2tfZGlyX2luZm9faXRlcihjdHgsIGl0ZXIpKSAhPSAwKSB7CisJCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCQlnb3RvIGFib3J0X2V4aXQ7CisJCWlmIChjdHgtPnByb2dyZXNzICYmIChjdHgtPnByb2dyZXNzKShjdHgsIDMsIGNvdW50KyssIG1heGRpcnMpKQorCQkJZ290byBhYm9ydF9leGl0OworCQlpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2Rpcl9tYXAsIGRpci0+aW5vKSkKKwkJCWlmIChjaGVja19kaXJlY3RvcnkoY3R4LCBkaXItPmlubywgJnBjdHgpKQorCQkJCWdvdG8gYWJvcnRfZXhpdDsKKwl9CisKKwkvKgorCSAqIEZvcmNlIHRoZSBjcmVhdGlvbiBvZiAvbG9zdCtmb3VuZCBpZiBub3QgcHJlc2VudAorCSAqLworCWlmICgoY3R4LT5vcHRpb25zICYgRTJGX09QVF9SRUFET05MWSkgPT0gMCkKKwkJZTJmc2NrX2dldF9sb3N0X2FuZF9mb3VuZChjdHgsIDEpOworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgYW55IGRpcmVjdG9yaWVzIHRoYXQgbmVlZCB0byBiZSBpbmRleGVkIG9yCisJICogb3B0aW1pemVkLCBkbyBpdCBoZXJlLgorCSAqLworCWUyZnNja19yZWhhc2hfZGlyZWN0b3JpZXMoY3R4KTsKKworYWJvcnRfZXhpdDoKKwlpZiAoaXRlcikKKwkJZTJmc2NrX2Rpcl9pbmZvX2l0ZXJfZW5kKGN0eCwgaXRlcik7CisJZTJmc2NrX2ZyZWVfZGlyX2luZm8oY3R4KTsKKwlpZiAoaW5vZGVfbG9vcF9kZXRlY3QpIHsKKwkJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGlub2RlX2xvb3BfZGV0ZWN0KTsKKwkJaW5vZGVfbG9vcF9kZXRlY3QgPSAwOworCX0KKwlpZiAoaW5vZGVfZG9uZV9tYXApIHsKKwkJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGlub2RlX2RvbmVfbWFwKTsKKwkJaW5vZGVfZG9uZV9tYXAgPSAwOworCX0KKworCWlmIChjdHgtPmxuZl9yZXBhaXJfYmxvY2spIHsKKwkJZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLAorCQkJCQkgICAgY3R4LT5sbmZfcmVwYWlyX2Jsb2NrKTsKKwkJY3R4LT5sbmZfcmVwYWlyX2Jsb2NrID0gMDsKKwl9CisJaWYgKGN0eC0+cm9vdF9yZXBhaXJfYmxvY2spIHsKKwkJZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLAorCQkJCQkgICAgY3R4LT5yb290X3JlcGFpcl9ibG9jayk7CisJCWN0eC0+cm9vdF9yZXBhaXJfYmxvY2sgPSAwOworCX0KKworCXByaW50X3Jlc291cmNlX3RyYWNrKGN0eCwgXygiUGFzcyAzIiksICZydHJhY2ssIGN0eC0+ZnMtPmlvKTsKK30KKworLyoKKyAqIFRoaXMgbWFrZXMgc3VyZSB0aGUgcm9vdCBpbm9kZSBpcyBwcmVzZW50OyBpZiBub3QsIHdlIGFzayBpZiB0aGUKKyAqIHVzZXIgd2FudHMgdXMgdG8gY3JlYXRlIGl0LiAgTm90IGNyZWF0aW5nIGl0IGlzIGEgZmF0YWwgZXJyb3IuCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX3Jvb3QoZTJmc2NrX3QgY3R4KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlibGs2NF90CQkJYmxrOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCWNoYXIgKgkJCWJsb2NrOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwlpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX3VzZWRfbWFwLCBFWFQyX1JPT1RfSU5PKSkgeworCQkvKgorCQkgKiBJZiB0aGUgcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnksIGRpZSBoZXJlLiAgVGhlCisJCSAqIHVzZXIgbXVzdCBoYXZlIGFuc3dlcmVkICdubycgaW4gcGFzczEgd2hlbiB3ZQorCQkgKiBvZmZlcmVkIHRvIGNsZWFyIGl0LgorCQkgKi8KKwkJaWYgKCEoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2Rpcl9tYXAsCisJCQkJCSAgICAgICBFWFQyX1JPT1RfSU5PKSkpIHsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM19ST09UX05PVF9ESVJfQUJPUlQsICZwY3R4KTsKKwkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWlmICghZml4X3Byb2JsZW0oY3R4LCBQUl8zX05PX1JPT1RfSU5PREUsICZwY3R4KSkgeworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfTk9fUk9PVF9JTk9ERV9BQk9SVCwgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCisJZTJmc2NrX3JlYWRfYml0bWFwcyhjdHgpOworCisJLyoKKwkgKiBGaXJzdCwgZmluZCBhIGZyZWUgYmxvY2sKKwkgKi8KKwlpZiAoY3R4LT5yb290X3JlcGFpcl9ibG9jaykgeworCQlibGsgPSBjdHgtPnJvb3RfcmVwYWlyX2Jsb2NrOworCQljdHgtPnJvb3RfcmVwYWlyX2Jsb2NrID0gMDsKKwkJZ290byBza2lwX25ld19ibG9jazsKKwl9CisJcGN0eC5lcnJjb2RlID0gZXh0MmZzX25ld19ibG9jazIoZnMsIDAsIGN0eC0+YmxvY2tfZm91bmRfbWFwLCAmYmxrKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCXBjdHguc3RyID0gImV4dDJmc19uZXdfYmxvY2siOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfQ1JFQVRFX1JPT1RfRVJST1IsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJcmV0dXJuOworCX0KKwlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLCBibGspOworc2tpcF9uZXdfYmxvY2s6CisJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLCBibGspOworCWV4dDJmc19tYXJrX2JiX2RpcnR5KGZzKTsKKworCS8qCisJICogTm93IGxldCdzIGNyZWF0ZSB0aGUgYWN0dWFsIGRhdGEgYmxvY2sgZm9yIHRoZSBpbm9kZQorCSAqLworCXBjdHguZXJyY29kZSA9IGV4dDJmc19uZXdfZGlyX2Jsb2NrKGZzLCBFWFQyX1JPT1RfSU5PLCBFWFQyX1JPT1RfSU5PLAorCQkJCQkgICAgJmJsb2NrKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCXBjdHguc3RyID0gImV4dDJmc19uZXdfZGlyX2Jsb2NrIjsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8zX0NSRUFURV9ST09UX0VSUk9SLCAmcGN0eCk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCXJldHVybjsKKwl9CisKKwlwY3R4LmVycmNvZGUgPSBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrMyhmcywgYmxrLCBibG9jaywgMCk7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlwY3R4LnN0ciA9ICJleHQyZnNfd3JpdGVfZGlyX2Jsb2NrMyI7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM19DUkVBVEVfUk9PVF9FUlJPUiwgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCWV4dDJmc19mcmVlX21lbSgmYmxvY2spOworCisJLyoKKwkgKiBTZXQgdXAgdGhlIGlub2RlIHN0cnVjdHVyZQorCSAqLworCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworCWlub2RlLmlfbW9kZSA9IDA0MDc1NTsKKwlpbm9kZS5pX3NpemUgPSBmcy0+YmxvY2tzaXplOworCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9IGN0eC0+bm93OworCWlub2RlLmlfbGlua3NfY291bnQgPSAyOworCWV4dDJmc19pYmxrX3NldChmcywgJmlub2RlLCAxKTsKKwlpbm9kZS5pX2Jsb2NrWzBdID0gYmxrOworCisJLyoKKwkgKiBXcml0ZSBvdXQgdGhlIGlub2RlLgorCSAqLworCXBjdHguZXJyY29kZSA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZnMsIEVYVDJfUk9PVF9JTk8sICZpbm9kZSk7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlwY3R4LnN0ciA9ICJleHQyZnNfd3JpdGVfaW5vZGUiOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfQ1JFQVRFX1JPT1RfRVJST1IsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogTWlzY2VsbGFuZW91cyBib29ra2VlcGluZy4uLgorCSAqLworCWUyZnNja19hZGRfZGlyX2luZm8oY3R4LCBFWFQyX1JPT1RfSU5PLCBFWFQyX1JPT1RfSU5PKTsKKwlleHQyZnNfaWNvdW50X3N0b3JlKGN0eC0+aW5vZGVfY291bnQsIEVYVDJfUk9PVF9JTk8sIDIpOworCWV4dDJmc19pY291bnRfc3RvcmUoY3R4LT5pbm9kZV9saW5rX2luZm8sIEVYVDJfUk9PVF9JTk8sIDIpOworCisJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX3VzZWRfbWFwLCBFWFQyX1JPT1RfSU5PKTsKKwlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfZGlyX21hcCwgRVhUMl9ST09UX0lOTyk7CisJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihmcy0+aW5vZGVfbWFwLCBFWFQyX1JPT1RfSU5PKTsKKwlleHQyZnNfbWFya19pYl9kaXJ0eShmcyk7Cit9CisKKy8qCisgKiBUaGlzIHN1YnJvdXRpbmUgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoYXQgYSBwYXJ0aWN1bGFyCisgKiBkaXJlY3RvcnkgaXMgY29ubmVjdGVkIHRvIHRoZSByb290OyBpZiBpdCBpc24ndCB3ZSB0cmFjZSBpdCB1cCBhcworICogZmFyIGFzIHdlIGNhbiBnbywgYW5kIHRoZW4gb2ZmZXIgdG8gY29ubmVjdCB0aGUgcmVzdWx0aW5nIHBhcmVudCB0bworICogdGhlIGxvc3QrZm91bmQuICBXZSBoYXZlIHRvIGRvIGxvb3AgZGV0ZWN0aW9uOyBpZiB3ZSBldmVyIGRpc2NvdmVyCisgKiBhIGxvb3AsIHdlIHRyZWF0IHRoYXQgYXMgYSBkaXNjb25uZWN0ZWQgZGlyZWN0b3J5IGFuZCBvZmZlciB0bworICogcmVwYXJlbnQgaXQgdG8gbG9zdCtmb3VuZC4KKyAqCisgKiBIb3dldmVyLCBsb29wIGRldGVjdGlvbiBpcyBleHBlbnNpdmUsIGJlY2F1c2UgZm9yIHZlcnkgbGFyZ2UKKyAqIGZpbGVzeXN0ZW1zLCB0aGUgaW5vZGVfbG9vcF9kZXRlY3QgYml0bWFwIGlzIGh1Z2UsIGFuZCBjbGVhcmluZyBpdAorICogaXMgbm9uLXRyaXZpYWwuICBMb29wcyBpbiBmaWxlc3lzdGVtcyBhcmUgYWxzbyBhIHJhcmUgZXJyb3IgY2FzZSwKKyAqIGFuZCB3ZSBzaG91bGRuJ3Qgb3B0aW1pemUgZm9yIGVycm9yIGNhc2VzLiAgU28gd2UgdHJ5IHR3byBwYXNzZXMgb2YKKyAqIHRoZSBhbGdvcml0aG0uICBUaGUgZmlyc3QgdGltZSwgd2UgaWdub3JlIGxvb3AgZGV0ZWN0aW9uIGFuZCBtZXJlbHkKKyAqIGluY3JlbWVudCBhIGNvdW50ZXI7IGlmIHRoZSBjb3VudGVyIGV4Y2VlZHMgc29tZSBleHRyZW1lIHRocmVzaG9sZCwKKyAqIHRoZW4gd2UgdHJ5IGFnYWluIHdpdGggdGhlIGxvb3AgZGV0ZWN0aW9uIGJpdG1hcCBlbmFibGVkLgorICovCitzdGF0aWMgaW50IGNoZWNrX2RpcmVjdG9yeShlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgZGlyLAorCQkJICAgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCkKK3sKKwlleHQyX2ZpbHN5cyAJZnMgPSBjdHgtPmZzOworCWV4dDJfaW5vX3QJaW5vID0gZGlyLCBwYXJlbnQ7CisJaW50CQlsb29wX3Bhc3MgPSAwLCBwYXJlbnRfY291bnQgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJLyoKKwkJICogTWFyayB0aGlzIGlub2RlIGFzIGJlaW5nICJkb25lIjsgYnkgdGhlIHRpbWUgd2UKKwkJICogcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiwgdGhlIGlub2RlIHdlIGVpdGhlciBiZQorCQkgKiB2ZXJpZmllZCBhcyBiZWluZyBjb25uZWN0ZWQgdG8gdGhlIGRpcmVjdG9yeSB0cmVlLAorCQkgKiBvciB3ZSB3aWxsIGhhdmUgb2ZmZXJlZCB0byByZWNvbm5lY3QgdGhpcyB0bworCQkgKiBsb3N0K2ZvdW5kLgorCQkgKgorCQkgKiBJZiBpdCB3YXMgbWFya2VkIGRvbmUgYWxyZWFkeSwgdGhlbiB3ZSd2ZSByZWFjaGVkIGEKKwkJICogcGFyZW50IHdlJ3ZlIGFscmVhZHkgY2hlY2tlZC4KKwkJICovCisJICAJaWYgKGV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoaW5vZGVfZG9uZV9tYXAsIGlubykpCisJCQlicmVhazsKKworCQlpZiAoZTJmc2NrX2Rpcl9pbmZvX2dldF9wYXJlbnQoY3R4LCBpbm8sICZwYXJlbnQpKSB7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfTk9fRElSSU5GTywgcGN0eCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoaXMgZGlyZWN0b3J5IGRvZXNuJ3QgaGF2ZSBhIHBhcmVudCwgb3Igd2UndmUKKwkJICogc2VlbiB0aGUgcGFyZW50IG9uY2UgYWxyZWFkeSwgdGhlbiBvZmZlciB0bworCQkgKiByZXBhcmVudCBpdCB0byBsb3N0K2ZvdW5kCisJCSAqLworCQlpZiAoIXBhcmVudCB8fAorCQkgICAgKGxvb3BfcGFzcyAmJgorCQkgICAgIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGlub2RlX2xvb3BfZGV0ZWN0LAorCQkJCQkgICAgICAgcGFyZW50KSkpKSB7CisJCQlwY3R4LT5pbm8gPSBpbm87CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8zX1VOQ09OTkVDVEVEX0RJUiwgcGN0eCkpIHsKKwkJCQlpZiAoZTJmc2NrX3JlY29ubmVjdF9maWxlKGN0eCwgcGN0eC0+aW5vKSkKKwkJCQkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisJCQkJZWxzZSB7CisJCQkJCWZpeF9kb3Rkb3QoY3R4LCBwY3R4LT5pbm8sCisJCQkJCQkgICBjdHgtPmxvc3RfYW5kX2ZvdW5kKTsKKwkJCQkJcGFyZW50ID0gY3R4LT5sb3N0X2FuZF9mb3VuZDsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlpbm8gPSBwYXJlbnQ7CisJCWlmIChsb29wX3Bhc3MpIHsKKwkJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoaW5vZGVfbG9vcF9kZXRlY3QsIGlubyk7CisJCX0gZWxzZSBpZiAocGFyZW50X2NvdW50KysgPiAyMDQ4KSB7CisJCQkvKgorCQkJICogSWYgd2UndmUgcnVuIGludG8gYSBwYXRoIGRlcHRoIHRoYXQncworCQkJICogZ3JlYXRlciB0aGFuIDIwNDgsIHRyeSBhZ2FpbiB3aXRoIHRoZSBpbm9kZQorCQkJICogbG9vcCBiaXRtYXAgdHVybmVkIG9uIGFuZCBzdGFydCBmcm9tIHRoZQorCQkJICogdG9wLgorCQkJICovCisJCQlsb29wX3Bhc3MgPSAxOworCQkJaWYgKGlub2RlX2xvb3BfZGV0ZWN0KQorCQkJCWV4dDJmc19jbGVhcl9pbm9kZV9iaXRtYXAoaW5vZGVfbG9vcF9kZXRlY3QpOworCQkJZWxzZSB7CisJCQkJcGN0eC0+ZXJyY29kZSA9IGUyZnNja19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoZnMsIF8oImlub2RlIGxvb3AgZGV0ZWN0aW9uIGJpdG1hcCIpLCBFWFQyRlNfQk1BUDY0X0FVVE9ESVIsICJpbm9kZV9sb29wX2RldGVjdCIsICZpbm9kZV9sb29wX2RldGVjdCk7CisJCQkJaWYgKHBjdHgtPmVycmNvZGUpIHsKKwkJCQkJcGN0eC0+bnVtID0gMTsKKwkJCQkJZml4X3Byb2JsZW0oY3R4LAorCQkJCSAgICBQUl8zX0FMTE9DQVRFX0lCSVRNQVBfRVJST1IsIHBjdHgpOworCQkJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJfQorCQkJaW5vID0gZGlyOworCQl9CisJfQorCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCAuLiBhbmQgdGhlIHBhcmVudCBkaXJlY3RvcnkgYXJlIHRoZSBzYW1lOworCSAqIG9mZmVyIHRvIGZpeCBpdCBpZiBub3QuCisJICovCisJcGN0eC0+aW5vID0gZGlyOworCWlmIChlMmZzY2tfZGlyX2luZm9fZ2V0X2RvdGRvdChjdHgsIGRpciwgJnBjdHgtPmlubzIpIHx8CisJICAgIGUyZnNja19kaXJfaW5mb19nZXRfcGFyZW50KGN0eCwgZGlyLCAmcGN0eC0+ZGlyKSkgeworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfTk9fRElSSU5GTywgcGN0eCk7CisJCXJldHVybiAwOworCX0KKwlpZiAocGN0eC0+aW5vMiAhPSBwY3R4LT5kaXIpIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfM19CQURfRE9UX0RPVCwgcGN0eCkpCisJCQlmaXhfZG90ZG90KGN0eCwgZGlyLCBwY3R4LT5kaXIpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBnZXRzIHRoZSBsb3N0X2FuZF9mb3VuZCBpbm9kZSwgbWFraW5nIGl0IGEgZGlyZWN0b3J5CisgKiBpZiBuZWNlc3NhcnkKKyAqLworZXh0Ml9pbm9fdCBlMmZzY2tfZ2V0X2xvc3RfYW5kX2ZvdW5kKGUyZnNja190IGN0eCwgaW50IGZpeCkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJZXh0Ml9pbm9fdAkJCWlubzsKKwlibGs2NF90CQkJYmxrOworCWVycmNvZGVfdAkJcmV0dmFsOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCWNoYXIgKgkJCWJsb2NrOworCXN0YXRpYyBjb25zdCBjaGFyCW5hbWVbXSA9ICJsb3N0K2ZvdW5kIjsKKwlzdHJ1Y3QgCXByb2JsZW1fY29udGV4dAlwY3R4OworCisJaWYgKGN0eC0+bG9zdF9hbmRfZm91bmQpCisJCXJldHVybiBjdHgtPmxvc3RfYW5kX2ZvdW5kOworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCXJldHZhbCA9IGV4dDJmc19sb29rdXAoZnMsIEVYVDJfUk9PVF9JTk8sIG5hbWUsCisJCQkgICAgICAgc2l6ZW9mKG5hbWUpLTEsIDAsICZpbm8pOworCWlmIChyZXR2YWwgJiYgIWZpeCkKKwkJcmV0dXJuIDA7CisJaWYgKCFyZXR2YWwpIHsKKwkJaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9kaXJfbWFwLCBpbm8pKSB7CisJCQljdHgtPmxvc3RfYW5kX2ZvdW5kID0gaW5vOworCQkJcmV0dXJuIGlubzsKKwkJfQorCisJCS8qIExvc3QrZm91bmQgaXNuJ3QgYSBkaXJlY3RvcnkhICovCisJCWlmICghZml4KQorCQkJcmV0dXJuIDA7CisJCXBjdHguaW5vID0gaW5vOworCQlpZiAoIWZpeF9wcm9ibGVtKGN0eCwgUFJfM19MUEZfTk9URElSLCAmcGN0eCkpCisJCQlyZXR1cm4gMDsKKworCQkvKiBPSywgdW5saW5rIHRoZSBvbGQgL2xvc3QrZm91bmQgZmlsZS4gKi8KKwkJcGN0eC5lcnJjb2RlID0gZXh0MmZzX3VubGluayhmcywgRVhUMl9ST09UX0lOTywgbmFtZSwgaW5vLCAwKTsKKwkJaWYgKHBjdHguZXJyY29kZSkgeworCQkJcGN0eC5zdHIgPSAiZXh0MmZzX3VubGluayI7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfQ1JFQVRFX0xQRl9FUlJPUiwgJnBjdHgpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJKHZvaWQpIGUyZnNja19kaXJfaW5mb19zZXRfcGFyZW50KGN0eCwgaW5vLCAwKTsKKwkJZTJmc2NrX2FkanVzdF9pbm9kZV9jb3VudChjdHgsIGlubywgLTEpOworCX0gZWxzZSBpZiAocmV0dmFsICE9IEVYVDJfRVRfRklMRV9OT1RfRk9VTkQpIHsKKwkJcGN0eC5lcnJjb2RlID0gcmV0dmFsOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfRVJSX0ZJTkRfTFBGLCAmcGN0eCk7CisJfQorCWlmICghZml4X3Byb2JsZW0oY3R4LCBQUl8zX05PX0xGX0RJUiwgMCkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBSZWFkIHRoZSBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcyBpbjsgd2UnbGwgYmUgbWVzc2luZyB3aXRoCisJICogdGhlbS4KKwkgKi8KKwllMmZzY2tfcmVhZF9iaXRtYXBzKGN0eCk7CisKKwkvKgorCSAqIEZpcnN0LCBmaW5kIGEgZnJlZSBibG9jaworCSAqLworCWlmIChjdHgtPmxuZl9yZXBhaXJfYmxvY2spIHsKKwkJYmxrID0gY3R4LT5sbmZfcmVwYWlyX2Jsb2NrOworCQljdHgtPmxuZl9yZXBhaXJfYmxvY2sgPSAwOworCQlnb3RvIHNraXBfbmV3X2Jsb2NrOworCX0KKwlyZXR2YWwgPSBleHQyZnNfbmV3X2Jsb2NrMihmcywgMCwgY3R4LT5ibG9ja19mb3VuZF9tYXAsICZibGspOworCWlmIChyZXR2YWwpIHsKKwkJcGN0eC5lcnJjb2RlID0gcmV0dmFsOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfRVJSX0xQRl9ORVdfQkxPQ0ssICZwY3R4KTsKKwkJcmV0dXJuIDA7CisJfQorCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19mb3VuZF9tYXAsIGJsayk7Citza2lwX25ld19ibG9jazoKKwlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBibGssICsxKTsKKworCS8qCisJICogTmV4dCBmaW5kIGEgZnJlZSBpbm9kZS4KKwkgKi8KKwlyZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGZzLCBFWFQyX1JPT1RfSU5PLCAwNDA3MDAsCisJCQkJICBjdHgtPmlub2RlX3VzZWRfbWFwLCAmaW5vKTsKKwlpZiAocmV0dmFsKSB7CisJCXBjdHguZXJyY29kZSA9IHJldHZhbDsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8zX0VSUl9MUEZfTkVXX0lOT0RFLCAmcGN0eCk7CisJCXJldHVybiAwOworCX0KKwlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfdXNlZF9tYXAsIGlubyk7CisJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2Rpcl9tYXAsIGlubyk7CisJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihmcywgaW5vLCArMSwgMSk7CisKKwkvKgorCSAqIE5vdyBsZXQncyBjcmVhdGUgdGhlIGFjdHVhbCBkYXRhIGJsb2NrIGZvciB0aGUgaW5vZGUKKwkgKi8KKwlyZXR2YWwgPSBleHQyZnNfbmV3X2Rpcl9ibG9jayhmcywgaW5vLCBFWFQyX1JPT1RfSU5PLCAmYmxvY2spOworCWlmIChyZXR2YWwpIHsKKwkJcGN0eC5lcnJjb2RlID0gcmV0dmFsOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfRVJSX0xQRl9ORVdfRElSX0JMT0NLLCAmcGN0eCk7CisJCXJldHVybiAwOworCX0KKworCXJldHZhbCA9IGV4dDJmc193cml0ZV9kaXJfYmxvY2szKGZzLCBibGssIGJsb2NrLCAwKTsKKwlleHQyZnNfZnJlZV9tZW0oJmJsb2NrKTsKKwlpZiAocmV0dmFsKSB7CisJCXBjdHguZXJyY29kZSA9IHJldHZhbDsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8zX0VSUl9MUEZfV1JJVEVfQkxPQ0ssICZwY3R4KTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBTZXQgdXAgdGhlIGlub2RlIHN0cnVjdHVyZQorCSAqLworCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworCWlub2RlLmlfbW9kZSA9IDA0MDcwMDsKKwlpbm9kZS5pX3NpemUgPSBmcy0+YmxvY2tzaXplOworCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9IGN0eC0+bm93OworCWlub2RlLmlfbGlua3NfY291bnQgPSAyOworCWV4dDJmc19pYmxrX3NldChmcywgJmlub2RlLCAxKTsKKwlpbm9kZS5pX2Jsb2NrWzBdID0gYmxrOworCisJLyoKKwkgKiBOZXh0LCB3cml0ZSBvdXQgdGhlIGlub2RlLgorCSAqLworCXBjdHguZXJyY29kZSA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZnMsIGlubywgJmlub2RlKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCXBjdHguc3RyID0gImV4dDJmc193cml0ZV9pbm9kZSI7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM19DUkVBVEVfTFBGX0VSUk9SLCAmcGN0eCk7CisJCXJldHVybiAwOworCX0KKwkvKgorCSAqIEZpbmFsbHksIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGxpbmsKKwkgKi8KKwlwY3R4LmVycmNvZGUgPSBleHQyZnNfbGluayhmcywgRVhUMl9ST09UX0lOTywgbmFtZSwgaW5vLCBFWFQyX0ZUX0RJUik7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlwY3R4LnN0ciA9ICJleHQyZnNfbGluayI7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM19DUkVBVEVfTFBGX0VSUk9SLCAmcGN0eCk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogTWlzY2VsbGFuZW91cyBib29ra2VlcGluZyB0aGF0IG5lZWRzIHRvIGJlIGtlcHQgc3RyYWlnaHQuCisJICovCisJZTJmc2NrX2FkZF9kaXJfaW5mbyhjdHgsIGlubywgRVhUMl9ST09UX0lOTyk7CisJZTJmc2NrX2FkanVzdF9pbm9kZV9jb3VudChjdHgsIEVYVDJfUk9PVF9JTk8sIDEpOworCWV4dDJmc19pY291bnRfc3RvcmUoY3R4LT5pbm9kZV9jb3VudCwgaW5vLCAyKTsKKwlleHQyZnNfaWNvdW50X3N0b3JlKGN0eC0+aW5vZGVfbGlua19pbmZvLCBpbm8sIDIpOworCWN0eC0+bG9zdF9hbmRfZm91bmQgPSBpbm87CisJcXVvdGFfZGF0YV9hZGQoY3R4LT5xY3R4LCAmaW5vZGUsIGlubywgZnMtPmJsb2Nrc2l6ZSk7CisJcXVvdGFfZGF0YV9pbm9kZXMoY3R4LT5xY3R4LCAmaW5vZGUsIGlubywgKzEpOworI2lmIDAKKwlwcmludGYoIi9sb3N0K2ZvdW5kIGNyZWF0ZWQ7IGlub2RlICMlbHVcbiIsIGlubyk7CisjZW5kaWYKKwlyZXR1cm4gaW5vOworfQorCisvKgorICogVGhpcyByb3V0aW5lIHdpbGwgY29ubmVjdCBhIGZpbGUgdG8gbG9zdCtmb3VuZAorICovCitpbnQgZTJmc2NrX3JlY29ubmVjdF9maWxlKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8pCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJbmFtZVs4MF07CisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCXN0cnVjdCBleHQyX2lub2RlIAlpbm9kZTsKKwlpbnQJCWZpbGVfdHlwZSA9IDA7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCXBjdHguaW5vID0gaW5vOworCisJaWYgKCFjdHgtPmJhZF9sb3N0X2FuZF9mb3VuZCAmJiAhY3R4LT5sb3N0X2FuZF9mb3VuZCkgeworCQlpZiAoZTJmc2NrX2dldF9sb3N0X2FuZF9mb3VuZChjdHgsIDEpID09IDApCisJCQljdHgtPmJhZF9sb3N0X2FuZF9mb3VuZCsrOworCX0KKwlpZiAoY3R4LT5iYWRfbG9zdF9hbmRfZm91bmQpIHsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8zX05PX0xQRiwgJnBjdHgpOworCQlyZXR1cm4gMTsKKwl9CisKKwlzcHJpbnRmKG5hbWUsICIjJXUiLCBpbm8pOworCWlmIChleHQyZnNfcmVhZF9pbm9kZShmcywgaW5vLCAmaW5vZGUpID09IDApCisJCWZpbGVfdHlwZSA9IGV4dDJfZmlsZV90eXBlKGlub2RlLmlfbW9kZSk7CisJcmV0dmFsID0gZXh0MmZzX2xpbmsoZnMsIGN0eC0+bG9zdF9hbmRfZm91bmQsIG5hbWUsIGlubywgZmlsZV90eXBlKTsKKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisJCWlmICghZml4X3Byb2JsZW0oY3R4LCBQUl8zX0VYUEFORF9MRl9ESVIsICZwY3R4KSkKKwkJCXJldHVybiAxOworCQlyZXR2YWwgPSBlMmZzY2tfZXhwYW5kX2RpcmVjdG9yeShjdHgsIGN0eC0+bG9zdF9hbmRfZm91bmQsCisJCQkJCQkgMSwgMCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCXBjdHguZXJyY29kZSA9IHJldHZhbDsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM19DQU5UX0VYUEFORF9MUEYsICZwY3R4KTsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19saW5rKGZzLCBjdHgtPmxvc3RfYW5kX2ZvdW5kLCBuYW1lLAorCQkJCSAgICAgaW5vLCBmaWxlX3R5cGUpOworCX0KKwlpZiAocmV0dmFsKSB7CisJCXBjdHguZXJyY29kZSA9IHJldHZhbDsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8zX0NBTlRfUkVDT05ORUNULCAmcGN0eCk7CisJCXJldHVybiAxOworCX0KKwllMmZzY2tfYWRqdXN0X2lub2RlX2NvdW50KGN0eCwgaW5vLCAxKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVXRpbGl0eSByb3V0aW5lIHRvIGFkanVzdCB0aGUgaW5vZGUgY291bnRzIG9uIGFuIGlub2RlLgorICovCitlcnJjb2RlX3QgZTJmc2NrX2FkanVzdF9pbm9kZV9jb3VudChlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLCBpbnQgYWRqKQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSAJaW5vZGU7CisKKwlpZiAoIWlubykKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgaW5vLCAmaW5vZGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKyNpZiAwCisJcHJpbnRmKCJBZGp1c3RpbmcgbGluayBjb3VudCBmb3IgaW5vZGUgJWx1IGJ5ICVkIChmcm9tICVkKVxuIiwgaW5vLCBhZGosCisJICAgICAgIGlub2RlLmlfbGlua3NfY291bnQpOworI2VuZGlmCisKKwlpZiAoYWRqID09IDEpIHsKKwkJZXh0MmZzX2ljb3VudF9pbmNyZW1lbnQoY3R4LT5pbm9kZV9jb3VudCwgaW5vLCAwKTsKKwkJaWYgKGlub2RlLmlfbGlua3NfY291bnQgPT0gKF9fdTE2KSB+MCkKKwkJCXJldHVybiAwOworCQlleHQyZnNfaWNvdW50X2luY3JlbWVudChjdHgtPmlub2RlX2xpbmtfaW5mbywgaW5vLCAwKTsKKwkJaW5vZGUuaV9saW5rc19jb3VudCsrOworCX0gZWxzZSBpZiAoYWRqID09IC0xKSB7CisJCWV4dDJmc19pY291bnRfZGVjcmVtZW50KGN0eC0+aW5vZGVfY291bnQsIGlubywgMCk7CisJCWlmIChpbm9kZS5pX2xpbmtzX2NvdW50ID09IDApCisJCQlyZXR1cm4gMDsKKwkJZXh0MmZzX2ljb3VudF9kZWNyZW1lbnQoY3R4LT5pbm9kZV9saW5rX2luZm8sIGlubywgMCk7CisJCWlub2RlLmlfbGlua3NfY291bnQtLTsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoZnMsIGlubywgJmlub2RlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGaXggcGFyZW50IC0tLSB0aGlzIHJvdXRpbmUgZml4ZXMgdXAgdGhlIHBhcmVudCBvZiBhIGRpcmVjdG9yeS4KKyAqLworc3RydWN0IGZpeF9kb3Rkb3Rfc3RydWN0IHsKKwlleHQyX2ZpbHN5cwlmczsKKwlleHQyX2lub190CXBhcmVudDsKKwlpbnQJCWRvbmU7CisJZTJmc2NrX3QJY3R4OworfTsKKworc3RhdGljIGludCBmaXhfZG90ZG90X3Byb2Moc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCQkgICBpbnQJb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgIGludAlibG9ja3NpemUgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgY2hhcgkqYnVmIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgIHZvaWQJKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgZml4X2RvdGRvdF9zdHJ1Y3QgKmZwID0gKHN0cnVjdCBmaXhfZG90ZG90X3N0cnVjdCAqKSBwcml2X2RhdGE7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0IHBjdHg7CisKKwlpZiAoKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSAhPSAyKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RybmNtcChkaXJlbnQtPm5hbWUsICIuLiIsIDIpKQorCQlyZXR1cm4gMDsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwlyZXR2YWwgPSBlMmZzY2tfYWRqdXN0X2lub2RlX2NvdW50KGZwLT5jdHgsIGRpcmVudC0+aW5vZGUsIC0xKTsKKwlpZiAocmV0dmFsKSB7CisJCXBjdHguZXJyY29kZSA9IHJldHZhbDsKKwkJZml4X3Byb2JsZW0oZnAtPmN0eCwgUFJfM19BREpVU1RfSU5PREUsICZwY3R4KTsKKwl9CisJcmV0dmFsID0gZTJmc2NrX2FkanVzdF9pbm9kZV9jb3VudChmcC0+Y3R4LCBmcC0+cGFyZW50LCAxKTsKKwlpZiAocmV0dmFsKSB7CisJCXBjdHguZXJyY29kZSA9IHJldHZhbDsKKwkJZml4X3Byb2JsZW0oZnAtPmN0eCwgUFJfM19BREpVU1RfSU5PREUsICZwY3R4KTsKKwl9CisJZGlyZW50LT5pbm9kZSA9IGZwLT5wYXJlbnQ7CisJaWYgKGZwLT5jdHgtPmZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkgICAgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFKQorCQlkaXJlbnQtPm5hbWVfbGVuID0gKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSB8CisJCQkoRVhUMl9GVF9ESVIgPDwgOCk7CisJZWxzZQorCQlkaXJlbnQtPm5hbWVfbGVuID0gZGlyZW50LT5uYW1lX2xlbiAmIDB4RkY7CisKKwlmcC0+ZG9uZSsrOworCXJldHVybiBESVJFTlRfQUJPUlQgfCBESVJFTlRfQ0hBTkdFRDsKK30KKworc3RhdGljIHZvaWQgZml4X2RvdGRvdChlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLCBleHQyX2lub190IHBhcmVudCkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgZml4X2RvdGRvdF9zdHJ1Y3QgZnA7CisJc3RydWN0IHByb2JsZW1fY29udGV4dCBwY3R4OworCisJZnAuZnMgPSBmczsKKwlmcC5wYXJlbnQgPSBwYXJlbnQ7CisJZnAuZG9uZSA9IDA7CisJZnAuY3R4ID0gY3R4OworCisjaWYgMAorCXByaW50ZigiRml4aW5nICcuLicgb2YgaW5vZGUgJWx1IHRvIGJlICVsdS4uLlxuIiwgaW5vLCBwYXJlbnQpOworI2VuZGlmCisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCXBjdHguaW5vID0gaW5vOworCXJldHZhbCA9IGV4dDJmc19kaXJfaXRlcmF0ZShmcywgaW5vLCBESVJFTlRfRkxBR19JTkNMVURFX0VNUFRZLAorCQkJCSAgICAwLCBmaXhfZG90ZG90X3Byb2MsICZmcCk7CisJaWYgKHJldHZhbCB8fCAhZnAuZG9uZSkgeworCQlwY3R4LmVycmNvZGUgPSByZXR2YWw7CisJCWZpeF9wcm9ibGVtKGN0eCwgcmV0dmFsID8gUFJfM19GSVhfUEFSRU5UX0VSUiA6CisJCQkgICAgUFJfM19GSVhfUEFSRU5UX05PRklORCwgJnBjdHgpOworCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKwl9CisJKHZvaWQpIGUyZnNja19kaXJfaW5mb19zZXRfZG90ZG90KGN0eCwgaW5vLCBwYXJlbnQpOworCWlmIChlMmZzY2tfZGlyX2luZm9fc2V0X3BhcmVudChjdHgsIGlubywgY3R4LT5sb3N0X2FuZF9mb3VuZCkpCisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM19OT19ESVJJTkZPLCAmcGN0eCk7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBUaGVzZSByb3V0aW5lcyBhcmUgcmVzcG9uc2libGUgZm9yIGV4cGFuZGluZyBhIC9sb3N0K2ZvdW5kIGlmIGl0IGlzCisgKiB0b28gc21hbGwuCisgKi8KKworc3RydWN0IGV4cGFuZF9kaXJfc3RydWN0IHsKKwlibGs2NF90CQkJbnVtOworCWUyX2Jsa2NudF90CQlndWFyYW50ZWVkX3NpemU7CisJYmxrNjRfdAkJCW5ld2Jsb2NrczsKKwlibGs2NF90CQkJbGFzdF9ibG9jazsKKwllcnJjb2RlX3QJCWVycjsKKwllMmZzY2tfdAkJY3R4OworfTsKKworc3RhdGljIGludCBleHBhbmRfZGlyX3Byb2MoZXh0Ml9maWxzeXMgZnMsCisJCQkgICBibGs2NF90CSpibG9ja25yLAorCQkJICAgZTJfYmxrY250X3QJYmxvY2tjbnQsCisJCQkgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICB2b2lkCSpwcml2X2RhdGEpCit7CisJc3RydWN0IGV4cGFuZF9kaXJfc3RydWN0ICplcyA9IChzdHJ1Y3QgZXhwYW5kX2Rpcl9zdHJ1Y3QgKikgcHJpdl9kYXRhOworCWJsazY0X3QJbmV3X2JsazsKKwlzdGF0aWMgYmxrNjRfdAlsYXN0X2JsayA9IDA7CisJY2hhcgkJKmJsb2NrOworCWVycmNvZGVfdAlyZXR2YWw7CisJZTJmc2NrX3QJY3R4OworCisJY3R4ID0gZXMtPmN0eDsKKworCWlmIChlcy0+Z3VhcmFudGVlZF9zaXplICYmIGJsb2NrY250ID49IGVzLT5ndWFyYW50ZWVkX3NpemUpCisJCXJldHVybiBCTE9DS19BQk9SVDsKKworCWlmIChibG9ja2NudCA+IDApCisJCWVzLT5sYXN0X2Jsb2NrID0gYmxvY2tjbnQ7CisJaWYgKCpibG9ja25yKSB7CisJCWxhc3RfYmxrID0gKmJsb2NrbnI7CisJCXJldHVybiAwOworCX0KKworCWlmIChibG9ja2NudCAmJgorCSAgICAoRVhUMkZTX0IyQyhmcywgbGFzdF9ibGspID09IEVYVDJGU19CMkMoZnMsIGxhc3RfYmxrICsgMSkpKQorCQluZXdfYmxrID0gbGFzdF9ibGsgKyAxOworCWVsc2UgeworCQlsYXN0X2JsayAmPSB+RVhUMkZTX0NMVVNURVJfTUFTSyhmcyk7CisJCXJldHZhbCA9IGV4dDJmc19uZXdfYmxvY2syKGZzLCBsYXN0X2JsaywgY3R4LT5ibG9ja19mb3VuZF9tYXAsCisJCQkJCSAgJm5ld19ibGspOworCQlpZiAocmV0dmFsKSB7CisJCQllcy0+ZXJyID0gcmV0dmFsOworCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQl9CisJCWVzLT5uZXdibG9ja3MrKzsKKwkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgbmV3X2JsaywgKzEpOworCX0KKwlsYXN0X2JsayA9IG5ld19ibGs7CisKKwlpZiAoYmxvY2tjbnQgPiAwKSB7CisJCXJldHZhbCA9IGV4dDJmc19uZXdfZGlyX2Jsb2NrKGZzLCAwLCAwLCAmYmxvY2spOworCQlpZiAocmV0dmFsKSB7CisJCQllcy0+ZXJyID0gcmV0dmFsOworCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQl9CisJCWVzLT5udW0tLTsKKwkJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazMoZnMsIG5ld19ibGssIGJsb2NrLCAwKTsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmYmxvY2spOworCQlpZiAocmV0dmFsKSB7CisJCQllcy0+ZXJyID0gcmV0dmFsOworCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQl9CisJCW1lbXNldChibG9jaywgMCwgZnMtPmJsb2Nrc2l6ZSk7CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBuZXdfYmxrLCAxLCBibG9jayk7CisJfQorCWlmIChyZXR2YWwpIHsKKwkJZXMtPmVyciA9IHJldHZhbDsKKwkJcmV0dXJuIEJMT0NLX0FCT1JUOworCX0KKwlleHQyZnNfZnJlZV9tZW0oJmJsb2NrKTsKKwkqYmxvY2tuciA9IG5ld19ibGs7CisJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwgbmV3X2Jsayk7CisKKwlpZiAoZXMtPm51bSA9PSAwKQorCQlyZXR1cm4gKEJMT0NLX0NIQU5HRUQgfCBCTE9DS19BQk9SVCk7CisJZWxzZQorCQlyZXR1cm4gQkxPQ0tfQ0hBTkdFRDsKK30KKworZXJyY29kZV90IGUyZnNja19leHBhbmRfZGlyZWN0b3J5KGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBkaXIsCisJCQkJICBpbnQgbnVtLCBpbnQgZ3VhcmFudGVlZF9zaXplKQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwllcnJjb2RlX3QJcmV0dmFsOworCXN0cnVjdCBleHBhbmRfZGlyX3N0cnVjdCBlczsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKwlibGs2NF90CQlzeiwgYmVmb3JlLCBhZnRlcjsKKworCWlmICghKGZzLT5mbGFncyAmIEVYVDJfRkxBR19SVykpCisJCXJldHVybiBFWFQyX0VUX1JPX0ZJTFNZUzsKKworCS8qCisJICogUmVhZCB0aGUgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMgaW47IHdlJ2xsIGJlIG1lc3Npbmcgd2l0aAorCSAqIHRoZW0uCisJICovCisJZTJmc2NrX3JlYWRfYml0bWFwcyhjdHgpOworCisJcmV0dmFsID0gZXh0MmZzX2NoZWNrX2RpcmVjdG9yeShmcywgZGlyKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJZXMubnVtID0gbnVtOworCWVzLmd1YXJhbnRlZWRfc2l6ZSA9IGd1YXJhbnRlZWRfc2l6ZTsKKwllcy5sYXN0X2Jsb2NrID0gMDsKKwllcy5lcnIgPSAwOworCWVzLm5ld2Jsb2NrcyA9IDA7CisJZXMuY3R4ID0gY3R4OworCisJcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBkaXIsIEJMT0NLX0ZMQUdfQVBQRU5ELAorCQkJCSAgICAgICAwLCBleHBhbmRfZGlyX3Byb2MsICZlcyk7CisKKwlpZiAoZXMuZXJyKQorCQlyZXR1cm4gZXMuZXJyOworCisJLyoKKwkgKiBVcGRhdGUgdGhlIHNpemUgYW5kIGJsb2NrIGNvdW50IGZpZWxkcyBpbiB0aGUgaW5vZGUuCisJICovCisJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIGRpciwgJmlub2RlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJc3ogPSAoZXMubGFzdF9ibG9jayArIDEpICogZnMtPmJsb2Nrc2l6ZTsKKwlyZXR2YWwgPSBleHQyZnNfaW5vZGVfc2l6ZV9zZXQoZnMsICZpbm9kZSwgc3opOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJZXh0MmZzX2libGtfYWRkX2Jsb2NrcyhmcywgJmlub2RlLCBlcy5uZXdibG9ja3MpOworCXF1b3RhX2RhdGFfYWRkKGN0eC0+cWN0eCwgJmlub2RlLCBkaXIsIGVzLm5ld2Jsb2NrcyAqIGZzLT5ibG9ja3NpemUpOworCisJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgZGlyLCAmaW5vZGUsICJleHBhbmRfZGlyZWN0b3J5Iik7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc2NrL3Bhc3M0LmMgYi9lMmZzY2svcGFzczQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWQ5M2YwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL3Bhc3M0LmMKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBwYXNzNC5jIC0tIHBhc3MgIzQgb2YgZTJmc2NrOiBDaGVjayByZWZlcmVuY2UgY291bnRzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqCisgKiBQYXNzIDQgZnJlZXMgdGhlIGZvbGxvd2luZyBkYXRhIHN0cnVjdHVyZXM6CisgKiAJLSBBIGJpdG1hcCBvZiB3aGljaCBpbm9kZXMgYXJlIGluIGJhZCBibG9ja3MuCShpbm9kZV9iYl9tYXApCisgKiAJLSBBIGJpdG1hcCBvZiB3aGljaCBpbm9kZXMgYXJlIGltYWdpYyBpbm9kZXMuCShpbm9kZV9pbWFnaWNfbWFwKQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJlMmZzY2suaCIKKyNpbmNsdWRlICJwcm9ibGVtLmgiCisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJfZXh0X2F0dHIuaD4KKworLyoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiBhbiBpbm9kZSBpcyBub3QgY29ubmVjdGVkIHRvIHRoZQorICogZGlyZWN0b3J5IHRyZWUuCisgKgorICogVGhpcyBzdWJyb3V0aW5lIHJldHVybnMgMSB0aGVuIHRoZSBjYWxsZXIgc2hvdWxkbid0IGJvdGhlciB3aXRoIHRoZQorICogcmVzdCBvZiB0aGUgcGFzcyA0IHRlc3RzLgorICovCitzdGF0aWMgaW50IGRpc2Nvbm5lY3RfaW5vZGUoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGksCisJCQkgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0CXBjdHg7CisJX191MzIgZWFtYWdpYyA9IDA7CisJaW50IGV4dHJhX3NpemUgPSAwOworCisJaWYgKEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpID4gRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFKSB7CisJCWUyZnNja19yZWFkX2lub2RlX2Z1bGwoY3R4LCBpLCBpbm9kZSxFWFQyX0lOT0RFX1NJWkUoZnMtPnN1cGVyKSwKKwkJCQkgICAgICAgInBhc3M0OiBkaXNjb25uZWN0X2lub2RlIik7CisJCWV4dHJhX3NpemUgPSAoKHN0cnVjdCBleHQyX2lub2RlX2xhcmdlICopaW5vZGUpLT5pX2V4dHJhX2lzaXplOworCX0gZWxzZSB7CisJCWUyZnNja19yZWFkX2lub2RlKGN0eCwgaSwgaW5vZGUsICJwYXNzNDogZGlzY29ubmVjdF9pbm9kZSIpOworCX0KKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCXBjdHguaW5vID0gaTsKKwlwY3R4Lmlub2RlID0gaW5vZGU7CisKKwlpZiAoRVhUMl9JTk9ERV9TSVpFKGZzLT5zdXBlcikgLUVYVDJfR09PRF9PTERfSU5PREVfU0laRSAtZXh0cmFfc2l6ZSA+MCkKKwkJZWFtYWdpYyA9ICooX191MzIgKikoKChjaGFyICopaW5vZGUpICtFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgKworCQkJCSAgICAgZXh0cmFfc2l6ZSk7CisJLyoKKwkgKiBPZmZlciB0byBkZWxldGUgYW55IHplcm8tbGVuZ3RoIGZpbGVzIHRoYXQgZG9lcyBub3QgaGF2ZQorCSAqIGJsb2Nrcy4gIElmIHRoZXJlIGlzIGFuIEVBIGJsb2NrLCBpdCBtaWdodCBoYXZlIHVzZWZ1bAorCSAqIGluZm9ybWF0aW9uLCBzbyB3ZSB3b24ndCBwcm9tcHQgdG8gZGVsZXRlIGl0LCBidXQgbGV0IGl0IGJlCisJICogcmVjb25uZWN0ZWQgdG8gbG9zdCtmb3VuZC4KKwkgKi8KKwlpZiAoIWlub2RlLT5pX2Jsb2NrcyAmJiBlYW1hZ2ljICE9IEVYVDJfRVhUX0FUVFJfTUFHSUMgJiYKKwkgICAgKExJTlVYX1NfSVNSRUcoaW5vZGUtPmlfbW9kZSkgfHwgTElOVVhfU19JU0RJUihpbm9kZS0+aV9tb2RlKSkpIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfNF9aRVJPX0xFTl9JTk9ERSwgJnBjdHgpKSB7CisJCQllMmZzY2tfY2xlYXJfaW5vZGUoY3R4LCBpLCBpbm9kZSwgMCwKKwkJCQkJICAgImRpc2Nvbm5lY3RfaW5vZGUiKTsKKwkJCS8qCisJCQkgKiBGaXggdXAgdGhlIGJpdG1hcHMuLi4KKwkJCSAqLworCQkJZTJmc2NrX3JlYWRfYml0bWFwcyhjdHgpOworCQkJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihmcywgaSwgLTEsCisJCQkJCQkgIExJTlVYX1NfSVNESVIoaW5vZGUtPmlfbW9kZSkpOworCQkJcXVvdGFfZGF0YV9pbm9kZXMoY3R4LT5xY3R4LCBpbm9kZSwgaSwgLTEpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKgorCSAqIFByb21wdCB0byByZWNvbm5lY3QuCisJICovCisJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfNF9VTkFUVEFDSEVEX0lOT0RFLCAmcGN0eCkpIHsKKwkJaWYgKGUyZnNja19yZWNvbm5lY3RfZmlsZShjdHgsIGkpKQorCQkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogSWYgd2UgZG9uJ3QgYXR0YWNoIHRoZSBpbm9kZSwgdGhlbiBza2lwIHRoZQorCQkgKiBpX2xpbmtzX3Rlc3Qgc2luY2UgdGhlcmUncyBubyBwb2ludCBpbiB0cnlpbmcgdG8KKwkJICogZm9yY2UgaV9saW5rc19jb3VudCB0byB6ZXJvLgorCQkgKi8KKwkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworCit2b2lkIGUyZnNja19wYXNzNChlMmZzY2tfdCBjdHgpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWV4dDJfaW5vX3QJaTsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQkqaW5vZGU7CisjaWZkZWYgUkVTT1VSQ0VfVFJBQ0sKKwlzdHJ1Y3QgcmVzb3VyY2VfdHJhY2sJcnRyYWNrOworI2VuZGlmCisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCV9fdTE2CWxpbmtfY291bnQsIGxpbmtfY291bnRlZDsKKwljaGFyCSpidWYgPSAwOworCWRncnBfdAlncm91cCwgbWF4Z3JvdXA7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssIGN0eC0+ZnMtPmlvKTsKKworI2lmZGVmIE1UUkFDRQorCW10cmFjZV9wcmludCgiUGFzcyA0Iik7CisjZW5kaWYKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwlpZiAoIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1BSRUVOKSkKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl80X1BBU1NfSEVBREVSLCAmcGN0eCk7CisKKwlncm91cCA9IDA7CisJbWF4Z3JvdXAgPSBmcy0+Z3JvdXBfZGVzY19jb3VudDsKKwlpZiAoY3R4LT5wcm9ncmVzcykKKwkJaWYgKChjdHgtPnByb2dyZXNzKShjdHgsIDQsIDAsIG1heGdyb3VwKSkKKwkJCXJldHVybjsKKworCWlub2RlID0gZTJmc2NrX2FsbG9jYXRlX21lbW9yeShjdHgsIEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpLAorCQkJCSAgICAgICAic2NyYXRjaCBpbm9kZSIpOworCisJLyogUHJvdGVjdCBsb29wIGZyb20gd3JhcC1hcm91bmQgaWYgc19pbm9kZXNfY291bnQgbWF4ZWQgKi8KKwlmb3IgKGk9MTsgaSA8PSBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50ICYmIGkgPiAwOyBpKyspIHsKKwkJaW50IGlzZGlyOworCisJCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCQlnb3RvIGVycm91dDsKKwkJaWYgKChpICUgZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXApID09IDApIHsKKwkJCWdyb3VwKys7CisJCQlpZiAoY3R4LT5wcm9ncmVzcykKKwkJCQlpZiAoKGN0eC0+cHJvZ3Jlc3MpKGN0eCwgNCwgZ3JvdXAsIG1heGdyb3VwKSkKKwkJCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJaWYgKGkgPT0gRVhUMl9CQURfSU5PIHx8CisJCSAgICAoaSA+IEVYVDJfUk9PVF9JTk8gJiYgaSA8IEVYVDJfRklSU1RfSU5PREUoZnMtPnN1cGVyKSkpCisJCQljb250aW51ZTsKKwkJaWYgKCEoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX3VzZWRfbWFwLCBpKSkgfHwKKwkJICAgIChjdHgtPmlub2RlX2ltYWdpY19tYXAgJiYKKwkJICAgICBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfaW1hZ2ljX21hcCwgaSkpIHx8CisJCSAgICAoY3R4LT5pbm9kZV9iYl9tYXAgJiYKKwkJICAgICBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfYmJfbWFwLCBpKSkpCisJCQljb250aW51ZTsKKwkJZXh0MmZzX2ljb3VudF9mZXRjaChjdHgtPmlub2RlX2xpbmtfaW5mbywgaSwgJmxpbmtfY291bnQpOworCQlleHQyZnNfaWNvdW50X2ZldGNoKGN0eC0+aW5vZGVfY291bnQsIGksICZsaW5rX2NvdW50ZWQpOworCQlpZiAobGlua19jb3VudGVkID09IDApIHsKKwkJCWlmICghYnVmKQorCQkJCWJ1ZiA9IGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LAorCQkJCSAgICAgZnMtPmJsb2Nrc2l6ZSwgImJhZF9pbm9kZSBidWZmZXIiKTsKKwkJCWlmIChlMmZzY2tfcHJvY2Vzc19iYWRfaW5vZGUoY3R4LCAwLCBpLCBidWYpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGRpc2Nvbm5lY3RfaW5vZGUoY3R4LCBpLCBpbm9kZSkpCisJCQkJY29udGludWU7CisJCQlleHQyZnNfaWNvdW50X2ZldGNoKGN0eC0+aW5vZGVfbGlua19pbmZvLCBpLAorCQkJCQkgICAgJmxpbmtfY291bnQpOworCQkJZXh0MmZzX2ljb3VudF9mZXRjaChjdHgtPmlub2RlX2NvdW50LCBpLAorCQkJCQkgICAgJmxpbmtfY291bnRlZCk7CisJCX0KKwkJaXNkaXIgPSBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfZGlyX21hcCwgaSk7CisJCWlmIChpc2RpciAmJiAobGlua19jb3VudGVkID4gRVhUMl9MSU5LX01BWCkpCisJCQlsaW5rX2NvdW50ZWQgPSAxOworCQlpZiAobGlua19jb3VudGVkICE9IGxpbmtfY291bnQpIHsKKwkJCWUyZnNja19yZWFkX2lub2RlKGN0eCwgaSwgaW5vZGUsICJwYXNzNCIpOworCQkJcGN0eC5pbm8gPSBpOworCQkJcGN0eC5pbm9kZSA9IGlub2RlOworCQkJaWYgKChsaW5rX2NvdW50ICE9IGlub2RlLT5pX2xpbmtzX2NvdW50KSAmJiAhaXNkaXIgJiYKKwkJCSAgICAoaW5vZGUtPmlfbGlua3NfY291bnQgPD0gRVhUMl9MSU5LX01BWCkpIHsKKwkJCQlwY3R4Lm51bSA9IGxpbmtfY291bnQ7CisJCQkJZml4X3Byb2JsZW0oY3R4LAorCQkJCQkgICAgUFJfNF9JTkNPTlNJU1RFTlRfQ09VTlQsICZwY3R4KTsKKwkJCX0KKwkJCXBjdHgubnVtID0gbGlua19jb3VudGVkOworCQkJLyogaV9saW5rX2NvdW50IHdhcyBwcmV2aW91c2x5IGV4Y2VlZGVkLCBidXQgbm8gbG9uZ2VyCisJCQkgKiBpcywgZml4IHRoaXMgYnV0IGRvbid0IGNvbnNpZGVyIGl0IGFuIGVycm9yICovCisJCQlpZiAoKGlzZGlyICYmIGxpbmtfY291bnRlZCA+IDEgJiYKKwkJCSAgICAgKGlub2RlLT5pX2ZsYWdzICYgRVhUMl9JTkRFWF9GTCkgJiYKKwkJCSAgICAgbGlua19jb3VudCA9PSAxICYmICEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9OTykpIHx8CisJCQkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl80X0JBRF9SRUZfQ09VTlQsICZwY3R4KSkgeworCQkJCWlub2RlLT5pX2xpbmtzX2NvdW50ID0gbGlua19jb3VudGVkOworCQkJCWUyZnNja193cml0ZV9pbm9kZShjdHgsIGksIGlub2RlLCAicGFzczQiKTsKKwkJCX0KKwkJfQorCX0KKwlleHQyZnNfZnJlZV9pY291bnQoY3R4LT5pbm9kZV9saW5rX2luZm8pOyBjdHgtPmlub2RlX2xpbmtfaW5mbyA9IDA7CisJZXh0MmZzX2ZyZWVfaWNvdW50KGN0eC0+aW5vZGVfY291bnQpOyBjdHgtPmlub2RlX2NvdW50ID0gMDsKKwlleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAoY3R4LT5pbm9kZV9iYl9tYXApOworCWN0eC0+aW5vZGVfYmJfbWFwID0gMDsKKwlleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAoY3R4LT5pbm9kZV9pbWFnaWNfbWFwKTsKKwljdHgtPmlub2RlX2ltYWdpY19tYXAgPSAwOworZXJyb3V0OgorCWlmIChidWYpCisJCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKworCWV4dDJmc19mcmVlX21lbSgmaW5vZGUpOworCXByaW50X3Jlc291cmNlX3RyYWNrKGN0eCwgXygiUGFzcyA0IiksICZydHJhY2ssIGN0eC0+ZnMtPmlvKTsKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc2NrL3Bhc3M1LmMgYi9lMmZzY2svcGFzczUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzlhMzJhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL3Bhc3M1LmMKQEAgLTAsMCArMSw4MTcgQEAKKy8qCisgKiBwYXNzNS5jIC0tLSBjaGVjayBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBhZ2FpbnN0IG9uLWRpc2sgYml0bWFwcworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImUyZnNjay5oIgorI2luY2x1ZGUgInByb2JsZW0uaCIKKworI2RlZmluZSBESVZfUk9VTkRfVVAobixkKSAoKChuKSArIChkKSAtIDEpIC8gKGQpKQorCitzdGF0aWMgdm9pZCBjaGVja19ibG9ja19iaXRtYXBzKGUyZnNja190IGN0eCk7CitzdGF0aWMgdm9pZCBjaGVja19pbm9kZV9iaXRtYXBzKGUyZnNja190IGN0eCk7CitzdGF0aWMgdm9pZCBjaGVja19pbm9kZV9lbmQoZTJmc2NrX3QgY3R4KTsKK3N0YXRpYyB2b2lkIGNoZWNrX2Jsb2NrX2VuZChlMmZzY2tfdCBjdHgpOworCit2b2lkIGUyZnNja19wYXNzNShlMmZzY2tfdCBjdHgpCit7CisjaWZkZWYgUkVTT1VSQ0VfVFJBQ0sKKwlzdHJ1Y3QgcmVzb3VyY2VfdHJhY2sJcnRyYWNrOworI2VuZGlmCisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCisjaWZkZWYgTVRSQUNFCisJbXRyYWNlX3ByaW50KCJQYXNzIDUiKTsKKyNlbmRpZgorCisJaW5pdF9yZXNvdXJjZV90cmFjaygmcnRyYWNrLCBjdHgtPmZzLT5pbyk7CisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pKQorCQlmaXhfcHJvYmxlbShjdHgsIFBSXzVfUEFTU19IRUFERVIsICZwY3R4KTsKKworCWlmIChjdHgtPnByb2dyZXNzKQorCQlpZiAoKGN0eC0+cHJvZ3Jlc3MpKGN0eCwgNSwgMCwgY3R4LT5mcy0+Z3JvdXBfZGVzY19jb3VudCoyKSkKKwkJCXJldHVybjsKKworCWUyZnNja19yZWFkX2JpdG1hcHMoY3R4KTsKKworCWNoZWNrX2Jsb2NrX2JpdG1hcHMoY3R4KTsKKwlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1NJR05BTF9NQVNLKQorCQlyZXR1cm47CisJY2hlY2tfaW5vZGVfYml0bWFwcyhjdHgpOworCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCXJldHVybjsKKwljaGVja19pbm9kZV9lbmQoY3R4KTsKKwlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1NJR05BTF9NQVNLKQorCQlyZXR1cm47CisJY2hlY2tfYmxvY2tfZW5kKGN0eCk7CisJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19TSUdOQUxfTUFTSykKKwkJcmV0dXJuOworCisJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGN0eC0+aW5vZGVfdXNlZF9tYXApOworCWN0eC0+aW5vZGVfdXNlZF9tYXAgPSAwOworCWV4dDJmc19mcmVlX2lub2RlX2JpdG1hcChjdHgtPmlub2RlX2Rpcl9tYXApOworCWN0eC0+aW5vZGVfZGlyX21hcCA9IDA7CisJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKGN0eC0+YmxvY2tfZm91bmRfbWFwKTsKKwljdHgtPmJsb2NrX2ZvdW5kX21hcCA9IDA7CisKKwlwcmludF9yZXNvdXJjZV90cmFjayhjdHgsIF8oIlBhc3MgNSIpLCAmcnRyYWNrLCBjdHgtPmZzLT5pbyk7Cit9CisKK3N0YXRpYyB2b2lkIGUyZnNja19kaXNjYXJkX2Jsb2NrcyhlMmZzY2tfdCBjdHgsIGJsazY0X3Qgc3RhcnQsCisJCQkJICBibGs2NF90IGNvdW50KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKworCS8qCisJICogSWYgdGhlIGZpbGVzeXN0ZW0gaGFzIGNoYW5nZWQgaXQgbWVhbnMgdGhhdCB0aGVyZSB3YXMgYW4gY29ycnVwdGlvbgorCSAqIHdoaWNoIHNob3VsZCBiZSByZXBhaXJlZCwgYnV0IGluIHNvbWUgY2FzZXMganVzdCBvbmUgZTJmc2NrIHJ1biBpcworCSAqIG5vdCBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBoZW5jZSBpdCBpcyBub3Qgc2FmZSB0byBydW4gZGlzY2FyZAorCSAqIGluIHRoaXMgY2FzZS4KKwkgKi8KKwlpZiAoZXh0MmZzX3Rlc3RfY2hhbmdlZChmcykpCisJCWN0eC0+b3B0aW9ucyAmPSB+RTJGX09QVF9ESVNDQVJEOworCisJaWYgKChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX0RJU0NBUkQpICYmCisJICAgIChpb19jaGFubmVsX2Rpc2NhcmQoZnMtPmlvLCBzdGFydCwgY291bnQpKSkKKwkJY3R4LT5vcHRpb25zICY9IH5FMkZfT1BUX0RJU0NBUkQ7Cit9CisKKy8qCisgKiBUaGlzIHdpbGwgdHJ5IHRvIGRpc2NhcmQgbnVtYmVyICdjb3VudCcgaW5vZGVzIHN0YXJ0aW5nIGF0CisgKiBpbm9kZSBudW1iZXIgJ3N0YXJ0JyB3aXRoaW4gdGhlICdncm91cCcuIE5vdGUgdGhhdCAnc3RhcnQnCisgKiBpcyAxLWJhc2VkLCBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gYWRqdXN0IGl0IGJ5IC0xIGluIHRoaXMKKyAqIGZ1bmN0aW9uIHRvIGNvbXB1dGUgcmlnaHQgb2Zmc2V0IGluIHRoZSBwYXJ0aWN1bGFyIGlub2RlIHRhYmxlLgorICovCitzdGF0aWMgdm9pZCBlMmZzY2tfZGlzY2FyZF9pbm9kZXMoZTJmc2NrX3QgY3R4LCBkZ3JwX3QgZ3JvdXAsCisJCQkJICBleHQyX2lub190IHN0YXJ0LCBpbnQgY291bnQpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWJsazY0X3QgYmxrLCBudW07CisKKwkvKgorCSAqIFNhbml0eSBjaGVjayBmb3IgJ3N0YXJ0JworCSAqLworCWlmICgoc3RhcnQgPCAxKSB8fCAoc3RhcnQgPiBFWFQyX0lOT0RFU19QRVJfR1JPVVAoZnMtPnN1cGVyKSkpIHsKKwkJcHJpbnRmKCJQUk9HUkFNTUlORyBFUlJPUjogR290IHN0YXJ0ICVkIG91dHNpZGUgb2YgZ3JvdXAgJWQhIgorCQkgICAgICAgIiBEaXNhYmxpbmcgZGlzY2FyZFxuIiwKKwkJCXN0YXJ0LCBncm91cCk7CisJCWN0eC0+b3B0aW9ucyAmPSB+RTJGX09QVF9ESVNDQVJEOworCX0KKworCS8qCisJICogRG8gbm90IGF0dGVtcHQgdG8gZGlzY2FyZCBpZiBFMkZfT1BUX0RJU0NBUkQgaXMgbm90IHNldC4gQW5kIGFsc28KKwkgKiBza2lwIHRoZSBkaXNjYXJkIG9uIHRoaXMgZ3JvdXAgaWYgZGlzY2FyZCBkb2VzIG5vdCB6ZXJvIGRhdGEuCisJICogVGhlIHJlYXNvbiBpcyB0aGF0IGlmIHRoZSBpbm9kZSB0YWJsZSBpcyBub3QgemVyb2VkIGRpc2NhcmQgd291bGQKKwkgKiBubyBoZWxwIHVzIHNpbmNlIHdlIG5lZWQgdG8gemVybyBpdCBhbnl3YXksIG9yIGlmIHRoZSBpbm9kZSB0YWJsZQorCSAqIGlzIHplcm9lZCB0aGVuIHRoZSByZWFkIGFmdGVyIGRpc2NhcmQgd291bGQgbm90IGJlIGRldGVybWluaXN0aWMKKwkgKiBhbnl3YXkgYW5kIHdlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGFzc3VtZSB0aGF0IHRoaXMgaW5vZGUgdGFibGUKKwkgKiB3YXMgemVyb2VkIGFueW1vcmUgc28gd2Ugd291bGQgaGF2ZSB0byB6ZXJvIGl0IGFnYWluLCB3aGljaCBkb2VzCisJICogbm90IHJlYWxseSBtYWtlIHNlbnNlLgorCSAqLworCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfRElTQ0FSRCkgfHwKKwkgICAgIWlvX2NoYW5uZWxfZGlzY2FyZF96ZXJvZXNfZGF0YShmcy0+aW8pKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFN0YXJ0IGlzIGlub2RlIG51bWJlciB3aXRoaW4gdGhlIGdyb3VwIHdoaWNoIHN0YXJ0cworCSAqIGNvdW50aW5nIGZyb20gMSwgc28gd2UgbmVlZCB0byBhZGp1c3QgaXQuCisJICovCisJc3RhcnQgLT0gMTsKKworCS8qCisJICogV2UgY2FuIGRpc2NhcmQgb25seSBibG9ja3MgY29udGFpbmluZyBvbmx5IHVudXNlZAorCSAqIGlub2RlcyBpbiB0aGUgdGFibGUuCisJICovCisJYmxrID0gRElWX1JPVU5EX1VQKHN0YXJ0LAorCQlFWFQyX0lOT0RFU19QRVJfQkxPQ0soZnMtPnN1cGVyKSk7CisJY291bnQgLT0gKGJsayAqIEVYVDJfSU5PREVTX1BFUl9CTE9DSyhmcy0+c3VwZXIpIC0gc3RhcnQpOworCWJsayArPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBncm91cCk7CisJbnVtID0gY291bnQgLyBFWFQyX0lOT0RFU19QRVJfQkxPQ0soZnMtPnN1cGVyKTsKKworCWlmIChudW0gPiAwKQorCQllMmZzY2tfZGlzY2FyZF9ibG9ja3MoY3R4LCBibGssIG51bSk7Cit9CisKKyNkZWZpbmUgTk9fQkxLICgoYmxrNjRfdCkgLTEpCisKK3N0YXRpYyB2b2lkIHByaW50X2JpdG1hcF9wcm9ibGVtKGUyZnNja190IGN0eCwgcHJvYmxlbV90IHByb2JsZW0sCisJCQkgICAgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCkKK3sKKwlzd2l0Y2ggKHByb2JsZW0pIHsKKwljYXNlIFBSXzVfQkxPQ0tfVU5VU0VEOgorCQlpZiAocGN0eC0+YmxrID09IHBjdHgtPmJsazIpCisJCQlwY3R4LT5ibGsyID0gMDsKKwkJZWxzZQorCQkJcHJvYmxlbSA9IFBSXzVfQkxPQ0tfUkFOR0VfVU5VU0VEOworCQlicmVhazsKKwljYXNlIFBSXzVfQkxPQ0tfVVNFRDoKKwkJaWYgKHBjdHgtPmJsayA9PSBwY3R4LT5ibGsyKQorCQkJcGN0eC0+YmxrMiA9IDA7CisJCWVsc2UKKwkJCXByb2JsZW0gPSBQUl81X0JMT0NLX1JBTkdFX1VTRUQ7CisJCWJyZWFrOworCWNhc2UgUFJfNV9JTk9ERV9VTlVTRUQ6CisJCWlmIChwY3R4LT5pbm8gPT0gcGN0eC0+aW5vMikKKwkJCXBjdHgtPmlubzIgPSAwOworCQllbHNlCisJCQlwcm9ibGVtID0gUFJfNV9JTk9ERV9SQU5HRV9VTlVTRUQ7CisJCWJyZWFrOworCWNhc2UgUFJfNV9JTk9ERV9VU0VEOgorCQlpZiAocGN0eC0+aW5vID09IHBjdHgtPmlubzIpCisJCQlwY3R4LT5pbm8yID0gMDsKKwkJZWxzZQorCQkJcHJvYmxlbSA9IFBSXzVfSU5PREVfUkFOR0VfVVNFRDsKKwkJYnJlYWs7CisJfQorCWZpeF9wcm9ibGVtKGN0eCwgcHJvYmxlbSwgcGN0eCk7CisJcGN0eC0+YmxrID0gcGN0eC0+YmxrMiA9IE5PX0JMSzsKKwlwY3R4LT5pbm8gPSBwY3R4LT5pbm8yID0gMDsKK30KKworLyogSnVzdCB0byBiZSBtb3JlIHN1Y2NpbnQgKi8KKyNkZWZpbmUgQjJDKHgpCUVYVDJGU19CMkMoZnMsICh4KSkKKyNkZWZpbmUgRVFfQ0xTVFIoeCwgeSkgKEIyQyh4KSA9PSBCMkMoeSkpCisjZGVmaW5lIExFX0NMU1RSKHgsIHkpIChCMkMoeCkgPD0gQjJDKHkpKQorI2RlZmluZSBHRV9DTFNUUih4LCB5KSAoQjJDKHgpID49IEIyQyh5KSkKKworc3RhdGljIHZvaWQgY2hlY2tfYmxvY2tfYml0bWFwcyhlMmZzY2tfdCBjdHgpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWJsazY0X3QJaTsKKwl1bnNpZ25lZCBpbnQJKmZyZWVfYXJyYXk7CisJZGdycF90CQlnLCBncm91cCA9IDA7CisJdW5zaWduZWQgaW50CWJsb2NrcyA9IDA7CisJYmxrNjRfdAlmcmVlX2Jsb2NrcyA9IDA7CisJYmxrNjRfdCBmaXJzdF9mcmVlID0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCXVuc2lnbmVkIGludAlncm91cF9mcmVlID0gMDsKKwlpbnQJYWN0dWFsLCBiaXRtYXA7CisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCXByb2JsZW1fdAlwcm9ibGVtLCBzYXZlX3Byb2JsZW07CisJaW50CQlmaXhpdCwgaGFkX3Byb2JsZW07CisJZXJyY29kZV90CXJldHZhbDsKKwlpbnQJb2xkX2Rlc2NfYmxvY2tzID0gMDsKKwlpbnQJY291bnQgPSAwOworCWludAljbXBfYmxvY2sgPSAwOworCWludAlyZWRvX2ZsYWcgPSAwOworCWJsazY0X3QJc3VwZXJfYmxrLCBvbGRfZGVzY19ibGssIG5ld19kZXNjX2JsazsKKwljaGFyICphY3R1YWxfYnVmLCAqYml0bWFwX2J1ZjsKKworCWFjdHVhbF9idWYgPSAoY2hhciAqKSBlMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwgZnMtPmJsb2Nrc2l6ZSwKKwkJCQkJCSAgICAgImFjdHVhbCBiaXRtYXAgYnVmZmVyIik7CisJYml0bWFwX2J1ZiA9IChjaGFyICopIGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LCBmcy0+YmxvY2tzaXplLAorCQkJCQkJICAgICAiYml0bWFwIGJsb2NrIGJ1ZmZlciIpOworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlmcmVlX2FycmF5ID0gKHVuc2lnbmVkIGludCAqKSBlMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwKKwkgICAgZnMtPmdyb3VwX2Rlc2NfY291bnQgKiBzaXplb2YodW5zaWduZWQgaW50KSwgImZyZWUgYmxvY2sgY291bnQgYXJyYXkiKTsKKworCWlmICgoQjJDKGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSA8CisJICAgICBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9zdGFydDIoY3R4LT5ibG9ja19mb3VuZF9tYXApKSB8fAorCSAgICAoQjJDKGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKS0xKSA+CisJICAgICBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9lbmQyKGN0eC0+YmxvY2tfZm91bmRfbWFwKSkpIHsKKwkJcGN0eC5udW0gPSAxOworCQlwY3R4LmJsayA9IEIyQyhmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayk7CisJCXBjdHguYmxrMiA9IEIyQyhleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLSAxKTsKKwkJcGN0eC5pbm8gPSBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9zdGFydDIoY3R4LT5ibG9ja19mb3VuZF9tYXApOworCQlwY3R4LmlubzIgPSBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9lbmQyKGN0eC0+YmxvY2tfZm91bmRfbWFwKTsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl81X0JNQVBfRU5EUE9JTlRTLCAmcGN0eCk7CisKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsgLyogZmF0YWwgKi8KKwkJZ290byBlcnJvdXQ7CisJfQorCisJaWYgKChCMkMoZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spIDwKKwkgICAgIGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3N0YXJ0Mihmcy0+YmxvY2tfbWFwKSkgfHwKKwkgICAgKEIyQyhleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlciktMSkgPgorCSAgICAgZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfZW5kMihmcy0+YmxvY2tfbWFwKSkpIHsKKwkJcGN0eC5udW0gPSAyOworCQlwY3R4LmJsayA9IEIyQyhmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayk7CisJCXBjdHguYmxrMiA9IEIyQyhleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLSAxKTsKKwkJcGN0eC5pbm8gPSBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9zdGFydDIoZnMtPmJsb2NrX21hcCk7CisJCXBjdHguaW5vMiA9IGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX2VuZDIoZnMtPmJsb2NrX21hcCk7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfNV9CTUFQX0VORFBPSU5UUywgJnBjdHgpOworCisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7IC8qIGZhdGFsICovCisJCWdvdG8gZXJyb3V0OworCX0KKworcmVkb19jb3VudHM6CisJaGFkX3Byb2JsZW0gPSAwOworCXNhdmVfcHJvYmxlbSA9IDA7CisJcGN0eC5ibGsgPSBwY3R4LmJsazIgPSBOT19CTEs7CisJZm9yIChpID0gQjJDKGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKTsKKwkgICAgIGkgPCBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcik7CisJICAgICBpICs9IEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKSkgeworCQlpbnQgZmlyc3RfYmxvY2tfaW5fYmcgPSAoQjJDKGkpIC0KKwkJCQkJIEIyQyhmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykpICUKKwkJCWZzLT5zdXBlci0+c19jbHVzdGVyc19wZXJfZ3JvdXAgPT0gMDsKKwkJaW50IG4sIG5ieXRlcyA9IGZzLT5zdXBlci0+c19jbHVzdGVyc19wZXJfZ3JvdXAgLyA4OworCisJCWFjdHVhbCA9IGV4dDJmc19mYXN0X3Rlc3RfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwgaSk7CisKKwkJLyoKKwkJICogVHJ5IHRvIG9wdGltaXplIHBhc3M1IGJ5IGV4dHJhY3RpbmcgYSBiaXRtYXAgYmxvY2sKKwkJICogYXMgZXhwZWN0ZWQgZnJvbSB3aGF0IHdlIGhhdmUgb24gZGlzaywgYW5kIHRoZW4KKwkJICogY29tcGFyaW5nIHRoZSB0d28uICBJZiB0aGV5IGFyZSBpZGVudGljYWwsIHRoZW4KKwkJICogdXBkYXRlIHRoZSBmcmVlIGJsb2NrIGNvdW50cyBhbmQgZ28gb24gdG8gdGhlIG5leHQKKwkJICogYmxvY2sgZ3JvdXAuICBUaGlzIGlzIG11Y2ggZmFzdGVyIHRoYW4gZG9pbmcgdGhlCisJCSAqIGluZGl2aWR1YWwgYml0LWJ5LWJpdCBjb21wYXJpc29uLiAgVGhlIG9uZSBkb3duc2lkZQorCQkgKiBpcyB0aGF0IHRoaXMgZG9lc24ndCB3b3JrIGlmIHdlIGFyZSBhc2tpbmcgZTJmc2NrCisJCSAqIHRvIGRvIGEgZGlzY2FyZCBvcGVyYXRpb24uCisJCSAqLworCQlpZiAoIWZpcnN0X2Jsb2NrX2luX2JnIHx8CisJCSAgICAoZ3JvdXAgPT0gKGludClmcy0+Z3JvdXBfZGVzY19jb3VudCAtIDEpIHx8CisJCSAgICAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9ESVNDQVJEKSkKKwkJCWdvdG8gbm9fb3B0aW1pemU7CisKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfcmFuZ2UyKGN0eC0+YmxvY2tfZm91bmRfbWFwLAorCQkJCUIyQyhpKSwgZnMtPnN1cGVyLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCwKKwkJCQlhY3R1YWxfYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gbm9fb3B0aW1pemU7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3JhbmdlMihmcy0+YmxvY2tfbWFwLAorCQkJCUIyQyhpKSwgZnMtPnN1cGVyLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCwKKwkJCQliaXRtYXBfYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gbm9fb3B0aW1pemU7CisJCWlmIChtZW1jbXAoYWN0dWFsX2J1ZiwgYml0bWFwX2J1ZiwgbmJ5dGVzKSAhPSAwKQorCQkJZ290byBub19vcHRpbWl6ZTsKKwkJbiA9IGV4dDJmc19iaXRjb3VudChhY3R1YWxfYnVmLCBuYnl0ZXMpOworCQlncm91cF9mcmVlID0gZnMtPnN1cGVyLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCAtIG47CisJCWZyZWVfYmxvY2tzICs9IGdyb3VwX2ZyZWU7CisJCWkgKz0gRVhUMkZTX0MyQihmcywgZnMtPnN1cGVyLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCAtIDEpOworCQlnb3RvIG5leHRfZ3JvdXA7CisJbm9fb3B0aW1pemU6CisKKwkJaWYgKHJlZG9fZmxhZykKKwkJCWJpdG1hcCA9IGFjdHVhbDsKKwkJZWxzZQorCQkJYml0bWFwID0gZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsIGkpOworCisJCWlmICghYWN0dWFsID09ICFiaXRtYXApCisJCQlnb3RvIGRvX2NvdW50czsKKworCQlpZiAoIWFjdHVhbCAmJiBiaXRtYXApIHsKKwkJCS8qCisJCQkgKiBCbG9jayBub3QgdXNlZCwgYnV0IG1hcmtlZCBpbiB1c2UgaW4gdGhlIGJpdG1hcC4KKwkJCSAqLworCQkJcHJvYmxlbSA9IFBSXzVfQkxPQ0tfVU5VU0VEOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEJsb2NrIHVzZWQsIGJ1dCBub3QgbWFya2VkIGluIHVzZSBpbiB0aGUgYml0bWFwLgorCQkJICovCisJCQlwcm9ibGVtID0gUFJfNV9CTE9DS19VU0VEOworCisJCQlpZiAoZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGdyb3VwLAorCQkJCQkJIEVYVDJfQkdfQkxPQ0tfVU5JTklUKSkgeworCQkJCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgcGN0eDI7CisJCQkJcGN0eDIuYmxrID0gaTsKKwkJCQlwY3R4Mi5ncm91cCA9IGdyb3VwOworCQkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzVfQkxPQ0tfVU5JTklULAorCQkJCQkJJnBjdHgyKSkKKwkJCQkJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGZzLCBncm91cCwKKwkJCQkJCQlFWFQyX0JHX0JMT0NLX1VOSU5JVCk7CisJCQl9CisJCX0KKwkJaWYgKHBjdHguYmxrID09IE5PX0JMSykgeworCQkJcGN0eC5ibGsgPSBwY3R4LmJsazIgPSBpOworCQkJc2F2ZV9wcm9ibGVtID0gcHJvYmxlbTsKKwkJfSBlbHNlIHsKKwkJCWlmICgocHJvYmxlbSA9PSBzYXZlX3Byb2JsZW0pICYmCisJCQkgICAgKHBjdHguYmxrMiA9PSBpIC0gRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpKSkKKwkJCQlwY3R4LmJsazIgKz0gRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpOworCQkJZWxzZSB7CisJCQkJcHJpbnRfYml0bWFwX3Byb2JsZW0oY3R4LCBzYXZlX3Byb2JsZW0sICZwY3R4KTsKKwkJCQlwY3R4LmJsayA9IHBjdHguYmxrMiA9IGk7CisJCQkJc2F2ZV9wcm9ibGVtID0gcHJvYmxlbTsKKwkJCX0KKwkJfQorCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX1BST0dfU1VQUFJFU1M7CisJCWhhZF9wcm9ibGVtKys7CisKKwkJLyoKKwkJICogSWYgdGhlcmUgYSBwcm9ibGVtIHdlIHNob3VsZCB0dXJuIG9mZiB0aGUgZGlzY2FyZCBzbyB3ZQorCQkgKiBkbyBub3QgY29tcHJvbWlzZSB0aGUgZmlsZXN5c3RlbS4KKwkJICovCisJCWN0eC0+b3B0aW9ucyAmPSB+RTJGX09QVF9ESVNDQVJEOworCisJZG9fY291bnRzOgorCQlpZiAoIWJpdG1hcCkgeworCQkJZ3JvdXBfZnJlZSsrOworCQkJZnJlZV9ibG9ja3MrKzsKKwkJCWlmIChmaXJzdF9mcmVlID4gaSkKKwkJCQlmaXJzdF9mcmVlID0gaTsKKwkJfSBlbHNlIGlmIChpID4gZmlyc3RfZnJlZSkgeworCQkJZTJmc2NrX2Rpc2NhcmRfYmxvY2tzKGN0eCwgZmlyc3RfZnJlZSwKKwkJCQkJICAgICAgKGkgLSBmaXJzdF9mcmVlKSk7CisJCQlmaXJzdF9mcmVlID0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCQl9CisJCWJsb2NrcyArKzsKKwkJaWYgKChibG9ja3MgPT0gZnMtPnN1cGVyLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCkgfHwKKwkJICAgIChFWFQyRlNfQjJDKGZzLCBpKSA9PQorCQkgICAgIEVYVDJGU19CMkMoZnMsIGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKS0xKSkpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgbGFzdCBibG9jayBvZiB0aGlzIGdyb3VwIGlzIGZyZWUsIHRoZW4gd2UgY2FuCisJCQkgKiBkaXNjYXJkIGl0IGFzIHdlbGwuCisJCQkgKi8KKwkJCWlmICghYml0bWFwICYmIGkgPj0gZmlyc3RfZnJlZSkKKwkJCQllMmZzY2tfZGlzY2FyZF9ibG9ja3MoY3R4LCBmaXJzdF9mcmVlLAorCQkJCQkJICAgICAgKGkgLSBmaXJzdF9mcmVlKSArIDEpOworCQluZXh0X2dyb3VwOgorCQkJZmlyc3RfZnJlZSA9IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsKKworCQkJZnJlZV9hcnJheVtncm91cF0gPSBncm91cF9mcmVlOworCQkJZ3JvdXAgKys7CisJCQlibG9ja3MgPSAwOworCQkJZ3JvdXBfZnJlZSA9IDA7CisJCQlpZiAoY3R4LT5wcm9ncmVzcykKKwkJCQlpZiAoKGN0eC0+cHJvZ3Jlc3MpKGN0eCwgNSwgZ3JvdXAsCisJCQkJCQkgICAgZnMtPmdyb3VwX2Rlc2NfY291bnQqMikpCisJCQkJCWdvdG8gZXJyb3V0OworCQl9CisJfQorCWlmIChwY3R4LmJsayAhPSBOT19CTEspCisJCXByaW50X2JpdG1hcF9wcm9ibGVtKGN0eCwgc2F2ZV9wcm9ibGVtLCAmcGN0eCk7CisJaWYgKGhhZF9wcm9ibGVtKQorCQlmaXhpdCA9IGVuZF9wcm9ibGVtX2xhdGNoKGN0eCwgUFJfTEFUQ0hfQkJJVE1BUCk7CisJZWxzZQorCQlmaXhpdCA9IC0xOworCWN0eC0+ZmxhZ3MgJj0gfkUyRl9GTEFHX1BST0dfU1VQUFJFU1M7CisKKwlpZiAoZml4aXQgPT0gMSkgeworCQlleHQyZnNfZnJlZV9ibG9ja19iaXRtYXAoZnMtPmJsb2NrX21hcCk7CisJCXJldHZhbCA9IGV4dDJmc19jb3B5X2JpdG1hcChjdHgtPmJsb2NrX2ZvdW5kX21hcCwKKwkJCQkJCSAgJmZzLT5ibG9ja19tYXApOworCQlpZiAocmV0dmFsKSB7CisJCQljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl81X0NPUFlfQkJJVE1BUF9FUlJPUiwgJnBjdHgpOworCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWV4dDJmc19zZXRfYml0bWFwX3BhZGRpbmcoZnMtPmJsb2NrX21hcCk7CisJCWV4dDJmc19tYXJrX2JiX2RpcnR5KGZzKTsKKworCQkvKiBSZWRvIHRoZSBjb3VudHMgKi8KKwkJYmxvY2tzID0gMDsgZnJlZV9ibG9ja3MgPSAwOyBncm91cF9mcmVlID0gMDsgZ3JvdXAgPSAwOworCQltZW1zZXQoZnJlZV9hcnJheSwgMCwgZnMtPmdyb3VwX2Rlc2NfY291bnQgKiBzaXplb2YoaW50KSk7CisJCXJlZG9fZmxhZysrOworCQlnb3RvIHJlZG9fY291bnRzOworCX0gZWxzZSBpZiAoZml4aXQgPT0gMCkKKwkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisKKwlmb3IgKGcgPSAwOyBnIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGcrKykgeworCQlpZiAoZnJlZV9hcnJheVtnXSAhPSBleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnQoZnMsIGcpKSB7CisJCQlwY3R4Lmdyb3VwID0gZzsKKwkJCXBjdHguYmxrID0gZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50KGZzLCBnKTsKKwkJCXBjdHguYmxrMiA9IGZyZWVfYXJyYXlbZ107CisKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzVfRlJFRV9CTE9DS19DT1VOVF9HUk9VUCwKKwkJCQkJJnBjdHgpKSB7CisJCQkJZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcywgZywgZnJlZV9hcnJheVtnXSk7CisJCQkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQkJfSBlbHNlCisJCQkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisJCX0KKwl9CisJZnJlZV9ibG9ja3MgPSBFWFQyRlNfQzJCKGZzLCBmcmVlX2Jsb2Nrcyk7CisJaWYgKGZyZWVfYmxvY2tzICE9IGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSB7CisJCXBjdHguZ3JvdXAgPSAwOworCQlwY3R4LmJsayA9IGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCQlwY3R4LmJsazIgPSBmcmVlX2Jsb2NrczsKKworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl81X0ZSRUVfQkxPQ0tfQ09VTlQsICZwY3R4KSkgeworCQkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcy0+c3VwZXIsIGZyZWVfYmxvY2tzKTsKKwkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJfQorCX0KK2Vycm91dDoKKwlleHQyZnNfZnJlZV9tZW0oJmZyZWVfYXJyYXkpOworCWV4dDJmc19mcmVlX21lbSgmYWN0dWFsX2J1Zik7CisJZXh0MmZzX2ZyZWVfbWVtKCZiaXRtYXBfYnVmKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfaW5vZGVfYml0bWFwcyhlMmZzY2tfdCBjdHgpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWV4dDJfaW5vX3QJaTsKKwl1bnNpZ25lZCBpbnQJZnJlZV9pbm9kZXMgPSAwOworCWludAkJZ3JvdXBfZnJlZSA9IDA7CisJaW50CQlkaXJzX2NvdW50ID0gMDsKKwlkZ3JwX3QJCWdyb3VwID0gMDsKKwl1bnNpZ25lZCBpbnQJaW5vZGVzID0gMDsKKwlleHQyX2lub190CSpmcmVlX2FycmF5OworCWV4dDJfaW5vX3QJKmRpcl9hcnJheTsKKwlpbnQJCWFjdHVhbCwgYml0bWFwOworCWVycmNvZGVfdAlyZXR2YWw7CisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCXByb2JsZW1fdAlwcm9ibGVtLCBzYXZlX3Byb2JsZW07CisJaW50CQlmaXhpdCwgaGFkX3Byb2JsZW07CisJaW50CQljc3VtX2ZsYWc7CisJaW50CQlza2lwX2dyb3VwID0gMDsKKwlpbnQJCXJlZG9fZmxhZyA9IDA7CisJZXh0Ml9pbm9fdAkJZmlyc3RfZnJlZSA9IGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwICsgMTsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJZnJlZV9hcnJheSA9IChleHQyX2lub190ICopIGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LAorCSAgICBmcy0+Z3JvdXBfZGVzY19jb3VudCAqIHNpemVvZihleHQyX2lub190KSwgImZyZWUgaW5vZGUgY291bnQgYXJyYXkiKTsKKworCWRpcl9hcnJheSA9IChleHQyX2lub190ICopIGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LAorCSAgIGZzLT5ncm91cF9kZXNjX2NvdW50ICogc2l6ZW9mKGV4dDJfaW5vX3QpLCAiZGlyZWN0b3J5IGNvdW50IGFycmF5Iik7CisKKwlpZiAoKDEgPCBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9zdGFydDIoY3R4LT5pbm9kZV91c2VkX21hcCkpIHx8CisJICAgIChmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50ID4KKwkgICAgIGV4dDJmc19nZXRfaW5vZGVfYml0bWFwX2VuZDIoY3R4LT5pbm9kZV91c2VkX21hcCkpKSB7CisJCXBjdHgubnVtID0gMzsKKwkJcGN0eC5ibGsgPSAxOworCQlwY3R4LmJsazIgPSBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50OworCQlwY3R4LmlubyA9IGV4dDJmc19nZXRfaW5vZGVfYml0bWFwX3N0YXJ0MihjdHgtPmlub2RlX3VzZWRfbWFwKTsKKwkJcGN0eC5pbm8yID0gZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfZW5kMihjdHgtPmlub2RlX3VzZWRfbWFwKTsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl81X0JNQVBfRU5EUE9JTlRTLCAmcGN0eCk7CisKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsgLyogZmF0YWwgKi8KKwkJZ290byBlcnJvdXQ7CisJfQorCWlmICgoMSA8IGV4dDJmc19nZXRfaW5vZGVfYml0bWFwX3N0YXJ0Mihmcy0+aW5vZGVfbWFwKSkgfHwKKwkgICAgKGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQgPgorCSAgICAgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfZW5kMihmcy0+aW5vZGVfbWFwKSkpIHsKKwkJcGN0eC5udW0gPSA0OworCQlwY3R4LmJsayA9IDE7CisJCXBjdHguYmxrMiA9IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQ7CisJCXBjdHguaW5vID0gZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfc3RhcnQyKGZzLT5pbm9kZV9tYXApOworCQlwY3R4LmlubzIgPSBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9lbmQyKGZzLT5pbm9kZV9tYXApOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzVfQk1BUF9FTkRQT0lOVFMsICZwY3R4KTsKKworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOyAvKiBmYXRhbCAqLworCQlnb3RvIGVycm91dDsKKwl9CisKKwljc3VtX2ZsYWcgPSBFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKTsKK3JlZG9fY291bnRzOgorCWhhZF9wcm9ibGVtID0gMDsKKwlzYXZlX3Byb2JsZW0gPSAwOworCXBjdHguaW5vID0gcGN0eC5pbm8yID0gMDsKKwlpZiAoY3N1bV9mbGFnICYmCisJICAgIChleHQyZnNfYmdfZmxhZ3NfdGVzdChmcywgZ3JvdXAsIEVYVDJfQkdfSU5PREVfVU5JTklUKSkpCisJCXNraXBfZ3JvdXArKzsKKworCS8qIFByb3RlY3QgbG9vcCBmcm9tIHdyYXAtYXJvdW5kIGlmIGlub2Rlc19jb3VudCBpcyBtYXhlZCAqLworCWZvciAoaSA9IDE7IGkgPD0gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCAmJiBpID4gMDsgaSsrKSB7CisJCWJpdG1hcCA9IDA7CisJCWlmIChza2lwX2dyb3VwICYmCisJCSAgICBpICUgZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgPT0gMSkgeworCQkJLyoKKwkJCSAqIEN1cnJlbnQgaW5vZGUgaXMgdGhlIGZpcnN0IGlub2RlCisJCQkgKiBpbiB0aGUgY3VycmVudCBibG9jayBncm91cC4KKwkJCSAqLworCQkJaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcF9yYW5nZSgKKwkJCQkgICAgY3R4LT5pbm9kZV91c2VkX21hcCwgaSwKKwkJCQkgICAgZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXApKSB7CisJCQkJLyoKKwkJCQkgKiBXaGVuIHRoZSBjb21wYXJlZCBpbm9kZXMgaW4gaW5vZGVzIGJpdG1hcAorCQkJCSAqIGFyZSAwLCBjb3VudCB0aGUgZnJlZSBpbm9kZSwKKwkJCQkgKiBza2lwIHRoZSBjdXJyZW50IGJsb2NrIGdyb3VwLgorCQkJCSAqLworCQkJCWZpcnN0X2ZyZWUgPSAxOworCQkJCWlub2RlcyA9IGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwIC0gMTsKKwkJCQlncm91cF9mcmVlID0gaW5vZGVzOworCQkJCWZyZWVfaW5vZGVzICs9IGlub2RlczsKKwkJCQlpICs9IGlub2RlczsKKwkJCQlza2lwX2dyb3VwID0gMDsKKwkJCQlnb3RvIGRvX2NvdW50czsKKwkJCX0KKwkJfQorCisJCWFjdHVhbCA9IGV4dDJmc19mYXN0X3Rlc3RfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX3VzZWRfbWFwLCBpKTsKKwkJaWYgKHJlZG9fZmxhZykKKwkJCWJpdG1hcCA9IGFjdHVhbDsKKwkJZWxzZSBpZiAoIXNraXBfZ3JvdXApCisJCQliaXRtYXAgPSBleHQyZnNfZmFzdF90ZXN0X2lub2RlX2JpdG1hcDIoZnMtPmlub2RlX21hcCwgaSk7CisJCWlmICghYWN0dWFsID09ICFiaXRtYXApCisJCQlnb3RvIGRvX2NvdW50czsKKworCQlpZiAoIWFjdHVhbCAmJiBiaXRtYXApIHsKKwkJCS8qCisJCQkgKiBJbm9kZSB3YXNuJ3QgdXNlZCwgYnV0IG1hcmtlZCBpbiBiaXRtYXAKKwkJCSAqLworCQkJcHJvYmxlbSA9IFBSXzVfSU5PREVfVU5VU0VEOworCQl9IGVsc2UgLyogaWYgKGFjdHVhbCAmJiAhYml0bWFwKSAqLyB7CisJCQkvKgorCQkJICogSW5vZGUgdXNlZCwgYnV0IG5vdCBpbiBiaXRtYXAKKwkJCSAqLworCQkJcHJvYmxlbSA9IFBSXzVfSU5PREVfVVNFRDsKKworCQkJLyogV2Ugc2hvdWxkIG5ldmVyIGhpdCB0aGlzLCBiZWNhdXNlIGl0IG1lYW5zIHRoYXQKKwkJCSAqIGlub2RlcyB3ZXJlIG1hcmtlZCBpbiB1c2UgdGhhdCB3ZXJlbid0IG5vdGljZWQKKwkJCSAqIGluIHBhc3MxIG9yIHBhc3MgMi4gSXQgaXMgZWFzaWVyIHRvIGZpeCB0aGUgcHJvYmxlbQorCQkJICogdGhhbiB0byBraWxsIGUyZnNjayBhbmQgbGVhdmUgdGhlIHVzZXIgc3R1Y2suICovCisJCQlpZiAoc2tpcF9ncm91cCkgeworCQkJCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgcGN0eDI7CisJCQkJcGN0eDIuYmxrID0gaTsKKwkJCQlwY3R4Mi5ncm91cCA9IGdyb3VwOworCQkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzVfSU5PREVfVU5JTklULCZwY3R4MikpeworCQkJCQlleHQyZnNfYmdfZmxhZ3NfY2xlYXIoZnMsIGdyb3VwLCBFWFQyX0JHX0lOT0RFX1VOSU5JVCk7CisJCQkJCXNraXBfZ3JvdXAgPSAwOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAocGN0eC5pbm8gPT0gMCkgeworCQkJcGN0eC5pbm8gPSBwY3R4LmlubzIgPSBpOworCQkJc2F2ZV9wcm9ibGVtID0gcHJvYmxlbTsKKwkJfSBlbHNlIHsKKwkJCWlmICgocHJvYmxlbSA9PSBzYXZlX3Byb2JsZW0pICYmCisJCQkgICAgKHBjdHguaW5vMiA9PSBpLTEpKQorCQkJCXBjdHguaW5vMisrOworCQkJZWxzZSB7CisJCQkJcHJpbnRfYml0bWFwX3Byb2JsZW0oY3R4LCBzYXZlX3Byb2JsZW0sICZwY3R4KTsKKwkJCQlwY3R4LmlubyA9IHBjdHguaW5vMiA9IGk7CisJCQkJc2F2ZV9wcm9ibGVtID0gcHJvYmxlbTsKKwkJCX0KKwkJfQorCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX1BST0dfU1VQUFJFU1M7CisJCWhhZF9wcm9ibGVtKys7CisJCS8qCisJCSAqIElmIHRoZXJlIGEgcHJvYmxlbSB3ZSBzaG91bGQgdHVybiBvZmYgdGhlIGRpc2NhcmQgc28gd2UKKwkJICogZG8gbm90IGNvbXByb21pc2UgdGhlIGZpbGVzeXN0ZW0uCisJCSAqLworCQljdHgtPm9wdGlvbnMgJj0gfkUyRl9PUFRfRElTQ0FSRDsKKworZG9fY291bnRzOgorCQlpbm9kZXMrKzsKKwkJaWYgKGJpdG1hcCkgeworCQkJaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9kaXJfbWFwLCBpKSkKKwkJCQlkaXJzX2NvdW50Kys7CisJCQlpZiAoaW5vZGVzID4gZmlyc3RfZnJlZSkgeworCQkJCWUyZnNja19kaXNjYXJkX2lub2RlcyhjdHgsIGdyb3VwLCBmaXJzdF9mcmVlLAorCQkJCQkJICAgICAgaW5vZGVzIC0gZmlyc3RfZnJlZSk7CisJCQkJZmlyc3RfZnJlZSA9IGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwICsgMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWdyb3VwX2ZyZWUrKzsKKwkJCWZyZWVfaW5vZGVzKys7CisJCQlpZiAoZmlyc3RfZnJlZSA+IGlub2RlcykKKwkJCQlmaXJzdF9mcmVlID0gaW5vZGVzOworCQl9CisKKwkJaWYgKChpbm9kZXMgPT0gZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXApIHx8CisJCSAgICAoaSA9PSBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KSkgeworCQkJLyoKKwkJCSAqIElmIHRoZSBsYXN0IGlub2RlIGlzIGZyZWUsIHdlIGNhbiBkaXNjYXJkIGl0IGFzIHdlbGwuCisJCQkgKi8KKwkJCWlmICghYml0bWFwICYmIGlub2RlcyA+PSBmaXJzdF9mcmVlKQorCQkJCWUyZnNja19kaXNjYXJkX2lub2RlcyhjdHgsIGdyb3VwLCBmaXJzdF9mcmVlLAorCQkJCQkJICAgICAgaW5vZGVzIC0gZmlyc3RfZnJlZSArIDEpOworCQkJLyoKKwkJCSAqIElmIGRpc2NhcmQgemVyb2VzIGRhdGEgYW5kIHRoZSBncm91cCBpbm9kZSB0YWJsZQorCQkJICogd2FzIG5vdCB6ZXJvZWQgeWV0LCBzZXQgaXRhYmxlIGFzIHplcm9lZAorCQkJICovCisJCQlpZiAoKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfRElTQ0FSRCkgJiYKKwkJCSAgICBpb19jaGFubmVsX2Rpc2NhcmRfemVyb2VzX2RhdGEoZnMtPmlvKSAmJgorCQkJICAgICEoZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGdyb3VwLAorCQkJCQkJICAgRVhUMl9CR19JTk9ERV9aRVJPRUQpKSkgeworCQkJCWV4dDJmc19iZ19mbGFnc19zZXQoZnMsIGdyb3VwLAorCQkJCQkJICAgIEVYVDJfQkdfSU5PREVfWkVST0VEKTsKKwkJCQlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgZ3JvdXApOworCQkJfQorCisJCQlmaXJzdF9mcmVlID0gZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgKyAxOworCQkJZnJlZV9hcnJheVtncm91cF0gPSBncm91cF9mcmVlOworCQkJZGlyX2FycmF5W2dyb3VwXSA9IGRpcnNfY291bnQ7CisJCQlncm91cCArKzsKKwkJCWlub2RlcyA9IDA7CisJCQlza2lwX2dyb3VwID0gMDsKKwkJCWdyb3VwX2ZyZWUgPSAwOworCQkJZGlyc19jb3VudCA9IDA7CisJCQlpZiAoY3R4LT5wcm9ncmVzcykKKwkJCQlpZiAoKGN0eC0+cHJvZ3Jlc3MpKGN0eCwgNSwKKwkJCQkJICAgIGdyb3VwICsgZnMtPmdyb3VwX2Rlc2NfY291bnQsCisJCQkJCSAgICBmcy0+Z3JvdXBfZGVzY19jb3VudCoyKSkKKwkJCQkJZ290byBlcnJvdXQ7CisJCQlpZiAoY3N1bV9mbGFnICYmCisJCQkgICAgKGkgIT0gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCkgJiYKKwkJCSAgICAoZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGdyb3VwLCBFWFQyX0JHX0lOT0RFX1VOSU5JVCkKKwkJCSAgICAgKSkKKwkJCQlza2lwX2dyb3VwKys7CisJCX0KKwl9CisJaWYgKHBjdHguaW5vKQorCQlwcmludF9iaXRtYXBfcHJvYmxlbShjdHgsIHNhdmVfcHJvYmxlbSwgJnBjdHgpOworCisJaWYgKGhhZF9wcm9ibGVtKQorCQlmaXhpdCA9IGVuZF9wcm9ibGVtX2xhdGNoKGN0eCwgUFJfTEFUQ0hfSUJJVE1BUCk7CisJZWxzZQorCQlmaXhpdCA9IC0xOworCWN0eC0+ZmxhZ3MgJj0gfkUyRl9GTEFHX1BST0dfU1VQUFJFU1M7CisKKwlpZiAoZml4aXQgPT0gMSkgeworCQlleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAoZnMtPmlub2RlX21hcCk7CisJCXJldHZhbCA9IGV4dDJmc19jb3B5X2JpdG1hcChjdHgtPmlub2RlX3VzZWRfbWFwLAorCQkJCQkJICAmZnMtPmlub2RlX21hcCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzVfQ09QWV9JQklUTUFQX0VSUk9SLCAmcGN0eCk7CisJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJZXh0MmZzX3NldF9iaXRtYXBfcGFkZGluZyhmcy0+aW5vZGVfbWFwKTsKKwkJZXh0MmZzX21hcmtfaWJfZGlydHkoZnMpOworCisJCS8qIHJlZG8gY291bnRzICovCisJCWlub2RlcyA9IDA7IGZyZWVfaW5vZGVzID0gMDsgZ3JvdXBfZnJlZSA9IDA7CisJCWRpcnNfY291bnQgPSAwOyBncm91cCA9IDA7CisJCW1lbXNldChmcmVlX2FycmF5LCAwLCBmcy0+Z3JvdXBfZGVzY19jb3VudCAqIHNpemVvZihpbnQpKTsKKwkJbWVtc2V0KGRpcl9hcnJheSwgMCwgZnMtPmdyb3VwX2Rlc2NfY291bnQgKiBzaXplb2YoaW50KSk7CisJCXJlZG9fZmxhZysrOworCQlnb3RvIHJlZG9fY291bnRzOworCX0gZWxzZSBpZiAoZml4aXQgPT0gMCkKKwkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlpZiAoZnJlZV9hcnJheVtpXSAhPSBleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnQoZnMsIGkpKSB7CisJCQlwY3R4Lmdyb3VwID0gaTsKKwkJCXBjdHguaW5vID0gZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50KGZzLCBpKTsKKwkJCXBjdHguaW5vMiA9IGZyZWVfYXJyYXlbaV07CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl81X0ZSRUVfSU5PREVfQ09VTlRfR1JPVVAsCisJCQkJCSZwY3R4KSkgeworCQkJCWV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudF9zZXQoZnMsIGksIGZyZWVfYXJyYXlbaV0pOworCQkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJCX0gZWxzZQorCQkJCWV4dDJmc191bm1hcmtfdmFsaWQoZnMpOworCQl9CisJCWlmIChkaXJfYXJyYXlbaV0gIT0gZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudChmcywgaSkpIHsKKwkJCXBjdHguZ3JvdXAgPSBpOworCQkJcGN0eC5pbm8gPSBleHQyZnNfYmdfdXNlZF9kaXJzX2NvdW50KGZzLCBpKTsKKwkJCXBjdHguaW5vMiA9IGRpcl9hcnJheVtpXTsKKworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfNV9GUkVFX0RJUl9DT1VOVF9HUk9VUCwKKwkJCQkJJnBjdHgpKSB7CisJCQkJZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudF9zZXQoZnMsIGksIGRpcl9hcnJheVtpXSk7CisJCQkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQkJfSBlbHNlCisJCQkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisJCX0KKwl9CisJaWYgKGZyZWVfaW5vZGVzICE9IGZzLT5zdXBlci0+c19mcmVlX2lub2Rlc19jb3VudCkgeworCQlwY3R4Lmdyb3VwID0gLTE7CisJCXBjdHguaW5vID0gZnMtPnN1cGVyLT5zX2ZyZWVfaW5vZGVzX2NvdW50OworCQlwY3R4LmlubzIgPSBmcmVlX2lub2RlczsKKworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl81X0ZSRUVfSU5PREVfQ09VTlQsICZwY3R4KSkgeworCQkJZnMtPnN1cGVyLT5zX2ZyZWVfaW5vZGVzX2NvdW50ID0gZnJlZV9pbm9kZXM7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCX0KKwl9CitlcnJvdXQ6CisJZXh0MmZzX2ZyZWVfbWVtKCZmcmVlX2FycmF5KTsKKwlleHQyZnNfZnJlZV9tZW0oJmRpcl9hcnJheSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2lub2RlX2VuZChlMmZzY2tfdCBjdHgpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWV4dDJfaW5vX3QJZW5kLCBzYXZlX2lub2Rlc19jb3VudCwgaTsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0CXBjdHg7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCisJZW5kID0gRVhUMl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zdXBlcikgKiBmcy0+Z3JvdXBfZGVzY19jb3VudDsKKwlwY3R4LmVycmNvZGUgPSBleHQyZnNfZnVkZ2VfaW5vZGVfYml0bWFwX2VuZChmcy0+aW5vZGVfbWFwLCBlbmQsCisJCQkJCQkgICAgICZzYXZlX2lub2Rlc19jb3VudCk7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlwY3R4Lm51bSA9IDE7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfNV9GVURHRV9CSVRNQVBfRVJST1IsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsgLyogZmF0YWwgKi8KKwkJcmV0dXJuOworCX0KKwlpZiAoc2F2ZV9pbm9kZXNfY291bnQgPT0gZW5kKQorCQlyZXR1cm47CisKKwkvKiBwcm90ZWN0IGxvb3AgZnJvbSB3cmFwLWFyb3VuZCBpZiBlbmQgaXMgbWF4ZWQgKi8KKwlmb3IgKGkgPSBzYXZlX2lub2Rlc19jb3VudCArIDE7IGkgPD0gZW5kICYmIGkgPiBzYXZlX2lub2Rlc19jb3VudDsgaSsrKSB7CisJCWlmICghZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwKGZzLT5pbm9kZV9tYXAsIGkpKSB7CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl81X0lOT0RFX0JNQVBfUEFERElORywgJnBjdHgpKSB7CisJCQkJZm9yICg7IGkgPD0gZW5kOyBpKyspCisJCQkJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcChmcy0+aW5vZGVfbWFwLAorCQkJCQkJCQkgaSk7CisJCQkJZXh0MmZzX21hcmtfaWJfZGlydHkoZnMpOworCQkJfSBlbHNlCisJCQkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXBjdHguZXJyY29kZSA9IGV4dDJmc19mdWRnZV9pbm9kZV9iaXRtYXBfZW5kKGZzLT5pbm9kZV9tYXAsCisJCQkJCQkgICAgIHNhdmVfaW5vZGVzX2NvdW50LCAwKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCXBjdHgubnVtID0gMjsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl81X0ZVREdFX0JJVE1BUF9FUlJPUiwgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOyAvKiBmYXRhbCAqLworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCBjaGVja19ibG9ja19lbmQoZTJmc2NrX3QgY3R4KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlibGs2NF90CWVuZCwgc2F2ZV9ibG9ja3NfY291bnQsIGk7CisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCWVuZCA9IGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3N0YXJ0Mihmcy0+YmxvY2tfbWFwKSArCisJCUVYVDJfR1JPVVBTX1RPX0NMVVNURVJTKGZzLT5zdXBlciwgZnMtPmdyb3VwX2Rlc2NfY291bnQpIC0gMTsKKwlwY3R4LmVycmNvZGUgPSBleHQyZnNfZnVkZ2VfYmxvY2tfYml0bWFwX2VuZDIoZnMtPmJsb2NrX21hcCwgZW5kLAorCQkJCQkJICAgICAmc2F2ZV9ibG9ja3NfY291bnQpOworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJcGN0eC5udW0gPSAzOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzVfRlVER0VfQklUTUFQX0VSUk9SLCAmcGN0eCk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7IC8qIGZhdGFsICovCisJCXJldHVybjsKKwl9CisJaWYgKHNhdmVfYmxvY2tzX2NvdW50ID09IGVuZCkKKwkJcmV0dXJuOworCisJLyogUHJvdGVjdCBsb29wIGZyb20gd3JhcC1hcm91bmQgaWYgZW5kIGlzIG1heGVkICovCisJZm9yIChpID0gc2F2ZV9ibG9ja3NfY291bnQgKyAxOyBpIDw9IGVuZCAmJiBpID4gc2F2ZV9ibG9ja3NfY291bnQ7IGkrKykgeworCQlpZiAoIWV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoZnMtPmJsb2NrX21hcCwKKwkJCQkJICAgICAgIEVYVDJGU19DMkIoZnMsIGkpKSkgeworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfNV9CTE9DS19CTUFQX1BBRERJTkcsICZwY3R4KSkgeworCQkJCWZvciAoOyBpIDw9IGVuZDsgaSsrKQorCQkJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsCisJCQkJCQkJRVhUMkZTX0MyQihmcywgaSkpOworCQkJCWV4dDJmc19tYXJrX2JiX2RpcnR5KGZzKTsKKwkJCX0gZWxzZQorCQkJCWV4dDJmc191bm1hcmtfdmFsaWQoZnMpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlwY3R4LmVycmNvZGUgPSBleHQyZnNfZnVkZ2VfYmxvY2tfYml0bWFwX2VuZDIoZnMtPmJsb2NrX21hcCwKKwkJCQkJCSAgICAgc2F2ZV9ibG9ja3NfY291bnQsIDApOworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJcGN0eC5udW0gPSA0OworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzVfRlVER0VfQklUTUFQX0VSUk9SLCAmcGN0eCk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7IC8qIGZhdGFsICovCisJCXJldHVybjsKKwl9Cit9CisKKworCmRpZmYgLS1naXQgYS9lMmZzY2svcHJvYmxlbS5jIGIvZTJmc2NrL3Byb2JsZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDQyYTMzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL3Byb2JsZW0uYwpAQCAtMCwwICsxLDIxMDggQEAKKy8qCisgKiBwcm9ibGVtLmMgLS0tIHJlcG9ydCBmaWxlc3lzdGVtIHByb2JsZW1zIHRvIHRoZSB1c2VyCisgKgorICogQ29weXJpZ2h0IDE5OTYsIDE5OTcgYnkgVGhlb2RvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8dGVybWlvcy5oPgorCisjaW5jbHVkZSAiZTJmc2NrLmgiCisKKyNpbmNsdWRlICJwcm9ibGVtLmgiCisjaW5jbHVkZSAicHJvYmxlbVAuaCIKKworI2RlZmluZSBQUk9NUFRfTk9ORQkwCisjZGVmaW5lIFBST01QVF9GSVgJMQorI2RlZmluZSBQUk9NUFRfQ0xFQVIJMgorI2RlZmluZSBQUk9NUFRfUkVMT0NBVEUJMworI2RlZmluZSBQUk9NUFRfQUxMT0NBVEUgNAorI2RlZmluZSBQUk9NUFRfRVhQQU5ECTUKKyNkZWZpbmUgUFJPTVBUX0NPTk5FQ1QJNgorI2RlZmluZSBQUk9NUFRfQ1JFQVRFCTcKKyNkZWZpbmUgUFJPTVBUX1NBTFZBR0UJOAorI2RlZmluZSBQUk9NUFRfVFJVTkNBVEUJOQorI2RlZmluZSBQUk9NUFRfQ0xFQVJfSU5PREUgMTAKKyNkZWZpbmUgUFJPTVBUX0FCT1JUCTExCisjZGVmaW5lIFBST01QVF9TUExJVAkxMgorI2RlZmluZSBQUk9NUFRfQ09OVElOVUUJMTMKKyNkZWZpbmUgUFJPTVBUX0NMT05FCTE0CisjZGVmaW5lIFBST01QVF9ERUxFVEUJMTUKKyNkZWZpbmUgUFJPTVBUX1NVUFBSRVNTIDE2CisjZGVmaW5lIFBST01QVF9VTkxJTksJMTcKKyNkZWZpbmUgUFJPTVBUX0NMRUFSX0hUUkVFIDE4CisjZGVmaW5lIFBST01QVF9SRUNSRUFURSAxOQorI2RlZmluZSBQUk9NUFRfTlVMTAkyMAorCisvKgorICogVGhlc2UgYXJlIHRoZSBwcm9tcHRzIHdoaWNoIGFyZSB1c2VkIHRvIGFzayB0aGUgdXNlciBpZiB0aGV5IHdhbnQKKyAqIHRvIGZpeCBhIHByb2JsZW0uCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpwcm9tcHRbXSA9IHsKKwlOXygiKG5vIHByb21wdCkiKSwJLyogMCAqLworCU5fKCJGaXgiKSwJCS8qIDEgKi8KKwlOXygiQ2xlYXIiKSwJCS8qIDIgKi8KKwlOXygiUmVsb2NhdGUiKSwJCS8qIDMgKi8KKwlOXygiQWxsb2NhdGUiKSwJCS8qIDQgKi8KKwlOXygiRXhwYW5kIiksCQkvKiA1ICovCisJTl8oIkNvbm5lY3QgdG8gL2xvc3QrZm91bmQiKSwgLyogNiAqLworCU5fKCJDcmVhdGUiKSwJCS8qIDcgKi8KKwlOXygiU2FsdmFnZSIpLAkJLyogOCAqLworCU5fKCJUcnVuY2F0ZSIpLAkJLyogOSAqLworCU5fKCJDbGVhciBpbm9kZSIpLAkvKiAxMCAqLworCU5fKCJBYm9ydCIpLAkJLyogMTEgKi8KKwlOXygiU3BsaXQiKSwJCS8qIDEyICovCisJTl8oIkNvbnRpbnVlIiksCQkvKiAxMyAqLworCU5fKCJDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyIpLCAvKiAxNCAqLworCU5fKCJEZWxldGUgZmlsZSIpLAkvKiAxNSAqLworCU5fKCJTdXBwcmVzcyBtZXNzYWdlcyIpLC8qIDE2ICovCisJTl8oIlVubGluayIpLAkJLyogMTcgKi8KKwlOXygiQ2xlYXIgSFRyZWUgaW5kZXgiKSwvKiAxOCAqLworCU5fKCJSZWNyZWF0ZSIpLAkJLyogMTkgKi8KKwkiIiwJCQkvKiAyMCAqLworfTsKKworLyoKKyAqIFRoZXNlIG1lc3NhZ2VzIGFyZSBwcmludGVkIHdoZW4gd2UgYXJlIHByZWVuIG1vZGUgYW5kIHdlIHdpbGwgYmUKKyAqIGF1dG9tYXRpY2FsbHkgZml4aW5nIHRoZSBwcm9ibGVtLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqcHJlZW5fbXNnW10gPSB7CisJTl8oIihOT05FKSIpLAkJLyogMCAqLworCU5fKCJGSVhFRCIpLAkJLyogMSAqLworCU5fKCJDTEVBUkVEIiksCQkvKiAyICovCisJTl8oIlJFTE9DQVRFRCIpLAkvKiAzICovCisJTl8oIkFMTE9DQVRFRCIpLAkvKiA0ICovCisJTl8oIkVYUEFOREVEIiksCQkvKiA1ICovCisJTl8oIlJFQ09OTkVDVEVEIiksCS8qIDYgKi8KKwlOXygiQ1JFQVRFRCIpLAkJLyogNyAqLworCU5fKCJTQUxWQUdFRCIpLAkJLyogOCAqLworCU5fKCJUUlVOQ0FURUQiKSwJLyogOSAqLworCU5fKCJJTk9ERSBDTEVBUkVEIiksCS8qIDEwICovCisJTl8oIkFCT1JURUQiKSwJCS8qIDExICovCisJTl8oIlNQTElUIiksCQkvKiAxMiAqLworCU5fKCJDT05USU5VSU5HIiksCS8qIDEzICovCisJTl8oIk1VTFRJUExZLUNMQUlNRUQgQkxPQ0tTIENMT05FRCIpLCAvKiAxNCAqLworCU5fKCJGSUxFIERFTEVURUQiKSwJLyogMTUgKi8KKwlOXygiU1VQUFJFU1NFRCIpLAkvKiAxNiAqLworCU5fKCJVTkxJTktFRCIpLAkJLyogMTcgKi8KKwlOXygiSFRSRUUgSU5ERVggQ0xFQVJFRCIpLC8qIDE4ICovCisJTl8oIldJTEwgUkVDUkVBVEUiKSwJLyogMTkgKi8KKwkiIiwJCQkvKiAyMCAqLworfTsKKworc3RhdGljIHN0cnVjdCBlMmZzY2tfcHJvYmxlbSBwcm9ibGVtX3RhYmxlW10gPSB7CisKKwkvKiBQcmUtUGFzcyAxIGVycm9ycyAqLworCisJLyogQmxvY2sgYml0bWFwIG5vdCBpbiBncm91cCAqLworCXsgUFJfMF9CQl9OT1RfR1JPVVAsIE5fKCJAYiBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIiksCisJICBQUk9NUFRfUkVMT0NBVEUsIFBSX0xBVENIX1JFTE9DIH0sCisKKwkvKiBJbm9kZSBiaXRtYXAgbm90IGluIGdyb3VwICovCisJeyBQUl8wX0lCX05PVF9HUk9VUCwgTl8oIkBpIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iKSwKKwkgIFBST01QVF9SRUxPQ0FURSwgUFJfTEFUQ0hfUkVMT0MgfSwKKworCS8qIElub2RlIHRhYmxlIG5vdCBpbiBncm91cCAqLworCXsgUFJfMF9JVEFCTEVfTk9UX0dST1VQLAorCSAgTl8oIkBpIHRhYmxlIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCisJICAiV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbiIpLAorCSAgUFJPTVBUX1JFTE9DQVRFLCBQUl9MQVRDSF9SRUxPQyB9LAorCisJLyogU3VwZXJibG9jayBjb3JydXB0ICovCisJeyBQUl8wX1NCX0NPUlJVUFQsCisJICBOXygiXG5UaGUgQFMgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSB2YWxpZCBleHQyL2V4dDMvZXh0NFxuIgorCSAgIkBmLiAgSWYgdGhlIEB2IGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0Mi9leHQzL2V4dDRcbiIKKwkgICJAZiAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIEBTXG4iCisJICAiaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgQFM6XG4iCisJICAiICAgIGUyZnNjayAtYiA4MTkzIDxAdj5cbiIKKwkgICIgb3JcbiIKKwkgICIgICAgZTJmc2NrIC1iIDMyNzY4IDxAdj5cblxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEZpbGVzeXN0ZW0gc2l6ZSBpcyB3cm9uZyAqLworCXsgUFJfMF9GU19TSVpFX1dST05HLAorCSAgTl8oIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKwkgICJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisJICAiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIiksCisJICBQUk9NUFRfQUJPUlQsIDAgfSwKKworCS8qIEZyYWdtZW50cyBub3Qgc3VwcG9ydGVkICovCisJeyBQUl8wX05PX0ZSQUdNRU5UUywKKwkgIE5fKCJAUyBAYl9zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4iCisJICAiVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuIgorCSAgImZyb20gdGhlIEBiIHNpemUuXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJICAvKiBCYWQgYmxvY2tzX3Blcl9ncm91cCAqLworCXsgUFJfMF9CTE9DS1NfUEVSX0dST1VQLAorCSAgTl8oIkBTIEBic19wZXJfZ3JvdXAgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfQUZURVJfQ09ERSwgUFJfMF9TQl9DT1JSVVBUIH0sCisKKwkvKiBCYWQgZmlyc3RfZGF0YV9ibG9jayAqLworCXsgUFJfMF9GSVJTVF9EQVRBX0JMT0NLLAorCSAgTl8oIkBTIGZpcnN0X2RhdGFfQGIgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfQUZURVJfQ09ERSwgUFJfMF9TQl9DT1JSVVBUIH0sCisKKwkvKiBBZGRpbmcgVVVJRCB0byBmaWxlc3lzdGVtICovCisJeyBQUl8wX0FERF9VVUlELAorCSAgTl8oIkBmIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBSZWxvY2F0ZSBoaW50ICovCisJeyBQUl8wX1JFTE9DQVRFX0hJTlQsCisJICBOXygiTm90ZTogaWYgc2V2ZXJhbCBpbm9kZSBvciBibG9jayBiaXRtYXAgYmxvY2tzIG9yIHBhcnRcbiIKKwkgICJvZiB0aGUgaW5vZGUgdGFibGUgcmVxdWlyZSByZWxvY2F0aW9uLCB5b3UgbWF5IHdpc2ggdG8gdHJ5XG4iCisJICAicnVubmluZyBlMmZzY2sgd2l0aCB0aGUgJy1iICVTJyBvcHRpb24gZmlyc3QuICBUaGUgcHJvYmxlbVxuIgorCSAgIm1heSBsaWUgb25seSB3aXRoIHRoZSBwcmltYXJ5IGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLCBhbmRcbiIKKwkgICJ0aGUgYmFja3VwIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIG1heSBiZSBPSy5cblxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fT0sgfCBQUl9OT0NPTExBVEUgfSwKKworCS8qIE1pc2NlbGxhbmVvdXMgc3VwZXJibG9jayBjb3JydXB0aW9uICovCisJeyBQUl8wX01JU0NfQ09SUlVQVF9TVVBFUiwKKwkgIE5fKCJDb3JydXB0aW9uIGZvdW5kIGluIEBTLiAgKCVzID0gJU4pLlxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfQUZURVJfQ09ERSwgUFJfMF9TQl9DT1JSVVBUIH0sCisKKwkvKiBFcnJvciBkZXRlcm1pbmcgcGh5c2ljYWwgZGV2aWNlIHNpemUgb2YgZmlsZXN5c3RlbSAqLworCXsgUFJfMF9HRVRTSVpFX0VSUk9SLAorCSAgTl8oIkVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIEB2OiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIElub2RlIGNvdW50IGluIHN1cGVyYmxvY2sgaXMgaW5jb3JyZWN0ICovCisJeyBQUl8wX0lOT0RFX0NPVU5UX1dST05HLAorCSAgTl8oIkBpIGNvdW50IGluIEBTIGlzICVpLCBAcyAlai5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgMCB9LAorCisJeyBQUl8wX0hVUkRfQ0xFQVJfRklMRVRZUEUsCisJICBOXygiVGhlIEh1cmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZmlsZXR5cGUgZmVhdHVyZS5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBKb3VybmFsIGlub2RlIGlzIGludmFsaWQgKi8KKwl7IFBSXzBfSk9VUk5BTF9CQURfSU5PREUsCisJICBOXygiQFMgaGFzIGFuIEBuIEBqIChAaSAlaSkuXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0sgfSwKKworCS8qIFRoZSBleHRlcm5hbCBqb3VybmFsIGhhcyAodW5zdXBwb3J0ZWQpIG11bHRpcGxlIGZpbGVzeXN0ZW1zICovCisJeyBQUl8wX0pPVVJOQUxfVU5TVVBQX01VTFRJRlMsCisJICBOXygiRXh0ZXJuYWwgQGogaGFzIG11bHRpcGxlIEBmIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogQ2FuJ3QgZmluZCBleHRlcm5hbCBqb3VybmFsICovCisJeyBQUl8wX0NBTlRfRklORF9KT1VSTkFMLAorCSAgTl8oIkNhbid0IGZpbmQgZXh0ZXJuYWwgQGpcbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBFeHRlcm5hbCBqb3VybmFsIGhhcyBiYWQgc3VwZXJibG9jayAqLworCXsgUFJfMF9FWFRfSk9VUk5BTF9CQURfU1VQRVIsCisJICBOXygiRXh0ZXJuYWwgQGogaGFzIGJhZCBAU1xuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIFN1cGVyYmxvY2sgaGFzIGEgYmFkIGpvdXJuYWwgVVVJRCAqLworCXsgUFJfMF9KT1VSTkFMX0JBRF9VVUlELAorCSAgTl8oIkV4dGVybmFsIEBqIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBAZlxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEpvdXJuYWwgaGFzIGFuIHVua25vd24gc3VwZXJibG9jayB0eXBlICovCisJeyBQUl8wX0pPVVJOQUxfVU5TVVBQX1NVUEVSLAorCSAgTl8oIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorCSAgICAgIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0ICIKKwkgICAgICJzdXBwb3J0IHRoaXMgQGogZm9ybWF0LlxuIgorCSAgICAgIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iKSwKKwkgIFBST01QVF9BQk9SVCwgUFJfTk9fT0sgfCBQUl9BRlRFUl9DT0RFLCBQUl8wX0pPVVJOQUxfQkFEX1NVUEVSIH0sCisKKwkvKiBKb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdCAqLworCXsgUFJfMF9KT1VSTkFMX0JBRF9TVVBFUiwKKwkgIE5fKCJAaiBAUyBpcyBjb3JydXB0LlxuIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB9LAorCisJLyogU3VwZXJibG9jayBoYXNfam91cm5hbCBmbGFnIGlzIGNsZWFyIGJ1dCBoYXMgYSBqb3VybmFsICovCisJeyBQUl8wX0pPVVJOQUxfSEFTX0pPVVJOQUwsCisJICBOXygiQFMgaGFzX0BqIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIEBqIGlzIHByZXNlbnQuXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0sgfSwKKworCS8qIFN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQgYnV0IG5vdCBqb3VybmFsIGlzIHByZXNlbnQgKi8KKwl7IFBSXzBfSk9VUk5BTF9SRUNPVkVSX1NFVCwKKwkgIE5fKCJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIEBqIGlzIHByZXNlbnQuXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0sgfSwKKworCS8qIFN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBqb3VybmFsIGhhcyBkYXRhICovCisJeyBQUl8wX0pPVVJOQUxfUkVDT1ZFUllfQ0xFQVIsCisJICBOXygiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IEBqIGhhcyBkYXRhLlxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogQXNrIGlmIHdlIHNob3VsZCBjbGVhciB0aGUgam91cm5hbCAqLworCXsgUFJfMF9KT1VSTkFMX1JFU0VUX0pPVVJOQUwsCisJICBOXygiQ2xlYXIgQGoiKSwKKwkgIFBST01QVF9OVUxMLCBQUl9QUkVFTl9OT01TRyB9LAorCisJLyogRmlsZXN5c3RlbSByZXZpc2lvbiBpcyAwLCBidXQgZmVhdHVyZSBmbGFncyBhcmUgc2V0ICovCisJeyBQUl8wX0ZTX1JFVl9MRVZFTCwKKwkgIE5fKCJAZiBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBAZi4gICIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfCBQUl9OT19PSyB9LAorCisJLyogQ2xlYXJpbmcgb3JwaGFuIGlub2RlICovCisJeyBQUl8wX09SUEhBTl9DTEVBUl9JTk9ERSwKKwkgIE5fKCIlcyBAbyBAaSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogSWxsZWdhbCBibG9jayBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAqLworCXsgUFJfMF9PUlBIQU5fSUxMRUdBTF9CTE9DS19OVU0sCisJICAgTl8oIkBJICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBBbHJlYWR5IGNsZWFyZWQgYmxvY2sgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgKi8KKwl7IFBSXzBfT1JQSEFOX0FMUkVBRFlfQ0xFQVJFRF9CTE9DSywKKwkgICBOXygiQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBJbGxlZ2FsIG9ycGhhbiBpbm9kZSBpbiBzdXBlcmJsb2NrICovCisJeyBQUl8wX09SUEhBTl9JTExFR0FMX0hFQURfSU5PREUsCisJICBOXygiQEkgQG8gQGkgJWkgaW4gQFMuXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBJbGxlZ2FsIGlub2RlIGluIG9ycGhhbmVkIGlub2RlIGxpc3QgKi8KKwl7IFBSXzBfT1JQSEFOX0lMTEVHQUxfSU5PREUsCisJICBOXygiQEkgQGkgJWkgaW4gQG8gQGkgbGlzdC5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIEpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldCAqLworCXsgUFJfMF9KT1VSTkFMX1VOU1VQUF9ST0NPTVBBVCwKKwkgIE5fKCJAaiBAUyBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbiIpLAorCSAgUFJPTVBUX0FCT1JULCAwIH0sCisKKwkvKiBKb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQgKi8KKwl7IFBSXzBfSk9VUk5BTF9VTlNVUFBfSU5DT01QQVQsCisJICBOXygiQGogQFMgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4iKSwKKwkgIFBST01QVF9BQk9SVCwgMCB9LAorCisJLyogSm91cm5hbCBoYXMgdW5zdXBwb3J0ZWQgdmVyc2lvbiBudW1iZXIgKi8KKwl7IFBSXzBfSk9VUk5BTF9VTlNVUFBfVkVSU0lPTiwKKwkgIE5fKCJAaiB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4iKSwKKwkgIFBST01QVF9BQk9SVCwgMCB9LAorCisJLyogTW92aW5nIGpvdXJuYWwgdG8gaGlkZGVuIGZpbGUgKi8KKwl7IFBSXzBfTU9WRV9KT1VSTkFMLAorCSAgTl8oIk1vdmluZyBAaiBmcm9tIC8lcyB0byBoaWRkZW4gQGkuXG5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIEVycm9yIG1vdmluZyBqb3VybmFsIHRvIGhpZGRlbiBmaWxlICovCisJeyBQUl8wX0VSUl9NT1ZFX0pPVVJOQUwsCisJICBOXygiRXJyb3IgbW92aW5nIEBqOiAlbVxuXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBDbGVhcmluZyBWMiBqb3VybmFsIHN1cGVyYmxvY2sgKi8KKwl7IFBSXzBfQ0xFQVJfVjJfSk9VUk5BTCwKKwkgIE5fKCJGb3VuZCBAbiBWMiBAaiBAUyBmaWVsZHMgKGZyb20gVjEgQGopLlxuIgorCSAgICAgIkNsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIEBqIEBTLi4uXG5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIEFzayBpZiB3ZSBzaG91bGQgcnVuIHRoZSBqb3VybmFsIGFueXdheSAqLworCXsgUFJfMF9KT1VSTkFMX1JVTiwKKwkgIE5fKCJSdW4gQGogYW55d2F5IiksCisJICBQUk9NUFRfTlVMTCwgMCB9LAorCisJLyogUnVuIHRoZSBqb3VybmFsIGJ5IGRlZmF1bHQgKi8KKwl7IFBSXzBfSk9VUk5BTF9SVU5fREVGQVVMVCwKKwkgIE5fKCJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIEJhY2t1cCBqb3VybmFsIGlub2RlIGJsb2NrcyAqLworCXsgUFJfMF9CQUNLVVBfSk5MLAorCSAgTl8oIkJhY2tpbmcgdXAgQGogQGkgQGIgaW5mb3JtYXRpb24uXG5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIFJlc2VydmVkIGJsb2NrcyB3L28gcmVzaXplX2lub2RlICovCisJeyBQUl8wX05PTlpFUk9fUkVTRVJWRURfR0RUX0JMT0NLUywKKwkgIE5fKCJAZiBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9AaSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisJICAgICAiaXMgJU47IEBzIHplcm8uICAiKSwKKwkgIFBST01QVF9GSVgsIDAgfSwKKworCS8qIFJlc2l6ZV9pbm9kZSBub3QgZW5hYmxlZCwgYnV0IHJlc2l6ZSBpbm9kZSBpcyBub24temVybyAqLworCXsgUFJfMF9DTEVBUl9SRVNJWkVfSU5PREUsCisJICBOXygiUmVzaXplX0BpIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBAaSBpcyBub24temVyby4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBSZXNpemUgaW5vZGUgaW52YWxpZCAqLworCXsgUFJfMF9SRVNJWkVfSU5PREVfSU5WQUxJRCwKKwkgIE5fKCJSZXNpemUgQGkgbm90IHZhbGlkLiAgIiksCisJICBQUk9NUFRfUkVDUkVBVEUsIDAgfSwKKworCS8qIExhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlICovCisJeyBQUl8wX0ZVVFVSRV9TQl9MQVNUX01PVU5ULAorCSAgTl8oIkBTIGxhc3QgbW91bnQgdGltZSAoJXQsXG5cdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB8IFBSX05PX09LIH0sCisKKwkvKiBMYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZSAqLworCXsgUFJfMF9GVVRVUkVfU0JfTEFTVF9XUklURSwKKwkgIE5fKCJAUyBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfCBQUl9OT19PSyB9LAorCisJeyBQUl8wX0VYVEVSTkFMX0pPVVJOQUxfSElOVCwKKwkgIE5fKCJAUyBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIEBzICVYLiAgIiksCisJICAgICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB9LAorCisJLyogQWRkaW5nIGRpcmhhc2ggaGludCAqLworCXsgUFJfMF9ESVJIQVNIX0hJTlQsCisJICBOXygiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cblxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogZ3JvdXAgZGVzY3JpcHRvciBOIGNoZWNrc3VtIGlzIGludmFsaWQuICovCisJeyBQUl8wX0dEVF9DU1VNLAorCSAgTl8oIkBnIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAiKSwKKwkgICAgIFBST01QVF9GSVgsIFBSX0xBVENIX0JHX0NIRUNLU1VNIH0sCisKKwkvKiBncm91cCBkZXNjcmlwdG9yIE4gbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC4gKi8KKwl7IFBSXzBfR0RUX1VOSU5JVCwKKwkgIE5fKCJAZyBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4iKSwKKwkgICAgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBHcm91cCBkZXNjcmlwdG9yIE4gaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudC4gKi8KKwl7IFBSXzBfR0RUX0lUQUJMRV9VTlVTRUQsCisJICBOXygiQGcgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgIiksCisJICAgICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB9LAorCisJLyogTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gKi8KKwl7IFBSXzBfQkJfVU5JTklUX0xBU1QsCisJICBOXygiTGFzdCBAZyBAYiBAQiB1bmluaXRpYWxpemVkLiAgIiksCisJICAgICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB9LAorCisJLyogSm91cm5hbCB0cmFuc2FjdGlvbiBmb3VuZCBjb3JydXB0ICovCisJeyBQUl8wX0pOTF9UWE5fQ09SUlVQVCwKKwkgIE5fKCJKb3VybmFsIHRyYW5zYWN0aW9uICVpIHdhcyBjb3JydXB0LCByZXBsYXkgd2FzIGFib3J0ZWQuXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwl7IFBSXzBfQ0xFQVJfVEVTVEZTX0ZMQUcsCisJICBOXygiVGhlIHRlc3RfZnMgZmxhZyBpcyBzZXQgKGFuZCBleHQ0IGlzIGF2YWlsYWJsZSkuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0sgfSwKKworCS8qIExhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlIChmdWRnZWQpICovCisJeyBQUl8wX0ZVVFVSRV9TQl9MQVNUX01PVU5UX0ZVREdFRCwKKwkgIE5fKCJAUyBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cblx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgIgorCSAgICAgInByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgc2V0KVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fT0sgfCBQUl9OT19PSyB9LAorCisJLyogTGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUgKGZ1ZGdlZCkgKi8KKwl7IFBSXzBfRlVUVVJFX1NCX0xBU1RfV1JJVEVfRlVER0VELAorCSAgTl8oIkBTIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCAiCisJICAgICAicHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSBzZXQpXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9QUkVFTl9PSyB8IFBSX05PX09LIH0sCisKKwkvKiBCbG9jayBncm91cCBjaGVja3N1bSAobGF0Y2ggcXVlc3Rpb24pIGlzIGludmFsaWQuICovCisJeyBQUl8wX0dEVF9DU1VNX0xBVENILAorCSAgTl8oIk9uZSBvciBtb3JlIEBiIEBnIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgIiksCisJICAgICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB9LAorCisJLyogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKi8KKwl7IFBSXzBfRlJFRV9JTk9ERV9DT1VOVCwKKwkgIE5fKCJTZXR0aW5nIGZyZWUgQGlzIGNvdW50IHRvICVqICh3YXMgJWkpXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9QUkVFTl9OT01TRyB9LAorCisJLyogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKi8KKwl7IFBSXzBfRlJFRV9CTE9DS19DT1VOVCwKKwkgIE5fKCJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9QUkVFTl9OT01TRyB9LAorCisJLyogTWFraW5nIHF1b3RhIGZpbGUgaGlkZGVuICovCisJeyBQUl8wX0hJREVfUVVPVEEsCisJICBOXygiTWFraW5nIEBxIEBpICVpICglUSkgaGlkZGVuLlxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIFN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAqLworCXsgUFJfMF9NTVBfSU5WQUxJRF9CTEssCisJICBOXygiQFMgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBTdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gKi8KKwl7IFBSXzBfTU1QX0lOVkFMSURfTUFHSUMsCisJICBOXygiQFMgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB8IFBSX05PX09LfSwKKworCS8qIE9wZW5pbmcgZmlsZSBzeXN0ZW0gZmFpbGVkICovCisJeyBQUl8wX09QRU5fRkFJTEVELAorCSAgTl8oImV4dDJmc19vcGVuMjogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIENoZWNraW5nIGdyb3VwIGRlc2NyaXB0b3IgZmFpbGVkICovCisJeyBQUl8wX0NIRUNLX0RFU0NfRkFJTEVELAorCSAgTl8oImV4dDJmc19jaGVja19kZXNjOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogNjRiaXQgaXMgc2V0IGJ1dCBleHRlbnRzIGlzIHVuc2V0LiAqLworCXsgUFJfMF82NEJJVF9XSVRIT1VUX0VYVEVOVFMsCisJICBOXygiQFMgNjRiaXQgZmlsZXN5c3RlbXMgbmVlZHMgZXh0ZW50cyB0byBhY2Nlc3MgdGhlIHdob2xlIGRpc2suICAiKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIHwgUFJfTk9fT0t9LAorCisJLyogVGhlIGZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZyAqLworCXsgUFJfMF9GSVJTVF9NRVRBX0JHX1RPT19CSUcsCisJICBOXygiRmlyc3RfbWV0YV9iZyBpcyB0b28gYmlnLiAgKCVOLCBtYXggdmFsdWUgJWcpLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIFBhc3MgMSBlcnJvcnMgKi8KKworCS8qIFBhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcyAqLworCXsgUFJfMV9QQVNTX0hFQURFUiwKKwkgIE5fKCJQYXNzIDE6IENoZWNraW5nIEBpcywgQGJzLCBhbmQgc2l6ZXNcbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIFJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5ICovCisJeyBQUl8xX1JPT1RfTk9fRElSLCBOXygiQHIgaXMgbm90IGEgQGQuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogUm9vdCBpbm9kZSBoYXMgZHRpbWUgc2V0ICovCisJeyBQUl8xX1JPT1RfRFRJTUUsCisJICBOXygiQHIgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB9LAorCisJLyogUmVzZXJ2ZWQgaW5vZGUgaGFzIGJhZCBtb2RlICovCisJeyBQUl8xX1JFU0VSVkVEX0JBRF9NT0RFLAorCSAgTl8oIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0sgfSwKKworCS8qIERlbGV0ZWQgaW5vZGUgaGFzIHplcm8gZHRpbWUgKi8KKwl7IFBSXzFfWkVST19EVElNRSwKKwkgIE5fKCJARCBAaSAlaSBoYXMgemVybyBkdGltZS4gICIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIElub2RlIGluIHVzZSwgYnV0IGR0aW1lIHNldCAqLworCXsgUFJfMV9TRVRfRFRJTUUsCisJICBOXygiQGkgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gICIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIFplcm8tbGVuZ3RoIGRpcmVjdG9yeSAqLworCXsgUFJfMV9aRVJPX0xFTkdUSF9ESVIsCisJICBOXygiQGkgJWkgaXMgYSBAeiBAZC4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9PSyB9LAorCisJLyogQmxvY2sgYml0bWFwIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2sgKi8KKwl7IFBSXzFfQkJfQ09ORkxJQ1QsCisJICBOXygiQGcgJWcncyBAYiBAQiBhdCAlYiBAQy5cbiIpLAorCSAgUFJPTVBUX1JFTE9DQVRFLCAwIH0sCisKKwkvKiBJbm9kZSBiaXRtYXAgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jayAqLworCXsgUFJfMV9JQl9DT05GTElDVCwKKwkgIE5fKCJAZyAlZydzIEBpIEBCIGF0ICViIEBDLlxuIiksCisJICBQUk9NUFRfUkVMT0NBVEUsIDAgfSwKKworCS8qIElub2RlIHRhYmxlIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2sgKi8KKwl7IFBSXzFfSVRBQkxFX0NPTkZMSUNULAorCSAgTl8oIkBnICVnJ3MgQGkgdGFibGUgYXQgJWIgQEMuXG4iKSwKKwkgIFBST01QVF9SRUxPQ0FURSwgMCB9LAorCisJLyogQmxvY2sgYml0bWFwIGlzIG9uIGEgYmFkIGJsb2NrICovCisJeyBQUl8xX0JCX0JBRF9CTE9DSywKKwkgIE5fKCJAZyAlZydzIEBiIEBCICglYikgaXMgYmFkLiAgIiksCisJICBQUk9NUFRfUkVMT0NBVEUsIDAgfSwKKworCS8qIElub2RlIGJpdG1hcCBpcyBvbiBhIGJhZCBibG9jayAqLworCXsgUFJfMV9JQl9CQURfQkxPQ0ssCisJICBOXygiQGcgJWcncyBAaSBAQiAoJWIpIGlzIGJhZC4gICIpLAorCSAgUFJPTVBUX1JFTE9DQVRFLCAwIH0sCisKKwkvKiBJbm9kZSBoYXMgaW5jb3JyZWN0IGlfc2l6ZSAqLworCXsgUFJfMV9CQURfSV9TSVpFLAorCSAgTl8oIkBpICVpLCBpX3NpemUgaXMgJUlzLCBAcyAlTi4gICIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIElub2RlIGhhcyBpbmNvcnJlY3QgaV9ibG9ja3MgKi8KKwl7IFBSXzFfQkFEX0lfQkxPQ0tTLAorCSAgTl8oIkBpICVpLCBpX0BicyBpcyAlSWIsIEBzICVOLiAgIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB9LAorCisJLyogSWxsZWdhbCBibG9ja251bWJlciBpbiBpbm9kZSAqLworCXsgUFJfMV9JTExFR0FMX0JMT0NLX05VTSwKKwkgIE5fKCJASSAlQiAoJWIpIGluIEBpICVpLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX0xBVENIX0JMT0NLIH0sCisKKwkvKiBCbG9jayBudW1iZXIgb3ZlcmxhcHMgZnMgbWV0YWRhdGEgKi8KKwl7IFBSXzFfQkxPQ0tfT1ZFUkxBUFNfTUVUQURBVEEsCisJICBOXygiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9MQVRDSF9CTE9DSyB9LAorCisJLyogSW5vZGUgaGFzIGlsbGVnYWwgYmxvY2tzIChsYXRjaCBxdWVzdGlvbikgKi8KKwl7IFBSXzFfSU5PREVfQkxPQ0tfTEFUQ0gsCisJICBOXygiQGkgJWkgaGFzIGlsbGVnYWwgQGIocykuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogVG9vIG1hbnkgYmFkIGJsb2NrcyBpbiBpbm9kZSAqLworCXsgUFJfMV9UT09fTUFOWV9CQURfQkxPQ0tTLAorCSAgTl8oIlRvbyBtYW55IGlsbGVnYWwgQGJzIGluIEBpICVpLlxuIiksCisJICBQUk9NUFRfQ0xFQVJfSU5PREUsIFBSX05PX09LIH0sCisKKwkvKiBJbGxlZ2FsIGJsb2NrIG51bWJlciBpbiBiYWQgYmxvY2sgaW5vZGUgKi8KKwl7IFBSXzFfQkJfSUxMRUdBTF9CTE9DS19OVU0sCisJICBOXygiQEkgJUIgKCViKSBpbiBiYWQgQGIgQGkuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfTEFUQ0hfQkJMT0NLIH0sCisKKwkvKiBCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2tzIChsYXRjaCBxdWVzdGlvbikgKi8KKwl7IFBSXzFfSU5PREVfQkJMT0NLX0xBVENILAorCSAgTl8oIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrcyBpbiB1c2UhICovCisJeyBQUl8xX0RVUF9CTE9DS1NfUFJFRU5TVE9QLAorCSAgTl8oIkR1cGxpY2F0ZSBvciBiYWQgQGIgaW4gdXNlIVxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogQmFkIGJsb2NrIHVzZWQgYXMgYmFkIGJsb2NrIGluZGlyZWN0IGJsb2NrICovCisJeyBQUl8xX0JCSU5PREVfQkFEX01FVEFCTE9DSywKKwkgIE5fKCJCYWQgQGIgJWIgdXNlZCBhcyBiYWQgQGIgQGkgaW5kaXJlY3QgQGIuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfTEFUQ0hfQkJMT0NLIH0sCisKKwkvKiBJbmNvbnNpc3RlbmN5IGNhbid0IGJlIGZpeGVkIHByb21wdCAqLworCXsgUFJfMV9CQklOT0RFX0JBRF9NRVRBQkxPQ0tfUFJPTVBULAorCSAgTl8oIlxuVGhlIGJhZCBAYiBAaSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbiIKKwkgICAgICJzaG91bGQgc3RvcCBub3cgYW5kIHJ1biAiImUyZnNjayAtYyIiIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbiIKKwkgICAgICJpbiB0aGUgQGYuXG4iKSwKKwkgIFBST01QVF9DT05USU5VRSwgUFJfUFJFRU5fTk9NU0cgfSwKKworCS8qIEJhZCBwcmltYXJ5IGJsb2NrICovCisJeyBQUl8xX0JBRF9QUklNQVJZX0JMT0NLLAorCSAgTl8oIlxuSWYgdGhlIEBiIGlzIHJlYWxseSBiYWQsIHRoZSBAZiBjYW4gbm90IGJlIGZpeGVkLlxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfQUZURVJfQ09ERSwgUFJfMV9CQURfUFJJTUFSWV9CTE9DS19QUk9NUFQgfSwKKworCS8qIEJhZCBwcmltYXJ5IGJsb2NrIHByb21wdCAqLworCXsgUFJfMV9CQURfUFJJTUFSWV9CTE9DS19QUk9NUFQsCisJICBOXygiWW91IGNhbiByZW1vdmUgdGhpcyBAYiBmcm9tIHRoZSBiYWQgQGIgbGlzdCBhbmQgaG9wZVxuIgorCSAgICAgInRoYXQgdGhlIEBiIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cblxuIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBCYWQgcHJpbWFyeSBzdXBlcmJsb2NrICovCisJeyBQUl8xX0JBRF9QUklNQVJZX1NVUEVSQkxPQ0ssCisJICBOXygiVGhlIHByaW1hcnkgQFMgKCViKSBpcyBvbiB0aGUgYmFkIEBiIGxpc3QuXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9BRlRFUl9DT0RFLCBQUl8xX0JBRF9QUklNQVJZX0JMT0NLIH0sCisKKwkvKiBCYWQgcHJpbWFyeSBibG9jayBncm91cCBkZXNjcmlwdG9ycyAqLworCXsgUFJfMV9CQURfUFJJTUFSWV9HUk9VUF9ERVNDUklQVE9SLAorCSAgTl8oIkJsb2NrICViIGluIHRoZSBwcmltYXJ5IEBnIGRlc2NyaXB0b3JzICIKKwkgICJpcyBvbiB0aGUgYmFkIEBiIGxpc3RcbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0FGVEVSX0NPREUsIFBSXzFfQkFEX1BSSU1BUllfQkxPQ0sgfSwKKworCS8qIEJhZCBzdXBlcmJsb2NrIGluIGdyb3VwICovCisJeyBQUl8xX0JBRF9TVVBFUkJMT0NLLAorCSAgTl8oIldhcm5pbmc6IEdyb3VwICVnJ3MgQFMgKCViKSBpcyBiYWQuXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBCYWQgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgaW4gZ3JvdXAgKi8KKwl7IFBSXzFfQkFEX0dST1VQX0RFU0NSSVBUT1JTLAorCSAgTl8oIldhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgQGcgZGVzY3JpcHRvcnMgaGFzIGEgYmFkICIKKwkgICJAYiAoJWIpLlxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fT0sgfCBQUl9QUkVFTl9OT01TRyB9LAorCisJLyogQmxvY2sgY2xhaW1lZCBmb3Igbm8gcmVhc29uICovCisJeyBQUl8xX1BST0dFUlJfQ0xBSU1FRF9CTE9DSywKKwkgIE5fKCJQcm9ncmFtbWluZyBlcnJvcj8gIEBiICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gIgorCSAgInByb2Nlc3NfYmFkX0BiLlxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEVycm9yIGFsbG9jYXRpbmcgYmxvY2tzIGZvciByZWxvY2F0aW5nIG1ldGFkYXRhICovCisJeyBQUl8xX1JFTE9DX0JMT0NLX0FMTE9DQVRFLAorCSAgTl8oIkBBICVOIGNvbnRpZ3VvdXMgQGIocykgaW4gQGIgQGcgJWcgZm9yICVzOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYnVmZmVyIGR1cmluZyByZWxvY2F0aW9uIHByb2Nlc3MgKi8KKwl7IFBSXzFfUkVMT0NfTUVNT1JZX0FMTE9DQVRFLAorCSAgTl8oIkBBIEBiIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIFJlbG9jYXRpbmcgbWV0YWRhdGEgZ3JvdXAgaW5mb3JtYXRpb24gZnJvbSBYIHRvIFkgKi8KKwl7IFBSXzFfUkVMT0NfRlJPTV9UTywKKwkgIE5fKCJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIFJlbG9jYXRpbmcgbWV0YXRkYXRhIGdyb3VwIGluZm9ybWF0aW9uIHRvIFggKi8KKwl7IFBSXzFfUkVMT0NfVE8sCisJICBOXygiUmVsb2NhdGluZyBAZyAlZydzICVzIHRvICVjLi4uXG4iKSwgLyogeGdldHRleHQ6bm8tYy1mb3JtYXQgKi8KKwkgIFBST01QVF9OT05FLCBQUl9QUkVFTl9PSyB9LAorCisJLyogQmxvY2sgcmVhZCBlcnJvciBkdXJpbmcgcmVsb2NhdGlvbiBwcm9jZXNzICovCisJeyBQUl8xX1JFTE9DX1JFQURfRVJSLAorCSAgTl8oIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIEBiICViIG9mICVzOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEJsb2NrIHdyaXRlIGVycm9yIGR1cmluZyByZWxvY2F0aW9uIHByb2Nlc3MgKi8KKwl7IFBSXzFfUkVMT0NfV1JJVEVfRVJSLAorCSAgTl8oIldhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBAYiAlYiBmb3IgJXM6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9QUkVFTl9PSyB9LAorCisJLyogRXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKi8KKwl7IFBSXzFfQUxMT0NBVEVfSUJJVE1BUF9FUlJPUiwKKwkgIE5fKCJAQSBAaSBAQiAoJU4pOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwICovCisJeyBQUl8xX0FMTE9DQVRFX0JCSVRNQVBfRVJST1IsCisJICBOXygiQEEgQGIgQEIgKCVOKTogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBFcnJvciBhbGxvY2F0aW5nIGljb3VudCBsaW5rIGluZm9ybWF0aW9uICovCisJeyBQUl8xX0FMTE9DQVRFX0lDT1VOVCwKKwkgIE5fKCJAQSBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBFcnJvciBhbGxvY2F0aW5nIGRpcmVjdG9yeSBibG9jayBhcnJheSAqLworCXsgUFJfMV9BTExPQ0FURV9EQkNPVU5ULAorCSAgTl8oIkBBIEBkIEBiIGFycmF5OiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAqLworCXsgUFJfMV9JU0NBTl9FUlJPUiwKKwkgIE5fKCJFcnJvciB3aGlsZSBzY2FubmluZyBAaXMgKCVpKTogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgKi8KKwl7IFBSXzFfQkxPQ0tfSVRFUkFURSwKKwkgIE5fKCJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWk6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogRXJyb3Igd2hpbGUgc3RvcmluZyBpbm9kZSBjb3VudCBpbmZvcm1hdGlvbiAqLworCXsgUFJfMV9JQ09VTlRfU1RPUkUsCisJICBOXygiRXJyb3Igc3RvcmluZyBAaSBjb3VudCBpbmZvcm1hdGlvbiAoQGk9JWksIGNvdW50PSVOKTogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBFcnJvciB3aGlsZSBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAqLworCXsgUFJfMV9BRERfREJMT0NLLAorCSAgTl8oIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gIgorCSAgIihAaT0laSwgQGI9JWIsIG51bT0lTik6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogRXJyb3Igd2hpbGUgcmVhZGluZyBpbm9kZSAoZm9yIGNsZWFyaW5nKSAqLworCXsgUFJfMV9SRUFEX0lOT0RFLAorCSAgTl8oIkVycm9yIHJlYWRpbmcgQGkgJWk6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogU3VwcHJlc3MgbWVzc2FnZXMgcHJvbXB0ICovCisJeyBQUl8xX1NVUFBSRVNTX01FU1NBR0VTLCAiIiwgUFJPTVBUX1NVUFBSRVNTLCBQUl9OT19PSyB9LAorCisJLyogSW1hZ2ljIGZsYWcgc2V0IG9uIGFuIGlub2RlIHdoZW4gZmlsZXN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgaXQgKi8KKwl7IFBSXzFfU0VUX0lNQUdJQywKKwkgIE5fKCJAaSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIEltbXV0YWJsZSBmbGFnIHNldCBvbiBhIGRldmljZSBvciBzb2NrZXQgaW5vZGUgKi8KKwl7IFBSXzFfU0VUX0lNTVVUQUJMRSwKKwkgIE5fKCJTcGVjaWFsIChAdi9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChAaSAlaSkgaGFzIGltbXV0YWJsZVxuIgorCSAgICAgIm9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX1BSRUVOX09LIHwgUFJfUFJFRU5fTk8gfCBQUl9OT19PSyB9LAorCisJLyogQ29tcHJlc3Npb24gZmxhZyBzZXQgb24gYW4gaW5vZGUgd2hlbiBmaWxlc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBpdCAqLworCXsgUFJfMV9DT01QUl9TRVQsCisJICBOXygiQGkgJWkgaGFzIEBjaW9uIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgQGNpb24gc3VwcG9ydC4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBOb24temVybyBzaXplIGZvciBkZXZpY2UsIGZpZm8gb3Igc29ja2V0IGlub2RlICovCisJeyBQUl8xX1NFVF9OT05aU0laRSwKKwkgIE5fKCJTcGVjaWFsIChAdi9zb2NrZXQvZmlmbykgQGkgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAiKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBGaWxlc3lzdGVtIHJldmlzaW9uIGlzIDAsIGJ1dCBmZWF0dXJlIGZsYWdzIGFyZSBzZXQgKi8KKwl7IFBSXzFfRlNfUkVWX0xFVkVMLAorCSAgTl8oIkBmIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIEBmLiAgIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB8IFBSX05PX09LIH0sCisKKwkvKiBKb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhICovCisJeyBQUl8xX0pPVVJOQUxfSU5PREVfTk9UX0NMRUFSLAorCSAgTl8oIkBqIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBKb3VybmFsIGhhcyBiYWQgbW9kZSAqLworCXsgUFJfMV9KT1VSTkFMX0JBRF9NT0RFLAorCSAgTl8oIkBqIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBEZWFsIHdpdGggaW5vZGVzIHRoYXQgd2VyZSBwYXJ0IG9mIG9ycGhhbiBsaW5rZWQgbGlzdCAqLworCXsgUFJfMV9MT1dfRFRJTUUsCisJICBOXygiQGkgJWkgd2FzIHBhcnQgb2YgdGhlIEBvIEBpIGxpc3QuICAiKSwKKwkgIFBST01QVF9GSVgsIFBSX0xBVENIX0xPV19EVElNRSwgMCB9LAorCisJLyogRGVhbCB3aXRoIGlub2RlcyB0aGF0IHdlcmUgcGFydCBvZiBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZAorCSAgIGxpc3QgKGxhdGNoIHF1ZXN0aW9uKSAqLworCXsgUFJfMV9PUlBIQU5fTElTVF9SRUZVR0VFUywKKwkgIE5fKCJAaXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgIiksCisJICBQUk9NUFRfRklYLCAwIH0sCisKKwkvKiBFcnJvciBhbGxvY2F0aW5nIHJlZmNvdW50IHN0cnVjdHVyZSAqLworCXsgUFJfMV9BTExPQ0FURV9SRUZDT1VOVCwKKwkgIE5fKCJAQSByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAqLworCXsgUFJfMV9SRUFEX0VBX0JMT0NLLAorCSAgTl8oIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgZm9yIEBpICVpLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIEludmFsaWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICovCisJeyBQUl8xX0JBRF9FQV9CTE9DSywKKwkgIE5fKCJAaSAlaSBoYXMgYSBiYWQgQGEgQGIgJWIuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogRXJyb3IgcmVhZGluZyBFeHRlbmRlZCBBdHRyaWJ1dGUgYmxvY2sgd2hpbGUgZml4aW5nIHJlZmNvdW50ICovCisJeyBQUl8xX0VYVEFUVFJfUkVBRF9BQk9SVCwKKwkgIE5fKCJFcnJvciByZWFkaW5nIEBhIEBiICViICglbSkuICAiKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogRXh0ZW5kZWQgYXR0cmlidXRlIHJlZmVyZW5jZSBjb3VudCBpbmNvcnJlY3QgKi8KKwl7IFBSXzFfRVhUQVRUUl9SRUZDT1VOVCwKKwkgIE5fKCJAYSBAYiAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBAcyAlTi4gICIpLAorCSAgUFJPTVBUX0ZJWCwgMCB9LAorCisJLyogRXJyb3Igd3JpdGluZyBFeHRlbmRlZCBBdHRyaWJ1dGUgYmxvY2sgd2hpbGUgZml4aW5nIHJlZmNvdW50ICovCisJeyBQUl8xX0VYVEFUVFJfV1JJVEVfQUJPUlQsCisJICBOXygiRXJyb3Igd3JpdGluZyBAYSBAYiAlYiAoJW0pLiAgIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIE11bHRpcGxlIEVBIGJsb2NrcyBub3Qgc3VwcG9ydGVkICovCisJeyBQUl8xX0VBX01VTFRJX0JMT0NLLAorCSAgTl8oIkBhIEBiICViIGhhcyBoX0BicyA+IDEuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgMH0sCisKKwkvKiBFcnJvciBhbGxvY2F0aW5nIEVBIHJlZ2lvbiBhbGxvY2F0aW9uIHN0cnVjdHVyZSAqLworCXsgUFJfMV9FQV9BTExPQ19SRUdJT05fQUJPUlQsCisJICBOXygiQEEgQGEgQGIgJWIuICAiKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTH0sCisKKwkvKiBFcnJvciBFQSBhbGxvY2F0aW9uIGNvbGxpc2lvbiAqLworCXsgUFJfMV9FQV9BTExPQ19DT0xMSVNJT04sCisJICBOXygiQGEgQGIgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIDB9LAorCisJLyogQmFkIGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lICovCisJeyBQUl8xX0VBX0JBRF9OQU1FLAorCSAgTl8oIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIG5hbWUpLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIDB9LAorCisJLyogQmFkIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZSAqLworCXsgUFJfMV9FQV9CQURfVkFMVUUsCisJICBOXygiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gdmFsdWUpLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIDB9LAorCisJLyogSW5vZGUgdG9vIGJpZyAobGF0Y2ggcXVlc3Rpb24pICovCisJeyBQUl8xX0lOT0RFX1RPT0JJRywKKwkgIE5fKCJAaSAlaSBpcyB0b28gYmlnLiAgIiksIFBST01QVF9UUlVOQ0FURSwgMCB9LAorCisJLyogRGlyZWN0b3J5IHRvbyBiaWcgKi8KKwl7IFBSXzFfVE9PQklHX0RJUiwKKwkgIE5fKCIlQiAoJWIpIGNhdXNlcyBAZCB0byBiZSB0b28gYmlnLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX0xBVENIX1RPT0JJRyB9LAorCisJLyogUmVndWxhciBmaWxlIHRvbyBiaWcgKi8KKwl7IFBSXzFfVE9PQklHX1JFRywKKwkgIE5fKCIlQiAoJWIpIGNhdXNlcyBmaWxlIHRvIGJlIHRvbyBiaWcuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfTEFUQ0hfVE9PQklHIH0sCisKKwkvKiBTeW1saW5rIHRvbyBiaWcgKi8KKwl7IFBSXzFfVE9PQklHX1NZTUxJTkssCisJICBOXygiJUIgKCViKSBjYXVzZXMgc3ltbGluayB0byBiZSB0b28gYmlnLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX0xBVENIX1RPT0JJRyB9LAorCisJLyogSU5ERVhfRkwgZmxhZyBzZXQgb24gYSBub24tSFRSRUUgZmlsZXN5c3RlbSAqLworCXsgUFJfMV9IVFJFRV9TRVQsCisJICBOXygiQGkgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbiIpLAorCSAgUFJPTVBUX0NMRUFSX0hUUkVFLCBQUl9QUkVFTl9PSyB9LAorCisJLyogSU5ERVhfRkwgZmxhZyBzZXQgb24gYSBub24tZGlyZWN0b3J5ICovCisJeyBQUl8xX0hUUkVFX05PRElSLAorCSAgTl8oIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgQGQuXG4iKSwKKwkgIFBST01QVF9DTEVBUl9IVFJFRSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEludmFsaWQgcm9vdCBub2RlIGluIEhUUkVFIGRpcmVjdG9yeSAqLworCXsgUFJfMV9IVFJFRV9CQURST09ULAorCSAgTl8oIkBoICVpIGhhcyBhbiBAbiByb290IG5vZGUuXG4iKSwKKwkgIFBST01QVF9DTEVBUl9IVFJFRSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIFVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiBpbiBIVFJFRSBkaXJlY3RvcnkgKi8KKwl7IFBSXzFfSFRSRUVfSEFTSFYsCisJICBOXygiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iKSwKKwkgIFBST01QVF9DTEVBUl9IVFJFRSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEluY29tcGF0aWJsZSBmbGFnIGluIEhUUkVFIHJvb3Qgbm9kZSAqLworCXsgUFJfMV9IVFJFRV9JTkNPTVBBVCwKKwkgIE5fKCJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIpLAorCSAgUFJPTVBUX0NMRUFSX0hUUkVFLCBQUl9QUkVFTl9PSyB9LAorCisJLyogSFRSRUUgdG9vIGRlZXAgKi8KKwl7IFBSXzFfSFRSRUVfREVQVEgsCisJICBOXygiQGggJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbiIpLAorCSAgUFJPTVBUX0NMRUFSX0hUUkVFLCBQUl9QUkVFTl9PSyB9LAorCisJLyogQmFkIGJsb2NrIGhhcyBpbmRpcmVjdCBibG9jayB0aGF0IGNvbmZsaWN0cyB3aXRoIGZpbGVzeXN0ZW0gYmxvY2sgKi8KKwl7IFBSXzFfQkJfRlNfQkxPQ0ssCisJICBOXygiQmFkIEBiIEBpIGhhcyBhbiBpbmRpcmVjdCBAYiAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbiIKKwkgICAgICJAZiBtZXRhZGF0YS4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9MQVRDSF9CQkxPQ0sgfSwKKworCS8qIFJlc2l6ZSBpbm9kZSBmYWlsZWQgKi8KKwl7IFBSXzFfUkVTSVpFX0lOT0RFX0NSRUFURSwKKwkgIE5fKCJSZXNpemUgQGkgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uIiksCisJICBQUk9NUFRfQ09OVElOVUUsIDAgfSwKKworCS8qIGludmFsaWQgaW5vZGUtPmlfZXh0cmFfaXNpemUgKi8KKwl7IFBSXzFfRVhUUkFfSVNJWkUsCisJICBOXygiQGkgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBAblxuIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB9LAorCisJLyogaW52YWxpZCBlYSBlbnRyeS0+ZV9uYW1lX2xlbiAqLworCXsgUFJfMV9BVFRSX05BTUVfTEVOLAorCSAgTl8oIkBhIGluIEBpICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBAblxuIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBpbnZhbGlkIGVhIGVudHJ5LT5lX3ZhbHVlX29mZnMgKi8KKwl7IFBSXzFfQVRUUl9WQUxVRV9PRkZTRVQsCisJICBOXygiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgQG5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9PSyB9LAorCisJLyogaW52YWxpZCBlYSBlbnRyeS0+ZV92YWx1ZV9ibG9jayAqLworCXsgUFJfMV9BVFRSX1ZBTFVFX0JMT0NLLAorCSAgTl8oIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIEBiICglTikgd2hpY2ggaXMgQG4gKG11c3QgYmUgMClcbiIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9PSyB9LAorCisJLyogaW52YWxpZCBlYSBlbnRyeS0+ZV92YWx1ZV9zaXplICovCisJeyBQUl8xX0FUVFJfVkFMVUVfU0laRSwKKwkgIE5fKCJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgQG5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9PSyB9LAorCisJLyogaW52YWxpZCBlYSBlbnRyeS0+ZV9oYXNoICovCisJeyBQUl8xX0FUVFJfSEFTSCwKKwkgIE5fKCJAYSBpbiBAaSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgQG5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9PSyB9LAorCisJLyogaW5vZGUgYXBwZWFycyB0byBiZSBhIGRpcmVjdG9yeSAqLworCXsgUFJfMV9UUkVBVF9BU19ESVJFQ1RPUlksCisJICBOXygiQGkgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuIiksCisJICBQUk9NUFRfRklYLCAwIH0sCisKKwkvKiBFcnJvciB3aGlsZSByZWFkaW5nIGV4dGVudCB0cmVlICovCisJeyBQUl8xX1JFQURfRVhURU5ULAorCSAgTl8oIkVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBAeCB0cmVlIGluIEBpICVpOiAlbVxuIiksCisJICBQUk9NUFRfQ0xFQVJfSU5PREUsIDAgfSwKKworCS8qIEZhaWx1cmUgdG8gaXRlcmF0ZSBleHRlbnRzICovCisJeyBQUl8xX0VYVEVOVF9JVEVSQVRFX0ZBSUxVUkUsCisJICBOXygiRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBAaSAlaVxuIgorCSAgICAgIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuIiksCisJICBQUk9NUFRfQ0xFQVJfSU5PREUsIDAgfSwKKworCS8qIEJhZCBzdGFydGluZyBibG9jayBpbiBleHRlbnQgKi8KKwl7IFBSXzFfRVhURU5UX0JBRF9TVEFSVF9CTEssCisJICBOXygiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuXHQobG9naWNhbCBAYiAlYywgQG4gcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBFeHRlbnQgZW5kcyBiZXlvbmQgZmlsZXN5c3RlbSAqLworCXsgUFJfMV9FWFRFTlRfRU5EU19CRVlPTkQsCisJICBOXygiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIEBuIGxlbiAlTilcbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIGEgbm9uLWV4dGVudHMgZmlsZXN5c3RlbSAqLworCXsgUFJfMV9FWFRFTlRTX1NFVCwKKwkgIE5fKCJAaSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBpbm9kZSBoYXMgZXh0ZW50cywgc3VwZXJibG9jayBtaXNzaW5nIElOQ09NUEFUX0VYVEVOVFMgZmVhdHVyZSAqLworCXsgUFJfMV9FWFRFTlRfRkVBVFVSRSwKKwkgIE5fKCJAaSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgQFMgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbiIpLAorCSAgUFJPTVBUX0ZJWCwgMCB9LAorCisJLyogaW5vZGUgbWlzc2luZyBFWFRFTlRTX0ZMLCBidXQgaXMgYW4gZXh0ZW50IGlub2RlICovCisJeyBQUl8xX1VOU0VUX0VYVEVOVF9GTCwKKwkgIE5fKCJAaSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4iKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBGYXN0IHN5bWxpbmsgaGFzIEVYVEVOVFNfRkwgc2V0ICovCisJeyBQUl8xX0ZBU1RfU1lNTElOS19FWFRFTlRfRkwsCisJICBOXygiRmFzdCBzeW1saW5rICVpIGhhcyBFWFRFTlRfRkwgc2V0LiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIEV4dGVudHMgYXJlIG91dCBvZiBvcmRlciAqLworCXsgUFJfMV9PVVRfT0ZfT1JERVJfRVhURU5UUywKKwkgIE5fKCJAaSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcblx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJeyBQUl8xX0VYVEVOVF9IRUFERVJfSU5WQUxJRCwKKwkgIE5fKCJAaSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIEZhaWxlZCB0byBjb252ZXJ0IHN1YmNsdXN0ZXIgYml0bWFwICovCisJeyBQUl8xX0NPTlZFUlRfU1VCQ0xVU1RFUiwKKwkgIE5fKCJFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgQGIgQEI6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogUXVvdGEgaW5vZGUgaGFzIGJhZCBtb2RlICovCisJeyBQUl8xX1FVT1RBX0JBRF9NT0RFLAorCSAgTl8oIkBxIEBpIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0sgfSwKKworCS8qIFF1b3RhIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhICovCisJeyBQUl8xX1FVT1RBX0lOT0RFX05PVF9DTEVBUiwKKwkgIE5fKCJAcSBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9PSyB9LAorCisJLyogUXVvdGEgaW5vZGUgaXMgdXNlciB2aXNpYmxlICovCisJeyBQUl8xX1FVT1RBX0lOT0RFX05PVF9ISURERU4sCisJICBOXygiQHEgQGkgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9PSyB9LAorCisJLyogSW52YWxpZCBiYWQgaW5vZGUgKi8KKwl7IFBSXzFfSU5WQUxJRF9CQURfSU5PREUsCisJICBOXygiVGhlIGJhZCBAYiBAaSBsb29rcyBAbi4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBFeHRlbnQgaGFzIHplcm8gbGVuZ3RoICovCisJeyBQUl8xX0VYVEVOVF9MRU5HVEhfWkVSTywKKwkgIE5fKCJAaSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG5cdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYilcbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKgorCSAqIEludGVyaW9yIGV4dGVudCBub2RlIGxvZ2ljYWwgb2Zmc2V0IGRvZXNuJ3QgbWF0Y2ggZmlyc3Qgbm9kZSBiZWxvdyBpdAorCSAqLworCXsgUFJfMV9FWFRFTlRfSU5ERVhfU1RBUlRfSU5WQUxJRCwKKwkgIE5fKCJJbnRlcmlvciBAeCBub2RlIGxldmVsICVOIG9mIEBpICVpOlxuIgorCSAgICAgIkxvZ2ljYWwgc3RhcnQgJWIgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAlYyBhdCBuZXh0IGxldmVsLiAgIiksCisJICBQUk9NUFRfRklYLCAwIH0sCisKKwkvKiBFeHRlbnQgZW5kIGlzIG91dCBvZiBib3VuZHMgZm9yIHRoZSB0cmVlICovCisJeyBQUl8xX0VYVEVOVF9FTkRfT1VUX09GX0JPVU5EUywKKwkgIE5fKCJAaSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcblx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisKKwkvKiBEaXJlY3RvcnkgaW5vZGUgYmxvY2sgPGJsb2NrPiBzaG91bGQgYmUgYXQgYmxvY2sgPG90aGVyYmxvY2s+ICovCisJeyBQUl8xX0NPTExBUFNFX0RCTE9DSywKKwkgIE5fKCJAZCBAaSAlaSBAYiAlYiBzaG91bGQgYmUgYXQgQGIgJWMuICAiKSwKKwkgIFBST01QVF9GSVgsIDAgfSwKKworCS8qIEV4dGVudHMvaW5saW5lZGF0YSBmbGFnIHNldCBvbiBhIGRldmljZSBvciBzb2NrZXQgaW5vZGUgKi8KKwl7IFBSXzFfVU5JTklUX0RCTE9DSywKKwkgIE5fKCJAZCBAaSAlaSBoYXMgQHggbWFya2VkIHVuaW5pdGlhbGl6ZWQgYXQgQGIgJWMuICAiKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBJbm9kZSBsb2dpY2FsIGJsb2NrIChwaHlzaWNhbCBibG9jayApIGlzIG1pc2FsaWduZWQuICovCisJeyBQUl8xX01JU0FMSUdORURfQ0xVU1RFUiwKKwkgIE5fKCJAaSAlaSBsb2dpY2FsIEBiICViIChwaHlzaWNhbCBAYiAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuV2lsbCBmaXggaW4gcGFzcyAxQi5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIFBhc3MgMWIgZXJyb3JzICovCisKKwkvKiBQYXNzIDFCOiBSZXNjYW4gZm9yIGR1cGxpY2F0ZS9iYWQgYmxvY2tzICovCisJeyBQUl8xQl9QQVNTX0hFQURFUiwKKwkgIE5fKCJcblJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBAYnMgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIEBpLi4uXG4iCisJICAiUGFzcyAxQjogUmVzY2FubmluZyBmb3IgQG0gQGJzXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBEdXBsaWNhdGUvYmFkIGJsb2NrKHMpIGhlYWRlciAqLworCXsgUFJfMUJfRFVQX0JMT0NLX0hFQURFUiwKKwkgIE5fKCJAbSBAYihzKSBpbiBAaSAlaToiKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBEdXBsaWNhdGUvYmFkIGJsb2NrKHMpIGluIGlub2RlICovCisJeyBQUl8xQl9EVVBfQkxPQ0ssCisJICAiICViIiwKKwkgIFBST01QVF9OT05FLCBQUl9MQVRDSF9EQkxPQ0sgfCBQUl9QUkVFTl9OT0hEUiB9LAorCisJLyogRHVwbGljYXRlL2JhZCBibG9jayhzKSBlbmQgKi8KKwl7IFBSXzFCX0RVUF9CTE9DS19FTkQsCisJICAiXG4iLAorCSAgUFJPTVBUX05PTkUsIFBSX1BSRUVOX05PSERSIH0sCisKKwkvKiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKi8KKwl7IFBSXzFCX0lTQ0FOX0VSUk9SLAorCSAgTl8oIkVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwICovCisJeyBQUl8xQl9BTExPQ0FURV9JQklUTUFQX0VSUk9SLAorCSAgTl8oIkBBIEBpIEBCIChAaV9kdXBfbWFwKTogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgKi8KKwl7IFBSXzFCX0JMT0NLX0lURVJBVEUsCisJICBOXygiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpICglcyk6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBFcnJvciBhZGp1c3RpbmcgRUEgcmVmY291bnQgKi8KKwl7IFBSXzFCX0FESl9FQV9SRUZDT1VOVCwKKwkgIE5fKCJFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIEBhIEBiICViIChAaSAlaSk6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBQYXNzIDFDOiBTY2FuIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4gKi8KKwl7IFBSXzFDX1BBU1NfSEVBREVSLAorCSAgTl8oIlBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBAaXMgd2l0aCBAbSBAYnNcbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCisJLyogUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MgKi8KKwl7IFBSXzFEX1BBU1NfSEVBREVSLAorCSAgTl8oIlBhc3MgMUQ6IFJlY29uY2lsaW5nIEBtIEBic1xuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogRmlsZSBoYXMgZHVwbGljYXRlIGJsb2NrcyAqLworCXsgUFJfMURfRFVQX0ZJTEUsCisJICBOXygiRmlsZSAlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pIFxuIgorCSAgIiAgaGFzICVyIEBtIEBiKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogTGlzdCBvZiBmaWxlcyBzaGFyaW5nIGR1cGxpY2F0ZSBibG9ja3MgKi8KKwl7IFBSXzFEX0RVUF9GSUxFX0xJU1QsCisJICBOXygiXHQlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBGaWxlIHNoYXJpbmcgYmxvY2tzIHdpdGggZmlsZXN5c3RlbSBtZXRhZGF0YSAgKi8KKwl7IFBSXzFEX1NIQVJFX01FVEFEQVRBLAorCSAgTl8oIlx0PEBmIG1ldGFkYXRhPlxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogUmVwb3J0IG9mIGhvdyBtYW55IGR1cGxpY2F0ZS9iYWQgaW5vZGVzICovCisJeyBQUl8xRF9OVU1fRFVQX0lOT0RFUywKKwkgIE5fKCIoVGhlcmUgYXJlICVOIEBpcyBjb250YWluaW5nIEBtIEBicy4pXG5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIER1cGxpY2F0ZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuICovCisJeyBQUl8xRF9EVVBfQkxPQ0tTX0RFQUxULAorCSAgTl8oIkBtIEBicyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBDbG9uZSBkdXBsaWNhdGUvYmFkIGJsb2Nrcz8gKi8KKwl7IFBSXzFEX0NMT05FX1FVRVNUSU9OLAorCSAgIiIsIFBST01QVF9DTE9ORSwgUFJfTk9fT0sgfSwKKworCS8qIERlbGV0ZSBmaWxlPyAqLworCXsgUFJfMURfREVMRVRFX1FVRVNUSU9OLAorCSAgIiIsIFBST01QVF9ERUxFVEUsIDAgfSwKKworCS8qIENvdWxkbid0IGNsb25lIGZpbGUgKGVycm9yKSAqLworCXsgUFJfMURfQ0xPTkVfRVJST1IsCisJICBOXygiQ291bGRuJ3QgY2xvbmUgZmlsZTogJW1cbiIpLCBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogUGFzcyAyIGVycm9ycyAqLworCisJLyogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlICovCisJeyBQUl8yX1BBU1NfSEVBREVSLAorCSAgTl8oIlBhc3MgMjogQ2hlY2tpbmcgQGQgc3RydWN0dXJlXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBCYWQgaW5vZGUgbnVtYmVyIGZvciAnLicgKi8KKwl7IFBSXzJfQkFEX0lOT0RFX0RPVCwKKwkgIE5fKCJAbiBAaSBudW1iZXIgZm9yICcuJyBpbiBAZCBAaSAlaS5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgMCB9LAorCisJLyogRW50cnkgJ3h4eHgnIGluIC9hL2IvYyBoYXMgYmFkIGlub2RlIG51bWJlci4qLworCXsgUFJfMl9CQURfSU5PLAorCSAgTl8oIkBFIGhhcyBAbiBAaSAjOiAlRGkuXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogRW50cnkgJ3h4eHgnIGluIC9hL2IvYyBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgbm5ubm4uKi8KKwl7IFBSXzJfVU5VU0VEX0lOT0RFLAorCSAgTl8oIkBFIGhhcyBARC91bnVzZWQgQGkgJURpLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBEaXJlY3RyeSBlbnRyeSBpcyBsaW5rIHRvICcuJyAqLworCXsgUFJfMl9MSU5LX0RPVCwKKwkgIE5fKCJARSBATCB0byAnLicgICIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBEaXJlY3RvcnkgZW50cnkgcG9pbnRzIHRvIGlub2RlIG5vdyBsb2NhdGVkIGluIGEgYmFkIGJsb2NrICovCisJeyBQUl8yX0JCX0lOT0RFLAorCSAgTl8oIkBFIHBvaW50cyB0byBAaSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIEBiLlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIERpcmVjdG9yeSBlbnRyeSBjb250YWlucyBhIGxpbmsgdG8gYSBkaXJlY3RvcnkgKi8KKwl7IFBSXzJfTElOS19ESVIsCisJICBOXygiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogRGlyZWN0b3J5IGVudHJ5IGNvbnRhaW5zIGEgbGluayB0byB0aGUgcm9vdCBkaXJlY3RyeSAqLworCXsgUFJfMl9MSU5LX1JPT1QsCisJICBOXygiQEUgQEwgdG8gdGhlIEByLlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIERpcmVjdG9yeSBlbnRyeSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lICovCisJeyBQUl8yX0JBRF9OQU1FLAorCSAgTl8oIkBFIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4iKSwKKwkgIFBST01QVF9GSVgsIDAgfSwKKworCS8qIE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAqLworCXsgUFJfMl9NSVNTSU5HX0RPVCwKKwkgIE5fKCJNaXNzaW5nICcuJyBpbiBAZCBAaSAlaS5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgMCB9LAorCisJLyogTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAqLworCXsgUFJfMl9NSVNTSU5HX0RPVF9ET1QsCisJICBOXygiTWlzc2luZyAnLi4nIGluIEBkIEBpICVpLlxuIiksCisJICBQUk9NUFRfRklYLCAwIH0sCisKKwkvKiBGaXJzdCBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgZG9lc24ndCBjb250YWluICcuJyAqLworCXsgUFJfMl8xU1RfTk9UX0RPVCwKKwkgIE5fKCJGaXJzdCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSAoJXApIEBzICcuJ1xuIiksCisJICBQUk9NUFRfRklYLCAwIH0sCisKKwkvKiBTZWNvbmQgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlIGRvZXNuJ3QgY29udGFpbiAnLi4nICovCisJeyBQUl8yXzJORF9OT1RfRE9UX0RPVCwKKwkgIE5fKCJTZWNvbmQgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgQHMgJy4uJ1xuIiksCisJICBQUk9NUFRfRklYLCAwIH0sCisKKwkvKiBpX2ZhZGRyIHNob3VsZCBiZSB6ZXJvICovCisJeyBQUl8yX0ZBRERSX1pFUk8sCisJICBOXygiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogaV9maWxlX2FjbCBzaG91bGQgYmUgemVybyAqLworCXsgUFJfMl9GSUxFX0FDTF9aRVJPLAorCSAgTl8oImlfZmlsZV9hY2wgQEYgJUlmLCBAcyB6ZXJvLlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIGlfZGlyX2FjbCBzaG91bGQgYmUgemVybyAqLworCXsgUFJfMl9ESVJfQUNMX1pFUk8sCisJICBOXygiaV9kaXJfYWNsIEBGICVJZCwgQHMgemVyby5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBpX2ZyYWcgc2hvdWxkIGJlIHplcm8gKi8KKwl7IFBSXzJfRlJBR19aRVJPLAorCSAgTl8oImlfZnJhZyBARiAlTiwgQHMgemVyby5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBpX2ZzaXplIHNob3VsZCBiZSB6ZXJvICovCisJeyBQUl8yX0ZTSVpFX1pFUk8sCisJICBOXygiaV9mc2l6ZSBARiAlTiwgQHMgemVyby5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBpbm9kZSBoYXMgYmFkIG1vZGUgKi8KKwl7IFBSXzJfQkFEX01PREUsCisJICBOXygiQGkgJWkgKCVRKSBoYXMgQG4gbW9kZSAoJUltKS5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBkaXJlY3RvcnkgY29ycnVwdGVkICovCisJeyBQUl8yX0RJUl9DT1JSVVBURUQsCisJICBOXygiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IEBkIGNvcnJ1cHRlZFxuIiksCisJICBQUk9NUFRfU0FMVkFHRSwgMCB9LAorCisJLyogZmlsZW5hbWUgdG9vIGxvbmcgKi8KKwl7IFBSXzJfRklMRU5BTUVfTE9ORywKKwkgIE5fKCJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIpLAorCSAgUFJPTVBUX1RSVU5DQVRFLCAwIH0sCisKKwkvKiBEaXJlY3RvcnkgaW5vZGUgaGFzIGEgbWlzc2luZyBibG9jayAoaG9sZSkgKi8KKwl7IFBSXzJfRElSRUNUT1JZX0hPTEUsCisJICBOXygiQGQgQGkgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgIiksCisJICBQUk9NUFRfQUxMT0NBVEUsIDAgfSwKKworCS8qICcuJyBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkICovCisJeyBQUl8yX0RPVF9OVUxMX1RFUk0sCisJICBOXygiJy4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIpLAorCSAgUFJPTVBUX0ZJWCwgMCB9LAorCisJLyogJy4uJyBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkICovCisJeyBQUl8yX0RPVF9ET1RfTlVMTF9URVJNLAorCSAgTl8oIicuLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIiksCisJICBQUk9NUFRfRklYLCAwIH0sCisKKwkvKiBJbGxlZ2FsIGNoYXJhY3RlciBkZXZpY2UgaW5vZGUgKi8KKwl7IFBSXzJfQkFEX0NIQVJfREVWLAorCSAgTl8oIkBpICVpICglUSkgaXMgYW4gQEkgY2hhcmFjdGVyIEB2LlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIElsbGVnYWwgYmxvY2sgZGV2aWNlIGlub2RlICovCisJeyBQUl8yX0JBRF9CTE9DS19ERVYsCisJICBOXygiQGkgJWkgKCVRKSBpcyBhbiBASSBAYiBAdi5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBEdXBsaWNhdGUgJy4nIGVudHJ5ICovCisJeyBQUl8yX0RVUF9ET1QsCisJICBOXygiQEUgaXMgZHVwbGljYXRlICcuJyBAZS5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgMCB9LAorCisJLyogRHVwbGljYXRlICcuLicgZW50cnkgKi8KKwl7IFBSXzJfRFVQX0RPVF9ET1QsCisJICBOXygiQEUgaXMgZHVwbGljYXRlICcuLicgQGUuXG4iKSwKKwkgIFBST01QVF9GSVgsIDAgfSwKKworCS8qIEludGVybmFsIGVycm9yOiBjb3VsZG4ndCBmaW5kIGRpcl9pbmZvICovCisJeyBQUl8yX05PX0RJUklORk8sCisJICBOXygiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEZpbmFsIHJlY19sZW4gaXMgd3JvbmcgKi8KKwl7IFBSXzJfRklOQUxfUkVDTEVOLAorCSAgTl8oIkBFIGhhcyByZWNfbGVuIG9mICVEciwgQHMgJU4uXG4iKSwKKwkgIFBST01QVF9GSVgsIDAgfSwKKworCS8qIEVycm9yIGFsbG9jYXRpbmcgaWNvdW50IHN0cnVjdHVyZSAqLworCXsgUFJfMl9BTExPQ0FURV9JQ09VTlQsCisJICBOXygiQEEgaWNvdW50IHN0cnVjdHVyZTogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcnkgYmxvY2tzICovCisJeyBQUl8yX0RCTElTVF9JVEVSQVRFLAorCSAgTl8oIkVycm9yIGl0ZXJhdGluZyBvdmVyIEBkIEBiczogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBFcnJvciByZWFkaW5nIGRpcmVjdG9yeSBibG9jayAqLworCXsgUFJfMl9SRUFEX0RJUkJMT0NLLAorCSAgTl8oIkVycm9yIHJlYWRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIpLAorCSAgUFJPTVBUX0NPTlRJTlVFLCAwIH0sCisKKwkvKiBFcnJvciB3cml0aW5nIGRpcmVjdG9yeSBibG9jayAqLworCXsgUFJfMl9XUklURV9ESVJCTE9DSywKKwkgIE5fKCJFcnJvciB3cml0aW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iKSwKKwkgIFBST01QVF9DT05USU5VRSwgMCB9LAorCisJLyogRXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrICovCisJeyBQUl8yX0FMTE9DX0RJUkJPQ0ssCisJICBOXygiQEEgbmV3IEBkIEBiIGZvciBAaSAlaSAoJXMpOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogRXJyb3IgZGVhbGxvY2F0aW5nIGlub2RlICovCisJeyBQUl8yX0RFQUxMT0NfSU5PREUsCisJICBOXygiRXJyb3IgZGVhbGxvY2F0aW5nIEBpICVpOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIERpcmVjdG9yeSBlbnRyeSBmb3IgJy4nIGlzIGJpZy4gIFNwbGl0PyAqLworCXsgUFJfMl9TUExJVF9ET1QsCisJICBOXygiQGQgQGUgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbiIpLAorCSAgUFJPTVBUX1NQTElULCBQUl9OT19PSyB9LAorCisJLyogSWxsZWdhbCBGSUZPIGlub2RlICovCisJeyBQUl8yX0JBRF9GSUZPLAorCSAgTl8oIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBJbGxlZ2FsIHNvY2tldCBpbm9kZSAqLworCXsgUFJfMl9CQURfU09DS0VULAorCSAgTl8oIkBpICVpICglUSkgaXMgYW4gQEkgc29ja2V0LlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIERpcmVjdG9yeSBmaWxldHlwZSBub3Qgc2V0ICovCisJeyBQUl8yX1NFVF9GSUxFVFlQRSwKKwkgIE5fKCJTZXR0aW5nIGZpbGV0eXBlIGZvciBARSB0byAlTi5cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX1BSRUVOX09LIHwgUFJfTk9fT0sgfCBQUl9OT19OT01TRyB9LAorCisJLyogRGlyZWN0b3J5IGZpbGV0eXBlIGluY29ycmVjdCAqLworCXsgUFJfMl9CQURfRklMRVRZUEUsCisJICBOXygiQEUgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgQHMgJU4pLlxuIiksCisJICBQUk9NUFRfRklYLCAwIH0sCisKKwkvKiBEaXJlY3RvcnkgZmlsZXR5cGUgc2V0IG9uIGZpbGVzeXN0ZW0gKi8KKwl7IFBSXzJfQ0xFQVJfRklMRVRZUEUsCisJICBOXygiQEUgaGFzIGZpbGV0eXBlIHNldC5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9PSyB9LAorCisJLyogRGlyZWN0b3J5IGZpbGVuYW1lIGlzIG51bGwgKi8KKwl7IFBSXzJfTlVMTF9OQU1FLAorCSAgTl8oIkBFIGhhcyBhIEB6IG5hbWUuXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogSW52YWxpZCBzeW1saW5rICovCisJeyBQUl8yX0lOVkFMSURfU1lNTElOSywKKwkgIE5fKCJTeW1saW5rICVRIChAaSAjJWkpIGlzIEBuLlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIGlfZmlsZV9hY2wgKGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jaykgaXMgYmFkICovCisJeyBQUl8yX0ZJTEVfQUNMX0JBRCwKKwkgIE5fKCJAYSBAYiBARiBAbiAoJUlmKS5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBGaWxlc3lzdGVtIGNvbnRhaW5zIGxhcmdlIGZpbGVzLCBidXQgaGFzIG5vIHN1Y2ggZmxhZyBpbiBzYiAqLworCXsgUFJfMl9GRUFUVVJFX0xBUkdFX0ZJTEVTLAorCSAgTl8oIkBmIGNvbnRhaW5zIGxhcmdlIGZpbGVzLCBidXQgbGFja3MgTEFSR0VfRklMRSBmbGFnIGluIEBTLlxuIiksCisJICBQUk9NUFRfRklYLCAwIH0sCisKKwkvKiBOb2RlIGluIEhUUkVFIGRpcmVjdG9yeSBub3QgcmVmZXJlbmNlZCAqLworCXsgUFJfMl9IVFJFRV9OT1RSRUYsCisJICBOXygiQHAgQGggJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBOb2RlIGluIEhUUkVFIGRpcmVjdG9yeSByZWZlcmVuY2VkIHR3aWNlICovCisJeyBQUl8yX0hUUkVFX0RVUFJFRiwKKwkgIE5fKCJAcCBAaCAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogTm9kZSBpbiBIVFJFRSBkaXJlY3RvcnkgaGFzIGJhZCBtaW4gaGFzaCAqLworCXsgUFJfMl9IVFJFRV9NSU5fSEFTSCwKKwkgIE5fKCJAcCBAaCAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogTm9kZSBpbiBIVFJFRSBkaXJlY3RvcnkgaGFzIGJhZCBtYXggaGFzaCAqLworCXsgUFJfMl9IVFJFRV9NQVhfSEFTSCwKKwkgIE5fKCJAcCBAaCAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogQ2xlYXIgaW52YWxpZCBIVFJFRSBkaXJlY3RvcnkgKi8KKwl7IFBSXzJfSFRSRUVfQ0xFQVIsCisJICBOXygiQG4gQGggJWQgKCVxKS4gICIpLCBQUk9NUFRfQ0xFQVJfSFRSRUUsIDAgfSwKKworCS8qIEJhZCBibG9jayBpbiBodHJlZSBpbnRlcmlvciBub2RlICovCisJeyBQUl8yX0hUUkVFX0JBREJMSywKKwkgIE5fKCJAcCBAaCAlZCAoJXEpOiBiYWQgQGIgbnVtYmVyICViLlxuIiksCisJICBQUk9NUFRfQ0xFQVJfSFRSRUUsIDAgfSwKKworCS8qIEVycm9yIGFkanVzdGluZyBFQSByZWZjb3VudCAqLworCXsgUFJfMl9BREpfRUFfUkVGQ09VTlQsCisJICBOXygiRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBAYSBAYiAlYiAoQGkgJWkpOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEludmFsaWQgSFRSRUUgcm9vdCBub2RlICovCisJeyBQUl8yX0hUUkVFX0JBRF9ST09ULAorCSAgTl8oIkBwIEBoICVkOiByb290IG5vZGUgaXMgQG5cbiIpLAorCSAgUFJPTVBUX0NMRUFSX0hUUkVFLCBQUl9QUkVFTl9PSyB9LAorCisJLyogSW52YWxpZCBIVFJFRSBsaW1pdCAqLworCXsgUFJfMl9IVFJFRV9CQURfTElNSVQsCisJICBOXygiQHAgQGggJWQ6ICVCIGhhcyBAbiBsaW1pdCAoJU4pXG4iKSwKKwkgIFBST01QVF9DTEVBUl9IVFJFRSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEludmFsaWQgSFRSRUUgY291bnQgKi8KKwl7IFBSXzJfSFRSRUVfQkFEX0NPVU5ULAorCSAgTl8oIkBwIEBoICVkOiAlQiBoYXMgQG4gY291bnQgKCVOKVxuIiksCisJICBQUk9NUFRfQ0xFQVJfSFRSRUUsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBIVFJFRSBpbnRlcmlvciBub2RlIGhhcyBvdXQtb2Ytb3JkZXIgaGFzaGVzIGluIHRhYmxlICovCisJeyBQUl8yX0hUUkVFX0hBU0hfT1JERVIsCisJICBOXygiQHAgQGggJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuIiksCisJICBQUk9NUFRfQ0xFQVJfSFRSRUUsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBOb2RlIGluIEhUUkVFIGRpcmVjdG9yeSBoYXMgaW52YWxpZCBkZXB0aCAqLworCXsgUFJfMl9IVFJFRV9CQURfREVQVEgsCisJICBOXygiQHAgQGggJWQ6ICVCIGhhcyBAbiBkZXB0aCAoJU4pXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBEdXBsaWNhdGUgZGlyZWN0b3J5IGVudHJ5IGZvdW5kICovCisJeyBQUl8yX0RVUExJQ0FURV9ESVJFTlQsCisJICBOXygiRHVwbGljYXRlIEBFIGZvdW5kLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIE5vbi11bmlxdWUgZmlsZW5hbWUgZm91bmQgKi8KKwl7IFBSXzJfTk9OX1VOSVFVRV9GSUxFLCAvKiB4Z2V0dGV4dDogbm8tYy1mb3JtYXQgKi8KKwkgIE5fKCJARSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuUmVuYW1lIHRvICVzIiksCisJICBQUk9NUFRfTlVMTCwgMCB9LAorCisJLyogRHVwbGljYXRlIGRpcmVjdG9yeSBlbnRyeSBmb3VuZCAqLworCXsgUFJfMl9SRVBPUlRfRFVQX0RJUkVOVCwKKwkgIE5fKCJEdXBsaWNhdGUgQGUgJyVEbicgZm91bmQuXG5cdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBpX2Jsb2Nrc19oaSBzaG91bGQgYmUgemVybyAqLworCXsgUFJfMl9CTE9DS1NfSElfWkVSTywKKwkgIE5fKCJpX2Jsb2Nrc19oaSBARiAlTiwgQHMgemVyby5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBVbmV4cGVjdGVkIEhUUkVFIGJsb2NrICovCisJeyBQUl8yX1VORVhQRUNURURfSFRSRUVfQkxPQ0ssCisJICBOXygiVW5leHBlY3RlZCBAYiBpbiBAaCAlZCAoJXEpLlxuIiksIFBST01QVF9DTEVBUl9IVFJFRSwgMCB9LAorCisJLyogSW5vZGUgZm91bmQgaW4gZ3JvdXAgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQgKi8KKwl7IFBSXzJfSU5PUkVGX0JHX0lOT19VTklOSVQsCisJICBOXygiQEUgcmVmZXJlbmNlcyBAaSAlRGkgaW4gQGcgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4iKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBJbm9kZSBmb3VuZCBpbiBncm91cCB1bnVzZWQgaW5vZGVzIGFyZWEgKi8KKwl7IFBSXzJfSU5PUkVGX0lOX1VOVVNFRCwKKwkgIE5fKCJARSByZWZlcmVuY2VzIEBpICVEaSBmb3VuZCBpbiBAZyAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIGlfYmxvY2tzX2hpIHNob3VsZCBiZSB6ZXJvICovCisJeyBQUl8yX0lfRklMRV9BQ0xfSElfWkVSTywKKwkgIE5fKCJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyB6ZXJvLlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBQYXNzIDMgZXJyb3JzICovCisKKwkvKiBQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkgKi8KKwl7IFBSXzNfUEFTU19IRUFERVIsCisJICBOXygiUGFzcyAzOiBDaGVja2luZyBAZCBjb25uZWN0aXZpdHlcbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIFJvb3QgaW5vZGUgbm90IGFsbG9jYXRlZCAqLworCXsgUFJfM19OT19ST09UX0lOT0RFLAorCSAgTl8oIkByIG5vdCBhbGxvY2F0ZWQuICAiKSwKKwkgIFBST01QVF9BTExPQ0FURSwgMCB9LAorCisJLyogTm8gcm9vbSBpbiBsb3N0K2ZvdW5kICovCisJeyBQUl8zX0VYUEFORF9MRl9ESVIsCisJICBOXygiTm8gcm9vbSBpbiBAbCBAZC4gICIpLAorCSAgUFJPTVBUX0VYUEFORCwgMCB9LAorCisJLyogVW5jb25uZWN0ZWQgZGlyZWN0b3J5IGlub2RlICovCisJeyBQUl8zX1VOQ09OTkVDVEVEX0RJUiwKKwkgIE5fKCJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iKSwKKwkgIFBST01QVF9DT05ORUNULCAwIH0sCisKKwkvKiAvbG9zdCtmb3VuZCBub3QgZm91bmQgKi8KKwl7IFBSXzNfTk9fTEZfRElSLAorCSAgTl8oIi9AbCBub3QgZm91bmQuICAiKSwKKwkgIFBST01QVF9DUkVBVEUsIFBSX1BSRUVOX09LIH0sCisKKwkvKiAuLiBlbnRyeSBpcyBpbmNvcnJlY3QgKi8KKwl7IFBSXzNfQkFEX0RPVF9ET1QsCisJICBOXygiJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIEBzICVxICglZCkuXG4iKSwKKwkgIFBST01QVF9GSVgsIDAgfSwKKworCS8qIEJhZCBvciBub24tZXhpc3RlbnQgL2xvc3QrZm91bmQuICBDYW5ub3QgcmVjb25uZWN0ICovCisJeyBQUl8zX05PX0xQRiwKKwkgIE5fKCJCYWQgb3Igbm9uLWV4aXN0ZW50IC9AbC4gIENhbm5vdCByZWNvbm5lY3QuXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBDb3VsZCBub3QgZXhwYW5kIC9sb3N0K2ZvdW5kICovCisJeyBQUl8zX0NBTlRfRVhQQU5EX0xQRiwKKwkgIE5fKCJDb3VsZCBub3QgZXhwYW5kIC9AbDogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIENvdWxkIG5vdCByZWNvbm5lY3QgaW5vZGUgKi8KKwl7IFBSXzNfQ0FOVF9SRUNPTk5FQ1QsCisJICBOXygiQ291bGQgbm90IHJlY29ubmVjdCAlaTogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIEVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9sb3N0K2ZvdW5kICovCisJeyBQUl8zX0VSUl9GSU5EX0xQRiwKKwkgIE5fKCJFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvQGw6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBFcnJvciBpbiBleHQyZnNfbmV3X2Jsb2NrIHdoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kICovCisJeyBQUl8zX0VSUl9MUEZfTkVXX0JMT0NLLAorCSAgTl8oImV4dDJmc19uZXdfQGI6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBFcnJvciBpbiBleHQyZnNfbmV3X2lub2RlIHdoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kICovCisJeyBQUl8zX0VSUl9MUEZfTkVXX0lOT0RFLAorCSAgTl8oImV4dDJmc19uZXdfQGk6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBFcnJvciBpbiBleHQyZnNfbmV3X2Rpcl9ibG9jayB3aGlsZSBjcmVhdGluZyAvbG9zdCtmb3VuZCAqLworCXsgUFJfM19FUlJfTFBGX05FV19ESVJfQkxPQ0ssCisJICBOXygiZXh0MmZzX25ld19kaXJfQGI6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBAZCBAYlxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogRXJyb3Igd2hpbGUgd3JpdGluZyBkaXJlY3RvcnkgYmxvY2sgZm9yIC9sb3N0K2ZvdW5kICovCisJeyBQUl8zX0VSUl9MUEZfV1JJVEVfQkxPQ0ssCisJICBOXygiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gd2hpbGUgd3JpdGluZyB0aGUgQGQgQGIgZm9yIC9AbFxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogRXJyb3Igd2hpbGUgYWRqdXN0aW5nIGlub2RlIGNvdW50ICovCisJeyBQUl8zX0FESlVTVF9JTk9ERSwKKwkgIE5fKCJFcnJvciB3aGlsZSBhZGp1c3RpbmcgQGkgY291bnQgb24gQGkgJWlcbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIENvdWxkbid0IGZpeCBwYXJlbnQgZGlyZWN0b3J5IC0tIGVycm9yICovCisJeyBQUl8zX0ZJWF9QQVJFTlRfRVJSLAorCSAgTl8oIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6ICVtXG5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIENvdWxkbid0IGZpeCBwYXJlbnQgZGlyZWN0b3J5IC0tIGNvdWxkbid0IGZpbmQgaXQgKi8KKwl7IFBSXzNfRklYX1BBUkVOVF9OT0ZJTkQsCisJICBOXygiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgQGQgQGVcblxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogRXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKi8KKwl7IFBSXzNfQUxMT0NBVEVfSUJJVE1BUF9FUlJPUiwKKwkgIE5fKCJAQSBAaSBAQiAoJU4pOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEVycm9yIGNyZWF0aW5nIHJvb3QgZGlyZWN0b3J5ICovCisJeyBQUl8zX0NSRUFURV9ST09UX0VSUk9SLAorCSAgTl8oIkVycm9yIGNyZWF0aW5nIHJvb3QgQGQgKCVzKTogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBFcnJvciBjcmVhdGluZyBsb3N0IGFuZCBmb3VuZCBkaXJlY3RvcnkgKi8KKwl7IFBSXzNfQ1JFQVRFX0xQRl9FUlJPUiwKKwkgIE5fKCJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIFJvb3QgaW5vZGUgaXMgbm90IGRpcmVjdG9yeTsgYWJvcnRpbmcgKi8KKwl7IFBSXzNfUk9PVF9OT1RfRElSX0FCT1JULAorCSAgTl8oIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS4gKi8KKwl7IFBSXzNfTk9fUk9PVF9JTk9ERV9BQk9SVCwKKwkgIE5fKCJDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgQHIuXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gKi8KKwl7IFBSXzNfTk9fRElSSU5GTywKKwkgIE5fKCJJbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgZmluZCBkaXJfaW5mbyBmb3IgJWkuXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogTG9zdCtmb3VuZCBub3QgYSBkaXJlY3RvcnkgKi8KKwl7IFBSXzNfTFBGX05PVERJUiwKKwkgIE5fKCIvQGwgaXMgbm90IGEgQGQgKGlubz0laSlcbiIpLAorCSAgUFJPTVBUX1VOTElOSywgMCB9LAorCisJLyogUGFzcyAzQSBEaXJlY3RvcnkgT3B0aW1pemF0aW9uCSovCisKKwkvKiBQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzICovCisJeyBQUl8zQV9QQVNTX0hFQURFUiwKKwkgIE5fKCJQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9QUkVFTl9OT01TRyB9LAorCisJLyogRXJyb3IgaXRlcmF0aW5nIG92ZXIgZGlyZWN0b3JpZXMgKi8KKwl7IFBSXzNBX09QVElNSVpFX0lURVIsCisJICBOXygiRmFpbGVkIHRvIGNyZWF0ZSBkaXJzX3RvX2hhc2ggaXRlcmF0b3I6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBFcnJvciByZWhhc2ggZGlyZWN0b3J5ICovCisJeyBQUl8zQV9PUFRJTUlaRV9ESVJfRVJSLAorCSAgTl8oIkZhaWxlZCB0byBvcHRpbWl6ZSBkaXJlY3RvcnkgJXEgKCVkKTogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIFJlaGFzaGluZyBkaXIgaGVhZGVyICovCisJeyBQUl8zQV9PUFRJTUlaRV9ESVJfSEVBREVSLAorCSAgTl8oIk9wdGltaXppbmcgZGlyZWN0b3JpZXM6ICIpLAorCSAgUFJPTVBUX05PTkUsIFBSX01TR19PTkxZIH0sCisKKwkvKiBSZWhhc2hpbmcgZGlyZWN0b3J5ICVkICovCisJeyBQUl8zQV9PUFRJTUlaRV9ESVIsCisJICAiICVkIiwKKwkgIFBST01QVF9OT05FLCBQUl9MQVRDSF9PUFRJTUlaRV9ESVIgfCBQUl9QUkVFTl9OT0hEUn0sCisKKwkvKiBSZWhhc2hpbmcgZGlyIGVuZCAqLworCXsgUFJfM0FfT1BUSU1JWkVfRElSX0VORCwKKwkgICJcbiIsCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fTk9IRFIgfSwKKworCS8qIFBhc3MgNCBlcnJvcnMgKi8KKworCS8qIFBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cyAqLworCXsgUFJfNF9QQVNTX0hFQURFUiwKKwkgIE5fKCJQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHNcbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIFVuYXR0YWNoZWQgemVyby1sZW5ndGggaW5vZGUgKi8KKwl7IFBSXzRfWkVST19MRU5fSU5PREUsCisJICBOXygiQHUgQHogQGkgJWkuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0t8UFJfTk9fT0sgfSwKKworCS8qIFVuYXR0YWNoZWQgaW5vZGUgKi8KKwl7IFBSXzRfVU5BVFRBQ0hFRF9JTk9ERSwKKwkgIE5fKCJAdSBAaSAlaVxuIiksCisJICBQUk9NUFRfQ09OTkVDVCwgMCB9LAorCisJLyogSW5vZGUgcmVmIGNvdW50IHdyb25nICovCisJeyBQUl80X0JBRF9SRUZfQ09VTlQsCisJICBOXygiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIH0sCisKKwl7IFBSXzRfSU5DT05TSVNURU5UX0NPVU5ULAorCSAgTl8oIldBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4iCisJICAiXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbiIKKwkgICJAaV9saW5rX2luZm9bJWldIGlzICVOLCBAaS5pX2xpbmtzX2NvdW50IGlzICVJbC4gICIKKwkgICJUaGV5IEBzIHRoZSBzYW1lIVxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogUGFzcyA1IGVycm9ycyAqLworCisJLyogUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uICovCisJeyBQUl81X1BBU1NfSEVBREVSLAorCSAgTl8oIlBhc3MgNTogQ2hlY2tpbmcgQGcgc3VtbWFyeSBpbmZvcm1hdGlvblxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogUGFkZGluZyBhdCBlbmQgb2YgaW5vZGUgYml0bWFwIGlzIG5vdCBzZXQuICovCisJeyBQUl81X0lOT0RFX0JNQVBfUEFERElORywKKwkgIE5fKCJQYWRkaW5nIGF0IGVuZCBvZiBAaSBAQiBpcyBub3Qgc2V0LiAiKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gKi8KKwl7IFBSXzVfQkxPQ0tfQk1BUF9QQURESU5HLAorCSAgTl8oIlBhZGRpbmcgYXQgZW5kIG9mIEBiIEBCIGlzIG5vdCBzZXQuICIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlcyBoZWFkZXIgKi8KKwl7IFBSXzVfQkxPQ0tfQklUTUFQX0hFQURFUiwKKwkgIE5fKCJAYiBAQiBkaWZmZXJlbmNlczogIiksCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fT0sgfCBQUl9QUkVFTl9OT01TR30sCisKKwkvKiBCbG9jayBub3QgdXNlZCwgYnV0IG1hcmtlZCBpbiBiaXRtYXAgKi8KKwl7IFBSXzVfQkxPQ0tfVU5VU0VELAorCSAgIiAtJWIiLAorCSAgUFJPTVBUX05PTkUsIFBSX0xBVENIX0JCSVRNQVAgfCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBCbG9jayB1c2VkLCBidXQgbm90IG1hcmtlZCB1c2VkIGluIGJpdG1hcCAqLworCXsgUFJfNV9CTE9DS19VU0VELAorCSAgIiArJWIiLAorCSAgUFJPTVBUX05PTkUsIFBSX0xBVENIX0JCSVRNQVAgfCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXMgZW5kICovCisJeyBQUl81X0JMT0NLX0JJVE1BUF9FTkQsCisJICAiXG4iLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfCBQUl9QUkVFTl9OT01TRyB9LAorCisJLyogSW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzIGhlYWRlciAqLworCXsgUFJfNV9JTk9ERV9CSVRNQVBfSEVBREVSLAorCSAgTl8oIkBpIEBCIGRpZmZlcmVuY2VzOiAiKSwKKwkgIFBST01QVF9OT05FLCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBJbm9kZSBub3QgdXNlZCwgYnV0IG1hcmtlZCBpbiBiaXRtYXAgKi8KKwl7IFBSXzVfSU5PREVfVU5VU0VELAorCSAgIiAtJWkiLAorCSAgUFJPTVBUX05PTkUsIFBSX0xBVENIX0lCSVRNQVAgfCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBJbm9kZSB1c2VkLCBidXQgbm90IG1hcmtlZCB1c2VkIGluIGJpdG1hcCAqLworCXsgUFJfNV9JTk9ERV9VU0VELAorCSAgIiArJWkiLAorCSAgUFJPTVBUX05PTkUsIFBSX0xBVENIX0lCSVRNQVAgfCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBJbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXMgZW5kICovCisJeyBQUl81X0lOT0RFX0JJVE1BUF9FTkQsCisJICAiXG4iLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfCBQUl9QUkVFTl9OT01TRyB9LAorCisJLyogRnJlZSBpbm9kZXMgY291bnQgZm9yIGdyb3VwIHdyb25nICovCisJeyBQUl81X0ZSRUVfSU5PREVfQ09VTlRfR1JPVVAsCisJICBOXygiRnJlZSBAaXMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBEaXJlY3RvcmllcyBjb3VudCBmb3IgZ3JvdXAgd3JvbmcgKi8KKwl7IFBSXzVfRlJFRV9ESVJfQ09VTlRfR1JPVVAsCisJICBOXygiRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAqLworCXsgUFJfNV9GUkVFX0lOT0RFX0NPVU5ULAorCSAgTl8oIkZyZWUgQGlzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4iKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIHwgUFJfTk9fT0sgfCBQUl9QUkVFTl9OT01TRyB9LAorCisJLyogRnJlZSBibG9ja3MgY291bnQgZm9yIGdyb3VwIHdyb25nICovCisJeyBQUl81X0ZSRUVfQkxPQ0tfQ09VTlRfR1JPVVAsCisJICBOXygiRnJlZSBAYnMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAqLworCXsgUFJfNV9GUkVFX0JMT0NLX0NPVU5ULAorCSAgTl8oIkZyZWUgQGJzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4iKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIHwgUFJfTk9fT0sgfCBQUl9QUkVFTl9OT01TRyB9LAorCisJLyogUHJvZ3JhbW1pbmcgZXJyb3I6IGJpdG1hcCBlbmRwb2ludHMgZG9uJ3QgbWF0Y2ggKi8KKwl7IFBSXzVfQk1BUF9FTkRQT0lOVFMsCisJICBOXygiUFJPR1JBTU1JTkcgRVJST1I6IEBmICgjJU4pIEBCIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCAiCisJICAibWF0Y2ggY2FsY3VsYXRlZCBAQiBlbmRwb2ludHMgKCVpLCAlailcbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBJbnRlcm5hbCBlcnJvcjogZnVkZ2luZyBlbmQgb2YgYml0bWFwICovCisJeyBQUl81X0ZVREdFX0JJVE1BUF9FUlJPUiwKKwkgIE5fKCJJbnRlcm5hbCBlcnJvcjogZnVkZ2luZyBlbmQgb2YgYml0bWFwICglTilcbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGlub2RlIGJpdG1hcCAqLworCXsgUFJfNV9DT1BZX0lCSVRNQVBfRVJST1IsCisJICBOXygiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAaSBAQjogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGJsb2NrIGJpdG1hcCAqLworCXsgUFJfNV9DT1BZX0JCSVRNQVBfRVJST1IsCisJICBOXygiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAYiBAQjogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBCbG9jayByYW5nZSBub3QgdXNlZCwgYnV0IG1hcmtlZCBpbiBiaXRtYXAgKi8KKwl7IFBSXzVfQkxPQ0tfUkFOR0VfVU5VU0VELAorCSAgIiAtKCViLS0lYykiLAorCSAgUFJPTVBUX05PTkUsIFBSX0xBVENIX0JCSVRNQVAgfCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBCbG9jayByYW5nZSB1c2VkLCBidXQgbm90IG1hcmtlZCB1c2VkIGluIGJpdG1hcCAqLworCXsgUFJfNV9CTE9DS19SQU5HRV9VU0VELAorCSAgIiArKCViLS0lYykiLAorCSAgUFJPTVBUX05PTkUsIFBSX0xBVENIX0JCSVRNQVAgfCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBJbm9kZSByYW5nZSBub3QgdXNlZCwgYnV0IG1hcmtlZCBpbiBiaXRtYXAgKi8KKwl7IFBSXzVfSU5PREVfUkFOR0VfVU5VU0VELAorCSAgIiAtKCVpLS0laikiLAorCSAgUFJPTVBUX05PTkUsIFBSX0xBVENIX0lCSVRNQVAgfCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBJbm9kZSByYW5nZSB1c2VkLCBidXQgbm90IG1hcmtlZCB1c2VkIGluIGJpdG1hcCAqLworCXsgUFJfNV9JTk9ERV9SQU5HRV9VU0VELAorCSAgIiArKCVpLS0laikiLAorCSAgUFJPTVBUX05PTkUsIFBSX0xBVENIX0lCSVRNQVAgfCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBHcm91cCBOIGJsb2NrKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIEJMT0NLX1VOSU5JVCAqLworCXsgUFJfNV9CTE9DS19VTklOSVQsCisJICBOXygiQGcgJWcgQGIocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4iKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBHcm91cCBOIGlub2RlKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIElOT0RFX1VOSU5JVCAqLworCXsgUFJfNV9JTk9ERV9VTklOSVQsCisJICBOXygiQGcgJWcgQGkocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4iKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBQb3N0LVBhc3MgNSBlcnJvcnMgKi8KKworCS8qIFJlY3JlYXRlIGpvdXJuYWwgaWYgRTJGX0ZMQUdfSk9VUk5BTF9JTk9ERSBmbGFnIGlzIHNldCAqLworCXsgUFJfNl9SRUNSRUFURV9KT1VSTkFMLAorCSAgTl8oIlJlY3JlYXRlIEBqIiksCisJICBQUk9NUFRfTlVMTCwgUFJfUFJFRU5fT0sgfCBQUl9OT19PSyB9LAorCisJLyogVXBkYXRlIHF1b3RhIGluZm9ybWF0aW9uIGlmIGl0IGlzIGluY29uc2lzdGVudCAqLworCXsgUFJfNl9VUERBVEVfUVVPVEFTLAorCSAgTl8oIlVwZGF0ZSBxdW90YSBpbmZvIGZvciBxdW90YSB0eXBlICVOIiksCisJICBQUk9NUFRfTlVMTCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEVycm9yIHNldHRpbmcgYmxvY2sgZ3JvdXAgY2hlY2tzdW0gaW5mbyAqLworCXsgUFJfNl9TRVRfQkdfQ0hFQ0tTVU0sCisJICBOXygiRXJyb3Igc2V0dGluZyBAYiBAZyBjaGVja3N1bSBpbmZvOiAlbVxuIiksCisJICBQUk9NUFRfTlVMTCwgUFJfRkFUQUwgfSwKKworCS8qIEVycm9yIHdyaXRpbmcgZmlsZSBzeXN0ZW0gaW5mbyAqLworCXsgUFJfNl9GTFVTSF9GSUxFU1lTVEVNLAorCSAgTl8oIkVycm9yIHdyaXRpbmcgZmlsZSBzeXN0ZW0gaW5mbzogJW1cbiIpLAorCSAgUFJPTVBUX05VTEwsIFBSX0ZBVEFMIH0sCisKKwkvKiBFcnJvciBmbHVzaGluZyB3cml0ZXMgdG8gc3RvcmFnZSBkZXZpY2UgKi8KKwl7IFBSXzZfSU9fRkxVU0gsCisJICBOXygiRXJyb3IgZmx1c2hpbmcgd3JpdGVzIHRvIHN0b3JhZ2UgZGV2aWNlOiAlbVxuIiksCisJICBQUk9NUFRfTlVMTCwgUFJfRkFUQUwgfSwKKworCXsgMCB9Cit9OworCisvKgorICogVGhpcyBpcyB0aGUgbGF0Y2ggZmxhZ3MgcmVnaXN0ZXIuICBJdCBhbGxvd3Mgc2V2ZXJhbCBwcm9ibGVtcyB0byBiZQorICogImxhdGNoZWQiIHRvZ2V0aGVyLiAgVGhpcyBtZWFucyB0aGF0IHRoZSB1c2VyIGhhcyB0byBhbnN3ZXIgYnV0IG9uZQorICogcXVlc3Rpb24gZm9yIHRoZSBzZXQgb2YgcHJvYmxlbXMsIGFuZCBhbGwgb2YgdGhlIGFzc29jaWF0ZWQKKyAqIHByb2JsZW1zIHdpbGwgYmUgZWl0aGVyIGZpeGVkIG9yIG5vdCBmaXhlZC4KKyAqLworc3RhdGljIHN0cnVjdCBsYXRjaF9kZXNjciBwcl9sYXRjaF9pbmZvW10gPSB7CisJeyBQUl9MQVRDSF9CTE9DSywgUFJfMV9JTk9ERV9CTE9DS19MQVRDSCwgMCB9LAorCXsgUFJfTEFUQ0hfQkJMT0NLLCBQUl8xX0lOT0RFX0JCTE9DS19MQVRDSCwgMCB9LAorCXsgUFJfTEFUQ0hfSUJJVE1BUCwgUFJfNV9JTk9ERV9CSVRNQVBfSEVBREVSLCBQUl81X0lOT0RFX0JJVE1BUF9FTkQgfSwKKwl7IFBSX0xBVENIX0JCSVRNQVAsIFBSXzVfQkxPQ0tfQklUTUFQX0hFQURFUiwgUFJfNV9CTE9DS19CSVRNQVBfRU5EIH0sCisJeyBQUl9MQVRDSF9SRUxPQywgUFJfMF9SRUxPQ0FURV9ISU5ULCAwIH0sCisJeyBQUl9MQVRDSF9EQkxPQ0ssIFBSXzFCX0RVUF9CTE9DS19IRUFERVIsIFBSXzFCX0RVUF9CTE9DS19FTkQgfSwKKwl7IFBSX0xBVENIX0xPV19EVElNRSwgUFJfMV9PUlBIQU5fTElTVF9SRUZVR0VFUywgMCB9LAorCXsgUFJfTEFUQ0hfVE9PQklHLCBQUl8xX0lOT0RFX1RPT0JJRywgMCB9LAorCXsgUFJfTEFUQ0hfT1BUSU1JWkVfRElSLCBQUl8zQV9PUFRJTUlaRV9ESVJfSEVBREVSLCBQUl8zQV9PUFRJTUlaRV9ESVJfRU5EIH0sCisJeyBQUl9MQVRDSF9CR19DSEVDS1NVTSwgUFJfMF9HRFRfQ1NVTV9MQVRDSCwgMCB9LAorCXsgLTEsIDAsIDAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZTJmc2NrX3Byb2JsZW0gKmZpbmRfcHJvYmxlbShwcm9ibGVtX3QgY29kZSkKK3sKKwlpbnQJaTsKKworCWZvciAoaT0wOyBwcm9ibGVtX3RhYmxlW2ldLmUycF9jb2RlOyBpKyspIHsKKwkJaWYgKHByb2JsZW1fdGFibGVbaV0uZTJwX2NvZGUgPT0gY29kZSkKKwkJCXJldHVybiAmcHJvYmxlbV90YWJsZVtpXTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGF0Y2hfZGVzY3IgKmZpbmRfbGF0Y2goaW50IGNvZGUpCit7CisJaW50CWk7CisKKwlmb3IgKGk9MDsgcHJfbGF0Y2hfaW5mb1tpXS5sYXRjaF9jb2RlID49IDA7IGkrKykgeworCQlpZiAocHJfbGF0Y2hfaW5mb1tpXS5sYXRjaF9jb2RlID09IGNvZGUpCisJCQlyZXR1cm4gJnByX2xhdGNoX2luZm9baV07CisJfQorCXJldHVybiAwOworfQorCitpbnQgZW5kX3Byb2JsZW1fbGF0Y2goZTJmc2NrX3QgY3R4LCBpbnQgbWFzaykKK3sKKwlzdHJ1Y3QgbGF0Y2hfZGVzY3IgKmxkZXNjOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgcGN0eDsKKwlpbnQgYW5zd2VyID0gLTE7CisKKwlsZGVzYyA9IGZpbmRfbGF0Y2gobWFzayk7CisJaWYgKGxkZXNjLT5lbmRfbWVzc2FnZSAmJiAobGRlc2MtPmZsYWdzICYgUFJMX0xBVENIRUQpKSB7CisJCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJCWFuc3dlciA9IGZpeF9wcm9ibGVtKGN0eCwgbGRlc2MtPmVuZF9tZXNzYWdlLCAmcGN0eCk7CisJfQorCWxkZXNjLT5mbGFncyAmPSB+KFBSTF9WQVJJQUJMRSk7CisJcmV0dXJuIGFuc3dlcjsKK30KKworaW50IHNldF9sYXRjaF9mbGFncyhpbnQgbWFzaywgaW50IHNldGZsYWdzLCBpbnQgY2xlYXJmbGFncykKK3sKKwlzdHJ1Y3QgbGF0Y2hfZGVzY3IgKmxkZXNjOworCisJbGRlc2MgPSBmaW5kX2xhdGNoKG1hc2spOworCWlmICghbGRlc2MpCisJCXJldHVybiAtMTsKKwlsZGVzYy0+ZmxhZ3MgfD0gc2V0ZmxhZ3M7CisJbGRlc2MtPmZsYWdzICY9IH5jbGVhcmZsYWdzOworCXJldHVybiAwOworfQorCitpbnQgZ2V0X2xhdGNoX2ZsYWdzKGludCBtYXNrLCBpbnQgKnZhbHVlKQoreworCXN0cnVjdCBsYXRjaF9kZXNjciAqbGRlc2M7CisKKwlsZGVzYyA9IGZpbmRfbGF0Y2gobWFzayk7CisJaWYgKCFsZGVzYykKKwkJcmV0dXJuIC0xOworCSp2YWx1ZSA9IGxkZXNjLT5mbGFnczsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjbGVhcl9wcm9ibGVtX2NvbnRleHQoc3RydWN0IHByb2JsZW1fY29udGV4dCAqY3R4KQoreworCW1lbXNldChjdHgsIDAsIHNpemVvZihzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0KSk7CisJY3R4LT5ibGtjb3VudCA9IC0xOworCWN0eC0+Z3JvdXAgPSAtMTsKK30KKworc3RhdGljIHZvaWQgcmVjb25maWd1cmVfYm9vbChlMmZzY2tfdCBjdHgsIHN0cnVjdCBlMmZzY2tfcHJvYmxlbSAqcHRyLAorCQkJICAgICBjb25zdCBjaGFyICprZXksIGludCBtYXNrLCBjb25zdCBjaGFyICpuYW1lKQoreworCWludAl2YWw7CisKKwl2YWwgPSAocHRyLT5mbGFncyAmIG1hc2spOworCXByb2ZpbGVfZ2V0X2Jvb2xlYW4oY3R4LT5wcm9maWxlLCAicHJvYmxlbXMiLCBrZXksIG5hbWUsIHZhbCwgJnZhbCk7CisJaWYgKHZhbCkKKwkJcHRyLT5mbGFncyB8PSBtYXNrOworCWVsc2UKKwkJcHRyLT5mbGFncyAmPSB+bWFzazsKK30KKworCitpbnQgZml4X3Byb2JsZW0oZTJmc2NrX3QgY3R4LCBwcm9ibGVtX3QgY29kZSwgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJc3RydWN0IGUyZnNja19wcm9ibGVtICpwdHI7CisJc3RydWN0IGxhdGNoX2Rlc2NyICpsZGVzYyA9IDA7CisJY29uc3QgY2hhciAqbWVzc2FnZTsKKwlpbnQJCWRlZl95biwgYW5zd2VyLCBhbnM7CisJaW50CQlwcmludF9hbnN3ZXIgPSAwOworCWludAkJc3VwcHJlc3MgPSAwOworCisJcHRyID0gZmluZF9wcm9ibGVtKGNvZGUpOworCWlmICghcHRyKSB7CisJCXByaW50ZihfKCJVbmhhbmRsZWQgZXJyb3IgY29kZSAoMHgleCkhXG4iKSwgY29kZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIShwdHItPmZsYWdzICYgUFJfQ09ORklHKSkgeworCQljaGFyCWtleVs5XSwgKm5ld19kZXNjID0gTlVMTDsKKworCQlzcHJpbnRmKGtleSwgIjB4JTA2eCIsIGNvZGUpOworCisJCXByb2ZpbGVfZ2V0X3N0cmluZyhjdHgtPnByb2ZpbGUsICJwcm9ibGVtcyIsIGtleSwKKwkJCQkgICAiZGVzY3JpcHRpb24iLCAwLCAmbmV3X2Rlc2MpOworCQlpZiAobmV3X2Rlc2MpCisJCQlwdHItPmUycF9kZXNjcmlwdGlvbiA9IG5ld19kZXNjOworCisJCXJlY29uZmlndXJlX2Jvb2woY3R4LCBwdHIsIGtleSwgUFJfUFJFRU5fT0ssICJwcmVlbl9vayIpOworCQlyZWNvbmZpZ3VyZV9ib29sKGN0eCwgcHRyLCBrZXksIFBSX05PX09LLCAibm9fb2siKTsKKwkJcmVjb25maWd1cmVfYm9vbChjdHgsIHB0ciwga2V5LCBQUl9OT19ERUZBVUxULCAibm9fZGVmYXVsdCIpOworCQlyZWNvbmZpZ3VyZV9ib29sKGN0eCwgcHRyLCBrZXksIFBSX01TR19PTkxZLCAicHJpbnRfbWVzc2FnZV9vbmx5Iik7CisJCXJlY29uZmlndXJlX2Jvb2woY3R4LCBwdHIsIGtleSwgUFJfUFJFRU5fTk9NU0csICJwcmVlbl9ub21lc3NhZ2UiKTsKKwkJcmVjb25maWd1cmVfYm9vbChjdHgsIHB0ciwga2V5LCBQUl9OT0NPTExBVEUsICJub19jb2xsYXRlIik7CisJCXJlY29uZmlndXJlX2Jvb2woY3R4LCBwdHIsIGtleSwgUFJfTk9fTk9NU0csICJub19ub21zZyIpOworCQlyZWNvbmZpZ3VyZV9ib29sKGN0eCwgcHRyLCBrZXksIFBSX1BSRUVOX05PSERSLCAicHJlZW5fbm9oZWFkZXIiKTsKKwkJcmVjb25maWd1cmVfYm9vbChjdHgsIHB0ciwga2V5LCBQUl9GT1JDRV9OTywgImZvcmNlX25vIik7CisJCXByb2ZpbGVfZ2V0X2ludGVnZXIoY3R4LT5wcm9maWxlLCAib3B0aW9ucyIsCisJCQkJICAgICJtYXhfY291bnRfcHJvYmxlbXMiLCAwLCAwLAorCQkJCSAgICAmcHRyLT5tYXhfY291bnQpOworCQlwcm9maWxlX2dldF9pbnRlZ2VyKGN0eC0+cHJvZmlsZSwgInByb2JsZW1zIiwga2V5LCAibWF4X2NvdW50IiwKKwkJCQkgICAgcHRyLT5tYXhfY291bnQsICZwdHItPm1heF9jb3VudCk7CisKKwkJcHRyLT5mbGFncyB8PSBQUl9DT05GSUc7CisJfQorCWRlZl95biA9IDE7CisJcHRyLT5jb3VudCsrOworCWlmICgocHRyLT5mbGFncyAmIFBSX05PX0RFRkFVTFQpIHx8CisJICAgICgocHRyLT5mbGFncyAmIFBSX1BSRUVOX05PKSAmJiAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9QUkVFTikpIHx8CisJICAgIChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX05PKSkKKwkJZGVmX3luPSAwOworCisJLyoKKwkgKiBEbyBzcGVjaWFsIGxhdGNoIHByb2Nlc3NpbmcuICBUaGlzIGlzIHdoZXJlIHdlIGFzayB0aGUKKwkgKiBsYXRjaCBxdWVzdGlvbiwgaWYgaXQgZXhpc3RzCisJICovCisJaWYgKHB0ci0+ZmxhZ3MgJiBQUl9MQVRDSF9NQVNLKSB7CisJCWxkZXNjID0gZmluZF9sYXRjaChwdHItPmZsYWdzICYgUFJfTEFUQ0hfTUFTSyk7CisJCWlmIChsZGVzYy0+cXVlc3Rpb24gJiYgIShsZGVzYy0+ZmxhZ3MgJiBQUkxfTEFUQ0hFRCkpIHsKKwkJCWFucyA9IGZpeF9wcm9ibGVtKGN0eCwgbGRlc2MtPnF1ZXN0aW9uLCBwY3R4KTsKKwkJCWlmIChhbnMgPT0gMSkKKwkJCQlsZGVzYy0+ZmxhZ3MgfD0gUFJMX1lFUzsKKwkJCWlmIChhbnMgPT0gMCkKKwkJCQlsZGVzYy0+ZmxhZ3MgfD0gUFJMX05POworCQkJbGRlc2MtPmZsYWdzIHw9IFBSTF9MQVRDSEVEOworCQl9CisJCWlmIChsZGVzYy0+ZmxhZ3MgJiBQUkxfU1VQUFJFU1MpCisJCQlzdXBwcmVzcysrOworCX0KKwlpZiAoKHB0ci0+ZmxhZ3MgJiBQUl9QUkVFTl9OT01TRykgJiYKKwkgICAgKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pKQorCQlzdXBwcmVzcysrOworCWlmICgocHRyLT5mbGFncyAmIFBSX05PX05PTVNHKSAmJgorCSAgICAoKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfTk8pIHx8IChwdHItPmZsYWdzICYgUFJfRk9SQ0VfTk8pKSkKKwkJc3VwcHJlc3MrKzsKKwlpZiAocHRyLT5tYXhfY291bnQgJiYgKHB0ci0+Y291bnQgPiBwdHItPm1heF9jb3VudCkpIHsKKwkJaWYgKGN0eC0+b3B0aW9ucyAmIChFMkZfT1BUX05PIHwgRTJGX09QVF9ZRVMpKQorCQkJc3VwcHJlc3MrKzsKKwkJaWYgKChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1BSRUVOKSAmJgorCQkgICAgKHB0ci0+ZmxhZ3MgJiBQUl9QUkVFTl9PSykpCisJCQlzdXBwcmVzcysrOworCQlpZiAoKHB0ci0+ZmxhZ3MgJiBQUl9MQVRDSF9NQVNLKSAmJgorCQkgICAgKGxkZXNjLT5mbGFncyAmIChQUkxfWUVTIHwgUFJMX05PKSkpCisJCQlzdXBwcmVzcysrOworCQlpZiAocHRyLT5jb3VudCA9PSBwdHItPm1heF9jb3VudCArIDEpIHsKKwkJCXByaW50ZigiLi4ucHJvYmxlbSAweCUwNnggc3VwcHJlc3NlZFxuIiwKKwkJCSAgICAgICBwdHItPmUycF9jb2RlKTsKKwkJCWZmbHVzaChzdGRvdXQpOworCQl9CisJfQorCW1lc3NhZ2UgPSBwdHItPmUycF9kZXNjcmlwdGlvbjsKKwlpZiAoKm1lc3NhZ2UpCisJCW1lc3NhZ2UgPSBfKG1lc3NhZ2UpOworCWlmICghc3VwcHJlc3MpIHsKKwkJaWYgKChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1BSRUVOKSAmJgorCQkgICAgIShwdHItPmZsYWdzICYgUFJfUFJFRU5fTk9IRFIpKSB7CisJCQlwcmludGYoIiVzOiAiLCBjdHgtPmRldmljZV9uYW1lID8KKwkJCSAgICAgICBjdHgtPmRldmljZV9uYW1lIDogY3R4LT5maWxlc3lzdGVtX25hbWUpOworCQl9CisJCWlmICgqbWVzc2FnZSkKKwkJCXByaW50X2UyZnNja19tZXNzYWdlKHN0ZG91dCwgY3R4LCBtZXNzYWdlLCBwY3R4LCAxLCAwKTsKKwl9CisJaWYgKGN0eC0+bG9nZiAmJiBtZXNzYWdlKQorCQlwcmludF9lMmZzY2tfbWVzc2FnZShjdHgtPmxvZ2YsIGN0eCwgbWVzc2FnZSwgcGN0eCwgMSwgMCk7CisJaWYgKCEocHRyLT5mbGFncyAmIFBSX1BSRUVOX09LKSAmJiAocHRyLT5wcm9tcHQgIT0gUFJPTVBUX05PTkUpKQorCQlwcmVlbmhhbHQoY3R4KTsKKworCWlmIChwdHItPmZsYWdzICYgUFJfRkFUQUwpCisJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisKKwlpZiAocHRyLT5wcm9tcHQgPT0gUFJPTVBUX05PTkUpIHsKKwkJaWYgKHB0ci0+ZmxhZ3MgJiBQUl9OT0NPTExBVEUpCisJCQlhbnN3ZXIgPSAtMTsKKwkJZWxzZQorCQkJYW5zd2VyID0gZGVmX3luOworCX0gZWxzZSB7CisJCWlmIChwdHItPmZsYWdzICYgUFJfRk9SQ0VfTk8pIHsKKwkJCWFuc3dlciA9IDA7CisJCQlwcmludF9hbnN3ZXIgPSAxOworCQl9IGVsc2UgaWYgKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pIHsKKwkJCWFuc3dlciA9IGRlZl95bjsKKwkJCWlmICghKHB0ci0+ZmxhZ3MgJiBQUl9QUkVFTl9OT01TRykpCisJCQkJcHJpbnRfYW5zd2VyID0gMTsKKwkJfSBlbHNlIGlmICgocHRyLT5mbGFncyAmIFBSX0xBVENIX01BU0spICYmCisJCQkgICAobGRlc2MtPmZsYWdzICYgKFBSTF9ZRVMgfCBQUkxfTk8pKSkgeworCQkJcHJpbnRfYW5zd2VyID0gMTsKKwkJCWlmIChsZGVzYy0+ZmxhZ3MgJiBQUkxfWUVTKQorCQkJCWFuc3dlciA9IDE7CisJCQllbHNlCisJCQkJYW5zd2VyID0gMDsKKwkJfSBlbHNlCisJCQlhbnN3ZXIgPSBhc2soY3R4LCAocHRyLT5wcm9tcHQgPT0gUFJPTVBUX05VTEwpID8gIiIgOgorCQkJCSAgICAgXyhwcm9tcHRbKGludCkgcHRyLT5wcm9tcHRdKSwgZGVmX3luKTsKKwkJaWYgKCFhbnN3ZXIgJiYgIShwdHItPmZsYWdzICYgUFJfTk9fT0spKQorCQkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisKKwkJaWYgKHByaW50X2Fuc3dlcikgeworCQkJaWYgKCFzdXBwcmVzcykKKwkJCQlwcmludGYoIiVzLlxuIiwgYW5zd2VyID8KKwkJCQkgICAgICAgXyhwcmVlbl9tc2dbKGludCkgcHRyLT5wcm9tcHRdKSA6CisJCQkJICAgICAgIF8oIklHTk9SRUQiKSk7CisJCQlpZiAoY3R4LT5sb2dmKQorCQkJCWZwcmludGYoY3R4LT5sb2dmLCAiJXMuXG4iLCBhbnN3ZXIgPworCQkJCQlfKHByZWVuX21zZ1soaW50KSBwdHItPnByb21wdF0pIDoKKwkJCQkJXygiSUdOT1JFRCIpKTsKKwkJfQorCX0KKworCWlmICgocHRyLT5wcm9tcHQgPT0gUFJPTVBUX0FCT1JUKSAmJiBhbnN3ZXIpCisJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisKKwlpZiAocHRyLT5mbGFncyAmIFBSX0FGVEVSX0NPREUpCisJCWFuc3dlciA9IGZpeF9wcm9ibGVtKGN0eCwgcHRyLT5zZWNvbmRfY29kZSwgcGN0eCk7CisKKwlpZiAoYW5zd2VyICYmIChwdHItPnByb21wdCAhPSBQUk9NUFRfTk9ORSkpCisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfUFJPQkxFTVNfRklYRUQ7CisKKwlyZXR1cm4gYW5zd2VyOworfQorCisjaWZkZWYgVU5JVFRFU1QKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2VycmNvZGVfdAorcHJvZmlsZV9nZXRfYm9vbGVhbihwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3VibmFtZSwKKwkJICAgIGNvbnN0IGNoYXIgKnN1YnN1Ym5hbWUsIGludCBkZWZfdmFsLCBpbnQgKnJldF9ib29sZWFuKQoreworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QKK3Byb2ZpbGVfZ2V0X2ludGVnZXIocHJvZmlsZV90IHByb2ZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsCisJCSAgICBjb25zdCBjaGFyICpzdWJzdWJuYW1lLCBpbnQgZGVmX3ZhbCwgaW50ICpyZXRfaW50KQoreworCXJldHVybiAwOworfQorCit2b2lkIHByaW50X2UyZnNja19tZXNzYWdlKEZJTEUgKmYsIGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqbXNnLAorCQkJICBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4LCBpbnQgZmlyc3QsCisJCQkgIGludCByZWN1cnNlKQoreworCXJldHVybjsKK30KKwordm9pZCBmYXRhbF9lcnJvcihlMmZzY2tfdCBjdHgsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlyZXR1cm47Cit9CisKK3ZvaWQgcHJlZW5oYWx0KGUyZnNja190IGN0eCkKK3sKKwlyZXR1cm47Cit9CisKK2VycmNvZGVfdAorcHJvZmlsZV9nZXRfc3RyaW5nKHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdWJuYW1lLAorCQkgICBjb25zdCBjaGFyICpzdWJzdWJuYW1lLCBjb25zdCBjaGFyICpkZWZfdmFsLAorCQkgICBjaGFyICoqcmV0X3N0cmluZykKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IGFzayAoZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICogc3RyaW5nLCBpbnQgZGVmKQoreworCXJldHVybiAwOworfQorCitpbnQgdmVyaWZ5X3Byb2JsZW1fdGFibGUoZTJmc2NrX3QgY3R4KQoreworCXN0cnVjdCBlMmZzY2tfcHJvYmxlbSAqY3VyciwgKnByZXYgPSBOVUxMOworCWludCByYyA9IDA7CisKKwlmb3IgKHByZXYgPSBOVUxMLCBjdXJyID0gcHJvYmxlbV90YWJsZTsgY3Vyci0+ZTJwX2NvZGU7IHByZXYgPSBjdXJyKyspIHsKKwkJaWYgKHByZXYgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjdXJyLT5lMnBfY29kZSA+IHByZXYtPmUycF9jb2RlKQorCQkJY29udGludWU7CisKKwkJaWYgKGN1cnItPmUycF9jb2RlID09IHByZXYtPmUycF9jb2RlKQorCQkJZnByaW50ZihzdGRlcnIsICIqKiogRHVwbGljYXRlIGluIHByb2JsZW0gdGFibGU6XG4iKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsICIqKiogVW5vcmRlcmVkIHByb2JsZW0gdGFibGU6XG4iKTsKKworCQlmcHJpbnRmKHN0ZGVyciwgImN1cnIgY29kZSA9IDB4JTA4eDogJXNcbiIsCisJCQljdXJyLT5lMnBfY29kZSwgY3Vyci0+ZTJwX2Rlc2NyaXB0aW9uKTsKKwkJZnByaW50ZihzdGRlcnIsICIqKiogcHJldiBjb2RlID0gMHglMDh4OiAlc1xuIiwKKwkJCXByZXYtPmUycF9jb2RlLCBwcmV2LT5lMnBfZGVzY3JpcHRpb24pOworCisJCWZwcmludGYoc3RkZXJyLCAiKioqIFRoaXMgaXMgYSAlc3Byb2dyYW1taW5nIGVycm9yIGluIGUyZnNja1xuIiwKKwkJCShjdXJyLT5lMnBfY29kZSA9PSBwcmV2LT5lMnBfY29kZSkgPyAiZmF0YWwgIiA6ICIiKTsKKworCQlyYyA9IDE7CisJfQorCisJcmV0dXJuIHJjOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWUyZnNja190IGN0eDsKKwlpbnQgcmM7CisKKwltZW1zZXQoJmN0eCwgMCwgc2l6ZW9mKGN0eCkpOyAvKiBqdXN0IHRvIHF1aWV0IGNvbXBpbGVyICovCisJcmMgPSB2ZXJpZnlfcHJvYmxlbV90YWJsZShjdHgpOworCWlmIChyYyA9PSAwKQorCQlwcmludGYoImUyZnNjayBwcm9ibGVtIHRhYmxlIHZlcmlmaWVkXG4iKTsKKworCXJldHVybiByYzsKK30KKyNlbmRpZiAvKiBVTklUVEVTVCAqLwpkaWZmIC0tZ2l0IGEvZTJmc2NrL3Byb2JsZW0uaCBiL2UyZnNjay9wcm9ibGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEyZWQzNQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9wcm9ibGVtLmgKQEAgLTAsMCArMSwxMDg0IEBACisvKgorICogcHJvYmxlbS5oIC0tLSBlMmZzY2sgcHJvYmxlbSBlcnJvciBjb2RlcworICoKKyAqIENvcHlyaWdodCAxOTk2IGJ5IFRoZW9kb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKK3R5cGVkZWYgX191MzIgcHJvYmxlbV90OworCitzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0IHsKKwllcnJjb2RlX3QJZXJyY29kZTsKKwlleHQyX2lub190IGlubywgaW5vMiwgZGlyOworCXN0cnVjdCBleHQyX2lub2RlICppbm9kZTsKKwlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudDsKKwlibGs2NF90CWJsaywgYmxrMjsKKwllMl9ibGtjbnRfdAlibGtjb3VudDsKKwlkZ3JwX3QJCWdyb3VwOworCV9fdTMyCQljc3VtMSwgY3N1bTI7CisJX191NjQJbnVtOworCWNvbnN0IGNoYXIgKnN0cjsKK307CisKKy8qCisgKiBXZSBkZWZpbmUgYSBzZXQgb2YgImxhdGNoIGdyb3VwcyI7IHRoZXNlIGFyZSBwcm9ibGVtcyB3aGljaCBhcmUKKyAqIGhhbmRsZWQgYXMgYSBzZXQuICBUaGUgdXNlciBhbnN3ZXJzIG9uY2UgZm9yIGEgcGFydGljdWxhciBsYXRjaAorICogZ3JvdXAuCisgKi8KKyNkZWZpbmUgUFJfTEFUQ0hfTUFTSwkweDBmZjAgIC8qIExhdGNoIG1hc2sgKi8KKyNkZWZpbmUgUFJfTEFUQ0hfQkxPQ0sJMHgwMDEwCS8qIExhdGNoIGZvciBpbGxlZ2FsIGJsb2NrcyAocGFzcyAxKSAqLworI2RlZmluZSBQUl9MQVRDSF9CQkxPQ0sJMHgwMDIwCS8qIExhdGNoIGZvciBiYWQgYmxvY2sgaW5vZGUgYmxvY2tzIChwYXNzIDEpICovCisjZGVmaW5lIFBSX0xBVENIX0lCSVRNQVAgMHgwMDMwIC8qIExhdGNoIGZvciBwYXNzIDUgaW5vZGUgYml0bWFwIHByb2MuICovCisjZGVmaW5lIFBSX0xBVENIX0JCSVRNQVAgMHgwMDQwIC8qIExhdGNoIGZvciBwYXNzIDUgaW5vZGUgYml0bWFwIHByb2MuICovCisjZGVmaW5lIFBSX0xBVENIX1JFTE9DCTB4MDA1MCAgLyogTGF0Y2ggZm9yIHN1cGVyYmxvY2sgcmVsb2NhdGUgaGludCAqLworI2RlZmluZSBQUl9MQVRDSF9EQkxPQ0sJMHgwMDYwCS8qIExhdGNoIGZvciBwYXNzIDFiIGR1cCBibG9jayBoZWFkZXJzICovCisjZGVmaW5lIFBSX0xBVENIX0xPV19EVElNRSAweDAwNzAgLyogTGF0Y2ggZm9yIHBhc3MxIG9ycGhhbmVkIGxpc3QgcmVmdWdlZXMgKi8KKyNkZWZpbmUgUFJfTEFUQ0hfVE9PQklHCTB4MDA4MAkvKiBMYXRjaCBmb3IgZmlsZSB0byBiaWcgZXJyb3JzICovCisjZGVmaW5lIFBSX0xBVENIX09QVElNSVpFX0RJUiAweDAwOTAgLyogTGF0Y2ggZm9yIG9wdGltaXplIGRpcmVjdG9yaWVzICovCisjZGVmaW5lIFBSX0xBVENIX0JHX0NIRUNLU1VNIDB4MDBBMCAgLyogTGF0Y2ggZm9yIGJsb2NrIGdyb3VwIGNoZWNrc3VtcyAqLworCisjZGVmaW5lIFBSX0xBVENIKHgpCSgoKCh4KSAmIFBSX0xBVENIX01BU0spID4+IDQpIC0gMSkKKworLyoKKyAqIExhdGNoIGdyb3VwIGRlc2NyaXB0b3IgZmxhZ3MKKyAqLworI2RlZmluZSBQUkxfWUVTCQkweDAwMDEJLyogQW5zd2VyIHllcyAqLworI2RlZmluZSBQUkxfTk8JCTB4MDAwMgkvKiBBbnN3ZXIgbm8gKi8KKyNkZWZpbmUgUFJMX0xBVENIRUQJMHgwMDA0CS8qIFRoZSBsYXRjaCBncm91cCBpcyBsYXRjaGVkICovCisjZGVmaW5lIFBSTF9TVVBQUkVTUwkweDAwMDgJLyogU3VwcHJlc3MgYWxsIGxhdGNoIGdyb3VwIHF1ZXN0aW9ucyAqLworCisjZGVmaW5lIFBSTF9WQVJJQUJMRQkweDAwMGYJLyogQWxsIHRoZSBmbGFncyB0aGF0IG5lZWQgdG8gYmUgcmVzZXQgKi8KKworLyoKKyAqIFByZS1QYXNzIDEgZXJyb3JzCisgKi8KKworLyogQmxvY2sgYml0bWFwIG5vdCBpbiBncm91cCAqLworI2RlZmluZSBQUl8wX0JCX05PVF9HUk9VUAkweDAwMDAwMQorCisvKiBJbm9kZSBiaXRtYXAgbm90IGluIGdyb3VwICovCisjZGVmaW5lIFBSXzBfSUJfTk9UX0dST1VQCTB4MDAwMDAyCisKKy8qIElub2RlIHRhYmxlIG5vdCBpbiBncm91cCAqLworI2RlZmluZSBQUl8wX0lUQUJMRV9OT1RfR1JPVVAJMHgwMDAwMDMKKworLyogU3VwZXJibG9jayBjb3JydXB0ICovCisjZGVmaW5lIFBSXzBfU0JfQ09SUlVQVAkJMHgwMDAwMDQKKworLyogRmlsZXN5c3RlbSBzaXplIGlzIHdyb25nICovCisjZGVmaW5lIFBSXzBfRlNfU0laRV9XUk9ORwkweDAwMDAwNQorCisvKiBGcmFnbWVudHMgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSBQUl8wX05PX0ZSQUdNRU5UUwkweDAwMDAwNgorCisvKiBCYWQgYmxvY2tzX3Blcl9ncm91cCAqLworI2RlZmluZSBQUl8wX0JMT0NLU19QRVJfR1JPVVAJMHgwMDAwMDcKKworLyogQmFkIGZpcnN0X2RhdGFfYmxvY2sgKi8KKyNkZWZpbmUgUFJfMF9GSVJTVF9EQVRBX0JMT0NLCTB4MDAwMDA4CisKKy8qIEFkZGluZyBVVUlEIHRvIGZpbGVzeXN0ZW0gKi8KKyNkZWZpbmUgUFJfMF9BRERfVVVJRAkJMHgwMDAwMDkKKworLyogUmVsb2NhdGUgaGludCAqLworI2RlZmluZSBQUl8wX1JFTE9DQVRFX0hJTlQJMHgwMDAwMEEKKworLyogTWlzY2VsbGFuZW91cyBzdXBlcmJsb2NrIGNvcnJ1cHRpb24gKi8KKyNkZWZpbmUgUFJfMF9NSVNDX0NPUlJVUFRfU1VQRVIJMHgwMDAwMEIKKworLyogRXJyb3IgZGV0ZXJtaW5nIHBoeXNpY2FsIGRldmljZSBzaXplIG9mIGZpbGVzeXN0ZW0gKi8KKyNkZWZpbmUgUFJfMF9HRVRTSVpFX0VSUk9SCTB4MDAwMDBDCisKKy8qIElub2RlIGNvdW50IGluIHRoZSBzdXBlcmJsb2NrIGluY29ycmVjdCAqLworI2RlZmluZSBQUl8wX0lOT0RFX0NPVU5UX1dST05HCTB4MDAwMDBECisKKy8qIFRoZSBIdXJkIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZlYXR1cmUgKi8KKyNkZWZpbmUgUFJfMF9IVVJEX0NMRUFSX0ZJTEVUWVBFIDB4MDAwMDBFCisKKy8qIEpvdXJuYWwgaW5vZGUgaXMgaW52YWxpZCAqLworI2RlZmluZSBQUl8wX0pPVVJOQUxfQkFEX0lOT0RFCTB4MDAwMDBGCisKKy8qIFRoZSBleHRlcm5hbCBqb3VybmFsIGhhcyBtdWx0aXBsZSBmaWxlc3lzdGVtcyAod2hpY2ggd2UgY2FuJ3QgaGFuZGxlIHlldCkgKi8KKyNkZWZpbmUgUFJfMF9KT1VSTkFMX1VOU1VQUF9NVUxUSUZTIDB4MDAwMDEwCisKKy8qIENhbid0IGZpbmQgZXh0ZXJuYWwgam91cm5hbCAqLworI2RlZmluZSBQUl8wX0NBTlRfRklORF9KT1VSTkFMCTB4MDAwMDExCisKKy8qIEV4dGVybmFsIGpvdXJuYWwgaGFzIGJhZCBzdXBlcmJsb2NrICovCisjZGVmaW5lIFBSXzBfRVhUX0pPVVJOQUxfQkFEX1NVUEVSIDB4MDAwMDEyCisKKy8qIFN1cGVyYmxvY2sgaGFzIGEgYmFkIGpvdXJuYWwgVVVJRCAqLworI2RlZmluZSBQUl8wX0pPVVJOQUxfQkFEX1VVSUQJMHgwMDAwMTMKKworLyogSm91cm5hbCBoYXMgYW4gdW5rbm93biBzdXBlcmJsb2NrIHR5cGUgKi8KKyNkZWZpbmUgUFJfMF9KT1VSTkFMX1VOU1VQUF9TVVBFUiAweDAwMDAxNAorCisvKiBKb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdCAqLworI2RlZmluZSBQUl8wX0pPVVJOQUxfQkFEX1NVUEVSCTB4MDAwMDE1CisKKy8qIEpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0ICovCisjZGVmaW5lIFBSXzBfSk9VUk5BTF9IQVNfSk9VUk5BTCAweDAwMDAxNgorCisvKiBTdXBlcmJsb2NrIGhhcyByZWNvdmVyeSBmbGFnIHNldCBidXQgbm8gam91cm5hbCAqLworI2RlZmluZSBQUl8wX0pPVVJOQUxfUkVDT1ZFUl9TRVQgMHgwMDAwMTcKKworLyogSm91cm5hbCBoYXMgZGF0YSwgYnV0IHJlY292ZXJ5IGZsYWcgaXMgY2xlYXIgKi8KKyNkZWZpbmUgUFJfMF9KT1VSTkFMX1JFQ09WRVJZX0NMRUFSIDB4MDAwMDE4CisKKy8qIEFzayBpZiB3ZSBzaG91bGQgY2xlYXIgdGhlIGpvdXJuYWwgKi8KKyNkZWZpbmUgUFJfMF9KT1VSTkFMX1JFU0VUX0pPVVJOQUwgMHgwMDAwMTkKKworLyogRmlsZXN5c3RlbSByZXZpc2lvbiBpcyAwLCBidXQgZmVhdHVyZSBmbGFncyBhcmUgc2V0ICovCisjZGVmaW5lIFBSXzBfRlNfUkVWX0xFVkVMCTB4MDAwMDFBCisKKy8qIENsZWFyaW5nIG9ycGhhbiBpbm9kZSAqLworI2RlZmluZSBQUl8wX09SUEhBTl9DTEVBUl9JTk9ERQkJCTB4MDAwMDIwCisKKy8qIElsbGVnYWwgYmxvY2sgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgKi8KKyNkZWZpbmUgUFJfMF9PUlBIQU5fSUxMRUdBTF9CTE9DS19OVU0JCTB4MDAwMDIxCisKKy8qIEFscmVhZHkgY2xlYXJlZCBibG9jayBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAqLworI2RlZmluZSBQUl8wX09SUEhBTl9BTFJFQURZX0NMRUFSRURfQkxPQ0sJMHgwMDAwMjIKKworLyogSWxsZWdhbCBvcnBoYW4gaW5vZGUgaW4gc3VwZXJibG9jayAqLworI2RlZmluZSBQUl8wX09SUEhBTl9JTExFR0FMX0hFQURfSU5PREUJCTB4MDAwMDIzCisKKy8qIElsbGVnYWwgaW5vZGUgaW4gb3JwaGFuZWQgaW5vZGUgbGlzdCAqLworI2RlZmluZSBQUl8wX09SUEhBTl9JTExFR0FMX0lOT0RFCQkweDAwMDAyNAorCisvKiBKb3VybmFsIGhhcyB1bnN1cHBvcnRlZCByZWFkLW9ubHkgZmVhdHVyZSAtIGFib3J0ICovCisjZGVmaW5lIFBSXzBfSk9VUk5BTF9VTlNVUFBfUk9DT01QQVQJCTB4MDAwMDI1CisKKy8qIEpvdXJuYWwgaGFzIHVuc3VwcG9ydGVkIGluY29tcGF0aWJsZSBmZWF0dXJlIC0gYWJvcnQgKi8KKyNkZWZpbmUgUFJfMF9KT1VSTkFMX1VOU1VQUF9JTkNPTVBBVAkJMHgwMDAwMjYKKworLyogSm91cm5hbCBoYXMgdW5zdXBwb3J0ZWQgdmVyc2lvbiBudW1iZXIgKi8KKyNkZWZpbmUgUFJfMF9KT1VSTkFMX1VOU1VQUF9WRVJTSU9OCQkweDAwMDAyNworCisvKiBNb3Zpbmcgam91cm5hbCB0byBoaWRkZW4gZmlsZSAqLworI2RlZmluZQlQUl8wX01PVkVfSk9VUk5BTAkJCTB4MDAwMDI4CisKKy8qIEVycm9yIG1vdmluZyBqb3VybmFsICovCisjZGVmaW5lCVBSXzBfRVJSX01PVkVfSk9VUk5BTAkJCTB4MDAwMDI5CisKKy8qIENsZWFyaW5nIFYyIGpvdXJuYWwgc3VwZXJibG9jayAqLworI2RlZmluZSBQUl8wX0NMRUFSX1YyX0pPVVJOQUwJCQkweDAwMDAyQQorCisvKiBSdW4gam91cm5hbCBhbnl3YXkgKi8KKyNkZWZpbmUgUFJfMF9KT1VSTkFMX1JVTgkJCTB4MDAwMDJCCisKKy8qIFJ1biBqb3VybmFsIGFueXdheSBieSBkZWZhdWx0ICovCisjZGVmaW5lIFBSXzBfSk9VUk5BTF9SVU5fREVGQVVMVAkJMHgwMDAwMkMKKworLyogQmFja3VwIGpvdXJuYWwgaW5vZGUgYmxvY2tzICovCisjZGVmaW5lIFBSXzBfQkFDS1VQX0pOTAkJCQkweDAwMDAyRAorCisvKiBSZXNlcnZlZCBibG9ja3Mgdy9vIHJlc2l6ZV9pbm9kZSAqLworI2RlZmluZSBQUl8wX05PTlpFUk9fUkVTRVJWRURfR0RUX0JMT0NLUwkweDAwMDAyRQorCisvKiBSZXNpemVfaW5vZGUgbm90IGVuYWJsZWQsIGJ1dCByZXNpemUgaW5vZGUgaXMgbm9uLXplcm8gKi8KKyNkZWZpbmUgUFJfMF9DTEVBUl9SRVNJWkVfSU5PREUJCQkweDAwMDAyRgorCisvKiBSZXNpemUgaW5vZGUgaW52YWxpZCAqLworI2RlZmluZSBQUl8wX1JFU0laRV9JTk9ERV9JTlZBTElECQkweDAwMDAzMAorCisvKiBMYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZSAqLworI2RlZmluZSBQUl8wX0ZVVFVSRV9TQl9MQVNUX01PVU5UCQkweDAwMDAzMQorCisvKiBMYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZSAqLworI2RlZmluZSBQUl8wX0ZVVFVSRV9TQl9MQVNUX1dSSVRFCQkweDAwMDAzMgorCisvKiBTdXBlcmJsb2NrIGhpbnQgZm9yIGV4dGVybmFsIGpvdXJuYWwgaW5jb3JyZWN0ICovCisjZGVmaW5lIFBSXzBfRVhURVJOQUxfSk9VUk5BTF9ISU5UCQkweDAwMDAzMworCisvKiBTdXBlcmJsb2NrIGhpbnQgZm9yIGV4dGVybmFsIGpvdXJuYWwgaW5jb3JyZWN0ICovCisjZGVmaW5lIFBSXzBfRElSSEFTSF9ISU5UCQkJMHgwMDAwMzQKKworLyogR3JvdXAgZGVzY3JpcHRvciBOIGNoZWNrc3VtIGlzIGludmFsaWQgKi8KKyNkZWZpbmUgUFJfMF9HRFRfQ1NVTQkJCQkweDAwMDAzNQorCisvKiBHcm91cCBkZXNjcmlwdG9yIE4gbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC4gKi8KKyNkZWZpbmUgUFJfMF9HRFRfVU5JTklUCQkJCTB4MDAwMDM2CisKKy8qIEJsb2NrIGJpdG1hcCBpcyBub3QgaW5pdGlhbGlzZWQgYW5kIElub2RlIGJpdG1hcCBpcyAtLSBOTyBMT05HRVIgVVNFRCAqLworLyogI2RlZmluZSBQUl8wX0JCX1VOSU5JVF9JQl9JTklUCQkJMHgwMDAwMzcgKi8KKworLyogR3JvdXAgZGVzY3JpcHRvciBOIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQuICovCisjZGVmaW5lIFBSXzBfR0RUX0lUQUJMRV9VTlVTRUQJCQkweDAwMDAzOAorCisvKiBMYXN0IGdyb3VwIGJsb2NrIGJpdG1hcCBpcyB1bmluaXRpYWxpemVkLiAqLworI2RlZmluZSBQUl8wX0JCX1VOSU5JVF9MQVNUCQkJMHgwMDAwMzkKKworLyogSm91cm5hbCB0cmFuc2FjdGlvbiBmb3VuZCBjb3JydXB0ICovCisjZGVmaW5lIFBSXzBfSk5MX1RYTl9DT1JSVVBUCQkJMHgwMDAwM0EKKworLyogVGhlIHRlc3RfZnMgZmlsZXN5c3RlbSBmbGFnIGlzIHNldCBhbmQgZXh0NCBpcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgUFJfMF9DTEVBUl9URVNURlNfRkxBRwkJCTB4MDAwMDNCCisKKy8qIExhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlIChmdWRnZWQpICovCisjZGVmaW5lIFBSXzBfRlVUVVJFX1NCX0xBU1RfTU9VTlRfRlVER0VECTB4MDAwMDNDCisKKy8qIExhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlIChmdWRnZWQpICovCisjZGVmaW5lIFBSXzBfRlVUVVJFX1NCX0xBU1RfV1JJVEVfRlVER0VECTB4MDAwMDNECisKKy8qIEJsb2NrIGdyb3VwIGNoZWNrc3VtIChsYXRjaCBxdWVzdGlvbikgKi8KKyNkZWZpbmUgUFJfMF9HRFRfQ1NVTV9MQVRDSAkJCTB4MDAwMDNFCisKKy8qIEZyZWUgaW5vZGVzIGNvdW50IHdyb25nICovCisjZGVmaW5lIFBSXzBfRlJFRV9JTk9ERV9DT1VOVAkJCTB4MDAwMDNGCisKKy8qIEZyZWUgYmxvY2tzIGNvdW50IHdyb25nICovCisjZGVmaW5lIFBSXzBfRlJFRV9CTE9DS19DT1VOVAkJCTB4MDAwMDQwCisKKy8qIE1ha2UgcXVvdGEgZmlsZSBoaWRkZW4gKi8KKyNkZWZpbmUJUFJfMF9ISURFX1FVT1RBCQkJCTB4MDAwMDQxCisKKy8qIFN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAqLworI2RlZmluZSBQUl8wX01NUF9JTlZBTElEX0JMSwkJCTB4MDAwMDQyCisKKy8qIFN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAqLworI2RlZmluZSBQUl8wX01NUF9JTlZBTElEX01BR0lDCQkJMHgwMDAwNDMKKworLyogT3BlbmluZyBmaWxlIHN5c3RlbSBmYWlsZWQgKi8KKyNkZWZpbmUgUFJfMF9PUEVOX0ZBSUxFRAkJCTB4MDAwMDQ0CisKKy8qIENoZWNraW5nIGdyb3VwIGRlc2NyaXB0b3IgZmFpbGVkICovCisjZGVmaW5lIFBSXzBfQ0hFQ0tfREVTQ19GQUlMRUQJCQkweDAwMDA0NQorCisvKiA2NGJpdCBpcyBzZXQgYnV0IGV4dGVudHMgYXJlIG5vdCBzZXQuICovCisjZGVmaW5lIFBSXzBfNjRCSVRfV0lUSE9VVF9FWFRFTlRTCQkweDAwMDA0OAorCisvKiBUaGUgZmlyc3RfbWV0YV9iZyBpcyB0b28gYmlnICovCisjZGVmaW5lIFBSXzBfRklSU1RfTUVUQV9CR19UT09fQklHCQkweDAwMDA0OQorCisvKgorICogUGFzcyAxIGVycm9ycworICovCisKKy8qIFBhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcyAqLworI2RlZmluZSBQUl8xX1BBU1NfSEVBREVSCQkweDAxMDAwMAorCisvKiBSb290IGRpcmVjdG9yeSBpcyBub3QgYW4gaW5vZGUgKi8KKyNkZWZpbmUgUFJfMV9ST09UX05PX0RJUgkJMHgwMTAwMDEKKworLyogUm9vdCBkaXJlY3RvcnkgaGFzIGR0aW1lIHNldCAqLworI2RlZmluZSBQUl8xX1JPT1RfRFRJTUUJCQkweDAxMDAwMgorCisvKiBSZXNlcnZlZCBpbm9kZSBoYXMgYmFkIG1vZGUgKi8KKyNkZWZpbmUgUFJfMV9SRVNFUlZFRF9CQURfTU9ERQkJMHgwMTAwMDMKKworLyogRGVsZXRlZCBpbm9kZSBoYXMgemVybyBkdGltZSAqLworI2RlZmluZSBQUl8xX1pFUk9fRFRJTUUJCQkweDAxMDAwNAorCisvKiBJbm9kZSBpbiB1c2UsIGJ1dCBkdGltZSBzZXQgKi8KKyNkZWZpbmUgUFJfMV9TRVRfRFRJTUUJCQkweDAxMDAwNQorCisvKiBaZXJvLWxlbmd0aCBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgUFJfMV9aRVJPX0xFTkdUSF9ESVIJCTB4MDEwMDA2CisKKy8qIEJsb2NrIGJpdG1hcCBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrICovCisjZGVmaW5lIFBSXzFfQkJfQ09ORkxJQ1QJCTB4MDEwMDA3CisKKy8qIElub2RlIGJpdG1hcCBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrICovCisjZGVmaW5lIFBSXzFfSUJfQ09ORkxJQ1QJCTB4MDEwMDA4CisKKy8qIElub2RlIHRhYmxlIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2sgKi8KKyNkZWZpbmUgUFJfMV9JVEFCTEVfQ09ORkxJQ1QJCTB4MDEwMDA5CisKKy8qIEJsb2NrIGJpdG1hcCBpcyBvbiBhIGJhZCBibG9jayAqLworI2RlZmluZSBQUl8xX0JCX0JBRF9CTE9DSwkJMHgwMTAwMEEKKworLyogSW5vZGUgYml0bWFwIGlzIG9uIGEgYmFkIGJsb2NrICovCisjZGVmaW5lIFBSXzFfSUJfQkFEX0JMT0NLCQkweDAxMDAwQgorCisvKiBJbm9kZSBoYXMgaW5jb3JyZWN0IGlfc2l6ZSAqLworI2RlZmluZSBQUl8xX0JBRF9JX1NJWkUJCQkweDAxMDAwQworCisvKiBJbm9kZSBoYXMgaW5jb3JyZWN0IGlfYmxvY2tzICovCisjZGVmaW5lIFBSXzFfQkFEX0lfQkxPQ0tTCQkweDAxMDAwRAorCisvKiBJbGxlZ2FsIGJsb2NrIG51bWJlciBpbiBpbm9kZSAqLworI2RlZmluZSBQUl8xX0lMTEVHQUxfQkxPQ0tfTlVNCQkweDAxMDAwRQorCisvKiBCbG9jayBudW1iZXIgb3ZlcmxhcHMgZnMgbWV0YWRhdGEgKi8KKyNkZWZpbmUgUFJfMV9CTE9DS19PVkVSTEFQU19NRVRBREFUQQkweDAxMDAwRgorCisvKiBJbm9kZSBoYXMgaWxsZWdhbCBibG9ja3MgKGxhdGNoIHF1ZXN0aW9uKSAqLworI2RlZmluZSBQUl8xX0lOT0RFX0JMT0NLX0xBVENICQkweDAxMDAxMAorCisvKiBUb28gbWFueSBiYWQgYmxvY2tzIGluIGlub2RlICovCisjZGVmaW5lCVBSXzFfVE9PX01BTllfQkFEX0JMT0NLUwkweDAxMDAxMQorCisvKiBJbGxlZ2FsIGJsb2NrIG51bWJlciBpbiBiYWQgYmxvY2sgaW5vZGUgKi8KKyNkZWZpbmUgUFJfMV9CQl9JTExFR0FMX0JMT0NLX05VTQkweDAxMDAxMgorCisvKiBCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2tzIChsYXRjaCBxdWVzdGlvbikgKi8KKyNkZWZpbmUgUFJfMV9JTk9ERV9CQkxPQ0tfTEFUQ0gJCTB4MDEwMDEzCisKKy8qIER1cGxpY2F0ZSBvciBiYWQgYmxvY2tzIGluIHVzZSEgKi8KKyNkZWZpbmUgUFJfMV9EVVBfQkxPQ0tTX1BSRUVOU1RPUAkweDAxMDAxNAorCisvKiBCYWQgYmxvY2sgdXNlZCBhcyBiYWQgYmxvY2sgaW5kaXJlY3QgYmxvY2sgKi8KKyNkZWZpbmUgUFJfMV9CQklOT0RFX0JBRF9NRVRBQkxPQ0sJMHgwMTAwMTUKKworLyogSW5jb25zaXN0ZW5jeSBjYW4ndCBiZSBmaXhlZCBwcm9tcHQgKi8KKyNkZWZpbmUgUFJfMV9CQklOT0RFX0JBRF9NRVRBQkxPQ0tfUFJPTVBUIDB4MDEwMDE2CisKKy8qIEJhZCBwcmltYXJ5IGJsb2NrICovCisjZGVmaW5lIFBSXzFfQkFEX1BSSU1BUllfQkxPQ0sJCTB4MDEwMDE3CisKKy8qIEJhZCBwcmltYXJ5IGJsb2NrIHByb21wdCAqLworI2RlZmluZSBQUl8xX0JBRF9QUklNQVJZX0JMT0NLX1BST01QVAkweDAxMDAxOAorCisvKiBCYWQgcHJpbWFyeSBzdXBlcmJsb2NrICovCisjZGVmaW5lIFBSXzFfQkFEX1BSSU1BUllfU1VQRVJCTE9DSwkweDAxMDAxOQorCisvKiBCYWQgcHJpbWFyeSBibG9jayBncm91cCBkZXNjcmlwdG9ycyAqLworI2RlZmluZSBQUl8xX0JBRF9QUklNQVJZX0dST1VQX0RFU0NSSVBUT1IgMHgwMTAwMUEKKworLyogQmFkIHN1cGVyYmxvY2sgaW4gZ3JvdXAgKi8KKyNkZWZpbmUgUFJfMV9CQURfU1VQRVJCTE9DSwkJMHgwMTAwMUIKKworLyogQmFkIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIGluIGdyb3VwICovCisjZGVmaW5lIFBSXzFfQkFEX0dST1VQX0RFU0NSSVBUT1JTCTB4MDEwMDFDCisKKy8qIEJsb2NrIGNsYWltZWQgZm9yIG5vIHJlYXNvbiAqLworI2RlZmluZSBQUl8xX1BST0dFUlJfQ0xBSU1FRF9CTE9DSwkweDAxMDAxRAorCisvKiBFcnJvciBhbGxvY2F0aW5nIGJsb2NrcyBmb3IgcmVsb2NhdGluZyBtZXRhZGF0YSAqLworI2RlZmluZSBQUl8xX1JFTE9DX0JMT0NLX0FMTE9DQVRFCTB4MDEwMDFFCisKKy8qIEVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYnVmZmVyIGR1cmluZyByZWxvY2F0aW9uIHByb2Nlc3MgKi8KKyNkZWZpbmUgUFJfMV9SRUxPQ19NRU1PUllfQUxMT0NBVEUJMHgwMTAwMUYKKworLyogUmVsb2NhdGluZyBtZXRhZGF0YSBncm91cCBpbmZvcm1hdGlvbiBmcm9tIFggdG8gWSAqLworI2RlZmluZSBQUl8xX1JFTE9DX0ZST01fVE8JCTB4MDEwMDIwCisKKy8qIFJlbG9jYXRpbmcgbWV0YXRkYXRhIGdyb3VwIGluZm9ybWF0aW9uIHRvIFggKi8KKyNkZWZpbmUgUFJfMV9SRUxPQ19UTwkJCTB4MDEwMDIxCisKKy8qIEJsb2NrIHJlYWQgZXJyb3IgZHVyaW5nIHJlbG9jYXRpb24gcHJvY2VzcyAqLworI2RlZmluZSBQUl8xX1JFTE9DX1JFQURfRVJSCQkweDAxMDAyMgorCisvKiBCbG9jayB3cml0ZSBlcnJvciBkdXJpbmcgcmVsb2NhdGlvbiBwcm9jZXNzICovCisjZGVmaW5lIFBSXzFfUkVMT0NfV1JJVEVfRVJSCQkweDAxMDAyMworCisvKiBFcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAqLworI2RlZmluZSBQUl8xX0FMTE9DQVRFX0lCSVRNQVBfRVJST1IJMHgwMTAwMjQKKworLyogRXJyb3IgYWxsb2NhdGluZyBibG9jayBiaXRtYXAgKi8KKyNkZWZpbmUgUFJfMV9BTExPQ0FURV9CQklUTUFQX0VSUk9SCTB4MDEwMDI1CisKKy8qIEVycm9yIGFsbG9jYXRpbmcgaWNvdW50IHN0cnVjdHVyZSAqLworI2RlZmluZSBQUl8xX0FMTE9DQVRFX0lDT1VOVAkJMHgwMTAwMjYKKworLyogRXJyb3IgYWxsb2NhdGluZyBkYmNvdW50ICovCisjZGVmaW5lIFBSXzFfQUxMT0NBVEVfREJDT1VOVAkJMHgwMTAwMjcKKworLyogRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICovCisjZGVmaW5lIFBSXzFfSVNDQU5fRVJST1IJCTB4MDEwMDI4CisKKy8qIEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyAqLworI2RlZmluZSBQUl8xX0JMT0NLX0lURVJBVEUJCTB4MDEwMDI5CisKKy8qIEVycm9yIHdoaWxlIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgUFJfMV9JQ09VTlRfU1RPUkUJCTB4MDEwMDJBCisKKy8qIEVycm9yIHdoaWxlIHN0b3JpbmcgZGlyZWN0b3J5IGJsb2NrIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFBSXzFfQUREX0RCTE9DSwkJCTB4MDEwMDJCCisKKy8qIEVycm9yIHdoaWxlIHJlYWRpbmcgaW5vZGUgKGZvciBjbGVhcmluZykgKi8KKyNkZWZpbmUgUFJfMV9SRUFEX0lOT0RFCQkJMHgwMTAwMkMKKworLyogU3VwcHJlc3MgbWVzc2FnZXMgcHJvbXB0ICovCisjZGVmaW5lIFBSXzFfU1VQUFJFU1NfTUVTU0FHRVMJCTB4MDEwMDJECisKKy8qIEltYWdpYyBmbGFnIHNldCBvbiBhbiBpbm9kZSB3aGVuIGZpbGVzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGl0ICovCisjZGVmaW5lIFBSXzFfU0VUX0lNQUdJQwkJCTB4MDEwMDJGCisKKy8qIEltbXV0YWJsZSBmbGFnIHNldCBvbiBhIGRldmljZSBvciBzb2NrZXQgaW5vZGUgKi8KKyNkZWZpbmUgUFJfMV9TRVRfSU1NVVRBQkxFCQkweDAxMDAzMAorCisvKiBDb21wcmVzc2lvbiBmbGFnIHNldCBvbiBhIG5vbi1jb21wcmVzc2VkIGZpbGVzeXN0ZW0gKi8KKyNkZWZpbmUgUFJfMV9DT01QUl9TRVQJCQkweDAxMDAzMQorCisvKiBOb24temVybyBzaXplIG9uIG9uIGRldmljZSwgZmlmbyBvciBzb2NrZXQgaW5vZGUgKi8KKyNkZWZpbmUgUFJfMV9TRVRfTk9OWlNJWkUJCTB4MDEwMDMyCisKKy8qIEZpbGVzeXN0ZW0gcmV2aXNpb24gaXMgMCwgYnV0IGZlYXR1cmUgZmxhZ3MgYXJlIHNldCAqLworI2RlZmluZSBQUl8xX0ZTX1JFVl9MRVZFTAkJMHgwMTAwMzMKKworLyogSm91cm5hbCBpbm9kZSBub3QgaW4gdXNlLCBuZWVkcyBjbGVhcmluZyAqLworI2RlZmluZSBQUl8xX0pPVVJOQUxfSU5PREVfTk9UX0NMRUFSCTB4MDEwMDM0CisKKy8qIEpvdXJuYWwgaW5vZGUgaGFzIHdyb25nIG1vZGUgKi8KKyNkZWZpbmUgUFJfMV9KT1VSTkFMX0JBRF9NT0RFCQkweDAxMDAzNQorCisvKiBJbm9kZSB0aGF0IHdhcyBwYXJ0IG9mIG9ycGhhbiBsaW5rZWQgbGlzdCAqLworI2RlZmluZSBQUl8xX0xPV19EVElNRQkJCTB4MDEwMDM2CisKKy8qIExhdGNoIHF1ZXN0aW9uIHdoaWNoIGFza3MgaG93IHRvIGRlYWwgd2l0aCBsb3cgZHRpbWUgaW5vZGVzICovCisjZGVmaW5lIFBSXzFfT1JQSEFOX0xJU1RfUkVGVUdFRVMJMHgwMTAwMzcKKworLyogRXJyb3IgYWxsb2NhdGluZyByZWZjb3VudCBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgUFJfMV9BTExPQ0FURV9SRUZDT1VOVAkJMHgwMTAwMzgKKworLyogRXJyb3IgcmVhZGluZyBFeHRlbmRlZCBBdHRyaWJ1dGUgYmxvY2sgKi8KKyNkZWZpbmUgUFJfMV9SRUFEX0VBX0JMT0NLCQkweDAxMDAzOQorCisvKiBJbnZhbGlkIEV4dGVuZGVkIEF0dHJpYnV0ZSBibG9jayAqLworI2RlZmluZSBQUl8xX0JBRF9FQV9CTE9DSwkJMHgwMTAwM0EKKworLyogRXJyb3IgcmVhZGluZyBFeHRlbmRlZCBBdHRyaWJ1dGUgYmxvY2sgd2hpbGUgZml4aW5nIHJlZmNvdW50IC0tIGFib3J0ICovCisjZGVmaW5lIFBSXzFfRVhUQVRUUl9SRUFEX0FCT1JUCQkweDAxMDAzQgorCisvKiBFeHRlbmRlZCBhdHRyaWJ1dGUgcmVmZXJlbmNlIGNvdW50IGluY29ycmVjdCAqLworI2RlZmluZSBQUl8xX0VYVEFUVFJfUkVGQ09VTlQJCTB4MDEwMDNDCisKKy8qIEVycm9yIHdyaXRpbmcgRXh0ZW5kZWQgQXR0cmlidXRlIGJsb2NrIHdoaWxlIGZpeGluZyByZWZjb3VudCAqLworI2RlZmluZSBQUl8xX0VYVEFUVFJfV1JJVEVfQUJPUlQJMHgwMTAwM0QKKworLyogTXVsdGlwbGUgRUEgYmxvY2tzIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgUFJfMV9FQV9NVUxUSV9CTE9DSwkJMHgwMTAwM0UKKworLyogRXJyb3IgYWxsb2NhdGluZyBFQSByZWdpb24gYWxsb2NhdGlvbiBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgUFJfMV9FQV9BTExPQ19SRUdJT05fQUJPUlQJMHgwMTAwM0YKKworLyogRXJyb3IgRUEgYWxsb2NhdGlvbiBjb2xsaXNpb24gKi8KKyNkZWZpbmUgUFJfMV9FQV9BTExPQ19DT0xMSVNJT04JCTB4MDEwMDQwCisKKy8qIEJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZSAqLworI2RlZmluZSBQUl8xX0VBX0JBRF9OQU1FCQkweDAxMDA0MQorCisvKiBCYWQgZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlICovCisjZGVmaW5lIFBSXzFfRUFfQkFEX1ZBTFVFCQkweDAxMDA0MgorCisvKiBJbm9kZSB0b28gYmlnIChsYXRjaCBxdWVzdGlvbikgKi8KKyNkZWZpbmUgUFJfMV9JTk9ERV9UT09CSUcJCTB4MDEwMDQzCisKKy8qIERpcmVjdG9yeSB0b28gYmlnICovCisjZGVmaW5lIFBSXzFfVE9PQklHX0RJUgkJCTB4MDEwMDQ0CisKKy8qIFJlZ3VsYXIgZmlsZSB0b28gYmlnICovCisjZGVmaW5lIFBSXzFfVE9PQklHX1JFRwkJCTB4MDEwMDQ1CisKKy8qIFN5bWxpbmsgdG9vIGJpZyAqLworI2RlZmluZSBQUl8xX1RPT0JJR19TWU1MSU5LCQkweDAxMDA0NgorCisvKiBJTkRFWF9GTCBmbGFnIHNldCBvbiBhIG5vbi1IVFJFRSBmaWxlc3lzdGVtICovCisjZGVmaW5lIFBSXzFfSFRSRUVfU0VUCQkJMHgwMTAwNDcKKworLyogSU5ERVhfRkwgZmxhZyBzZXQgb24gYSBub24tZGlyZWN0b3J5ICovCisjZGVmaW5lIFBSXzFfSFRSRUVfTk9ESVIJCTB4MDEwMDQ4CisKKy8qIEludmFsaWQgcm9vdCBub2RlIGluIEhUUkVFIGRpcmVjdG9yeSAqLworI2RlZmluZSBQUl8xX0hUUkVFX0JBRFJPT1QJCTB4MDEwMDQ5CisKKy8qIFVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiBpbiBIVFJFRSBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgUFJfMV9IVFJFRV9IQVNIVgkJMHgwMTAwNEEKKworLyogSW5jb21wYXRpYmxlIGZsYWcgaW4gSFRSRUUgcm9vdCBub2RlICovCisjZGVmaW5lIFBSXzFfSFRSRUVfSU5DT01QQVQJCTB4MDEwMDRCCisKKy8qIEhUUkVFIHRvbyBkZWVwICovCisjZGVmaW5lIFBSXzFfSFRSRUVfREVQVEgJCTB4MDEwMDRDCisKKy8qIEJhZCBibG9jayBoYXMgaW5kaXJlY3QgYmxvY2sgdGhhdCBjb25mbGljdHMgd2l0aCBmaWxlc3lzdGVtIGJsb2NrICovCisjZGVmaW5lIFBSXzFfQkJfRlNfQkxPQ0sJCTB4MDEwMDRECisKKy8qIFJlc2l6ZSBpbm9kZSBmYWlsZWQgKi8KKyNkZWZpbmUgUFJfMV9SRVNJWkVfSU5PREVfQ1JFQVRFCTB4MDEwMDRFCisKKy8qIGlub2RlLT5pX3NpemUgaXMgdG9vIGxvbmcgKi8KKyNkZWZpbmUgUFJfMV9FWFRSQV9JU0laRQkJMHgwMTAwNEYKKworLyogYXR0cmlidXRlIG5hbWUgaXMgdG9vIGxvbmcgKi8KKyNkZWZpbmUgUFJfMV9BVFRSX05BTUVfTEVOCQkweDAxMDA1MAorCisvKiB3cm9uZyBFQSB2YWx1ZSBvZmZzZXQgKi8KKyNkZWZpbmUgUFJfMV9BVFRSX1ZBTFVFX09GRlNFVAkJMHgwMTAwNTEKKworLyogd3JvbmcgRUEgYmxvY2tudW1iZXIgKi8KKyNkZWZpbmUgUFJfMV9BVFRSX1ZBTFVFX0JMT0NLCQkweDAxMDA1MgorCisvKiB3cm9uZyBFQSB2YWx1ZSBzaXplICovCisjZGVmaW5lIFBSXzFfQVRUUl9WQUxVRV9TSVpFCQkweDAxMDA1MworCisvKiB3cm9uZyBFQSBoYXNoIHZhbHVlICovCisjZGVmaW5lIFBSXzFfQVRUUl9IQVNICQkJMHgwMTAwNTQKKworLyogaW5vZGUgYXBwZWFycyB0byBiZSBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBQUl8xX1RSRUFUX0FTX0RJUkVDVE9SWQkJMHgwMTAwNTUKKworLyogRXJyb3Igd2hpbGUgcmVhZGluZyBleHRlbnQgdHJlZSAqLworI2RlZmluZSBQUl8xX1JFQURfRVhURU5UCQkweDAxMDA1NgorCisvKiBGYWlsdXJlIHRvIGl0ZXJhdGUgZXh0ZW50cyAqLworI2RlZmluZSBQUl8xX0VYVEVOVF9JVEVSQVRFX0ZBSUxVUkUJMHgwMTAwNTcKKworLyogQmFkIHN0YXJ0aW5nIGJsb2NrIGluIGV4dGVudCAqLworI2RlZmluZSBQUl8xX0VYVEVOVF9CQURfU1RBUlRfQkxLCTB4MDEwMDU4CisKKy8qIEV4dGVudCBlbmRzIGJleW9uZCBmaWxlc3lzdGVtICovCisjZGVmaW5lIFBSXzFfRVhURU5UX0VORFNfQkVZT05ECQkweDAxMDA1OQorCisvKiBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIGEgbm9uLWV4dGVudHMgY2FwYWJsZSBmaWxlc3lzdGVtICovCisjZGVmaW5lIFBSXzFfRVhURU5UU19TRVQJCTB4MDEwMDVBCisKKy8qIGlub2RlIGhhcyBleHRlbnRzLCBzdXBlcmJsb2NrIG1pc3NpbmcgSU5DT01QQVRfRVhURU5UUyBmZWF0dXJlICovCisjZGVmaW5lIFBSXzFfRVhURU5UX0ZFQVRVUkUJCTB4MDEwMDVCCisKKy8qIGlub2RlIG1pc3NpbmcgRVhURU5UU19GTCwgYnV0IGlzIGFuIGV4dGVudCBpbm9kZSAqLworI2RlZmluZSBQUl8xX1VOU0VUX0VYVEVOVF9GTAkJMHgwMTAwNUMKKworLyogRmFzdCBzeW1saW5rIGhhcyBFWFRFTlRTX0ZMIHNldCAqLworI2RlZmluZSBQUl8xX0ZBU1RfU1lNTElOS19FWFRFTlRfRkwJMHgwMTAwNUQKKworLyogRXh0ZW50cyBhcmUgb3V0IG9mIG9yZGVyICovCisjZGVmaW5lIFBSXzFfT1VUX09GX09SREVSX0VYVEVOVFMJMHgwMTAwNUUKKworLyogRXh0ZW50IG5vZGUgaGVhZGVyIGludmFsaWQgKi8KKyNkZWZpbmUgUFJfMV9FWFRFTlRfSEVBREVSX0lOVkFMSUQJMHgwMTAwNUYKKworLyogUFJfMV9FT0ZCTE9DS1NfRkxfU0VUIDB4MDEwMDYwIHdhcyBoZXJlICovCisKKy8qIEZhaWxlZCB0byBjb252ZXJ0IHN1YmNsdXN0ZXIgYml0bWFwICovCisjZGVmaW5lIFBSXzFfQ09OVkVSVF9TVUJDTFVTVEVSCQkweDAxMDA2MQorCisvKiBRdW90YSBpbm9kZSBoYXMgd3JvbmcgbW9kZSAqLworI2RlZmluZSBQUl8xX1FVT1RBX0JBRF9NT0RFCQkweDAxMDA2MgorCisvKiBRdW90YSBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YSAqLworI2RlZmluZSBQUl8xX1FVT1RBX0lOT0RFX05PVF9DTEVBUgkweDAxMDA2MworCisvKiBRdW90YSBpbm9kZSBpcyB1c2VyIHZpc2libGUgKi8KKyNkZWZpbmUgUFJfMV9RVU9UQV9JTk9ERV9OT1RfSElEREVOCTB4MDEwMDY0CisKKy8qIEludmFsaWQgYmFkIGlub2RlICovCisjZGVmaW5lIFBSXzFfSU5WQUxJRF9CQURfSU5PREUJCTB4MDEwMDY1CisKKy8qIEV4dGVudCBoYXMgemVybyBsZW5ndGggKi8KKyNkZWZpbmUgUFJfMV9FWFRFTlRfTEVOR1RIX1pFUk8JCTB4MDEwMDY2CisKKy8qIEluZGV4IHN0YXJ0IGRvZXNuJ3QgbWF0Y2ggc3RhcnQgb2YgbmV4dCBleHRlbnQgZG93biAqLworI2RlZmluZSBQUl8xX0VYVEVOVF9JTkRFWF9TVEFSVF9JTlZBTElECTB4MDEwMDZECisKKyNkZWZpbmUgUFJfMV9FWFRFTlRfRU5EX09VVF9PRl9CT1VORFMJMHgwMTAwNkUKKworLyogSW5vZGUgaGFzIGlubGluZSBkYXRhLCBidXQgc3VwZXJibG9jayBpcyBtaXNzaW5nIElOTElORV9EQVRBIGZlYXR1cmUuICovCisjZGVmaW5lIFBSXzFfSU5MSU5FX0RBVEFfRkVBVFVSRSAgICAgICAweDAxMDA2RgorCisvKiBJTkxJTkVfREFUQSBmZWF0dXJlIGlzIHNldCBpbiBhIG5vbi1pbmxpbmUtZGF0YSBmaWxlc3lzdGVtICovCisjZGVmaW5lIFBSXzFfSU5MSU5FX0RBVEFfU0VUCSAgICAgICAweDAxMDA3MAorCisvKiBmaWxlIG1ldGFkYXRhIGNvbGxpZGVzIHdpdGggY3JpdGljYWwgbWV0YWRhdGEgKi8KKyNkZWZpbmUgUFJfMV9DUklUSUNBTF9NRVRBREFUQV9DT0xMSVNJT04JMHgwMTAwNzEKKworLyogRGlyZWN0b3J5IGlub2RlIGhhcyBhIG1pc3NpbmcgYmxvY2sgKGhvbGUpICovCisjZGVmaW5lIFBSXzFfQ09MTEFQU0VfREJMT0NLCQkweDAxMDA3MgorCisvKiB1bmluaXQgZGlyZWN0b3J5IGJsb2NrICovCisjZGVmaW5lIFBSXzFfVU5JTklUX0RCTE9DSwkJMHgwMTAwNzMKKworLyogSW5vZGUgbG9naWNhbCBibG9jayBpcyBtaXNhbGlnbmVkICovCisjZGVmaW5lIFBSXzFfTUlTQUxJR05FRF9DTFVTVEVSCQkweDAxMDA3NAorCisvKgorICogUGFzcyAxYiBlcnJvcnMKKyAqLworCisvKiBQYXNzIDFCOiBSZXNjYW4gZm9yIGR1cGxpY2F0ZS9iYWQgYmxvY2tzICovCisjZGVmaW5lIFBSXzFCX1BBU1NfSEVBREVSCTB4MDExMDAwCisKKy8qIER1cGxpY2F0ZS9iYWQgYmxvY2socykgaGVhZGVyICovCisjZGVmaW5lIFBSXzFCX0RVUF9CTE9DS19IRUFERVIJMHgwMTEwMDEKKworLyogRHVwbGljYXRlL2JhZCBibG9jayhzKSBpbiBpbm9kZSAqLworI2RlZmluZSBQUl8xQl9EVVBfQkxPQ0sJCTB4MDExMDAyCisKKy8qIER1cGxpY2F0ZS9iYWQgYmxvY2socykgZW5kICovCisjZGVmaW5lIFBSXzFCX0RVUF9CTE9DS19FTkQJMHgwMTEwMDMKKworLyogRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICovCisjZGVmaW5lIFBSXzFCX0lTQ0FOX0VSUk9SCTB4MDExMDA0CisKKy8qIEVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwICovCisjZGVmaW5lIFBSXzFCX0FMTE9DQVRFX0lCSVRNQVBfRVJST1IgMHgwMTEwMDUKKworLyogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzICovCisjZGVmaW5lIFBSXzFCX0JMT0NLX0lURVJBVEUJMHgwMTEwMDYKKworLyogRXJyb3IgYWRqdXN0aW5nIEVBIHJlZmNvdW50ICovCisjZGVmaW5lIFBSXzFCX0FESl9FQV9SRUZDT1VOVAkweDAxMTAwNworCisvKiBQYXNzIDFDOiBTY2FuIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBkdXAgYmxvY2tzLiAqLworI2RlZmluZSBQUl8xQ19QQVNTX0hFQURFUgkweDAxMjAwMAorCisKKy8qIFBhc3MgMUQ6IFJlY29uY2lsaW5nIGR1cGxpY2F0ZSBibG9ja3MgKi8KKyNkZWZpbmUgUFJfMURfUEFTU19IRUFERVIJMHgwMTMwMDAKKworLyogRmlsZSBoYXMgZHVwbGljYXRlIGJsb2NrcyAqLworI2RlZmluZSBQUl8xRF9EVVBfRklMRQkJMHgwMTMwMDEKKworLyogTGlzdCBvZiBmaWxlcyBzaGFyaW5nIGR1cGxpY2F0ZSBibG9ja3MgKi8KKyNkZWZpbmUgUFJfMURfRFVQX0ZJTEVfTElTVAkweDAxMzAwMgorCisvKiBGaWxlIHNoYXJpbmcgYmxvY2tzIHdpdGggZmlsZXN5c3RlbSBtZXRhZGF0YSAgKi8KKyNkZWZpbmUgUFJfMURfU0hBUkVfTUVUQURBVEEJMHgwMTMwMDMKKworLyogUmVwb3J0IG9mIGhvdyBtYW55IGR1cGxpY2F0ZS9iYWQgaW5vZGVzICovCisjZGVmaW5lIFBSXzFEX05VTV9EVVBfSU5PREVTCTB4MDEzMDA0CisKKy8qIER1cGxpY2F0ZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuICovCisjZGVmaW5lIFBSXzFEX0RVUF9CTE9DS1NfREVBTFQJMHgwMTMwMDUKKworLyogQ2xvbmUgZHVwbGljYXRlL2JhZCBibG9ja3M/ICovCisjZGVmaW5lIFBSXzFEX0NMT05FX1FVRVNUSU9OCTB4MDEzMDA2CisKKy8qIERlbGV0ZSBmaWxlPyAqLworI2RlZmluZSBQUl8xRF9ERUxFVEVfUVVFU1RJT04JMHgwMTMwMDcKKworLyogQ291bGRuJ3QgY2xvbmUgZmlsZSAoZXJyb3IpICovCisjZGVmaW5lIFBSXzFEX0NMT05FX0VSUk9SCTB4MDEzMDA4CisKKy8qCisgKiBQYXNzIDIgZXJyb3JzCisgKi8KKworLyogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlICovCisjZGVmaW5lIFBSXzJfUEFTU19IRUFERVIJMHgwMjAwMDAKKworLyogQmFkIGlub2RlIG51bWJlciBmb3IgJy4nICovCisjZGVmaW5lIFBSXzJfQkFEX0lOT0RFX0RPVAkweDAyMDAwMQorCisvKiBEaXJlY3RvcnkgZW50cnkgaGFzIGJhZCBpbm9kZSBudW1iZXIgKi8KKyNkZWZpbmUgUFJfMl9CQURfSU5PCQkweDAyMDAwMgorCisvKiBEaXJlY3RvcnkgZW50cnkgaGFzIGRlbGV0ZWQgb3IgdW51c2VkIGlub2RlICovCisjZGVmaW5lIFBSXzJfVU5VU0VEX0lOT0RFCTB4MDIwMDAzCisKKy8qIERpcmVjdHJ5IGVudHJ5IGlzIGxpbmsgdG8gJy4nICovCisjZGVmaW5lIFBSXzJfTElOS19ET1QJCTB4MDIwMDA0CisKKy8qIERpcmVjdG9yeSBlbnRyeSBwb2ludHMgdG8gaW5vZGUgbm93IGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2sgKi8KKyNkZWZpbmUgUFJfMl9CQl9JTk9ERQkJMHgwMjAwMDUKKworLyogRGlyZWN0b3J5IGVudHJ5IGNvbnRhaW5zIGEgbGluayB0byBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBQUl8yX0xJTktfRElSCQkweDAyMDAwNgorCisvKiBEaXJlY3RvcnkgZW50cnkgY29udGFpbnMgYSBsaW5rIHRvIHRoZSByb290IGRpcmVjdHJ5ICovCisjZGVmaW5lIFBSXzJfTElOS19ST09UCQkweDAyMDAwNworCisvKiBEaXJlY3RvcnkgZW50cnkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZSAqLworI2RlZmluZSBQUl8yX0JBRF9OQU1FCQkweDAyMDAwOAorCisvKiBNaXNzaW5nICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgKi8KKyNkZWZpbmUgUFJfMl9NSVNTSU5HX0RPVAkweDAyMDAwOQorCisvKiBNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlICovCisjZGVmaW5lIFBSXzJfTUlTU0lOR19ET1RfRE9UCTB4MDIwMDBBCisKKy8qIEZpcnN0IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSBkb2Vzbid0IGNvbnRhaW4gJy4nICovCisjZGVmaW5lIFBSXzJfMVNUX05PVF9ET1QJMHgwMjAwMEIKKworLyogU2Vjb25kIGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSBkb2Vzbid0IGNvbnRhaW4gJy4uJyAqLworI2RlZmluZSBQUl8yXzJORF9OT1RfRE9UX0RPVAkweDAyMDAwQworCisvKiBpX2ZhZGRyIHNob3VsZCBiZSB6ZXJvICovCisjZGVmaW5lIFBSXzJfRkFERFJfWkVSTwkJMHgwMjAwMEQKKworLyogaV9maWxlX2FjbCBzaG91bGQgYmUgemVybyAqLworI2RlZmluZSBQUl8yX0ZJTEVfQUNMX1pFUk8JMHgwMjAwMEUKKworLyogaV9kaXJfYWNsIHNob3VsZCBiZSB6ZXJvICovCisjZGVmaW5lIFBSXzJfRElSX0FDTF9aRVJPCTB4MDIwMDBGCisKKy8qIGlfZnJhZyBzaG91bGQgYmUgemVybyAqLworI2RlZmluZSBQUl8yX0ZSQUdfWkVSTwkJMHgwMjAwMTAKKworLyogaV9mc2l6ZSBzaG91bGQgYmUgemVybyAqLworI2RlZmluZSBQUl8yX0ZTSVpFX1pFUk8JCTB4MDIwMDExCisKKy8qIGlub2RlIGhhcyBiYWQgbW9kZSAqLworI2RlZmluZSBQUl8yX0JBRF9NT0RFCQkweDAyMDAxMgorCisvKiBkaXJlY3RvcnkgY29ycnVwdGVkICovCisjZGVmaW5lIFBSXzJfRElSX0NPUlJVUFRFRAkweDAyMDAxMworCisvKiBmaWxlbmFtZSB0b28gbG9uZyAqLworI2RlZmluZSBQUl8yX0ZJTEVOQU1FX0xPTkcJMHgwMjAwMTQKKworLyogRGlyZWN0b3J5IGlub2RlIGhhcyBhIG1pc3NpbmcgYmxvY2sgKGhvbGUpICovCisjZGVmaW5lIFBSXzJfRElSRUNUT1JZX0hPTEUJMHgwMjAwMTUKKworLyogJy4nIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWQgKi8KKyNkZWZpbmUgUFJfMl9ET1RfTlVMTF9URVJNCTB4MDIwMDE2CisKKy8qICcuLicgaXMgbm90IE5VTEwgdGVybWluYXRlZCAqLworI2RlZmluZSBQUl8yX0RPVF9ET1RfTlVMTF9URVJNCTB4MDIwMDE3CisKKy8qIElsbGVnYWwgY2hhcmFjdGVyIGRldmljZSBpbiBpbm9kZSAqLworI2RlZmluZSBQUl8yX0JBRF9DSEFSX0RFVgkweDAyMDAxOAorCisvKiBJbGxlZ2FsIGJsb2NrIGRldmljZSBpbiBpbm9kZSAqLworI2RlZmluZSBQUl8yX0JBRF9CTE9DS19ERVYJMHgwMjAwMTkKKworLyogRHVwbGljYXRlICcuJyBlbnRyeSAqLworI2RlZmluZSBQUl8yX0RVUF9ET1QJCTB4MDIwMDFBCisKKy8qIER1cGxpY2F0ZSAnLi4nIGVudHJ5ICovCisjZGVmaW5lIFBSXzJfRFVQX0RPVF9ET1QJMHgwMjAwMUIKKworLyogSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gKi8KKyNkZWZpbmUgUFJfMl9OT19ESVJJTkZPCQkweDAyMDAxQworCisvKiBGaW5hbCByZWNfbGVuIGlzIHdyb25nICovCisjZGVmaW5lIFBSXzJfRklOQUxfUkVDTEVOCTB4MDIwMDFECisKKy8qIEVycm9yIGFsbG9jYXRpbmcgaWNvdW50IHN0cnVjdHVyZSAqLworI2RlZmluZSBQUl8yX0FMTE9DQVRFX0lDT1VOVAkweDAyMDAxRQorCisvKiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcnkgYmxvY2tzICovCisjZGVmaW5lIFBSXzJfREJMSVNUX0lURVJBVEUJMHgwMjAwMUYKKworLyogRXJyb3IgcmVhZGluZyBkaXJlY3RvcnkgYmxvY2sgKi8KKyNkZWZpbmUgUFJfMl9SRUFEX0RJUkJMT0NLCTB4MDIwMDIwCisKKy8qIEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrICovCisjZGVmaW5lIFBSXzJfV1JJVEVfRElSQkxPQ0sJMHgwMjAwMjEKKworLyogRXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrICovCisjZGVmaW5lIFBSXzJfQUxMT0NfRElSQk9DSwkweDAyMDAyMgorCisvKiBFcnJvciBkZWFsbG9jYXRpbmcgaW5vZGUgKi8KKyNkZWZpbmUgUFJfMl9ERUFMTE9DX0lOT0RFCTB4MDIwMDIzCisKKy8qIERpcmVjdG9yeSBlbnRyeSBmb3IgJy4nIGlzIGJpZy4gIFNwbGl0PyAqLworI2RlZmluZSBQUl8yX1NQTElUX0RPVAkJMHgwMjAwMjQKKworLyogSWxsZWdhbCBGSUZPICovCisjZGVmaW5lIFBSXzJfQkFEX0ZJRk8JCTB4MDIwMDI1CisKKy8qIElsbGVnYWwgc29ja2V0ICovCisjZGVmaW5lIFBSXzJfQkFEX1NPQ0tFVAkJMHgwMjAwMjYKKworLyogRGlyZWN0b3J5IGZpbGV0eXBlIG5vdCBzZXQgKi8KKyNkZWZpbmUgUFJfMl9TRVRfRklMRVRZUEUJMHgwMjAwMjcKKworLyogRGlyZWN0b3J5IGZpbGV0eXBlIGluY29ycmVjdCAqLworI2RlZmluZSBQUl8yX0JBRF9GSUxFVFlQRQkweDAyMDAyOAorCisvKiBEaXJlY3RvcnkgZmlsZXR5cGUgc2V0IHdoZW4gaXQgc2hvdWxkbid0IGJlICovCisjZGVmaW5lIFBSXzJfQ0xFQVJfRklMRVRZUEUJMHgwMjAwMjkKKworLyogRGlyZWN0b3J5IGZpbGVuYW1lIGNhbid0IGJlIHplcm8tbGVuZ3RoICAqLworI2RlZmluZSBQUl8yX05VTExfTkFNRQkJMHgwMjAwMzAKKworLyogSW52YWxpZCBzeW1saW5rICovCisjZGVmaW5lIFBSXzJfSU5WQUxJRF9TWU1MSU5LCTB4MDIwMDMxCisKKy8qIGlfZmlsZV9hY2wgKGV4dGVuZGVkIGF0dHJpYnV0ZSkgaXMgYmFkICovCisjZGVmaW5lIFBSXzJfRklMRV9BQ0xfQkFECTB4MDIwMDMyCisKKy8qIEZpbGVzeXN0ZW0gY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBoYXMgbm8gc3VjaCBmbGFnIGluIHNiICovCisjZGVmaW5lIFBSXzJfRkVBVFVSRV9MQVJHRV9GSUxFUyAweDAyMDAzMworCisvKiBOb2RlIGluIEhUUkVFIGRpcmVjdG9yeSBub3QgcmVmZXJlbmNlZCAqLworI2RlZmluZSBQUl8yX0hUUkVFX05PVFJFRgkweDAyMDAzNAorCisvKiBOb2RlIGluIEhUUkVFIGRpcmVjdG9yeSByZWZlcmVuY2VkIHR3aWNlICovCisjZGVmaW5lIFBSXzJfSFRSRUVfRFVQUkVGCTB4MDIwMDM1CisKKy8qIE5vZGUgaW4gSFRSRUUgZGlyZWN0b3J5IGhhcyBiYWQgbWluIGhhc2ggKi8KKyNkZWZpbmUgUFJfMl9IVFJFRV9NSU5fSEFTSAkweDAyMDAzNgorCisvKiBOb2RlIGluIEhUUkVFIGRpcmVjdG9yeSBoYXMgYmFkIG1heCBoYXNoICovCisjZGVmaW5lIFBSXzJfSFRSRUVfTUFYX0hBU0gJMHgwMjAwMzcKKworLyogQ2xlYXIgaW52YWxpZCBIVFJFRSBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgUFJfMl9IVFJFRV9DTEVBUgkweDAyMDAzOAorCisvKiBDbGVhciB0aGUgaHRyZWUgZmxhZyBmb3JjaWJseSAqLworLyogI2RlZmluZSBQUl8yX0hUUkVFX0ZDTFIJMHgwMjAwMzkgKi8KKworLyogQmFkIGJsb2NrIGluIGh0cmVlIGludGVyaW9yIG5vZGUgKi8KKyNkZWZpbmUgUFJfMl9IVFJFRV9CQURCTEsJMHgwMjAwM0EKKworLyogRXJyb3IgYWRqdXN0aW5nIEVBIHJlZmNvdW50ICovCisjZGVmaW5lIFBSXzJfQURKX0VBX1JFRkNPVU5UCTB4MDIwMDNCCisKKy8qIEludmFsaWQgSFRSRUUgcm9vdCBub2RlICovCisjZGVmaW5lIFBSXzJfSFRSRUVfQkFEX1JPT1QJMHgwMjAwM0MKKworLyogSW52YWxpZCBIVFJFRSBsaW1pdCAqLworI2RlZmluZSBQUl8yX0hUUkVFX0JBRF9MSU1JVAkweDAyMDAzRAorCisvKiBJbnZhbGlkIEhUUkVFIGNvdW50ICovCisjZGVmaW5lIFBSXzJfSFRSRUVfQkFEX0NPVU5UCTB4MDIwMDNFCisKKy8qIEhUUkVFIGludGVyaW9yIG5vZGUgaGFzIG91dC1vZi1vcmRlciBoYXNoZXMgaW4gdGFibGUgKi8KKyNkZWZpbmUgUFJfMl9IVFJFRV9IQVNIX09SREVSCTB4MDIwMDNGCisKKy8qIE5vZGUgaW4gSFRSRUUgZGlyZWN0b3J5IGhhcyBiYWQgZGVwdGggKi8KKyNkZWZpbmUgUFJfMl9IVFJFRV9CQURfREVQVEgJMHgwMjAwNDAKKworLyogRHVwbGljYXRlIGRpcmVjdG9yeSBlbnRyeSBmb3VuZCAqLworI2RlZmluZSBQUl8yX0RVUExJQ0FURV9ESVJFTlQJMHgwMjAwNDEKKworLyogTm9uLXVuaXF1ZSBmaWxlbmFtZSBmb3VuZCAqLworI2RlZmluZSBQUl8yX05PTl9VTklRVUVfRklMRQkweDAyMDA0MgorCisvKiBEdXBsaWNhdGUgZGlyZWN0b3J5IGVudHJ5IGZvdW5kICovCisjZGVmaW5lIFBSXzJfUkVQT1JUX0RVUF9ESVJFTlQJMHgwMjAwNDMKKworLyogaV9ibG9ja3NfaGkgc2hvdWxkIGJlIHplcm8gKi8KKyNkZWZpbmUgUFJfMl9CTE9DS1NfSElfWkVSTwkweDAyMDA0NAorCisvKiBVbmV4cGVjdGVkIEhUUkVFIGJsb2NrICovCisjZGVmaW5lIFBSXzJfVU5FWFBFQ1RFRF9IVFJFRV9CTE9DSwkweDAyMDA0NQorCisvKiBJbm9kZSBmb3VuZCBpbiBncm91cCB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldCAqLworI2RlZmluZSBQUl8yX0lOT1JFRl9CR19JTk9fVU5JTklUCTB4MDIwMDQ2CisKKy8qIElub2RlIGZvdW5kIGluIGdyb3VwIHVudXNlZCBpbm9kZXMgYXJlYSAqLworI2RlZmluZSBQUl8yX0lOT1JFRl9JTl9VTlVTRUQJCTB4MDIwMDQ3CisKKy8qIGlfZmlsZV9hY2xfaGkgc2hvdWxkIGJlIHplcm8gKi8KKyNkZWZpbmUgUFJfMl9JX0ZJTEVfQUNMX0hJX1pFUk8JCTB4MDIwMDQ4CisKKy8qCisgKiBQYXNzIDMgZXJyb3JzCisgKi8KKworLyogUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5ICovCisjZGVmaW5lIFBSXzNfUEFTU19IRUFERVIJCTB4MDMwMDAwCisKKy8qIFJvb3QgaW5vZGUgbm90IGFsbG9jYXRlZCAqLworI2RlZmluZSBQUl8zX05PX1JPT1RfSU5PREUJCTB4MDMwMDAxCisKKy8qIE5vIHJvb20gaW4gbG9zdCtmb3VuZCAqLworI2RlZmluZSBQUl8zX0VYUEFORF9MRl9ESVIJCTB4MDMwMDAyCisKKy8qIFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAqLworI2RlZmluZSBQUl8zX1VOQ09OTkVDVEVEX0RJUgkJMHgwMzAwMDMKKworLyogL2xvc3QrZm91bmQgbm90IGZvdW5kICovCisjZGVmaW5lIFBSXzNfTk9fTEZfRElSCQkJMHgwMzAwMDQKKworLyogLi4gZW50cnkgaXMgaW5jb3JyZWN0ICovCisjZGVmaW5lIFBSXzNfQkFEX0RPVF9ET1QJCTB4MDMwMDA1CisKKy8qIEJhZCBvciBub24tZXhpc3RlbnQgL2xvc3QrZm91bmQuICBDYW5ub3QgcmVjb25uZWN0ICovCisjZGVmaW5lIFBSXzNfTk9fTFBGCQkJMHgwMzAwMDYKKworLyogQ291bGQgbm90IGV4cGFuZCAvbG9zdCtmb3VuZCAqLworI2RlZmluZSBQUl8zX0NBTlRfRVhQQU5EX0xQRgkJMHgwMzAwMDcKKworLyogQ291bGQgbm90IHJlY29ubmVjdCBpbm9kZSAqLworI2RlZmluZSBQUl8zX0NBTlRfUkVDT05ORUNUCQkweDAzMDAwOAorCisvKiBFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvbG9zdCtmb3VuZCAqLworI2RlZmluZSBQUl8zX0VSUl9GSU5EX0xQRgkJMHgwMzAwMDkKKworLyogRXJyb3IgaW4gZXh0MmZzX25ld19ibG9jayB3aGlsZSBjcmVhdGluZyAvbG9zdCtmb3VuZCAqLworI2RlZmluZSBQUl8zX0VSUl9MUEZfTkVXX0JMT0NLCQkweDAzMDAwQQorCisvKiBFcnJvciBpbiBleHQyZnNfbmV3X2lub2RlIHdoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kICovCisjZGVmaW5lIFBSXzNfRVJSX0xQRl9ORVdfSU5PREUJCTB4MDMwMDBCCisKKy8qIEVycm9yIGluIGV4dDJmc19uZXdfZGlyX2Jsb2NrIHdoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kICovCisjZGVmaW5lIFBSXzNfRVJSX0xQRl9ORVdfRElSX0JMT0NLCTB4MDMwMDBDCisKKy8qIEVycm9yIHdoaWxlIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrIGZvciAvbG9zdCtmb3VuZCAqLworI2RlZmluZSBQUl8zX0VSUl9MUEZfV1JJVEVfQkxPQ0sJMHgwMzAwMEQKKworLyogRXJyb3Igd2hpbGUgYWRqdXN0aW5nIGlub2RlIGNvdW50ICovCisjZGVmaW5lIFBSXzNfQURKVVNUX0lOT0RFCQkweDAzMDAwRQorCisvKiBDb3VsZG4ndCBmaXggcGFyZW50IGRpcmVjdG9yeSAtLSBlcnJvciAqLworI2RlZmluZSBQUl8zX0ZJWF9QQVJFTlRfRVJSCQkweDAzMDAwRgorCisvKiBDb3VsZG4ndCBmaXggcGFyZW50IGRpcmVjdG9yeSAtLSBjb3VsZG4ndCBmaW5kIGl0ICovCisjZGVmaW5lIFBSXzNfRklYX1BBUkVOVF9OT0ZJTkQJCTB4MDMwMDEwCisKKy8qIEVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwICovCisjZGVmaW5lIFBSXzNfQUxMT0NBVEVfSUJJVE1BUF9FUlJPUgkweDAzMDAxMQorCisvKiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAqLworI2RlZmluZSBQUl8zX0NSRUFURV9ST09UX0VSUk9SCQkweDAzMDAxMgorCisvKiBFcnJvciBjcmVhdGluZyBsb3N0IGFuZCBmb3VuZCBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgUFJfM19DUkVBVEVfTFBGX0VSUk9SCQkweDAzMDAxMworCisvKiBSb290IGlub2RlIGlzIG5vdCBkaXJlY3Rvcnk7IGFib3J0aW5nICovCisjZGVmaW5lIFBSXzNfUk9PVF9OT1RfRElSX0FCT1JUCQkweDAzMDAxNAorCisvKiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS4gKi8KKyNkZWZpbmUgUFJfM19OT19ST09UX0lOT0RFX0FCT1JUCTB4MDMwMDE1CisKKy8qIEludGVybmFsIGVycm9yOiBjb3VsZG4ndCBmaW5kIGRpcl9pbmZvICovCisjZGVmaW5lIFBSXzNfTk9fRElSSU5GTwkJCTB4MDMwMDE2CisKKy8qIExvc3QrZm91bmQgaXMgbm90IGEgZGlyZWN0b3J5ICovCisjZGVmaW5lIFBSXzNfTFBGX05PVERJUgkJCTB4MDMwMDE3CisKKy8qCisgKiBQYXNzIDNhIC0tLSByZWhhc2hpbmcgZGlyZXRvcmllcworICovCisvKiBQYXNzIDNhOiBSZWluZGV4aW5nIGRpcmVjdG9yaWVzICovCisjZGVmaW5lIFBSXzNBX1BBU1NfSEVBREVSCQkweDAzMTAwMAorCisvKiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcmllcyAqLworI2RlZmluZSBQUl8zQV9PUFRJTUlaRV9JVEVSCQkweDAzMTAwMQorCisvKiBFcnJvciByZWhhc2ggZGlyZWN0b3J5ICovCisjZGVmaW5lIFBSXzNBX09QVElNSVpFX0RJUl9FUlIJCTB4MDMxMDAyCisKKy8qIFJlaGFzaGluZyBkaXIgaGVhZGVyICovCisjZGVmaW5lIFBSXzNBX09QVElNSVpFX0RJUl9IRUFERVIJMHgwMzEwMDMKKworLyogUmVoYXNoaW5nIGRpcmVjdG9yeSAlZCAqLworI2RlZmluZSBQUl8zQV9PUFRJTUlaRV9ESVIJCTB4MDMxMDA0CisKKy8qIFJlaGFzaGluZyBkaXIgZW5kICovCisjZGVmaW5lIFBSXzNBX09QVElNSVpFX0RJUl9FTkQJCTB4MDMxMDA1CisKKy8qCisgKiBQYXNzIDQgZXJyb3JzCisgKi8KKworLyogUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzICovCisjZGVmaW5lIFBSXzRfUEFTU19IRUFERVIJCTB4MDQwMDAwCisKKy8qIFVuYXR0YWNoZWQgemVyby1sZW5ndGggaW5vZGUgKi8KKyNkZWZpbmUgUFJfNF9aRVJPX0xFTl9JTk9ERQkJMHgwNDAwMDEKKworLyogVW5hdHRhY2hlZCBpbm9kZSAqLworI2RlZmluZSBQUl80X1VOQVRUQUNIRURfSU5PREUJCTB4MDQwMDAyCisKKy8qIElub2RlIHJlZiBjb3VudCB3cm9uZyAqLworI2RlZmluZSBQUl80X0JBRF9SRUZfQ09VTlQJCTB4MDQwMDAzCisKKy8qIEluY29uc2lzdGVudCBpbm9kZSBjb3VudCBpbmZvcm1hdGlvbiBjYWNoZWQgKi8KKyNkZWZpbmUgUFJfNF9JTkNPTlNJU1RFTlRfQ09VTlQJCTB4MDQwMDA0CisKKy8qCisgKiBQYXNzIDUgZXJyb3JzCisgKi8KKworLyogUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uICovCisjZGVmaW5lIFBSXzVfUEFTU19IRUFERVIJCTB4MDUwMDAwCisKKy8qIFBhZGRpbmcgYXQgZW5kIG9mIGlub2RlIGJpdG1hcCBpcyBub3Qgc2V0LiAqLworI2RlZmluZSBQUl81X0lOT0RFX0JNQVBfUEFERElORwkJMHgwNTAwMDEKKworLyogUGFkZGluZyBhdCBlbmQgb2YgYmxvY2sgYml0bWFwIGlzIG5vdCBzZXQuICovCisjZGVmaW5lIFBSXzVfQkxPQ0tfQk1BUF9QQURESU5HCQkweDA1MDAwMgorCisvKiBCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXMgaGVhZGVyICovCisjZGVmaW5lIFBSXzVfQkxPQ0tfQklUTUFQX0hFQURFUgkweDA1MDAwMworCisvKiBCbG9jayBub3QgdXNlZCwgYnV0IG1hcmtlZCBpbiBiaXRtYXAgKi8KKyNkZWZpbmUgUFJfNV9CTE9DS19VTlVTRUQJCTB4MDUwMDA0CisKKy8qIEJsb2NrIHVzZWQsIGJ1dCBub3QgbWFya2VkIHVzZWQgaW4gYml0bWFwICovCisjZGVmaW5lIFBSXzVfQkxPQ0tfVVNFRAkJCTB4MDUwMDA1CisKKy8qIEJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlcyBlbmQgKi8KKyNkZWZpbmUgUFJfNV9CTE9DS19CSVRNQVBfRU5ECQkweDA1MDAwNgorCisvKiBJbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXMgaGVhZGVyICovCisjZGVmaW5lIFBSXzVfSU5PREVfQklUTUFQX0hFQURFUgkweDA1MDAwNworCisvKiBJbm9kZSBub3QgdXNlZCwgYnV0IG1hcmtlZCBpbiBiaXRtYXAgKi8KKyNkZWZpbmUgUFJfNV9JTk9ERV9VTlVTRUQJCTB4MDUwMDA4CisKKy8qIElub2RlIHVzZWQsIGJ1dCBub3QgbWFya2VkIHVzZWQgaW4gYml0bWFwICovCisjZGVmaW5lIFBSXzVfSU5PREVfVVNFRAkJCTB4MDUwMDA5CisKKy8qIElub2RlIGJpdG1hcCBkaWZmZXJlbmNlcyBlbmQgKi8KKyNkZWZpbmUgUFJfNV9JTk9ERV9CSVRNQVBfRU5ECQkweDA1MDAwQQorCisvKiBGcmVlIGlub2RlcyBjb3VudCBmb3IgZ3JvdXAgd3JvbmcgKi8KKyNkZWZpbmUgUFJfNV9GUkVFX0lOT0RFX0NPVU5UX0dST1VQCTB4MDUwMDBCCisKKy8qIERpcmVjdG9yaWVzIGNvdW50IGZvciBncm91cCB3cm9uZyAqLworI2RlZmluZSBQUl81X0ZSRUVfRElSX0NPVU5UX0dST1VQCTB4MDUwMDBDCisKKy8qIEZyZWUgaW5vZGVzIGNvdW50IHdyb25nICovCisjZGVmaW5lIFBSXzVfRlJFRV9JTk9ERV9DT1VOVAkJMHgwNTAwMEQKKworLyogRnJlZSBibG9ja3MgY291bnQgZm9yIGdyb3VwIHdyb25nICovCisjZGVmaW5lIFBSXzVfRlJFRV9CTE9DS19DT1VOVF9HUk9VUAkweDA1MDAwRQorCisvKiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAqLworI2RlZmluZSBQUl81X0ZSRUVfQkxPQ0tfQ09VTlQJCTB4MDUwMDBGCisKKy8qIFByb2dyYW1taW5nIGVycm9yOiBiaXRtYXAgZW5kcG9pbnRzIGRvbid0IG1hdGNoICovCisjZGVmaW5lIFBSXzVfQk1BUF9FTkRQT0lOVFMJCTB4MDUwMDEwCisKKy8qIEludGVybmFsIGVycm9yOiBmdWRnaW5nIGVuZCBvZiBiaXRtYXAgKi8KKyNkZWZpbmUgUFJfNV9GVURHRV9CSVRNQVBfRVJST1IJCTB4MDUwMDExCisKKy8qIEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgaW5vZGUgYml0bWFwICovCisjZGVmaW5lIFBSXzVfQ09QWV9JQklUTUFQX0VSUk9SCQkweDA1MDAxMgorCisvKiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGJsb2NrIGJpdG1hcCAqLworI2RlZmluZSBQUl81X0NPUFlfQkJJVE1BUF9FUlJPUgkJMHgwNTAwMTMKKworLyogQmxvY2sgcmFuZ2Ugbm90IHVzZWQsIGJ1dCBtYXJrZWQgaW4gYml0bWFwICovCisjZGVmaW5lIFBSXzVfQkxPQ0tfUkFOR0VfVU5VU0VECQkweDA1MDAxNAorCisvKiBCbG9jayByYW5nZSB1c2VkLCBidXQgbm90IG1hcmtlZCB1c2VkIGluIGJpdG1hcCAqLworI2RlZmluZSBQUl81X0JMT0NLX1JBTkdFX1VTRUQJCTB4MDUwMDE1CisKKy8qIElub2RlIHJhbmdlIG5vdCB1c2VkLCBidXQgbWFya2VkIGluIGJpdG1hcCAqLworI2RlZmluZSBQUl81X0lOT0RFX1JBTkdFX1VOVVNFRAkJMHgwNTAwMTYKKworLyogSW5vZGUgcmFuZ2V1c2VkLCBidXQgbm90IG1hcmtlZCB1c2VkIGluIGJpdG1hcCAqLworI2RlZmluZSBQUl81X0lOT0RFX1JBTkdFX1VTRUQJCTB4MDUwMDE3CisKKy8qIEJsb2NrIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIEJMT0NLX1VOSU5JVCAqLworI2RlZmluZSBQUl81X0JMT0NLX1VOSU5JVAkJMHgwNTAwMTgKKworLyogSW5vZGUgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgSU5PREVfVU5JTklUICovCisjZGVmaW5lIFBSXzVfSU5PREVfVU5JTklUCQkweDA1MDAxOQorCisvKgorICogUG9zdC1QYXNzIDUgZXJyb3JzCisgKi8KKworLyogUmVjcmVhdGUgdGhlIGpvdXJuYWwgaWYgRTJGX0ZMQUdfSk9VUk5BTF9JTk9ERSBmbGFnIGlzIHNldCAqLworI2RlZmluZSBQUl82X1JFQ1JFQVRFX0pPVVJOQUwJCTB4MDYwMDAxCisKKy8qIFVwZGF0ZSBxdW90YSBpbmZvcm1hdGlvbiBpZiBpdCBpcyBpbmNvbnNpc3RlbnQgKi8KKyNkZWZpbmUgUFJfNl9VUERBVEVfUVVPVEFTCQkweDA2MDAwMgorCisvKiBFcnJvciBzZXR0aW5nIGJsb2NrIGdyb3VwIGNoZWNrc3VtIGluZm8gKi8KKyNkZWZpbmUgUFJfNl9TRVRfQkdfQ0hFQ0tTVU0JCTB4MDYwMDAzCisKKy8qIEVycm9yIHdyaXRpbmcgZmlsZSBzeXN0ZW0gaW5mbyAqLworI2RlZmluZSBQUl82X0ZMVVNIX0ZJTEVTWVNURU0JCTB4MDYwMDA0CisKKy8qIEVycm9yIGZsdXNoaW5nIHdyaXRlcyB0byBzdG9yYWdlIGRldmljZSAqLworI2RlZmluZSBQUl82X0lPX0ZMVVNICQkJMHgwNjAwMDUKKworLyoKKyAqIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICovCitpbnQgZml4X3Byb2JsZW0oZTJmc2NrX3QgY3R4LCBwcm9ibGVtX3QgY29kZSwgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCk7CitpbnQgZW5kX3Byb2JsZW1fbGF0Y2goZTJmc2NrX3QgY3R4LCBpbnQgbWFzayk7CitpbnQgc2V0X2xhdGNoX2ZsYWdzKGludCBtYXNrLCBpbnQgc2V0ZmxhZ3MsIGludCBjbGVhcmZsYWdzKTsKK2ludCBnZXRfbGF0Y2hfZmxhZ3MoaW50IG1hc2ssIGludCAqdmFsdWUpOwordm9pZCBjbGVhcl9wcm9ibGVtX2NvbnRleHQoc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCk7CisKKy8qIG1lc3NhZ2UuYyAqLwordm9pZCBwcmludF9lMmZzY2tfbWVzc2FnZShGSUxFICpmLCBlMmZzY2tfdCBjdHgsIGNvbnN0IGNoYXIgKm1zZywKKwkJCSAgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCwgaW50IGZpcnN0LAorCQkJICBpbnQgcmVjdXJzZSk7CisKZGlmZiAtLWdpdCBhL2UyZnNjay9wcm9ibGVtUC5oIGIvZTJmc2NrL3Byb2JsZW1QLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0NGNkNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9wcm9ibGVtUC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBwcm9ibGVtUC5oIC0tLSBQcml2YXRlIGhlYWRlciBmaWxlIGZvciBmaXhfcHJvYmxlbSgpCisgKgorICogQ29weXJpZ2h0IDE5OTcgYnkgVGhlb2RvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworc3RydWN0IGUyZnNja19wcm9ibGVtIHsKKwlwcm9ibGVtX3QJZTJwX2NvZGU7CisJY29uc3QgY2hhciAqCWUycF9kZXNjcmlwdGlvbjsKKwljaGFyCQlwcm9tcHQ7CisJaW50CQlmbGFnczsKKwlwcm9ibGVtX3QJc2Vjb25kX2NvZGU7CisJaW50CQljb3VudDsKKwlpbnQJCW1heF9jb3VudDsKK307CisKK3N0cnVjdCBsYXRjaF9kZXNjciB7CisJaW50CQlsYXRjaF9jb2RlOworCXByb2JsZW1fdAlxdWVzdGlvbjsKKwlwcm9ibGVtX3QJZW5kX21lc3NhZ2U7CisJaW50CQlmbGFnczsKK307CisKKyNkZWZpbmUgUFJfUFJFRU5fT0sJMHgwMDAwMDEgLyogRG9uJ3QgbmVlZCB0byBkbyBwcmVlbmhhbHQgKi8KKyNkZWZpbmUgUFJfTk9fT0sJMHgwMDAwMDIgLyogSWYgdXNlciBhbnN3ZXJzIG5vLCBkb24ndCBtYWtlIGZzIGludmFsaWQgKi8KKyNkZWZpbmUgUFJfTk9fREVGQVVMVAkweDAwMDAwNCAvKiBEZWZhdWx0IHRvIG5vICovCisjZGVmaW5lIFBSX01TR19PTkxZCTB4MDAwMDA4IC8qIFByaW50IG1lc3NhZ2Ugb25seSAqLworCisvKiBCaXQgcG9zaXRpb25zIDB4MDAwZmYwIGFyZSByZXNlcnZlZCBmb3IgdGhlIFBSX0xBVENIIGZsYWdzICovCisKKyNkZWZpbmUgUFJfRkFUQUwJMHgwMDEwMDAgLyogRmF0YWwgZXJyb3IgKi8KKyNkZWZpbmUgUFJfQUZURVJfQ09ERQkweDAwMjAwMCAvKiBBZnRlciBhc2tpbmcgdGhlIGZpcnN0IHF1ZXN0aW9uLCAqLworCQkJCSAvKiBhc2sgYW5vdGhlciAqLworI2RlZmluZSBQUl9QUkVFTl9OT01TRwkweDAwNDAwMCAvKiBEb24ndCBwcmludCBhIG1lc3NhZ2UgaWYgd2UncmUgcHJlZW5pbmcgKi8KKyNkZWZpbmUgUFJfTk9DT0xMQVRFCTB4MDA4MDAwIC8qIERvbid0IGNvbGxhdGUgYW5zd2VycyBmb3IgdGhpcyBsYXRjaCAqLworI2RlZmluZSBQUl9OT19OT01TRwkweDAxMDAwMCAvKiBEb24ndCBwcmludCBhIG1lc3NhZ2UgaWYgZTJmc2NrIC1uICovCisjZGVmaW5lIFBSX1BSRUVOX05PCTB4MDIwMDAwIC8qIFVzZSBObyBhcyBhbiBhbnN3ZXIgaWYgcHJlZW5pbmcgKi8KKyNkZWZpbmUgUFJfUFJFRU5fTk9IRFIJMHgwNDAwMDAgLyogRG9uJ3QgcHJpbnQgdGhlIHByZWVuIGhlYWRlciAqLworI2RlZmluZSBQUl9DT05GSUcJMHgwODAwMDAgLyogVGhpcyBwcm9ibGVtIGhhcyBiZWVuIGN1c3RvbWl6ZWQKKwkJCQkgICAgZnJvbSB0aGUgY29uZmlnIGZpbGUgKi8KKyNkZWZpbmUgUFJfRk9SQ0VfTk8JMHgxMDAwMDAgLyogRm9yY2UgdGhlIGFuc3dlciB0byBiZSBubyAqLwpkaWZmIC0tZ2l0IGEvZTJmc2NrL3Byb2ZfZXJyLmV0IGIvZTJmc2NrL3Byb2ZfZXJyLmV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MzE2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svcHJvZl9lcnIuZXQKQEAgLTAsMCArMSw2NiBAQAorZXJyb3JfdGFibGUgcHJvZgorCitlcnJvcl9jb2RlCVBST0ZfVkVSU0lPTiwJIlByb2ZpbGUgdmVyc2lvbiAwLjAiCisKKyMKKyMgZ2VuZXJhdGVkIGJ5IHByb2ZfdHJlZS5jCisjCitlcnJvcl9jb2RlCVBST0ZfTUFHSUNfTk9ERSwJIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX25vZGUiCitlcnJvcl9jb2RlCVBST0ZfTk9fU0VDVElPTiwJIlByb2ZpbGUgc2VjdGlvbiBub3QgZm91bmQiCitlcnJvcl9jb2RlCVBST0ZfTk9fUkVMQVRJT04sCSJQcm9maWxlIHJlbGF0aW9uIG5vdCBmb3VuZCIKK2Vycm9yX2NvZGUJUFJPRl9BRERfTk9UX1NFQ1RJT04sIAorCSJBdHRlbXB0IHRvIGFkZCBhIHJlbGF0aW9uIHRvIG5vZGUgd2hpY2ggaXMgbm90IGEgc2VjdGlvbiIKK2Vycm9yX2NvZGUJUFJPRl9TRUNUSU9OX1dJVEhfVkFMVUUsIAorCSJBIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgaGFzIGEgbm9uLXplcm8gdmFsdWUiCitlcnJvcl9jb2RlCVBST0ZfQkFEX0xJTktfTElTVCwgCSJCYWQgbGlua2VkIGxpc3QgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorZXJyb3JfY29kZQlQUk9GX0JBRF9HUk9VUF9MVkwsIAkiQmFkIGdyb3VwIGxldmVsIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK2Vycm9yX2NvZGUJUFJPRl9CQURfUEFSRU5UX1BUUiwgCQorCSJCYWQgcGFyZW50IHBvaW50ZXIgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorZXJyb3JfY29kZQlQUk9GX01BR0lDX0lURVJBVE9SLAkiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGUgaXRlcmF0b3IiCitlcnJvcl9jb2RlCVBST0ZfU0VUX1NFQ1RJT05fVkFMVUUsCSJDYW4ndCBzZXQgdmFsdWUgb24gc2VjdGlvbiBub2RlIgorZXJyb3JfY29kZQlQUk9GX0VJTlZBTCwJCSJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCitlcnJvcl9jb2RlCVBST0ZfUkVBRF9PTkxZLAkJIkF0dGVtcHQgdG8gbW9kaWZ5IHJlYWQtb25seSBwcm9maWxlIgorCisjCisjIGdlbmVyYXRlZCBieSBwcm9mX3BhcnNlLmMKKyMKKworZXJyb3JfY29kZQlQUk9GX1NFQ1RJT05fTk9UT1AsICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCitlcnJvcl9jb2RlCVBST0ZfU0VDVElPTl9TWU5UQVgsICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSBzZWN0aW9uIGhlYWRlciIKK2Vycm9yX2NvZGUJUFJPRl9SRUxBVElPTl9TWU5UQVgsICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSByZWxhdGlvbiIKK2Vycm9yX2NvZGUJUFJPRl9FWFRSQV9DQlJBQ0UsICJFeHRyYSBjbG9zaW5nIGJyYWNlIGluIHByb2ZpbGUiCitlcnJvcl9jb2RlCVBST0ZfTUlTU0lOR19PQlJBQ0UsICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKKworIworIyBnZW5lcmF0ZWQgYnkgcHJvZl9pbml0LmMKKyMgCitlcnJvcl9jb2RlCVBST0ZfTUFHSUNfUFJPRklMRSwJIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3QiCitlcnJvcl9jb2RlCVBST0ZfTUFHSUNfU0VDVElPTiwJIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3NlY3Rpb25fdCIKK2Vycm9yX2NvZGUJUFJPRl9UT1BTRUNUSU9OX0lURVJfTk9TVVBQLAorCSJJdGVyYXRpb24gdGhyb3VnaCBhbGwgdG9wIGxldmVsIHNlY3Rpb24gbm90IHN1cHBvcnRlZCIKK2Vycm9yX2NvZGUJUFJPRl9JTlZBTElEX1NFQ1RJT04sCSJJbnZhbGlkIHByb2ZpbGVfc2VjdGlvbiBvYmplY3QiCitlcnJvcl9jb2RlCVBST0ZfRU5EX09GX1NFQ1RJT05TLAkiTm8gbW9yZSBzZWN0aW9ucyIKK2Vycm9yX2NvZGUJUFJPRl9CQURfTkFNRVNFVCwJIkJhZCBuYW1lc2V0IHBhc3NlZCB0byBxdWVyeSByb3V0aW5lIgorZXJyb3JfY29kZQlQUk9GX05PX1BST0ZJTEUsCSJObyBwcm9maWxlIGZpbGUgb3BlbiIKKworIworIyBnZW5lcmF0ZWQgYnkgcHJvZl9maWxlLmMKKyMKK2Vycm9yX2NvZGUgICAgICBQUk9GX01BR0lDX0ZJTEUsCSJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCitlcnJvcl9jb2RlCVBST0ZfRkFJTF9PUEVOLAkJIkNvdWxkbid0IG9wZW4gcHJvZmlsZSBmaWxlIgorCisjCisjIGdlbmVyYXRlZCBieSBwcm9mX3NldC5jCisjCitlcnJvcl9jb2RlCVBST0ZfRVhJU1RTLAkJIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiCisKKyMKKyMgZ2VuZXJhdGVkIGJ5IHByb2ZfZ2V0LmMKKyMKK2Vycm9yX2NvZGUJUFJPRl9CQURfQk9PTEVBTiwJCSJJbnZhbGlkIGJvb2xlYW4gdmFsdWUiCitlcnJvcl9jb2RlCVBST0ZfQkFEX0lOVEVHRVIsCQkiSW52YWxpZCBpbnRlZ2VyIHZhbHVlIgorCitlcnJvcl9jb2RlCVBST0ZfTUFHSUNfRklMRV9EQVRBLCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCisKKworZW5kCmRpZmYgLS1naXQgYS9lMmZzY2svcHJvZmlsZS5jIGIvZTJmc2NrL3Byb2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDUyOGM4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL3Byb2ZpbGUuYwpAQCAtMCwwICsxLDE5MDUgQEAKKy8qCisgKiBwcm9maWxlLmMgLS0gQSBzaW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIHBhcnNpbmcgImxpYnJhcnkgaW4gYSBmaWxlIgorICoKKyAqIFRoZSBwcm9maWxlIGxpYnJhcnkgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBUaGVvZG9yZSBUcydvIGluIDE5OTUKKyAqIGZvciB1c2UgaW4gdGhlIE1JVCBLZXJiZXJvcyB2NSBsaWJyYXJ5LiAgSXQgaGFzIGJlZW4KKyAqIG1vZGlmaWVkL2VuaGFuY2VkL2J1Zy1maXhlZCBvdmVyIHRpbWUgYnkgb3RoZXIgbWVtYmVycyBvZiB0aGUgTUlUCisgKiBLZXJiZXJvcyB0ZWFtLiAgVGhpcyB2ZXJzaW9uIHdhcyBvcmlnaW5hbGx5IHRha2VuIGZyb20gdGhlIEtlcmJlcm9zCisgKiB2NSBkaXN0cmlidXRpb24sIHZlcnNpb24gMS40LjIsIGFuZCByYWRpY2FsbHkgc2ltcGxpZmllZCBmb3IgdXNlIGluCisgKiBlMmZzcHJvZ3MuICAoU3VwcG9ydCBmb3IgbG9ja2luZyBmb3IgbXVsdGktdGhyZWFkZWQgb3BlcmF0aW9ucywKKyAqIGJlaW5nIGFibGUgdG8gbW9kaWZ5IGFuZCB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQorICogcHJvZ3JhbW1hdGljYWxseSwgYW5kIE1hYy9XaW5kb3dzIHBvcnRhYmlsaXR5IGhhdmUgYmVlbiByZW1vdmVkLgorICogSXQgaGFzIGJlZW4gZm9sZGVkIGludG8gYSBzaW5nbGUgQyBzb3VyY2UgZmlsZSB0byBtYWtlIGl0IGVhc2llciB0bworICogZm9sZCBpbnRvIGFuIGFwcGxpY2F0aW9uIHByb2dyYW0uKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKgorICogQ29weXJpZ2h0IChDKSAxOTg1LTIwMDUgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBFeHBvcnQgb2YgdGhpcyBzb2Z0d2FyZSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EgbWF5IHJlcXVpcmUKKyAqIGEgc3BlY2lmaWMgbGljZW5zZSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQuICBJdCBpcyB0aGUKKyAqIHJlc3BvbnNpYmlsaXR5IG9mIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uIGNvbnRlbXBsYXRpbmcgZXhwb3J0IHRvCisgKiBvYnRhaW4gc3VjaCBhIGxpY2Vuc2UgYmVmb3JlIGV4cG9ydGluZy4KKyAqCisgKiBXSVRISU4gVEhBVCBDT05TVFJBSU5ULCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQKKyAqIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZAorICogd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZAorICogdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdAorICogdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nCisgKiB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKKyAqIHBlcm1pc3Npb24uICBGdXJ0aGVybW9yZSBpZiB5b3UgbW9kaWZ5IHRoaXMgc29mdHdhcmUgeW91IG11c3QgbGFiZWwKKyAqIHlvdXIgc29mdHdhcmUgYXMgbW9kaWZpZWQgc29mdHdhcmUgYW5kIG5vdCBkaXN0cmlidXRlIGl0IGluIHN1Y2ggYQorICogZmFzaGlvbiB0aGF0IGl0IG1pZ2h0IGJlIGNvbmZ1c2VkIHdpdGggdGhlIG9yaWdpbmFsIE1JVCBzb2Z0d2FyZS4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUKKyAqIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnR5LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaWZkZWYgSEFWRV9QV0RfSAorI2luY2x1ZGUgPHB3ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxldC9jb21fZXJyLmg+CisjaW5jbHVkZSAicHJvZmlsZS5oIgorI2luY2x1ZGUgInByb2ZfZXJyLmgiCisKKyN1bmRlZiBTVEFUX09OQ0VfUEVSX1NFQ09ORAorI3VuZGVmIEhBVkVfU1RBVAorCisvKgorICogcHJvZl9pbnQuaAorICovCisKK3R5cGVkZWYgbG9uZyBwcmZfbWFnaWNfdDsKKworLyoKKyAqIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHByb2ZpbGUgaW5mb3JtYXRpb24gZm9yIGEKKyAqIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmaWxlLgorICovCitzdHJ1Y3QgX3ByZl9maWxlX3QgeworCXByZl9tYWdpY190CW1hZ2ljOworCWNoYXIJCSpmaWxlc3BlYzsKKyNpZmRlZiBTVEFUX09OQ0VfUEVSX1NFQ09ORAorCXRpbWVfdAkJbGFzdF9zdGF0OworI2VuZGlmCisJdGltZV90CQl0aW1lc3RhbXA7IC8qIHRpbWUgdHJlZSB3YXMgbGFzdCB1cGRhdGVkIGZyb20gZmlsZSAqLworCWludAkJZmxhZ3M7CS8qIHIvdywgZGlydHkgKi8KKwlpbnQJCXVwZF9zZXJpYWw7IC8qIGluY3JlbWVudGVkIHdoZW4gZGF0YSBjaGFuZ2VzICovCisJc3RydWN0IHByb2ZpbGVfbm9kZSAqcm9vdDsKKwlzdHJ1Y3QgX3ByZl9maWxlX3QgKm5leHQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCBfcHJmX2ZpbGVfdCAqcHJmX2ZpbGVfdDsKKworLyoKKyAqIFRoZSBwcm9maWxlIGZsYWdzCisgKi8KKyNkZWZpbmUgUFJPRklMRV9GSUxFX1JXCQkweDAwMDEKKyNkZWZpbmUgUFJPRklMRV9GSUxFX0RJUlRZCTB4MDAwMgorI2RlZmluZSBQUk9GSUxFX0ZJTEVfTk9fUkVMT0FECTB4MDAwNAorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgaGlnaC1sZXZlbCwgdXNlciB2aXNpYmxlIHByb2ZpbGVfdAorICogb2JqZWN0LCB3aGljaCBpcyB1c2VkIGFzIGEgaGFuZGxlIGJ5IHVzZXJzIHdobyBuZWVkIHRvIHF1ZXJ5IHNvbWUKKyAqIGNvbmZpZ3VyYXRpb24gZmlsZShzKQorICovCitzdHJ1Y3QgX3Byb2ZpbGVfdCB7CisJcHJmX21hZ2ljX3QJbWFnaWM7CisJcHJmX2ZpbGVfdAlmaXJzdF9maWxlOworfTsKKworLyoKKyAqIFVzZWQgYnkgdGhlIHByb2ZpbGUgaXRlcmF0b3IgaW4gcHJvZl9nZXQuYworICovCisjZGVmaW5lIFBST0ZJTEVfSVRFUl9MSVNUX1NFQ1RJT04JMHgwMDAxCisjZGVmaW5lIFBST0ZJTEVfSVRFUl9TRUNUSU9OU19PTkxZCTB4MDAwMgorI2RlZmluZSBQUk9GSUxFX0lURVJfUkVMQVRJT05TX09OTFkJMHgwMDA0CisKKyNkZWZpbmUgUFJPRklMRV9JVEVSX0ZJTkFMX1NFRU4JCTB4MDEwMAorCisvKgorICogQ2hlY2sgaWYgYSBmaWxlc3BlYyBpcyBsYXN0IGluIGEgbGlzdCAoTlVMTCBvbiBVTklYLCBpbnZhbGlkIEZTU3BlYyBvbiBNYWNPUworICovCisKKyNkZWZpbmUJUFJPRklMRV9MQVNUX0ZJTEVTUEVDKHgpICgoKHgpID09IE5VTEwpIHx8ICgoeClbMF0gPT0gJ1wwJykpCisKK3N0cnVjdCBwcm9maWxlX25vZGUgeworCWVycmNvZGVfdAltYWdpYzsKKwljaGFyICpuYW1lOworCWNoYXIgKnZhbHVlOworCWludCBncm91cF9sZXZlbDsKKwl1bnNpZ25lZCBpbnQgZmluYWw6MTsJCS8qIEluZGljYXRlIGRvbid0IHNlYXJjaCBuZXh0IGZpbGUgKi8KKwl1bnNpZ25lZCBpbnQgZGVsZXRlZDoxOworCXN0cnVjdCBwcm9maWxlX25vZGUgKmZpcnN0X2NoaWxkOworCXN0cnVjdCBwcm9maWxlX25vZGUgKnBhcmVudDsKKwlzdHJ1Y3QgcHJvZmlsZV9ub2RlICpuZXh0LCAqcHJldjsKK307CisKKyNkZWZpbmUgQ0hFQ0tfTUFHSUMobm9kZSkgXAorCSAgaWYgKChub2RlKS0+bWFnaWMgIT0gUFJPRl9NQUdJQ19OT0RFKSBcCisJCSAgcmV0dXJuIFBST0ZfTUFHSUNfTk9ERTsKKworLyogcHJvZmlsZSBwYXJzZXIgZGVjbGFyYXRpb25zICovCitzdHJ1Y3QgcGFyc2Vfc3RhdGUgeworCWludAlzdGF0ZTsKKwlpbnQJZ3JvdXBfbGV2ZWw7CisJaW50CWxpbmVfbnVtOworCXN0cnVjdCBwcm9maWxlX25vZGUgKnJvb3Rfc2VjdGlvbjsKKwlzdHJ1Y3QgcHJvZmlsZV9ub2RlICpjdXJyZW50X3NlY3Rpb247Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9maWxlbmFtZSA9ICI8ZGVmYXVsdD4iOworCitzdGF0aWMgcHJvZmlsZV9zeW50YXhfZXJyX2NiX3QJc3ludGF4X2Vycl9jYjsKKworc3RhdGljIGVycmNvZGVfdCBwYXJzZV9saW5lKGNoYXIgKmxpbmUsIHN0cnVjdCBwYXJzZV9zdGF0ZSAqc3RhdGUpOworCisjaWZkZWYgREVCVUdfUFJPR1JBTQorc3RhdGljIGVycmNvZGVfdCBwcm9maWxlX3dyaXRlX3RyZWVfZmlsZQorCShzdHJ1Y3QgcHJvZmlsZV9ub2RlICpyb290LCBGSUxFICpkc3RmaWxlKTsKKworc3RhdGljIGVycmNvZGVfdCBwcm9maWxlX3dyaXRlX3RyZWVfdG9fYnVmZmVyCisJKHN0cnVjdCBwcm9maWxlX25vZGUgKnJvb3QsIGNoYXIgKipidWYpOworI2VuZGlmCisKKworc3RhdGljIHZvaWQgcHJvZmlsZV9mcmVlX25vZGUKKwkoc3RydWN0IHByb2ZpbGVfbm9kZSAqcmVsYXRpb24pOworCitzdGF0aWMgZXJyY29kZV90IHByb2ZpbGVfY3JlYXRlX25vZGUKKwkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsCisJCSAgIHN0cnVjdCBwcm9maWxlX25vZGUgKipyZXRfbm9kZSk7CisKKyNpZmRlZiBERUJVR19QUk9HUkFNCitzdGF0aWMgZXJyY29kZV90IHByb2ZpbGVfdmVyaWZ5X25vZGUKKwkoc3RydWN0IHByb2ZpbGVfbm9kZSAqbm9kZSk7CisjZW5kaWYKKworc3RhdGljIGVycmNvZGVfdCBwcm9maWxlX2FkZF9ub2RlCisJKHN0cnVjdCBwcm9maWxlX25vZGUgKnNlY3Rpb24sCisJCSAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJICAgIHN0cnVjdCBwcm9maWxlX25vZGUgKipyZXRfbm9kZSk7CisKK3N0YXRpYyBlcnJjb2RlX3QgcHJvZmlsZV9maW5kX25vZGUKKwkoc3RydWN0IHByb2ZpbGVfbm9kZSAqc2VjdGlvbiwKKwkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkgICAgaW50IHNlY3Rpb25fZmxhZywgdm9pZCAqKnN0YXRlLAorCQkgICAgc3RydWN0IHByb2ZpbGVfbm9kZSAqKm5vZGUpOworCitzdGF0aWMgZXJyY29kZV90IHByb2ZpbGVfbm9kZV9pdGVyYXRvcgorCSh2b2lkCSoqaXRlcl9wLCBzdHJ1Y3QgcHJvZmlsZV9ub2RlICoqcmV0X25vZGUsCisJCSAgIGNoYXIgKipyZXRfbmFtZSwgY2hhciAqKnJldF92YWx1ZSk7CisKK3N0YXRpYyBlcnJjb2RlX3QgcHJvZmlsZV9vcGVuX2ZpbGUKKwkoY29uc3QgY2hhciAqIGZpbGUsIHByZl9maWxlX3QgKnJldF9wcm9mKTsKKworc3RhdGljIGVycmNvZGVfdCBwcm9maWxlX3VwZGF0ZV9maWxlCisJKHByZl9maWxlX3QgcHJmKTsKKworc3RhdGljIHZvaWQgcHJvZmlsZV9mcmVlX2ZpbGUKKwkocHJmX2ZpbGVfdCBwcm9maWxlKTsKKworc3RhdGljIGVycmNvZGVfdCBwcm9maWxlX2dldF92YWx1ZShwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICBjb25zdCBjaGFyICpzdWJuYW1lLCBjb25zdCBjaGFyICpzdWJzdWJuYW1lLAorCQkJCSAgIGNvbnN0IGNoYXIgKipyZXRfdmFsdWUpOworCisKKy8qCisgKiBwcm9mX2luaXQuYyAtLS0gcm91dGluZXMgdGhhdCBtYW5pcHVsYXRlIHRoZSB1c2VyLXZpc2libGUgcHJvZmlsZV90CisgKiAJb2JqZWN0LgorICovCisKK3N0YXRpYyBpbnQgY29tcHN0cihjb25zdCB2b2lkICptMSwgY29uc3Qgdm9pZCAqbTIpCit7CisJY29uc3QgY2hhciAqczEgPSAqKChjb25zdCBjaGFyICogY29uc3QgKikgbTEpOworCWNvbnN0IGNoYXIgKnMyID0gKigoY29uc3QgY2hhciAqIGNvbnN0ICopIG0yKTsKKworCXJldHVybiBzdHJjbXAoczEsIHMyKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9saXN0KGNoYXIgKipsaXN0KQoreworICAgIGNoYXIJKipjcDsKKworICAgIGlmIChsaXN0ID09IDApCisJICAgIHJldHVybjsKKworICAgIGZvciAoY3AgPSBsaXN0OyAqY3A7IGNwKyspCisJZnJlZSgqY3ApOworICAgIGZyZWUobGlzdCk7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgZ2V0X2Rpcmxpc3QoY29uc3QgY2hhciAqZGlybmFtZSwgY2hhcioqKnJldF9hcnJheSkKK3sKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwllcnJjb2RlX3QgcmV0dmFsOworCWNoYXIgKmZuLCAqY3A7CisJY2hhciAqKmFycmF5ID0gMCwgKipuZXdfYXJyYXk7CisJaW50IG1heCA9IDAsIG51bSA9IDA7CisKKwlkaXIgPSBvcGVuZGlyKGRpcm5hbWUpOworCWlmICghZGlyKQorCQlyZXR1cm4gZXJybm87CisKKwl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCWZvciAoY3AgPSBkZS0+ZF9uYW1lOyAqY3A7IGNwKyspIHsKKwkJCWlmICghaXNhbG51bSgqY3ApICYmCisJCQkgICAgKCpjcCAhPSAnLScpICYmCisJCQkgICAgKCpjcCAhPSAnXycpKQorCQkJCWJyZWFrOworCQl9CisJCWlmICgqY3ApCisJCQljb250aW51ZTsKKwkJZm4gPSBtYWxsb2Moc3RybGVuKGRpcm5hbWUpICsgc3RybGVuKGRlLT5kX25hbWUpICsgMik7CisJCWlmICghZm4pIHsKKwkJCXJldHZhbCA9IEVOT01FTTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCXNwcmludGYoZm4sICIlcy8lcyIsIGRpcm5hbWUsIGRlLT5kX25hbWUpOworCQlpZiAoKHN0YXQoZm4sICZzdCkgPCAwKSB8fCAhU19JU1JFRyhzdC5zdF9tb2RlKSkgeworCQkJZnJlZShmbik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobnVtID49IG1heCkgeworCQkJbWF4ICs9IDEwOworCQkJbmV3X2FycmF5ID0gcmVhbGxvYyhhcnJheSwgc2l6ZW9mKGNoYXIgKikgKiAobWF4KzEpKTsKKwkJCWlmICghbmV3X2FycmF5KSB7CisJCQkJcmV0dmFsID0gRU5PTUVNOworCQkJCWZyZWUoZm4pOworCQkJCWdvdG8gZXJyb3V0OworCQkJfQorCQkJYXJyYXkgPSBuZXdfYXJyYXk7CisJCX0KKwkJYXJyYXlbbnVtKytdID0gZm47CisJfQorCWlmIChhcnJheSkgeworCQlxc29ydChhcnJheSwgbnVtLCBzaXplb2YoY2hhciAqKSwgY29tcHN0cik7CisJCWFycmF5W251bSsrXSA9IDA7CisJfQorCSpyZXRfYXJyYXkgPSBhcnJheTsKKwljbG9zZWRpcihkaXIpOworCXJldHVybiAwOworZXJyb3V0OgorCWlmIChhcnJheSkKKwkJYXJyYXlbbnVtXSA9IDA7CisJY2xvc2VkaXIoZGlyKTsKKwlmcmVlX2xpc3QoYXJyYXkpOworCXJldHVybiByZXR2YWw7Cit9CisKK2VycmNvZGVfdAorcHJvZmlsZV9pbml0KGNvbnN0IGNoYXIgKipmaWxlcywgcHJvZmlsZV90ICpyZXRfcHJvZmlsZSkKK3sKKwljb25zdCBjaGFyICoqZnM7CisJcHJvZmlsZV90IHByb2ZpbGU7CisJcHJmX2ZpbGVfdCAgbmV3X2ZpbGUsICpsYXN0OworCWVycmNvZGVfdCByZXR2YWwgPSAwOworCWNoYXIgKipjcHAsICpjcCwgKiphcnJheSA9IDA7CisKKwlwcm9maWxlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgX3Byb2ZpbGVfdCkpOworCWlmICghcHJvZmlsZSkKKwkJcmV0dXJuIEVOT01FTTsKKwltZW1zZXQocHJvZmlsZSwgMCwgc2l6ZW9mKHN0cnVjdCBfcHJvZmlsZV90KSk7CisJcHJvZmlsZS0+bWFnaWMgPSBQUk9GX01BR0lDX1BST0ZJTEU7CisJbGFzdCA9ICZwcm9maWxlLT5maXJzdF9maWxlOworCisgICAgICAgIC8qIGlmIHRoZSBmaWxlbmFtZXMgbGlzdCBpcyBub3Qgc3BlY2lmaWVkIHJldHVybiBhbiBlbXB0eSBwcm9maWxlICovCisgICAgICAgIGlmICggZmlsZXMgKSB7CisJICAgIGZvciAoZnMgPSBmaWxlczsgIVBST0ZJTEVfTEFTVF9GSUxFU1BFQygqZnMpOyBmcysrKSB7CisJCWlmIChhcnJheSkKKwkJCWZyZWVfbGlzdChhcnJheSk7CisJCWFycmF5ID0gTlVMTDsKKwkJcmV0dmFsID0gZ2V0X2Rpcmxpc3QoKmZzLCAmYXJyYXkpOworCQlpZiAocmV0dmFsID09IDApIHsKKwkJCWlmICghYXJyYXkpCisJCQkJY29udGludWU7CisJCQlmb3IgKGNwcCA9IGFycmF5OyAoY3AgPSAqY3BwKTsgY3BwKyspIHsKKwkJCQlyZXR2YWwgPSBwcm9maWxlX29wZW5fZmlsZShjcCwgJm5ld19maWxlKTsKKwkJCQlpZiAocmV0dmFsID09IEVBQ0NFUykKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHJldHZhbCkKKwkJCQkJZ290byBlcnJvdXQ7CisJCQkJKmxhc3QgPSBuZXdfZmlsZTsKKwkJCQlsYXN0ID0gJm5ld19maWxlLT5uZXh0OworCQkJfQorCQl9IGVsc2UgaWYgKChyZXR2YWwgIT0gRU5PVERJUikgJiYKKwkJCSAgIHN0cmNtcCgqZnMsIGRlZmF1bHRfZmlsZW5hbWUpKQorCQkJZ290byBlcnJvdXQ7CisKKwkJcmV0dmFsID0gcHJvZmlsZV9vcGVuX2ZpbGUoKmZzLCAmbmV3X2ZpbGUpOworCQkvKiBpZiB0aGlzIGZpbGUgaXMgbWlzc2luZywgc2tpcCB0byB0aGUgbmV4dCAqLworCQlpZiAocmV0dmFsID09IEVOT0VOVCB8fCByZXR2YWwgPT0gRUFDQ0VTKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJCSpsYXN0ID0gbmV3X2ZpbGU7CisJCWxhc3QgPSAmbmV3X2ZpbGUtPm5leHQ7CisJICAgIH0KKwkgICAgLyoKKwkgICAgICogSWYgYWxsIHRoZSBmaWxlcyB3ZXJlIG5vdCBmb3VuZCwgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBlcnJvci4KKwkgICAgICovCisJICAgIGlmICghcHJvZmlsZS0+Zmlyc3RfZmlsZSkgeworCQlyZXR2YWwgPSBFTk9FTlQ7CisJCWdvdG8gZXJyb3V0OworCSAgICB9CisJfQorCisJZnJlZV9saXN0KGFycmF5KTsKKyAgICAgICAgKnJldF9wcm9maWxlID0gcHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIDA7CitlcnJvdXQ6CisJZnJlZV9saXN0KGFycmF5KTsKKwlwcm9maWxlX3JlbGVhc2UocHJvZmlsZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKwordm9pZAorcHJvZmlsZV9yZWxlYXNlKHByb2ZpbGVfdCBwcm9maWxlKQoreworCXByZl9maWxlX3QJcCwgbmV4dDsKKworCWlmICghcHJvZmlsZSB8fCBwcm9maWxlLT5tYWdpYyAhPSBQUk9GX01BR0lDX1BST0ZJTEUpCisJCXJldHVybjsKKworCWZvciAocCA9IHByb2ZpbGUtPmZpcnN0X2ZpbGU7IHA7IHAgPSBuZXh0KSB7CisJCW5leHQgPSBwLT5uZXh0OworCQlwcm9maWxlX2ZyZWVfZmlsZShwKTsKKwl9CisJcHJvZmlsZS0+bWFnaWMgPSAwOworCWZyZWUocHJvZmlsZSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHZhbHVlIG9mIHRoZSBwc2V1ZG8gZmlsZSAiPGRlZmF1bHQ+Ii4gIElmCisgKiB0aGUgZmlsZSAiPGRlZmF1bHQ+IiBoYWQgcHJldmlvdXNseSBiZWVuIHBhc3NlZCB0byBwcm9maWxlX2luaXQoKSwKKyAqIHRoZW4gZGVmX3N0cmluZyBwYXJhbWV0ZXIgd2lsbCBiZSBwYXJzZWQgYW5kIHVzZWQgYXMgdGhlIHByb2ZpbGUKKyAqIGluZm9ybWF0aW9uIGZvciB0aGUgIjxkZWZhdWx0PiIgZmlsZS4KKyAqLworZXJyY29kZV90IHByb2ZpbGVfc2V0X2RlZmF1bHQocHJvZmlsZV90IHByb2ZpbGUsIGNvbnN0IGNoYXIgKmRlZl9zdHJpbmcpCit7CisJc3RydWN0IHBhcnNlX3N0YXRlCXN0YXRlOworCXByZl9maWxlX3QJCXByZjsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwljb25zdCBjaGFyCQkqaW47CisJY2hhcgkJCSpsaW5lLCAqcCwgKmVuZDsKKwlpbnQJCQlsaW5lX3NpemUsIGxlbjsKKworCWlmICghZGVmX3N0cmluZyB8fCAhcHJvZmlsZSB8fCBwcm9maWxlLT5tYWdpYyAhPSBQUk9GX01BR0lDX1BST0ZJTEUpCisJCXJldHVybiBQUk9GX01BR0lDX1BST0ZJTEU7CisKKwlmb3IgKHByZiA9IHByb2ZpbGUtPmZpcnN0X2ZpbGU7IHByZjsgcHJmID0gcHJmLT5uZXh0KSB7CisJCWlmIChzdHJjbXAocHJmLT5maWxlc3BlYywgZGVmYXVsdF9maWxlbmFtZSkgPT0gMCkKKwkJCWJyZWFrOworCX0KKwlpZiAoIXByZikKKwkJcmV0dXJuIDA7CisKKwlpZiAocHJmLT5yb290KSB7CisJCXByb2ZpbGVfZnJlZV9ub2RlKHByZi0+cm9vdCk7CisJCXByZi0+cm9vdCA9IDA7CisJfQorCisJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCBwYXJzZV9zdGF0ZSkpOworCXJldHZhbCA9IHByb2ZpbGVfY3JlYXRlX25vZGUoIihyb290KSIsIDAsICZzdGF0ZS5yb290X3NlY3Rpb24pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlsaW5lID0gMDsKKwlsaW5lX3NpemUgPSAwOworCWluID0gZGVmX3N0cmluZzsKKwl3aGlsZSAoKmluKSB7CisJCWVuZCA9IHN0cmNocihpbiwgJ1xuJyk7CisJCWxlbiA9IGVuZCA/IChlbmQgLSBpbikgOiAoaW50KSBzdHJsZW4oaW4pOworCQlpZiAobGVuID49IGxpbmVfc2l6ZSkgeworCQkJbGluZV9zaXplID0gbGVuKzE7CisJCQlwID0gcmVhbGxvYyhsaW5lLCBsaW5lX3NpemUpOworCQkJaWYgKCFwKSB7CisJCQkJcmV0dmFsID0gRU5PTUVNOworCQkJCWdvdG8gZXJyb3V0OworCQkJfQorCQkJbGluZSA9IHA7CisJCX0KKwkJbWVtY3B5KGxpbmUsIGluLCBsZW4pOworCQlsaW5lW2xlbl0gPSAwOworCQlyZXR2YWwgPSBwYXJzZV9saW5lKGxpbmUsICZzdGF0ZSk7CisJCWlmIChyZXR2YWwpIHsKKwkJZXJyb3V0OgorCQkJaWYgKHN5bnRheF9lcnJfY2IpCisJCQkJKHN5bnRheF9lcnJfY2IpKHByZi0+ZmlsZXNwZWMsIHJldHZhbCwKKwkJCQkJCXN0YXRlLmxpbmVfbnVtKTsKKwkJCWZyZWUobGluZSk7CisJCQlpZiAocHJmLT5yb290KQorCQkJCXByb2ZpbGVfZnJlZV9ub2RlKHByZi0+cm9vdCk7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCWlmICghZW5kKQorCQkJYnJlYWs7CisJCWluID0gZW5kKzE7CisJfQorCXByZi0+cm9vdCA9IHN0YXRlLnJvb3Rfc2VjdGlvbjsKKwlmcmVlKGxpbmUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBwcm9mX2ZpbGUuYyAtLS0tIHJvdXRpbmVzIHRoYXQgbWFuaXB1bGF0ZSBhbiBpbmRpdmlkdWFsIHByb2ZpbGUgZmlsZS4KKyAqLworCitlcnJjb2RlX3QgcHJvZmlsZV9vcGVuX2ZpbGUoY29uc3QgY2hhciAqIGZpbGVzcGVjLAorCQkJICAgIHByZl9maWxlX3QgKnJldF9wcm9mKQoreworCXByZl9maWxlX3QJcHJmOworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJKmhvbWVfZW52ID0gMDsKKwl1bnNpZ25lZCBpbnQJbGVuOworCWNoYXIJCSpleHBhbmRlZF9maWxlbmFtZTsKKworCXByZiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IF9wcmZfZmlsZV90KSk7CisJaWYgKCFwcmYpCisJCXJldHVybiBFTk9NRU07CisJbWVtc2V0KHByZiwgMCwgc2l6ZW9mKHN0cnVjdCBfcHJmX2ZpbGVfdCkpOworCXByZi0+bWFnaWMgPSBQUk9GX01BR0lDX0ZJTEU7CisKKwlsZW4gPSBzdHJsZW4oZmlsZXNwZWMpKzE7CisJaWYgKGZpbGVzcGVjWzBdID09ICd+JyAmJiBmaWxlc3BlY1sxXSA9PSAnLycpIHsKKwkJaG9tZV9lbnYgPSBnZXRlbnYoIkhPTUUiKTsKKyNpZmRlZiBIQVZFX1BXRF9ICisJCWlmIChob21lX2VudiA9PSBOVUxMKSB7CisjaWZkZWYgSEFWRV9HRVRXVUlEX1IKKwkJICAgIHN0cnVjdCBwYXNzd2QgKnB3LCBwd3g7CisJCSAgICB1aWRfdCB1aWQ7CisJCSAgICBjaGFyIHB3YnVmW0JVRlNJWl07CisKKwkJICAgIHVpZCA9IGdldHVpZCgpOworCQkgICAgaWYgKCFnZXRwd3VpZF9yKHVpZCwgJnB3eCwgcHdidWYsIHNpemVvZihwd2J1ZiksICZwdykKKwkJCSYmIHB3ICE9IE5VTEwgJiYgcHctPnB3X2RpclswXSAhPSAwKQorCQkJaG9tZV9lbnYgPSBwdy0+cHdfZGlyOworI2Vsc2UKKwkJICAgIHN0cnVjdCBwYXNzd2QgKnB3OworCisJCSAgICBwdyA9IGdldHB3dWlkKGdldHVpZCgpKTsKKwkJICAgIGhvbWVfZW52ID0gcHctPnB3X2RpcjsKKyNlbmRpZgorCQl9CisjZW5kaWYKKwkJaWYgKGhvbWVfZW52KQorCQkJbGVuICs9IHN0cmxlbihob21lX2Vudik7CisJfQorCWV4cGFuZGVkX2ZpbGVuYW1lID0gbWFsbG9jKGxlbik7CisJaWYgKGV4cGFuZGVkX2ZpbGVuYW1lID09IDApIHsKKwkgICAgcHJvZmlsZV9mcmVlX2ZpbGUocHJmKTsKKwkgICAgcmV0dXJuIGVycm5vOworCX0KKwlpZiAoaG9tZV9lbnYpIHsKKwkgICAgc3RyY3B5KGV4cGFuZGVkX2ZpbGVuYW1lLCBob21lX2Vudik7CisJICAgIHN0cmNhdChleHBhbmRlZF9maWxlbmFtZSwgZmlsZXNwZWMrMSk7CisJfSBlbHNlCisJICAgIG1lbWNweShleHBhbmRlZF9maWxlbmFtZSwgZmlsZXNwZWMsIGxlbik7CisKKwlwcmYtPmZpbGVzcGVjID0gZXhwYW5kZWRfZmlsZW5hbWU7CisKKwlpZiAoc3RyY21wKHByZi0+ZmlsZXNwZWMsIGRlZmF1bHRfZmlsZW5hbWUpICE9IDApIHsKKwkJcmV0dmFsID0gcHJvZmlsZV91cGRhdGVfZmlsZShwcmYpOworCQlpZiAocmV0dmFsKSB7CisJCQlwcm9maWxlX2ZyZWVfZmlsZShwcmYpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCX0KKworCSpyZXRfcHJvZiA9IHByZjsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IHByb2ZpbGVfdXBkYXRlX2ZpbGUocHJmX2ZpbGVfdCBwcmYpCit7CisJZXJyY29kZV90IHJldHZhbDsKKyNpZmRlZiBIQVZFX1NUQVQKKwlzdHJ1Y3Qgc3RhdCBzdDsKKyNpZmRlZiBTVEFUX09OQ0VfUEVSX1NFQ09ORAorCXRpbWVfdCBub3c7CisjZW5kaWYKKyNlbmRpZgorCUZJTEUgKmY7CisJY2hhciBidWZbMjA0OF07CisJc3RydWN0IHBhcnNlX3N0YXRlIHN0YXRlOworCisJaWYgKHByZi0+ZmxhZ3MgJiBQUk9GSUxFX0ZJTEVfTk9fUkVMT0FEKQorCQlyZXR1cm4gMDsKKworI2lmZGVmIEhBVkVfU1RBVAorI2lmZGVmIFNUQVRfT05DRV9QRVJfU0VDT05ECisJbm93ID0gdGltZSgwKTsKKwlpZiAobm93ID09IHByZi0+bGFzdF9zdGF0ICYmIHByZi0+cm9vdCAhPSBOVUxMKSB7CisJICAgIHJldHVybiAwOworCX0KKyNlbmRpZgorCWlmIChzdGF0KHByZi0+ZmlsZXNwZWMsICZzdCkpIHsKKwkgICAgcmV0dmFsID0gZXJybm87CisJICAgIHJldHVybiByZXR2YWw7CisJfQorI2lmZGVmIFNUQVRfT05DRV9QRVJfU0VDT05ECisJcHJmLT5sYXN0X3N0YXQgPSBub3c7CisjZW5kaWYKKwlpZiAoc3Quc3RfbXRpbWUgPT0gcHJmLT50aW1lc3RhbXAgJiYgcHJmLT5yb290ICE9IE5VTEwpIHsKKwkgICAgcmV0dXJuIDA7CisJfQorCWlmIChwcmYtPnJvb3QpIHsKKwkJcHJvZmlsZV9mcmVlX25vZGUocHJmLT5yb290KTsKKwkJcHJmLT5yb290ID0gMDsKKwl9CisjZWxzZQorCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgc3RhdCgpIGNhbGwsIGFzc3VtZSB0aGF0IG91ciBpbi1jb3JlCisJICogbWVtb3J5IGltYWdlIGlzIGNvcnJlY3QuICBUaGF0IGlzLCB3ZSB3b24ndCByZXJlYWQgdGhlCisJICogcHJvZmlsZSBmaWxlIGlmIGl0IGNoYW5nZXMuCisJICovCisJaWYgKHByZi0+cm9vdCkgeworCSAgICByZXR1cm4gMDsKKwl9CisjZW5kaWYKKwltZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RydWN0IHBhcnNlX3N0YXRlKSk7CisJcmV0dmFsID0gcHJvZmlsZV9jcmVhdGVfbm9kZSgiKHJvb3QpIiwgMCwgJnN0YXRlLnJvb3Rfc2VjdGlvbik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwllcnJubyA9IDA7CisJZiA9IGZvcGVuKHByZi0+ZmlsZXNwZWMsICJyIik7CisJaWYgKGYgPT0gTlVMTCkgeworCQlyZXR2YWwgPSBlcnJubzsKKwkJaWYgKHJldHZhbCA9PSAwKQorCQkJcmV0dmFsID0gRU5PRU5UOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlwcmYtPnVwZF9zZXJpYWwrKzsKKwl3aGlsZSAoIWZlb2YoZikpIHsKKwkJaWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpID09IE5VTEwpCisJCQlicmVhazsKKwkJcmV0dmFsID0gcGFyc2VfbGluZShidWYsICZzdGF0ZSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWlmIChzeW50YXhfZXJyX2NiKQorCQkJCShzeW50YXhfZXJyX2NiKShwcmYtPmZpbGVzcGVjLCByZXR2YWwsCisJCQkJCQlzdGF0ZS5saW5lX251bSk7CisJCQlmY2xvc2UoZik7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJfQorCXByZi0+cm9vdCA9IHN0YXRlLnJvb3Rfc2VjdGlvbjsKKworCWZjbG9zZShmKTsKKworI2lmZGVmIEhBVkVfU1RBVAorCXByZi0+dGltZXN0YW1wID0gc3Quc3RfbXRpbWU7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwcm9maWxlX2ZyZWVfZmlsZShwcmZfZmlsZV90IHByZikKK3sKKyAgICBpZiAocHJmLT5yb290KQorCXByb2ZpbGVfZnJlZV9ub2RlKHByZi0+cm9vdCk7CisgICAgZnJlZShwcmYtPmZpbGVzcGVjKTsKKyAgICBmcmVlKHByZik7Cit9CisKKy8qIEJlZ2luIHRoZSBwcm9maWxlIHBhcnNlciAqLworCitwcm9maWxlX3N5bnRheF9lcnJfY2JfdCBwcm9maWxlX3NldF9zeW50YXhfZXJyX2NiKHByb2ZpbGVfc3ludGF4X2Vycl9jYl90IGhvb2spCit7CisJcHJvZmlsZV9zeW50YXhfZXJyX2NiX3QJb2xkOworCisJb2xkID0gc3ludGF4X2Vycl9jYjsKKwlzeW50YXhfZXJyX2NiID0gaG9vazsKKwlyZXR1cm4ob2xkKTsKK30KKworI2RlZmluZSBTVEFURV9JTklUX0NPTU1FTlQJMAorI2RlZmluZSBTVEFURV9TVERfTElORQkJMQorI2RlZmluZSBTVEFURV9HRVRfT0JSQUNFCTIKKworc3RhdGljIGNoYXIgKnNraXBfb3Zlcl9ibGFua3MoY2hhciAqY3ApCit7CisJd2hpbGUgKCpjcCAmJiBpc3NwYWNlKChpbnQpICgqY3ApKSkKKwkJY3ArKzsKKwlyZXR1cm4gY3A7Cit9CisKK3N0YXRpYyBpbnQgZW5kX29yX2NvbW1lbnQoY2hhciBjaCkKK3sKKwlyZXR1cm4gKGNoID09IDAgfHwgY2ggPT0gJyMnIHx8IGNoID09ICc7Jyk7Cit9CisKK3N0YXRpYyBjaGFyICpza2lwX292ZXJfbm9uYmxhbmtzKGNoYXIgKmNwKQoreworCXdoaWxlICghZW5kX29yX2NvbW1lbnQoKmNwKSAmJiAhaXNzcGFjZSgqY3ApKQorCQljcCsrOworCXJldHVybiBjcDsKK30KKworc3RhdGljIHZvaWQgc3RyaXBfbGluZShjaGFyICpsaW5lKQoreworCWNoYXIgKnAgPSBsaW5lICsgc3RybGVuKGxpbmUpOworCXdoaWxlIChwID4gbGluZSAmJiAocFstMV0gPT0gJ1xuJyB8fCBwWy0xXSA9PSAnXHInKSkKKwkgICAgKnAtLSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3F1b3RlZF9zdHJpbmcoY2hhciAqc3RyKQoreworCWNoYXIgKnRvLCAqZnJvbTsKKworCXRvID0gZnJvbSA9IHN0cjsKKworCWZvciAodG8gPSBmcm9tID0gc3RyOyAqZnJvbSAmJiAqZnJvbSAhPSAnIic7IHRvKyssIGZyb20rKykgeworCQlpZiAoKmZyb20gPT0gJ1xcJykgeworCQkJZnJvbSsrOworCQkJc3dpdGNoICgqZnJvbSkgeworCQkJY2FzZSAnbic6CisJCQkJKnRvID0gJ1xuJzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3QnOgorCQkJCSp0byA9ICdcdCc7CisJCQkJYnJlYWs7CisJCQljYXNlICdiJzoKKwkJCQkqdG8gPSAnXGInOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkqdG8gPSAqZnJvbTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCSp0byA9ICpmcm9tOworCX0KKwkqdG8gPSAnXDAnOworfQorCitzdGF0aWMgZXJyY29kZV90IHBhcnNlX2xpbmUoY2hhciAqbGluZSwgc3RydWN0IHBhcnNlX3N0YXRlICpzdGF0ZSkKK3sKKwljaGFyCSpjcCwgY2gsICp0YWcsICp2YWx1ZTsKKwljaGFyCSpwOworCWVycmNvZGVfdCByZXR2YWw7CisJc3RydWN0IHByb2ZpbGVfbm9kZQkqbm9kZTsKKwlpbnQgZG9fc3Vic2VjdGlvbiA9IDA7CisJdm9pZCAqaXRlciA9IDA7CisKKwlzdGF0ZS0+bGluZV9udW0rKzsKKwlpZiAoc3RhdGUtPnN0YXRlID09IFNUQVRFX0dFVF9PQlJBQ0UpIHsKKwkJY3AgPSBza2lwX292ZXJfYmxhbmtzKGxpbmUpOworCQlpZiAoKmNwICE9ICd7JykKKwkJCXJldHVybiBQUk9GX01JU1NJTkdfT0JSQUNFOworCQlzdGF0ZS0+c3RhdGUgPSBTVEFURV9TVERfTElORTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChzdGF0ZS0+c3RhdGUgPT0gU1RBVEVfSU5JVF9DT01NRU5UKSB7CisJCWlmIChsaW5lWzBdICE9ICdbJykKKwkJCXJldHVybiAwOworCQlzdGF0ZS0+c3RhdGUgPSBTVEFURV9TVERfTElORTsKKwl9CisKKwlpZiAoKmxpbmUgPT0gMCkKKwkJcmV0dXJuIDA7CisJc3RyaXBfbGluZShsaW5lKTsKKwljcCA9IHNraXBfb3Zlcl9ibGFua3MobGluZSk7CisJY2ggPSAqY3A7CisJaWYgKGVuZF9vcl9jb21tZW50KGNoKSkKKwkJcmV0dXJuIDA7CisJaWYgKGNoID09ICdbJykgeworCQlpZiAoc3RhdGUtPmdyb3VwX2xldmVsID4gMCkKKwkJCXJldHVybiBQUk9GX1NFQ1RJT05fTk9UT1A7CisJCWNwKys7CisJCWNwID0gc2tpcF9vdmVyX2JsYW5rcyhjcCk7CisJCXAgPSBzdHJjaHIoY3AsICddJyk7CisJCWlmIChwID09IE5VTEwpCisJCQlyZXR1cm4gUFJPRl9TRUNUSU9OX1NZTlRBWDsKKwkJaWYgKCpjcCA9PSAnIicpIHsKKwkJCWNwKys7CisJCQlwYXJzZV9xdW90ZWRfc3RyaW5nKGNwKTsKKwkJfSBlbHNlIHsKKwkJCSpwLS0gPSAnXDAnOworCQkJd2hpbGUgKGlzc3BhY2UoKnApICYmIChwID4gY3ApKQorCQkJCSpwLS0gPSAnXDAnOworCQkJaWYgKCpjcCA9PSAwKQorCQkJCXJldHVybiBQUk9GX1NFQ1RJT05fU1lOVEFYOworCQl9CisJCXJldHZhbCA9IHByb2ZpbGVfZmluZF9ub2RlKHN0YXRlLT5yb290X3NlY3Rpb24sIGNwLCAwLCAxLAorCQkJCQkgICAmaXRlciwgJnN0YXRlLT5jdXJyZW50X3NlY3Rpb24pOworCQlpZiAocmV0dmFsID09IFBST0ZfTk9fU0VDVElPTikgeworCQkJcmV0dmFsID0gcHJvZmlsZV9hZGRfbm9kZShzdGF0ZS0+cm9vdF9zZWN0aW9uLAorCQkJCQkJICBjcCwgMCwKKwkJCQkJCSAgJnN0YXRlLT5jdXJyZW50X3NlY3Rpb24pOworCQkJaWYgKHJldHZhbCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQl9IGVsc2UgaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisKKwkJLyoKKwkJICogRmluaXNoIG9mZiB0aGUgcmVzdCBvZiB0aGUgbGluZS4KKwkJICovCisJCWNwID0gcCsxOworCQlpZiAoKmNwID09ICcqJykgeworCQkJc3RhdGUtPmN1cnJlbnRfc2VjdGlvbi0+ZmluYWwgPSAxOworCQkJY3ArKzsKKwkJfQorCQkvKgorCQkgKiBTcGFjZXMgb3IgY29tbWVudHMgYWZ0ZXIgJ10nIHNob3VsZCBub3QgYmUgZmF0YWwKKwkJICovCisJCWNwID0gc2tpcF9vdmVyX2JsYW5rcyhjcCk7CisJCWlmICghZW5kX29yX2NvbW1lbnQoKmNwKSkKKwkJCXJldHVybiBQUk9GX1NFQ1RJT05fU1lOVEFYOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGNoID09ICd9JykgeworCQlpZiAoc3RhdGUtPmdyb3VwX2xldmVsID09IDApCisJCQlyZXR1cm4gUFJPRl9FWFRSQV9DQlJBQ0U7CisJCWlmICgqKGNwKzEpID09ICcqJykKKwkJCXN0YXRlLT5jdXJyZW50X3NlY3Rpb24tPmZpbmFsID0gMTsKKwkJc3RhdGUtPmN1cnJlbnRfc2VjdGlvbiA9IHN0YXRlLT5jdXJyZW50X3NlY3Rpb24tPnBhcmVudDsKKwkJc3RhdGUtPmdyb3VwX2xldmVsLS07CisJCXJldHVybiAwOworCX0KKwkvKgorCSAqIFBhcnNlIHRoZSByZWxhdGlvbnMKKwkgKi8KKwl0YWcgPSBjcDsKKwljcCA9IHN0cmNocihjcCwgJz0nKTsKKwlpZiAoIWNwKQorCQlyZXR1cm4gUFJPRl9SRUxBVElPTl9TWU5UQVg7CisJaWYgKGNwID09IHRhZykKKwkgICAgcmV0dXJuIFBST0ZfUkVMQVRJT05fU1lOVEFYOworCSpjcCA9ICdcMCc7CisJaWYgKCp0YWcgPT0gJyInKSB7CisJCXRhZysrOworCQlwYXJzZV9xdW90ZWRfc3RyaW5nKHRhZyk7CisJfSBlbHNlIHsKKwkJLyogTG9vayBmb3Igd2hpdGVzcGFjZSBvbiBsZWZ0LWhhbmQgc2lkZS4gICovCisJCXAgPSBza2lwX292ZXJfbm9uYmxhbmtzKHRhZyk7CisJCWlmICgqcCkKKwkJCSpwKysgPSAwOworCQlwID0gc2tpcF9vdmVyX2JsYW5rcyhwKTsKKwkJLyogSWYgd2UgaGF2ZSBtb3JlIG5vbi13aGl0ZXNwYWNlLCBpdCdzIGFuIGVycm9yLiAgKi8KKwkJaWYgKCpwKQorCQkJcmV0dXJuIFBST0ZfUkVMQVRJT05fU1lOVEFYOworCX0KKworCWNwID0gc2tpcF9vdmVyX2JsYW5rcyhjcCsxKTsKKwl2YWx1ZSA9IGNwOworCWNoID0gdmFsdWVbMF07CisJaWYgKGNoID09ICciJykgeworCQl2YWx1ZSsrOworCQlwYXJzZV9xdW90ZWRfc3RyaW5nKHZhbHVlKTsKKwl9IGVsc2UgaWYgKGVuZF9vcl9jb21tZW50KGNoKSkgeworCQlkb19zdWJzZWN0aW9uKys7CisJCXN0YXRlLT5zdGF0ZSA9IFNUQVRFX0dFVF9PQlJBQ0U7CisJfSBlbHNlIGlmICh2YWx1ZVswXSA9PSAneycpIHsKKwkJY3AgPSBza2lwX292ZXJfYmxhbmtzKHZhbHVlKzEpOworCQljaCA9ICpjcDsKKwkJaWYgKGVuZF9vcl9jb21tZW50KGNoKSkKKwkJCWRvX3N1YnNlY3Rpb24rKzsKKwkJZWxzZQorCQkJcmV0dXJuIFBST0ZfUkVMQVRJT05fU1lOVEFYOworCX0gZWxzZSB7CisJCWNwID0gc2tpcF9vdmVyX25vbmJsYW5rcyh2YWx1ZSk7CisJCXAgPSBza2lwX292ZXJfYmxhbmtzKGNwKTsKKwkJY2ggPSAqcDsKKwkJKmNwID0gMDsKKwkJaWYgKCFlbmRfb3JfY29tbWVudChjaCkpCisJCQlyZXR1cm4gUFJPRl9SRUxBVElPTl9TWU5UQVg7CisJfQorCWlmIChkb19zdWJzZWN0aW9uKSB7CisJCXAgPSBzdHJjaHIodGFnLCAnKicpOworCQlpZiAocCkKKwkJCSpwID0gJ1wwJzsKKwkJcmV0dmFsID0gcHJvZmlsZV9hZGRfbm9kZShzdGF0ZS0+Y3VycmVudF9zZWN0aW9uLAorCQkJCQkgIHRhZywgMCwgJnN0YXRlLT5jdXJyZW50X3NlY3Rpb24pOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJaWYgKHApCisJCQlzdGF0ZS0+Y3VycmVudF9zZWN0aW9uLT5maW5hbCA9IDE7CisJCXN0YXRlLT5ncm91cF9sZXZlbCsrOworCQlyZXR1cm4gMDsKKwl9CisJcCA9IHN0cmNocih0YWcsICcqJyk7CisJaWYgKHApCisJCSpwID0gJ1wwJzsKKwlwcm9maWxlX2FkZF9ub2RlKHN0YXRlLT5jdXJyZW50X3NlY3Rpb24sIHRhZywgdmFsdWUsICZub2RlKTsKKwlpZiAocCkKKwkJbm9kZS0+ZmluYWwgPSAxOworCXJldHVybiAwOworfQorCisjaWZkZWYgREVCVUdfUFJPR1JBTQorLyoKKyAqIFJldHVybiBUUlVFIGlmIHRoZSBzdHJpbmcgYmVnaW5zIG9yIGVuZHMgd2l0aCB3aGl0ZXNwYWNlCisgKi8KK3N0YXRpYyBpbnQgbmVlZF9kb3VibGVfcXVvdGVzKGNoYXIgKnN0cikKK3sKKwlpZiAoIXN0ciB8fCAhKnN0cikKKwkJcmV0dXJuIDA7CisJaWYgKGlzc3BhY2UoKGludCkgKCpzdHIpKSB8fGlzc3BhY2UoKGludCkgKCooc3RyICsgc3RybGVuKHN0cikgLSAxKSkpKQorCQlyZXR1cm4gMTsKKwlpZiAoc3RyY2hyKHN0ciwgJ1xuJykgfHwgc3RyY2hyKHN0ciwgJ1x0JykgfHwgc3RyY2hyKHN0ciwgJ1xiJykgfHwKKwkgICAgc3RyY2hyKHN0ciwgJyAnKSB8fCBzdHJjaHIoc3RyLCAnIycpIHx8IHN0cmNocihzdHIsICc7JykpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgorICogT3V0cHV0IGEgc3RyaW5nIHdpdGggZG91YmxlIHF1b3RlcywgZG9pbmcgYXBwcm9wcmlhdGUgYmFja3F1b3RpbmcKKyAqIG9mIGNoYXJhY3RlcnMgYXMgbmVjZXNzYXJ5LgorICovCitzdGF0aWMgdm9pZCBvdXRwdXRfcXVvdGVkX3N0cmluZyhjaGFyICpzdHIsIHZvaWQgKCpjYikoY29uc3QgY2hhciAqLHZvaWQgKiksCisJCQkJIHZvaWQgKmRhdGEpCit7CisJY2hhcgljaDsKKwljaGFyIGJ1ZlsyXTsKKworCWNiKCJcIiIsIGRhdGEpOworCWlmICghc3RyKSB7CisJCWNiKCJcIiIsIGRhdGEpOworCQlyZXR1cm47CisJfQorCWJ1ZlsxXSA9IDA7CisJd2hpbGUgKChjaCA9ICpzdHIrKykpIHsKKwkJc3dpdGNoIChjaCkgeworCQljYXNlICdcXCc6CisJCQljYigiXFxcXCIsIGRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgJ1xuJzoKKwkJCWNiKCJcXG4iLCBkYXRhKTsKKwkJCWJyZWFrOworCQljYXNlICdcdCc6CisJCQljYigiXFx0IiwgZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSAnXGInOgorCQkJY2IoIlxcYiIsIGRhdGEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBUaGlzIHdvdWxkIGJlIGEgbG90IGZhc3RlciBpZiB3ZSBzY2FubmVkCisJCQkgICBmb3J3YXJkIGZvciB0aGUgbmV4dCAiaW50ZXJlc3RpbmciCisJCQkgICBjaGFyYWN0ZXIuICAqLworCQkJYnVmWzBdID0gY2g7CisJCQljYihidWYsIGRhdGEpOworCQkJYnJlYWs7CisJCX0KKwl9CisJY2IoIlwiIiwgZGF0YSk7Cit9CisKKyNpZm5kZWYgRU9MCisjZGVmaW5lIEVPTCAiXG4iCisjZW5kaWYKKworLyogRXJyb3JzIHNob3VsZCBiZSByZXR1cm5lZCwgbm90IGlnbm9yZWQhICAqLworc3RhdGljIHZvaWQgZHVtcF9wcm9maWxlKHN0cnVjdCBwcm9maWxlX25vZGUgKnJvb3QsIGludCBsZXZlbCwKKwkJCSB2b2lkICgqY2IpKGNvbnN0IGNoYXIgKiwgdm9pZCAqKSwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcHJvZmlsZV9ub2RlICpwOworCXZvaWQgKml0ZXI7CisJbG9uZyByZXR2YWw7CisKKwlpdGVyID0gMDsKKwlkbyB7CisJCXJldHZhbCA9IHByb2ZpbGVfZmluZF9ub2RlKHJvb3QsIDAsIDAsIDAsICZpdGVyLCAmcCk7CisJCWlmIChyZXR2YWwpCisJCQlicmVhazsKKwkJZm9yIChpPTA7IGkgPCBsZXZlbDsgaSsrKQorCQkJY2IoIlx0IiwgZGF0YSk7CisJCWlmIChuZWVkX2RvdWJsZV9xdW90ZXMocC0+bmFtZSkpCisJCQlvdXRwdXRfcXVvdGVkX3N0cmluZyhwLT5uYW1lLCBjYiwgZGF0YSk7CisJCWVsc2UKKwkJCWNiKHAtPm5hbWUsIGRhdGEpOworCQljYigiID0gIiwgZGF0YSk7CisJCWlmIChuZWVkX2RvdWJsZV9xdW90ZXMocC0+dmFsdWUpKQorCQkJb3V0cHV0X3F1b3RlZF9zdHJpbmcocC0+dmFsdWUsIGNiLCBkYXRhKTsKKwkJZWxzZQorCQkJY2IocC0+dmFsdWUsIGRhdGEpOworCQljYihFT0wsIGRhdGEpOworCX0gd2hpbGUgKGl0ZXIgIT0gMCk7CisKKwlpdGVyID0gMDsKKwlkbyB7CisJCXJldHZhbCA9IHByb2ZpbGVfZmluZF9ub2RlKHJvb3QsIDAsIDAsIDEsICZpdGVyLCAmcCk7CisJCWlmIChyZXR2YWwpCisJCQlicmVhazsKKwkJaWYgKGxldmVsID09IDApCXsgLyogW3h4eF0gKi8KKwkJCWNiKCJbIiwgZGF0YSk7CisJCQlpZiAobmVlZF9kb3VibGVfcXVvdGVzKHAtPm5hbWUpKQorCQkJCW91dHB1dF9xdW90ZWRfc3RyaW5nKHAtPm5hbWUsIGNiLCBkYXRhKTsKKwkJCWVsc2UKKwkJCQljYihwLT5uYW1lLCBkYXRhKTsKKwkJCWNiKCJdIiwgZGF0YSk7CisJCQljYihwLT5maW5hbCA/ICIqIiA6ICIiLCBkYXRhKTsKKwkJCWNiKEVPTCwgZGF0YSk7CisJCQlkdW1wX3Byb2ZpbGUocCwgbGV2ZWwrMSwgY2IsIGRhdGEpOworCQkJY2IoRU9MLCBkYXRhKTsKKwkJfSBlbHNlIHsgCS8qIHh4eCA9IHsgLi4uIH0gKi8KKwkJCWZvciAoaT0wOyBpIDwgbGV2ZWw7IGkrKykKKwkJCQljYigiXHQiLCBkYXRhKTsKKwkJCWlmIChuZWVkX2RvdWJsZV9xdW90ZXMocC0+bmFtZSkpCisJCQkJb3V0cHV0X3F1b3RlZF9zdHJpbmcocC0+bmFtZSwgY2IsIGRhdGEpOworCQkJZWxzZQorCQkJCWNiKHAtPm5hbWUsIGRhdGEpOworCQkJY2IoIiA9IHsiLCBkYXRhKTsKKwkJCWNiKEVPTCwgZGF0YSk7CisJCQlkdW1wX3Byb2ZpbGUocCwgbGV2ZWwrMSwgY2IsIGRhdGEpOworCQkJZm9yIChpPTA7IGkgPCBsZXZlbDsgaSsrKQorCQkJCWNiKCJcdCIsIGRhdGEpOworCQkJY2IoIn0iLCBkYXRhKTsKKwkJCWNiKHAtPmZpbmFsID8gIioiIDogIiIsIGRhdGEpOworCQkJY2IoRU9MLCBkYXRhKTsKKwkJfQorCX0gd2hpbGUgKGl0ZXIgIT0gMCk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfcHJvZmlsZV90b19maWxlX2NiKGNvbnN0IGNoYXIgKnN0ciwgdm9pZCAqZGF0YSkKK3sKKwlmcHV0cyhzdHIsIGRhdGEpOworfQorCitlcnJjb2RlX3QgcHJvZmlsZV93cml0ZV90cmVlX2ZpbGUoc3RydWN0IHByb2ZpbGVfbm9kZSAqcm9vdCwgRklMRSAqZHN0ZmlsZSkKK3sKKwlkdW1wX3Byb2ZpbGUocm9vdCwgMCwgZHVtcF9wcm9maWxlX3RvX2ZpbGVfY2IsIGRzdGZpbGUpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcHJvZl9idWYgeworCWNoYXIgKmJhc2U7CisJc2l6ZV90IGN1ciwgbWF4OworCWludCBlcnI7Cit9OworCitzdGF0aWMgdm9pZCBhZGRfZGF0YV90b19idWZmZXIoc3RydWN0IHByb2ZfYnVmICpiLCBjb25zdCB2b2lkICpkLCBzaXplX3QgbGVuKQoreworCWlmIChiLT5lcnIpCisJCXJldHVybjsKKwlpZiAoYi0+bWF4IC0gYi0+Y3VyIDwgbGVuKSB7CisJCXNpemVfdCBuZXdzaXplOworCQljaGFyICpuZXdwdHI7CisKKwkJbmV3c2l6ZSA9IGItPm1heCArIChiLT5tYXggPj4gMSkgKyBsZW4gKyAxMDI0OworCQluZXdwdHIgPSByZWFsbG9jKGItPmJhc2UsIG5ld3NpemUpOworCQlpZiAobmV3cHRyID09IE5VTEwpIHsKKwkJCWItPmVyciA9IDE7CisJCQlyZXR1cm47CisJCX0KKwkJYi0+YmFzZSA9IG5ld3B0cjsKKwkJYi0+bWF4ID0gbmV3c2l6ZTsKKwl9CisJbWVtY3B5KGItPmJhc2UgKyBiLT5jdXIsIGQsIGxlbik7CisJYi0+Y3VyICs9IGxlbjsgCQkvKiBpZ25vcmUgb3ZlcmZsb3cgKi8KK30KKworc3RhdGljIHZvaWQgZHVtcF9wcm9maWxlX3RvX2J1ZmZlcl9jYihjb25zdCBjaGFyICpzdHIsIHZvaWQgKmRhdGEpCit7CisJYWRkX2RhdGFfdG9fYnVmZmVyKChzdHJ1Y3QgcHJvZl9idWYgKilkYXRhLCBzdHIsIHN0cmxlbihzdHIpKTsKK30KKworZXJyY29kZV90IHByb2ZpbGVfd3JpdGVfdHJlZV90b19idWZmZXIoc3RydWN0IHByb2ZpbGVfbm9kZSAqcm9vdCwKKwkJCQkgICAgICAgY2hhciAqKmJ1ZikKK3sKKwlzdHJ1Y3QgcHJvZl9idWYgcHJvZl9idWYgPSB7IDAsIDAsIDAsIDAgfTsKKworCWR1bXBfcHJvZmlsZShyb290LCAwLCBkdW1wX3Byb2ZpbGVfdG9fYnVmZmVyX2NiLCAmcHJvZl9idWYpOworCWlmIChwcm9mX2J1Zi5lcnIpIHsKKwkJKmJ1ZiA9IE5VTEw7CisJCXJldHVybiBFTk9NRU07CisJfQorCWFkZF9kYXRhX3RvX2J1ZmZlcigmcHJvZl9idWYsICIiLCAxKTsgLyogYXBwZW5kIG51bCAqLworCWlmIChwcm9mX2J1Zi5tYXggLSBwcm9mX2J1Zi5jdXIgPiAocHJvZl9idWYubWF4ID4+IDMpKSB7CisJCWNoYXIgKm5ld3B0ciA9IHJlYWxsb2MocHJvZl9idWYuYmFzZSwgcHJvZl9idWYuY3VyKTsKKwkJaWYgKG5ld3B0cikKKwkJCXByb2ZfYnVmLmJhc2UgPSBuZXdwdHI7CisJfQorCSpidWYgPSBwcm9mX2J1Zi5iYXNlOworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qCisgKiBwcm9mX3RyZWUuYyAtLS0gdGhlc2Ugcm91dGluZXMgbWFpbnRhaW4gdGhlIHBhcnNlIHRyZWUgb2YgdGhlCisgKiAJY29uZmlnIGZpbGUuCisgKgorICogQWxsIG9mIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGUgdHJlZSBpcyBzdG9yZWQgaXMgYWJzdHJhY3RlZCBhd2F5IGluCisgKiB0aGlzIGZpbGU7IGFsbCBvZiB0aGUgb3RoZXIgcHJvZmlsZSByb3V0aW5lcyBidWlsZCwgYWNjZXNzLCBhbmQKKyAqIG1vZGlmeSB0aGUgdHJlZSB2aWEgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyBmb3VuZCBpbiB0aGlzIGZpbGUuCisgKgorICogRWFjaCBub2RlIG1heSByZXByZXNlbnQgZWl0aGVyIGEgcmVsYXRpb24gb3IgYSBzZWN0aW9uIGhlYWRlci4KKyAqCisgKiBBIHNlY3Rpb24gaGVhZGVyIG11c3QgaGF2ZSBpdHMgdmFsdWUgZmllbGQgc2V0IHRvIDAsIGFuZCBtYXkgYSBvbmUKKyAqIG9yIG1vcmUgY2hpbGQgbm9kZXMsIHBvaW50ZWQgdG8gYnkgZmlyc3RfY2hpbGQuCisgKgorICogQSByZWxhdGlvbiBoYXMgYXMgaXRzIHZhbHVlIGEgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5CisgKiBjb250YWluaW5nIGEgc3RyaW5nLiAgSXRzIGZpcnN0X2NoaWxkIHBvaW50ZXIgbXVzdCBiZSBudWxsLgorICoKKyAqLworCisvKgorICogRnJlZSBhIG5vZGUsIGFuZCBhbnkgY2hpbGRyZW4KKyAqLwordm9pZCBwcm9maWxlX2ZyZWVfbm9kZShzdHJ1Y3QgcHJvZmlsZV9ub2RlICpub2RlKQoreworCXN0cnVjdCBwcm9maWxlX25vZGUgKmNoaWxkLCAqbmV4dDsKKworCWlmIChub2RlLT5tYWdpYyAhPSBQUk9GX01BR0lDX05PREUpCisJCXJldHVybjsKKworCWZyZWUobm9kZS0+bmFtZSk7CisJZnJlZShub2RlLT52YWx1ZSk7CisKKwlmb3IgKGNoaWxkPW5vZGUtPmZpcnN0X2NoaWxkOyBjaGlsZDsgY2hpbGQgPSBuZXh0KSB7CisJCW5leHQgPSBjaGlsZC0+bmV4dDsKKwkJcHJvZmlsZV9mcmVlX25vZGUoY2hpbGQpOworCX0KKwlub2RlLT5tYWdpYyA9IDA7CisKKwlmcmVlKG5vZGUpOworfQorCisjaWZuZGVmIEhBVkVfU1RSRFVQCisjdW5kZWYgc3RyZHVwCisjZGVmaW5lIHN0cmR1cCBNWXN0cmR1cAorc3RhdGljIGNoYXIgKk1Zc3RyZHVwIChjb25zdCBjaGFyICpzKQoreworICAgIHNpemVfdCBzeiA9IHN0cmxlbihzKSArIDE7CisgICAgY2hhciAqcCA9IG1hbGxvYyhzeik7CisgICAgaWYgKHAgIT0gMCkKKwltZW1jcHkocCwgcywgc3opOworICAgIHJldHVybiBwOworfQorI2VuZGlmCisKKy8qCisgKiBDcmVhdGUgYSBub2RlCisgKi8KK2VycmNvZGVfdCBwcm9maWxlX2NyZWF0ZV9ub2RlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkJICAgICAgc3RydWN0IHByb2ZpbGVfbm9kZSAqKnJldF9ub2RlKQoreworCXN0cnVjdCBwcm9maWxlX25vZGUgKm5ldzsKKworCW5ldyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHByb2ZpbGVfbm9kZSkpOworCWlmICghbmV3KQorCQlyZXR1cm4gRU5PTUVNOworCW1lbXNldChuZXcsIDAsIHNpemVvZihzdHJ1Y3QgcHJvZmlsZV9ub2RlKSk7CisJbmV3LT5uYW1lID0gc3RyZHVwKG5hbWUpOworCWlmIChuZXctPm5hbWUgPT0gMCkgeworCSAgICBwcm9maWxlX2ZyZWVfbm9kZShuZXcpOworCSAgICByZXR1cm4gRU5PTUVNOworCX0KKwlpZiAodmFsdWUpIHsKKwkJbmV3LT52YWx1ZSA9IHN0cmR1cCh2YWx1ZSk7CisJCWlmIChuZXctPnZhbHVlID09IDApIHsKKwkJICAgIHByb2ZpbGVfZnJlZV9ub2RlKG5ldyk7CisJCSAgICByZXR1cm4gRU5PTUVNOworCQl9CisJfQorCW5ldy0+bWFnaWMgPSBQUk9GX01BR0lDX05PREU7CisKKwkqcmV0X25vZGUgPSBuZXc7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIHRoYXQgYWxsIG9mIHRoZSByZXByZXNlbnRhdGlvbiBpbnZhcmllbnRzIG9mCisgKiB0aGUgcHJvZmlsZSBhcmUgdHJ1ZS4gIElmIG5vdCwgd2UgaGF2ZSBhIHByb2dyYW1taW5nIGJ1ZyBzb21ld2hlcmUsCisgKiBwcm9iYWJseSBpbiB0aGlzIGZpbGUuCisgKi8KKyNpZmRlZiBERUJVR19QUk9HUkFNCitlcnJjb2RlX3QgcHJvZmlsZV92ZXJpZnlfbm9kZShzdHJ1Y3QgcHJvZmlsZV9ub2RlICpub2RlKQoreworCXN0cnVjdCBwcm9maWxlX25vZGUgKnAsICpsYXN0OworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlDSEVDS19NQUdJQyhub2RlKTsKKworCWlmIChub2RlLT52YWx1ZSAmJiBub2RlLT5maXJzdF9jaGlsZCkKKwkJcmV0dXJuIFBST0ZfU0VDVElPTl9XSVRIX1ZBTFVFOworCisJbGFzdCA9IDA7CisJZm9yIChwID0gbm9kZS0+Zmlyc3RfY2hpbGQ7IHA7IGxhc3QgPSBwLCBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+cHJldiAhPSBsYXN0KQorCQkJcmV0dXJuIFBST0ZfQkFEX0xJTktfTElTVDsKKwkJaWYgKGxhc3QgJiYgKGxhc3QtPm5leHQgIT0gcCkpCisJCQlyZXR1cm4gUFJPRl9CQURfTElOS19MSVNUOworCQlpZiAobm9kZS0+Z3JvdXBfbGV2ZWwrMSAhPSBwLT5ncm91cF9sZXZlbCkKKwkJCXJldHVybiBQUk9GX0JBRF9HUk9VUF9MVkw7CisJCWlmIChwLT5wYXJlbnQgIT0gbm9kZSkKKwkJCXJldHVybiBQUk9GX0JBRF9QQVJFTlRfUFRSOworCQlyZXR2YWwgPSBwcm9maWxlX3ZlcmlmeV9ub2RlKHApOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoKKyAqIEFkZCBhIG5vZGUgdG8gYSBwYXJ0aWN1bGFyIHNlY3Rpb24KKyAqLworZXJyY29kZV90IHByb2ZpbGVfYWRkX25vZGUoc3RydWN0IHByb2ZpbGVfbm9kZSAqc2VjdGlvbiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgIGNvbnN0IGNoYXIgKnZhbHVlLCBzdHJ1Y3QgcHJvZmlsZV9ub2RlICoqcmV0X25vZGUpCit7CisJZXJyY29kZV90IHJldHZhbDsKKwlzdHJ1Y3QgcHJvZmlsZV9ub2RlICpwLCAqbGFzdCwgKm5ldzsKKworCUNIRUNLX01BR0lDKHNlY3Rpb24pOworCisJaWYgKHNlY3Rpb24tPnZhbHVlKQorCQlyZXR1cm4gUFJPRl9BRERfTk9UX1NFQ1RJT047CisKKwkvKgorCSAqIEZpbmQgdGhlIHBsYWNlIHRvIGluc2VydCB0aGUgbmV3IG5vZGUuICBXZSBsb29rIGZvciB0aGUKKwkgKiBwbGFjZSAqYWZ0ZXIqIHRoZSBsYXN0IG1hdGNoIG9mIHRoZSBub2RlIG5hbWUsIHNpbmNlCisJICogb3JkZXIgbWF0dGVycy4KKwkgKi8KKwlmb3IgKHA9c2VjdGlvbi0+Zmlyc3RfY2hpbGQsIGxhc3QgPSAwOyBwOyBsYXN0ID0gcCwgcCA9IHAtPm5leHQpIHsKKwkJaW50IGNtcDsKKwkJY21wID0gc3RyY21wKHAtPm5hbWUsIG5hbWUpOworCQlpZiAoY21wID4gMCkKKwkJCWJyZWFrOworCX0KKwlyZXR2YWwgPSBwcm9maWxlX2NyZWF0ZV9ub2RlKG5hbWUsIHZhbHVlLCAmbmV3KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCW5ldy0+Z3JvdXBfbGV2ZWwgPSBzZWN0aW9uLT5ncm91cF9sZXZlbCsxOworCW5ldy0+ZGVsZXRlZCA9IDA7CisJbmV3LT5wYXJlbnQgPSBzZWN0aW9uOworCW5ldy0+cHJldiA9IGxhc3Q7CisJbmV3LT5uZXh0ID0gcDsKKwlpZiAocCkKKwkJcC0+cHJldiA9IG5ldzsKKwlpZiAobGFzdCkKKwkJbGFzdC0+bmV4dCA9IG5ldzsKKwllbHNlCisJCXNlY3Rpb24tPmZpcnN0X2NoaWxkID0gbmV3OworCWlmIChyZXRfbm9kZSkKKwkJKnJldF9ub2RlID0gbmV3OworCXJldHVybiAwOworfQorCisvKgorICogSXRlcmF0ZSB0aHJvdWdoIHRoZSBzZWN0aW9uLCByZXR1cm5pbmcgdGhlIG5vZGVzIHdoaWNoIG1hdGNoCisgKiB0aGUgZ2l2ZW4gbmFtZS4gIElmIG5hbWUgaXMgTlVMTCwgdGhlbiBpbnRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUKKyAqIG5vZGVzIGluIHRoZSBzZWN0aW9uLiAgSWYgc2VjdGlvbl9mbGFnIGlzIG5vbi16ZXJvLCBvbmx5IHJldHVybiB0aGUKKyAqIHNlY3Rpb24gd2hpY2ggbWF0Y2hlcyB0aGUgbmFtZTsgZG9uJ3QgcmV0dXJuIHJlbGF0aW9ucy4gIElmIHZhbHVlCisgKiBpcyBub24tTlVMTCwgdGhlbiBvbmx5IHJldHVybiByZWxhdGlvbnMgd2hpY2ggbWF0Y2ggdGhlIHJlcXVlc3RlZAorICogdmFsdWUuICAoVGhlIHZhbHVlIGFyZ3VtZW50IGlzIGlnbm9yZWQgaWYgc2VjdGlvbl9mbGFnIGlzIG5vbi16ZXJvLikKKyAqCisgKiBUaGUgZmlyc3QgdGltZSB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkLCB0aGUgc3RhdGUgcG9pbnRlciBtdXN0IGJlCisgKiBudWxsLiAgV2hlbiB0aGlzIHByb2ZpbGVfZmluZF9ub2RlX3JlbGF0aW9uKCkgcmV0dXJucywgaWYgdGhlIHN0YXRlCisgKiBwb2ludGVyIGlzIG5vbi1OVUxMLCB0aGVuIHRoaXMgcm91dGluZSBzaG91bGQgYmUgY2FsbGVkIGFnYWluLgorICogKFRoaXMgd29uJ3QgaGFwcGVuIGlmIHNlY3Rpb25fZmxhZyBpcyBub24temVybywgb2J2aW91c2x5LikKKyAqCisgKi8KK2VycmNvZGVfdCBwcm9maWxlX2ZpbmRfbm9kZShzdHJ1Y3QgcHJvZmlsZV9ub2RlICpzZWN0aW9uLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgc2VjdGlvbl9mbGFnLCB2b2lkICoqc3RhdGUsCisJCQkgICAgc3RydWN0IHByb2ZpbGVfbm9kZSAqKm5vZGUpCit7CisJc3RydWN0IHByb2ZpbGVfbm9kZSAqcDsKKworCUNIRUNLX01BR0lDKHNlY3Rpb24pOworCXAgPSAqc3RhdGU7CisJaWYgKHApIHsKKwkJQ0hFQ0tfTUFHSUMocCk7CisJfSBlbHNlCisJCXAgPSBzZWN0aW9uLT5maXJzdF9jaGlsZDsKKworCWZvciAoOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAobmFtZSAmJiAoc3RyY21wKHAtPm5hbWUsIG5hbWUpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc2VjdGlvbl9mbGFnKSB7CisJCQlpZiAocC0+dmFsdWUpCisJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQlpZiAoIXAtPnZhbHVlKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHZhbHVlICYmIChzdHJjbXAocC0+dmFsdWUsIHZhbHVlKSkpCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKHAtPmRlbGV0ZWQpCisJCSAgICBjb250aW51ZTsKKwkJLyogQSBtYXRjaCEgKi8KKwkJaWYgKG5vZGUpCisJCQkqbm9kZSA9IHA7CisJCWJyZWFrOworCX0KKwlpZiAocCA9PSAwKSB7CisJCSpzdGF0ZSA9IDA7CisJCXJldHVybiBzZWN0aW9uX2ZsYWcgPyBQUk9GX05PX1NFQ1RJT04gOiBQUk9GX05PX1JFTEFUSU9OOworCX0KKwkvKgorCSAqIE9LLCB3ZSd2ZSBmb3VuZCBvbmUgbWF0Y2g7IG5vdyBsZXQncyB0cnkgdG8gZmluZCBhbm90aGVyCisJICogb25lLiAgVGhpcyB3YXksIGlmIHdlIHJldHVybiBhIG5vbi16ZXJvIHN0YXRlIHBvaW50ZXIsCisJICogdGhlcmUncyBndWFyYW50ZWVkIHRvIGJlIGFub3RoZXIgbWF0Y2ggdGhhdCdzIHJldHVybmVkLgorCSAqLworCWZvciAocCA9IHAtPm5leHQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChuYW1lICYmIChzdHJjbXAocC0+bmFtZSwgbmFtZSkpKQorCQkJY29udGludWU7CisJCWlmIChzZWN0aW9uX2ZsYWcpIHsKKwkJCWlmIChwLT52YWx1ZSkKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWlmICghcC0+dmFsdWUpCisJCQkJY29udGludWU7CisJCQlpZiAodmFsdWUgJiYgKHN0cmNtcChwLT52YWx1ZSwgdmFsdWUpKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQkvKiBBIG1hdGNoISAqLworCQlicmVhazsKKwl9CisJKnN0YXRlID0gcDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgaXMgYSBnZW5lcmFsLXB1cnBvc2UgaXRlcmF0b3IgZm9yIHJldHVybmluZyBhbGwgbm9kZXMgdGhhdAorICogbWF0Y2ggdGhlIHNwZWNpZmllZCBuYW1lIGFycmF5LgorICovCitzdHJ1Y3QgcHJvZmlsZV9pdGVyYXRvciB7CisJcHJmX21hZ2ljX3QJCW1hZ2ljOworCXByb2ZpbGVfdAkJcHJvZmlsZTsKKwlpbnQJCQlmbGFnczsKKwljb25zdCBjaGFyIAkJKmNvbnN0ICpuYW1lczsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwlwcmZfZmlsZV90CQlmaWxlOworCWludAkJCWZpbGVfc2VyaWFsOworCWludAkJCWRvbmVfaWR4OworCXN0cnVjdCBwcm9maWxlX25vZGUgCSpub2RlOworCWludAkJCW51bTsKK307CisKK2VycmNvZGVfdAorcHJvZmlsZV9pdGVyYXRvcl9jcmVhdGUocHJvZmlsZV90IHByb2ZpbGUsIGNvbnN0IGNoYXIgKmNvbnN0ICpuYW1lcywgaW50IGZsYWdzLAorCQkJdm9pZCAqKnJldF9pdGVyKQoreworCXN0cnVjdCBwcm9maWxlX2l0ZXJhdG9yICppdGVyOworCWludAlkb25lX2lkeCA9IDA7CisKKwlpZiAocHJvZmlsZSA9PSAwKQorCQlyZXR1cm4gUFJPRl9OT19QUk9GSUxFOworCWlmIChwcm9maWxlLT5tYWdpYyAhPSBQUk9GX01BR0lDX1BST0ZJTEUpCisJCXJldHVybiBQUk9GX01BR0lDX1BST0ZJTEU7CisJaWYgKCFuYW1lcykKKwkJcmV0dXJuIFBST0ZfQkFEX05BTUVTRVQ7CisJaWYgKCEoZmxhZ3MgJiBQUk9GSUxFX0lURVJfTElTVF9TRUNUSU9OKSkgeworCQlpZiAoIW5hbWVzWzBdKQorCQkJcmV0dXJuIFBST0ZfQkFEX05BTUVTRVQ7CisJCWRvbmVfaWR4ID0gMTsKKwl9CisKKwlpZiAoKGl0ZXIgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9maWxlX2l0ZXJhdG9yKSkpID09IE5VTEwpCisJCXJldHVybiBFTk9NRU07CisKKwlpdGVyLT5tYWdpYyA9IFBST0ZfTUFHSUNfSVRFUkFUT1I7CisJaXRlci0+cHJvZmlsZSA9IHByb2ZpbGU7CisJaXRlci0+bmFtZXMgPSBuYW1lczsKKwlpdGVyLT5mbGFncyA9IGZsYWdzOworCWl0ZXItPmZpbGUgPSBwcm9maWxlLT5maXJzdF9maWxlOworCWl0ZXItPmRvbmVfaWR4ID0gZG9uZV9pZHg7CisJaXRlci0+bm9kZSA9IDA7CisJaXRlci0+bnVtID0gMDsKKwkqcmV0X2l0ZXIgPSBpdGVyOworCXJldHVybiAwOworfQorCit2b2lkIHByb2ZpbGVfaXRlcmF0b3JfZnJlZSh2b2lkICoqaXRlcl9wKQoreworCXN0cnVjdCBwcm9maWxlX2l0ZXJhdG9yICppdGVyOworCisJaWYgKCFpdGVyX3ApCisJCXJldHVybjsKKwlpdGVyID0gKml0ZXJfcDsKKwlpZiAoIWl0ZXIgfHwgaXRlci0+bWFnaWMgIT0gUFJPRl9NQUdJQ19JVEVSQVRPUikKKwkJcmV0dXJuOworCWZyZWUoaXRlcik7CisJKml0ZXJfcCA9IDA7Cit9CisKKy8qCisgKiBOb3RlOiB0aGUgcmV0dXJuZWQgY2hhcmFjdGVyIHN0cmluZ3MgaW4gcmV0X25hbWUgYW5kIHJldF92YWx1ZQorICogcG9pbnRzIHRvIHRoZSBzdG9yZWQgY2hhcmFjdGVyIHN0cmluZyBpbiB0aGUgcGFyc2Ugc3RyaW5nLiAgQmVmb3JlCisgKiB0aGlzIHN0cmluZyB2YWx1ZSBpcyByZXR1cm5lZCB0byBhIGNhbGxpbmcgYXBwbGljYXRpb24KKyAqIChwcm9maWxlX25vZGVfaXRlcmF0b3IgaXMgbm90IGFuIGV4cG9ydGVkIGludGVyZmFjZSksIGl0IHNob3VsZCBiZQorICogc3RyZHVwKCknZWQuCisgKi8KK2VycmNvZGVfdCBwcm9maWxlX25vZGVfaXRlcmF0b3Iodm9pZCAqKml0ZXJfcCwgc3RydWN0IHByb2ZpbGVfbm9kZSAqKnJldF9ub2RlLAorCQkJCWNoYXIgKipyZXRfbmFtZSwgY2hhciAqKnJldF92YWx1ZSkKK3sKKwlzdHJ1Y3QgcHJvZmlsZV9pdGVyYXRvciAJKml0ZXIgPSAqaXRlcl9wOworCXN0cnVjdCBwcm9maWxlX25vZGUgCQkqc2VjdGlvbiwgKnA7CisJY29uc3QgY2hhcgkJCSpjb25zdCAqY3BwOworCWVycmNvZGVfdAkJCXJldHZhbDsKKwlpbnQJCQkJc2tpcF9udW0gPSAwOworCisJaWYgKCFpdGVyIHx8IGl0ZXItPm1hZ2ljICE9IFBST0ZfTUFHSUNfSVRFUkFUT1IpCisJCXJldHVybiBQUk9GX01BR0lDX0lURVJBVE9SOworCWlmIChpdGVyLT5maWxlICYmIGl0ZXItPmZpbGUtPm1hZ2ljICE9IFBST0ZfTUFHSUNfRklMRSkKKwkgICAgcmV0dXJuIFBST0ZfTUFHSUNfRklMRTsKKwkvKgorCSAqIElmIHRoZSBmaWxlIGhhcyBjaGFuZ2VkLCB0aGVuIHRoZSBub2RlIHBvaW50ZXIgaXMgaW52YWxpZCwKKwkgKiBzbyB3ZSdsbCBoYXZlIHNlYXJjaCB0aGUgZmlsZSBhZ2FpbiBsb29raW5nIGZvciBpdC4KKwkgKi8KKwlpZiAoaXRlci0+bm9kZSAmJiAoaXRlci0+ZmlsZSAmJgorCQkJICAgaXRlci0+ZmlsZS0+dXBkX3NlcmlhbCAhPSBpdGVyLT5maWxlX3NlcmlhbCkpIHsKKwkJaXRlci0+ZmxhZ3MgJj0gflBST0ZJTEVfSVRFUl9GSU5BTF9TRUVOOworCQlza2lwX251bSA9IGl0ZXItPm51bTsKKwkJaXRlci0+bm9kZSA9IDA7CisJfQorCWlmIChpdGVyLT5ub2RlICYmIGl0ZXItPm5vZGUtPm1hZ2ljICE9IFBST0ZfTUFHSUNfTk9ERSkgeworCSAgICByZXR1cm4gUFJPRl9NQUdJQ19OT0RFOworCX0KK2dldF9uZXdfZmlsZToKKwlpZiAoaXRlci0+bm9kZSA9PSAwKSB7CisJCWlmIChpdGVyLT5maWxlID09IDAgfHwKKwkJICAgIChpdGVyLT5mbGFncyAmIFBST0ZJTEVfSVRFUl9GSU5BTF9TRUVOKSkgeworCQkJcHJvZmlsZV9pdGVyYXRvcl9mcmVlKGl0ZXJfcCk7CisJCQlpZiAocmV0X25vZGUpCisJCQkJKnJldF9ub2RlID0gMDsKKwkJCWlmIChyZXRfbmFtZSkKKwkJCQkqcmV0X25hbWUgPSAwOworCQkJaWYgKHJldF92YWx1ZSkKKwkJCQkqcmV0X3ZhbHVlID0wOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKChyZXR2YWwgPSBwcm9maWxlX3VwZGF0ZV9maWxlKGl0ZXItPmZpbGUpKSkgeworCQkgICAgaWYgKHJldHZhbCA9PSBFTk9FTlQgfHwgcmV0dmFsID09IEVBQ0NFUykgeworCQkJLyogWFhYIG1lbW9yeSBsZWFrPyAqLworCQkJaXRlci0+ZmlsZSA9IGl0ZXItPmZpbGUtPm5leHQ7CisJCQlza2lwX251bSA9IDA7CisJCQlyZXR2YWwgPSAwOworCQkJZ290byBnZXRfbmV3X2ZpbGU7CisJCSAgICB9IGVsc2UgeworCQkJcHJvZmlsZV9pdGVyYXRvcl9mcmVlKGl0ZXJfcCk7CisJCQlyZXR1cm4gcmV0dmFsOworCQkgICAgfQorCQl9CisJCWl0ZXItPmZpbGVfc2VyaWFsID0gaXRlci0+ZmlsZS0+dXBkX3NlcmlhbDsKKwkJLyoKKwkJICogRmluZCB0aGUgc2VjdGlvbiB0byBsaXN0IGlmIHdlIGFyZSBhIExJU1RfU0VDVElPTiwKKwkJICogb3IgZmluZCB0aGUgY29udGFpbmluZyBzZWN0aW9uIGlmIG5vdC4KKwkJICovCisJCXNlY3Rpb24gPSBpdGVyLT5maWxlLT5yb290OworCQlmb3IgKGNwcCA9IGl0ZXItPm5hbWVzOyBjcHBbaXRlci0+ZG9uZV9pZHhdOyBjcHArKykgeworCQkJZm9yIChwPXNlY3Rpb24tPmZpcnN0X2NoaWxkOyBwOyBwID0gcC0+bmV4dCkgeworCQkJCWlmICghc3RyY21wKHAtPm5hbWUsICpjcHApICYmICFwLT52YWx1ZSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIXApIHsKKwkJCQlzZWN0aW9uID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNlY3Rpb24gPSBwOworCQkJaWYgKHAtPmZpbmFsKQorCQkJCWl0ZXItPmZsYWdzIHw9IFBST0ZJTEVfSVRFUl9GSU5BTF9TRUVOOworCQl9CisJCWlmICghc2VjdGlvbikgeworCQkJaXRlci0+ZmlsZSA9IGl0ZXItPmZpbGUtPm5leHQ7CisJCQlza2lwX251bSA9IDA7CisJCQlnb3RvIGdldF9uZXdfZmlsZTsKKwkJfQorCQlpdGVyLT5uYW1lID0gKmNwcDsKKwkJaXRlci0+bm9kZSA9IHNlY3Rpb24tPmZpcnN0X2NoaWxkOworCX0KKwkvKgorCSAqIE9LLCBub3cgd2Uga25vdyBpdGVyLT5ub2RlIGlzIHNldCB1cCBjb3JyZWN0bHkuICBMZXQncyBkbworCSAqIHRoZSBzZWFyY2guCisJICovCisJZm9yIChwID0gaXRlci0+bm9kZTsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKGl0ZXItPm5hbWUgJiYgc3RyY21wKHAtPm5hbWUsIGl0ZXItPm5hbWUpKQorCQkJY29udGludWU7CisJCWlmICgoaXRlci0+ZmxhZ3MgJiBQUk9GSUxFX0lURVJfU0VDVElPTlNfT05MWSkgJiYKKwkJICAgIHAtPnZhbHVlKQorCQkJY29udGludWU7CisJCWlmICgoaXRlci0+ZmxhZ3MgJiBQUk9GSUxFX0lURVJfUkVMQVRJT05TX09OTFkpICYmCisJCSAgICAhcC0+dmFsdWUpCisJCQljb250aW51ZTsKKwkJaWYgKHNraXBfbnVtID4gMCkgeworCQkJc2tpcF9udW0tLTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChwLT5kZWxldGVkKQorCQkJY29udGludWU7CisJCWJyZWFrOworCX0KKwlpdGVyLT5udW0rKzsKKwlpZiAoIXApIHsKKwkJaXRlci0+ZmlsZSA9IGl0ZXItPmZpbGUtPm5leHQ7CisJCWl0ZXItPm5vZGUgPSAwOworCQlza2lwX251bSA9IDA7CisJCWdvdG8gZ2V0X25ld19maWxlOworCX0KKwlpZiAoKGl0ZXItPm5vZGUgPSBwLT5uZXh0KSA9PSBOVUxMKQorCQlpdGVyLT5maWxlID0gaXRlci0+ZmlsZS0+bmV4dDsKKwlpZiAocmV0X25vZGUpCisJCSpyZXRfbm9kZSA9IHA7CisJaWYgKHJldF9uYW1lKQorCQkqcmV0X25hbWUgPSBwLT5uYW1lOworCWlmIChyZXRfdmFsdWUpCisJCSpyZXRfdmFsdWUgPSBwLT52YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogcHJvZl9nZXQuYyAtLS0gcm91dGluZXMgdGhhdCBleHBvc2UgdGhlIHB1YmxpYyBpbnRlcmZhY2VzIGZvcgorICogCXF1ZXJ5aW5nIGl0ZW1zIGZyb20gdGhlIHByb2ZpbGUuCisgKgorICovCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIG9ubHkgZ2V0cyB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgZmlsZTsgaXQgaXMgYQorICogaGVscGVyIGZ1bmN0aW9uIGZvciBwcm9maWxlX2dldF9zdHJpbmcsIHByb2ZpbGVfZ2V0X2ludGVnZXIsIGV0Yy4KKyAqLworZXJyY29kZV90IHByb2ZpbGVfZ2V0X3ZhbHVlKHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgIGNvbnN0IGNoYXIgKnN1Ym5hbWUsIGNvbnN0IGNoYXIgKnN1YnN1Ym5hbWUsCisJCQkgICAgY29uc3QgY2hhciAqKnJldF92YWx1ZSkKK3sKKwllcnJjb2RlX3QJCXJldHZhbDsKKwl2b2lkCQkJKnN0YXRlOworCWNoYXIJCQkqdmFsdWU7CisJY29uc3QgY2hhcgkJKm5hbWVzWzRdOworCisJbmFtZXNbMF0gPSBuYW1lOworCW5hbWVzWzFdID0gc3VibmFtZTsKKwluYW1lc1syXSA9IHN1YnN1Ym5hbWU7CisJbmFtZXNbM10gPSAwOworCisJaWYgKChyZXR2YWwgPSBwcm9maWxlX2l0ZXJhdG9yX2NyZWF0ZShwcm9maWxlLCBuYW1lcywKKwkJCQkJICAgICAgUFJPRklMRV9JVEVSX1JFTEFUSU9OU19PTkxZLAorCQkJCQkgICAgICAmc3RhdGUpKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmICgocmV0dmFsID0gcHJvZmlsZV9ub2RlX2l0ZXJhdG9yKCZzdGF0ZSwgMCwgMCwgJnZhbHVlKSkpCisJCWdvdG8gY2xlYW51cDsKKworCWlmICh2YWx1ZSkKKwkJKnJldF92YWx1ZSA9IHZhbHVlOworCWVsc2UKKwkJcmV0dmFsID0gUFJPRl9OT19SRUxBVElPTjsKKworY2xlYW51cDoKKwlwcm9maWxlX2l0ZXJhdG9yX2ZyZWUoJnN0YXRlKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QKK3Byb2ZpbGVfZ2V0X3N0cmluZyhwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3VibmFtZSwKKwkJICAgY29uc3QgY2hhciAqc3Vic3VibmFtZSwgY29uc3QgY2hhciAqZGVmX3ZhbCwKKwkJICAgY2hhciAqKnJldF9zdHJpbmcpCit7CisJY29uc3QgY2hhcgkqdmFsdWU7CisJZXJyY29kZV90CXJldHZhbDsKKworCWlmIChwcm9maWxlKSB7CisJCXJldHZhbCA9IHByb2ZpbGVfZ2V0X3ZhbHVlKHByb2ZpbGUsIG5hbWUsIHN1Ym5hbWUsCisJCQkJCSAgIHN1YnN1Ym5hbWUsICZ2YWx1ZSk7CisJCWlmIChyZXR2YWwgPT0gUFJPRl9OT19TRUNUSU9OIHx8IHJldHZhbCA9PSBQUk9GX05PX1JFTEFUSU9OKQorCQkJdmFsdWUgPSBkZWZfdmFsOworCQllbHNlIGlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0gZWxzZQorCQl2YWx1ZSA9IGRlZl92YWw7CisKKwlpZiAodmFsdWUpIHsKKwkJKnJldF9zdHJpbmcgPSBtYWxsb2Moc3RybGVuKHZhbHVlKSsxKTsKKwkJaWYgKCpyZXRfc3RyaW5nID09IDApCisJCQlyZXR1cm4gRU5PTUVNOworCQlzdHJjcHkoKnJldF9zdHJpbmcsIHZhbHVlKTsKKwl9IGVsc2UKKwkJKnJldF9zdHJpbmcgPSAwOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QKK3Byb2ZpbGVfZ2V0X2ludGVnZXIocHJvZmlsZV90IHByb2ZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsCisJCSAgICBjb25zdCBjaGFyICpzdWJzdWJuYW1lLCBpbnQgZGVmX3ZhbCwgaW50ICpyZXRfaW50KQoreworCWNvbnN0IGNoYXIJKnZhbHVlOworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhciAgICAgICAgICAgICplbmRfdmFsdWU7CisJbG9uZwkJcmV0X2xvbmc7CisKKwkqcmV0X2ludCA9IGRlZl92YWw7CisJaWYgKHByb2ZpbGUgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBwcm9maWxlX2dldF92YWx1ZShwcm9maWxlLCBuYW1lLCBzdWJuYW1lLCBzdWJzdWJuYW1lLCAmdmFsdWUpOworCWlmIChyZXR2YWwgPT0gUFJPRl9OT19TRUNUSU9OIHx8IHJldHZhbCA9PSBQUk9GX05PX1JFTEFUSU9OKSB7CisJCSpyZXRfaW50ID0gZGVmX3ZhbDsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAodmFsdWVbMF0gPT0gMCkKKwkgICAgLyogRW1wdHkgc3RyaW5nIGlzIG5vIGdvb2QuICAqLworCSAgICByZXR1cm4gUFJPRl9CQURfSU5URUdFUjsKKwllcnJubyA9IDA7CisJcmV0X2xvbmcgPSBzdHJ0b2wodmFsdWUsICZlbmRfdmFsdWUsIDApOworCisJLyogT3ZlcmZsb3cgb3IgdW5kZXJmbG93LiAgKi8KKwlpZiAoKHJldF9sb25nID09IExPTkdfTUlOIHx8IHJldF9sb25nID09IExPTkdfTUFYKSAmJiBlcnJubyAhPSAwKQorCSAgICByZXR1cm4gUFJPRl9CQURfSU5URUdFUjsKKwkvKiBWYWx1ZSBvdXRzaWRlICJpbnQiIHJhbmdlLiAgKi8KKwlpZiAoKGxvbmcpIChpbnQpIHJldF9sb25nICE9IHJldF9sb25nKQorCSAgICByZXR1cm4gUFJPRl9CQURfSU5URUdFUjsKKwkvKiBHYXJiYWdlIGluIHN0cmluZy4gICovCisJaWYgKGVuZF92YWx1ZSAhPSB2YWx1ZSArIHN0cmxlbiAodmFsdWUpKQorCSAgICByZXR1cm4gUFJPRl9CQURfSU5URUdFUjsKKworCisJKnJldF9pbnQgPSByZXRfbG9uZzsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90Citwcm9maWxlX2dldF91aW50KHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdWJuYW1lLAorCQkgY29uc3QgY2hhciAqc3Vic3VibmFtZSwgdW5zaWduZWQgaW50IGRlZl92YWwsCisJCSB1bnNpZ25lZCBpbnQgKnJldF9pbnQpCit7CisJY29uc3QgY2hhcgkqdmFsdWU7CisJZXJyY29kZV90CXJldHZhbDsKKwljaGFyICAgICAgICAgICAgKmVuZF92YWx1ZTsKKwl1bnNpZ25lZCBsb25nCXJldF9sb25nOworCisJKnJldF9pbnQgPSBkZWZfdmFsOworCWlmIChwcm9maWxlID09IDApCisJCXJldHVybiAwOworCisJcmV0dmFsID0gcHJvZmlsZV9nZXRfdmFsdWUocHJvZmlsZSwgbmFtZSwgc3VibmFtZSwgc3Vic3VibmFtZSwgJnZhbHVlKTsKKwlpZiAocmV0dmFsID09IFBST0ZfTk9fU0VDVElPTiB8fCByZXR2YWwgPT0gUFJPRl9OT19SRUxBVElPTikgeworCQkqcmV0X2ludCA9IGRlZl92YWw7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKHZhbHVlWzBdID09IDApCisJICAgIC8qIEVtcHR5IHN0cmluZyBpcyBubyBnb29kLiAgKi8KKwkgICAgcmV0dXJuIFBST0ZfQkFEX0lOVEVHRVI7CisJZXJybm8gPSAwOworCXJldF9sb25nID0gc3RydG91bCh2YWx1ZSwgJmVuZF92YWx1ZSwgMCk7CisKKwkvKiBPdmVyZmxvdyBvciB1bmRlcmZsb3cuICAqLworCWlmICgocmV0X2xvbmcgPT0gVUxPTkdfTUFYKSAmJiBlcnJubyAhPSAwKQorCSAgICByZXR1cm4gUFJPRl9CQURfSU5URUdFUjsKKwkvKiBWYWx1ZSBvdXRzaWRlICJpbnQiIHJhbmdlLiAgKi8KKwlpZiAoKHVuc2lnbmVkIGxvbmcpICh1bnNpZ25lZCBpbnQpIHJldF9sb25nICE9IHJldF9sb25nKQorCSAgICByZXR1cm4gUFJPRl9CQURfSU5URUdFUjsKKwkvKiBHYXJiYWdlIGluIHN0cmluZy4gICovCisJaWYgKGVuZF92YWx1ZSAhPSB2YWx1ZSArIHN0cmxlbiAodmFsdWUpKQorCSAgICByZXR1cm4gUFJPRl9CQURfSU5URUdFUjsKKworCSpyZXRfaW50ID0gcmV0X2xvbmc7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdAorcHJvZmlsZV9nZXRfZG91YmxlKHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdWJuYW1lLAorCQkgICBjb25zdCBjaGFyICpzdWJzdWJuYW1lLCBkb3VibGUgZGVmX3ZhbCwgZG91YmxlICpyZXRfZG91YmxlKQoreworCWNvbnN0IGNoYXIJKnZhbHVlOworCWVycmNvZGVfdAkgIHJldHZhbDsKKwljaGFyICAgICAgICAqZW5kX3ZhbHVlOworCWRvdWJsZSAgICAgIGRvdWJsZV92YWw7CisKKwkqcmV0X2RvdWJsZSA9IGRlZl92YWw7CisJaWYgKHByb2ZpbGUgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBwcm9maWxlX2dldF92YWx1ZShwcm9maWxlLCBuYW1lLCBzdWJuYW1lLCBzdWJzdWJuYW1lLCAmdmFsdWUpOworCWlmIChyZXR2YWwgPT0gUFJPRl9OT19TRUNUSU9OIHx8IHJldHZhbCA9PSBQUk9GX05PX1JFTEFUSU9OKSB7CisJCSpyZXRfZG91YmxlID0gZGVmX3ZhbDsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAodmFsdWVbMF0gPT0gMCkKKwkJLyogRW1wdHkgc3RyaW5nIGlzIG5vIGdvb2QuICAqLworCQlyZXR1cm4gUFJPRl9CQURfSU5URUdFUjsKKwllcnJubyA9IDA7CisJZG91YmxlX3ZhbCA9IHN0cnRvZCh2YWx1ZSwgJmVuZF92YWx1ZSk7CisKKwkvKiBPdmVyZmxvdyBvciB1bmRlcmZsb3cuICAqLworCWlmIChlcnJubyAhPSAwKQorCQlyZXR1cm4gUFJPRl9CQURfSU5URUdFUjsKKwkvKiBHYXJiYWdlIGluIHN0cmluZy4gICovCisJaWYgKGVuZF92YWx1ZSAhPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkpCisJCXJldHVybiBQUk9GX0JBRF9JTlRFR0VSOworCisJKnJldF9kb3VibGUgPSBkb3VibGVfdmFsOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgY29uZl95ZXNbXSA9IHsKKyAgICAieSIsICJ5ZXMiLCAidHJ1ZSIsICJ0IiwgIjEiLCAib24iLAorICAgIDAsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgY29uZl9ub1tdID0geworICAgICJuIiwgIm5vIiwgImZhbHNlIiwgIm5pbCIsICIwIiwgIm9mZiIsCisgICAgMCwKK307CisKK3N0YXRpYyBlcnJjb2RlX3QKK3Byb2ZpbGVfcGFyc2VfYm9vbGVhbihjb25zdCBjaGFyICpzLCBpbnQgKnJldF9ib29sZWFuKQoreworICAgIGNvbnN0IGNoYXIgKmNvbnN0ICpwOworCisgICAgaWYgKHJldF9ib29sZWFuID09IE5VTEwpCisgICAgCXJldHVybiBQUk9GX0VJTlZBTDsKKworICAgIGZvcihwPWNvbmZfeWVzOyAqcDsgcCsrKSB7CisJCWlmICghc3RyY2FzZWNtcCgqcCxzKSkgeworCQkJKnJldF9ib29sZWFuID0gMTsKKwkgICAgCXJldHVybiAwOworCQl9CisgICAgfQorCisgICAgZm9yKHA9Y29uZl9ubzsgKnA7IHArKykgeworCQlpZiAoIXN0cmNhc2VjbXAoKnAscykpIHsKKwkJCSpyZXRfYm9vbGVhbiA9IDA7CisJCQlyZXR1cm4gMDsKKwkJfQorICAgIH0KKworCXJldHVybiBQUk9GX0JBRF9CT09MRUFOOworfQorCitlcnJjb2RlX3QKK3Byb2ZpbGVfZ2V0X2Jvb2xlYW4ocHJvZmlsZV90IHByb2ZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsCisJCSAgICBjb25zdCBjaGFyICpzdWJzdWJuYW1lLCBpbnQgZGVmX3ZhbCwgaW50ICpyZXRfYm9vbGVhbikKK3sKKwljb25zdCBjaGFyCSp2YWx1ZTsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJaWYgKHByb2ZpbGUgPT0gMCkgeworCQkqcmV0X2Jvb2xlYW4gPSBkZWZfdmFsOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR2YWwgPSBwcm9maWxlX2dldF92YWx1ZShwcm9maWxlLCBuYW1lLCBzdWJuYW1lLCBzdWJzdWJuYW1lLCAmdmFsdWUpOworCWlmIChyZXR2YWwgPT0gUFJPRl9OT19TRUNUSU9OIHx8IHJldHZhbCA9PSBQUk9GX05PX1JFTEFUSU9OKSB7CisJCSpyZXRfYm9vbGVhbiA9IGRlZl92YWw7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIHByb2ZpbGVfcGFyc2VfYm9vbGVhbiAodmFsdWUsIHJldF9ib29sZWFuKTsKK30KKworZXJyY29kZV90Citwcm9maWxlX2l0ZXJhdG9yKHZvaWQgKippdGVyX3AsIGNoYXIgKipyZXRfbmFtZSwgY2hhciAqKnJldF92YWx1ZSkKK3sKKwljaGFyICpuYW1lLCAqdmFsdWU7CisJZXJyY29kZV90CXJldHZhbDsKKworCXJldHZhbCA9IHByb2ZpbGVfbm9kZV9pdGVyYXRvcihpdGVyX3AsIDAsICZuYW1lLCAmdmFsdWUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAocmV0X25hbWUpIHsKKwkJaWYgKG5hbWUpIHsKKwkJCSpyZXRfbmFtZSA9IG1hbGxvYyhzdHJsZW4obmFtZSkrMSk7CisJCQlpZiAoISpyZXRfbmFtZSkKKwkJCQlyZXR1cm4gRU5PTUVNOworCQkJc3RyY3B5KCpyZXRfbmFtZSwgbmFtZSk7CisJCX0gZWxzZQorCQkJKnJldF9uYW1lID0gMDsKKwl9CisJaWYgKHJldF92YWx1ZSkgeworCQlpZiAodmFsdWUpIHsKKwkJCSpyZXRfdmFsdWUgPSBtYWxsb2Moc3RybGVuKHZhbHVlKSsxKTsKKwkJCWlmICghKnJldF92YWx1ZSkgeworCQkJCWlmIChyZXRfbmFtZSkgeworCQkJCQlmcmVlKCpyZXRfbmFtZSk7CisJCQkJCSpyZXRfbmFtZSA9IDA7CisJCQkJfQorCQkJCXJldHVybiBFTk9NRU07CisJCQl9CisJCQlzdHJjcHkoKnJldF92YWx1ZSwgdmFsdWUpOworCQl9IGVsc2UKKwkJCSpyZXRfdmFsdWUgPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIERFQlVHX1BST0dSQU0KKworLyoKKyAqIHRlc3RfcHJvZmlsZS5jIC0tLSB0ZXN0aW5nIHByb2dyYW0gZm9yIHRoZSBwcm9maWxlIHJvdXRpbmUKKyAqLworCisjaW5jbHVkZSAiYXJndl9wYXJzZS5oIgorI2luY2x1ZGUgInByb2ZpbGVfaGVscGVycy5oIgorCitjb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSAidGVzdF9wcm9maWxlIjsKKworI2RlZmluZSBQUklOVF9WQUxVRQkxCisjZGVmaW5lIFBSSU5UX1ZBTFVFUwkyCisKK3N0YXRpYyB2b2lkIGRvX2NtZChwcm9maWxlX3QgcHJvZmlsZSwgY2hhciAqKmFyZ3YpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwljb25zdCBjaGFyCSoqbmFtZXMsICp2YWx1ZTsKKwljaGFyCQkqKnZhbHVlcywgKipjcHA7CisJY2hhcgkqY21kOworCWludAkJcHJpbnRfc3RhdHVzOworCisJY21kID0gKihhcmd2KTsKKwluYW1lcyA9IChjb25zdCBjaGFyICoqKSBhcmd2ICsgMTsKKwlwcmludF9zdGF0dXMgPSAwOworCXJldHZhbCA9IDA7CisJaWYgKGNtZCA9PSAwKQorCQlyZXR1cm47CisJaWYgKCFzdHJjbXAoY21kLCAicXVlcnkiKSkgeworCQlyZXR2YWwgPSBwcm9maWxlX2dldF92YWx1ZXMocHJvZmlsZSwgbmFtZXMsICZ2YWx1ZXMpOworCQlwcmludF9zdGF0dXMgPSBQUklOVF9WQUxVRVM7CisJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgInF1ZXJ5MSIpKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSAwOworCQljb25zdCBjaGFyICpzdWJuYW1lID0gMDsKKwkJY29uc3QgY2hhciAqc3Vic3VibmFtZSA9IDA7CisKKwkJbmFtZSA9IG5hbWVzWzBdOworCQlpZiAobmFtZSkKKwkJCXN1Ym5hbWUgPSBuYW1lc1sxXTsKKwkJaWYgKHN1Ym5hbWUpCisJCQlzdWJzdWJuYW1lID0gbmFtZXNbMl07CisJCWlmIChzdWJzdWJuYW1lICYmIG5hbWVzWzNdKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiT25seSAzIGxldmVscyBhcmUgYWxsb3dlZCB3aXRoIHF1ZXJ5MVxuIik7CisJCQlyZXR2YWwgPSBFSU5WQUw7CisJCX0gZWxzZQorCQkJcmV0dmFsID0gcHJvZmlsZV9nZXRfdmFsdWUocHJvZmlsZSwgbmFtZSwgc3VibmFtZSwKKwkJCQkJCSAgIHN1YnN1Ym5hbWUsICZ2YWx1ZSk7CisJCXByaW50X3N0YXR1cyA9IFBSSU5UX1ZBTFVFOworCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJsaXN0X3NlY3Rpb25zIikpIHsKKwkJcmV0dmFsID0gcHJvZmlsZV9nZXRfc3Vic2VjdGlvbl9uYW1lcyhwcm9maWxlLCBuYW1lcywKKwkJCQkJCSAgICAgICZ2YWx1ZXMpOworCQlwcmludF9zdGF0dXMgPSBQUklOVF9WQUxVRVM7CisJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgImxpc3RfcmVsYXRpb25zIikpIHsKKwkJcmV0dmFsID0gcHJvZmlsZV9nZXRfcmVsYXRpb25fbmFtZXMocHJvZmlsZSwgbmFtZXMsCisJCQkJCQkgICAgJnZhbHVlcyk7CisJCXByaW50X3N0YXR1cyA9IFBSSU5UX1ZBTFVFUzsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiZHVtcCIpKSB7CisJCXJldHZhbCA9IHByb2ZpbGVfd3JpdGVfdHJlZV9maWxlCisJCQkocHJvZmlsZS0+Zmlyc3RfZmlsZS0+cm9vdCwgc3Rkb3V0KTsKKyNpZiAwCisJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgImNsZWFyIikpIHsKKwkJcmV0dmFsID0gcHJvZmlsZV9jbGVhcl9yZWxhdGlvbihwcm9maWxlLCBuYW1lcyk7CisJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgInVwZGF0ZSIpKSB7CisJCXJldHZhbCA9IHByb2ZpbGVfdXBkYXRlX3JlbGF0aW9uKHByb2ZpbGUsIG5hbWVzKzIsCisJCQkJCQkgKm5hbWVzLCAqKG5hbWVzKzEpKTsKKyNlbmRpZgorCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJ2ZXJpZnkiKSkgeworCQlyZXR2YWwgPSBwcm9maWxlX3ZlcmlmeV9ub2RlCisJCQkocHJvZmlsZS0+Zmlyc3RfZmlsZS0+cm9vdCk7CisjaWYgMAorCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJyZW5hbWVfc2VjdGlvbiIpKSB7CisJCXJldHZhbCA9IHByb2ZpbGVfcmVuYW1lX3NlY3Rpb24ocHJvZmlsZSwgbmFtZXMrMSwgKm5hbWVzKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiYWRkIikpIHsKKwkJdmFsdWUgPSAqbmFtZXM7CisJCWlmIChzdHJjbXAodmFsdWUsICJOVUxMIikgPT0gMCkKKwkJCXZhbHVlID0gTlVMTDsKKwkJcmV0dmFsID0gcHJvZmlsZV9hZGRfcmVsYXRpb24ocHJvZmlsZSwgbmFtZXMrMSwgdmFsdWUpOworCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJmbHVzaCIpKSB7CisJCXJldHZhbCA9IHByb2ZpbGVfZmx1c2gocHJvZmlsZSk7CisjZW5kaWYKKwl9IGVsc2UgeworCQlwcmludGYoIkludmFsaWQgY29tbWFuZC5cbiIpOworCX0KKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoY21kLCByZXR2YWwsICIiKTsKKwkJcHJpbnRfc3RhdHVzID0gMDsKKwl9CisJc3dpdGNoIChwcmludF9zdGF0dXMpIHsKKwljYXNlIFBSSU5UX1ZBTFVFOgorCQlwcmludGYoIiVzXG4iLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfVkFMVUVTOgorCQlmb3IgKGNwcCA9IHZhbHVlczsgKmNwcDsgY3BwKyspCisJCQlwcmludGYoIiVzXG4iLCAqY3BwKTsKKwkJcHJvZmlsZV9mcmVlX2xpc3QodmFsdWVzKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBkb19iYXRjaG1vZGUocHJvZmlsZV90IHByb2ZpbGUpCit7CisJaW50CQlhcmdjLCByZXQ7CisJY2hhcgkJKiphcmd2OworCWNoYXIJCWJ1ZlsyNTZdOworCisJd2hpbGUgKCFmZW9mKHN0ZGluKSkgeworCQlpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgc3RkaW4pID09IE5VTEwpCisJCQlicmVhazsKKwkJcHJpbnRmKCI+JXMiLCBidWYpOworCQlyZXQgPSBhcmd2X3BhcnNlKGJ1ZiwgJmFyZ2MsICZhcmd2KTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlwcmludGYoIkFyZ3ZfcGFyc2UgcmV0dXJuZWQgJWQhXG4iLCByZXQpOworCQkJY29udGludWU7CisJCX0KKwkJZG9fY21kKHByb2ZpbGUsIGFyZ3YpOworCQlwcmludGYoIlxuIik7CisJCWFyZ3ZfZnJlZShhcmd2KTsKKwl9CisJcHJvZmlsZV9yZWxlYXNlKHByb2ZpbGUpOworCWV4aXQoMCk7CisKK30KKwordm9pZCBzeW50YXhfZXJyX3JlcG9ydChjb25zdCBjaGFyICpmaWxlbmFtZSwgbG9uZyBlcnIsIGludCBsaW5lX251bSkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlN5bnRheCBlcnJvciBpbiAlcywgbGluZSBudW1iZXIgJWQ6ICVzXG4iLAorCQlmaWxlbmFtZSwgbGluZV9udW0sIGVycm9yX21lc3NhZ2UoZXJyKSk7CisJZXhpdCgxKTsKK30KKworY29uc3QgY2hhciAqZGVmYXVsdF9zdHIgPSAiW2Zvb11cblx0YmFyPXF1dXhcblx0c3ViID0ge1xuXHRcdHdpbiA9IHRydWVcbn1cbiI7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBwcm9maWxlX3QJcHJvZmlsZTsKKyAgICBsb25nCXJldHZhbDsKKyAgICBjaGFyCSpjbWQ7CisKKyAgICBpZiAoYXJnYyA8IDIpIHsKKwkgICAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZmlsZW5hbWUgW2NtZCBhcmdzZXRdXG4iLCBwcm9ncmFtX25hbWUpOworCSAgICBleGl0KDEpOworICAgIH0KKworICAgIGluaXRpYWxpemVfcHJvZl9lcnJvcl90YWJsZSgpOworCisgICAgcHJvZmlsZV9zZXRfc3ludGF4X2Vycl9jYihzeW50YXhfZXJyX3JlcG9ydCk7CisKKyAgICByZXR2YWwgPSBwcm9maWxlX2luaXRfcGF0aChhcmd2WzFdLCAmcHJvZmlsZSk7CisgICAgaWYgKHJldHZhbCkgeworCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICJ3aGlsZSBpbml0aWFsaXppbmcgcHJvZmlsZSIpOworCWV4aXQoMSk7CisgICAgfQorICAgIHJldHZhbCA9IHByb2ZpbGVfc2V0X2RlZmF1bHQocHJvZmlsZSwgZGVmYXVsdF9zdHIpOworICAgIGlmIChyZXR2YWwpIHsKKwljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAid2hpbGUgc2V0dGluZyBkZWZhdWx0Iik7CisJZXhpdCgxKTsKKyAgICB9CisKKyAgICBjbWQgPSAqKGFyZ3YrMik7CisgICAgaWYgKCFjbWQgfHwgIXN0cmNtcChjbWQsICJiYXRjaCIpKQorCSAgICBkb19iYXRjaG1vZGUocHJvZmlsZSk7CisgICAgZWxzZQorCSAgICBkb19jbWQocHJvZmlsZSwgYXJndisyKTsKKyAgICBwcm9maWxlX3JlbGVhc2UocHJvZmlsZSk7CisKKyAgICByZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzY2svcHJvZmlsZS5oIGIvZTJmc2NrL3Byb2ZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2MxMGViCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL3Byb2ZpbGUuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIHByb2ZpbGUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKgorICogQ29weXJpZ2h0IChDKSAxOTg1LTIwMDUgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBFeHBvcnQgb2YgdGhpcyBzb2Z0d2FyZSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EgbWF5IHJlcXVpcmUKKyAqIGEgc3BlY2lmaWMgbGljZW5zZSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQuICBJdCBpcyB0aGUKKyAqIHJlc3BvbnNpYmlsaXR5IG9mIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uIGNvbnRlbXBsYXRpbmcgZXhwb3J0IHRvCisgKiBvYnRhaW4gc3VjaCBhIGxpY2Vuc2UgYmVmb3JlIGV4cG9ydGluZy4KKyAqCisgKiBXSVRISU4gVEhBVCBDT05TVFJBSU5ULCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQKKyAqIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZAorICogd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZAorICogdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdAorICogdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nCisgKiB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKKyAqIHBlcm1pc3Npb24uICBGdXJ0aGVybW9yZSBpZiB5b3UgbW9kaWZ5IHRoaXMgc29mdHdhcmUgeW91IG11c3QgbGFiZWwKKyAqIHlvdXIgc29mdHdhcmUgYXMgbW9kaWZpZWQgc29mdHdhcmUgYW5kIG5vdCBkaXN0cmlidXRlIGl0IGluIHN1Y2ggYQorICogZmFzaGlvbiB0aGF0IGl0IG1pZ2h0IGJlIGNvbmZ1c2VkIHdpdGggdGhlIG9yaWdpbmFsIE1JVCBzb2Z0d2FyZS4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUKKyAqIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnR5LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX1BST0ZJTEVfSAorI2RlZmluZSBfUFJPRklMRV9ICisKK3R5cGVkZWYgc3RydWN0IF9wcm9maWxlX3QgKnByb2ZpbGVfdDsKKwordHlwZWRlZiB2b2lkICgqcHJvZmlsZV9zeW50YXhfZXJyX2NiX3QpKGNvbnN0IGNoYXIgKmZpbGUsIGxvbmcgZXJyLAorCQkJCQlpbnQgbGluZV9udW0pOworCisvKgorICogVXNlZCBieSB0aGUgcHJvZmlsZSBpdGVyYXRvciBpbiBwcm9mX2dldC5jCisgKi8KKyNkZWZpbmUgUFJPRklMRV9JVEVSX0xJU1RfU0VDVElPTgkweDAwMDEKKyNkZWZpbmUgUFJPRklMRV9JVEVSX1NFQ1RJT05TX09OTFkJMHgwMDAyCisjZGVmaW5lIFBST0ZJTEVfSVRFUl9SRUxBVElPTlNfT05MWQkweDAwMDQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCitsb25nIHByb2ZpbGVfaW5pdAorCShjb25zdCBjaGFyICogKmZpbGVzLCBwcm9maWxlX3QgKnJldF9wcm9maWxlKTsKKwordm9pZCBwcm9maWxlX3JlbGVhc2UKKwkocHJvZmlsZV90IHByb2ZpbGUpOworCitsb25nIHByb2ZpbGVfc2V0X2RlZmF1bHQKKwkocHJvZmlsZV90IHByb2ZpbGUsIGNvbnN0IGNoYXIgKmRlZl9zdHJpbmcpOworCitsb25nIHByb2ZpbGVfZ2V0X3N0cmluZworCShwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3VibmFtZSwKKwkJCWNvbnN0IGNoYXIgKnN1YnN1Ym5hbWUsIGNvbnN0IGNoYXIgKmRlZl92YWwsCisJCQljaGFyICoqcmV0X3N0cmluZyk7Citsb25nIHByb2ZpbGVfZ2V0X2ludGVnZXIKKwkocHJvZmlsZV90IHByb2ZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsCisJCQljb25zdCBjaGFyICpzdWJzdWJuYW1lLCBpbnQgZGVmX3ZhbCwKKwkJCWludCAqcmV0X2RlZmF1bHQpOworCitsb25nIHByb2ZpbGVfZ2V0X3VpbnQKKwkocHJvZmlsZV90IHByb2ZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsCisJCWNvbnN0IGNoYXIgKnN1YnN1Ym5hbWUsIHVuc2lnbmVkIGludCBkZWZfdmFsLAorCQl1bnNpZ25lZCBpbnQgKnJldF9pbnQpOworCitsb25nIHByb2ZpbGVfZ2V0X2RvdWJsZQorCShwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3VibmFtZSwKKwkJY29uc3QgY2hhciAqc3Vic3VibmFtZSwgZG91YmxlIGRlZl92YWwsCisJCWRvdWJsZSAqcmV0X2Zsb2F0KTsKKworbG9uZyBwcm9maWxlX2dldF9ib29sZWFuCisJKHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdWJuYW1lLAorCQkJY29uc3QgY2hhciAqc3Vic3VibmFtZSwgaW50IGRlZl92YWwsCisJCQlpbnQgKnJldF9kZWZhdWx0KTsKKworbG9uZyBwcm9maWxlX2l0ZXJhdG9yX2NyZWF0ZQorCShwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqY29uc3QgKm5hbWVzLAorCQkgICBpbnQgZmxhZ3MsIHZvaWQgKipyZXRfaXRlcik7CisKK3ZvaWQgcHJvZmlsZV9pdGVyYXRvcl9mcmVlCisJKHZvaWQgKippdGVyX3ApOworCitsb25nIHByb2ZpbGVfaXRlcmF0b3IKKwkodm9pZAkqKml0ZXJfcCwgY2hhciAqKnJldF9uYW1lLCBjaGFyICoqcmV0X3ZhbHVlKTsKKworcHJvZmlsZV9zeW50YXhfZXJyX2NiX3QgcHJvZmlsZV9zZXRfc3ludGF4X2Vycl9jYihwcm9maWxlX3N5bnRheF9lcnJfY2JfdCBob29rKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIF9LUkI1X0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNjay9wcm9maWxlX2hlbHBlcnMuYyBiL2UyZnNjay9wcm9maWxlX2hlbHBlcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzkwODBhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL3Byb2ZpbGVfaGVscGVycy5jCkBAIC0wLDAgKzEsMzEwIEBACisvKgorICogcHJvZmlsZV9oZWxwZXJzLmMgLS0gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIHByb2ZpbGUgbGlicmFyeQorICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgdGhlICJjb3JlIiBwcm9maWxlIGxpYnJhcnksIGFuZCBkbworICogbm90IHJlcXVpcmUgYWNjZXNzIHRvIHRoZSBpbnRlcm5hbCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBvZgorICogdGhlIHByb2ZpbGUgbGlicmFyeS4gIFRoZXkgYXJlIG1haW5seSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yCisgKiBwcm9ncmFtcyB0aGF0IHdhbnQgdG8gZG8gc29tZXRoaW5nIHVudXN1YWwgc3VjaCBhcyBvYnRhaW5pbmcgdGhlCisgKiBsaXN0IG9mIHNlY3Rpb25zIG9yIHJlbGF0aW9ucywgb3IgYWNjZXNzaW5nIG11bHRpcGxlIHZhbHVlcyBmcm9tIGEKKyAqIHJlbGF0aW9uIHRoYXQgaXMgbGlzdGVkIG1vcmUgdGhhbiBvbmNlLiAgVGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBhbGwKKyAqIGJlIGRvbmUgdXNpbmcgdGhlIHByb2ZpbGVfaXRlcmF0b3IgYWJzdHJhY3Rpb24sIGJ1dCBpdCBpcyBsZXNzCisgKiBjb252ZW5pZW50LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxldC9jb21fZXJyLmg+CisjaW5jbHVkZSAicHJvZmlsZS5oIgorI2luY2x1ZGUgInByb2ZfZXJyLmgiCisKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgLS0tIGluaXRfbGlzdCgpLCBlbmRfbGlzdCgpLCBhbmQgYWRkX3RvX2xpc3QoKSBhcmUKKyAqIGludGVybmFsIGZ1bmN0aW9ucyB1c2VkIHRvIGJ1aWxkIHVwIGEgbnVsbC10ZXJtaW5hdGVkIGNoYXIgKiogbGlzdAorICogb2Ygc3RyaW5ncyB0byBiZSByZXR1cm5lZCBieSBmdW5jdGlvbnMgbGlrZSBwcm9maWxlX2dldF92YWx1ZXMuCisgKgorICogVGhlIHByb2ZpbGVfc3RyaW5nX2xpc3Qgc3RydWN0dXJlIGlzIHVzZWQgZm9yIGludGVybmFsIGJvb2tpbmcKKyAqIHB1cnBvc2VzIHRvIGJ1aWxkIHVwIHRoZSBsaXN0LCB3aGljaCBpcyByZXR1cm5lZCBpbiAqcmV0X2xpc3QgYnkKKyAqIHRoZSBlbmRfbGlzdCgpIGZ1bmN0aW9uLgorICoKKyAqIFRoZSBwdWJsaWNseSBleHBvcnRlZCBpbnRlcmZhY2UgZm9yIGZyZWVpbmcgY2hhcioqIGxpc3QgaXMKKyAqIHByb2ZpbGVfZnJlZV9saXN0KCkuCisgKi8KKworc3RydWN0IHByb2ZpbGVfc3RyaW5nX2xpc3QgeworCWNoYXIJKipsaXN0OworCWludAludW07CisJaW50CW1heDsKK307CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBzdHJpbmcgbGlzdCBhYnN0cmFjdGlvbi4KKyAqLworc3RhdGljIGVycmNvZGVfdCBpbml0X2xpc3Qoc3RydWN0IHByb2ZpbGVfc3RyaW5nX2xpc3QgKmxpc3QpCit7CisJbGlzdC0+bnVtID0gMDsKKwlsaXN0LT5tYXggPSAxMDsKKwlsaXN0LT5saXN0ID0gbWFsbG9jKGxpc3QtPm1heCAqIHNpemVvZihjaGFyICopKTsKKwlpZiAobGlzdC0+bGlzdCA9PSAwKQorCQlyZXR1cm4gRU5PTUVNOworCWxpc3QtPmxpc3RbMF0gPSAwOworCXJldHVybiAwOworfQorCisvKgorICogRnJlZSBhbnkgbWVtb3J5IGxlZnQgb3ZlciBpbiB0aGUgc3RyaW5nIGFic3RyYWN0aW9uLCByZXR1cm5pbmcgdGhlCisgKiBidWlsdCB1cCBsaXN0IGluICpyZXRfbGlzdCBpZiBpdCBpcyBub24tbnVsbC4KKyAqLworc3RhdGljIHZvaWQgZW5kX2xpc3Qoc3RydWN0IHByb2ZpbGVfc3RyaW5nX2xpc3QgKmxpc3QsIGNoYXIgKioqcmV0X2xpc3QpCit7CisJY2hhcgkqKmNwOworCisJaWYgKGxpc3QgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKHJldF9saXN0KSB7CisJCSpyZXRfbGlzdCA9IGxpc3QtPmxpc3Q7CisJCXJldHVybjsKKwl9IGVsc2UgeworCQlmb3IgKGNwID0gbGlzdC0+bGlzdDsgKmNwOyBjcCsrKQorCQkJZnJlZSgqY3ApOworCQlmcmVlKGxpc3QtPmxpc3QpOworCX0KKwlsaXN0LT5udW0gPSBsaXN0LT5tYXggPSAwOworCWxpc3QtPmxpc3QgPSAwOworfQorCisvKgorICogQWRkIGEgc3RyaW5nIHRvIHRoZSBsaXN0LgorICovCitzdGF0aWMgZXJyY29kZV90IGFkZF90b19saXN0KHN0cnVjdCBwcm9maWxlX3N0cmluZ19saXN0ICpsaXN0LCBjaGFyICpzdHIpCit7CisJY2hhciAJKipuZXdsaXN0OworCWludAluZXdtYXg7CisKKwlpZiAobGlzdC0+bnVtKzEgPj0gbGlzdC0+bWF4KSB7CisJCW5ld21heCA9IGxpc3QtPm1heCArIDEwOworCQluZXdsaXN0ID0gcmVhbGxvYyhsaXN0LT5saXN0LCBuZXdtYXggKiBzaXplb2YoY2hhciAqKSk7CisJCWlmIChuZXdsaXN0ID09IDApCisJCQlyZXR1cm4gRU5PTUVNOworCQlsaXN0LT5tYXggPSBuZXdtYXg7CisJCWxpc3QtPmxpc3QgPSBuZXdsaXN0OworCX0KKworCWxpc3QtPmxpc3RbbGlzdC0+bnVtKytdID0gc3RyOworCWxpc3QtPmxpc3RbbGlzdC0+bnVtXSA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgc3RyaW5nIGlzIGFscmVhZHkgYSBtZW1iZXIgb2YgdGhlIGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgaXNfbGlzdF9tZW1iZXIoc3RydWN0IHByb2ZpbGVfc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwljaGFyICoqY3BwOworCisJaWYgKCFsaXN0LT5saXN0KQorCQlyZXR1cm4gMDsKKworCWZvciAoY3BwID0gbGlzdC0+bGlzdDsgKmNwcDsgY3BwKyspIHsKKwkJaWYgKCFzdHJjbXAoKmNwcCwgc3RyKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgYSBudWxsLXRlcm1pbmF0ZWQgbGlzdCBhcyByZXR1cm5lZCBieQorICogcHJvZmlsZV9nZXRfdmFsdWVzLgorICovCit2b2lkIHByb2ZpbGVfZnJlZV9saXN0KGNoYXIgKipsaXN0KQoreworICAgIGNoYXIJKipjcDsKKworICAgIGlmIChsaXN0ID09IDApCisJICAgIHJldHVybjsKKworICAgIGZvciAoY3AgPSBsaXN0OyAqY3A7IGNwKyspCisJZnJlZSgqY3ApOworICAgIGZyZWUobGlzdCk7Cit9CisKK2VycmNvZGVfdAorcHJvZmlsZV9nZXRfdmFsdWVzKHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICpjb25zdCAqbmFtZXMsCisJCSAgIGNoYXIgKioqcmV0X3ZhbHVlcykKK3sKKwllcnJjb2RlX3QJCXJldHZhbDsKKwl2b2lkCQkJKnN0YXRlOworCWNoYXIJCQkqdmFsdWU7CisJc3RydWN0IHByb2ZpbGVfc3RyaW5nX2xpc3QgdmFsdWVzOworCisJaWYgKChyZXR2YWwgPSBwcm9maWxlX2l0ZXJhdG9yX2NyZWF0ZShwcm9maWxlLCBuYW1lcywKKwkJCQkJICAgICAgUFJPRklMRV9JVEVSX1JFTEFUSU9OU19PTkxZLAorCQkJCQkgICAgICAmc3RhdGUpKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmICgocmV0dmFsID0gaW5pdF9saXN0KCZ2YWx1ZXMpKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRvIHsKKwkJaWYgKChyZXR2YWwgPSBwcm9maWxlX2l0ZXJhdG9yKCZzdGF0ZSwgMCwgJnZhbHVlKSkpCisJCQlnb3RvIGNsZWFudXA7CisJCWlmICh2YWx1ZSkKKwkJCWFkZF90b19saXN0KCZ2YWx1ZXMsIHZhbHVlKTsKKwl9IHdoaWxlIChzdGF0ZSk7CisKKwlpZiAodmFsdWVzLm51bSA9PSAwKSB7CisJCXJldHZhbCA9IFBST0ZfTk9fUkVMQVRJT047CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwllbmRfbGlzdCgmdmFsdWVzLCByZXRfdmFsdWVzKTsKKwlyZXR1cm4gMDsKKworY2xlYW51cDoKKwllbmRfbGlzdCgmdmFsdWVzLCAwKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgbGlzdCBvZiB0aGUgbmFtZXMgb2Ygc3ViZWN0aW9ucyBpbiB0aGUKKyAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgc2VjdGlvbiBuYW1lLgorICovCitlcnJjb2RlX3QKK3Byb2ZpbGVfZ2V0X3N1YnNlY3Rpb25fbmFtZXMocHJvZmlsZV90IHByb2ZpbGUsIGNvbnN0IGNoYXIgKipuYW1lcywKKwkJCSAgICAgY2hhciAqKipyZXRfbmFtZXMpCit7CisJZXJyY29kZV90CQlyZXR2YWw7CisJdm9pZAkJCSpzdGF0ZTsKKwljaGFyCQkJKm5hbWU7CisJc3RydWN0IHByb2ZpbGVfc3RyaW5nX2xpc3QgdmFsdWVzOworCisJaWYgKChyZXR2YWwgPSBwcm9maWxlX2l0ZXJhdG9yX2NyZWF0ZShwcm9maWxlLCBuYW1lcywKKwkJICAgUFJPRklMRV9JVEVSX0xJU1RfU0VDVElPTiB8IFBST0ZJTEVfSVRFUl9TRUNUSU9OU19PTkxZLAorCQkgICAmc3RhdGUpKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmICgocmV0dmFsID0gaW5pdF9saXN0KCZ2YWx1ZXMpKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRvIHsKKwkJaWYgKChyZXR2YWwgPSBwcm9maWxlX2l0ZXJhdG9yKCZzdGF0ZSwgJm5hbWUsIDApKSkKKwkJCWdvdG8gY2xlYW51cDsKKwkJaWYgKG5hbWUpCisJCQlhZGRfdG9fbGlzdCgmdmFsdWVzLCBuYW1lKTsKKwl9IHdoaWxlIChzdGF0ZSk7CisKKwllbmRfbGlzdCgmdmFsdWVzLCByZXRfbmFtZXMpOworCXJldHVybiAwOworCitjbGVhbnVwOgorCWVuZF9saXN0KCZ2YWx1ZXMsIDApOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBsaXN0IG9mIHRoZSBuYW1lcyBvZiByZWxhdGlvbnMgaW4gdGhlCisgKiB1bmRlciB0aGUgc3BlY2lmaWVkIHNlY3Rpb24gbmFtZS4KKyAqLworZXJyY29kZV90Citwcm9maWxlX2dldF9yZWxhdGlvbl9uYW1lcyhwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqKm5hbWVzLAorCQkJICAgY2hhciAqKipyZXRfbmFtZXMpCit7CisJZXJyY29kZV90CQlyZXR2YWw7CisJdm9pZAkJCSpzdGF0ZTsKKwljaGFyCQkJKm5hbWU7CisJc3RydWN0IHByb2ZpbGVfc3RyaW5nX2xpc3QgdmFsdWVzOworCisJaWYgKChyZXR2YWwgPSBwcm9maWxlX2l0ZXJhdG9yX2NyZWF0ZShwcm9maWxlLCBuYW1lcywKKwkJICAgUFJPRklMRV9JVEVSX0xJU1RfU0VDVElPTiB8IFBST0ZJTEVfSVRFUl9SRUxBVElPTlNfT05MWSwKKwkJICAgJnN0YXRlKSkpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoKHJldHZhbCA9IGluaXRfbGlzdCgmdmFsdWVzKSkpCisJCXJldHVybiByZXR2YWw7CisKKwlkbyB7CisJCWlmICgocmV0dmFsID0gcHJvZmlsZV9pdGVyYXRvcigmc3RhdGUsICZuYW1lLCAwKSkpCisJCQlnb3RvIGNsZWFudXA7CisJCWlmIChuYW1lKSB7CisJCQlpZiAoaXNfbGlzdF9tZW1iZXIoJnZhbHVlcywgbmFtZSkpCisJCQkJZnJlZShuYW1lKTsKKwkJCWVsc2UKKwkJCQlhZGRfdG9fbGlzdCgmdmFsdWVzLCBuYW1lKTsKKwkJfQorCX0gd2hpbGUgKHN0YXRlKTsKKworCWVuZF9saXN0KCZ2YWx1ZXMsIHJldF9uYW1lcyk7CisJcmV0dXJuIDA7CisKK2NsZWFudXA6CisJZW5kX2xpc3QoJnZhbHVlcywgMCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCit2b2lkCitwcm9maWxlX3JlbGVhc2Vfc3RyaW5nKGNoYXIgKnN0cikKK3sKKwlmcmVlKHN0cik7Cit9CisKK2VycmNvZGVfdAorcHJvZmlsZV9pbml0X3BhdGgoY29uc3QgY2hhciAqIGZpbGVwYXRoLAorCQkgIHByb2ZpbGVfdCAqcmV0X3Byb2ZpbGUpCit7CisJaW50IG5fZW50cmllcywgaTsKKwl1bnNpZ25lZCBpbnQgZW50X2xlbjsKKwljb25zdCBjaGFyICpzLCAqdDsKKwljaGFyICoqZmlsZW5hbWVzOworCWVycmNvZGVfdCByZXR2YWw7CisKKwkvKiBjb3VudCB0aGUgZGlzdGluY3QgZmlsZW5hbWUgY29tcG9uZW50cyAqLworCWZvcihzID0gZmlsZXBhdGgsIG5fZW50cmllcyA9IDE7ICpzOyBzKyspIHsKKwkJaWYgKCpzID09ICc6JykKKwkJCW5fZW50cmllcysrOworCX0KKworCS8qIHRoZSBhcnJheSBpcyBOVUxMIHRlcm1pbmF0ZWQgKi8KKwlmaWxlbmFtZXMgPSAoY2hhciAqKikgbWFsbG9jKChuX2VudHJpZXMrMSkgKiBzaXplb2YoY2hhciopKTsKKwlpZiAoZmlsZW5hbWVzID09IDApCisJCXJldHVybiBFTk9NRU07CisKKwkvKiBtZWFzdXJlLCBjb3B5LCBhbmQgc2tpcCBlYWNoIG9uZSAqLworCWZvcihzID0gZmlsZXBhdGgsIGk9MDsgKHQgPSBzdHJjaHIocywgJzonKSkgfHwgKHQ9cytzdHJsZW4ocykpOyBzPXQrMSwgaSsrKSB7CisJCWVudF9sZW4gPSB0LXM7CisJCWZpbGVuYW1lc1tpXSA9IChjaGFyKikgbWFsbG9jKGVudF9sZW4gKyAxKTsKKwkJaWYgKGZpbGVuYW1lc1tpXSA9PSAwKSB7CisJCQkvKiBpZiBtYWxsb2MgZmFpbHMsIGZyZWUgdGhlIG9uZXMgdGhhdCB3b3JrZWQgKi8KKwkJCXdoaWxlKC0taSA+PSAwKSBmcmVlKGZpbGVuYW1lc1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGZpbGVuYW1lcyk7CisJCQlyZXR1cm4gRU5PTUVNOworCQl9CisJCXN0cm5jcHkoZmlsZW5hbWVzW2ldLCBzLCBlbnRfbGVuKTsKKwkJZmlsZW5hbWVzW2ldW2VudF9sZW5dID0gMDsKKwkJaWYgKCp0ID09IDApIHsKKwkJCWkrKzsKKwkJCWJyZWFrOworCQl9CisJfQorCS8qIGNhcCB0aGUgYXJyYXkgKi8KKwlmaWxlbmFtZXNbaV0gPSAwOworCisJcmV0dmFsID0gcHJvZmlsZV9pbml0KChjb25zdCBjaGFyICoqKSBmaWxlbmFtZXMsCisJCQkgICAgICByZXRfcHJvZmlsZSk7CisKKwkvKiBjb3VudCBiYWNrIGRvd24gYW5kIGZyZWUgdGhlIGVudHJpZXMgKi8KKwl3aGlsZSgtLWkgPj0gMCkgZnJlZShmaWxlbmFtZXNbaV0pOworCWZyZWUoZmlsZW5hbWVzKTsKKworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9lMmZzY2svcHJvZmlsZV9oZWxwZXJzLmggYi9lMmZzY2svcHJvZmlsZV9oZWxwZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY2M2NhNQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9wcm9maWxlX2hlbHBlcnMuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogcHJvZmlsZV9oZWxwZXJzLmggLS0gRnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgcHJvZmlsZSBoZWxwZXIgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCitsb25nIHByb2ZpbGVfZ2V0X3ZhbHVlcworCShwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqY29uc3QgKm5hbWVzLCBjaGFyICoqKnJldF92YWx1ZXMpOworCit2b2lkIHByb2ZpbGVfZnJlZV9saXN0CisJKGNoYXIgKipsaXN0KTsKKworbG9uZyBwcm9maWxlX2dldF9yZWxhdGlvbl9uYW1lcworCShwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqKm5hbWVzLCBjaGFyICoqKnJldF9uYW1lcyk7CisKK2xvbmcgcHJvZmlsZV9nZXRfc3Vic2VjdGlvbl9uYW1lcworCShwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqKm5hbWVzLCBjaGFyICoqKnJldF9uYW1lcyk7CisKK3ZvaWQgcHJvZmlsZV9yZWxlYXNlX3N0cmluZyAoY2hhciAqc3RyKTsKKworbG9uZyBwcm9maWxlX2luaXRfcGF0aAorCShjb25zdCBjaGFyICogZmlsZWxpc3QsIHByb2ZpbGVfdCAqcmV0X3Byb2ZpbGUpOworCmRpZmYgLS1naXQgYS9lMmZzY2svcXVvdGEuYyBiL2UyZnNjay9xdW90YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YmJiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svcXVvdGEuYwpAQCAtMCwwICsxLDkyIEBACisvKgorICogcXVvdGEuYyAtLS0gY29kZSBmb3IgaGFuZGxpbmcgZXh0NCBxdW90YSBpbm9kZXMKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNkZWZpbmUgTU5UX0ZMIChNU19NR0NfVkFMIHwgTVNfUkRPTkxZKQorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZTJmc2NrLmgiCisjaW5jbHVkZSAicHJvYmxlbS5oIgorI2luY2x1ZGUgInF1b3RhL3F1b3RhaW8uaCIKKworc3RhdGljIHZvaWQgbW92ZV9xdW90YV9pbm9kZShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBmcm9tX2lubywKKwkJCSAgICAgZXh0Ml9pbm9fdCB0b19pbm8sIGludCBxdHlwZSkKK3sKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwljaGFyCQkJcWZfbmFtZVtRVU9UQV9OQU1FX0xFTl07CisKKwkvKiBXZSBuZWVkIHRoZSBpbm9kZSBiaXRtYXAgdG8gYmUgbG9hZGVkICovCisJaWYgKGV4dDJmc19yZWFkX2JpdG1hcHMoZnMpKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgZnJvbV9pbm8sICZpbm9kZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfcmVhZF9pbm9kZSIsIHJldHZhbCwgIiVzIiwKKwkJCV8oImluIG1vdmVfcXVvdGFfaW5vZGUiKSk7CisJCXJldHVybjsKKwl9CisKKwlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMTsKKwlpbm9kZS5pX21vZGUgPSBMSU5VWF9TX0lGUkVHIHwgMDYwMDsKKwlpbm9kZS5pX2ZsYWdzID0gRVhUMl9JTU1VVEFCTEVfRkw7CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkJCUVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKQorCQlpbm9kZS5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKworCXJldHZhbCA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZnMsIHRvX2lubywgJmlub2RlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJmc193cml0ZV9uZXdfaW5vZGUiLCByZXR2YWwsICIlcyIsCisJCQlfKCJpbiBtb3ZlX3F1b3RhX2lub2RlIikpOworCQlyZXR1cm47CisJfQorCisJLyogdW5saW5rIHRoZSBvbGQgaW5vZGUgKi8KKwlxdW90YV9nZXRfcWZfbmFtZShxdHlwZSwgUUZNVF9WRlNfVjEsIHFmX25hbWUpOworCWV4dDJmc191bmxpbmsoZnMsIEVYVDJfUk9PVF9JTk8sIHFmX25hbWUsIGZyb21faW5vLCAwKTsKKwlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMoZnMsIGZyb21faW5vLCAtMSk7CisJLyogQ2xlYXIgb3V0IHRoZSBvcmlnaW5hbCBpbm9kZSBpbiB0aGUgaW5vZGUtdGFibGUgYmxvY2suICovCisJbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSk7CisJZXh0MmZzX3dyaXRlX2lub2RlKGZzLCBmcm9tX2lubywgJmlub2RlKTsKK30KKwordm9pZCBlMmZzY2tfaGlkZV9xdW90YShlMmZzY2tfdCBjdHgpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiID0gY3R4LT5mcy0+c3VwZXI7CisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCWV4dDJfZmlsc3lzCQlmcyA9IGN0eC0+ZnM7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCisJaWYgKChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1JFQURPTkxZKSB8fAorCSAgICAhKHNiLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9RVU9UQSkpCisJCXJldHVybjsKKworCXBjdHguaW5vID0gc2ItPnNfdXNyX3F1b3RhX2ludW07CisJaWYgKHNiLT5zX3Vzcl9xdW90YV9pbnVtICYmCisJICAgIChzYi0+c191c3JfcXVvdGFfaW51bSAhPSBFWFQ0X1VTUl9RVU9UQV9JTk8pICYmCisJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9ISURFX1FVT1RBLCAmcGN0eCkpIHsKKwkJbW92ZV9xdW90YV9pbm9kZShmcywgc2ItPnNfdXNyX3F1b3RhX2ludW0sIEVYVDRfVVNSX1FVT1RBX0lOTywKKwkJCQkgVVNSUVVPVEEpOworCQlzYi0+c191c3JfcXVvdGFfaW51bSA9IEVYVDRfVVNSX1FVT1RBX0lOTzsKKwl9CisKKwlwY3R4LmlubyA9IHNiLT5zX2dycF9xdW90YV9pbnVtOworCWlmIChzYi0+c19ncnBfcXVvdGFfaW51bSAmJgorCSAgICAoc2ItPnNfZ3JwX3F1b3RhX2ludW0gIT0gRVhUNF9HUlBfUVVPVEFfSU5PKSAmJgorCSAgICBmaXhfcHJvYmxlbShjdHgsIFBSXzBfSElERV9RVU9UQSwgJnBjdHgpKSB7CisJCW1vdmVfcXVvdGFfaW5vZGUoZnMsIHNiLT5zX2dycF9xdW90YV9pbnVtLCBFWFQ0X0dSUF9RVU9UQV9JTk8sCisJCQkJIEdSUFFVT1RBKTsKKwkJc2ItPnNfZ3JwX3F1b3RhX2ludW0gPSBFWFQ0X0dSUF9RVU9UQV9JTk87CisJfQorCisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZTJmc2NrL3JlY292ZXJ5LmMgYi9lMmZzY2svcmVjb3ZlcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGU1YWUxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL3JlY292ZXJ5LmMKQEAgLTAsMCArMSw3NDkgQEAKKy8qCisgKiBsaW51eC9mcy9qYmQvcmVjb3ZlcnkuYworICoKKyAqIFdyaXR0ZW4gYnkgU3RlcGhlbiBDLiBUd2VlZGllIDxzY3RAcmVkaGF0LmNvbT4sIDE5OTkKKyAqCisgKiBDb3B5cmlnaHQgMTk5OS0yMDAwIFJlZCBIYXQgU29mdHdhcmUgLS0tIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGludXgga2VybmVsIGFuZCBpcyBtYWRlIGF2YWlsYWJsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBvciBhdCB5b3VyCisgKiBvcHRpb24sIGFueSBsYXRlciB2ZXJzaW9uLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKiBKb3VybmFsIHJlY292ZXJ5IHJvdXRpbmVzIGZvciB0aGUgZ2VuZXJpYyBmaWxlc3lzdGVtIGpvdXJuYWxpbmcgY29kZTsKKyAqIHBhcnQgb2YgdGhlIGV4dDJmcyBqb3VybmFsaW5nIHN5c3RlbS4KKyAqLworCisjaWZuZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJqZnNfdXNlci5oIgorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9qYmQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNlbmRpZgorCisvKgorICogTWFpbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2dyZXNzIG9mIHRoZSByZWNvdmVyeSBqb2IsIHNvIHRoYXQKKyAqIHRoZSBkaWZmZXJlbnQgcGFzc2VzIGNhbiBjYXJyeSBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZW0uCisgKi8KK3N0cnVjdCByZWNvdmVyeV9pbmZvCit7CisJdGlkX3QJCXN0YXJ0X3RyYW5zYWN0aW9uOworCXRpZF90CQllbmRfdHJhbnNhY3Rpb247CisKKwlpbnQJCW5yX3JlcGxheXM7CisJaW50CQlucl9yZXZva2VzOworCWludAkJbnJfcmV2b2tlX2hpdHM7Cit9OworCitlbnVtIHBhc3N0eXBlIHtQQVNTX1NDQU4sIFBBU1NfUkVWT0tFLCBQQVNTX1JFUExBWX07CitzdGF0aWMgaW50IGRvX29uZV9wYXNzKGpvdXJuYWxfdCAqam91cm5hbCwKKwkJCQlzdHJ1Y3QgcmVjb3ZlcnlfaW5mbyAqaW5mbywgZW51bSBwYXNzdHlwZSBwYXNzKTsKK3N0YXRpYyBpbnQgc2Nhbl9yZXZva2VfcmVjb3Jkcyhqb3VybmFsX3QgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosCisJCQkJdGlkX3QsIHN0cnVjdCByZWNvdmVyeV9pbmZvICopOworCisjaWZkZWYgX19LRVJORUxfXworCisvKiBSZWxlYXNlIHJlYWRhaGVhZCBidWZmZXJzIGFmdGVyIHVzZSAqLworc3RhdGljIHZvaWQgam91cm5hbF9icmVsc2VfYXJyYXkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiW10sIGludCBuKQoreworCXdoaWxlICgtLW4gPj0gMCkKKwkJYnJlbHNlIChiW25dKTsKK30KKworCisvKgorICogV2hlbiByZWFkaW5nIGZyb20gdGhlIGpvdXJuYWwsIHdlIGFyZSBnb2luZyB0aHJvdWdoIHRoZSBibG9jayBkZXZpY2UKKyAqIGxheWVyIGRpcmVjdGx5IGFuZCBzbyB0aGVyZSBpcyBubyByZWFkYWhlYWQgYmVpbmcgZG9uZSBmb3IgdXMuICBXZQorICogbmVlZCB0byBpbXBsZW1lbnQgYW55IHJlYWRhaGVhZCBvdXJzZWx2ZXMgaWYgd2Ugd2FudCBpdCB0byBoYXBwZW4gYXQKKyAqIGFsbC4gIFJlY292ZXJ5IGlzIGJhc2ljYWxseSBvbmUgbG9uZyBzZXF1ZW50aWFsIHJlYWQsIHNvIG1ha2Ugc3VyZSB3ZQorICogZG8gdGhlIElPIGluIHJlYXNvbmFibHkgbGFyZ2UgY2h1bmtzLgorICoKKyAqIFRoaXMgaXMgbm90IHNvIGNyaXRpY2FsIHRoYXQgd2UgbmVlZCB0byBiZSBlbm9ybW91c2x5IGNsZXZlciBhYm91dAorICogdGhlIHJlYWRhaGVhZCBzaXplLCB0aG91Z2guICAxMjhLIGlzIGEgcHVyZWx5IGFyYml0cmFyeSwgZ29vZC1lbm91Z2gKKyAqIGZpeGVkIHZhbHVlLgorICovCisKKyNkZWZpbmUgTUFYQlVGIDgKK3N0YXRpYyBpbnQgZG9fcmVhZGFoZWFkKGpvdXJuYWxfdCAqam91cm5hbCwgdW5zaWduZWQgaW50IHN0YXJ0KQoreworCWludCBlcnI7CisJdW5zaWduZWQgaW50IG1heCwgbmJ1ZnMsIG5leHQ7CisJdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrbnI7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKworCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJ1ZnNbTUFYQlVGXTsKKworCS8qIERvIHVwIHRvIDEyOEsgb2YgcmVhZGFoZWFkICovCisJbWF4ID0gc3RhcnQgKyAoMTI4ICogMTAyNCAvIGpvdXJuYWwtPmpfYmxvY2tzaXplKTsKKwlpZiAobWF4ID4gam91cm5hbC0+al9tYXhsZW4pCisJCW1heCA9IGpvdXJuYWwtPmpfbWF4bGVuOworCisJLyogRG8gdGhlIHJlYWRhaGVhZCBpdHNlbGYuICBXZSdsbCBzdWJtaXQgTUFYQlVGIGJ1ZmZlcl9oZWFkcyBhdAorCSAqIGEgdGltZSB0byB0aGUgYmxvY2sgZGV2aWNlIElPIGxheWVyLiAqLworCisJbmJ1ZnMgPSAwOworCisJZm9yIChuZXh0ID0gc3RhcnQ7IG5leHQgPCBtYXg7IG5leHQrKykgeworCQllcnIgPSBqb3VybmFsX2JtYXAoam91cm5hbCwgbmV4dCwgJmJsb2NrbnIpOworCisJCWlmIChlcnIpIHsKKwkJCXByaW50ayAoS0VSTl9FUlIgIkpCRDogYmFkIGJsb2NrIGF0IG9mZnNldCAldVxuIiwKKwkJCQluZXh0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJYmggPSBfX2dldGJsayhqb3VybmFsLT5qX2RldiwgYmxvY2tuciwgam91cm5hbC0+al9ibG9ja3NpemUpOworCQlpZiAoIWJoKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkgJiYgIWJ1ZmZlcl9sb2NrZWQoYmgpKSB7CisJCQlidWZzW25idWZzKytdID0gYmg7CisJCQlpZiAobmJ1ZnMgPT0gTUFYQlVGKSB7CisJCQkJbGxfcndfYmxvY2soUkVBRCwgbmJ1ZnMsIGJ1ZnMpOworCQkJCWpvdXJuYWxfYnJlbHNlX2FycmF5KGJ1ZnMsIG5idWZzKTsKKwkJCQluYnVmcyA9IDA7CisJCQl9CisJCX0gZWxzZQorCQkJYnJlbHNlKGJoKTsKKwl9CisKKwlpZiAobmJ1ZnMpCisJCWxsX3J3X2Jsb2NrKFJFQUQsIG5idWZzLCBidWZzKTsKKwllcnIgPSAwOworCitmYWlsZWQ6CisJaWYgKG5idWZzKQorCQlqb3VybmFsX2JyZWxzZV9hcnJheShidWZzLCBuYnVmcyk7CisJcmV0dXJuIGVycjsKK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworCisvKgorICogUmVhZCBhIGJsb2NrIGZyb20gdGhlIGpvdXJuYWwKKyAqLworCitzdGF0aWMgaW50IGpyZWFkKHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocCwgam91cm5hbF90ICpqb3VybmFsLAorCQkgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9ja25yOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisKKwkqYmhwID0gTlVMTDsKKworCWlmIChvZmZzZXQgPj0gam91cm5hbC0+al9tYXhsZW4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJKQkQ6IGNvcnJ1cHRlZCBqb3VybmFsIHN1cGVyYmxvY2tcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwllcnIgPSBqb3VybmFsX2JtYXAoam91cm5hbCwgb2Zmc2V0LCAmYmxvY2tucik7CisKKwlpZiAoZXJyKSB7CisJCXByaW50ayAoS0VSTl9FUlIgIkpCRDogYmFkIGJsb2NrIGF0IG9mZnNldCAldVxuIiwKKwkJCW9mZnNldCk7CisJCXJldHVybiBlcnI7CisJfQorCisJYmggPSBfX2dldGJsayhqb3VybmFsLT5qX2RldiwgYmxvY2tuciwgam91cm5hbC0+al9ibG9ja3NpemUpOworCWlmICghYmgpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7CisJCS8qIElmIHRoaXMgaXMgYSBicmFuZCBuZXcgYnVmZmVyLCBzdGFydCByZWFkYWhlYWQuCisgICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCB3ZSBhc3N1bWUgd2UgYXJlIGFscmVhZHkgcmVhZGluZyBpdC4gICovCisJCWlmICghYnVmZmVyX3JlcShiaCkpCisJCQlkb19yZWFkYWhlYWQoam91cm5hbCwgb2Zmc2V0KTsKKwkJd2FpdF9vbl9idWZmZXIoYmgpOworCX0KKworCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkgeworCQlwcmludGsgKEtFUk5fRVJSICJKQkQ6IEZhaWxlZCB0byByZWFkIGJsb2NrIGF0IG9mZnNldCAldVxuIiwKKwkJCW9mZnNldCk7CisJCWJyZWxzZShiaCk7CisJCXJldHVybiAtRUlPOworCX0KKworCSpiaHAgPSBiaDsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogQ291bnQgdGhlIG51bWJlciBvZiBpbi11c2UgdGFncyBpbiBhIGpvdXJuYWwgZGVzY3JpcHRvciBibG9jay4KKyAqLworCitzdGF0aWMgaW50IGNvdW50X3RhZ3Moam91cm5hbF90ICpqb3VybmFsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWNoYXIgKgkJCXRhZ3A7CisJam91cm5hbF9ibG9ja190YWdfdCAqCXRhZzsKKwlpbnQJCQluciA9IDAsIHNpemUgPSBqb3VybmFsLT5qX2Jsb2Nrc2l6ZTsKKwlpbnQJCQl0YWdfYnl0ZXMgPSBqb3VybmFsX3RhZ19ieXRlcyhqb3VybmFsKTsKKworCXRhZ3AgPSAmYmgtPmJfZGF0YVtzaXplb2Yoam91cm5hbF9oZWFkZXJfdCldOworCisJd2hpbGUgKCh0YWdwIC0gYmgtPmJfZGF0YSArIHRhZ19ieXRlcykgPD0gc2l6ZSkgeworCQl0YWcgPSAoam91cm5hbF9ibG9ja190YWdfdCAqKSB0YWdwOworCisJCW5yKys7CisJCXRhZ3AgKz0gdGFnX2J5dGVzOworCQlpZiAoISh0YWctPnRfZmxhZ3MgJiBjcHVfdG9fYmUzMihKRlNfRkxBR19TQU1FX1VVSUQpKSkKKwkJCXRhZ3AgKz0gMTY7CisKKwkJaWYgKHRhZy0+dF9mbGFncyAmIGNwdV90b19iZTMyKEpGU19GTEFHX0xBU1RfVEFHKSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBucjsKK30KKworCisvKiBNYWtlIHN1cmUgd2Ugd3JhcCBhcm91bmQgdGhlIGxvZyBjb3JyZWN0bHkhICovCisjZGVmaW5lIHdyYXAoam91cm5hbCwgdmFyKQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHZhciA+PSAoam91cm5hbCktPmpfbGFzdCkJCQkJCVwKKwkJdmFyIC09ICgoam91cm5hbCktPmpfbGFzdCAtIChqb3VybmFsKS0+al9maXJzdCk7CVwKK30gd2hpbGUgKDApCisKKy8qKgorICogam91cm5hbF9yZWNvdmVyIC0gcmVjb3ZlcnMgYSBvbi1kaXNrIGpvdXJuYWwKKyAqIEBqb3VybmFsOiB0aGUgam91cm5hbCB0byByZWNvdmVyCisgKgorICogVGhlIHByaW1hcnkgZnVuY3Rpb24gZm9yIHJlY292ZXJpbmcgdGhlIGxvZyBjb250ZW50cyB3aGVuIG1vdW50aW5nIGEKKyAqIGpvdXJuYWxlZCBkZXZpY2UuCisgKgorICogUmVjb3ZlcnkgaXMgZG9uZSBpbiB0aHJlZSBwYXNzZXMuICBJbiB0aGUgZmlyc3QgcGFzcywgd2UgbG9vayBmb3IgdGhlCisgKiBlbmQgb2YgdGhlIGxvZy4gIEluIHRoZSBzZWNvbmQsIHdlIGFzc2VtYmxlIHRoZSBsaXN0IG9mIHJldm9rZQorICogYmxvY2tzLiAgSW4gdGhlIHRoaXJkIGFuZCBmaW5hbCBwYXNzLCB3ZSByZXBsYXkgYW55IHVuLXJldm9rZWQgYmxvY2tzCisgKiBpbiB0aGUgbG9nLgorICovCitpbnQgam91cm5hbF9yZWNvdmVyKGpvdXJuYWxfdCAqam91cm5hbCkKK3sKKwlpbnQJCQllcnI7CisJam91cm5hbF9zdXBlcmJsb2NrX3QgKglzYjsKKworCXN0cnVjdCByZWNvdmVyeV9pbmZvCWluZm87CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJc2IgPSBqb3VybmFsLT5qX3N1cGVyYmxvY2s7CisKKwkvKgorCSAqIFRoZSBqb3VybmFsIHN1cGVyYmxvY2sncyBzX3N0YXJ0IGZpZWxkICh0aGUgY3VycmVudCBsb2cgaGVhZCkKKwkgKiBpcyBhbHdheXMgemVybyBpZiwgYW5kIG9ubHkgaWYsIHRoZSBqb3VybmFsIHdhcyBjbGVhbmx5CisJICogdW5tb3VudGVkLgorCSAqLworCisJaWYgKCFzYi0+c19zdGFydCkgeworCQlqYmRfZGVidWcoMSwgIk5vIHJlY292ZXJ5IHJlcXVpcmVkLCBsYXN0IHRyYW5zYWN0aW9uICVkXG4iLAorCQkJICBiZTMyX3RvX2NwdShzYi0+c19zZXF1ZW5jZSkpOworCQlqb3VybmFsLT5qX3RyYW5zYWN0aW9uX3NlcXVlbmNlID0gYmUzMl90b19jcHUoc2ItPnNfc2VxdWVuY2UpICsgMTsKKwkJcmV0dXJuIDA7CisJfQorCisJZXJyID0gZG9fb25lX3Bhc3Moam91cm5hbCwgJmluZm8sIFBBU1NfU0NBTik7CisJaWYgKCFlcnIpCisJCWVyciA9IGRvX29uZV9wYXNzKGpvdXJuYWwsICZpbmZvLCBQQVNTX1JFVk9LRSk7CisJaWYgKCFlcnIpCisJCWVyciA9IGRvX29uZV9wYXNzKGpvdXJuYWwsICZpbmZvLCBQQVNTX1JFUExBWSk7CisKKwlqYmRfZGVidWcoMSwgIkpCRDogcmVjb3ZlcnksIGV4aXQgc3RhdHVzICVkLCAiCisJCSAgInJlY292ZXJlZCB0cmFuc2FjdGlvbnMgJXUgdG8gJXVcbiIsCisJCSAgZXJyLCBpbmZvLnN0YXJ0X3RyYW5zYWN0aW9uLCBpbmZvLmVuZF90cmFuc2FjdGlvbik7CisJamJkX2RlYnVnKDEsICJKQkQ6IFJlcGxheWVkICVkIGFuZCByZXZva2VkICVkLyVkIGJsb2Nrc1xuIiwKKwkJICBpbmZvLm5yX3JlcGxheXMsIGluZm8ubnJfcmV2b2tlX2hpdHMsIGluZm8ubnJfcmV2b2tlcyk7CisKKwkvKiBSZXN0YXJ0IHRoZSBsb2cgYXQgdGhlIG5leHQgdHJhbnNhY3Rpb24gSUQsIHRodXMgaW52YWxpZGF0aW5nCisJICogYW55IGV4aXN0aW5nIGNvbW1pdCByZWNvcmRzIGluIHRoZSBsb2cuICovCisJam91cm5hbC0+al90cmFuc2FjdGlvbl9zZXF1ZW5jZSA9ICsraW5mby5lbmRfdHJhbnNhY3Rpb247CisKKwlqb3VybmFsX2NsZWFyX3Jldm9rZShqb3VybmFsKTsKKwlzeW5jX2Jsb2NrZGV2KGpvdXJuYWwtPmpfZnNfZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGpvdXJuYWxfc2tpcF9yZWNvdmVyeSAtIFN0YXJ0IGpvdXJuYWwgYW5kIHdpcGUgZXhpdGluZyByZWNvcmRzCisgKiBAam91cm5hbDogam91cm5hbCB0byBzdGFydHVwCisgKgorICogTG9jYXRlIGFueSB2YWxpZCByZWNvdmVyeSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBqb3VybmFsIGFuZCBzZXQgdXAgdGhlCisgKiBqb3VybmFsIHN0cnVjdHVyZXMgaW4gbWVtb3J5IHRvIGlnbm9yZSBpdCAocHJlc3VtYWJseSBiZWNhdXNlIHRoZQorICogY2FsbGVyIGhhcyBldmlkZW5jZSB0aGF0IGl0IGlzIG91dCBvZiBkYXRlKS4KKyAqIFRoaXMgZnVuY3Rpb24gZG9lcydudCBhcHBlYXIgdG8gYmUgZXhvcnRlZC4uCisgKgorICogV2UgcGVyZm9ybSBvbmUgcGFzcyBvdmVyIHRoZSBqb3VybmFsIHRvIGFsbG93IHVzIHRvIHRlbGwgdGhlIHVzZXIgaG93CisgKiBtdWNoIHJlY292ZXJ5IGluZm9ybWF0aW9uIGlzIGJlaW5nIGVyYXNlZCwgYW5kIHRvIGxldCB1cyBpbml0aWFsaXNlCisgKiB0aGUgam91cm5hbCB0cmFuc2FjdGlvbiBzZXF1ZW5jZSBudW1iZXJzIHRvIHRoZSBuZXh0IHVudXNlZCBJRC4KKyAqLworaW50IGpvdXJuYWxfc2tpcF9yZWNvdmVyeShqb3VybmFsX3QgKmpvdXJuYWwpCit7CisJaW50CQkJZXJyOworCXN0cnVjdCByZWNvdmVyeV9pbmZvCWluZm87CisKKwltZW1zZXQgKCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOworCisJZXJyID0gZG9fb25lX3Bhc3Moam91cm5hbCwgJmluZm8sIFBBU1NfU0NBTik7CisKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSkJEOiBlcnJvciAlZCBzY2FubmluZyBqb3VybmFsXG4iLCBlcnIpOworCQkrK2pvdXJuYWwtPmpfdHJhbnNhY3Rpb25fc2VxdWVuY2U7CisJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCisJCWpvdXJuYWxfc3VwZXJibG9ja190ICpzYiA9IGpvdXJuYWwtPmpfc3VwZXJibG9jazsKKworCQlpbnQgZHJvcHBlZCA9IGluZm8uZW5kX3RyYW5zYWN0aW9uIC0gYmUzMl90b19jcHUoc2ItPnNfc2VxdWVuY2UpOworI2VuZGlmCisJCWpiZF9kZWJ1ZygxLAorCQkJICAiSkJEOiBpZ25vcmluZyAlZCB0cmFuc2FjdGlvbiVzIGZyb20gdGhlIGpvdXJuYWwuXG4iLAorCQkJICBkcm9wcGVkLCAoZHJvcHBlZCA9PSAxKSA/ICIiIDogInMiKTsKKwkJam91cm5hbC0+al90cmFuc2FjdGlvbl9zZXF1ZW5jZSA9ICsraW5mby5lbmRfdHJhbnNhY3Rpb247CisJfQorCisJam91cm5hbC0+al90YWlsID0gMDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyByZWFkX3RhZ19ibG9jayhpbnQgdGFnX2J5dGVzLCBqb3VybmFsX2Jsb2NrX3RhZ190ICp0YWcpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrID0gYmUzMl90b19jcHUodGFnLT50X2Jsb2NrbnIpOworCWlmICh0YWdfYnl0ZXMgPiBKQkRfVEFHX1NJWkUzMikKKwkJYmxvY2sgfD0gKF9fdTY0KWJlMzJfdG9fY3B1KHRhZy0+dF9ibG9ja25yX2hpZ2gpIDw8IDMyOworCXJldHVybiBibG9jazsKK30KKworLyoKKyAqIGNhbGNfY2hrc3VtcyBjYWxjdWxhdGVzIHRoZSBjaGVja3N1bXMgZm9yIHRoZSBibG9ja3MgZGVzY3JpYmVkIGluIHRoZQorICogZGVzY3JpcHRvciBibG9jay4KKyAqLworc3RhdGljIGludCBjYWxjX2Noa3N1bXMoam91cm5hbF90ICpqb3VybmFsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJdW5zaWduZWQgbG9uZyBsb25nICpuZXh0X2xvZ19ibG9jaywgX191MzIgKmNyYzMyX3N1bSkKK3sKKwlpbnQgaSwgbnVtX2Jsa3MsIGVycjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgaW9fYmxvY2s7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpvYmg7CisKKwludW1fYmxrcyA9IGNvdW50X3RhZ3Moam91cm5hbCwgYmgpOworCS8qIENhbGN1bGF0ZSBjaGVja3N1bSBvZiB0aGUgZGVzY3JpcHRvciBibG9jay4gKi8KKwkqY3JjMzJfc3VtID0gY3JjMzJfYmUoKmNyYzMyX3N1bSwgKHZvaWQgKiliaC0+Yl9kYXRhLCBiaC0+Yl9zaXplKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fYmxrczsgaSsrKSB7CisJCWlvX2Jsb2NrID0gKCpuZXh0X2xvZ19ibG9jaykrKzsKKwkJd3JhcChqb3VybmFsLCAqbmV4dF9sb2dfYmxvY2spOworCQllcnIgPSBqcmVhZCgmb2JoLCBqb3VybmFsLCBpb19ibG9jayk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiSkJEOiBJTyBlcnJvciAlZCByZWNvdmVyaW5nIGJsb2NrICIKKwkJCQkiJWxsdSBpbiBsb2dcbiIsIGVyciwgaW9fYmxvY2spOworCQkJcmV0dXJuIDE7CisJCX0gZWxzZSB7CisJCQkqY3JjMzJfc3VtID0gY3JjMzJfYmUoKmNyYzMyX3N1bSwgKHZvaWQgKilvYmgtPmJfZGF0YSwKKwkJCQkgICAgIG9iaC0+Yl9zaXplKTsKKwkJfQorCQlicmVsc2Uob2JoKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG9fb25lX3Bhc3Moam91cm5hbF90ICpqb3VybmFsLAorCQkJc3RydWN0IHJlY292ZXJ5X2luZm8gKmluZm8sIGVudW0gcGFzc3R5cGUgcGFzcykKK3sKKwl1bnNpZ25lZCBpbnQJCWZpcnN0X2NvbW1pdF9JRCwgbmV4dF9jb21taXRfSUQ7CisJdW5zaWduZWQgbG9uZyBsb25nCW5leHRfbG9nX2Jsb2NrOworCWludAkJCWVyciwgc3VjY2VzcyA9IDA7CisJam91cm5hbF9zdXBlcmJsb2NrX3QgKglzYjsKKwlqb3VybmFsX2hlYWRlcl90ICoJdG1wOworCXN0cnVjdCBidWZmZXJfaGVhZCAqCWJoOworCXVuc2lnbmVkIGludAkJc2VxdWVuY2U7CisJaW50CQkJYmxvY2t0eXBlOworCWludAkJCXRhZ19ieXRlcyA9IGpvdXJuYWxfdGFnX2J5dGVzKGpvdXJuYWwpOworCV9fdTMyCQkJY3JjMzJfc3VtID0gfjA7IC8qIFRyYW5zYWN0aW9uYWwgQ2hlY2tzdW1zICovCisKKwkvKgorCSAqIEZpcnN0IHRoaW5nIGlzIHRvIGVzdGFibGlzaCB3aGF0IHdlIGV4cGVjdCB0byBmaW5kIGluIHRoZSBsb2cKKwkgKiAoaW4gdGVybXMgb2YgdHJhbnNhY3Rpb24gSURzKSwgYW5kIHdoZXJlIChpbiB0ZXJtcyBvZiBsb2cKKwkgKiBibG9jayBvZmZzZXRzKTogcXVlcnkgdGhlIHN1cGVyYmxvY2suCisJICovCisKKwlzYiA9IGpvdXJuYWwtPmpfc3VwZXJibG9jazsKKwluZXh0X2NvbW1pdF9JRCA9IGJlMzJfdG9fY3B1KHNiLT5zX3NlcXVlbmNlKTsKKwluZXh0X2xvZ19ibG9jayA9IGJlMzJfdG9fY3B1KHNiLT5zX3N0YXJ0KTsKKworCWZpcnN0X2NvbW1pdF9JRCA9IG5leHRfY29tbWl0X0lEOworCWlmIChwYXNzID09IFBBU1NfU0NBTikKKwkJaW5mby0+c3RhcnRfdHJhbnNhY3Rpb24gPSBmaXJzdF9jb21taXRfSUQ7CisKKwlqYmRfZGVidWcoMSwgIlN0YXJ0aW5nIHJlY292ZXJ5IHBhc3MgJWRcbiIsIHBhc3MpOworCisJLyoKKwkgKiBOb3cgd2Ugd2FsayB0aHJvdWdoIHRoZSBsb2csIHRyYW5zYWN0aW9uIGJ5IHRyYW5zYWN0aW9uLAorCSAqIG1ha2luZyBzdXJlIHRoYXQgZWFjaCB0cmFuc2FjdGlvbiBoYXMgYSBjb21taXQgYmxvY2sgaW4gdGhlCisJICogZXhwZWN0ZWQgcGxhY2UuICBFYWNoIGNvbXBsZXRlIHRyYW5zYWN0aW9uIGdldHMgcmVwbGF5ZWQgYmFjaworCSAqIGludG8gdGhlIG1haW4gZmlsZXN5c3RlbS4KKwkgKi8KKworCXdoaWxlICgxKSB7CisJCWludAkJCWZsYWdzOworCQljaGFyICoJCQl0YWdwOworCQlqb3VybmFsX2Jsb2NrX3RhZ190ICoJdGFnOworCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKglvYmg7CisJCXN0cnVjdCBidWZmZXJfaGVhZCAqCW5iaDsKKworCQljb25kX3Jlc2NoZWQoKTsKKworCQkvKiBJZiB3ZSBhbHJlYWR5IGtub3cgd2hlcmUgdG8gc3RvcCB0aGUgbG9nIHRyYXZlcnNhbCwKKwkJICogY2hlY2sgcmlnaHQgbm93IHRoYXQgd2UgaGF2ZW4ndCBnb25lIHBhc3QgdGhlIGVuZCBvZgorCQkgKiB0aGUgbG9nLiAqLworCisJCWlmIChwYXNzICE9IFBBU1NfU0NBTikKKwkJCWlmICh0aWRfZ2VxKG5leHRfY29tbWl0X0lELCBpbmZvLT5lbmRfdHJhbnNhY3Rpb24pKQorCQkJCWJyZWFrOworCisJCWpiZF9kZWJ1ZygyLCAiU2Nhbm5pbmcgZm9yIHNlcXVlbmNlIElEICV1IGF0ICVsbHUvJWx1XG4iLAorCQkJICBuZXh0X2NvbW1pdF9JRCwgbmV4dF9sb2dfYmxvY2ssIGpvdXJuYWwtPmpfbGFzdCk7CisKKwkJLyogU2tpcCBvdmVyIGVhY2ggY2h1bmsgb2YgdGhlIHRyYW5zYWN0aW9uIGxvb2tpbmcKKwkJICogZWl0aGVyIHRoZSBuZXh0IGRlc2NyaXB0b3IgYmxvY2sgb3IgdGhlIGZpbmFsIGNvbW1pdAorCQkgKiByZWNvcmQuICovCisKKwkJamJkX2RlYnVnKDMsICJKQkQ6IGNoZWNraW5nIGJsb2NrICVsbHVcbiIsIG5leHRfbG9nX2Jsb2NrKTsKKwkJZXJyID0ganJlYWQoJmJoLCBqb3VybmFsLCBuZXh0X2xvZ19ibG9jayk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZhaWxlZDsKKworCQluZXh0X2xvZ19ibG9jaysrOworCQl3cmFwKGpvdXJuYWwsIG5leHRfbG9nX2Jsb2NrKTsKKworCQkvKiBXaGF0IGtpbmQgb2YgYnVmZmVyIGlzIGl0PworCQkgKgorCQkgKiBJZiBpdCBpcyBhIGRlc2NyaXB0b3IgYmxvY2ssIGNoZWNrIHRoYXQgaXQgaGFzIHRoZQorCQkgKiBleHBlY3RlZCBzZXF1ZW5jZSBudW1iZXIuICBPdGhlcndpc2UsIHdlJ3JlIGFsbCBkb25lCisJCSAqIGhlcmUuICovCisKKwkJdG1wID0gKGpvdXJuYWxfaGVhZGVyX3QgKiliaC0+Yl9kYXRhOworCisJCWlmICh0bXAtPmhfbWFnaWMgIT0gY3B1X3RvX2JlMzIoSkZTX01BR0lDX05VTUJFUikpIHsKKwkJCWJyZWxzZShiaCk7CisJCQlicmVhazsKKwkJfQorCisJCWJsb2NrdHlwZSA9IGJlMzJfdG9fY3B1KHRtcC0+aF9ibG9ja3R5cGUpOworCQlzZXF1ZW5jZSA9IGJlMzJfdG9fY3B1KHRtcC0+aF9zZXF1ZW5jZSk7CisJCWpiZF9kZWJ1ZygzLCAiRm91bmQgbWFnaWMgJWQsIHNlcXVlbmNlICVkXG4iLAorCQkJICBibG9ja3R5cGUsIHNlcXVlbmNlKTsKKworCQlpZiAoc2VxdWVuY2UgIT0gbmV4dF9jb21taXRfSUQpIHsKKwkJCWJyZWxzZShiaCk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIE9LLCB3ZSBoYXZlIGEgdmFsaWQgZGVzY3JpcHRvciBibG9jayB3aGljaCBtYXRjaGVzCisJCSAqIGFsbCBvZiB0aGUgc2VxdWVuY2UgbnVtYmVyIGNoZWNrcy4gIFdoYXQgYXJlIHdlIGdvaW5nCisJCSAqIHRvIGRvIHdpdGggaXQ/ICBUaGF0IGRlcGVuZHMgb24gdGhlIHBhc3MuLi4gKi8KKworCQlzd2l0Y2goYmxvY2t0eXBlKSB7CisJCWNhc2UgSkZTX0RFU0NSSVBUT1JfQkxPQ0s6CisJCQkvKiBJZiBpdCBpcyBhIHZhbGlkIGRlc2NyaXB0b3IgYmxvY2ssIHJlcGxheSBpdAorCQkJICogaW4gcGFzcyBSRVBMQVk7IGlmIGpvdXJuYWxfY2hlY2tzdW1zIGVuYWJsZWQsIHRoZW4KKwkJCSAqIGNhbGN1bGF0ZSBjaGVja3N1bXMgaW4gUEFTU19TQ0FOLCBvdGhlcndpc2UsCisJCQkgKiBqdXN0IHNraXAgb3ZlciB0aGUgYmxvY2tzIGl0IGRlc2NyaWJlcy4gKi8KKwkJCWlmIChwYXNzICE9IFBBU1NfUkVQTEFZKSB7CisJCQkJaWYgKHBhc3MgPT0gUEFTU19TQ0FOICYmCisJCQkJICAgIEpGU19IQVNfQ09NUEFUX0ZFQVRVUkUoam91cm5hbCwKKwkJCQkJICAgIEpGU19GRUFUVVJFX0NPTVBBVF9DSEVDS1NVTSkgJiYKKwkJCQkgICAgIWluZm8tPmVuZF90cmFuc2FjdGlvbikgeworCQkJCQlpZiAoY2FsY19jaGtzdW1zKGpvdXJuYWwsIGJoLAorCQkJCQkJCSZuZXh0X2xvZ19ibG9jaywKKwkJCQkJCQkmY3JjMzJfc3VtKSkgeworCQkJCQkJYnJlbHNlKGJoKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWJyZWxzZShiaCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQluZXh0X2xvZ19ibG9jayArPSBjb3VudF90YWdzKGpvdXJuYWwsIGJoKTsKKwkJCQl3cmFwKGpvdXJuYWwsIG5leHRfbG9nX2Jsb2NrKTsKKwkJCQlicmVsc2UoYmgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBBIGRlc2NyaXB0b3IgYmxvY2s6IHdlIGNhbiBub3cgd3JpdGUgYWxsIG9mCisJCQkgKiB0aGUgZGF0YSBibG9ja3MuICBZYXksIHVzZWZ1bCB3b3JrIGlzIGZpbmFsbHkKKwkJCSAqIGdldHRpbmcgZG9uZSBoZXJlISAqLworCisJCQl0YWdwID0gJmJoLT5iX2RhdGFbc2l6ZW9mKGpvdXJuYWxfaGVhZGVyX3QpXTsKKwkJCXdoaWxlICgodGFncCAtIGJoLT5iX2RhdGEgKyB0YWdfYnl0ZXMpCisJCQkgICAgICAgPD0gam91cm5hbC0+al9ibG9ja3NpemUpIHsKKwkJCQl1bnNpZ25lZCBsb25nIGxvbmcgaW9fYmxvY2s7CisKKwkJCQl0YWcgPSAoam91cm5hbF9ibG9ja190YWdfdCAqKSB0YWdwOworCQkJCWZsYWdzID0gYmUzMl90b19jcHUodGFnLT50X2ZsYWdzKTsKKworCQkJCWlvX2Jsb2NrID0gbmV4dF9sb2dfYmxvY2srKzsKKwkJCQl3cmFwKGpvdXJuYWwsIG5leHRfbG9nX2Jsb2NrKTsKKwkJCQllcnIgPSBqcmVhZCgmb2JoLCBqb3VybmFsLCBpb19ibG9jayk7CisJCQkJaWYgKGVycikgeworCQkJCQkvKiBSZWNvdmVyIHdoYXQgd2UgY2FuLCBidXQKKwkJCQkJICogcmVwb3J0IGZhaWx1cmUgYXQgdGhlIGVuZC4gKi8KKwkJCQkJc3VjY2VzcyA9IGVycjsKKwkJCQkJcHJpbnRrIChLRVJOX0VSUgorCQkJCQkJIkpCRDogSU8gZXJyb3IgJWQgcmVjb3ZlcmluZyAiCisJCQkJCQkiYmxvY2sgJWxsdSBpbiBsb2dcbiIsCisJCQkJCQllcnIsIGlvX2Jsb2NrKTsKKwkJCQl9IGVsc2UgeworCQkJCQl1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2tucjsKKworCQkJCQlKX0FTU0VSVChvYmggIT0gTlVMTCk7CisJCQkJCWJsb2NrbnIgPSByZWFkX3RhZ19ibG9jayh0YWdfYnl0ZXMsCisJCQkJCQkJCSB0YWcpOworCisJCQkJCS8qIElmIHRoZSBibG9jayBoYXMgYmVlbgorCQkJCQkgKiByZXZva2VkLCB0aGVuIHdlJ3JlIGFsbCBkb25lCisJCQkJCSAqIGhlcmUuICovCisJCQkJCWlmIChqb3VybmFsX3Rlc3RfcmV2b2tlCisJCQkJCSAgICAoam91cm5hbCwgYmxvY2tuciwKKwkJCQkJICAgICBuZXh0X2NvbW1pdF9JRCkpIHsKKwkJCQkJCWJyZWxzZShvYmgpOworCQkJCQkJKytpbmZvLT5ucl9yZXZva2VfaGl0czsKKwkJCQkJCWdvdG8gc2tpcF93cml0ZTsKKwkJCQkJfQorCisJCQkJCS8qIEZpbmQgYSBidWZmZXIgZm9yIHRoZSBuZXcKKwkJCQkJICogZGF0YSBiZWluZyByZXN0b3JlZCAqLworCQkJCQluYmggPSBfX2dldGJsayhqb3VybmFsLT5qX2ZzX2RldiwKKwkJCQkJCQlibG9ja25yLAorCQkJCQkJCWpvdXJuYWwtPmpfYmxvY2tzaXplKTsKKwkJCQkJaWYgKG5iaCA9PSBOVUxMKSB7CisJCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJCSAgICAgICAiSkJEOiBPdXQgb2YgbWVtb3J5ICIKKwkJCQkJCSAgICAgICAiZHVyaW5nIHJlY292ZXJ5LlxuIik7CisJCQkJCQllcnIgPSAtRU5PTUVNOworCQkJCQkJYnJlbHNlKGJoKTsKKwkJCQkJCWJyZWxzZShvYmgpOworCQkJCQkJZ290byBmYWlsZWQ7CisJCQkJCX0KKworCQkJCQlsb2NrX2J1ZmZlcihuYmgpOworCQkJCQltZW1jcHkobmJoLT5iX2RhdGEsIG9iaC0+Yl9kYXRhLAorCQkJCQkJCWpvdXJuYWwtPmpfYmxvY2tzaXplKTsKKwkJCQkJaWYgKGZsYWdzICYgSkZTX0ZMQUdfRVNDQVBFKSB7CisJCQkJCQlqb3VybmFsX2hlYWRlcl90ICpoZWFkZXI7CisKKwkJCQkJCWhlYWRlciA9IChqb3VybmFsX2hlYWRlcl90ICopICZuYmgtPmJfZGF0YVswXTsKKwkJCQkJCWhlYWRlci0+aF9tYWdpYyA9IGNwdV90b19iZTMyKEpGU19NQUdJQ19OVU1CRVIpOworCQkJCQl9CisKKwkJCQkJQlVGRkVSX1RSQUNFKG5iaCwgIm1hcmtpbmcgZGlydHkiKTsKKwkJCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShuYmgpOworCQkJCQltYXJrX2J1ZmZlcl9kaXJ0eShuYmgpOworCQkJCQlCVUZGRVJfVFJBQ0UobmJoLCAibWFya2luZyB1cHRvZGF0ZSIpOworCQkJCQkrK2luZm8tPm5yX3JlcGxheXM7CisJCQkJCS8qIGxsX3J3X2Jsb2NrKFdSSVRFLCAxLCAmbmJoKTsgKi8KKwkJCQkJdW5sb2NrX2J1ZmZlcihuYmgpOworCQkJCQlicmVsc2Uob2JoKTsKKwkJCQkJYnJlbHNlKG5iaCk7CisJCQkJfQorCisJCQlza2lwX3dyaXRlOgorCQkJCXRhZ3AgKz0gdGFnX2J5dGVzOworCQkJCWlmICghKGZsYWdzICYgSkZTX0ZMQUdfU0FNRV9VVUlEKSkKKwkJCQkJdGFncCArPSAxNjsKKworCQkJCWlmIChmbGFncyAmIEpGU19GTEFHX0xBU1RfVEFHKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJYnJlbHNlKGJoKTsKKwkJCWNvbnRpbnVlOworCisJCWNhc2UgSkZTX0NPTU1JVF9CTE9DSzoKKwkJCWpiZF9kZWJ1ZygzLCAiQ29tbWl0IGJsb2NrIGZvciAjJXUgZm91bmRcbiIsCisJCQkJICBuZXh0X2NvbW1pdF9JRCk7CisJCQkvKiAgICAgSG93IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBpbnRlcnJ1cHRlZCBjb21taXQKKwkJCSAqICAgICAgICAgICAgICAgYW5kIGpvdXJuYWwgY29ycnVwdGlvbiA/CisJCQkgKgorCQkJICoge250aCB0cmFuc2FjdGlvbn0KKwkJCSAqICAgICAgICBDaGVja3N1bSBWZXJpZmljYXRpb24gRmFpbGVkCisJCQkgKgkJCSB8CisJCQkgKgkJIF9fX19fX19fX19fX19fX19fX19fCisJCQkgKgkJfAkJICAgICB8CisJCQkgKiAJYXN5bmNfY29tbWl0ICAgICAgICAgICAgIHN5bmNfY29tbWl0CisJCQkgKiAgICAgCQl8ICAgICAgICAgICAgICAgICAgICB8CisJCQkgKgkJfCBHTyBUTyBORVhUICAgICJKb3VybmFsIENvcnJ1cHRpb24iCisJCQkgKgkJfCBUUkFOU0FDVElPTgorCQkJICoJCXwKKwkJCSAqIHsobisxKXRoIHRyYW5zYW5jdGlvbn0KKwkJCSAqCQl8CisJCQkgKiAJIF9fX19fX198X19fX19fX19fX19fX18KKwkJCSAqIAl8CSAJICAgICAgfAorCQkJICogQ29tbWl0IGJsb2NrIGZvdW5kCUNvbW1pdCBibG9jayBub3QgZm91bmQKKwkJCSAqICAgICAgfAkJICAgICAgfAorCQkJICogIkpvdXJuYWwgQ29ycnVwdGlvbiIgICAgICAgfAorCQkJICoJCSBfX19fX19fX19fX19ffF9fX19fX19fXworCQkJICogICAgIAkJfAkgICAgICAgICAgIAl8CisJCQkgKgludGggdHJhbnMgY29ycnVwdAlPUiAgIG50aCB0cmFucworCQkJICoJYW5kIChuKzEpdGggaW50ZXJydXB0ZWQgICAgIGludGVycnVwdGVkCisJCQkgKgliZWZvcmUgY29tbWl0IGJsb2NrCisJCQkgKiAgICAgIGNvdWxkIHJlYWNoIHRoZSBkaXNrLgorCQkJICoJKENhbm5vdCBmaW5kIHRoZSBkaWZmZXJlbmNlIGluIGFib3ZlCisJCQkgKgkgbWVudGlvbmVkIGNvbmRpdGlvbnMuIEhlbmNlIGFzc3VtZQorCQkJICoJICJJbnRlcnJ1cHRlZCBDb21taXQiLikKKwkJCSAqLworCisJCQkvKiBGb3VuZCBhbiBleHBlY3RlZCBjb21taXQgYmxvY2s6IGlmIGNoZWNrc3VtcworCQkJICogYXJlIHByZXNlbnQgdmVyaWZ5IHRoZW0gaW4gUEFTU19TQ0FOOyBlbHNlIG5vdAorCQkJICogbXVjaCB0byBkbyBvdGhlciB0aGFuIG1vdmUgb24gdG8gdGhlIG5leHQgc2VxdWVuY2UKKwkJCSAqIG51bWJlci4gKi8KKwkJCWlmIChwYXNzID09IFBBU1NfU0NBTiAmJgorCQkJICAgIEpGU19IQVNfQ09NUEFUX0ZFQVRVUkUoam91cm5hbCwKKwkJCQkgICAgSkZTX0ZFQVRVUkVfQ09NUEFUX0NIRUNLU1VNKSkgeworCQkJCWludCBjaGtzdW1fZXJyLCBjaGtzdW1fc2VlbjsKKwkJCQlzdHJ1Y3QgY29tbWl0X2hlYWRlciAqY2JoID0KKwkJCQkJKHN0cnVjdCBjb21taXRfaGVhZGVyICopYmgtPmJfZGF0YTsKKwkJCQl1bnNpZ25lZCBmb3VuZF9jaGtzdW0gPQorCQkJCQliZTMyX3RvX2NwdShjYmgtPmhfY2hrc3VtWzBdKTsKKworCQkJCWNoa3N1bV9lcnIgPSBjaGtzdW1fc2VlbiA9IDA7CisKKwkJCQlqYmRfZGVidWcoMywgIkNoZWNrc3VtcyAleCAleFxuIiwKKwkJCQkJICBjcmMzMl9zdW0sIGZvdW5kX2Noa3N1bSk7CisJCQkJaWYgKGluZm8tPmVuZF90cmFuc2FjdGlvbikgeworCQkJCQlqb3VybmFsLT5qX2ZhaWxlZF9jb21taXQgPQorCQkJCQkJaW5mby0+ZW5kX3RyYW5zYWN0aW9uOworCQkJCQlicmVsc2UoYmgpOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoY3JjMzJfc3VtID09IGZvdW5kX2Noa3N1bSAmJgorCQkJCSAgICBjYmgtPmhfY2hrc3VtX3R5cGUgPT0gSkJEMl9DUkMzMl9DSEtTVU0gJiYKKwkJCQkgICAgY2JoLT5oX2Noa3N1bV9zaXplID09CisJCQkJCQlKQkQyX0NSQzMyX0NIS1NVTV9TSVpFKQorCQkJCSAgICAgICBjaGtzdW1fc2VlbiA9IDE7CisJCQkJZWxzZSBpZiAoIShjYmgtPmhfY2hrc3VtX3R5cGUgPT0gMCAmJgorCQkJCQkgICAgIGNiaC0+aF9jaGtzdW1fc2l6ZSA9PSAwICYmCisJCQkJCSAgICAgZm91bmRfY2hrc3VtID09IDAgJiYKKwkJCQkJICAgICAhY2hrc3VtX3NlZW4pKQorCQkJCS8qCisJCQkJICogSWYgZnMgaXMgbW91bnRlZCB1c2luZyBhbiBvbGQga2VybmVsIGFuZCB0aGVuCisJCQkJICoga2VybmVsIHdpdGggam91cm5hbF9jaGtzdW0gaXMgdXNlZCB0aGVuIHdlCisJCQkJICogZ2V0IGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBqb3VybmFsIGZsYWcgaGFzCisJCQkJICogY2hlY2tzdW0gZmxhZyBzZXQgYnV0IGNoZWNrc3VtcyBhcmUgbm90CisJCQkJICogcHJlc2VudCBpLmUgY2hrc3VtID0gMCwgaW4gdGhlIGluZGl2aWR1YWwKKwkJCQkgKiBjb21taXQgYmxvY2tzLgorCQkJCSAqIEhlbmNlIHRvIGF2b2lkIGNoZWNrc3VtIGZhaWx1cmVzLCBpbiB0aGlzCisJCQkJICogc2l0dWF0aW9uLCB0aGlzIGV4dHJhIGNoZWNrIGlzIGFkZGVkLgorCQkJCSAqLworCQkJCQkJY2hrc3VtX2VyciA9IDE7CisKKwkJCQlpZiAoY2hrc3VtX2VycikgeworCQkJCQlpbmZvLT5lbmRfdHJhbnNhY3Rpb24gPSBuZXh0X2NvbW1pdF9JRDsKKwkJCQkJamJkX2RlYnVnKDEsICJDaGVja3N1bV9lcnIgJXggJXhcbiIsCisJCQkJCQkgIGNyYzMyX3N1bSwgZm91bmRfY2hrc3VtKTsKKwkJCQkJaWYgKCFKRlNfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoam91cm5hbCwKKwkJCQkJICAgSkZTX0ZFQVRVUkVfSU5DT01QQVRfQVNZTkNfQ09NTUlUKSl7CisJCQkJCQlqb3VybmFsLT5qX2ZhaWxlZF9jb21taXQgPQorCQkJCQkJCW5leHRfY29tbWl0X0lEOworCQkJCQkJYnJlbHNlKGJoKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWNyYzMyX3N1bSA9IH4wOworCQkJfQorCQkJYnJlbHNlKGJoKTsKKwkJCW5leHRfY29tbWl0X0lEKys7CisJCQljb250aW51ZTsKKworCQljYXNlIEpGU19SRVZPS0VfQkxPQ0s6CisJCQkvKiBJZiB3ZSBhcmVuJ3QgaW4gdGhlIFJFVk9LRSBwYXNzLCB0aGVuIHdlIGNhbgorCQkJICoganVzdCBza2lwIG92ZXIgdGhpcyBibG9jay4gKi8KKwkJCWlmIChwYXNzICE9IFBBU1NfUkVWT0tFKSB7CisJCQkJYnJlbHNlKGJoKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZXJyID0gc2Nhbl9yZXZva2VfcmVjb3Jkcyhqb3VybmFsLCBiaCwKKwkJCQkJCSAgbmV4dF9jb21taXRfSUQsIGluZm8pOworCQkJYnJlbHNlKGJoKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBmYWlsZWQ7CisJCQljb250aW51ZTsKKworCQlkZWZhdWx0OgorCQkJamJkX2RlYnVnKDMsICJVbnJlY29nbmlzZWQgbWFnaWMgJWQsIGVuZCBvZiBzY2FuLlxuIiwKKwkJCQkgIGJsb2NrdHlwZSk7CisJCQlicmVsc2UoYmgpOworCQkJZ290byBkb25lOworCQl9CisJfQorCisgZG9uZToKKwkvKgorCSAqIFdlIGJyb2tlIG91dCBvZiB0aGUgbG9nIHNjYW4gbG9vcDogZWl0aGVyIHdlIGNhbWUgdG8gdGhlCisJICoga25vd24gZW5kIG9mIHRoZSBsb2cgb3Igd2UgZm91bmQgYW4gdW5leHBlY3RlZCBibG9jayBpbiB0aGUKKwkgKiBsb2cuICBJZiB0aGUgbGF0dGVyIGhhcHBlbmVkLCB0aGVuIHdlIGtub3cgdGhhdCB0aGUgImN1cnJlbnQiCisJICogdHJhbnNhY3Rpb24gbWFya3MgdGhlIGVuZCBvZiB0aGUgdmFsaWQgbG9nLgorCSAqLworCisJaWYgKHBhc3MgPT0gUEFTU19TQ0FOKSB7CisJCWlmICghaW5mby0+ZW5kX3RyYW5zYWN0aW9uKQorCQkJaW5mby0+ZW5kX3RyYW5zYWN0aW9uID0gbmV4dF9jb21taXRfSUQ7CisJfSBlbHNlIHsKKwkJLyogSXQncyByZWFsbHkgYmFkIG5ld3MgaWYgZGlmZmVyZW50IHBhc3NlcyBlbmQgdXAgYXQKKwkJICogZGlmZmVyZW50IHBsYWNlcyAoYnV0IHBvc3NpYmxlIGR1ZSB0byBJTyBlcnJvcnMpLiAqLworCQlpZiAoaW5mby0+ZW5kX3RyYW5zYWN0aW9uICE9IG5leHRfY29tbWl0X0lEKSB7CisJCQlwcmludGsgKEtFUk5fRVJSICJKQkQ6IHJlY292ZXJ5IHBhc3MgJWQgZW5kZWQgYXQgIgorCQkJCSJ0cmFuc2FjdGlvbiAldSwgZXhwZWN0ZWQgJXVcbiIsCisJCQkJcGFzcywgbmV4dF9jb21taXRfSUQsIGluZm8tPmVuZF90cmFuc2FjdGlvbik7CisJCQlpZiAoIXN1Y2Nlc3MpCisJCQkJc3VjY2VzcyA9IC1FSU87CisJCX0KKwl9CisKKwlyZXR1cm4gc3VjY2VzczsKKworIGZhaWxlZDoKKwlyZXR1cm4gZXJyOworfQorCisKKy8qIFNjYW4gYSByZXZva2UgcmVjb3JkLCBtYXJraW5nIGFsbCBibG9ja3MgbWVudGlvbmVkIGFzIHJldm9rZWQuICovCisKK3N0YXRpYyBpbnQgc2Nhbl9yZXZva2VfcmVjb3Jkcyhqb3VybmFsX3QgKmpvdXJuYWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCisJCQkgICAgICAgdGlkX3Qgc2VxdWVuY2UsIHN0cnVjdCByZWNvdmVyeV9pbmZvICppbmZvKQoreworCWpvdXJuYWxfcmV2b2tlX2hlYWRlcl90ICpoZWFkZXI7CisJaW50IG9mZnNldCwgbWF4OworCWludCByZWNvcmRfbGVuID0gNDsKKworCWhlYWRlciA9IChqb3VybmFsX3Jldm9rZV9oZWFkZXJfdCAqKSBiaC0+Yl9kYXRhOworCW9mZnNldCA9IHNpemVvZihqb3VybmFsX3Jldm9rZV9oZWFkZXJfdCk7CisJbWF4ID0gYmUzMl90b19jcHUoaGVhZGVyLT5yX2NvdW50KTsKKworCWlmIChKRlNfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoam91cm5hbCwgSkZTX0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpKQorCQlyZWNvcmRfbGVuID0gODsKKworCXdoaWxlIChvZmZzZXQgPCBtYXgpIHsKKwkJdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrbnI7CisJCWludCBlcnI7CisKKwkJaWYgKHJlY29yZF9sZW4gPT0gNCkgeworCQkJX19iZTMyIGI7CisJCQltZW1jcHkoJmIsIGJoLT5iX2RhdGEgKyBvZmZzZXQsIHNpemVvZihfX2JlMzIpKTsKKwkJCWJsb2NrbnIgPSBleHQyZnNfYmUzMl90b19jcHUoYik7CisJCX0gZWxzZSB7CisJCQlfX2JlNjQgYjsKKwkJCW1lbWNweSgmYiwgYmgtPmJfZGF0YSArIG9mZnNldCwgc2l6ZW9mKF9fYmU2NCkpOworCQkJYmxvY2tuciA9IGV4dDJmc19iZTY0X3RvX2NwdShiKTsKKwkJfQorCisJCW9mZnNldCArPSByZWNvcmRfbGVuOworCQllcnIgPSBqb3VybmFsX3NldF9yZXZva2Uoam91cm5hbCwgYmxvY2tuciwgc2VxdWVuY2UpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJKytpbmZvLT5ucl9yZXZva2VzOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNjay9yZWdpb24uYyBiL2UyZnNjay9yZWdpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjY2OWYwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL3JlZ2lvbi5jCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogcmVnaW9uLmMgLS0tIGNvZGUgd2hpY2ggbWFuYWdlcyBhbGxvY2F0aW9ucyB3aXRoaW4gYSByZWdpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiBURVNUX1BST0dSQU0KKyN1bmRlZiBFTkFCTEVfTkxTCisjZW5kaWYKKyNpbmNsdWRlICJlMmZzY2suaCIKKworc3RydWN0IHJlZ2lvbl9lbCB7CisJcmVnaW9uX2FkZHJfdAlzdGFydDsKKwlyZWdpb25fYWRkcl90CWVuZDsKKwlzdHJ1Y3QgcmVnaW9uX2VsICpuZXh0OworfTsKKworc3RydWN0IHJlZ2lvbl9zdHJ1Y3QgeworCXJlZ2lvbl9hZGRyX3QJbWluOworCXJlZ2lvbl9hZGRyX3QJbWF4OworCXN0cnVjdCByZWdpb25fZWwgKmFsbG9jYXRlZDsKK307CisKK3JlZ2lvbl90IHJlZ2lvbl9jcmVhdGUocmVnaW9uX2FkZHJfdCBtaW4sIHJlZ2lvbl9hZGRyX3QgbWF4KQoreworCXJlZ2lvbl90CXJlZ2lvbjsKKworCXJlZ2lvbiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHJlZ2lvbl9zdHJ1Y3QpKTsKKwlpZiAoIXJlZ2lvbikKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0KHJlZ2lvbiwgMCwgc2l6ZW9mKHN0cnVjdCByZWdpb25fc3RydWN0KSk7CisJcmVnaW9uLT5taW4gPSBtaW47CisJcmVnaW9uLT5tYXggPSBtYXg7CisJcmV0dXJuIHJlZ2lvbjsKK30KKwordm9pZCByZWdpb25fZnJlZShyZWdpb25fdCByZWdpb24pCit7CisJc3RydWN0IHJlZ2lvbl9lbAkqciwgKm5leHQ7CisKKwlmb3IgKHIgPSByZWdpb24tPmFsbG9jYXRlZDsgcjsgciA9IG5leHQpIHsKKwkJbmV4dCA9IHItPm5leHQ7CisJCWZyZWUocik7CisJfQorCW1lbXNldChyZWdpb24sIDAsIHNpemVvZihzdHJ1Y3QgcmVnaW9uX3N0cnVjdCkpOworCWZyZWUocmVnaW9uKTsKK30KKworaW50IHJlZ2lvbl9hbGxvY2F0ZShyZWdpb25fdCByZWdpb24sIHJlZ2lvbl9hZGRyX3Qgc3RhcnQsIGludCBuKQoreworCXN0cnVjdCByZWdpb25fZWwJKnIsICpuZXdfcmVnaW9uLCAqcHJldiwgKm5leHQ7CisJcmVnaW9uX2FkZHJfdCBlbmQ7CisKKwllbmQgPSBzdGFydCtuOworCWlmICgoc3RhcnQgPCByZWdpb24tPm1pbikgfHwgKGVuZCA+IHJlZ2lvbi0+bWF4KSkKKwkJcmV0dXJuIC0xOworCWlmIChuID09IDApCisJCXJldHVybiAxOworCisJLyoKKwkgKiBTZWFyY2ggdGhyb3VnaCB0aGUgbGlua2VkIGxpc3QuICBJZiB3ZSBmaW5kIHRoYXQgaXQKKwkgKiBjb25mbGljdHMgd2l0aWggc29tZXRoaW5nIHRoYXQncyBhbHJlYWR5IGFsbG9jYXRlZCwgcmV0dXJuCisJICogMTsgaWYgd2UgY2FuIGZpbmQgYW4gZXhpc3RpbmcgcmVnaW9uIHdoaWNoIHdlIGNhbiBncm93LCBkbworCSAqIHNvLiAgT3RoZXJ3aXNlLCBzdG9wIHdoZW4gd2UgZmluZCB0aGUgYXBwcm9wcmlhdGUgcGxhY2UKKwkgKiBpbnNlcnQgYSBuZXcgcmVnaW9uIGVsZW1lbnQgaW50byB0aGUgbGlua2VkIGxpc3QuCisJICovCisJZm9yIChyID0gcmVnaW9uLT5hbGxvY2F0ZWQsIHByZXY9TlVMTDsgcjsgcHJldiA9IHIsIHIgPSByLT5uZXh0KSB7CisJCWlmICgoKHN0YXJ0ID49IHItPnN0YXJ0KSAmJiAoc3RhcnQgPCByLT5lbmQpKSB8fAorCQkgICAgKChlbmQgPiByLT5zdGFydCkgJiYgKGVuZCA8PSByLT5lbmQpKSB8fAorCQkgICAgKChzdGFydCA8PSByLT5zdGFydCkgJiYgKGVuZCA+PSByLT5lbmQpKSkKKwkJCXJldHVybiAxOworCQlpZiAoZW5kID09IHItPnN0YXJ0KSB7CisJCQlyLT5zdGFydCA9IHN0YXJ0OworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKHN0YXJ0ID09IHItPmVuZCkgeworCQkJaWYgKChuZXh0ID0gci0+bmV4dCkpIHsKKwkJCQlpZiAoZW5kID4gbmV4dC0+c3RhcnQpCisJCQkJCXJldHVybiAxOworCQkJCWlmIChlbmQgPT0gbmV4dC0+c3RhcnQpIHsKKwkJCQkJci0+ZW5kID0gbmV4dC0+ZW5kOworCQkJCQlyLT5uZXh0ID0gbmV4dC0+bmV4dDsKKwkJCQkJZnJlZShuZXh0KTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQorCQkJci0+ZW5kID0gZW5kOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKHN0YXJ0IDwgci0+c3RhcnQpCisJCQlicmVhazsKKwl9CisJLyoKKwkgKiBJbnNlcnQgYSBuZXcgcmVnaW9uIGVsZW1lbnQgc3RydWN0dXJlIGludG8gdGhlIGxpbmtlZCBsaXN0CisJICovCisJbmV3X3JlZ2lvbiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHJlZ2lvbl9lbCkpOworCWlmICghbmV3X3JlZ2lvbikKKwkJcmV0dXJuIC0xOworCW5ld19yZWdpb24tPnN0YXJ0ID0gc3RhcnQ7CisJbmV3X3JlZ2lvbi0+ZW5kID0gc3RhcnQgKyBuOworCW5ld19yZWdpb24tPm5leHQgPSByOworCWlmIChwcmV2KQorCQlwcmV2LT5uZXh0ID0gbmV3X3JlZ2lvbjsKKwllbHNlCisJCXJlZ2lvbi0+YWxsb2NhdGVkID0gbmV3X3JlZ2lvbjsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIFRFU1RfUFJPR1JBTQorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNkZWZpbmUgQkNPREVfRU5ECTAKKyNkZWZpbmUgQkNPREVfQ1JFQVRFCTEKKyNkZWZpbmUgQkNPREVfRlJFRQkyCisjZGVmaW5lIEJDT0RFX0FMTE9DQVRFCTMKKyNkZWZpbmUgQkNPREVfUFJJTlQJNAorCitpbnQgYmNvZGVfcHJvZ3JhbVtdID0geworCUJDT0RFX0NSRUFURSwgMSwgMTAwMSwKKwlCQ09ERV9QUklOVCwKKwlCQ09ERV9BTExPQ0FURSwgMTAsIDEwLAorCUJDT0RFX0FMTE9DQVRFLCAzMCwgMTAsCisJQkNPREVfUFJJTlQsCisJQkNPREVfQUxMT0NBVEUsIDEsIDE1LAorCUJDT0RFX0FMTE9DQVRFLCAxNSwgOCwKKwlCQ09ERV9BTExPQ0FURSwgMSwgMjAsCisJQkNPREVfQUxMT0NBVEUsIDEsIDgsCisJQkNPREVfUFJJTlQsCisJQkNPREVfQUxMT0NBVEUsIDQwLCAxMCwKKwlCQ09ERV9QUklOVCwKKwlCQ09ERV9BTExPQ0FURSwgMjIsIDUsCisJQkNPREVfUFJJTlQsCisJQkNPREVfQUxMT0NBVEUsIDI3LCAzLAorCUJDT0RFX1BSSU5ULAorCUJDT0RFX0FMTE9DQVRFLCAyMCwgMiwKKwlCQ09ERV9QUklOVCwKKwlCQ09ERV9BTExPQ0FURSwgNDksIDEsCisJQkNPREVfQUxMT0NBVEUsIDUwLCA1LAorCUJDT0RFX0FMTE9DQVRFLCA5LCAyLAorCUJDT0RFX0FMTE9DQVRFLCA5LCAxLAorCUJDT0RFX1BSSU5ULAorCUJDT0RFX0ZSRUUsCisJQkNPREVfRU5ECit9OworCit2b2lkIHJlZ2lvbl9wcmludChyZWdpb25fdCByZWdpb24sIEZJTEUgKmYpCit7CisJc3RydWN0IHJlZ2lvbl9lbAkqcjsKKwlpbnQJaSA9IDA7CisKKwlmcHJpbnRmKGYsICJQcmludGluZyByZWdpb24gKG1pbj0lZC4gbWF4PSVkKVxuXHQiLCByZWdpb24tPm1pbiwKKwkJcmVnaW9uLT5tYXgpOworCWZvciAociA9IHJlZ2lvbi0+YWxsb2NhdGVkOyByOyByID0gci0+bmV4dCkgeworCQlmcHJpbnRmKGYsICIoJWQsICVkKSAgIiwgci0+c3RhcnQsIHItPmVuZCk7CisJCWlmICgrK2kgPj0gOCkKKwkJCWZwcmludGYoZiwgIlxuXHQiKTsKKwl9CisJZnByaW50ZihmLCAiXG4iKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXJlZ2lvbl90CXIgPSBOVUxMOworCWludAkJcGMgPSAwLCByZXQ7CisJcmVnaW9uX2FkZHJfdAlzdGFydCwgZW5kOworCisKKwl3aGlsZSAoMSkgeworCQlzd2l0Y2ggKGJjb2RlX3Byb2dyYW1bcGMrK10pIHsKKwkJY2FzZSBCQ09ERV9FTkQ6CisJCQlleGl0KDApOworCQljYXNlIEJDT0RFX0NSRUFURToKKwkJCXN0YXJ0ID0gYmNvZGVfcHJvZ3JhbVtwYysrXTsKKwkJCWVuZCA9IGJjb2RlX3Byb2dyYW1bcGMrK107CisJCQlwcmludGYoIkNyZWF0aW5nIHJlZ2lvbiB3aXRoIGFyZ3MoJWQsICVkKVxuIiwKKwkJCSAgICAgICBzdGFydCwgZW5kKTsKKwkJCXIgPSByZWdpb25fY3JlYXRlKHN0YXJ0LCBlbmQpOworCQkJaWYgKCFyKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBjcmVhdGUgcmVnaW9uLlxuIik7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEJDT0RFX0FMTE9DQVRFOgorCQkJc3RhcnQgPSBiY29kZV9wcm9ncmFtW3BjKytdOworCQkJZW5kID0gYmNvZGVfcHJvZ3JhbVtwYysrXTsKKwkJCXJldCA9IHJlZ2lvbl9hbGxvY2F0ZShyLCBzdGFydCwgZW5kKTsKKwkJCXByaW50ZigiUmVnaW9uX2FsbG9jYXRlKCVkLCAlZCkgcmV0dXJucyAlZFxuIiwKKwkJCSAgICAgICBzdGFydCwgZW5kLCByZXQpOworCQkJYnJlYWs7CisJCWNhc2UgQkNPREVfUFJJTlQ6CisJCQlyZWdpb25fcHJpbnQociwgc3Rkb3V0KTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisjZW5kaWYgLyogVEVTVF9QUk9HUkFNICovCmRpZmYgLS1naXQgYS9lMmZzY2svcmVoYXNoLmMgYi9lMmZzY2svcmVoYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZmNDg4MwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9yZWhhc2guYwpAQCAtMCwwICsxLDkwNSBAQAorLyoKKyAqIHJlaGFzaC5jIC0tLSByZWJ1aWxkIGhhc2ggdHJlZSBkaXJlY3RvcmllcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqCisgKiBUaGlzIGFsZ29yaXRobSBpcyBkZXNpZ25lZCBmb3Igc2ltcGxpY2l0eSBvZiBpbXBsZW1lbnRhdGlvbiBhbmQgdG8KKyAqIHBhY2sgdGhlIGRpcmVjdG9yeSBhcyBtdWNoIGFzIHBvc3NpYmxlLiAgSXQgaG93ZXZlciByZXF1aXJlcyB0d2ljZQorICogYXMgbXVjaCBtZW1vcnkgYXMgdGhlIHNpemUgb2YgdGhlIGRpcmVjdG9yeS4gIFRoZSBtYXhpbXVtIHNpemUKKyAqIGRpcmVjdG9yeSBzdXBwb3J0ZWQgdXNpbmcgYSA0ayBibG9ja3NpemUgaXMgcm91Z2hseSBhIGdpZ2FieXRlLCBhbmQKKyAqIHNvIHRoZXJlIG1heSB2ZXJ5IHdlbGwgYmUgcHJvYmxlbXMgd2l0aCBtYWNoaW5lcyB0aGF0IGRvbid0IGhhdmUKKyAqIHZpcnR1YWwgbWVtb3J5LCBhbmQgb2JzY2VuZWx5IGxhcmdlIGRpcmVjdG9yaWVzLgorICoKKyAqIEFuIGFsdGVybmF0ZSBhbGdvcml0aG0gd2hpY2ggaXMgbXVjaCBtb3JlIGRpc2sgaW50ZW5zaXZlIGNvdWxkIGJlCisgKiB3cml0dGVuLCBhbmQgcHJvYmFibHkgd2lsbCBuZWVkIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIGZ1dHVyZS4gIFRoZQorICogZGVzaWduIGdvYWxzIG9mIHN1Y2ggYW4gYWxnb3JpdGhtIGFyZTogKGEpIHVzZSAocm91Z2hseSkgY29uc3RhbnQKKyAqIGFtb3VudHMgb2YgbWVtb3J5LCBubyBtYXR0ZXIgaG93IGxhcmdlIHRoZSBkaXJlY3RvcnksIChiKSB0aGUKKyAqIGRpcmVjdG9yeSBtdXN0IGJlIHNhZmUgYXQgYWxsIHRpbWVzLCBldmVuIGlmIGUyZnNjayBpcyBpbnRlcnJ1cHRlZAorICogaW4gdGhlIG1pZGRsZSwgKGMpIHdlIG11c3QgdXNlIG1pbmltYWwgYW1vdW50cyBvZiBleHRyYSBkaXNrCisgKiBibG9ja3MuICBUaGlzIHByZXR0eSBtdWNoIHJlcXVpcmVzIGFuIGluY3JlbWVudGFsIGFwcHJvYWNoLCB3aGVyZQorICogd2UgYXJlIHJlYWRpbmcgZnJvbSBvbmUgcGFydCBvZiB0aGUgZGlyZWN0b3J5LCBhbmQgaW5zZXJ0aW5nIGludG8KKyAqIHRoZSBmcm9udCBoYWxmLiAgU28gdGhlIGFsZ29yaXRobSB3aWxsIGhhdmUgdG8ga2VlcCB0cmFjayBvZiBhCisgKiBtb3ZpbmcgYmxvY2sgYm91bmRhcnkgYmV0d2VlbiB0aGUgbmV3IHRyZWUgYW5kIHRoZSBvbGQgdHJlZSwgYW5kCisgKiBmaWxlcyB3aWxsIG5lZWQgdG8gYmUgbW92ZWQgZnJvbSB0aGUgb2xkIGRpcmVjdG9yeSBhbmQgaW5zZXJ0ZWQKKyAqIGludG8gdGhlIG5ldyB0cmVlLiAgSWYgdGhlIG5ldyBkaXJlY3RvcnkgcmVxdWlyZXMgc3BhY2Ugd2hpY2ggaXNuJ3QKKyAqIHlldCBhdmFpbGFibGUsIGJsb2NrcyBmcm9tIHRoZSBiZWdpbm5pbmcgcGFydCBvZiB0aGUgb2xkIGRpcmVjdG9yeQorICogbWF5IG5lZWQgdG8gYmUgbW92ZWQgdG8gdGhlIGVuZCBvZiB0aGUgZGlyZWN0b3J5IHRvIG1ha2Ugcm9vbSBmb3IKKyAqIHRoZSBuZXcgdHJlZToKKyAqCisgKiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgfCAgbmV3IHRyZWUgICB8ICAgICAgICB8IG9sZCB0cmVlICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgIF4gcHRyICAgIF5wdHIKKyAqICAgICAgICAgICAgICAgIHRhaWwgbmV3ICAgaGVhZCBvbGQKKyAqCisgKiBUaGlzIGlzIGdvaW5nIHRvIGJlIGEgcGFpbiBpbiB0aGUgdHVja3VzIHRvIGltcGxlbWVudCwgYW5kIHdpbGwKKyAqIHJlcXVpcmUgYSBsb3QgbW9yZSBkaXNrIGFjY2Vzc2VzLiAgU28gSSdtIGdvaW5nIHRvIHNraXAgaXQgZm9yIG5vdzsKKyAqIGl0J3Mgb25seSByZWFsbHkgZ29pbmcgdG8gYmUgYW4gaXNzdWUgZm9yIHJlYWxseSwgcmVhbGx5IGJpZworICogZmlsZXN5c3RlbXMgKHdoZW4gd2UgcmVhY2ggdGhlIGxldmVsIG9mIHRlbnMgb2YgbWlsbGlvbnMgb2YgZmlsZXMKKyAqIGluIGEgc2luZ2xlIGRpcmVjdG9yeSkuICBJdCB3aWxsIHByb2JhYmx5IGJlIGVhc2llciB0byBzaW1wbHkKKyAqIHJlcXVpcmUgdGhhdCBlMmZzY2sgdXNlIFZNIGZpcnN0LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAiZTJmc2NrLmgiCisjaW5jbHVkZSAicHJvYmxlbS5oIgorCitzdHJ1Y3QgZmlsbF9kaXJfc3RydWN0IHsKKwljaGFyICpidWY7CisJc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlOworCWVycmNvZGVfdCBlcnI7CisJZTJmc2NrX3QgY3R4OworCXN0cnVjdCBoYXNoX2VudHJ5ICpoYXJyYXk7CisJaW50IG1heF9hcnJheSwgbnVtX2FycmF5OworCXVuc2lnbmVkIGludCBkaXJfc2l6ZTsKKwlpbnQgY29tcHJlc3M7CisJaW5vX3QgcGFyZW50OworfTsKKworc3RydWN0IGhhc2hfZW50cnkgeworCWV4dDJfZGlyaGFzaF90CWhhc2g7CisJZXh0Ml9kaXJoYXNoX3QJbWlub3JfaGFzaDsKKwlpbm9fdAkJaW5vOworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeQkqZGlyOworfTsKKworc3RydWN0IG91dF9kaXIgeworCWludAkJbnVtOworCWludAkJbWF4OworCWNoYXIJCSpidWY7CisJZXh0Ml9kaXJoYXNoX3QJKmhhc2hlczsKK307CisKK3N0YXRpYyBpbnQgZmlsbF9kaXJfYmxvY2soZXh0Ml9maWxzeXMgZnMsCisJCQkgIGJsazY0X3QgKmJsb2NrX25yLAorCQkJICBlMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJCSAgYmxrNjRfdCByZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgZmlsbF9kaXJfc3RydWN0CSpmZCA9IChzdHJ1Y3QgZmlsbF9kaXJfc3RydWN0ICopIHByaXZfZGF0YTsKKwlzdHJ1Y3QgaGFzaF9lbnRyeSAJKm5ld19hcnJheSwgKmVudDsKKwlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgCSpkaXJlbnQ7CisJY2hhcgkJCSpkaXI7CisJdW5zaWduZWQgaW50CQlvZmZzZXQsIGRpcl9vZmZzZXQsIHJlY19sZW47CisJaW50CQkJaGFzaF9hbGc7CisKKwlpZiAoYmxvY2tjbnQgPCAwKQorCQlyZXR1cm4gMDsKKworCW9mZnNldCA9IGJsb2NrY250ICogZnMtPmJsb2Nrc2l6ZTsKKwlpZiAob2Zmc2V0ICsgZnMtPmJsb2Nrc2l6ZSA+IGZkLT5pbm9kZS0+aV9zaXplKSB7CisJCWZkLT5lcnIgPSBFWFQyX0VUX0RJUl9DT1JSVVBURUQ7CisJCXJldHVybiBCTE9DS19BQk9SVDsKKwl9CisJZGlyID0gKGZkLT5idWYrb2Zmc2V0KTsKKwlpZiAoSE9MRV9CTEtBRERSKCpibG9ja19ucikpIHsKKwkJbWVtc2V0KGRpciwgMCwgZnMtPmJsb2Nrc2l6ZSk7CisJCWRpcmVudCA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikgZGlyOworCQkodm9pZCkgZXh0MmZzX3NldF9yZWNfbGVuKGZzLCBmcy0+YmxvY2tzaXplLCBkaXJlbnQpOworCX0gZWxzZSB7CisJCWZkLT5lcnIgPSBleHQyZnNfcmVhZF9kaXJfYmxvY2szKGZzLCAqYmxvY2tfbnIsIGRpciwgMCk7CisJCWlmIChmZC0+ZXJyKQorCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCX0KKwloYXNoX2FsZyA9IGZzLT5zdXBlci0+c19kZWZfaGFzaF92ZXJzaW9uOworCWlmICgoaGFzaF9hbGcgPD0gRVhUMl9IQVNIX1RFQSkgJiYKKwkgICAgKGZzLT5zdXBlci0+c19mbGFncyAmIEVYVDJfRkxBR1NfVU5TSUdORURfSEFTSCkpCisJCWhhc2hfYWxnICs9IDM7CisJLyogV2hpbGUgdGhlIGRpcmVjdG9yeSBibG9jayBpcyAiaG90IiwgaW5kZXggaXQuICovCisJZGlyX29mZnNldCA9IDA7CisJd2hpbGUgKGRpcl9vZmZzZXQgPCBmcy0+YmxvY2tzaXplKSB7CisJCWRpcmVudCA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikgKGRpciArIGRpcl9vZmZzZXQpOworCQkodm9pZCkgZXh0MmZzX2dldF9yZWNfbGVuKGZzLCBkaXJlbnQsICZyZWNfbGVuKTsKKwkJaWYgKCgoZGlyX29mZnNldCArIHJlY19sZW4pID4gZnMtPmJsb2Nrc2l6ZSkgfHwKKwkJICAgIChyZWNfbGVuIDwgOCkgfHwKKwkJICAgICgocmVjX2xlbiAlIDQpICE9IDApIHx8CisJCSAgICAoKChkaXJlbnQtPm5hbWVfbGVuICYgMHhGRikrOFUpID4gcmVjX2xlbikpIHsKKwkJCWZkLT5lcnIgPSBFWFQyX0VUX0RJUl9DT1JSVVBURUQ7CisJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCX0KKwkJZGlyX29mZnNldCArPSByZWNfbGVuOworCQlpZiAoZGlyZW50LT5pbm9kZSA9PSAwKQorCQkJY29udGludWU7CisJCWlmICghZmQtPmNvbXByZXNzICYmICgoZGlyZW50LT5uYW1lX2xlbiYweEZGKSA9PSAxKSAmJgorCQkgICAgKGRpcmVudC0+bmFtZVswXSA9PSAnLicpKQorCQkJY29udGludWU7CisJCWlmICghZmQtPmNvbXByZXNzICYmICgoZGlyZW50LT5uYW1lX2xlbiYweEZGKSA9PSAyKSAmJgorCQkgICAgKGRpcmVudC0+bmFtZVswXSA9PSAnLicpICYmIChkaXJlbnQtPm5hbWVbMV0gPT0gJy4nKSkgeworCQkJZmQtPnBhcmVudCA9IGRpcmVudC0+aW5vZGU7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZmQtPm51bV9hcnJheSA+PSBmZC0+bWF4X2FycmF5KSB7CisJCQluZXdfYXJyYXkgPSByZWFsbG9jKGZkLT5oYXJyYXksCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBoYXNoX2VudHJ5KSAqIChmZC0+bWF4X2FycmF5KzUwMCkpOworCQkJaWYgKCFuZXdfYXJyYXkpIHsKKwkJCQlmZC0+ZXJyID0gRU5PTUVNOworCQkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJCX0KKwkJCWZkLT5oYXJyYXkgPSBuZXdfYXJyYXk7CisJCQlmZC0+bWF4X2FycmF5ICs9IDUwMDsKKwkJfQorCQllbnQgPSBmZC0+aGFycmF5ICsgZmQtPm51bV9hcnJheSsrOworCQllbnQtPmRpciA9IGRpcmVudDsKKwkJZmQtPmRpcl9zaXplICs9IEVYVDJfRElSX1JFQ19MRU4oZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpOworCQllbnQtPmlubyA9IGRpcmVudC0+aW5vZGU7CisJCWlmIChmZC0+Y29tcHJlc3MpCisJCQllbnQtPmhhc2ggPSBlbnQtPm1pbm9yX2hhc2ggPSAwOworCQllbHNlIHsKKwkJCWZkLT5lcnIgPSBleHQyZnNfZGlyaGFzaChoYXNoX2FsZywgZGlyZW50LT5uYW1lLAorCQkJCQkJIGRpcmVudC0+bmFtZV9sZW4gJiAweEZGLAorCQkJCQkJIGZzLT5zdXBlci0+c19oYXNoX3NlZWQsCisJCQkJCQkgJmVudC0+aGFzaCwgJmVudC0+bWlub3JfaGFzaCk7CisJCQlpZiAoZmQtPmVycikKKwkJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogVXNlZCBmb3Igc29ydGluZyB0aGUgaGFzaCBlbnRyeSAqLworc3RhdGljIEVYVDJfUVNPUlRfVFlQRSBpbm9fY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IGhhc2hfZW50cnkgKmhlX2EgPSAoY29uc3Qgc3RydWN0IGhhc2hfZW50cnkgKikgYTsKKwljb25zdCBzdHJ1Y3QgaGFzaF9lbnRyeSAqaGVfYiA9IChjb25zdCBzdHJ1Y3QgaGFzaF9lbnRyeSAqKSBiOworCisJcmV0dXJuIChoZV9hLT5pbm8gLSBoZV9iLT5pbm8pOworfQorCisvKiBVc2VkIGZvciBzb3J0aW5nIHRoZSBoYXNoIGVudHJ5ICovCitzdGF0aWMgRVhUMl9RU09SVF9UWVBFIG5hbWVfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IGhhc2hfZW50cnkgKmhlX2EgPSAoY29uc3Qgc3RydWN0IGhhc2hfZW50cnkgKikgYTsKKwljb25zdCBzdHJ1Y3QgaGFzaF9lbnRyeSAqaGVfYiA9IChjb25zdCBzdHJ1Y3QgaGFzaF9lbnRyeSAqKSBiOworCWludAlyZXQ7CisJaW50CW1pbl9sZW47CisKKwltaW5fbGVuID0gaGVfYS0+ZGlyLT5uYW1lX2xlbjsKKwlpZiAobWluX2xlbiA+IGhlX2ItPmRpci0+bmFtZV9sZW4pCisJCW1pbl9sZW4gPSBoZV9iLT5kaXItPm5hbWVfbGVuOworCisJcmV0ID0gc3RybmNtcChoZV9hLT5kaXItPm5hbWUsIGhlX2ItPmRpci0+bmFtZSwgbWluX2xlbik7CisJaWYgKHJldCA9PSAwKSB7CisJCWlmIChoZV9hLT5kaXItPm5hbWVfbGVuID4gaGVfYi0+ZGlyLT5uYW1lX2xlbikKKwkJCXJldCA9IDE7CisJCWVsc2UgaWYgKGhlX2EtPmRpci0+bmFtZV9sZW4gPCBoZV9iLT5kaXItPm5hbWVfbGVuKQorCQkJcmV0ID0gLTE7CisJCWVsc2UKKwkJCXJldCA9IGhlX2ItPmRpci0+aW5vZGUgLSBoZV9hLT5kaXItPmlub2RlOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBVc2VkIGZvciBzb3J0aW5nIHRoZSBoYXNoIGVudHJ5ICovCitzdGF0aWMgRVhUMl9RU09SVF9UWVBFIGhhc2hfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IGhhc2hfZW50cnkgKmhlX2EgPSAoY29uc3Qgc3RydWN0IGhhc2hfZW50cnkgKikgYTsKKwljb25zdCBzdHJ1Y3QgaGFzaF9lbnRyeSAqaGVfYiA9IChjb25zdCBzdHJ1Y3QgaGFzaF9lbnRyeSAqKSBiOworCWludAlyZXQ7CisKKwlpZiAoaGVfYS0+aGFzaCA+IGhlX2ItPmhhc2gpCisJCXJldCA9IDE7CisJZWxzZSBpZiAoaGVfYS0+aGFzaCA8IGhlX2ItPmhhc2gpCisJCXJldCA9IC0xOworCWVsc2UgeworCQlpZiAoaGVfYS0+bWlub3JfaGFzaCA+IGhlX2ItPm1pbm9yX2hhc2gpCisJCQlyZXQgPSAxOworCQllbHNlIGlmIChoZV9hLT5taW5vcl9oYXNoIDwgaGVfYi0+bWlub3JfaGFzaCkKKwkJCXJldCA9IC0xOworCQllbHNlCisJCQlyZXQgPSBuYW1lX2NtcChhLCBiKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGVycmNvZGVfdCBhbGxvY19zaXplX2RpcihleHQyX2ZpbHN5cyBmcywgc3RydWN0IG91dF9kaXIgKm91dGRpciwKKwkJCQlpbnQgYmxvY2tzKQoreworCXZvaWQJCQkqbmV3X21lbTsKKworCWlmIChvdXRkaXItPm1heCkgeworCQluZXdfbWVtID0gcmVhbGxvYyhvdXRkaXItPmJ1ZiwgYmxvY2tzICogZnMtPmJsb2Nrc2l6ZSk7CisJCWlmICghbmV3X21lbSkKKwkJCXJldHVybiBFTk9NRU07CisJCW91dGRpci0+YnVmID0gbmV3X21lbTsKKwkJbmV3X21lbSA9IHJlYWxsb2Mob3V0ZGlyLT5oYXNoZXMsCisJCQkJICBibG9ja3MgKiBzaXplb2YoZXh0Ml9kaXJoYXNoX3QpKTsKKwkJaWYgKCFuZXdfbWVtKQorCQkJcmV0dXJuIEVOT01FTTsKKwkJb3V0ZGlyLT5oYXNoZXMgPSBuZXdfbWVtOworCX0gZWxzZSB7CisJCW91dGRpci0+YnVmID0gbWFsbG9jKGJsb2NrcyAqIGZzLT5ibG9ja3NpemUpOworCQlvdXRkaXItPmhhc2hlcyA9IG1hbGxvYyhibG9ja3MgKiBzaXplb2YoZXh0Ml9kaXJoYXNoX3QpKTsKKwkJb3V0ZGlyLT5udW0gPSAwOworCX0KKwlvdXRkaXItPm1heCA9IGJsb2NrczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9vdXRfZGlyKHN0cnVjdCBvdXRfZGlyICpvdXRkaXIpCit7CisJZnJlZShvdXRkaXItPmJ1Zik7CisJZnJlZShvdXRkaXItPmhhc2hlcyk7CisJb3V0ZGlyLT5tYXggPSAwOworCW91dGRpci0+bnVtID0wOworfQorCitzdGF0aWMgZXJyY29kZV90IGdldF9uZXh0X2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBzdHJ1Y3Qgb3V0X2RpciAqb3V0ZGlyLAorCQkJIGNoYXIgKiogcmV0KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAob3V0ZGlyLT5udW0gPj0gb3V0ZGlyLT5tYXgpIHsKKwkJcmV0dmFsID0gYWxsb2Nfc2l6ZV9kaXIoZnMsIG91dGRpciwgb3V0ZGlyLT5tYXggKyA1MCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwkqcmV0ID0gb3V0ZGlyLT5idWYgKyAob3V0ZGlyLT5udW0rKyAqIGZzLT5ibG9ja3NpemUpOworCW1lbXNldCgqcmV0LCAwLCBmcy0+YmxvY2tzaXplKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYWtlIGEgdW5pcXVlIGZpbGVuYW1lLiAgV2UgZG8gdGhpcyBieQorICogYXBwZW5kaW5nIH4wLCBhbmQgdGhlbiBpbmNyZW1lbnRpbmcgdGhlIG51bWJlci4gIEhvd2V2ZXIsIHdlIGNhbm5vdAorICogZXhwYW5kIHRoZSBsZW5ndGggb2YgdGhlIGZpbGVuYW1lIGJleW9uZCB0aGUgcGFkZGluZyBhdmFpbGFibGUgaW4KKyAqIHRoZSBkaXJlY3RvcnkgZW50cnkuCisgKi8KK3N0YXRpYyB2b2lkIG11dGF0ZV9uYW1lKGNoYXIgKnN0ciwgX191MTYgKmxlbikKK3sKKwlpbnQJaTsKKwlfX3UxNglsID0gKmxlbiAmIDB4RkYsIGggPSAqbGVuICYgMHhmZjAwOworCisJLyoKKwkgKiBGaXJzdCBjaGVjayB0byBzZWUgaWYgaXQgbG9va3MgdGhlIG5hbWUgaGFzIGJlZW4gbXV0YXRlZAorCSAqIGFscmVhZHkKKwkgKi8KKwlmb3IgKGkgPSBsLTE7IGkgPiAwOyBpLS0pIHsKKwkJaWYgKCFpc2RpZ2l0KHN0cltpXSkpCisJCQlicmVhazsKKwl9CisJaWYgKChpID09IGwtMSkgfHwgKHN0cltpXSAhPSAnficpKSB7CisJCWlmICgoKGwtMSkgJiAzKSA8IDIpCisJCQlsICs9IDI7CisJCWVsc2UKKwkJCWwgPSAobCszKSAmIH4zOworCQlzdHJbbC0yXSA9ICd+JzsKKwkJc3RyW2wtMV0gPSAnMCc7CisJCSpsZW4gPSBsIHwgaDsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGkgPSBsLTE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChpc2RpZ2l0KHN0cltpXSkpIHsKKwkJCWlmIChzdHJbaV0gPT0gJzknKQorCQkJCXN0cltpXSA9ICcwJzsKKwkJCWVsc2UgeworCQkJCXN0cltpXSsrOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChpID09IDEpIHsKKwkJCWlmIChzdHJbMF0gPT0gJ3onKQorCQkJCXN0clswXSA9ICdBJzsKKwkJCWVsc2UgaWYgKHN0clswXSA9PSAnWicpIHsKKwkJCQlzdHJbMF0gPSAnfic7CisJCQkJc3RyWzFdID0gJzAnOworCQkJfSBlbHNlCisJCQkJc3RyWzBdKys7CisJCX0gZWxzZSBpZiAoaSA+IDApIHsKKwkJCXN0cltpXSA9ICcxJzsKKwkJCXN0cltpLTFdID0gJ34nOworCQl9IGVsc2UgeworCQkJaWYgKHN0clswXSA9PSAnficpCisJCQkJc3RyWzBdID0gJ2EnOworCQkJZWxzZQorCQkJCXN0clswXSsrOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBkdXBsaWNhdGVfc2VhcmNoX2FuZF9maXgoZTJmc2NrX3QgY3R4LCBleHQyX2ZpbHN5cyBmcywKKwkJCQkgICAgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICAgIHN0cnVjdCBmaWxsX2Rpcl9zdHJ1Y3QgKmZkKQoreworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwlzdHJ1Y3QgaGFzaF9lbnRyeSAJKmVudCwgKnByZXY7CisJaW50CQkJaSwgajsKKwlpbnQJCQlmaXhlZCA9IDA7CisJY2hhcgkJCW5ld19uYW1lWzI1Nl07CisJX191MTYJCQluZXdfbGVuOworCWludAkJCWhhc2hfYWxnOworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlwY3R4LmlubyA9IGlubzsKKworCWhhc2hfYWxnID0gZnMtPnN1cGVyLT5zX2RlZl9oYXNoX3ZlcnNpb247CisJaWYgKChoYXNoX2FsZyA8PSBFWFQyX0hBU0hfVEVBKSAmJgorCSAgICAoZnMtPnN1cGVyLT5zX2ZsYWdzICYgRVhUMl9GTEFHU19VTlNJR05FRF9IQVNIKSkKKwkJaGFzaF9hbGcgKz0gMzsKKworCWZvciAoaT0xOyBpIDwgZmQtPm51bV9hcnJheTsgaSsrKSB7CisJCWVudCA9IGZkLT5oYXJyYXkgKyBpOworCQlwcmV2ID0gZW50IC0gMTsKKwkJaWYgKCFlbnQtPmRpci0+aW5vZGUgfHwKKwkJICAgICgoZW50LT5kaXItPm5hbWVfbGVuICYgMHhGRikgIT0KKwkJICAgICAocHJldi0+ZGlyLT5uYW1lX2xlbiAmIDB4RkYpKSB8fAorCQkgICAgKHN0cm5jbXAoZW50LT5kaXItPm5hbWUsIHByZXYtPmRpci0+bmFtZSwKKwkJCSAgICAgZW50LT5kaXItPm5hbWVfbGVuICYgMHhGRikpKQorCQkJY29udGludWU7CisJCXBjdHguZGlyZW50ID0gZW50LT5kaXI7CisJCWlmICgoZW50LT5kaXItPmlub2RlID09IHByZXYtPmRpci0+aW5vZGUpICYmCisJCSAgICBmaXhfcHJvYmxlbShjdHgsIFBSXzJfRFVQTElDQVRFX0RJUkVOVCwgJnBjdHgpKSB7CisJCQllMmZzY2tfYWRqdXN0X2lub2RlX2NvdW50KGN0eCwgZW50LT5kaXItPmlub2RlLCAtMSk7CisJCQllbnQtPmRpci0+aW5vZGUgPSAwOworCQkJZml4ZWQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCW1lbWNweShuZXdfbmFtZSwgZW50LT5kaXItPm5hbWUsIGVudC0+ZGlyLT5uYW1lX2xlbiAmIDB4RkYpOworCQluZXdfbGVuID0gZW50LT5kaXItPm5hbWVfbGVuOworCQltdXRhdGVfbmFtZShuZXdfbmFtZSwgJm5ld19sZW4pOworCQlmb3IgKGo9MDsgaiA8IGZkLT5udW1fYXJyYXk7IGorKykgeworCQkJaWYgKChpPT1qKSB8fAorCQkJICAgICgobmV3X2xlbiAmIDB4RkYpICE9CisJCQkgICAgIChmZC0+aGFycmF5W2pdLmRpci0+bmFtZV9sZW4gJiAweEZGKSkgfHwKKwkJCSAgICAoc3RybmNtcChuZXdfbmFtZSwgZmQtPmhhcnJheVtqXS5kaXItPm5hbWUsCisJCQkJICAgICBuZXdfbGVuICYgMHhGRikpKQorCQkJCWNvbnRpbnVlOworCQkJbXV0YXRlX25hbWUobmV3X25hbWUsICZuZXdfbGVuKTsKKworCQkJaiA9IC0xOworCQl9CisJCW5ld19uYW1lW25ld19sZW4gJiAweEZGXSA9IDA7CisJCXBjdHguc3RyID0gbmV3X25hbWU7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzJfTk9OX1VOSVFVRV9GSUxFLCAmcGN0eCkpIHsKKwkJCW1lbWNweShlbnQtPmRpci0+bmFtZSwgbmV3X25hbWUsIG5ld19sZW4gJiAweEZGKTsKKwkJCWVudC0+ZGlyLT5uYW1lX2xlbiA9IG5ld19sZW47CisJCQlleHQyZnNfZGlyaGFzaChoYXNoX2FsZywgZW50LT5kaXItPm5hbWUsCisJCQkJICAgICAgIGVudC0+ZGlyLT5uYW1lX2xlbiAmIDB4RkYsCisJCQkJICAgICAgIGZzLT5zdXBlci0+c19oYXNoX3NlZWQsCisJCQkJICAgICAgICZlbnQtPmhhc2gsICZlbnQtPm1pbm9yX2hhc2gpOworCQkJZml4ZWQrKzsKKwkJfQorCX0KKwlyZXR1cm4gZml4ZWQ7Cit9CisKKworc3RhdGljIGVycmNvZGVfdCBjb3B5X2Rpcl9lbnRyaWVzKGUyZnNja190IGN0eCwKKwkJCQkgIHN0cnVjdCBmaWxsX2Rpcl9zdHJ1Y3QgKmZkLAorCQkJCSAgc3RydWN0IG91dF9kaXIgKm91dGRpcikKK3sKKwlleHQyX2ZpbHN5cyAJCWZzID0gY3R4LT5mczsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwljaGFyCQkJKmJsb2NrX3N0YXJ0OworCXN0cnVjdCBoYXNoX2VudHJ5IAkqZW50OworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeQkqZGlyZW50OworCXVuc2lnbmVkIGludAkJcmVjX2xlbiwgcHJldl9yZWNfbGVuLCBsZWZ0LCBzbGFjaywgb2Zmc2V0OworCWludAkJCWk7CisJZXh0Ml9kaXJoYXNoX3QJCXByZXZfaGFzaDsKKworCWlmIChjdHgtPmh0cmVlX3NsYWNrX3BlcmNlbnRhZ2UgPT0gMjU1KSB7CisJCXByb2ZpbGVfZ2V0X3VpbnQoY3R4LT5wcm9maWxlLCAib3B0aW9ucyIsCisJCQkJICJpbmRleGVkX2Rpcl9zbGFja19wZXJjZW50YWdlIiwKKwkJCQkgMCwgMjAsCisJCQkJICZjdHgtPmh0cmVlX3NsYWNrX3BlcmNlbnRhZ2UpOworCQlpZiAoY3R4LT5odHJlZV9zbGFja19wZXJjZW50YWdlID4gMTAwKQorCQkJY3R4LT5odHJlZV9zbGFja19wZXJjZW50YWdlID0gMjA7CisJfQorCisJb3V0ZGlyLT5tYXggPSAwOworCXJldHZhbCA9IGFsbG9jX3NpemVfZGlyKGZzLCBvdXRkaXIsCisJCQkJKGZkLT5kaXJfc2l6ZSAvIGZzLT5ibG9ja3NpemUpICsgMik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlvdXRkaXItPm51bSA9IGZkLT5jb21wcmVzcyA/IDAgOiAxOworCW9mZnNldCA9IDA7CisJb3V0ZGlyLT5oYXNoZXNbMF0gPSAwOworCXByZXZfaGFzaCA9IDE7CisJaWYgKChyZXR2YWwgPSBnZXRfbmV4dF9ibG9jayhmcywgb3V0ZGlyLCAmYmxvY2tfc3RhcnQpKSkKKwkJcmV0dXJuIHJldHZhbDsKKwlkaXJlbnQgPSAoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICopIGJsb2NrX3N0YXJ0OworCXByZXZfcmVjX2xlbiA9IDA7CisJcmVjX2xlbiA9IDA7CisJbGVmdCA9IGZzLT5ibG9ja3NpemU7CisJc2xhY2sgPSBmZC0+Y29tcHJlc3MgPyAxMiA6CisJCShmcy0+YmxvY2tzaXplICogY3R4LT5odHJlZV9zbGFja19wZXJjZW50YWdlKS8xMDA7CisJaWYgKHNsYWNrIDwgMTIpCisJCXNsYWNrID0gMTI7CisJZm9yIChpID0gMDsgaSA8IGZkLT5udW1fYXJyYXk7IGkrKykgeworCQllbnQgPSBmZC0+aGFycmF5ICsgaTsKKwkJaWYgKGVudC0+ZGlyLT5pbm9kZSA9PSAwKQorCQkJY29udGludWU7CisJCXJlY19sZW4gPSBFWFQyX0RJUl9SRUNfTEVOKGVudC0+ZGlyLT5uYW1lX2xlbiAmIDB4RkYpOworCQlpZiAocmVjX2xlbiA+IGxlZnQpIHsKKwkJCWlmIChsZWZ0KSB7CisJCQkJbGVmdCArPSBwcmV2X3JlY19sZW47CisJCQkJcmV0dmFsID0gZXh0MmZzX3NldF9yZWNfbGVuKGZzLCBsZWZ0LCBkaXJlbnQpOworCQkJCWlmIChyZXR2YWwpCisJCQkJCXJldHVybiByZXR2YWw7CisJCQl9CisJCQlpZiAoKHJldHZhbCA9IGdldF9uZXh0X2Jsb2NrKGZzLCBvdXRkaXIsCisJCQkJCQkgICAgICAmYmxvY2tfc3RhcnQpKSkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJb2Zmc2V0ID0gMDsKKwkJfQorCQlsZWZ0ID0gZnMtPmJsb2Nrc2l6ZSAtIG9mZnNldDsKKwkJZGlyZW50ID0gKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSAoYmxvY2tfc3RhcnQgKyBvZmZzZXQpOworCQlpZiAob2Zmc2V0ID09IDApIHsKKwkJCWlmIChlbnQtPmhhc2ggPT0gcHJldl9oYXNoKQorCQkJCW91dGRpci0+aGFzaGVzW291dGRpci0+bnVtLTFdID0gZW50LT5oYXNoIHwgMTsKKwkJCWVsc2UKKwkJCQlvdXRkaXItPmhhc2hlc1tvdXRkaXItPm51bS0xXSA9IGVudC0+aGFzaDsKKwkJfQorCQlkaXJlbnQtPmlub2RlID0gZW50LT5kaXItPmlub2RlOworCQlkaXJlbnQtPm5hbWVfbGVuID0gZW50LT5kaXItPm5hbWVfbGVuOworCQlyZXR2YWwgPSBleHQyZnNfc2V0X3JlY19sZW4oZnMsIHJlY19sZW4sIGRpcmVudCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlwcmV2X3JlY19sZW4gPSByZWNfbGVuOworCQltZW1jcHkoZGlyZW50LT5uYW1lLCBlbnQtPmRpci0+bmFtZSwgZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpOworCQlvZmZzZXQgKz0gcmVjX2xlbjsKKwkJbGVmdCAtPSByZWNfbGVuOworCQlpZiAobGVmdCA8IHNsYWNrKSB7CisJCQlwcmV2X3JlY19sZW4gKz0gbGVmdDsKKwkJCXJldHZhbCA9IGV4dDJmc19zZXRfcmVjX2xlbihmcywgcHJldl9yZWNfbGVuLCBkaXJlbnQpOworCQkJaWYgKHJldHZhbCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJb2Zmc2V0ICs9IGxlZnQ7CisJCQlsZWZ0ID0gMDsKKwkJfQorCQlwcmV2X2hhc2ggPSBlbnQtPmhhc2g7CisJfQorCWlmIChsZWZ0KQorCQlyZXR2YWwgPSBleHQyZnNfc2V0X3JlY19sZW4oZnMsIHJlY19sZW4gKyBsZWZ0LCBkaXJlbnQpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgc3RydWN0IGV4dDJfZHhfcm9vdF9pbmZvICpzZXRfcm9vdF9ub2RlKGV4dDJfZmlsc3lzIGZzLCBjaGFyICpidWYsCisJCQkJICAgIGV4dDJfaW5vX3QgaW5vLCBleHQyX2lub190IHBhcmVudCkKK3sKKwlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgCQkqZGlyOworCXN0cnVjdCBleHQyX2R4X3Jvb3RfaW5mbyAgCSpyb290OworCXN0cnVjdCBleHQyX2R4X2NvdW50bGltaXQJKmxpbWl0czsKKwlpbnQJCQkJZmlsZXR5cGUgPSAwOworCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFKQorCQlmaWxldHlwZSA9IEVYVDJfRlRfRElSIDw8IDg7CisKKwltZW1zZXQoYnVmLCAwLCBmcy0+YmxvY2tzaXplKTsKKwlkaXIgPSAoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICopIGJ1ZjsKKwlkaXItPmlub2RlID0gaW5vOworCWRpci0+bmFtZVswXSA9ICcuJzsKKwlkaXItPm5hbWVfbGVuID0gMSB8IGZpbGV0eXBlOworCWRpci0+cmVjX2xlbiA9IDEyOworCWRpciA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikgKGJ1ZiArIDEyKTsKKwlkaXItPmlub2RlID0gcGFyZW50OworCWRpci0+bmFtZVswXSA9ICcuJzsKKwlkaXItPm5hbWVbMV0gPSAnLic7CisJZGlyLT5uYW1lX2xlbiA9IDIgfCBmaWxldHlwZTsKKwlkaXItPnJlY19sZW4gPSBmcy0+YmxvY2tzaXplIC0gMTI7CisKKwlyb290ID0gKHN0cnVjdCBleHQyX2R4X3Jvb3RfaW5mbyAqKSAoYnVmKzI0KTsKKwlyb290LT5yZXNlcnZlZF96ZXJvID0gMDsKKwlyb290LT5oYXNoX3ZlcnNpb24gPSBmcy0+c3VwZXItPnNfZGVmX2hhc2hfdmVyc2lvbjsKKwlyb290LT5pbmZvX2xlbmd0aCA9IDg7CisJcm9vdC0+aW5kaXJlY3RfbGV2ZWxzID0gMDsKKwlyb290LT51bnVzZWRfZmxhZ3MgPSAwOworCisJbGltaXRzID0gKHN0cnVjdCBleHQyX2R4X2NvdW50bGltaXQgKikgKGJ1ZiszMik7CisJbGltaXRzLT5saW1pdCA9IChmcy0+YmxvY2tzaXplIC0gMzIpIC8gc2l6ZW9mKHN0cnVjdCBleHQyX2R4X2VudHJ5KTsKKwlsaW1pdHMtPmNvdW50ID0gMDsKKworCXJldHVybiByb290OworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZXh0Ml9keF9lbnRyeSAqc2V0X2ludF9ub2RlKGV4dDJfZmlsc3lzIGZzLCBjaGFyICpidWYpCit7CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5IAkJKmRpcjsKKwlzdHJ1Y3QgZXh0Ml9keF9jb3VudGxpbWl0CSpsaW1pdHM7CisKKwltZW1zZXQoYnVmLCAwLCBmcy0+YmxvY2tzaXplKTsKKwlkaXIgPSAoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICopIGJ1ZjsKKwlkaXItPmlub2RlID0gMDsKKwkodm9pZCkgZXh0MmZzX3NldF9yZWNfbGVuKGZzLCBmcy0+YmxvY2tzaXplLCBkaXIpOworCisJbGltaXRzID0gKHN0cnVjdCBleHQyX2R4X2NvdW50bGltaXQgKikgKGJ1Zis4KTsKKwlsaW1pdHMtPmxpbWl0ID0gKGZzLT5ibG9ja3NpemUgLSA4KSAvIHNpemVvZihzdHJ1Y3QgZXh0Ml9keF9lbnRyeSk7CisJbGltaXRzLT5jb3VudCA9IDA7CisKKwlyZXR1cm4gKHN0cnVjdCBleHQyX2R4X2VudHJ5ICopIGxpbWl0czsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIGxlYWYgbm9kZXMgd2hpY2ggaGF2ZSBiZWVuIHdyaXR0ZW4gaW4KKyAqIG91dGRpciwgYW5kIHBvcHVsYXRlcyB0aGUgcm9vdCBub2RlIGFuZCBhbnkgbmVjZXNzYXJ5IGludGVyaW9yIG5vZGVzLgorICovCitzdGF0aWMgZXJyY29kZV90IGNhbGN1bGF0ZV90cmVlKGV4dDJfZmlsc3lzIGZzLAorCQkJCXN0cnVjdCBvdXRfZGlyICpvdXRkaXIsCisJCQkJZXh0Ml9pbm9fdCBpbm8sCisJCQkJZXh0Ml9pbm9fdCBwYXJlbnQpCit7CisJc3RydWN0IGV4dDJfZHhfcm9vdF9pbmZvICAJKnJvb3RfaW5mbzsKKwlzdHJ1Y3QgZXh0Ml9keF9lbnRyeSAJCSpyb290LCAqZHhfZW50ID0gMDsKKwlzdHJ1Y3QgZXh0Ml9keF9jb3VudGxpbWl0CSpyb290X2xpbWl0LCAqbGltaXQ7CisJZXJyY29kZV90CQkJcmV0dmFsOworCWNoYXIJCQkJKiBibG9ja19zdGFydDsKKwlpbnQJCQkJaSwgYzEsIGMyLCBuYmxrczsKKwlpbnQJCQkJbGltaXRfb2Zmc2V0LCByb290X29mZnNldDsKKworCXJvb3RfaW5mbyA9IHNldF9yb290X25vZGUoZnMsIG91dGRpci0+YnVmLCBpbm8sIHBhcmVudCk7CisJcm9vdF9vZmZzZXQgPSBsaW1pdF9vZmZzZXQgPSAoKGNoYXIgKikgcm9vdF9pbmZvIC0gb3V0ZGlyLT5idWYpICsKKwkJcm9vdF9pbmZvLT5pbmZvX2xlbmd0aDsKKwlyb290X2xpbWl0ID0gKHN0cnVjdCBleHQyX2R4X2NvdW50bGltaXQgKikgKG91dGRpci0+YnVmICsgbGltaXRfb2Zmc2V0KTsKKwljMSA9IHJvb3RfbGltaXQtPmxpbWl0OworCW5ibGtzID0gb3V0ZGlyLT5udW07CisKKwkvKiBXcml0ZSBvdXQgdGhlIHBvaW50ZXIgYmxvY2tzICovCisJaWYgKG5ibGtzLTEgPD0gYzEpIHsKKwkJLyogSnVzdCB3cml0ZSBvdXQgdGhlIHJvb3QgYmxvY2ssIGFuZCB3ZSdyZSBkb25lICovCisJCXJvb3QgPSAoc3RydWN0IGV4dDJfZHhfZW50cnkgKikgKG91dGRpci0+YnVmICsgcm9vdF9vZmZzZXQpOworCQlmb3IgKGk9MTsgaSA8IG5ibGtzOyBpKyspIHsKKwkJCXJvb3QtPmJsb2NrID0gZXh0MmZzX2NwdV90b19sZTMyKGkpOworCQkJaWYgKGkgIT0gMSkKKwkJCQlyb290LT5oYXNoID0KKwkJCQkJZXh0MmZzX2NwdV90b19sZTMyKG91dGRpci0+aGFzaGVzW2ldKTsKKwkJCXJvb3QrKzsKKwkJCWMxLS07CisJCX0KKwl9IGVsc2UgeworCQljMiA9IDA7CisJCWxpbWl0ID0gMDsKKwkJcm9vdF9pbmZvLT5pbmRpcmVjdF9sZXZlbHMgPSAxOworCQlmb3IgKGk9MTsgaSA8IG5ibGtzOyBpKyspIHsKKwkJCWlmIChjMSA9PSAwKQorCQkJCXJldHVybiBFTk9TUEM7CisJCQlpZiAoYzIgPT0gMCkgeworCQkJCWlmIChsaW1pdCkKKwkJCQkJbGltaXQtPmxpbWl0ID0gbGltaXQtPmNvdW50ID0KKwkJZXh0MmZzX2NwdV90b19sZTE2KGxpbWl0LT5saW1pdCk7CisJCQkJcm9vdCA9IChzdHJ1Y3QgZXh0Ml9keF9lbnRyeSAqKQorCQkJCQkob3V0ZGlyLT5idWYgKyByb290X29mZnNldCk7CisJCQkJcm9vdC0+YmxvY2sgPSBleHQyZnNfY3B1X3RvX2xlMzIob3V0ZGlyLT5udW0pOworCQkJCWlmIChpICE9IDEpCisJCQkJCXJvb3QtPmhhc2ggPQorCQkJZXh0MmZzX2NwdV90b19sZTMyKG91dGRpci0+aGFzaGVzW2ldKTsKKwkJCQlpZiAoKHJldHZhbCA9ICBnZXRfbmV4dF9ibG9jayhmcywgb3V0ZGlyLAorCQkJCQkJCSAgICAgICZibG9ja19zdGFydCkpKQorCQkJCQlyZXR1cm4gcmV0dmFsOworCQkJCWR4X2VudCA9IHNldF9pbnRfbm9kZShmcywgYmxvY2tfc3RhcnQpOworCQkJCWxpbWl0ID0gKHN0cnVjdCBleHQyX2R4X2NvdW50bGltaXQgKikgZHhfZW50OworCQkJCWMyID0gbGltaXQtPmxpbWl0OworCQkJCXJvb3Rfb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgZXh0Ml9keF9lbnRyeSk7CisJCQkJYzEtLTsKKwkJCX0KKwkJCWR4X2VudC0+YmxvY2sgPSBleHQyZnNfY3B1X3RvX2xlMzIoaSk7CisJCQlpZiAoYzIgIT0gbGltaXQtPmxpbWl0KQorCQkJCWR4X2VudC0+aGFzaCA9CisJCQkJCWV4dDJmc19jcHVfdG9fbGUzMihvdXRkaXItPmhhc2hlc1tpXSk7CisJCQlkeF9lbnQrKzsKKwkJCWMyLS07CisJCX0KKwkJbGltaXQtPmNvdW50ID0gZXh0MmZzX2NwdV90b19sZTE2KGxpbWl0LT5saW1pdCAtIGMyKTsKKwkJbGltaXQtPmxpbWl0ID0gZXh0MmZzX2NwdV90b19sZTE2KGxpbWl0LT5saW1pdCk7CisJfQorCXJvb3RfbGltaXQgPSAoc3RydWN0IGV4dDJfZHhfY291bnRsaW1pdCAqKSAob3V0ZGlyLT5idWYgKyBsaW1pdF9vZmZzZXQpOworCXJvb3RfbGltaXQtPmNvdW50ID0gZXh0MmZzX2NwdV90b19sZTE2KHJvb3RfbGltaXQtPmxpbWl0IC0gYzEpOworCXJvb3RfbGltaXQtPmxpbWl0ID0gZXh0MmZzX2NwdV90b19sZTE2KHJvb3RfbGltaXQtPmxpbWl0KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgd3JpdGVfZGlyX3N0cnVjdCB7CisJc3RydWN0IG91dF9kaXIgKm91dGRpcjsKKwllcnJjb2RlX3QJZXJyOworCWUyZnNja190CWN0eDsKKwlibGs2NF90CQljbGVhcmVkOworfTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCB3cml0ZXMgb3V0IGEgZGlyZWN0b3J5IGJsb2NrLgorICovCitzdGF0aWMgaW50IHdyaXRlX2Rpcl9ibG9jayhleHQyX2ZpbHN5cyBmcywKKwkJCSAgIGJsazY0X3QgKmJsb2NrX25yLAorCQkJICAgZTJfYmxrY250X3QgYmxvY2tjbnQsCisJCQkgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHdyaXRlX2Rpcl9zdHJ1Y3QJKndkID0gKHN0cnVjdCB3cml0ZV9kaXJfc3RydWN0ICopIHByaXZfZGF0YTsKKwlibGs2NF90CWJsazsKKwljaGFyCSpkaXI7CisKKwlpZiAoKmJsb2NrX25yID09IDApCisJCXJldHVybiAwOworCWlmIChibG9ja2NudCA+PSB3ZC0+b3V0ZGlyLT5udW0pIHsKKwkJZTJmc2NrX3JlYWRfYml0bWFwcyh3ZC0+Y3R4KTsKKwkJYmxrID0gKmJsb2NrX25yOworCQkvKgorCQkgKiBJbiB0aGVvcnksIHdlIG9ubHkgcmVsZWFzZSBibG9ja3MgZnJvbSB0aGUgZW5kIG9mIHRoZQorCQkgKiBkaXJlY3RvcnkgZmlsZSwgc28gaXQncyBmaW5lIHRvIGNsb2JiZXIgYSB3aG9sZSBjbHVzdGVyIGF0CisJCSAqIG9uY2UuCisJCSAqLworCQlpZiAoYmxrICUgRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpID09IDApIHsKKwkJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIGJsaywgLTEpOworCQkJd2QtPmNsZWFyZWQrKzsKKwkJfQorCQkqYmxvY2tfbnIgPSAwOworCQlyZXR1cm4gQkxPQ0tfQ0hBTkdFRDsKKwl9CisJaWYgKGJsb2NrY250IDwgMCkKKwkJcmV0dXJuIDA7CisKKwlkaXIgPSB3ZC0+b3V0ZGlyLT5idWYgKyAoYmxvY2tjbnQgKiBmcy0+YmxvY2tzaXplKTsKKwl3ZC0+ZXJyID0gZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazMoZnMsICpibG9ja19uciwgZGlyLCAwKTsKKwlpZiAod2QtPmVycikKKwkJcmV0dXJuIEJMT0NLX0FCT1JUOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IHdyaXRlX2RpcmVjdG9yeShlMmZzY2tfdCBjdHgsIGV4dDJfZmlsc3lzIGZzLAorCQkJCSBzdHJ1Y3Qgb3V0X2RpciAqb3V0ZGlyLAorCQkJCSBleHQyX2lub190IGlubywgaW50IGNvbXByZXNzKQoreworCXN0cnVjdCB3cml0ZV9kaXJfc3RydWN0IHdkOworCWVycmNvZGVfdAlyZXR2YWw7CisJc3RydWN0IGV4dDJfaW5vZGUgCWlub2RlOworCisJcmV0dmFsID0gZTJmc2NrX2V4cGFuZF9kaXJlY3RvcnkoY3R4LCBpbm8sIC0xLCBvdXRkaXItPm51bSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXdkLm91dGRpciA9IG91dGRpcjsKKwl3ZC5lcnIgPSAwOworCXdkLmN0eCA9IGN0eDsKKwl3ZC5jbGVhcmVkID0gMDsKKworCXJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhmcywgaW5vLCAwLCAwLAorCQkJCSAgICAgICB3cml0ZV9kaXJfYmxvY2ssICZ3ZCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlpZiAod2QuZXJyKQorCQlyZXR1cm4gd2QuZXJyOworCisJZTJmc2NrX3JlYWRfaW5vZGUoY3R4LCBpbm8sICZpbm9kZSwgInJlaGFzaF9kaXIiKTsKKwlpZiAoY29tcHJlc3MpCisJCWlub2RlLmlfZmxhZ3MgJj0gfkVYVDJfSU5ERVhfRkw7CisJZWxzZQorCQlpbm9kZS5pX2ZsYWdzIHw9IEVYVDJfSU5ERVhfRkw7CisJcmV0dmFsID0gZXh0MmZzX2lub2RlX3NpemVfc2V0KGZzLCAmaW5vZGUsCisJCQkJICAgICAgIG91dGRpci0+bnVtICogZnMtPmJsb2Nrc2l6ZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlleHQyZnNfaWJsa19zdWJfYmxvY2tzKGZzLCAmaW5vZGUsIHdkLmNsZWFyZWQpOworCWUyZnNja193cml0ZV9pbm9kZShjdHgsIGlubywgJmlub2RlLCAicmVoYXNoX2RpciIpOworCisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBlMmZzY2tfcmVoYXNoX2RpcihlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vKQoreworCWV4dDJfZmlsc3lzIAkJZnMgPSBjdHgtPmZzOworCWVycmNvZGVfdAkJcmV0dmFsOworCXN0cnVjdCBleHQyX2lub2RlIAlpbm9kZTsKKwljaGFyCQkJKmRpcl9idWYgPSAwOworCXN0cnVjdCBmaWxsX2Rpcl9zdHJ1Y3QJZmQ7CisJc3RydWN0IG91dF9kaXIJCW91dGRpcjsKKworCW91dGRpci5tYXggPSBvdXRkaXIubnVtID0gMDsKKwlvdXRkaXIuYnVmID0gMDsKKwlvdXRkaXIuaGFzaGVzID0gMDsKKwllMmZzY2tfcmVhZF9pbm9kZShjdHgsIGlubywgJmlub2RlLCAicmVoYXNoX2RpciIpOworCisJcmV0dmFsID0gRU5PTUVNOworCWZkLmhhcnJheSA9IDA7CisJZGlyX2J1ZiA9IG1hbGxvYyhpbm9kZS5pX3NpemUpOworCWlmICghZGlyX2J1ZikKKwkJZ290byBlcnJvdXQ7CisKKwlmZC5tYXhfYXJyYXkgPSBpbm9kZS5pX3NpemUgLyAzMjsKKwlmZC5udW1fYXJyYXkgPSAwOworCWZkLmhhcnJheSA9IG1hbGxvYyhmZC5tYXhfYXJyYXkgKiBzaXplb2Yoc3RydWN0IGhhc2hfZW50cnkpKTsKKwlpZiAoIWZkLmhhcnJheSkKKwkJZ290byBlcnJvdXQ7CisKKwlmZC5jdHggPSBjdHg7CisJZmQuYnVmID0gZGlyX2J1ZjsKKwlmZC5pbm9kZSA9ICZpbm9kZTsKKwlmZC5lcnIgPSAwOworCWZkLmRpcl9zaXplID0gMDsKKwlmZC5jb21wcmVzcyA9IDA7CisJaWYgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICYgRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfSU5ERVgpIHx8CisJICAgIChpbm9kZS5pX3NpemUgLyBmcy0+YmxvY2tzaXplKSA8IDIpCisJCWZkLmNvbXByZXNzID0gMTsKKwlmZC5wYXJlbnQgPSAwOworCityZXRyeV9ub2hhc2g6CisJLyogUmVhZCBpbiB0aGUgZW50aXJlIGRpcmVjdG9yeSBpbnRvIG1lbW9yeSAqLworCXJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhmcywgaW5vLCAwLCAwLAorCQkJCSAgICAgICBmaWxsX2Rpcl9ibG9jaywgJmZkKTsKKwlpZiAoZmQuZXJyKSB7CisJCXJldHZhbCA9IGZkLmVycjsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJLyogCisJICogSWYgdGhlIGVudHJpZXMgcmVhZCBhcmUgbGVzcyB0aGFuIGEgYmxvY2ssIHRoZW4gZG9uJ3QgaW5kZXgKKwkgKiB0aGUgZGlyZWN0b3J5CisJICovCisJaWYgKCFmZC5jb21wcmVzcyAmJiAoZmQuZGlyX3NpemUgPCAoZnMtPmJsb2Nrc2l6ZSAtIDI0KSkpIHsKKwkJZmQuY29tcHJlc3MgPSAxOworCQlmZC5kaXJfc2l6ZSA9IDA7CisJCWZkLm51bV9hcnJheSA9IDA7CisJCWdvdG8gcmV0cnlfbm9oYXNoOworCX0KKworI2lmIDAKKwlwcmludGYoIiVkIGVudHJpZXMgKCVkIGJ5dGVzKSBmb3VuZCBpbiBpbm9kZSAlZFxuIiwKKwkgICAgICAgZmQubnVtX2FycmF5LCBmZC5kaXJfc2l6ZSwgaW5vKTsKKyNlbmRpZgorCisJLyogU29ydCB0aGUgbGlzdCAqLworcmVzb3J0OgorCWlmIChmZC5jb21wcmVzcyAmJiBmZC5udW1fYXJyYXkgPiAxKQorCQlxc29ydChmZC5oYXJyYXkrMiwgZmQubnVtX2FycmF5LTIsIHNpemVvZihzdHJ1Y3QgaGFzaF9lbnRyeSksCisJCSAgICAgIGhhc2hfY21wKTsKKwllbHNlCisJCXFzb3J0KGZkLmhhcnJheSwgZmQubnVtX2FycmF5LCBzaXplb2Yoc3RydWN0IGhhc2hfZW50cnkpLAorCQkgICAgICBoYXNoX2NtcCk7CisKKwkvKgorCSAqIExvb2sgZm9yIGR1cGxpY2F0ZXMKKwkgKi8KKwlpZiAoZHVwbGljYXRlX3NlYXJjaF9hbmRfZml4KGN0eCwgZnMsIGlubywgJmZkKSkKKwkJZ290byByZXNvcnQ7CisKKwlpZiAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9OTykgeworCQlyZXR2YWwgPSAwOworCQlnb3RvIGVycm91dDsKKwl9CisKKwkvKiBTb3J0IG5vbi1oYXNoZWQgZGlyZWN0b3JpZXMgYnkgaW5vZGUgbnVtYmVyICovCisJaWYgKGZkLmNvbXByZXNzICYmIGZkLm51bV9hcnJheSA+IDEpCisJCXFzb3J0KGZkLmhhcnJheSsyLCBmZC5udW1fYXJyYXktMiwKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBoYXNoX2VudHJ5KSwgaW5vX2NtcCk7CisKKwkvKgorCSAqIENvcHkgdGhlIGRpcmVjdG9yeSBlbnRyaWVzLiAgSW4gYSBodHJlZSBkaXJlY3RvcnkgdGhlc2UKKwkgKiB3aWxsIGJlY29tZSB0aGUgbGVhZiBub2Rlcy4KKwkgKi8KKwlyZXR2YWwgPSBjb3B5X2Rpcl9lbnRyaWVzKGN0eCwgJmZkLCAmb3V0ZGlyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCWZyZWUoZGlyX2J1Zik7IGRpcl9idWYgPSAwOworCisJaWYgKCFmZC5jb21wcmVzcykgeworCQkvKiBDYWxjdWxhdGUgdGhlIGludGVyaW9yIG5vZGVzICovCisJCXJldHZhbCA9IGNhbGN1bGF0ZV90cmVlKGZzLCAmb3V0ZGlyLCBpbm8sIGZkLnBhcmVudCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwl9CisKKwlyZXR2YWwgPSB3cml0ZV9kaXJlY3RvcnkoY3R4LCBmcywgJm91dGRpciwgaW5vLCBmZC5jb21wcmVzcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKK2Vycm91dDoKKwlmcmVlKGRpcl9idWYpOworCWZyZWUoZmQuaGFycmF5KTsKKworCWZyZWVfb3V0X2Rpcigmb3V0ZGlyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCit2b2lkIGUyZnNja19yZWhhc2hfZGlyZWN0b3JpZXMoZTJmc2NrX3QgY3R4KQoreworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKyNpZmRlZiBSRVNPVVJDRV9UUkFDSworCXN0cnVjdCByZXNvdXJjZV90cmFjawlydHJhY2s7CisjZW5kaWYKKwlzdHJ1Y3QgZGlyX2luZm8JCSpkaXI7CisJZXh0Ml91MzJfaXRlcmF0ZSAJaXRlcjsKKwlzdHJ1Y3QgZGlyX2luZm9faXRlciAqCWRpcmluZm9faXRlciA9IDA7CisJZXh0Ml9pbm9fdAkJaW5vOworCWVycmNvZGVfdAkJcmV0dmFsOworCWludAkJCWN1ciwgbWF4LCBhbGxfZGlycywgZmlyc3QgPSAxOworCisJaW5pdF9yZXNvdXJjZV90cmFjaygmcnRyYWNrLCBjdHgtPmZzLT5pbyk7CisJYWxsX2RpcnMgPSBjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX0NPTVBSRVNTX0RJUlM7CisKKwlpZiAoIWN0eC0+ZGlyc190b19oYXNoICYmICFhbGxfZGlycykKKwkJcmV0dXJuOworCisJZTJmc2NrX2dldF9sb3N0X2FuZF9mb3VuZChjdHgsIDApOworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCWN1ciA9IDA7CisJaWYgKGFsbF9kaXJzKSB7CisJCWRpcmluZm9faXRlciA9IGUyZnNja19kaXJfaW5mb19pdGVyX2JlZ2luKGN0eCk7CisJCW1heCA9IGUyZnNja19nZXRfbnVtX2RpcmluZm8oY3R4KTsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBleHQyZnNfdTMyX2xpc3RfaXRlcmF0ZV9iZWdpbihjdHgtPmRpcnNfdG9faGFzaCwKKwkJCQkJCSAgICAgICAmaXRlcik7CisJCWlmIChyZXR2YWwpIHsKKwkJCXBjdHguZXJyY29kZSA9IHJldHZhbDsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM0FfT1BUSU1JWkVfSVRFUiwgJnBjdHgpOworCQkJcmV0dXJuOworCQl9CisJCW1heCA9IGV4dDJmc191MzJfbGlzdF9jb3VudChjdHgtPmRpcnNfdG9faGFzaCk7CisJfQorCXdoaWxlICgxKSB7CisJCWlmIChhbGxfZGlycykgeworCQkJaWYgKChkaXIgPSBlMmZzY2tfZGlyX2luZm9faXRlcihjdHgsCisJCQkJCQkJZGlyaW5mb19pdGVyKSkgPT0gMCkKKwkJCQlicmVhazsKKwkJCWlubyA9IGRpci0+aW5vOworCQl9IGVsc2UgeworCQkJaWYgKCFleHQyZnNfdTMyX2xpc3RfaXRlcmF0ZShpdGVyLCAmaW5vKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaW5vID09IGN0eC0+bG9zdF9hbmRfZm91bmQpCisJCQljb250aW51ZTsKKwkJcGN0eC5kaXIgPSBpbm87CisJCWlmIChmaXJzdCkgeworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8zQV9QQVNTX0hFQURFUiwgJnBjdHgpOworCQkJZmlyc3QgPSAwOworCQl9CisjaWYgMAorCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNBX09QVElNSVpFX0RJUiwgJnBjdHgpOworI2VuZGlmCisJCXBjdHguZXJyY29kZSA9IGUyZnNja19yZWhhc2hfZGlyKGN0eCwgaW5vKTsKKwkJaWYgKHBjdHguZXJyY29kZSkgeworCQkJZW5kX3Byb2JsZW1fbGF0Y2goY3R4LCBQUl9MQVRDSF9PUFRJTUlaRV9ESVIpOworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8zQV9PUFRJTUlaRV9ESVJfRVJSLCAmcGN0eCk7CisJCX0KKwkJaWYgKGN0eC0+cHJvZ3Jlc3MgJiYgIWN0eC0+cHJvZ3Jlc3NfZmQpCisJCQllMmZzY2tfc2ltcGxlX3Byb2dyZXNzKGN0eCwgIlJlYnVpbGRpbmcgZGlyZWN0b3J5IiwKKwkJCSAgICAgICAxMDAuMCAqIChmbG9hdCkgKCsrY3VyKSAvIChmbG9hdCkgbWF4LCBpbm8pOworCX0KKwllbmRfcHJvYmxlbV9sYXRjaChjdHgsIFBSX0xBVENIX09QVElNSVpFX0RJUik7CisJaWYgKGFsbF9kaXJzKQorCQllMmZzY2tfZGlyX2luZm9faXRlcl9lbmQoY3R4LCBkaXJpbmZvX2l0ZXIpOworCWVsc2UKKwkJZXh0MmZzX3UzMl9saXN0X2l0ZXJhdGVfZW5kKGl0ZXIpOworCisJaWYgKGN0eC0+ZGlyc190b19oYXNoKQorCQlleHQyZnNfdTMyX2xpc3RfZnJlZShjdHgtPmRpcnNfdG9faGFzaCk7CisJY3R4LT5kaXJzX3RvX2hhc2ggPSAwOworCisJcHJpbnRfcmVzb3VyY2VfdHJhY2soY3R4LCAiUGFzcyAzQSIsICZydHJhY2ssIGN0eC0+ZnMtPmlvKTsKK30KZGlmZiAtLWdpdCBhL2UyZnNjay9yZXZva2UuYyBiL2UyZnNjay9yZXZva2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGMyNjVlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL3Jldm9rZS5jCkBAIC0wLDAgKzEsNjQxIEBACisvKgorICogbGludXgvZnMvcmV2b2tlLmMKKyAqCisgKiBXcml0dGVuIGJ5IFN0ZXBoZW4gQy4gVHdlZWRpZSA8c2N0QHJlZGhhdC5jb20+LCAyMDAwCisgKgorICogQ29weXJpZ2h0IDIwMDAgUmVkIEhhdCBjb3JwIC0tLSBBbGwgUmlnaHRzIFJlc2VydmVkCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCBhbmQgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgb3IgYXQgeW91cgorICogb3B0aW9uLCBhbnkgbGF0ZXIgdmVyc2lvbiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKgorICogSm91cm5hbCByZXZva2Ugcm91dGluZXMgZm9yIHRoZSBnZW5lcmljIGZpbGVzeXN0ZW0gam91cm5hbGluZyBjb2RlOworICogcGFydCBvZiB0aGUgZXh0MmZzIGpvdXJuYWxpbmcgc3lzdGVtLgorICoKKyAqIFJldm9rZSBpcyB0aGUgbWVjaGFuaXNtIHVzZWQgdG8gcHJldmVudCBvbGQgbG9nIHJlY29yZHMgZm9yIGRlbGV0ZWQKKyAqIG1ldGFkYXRhIGZyb20gYmVpbmcgcmVwbGF5ZWQgb24gdG9wIG9mIG5ld2VyIGRhdGEgdXNpbmcgdGhlIHNhbWUKKyAqIGJsb2Nrcy4gIFRoZSByZXZva2UgbWVjaGFuaXNtIGlzIHVzZWQgaW4gdHdvIHNlcGFyYXRlIHBsYWNlczoKKyAqCisgKiArIENvbW1pdDogZHVyaW5nIGNvbW1pdCB3ZSB3cml0ZSB0aGUgZW50aXJlIGxpc3Qgb2YgdGhlIGN1cnJlbnQKKyAqICAgdHJhbnNhY3Rpb24ncyByZXZva2VkIGJsb2NrcyB0byB0aGUgam91cm5hbAorICoKKyAqICsgUmVjb3Zlcnk6IGR1cmluZyByZWNvdmVyeSB3ZSByZWNvcmQgdGhlIHRyYW5zYWN0aW9uIElEIG9mIGFsbAorICogICByZXZva2VkIGJsb2Nrcy4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSByZXZva2UgcmVjb3JkcyBpbiB0aGUgbG9nCisgKiAgIGZvciBhIHNpbmdsZSBibG9jaywgb25seSB0aGUgbGFzdCBvbmUgY291bnRzLCBhbmQgaWYgdGhlcmUgaXMgYSBsb2cKKyAqICAgZW50cnkgZm9yIGEgYmxvY2sgYmV5b25kIHRoZSBsYXN0IHJldm9rZSwgdGhlbiB0aGF0IGxvZyBlbnRyeSBzdGlsbAorICogICBnZXRzIHJlcGxheWVkLgorICoKKyAqIFdlIGNhbiBnZXQgaW50ZXJhY3Rpb25zIGJldHdlZW4gcmV2b2tlcyBhbmQgbmV3IGxvZyBkYXRhIHdpdGhpbiBhCisgKiBzaW5nbGUgdHJhbnNhY3Rpb246CisgKgorICogQmxvY2sgaXMgcmV2b2tlZCBhbmQgdGhlbiBqb3VybmFsZWQ6CisgKiAgIFRoZSBkZXNpcmVkIGVuZCByZXN1bHQgaXMgdGhlIGpvdXJuYWxpbmcgb2YgdGhlIG5ldyBibG9jaywgc28gd2UKKyAqICAgY2FuY2VsIHRoZSByZXZva2UgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBjb21taXRzLgorICoKKyAqIEJsb2NrIGlzIGpvdXJuYWxlZCBhbmQgdGhlbiByZXZva2VkOgorICogICBUaGUgcmV2b2tlIG11c3QgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIHdyaXRlIG9mIHRoZSBibG9jaywgc28gd2UKKyAqICAgbmVlZCBlaXRoZXIgdG8gY2FuY2VsIHRoZSBqb3VybmFsIGVudHJ5IG9yIHRvIHdyaXRlIHRoZSByZXZva2UKKyAqICAgbGF0ZXIgaW4gdGhlIGxvZyB0aGFuIHRoZSBsb2cgYmxvY2suICBJbiB0aGlzIGNhc2UsIHdlIGNob29zZSB0aGUKKyAqICAgbGF0dGVyOiBqb3VybmFsaW5nIGEgYmxvY2sgY2FuY2VscyBhbnkgcmV2b2tlIHJlY29yZCBmb3IgdGhhdCBibG9jaworICogICBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgc28gYW55IHJldm9rZSBmb3IgdGhhdCBibG9jayBpbiB0aGUKKyAqICAgdHJhbnNhY3Rpb24gbXVzdCBoYXZlIGhhcHBlbmVkIGFmdGVyIHRoZSBibG9jayB3YXMgam91cm5hbGVkIGFuZCBzbworICogICB0aGUgcmV2b2tlIG11c3QgdGFrZSBwcmVjZWRlbmNlLgorICoKKyAqIEJsb2NrIGlzIHJldm9rZWQgYW5kIHRoZW4gd3JpdHRlbiBhcyBkYXRhOgorICogICBUaGUgZGF0YSB3cml0ZSBpcyBhbGxvd2VkIHRvIHN1Y2NlZWQsIGJ1dCB0aGUgcmV2b2tlIGlzIF9ub3RfCisgKiAgIGNhbmNlbGxlZC4gIFdlIHN0aWxsIG5lZWQgdG8gcHJldmVudCBvbGQgbG9nIHJlY29yZHMgZnJvbQorICogICBvdmVyd3JpdGluZyB0aGUgbmV3IGRhdGEuICBXZSBkb24ndCBldmVuIG5lZWQgdG8gY2xlYXIgdGhlIHJldm9rZQorICogICBiaXQgaGVyZS4KKyAqCisgKiBSZXZva2UgaW5mb3JtYXRpb24gb24gYnVmZmVycyBpcyBhIHRyaS1zdGF0ZSB2YWx1ZToKKyAqCisgKiBSZXZva2VWYWxpZCBjbGVhcjoJbm8gY2FjaGVkIHJldm9rZSBzdGF0dXMsIG5lZWQgdG8gbG9vayBpdCB1cAorICogUmV2b2tlVmFsaWQgc2V0LCBSZXZva2VkIGNsZWFyOgorICoJCQlidWZmZXIgaGFzIG5vdCBiZWVuIHJldm9rZWQsIGFuZCBjYW5jZWxfcmV2b2tlCisgKgkJCW5lZWQgZG8gbm90aGluZy4KKyAqIFJldm9rZVZhbGlkIHNldCwgUmV2b2tlZCBzZXQ6CisgKgkJCWJ1ZmZlciBoYXMgYmVlbiByZXZva2VkLgorICovCisKKyNpZm5kZWYgX19LRVJORUxfXworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImpmc191c2VyLmgiCisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+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+bmV4dDsKKwkJCWxpc3RfZGVsKCZyZWNvcmQtPmhhc2gpOworCQkJa21lbV9jYWNoZV9mcmVlKHJldm9rZV9yZWNvcmRfY2FjaGUsIHJlY29yZCk7CisJCX0KKwl9Cit9CisKZGlmZiAtLWdpdCBhL2UyZnNjay9zY2FudGVzdC5jIGIvZTJmc2NrL3NjYW50ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzMTE0MQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9zY2FudGVzdC5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogc2NhbnRlc3QuYyAtIHRlc3QgdGhlIHNwZWVkIG9mIHRoZSBpbm9kZSBzY2FuIHJvdXRpbmUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaWZkZWYgSEFWRV9NQUxMT0NfSAorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKKyNpbmNsdWRlICJldC9jb21fZXJyLmgiCisjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKworCitleHRlcm4gaW50IGlzYXR0eShpbnQpOworCitjb25zdCBjaGFyICogZGV2aWNlX25hbWUgPSBOVUxMOworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiBob3cgbXVjaCByZXNvdXJjZXMgaGF2ZQorICogYmVlbiB1c2VkIGZvciBhIHBhcnRpY3VsYXIgcGFzcyBvZiBlMmZzY2suCisgKi8KK3N0cnVjdCByZXNvdXJjZV90cmFjayB7CisJc3RydWN0IHRpbWV2YWwgdGltZV9zdGFydDsKKwlzdHJ1Y3QgdGltZXZhbCB1c2VyX3N0YXJ0OworCXN0cnVjdCB0aW1ldmFsIHN5c3RlbV9zdGFydDsKKwl2b2lkCSpicmtfc3RhcnQ7Cit9OworCitzdHJ1Y3QgcmVzb3VyY2VfdHJhY2sJZ2xvYmFsX3J0cmFjazsKKwordm9pZCBpbml0X3Jlc291cmNlX3RyYWNrKHN0cnVjdCByZXNvdXJjZV90cmFjayAqdHJhY2spCit7CisJc3RydWN0IHJ1c2FnZSByOworCisJdHJhY2stPmJya19zdGFydCA9IHNicmsoMCk7CisJZ2V0dGltZW9mZGF5KCZ0cmFjay0+dGltZV9zdGFydCwgMCk7CisJZ2V0cnVzYWdlKFJVU0FHRV9TRUxGLCAmcik7CisJdHJhY2stPnVzZXJfc3RhcnQgPSByLnJ1X3V0aW1lOworCXRyYWNrLT5zeXN0ZW1fc3RhcnQgPSByLnJ1X3N0aW1lOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBmbG9hdCB0aW1ldmFsX3N1YnRyYWN0KHN0cnVjdCB0aW1ldmFsICp0djEsCisJCQkJCSBzdHJ1Y3QgdGltZXZhbCAqdHYyKQoreworCXJldHVybiAoKHR2MS0+dHZfc2VjIC0gdHYyLT50dl9zZWMpICsKKwkJKChmbG9hdCkgKHR2MS0+dHZfdXNlYyAtIHR2Mi0+dHZfdXNlYykpIC8gMTAwMDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Jlc291cmNlX3RyYWNrKHN0cnVjdCByZXNvdXJjZV90cmFjayAqdHJhY2spCit7CisJc3RydWN0IHJ1c2FnZSByOworCXN0cnVjdCB0aW1ldmFsIHRpbWVfZW5kOworCisJZ2V0dGltZW9mZGF5KCZ0aW1lX2VuZCwgMCk7CisJZ2V0cnVzYWdlKFJVU0FHRV9TRUxGLCAmcik7CisKKwlwcmludGYoXygiTWVtb3J5IHVzZWQ6ICVkLCBlbGFwc2VkIHRpbWU6ICU2LjNmLyU2LjNmLyU2LjNmXG4iKSwKKwkgICAgICAgKGludCkgKCgoY2hhciAqKSBzYnJrKDApKSAtICgoY2hhciAqKSB0cmFjay0+YnJrX3N0YXJ0KSksCisJICAgICAgIHRpbWV2YWxfc3VidHJhY3QoJnRpbWVfZW5kLCAmdHJhY2stPnRpbWVfc3RhcnQpLAorCSAgICAgICB0aW1ldmFsX3N1YnRyYWN0KCZyLnJ1X3V0aW1lLCAmdHJhY2stPnVzZXJfc3RhcnQpLAorCSAgICAgICB0aW1ldmFsX3N1YnRyYWN0KCZyLnJ1X3N0aW1lLCAmdHJhY2stPnN5c3RlbV9zdGFydCkpOworfQorCisKKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisJaW50CQlleGl0X3ZhbHVlID0gMDsKKwlpbnQJCWk7CisJZXh0Ml9maWxzeXMJZnM7CisJZXh0Ml9pbm9kZV9zY2FuCXNjYW47CisJZXh0Ml9pbm9fdAlpbm87CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisKKwlwcmludGYoXygic2l6ZSBvZiBpbm9kZT0lZFxuIiksIHNpemVvZihpbm9kZSkpOworCisJZGV2aWNlX25hbWUgPSAiL2Rldi9oZGEzIjsKKworCWluaXRfcmVzb3VyY2VfdHJhY2soJmdsb2JhbF9ydHJhY2spOworCisJcmV0dmFsID0gZXh0MmZzX29wZW4oZGV2aWNlX25hbWUsIDAsCisJCQkgICAgIDAsIDAsIHVuaXhfaW9fbWFuYWdlciwgJmZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCBfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLAorCQkJZGV2aWNlX25hbWUpOworCQlleGl0KDEpOworCX0KKworCXJldHZhbCA9IGV4dDJmc19vcGVuX2lub2RlX3NjYW4oZnMsIDAsICZzY2FuKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCBfKCJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iKSk7CisJCWV4aXQoMSk7CisJfQorCXJldHZhbCA9IGV4dDJmc19nZXRfbmV4dF9pbm9kZShzY2FuLCAmaW5vLCAmaW5vZGUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIF8oIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iKSk7CisJCWV4aXQoMSk7CisJfQorCXdoaWxlIChpbm8pIHsKKwkJaWYgKCFpbm9kZS5pX2xpbmtzX2NvdW50KQorCQkJZ290byBuZXh0OworCQlwcmludGYoIiVsdVxuIiwgaW5vZGUuaV9ibG9ja3MpOworCW5leHQ6CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbmV4dF9pbm9kZShzY2FuLCAmaW5vLCAmaW5vZGUpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwKKwkJCQlfKCJ3aGlsZSBkb2luZyBpbm9kZSBzY2FuIikpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCisJZXh0MmZzX2Nsb3NlX2ZyZWUoJmZzKTsKKworCXByaW50X3Jlc291cmNlX3RyYWNrKCZnbG9iYWxfcnRyYWNrKTsKKworCXJldHVybiBleGl0X3ZhbHVlOworfQpkaWZmIC0tZ2l0IGEvZTJmc2NrL3NpZ2NhdGNoZXIuYyBiL2UyZnNjay9zaWdjYXRjaGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRkNjBjZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay9zaWdjYXRjaGVyLmMKQEAgLTAsMCArMSw0NDIgQEAKKy8qCisgKiBzaWdjYXRjaGVyLmMgLS0tIHByaW50IGEgYmFja3RyYWNlIG9uIGEgU0lHU0VHViwgZXQuIGFsCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX0VYRUNJTkZPX0gKKyNpbmNsdWRlIDxleGVjaW5mby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJlMmZzY2suaCIKKworc3RydWN0IHN0cl90YWJsZSB7CisJaW50CW51bTsKKwljb25zdCBjaGFyCSpuYW1lOworfTsKKworI2RlZmluZSBERUZJTkVfRU5UUlkoU1lNKQl7IFNZTSwgI1NZTSB9LAorI2RlZmluZSBFTkRfVEFCTEUJCXsgMCwgMCB9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyX3RhYmxlIHNpZ190YWJsZVtdID0geworI2lmZGVmIFNJR0hVUAorCURFRklORV9FTlRSWShTSUdIVVApCisjZW5kaWYKKyNpZmRlZiBTSUdJTlQKKwlERUZJTkVfRU5UUlkoU0lHSU5UKQorI2VuZGlmCisjaWZkZWYgU0lHUVVJVAorCURFRklORV9FTlRSWShTSUdRVUlUKQorI2VuZGlmCisjaWZkZWYgU0lHSUxMCisJREVGSU5FX0VOVFJZKFNJR0lMTCkKKyNlbmRpZgorI2lmZGVmIFNJR1RSQVAKKwlERUZJTkVfRU5UUlkoU0lHVFJBUCkKKyNlbmRpZgorI2lmZGVmIFNJR0FCUlQKKwlERUZJTkVfRU5UUlkoU0lHQUJSVCkKKyNlbmRpZgorI2lmZGVmIFNJR0lPVAorCURFRklORV9FTlRSWShTSUdJT1QpCisjZW5kaWYKKyNpZmRlZiBTSUdCVVMKKwlERUZJTkVfRU5UUlkoU0lHQlVTKQorI2VuZGlmCisjaWZkZWYgU0lHRlBFCisJREVGSU5FX0VOVFJZKFNJR0ZQRSkKKyNlbmRpZgorI2lmZGVmIFNJR0tJTEwKKwlERUZJTkVfRU5UUlkoU0lHS0lMTCkKKyNlbmRpZgorI2lmZGVmIFNJR1VTUjEKKwlERUZJTkVfRU5UUlkoU0lHVVNSMSkKKyNlbmRpZgorI2lmZGVmIFNJR1NFR1YKKwlERUZJTkVfRU5UUlkoU0lHU0VHVikKKyNlbmRpZgorI2lmZGVmIFNJR1VTUjIKKwlERUZJTkVfRU5UUlkoU0lHVVNSMikKKyNlbmRpZgorI2lmZGVmIFNJR1BJUEUKKwlERUZJTkVfRU5UUlkoU0lHUElQRSkKKyNlbmRpZgorI2lmZGVmIFNJR0FMUk0KKwlERUZJTkVfRU5UUlkoU0lHQUxSTSkKKyNlbmRpZgorI2lmZGVmIFNJR1RFUk0KKwlERUZJTkVfRU5UUlkoU0lHVEVSTSkKKyNlbmRpZgorI2lmZGVmIFNJR1NUS0ZMVAorCURFRklORV9FTlRSWShTSUdTVEtGTFQpCisjZW5kaWYKKyNpZmRlZiBTSUdDSExECisJREVGSU5FX0VOVFJZKFNJR0NITEQpCisjZW5kaWYKKyNpZmRlZiBTSUdDT05UCisJREVGSU5FX0VOVFJZKFNJR0NPTlQpCisjZW5kaWYKKyNpZmRlZiBTSUdTVE9QCisJREVGSU5FX0VOVFJZKFNJR1NUT1ApCisjZW5kaWYKKyNpZmRlZiBTSUdUU1RQCisJREVGSU5FX0VOVFJZKFNJR1RTVFApCisjZW5kaWYKKyNpZmRlZiBTSUdUVElOCisJREVGSU5FX0VOVFJZKFNJR1RUSU4pCisjZW5kaWYKKyNpZmRlZiBTSUdUVE9VCisJREVGSU5FX0VOVFJZKFNJR1RUT1UpCisjZW5kaWYKKyNpZmRlZiBTSUdVUkcKKwlERUZJTkVfRU5UUlkoU0lHVVJHKQorI2VuZGlmCisjaWZkZWYgU0lHWENQVQorCURFRklORV9FTlRSWShTSUdYQ1BVKQorI2VuZGlmCisjaWZkZWYgU0lHWEZTWgorCURFRklORV9FTlRSWShTSUdYRlNaKQorI2VuZGlmCisjaWZkZWYgU0lHVlRBTFJNCisJREVGSU5FX0VOVFJZKFNJR1ZUQUxSTSkKKyNlbmRpZgorI2lmZGVmIFNJR1BST0YKKwlERUZJTkVfRU5UUlkoU0lHUFJPRikKKyNlbmRpZgorI2lmZGVmIFNJR1dJTkNICisJREVGSU5FX0VOVFJZKFNJR1dJTkNIKQorI2VuZGlmCisjaWZkZWYgU0lHSU8KKwlERUZJTkVfRU5UUlkoU0lHSU8pCisjZW5kaWYKKyNpZmRlZiBTSUdQT0xMCisJREVGSU5FX0VOVFJZKFNJR1BPTEwpCisjZW5kaWYKKyNpZmRlZiBTSUdQV1IKKwlERUZJTkVfRU5UUlkoU0lHUFdSKQorI2VuZGlmCisjaWZkZWYgU0lHU1lTCisJREVGSU5FX0VOVFJZKFNJR1NZUykKKyNlbmRpZgorCUVORF9UQUJMRQorfTsKKworc3RhdGljIHN0cnVjdCBzdHJfdGFibGUgZ2VuZXJpY19jb2RlX3RhYmxlW10gPSB7CisjaWZkZWYgU0lfQVNZTkNOTAorCURFRklORV9FTlRSWShTSV9BU1lOQ05MKQorI2VuZGlmCisjaWZkZWYgU0lfVEtJTEwKKwlERUZJTkVfRU5UUlkoU0lfVEtJTEwpCisjZW5kaWYKKyNpZmRlZiBTSV9TSUdJTworCURFRklORV9FTlRSWShTSV9TSUdJTykKKyNlbmRpZgorI2lmZGVmIFNJX0FTWU5DSU8KKwlERUZJTkVfRU5UUlkoU0lfQVNZTkNJTykKKyNlbmRpZgorI2lmZGVmIFNJX01FU0dRCisJREVGSU5FX0VOVFJZKFNJX01FU0dRKQorI2VuZGlmCisjaWZkZWYgU0lfVElNRVIKKwlERUZJTkVfRU5UUlkoU0lfVElNRVIpCisjZW5kaWYKKyNpZmRlZiBTSV9RVUVVRQorCURFRklORV9FTlRSWShTSV9RVUVVRSkKKyNlbmRpZgorI2lmZGVmIFNJX1VTRVIKKwlERUZJTkVfRU5UUlkoU0lfVVNFUikKKyNlbmRpZgorI2lmZGVmIFNJX0tFUk5FTAorCURFRklORV9FTlRSWShTSV9LRVJORUwpCisjZW5kaWYKKwlFTkRfVEFCTEUKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyX3RhYmxlIHNpZ2lsbF9jb2RlX3RhYmxlW10gPSB7CisjaWZkZWYgSUxMX0lMTE9QQworCURFRklORV9FTlRSWShJTExfSUxMT1BDKQorI2VuZGlmCisjaWZkZWYgSUxMX0lMTE9QTgorCURFRklORV9FTlRSWShJTExfSUxMT1BOKQorI2VuZGlmCisjaWZkZWYgSUxMX0lMTEFEUgorCURFRklORV9FTlRSWShJTExfSUxMQURSKQorI2VuZGlmCisjaWZkZWYgSUxMX0lMTFRSUAorCURFRklORV9FTlRSWShJTExfSUxMVFJQKQorI2VuZGlmCisjaWZkZWYgSUxMX1BSVk9QQworCURFRklORV9FTlRSWShJTExfUFJWT1BDKQorI2VuZGlmCisjaWZkZWYgSUxMX1BSVlJFRworCURFRklORV9FTlRSWShJTExfUFJWUkVHKQorI2VuZGlmCisjaWZkZWYgSUxMX0NPUFJPQworCURFRklORV9FTlRSWShJTExfQ09QUk9DKQorI2VuZGlmCisjaWZkZWYgSUxMX0JBRFNUSworCURFRklORV9FTlRSWShJTExfQkFEU1RLKQorI2VuZGlmCisjaWZkZWYgQlVTX0FEUkFMTgorCURFRklORV9FTlRSWShCVVNfQURSQUxOKQorI2VuZGlmCisjaWZkZWYgQlVTX0FEUkVSUgorCURFRklORV9FTlRSWShCVVNfQURSRVJSKQorI2VuZGlmCisjaWZkZWYgQlVTX09CSkVSUgorCURFRklORV9FTlRSWShCVVNfT0JKRVJSKQorI2VuZGlmCisJRU5EX1RBQkxFCit9OworCitzdGF0aWMgc3RydWN0IHN0cl90YWJsZSBzaWdmcGVfY29kZV90YWJsZVtdID0geworI2lmZGVmIEZQRV9JTlRESVYKKwlERUZJTkVfRU5UUlkoRlBFX0lOVERJVikKKyNlbmRpZgorI2lmZGVmIEZQRV9JTlRPVkYKKwlERUZJTkVfRU5UUlkoRlBFX0lOVE9WRikKKyNlbmRpZgorI2lmZGVmIEZQRV9GTFRESVYKKwlERUZJTkVfRU5UUlkoRlBFX0ZMVERJVikKKyNlbmRpZgorI2lmZGVmIEZQRV9GTFRPVkYKKwlERUZJTkVfRU5UUlkoRlBFX0ZMVE9WRikKKyNlbmRpZgorI2lmZGVmIEZQRV9GTFRVTkQKKwlERUZJTkVfRU5UUlkoRlBFX0ZMVFVORCkKKyNlbmRpZgorI2lmZGVmIEZQRV9GTFRSRVMKKwlERUZJTkVfRU5UUlkoRlBFX0ZMVFJFUykKKyNlbmRpZgorI2lmZGVmIEZQRV9GTFRJTlYKKwlERUZJTkVfRU5UUlkoRlBFX0ZMVElOVikKKyNlbmRpZgorI2lmZGVmIEZQRV9GTFRTVUIKKwlERUZJTkVfRU5UUlkoRlBFX0ZMVFNVQikKKyNlbmRpZgorCUVORF9UQUJMRQorfTsKKworc3RhdGljIHN0cnVjdCBzdHJfdGFibGUgc2lnc2Vndl9jb2RlX3RhYmxlW10gPSB7CisjaWZkZWYgU0VHVl9NQVBFUlIKKwlERUZJTkVfRU5UUlkoU0VHVl9NQVBFUlIpCisjZW5kaWYKKyNpZmRlZiBTRUdWX0FDQ0VSUgorCURFRklORV9FTlRSWShTRUdWX0FDQ0VSUikKKyNlbmRpZgorCUVORF9UQUJMRQorfTsKKworCitzdGF0aWMgc3RydWN0IHN0cl90YWJsZSBzaWdidXNfY29kZV90YWJsZVtdID0geworI2lmZGVmIEJVU19BRFJBTE4KKwlERUZJTkVfRU5UUlkoQlVTX0FEUkFMTikKKyNlbmRpZgorI2lmZGVmIEJVU19BRFJFUlIKKwlERUZJTkVfRU5UUlkoQlVTX0FEUkVSUikKKyNlbmRpZgorI2lmZGVmIEJVU19PQkpFUlIKKwlERUZJTkVfRU5UUlkoQlVTX09CSkVSUikKKyNlbmRpZgorCUVORF9UQUJMRQorfTsKKworI2lmIDAgLyogc2hvdWxkIHRoaXMgYmUgaG9va2VkIGluIHNvbWV3aGVyZT8gKi8KK3N0YXRpYyBzdHJ1Y3Qgc3RyX3RhYmxlIHNpZ3N0cmFwX2NvZGVfdGFibGVbXSA9IHsKKyNpZmRlZiBUUkFQX0JSS1BUCisJREVGSU5FX0VOVFJZKFRSQVBfQlJLUFQpCisjZW5kaWYKKyNpZmRlZiBUUkFQX1RSQUNFCisJREVGSU5FX0VOVFJZKFRSQVBfVFJBQ0UpCisjZW5kaWYKKwlFTkRfVEFCTEUKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBzdHJfdGFibGUgc2lnY2xkX2NvZGVfdGFibGVbXSA9IHsKKyNpZmRlZiBDTERfRVhJVEVECisJREVGSU5FX0VOVFJZKENMRF9FWElURUQpCisjZW5kaWYKKyNpZmRlZiBDTERfS0lMTEVECisJREVGSU5FX0VOVFJZKENMRF9LSUxMRUQpCisjZW5kaWYKKyNpZmRlZiBDTERfRFVNUEVECisJREVGSU5FX0VOVFJZKENMRF9EVU1QRUQpCisjZW5kaWYKKyNpZmRlZiBDTERfVFJBUFBFRAorCURFRklORV9FTlRSWShDTERfVFJBUFBFRCkKKyNlbmRpZgorI2lmZGVmIENMRF9TVE9QUEVECisJREVGSU5FX0VOVFJZKENMRF9TVE9QUEVEKQorI2VuZGlmCisjaWZkZWYgQ0xEX0NPTlRJTlVFRAorCURFRklORV9FTlRSWShDTERfQ09OVElOVUVEKQorI2VuZGlmCisJRU5EX1RBQkxFCit9OworCisjaWYgMCAvKiBzaG91bGQgdGhpcyBiZSBob29rZWQgaW4gc29tZXdoZXJlPyAqLworc3RhdGljIHN0cnVjdCBzdHJfdGFibGUgc2lncG9sbF9jb2RlX3RhYmxlW10gPSB7CisjaWZkZWYgUE9MTF9JTgorCURFRklORV9FTlRSWShQT0xMX0lOKQorI2VuZGlmCisjaWZkZWYgUE9MTF9PVVQKKwlERUZJTkVfRU5UUlkoUE9MTF9PVVQpCisjZW5kaWYKKyNpZmRlZiBQT0xMX01TRworCURFRklORV9FTlRSWShQT0xMX01TRykKKyNlbmRpZgorI2lmZGVmIFBPTExfRVJSCisJREVGSU5FX0VOVFJZKFBPTExfRVJSKQorI2VuZGlmCisjaWZkZWYgUE9MTF9QUkkKKwlERUZJTkVfRU5UUlkoUE9MTF9QUkkpCisjZW5kaWYKKyNpZmRlZiBQT0xMX0hVUAorCURFRklORV9FTlRSWShQT0xMX0hVUCkKKyNlbmRpZgorCUVORF9UQUJMRQorfTsKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqbG9va3VwX3RhYmxlKGludCBudW0sIHN0cnVjdCBzdHJfdGFibGUgKnRhYmxlKQoreworCXN0cnVjdCBzdHJfdGFibGUgKnA7CisKKwlmb3IgKHA9dGFibGU7IHAtPm5hbWU7IHArKykKKwkJaWYgKG51bSA9PSBwLT5udW0pCisJCQlyZXR1cm4ocC0+bmFtZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpsb29rdXBfdGFibGVfZmFsbGJhY2soaW50IG51bSwgc3RydWN0IHN0cl90YWJsZSAqdGFibGUpCit7CisJc3RhdGljIGNoYXIgYnVmWzMyXTsKKwljb25zdCBjaGFyICpyZXQgPSBsb29rdXBfdGFibGUobnVtLCB0YWJsZSk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIG51bSk7CisJYnVmW3NpemVvZihidWYpLTFdID0gMDsKKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgdm9pZCBkaWVfc2lnbmFsX2hhbmRsZXIoaW50IHNpZ251bSwgc2lnaW5mb190ICpzaWdpbmZvLAorCQkJICAgICAgIHZvaWQgKmNvbnRleHQgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworICAgICAgIHZvaWQgKnN0YWNrX3N5bXNbMzJdOworICAgICAgIGludCBmcmFtZXM7CisgICAgICAgY29uc3QgY2hhciAqY3A7CisKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNpZ25hbCAoJWQpICVzICIsIHNpZ251bSwKKwkgICAgICAgbG9va3VwX3RhYmxlX2ZhbGxiYWNrKHNpZ251bSwgc2lnX3RhYmxlKSk7CisgICAgICAgaWYgKHNpZ2luZm8tPnNpX2NvZGUgPT0gU0lfVVNFUikKKwkgICAgICAgZnByaW50ZihzdGRlcnIsICIoc2VudCBmcm9tIHBpZCAldSkgIiwgc2lnaW5mby0+c2lfcGlkKTsKKyAgICAgICBjcCA9IGxvb2t1cF90YWJsZShzaWdpbmZvLT5zaV9jb2RlLCBnZW5lcmljX2NvZGVfdGFibGUpOworICAgICAgIGlmIChjcCkKKwkgICAgICAgZnByaW50ZihzdGRlcnIsICJzaV9jb2RlPSVzICIsIGNwKTsKKyAgICAgICBlbHNlIGlmIChzaWdudW0gPT0gU0lHSUxMKQorCSAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNpX2NvZGU9JXMgIiwKKwkJICAgICAgIGxvb2t1cF90YWJsZV9mYWxsYmFjayhzaWdpbmZvLT5zaV9jb2RlLAorCQkJCQkgICAgIHNpZ2lsbF9jb2RlX3RhYmxlKSk7CisgICAgICAgZWxzZSBpZiAoc2lnbnVtID09IFNJR0ZQRSkKKwkgICAgICAgZnByaW50ZihzdGRlcnIsICJzaV9jb2RlPSVzICIsCisJCSAgICAgICBsb29rdXBfdGFibGVfZmFsbGJhY2soc2lnaW5mby0+c2lfY29kZSwKKwkJCQkJICAgICBzaWdmcGVfY29kZV90YWJsZSkpOworICAgICAgIGVsc2UgaWYgKHNpZ251bSA9PSBTSUdTRUdWKQorCSAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNpX2NvZGU9JXMgIiwKKwkJICAgICAgIGxvb2t1cF90YWJsZV9mYWxsYmFjayhzaWdpbmZvLT5zaV9jb2RlLAorCQkJCQkgICAgIHNpZ3NlZ3ZfY29kZV90YWJsZSkpOworICAgICAgIGVsc2UgaWYgKHNpZ251bSA9PSBTSUdCVVMpCisJICAgICAgIGZwcmludGYoc3RkZXJyLCAic2lfY29kZT0lcyAiLAorCQkgICAgICAgbG9va3VwX3RhYmxlX2ZhbGxiYWNrKHNpZ2luZm8tPnNpX2NvZGUsCisJCQkJCSAgICAgc2lnYnVzX2NvZGVfdGFibGUpKTsKKyAgICAgICBlbHNlIGlmIChzaWdudW0gPT0gU0lHQ0hMRCkKKwkgICAgICAgZnByaW50ZihzdGRlcnIsICJzaV9jb2RlPSVzICIsCisJCSAgICAgICBsb29rdXBfdGFibGVfZmFsbGJhY2soc2lnaW5mby0+c2lfY29kZSwKKwkJCQkJICAgICBzaWdjbGRfY29kZV90YWJsZSkpOworICAgICAgIGVsc2UKKwkgICAgICAgZnByaW50ZihzdGRlcnIsICJzaSBjb2RlPSVkICIsIHNpZ2luZm8tPnNpX2NvZGUpOworICAgICAgIGlmICgoc2lnaW5mby0+c2lfY29kZSAhPSBTSV9VU0VSKSAmJgorCSAgIChzaWdudW0gPT0gU0lHSUxMIHx8IHNpZ251bSA9PSBTSUdGUEUgfHwKKwkgICAgc2lnbnVtID09IFNJR1NFR1YgfHwgc2lnbnVtID09IFNJR0JVUykpCisJICAgICAgIGZwcmludGYoc3RkZXJyLCAiZmF1bHQgYWRkcj0lcCIsIHNpZ2luZm8tPnNpX2FkZHIpOworICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKworI2lmIGRlZmluZWQoSEFWRV9CQUNLVFJBQ0UpICYmICFkZWZpbmVkKERJU0FCTEVfQkFDS1RSQUNFKQorICAgICAgIGZyYW1lcyA9IGJhY2t0cmFjZShzdGFja19zeW1zLCAzMik7CisgICAgICAgYmFja3RyYWNlX3N5bWJvbHNfZmQoc3RhY2tfc3ltcywgZnJhbWVzLCAyKTsKKyNlbmRpZgorICAgICAgIGV4aXQoRlNDS19FUlJPUik7Cit9CisKK3ZvaWQgc2lnY2F0Y2hlcl9zZXR1cCh2b2lkKQoreworCXN0cnVjdCBzaWdhY3Rpb24Jc2E7CisJCisJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHN0cnVjdCBzaWdhY3Rpb24pKTsKKwlzYS5zYV9zaWdhY3Rpb24gPSBkaWVfc2lnbmFsX2hhbmRsZXI7CisJc2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworCisJc2lnYWN0aW9uKFNJR0ZQRSwgJnNhLCAwKTsKKwlzaWdhY3Rpb24oU0lHSUxMLCAmc2EsIDApOworCXNpZ2FjdGlvbihTSUdCVVMsICZzYSwgMCk7CisJc2lnYWN0aW9uKFNJR1NFR1YsICZzYSwgMCk7Cit9CQorCisKKyNpZmRlZiBERUJVRworI2luY2x1ZGUgPGdldG9wdC5oPgorCit2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJ0c3Rfc2lnY2F0Y2hlcjogWy1ha2ZuXVxuIik7CisJZXhpdCgxKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworCXN0cnVjdCBzaWdhY3Rpb24Jc2E7CisJY2hhcgkJCSpwID0gMDsKKwlpbnQgCQkJaSwgYzsKKwl2b2xhdGlsZQkJeD0wOworCisJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHN0cnVjdCBzaWdhY3Rpb24pKTsKKwlzYS5zYV9zaWdhY3Rpb24gPSBkaWVfc2lnbmFsX2hhbmRsZXI7CisJc2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworCWZvciAoaT0xOyBpIDwgMzE7IGkrKykKKwkJc2lnYWN0aW9uKGksICZzYSwgMCk7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJhZmtuIikpICE9IEVPRikKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2EnOgorCQkJYWJvcnQoKTsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCXByaW50ZigiJWRcbiIsIDQyL3gpOworCQljYXNlICdrJzoKKwkJCWtpbGwoZ2V0cGlkKCksIFNJR1RFUk0pOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJKnAgPSA0MjsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlICgpOworCQl9CisKKwlwcmludGYoIlNsZWVwaW5nIGZvciAxMCBzZWNvbmRzLCBzZW5kIGtpbGwgc2lnbmFsIHRvIHBpZCAldS4uLlxuIiwKKwkgICAgICAgZ2V0cGlkKCkpOworCWZmbHVzaChzdGRvdXQpOworCXNsZWVwKDEwKTsKKwlleGl0KDApOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzY2svc3VwZXIuYyBiL2UyZnNjay9zdXBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ODMxNmEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzY2svc3VwZXIuYwpAQCAtMCwwICsxLDk4MCBAQAorLyoKKyAqIGUyZnNjay5jIC0gc3VwZXJibG9jayBjaGVja3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpZm5kZWYgRVhUMl9TS0lQX1VVSUQKKyNpbmNsdWRlICJ1dWlkL3V1aWQuaCIKKyNlbmRpZgorI2luY2x1ZGUgImUyZnNjay5oIgorI2luY2x1ZGUgInByb2JsZW0uaCIKKworI2RlZmluZSBNSU5fQ0hFQ0sgMQorI2RlZmluZSBNQVhfQ0hFQ0sgMgorI2RlZmluZSBMT0cyX0NIRUNLIDQKKworc3RhdGljIHZvaWQgY2hlY2tfc3VwZXJfdmFsdWUoZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICpkZXNjciwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUsIGludCBmbGFncywKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbWluX3ZhbCwgdW5zaWduZWQgbG9uZyBtYXhfdmFsKQoreworCXN0cnVjdAkJcHJvYmxlbV9jb250ZXh0IHBjdHg7CisKKwlpZiAoKGZsYWdzICYgTUlOX0NIRUNLICYmIHZhbHVlIDwgbWluX3ZhbCkgfHwKKwkgICAgKGZsYWdzICYgTUFYX0NIRUNLICYmIHZhbHVlID4gbWF4X3ZhbCkgfHwKKwkgICAgKGZsYWdzICYgTE9HMl9DSEVDSyAmJiAodmFsdWUgJiAodmFsdWUgLSAxKSkgIT0gMCkpIHsKKwkJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwkJcGN0eC5udW0gPSB2YWx1ZTsKKwkJcGN0eC5zdHIgPSBkZXNjcjsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8wX01JU0NfQ09SUlVQVF9TVVBFUiwgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOyAvKiBuZXZlciBnZXQgaGVyZSEgKi8KKwl9Cit9CisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gdG8gcmVsZWFzZSBhbiBpbm9kZQorICovCitzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgeworCWUyZnNja190IAljdHg7CisJY2hhciAJCSpidWY7CisJc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eDsKKwlpbnQJCXRydW5jYXRpbmc7CisJaW50CQl0cnVuY2F0ZV9vZmZzZXQ7CisJZTJfYmxrY250X3QJdHJ1bmNhdGVfYmxvY2s7CisJaW50CQl0cnVuY2F0ZWRfYmxvY2tzOworCWludAkJYWJvcnQ7CisJZXJyY29kZV90CWVycmNvZGU7Cit9OworCitzdGF0aWMgaW50IHJlbGVhc2VfaW5vZGVfYmxvY2soZXh0Ml9maWxzeXMgZnMsCisJCQkgICAgICAgYmxrNjRfdAkqYmxvY2tfbnIsCisJCQkgICAgICAgZTJfYmxrY250X3QgYmxvY2tjbnQsCisJCQkgICAgICAgYmxrNjRfdAlyZWZfYmxrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgICBpbnQJcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCAqcGI7CisJZTJmc2NrX3QgCQljdHg7CisJc3RydWN0IHByb2JsZW1fY29udGV4dAkqcGN0eDsKKwlibGs2NF90CQkJYmxrID0gKmJsb2NrX25yOworCWludAkJCXJldHZhbCA9IDA7CisKKwlwYiA9IChzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgKikgcHJpdl9kYXRhOworCWN0eCA9IHBiLT5jdHg7CisJcGN0eCA9IHBiLT5wY3R4OworCisJcGN0eC0+YmxrID0gYmxrOworCXBjdHgtPmJsa2NvdW50ID0gYmxvY2tjbnQ7CisKKwlpZiAoSE9MRV9CTEtBRERSKGJsaykpCisJCXJldHVybiAwOworCisJaWYgKChibGsgPCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgfHwKKwkgICAgKGJsayA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpKSB7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9PUlBIQU5fSUxMRUdBTF9CTE9DS19OVU0sIHBjdHgpOworCXJldHVybl9hYm9ydDoKKwkJcGItPmFib3J0ID0gMTsKKwkJcmV0dXJuIEJMT0NLX0FCT1JUOworCX0KKworCWlmICghZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLCBibGspKSB7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9PUlBIQU5fQUxSRUFEWV9DTEVBUkVEX0JMT0NLLCBwY3R4KTsKKwkJZ290byByZXR1cm5fYWJvcnQ7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBhcmUgZGVsZXRpbmcgYW4gb3JwaGFuLCB0aGVuIHdlIGxlYXZlIHRoZSBmaWVsZHMgYWxvbmUuCisJICogSWYgd2UgYXJlIHRydW5jYXRpbmcgYW4gb3JwaGFuLCB0aGVuIHVwZGF0ZSB0aGUgaW5vZGUgZmllbGRzCisJICogYW5kIGNsZWFuIHVwIGFueSBwYXJ0aWFsIGJsb2NrIGRhdGEuCisJICovCisJaWYgKHBiLT50cnVuY2F0aW5nKSB7CisJCS8qCisJCSAqIFdlIG9ubHkgcmVtb3ZlIGluZGlyZWN0IGJsb2NrcyBpZiB0aGV5IGFyZQorCQkgKiBjb21wbGV0ZWx5IGVtcHR5LgorCQkgKi8KKwkJaWYgKGJsb2NrY250IDwgMCkgeworCQkJaW50CWksIGxpbWl0OworCQkJYmxrX3QJKmJwOworCisJCQlwYi0+ZXJyY29kZSA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW8sIGJsaywgMSwKKwkJCQkJCQlwYi0+YnVmKTsKKwkJCWlmIChwYi0+ZXJyY29kZSkKKwkJCQlnb3RvIHJldHVybl9hYm9ydDsKKworCQkJbGltaXQgPSBmcy0+YmxvY2tzaXplID4+IDI7CisJCQlmb3IgKGkgPSAwLCBicCA9IChibGtfdCAqKSBwYi0+YnVmOworCQkJICAgICBpIDwgbGltaXQ7CSBpKyssIGJwKyspCisJCQkJaWYgKCpicCkKKwkJCQkJcmV0dXJuIDA7CisJCX0KKwkJLyoKKwkJICogV2UgZG9uJ3QgcmVtb3ZlIGRpcmVjdCBibG9ja3MgdW50aWwgd2UndmUgcmVhY2hlZAorCQkgKiB0aGUgdHJ1bmNhdGlvbiBibG9jay4KKwkJICovCisJCWlmIChibG9ja2NudCA+PSAwICYmIGJsb2NrY250IDwgcGItPnRydW5jYXRlX2Jsb2NrKQorCQkJcmV0dXJuIDA7CisJCS8qCisJCSAqIElmIHBhcnQgb2YgdGhlIGxhc3QgYmxvY2sgbmVlZHMgdHJ1bmNhdGluZywgd2UgZG8KKwkJICogaXQgaGVyZS4KKwkJICovCisJCWlmICgoYmxvY2tjbnQgPT0gcGItPnRydW5jYXRlX2Jsb2NrKSAmJiBwYi0+dHJ1bmNhdGVfb2Zmc2V0KSB7CisJCQlwYi0+ZXJyY29kZSA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW8sIGJsaywgMSwKKwkJCQkJCQlwYi0+YnVmKTsKKwkJCWlmIChwYi0+ZXJyY29kZSkKKwkJCQlnb3RvIHJldHVybl9hYm9ydDsKKwkJCW1lbXNldChwYi0+YnVmICsgcGItPnRydW5jYXRlX29mZnNldCwgMCwKKwkJCSAgICAgICBmcy0+YmxvY2tzaXplIC0gcGItPnRydW5jYXRlX29mZnNldCk7CisJCQlwYi0+ZXJyY29kZSA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBibGssIDEsCisJCQkJCQkJIHBiLT5idWYpOworCQkJaWYgKHBiLT5lcnJjb2RlKQorCQkJCWdvdG8gcmV0dXJuX2Fib3J0OworCQl9CisJCXBiLT50cnVuY2F0ZWRfYmxvY2tzKys7CisJCSpibG9ja19uciA9IDA7CisJCXJldHZhbCB8PSBCTE9DS19DSEFOR0VEOworCX0KKworCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIGJsaywgLTEpOworCWN0eC0+ZnJlZV9ibG9ja3MrKzsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBhbiBpbm9kZS4gIFJldHVybnMgMSBpZiBhbiBpbmNvbnNpc3RlbmN5IHdhcworICogZm91bmQuICBJZiB0aGUgaW5vZGUgaGFzIGEgbGluayBjb3VudCwgdGhlbiBpdCBpcyBiZWluZyB0cnVuY2F0ZWQgYW5kCisgKiBub3QgZGVsZXRlZC4KKyAqLworc3RhdGljIGludCByZWxlYXNlX2lub2RlX2Jsb2NrcyhlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLAorCQkJCXN0cnVjdCBleHQyX2lub2RlICppbm9kZSwgY2hhciAqYmxvY2tfYnVmLAorCQkJCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHgpCit7CisJc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0IAlwYjsKKwlleHQyX2ZpbHN5cwkJCWZzID0gY3R4LT5mczsKKwllcnJjb2RlX3QJCQlyZXR2YWw7CisJX191MzIJCQkJY291bnQ7CisKKwlpZiAoIWV4dDJmc19pbm9kZV9oYXNfdmFsaWRfYmxvY2tzMihmcywgaW5vZGUpKQorCQlyZXR1cm4gMDsKKworCXBiLmJ1ZiA9IGJsb2NrX2J1ZiArIDMgKiBjdHgtPmZzLT5ibG9ja3NpemU7CisJcGIuY3R4ID0gY3R4OworCXBiLmFib3J0ID0gMDsKKwlwYi5lcnJjb2RlID0gMDsKKwlwYi5wY3R4ID0gcGN0eDsKKwlpZiAoaW5vZGUtPmlfbGlua3NfY291bnQpIHsKKwkJcGIudHJ1bmNhdGluZyA9IDE7CisJCXBiLnRydW5jYXRlX2Jsb2NrID0gKGUyX2Jsa2NudF90KQorCQkJKChFWFQyX0lfU0laRShpbm9kZSkgKyBmcy0+YmxvY2tzaXplIC0gMSkgLworCQkJIGZzLT5ibG9ja3NpemUpOworCQlwYi50cnVuY2F0ZV9vZmZzZXQgPSBpbm9kZS0+aV9zaXplICUgZnMtPmJsb2Nrc2l6ZTsKKwl9IGVsc2UgeworCQlwYi50cnVuY2F0aW5nID0gMDsKKwkJcGIudHJ1bmNhdGVfYmxvY2sgPSAwOworCQlwYi50cnVuY2F0ZV9vZmZzZXQgPSAwOworCX0KKwlwYi50cnVuY2F0ZWRfYmxvY2tzID0gMDsKKwlyZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIGlubywgQkxPQ0tfRkxBR19ERVBUSF9UUkFWRVJTRSwKKwkJCQkgICAgICBibG9ja19idWYsIHJlbGVhc2VfaW5vZGVfYmxvY2ssICZwYik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJyZWxlYXNlX2lub2RlX2Jsb2NrcyIsIHJldHZhbCwKKwkJCV8oIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZm9yIGlub2RlICVkIiksCisJCQlpbm8pOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKHBiLmFib3J0KQorCQlyZXR1cm4gMTsKKworCS8qIFJlZnJlc2ggdGhlIGlub2RlIHNpbmNlIGV4dDJmc19ibG9ja19pdGVyYXRlIG1heSBoYXZlIGNoYW5nZWQgaXQgKi8KKwllMmZzY2tfcmVhZF9pbm9kZShjdHgsIGlubywgaW5vZGUsICJyZWxlYXNlX2lub2RlX2Jsb2NrcyIpOworCisJaWYgKHBiLnRydW5jYXRlZF9ibG9ja3MpCisJCWV4dDJmc19pYmxrX3N1Yl9ibG9ja3MoZnMsIGlub2RlLCBwYi50cnVuY2F0ZWRfYmxvY2tzKTsKKworCWlmIChleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsIGlub2RlKSkgeworCQlyZXR2YWwgPSBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MihmcywKKwkJCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCBpbm9kZSksCisJCQkJCWJsb2NrX2J1ZiwgLTEsICZjb3VudCk7CisJCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9CQURfRUFfQkxPQ0tfTlVNKSB7CisJCQlyZXR2YWwgPSAwOworCQkJY291bnQgPSAxOworCQl9CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoInJlbGVhc2VfaW5vZGVfYmxvY2tzIiwgcmV0dmFsLAorCQlfKCJ3aGlsZSBjYWxsaW5nIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyIGZvciBpbm9kZSAlZCIpLAorCQkJCWlubyk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoY291bnQgPT0gMCkgeworCQkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywKKwkJCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCBpbm9kZSksIC0xKTsKKwkJCWN0eC0+ZnJlZV9ibG9ja3MrKzsKKwkJfQorCQlleHQyZnNfZmlsZV9hY2xfYmxvY2tfc2V0KGZzLCBpbm9kZSwgMCk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBhbGwgb2YgdGhlIG9ycGhhbiBpbm9kZXMuICBJdCByZXR1cm5zIDEgaWYKKyAqIGl0IGhpdCBzb21lIGVycm9yLCBhbmQgMCBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IHJlbGVhc2Vfb3JwaGFuX2lub2RlcyhlMmZzY2tfdCBjdHgpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWV4dDJfaW5vX3QJaW5vLCBuZXh0X2lubzsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0IHBjdHg7CisJY2hhciAqYmxvY2tfYnVmOworCisJaWYgKChpbm8gPSBmcy0+c3VwZXItPnNfbGFzdF9vcnBoYW4pID09IDApCisJCXJldHVybiAwOworCisJLyoKKwkgKiBXaW4gb3IgbG9zZSwgd2Ugd29uJ3QgYmUgdXNpbmcgdGhlIGhlYWQgb2YgdGhlIG9ycGhhbiBpbm9kZQorCSAqIGxpc3QgYWdhaW4uCisJICovCisJZnMtPnN1cGVyLT5zX2xhc3Rfb3JwaGFuID0gMDsKKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisKKwkvKgorCSAqIElmIHRoZSBmaWxlc3lzdGVtIGNvbnRhaW5zIGVycm9ycywgZG9uJ3QgcnVuIHRoZSBvcnBoYW4KKwkgKiBsaXN0LCBzaW5jZSB0aGUgb3JwaGFuIGxpc3QgY2FuJ3QgYmUgdHJ1c3RlZDsgYW5kIHdlJ3JlCisJICogZ29pbmcgdG8gYmUgcnVubmluZyBhIGZ1bGwgZTJmc2NrIHJ1biBhbnl3YXkuLi4KKwkgKi8KKwlpZiAoZnMtPnN1cGVyLT5zX3N0YXRlICYgRVhUMl9FUlJPUl9GUykKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGlubyA8IEVYVDJfRklSU1RfSU5PREUoZnMtPnN1cGVyKSkgfHwKKwkgICAgKGlubyA+IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQpKSB7CisJCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJCXBjdHguaW5vID0gaW5vOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzBfT1JQSEFOX0lMTEVHQUxfSEVBRF9JTk9ERSwgJnBjdHgpOworCQlyZXR1cm4gMTsKKwl9CisKKwlibG9ja19idWYgPSAoY2hhciAqKSBlMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwgZnMtPmJsb2Nrc2l6ZSAqIDQsCisJCQkJCQkgICAgImJsb2NrIGl0ZXJhdGUgYnVmZmVyIik7CisJZTJmc2NrX3JlYWRfYml0bWFwcyhjdHgpOworCisJd2hpbGUgKGlubykgeworCQllMmZzY2tfcmVhZF9pbm9kZShjdHgsIGlubywgJmlub2RlLCAicmVsZWFzZV9vcnBoYW5faW5vZGVzIik7CisJCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJCXBjdHguaW5vID0gaW5vOworCQlwY3R4Lmlub2RlID0gJmlub2RlOworCQlwY3R4LnN0ciA9IGlub2RlLmlfbGlua3NfY291bnQgPyBfKCJUcnVuY2F0aW5nIikgOgorCQkJXygiQ2xlYXJpbmciKTsKKworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzBfT1JQSEFOX0NMRUFSX0lOT0RFLCAmcGN0eCk7CisKKwkJbmV4dF9pbm8gPSBpbm9kZS5pX2R0aW1lOworCQlpZiAobmV4dF9pbm8gJiYKKwkJICAgICgobmV4dF9pbm8gPCBFWFQyX0ZJUlNUX0lOT0RFKGZzLT5zdXBlcikpIHx8CisJCSAgICAgKG5leHRfaW5vID4gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCkpKSB7CisJCQlwY3R4LmlubyA9IG5leHRfaW5vOworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8wX09SUEhBTl9JTExFR0FMX0lOT0RFLCAmcGN0eCk7CisJCQlnb3RvIHJldHVybl9hYm9ydDsKKwkJfQorCisJCWlmIChyZWxlYXNlX2lub2RlX2Jsb2NrcyhjdHgsIGlubywgJmlub2RlLCBibG9ja19idWYsICZwY3R4KSkKKwkJCWdvdG8gcmV0dXJuX2Fib3J0OworCisJCWlmICghaW5vZGUuaV9saW5rc19jb3VudCkgeworCQkJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihmcywgaW5vLCAtMSwKKwkJCQkJCSAgTElOVVhfU19JU0RJUihpbm9kZS5pX21vZGUpKTsKKwkJCWN0eC0+ZnJlZV9pbm9kZXMrKzsKKwkJCWlub2RlLmlfZHRpbWUgPSBjdHgtPm5vdzsKKwkJfSBlbHNlIHsKKwkJCWlub2RlLmlfZHRpbWUgPSAwOworCQl9CisJCWUyZnNja193cml0ZV9pbm9kZShjdHgsIGlubywgJmlub2RlLCAiZGVsZXRlX2ZpbGUiKTsKKwkJaW5vID0gbmV4dF9pbm87CisJfQorCWV4dDJmc19mcmVlX21lbSgmYmxvY2tfYnVmKTsKKwlyZXR1cm4gMDsKK3JldHVybl9hYm9ydDoKKwlleHQyZnNfZnJlZV9tZW0oJmJsb2NrX2J1Zik7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBDaGVjayB0aGUgcmVzaXplIGlub2RlIHRvIG1ha2Ugc3VyZSBpdCBpcyBzYW5lLiAgV2UgY2hlY2sgYm90aCBmb3IKKyAqIHRoZSBjYXNlIHdoZXJlIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IGVuYWJsZWQgKGluIHdoaWNoIGNhc2UgdGhlCisgKiByZXNpemUgaW5vZGUgc2hvdWxkIGJlIGNsZWFyZWQpIGFzIHdlbGwgYXMgdGhlIGNhc2Ugd2hlcmUgb24tbGluZQorICogcmVzaXppbmcgaXMgZW5hYmxlZC4KKyAqLwordm9pZCBjaGVja19yZXNpemVfaW5vZGUoZTJmc2NrX3QgY3R4KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0CXBjdHg7CisJaW50CQlpLCBnZHRfb2ZmLCBpbmRfb2ZmOworCWRncnBfdAkJajsKKwlibGtfdAkJYmxrLCBwYmxrOworCWJsa190CQlleHBlY3Q7CS8qIGZvciByZXNpemUgaW5vZGUsIHdoaWNoIGlzIDMyLWJpdCBvbmx5ICovCisJX191MzIgCQkqZGluZF9idWYgPSAwLCAqaW5kX2J1ZjsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCS8qCisJICogSWYgdGhlIHJlc2l6ZSBpbm9kZSBmZWF0dXJlIGlzbid0IHNldCwgdGhlbgorCSAqIHNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyBtdXN0IGJlIHplcm8uCisJICovCisJaWYgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICYKKwkgICAgICBFWFQyX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERSkpIHsKKwkJaWYgKGZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzKSB7CisJCQlwY3R4Lm51bSA9IGZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzOworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9OT05aRVJPX1JFU0VSVkVEX0dEVF9CTE9DS1MsCisJCQkJCSZwY3R4KSkgeworCQkJCWZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzID0gMDsKKwkJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCQl9CisJCX0KKwl9CisKKwkvKiBSZWFkIHRoZSByZXNpemUgaW5vZGUgKi8KKwlwY3R4LmlubyA9IEVYVDJfUkVTSVpFX0lOTzsKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgRVhUMl9SRVNJWkVfSU5PLCAmaW5vZGUpOworCWlmIChyZXR2YWwpIHsKKwkJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmCisJCSAgICBFWFQyX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERSkKKwkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfUkVTSVpFX0lOT0RFOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiB0aGUgcmVzaXplIGlub2RlIGZlYXR1cmUgaXNuJ3Qgc2V0LCBjaGVjayB0byBtYWtlIHN1cmUKKwkgKiB0aGUgcmVzaXplIGlub2RlIGlzIGNsZWFyZWQ7IHRoZW4gd2UncmUgZG9uZS4KKwkgKi8KKwlpZiAoIShmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJgorCSAgICAgIEVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFKSkgeworCQlmb3IgKGk9MDsgaSA8IEVYVDJfTl9CTE9DS1M7IGkrKykgeworCQkJaWYgKGlub2RlLmlfYmxvY2tbaV0pCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKChpIDwgRVhUMl9OX0JMT0NLUykgJiYKKwkJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9DTEVBUl9SRVNJWkVfSU5PREUsICZwY3R4KSkgeworCQkJbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKGlub2RlKSk7CisJCQllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBFWFQyX1JFU0laRV9JTk8sICZpbm9kZSwKKwkJCQkJICAgImNsZWFyX3Jlc2l6ZSIpOworCQl9CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFRoZSByZXNpemUgaW5vZGUgZmVhdHVyZSBpcyBlbmFibGVkOyBjaGVjayB0byBtYWtlIHN1cmUgdGhlCisJICogb25seSBibG9jayBpbiB1c2UgaXMgdGhlIGRvdWJsZSBpbmRpcmVjdCBibG9jaworCSAqLworCWJsayA9IGlub2RlLmlfYmxvY2tbRVhUMl9ESU5EX0JMT0NLXTsKKwlmb3IgKGk9MDsgaSA8IEVYVDJfTl9CTE9DS1M7IGkrKykgeworCQlpZiAoaSAhPSBFWFQyX0RJTkRfQkxPQ0sgJiYgaW5vZGUuaV9ibG9ja1tpXSkKKwkJCWJyZWFrOworCX0KKwlpZiAoKGkgPCBFWFQyX05fQkxPQ0tTKSB8fCAhYmxrIHx8ICFpbm9kZS5pX2xpbmtzX2NvdW50IHx8CisJICAgICEoaW5vZGUuaV9tb2RlICYgTElOVVhfU19JRlJFRykgfHwKKwkgICAgKGJsayA8IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrIHx8CisJICAgICBibGsgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSkgeworCXJlc2l6ZV9pbm9kZV9pbnZhbGlkOgorCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8wX1JFU0laRV9JTk9ERV9JTlZBTElELCAmcGN0eCkpIHsKKwkJCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworCQkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgRVhUMl9SRVNJWkVfSU5PLCAmaW5vZGUsCisJCQkJCSAgICJjbGVhcl9yZXNpemUiKTsKKwkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfUkVTSVpFX0lOT0RFOworCQl9CisJCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUkVBRE9OTFkpKSB7CisJCQlmcy0+c3VwZXItPnNfc3RhdGUgJj0gfkVYVDJfVkFMSURfRlM7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCX0KKwkJZ290byBjbGVhbnVwOworCX0KKwlkaW5kX2J1ZiA9IChfX3UzMiAqKSBlMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwgZnMtPmJsb2Nrc2l6ZSAqIDIsCisJCQkJCQkgICAgInJlc2l6ZSBkaW5kIGJ1ZmZlciIpOworCWluZF9idWYgPSAoX191MzIgKikgKChjaGFyICopIGRpbmRfYnVmICsgZnMtPmJsb2Nrc2l6ZSk7CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbmRfYmxvY2soZnMsIGJsaywgZGluZF9idWYpOworCWlmIChyZXR2YWwpCisJCWdvdG8gcmVzaXplX2lub2RlX2ludmFsaWQ7CisKKwlnZHRfb2ZmID0gZnMtPmRlc2NfYmxvY2tzOworCXBibGsgPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayArIDEgKyBmcy0+ZGVzY19ibG9ja3M7CisJaWYgKGZzLT5ibG9ja3NpemUgPT0gMTAyNCAmJiBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayA9PSAwKQorCQlwYmxrKys7CS8qIERlYWwgd2l0aCAxMDI0IGJsb2Nrc2l6ZSBiaWdhbGxvYyBmcyAqLworCWZvciAoaSA9IDA7IGkgPCBmcy0+c3VwZXItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyAvIDQ7CisJICAgICBpKyssIGdkdF9vZmYrKywgcGJsaysrKSB7CisJCWdkdF9vZmYgJT0gZnMtPmJsb2Nrc2l6ZS80OworCQlpZiAoZGluZF9idWZbZ2R0X29mZl0gIT0gcGJsaykKKwkJCWdvdG8gcmVzaXplX2lub2RlX2ludmFsaWQ7CisJCXJldHZhbCA9IGV4dDJmc19yZWFkX2luZF9ibG9jayhmcywgcGJsaywgaW5kX2J1Zik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIHJlc2l6ZV9pbm9kZV9pbnZhbGlkOworCQlpbmRfb2ZmID0gMDsKKwkJZm9yIChqID0gMTsgaiA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBqKyspIHsKKwkJCWlmICghZXh0MmZzX2JnX2hhc19zdXBlcihmcywgaikpCisJCQkJY29udGludWU7CisJCQlleHBlY3QgPSBwYmxrICsgRVhUMl9HUk9VUFNfVE9fQkxPQ0tTKGZzLT5zdXBlciwgaik7CisJCQlpZiAoaW5kX2J1ZltpbmRfb2ZmXSAhPSBleHBlY3QpCisJCQkJZ290byByZXNpemVfaW5vZGVfaW52YWxpZDsKKwkJCWluZF9vZmYrKzsKKwkJfQorCX0KKworY2xlYW51cDoKKwlpZiAoZGluZF9idWYpCisJCWV4dDJmc19mcmVlX21lbSgmZGluZF9idWYpOworCisgfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIGRpcmhhc2ggc2lnbmVkL3Vuc2lnbmVkIGhpbnQgaWYgbmVjZXNzYXJ5LgorICovCitzdGF0aWMgdm9pZCBlMmZzY2tfZml4X2Rpcmhhc2hfaGludChlMmZzY2tfdCBjdHgpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiID0gY3R4LT5mcy0+c3VwZXI7CisJc3RydWN0IHByb2JsZW1fY29udGV4dCBwY3R4OworCWNoYXIJYzsKKworCWlmICgoY3R4LT5vcHRpb25zICYgRTJGX09QVF9SRUFET05MWSkgfHwKKwkgICAgIShzYi0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYKSB8fAorCSAgICAoc2ItPnNfZmxhZ3MgJiAoRVhUMl9GTEFHU19TSUdORURfSEFTSHxFWFQyX0ZMQUdTX1VOU0lHTkVEX0hBU0gpKSkKKwkJcmV0dXJuOworCisJYyA9IChjaGFyKSAyNTU7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfRElSSEFTSF9ISU5ULCAmcGN0eCkpIHsKKwkJaWYgKCgoaW50KSBjKSA9PSAtMSkgeworCQkJc2ItPnNfZmxhZ3MgfD0gRVhUMl9GTEFHU19TSUdORURfSEFTSDsKKwkJfSBlbHNlIHsKKwkJCXNiLT5zX2ZsYWdzIHw9IEVYVDJfRkxBR1NfVU5TSUdORURfSEFTSDsKKwkJfQorCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShjdHgtPmZzKTsKKwl9Cit9CisKKwordm9pZCBjaGVja19zdXBlcl9ibG9jayhlMmZzY2tfdCBjdHgpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWJsazY0X3QJZmlyc3RfYmxvY2ssIGxhc3RfYmxvY2s7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiID0gZnMtPnN1cGVyOworCXVuc2lnbmVkIGludAlpcGdfbWF4OworCXByb2JsZW1fdAlwcm9ibGVtOworCWJsazY0X3QJYmxvY2tzX3Blcl9ncm91cCA9IGZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwOworCV9fdTMyCWJwZ19tYXgsIGNwZ19tYXg7CisJaW50CWlub2Rlc19wZXJfYmxvY2s7CisJaW50CWlub2RlX3NpemU7CisJaW50CWFjY2VwdF90aW1lX2Z1ZGdlOworCWludAlicm9rZW5fc3lzdGVtX2Nsb2NrOworCWRncnBfdAlpOworCWJsazY0X3QJc2hvdWxkX2JlOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwlibGs2NF90CWZyZWVfYmxvY2tzID0gMDsKKwlpbm9fdAlmcmVlX2lub2RlcyA9IDA7CisJaW50ICAgICBjc3VtX2ZsYWcsIGNsZWFyX3Rlc3RfZnNfZmxhZzsKKworCWlub2Rlc19wZXJfYmxvY2sgPSBFWFQyX0lOT0RFU19QRVJfQkxPQ0soZnMtPnN1cGVyKTsKKwlpcGdfbWF4ID0gaW5vZGVzX3Blcl9ibG9jayAqIChibG9ja3NfcGVyX2dyb3VwIC0gNCk7CisJaWYgKGlwZ19tYXggPiBFWFQyX01BWF9JTk9ERVNfUEVSX0dST1VQKHNiKSkKKwkJaXBnX21heCA9IEVYVDJfTUFYX0lOT0RFU19QRVJfR1JPVVAoc2IpOworCWNwZ19tYXggPSA4ICogRVhUMl9CTE9DS19TSVpFKHNiKTsKKwlpZiAoY3BnX21heCA+IEVYVDJfTUFYX0NMVVNURVJTX1BFUl9HUk9VUChzYikpCisJCWNwZ19tYXggPSBFWFQyX01BWF9DTFVTVEVSU19QRVJfR1JPVVAoc2IpOworCWJwZ19tYXggPSA4ICogRVhUMl9CTE9DS19TSVpFKHNiKSAqIEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKTsKKwlpZiAoYnBnX21heCA+IEVYVDJfTUFYX0JMT0NLU19QRVJfR1JPVVAoc2IpKQorCQlicGdfbWF4ID0gRVhUMl9NQVhfQkxPQ0tTX1BFUl9HUk9VUChzYik7CisKKwljdHgtPmludmFsaWRfaW5vZGVfYml0bWFwX2ZsYWcgPSAoaW50ICopIGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LAorCQkgc2l6ZW9mKGludCkgKiBmcy0+Z3JvdXBfZGVzY19jb3VudCwgImludmFsaWRfaW5vZGVfYml0bWFwIik7CisJY3R4LT5pbnZhbGlkX2Jsb2NrX2JpdG1hcF9mbGFnID0gKGludCAqKSBlMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwKKwkJIHNpemVvZihpbnQpICogZnMtPmdyb3VwX2Rlc2NfY291bnQsICJpbnZhbGlkX2Jsb2NrX2JpdG1hcCIpOworCWN0eC0+aW52YWxpZF9pbm9kZV90YWJsZV9mbGFnID0gKGludCAqKSBlMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwKKwkJc2l6ZW9mKGludCkgKiBmcy0+Z3JvdXBfZGVzY19jb3VudCwgImludmFsaWRfaW5vZGVfdGFibGUiKTsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwkvKgorCSAqIFZlcmlmeSB0aGUgc3VwZXIgYmxvY2sgY29uc3RhbnRzLi4uCisJICovCisJY2hlY2tfc3VwZXJfdmFsdWUoY3R4LCAiaW5vZGVzX2NvdW50Iiwgc2ItPnNfaW5vZGVzX2NvdW50LAorCQkJICBNSU5fQ0hFQ0ssIDEsIDApOworCWNoZWNrX3N1cGVyX3ZhbHVlKGN0eCwgImJsb2Nrc19jb3VudCIsIGV4dDJmc19ibG9ja3NfY291bnQoc2IpLAorCQkJICBNSU5fQ0hFQ0ssIDEsIDApOworCWNoZWNrX3N1cGVyX3ZhbHVlKGN0eCwgImZpcnN0X2RhdGFfYmxvY2siLCBzYi0+c19maXJzdF9kYXRhX2Jsb2NrLAorCQkJICBNQVhfQ0hFQ0ssIDAsIGV4dDJmc19ibG9ja3NfY291bnQoc2IpKTsKKwljaGVja19zdXBlcl92YWx1ZShjdHgsICJsb2dfYmxvY2tfc2l6ZSIsIHNiLT5zX2xvZ19ibG9ja19zaXplLAorCQkJICBNSU5fQ0hFQ0sgfCBNQVhfQ0hFQ0ssIDAsCisJCQkgIEVYVDJfTUFYX0JMT0NLX0xPR19TSVpFIC0gRVhUMl9NSU5fQkxPQ0tfTE9HX1NJWkUpOworCWNoZWNrX3N1cGVyX3ZhbHVlKGN0eCwgImxvZ19jbHVzdGVyX3NpemUiLAorCQkJICBzYi0+c19sb2dfY2x1c3Rlcl9zaXplLAorCQkJICBNSU5fQ0hFQ0sgfCBNQVhfQ0hFQ0ssIHNiLT5zX2xvZ19ibG9ja19zaXplLAorCQkJICAoRVhUMl9NQVhfQ0xVU1RFUl9MT0dfU0laRSAtCisJCQkgICBFWFQyX01JTl9DTFVTVEVSX0xPR19TSVpFKSk7CisJY2hlY2tfc3VwZXJfdmFsdWUoY3R4LCAiY2x1c3RlcnNfcGVyX2dyb3VwIiwgc2ItPnNfY2x1c3RlcnNfcGVyX2dyb3VwLAorCQkJICBNSU5fQ0hFQ0sgfCBNQVhfQ0hFQ0ssIDgsIGNwZ19tYXgpOworCWNoZWNrX3N1cGVyX3ZhbHVlKGN0eCwgImJsb2Nrc19wZXJfZ3JvdXAiLCBzYi0+c19ibG9ja3NfcGVyX2dyb3VwLAorCQkJICBNSU5fQ0hFQ0sgfCBNQVhfQ0hFQ0ssIDgsIGJwZ19tYXgpOworCWNoZWNrX3N1cGVyX3ZhbHVlKGN0eCwgImlub2Rlc19wZXJfZ3JvdXAiLCBzYi0+c19pbm9kZXNfcGVyX2dyb3VwLAorCQkJICBNSU5fQ0hFQ0sgfCBNQVhfQ0hFQ0ssIGlub2Rlc19wZXJfYmxvY2ssIGlwZ19tYXgpOworCWNoZWNrX3N1cGVyX3ZhbHVlKGN0eCwgInJfYmxvY2tzX2NvdW50IiwgZXh0MmZzX3JfYmxvY2tzX2NvdW50KHNiKSwKKwkJCSAgTUFYX0NIRUNLLCAwLCBleHQyZnNfYmxvY2tzX2NvdW50KHNiKSAvIDIpOworCWNoZWNrX3N1cGVyX3ZhbHVlKGN0eCwgInJlc2VydmVkX2dkdF9ibG9ja3MiLAorCQkJICBzYi0+c19yZXNlcnZlZF9nZHRfYmxvY2tzLCBNQVhfQ0hFQ0ssIDAsCisJCQkgIGZzLT5ibG9ja3NpemUgLyBzaXplb2YoX191MzIpKTsKKwljaGVja19zdXBlcl92YWx1ZShjdHgsICJkZXNjX3NpemUiLAorCQkJICBzYi0+c19kZXNjX3NpemUsIE1BWF9DSEVDSyB8IExPRzJfQ0hFQ0ssIDAsCisJCQkgIEVYVDJfTUFYX0RFU0NfU0laRSk7CisJaWYgKHNiLT5zX3Jldl9sZXZlbCA+IEVYVDJfR09PRF9PTERfUkVWKQorCQljaGVja19zdXBlcl92YWx1ZShjdHgsICJmaXJzdF9pbm8iLCBzYi0+c19maXJzdF9pbm8sCisJCQkJICBNSU5fQ0hFQ0sgfCBNQVhfQ0hFQ0ssCisJCQkJICBFWFQyX0dPT0RfT0xEX0ZJUlNUX0lOTywgc2ItPnNfaW5vZGVzX2NvdW50KTsKKwlpbm9kZV9zaXplID0gRVhUMl9JTk9ERV9TSVpFKHNiKTsKKwljaGVja19zdXBlcl92YWx1ZShjdHgsICJpbm9kZV9zaXplIiwKKwkJCSAgaW5vZGVfc2l6ZSwgTUlOX0NIRUNLIHwgTUFYX0NIRUNLIHwgTE9HMl9DSEVDSywKKwkJCSAgRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFLCBmcy0+YmxvY2tzaXplKTsKKwlpZiAoc2ItPnNfYmxvY2tzX3Blcl9ncm91cCAhPSAoc2ItPnNfY2x1c3RlcnNfcGVyX2dyb3VwICoKKwkJCQkgICAgICAgRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpKSkgeworCQlwY3R4Lm51bSA9IHNiLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCAqIEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKTsKKwkJcGN0eC5zdHIgPSAiYmxvY2tfc2l6ZSI7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9NSVNDX0NPUlJVUFRfU1VQRVIsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsgLyogbmV2ZXIgZ2V0IGhlcmUhICovCisJCXJldHVybjsKKwl9CisKKwlpZiAoKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19HT1RfREVWU0laRSkgJiYKKwkgICAgKGN0eC0+bnVtX2Jsb2NrcyA8IGV4dDJmc19ibG9ja3NfY291bnQoc2IpKSkgeworCQlwY3R4LmJsayA9IGV4dDJmc19ibG9ja3NfY291bnQoc2IpOworCQlwY3R4LmJsazIgPSBjdHgtPm51bV9ibG9ja3M7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfRlNfU0laRV9XUk9ORywgJnBjdHgpKSB7CisJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQkJcmV0dXJuOworCQl9CisJfQorCisJc2hvdWxkX2JlID0gKHNiLT5zX2xvZ19ibG9ja19zaXplID09IDAgJiYKKwkJICAgICBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykgPT0gMSkgPyAxIDogMDsKKwlpZiAoc2ItPnNfZmlyc3RfZGF0YV9ibG9jayAhPSBzaG91bGRfYmUpIHsKKwkJcGN0eC5ibGsgPSBzYi0+c19maXJzdF9kYXRhX2Jsb2NrOworCQlwY3R4LmJsazIgPSBzaG91bGRfYmU7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9GSVJTVF9EQVRBX0JMT0NLLCAmcGN0eCk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCXJldHVybjsKKwl9CisKKwlzaG91bGRfYmUgPSBzYi0+c19pbm9kZXNfcGVyX2dyb3VwICogZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJaWYgKHNiLT5zX2lub2Rlc19jb3VudCAhPSBzaG91bGRfYmUpIHsKKwkJcGN0eC5pbm8gPSBzYi0+c19pbm9kZXNfY291bnQ7CisJCXBjdHguaW5vMiA9IHNob3VsZF9iZTsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9JTk9ERV9DT1VOVF9XUk9ORywgJnBjdHgpKSB7CisJCQlzYi0+c19pbm9kZXNfY291bnQgPSBzaG91bGRfYmU7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCX0KKwl9CisKKwkvKiBJcyA2NGJpdCBzZXQgYW5kIGV4dGVudHMgdW5zZXQ/ICovCisJaWYgKEVYVDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCSAgICAgIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkgJiYKKwkgICAgIUVYVDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCSAgICAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUykgJiYKKwkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8wXzY0QklUX1dJVEhPVVRfRVhURU5UUywgJnBjdHgpKSB7CisJCWZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0IHw9CisJCQlFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUzsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCX0KKworCWlmICgoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgJiYKKwkgICAgKGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnID4gZnMtPmRlc2NfYmxvY2tzKSkgeworCQlwY3R4Lmdyb3VwID0gZnMtPmRlc2NfYmxvY2tzOworCQlwY3R4Lm51bSA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8wX0ZJUlNUX01FVEFfQkdfVE9PX0JJRywgJnBjdHgpKSB7CisJCQlmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmPQorCQkJCX5FWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRzsKKwkJCWZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnID0gMDsKKwkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJfQorCX0KKworCS8qCisJICogVmVyaWZ5IHRoZSBncm91cCBkZXNjcmlwdG9ycy4uLi4KKwkgKi8KKwlmaXJzdF9ibG9jayA9IHNiLT5zX2ZpcnN0X2RhdGFfYmxvY2s7CisJbGFzdF9ibG9jayA9IGV4dDJmc19ibG9ja3NfY291bnQoc2IpLTE7CisKKwljc3VtX2ZsYWcgPSBFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKTsKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlwY3R4Lmdyb3VwID0gaTsKKworCQlpZiAoIUVYVDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQkgICAgICAgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcpKSB7CisJCQlmaXJzdF9ibG9jayA9IGV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZnMsIGkpOworCQkJbGFzdF9ibG9jayA9IGV4dDJmc19ncm91cF9sYXN0X2Jsb2NrMihmcywgaSk7CisJCX0KKworCQlpZiAoKGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBpKSA8IGZpcnN0X2Jsb2NrKSB8fAorCQkgICAgKGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBpKSA+IGxhc3RfYmxvY2spKSB7CisJCQlwY3R4LmJsayA9IGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBpKTsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfQkJfTk9UX0dST1VQLCAmcGN0eCkpCisJCQkJZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2Nfc2V0KGZzLCBpLCAwKTsKKwkJfQorCQlpZiAoZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpID09IDApIHsKKwkJCWN0eC0+aW52YWxpZF9ibG9ja19iaXRtYXBfZmxhZ1tpXSsrOworCQkJY3R4LT5pbnZhbGlkX2JpdG1hcHMrKzsKKwkJfQorCQlpZiAoKGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKSA8IGZpcnN0X2Jsb2NrKSB8fAorCQkgICAgKGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKSA+IGxhc3RfYmxvY2spKSB7CisJCQlwY3R4LmJsayA9IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKTsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfSUJfTk9UX0dST1VQLCAmcGN0eCkpCisJCQkJZXh0MmZzX2lub2RlX2JpdG1hcF9sb2Nfc2V0KGZzLCBpLCAwKTsKKwkJfQorCQlpZiAoZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpID09IDApIHsKKwkJCWN0eC0+aW52YWxpZF9pbm9kZV9iaXRtYXBfZmxhZ1tpXSsrOworCQkJY3R4LT5pbnZhbGlkX2JpdG1hcHMrKzsKKwkJfQorCQlpZiAoKGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpIDwgZmlyc3RfYmxvY2spIHx8CisJCSAgICAoKGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpICsKKwkJICAgICAgZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAgLSAxKSA+IGxhc3RfYmxvY2spKSB7CisJCQlwY3R4LmJsayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpOworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9JVEFCTEVfTk9UX0dST1VQLCAmcGN0eCkpCisJCQkJZXh0MmZzX2lub2RlX3RhYmxlX2xvY19zZXQoZnMsIGksIDApOworCQl9CisJCWlmIChleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSA9PSAwKSB7CisJCQljdHgtPmludmFsaWRfaW5vZGVfdGFibGVfZmxhZ1tpXSsrOworCQkJY3R4LT5pbnZhbGlkX2JpdG1hcHMrKzsKKwkJfQorCQlmcmVlX2Jsb2NrcyArPSBleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnQoZnMsIGkpOworCQlmcmVlX2lub2RlcyArPSBleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnQoZnMsIGkpOworCisJCWlmICgoZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50KGZzLCBpKSA+IHNiLT5zX2Jsb2Nrc19wZXJfZ3JvdXApIHx8CisJCSAgICAoZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50KGZzLCBpKSA+IHNiLT5zX2lub2Rlc19wZXJfZ3JvdXApIHx8CisJCSAgICAoZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudChmcywgaSkgPiBzYi0+c19pbm9kZXNfcGVyX2dyb3VwKSkKKwkJCWV4dDJmc191bm1hcmtfdmFsaWQoZnMpOworCisJCXNob3VsZF9iZSA9IDA7CisJCWlmICghZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV92ZXJpZnkoZnMsIGkpKSB7CisJCQlwY3R4LmNzdW0xID0gZXh0MmZzX2JnX2NoZWNrc3VtKGZzLCBpKTsKKwkJCXBjdHguY3N1bTIgPSBleHQyZnNfZ3JvdXBfZGVzY19jc3VtKGZzLCBpKTsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfR0RUX0NTVU0sICZwY3R4KSkgeworCQkJCWV4dDJmc19iZ19mbGFnc19jbGVhcihmcywgaSwgRVhUMl9CR19CTE9DS19VTklOSVQpOworCQkJCWV4dDJmc19iZ19mbGFnc19jbGVhcihmcywgaSwgRVhUMl9CR19JTk9ERV9VTklOSVQpOworCQkJCWV4dDJmc19iZ19pdGFibGVfdW51c2VkX3NldChmcywgaSwgMCk7CisJCQkJc2hvdWxkX2JlID0gMTsKKwkJCX0KKwkJCWV4dDJmc191bm1hcmtfdmFsaWQoZnMpOworCQl9CisKKwkJaWYgKCFjc3VtX2ZsYWcgJiYKKwkJICAgIChleHQyZnNfYmdfZmxhZ3NfdGVzdChmcywgaSwgRVhUMl9CR19CTE9DS19VTklOSVQpIHx8CisJCSAgICAgZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGksIEVYVDJfQkdfSU5PREVfVU5JTklUKSB8fAorCQkgICAgIGV4dDJmc19iZ19pdGFibGVfdW51c2VkKGZzLCBpKSAhPSAwKSkgeworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9HRFRfVU5JTklULCAmcGN0eCkpIHsKKwkJCQlleHQyZnNfYmdfZmxhZ3NfY2xlYXIoZnMsIGksIEVYVDJfQkdfQkxPQ0tfVU5JTklUKTsKKwkJCQlleHQyZnNfYmdfZmxhZ3NfY2xlYXIoZnMsIGksIEVYVDJfQkdfSU5PREVfVU5JTklUKTsKKwkJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZF9zZXQoZnMsIGksIDApOworCQkJCXNob3VsZF9iZSA9IDE7CisJCQl9CisJCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKwkJfQorCisJCWlmIChpID09IGZzLT5ncm91cF9kZXNjX2NvdW50IC0gMSAmJgorCQkgICAgZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGksIEVYVDJfQkdfQkxPQ0tfVU5JTklUKSkgeworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9CQl9VTklOSVRfTEFTVCwgJnBjdHgpKSB7CisJCQkJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGZzLCBpLCBFWFQyX0JHX0JMT0NLX1VOSU5JVCk7CisJCQkJc2hvdWxkX2JlID0gMTsKKwkJCX0KKwkJCWV4dDJmc191bm1hcmtfdmFsaWQoZnMpOworCQl9CisKKwkJaWYgKGNzdW1fZmxhZyAmJgorCQkgICAgKGV4dDJmc19iZ19pdGFibGVfdW51c2VkKGZzLCBpKSA+IGV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudChmcywgaSkgfHwKKwkJICAgICBleHQyZnNfYmdfaXRhYmxlX3VudXNlZChmcywgaSkgPiBzYi0+c19pbm9kZXNfcGVyX2dyb3VwKSkgeworCQkJcGN0eC5ibGsgPSBleHQyZnNfYmdfaXRhYmxlX3VudXNlZChmcywgaSk7CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8wX0dEVF9JVEFCTEVfVU5VU0VELCAmcGN0eCkpIHsKKwkJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZF9zZXQoZnMsIGksIDApOworCQkJCXNob3VsZF9iZSA9IDE7CisJCQl9CisJCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKwkJfQorCisJCWlmIChzaG91bGRfYmUpCisJCQlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgaSk7CisJCS8qIElmIHRoZSB1c2VyIGFib3J0cyBlMmZzY2sgYnkgdHlwaW5nIF5DLCBzdG9wIHJpZ2h0IGF3YXkgKi8KKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19TSUdOQUxfTUFTSykKKwkJCXJldHVybjsKKwl9CisKKwljdHgtPmZyZWVfYmxvY2tzID0gRVhUMkZTX0MyQihmcywgZnJlZV9ibG9ja3MpOworCWN0eC0+ZnJlZV9pbm9kZXMgPSBmcmVlX2lub2RlczsKKworCWlmICgoZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50KHNiKSA+IGV4dDJmc19ibG9ja3NfY291bnQoc2IpKSB8fAorCSAgICAoc2ItPnNfZnJlZV9pbm9kZXNfY291bnQgPiBzYi0+c19pbm9kZXNfY291bnQpKQorCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGludmFsaWQgYml0bWFwcywgc2V0IHRoZSBlcnJvciBzdGF0ZSBvZiB0aGUKKwkgKiBmaWxlc3lzdGVtLgorCSAqLworCWlmIChjdHgtPmludmFsaWRfYml0bWFwcyAmJiAhKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUkVBRE9OTFkpKSB7CisJCXNiLT5zX3N0YXRlICY9IH5FWFQyX1ZBTElEX0ZTOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJfQorCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworI2lmbmRlZiBFWFQyX1NLSVBfVVVJRAorCS8qCisJICogSWYgdGhlIFVVSUQgZmllbGQgaXNuJ3QgYXNzaWduZWQsIGFzc2lnbiBpdC4KKwkgKiBTa2lwIGlmIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCBhbmQgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCwKKwkgKiBpZiB0aGUgaWQgY2hhbmdlcyB1bmRlciB0aGUga2VybmVsIHJlbW91bnRpbmcgcncgbWF5IGZhaWwuCisJICovCisJaWYgKCEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9SRUFET05MWSkgJiYgdXVpZF9pc19udWxsKHNiLT5zX3V1aWQpICYmCisJICAgICghY3N1bV9mbGFnIHx8ICEoY3R4LT5tb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkpKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfQUREX1VVSUQsICZwY3R4KSkgeworCQkJdXVpZF9nZW5lcmF0ZShzYi0+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+c3VwZXItPnNfdXVpZCkpKQorCQkJcmV0ID0gMTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9lMmZzY2svdW5peC5jIGIvZTJmc2NrL3VuaXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDAzNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc2NrL3VuaXguYwpAQCAtMCwwICsxLDE3ODEgQEAKKy8qCisgKiB1bml4LmMgLSBUaGUgdW5peC1zcGVjaWZpYyBjb2RlIGZvciBlMmZzY2sKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAgLyogZm9yIGluY2x1c2lvbiBvZiBzYV9oYW5kbGVyIGluIFNvbGFyaXMgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX1NJR05BTF9ICisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGNoYXIgKm9wdGFyZzsKK2V4dGVybiBpbnQgb3B0aW5kOworI2VuZGlmCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTUFMTE9DX0gKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfRElSRU5UX0gKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZTJwL2UycC5oIgorI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyNpbmNsdWRlICJlMnAvZTJwLmgiCisjaW5jbHVkZSAiZTJmc2NrLmgiCisjaW5jbHVkZSAicHJvYmxlbS5oIgorI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKworLyogQ29tbWFuZCBsaW5lIG9wdGlvbnMgKi8KK3N0YXRpYyBpbnQgY2ZsYWc7CQkvKiBjaGVjayBkaXNrICovCitzdGF0aWMgaW50IHNob3dfdmVyc2lvbl9vbmx5Oworc3RhdGljIGludCB2ZXJib3NlOworCitzdGF0aWMgaW50IHJlcGxhY2VfYmFkX2Jsb2NrczsKK3N0YXRpYyBpbnQga2VlcF9iYWRfYmxvY2tzOworc3RhdGljIGNoYXIgKmJhZF9ibG9ja3NfZmlsZTsKKworZTJmc2NrX3QgZTJmc2NrX2dsb2JhbF9jdHg7CS8qIFRyeSB5b3VyIHZlcnkgYmVzdCBub3QgdG8gdXNlIHRoaXMhICovCisKKyNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCQkvKiBFbmFibGVkIGJ5IGNvbmZpZ3VyZSAtLWVuYWJsZS1qZnMtZGVidWcgKi8KK2ludCBqb3VybmFsX2VuYWJsZV9kZWJ1ZyA9IC0xOworI2VuZGlmCisKK3N0YXRpYyB2b2lkIHVzYWdlKGUyZnNja190IGN0eCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwKKwkJXygiVXNhZ2U6ICVzIFstcGFueXJjZGZ2dERGVl0gWy1iIHN1cGVyYmxvY2tdIFstQiBibG9ja3NpemVdXG4iCisJCSJcdFx0Wy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIFstUCBwcm9jZXNzX2lub2RlX3NpemVdXG4iCisJCSJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKwkJIlx0XHRbLUUgZXh0ZW5kZWQtb3B0aW9uc10gZGV2aWNlXG4iKSwKKwkJY3R4LT5wcm9ncmFtX25hbWUpOworCisJZnByaW50ZihzdGRlcnIsICIlcyIsIF8oIlxuRW1lcmdlbmN5IGhlbHA6XG4iCisJCSIgLXAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIHJlcGFpciAobm8gcXVlc3Rpb25zKVxuIgorCQkiIC1uICAgICAgICAgICAgICAgICAgIE1ha2Ugbm8gY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbVxuIgorCQkiIC15ICAgICAgICAgICAgICAgICAgIEFzc3VtZSBcInllc1wiIHRvIGFsbCBxdWVzdGlvbnNcbiIKKwkJIiAtYyAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgYmFkIGJsb2NrcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGJhZGJsb2NrIGxpc3RcbiIKKwkJIiAtZiAgICAgICAgICAgICAgICAgICBGb3JjZSBjaGVja2luZyBldmVuIGlmIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGNsZWFuXG4iKSk7CisJZnByaW50ZihzdGRlcnIsICIlcyIsIF8oIiIKKwkJIiAtdiAgICAgICAgICAgICAgICAgICBCZSB2ZXJib3NlXG4iCisJCSIgLWIgc3VwZXJibG9jayAgICAgICAgVXNlIGFsdGVybmF0aXZlIHN1cGVyYmxvY2tcbiIKKwkJIiAtQiBibG9ja3NpemUgICAgICAgICBGb3JjZSBibG9ja3NpemUgd2hlbiBsb29raW5nIGZvciBzdXBlcmJsb2NrXG4iCisJCSIgLWogZXh0ZXJuYWxfam91cm5hbCAgU2V0IGxvY2F0aW9uIG9mIHRoZSBleHRlcm5hbCBqb3VybmFsXG4iCisJCSIgLWwgYmFkX2Jsb2Nrc19maWxlICAgQWRkIHRvIGJhZGJsb2NrcyBsaXN0XG4iCisJCSIgLUwgYmFkX2Jsb2Nrc19maWxlICAgU2V0IGJhZGJsb2NrcyBsaXN0XG4iCisJCSkpOworCisJZXhpdChGU0NLX1VTQUdFKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19zdGF0cyhlMmZzY2tfdAljdHgpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWV4dDJfaW5vX3QgaW5vZGVzLCBpbm9kZXNfdXNlZDsKKwlibGs2NF90IGJsb2NrcywgYmxvY2tzX3VzZWQ7CisJdW5zaWduZWQgaW50IGRpcl9saW5rczsKKwl1bnNpZ25lZCBpbnQgbnVtX2ZpbGVzLCBudW1fbGlua3M7CisJX191MzIgKm1hc2ssIG07CisJaW50IGZyYWdfcGVyY2VudF9maWxlLCBmcmFnX3BlcmNlbnRfZGlyLCBmcmFnX3BlcmNlbnRfdG90YWw7CisJaW50IGksIGosIHByaW50ZWQgPSAwOworCisJZGlyX2xpbmtzID0gMiAqIGN0eC0+ZnNfZGlyZWN0b3J5X2NvdW50IC0gMTsKKwludW1fZmlsZXMgPSBjdHgtPmZzX3RvdGFsX2NvdW50IC0gZGlyX2xpbmtzOworCW51bV9saW5rcyA9IGN0eC0+ZnNfbGlua3NfY291bnQgLSBkaXJfbGlua3M7CisJaW5vZGVzID0gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudDsKKwlpbm9kZXNfdXNlZCA9IChmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50IC0KKwkJICAgICAgIGZzLT5zdXBlci0+c19mcmVlX2lub2Rlc19jb3VudCk7CisJYmxvY2tzID0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCWJsb2Nrc191c2VkID0gKGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtCisJCSAgICAgICBleHQyZnNfZnJlZV9ibG9ja3NfY291bnQoZnMtPnN1cGVyKSk7CisKKwlmcmFnX3BlcmNlbnRfZmlsZSA9ICgxMDAwMCAqIGN0eC0+ZnNfZnJhZ21lbnRlZCkgLyBpbm9kZXNfdXNlZDsKKwlmcmFnX3BlcmNlbnRfZmlsZSA9IChmcmFnX3BlcmNlbnRfZmlsZSArIDUpIC8gMTA7CisKKwlmcmFnX3BlcmNlbnRfZGlyID0gKDEwMDAwICogY3R4LT5mc19mcmFnbWVudGVkX2RpcikgLyBpbm9kZXNfdXNlZDsKKwlmcmFnX3BlcmNlbnRfZGlyID0gKGZyYWdfcGVyY2VudF9kaXIgKyA1KSAvIDEwOworCisJZnJhZ19wZXJjZW50X3RvdGFsID0gKCgxMDAwMCAqIChjdHgtPmZzX2ZyYWdtZW50ZWQgKworCQkJCQljdHgtPmZzX2ZyYWdtZW50ZWRfZGlyKSkKKwkJCSAgICAgIC8gaW5vZGVzX3VzZWQpOworCWZyYWdfcGVyY2VudF90b3RhbCA9IChmcmFnX3BlcmNlbnRfdG90YWwgKyA1KSAvIDEwOworCisJaWYgKCF2ZXJib3NlKSB7CisJCWxvZ19vdXQoY3R4LCBfKCIlczogJXUvJXUgZmlsZXMgKCUwZC4lZCUlIG5vbi1jb250aWd1b3VzKSwgIgorCQkJICAgICAgICIlbGx1LyVsbHUgYmxvY2tzXG4iKSwKKwkJCWN0eC0+ZGV2aWNlX25hbWUsIGlub2Rlc191c2VkLCBpbm9kZXMsCisJCQlmcmFnX3BlcmNlbnRfdG90YWwgLyAxMCwgZnJhZ19wZXJjZW50X3RvdGFsICUgMTAsCisJCQlibG9ja3NfdXNlZCwgYmxvY2tzKTsKKwkJcmV0dXJuOworCX0KKwlwcm9maWxlX2dldF9ib29sZWFuKGN0eC0+cHJvZmlsZSwgIm9wdGlvbnMiLCAicmVwb3J0X2ZlYXR1cmVzIiwgMCwgMCwKKwkJCSAgICAmaSk7CisJaWYgKHZlcmJvc2UgJiYgaSkgeworCQlsb2dfb3V0KGN0eCwgIlxuRmlsZXN5c3RlbSBmZWF0dXJlczoiKTsKKwkJbWFzayA9ICZjdHgtPmZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdDsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKywgbWFzaysrKSB7CisJCQlmb3IgKGogPSAwLCBtID0gMTsgaiA8IDMyOyBqKyssIG0gPDw9IDEpIHsKKwkJCQlpZiAoKm1hc2sgJiBtKSB7CisJCQkJCWxvZ19vdXQoY3R4LCAiICVzIiwKKwkJCQkJCWUycF9mZWF0dXJlMnN0cmluZyhpLCBtKSk7CisJCQkJCXByaW50ZWQrKzsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKHByaW50ZWQgPT0gMCkKKwkJCWxvZ19vdXQoY3R4LCAiIChub25lKSIpOworCQlsb2dfb3V0KGN0eCwgIlxuIik7CisJfQorCisJbG9nX291dChjdHgsIFBfKCJcbiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIiwKKwkJCSJcbiUxMnUgaW5vZGVzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIsCisJCQlpbm9kZXNfdXNlZCksIGlub2Rlc191c2VkLAorCQkxMDAuMCAqIGlub2Rlc191c2VkIC8gaW5vZGVzLCBpbm9kZXMpOworCWxvZ19vdXQoY3R4LCBQXygiJTEydSBub24tY29udGlndW91cyBmaWxlICglMGQuJWQlJSlcbiIsCisJCQkiJTEydSBub24tY29udGlndW91cyBmaWxlcyAoJTBkLiVkJSUpXG4iLAorCQkJY3R4LT5mc19mcmFnbWVudGVkKSwKKwkJY3R4LT5mc19mcmFnbWVudGVkLCBmcmFnX3BlcmNlbnRfZmlsZSAvIDEwLAorCQlmcmFnX3BlcmNlbnRfZmlsZSAlIDEwKTsKKwlsb2dfb3V0KGN0eCwgUF8oIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3J5ICglMGQuJWQlJSlcbiIsCisJCQkiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcmllcyAoJTBkLiVkJSUpXG4iLAorCQkJY3R4LT5mc19mcmFnbWVudGVkX2RpciksCisJCWN0eC0+ZnNfZnJhZ21lbnRlZF9kaXIsIGZyYWdfcGVyY2VudF9kaXIgLyAxMCwKKwkJZnJhZ19wZXJjZW50X2RpciAlIDEwKTsKKwlsb2dfb3V0KGN0eCwgXygiICAgICAgICAgICAgICMgb2YgaW5vZGVzIHdpdGggaW5kL2RpbmQvdGluZCBibG9ja3M6ICIKKwkJICAgICAgICIldS8ldS8ldVxuIiksCisJCWN0eC0+ZnNfaW5kX2NvdW50LCBjdHgtPmZzX2RpbmRfY291bnQsIGN0eC0+ZnNfdGluZF9jb3VudCk7CisKKwlmb3IgKGo9TUFYX0VYVEVOVF9ERVBUSF9DT1VOVC0xOyBqID49MDsgai0tKQorCQlpZiAoY3R4LT5leHRlbnRfZGVwdGhfY291bnRbal0pCisJCQlicmVhazsKKwlpZiAoKytqKSB7CisJCWxvZ19vdXQoY3R4LCAiJXMiLCBfKCIgICAgICAgICAgICAgRXh0ZW50IGRlcHRoIGhpc3RvZ3JhbTogIikpOworCQlmb3IgKGk9MDsgaSA8IGo7IGkrKykgeworCQkJaWYgKGkpCisJCQkJZnB1dGMoJy8nLCBzdGRvdXQpOworCQkJbG9nX291dChjdHgsICIldSIsIGN0eC0+ZXh0ZW50X2RlcHRoX2NvdW50W2ldKTsKKwkJfQorCQlsb2dfb3V0KGN0eCwgIlxuIik7CisJfQorCisJbG9nX291dChjdHgsIFBfKCIlMTJsbHUgYmxvY2sgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iLAorCQkJIiUxMmxsdSBibG9ja3MgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iLAorCQkgICBibG9ja3NfdXNlZCksCisJCWJsb2Nrc191c2VkLCAxMDAuMCAqIGJsb2Nrc191c2VkIC8gYmxvY2tzLCBibG9ja3MpOworCWxvZ19vdXQoY3R4LCBQXygiJTEydSBiYWQgYmxvY2tcbiIsICIlMTJ1IGJhZCBibG9ja3NcbiIsCisJCQljdHgtPmZzX2JhZGJsb2Nrc19jb3VudCksIGN0eC0+ZnNfYmFkYmxvY2tzX2NvdW50KTsKKwlsb2dfb3V0KGN0eCwgUF8oIiUxMnUgbGFyZ2UgZmlsZVxuIiwgIiUxMnUgbGFyZ2UgZmlsZXNcbiIsCisJCQljdHgtPmxhcmdlX2ZpbGVzKSwgY3R4LT5sYXJnZV9maWxlcyk7CisJbG9nX291dChjdHgsIFBfKCJcbiUxMnUgcmVndWxhciBmaWxlXG4iLCAiXG4lMTJ1IHJlZ3VsYXIgZmlsZXNcbiIsCisJCQljdHgtPmZzX3JlZ3VsYXJfY291bnQpLCBjdHgtPmZzX3JlZ3VsYXJfY291bnQpOworCWxvZ19vdXQoY3R4LCBQXygiJTEydSBkaXJlY3RvcnlcbiIsICIlMTJ1IGRpcmVjdG9yaWVzXG4iLAorCQkJY3R4LT5mc19kaXJlY3RvcnlfY291bnQpLCBjdHgtPmZzX2RpcmVjdG9yeV9jb3VudCk7CisJbG9nX291dChjdHgsIFBfKCIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZVxuIiwKKwkJCSIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZXNcbiIsIGN0eC0+ZnNfY2hhcmRldl9jb3VudCksCisJCWN0eC0+ZnNfY2hhcmRldl9jb3VudCk7CisJbG9nX291dChjdHgsIFBfKCIlMTJ1IGJsb2NrIGRldmljZSBmaWxlXG4iLCAiJTEydSBibG9jayBkZXZpY2UgZmlsZXNcbiIsCisJCQljdHgtPmZzX2Jsb2NrZGV2X2NvdW50KSwgY3R4LT5mc19ibG9ja2Rldl9jb3VudCk7CisJbG9nX291dChjdHgsIFBfKCIlMTJ1IGZpZm9cbiIsICIlMTJ1IGZpZm9zXG4iLCBjdHgtPmZzX2ZpZm9fY291bnQpLAorCQljdHgtPmZzX2ZpZm9fY291bnQpOworCWxvZ19vdXQoY3R4LCBQXygiJTEydSBsaW5rXG4iLCAiJTEydSBsaW5rc1xuIiwgbnVtX2xpbmtzKSwKKwkJY3R4LT5mc19saW5rc19jb3VudCAtIGRpcl9saW5rcyk7CisJbG9nX291dChjdHgsIFBfKCIlMTJ1IHN5bWJvbGljIGxpbmsiLCAiJTEydSBzeW1ib2xpYyBsaW5rcyIsCisJCQljdHgtPmZzX3N5bWxpbmtzX2NvdW50KSwgY3R4LT5mc19zeW1saW5rc19jb3VudCk7CisJbG9nX291dChjdHgsIFBfKCIgKCV1IGZhc3Qgc3ltYm9saWMgbGluaylcbiIsCisJCQkiICgldSBmYXN0IHN5bWJvbGljIGxpbmtzKVxuIiwKKwkJCWN0eC0+ZnNfZmFzdF9zeW1saW5rc19jb3VudCksCisJCWN0eC0+ZnNfZmFzdF9zeW1saW5rc19jb3VudCk7CisJbG9nX291dChjdHgsIFBfKCIlMTJ1IHNvY2tldFxuIiwgIiUxMnUgc29ja2V0c1xuIiwKKwkJCWN0eC0+ZnNfc29ja2V0c19jb3VudCksCisJCWN0eC0+ZnNfc29ja2V0c19jb3VudCk7CisJbG9nX291dChjdHgsICItLS0tLS0tLS0tLS1cbiIpOworCWxvZ19vdXQoY3R4LCBQXygiJTEydSBmaWxlXG4iLCAiJTEydSBmaWxlc1xuIiwgbnVtX2ZpbGVzKSwKKwkJbnVtX2ZpbGVzKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfbW91bnQoZTJmc2NrX3QgY3R4KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJaW50CQljb250OworCisJcmV0dmFsID0gZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQoY3R4LT5maWxlc3lzdGVtX25hbWUsCisJCQkJCSAmY3R4LT5tb3VudF9mbGFncyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfY2hlY2tfaWZfbW91bnQiLCByZXR2YWwsCisJCQlfKCJ3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuIiksCisJCQljdHgtPmZpbGVzeXN0ZW1fbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBmaWxlc3lzdGVtIGlzbid0IG1vdW50ZWQsIG9yIGl0J3MgdGhlIHJvb3QKKwkgKiBmaWxlc3lzdGVtIGFuZCBpdCdzIG1vdW50ZWQgcmVhZC1vbmx5LCBhbmQgd2UncmUgbm90IGRvaW5nCisJICogYSByZWFkL3dyaXRlIGNoZWNrLCB0aGVuIGV2ZXJ5dGhpbmcncyBmaW5lLgorCSAqLworCWlmICgoIShjdHgtPm1vdW50X2ZsYWdzICYgKEVYVDJfTUZfTU9VTlRFRCB8IEVYVDJfTUZfQlVTWSkpKSB8fAorCSAgICAoKGN0eC0+bW91bnRfZmxhZ3MgJiBFWFQyX01GX0lTUk9PVCkgJiYKKwkgICAgIChjdHgtPm1vdW50X2ZsYWdzICYgRVhUMl9NRl9SRUFET05MWSkgJiYKKwkgICAgICEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9XUklURUNIRUNLKSkpCisJCXJldHVybjsKKworCWlmICgoKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUkVBRE9OTFkpIHx8CisJICAgICAoKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfRk9SQ0UpICYmCisJICAgICAgKGN0eC0+bW91bnRfZmxhZ3MgJiBFWFQyX01GX1JFQURPTkxZKSkpICYmCisJICAgICEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9XUklURUNIRUNLKSkgeworCQlpZiAoY3R4LT5tb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkKKwkJCWxvZ19vdXQoY3R4LCBfKCJXYXJuaW5nISAgJXMgaXMgbW91bnRlZC5cbiIpLAorCQkJCQljdHgtPmZpbGVzeXN0ZW1fbmFtZSk7CisJCWVsc2UKKwkJCWxvZ19vdXQoY3R4LCBfKCJXYXJuaW5nISAgJXMgaXMgaW4gdXNlLlxuIiksCisJCQkJCWN0eC0+ZmlsZXN5c3RlbV9uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjdHgtPm1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKQorCQlsb2dfb3V0KGN0eCwgXygiJXMgaXMgbW91bnRlZC5cbiIpLCBjdHgtPmZpbGVzeXN0ZW1fbmFtZSk7CisJZWxzZQorCQlsb2dfb3V0KGN0eCwgXygiJXMgaXMgaW4gdXNlLlxuIiksIGN0eC0+ZmlsZXN5c3RlbV9uYW1lKTsKKwlpZiAoIWN0eC0+aW50ZXJhY3RpdmUgfHwgY3R4LT5tb3VudF9mbGFncyAmIEVYVDJfTUZfQlVTWSkKKwkJZmF0YWxfZXJyb3IoY3R4LCBfKCJDYW5ub3QgY29udGludWUsIGFib3J0aW5nLlxuXG4iKSk7CisJcHV0cygiXDAwN1wwMDdcMDA3XDAwNyIpOworCWxvZ19vdXQoY3R4LCAiJXMiLCBfKCJcblxuV0FSTklORyEhISAgIgorCQkgICAgICAgIlRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuICAgIgorCQkgICAgICAgIklmIHlvdSBjb250aW51ZSB5b3UgKioqV0lMTCoqKlxuIgorCQkgICAgICAgImNhdXNlICoqKlNFVkVSRSoqKiBmaWxlc3lzdGVtIGRhbWFnZS5cblxuIikpOworCXB1dHMoIlwwMDdcMDA3XDAwNyIpOworCWNvbnQgPSBhc2tfeW4oY3R4LCBfKCJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gY29udGludWUiKSwgMCk7CisJaWYgKCFjb250KSB7CisJCXByaW50ZigiJXMiLCBfKCJjaGVjayBhYm9ydGVkLlxuIikpOworCQlleGl0ICgwKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGlzX29uX2JhdHQodm9pZCkKK3sKKwlGSUxFCSpmOworCURJUgkqZDsKKwljaGFyCXRtcFs4MF0sIHRtcDJbODBdLCBmbmFtZVs4MF07CisJdW5zaWduZWQgaW50CWFjZmxhZzsKKwlzdHJ1Y3QgZGlyZW50KglkZTsKKworCWYgPSBmb3BlbigiL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvQUMvb25saW5lIiwgInIiKTsKKwlpZiAoZikgeworCQlpZiAoZnNjYW5mKGYsICIldVxuIiwgJmFjZmxhZykgPT0gMSkgeworCQkJZmNsb3NlKGYpOworCQkJcmV0dXJuICghYWNmbGFnKTsKKwkJfQorCQlmY2xvc2UoZik7CisJfQorCWYgPSBmb3BlbigiL3Byb2MvYXBtIiwgInIiKTsKKwlpZiAoZikgeworCQlpZiAoZnNjYW5mKGYsICIlcyAlcyAlcyAleCIsIHRtcCwgdG1wLCB0bXAsICZhY2ZsYWcpICE9IDQpCisJCQlhY2ZsYWcgPSAxOworCQlmY2xvc2UoZik7CisJCXJldHVybiAoYWNmbGFnICE9IDEpOworCX0KKwlkID0gb3BlbmRpcigiL3Byb2MvYWNwaS9hY19hZGFwdGVyIik7CisJaWYgKGQpIHsKKwkJd2hpbGUgKChkZT1yZWFkZGlyKGQpKSAhPSBOVUxMKSB7CisJCQlpZiAoIXN0cm5jbXAoIi4iLCBkZS0+ZF9uYW1lLCAxKSkKKwkJCQljb250aW51ZTsKKwkJCXNucHJpbnRmKGZuYW1lLCA4MCwgIi9wcm9jL2FjcGkvYWNfYWRhcHRlci8lcy9zdGF0ZSIsCisJCQkJIGRlLT5kX25hbWUpOworCQkJZiA9IGZvcGVuKGZuYW1lLCAiciIpOworCQkJaWYgKCFmKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGZzY2FuZihmLCAiJXMgJXMiLCB0bXAyLCB0bXApICE9IDIpCisJCQkJdG1wWzBdID0gMDsKKwkJCWZjbG9zZShmKTsKKwkJCWlmIChzdHJuY21wKHRtcCwgIm9mZi1saW5lIiwgOCkgPT0gMCkgeworCQkJCWNsb3NlZGlyKGQpOworCQkJCXJldHVybiAxOworCQkJfQorCQl9CisJCWNsb3NlZGlyKGQpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBjaGVja3MgdG8gc2VlIGlmIGEgZmlsZXN5c3RlbSBjYW4gYmUgc2tpcHBlZDsgaWYgc28sCisgKiBpdCB3aWxsIGV4aXQgd2l0aCBFMkZTQ0tfT0suICBVbmRlciBzb21lIGNvbmRpdGlvbnMgaXQgd2lsbCBwcmludCBhCisgKiBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IGEgY2hlY2sgaXMgYmVpbmcgZm9yY2VkLgorICovCitzdGF0aWMgdm9pZCBjaGVja19pZl9za2lwKGUyZnNja190IGN0eCkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJc3RydWN0IHByb2JsZW1fY29udGV4dCBwY3R4OworCWNvbnN0IGNoYXIgKnJlYXNvbiA9IE5VTEw7CisJdW5zaWduZWQgaW50IHJlYXNvbl9hcmcgPSAwOworCWxvbmcgbmV4dF9jaGVjazsKKwlpbnQgYmF0dCA9IGlzX29uX2JhdHQoKTsKKwlpbnQgZGVmZXJfY2hlY2tfb25fYmF0dGVyeTsKKwlpbnQgYnJva2VuX3N5c3RlbV9jbG9jazsKKwl0aW1lX3QgbGFzdGNoZWNrOworCisJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19QUk9CTEVNU19GSVhFRCkKKwkJcmV0dXJuOworCisJcHJvZmlsZV9nZXRfYm9vbGVhbihjdHgtPnByb2ZpbGUsICJvcHRpb25zIiwgImJyb2tlbl9zeXN0ZW1fY2xvY2siLAorCQkJICAgIDAsIDAsICZicm9rZW5fc3lzdGVtX2Nsb2NrKTsKKwlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1RJTUVfSU5TQU5FKQorCQlicm9rZW5fc3lzdGVtX2Nsb2NrID0gMTsKKwlwcm9maWxlX2dldF9ib29sZWFuKGN0eC0+cHJvZmlsZSwgIm9wdGlvbnMiLAorCQkJICAgICJkZWZlcl9jaGVja19vbl9iYXR0ZXJ5IiwgMCwgMSwKKwkJCSAgICAmZGVmZXJfY2hlY2tfb25fYmF0dGVyeSk7CisJaWYgKCFkZWZlcl9jaGVja19vbl9iYXR0ZXJ5KQorCQliYXR0ID0gMDsKKworCWlmICgoY3R4LT5vcHRpb25zICYgRTJGX09QVF9GT1JDRSkgfHwgYmFkX2Jsb2Nrc19maWxlIHx8IGNmbGFnKQorCQlyZXR1cm47CisKKwlpZiAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9KT1VSTkFMX09OTFkpCisJCWdvdG8gc2tpcDsKKworCWxhc3RjaGVjayA9IGZzLT5zdXBlci0+c19sYXN0Y2hlY2s7CisJaWYgKGxhc3RjaGVjayA+IGN0eC0+bm93KQorCQlsYXN0Y2hlY2sgLT0gY3R4LT50aW1lX2Z1ZGdlOworCWlmICgoZnMtPnN1cGVyLT5zX3N0YXRlICYgRVhUMl9FUlJPUl9GUykgfHwKKwkgICAgIWV4dDJmc190ZXN0X3ZhbGlkKGZzKSkKKwkJcmVhc29uID0gXygiIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMiKTsKKwllbHNlIGlmICgoZnMtPnN1cGVyLT5zX3N0YXRlICYgRVhUMl9WQUxJRF9GUykgPT0gMCkKKwkJcmVhc29uID0gXygiIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQiKTsKKwllbHNlIGlmIChjaGVja19iYWNrdXBfc3VwZXJfYmxvY2soY3R4KSkKKwkJcmVhc29uID0gXygiIHByaW1hcnkgc3VwZXJibG9jayBmZWF0dXJlcyBkaWZmZXJlbnQgZnJvbSBiYWNrdXAiKTsKKwllbHNlIGlmICgoZnMtPnN1cGVyLT5zX21heF9tbnRfY291bnQgPiAwKSAmJgorCQkgKGZzLT5zdXBlci0+c19tbnRfY291bnQgPj0KKwkJICAodW5zaWduZWQpIGZzLT5zdXBlci0+c19tYXhfbW50X2NvdW50KSkgeworCQlyZWFzb24gPSBfKCIgaGFzIGJlZW4gbW91bnRlZCAldSB0aW1lcyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiKTsKKwkJcmVhc29uX2FyZyA9IGZzLT5zdXBlci0+c19tbnRfY291bnQ7CisJCWlmIChiYXR0ICYmIChmcy0+c3VwZXItPnNfbW50X2NvdW50IDwKKwkJCSAgICAgKHVuc2lnbmVkKSBmcy0+c3VwZXItPnNfbWF4X21udF9jb3VudCoyKSkKKwkJCXJlYXNvbiA9IDA7CisJfSBlbHNlIGlmICghYnJva2VuX3N5c3RlbV9jbG9jayAmJiBmcy0+c3VwZXItPnNfY2hlY2tpbnRlcnZhbCAmJgorCQkgICAoY3R4LT5ub3cgPCBsYXN0Y2hlY2spKSB7CisJCXJlYXNvbiA9IF8oIiBoYXMgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdGltZSBpbiB0aGUgZnV0dXJlIik7CisJCWlmIChiYXR0KQorCQkJcmVhc29uID0gMDsKKwl9IGVsc2UgaWYgKCFicm9rZW5fc3lzdGVtX2Nsb2NrICYmIGZzLT5zdXBlci0+c19jaGVja2ludGVydmFsICYmCisJCSAgICgoY3R4LT5ub3cgLSBsYXN0Y2hlY2spID49CisJCSAgICAoKHRpbWVfdCkgZnMtPnN1cGVyLT5zX2NoZWNraW50ZXJ2YWwpKSkgeworCQlyZWFzb24gPSBfKCIgaGFzIGdvbmUgJXUgZGF5cyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiKTsKKwkJcmVhc29uX2FyZyA9IChjdHgtPm5vdyAtIGZzLT5zdXBlci0+c19sYXN0Y2hlY2spLygzNjAwKjI0KTsKKwkJaWYgKGJhdHQgJiYgKChjdHgtPm5vdyAtIGZzLT5zdXBlci0+c19sYXN0Y2hlY2spIDwKKwkJCSAgICAgZnMtPnN1cGVyLT5zX2NoZWNraW50ZXJ2YWwqMikpCisJCQlyZWFzb24gPSAwOworCX0KKwlpZiAocmVhc29uKSB7CisJCWxvZ19vdXQoY3R4LCAiJXMiLCBjdHgtPmRldmljZV9uYW1lKTsKKwkJbG9nX291dChjdHgsIHJlYXNvbiwgcmVhc29uX2FyZyk7CisJCWxvZ19vdXQoY3R4LCAiJXMiLCBfKCIsIGNoZWNrIGZvcmNlZC5cbiIpKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogVXBkYXRlIHRoZSBnbG9iYWwgY291bnRzIGZyb20gdGhlIGJsb2NrIGdyb3VwIGNvdW50cy4gIFRoaXMKKwkgKiBpcyBuZWVkZWQgc2luY2UgbW9kZXJuIGtlcm5lbHMgZG9uJ3QgdXBkYXRlIHRoZSBnbG9iYWwKKwkgKiBjb3VudHMgc28gYXMgdG8gYXZvaWQgbG9ja2luZyB0aGUgZW50aXJlIGZpbGUgc3lzdGVtLiAgU28KKwkgKiBpZiB0aGUgZmlsZXN5c3RlbSBpcyBub3QgdW5tb3VudGVkIGNsZWFubHksIHRoZSBnbG9iYWwKKwkgKiBjb3VudHMgbWF5IG5vdCBiZSBhY2N1cmF0ZS4gIFVwZGF0ZSB0aGVtIGhlcmUgaWYgd2UgY2FuLAorCSAqIGZvciB0aGUgYmVuZWZpdCBvZiB1c2VycyB3aG8gbWlnaHQgZXhhbWluZSB0aGUgZmlsZSBzeXN0ZW0KKwkgKiB1c2luZyBkdW1wZTJmcy4gIChUaGlzIGlzIGZvciBjb3NtZXRpYyByZWFzb25zIG9ubHkuKQorCSAqLworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJcGN0eC5pbm8gPSBmcy0+c3VwZXItPnNfZnJlZV9pbm9kZXNfY291bnQ7CisJcGN0eC5pbm8yID0gY3R4LT5mcmVlX2lub2RlczsKKwlpZiAoKHBjdHguaW5vICE9IHBjdHguaW5vMikgJiYKKwkgICAgIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1JFQURPTkxZKSAmJgorCSAgICBmaXhfcHJvYmxlbShjdHgsIFBSXzBfRlJFRV9JTk9ERV9DT1VOVCwgJnBjdHgpKSB7CisJCWZzLT5zdXBlci0+c19mcmVlX2lub2Rlc19jb3VudCA9IGN0eC0+ZnJlZV9pbm9kZXM7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwl9CisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlwY3R4LmJsayA9IGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCXBjdHguYmxrMiA9IGN0eC0+ZnJlZV9ibG9ja3M7CisJaWYgKChwY3R4LmJsayAhPSBwY3R4LmJsazIpICYmCisJICAgICEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9SRUFET05MWSkgJiYKKwkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8wX0ZSRUVfQkxPQ0tfQ09VTlQsICZwY3R4KSkgeworCQlleHQyZnNfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLT5zdXBlciwgY3R4LT5mcmVlX2Jsb2Nrcyk7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwl9CisKKwkvKiBQcmludCB0aGUgc3VtbWFyeSBtZXNzYWdlIHdoZW4gd2UncmUgc2tpcHBpbmcgYSBmdWxsIGNoZWNrICovCisJbG9nX291dChjdHgsIF8oIiVzOiBjbGVhbiwgJXUvJXUgZmlsZXMsICVsbHUvJWxsdSBibG9ja3MiKSwKKwkJY3R4LT5kZXZpY2VfbmFtZSwKKwkJZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCAtIGZzLT5zdXBlci0+c19mcmVlX2lub2Rlc19jb3VudCwKKwkJZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCwKKwkJZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpIC0KKwkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50KGZzLT5zdXBlciksCisJCWV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSk7CisJbmV4dF9jaGVjayA9IDEwMDAwMDsKKwlpZiAoZnMtPnN1cGVyLT5zX21heF9tbnRfY291bnQgPiAwKSB7CisJCW5leHRfY2hlY2sgPSBmcy0+c3VwZXItPnNfbWF4X21udF9jb3VudCAtIGZzLT5zdXBlci0+c19tbnRfY291bnQ7CisJCWlmIChuZXh0X2NoZWNrIDw9IDApCisJCQluZXh0X2NoZWNrID0gMTsKKwl9CisJaWYgKCFicm9rZW5fc3lzdGVtX2Nsb2NrICYmIGZzLT5zdXBlci0+c19jaGVja2ludGVydmFsICYmCisJICAgICgoY3R4LT5ub3cgLSBmcy0+c3VwZXItPnNfbGFzdGNoZWNrKSA+PSBmcy0+c3VwZXItPnNfY2hlY2tpbnRlcnZhbCkpCisJCW5leHRfY2hlY2sgPSAxOworCWlmIChuZXh0X2NoZWNrIDw9IDUpIHsKKwkJaWYgKG5leHRfY2hlY2sgPT0gMSkgeworCQkJaWYgKGJhdHQpCisJCQkJbG9nX291dChjdHgsICIlcyIsCisJCQkJCV8oIiAoY2hlY2sgZGVmZXJyZWQ7IG9uIGJhdHRlcnkpIikpOworCQkJZWxzZQorCQkJCWxvZ19vdXQoY3R4LCAiJXMiLAorCQkJCQlfKCIgKGNoZWNrIGFmdGVyIG5leHQgbW91bnQpIikpOworCQl9IGVsc2UKKwkJCWxvZ19vdXQoY3R4LCBfKCIgKGNoZWNrIGluICVsZCBtb3VudHMpIiksCisJCQkJbmV4dF9jaGVjayk7CisJfQorCWxvZ19vdXQoY3R4LCAiXG4iKTsKK3NraXA6CisJZXh0MmZzX2Nsb3NlX2ZyZWUoJmN0eC0+ZnMpOworCWUyZnNja19mcmVlX2NvbnRleHQoY3R4KTsKKwlleGl0KEZTQ0tfT0spOworfQorCisvKgorICogRm9yIGNvbXBsZXRpb24gbm90aWNlCisgKi8KK3N0cnVjdCBwZXJjZW50X3RibCB7CisJaW50CW1heF9wYXNzOworCWludAl0YWJsZVszMl07Cit9Oworc3RhdGljIHN0cnVjdCBwZXJjZW50X3RibCBlMmZzY2tfdGJsID0geworCTUsIHsgMCwgNzAsIDkwLCA5MiwgIDk1LCAxMDAgfQorfTsKK3N0YXRpYyBjaGFyIGJhclsxMjhdLCBzcGFjZXNbMTI4XTsKKworc3RhdGljIGZsb2F0IGNhbGNfcGVyY2VudChzdHJ1Y3QgcGVyY2VudF90YmwgKnRibCwgaW50IHBhc3MsIGludCBjdXJyLAorCQkJICBpbnQgbWF4KQoreworCWZsb2F0CXBlcmNlbnQ7CisKKwlpZiAocGFzcyA8PSAwKQorCQlyZXR1cm4gMC4wOworCWlmIChwYXNzID4gdGJsLT5tYXhfcGFzcyB8fCBtYXggPT0gMCkKKwkJcmV0dXJuIDEwMC4wOworCXBlcmNlbnQgPSAoKGZsb2F0KSBjdXJyKSAvICgoZmxvYXQpIG1heCk7CisJcmV0dXJuICgocGVyY2VudCAqICh0YmwtPnRhYmxlW3Bhc3NdIC0gdGJsLT50YWJsZVtwYXNzLTFdKSkKKwkJKyB0YmwtPnRhYmxlW3Bhc3MtMV0pOworfQorCit2b2lkIGUyZnNja19jbGVhcl9wcm9nYmFyKGUyZnNja190IGN0eCkKK3sKKwlpZiAoIShjdHgtPmZsYWdzICYgRTJGX0ZMQUdfUFJPR19CQVIpKQorCQlyZXR1cm47CisKKwlwcmludGYoIiVzJXNcciVzIiwgY3R4LT5zdGFydF9tZXRhLCBzcGFjZXMgKyAoc2l6ZW9mKHNwYWNlcykgLSA4MCksCisJICAgICAgIGN0eC0+c3RvcF9tZXRhKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwljdHgtPmZsYWdzICY9IH5FMkZfRkxBR19QUk9HX0JBUjsKK30KKworaW50IGUyZnNja19zaW1wbGVfcHJvZ3Jlc3MoZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICpsYWJlbCwgZmxvYXQgcGVyY2VudCwKKwkJCSAgIHVuc2lnbmVkIGludCBkcHludW0pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgc3Bpbm5lcltdID0gIlxcfC8tIjsKKwlpbnQJaTsKKwl1bnNpZ25lZCBpbnQJdGljazsKKwlzdHJ1Y3QgdGltZXZhbAl0djsKKwlpbnQgZHB5d2lkdGg7CisJaW50IGZpeGVkX3BlcmNlbnQ7CisKKwlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1BST0dfU1VQUFJFU1MpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIG5ldyBwcm9ncmVzcyBwb3NpdGlvbi4gIElmIHRoZQorCSAqIHBlcmNlbnRhZ2UgaGFzbid0IGNoYW5nZWQsIHRoZW4gd2Ugc2tpcCBvdXQgcmlnaHQKKwkgKiBhd2F5LgorCSAqLworCWZpeGVkX3BlcmNlbnQgPSAoaW50KSAoKDEwICogcGVyY2VudCkgKyAwLjUpOworCWlmIChjdHgtPnByb2dyZXNzX2xhc3RfcGVyY2VudCA9PSBmaXhlZF9wZXJjZW50KQorCQlyZXR1cm4gMDsKKwljdHgtPnByb2dyZXNzX2xhc3RfcGVyY2VudCA9IGZpeGVkX3BlcmNlbnQ7CisKKwkvKgorCSAqIElmIHdlJ3ZlIGFscmVhZHkgdXBkYXRlZCB0aGUgc3Bpbm5lciBvbmNlIHdpdGhpbgorCSAqIHRoZSBsYXN0IDEvOHRoIG9mIGEgc2Vjb25kLCBubyBwb2ludCBkb2luZyBpdAorCSAqIGFnYWluLgorCSAqLworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCXRpY2sgPSAodHYudHZfc2VjIDw8IDMpICsgKHR2LnR2X3VzZWMgLyAoMTAwMDAwMCAvIDgpKTsKKwlpZiAoKHRpY2sgPT0gY3R4LT5wcm9ncmVzc19sYXN0X3RpbWUpICYmCisJICAgIChmaXhlZF9wZXJjZW50ICE9IDApICYmIChmaXhlZF9wZXJjZW50ICE9IDEwMDApKQorCQlyZXR1cm4gMDsKKwljdHgtPnByb2dyZXNzX2xhc3RfdGltZSA9IHRpY2s7CisKKwkvKgorCSAqIEFkdmFuY2UgdGhlIHNwaW5uZXIsIGFuZCBub3RlIHRoYXQgdGhlIHByb2dyZXNzIGJhcgorCSAqIHdpbGwgYmUgb24gdGhlIHNjcmVlbgorCSAqLworCWN0eC0+cHJvZ3Jlc3NfcG9zID0gKGN0eC0+cHJvZ3Jlc3NfcG9zKzEpICYgMzsKKwljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX1BST0dfQkFSOworCisJZHB5d2lkdGggPSA2NiAtIHN0cmxlbihsYWJlbCk7CisJZHB5d2lkdGggPSA4ICogKGRweXdpZHRoIC8gOCk7CisJaWYgKGRweW51bSkKKwkJZHB5d2lkdGggLT0gODsKKworCWkgPSAoKHBlcmNlbnQgKiBkcHl3aWR0aCkgKyA1MCkgLyAxMDA7CisJcHJpbnRmKCIlcyVzOiB8JXMlcyIsIGN0eC0+c3RhcnRfbWV0YSwgbGFiZWwsCisJICAgICAgIGJhciArIChzaXplb2YoYmFyKSAtIChpKzEpKSwKKwkgICAgICAgc3BhY2VzICsgKHNpemVvZihzcGFjZXMpIC0gKGRweXdpZHRoIC0gaSArIDEpKSk7CisJaWYgKGZpeGVkX3BlcmNlbnQgPT0gMTAwMCkKKwkJZnB1dGMoJ3wnLCBzdGRvdXQpOworCWVsc2UKKwkJZnB1dGMoc3Bpbm5lcltjdHgtPnByb2dyZXNzX3BvcyAmIDNdLCBzdGRvdXQpOworCXByaW50ZigiICU0LjFmJSUgICIsIHBlcmNlbnQpOworCWlmIChkcHludW0pCisJCXByaW50ZigiJXVcciIsIGRweW51bSk7CisJZWxzZQorCQlmcHV0cygiIFxyIiwgc3Rkb3V0KTsKKwlmcHV0cyhjdHgtPnN0b3BfbWV0YSwgc3Rkb3V0KTsKKworCWlmIChmaXhlZF9wZXJjZW50ID09IDEwMDApCisJCWUyZnNja19jbGVhcl9wcm9nYmFyKGN0eCk7CisJZmZsdXNoKHN0ZG91dCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlMmZzY2tfdXBkYXRlX3Byb2dyZXNzKGUyZnNja190IGN0eCwgaW50IHBhc3MsCisJCQkJICB1bnNpZ25lZCBsb25nIGN1ciwgdW5zaWduZWQgbG9uZyBtYXgpCit7CisJY2hhciBidWZbMTAyNF07CisJZmxvYXQgcGVyY2VudDsKKworCWlmIChwYXNzID09IDApCisJCXJldHVybiAwOworCisJaWYgKGN0eC0+cHJvZ3Jlc3NfZmQpIHsKKwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkICVsdSAlbHUgJXNcbiIsCisJCQkgcGFzcywgY3VyLCBtYXgsIGN0eC0+ZGV2aWNlX25hbWUpOworCQl3cml0ZV9hbGwoY3R4LT5wcm9ncmVzc19mZCwgYnVmLCBzdHJsZW4oYnVmKSk7CisJfSBlbHNlIHsKKwkJcGVyY2VudCA9IGNhbGNfcGVyY2VudCgmZTJmc2NrX3RibCwgcGFzcywgY3VyLCBtYXgpOworCQllMmZzY2tfc2ltcGxlX3Byb2dyZXNzKGN0eCwgY3R4LT5kZXZpY2VfbmFtZSwKKwkJCQkgICAgICAgcGVyY2VudCwgMCk7CisJfQorCXJldHVybiAwOworfQorCisjZGVmaW5lIFBBVEhfU0VUICJQQVRIPS9zYmluIgorCisvKgorICogTWFrZSBzdXJlIDAsMSwyIGZpbGUgZGVzY3JpcHRvcnMgYXJlIG9wZW4sIHNvIHRoYXQgd2UgZG9uJ3Qgb3BlbgorICogdGhlIGZpbGVzeXN0ZW0gdXNpbmcgdGhlIHNhbWUgZmlsZSBkZXNjcmlwdG9yIGFzIHN0ZG91dCBvciBzdGRlcnIuCisgKi8KK3N0YXRpYyB2b2lkIHJlc2VydmVfc3RkaW9fZmRzKHZvaWQpCit7CisJaW50CWZkID0gMDsKKworCXdoaWxlIChmZCA8PSAyKSB7CisJCWZkID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKKwkJaWYgKGZkIDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIkVSUk9SOiBDb3VsZG4ndCBvcGVuICIKKwkJCQkiL2Rldi9udWxsICglcylcbiIpLAorCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworI2lmZGVmIEhBVkVfU0lHTkFMX0gKK3N0YXRpYyB2b2lkIHNpZ25hbF9wcm9ncmVzc19vbihpbnQgc2lnIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwllMmZzY2tfdCBjdHggPSBlMmZzY2tfZ2xvYmFsX2N0eDsKKworCWlmICghY3R4KQorCQlyZXR1cm47CisKKwljdHgtPnByb2dyZXNzID0gZTJmc2NrX3VwZGF0ZV9wcm9ncmVzczsKK30KKworc3RhdGljIHZvaWQgc2lnbmFsX3Byb2dyZXNzX29mZihpbnQgc2lnIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwllMmZzY2tfdCBjdHggPSBlMmZzY2tfZ2xvYmFsX2N0eDsKKworCWlmICghY3R4KQorCQlyZXR1cm47CisKKwllMmZzY2tfY2xlYXJfcHJvZ2JhcihjdHgpOworCWN0eC0+cHJvZ3Jlc3MgPSAwOworfQorCitzdGF0aWMgdm9pZCBzaWduYWxfY2FuY2VsKGludCBzaWcgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWUyZnNja190IGN0eCA9IGUyZnNja19nbG9iYWxfY3R4OworCisJaWYgKCFjdHgpCisJCWV4aXQoRlNDS19DQU5DRUxFRCk7CisKKwljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0NBTkNFTDsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBwYXJzZV9leHRlbmRlZF9vcHRzKGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqb3B0cykKK3sKKwljaGFyCSpidWYsICp0b2tlbiwgKm5leHQsICpwLCAqYXJnOworCWludAllYV92ZXI7CisJaW50CWV4dGVuZGVkX3VzYWdlID0gMDsKKworCWJ1ZiA9IHN0cmluZ19jb3B5KGN0eCwgb3B0cywgMCk7CisJZm9yICh0b2tlbiA9IGJ1ZjsgdG9rZW4gJiYgKnRva2VuOyB0b2tlbiA9IG5leHQpIHsKKwkJcCA9IHN0cmNocih0b2tlbiwgJywnKTsKKwkJbmV4dCA9IDA7CisJCWlmIChwKSB7CisJCQkqcCA9IDA7CisJCQluZXh0ID0gcCsxOworCQl9CisJCWFyZyA9IHN0cmNocih0b2tlbiwgJz0nKTsKKwkJaWYgKGFyZykgeworCQkJKmFyZyA9IDA7CisJCQlhcmcrKzsKKwkJfQorCQlpZiAoc3RyY21wKHRva2VuLCAiZWFfdmVyIikgPT0gMCkgeworCQkJaWYgKCFhcmcpIHsKKwkJCQlleHRlbmRlZF91c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZWFfdmVyID0gc3RydG91bChhcmcsICZwLCAwKTsKKwkJCWlmICgqcCB8fAorCQkJICAgICgoZWFfdmVyICE9IDEpICYmIChlYV92ZXIgIT0gMikpKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICIlcyIsCisJCQkJCV8oIkludmFsaWQgRUEgdmVyc2lvbi5cbiIpKTsKKwkJCQlleHRlbmRlZF91c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY3R4LT5leHRfYXR0cl92ZXIgPSBlYV92ZXI7CisJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAiZnJhZ2NoZWNrIikgPT0gMCkgeworCQkJY3R4LT5vcHRpb25zIHw9IEUyRl9PUFRfRlJBR0NIRUNLOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAiam91cm5hbF9vbmx5IikgPT0gMCkgeworCQkJaWYgKGFyZykgeworCQkJCWV4dGVuZGVkX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQljdHgtPm9wdGlvbnMgfD0gRTJGX09QVF9KT1VSTkFMX09OTFk7CisJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAiZGlzY2FyZCIpID09IDApIHsKKwkJCWN0eC0+b3B0aW9ucyB8PSBFMkZfT1BUX0RJU0NBUkQ7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJub2Rpc2NhcmQiKSA9PSAwKSB7CisJCQljdHgtPm9wdGlvbnMgJj0gfkUyRl9PUFRfRElTQ0FSRDsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgImxvZ19maWxlbmFtZSIpID09IDApIHsKKwkJCWlmICghYXJnKQorCQkJCWV4dGVuZGVkX3VzYWdlKys7CisJCQllbHNlCisJCQkJY3R4LT5sb2dfZm4gPSBzdHJpbmdfY29weShjdHgsIGFyZywgMCk7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJVbmtub3duIGV4dGVuZGVkIG9wdGlvbjogJXNcbiIpLAorCQkJCXRva2VuKTsKKwkJCWV4dGVuZGVkX3VzYWdlKys7CisJCX0KKwl9CisJZnJlZShidWYpOworCisJaWYgKGV4dGVuZGVkX3VzYWdlKSB7CisJCWZwdXRzKCgiXG5FeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCAiCisJCSAgICAgICAiYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisJCSAgICAgICAiaXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi4gICIKKwkJICAgICAgICJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIpLCBzdGRlcnIpOworCQlmcHV0cygoIlx0ZWFfdmVyPTxlYV92ZXJzaW9uICgxIG9yIDIpPlxuIiksIHN0ZGVycik7CisJCWZwdXRzKCgiXHRmcmFnY2hlY2tcbiIpLCBzdGRlcnIpOworCQlmcHV0cygoIlx0am91cm5hbF9vbmx5XG4iKSwgc3RkZXJyKTsKKwkJZnB1dHMoKCJcdGRpc2NhcmRcbiIpLCBzdGRlcnIpOworCQlmcHV0cygoIlx0bm9kaXNjYXJkXG4iKSwgc3RkZXJyKTsKKwkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwkJZXhpdCgxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN5bnRheF9lcnJfcmVwb3J0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBsb25nIGVyciwgaW50IGxpbmVfbnVtKQoreworCWZwcmludGYoc3RkZXJyLAorCQlfKCJTeW50YXggZXJyb3IgaW4gZTJmc2NrIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG5cdCVzXG4iKSwKKwkJZmlsZW5hbWUsIGxpbmVfbnVtLCBlcnJvcl9tZXNzYWdlKGVycikpOworCWV4aXQoRlNDS19FUlJPUik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25maWdfZm5bXSA9IHsgUk9PVF9TWVNDT05GRElSICIvZTJmc2NrLmNvbmYiLCAwIH07CisKK3N0YXRpYyBlcnJjb2RlX3QgUFJTKGludCBhcmdjLCBjaGFyICphcmd2W10sIGUyZnNja190ICpyZXRfY3R4KQoreworCWludAkJZmx1c2ggPSAwOworCWludAkJYywgZmQ7CisjaWZkZWYgTVRSQUNFCisJZXh0ZXJuIHZvaWQJKm1hbGx3YXRjaDsKKyNlbmRpZgorCWUyZnNja190CWN0eDsKKwllcnJjb2RlX3QJcmV0dmFsOworI2lmZGVmIEhBVkVfU0lHTkFMX0gKKwlzdHJ1Y3Qgc2lnYWN0aW9uCXNhOworI2VuZGlmCisJY2hhcgkJKmV4dGVuZGVkX29wdHMgPSAwOworCWNoYXIJCSpjcDsKKwlpbnQgCQlyZXM7CQkvKiByZXN1bHQgb2Ygc3NjYW5mICovCisjaWZkZWYgQ09ORklHX0pCRF9ERUJVRworCWNoYXIgCQkqamJkX2RlYnVnOworI2VuZGlmCisKKwlyZXR2YWwgPSBlMmZzY2tfYWxsb2NhdGVfY29udGV4dCgmY3R4KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJKnJldF9jdHggPSBjdHg7CisJZTJmc2NrX2dsb2JhbF9jdHggPSBjdHg7CisKKwlzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCBCVUZTSVopOworCXNldHZidWYoc3RkZXJyLCBOVUxMLCBfSU9OQkYsIEJVRlNJWik7CisJaWYgKGlzYXR0eSgwKSAmJiBpc2F0dHkoMSkpIHsKKwkJY3R4LT5pbnRlcmFjdGl2ZSA9IDE7CisJfSBlbHNlIHsKKwkJY3R4LT5zdGFydF9tZXRhWzBdID0gJ1wwMDEnOworCQljdHgtPnN0b3BfbWV0YVswXSA9ICdcMDAyJzsKKwl9CisJbWVtc2V0KGJhciwgJz0nLCBzaXplb2YoYmFyKS0xKTsKKwltZW1zZXQoc3BhY2VzLCAnICcsIHNpemVvZihzcGFjZXMpLTEpOworCWFkZF9lcnJvcl90YWJsZSgmZXRfZXh0Ml9lcnJvcl90YWJsZSk7CisJYWRkX2Vycm9yX3RhYmxlKCZldF9wcm9mX2Vycm9yX3RhYmxlKTsKKwlibGtpZF9nZXRfY2FjaGUoJmN0eC0+YmxraWQsIE5VTEwpOworCisJaWYgKGFyZ2MgJiYgKmFyZ3YpCisJCWN0eC0+cHJvZ3JhbV9uYW1lID0gKmFyZ3Y7CisJZWxzZQorCQljdHgtPnByb2dyYW1fbmFtZSA9ICJlMmZzY2siOworCisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAicGFueXJjQzpCOmRFOmZ2dEZWTTpiOkk6ajpQOmw6TDpOOlNzRGsiKSkgIT0gRU9GKQorCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnQyc6CisJCQljdHgtPnByb2dyZXNzID0gZTJmc2NrX3VwZGF0ZV9wcm9ncmVzczsKKwkJCXJlcyA9IHNzY2FuZihvcHRhcmcsICIlZCIsICZjdHgtPnByb2dyZXNzX2ZkKTsKKwkJCWlmIChyZXMgIT0gMSkKKwkJCQlnb3RvIHNzY2FuZl9lcnI7CisKKwkJCWlmIChjdHgtPnByb2dyZXNzX2ZkIDwgMCkgeworCQkJCWN0eC0+cHJvZ3Jlc3MgPSAwOworCQkJCWN0eC0+cHJvZ3Jlc3NfZmQgPSBjdHgtPnByb2dyZXNzX2ZkICogLTE7CisJCQl9CisJCQlpZiAoIWN0eC0+cHJvZ3Jlc3NfZmQpCisJCQkJYnJlYWs7CisJCQkvKiBWYWxpZGF0ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIGF2b2lkIGRpc2FzdGVycyAqLworCQkJZmQgPSBkdXAoY3R4LT5wcm9ncmVzc19mZCk7CisJCQlpZiAoZmQgPCAwKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJXygiRXJyb3IgdmFsaWRhdGluZyBmaWxlIGRlc2NyaXB0b3IgJWQ6ICVzXG4iKSwKKwkJCQkJY3R4LT5wcm9ncmVzc19mZCwKKwkJCQkJZXJyb3JfbWVzc2FnZShlcnJubykpOworCQkJCWZhdGFsX2Vycm9yKGN0eCwKKwkJCV8oIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiKSk7CisJCQl9IGVsc2UKKwkJCQljbG9zZShmZCk7CisJCQlicmVhazsKKwkJY2FzZSAnRCc6CisJCQljdHgtPm9wdGlvbnMgfD0gRTJGX09QVF9DT01QUkVTU19ESVJTOworCQkJYnJlYWs7CisJCWNhc2UgJ0UnOgorCQkJZXh0ZW5kZWRfb3B0cyA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdwJzoKKwkJY2FzZSAnYSc6CisJCQlpZiAoY3R4LT5vcHRpb25zICYgKEUyRl9PUFRfWUVTfEUyRl9PUFRfTk8pKSB7CisJCQljb25mbGljdF9vcHQ6CisJCQkJZmF0YWxfZXJyb3IoY3R4LAorCV8oIk9ubHkgb25lIG9mIHRoZSBvcHRpb25zIC1wLy1hLCAtbiBvciAteSBtYXkgYmUgc3BlY2lmaWVkLiIpKTsKKwkJCX0KKwkJCWN0eC0+b3B0aW9ucyB8PSBFMkZfT1BUX1BSRUVOOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJaWYgKGN0eC0+b3B0aW9ucyAmIChFMkZfT1BUX1lFU3xFMkZfT1BUX1BSRUVOKSkKKwkJCQlnb3RvIGNvbmZsaWN0X29wdDsKKwkJCWN0eC0+b3B0aW9ucyB8PSBFMkZfT1BUX05POworCQkJYnJlYWs7CisJCWNhc2UgJ3knOgorCQkJaWYgKGN0eC0+b3B0aW9ucyAmIChFMkZfT1BUX1BSRUVOfEUyRl9PUFRfTk8pKQorCQkJCWdvdG8gY29uZmxpY3Rfb3B0OworCQkJY3R4LT5vcHRpb25zIHw9IEUyRl9PUFRfWUVTOworCQkJYnJlYWs7CisJCWNhc2UgJ3QnOgorI2lmZGVmIFJFU09VUkNFX1RSQUNLCisJCQlpZiAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9USU1FKQorCQkJCWN0eC0+b3B0aW9ucyB8PSBFMkZfT1BUX1RJTUUyOworCQkJZWxzZQorCQkJCWN0eC0+b3B0aW9ucyB8PSBFMkZfT1BUX1RJTUU7CisjZWxzZQorCQkJZnByaW50ZihzdGRlcnIsIF8oIlRoZSAtdCBvcHRpb24gaXMgbm90ICIKKwkJCQkic3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iKSk7CisjZW5kaWYKKwkJCWJyZWFrOworCQljYXNlICdjJzoKKwkJCWlmIChjZmxhZysrKQorCQkJCWN0eC0+b3B0aW9ucyB8PSBFMkZfT1BUX1dSSVRFQ0hFQ0s7CisJCQljdHgtPm9wdGlvbnMgfD0gRTJGX09QVF9DSEVDS0JMT0NLUzsKKwkJCWJyZWFrOworCQljYXNlICdyJzoKKwkJCS8qIFdoYXQgd2UgZG8gYnkgZGVmYXVsdCwgYW55d2F5ISAqLworCQkJYnJlYWs7CisJCWNhc2UgJ2InOgorCQkJcmVzID0gc3NjYW5mKG9wdGFyZywgIiVsbHUiLCAmY3R4LT51c2Vfc3VwZXJibG9jayk7CisJCQlpZiAocmVzICE9IDEpCisJCQkJZ290byBzc2NhbmZfZXJyOworCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19TQl9TUEVDSUZJRUQ7CisJCQlicmVhazsKKwkJY2FzZSAnQic6CisJCQljdHgtPmJsb2Nrc2l6ZSA9IGF0b2kob3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdJJzoKKwkJCXJlcyA9IHNzY2FuZihvcHRhcmcsICIlZCIsICZjdHgtPmlub2RlX2J1ZmZlcl9ibG9ja3MpOworCQkJaWYgKHJlcyAhPSAxKQorCQkJCWdvdG8gc3NjYW5mX2VycjsKKwkJCWJyZWFrOworCQljYXNlICdqJzoKKwkJCWN0eC0+am91cm5hbF9uYW1lID0gYmxraWRfZ2V0X2Rldm5hbWUoY3R4LT5ibGtpZCwKKwkJCQkJCQkgICAgICBvcHRhcmcsIE5VTEwpOworCQkJaWYgKCFjdHgtPmpvdXJuYWxfbmFtZSkgeworCQkJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIDAsCisJCQkJCV8oIlVuYWJsZSB0byByZXNvbHZlICclcyciKSwKKwkJCQkJb3B0YXJnKTsKKwkJCQlmYXRhbF9lcnJvcihjdHgsIDApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ1AnOgorCQkJcmVzID0gc3NjYW5mKG9wdGFyZywgIiVkIiwgJmN0eC0+cHJvY2Vzc19pbm9kZV9zaXplKTsKKwkJCWlmIChyZXMgIT0gMSkKKwkJCQlnb3RvIHNzY2FuZl9lcnI7CisJCQlicmVhazsKKwkJY2FzZSAnTCc6CisJCQlyZXBsYWNlX2JhZF9ibG9ja3MrKzsKKwkJY2FzZSAnbCc6CisJCQlpZiAoYmFkX2Jsb2Nrc19maWxlKQorCQkJCWZyZWUoYmFkX2Jsb2Nrc19maWxlKTsKKwkJCWJhZF9ibG9ja3NfZmlsZSA9IHN0cmluZ19jb3B5KGN0eCwgb3B0YXJnLCAwKTsKKwkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCWN0eC0+b3B0aW9ucyB8PSBFMkZfT1BUX0RFQlVHOworCQkJYnJlYWs7CisJCWNhc2UgJ2YnOgorCQkJY3R4LT5vcHRpb25zIHw9IEUyRl9PUFRfRk9SQ0U7CisJCQlicmVhazsKKwkJY2FzZSAnRic6CisJCQlmbHVzaCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAndic6CisJCQl2ZXJib3NlID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCXNob3dfdmVyc2lvbl9vbmx5ID0gMTsKKwkJCWJyZWFrOworI2lmZGVmIE1UUkFDRQorCQljYXNlICdNJzoKKwkJCW1hbGx3YXRjaCA9ICh2b2lkICopIHN0cnRvbChvcHRhcmcsIE5VTEwsIDApOworCQkJYnJlYWs7CisjZW5kaWYKKwkJY2FzZSAnTic6CisJCQljdHgtPmRldmljZV9uYW1lID0gc3RyaW5nX2NvcHkoY3R4LCBvcHRhcmcsIDApOworCQkJYnJlYWs7CisJCWNhc2UgJ2snOgorCQkJa2VlcF9iYWRfYmxvY2tzKys7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKGN0eCk7CisJCX0KKwlpZiAoc2hvd192ZXJzaW9uX29ubHkpCisJCXJldHVybiAwOworCWlmIChvcHRpbmQgIT0gYXJnYyAtIDEpCisJCXVzYWdlKGN0eCk7CisJaWYgKChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX05PKSAmJgorCSAgICAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9DT01QUkVTU19ESVJTKSkgeworCQljb21fZXJyKGN0eC0+cHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJXygiVGhlIC1uIGFuZCAtRCBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIikpOworCQlmYXRhbF9lcnJvcihjdHgsIDApOworCX0KKwlpZiAoKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfTk8pICYmIGNmbGFnKSB7CisJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQlfKCJUaGUgLW4gYW5kIC1jIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iKSk7CisJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJfQorCWlmICgoY3R4LT5vcHRpb25zICYgRTJGX09QVF9OTykgJiYgYmFkX2Jsb2Nrc19maWxlKSB7CisJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQlfKCJUaGUgLW4gYW5kIC1sLy1MIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iKSk7CisJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJfQorCWlmIChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX05PKQorCQljdHgtPm9wdGlvbnMgfD0gRTJGX09QVF9SRUFET05MWTsKKworCWN0eC0+aW9fb3B0aW9ucyA9IHN0cmNocihhcmd2W29wdGluZF0sICc/Jyk7CisJaWYgKGN0eC0+aW9fb3B0aW9ucykKKwkJKmN0eC0+aW9fb3B0aW9ucysrID0gMDsKKwljdHgtPmZpbGVzeXN0ZW1fbmFtZSA9IGJsa2lkX2dldF9kZXZuYW1lKGN0eC0+YmxraWQsIGFyZ3Zbb3B0aW5kXSwgMCk7CisJaWYgKCFjdHgtPmZpbGVzeXN0ZW1fbmFtZSkgeworCQljb21fZXJyKGN0eC0+cHJvZ3JhbV9uYW1lLCAwLCBfKCJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIiksCisJCQlhcmd2W29wdGluZF0pOworCQlmYXRhbF9lcnJvcihjdHgsIDApOworCX0KKwlpZiAoZXh0ZW5kZWRfb3B0cykKKwkJcGFyc2VfZXh0ZW5kZWRfb3B0cyhjdHgsIGV4dGVuZGVkX29wdHMpOworCisJaWYgKChjcCA9IGdldGVudigiRTJGU0NLX0NPTkZJRyIpKSAhPSBOVUxMKQorCQljb25maWdfZm5bMF0gPSBjcDsKKwlwcm9maWxlX3NldF9zeW50YXhfZXJyX2NiKHN5bnRheF9lcnJfcmVwb3J0KTsKKwlwcm9maWxlX2luaXQoY29uZmlnX2ZuLCAmY3R4LT5wcm9maWxlKTsKKworCXByb2ZpbGVfZ2V0X2Jvb2xlYW4oY3R4LT5wcm9maWxlLCAib3B0aW9ucyIsICJyZXBvcnRfdGltZSIsIDAsIDAsCisJCQkgICAgJmMpOworCWlmIChjKQorCQljdHgtPm9wdGlvbnMgfD0gRTJGX09QVF9USU1FIHwgRTJGX09QVF9USU1FMjsKKwlwcm9maWxlX2dldF9ib29sZWFuKGN0eC0+cHJvZmlsZSwgIm9wdGlvbnMiLCAicmVwb3J0X3ZlcmJvc2UiLCAwLCAwLAorCQkJICAgICZjKTsKKwlpZiAoYykKKwkJdmVyYm9zZSA9IDE7CisKKwkvKiBUdXJuIG9mZiBkaXNjYXJkIGluIHJlYWQtb25seSBtb2RlICovCisJaWYgKChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX05PKSAmJgorCSAgICAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9ESVNDQVJEKSkKKwkJY3R4LT5vcHRpb25zICY9IH5FMkZfT1BUX0RJU0NBUkQ7CisKKwlpZiAoZmx1c2gpIHsKKwkJZmQgPSBvcGVuKGN0eC0+ZmlsZXN5c3RlbV9uYW1lLCBPX1JET05MWSwgMCk7CisJCWlmIChmZCA8IDApIHsKKwkJCWNvbV9lcnIoIm9wZW4iLCBlcnJubywKKwkJCQlfKCJ3aGlsZSBvcGVuaW5nICVzIGZvciBmbHVzaGluZyIpLAorCQkJCWN0eC0+ZmlsZXN5c3RlbV9uYW1lKTsKKwkJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJCX0KKwkJaWYgKChyZXR2YWwgPSBleHQyZnNfc3luY19kZXZpY2UoZmQsIDEpKSkgeworCQkJY29tX2VycigiZXh0MmZzX3N5bmNfZGV2aWNlIiwgcmV0dmFsLAorCQkJCV8oIndoaWxlIHRyeWluZyB0byBmbHVzaCAlcyIpLAorCQkJCWN0eC0+ZmlsZXN5c3RlbV9uYW1lKTsKKwkJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJCX0KKwkJY2xvc2UoZmQpOworCX0KKwlpZiAoY2ZsYWcgJiYgYmFkX2Jsb2Nrc19maWxlKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBfKCJUaGUgLWMgYW5kIHRoZSAtbC8tTCBvcHRpb25zIG1heSBub3QgIgorCQkJCQkiYmUgYm90aCB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuXG4iKSk7CisJCWV4aXQoRlNDS19VU0FHRSk7CisJfQorI2lmZGVmIEhBVkVfU0lHTkFMX0gKKwkvKgorCSAqIFNldCB1cCBzaWduYWwgYWN0aW9uCisJICovCisJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHN0cnVjdCBzaWdhY3Rpb24pKTsKKwlzYS5zYV9oYW5kbGVyID0gc2lnbmFsX2NhbmNlbDsKKwlzaWdhY3Rpb24oU0lHSU5ULCAmc2EsIDApOworCXNpZ2FjdGlvbihTSUdURVJNLCAmc2EsIDApOworI2lmZGVmIFNBX1JFU1RBUlQKKwlzYS5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7CisjZW5kaWYKKwlzYS5zYV9oYW5kbGVyID0gc2lnbmFsX3Byb2dyZXNzX29uOworCXNpZ2FjdGlvbihTSUdVU1IxLCAmc2EsIDApOworCXNhLnNhX2hhbmRsZXIgPSBzaWduYWxfcHJvZ3Jlc3Nfb2ZmOworCXNpZ2FjdGlvbihTSUdVU1IyLCAmc2EsIDApOworI2VuZGlmCisKKwkvKiBVcGRhdGUgb3VyIFBBVEggdG8gaW5jbHVkZSAvc2JpbiBpZiB3ZSBuZWVkIHRvIHJ1biBiYWRibG9ja3MgICovCisJaWYgKGNmbGFnKSB7CisJCWNoYXIgKm9sZHBhdGggPSBnZXRlbnYoIlBBVEgiKTsKKwkJY2hhciAqbmV3cGF0aDsKKwkJaW50IGxlbiA9IHNpemVvZihQQVRIX1NFVCkgKyAxOworCisJCWlmIChvbGRwYXRoKQorCQkJbGVuICs9IHN0cmxlbihvbGRwYXRoKTsKKworCQluZXdwYXRoID0gbWFsbG9jKGxlbik7CisJCWlmICghbmV3cGF0aCkKKwkJCWZhdGFsX2Vycm9yKGN0eCwgIkNvdWxkbid0IG1hbGxvYygpIG5ld3BhdGgiKTsKKwkJc3RyY3B5KG5ld3BhdGgsIFBBVEhfU0VUKTsKKworCQlpZiAob2xkcGF0aCkgeworCQkJc3RyY2F0KG5ld3BhdGgsICI6Iik7CisJCQlzdHJjYXQobmV3cGF0aCwgb2xkcGF0aCk7CisJCX0KKwkJcHV0ZW52KG5ld3BhdGgpOworCX0KKyNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCisJamJkX2RlYnVnID0gZ2V0ZW52KCJFMkZTQ0tfSkJEX0RFQlVHIik7CisJaWYgKGpiZF9kZWJ1ZykgeworCQlyZXMgPSBzc2NhbmYoamJkX2RlYnVnLCAiJWQiLCAmam91cm5hbF9lbmFibGVfZGVidWcpOworCQlpZiAocmVzICE9IDEpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJICAgICAgICBfKCJFMkZTQ0tfSkJEX0RFQlVHIFwiJXNcIiBub3QgYW4gaW50ZWdlclxuXG4iKSwKKwkJCSAgICAgICAgamJkX2RlYnVnKTsKKwkJCWV4aXQgKDEpOworCQl9CisJfQorI2VuZGlmCisJcmV0dXJuIDA7CisKK3NzY2FuZl9lcnI6CisJZnByaW50ZihzdGRlcnIsIF8oIlxuSW52YWxpZCBub24tbnVtZXJpYyBhcmd1bWVudCB0byAtJWMgKFwiJXNcIilcblxuIiksCisJICAgICAgICBjLCBvcHRhcmcpOworCWV4aXQgKDEpOworfQorCitzdGF0aWMgZXJyY29kZV90IHRyeV9vcGVuX2ZzKGUyZnNja190IGN0eCwgaW50IGZsYWdzLCBpb19tYW5hZ2VyIGlvX3B0ciwKKwkJCSAgICAgZXh0Ml9maWxzeXMgKnJldF9mcykKK3sKKwllcnJjb2RlX3QgcmV0dmFsOworCisJKnJldF9mcyA9IE5VTEw7CisJaWYgKGN0eC0+c3VwZXJibG9jayAmJiBjdHgtPmJsb2Nrc2l6ZSkgeworCQlyZXR2YWwgPSBleHQyZnNfb3BlbjIoY3R4LT5maWxlc3lzdGVtX25hbWUsIGN0eC0+aW9fb3B0aW9ucywKKwkJCQkgICAgICBmbGFncywgY3R4LT5zdXBlcmJsb2NrLCBjdHgtPmJsb2Nrc2l6ZSwKKwkJCQkgICAgICBpb19wdHIsIHJldF9mcyk7CisJfSBlbHNlIGlmIChjdHgtPnN1cGVyYmxvY2spIHsKKwkJaW50IGJsb2Nrc2l6ZTsKKwkJZm9yIChibG9ja3NpemUgPSBFWFQyX01JTl9CTE9DS19TSVpFOworCQkgICAgIGJsb2Nrc2l6ZSA8PSBFWFQyX01BWF9CTE9DS19TSVpFOyBibG9ja3NpemUgKj0gMikgeworCQkJaWYgKCpyZXRfZnMpIHsKKwkJCQlleHQyZnNfZnJlZSgqcmV0X2ZzKTsKKwkJCQkqcmV0X2ZzID0gTlVMTDsKKwkJCX0KKwkJCXJldHZhbCA9IGV4dDJmc19vcGVuMihjdHgtPmZpbGVzeXN0ZW1fbmFtZSwKKwkJCQkJICAgICAgY3R4LT5pb19vcHRpb25zLCBmbGFncywKKwkJCQkJICAgICAgY3R4LT5zdXBlcmJsb2NrLCBibG9ja3NpemUsCisJCQkJCSAgICAgIGlvX3B0ciwgcmV0X2ZzKTsKKwkJCWlmICghcmV0dmFsKQorCQkJCWJyZWFrOworCQl9CisJfSBlbHNlCisJCXJldHZhbCA9IGV4dDJmc19vcGVuMihjdHgtPmZpbGVzeXN0ZW1fbmFtZSwgY3R4LT5pb19vcHRpb25zLAorCQkJCSAgICAgIGZsYWdzLCAwLCAwLCBpb19wdHIsIHJldF9mcyk7CisKKwlpZiAocmV0dmFsID09IDApIHsKKwkJKCpyZXRfZnMpLT5wcml2X2RhdGEgPSBjdHg7CisJCWUyZnNja19zZXRfYml0bWFwX3R5cGUoKnJldF9mcywgRVhUMkZTX0JNQVA2NF9SQlRSRUUsCisJCQkJICAgICAgICJkZWZhdWx0IiwgTlVMTCk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpteV92ZXJfc3RyaW5nID0gRTJGU1BST0dTX1ZFUlNJT047CitzdGF0aWMgY29uc3QgY2hhciAqbXlfdmVyX2RhdGUgPSBFMkZTUFJPR1NfREFURTsKKworc3RhdGljIGVycmNvZGVfdCBlMmZzY2tfY2hlY2tfbW1wKGV4dDJfZmlsc3lzIGZzLCBlMmZzY2tfdCBjdHgpCit7CisJc3RydWN0IG1tcF9zdHJ1Y3QgKm1tcF9zOworCXVuc2lnbmVkIGludCBtbXBfY2hlY2tfaW50ZXJ2YWw7CisJZXJyY29kZV90IHJldHZhbCA9IDA7CisJc3RydWN0IHByb2JsZW1fY29udGV4dCBwY3R4OworCXVuc2lnbmVkIGludCB3YWl0X3RpbWUgPSAwOworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlpZiAoZnMtPm1tcF9idWYgPT0gTlVMTCkgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmZnMtPm1tcF9idWYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjaGVja19lcnJvcjsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfbW1wX3JlYWQoZnMsIGZzLT5zdXBlci0+c19tbXBfYmxvY2ssIGZzLT5tbXBfYnVmKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNoZWNrX2Vycm9yOworCisJbW1wX3MgPSBmcy0+bW1wX2J1ZjsKKworCW1tcF9jaGVja19pbnRlcnZhbCA9IGZzLT5zdXBlci0+c19tbXBfdXBkYXRlX2ludGVydmFsOworCWlmIChtbXBfY2hlY2tfaW50ZXJ2YWwgPCBFWFQ0X01NUF9NSU5fQ0hFQ0tfSU5URVJWQUwpCisJCW1tcF9jaGVja19pbnRlcnZhbCA9IEVYVDRfTU1QX01JTl9DSEVDS19JTlRFUlZBTDsKKworCS8qCisJICogSWYgY2hlY2tfaW50ZXJ2YWwgaW4gTU1QIGJsb2NrIGlzIGxhcmdlciwgdXNlIHRoYXQgaW5zdGVhZCBvZgorCSAqIGNoZWNrX2ludGVydmFsIGZyb20gdGhlIHN1cGVyYmxvY2suCisJICovCisJaWYgKG1tcF9zLT5tbXBfY2hlY2tfaW50ZXJ2YWwgPiBtbXBfY2hlY2tfaW50ZXJ2YWwpCisJCW1tcF9jaGVja19pbnRlcnZhbCA9IG1tcF9zLT5tbXBfY2hlY2tfaW50ZXJ2YWw7CisKKwl3YWl0X3RpbWUgPSBtbXBfY2hlY2tfaW50ZXJ2YWwgKiAyICsgMTsKKworCWlmIChtbXBfcy0+bW1wX3NlcSA9PSBFWFQ0X01NUF9TRVFfQ0xFQU4pCisJCXJldHZhbCA9IDA7CisJZWxzZSBpZiAobW1wX3MtPm1tcF9zZXEgPT0gRVhUNF9NTVBfU0VRX0ZTQ0spCisJCXJldHZhbCA9IEVYVDJfRVRfTU1QX0ZTQ0tfT047CisJZWxzZSBpZiAobW1wX3MtPm1tcF9zZXEgPiBFWFQ0X01NUF9TRVFfTUFYKQorCQlyZXR2YWwgPSBFWFQyX0VUX01NUF9VTktOT1dOX1NFUTsKKworCWlmIChyZXR2YWwpCisJCWdvdG8gY2hlY2tfZXJyb3I7CisKKwkvKiBQcmludCB3YXJuaW5nIGlmIGUyZmNrIHdpbGwgd2FpdCBmb3IgbW9yZSB0aGFuIDIwIHNlY3MuICovCisJaWYgKHZlcmJvc2UgfHwgd2FpdF90aW1lID4gRVhUNF9NTVBfTUlOX0NIRUNLX0lOVEVSVkFMICogNCkgeworCQlsb2dfb3V0KGN0eCwgXygiTU1QIGludGVydmFsIGlzICV1IHNlY29uZHMgYW5kIHRvdGFsIHdhaXQgIgorCQkJICAgICAgICJ0aW1lIGlzICV1IHNlY29uZHMuIFBsZWFzZSB3YWl0Li4uXG4iKSwKKwkJCW1tcF9jaGVja19pbnRlcnZhbCwgd2FpdF90aW1lICogMik7CisJfQorCisJcmV0dXJuIDA7CisKK2NoZWNrX2Vycm9yOgorCisJaWYgKHJldHZhbCA9PSBFWFQyX0VUX01NUF9CQURfQkxPQ0spIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9NTVBfSU5WQUxJRF9CTEssICZwY3R4KSkgeworCQkJZnMtPnN1cGVyLT5zX21tcF9ibG9jayA9IDA7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJfSBlbHNlIGlmIChyZXR2YWwgPT0gRVhUMl9FVF9NTVBfRkFJTEVEKSB7CisJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIGNoZWNraW5nIE1NUCBibG9jayIpKTsKKwkJZHVtcF9tbXBfbXNnKGZzLT5tbXBfYnVmLCBOVUxMKTsKKwl9IGVsc2UgaWYgKHJldHZhbCA9PSBFWFQyX0VUX01NUF9GU0NLX09OIHx8CisJCSAgIHJldHZhbCA9PSBFWFQyX0VUX01NUF9VTktOT1dOX1NFUSkgeworCQljb21fZXJyKGN0eC0+cHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSBjaGVja2luZyBNTVAgYmxvY2siKSk7CisJCWR1bXBfbW1wX21zZyhmcy0+bW1wX2J1ZiwKKwkJCSAgICAgXygiSWYgeW91IGFyZSBzdXJlIHRoZSBmaWxlc3lzdGVtIGlzIG5vdCAiCisJCQkgICAgICAgImluIHVzZSBvbiBhbnkgbm9kZSwgcnVuOlxuIgorCQkJICAgICAgICIndHVuZTJmcyAtZiAtRSBjbGVhcl9tbXAge2RldmljZX0nXG4iKSk7CisJfSBlbHNlIGlmIChyZXR2YWwgPT0gRVhUMl9FVF9NTVBfTUFHSUNfSU5WQUxJRCkgeworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8wX01NUF9JTlZBTElEX01BR0lDLCAmcGN0eCkpIHsKKwkJCWV4dDJmc19tbXBfY2xlYXIoZnMpOworCQkJcmV0dmFsID0gMDsKKwkJfQorCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwllcnJjb2RlX3QJcmV0dmFsID0gMCwgcmV0dmFsMiA9IDAsIG9yaWdfcmV0dmFsID0gMDsKKwlpbnQJCWV4aXRfdmFsdWUgPSBGU0NLX09LOworCWV4dDJfZmlsc3lzCWZzID0gMDsKKwlpb19tYW5hZ2VyCWlvX3B0cjsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2I7CisJY29uc3QgY2hhcgkqbGliX3Zlcl9kYXRlOworCWludAkJbXlfdmVyLCBsaWJfdmVyOworCWUyZnNja190CWN0eDsKKwlibGs2NF90CQlvcmlnX3N1cGVyYmxvY2s7CisJc3RydWN0IHByb2JsZW1fY29udGV4dCBwY3R4OworCWludCBmbGFncywgcnVuX3Jlc3VsdCwgd2FzX2NoYW5nZWQ7CisJaW50IGpvdXJuYWxfc2l6ZTsKKwlpbnQgc3lzdmFsLCBzeXNfcGFnZV9zaXplID0gNDA5NjsKKwlpbnQgb2xkX2JpdG1hcHM7CisJX191MzIgZmVhdHVyZXNbM107CisJY2hhciAqY3A7CisJaW50IHF0eXBlID0gLTk5OyAgLyogcXVvdGEgdHlwZSAqLworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlzaWdjYXRjaGVyX3NldHVwKCk7CisjaWZkZWYgTVRSQUNFCisJbXRyYWNlKCk7CisjZW5kaWYKKyNpZmRlZiBNQ0hFQ0sKKwltY2hlY2soMCk7CisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfTkxTCisJc2V0bG9jYWxlKExDX01FU1NBR0VTLCAiIik7CisJc2V0bG9jYWxlKExDX0NUWVBFLCAiIik7CisJYmluZHRleHRkb21haW4oTkxTX0NBVF9OQU1FLCBMT0NBTEVESVIpOworCXRleHRkb21haW4oTkxTX0NBVF9OQU1FKTsKKwlzZXRfY29tX2Vycl9nZXR0ZXh0KGdldHRleHQpOworI2VuZGlmCisJbXlfdmVyID0gZXh0MmZzX3BhcnNlX3ZlcnNpb25fc3RyaW5nKG15X3Zlcl9zdHJpbmcpOworCWxpYl92ZXIgPSBleHQyZnNfZ2V0X2xpYnJhcnlfdmVyc2lvbigwLCAmbGliX3Zlcl9kYXRlKTsKKwlpZiAobXlfdmVyID4gbGliX3ZlcikgeworCQlmcHJpbnRmKCBzdGRlcnIsICIlcyIsCisJCQkgXygiRXJyb3I6IGV4dDJmcyBsaWJyYXJ5IHZlcnNpb24gb3V0IG9mIGRhdGUhXG4iKSk7CisJCXNob3dfdmVyc2lvbl9vbmx5Kys7CisJfQorCisJcmV0dmFsID0gUFJTKGFyZ2MsIGFyZ3YsICZjdHgpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZTJmc2NrIiwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgdHJ5aW5nIHRvIGluaXRpYWxpemUgcHJvZ3JhbSIpKTsKKwkJZXhpdChGU0NLX0VSUk9SKTsKKwl9CisJcmVzZXJ2ZV9zdGRpb19mZHMoKTsKKworCXNldF91cF9sb2dnaW5nKGN0eCk7CisJaWYgKGN0eC0+bG9nZikgeworCQlpbnQgaTsKKwkJZnB1dHMoIkUyZnNjayBydW46ICIsIGN0eC0+bG9nZik7CisJCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJCWlmIChpKQorCQkJCWZwdXRjKCcgJywgY3R4LT5sb2dmKTsKKwkJCWZwdXRzKGFyZ3ZbaV0sIGN0eC0+bG9nZik7CisJCX0KKwkJZnB1dGMoJ1xuJywgY3R4LT5sb2dmKTsKKwl9CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZjdHgtPmdsb2JhbF9ydHJhY2ssIE5VTEwpOworCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pIHx8IHNob3dfdmVyc2lvbl9vbmx5KQorCQlsb2dfZXJyKGN0eCwgImUyZnNjayAlcyAoJXMpXG4iLCBteV92ZXJfc3RyaW5nLAorCQkJIG15X3Zlcl9kYXRlKTsKKworCWlmIChzaG93X3ZlcnNpb25fb25seSkgeworCQlsb2dfZXJyKGN0eCwgXygiXHRVc2luZyAlcywgJXNcbiIpLAorCQkJZXJyb3JfbWVzc2FnZShFWFQyX0VUX0JBU0UpLCBsaWJfdmVyX2RhdGUpOworCQlleGl0KEZTQ0tfT0spOworCX0KKworCWNoZWNrX21vdW50KGN0eCk7CisKKwlpZiAoIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1BSRUVOKSAmJgorCSAgICAhKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfTk8pICYmCisJICAgICEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9ZRVMpKSB7CisJCWlmICghY3R4LT5pbnRlcmFjdGl2ZSkKKwkJCWZhdGFsX2Vycm9yKGN0eCwKKwkJCQkgICAgXygibmVlZCB0ZXJtaW5hbCBmb3IgaW50ZXJhY3RpdmUgcmVwYWlycyIpKTsKKwl9CisJY3R4LT5zdXBlcmJsb2NrID0gY3R4LT51c2Vfc3VwZXJibG9jazsKKworCWZsYWdzID0gRVhUMl9GTEFHX1NLSVBfTU1QOworcmVzdGFydDoKKyNpZmRlZiBDT05GSUdfVEVTVElPX0RFQlVHCisJaWYgKGdldGVudigiVEVTVF9JT19GTEFHUyIpIHx8IGdldGVudigiVEVTVF9JT19CTE9DSyIpKSB7CisJCWlvX3B0ciA9IHRlc3RfaW9fbWFuYWdlcjsKKwkJdGVzdF9pb19iYWNraW5nX21hbmFnZXIgPSB1bml4X2lvX21hbmFnZXI7CisJfSBlbHNlCisjZW5kaWYKKwkJaW9fcHRyID0gdW5peF9pb19tYW5hZ2VyOworCWZsYWdzIHw9IEVYVDJfRkxBR19OT0ZSRUVfT05fRVJST1I7CisJcHJvZmlsZV9nZXRfYm9vbGVhbihjdHgtPnByb2ZpbGUsICJvcHRpb25zIiwgIm9sZF9iaXRtYXBzIiwgMCwgMCwKKwkJCSAgICAmb2xkX2JpdG1hcHMpOworCWlmICghb2xkX2JpdG1hcHMpCisJCWZsYWdzIHw9IEVYVDJfRkxBR182NEJJVFM7CisJaWYgKChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1JFQURPTkxZKSA9PSAwKSB7CisJCWZsYWdzIHw9IEVYVDJfRkxBR19SVzsKKwkJaWYgKCEoY3R4LT5tb3VudF9mbGFncyAmIEVYVDJfTUZfSVNST09UICYmCisJCSAgICAgIGN0eC0+bW91bnRfZmxhZ3MgJiBFWFQyX01GX1JFQURPTkxZKSkKKwkJCWZsYWdzIHw9IEVYVDJfRkxBR19FWENMVVNJVkU7CisJCWlmICgoY3R4LT5tb3VudF9mbGFncyAmIEVYVDJfTUZfUkVBRE9OTFkpICYmCisJCSAgICAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9GT1JDRSkpCisJCQlmbGFncyAmPSB+RVhUMl9GTEFHX0VYQ0xVU0lWRTsKKwl9CisKKwljdHgtPm9wZW5mc19mbGFncyA9IGZsYWdzOworCXJldHZhbCA9IHRyeV9vcGVuX2ZzKGN0eCwgZmxhZ3MsIGlvX3B0ciwgJmZzKTsKKworCWlmICghY3R4LT5zdXBlcmJsb2NrICYmICEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9QUkVFTikgJiYKKwkgICAgIShjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0JfU1BFQ0lGSUVEKSAmJgorCSAgICAoKHJldHZhbCA9PSBFWFQyX0VUX0JBRF9NQUdJQykgfHwKKwkgICAgIChyZXR2YWwgPT0gRVhUMl9FVF9DT1JSVVBUX1NVUEVSQkxPQ0spIHx8CisJICAgICAoKHJldHZhbCA9PSAwKSAmJiAocmV0dmFsMiA9IGV4dDJmc19jaGVja19kZXNjKGZzKSkpKSkgeworCQlpZiAocmV0dmFsKSB7CisJCQlwY3R4LmVycmNvZGUgPSByZXR2YWw7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzBfT1BFTl9GQUlMRUQsICZwY3R4KTsKKwkJfQorCQlpZiAocmV0dmFsMikgeworCQkJcGN0eC5lcnJjb2RlID0gcmV0dmFsMjsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9DSEVDS19ERVNDX0ZBSUxFRCwgJnBjdHgpOworCQl9CisJCXBjdHguZXJyY29kZSA9IDA7CisJCWlmIChyZXR2YWwyID09IEVOT01FTSB8fCByZXR2YWwyID09IEVYVDJfRVRfTk9fTUVNT1JZKSB7CisJCQlyZXR2YWwgPSByZXR2YWwyOworCQkJZ290byBmYWlsdXJlOworCQl9CisJCWlmIChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfTk9GUkVFX09OX0VSUk9SKSB7CisJCQlleHQyZnNfZnJlZShmcyk7CisJCQlmcyA9IE5VTEw7CisJCX0KKwkJaWYgKCFmcyB8fCAoZnMtPmdyb3VwX2Rlc2NfY291bnQgPiAxKSkgeworCQkJbG9nX291dChjdHgsIF8oIiVzOiAlcyB0cnlpbmcgYmFja3VwIGJsb2Nrcy4uLlxuIiksCisJCQkJY3R4LT5wcm9ncmFtX25hbWUsCisJCQkJcmV0dmFsID8gXygiU3VwZXJibG9jayBpbnZhbGlkLCIpIDoKKwkJCQlfKCJHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiIpKTsKKwkJCW9yaWdfc3VwZXJibG9jayA9IGN0eC0+c3VwZXJibG9jazsKKwkJCWdldF9iYWNrdXBfc2IoY3R4LCBmcywgY3R4LT5maWxlc3lzdGVtX25hbWUsIGlvX3B0cik7CisJCQlpZiAoZnMpCisJCQkJZXh0MmZzX2Nsb3NlX2ZyZWUoJmZzKTsKKwkJCW9yaWdfcmV0dmFsID0gcmV0dmFsOworCQkJcmV0dmFsID0gdHJ5X29wZW5fZnMoY3R4LCBmbGFncywgaW9fcHRyLCAmZnMpOworCQkJaWYgKChvcmlnX3JldHZhbCA9PSAwKSAmJiByZXR2YWwgIT0gMCkgeworCQkJCWlmIChmcykKKwkJCQkJZXh0MmZzX2Nsb3NlX2ZyZWUoJmZzKTsKKwkJCQlsb2dfb3V0KGN0eCwgXygiJXM6ICVzIHdoaWxlIHVzaW5nIHRoZSAiCisJCQkJCSAgICAgICAiYmFja3VwIGJsb2NrcyIpLAorCQkJCQljdHgtPnByb2dyYW1fbmFtZSwKKwkJCQkJZXJyb3JfbWVzc2FnZShyZXR2YWwpKTsKKwkJCQlsb2dfb3V0KGN0eCwgXygiJXM6IGdvaW5nIGJhY2sgdG8gb3JpZ2luYWwgIgorCQkJCQkgICAgICAgInN1cGVyYmxvY2tcbiIpLAorCQkJCQljdHgtPnByb2dyYW1fbmFtZSk7CisJCQkJY3R4LT5zdXBlcmJsb2NrID0gb3JpZ19zdXBlcmJsb2NrOworCQkJCXJldHZhbCA9IHRyeV9vcGVuX2ZzKGN0eCwgZmxhZ3MsIGlvX3B0ciwgJmZzKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoKChyZXR2YWwgPT0gRVhUMl9FVF9VTlNVUFBfRkVBVFVSRSkgfHwKKwkgICAgIChyZXR2YWwgPT0gRVhUMl9FVF9ST19VTlNVUFBfRkVBVFVSRSkpICYmCisJICAgIGZzICYmIGZzLT5zdXBlcikgeworCQlzYiA9IGZzLT5zdXBlcjsKKwkJZmVhdHVyZXNbMF0gPSAoc2ItPnNfZmVhdHVyZV9jb21wYXQgJgorCQkJICAgICAgIH5FWFQyX0xJQl9GRUFUVVJFX0NPTVBBVF9TVVBQKTsKKwkJZmVhdHVyZXNbMV0gPSAoc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCQkgICAgICAgfkVYVDJfTElCX0ZFQVRVUkVfSU5DT01QQVRfU1VQUCk7CisJCWZlYXR1cmVzWzJdID0gKHNiLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYKKwkJCSAgICAgICB+RVhUMl9MSUJfRkVBVFVSRV9ST19DT01QQVRfU1VQUCk7CisJCWlmIChmZWF0dXJlc1swXSB8fCBmZWF0dXJlc1sxXSB8fCBmZWF0dXJlc1syXSkKKwkJCWdvdG8gcHJpbnRfdW5zdXBwX2ZlYXR1cmVzOworCX0KK2ZhaWx1cmU6CisJaWYgKHJldHZhbCkgeworCQlpZiAob3JpZ19yZXR2YWwpCisJCQlyZXR2YWwgPSBvcmlnX3JldHZhbDsKKwkJY29tX2VycihjdHgtPnByb2dyYW1fbmFtZSwgcmV0dmFsLCBfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLAorCQkJY3R4LT5maWxlc3lzdGVtX25hbWUpOworCQlpZiAocmV0dmFsID09IEVYVDJfRVRfUkVWX1RPT19ISUdIKSB7CisJCQlsb2dfb3V0KGN0eCwgIiVzIiwKKwkJCQlfKCJUaGUgZmlsZXN5c3RlbSByZXZpc2lvbiBpcyBhcHBhcmVudGx5ICIKKwkJCQkgICJ0b28gaGlnaCBmb3IgdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKKwkJCQkgICIoT3IgdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jayAiCisJCQkJICAiaXMgY29ycnVwdClcblxuIikpOworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8wX1NCX0NPUlJVUFQsICZwY3R4KTsKKwkJfSBlbHNlIGlmIChyZXR2YWwgPT0gRVhUMl9FVF9TSE9SVF9SRUFEKQorCQkJbG9nX291dChjdHgsICIlcyIsCisJCQkJXygiQ291bGQgdGhpcyBiZSBhIHplcm8tbGVuZ3RoIHBhcnRpdGlvbj9cbiIpKTsKKwkJZWxzZSBpZiAoKHJldHZhbCA9PSBFUEVSTSkgfHwgKHJldHZhbCA9PSBFQUNDRVMpKQorCQkJbG9nX291dChjdHgsIF8oIllvdSBtdXN0IGhhdmUgJXMgYWNjZXNzIHRvIHRoZSAiCisJCQkJICAgICAgICJmaWxlc3lzdGVtIG9yIGJlIHJvb3RcbiIpLAorCQkJICAgICAgIChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1JFQURPTkxZKSA/CisJCQkgICAgICAgInIvbyIgOiAici93Iik7CisJCWVsc2UgaWYgKHJldHZhbCA9PSBFTlhJTykKKwkJCWxvZ19vdXQoY3R4LCAiJXMiLAorCQkJCV8oIlBvc3NpYmx5IG5vbi1leGlzdGVudCBvciBzd2FwIGRldmljZT9cbiIpKTsKKwkJZWxzZSBpZiAocmV0dmFsID09IEVCVVNZKQorCQkJbG9nX291dChjdHgsICIlcyIsIF8oIkZpbGVzeXN0ZW0gbW91bnRlZCBvciBvcGVuZWQgIgorCQkJCQkgImV4Y2x1c2l2ZWx5IGJ5IGFub3RoZXIgcHJvZ3JhbT9cbiIpKTsKKwkJZWxzZSBpZiAocmV0dmFsID09IEVOT0VOVCkKKwkJCWxvZ19vdXQoY3R4LCAiJXMiLAorCQkJCV8oIlBvc3NpYmx5IG5vbi1leGlzdGVudCBkZXZpY2U/XG4iKSk7CisjaWZkZWYgRVJPRlMKKwkJZWxzZSBpZiAocmV0dmFsID09IEVST0ZTKQorCQkJbG9nX291dChjdHgsICIlcyIsIF8oIkRpc2sgd3JpdGUtcHJvdGVjdGVkOyB1c2UgdGhlICIKKwkJCQkJICAgICAiLW4gb3B0aW9uIHRvIGRvIGEgcmVhZC1vbmx5XG4iCisJCQkJCSAgICAgImNoZWNrIG9mIHRoZSBkZXZpY2UuXG4iKSk7CisjZW5kaWYKKwkJZWxzZQorCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8wX1NCX0NPUlJVUFQsICZwY3R4KTsKKwkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwl9CisJLyoKKwkgKiBXZSBvbmx5IHVwZGF0ZSB0aGUgbWFzdGVyIHN1cGVyYmxvY2sgYmVjYXVzZSAoYSkgcGFyYW5vaWE7CisJICogd2UgZG9uJ3Qgd2FudCB0byBjb3JydXB0IHRoZSBiYWNrdXAgc3VwZXJibG9ja3MsIGFuZCAoYikgd2UKKwkgKiBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgbW91bnQgY291bnQgYW5kIGxhc3QgY2hlY2tlZAorCSAqIGZpZWxkcyBpbiB0aGUgYmFja3VwIHN1cGVyYmxvY2sgKHRoZSBrZXJuZWwgZG9lc24ndCB1cGRhdGUKKwkgKiB0aGUgYmFja3VwIHN1cGVyYmxvY2tzIGFueXdheSkuICBXaXRoIG5ld2VyIHZlcnNpb25zIG9mIHRoZQorCSAqIGxpYnJhcnkgdGhpcyBmbGFnIGlzIHNldCBieSBleHQyZnNfb3BlbjIoKSwgYnV0IHdlIHNldCB0aGlzCisJICogaGVyZSBqdXN0IHRvIGJlIHN1cmUuICAoTm8sIHdlIGRvbid0IHN1cHBvcnQgZTJmc2NrIHJ1bm5pbmcKKwkgKiB3aXRoIHNvbWUgb3RoZXIgbGliZXh0MmZzIHRoYW4gdGhlIG9uZSB0aGF0IGl0IHdhcyBzaGlwcGVkCisJICogd2l0aCwgYnV0IGp1c3QgaW4gY2FzZS4uLi4pCisJICovCisJZnMtPmZsYWdzIHw9IEVYVDJfRkxBR19NQVNURVJfU0JfT05MWTsKKworCWlmICghKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19HT1RfREVWU0laRSkpIHsKKwkJX191MzIgYmxvY2tzaXplID0gRVhUMl9CTE9DS19TSVpFKGZzLT5zdXBlcik7CisJCWludCBuZWVkX3Jlc3RhcnQgPSAwOworCisJCXBjdHguZXJyY29kZSA9IGV4dDJmc19nZXRfZGV2aWNlX3NpemUyKGN0eC0+ZmlsZXN5c3RlbV9uYW1lLAorCQkJCQkJICAgICAgIGJsb2Nrc2l6ZSwKKwkJCQkJCSAgICAgICAmY3R4LT5udW1fYmxvY2tzKTsKKwkJLyoKKwkJICogVGhlIGZsb3BweSBkcml2ZXIgcmVmdXNlcyB0byBhbGxvdyBhbnlvbmUgZWxzZSB0bworCQkgKiBvcGVuIHRoZSBkZXZpY2UgaWYgaGFzIGJlZW4gb3BlbmVkIHdpdGggT19FWENMOworCQkgKiB0aGlzIGlzIHVubGlrZSBvdGhlciBibG9jayBkZXZpY2UgZHJpdmVycyBpbiBMaW51eC4KKwkJICogVG8gaGFuZGxlIHRoaXMsIHdlIGNsb3NlIHRoZSBmaWxlc3lzdGVtIGFuZCB0aGVuCisJCSAqIHJlb3BlbiB0aGUgZmlsZXN5c3RlbSBhZnRlciB3ZSBnZXQgdGhlIGRldmljZSBzaXplLgorCQkgKi8KKwkJaWYgKHBjdHguZXJyY29kZSA9PSBFQlVTWSkgeworCQkJZXh0MmZzX2Nsb3NlX2ZyZWUoJmZzKTsKKwkJCW5lZWRfcmVzdGFydCsrOworCQkJcGN0eC5lcnJjb2RlID0KKwkJCQlleHQyZnNfZ2V0X2RldmljZV9zaXplMihjdHgtPmZpbGVzeXN0ZW1fbmFtZSwKKwkJCQkJCQlibG9ja3NpemUsCisJCQkJCQkJJmN0eC0+bnVtX2Jsb2Nrcyk7CisJCX0KKwkJaWYgKHBjdHguZXJyY29kZSA9PSBFWFQyX0VUX1VOSU1QTEVNRU5URUQpCisJCQljdHgtPm51bV9ibG9ja3MgPSAwOworCQllbHNlIGlmIChwY3R4LmVycmNvZGUpIHsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9HRVRTSVpFX0VSUk9SLCAmcGN0eCk7CisJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwkJfQorCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0dPVF9ERVZTSVpFOworCQlpZiAobmVlZF9yZXN0YXJ0KQorCQkJZ290byByZXN0YXJ0OworCX0KKworCWN0eC0+ZnMgPSBmczsKKwlmcy0+bm93ID0gY3R4LT5ub3c7CisJc2IgPSBmcy0+c3VwZXI7CisKKwlpZiAoc2ItPnNfcmV2X2xldmVsID4gRTJGU0NLX0NVUlJFTlRfUkVWKSB7CisJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIEVYVDJfRVRfUkVWX1RPT19ISUdILAorCQkJXygid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiKSwKKwkJCWN0eC0+ZmlsZXN5c3RlbV9uYW1lKTsKKwlnZXRfbmV3ZXI6CisJCWZhdGFsX2Vycm9yKGN0eCwgXygiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIikpOworCX0KKworCS8qCisJICogU2V0IHRoZSBkZXZpY2UgbmFtZSwgd2hpY2ggaXMgdXNlZCB3aGVuZXZlciB3ZSBwcmludCBlcnJvcgorCSAqIG9yIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgdG8gdGhlIHVzZXIuCisJICovCisJaWYgKGN0eC0+ZGV2aWNlX25hbWUgPT0gMCAmJgorCSAgICAoc2ItPnNfdm9sdW1lX25hbWVbMF0gIT0gMCkpIHsKKwkJY3R4LT5kZXZpY2VfbmFtZSA9IHN0cmluZ19jb3B5KGN0eCwgc2ItPnNfdm9sdW1lX25hbWUsCisJCQkJCSAgICAgICBzaXplb2Yoc2ItPnNfdm9sdW1lX25hbWUpKTsKKwl9CisJaWYgKGN0eC0+ZGV2aWNlX25hbWUgPT0gMCkKKwkJY3R4LT5kZXZpY2VfbmFtZSA9IHN0cmluZ19jb3B5KGN0eCwgY3R4LT5maWxlc3lzdGVtX25hbWUsIDApOworCWZvciAoY3AgPSBjdHgtPmRldmljZV9uYW1lOyAqY3A7IGNwKyspCisJCWlmIChpc3NwYWNlKCpjcCkgfHwgKmNwID09ICc6JykKKwkJCSpjcCA9ICdfJzsKKworCWVoYW5kbGVyX2luaXQoZnMtPmlvKTsKKworCWlmICgoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTU1QKSAmJgorCSAgICAoZmxhZ3MgJiBFWFQyX0ZMQUdfU0tJUF9NTVApKSB7CisJCWlmIChlMmZzY2tfY2hlY2tfbW1wKGZzLCBjdHgpKQorCQkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKworCQkvKgorCQkgKiBSZXN0YXJ0IGluIG9yZGVyIHRvIHJlb3BlbiBmcyBidXQgdGhpcyB0aW1lIHN0YXJ0IG1tcC4KKwkJICovCisJCWV4dDJmc19jbG9zZV9mcmVlKCZjdHgtPmZzKTsKKwkJZmxhZ3MgJj0gfkVYVDJfRkxBR19TS0lQX01NUDsKKwkJZ290byByZXN0YXJ0OworCX0KKworCWlmIChjdHgtPmxvZ2YpCisJCWZwcmludGYoY3R4LT5sb2dmLCAiRmlsZXN5c3RlbSBVVUlEOiAlc1xuIiwKKwkJCWUycF91dWlkMnN0cihzYi0+c191dWlkKSk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgZXh0MyBzdXBlcmJsb2NrIGZpZWxkcyBhcmUgY29uc2lzdGVudC4KKwkgKi8KKwlyZXR2YWwgPSBlMmZzY2tfY2hlY2tfZXh0M19qb3VybmFsKGN0eCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGN0eC0+cHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQlfKCJ3aGlsZSBjaGVja2luZyBleHQzIGpvdXJuYWwgZm9yICVzIiksCisJCQljdHgtPmRldmljZV9uYW1lKTsKKwkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwl9CisKKwkvKgorCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGRvIGV4dDMtc3R5bGUgcmVjb3ZlcnkuICBJZiBzbywKKwkgKiBkbyBpdCwgYW5kIHRoZW4gcmVzdGFydCB0aGUgZnNjay4KKwkgKi8KKwlpZiAoc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSKSB7CisJCWlmIChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1JFQURPTkxZKSB7CisJCQlsb2dfb3V0KGN0eCwgIiVzIiwKKwkJCQlfKCJXYXJuaW5nOiBza2lwcGluZyBqb3VybmFsIHJlY292ZXJ5IGJlY2F1c2UgIgorCQkJCSAgImRvaW5nIGEgcmVhZC1vbmx5IGZpbGVzeXN0ZW0gY2hlY2suXG4iKSk7CisJCQlpb19jaGFubmVsX2ZsdXNoKGN0eC0+ZnMtPmlvKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfUkVTVEFSVEVEKSB7CisJCQkJLyoKKwkJCQkgKiBXaG9vcHMsIHdlIGF0dGVtcHRlZCB0byBydW4gdGhlCisJCQkJICogam91cm5hbCB0d2ljZS4gIFRoaXMgc2hvdWxkIG5ldmVyCisJCQkJICogaGFwcGVuLCB1bmxlc3MgdGhlIGhhcmR3YXJlIG9yCisJCQkJICogZGV2aWNlIGRyaXZlciBpcyBiZWluZyBib2d1cy4KKwkJCQkgKi8KKwkJCQljb21fZXJyKGN0eC0+cHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJ1bmFibGUgdG8gc2V0IHN1cGVyYmxvY2sgZmxhZ3MgIgorCQkJCQkgICJvbiAlc1xuIiksIGN0eC0+ZGV2aWNlX25hbWUpOworCQkJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJCQl9CisJCQlyZXR2YWwgPSBlMmZzY2tfcnVuX2V4dDNfam91cm5hbChjdHgpOworCQkJaWYgKHJldHZhbCkgeworCQkJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIHJldHZhbCwKKwkJCQlfKCJ3aGlsZSByZWNvdmVyaW5nIGV4dDMgam91cm5hbCBvZiAlcyIpLAorCQkJCQljdHgtPmRldmljZV9uYW1lKTsKKwkJCQlmYXRhbF9lcnJvcihjdHgsIDApOworCQkJfQorCQkJZXh0MmZzX2Nsb3NlX2ZyZWUoJmN0eC0+ZnMpOworCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19SRVNUQVJURUQ7CisJCQlnb3RvIHJlc3RhcnQ7CisJCX0KKwl9CisKKwkvKgorCSAqIENoZWNrIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGZlYXR1cmUgc2V0cy4gIFdlIG5lZWQgdG8KKwkgKiBiZSBtb3JlIHN0cmluZ2VudCB0aGFuIGV4dDJmc19vcGVuKCkuCisJICovCisJZmVhdHVyZXNbMF0gPSBzYi0+c19mZWF0dXJlX2NvbXBhdCAmIH5FWFQyX0xJQl9GRUFUVVJFX0NPTVBBVF9TVVBQOworCWZlYXR1cmVzWzFdID0gc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIH5FWFQyX0xJQl9GRUFUVVJFX0lOQ09NUEFUX1NVUFA7CisJZmVhdHVyZXNbMl0gPSAoc2ItPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCQkgICAgICAgfkVYVDJfTElCX0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFApOworcHJpbnRfdW5zdXBwX2ZlYXR1cmVzOgorCWlmIChmZWF0dXJlc1swXSB8fCBmZWF0dXJlc1sxXSB8fCBmZWF0dXJlc1syXSkgeworCQlpbnQJaSwgajsKKwkJX191MzIJKm1hc2sgPSBmZWF0dXJlcywgbTsKKworCQlsb2dfZXJyKGN0eCwgXygiJXMgaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocyk6IiksCisJCQljdHgtPmZpbGVzeXN0ZW1fbmFtZSk7CisKKwkJZm9yIChpPTA7IGkgPDM7IGkrKyxtYXNrKyspIHsKKwkJCWZvciAoaj0wLG09MTsgaiA8IDMyOyBqKyssIG08PD0xKSB7CisJCQkJaWYgKCptYXNrICYgbSkKKwkJCQkJbG9nX2VycihjdHgsICIgJXMiLAorCQkJCQkJZTJwX2ZlYXR1cmUyc3RyaW5nKGksIG0pKTsKKwkJCX0KKwkJfQorCQlsb2dfZXJyKGN0eCwgIlxuIik7CisJCWdvdG8gZ2V0X25ld2VyOworCX0KKyNpZmRlZiBFTkFCTEVfQ09NUFJFU1NJT04KKwlpZiAoc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9DT01QUkVTU0lPTikKKwkJbG9nX2VycihjdHgsIF8oIiVzOiB3YXJuaW5nOiBjb21wcmVzc2lvbiBzdXBwb3J0ICIKKwkJCSAgICAgICAiaXMgZXhwZXJpbWVudGFsLlxuIiksCisJCQljdHgtPnByb2dyYW1fbmFtZSk7CisjZW5kaWYKKyNpZm5kZWYgRU5BQkxFX0hUUkVFCisJaWYgKHNiLT5zX2ZlYXR1cmVfY29tcGF0ICYgRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfSU5ERVgpIHsKKwkJbG9nX2VycihjdHgsIF8oIiVzOiBlMmZzY2sgbm90IGNvbXBpbGVkIHdpdGggSFRSRUUgc3VwcG9ydCxcblx0IgorCQkJICAiYnV0IGZpbGVzeXN0ZW0gJXMgaGFzIEhUUkVFIGRpcmVjdG9yaWVzLlxuIiksCisJCQljdHgtPnByb2dyYW1fbmFtZSwgY3R4LT5kZXZpY2VfbmFtZSk7CisJCWdvdG8gZ2V0X25ld2VyOworCX0KKyNlbmRpZgorCisJLyoKKwkgKiBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBzcGVjaWZpYyBzdXBlcmJsb2NrLCBwcmVzdW1hYmx5IHRoZQorCSAqIG1hc3RlciBzdXBlcmJsb2NrIGhhcyBiZWVuIHRyYXNoZWQuICBTbyB3ZSBtYXJrIHRoZQorCSAqIHN1cGVyYmxvY2sgYXMgZGlydHksIHNvIGl0IGNhbiBiZSB3cml0dGVuIG91dC4KKwkgKi8KKwlpZiAoY3R4LT5zdXBlcmJsb2NrICYmCisJICAgICEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9SRUFET05MWSkpCisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgZmlsZXN5c3RlbSBibG9ja3MgcGVyIHBhZ2VzaXplLiAgSWYKKwkgKiBmcy0+YmxvY2tzaXplID4gcGFnZV9zaXplLCBzZXQgdGhlIG51bWJlciBvZiBibG9ja3MgcGVyCisJICogcGFnZXNpemUgdG8gMSB0byBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvIGVycm9ycy4KKwkgKi8KKyNpZmRlZiBfU0NfUEFHRVNJWkUKKwlzeXN2YWwgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CisJaWYgKHN5c3ZhbCA+IDApCisJCXN5c19wYWdlX3NpemUgPSBzeXN2YWw7CisjZW5kaWYgLyogX1NDX1BBR0VTSVpFICovCisJY3R4LT5ibG9ja3NfcGVyX3BhZ2UgPSBzeXNfcGFnZV9zaXplIC8gZnMtPmJsb2Nrc2l6ZTsKKwlpZiAoY3R4LT5ibG9ja3NfcGVyX3BhZ2UgPT0gMCkKKwkJY3R4LT5ibG9ja3NfcGVyX3BhZ2UgPSAxOworCisJaWYgKGN0eC0+c3VwZXJibG9jaykKKwkJc2V0X2xhdGNoX2ZsYWdzKFBSX0xBVENIX1JFTE9DLCBQUkxfTEFUQ0hFRCwgMCk7CisJZXh0MmZzX21hcmtfdmFsaWQoZnMpOworCWNoZWNrX3N1cGVyX2Jsb2NrKGN0eCk7CisJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19TSUdOQUxfTUFTSykKKwkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwljaGVja19pZl9za2lwKGN0eCk7CisJY2hlY2tfcmVzaXplX2lub2RlKGN0eCk7CisJaWYgKGJhZF9ibG9ja3NfZmlsZSkKKwkJcmVhZF9iYWRfYmxvY2tzX2ZpbGUoY3R4LCBiYWRfYmxvY2tzX2ZpbGUsIHJlcGxhY2VfYmFkX2Jsb2Nrcyk7CisJZWxzZSBpZiAoY2ZsYWcpCisJCXJlYWRfYmFkX2Jsb2Nrc19maWxlKGN0eCwgMCwgIWtlZXBfYmFkX2Jsb2Nrcyk7IC8qIFRlc3QgZGlzayAqLworCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisKKwkvKgorCSAqIE1hcmsgdGhlIHN5c3RlbSBhcyB2YWxpZCwgJ3RpbCBwcm92ZW4gb3RoZXJ3aXNlCisJICovCisJZXh0MmZzX21hcmtfdmFsaWQoZnMpOworCisJcmV0dmFsID0gZXh0MmZzX3JlYWRfYmJfaW5vZGUoZnMsICZmcy0+YmFkYmxvY2tzKTsKKwlpZiAocmV0dmFsKSB7CisJCWxvZ19vdXQoY3R4LCBfKCIlczogJXMgd2hpbGUgcmVhZGluZyBiYWQgYmxvY2tzIGlub2RlXG4iKSwKKwkJCWN0eC0+cHJvZ3JhbV9uYW1lLCBlcnJvcl9tZXNzYWdlKHJldHZhbCkpOworCQlwcmVlbmhhbHQoY3R4KTsKKwkJbG9nX291dChjdHgsICIlcyIsIF8oIlRoaXMgZG9lc24ndCBib2RlIHdlbGwsICIKKwkJCQkgICAgICJidXQgd2UnbGwgdHJ5IHRvIGdvIG9uLi4uXG4iKSk7CisJfQorCisJLyoKKwkgKiBTYXZlIHRoZSBqb3VybmFsIHNpemUgaW4gbWVnYWJ5dGVzLgorCSAqIFRyeSBhbmQgdXNlIHRoZSBqb3VybmFsIHNpemUgZnJvbSB0aGUgYmFja3VwIGVsc2UgbGV0IGUyZnNjaworCSAqIGZpbmQgdGhlIGRlZmF1bHQgam91cm5hbCBzaXplLgorCSAqLworCWlmIChzYi0+c19qbmxfYmFja3VwX3R5cGUgPT0gRVhUM19KTkxfQkFDS1VQX0JMT0NLUykKKwkJam91cm5hbF9zaXplID0gKHNiLT5zX2pubF9ibG9ja3NbMTVdIDw8ICgzMiAtIDIwKSkgfAorCQkJICAgICAgIChzYi0+c19qbmxfYmxvY2tzWzE2XSA+PiAyMCk7CisJZWxzZQorCQlqb3VybmFsX3NpemUgPSAtMTsKKworCWlmIChzYi0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfUVVPVEEpIHsKKwkJLyogUXVvdGFzIHdlcmUgZW5hYmxlZC4gRG8gcXVvdGEgYWNjb3VudGluZyBkdXJpbmcgZnNjay4gKi8KKwkJaWYgKChzYi0+c191c3JfcXVvdGFfaW51bSAmJiBzYi0+c19ncnBfcXVvdGFfaW51bSkgfHwKKwkJICAgICghc2ItPnNfdXNyX3F1b3RhX2ludW0gJiYgIXNiLT5zX2dycF9xdW90YV9pbnVtKSkKKwkJCXF0eXBlID0gLTE7CisJCWVsc2UKKwkJCXF0eXBlID0gc2ItPnNfdXNyX3F1b3RhX2ludW0gPyBVU1JRVU9UQSA6IEdSUFFVT1RBOworCisJCXF1b3RhX2luaXRfY29udGV4dCgmY3R4LT5xY3R4LCBjdHgtPmZzLCBxdHlwZSk7CisJfQorCisJcnVuX3Jlc3VsdCA9IGUyZnNja19ydW4oY3R4KTsKKwllMmZzY2tfY2xlYXJfcHJvZ2JhcihjdHgpOworCisJaWYgKCFjdHgtPmludmFsaWRfYml0bWFwcyAmJgorCSAgICAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX0pPVVJOQUxfSU5PREUpKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzZfUkVDUkVBVEVfSk9VUk5BTCwgJnBjdHgpKSB7CisJCQlpZiAoam91cm5hbF9zaXplIDwgMTAyNCkKKwkJCQlqb3VybmFsX3NpemUgPSBleHQyZnNfZGVmYXVsdF9qb3VybmFsX3NpemUoZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKTsKKwkJCWlmIChqb3VybmFsX3NpemUgPCAwKSB7CisJCQkJZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICY9CisJCQkJCX5FWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMOworCQkJCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX01BU1RFUl9TQl9PTkxZOworCQkJCWxvZ19vdXQoY3R4LCAiJXM6IENvdWxkbid0IGRldGVybWluZSAiCisJCQkJCSJqb3VybmFsIHNpemVcbiIsIGN0eC0+cHJvZ3JhbV9uYW1lKTsKKwkJCQlnb3RvIG5vX2pvdXJuYWw7CisJCQl9CisJCQlsb2dfb3V0KGN0eCwgXygiQ3JlYXRpbmcgam91cm5hbCAoJWQgYmxvY2tzKTogIiksCisJCQkgICAgICAgam91cm5hbF9zaXplKTsKKwkJCWZmbHVzaChzdGRvdXQpOworCQkJcmV0dmFsID0gZXh0MmZzX2FkZF9qb3VybmFsX2lub2RlKGZzLAorCQkJCQkJCSAgam91cm5hbF9zaXplLCAwKTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCQlsb2dfb3V0KGN0eCwgIiVzOiB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlICIKKwkJCQkJImpvdXJuYWxcbiIsIGVycm9yX21lc3NhZ2UocmV0dmFsKSk7CisJCQkJZ290byBub19qb3VybmFsOworCQkJfQorCQkJbG9nX291dChjdHgsICIlcyIsIF8oIiBEb25lLlxuIikpOworCQkJbG9nX291dChjdHgsICIlcyIsCisJCQkJXygiXG4qKiogam91cm5hbCBoYXMgYmVlbiByZS1jcmVhdGVkIC0gIgorCQkJCSAgImZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqXG4iKSk7CisJCX0KKwl9Citub19qb3VybmFsOgorCisJaWYgKGN0eC0+cWN0eCkgeworCQlpbnQgaSwgbmVlZHNfd3JpdGVvdXQ7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhRVU9UQVM7IGkrKykgeworCQkJaWYgKHF0eXBlICE9IC0xICYmIHF0eXBlICE9IGkpCisJCQkJY29udGludWU7CisJCQluZWVkc193cml0ZW91dCA9IDA7CisJCQlwY3R4Lm51bSA9IGk7CisJCQlyZXR2YWwgPSBxdW90YV9jb21wYXJlX2FuZF91cGRhdGUoY3R4LT5xY3R4LCBpLAorCQkJCQkJCSAgJm5lZWRzX3dyaXRlb3V0KTsKKwkJCWlmICgocmV0dmFsIHx8IG5lZWRzX3dyaXRlb3V0KSAmJgorCQkJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfNl9VUERBVEVfUVVPVEFTLCAmcGN0eCkpCisJCQkJcXVvdGFfd3JpdGVfaW5vZGUoY3R4LT5xY3R4LCBpKTsKKwkJfQorCQlxdW90YV9yZWxlYXNlX2NvbnRleHQoJmN0eC0+cWN0eCk7CisJfQorCisJaWYgKHJ1bl9yZXN1bHQgPT0gRTJGX0ZMQUdfUkVTVEFSVCkgeworCQlsb2dfb3V0KGN0eCwgIiVzIiwKKwkJCV8oIlJlc3RhcnRpbmcgZTJmc2NrIGZyb20gdGhlIGJlZ2lubmluZy4uLlxuIikpOworCQlyZXR2YWwgPSBlMmZzY2tfcmVzZXRfY29udGV4dChjdHgpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGN0eC0+cHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQkJXygid2hpbGUgcmVzZXR0aW5nIGNvbnRleHQiKSk7CisJCQlmYXRhbF9lcnJvcihjdHgsIDApOworCQl9CisJCWV4dDJmc19jbG9zZV9mcmVlKCZjdHgtPmZzKTsKKwkJZ290byByZXN0YXJ0OworCX0KKwlpZiAocnVuX3Jlc3VsdCAmIEUyRl9GTEFHX0FCT1JUKQorCQlmYXRhbF9lcnJvcihjdHgsIF8oImFib3J0ZWQiKSk7CisKKyNpZmRlZiBNVFJBQ0UKKwltdHJhY2VfcHJpbnQoIkNsZWFudXAiKTsKKyNlbmRpZgorCXdhc19jaGFuZ2VkID0gZXh0MmZzX3Rlc3RfY2hhbmdlZChmcyk7CisJaWYgKHJ1bl9yZXN1bHQgJiBFMkZfRkxBR19DQU5DRUwpIHsKKwkJbG9nX291dChjdHgsIF8oIiVzOiBlMmZzY2sgY2FuY2VsZWQuXG4iKSwgY3R4LT5kZXZpY2VfbmFtZSA/CisJCQljdHgtPmRldmljZV9uYW1lIDogY3R4LT5maWxlc3lzdGVtX25hbWUpOworCQlleGl0X3ZhbHVlIHw9IEZTQ0tfQ0FOQ0VMRUQ7CisJfSBlbHNlIGlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUkVBRE9OTFkpKSB7CisJCWlmIChleHQyZnNfdGVzdF92YWxpZChmcykpIHsKKwkJCWlmICghKHNiLT5zX3N0YXRlICYgRVhUMl9WQUxJRF9GUykpCisJCQkJZXhpdF92YWx1ZSB8PSBGU0NLX05PTkRFU1RSVUNUOworCQkJc2ItPnNfc3RhdGUgPSBFWFQyX1ZBTElEX0ZTOworCQkJaWYgKGNoZWNrX2JhY2t1cF9zdXBlcl9ibG9jayhjdHgpKQorCQkJCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX01BU1RFUl9TQl9PTkxZOworCQl9IGVsc2UKKwkJCXNiLT5zX3N0YXRlICY9IH5FWFQyX1ZBTElEX0ZTOworCQlpZiAoIShjdHgtPmZsYWdzICYgRTJGX0ZMQUdfVElNRV9JTlNBTkUpKQorCQkJc2ItPnNfbGFzdGNoZWNrID0gY3R4LT5ub3c7CisJCXNiLT5zX21udF9jb3VudCA9IDA7CisJCW1lbXNldCgoKGNoYXIgKikgc2IpICsgRVhUNF9TX0VSUl9TVEFSVCwgMCwgRVhUNF9TX0VSUl9MRU4pOworCQlwY3R4LmVycmNvZGUgPSBleHQyZnNfc2V0X2dkdF9jc3VtKGN0eC0+ZnMpOworCQlpZiAocGN0eC5lcnJjb2RlKQorCQkJZml4X3Byb2JsZW0oY3R4LCBQUl82X1NFVF9CR19DSEVDS1NVTSwgJnBjdHgpOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJfQorCisJZTJmc2NrX3dyaXRlX2JpdG1hcHMoY3R4KTsKKwlpZiAoZnMtPmZsYWdzICYgRVhUMl9GTEFHX0RJUlRZKSB7CisJCXBjdHguZXJyY29kZSA9IGV4dDJmc19mbHVzaChjdHgtPmZzKTsKKwkJaWYgKHBjdHguZXJyY29kZSkKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfNl9GTFVTSF9GSUxFU1lTVEVNLCAmcGN0eCk7CisJfQorCXBjdHguZXJyY29kZSA9IGlvX2NoYW5uZWxfZmx1c2goY3R4LT5mcy0+aW8pOworCWlmIChwY3R4LmVycmNvZGUpCisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfNl9JT19GTFVTSCwgJnBjdHgpOworCisJaWYgKHdhc19jaGFuZ2VkKSB7CisJCWV4aXRfdmFsdWUgfD0gRlNDS19OT05ERVNUUlVDVDsKKwkJaWYgKCEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9QUkVFTikpCisJCQlsb2dfb3V0KGN0eCwgXygiXG4lczogKioqKiogRklMRSBTWVNURU0gV0FTICIKKwkJCQkgICAgICAgIk1PRElGSUVEICoqKioqXG4iKSwKKwkJCQljdHgtPmRldmljZV9uYW1lKTsKKwkJaWYgKGN0eC0+bW91bnRfZmxhZ3MgJiBFWFQyX01GX0lTUk9PVCkgeworCQkJbG9nX291dChjdHgsIF8oIiVzOiAqKioqKiBSRUJPT1QgTElOVVggKioqKipcbiIpLAorCQkJCWN0eC0+ZGV2aWNlX25hbWUpOworCQkJZXhpdF92YWx1ZSB8PSBGU0NLX1JFQk9PVDsKKwkJfQorCX0KKwlpZiAoIWV4dDJmc190ZXN0X3ZhbGlkKGZzKSB8fAorCSAgICAoKGV4aXRfdmFsdWUgJiBGU0NLX0NBTkNFTEVEKSAmJgorCSAgICAgKHNiLT5zX3N0YXRlICYgRVhUMl9FUlJPUl9GUykpKSB7CisJCWxvZ19vdXQoY3R4LCBfKCJcbiVzOiAqKioqKioqKioqIFdBUk5JTkc6IEZpbGVzeXN0ZW0gc3RpbGwgaGFzICIKKwkJCSAgICAgICAiZXJyb3JzICoqKioqKioqKipcblxuIiksIGN0eC0+ZGV2aWNlX25hbWUpOworCQlleGl0X3ZhbHVlIHw9IEZTQ0tfVU5DT1JSRUNURUQ7CisJCWV4aXRfdmFsdWUgJj0gfkZTQ0tfTk9OREVTVFJVQ1Q7CisJfQorCWlmIChleGl0X3ZhbHVlICYgRlNDS19DQU5DRUxFRCkgeworCQlpbnQJYWxsb3dfY2FuY2VsbGF0aW9uOworCisJCXByb2ZpbGVfZ2V0X2Jvb2xlYW4oY3R4LT5wcm9maWxlLCAib3B0aW9ucyIsCisJCQkJICAgICJhbGxvd19jYW5jZWxsYXRpb24iLCAwLCAwLAorCQkJCSAgICAmYWxsb3dfY2FuY2VsbGF0aW9uKTsKKwkJZXhpdF92YWx1ZSAmPSB+RlNDS19OT05ERVNUUlVDVDsKKwkJaWYgKGFsbG93X2NhbmNlbGxhdGlvbiAmJiBleHQyZnNfdGVzdF92YWxpZChmcykgJiYKKwkJICAgIChzYi0+c19zdGF0ZSAmIEVYVDJfVkFMSURfRlMpICYmCisJCSAgICAhKHNiLT5zX3N0YXRlICYgRVhUMl9FUlJPUl9GUykpCisJCQlleGl0X3ZhbHVlID0gMDsKKwl9IGVsc2UKKwkJc2hvd19zdGF0cyhjdHgpOworCisJcHJpbnRfcmVzb3VyY2VfdHJhY2soY3R4LCBOVUxMLCAmY3R4LT5nbG9iYWxfcnRyYWNrLCBjdHgtPmZzLT5pbyk7CisKKwlleHQyZnNfY2xvc2VfZnJlZSgmY3R4LT5mcyk7CisJZnJlZShjdHgtPmpvdXJuYWxfbmFtZSk7CisKKwllMmZzY2tfZnJlZV9jb250ZXh0KGN0eCk7CisJcmVtb3ZlX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKwlyZW1vdmVfZXJyb3JfdGFibGUoJmV0X3Byb2ZfZXJyb3JfdGFibGUpOworCXJldHVybiBleGl0X3ZhbHVlOworfQpkaWZmIC0tZ2l0IGEvZTJmc2NrL3V0aWwuYyBiL2UyZnNjay91dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE1MjliNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNjay91dGlsLmMKQEAgLTAsMCArMSw4NDUgQEAKKy8qCisgKiB1dGlsLmMgLS0tIG1pc2NlbGxhbmVvdXMgdXRpbGl0aWVzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmZGVmIF9fbGludXhfXworI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfQ09OSU9fSAorI3VuZGVmIEhBVkVfVEVSTUlPU19ICisjaW5jbHVkZSA8Y29uaW8uaD4KKyNkZWZpbmUgcmVhZF9hX2NoYXIoKQlnZXRjaCgpCisjZWxzZQorI2lmZGVmIEhBVkVfVEVSTUlPU19ICisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEhBVkVfTUFMTE9DX0gKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZTJmc2NrLmgiCisKK2V4dGVybiBlMmZzY2tfdCBlMmZzY2tfZ2xvYmFsX2N0eDsgICAvKiBUcnkgeW91ciB2ZXJ5IGJlc3Qgbm90IHRvIHVzZSB0aGlzISAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKK3ZvaWQgZmF0YWxfZXJyb3IoZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICptc2cpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWludCBleGl0X3ZhbHVlID0gRlNDS19FUlJPUjsKKworCWlmIChtc2cpCisJCWZwcmludGYgKHN0ZGVyciwgImUyZnNjazogJXNcbiIsIG1zZyk7CisJaWYgKCFmcykKKwkJZ290byBvdXQ7CisJaWYgKGZzLT5pbyAmJiBmcy0+c3VwZXIpIHsKKwkJZXh0MmZzX21tcF9zdG9wKGN0eC0+ZnMpOworCQlpZiAoY3R4LT5mcy0+aW8tPm1hZ2ljID09IEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCkKKwkJCWlvX2NoYW5uZWxfZmx1c2goY3R4LT5mcy0+aW8pOworCQllbHNlCisJCQlsb2dfZXJyKGN0eCwgImUyZnNjazogaW8gbWFuYWdlciBtYWdpYyBiYWQhXG4iKTsKKwl9CisJaWYgKGV4dDJmc190ZXN0X2NoYW5nZWQoZnMpKSB7CisJCWV4aXRfdmFsdWUgfD0gRlNDS19OT05ERVNUUlVDVDsKKwkJbG9nX291dChjdHgsIF8oIlxuJXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKlxuIiksCisJCQljdHgtPmRldmljZV9uYW1lKTsKKwkJaWYgKGN0eC0+bW91bnRfZmxhZ3MgJiBFWFQyX01GX0lTUk9PVCkKKwkJCWV4aXRfdmFsdWUgfD0gRlNDS19SRUJPT1Q7CisJfQorCWlmICghZXh0MmZzX3Rlc3RfdmFsaWQoZnMpKSB7CisJCWxvZ19vdXQoY3R4LCBfKCJcbiVzOiAqKioqKioqKioqIFdBUk5JTkc6IEZpbGVzeXN0ZW0gc3RpbGwgaGFzICIKKwkJCSAgICAgICAiZXJyb3JzICoqKioqKioqKipcblxuIiksIGN0eC0+ZGV2aWNlX25hbWUpOworCQlleGl0X3ZhbHVlIHw9IEZTQ0tfVU5DT1JSRUNURUQ7CisJCWV4aXRfdmFsdWUgJj0gfkZTQ0tfTk9OREVTVFJVQ1Q7CisJfQorb3V0OgorCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19TRVRKTVBfT0spCisJCWxvbmdqbXAoY3R4LT5hYm9ydF9sb2MsIDEpOworCWV4aXQoZXhpdF92YWx1ZSk7Cit9CisKK3ZvaWQgbG9nX291dChlMmZzY2tfdCBjdHgsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgcHZhcjsKKworCXZhX3N0YXJ0KHB2YXIsIGZtdCk7CisJdnByaW50ZihmbXQsIHB2YXIpOworCXZhX2VuZChwdmFyKTsKKwlpZiAoY3R4LT5sb2dmKSB7CisJCXZhX3N0YXJ0KHB2YXIsIGZtdCk7CisJCXZmcHJpbnRmKGN0eC0+bG9nZiwgZm10LCBwdmFyKTsKKwkJdmFfZW5kKHB2YXIpOworCX0KK30KKwordm9pZCBsb2dfZXJyKGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBwdmFyOworCisJdmFfc3RhcnQocHZhciwgZm10KTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgcHZhcik7CisJdmFfZW5kKHB2YXIpOworCWlmIChjdHgtPmxvZ2YpIHsKKwkJdmFfc3RhcnQocHZhciwgZm10KTsKKwkJdmZwcmludGYoY3R4LT5sb2dmLCBmbXQsIHB2YXIpOworCQl2YV9lbmQocHZhcik7CisJfQorfQorCit2b2lkICplMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGUyZnNja190IGN0eCwgdW5zaWduZWQgaW50IHNpemUsCisJCQkgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKQoreworCXZvaWQgKnJldDsKKwljaGFyIGJ1ZlsyNTZdOworCisjaWZkZWYgREVCVUdfQUxMT0NBVEVfTUVNT1JZCisJcHJpbnRmKCJBbGxvY2F0aW5nICV1IGJ5dGVzIGZvciAlcy4uLlxuIiwgc2l6ZSwgZGVzY3JpcHRpb24pOworI2VuZGlmCisJcmV0ID0gbWFsbG9jKHNpemUpOworCWlmICghcmV0KSB7CisJCXNwcmludGYoYnVmLCAiQ2FuJ3QgYWxsb2NhdGUgJXUgYnl0ZXMgZm9yICVzXG4iLAorCQkJc2l6ZSwgZGVzY3JpcHRpb24pOworCQlmYXRhbF9lcnJvcihjdHgsIGJ1Zik7CisJfQorCW1lbXNldChyZXQsIDAsIHNpemUpOworCXJldHVybiByZXQ7Cit9CisKK2NoYXIgKnN0cmluZ19jb3B5KGUyZnNja190IGN0eCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKQoreworCWNoYXIJKnJldDsKKworCWlmICghc3RyKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWxlbikKKwkJbGVuID0gc3RybGVuKHN0cik7CisJcmV0ID0gbWFsbG9jKGxlbisxKTsKKwlpZiAocmV0KSB7CisJCXN0cm5jcHkocmV0LCBzdHIsIGxlbik7CisJCXJldFtsZW5dID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworI2lmbmRlZiBIQVZFX1NUUk5MRU4KKy8qCisgKiBJbmNyZWRpYmx5LCBsaWJjNSBkb2Vzbid0IGFwcGVhciB0byBoYXZlIHN0cm5sZW4uICBTbyB3ZSBoYXZlIHRvCisgKiBwcm92aWRlIG91ciBvd24uCisgKi8KK2ludCBlMmZzY2tfc3Rybmxlbihjb25zdCBjaGFyICogcywgaW50IGNvdW50KQoreworCWNvbnN0IGNoYXIgKmNwID0gczsKKworCXdoaWxlIChjb3VudC0tICYmICpjcCkKKwkJY3ArKzsKKwlyZXR1cm4gY3AgLSBzOworfQorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9DT05JT19ICitzdGF0aWMgaW50IHJlYWRfYV9jaGFyKHZvaWQpCit7CisJY2hhcgljOworCWludAlyOworCWludAlmYWlsID0gMDsKKworCXdoaWxlKDEpIHsKKwkJaWYgKGUyZnNja19nbG9iYWxfY3R4ICYmCisJCSAgICAoZTJmc2NrX2dsb2JhbF9jdHgtPmZsYWdzICYgRTJGX0ZMQUdfQ0FOQ0VMKSkgeworCQkJcmV0dXJuIDM7CisJCX0KKwkJciA9IHJlYWQoMCwgJmMsIDEpOworCQlpZiAociA9PSAxKQorCQkJcmV0dXJuIGM7CisJCWlmIChmYWlsKysgPiAxMDApCisJCQlicmVhazsKKwl9CisJcmV0dXJuIEVPRjsKK30KKyNlbmRpZgorCitpbnQgYXNrX3luKGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqIHN0cmluZywgaW50IGRlZikKK3sKKwlpbnQJCWM7CisJY29uc3QgY2hhcgkqZGVmc3RyOworCWNvbnN0IGNoYXIJKnNob3J0X3llcyA9IF8oInlZIik7CisJY29uc3QgY2hhcgkqc2hvcnRfbm8gPSBfKCJuTiIpOworCisjaWZkZWYgSEFWRV9URVJNSU9TX0gKKwlzdHJ1Y3QgdGVybWlvcwl0ZXJtaW9zLCB0bXA7CisKKwl0Y2dldGF0dHIgKDAsICZ0ZXJtaW9zKTsKKwl0bXAgPSB0ZXJtaW9zOworCXRtcC5jX2xmbGFnICY9IH4oSUNBTk9OIHwgRUNITyk7CisJdG1wLmNfY2NbVk1JTl0gPSAxOworCXRtcC5jX2NjW1ZUSU1FXSA9IDA7CisJdGNzZXRhdHRyICgwLCBUQ1NBTk9XLCAmdG1wKTsKKyNlbmRpZgorCisJaWYgKGRlZiA9PSAxKQorCQlkZWZzdHIgPSBfKF8oIjx5PiIpKTsKKwllbHNlIGlmIChkZWYgPT0gMCkKKwkJZGVmc3RyID0gXyhfKCI8bj4iKSk7CisJZWxzZQorCQlkZWZzdHIgPSBfKCIgKHkvbikiKTsKKwlsb2dfb3V0KGN0eCwgIiVzJXM/ICIsIHN0cmluZywgZGVmc3RyKTsKKwl3aGlsZSAoMSkgeworCQlmZmx1c2ggKHN0ZG91dCk7CisJCWlmICgoYyA9IHJlYWRfYV9jaGFyKCkpID09IEVPRikKKwkJCWJyZWFrOworCQlpZiAoYyA9PSAzKSB7CisjaWZkZWYgSEFWRV9URVJNSU9TX0gKKwkJCXRjc2V0YXR0ciAoMCwgVENTQU5PVywgJnRlcm1pb3MpOworI2VuZGlmCisJCQlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1NFVEpNUF9PSykgeworCQkJCWxvZ19vdXQoY3R4LCAiXG4iKTsKKwkJCQlsb25nam1wKGUyZnNja19nbG9iYWxfY3R4LT5hYm9ydF9sb2MsIDEpOworCQkJfQorCQkJbG9nX291dChjdHgsICIlcyIsIF8oImNhbmNlbGxlZCFcbiIpKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChzdHJjaHIoc2hvcnRfeWVzLCAoY2hhcikgYykpIHsKKwkJCWRlZiA9IDE7CisJCQlicmVhazsKKwkJfQorCQllbHNlIGlmIChzdHJjaHIoc2hvcnRfbm8sIChjaGFyKSBjKSkgeworCQkJZGVmID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYgKChjID09IDI3IHx8IGMgPT0gJyAnIHx8IGMgPT0gJ1xuJykgJiYgKGRlZiAhPSAtMSkpCisJCQlicmVhazsKKwl9CisJaWYgKGRlZikKKwkJbG9nX291dChjdHgsICIlcyIsIF8oInllc1xuIikpOworCWVsc2UKKwkJbG9nX291dChjdHgsICIlcyIsIF8oIm5vXG4iKSk7CisjaWZkZWYgSEFWRV9URVJNSU9TX0gKKwl0Y3NldGF0dHIgKDAsIFRDU0FOT1csICZ0ZXJtaW9zKTsKKyNlbmRpZgorCXJldHVybiBkZWY7Cit9CisKK2ludCBhc2sgKGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqIHN0cmluZywgaW50IGRlZikKK3sKKwlpZiAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9OTykgeworCQlsb2dfb3V0KGN0eCwgXygiJXM/IG5vXG5cbiIpLCBzdHJpbmcpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfWUVTKSB7CisJCWxvZ19vdXQoY3R4LCBfKCIlcz8geWVzXG5cbiIpLCBzdHJpbmcpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pIHsKKwkJbG9nX291dChjdHgsICIlcz8gJXNcblxuIiwgc3RyaW5nLCBkZWYgPyBfKCJ5ZXMiKSA6IF8oIm5vIikpOworCQlyZXR1cm4gZGVmOworCX0KKwlyZXR1cm4gYXNrX3luKGN0eCwgc3RyaW5nLCBkZWYpOworfQorCit2b2lkIGUyZnNja19yZWFkX2JpdG1hcHMoZTJmc2NrX3QgY3R4KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwllcnJjb2RlX3QJcmV0dmFsOworCWNvbnN0IGNoYXIJKm9sZF9vcDsKKwl1bnNpZ25lZCBpbnQJc2F2ZV90eXBlOworCisJaWYgKGN0eC0+aW52YWxpZF9iaXRtYXBzKSB7CisJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIDAsCisJCSAgICBfKCJlMmZzY2tfcmVhZF9iaXRtYXBzOiBpbGxlZ2FsIGJpdG1hcCBibG9jayhzKSBmb3IgJXMiKSwKKwkJCWN0eC0+ZGV2aWNlX25hbWUpOworCQlmYXRhbF9lcnJvcihjdHgsIDApOworCX0KKworCW9sZF9vcCA9IGVoYW5kbGVyX29wZXJhdGlvbihfKCJyZWFkaW5nIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIikpOworCWUyZnNja19zZXRfYml0bWFwX3R5cGUoZnMsIEVYVDJGU19CTUFQNjRfUkJUUkVFLCAiZnNfYml0bWFwcyIsCisJCQkgICAgICAgJnNhdmVfdHlwZSk7CisJcmV0dmFsID0gZXh0MmZzX3JlYWRfYml0bWFwcyhmcyk7CisJZnMtPmRlZmF1bHRfYml0bWFwX3R5cGUgPSBzYXZlX3R5cGU7CisJZWhhbmRsZXJfb3BlcmF0aW9uKG9sZF9vcCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGN0eC0+cHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQlfKCJ3aGlsZSByZXRyeWluZyB0byByZWFkIGJpdG1hcHMgZm9yICVzIiksCisJCQljdHgtPmRldmljZV9uYW1lKTsKKwkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwl9Cit9CisKK3ZvaWQgZTJmc2NrX3dyaXRlX2JpdG1hcHMoZTJmc2NrX3QgY3R4KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwllcnJjb2RlX3QJcmV0dmFsOworCWNvbnN0IGNoYXIJKm9sZF9vcDsKKworCW9sZF9vcCA9IGVoYW5kbGVyX29wZXJhdGlvbihfKCJ3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIikpOworCXJldHZhbCA9IGV4dDJmc193cml0ZV9iaXRtYXBzKGZzKTsKKwllaGFuZGxlcl9vcGVyYXRpb24ob2xkX29wKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIHJldHZhbCwKKwkJCV8oIndoaWxlIHJld3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBmb3IgJXMiKSwKKwkJCWN0eC0+ZGV2aWNlX25hbWUpOworCQlmYXRhbF9lcnJvcihjdHgsIDApOworCX0KK30KKwordm9pZCBwcmVlbmhhbHQoZTJmc2NrX3QgY3R4KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKworCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pKQorCQlyZXR1cm47CisJbG9nX2VycihjdHgsIF8oIlxuXG4lczogVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOyAiCisJCSJSVU4gZnNjayBNQU5VQUxMWS5cblx0KGkuZS4sIHdpdGhvdXQgLWEgb3IgLXAgb3B0aW9ucylcbiIpLAorCSAgICAgICBjdHgtPmRldmljZV9uYW1lKTsKKwljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0VYSVRJTkc7CisJaWYgKGZzICE9IE5VTEwpIHsKKwkJZnMtPnN1cGVyLT5zX3N0YXRlIHw9IEVYVDJfRVJST1JfRlM7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJZXh0MmZzX2Nsb3NlX2ZyZWUoJmZzKTsKKwl9CisJZXhpdChGU0NLX1VOQ09SUkVDVEVEKTsKK30KKworI2lmZGVmIFJFU09VUkNFX1RSQUNLCit2b2lkIGluaXRfcmVzb3VyY2VfdHJhY2soc3RydWN0IHJlc291cmNlX3RyYWNrICp0cmFjaywgaW9fY2hhbm5lbCBjaGFubmVsKQoreworI2lmZGVmIEhBVkVfR0VUUlVTQUdFCisJc3RydWN0IHJ1c2FnZSByOworI2VuZGlmCisJaW9fc3RhdHMgaW9fc3RhcnQgPSAwOworCisJdHJhY2stPmJya19zdGFydCA9IHNicmsoMCk7CisJZ2V0dGltZW9mZGF5KCZ0cmFjay0+dGltZV9zdGFydCwgMCk7CisjaWZkZWYgSEFWRV9HRVRSVVNBR0UKKyNpZmRlZiBzdW4KKwltZW1zZXQoJnIsIDAsIHNpemVvZihzdHJ1Y3QgcnVzYWdlKSk7CisjZW5kaWYKKwlnZXRydXNhZ2UoUlVTQUdFX1NFTEYsICZyKTsKKwl0cmFjay0+dXNlcl9zdGFydCA9IHIucnVfdXRpbWU7CisJdHJhY2stPnN5c3RlbV9zdGFydCA9IHIucnVfc3RpbWU7CisjZWxzZQorCXRyYWNrLT51c2VyX3N0YXJ0LnR2X3NlYyA9IHRyYWNrLT51c2VyX3N0YXJ0LnR2X3VzZWMgPSAwOworCXRyYWNrLT5zeXN0ZW1fc3RhcnQudHZfc2VjID0gdHJhY2stPnN5c3RlbV9zdGFydC50dl91c2VjID0gMDsKKyNlbmRpZgorCXRyYWNrLT5ieXRlc19yZWFkID0gMDsKKwl0cmFjay0+Ynl0ZXNfd3JpdHRlbiA9IDA7CisJaWYgKGNoYW5uZWwgJiYgY2hhbm5lbC0+bWFuYWdlciAmJiBjaGFubmVsLT5tYW5hZ2VyLT5nZXRfc3RhdHMpCisJCWNoYW5uZWwtPm1hbmFnZXItPmdldF9zdGF0cyhjaGFubmVsLCAmaW9fc3RhcnQpOworCWlmIChpb19zdGFydCkgeworCQl0cmFjay0+Ynl0ZXNfcmVhZCA9IGlvX3N0YXJ0LT5ieXRlc19yZWFkOworCQl0cmFjay0+Ynl0ZXNfd3JpdHRlbiA9IGlvX3N0YXJ0LT5ieXRlc193cml0dGVuOworCX0KK30KKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9JTkxJTkVfIF9faW5saW5lX18KKyNlbHNlCisjZGVmaW5lIF9JTkxJTkVfCisjZW5kaWYKKworc3RhdGljIF9JTkxJTkVfIGZsb2F0IHRpbWV2YWxfc3VidHJhY3Qoc3RydWN0IHRpbWV2YWwgKnR2MSwKKwkJCQkgICAgICAgc3RydWN0IHRpbWV2YWwgKnR2MikKK3sKKwlyZXR1cm4gKCh0djEtPnR2X3NlYyAtIHR2Mi0+dHZfc2VjKSArCisJCSgoZmxvYXQpICh0djEtPnR2X3VzZWMgLSB0djItPnR2X3VzZWMpKSAvIDEwMDAwMDApOworfQorCit2b2lkIHByaW50X3Jlc291cmNlX3RyYWNrKGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqZGVzYywKKwkJCSAgc3RydWN0IHJlc291cmNlX3RyYWNrICp0cmFjaywgaW9fY2hhbm5lbCBjaGFubmVsKQoreworI2lmZGVmIEhBVkVfR0VUUlVTQUdFCisJc3RydWN0IHJ1c2FnZSByOworI2VuZGlmCisjaWZkZWYgSEFWRV9NQUxMSU5GTworCXN0cnVjdCBtYWxsaW5mbwltYWxsb2NfaW5mbzsKKyNlbmRpZgorCXN0cnVjdCB0aW1ldmFsIHRpbWVfZW5kOworCisJaWYgKChkZXNjICYmICEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9USU1FMikpIHx8CisJICAgICghZGVzYyAmJiAhKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfVElNRSkpKQorCQlyZXR1cm47CisKKwllMmZzY2tfY2xlYXJfcHJvZ2JhcihjdHgpOworCWdldHRpbWVvZmRheSgmdGltZV9lbmQsIDApOworCisJaWYgKGRlc2MpCisJCWxvZ19vdXQoY3R4LCAiJXM6ICIsIGRlc2MpOworCisjaWZkZWYgSEFWRV9NQUxMSU5GTworI2RlZmluZSBrYnl0ZXMoeCkJKCgodW5zaWduZWQgbG9uZykoeCkgKyAxMDIzKSAvIDEwMjQpCisKKwltYWxsb2NfaW5mbyA9IG1hbGxpbmZvKCk7CisJbG9nX291dChjdHgsIF8oIk1lbW9yeSB1c2VkOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIpLAorCQlrYnl0ZXMobWFsbG9jX2luZm8uYXJlbmEpLCBrYnl0ZXMobWFsbG9jX2luZm8uaGJsa2hkKSwKKwkJa2J5dGVzKG1hbGxvY19pbmZvLnVvcmRibGtzKSwga2J5dGVzKG1hbGxvY19pbmZvLmZvcmRibGtzKSk7CisjZWxzZQorCWxvZ19vdXQoY3R4LCBfKCJNZW1vcnkgdXNlZDogJWx1LCAiKSwKKwkJKHVuc2lnbmVkIGxvbmcpICgoKGNoYXIgKikgc2JyaygwKSkgLQorCQkJCSAoKGNoYXIgKikgdHJhY2stPmJya19zdGFydCkpKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfR0VUUlVTQUdFCisJZ2V0cnVzYWdlKFJVU0FHRV9TRUxGLCAmcik7CisKKwlsb2dfb3V0KGN0eCwgXygidGltZTogJTUuMmYvJTUuMmYvJTUuMmZcbiIpLAorCQl0aW1ldmFsX3N1YnRyYWN0KCZ0aW1lX2VuZCwgJnRyYWNrLT50aW1lX3N0YXJ0KSwKKwkJdGltZXZhbF9zdWJ0cmFjdCgmci5ydV91dGltZSwgJnRyYWNrLT51c2VyX3N0YXJ0KSwKKwkJdGltZXZhbF9zdWJ0cmFjdCgmci5ydV9zdGltZSwgJnRyYWNrLT5zeXN0ZW1fc3RhcnQpKTsKKyNlbHNlCisJbG9nX291dChjdHgsIF8oImVsYXBzZWQgdGltZTogJTYuM2ZcbiIpLAorCQl0aW1ldmFsX3N1YnRyYWN0KCZ0aW1lX2VuZCwgJnRyYWNrLT50aW1lX3N0YXJ0KSk7CisjZW5kaWYKKyNkZWZpbmUgbWJ5dGVzKHgpCSgoKHgpICsgMTA0ODU3NSkgLyAxMDQ4NTc2KQorCWlmIChjaGFubmVsICYmIGNoYW5uZWwtPm1hbmFnZXIgJiYgY2hhbm5lbC0+bWFuYWdlci0+Z2V0X3N0YXRzKSB7CisJCWlvX3N0YXRzIGRlbHRhID0gMDsKKwkJdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzX3JlYWQgPSAwOworCQl1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNfd3JpdHRlbiA9IDA7CisKKwkJaWYgKGRlc2MpCisJCQlsb2dfb3V0KGN0eCwgIiVzOiAiLCBkZXNjKTsKKworCQljaGFubmVsLT5tYW5hZ2VyLT5nZXRfc3RhdHMoY2hhbm5lbCwgJmRlbHRhKTsKKwkJaWYgKGRlbHRhKSB7CisJCQlieXRlc19yZWFkID0gZGVsdGEtPmJ5dGVzX3JlYWQgLSB0cmFjay0+Ynl0ZXNfcmVhZDsKKwkJCWJ5dGVzX3dyaXR0ZW4gPSBkZWx0YS0+Ynl0ZXNfd3JpdHRlbiAtCisJCQkJdHJhY2stPmJ5dGVzX3dyaXR0ZW47CisJCX0KKwkJbG9nX291dChjdHgsICJJL08gcmVhZDogJWxsdU1CLCB3cml0ZTogJWxsdU1CLCAiCisJCQkicmF0ZTogJS4yZk1CL3NcbiIsCisJCQltYnl0ZXMoYnl0ZXNfcmVhZCksIG1ieXRlcyhieXRlc193cml0dGVuKSwKKwkJCShkb3VibGUpbWJ5dGVzKGJ5dGVzX3JlYWQgKyBieXRlc193cml0dGVuKSAvCisJCQl0aW1ldmFsX3N1YnRyYWN0KCZ0aW1lX2VuZCwgJnRyYWNrLT50aW1lX3N0YXJ0KSk7CisJfQorfQorI2VuZGlmIC8qIFJFU09VUkNFX1RSQUNLICovCisKK3ZvaWQgZTJmc2NrX3JlYWRfaW5vZGUoZTJmc2NrX3QgY3R4LCB1bnNpZ25lZCBsb25nIGlubywKKwkJCSAgICAgIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUsIGNvbnN0IGNoYXIgKnByb2MpCit7CisJZXJyY29kZV90IHJldHZhbDsKKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGN0eC0+ZnMsIGlubywgaW5vZGUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZXh0MmZzX3JlYWRfaW5vZGUiLCByZXR2YWwsCisJCQlfKCJ3aGlsZSByZWFkaW5nIGlub2RlICVsdSBpbiAlcyIpLCBpbm8sIHByb2MpOworCQlmYXRhbF9lcnJvcihjdHgsIDApOworCX0KK30KKwordm9pZCBlMmZzY2tfcmVhZF9pbm9kZV9mdWxsKGUyZnNja190IGN0eCwgdW5zaWduZWQgbG9uZyBpbm8sCisJCQkgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBpbnQgYnVmc2l6ZSwKKwkJCSAgICBjb25zdCBjaGFyICpwcm9jKQoreworCWVycmNvZGVfdCByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZV9mdWxsKGN0eC0+ZnMsIGlubywgaW5vZGUsIGJ1ZnNpemUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZXh0MmZzX3JlYWRfaW5vZGVfZnVsbCIsIHJldHZhbCwKKwkJCV8oIndoaWxlIHJlYWRpbmcgaW5vZGUgJWx1IGluICVzIiksIGlubywgcHJvYyk7CisJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJfQorfQorCit2b2lkIGUyZnNja193cml0ZV9pbm9kZV9mdWxsKGUyZnNja190IGN0eCwgdW5zaWduZWQgbG9uZyBpbm8sCisJCQkgICAgIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUsIGludCBidWZzaXplLAorCQkJICAgICBjb25zdCBjaGFyICpwcm9jKQoreworCWVycmNvZGVfdCByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGVfZnVsbChjdHgtPmZzLCBpbm8sIGlub2RlLCBidWZzaXplKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJmc193cml0ZV9pbm9kZSIsIHJldHZhbCwKKwkJCV8oIndoaWxlIHdyaXRpbmcgaW5vZGUgJWx1IGluICVzIiksIGlubywgcHJvYyk7CisJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJfQorfQorCit2b2lkIGUyZnNja193cml0ZV9pbm9kZShlMmZzY2tfdCBjdHgsIHVuc2lnbmVkIGxvbmcgaW5vLAorCQkJc3RydWN0IGV4dDJfaW5vZGUgKiBpbm9kZSwgY29uc3QgY2hhciAqcHJvYykKK3sKKwllcnJjb2RlX3QgcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGN0eC0+ZnMsIGlubywgaW5vZGUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZXh0MmZzX3dyaXRlX2lub2RlIiwgcmV0dmFsLAorCQkJXygid2hpbGUgd3JpdGluZyBpbm9kZSAlbHUgaW4gJXMiKSwgaW5vLCBwcm9jKTsKKwkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwl9Cit9CisKKyNpZmRlZiBNVFJBQ0UKK3ZvaWQgbXRyYWNlX3ByaW50KGNoYXIgKm1lc2cpCit7CisJRklMRQkqbWFsbG9jX2dldF9tYWxsc3RyZWFtKCk7CisJRklMRQkqZiA9IG1hbGxvY19nZXRfbWFsbHN0cmVhbSgpOworCisJaWYgKGYpCisJCWZwcmludGYoZiwgIj09PT09PT09PT09PT0gJXNcbiIsIG1lc2cpOworfQorI2VuZGlmCisKK2JsazY0X3QgZ2V0X2JhY2t1cF9zYihlMmZzY2tfdCBjdHgsIGV4dDJfZmlsc3lzIGZzLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBpb19tYW5hZ2VyIG1hbmFnZXIpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiOworCWlvX2NoYW5uZWwJCWlvID0gTlVMTDsKKwl2b2lkCQkJKmJ1ZiA9IE5VTEw7CisJaW50CQkJYmxvY2tzaXplOworCWJsazY0X3QJCQlzdXBlcmJsb2NrLCByZXRfc2IgPSA4MTkzOworCisJaWYgKGZzICYmIGZzLT5zdXBlcikgeworCQlyZXRfc2IgPSAoZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXAgKworCQkJICBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayk7CisJCWlmIChjdHgpIHsKKwkJCWN0eC0+c3VwZXJibG9jayA9IHJldF9zYjsKKwkJCWN0eC0+YmxvY2tzaXplID0gZnMtPmJsb2Nrc2l6ZTsKKwkJfQorCQlyZXR1cm4gcmV0X3NiOworCX0KKworCWlmIChjdHgpIHsKKwkJaWYgKGN0eC0+YmxvY2tzaXplKSB7CisJCQlyZXRfc2IgPSBjdHgtPmJsb2Nrc2l6ZSAqIDg7CisJCQlpZiAoY3R4LT5ibG9ja3NpemUgPT0gMTAyNCkKKwkJCQlyZXRfc2IrKzsKKwkJCWN0eC0+c3VwZXJibG9jayA9IHJldF9zYjsKKwkJCXJldHVybiByZXRfc2I7CisJCX0KKwkJY3R4LT5zdXBlcmJsb2NrID0gcmV0X3NiOworCQljdHgtPmJsb2Nrc2l6ZSA9IDEwMjQ7CisJfQorCisJaWYgKCFuYW1lIHx8ICFtYW5hZ2VyKQorCQlnb3RvIGNsZWFudXA7CisKKwlpZiAobWFuYWdlci0+b3BlbihuYW1lLCAwLCAmaW8pICE9IDApCisJCWdvdG8gY2xlYW51cDsKKworCWlmIChleHQyZnNfZ2V0X21lbShTVVBFUkJMT0NLX1NJWkUsICZidWYpKQorCQlnb3RvIGNsZWFudXA7CisJc2IgPSAoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKikgYnVmOworCisJZm9yIChibG9ja3NpemUgPSBFWFQyX01JTl9CTE9DS19TSVpFOworCSAgICAgYmxvY2tzaXplIDw9IEVYVDJfTUFYX0JMT0NLX1NJWkUgOyBibG9ja3NpemUgKj0gMikgeworCQlzdXBlcmJsb2NrID0gYmxvY2tzaXplKjg7CisJCWlmIChibG9ja3NpemUgPT0gMTAyNCkKKwkJCXN1cGVyYmxvY2srKzsKKwkJaW9fY2hhbm5lbF9zZXRfYmxrc2l6ZShpbywgYmxvY2tzaXplKTsKKwkJaWYgKGlvX2NoYW5uZWxfcmVhZF9ibGs2NChpbywgc3VwZXJibG9jaywKKwkJCQkJLVNVUEVSQkxPQ0tfU0laRSwgYnVmKSkKKwkJCWNvbnRpbnVlOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCQlpZiAoc2ItPnNfbWFnaWMgPT0gZXh0MmZzX3N3YWIxNihFWFQyX1NVUEVSX01BR0lDKSkKKwkJCWV4dDJmc19zd2FwX3N1cGVyKHNiKTsKKyNlbmRpZgorCQlpZiAoKHNiLT5zX21hZ2ljID09IEVYVDJfU1VQRVJfTUFHSUMpICYmCisJCSAgICAoRVhUMl9CTE9DS19TSVpFKHNiKSA9PSBibG9ja3NpemUpKSB7CisJCQlyZXRfc2IgPSBzdXBlcmJsb2NrOworCQkJaWYgKGN0eCkgeworCQkJCWN0eC0+c3VwZXJibG9jayA9IHN1cGVyYmxvY2s7CisJCQkJY3R4LT5ibG9ja3NpemUgPSBibG9ja3NpemU7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKworY2xlYW51cDoKKwlpZiAoaW8pCisJCWlvX2NoYW5uZWxfY2xvc2UoaW8pOworCWlmIChidWYpCisJCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwlyZXR1cm4gKHJldF9zYik7Cit9CisKKy8qCisgKiBHaXZlbiBhIG1vZGUsIHJldHVybiB0aGUgZXh0MiBmaWxlIHR5cGUKKyAqLworaW50IGV4dDJfZmlsZV90eXBlKHVuc2lnbmVkIGludCBtb2RlKQoreworCWlmIChMSU5VWF9TX0lTUkVHKG1vZGUpKQorCQlyZXR1cm4gRVhUMl9GVF9SRUdfRklMRTsKKworCWlmIChMSU5VWF9TX0lTRElSKG1vZGUpKQorCQlyZXR1cm4gRVhUMl9GVF9ESVI7CisKKwlpZiAoTElOVVhfU19JU0NIUihtb2RlKSkKKwkJcmV0dXJuIEVYVDJfRlRfQ0hSREVWOworCisJaWYgKExJTlVYX1NfSVNCTEsobW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX0JMS0RFVjsKKworCWlmIChMSU5VWF9TX0lTTE5LKG1vZGUpKQorCQlyZXR1cm4gRVhUMl9GVF9TWU1MSU5LOworCisJaWYgKExJTlVYX1NfSVNGSUZPKG1vZGUpKQorCQlyZXR1cm4gRVhUMl9GVF9GSUZPOworCisJaWYgKExJTlVYX1NfSVNTT0NLKG1vZGUpKQorCQlyZXR1cm4gRVhUMl9GVF9TT0NLOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgU1RSSURFX0xFTkdUSCA4CisvKgorICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIHplcm9zIG91dCBfbnVtXyBibG9ja3Mgc3RhcnRpbmcgYXQgX2Jsa18uICBJbgorICogY2FzZSBvZiBhbiBlcnJvciwgdGhlIGRldGFpbHMgb2YgdGhlIGVycm9yIGlzIHJldHVybmVkIHZpYSBfcmV0X2Jsa18KKyAqIGFuZCBfcmV0X2NvdW50XyBpZiB0aGV5IGFyZSBub24tTlVMTCBwb2ludGVycy4gIFJldHVybnMgMCBvbgorICogc3VjY2VzcywgYW5kIGFuIGVycm9yIGNvZGUgb24gYW4gZXJyb3IuCisgKgorICogQXMgYSBzcGVjaWFsIGNhc2UsIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBOVUxMLCB0aGVuIGl0IHdpbGwKKyAqIGF0dGVtcHQgdG8gZnJlZSB0aGUgc3RhdGljIHplcm9pemluZyBidWZmZXIuICAoVGhpcyBpcyB0byBrZWVwCisgKiBwcm9ncmFtcyB0aGF0IGNoZWNrIGZvciBtZW1vcnkgbGVha3MgaGFwcHkuKQorICovCitlcnJjb2RlX3QgZTJmc2NrX3plcm9fYmxvY2tzKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibGssIGludCBudW0sCisJCQkgICAgIGJsa190ICpyZXRfYmxrLCBpbnQgKnJldF9jb3VudCkKK3sKKwlpbnQJCWosIGNvdW50OworCXN0YXRpYyBjaGFyCSpidWY7CisJZXJyY29kZV90CXJldHZhbDsKKworCS8qIElmIGZzIGlzIG51bGwsIGNsZWFuIHVwIHRoZSBzdGF0aWMgYnVmZmVyIGFuZCByZXR1cm4gKi8KKwlpZiAoIWZzKSB7CisJCWlmIChidWYpIHsKKwkJCWZyZWUoYnVmKTsKKwkJCWJ1ZiA9IDA7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCS8qIEFsbG9jYXRlIHRoZSB6ZXJvaXppbmcgYnVmZmVyIGlmIG5lY2Vzc2FyeSAqLworCWlmICghYnVmKSB7CisJCWJ1ZiA9IG1hbGxvYyhmcy0+YmxvY2tzaXplICogU1RSSURFX0xFTkdUSCk7CisJCWlmICghYnVmKSB7CisJCQljb21fZXJyKCJtYWxsb2MiLCBFTk9NRU0sICIlcyIsCisJCQkJXygid2hpbGUgYWxsb2NhdGluZyB6ZXJvaXppbmcgYnVmZmVyIikpOworCQkJZXhpdCgxKTsKKwkJfQorCQltZW1zZXQoYnVmLCAwLCBmcy0+YmxvY2tzaXplICogU1RSSURFX0xFTkdUSCk7CisJfQorCS8qIE9LLCBkbyB0aGUgd3JpdGUgbG9vcCAqLworCWZvciAoaiA9IDA7IGogPCBudW07IGogKz0gU1RSSURFX0xFTkdUSCwgYmxrICs9IFNUUklERV9MRU5HVEgpIHsKKwkJY291bnQgPSBudW0gLSBqOworCQlpZiAoY291bnQgPiBTVFJJREVfTEVOR1RIKQorCQkJY291bnQgPSBTVFJJREVfTEVOR1RIOworCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgYmxrLCBjb3VudCwgYnVmKTsKKwkJaWYgKHJldHZhbCkgeworCQkJaWYgKHJldF9jb3VudCkKKwkJCQkqcmV0X2NvdW50ID0gY291bnQ7CisJCQlpZiAocmV0X2JsaykKKwkJCQkqcmV0X2JsayA9IGJsazsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgYSBmaWxlc3lzdGVtIGlzIGluIC9wcm9jL2ZpbGVzeXN0ZW1zLgorICogUmV0dXJucyAxIGlmIGZvdW5kLCAwIGlmIG5vdAorICovCitpbnQgZnNfcHJvY19jaGVjayhjb25zdCBjaGFyICpmc19uYW1lKQoreworCUZJTEUJKmY7CisJY2hhcglidWZbODBdLCAqY3AsICp0OworCisJZiA9IGZvcGVuKCIvcHJvYy9maWxlc3lzdGVtcyIsICJyIik7CisJaWYgKCFmKQorCQlyZXR1cm4gKDApOworCXdoaWxlICghZmVvZihmKSkgeworCQlpZiAoIWZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKQorCQkJYnJlYWs7CisJCWNwID0gYnVmOworCQlpZiAoIWlzc3BhY2UoKmNwKSkgeworCQkJd2hpbGUgKCpjcCAmJiAhaXNzcGFjZSgqY3ApKQorCQkJCWNwKys7CisJCX0KKwkJd2hpbGUgKCpjcCAmJiBpc3NwYWNlKCpjcCkpCisJCQljcCsrOworCQlpZiAoKHQgPSBzdHJjaHIoY3AsICdcbicpKSAhPSBOVUxMKQorCQkJKnQgPSAwOworCQlpZiAoKHQgPSBzdHJjaHIoY3AsICdcdCcpKSAhPSBOVUxMKQorCQkJKnQgPSAwOworCQlpZiAoKHQgPSBzdHJjaHIoY3AsICcgJykpICE9IE5VTEwpCisJCQkqdCA9IDA7CisJCWlmICghc3RyY21wKGZzX25hbWUsIGNwKSkgeworCQkJZmNsb3NlKGYpOworCQkJcmV0dXJuICgxKTsKKwkJfQorCX0KKwlmY2xvc2UoZik7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiBhIGZpbGVzeXN0ZW0gaXMgYXZhaWxhYmxlIGFzIGEgbW9kdWxlCisgKiBSZXR1cm5zIDEgaWYgZm91bmQsIDAgaWYgbm90CisgKi8KK2ludCBjaGVja19mb3JfbW9kdWxlcyhjb25zdCBjaGFyICpmc19uYW1lKQoreworI2lmZGVmIF9fbGludXhfXworCXN0cnVjdCB1dHNuYW1lCXV0czsKKwlGSUxFCQkqZjsKKwljaGFyCQlidWZbMTAyNF0sICpjcCwgKnQ7CisJaW50CQlpOworCisJaWYgKHVuYW1lKCZ1dHMpKQorCQlyZXR1cm4gKDApOworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIvbGliL21vZHVsZXMvJXMvbW9kdWxlcy5kZXAiLCB1dHMucmVsZWFzZSk7CisKKwlmID0gZm9wZW4oYnVmLCAiciIpOworCWlmICghZikKKwkJcmV0dXJuICgwKTsKKwl3aGlsZSAoIWZlb2YoZikpIHsKKwkJaWYgKCFmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSkKKwkJCWJyZWFrOworCQlpZiAoKGNwID0gc3RyY2hyKGJ1ZiwgJzonKSkgIT0gTlVMTCkKKwkJCSpjcCA9IDA7CisJCWVsc2UKKwkJCWNvbnRpbnVlOworCQlpZiAoKGNwID0gc3RycmNocihidWYsICcvJykpICE9IE5VTEwpCisJCQljcCsrOworCQllbHNlCisJCQljcCA9IGJ1ZjsKKwkJaSA9IHN0cmxlbihjcCk7CisJCWlmIChpID4gMykgeworCQkJdCA9IGNwICsgaSAtIDM7CisJCQlpZiAoIXN0cmNtcCh0LCAiLmtvIikpCisJCQkJKnQgPSAwOworCQl9CisJCWlmICghc3RyY21wKGNwLCBmc19uYW1lKSkgeworCQkJZmNsb3NlKGYpOworCQkJcmV0dXJuICgxKTsKKwkJfQorCX0KKwlmY2xvc2UoZik7CisjZW5kaWYgLyogX19saW51eF9fICovCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGlmIHdyaXRlIHJldHVybnMgYQorICogcGFydGlhbCB3cml0ZSwgb3IgYW4gRUdBSU4vRUlOVFIgZXJyb3IuCisgKi8KK2ludCB3cml0ZV9hbGwoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzc2l6ZV90IHJldDsKKwlpbnQgYyA9IDA7CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCXJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWlmICgoZXJybm8gPT0gRUFHQUlOKSB8fCAoZXJybm8gPT0gRUlOVFIpKQorCQkJCWNvbnRpbnVlOworCQkJcmV0dXJuIC0xOworCQl9CisJCWNvdW50IC09IHJldDsKKwkJYnVmICs9IHJldDsKKwkJYyArPSByZXQ7CisJfQorCXJldHVybiBjOworfQorCit2b2lkIGR1bXBfbW1wX21zZyhzdHJ1Y3QgbW1wX3N0cnVjdCAqbW1wLCBjb25zdCBjaGFyICptc2cpCit7CisKKwlpZiAobXNnKQorCQlwcmludGYoIk1NUCBjaGVjayBmYWlsZWQ6ICVzXG4iLCBtc2cpOworCWlmIChtbXApIHsKKwkJdGltZV90IHQgPSBtbXAtPm1tcF90aW1lOworCisJCXByaW50ZigiTU1QIGVycm9yIGluZm86IGxhc3QgdXBkYXRlOiAlcyBub2RlOiAlcyBkZXZpY2U6ICVzXG4iLAorCQkgICAgICAgY3RpbWUoJnQpLCBtbXAtPm1tcF9ub2RlbmFtZSwgbW1wLT5tbXBfYmRldm5hbWUpOworCX0KK30KKworZXJyY29kZV90IGUyZnNja19tbXBfdXBkYXRlKGV4dDJfZmlsc3lzIGZzKQoreworCWVycmNvZGVfdCByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfbW1wX3VwZGF0ZShmcyk7CisJaWYgKHJldHZhbCA9PSBFWFQyX0VUX01NUF9DSEFOR0VfQUJPUlQpCisJCWR1bXBfbW1wX21zZyhmcy0+bW1wX2NtcCwKKwkJCSAgICAgXygiVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOiB0aGUgZmlsZXN5c3RlbSBpcyAiCisJCQkgICAgICAgImJlaW5nIG1vZGlmaWVkIHdoaWxlIGZzY2sgaXMgcnVubmluZy5cbiIpKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgZTJmc2NrX3NldF9iaXRtYXBfdHlwZShleHQyX2ZpbHN5cyBmcywgdW5zaWduZWQgaW50IGRlZmF1bHRfdHlwZSwKKwkJCSAgICBjb25zdCBjaGFyICpwcm9maWxlX25hbWUsIHVuc2lnbmVkIGludCAqb2xkX3R5cGUpCit7CisJdW5zaWduZWQgdHlwZTsKKwllMmZzY2tfdCBjdHggPSAoZTJmc2NrX3QpIGZzLT5wcml2X2RhdGE7CisKKwlpZiAob2xkX3R5cGUpCisJCSpvbGRfdHlwZSA9IGZzLT5kZWZhdWx0X2JpdG1hcF90eXBlOworCXByb2ZpbGVfZ2V0X3VpbnQoY3R4LT5wcm9maWxlLCAiYml0bWFwcyIsIHByb2ZpbGVfbmFtZSwgMCwKKwkJCSBkZWZhdWx0X3R5cGUsICZ0eXBlKTsKKwlwcm9maWxlX2dldF91aW50KGN0eC0+cHJvZmlsZSwgImJpdG1hcHMiLCAiYWxsIiwgMCwgdHlwZSwgJnR5cGUpOworCWZzLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gdHlwZSA/IHR5cGUgOiBkZWZhdWx0X3R5cGU7Cit9CisKK2VycmNvZGVfdCBlMmZzY2tfYWxsb2NhdGVfaW5vZGVfYml0bWFwKGV4dDJfZmlsc3lzIGZzLCBjb25zdCBjaGFyICpkZXNjciwKKwkJCQkgICAgICAgaW50IGRlZnR5cGUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICAgIGV4dDJmc19pbm9kZV9iaXRtYXAgKnJldCkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCXVuc2lnbmVkIGludAlzYXZlX3R5cGU7CisKKwllMmZzY2tfc2V0X2JpdG1hcF90eXBlKGZzLCBkZWZ0eXBlLCBuYW1lLCAmc2F2ZV90eXBlKTsKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfaW5vZGVfYml0bWFwKGZzLCBkZXNjciwgcmV0KTsKKwlmcy0+ZGVmYXVsdF9iaXRtYXBfdHlwZSA9IHNhdmVfdHlwZTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZTJmc2NrX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcChleHQyX2ZpbHN5cyBmcywgY29uc3QgY2hhciAqZGVzY3IsCisJCQkJICAgICAgIGludCBkZWZ0eXBlLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICAgICBleHQyZnNfYmxvY2tfYml0bWFwICpyZXQpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwl1bnNpZ25lZCBpbnQJc2F2ZV90eXBlOworCisJZTJmc2NrX3NldF9iaXRtYXBfdHlwZShmcywgZGVmdHlwZSwgbmFtZSwgJnNhdmVfdHlwZSk7CisJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcChmcywgZGVzY3IsIHJldCk7CisJZnMtPmRlZmF1bHRfYml0bWFwX3R5cGUgPSBzYXZlX3R5cGU7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGUyZnNja19hbGxvY2F0ZV9zdWJjbHVzdGVyX2JpdG1hcChleHQyX2ZpbHN5cyBmcywgY29uc3QgY2hhciAqZGVzY3IsCisJCQkJCSAgICBpbnQgZGVmdHlwZSwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCSAgICBleHQyZnNfYmxvY2tfYml0bWFwICpyZXQpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwl1bnNpZ25lZCBpbnQJc2F2ZV90eXBlOworCisJZTJmc2NrX3NldF9iaXRtYXBfdHlwZShmcywgZGVmdHlwZSwgbmFtZSwgJnNhdmVfdHlwZSk7CisJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX3N1YmNsdXN0ZXJfYml0bWFwKGZzLCBkZXNjciwgcmV0KTsKKwlmcy0+ZGVmYXVsdF9iaXRtYXBfdHlwZSA9IHNhdmVfdHlwZTsKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzLmxzbSBiL2UyZnNwcm9ncy5sc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzYjM4MgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy5sc20KQEAgLTAsMCArMSwxNyBAQAorQmVnaW4zCitUaXRsZTogICAgICAgICAgRVhUMiBGaWxlc3lzdGVtIHV0aWxpdGllcworVmVyc2lvbjogICAgICAgIDEuNDIuMTMKK0VudGVyZWQtZGF0ZTogICAyMDE1LTA1LTE3CitEZXNjcmlwdGlvbjogICAgVGhlIGZpbGVzeXN0ZW0gdXRpbGl0aWVzIGZvciB0aGUgRVhUMiwgRVhUMywgYW5kIEVYVDQKKwkJZmlsZXN5c3RlbXMsIGluY2x1ZGluZyBlMmZzY2ssIG1rZTJmcywgZHVtcGUyZnMsIGFuZCBvdGhlcnMuCitLZXl3b3JkczogICAgICAgdXRpbGl0aWVzLCBmaWxlc3lzdGVtLCBFeHQyZnMsIGV4dDMsIGV4dDQKK0F1dGhvcjogICAgICAgICB0eXRzb0BtaXQuZWR1IChUaGVvZG9yZSBUc28pCitNYWludGFpbmVkLWJ5OiAgdHl0c29AbWl0LmVkdSAoVGhlb2RvcmUgVHNvKQorUHJpbWFyeS1zaXRlOiAgIGZ0cC5rZXJuZWwub3JnIC9wdWIvbGludXgva2VybmVsL3Blb3BsZS90eXRzby9lMmZzcHJvZ3MKKyAgICAgICAgICAgICAgICA2MzYwa0IgZTJmc3Byb2dzLTEuNDIuMTMudGFyLmd6CisgICAgICAgICAgICAgICAgNTkya0IgIGUyZnNwcm9ncy1saWJzLTEuNDIuMTMudGFyLmd6CisgICAgICAgICAgICAgICAgMWtCICAgIGUyZnNwcm9ncy0xLjQyLjEzLmxzbQorQWx0ZXJuYXRlLXNpdGU6IGRvd25sb2FkLnNvdXJjZWZvcmdlLm5ldCAvcHViL3NvdXJjZWZvcmdlL2UyZnNwcm9ncworUGxhdGZvcm1zOglsaW51eCAxLjIueC8xLjMueC8yLjAueC8yLjEueC8yLjIueC8yLjMueC8yLjQueC8yLjUueC8yLjYueC8zLngvNC54CitDb3B5aW5nLXBvbGljeTogR1BMLTIvTEdQTC0yCitFbmQKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy5zcGVjIGIvZTJmc3Byb2dzLnNwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ4ZWYwOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy5zcGVjCkBAIC0wLDAgKzEsMjQyIEBACislZGVmaW5lCV9yb290X3NiaW5kaXIJL3NiaW4KKyVkZWZpbmUJX3Jvb3RfbGliZGlyCS8le19saWJ9CislZGVmaW5lCV9yb290X2xvY2FsZWRpcgkvdXNyL3NoYXJlL2xvY2FsZQorJWRlZmluZQlfcm9vdF9ldGNkaXIJL2V0YworCitTdW1tYXJ5OiBVdGlsaXRpZXMgZm9yIG1hbmFnaW5nIGV4dDIvZXh0My9leHQ0IGZpbGVzeXN0ZW1zCitOYW1lOiBlMmZzcHJvZ3MKK1ZlcnNpb246IDEuNDIuMTEKK1JlbGVhc2U6IDAKK0xpY2Vuc2U6IEdQTHYyCitHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0Jhc2UKK1NvdXJjZTogIGZ0cDovL2Rvd25sb2FkLnNvdXJjZWZvcmdlLm5ldC9wdWIvc291cmNlZm9yZ2UvZTJmc3Byb2dzL2UyZnNwcm9ncy0le3ZlcnNpb259LnRhci5negorVXJsOiBodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8KK1ByZXJlcTogL3NiaW4vbGRjb25maWcKK0J1aWxkUm9vdDogJXtfdG1wcGF0aH0vJXtuYW1lfS1yb290CisKKyVkZXNjcmlwdGlvbgorVGhlIGUyZnNwcm9ncyBwYWNrYWdlIGNvbnRhaW5zIGEgbnVtYmVyIG9mIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcsCitjaGVja2luZywgbW9kaWZ5aW5nLCBhbmQgY29ycmVjdGluZyBhbnkgaW5jb25zaXN0ZW5jaWVzIGluIGV4dDIsIGV4dDMsCithbmQgZXh0NCBmaWxlc3lzdGVtcy4gIEUyZnNwcm9ncyBjb250YWlucyBlMmZzY2sgKHVzZWQgdG8gcmVwYWlyCitmaWxlc3lzdGVtIGluY29uc2lzdGVuY2llcyBhZnRlciBhbiB1bmNsZWFuIHNodXRkb3duKSwgbWtlMmZzICh1c2VkIHRvCitpbml0aWFsaXplIGEgcGFydGl0aW9uIHRvIGNvbnRhaW4gYW4gZW1wdHkgZXh0MiBmaWxlc3lzdGVtKSwgZGVidWdmcworKHVzZWQgdG8gZXhhbWluZSB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIG9mIGEgZmlsZXN5c3RlbSwgdG8gbWFudWFsbHkKK3JlcGFpciBhIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIG9yIHRvIGNyZWF0ZSB0ZXN0IGNhc2VzIGZvciBlMmZzY2spLAordHVuZTJmcyAodXNlZCB0byBtb2RpZnkgZmlsZXN5c3RlbSBwYXJhbWV0ZXJzKSwgcmVzaXplMmZzIHRvIGdyb3cgYW5kCitzaHJpbmsgdW5tb3VudGVkIGV4dDIgZmlsZXN5c3RlbXMsIGFuZCBtb3N0IG9mIHRoZSBvdGhlciBjb3JlIGV4dDJmcworZmlsZXN5c3RlbSB1dGlsaXRpZXMuCisKK1lvdSBzaG91bGQgaW5zdGFsbCB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgaWYgeW91IGFyZSB1c2luZyBhbnkgZXh0MiwKK2V4dDMsIG9yIGV4dDQgZmlsZXN5c3RlbXMgKGlmIHlvdSdyZSBub3Qgc3VyZSwgeW91IHByb2JhYmx5IHNob3VsZAoraW5zdGFsbCB0aGlzIHBhY2thZ2UpLiAgWW91IG1heSBhbHNvIG5lZWQgdG8gaW5zdGFsbCBpdCAoZXZlbiBpZiB5b3UKK2Rvbid0IHVzZSBleHQyL2V4dDMvZXh0NCkgZm9yIHRoZSBsaWJ1dWlkIGFuZCBsaWJibGtpZCBsaWJyYXJpZXMgYW5kCitmc2NrIHRvb2wgdGhhdCBhcmUgaW5jbHVkZWQgaGVyZS4KKworJXBhY2thZ2UgZGV2ZWwKK1N1bW1hcnk6IEV4dDIgZmlsZXN5c3RlbS1zcGVjaWZpYyBzdGF0aWMgbGlicmFyaWVzIGFuZCBoZWFkZXJzLgorR3JvdXA6IERldmVsb3BtZW50L0xpYnJhcmllcworUmVxdWlyZXM6IGUyZnNwcm9ncyA9ICV7dmVyc2lvbn0KK1ByZXJlcTogL3NiaW4vaW5zdGFsbC1pbmZvCisKKyVkZXNjcmlwdGlvbiBkZXZlbAorRTJmc3Byb2dzLWRldmVsIGNvbnRhaW5zIHRoZSBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcyBuZWVkZWQgdG8KK2RldmVsb3AgZXh0MiwgZXh0Mywgb3IgZXh0NCBmaWxlc3lzdGVtLXNwZWNpZmljIHByb2dyYW1zLgorCitZb3Ugc2hvdWxkIGluc3RhbGwgZTJmc3Byb2dzLWRldmVsIGlmIHlvdSB3YW50IHRvIGRldmVsb3AKK2V4dDIuIGV4dDMuIG9yIGV4dDQgZmlsZXN5c3RlbS1zcGVjaWZpYyBwcm9ncmFtcy4gIElmIHlvdSBpbnN0YWxsCitlMmZzcHJvZ3MtZGV2ZWwsIHlvdSdsbCBhbHNvIHdhbnQgdG8gaW5zdGFsbCBlMmZzcHJvZ3MuCisKKyVwYWNrYWdlIC1uIHV1aWRkCitTdW1tYXJ5OiBoZWxwZXIgZGFlbW9uIHRvIGd1YXJhbnRlZSB1bmlxdWVuZXNzIG9mIHRpbWUtYmFzZWQgVVVJRHMKK0dyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucworTGljZW5zZTogR1BMdjIKK1JlcXVpcmVzOiBlMmZzcHJvZ3MgPSAle3ZlcnNpb259CitSZXF1aXJlcyhwcmUpOiBzaGFkb3ctdXRpbHMKKworJWRlc2NyaXB0aW9uIC1uIHV1aWRkCitUaGUgdXVpZGQgcGFja2FnZSBjb250YWlucyBhIHVzZXJzcGFjZSBkYWVtb24gKHV1aWRkKSB3aGljaCBndWFyYW50ZWVzCit1bmlxdWVuZXNzIG9mIHRpbWUtYmFzZWQgVVVJRCBnZW5lcmF0aW9uIGV2ZW4gYXQgdmVyeSBoaWdoIHJhdGVzIG9uCitTTVAgc3lzdGVtcy4KKworJXByZXAKKyVzZXR1cAorCislYnVpbGQKKyVjb25maWd1cmUgLS1lbmFibGUtZWxmLXNobGlicyAtLWVuYWJsZS1ubHMgXAorCSV7P2V4dHJhX2NvbmZpZ19mbGFnczolZXh0cmFfY29uZmlnX2ZsYWdzfQorbWFrZQorbWFrZSBjaGVjaworCislaW5zdGFsbAorcm0gLXJmICRSUE1fQlVJTERfUk9PVAorZXhwb3J0IFBBVEg9L3NiaW46JFBBVEgKK21ha2UgaW5zdGFsbCBpbnN0YWxsLWxpYnMgREVTVERJUj0iJFJQTV9CVUlMRF9ST09UIiBcCisJcm9vdF9zYmluZGlyPSV7X3Jvb3Rfc2JpbmRpcn0gcm9vdF9saWJkaXI9JXtfcm9vdF9saWJkaXJ9Cisvc2Jpbi9sZGNvbmZpZyAtbiAke1JQTV9CVUlMRF9ST09UfSV7X2xpYmRpcn0KKworIyBBZGQgYSBkaXIgdGhhdCB1dWlkZCBuZWVkcyB0aGF0IHRoZSBNYWtlZmlsZXMgZG9uJ3QgY3JlYXRlCitpbnN0YWxsIC1kICRSUE1fQlVJTERfUk9PVC92YXIvbGliL2xpYnV1aWQKKworJWZpbmRfbGFuZyAle25hbWV9CisKKyVjbGVhbgorcm0gLXJmICRSUE1fQlVJTERfUk9PVAorCislcG9zdCAtcCAvc2Jpbi9sZGNvbmZpZworCislcG9zdHVuIC1wIC9zYmluL2xkY29uZmlnCisKKyVwb3N0IGRldmVsCitpZiBbIC14IC9zYmluL2luc3RhbGwtaW5mbyAtYSAtZiAle19pbmZvZGlyfS9saWJleHQyZnMuaW5mby5neiBdOyB0aGVuCisgICAgL3NiaW4vaW5zdGFsbC1pbmZvICV7X2luZm9kaXJ9L2xpYmV4dDJmcy5pbmZvLmd6ICV7X2luZm9kaXJ9L2RpcgorZmkKK2V4aXQgMAorCislcG9zdHVuIGRldmVsCitpZiBbICQxID0gMCAtYSAteCAvc2Jpbi9pbnN0YWxsLWluZm8gLWEgLWYgJXtfaW5mb2Rpcn0vbGliZXh0MmZzLmluZm8uZ3ogXTsgdGhlbgorICAgL3NiaW4vaW5zdGFsbC1pbmZvIC0tZGVsZXRlICV7X2luZm9kaXJ9L2xpYmV4dDJmcy5pbmZvLmd6ICV7X2luZm9kaXJ9L2RpcgorZmkKK2V4aXQgMAorCislcHJlIC1uIHV1aWRkCitnZXRlbnQgZ3JvdXAgdXVpZGQgPi9kZXYvbnVsbCB8fCBncm91cGFkZCAtciB1dWlkZAorZ2V0ZW50IHBhc3N3ZCB1dWlkZCA+L2Rldi9udWxsIHx8IFwKK3VzZXJhZGQgLXIgLWcgdXVpZGQgLWQgL3Zhci9saWIvbGlidXVpZCAtcyAvc2Jpbi9ub2xvZ2luIFwKKyAgICAtYyAiVVVJRCBnZW5lcmF0b3IgaGVscGVyIGRhZW1vbiIgdXVpZGQKK2V4aXQgMAorCislZmlsZXMgLWYgJXtuYW1lfS5sYW5nCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVkb2MgUkVBRE1FIFJFTEVBU0UtTk9URVMKKworJXtfcm9vdF9zYmluZGlyfS9iYWRibG9ja3MKKyV7X3Jvb3Rfc2JpbmRpcn0vYmxraWQKKyV7X3Jvb3Rfc2JpbmRpcn0vZGVidWdmcworJXtfcm9vdF9zYmluZGlyfS9kdW1wZTJmcworJXtfcm9vdF9zYmluZGlyfS9lMmZzY2sKKyV7X3Jvb3Rfc2JpbmRpcn0vZTJpbWFnZQorJXtfcm9vdF9zYmluZGlyfS9lMmxhYmVsCisle19yb290X3NiaW5kaXJ9L2UydW5kbworJXtfcm9vdF9zYmluZGlyfS9maW5kZnMKKyV7X3Jvb3Rfc2JpbmRpcn0vZnNjaworJXtfcm9vdF9zYmluZGlyfS9mc2NrLmV4dDIKKyV7X3Jvb3Rfc2JpbmRpcn0vZnNjay5leHQzCisle19yb290X3NiaW5kaXJ9L2ZzY2suZXh0NAorJXtfcm9vdF9zYmluZGlyfS9mc2NrLmV4dDRkZXYKKyV7X3Jvb3Rfc2JpbmRpcn0vbG9nc2F2ZQorJXtfcm9vdF9zYmluZGlyfS9ta2UyZnMKKyV7X3Jvb3RfZXRjZGlyfS9ta2UyZnMuY29uZgorJXtfcm9vdF9zYmluZGlyfS9ta2ZzLmV4dDIKKyV7X3Jvb3Rfc2JpbmRpcn0vbWtmcy5leHQzCisle19yb290X3NiaW5kaXJ9L21rZnMuZXh0NAorJXtfcm9vdF9zYmluZGlyfS9ta2ZzLmV4dDRkZXYKKyV7X3Jvb3Rfc2JpbmRpcn0vcmVzaXplMmZzCisle19yb290X3NiaW5kaXJ9L3R1bmUyZnMKKyV7X3NiaW5kaXJ9L2ZpbGVmcmFnCisle19zYmluZGlyfS9ta2xvc3QrZm91bmQKKyV7X3NiaW5kaXJ9L2UyZnJlZWZyYWcKKworJXtfcm9vdF9saWJkaXJ9L2xpYmJsa2lkLnNvLioKKyV7X3Jvb3RfbGliZGlyfS9saWJjb21fZXJyLnNvLioKKyV7X3Jvb3RfbGliZGlyfS9saWJlMnAuc28uKgorJXtfcm9vdF9saWJkaXJ9L2xpYmV4dDJmcy5zby4qCisle19yb290X2xpYmRpcn0vbGlic3Muc28uKgorJXtfcm9vdF9saWJkaXJ9L2xpYnV1aWQuc28uKgorCisle19saWJkaXJ9L2UyaW5pdHJkX2hlbHBlcgorCisle19iaW5kaXJ9L2NoYXR0cgorJXtfYmluZGlyfS9sc2F0dHIKKyV7X2JpbmRpcn0vdXVpZGdlbgorJXtfbWFuZGlyfS9tYW4xL2NoYXR0ci4xKgorJXtfbWFuZGlyfS9tYW4xL2xzYXR0ci4xKgorJXtfbWFuZGlyfS9tYW4xL3V1aWRnZW4uMSoKKworJXtfbWFuZGlyfS9tYW41L2UyZnNjay5jb25mLjUqCisle19tYW5kaXJ9L21hbjUvbWtlMmZzLmNvbmYuNSoKKworJXtfbWFuZGlyfS9tYW44L2JhZGJsb2Nrcy44KgorJXtfbWFuZGlyfS9tYW44L2Jsa2lkLjgqCisle19tYW5kaXJ9L21hbjgvZGVidWdmcy44KgorJXtfbWFuZGlyfS9tYW44L2R1bXBlMmZzLjgqCisle19tYW5kaXJ9L21hbjgvZTJmc2NrLjgqCisle19tYW5kaXJ9L21hbjgvZmluZGZzLjgqCisle19tYW5kaXJ9L21hbjgvZnNjay5leHQyLjgqCisle19tYW5kaXJ9L21hbjgvZnNjay5leHQzLjgqCisle19tYW5kaXJ9L21hbjgvZnNjay5leHQ0LjgqCisle19tYW5kaXJ9L21hbjgvZnNjay5leHQ0ZGV2LjgqCisle19tYW5kaXJ9L21hbjgvZTJpbWFnZS44KgorJXtfbWFuZGlyfS9tYW44L2UybGFiZWwuOCoKKyV7X21hbmRpcn0vbWFuOC9lMnVuZG8uOCoKKyV7X21hbmRpcn0vbWFuOC9mc2NrLjgqCisle19tYW5kaXJ9L21hbjgvbG9nc2F2ZS44KgorJXtfbWFuZGlyfS9tYW44L21rZTJmcy44KgorJXtfbWFuZGlyfS9tYW44L21rZnMuZXh0Mi44KgorJXtfbWFuZGlyfS9tYW44L21rZnMuZXh0My44KgorJXtfbWFuZGlyfS9tYW44L21rZnMuZXh0NC44KgorJXtfbWFuZGlyfS9tYW44L21rZnMuZXh0NGRldi44KgorJXtfbWFuZGlyfS9tYW44L21rbG9zdCtmb3VuZC44KgorJXtfbWFuZGlyfS9tYW44L3Jlc2l6ZTJmcy44KgorJXtfbWFuZGlyfS9tYW44L3R1bmUyZnMuOCoKKyV7X21hbmRpcn0vbWFuOC9maWxlZnJhZy44KgorJXtfbWFuZGlyfS9tYW44L2UyZnJlZWZyYWcuOCoKKworJWZpbGVzIGRldmVsCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyV7X2luZm9kaXJ9L2xpYmV4dDJmcy5pbmZvKgorJXtfYmluZGlyfS9jb21waWxlX2V0Cisle19iaW5kaXJ9L21rX2NtZHMKKworJXtfbGliZGlyfS9saWJibGtpZC5hCisle19saWJkaXJ9L2xpYmJsa2lkLnNvCisle19saWJkaXJ9L2xpYmNvbV9lcnIuYQorJXtfbGliZGlyfS9saWJjb21fZXJyLnNvCisle19saWJkaXJ9L2xpYmUycC5hCisle19saWJkaXJ9L2xpYmUycC5zbworJXtfbGliZGlyfS9saWJleHQyZnMuYQorJXtfbGliZGlyfS9saWJleHQyZnMuc28KKyV7X2xpYmRpcn0vbGlic3MuYQorJXtfbGliZGlyfS9saWJzcy5zbworJXtfbGliZGlyfS9saWJ1dWlkLmEKKyV7X2xpYmRpcn0vbGlidXVpZC5zbworCisle19saWJkaXJ9L3BrZ2NvbmZpZy9ibGtpZC5wYworJXtfbGliZGlyfS9wa2djb25maWcvY29tX2Vyci5wYworJXtfbGliZGlyfS9wa2djb25maWcvZTJwLnBjCisle19saWJkaXJ9L3BrZ2NvbmZpZy9leHQyZnMucGMKKyV7X2xpYmRpcn0vcGtnY29uZmlnL3NzLnBjCisle19saWJkaXJ9L3BrZ2NvbmZpZy91dWlkLnBjCisKKyV7X2RhdGFkaXJ9L2V0Cisle19kYXRhZGlyfS9zcworJXtfaW5jbHVkZWRpcn0vYmxraWQKKyV7X2luY2x1ZGVkaXJ9L2UycAorJXtfaW5jbHVkZWRpcn0vZXQKKyV7X2luY2x1ZGVkaXJ9L2NvbV9lcnIuaAorJXtfaW5jbHVkZWRpcn0vZXh0MmZzCisle19pbmNsdWRlZGlyfS9zcworJXtfaW5jbHVkZWRpcn0vdXVpZAorJXtfbWFuZGlyfS9tYW4xL2NvbXBpbGVfZXQuMSoKKyV7X21hbmRpcn0vbWFuMS9ta19jbWRzLjEqCisle19tYW5kaXJ9L21hbjMvY29tX2Vyci4zKgorJXtfbWFuZGlyfS9tYW4zL2xpYmJsa2lkLjMqCisle19tYW5kaXJ9L21hbjMvdXVpZC4zKgorJXtfbWFuZGlyfS9tYW4zL3V1aWRfY2xlYXIuMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX2NvbXBhcmUuMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX2NvcHkuMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX2dlbmVyYXRlLjMqCisle19tYW5kaXJ9L21hbjMvdXVpZF9nZW5lcmF0ZV9yYW5kb20uMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX2dlbmVyYXRlX3RpbWUuMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX2lzX251bGwuMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX3BhcnNlLjMqCisle19tYW5kaXJ9L21hbjMvdXVpZF90aW1lLjMqCisle19tYW5kaXJ9L21hbjMvdXVpZF91bnBhcnNlLjMqCisKKyVmaWxlcyAtbiB1dWlkZAorJWRlZmF0dHIoLSxyb290LHJvb3QpCisjIGlmIHlvdSB3YW50IHRvIHJ1biB2aWEgaW5pdAorIyAvZXRjL2luaXQuZC91dWlkZAorJXtfbWFuZGlyfS9tYW44L3V1aWRkLjgqCislYXR0cig2NzU1LCB1dWlkZCwgdXVpZGQpICV7X3NiaW5kaXJ9L3V1aWRkCislZGlyICVhdHRyKDI3NzUsIHV1aWRkLCB1dWlkZCkgL3Zhci9saWIvbGlidXVpZAorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3Muc3BlYy5pbiBiL2UyZnNwcm9ncy5zcGVjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxODhiNzUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3Muc3BlYy5pbgpAQCAtMCwwICsxLDI0MiBAQAorJWRlZmluZQlfcm9vdF9zYmluZGlyCS9zYmluCislZGVmaW5lCV9yb290X2xpYmRpcgkvJXtfbGlifQorJWRlZmluZQlfcm9vdF9sb2NhbGVkaXIJL3Vzci9zaGFyZS9sb2NhbGUKKyVkZWZpbmUJX3Jvb3RfZXRjZGlyCS9ldGMKKworU3VtbWFyeTogVXRpbGl0aWVzIGZvciBtYW5hZ2luZyBleHQyL2V4dDMvZXh0NCBmaWxlc3lzdGVtcworTmFtZTogZTJmc3Byb2dzCitWZXJzaW9uOiBARTJGU1BST0dTX1BLR1ZFUkAKK1JlbGVhc2U6IDAKK0xpY2Vuc2U6IEdQTHYyCitHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0Jhc2UKK1NvdXJjZTogIGZ0cDovL2Rvd25sb2FkLnNvdXJjZWZvcmdlLm5ldC9wdWIvc291cmNlZm9yZ2UvZTJmc3Byb2dzL2UyZnNwcm9ncy0le3ZlcnNpb259LnRhci5negorVXJsOiBodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8KK1ByZXJlcTogL3NiaW4vbGRjb25maWcKK0J1aWxkUm9vdDogJXtfdG1wcGF0aH0vJXtuYW1lfS1yb290CisKKyVkZXNjcmlwdGlvbgorVGhlIGUyZnNwcm9ncyBwYWNrYWdlIGNvbnRhaW5zIGEgbnVtYmVyIG9mIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcsCitjaGVja2luZywgbW9kaWZ5aW5nLCBhbmQgY29ycmVjdGluZyBhbnkgaW5jb25zaXN0ZW5jaWVzIGluIGV4dDIsIGV4dDMsCithbmQgZXh0NCBmaWxlc3lzdGVtcy4gIEUyZnNwcm9ncyBjb250YWlucyBlMmZzY2sgKHVzZWQgdG8gcmVwYWlyCitmaWxlc3lzdGVtIGluY29uc2lzdGVuY2llcyBhZnRlciBhbiB1bmNsZWFuIHNodXRkb3duKSwgbWtlMmZzICh1c2VkIHRvCitpbml0aWFsaXplIGEgcGFydGl0aW9uIHRvIGNvbnRhaW4gYW4gZW1wdHkgZXh0MiBmaWxlc3lzdGVtKSwgZGVidWdmcworKHVzZWQgdG8gZXhhbWluZSB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIG9mIGEgZmlsZXN5c3RlbSwgdG8gbWFudWFsbHkKK3JlcGFpciBhIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIG9yIHRvIGNyZWF0ZSB0ZXN0IGNhc2VzIGZvciBlMmZzY2spLAordHVuZTJmcyAodXNlZCB0byBtb2RpZnkgZmlsZXN5c3RlbSBwYXJhbWV0ZXJzKSwgcmVzaXplMmZzIHRvIGdyb3cgYW5kCitzaHJpbmsgdW5tb3VudGVkIGV4dDIgZmlsZXN5c3RlbXMsIGFuZCBtb3N0IG9mIHRoZSBvdGhlciBjb3JlIGV4dDJmcworZmlsZXN5c3RlbSB1dGlsaXRpZXMuCisKK1lvdSBzaG91bGQgaW5zdGFsbCB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgaWYgeW91IGFyZSB1c2luZyBhbnkgZXh0MiwKK2V4dDMsIG9yIGV4dDQgZmlsZXN5c3RlbXMgKGlmIHlvdSdyZSBub3Qgc3VyZSwgeW91IHByb2JhYmx5IHNob3VsZAoraW5zdGFsbCB0aGlzIHBhY2thZ2UpLiAgWW91IG1heSBhbHNvIG5lZWQgdG8gaW5zdGFsbCBpdCAoZXZlbiBpZiB5b3UKK2Rvbid0IHVzZSBleHQyL2V4dDMvZXh0NCkgZm9yIHRoZSBsaWJ1dWlkIGFuZCBsaWJibGtpZCBsaWJyYXJpZXMgYW5kCitmc2NrIHRvb2wgdGhhdCBhcmUgaW5jbHVkZWQgaGVyZS4KKworJXBhY2thZ2UgZGV2ZWwKK1N1bW1hcnk6IEV4dDIgZmlsZXN5c3RlbS1zcGVjaWZpYyBzdGF0aWMgbGlicmFyaWVzIGFuZCBoZWFkZXJzLgorR3JvdXA6IERldmVsb3BtZW50L0xpYnJhcmllcworUmVxdWlyZXM6IGUyZnNwcm9ncyA9ICV7dmVyc2lvbn0KK1ByZXJlcTogL3NiaW4vaW5zdGFsbC1pbmZvCisKKyVkZXNjcmlwdGlvbiBkZXZlbAorRTJmc3Byb2dzLWRldmVsIGNvbnRhaW5zIHRoZSBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcyBuZWVkZWQgdG8KK2RldmVsb3AgZXh0MiwgZXh0Mywgb3IgZXh0NCBmaWxlc3lzdGVtLXNwZWNpZmljIHByb2dyYW1zLgorCitZb3Ugc2hvdWxkIGluc3RhbGwgZTJmc3Byb2dzLWRldmVsIGlmIHlvdSB3YW50IHRvIGRldmVsb3AKK2V4dDIuIGV4dDMuIG9yIGV4dDQgZmlsZXN5c3RlbS1zcGVjaWZpYyBwcm9ncmFtcy4gIElmIHlvdSBpbnN0YWxsCitlMmZzcHJvZ3MtZGV2ZWwsIHlvdSdsbCBhbHNvIHdhbnQgdG8gaW5zdGFsbCBlMmZzcHJvZ3MuCisKKyVwYWNrYWdlIC1uIHV1aWRkCitTdW1tYXJ5OiBoZWxwZXIgZGFlbW9uIHRvIGd1YXJhbnRlZSB1bmlxdWVuZXNzIG9mIHRpbWUtYmFzZWQgVVVJRHMKK0dyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucworTGljZW5zZTogR1BMdjIKK1JlcXVpcmVzOiBlMmZzcHJvZ3MgPSAle3ZlcnNpb259CitSZXF1aXJlcyhwcmUpOiBzaGFkb3ctdXRpbHMKKworJWRlc2NyaXB0aW9uIC1uIHV1aWRkCitUaGUgdXVpZGQgcGFja2FnZSBjb250YWlucyBhIHVzZXJzcGFjZSBkYWVtb24gKHV1aWRkKSB3aGljaCBndWFyYW50ZWVzCit1bmlxdWVuZXNzIG9mIHRpbWUtYmFzZWQgVVVJRCBnZW5lcmF0aW9uIGV2ZW4gYXQgdmVyeSBoaWdoIHJhdGVzIG9uCitTTVAgc3lzdGVtcy4KKworJXByZXAKKyVzZXR1cAorCislYnVpbGQKKyVjb25maWd1cmUgLS1lbmFibGUtZWxmLXNobGlicyAtLWVuYWJsZS1ubHMgXAorCSV7P2V4dHJhX2NvbmZpZ19mbGFnczolZXh0cmFfY29uZmlnX2ZsYWdzfQorbWFrZQorbWFrZSBjaGVjaworCislaW5zdGFsbAorcm0gLXJmICRSUE1fQlVJTERfUk9PVAorZXhwb3J0IFBBVEg9L3NiaW46JFBBVEgKK21ha2UgaW5zdGFsbCBpbnN0YWxsLWxpYnMgREVTVERJUj0iJFJQTV9CVUlMRF9ST09UIiBcCisJcm9vdF9zYmluZGlyPSV7X3Jvb3Rfc2JpbmRpcn0gcm9vdF9saWJkaXI9JXtfcm9vdF9saWJkaXJ9Cisvc2Jpbi9sZGNvbmZpZyAtbiAke1JQTV9CVUlMRF9ST09UfSV7X2xpYmRpcn0KKworIyBBZGQgYSBkaXIgdGhhdCB1dWlkZCBuZWVkcyB0aGF0IHRoZSBNYWtlZmlsZXMgZG9uJ3QgY3JlYXRlCitpbnN0YWxsIC1kICRSUE1fQlVJTERfUk9PVC92YXIvbGliL2xpYnV1aWQKKworJWZpbmRfbGFuZyAle25hbWV9CisKKyVjbGVhbgorcm0gLXJmICRSUE1fQlVJTERfUk9PVAorCislcG9zdCAtcCAvc2Jpbi9sZGNvbmZpZworCislcG9zdHVuIC1wIC9zYmluL2xkY29uZmlnCisKKyVwb3N0IGRldmVsCitpZiBbIC14IC9zYmluL2luc3RhbGwtaW5mbyAtYSAtZiAle19pbmZvZGlyfS9saWJleHQyZnMuaW5mby5neiBdOyB0aGVuCisgICAgL3NiaW4vaW5zdGFsbC1pbmZvICV7X2luZm9kaXJ9L2xpYmV4dDJmcy5pbmZvLmd6ICV7X2luZm9kaXJ9L2RpcgorZmkKK2V4aXQgMAorCislcG9zdHVuIGRldmVsCitpZiBbICQxID0gMCAtYSAteCAvc2Jpbi9pbnN0YWxsLWluZm8gLWEgLWYgJXtfaW5mb2Rpcn0vbGliZXh0MmZzLmluZm8uZ3ogXTsgdGhlbgorICAgL3NiaW4vaW5zdGFsbC1pbmZvIC0tZGVsZXRlICV7X2luZm9kaXJ9L2xpYmV4dDJmcy5pbmZvLmd6ICV7X2luZm9kaXJ9L2RpcgorZmkKK2V4aXQgMAorCislcHJlIC1uIHV1aWRkCitnZXRlbnQgZ3JvdXAgdXVpZGQgPi9kZXYvbnVsbCB8fCBncm91cGFkZCAtciB1dWlkZAorZ2V0ZW50IHBhc3N3ZCB1dWlkZCA+L2Rldi9udWxsIHx8IFwKK3VzZXJhZGQgLXIgLWcgdXVpZGQgLWQgL3Zhci9saWIvbGlidXVpZCAtcyAvc2Jpbi9ub2xvZ2luIFwKKyAgICAtYyAiVVVJRCBnZW5lcmF0b3IgaGVscGVyIGRhZW1vbiIgdXVpZGQKK2V4aXQgMAorCislZmlsZXMgLWYgJXtuYW1lfS5sYW5nCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVkb2MgUkVBRE1FIFJFTEVBU0UtTk9URVMKKworJXtfcm9vdF9zYmluZGlyfS9iYWRibG9ja3MKKyV7X3Jvb3Rfc2JpbmRpcn0vYmxraWQKKyV7X3Jvb3Rfc2JpbmRpcn0vZGVidWdmcworJXtfcm9vdF9zYmluZGlyfS9kdW1wZTJmcworJXtfcm9vdF9zYmluZGlyfS9lMmZzY2sKKyV7X3Jvb3Rfc2JpbmRpcn0vZTJpbWFnZQorJXtfcm9vdF9zYmluZGlyfS9lMmxhYmVsCisle19yb290X3NiaW5kaXJ9L2UydW5kbworJXtfcm9vdF9zYmluZGlyfS9maW5kZnMKKyV7X3Jvb3Rfc2JpbmRpcn0vZnNjaworJXtfcm9vdF9zYmluZGlyfS9mc2NrLmV4dDIKKyV7X3Jvb3Rfc2JpbmRpcn0vZnNjay5leHQzCisle19yb290X3NiaW5kaXJ9L2ZzY2suZXh0NAorJXtfcm9vdF9zYmluZGlyfS9mc2NrLmV4dDRkZXYKKyV7X3Jvb3Rfc2JpbmRpcn0vbG9nc2F2ZQorJXtfcm9vdF9zYmluZGlyfS9ta2UyZnMKKyV7X3Jvb3RfZXRjZGlyfS9ta2UyZnMuY29uZgorJXtfcm9vdF9zYmluZGlyfS9ta2ZzLmV4dDIKKyV7X3Jvb3Rfc2JpbmRpcn0vbWtmcy5leHQzCisle19yb290X3NiaW5kaXJ9L21rZnMuZXh0NAorJXtfcm9vdF9zYmluZGlyfS9ta2ZzLmV4dDRkZXYKKyV7X3Jvb3Rfc2JpbmRpcn0vcmVzaXplMmZzCisle19yb290X3NiaW5kaXJ9L3R1bmUyZnMKKyV7X3NiaW5kaXJ9L2ZpbGVmcmFnCisle19zYmluZGlyfS9ta2xvc3QrZm91bmQKKyV7X3NiaW5kaXJ9L2UyZnJlZWZyYWcKKworJXtfcm9vdF9saWJkaXJ9L2xpYmJsa2lkLnNvLioKKyV7X3Jvb3RfbGliZGlyfS9saWJjb21fZXJyLnNvLioKKyV7X3Jvb3RfbGliZGlyfS9saWJlMnAuc28uKgorJXtfcm9vdF9saWJkaXJ9L2xpYmV4dDJmcy5zby4qCisle19yb290X2xpYmRpcn0vbGlic3Muc28uKgorJXtfcm9vdF9saWJkaXJ9L2xpYnV1aWQuc28uKgorCisle19saWJkaXJ9L2UyaW5pdHJkX2hlbHBlcgorCisle19iaW5kaXJ9L2NoYXR0cgorJXtfYmluZGlyfS9sc2F0dHIKKyV7X2JpbmRpcn0vdXVpZGdlbgorJXtfbWFuZGlyfS9tYW4xL2NoYXR0ci4xKgorJXtfbWFuZGlyfS9tYW4xL2xzYXR0ci4xKgorJXtfbWFuZGlyfS9tYW4xL3V1aWRnZW4uMSoKKworJXtfbWFuZGlyfS9tYW41L2UyZnNjay5jb25mLjUqCisle19tYW5kaXJ9L21hbjUvbWtlMmZzLmNvbmYuNSoKKworJXtfbWFuZGlyfS9tYW44L2JhZGJsb2Nrcy44KgorJXtfbWFuZGlyfS9tYW44L2Jsa2lkLjgqCisle19tYW5kaXJ9L21hbjgvZGVidWdmcy44KgorJXtfbWFuZGlyfS9tYW44L2R1bXBlMmZzLjgqCisle19tYW5kaXJ9L21hbjgvZTJmc2NrLjgqCisle19tYW5kaXJ9L21hbjgvZmluZGZzLjgqCisle19tYW5kaXJ9L21hbjgvZnNjay5leHQyLjgqCisle19tYW5kaXJ9L21hbjgvZnNjay5leHQzLjgqCisle19tYW5kaXJ9L21hbjgvZnNjay5leHQ0LjgqCisle19tYW5kaXJ9L21hbjgvZnNjay5leHQ0ZGV2LjgqCisle19tYW5kaXJ9L21hbjgvZTJpbWFnZS44KgorJXtfbWFuZGlyfS9tYW44L2UybGFiZWwuOCoKKyV7X21hbmRpcn0vbWFuOC9lMnVuZG8uOCoKKyV7X21hbmRpcn0vbWFuOC9mc2NrLjgqCisle19tYW5kaXJ9L21hbjgvbG9nc2F2ZS44KgorJXtfbWFuZGlyfS9tYW44L21rZTJmcy44KgorJXtfbWFuZGlyfS9tYW44L21rZnMuZXh0Mi44KgorJXtfbWFuZGlyfS9tYW44L21rZnMuZXh0My44KgorJXtfbWFuZGlyfS9tYW44L21rZnMuZXh0NC44KgorJXtfbWFuZGlyfS9tYW44L21rZnMuZXh0NGRldi44KgorJXtfbWFuZGlyfS9tYW44L21rbG9zdCtmb3VuZC44KgorJXtfbWFuZGlyfS9tYW44L3Jlc2l6ZTJmcy44KgorJXtfbWFuZGlyfS9tYW44L3R1bmUyZnMuOCoKKyV7X21hbmRpcn0vbWFuOC9maWxlZnJhZy44KgorJXtfbWFuZGlyfS9tYW44L2UyZnJlZWZyYWcuOCoKKworJWZpbGVzIGRldmVsCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyV7X2luZm9kaXJ9L2xpYmV4dDJmcy5pbmZvKgorJXtfYmluZGlyfS9jb21waWxlX2V0Cisle19iaW5kaXJ9L21rX2NtZHMKKworJXtfbGliZGlyfS9saWJibGtpZC5hCisle19saWJkaXJ9L2xpYmJsa2lkLnNvCisle19saWJkaXJ9L2xpYmNvbV9lcnIuYQorJXtfbGliZGlyfS9saWJjb21fZXJyLnNvCisle19saWJkaXJ9L2xpYmUycC5hCisle19saWJkaXJ9L2xpYmUycC5zbworJXtfbGliZGlyfS9saWJleHQyZnMuYQorJXtfbGliZGlyfS9saWJleHQyZnMuc28KKyV7X2xpYmRpcn0vbGlic3MuYQorJXtfbGliZGlyfS9saWJzcy5zbworJXtfbGliZGlyfS9saWJ1dWlkLmEKKyV7X2xpYmRpcn0vbGlidXVpZC5zbworCisle19saWJkaXJ9L3BrZ2NvbmZpZy9ibGtpZC5wYworJXtfbGliZGlyfS9wa2djb25maWcvY29tX2Vyci5wYworJXtfbGliZGlyfS9wa2djb25maWcvZTJwLnBjCisle19saWJkaXJ9L3BrZ2NvbmZpZy9leHQyZnMucGMKKyV7X2xpYmRpcn0vcGtnY29uZmlnL3NzLnBjCisle19saWJkaXJ9L3BrZ2NvbmZpZy91dWlkLnBjCisKKyV7X2RhdGFkaXJ9L2V0Cisle19kYXRhZGlyfS9zcworJXtfaW5jbHVkZWRpcn0vYmxraWQKKyV7X2luY2x1ZGVkaXJ9L2UycAorJXtfaW5jbHVkZWRpcn0vZXQKKyV7X2luY2x1ZGVkaXJ9L2NvbV9lcnIuaAorJXtfaW5jbHVkZWRpcn0vZXh0MmZzCisle19pbmNsdWRlZGlyfS9zcworJXtfaW5jbHVkZWRpcn0vdXVpZAorJXtfbWFuZGlyfS9tYW4xL2NvbXBpbGVfZXQuMSoKKyV7X21hbmRpcn0vbWFuMS9ta19jbWRzLjEqCisle19tYW5kaXJ9L21hbjMvY29tX2Vyci4zKgorJXtfbWFuZGlyfS9tYW4zL2xpYmJsa2lkLjMqCisle19tYW5kaXJ9L21hbjMvdXVpZC4zKgorJXtfbWFuZGlyfS9tYW4zL3V1aWRfY2xlYXIuMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX2NvbXBhcmUuMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX2NvcHkuMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX2dlbmVyYXRlLjMqCisle19tYW5kaXJ9L21hbjMvdXVpZF9nZW5lcmF0ZV9yYW5kb20uMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX2dlbmVyYXRlX3RpbWUuMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX2lzX251bGwuMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX3BhcnNlLjMqCisle19tYW5kaXJ9L21hbjMvdXVpZF90aW1lLjMqCisle19tYW5kaXJ9L21hbjMvdXVpZF91bnBhcnNlLjMqCisKKyVmaWxlcyAtbiB1dWlkZAorJWRlZmF0dHIoLSxyb290LHJvb3QpCisjIGlmIHlvdSB3YW50IHRvIHJ1biB2aWEgaW5pdAorIyAvZXRjL2luaXQuZC91dWlkZAorJXtfbWFuZGlyfS9tYW44L3V1aWRkLjgqCislYXR0cig2NzU1LCB1dWlkZCwgdXVpZGQpICV7X3NiaW5kaXJ9L3V1aWRkCislZGlyICVhdHRyKDI3NzUsIHV1aWRkLCB1dWlkZCkgL3Zhci9saWIvbGlidXVpZAorCmRpZmYgLS1naXQgYS9leHQyZWQvQ09QWVJJR0hUIGIvZXh0MmVkL0NPUFlSSUdIVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTg1ZWI2Ci0tLSAvZGV2L251bGwKKysrIGIvZXh0MmVkL0NPUFlSSUdIVApAQCAtMCwwICsxLDM0NiBAQAorRVhUMkVEIGlzIGhlcmVieSBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0ZvbGxvd3MgdGhlIEdOVSBsaWNlbnNlLgorCitHYWRpIE94bWFuLCBBdWd1c3QgMTk5NQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgICAgICAgICAgICAgICAgIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorDAorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisMCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisMCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorCUFwcGVuZGl4OiBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDE5eXkgIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgMTl5eSBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvZXh0MmVkL01ha2VmaWxlLmluIGIvZXh0MmVkL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNGNjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9leHQyZWQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw5NSBAQAorIworIyBTdGFuZGFyZCBlMmZzcHJvZ3MgcHJvbG9ndWUuLi4uCisjCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACit0b3BfYnVpbGRkaXIgPSAuLgorbXlfZGlyID0gZXh0MmVkCitJTlNUQUxMID0gQElOU1RBTExACisKK0BNQ09ORklHQAorCitQUk9HUz0JCWV4dDJlZAorTUFOUEFHRVM9CWV4dDJlZC44CisKK0RPQ19ESVIJCT0JJGRhdGFkaXIvZG9jL2V4dDJlZAorCitMSUJTCQk9CS1sbmN1cnNlcyAkKExJQkVYVDJGUykKKworU1JDUz0JJChzcmNkaXIpL21haW4uYyAkKHNyY2RpcikvaW5pdC5jICQoc3JjZGlyKS9nZW5lcmFsX2NvbS5jICAgICAgIFwKKwkkKHNyY2RpcikvaW5vZGVfY29tLmMgJChzcmNkaXIpL2Rpcl9jb20uYyAkKHNyY2Rpcikvc3VwZXJfY29tLmMgXAorCSQoc3JjZGlyKS9kaXNrLmMgJChzcmNkaXIpL3dpbi5jICQoc3JjZGlyKS9ncm91cF9jb20uYyAgICAgICAgICBcCisJJChzcmNkaXIpL2ZpbGVfY29tLmMgJChzcmNkaXIpL2Jsb2NrYml0bWFwX2NvbS5jICAgICAgICAgICAgICAgIFwKKwkkKHNyY2RpcikvZXh0Ml9jb20uYyAkKHNyY2RpcikvaW5vZGViaXRtYXBfY29tLmMKKworT0JKUz0JbWFpbi5vIGluaXQubyBnZW5lcmFsX2NvbS5vIGlub2RlX2NvbS5vIGRpcl9jb20ubyBzdXBlcl9jb20ubyAgICBcCisJZGlzay5vIHdpbi5vIGdyb3VwX2NvbS5vIGZpbGVfY29tLm8gYmxvY2tiaXRtYXBfY29tLm8gZXh0Ml9jb20ubyBcCisJaW5vZGViaXRtYXBfY29tLm8KKworRE9DUz0gICBkb2MvZXh0MmVkLWRlc2lnbi5wZGYgZG9jL3VzZXItZ3VpZGUucGRmIGRvYy9leHQyZnMtb3ZlcnZpZXcucGRmIFwKKwlkb2MvZXh0MmVkLWRlc2lnbi5odG1sIGRvYy91c2VyLWd1aWRlLmh0bWwgZG9jL2V4dDJmcy1vdmVydmlldy5odG1sCisKKy5jLm86CisJJChDQykgLWMgJChBTExfQ0ZMQUdTKSAkPCAtbyAkQAorCSQoQ0hFQ0tfQ01EKSAkKEFMTF9DRkxBR1MpICQ8CisKKy5TVUZGSVhFUzogLnNnbWwgLnBzIC5wZGYgLmh0bWwKKworLnNnbWwucHM6CisJbWtkaXIgLXAgZG9jCisJc2dtbHRvb2xzIC1iIHBzICQ8IAorCS1tdiBgZWNobyAkPCB8IHNlZCAtZSAncy8uc2dtbCQkLy5wcy8nYCAkQAorCisuc2dtbC5wZGY6CisJbWtkaXIgLXAgZG9jCisJc2dtbHRvb2xzIC1iIHBkZiAkPCAKKwktbXYgYGVjaG8gJDwgfCBzZWQgLWUgJ3MvLnNnbWwkJC8ucGRmLydgICRACisKKy5zZ21sLmh0bWw6CisJbWtkaXIgLXAgZG9jCisJc2dtbHRvb2xzIC1iIG9uZWh0bWwgJDwgCisJLW12IGBlY2hvICQ8IHwgc2VkIC1lICdzLy5zZ21sJCQvLmh0bWwvJ2AgJEAKKworYWxsOjogJChQUk9HUykgJChNQU5QQUdFUykgZXh0MmVkLmNvbmYgCisKK2RvY3M6ICQoRE9DUykKKworZXh0MmVkOiAkKE9CSlMpCisJJChDQykgJChBTExfTERGTEFHUykgLW8gZXh0MmVkICQoT0JKUykgJChMSUJTKQorCitleHQyZWQuODogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL2V4dDJlZC44LmluCisJJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2V4dDJlZC44LmluIGV4dDJlZC44CisKK2V4dDJlZC5jb25mOiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvZXh0MmVkLmNvbmYuaW4KKwkkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvZXh0MmVkLmNvbmYuaW4gZXh0MmVkLmNvbmYKKworY2xlYW46OgorCSQoUk0pIC1mIGV4dDJlZCAkKE9CSlMpICQoRE9DUykgZXh0MmVkLmNvbmYgZXh0MmVkLjgKKwktcm1kaXIgZG9jCisKK2luc3RhbGw6IGV4dDJlZAorCWluc3RhbGwgLWQgJChyb290X3N5c2NvbmZkaXIpCisJaW5zdGFsbCAtbSA3NTUgZXh0MmVkICQoc2JpbmRpcikKKwlpbnN0YWxsIC1tIDY0NCAkKHNyY2RpcikvZXh0Mi5kZXNjcmlwdG9ycyAkKGRhdGFkaXIpCisJaW5zdGFsbCAtbSA2NDQgZXh0MmVkLmNvbmYgJChyb290X3N5c2NvbmZkaXIpCisJaW5zdGFsbCAtbSA2NDQgZXh0MmVkLjggJChtYW44ZGlyKQorCisjICsrKyBEZXBlbmRlbmN5IGxpbmUgZWF0ZXIgKysrCisjIAorIyBNYWtlZmlsZSBkZXBlbmRlbmNpZXMgZm9sbG93LiAgVGhpcyBtdXN0IGJlIHRoZSBsYXN0IHNlY3Rpb24gaW4KKyMgdGhlIE1ha2VmaWxlLmluIGZpbGUKKyMKK21haW4ubzogJChzcmNkaXIpL21haW4uYyAkKHNyY2RpcikvZXh0MmVkLmgKK2dlbmVyYWxfY29tLm86ICQoc3JjZGlyKS9nZW5lcmFsX2NvbS5jICQoc3JjZGlyKS9leHQyZWQuaAoraW5vZGVfY29tLm86ICQoc3JjZGlyKS9pbm9kZV9jb20uYyAkKHNyY2RpcikvZXh0MmVkLmgKK2Rpcl9jb20ubzogJChzcmNkaXIpL2Rpcl9jb20uYyAkKHNyY2RpcikvZXh0MmVkLmgKK3N1cGVyX2NvbS5vOiAkKHNyY2Rpcikvc3VwZXJfY29tLmMgJChzcmNkaXIpL2V4dDJlZC5oCitkaXNrLm86ICQoc3JjZGlyKS9kaXNrLmMgJChzcmNkaXIpL2V4dDJlZC5oCit3aW4ubzogJChzcmNkaXIpL3dpbi5jICQoc3JjZGlyKS9leHQyZWQuaAorZ3JvdXBfY29tLm86ICQoc3JjZGlyKS9ncm91cF9jb20uYyAkKHNyY2RpcikvZXh0MmVkLmgKK2ZpbGVfY29tLm86ICQoc3JjZGlyKS9maWxlX2NvbS5jICQoc3JjZGlyKS9leHQyZWQuaAorYmxvY2tiaXRtYXBfY29tLm86ICQoc3JjZGlyKS9ibG9ja2JpdG1hcF9jb20uYyAkKHNyY2RpcikvZXh0MmVkLmgKK2V4dDJfY29tLm86ICQoc3JjZGlyKS9leHQyX2NvbS5jICQoc3JjZGlyKS9leHQyZWQuaAoraW5vZGViaXRtYXBfY29tLm86ICQoc3JjZGlyKS9pbm9kZWJpdG1hcF9jb20uYyAkKHNyY2RpcikvZXh0MmVkLmgKZGlmZiAtLWdpdCBhL2V4dDJlZC9SRUFETUUgYi9leHQyZWQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYTRiODcKLS0tIC9kZXYvbnVsbAorKysgYi9leHQyZWQvUkVBRE1FCkBAIC0wLDAgKzEsMTYwIEBACitleHQyZWQgLSBUaGUgZXh0ZW5kZWQtMiBmaWxlc3lzdGVtIGVkaXRvciwgdmVyc2lvbiBlMmZzcHJvZ3MKKworCitUaGlzIHZlcnNpb24gb2YgZXh0MmVkIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCB1cGRhdGVkIGJ5IFRoZW9kb3JlIFRzJ28KK2ZvciBpbmNsdXNpb24gd2l0aCB0aGUgZTJmc3Byb2dzIHBhY2thZ2UuICBJdCBub3cgYnVpbGRzIHdpdGggbW9kZXJuCituY3Vyc2VzIGFuZCBJJ3ZlIGZpeGVkIHZhcmlvdXMgc21hbGwgYnVncywgcGFydGljdWxhciBpbiB0aGUgcmVkcmF3aW5nCithbmQgcmVzaXppbmcgZnVuY3Rpb25zLgorCitJdCBpcyBjdXJyZW50bHkgbm90IGJ1aWx0IGJ5IGRlZmF1bHQgLS0gdGhlIHRvcC1sZXZlbCBlMmZzcHJvZ3MKK01ha2VmaWxlIGRvZXNuJ3QgcmVjdXJzZSBpbnRvIHRoaXMgZGlyZWN0b3J5LiAgVGhpcyBpcyBiZWNhdXNlIGV4dDJlZAoraGFzIGEgbnVtYmVyIG9mIFZFUlkgU0VSSU9VUyBzaG9ydGNvbWluZ3M6CisKKzEpICBJdCBkb2Vzbid0IHdvcmsgb24gZmlsZXN5c3RlbXMgYmlnZ2VyIHRoYW4gMkdCCisKKzIpICBJdCBhc3N1bWVzIHRoYXQgYWxsJ3MgdGhlIHdvcmxkIGFuIEludGVsLCBhbmQgYXNzdW1lcyB0aGF0CisJZXZlcnl0aGluZyBpcyBpbiBJbnRlbCAobGl0dGxlLWVuZGlhbikgYnl0ZSBvcmRlci4KKworRml4aW5nIGVpdGhlciBvZiB0aGVzZSBwcm9ibGVtcyB3b3VsZCBiZSBub24tdHJpdmlhbCwgYW5kIHNvIEkgYXQgdGhpcworcG9pbnQgRE8gTk9UIFJFQ09NTUVORCB0aGF0IGRpc3RyaWJ1dGlvbnMgdHJ5IHRvIGluY2x1ZGUgdGhpcyBwcm9ncmFtLAorZXZlbiBhcyBtb2RpZmllZCBhbmQgdXBkYXRlZCBpbiBlMmZzcHJvZ3MuICBUaGlzIGVzcGVjaWFsbHkgZ29lcyBmb3IKK0RlYmlhbiwgd2hlcmUgdGhlIERlYmlhbiBtYWludGFpbmVyIGZvciBlMmZzcHJvZ3MgaGFzIGEgaGlzdG9yeSBvZgorbWFraW5nIGF1dGhvcml6ZWQgY2hhbmdlcyB0byBlMmZzcHJvZ3MgdG8gaW5jbHVkZSBwcm9ncmFtcyB0aGF0IGFyZW4ndAorc3VwcG9ydGVkLCBhbmQgdGhlbiBzdGFydHMgYnVnZ2luZyBtZSB3aXRoIGJ1ZyByZXBvcnRzLiAgWUVTIEkgS05PVy4KK1RISVMgUFJPR1JBTSBIQVMgSE9SUklCTEUgU0hPUlRDT01JTkdTLiAgSVQgSVMgSU5DTFVERUQgSEVSRSBPTkxZCitCRUNBVVNFIElUJ1MgQSBDT05WRU5JRU5UIFdBWSBGT1IgKEZPUiBFMkZTUFJPR1MgREVWRUxPUEVSUyBPTiBJTlRFTAorTUFDSElORVMpIFRPIEdFTkVSQVRFIFRFU1QgQ0FTRVMgQlkgU0VMRUNUSVZFTFkgQ09SUlVQVElORworRklMRVNZU1RFTVMuICBJIFdJTEwgTk9UIFNVUFBPUlQgVEhJUyBQUk9HUkFNIEZPUiBVU0UgQlkgR0VORVJBTCBVU0VSUworU08gUExFQVNFIERPIE5PVCBJTkNMVURFIElUIElOIEEgRElTVFJJQlVUSU9OLgorCitJIGhhdmUgY3VycmVudGx5IGRpc2FibGVkIHRoZSB1c2Ugb2YgR05VIFJlYWRsaW5lIGluIHRoaXMgcHJvZ3JhbSwKK2JlY2F1c2UgcmVhZGxpbmUgYW5kIG5jdXJzZXMgcmVhbGx5IGRvbid0IHBsYXkgd2VsbCB0b2dldGhlciBhdCBhbGwuCitSZWFkbGluZSBhc3N1bWVzIHRoYXQgaXQgY2FuIHdyaXRlIGFyYml0cmFyeSB0ZXh0IHRvIHRoZSBzY3JlZW4KKyhlc3BlY2lhbGx5IHdoZW4gaXQgdHJpZXMgdG8gcHJpbnQgb3V0IGEgY29tcGxldGlvbiBsaXN0KSwgd2hpY2gganVzdAorZG9lc24ndCB3b3JrIHdpdGggbmN1cnNlcy4gIEZpeGluZyB0aGlzIHNvIHRoZXkgd291bGQgd29yayB0b2dldGhlcgord291bGQgcmVxdWlyZSB3aG9sZXNhbGUgY2hhbmdlcyB0byByZWFkbGluZS4gICAKKworCQkJCVRoZW9kb3JlIFRzJ28KKwkJCQl0eXRzb0BNSVQuRURVCisJCQkJTWF5IDEyLCAyMDAxCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZXh0MmVkIC0gVGhlIGV4dGVuZGVkLTIgZmlsZXN5c3RlbSBlZGl0b3IsIHZlcnNpb24gMC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyB2ZXJzaW9uIDAuMiBvZiBleHQyZWQgLSBUaGUgZXh0ZW5kZWQtMiBmaWxlc3lzdGVtIGVkaXRvci4KKworTW9kaWZpY2F0aW9ucyBvbiBBcHIgNSAyMDAxCitUaGlzIGlzIG1pbm9yIGJ1ZyBmaXhlcyB0byBleHQyZWQsIGFzIG9mIEFwcmlsIDIwMDEuCitJdCBzdXBwb3J0cyBtb2Rlcm4gZXh0MiB2ZXJzaW9uIHRoYXQgaGFzIGZpbGUgdHlwZSBpbiBkaXJlY3Rvcnkgc3RydWN0dXJlCithbmQgZml4ZXMgdGhlIG1pc3N1bmRlcnN0YW5kaW5nIGJldHdlZW4gbmN1cnNlcyBhbmQKK3JlYWRsaW5lLgorCitJIGZpcnN0IGFwcGxpZWQgcGF0Y2hlcyBmcm9tIFJlZGhhdCBleGNlcHQgdGhlIG9uZSBmb3IgcmVhZGxpbmUgdGhhdCAKK3Jld3JvdGUgYSByZWFkbGluZSBiZWhhdmlvci4KKworR2xvYmFscyBkaWZmcyBiZXR3ZWVuIHZlcnNpb24gMC4xIGFuZCAwLjIgaXMgc3RvcmVkIGluIGZpbGUgOgorCWRpZmYtZXh0MmVkLjEuMgorCitDaHJpc3RpYW4gQmFjIDxDaHJpc3RpYW4uQmFjQG50LWV2cnkuZnI+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCitleHQyZWQncyBkb2N1bWVudGF0aW9uIGNvbnNpc3RzIG9mIHRocmVlIGRvY3VtZW50czoKKworMS4JVGhlIHVzZXIncyBndWlkZS4KKzIuCVRlY2huaWNhbCBvdmVydmlldyBvZiB0aGUgZXh0MiBmaWxlc3lzdGVtLgorMy4JVGhlIEVYVDJFRCBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uIGRvY3VtZW50LgorCitUaG9zZSBkb2N1bWVudHMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgZG9jIGRpcmVjdG9yeSwgaW4gbGludXhkb2Mtc2dtbCBhbmQKK3Bvc3RzY3JpcHQgZm9ybWF0cy4KKworVGhlIGRvY3VtZW50YXRpb24gaXMgYWxzbyBhdmFpbGFibGUgb25saW5lIGF0OgorCitodHRwOi8vdG9jaG5hcGMyLnRlY2huaW9uLmFjLmlsCisKK3VuZGVyIHRoZSBleHQyZWQgc2VjdGlvbi4KKworSW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0KKworZXh0MmVkIHJlcXVpcmVzIHRoZSBrZXJuZWwgc291cmNlcyBhbmQgdGhlIHJlYWRsaW5lIGFuZCBuY3Vyc2VzIHBhY2thZ2VzLgorUGxlYXNlIGVkaXQgdGhlIG1ha2VmaWxlIGlmIHlvdSBhcmUgdXNpbmcgYW4gIm9sZCIgdmVyc2lvbiBvZiBuY3Vyc2VzIChTZWUgdGhlCitkZXRhaWxzIGJlbG93KSBvciBpZiBnY2MgY2FuJ3QgZmluZCB0aGUgdmFyaW91cyBoZWFkZXIgZmlsZXMgYW5kIGxpYnJhcmllcy4KKworVG8gaW5zdGFsbCwgc2ltcGx5IGlzc3VlIGEgJ21ha2UnIGNvbW1hbmQgdG8gY29tcGlsZSBhbmQgYSAnbWFrZSBpbnN0YWxsJworY29tbWFuZCB0byBpbnN0YWxsLiBJIGhhdmUgYWxzbyBpbmNsdWRlZCBhbiBhbHJlYWR5IGNvbXBpbGVkIGxpbnV4IGEub3V0CitiaW5hcnkuCisKK2V4dDJlZCBhbmQgbmN1cnNlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK2V4dDJlZCB1c2VzIHRoZSBuY3Vyc2VzIGxpYnJhcnkgZm9yIHRlcm1pbmFsIG91dHB1dC4gSXQgaXMgdmVyeSBpbXBvcnRhbnQKK3RoYXQgbmN1cnNlcyB3aWxsIGJlIHByb3Blcmx5IGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbToKKworMS4JT2xkIHZlcnNpb25zIG9mIG5jdXJzZXMgKGFyb3VuZCAxLjguNSkgbmVlZCB0aGUgT0xEX05DVVJTRVMgY29tcGlsZQorCXRpbWUgb3B0aW9uIGluIEVYVDJFRC4KKworCUF0IGxlYXN0IGZyb20gMS45LjJjLCB0aGlzIGZsYWcgc2hvdWxkIG5vdCBiZSB1c2VkLiBJIHdvdWxkIHJlY29tbWVuZAorCXVwZ3JhZGluZyB0aGUgbmN1cnNlcyBsaWJyYXJ5IHRvIHRoZSBuZXdlciB2ZXJzaW9ucy4KKworMi4JbmN1cnNlcyB1c2VzIGl0cyBvd24gdGVybWluZm8gZGF0YWJhc2UgcmF0aGVyIHRoZW4gdGhlIHRlcm1jYXAgZmlsZS4KKwlJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgdGVybWluZm8gZGF0YWJhc2Ugd2lsbCBiZSBmb3VuZCBieSBuY3Vyc2VzLgorCUlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCB5b3Ugd2lsbCBzZWUgb24gc3RhcnR1cCBzb21lIGxpbmVzIHdoaWNoCisJcmVmZXIgdG8gL2V0Yy90ZXJtY2FwLiBUaGlzIHdpbGwgbWVhbiB0aGF0IHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoCisJdGhlIHRlcm1pbmZvIGRhdGFiYXNlLgorCiszLglOZXdlciB2ZXJzaW9ucyBvZiBuY3Vyc2VzIChhbmQgdGhlIDEuMyBzZXJpZXMgb2YgdGhlIGtlcm5lbCkgZGVzY3JpYmUKKwl0aGUgbGludXggY29uc29sZSBpbiB0aGUgZW50cnkgJ2xpbnV4JyBhbmQgbm90ICdjb25zb2xlJywgYXMgaXQgd2FzCisJYmVmb3JlLiBJZiB5b3UgcnVuIGV4dDJlZCBpbiB0aGUgbGludXggY29uc29sZSwgeW91IHNob3VsZCBlaXRoZXIKKwlzZXQgeW91ciBURVJNIGVudmlyb25tZW50IHZhcmlhYmxlIHRvICdsaW51eCcgb3IgbGluaworCWwvbGludXggdG8gYy9jb25zb2xlIGluIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZS4KKworNC4JVGhlIHBlcmNvbXBpbGVkIGJpbmFyeSB3YXMgbGlua2VkIHdpdGggbmN1cnNlcyAxLjkuNCBhbmQgd2lsbCBzZWFyY2gKKwlmb3IgdGhlIHRlcm1pbmZvIGRhdGFiYXNlIG9uIC91c3IvbG9jYWwvbGliL3Rlcm1pbmZvLiBJZiB5b3UgYXJlCisJdXNpbmcgaXQsIGFuZCB5b3VyIDEuOS40IGNvbXBhdGlibGUgdGVybWluZm8gZGF0YWJhc2UgaXMgbm90IG9uIHRoZQorCWRpcmVjdG9yeSBhYm92ZSwgdXNlIHRoZSBURVJNSU5GTyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzcGVjaWZ5CisJYW4gYWx0ZXJuYXRlIGxvY2F0aW9uLgorCitSdW5uaW5nIGV4dDJlZAorLS0tLS0tLS0tLS0tLS0KKworRm9yIHRob3NlIG9mIHlvdSB3aG8gZG9uJ3QgbGlrZSByZWFkaW5nIGxlbmd0aHkgYXJ0aWNsZXMsIGhlcmUgYXJlIGEgZmV3CitiYXNpYyBndWlkZWxpbmVzOgorCisxLglEb24ndCB1c2UgZXh0MmVkIHRvIGNoYW5nZSBhIG1vdW50ZWQgZmlsZXN5c3RlbSAhCisKKwlVc2luZyBleHQyZWQgaW4gcmVhZC1vbmx5IG1vZGUgb24gYSBtb3VudGVkIGZpbGVzeXN0ZW0gY2FuIGJlIGFsbG93ZWQKKwlieSB1c2luZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlIG9wdGlvbiAnQWxsb3dNb3VudGVkUmVhZCBvbicuIEhvd2V2ZXIsCisJbm90ZSB0aGF0IHRoZSBkaXNwbGF5ZWQgZGF0YSB3aWxsIGJlIHVucmVsaWFibGUuCisKKzIuCWV4dDJlZCBjdXJyZW50bHkgY2FuJ3QgaGFuZGxlIGZpbGVzeXN0ZW1zIGJpZ2dlciB0aGFuIDIgR0IuIEkgYW0KKwlzb3JyeSBmb3IgdGhlIGluY29udmVuaWVuY2UuIFRoaXMgd2lsbCBob3BlZnVsbHkgYmUgZml4ZWQgaW4gZnV0dXJlCisJcmVsZWFzZXMuCisKKzMuIAlCZWZvcmUgcnVubmluZyBleHQyZWQsIGVkaXQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQorCS92YXIvbGliL2V4dDJlZC9leHQyZWQuY29uZiB0byBzdWl0IHlvdXIgbmVlZHMuIFRoZSB2YXJpb3VzCisJY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkb2N1bWVudGVkIHRoZXJlLgorCis0LglVc2UgdGhlICdzZXRkZXZpY2UnIGNvbW1hbmQgdG8gb3BlbiBhbiBleHQyIGZpbGVzeXN0ZW0uCisJZS5nLiAnc2V0ZGV2aWNlIC9kZXYvaGRhMScuCisKKzUuCUlmIHRoZSBmaWxlc3lzdGVtIGlzIGFuIGV4dDIgZmlsZXN5c3RlbSBhbmQgZXh0MmVkIGZhaWxzIHRvCisJYXV0b2RldGVjdCB0aGlzLCB1c2UgdGhlICdGb3JjZUV4dDIgb24nIGNvbmZpZ3VyYXRpb24gZmlsZSBvcHRpb24uCisKKzYuCVRoZSBmaWxlc3lzdGVtIHdpbGwgYWx3YXlzIGJlIG9wZW5lZCBpbiByZWFkLW9ubHkgbW9kZS4gRmVlbCBmcmVlIHRvCisJZXhwZXJpbWVudCwgYnV0IHRha2UgY2FyZSB3aXRoIHRoZSAnZW5hYmxld3JpdGUnIGNvbW1hbmQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZlZWwgZnJlZSB0byBzZW5kIG1lIGZlZWRiYWNrIHdpdGggYW55dGhpbmcgcmVnYXJkaW5nIHRvIGV4dDJlZC4KKworRW5qb3ksCisKK0dhZGkgT3htYW4gPHRndWRAdG9jaG5hcGMyLnRlY2huaW9uLmFjLmlsPgorSGFpZmEsIEF1Z3VzdCAyMyAxOTk1CisKZGlmZiAtLWdpdCBhL2V4dDJlZC9ibG9ja2JpdG1hcF9jb20uYyBiL2V4dDJlZC9ibG9ja2JpdG1hcF9jb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2U2MWRjCi0tLSAvZGV2L251bGwKKysrIGIvZXh0MmVkL2Jsb2NrYml0bWFwX2NvbS5jCkBAIC0wLDAgKzEsMjY2IEBACisvKgorCisvdXNyL3NyYy9leHQyZWQvYmxvY2tiaXRtYXBfY29tLmMKKworQSBwYXJ0IG9mIHRoZSBleHRlbmRlZCBmaWxlIHN5c3RlbSAyIGRpc2sgZWRpdG9yLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitIYW5kbGVzIHRoZSBibG9jayBiaXRtYXAuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBjb21tYW5kcyB3aGljaCBhcmUgc3BlY2lmaWMgdG8gdGhlIGJsb2NrYml0bWFwIHR5cGUuCisKK0ZpcnN0IHdyaXR0ZW4gb246IEp1bHkgNSAxOTk1CisKK0NvcHlyaWdodCAoQykgMTk5NSBHYWRpIE94bWFuCisKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiZXh0MmVkLmgiCisKKy8qCisKK1RoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHVzZSB0aGUgZmxvYmFsIHN0cnVjdHVyZSBibG9ja19iaXRtYXBfaW5mby4gVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGN1cnJlbnQKK3Bvc2l0aW9uIGluIHRoZSBiaXRtYXAuCisKKyovCisKK3ZvaWQgdHlwZV9leHQyX2Jsb2NrX2JpdG1hcF9fX2VudHJ5IChjaGFyICpjb21tYW5kX2xpbmUpCisKKy8qCisKK1RoaXMgZnVuY3Rpb24gY2hhbmdlcyB0aGUgY3VycmVudCBlbnRyeSBpbiB0aGUgYml0bWFwLiBJdCBqdXN0IGNoYW5nZXMgdGhlIGVudHJ5X251bSB2YXJpYWJsZSBpbiBibG9ja19iaXRtYXBfaW5mbworYW5kIGRpc3BhdGNoZXMgYSBzaG93IGNvbW1hbmQgdG8gc2hvdyB0aGUgbmV3IGVudHJ5LgorCisqLworCit7CisJdW5zaWduZWQgbG9uZyBlbnRyeV9udW07CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsJCQkJCS8qIEdldCB0aGUgcmVxdWVzdGVkIGVudHJ5ICovCisJaWYgKCpwdHI9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTm8gYXJndW1lbnQgc3BlY2lmaWVkXG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsJcmV0dXJuOworCX0KKwlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisKKwllbnRyeV9udW09YXRvbCAoYnVmZmVyKTsKKworCisJaWYgKGVudHJ5X251bSA+PSBmaWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfYmxvY2tzX3Blcl9ncm91cCkgewkvKiBDaGVjayBpZiBpdCBpcyBhIHZhbGlkIGVudHJ5IG51bWJlciAqLworCisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEVudHJ5IG51bWJlciBvdXQgb2YgYm91bmRzXG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCisKKworCWJsb2NrX2JpdG1hcF9pbmZvLmVudHJ5X251bT1lbnRyeV9udW07CQkJCQkvKiBJZiBpdCBpcywganVzdCBjaGFuZ2UgZW50cnlfbnVtIGFuZCAqLworCXN0cmNweSAoYnVmZmVyLCJzaG93Iik7ZGlzcGF0Y2ggKGJ1ZmZlcik7CQkJCS8qIGRpc3BhdGNoIGEgc2hvdyBjb21tYW5kICovCit9CisKK3ZvaWQgdHlwZV9leHQyX2Jsb2NrX2JpdG1hcF9fX25leHQgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworLyoKKworVGhpcyBmdW5jdGlvbiBwYXNzZXMgdG8gdGhlIG5leHQgZW50cnkgaW4gdGhlIGJpdG1hcC4gV2UganVzdCBjYWxsIHRoZSBhYm92ZSBlbnRyeSBjb21tYW5kLgorCisqLworCit7CisJbG9uZyBlbnRyeV9vZmZzZXQ9MTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQllbnRyeV9vZmZzZXQ9YXRvbCAoYnVmZmVyKTsKKwl9CisKKwlzcHJpbnRmIChidWZmZXIsImVudHJ5ICVsZCIsYmxvY2tfYml0bWFwX2luZm8uZW50cnlfbnVtK2VudHJ5X29mZnNldCk7CisJZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9CisKK3ZvaWQgdHlwZV9leHQyX2Jsb2NrX2JpdG1hcF9fX3ByZXYgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgZW50cnlfb2Zmc2V0PTE7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCWlmICgqcHRyIT0wKSB7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkJZW50cnlfb2Zmc2V0PWF0b2wgKGJ1ZmZlcik7CisJfQorCisJc3ByaW50ZiAoYnVmZmVyLCJlbnRyeSAlbGQiLGJsb2NrX2JpdG1hcF9pbmZvLmVudHJ5X251bS1lbnRyeV9vZmZzZXQpOworCWRpc3BhdGNoIChidWZmZXIpOworfQorCit2b2lkIHR5cGVfZXh0Ml9ibG9ja19iaXRtYXBfX19hbGxvY2F0ZSAoY2hhciAqY29tbWFuZF9saW5lKQorCisvKgorCitUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBhbGxvY2F0aW5nIGJsb2NrIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uIEFsbG9jYXRpbmcgaW52b2x2ZXMgc2V0dGluZyB0aGUgY29ycmVjdCBiaXRzCitpbiB0aGUgYml0bWFwLiBUaGlzIGZ1bmN0aW9uIGlzIGEgdmVjdG9yIHZlcnNpb24gb2YgYWxsb2NhdGVfYmxvY2sgYmVsb3cgLSBXZSBqdXN0IHJ1biBvbiB0aGUgYmxvY2tzIHRoYXQKK3dlIG5lZWQgdG8gYWxsb2NhdGUsIGFuZCBjYWxsIGFsbG9jYXRlX2Jsb2NrIGZvciBlYWNoIG9uZS4KKworKi8KKworeworCWxvbmcgZW50cnlfbnVtLG51bT0xOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsJCQkJCS8qIEdldCB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0byBhbGxvY2F0ZSAqLworCWlmICgqcHRyIT0wKSB7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkJbnVtPWF0b2wgKGJ1ZmZlcik7CisJfQorCisJZW50cnlfbnVtPWJsb2NrX2JpdG1hcF9pbmZvLmVudHJ5X251bTsKKwkJCQkJCQkJCQkvKiBDaGVjayBmb3IgbGltaXRzICovCisJaWYgKG51bSA+IGZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2suc19ibG9ja3NfcGVyX2dyb3VwLWVudHJ5X251bSkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBUaGVyZSBhcmVuJ3QgdGhhdCBtdWNoIGJsb2NrcyBpbiB0aGUgZ3JvdXBcbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisKKwl3aGlsZSAobnVtKSB7CQkJCQkJCQkvKiBBbmQgY2FsbCBhbGxvY2F0ZV9ibG9jayAqLworCQlhbGxvY2F0ZV9ibG9jayAoZW50cnlfbnVtKTsJCQkJCS8qIGZvciBlYWNoIGJsb2NrICovCisJCW51bS0tO2VudHJ5X251bSsrOworCX0KKworCWRpc3BhdGNoICgic2hvdyIpOwkJCQkJCQkvKiBTaG93IHRoZSByZXN1bHQgKi8KK30KKwordm9pZCB0eXBlX2V4dDJfYmxvY2tfYml0bWFwX19fZGVhbGxvY2F0ZSAoY2hhciAqY29tbWFuZF9saW5lKQorCisvKiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiB0aGUgYWJvdmUgZnVuY3Rpb24gLSBXZSBjYWxsIGRlYWxsb2NhdGVfYmxvY2sgaW5zdGVhZCBvZiBhbGxvY2F0ZV9ibG9jayAqLworCit7CisJbG9uZyBlbnRyeV9udW0sbnVtPTE7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCWlmICgqcHRyIT0wKSB7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkJbnVtPWF0b2wgKGJ1ZmZlcik7CisJfQorCisJZW50cnlfbnVtPWJsb2NrX2JpdG1hcF9pbmZvLmVudHJ5X251bTsKKwlpZiAobnVtID4gZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9jay5zX2Jsb2Nrc19wZXJfZ3JvdXAtZW50cnlfbnVtKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIFRoZXJlIGFyZW4ndCB0aGF0IG11Y2ggYmxvY2tzIGluIHRoZSBncm91cFxuIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuOworCX0KKworCXdoaWxlIChudW0pIHsKKwkJZGVhbGxvY2F0ZV9ibG9jayAoZW50cnlfbnVtKTsKKwkJbnVtLS07ZW50cnlfbnVtKys7CisJfQorCisJZGlzcGF0Y2ggKCJzaG93Iik7Cit9CisKKwordm9pZCBhbGxvY2F0ZV9ibG9jayAobG9uZyBlbnRyeV9udW0pCisKKy8qIEluIHRoaXMgZnVuY3Rpb24gd2UgY29udmVydCB0aGUgYml0IG51bWJlciBpbnRvIHRoZSByaWdodCBieXRlIGFuZCBpbm5lciBiaXQgcG9zaXRpb25zLiAqLworCit7CisJdW5zaWduZWQgY2hhciBiaXRfbWFzaz0xOworCWludCBieXRlX29mZnNldCxqOworCisJYnl0ZV9vZmZzZXQ9ZW50cnlfbnVtLzg7CQkJCQkvKiBGaW5kIHRoZSBjb3JyZWN0IGJ5dGUgLSBlbnRyeV9udW0vOCAqLworCQkJCQkJCQkJLyogVGhlIHBvc2l0aW9uIGluc2lkZSB0aGUgYnl0ZSBpcyBlbnRyeV9udW0gJTggKi8KKwlmb3IgKGo9MDtqPGVudHJ5X251bSU4O2orKykKKwkJYml0X21hc2sqPTI7CQkJCQkJLyogR2VuZXJhdGUgdGhlIG9yIG1hc2sgLSAxIGF0IHRoZSByaWdodCBwbGFjZSAqLworCXR5cGVfZGF0YS51LmJ1ZmZlciBbYnl0ZV9vZmZzZXRdIHw9IGJpdF9tYXNrOwkJCS8qIEFuZCBhcHBseSBpdCAqLworfQorCit2b2lkIGRlYWxsb2NhdGVfYmxvY2sgKGxvbmcgZW50cnlfbnVtKQorCisvKiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiBhbGxvY2F0ZV9ibG9jayBhYm92ZS4gV2UgdXNlIGFuIGFuZCBtYXNrIGluc3RlYWQgb2YgYW4gb3IgbWFzay4gKi8KKworeworCXVuc2lnbmVkIGNoYXIgYml0X21hc2s9MTsKKwlpbnQgYnl0ZV9vZmZzZXQsajsKKworCWJ5dGVfb2Zmc2V0PWVudHJ5X251bS84OworCWZvciAoaj0wO2o8ZW50cnlfbnVtJTg7aisrKQorCQliaXRfbWFzayo9MjsKKwliaXRfbWFza149MHhmZjsKKworCXR5cGVfZGF0YS51LmJ1ZmZlciBbYnl0ZV9vZmZzZXRdICY9IGJpdF9tYXNrOworfQorCit2b2lkIHR5cGVfZXh0Ml9ibG9ja19iaXRtYXBfX19zaG93IChjaGFyICpjb21tYW5kX2xpbmUpCisKKy8qCisKK1dlIHNob3cgdGhlIGJpdG1hcCBhcyBhIHNlcmllcyBvZiBiaXRzLCBncm91cGVkIGF0IDgtYml0IGludGVydmFscy4gV2UgZGlzcGxheSA4IHN1Y2ggZ3JvdXBzIG9uIGVhY2ggbGluZS4KK1RoZSBjdXJyZW50IHBvc2l0aW9uIChhcyBrbm93biBmcm9tIGJsb2NrX2JpdG1hcF9pbmZvLmVudHJ5X251bSkgaXMgaGlnaGxpZ2h0ZWQuCisKKyovCisKK3sKKwlpbnQgaSxqOworCXVuc2lnbmVkIGNoYXIgKnB0cjsKKwl1bnNpZ25lZCBsb25nIGJsb2NrX251bSxlbnRyeV9udW07CisKKwlwdHI9dHlwZV9kYXRhLnUuYnVmZmVyOworCXNob3dfcGFkX2luZm8ubGluZT0wO3Nob3dfcGFkX2luZm8ubWF4X2xpbmU9LTE7CisKKwl3bW92ZSAoc2hvd19wYWQsMCwwKTsKKwlmb3IgKGk9MCxlbnRyeV9udW09MDtpPGZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2suc19ibG9ja3NfcGVyX2dyb3VwLzg7aSsrLHB0cisrKSB7CisJCWZvciAoaj0xO2o8PTEyODtqKj0yKSB7CQkJCQkJLyogaiBjb250YWlucyB0aGUgYW5kIGJpdCBtYXNrICovCisJCQlpZiAoZW50cnlfbnVtPT1ibG9ja19iaXRtYXBfaW5mby5lbnRyeV9udW0pIHsJCS8qIEhpZ2hsaWdodCB0aGUgY3VycmVudCBlbnRyeSAqLworCQkJCXdhdHRyc2V0IChzaG93X3BhZCxBX1JFVkVSU0UpOworCQkJCXNob3dfcGFkX2luZm8ubGluZT1zaG93X3BhZF9pbmZvLm1heF9saW5lLXNob3dfcGFkX2luZm8uZGlzcGxheV9saW5lcy8yOworCQkJfQorCisJCQlpZiAoKCpwdHIpICYgaikJCQkJCQkvKiBBcHBseSB0aGUgbWFzayAqLworCQkJCXdwcmludHcgKHNob3dfcGFkLCIxIik7CisJCQllbHNlCisJCQkJd3ByaW50dyAoc2hvd19wYWQsIjAiKTsKKworCQkJaWYgKGVudHJ5X251bT09YmxvY2tfYml0bWFwX2luZm8uZW50cnlfbnVtKQorCQkJCXdhdHRyc2V0IChzaG93X3BhZCxBX05PUk1BTCk7CisKKwkJCWVudHJ5X251bSsrOwkJCQkJCS8qIFBhc3MgdG8gdGhlIG5leHQgZW50cnkgKi8KKwkJfQorCQl3cHJpbnR3IChzaG93X3BhZCwiICIpOworCQlpZiAoaSU4PT03KSB7CQkJCQkJCS8qIERpc3BsYXkgOCBncm91cHMgaW4gYSByb3cgKi8KKwkJCXdwcmludHcgKHNob3dfcGFkLCJcbiIpOworCQkJc2hvd19wYWRfaW5mby5tYXhfbGluZSsrOworCQl9CisJfQorCisJcmVmcmVzaF9zaG93X3BhZCAoKTsKKwlzaG93X2luZm8gKCk7CQkJCQkJCQkvKiBTaG93IHRoZSB1c3VhbCBpbmZvcm1hdGlvbiAqLworCisJCQkJCQkJCQkJLyogU2hvdyB0aGUgZ3JvdXAgbnVtYmVyICovCisJd21vdmUgKHNob3dfd2luLDEsMCk7CisJd3ByaW50dyAoc2hvd193aW4sIkJsb2NrIGJpdG1hcCBvZiBibG9jayBncm91cCAlbGRcbiIsYmxvY2tfYml0bWFwX2luZm8uZ3JvdXBfbnVtKTsKKwkJCQkJCQkJCQkvKiBTaG93IHRoZSBibG9jayBudW1iZXIgKi8KKworCWJsb2NrX251bT1ibG9ja19iaXRtYXBfaW5mby5lbnRyeV9udW0rYmxvY2tfYml0bWFwX2luZm8uZ3JvdXBfbnVtKmZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2suc19ibG9ja3NfcGVyX2dyb3VwOworCWJsb2NrX251bSs9ZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9jay5zX2ZpcnN0X2RhdGFfYmxvY2s7CisKKwl3cHJpbnR3IChzaG93X3dpbiwiU3RhdHVzIG9mIGJsb2NrICVsZCAtICIsYmxvY2tfbnVtKTsJCQkvKiBhbmQgdGhlIGFsbG9jYXRpb24gc3RhdHVzICovCisJcHRyPXR5cGVfZGF0YS51LmJ1ZmZlcitibG9ja19iaXRtYXBfaW5mby5lbnRyeV9udW0vODsKKwlqPTE7CisJZm9yIChpPWJsb2NrX2JpdG1hcF9pbmZvLmVudHJ5X251bSAlIDg7aT4wO2ktLSkKKwkJaio9MjsKKwlpZiAoKCpwdHIpICYgaikKKwkJd3ByaW50dyAoc2hvd193aW4sIkFsbG9jYXRlZFxuIik7CisJZWxzZQorCQl3cHJpbnR3IChzaG93X3dpbiwiRnJlZVxuIik7CisJcmVmcmVzaF9zaG93X3dpbiAoKTsKK30KZGlmZiAtLWdpdCBhL2V4dDJlZC9kaXJfY29tLmMgYi9leHQyZWQvZGlyX2NvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhODUyNjcKLS0tIC9kZXYvbnVsbAorKysgYi9leHQyZWQvZGlyX2NvbS5jCkBAIC0wLDAgKzEsNjc4IEBACisvKgorCisvdXNyL3NyYy9leHQyZWQvZGlyX2NvbS5jCisKK0EgcGFydCBvZiB0aGUgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gMiBkaXNrIGVkaXRvci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0hhbmRsZXMgZGlyZWN0b3JpZXMuCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvZGVzIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBoYW5kbGUgZGlyZWN0b3JpZXMuCisKK01vc3Qgb2YgdGhlIGZ1bmN0aW9ucyB1c2UgdGhlIGdsb2JhbCB2YXJpYWJsZSBmaWxlX2luZm8gKGFsb25nIHdpdGggdGhlIHNwZWNpYWwgZGlyZWN0b3J5IGZpZWxkcyB0aGVyZSkgdG8gc2F2ZQoraW5mb3JtYXRpb24gYW5kIHBhc3MgaXQgYmV0d2VlbiB0aGVtLgorCitTaW5jZSBhIGRpcmVjdG9yeSBpcyBqdXN0IGEgYmlnIGZpbGUgd2hpY2ggaXMgY29tcG9zZWQgb2YgZGlyZWN0b3J5IGVudHJpZXMsIHlvdSB3aWxsIGZpbmQgdGhhdAordGhlIGZ1bmN0aW9ucyBoZXJlIGFyZSBhIHN1cGVyc2V0IG9mIHRob3NlIGluIHRoZSBmaWxlX2NvbS5jIHNvdXJjZS4KKworV2UgYXNzdW1lIHRoYXQgdGhlIHVzZXIgcmVhY2hlZCBoZXJlIHVzaW5nIHRoZSBkaXIgY29tbWFuZCBvZiB0aGUgaW5vZGUgdHlwZSBhbmQgbm90IGJ5IHVzaW5nIHNldHR5cGUgZGlyLCBzbwordGhhdCBpbml0X2Rpcl9pbmZvIGlzIGluZGVlZCBjYWxsZWQgdG8gZ2F0aGVyIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4KKwordHlwZV9kYXRhIGlzIG5vdCBjaGFuZ2VkISBJdCBzdGlsbCBjb250YWlucyB0aGUgaW5vZGUgb2YgdGhlIGZpbGUgLSBXZSBoYW5kbGUgdGhlIGRpcmVjdG9yeSBpbiBvdXIgb3duCit2YXJpYWJsZXMsIHNvIHRoYXQgc2V0dHlwZSBleHQyX2lub2RlIHdpbGwgImdvIGJhY2siIHRvIHRoZSBpbm9kZSBvZiB0aGlzIGRpcmVjdG9yeS4KKworRmlyc3Qgd3JpdHRlbiBvbjogQXByaWwgMjggMTk5NQorCitDb3B5cmlnaHQgKEMpIDE5OTUgR2FkaSBPeG1hbgorCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImV4dDJlZC5oIgorCitjaGFyIG5hbWVfc2VhcmNoIFs4MF07Citsb25nIGVudHJ5X251bV9zZWFyY2g7CisKK2ludCBpbml0X2Rpcl9pbmZvIChzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyAqaW5mb19wdHIpCisKKy8qCisKK1RoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBpbm9kZSBvZiB0aGUgZGlyZWN0b3J5IHdoZW4gdGhlIHVzZXIgaXNzdWVzIHRoZSBkaXIgY29tbWFuZCBmcm9tIHRoZSBpbm9kZS4KK0l0IGlzIHVzZWQgdG8gZ2F0aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbm9kZSBhbmQgdG8gcmVzZXQgc29tZSB2YXJpYWJsZXMgd2hpY2ggd2UgbmVlZCBpbiBvcmRlciB0byBoYW5kbGUKK2RpcmVjdG9yaWVzLgorCisqLworCit7CisJc3RydWN0IGV4dDJfaW5vZGUgKnB0cjsKKworCXB0cj0mdHlwZV9kYXRhLnUudF9leHQyX2lub2RlOwkJCQkJLyogdHlwZV9kYXRhIGNvbnRhaW5zIHRoZSBpbm9kZSAqLworCisJaW5mb19wdHItPmlub2RlX3B0cj1wdHI7CisJaW5mb19wdHItPmlub2RlX29mZnNldD1kZXZpY2Vfb2Zmc2V0OwkJCQkvKiBkZXZpY2Ugb2Zmc2V0IGNvbnRhaW5zIHRoZSBpbm9kZSdzIG9mZnNldCAqLworCisJCQkJCQkJCQkvKiBSZXNldCB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgc3RhcnQgKi8KKworCWluZm9fcHRyLT5nbG9iYWxfYmxvY2tfbnVtPXB0ci0+aV9ibG9jayBbMF07CisJaW5mb19wdHItPmdsb2JhbF9ibG9ja19vZmZzZXQ9cHRyLT5pX2Jsb2NrIFswXSpmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisJaW5mb19wdHItPmJsb2NrX251bT0wOworCWluZm9fcHRyLT5maWxlX29mZnNldD0wOworCQkJCQkJCQkJLyogU2V0IHRoZSBzaXplIG9mIHRoZSBkaXJlY3RvcnkgKi8KKworCWluZm9fcHRyLT5ibG9ja3NfY291bnQ9KHB0ci0+aV9zaXplK2ZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZS0xKS9maWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisJaW5mb19wdHItPmZpbGVfbGVuZ3RoPXB0ci0+aV9zaXplOworCisJaW5mb19wdHItPmxldmVsPTA7CQkJCQkJLyogV2Ugc3RhcnQgdXNpbmcgZGlyZWN0IGJsb2NrcyAqLworCWluZm9fcHRyLT5kaXNwbGF5PUhFWDsJCQkJCQkvKiBUaGlzIGlzIG5vdCBhY3R1YWxseSB1c2VkICovCisKKwlpbmZvX3B0ci0+ZGlyX2VudHJ5X251bT0wO2luZm9fcHRyLT5kaXJfZW50cmllc19jb3VudD0wOwkvKiBXZSdsbCBzdGFydCBhdCB0aGUgZmlyc3QgZGlyZWN0b3J5IGVudHJ5ICovCisJaW5mb19wdHItPmRpcl9lbnRyeV9vZmZzZXQ9MDsKKworCS8qIEZpbmQgZGlyX2VudHJpZXNfY291bnQgKi8KKworCWluZm9fcHRyLT5kaXJfZW50cmllc19jb3VudD1jb3VudF9kaXJfZW50cmllcyAoKTsgCQkvKiBTZXQgdGhlIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzICovCisKKwlyZXR1cm4gKDEpOworfQorCitzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyBzZWFyY2hfZGlyX2VudHJpZXMgKGludCAoKmFjdGlvbikgKHN0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvICppbmZvKSxpbnQgKnN0YXR1cykKKworLyoKKwlUaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIGluIHRoaXMgc291cmNlIGZpbGUuIFZhcmlvdXMgYWN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgdGhpcyBiYXNpYyBmdW5jdGlvbi4KKworCVRoaXMgcm91dGluZSBydW5zIG9uIGFsbCBkaXJlY3RvcnkgZW50cmllcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisJRm9yIGVhY2ggZW50cnksIGFjdGlvbiBpcyBjYWxsZWQuIFdlJ2xsIGFjdCBhY2NvcmRpbmcgdG8gdGhlIHJldHVybiBjb2RlIG9mIGFjdGlvbjoKKworCQlBQk9SVAkJLQlDdXJyZW50IGRpciBlbnRyeSBpcyByZXR1cm5lZC4KKwkJQ09OVElOVUUJLQlDb250aW51ZSBzZWFyY2hpbmcuCisJCUZPVU5ECQktCUN1cnJlbnQgZGlyIGVudHJ5IGlzIHJldHVybmVkLgorCisJSWYgdGhlIGxhc3QgZW50cnkgaXMgcmVhY2hlZCwgaXQgaXMgcmV0dXJuZWQsIGFsb25nIHdpdGggYW4gQUJPUlQgc3RhdHVzLgorCisJc3RhdHVzIGlzIHVwZGF0ZWQgdG8gdGhlIHJldHVybmVkIGNvZGUgb2YgYWN0aW9uLgorKi8KKworeworCXN0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvIGluZm87CQkJCQkJLyogVGVtcG9yYXJ5IHZhcmlhYmxlcyB1c2VkIHRvICovCisJc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKmRpcl9lbnRyeV9wdHI7CQkJCQkvKiBjb250YWluIHRoZSBjdXJyZW50IHNlYXJjaCBlbnRyaWVzICovCisJaW50IHJldHVybl9jb2RlLCBuZXh0OworCisJaW5mbz1maXJzdF9maWxlX2luZm87CQkJCQkJCS8qIFN0YXJ0IGZyb20gdGhlIGZpcnN0IGVudHJ5IC0gUmVhZCBpdCAqLworCWxvd19yZWFkIChpbmZvLmJ1ZmZlcixmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUsaW5mby5nbG9iYWxfYmxvY2tfb2Zmc2V0KTsKKwlkaXJfZW50cnlfcHRyPShzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqKSAoaW5mby5idWZmZXIraW5mby5kaXJfZW50cnlfb2Zmc2V0KTsKKworCXdoaWxlIChpbmZvLmZpbGVfb2Zmc2V0IDwgaW5mby5maWxlX2xlbmd0aCkgewkJCQkvKiBXaGlsZSB3ZSBoYXZlbid0IHJlYWNoZWQgdGhlIGVuZCAqLworCisJCSpzdGF0dXM9cmV0dXJuX2NvZGU9YWN0aW9uICgmaW5mbyk7CQkJCS8qIENhbGwgdGhlIGNsaWVudCBmdW5jdGlvbiB0byB0ZXN0ICovCisJCQkJCQkJCQkJLyogdGhlIGN1cnJlbnQgZW50cnkgKi8KKwkJaWYgKHJldHVybl9jb2RlPT1BQk9SVCB8fCByZXR1cm5fY29kZT09Rk9VTkQpCisJCQlyZXR1cm4gKGluZm8pOwkJCQkJCS8qIFN0b3AsIGlmIHNvIGFza2VkICovCisKKwkJCQkJCQkJCQkvKiBQYXNzIHRvIHRoZSBuZXh0IGVudHJ5ICovCisKKwkJZGlyX2VudHJ5X3B0cj0oc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKikgKGluZm8uYnVmZmVyK2luZm8uZGlyX2VudHJ5X29mZnNldCk7CisKKwkJaW5mby5kaXJfZW50cnlfbnVtKys7CisJCW5leHQgPSBkaXJfZW50cnlfcHRyLT5yZWNfbGVuOworCQlpZiAoIW5leHQpCisJCQluZXh0ID0gZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplIC0gaW5mby5kaXJfZW50cnlfb2Zmc2V0OworCQlpbmZvLmRpcl9lbnRyeV9vZmZzZXQgKz0gbmV4dDsKKwkJaW5mby5maWxlX29mZnNldCArPSBuZXh0OworCisJCWlmIChpbmZvLmZpbGVfb2Zmc2V0ID49IGluZm8uZmlsZV9sZW5ndGgpIGJyZWFrOworCisJCWlmIChpbmZvLmRpcl9lbnRyeV9vZmZzZXQgPj0gZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplKSB7CS8qIFdlIGNyb3NzZWQgYSBibG9jayBib3VuZGFyeSAqLworCQkJCQkJCQkJCS8qIEZpbmQgdGhlIG5leHQgYmxvY2ssICovCisJCQlpbmZvLmJsb2NrX251bSsrOworCQkJaW5mby5nbG9iYWxfYmxvY2tfbnVtPWZpbGVfYmxvY2tfdG9fZ2xvYmFsX2Jsb2NrIChpbmZvLmJsb2NrX251bSwmaW5mbyk7CisJCQlpbmZvLmdsb2JhbF9ibG9ja19vZmZzZXQ9aW5mby5nbG9iYWxfYmxvY2tfbnVtKmZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKwkJCWluZm8uZmlsZV9vZmZzZXQ9aW5mby5ibG9ja19udW0qZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplOworCQkJaW5mby5kaXJfZW50cnlfb2Zmc2V0PTA7CisJCQkJCQkJCQkJLyogcmVhZCBpdCBhbmQgdXBkYXRlIHRoZSBwb2ludGVyICovCisKKwkJCWxvd19yZWFkIChpbmZvLmJ1ZmZlcixmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUsaW5mby5nbG9iYWxfYmxvY2tfb2Zmc2V0KTsKKwkJCWRpcl9lbnRyeV9wdHI9KHN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICopIChpbmZvLmJ1ZmZlcitpbmZvLmRpcl9lbnRyeV9vZmZzZXQpOworCisJCX0KKworCX0KKworCSpzdGF0dXM9QUJPUlQ7cmV0dXJuIChpbmZvKTsJCQkJCQkvKiBUaGVyZSB3YXMgbm8gbWF0Y2ggKi8KK30KKworbG9uZyBjb3VudF9kaXJfZW50cmllcyAodm9pZCkKKworLyoKKworVGhpcyBmdW5jdGlvbiBjb3VudHMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBkaXJlY3RvcnkuIFdlIGp1c3QgY2FsbCBzZWFyY2hfZGlyX2VudHJpZXMgdGlsbCB0aGUgZW5kLgorVGhlIGNsaWVudCBmdW5jdGlvbiBpcyBhY3Rpb25fY291bnQsIHdoaWNoIGp1c3QgdGVsbCBzZWFyY2hfZGlyX2VudHJpZXMgdG8gY29udGludWUuCisKKyovCisKK3sKKwlpbnQgc3RhdHVzOworCisJcmV0dXJuIChzZWFyY2hfZGlyX2VudHJpZXMgKCZhY3Rpb25fY291bnQsJnN0YXR1cykuZGlyX2VudHJ5X251bSk7Cit9CisKK2ludCBhY3Rpb25fY291bnQgKHN0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvICppbmZvKQorCisvKgorCitVc2VkIGJ5IGNvdW50X2Rpcl9lbnRyaWVzIGFib3ZlIC0gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgc2VhcmNoX2Rpcl9lbnRyaWVzLCBhbmQgaXQgdGVsbHMgaXQgdG8gY29udGludWUKK3NlYXJjaGluZywgdW50aWwgd2UgZ2V0IHRvIHRoZSBsYXN0IGVudHJ5LgorCisqLworCit7CisJcmV0dXJuIChDT05USU5VRSk7CQkJCQkJCS8qIEp1c3QgY29udGludWUgc2VhcmNoaW5nICovCit9CisKK3ZvaWQgdHlwZV9kaXJfX19jZCAoY2hhciAqY29tbWFuZF9saW5lKQorCisvKgorCUNoYW5nZXMgdG8gYSBkaXJlY3RvcnksIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworCVRoaXMgaXMgYSBjb21wbGljYXRlZCBvcGVyYXRpb24sIHNvIEkgd291bGQgcmVwZWF0IGhlcmUgdGhlIGV4cGxhbmF0aW9uIGZyb20gdGhlIGRlc2lnbiBhbmQKKwlpbXBsZW1lbnRhdGlvbiBkb2N1bWVudC4KKworMS4JVGhlIHBhdGggaXMgY2hlY2tlZCB0aGF0IGl0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoIChmcm9tIC8pLiBJZiBpdCBpcywgd2UgbGV0IHRoZSBnZW5lcmFsIGNkIHRvIGRvIHRoZSBqb2IgYnkKKwljYWxsaW5nIGRpcmVjdGx5IHR5cGVfZXh0Ml9fX2NkLgorCisyLglUaGUgcGF0aCBpcyBkaXZpZGVkIGludG8gdGhlIG5lYXJlc3QgcGF0aCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHBhdGguIEZvciBleGFtcGxlLCBjZCAxLzIvMy80IGlzIGRpdmlkZWQgaW50bworCTEgYW5kIGludG8gMi8zLzQuCisKKzMuCUl0IGlzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBwYXRoIHRoYXQgd2UgbmVlZCB0byBzZWFyY2ggZm9yIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gV2Ugc2VhcmNoIGZvciBpdCB1c2luZworCXNlYXJjaF9kaXJfZW50cmllcywgd2hpY2ggYWNjZXB0cyB0aGUgYWN0aW9uX25hbWUgZnVuY3Rpb24gYXMgdGhlIGNsaWVudCBmdW5jdGlvbi4KKworNC4Jc2VhcmNoX2Rpcl9lbnRyaWVzIHdpbGwgc2NhbiB0aGUgZW50aXJlIGVudHJpZXMgYW5kIHdpbGwgY2FsbCBvdXIgYWN0aW9uX25hbWUgZnVuY3Rpb24gZm9yIGVhY2ggZW50cnkuCisJSW4gYWN0aW9uX25hbWUsIHRoZSByZXF1aXJlZCBuYW1lIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGVudHJ5LCBhbmQgRk9VTkQgd2lsbCBiZQorCXJldHVybmVkIHdoZW4gYSBtYXRjaCBvY2N1cnMuCisKKzUuCUlmIHRoZSByZXF1aXJlZCBlbnRyeSBpcyBmb3VuZCwgd2UgZGlzcGF0Y2ggYSByZW1lbWJlciBjb21tYW5kIHRvIGluc2VydCB0aGUgY3VycmVudCBpbm9kZSAocmVtZW1iZXIgdGhhdAorCXR5cGVfZGF0YSBpcyBzdGlsbCBpbnRhY3QgYW5kIGNvbnRhaW5zIHRoZSBpbm9kZSBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnkpIGludG8gdGhlIG9iamVjdCBtZW1vcnkuCisJVGhpcyBpcyByZXF1aXJlZCB0byBlYXNpbHkgc3VwcG9ydCBzeW1ib2xpYyBsaW5rcyAtIElmIHdlIGZpbmQgbGF0ZXIgdGhhdCB0aGUgaW5vZGUgcG9pbnRlZCBieSB0aGUgZW50cnkgaXMKKwlhY3R1YWxseSBhIHN5bWJvbGljIGxpbmssIHdlJ2xsIG5lZWQgdG8gcmV0dXJuIHRvIHRoaXMgcG9pbnQsIGFuZCB0aGUgYWJvdmUgaW5vZGUgZG9lc24ndCBoYXZlIChhbmQgY2FuJ3QgaGF2ZSwKKwliZWNhdXNlIG9mIGhhcmQgbGlua3MpIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gIm1vdmUgYmFjayIuCisKKzYuCVdlIHRoZW4gZGlzcGF0Y2ggYSBmb2xsb3dpbm9kZSBjb21tYW5kIHRvIHJlYWNoIHRoZSBpbm9kZSBwb2ludGVkIGJ5IHRoZSByZXF1aXJlZCBlbnRyeS4gVGhpcyBjb21tYW5kIHdpbGwKKwlhdXRvbWF0aWNhbGx5IGNoYW5nZSB0aGUgdHlwZSB0byBleHQyX2lub2RlIC0gV2UgYXJlIG5vdyBhdCBhbiBpbm9kZSwgYW5kIGFsbCB0aGUgaW5vZGUgY29tbWFuZHMgYXJlIGF2YWlsYWJsZS4KKworNy4JV2UgY2hlY2sgdGhlIGlub2RlJ3MgdHlwZSB0byBzZWUgaWYgaXQgaXMgYSBkaXJlY3RvcnkuIElmIGl0IGlzLCB3ZSBkaXNwYXRjaCBhIGRpciBjb21tYW5kIHRvICJlbnRlciB0aGUgZGlyZWN0b3J5IiwKKwlhbmQgcmVjdXJzaXZlbHkgY2FsbCBvdXJzZWxmIChUaGUgdHlwZSBpcyBkaXIgYWdhaW4pIGJ5IGRpc3BhdGNoaW5nIGEgY2QgY29tbWFuZCwgd2l0aCB0aGUgcmVzdCBvZiB0aGUgcGF0aAorCWFzIGFuIGFyZ3VtZW50LgorCis4LglJZiB0aGUgaW5vZGUncyB0eXBlIGlzIGEgc3ltYm9saWMgbGluayAob25seSBmYXN0IHN5bWJvbGljIGxpbmsgd2VyZSBtZWFud2hpbGUgaW1wbGVtZW50ZWQuIEkgZ3Vlc3MgdGhpcyBpcworCXR5cGljYWxseSB0aGUgY2FzZS4pLCB3ZSBub3RlIHRoZSBwYXRoIGl0IGlzIHBvaW50aW5nIGF0LCB0aGUgc2F2ZWQgaW5vZGUgaXMgcmVjYWxsZWQsIHdlIGRpc3BhdGNoIGRpciB0bworCWdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBkaXJlY3RvcnksIGFuZCB3ZSBjYWxsIG91cnNlbGYgYWdhaW4gd2l0aCB0aGUgbGluayBwYXRoL3Jlc3Qgb2YgdGhlIHBhdGggYXJndW1lbnQuCisKKzkuCUluIGFueSBvdGhlciBjYXNlLCB3ZSBqdXN0IHN0b3AgYXQgdGhlIHJlc3VsdGluZyBpbm9kZS4KKworKi8KKworeworCWludCBzdGF0dXM7CisJY2hhciAqcHRyLGZ1bGxfZGlyX25hbWUgWzUwMF0sZGlyX25hbWUgWzUwMF0sdGVtcCBbNTAwXSx0ZW1wMiBbNTAwXTsKKwlzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyBpbmZvOworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICpkaXJfZW50cnlfcHRyOworCisJZGlyX2VudHJ5X3B0cj0oc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKikgKGZpbGVfaW5mby5idWZmZXIrZmlsZV9pbmZvLmRpcl9lbnRyeV9vZmZzZXQpOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxkaXJfbmFtZSk7CisKKwlpZiAoKnB0cj09MCkgewkJCQkJCS8qIGNkIGFsb25lIHdpbGwgZW50ZXIgdGhlIGhpZ2hsaWdodGVkIGRpcmVjdG9yeSAqLworCQlzdHJuY3B5IChmdWxsX2Rpcl9uYW1lLGRpcl9lbnRyeV9wdHItPm5hbWUsZGlyX2VudHJ5X3B0ci0+bmFtZV9sZW4pOworCQlmdWxsX2Rpcl9uYW1lIFtkaXJfZW50cnlfcHRyLT5uYW1lX2xlbl09MDsKKwl9CisJZWxzZQorCQlwdHI9cGFyc2Vfd29yZCAocHRyLGZ1bGxfZGlyX25hbWUpOworCisJcHRyPXN0cmNociAoZnVsbF9kaXJfbmFtZSwnLycpOworCisJaWYgKHB0cj09ZnVsbF9kaXJfbmFtZSkgewkJCQkvKiBQYXRobmFtZSBpcyBmcm9tIHJvb3QgLSBMZXQgdGhlIGdlbmVyYWwgY2QgZG8gdGhlIGpvYiAqLworCQlzcHJpbnRmICh0ZW1wLCJjZCAlcyIsZnVsbF9kaXJfbmFtZSk7dHlwZV9leHQyX19fY2QgKHRlbXApO3JldHVybjsKKwl9CisKKwlpZiAocHRyPT1OVUxMKSB7CisJCXN0cmNweSAoZGlyX25hbWUsZnVsbF9kaXJfbmFtZSk7CisJCWZ1bGxfZGlyX25hbWUgWzBdPTA7CisJfQorCisJZWxzZSB7CisJCXN0cm5jcHkgKGRpcl9uYW1lLGZ1bGxfZGlyX25hbWUscHRyLWZ1bGxfZGlyX25hbWUpOworCQlkaXJfbmFtZSBbcHRyLWZ1bGxfZGlyX25hbWVdPTA7CisJCXN0cmNweSAoZnVsbF9kaXJfbmFtZSwrK3B0cik7CisJfQorCQkJCQkJCQkvKiBkaXJfbmFtZSBjb250YWlucyB0aGUgY3VycmVudCBlbnRyeSwgd2hpbGUgKi8KKwkJCQkJCQkJLyogZnVsbF9kaXJfbmFtZSBjb250YWlucyB0aGUgcmVzdCAqLworCisJc3RyY3B5IChuYW1lX3NlYXJjaCxkaXJfbmFtZSk7CQkJCS8qIG5hbWVfc2VhcmNoIGlzIHVzZWQgdG8gaG9sZCB0aGUgcmVxdWlyZWQgZW50cnkgbmFtZSAqLworCisJaWYgKGRpcl9lbnRyeV9wdHItPm5hbWVfbGVuICE9IHN0cmxlbiAoZGlyX25hbWUpIHx8CisJICAgIHN0cm5jbXAgKGRpcl9uYW1lLGRpcl9lbnRyeV9wdHItPm5hbWUsZGlyX2VudHJ5X3B0ci0+bmFtZV9sZW4pIT0wKQorCQlpbmZvPXNlYXJjaF9kaXJfZW50cmllcyAoJmFjdGlvbl9uYW1lLCZzdGF0dXMpOwkvKiBTZWFyY2ggZm9yIHRoZSBlbnRyeS4gQW5zd2VyIGluIGluZm8uICovCisJZWxzZSB7CisJCXN0YXR1cz1GT1VORDtpbmZvPWZpbGVfaW5mbzsKKwl9CisKKwlpZiAoc3RhdHVzPT1GT1VORCkgewkJCQkJLyogSWYgZm91bmQgKi8KKwkJZmlsZV9pbmZvPWluZm87CQkJCQkvKiBTd2l0Y2ggdG8gaXQsIGJ5IHNldHRpbmcgdGhlIGdsb2JhbCBmaWxlX2luZm8gKi8KKwkJZGlzcGF0Y2ggKCJyZW1lbWJlciBpbnRlcm5hbF92YXJpYWJsZSIpOwkvKiBNb3ZlIHRoZSBpbm9kZSBpbnRvIHRoZSBvYmplY3RzIG1lbW9yeSAqLworCisJCWRpc3BhdGNoICgiZm9sbG93aW5vZGUiKTsJCQkvKiBHbyB0byB0aGUgaW5vZGUgcG9pbnRlZCBieSB0aGlzIGRpcmVjdG9yeSBlbnRyeSAqLworCisJCWlmIChTX0lTTE5LICh0eXBlX2RhdGEudS50X2V4dDJfaW5vZGUuaV9tb2RlKSkgey8qIFN5bWJvbGljIGxpbmsgPyAqLworCisJCQlpZiAodHlwZV9kYXRhLnUudF9leHQyX2lub2RlLmlfc2l6ZSA+IDYwKSB7CS8qIEknbSBsYXp5LCBJIGd1ZXNzIDotKSAqLworCQkJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIFNvcnJ5LCBPbmx5IGZhc3Qgc3ltYm9saWMgbGluayBmb2xsb3dpbmcgaXMgY3VycmVudGx5IHN1cHBvcnRlZFxuIik7CisJCQkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQkJCQkJCS8qIEdldCB0aGUgcG9pbnRlZCBuYW1lIGFuZCBhcHBlbmQgdGhlIHByZXZpb3VzIHBhdGggKi8KKworCQkJc3RyY3B5ICh0ZW1wMiwodW5zaWduZWQgY2hhciAqKSAmdHlwZV9kYXRhLnUudF9leHQyX2lub2RlLmlfYmxvY2spOworCQkJc3RyY2F0ICh0ZW1wMiwiLyIpOworCQkJc3RyY2F0ICh0ZW1wMixmdWxsX2Rpcl9uYW1lKTsKKworCQkJZGlzcGF0Y2ggKCJyZWNhbGwgaW50ZXJuYWxfdmFyaWFibGUiKTsJLyogUmV0dXJuIHRvIHRoZSBvcmlnaW5hbCBpbm9kZSAqLworCQkJZGlzcGF0Y2ggKCJkaXIiKTsJCQkvKiBhbmQgdG8gdGhlIGRpcmVjdG9yeSAqLworCisJCQlzcHJpbnRmICh0ZW1wLCJjZCAlcyIsdGVtcDIpOwkJLyogQW5kIGNvbnRpbnVlIGZyb20gdGhlcmUgYnkgZGlzcGF0Y2hpbmcgYSBjZCBjb21tYW5kICovCisJCQlkaXNwYXRjaCAodGVtcCk7CQkJLyogKHdoaWNoIGNhbiBjYWxsIG91cnNlbGYgb3IgdGhlIGdlbmVyYWwgY2QpICovCisKKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChTX0lTRElSICh0eXBlX2RhdGEudS50X2V4dDJfaW5vZGUuaV9tb2RlKSkgeyAvKiBJcyBpdCBhbiBpbm9kZSBvZiBhIGRpcmVjdG9yeSA/ICovCisKKwkJCWRpc3BhdGNoICgiZGlyIik7CQkJLyogWWVzIC0gUGFzcyB0byB0aGUgcG9pbnRlZCBkaXJlY3RvcnkgKi8KKworCQkJaWYgKGZ1bGxfZGlyX25hbWUgWzBdICE9IDApIHsJCS8qIEFuZCBjYWxsIG91cnNlbGYgd2l0aCB0aGUgcmVzdCBvZiB0aGUgcGF0aG5hbWUgKi8KKwkJCQlzcHJpbnRmICh0ZW1wLCJjZCAlcyIsZnVsbF9kaXJfbmFtZSk7CisJCQkJZGlzcGF0Y2ggKHRlbXApOworCQkJfQorCisJCQlyZXR1cm47CisJCX0KKworCQllbHNlIHsJCQkJCQkvKiBJZiB3ZSBjYW4ndCBjb250aW51ZSBmcm9tIGhlcmUsIHdlJ2xsIGp1c3Qgc3RvcCAqLworCQkJd3ByaW50dyAoY29tbWFuZF93aW4sIkNhblwndCBjb250aW51ZSAtIFN0b3BwaW5nIGF0IGxhc3QgaW5vZGVcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBEaXJlY3RvcnkgZW50cnkgJXMgbm90IGZvdW5kLlxuIixkaXJfbmFtZSk7CS8qIEhtbSwgYW4gaW52YWxpZCBwYXRoIHNvbWV3aGVyZSAqLworCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7Cit9CisKK2ludCBhY3Rpb25fbmFtZSAoc3RydWN0IHN0cnVjdF9maWxlX2luZm8gKmluZm8pCisKKy8qCisKK0NvbXBhcmVzIHRoZSBjdXJyZW50IHNlYXJjaCBlbnRyeSBuYW1lIChzb21ld2hlcmUgaW5zaWRlIGluZm8pIHdpdGggdGhlIHJlcXVpcmVkIG5hbWUgKGluIG5hbWVfc2VhcmNoKS4KK1JldHVybnMgRk9VTkQgaWYgZm91bmQsIG9yIENPTlRJTlVFIGlmIG5vdCBmb3VuZC4KKworKi8KKworeworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICpkaXJfZW50cnlfcHRyOworCisJZGlyX2VudHJ5X3B0cj0oc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKikgKGluZm8tPmJ1ZmZlcitpbmZvLT5kaXJfZW50cnlfb2Zmc2V0KTsKKworCWlmIChkaXJfZW50cnlfcHRyLT5uYW1lX2xlbiAhPSBzdHJsZW4gKG5hbWVfc2VhcmNoKSkKKwkJcmV0dXJuIChDT05USU5VRSk7CisKKwlpZiAoc3RybmNtcCAoZGlyX2VudHJ5X3B0ci0+bmFtZSxuYW1lX3NlYXJjaCxkaXJfZW50cnlfcHRyLT5uYW1lX2xlbik9PTApCisJCXJldHVybiAoRk9VTkQpOworCisJcmV0dXJuIChDT05USU5VRSk7Cit9CisKK3ZvaWQgdHlwZV9kaXJfX19lbnRyeSAoY2hhciAqY29tbWFuZF9saW5lKQorCisvKgorCitTZWxlY3RzIGEgZGlyZWN0b3J5IGVudHJ5IGFjY29yZGluZyB0byBpdHMgbnVtYmVyLgorc2VhcmNoX2Rpcl9lbnRyaWVzIGlzIHVzZWQgYWxvbmcgd2l0aCBhY3Rpb25fZW50cnlfbnVtLCBpbiB0aGUgc2FtZSBmYXNoaW9uIGFzIHRoZSBwcmV2aW91cyB1c2FnZSBvZiBzZWFyY2hfZGlyX2VudHJpZXMuCisKKyovCisKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvIGluZm87CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCWlmICgqcHRyPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEFyZ3VtZW50X25vdF9zcGVjaWZpZWRcbiIpO3dyZWZyZXNoIChjb21tYW5kX3dpbik7CisJCXJldHVybjsKKwl9CisJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCWVudHJ5X251bV9zZWFyY2g9YXRvbCAoYnVmZmVyKTsKKworCWlmIChlbnRyeV9udW1fc2VhcmNoIDwgMCB8fCBlbnRyeV9udW1fc2VhcmNoID49IGZpbGVfaW5mby5kaXJfZW50cmllc19jb3VudCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBFbnRyeSBudW1iZXIgb3V0IG9mIHJhbmdlXG4iKTt3cmVmcmVzaCAoY29tbWFuZF93aW4pOworCQlyZXR1cm47CisJfQorCisJaW5mbz1zZWFyY2hfZGlyX2VudHJpZXMgKCZhY3Rpb25fZW50cnlfbnVtLCZzdGF0dXMpOworCWlmIChzdGF0dXM9PUZPVU5EKSB7CisJCWZpbGVfaW5mbz1pbmZvOworCQlkaXNwYXRjaCAoInNob3ciKTsKKwkJcmV0dXJuOworCX0KKyNpZmRlZiBERUJVRworCWludGVybmFsX2Vycm9yICgiZGlyX2NvbSIsInR5cGVfZGlyX19fZW50cnkiLCJBY2NvcmRpbmcgdG8gb3VyIGdhdGhlcmVkIGRhdGEsIHdlIHNob3VsZCBoYXZlIGZvdW5kIHRoaXMgZW50cnkiKTsKKyNlbmRpZgorfQorCitpbnQgYWN0aW9uX2VudHJ5X251bSAoc3RydWN0IHN0cnVjdF9maWxlX2luZm8gKmluZm8pCisKKy8qCisKK1VzZWQgYnkgdGhlIGFib3ZlIGZ1bmN0aW9uLiBKdXN0IGNvbXBhcmVzIHRoZSBjdXJyZW50IG51bWJlciAoaW4gaW5mbykgd2l0aCB0aGUgcmVxdWlyZWQgb25lLgorCisqLworCit7CisJaWYgKGluZm8tPmRpcl9lbnRyeV9udW0gPT0gZW50cnlfbnVtX3NlYXJjaCkKKwkJcmV0dXJuIChGT1VORCk7CisKKwlyZXR1cm4gKENPTlRJTlVFKTsKK30KKwordm9pZCB0eXBlX2Rpcl9fX2ZvbGxvd2lub2RlIChjaGFyICpjb21tYW5kX2xpbmUpCisKKy8qCisKK0hlcmUgd2UgcGFzcyB0byB0aGUgaW5vZGUgcG9pbnRlZCBieSB0aGUgY3VycmVudCBlbnRyeS4KK0l0IGludm9sdmVzIGNvbXB1dGluZyB0aGUgZGV2aWNlIG9mZnNldCBvZiB0aGUgaW5vZGUgYW5kIHVzaW5nIGRpcmVjdGx5IHRoZSBzZXRvZmZzZXQgYW5kIHNldHR5cGUgY29tbWFuZHMuCisKKyovCit7CisJbG9uZyBpbm9kZV9vZmZzZXQ7CisJY2hhciBidWZmZXIgWzgwXTsKKworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICpkaXJfZW50cnlfcHRyOworCisJbG93X3JlYWQgKGZpbGVfaW5mby5idWZmZXIsZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLGZpbGVfaW5mby5nbG9iYWxfYmxvY2tfb2Zmc2V0KTsKKwlkaXJfZW50cnlfcHRyPShzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqKSAoZmlsZV9pbmZvLmJ1ZmZlcitmaWxlX2luZm8uZGlyX2VudHJ5X29mZnNldCk7CisKKwlpbm9kZV9vZmZzZXQ9aW5vZGVfbnVtX3RvX2lub2RlX29mZnNldCAoZGlyX2VudHJ5X3B0ci0+aW5vZGUpOwkJCS8qIENvbXB1dGUgdGhlIGlub2RlJ3Mgb2Zmc2V0ICovCisJc3ByaW50ZiAoYnVmZmVyLCJzZXRvZmZzZXQgJWxkIixpbm9kZV9vZmZzZXQpO2Rpc3BhdGNoIChidWZmZXIpOwkJLyogTW92ZSB0byBpdCAqLworCXNwcmludGYgKGJ1ZmZlciwic2V0dHlwZSBleHQyX2lub2RlIik7ZGlzcGF0Y2ggKGJ1ZmZlcik7CQkJLyogYW5kIHNldCB0aGUgdHlwZSB0byBhbiBpbm9kZSAqLworfQorCit2b2lkIHR5cGVfZGlyX19faW5vZGUgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworLyoKKworUmV0dXJucyB0byB0aGUgcGFyZW50IGlub2RlIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KK1RoaXMgaXMgdHJpdmlhbCwgYXMgd2UgdHlwZV9kYXRhIGlzIHN0aWxsIGludGFjdCBhbmQgY29udGFpbnMgdGhlIHBhcmVudCBpbm9kZSAhCisKKyovCisKK3sKKwlkaXNwYXRjaCAoInNldHR5cGUgZXh0Ml9pbm9kZSIpOworfQorCisKK3ZvaWQgdHlwZV9kaXJfX19zaG93IChjaGFyICpjb21tYW5kX2xpbmUpCisKKy8qCisKK1dlIHVzZSBzZWFyY2hfZGlyX2VudHJpZXMgdG8gcnVuIG9uIGFsbCB0aGUgZW50cmllcy4gRWFjaCB0aW1lLCBhY3Rpb25fc2hvdyB3aWxsIGJlIGNhbGxlZCB0byBzaG93IG9uZSBlbnRyeS4KKworKi8KKworeworCWludCBzdGF0dXM7CisKKwl3bW92ZSAoc2hvd19wYWQsMCwwKTsKKwlzaG93X3BhZF9pbmZvLm1heF9saW5lPS0xOworCisJc2VhcmNoX2Rpcl9lbnRyaWVzICgmYWN0aW9uX3Nob3csJnN0YXR1cyk7CisJc2hvd19wYWRfaW5mby5saW5lPWZpbGVfaW5mby5kaXJfZW50cnlfbnVtLXNob3dfcGFkX2luZm8uZGlzcGxheV9saW5lcy8yOworCXJlZnJlc2hfc2hvd19wYWQgKCk7CisJc2hvd19kaXJfc3RhdHVzICgpOworfQorCitpbnQgYWN0aW9uX3Nob3cgKHN0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvICppbmZvKQorCisvKgorCitTaG93IHRoZSBjdXJyZW50IHNlYXJjaCBlbnRyeSAoaW5mbykgaW4gb25lIGxpbmUuIElmIHRoZSBlbnRyeSBoYXBwZW5zIHRvIGJlIHRoZSBjdXJyZW50IGVkaXRlZCBlbnRyeSwgaXQgaXMgaGlnaGxpZ2h0ZWQuCisKKyovCisKK3sKKwl1bnNpZ25lZCBjaGFyIHRlbXAgWzgwXTsKKwlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqZGlyX2VudHJ5X3B0cjsKKworCWRpcl9lbnRyeV9wdHI9KHN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICopIChpbmZvLT5idWZmZXIraW5mby0+ZGlyX2VudHJ5X29mZnNldCk7CisKKwlpZiAoaW5mby0+ZGlyX2VudHJ5X251bSA9PSBmaWxlX2luZm8uZGlyX2VudHJ5X251bSkJCQkJLyogSGlnaGxpZ2h0IHRoZSBjdXJyZW50IGVudHJ5ICovCisJCXdhdHRyc2V0IChzaG93X3BhZCxBX1JFVkVSU0UpOworCisJc3RybmNweSAodGVtcCxkaXJfZW50cnlfcHRyLT5uYW1lLGRpcl9lbnRyeV9wdHItPm5hbWVfbGVuKTsJCQkvKiBUaGUgbmFtZSBpcyBub3QgdGVybWluYXRlZCAqLworCXRlbXAgW2Rpcl9lbnRyeV9wdHItPm5hbWVfbGVuXT0wOworCWlmIChkaXJfZW50cnlfcHRyLT5uYW1lX2xlbiA+IChDT0xTIC0gNTUpICYmIENPTFMgPiA1NSkKKwkJdGVtcCBbQ09MUy01NV09MDsKKwl3cHJpbnR3IChzaG93X3BhZCwiaW5vZGUgPSAlLThsdSByZWNfbGVuID0gJS00bHUgbmFtZV9sZW4gPSAlLTNsdSBuYW1lID0gJXNcbiIsCS8qIERpc3BsYXkgdGhlIHZhcmlvdXMgZmllbGRzICovCisJCSBkaXJfZW50cnlfcHRyLT5pbm9kZSxkaXJfZW50cnlfcHRyLT5yZWNfbGVuLGRpcl9lbnRyeV9wdHItPm5hbWVfbGVuLHRlbXApOworCisJc2hvd19wYWRfaW5mby5tYXhfbGluZSsrOworCisJaWYgKGluZm8tPmRpcl9lbnRyeV9udW0gPT0gZmlsZV9pbmZvLmRpcl9lbnRyeV9udW0pCisJCXdhdHRyc2V0IChzaG93X3BhZCxBX05PUk1BTCk7CisKKwlyZXR1cm4gKENPTlRJTlVFKTsJCQkJCQkJCS8qIEFuZCBwYXNzIHRvIHRoZSBuZXh0ICovCit9CisKK3ZvaWQgdHlwZV9kaXJfX19uZXh0IChjaGFyICpjb21tYW5kX2xpbmUpCisKKy8qCisKK1RoaXMgZnVuY3Rpb24gbW92ZXMgdG8gdGhlIG5leHQgZGlyZWN0b3J5IGVudHJ5LiBJdCBqdXN0IHVzZXMgdGhlIGN1cnJlbnQgaW5mb3JtYXRpb24gYW5kIHRoZSBlbnRyeSBjb21tYW5kLgorCisqLworCit7CisJaW50IG9mZnNldD0xOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKworCWlmICgqcHRyIT0wKSB7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkJb2Zmc2V0Kj1hdG9sIChidWZmZXIpOworCX0KKworCXNwcmludGYgKGJ1ZmZlciwiZW50cnkgJWxkIixmaWxlX2luZm8uZGlyX2VudHJ5X251bStvZmZzZXQpO2Rpc3BhdGNoIChidWZmZXIpOworCit9CisKK3ZvaWQgdHlwZV9kaXJfX19wcmV2IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlpbnQgb2Zmc2V0PTE7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQlvZmZzZXQqPWF0b2wgKGJ1ZmZlcik7CisJfQorCisJc3ByaW50ZiAoYnVmZmVyLCJlbnRyeSAlbGQiLGZpbGVfaW5mby5kaXJfZW50cnlfbnVtLW9mZnNldCk7ZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9CisKK3ZvaWQgc2hvd19kaXJfc3RhdHVzICh2b2lkKQorCisvKgorCitWYXJpb3VzIHN0YXRpc3RpY3MgYWJvdXQgdGhlIGRpcmVjdG9yeS4KKworKi8KKworeworCWxvbmcgaW5vZGVfbnVtOworCisJd21vdmUgKHNob3dfd2luLDAsMCk7CisJd3ByaW50dyAoc2hvd193aW4sIkRpcmVjdG9yeSBsaXN0aW5nLiBCbG9jayAlbGQuICIsZmlsZV9pbmZvLmdsb2JhbF9ibG9ja19udW0pOworCXdwcmludHcgKHNob3dfd2luLCJEaXJlY3RvcnkgZW50cnkgJWxkIG9mICVsZC5cbiIsZmlsZV9pbmZvLmRpcl9lbnRyeV9udW0sZmlsZV9pbmZvLmRpcl9lbnRyaWVzX2NvdW50LTEpOworCXdwcmludHcgKHNob3dfd2luLCJEaXJlY3RvcnkgT2Zmc2V0ICVsZCBvZiAlbGQuICIsZmlsZV9pbmZvLmZpbGVfb2Zmc2V0LGZpbGVfaW5mby5maWxlX2xlbmd0aC0xKTsKKworCWlub2RlX251bT1pbm9kZV9vZmZzZXRfdG9faW5vZGVfbnVtIChmaWxlX2luZm8uaW5vZGVfb2Zmc2V0KTsKKwl3cHJpbnR3IChzaG93X3dpbiwiRmlsZSBpbm9kZSAlbGQuIEluZGlyZWN0aW9uIGxldmVsICVsZC5cbiIsaW5vZGVfbnVtLGZpbGVfaW5mby5sZXZlbCk7CisKKwlyZWZyZXNoX3Nob3dfd2luICgpOworfQorCit2b2lkIHR5cGVfZGlyX19fcmVtZW1iZXIgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworLyoKKworVGhpcyBpcyBvdmVycmlkZWQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHJlbWVtYmVyIGEgZGlyZWN0b3J5IC0gSXQgaXMgdG9vIGNvbXBsaWNhdGVkLiBJbnN0ZWFkLCB3ZSByZW1lbWJlciB0aGUKK2lub2RlIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworKi8KKworeworCWludCBmb3VuZD0wOworCWxvbmcgZW50cnlfbnVtOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKwlzdHJ1Y3Qgc3RydWN0X2Rlc2NyaXB0b3IgKmRlc2NyaXB0b3JfcHRyOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCisJaWYgKCpwdHI9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gQXJndW1lbnQgbm90IHNwZWNpZmllZFxuIik7d3JlZnJlc2ggKGNvbW1hbmRfd2luKTsKKwkJcmV0dXJuOworCX0KKworCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKworCWVudHJ5X251bT1yZW1lbWJlcl9saWZvLmVudHJpZXNfY291bnQrKzsKKwlpZiAoZW50cnlfbnVtPlJFTUVNQkVSX0NPVU5ULTEpIHsKKwkJZW50cnlfbnVtPTA7CisJCXJlbWVtYmVyX2xpZm8uZW50cmllc19jb3VudC0tOworCX0KKworCWRlc2NyaXB0b3JfcHRyPWZpcnN0X3R5cGU7CisJd2hpbGUgKGRlc2NyaXB0b3JfcHRyIT1OVUxMICYmICFmb3VuZCkgeworCQlpZiAoc3RyY21wIChkZXNjcmlwdG9yX3B0ci0+bmFtZSwiZXh0Ml9pbm9kZSIpPT0wKQorCQkJZm91bmQ9MTsKKwkJZWxzZQorCQkJZGVzY3JpcHRvcl9wdHI9ZGVzY3JpcHRvcl9wdHItPm5leHQ7CisJfQorCisKKwlyZW1lbWJlcl9saWZvLm9mZnNldCBbZW50cnlfbnVtXT1kZXZpY2Vfb2Zmc2V0OworCXJlbWVtYmVyX2xpZm8udHlwZSBbZW50cnlfbnVtXT1kZXNjcmlwdG9yX3B0cjsKKwlzdHJjcHkgKHJlbWVtYmVyX2xpZm8ubmFtZSBbZW50cnlfbnVtXSxidWZmZXIpOworCisJd3ByaW50dyAoY29tbWFuZF93aW4sIk9iamVjdCAlcyBpbiBPZmZzZXQgJWxkIHJlbWVtYmVyZWQgYXMgJXNcbiIsZGVzY3JpcHRvcl9wdHItPm5hbWUsZGV2aWNlX29mZnNldCxidWZmZXIpOworCXdyZWZyZXNoIChjb21tYW5kX3dpbik7Cit9CisKK3ZvaWQgdHlwZV9kaXJfX19zZXQgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworLyoKKworU2luY2UgdGhlIGRpciBvYmplY3QgZG9lc24ndCBoYXZlIHZhcmlhYmxlcywgd2UgcHJvdmlkZSB0aGUgaW1wcmVzc2lvbiB0aGF0IGl0IGhhcyBoZXJlLiBleHQyX2Rpcl9lbnRyeSB3YXMgbm90IHVzZWQKK2JlY2F1c2UgaXQgaXMgb2YgdmFyaWFibGUgbGVuZ3RoLgorCisqLworCit7CisJaW50IGZvdW5kPTA7CisJdW5zaWduZWQgY2hhciAqcHRyLGJ1ZmZlciBbODBdLHZhcmlhYmxlIFs4MF0sdmFsdWUgWzgwXSx0ZW1wIFs4MF07CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKmRpcl9lbnRyeV9wdHI7CisKKwlkaXJfZW50cnlfcHRyPShzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqKSAoZmlsZV9pbmZvLmJ1ZmZlcitmaWxlX2luZm8uZGlyX2VudHJ5X29mZnNldCk7CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHI9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTWlzc2luZyBhcmd1bWVudHNcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9CisJcGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJcHRyPXN0cmNociAoYnVmZmVyLCc9Jyk7CisJaWYgKHB0cj09TlVMTCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBCYWQgc3ludGF4XG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisJc3RybmNweSAodmFyaWFibGUsYnVmZmVyLHB0ci1idWZmZXIpO3ZhcmlhYmxlIFtwdHItYnVmZmVyXT0wOworCXN0cmNweSAodmFsdWUsKytwdHIpOworCisJaWYgKHN0cmNhc2VjbXAgKCJpbm9kZSIsdmFyaWFibGUpPT0wKSB7CisJCWZvdW5kPTE7CisJCWRpcl9lbnRyeV9wdHItPmlub2RlPWF0b2wgKHZhbHVlKTsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIlZhcmlhYmxlICVzIHNldCB0byAlbHVcbiIsdmFyaWFibGUsZGlyX2VudHJ5X3B0ci0+aW5vZGUpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisKKwl9CisKKwlpZiAoc3RyY2FzZWNtcCAoInJlY19sZW4iLHZhcmlhYmxlKT09MCkgeworCQlmb3VuZD0xOworCQlkaXJfZW50cnlfcHRyLT5yZWNfbGVuPSh1bnNpZ25lZCBpbnQpIGF0b2wgKHZhbHVlKTsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIlZhcmlhYmxlICVzIHNldCB0byAlbHVcbiIsdmFyaWFibGUsZGlyX2VudHJ5X3B0ci0+cmVjX2xlbik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKworCX0KKworCWlmIChzdHJjYXNlY21wICgibmFtZV9sZW4iLHZhcmlhYmxlKT09MCkgeworCQlmb3VuZD0xOworCQlkaXJfZW50cnlfcHRyLT5uYW1lX2xlbj0odW5zaWduZWQgaW50KSBhdG9sICh2YWx1ZSk7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJWYXJpYWJsZSAlcyBzZXQgdG8gJWx1XG4iLHZhcmlhYmxlLGRpcl9lbnRyeV9wdHItPm5hbWVfbGVuKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCisJfQorCisJaWYgKHN0cmNhc2VjbXAgKCJuYW1lIix2YXJpYWJsZSk9PTApIHsKKwkJZm91bmQ9MTsKKwkJaWYgKHN0cmxlbiAodmFsdWUpID4gZGlyX2VudHJ5X3B0ci0+bmFtZV9sZW4pIHsKKwkJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIExlbmd0aCBvZiBuYW1lIGdyZWF0ZXIgdGhlbiBuYW1lX2xlblxuIik7CisJCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwkJfQorCQlzdHJuY3B5IChkaXJfZW50cnlfcHRyLT5uYW1lLHZhbHVlLHN0cmxlbiAodmFsdWUpKTsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIlZhcmlhYmxlICVzIHNldCB0byAlc1xuIix2YXJpYWJsZSx2YWx1ZSk7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKworCX0KKworCWlmIChmb3VuZCkgeworCQl3YXR0cnNldCAoc2hvd19wYWQsQV9SRVZFUlNFKTsKKwkJc3RybmNweSAodGVtcCxkaXJfZW50cnlfcHRyLT5uYW1lLGRpcl9lbnRyeV9wdHItPm5hbWVfbGVuKTsKKwkJdGVtcCBbZGlyX2VudHJ5X3B0ci0+bmFtZV9sZW5dPTA7CisJCXdtb3ZlIChzaG93X3BhZCxmaWxlX2luZm8uZGlyX2VudHJ5X251bSwwKTsKKwkJd3ByaW50dyAoc2hvd19wYWQsImlub2RlID0gJS04bHUgcmVjX2xlbiA9ICUtNGx1IG5hbWVfbGVuID0gJS0zbHUgbmFtZSA9ICVzXG4iLAorCQkJIGRpcl9lbnRyeV9wdHItPmlub2RlLGRpcl9lbnRyeV9wdHItPnJlY19sZW4sZGlyX2VudHJ5X3B0ci0+bmFtZV9sZW4sdGVtcCk7CisJCXdhdHRyc2V0IChzaG93X3BhZCxBX05PUk1BTCk7CisJCXNob3dfcGFkX2luZm8ubGluZT1maWxlX2luZm8uZGlyX2VudHJ5X251bS1zaG93X3BhZF9pbmZvLmRpc3BsYXlfbGluZXMvMjsKKwkJcmVmcmVzaF9zaG93X3BhZCAoKTsKKwkJc2hvd19kaXJfc3RhdHVzICgpOworCX0KKworCWVsc2UgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBWYXJpYWJsZSAlcyBub3QgZm91bmRcbiIsdmFyaWFibGUpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCX0KKworfQorCit2b2lkIHR5cGVfZGlyX19fd3JpdGVkYXRhIChjaGFyICpjb21tYW5kX2xpbmUpCisKKy8qCisKK1dlIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBzaW5jZSB0aGUgZGF0YSBpcyBub3QgaW4gdHlwZV9kYXRhLiBJbnN0ZWFkLCB3ZSBoYXZlIHRvIHdyaXRlIHRoZSBidWZmZXIgd2hpY2ggY29ycmVzcG9uZHMKK3RvIHRoZSBjdXJyZW50IGJsb2NrLgorCisqLworCit7CisJbG93X3dyaXRlIChmaWxlX2luZm8uYnVmZmVyLGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSxmaWxlX2luZm8uZ2xvYmFsX2Jsb2NrX29mZnNldCk7CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZXh0MmVkL2Rpc2suYyBiL2V4dDJlZC9kaXNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMyNDMxMgotLS0gL2Rldi9udWxsCisrKyBiL2V4dDJlZC9kaXNrLmMKQEAgLTAsMCArMSwyMzkgQEAKKy8qCisKKy91c3Ivc3JjL2V4dDJlZC9kaXNrLmMKKworQSBwYXJ0IG9mIHRoZSBleHRlbmRlZCBmaWxlIHN5c3RlbSAyIGRpc2sgZWRpdG9yLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgZmlsZXN5c3RlbSdzIGRpc2sgYWN0aXZpdHkgcGFzcyB0aHJvdWdoIGhlcmUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZmlsZSBpcyBhY3RpbmcgYXMgYSBmaWx0ZXIgLSBCZWZvcmUgd2UgcGFzcyBhbiBhY3R1YWwgcmVhZCBvciB3cml0ZSByZXF1ZXN0IHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtLCB3ZQorZG91YmxlIGNoZWNrIHRoZSB2YXJpb3VzIHBlcm1pc3Npb25zIGFuZCBwb3NzaWJsZSBlcnJvcnMgaGVyZS4KKworVGhlIG1ham9yIHVwZGF0ZSB3aGljaCBuZWVkcyB0byBiZSBkb25lIGhlcmUgaXMgc3dpdGNoaW5nIHRvIHRoZSB1c2Ugb2YgdGhlIGxsc2VlayBzeXN0ZW0gY2FsbCwgc28gdGhhdCB3ZSB3aWxsCitiZSBhYmxlIHRvIHN1cHBvcnQgZXh0MiBmaWxlc3lzdGVtcyB1cCB0byA0IFRCLiBDdXJyZW50bHksIGR1ZSB0byB0aGUgc3RhbmRhcmQgZnNlZWsgdXNhZ2UsIHdlIGNhbid0IGhhbmRsZQorZmlsZXN5c3RlbXMgYmlnZ2VyIHRoYW4gNCBHQi4gVGhlIGxpbWl0IGlzIGFjdHVhbGx5IDIgR0IgYmVjYXVzZSBJIHVzZWQgbG9uZyByYXRoZXIgdGhhbiB1bnNpZ25lZCBsb25nIGxvbmcgYXQgdG9vCittYW55IHBsYWNlcyBpbiB0aGUgcHJvZ3JhbS4gVG8gY29uY2x1ZGUgLSBUaGlzIHVwZ3JhZGUgbmVlZHMgdG8gYmUgZG9uZSBjYXJlZnVseTsgVGhlcmUgYXJlIG1hbnkgcGxhY2VzIHRvIGNoYW5nZS4KKworRmlyc3Qgd3JpdHRlbiBvbjogQXByaWwgOSAxOTk1CisKK0NvcHlyaWdodCAoQykgMTk5NSBHYWRpIE94bWFuCisKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImV4dDJlZC5oIgorCitpbnQgd3JpdGVfYWNjZXNzOworCitpbnQgbG93X3JlYWQgKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcix1bnNpZ25lZCBsb25nIGxlbmd0aCx1bnNpZ25lZCBsb25nIG9mZnNldCkKKworLyoKKworVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gd2UgbmVlZCB0byByZWFkIHNvbWV0aGluZyBmcm9tIHRoZSBmaWxlc3lzdGVtLgorCisqLworCit7CisKKyNpZmRlZiBERUJVRworCisJY2hhciB0ZW1wIFs4MF07CisKKwlpZiAoZGV2aWNlX2hhbmRsZT09TlVMTCkgewkJCQkJLyogQ2hlY2sgdGhhdCBhIGRldmljZSBpcyBpbmRlZWQgb3BlbiAqLworCQlpbnRlcm5hbF9lcnJvciAoIk5vIGRldmljZSBvcGVuZWQgeWV0IHJlYWQgcmVxdWVzdGVkIiwiZGlzayIsImxvd19yZWFkIik7CisJCXJldHVybiAoMCk7CisJfQorCWlmIChvZmZzZXQgPiBmaWxlX3N5c3RlbV9pbmZvLmZpbGVfc3lzdGVtX3NpemUpIHsJCS8qIENoZWNrIHRoYXQgdGhlIG9mZnNldCBpcyB3aXRoaW4gbGltaXRzICovCisJCXNwcmludGYgKHRlbXAsIlNlZWsgb2Zmc2V0ICVsZCBpcyBvdXQgb2YgcmFuZ2UiLG9mZnNldCk7CisJCWludGVybmFsX2Vycm9yICh0ZW1wLCJkaXNrIiwibG93X3JlYWQiKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKyNlbmRpZgorCisJaWYgKCAoZnNlZWsgKGRldmljZV9oYW5kbGUsb2Zmc2V0LFNFRUtfU0VUKSk9PS0xKSB7CQkvKiBTZWVrIHRvIHRoZSByZXF1aXJlZCBvZmZzZXQgKi8KKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRmFpbGVkIHRvIHNlZWsgdG8gb2Zmc2V0ICVsZCBpbiBkZXZpY2UgJXNcbiIsb2Zmc2V0LGRldmljZV9uYW1lKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuICgwKTsKKwl9OworCisJaWYgKCAoZnJlYWQgKGJ1ZmZlciwxLGxlbmd0aCxkZXZpY2VfaGFuZGxlKSk9PS0xKSB7CQkvKiBBbmQgZG8gdGhlIGFjdHVhbCByZWFkaW5nICovCisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEZhaWxlZCB0byByZWFkIGZyb20gb2Zmc2V0ICVsZCBpbiBkZXZpY2UgJXNcbiIsb2Zmc2V0LGRldmljZV9uYW1lKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm4gKDApOworCX07CisKKwlyZXR1cm4gKDEpOworfQorCitpbnQgbG93X3dyaXRlICh1bnNpZ25lZCBjaGFyICpidWZmZXIsdW5zaWduZWQgbG9uZyBsZW5ndGgsdW5zaWduZWQgbG9uZyBvZmZzZXQpCisKKy8qCisKK1RoaXMgaXMgdXNlZCB0byBjaGFuZ2Ugc29tZXRoaW5nIGluIHRoZSBmaWxlc3lzdGVtLgord3JpdGVfYWNjZXNzIGlzIGNoZWNrZWQgdG8gc2VlIGlmIHdlIGFyZSBhbGxvd2VkIHRvIGRvIHRoZSBhY3R1YWwgd3JpdGluZy4KK0FzIGEgZG91YmxlIHNhZmV0eSBtZWFzdXJlLCBBbGxvd0NoYW5nZXMgaXMgcmVjaGVja2VkIGhlcmUuCitJZiBsb2dnaW5nIGlzIGVuYWJsZWQsIHdlIGxvZyB0aGUgY2hhbmdlIGJlZm9yZSB3cml0aW5nIGl0IHRvIHRoZSBkZXZpY2UuCisKKyovCit7CisJY2hhciB0ZW1wIFs4MF07CisKKwlpZiAoIXdyaXRlX2FjY2VzcykgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBXcml0ZSBhY2Nlc3Mgbm90IGF2aWFibGUgKHVzZSBlbmFibGV3cml0ZSlcbiIpOworCQlyZXR1cm4gKDApOworCX0KKworI2lmZGVmIERFQlVHCisKKwlpZiAoIUFsbG93Q2hhbmdlcykgeworCQlpbnRlcm5hbF9lcnJvciAoIkFsbG93Q2hhbmdlcz0wIHlldCBlbmFibGV3cml0ZSBzdWNjZWVkZWQiLCJkaXNrIiwibG93X3dyaXRlIik7CisJCXJldHVybiAoMCk7CisJfQorCisJaWYgKGRldmljZV9oYW5kbGU9PU5VTEwpIHsKKwkJaW50ZXJuYWxfZXJyb3IgKCJObyBkZXZpY2Ugb3BlbmVkIHlldCByZWFkIHJlcXVlc3RlZCIsImRpc2siLCJsb3dfd3JpdGUiKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlpZiAob2Zmc2V0ID4gZmlsZV9zeXN0ZW1faW5mby5maWxlX3N5c3RlbV9zaXplKSB7CisJCXNwcmludGYgKHRlbXAsIlNlZWsgb2Zmc2V0ICVsZCBpcyBvdXQgb2YgcmFuZ2UiLG9mZnNldCk7CisJCWludGVybmFsX2Vycm9yICh0ZW1wLCJkaXNrIiwibG93X3dyaXRlIik7CisJCXJldHVybiAoMCk7CisJfQorCisjZW5kaWYKKworCWlmIChMb2dDaGFuZ2VzKQorCQlpZiAoIWxvZ19jaGFuZ2VzIChidWZmZXIsbGVuZ3RoLG9mZnNldCkpCisJCQlyZXR1cm4gKDApOworCisJaWYgKCAoZnNlZWsgKGRldmljZV9oYW5kbGUsb2Zmc2V0LFNFRUtfU0VUKSk9PS0xKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEZhaWxlZCB0byBzZWVrIHRvIG9mZnNldCAlbGQgaW4gZGV2aWNlICVzXG4iLG9mZnNldCxkZXZpY2VfbmFtZSk7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuICgwKTsKKwl9OworCisKKwlpZiAoIChmd3JpdGUgKGJ1ZmZlciwxLGxlbmd0aCxkZXZpY2VfaGFuZGxlKSk9PS0xKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEZhaWxlZCB0byB3cml0ZSB0byBvZmZzZXQgJWxkIGluIGRldmljZSAlc1xuIixvZmZzZXQsZGV2aWNlX25hbWUpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybiAoMCk7CisJfTsKKworCXdwcmludHcgKGNvbW1hbmRfd2luLCJEYXRhIHdyaXR0ZW4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCXJldHVybiAoMSk7Cit9CisKK2ludCBsb2dfY2hhbmdlcyAodW5zaWduZWQgY2hhciAqYnVmZmVyLHVuc2lnbmVkIGxvbmcgbGVuZ3RoLHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQorCisvKgorCitMb2cgdGhlIGNoYW5nZSBpbiBhIHByaW1pdGl2ZSBmb3JtIC0gQW4gaGV4IGR1bXAgb2YgdGhlIGRhdGEgYmVmb3JlIHRoZSBjaGFuZ2UgYW5kIGFmdGVyIHRoZSBjaGFuZ2UuCitUaGUgaGV4IGJ5dGVzIGFyZSBjb252ZXJ0ZWQgdG8gdGV4dCwgc28gdGhhdCB0aGV5IHdpbGwgYmUgcmVhZGFibGUgd2l0aCBhIHN0YW5kYXJkIHRleHQgZWRpdG9yLgorCisqLworCit7CisJdW5zaWduZWQgY2hhciAqb3JpZ2luYWw7CisKKwlpbnQgaTsKKwl0aW1lX3QgY3VycmVudF90aW1lOworCUZJTEUgKmZwOworCisJaWYgKChmcD1mb3BlbiAoTG9nRmlsZSwiYSsiKSk9PU5VTEwpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gVW5hYmxlIHRvIG9wZW4gbG9nIGZpbGUgJXNcbiIsTG9nRmlsZSk7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuICgwKTsKKwl9OworCisJY3VycmVudF90aW1lPXRpbWUgKE5VTEwpOworCisJZnByaW50ZiAoZnAsIlxuLS0tLS0gRVhUMkVEIGxvZyBiZWdpbiAtLS0tLVxuXG4iKTsKKwlmcHJpbnRmIChmcCwiVGltZTogJXNcbkRldmljZTogJXNcbiIsY3RpbWUgKCh0aW1lX3QgKikgJmN1cnJlbnRfdGltZSksZGV2aWNlX25hbWUpOworCWZwcmludGYgKGZwLCJPZmZzZXQ6ICVsdVxuTGVuZ3RoOiAlbHVcbiIsb2Zmc2V0LGxlbmd0aCk7CisKKwlvcmlnaW5hbD0odW5zaWduZWQgY2hhciAqKSBtYWxsb2MgKGxlbmd0aCpzaXplb2YgKHVuc2lnbmVkIGNoYXIpKTsKKworCWlmIChvcmlnaW5hbD09TlVMTCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRmF0YWwgZXJyb3IgLSBDYW5cJ3QgYWxsb2NhdGUgJWx1IGJ5dGVzISIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpO2ZjbG9zZSAoZnApO3JldHVybiAoMCk7CisJfQorCisJaWYgKCFsb3dfcmVhZCAob3JpZ2luYWwsbGVuZ3RoLG9mZnNldCkpIHsKKwkJZmNsb3NlIChmcCk7cmV0dXJuICgwKTsKKwl9CisKKwlmcHJpbnRmIChmcCwiXG5PcmlnaW5hbCBkYXRhOlxuXG4iKTsKKworCWZvciAoaT0wO2k8bGVuZ3RoO2krKykgeworCQlpZiAoaSUxNj09MCAmJiBpIT0wKSBmcHJpbnRmIChmcCwiXG4iKTsKKwkJZnByaW50ZiAoZnAsIiUwMnggIixvcmlnaW5hbCBbaV0pOworCX0KKworCWZwcmludGYgKGZwLCJcblxuTmV3IGRhdGE6XG5cbiIpOworCisJZm9yIChpPTA7aTxsZW5ndGg7aSsrKSB7CisJCWlmIChpJTE2PT0wICYmIGkhPTApIGZwcmludGYgKGZwLCJcbiIpOworCQlmcHJpbnRmIChmcCwiJTAyeCAiLGJ1ZmZlciBbaV0pOworCX0KKworCWZwcmludGYgKGZwLCJcbi0tLS0tIEVYVDJFRCBsb2cgZW5kICAtLS0tLVxuIik7CisKKwlmY2xvc2UgKGZwKTsKKwlyZXR1cm4gKDEpOworfQorCitpbnQgbG9hZF90eXBlX2RhdGEgKHZvaWQpCisKKy8qCisKK0p1c3QgcmVhZCBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIGludG8gdHlwZSBkYXRhLgorCisqLworCit7CisJaWYgKGRldmljZV9oYW5kbGU9PU5VTEwpIHsKKwkJcHJpbnRmICgiRXJyb3IgLSBObyBkZXZpY2Ugb3BlbmVkXG4iKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlpZiAoZGV2aWNlX29mZnNldD09LTEpIHsKKwkJcHJpbnRmICgiRXJyb3IgLSBObyBvZmZzZXQgc2V0XG4iKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlpZiAobG93X3JlYWQgKHR5cGVfZGF0YS51LmJ1ZmZlcixFWFQyX01BWF9CTE9DS19TSVpFLGRldmljZV9vZmZzZXQpPT0wKQorCQlyZXR1cm4gKDApOworCisJaWYgKGN1cnJlbnRfdHlwZSE9TlVMTCkKKwkJaWYgKHN0cmNtcCAoY3VycmVudF90eXBlLT5uYW1lLCJleHQyX2Rpcl9lbnRyeSIpPT0wKQorCQkJY3VycmVudF90eXBlLT5sZW5ndGg9dHlwZV9kYXRhLnUudF9leHQyX2Rpcl9lbnRyeS5yZWNfbGVuOworCisJcmV0dXJuICgxKTsKK30KKworaW50IHdyaXRlX3R5cGVfZGF0YSAodm9pZCkKKworeworCWlmIChkZXZpY2VfaGFuZGxlPT1OVUxMKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE5vIGRldmljZSBvcGVuZWRcbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm4gKDApOworCX0KKworCWlmIChkZXZpY2Vfb2Zmc2V0PT0tMSkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBObyBvZmZzZXQgc2V0XG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlpZiAobG93X3dyaXRlICh0eXBlX2RhdGEudS5idWZmZXIsZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLGRldmljZV9vZmZzZXQpPT0wKQorCQlyZXR1cm4gKDApOworCisJcmV0dXJuICgxKTsKK30KKwpkaWZmIC0tZ2l0IGEvZXh0MmVkL2RvYy9leHQyZWQtZGVzaWduLnNnbWwgYi9leHQyZWQvZG9jL2V4dDJlZC1kZXNpZ24uc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDJkZjk2Ci0tLSAvZGV2L251bGwKKysrIGIvZXh0MmVkL2RvYy9leHQyZWQtZGVzaWduLnNnbWwKQEAgLTAsMCArMSwzNDU5IEBACis8IURPQ1RZUEUgQXJ0aWNsZSBQVUJMSUMgIi0vL0RhdmVucG9ydC8vRFREIERvY0Jvb2sgVjMuMC8vRU4iPgorCis8QXJ0aWNsZT4KKworPEFydEhlYWRlcj4KKworPFRpdGxlPkVYVDJFRCAtIFRoZSBFeHRlbmRlZC0yIGZpbGVzeXN0ZW0gZWRpdG9yIC0gRGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbjwvVGl0bGU+Cis8QVVUSE9SCis+Cis8Rmlyc3ROYW1lPlByb2dyYW1tZWQgYnkgR2FkaSBPeG1hbiwgd2l0aCB0aGUgZ3VpZGUgb2YgQXZuZXIgTG90dGVtPC9GaXJzdE5hbWU+Cis8L0FVVEhPUgorPgorPFB1YkRhdGU+djAuMSwgQXVndXN0IDMgMTk5NTwvUHViRGF0ZT4KKworPC9BcnRIZWFkZXI+CisKKzxTZWN0MT4KKzxUaXRsZT5BYm91dCBFWFQyRUQgZG9jdW1lbnRhdGlvbjwvVGl0bGU+CisKKzxQYXJhPgorVGhlIEVYVDJFRCBkb2N1bWVudGF0aW9uIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgZXh0MiBmaWxlc3lzdGVtIG92ZXJ2aWV3LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIEVYVDJFRCB1c2VyJ3MgZ3VpZGUuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgRVhUMkVEIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KK1RoaXMgZG9jdW1lbnQgaXMgbm90IHRoZSB1c2VyJ3MgZ3VpZGUuIElmIHlvdSBqdXN0IGludGVuZCB0byB1c2UgRVhUMkVELCB5b3UKK21heSBub3Qgd2FudCB0byByZWFkIGl0LgorPC9QYXJhPgorCis8UGFyYT4KK0hvd2V2ZXIsIGlmIHlvdSBpbnRlbmQgdG8gYnJvd3NlIGFuZCBtb2RpZnkgdGhlIHNvdXJjZSBjb2RlLCB0aGlzIGRvY3VtZW50IGlzCitmb3IgeW91LgorPC9QYXJhPgorCis8UGFyYT4KK0luIGFueSBjYXNlLCBJZiB5b3UgaW50ZW5kIHRvIHJlYWQgdGhpcyBhcnRpY2xlLCBJIHN0cm9uZ2x5IHN1Z2dlc3QgdGhhdCB5b3UKK3dpbGwgYmUgZmFtaWxpYXIgd2l0aCB0aGUgbWF0ZXJpYWwgcHJlc2VudGVkIGluIHRoZSBvdGhlciB0d28gYXJ0aWNsZXMgYXMgd2VsbC4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlByZWZhY2U8L1RpdGxlPgorCis8UGFyYT4KK0luIHRoaXMgZG9jdW1lbnQgSSB3aWxsIHRyeSB0byBleHBsYWluIGhvdyBFWFQyRUQgaXMgY29uc3RydWN0ZWQuCitBdCB0aGlzIHRpbWUgb2Ygd3JpdGluZywgdGhlIGluaXRpYWwgdmVyc2lvbiBpcyBmaW5pc2hlZCBhbmQgcmVhZHkKK2ZvciBkaXN0cmlidXRpb247IEl0IGlzIGZ1bGx5IGZ1bmN0aW9uYWwuIEhvd2V2ZXIsIHRoaXMgd2FzIG5vdCBhbHdheXMgdGhlCitjYXNlLgorPC9QYXJhPgorCis8UGFyYT4KK0F0IGZpcnN0LCBJIGRpZG4ndCBrbm93IG11Y2ggYWJvdXQgVW5peCwgbXVjaCBsZXNzIGFib3V0IFVuaXggZmlsZXN5c3RlbXMsCithbmQgZXZlbiBsZXNzIGFib3V0IExpbnV4IGFuZCB0aGUgZXh0ZW5kZWQtMiBmaWxlc3lzdGVtLiBXaGlsZSB3b3JraW5nCitvbiB0aGlzIHByb2plY3QsIEkgZ3JhZHVhbGx5IGFjcXVpcmVkIGtub3dsZWRnZSBhYm91dCBhbGwgb2YgdGhlIGFib3ZlCitzdWJqZWN0cy4gSSBjYW4gdGhpbmsgb2YgdHdvIHdheXMgaW4gd2hpY2ggSSBjb3VsZCBoYXZlIG1hZGUgbXkgcHJvamVjdDoKKworPE9yZGVyZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgIkVuZ2luZWVyIiB3YXkKKworTGVhcm4gdGhlIHN1YmplY3QgdGhyb3VnaGx5IGJlZm9yZSBJIGdldCB0byB0aGUgcHJvZ3JhbW1pbmcgaXRzZWxmLgorVGhlbiwgSSBjb3VsZCBlYXNpbHkgc2VlIHRoZSBlbnRpcmUgcGljdHVyZSBhbmQgc2VsZWN0IHRoZSBiZXN0Citjb3Vyc2Ugb2YgYWN0aW9uLCB0YWtpbmcgYWxsIHRoZSBmYWN0b3JzIGludG8gYWNjb3VudC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSAiRXhwbG9yZXIgLSBQcm9ncmVzc2l2ZSIgd2F5LgorCitKdW1wIGltbWVkaWF0ZWx5IGludG8gdGhlIGNvbGQgd2F0ZXIgLSBTdGFydCBwcm9ncmFtbWluZyBhbmQKK2xlYXJuaW5nIHRoZSBtYXRlcmlhbCBwYXJhbGxlbGx5LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9PcmRlcmVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KK0kgZ3Vlc3MgdGhhdCB0aGUgYWJvdmUgZGlsZW1tYSBpcyB0eXBpY2FsIGFuZCBhcHBlYXJzIGFsbCB0aHJvdWdoIHNjaWVuY2UgYW5kCit0ZWNobm9sb2d5LgorPC9QYXJhPgorCis8UGFyYT4KK0hvd2V2ZXIsIEkgZGlkbid0IGhhdmUgdGhlIGx1eHVyeSBvZiBjaG9pY2Ugd2hlbiBJIHN0YXJ0ZWQgbXkgcHJvamVjdCAtCitMaW51eCBpcyBhIHJlbGF0aXZlbHkgbmV3IChhbmQgZ3JlYXQhKSBvcGVyYXRpbmcgc3lzdGVtLiBUaGUgZXh0ZW5kZWQtMgorZmlsZXN5c3RlbSBpcyBldmVuIG5ld2VyIC0gSXRzIGZpcnN0IHJlbGVhc2UgbGllcyBzb21ld2hlcmUgaW4gMTk5MyAtIE9ubHkKK3Bhc3NlZCB0d28geWVhcnMgdW50aWwgSSBzdGFydGVkIHdvcmtpbmcgb24gbXkgcHJvamVjdC4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgc2l0dWF0aW9uIEkgZm91bmQgbXlzZWxmIGF0IHRoZSBiZWdpbm5pbmcgd2FzIHRoYXQgSSBkaWRuJ3QgaGF2ZSBhIGZ1bGx5CitkZXRhaWxlZCBkb2N1bWVudCB3aGljaCBkZXNjcmliZXMgdGhlIGV4dDIgZmlsZXN5c3RlbS4gSW4gZmFjdCwgSSBkaWRuJ3QKK2hhdmUgYW55IGV4dDIgZG9jdW1lbnQgYXQgYWxsLiBXaGVuIEkgYXNrZWQgQXZuZXIgYWJvdXQgZG9jdW1lbnRhdGlvbiwgaGUKK3N1Z2dlc3RlZCB0d28gcmVmZXJlbmNlczoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJQSBnZW5lcmFsIFVuaXggYm9vayAtIFRIRSBERVNJR04gT0YgVEhFIFVOSVggT1BFUkFUSU5HIFNZU1RFTSwgYnkKK01hdXJpY2UgSi4gQmFjaC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBrZXJuZWwgc291cmNlcy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCitJIHJlYWQgdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBib29rIGJlZm9yZSBJIHN0YXJ0ZWQgbXkgcHJvamVjdCAtIEl0IGlzIGEKK2JpdCBvbGQgbm93LCBidXQgdGhlIHByaW5jaXBsZXMgYXJlIHN0aWxsIHRoZSBzYW1lLiBIb3dldmVyLCBJIG5lZWRlZAorbW9yZSB0aGFuIGp1c3QgdGhlIHByaW5jaXBsZXMuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGtlcm5lbCBzb3VyY2VzIGFyZSBhIHJhcmUgYm9udXMhIFlvdSBkb24ndCBnZXQgZXZlcnlkYXkgdGhlIGZ1bGwKK3NvdXJjZXMgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIFRoZXJlIGlzIHNvIG11Y2ggdGhhdCBjYW4gYmUgbGVhcm5lZCBmcm9tCit0aGVtLCBhbmQgaXQgaXMgdGhlIHVsdGltYXRlIHNvdXJjZSAtIFRoZSBleGFjdCBhbnN3ZXIgaG93IHRoZSBrZXJuZWwKK3dvcmtzIGlzIHRoZXJlLCB3aXRoIGFsbCB0aGUgZmluZSBkZXRhaWxzLiBBdCB0aGUgZmlyc3Qgd2VlayBJIHN0YXJ0ZWQgdG8KK2xvb2sgYXQgcmFuZG9tIGF0IHRoZSByZWxldmFudCBwYXJ0cyBvZiB0aGUgc291cmNlcy4gSG93ZXZlciwgaXQgaXMgZGlmZmljdWx0Cit0byB1bmRlcnN0YW5kIHRoZSBnbG9iYWwgcGljdHVyZSBmcm9tIGRpcmVjdCByZWFkaW5nIG9mIG92ZXIgb25lIGh1bmRyZWQKK3BhZ2Ugc291cmNlcy4gVGhlbiwgSSBzdGFydGVkIHRvIGRvIHNvbWUgcHJvZ3JhbW1pbmcuIEkgZGlkbid0IGtub3cKK3lldCB3aGF0IEkgd2FzIGxvb2tpbmcgZm9yLCBhbmQgSSBzdGFydGVkIHRvIHdvcmsgb24gdGhlIHByb2plY3QgbGlrZSBhIGtpZAord2hvIHN0YXJ0cyB0byBidWlsZCBhIGxhcmdlIHB1enpsZS4KKzwvUGFyYT4KKworPFBhcmE+CitIb3dldmVyLCB0aGlzIHdhcyBleGFjdGx5IHRoZSBpbnRlcmVzdGluZyBwYXJ0ISBJdCBpcyBmcnVzdHJhdGluZyB0byBrbm93CitpdCBhbGwgZnJvbSBhZHZhbmNlIC0gSSB0aGluayB0aGF0IHRoZSBkaXNjb3ZlcnkgaXRzZWxmLCBiaXQgYnkgYml0LCBpcyB0aGUKK2tleSB0byBhIHRydWUgbGVhcm5pbmcgYW5kIHVuZGVyc3RhbmRpbmcuCis8L1BhcmE+CisKKzxQYXJhPgorTm93LCBpbiB0aGlzIGRvY3VtZW50LCBJIGFtIHRyeWluZyB0byBwcmVzZW50IHRoZSBzdWJqZWN0LiBFdmVuIHRob3VnaCBJCitkZXZlbG9wZWQgRVhUMkVEIHByb2dyZXNzaXZlbHksIEkgbm93IGNhbiBzZWUgdGhlIGVudGlyZSBzdWJqZWN0IG11Y2gKK2JyaWdodGVyIHRoYW4gSSBkaWQgYmVmb3JlLCBhbmQgdGhvdWdoIEkgZG8gaGF2ZSB0aGUgb3B0aW9uIG9mIHByZXNlbnRpbmcgaXQKK29ubHkgaW4gdGhlICJlbmdpbmVlciIgd2F5LiBIb3dldmVyLCBJIHdpbGwgbm90IGRvIHRoYXQuCis8L1BhcmE+CisKKzxQYXJhPgorTXkgcHJlc2VudGF0aW9uIHdpbGwgYmUgbWl4ZWQgLSBTb21ldGltZXMgSSB3aWxsIHByZXNlbnQgYSBzdWJqZWN0IHdpdGggYW4KK2luY3JlbWVudGFsIHBlcnNwZWN0aXZlLCBhbmQgc29tZXRpbWVzIGZyb20gYSAidG9wIGRvd24iIHZpZXcuIEknbGwgbGVhdmUKK3lvdSB0byBkZWNpZGUgaWYgbXkgcHJlc2VudGF0aW9uIGNob2ljZSB3YXMgd2lzZSA6LSkKKzwvUGFyYT4KKworPFBhcmE+CitJbiBhZGRpdGlvbiwgeW91J2xsIG5vdGljZSB0aGF0IHRoZSBzZWN0aW9ucyB0ZW5kIHRvIGdldCBzaG9ydGVyIGFzIHdlIGdldAorY2xvc2VyIHRvIHRoZSBlbmQuIFRoZSByZWFzb24gaXMgc2ltcGx5IHRoYXQgSSBzdGFydGVkIHRvIGZlZWwgdGhhdCBJIHdhcworcmVwZWF0aW5nIG15c2VsZiBzbyBJIGRlY2lkZWQgdG8gcHJlc2VudCBvbmx5IHRoZSBuZXcgaWRlYXMuCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5HZXR0aW5nIHN0YXJ0ZWQgLi4uPC9UaXRsZT4KKworPFBhcmE+CitHZXR0aW5nIHN0YXJ0ZWQgaXMgYWxtb3N0IGFsd2F5cyB0aGUgbW9zdCBkaWZmaWN1bHQgdGFzay4gT25jZSB5b3UgZ2V0CitzdGFydGVkLCB0aGluZ3Mgc3RhcnQgInJ1bm5pbmciIC4uLgorPC9QYXJhPgorCis8U2VjdDI+Cis8VGl0bGU+QmVmb3JlIHRoZSBhY3R1YWwgcHJvZ3JhbW1pbmc8L1RpdGxlPgorCis8UGFyYT4KK0Zyb20gbWluZSB0YWxraW5nIHdpdGggQXZuZXIsIEkgdW5kZXJzdG9vZCB0aGF0IExpbnV4LCBsaWtlIGFueSBvdGhlciBVbml4CitzeXN0ZW0sIHByb3ZpZGVzIGFjY2Vzc2VzIHRvIHRoZSBlbnRpcmUgZGlzayBhcyB0aG91Z2ggaXQgd2VyZSBhIGdlbmVyYWwKK2ZpbGUgLSBBY2Nlc3NpbmcgdGhlIGRldmljZS4gSXQgaXMgc3VyZWx5IGEgbmljZSBpZGVhLiBBdm5lciBzdWdnZXN0ZWQgdHdvCit3YXlzIG9mIGFjdGlvbjoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJT3BlbmluZyB0aGUgZGV2aWNlIGxpa2UgYSByZWd1bGFyIGZpbGUgaW4gdGhlIHVzZXIgc3BhY2UuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlDb25zdHJ1Y3RpbmcgYSBkZXZpY2UgZHJpdmVyIHdoaWNoIHdpbGwgcnVuIGluIHRoZSBrZXJuZWwgc3BhY2UgYW5kCitwcm92aWRlIGhvb2tzIGZvciB0aGUgdXNlciBzcGFjZSBwcm9ncmFtLiBUaGUgYWR2YW50YWdlIGlzIHRoYXQgaXQKK3dpbGwgYmUgYSBwYXJ0IG9mIHRoZSBrZXJuZWwsIGFuZCB3b3VsZCBiZSBhYmxlIHRvIHVzZSB0aGUgZXh0Mgora2VybmVsIGZ1bmN0aW9ucyB0byBkbyBzb21lIG9mIHRoZSB3b3JrLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKK0kgY2hvc2UgdGhlIGZpcnN0IHdheS4gSSB0aGluayB0aGF0IHRoZSBiYXNpYyByZWFzb24gd2FzIHNpbXBsaWNpdHkgLSBMZWFybmluZwordGhlIGV4dDIgZmlsZXN5c3RlbSB3YXMgY29tcGxpY2F0ZWQgZW5vdWdoLCBhbmQgYWRkaW5nIHRvIGl0IHRoZSB0YXNrIG9mCitsZWFybmluZyBob3cgdG8gcHJvZ3JhbSBpbiB0aGUga2VybmVsIHNwYWNlIHdhcyB0b28gbXVjaC4gSSBzdGlsbCBkb24ndCBrbm93Citob3cgdG8gcHJvZ3JhbSBhIGRldmljZSBkcml2ZXIsIGFuZCB0aGlzIGlzIHBlcmhhcHMgdGhlIGJhZCBwYXJ0LCBidXQKK2NvbmNlcm5pbmcgdGhlIHByb2plY3QgaW4gYSBiYWNrLXBlcnNwZWN0aXZlLCBJIHRoaW5rIHRoYXQgdGhlIGZpcnN0IHdheSBpcworc3VwZXJpb3IgdG8gdGhlIHNlY29uZDsgSXJvbmljYWxseSwgYmVjYXVzZSBvZiB0aGUgdmVyeSByZWFzb24gSSBjaG9zZSBpdCAtCitTaW1wbGljaXR5LiBFWFQyRUQgY2FuIG5vdyBydW4gZW50aXJlbHkgaW4gdGhlIHVzZXIgc3BhY2UgKHdoaWNoIEkgdGhpbmsgaXMKK2EgcG9pbnQgaW4gZmF2b3IsIGJlY2F1c2UgaXQgZG9lc24ndCByZXF1aXJlIHRoZSB1c2VyIHRvIHJlY29tcGlsZSBpdHMKK2tlcm5lbCksIGFuZCB0aGUgZW50aXJlIGhhcmQgd29yayBpcyBtaW5lLCB3aGljaCBmaXR0ZWQgbmljZWx5IGludG8gdGhlCitsZWFybmluZyBleHBlcmllbmNlIC0gSSBkaWRuJ3QgdXNlIG90aGVyIGNvZGUgdG8gZG8gdGhlIGpvYiAoYXNpZGUgZnJvbQorbG9va2luZyBhdCB0aGUgc291cmNlcywgb2YtY291cnNlKS4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPkp1bXBpbmcgaW50byB0aGUgY29sZCB3YXRlcjwvVGl0bGU+CisKKzxQYXJhPgorSSBkaWRuJ3Qga25vdyBhbG1vc3QgYW55dGhpbmcgb2YgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZXh0MiBmaWxlc3lzdGVtLgorUmVhZGluZyB0aGUgc291cmNlcyB3YXMgbm90IGVub3VnaCAtIEkgbmVlZGVkIHRvIGV4cGVyaW1lbnQuIEhvd2V2ZXIsIGEgdG9vbAorZm9yIGV4cGVyaW1lbnRzIGluIHRoZSBleHQyIGZpbGVzeXN0ZW0gd2FzIGV4YWN0bHkgbXkgcHJvamVjdCEgLSBLaW5kIG9mIGEKK3BhcmFkb3guCis8L1BhcmE+CisKKzxQYXJhPgorSSBzdGFydGVkIGltbWVkaWF0ZWx5IHdpdGggY29uc3RydWN0aW5nIGEgc2ltcGxlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aGV4IGVkaXRvcjwvTGl0ZXJhbD4gLSBJdCB3b3VsZAorb3BlbiB0aGUgZGV2aWNlIGFzIGEgcmVndWxhciBmaWxlLCBwcm92aWRlIG1lYW5zIG9mIG1vdmluZyBpbnNpZGUgdGhlCitmaWxlc3lzdGVtIHdpdGggYSBzaW1wbGUgPExpdGVyYWwgcmVtYXA9InR0Ij5vZmZzZXQ8L0xpdGVyYWw+IG1ldGhvZCwgYW5kIGp1c3Qgc2hvdyBhCis8TGl0ZXJhbCByZW1hcD0idHQiPiBoZXggZHVtcDwvTGl0ZXJhbD4gb2YgdGhlIGNvbnRlbnRzIGF0IHRoaXMgcG9pbnQuIFByb2dyYW1taW5nIHRoaXMgd2FzIHRyaXZpYWxseQorc2ltcGxlIG9mLWNvdXJzZS4gQXQgdGhpcyBwb2ludCwgdGhlIHVzZXItaW50ZXJmYWNlIGRpZG4ndCBtYXR0ZXIgdG8gbWUgLSBJCit3YW50ZWQgYSBmYXN0IHdheSB0byBpbnRlcmFjdC4gQXMgYSByZXN1bHQsIEkgY2hvc2UgYSBzaW1wbGUgY29tbWFuZCBsaW5lCitwYXJzZXIuIE9mIGNvdXJzZSwgdGhlcmUgd2hlcmUgbm8gd2luZG93cyBhdCB0aGlzIHBvaW50LgorPC9QYXJhPgorCis8UGFyYT4KK0EgaGV4IGVkaXRvciBpcyBuaWNlLCBidXQgaXMgbm90IGVub3VnaC4gSXQgaW5kZWVkIGVuYWJsZWQgbWUgdG8gc2VlIGVhY2ggcGFydAorb2YgdGhlIGZpbGVzeXN0ZW0sIGJ1dCB0aGUgZm9ybWF0IG9mIHRoZSB2aWV3ZWQgZGF0YSB3YXMgZGlmZmljdWx0IHRvCithbmFseXplLiBJIHdhbnRlZCB0byBzZWUgdGhlIGRhdGEgaW4gYSBtb3JlIGludHVpdGl2ZSB3YXkuCis8L1BhcmE+CisKKzxQYXJhPgorQXQgdGhpcyBwb2ludCBvZiB0aW1lLCB0aGUgbW9zdCBoZWxwZnVsIGZpbGUgaW4gdGhlIHNvdXJjZXMgd2FzIHRoZSBleHQyCittYWluIGluY2x1ZGUgZmlsZSAtIDxMaXRlcmFsIHJlbWFwPSJ0dCI+L3Vzci9pbmNsdWRlL2xpbnV4L2V4dDImbG93YmFyO2ZzLmg8L0xpdGVyYWw+LiBBbW9uZyBpdHMgY29udGVudHMKK3RoZXJlIHdlcmUgdmFyaW91cyBzdHJ1Y3R1cmVzIHdoaWNoIEkgYXNzdW1lZCB0aGV5IGFyZSBkaXNrIGltYWdlcyAtIEFwcGVhcgorZXhhY3RseSBsaWtlIHRoYXQgb24gdGhlIGRpc2suCis8L1BhcmE+CisKKzxQYXJhPgorSSB3YW50ZWQgYSA8TGl0ZXJhbCByZW1hcD0idHQiPnF1aWNrPC9MaXRlcmFsPiB3YXkgdG8gZ2V0IGdvaW5nLiBJIGRpZG4ndCBoYXZlIHRoZSBwYXRpZW5jZSB0byBsZWFybgorZWFjaCBvZiB0aGUgc3RydWN0dXJlcyB1c2UgaW4gdGhlIGNvZGUuIFJhdGhlciwgSSB3YW50ZWQgdG8gc2VlIHRoZW0gaW4gYWN0aW9uLAorc28gdGhhdCBJIGNvdWxkIGV4cGxvcmUgdGhlIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlbSAtIFRlc3QgbXkgYXNzdW1wdGlvbnMsCithbmQgcmVhY2ggb3RoZXIgYXNzdW1wdGlvbnMuCis8L1BhcmE+CisKKzxQYXJhPgorU28gYWZ0ZXIgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aGV4IGVkaXRvcjwvTGl0ZXJhbD4sIEVYVDJFRCBwcm9ncmVzc2VkIGludG8gYSB0b29sIHdoaWNoIGhhcyBzb21lCitlbGVtZW50cyBvZiBhIGNvbXBpbGVyLiBJIHByb2dyYW1tZWQgRVhUMkVEIHRvIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZHluYW1pY2FsbHkgcmVhZCB0aGUga2VybmVsCitleHQyIG1haW4gaW5jbHVkZSBmaWxlIGluIHJ1biB0aW1lPC9MaXRlcmFsPiwgYW5kIHByb2Nlc3MgdGhlIGluZm9ybWF0aW9uLiBUaGUgZ29hbAord2FzIHRvIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW1wbHkgYSBzdHJ1Y3R1cmUtZGVmaW5pdGlvbiBvbiB0aGUgY3VycmVudCBvZmZzZXQgYXQgdGhlCitmaWxlc3lzdGVtPC9MaXRlcmFsPi4gRVhUMkVEIHdvdWxkIHRoZW4gZGlzcGxheSB0aGUgc3RydWN0dXJlIGFzIGEgbGlzdCBvZiBpdHMKK3ZhcmlhYmxlcyBuYW1lcyBhbmQgY29udGVudHMsIGluc3RlYWQgb2YgYSBtZWFuaW5nbGVzcyBoZXggZHVtcC4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgZm9ybWF0IG9mIHRoZSBpbmNsdWRlIGZpbGUgaXMgbm90IHZlcnkgY29tcGxpY2F0ZWQgLSBUaGUgc3RydWN0dXJlcworYXJlIG1vc3RseSA8TGl0ZXJhbCByZW1hcD0idHQiPmZsYXQ8L0xpdGVyYWw+IC0gRGlkbid0IGNvbnRhaW4gYSBsb3Qgb2YgcmVjdXJzaXZlIHN0cnVjdHVyZTsgT25seSBhCitnbG9iYWwgc3RydWN0dXJlIGRlZmluaXRpb24sIGFuZCBzb21lIHZhcmlhYmxlcy4gVGhlcmUgd2VyZSBjYXNlcyBvZgorc3RydWN0dXJlcyBpbnNpZGUgc3RydWN0dXJlcywgSSB0cmVhdGVkIHRoZW0gaW4gYSBzb21ld2hhdCBub24tZWxlZ2FudCB3YXkgLSBJCittYWRlIGFsbCB0aGUgc3RydWN0dXJlcyBmbGF0LCBhbmQgZXhwYW5kZWQgdGhlIGFycmF5cy4gQXMgYSByZXN1bHQsIHRoZSBwYXJzZXIKK3dhcyB2ZXJ5IHNpbXBsZS4gQWZ0ZXIgYWxsLCB0aGlzIHdhcyBub3QgYW4gZXhlcmNpc2UgaW4gY29tcGlsaW5nLCBhbmQgSQord2FudGVkIHRvIHF1aWNrbHkgZ2V0IHNvbWUgcmVzdWx0cy4KKzwvUGFyYT4KKworPFBhcmE+CitUbyBoYW5kbGUgdGhlIHRhc2ssIEkgY29uc3RydWN0ZWQgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0Jmxvd2JhcjtkZXNjcmlwdG9yPC9MaXRlcmFsPiBzdHJ1Y3R1cmUuCitFYWNoIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0Jmxvd2JhcjtkZXNjcmlwdG9yIGluc3RhbmNlPC9MaXRlcmFsPiBjb250YWluZWQgaW5mb3JtYXRpb24gd2hpY2ggaXMgbmVlZGVkCitpbiBvcmRlciB0byBmb3JtYXQgYSBibG9jayBvZiBkYXRhIGFjY29yZGluZyB0byB0aGUgQyBzdHJ1Y3R1cmUgY29udGFpbmVkIGluIAordGhlIGtlcm5lbCBzb3VyY2UuIFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQ6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBkZXNjcmlwdG9yIG5hbWUsIHVzZWQgdG8gcmVmZXJlbmNlIHRvIHRoZSBzdHJ1Y3R1cmUgaW4gRVhUMkVELgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIG5hbWUgb2YgZWFjaCB2YXJpYWJsZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSByZWxhdGl2ZSBvZmZzZXQgb2YgdGhlIGVhY2ggdmFyaWFibGUgaW4gdGhlIGRhdGEgYmxvY2suCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgbGVuZ3RoLCBpbiBieXRlcywgb2YgZWFjaCB2YXJpYWJsZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCitTaW5jZSBJIGRpZG4ndCB3YW50IHRvIGxpbWl0IHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlcywgSSBjaG9zZSBhIHNpbXBsZQorZG91YmxlIGxpbmtlZCBsaXN0IHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbi4gT25lIHZhcmlhYmxlIGNvbnRhaW5lZCB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+Y3VycmVudCBzdHJ1Y3R1cmUgdHlwZTwvTGl0ZXJhbD4gLSBBIHBvaW50ZXIgdG8gdGhlIHJlbGV2YW50Cis8TGl0ZXJhbCByZW1hcD0idHQiPnN0cnVjdCZsb3diYXI7ZGVzY3JpcHRvcjwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxQYXJhPgorTm93IEVYVDJFRCBjb250YWluZWQgYmFzaWNhbGx5IHRocmVlIGNvbW1hbmQgbGluZSBvcGVyYXRpb25zOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlzZXRkZXZpY2UKKworVXNlZCB0byBvcGVuIGEgZGV2aWNlIGZvciByZWFkaW5nIG9ubHkuIFdyaXRlIGFjY2VzcyB3YXMgcG9zdHBvbmVkCit0byBhIHZlcnkgYWR2YW5jZWQgc3RhdGUgaW4gdGhlIHByb2plY3QsIHNpbXBseSBiZWNhdXNlIEkgZGlkbid0Citrbm93IGEgdGhpbmcgb2YgdGhlIGZpbGVzeXN0ZW0gc3RydWN0dXJlLCBhbmQgSSBiZWxpZXZlZCB0aGF0CittYWtpbmcgYWN0dWFsIGNoYW5nZXMgd291bGQgZG8gbm90aGluZyBidXQgZGFtYWdlIDotKQorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJc2V0b2Zmc2V0CisKK1VzZWQgdG8gbW92ZSBpbiB0aGUgZGV2aWNlLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJc2V0dHlwZQorCitVc2VkIHRvIGltcGx5IGEgc3RydWN0dXJlIGRlZmluaXRpb24gb24gdGhlIGN1cnJlbnQgcGxhY2UuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlzaG93CisKK1VzZWQgdG8gZGlzcGxheSB0aGUgZGF0YS4gSXQgZGlzcGxheWVkIHRoZSBkYXRhIGluIGEgc2ltcGxlIGhleCBkdW1wCitpZiB0aGVyZSB3YXMgbm8gdHlwZSBzZXQsIG9yIGluIGEgbmljZSBmb3JtYXR0ZWQgd2F5IC0gQXMgYSBsaXN0IG9mCit0aGUgdmFyaWFibGUgY29udGVudHMsIGlmIHRoZXJlIHdhcy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzxQYXJhPgorQ29tbWFuZCBsaW5lIGFuYWx5emluZyB3YXMgcHJpbWl0aXZlIGJhY2sgdGhlbiAtIEEgc2ltcGxlIHN3aXRjaCwgYXMgZmFyIGFzCitJIGNhbiByZW1lbWJlciAtIE5vdGhpbmcgYWxpa2UgdGhlIGN1cnJlbnQgZmxvdyBjb250cm9sLCBidXQgaXQgd2FzIGVub3VnaAorYXQgdGhlIHRpbWUuCis8L1BhcmE+CisKKzxQYXJhPgorQXQgdGhlIGVuZCwgSSBoYWQgc29tZXRoaW5nIHRvIHN0YXJ0IHdvcmtpbmcgd2l0aC4gSXQga25ldyB0byBmb3JtYXQgbWFueQorc3RydWN0dXJlcyAtIE5vbmUgb2Ygd2hpY2ggSSB1bmRlcnN0b29kIC0gYW5kIHByb3ZpZGVkIG1lLCB3aXRob3V0IHRvbyBtdWNoCit3b3JrLCBzb21ldGhpbmcgdG8gc3RhcnQgd2l0aC4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlN0YXJ0aW5nIHRvIGV4cGxvcmU8L1RpdGxlPgorCis8UGFyYT4KK1dpdGggdGhlIGFib3ZlIHRvb2wgaW4gbXkgcG9ja2V0LCBJIHN0YXJ0ZWQgdG8gZXhwbG9yZSB0aGUgZXh0MiBmaWxlc3lzdGVtCitzdHJ1Y3R1cmUuIEZyb20gdGhlIGJyaWVmIHJlYWRpbmcgaW4gQmFjaCdzIGJvb2ssIEkgZ290IGZhbWlsaWFyIHRvIHNvbWUKK2Jhc2ljIGNvbmNlcHRzIC0gVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3VwZXJibG9jazwvTGl0ZXJhbD4sIGZvciBleGFtcGxlLiBJdCBzZWVtcyB0aGF0IHRoZQorc3VwZXJibG9jayBpcyBhbiBpbXBvcnRhbnQgcGFydCBvZiB0aGUgZmlsZXN5c3RlbS4gSSBkZWNpZGVkIHRvIHN0YXJ0CitleHBsb3Jpbmcgd2l0aCB0aGF0LgorPC9QYXJhPgorCis8UGFyYT4KK0kgcmVhbGl6ZWQgdGhhdCB0aGUgc3VwZXJibG9jayBzaG91bGQgYmUgYXQgYSBmaXhlZCBsb2NhdGlvbiBpbiB0aGUKK2ZpbGVzeXN0ZW0gLSBQcm9iYWJseSBuZWFyIHRoZSBiZWdpbm5pbmcuIFRoZXJlIGNhbiBiZSBubyBvdGhlciB3YXkgLQorVGhlIGtlcm5lbCBzaG91bGQgc3RhcnQgYXQgc29tZSBwbGFjZSB0byBmaW5kIGl0LiBBIGJyaWVmIGxvb2tpbmcgaW4KK3RoZSBrZXJuZWwgc291cmNlcyByZXZlYWxlZCB0aGF0IHRoZSBzdXBlcmJsb2NrIGlzIHNpZ25lZCBieSBhIHNwZWNpYWwKK3NpZ25hdHVyZSAtIEEgPExpdGVyYWwgcmVtYXA9InR0Ij5tYWdpYyBudW1iZXI8L0xpdGVyYWw+IC0gRVhUMiZsb3diYXI7U1VQRVImbG93YmFyO01BR0lDICgweEVGNTMgLSBFRiBwcm9iYWJseQorc3RhbmRzIGZvciBFeHRlbmRlZCBGaWxlc3lzdGVtKS4gSSBxdWlja2x5IGZvdW5kIHRoZSBzdXBlcmJsb2NrIGF0IHRoZQorZml4ZWQgb2Zmc2V0IDEwMjQgaW4gdGhlIGZpbGVzeXN0ZW0gLSBUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjttYWdpYzwvTGl0ZXJhbD4gdmFyaWFibGUgaW4gdGhlCitzdXBlcmJsb2NrIHdhcyBzZXQgZXhhY3RseSB0byB0aGUgYWJvdmUgdmFsdWUuCis8L1BhcmE+CisKKzxQYXJhPgorSXQgc2VlbXMgdGhhdCBzdGFydGluZyB3aXRoIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnN1cGVyYmxvY2s8L0xpdGVyYWw+IHdhcyBhIGdvb2QgYmV0IC0gSnVzdCBmcm9tCit0aGUgbGlzdCBvZiB2YXJpYWJsZXMsIG9uZSBjYW4gbGVhcm4gYSBsb3QuIEkgZGlkbid0IHVuZGVyc3RhbmQgYWxsIG9mIHRoZW0KK2F0IHRoZSB0aW1lLCBidXQgaXQgc2VlbWVkIHRoYXQgdGhlIGZvbGxvd2luZyBrZXl3b3JkcyB3ZXJlIHJlcGVhdGluZyB0aGVtc2VsZgoraW4gdmFyaW91cyB2YXJpYWJsZXM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCWJsb2NrCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlpbm9kZQorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJZ3JvdXAKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCitBdCB0aGlzIHBvaW50LCBJIHN0YXJ0ZWQgdG8gZXhwbG9yZSB0aGUgYmxvY2sgZ3JvdXBzLiBJIHdpbGwgbm90IGRldGFpbCBoZXJlCit0aGUgdGVjaG5pY2FsIGRlc2lnbiBvZiB0aGUgZXh0MiBmaWxlc3lzdGVtLiBJIGhhdmUgd3JpdHRlbiBhIHNwZWNpYWwKK2FydGljbGUgd2hpY2ggZXhwbGFpbnMganVzdCB0aGF0LCBpbiB0aGUgImVuZ2luZWVyaW5nIiB3YXkuIFBsZWFzZSByZWZlciB0byBpdAoraWYgeW91IGZlZWwgdGhhdCB5b3UgYXJlIGxhY2tpbmcga25vd2xlZGdlIGluIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGV4dDIKK2ZpbGVzeXN0ZW0uCis8L1BhcmE+CisKKzxQYXJhPgorSSB3YXMgZXhwbG9yaW5nIHRoZSBmaWxlc3lzdGVtIGluIHRoaXMgd2F5IGZvciBzb21lIHRpbWUsIGFsb25nIHdpdGggcmVhZGluZwordGhlIHNvdXJjZXMuIFRoaXMgbGVhZCBuYXR1cmFsbHkgdG8gdGhlIG5leHQgc3RlcC4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPk9iamVjdCBzcGVjaWZpYyBjb21tYW5kczwvVGl0bGU+CisKKzxQYXJhPgorV2hhdCBoYXMgYmVjb21lIGNsZWFyIGlzIHRoYXQgdGhlIGFib3ZlIHdheSBvZiBleHBsb3JpbmcgaXMgbm90IHBvd2VyZnVsCitlbm91Z2ggLSBJIGZvdW5kIG15c2VsZiBkb2luZyB2YXJpb3VzIGNhbGN1bGF0aW9ucyBtYW51YWxseSBpbiBvcmRlciB0byBwYXNzCitiZXR3ZWVuIHJlbGF0ZWQgc3RydWN0dXJlcy4gSSBuZWVkZWQgdG8gcmVwbGFjZSBzb21lIHRhc2tzIHdpdGggYW4gYXV0b21hdGVkCitwcm9jZWR1cmUuCis8L1BhcmE+CisKKzxQYXJhPgorSW4gYWRkaXRpb24sIGl0IGFsc28gYmVjYW1lIGNsZWFyIHRoYXQgKG9mLWNvdXJzZSkgZWFjaCBrZXkgb2JqZWN0IGluIHRoZQorZmlsZXN5c3RlbSBoYXMgaXRzIHNwZWNpYWwgcGxhY2UgaW4gcmVnYXJkIHRvIHRoZSBvdmVyYWxsIGV4dDIgZmlsZXN5c3RlbQorZGVzaWduLCBhbmQgbmVlZHMgYSA8TGl0ZXJhbCByZW1hcD0idHQiPmZpbmUgdHVuZWQgaGFuZGxpbmc8L0xpdGVyYWw+LiBJdCBpcyBhdCB0aGlzIHBvaW50IHRoYXQgdGhlCitzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgPExpdGVyYWwgcmVtYXA9InR0Ij5jYW1lIHRvIGxpZmU8L0xpdGVyYWw+IC0gVGhleSBiZWNhbWUgPExpdGVyYWwgcmVtYXA9InR0Ij5vYmplY3QKK2RlZmluaXRpb25zPC9MaXRlcmFsPiwgbWFraW5nIEVYVDJFRCA8TGl0ZXJhbCByZW1hcD0idHQiPm9iamVjdCBvcmllbnRlZDwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGFjdHVhbCBtZWFuaW5nIG9mIHRoZSBicmVhdGh0YWtpbmcgd29yZHMgYWJvdmUsIGlzIHRoYXQgZWFjaCBzdHJ1Y3R1cmUKK25vdyBoYWQgYSBsaXN0IG9mIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cHJpdmF0ZSBjb21tYW5kczwvTGl0ZXJhbD4sIHdoaWNoIGVuZGVkIHVwIGluCis8TGl0ZXJhbCByZW1hcD0idHQiPmNhbGxpbmcgc3BlY2lhbCBmaW5lLXR1bmVkIEMgZnVuY3Rpb25zPC9MaXRlcmFsPi4gVGhpcyBhcHByb2FjaCB3YXMKK2ZvdW5kIHRvIGJlIHZlcnkgcG93ZXJmdWwgYW5kIGlzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+dGhlIGhlYXJ0IG9mIEVYVDJFRCBldmVuIG5vdzwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxQYXJhPgorSW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoZSBhYm92ZSBjb25jZXB0cywgSSBhZGRlZCB0aGUgc3RydWN0dXJlCis8TGl0ZXJhbCByZW1hcD0idHQiPnN0cnVjdCZsb3diYXI7Y29tbWFuZHM8L0xpdGVyYWw+LiBUaGUgcm9sZSBvZiB0aGlzIHN0cnVjdHVyZSBpcyB0byBncm91cCB0b2dldGhlciBhCitncm91cCBvZiBjb21tYW5kcywgd2hpY2ggY2FuIGJlIGxhdGVyIGFzc2lnbmVkIHRvIGEgc3BlY2lmaWMgdHlwZS4gRWFjaAorc3RydWN0dXJlIGhhZDoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJQSBsaXN0IG9mIGNvbW1hbmQgbmFtZXMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlBIGxpc3Qgb2YgcG9pbnRlcnMgdG8gZnVuY3Rpb25zLCB3aGljaCBiaW5kcyBlYWNoIGNvbW1hbmQgdG8gaXRzCitzcGVjaWFsIGZpbmUtdHVuZWQgQyBmdW5jdGlvbi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCitJbiBvcmRlciB0byByZWxhdGUgYSBsaXN0IG9mIGNvbW1hbmRzIHRvIGEgdHlwZSBkZWZpbml0aW9uLCBlYWNoCis8TGl0ZXJhbCByZW1hcD0idHQiPnN0cnVjdCZsb3diYXI7ZGVzY3JpcHRvcjwvTGl0ZXJhbD4gc3RydWN0dXJlIChleHBsYWluZWQgZWFybGllcikgd2FzIGFkZGVkIGEgcHJpdmF0ZQorPExpdGVyYWwgcmVtYXA9InR0Ij5zdHJ1Y3QmbG93YmFyO2NvbW1hbmRzPC9MaXRlcmFsPiBzdHJ1Y3R1cmUuCis8L1BhcmE+CisKKzxQYXJhPgorRm9sbG93cyB0aGUgY3VycmVudCBkZWZpbml0aW9ucyBvZiA8TGl0ZXJhbCByZW1hcD0idHQiPnN0cnVjdCZsb3diYXI7ZGVzY3JpcHRvcjwvTGl0ZXJhbD4gYW5kIG9mCis8TGl0ZXJhbCByZW1hcD0idHQiPnN0cnVjdCZsb3diYXI7Y29tbWFuZDwvTGl0ZXJhbD46CisKKzxQcm9ncmFtTGlzdGluZz4KK3N0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOworICAgICAgICB1bnNpZ25lZCBjaGFyIG5hbWUgWzYwXTsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgZmllbGRzX251bTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBmaWVsZF9uYW1lcyBbTUFYX0ZJRUxEU11bODBdOworICAgICAgICB1bnNpZ25lZCBzaG9ydCBmaWVsZF9sZW5ndGhzIFtNQVhfRklFTERTXTsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgZmllbGRfcG9zaXRpb25zIFtNQVhfRklFTERTXTsKKyAgICAgICAgc3RydWN0IHN0cnVjdF9jb21tYW5kcyB0eXBlX2NvbW1hbmRzOworICAgICAgICBzdHJ1Y3Qgc3RydWN0X2Rlc2NyaXB0b3IgKnByZXYsKm5leHQ7Cit9OworCit0eXBlZGVmIHZvaWQgKCpQRikgKGNoYXIgKik7CisKK3N0cnVjdCBzdHJ1Y3RfY29tbWFuZHMgeworICAgICAgICBpbnQgbGFzdF9jb21tYW5kOworICAgICAgICBjaGFyICpuYW1lcyBbTUFYX0NPTU1BTkRTX05VTV07CisgICAgICAgIGNoYXIgKmRlc2NyaXB0aW9ucyBbTUFYX0NPTU1BTkRTX05VTV07CisgICAgICAgIFBGIGNhbGxiYWNrIFtNQVhfQ09NTUFORFNfTlVNXTsKK307Cis8L1Byb2dyYW1MaXN0aW5nPgorCisKKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxIGlkPSJmbG93LWNvbnRyb2wiPgorPFRpdGxlPlByb2dyYW0gZmxvdyBjb250cm9sPC9UaXRsZT4KKworPFBhcmE+CitPYnZpb3VzbHkgdGhlIGFib3ZlIGFwcHJvYWNoIGxlYWQgdG8gYSBtYWpvciByZWRlc2lnbiBvZiBFWFQyRUQuIFRoZQorbWFpbiBlbmdpbmUgb2YgdGhlIHJlc3VsdGluZyBkZXNpZ24gaXMgYmFzaWNhbGx5IHRoZSBzYW1lIGV2ZW4gbm93LgorPC9QYXJhPgorCis8UGFyYT4KK0kgcmVkZXNpZ25lZCB0aGUgcHJvZ3JhbSBmbG93IGNvbnRyb2wuIFVwIHRvIG5vdywgSSBhbmFseXplZCB0aGUgdXNlciBjb21tYW5kCitsaW5lIHdpdGggdGhlIHNpbXBsZSBzd2l0Y2ggbWV0aG9kLiBOb3cgSSB1c2VkIHRoZSBmYXIgc3VwZXJpb3IgY2FsbGJhY2sKK21ldGhvZC4KKzwvUGFyYT4KKworPFBhcmE+CitJIGRpdmlkZWQgdGhlIGF2YWlsYWJsZSB1c2VyIGNvbW1hbmRzIGludG8gdHdvIGdyb3VwczoKKworPE9yZGVyZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlHZW5lcmFsIGNvbW1hbmRzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVHlwZSBzcGVjaWZpYyBjb21tYW5kcy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvT3JkZXJlZExpc3Q+CisKK0FzIGEgcmVzdWx0LCBhdCBlYWNoIHBvaW50IGluIHRpbWUsIHRoZSB1c2VyIHdhcyBhYmxlIHRvIGVudGVyIGEKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+Z2VuZXJhbCBjb21tYW5kPC9MaXRlcmFsPiwgc2VsZWN0YWJsZSBmcm9tIGEgbGlzdCBvZiBnZW5lcmFsIGNvbW1hbmRzIHdoaWNoIHdhcworYWx3YXlzIGF2YWlsYWJsZSwgb3IgYSA8TGl0ZXJhbCByZW1hcD0idHQiPnR5cGUgc3BlY2lmaWMgY29tbWFuZDwvTGl0ZXJhbD4sIHNlbGVjdGFibGUgZnJvbSBhIGxpc3Qgb2YKK2NvbW1hbmRzIHdoaWNoIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Y2hhbmdlZCBpbiB0aW1lPC9MaXRlcmFsPiBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgdHlwZSB0aGF0IHRoZQordXNlciB3YXMgZWRpdGluZy4gVGhlIHNwZWNpYWwgPExpdGVyYWwgcmVtYXA9InR0Ij50eXBlIHNwZWNpZmljIGNvbW1hbmQ8L0xpdGVyYWw+ICJrbmV3IiBob3cgdG8KK2hhbmRsZSB0aGUgb2JqZWN0IGluIHRoZSBiZXN0IHBvc3NpYmxlIHdheSAtIEl0IHdhcyAiZmluZSB0dW5lZCIgZm9yIHRoZQorb2JqZWN0J3MgcGxhY2UgaW4gdGhlIGV4dDIgZmlsZXN5c3RlbSBkZXNpZ24uCis8L1BhcmE+CisKKzxQYXJhPgorSW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoZSBhYm92ZSBpZGVhLCBJIGNvbnN0cnVjdGVkIGEgZ2xvYmFsIHZhcmlhYmxlIG9mCit0eXBlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0Jmxvd2Jhcjtjb21tYW5kczwvTGl0ZXJhbD4sIHdoaWNoIGNvbnRhaW5lZCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5nZW5lcmFsIGNvbW1hbmRzPC9MaXRlcmFsPi4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnR5cGUgc3BlY2lmaWMgY29tbWFuZHM8L0xpdGVyYWw+IHdlcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnN0cnVjdAorZGVzY3JpcHRvcnM8L0xpdGVyYWw+LCBhcyBleHBsYWluZWQgZWFybGllci4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgcHJvZ3JhbSBmbG93IHdhcyBub3cgZG9uZSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBhbGdvcml0aG06CisKKzxPcmRlcmVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJQXNrIHRoZSB1c2VyIGZvciBhIGNvbW1hbmQgbGluZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUFuYWx5emUgdGhlIHVzZXIgY29tbWFuZCAtIFNlcGFyYXRlIGl0IGludG8gPExpdGVyYWwgcmVtYXA9InR0Ij5jb21tYW5kPC9MaXRlcmFsPiBhbmQKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+YXJndW1lbnRzPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRyYWNlIHRoZSBsaXN0IG9mIGtub3duIG9iamVjdHMgdG8gbWF0Y2ggdGhlIGNvbW1hbmQgbmFtZSB0byBhIHR5cGUuCitJZiB0aGUgdHlwZSBpcyBmb3VuZCwgY2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIHdpdGggdGhlIGFyZ3VtZW50cworYXMgYSBwYXJhbWV0ZXIuIFRoZW4gZ28gYmFjayB0byBzdGVwICgxKS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUlmIHRoZSBjb21tYW5kIGlzIG5vdCB0eXBlIHNwZWNpZmljLCB0cnkgdG8gZmluZCBpdCBpbiB0aGUgZ2VuZXJhbAorY29tbWFuZHMsIGFuZCBjYWxsIGl0IGlmIGZvdW5kLiBHbyBiYWNrIHRvIHN0ZXAgKDEpLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJSWYgdGhlIGNvbW1hbmQgaXMgbm90IGZvdW5kLCBpc3N1ZSBhIHNob3J0IGVycm9yIG1lc3NhZ2UsIGFuZCByZXR1cm4KK3RvIHN0ZXAgKDEpLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9PcmRlcmVkTGlzdD4KKworTm90ZSB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5vcmRlcjwvTGl0ZXJhbD4gb2YgdGhlIGFib3ZlIHN0ZXBzLiBJbiBwYXJ0aWN1bGFyLCBub3RlIHRoYXQgYSBjb21tYW5kCitpcyBmaXJzdCBhc3N1bWVkIHRvIGJlIGEgdHlwZS1zcGVjaWZpYyBjb21tYW5kIGFuZCBvbmx5IGlmIHRoaXMgZmFpbHMsIGEKK2dlbmVyYWwgY29tbWFuZCBpcyBzZWFyY2hlZC4gVGhlICI8TGl0ZXJhbCByZW1hcD0idHQiPnNpZGUtZWZmZWN0PC9MaXRlcmFsPiIgKG1haW4gZWZmZWN0LCBhY3R1YWxseSkKK2lzIHRoYXQgd2hlbiB3ZSBoYXZlIHR3byBjb21tYW5kcyB3aXRoIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNhbWUgbmFtZTwvTGl0ZXJhbD4gLSBPbmUgdGhhdCBpcyBhIAordHlwZSBzcGVjaWZpYyBjb21tYW5kLCBhbmQgb25lIHRoYXQgaXMgYSBnZW5lcmFsIGNvbW1hbmQsIHRoZSBkaXNwYXRjaGluZworYWxnb3JpdGhtIHdpbGwgY2FsbCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij50eXBlIHNwZWNpZmljIGNvbW1hbmQ8L0xpdGVyYWw+LiBUaGlzIGFsbG93cworPExpdGVyYWwgcmVtYXA9InR0Ij5vdmVycmlkaW5nPC9MaXRlcmFsPiBvZiBhIGNvbW1hbmQgdG8gcHJvdmlkZSA8TGl0ZXJhbCByZW1hcD0idHQiPmZpbmUtdHVuZWQ8L0xpdGVyYWw+IG9wZXJhdGlvbi4KK0ZvciBleGFtcGxlLCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93PC9MaXRlcmFsPiBjb21tYW5kIGlzIG92ZXJyaWRkZW4gbmVhcmx5IGV2ZXJ5d2hlcmUsCit0byBhY2NvbW1vZGF0ZSBmb3IgdGhlIGRpZmZlcmVudCB3YXlzIGluIHdoaWNoIGRpZmZlcmVudCBvYmplY3RzIGFyZSBkaXNwbGF5ZWQsCitpbiBvcmRlciB0byBwcm92aWRlIGFuIGludHVpdGl2ZSBmaW5lLXR1bmVkIGRpc3BsYXkuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGFib3ZlIGlzIGRvbmUgaW4gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlzcGF0Y2g8L0xpdGVyYWw+IGZ1bmN0aW9uLCBpbiA8TGl0ZXJhbCByZW1hcD0idHQiPm1haW4uYzwvTGl0ZXJhbD4uIFNpbmNlCitpdCBpcyBhIHZlcnkgaW1wb3J0YW50IGZ1bmN0aW9uIGluIEVYVDJFRCwgYW5kIGl0IGlzIHJlbGF0aXZlbHkgc2hvcnQsIEkgd2lsbAorbGlzdCBpdCBlbnRpcmVseSBoZXJlLiBOb3RlIHRoYXQgYSByZWRlc2lnbiB3YXMgbWFkZSBzaW5jZSB0aGVuIC0gQW5vdGhlcgorbGV2ZWwgd2FzIGFkZGVkIGJldHdlZW4gdGhlIHR3byBkZXNjcmliZWQsIGJ1dCBJJ2xsIGVsYWJvcmF0ZSBtb3JlIG9uIHRoaXMKK2xhdGVyLiBIb3dldmVyLCB0aGUgYmFzaWMgc3RydWN0dXJlIGZvbGxvd3MgdGhlIGV4cGxhbmF0aW9uIGRlc2NyaWJlZCBhYm92ZS4KKworPFByb2dyYW1MaXN0aW5nPgoraW50IGRpc3BhdGNoIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlpbnQgaSxmb3VuZD0wOworCWNoYXIgY29tbWFuZCBbODBdOworCisJcGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGNvbW1hbmQpOworCQkJCisJaWYgKHN0cmNtcCAoY29tbWFuZCwicXVpdCIpPT0wKSByZXR1cm4gKDEpOwkKKworCS8qIDEuIFNlYXJjaCBmb3IgdHlwZSBzcGVjaWZpYyBjb21tYW5kcyBGSVJTVCAtIEFsbG93cyBvdmVycmlkaW5nIG9mIGEgZ2VuZXJhbCBjb21tYW5kICovCisKKwlpZiAoY3VycmVudF90eXBlICE9IE5VTEwpCisJCWZvciAoaT0wO2kmIzYwOz1jdXJyZW50X3R5cGUtJiM2Mjt0eXBlX2NvbW1hbmRzLmxhc3RfY29tbWFuZCAmIzM4OyYjMzg7ICFmb3VuZDtpKyspIHsKKwkJCWlmIChzdHJjbXAgKGNvbW1hbmQsY3VycmVudF90eXBlLSYjNjI7dHlwZV9jb21tYW5kcy5uYW1lcyBbaV0pPT0wKSB7CisJCQkJKCpjdXJyZW50X3R5cGUtJiM2Mjt0eXBlX2NvbW1hbmRzLmNhbGxiYWNrIFtpXSkgKGNvbW1hbmRfbGluZSk7CisJCQkJZm91bmQ9MTsKKwkJCX0KKwkJfQorCisJLyogMi4gTm93IHNlYXJjaCBmb3IgZXh0MiBmaWxlc3lzdGVtIGdlbmVyYWwgY29tbWFuZHMgKi8KKworCWlmICghZm91bmQpCisJCWZvciAoaT0wO2kmIzYwOz1leHQyX2NvbW1hbmRzLmxhc3RfY29tbWFuZCAmIzM4OyYjMzg7ICFmb3VuZDtpKyspIHsKKwkJCWlmIChzdHJjbXAgKGNvbW1hbmQsZXh0Ml9jb21tYW5kcy5uYW1lcyBbaV0pPT0wKSB7CisJCQkJKCpleHQyX2NvbW1hbmRzLmNhbGxiYWNrIFtpXSkgKGNvbW1hbmRfbGluZSk7CisJCQkJZm91bmQ9MTsKKwkJCX0KKwkJfQorCisJCisJLyogMy4gSWYgbm90IGZvdW5kLCBzZWFyY2ggdGhlIGdlbmVyYWwgY29tbWFuZHMgKi8KKwkKKwlpZiAoIWZvdW5kKQorCQlmb3IgKGk9MDtpJiM2MDs9Z2VuZXJhbF9jb21tYW5kcy5sYXN0X2NvbW1hbmQgJiMzODsmIzM4OyAhZm91bmQ7aSsrKSB7CisJCQlpZiAoc3RyY21wIChjb21tYW5kLGdlbmVyYWxfY29tbWFuZHMubmFtZXMgW2ldKT09MCkgeworCQkJCSgqZ2VuZXJhbF9jb21tYW5kcy5jYWxsYmFjayBbaV0pIChjb21tYW5kX2xpbmUpOworCQkJCWZvdW5kPTE7CisJCQl9CisJCX0KKworCWlmICghZm91bmQpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yOiBVbmtub3duIGNvbW1hbmRcbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCX0KKwkKKwlyZXR1cm4gKDApOworfQorPC9Qcm9ncmFtTGlzdGluZz4KKworPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+U291cmNlIGZpbGVzIGluIEVYVDJFRDwvVGl0bGU+CisKKzxQYXJhPgorVGhlIHByb2plY3Qgd2FzIGdldHRpbmcgbGFyZ2UgZW5vdWdoIHRvIGJlIHNwbGl0dGVkIGludG8gc2V2ZXJhbCBzb3VyY2UKK2ZpbGVzLiBJIHNwbGl0dGVkIHRoZSBzb3VyY2UgYXMgbXVjaCBhcyBJIGNvdWxkIGludG8gc2VsZi1jb250YWluZWQKK3NvdXJjZSBmaWxlcy4gVGhlIHNvdXJjZSBmaWxlcyBjb25zaXN0IG9mIHRoZSBmb2xsb3dpbmcgYmxvY2tzOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPk1haW4gaW5jbHVkZSBmaWxlIC0gZXh0MmVkLmg8L0xpdGVyYWw+CisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIHZhcmlvdXMgc3RydWN0dXJlcywKK3ZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIHVzZWQgaW4gRVhUMkVELiBJdCBpcyBpbmNsdWRlZCBieSBhbGwgc291cmNlCitmaWxlcyBpbiBFWFQyRUQuCisKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+TWFpbiBibG9jayAtIG1haW4uYzwvTGl0ZXJhbD4KKworPExpdGVyYWwgcmVtYXA9InR0Ij5tYWluLmM8L0xpdGVyYWw+IGhhbmRsZXMgdGhlIHVwcGVyIGxldmVsIG9mIHRoZSBwcm9ncmFtIGZsb3cgY29udHJvbC4KK0l0IGNvbnRhaW5zIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnBhcnNlcjwvTGl0ZXJhbD4gYW5kIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmRpc3BhdGNoZXI8L0xpdGVyYWw+LiBJdHMgdGFzayBpcwordG8gYXNrIHRoZSB1c2VyIGZvciBhIHJlcXVpcmVkIGFjdGlvbiwgYW5kIHRvIHBhc3MgY29udHJvbCB0byBvdGhlcgorbG93ZXIgbGV2ZWwgZnVuY3Rpb25zIGluIG9yZGVyIHRvIGRvIHRoZSBhY3R1YWwgam9iLgorCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPkluaXRpYWxpemF0aW9uIC0gaW5pdC5jPC9MaXRlcmFsPgorCitUaGUgaW5pdCBzb3VyY2UgaXMgcmVzcG9uc2libGUgZm9yIHRoZSB2YXJpb3VzIGluaXRpYWxpemF0aW9uCithY3Rpb25zIHdoaWNoIG5lZWQgdG8gYmUgZG9uZSB0aHJvdWdoIHRoZSBwcm9ncmFtLiBGb3IgZXhhbXBsZSwKK2F1dG8gZGV0ZWN0aW9uIG9mIGFuIGV4dDIgZmlsZXN5c3RlbSB3aGVuIHNlbGVjdGluZyBhIGRldmljZSBhbmQKK2luaXRpYWxpemF0aW9uIG9mIHRoZSBmaWxlc3lzdGVtLXNwZWNpZmljIHN0cnVjdHVyZXMgZGVzY3JpYmVkCitlYXJsaWVyLgorCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPkRpc2sgYWN0aXZpdHkgLSBkaXNrLmM8L0xpdGVyYWw+CisKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlzay5jPC9MaXRlcmFsPiBpcyBoYW5kbGVzIHRoZSBsb3dlciBsZXZlbCBpbnRlcmFjdGlvbiB3aXRoIHRoZQorZGV2aWNlLiBBbGwgZGlzayBhY3Rpdml0eSBpcyBwYXNzZWQgdGhyb3VnaCB0aGlzIGZpbGUgLSBUaGUgdmFyaW91cworZnVuY3Rpb25zIHRocm91Z2ggdGhlIHNvdXJjZSBjb2RlIHJlcXVlc3QgZGlzayBhY3Rpb25zIGZyb20gdGhlCitmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiBJbiB0aGlzIHdheSwgZm9yIGV4YW1wbGUsIHdlIGNhbiBlYXNpbHkgYmxvY2sKK3RoZSB3cml0ZSBhY2Nlc3MgdG8gdGhlIGRldmljZS4KKworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij5EaXNwbGF5IG91dHB1dCBhY3Rpdml0eSAtIHdpbi5jPC9MaXRlcmFsPgorCQorSW4gYSBzaW1pbGFyIHdheSB0byA8TGl0ZXJhbCByZW1hcD0idHQiPmRpc2suYzwvTGl0ZXJhbD4sIHRoZSB1c2VyLWludGVyZmFjZSBmdW5jdGlvbnMgYW5kCittb3N0IG9mIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPm5jdXJzZXMgbGlicmFyeTwvTGl0ZXJhbD4gYXJlIGRvbmUKK2hlcmUuIE5vdGhpbmcgd2lsbCBiZSBhY3R1YWxseSB3cml0dGVuIHRvIGEgc3BlY2lmaWMgd2luZG93IHdpdGhvdXQKK2NhbGxpbmcgYSBmdW5jdGlvbiBmcm9tIHRoaXMgZmlsZS4KKworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij5Db21tYW5kcyBhdmFpbGFibGUgdGhyb3VnaCBkaXNwYXRjaGluZyAtICombG93YmFyO2NvbS5jIDwvTGl0ZXJhbD4KKworVGhlIGFib3ZlIGZpbGUgbmFtZSBpcyBnZW5lcmljIC0gRWFjaCBmaWxlIHdoaWNoIGVuZHMgd2l0aAorPExpdGVyYWwgcmVtYXA9InR0Ij4mbG93YmFyO2NvbS5jPC9MaXRlcmFsPiBjb250YWlucyBhIGdyb3VwIG9mIHJlbGF0ZWQgY29tbWFuZHMgd2hpY2ggY2FuIGJlCitjYWxsZWQgdGhyb3VnaCA8TGl0ZXJhbCByZW1hcD0idHQiPnRoZSBkaXNwYXRjaGluZyBmdW5jdGlvbjwvTGl0ZXJhbD4uCisKK0VhY2ggb2JqZWN0IHR5cGljYWxseSBoYXMgaXRzIG93biBmaWxlLiBBIHNlcGFyYXRlIGZpbGUgaXMgYWxzbworYXZhaWxhYmxlIGZvciB0aGUgZ2VuZXJhbCBjb21tYW5kcy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCitUaGUgZW50aXJlIGxpc3Qgb2Ygc291cmNlIGZpbGVzIGF2YWlsYWJsZSBhdCB0aGlzIHRpbWUgaXM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCWJsb2NrYml0bWFwJmxvd2Jhcjtjb20uYworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJZGlyJmxvd2Jhcjtjb20uYworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJZGlzay5jCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlleHQyJmxvd2Jhcjtjb20uYworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJZmlsZSZsb3diYXI7Y29tLmMKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCWdlbmVyYWwmbG93YmFyO2NvbS5jCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlncm91cCZsb3diYXI7Y29tLmMKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCWluaXQuYworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJaW5vZGUmbG93YmFyO2NvbS5jCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlpbm9kZWJpdG1hcCZsb3diYXI7Y29tLmMKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCW1haW4uYworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJc3VwZXImbG93YmFyO2NvbS5jCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwl3aW4uYworPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlVzZXIgaW50ZXJmYWNlPC9UaXRsZT4KKworPFBhcmE+CitUaGUgdXNlciBpbnRlcmZhY2UgaXMgdGV4dC1iYXNlZCBvbmx5IGFuZCBpcyBiYXNlZCBvbiB0aGUgZm9sbG93aW5nCitsaWJyYXJpZXM6Cis8L1BhcmE+CisKKzxQYXJhPgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5uY3Vyc2VzPC9MaXRlcmFsPiBsaWJyYXJ5LCBkZXZlbG9wZWQgYnkgPExpdGVyYWwgcmVtYXA9InR0Ij5aZXlkIEJlbi1IYWxpbTwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5HTlUgcmVhZGxpbmU8L0xpdGVyYWw+IGxpYnJhcnkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KK1RoZSB1c2VyIGludGVyYWN0aW9uIGlzIGNvbW1hbmQgbGluZSBiYXNlZCAtIFRoZSB1c2VyIGVudGVycyBhIGNvbW1hbmQKK2xpbmUsIHdoaWNoIGNvbnNpc3RzIG9mIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5jb21tYW5kPC9MaXRlcmFsPiBhbmQgb2YgPExpdGVyYWwgcmVtYXA9InR0Ij5hcmd1bWVudHM8L0xpdGVyYWw+LiBUaGlzIGZpdHMKK25pY2VseSB3aXRoIHRoZSBwcm9ncmFtIGZsb3cgY29udHJvbCBkZXNjcmliZWQgZWFybGllciAtIFRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmNvbW1hbmQ8L0xpdGVyYWw+CitpcyB1c2VkIGJ5IDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlzcGF0Y2g8L0xpdGVyYWw+IHRvIHNlbGVjdCB0aGUgcmlnaHQgZnVuY3Rpb24sIGFuZCB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+YXJndW1lbnRzPC9MaXRlcmFsPiBhcmUgaW50ZXJwcmV0ZWQgYnkgdGhlIGZ1bmN0aW9uIGl0c2VsZi4KKzwvUGFyYT4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBuY3Vyc2VzIGxpYnJhcnk8L1RpdGxlPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPm5jdXJzZXM8L0xpdGVyYWw+IGxpYnJhcnkgZW5hYmxlcyBtZSB0byBkaXZpZGUgdGhlIHNjcmVlbiBpbnRvICJ3aW5kb3dzIi4KK1RoZSBtYWluIGFkdmFudGFnZSBpcyB0aGF0IEkgdHJlYXQgdGhlICJ3aW5kb3ciIGluIGEgdmlydHVhbCB3YXksIGFza2luZwordGhlIG5jdXJzZXMgbGlicmFyeSB0byAid3JpdGUgdG8gYSB3aW5kb3ciLiBIb3dldmVyLCB0aGUgbmN1cnNlcworbGlicmFyeSBpbnRlcm5hbGx5IGJ1ZmZlcnMgdGhlIHJlcXVlc3RzLCBhbmQgbm90aGluZyBpcyBhY3R1YWxseSBwYXNzZWQgdG8gdGhlCit0ZXJtaW5hbCB1bnRpbCBhbiBleHBsaWNpdCByZWZyZXNoIGlzIHJlcXVlc3RlZC4gV2hlbiB0aGUgcmVmcmVzaCByZXF1ZXN0IGlzCittYWRlLCBuY3Vyc2VzIGNvbXBhcmVzIHRoZSBjdXJyZW50IHRlcm1pbmFsIHN0YXRlIChhcyBrbm93biBpbiB0aGUgbGFzdCB0aW1lCit0aGF0IGEgcmVmcmVzaCB3YXMgZG9uZSkgd2l0aCB0aGUgbmV3IHRvIGJlIHNob3duIHN0YXRlLCBhbmQgcGFzc2VzIHRvIHRoZQordGVybWluYWwgdGhlIG1pbmltYWwgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gdXBkYXRlIHRoZSBkaXNwbGF5LiBBcyBhCityZXN1bHQsIHRoZSBkaXNwbGF5IG91dHB1dCBpcyBvcHRpbWl6ZWQgYmVoaW5kIHRoZSBzY2VuZXMgYnkgdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPm5jdXJzZXM8L0xpdGVyYWw+IGxpYnJhcnksIHdoaWxlIEkgY2FuIHN0aWxsIHRyZWF0IGl0IGluIGEgdmlydHVhbCB3YXkuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlcmUgYXJlIHR3byBiYXNpYyBjb25jZXB0cyBpbiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5uY3Vyc2VzPC9MaXRlcmFsPiBsaWJyYXJ5OgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlBIHdpbmRvdy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUEgcGFkLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKK0Egd2luZG93IGNhbiBiZSBubyBiaWdnZXIgdGhhbiB0aGUgYWN0dWFsIHRlcm1pbmFsIHNpemUuIEEgcGFkLCBob3dldmVyLCBpcworbm90IGxpbWl0ZWQgaW4gaXRzIHNpemUuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIHVzZXIgc2NyZWVuIGlzIGRpdmlkZWQgYnkgRVhUMkVEIGludG8gdGhyZWUgd2luZG93cyBhbmQgb25lIHBhZDoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGl0bGUgd2luZG93LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJU3RhdHVzIHdpbmRvdy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCU1haW4gZGlzcGxheSBwYWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlDb21tYW5kIHdpbmRvdy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+dGl0bGUgd2luZG93PC9MaXRlcmFsPiBpcyBzdGF0aWMgLSBJdCBqdXN0IGRpc3BsYXlzIHRoZSBjdXJyZW50IHZlcnNpb24KK29mIEVYVDJFRC4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgdXNlciBpbnRlcmFjdGlvbiBpcyBkb25lIGluIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmNvbW1hbmQgd2luZG93PC9MaXRlcmFsPi4gVGhlIHVzZXIgZW50ZXJzIGEKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+Y29tbWFuZCBsaW5lPC9MaXRlcmFsPiwgZmVlZGJhY2sgaXMgdXN1YWxseSBkaXNwbGF5ZWQgdGhlcmUsIGFuZCB0aGVuIHJlbGV2YW50CitkYXRhIGlzIHVzdWFsbHkgZGlzcGxheWVkIGluIHRoZSBtYWluIGRpc3BsYXkgYW5kIGluIHRoZSBzdGF0dXMgd2luZG93LgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPm1haW4gZGlzcGxheTwvTGl0ZXJhbD4gaXMgdXNpbmcgYSA8TGl0ZXJhbCByZW1hcD0idHQiPnBhZDwvTGl0ZXJhbD4gaW5zdGVhZCBvZiBhIHdpbmRvdyBiZWNhdXNlCit0aGUgYW1vdW50IG9mIGluZm9ybWF0aW9uIHdoaWNoIGlzIHdyaXR0ZW4gdG8gaXQgaXMgbm90IGtub3duIGluIGFkdmFuY2UuCitUaGVyZWZvciwgdGhlIHVzZXIgdHJlYXRzIHRoZSBtYWluIGRpc3BsYXkgYXMgYSAid2luZG93IiBpbnRvIGEgYmlnZ2VyCitkaXNwbGF5IGFuZCBjYW4gPExpdGVyYWwgcmVtYXA9InR0Ij5zY3JvbGwgdmVydGljYWxseTwvTGl0ZXJhbD4gdXNpbmcgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cGdkbjwvTGl0ZXJhbD4gYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cGd1cDwvTGl0ZXJhbD4KK2NvbW1hbmRzLiBBbHRob3VnaCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5wYWQ8L0xpdGVyYWw+IG1lY2hhbmlzbSBlbmFibGVzIG1lIHRvIHVzZSBob3Jpem9udGFsCitzY3JvbGxpbmcsIEkgaGF2ZSBub3QgdXRpbGl6ZWQgdGhpcy4KKzwvUGFyYT4KKworPFBhcmE+CitXaGVuIEkgbmVlZCB0byBzaG93IHNvbWV0aGluZyB0byB0aGUgdXNlciwgSSB1c2UgdGhlIG5jdXJzZXMgPExpdGVyYWwgcmVtYXA9InR0Ij53cHJpbnR3PC9MaXRlcmFsPgorY29tbWFuZC4gVGhlbiBhbiBleHBsaWNpdCByZWZyZXNoIGNvbW1hbmQgaXMgcmVxdWlyZWQuIEFzIGV4cGxhaW5lZCBiZWZvcmUsCit0aGUgcmVmcmVzaCBjb21tYW5kcyBpcyBwaXBlZCB0aHJvdWdoIDxMaXRlcmFsIHJlbWFwPSJ0dCI+d2luLmM8L0xpdGVyYWw+LiBGb3IgZXhhbXBsZSwgdG8gdXBkYXRlCit0aGUgY29tbWFuZCB3aW5kb3csIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cmVmcmVzaCZsb3diYXI7Y29tbWFuZCZsb3diYXI7d2luICgpPC9MaXRlcmFsPiBpcyB1c2VkLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIHJlYWRsaW5lIGxpYnJhcnk8L1RpdGxlPgorCis8UGFyYT4KK0F2bmVyIHN1Z2dlc3RlZCBtZSB0byBpbnRlZ3JhdGUgdGhlIEdOVSA8TGl0ZXJhbCByZW1hcD0idHQiPnJlYWRsaW5lPC9MaXRlcmFsPiBsaWJyYXJ5IGluIG15IHByb2plY3QuCitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5yZWFkbGluZTwvTGl0ZXJhbD4gbGlicmFyeSBpcyBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIHByb2dyYW1zIHdoaWNoIHVzZQorY29tbWFuZCBsaW5lIGludGVyZmFjZS4gSXQgcHJvdmlkZXMgYSBuaWNlIHBhY2thZ2Ugb2YgPExpdGVyYWwgcmVtYXA9InR0Ij5jb21tYW5kIGxpbmUgZWRpdGluZwordG9vbHM8L0xpdGVyYWw+IC0gSW5zZXJ0aW5nLCBkZWxldGluZyB3b3JkcywgYW5kIHRoZSB3aG9sZSBwYWNrYWdlIG9mIGVkaXRpbmcgdG9vbHMKK3doaWNoIGFyZSBub3JtYWxseSBhdmFpbGFibGUgaW4gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YmFzaDwvTGl0ZXJhbD4gc2hlbGwgKFJlZmVyIHRvIHRoZSByZWFkbGluZQorZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscykuIEluIGFkZGl0aW9uLCBJIHV0aWxpemVkIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmhpc3Rvcnk8L0xpdGVyYWw+CitmZWF0dXJlIG9mIHRoZSByZWFkbGluZSBsaWJyYXJ5IC0gVGhlIGVudGVyZWQgY29tbWFuZHMgYXJlIHNhdmVkIGluIGEKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+Y29tbWFuZCBoaXN0b3J5PC9MaXRlcmFsPiwgYW5kIGNhbiBiZSBjYWxsZWQgbGF0ZXIgYnkgd2hhdGV2ZXIgbWVhbnMgdGhhdCB0aGUKK3JlYWRsaW5lIHBhY2thZ2UgcHJvdmlkZXMuIENvbW1hbmQgY29tcGxldGlvbiBpcyBhbHNvIHN1cHBvcnRlZCAtIFdoZW4gdGhlCit1c2VyIGVudGVycyBhIHBhcnRpYWwgY29tbWFuZCBuYW1lLCBFWFQyRUQgd2lsbCBwcm92aWRlIHRoZSByZWFkbGluZSBsaWJyYXJ5Cit3aXRoIHRoZSBwb3NzaWJsZSBjb21wbGV0aW9ucy4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlBvc3NpYmxlIHN1cHBvcnQgb2Ygb3RoZXIgZmlsZXN5c3RlbXM8L1RpdGxlPgorCis8UGFyYT4KK1RoZSBlbnRpcmUgZXh0MiBsYXllciBpcyBwcm92aWRlZCB0aHJvdWdoIHNwZWNpZmljIG9iamVjdHMuIEdpdmVuIGFub3RoZXIKK3NldCBvZiBvYmplY3RzLCBzdXBwb3J0IG9mIG90aGVyIGZpbGVzeXN0ZW0gY2FuIGJlIHByb3ZpZGVkIHVzaW5nIHRoZSBzYW1lCitkaXNwYXRjaGluZyBtZWNoYW5pc20uIEluIG9yZGVyIHRvIHByZXBhcmUgdGhlIHN1cmZhY2UgZm9yIHRoaXMgb3B0aW9uLCBJCithZGRlZCB5ZXQgYW5vdGhlciBsYXllciB0byB0aGUgdHdvLWxheWVyIHN0cnVjdHVyZSBwcmVzZW50ZWQgZWFybGllci4gRVhUMkVECitjb21tYW5kcyBub3cgY29uc2lzdCBvZiB0aHJlZSBsYXllcnM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBnZW5lcmFsIGNvbW1hbmRzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGV4dDIgZ2VuZXJhbCBjb21tYW5kcy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBleHQyIG9iamVjdCBzcGVjaWZpYyBjb21tYW5kcy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCitUaGUgZ2VuZXJhbCBjb21tYW5kcyBhcmUgcHJvdmlkZWQgYnkgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Z2VuZXJhbCZsb3diYXI7Y29tLmM8L0xpdGVyYWw+IHNvdXJjZSBmaWxlLAorYW5kIGFyZSBhbHdheXMgYXZhaWxhYmxlLiBUaGUgdHdvIG90aGVyIGxldmVscyBhcmUgbm90IHByZXNlbnQgd2hlbiBFWFQyRUQKK2xvYWRzIC0gVGhleSBhcmUgZHluYW1pY2FsbHkgYWRkZWQgYnkgPExpdGVyYWwgcmVtYXA9InR0Ij5pbml0LmM8L0xpdGVyYWw+IHdoZW4gRVhUMkVEIGRldGVjdHMgYW4KK2V4dDIgZmlsZXN5c3RlbSBvbiB0aGUgZGV2aWNlLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBhYnN0cmFjdGlvbiBsZXZlbHMgcHJlc2VudGVkIGFib3ZlIGhlbHBzIHRvIGV4dGVuZCBFWFQyRUQgdG8gZnVsbHkKK3N1cHBvcnQgYSBuZXcgZmlsZXN5c3RlbSwgd2l0aCBpdHMgb3duIHNwZWNpZmljIHR5cGUgY29tbWFuZHMuIAorPC9QYXJhPgorCis8UGFyYT4KK0V2ZW4gd2l0aG91dCBhbnkgc291cmNlIGNvZGUgbW9kaWZpY2F0aW9uLCB0aGUgdXNlciBpcyBmcmVlIHRvIGFkZCBzdHJ1Y3R1cmUKK2RlZmluaXRpb25zIGluIGEgc2VwYXJhdGUgZmlsZSAoc3BlY2lmaWVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUpLCAKK3doaWNoIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG9iamVjdHMuIFRoZSBhZGRlZCBvYmplY3RzIHdpbGwKK2NvbnNpc3Qgb25seSBvZiB2YXJpYWJsZXMsIG9mLWNvdXJzZSwgYW5kIHdpbGwgYmUgdXNlZCB0aHJvdWdoIHRoZSBtb3JlCitwcmltaXRpdmUgPExpdGVyYWwgcmVtYXA9InR0Ij5zZXRvZmZzZXQ8L0xpdGVyYWw+IGFuZCA8TGl0ZXJhbCByZW1hcD0idHQiPnNldHR5cGU8L0xpdGVyYWw+IGNvbW1hbmRzLgorPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+T24gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSB2YXJpb3VzIGNvbW1hbmRzPC9UaXRsZT4KKworPFBhcmE+CitUaGlzIHNlY3Rpb24gcG9pbnRzIG91dCBzb21lIHR5cGljYWwgcHJvZ3JhbW1pbmcgc3R5bGUgdGhhdCBJIHVzZWQgaW4gbWFueQorcGxhY2VzIGF0IHRoZSBjb2RlLgorPC9QYXJhPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIGV4cGxpY2l0IHVzZSBvZiB0aGUgZGlzcGF0Y2ggZnVuY3Rpb248L1RpdGxlPgorCis8UGFyYT4KK1RoZSB2YXJpb3VzIGNvbW1hbmRzIGFyZSByZWFjaGVkIGJ5IHRoZSB1c2VyIHRocm91Z2ggdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlzcGF0Y2g8L0xpdGVyYWw+CitmdW5jdGlvbi4gVGhpcyBpcyBub3Qgc3VycHJpc2luZy4gVGhlIGZhY3QgdGhhdCBjYW4gYmUgc3VycHJpc2luZywgYXQgbGVhc3QgaW4KK2EgZmlyc3QgbG9vaywgaXMgdGhhdCA8TGl0ZXJhbCByZW1hcD0idHQiPnlvdSdsbCBmaW5kIHRoZSBkaXNwYXRjaCBjYWxsIGluIG1hbnkgb2YgbXkKK293biBmdW5jdGlvbnMhPC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPFBhcmE+CitJIGFtIGluIGZhY3QgdXNpbmcgbXkgb3duIGltcGxlbWVudGVkIGZ1bmN0aW9ucyB0byBjb25zdHJ1Y3QgaGlnaGVyCitsZXZlbCBvcGVyYXRpb25zLiBJIGFtIGhlYXZpbHkgdXNpbmcgdGhlIGZhY3QgdGhhdCB0aGUgZGlzcGF0Y2hpbmcgbWVjaGFuaXNtCitpcyBvYmplY3Qgb3JpZW50ZWQgYW50IHRoYXQgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+b3ZlcnJpZGluZzwvTGl0ZXJhbD4gcHJpbmNpcGxlIHRha2VzIHBsYWNlIGFuZAorc2VsZWN0cyB0aGUgcHJvcGVyIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBzZXZlcmFsIGNvbW1hbmRzIHdpdGggdGhlIHNhbWUgbmFtZQorYXJlIGFjY2Vzc2libGUuCis8L1BhcmE+CisKKzxQYXJhPgorU29tZXRpbWVzLCBob3dldmVyLCBJIGNhbGwgdGhlIGV4cGxpY2l0IGNvbW1hbmQgZGlyZWN0bHksIHdpdGhvdXQgcGFzc2luZwordGhyb3VnaCA8TGl0ZXJhbCByZW1hcD0idHQiPmRpc3BhdGNoPC9MaXRlcmFsPi4gVGhpcyBpcyB0eXBpY2FsbHkgZG9uZSB3aGVuIEkgd2FudCB0byBieXBhc3MgdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPm92ZXJyaWRpbmc8L0xpdGVyYWw+IGVmZmVjdC4KKzwvUGFyYT4KKworPFBhcmE+CisKK1RoaXMgaXMgdXNlZCwgZm9yIGV4YW1wbGUsIGluIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBnbG9iYWwgY2QgY29tbWFuZAorYW5kIHRoZSBkaXIgb2JqZWN0IHNwZWNpZmljIGNkIGNvbW1hbmQuIFlvdSB3aWxsIHNlZSB0aGVyZSB0aGF0IGluIG9yZGVyCit0byBpbXBsZW1lbnQgdGhlICJlbnRpcmUiIGNkIGNvbW1hbmQsIHRoZSB0eXBlIHNwZWNpZmljIGNkIGNvbW1hbmQgdXNlcyBib3RoCithIGRpc3BhdGNoaW5nIG1lY2hhbmlzbSB0byBjYWxsIGl0c2VsZiByZWN1cnNpdmVseSBpZiBhIHJlbGF0aXZlIHBhdGggaXMKK3VzZWQsIG9yIGEgZGlyZWN0IGNhbGwgb2YgdGhlIGdlbmVyYWwgY2QgaGFuZGxpbmcgZnVuY3Rpb24gaWYgYW4gZXhwbGljaXQgcGF0aAoraXMgdXNlZC4KKworPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+UGFzc2luZyBpbmZvcm1hdGlvbiBiZXR3ZWVuIGhhbmRsaW5nIGZ1bmN0aW9uczwvVGl0bGU+CisKKzxQYXJhPgorVHlwaWNhbGx5LCBldmVyeSBzb3VyY2UgY29kZSBmaWxlIHdoaWNoIGhhbmRsZXMgb25lIG9iamVjdCB0eXBlIGhhcyBhIGdsb2JhbAorc3RydWN0dXJlIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgaXQgd2hpY2ggaXMgdXNlZCBieSBtb3N0IG9mIHRoZQorZnVuY3Rpb25zIGluIHRoYXQgZmlsZS4gVGhpcyBpcyB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgdmFyaW91cworZnVuY3Rpb25zIHRoZXJlLCBhbmQgdG8gcGh5c2ljYWxseSBwcm92aWRlIHRoZSBsaW5rIHRvIG90aGVyIHJlbGF0ZWQKK29iamVjdHMsIHR5cGljYWxseSBmb3IgaW5pdGlhbGl6YXRpb24gdXNlLgorPC9QYXJhPgorCis8UGFyYT4KKworRm9yIGV4YW1wbGUsIGluIG9yZGVyIHRvIGVkaXQgYSBmaWxlLCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK2lub2RlIGlzIG5lZWRlZCAtIFRoZSBmaWxlIGNvbW1hbmQgaXMgYXZhaWxhYmxlIG9ubHkgd2hlbiBlZGl0aW5nIGFuCitpbm9kZS4gV2hlbiB0aGUgZmlsZSBjb21tYW5kIGlzIGlzc3VlZCwgdGhlIGhhbmRsaW5nIGZ1bmN0aW9uIChmb3VuZCwKK2FjY29yZGluZyB0byB0aGUgc291cmNlIGRpdmlzaW9uIG91dGxpbmVkIGFib3ZlLCBpbiBpbm9kZV9jb20uYykgd2lsbAorc3RvcmUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW5vZGUgaW4gYSBzcGVjaWZpYyBzdHJ1Y3R1cmUKK29mIHR5cGUgc3RydWN0X2ZpbGVfaW5mbyB3aGljaCB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IHRoZSBmaWxlX2NvbS5jCitmdW5jdGlvbnMuIE9ubHkgdGhlbiBpdCB3aWxsIHNldCB0aGUgdHlwZSB0byBmaWxlLiBUaGlzIGlzIGFsc28gdGhlIHJlYXNvbgordGhhdCBhIGRpcmVjdCBhc3luY2hyb25pYyBzZXQgb2YgdGhlIG9iamVjdCB0eXBlIHRvIGEgZmlsZSB0aHJvdWdoIGEgc2V0dHlwZQorY29tbWFuZCB3aWxsIGZhaWwgLSBUaGUgYWJvdmUgZGF0YSBzdHJ1Y3R1cmUgd2lsbCBub3QgYmUgaW5pdGlhbGl6ZWQKK3Byb3Blcmx5IGJlY2F1c2UgdGhlIHVzZXIgbmV2ZXIgd2FzIGF0IHRoZSBpbm9kZSBvZiB0aGUgZmlsZS4gCisKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPkEgdmVyeSBzaW1wbGlmaWVkIG92ZXJ2aWV3IG9mIGEgdHlwaWNhbCBjb21tYW5kIGhhbmRsaW5nIGZ1bmN0aW9uPC9UaXRsZT4KKworPFBhcmE+CitUaGlzIGlzIGEgdmVyeSBzaW1wbGlmaWVkIG92ZXJ2aWV3LiBEZXRhaWxlZCBpbmZvcm1hdGlvbiB3aWxsIGZvbGxvdword2hlcmUgYXBwcm9wcmlhdGUuCis8L1BhcmE+CisKKzxTZWN0Mz4KKzxUaXRsZT5UaGUgcHJvdG90eXBlIG9mIGEgdHlwaWNhbCBoYW5kbGluZyBmdW5jdGlvbjwvVGl0bGU+CisKKzxQYXJhPgorCis8T3JkZXJlZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorIAlJIGNob3NlIGEgdW5pZmllZCA8TGl0ZXJhbCByZW1hcD0idHQiPm5hbWluZyBjb252ZW50aW9uPC9MaXRlcmFsPiBmb3IgdGhlIHZhcmlvdXMgb2JqZWN0CitzcGVjaWZpYyBjb21tYW5kcy4gSXQgaXMgcGVyaGFwcyBiZXN0IHNob3dlZCB3aXRoIGFuIGV4YW1wbGU6CisKK1RoZSBwcm90b3R5cGUgb2YgdGhlIGhhbmRsaW5nIGZ1bmN0aW9uIG9mIHRoZSBjb21tYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bmV4dDwvTGl0ZXJhbD4gb2YKK3RoZSB0eXBlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZTwvTGl0ZXJhbD4gaXM6CisKKzxTY3JlZW4+CisJCWV4dGVybiB2b2lkIHR5cGVfZmlsZV9fX25leHQgKGNoYXIgKmNvbW1hbmRfbGluZSk7CisJCis8L1NjcmVlbj4KKworCitGb3Igb3RoZXIgdHlwZXMgYW5kIGNvbW1hbmRzLCB0aGUgd29yZHMgPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlPC9MaXRlcmFsPiBhbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5uZXh0PC9MaXRlcmFsPgorc2hvdWxkIAliZSByZXBsYWNlZCBhY2NvcmRpbmdseS4KKworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGV4dDIgZ2VuZXJhbCBjb21tYW5kcyBzeW50YXggaXMgc2ltaWxhci4gRm9yIGV4YW1wbGUsIHRoZSBleHQyCitnZW5lcmFsIGNvbW1hbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5zdXBlcjwvTGl0ZXJhbD4gcmVzdWx0cyBpbiBjYWxsaW5nOgorCis8U2NyZWVuPgorCQlleHRlcm4gdm9pZCB0eXBlX2V4dDJfX19zdXBlciAoY2hhciAqY29tbWFuZF9saW5lKTsKKwkKKzwvU2NyZWVuPgorCitUaG9zZSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiA8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDImbG93YmFyO2NvbS5jPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBnZW5lcmFsIGNvbW1hbmRzIHN5bnRheCBpcyBldmVuIHNpbXBsZXIgLSBUaGUgbmFtZSBvZiB0aGUKK2hhbmRsaW5nIGZ1bmN0aW9uIGlzIGV4YWN0bHkgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmRzLiBUaG9zZQorZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgaW4gPExpdGVyYWwgcmVtYXA9InR0Ij5nZW5lcmFsJmxvd2Jhcjtjb20uYzwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L09yZGVyZWRMaXN0PgorCis8L1BhcmE+CisKKzwvU2VjdDM+CisKKzxTZWN0Mz4KKzxUaXRsZT4iVHlwaWNhbCIgYWxnb3JpdGhtPC9UaXRsZT4KKworPFBhcmE+CitUaGlzIHNlY3Rpb24gY2FuJ3Qgb2YtY291cnNlIHByb3ZpZGUgbWVhbmluZ2Z1bCBpbmZvcm1hdGlvbiAtIEVhY2gKK2NvbW1hbmQgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSwgYnV0IHRoZSBmb2xsb3dpbmcgZnJhbWUgaXMgdHlwaWNhbDoKKworPE9yZGVyZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFuZCBhbmFseXplIHRoZW0uIFJldHVybiB3aXRoIGFuIGVycm9yCittZXNzYWdlIGlmIHRoZSBzeW50YXggaXMgd3JvbmcuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwkiQWN0IGFjY29yZGluZ2x5IiwgcGVyaGFwcyBtYWtpbmcgdXNlIG9mIHRoZSBnbG9iYWwgdmFyaWFibGUgYXZhaWxhYmxlCit0byB0aGlzIHR5cGUuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlVc2Ugc29tZSA8TGl0ZXJhbCByZW1hcD0idHQiPmRpc3BhdGNoIC8gZGlyZWN0IDwvTGl0ZXJhbD4gY2FsbHMgaW4gb3JkZXIgdG8gcGFzcyBjb250cm9sIHRvCitvdGhlciBsb3dlci1sZXZlbCB1c2VyIGNvbW1hbmRzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJU29tZXRpbWVzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlzcGF0Y2g8L0xpdGVyYWw+IHRvIHRoZSBvYmplY3QncyA8TGl0ZXJhbCByZW1hcD0idHQiPnNob3c8L0xpdGVyYWw+IGNvbW1hbmQgdG8KK2Rpc3BsYXkgdGhlIHJlc3VsdGluZyBkYXRhIHRvIHRoZSB1c2VyLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9PcmRlcmVkTGlzdD4KKworSSB0b2xkIHlvdSBpdCBpcyBtZWFuaW5nbGVzcyA6LSkKKzwvUGFyYT4KKworPC9TZWN0Mz4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPkluaXRpYWxpemF0aW9uIG92ZXJ2aWV3PC9UaXRsZT4KKworPFBhcmE+CitJbiB0aGlzIHNlY3Rpb24gSSB3aWxsIGRpc2N1c3Mgc29tZSBhc3BlY3RzIG9mIHRoZSB2YXJpb3VzIGluaXRpYWxpemF0aW9uCityb3V0aW5lcyBhdmFpbGFibGUgaW4gdGhlIHNvdXJjZSBmaWxlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5pdC5jPC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPFNlY3QyPgorPFRpdGxlPlVwb24gc3RhcnR1cDwvVGl0bGU+CisKKzxQYXJhPgorRm9sbG93cyB0aGUgZnVuY3Rpb24gPExpdGVyYWwgcmVtYXA9InR0Ij5tYWluPC9MaXRlcmFsPiwgYXBwZWFyaW5nIG9mLWNvdXJzZSBpbiA8TGl0ZXJhbCByZW1hcD0idHQiPm1haW4uYzwvTGl0ZXJhbD46CisKKworPFByb2dyYW1MaXN0aW5nPgoraW50IG1haW4gKHZvaWQpCisKK3sKKwlpZiAoIWluaXQgKCkpIHJldHVybiAoMCk7CS8qIFBlcmZvcm0gc29tZSBpbml0aWFsIGluaXRpYWxpemF0aW9uICovCisJCQkJCS8qIFF1aXQgaWYgZmFpbGVkICovCisKKwlwYXJzZXIgKCk7CQkJLyogR2V0IGFuZCBwYXJzZSB1c2VyIGNvbW1hbmRzICovCisJCisJcHJlcGFyZV90b19jbG9zZSAoKTsJCS8qIERvIHNvbWUgY2xlYW51cCAqLworCXByaW50ZiAoIlF1aXR0aW5nIC4uLlxuIik7CisJcmV0dXJuICgxKTsJCQkvKiBBbmQgcXVpdCAqLworfQorPC9Qcm9ncmFtTGlzdGluZz4KKworPC9QYXJhPgorCis8UGFyYT4KK1RoZSB0d28gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLCB3aGljaCBhcmUgY2FsbGVkIGJ5IDxMaXRlcmFsIHJlbWFwPSJ0dCI+bWFpbjwvTGl0ZXJhbD4sIGFyZToKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJaW5pdAorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJcHJlcGFyZSZsb3diYXI7dG8mbG93YmFyO2Nsb3NlCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8U2VjdDM+Cis8VGl0bGU+VGhlIGluaXQgZnVuY3Rpb248L1RpdGxlPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5pdDwvTGl0ZXJhbD4gaXMgY2FsbGVkIGZyb20gPExpdGVyYWwgcmVtYXA9InR0Ij5tYWluPC9MaXRlcmFsPiB1cG9uIHN0YXJ0dXAuIEl0IGluaXRpYWxpemVzIHRoZQorZm9sbG93aW5nIHRhc2tzIC8gc3Vic3lzdGVtczoKKworPE9yZGVyZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlQcm9jZXNzaW5nIG9mIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnVzZXIgY29uZmlndXJhdGlvbiBmaWxlPC9MaXRlcmFsPiwgYnkgdXNpbmcgdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPnByb2Nlc3MmbG93YmFyO2NvbmZpZ3VyYXRpb24mbG93YmFyO2ZpbGU8L0xpdGVyYWw+IGZ1bmN0aW9uLiBGYWlsaW5nIHRvIGNvbXBsZXRlIHRoZQorY29uZmlndXJhdGlvbiBmaWxlIHByb2Nlc3NpbmcgaXMgY29uc2lkZXJlZCBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmF0YWwgZXJyb3I8L0xpdGVyYWw+LAorYW5kIEVYVDJFRCBpcyBhYm9ydGVkLiBJIGRpZCBpdCB0aGlzIHdheSBiZWNhdXNlIHRoZSBjb25maWd1cmF0aW9uCitmaWxlIGhhcyBzb21lIHNlbnNpdGl2ZSB1c2VyIG9wdGlvbnMgbGlrZSB3cml0ZSBhY2Nlc3MgYmVoYXZpb3IsIGFuZAorSSB3YW50ZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSB1c2VyIGlzIGF3YXJlIG9mIHRoZW0uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlSZWdpc3RyYXRpb24gb2YgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Z2VuZXJhbCBjb21tYW5kczwvTGl0ZXJhbD4gdGhyb3VnaCB0aGUgdXNlIG9mCit0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5hZGQmbG93YmFyO2dlbmVyYWwmbG93YmFyO2NvbW1hbmRzPC9MaXRlcmFsPiBmdW5jdGlvbi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVJlc2V0IG9mIHRoZSBvYmplY3QgbWVtb3J5IHJvdGF0aW5nIGxpZm8gc3RydWN0dXJlLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJUmVzZXQgb2YgdGhlIGRldmljZSBwYXJhbWV0ZXJzIGFuZCBvZiB0aGUgY3VycmVudCB0eXBlLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJSW5pdGlhbGl6YXRpb24gb2YgdGhlIHdpbmRvd3Mgc3Vic3lzdGVtIC0gVGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZQorbmN1cnNlcyBsaWJyYXJ5IGFuZCBFWFQyRUQsIHRocm91Z2ggdGhlIHVzZSBvZiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5pbml0Jmxvd2Jhcjt3aW5kb3dzPC9MaXRlcmFsPgorZnVuY3Rpb24sIGF2YWlsYWJsZSBpbiA8TGl0ZXJhbCByZW1hcD0idHQiPndpbi5jPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUluaXRpYWxpemF0aW9uIG9mIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgcmVhZGxpbmUgbGlicmFyeSBhbmQKK0VYVDJFRCwgdGhyb3VnaCA8TGl0ZXJhbCByZW1hcD0idHQiPmluaXQmbG93YmFyO3JlYWRsaW5lPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUluaXRpYWxpemF0aW9uIG9mIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNpZ25hbHM8L0xpdGVyYWw+IHN1YnN5c3RlbSwgdGhyb3VnaAorPExpdGVyYWwgcmVtYXA9InR0Ij5pbml0Jmxvd2JhcjtzaWduYWxzPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCURpc2FibGluZyB3cml0ZSBhY2Nlc3MuIFdyaXRlIGFjY2VzcyBuZWVkcyB0byBiZSBleHBsaWNpdGx5IGVuYWJsZWQKK3VzaW5nIGEgdXNlciBjb21tYW5kLCB0byBwcmV2ZW50IGFjY2lkZW50YWwgdXNlciBtaXN0YWtlcy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvT3JkZXJlZExpc3Q+CisKK1doZW4gPExpdGVyYWwgcmVtYXA9InR0Ij5pbml0PC9MaXRlcmFsPiBpcyBmaW5pc2hlZCwgaXQgZGlzcGF0Y2hlcyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5oZWxwPC9MaXRlcmFsPiBjb21tYW5kIGluIG9yZGVyCit0byBzaG93IHRoZSBhdmFpbGFibGUgY29tbWFuZHMgdG8gdGhlIHVzZXIuIE5vdGUgdGhhdCB0aGUgZXh0MiBsYXllciBpcyBzdGlsbAorbm90IGFkZGVkOyBJdCB3aWxsIGJlIGFkZGVkIGlmIGFuZCB3aGVuIEVYVDJFRCB3aWxsIGRldGVjdCBhbiBleHQyCitmaWxlc3lzdGVtIG9uIGEgZGV2aWNlLgorPC9QYXJhPgorCis8L1NlY3QzPgorCis8U2VjdDM+Cis8VGl0bGU+VGhlIHByZXBhcmUmbG93YmFyO3RvJmxvd2JhcjtjbG9zZSBmdW5jdGlvbjwvVGl0bGU+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cHJlcGFyZSZsb3diYXI7dG8mbG93YmFyO2Nsb3NlPC9MaXRlcmFsPiBmdW5jdGlvbiByZXZlcnNlcyBzb21lIG9mIHRoZSBhY3Rpb25zIGRvbmUKK2VhcmxpZXIgaW4gRVhUMkVEIGFuZCBmcmVlaW5nIHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5LgorU3BlY2lmaWNhbGx5LCBpdDoKKworPE9yZGVyZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlDbG9zZXMgdGhlIG9wZW4gZGV2aWNlLCBpZiBhbnkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlSZW1vdmVzIHRoZSBmaXJzdCBsZXZlbCAtIFJlbW92aW5nIHRoZSBnZW5lcmFsIGNvbW1hbmRzLCB0aHJvdWdoCit0aGUgdXNlIG9mIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZnJlZSZsb3diYXI7dXNlciZsb3diYXI7Y29tbWFuZHM8L0xpdGVyYWw+LCB3aXRoIGEgcG9pbnRlciB0byB0aGUKK2dlbmVyYWwmbG93YmFyO2NvbW1hbmRzIHN0cnVjdHVyZSBhcyBhIHBhcmFtZXRlci4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVJlbW92ZXMgb2YgdGhlIHNlY29uZCBsZXZlbCAtIFJlbW92aW5nIHRoZSBleHQyIGV4dDIgZ2VuZXJhbAorY29tbWFuZHMsIGluIG11Y2ggdGhlIHNhbWUgd2F5LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJUmVtb3ZlcyBvZiB0aGUgdGhpcmQgbGV2ZWwgLSBSZW1vdmluZyB0aGUgb2JqZWN0cyBhbmQgdGhlIG9iamVjdAorc3BlY2lmaWMgY29tbWFuZHMsIGJ5IHVzaW5nIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZnJlZSZsb3diYXI7c3RydWN0Jmxvd2JhcjtkZXNjcmlwdG9yczwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlDbG9zZXMgdGhlIHdpbmRvdyBzdWJzeXN0ZW0sIGFuZCBkZWF0dGFjaGVzIEVYVDJFRCBmcm9tIHRoZSBuY3Vyc2VzCitsaWJyYXJ5LCB0aHJvdWdoIHRoZSB1c2Ugb2YgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Y2xvc2UmbG93YmFyO3dpbmRvd3M8L0xpdGVyYWw+IGZ1bmN0aW9uLAorYXZhaWxhYmxlIGluIDxMaXRlcmFsIHJlbWFwPSJ0dCI+d2luLmM8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9PcmRlcmVkTGlzdD4KKworPC9QYXJhPgorCis8L1NlY3QzPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+UmVnaXN0cmF0aW9uIG9mIGNvbW1hbmRzPC9UaXRsZT4KKworPFBhcmE+CitBZGRpdGlvbiBvZiBhIHVzZXIgY29tbWFuZCBpcyBkb25lIHRocm91Z2ggdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YWRkJmxvd2Jhcjt1c2VyJmxvd2Jhcjtjb21tYW5kPC9MaXRlcmFsPgorZnVuY3Rpb24uIFRoZSBwcm90b3R5cGUgaXM6CisKKzxTY3JlZW4+Cit2b2lkIGFkZF91c2VyX2NvbW1hbmQgKHN0cnVjdCBzdHJ1Y3RfY29tbWFuZHMgKnB0cixjaGFyICpuYW1lLGNoYXIKKypkZXNjcmlwdGlvbixQRiBjYWxsYmFjayk7Cis8L1NjcmVlbj4KKworVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSBvZiB0eXBlCis8TGl0ZXJhbCByZW1hcD0idHQiPnN0cnVjdCZsb3diYXI7Y29tbWFuZHM8L0xpdGVyYWw+LCBhIGRlc2lyZWQgbmFtZSBmb3IgdGhlIGNvbW1hbmQgd2hpY2ggd2lsbCBiZSB1c2VkIGJ5Cit0aGUgdXNlciB0byBpZGVudGlmeSB0aGUgY29tbWFuZCwgYSBzaG9ydCBkZXNjcmlwdGlvbiB3aGljaCBpcyB1dGlsaXplZCBieSB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+aGVscDwvTGl0ZXJhbD4gc3Vic3lzdGVtLCBhbmQgYSBwb2ludGVyIHRvIGEgQyBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBpZgorPExpdGVyYWwgcmVtYXA9InR0Ij5kaXNwYXRjaDwvTGl0ZXJhbD4gZGVjaWRlcyB0aGF0IHRoaXMgY29tbWFuZCB3YXMgcmVxdWVzdGVkLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmFkZCZsb3diYXI7dXNlciZsb3diYXI7Y29tbWFuZDwvTGl0ZXJhbD4gaXMgYSA8TGl0ZXJhbCByZW1hcD0idHQiPmxvdyBsZXZlbCBmdW5jdGlvbjwvTGl0ZXJhbD4gdXNlZCBpbiB0aGUgdGhyZWUKK2xldmVscyB0byBhZGQgdXNlciBjb21tYW5kcy4gRm9yIGV4YW1wbGUsIGFkZGl0aW9uIG9mIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDIKK2dlbmVyYWwgY29tbWFuZHMgaXMgZG9uZSBieTo8L0xpdGVyYWw+CisKKzxQcm9ncmFtTGlzdGluZz4KK3ZvaWQgYWRkX2V4dDJfZ2VuZXJhbF9jb21tYW5kcyAodm9pZCkKKworeworCWFkZF91c2VyX2NvbW1hbmQgKCZhbXA7ZXh0Ml9jb21tYW5kcywic3VwZXIiLCJNb3ZlcyB0byB0aGUgc3VwZXJibG9jayBvZiB0aGUgZmlsZXN5c3RlbSIsdHlwZV9leHQyX19fc3VwZXIpOworCWFkZF91c2VyX2NvbW1hbmQgKCZhbXA7ZXh0Ml9jb21tYW5kcywiZ3JvdXAiLCJNb3ZlcyB0byB0aGUgZmlyc3QgZ3JvdXAgZGVzY3JpcHRvciIsdHlwZV9leHQyX19fZ3JvdXApOworCWFkZF91c2VyX2NvbW1hbmQgKCZhbXA7ZXh0Ml9jb21tYW5kcywiY2QiLCJNb3ZlcyB0byB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCIsdHlwZV9leHQyX19fY2QpOworfQorPC9Qcm9ncmFtTGlzdGluZz4KKworPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+UmVnaXN0cmF0aW9uIG9mIG9iamVjdHM8L1RpdGxlPgorCis8UGFyYT4KK1JlZ2lzdHJhdGlvbiBvZiBvYmplY3RzIGlzIGJhc2VkLCBhcyBleHBsYWluZWQgZWFybGllciwgb24gdGhlICJjb21waWxhdGlvbiIKK29mIGFuIGV4dGVybmFsIHVzZXIgZmlsZSwgd2hpY2ggaGFzIGEgc3ludGF4IHNpbWlsYXIgdG8gdGhlIEMgbGFuZ3VhZ2UKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0PC9MaXRlcmFsPiBrZXl3b3JkLiBUaGUgcHJpbWl0aXZlIHBhcnNlciBJIGhhdmUgaW1wbGVtZW50ZWQgZGV0ZWN0cyB0aGUKK2RlZmluaXRpb24gb2Ygc3RydWN0dXJlcywgYW5kIGNhbGxzIHNvbWUgbG93ZXIgbGV2ZWwgZnVuY3Rpb25zIHRvIGFjdHVhbGx5CityZWdpc3RlciB0aGUgbmV3IGRldGVjdGVkIG9iamVjdC4gVGhlIHBhcnNlcidzIHByb3RvdHlwZSBpczoKKworPFNjcmVlbj4KK2ludCBzZXRfc3RydWN0X2Rlc2NyaXB0b3JzIChjaGFyICpmaWxlX25hbWUpCis8L1NjcmVlbj4KKworSXQgb3BlbnMgdGhlIGdpdmVuIGZpbGUgbmFtZSwgYW5kIGNhbGxzLCB3aGVuIGFwcHJvcHJpYXRlOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlhZGQmbG93YmFyO25ldyZsb3diYXI7ZGVzY3JpcHRvcgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJYWRkJmxvd2JhcjtuZXcmbG93YmFyO3ZhcmlhYmxlCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPExpdGVyYWwgcmVtYXA9InR0Ij5hZGQmbG93YmFyO25ldyZsb3diYXI7ZGVzY3JpcHRvcjwvTGl0ZXJhbD4gaXMgYSBsb3cgbGV2ZWwgZnVuY3Rpb24gd2hpY2ggYWRkcyBhIG5ldyBkZXNjcmlwdG9yCit0byB0aGUgZG91Ymx5IGxpbmtlZCBsaXN0IG9mIHRoZSBhdmFpbGFibGUgb2JqZWN0cy4gSXQgd2lsbCB0aGVuIGNhbGwKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsbCZsb3diYXI7dHlwZSZsb3diYXI7Y29tbWFuZHM8L0xpdGVyYWw+LCB3aGljaCB3aWxsIGFkZCBzcGVjaWZpYyBjb21tYW5kcyB0byB0aGUgb2JqZWN0LAoraWYgdGhlIG9iamVjdCBpcyBrbm93bi4KKzwvUGFyYT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPmFkZCZsb3diYXI7bmV3Jmxvd2Jhcjt2YXJpYWJsZTwvTGl0ZXJhbD4gd2lsbCBhZGQgYSBuZXcgdmFyaWFibGUgb2YgdGhlIHJlcXVlc3RlZCBsZW5ndGggdG8gdGhlCitzcGVjaWZpZWQgZGVzY3JpcHRvci4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPkluaXRpYWxpemF0aW9uIHVwb24gc3BlY2lmaWNhdGlvbiBvZiBhIGRldmljZTwvVGl0bGU+CisKKzxQYXJhPgorV2hlbiB0aGUgZ2VuZXJhbCBjb21tYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0ZGV2aWNlPC9MaXRlcmFsPiBpcyB1c2VkIHRvIG9wZW4gYSBkZXZpY2UsIHNvbWUKK2luaXRpYWxpemF0aW9uIHNlcXVlbmNlIHRha2VzIHBsYWNlLCB3aGljaCBpcyBpbnRlbmRlZCB0byBkZXRlcm1pbmUgdHdvCitmYWN0b3JzOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlBcmUgd2UgZGVhbGluZyB3aXRoIGFuIGV4dDIgZmlsZXN5c3RlbSA/Cis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlXaGF0IGFyZSB0aGUgYmFzaWMgZmlsZXN5c3RlbSBwYXJhbWV0ZXJzLCBzdWNoIGFzIGl0cyB0b3RhbCBzaXplIGFuZAoraXRzIGJsb2NrIHNpemUgPworPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKK1RoaXMgcXVlc3Rpb25zIGFyZSBhbnN3ZXJlZCBieSB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zZXQmbG93YmFyO2ZpbGUmbG93YmFyO3N5c3RlbSZsb3diYXI7aW5mbzwvTGl0ZXJhbD4sIHBvc3NpYmx5Cit1c2luZyBzb21lIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aGVscCBmcm9tIHRoZSB1c2VyPC9MaXRlcmFsPiwgdGhyb3VnaCB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorVGhlIGFuc3dlcnMgYXJlIHBsYWNlZCBpbiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlJmxvd2JhcjtzeXN0ZW0mbG93YmFyO2luZm88L0xpdGVyYWw+IHN0cnVjdHVyZSwgd2hpY2ggaXMgb2YKK3R5cGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zdHJ1Y3QmbG93YmFyO2ZpbGUmbG93YmFyO3N5c3RlbSZsb3diYXI7aW5mbzwvTGl0ZXJhbD46CisKKzxQcm9ncmFtTGlzdGluZz4KK3N0cnVjdCBzdHJ1Y3RfZmlsZV9zeXN0ZW1faW5mbyB7CisJdW5zaWduZWQgbG9uZyBmaWxlX3N5c3RlbV9zaXplOworCXVuc2lnbmVkIGxvbmcgc3VwZXJfYmxvY2tfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBncm91cHNfY291bnQ7CisJdW5zaWduZWQgbG9uZyBpbm9kZXNfcGVyX2Jsb2NrOworCXVuc2lnbmVkIGxvbmcgYmxvY2tzX3Blcl9ncm91cDsJCS8qIFRoZSBuYW1lIGlzIG1pc2xlYWRpbmc7IGJld2FyZSAqLworCXVuc2lnbmVkIGxvbmcgbm9fYmxvY2tzX2luX2dyb3VwOworCXVuc2lnbmVkIHNob3J0IGJsb2NrX3NpemU7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgc3VwZXJfYmxvY2s7Cit9OworPC9Qcm9ncmFtTGlzdGluZz4KKworPC9QYXJhPgorCis8UGFyYT4KK0F1dG9kZXRlY3Rpb24gb2YgYW4gZXh0MiBmaWxlc3lzdGVtIGlzIHVzdWFsbHkgcmVjb21tZW5kZWQuIEhvd2V2ZXIsIG9uIGEgZGFtYWdlZAorZmlsZXN5c3RlbSBJIGNhbid0IGFzc3VyZSBhIHN1Y2Nlc3MuIFRoYXQncyB3ZXJlIHRoZSB1c2VyIGNvbWVzIGluIC0gSGUgY2FuCis8TGl0ZXJhbCByZW1hcD0idHQiPm92ZXJyaWRlPC9MaXRlcmFsPiB0aGUgYXV0byBkZXRlY3Rpb24gcHJvY2VkdXJlIGFuZCBmb3JjZSBhbiBleHQyIGZpbGVzeXN0ZW0sIGJ5CitzZWxlY3RpbmcgdGhlIHByb3BlciBvcHRpb25zIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCis8L1BhcmE+CisKKzxQYXJhPgorSWYgYXV0byBkZXRlY3Rpb24gc3VjY2VlZHMsIHRoZSBzZWNvbmQgcXVlc3Rpb24gYWJvdmUgaXMgYXV0b21hdGljYWxseQorYW5zd2VyZWQgLSBJIGdldCBhbGwgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGl0c2VsZi4gSW4KK2FueSBjYXNlLCBkZWZhdWx0IHBhcmFtZXRlcnMgY2FuIGJlIHN1cHBsaWVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYW5kCit0aGUgdXNlciBjYW4gc2VsZWN0IHRoZSByZXF1aXJlZCBiZWhhdmlvci4KKzwvUGFyYT4KKworPFBhcmE+CitJZiB3ZSBkZWNpZGUgdG8gdHJlYXQgdGhlIGZpbGVzeXN0ZW0gYXMgYW4gZXh0MiBmaWxlc3lzdGVtLCA8TGl0ZXJhbCByZW1hcD0idHQiPnJlZ2lzdHJhdGlvbiBvZgordGhlIGV4dDIgc3BlY2lmaWMgb2JqZWN0czwvTGl0ZXJhbD4gaXMgZG9uZSBhdCB0aGlzIHBvaW50LCBieSBjYWxsaW5nIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5zZXQmbG93YmFyO3N0cnVjdCZsb3diYXI7ZGVzY3JpcHRvcnM8L0xpdGVyYWw+IG91dGxpbmVkIGVhcmxpZXIsIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUKK3doaWNoIGRlc2NyaWJlcyB0aGUgZXh0MiBvYmplY3RzLCBhbmQgaXMgYmFzaWNhbGx5IGJhc2VkIG9uIHRoZSBleHQyIHNvdXJjZXMKK21haW4gaW5jbHVkZSBmaWxlLiBBdCB0aGlzIHBvaW50LCBFWFQyRUQgY2FuIGJlIGZ1bGx5IHVzZWQgYnkgdGhlIHVzZXIuCis8L1BhcmE+CisKKzxQYXJhPgorSWYgd2UgZG8gbm90IHJlZ2lzdGVyIHRoZSBleHQyIHNwZWNpZmljIG9iamVjdHMsIHRoZSB1c2VyIGNhbiBzdGlsbCBwcm92aWRlCitvYmplY3QgZGVmaW5pdGlvbnMgaW4gYSBzZXBhcmF0ZSBmaWxlLCBhbmQgd2lsbCBiZSBhYmxlIHRvIHVzZSBFWFQyRUQgaW4gYQorPExpdGVyYWwgcmVtYXA9InR0Ij5saW1pdGVkIGZvcm08L0xpdGVyYWw+LCBidXQgbW9yZSBzb3BoaXN0aWNhdGVkIHRoYW4gYSBzaW1wbGUgaGV4IGVkaXRvci4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPm1haW4uYzwvVGl0bGU+CisKKzxQYXJhPgorQXMgZGVzY3JpYmVkIGVhcmxpZXIsIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bWFpbi5jPC9MaXRlcmFsPiBpcyB1c2VkIGFzIGEgZnJvbnQtaGVhZCB0byB0aGUgZW50aXJlCitwcm9ncmFtLiA8TGl0ZXJhbCByZW1hcD0idHQiPm1haW4uYzwvTGl0ZXJhbD4gY29udGFpbnMgdGhlIGZvbGxvd2luZyBlbGVtZW50czoKKzwvUGFyYT4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBtYWluIHJvdXRpbmU8L1RpdGxlPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPm1haW48L0xpdGVyYWw+IHJvdXRpbmUgd2FzIGRpc3BsYXllZCBhYm92ZS4gSXRzIHRhc2sgaXMgdG8gcGFzcyBjb250cm9sIHRvCit0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgYW5kIHRvIHRoZSBwYXJzZXIuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5UaGUgcGFyc2VyPC9UaXRsZT4KKworPFBhcmE+CitUaGUgcGFyc2VyIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5wYXJzZXI8L0xpdGVyYWw+IGZ1bmN0aW9uLCB3aGljaCByZWFkcyB0aGUgY29tbWFuZCBsaW5lIGZyb20gdGhlCit1c2VyIGFuZCBzYXZlcyBpdCBpbiByZWFkbGluZSdzIGhpc3RvcnkgYnVmZmVyIGFuZCBpbiB0aGUgaW50ZXJuYWwKK2xhc3QtY29tbWFuZCBidWZmZXIuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5wYXJzZSZsb3diYXI7d29yZDwvTGl0ZXJhbD4gZnVuY3Rpb24sIHdoaWNoIHJlY2VpdmVzIGEgc3RyaW5nIGFuZCBwYXJzZXMKK3RoZSBmaXJzdCB3b3JkIGZyb20gaXQsIGlnbm9yaW5nIHdoaXRlc3BhY2VzLCBhbmQgcmV0dXJucyBhIHBvaW50ZXIKK3RvIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5jb21wbGV0ZSZsb3diYXI7Y29tbWFuZDwvTGl0ZXJhbD4gZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWQgYnkgdGhlIHJlYWRsaW5lCitsaWJyYXJ5IGZvciBjb21tYW5kIGNvbXBsZXRpb24uIEl0IHNjYW5zIHRoZSBhdmFpbGFibGUgY29tbWFuZHMgYXQKK3RoaXMgcG9pbnQgYW5kIGRldGVybWluZXMgdGhlIHBvc3NpYmxlIGNvbXBsZXRpb25zLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBkaXNwYXRjaGVyPC9UaXRsZT4KKworPFBhcmE+CitUaGUgZGlzcGF0Y2hlciB3YXMgYWxyZWFkeSBleHBsYWluZWQgaW4gdGhlIGZsb3cgY29udHJvbCBzZWN0aW9uIC0gc2VjdGlvbgorPFhSZWYgTGlua0VuZD0iZmxvdy1jb250cm9sIj4uIEl0cyB0YXNrIGlzIHRvIHBhc3MgY29udHJvbCB0byB0aGUgcHJvcGVyIGNvbW1hbmQKK2hhbmRsaW5nIGZ1bmN0aW9uLCBiYXNlZCBvbiB0aGUgY29tbWFuZCBsaW5lJ3MgY29tbWFuZC4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBzZWxmLXNhbml0eSBjb250cm9sPC9UaXRsZT4KKworPFBhcmE+CitUaGlzIGlzIG5vdCBmdWxseSBpbXBsZW1lbnRlZC4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgZ2VuZXJhbCBpZGVhIHdhcyB0byBwcm92aWRlIGEgY29udHJvbCBzeXN0ZW0gd2hpY2ggd2lsbCBzdXBlcnZpc2UgdGhlCitpbnRlcm5hbCB3b3JrIG9mIEVYVDJFRC4gU2luY2UgSSBhbSBwcmV0dHkgc3VyZSB0aGF0IGJ1Z3MgZXhpc3QsIEkgaGF2ZQorZG91YmxlIGNoZWNrZWQgbXlzZWxmIGluIGEgZmV3IGluc3RhbmNlcywgYW5kIGlzc3VlZCBhbiA8TGl0ZXJhbCByZW1hcD0idHQiPmludGVybmFsCitlcnJvcjwvTGl0ZXJhbD4gd2FybmluZyBpZiBJIHJlYWNoZWQgdGhlIGNvbmNsdXNpb24gdGhhdCBzb21ldGhpbmcgaXMgbm90IGxvZ2ljYWwuCitUaGUgaW50ZXJuYWwgZXJyb3IgaXMgcmVwb3J0ZWQgYnkgdGhlIGZ1bmN0aW9uIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW50ZXJuYWwmbG93YmFyO2Vycm9yPC9MaXRlcmFsPiwKK2F2YWlsYWJsZSBpbiA8TGl0ZXJhbCByZW1hcD0idHQiPm1haW4uYzwvTGl0ZXJhbD4uIAorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBzZWxmIHNhbml0eSBjaGVjayBpcyBjb21waWxlZCBvbmx5IGlmIHRoZSBjb21waWxlIHRpbWUgb3B0aW9uCis8TGl0ZXJhbCByZW1hcD0idHQiPkRFQlVHPC9MaXRlcmFsPiBpcyBzZWxlY3RlZC4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSB3aW5kb3dzIGludGVyZmFjZTwvVGl0bGU+CisKKzxQYXJhPgorU2NyZWVuIGhhbmRsaW5nIGFuZCBpbnRlcmZhY2luZyB0byB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5uY3Vyc2VzPC9MaXRlcmFsPiBsaWJyYXJ5IGlzIGRvbmUgaW4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+d2luLmM8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8U2VjdDI+Cis8VGl0bGU+SW5pdGlhbGl6YXRpb248L1RpdGxlPgorCis8UGFyYT4KK09wZW5pbmcgb2YgdGhlIHdpbmRvd3MgaXMgZG9uZSBpbiA8TGl0ZXJhbCByZW1hcD0idHQiPmluaXQmbG93YmFyO3dpbmRvd3M8L0xpdGVyYWw+LiBJbgorPExpdGVyYWwgcmVtYXA9InR0Ij5jbG9zZSZsb3diYXI7d2luZG93czwvTGl0ZXJhbD4sIHdlIGp1c3QgY2xvc2Ugb3VyIHdpbmRvd3MuIFRoZSB2YXJpb3VzIHdpbmRvdyBsZW5ndGhzCit3aXRoIGFuIGV4Y2VwdGlvbiB0byB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93IHBhZDwvTGl0ZXJhbD4gYXJlIGRlZmluZWQgaW4gdGhlIG1haW4gaGVhZGVyIGZpbGUuCitUaGUgcmVzdCBvZiB0aGUgZGlzcGxheSB3aWxsIGJlIHVzZWQgYnkgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2hvdyBwYWQ8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+RGlzcGxheSBvdXRwdXQ8L1RpdGxlPgorCis8UGFyYT4KK0VhY2ggYWN0dWFsIHJlZnJlc2hpbmcgb2YgdGhlIHRlcm1pbmFsIG1vbml0b3IgaXMgZG9uZSBieSB1c2luZyB0aGUKK2FwcHJvcHJpYXRlIHJlZnJlc2ggZnVuY3Rpb24gZnJvbSB0aGlzIGZpbGU6IDxMaXRlcmFsIHJlbWFwPSJ0dCI+cmVmcmVzaCZsb3diYXI7dGl0bGUmbG93YmFyO3dpbjwvTGl0ZXJhbD4sCis8TGl0ZXJhbCByZW1hcD0idHQiPnJlZnJlc2gmbG93YmFyO3Nob3cmbG93YmFyO3dpbjwvTGl0ZXJhbD4sIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cmVmcmVzaCZsb3diYXI7c2hvdyZsb3diYXI7cGFkPC9MaXRlcmFsPiBhbmQKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cmVmcmVzaCZsb3diYXI7Y29tbWFuZCZsb3diYXI7d2luPC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPFBhcmE+CitXaXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2hvdyBwYWQ8L0xpdGVyYWw+LCBlYWNoIGZ1bmN0aW9uIHNpbXBseSBjYWxscyB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+bmN1cnNlcyByZWZyZXNoIGNvbW1hbmQ8L0xpdGVyYWw+LiBJbiBvcmRlciB0byBwcm92aWRlIHRvIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2Nyb2xsaW5nPC9MaXRlcmFsPiBpbgordGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2hvdyBwYWQ8L0xpdGVyYWw+LCBzb21lIGluZm9ybWF0aW9uIGFib3V0IGl0cyBzdGF0dXMgaXMgY29uc3RhbnRseSB1cGRhdGVkCitieSB0aGUgdmFyaW91cyBmdW5jdGlvbnMgd2hpY2ggZGlzcGxheSBvdXRwdXQgaW4gaXQuIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cmVmcmVzaCZsb3diYXI7c2hvdyZsb3diYXI7cGFkPC9MaXRlcmFsPgorcGFzc2VzIHRoaXMgaW5mb3JtYXRpb24gdG8gPExpdGVyYWwgcmVtYXA9InR0Ij5uY3Vyc2VzPC9MaXRlcmFsPiBzbyB0aGF0IHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlIHBhZAoraXMgYWN0dWFsbHkgY29waWVkIHRvIHRoZSBkaXNwbGF5LgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBhYm92ZSBpbmZvcm1hdGlvbiBpcyBzYXZlZCBpbiBhIGdsb2JhbCB2YXJpYWJsZSBvZiB0eXBlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0CitzdHJ1Y3QmbG93YmFyO3BhZCZsb3diYXI7aW5mbzwvTGl0ZXJhbD46Cis8L1BhcmE+CisKKzxQYXJhPgorCis8UHJvZ3JhbUxpc3Rpbmc+CitzdHJ1Y3Qgc3RydWN0X3BhZF9pbmZvIHsKKwlpbnQgZGlzcGxheV9saW5lcyxkaXNwbGF5X2NvbHM7CisJaW50IGxpbmUsY29sOworCWludCBtYXhfbGluZSxtYXhfY29sOworCWludCBkaXNhYmxlX291dHB1dDsKK307Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5TY3JlZW4gcmVkcmF3PC9UaXRsZT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5yZWRyYXcmbG93YmFyO2FsbDwvTGl0ZXJhbD4gZnVuY3Rpb24gd2lsbCBqdXN0IHJlb3BlbiB0aGUgd2luZG93cy4gVGhpcyBhY3Rpb24gaXMKK25lY2Vzc2FyeSBpZiB0aGUgZGlzcGxheSBnZXRzIGdhcmJsZWQgZnJvbSBzb21lIHJlYXNvbi4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSBkaXNrIGludGVyZmFjZTwvVGl0bGU+CisKKzxQYXJhPgorQWxsIHRoZSBkaXNrIGFjdGl2aXR5IHdpdGggcmVnYXJkIHRvIHRoZSBmaWxlc3lzdGVtIHBhc3NlcyB0aHJvdWdoIHRoZSBmaWxlCis8TGl0ZXJhbCByZW1hcD0idHQiPmRpc2suYzwvTGl0ZXJhbD4uIFRoaXMgaXMgZG9uZSB0aGF0IHdheSB0byBwcm92aWRlIGFkZGl0aW9uYWwgbGV2ZWxzIG9mIHNhZmV0eQorY29uY2VybmluZyB0aGUgZGlzayBhY2Nlc3MuIFRoaXMgd2F5LCBnbG9iYWwgZGVjaXNpb25zIGNvbnNpZGVyaW5nIHRoZSBkaXNrCitjYW4gYmUgZWFzaWx5IGFjY29tcGxpc2hlZC4gVGhlIGJlbmVmaXRzIG9mIHRoaXMgaXNvbGF0aW9uIHdpbGwgYmVjb21lIGV2ZW4KK2NsZWFyZXIgaW4gdGhlIG5leHQgc2VjdGlvbnMuCis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5Mb3cgbGV2ZWwgZnVuY3Rpb25zPC9UaXRsZT4KKworPFBhcmE+CitSZWFkIHJlcXVlc3RzIGFyZSB1bHRpbWF0ZWx5IGhhbmRsZWQgYnkgPExpdGVyYWwgcmVtYXA9InR0Ij5sb3cmbG93YmFyO3JlYWQ8L0xpdGVyYWw+IGFuZCB3cml0ZSByZXF1ZXN0cworYXJlIGhhbmRsZWQgYnkgPExpdGVyYWwgcmVtYXA9InR0Ij5sb3cmbG93YmFyO3dyaXRlPC9MaXRlcmFsPi4gVGhleSBqdXN0IHJlY2VpdmUgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YQorYmxvY2ssIHRoZSBvZmZzZXQgaW4gdGhlIGZpbGVzeXN0ZW0gYW5kIGEgcG9pbnRlciB0byB0aGUgYnVmZmVyIGFuZCBwYXNzIHRoZQorcmVxdWVzdCB0byB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5mcmVhZDwvTGl0ZXJhbD4gb3IgPExpdGVyYWwgcmVtYXA9InR0Ij5md3JpdGU8L0xpdGVyYWw+IHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb25zLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+TW91bnRlZCBmaWxlc3lzdGVtczwvVGl0bGU+CisKKzxQYXJhPgorRVhUMkVEIGRlc2lnbiBhc3N1bWVzIHRoYXQgdGhlIGVkaXRlZCBmaWxlc3lzdGVtIGlzIG5vdCBtb3VudGVkLiBFdmVuIGlmCithIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cmVhc29uYWJseSBzaW1wbGU8L0xpdGVyYWw+IHdheSB0byBoYW5kbGUgbW91bnRlZCBmaWxlc3lzdGVtcyBleGlzdHMsIGl0IGlzCitwcm9iYWJseSA8TGl0ZXJhbCByZW1hcD0idHQiPnRvbyBjb21wbGljYXRlZDwvTGl0ZXJhbD4gOi0pCis8L1BhcmE+CisKKzxQYXJhPgorV3JpdGUgYWNjZXNzIHRvIGEgbW91bnRlZCBmaWxlc3lzdGVtIHdpbGwgYmUgZGVuaWVkLiBSZWFkIGFjY2VzcyBjYW4gYmUKK2FsbG93ZWQgYnkgdXNpbmcgYSBjb25maWd1cmF0aW9uIGZpbGUgb3B0aW9uLiBUaGUgbW91bnQgc3RhdHVzIGlzIGRldGVybWluZWQKK2J5IHJlYWRpbmcgdGhlIGZpbGUgL2V0Yy9tdGFiLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+V3JpdGUgYWNjZXNzPC9UaXRsZT4KKworPFBhcmE+CitXcml0ZSBhY2Nlc3MgaXMgdGhlIG1vc3Qgc2Vuc2l0aXZlIHBhcnQgaW4gdGhlIHByb2dyYW0uIFRoaXMgcHJvZ3JhbSBpcworaW50ZW5kZWQgZm9yIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZWRpdGluZyBmaWxlc3lzdGVtczwvTGl0ZXJhbD4uIEl0IGlzIG9idmlvdXMgdGhhdCBhIHNtYWxsIG1pc3Rha2UKK2luIHRoaXMgcmVnYXJkIGNhbiBtYWtlIHRoZSBmaWxlc3lzdGVtIG5vdCB1c2FibGUgYW55bW9yZS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgZm9sbG93aW5nIHNhZmV0eSBtZWFzdXJlcyBhcmUgYWRkZWQsIG9mLWNvdXJzZSwgdG8gdGhlIGdlbmVyYWwgVW5peAorcGVybWlzc2lvbiBwcm90ZWN0aW9uIC0gVGhlIHVzZXIgY2FuIGFsd2F5cyBkaXNhYmxlIHdyaXRlIGFjY2VzcyBvbiB0aGUKK2RldmljZSBmaWxlIGl0c2VsZi4KKzwvUGFyYT4KKworPFBhcmE+CitDb25zaWRlcmluZyB0aGUgdXNlciwgdGhlIGZvbGxvd2luZyBzYWZldHkgbWVhc3VyZXMgd2VyZSB0YWtlbjoKKworPE9yZGVyZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgZmlsZXN5c3RlbSBpcyA8TGl0ZXJhbCByZW1hcD0idHQiPm5ldmVyPC9MaXRlcmFsPiBvcGVuZWQgd2l0aCB3cml0ZS1hY2Nlc3MgZW5hYmxlcy4KK1JhdGhlciwgdGhlIHVzZXIgbXVzdCBleHBsaWNpdGx5IHJlcXVlc3QgdG8gZW5hYmxlIHdyaXRlLWFjY2Vzcy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSB1c2VyIGNhbiA8TGl0ZXJhbCByZW1hcD0idHQiPmRpc2FibGU8L0xpdGVyYWw+IHdyaXRlIGFjY2VzcyBlbnRpcmVseSBieSB1c2luZyBhCis8TGl0ZXJhbCByZW1hcD0idHQiPmNvbmZpZ3VyYXRpb24gZmlsZSBvcHRpb248L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJQ2hhbmdlcyBhcmUgbmV2ZXIgZG9uZSBhdXRvbWF0aWNhbGx5IC0gV2hlbmV2ZXIgdGhlIHVzZXIgbWFrZXMKK2NoYW5nZXMsIHRoZXkgYXJlIGRvbmUgaW4gbWVtb3J5LiBBbiBleHBsaWNpdCA8TGl0ZXJhbCByZW1hcD0idHQiPndyaXRlZGF0YTwvTGl0ZXJhbD4KK2NvbW1hbmQgc2hvdWxkIGJlIGlzc3VlZCB0byBtYWtlIHRoZSBjaGFuZ2VzIGFjdGl2ZSBpbiB0aGUgZGlzay4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvT3JkZXJlZExpc3Q+CisKK0NvbnNpZGVyaW5nIG15c2VsZiwgSSB0cmllZCB0byBwcm90ZWN0IGFnYWluc3QgbXkgYnVncyBieToKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJT3BlbmluZyB0aGUgZGV2aWNlIGluIHJlYWQtb25seSBtb2RlIHVudGlsIGEgd3JpdGUgcmVxdWVzdCBpcworaXNzdWVkIGJ5IHRoZSB1c2VyLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJTGltaXRpbmcgPExpdGVyYWwgcmVtYXA9InR0Ij5hY3R1YWw8L0xpdGVyYWw+IGZpbGVzeXN0ZW0gYWNjZXNzIHRvIHR3byBmdW5jdGlvbnMgb25seSAtCis8TGl0ZXJhbCByZW1hcD0idHQiPmxvdyZsb3diYXI7cmVhZDwvTGl0ZXJhbD4gZm9yIHJlYWRpbmcsIGFuZCA8TGl0ZXJhbCByZW1hcD0idHQiPmxvdyZsb3diYXI7d3JpdGU8L0xpdGVyYWw+IGZvciB3cml0aW5nLiBUaG9zZQorZnVuY3Rpb25zIHdlcmUgcHJvZ3JhbW1lZCBjYXJlZnVsbHksIGFuZCBJIGFkZGVkIHRoZSBzZWxmCitzYW5pdHkgY2hlY2tzIHRoZXJlLiBJbiBhZGRpdGlvbiwgdGhpcyBpcyB0aGUgb25seSBwbGFjZSBpbiB3aGljaCBJCituZWVkIHRvIGNoZWNrIHRoZSB1c2VyIG9wdGlvbnMgZGVzY3JpYmVkIGFib3ZlIC0gVGhlcmUgY2FuIGJlIG5vCitwbGFjZSBpbiB3aGljaCBJIGNhbiAiZm9yZ2V0IiB0byBjaGVjayB0aGVtLgorCitOb3RlIHRoYXQgVGhlIGRpc2FibGluZyBvZiB3cml0ZS1hY2Nlc3MgdGhyb3VnaCB0aGUgY29uZmlndXJhdGlvbiBmaWxlCitpcyBkb3VibGUgY2hlY2tlZCBoZXJlIG9ubHkgYXMgYSA8TGl0ZXJhbCByZW1hcD0idHQiPnNlbGYtc2FuaXR5PC9MaXRlcmFsPiBjaGVjayAtIElmCis8TGl0ZXJhbCByZW1hcD0idHQiPkRFQlVHPC9MaXRlcmFsPiBpcyBzZWxlY3RlZCwgc2luY2Ugd3JpdGUgZW5hYmxlIHNob3VsZCBoYXZlIGJlZW4gcmVmdXNlZAorYW5kIHdyaXRlLWFjY2VzcyBpcyBhbHdheXMgZGlzYWJsZWQgYXQgc3RhcnR1cCwgaGVuY2UgZmluZGluZworPExpdGVyYWwgcmVtYXA9InR0Ij5oZXJlPC9MaXRlcmFsPiB0aGF0IHRoZSB1c2VyIGhhcyB3cml0ZSBhY2Nlc3MgZGlzYWJsZWQgdGhyb3VnaCB0aGUKK2NvbmZpZ3VyYXRpb24gZmlsZSBjbGVhcmx5IGluZGljYXRlcyB0aGF0IEkgaGF2ZSBhIGJ1ZyBzb21ld2hlcmUuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KK1RoZSBmb2xsb3dpbmcgc2FmZXR5IG1lYXN1cmUgY2FuIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IDxMaXRlcmFsIHJlbWFwPSJ0dCI+Ym90aDwvTGl0ZXJhbD4gdXNlcgorbWlzdGFrZXMgYW5kIG15IG93biBidWdzOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJIGFkZGVkIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5sb2dnaW5nIG9wdGlvbjwvTGl0ZXJhbD4sIHdoaWNoIGxvZ3MgZXZlcnkgYWN0dWFsIHdyaXRlCithY2Nlc3MgdG8gdGhlIGRpc2sgaW4gdGhlIGxvd2VzdCBsZXZlbCAtIEluIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bG93Jmxvd2Jhcjt3cml0ZTwvTGl0ZXJhbD4gaXRzZWxmLgorCitUaGUgbG9nZ2luZyBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHR5cGUgYW5kIHRoZSB2YXJpb3VzCitvdGhlciBoaWdoZXIgbGV2ZWwgb3BlcmF0aW9ucyBvZiBFWFQyRUQgLSBJdCBpcyBzaW1wbHkgYSBoZXggZHVtcCBvZgordGhlIGNvbnRlbnRzIHdoaWNoIHdpbGwgYmUgb3ZlcndyaXR0ZW47IEJvdGggdGhlIG9yaWdpbmFsIGNvbnRlbnRzCithbmQgdGhlIG5ldyB3cml0dGVuIGRhdGEuCisKK0luIHRoYXQgY2FzZSwgZXZlbiBpZiB0aGUgdXNlciBtYWtlcyBhIAltaXN0YWtlLCB0aGUgb3JpZ2luYWwgZGF0YQorY2FuIGJlIHJldHJpZXZlZC4KKworRXZlbiBJZiBJIGhhdmUgYSBidWcgc29tZXdoZXJlIHdoaWNoIGNhdXNlcyBpbmNvcnJlY3QgZGF0YSB0byBiZQord3JpdHRlbiB0byB0aGUgZGlzaywgdGhlIGxvZ2dpbmcgb3B0aW9uIHdpbGwgc3RpbGwgbG9nIGV4YWN0bHkgdGhlCitvcmlnaW5hbCBjb250ZW50cyBhdCB0aGUgcGxhY2Ugd2VyZSBkYXRhIHdhcyBpbmNvcnJlY3RseSBvdmVyd3JpdHRlbi4KKyhUaGlzIGFzc3VtZXMsIG9mLWNvdXJzZSwgdGhhdCA8TGl0ZXJhbCByZW1hcD0idHQiPmxvdy13cml0ZTwvTGl0ZXJhbD4gYW5kIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmxvZ2dpbmcKK2l0c2VsZjwvTGl0ZXJhbD4gd29yayBjb3JyZWN0bHkuIEkgaGF2ZSBkb25lIG15IGJlc3QgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcworaW5kZWVkIHRoZSBjYXNlKS4KKworVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bG9nZ2luZzwvTGl0ZXJhbD4gb3B0aW9uIGlzIGltcGxlbWVudGVkIGluIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmxvZyZsb3diYXI7Y2hhbmdlczwvTGl0ZXJhbD4KK2Z1bmN0aW9uLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlJlYWRpbmcgLyBXcml0aW5nIG9iamVjdHM8L1RpdGxlPgorCis8UGFyYT4KK1VzdWFsbHkgPExpdGVyYWwgcmVtYXA9InR0Ij4obm90IGFsd2F5cyk8L0xpdGVyYWw+LCB0aGUgY3VycmVudCBvYmplY3QgZGF0YSBpcyBhdmFpbGFibGUgaW4gdGhlCitnbG9iYWwgdmFyaWFibGUgPExpdGVyYWwgcmVtYXA9InR0Ij50eXBlJmxvd2JhcjtkYXRhPC9MaXRlcmFsPiwgd2hpY2ggaXMgb2YgdGhlIHR5cGU6CisKKzxQcm9ncmFtTGlzdGluZz4KK3N0cnVjdCBzdHJ1Y3RfdHlwZV9kYXRhIHsKKwlsb25nIG9mZnNldF9pbl9ibG9jazsKKworCXVuaW9uIHVuaW9uX3R5cGVfZGF0YSB7CisJCWNoYXIgYnVmZmVyIFtFWFQyX01BWF9CTE9DS19TSVpFXTsKKwkJc3RydWN0IGV4dDJfYWNsX2hlYWRlciB0X2V4dDJfYWNsX2hlYWRlcjsKKwkJc3RydWN0IGV4dDJfYWNsX2VudHJ5IHRfZXh0Ml9hY2xfZW50cnk7CisJCXN0cnVjdCBleHQyX29sZF9ncm91cF9kZXNjIHRfZXh0Ml9vbGRfZ3JvdXBfZGVzYzsKKwkJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyB0X2V4dDJfZ3JvdXBfZGVzYzsKKwkJc3RydWN0IGV4dDJfaW5vZGUgdF9leHQyX2lub2RlOworCQlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayB0X2V4dDJfc3VwZXJfYmxvY2s7CisJCXN0cnVjdCBleHQyX2Rpcl9lbnRyeSB0X2V4dDJfZGlyX2VudHJ5OworCX0gdTsKK307Cis8L1Byb2dyYW1MaXN0aW5nPgorCitUaGUgYWJvdmUgdW5pb24gZW5hYmxlcyBtZSwgaW4gdGhlIHByb2dyYW0sIHRvIHRyZWF0IHRoZSBkYXRhIGFzIHJhdyBkYXRhIG9yCithcyBhIG1lYW5pbmdmdWwgZmlsZXN5c3RlbSBvYmplY3QuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIHJlYWRpbmcgYW5kIHdyaXRpbmcsIGlmIGRvbmUgdG8gdGhpcyBnbG9iYWwgdmFyaWFibGUsIGFyZSBkb25lIHRocm91Z2gKK3RoZSBmdW5jdGlvbnMgPExpdGVyYWwgcmVtYXA9InR0Ij5sb2FkJmxvd2Jhcjt0eXBlJmxvd2JhcjtkYXRhPC9MaXRlcmFsPiBhbmQgPExpdGVyYWwgcmVtYXA9InR0Ij53cml0ZSZsb3diYXI7dHlwZSZsb3diYXI7ZGF0YTwvTGl0ZXJhbD4sIGF2YWlsYWJsZSBpbgorPExpdGVyYWwgcmVtYXA9InR0Ij5kaXNrLmM8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+VGhlIGdlbmVyYWwgY29tbWFuZHM8L1RpdGxlPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmdlbmVyYWwgY29tbWFuZHM8L0xpdGVyYWw+IGFyZSBoYW5kbGVkIGluIHRoZSBmaWxlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Z2VuZXJhbCZsb3diYXI7Y29tLmM8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIGhlbHAgc3lzdGVtPC9UaXRsZT4KKworPFBhcmE+CitUaGUgaGVscCBjb21tYW5kIGlzIGhhbmRsZWQgYnkgdGhlIGZ1bmN0aW9uIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aGVscDwvTGl0ZXJhbD4uIFRoZSBhbGdvcml0aG0gaXMgYXMKK2ZvbGxvd3M6Cis8L1BhcmE+CisKKzxQYXJhPgorCis8T3JkZXJlZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUNoZWNrIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiBJZiB0aGVyZSBpcyBhbiBhcmd1bWVudCwgcGFzcworY29udHJvbCB0byB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5kZXRhaWxlZCZsb3diYXI7aGVscDwvTGl0ZXJhbD4gZnVuY3Rpb24sIGluIG9yZGVyIHRvIHByb3ZpZGUKK2hlbHAgb24gdGhlIHNwZWNpZmljIGNvbW1hbmQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJZiBnZW5lcmFsIGhlbHAgd2FzIHJlcXVlc3RlZCwgZGlzcGxheSBhIGxpc3Qgb2YgdGhlIGF2YWlsYWJsZQorY29tbWFuZHMgYXQgdGhpcyBwb2ludC4gVGhlIHRocmVlIGxldmVscyBhcmUgZGlzcGxheWVkIGluIHJldmVyc2UKK29yZGVyIC0gRmlyc3QgdGhlIGNvbW1hbmRzIHdoaWNoIGFyZSBzcGVjaWZpYyB0byB0aGUgY3VycmVudCB0eXBlCisoSWYgYSBjdXJyZW50IHR5cGUgaXMgZGVmaW5lZCksIHRoZW4gdGhlIGV4dDIgZ2VuZXJhbCBjb21tYW5kcyAoSWYKK3dlIGRlY2lkZWQgdGhhdCB0aGUgZmlsZXN5c3RlbSBzaG91bGQgYmUgdHJlYXRlZCBsaWtlIGFuIGV4dDIKK2ZpbGVzeXN0ZW0pLCB0aGVuIHRoZSBnZW5lcmFsIGNvbW1hbmRzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJRGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBFWFQyRUQgLSBDdXJyZW50IHZlcnNpb24sIGdlbmVyYWwKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9qZWN0LCBldGMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L09yZGVyZWRMaXN0PgorCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5UaGUgc2V0ZGV2aWNlIGNvbW1hbmQ8L1RpdGxlPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNldGRldmljZTwvTGl0ZXJhbD4gY29tbWFuZHMgcmVzdWx0IGluIGNhbGxpbmcgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0Jmxvd2JhcjtkZXZpY2U8L0xpdGVyYWw+CitmdW5jdGlvbi4gVGhlIGFsZ29yaXRobSBpczoKKzwvUGFyYT4KKworPFBhcmE+CisKKzxPcmRlcmVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJUGFyc2UgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudC4gSWYgaXQgaXNuJ3QgYXZhaWxhYmxlIHJlcG9ydCB0aGUKK2Vycm9yIGFuZCByZXR1cm4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlDbG9zZSB0aGUgY3VycmVudCBvcGVuIGRldmljZSwgaWYgdGhlcmUgaXMgb25lLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJT3BlbiB0aGUgbmV3IGRldmljZSBpbiByZWFkLW9ubHkgbW9kZS4gVXBkYXRlIHRoZSBnbG9iYWwgdmFyaWFibGVzCis8TGl0ZXJhbCByZW1hcD0idHQiPmRldmljZSZsb3diYXI7bmFtZTwvTGl0ZXJhbD4gYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGV2aWNlJmxvd2JhcjtoYW5kbGU8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJRGlzYWJsZSB3cml0ZSBhY2Nlc3MuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlFbXB0eSB0aGUgb2JqZWN0IG1lbW9yeS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVVucmVnaXN0ZXIgdGhlIGV4dDIgZ2VuZXJhbCBjb21tYW5kcywgdXNpbmcKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZnJlZSZsb3diYXI7dXNlciZsb3diYXI7Y29tbWFuZHM8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVW5yZWdpc3RlciB0aGUgY3VycmVudCBvYmplY3RzLCB1c2luZyA8TGl0ZXJhbCByZW1hcD0idHQiPmZyZWUmbG93YmFyO3N0cnVjdCZsb3diYXI7ZGVzY3JpcHRvcnM8L0xpdGVyYWw+Cis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlDYWxsIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0Jmxvd2JhcjtmaWxlJmxvd2JhcjtzeXN0ZW0mbG93YmFyO2luZm88L0xpdGVyYWw+IHRvIGF1dG8tZGV0ZWN0IGFuIGV4dDIgZmlsZXN5c3RlbQorYW5kIHNldCB0aGUgYmFzaWMgZmlsZXN5c3RlbSB2YWx1ZXMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlBZGQgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YWx0ZXJuYXRlIGRlc2NyaXB0b3JzPC9MaXRlcmFsPiwgc3VwcGxpZWQgYnkgdGhlIHVzZXIuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlTZXQgdGhlIGRldmljZSBvZmZzZXQgdG8gdGhlIGZpbGVzeXN0ZW0gc3RhcnQgYnkgZGlzcGF0Y2hpbmcKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0b2Zmc2V0IDA8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJU2hvdyB0aGUgbmV3IGF2YWlsYWJsZSBjb21tYW5kcyBieSBkaXNwYXRjaGluZyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5oZWxwPC9MaXRlcmFsPgorY29tbWFuZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvT3JkZXJlZExpc3Q+CisKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPkJhc2ljIG1hbmV1dmVyaW5nPC9UaXRsZT4KKworPFBhcmE+CitCYXNpYyBtYW5ldXZlcmluZyBpcyBkb25lIHVzaW5nIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNldG9mZnNldDwvTGl0ZXJhbD4gYW5kIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNldHR5cGU8L0xpdGVyYWw+Cit1c2VyIGNvbW1hbmRzLgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0Jmxvd2JhcjtvZmZzZXQ8L0xpdGVyYWw+IGFjY2VwdHMgc29tZSBhbHRlcm5hdGl2ZSBmb3JtcyBvZiBzcGVjaWZ5aW5nIHRoZSBuZXcKK29mZnNldC4gVGhleSBhbGwgdWx0aW1hdGVseSBsZWFkIHRvIGNoYW5naW5nIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmRldmljZSZsb3diYXI7b2Zmc2V0PC9MaXRlcmFsPgorZ2xvYmFsIHZhcmlhYmxlIGFuZCBzZWVraW5nIHRvIHRoZSBuZXcgcG9zaXRpb24uIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0Jmxvd2JhcjtvZmZzZXQ8L0xpdGVyYWw+IGFsc28KK2NhbGxzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bG9hZCZsb3diYXI7dHlwZSZsb3diYXI7ZGF0YTwvTGl0ZXJhbD4gdG8gcmVhZCBhIGJsb2NrIGFoZWFkIG9mIHRoZSBuZXcgcG9zaXRpb24gaW50bwordGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+dHlwZSZsb3diYXI7ZGF0YTwvTGl0ZXJhbD4gZ2xvYmFsIHZhcmlhYmxlLgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0Jmxvd2Jhcjt0eXBlPC9MaXRlcmFsPiB3aWxsIHBvaW50IHRoZSBnbG9iYWwgdmFyaWFibGUgPExpdGVyYWwgcmVtYXA9InR0Ij5jdXJyZW50Jmxvd2Jhcjt0eXBlPC9MaXRlcmFsPiB0byB0aGUKK2NvcnJlY3QgZW50cnkgaW4gdGhlIGRvdWJsZSBsaW5rZWQgbGlzdCBvZiB0aGUga25vd24gb2JqZWN0cy4gSWYgdGhlCityZXF1ZXN0ZWQgdHlwZSBpcyA8TGl0ZXJhbCByZW1hcD0idHQiPmhleDwvTGl0ZXJhbD4gb3IgPExpdGVyYWwgcmVtYXA9InR0Ij5ub25lPC9MaXRlcmFsPiwgPExpdGVyYWwgcmVtYXA9InR0Ij5jdXJyZW50Jmxvd2Jhcjt0eXBlPC9MaXRlcmFsPiB3aWxsIGJlCitpbml0aWFsaXplZCB0byA8TGl0ZXJhbCByZW1hcD0idHQiPk5VTEw8L0xpdGVyYWw+LiA8TGl0ZXJhbCByZW1hcD0idHQiPnNldCZsb3diYXI7dHlwZTwvTGl0ZXJhbD4gd2lsbCBhbHNvIGRpc3BhdGNoIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2hvdzwvTGl0ZXJhbD4sCitzbyB0aGF0IHRoZSBvYmplY3QgZGF0YSB3aWxsIGJlIHJlLWZvcm1hdHRlZCBpbiB0aGUgbmV3IGZvcm1hdC4KKzwvUGFyYT4KKworPFBhcmE+CitXaGVuIGVkaXRpbmcgYW4gZXh0MiBmaWxlc3lzdGVtLCBpdCBpcyBub3QgaW50ZW5kZWQgdGhhdCB0aG9zZSBjb21tYW5kcyB3aWxsCitiZSB1c2VkIGRpcmVjdGx5LCBhbmQgaXQgaXMgdXN1YWxseSBub3QgcmVxdWlyZWQuIE15IGltcGxlbWVudGF0aW9uIG9mIHRoZQorZXh0MiBsYXllciwgb24gdGhlIG90aGVyIGhhbmQsIHVzZXMgdGhpcyBsb3dlciBsZXZlbCBjb21tYW5kcyBvbiBjb3VudGxlc3MKK29jY2FzaW9ucy4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBkaXNwbGF5IGZ1bmN0aW9uczwvVGl0bGU+CisKKzxQYXJhPgorVGhlIGdlbmVyYWwgY29tbWFuZCB2ZXJzaW9uIG9mIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2hvdzwvTGl0ZXJhbD4gaXMgaGFuZGxlZCBieSB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93PC9MaXRlcmFsPgorZnVuY3Rpb24uIFRoaXMgY29tbWFuZCBpcyBvdmVycmlkZGVuIGJ5IHZhcmlvdXMgb2JqZWN0cyB0byBwcm92aWRlIGEgZGlzcGxheQord2hpY2ggaXMgYmV0dGVyIHN1aXRlZCB0byB0aGUgb2JqZWN0LgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBnZW5lcmFsIHNob3cgY29tbWFuZCB3aWxsIGZvcm1hdCB0aGUgZGF0YSBpbiA8TGl0ZXJhbCByZW1hcD0idHQiPnR5cGUmbG93YmFyO2RhdGE8L0xpdGVyYWw+IGFjY29yZGluZwordG8gdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIG9mIHRoZSBjdXJyZW50IHR5cGUgYW5kIHNob3cgaXQgb24gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2hvdworcGFkPC9MaXRlcmFsPi4gSWYgdGhlcmUgaXMgbm8gY3VycmVudCB0eXBlLCB0aGUgZGF0YSB3aWxsIGJlIHNob3duIGFzIGEgc2ltcGxlIGhleAorZHVtcDsgT3RoZXJ3aXNlLCB0aGUgbGlzdCBvZiB2YXJpYWJsZXMsIGFsb25nIHdpdGggdGhlaXIgdmFsdWVzIHdpbGwgYmUgc2hvd24uCis8L1BhcmE+CisKKzxQYXJhPgorQSBjYWxsIHRvIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2hvdyZsb3diYXI7aW5mbzwvTGl0ZXJhbD4gaXMgYWxzbyBtYWRlIC0gPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93Jmxvd2JhcjtpbmZvPC9MaXRlcmFsPiB3aWxsIHByb3ZpZGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+Z2VuZXJhbCBzdGF0aXN0aWNzPC9MaXRlcmFsPiBvbiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93Jmxvd2Jhcjt3aW5kb3c8L0xpdGVyYWw+LCBzdWNoIGFzIHRoZSBjdXJyZW50CitibG9jaywgY3VycmVudCB0eXBlLCBjdXJyZW50IG9mZnNldCBhbmQgY3VycmVudCBwYWdlLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnBndXA8L0xpdGVyYWw+IGFuZCA8TGl0ZXJhbCByZW1hcD0idHQiPnBnZG48L0xpdGVyYWw+IGdlbmVyYWwgY29tbWFuZHMganVzdCB1cGRhdGUgdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPnNob3cmbG93YmFyO3BhZCZsb3diYXI7aW5mbzwvTGl0ZXJhbD4gZ2xvYmFsIHZhcmlhYmxlIC0gV2UganVzdCBpbmNyZW1lbnQKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c2hvdyZsb3diYXI7cGFkJmxvd2JhcjtpbmZvLmxpbmU8L0xpdGVyYWw+IHdpdGggdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgc2NyZWVuIC0KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c2hvdyZsb3diYXI7cGFkJmxvd2JhcjtpbmZvLmRpc3BsYXkmbG93YmFyO2xpbmVzPC9MaXRlcmFsPiwgd2hpY2ggd2FzIGluaXRpYWxpemVkIGluCis8TGl0ZXJhbCByZW1hcD0idHQiPmluaXQmbG93YmFyO3dpbmRvd3M8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+Q2hhbmdpbmcgZGF0YTwvVGl0bGU+CisKKzxQYXJhPgorRGF0YSBjaGFuZ2UgaXMgZG9uZSBpbiBtZW1vcnkgb25seS4gQW4gdXBkYXRlIHRvIHRoZSBkaXNrIGlmIGZvbGxvd2VkIGJ5IGFuCitleHBsaWNpdCA8TGl0ZXJhbCByZW1hcD0idHQiPndyaXRlZGF0YTwvTGl0ZXJhbD4gY29tbWFuZCB0byB0aGUgZGlzay4gVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+d3JpdGUmbG93YmFyO2RhdGE8L0xpdGVyYWw+CitmdW5jdGlvbiBzaW1wbGUgY2FsbHMgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+d3JpdGUmbG93YmFyO3R5cGUmbG93YmFyO2RhdGE8L0xpdGVyYWw+IGZ1bmN0aW9uLCBvdXRsaW5lZCBlYXJsaWVyLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNldDwvTGl0ZXJhbD4gY29tbWFuZCBpcyB1c2VkIGZvciBjaGFuZ2luZyB0aGUgZGF0YS4KKzwvUGFyYT4KKworPFBhcmE+CitJZiB0aGVyZSBpcyBubyBjdXJyZW50IHR5cGUsIGNvbnRyb2wgaXMgcGFzc2VkIHRvIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmhleCZsb3diYXI7c2V0PC9MaXRlcmFsPiBmdW5jdGlvbiwKK3doaWNoIHRyZWF0cyB0aGUgZGF0YSBhcyBhIGJsb2NrIG9mIGJ5dGVzIGFuZCB1c2VzIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij50eXBlJmxvd2JhcjtkYXRhLm9mZnNldCZsb3diYXI7aW4mbG93YmFyO2Jsb2NrPC9MaXRlcmFsPiB2YXJpYWJsZSB0byB3cml0ZSB0aGUgbmV3IHRleHQgb3IgaGV4IHN0cmluZwordG8gdGhlIGNvcnJlY3QgcGxhY2UgaW4gdGhlIGJsb2NrLgorPC9QYXJhPgorCis8UGFyYT4KK0lmIGEgY3VycmVudCB0eXBlIGlzIGRlZmluZWQsIHRoZSByZXF1ZXN0ZWQgdmFyaWFibGUgaXMgc2VhcmNoZWQgaW4gdGhlCitjdXJyZW50IG9iamVjdCwgYW5kIHRoZSBkZXNpcmVkIG5ldyB2YWx1ZWQgaXMgZW50ZXJlZC4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5lbmFibGV3cml0ZTwvTGl0ZXJhbD4gY29tbWFuZHMganVzdCBzZXRzIHRoZSBnbG9iYWwgdmFyaWFibGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+d3JpdGUmbG93YmFyO2FjY2VzczwvTGl0ZXJhbD4gdG8gPExpdGVyYWwgcmVtYXA9InR0Ij4xPC9MaXRlcmFsPiBhbmQgcmUtb3BlbnMgdGhlIGZpbGVzeXN0ZW0gaW4gcmVhZC13cml0ZQorbW9kZSwgaWYgcG9zc2libGUuCis8L1BhcmE+CisKKzxQYXJhPgorSWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBOVUxMLCBhIGhleC1tb2RlIGlzIGFzc3VtZWQgLSBUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5uZXh0PC9MaXRlcmFsPiBhbmQKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cHJldjwvTGl0ZXJhbD4gY29tbWFuZHMgd2lsbCBqdXN0IHVwZGF0ZSA8TGl0ZXJhbCByZW1hcD0idHQiPnR5cGUmbG93YmFyO2RhdGEub2Zmc2V0Jmxvd2JhcjtpbiZsb3diYXI7YmxvY2s8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8UGFyYT4KK0lmIHRoZSBjdXJyZW50IHR5cGUgaXMgbm90IE5VTEwsIHRoZSBUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5uZXh0PC9MaXRlcmFsPiBhbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5wcmV2PC9MaXRlcmFsPiBjb21tYW5kCithcmUgdXN1YWxseSBvdmVycmlkZGVuIGFueXdheS4gSWYgdGhleSBhcmUgbm90IG92ZXJyaWRkZW4sIGl0IHdpbGwgYmUgYXNzdW1lZAordGhhdCB0aGUgdXNlciBpcyBlZGl0aW5nIGFuIGFycmF5IG9mIHN1Y2ggb2JqZWN0cywgYW5kIHRoZXkgd2lsbCBqdXN0IHBhc3MKK3RvIHRoZSBuZXh0IC8gcHJldiBlbGVtZW50IGJ5IGRpc3BhdGNoaW5nIHRvIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0b2Zmc2V0PC9MaXRlcmFsPiB1c2luZyB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0b2Zmc2V0IHR5cGUgKyAvIC0gWDwvTGl0ZXJhbD4gc3ludGF4LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+VGhlIGV4dDIgZ2VuZXJhbCBjb21tYW5kczwvVGl0bGU+CisKKzxQYXJhPgorVGhlIGV4dDIgZ2VuZXJhbCBjb21tYW5kcyBhcmUgY29udGFpbmVkIGluIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDImbG93YmFyO2dlbmVyYWwmbG93YmFyO2NvbW1hbmRzPC9MaXRlcmFsPgorZ2xvYmFsIHZhcmlhYmxlICh3aGljaCBpcyBvZiB0eXBlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0IHN0cnVjdCZsb3diYXI7Y29tbWFuZHM8L0xpdGVyYWw+KS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgaGFuZGxpbmcgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGUgc291cmNlIGZpbGUgPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyJmxvd2Jhcjtjb20uYzwvTGl0ZXJhbD4uCitJIHdpbGwgaW5jbHVkZSB0aGUgZW50aXJlIHNvdXJjZSBjb2RlIHNpbmNlIGl0IGlzIHJlbGF0aXZlbHkgc2hvcnQuCis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5UaGUgc3VwZXIgY29tbWFuZDwvVGl0bGU+CisKKzxQYXJhPgorVGhlIHN1cGVyIGNvbW1hbmQganVzdCAiYnJpbmdzIHRoZSB1c2VyIiB0byB0aGUgbWFpbiBzdXBlcmJsb2NrIGFuZCBzZXQgdGhlCit0eXBlIHRvIGV4dDImbG93YmFyO3N1cGVyJmxvd2JhcjtibG9jay4gVGhlIGltcGxlbWVudGF0aW9uIGlzIHRyaXZpYWw6Cis8L1BhcmE+CisKKzxQYXJhPgorCis8UHJvZ3JhbUxpc3Rpbmc+Cit2b2lkIHR5cGVfZXh0Ml9fX3N1cGVyIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwljaGFyIGJ1ZmZlciBbODBdOworCQorCXN1cGVyX2luZm8uY29weV9udW09MDsKKwlzcHJpbnRmIChidWZmZXIsInNldG9mZnNldCAlbGQiLGZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2tfb2Zmc2V0KTtkaXNwYXRjaCAoYnVmZmVyKTsKKwlzcHJpbnRmIChidWZmZXIsInNldHR5cGUgZXh0Ml9zdXBlcl9ibG9jayIpO2Rpc3BhdGNoIChidWZmZXIpOworfQorPC9Qcm9ncmFtTGlzdGluZz4KKworSXQgaW52b2x2ZXMgb25seSBzZXR0aW5nIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmNvcHkmbG93YmFyO251bTwvTGl0ZXJhbD4gdmFyaWFibGUgdG8gaW5kaWNhdGUgdGhlIG1haW4KK2NvcHksIGRpc3BhdGNoaW5nIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5zZXRvZmZzZXQ8L0xpdGVyYWw+IGNvbW1hbmQgdG8gcmVhY2ggdGhlIHN1cGVyYmxvY2ssIGFuZAorZGlzcGF0Y2hpbmcgYSA8TGl0ZXJhbCByZW1hcD0idHQiPnNldHR5cGU8L0xpdGVyYWw+IHRvIGVuYWJsZSB0aGUgc3VwZXJibG9jayBzcGVjaWZpYyBjb21tYW5kcy4KK1RoaXMgbGFzdCBjb21tYW5kIHdpbGwgYWxzbyBjYWxsIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNob3c8L0xpdGVyYWw+IGNvbW1hbmQgb2YgdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDImbG93YmFyO3N1cGVyJmxvd2JhcjtibG9jazwvTGl0ZXJhbD4gdHlwZSwgdGhyb3VnaCBkaXNwYXRjaGluZyBhdCB0aGUgZ2VuZXJhbCBjb21tYW5kCis8TGl0ZXJhbCByZW1hcD0idHQiPnNldHR5cGU8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIGdyb3VwIGNvbW1hbmQ8L1RpdGxlPgorCis8UGFyYT4KK1RoZSBncm91cCBjb21tYW5kIHdpbGwgYnJpbmcgdGhlIHVzZXIgdG8gdGhlIHNwZWNpZmllZCBncm91cCBkZXNjcmlwdG9yIGluCit0aGUgbWFpbiBjb3B5IG9mIHRoZSBncm91cCBkZXNjcmlwdG9ycy4gVGhlIHR5cGUgd2lsbCBiZSBzZXQgdG8KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MiZsb3diYXI7Z3JvdXAmbG93YmFyO2Rlc2M8L0xpdGVyYWw+OgorCis8UHJvZ3JhbUxpc3Rpbmc+Cit2b2lkIHR5cGVfZXh0Ml9fX2dyb3VwIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlsb25nIGdyb3VwX251bT0wOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKwkKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQlncm91cF9udW09YXRvbCAoYnVmZmVyKTsKKwl9CisKKwlncm91cF9pbmZvLmNvcHlfbnVtPTA7Z3JvdXBfaW5mby5ncm91cF9udW09MDsKKwlzcHJpbnRmIChidWZmZXIsInNldG9mZnNldCAlbGQiLGZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQpO2Rpc3BhdGNoIChidWZmZXIpOworCXNwcmludGYgKGJ1ZmZlciwic2V0dHlwZSBleHQyX2dyb3VwX2Rlc2MiKTtkaXNwYXRjaCAoYnVmZmVyKTsKKwlzcHJpbnRmIChidWZmZXIsImVudHJ5ICVsZCIsZ3JvdXBfbnVtKTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKzwvUHJvZ3JhbUxpc3Rpbmc+CisKK1RoZSBpbXBsZW1lbnRhdGlvbiBpcyBhcyB0cml2aWFsIGFzIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnN1cGVyPC9MaXRlcmFsPiBpbXBsZW1lbnRhdGlvbi4gTm90ZQordGhlIHVzZSBvZiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5lbnRyeTwvTGl0ZXJhbD4gY29tbWFuZCwgd2hpY2ggaXMgYSBjb21tYW5kIG9mIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyJmxvd2Jhcjtncm91cCZsb3diYXI7ZGVzYzwvTGl0ZXJhbD4gb2JqZWN0LCB0byBwYXNzIHRvIHRoZSBjb3JyZWN0IGdyb3VwIGRlc2NyaXB0b3IuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5UaGUgY2QgY29tbWFuZDwvVGl0bGU+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Y2Q8L0xpdGVyYWw+IGNvbW1hbmQgcGVyZm9ybXMgdGhlIHVzdWFsIGNkIGZ1bmN0aW9uLiBUaGUgcGF0aCB0byB0aGUgZ2xvYmFsCitjZCBjb21tYW5kIGlzIGEgcGF0aCBmcm9tIDxMaXRlcmFsIHJlbWFwPSJ0dCI+LzwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5UaGlzIGlzIG9uZSBvZiB0aGUgYmVzdCBleGFtcGxlcyBvZiB0aGUgcG93ZXIgb2YgdGhlIG9iamVjdCBvcmllbnRlZAorZGVzaWduIGFuZCBvZiB0aGUgZGlzcGF0Y2hpbmcgbWVjaGFuaXNtLiBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsaWNhdGVkLCB5ZXQgdGhlCitpbXBsZW1lbnRhdGlvbiBpcyBzdXJwcmlzaW5nbHkgc2hvcnQhPC9MaXRlcmFsPgorPC9QYXJhPgorCis8UGFyYT4KKworPFByb2dyYW1MaXN0aW5nPgordm9pZCB0eXBlX2V4dDJfX19jZCAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJY2hhciB0ZW1wIFs4MF0sYnVmZmVyIFs4MF0sKnB0cjsKKwkKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHI9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTm8gYXJndW1lbnQgc3BlY2lmaWVkXG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkKKwlpZiAoYnVmZmVyIFswXSAhPSAnLycpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gVXNlIGEgZnVsbCBwYXRobmFtZSAoYmVnaW4gd2l0aCAnLycpXG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCisJZGlzcGF0Y2ggKCJzdXBlciIpO2Rpc3BhdGNoICgiZ3JvdXAiKTtkaXNwYXRjaCAoImlub2RlIik7CisJZGlzcGF0Y2ggKCJuZXh0Iik7ZGlzcGF0Y2ggKCJkaXIiKTsKKwlpZiAoYnVmZmVyIFsxXSAhPSAwKSB7CisJCXNwcmludGYgKHRlbXAsImNkICVzIixidWZmZXIrMSk7ZGlzcGF0Y2ggKHRlbXApOworCX0KK30KKzwvUHJvZ3JhbUxpc3Rpbmc+CisKKzwvUGFyYT4KKworPFBhcmE+CitOb3RlIHRoZSBudW1iZXIgb2YgdGhlIGRpc3BhdGNoIGNhbGxzISAKKzwvUGFyYT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPnN1cGVyPC9MaXRlcmFsPiBpcyB1c2VkIHRvIGdldCB0byB0aGUgc3VwZXJibG9jay4gPExpdGVyYWwgcmVtYXA9InR0Ij5ncm91cDwvTGl0ZXJhbD4gdG8gZ2V0IHRvIHRoZQorZmlyc3QgZ3JvdXAgZGVzY3JpcHRvci4gPExpdGVyYWwgcmVtYXA9InR0Ij5pbm9kZTwvTGl0ZXJhbD4gYnJpbmdzIHVzIHRvIHRoZSBmaXJzdCBpbm9kZSAtIFRoZSBiYWQKK2Jsb2NrcyBpbm9kZS4gQSA8TGl0ZXJhbCByZW1hcD0idHQiPm5leHQ8L0xpdGVyYWw+IGlzIGNvbW1hbmQgdG8gcGFzcyB0byB0aGUgcm9vdCBkaXJlY3RvcnkgaW5vZGUsCithIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlyPC9MaXRlcmFsPiBjb21tYW5kICJlbnRlcnMiIHRoZSBkaXJlY3RvcnksIGFuZCB0aGVuIHdlIGxldCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5vYmplY3QKK3NwZWNpZmljIGNkIGNvbW1hbmQ8L0xpdGVyYWw+IHRvIHRha2UgdXMgZnJvbSB0aGVyZSAoVGhlIG9iamVjdCBpcyA8TGl0ZXJhbCByZW1hcD0idHQiPmRpcjwvTGl0ZXJhbD4sIHNvCit0aGF0IDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlzcGF0Y2g8L0xpdGVyYWw+IHdpbGwgY2FsbCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5jZDwvTGl0ZXJhbD4gY29tbWFuZCBvZiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXI8L0xpdGVyYWw+IHR5cGUpLgorTm90ZSB0aGF0IGEgc3ltYm9saWMgbGluayBmb2xsb3dpbmcgY291bGQgYnJpbmcgdXMgYmFjayB0byB0aGUgcm9vdCBkaXJlY3RvcnksCit0aHVzIHRoZSBpbm5vY2VudCBjYWxscyBhYm92ZSB0cmVhdHMgbmljZWx5IHN1Y2ggYSByZWN1cnNpdmUgY2FzZSEKKzwvUGFyYT4KKworPFBhcmE+CitJIGZlZWwgdGhhdCB0aGUgYWJvdmUgaXMgPExpdGVyYWwgcmVtYXA9InR0Ij5pbnR1aXRpdmU8L0xpdGVyYWw+IC0gSSB3YXMgZXhwcmVzc2luZyBteXNlbGYgImluIHRoZQorbGFuZ3VhZ2UiIG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0gLSAoR28gdG8gdGhlIGlub2RlLCBldGMpLCBhbmQgdGhlIGNvZGUgd2FzCit3cml0dGVuIGV4YWN0bHkgaW4gdGhpcyBzcGlyaXQhCis8L1BhcmE+CisKKzxQYXJhPgorSSBjYW4gd3JpdGUgbW9yZSBhdCB0aGlzIHBvaW50LCBidXQgSSBndWVzcyBJIGFtIGFscmVhZHkgYSBiaXQgY2FycmllZAorYXdheSB3aXRoIHRoZSBzZWxmIGNvbXBsaW1lbnRzIDotKQorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+VGhlIHN1cGVyYmxvY2s8L1RpdGxlPgorCis8UGFyYT4KK1RoaXMgc2VjdGlvbiBkZXRhaWxzIHRoZSBoYW5kbGluZyBvZiB0aGUgc3VwZXJibG9jay4KKzwvUGFyYT4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBzdXBlcmJsb2NrIHZhcmlhYmxlczwvVGl0bGU+CisKKzxQYXJhPgorVGhlIHN1cGVyYmxvY2sgb2JqZWN0IGlzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MiZsb3diYXI7c3VwZXImbG93YmFyO2Jsb2NrPC9MaXRlcmFsPi4gVGhlIGRlZmluaXRpb24gaXMganVzdAordGFrZW4gZnJvbSB0aGUga2VybmVsIGV4dDIgbWFpbiBpbmNsdWRlIGZpbGUgLSAvdXNyL2luY2x1ZGUvbGludXgvZXh0MiZsb3diYXI7ZnMuaC4KKzxGT09UTk9URT4KKworPFBhcmE+CitUaG9zZSBsaW5lcyBvZiBzb3VyY2UgYXJlIGNvcHlyaWdodGVkIGJ5IDxMaXRlcmFsIHJlbWFwPSJ0dCI+UmVteSBDYXJkPC9MaXRlcmFsPiAtIFRoZSBhdXRob3Igb2YgdGhlCitleHQyIGZpbGVzeXN0ZW0sIGFuZCBieSA8TGl0ZXJhbCByZW1hcD0idHQiPkxpbnVzIFRvcnZhbGRzPC9MaXRlcmFsPiAtIFRoZSBmaXJzdCBhdXRob3Igb2YgdGhlIExpbnV4CitvcGVyYXRpbmcgc3lzdGVtLiBQbGVhc2UgY3Jvc3MgcmVmZXJlbmNlIHRoZSBzZWN0aW9uIEFja25vd2xlZGdtZW50cyBmb3IgdGhlCitmdWxsIGNvcHlyaWdodC4KKzwvUGFyYT4KKworPC9GT09UTk9URT4KKworCisKKzxQcm9ncmFtTGlzdGluZz4KK3N0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHsKKwlfX3UzMglzX2lub2Rlc19jb3VudDsJCS8qIElub2RlcyBjb3VudCAqLworCV9fdTMyCXNfYmxvY2tzX2NvdW50OwkJLyogQmxvY2tzIGNvdW50ICovCisJX191MzIJc19yX2Jsb2Nrc19jb3VudDsJLyogUmVzZXJ2ZWQgYmxvY2tzIGNvdW50ICovCisJX191MzIJc19mcmVlX2Jsb2Nrc19jb3VudDsJLyogRnJlZSBibG9ja3MgY291bnQgKi8KKwlfX3UzMglzX2ZyZWVfaW5vZGVzX2NvdW50OwkvKiBGcmVlIGlub2RlcyBjb3VudCAqLworCV9fdTMyCXNfZmlyc3RfZGF0YV9ibG9jazsJLyogRmlyc3QgRGF0YSBCbG9jayAqLworCV9fdTMyCXNfbG9nX2Jsb2NrX3NpemU7CS8qIEJsb2NrIHNpemUgKi8KKwlfX3MzMglzX2xvZ19mcmFnX3NpemU7CS8qIEZyYWdtZW50IHNpemUgKi8KKwlfX3UzMglzX2Jsb2Nrc19wZXJfZ3JvdXA7CS8qICMgQmxvY2tzIHBlciBncm91cCAqLworCV9fdTMyCXNfZnJhZ3NfcGVyX2dyb3VwOwkvKiAjIEZyYWdtZW50cyBwZXIgZ3JvdXAgKi8KKwlfX3UzMglzX2lub2Rlc19wZXJfZ3JvdXA7CS8qICMgSW5vZGVzIHBlciBncm91cCAqLworCV9fdTMyCXNfbXRpbWU7CQkvKiBNb3VudCB0aW1lICovCisJX191MzIJc193dGltZTsJCS8qIFdyaXRlIHRpbWUgKi8KKwlfX3UxNglzX21udF9jb3VudDsJCS8qIE1vdW50IGNvdW50ICovCisJX19zMTYJc19tYXhfbW50X2NvdW50OwkvKiBNYXhpbWFsIG1vdW50IGNvdW50ICovCisJX191MTYJc19tYWdpYzsJCS8qIE1hZ2ljIHNpZ25hdHVyZSAqLworCV9fdTE2CXNfc3RhdGU7CQkvKiBGaWxlIHN5c3RlbSBzdGF0ZSAqLworCV9fdTE2CXNfZXJyb3JzOwkJLyogQmVoYXZpb3Igd2hlbiBkZXRlY3RpbmcgZXJyb3JzICovCisJX191MTYJc19wYWQ7CisJX191MzIJc19sYXN0Y2hlY2s7CQkvKiB0aW1lIG9mIGxhc3QgY2hlY2sgKi8KKwlfX3UzMglzX2NoZWNraW50ZXJ2YWw7CS8qIG1heC4gdGltZSBiZXR3ZWVuIGNoZWNrcyAqLworCV9fdTMyCXNfY3JlYXRvcl9vczsJCS8qIE9TICovCisJX191MzIJc19yZXZfbGV2ZWw7CQkvKiBSZXZpc2lvbiBsZXZlbCAqLworCV9fdTE2CXNfZGVmX3Jlc3VpZDsJCS8qIERlZmF1bHQgdWlkIGZvciByZXNlcnZlZCBibG9ja3MgKi8KKwlfX3UxNglzX2RlZl9yZXNnaWQ7CQkvKiBEZWZhdWx0IGdpZCBmb3IgcmVzZXJ2ZWQgYmxvY2tzICovCisJX191MzIJc19yZXNlcnZlZFswXTsJCS8qIFBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KKwlfX3UzMglzX3Jlc2VydmVkWzFdOwkJLyogUGFkZGluZyB0byB0aGUgZW5kIG9mIHRoZSBibG9jayAqLworCS4KKwkuCisJLgorCV9fdTMyCXNfcmVzZXJ2ZWRbMjM0XTsJLyogUGFkZGluZyB0byB0aGUgZW5kIG9mIHRoZSBibG9jayAqLworfTsKKzwvUHJvZ3JhbUxpc3Rpbmc+CisKKzwvUGFyYT4KKworPFBhcmE+CitOb3RlIHRoYXQgSSA8TGl0ZXJhbCByZW1hcD0idHQiPmV4cGFuZGVkPC9MaXRlcmFsPiB0aGUgYXJyYXkgZHVlIHRvIG15IHByaW1pdGl2ZSBwYXJzZXIKK2ltcGxlbWVudGF0aW9uLiBUaGUgdmFyaW91cyBmaWVsZHMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij50ZWNobmljYWwKK2RvY3VtZW50PC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBzdXBlcmJsb2NrIGNvbW1hbmRzPC9UaXRsZT4KKworPFBhcmE+CitUaGlzIHNlY3Rpb24gZXhwbGFpbnMgdGhlIGNvbW1hbmRzIGF2YWlsYWJsZSBpbiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyJmxvd2JhcjtzdXBlciZsb3diYXI7YmxvY2s8L0xpdGVyYWw+Cit0eXBlLiBUaGV5IGFsbCBhcHBlYXIgaW4gPExpdGVyYWwgcmVtYXA9InR0Ij5zdXBlciZsb3diYXI7Y29tLmM8L0xpdGVyYWw+Cis8L1BhcmE+CisKKzxTZWN0Mz4KKzxUaXRsZT5UaGUgc2hvdyBjb21tYW5kPC9UaXRsZT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93PC9MaXRlcmFsPiBjb21tYW5kIGlzIG92ZXJyaWRkZW4gaGVyZSBpbiBvcmRlciB0byBwcm92aWRlIG1vcmUKK2luZm9ybWF0aW9uIHRoYW4ganVzdCB0aGUgbGlzdCBvZiB2YXJpYWJsZXMuIEEgPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93PC9MaXRlcmFsPiBjb21tYW5kIHdpbGwgZW5kCit1cCBpbiBjYWxsaW5nIDxMaXRlcmFsIHJlbWFwPSJ0dCI+dHlwZSZsb3diYXI7c3VwZXImbG93YmFyO2Jsb2NrJmxvd2JhcjsmbG93YmFyOyZsb3diYXI7c2hvdzwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGZpcnN0IHRoaW5nIHRoYXQgd2UgZG8gaXMgY2FsbGluZyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5nZW5lcmFsIHNob3cgY29tbWFuZDwvTGl0ZXJhbD4gaW4KK29yZGVyIHRvIGRpc3BsYXkgdGhlIGxpc3Qgb2YgdmFyaWFibGVzLgorPC9QYXJhPgorCis8UGFyYT4KK1dlIHRoZW4gYWRkIHNvbWUgaW50ZXJwcmV0YXRpb24gdG8gdGhlIHZhcmlvdXMgbGluZXMgdG8gbWFrZSB0aGUgZGF0YQorc29tZXdoYXQgbW9yZSBpbnR1aXRpdmUgKEV4cGFuc2lvbiBvZiB0aGUgdGltZSB2YXJpYWJsZXMgYW5kIHRoZSBjcmVhdG9yCitvcGVyYXRpbmcgc3lzdGVtIGNvZGUsIGZvciBleGFtcGxlKS4KKzwvUGFyYT4KKworPFBhcmE+CitXZSBhbHNvIGRpc3BsYXkgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YmFja3VwIGNvcHkgbnVtYmVyPC9MaXRlcmFsPiBvZiB0aGUgc3VwZXJibG9jayBpbiB0aGUgc3RhdHVzCit3aW5kb3cuIFRoaXMgY29weSBudW1iZXIgaXMgc2F2ZWQgaW4gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3VwZXImbG93YmFyO2luZm88L0xpdGVyYWw+IGdsb2JhbCB2YXJpYWJsZSAtCis8TGl0ZXJhbCByZW1hcD0idHQiPnN1cGVyJmxvd2JhcjtpbmZvLmNvcHkmbG93YmFyO251bTwvTGl0ZXJhbD4uIEN1cnJlbnRseSwgdGhpcyBpcyB0aGUgb25seSB2YXJpYWJsZSB0aGVyZSAuLi4KK2J1dCB0aGlzIHR5cGUgb2YgaW50ZXJuYWwgdmFyaWFibGUgc2F2aW5nIGlzIHR5cGljYWwgdGhyb3VnaCBteQoraW1wbGVtZW50YXRpb24uCis8L1BhcmE+CisKKzwvU2VjdDM+CisKKzxTZWN0Mz4KKzxUaXRsZT5UaGUgYmFja3VwIGNvcGllcyBoYW5kbGluZyBjb21tYW5kczwvVGl0bGU+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Y3VycmVudCBjb3B5IG51bWJlcjwvTGl0ZXJhbD4gaXMgYXZhaWxhYmxlIGluIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3VwZXImbG93YmFyO2luZm8uY29weSZsb3diYXI7bnVtPC9MaXRlcmFsPi4gSXQKK3dhcyBpbml0aWFsaXplZCBpbiB0aGUgZXh0MiBjb21tYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3VwZXI8L0xpdGVyYWw+LCBhbmQgaXMgdXNlZCBieSB0aGUgdmFyaW91cworc3VwZXJibG9jayByb3V0aW5lcy4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5nb2NvcHk8L0xpdGVyYWw+IHJvdXRpbmUgd2lsbCBwYXNzIHRvIGFub3RoZXIgY29weSBvZiB0aGUgc3VwZXJibG9jay4gVGhlCituZXcgZGV2aWNlIG9mZnNldCB3aWxsIGJlIGNvbXB1dGVkIHdpdGggdGhlIGFpZCBvZiB0aGUgdmFyaWFibGVzIGluIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlJmxvd2JhcjtzeXN0ZW0mbG93YmFyO2luZm88L0xpdGVyYWw+IHN0cnVjdHVyZS4gVGhlbiB0aGUgcm91dGluZSB3aWxsIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlzcGF0Y2g8L0xpdGVyYWw+IHRvCit0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zZXRvZmZzZXQ8L0xpdGVyYWw+IGFuZCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93PC9MaXRlcmFsPiByb3V0aW5lcy4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zZXRhY3RpdmVjb3B5PC9MaXRlcmFsPiByb3V0aW5lIHdpbGwganVzdCBzYXZlIHRoZSBjdXJyZW50IHN1cGVyYmxvY2sgZGF0YQoraW4gYSB0ZW1wb3JhcnkgdmFyaWFibGUgb2YgdHlwZSA8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDImbG93YmFyO3N1cGVyJmxvd2JhcjtibG9jazwvTGl0ZXJhbD4sIGFuZCB3aWxsIGRpc3BhdGNoCis8TGl0ZXJhbCByZW1hcD0idHQiPmdvY29weSAwPC9MaXRlcmFsPiB0byBwYXNzIHRvIHRoZSBtYWluIHN1cGVyYmxvY2suIFRoZW4gaXQgd2lsbCBwbGFjZSB0aGUgc2F2ZWQKK2RhdGEgaW4gcGxhY2Ugb2YgdGhlIGFjdHVhbCBkYXRhLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBhYm92ZSB0d28gY29tbWFuZHMgY2FuIGJlIHVzZWQgaWYgdGhlIG1haW4gc3VwZXJibG9jayBpcyBjb3JydXB0ZWQuCis8L1BhcmE+CisKKzwvU2VjdDM+CisKKzwvU2VjdDI+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5UaGUgZ3JvdXAgZGVzY3JpcHRvcnM8L1RpdGxlPgorCis8UGFyYT4KK1RoZSBncm91cCBkZXNjcmlwdG9ycyBoYW5kbGluZyBtZWNoYW5pc20gYWxsb3dzIHRoZSB1c2VyIHRvIHRha2UgYSB0b3VyIGluCit0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgdGFibGUsIHN0b3BwaW5nIGF0IGVhY2ggcG9pbnQsIGFuZCBleGFtaW5pbmcgdGhlCityZWxldmFudCBpbm9kZSB0YWJsZSwgYmxvY2sgYWxsb2NhdGlvbiBtYXAgb3IgaW5vZGUgYWxsb2NhdGlvbiBtYXAgdGhyb3VnaAorZGlzcGF0Y2hpbmcgdG8gdGhlIHJlbGV2YW50IG9iamVjdHMuCis8L1BhcmE+CisKKzxQYXJhPgorU29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgaXMgYXZhaWxhYmxlIGluIHRoZSBnbG9iYWwKK3ZhcmlhYmxlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Z3JvdXAmbG93YmFyO2luZm88L0xpdGVyYWw+LCB3aGljaCBpcyBvZiB0eXBlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0Jmxvd2Jhcjtncm91cCZsb3diYXI7aW5mbzwvTGl0ZXJhbD46Cis8L1BhcmE+CisKKzxQYXJhPgorCis8UHJvZ3JhbUxpc3Rpbmc+CitzdHJ1Y3Qgc3RydWN0X2dyb3VwX2luZm8geworCXVuc2lnbmVkIGxvbmcgY29weV9udW07CisJdW5zaWduZWQgbG9uZyBncm91cF9udW07Cit9OworPC9Qcm9ncmFtTGlzdGluZz4KKworPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+Z3JvdXAmbG93YmFyO251bTwvTGl0ZXJhbD4gaXMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGRlc2NyaXB0b3IgaW4gdGhlIHRhYmxlLgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+Y29weSZsb3diYXI7bnVtPC9MaXRlcmFsPiBpcyB0aGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50IGJhY2t1cCBjb3B5LgorPC9QYXJhPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIGdyb3VwIGRlc2NyaXB0b3IncyB2YXJpYWJsZXM8L1RpdGxlPgorCis8UGFyYT4KKworPFByb2dyYW1MaXN0aW5nPgorc3RydWN0IGV4dDJfZ3JvdXBfZGVzYworeworCV9fdTMyCWJnX2Jsb2NrX2JpdG1hcDsJCS8qIEJsb2NrcyBiaXRtYXAgYmxvY2sgKi8KKwlfX3UzMgliZ19pbm9kZV9iaXRtYXA7CQkvKiBJbm9kZXMgYml0bWFwIGJsb2NrICovCisJX191MzIJYmdfaW5vZGVfdGFibGU7CQkJLyogSW5vZGVzIHRhYmxlIGJsb2NrICovCisJX191MTYJYmdfZnJlZV9ibG9ja3NfY291bnQ7CQkvKiBGcmVlIGJsb2NrcyBjb3VudCAqLworCV9fdTE2CWJnX2ZyZWVfaW5vZGVzX2NvdW50OwkJLyogRnJlZSBpbm9kZXMgY291bnQgKi8KKwlfX3UxNgliZ191c2VkX2RpcnNfY291bnQ7CQkvKiBEaXJlY3RvcmllcyBjb3VudCAqLworCV9fdTE2CWJnX3BhZDsKKwlfX3UzMgliZ19yZXNlcnZlZFszXTsKK307Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGZpcnN0IHRocmVlIHZhcmlhYmxlcyBhcmUgdXNlZCB0byBwcm92aWRlIHRoZSBsaW5rcyB0byB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+YmxvY2tiaXRtYXAsIGlub2RlYml0bWFwIGFuZCBpbm9kZTwvTGl0ZXJhbD4gb2JqZWN0cy4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPk1vdmVtZW50IGluIHRoZSB0YWJsZTwvVGl0bGU+CisKKzxQYXJhPgorTW92ZW1lbnQgaW4gdGhlIGdyb3VwIGRlc2NyaXB0b3JzIHRhYmxlIGlzIGRvbmUgdXNpbmcgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bmV4dCwgcHJldiBhbmQKK2VudHJ5PC9MaXRlcmFsPiBjb21tYW5kcy4gTm90ZSB0aGF0IHRoZSBmaXJzdCB0d28gY29tbWFuZHMgPExpdGVyYWwgcmVtYXA9InR0Ij5vdmVycmlkZTwvTGl0ZXJhbD4gdGhlCitnZW5lcmFsIGNvbW1hbmRzIG9mIHRoZSBzYW1lIG5hbWUuIFRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPm5leHQgYW5kIHByZXY8L0xpdGVyYWw+IGNvbW1hbmQgYXJlIGp1c3QKK2NhbGxpbmcgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZW50cnk8L0xpdGVyYWw+IGZ1bmN0aW9uIHRvIGRvIHRoZSBqb2IuIEkgd2lsbCBzaG93IDxMaXRlcmFsIHJlbWFwPSJ0dCI+bmV4dDwvTGl0ZXJhbD4sCitmb3IgZXhhbXBsZToKKzwvUGFyYT4KKworPFBhcmE+CisKKzxQcm9ncmFtTGlzdGluZz4KK3ZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19uZXh0IChjaGFyICpjb21tYW5kX2xpbmUpCisgCit7CisJbG9uZyBlbnRyeV9vZmZzZXQ9MTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisJCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCWlmICgqcHRyIT0wKSB7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkJZW50cnlfb2Zmc2V0PWF0b2wgKGJ1ZmZlcik7CisJfQorCisJc3ByaW50ZiAoYnVmZmVyLCJlbnRyeSAlbGQiLGdyb3VwX2luZm8uZ3JvdXBfbnVtK2VudHJ5X29mZnNldCk7CisJZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9Cis8L1Byb2dyYW1MaXN0aW5nPgorCitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5lbnRyeTwvTGl0ZXJhbD4gZnVuY3Rpb24gaXMgYWxzbyBzaW1wbGUgLSBJdCBqdXN0IGNhbGN1bGF0ZXMgdGhlIG9mZnNldAordXNpbmcgdGhlIGluZm9ybWF0aW9uIGluIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Z3JvdXAmbG93YmFyO2luZm88L0xpdGVyYWw+IGFuZCBpbiA8TGl0ZXJhbCByZW1hcD0idHQiPmZpbGUmbG93YmFyO3N5c3RlbSZsb3diYXI7aW5mbzwvTGl0ZXJhbD4sCithbmQgdXNlcyB0aGUgdXN1YWwgPExpdGVyYWwgcmVtYXA9InR0Ij5zZXRvZmZzZXQgLyBzaG93PC9MaXRlcmFsPiBwYWlyLiAKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBzaG93IGNvbW1hbmQ8L1RpdGxlPgorCis8UGFyYT4KK0FzIHVzdWFsLCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93PC9MaXRlcmFsPiBjb21tYW5kIGlzIG92ZXJyaWRkZW4uIFRoZSBpbXBsZW1lbnRhdGlvbiBpcworc2ltaWxhciB0byB0aGUgc3VwZXJibG9jaydzIHNob3cgaW1wbGVtZW50YXRpb24gLSBXZSBqdXN0IGNhbGwgdGhlIGdlbmVyYWwKK3Nob3cgY29tbWFuZCwgYW5kIGFkZCBzb21lIGluZm9ybWF0aW9uIGluIHRoZSBzdGF0dXMgd2luZG93IC0gVGhlIGNvbnRlbnRzIG9mCit0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5ncm91cCZsb3diYXI7aW5mbzwvTGl0ZXJhbD4gc3RydWN0dXJlLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+TW92aW5nIGJldHdlZW4gYmFja3VwIGNvcGllczwvVGl0bGU+CisKKzxQYXJhPgorVGhpcyBpcyBkb25lIGV4YWN0bHkgbGlrZSB0aGUgc3VwZXJibG9jayBjYXNlLiBQbGVhc2UgcmVmZXIgdG8gZXhwbGFuYXRpb24KK3RoZXJlLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+TGlua3MgdG8gdGhlIGF2YWlsYWJsZSBmcmllbmRzPC9UaXRsZT4KKworPFBhcmE+CitGcm9tIGEgZ3JvdXAgZGVzY3JpcHRvciwgb25lIHR5cGljYWxseSB3YW50cyB0byByZWFjaCBhbiA8TGl0ZXJhbCByZW1hcD0idHQiPmlub2RlPC9MaXRlcmFsPiwgb3IKK29uZSBvZiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5hbGxvY2F0aW9uIGJpdG1hcHM8L0xpdGVyYWw+LiBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5vZGUsCitibG9ja2JpdG1hcCBvciBpbm9kZWJpdG1hcDwvTGl0ZXJhbD4gY29tbWFuZHMuIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBhZ2FpbiB0cml2aWFsCistIEdldCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gdGhlIGdyb3VwIGRlc2NyaXB0b3IsIGluaXRpYWxpemUgdGhlCitzdHJ1Y3R1cmVzIG9mIHRoZSBuZXh0IHR5cGUsIGFuZCBpc3N1ZSB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zZXRvZmZzZXQgLyBzZXR0eXBlPC9MaXRlcmFsPiBwYWlyLgorPC9QYXJhPgorCis8UGFyYT4KK0ZvciBleGFtcGxlLCBoZXJlIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5ibG9ja2JpdG1hcDwvTGl0ZXJhbD4gY29tbWFuZDoKKzwvUGFyYT4KKworPFBhcmE+CisKKzxQcm9ncmFtTGlzdGluZz4KK3ZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19ibG9ja2JpdG1hcCAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG9uZyBibG9ja19iaXRtYXBfb2Zmc2V0OworCWNoYXIgYnVmZmVyIFs4MF07CisJCisJYmxvY2tfYml0bWFwX2luZm8uZW50cnlfbnVtPTA7CisJYmxvY2tfYml0bWFwX2luZm8uZ3JvdXBfbnVtPWdyb3VwX2luZm8uZ3JvdXBfbnVtOworCisJYmxvY2tfYml0bWFwX29mZnNldD10eXBlX2RhdGEudS50X2V4dDJfZ3JvdXBfZGVzYy5iZ19ibG9ja19iaXRtYXA7CisJc3ByaW50ZiAoYnVmZmVyLCJzZXRvZmZzZXQgYmxvY2sgJWxkIixibG9ja19iaXRtYXBfb2Zmc2V0KTtkaXNwYXRjaCAoYnVmZmVyKTsKKwlzcHJpbnRmIChidWZmZXIsInNldHR5cGUgYmxvY2tfYml0bWFwIik7ZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5UaGUgaW5vZGUgdGFibGU8L1RpdGxlPgorCis8UGFyYT4KK1RoZSBpbm9kZSBoYW5kbGluZyBlbmFibGVzIHRoZSB1c2VyIHRvIG1vdmUgaW4gdGhlIGlub2RlIHRhYmxlLCBlZGl0IHRoZQordmFyaW91cyBhdHRyaWJ1dGVzIG9mIHRoZSBpbm9kZSwgYW5kIGZvbGxvdyB0byB0aGUgbmV4dCBzdGFnZSAtIEEgZmlsZSBvciBhCitkaXJlY3RvcnkuCis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5UaGUgaW5vZGUgdmFyaWFibGVzPC9UaXRsZT4KKworPFBhcmE+CisKKzxQcm9ncmFtTGlzdGluZz4KK3N0cnVjdCBleHQyX2lub2RlIHsKKwlfX3UxNglpX21vZGU7CQkvKiBGaWxlIG1vZGUgKi8KKwlfX3UxNglpX3VpZDsJCS8qIE93bmVyIFVpZCAqLworCV9fdTMyCWlfc2l6ZTsJCS8qIFNpemUgaW4gYnl0ZXMgKi8KKwlfX3UzMglpX2F0aW1lOwkvKiBBY2Nlc3MgdGltZSAqLworCV9fdTMyCWlfY3RpbWU7CS8qIENyZWF0aW9uIHRpbWUgKi8KKwlfX3UzMglpX210aW1lOwkvKiBNb2RpZmljYXRpb24gdGltZSAqLworCV9fdTMyCWlfZHRpbWU7CS8qIERlbGV0aW9uIFRpbWUgKi8KKwlfX3UxNglpX2dpZDsJCS8qIEdyb3VwIElkICovCisJX191MTYJaV9saW5rc19jb3VudDsJLyogTGlua3MgY291bnQgKi8KKwlfX3UzMglpX2Jsb2NrczsJLyogQmxvY2tzIGNvdW50ICovCisJX191MzIJaV9mbGFnczsJLyogRmlsZSBmbGFncyAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fdTMyICBsX2lfcmVzZXJ2ZWQxOworCQl9IGxpbnV4MTsKKwkJc3RydWN0IHsKKwkJCV9fdTMyICBoX2lfdHJhbnNsYXRvcjsKKwkJfSBodXJkMTsKKwl9IG9zZDE7CQkJCS8qIE9TIGRlcGVuZGVudCAxICovCisJX191MzIJaV9ibG9ja1tFWFQyX05fQkxPQ0tTXTsJLyogUG9pbnRlcnMgdG8gYmxvY2tzICovCisJX191MzIJaV92ZXJzaW9uOwkJLyogRmlsZSB2ZXJzaW9uIChmb3IgTkZTKSAqLworCV9fdTMyCWlfZmlsZV9hY2w7CQkvKiBGaWxlIEFDTCAqLworCV9fdTMyCWlfZGlyX2FjbDsJCS8qIERpcmVjdG9yeSBBQ0wgKi8KKwlfX3UzMglpX2ZhZGRyOwkJLyogRnJhZ21lbnQgYWRkcmVzcyAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fdTgJbF9pX2ZyYWc7CS8qIEZyYWdtZW50IG51bWJlciAqLworCQkJX191OAlsX2lfZnNpemU7CS8qIEZyYWdtZW50IHNpemUgKi8KKwkJCV9fdTE2CWlfcGFkMTsKKwkJCV9fdTMyCWxfaV9yZXNlcnZlZDJbMl07CisJCX0gbGludXgyOworCQlzdHJ1Y3QgeworCQkJX191OAloX2lfZnJhZzsJLyogRnJhZ21lbnQgbnVtYmVyICovCisJCQlfX3U4CWhfaV9mc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCQkJX191MTYJaF9pX21vZGVfaGlnaDsKKwkJCV9fdTE2CWhfaV91aWRfaGlnaDsKKwkJCV9fdTE2CWhfaV9naWRfaGlnaDsKKwkJCV9fdTMyCWhfaV9hdXRob3I7CisJCX0gaHVyZDI7CisJfSBvc2QyOwkJCQkvKiBPUyBkZXBlbmRlbnQgMiAqLworfTsKKzwvUHJvZ3JhbUxpc3Rpbmc+CisKKzwvUGFyYT4KKworPFBhcmE+CitUaGUgYWJvdmUgaXMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlIGRlZmluaXRpb24uIFdlIGNhbiBzZWUgdGhhdCB0aGUgaW5vZGUKK3N1cHBvcnRzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+T3BlcmF0aW5nIHN5c3RlbXMgc3BlY2lmaWMgc3RydWN0dXJlczwvTGl0ZXJhbD4uIEluIGFkZGl0aW9uIHRvIHRoZQorZXhwYW5zaW9uIG9mIHRoZSBhcnJheXMsIEkgaGF2ZSA8TGl0ZXJhbCByZW1hcD0idHQiPiJmbGF0dGVuZWQ8L0xpdGVyYWw+IHRoZSBpbm9kZSB0byBzdXBwb3J0IG9ubHkKK3RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPkxpbnV4PC9MaXRlcmFsPiBkZWNsYXJhdGlvbi4gSXQgc2VlbWVkIHRoYXQgdGhpcyBvbmUgb2NjYXNpb24gb2YgbXVsdGlwbGUKK3ZhcmlhYmxlIGFsaWFzZXMgZGlkbid0IGp1c3RpZnkgdGhlIGNvbXBsaWNhdGlvbiBvZiBnZW5lcmFsbHkgc3VwcG9ydGluZworYWxpYXNlcy4gSW4gYW55IGNhc2UsIHRoZSBhYm92ZSBzeXN0ZW0gc3BlY2lmaWMgdmFyaWFibGVzIGFyZSBub3QgdXNlZAoraW50ZXJuYWxseSBieSBFWFQyRUQsIGFuZCB0aGUgdXNlciBpcyBmcmVlIHRvIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBpbgorPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyLmRlc2NyaXB0b3JzPC9MaXRlcmFsPiB0byBhY2NvbW1vZGF0ZSBmb3IgaGlzIG5lZWRzLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIGhhbmRsaW5nIGZ1bmN0aW9uczwvVGl0bGU+CisKKzxQYXJhPgorVGhlIHVzZXIgaW50ZXJmYWNlIHRvIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bW92ZW1lbnQ8L0xpdGVyYWw+IGlzIHRoZSB1c3VhbCA8TGl0ZXJhbCByZW1hcD0idHQiPm5leHQgLyBwcmV2IC8KK2VudHJ5PC9MaXRlcmFsPiBpbnRlcmZhY2UuIFRoZXJlIGlzIHJlYWxseSBub3RoaW5nIHNwZWNpYWwgaW4gdGhvc2UgZnVuY3Rpb25zIC0gVGhlCitzaXplIG9mIHRoZSBpbm9kZSBpcyBmaXhlZCwgdGhlIHRvdGFsIG51bWJlciBvZiBpbm9kZXMgaXMga25vd24gZnJvbSB0aGUKK3N1cGVyYmxvY2sgaW5mb3JtYXRpb24sIGFuZCB0aGUgY3VycmVudCBlbnRyeSBjYW4gYmUgZmlndXJlZCB1cCBmcm9tIHRoZQorZGV2aWNlIG9mZnNldCBhbmQgdGhlIGlub2RlIHRhYmxlIHN0YXJ0IG9mZnNldCwgd2hpY2ggaXMga25vd24gZnJvbSB0aGUKK2NvcnJlc3BvbmRpbmcgZ3JvdXAgZGVzY3JpcHRvci4gVGhvc2UgZnVuY3Rpb25zIGFyZSBhIGJpdCBvbGRlciB0aGVuIHNvbWUKK290aGVyIGltcGxlbWVudGF0aW9ucyBvZiA8TGl0ZXJhbCByZW1hcD0idHQiPm5leHQ8L0xpdGVyYWw+IGFuZCA8TGl0ZXJhbCByZW1hcD0idHQiPnByZXY8L0xpdGVyYWw+LCBhbmQgdGhleSBkbyBub3Qgc2F2ZQoraW5mb3JtYXRpb24gaW4gYSBzcGVjaWFsIHN0cnVjdHVyZS4gUmF0aGVyLCB0aGV5IHJlY29tcHV0ZSBpdCB3aGVuCituZWNlc3NhcnkuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2hvdzwvTGl0ZXJhbD4gY29tbWFuZCBpcyBvdmVycmlkZGVuIGhlcmUsIGFuZCBwcm92aWRlcyBhIGxvdCBvZiBhZGRpdGlvbmFsCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW5vZGUgLSBJdHMgdHlwZSwgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHBlcm1pc3Npb25zLAorc3BlY2lhbCBleHQyIGF0dHJpYnV0ZXMgKEltbXV0YWJsZSBmaWxlLCBmb3IgZXhhbXBsZSksIGFuZCBhIGxvdCBtb3JlLgorQWdhaW4sIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmdlbmVyYWwgc2hvdzwvTGl0ZXJhbD4gaXMgY2FsbGVkIGZpcnN0LCBhbmQgdGhlbiB0aGUgYWRkaXRpb25hbAoraW5mb3JtYXRpb24gaXMgd3JpdHRlbi4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPkFjY2Vzc2luZyBmaWxlcyBhbmQgZGlyZWN0b3JpZXM8L1RpdGxlPgorCis8UGFyYT4KK0Zyb20gdGhlIGlub2RlLCBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZTwvTGl0ZXJhbD4gb3IgYSA8TGl0ZXJhbCByZW1hcD0idHQiPmRpcmVjdG9yeTwvTGl0ZXJhbD4gY2FuIHR5cGljYWxseSBiZSByZWFjaGVkLgorSW4gb3JkZXIgdG8gdHJlYXQgYSBmaWxlLCBmb3IgZXhhbXBsZSwgaXRzIGlub2RlIG5lZWRzIHRvIGJlIGNvbnN0YW50bHkKK2FjY2Vzc2VkLiBUbyBzYXRpc2Z5IHRoYXQgbmVlZCwgd2hlbiBlZGl0aW5nIGEgZmlsZSBvciBhIGRpcmVjdG9yeSwgdGhlCitpbm9kZSBpcyBzdGlsbCBzYXZlZCBpbiBtZW1vcnkgLSA8TGl0ZXJhbCByZW1hcD0idHQiPnR5cGUmbG93YmFyO2RhdGE8L0xpdGVyYWw+IGlzIG5vdCBvdmVyd3JpdHRlbi4KK1JhdGhlciwgdGhlIGZvbGxvd2luZyB0YWtlcyBwbGFjZToKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJQW4gaW50ZXJuYWwgZ2xvYmFsIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGJ5IHRoZSB0eXBlcyA8TGl0ZXJhbCByZW1hcD0idHQiPmZpbGU8L0xpdGVyYWw+CithbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXI8L0xpdGVyYWw+IGhhbmRsaW5nIGZ1bmN0aW9ucyBpcyBpbml0aWFsaXplZCBieSBjYWxsaW5nIHRoZQorYXBwcm9wcmlhdGUgZnVuY3Rpb24uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgdHlwZSBpcyBjaGFuZ2VkIGFjY29yZGluZ2x5LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKK1RoZSByZXN1bHQgaXMgdGhhdCBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0dHlwZSBleHQyJmxvd2Jhcjtpbm9kZTwvTGl0ZXJhbD4gaXMgdGhlIG9ubHkgYWN0aW9uIG5lY2Vzc2FyeQordG8gcmV0dXJuIHRvIHRoZSBpbm9kZSAtIFdlIGFjdHVhbGx5IG5ldmVyIGxlZnQgaXQuCis8L1BhcmE+CisKKzxQYXJhPgorRm9sbG93cyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGlub2RlJ3MgPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlPC9MaXRlcmFsPiBjb21tYW5kOgorPC9QYXJhPgorCis8UGFyYT4KKworPFByb2dyYW1MaXN0aW5nPgordm9pZCB0eXBlX2V4dDJfaW5vZGVfX19maWxlIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwljaGFyIGJ1ZmZlciBbODBdOworCQorCWlmICghU19JU1JFRyAodHlwZV9kYXRhLnUudF9leHQyX2lub2RlLmlfbW9kZSkpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gSW5vZGUgdHlwZSBpcyBub3QgZmlsZVxuIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CXJldHVybjsJCQorCX0KKwkKKwlpZiAoIWluaXRfZmlsZV9pbmZvICgpKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIFVuYWJsZSB0byBzaG93IGZpbGVcbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisJCisJc3ByaW50ZiAoYnVmZmVyLCJzZXR0eXBlIGZpbGUiKTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKzwvUHJvZ3JhbUxpc3Rpbmc+CisKKzwvUGFyYT4KKworPFBhcmE+CitBcyB3ZSBjYW4gc2VlIC0gV2UganVzdCBjYWxsIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5pdCZsb3diYXI7ZmlsZSZsb3diYXI7aW5mbzwvTGl0ZXJhbD4gdG8gZ2V0IHRoZSBuZWNlc3NhcnkKK2luZm9ybWF0aW9uIGZyb20gdGhlIGlub2RlLCBhbmQgc2V0IHRoZSB0eXBlIHRvIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZTwvTGl0ZXJhbD4uIFRoZSBuZXh0IGNhbGwKK3RvIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2hvdzwvTGl0ZXJhbD4sIHdpbGwgZGlzcGF0Y2ggdG8gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZSdzIHNob3c8L0xpdGVyYWw+IGltcGxlbWVudGF0aW9uLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+Vmlld2luZyBhIGZpbGU8L1RpdGxlPgorCis8UGFyYT4KK1RoZXJlIGlzbid0IGFuIGV4dDIga2VybmVsIHN0cnVjdHVyZSB3aGljaCBjb3JyZXNwb25kcyB0byBhIGZpbGUgLSBBIGZpbGUgaXMKK2p1c3QgYSBzZXJpZXMgb2YgYmxvY2tzIHdoaWNoIGFyZSBkZXRlcm1pbmVkIGJ5IGl0cyBpbm9kZS4gQXMgZXhwbGFpbmVkIGluCit0aGUgbGFzdCBzZWN0aW9uLCB0aGUgaW5vZGUgaXMgbmV2ZXIgYWN0dWFsbHkgbGVmdCAtIFRoZSB0eXBlIGlzIGNoYW5nZWQgdG8KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZTwvTGl0ZXJhbD4gLSBBIHR5cGUgd2hpY2ggY29udGFpbnMgbm8gdmFyaWFibGVzLCBhbmQgYSBzcGVjaWFsIHN0cnVjdHVyZSBpcworaW5pdGlhbGl6ZWQ6Cis8L1BhcmE+CisKKzxQYXJhPgorCis8UHJvZ3JhbUxpc3Rpbmc+CitzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyB7CisKKwlzdHJ1Y3QgZXh0Ml9pbm9kZXMgKmlub2RlX3B0cjsKKwkKKwlsb25nIGlub2RlX29mZnNldDsKKwlsb25nIGdsb2JhbF9ibG9ja19udW0sZ2xvYmFsX2Jsb2NrX29mZnNldDsKKwlsb25nIGJsb2NrX251bSxibG9ja3NfY291bnQ7CisJbG9uZyBmaWxlX29mZnNldCxmaWxlX2xlbmd0aDsKKwlsb25nIGxldmVsOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyIFtFWFQyX01BWF9CTE9DS19TSVpFXTsKKwlsb25nIG9mZnNldF9pbl9ibG9jazsKKworCWludCBkaXNwbGF5OworCS8qIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCBpZiB0aGUgZmlsZSBpcyBhIGRpcmVjdG9yeSAqLworCQorCWxvbmcgZGlyX2VudHJ5X251bSxkaXJfZW50cmllc19jb3VudDsKKwlsb25nIGRpcl9lbnRyeV9vZmZzZXQ7Cit9OworPC9Qcm9ncmFtTGlzdGluZz4KKworPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmlub2RlJmxvd2JhcjtwdHI8L0xpdGVyYWw+IHdpbGwganVzdCBwb2ludCB0byB0aGUgaW5vZGUgaW4gPExpdGVyYWwgcmVtYXA9InR0Ij50eXBlJmxvd2JhcjtkYXRhPC9MaXRlcmFsPiwgd2hpY2gKK2lzIG5vdCBvdmVyd3JpdHRlbiB3aGlsZSB0aGUgdXNlciBpcyBlZGl0aW5nIHRoZSBmaWxlLCBhcyB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0b2Zmc2V0PC9MaXRlcmFsPiBjb21tYW5kIGlzIG5vdCBpbnRlcm5hbGx5IHVzZWQuIFRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmJ1ZmZlcjwvTGl0ZXJhbD4KK3dpbGwgY29udGFpbiB0aGUgY3VycmVudCB2aWV3ZWQgYmxvY2sgb2YgdGhlIGZpbGUuIFRoZSBvdGhlciB2YXJpYWJsZXMKK2NvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcGxhY2UgaW4gdGhlIGZpbGUuIEZvciBleGFtcGxlLAorPExpdGVyYWwgcmVtYXA9InR0Ij5nbG9iYWwmbG93YmFyO2Jsb2NrJmxvd2JhcjtudW08L0xpdGVyYWw+IGp1c3QgY29udGFpbnMgdGhlIGN1cnJlbnQgYmxvY2sgbnVtYmVyLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBnZW5lcmFsIGlkZWEgaXMgdGhhdCB0aGUgYWJvdmUgZGF0YSBzdHJ1Y3R1cmUgd2lsbCBwcm92aWRlIHRoZSBmaWxlCitoYW5kbGluZyBmdW5jdGlvbnMgYWxsIHRoZSBhY2N1cmF0ZSBpbmZvcm1hdGlvbiB3aGljaCBpcyBuZWVkZWQgdG8gYWNjb21wbGlzaAordGhlaXIgdGFzay4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgZ2xvYmFsIHN0cnVjdHVyZSBvZiB0aGUgYWJvdmUgdHlwZSwgPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlJmxvd2JhcjtpbmZvPC9MaXRlcmFsPiwgaXMgaW5pdGlhbGl6ZWQgYnkKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5pdCZsb3diYXI7ZmlsZSZsb3diYXI7aW5mbzwvTGl0ZXJhbD4gaW4gPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlJmxvd2Jhcjtjb20uYzwvTGl0ZXJhbD4sIHdoaWNoIGlzIGNhbGxlZCBieSB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+dHlwZSZsb3diYXI7ZXh0MiZsb3diYXI7aW5vZGUmbG93YmFyOyZsb3diYXI7Jmxvd2JhcjtmaWxlPC9MaXRlcmFsPiBmdW5jdGlvbiB3aGVuIHRoZSB1c2VyIHJlcXVlc3RzIHRvIHdhdGNoIHRoZQorZmlsZS4gPExpdGVyYWwgcmVtYXA9InR0Ij5JdCBpcyB1cGRhdGVkIGFzIG5lY2Vzc2FyeSB0byBwcm92aWRlIGFjY3VyYXRlIGluZm9ybWF0aW9uIGFzIGxvbmcgYXMKK3RoZSBmaWxlIGlzIGVkaXRlZC48L0xpdGVyYWw+Cis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5SZXR1cm5pbmcgdG8gdGhlIGZpbGUncyBpbm9kZTwvVGl0bGU+CisKKzxQYXJhPgorQ29uY2VybmluZyB0aGUgbWV0aG9kIEkgdXNlZCB0byBoYW5kbGUgZmlsZXMsIHRoZSBhYm92ZSB0YXNrIGlzIHRyaXZpYWw6CisKKzxQcm9ncmFtTGlzdGluZz4KK3ZvaWQgdHlwZV9maWxlX19faW5vZGUgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWRpc3BhdGNoICgic2V0dHlwZSBleHQyX2lub2RlIik7Cit9Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5GaWxlIG1vdmVtZW50PC9UaXRsZT4KKworPFBhcmE+CitFWFQyRUQga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGZpbGUuIE1vdmVtZW50IGluc2lkZSB0aGUKK2N1cnJlbnQgYmxvY2sgaXMgZG9uZSB1c2luZyA8TGl0ZXJhbCByZW1hcD0idHQiPm5leHQsIHByZXYgYW5kIG9mZnNldDwvTGl0ZXJhbD4gLSBUaGV5IGp1c3QgY2hhbmdlCis8TGl0ZXJhbCByZW1hcD0idHQiPmZpbGUmbG93YmFyO2luZm8ub2Zmc2V0Jmxvd2JhcjtpbiZsb3diYXI7YmxvY2s8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8UGFyYT4KK01vdmVtZW50IGJldHdlZW4gYmxvY2tzIGlzIGRvbmUgdXNpbmcgPExpdGVyYWwgcmVtYXA9InR0Ij5uZXh0YmxvY2ssIHByZXZibG9jayBhbmQgYmxvY2s8L0xpdGVyYWw+LgorVG8gYWNjb21wbGlzaCB0aGlzLCB0aGUgZGlyZWN0IGJsb2NrcywgaW5kaXJlY3QgYmxvY2tzLCBldGMsIG5lZWQgdG8gYmUKK3RyYWNlZC4gVGhpcyBpcyBkb25lIGJ5IDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZSZsb3diYXI7YmxvY2smbG93YmFyO3RvJmxvd2JhcjtnbG9iYWwmbG93YmFyO2Jsb2NrPC9MaXRlcmFsPiwgd2hpY2ggYWNjZXB0cyBhCitmaWxlJ3MgaW50ZXJuYWwgYmxvY2sgbnVtYmVyLCBhbmQgY29udmVydHMgaXQgdG8gdGhlIGFjdHVhbCBmaWxlc3lzdGVtIGJsb2NrCitudW1iZXIuCis8L1BhcmE+CisKKzxQYXJhPgorCis8UHJvZ3JhbUxpc3Rpbmc+Citsb25nIGZpbGVfYmxvY2tfdG9fZ2xvYmFsX2Jsb2NrIChsb25nIGZpbGVfYmxvY2ssc3RydWN0IHN0cnVjdF9maWxlX2luZm8gKmZpbGVfaW5mb19wdHIpCisKK3sKKwlsb25nIGxhc3RfZGlyZWN0LGxhc3RfaW5kaXJlY3QsbGFzdF9kaW5kaXJlY3Q7CisJbG9uZyBmX2luZGlyZWN0LHNfaW5kaXJlY3Q7CisJCisJbGFzdF9kaXJlY3Q9RVhUMl9ORElSX0JMT0NLUy0xOworCWxhc3RfaW5kaXJlY3Q9bGFzdF9kaXJlY3QrZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLzQ7CisJbGFzdF9kaW5kaXJlY3Q9bGFzdF9pbmRpcmVjdCsoZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLzQpIFwKKwkJKihmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvNCk7CisKKwlpZiAoZmlsZV9ibG9jayAmIzYwOz0gbGFzdF9kaXJlY3QpIHsKKwkJZmlsZV9pbmZvX3B0ci0mIzYyO2xldmVsPTA7CisJCXJldHVybiAoZmlsZV9pbmZvX3B0ci0mIzYyO2lub2RlX3B0ci0mIzYyO2lfYmxvY2sgW2ZpbGVfYmxvY2tdKTsKKwl9CisJCisJaWYgKGZpbGVfYmxvY2sgJiM2MDs9IGxhc3RfaW5kaXJlY3QpIHsKKwkJZmlsZV9pbmZvX3B0ci0mIzYyO2xldmVsPTE7CisJCWZpbGVfYmxvY2s9ZmlsZV9ibG9jay1sYXN0X2RpcmVjdC0xOworCQlyZXR1cm4gKHJldHVybl9pbmRpcmVjdCAoZmlsZV9pbmZvX3B0ci0mIzYyO2lub2RlX3B0ci0mIzYyOyBcCisJCQlpX2Jsb2NrIFtFWFQyX0lORF9CTE9DS10sZmlsZV9ibG9jaykpOworCX0KKworCWlmIChmaWxlX2Jsb2NrICYjNjA7PSBsYXN0X2RpbmRpcmVjdCkgeworCQlmaWxlX2luZm9fcHRyLSYjNjI7bGV2ZWw9MjsKKwkJZmlsZV9ibG9jaz1maWxlX2Jsb2NrLWxhc3RfaW5kaXJlY3QtMTsKKwkJcmV0dXJuIChyZXR1cm5fZGluZGlyZWN0IChmaWxlX2luZm9fcHRyLSYjNjI7aW5vZGVfcHRyLSYjNjI7IFwKKwkJCWlfYmxvY2sgW0VYVDJfRElORF9CTE9DS10sZmlsZV9ibG9jaykpOworCX0KKworCWZpbGVfaW5mb19wdHItJiM2MjtsZXZlbD0zOworCWZpbGVfYmxvY2s9ZmlsZV9ibG9jay1sYXN0X2RpbmRpcmVjdC0xOworCXJldHVybiAocmV0dXJuX3RpbmRpcmVjdCAoZmlsZV9pbmZvX3B0ci0mIzYyO2lub2RlX3B0ci0mIzYyOyBcCisJCWlfYmxvY2sgW0VYVDJfVElORF9CTE9DS10sZmlsZV9ibG9jaykpOworfQorPC9Qcm9ncmFtTGlzdGluZz4KKworPExpdGVyYWwgcmVtYXA9InR0Ij5sYXN0Jmxvd2JhcjtkaXJlY3QsIGxhc3QmbG93YmFyO2luZGlyZWN0LCBldGM8L0xpdGVyYWw+LCBjb250YWluIHRoZSBsYXN0IGludGVybmFsIGJsb2NrIG51bWJlcgord2hpY2ggaXMgYWNjZXNzZWQgYnkgdGhpcyBtZXRob2QgLSBJZiB0aGUgcmVxdWVzdGVkIGJsb2NrIGlzIHNtYWxsZXIgdGhlbgorPExpdGVyYWwgcmVtYXA9InR0Ij5sYXN0Jmxvd2JhcjtkaXJlY3Q8L0xpdGVyYWw+LCBmb3IgZXhhbXBsZSwgaXQgaXMgYSBkaXJlY3QgYmxvY2suCis8L1BhcmE+CisKKzxQYXJhPgorSWYgdGhlIGJsb2NrIGlzIGEgZGlyZWN0IGJsb2NrLCBpdHMgbnVtYmVyIGlzIGp1c3QgdGFrZW4gZnJvbSB0aGUgaW5vZGUuCitBIG5vbi1kaXJlY3QgYmxvY2sgaXMgaGFuZGxlZCBieSA8TGl0ZXJhbCByZW1hcD0idHQiPnJldHVybiZsb3diYXI7aW5kaXJlY3QsIHJldHVybiZsb3diYXI7ZGluZGlyZWN0IGFuZAorcmV0dXJuJmxvd2Jhcjt0aW5kaXJlY3Q8L0xpdGVyYWw+LCB3aGljaCBjb3JyZXNwb25kIHRvIGluZGlyZWN0LCBkb3VibGUtaW5kaXJlY3QgYW5kCit0cmlwbGUtaW5kaXJlY3QuIEVhY2ggb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucyBpcyBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgbG93ZXIKK2xldmVsIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGUsIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cmV0dXJuJmxvd2JhcjtkaW5kaXJlY3Q8L0xpdGVyYWw+IGlzIGNvbnN0cnVjdGVkIGFzCitmb2xsb3dzOgorPC9QYXJhPgorCis8UGFyYT4KKworPFByb2dyYW1MaXN0aW5nPgorbG9uZyByZXR1cm5fZGluZGlyZWN0IChsb25nIHRhYmxlX2Jsb2NrLGxvbmcgYmxvY2tfbnVtKQorCit7CisJbG9uZyBmX2luZGlyZWN0OworCQorCWZfaW5kaXJlY3Q9YmxvY2tfbnVtLyhmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvNCk7CisJZl9pbmRpcmVjdD1yZXR1cm5faW5kaXJlY3QgKHRhYmxlX2Jsb2NrLGZfaW5kaXJlY3QpOworCXJldHVybiAocmV0dXJuX2luZGlyZWN0IChmX2luZGlyZWN0LGJsb2NrX251bSUoZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLzQpKSk7Cit9Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5PYmplY3QgbWVtb3J5PC9UaXRsZT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5yZW1lbWJlcjwvTGl0ZXJhbD4gY29tbWFuZCBpcyBvdmVycmlkZGVuIGhlcmUgYW5kIGluIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmRpcjwvTGl0ZXJhbD4gdHlwZSAtCitXZSBqdXN0IHJlbWVtYmVyIHRoZSBpbm9kZSBvZiB0aGUgZmlsZS4gSXQgaXMganVzdCBzaW1wbGVyIHRvIGltcGxlbWVudCwgYW5kCitkb2Vzbid0IHNlZW0gbGlrZSBhIGJpZyBsaW1pdGF0aW9uLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+Q2hhbmdpbmcgZGF0YTwvVGl0bGU+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0PC9MaXRlcmFsPiBjb21tYW5kIGlzIG92ZXJyaWRkZW4sIGFuZCBwcm92aWRlcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5CitsaWtlIHRoZSB1c2FnZSBvZiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5nZW5lcmFsIHNldDwvTGl0ZXJhbD4gY29tbWFuZCB3aXRoIG5vIHR5cGUgZGVjbGFyZWQuIFRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij53cml0ZWRhdGE8L0xpdGVyYWw+IGlzIG92ZXJyaWRkZW4gc28gdGhhdCB3ZSdsbCB3cml0ZSB0aGUgZWRpdGVkIGJsb2NrCisoZmlsZSZsb3diYXI7aW5mby5idWZmZXIpIGFuZCBub3QgPExpdGVyYWwgcmVtYXA9InR0Ij50eXBlJmxvd2JhcjtkYXRhPC9MaXRlcmFsPiAoV2hpY2ggY29udGFpbnMgdGhlIGlub2RlKS4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPkRpcmVjdG9yaWVzPC9UaXRsZT4KKworPFBhcmE+CitBIGRpcmVjdG9yeSBpcyBqdXN0IGEgZmlsZSB3aGljaCBpcyBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIGEgc3BlY2lhbCBmb3JtYXQuCitBcyBzdWNoLCBFWFQyRUQgaGFuZGxlcyBkaXJlY3RvcmllcyBhbmQgZmlsZXMgcXVpdGUgYWxpa2UuIFNwZWNpZmljYWxseSwgdGhlCitzYW1lIHZhcmlhYmxlIG9mIHR5cGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zdHJ1Y3QmbG93YmFyO2ZpbGUmbG93YmFyO2luZm88L0xpdGVyYWw+IHdoaWNoIGlzIHVzZWQgaW4gdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPmZpbGU8L0xpdGVyYWw+LCBpcyB1c2VkIGhlcmUuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlyPC9MaXRlcmFsPiB0eXBlIHVzZXMgYWxsIHRoZSB2YXJpYWJsZXMgaW4gdGhlIGFib3ZlIHN0cnVjdHVyZSwgYXMKK29wcG9zZWQgdG8gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZTwvTGl0ZXJhbD4gdHlwZSwgd2hpY2ggZGlkbid0IHVzZSB0aGUgbGFzdCBvbmVzLgorPC9QYXJhPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIHNlYXJjaCZsb3diYXI7ZGlyJmxvd2JhcjtlbnRyaWVzIGZ1bmN0aW9uPC9UaXRsZT4KKworPFBhcmE+CitUaGUgZW50aXJlIHNpdHVhdGlvbiBpcyBzaW1pbGFyIHRvIHRoYXQgd2hpY2ggd2FzIGRlc2NyaWJlZCBpbiB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZTwvTGl0ZXJhbD4gdHlwZSwgd2l0aCBvbmUgbWFpbiBjaGFuZ2U6Cis8L1BhcmE+CisKKzxQYXJhPgorVGhlIG1haW4gZnVuY3Rpb24gaW4gPExpdGVyYWwgcmVtYXA9InR0Ij5kaXImbG93YmFyO2NvbS5jPC9MaXRlcmFsPiBpcyA8TGl0ZXJhbCByZW1hcD0idHQiPnNlYXJjaCZsb3diYXI7ZGlyJmxvd2JhcjtlbnRyaWVzPC9MaXRlcmFsPi4gVGhpcworZnVuY3Rpb24gd2lsbCA8TGl0ZXJhbCByZW1hcD0idHQiPiJydW4iPC9MaXRlcmFsPiBvbiB0aGUgZW50aXJlIGVudHJpZXMgaW4gdGhlIGRpcmVjdG9yeSwgYW5kIHdpbGwKK2NhbGwgYSBjbGllbnQncyBmdW5jdGlvbiBlYWNoIHRpbWUuIFRoZSBjbGllbnQncyBmdW5jdGlvbiBpcyBzdXBwbGllZCBhcyBhbgorYXJndW1lbnQsIGFuZCB3aWxsIGNoZWNrIHRoZSBjdXJyZW50IGVudHJ5IGZvciBhIG1hdGNoLCBiYXNlZCBvbiBpdHMgb3duCitjcml0ZXJpb24uIEl0IHdpbGwgdGhlbiBzaWduYWwgPExpdGVyYWwgcmVtYXA9InR0Ij5zZWFyY2gmbG93YmFyO2RpciZsb3diYXI7ZW50cmllczwvTGl0ZXJhbD4gd2hldGhlciB0bworPExpdGVyYWwgcmVtYXA9InR0Ij5BQk9SVDwvTGl0ZXJhbD4gdGhlIHNlYXJjaCwgd2hldGhlciBpdCA8TGl0ZXJhbCByZW1hcD0idHQiPkZPVU5EPC9MaXRlcmFsPiB0aGUgZW50cnkgaXQgd2FzIGxvb2tpbmcKK2Zvciwgb3IgdGhhdCB0aGUgZW50cnkgaXMgc3RpbGwgbm90IGZvdW5kLCBhbmQgd2Ugc2hvdWxkIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Q09OVElOVUU8L0xpdGVyYWw+CitzZWFyY2hpbmcuIEZvbGxvd3MgdGhlIGRlY2xhcmF0aW9uOgorCis8UHJvZ3JhbUxpc3Rpbmc+CitzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyBzZWFyY2hfZGlyX2VudHJpZXMgXCAKKwkoaW50ICgqYWN0aW9uKSAoc3RydWN0IHN0cnVjdF9maWxlX2luZm8gKmluZm8pLGludCAqc3RhdHVzKQorCisvKgorCVRoaXMgcm91dGluZSBydW5zIG9uIGFsbCBkaXJlY3RvcnkgZW50cmllcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisJRm9yIGVhY2ggZW50cnksIGFjdGlvbiBpcyBjYWxsZWQuIFRoZSByZXR1cm4gY29kZSBvZiBhY3Rpb24gaXMgb25lIG9mCisJdGhlIGZvbGxvd2luZzoKKwkKKwkJQUJPUlQJCS0JQ3VycmVudCBkaXIgZW50cnkgaXMgcmV0dXJuZWQuCisJCUNPTlRJTlVFCS0JQ29udGludWUgc2VhcmNoaW5nLgorCQlGT1VORAkJLQlDdXJyZW50IGRpciBlbnRyeSBpcyByZXR1cm5lZC4KKwkJCisJSWYgdGhlIGxhc3QgZW50cnkgaXMgcmVhY2hlZCwgaXQgaXMgcmV0dXJuZWQsIGFsb25nIHdpdGggYW4gQUJPUlQgc3RhdHVzLgorCQorCXN0YXR1cyBpcyB1cGRhdGVkIHRvIHRoZSByZXR1cm5lZCBjb2RlIG9mIGFjdGlvbi4JCisqLworPC9Qcm9ncmFtTGlzdGluZz4KKworPC9QYXJhPgorCis8UGFyYT4KK1dpdGggdGhlIGFib3ZlIHRvb2wgaW4gaGFuZCwgbWFueSBvcGVyYXRpb25zIGFyZSBzaW1wbGUgdG8gcGVyZm9ybSAtIEhlcmUgaXMKK3RoZSB3YXkgSSBjb3VudGVkIHRoZSBlbnRyaWVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeToKKzwvUGFyYT4KKworPFBhcmE+CisKKzxQcm9ncmFtTGlzdGluZz4KK2xvbmcgY291bnRfZGlyX2VudHJpZXMgKHZvaWQpCisKK3sKKwlpbnQgc3RhdHVzOworCQorCXJldHVybiAoc2VhcmNoX2Rpcl9lbnRyaWVzICgmYW1wO2FjdGlvbl9jb3VudCwmYW1wO3N0YXR1cykuZGlyX2VudHJ5X251bSk7Cit9CisKK2ludCBhY3Rpb25fY291bnQgKHN0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvICppbmZvKQorCit7CisJcmV0dXJuIChDT05USU5VRSk7Cit9Cis8L1Byb2dyYW1MaXN0aW5nPgorCitJdCB3aWxsIGp1c3QgPExpdGVyYWwgcmVtYXA9InR0Ij5DT05USU5VRTwvTGl0ZXJhbD4gdW50aWwgdGhlIGxhc3QgZW50cnkuIFRoZSByZXR1cm5lZCBzdHJ1Y3R1cmUKKyhvZiB0eXBlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0Jmxvd2JhcjtmaWxlJmxvd2JhcjtpbmZvPC9MaXRlcmFsPikgd2lsbCBoYXZlIGl0cyBudW1iZXIgaW4gdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPmRpciZsb3diYXI7ZW50cnkmbG93YmFyO251bTwvTGl0ZXJhbD4gZmllbGQsIGFuZCB0aGlzIGlzIGV4YWN0bHkgdGhlIHJlcXVpcmVkIG51bWJlciEKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBjZCBjb21tYW5kPC9UaXRsZT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5jZDwvTGl0ZXJhbD4gY29tbWFuZCBhY2NlcHRzIGEgcmVsYXRpdmUgcGF0aCwgYW5kIG1vdmVzIHRoZXJlIC4uLgorVGhlIGltcGxlbWVudGF0aW9uIGlzIG9mLWNvdXJzZSBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkOgorCis8T3JkZXJlZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBwYXRoIGlzIGNoZWNrZWQgdGhhdCBpdCBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aCAoZnJvbSA8TGl0ZXJhbCByZW1hcD0idHQiPi88L0xpdGVyYWw+KS4KK0lmIGl0IGlzLCB3ZSBsZXQgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Z2VuZXJhbCBjZDwvTGl0ZXJhbD4gdG8gZG8gdGhlIGpvYiBieSBjYWxsaW5nCitkaXJlY3RseSA8TGl0ZXJhbCByZW1hcD0idHQiPnR5cGUmbG93YmFyO2V4dDImbG93YmFyOyZsb3diYXI7Jmxvd2JhcjtjZDwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgcGF0aCBpcyBkaXZpZGVkIGludG8gdGhlIG5lYXJlc3QgcGF0aCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHBhdGguCitGb3IgZXhhbXBsZSwgY2QgMS8yLzMvNCBpcyBkaXZpZGVkIGludG8gPExpdGVyYWwgcmVtYXA9InR0Ij4xPC9MaXRlcmFsPiBhbmQgaW50bworPExpdGVyYWwgcmVtYXA9InR0Ij4yLzMvNDwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJdCBpcyB0aGUgZmlyc3QgcGFydCBvZiB0aGUgcGF0aCB0aGF0IHdlIG5lZWQgdG8gc2VhcmNoIGZvciBpbiB0aGUKK2N1cnJlbnQgZGlyZWN0b3J5LiBXZSBzZWFyY2ggZm9yIGl0IHVzaW5nIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2VhcmNoJmxvd2JhcjtkaXImbG93YmFyO2VudHJpZXM8L0xpdGVyYWw+LAord2hpY2ggYWNjZXB0cyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5hY3Rpb24mbG93YmFyO25hbWU8L0xpdGVyYWw+IGZ1bmN0aW9uIGFzIHRoZSB1c2VyIGRlZmluZWQKK2Z1bmN0aW9uLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij5zZWFyY2gmbG93YmFyO2RpciZsb3diYXI7ZW50cmllczwvTGl0ZXJhbD4gd2lsbCBzY2FuIHRoZSBlbnRpcmUgZW50cmllcyBhbmQgd2lsbCBjYWxsCitvdXIgPExpdGVyYWwgcmVtYXA9InR0Ij5hY3Rpb24mbG93YmFyO25hbWU8L0xpdGVyYWw+IGZ1bmN0aW9uIGZvciBlYWNoIGVudHJ5LiBJbgorPExpdGVyYWwgcmVtYXA9InR0Ij5hY3Rpb24mbG93YmFyO25hbWU8L0xpdGVyYWw+LCB0aGUgcmVxdWlyZWQgbmFtZSB3aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCB0aGUKK25hbWUgb2YgdGhlIGN1cnJlbnQgZW50cnksIGFuZCA8TGl0ZXJhbCByZW1hcD0idHQiPkZPVU5EPC9MaXRlcmFsPiB3aWxsIGJlIHJldHVybmVkIHdoZW4gYQorbWF0Y2ggb2NjdXJzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJSWYgdGhlIHJlcXVpcmVkIGVudHJ5IGlzIGZvdW5kLCB3ZSBkaXNwYXRjaCBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cmVtZW1iZXI8L0xpdGVyYWw+Citjb21tYW5kIHRvIGluc2VydCB0aGUgY3VycmVudCA8TGl0ZXJhbCByZW1hcD0idHQiPmlub2RlPC9MaXRlcmFsPiBpbnRvIHRoZSBvYmplY3QgbWVtb3J5LgorVGhpcyBpcyByZXF1aXJlZCB0byBlYXNpbHkgc3VwcG9ydCA8TGl0ZXJhbCByZW1hcD0idHQiPnN5bWJvbGljIGxpbmtzPC9MaXRlcmFsPiAtIElmIHdlCitmaW5kIGxhdGVyIHRoYXQgdGhlIGlub2RlIHBvaW50ZWQgYnkgdGhlIGVudHJ5IGlzIGFjdHVhbGx5IGEKK3N5bWJvbGljIGxpbmssIHdlJ2xsIG5lZWQgdG8gcmV0dXJuIHRvIHRoaXMgcG9pbnQsIGFuZCB0aGUgYWJvdmUKK2lub2RlIGRvZXNuJ3QgaGF2ZSAoYW5kIGNhbid0IGhhdmUsIGJlY2F1c2Ugb2YgPExpdGVyYWwgcmVtYXA9InR0Ij5oYXJkIGxpbmtzPC9MaXRlcmFsPikgdGhlCitpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gIm1vdmUgYmFjayIuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlXZSB0aGVuIGRpc3BhdGNoIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5mb2xsb3dpbm9kZTwvTGl0ZXJhbD4gY29tbWFuZCB0byByZWFjaCB0aGUgaW5vZGUKK3BvaW50ZWQgYnkgdGhlIHJlcXVpcmVkIGVudHJ5LiBUaGlzIGNvbW1hbmQgd2lsbCBhdXRvbWF0aWNhbGx5CitjaGFuZ2UgdGhlIHR5cGUgdG8gPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyJmxvd2Jhcjtpbm9kZTwvTGl0ZXJhbD4gLSBXZSBhcmUgbm93IGF0IGFuIGlub2RlLCBhbmQKK2FsbCB0aGUgaW5vZGUgY29tbWFuZHMgYXJlIGF2YWlsYWJsZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVdlIGNoZWNrIHRoZSBpbm9kZSdzIHR5cGUgdG8gc2VlIGlmIGl0IGlzIGEgZGlyZWN0b3J5LiBJZiBpdCBpcywgd2UKK2Rpc3BhdGNoIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXI8L0xpdGVyYWw+IGNvbW1hbmQgdG8gImVudGVyIHRoZSBkaXJlY3RvcnkiLCBhbmQKK3JlY3Vyc2l2ZWx5IGNhbGwgb3Vyc2VsZiAoVGhlIHR5cGUgaXMgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXI8L0xpdGVyYWw+IGFnYWluKSBieQorZGlzcGF0Y2hpbmcgYSA8TGl0ZXJhbCByZW1hcD0idHQiPmNkPC9MaXRlcmFsPiBjb21tYW5kLCB3aXRoIHRoZSByZXN0IG9mIHRoZSBwYXRoIGFzIGFuCithcmd1bWVudC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUlmIHRoZSBpbm9kZSdzIHR5cGUgaXMgYSBzeW1ib2xpYyBsaW5rIChvbmx5IGZhc3Qgc3ltYm9saWMgbGluayB3ZXJlCittZWFud2hpbGUgaW1wbGVtZW50ZWQuIEkgZ3Vlc3MgdGhpcyBpcyB0eXBpY2FsbHkgdGhlIGNhc2UuKSwgd2Ugbm90ZQordGhlIHBhdGggaXQgaXMgcG9pbnRpbmcgYXQsIHRoZQlzYXZlZCBpbm9kZSBpcyByZWNhbGxlZCwgd2UgZGlzcGF0Y2gKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlyPC9MaXRlcmFsPiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgZGlyZWN0b3J5LCBhbmQgd2UgY2FsbAorb3Vyc2VsZiBhZ2FpbiB3aXRoIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmxpbmsgcGF0aC9yZXN0IG9mIHRoZSBwYXRoPC9MaXRlcmFsPiBhcmd1bWVudC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUluIGFueSBvdGhlciBjYXNlLCB3ZSBqdXN0IHN0b3AgYXQgdGhlIHJlc3VsdGluZyBpbm9kZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvT3JkZXJlZExpc3Q+CisKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSBibG9jayBhbmQgaW5vZGUgYWxsb2NhdGlvbiBiaXRtYXBzPC9UaXRsZT4KKworPFBhcmE+CitUaGUgYmxvY2sgYWxsb2NhdGlvbiBiaXRtYXAgaXMgcmVhY2hlZCBieSB0aGUgY29ycmVzcG9uZGluZyBncm91cCBkZXNjcmlwdG9yLgorVGhlIGdyb3VwIGRlc2NyaXB0b3IgaGFuZGxpbmcgZnVuY3Rpb25zIHdpbGwgc2F2ZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uCitpbnRvIGEgc3RydWN0dXJlIG9mIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnN0cnVjdCZsb3diYXI7YmxvY2smbG93YmFyO2JpdG1hcCZsb3diYXI7aW5mbzwvTGl0ZXJhbD4gdHlwZToKKzwvUGFyYT4KKworPFBhcmE+CisKKzxQcm9ncmFtTGlzdGluZz4KK3N0cnVjdCBzdHJ1Y3RfYmxvY2tfYml0bWFwX2luZm8geworCXVuc2lnbmVkIGxvbmcgZW50cnlfbnVtOworCXVuc2lnbmVkIGxvbmcgZ3JvdXBfbnVtOworfTsKKzwvUHJvZ3JhbUxpc3Rpbmc+CisKKzwvUGFyYT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93PC9MaXRlcmFsPiBjb21tYW5kIGlzIG92ZXJyaWRkZW4sIGFuZCB3aWxsIHNob3cgdGhlIGJsb2NrIGFzIGEgc2VyaWVzIG9mCitiaXRzLCBlYWNoIGJpdCBjb3JyZXNwb25kaW5nIHRvIGEgYmxvY2suIFRoZSBtYWluIHZhcmlhYmxlIGlzIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5lbnRyeSZsb3diYXI7bnVtPC9MaXRlcmFsPiB2YXJpYWJsZSwgZGVjbGFyZWQgYWJvdmUsIHdoaWNoIGlzIGp1c3QgdGhlIGN1cnJlbnQgYmxvY2sKK251bWJlciBpbiB0aGlzIGJsb2NrIGdyb3VwLiBUaGUgY3VycmVudCBlbnRyeSBpcyBoaWdobGlnaHRlZCwgYW5kIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5uZXh0LCBwcmV2IGFuZCBlbnRyeTwvTGl0ZXJhbD4gY29tbWFuZHMganVzdCBjaGFuZ2UgdGhlIGFib3ZlIHZhcmlhYmxlLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmFsbG9jYXRlIGFuZCBkZWFsbG9jYXRlPC9MaXRlcmFsPiBjaGFuZ2UgdGhlIHNwZWNpZmllZCBiaXRzLiBOb3RoaW5nCitzcGVjaWFsIGFib3V0IHRoZW0gLSBUaGV5IGp1c3QgY29udGFpbiBjb2RlIHdoaWNoIGNvbnZlcnRzIGJldHdlZW4gYml0IGFuZAorYnl0ZSBsb2NhdGlvbnMuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5vZGUgYWxsb2NhdGlvbiBiaXRtYXA8L0xpdGVyYWw+IGlzIHRyZWF0ZWQgaW4gbXVjaCB0aGUgc2FtZSBmYXNoaW9uLCB3aXRoCit0aGUgc2FtZSBjb21tYW5kcyBhdmFpbGFibGUuCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5GaWxlc3lzdGVtIHNpemUgbGltaXRhdGlvbjwvVGl0bGU+CisKKzxQYXJhPgorV2hpbGUgYW4gZXh0MiBmaWxlc3lzdGVtIGhhcyBhIHNpemUgbGltaXQgb2YgPExpdGVyYWwgcmVtYXA9InR0Ij40IFRCPC9MaXRlcmFsPiwgRVhUMkVEIGN1cnJlbnRseQorPExpdGVyYWwgcmVtYXA9InR0Ij5jYW4ndDwvTGl0ZXJhbD4gaGFuZGxlIGZpbGVzeXN0ZW1zIHdoaWNoIGFyZSA8TGl0ZXJhbCByZW1hcD0idHQiPmJpZ2dlciB0aGFuIDIgR0I8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8UGFyYT4KK1RoaXMgbGltaXRhdGlvbiByZXN1bHRzIGZyb20gbXkgdXNhZ2Ugb2YgPExpdGVyYWwgcmVtYXA9InR0Ij4zMiBiaXQgbG9uZyB2YXJpYWJsZXM8L0xpdGVyYWw+IGFuZAorb2YgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZnNlZWs8L0xpdGVyYWw+IGZpbGVzeXN0ZW0gY2FsbCwgd2hpY2ggY2FuJ3Qgc2VlayB1cCB0byA0IFRCLgorPC9QYXJhPgorCis8UGFyYT4KK0J5IGxvb2tpbmcgaW4gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MiBsaWJyYXJ5PC9MaXRlcmFsPiBzb3VyY2UgY29kZSBieSA8TGl0ZXJhbCByZW1hcD0idHQiPlRoZW9kb3JlIFRzJ288L0xpdGVyYWw+LAorSSBkaXNjb3ZlcmVkIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmxsc2VlazwvTGl0ZXJhbD4gc3lzdGVtIGNhbGwgd2hpY2ggY2FuIHNlZWsgdG8gYQorPExpdGVyYWwgcmVtYXA9InR0Ij42NCBiaXQgdW5zaWduZWQgbG9uZyBsb25nPC9MaXRlcmFsPiBvZmZzZXQuIENvcnJlY3RpbmcgdGhlIHNpdHVhdGlvbiBpcyBub3QKK2RpZmZpY3VsdCBpbiBjb25jZXB0IC0gSSBuZWVkIHRvIGNoYW5nZSBsb25nIGludG8gdW5zaWduZWQgbG9uZyBsb25nIHdoZXJlCithcHByb3ByaWF0ZSBhbmQgbW9kaWZ5IDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlzay5jPC9MaXRlcmFsPiB0byB1c2UgdGhlIGxsc2VlayBzeXN0ZW0gY2FsbC4KKzwvUGFyYT4KKworPFBhcmE+CitIb3dldmVyLCBmaXhpbmcgdGhlIGFib3ZlIGxpbWl0YXRpb24gaW52b2x2ZXMgbWFraW5nIGNoYW5nZXMgaW4gbWFueSBwbGFjZXMKK2luIHRoZSBjb2RlIGFuZCB3aWxsIG9idmlvdXNseSBtYWtlIHRoZSBlbnRpcmUgY29kZSBsZXNzIHN0YWJsZS4gRm9yIHRoYXQKK3JlYXNvbiwgSSBjaG9zZSB0byByZWxlYXNlIEVYVDJFRCBhcyBpdCBpcyBub3cgYW5kIHRvIHBvc3Rwb25lIHRoZSBhYm92ZSBmaXgKK3RvIHRoZSBuZXh0IHJlbGVhc2UuCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5Db25jbHVzaW9uPC9UaXRsZT4KKworPFBhcmE+CitIYWQgSSBrbm93biBpbiBhZHZhbmNlIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGV4dDIgZmlsZXN5c3RlbSwgSSBmZWVsIHRoYXQKK3RoZSByZXN1bHRpbmcgZGVzaWduIHdvdWxkIGhhdmUgYmVlbiBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgcHJlc2VudGVkCitkZXNpZ24gYWJvdmUuCis8L1BhcmE+CisKKzxQYXJhPgorRVhUMkVEIGhhcyBub3cgdHdvIGxldmVscyBvZiBhYnN0cmFjdGlvbiAtIEEgPExpdGVyYWwgcmVtYXA9InR0Ij5nZW5lcmFsPC9MaXRlcmFsPiBmaWxlc3lzdGVtLCBhbmQgYW4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MjwvTGl0ZXJhbD4gZmlsZXN5c3RlbSwgYW5kIHRoZSBzdXJmYWNlIGlzIG1vcmUgb3IgbGVzcyBwcmVwYXJlZCBmb3IgYWRkaXRpb25zCitvZiBvdGhlciBmaWxlc3lzdGVtcy4gSGFkIEkgYXBwcm9hY2hlZCB0aGUgZGVzaWduIGluIHRoZSAiZW5naW5lZXJpbmciIHdheSwKK0kgZ3Vlc3MgdGhhdCB0aGUgZmlyc3QgbGV2ZWwgYWJvdmUgd291bGQgbm90IGhhdmUgZXhpc3RlZC4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPkNvcHlyaWdodDwvVGl0bGU+CisKKzxQYXJhPgorRVhUMkVEIGlzIENvcHlyaWdodCAoQykgMTk5NSBHYWRpIE94bWFuLgorPC9QYXJhPgorCis8UGFyYT4KK0VYVDJFRCBpcyBoZXJlYnkgcGxhY2VkIHVuZGVyIHRoZSBHUEwgLSBHbnUgUHVibGljIExpY2Vuc2UuIFlvdSBhcmUgZnJlZSBhbmQKK3dlbGNvbWUgdG8gY29weSwgdmlldyBhbmQgbW9kaWZ5IHRoZSBzb3VyY2VzLiBNeSBvbmx5IHdpc2ggaXMgdGhhdCBteQorY29weXJpZ2h0IHByZXNlbnRlZCBhYm92ZSB3aWxsIGJlIGxlZnQgYW5kIHRoYXQgYSBsaXN0IG9mIHRoZSBidWcgZml4ZXMsCithZGRlZCBmZWF0dXJlcywgZXRjLCB3aWxsIGJlIHByb3ZpZGVkLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBlbnRpcmUgRVhUMkVEIHByb2plY3QgaXMgYmFzZWQsIG9mLWNvdXJzZSwgb24gdGhlIGtlcm5lbCBzb3VyY2VzLiBUaGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0Mi5kZXNjcmlwdG9yczwvTGl0ZXJhbD4gZGlzdHJpYnV0ZWQgd2l0aCBFWFQyRUQgaXMgYSBzbGlnaHRseSBtb2RpZmllZAordmVyc2lvbiBvZiB0aGUgbWFpbiBleHQyIGluY2x1ZGUgZmlsZSwgL3Vzci9pbmNsdWRlL2xpbnV4L2V4dDImbG93YmFyO2ZzLmguIEZvbGxvd3MKK3RoZSBvcmlnaW5hbCBjb3B5cmlnaHQ6Cis8L1BhcmE+CisKKzxQYXJhPgorCis8UHJvZ3JhbUxpc3Rpbmc+CisvKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiBSZW15IENhcmQgKGNhcmRAbWFzaS5pYnAuZnIpCisgKiBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICBmcm9tCisgKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvbWluaXhfZnMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKi8KKworPC9Qcm9ncmFtTGlzdGluZz4KKworPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+QWNrbm93bGVkZ21lbnRzPC9UaXRsZT4KKworPFBhcmE+CitFWFQyRUQgd2FzIGNvbnN0cnVjdGVkIGFzIGEgc3R1ZGVudCBwcm9qZWN0IGluIHRoZSBzb2Z0d2FyZQorbGFib3JhdG9yeSBvZiB0aGUgZmFjdWx0eSBvZiBlbGVjdHJpY2FsLWVuZ2luZWVyaW5nIGluIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5UZWNobmlvbiAtIElzcmFlbCdzIGluc3RpdHV0ZSBvZiB0ZWNobm9sb2d5PC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPFBhcmE+CitBdCBmaXJzdCwgSSB3b3VsZCBsaWtlIHRvIHRoYW5rIDxMaXRlcmFsIHJlbWFwPSJ0dCI+QXZuZXIgTG90dGVtPC9MaXRlcmFsPiBhbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5Eb2N0b3IgSWxhbmEKK0RhdmlkPC9MaXRlcmFsPiBmb3IgdGhlaXIgaW50ZXJlc3QgYW5kIGFzc2lzdGFuY2UgaW4gdGhpcyBwcm9qZWN0LgorPC9QYXJhPgorCis8UGFyYT4KK0kgd291bGQgYWxzbyBsaWtlIHRvIHRoYW5rIHRoZSBmb2xsb3dpbmcgcGVvcGxlLCB3aG8gd2VyZSBpbnZvbHZlZCBpbiB0aGUKK2Rlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGV4dDIgZmlsZXN5c3RlbSBrZXJuZWwgY29kZSBhbmQgc3VwcG9ydAordXRpbGl0aWVzOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPlJlbXkgQ2FyZDwvTGl0ZXJhbD4KKworV2hvIGRlc2lnbmVkLCBpbXBsZW1lbnRlZCBhbmQgbWFpbnRhaW5zIHRoZSBleHQyIGZpbGVzeXN0ZW0ga2VybmVsCitjb2RlLCBhbmQgc29tZSBvZiB0aGUgZXh0MiB1dGlsaXRpZXMuIDxMaXRlcmFsIHJlbWFwPSJ0dCI+UmVteSBDYXJkPC9MaXRlcmFsPiBpcyBhbHNvIHRoZQorYXV0aG9yIAlvZiBzZXZlcmFsIGhlbHBmdWwgc2xpZGVzIGNvbmNlcm5pbmcgdGhlIGV4dDIgZmlsZXN5c3RlbS4KK1NwZWNpZmljYWxseSwgaGUgaXMgdGhlIGF1dGhvciBvZiA8TGl0ZXJhbCByZW1hcD0idHQiPkZpbGUgTWFuYWdlbWVudCBpbiB0aGUgTGludXgKK0tlcm5lbDwvTGl0ZXJhbD4gYW5kIG9mIDxMaXRlcmFsIHJlbWFwPSJ0dCI+VGhlIFNlY29uZCBFeHRlbmRlZCBGaWxlIFN5c3RlbSAtIEN1cnJlbnQKK1N0YXRlLCBGdXR1cmUgRGV2ZWxvcG1lbnQ8L0xpdGVyYWw+LgorCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPldheW5lIERhdmlzb248L0xpdGVyYWw+CisKK1dobyBkZXNpZ25lZCB0aGUgZXh0MiBmaWxlc3lzdGVtLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij5TdGVwaGVuIFR3ZWVkaWU8L0xpdGVyYWw+CisKK1dobyBoZWxwZWQgZGVzaWduaW5nIHRoZSBleHQyIGZpbGVzeXN0ZW0ga2VybmVsIGNvZGUgYW5kIHdyb3RlIHRoZQorc2xpZGVzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+T3B0aW1pemF0aW9ucyBpbiBGaWxlIFN5c3RlbXM8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij5UaGVvZG9yZSBUcydvPC9MaXRlcmFsPgorCitXaG8gaXMgdGhlIGF1dGhvciBvZiBzZXZlcmFsIGV4dDIgdXRpbGl0aWVzIGFuZCBvZiB0aGUgZXh0MiBsaWJyYXJ5Cis8TGl0ZXJhbCByZW1hcD0idHQiPmxpYmV4dDJmczwvTGl0ZXJhbD4gKHdoaWNoIEkgZGlkbid0IHVzZSwgc2ltcGx5IGJlY2F1c2UgSSBkaWRuJ3Qga25vdworaXQgZXhpc3RzIHdoZW4gSSBzdGFydGVkIHRvIHdvcmsgb24gbXkgcHJvamVjdCkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KK0xhc3RseSwgSSB3b3VsZCBsaWtlIHRvIHRoYW5rLCBvZi1jb3Vyc2UsIDxMaXRlcmFsIHJlbWFwPSJ0dCI+TGludXMgVG9ydmFsZHM8L0xpdGVyYWw+IGFuZCB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+TGludXggY29tbXVuaXR5PC9MaXRlcmFsPiBmb3IgcHJvdmlkaW5nIGFsbCBvZiB1cyB3aXRoIHN1Y2ggYSBncmVhdCBvcGVyYXRpbmcKK3N5c3RlbS4KKzwvUGFyYT4KKworPFBhcmE+CitQbGVhc2UgY29udGFjdCBtZSBpbiBhIGNhc2Ugb2YgYnVnIHJlcG9ydCwgc3VnZ2VzdGlvbnMsIG9yIGp1c3QgYWJvdXQKK2FueXRoaW5nIGNvbmNlcm5pbmcgRVhUMkVELgorPC9QYXJhPgorCis8UGFyYT4KK0Vuam95LAorPC9QYXJhPgorCis8UGFyYT4KK0dhZGkgT3htYW4gJmx0O3RndWRAdG9jaG5hcGMyLnRlY2huaW9uLmFjLmlsJmd0OworPC9QYXJhPgorCis8UGFyYT4KK0hhaWZhLCBBdWd1c3QgOTUKKzwvUGFyYT4KKworPC9TZWN0MT4KKworPC9BcnRpY2xlPgpkaWZmIC0tZ2l0IGEvZXh0MmVkL2RvYy9leHQyZnMtb3ZlcnZpZXcuc2dtbCBiL2V4dDJlZC9kb2MvZXh0MmZzLW92ZXJ2aWV3LnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlYmY1YQotLS0gL2Rldi9udWxsCisrKyBiL2V4dDJlZC9kb2MvZXh0MmZzLW92ZXJ2aWV3LnNnbWwKQEAgLTAsMCArMSwxNTY5IEBACis8IURPQ1RZUEUgQXJ0aWNsZSBQVUJMSUMgIi0vL0RhdmVucG9ydC8vRFREIERvY0Jvb2sgVjMuMC8vRU4iPgorCis8QXJ0aWNsZT4KKworPEFydEhlYWRlcj4KKworPFRpdGxlPlRoZSBleHRlbmRlZC0yIGZpbGVzeXN0ZW0gb3ZlcnZpZXc8L1RpdGxlPgorPEFVVEhPUgorPgorPEZpcnN0TmFtZT5HYWRpIE94bWFuLCB0Z3VkQHRvY2huYXBjMi50ZWNobmlvbi5hYy5pbDwvRmlyc3ROYW1lPgorPC9BVVRIT1IKKz4KKzxQdWJEYXRlPnYwLjEsIEF1Z3VzdCAzIDE5OTU8L1B1YkRhdGU+CisKKzwvQXJ0SGVhZGVyPgorCis8U2VjdDE+Cis8VGl0bGU+UHJlZmFjZTwvVGl0bGU+CisKKzxQYXJhPgorVGhpcyBkb2N1bWVudCBhdHRlbXB0cyB0byBwcmVzZW50IGFuIG92ZXJ2aWV3IG9mIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgb2YKK3RoZSBleHQyIGZpbGVzeXN0ZW0uIEl0IHdhcyB3cml0dGVuIGluIHN1bW1lciA5NSwgd2hpbGUgSSB3YXMgd29ya2luZyBvbiB0aGUgCis8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDIgZmlsZXN5c3RlbSBlZGl0b3IgcHJvamVjdCAoRVhUMkVEKTwvTGl0ZXJhbD4uIAorPC9QYXJhPgorCis8UGFyYT4KK0luIHRoZSBwcm9jZXNzIG9mIGNvbnN0cnVjdGluZyBFWFQyRUQsIEkgYWNxdWlyZWQga25vd2xlZGdlIG9mIHRoZSB2YXJpb3VzIAorZGVzaWduIGFzcGVjdHMgb2YgdGhlIHRoZSBleHQyIGZpbGVzeXN0ZW0uIFRoaXMgZG9jdW1lbnQgaXMgYSByZXN1bHQgb2YgYW4KK2VmZm9ydCB0byBkb2N1bWVudCB0aGlzIGtub3dsZWRnZS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGlzIGlzIG9ubHkgdGhlIGluaXRpYWwgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50LiBJdCBpcyBvYnZpb3VzbHkgbmVpdGhlcgorZXJyb3ItcHJvbmUgbm9yIGNvbXBsZXRlLCBidXQgYXQgbGVhc3QgaXQgcHJvdmlkZXMgYSBzdGFydGluZyBwb2ludC4KKzwvUGFyYT4KKworPFBhcmE+CitJbiB0aGUgcHJvY2VzcyBvZiBsZWFybmluZyB0aGUgc3ViamVjdCwgSSBoYXZlIHVzZWQgdGhlIGZvbGxvd2luZyBzb3VyY2VzIC8KK3Rvb2xzOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlFeHBlcmltZW50aW5nIHdpdGggRVhUMkVELCBhcyBpdCB3YXMgZGV2ZWxvcGVkLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGV4dDIga2VybmVsIHNvdXJjZXM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBtYWluIGV4dDIgaW5jbHVkZSBmaWxlLAorPEZJTEVOQU1FPi91c3IvaW5jbHVkZS9saW51eC9leHQyJmxvd2Jhcjtmcy5oPC9GSUxFTkFNRT4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5IDxGSUxFTkFNRT4vdXNyL3NyYy9saW51eC9mcy9leHQyPC9GSUxFTkFNRT4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgVkZTIGxheWVyIHNvdXJjZXMgKG9ubHkgYSBiaXQpLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBzbGlkZXM6IFRoZSBTZWNvbmQgRXh0ZW5kZWQgRmlsZSBTeXN0ZW0sIEN1cnJlbnQgU3RhdGUsIEZ1dHVyZQorRGV2ZWxvcG1lbnQsIGJ5IDxwZXJzb25uYW1lPjxmaXJzdG5hbWU+UmVteTwvZmlyc3RuYW1lPiA8c3VybmFtZT5DYXJkPC9zdXJuYW1lPjwvcGVyc29ubmFtZT4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgc2xpZGVzOiBPcHRpbWlzYXRpb24gaW4gRmlsZSBTeXN0ZW1zLCBieSA8cGVyc29ubmFtZT48Zmlyc3RuYW1lPlN0ZXBoZW48L2ZpcnN0bmFtZT4gPHN1cm5hbWU+VHdlZWRpZTwvc3VybmFtZT48L3BlcnNvbm5hbWU+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIHZhcmlvdXMgZXh0MiB1dGlsaXRpZXMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+SW50cm9kdWN0aW9uPC9UaXRsZT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5TZWNvbmQgRXh0ZW5kZWQgRmlsZSBTeXN0ZW0gKEV4dDJmcyk8L0xpdGVyYWw+IGlzIHZlcnkgcG9wdWxhciBhbW9uZyBMaW51eAordXNlcnMuIElmIHlvdSB1c2UgTGludXgsIGNoYW5jZXMgYXJlIHRoYXQgeW91IGFyZSB1c2luZyB0aGUgZXh0MiBmaWxlc3lzdGVtLgorPC9QYXJhPgorCis8UGFyYT4KK0V4dDJmcyB3YXMgZGVzaWduZWQgYnkgPHBlcnNvbm5hbWU+PGZpcnN0bmFtZT5SZW15PC9maXJzdG5hbWU+IDxzdXJuYW1lPkNhcmQ8L3N1cm5hbWU+PC9wZXJzb25uYW1lPiBhbmQgPHBlcnNvbm5hbWU+PGZpcnN0bmFtZT5XYXluZTwvZmlyc3RuYW1lPiA8c3VybmFtZT5EYXZpc29uPC9zdXJuYW1lPjwvcGVyc29ubmFtZT4uIEl0IHdhcworaW1wbGVtZW50ZWQgYnkgPHBlcnNvbm5hbWU+PGZpcnN0bmFtZT5SZW15PC9maXJzdG5hbWU+IDxzdXJuYW1lPkNhcmQ8L3N1cm5hbWU+PC9wZXJzb25uYW1lPiBhbmQgd2FzIGZ1cnRoZXIgZW5oYW5jZWQgYnkgPHBlcnNvbm5hbWU+PGZpcnN0bmFtZT5TdGVwaGVuPC9maXJzdG5hbWU+Cis8c3VybmFtZT5Ud2VlZGllPC9zdXJuYW1lPjwvcGVyc29ubmFtZT4gYW5kIDxwZXJzb25uYW1lPjxmaXJzdG5hbWU+VGhlb2RvcmU8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+VHMnbzwvc3VybmFtZT48L3BlcnNvbm5hbWU+LgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBleHQyIGZpbGVzeXN0ZW0gaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQuIEkgd2lsbCBkb2N1bWVudCBoZXJlCit2ZXJzaW9uIDAuNWEsIHdoaWNoIGlzIGRpc3RyaWJ1dGVkIGFsb25nIHdpdGggTGludXggMS4yLnguIEF0IHRoaXMgdGltZSBvZgord3JpdGluZywgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgTGludXggaXMgMS4zLjEzLCBhbmQgdGhlIHZlcnNpb24gb2YgdGhlCitleHQyIGtlcm5lbCBzb3VyY2UgaXMgMC41Yi4gQSBsb3Qgb2YgZmFuY3kgZW5oYW5jZW1lbnRzIGFyZSBwbGFubmVkIGZvciB0aGUKK2V4dDIgZmlsZXN5c3RlbSBpbiBMaW51eCAxLjMsIHNvIHN0YXkgdHVuZWQuCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5BIGZpbGVzeXN0ZW0gLSBXaHkgZG8gd2UgbmVlZCBpdD88L1RpdGxlPgorCis8UGFyYT4KK0kgdGhvdWdodCB0aGF0IGJlZm9yZSB3ZSBkaXZlIGludG8gdGhlIHZhcmlvdXMgc21hbGwgZGV0YWlscywgSSdsbCByZXNlcnZlIGEKK2ZldyBtaW51dGVzIGZvciB0aGUgZGlzY3Vzc2lvbiBvZiBmaWxlc3lzdGVtcyBmcm9tIGEgZ2VuZXJhbCBwb2ludCBvZiB2aWV3LgorPC9QYXJhPgorCis8UGFyYT4KK0EgPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlc3lzdGVtPC9MaXRlcmFsPiBjb25zaXN0cyBvZiB0d28gd29yZCAtIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZTwvTGl0ZXJhbD4gYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3lzdGVtPC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPFBhcmE+CitFdmVyeW9uZSBrbm93cyB0aGUgbWVhbmluZyBvZiB0aGUgd29yZCA8TGl0ZXJhbCByZW1hcD0idHQiPmZpbGU8L0xpdGVyYWw+IC0gQSBidW5jaCBvZiBkYXRhIHB1dAorc29tZXdoZXJlLiB3aGVyZT8gVGhpcyBpcyBhbiBpbXBvcnRhbnQgcXVlc3Rpb24uIEksIGZvciBleGFtcGxlLCB1c3VhbGx5Cit0aHJvdyBhbG1vc3QgZXZlcnl0aGluZyBpbnRvIGEgc2luZ2xlIGRyYXdlciwgYW5kIGhhdmUgZGlmZmljdWx0aWVzIGZpbmRpbmcKK3NvbWV0aGluZyBsYXRlci4KKzwvUGFyYT4KKworPFBhcmE+CitUaGlzIGlzIHdoZXJlIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnN5c3RlbTwvTGl0ZXJhbD4gY29tZXMgaW4gLSBJbnN0ZWFkIG9mIGp1c3QgdGhyb3dpbmcgdGhlIGRhdGEKK3RvIHRoZSBkZXZpY2UsIHdlIGdlbmVyYWxpemUgYW5kIGNvbnN0cnVjdCBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3lzdGVtPC9MaXRlcmFsPiB3aGljaCB3aWxsCit2aXJ0dWFsaXplIGZvciB1cyBhIG5pY2UgYW5kIG9yZGVyZWQgc3RydWN0dXJlIGluIHdoaWNoIHdlIGNvdWxkIGFycmFuZ2Ugb3VyCitkYXRhIGluIG11Y2ggdGhlIHNhbWUgd2F5IGFzIGJvb2tzIGFyZSBhcnJhbmdlZCBpbiBhIGxpYnJhcnkuIFRoZSBwdXJwb3NlIG9mCit0aGUgZmlsZXN5c3RlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0byBtYWtlIGl0IGVhc3kgZm9yIHVzIHRvIHVwZGF0ZSBhbmQKK21haW50YWluIG91ciBkYXRhLgorPC9QYXJhPgorCis8UGFyYT4KK05vcm1hbGx5LCBieSA8TGl0ZXJhbCByZW1hcD0idHQiPm1vdW50aW5nPC9MaXRlcmFsPiBmaWxlc3lzdGVtcywgd2UganVzdCB1c2UgdGhlIG5pY2UgYW5kIGxvZ2ljYWwKK3ZpcnR1YWwgc3RydWN0dXJlLiBIb3dldmVyLCB0aGUgZGlzayBrbm93cyBub3RoaW5nIGFib3V0IHRoYXQgLSBUaGUgZGV2aWNlCitkcml2ZXIgdmlld3MgdGhlIGRpc2sgYXMgYSBsYXJnZSBjb250aW51b3VzIHBhcGVyIGluIHdoaWNoIHdlIGNhbiB3cml0ZSBub3Rlcword2hlcmV2ZXIgd2Ugd2lzaC4gSXQgaXMgdGhlIHRhc2sgb2YgdGhlIGZpbGVzeXN0ZW0gbWFuYWdlbWVudCBjb2RlIHRvIHN0b3JlCitib29ra2VlcGluZyBpbmZvcm1hdGlvbiB3aGljaCB3aWxsIHNlcnZlIHRoZSBrZXJuZWwgZm9yIHNob3dpbmcgdXMgdGhlIG5pY2UKK2FuZCBvcmRlcmVkIHZpcnR1YWwgc3RydWN0dXJlLgorPC9QYXJhPgorCis8UGFyYT4KK0luIHRoaXMgZG9jdW1lbnQsIHdlIGNvbnNpZGVyIG9uZSBwYXJ0aWN1bGFyIGFkbWluaXN0cmF0aXZlIHN0cnVjdHVyZSAtIFRoZQorU2Vjb25kIEV4dGVuZGVkIEZpbGVzeXN0ZW0uCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5UaGUgTGludXggVkZTIGxheWVyPC9UaXRsZT4KKworPFBhcmE+CitXaGVuIExpbnV4IHdhcyBmaXJzdCBkZXZlbG9wZWQsIGl0IHN1cHBvcnRlZCBvbmx5IG9uZSBmaWxlc3lzdGVtIC0gVGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPk1pbml4PC9MaXRlcmFsPiBmaWxlc3lzdGVtLiBUb2RheSwgTGludXggaGFzIHRoZSBhYmlsaXR5IHRvIHN1cHBvcnQgc2V2ZXJhbAorZmlsZXN5c3RlbXMgY29uY3VycmVudGx5LiBUaGlzIHdhcyBkb25lIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YgYW5vdGhlciBsYXllcgorYmV0d2VlbiB0aGUga2VybmVsIGFuZCB0aGUgZmlsZXN5c3RlbSBjb2RlIC0gVGhlIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGtlcm5lbCAic3BlYWtzIiB3aXRoIHRoZSBWRlMgbGF5ZXIuIFRoZSBWRlMgbGF5ZXIgcGFzc2VzIHRoZSBrZXJuZWwncworcmVxdWVzdCB0byB0aGUgcHJvcGVyIGZpbGVzeXN0ZW0gbWFuYWdlbWVudCBjb2RlLiBJIGhhdmVuJ3QgbGVhcm5lZCBtdWNoIG9mCit0aGUgVkZTIGxheWVyIGFzIEkgZGlkbid0IG5lZWQgaXQgZm9yIHRoZSBjb25zdHJ1Y3Rpb24gb2YgRVhUMkVEIHNvIHRoYXQgSQorY2FuJ3QgZWxhYm9yYXRlIG9uIGl0LiBKdXN0IGJlIGF3YXJlIHRoYXQgaXQgZXhpc3RzLgorPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+QWJvdXQgYmxvY2tzIGFuZCBibG9jayBncm91cHM8L1RpdGxlPgorCis8UGFyYT4KK0luIG9yZGVyIHRvIGVhc2UgbWFuYWdlbWVudCwgdGhlIGV4dDIgZmlsZXN5c3RlbSBsb2dpY2FsbHkgZGl2aWRlcyB0aGUgZGlzaworaW50byBzbWFsbCB1bml0cyBjYWxsZWQgPExpdGVyYWwgcmVtYXA9InR0Ij5ibG9ja3M8L0xpdGVyYWw+LiBBIGJsb2NrIGlzIHRoZSBzbWFsbGVzdCB1bml0IHdoaWNoCitjYW4gYmUgYWxsb2NhdGVkLiBFYWNoIGJsb2NrIGluIHRoZSBmaWxlc3lzdGVtIGNhbiBiZSA8TGl0ZXJhbCByZW1hcD0idHQiPmFsbG9jYXRlZDwvTGl0ZXJhbD4gb3IKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZnJlZTwvTGl0ZXJhbD4uCis8Rk9PVE5PVEU+CisKKzxQYXJhPgorVGhlIEV4dDJmcyBzb3VyY2UgY29kZSByZWZlcnMgdG8gdGhlIGNvbmNlcHQgb2YgPExpdGVyYWwgcmVtYXA9InR0Ij5mcmFnbWVudHM8L0xpdGVyYWw+LCB3aGljaCBJCitiZWxpZXZlIGFyZSBzdXBwb3NlZCB0byBiZSBzdWItYmxvY2sgYWxsb2NhdGlvbnMuIEFzIGZhciBhcyBJIGtub3csCitmcmFnbWVudHMgYXJlIGN1cnJlbnRseSB1bnN1cHBvcnRlZCBpbiBFeHQyZnMuCis8L1BhcmE+CisKKzwvRk9PVE5PVEU+CisKK1RoZSBibG9jayBzaXplIGNhbiBiZSBzZWxlY3RlZCB0byBiZSAxMDI0LCAyMDQ4IG9yIDQwOTYgYnl0ZXMgd2hlbiBjcmVhdGluZwordGhlIGZpbGVzeXN0ZW0uCis8L1BhcmE+CisKKzxQYXJhPgorRXh0MmZzIGdyb3VwcyB0b2dldGhlciBhIGZpeGVkIG51bWJlciBvZiBzZXF1ZW50aWFsIGJsb2NrcyBpbnRvIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5ncm91cAorYmxvY2s8L0xpdGVyYWw+LiBUaGUgcmVzdWx0aW5nIHNpdHVhdGlvbiBpcyB0aGF0IHRoZSBmaWxlc3lzdGVtIGlzIG1hbmFnZWQgYXMgYQorc2VyaWVzIG9mIGdyb3VwIGJsb2Nrcy4gVGhpcyBpcyBkb25lIGluIG9yZGVyIHRvIGtlZXAgcmVsYXRlZCBpbmZvcm1hdGlvbgorcGh5c2ljYWxseSBjbG9zZSBvbiB0aGUgZGlzayBhbmQgdG8gZWFzZSB0aGUgbWFuYWdlbWVudCB0YXNrLiBBcyBhIHJlc3VsdCwKK211Y2ggb2YgdGhlIGZpbGVzeXN0ZW0gbWFuYWdlbWVudCByZWR1Y2VzIHRvIG1hbmFnZW1lbnQgb2YgYSBzaW5nbGUgYmxvY2tzCitncm91cC4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSB2aWV3IG9mIGlub2RlcyBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIGEgYmxvY2tzIGdyb3VwPC9UaXRsZT4KKworPFBhcmE+CitFYWNoIGZpbGUgaW4gdGhlIGZpbGVzeXN0ZW0gaXMgcmVzZXJ2ZWQgYSBzcGVjaWFsIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5vZGU8L0xpdGVyYWw+LiBJIGRvbid0IHdhbnQKK3RvIGV4cGxhaW4gaW5vZGVzIG5vdy4gUmF0aGVyLCBJIHdvdWxkIGxpa2UgdG8gdHJlYXQgaXQgYXMgYW5vdGhlciByZXNvdXJjZSwKK211Y2ggbGlrZSBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YmxvY2s8L0xpdGVyYWw+IC0gRWFjaCBibG9ja3MgZ3JvdXAgY29udGFpbnMgYSBsaW1pdGVkIG51bWJlciBvZgoraW5vZGUsIHdoaWxlIGFueSBzcGVjaWZpYyBpbm9kZSBjYW4gYmUgPExpdGVyYWwgcmVtYXA9InR0Ij5hbGxvY2F0ZWQ8L0xpdGVyYWw+IG9yCis8TGl0ZXJhbCByZW1hcD0idHQiPnVuYWxsb2NhdGVkPC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSBncm91cCBkZXNjcmlwdG9yczwvVGl0bGU+CisKKzxQYXJhPgorRWFjaCBibG9ja3MgZ3JvdXAgaXMgYWNjb21wYW5pZWQgYnkgYSA8TGl0ZXJhbCByZW1hcD0idHQiPmdyb3VwIGRlc2NyaXB0b3I8L0xpdGVyYWw+LiBUaGUgZ3JvdXAKK2Rlc2NyaXB0b3Igc3VtbWFyaXplcyBzb21lIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWMgZ3JvdXAKK2Jsb2NrLiBGb2xsb3dzIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBncm91cCBkZXNjcmlwdG9yLCBhcyBkZWZpbmVkIGluCis8RklMRU5BTUU+L3Vzci9pbmNsdWRlL2xpbnV4L2V4dDImbG93YmFyO2ZzLmg8L0ZJTEVOQU1FPjoKKzwvUGFyYT4KKworPFBhcmE+CisKKzxQcm9ncmFtTGlzdGluZz4KK3N0cnVjdCBleHQyX2dyb3VwX2Rlc2MKK3sKKwlfX3UzMgliZ19ibG9ja19iaXRtYXA7CS8qIEJsb2NrcyBiaXRtYXAgYmxvY2sgKi8KKwlfX3UzMgliZ19pbm9kZV9iaXRtYXA7CS8qIElub2RlcyBiaXRtYXAgYmxvY2sgKi8KKwlfX3UzMgliZ19pbm9kZV90YWJsZTsJCS8qIElub2RlcyB0YWJsZSBibG9jayAqLworCV9fdTE2CWJnX2ZyZWVfYmxvY2tzX2NvdW50OwkvKiBGcmVlIGJsb2NrcyBjb3VudCAqLworCV9fdTE2CWJnX2ZyZWVfaW5vZGVzX2NvdW50OwkvKiBGcmVlIGlub2RlcyBjb3VudCAqLworCV9fdTE2CWJnX3VzZWRfZGlyc19jb3VudDsJLyogRGlyZWN0b3JpZXMgY291bnQgKi8KKwlfX3UxNgliZ19wYWQ7CisJX191MzIJYmdfcmVzZXJ2ZWRbM107Cit9OworPC9Qcm9ncmFtTGlzdGluZz4KKworPC9QYXJhPgorCis8UGFyYT4KK1RoZSBsYXN0IHRocmVlIHZhcmlhYmxlczogPExpdGVyYWwgcmVtYXA9InR0Ij5iZyZsb3diYXI7ZnJlZSZsb3diYXI7YmxvY2tzJmxvd2Jhcjtjb3VudCwgYmcmbG93YmFyO2ZyZWUmbG93YmFyO2lub2RlcyZsb3diYXI7Y291bnQgYW5kIGJnJmxvd2Jhcjt1c2VkJmxvd2JhcjtkaXJzJmxvd2Jhcjtjb3VudDwvTGl0ZXJhbD4gcHJvdmlkZSBzdGF0aXN0aWNzIGFib3V0IHRoZSB1c2Ugb2YgdGhlIHRocmVlCityZXNvdXJjZXMgaW4gYSBibG9ja3MgZ3JvdXAgLSBUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5ibG9ja3M8L0xpdGVyYWw+LCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5pbm9kZXM8L0xpdGVyYWw+IGFuZCB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlyZWN0b3JpZXM8L0xpdGVyYWw+LiBJIGJlbGlldmUgdGhhdCB0aGV5IGFyZSB1c2VkIGJ5IHRoZSBrZXJuZWwgZm9yIGJhbGFuY2luZwordGhlIGxvYWQgYmV0d2VlbiB0aGUgdmFyaW91cyBibG9ja3MgZ3JvdXBzLgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+YmcmbG93YmFyO2Jsb2NrJmxvd2JhcjtiaXRtYXA8L0xpdGVyYWw+IGNvbnRhaW5zIHRoZSBibG9jayBudW1iZXIgb2YgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YmxvY2sgYWxsb2NhdGlvbgorYml0bWFwIGJsb2NrPC9MaXRlcmFsPi4gVGhpcyBpcyB1c2VkIHRvIGFsbG9jYXRlIC8gZGVhbGxvY2F0ZSBlYWNoIGJsb2NrIGluIHRoZQorc3BlY2lmaWMgYmxvY2tzIGdyb3VwLgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+YmcmbG93YmFyO2lub2RlJmxvd2JhcjtiaXRtYXA8L0xpdGVyYWw+IGlzIGZ1bGx5IGFuYWxvZ291cyB0byB0aGUgcHJldmlvdXMgdmFyaWFibGUgLSBJdAorY29udGFpbnMgdGhlIGJsb2NrIG51bWJlciBvZiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5pbm9kZSBhbGxvY2F0aW9uIGJpdG1hcCBibG9jazwvTGl0ZXJhbD4sIHdoaWNoCitpcyB1c2VkIHRvIGFsbG9jYXRlIC8gZGVhbGxvY2F0ZSBlYWNoIHNwZWNpZmljIGlub2RlIGluIHRoZSBmaWxlc3lzdGVtLgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+YmcmbG93YmFyO2lub2RlJmxvd2Jhcjt0YWJsZTwvTGl0ZXJhbD4gY29udGFpbnMgdGhlIGJsb2NrIG51bWJlciBvZiB0aGUgc3RhcnQgb2YgdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPmlub2RlIHRhYmxlIG9mIHRoZSBjdXJyZW50IGJsb2NrcyBncm91cDwvTGl0ZXJhbD4uIFRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmlub2RlIHRhYmxlPC9MaXRlcmFsPiBpcworanVzdCB0aGUgYWN0dWFsIGlub2RlcyB3aGljaCBhcmUgcmVzZXJ2ZWQgZm9yIHRoZSBjdXJyZW50IGJsb2NrLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBibG9jayBiaXRtYXAgYmxvY2ssIGlub2RlIGJpdG1hcCBibG9jayBhbmQgdGhlIGlub2RlIHRhYmxlIGFyZSBjcmVhdGVkCit3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGdyb3VwIGRlc2NyaXB0b3JzIGFyZSBwbGFjZWQgb25lIGFmdGVyIHRoZSBvdGhlci4gVG9nZXRoZXIgdGhleSBtYWtlIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5ncm91cCBkZXNjcmlwdG9ycyB0YWJsZTwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxQYXJhPgorRWFjaCBibG9ja3MgZ3JvdXAgY29udGFpbnMgdGhlIGVudGlyZSB0YWJsZSBvZiBncm91cCBkZXNjcmlwdG9ycyBpbiBpdHMKK3NlY29uZCBibG9jaywgcmlnaHQgYWZ0ZXIgdGhlIHN1cGVyYmxvY2suIEhvd2V2ZXIsIG9ubHkgdGhlIGZpcnN0IGNvcHkgKGluCitncm91cCAwKSBpcyBhY3R1YWxseSB1c2VkIGJ5IHRoZSBrZXJuZWwuIFRoZSBvdGhlciBjb3BpZXMgYXJlIHRoZXJlIGZvcgorYmFja3VwIHB1cnBvc2VzIGFuZCBjYW4gYmUgb2YgdXNlIGlmIHRoZSBtYWluIGNvcHkgZ2V0cyBjb3JydXB0ZWQuCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5UaGUgYmxvY2sgYml0bWFwIGFsbG9jYXRpb24gYmxvY2s8L1RpdGxlPgorCis8UGFyYT4KK0VhY2ggYmxvY2tzIGdyb3VwIGNvbnRhaW5zIG9uZSBzcGVjaWFsIGJsb2NrIHdoaWNoIGlzIGFjdHVhbGx5IGEgbWFwIG9mIHRoZQorZW50aXJlIGJsb2NrcyBpbiB0aGUgZ3JvdXAsIHdpdGggcmVzcGVjdCB0byB0aGVpciBhbGxvY2F0aW9uIHN0YXR1cy4gRWFjaAorPExpdGVyYWwgcmVtYXA9InR0Ij5iaXQ8L0xpdGVyYWw+IGluIHRoZSBibG9jayBiaXRtYXAgaW5kaWNhdGVkIHdoZXRoZXIgYSBzcGVjaWZpYyBibG9jayBpbiB0aGUKK2dyb3VwIGlzIHVzZWQgb3IgZnJlZS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgZm9ybWF0IGlzIGFjdHVhbGx5IHF1aXRlIHNpbXBsZSAtIEp1c3QgdmlldyB0aGUgZW50aXJlIGJsb2NrIGFzIGEgc2VyaWVzCitvZiBiaXRzLiBGb3IgZXhhbXBsZSwKKzwvUGFyYT4KKworPFBhcmE+CitTdXBwb3NlIHRoZSBibG9jayBzaXplIGlzIDEwMjQgYnl0ZXMuIEFzIHN1Y2gsIHRoZXJlIGlzIGEgcGxhY2UgZm9yCisxMDI0Kjg9ODE5MiBibG9ja3MgaW4gYSBncm91cCBibG9jay4gVGhpcyBudW1iZXIgaXMgb25lIG9mIHRoZSBmaWVsZHMgaW4gdGhlCitmaWxlc3lzdGVtJ3MgPExpdGVyYWwgcmVtYXA9InR0Ij5zdXBlcmJsb2NrPC9MaXRlcmFsPiwgd2hpY2ggd2lsbCBiZSBleHBsYWluZWQgbGF0ZXIuCis8L1BhcmE+CisKKzxQYXJhPgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlCbG9jayAwIGluIHRoZSBibG9ja3MgZ3JvdXAgaXMgbWFuYWdlZCBieSBiaXQgMCBvZiBieXRlIDAgaW4gdGhlIGJpdG1hcAorYmxvY2suCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlCbG9jayA3IGluIHRoZSBibG9ja3MgZ3JvdXAgaXMgbWFuYWdlZCBieSBiaXQgNyBvZiBieXRlIDAgaW4gdGhlIGJpdG1hcAorYmxvY2suCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlCbG9jayA4IGluIHRoZSBibG9ja3MgZ3JvdXAgaXMgbWFuYWdlZCBieSBiaXQgMCBvZiBieXRlIDEgaW4gdGhlIGJpdG1hcAorYmxvY2suCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlCbG9jayA4MTkxIGluIHRoZSBibG9ja3MgZ3JvdXAgaXMgbWFuYWdlZCBieSBiaXQgNyBvZiBieXRlIDEwMjMgaW4gdGhlCitiaXRtYXAgCWJsb2NrLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPFBhcmE+CitBIHZhbHVlIG9mICI8TGl0ZXJhbCByZW1hcD0idHQiPjE8L0xpdGVyYWw+IiBpbiB0aGUgYXBwcm9wcmlhdGUgYml0IHNpZ25hbHMgdGhhdCB0aGUgYmxvY2sgaXMKK2FsbG9jYXRlZCwgd2hpbGUgYSB2YWx1ZSBvZiAiPExpdGVyYWwgcmVtYXA9InR0Ij4wPC9MaXRlcmFsPiIgc2lnbmFscyB0aGF0IHRoZSBibG9jayBpcwordW5hbGxvY2F0ZWQuCis8L1BhcmE+CisKKzxQYXJhPgorWW91IHdpbGwgcHJvYmFibHkgbm90aWNlIHRoYXQgdHlwaWNhbGx5LCBhbGwgdGhlIGJpdHMgaW4gYSBieXRlIGNvbnRhaW4gdGhlCitzYW1lIHZhbHVlLCBtYWtpbmcgdGhlIGJ5dGUncyB2YWx1ZSA8TGl0ZXJhbCByZW1hcD0idHQiPjA8L0xpdGVyYWw+IG9yIDxMaXRlcmFsIHJlbWFwPSJ0dCI+MGZmaDwvTGl0ZXJhbD4uIFRoaXMgaXMgZG9uZSBieQordGhlIGtlcm5lbCBvbiBwdXJwb3NlIGluIG9yZGVyIHRvIGdyb3VwIHJlbGF0ZWQgZGF0YSBpbiBwaHlzaWNhbGx5IGNsb3NlCitibG9ja3MsIHNpbmNlIHRoZSBwaHlzaWNhbCBkZXZpY2UgaXMgdXN1YWxseSBvcHRpbWl6ZWQgdG8gaGFuZGxlIHN1Y2ggYSBjbG9zZQorcmVsYXRpb25zaGlwLgorPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+VGhlIGlub2RlIGFsbG9jYXRpb24gYml0bWFwPC9UaXRsZT4KKworPFBhcmE+CitUaGUgZm9ybWF0IG9mIHRoZSBpbm9kZSBhbGxvY2F0aW9uIGJpdG1hcCBibG9jayBpcyBleGFjdGx5IGxpa2UgdGhlIGZvcm1hdCBvZgordGhlIGJsb2NrIGFsbG9jYXRpb24gYml0bWFwIGJsb2NrLiBUaGUgZXhwbGFuYXRpb24gYWJvdmUgaXMgdmFsaWQgaGVyZSwgd2l0aAordGhlIHdvcmsgPExpdGVyYWwgcmVtYXA9InR0Ij5ibG9jazwvTGl0ZXJhbD4gcmVwbGFjZWQgYnkgPExpdGVyYWwgcmVtYXA9InR0Ij5pbm9kZTwvTGl0ZXJhbD4uIFR5cGljYWxseSwgdGhlcmUgYXJlIG11Y2ggbGVzcworaW5vZGVzIHRoZW4gYmxvY2tzIGluIGEgYmxvY2tzIGdyb3VwIGFuZCB0aHVzIG9ubHkgcGFydCBvZiB0aGUgaW5vZGUgYml0bWFwCitibG9jayBpcyB1c2VkLiBUaGUgbnVtYmVyIG9mIGlub2RlcyBpbiBhIGJsb2NrcyBncm91cCBpcyBhbm90aGVyIHZhcmlhYmxlCit3aGljaCBpcyBsaXN0ZWQgaW4gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3VwZXJibG9jazwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5PbiB0aGUgaW5vZGUgYW5kIHRoZSBpbm9kZSB0YWJsZXM8L1RpdGxlPgorCis8UGFyYT4KK0FuIGlub2RlIGlzIGEgbWFpbiByZXNvdXJjZSBpbiB0aGUgZXh0MiBmaWxlc3lzdGVtLiBJdCBpcyB1c2VkIGZvciB2YXJpb3VzCitwdXJwb3NlcywgYnV0IHRoZSBtYWluIHR3byBhcmU6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVN1cHBvcnQgb2YgZmlsZXMKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVN1cHBvcnQgb2YgZGlyZWN0b3JpZXMKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzxQYXJhPgorRWFjaCBmaWxlLCBmb3IgZXhhbXBsZSwgd2lsbCBhbGxvY2F0ZSBvbmUgaW5vZGUgZnJvbSB0aGUgZmlsZXN5c3RlbQorcmVzb3VyY2VzLgorPC9QYXJhPgorCis8UGFyYT4KK0FuIGV4dDIgZmlsZXN5c3RlbSBoYXMgYSB0b3RhbCBudW1iZXIgb2YgYXZhaWxhYmxlIGlub2RlcyB3aGljaCBpcyBkZXRlcm1pbmVkCit3aGlsZSBjcmVhdGluZyB0aGUgZmlsZXN5c3RlbS4gV2hlbiBhbGwgdGhlIGlub2RlcyBhcmUgdXNlZCwgZm9yIGV4YW1wbGUsIHlvdQord2lsbCBub3QgYmUgYWJsZSB0byBjcmVhdGUgYW4gYWRkaXRpb25hbCBmaWxlIGV2ZW4gdGhvdWdoIHRoZXJlIHdpbGwgc3RpbGwKK2JlIGZyZWUgYmxvY2tzIG9uIHRoZSBmaWxlc3lzdGVtLiAKKzwvUGFyYT4KKworPFBhcmE+CitFYWNoIGlub2RlIHRha2VzIHVwIDEyOCBieXRlcyBpbiB0aGUgZmlsZXN5c3RlbS4gQnkgZGVmYXVsdCwgPExpdGVyYWwgcmVtYXA9InR0Ij5ta2UyZnM8L0xpdGVyYWw+CityZXNlcnZlcyBhbiBpbm9kZSBmb3IgZWFjaCA0MDk2IGJ5dGVzIG9mIHRoZSBmaWxlc3lzdGVtIHNwYWNlLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBpbm9kZXMgYXJlIHBsYWNlZCBpbiBzZXZlcmFsIHRhYmxlcywgZWFjaCBvZiB3aGljaCBjb250YWlucyB0aGUgc2FtZQorbnVtYmVyIG9mIGlub2RlcyBhbmQgaXMgcGxhY2VkIGF0IGEgZGlmZmVyZW50IGJsb2NrcyBncm91cC4gVGhlIGdvYWwgaXMgdG8KK3BsYWNlIGlub2RlcyBhbmQgdGhlaXIgcmVsYXRlZCBmaWxlcyBpbiB0aGUgc2FtZSBibG9ja3MgZ3JvdXAgYmVjYXVzZSBvZgorbG9jYWxpdHkgYXJndW1lbnRzLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBudW1iZXIgb2YgaW5vZGVzIGluIGEgYmxvY2tzIGdyb3VwIGlzIGF2YWlsYWJsZSBpbiB0aGUgc3VwZXJibG9jayB2YXJpYWJsZQorPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2Jhcjtpbm9kZXMmbG93YmFyO3BlciZsb3diYXI7Z3JvdXA8L0xpdGVyYWw+LiBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgYXJlIDIwMDAgaW5vZGVzIHBlciBncm91cCwKK2dyb3VwIDAgd2lsbCBjb250YWluIHRoZSBpbm9kZXMgMS0yMDAwLCBncm91cCAyIHdpbGwgY29udGFpbiB0aGUgaW5vZGVzCisyMDAxLTQwMDAsIGFuZCBzbyBvbi4KKzwvUGFyYT4KKworPFBhcmE+CitFYWNoIGlub2RlIHRhYmxlIGlzIGFjY2Vzc2VkIGZyb20gdGhlIGdyb3VwIGRlc2NyaXB0b3Igb2YgdGhlIHNwZWNpZmljCitibG9ja3MgZ3JvdXAgd2hpY2ggY29udGFpbnMgdGhlIHRhYmxlLgorPC9QYXJhPgorCis8UGFyYT4KK0ZvbGxvd3MgdGhlIHN0cnVjdHVyZSBvZiBhbiBpbm9kZSBpbiBFeHQyZnM6Cis8L1BhcmE+CisKKzxQYXJhPgorCis8UHJvZ3JhbUxpc3Rpbmc+CitzdHJ1Y3QgZXh0Ml9pbm9kZSB7CisJX191MTYJaV9tb2RlOwkJLyogRmlsZSBtb2RlICovCisJX191MTYJaV91aWQ7CQkvKiBPd25lciBVaWQgKi8KKwlfX3UzMglpX3NpemU7CQkvKiBTaXplIGluIGJ5dGVzICovCisJX191MzIJaV9hdGltZTsJLyogQWNjZXNzIHRpbWUgKi8KKwlfX3UzMglpX2N0aW1lOwkvKiBDcmVhdGlvbiB0aW1lICovCisJX191MzIJaV9tdGltZTsJLyogTW9kaWZpY2F0aW9uIHRpbWUgKi8KKwlfX3UzMglpX2R0aW1lOwkvKiBEZWxldGlvbiBUaW1lICovCisJX191MTYJaV9naWQ7CQkvKiBHcm91cCBJZCAqLworCV9fdTE2CWlfbGlua3NfY291bnQ7CS8qIExpbmtzIGNvdW50ICovCisJX191MzIJaV9ibG9ja3M7CS8qIEJsb2NrcyBjb3VudCAqLworCV9fdTMyCWlfZmxhZ3M7CS8qIEZpbGUgZmxhZ3MgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX3UzMiAgbF9pX3Jlc2VydmVkMTsKKwkJfSBsaW51eDE7CisJCXN0cnVjdCB7CisJCQlfX3UzMiAgaF9pX3RyYW5zbGF0b3I7CisJCX0gaHVyZDE7CisJCXN0cnVjdCB7CisJCQlfX3UzMiAgbV9pX3Jlc2VydmVkMTsKKwkJfSBtYXNpeDE7CisJfSBvc2QxOwkJCQkvKiBPUyBkZXBlbmRlbnQgMSAqLworCV9fdTMyCWlfYmxvY2tbRVhUMl9OX0JMT0NLU107LyogUG9pbnRlcnMgdG8gYmxvY2tzICovCisJX191MzIJaV92ZXJzaW9uOwkvKiBGaWxlIHZlcnNpb24gKGZvciBORlMpICovCisJX191MzIJaV9maWxlX2FjbDsJLyogRmlsZSBBQ0wgKi8KKwlfX3UzMglpX2Rpcl9hY2w7CS8qIERpcmVjdG9yeSBBQ0wgKi8KKwlfX3UzMglpX2ZhZGRyOwkvKiBGcmFnbWVudCBhZGRyZXNzICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX191OAlsX2lfZnJhZzsJLyogRnJhZ21lbnQgbnVtYmVyICovCisJCQlfX3U4CWxfaV9mc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCQkJX191MTYJaV9wYWQxOworCQkJX191MzIJbF9pX3Jlc2VydmVkMlsyXTsKKwkJfSBsaW51eDI7CisJCXN0cnVjdCB7CisJCQlfX3U4CWhfaV9mcmFnOwkvKiBGcmFnbWVudCBudW1iZXIgKi8KKwkJCV9fdTgJaF9pX2ZzaXplOwkvKiBGcmFnbWVudCBzaXplICovCisJCQlfX3UxNgloX2lfbW9kZV9oaWdoOworCQkJX191MTYJaF9pX3VpZF9oaWdoOworCQkJX191MTYJaF9pX2dpZF9oaWdoOworCQkJX191MzIJaF9pX2F1dGhvcjsKKwkJfSBodXJkMjsKKwkJc3RydWN0IHsKKwkJCV9fdTgJbV9pX2ZyYWc7CS8qIEZyYWdtZW50IG51bWJlciAqLworCQkJX191OAltX2lfZnNpemU7CS8qIEZyYWdtZW50IHNpemUgKi8KKwkJCV9fdTE2CW1fcGFkMTsKKwkJCV9fdTMyCW1faV9yZXNlcnZlZDJbMl07CisJCX0gbWFzaXgyOworCX0gb3NkMjsJCQkJLyogT1MgZGVwZW5kZW50IDIgKi8KK307Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5UaGUgYWxsb2NhdGVkIGJsb2NrczwvVGl0bGU+CisKKzxQYXJhPgorVGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgb2YgYW4gaW5vZGUgaXMgdG8gZ3JvdXAgdG9nZXRoZXIgYSBzZXJpZXMgb2YKK2FsbG9jYXRlZCBibG9ja3MuIFRoZXJlIGlzIG5vIGxpbWl0YXRpb24gb24gdGhlIGFsbG9jYXRlZCBibG9ja3MgLSBFYWNoCitibG9jayBjYW4gYmUgYWxsb2NhdGVkIHRvIGVhY2ggaW5vZGUuIE5ldmVydGhlbGVzcywgYmxvY2sgYWxsb2NhdGlvbiB3aWxsCit1c3VhbGx5IGJlIGRvbmUgaW4gc2VyaWVzIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBsb2NhbGl0eSBwcmluY2lwbGUuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGlub2RlIGlzIG5vdCBhbHdheXMgdXNlZCBpbiB0aGF0IHdheS4gSSB3aWxsIG5vdyBleHBsYWluIHRoZSBhbGxvY2F0aW9uCitvZiBibG9ja3MsIGFzc3VtaW5nIHRoYXQgdGhlIGN1cnJlbnQgaW5vZGUgdHlwZSBpbmRlZWQgcmVmZXJzIHRvIGEgbGlzdCBvZgorYWxsb2NhdGVkIGJsb2Nrcy4KKzwvUGFyYT4KKworPFBhcmE+CitJdCB3YXMgZm91bmQgZXhwZXJpbWVudGx5IHRoYXQgbWFueSBvZiB0aGUgZmlsZXMgaW4gdGhlIGZpbGVzeXN0ZW0gYXJlCithY3R1YWxseSBxdWl0ZSBzbWFsbC4gVG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBlZmZlY3QsIHRoZSBrZXJuZWwgcHJvdmlkZXMKK3N0b3JhZ2Ugb2YgdXAgdG8gMTIgYmxvY2sgbnVtYmVycyBpbiB0aGUgaW5vZGUgaXRzZWxmLiBUaG9zZSBibG9ja3MgYXJlCitjYWxsZWQgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXJlY3QgYmxvY2tzPC9MaXRlcmFsPi4gVGhlIGFkdmFudGFnZSBpcyB0aGF0IG9uY2UgdGhlIGtlcm5lbCBoYXMgdGhlCitpbm9kZSwgaXQgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aGUgZmlsZSdzIGJsb2Nrcywgd2l0aG91dCBhbiBhZGRpdGlvbmFsIGRpc2sKK2FjY2Vzcy4gVGhvc2UgMTIgYmxvY2tzIGFyZSBkaXJlY3RseSBzcGVjaWZpZWQgaW4gdGhlIHZhcmlhYmxlcworPExpdGVyYWwgcmVtYXA9InR0Ij5pJmxvd2JhcjtibG9ja1swXSB0byBpJmxvd2JhcjtibG9ja1sxMV08L0xpdGVyYWw+LgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7YmxvY2tbMTJdPC9MaXRlcmFsPiBpcyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5pbmRpcmVjdCBibG9jazwvTGl0ZXJhbD4gLSBUaGUgYmxvY2sgcG9pbnRlZCBieQoraSZsb3diYXI7YmxvY2smbHNxYjsxMl0gd2lsbCA8TGl0ZXJhbCByZW1hcD0idHQiPm5vdDwvTGl0ZXJhbD4gYmUgYSBkYXRhIGJsb2NrLiBSYXRoZXIsIGl0IHdpbGwganVzdCBjb250YWluIGEKK2xpc3Qgb2YgZGlyZWN0IGJsb2Nrcy4gRm9yIGV4YW1wbGUsIGlmIHRoZSBibG9jayBzaXplIGlzIDEwMjQgYnl0ZXMsIHNpbmNlCitlYWNoIGJsb2NrIG51bWJlciBpcyA0IGJ5dGVzIGxvbmcsIHRoZXJlIHdpbGwgYmUgcGxhY2UgZm9yIDI1NiBpbmRpcmVjdAorYmxvY2tzLiBUaGF0IGlzLCBibG9jayAxMyB0aWxsIGJsb2NrIDI2OCBpbiB0aGUgZmlsZSB3aWxsIGJlIGFjY2Vzc2VkIGJ5IHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5pbmRpcmVjdCBibG9jazwvTGl0ZXJhbD4gbWV0aG9kLiBUaGUgcGVuYWx0eSBpbiB0aGlzIGNhc2UsIGNvbXBhcmVkIHRvIHRoZQorZGlyZWN0IGJsb2NrcyBjYXNlLCBpcyB0aGF0IGFuIGFkZGl0aW9uYWwgYWNjZXNzIHRvIHRoZSBkZXZpY2UgaXMgbmVlZGVkIC0KK1dlIG5lZWQgPExpdGVyYWwgcmVtYXA9InR0Ij50d288L0xpdGVyYWw+IGFjY2Vzc2VzIHRvIHJlYWNoIHRoZSByZXF1aXJlZCBkYXRhIGJsb2NrLgorPC9QYXJhPgorCis8UGFyYT4KK0luIG11Y2ggdGhlIHNhbWUgd2F5LCA8TGl0ZXJhbCByZW1hcD0idHQiPmkmbG93YmFyO2Jsb2NrWzEzXTwvTGl0ZXJhbD4gaXMgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZG91YmxlIGluZGlyZWN0IGJsb2NrPC9MaXRlcmFsPgorYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7YmxvY2tbMTRdPC9MaXRlcmFsPiBpcyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij50cmlwbGUgaW5kaXJlY3QgYmxvY2s8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7YmxvY2tbMTNdPC9MaXRlcmFsPiBwb2ludHMgdG8gYSBibG9jayB3aGljaCBjb250YWlucyBwb2ludGVycyB0byBpbmRpcmVjdAorYmxvY2tzLiBFYWNoIG9uZSBvZiB0aGVtIGlzIGhhbmRsZWQgaW4gdGhlIHdheSBkZXNjcmliZWQgYWJvdmUuCis8L1BhcmE+CisKKzxQYXJhPgorSW4gbXVjaCB0aGUgc2FtZSB3YXksIHRoZSB0cmlwbGUgaW5kaXJlY3QgYmxvY2sgaXMganVzdCBhbiBhZGRpdGlvbmFsIGxldmVsCitvZiBpbmRpcmVjdGlvbiAtIEl0IHdpbGwgcG9pbnQgdG8gYSBsaXN0IG9mIGRvdWJsZSBpbmRpcmVjdCBibG9ja3MuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5UaGUgaSZsb3diYXI7bW9kZSB2YXJpYWJsZTwvVGl0bGU+CisKKzxQYXJhPgorVGhlIGkmbG93YmFyO21vZGUgdmFyaWFibGUgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5vZGUgdHlwZTwvTGl0ZXJhbD4gYW5kIHRoZQorYXNzb2NpYXRlZCA8TGl0ZXJhbCByZW1hcD0idHQiPnBlcm1pc3Npb25zPC9MaXRlcmFsPi4gSXQgaXMgYmVzdCBkZXNjcmliZWQgYnkgcmVwcmVzZW50aW5nIGl0IGFzIGFuCitvY3RhbCBudW1iZXIuIFNpbmNlIGl0IGlzIGEgMTYgYml0IHZhcmlhYmxlLCB0aGVyZSB3aWxsIGJlIDYgb2N0YWwgZGlnaXRzLgorVGhvc2UgYXJlIGRpdmlkZWQgaW50byB0d28gcGFydHMgLSBUaGUgcmlnaHRtb3N0IDQgZGlnaXRzIGFuZCB0aGUgbGVmdG1vc3QgMgorZGlnaXRzLgorPC9QYXJhPgorCis8U2VjdDM+Cis8VGl0bGU+VGhlIHJpZ2h0bW9zdCA0IG9jdGFsIGRpZ2l0czwvVGl0bGU+CisKKzxQYXJhPgorVGhlIHJpZ2h0bW9zdCA0IGRpZ2l0cyBhcmUgPExpdGVyYWwgcmVtYXA9InR0Ij5iaXQgb3B0aW9uczwvTGl0ZXJhbD4gLSBFYWNoIGJpdCBoYXMgaXRzIG93bgorcHVycG9zZS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgbGFzdCAzIGRpZ2l0cyAoT2N0YWwgZGlnaXRzIDAsMSBhbmQgMikgYXJlIGp1c3QgdGhlIHVzdWFsIHBlcm1pc3Npb25zLAoraW4gdGhlIGtub3duIGZvcm0gPExpdGVyYWwgcmVtYXA9InR0Ij5yd3hyd3hyd3g8L0xpdGVyYWw+LiBEaWdpdCAyIHJlZmVycyB0byB0aGUgdXNlciwgZGlnaXQgMSB0bwordGhlIGdyb3VwIGFuZCBkaWdpdCAyIHRvIGV2ZXJ5b25lIGVsc2UuIFRoZXkgYXJlIHVzZWQgYnkgdGhlIGtlcm5lbCB0byBncmFudAorb3IgZGVueSBhY2Nlc3MgdG8gdGhlIG9iamVjdCBwcmVzZW50ZWQgYnkgdGhpcyBpbm9kZS4KKzxGT09UTk9URT4KKworPFBhcmE+CitBIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c21hcnRlcjwvTGl0ZXJhbD4gcGVybWlzc2lvbnMgY29udHJvbCBpcyBvbmUgb2YgdGhlIGVuaGFuY2VtZW50cyBwbGFubmVkIGZvcgorTGludXggMS4zIC0gVGhlIEFDTCAoQWNjZXNzIENvbnRyb2wgTGlzdHMpLiBBY3R1YWxseSwgZnJvbSBicm93c2luZyBvZiB0aGUKK2tlcm5lbCBzb3VyY2UsIHNvbWUgb2YgdGhlIEFDTCBoYW5kbGluZyBpcyBhbHJlYWR5IGRvbmUuCis8L1BhcmE+CisKKzwvRk9PVE5PVEU+CisKKzwvUGFyYT4KKworPFBhcmE+CitCaXQgbnVtYmVyIDkgc2lnbmFscyB0aGF0IHRoZSBmaWxlIChJJ2xsIHJlZmVyIHRvIHRoZSBvYmplY3QgcHJlc2VudGVkIGJ5Cit0aGUgaW5vZGUgYXMgZmlsZSBldmVuIHRob3VnaCBpdCBjYW4gYmUgYSBzcGVjaWFsIGRldmljZSwgZm9yIGV4YW1wbGUpIGlzCis8TGl0ZXJhbCByZW1hcD0idHQiPnNldCBWVFg8L0xpdGVyYWw+LiBJIHN0aWxsIGRvbid0IGtub3cgd2hhdCBpcyB0aGUgbWVhbmluZyBvZiAiVlRYIi4KKzwvUGFyYT4KKworPFBhcmE+CitCaXQgbnVtYmVyIDEwIHNpZ25hbHMgdGhhdCB0aGUgZmlsZSBpcyA8TGl0ZXJhbCByZW1hcD0idHQiPnNldCBncm91cCBpZDwvTGl0ZXJhbD4gLSBJIGRvbid0IGtub3cKK2V4YWN0bHkgdGhlIG1lYW5pbmcgb2YgdGhlIGFib3ZlIGVpdGhlci4KKzwvUGFyYT4KKworPFBhcmE+CitCaXQgbnVtYmVyIDExIHNpZ25hbHMgdGhhdCB0aGUgZmlsZSBpcyA8TGl0ZXJhbCByZW1hcD0idHQiPnNldCB1c2VyIGlkPC9MaXRlcmFsPiwgd2hpY2ggbWVhbnMgdGhhdAordGhlIGZpbGUgd2lsbCBydW4gd2l0aCBhbiBlZmZlY3RpdmUgdXNlciBpZCByb290LgorPC9QYXJhPgorCis8L1NlY3QzPgorCis8U2VjdDM+Cis8VGl0bGU+VGhlIGxlZnRtb3N0IHR3byBvY3RhbCBkaWdpdHM8L1RpdGxlPgorCis8UGFyYT4KK05vdGUgdGhlIHRoZSBsZWZ0bW9zdCBvY3RhbCBkaWdpdCBjYW4gb25seSBiZSAwIG9yIDEsIHNpbmNlIHRoZSB0b3RhbCBudW1iZXIKK29mIGJpdHMgaXMgMTYuCis8L1BhcmE+CisKKzxQYXJhPgorVGhvc2UgZGlnaXRzLCBhcyBvcHBvc2VkIHRvIHRoZSByaWdodG1vc3QgNCBkaWdpdHMsIGFyZSBub3QgYml0IG1hcHBlZAorb3B0aW9ucy4gVGhleSBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgdGhlICJmaWxlIiB0byB3aGljaCB0aGUgaW5vZGUgYmVsb25nczoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij4wMTwvTGl0ZXJhbD4gLSBUaGUgZmlsZSBpcyBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+RklGTzwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPjAyPC9MaXRlcmFsPiAtIFRoZSBmaWxlIGlzIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5jaGFyYWN0ZXIgZGV2aWNlPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+MDQ8L0xpdGVyYWw+IC0gVGhlIGZpbGUgaXMgYSA8TGl0ZXJhbCByZW1hcD0idHQiPmRpcmVjdG9yeTwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPjA2PC9MaXRlcmFsPiAtIFRoZSBmaWxlIGlzIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5ibG9jayBkZXZpY2U8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij4xMDwvTGl0ZXJhbD4gLSBUaGUgZmlsZSBpcyBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cmVndWxhciBmaWxlPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+MTI8L0xpdGVyYWw+IC0gVGhlIGZpbGUgaXMgYSA8TGl0ZXJhbCByZW1hcD0idHQiPnN5bWJvbGljIGxpbms8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij4xNDwvTGl0ZXJhbD4gLSBUaGUgZmlsZSBpcyBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c29ja2V0PC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzwvU2VjdDM+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5UaW1lIGFuZCBkYXRlPC9UaXRsZT4KKworPFBhcmE+CitMaW51eCByZWNvcmRzIHRoZSBsYXN0IHRpbWUgaW4gd2hpY2ggdmFyaW91cyBvcGVyYXRpb25zIG9jY3VyZWQgd2l0aCB0aGUKK2ZpbGUuIFRoZSB0aW1lIGFuZCBkYXRlIGFyZSBzYXZlZCBpbiB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5IGZvcm1hdCAtIFRoZQorbnVtYmVyIG9mIHNlY29uZHMgd2hpY2ggcGFzc2VkIHNpbmNlIDAwOjAwOjAwIEdNVCwgSmFudWFyeSAxLCAxOTcwLiBUaGUKK2ZvbGxvd2luZyB0aW1lcyBhcmUgcmVjb3JkZWQ6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7Y3RpbWU8L0xpdGVyYWw+IC0gVGhlIHRpbWUgaW4gd2hpY2ggdGhlIGlub2RlIHdhcyBsYXN0IGFsbG9jYXRlZC4gSW4KK290aGVyIHdvcmRzLCB0aGUgdGltZSBpbiB3aGljaCB0aGUgZmlsZSB3YXMgY3JlYXRlZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7bXRpbWU8L0xpdGVyYWw+IC0gVGhlIHRpbWUgaW4gd2hpY2ggdGhlIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPmkmbG93YmFyO2F0aW1lPC9MaXRlcmFsPiAtIFRoZSB0aW1lIGluIHdoaWNoIHRoZSBmaWxlIHdhcyBsYXN0IGFjY2Vzc2VkLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij5pJmxvd2JhcjtkdGltZTwvTGl0ZXJhbD4gLSBUaGUgdGltZSBpbiB3aGljaCB0aGUgaW5vZGUgd2FzIGRlYWxsb2NhdGVkLiBJbgorb3RoZXIgd29yZHMsIHRoZSB0aW1lIGluIHdoaWNoIHRoZSBmaWxlIHdhcyBkZWxldGVkLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPmkmbG93YmFyO3NpemU8L1RpdGxlPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7c2l6ZTwvTGl0ZXJhbD4gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNpemUgb2YgdGhlIG9iamVjdCBwcmVzZW50ZWQgYnkKK3RoZSBpbm9kZS4gSWYgdGhlIGlub2RlIGNvcnJlc3BvbmRzIHRvIGEgcmVndWxhciBmaWxlLCB0aGlzIGlzIGp1c3QgdGhlIHNpemUKK29mIHRoZSBmaWxlIGluIGJ5dGVzLiBJbiBvdGhlciBjYXNlcywgdGhlIGludGVycHJldGF0aW9uIG9mIHRoZSB2YXJpYWJsZSBpcworZGlmZmVyZW50LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+VXNlciBhbmQgZ3JvdXAgaWQ8L1RpdGxlPgorCis8UGFyYT4KK1RoZSB1c2VyIGFuZCBncm91cCBpZCBvZiB0aGUgZmlsZSBhcmUganVzdCBzYXZlZCBpbiB0aGUgdmFyaWFibGVzCis8TGl0ZXJhbCByZW1hcD0idHQiPmkmbG93YmFyO3VpZDwvTGl0ZXJhbD4gYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7Z2lkPC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPkhhcmQgbGlua3M8L1RpdGxlPgorCis8UGFyYT4KK0xhdGVyLCB3aGVuIHdlJ2xsIGRpc2N1c3MgdGhlIGltcGxlbWVudGF0aW9uIG9mIGRpcmVjdG9yaWVzLCBpdCB3aWxsIGJlCitleHBsYWluZWQgdGhhdCBlYWNoIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlyZWN0b3J5IGVudHJ5PC9MaXRlcmFsPiBwb2ludHMgdG8gYW4gaW5vZGUuIEl0IGlzIHF1aXRlCitwb3NzaWJsZSB0aGF0IGEgPExpdGVyYWwgcmVtYXA9InR0Ij5zaW5nbGUgaW5vZGU8L0xpdGVyYWw+IHdpbGwgYmUgcG9pbnRlZCB0byBmcm9tIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V2ZXJhbDwvTGl0ZXJhbD4KK2RpcmVjdG9yaWVzLiBJbiB0aGF0IGNhc2UsIHdlIHNheSB0aGF0IHRoZXJlIGV4aXN0IDxMaXRlcmFsIHJlbWFwPSJ0dCI+aGFyZCBsaW5rczwvTGl0ZXJhbD4gdG8gdGhlCitmaWxlIC0gVGhlIGZpbGUgY2FuIGJlIGFjY2Vzc2VkIGZyb20gZWFjaCBvZiB0aGUgZGlyZWN0b3JpZXMuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGtlcm5lbCBrZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGhhcmQgbGlua3MgaW4gdGhlIHZhcmlhYmxlCis8TGl0ZXJhbCByZW1hcD0idHQiPmkmbG93YmFyO2xpbmtzJmxvd2Jhcjtjb3VudDwvTGl0ZXJhbD4uIFRoZSB2YXJpYWJsZSBpcyBzZXQgdG8gIjEiIHdoZW4gZmlyc3QgYWxsb2NhdGluZyB0aGUKK2lub2RlLCBhbmQgaXMgaW5jcmVtZW50ZWQgd2l0aCBlYWNoIGFkZGl0aW9uYWwgbGluay4gRGVsZXRpb24gb2YgYSBmaWxlIHdpbGwKK2RlbGV0ZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgZW50cnkgYW5kIHdpbGwgZGVjcmVtZW50IHRoZSBudW1iZXIgb2YgbGlua3MuCitPbmx5IHdoZW4gdGhpcyBudW1iZXIgcmVhY2hlcyB6ZXJvLCB0aGUgaW5vZGUgd2lsbCBiZSBhY3R1YWxseSBkZWFsbG9jYXRlZC4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgbmFtZSA8TGl0ZXJhbCByZW1hcD0idHQiPmhhcmQgbGluazwvTGl0ZXJhbD4gaXMgdXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBhbGlhcyBtZXRob2QKK2Rlc2NyaWJlZCBhYm92ZSwgdG8gYW5vdGhlciBhbGlhcyBtZXRob2QgY2FsbGVkIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3ltYm9saWMgbGlua2luZzwvTGl0ZXJhbD4sCit3aGljaCB3aWxsIGJlIGRlc2NyaWJlZCBsYXRlci4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBFeHQyZnMgZXh0ZW5kZWQgZmxhZ3M8L1RpdGxlPgorCis8UGFyYT4KK1RoZSBleHQyIGZpbGVzeXN0ZW0gYXNzb2NpYXRlcyBhZGRpdGlvbmFsIGZsYWdzIHdpdGggYW4gaW5vZGUuIFRoZSBleHRlbmRlZAorYXR0cmlidXRlcyBhcmUgc3RvcmVkIGluIHRoZSB2YXJpYWJsZSA8TGl0ZXJhbCByZW1hcD0idHQiPmkmbG93YmFyO2ZsYWdzPC9MaXRlcmFsPi4gPExpdGVyYWwgcmVtYXA9InR0Ij5pJmxvd2JhcjtmbGFnczwvTGl0ZXJhbD4gaXMgYSAzMgorYml0IHZhcmlhYmxlLiBPbmx5IHRoZSA3IHJpZ2h0bW9zdCBiaXRzIGFyZSBkZWZpbmVkLiBPZiB0aGVtLCBvbmx5IDUgYml0cworYXJlIHVzZWQgaW4gdmVyc2lvbiAwLjVhIG9mIHRoZSBmaWxlc3lzdGVtLiBTcGVjaWZpY2FsbHksIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij51bmRlbGV0ZTwvTGl0ZXJhbD4gYW5kIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmNvbXByZXNzPC9MaXRlcmFsPiBmZWF0dXJlcyBhcmUgbm90IGltcGxlbWVudGVkLCBhbmQKK2FyZSB0byBiZSBpbnRyb2R1Y2VkIGluIExpbnV4IDEuMyBkZXZlbG9wbWVudC4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgY3VycmVudGx5IGF2YWlsYWJsZSBmbGFncyBhcmU6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCWJpdCAwIC0gU2VjdXJlIGRlbGV0aW9uLgorCitXaGVuIHRoaXMgYml0IGlzIG9uLCB0aGUgZmlsZSdzIGJsb2NrcyBhcmUgemVyb2VkIHdoZW4gdGhlIGZpbGUgaXMKK2RlbGV0ZWQuIFdpdGggdGhpcyBiaXQgb2ZmLCB0aGV5IHdpbGwganVzdCBiZSBsZWZ0IHdpdGggdGhlaXIKK29yaWdpbmFsIGRhdGEgd2hlbiB0aGUgaW5vZGUgaXMgZGVhbGxvY2F0ZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwliaXQgMSAtIFVuZGVsZXRlLgorCQorVGhpcyBiaXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIEl0IHdpbGwgYmUgdXNlZCB0byBwcm92aWRlIGFuCis8TGl0ZXJhbCByZW1hcD0idHQiPnVuZGVsZXRlPC9MaXRlcmFsPiBmZWF0dXJlIGluIGZ1dHVyZSBFeHQyZnMgZGV2ZWxvcG1lbnRzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJYml0IDIgLSBDb21wcmVzcyBmaWxlLgorCitUaGlzIGJpdCBpcyBhbHNvIG5vdCBzdXBwb3J0ZWQuIFRoZSBwbGFuIGlzIHRvIG9mZmVyICJjb21wcmVzc2lvbiBvbgordGhlIGZseSIgaW4gZnV0dXJlIHJlbGVhc2VzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJYml0IDMgLSBTeW5jaHJvbm91cyB1cGRhdGVzLgorCitXaXRoIHRoaXMgYml0IG9uLCB0aGUgbWV0YS1kYXRhIHdpbGwgYmUgd3JpdHRlbiBzeW5jaHJvbm91c2x5IHRvIHRoZQorZGlzaywgYXMgaWYgdGhlIGZpbGVzeXN0ZW0gd2FzIG1vdW50ZWQgd2l0aCB0aGUgInN5bmMiIG1vdW50IG9wdGlvbi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCWJpdCA0IC0gSW1tdXRhYmxlIGZpbGUuCisKK1doZW4gdGhpcyBiaXQgaXMgb24sIHRoZSBmaWxlIHdpbGwgc3RheSBhcyBpdCBpcyAtIENhbiBub3QgYmUKK2NoYW5nZWQsIGRlbGV0ZWQsIHJlbmFtZWQsIG5vIGhhcmQgbGlua3MsIGV0YywgYmVmb3JlIHRoZSBiaXQgaXMKK2NsZWFyZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwliaXQgNSAtIEFwcGVuZCBvbmx5IGZpbGUuCisJCitXaXRoIHRoaXMgb3B0aW9uIGFjdGl2ZSwgZGF0YSB3aWxsIG9ubHkgYmUgYXBwZW5kZWQgdG8gdGhlIGZpbGUuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwliaXQgNiAtIERvIG5vdCBkdW1wIHRoaXMgZmlsZS4KKworSSB0aGluayB0aGF0IHRoaXMgYml0IGlzIHVzZWQgYnkgdGhlIHBvcnQgb2YgZHVtcCB0byBsaW51eCAocG9ydGVkIGJ5Cis8TGl0ZXJhbCByZW1hcD0idHQiPlJlbXkgQ2FyZDwvTGl0ZXJhbD4pIHRvIGNoZWNrIGlmIHRoZSBmaWxlIHNob3VsZCBub3QgYmUgZHVtcGVkLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlN5bWJvbGljIGxpbmtzPC9UaXRsZT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5oYXJkIGxpbmtzPC9MaXRlcmFsPiBwcmVzZW50ZWQgYWJvdmUgYXJlIGp1c3QgYW5vdGhlciBwb2ludGVycyB0byB0aGUgc2FtZQoraW5vZGUuIFRoZSBpbXBvcnRhbnQgYXNwZWN0IGlzIHRoYXQgdGhlIGlub2RlIG51bWJlciBpcyA8TGl0ZXJhbCByZW1hcD0idHQiPmZpeGVkPC9MaXRlcmFsPiB3aGVuCit0aGUgbGluayBpcyBjcmVhdGVkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlCitmaWxlc3lzdGVtIGFyZSB2aXNpYmxlIHRvIHRoZSB1c2VyIC0gSW4gYSBwdXJlIGFic3RyYWN0IHVzYWdlIG9mIHRoZQorZmlsZXN5c3RlbSwgdGhlIHVzZXIgc2hvdWxkIG5vdCBjYXJlIGFib3V0IGlub2Rlcy4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgYWJvdmUgY2F1c2VzIHNldmVyYWwgbGltaXRhdGlvbnM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUhhcmQgbGlua3MgY2FuIGJlIGRvbmUgb25seSBpbiB0aGUgc2FtZSBmaWxlc3lzdGVtLiBUaGlzIGlzIG9idmlvdXMsCitzaW5jZSBhIGhhcmQgbGluayBpcyBqdXN0IGFuIGlub2RlIG51bWJlciBpbiBzb21lIGRpcmVjdG9yeSBlbnRyeSwKK2FuZCB0aGUgYWJvdmUgZWxlbWVudHMgYXJlIGZpbGVzeXN0ZW0gc3BlY2lmaWMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlZb3UgY2FuIG5vdCAicmVwbGFjZSIgdGhlIGZpbGUgd2hpY2ggaXMgcG9pbnRlZCB0byBieSB0aGUgaGFyZCBsaW5rCithZnRlciB0aGUgbGluayBjcmVhdGlvbi4gIlJlcGxhY2luZyIgdGhlIGZpbGUgaW4gb25lIGRpcmVjdG9yeSB3aWxsCitzdGlsbCBsZWF2ZSB0aGUgb3JpZ2luYWwgZmlsZSBpbiB0aGUgb3RoZXIgZGlyZWN0b3J5IC0gVGhlCisicmVwbGFjZW1lbnQiIHdpbGwgbm90IGRlYWxsb2NhdGUgdGhlIG9yaWdpbmFsIGlub2RlLCBidXQgcmF0aGVyCithbGxvY2F0ZSBhbm90aGVyIGlub2RlIGZvciB0aGUgbmV3IHZlcnNpb24sIGFuZCB0aGUgZGlyZWN0b3J5IGVudHJ5CithdCB0aGUgb3RoZXIgcGxhY2Ugd2lsbCBqdXN0IHBvaW50IHRvIHRoZSBvbGQgaW5vZGUgbnVtYmVyLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPlN5bWJvbGljIGxpbms8L0xpdGVyYWw+LCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgYW5hbHl6ZWQgYXQgPExpdGVyYWwgcmVtYXA9InR0Ij5ydW4gdGltZTwvTGl0ZXJhbD4uIEEKK3N5bWJvbGljIGxpbmsgaXMganVzdCBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cGF0aG5hbWU8L0xpdGVyYWw+IHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSBhbiBpbm9kZS4KK0FzIHN1Y2gsIGl0ICJzcGVha3MiIGluIHRoZSBsYW5ndWFnZSBvZiB0aGUgYWJzdHJhY3QgZmlsZXN5c3RlbS4gV2hlbiB0aGUKK2tlcm5lbCByZWFjaGVzIGEgc3ltYm9saWMgbGluaywgaXQgd2lsbCA8TGl0ZXJhbCByZW1hcD0idHQiPmZvbGxvdyBpdCBpbiBydW4gdGltZTwvTGl0ZXJhbD4gdXNpbmcKK2l0cyBub3JtYWwgd2F5IG9mIHJlYWNoaW5nIGRpcmVjdG9yaWVzLgorPC9QYXJhPgorCis8UGFyYT4KK0FzIHN1Y2gsIHN5bWJvbGljIGxpbmsgY2FuIGJlIG1hZGUgPExpdGVyYWwgcmVtYXA9InR0Ij5hY3Jvc3MgZGlmZmVyZW50IGZpbGVzeXN0ZW1zPC9MaXRlcmFsPiBhbmQgYQorcmVwbGFjZW1lbnQgb2YgYSBmaWxlIHdpdGggYSBuZXcgdmVyc2lvbiB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgYWN0aXZlIG9uIGFsbAoraXRzIHN5bWJvbGljIGxpbmtzLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBkaXNhZHZhbnRhZ2UgaXMgdGhhdCBoYXJkIGxpbmsgZG9lc24ndCBjb25zdW1lIHNwYWNlIGV4Y2VwdCB0byBhIHNtYWxsCitkaXJlY3RvcnkgZW50cnkuIFN5bWJvbGljIGxpbmssIG9uIHRoZSBvdGhlciBoYW5kLCBjb25zdW1lcyBhdCBsZWFzdCBhbgoraW5vZGUsIGFuZCBjYW4gYWxzbyBjb25zdW1lIG9uZSBibG9jay4KKzwvUGFyYT4KKworPFBhcmE+CitXaGVuIHRoZSBpbm9kZSBpcyBpZGVudGlmaWVkIGFzIGEgc3ltYm9saWMgbGluaywgdGhlIGtlcm5lbCBuZWVkcyB0byBmaW5kCit0aGUgcGF0aCB0byB3aGljaCBpdCBwb2ludHMuCis8L1BhcmE+CisKKzxTZWN0Mz4KKzxUaXRsZT5GYXN0IHN5bWJvbGljIGxpbmtzPC9UaXRsZT4KKworPFBhcmE+CitXaGVuIHRoZSBwYXRobmFtZSBjb250YWlucyB1cCB0byA2NCBieXRlcywgaXQgY2FuIGJlIHNhdmVkIGRpcmVjdGx5IGluIHRoZQoraW5vZGUsIG9uIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmkmbG93YmFyO2Jsb2NrWzBdIC0gaSZsb3diYXI7YmxvY2tbMTVdPC9MaXRlcmFsPiB2YXJpYWJsZXMsIHNpbmNlIHRob3NlIGFyZSBub3QKK25lZWRlZCBpbiB0aGF0IGNhc2UuIFRoaXMgaXMgY2FsbGVkIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmFzdDwvTGl0ZXJhbD4gc3ltYm9saWMgbGluay4gSXQgaXMgZmFzdAorYmVjYXVzZSB0aGUgcGF0aG5hbWUgcmVzb2x1dGlvbiBjYW4gYmUgZG9uZSB1c2luZyB0aGUgaW5vZGUgaXRzZWxmLCB3aXRob3V0CithY2Nlc3NpbmcgYWRkaXRpb25hbCBibG9ja3MuIEl0IGlzIGFsc28gZWNvbm9taWNhbCwgc2luY2UgaXQgYWxsb2NhdGVzIG9ubHkKK2FuIGlub2RlLiBUaGUgbGVuZ3RoIG9mIHRoZSBwYXRobmFtZSBpcyBzdG9yZWQgaW4gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7c2l6ZTwvTGl0ZXJhbD4KK3ZhcmlhYmxlLgorPC9QYXJhPgorCis8L1NlY3QzPgorCis8U2VjdDM+Cis8VGl0bGU+U2xvdyBzeW1ib2xpYyBsaW5rczwvVGl0bGU+CisKKzxQYXJhPgorU3RhcnRpbmcgZnJvbSA2NSBieXRlcywgYWRkaXRpb25hbCBibG9jayBpcyBhbGxvY2F0ZWQgKGJ5IHRoZSB1c2Ugb2YKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7YmxvY2tbMF08L0xpdGVyYWw+KSBhbmQgdGhlIHBhdGhuYW1lIGlzIHN0b3JlZCBpbiBpdC4gSXQgaXMgY2FsbGVkIHNsb3cKK2JlY2F1c2UgdGhlIGtlcm5lbCBuZWVkcyB0byByZWFkIGFkZGl0aW9uYWwgYmxvY2sgdG8gcmVzb2x2ZSB0aGUgcGF0aG5hbWUuCitUaGUgbGVuZ3RoIGlzIGFnYWluIHNhdmVkIGluIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7c2l6ZTwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzwvU2VjdDM+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5pJmxvd2Jhcjt2ZXJzaW9uPC9UaXRsZT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPmkmbG93YmFyO3ZlcnNpb248L0xpdGVyYWw+IGlzIHVzZWQgd2l0aCByZWdhcmQgdG8gTmV0d29yayBGaWxlIFN5c3RlbS4gSSBkb24ndCBrbm93CitpdHMgZXhhY3QgdXNlLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+UmVzZXJ2ZWQgdmFyaWFibGVzPC9UaXRsZT4KKworPFBhcmE+CitBcyBmYXIgYXMgSSBrbm93LCB0aGUgdmFyaWFibGVzIHdoaWNoIGFyZSBjb25uZWN0ZWQgdG8gQUNMIGFuZCBmcmFnbWVudHMKK2FyZSBub3QgY3VycmVudGx5IHVzZWQuIFRoZXkgd2lsbCBiZSBzdXBwb3J0ZWQgaW4gZnV0dXJlIHZlcnNpb25zLgorPC9QYXJhPgorCis8UGFyYT4KK0V4dDJmcyBpcyBiZWluZyBwb3J0ZWQgdG8gb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuIEFzIGZhciBhcyBJIGtub3csCithdCBsZWFzdCBpbiBsaW51eCwgdGhlIG9zIGRlcGVuZGVudCB2YXJpYWJsZXMgYXJlIGFsc28gbm90IHVzZWQuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5TcGVjaWFsIHJlc2VydmVkIGlub2RlczwvVGl0bGU+CisKKzxQYXJhPgorVGhlIGZpcnN0IHRlbiBpbm9kZXMgb24gdGhlIGZpbGVzeXN0ZW0gYXJlIHNwZWNpYWwgaW5vZGVzOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJbm9kZSAxIGlzIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmJhZCBibG9ja3MgaW5vZGU8L0xpdGVyYWw+IC0gSSBiZWxpZXZlIHRoYXQgaXRzIGRhdGEKK2Jsb2NrcyBjb250YWluIGEgbGlzdCBvZiB0aGUgYmFkIGJsb2NrcyBpbiB0aGUgZmlsZXN5c3RlbSwgd2hpY2gKK3Nob3VsZCBub3QgYmUgYWxsb2NhdGVkLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJSW5vZGUgMiBpcyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5yb290IGlub2RlPC9MaXRlcmFsPiAtIFRoZSBpbm9kZSBvZiB0aGUgcm9vdCBkaXJlY3RvcnkuCitJdCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWNoaW5nIGEga25vd24gcGF0aCBpbiB0aGUgZmlsZXN5c3RlbS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUlub2RlIDMgaXMgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YWNsIGluZGV4IGlub2RlPC9MaXRlcmFsPi4gQWNjZXNzIGNvbnRyb2wgbGlzdHMgYXJlCitjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBieSB0aGUgZXh0MiBmaWxlc3lzdGVtLCBzbyBJIGJlbGlldmUgdGhpcworaW5vZGUgaXMgbm90IHVzZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJbm9kZSA0IGlzIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmFjbCBkYXRhIGlub2RlPC9MaXRlcmFsPi4gT2YgY291cnNlLCB0aGUgYWJvdmUgYXBwbGllcworaGVyZSB0b28uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJbm9kZSA1IGlzIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmJvb3QgbG9hZGVyIGlub2RlPC9MaXRlcmFsPi4gSSBkb24ndCBrbm93IGl0cwordXNhZ2UuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJbm9kZSA2IGlzIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnVuZGVsZXRlIGRpcmVjdG9yeSBpbm9kZTwvTGl0ZXJhbD4uIEl0IGlzIGFsc28gYQorZm91bmRhdGlvbiBmb3IgZnV0dXJlIGVuaGFuY2VtZW50cywgYW5kIGlzIGN1cnJlbnRseSBub3QgdXNlZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUlub2RlcyA3LTEwIGFyZSA8TGl0ZXJhbCByZW1hcD0idHQiPnJlc2VydmVkPC9MaXRlcmFsPiBhbmQgY3VycmVudGx5IG5vdCB1c2VkLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPkRpcmVjdG9yaWVzPC9UaXRsZT4KKworPFBhcmE+CitBIGRpcmVjdG9yeSBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZmlsZXMgYXJlIGltcGxlbWVudGVkICh3aXRoCit0aGUgZGlyZWN0IGJsb2NrcywgaW5kaXJlY3QgYmxvY2tzLCBldGMpIC0gSXQgaXMganVzdCBhIGZpbGUgd2hpY2ggaXMKK2Zvcm1hdHRlZCB3aXRoIGEgc3BlY2lhbCBmb3JtYXQgLSBBIGxpc3Qgb2YgZGlyZWN0b3J5IGVudHJpZXMuCis8L1BhcmE+CisKKzxQYXJhPgorRm9sbG93cyB0aGUgZGVmaW5pdGlvbiBvZiBhIGRpcmVjdG9yeSBlbnRyeToKKzwvUGFyYT4KKworPFBhcmE+CisKKzxQcm9ncmFtTGlzdGluZz4KK3N0cnVjdCBleHQyX2Rpcl9lbnRyeSB7CisJX191MzIJaW5vZGU7CQkJLyogSW5vZGUgbnVtYmVyICovCisJX191MTYJcmVjX2xlbjsJCS8qIERpcmVjdG9yeSBlbnRyeSBsZW5ndGggKi8KKwlfX3UxNgluYW1lX2xlbjsJCS8qIE5hbWUgbGVuZ3RoICovCisJY2hhcgluYW1lW0VYVDJfTkFNRV9MRU5dOwkvKiBGaWxlIG5hbWUgKi8KK307Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzxQYXJhPgorRXh0MmZzIHN1cHBvcnRzIGZpbGUgbmFtZXMgb2YgdmFyeWluZyBsZW5ndGhzLCB1cCB0byAyNTUgYnl0ZXMuIFRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5uYW1lPC9MaXRlcmFsPiBmaWVsZCBhYm92ZSBqdXN0IGNvbnRhaW5zIHRoZSBmaWxlIG5hbWUuIE5vdGUgdGhhdCBpdCBpcworPExpdGVyYWwgcmVtYXA9InR0Ij5ub3QgemVybyB0ZXJtaW5hdGVkPC9MaXRlcmFsPjsgSW5zdGVhZCwgdGhlIHZhcmlhYmxlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bmFtZSZsb3diYXI7bGVuPC9MaXRlcmFsPiBjb250YWlucwordGhlIGxlbmd0aCBvZiB0aGUgZmlsZSBuYW1lLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSB2YXJpYWJsZSA8TGl0ZXJhbCByZW1hcD0idHQiPnJlYyZsb3diYXI7bGVuPC9MaXRlcmFsPiBpcyBwcm92aWRlZCBiZWNhdXNlIHRoZSBkaXJlY3RvcnkgZW50cmllcyBhcmUKK3BhZGRlZCB3aXRoIHplcm9lcyBzbyB0aGF0IHRoZSBuZXh0IGVudHJ5IHdpbGwgYmUgaW4gYW4gb2Zmc2V0IHdoaWNoIGlzCithIG11bHRpcGxpdGlvbiBvZiA0LiBUaGUgcmVzdWx0aW5nIGRpcmVjdG9yeSBlbnRyeSBzaXplIGlzIHN0b3JlZCBpbgorPExpdGVyYWwgcmVtYXA9InR0Ij5yZWMmbG93YmFyO2xlbjwvTGl0ZXJhbD4uIElmIHRoZSBkaXJlY3RvcnkgZW50cnkgaXMgdGhlIGxhc3QgaW4gdGhlIGJsb2NrLCBpdCBpcworcGFkZGVkIHdpdGggemVyb2VzIHRpbGwgdGhlIGVuZCBvZiB0aGUgYmxvY2ssIGFuZCByZWMmbG93YmFyO2xlbiBpcyB1cGRhdGVkCithY2NvcmRpbmdseS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5pbm9kZTwvTGl0ZXJhbD4gdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBpbm9kZSBvZiB0aGUgYWJvdmUgZmlsZS4KKzwvUGFyYT4KKworPFBhcmE+CitEZWxldGlvbiBvZiBkaXJlY3RvcnkgZW50cmllcyBpcyBkb25lIGJ5IGFwcGVuZGluZyBvZiB0aGUgZGVsZXRlZCBlbnRyeQorc3BhY2UgdG8gdGhlIHByZXZpb3VzIChvciBuZXh0LCBJIGFtIG5vdCBzdXJlKSBlbnRyeS4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSBzdXBlcmJsb2NrPC9UaXRsZT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zdXBlcmJsb2NrPC9MaXRlcmFsPiBpcyBhIGJsb2NrIHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIHdoaWNoIGRlc2NyaWJlcwordGhlIHN0YXRlIG9mIHRoZSBpbnRlcm5hbCBmaWxlc3lzdGVtLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBzdXBlcmJsb2NrIGlzIGxvY2F0ZWQgYXQgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Zml4ZWQgb2Zmc2V0IDEwMjQ8L0xpdGVyYWw+IGluIHRoZSBkZXZpY2UuIEl0cworbGVuZ3RoIGlzIDEwMjQgYnl0ZXMgYWxzby4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgc3VwZXJibG9jaywgbGlrZSB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMsIGlzIGNvcGllZCBvbiBlYWNoIGJsb2NrcyBncm91cAorYm91bmRhcnkgZm9yIGJhY2t1cCBwdXJwb3Nlcy4gSG93ZXZlciwgb25seSB0aGUgbWFpbiBjb3B5IGlzIHVzZWQgYnkgdGhlCitrZXJuZWwuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIHN1cGVyYmxvY2sgY29udGFpbiB0aHJlZSB0eXBlcyBvZiBpbmZvcm1hdGlvbjoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJRmlsZXN5c3RlbSBwYXJhbWV0ZXJzIHdoaWNoIGFyZSBmaXhlZCBhbmQgd2hpY2ggd2VyZSBkZXRlcm1pbmVkIHdoZW4KK3RoaXMgc3BlY2lmaWMgZmlsZXN5c3RlbSB3YXMgY3JlYXRlZC4gU29tZSBvZiB0aG9zZSBwYXJhbWV0ZXJzIGNhbgorYmUgZGlmZmVyZW50IGluIGRpZmZlcmVudCBpbnN0YWxsYXRpb25zIG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0sIGJ1dAorY2FuIG5vdCBiZSBjaGFuZ2VkIG9uY2UgdGhlIGZpbGVzeXN0ZW0gd2FzIGNyZWF0ZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlGaWxlc3lzdGVtIHBhcmFtZXRlcnMgd2hpY2ggYXJlIHR1bmFibGUgLSBDYW4gYWx3YXlzIGJlIGNoYW5nZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBmaWxlc3lzdGVtIHN0YXRlLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPFBhcmE+CitGb2xsb3dzIHRoZSBzdXBlcmJsb2NrIGRlZmluaXRpb246Cis8L1BhcmE+CisKKzxQYXJhPgorCis8UHJvZ3JhbUxpc3Rpbmc+CitzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayB7CisJX191MzIJc19pbm9kZXNfY291bnQ7CQkvKiBJbm9kZXMgY291bnQgKi8KKwlfX3UzMglzX2Jsb2Nrc19jb3VudDsJCS8qIEJsb2NrcyBjb3VudCAqLworCV9fdTMyCXNfcl9ibG9ja3NfY291bnQ7CS8qIFJlc2VydmVkIGJsb2NrcyBjb3VudCAqLworCV9fdTMyCXNfZnJlZV9ibG9ja3NfY291bnQ7CS8qIEZyZWUgYmxvY2tzIGNvdW50ICovCisJX191MzIJc19mcmVlX2lub2Rlc19jb3VudDsJLyogRnJlZSBpbm9kZXMgY291bnQgKi8KKwlfX3UzMglzX2ZpcnN0X2RhdGFfYmxvY2s7CS8qIEZpcnN0IERhdGEgQmxvY2sgKi8KKwlfX3UzMglzX2xvZ19ibG9ja19zaXplOwkvKiBCbG9jayBzaXplICovCisJX19zMzIJc19sb2dfZnJhZ19zaXplOwkvKiBGcmFnbWVudCBzaXplICovCisJX191MzIJc19ibG9ja3NfcGVyX2dyb3VwOwkvKiAjIEJsb2NrcyBwZXIgZ3JvdXAgKi8KKwlfX3UzMglzX2ZyYWdzX3Blcl9ncm91cDsJLyogIyBGcmFnbWVudHMgcGVyIGdyb3VwICovCisJX191MzIJc19pbm9kZXNfcGVyX2dyb3VwOwkvKiAjIElub2RlcyBwZXIgZ3JvdXAgKi8KKwlfX3UzMglzX210aW1lOwkJLyogTW91bnQgdGltZSAqLworCV9fdTMyCXNfd3RpbWU7CQkvKiBXcml0ZSB0aW1lICovCisJX191MTYJc19tbnRfY291bnQ7CQkvKiBNb3VudCBjb3VudCAqLworCV9fczE2CXNfbWF4X21udF9jb3VudDsJLyogTWF4aW1hbCBtb3VudCBjb3VudCAqLworCV9fdTE2CXNfbWFnaWM7CQkvKiBNYWdpYyBzaWduYXR1cmUgKi8KKwlfX3UxNglzX3N0YXRlOwkJLyogRmlsZSBzeXN0ZW0gc3RhdGUgKi8KKwlfX3UxNglzX2Vycm9yczsJCS8qIEJlaGF2aW91ciB3aGVuIGRldGVjdGluZyBlcnJvcnMgKi8KKwlfX3UxNglzX3BhZDsKKwlfX3UzMglzX2xhc3RjaGVjazsJCS8qIHRpbWUgb2YgbGFzdCBjaGVjayAqLworCV9fdTMyCXNfY2hlY2tpbnRlcnZhbDsJLyogbWF4LiB0aW1lIGJldHdlZW4gY2hlY2tzICovCisJX191MzIJc19jcmVhdG9yX29zOwkJLyogT1MgKi8KKwlfX3UzMglzX3Jldl9sZXZlbDsJCS8qIFJldmlzaW9uIGxldmVsICovCisJX191MTYJc19kZWZfcmVzdWlkOwkJLyogRGVmYXVsdCB1aWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLworCV9fdTE2CXNfZGVmX3Jlc2dpZDsJCS8qIERlZmF1bHQgZ2lkIGZvciByZXNlcnZlZCBibG9ja3MgKi8KKwlfX3UzMglzX3Jlc2VydmVkWzIzNV07CS8qIFBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KK307Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5zdXBlcmJsb2NrIGlkZW50aWZpY2F0aW9uPC9UaXRsZT4KKworPFBhcmE+CitUaGUgZXh0MiBmaWxlc3lzdGVtJ3Mgc3VwZXJibG9jayBpcyBpZGVudGlmaWVkIGJ5IHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO21hZ2ljPC9MaXRlcmFsPiBmaWVsZC4KK1RoZSBjdXJyZW50IGV4dDIgbWFnaWMgbnVtYmVyIGlzIDB4RUY1My4gSSBwcmVzdW1lIHRoYXQgIkVGIiBtZWFucyAiRXh0ZW5kZWQKK0ZpbGVzeXN0ZW0iLiBJbiB2ZXJzaW9ucyBvZiB0aGUgZXh0MiBmaWxlc3lzdGVtIHByaW9yIHRvIDAuMkIsIHRoZSBtYWdpYworbnVtYmVyIHdhcyAweEVGNTEuIFRob3NlIGZpbGVzeXN0ZW1zIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50Cit2ZXJzaW9uczsgU3BlY2lmaWNhbGx5LCB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgZGVmaW5pdGlvbiBpcyBkaWZmZXJlbnQuIEkKK2RvdWJ0IGlmIHRoZXJlIHN0aWxsIGV4aXN0cyBzdWNoIGEgaW5zdGFsbGF0aW9uLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+RmlsZXN5c3RlbSBmaXhlZCBwYXJhbWV0ZXJzPC9UaXRsZT4KKworPFBhcmE+CitCeSB1c2luZyB0aGUgd29yZCA8TGl0ZXJhbCByZW1hcD0idHQiPmZpeGVkPC9MaXRlcmFsPiwgSSBtZWFuIGZpeGVkIHdpdGggcmVzcGVjdCB0byBhIHBhcnRpY3VsYXIKK2luc3RhbGxhdGlvbi4gVGhvc2UgdmFyaWFibGVzIGFyZSB1c3VhbGx5IG5vdCBmaXhlZCB3aXRoIHJlc3BlY3QgdG8KK2RpZmZlcmVudCBpbnN0YWxsYXRpb25zLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmJsb2NrIHNpemU8L0xpdGVyYWw+IGlzIGRldGVybWluZWQgYnkgdXNpbmcgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7bG9nJmxvd2JhcjtibG9jayZsb3diYXI7c2l6ZTwvTGl0ZXJhbD4KK3ZhcmlhYmxlLiBUaGUgYmxvY2sgc2l6ZSBpcyAxMDI0KnBvdyAoMixzJmxvd2Jhcjtsb2cmbG93YmFyO2Jsb2NrJmxvd2JhcjtzaXplKSBhbmQgc2hvdWxkIGJlCitiZXR3ZWVuIDEwMjQgYW5kIDQwOTYuIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmUgMTAyNCwgMjA0OCBhbmQgNDA5Ni4KKzwvUGFyYT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2lub2RlcyZsb3diYXI7Y291bnQ8L0xpdGVyYWw+IGNvbnRhaW5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYXZhaWxhYmxlIGlub2Rlcy4KKzwvUGFyYT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2Jsb2NrcyZsb3diYXI7Y291bnQ8L0xpdGVyYWw+IGNvbnRhaW5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYXZhaWxhYmxlIGJsb2Nrcy4KKzwvUGFyYT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2ZpcnN0Jmxvd2JhcjtkYXRhJmxvd2JhcjtibG9jazwvTGl0ZXJhbD4gc3BlY2lmaWVzIGluIHdoaWNoIG9mIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmRldmljZSBibG9jazwvTGl0ZXJhbD4gdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPnN1cGVyYmxvY2s8L0xpdGVyYWw+IGlzIHByZXNlbnQuIFRoZSBzdXBlcmJsb2NrIGlzIGFsd2F5cyBwcmVzZW50IGF0IHRoZSBmaXhlZAorb2Zmc2V0IDEwMjQsIGJ1dCB0aGUgZGV2aWNlIGJsb2NrIG51bWJlcmluZyBjYW4gZGlmZmVyLiBGb3IgZXhhbXBsZSwgaWYgdGhlCitibG9jayBzaXplIGlzIDEwMjQsIHRoZSBzdXBlcmJsb2NrIHdpbGwgYmUgYXQgPExpdGVyYWwgcmVtYXA9InR0Ij5ibG9jayAxPC9MaXRlcmFsPiB3aXRoIHJlc3BlY3QgdG8KK3RoZSBkZXZpY2UuIEhvd2V2ZXIsIGlmIHRoZSBibG9jayBzaXplIGlzIDQwOTYsIG9mZnNldCAxMDI0IGlzIGluY2x1ZGVkIGluCis8TGl0ZXJhbCByZW1hcD0idHQiPmJsb2NrIDA8L0xpdGVyYWw+IG9mIHRoZSBkZXZpY2UsIGFuZCBpbiB0aGF0IGNhc2UgPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjtmaXJzdCZsb3diYXI7ZGF0YSZsb3diYXI7YmxvY2s8L0xpdGVyYWw+Cit3aWxsIGNvbnRhaW4gMC4gQXQgbGVhc3QgdGhpcyBpcyBob3cgSSB1bmRlcnN0b29kIHRoaXMgdmFyaWFibGUuCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjtibG9ja3MmbG93YmFyO3BlciZsb3diYXI7Z3JvdXA8L0xpdGVyYWw+IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYmxvY2tzIHdoaWNoIGFyZSBncm91cGVkCit0b2dldGhlciBhcyBhIGJsb2NrcyBncm91cC4KKzwvUGFyYT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2lub2RlcyZsb3diYXI7cGVyJmxvd2Jhcjtncm91cDwvTGl0ZXJhbD4gY29udGFpbnMgdGhlIG51bWJlciBvZiBpbm9kZXMgYXZhaWxhYmxlIGluIGEgZ3JvdXAKK2Jsb2NrLiBJIHRoaW5rIHRoYXQgdGhpcyBpcyBhbHdheXMgdGhlIHRvdGFsIG51bWJlciBvZiBpbm9kZXMgZGl2aWRlZCBieSB0aGUKK251bWJlciBvZiBibG9ja3MgZ3JvdXBzLgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7Y3JlYXRvciZsb3diYXI7b3M8L0xpdGVyYWw+IGNvbnRhaW5zIGEgY29kZSBudW1iZXIgd2hpY2ggc3BlY2lmaWVzIHRoZSBvcGVyYXRpbmcKK3N5c3RlbSB3aGljaCBjcmVhdGVkIHRoaXMgc3BlY2lmaWMgZmlsZXN5c3RlbToKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij5MaW51eDwvTGl0ZXJhbD4gOi0pIGlzIHNwZWNpZmllZCBieSB0aGUgdmFsdWUgPExpdGVyYWwgcmVtYXA9InR0Ij4wPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+SHVyZDwvTGl0ZXJhbD4gaXMgc3BlY2lmaWVkIGJ5IHRoZSB2YWx1ZSA8TGl0ZXJhbCByZW1hcD0idHQiPjE8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij5NYXNpeDwvTGl0ZXJhbD4gaXMgc3BlY2lmaWVkIGJ5IHRoZSB2YWx1ZSA8TGl0ZXJhbCByZW1hcD0idHQiPjI8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO3JldiZsb3diYXI7bGV2ZWw8L0xpdGVyYWw+IGNvbnRhaW5zIHRoZSBtYWpvciB2ZXJzaW9uIG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0uCitDdXJyZW50bHkgdGhpcyBpcyBhbHdheXMgPExpdGVyYWwgcmVtYXA9InR0Ij4wPC9MaXRlcmFsPiwgYXMgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gaXMgMC41Qi4gSXQKK3dpbGwgcHJvYmFibHkgdGFrZSBzb21lIHRpbWUgdW50aWwgd2UgcmVhY2ggdmVyc2lvbiAxLjAuCis8L1BhcmE+CisKKzxQYXJhPgorQXMgZmFyIGFzIEkga25vdywgZnJhZ21lbnRzIChzdWItYmxvY2sgYWxsb2NhdGlvbnMpIGFyZSBjdXJyZW50bHkgbm90CitzdXBwb3J0ZWQgYW5kIGhlbmNlIGEgYmxvY2sgaXMgZXF1YWwgdG8gYSBmcmFnbWVudC4gQXMgYSByZXN1bHQsCis8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2xvZyZsb3diYXI7ZnJhZyZsb3diYXI7c2l6ZTwvTGl0ZXJhbD4gYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7ZnJhZ3MmbG93YmFyO3BlciZsb3diYXI7Z3JvdXA8L0xpdGVyYWw+IGFyZSBhbHdheXMgZXF1YWwgdG8KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7bG9nJmxvd2JhcjtibG9jayZsb3diYXI7c2l6ZTwvTGl0ZXJhbD4gYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7YmxvY2tzJmxvd2JhcjtwZXImbG93YmFyO2dyb3VwPC9MaXRlcmFsPiwgcmVzcGVjdGl2ZWx5LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+RXh0MmZzIGVycm9yIGhhbmRsaW5nPC9UaXRsZT4KKworPFBhcmE+CitUaGUgZXh0MiBmaWxlc3lzdGVtIGVycm9yIGhhbmRsaW5nIGlzIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgcGhpbG9zb3BoeToKKworPE9yZGVyZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJZGVudGlmaWNhdGlvbiBvZiBwcm9ibGVtcyBpcyBkb25lIGJ5IHRoZSBrZXJuZWwgY29kZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBjb3JyZWN0aW9uIHRhc2sgaXMgbGVmdCB0byBhbiBleHRlcm5hbCB1dGlsaXR5LCBzdWNoIGFzCis8TGl0ZXJhbCByZW1hcD0idHQiPmUyZnNjayBieSBUaGVvZG9yZSBUcydvPC9MaXRlcmFsPiBmb3IgPExpdGVyYWwgcmVtYXA9InR0Ij5hdXRvbWF0aWM8L0xpdGVyYWw+IGFuYWx5c2lzIGFuZAorY29ycmVjdGlvbiwgb3IgcGVyaGFwcyA8TGl0ZXJhbCByZW1hcD0idHQiPmRlYnVnZnMgYnkgVGhlb2RvcmUgVHMnbzwvTGl0ZXJhbD4gYW5kCis8TGl0ZXJhbCByZW1hcD0idHQiPkVYVDJFRCBieSBteXNlbGY8L0xpdGVyYWw+LCBmb3IgPExpdGVyYWwgcmVtYXA9InR0Ij5oYW5kPC9MaXRlcmFsPiBhbmFseXNpcyBhbmQgY29ycmVjdGlvbi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvT3JkZXJlZExpc3Q+CisKKzwvUGFyYT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjtzdGF0ZTwvTGl0ZXJhbD4gdmFyaWFibGUgaXMgdXNlZCBieSB0aGUga2VybmVsIHRvIHBhc3MgdGhlIGlkZW50aWZpY2F0aW9uCityZXN1bHQgdG8gdGhpcmQgcGFydHkgdXRpbGl0aWVzOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPmJpdCAwPC9MaXRlcmFsPiBvZiBzJmxvd2JhcjtzdGF0ZSBpcyByZXNldCB3aGVuIHRoZSBwYXJ0aXRpb24gaXMgbW91bnRlZCBhbmQKK3NldCB3aGVuIHRoZSBwYXJ0aXRpb24gaXMgdW5tb3VudGVkLiBUaHVzLCBhIHZhbHVlIG9mIDAgb24gYW4KK3VubW91bnRlZCBmaWxlc3lzdGVtIG1lYW5zIHRoYXQgdGhlIGZpbGVzeXN0ZW0gd2FzIG5vdCB1bm1vdW50ZWQKK3Byb3Blcmx5IC0gVGhlIGZpbGVzeXN0ZW0gaXMgbm90ICJjbGVhbiIgYW5kIHByb2JhYmx5IGNvbnRhaW5zCitlcnJvcnMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPmJpdCAxPC9MaXRlcmFsPiBvZiBzJmxvd2JhcjtzdGF0ZSBpcyBzZXQgYnkgdGhlIGtlcm5lbCB3aGVuIGl0IGRldGVjdHMgYW4KK2Vycm9yIGluIHRoZSBmaWxlc3lzdGVtLiBBIHZhbHVlIG9mIDAgZG9lc24ndCBtZWFuIHRoYXQgdGhlcmUgaXNuJ3QKK2FuIGVycm9yIGluIHRoZSBmaWxlc3lzdGVtLCBqdXN0IHRoYXQgdGhlIGtlcm5lbCBkaWRuJ3QgZmluZCBhbnkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KK1RoZSBrZXJuZWwgYmVoYXZpb3Igd2hlbiBhbiBlcnJvciBpcyBmb3VuZCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSB1c2VyIHR1bmFibGUKK3BhcmFtZXRlciA8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2Vycm9yczwvTGl0ZXJhbD46CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBrZXJuZWwgd2lsbCBpZ25vcmUgdGhlIGVycm9yIGFuZCBjb250aW51ZSBpZiA8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2Vycm9ycz0xPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBrZXJuZWwgd2lsbCByZW1vdW50IHRoZSBmaWxlc3lzdGVtIGluIHJlYWQtb25seSBtb2RlIGlmCis8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2Vycm9ycz0yPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUEga2VybmVsIHBhbmljIHdpbGwgYmUgaXNzdWVkIGlmIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7ZXJyb3JzPTM8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPFBhcmE+CitUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlIGVycm9yLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+QWRkaXRpb25hbCBwYXJhbWV0ZXJzIHVzZWQgYnkgZTJmc2NrPC9UaXRsZT4KKworPFBhcmE+CitPZi1jb3Vyc2UsIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZTJmc2NrPC9MaXRlcmFsPiB3aWxsIGNoZWNrIHRoZSBmaWxlc3lzdGVtIGlmIGVycm9ycyB3ZXJlIGRldGVjdGVkCitvciBpZiB0aGUgZmlsZXN5c3RlbSBpcyBub3QgY2xlYW4uCis8L1BhcmE+CisKKzxQYXJhPgorSW4gYWRkaXRpb24sIGVhY2ggdGltZSB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLCA8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO21udCZsb3diYXI7Y291bnQ8L0xpdGVyYWw+IGlzCitpbmNyZW1lbnRlZC4gV2hlbiBzJmxvd2JhcjttbnQmbG93YmFyO2NvdW50IHJlYWNoZXMgPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjttYXgmbG93YmFyO21udCZsb3diYXI7Y291bnQ8L0xpdGVyYWw+LCA8TGl0ZXJhbCByZW1hcD0idHQiPmUyZnNjazwvTGl0ZXJhbD4KK3dpbGwgZm9yY2UgYSBjaGVjayBvbiB0aGUgZmlsZXN5c3RlbSBldmVuIHRob3VnaCBpdCBtYXkgYmUgY2xlYW4uIEl0IHdpbGwKK3RoZW4gemVybyBzJmxvd2JhcjttbnQmbG93YmFyO2NvdW50LiA8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO21heCZsb3diYXI7bW50Jmxvd2Jhcjtjb3VudDwvTGl0ZXJhbD4gaXMgYSB0dW5hYmxlIHBhcmFtZXRlci4KKzwvUGFyYT4KKworPFBhcmE+CitFMmZzY2sgYWxzbyByZWNvcmRzIHRoZSBsYXN0IHRpbWUgaW4gd2hpY2ggdGhlIGZpbGUgc3lzdGVtIHdhcyBjaGVja2VkIGluCit0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjtsYXN0Y2hlY2s8L0xpdGVyYWw+IHZhcmlhYmxlLiBUaGUgdXNlciB0dW5hYmxlIHBhcmFtZXRlcgorPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjtjaGVja2ludGVydmFsPC9MaXRlcmFsPiB3aWxsIGNvbnRhaW4gdGhlIG51bWJlciBvZiBzZWNvbmRzIHdoaWNoIGFyZSBhbGxvd2VkCit0byBwYXNzIHNpbmNlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7bGFzdGNoZWNrPC9MaXRlcmFsPiB1bnRpbCBhIGNoZWNrIGlzIHJlZm9yY2VkLiBBIHZhbHVlIG9mCis8TGl0ZXJhbCByZW1hcD0idHQiPjA8L0xpdGVyYWw+IGRpc2FibGVzIHRpbWUtYmFzZWQgY2hlY2suCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5BZGRpdGlvbmFsIHVzZXIgdHVuYWJsZSBwYXJhbWV0ZXJzPC9UaXRsZT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO3ImbG93YmFyO2Jsb2NrcyZsb3diYXI7Y291bnQ8L0xpdGVyYWw+IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgZGlzayBibG9ja3Mgd2hpY2ggYXJlCityZXNlcnZlZCBmb3Igcm9vdCwgdGhlIHVzZXIgd2hvc2UgaWQgbnVtYmVyIGlzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7ZGVmJmxvd2JhcjtyZXN1aWQ8L0xpdGVyYWw+IGFuZCB0aGUKK2dyb3VwIHdob3NlIGlkIG51bWJlciBpcyA8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2RlZyZsb3diYXI7cmVzZ2lkPC9MaXRlcmFsPi4gVGhlIGtlcm5lbCB3aWxsIHJlZnVzZSB0bworYWxsb2NhdGUgdGhvc2UgbGFzdCA8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO3ImbG93YmFyO2Jsb2NrcyZsb3diYXI7Y291bnQ8L0xpdGVyYWw+IGlmIHRoZSB1c2VyIGlzIG5vdCBvbmUgb2YgdGhlCithYm92ZS4gVGhpcyBpcyBkb25lIHNvIHRoYXQgdGhlIGZpbGVzeXN0ZW0gd2lsbCB1c3VhbGx5IG5vdCBiZSAxMDAmcGVyY250OyBmdWxsLAorc2luY2UgMTAwJnBlcmNudDsgZnVsbCBmaWxlc3lzdGVtcyBjYW4gYWZmZWN0IHZhcmlvdXMgYXNwZWN0cyBvZiBvcGVyYXRpb24uCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjtkZWYmbG93YmFyO3Jlc3VpZDwvTGl0ZXJhbD4gYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7ZGVmJmxvd2JhcjtyZXNnaWQ8L0xpdGVyYWw+IGNvbnRhaW4gdGhlIGlkIG9mIHRoZSB1c2VyIGFuZAorb2YgdGhlIGdyb3VwIHdobyBjYW4gdXNlIHRoZSByZXNlcnZlZCBibG9ja3MgaW4gYWRkaXRpb24gdG8gcm9vdC4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPkZpbGVzeXN0ZW0gY3VycmVudCBzdGF0ZTwvVGl0bGU+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjtmcmVlJmxvd2JhcjtibG9ja3MmbG93YmFyO2NvdW50PC9MaXRlcmFsPiBjb250YWlucyB0aGUgY3VycmVudCBudW1iZXIgb2YgZnJlZSBibG9ja3MKK2luIHRoZSBmaWxlc3lzdGVtLgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7ZnJlZSZsb3diYXI7aW5vZGVzJmxvd2Jhcjtjb3VudDwvTGl0ZXJhbD4gY29udGFpbnMgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGZyZWUgaW5vZGVzIGluIHRoZQorZmlsZXN5c3RlbS4KKzwvUGFyYT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO210aW1lPC9MaXRlcmFsPiBjb250YWlucyB0aGUgdGltZSBhdCB3aGljaCB0aGUgc3lzdGVtIHdhcyBsYXN0IG1vdW50ZWQuCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2Jhcjt3dGltZTwvTGl0ZXJhbD4gY29udGFpbnMgdGhlIGxhc3QgdGltZSBhdCB3aGljaCBzb21ldGhpbmcgd2FzIGNoYW5nZWQgaW4gdGhlCitmaWxlc3lzdGVtLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+Q29weXJpZ2h0PC9UaXRsZT4KKworPFBhcmE+CitUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHNvdXJjZSBjb2RlIHdoaWNoIHdhcyB0YWtlbiBmcm9tIHRoZSBMaW51eCBleHQyCitrZXJuZWwgc291cmNlIGNvZGUsIG1haW5seSBmcm9tIDxGSUxFTkFNRT4vdXNyL2luY2x1ZGUvbGludXgvZXh0MiZsb3diYXI7ZnMuaDwvRklMRU5BTUU+LiBGb2xsb3dzCit0aGUgb3JpZ2luYWwgY29weXJpZ2h0OgorPC9QYXJhPgorCis8UGFyYT4KKworPFByb2dyYW1MaXN0aW5nPgorLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L2V4dDJfZnMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NQorICogUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorICogTGFib3JhdG9pcmUgTUFTSSAtIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiAgZnJvbQorICoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L21pbml4X2ZzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICovCisKKzwvUHJvZ3JhbUxpc3Rpbmc+CisKKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPkFja25vd2xlZGdtZW50czwvVGl0bGU+CisKKzxQYXJhPgorSSB3b3VsZCBsaWtlIHRvIHRoYW5rIHRoZSBmb2xsb3dpbmcgcGVvcGxlLCB3aG8gd2VyZSBpbnZvbHZlZCBpbiB0aGUKK2Rlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGV4dDIgZmlsZXN5c3RlbSBrZXJuZWwgY29kZSBhbmQgc3VwcG9ydAordXRpbGl0aWVzOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPlJlbXkgQ2FyZDwvTGl0ZXJhbD4KKworV2hvIGRlc2lnbmVkLCBpbXBsZW1lbnRlZCBhbmQgbWFpbnRhaW5zIHRoZSBleHQyIGZpbGVzeXN0ZW0ga2VybmVsCitjb2RlLCBhbmQgc29tZSBvZiB0aGUgZXh0MiB1dGlsaXRpZXMuIDxMaXRlcmFsIHJlbWFwPSJ0dCI+UmVteSBDYXJkPC9MaXRlcmFsPiBpcyBhbHNvIHRoZQorYXV0aG9yIAlvZiBzZXZlcmFsIGhlbHBmdWwgc2xpZGVzIGNvbmNlcm5pbmcgdGhlIGV4dDIgZmlsZXN5c3RlbS4KK1NwZWNpZmljYWxseSwgaGUgaXMgdGhlIGF1dGhvciBvZiA8TGl0ZXJhbCByZW1hcD0idHQiPkZpbGUgTWFuYWdlbWVudCBpbiB0aGUgTGludXgKK0tlcm5lbDwvTGl0ZXJhbD4gYW5kIG9mIDxMaXRlcmFsIHJlbWFwPSJ0dCI+VGhlIFNlY29uZCBFeHRlbmRlZCBGaWxlIFN5c3RlbSAtIEN1cnJlbnQKK1N0YXRlLCBGdXR1cmUgRGV2ZWxvcG1lbnQ8L0xpdGVyYWw+LgorCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPldheW5lIERhdmlzb248L0xpdGVyYWw+CisKK1dobyBkZXNpZ25lZCB0aGUgZXh0MiBmaWxlc3lzdGVtLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij5TdGVwaGVuIFR3ZWVkaWU8L0xpdGVyYWw+CisKK1dobyBoZWxwZWQgZGVzaWduaW5nIHRoZSBleHQyIGZpbGVzeXN0ZW0ga2VybmVsIGNvZGUgYW5kIHdyb3RlIHRoZQorc2xpZGVzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+T3B0aW1pemF0aW9ucyBpbiBGaWxlIFN5c3RlbXM8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij5UaGVvZG9yZSBUcydvPC9MaXRlcmFsPgorCitXaG8gaXMgdGhlIGF1dGhvciBvZiBzZXZlcmFsIGV4dDIgdXRpbGl0aWVzIGFuZCBvZiB0aGUgZXh0MiBsaWJyYXJ5Cis8TGl0ZXJhbCByZW1hcD0idHQiPmxpYmV4dDJmczwvTGl0ZXJhbD4gKHdoaWNoIEkgZGlkbid0IHVzZSwgc2ltcGx5IGJlY2F1c2UgSSBkaWRuJ3Qga25vdworaXQgZXhpc3RzIHdoZW4gSSBzdGFydGVkIHRvIHdvcmsgb24gbXkgcHJvamVjdCkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KK0xhc3RseSwgSSB3b3VsZCBsaWtlIHRvIHRoYW5rLCBvZi1jb3Vyc2UsIDxMaXRlcmFsIHJlbWFwPSJ0dCI+TGludXMgVG9ydmFsZHM8L0xpdGVyYWw+IGFuZCB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+TGludXggY29tbXVuaXR5PC9MaXRlcmFsPiBmb3IgcHJvdmlkaW5nIGFsbCBvZiB1cyB3aXRoIHN1Y2ggYSBncmVhdCBvcGVyYXRpbmcKK3N5c3RlbS4KKzwvUGFyYT4KKworPFBhcmE+CitQbGVhc2UgY29udGFjdCBtZSBpbiBhIGNhc2Ugb2YgYW4gZXJyb3IgcmVwb3J0LCBzdWdnZXN0aW9ucywgb3IganVzdCBhYm91dAorYW55dGhpbmcgY29uY2VybmluZyB0aGlzIGRvY3VtZW50LgorPC9QYXJhPgorCis8UGFyYT4KK0Vuam95LAorPC9QYXJhPgorCis8UGFyYT4KK0dhZGkgT3htYW4gJmx0O3RndWRAdG9jaG5hcGMyLnRlY2huaW9uLmFjLmlsJmd0OworPC9QYXJhPgorCis8UGFyYT4KK0hhaWZhLCBBdWd1c3QgOTUKKzwvUGFyYT4KKworPC9TZWN0MT4KKworPC9BcnRpY2xlPgpkaWZmIC0tZ2l0IGEvZXh0MmVkL2RvYy91c2VyLWd1aWRlLnNnbWwgYi9leHQyZWQvZG9jL3VzZXItZ3VpZGUuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjg4N2VmCi0tLSAvZGV2L251bGwKKysrIGIvZXh0MmVkL2RvYy91c2VyLWd1aWRlLnNnbWwKQEAgLTAsMCArMSwyMjU4IEBACis8IURPQ1RZUEUgQXJ0aWNsZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBWNC4xLy9FTiI+CisKKzxBcnRpY2xlPgorCis8QXJ0aWNsZUluZm8+CisKKzxUaXRsZT5FWFQyRUQgLSBUaGUgRXh0ZW5kZWQtMiBmaWxlc3lzdGVtIGVkaXRvciAtIFVzZXIncyBndWlkZTwvVGl0bGU+Cis8QVVUSE9SPgorPEZpcnN0TmFtZT5HYWRpIE94bWFuLCB0Z3VkQHRvY2huYXBjMi50ZWNobmlvbi5hYy5pbDwvRmlyc3ROYW1lPgorPC9BVVRIT1I+Cis8UHViRGF0ZT52MC4xLCBBdWd1c3QgMyAxOTk1PC9QdWJEYXRlPgorCis8QWJzdHJhY3Q+CisKKzxQYXJhPgorVGhpcyBpcyBvbmx5IHRoZSBpbml0aWFsIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudC4gSXQgbWF5IGJlIHVuY2xlYXIgYXQKK3NvbWUgcGxhY2VzLiBQbGVhc2Ugc2VuZCBtZSBmZWVkYmFjayB3aXRoIGFueXRoaW5nIHJlZ2FyZGluZyB0byBpdC4KKzwvUGFyYT4KKworPC9BYnN0cmFjdD4KKworPC9BcnRpY2xlSW5mbz4KKworPFNlY3QxPgorPFRpdGxlPkFib3V0IEVYVDJFRCBkb2N1bWVudGF0aW9uPC9UaXRsZT4KKworPFBhcmE+CitUaGUgRVhUMkVEIGRvY3VtZW50YXRpb24gY29uc2lzdHMgb2YgdGhyZWUgcGFydHM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBleHQyIGZpbGVzeXN0ZW0gb3ZlcnZpZXcuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgRVhUMkVEIHVzZXIncyBndWlkZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBFWFQyRUQgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzxQYXJhPgorSWYgeW91IGludGVuZCB0byB1c2VkIEVYVDJFRCwgSSBzdHJvbmdseSBzdWdnZXN0IHRoYXQgeW91IHdvdWxkIGJlIGZhbWlsaWFyCit3aXRoIHRoZSBtYXRlcmlhbCBwcmVzZW50ZWQgaW4gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MiBmaWxlc3lzdGVtIG92ZXJ2aWV3PC9MaXRlcmFsPiBhcyB3ZWxsLgorPC9QYXJhPgorCis8UGFyYT4KK0lmIHlvdSBhbHNvIGludGVuZCB0byBicm93c2UgYW5kIG1vZGlmeSB0aGUgc291cmNlIGNvZGUsIEkgc3VnZ2VzdCB0aGF0IHlvdQord2lsbCBhbHNvIHJlYWQgdGhlIGFydGljbGUgPExpdGVyYWwgcmVtYXA9InR0Ij5UaGUgRVhUMkVEIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb248L0xpdGVyYWw+LCBhcyBpdAorcHJvdmlkZXMgYSBnZW5lcmFsIG92ZXJ2aWV3IG9mIHRoZSBzdHJ1Y3R1cmUgb2YgbXkgc291cmNlIGNvZGUuCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5JbnRyb2R1Y3Rpb248L1RpdGxlPgorCis8UGFyYT4KK0VYVDJFRCBpcyBhICJkaXNrIGVkaXRvciIgZm9yIHRoZSBleHQyIGZpbGVzeXN0ZW0uIEl0cyBwdXJwb3NlIGlzIHRvIHNob3cKK3lvdSB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBvZiB0aGUgZXh0MiBmaWxlc3lzdGVtIGluIGFuIHJhdGhlciBpbnR1aXRpdmUKK2FuZCBsb2dpY2FsIHdheSwgc28gdGhhdCBpdCB3aWxsIGJlIGVhc2llciB0byAidHJhdmVsIiBiZXR3ZWVuIHRoZSB2YXJpb3VzCitpbnRlcm5hbCBmaWxlc3lzdGVtIHN0cnVjdHVyZXMuIAorPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+QmFzaWMgY29uY2VwdHMgaW4gRVhUMkVEPC9UaXRsZT4KKworPFBhcmE+CitUd28gYmFzaWMgY29uY2VwdHMgaW4gRVhUMkVEIGFyZSA8TGl0ZXJhbCByZW1hcD0idHQiPmNvbW1hbmRzPC9MaXRlcmFsPiBhbmQgPExpdGVyYWwgcmVtYXA9InR0Ij50eXBlczwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxQYXJhPgorRVhUMkVEIGlzIG9iamVjdC1vcmllbnRlZCBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBkZWZpbmVzIG9iamVjdHMgaW4gdGhlCitmaWxlc3lzdGVtLCBsaWtlIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5zdXBlci1ibG9jazwvTGl0ZXJhbD4gb3IgYSA8TGl0ZXJhbCByZW1hcD0idHQiPmRpcmVjdG9yeTwvTGl0ZXJhbD4uIEFuIG9iamVjdCBpcworc29tZXRoaW5nIHdoaWNoICJrbm93cyIgaG93IHRvIGhhbmRsZSBzb21lIGFzcGVjdCBvZiB0aGUgZmlsZXN5c3RlbS4KKzwvUGFyYT4KKworPFBhcmE+CitZb3VyIGludGVyYWN0aW9uIHdpdGggRVhUMkVEIGlzIGRvbmUgdGhyb3VnaCA8TGl0ZXJhbCByZW1hcD0idHQiPmNvbW1hbmRzPC9MaXRlcmFsPiB3aGljaCBFWFQyRUQKK2FjY2VwdHMuIFRoZXJlIGFyZSB0aHJlZSBsZXZlbHMgb2YgY29tbWFuZHM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUdlbmVyYWwgQ29tbWFuZHMKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUV4dGVuZGVkLTIgRmlsZXN5c3RlbSBnZW5lcmFsIGNvbW1hbmRzCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUeXBlIHNwZWNpZmljIGNvbW1hbmRzCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworVGhlIEdlbmVyYWwgY29tbWFuZHMgYXJlIGFsd2F5cyBhdmFpbGFibGUuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGV4dDIgZ2VuZXJhbCBjb21tYW5kcyBhcmUgYXZhaWxhYmxlIG9ubHkgd2hlbiBlZGl0aW5nIGFuIGV4dDIgZmlsZXN5c3RlbS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgVHlwZSBzcGVjaWZpYyBjb21tYW5kcyBhcmUgYXZhaWxhYmxlIHdoZW4gZWRpdGluZyBhIHNwZWNpZmljIG9iamVjdCBpbiB0aGUKK2ZpbGVzeXN0ZW0uIEVhY2ggb2JqZWN0IHR5cGljYWxseSBjb21lcyB3aXRoIGl0cyBvd24gc2V0IG9mIGludGVybmFsCit2YXJpYWJsZXMsIGFuZCBpdHMgb3duIHNldCBvZiBjb21tYW5kcywgd2hpY2ggYXJlIGZpbmUgdHVuZWQgaGFuZGxlIHRoZQorY29ycmVzcG9uZGluZyBzdHJ1Y3R1cmUgaW4gdGhlIGZpbGVzeXN0ZW0uCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5SdW5uaW5nIEVYVDJFRDwvVGl0bGU+CisKKzxQYXJhPgorUnVubmluZyBFWFQyRUQgaXMgYXMgc2ltcGxlIGFzIHR5cGluZyA8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDJlZDwvTGl0ZXJhbD4gZnJvbSB0aGUgc2hlbGwgcHJvbXB0LgorVGhlcmUgYXJlIG5vIGNvbW1hbmQgbGluZSBzd2l0Y2hlcy4KKzwvUGFyYT4KKworPFBhcmE+CitXaGVuIGZpcnN0IHJ1biwgRVhUMkVEIHBhcnNlcyBpdHMgY29uZmlndXJhdGlvbiBmaWxlLCA8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDJlZC5jb25mPC9MaXRlcmFsPi4KK1RoaXMgZmlsZSBtdXN0IGV4aXN0LgorPC9QYXJhPgorCis8UGFyYT4KK1doZW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBwcm9jZXNzaW5nIGlzIGRvbmUsIEVYVDJFRCBzY3JlZW4gc2hvdWxkIGFwcGVhcgorb24gdGhlIHNjcmVlbiwgd2l0aCB0aGUgY29tbWFuZCBwcm9tcHQgPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyZWQmIzYyOzwvTGl0ZXJhbD4gZGlzcGxheWVkLgorPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+RVhUMkVEIHVzZXIgaW50ZXJmYWNlPC9UaXRsZT4KKworPFBhcmE+CitFWFQyRUQgdXNlcyB0aGUgPEVtcGhhc2lzPm5jdXJzZXM8L0VtcGhhc2lzPiBsaWJyYXJ5IGZvciBzY3JlZW4gbWFuYWdlbWVudC4gWW91ciBzY3JlZW4KK3dpbGwgYmUgZGl2aWRlZCBpbnRvIGZvdXIgcGFydHMsIGZyb20gdG9wIHRvIGJvdHRvbToKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisgVGl0bGUgd2luZG93Cis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKyBTdGF0dXMgd2luZG93Cis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKyBNYWluIGVkaXRpbmcgd2luZG93Cis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKyBDb21tYW5kIHdpbmRvdworPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKK1RoZSB0aXRsZSB3aW5kb3cganVzdCBkaXNwbGF5cyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIEVYVDJFRC4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgc3RhdHVzIHdpbmRvdyB3aWxsIGRpc3BsYXkgdmFyaW91cyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIHN0YXRlIG9mCit0aGUgZWRpdGluZyBhdCB0aGlzIHBvaW50LgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBtYWluIGVkaXRpbmcgd2luZG93IGlzIHRoZSBwbGFjZSBhdCB3aGljaCB0aGUgYWN0dWFsIGRhdGEgd2lsbCBiZSBzaG93bi4KK0FsbW9zdCBldmVyeSBjb21tYW5kIHdpbGwgY2F1c2Ugc29tZSBkaXNwbGF5IGF0IHRoaXMgd2luZG93LiBUaGlzIHdpbmRvdywgYXMKK29wcG9zZWQgdG8gdGhlIHRocmVlIG90aGVycywgaXMgb2YgdmFyaWFibGUgbGVuZ3RoIC0gWW91IGFsd2F5cyBsb29rIGF0IG9uZQorcGFnZSBvZiBpdC4gVGhlIGN1cnJlbnQgcGFnZSBhbmQgdGhlIHRvdGFsIG51bWJlcnMgb2YgcGFnZXMgYXQgdGhpcyBtb21lbnQKK2lzIGRpc3BsYXllZCBhdCB0aGUgc3RhdHVzIHdpbmRvdy4gTW92aW5nIGJldHdlZW4gcGFnZXMgaXMgZG9uZSBieSB0aGUgdXNlCitvZiB0aGUgPENvbW1hbmQ+cGdkbjwvQ29tbWFuZD4gYW5kIDxDb21tYW5kPnBndXA8L0NvbW1hbmQ+IGNvbW1hbmRzLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBjb21tYW5kIHdpbmRvdyBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uIEl0IGFsd2F5cyBkaXNwbGF5cyBhCitjb21tYW5kIHByb21wdCA8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDJlZCYjNjI7PC9MaXRlcmFsPiBhbmQgYWxsb3dzIHlvdSB0byB0eXBlIGEgY29tbWFuZC4gRmVlZGJhY2sKK2Fib3V0IHRoZSBjb21tYW5kcyBlbnRlcmVkIGlzIGRpc3BsYXllZCB0byB0aGlzIHdpbmRvdyBhbHNvLgorPC9QYXJhPgorCis8UGFyYT4KK0VYVDJFRCB1c2VzIHRoZSA8RW1waGFzaXM+cmVhZGxpbmU8L0VtcGhhc2lzPiBsaWJyYXJ5IHdoaWxlIHByb2Nlc3NpbmcgYSBjb21tYW5kIGxpbmUuIEFsbAordGhlIHVzdWFsIGVkaXRpbmcga2V5cyBhcmUgYXZhaWxhYmxlLiBFYWNoIGVudGVyZWQgY29tbWFuZCBpcyBwbGFjZWQgaW50byBhCitoaXN0b3J5IG9mIGNvbW1hbmRzLCBhbmQgY2FuIGJlIHJlY2FsbGVkIGxhdGVyLiBDb21tYW5kIENvbXBsZXRpb24gaXMgYWxzbworc3VwcG9ydGVkIC0gSnVzdCBzdGFydCB0byB0eXBlIGEgY29tbWFuZCwgYW5kIHByZXNzIHRoZSBjb21wbGV0aW9uIGtleS4KKzwvUGFyYT4KKworPFBhcmE+CitQcmVzc2luZyA8TGl0ZXJhbCByZW1hcD0idHQiPmVudGVyPC9MaXRlcmFsPiBhdCB0aGUgY29tbWFuZCB3aW5kb3csIHdpdGhvdXQgZW50ZXJpbmcgYSBjb21tYW5kLAorcmVjYWxscyB0aGUgbGFzdCBjb21tYW5kLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIG1vdmluZyBiZXR3ZWVuIGNsb3NlIGVudHJpZXMsCitpbiB0aGUgPENvbW1hbmQ+bmV4dDwvQ29tbWFuZD4gY29tbWFuZCwgZm9yIGV4YW1wbGUuCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5HZXR0aW5nIHN0YXJ0ZWQ8L1RpdGxlPgorCis8U2VjdDI+Cis8VGl0bGU+QSBmZXcgcHJlY2F1dGlvbnM8L1RpdGxlPgorCis8UGFyYT4KK0VYVDJFRCBpcyBhIHRvb2wgZm9yIGZpbGVzeXN0ZW0gPExpdGVyYWwgcmVtYXA9InR0Ij5lZGl0aW5nPC9MaXRlcmFsPi4gQXMgc3VjaCwgaXQgY2FuIGJlCis8TGl0ZXJhbCByZW1hcD0idHQiPmRhbmdlcm91czwvTGl0ZXJhbD4uIFRoZSBzdW1tYXJ5IHRvIHRoZSBzdWJzZWN0aW9ucyBiZWxvdyBpcyB0aGF0Cis8TGl0ZXJhbCByZW1hcD0idHQiPllvdSBtdXN0IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nPC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPFNlY3QzIGlkPSJtb3VudGVkLXJlZiI+Cis8VGl0bGU+QSBtb3VudGVkIGZpbGVzeXN0ZW08L1RpdGxlPgorCis8UGFyYT4KK0VYVDJFRCBpcyBub3QgZGVzaWduZWQgdG8gd29yayBvbiBhIG1vdW50ZWQgZmlsZXN5c3RlbSAtIEl0IGlzIGNvbXBsaWNhdGVkCitlbm91Z2ggYXMgaXQgaXM7IEkgZGlkbid0IGV2ZW4gdHJ5IHRvIHRoaW5rIG9mIGhhbmRsaW5nIHRoZSB2YXJpb3VzIHJhY2UKK2NvbmRpdGlvbnMuIEFzIHN1Y2gsIHBsZWFzZSByZXNwZWN0IHRoZSBmb2xsb3dpbmcgYWR2aWNlOgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+RG8gbm90IHVzZSBFWFQyRUQgb24gYSBtb3VudGVkIGZpbGVzeXN0ZW0gITwvTGl0ZXJhbD4KKzwvUGFyYT4KKworPFBhcmE+CitFWFQyRUQgd2lsbCBub3QgYWxsb3cgd3JpdGUgYWNjZXNzIHRvIGEgbW91bnRlZCBmaWxlc3lzdGVtLiBBbHRob3VnaCBpdCBpcworZmFpcmx5IGVhc3kgdG8gY2hhbmdlIEVYVDJFRCBzbyB0aGF0IGl0IHdpbGwgYmUgYWxsb3dlZCwgSSBoZXJlYnkgcmVxdWVzdAorYWdhaW4tIEVYVDJFRCBpcyBub3QgZGVzaWduZWQgZm9yIHRoYXQgYWN0aW9uLCBhbmQgd2lsbCBtb3N0IGxpa2VseSBjb3JydXB0CitkYXRhIGlmIHVzZWQgdGhhdCB3YXkuIFBsZWFzZSBkb24ndCBkbyB0aGF0LgorPC9QYXJhPgorCis8UGFyYT4KK0NvbmNlcm5pbmcgcmVhZCBhY2Nlc3MsIEkgY2hvc2UgdG8gbGVhdmUgdGhlIGRlY2lzaW9uIGZvciB0aGUgdXNlciB0aHJvdWdoCit0aGUgY29uZmlndXJhdGlvbiBmaWxlIG9wdGlvbiA8TGl0ZXJhbCByZW1hcD0idHQiPkFsbG93TW91bnRlZFJlYWQ8L0xpdGVyYWw+LiBBbHRob3VnaCByZWFkIGFjY2Vzcworb24gYSBtb3VudGVkIHBhcnRpdGlvbiB3aWxsIG5vdCBkbyBhbnkgZGFtYWdlIHRvIHRoZSBmaWxlc3lzdGVtLCB0aGUgZGF0YQorZGlzcGxheWVkIHRvIHlvdSB3aWxsIG5vdCBiZSByZWxpYWJsZSwgYW5kIHNob3dpbmcgeW91IGluY29ycmVjdCBpbmZvcm1hdGlvbgorbWF5IGJlIGFzIGJhZCBhcyBjb3JydXB0aW5nIHRoZSBmaWxlc3lzdGVtLiBIb3dldmVyLCB5b3UgbWF5IHN0aWxsIHdpc2ggdG8KK2RvIHRoYXQuCis8L1BhcmE+CisKKzwvU2VjdDM+CisKKzxTZWN0Mz4KKzxUaXRsZT5Xcml0ZSBhY2Nlc3M8L1RpdGxlPgorCis8UGFyYT4KK0NvbnNpZGVyaW5nIHRoZSBvYnZpb3VzIHNlbnNpdGl2aXR5IG9mIHRoZSBzdWJqZWN0LCBJIHRvb2sgdGhlIGZvbGxvd2luZworYWN0aW9uczoKKzwvUGFyYT4KKworPFBhcmE+CisKKzxPcmRlcmVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJRVhUMkVEIHdpbGwgYWx3YXlzIHN0YXJ0IHdpdGggYSByZWFkLW9ubHkgYWNjZXNzLiBXcml0ZSBhY2Nlc3MgbW9kZQorbmVlZHMgdG8gYmUgc3BlY2lmaWNhbGx5IGVudGVyZWQgYnkgdGhlIDxDb21tYW5kPmVuYWJsZXdyaXRlPC9Db21tYW5kPiBjb21tYW5kLgorVW50aWwgdGhpcyBpcyBkb25lLCBubyB3cml0ZSB3aWxsIGJlIGFsbG93ZWQuIFdyaXRlIGFjY2VzcyBjYW4gYmUKK2Rpc2FibGVkIGF0IGFueSB0aW1lIHdpdGggPENvbW1hbmQ+ZGlzYWJsZXdyaXRlPC9Db21tYW5kPi4gV2hlbgorPENvbW1hbmQ+ZW5hYmxld3JpdGU8L0NvbW1hbmQ+IGlzIGlzc3VlZCwgdGhlIGRldmljZSBpcyByZW9wZW5lZCBpbiByZWFkLXdyaXRlCittb2RlLiBOZWVkbGVzcyB0byBzYXksIHRoZSBkZXZpY2UgcGVybWlzc2lvbnMgc2hvdWxkIGFsbG93IHRoYXQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlBcyBhIHNlY29uZCBsZXZlbCBvZiBwcm90ZWN0aW9uLCB5b3UgY2FuIGRpc2FsbG93IHdyaXRlIGFjY2VzcyBpbgordGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBieSB1c2luZyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5BbGxvd0NoYW5nZXMgb2ZmPC9MaXRlcmFsPgorY29uZmlndXJhdGlvbiBvcHRpb24uIEluIHRoaXMgY2FzZSwgdGhlIDxDb21tYW5kPmVuYWJsZXdyaXRlPC9Db21tYW5kPiBjb21tYW5kCit3aWxsIGJlIHJlZnVzZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlXaGVuIHdyaXRlIGFjY2VzcyBpcyBlbmFibGVkLCB0aGUgZGF0YSB3aWxsIG5ldmVyIGNoYW5nZQoraW1tZWRpYXRlbHkuIFJhdGhlciwgYSBzcGVjaWZpYyA8Q29tbWFuZD53cml0ZWRhdGE8L0NvbW1hbmQ+IGNvbW1hbmQgaXMgbmVlZGVkCit0byB1cGRhdGUgdGhlIG9iamVjdCBpbiB0aGUgZGlzayB3aXRoIHRoZSBjaGFuZ2VkIG9iamVjdCBpbiBtZW1vcnkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJbiBhZGRpdGlvbiwgQSBsb2dnaW5nIG9wdGlvbiBpcyBwcm92aWRlZCB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uCitmaWxlIG9wdGlvbnMgPExpdGVyYWwgcmVtYXA9InR0Ij5Mb2dDaGFuZ2VzPC9MaXRlcmFsPiBhbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5Mb2dGaWxlPC9MaXRlcmFsPi4gV2l0aCBsb2dnaW5nCitlbmFibGVkLCBlYWNoIGNoYW5nZSB0byB0aGUgZGlzayB3aWxsIGJlIGxvZ2dlZCBhdCBhIHZlcnkgcHJpbWl0aXZlCitsZXZlbCAtIEEgaGV4IGR1bXAgb2YgdGhlIG9yaWdpbmFsIGRhdGEgYW5kIG9mIHRoZSBuZXcgd3JpdHRlbiBkYXRhLgorVGhlIGxvZyBmaWxlIHdpbGwgYmUgYSB0ZXh0IGZpbGUgd2hpY2ggaXMgZWFzaWx5IHJlYWRhYmxlLCBhbmQgeW91CitjYW4gbWFrZSB1c2Ugb2YgaXQgdG8gdW5kbyBhbnkgY2hhbmdlcyB3aGljaCB5b3UgbWFkZSAoRVhUMkVEIGRvZXNuJ3QKK21ha2UgdXNlIG9mIHRoZSBsb2cgZmlsZSBmb3IgdGhhdCBwdXJwb3NlLCBpdCBqdXN0IGxvZ3MgdGhlIGNoYW5nZXMpLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9PcmRlcmVkTGlzdD4KKworUGxlYXNlIHJlbWVtYmVyIHRoYXQgdGhpcyBpcyBvbmx5IHRoZSBpbml0aWFsIHJlbGVhc2Ugb2YgRVhUMkVELCBhbmQgaXQgaXMKK25vdCB2ZXJ5IG11Y2ggdGVzdGVkIC0gSXQgaXMgcmVhc29uYWJsZSB0byBhc3N1bWUgdGhhdCA8TGl0ZXJhbCByZW1hcD0idHQiPnRoZXJlIGFyZQorYnVnczwvTGl0ZXJhbD4uCitIb3dldmVyLCB0aGUgbG9nZ2luZyBvcHRpb24gYWJvdmUgY2FuIG9mZmVyIHByb3RlY3Rpb24gZXZlbiBmcm9tIHRoaXMKK3VuZm9ydHVuYXRlIGNhc2UuIFRoZXJlZm9yLCBJIGhpZ2hseSByZWNvbW1lbmQgdGhhdCBhdCBsZWFzdCB3aGVuIGZpcnN0Cit3b3JraW5nIHdpdGggRVhUMkVELCB0aGUgbG9nZ2luZyBvcHRpb24gd2lsbCBiZSBlbmFibGVkLCBkZXNwaXRlIHRoZSBkaXNrCitzcGFjZSB3aGljaCBpdCBjb25zdW1lcy4KKzwvUGFyYT4KKworPC9TZWN0Mz4KKworPC9TZWN0Mj4KKworPFNlY3QyIGlkPSJoZWxwLXJlZiI+Cis8VGl0bGU+VGhlIGhlbHAgY29tbWFuZDwvVGl0bGU+CisKKzxQYXJhPgorV2hlbiBsb2FkZWQsIEVYVDJFRCB3aWxsIHNob3cgYSBzaG9ydCBoZWxwIHNjcmVlbi4gVGhpcyBoZWxwIHNjcmVlbiBjYW4KK2Fsd2F5cyBiZSByZXRyaWV2ZWQgYnkgdGhlIGNvbW1hbmQgPENvbW1hbmQ+aGVscDwvQ29tbWFuZD4uIFRoZSBoZWxwIHNjcmVlbiBkaXNwbGF5cyBhCitsaXN0IG9mIGFsbCB0aGUgY29tbWFuZHMgd2hpY2ggYXJlIGF2YWlsYWJsZSBhdCB0aGlzIHBvaW50LiBBdCBzdGFydHVwLCBvbmx5Cit0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5HZW5lcmFsIGNvbW1hbmRzPC9MaXRlcmFsPiBhcmUgYXZhaWxhYmxlLgorVGhpcyB3aWxsIGNoYW5nZSB3aXRoIHRpbWUsIHNpbmNlIGVhY2ggb2JqZWN0IGhhcyBpdHMgb3duIGNvbW1hbmRzLiBUaHVzLAorY29tbWFuZHMgd2hpY2ggYXJlIGF2YWlsYWJsZSBub3cgbWF5IG5vdCBiZSBhdmFpbGFibGUgbGF0ZXIuCitVc2luZyA8Q29tbWFuZD5oZWxwPC9Db21tYW5kPiA8RW1waGFzaXM+Y29tbWFuZDwvRW1waGFzaXM+IHdpbGwgZGlzcGxheSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0Cit0aGUgc3BlY2lmaWMgY29tbWFuZCA8RW1waGFzaXM+Y29tbWFuZDwvRW1waGFzaXM+LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDIgaWQ9InNldGRldmljZS1yZWYiPgorPFRpdGxlPlRoZSBzZXRkZXZpY2UgY29tbWFuZDwvVGl0bGU+CisKKzxQYXJhPgorVGhlIGZpcnN0IGNvbW1hbmQgdGhhdCBpcyB1c3VhbGx5IGVudGVyZWQgdG8gRVhUMkVEIGlzIHRoZSA8Q29tbWFuZD5zZXRkZXZpY2U8L0NvbW1hbmQ+Citjb21tYW5kLiBUaGlzIGNvbW1hbmQgc2ltcGx5IHRlbGxzIEVYVDJFRCBvbiB3aGljaCBkZXZpY2UgdGhlIGZpbGVzeXN0ZW0gaXMKK3ByZXNlbnQuIEZvciBleGFtcGxlLCBzdXBwb3NlIG15IGV4dDIgZmlsZXN5c3RlbSBpcyBvbiB0aGUgZmlyc3QgcGFydGl0aW9uCitvZiBteSBpZGUgZGlzay4gVGhlIGNvbW1hbmQgd2lsbCBiZToKKworPFNjcmVlbj4KK3NldGRldmljZSAvZGV2L2hkYTEKKzwvU2NyZWVuPgorCitUaGUgZm9sbG93aW5nIGFjdGlvbnMgd2lsbCB0YWtlIHBsYWNlIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6CisKKzxPcmRlcmVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJRVhUMkVEIHdpbGwgY2hlY2sgaWYgdGhlIHBhcnRpdGlvbiBpcyBtb3VudGVkLgorSWYgdGhlIHBhcnRpdGlvbiBpcyBtb3VudGVkICg8TGl0ZXJhbCByZW1hcD0idHQiPmhpZ2hseSBub3QgcmVjb21tZW5kZWQ8L0xpdGVyYWw+KSwKK3RoZSBhY2NlcHQvcmVqZWN0IGJlaGF2aW9yIHdpbGwgYmUgZGVjaWRlZCBieSB0aGUgY29uZmlndXJhdGlvbgorZmlsZS4gQ3Jvc3MgcmVmZXJlbmNlIHNlY3Rpb24gPFhSZWYgTGlua0VuZD0ibW91bnRlZC1yZWYiPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBzcGVjaWZpZWQgZGV2aWNlIHdpbGwgYmUgb3BlbmVkIGluIHJlYWQtb25seSBtb2RlLiBUaGUKK3Blcm1pc3Npb25zIG9mIHRoZSBkZXZpY2Ugc2hvdWxkIGJlIHNldCBpbiBhIHdheSB0aGF0IGFsbG93cworeW91IHRvIG9wZW4gdGhlIGRldmljZSBmb3IgcmVhZCBhY2Nlc3MuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlBdXRvZGV0ZWN0aW9uIG9mIGFuIGV4dDIgZmlsZXN5c3RlbSB3aWxsIGJlIG1hZGUgYnkgc2VhcmNoaW5nIGZvcgordGhlIGV4dDIgbWFnaWMgbnVtYmVyIGluIHRoZSBtYWluIHN1cGVyYmxvY2suCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJbiB0aGUgY2FzZSBvZiBhIHN1Y2Nlc3NmdWwgcmVjb2duaXRpb24gb2YgYW4gZXh0MiBmaWxlc3lzdGVtLCB0aGUKK2V4dDIgZmlsZXN5c3RlbSBzcGVjaWZpYyBjb21tYW5kcyBhbmQgdGhlIGV4dDIgc3BlY2lmaWMgb2JqZWN0CitkZWZpbml0aW9ucyB3aWxsIGJlIHJlZ2lzdGVyZWQuIFRoZSBvYmplY3QgZGVmaW5pdGlvbnMgd2lsbCBiZSByZWFkCithdCBydW4gdGltZSBmcm9tIGEgZmlsZSBzcGVjaWZpZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworSW4gY2FzZSBvZiBhIGNvcnJ1cHRlZCBleHQyIGZpbGVzeXN0ZW0sIGl0IGlzIHF1aXRlIHBvc3NpYmxlIHRoYXQKK3RoZSBtYWluIHN1cGVyYmxvY2sgaXMgZGFtYWdlZCBhbmQgYXV0b2RldGVjdGlvbiB3aWxsIGZhaWwuIEluIHRoYXQKK2Nhc2UsIHVzZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gPExpdGVyYWwgcmVtYXA9InR0Ij5Gb3JjZUV4dDIgb248L0xpdGVyYWw+LiBUaGlzIGlzIG5vdAordGhlIGRlZmF1bHQgY2FzZSBzaW5jZSBFWFQyRUQgY2FuIGJlIHVzZWQgYXQgYSBsb3dlciBsZXZlbCB0byBlZGl0IGEKK25vbi1leHQyIGZpbGVzeXN0ZW0uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJbiBhIGNhc2Ugb2YgYSBzdWNjZXNzZnVsIGF1dG9kZXRlY3Rpb24sIGVzc2VudGlhbCBpbmZvcm1hdGlvbiBhYm91dAordGhlIGZpbGVzeXN0ZW0gc3VjaCBhcyB0aGUgYmxvY2sgc2l6ZSB3aWxsIGJlIHJlYWQgZnJvbSB0aGUKK3N1cGVyYmxvY2ssIHVubGVzcyB0aGUgdXNlZCBvdmVycmlkZXMgdGhpcyBiZWhhdmlvciB3aXRoIGFuCitjb25maWd1cmF0aW9uIG9wdGlvbiAobm90IHJlY29tbWVuZGVkKS4gSW4gdGhhdCBjYXNlLCB0aGUgcGFyYW1ldGVycword2lsbCBiZSByZWFkIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworSW4gYSBjYXNlIG9mIGFuIGF1dG9kZXRlY3Rpb24gZmFpbHVyZSwgdGhlIGVzc2VudGlhbCBwYXJhbWV0ZXJzCit3aWxsIGJlIHJlYWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9PcmRlcmVkTGlzdD4KKworQXNzdW1pbmcgdGhhdCB5b3UgYXJlIGVkaXRpbmcgYW4gZXh0MiBmaWxlc3lzdGVtIGFuZCB0aGF0IGV2ZXJ5dGhpbmcgZ29lcword2VsbCwgeW91IHdpbGwgbm90aWNlIHRoYXQgYWRkaXRpb25hbCBjb21tYW5kcyBhcmUgbm93IGF2YWlsYWJsZSBpbiB0aGUgaGVscAorc2NyZWVuLCB1bmRlciB0aGUgc2VjdGlvbiA8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDIgZmlsZXN5c3RlbSBnZW5lcmFsIGNvbW1hbmRzPC9MaXRlcmFsPi4gSW4KK2FkZGl0aW9uLCBFWFQyRUQgbm93IHJlY29nbml6ZXMgYSBmZXcgb2JqZWN0cyB3aGljaCBhcmUgZXNzZW50aWFsIHRvIHRoZQorZWRpdGluZyBvZiBhbiBleHQyIGZpbGVzeXN0ZW0uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5Ud28gbGV2ZWxzIG9mIHVzYWdlPC9UaXRsZT4KKworPFNlY3QyPgorPFRpdGxlPkxvdyBsZXZlbCB1c2FnZTwvVGl0bGU+CisKKzxQYXJhPgorVGhpcyBzZWN0aW9uIGV4cGxhaW5zIHdoYXQgRVhUMkVEIHByb3ZpZGVzIGV2ZW4gd2hlbiBub3QgZWRpdGluZyBhbiBleHQyCitmaWxlc3lzdGVtLgorPC9QYXJhPgorCis8UGFyYT4KK0V2ZW4gYXQgdGhpcyBsZXZlbCwgRVhUMkVEIGlzIG1vcmUgdGhhbiBqdXN0IGEgaGV4IGVkaXRvci4gSXQgc3RpbGwgYWxsb3dzCitkZWZpbml0aW9uIG9mIG9iamVjdHMgYW5kIHZhcmlhYmxlcyBpbiBydW4gdGltZSB0aHJvdWdoIGEgdXNlciBmaWxlLAorYWx0aG91Z2ggb2YtY291cnNlIHRoZSBvYmplY3RzIHdpbGwgbm90IGhhdmUgc3BlY2lhbCBmaW5lIHR1bmVkIGZ1bmN0aW9ucworY29ubmVjdGVkIHRvIHRoZW0uIEVYVDJFRCB3aWxsIGFsbG93IHlvdSB0byBtb3ZlIGluIHRoZSBmaWxlc3lzdGVtIHVzaW5nCis8Q29tbWFuZD5zZXRvZmZzZXQ8L0NvbW1hbmQ+LCBhbmQgdG8gYXBwbHkgYW4gb2JqZWN0IGRlZmluaXRpb24gb24gYSBzcGVjaWZpYyBwbGFjZQordXNpbmcgPENvbW1hbmQ+c2V0dHlwZTwvQ29tbWFuZD4gPEVtcGhhc2lzPnR5cGU8L0VtcGhhc2lzPi4gRnJvbSB0aGlzIHBvaW50IGFuZCBvbiwgdGhlIG9iamVjdCB3aWxsCitiZSBzaG93biA8TGl0ZXJhbCByZW1hcD0idHQiPmluIGl0cyBuYXRpdmUgZm9ybTwvTGl0ZXJhbD4gLSBZb3Ugd2lsbCBzZWUgYSBsaXN0IG9mIHRoZQordmFyaWFibGVzIHJhdGhlciB0aGFuIGp1c3QgYSBoZXggZHVtcCwgYW5kIHlvdSB3aWxsIGJlIGFibGUgdG8gY2hhbmdlIGVhY2gKK3ZhcmlhYmxlIGluIHRoZSBpbnR1aXRpdmUgZm9ybSA8Q29tbWFuZD5zZXQgdmFyaWFibGU9dmFsdWU8L0NvbW1hbmQ+LgorPC9QYXJhPgorCis8UGFyYT4KK1RvIGRlZmluZSBvYmplY3RzLCB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIDxMaXRlcmFsIHJlbWFwPSJ0dCI+QWx0ZXJuYXRlRGVzY3JpcHRvcnM8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8UGFyYT4KK1RoZXJlIGFyZSBub3cgdHdvIGZvcm1zIG9mIGVkaXRpbmc6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUVkaXRpbmcgd2l0aG91dCBhIHR5cGUuIEluIHRoaXMgY2FzZSwgdGhlIGRpc2sgYmxvY2sgd2lsbCBiZSBzaG93bgorYXMgYSB0ZXh0K2hleCBkdW1wLCBhbmQgeW91IHdpbGwgYmUgYWJsZSB0byBtb3ZlIGFsb25nIGFuZCBjaGFuZ2UgaXQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlFZGl0aW5nIHdpdGggYSB0eXBlLiBJbiB0aGlzIGNhc2UsIHRoZSBvYmplY3QncyB2YXJpYWJsZXMgd2lsbCBiZQorc2hvd24sIGFuZCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNoYW5nZSBlYWNoIHZhcmlhYmxlIGluIGl0cyBuYXRpdmUgZm9ybS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5IaWdoIGxldmVsIHVzYWdlPC9UaXRsZT4KKworPFBhcmE+CitFWFQyRUQgd2FzIGRlc2lnbmVkIGZvciB0aGUgZWRpdGluZyBvZiB0aGUgZXh0MiBmaWxlc3lzdGVtLiBBcyBzdWNoLCBpdAorInVuZGVyc3RhbmRzIiB0aGUgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUgdG8gc29tZSBleHRlbnQuIEVhY2ggb2JqZWN0IG5vdyBoYXMKK3NwZWNpYWwgZmluZSB0dW5lZCAnQycgZnVuY3Rpb25zIGNvbm5lY3RlZCB0byBpdCwgd2hpY2gga25vd3MgaG93IHRvIGRpc3BsYXkKK2l0IGluIGFuIGludHVpdGl2ZSBmb3JtLCBhbmQgaG93IHRoZSBvYmplY3QgZml0cyBpbiB0aGUgZ2VuZXJhbCBkZXNpZ24gb2YKK3RoZSBleHQyIGZpbGVzeXN0ZW0uIEl0IGlzIG9mLWNvdXJzZSBtdWNoIGVhc2llciB0byB1c2UgdGhpcyB0eXBlIG9mCitlZGl0aW5nLiBGb3IgZXhhbXBsZToKKworPFNjcmVlbj4KK0lzc3VlIDxFbXBoYXNpcz5ncm91cCAyPC9FbXBoYXNpcz4gdG8gbG9vayBhdCB0aGUgbWFpbiBjb3B5IG9mIHRoZSB0aGlyZCBncm91cCBibG9jaworZGVzY3JpcHRvci4gV2l0aCA8RW1waGFzaXM+Z29jb3B5IDE8L0VtcGhhc2lzPiB5b3UgY2FuIG1vdmUgdG8gaXRzIGZpcnN0IGJhY2t1cCBjb3B5LAorYW5kIHdpdGggPEVtcGhhc2lzPmlub2RlPC9FbXBoYXNpcz4geW91IGNhbiBzdGFydCBlZGl0aW5nIHRoZSBpbm9kZSB0YWJsZSBvZiB0aGUgYWJvdmUKK2dyb3VwIGJsb2NrLiBGcm9tIGhlcmUsIGlmIHRoZSBpbm9kZSBjb3JyZXNwb25kcyB0byBhIGZpbGUsIHlvdSBjYW4KK3VzZSA8RW1waGFzaXM+ZmlsZTwvRW1waGFzaXM+IHRvIGVkaXQgdGhlIGZpbGUgaW4gYSAiY29udGludW91cyIgd2F5LCB1c2luZworPEVtcGhhc2lzPm5leHRibG9jazwvRW1waGFzaXM+IHRvIHBhc3MgdG8gaXRzIG5leHQgYmxvY2ssIGxldHRpbmcgRVhUMkVEIGZvbGxvd2luZyBieQoraXRzZWxmIHRoZSBkaXJlY3QgYmxvY2tzLCBpbmRpcmVjdCBibG9ja3MsIC4uLiwgd2hpbGUgc3RpbGwgcHJlc2VydmluZyB0aGUKK2FjdHVhbCB2aWV3IG9mIHRoZSBleGFjdCBibG9jayB1c2FnZSBvZiB0aGUgZmlsZS4KKzwvU2NyZWVuPgorCitUaGUgcG9pbnQgaXMgdGhhdCB0aGUgInRvdXIiIG9mIHRoZSBmaWxlc3lzdGVtIHdpbGwgbm93IGJlIHN5bmNocm9uaWMgcmF0aGVyCit0aGFuIGFzeW5jaHJvbmljIC0gRWFjaCBvYmplY3QgaGFzIHRoZSAibGlua3MiIHRvIHBhc3MgYmV0d2VlbiBjb25uZWN0ZWQKK2xvZ2ljYWwgc3RydWN0dXJlcywgYW5kIHNwZWNpYWwgZmluZS10dW5lZCBmdW5jdGlvbnMgdG8gZGVhbCB3aXRoIGl0LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+R2VuZXJhbCBjb21tYW5kczwvVGl0bGU+CisKKzxQYXJhPgorSSB3aWxsIG5vdyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBleHBsYW5hdGlvbiBvZiB0aGUgZ2VuZXJhbCBjb21tYW5kcy4KK1BsZWFzZSBmZWVsIGZyZWUgdG8gZXhwZXJpbWVudCwgYnV0IHRha2UgY2FyZSB3aGVuIHVzaW5nIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5lbmFibGV3cml0ZTwvTGl0ZXJhbD4gY29tbWFuZC4KKzwvUGFyYT4KKworPFBhcmE+CitXaGVuZXZlciBhIGNvbW1hbmQgc3ludGF4IGlzIHNwZWNpZmllZCwgYXJndW1lbnRzIHdoaWNoIGFyZSBvcHRpb25hbCBhcmUKK2VuY2xvc2VkIHdpdGggc3F1YXJlIGJyYWNrZXRzLgorPC9QYXJhPgorCis8UGFyYT4KK1BsZWFzZSBub3RlIHRoYXQgaW4gRVhUMkVELCBlYWNoIGNvbW1hbmQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBzcGVjaWZpYworb2JqZWN0IHRvIHByb3ZpZGUgc3BlY2lhbCBmaW5lLXR1bmVkIGZ1bmN0aW9uYWxpdHkuIEluIGdlbmVyYWwsIEkgd2FzCithdHRlbXB0aW5nIHRvIHByZXNlcnZlIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gdGhvc2UgZnVuY3Rpb25zLCB3aGljaCBhcmUKK2FjY2Vzc2libGUgYnkgdGhlIHNhbWUgbmFtZS4KKzwvUGFyYT4KKworPFNlY3QyIGlkPSJkaXNhYmxld3JpdGUtcmVmIj4KKzxUaXRsZT5kaXNhYmxld3JpdGU8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogZGlzYWJsZXdyaXRlCis8L1NjcmVlbj4KKworPENvbW1hbmQ+ZGlzYWJsZXdyaXRlPC9Db21tYW5kPiBpcyB1c2VkIHRvIHJlb3BlbiB0aGUgZGV2aWNlIHdpdGggcmVhZC1vbmx5IGFjY2Vzcy4gV2hlbgorZmlyc3QgcnVubmluZyBFWFQyRUQsIHRoZSBkZXZpY2UgaXMgb3BlbmVkIGluIHJlYWQtb25seSBtb2RlLCBhbmQgYW4KK2V4cGxpY2l0IDxDb21tYW5kPmVuYWJsZXdyaXRlPC9Db21tYW5kPiBpcyByZXF1aXJlZCBmb3Igd3JpdGUgYWNjZXNzLiBXaGVuIGZpbmlzaGluZword2l0aCBjaGFuZ2luZywgYSA8Q29tbWFuZD5kaXNhYmxld3JpdGU8L0NvbW1hbmQ+IGlzIHJlY29tbWVuZGVkIGZvciBzYWZldHkuIENyb3NzCityZWZlcmVuY2Ugc2VjdGlvbiA8WFJlZiBMaW5rRW5kPSJkaXNhYmxld3JpdGUtcmVmIj4uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0MiBpZD0iZW5hYmxld3JpdGUtcmVmIj4KKzxUaXRsZT5lbmFibGV3cml0ZTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBlbmFibGV3cml0ZQorPC9TY3JlZW4+CisKKzxDb21tYW5kPmVuYWJsZXdyaXRlPC9Db21tYW5kPiBpcyB1c2VkIHRvIHJlb3BlbiB0aGUgZGV2aWNlIHdpdGggcmVhZC13cml0ZSBhY2Nlc3MuCitXaGVuIGZpcnN0IHJ1bm5pbmcgRVhUMkVELCB0aGUgZGV2aWNlIGlzIG9wZW5lZCBpbiByZWFkLW9ubHkgbW9kZSwgYW5kIGFuCitleHBsaWNpdCA8Q29tbWFuZD5lbmFibGV3cml0ZTwvQ29tbWFuZD4gaXMgcmVxdWlyZWQgZm9yIHdyaXRlIGFjY2Vzcy4KKzxDb21tYW5kPmVuYWJsZXdyaXRlPC9Db21tYW5kPiB3aWxsIGZhaWwgaWYgd3JpdGUgYWNjZXNzIGlzIGRpc2FibGVkIGZyb20gdGhlCitjb25maWd1cmF0aW9uIGZpbGUgYnkgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+QWxsb3dDaGFuZ2VzIG9mZjwvTGl0ZXJhbD4gY29uZmlndXJhdGlvbiBvcHRpb24uCitFdmVuIGFmdGVyIDxDb21tYW5kPmVuYWJsZXdyaXRlPC9Db21tYW5kPiwgYW4gZXhwbGljaXQgPENvbW1hbmQ+d3JpdGVkYXRhPC9Db21tYW5kPgoraXMgcmVxdWlyZWQgdG8gYWN0dWFsbHkgd3JpdGUgdGhlIG5ldyBkYXRhIHRvIHRoZSBkaXNrLgorV2hlbiBmaW5pc2hpbmcgd2l0aCBjaGFuZ2luZywgYSA8Q29tbWFuZD5kaXNhYmxld3JpdGU8L0NvbW1hbmQ+IGlzIHJlY29tbWVuZGVkIGZvciBzYWZldHkuCitDcm9zcyByZWZlcmVuY2Ugc2VjdGlvbiA8WFJlZiBMaW5rRW5kPSJlbmFibGV3cml0ZS1yZWYiPi4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPmhlbHA8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogaGVscCBbY29tbWFuZF0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+aGVscDwvQ29tbWFuZD4gY29tbWFuZCBpcyBkZXNjcmliZWQgYXQgc2VjdGlvbiA8WFJlZiBMaW5rRW5kPSJoZWxwLXJlZiI+LiAKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyIGlkPSJuZXh0LXJlZiI+Cis8VGl0bGU+bmV4dDwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBuZXh0IFtudW1iZXJdCis8L1NjcmVlbj4KKworVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgPEVtcGhhc2lzPmdlbmVyYWwgY29tbWFuZDwvRW1waGFzaXM+IDxDb21tYW5kPm5leHQ8L0NvbW1hbmQ+LiA8Q29tbWFuZD5uZXh0PC9Db21tYW5kPgoraXMgb3ZlcnJpZGRlbiBieSBzZXZlcmFsIHR5cGVzIGluIEVYVDJFRCwgdG8gcHJvdmlkZSBmaW5lLXR1bmVkCitmdW5jdGlvbmFsaXR5LgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPm5leHQgZ2VuZXJhbCBjb21tYW5kPC9MaXRlcmFsPiBiZWhhdmlvciBpcyBkZXBlbmRlZCBvbiB3aGV0aGVyIHlvdSBhcmUgZWRpdGluZyBhCitzcGVjaWZpYyBvYmplY3QsIG9yIG5vbmUuCis8L1BhcmE+CisKKzxQYXJhPgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJbiB0aGUgY2FzZSB3aGVyZSBUeXBlIGlzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bm9uZTwvTGl0ZXJhbD4gKFRoZSBjdXJyZW50IHR5cGUgaXMgc2hvd2VkCitvbiB0aGUgc3RhdHVzIHdpbmRvdyBieSB0aGUgPENvbW1hbmQ+c2hvdzwvQ29tbWFuZD4gY29tbWFuZCksIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bmV4dDwvTGl0ZXJhbD4KK3Bhc3NlcyB0byB0aGUgbmV4dCA8RW1waGFzaXM+bnVtYmVyPC9FbXBoYXNpcz4gYnl0ZXMgaW4gdGhlIGN1cnJlbnQgZWRpdGVkIGJsb2NrLgorSWYgPEVtcGhhc2lzPm51bWJlcjwvRW1waGFzaXM+IGlzIG5vdCBzcGVjaWZpZWQsIDxFbXBoYXNpcz5udW1iZXI9MTwvRW1waGFzaXM+IGlzIGFzc3VtZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKyAJSW4gdGhlIGNhc2Ugd2hlcmUgVHlwZSBpcyBkZWZpbmVkLCB0aGUgPENvbW1hbmQ+bmV4dDwvQ29tbWFuZD4gY29tbWFuZHMgYXNzdW1lcwordGhhdCB5b3UgYXJlIGVkaXRpbmcgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvZiB0aGF0IHR5cGUsIGFuZCB0aGUKKzxDb21tYW5kPm5leHQ8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBqdXN0IHBhc3MgdG8gdGhlIG5leHQgZW50cnkgaW4gdGhlIGFycmF5LgorSWYgPEVtcGhhc2lzPm51bWJlcjwvRW1waGFzaXM+IGlzIGRlZmluZWQsIGl0IHdpbGwgcGFzcyA8RW1waGFzaXM+bnVtYmVyPC9FbXBoYXNpcz4gZW50cmllcworYWhlYWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDIgaWQ9InBnZG4tcmVmIj4KKzxUaXRsZT5wZ2RuPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHBnZG4KKzwvU2NyZWVuPgorCitVc3VhbGx5IHRoZSBlZGl0ZWQgZGF0YSBkb2Vzbid0IGZpdCBpbnRvIHRoZSB2aXNpYmxlIG1haW4gd2luZG93LiBJbiB0aGlzCitjYXNlLCB0aGUgc3RhdHVzIHdpbmRvdyB3aWxsIGluZGljYXRlIHRoYXQgdGhlcmUgaXMgbW9yZSB0byBzZWUgImJlbG93IiBieQordGhlIG1lc3NhZ2UgPExpdGVyYWwgcmVtYXA9InR0Ij5QYWdlIHggb2YgeTwvTGl0ZXJhbD4uIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSBhcmUgPEVtcGhhc2lzPnk8L0VtcGhhc2lzPiBwYWdlcwordG90YWwsIGFuZCB5b3UgYXJlIGN1cnJlbnRseSB2aWV3aW5nIHRoZSA8RW1waGFzaXM+eDwvRW1waGFzaXM+IHBhZ2UuIFdpdGggdGhlIDxDb21tYW5kPnBnZG48L0NvbW1hbmQ+Citjb21tYW5kLCB5b3UgY2FuIHBhc3MgdG8gdGhlIG5leHQgYXZhaWxhYmxlIHBhZ2UuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5wZ3VwPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHBndXAKKzwvU2NyZWVuPgorCis8L1BhcmE+CisKKzxQYXJhPgorPENvbW1hbmQ+cGd1cDwvQ29tbWFuZD4gaXMgdGhlIG9wcG9zaXRlIG9mIDxDb21tYW5kPnBnZG48L0NvbW1hbmQ+IC0gSXQgd2lsbCBwYXNzIHRvIHRoZSBwcmV2aW91cworcGFnZS4gQ3Jvc3MgcmVmZXJlbmNlIHNlY3Rpb24gPFhSZWYgTGlua0VuZD0icGdkbi1yZWYiPi4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPnByZXY8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogcHJldiBbbnVtYmVyXQorPC9TY3JlZW4+CisKKzwvUGFyYT4KKworPFBhcmE+Cis8Q29tbWFuZD5wcmV2PC9Db21tYW5kPiBpcyB0aGUgb3Bwb3NpdGUgb2YgPENvbW1hbmQ+bmV4dDwvQ29tbWFuZD4uIENyb3NzIHJlZmVyZW5jZSBzZWN0aW9uCis8WFJlZiBMaW5rRW5kPSJuZXh0LXJlZiI+LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDIgaWQ9InJlY2FsbC1yZWYiPgorPFRpdGxlPnJlY2FsbDwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiByZWNhbGwgb2JqZWN0Cis8L1NjcmVlbj4KKworPENvbW1hbmQ+cmVjYWxsPC9Db21tYW5kPiBpcyB0aGUgb3Bwb3NpdGUgb2YgPENvbW1hbmQ+cmVtZW1iZXI8L0NvbW1hbmQ+LiBJdCB3aWxsIHBsYWNlIHlvdSBhdCB0aGUKK3BsYWNlIHlvdSB3aGVyZSB3aGVuIHNhdmluZyB0aGUgb2JqZWN0IHBvc2l0aW9uIGFuZCB0eXBlIGluZm9ybWF0aW9uLiBDcm9zcworcmVmZXJlbmNlIHNlY3Rpb24gPFhSZWYgTGlua0VuZD0icmVtZW1iZXItcmVmIj4uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5yZWRyYXc8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogcmVkcmF3Cis8L1NjcmVlbj4KKworU29tZXRpbWVzIHRoZSBzY3JlZW4gZGlzcGxheSBnZXRzIGNvcnJ1cHRlZC4gSSBzdGlsbCBoYXZlIHByb2JsZW1zIHdpdGgKK3RoaXMuIFRoZSA8Q29tbWFuZD5yZWRyYXc8L0NvbW1hbmQ+IGNvbW1hbmQgc2ltcGx5IHJlZHJhd3MgdGhlIGVudGlyZSBkaXNwbGF5IHNjcmVlbi4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyIGlkPSJyZW1lbWJlci1yZWYiPgorPFRpdGxlPnJlbWVtYmVyPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHJlbWVtYmVyIG9iamVjdAorPC9TY3JlZW4+CisKK0VYVDJFRCBwcm92aWRlcyB5b3UgPExpdGVyYWwgcmVtYXA9InR0Ij5tZW1vcnk8L0xpdGVyYWw+IG9mIG9iamVjdHM7IFdoaWxlIGVkaXRpbmcsIHlvdSBtYXkgcmVhY2ggYW4KK29iamVjdCB3aGljaCB5b3Ugd2lsbCBsaWtlIHRvIHJldHVybiB0byBsYXRlci4gVGhlIDxDb21tYW5kPnJlbWVtYmVyPC9Db21tYW5kPiBjb21tYW5kCit3aWxsIHN0b3JlIGluIG1lbW9yeSB0aGUgY3VycmVudCBwbGFjZSBhbmQgdHlwZSBvZiB0aGUgb2JqZWN0LiBZb3UgY2FuCityZXR1cm4gdG8gdGhlIG9iamVjdCBieSB1c2luZyB0aGUgPENvbW1hbmQ+cmVjYWxsPC9Db21tYW5kPiBjb21tYW5kLiBDcm9zcyByZWZlcmVuY2UKK3NlY3Rpb24gPFhSZWYgTGlua0VuZD0icmVjYWxsLXJlZiI+LgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+Tm90ZTo8L0xpdGVyYWw+CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVdoZW4gcmVtZW1iZXJpbmcgYSA8TGl0ZXJhbCByZW1hcD0idHQiPmZpbGU8L0xpdGVyYWw+IG9yIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXJlY3Rvcnk8L0xpdGVyYWw+LCB0aGUKK2NvcnJlc3BvbmRpbmcgaW5vZGUgd2lsbCBiZSBzYXZlZCBpbiBtZW1vcnkuIFRoZSBiYXNpYyByZWFzb24gaXMgdGhhdAordGhlIGlub2RlIGlzIGVzc2VudGlhbCBmb3IgZmluZGluZyB0aGUgYmxvY2tzIG9mIHRoZSBmaWxlIG9yIHRoZQorZGlyZWN0b3J5LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPnNldDwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBzZXQgW3RleHQgfHwgaGV4XSBhcmcxIFthcmcyIGFyZzMgLi4uXQorCitvcgorCitTeW50YXg6IHNldCB2YXJpYWJsZT12YWx1ZQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5zZXQ8L0NvbW1hbmQ+IGNvbW1hbmQgaXMgdXNlZCB0byBtb2RpZnkgdGhlIGN1cnJlbnQgZGF0YS4KK1RoZSA8Q29tbWFuZD5zZXQgZ2VuZXJhbCBjb21tYW5kPC9Db21tYW5kPiBiZWhhdmlvciBpcyBkZXBlbmRlZCBvbiB3aGV0aGVyIHlvdSBhcmUgZWRpdGluZyBhCitzcGVjaWZpYyBvYmplY3QsIG9yIG5vbmUuCis8L1BhcmE+CisKKzxQYXJhPgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJbiB0aGUgY2FzZSB3aGVyZSBUeXBlIGlzIDxDb21tYW5kPm5vbmU8L0NvbW1hbmQ+LCB0aGUgZmlyc3Qgc3ludGF4IHNob3VsZCBiZQordXNlZC4gVGhlIHNldCBjb21tYW5kIGFmZmVjdHMgdGhlIGRhdGEgc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgCitoaWdobGlnaHRlZCBwb3NpdGlvbiBpbiB0aGUgZWRpdGVkIGJsb2NrLgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlXaGVuIHVzaW5nIHRoZSA8Q29tbWFuZD5zZXQgaGV4PC9Db21tYW5kPiBjb21tYW5kLCBhIGxpc3Qgb2YKK2hleGFkZWNpbWFsIGJ5dGVzIHNob3VsZCBmb2xsb3cuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlXaGVuIHVzaW5nIHRoZSA8Q29tbWFuZD5zZXQgdGV4dDwvQ29tbWFuZD4gY29tbWFuZCwgaXQgc2hvdWxkIGJlIGZvbGxvd2VkCitieSBhIHRleHQgc3RyaW5nLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKK0V4YW1wbGVzOgorCis8U2NyZWVuPgorCXNldCBoZXggMDkgMGEgMGIgMGMgMGQgMGUgMGYKKwlzZXQgdGV4dCBMaW51eCBpcyBqdXN0IGdyZWF0ICEKKwkKKzwvU2NyZWVuPgorCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKyAJSW4gdGhlIGNhc2Ugd2hlcmUgVHlwZSBpcyBkZWZpbmVkLCB0aGUgc2Vjb25kIHN5bnRheCBzaG91bGQgYmUgdXNlZC4KK1RoZSBzZXQgY29tbWFuZHMganVzdCBzZXRzIHRoZSB2YXJpYWJsZSA8RW1waGFzaXM+dmFyaWFibGU8L0VtcGhhc2lzPiB3aXRoIHRoZQordmFsdWUgPEVtcGhhc2lzPnZhbHVlPC9FbXBoYXNpcz4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworSW4gYW55IGNhc2UsIHRoZSBkYXRhIGlzIG9ubHkgY2hhbmdlZCBpbiBtZW1vcnkuIEZvciBhbiBhY3R1YWwgdXBkYXRlIHRvIHRoZQorZGlzaywgdXNlIHRoZSA8Q29tbWFuZD53cml0ZWRhdGE8L0NvbW1hbmQ+IGNvbW1hbmQuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5zZXRkZXZpY2U8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogc2V0ZGV2aWNlIGRldmljZQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5zZXRkZXZpY2U8L0NvbW1hbmQ+IGNvbW1hbmQgaXMgZGVzY3JpYmVkIGF0IHNlY3Rpb24gPFhSZWYgTGlua0VuZD0ic2V0ZGV2aWNlLXJlZiI+LiAKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPnNldG9mZnNldDwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBzZXRvZmZzZXQgW2Jsb2NrIHx8IHR5cGVdIFsrfC1db2Zmc2V0Cis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPnNldG9mZnNldDwvQ29tbWFuZD4gY29tbWFuZCBpcyB1c2VkIHRvIG1vdmUgYXN5bmNocm9uaWNhbGx5IGluc2lkZSB0aGUgZmlsZQorc3lzdGVtLiBJdCBpcyBjb25zaWRlcmVkIGEgbG93IGxldmVsIGNvbW1hbmQsIGFuZCB1c3VhbGx5IHNob3VsZCBub3QgYmUgdXNlZAord2hlbiBlZGl0aW5nIGFuIGV4dDIgZmlsZXN5c3RlbSwgc2ltcGx5IGJlY2F1c2UgbW92ZW1lbnQgaXMgYmV0dGVyCit1dGlsaXplZCB0aHJvdWdoIHRoZSBzcGVjaWZpYyBleHQyIGNvbW1hbmRzLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8Q29tbWFuZD5vZmZzZXQ8L0NvbW1hbmQ+IGlzIGluIGJ5dGVzLCBhbmQgbWVhbndoaWxlIHNob3VsZCBiZSBwb3NpdGl2ZSBhbmQgc21hbGxlcgordGhhbiAyR0IuCis8L1BhcmE+CisKKzxQYXJhPgorVXNlIG9mIHRoZSA8Q29tbWFuZD5ibG9jazwvQ29tbWFuZD4gbW9kaWZpZXIgY2hhbmdlcyB0aGUgY291bnRpbmcgdW5pdCB0byBibG9jay4KKzwvUGFyYT4KKworPFBhcmE+CitVc2Ugb2YgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+KyBvciAtPC9MaXRlcmFsPiBtb2RpZmllcnMgc2lnbmFscyB0aGF0IHRoZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8KK3RoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9QYXJhPgorCis8UGFyYT4KK3VzZSBvZiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij50eXBlPC9MaXRlcmFsPiBtb2RpZmllciBpcyBhbGxvd2VkIG9ubHkgd2l0aCByZWxhdGl2ZSBvZmZzZXQuIFRoaXMKK21vZGlmaWVyIHdpbGwgbXVsdGlwbHkgdGhlIG9mZnNldCBieSB0aGUgc2l6ZSBvZiB0aGUgY3VycmVudCB0eXBlLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+c2V0dHlwZTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBzZXR0eXBlIHR5cGUgfHwgW25vbmUgfCBoZXhdCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPnNldHR5cGU8L0NvbW1hbmQ+IGNvbW1hbmQgaXMgdXNlZCB0byBtb3ZlIGFwcGx5IHRoZSBvYmplY3QgZGVmaW5pdGlvbnMgb2YKK3RoZSB0eXBlIDxFbXBoYXNpcz50eXBlPC9FbXBoYXNpcz4gb24gdGhlIGN1cnJlbnQgcG9zaXRpb24uIEl0IGlzIGNvbnNpZGVyZWQgYSBsb3cgbGV2ZWwKK2NvbW1hbmQgYW5kIHVzdWFsbHkgc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gZWRpdGluZyBhbiBleHQyIGZpbGVzeXN0ZW0gc2luY2UKK0VYVDJFRCBwcm92aWRlcyBiZXR0ZXIgdG9vbHMuIEl0IGlzIG9mLWNvdXJzZSB2ZXJ5IHVzZWZ1bCB3aGVuIGVkaXRpbmcgYQorbm9uLWV4dDIgZmlsZXN5c3RlbSBhbmQgdXNpbmcgdXNlci1kZWZpbmVkIG9iamVjdHMuCis8L1BhcmE+CisKKzxQYXJhPgorV2hlbiA8RW1waGFzaXM+dHlwZTwvRW1waGFzaXM+IGlzIDxFbXBoYXNpcz5oZXg8L0VtcGhhc2lzPiBvciA8RW1waGFzaXM+bm9uZTwvRW1waGFzaXM+LCB0aGUgZGF0YSB3aWxsIGJlIGRpc3BsYXllZCBhcworYSBoZXggYW5kIHRleHQgZHVtcC4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPnNob3c8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogc2hvdworPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5zaG93PC9Db21tYW5kPiBjb21tYW5kIHdpbGwgc2hvdyB0aGUgZGF0YSBvZiB0aGUgY3VycmVudCBvYmplY3QgYXQgdGhlCitjdXJyZW50IHBvc2l0aW9uIG9uIHRoZSBtYWluIGRpc3BsYXkgd2luZG93LiBJdCB3aWxsIGFsc28gdXBkYXRlIHRoZSBzdGF0dXMKK3dpbmRvdyB3aXRoIHR5cGUgc3BlY2lmaWMgaW5mb3JtYXRpb24uIEl0IG1heSBiZSBuZWNlc3NhcnkgdG8gdXNlCis8Q29tbWFuZD5wZ2RuPC9Db21tYW5kPiBhbmQgPENvbW1hbmQ+cGd1cDwvQ29tbWFuZD4gdG8gdmlldyB0aGUgZW50aXJlIGRhdGEuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT53cml0ZWRhdGE8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogd3JpdGVkYXRhCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPndyaXRlZGF0YTwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIHVwZGF0ZSB0aGUgZGlzayB3aXRoIHRoZSBvYmplY3QgZGF0YSB0aGF0CitpcyBjdXJyZW50bHkgaW4gbWVtb3J5LiBUaGlzIGlzIHRoZSBwb2ludCBhdCB3aGljaCBhY3R1YWwgY2hhbmdlIGlzIG1hZGUgdG8KK3RoZSBmaWxlc3lzdGVtLiBXaXRob3V0IHRoaXMgY29tbWFuZCwgdGhlIGVkaXRlZCBkYXRhIHdpbGwgbm90IGhhdmUgYW55CitlZmZlY3QuIFdyaXRlIGFjY2VzcyBzaG91bGQgYmUgYWxsb3dlZCBmb3IgYSBzdWNjZXNzZnVsIHVwZGF0ZS4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPkVkaXRpbmcgYW4gZXh0MiBmaWxlc3lzdGVtPC9UaXRsZT4KKworPFBhcmE+CitJbiBvcmRlciB0byBlZGl0IGFuIGV4dDIgZmlsZXN5c3RlbSwgeW91IHNob3VsZCwgb2YgY291cnNlLCBrbm93IHRoZSBzdHJ1Y3R1cmUKK29mIHRoZSBleHQyIGZpbGVzeXN0ZW0uIElmIHlvdSBmZWVsIHRoYXQgeW91IGxhY2sgc29tZSBrbm93bGVkZ2UgaW4gdGhpcworYXJlYSwgSSBzdWdnZXN0IHRoYXQgeW91IGRvIHNvbWUgb2YgdGhlIGZvbGxvd2luZzoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJUmVhZCB0aGUgc3VwcGxpZWQgZXh0MiB0ZWNobmljYWwgaW5mb3JtYXRpb24uIEkgdHJpZWQgdG8gc3VtbWFyaXplCit0aGUgYmFzaWMgaW5mb3JtYXRpb24gd2hpY2ggaXMgbmVlZGVkIHRvIGdldCB5b3Ugc3RhcnRlZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUdldCB0aGUgc2xpZGVzIHRoYXQgUmVteSBDYXJkIChUaGUgYXV0aG9yIG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0pCitwcmVwYXJlZCBjb25jZXJuaW5nIHRoZSBleHQyIGZpbGVzeXN0ZW0uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlSZWFkIHRoZSBrZXJuZWwgc291cmNlcy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCitBdCB0aGlzIHBvaW50LCB5b3Ugc2hvdWxkIGJlIGZhbWlsaWFyIHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtczoKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+YmxvY2ssIGlub2RlLCBzdXBlcmJsb2NrLCBibG9jayBncm91cHMsIGJsb2NrIGFsbG9jYXRpb24gYml0bWFwLCBpbm9kZQorYWxsb2NhdGlvbiBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3JzLCBmaWxlLCBkaXJlY3RvcnkuPC9MaXRlcmFsPk1vc3Qgb2YgdGhlIGFib3ZlCithcmUgb2JqZWN0cyBpbiBFWFQyRUQuCis8L1BhcmE+CisKKzxQYXJhPgorV2hlbiBlZGl0aW5nIGFuIGV4dDIgZmlsZXN5c3RlbSBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgdGhlIGV4dDIKK3NwZWNpZmljIGNvbW1hbmRzLCByYXRoZXIgdGhlbiB0aGUgZ2VuZXJhbCBjb21tYW5kcyAgPENvbW1hbmQ+c2V0b2Zmc2V0PC9Db21tYW5kPiBhbmQKKzxDb21tYW5kPnNldHR5cGU8L0NvbW1hbmQ+LCBtYWlubHkgYmVjYXVzZToKKworPE9yZGVyZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJbiBtb3N0IGNhc2VzIGl0IHdpbGwgYmUgdW5yZWxpYWJsZSwgYW5kIHdpbGwgZGlzcGxheSBpbmNvcnJlY3QKK2luZm9ybWF0aW9uLgorCitTb21ldGltZXMgaW4gb3JkZXIgdG8gZWRpdCBhbiBvYmplY3QsIEVYVDJFRCBuZWVkcyB0aGUgaW5mb3JtYXRpb24KK29mIHNvbWUgb3RoZXIgcmVsYXRlZCBvYmplY3RzLiBGb3IgZXhhbXBsZSwgd2hlbiBlZGl0aW5nIGEKK2RpcmVjdG9yeSwgRVhUMkVEIG5lZWRzIGFjY2VzcyB0byB0aGUgaW5vZGUgb2YgdGhlIGVkaXRlZCBkaXJlY3RvcnkuCitTaW1wbHkgc2V0dGluZyB0aGUgdHlwZSB0byBhIGRpcmVjdG9yeSA8TGl0ZXJhbCByZW1hcD0idHQiPndpbGwgYmUgdW5yZWxpYWJsZTwvTGl0ZXJhbD4sCitzaW5jZSB0aGUgb2JqZWN0IGFzc3VtZXMgdGhhdCB5b3UgcGFzc2VkIHRocm91Z2ggaXRzIGlub2RlIHRvIHJlYWNoCitpdCwgYW5kIGV4cGVjdHMgdGhpcyBpbmZvcm1hdGlvbiwgd2hpY2ggaXNuJ3QgaW5pdGlhbGl6ZWQgaWYgeW91CitkaXJlY3RseSBzZXQgdGhlIHR5cGUgdG8gYSBkaXJlY3RvcnkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlFWFQyRUQgb2ZmZXJzIGZhciBiZXR0ZXIgdG9vbHMgZm9yIGhhbmRsaW5nIHRoZSBleHQyIGZpbGVzeXN0ZW0KK3VzaW5nIHRoZSBleHQyIHNwZWNpZmljIGNvbW1hbmRzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9PcmRlcmVkTGlzdD4KKworPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+ZXh0MiBnZW5lcmFsIGNvbW1hbmRzPC9UaXRsZT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyIGdlbmVyYWwgY29tbWFuZHM8L0xpdGVyYWw+IGFyZSBhdmFpbGFibGUgb25seSB3aGVuIHlvdSBhcmUgZWRpdGluZyBhbgorZXh0MiBmaWxlc3lzdGVtLiBUaGV5IGFyZSA8TGl0ZXJhbCByZW1hcD0idHQiPmdlbmVyYWw8L0xpdGVyYWw+IGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgYXJlIG5vdAorc3BlY2lmaWMgdG8gc29tZSBvYmplY3QsIGFuZCBjYW4gYmUgaW52b2tlZCBhbnl0aW1lLgorPC9QYXJhPgorCis8U2VjdDIgaWQ9ImdlbmVyYWwtc3VwZXJibG9jayI+Cis8VGl0bGU+c3VwZXI8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogc3VwZXIKKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+c3VwZXI8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCAiYnJpbmcgeW91IiB0byB0aGUgbWFpbiBzdXBlcmJsb2NrIGNvcHkuIEl0Cit3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBvYmplY3QgdHlwZSB0byA8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDImbG93YmFyO3N1cGVyJmxvd2JhcjtibG9jazwvTGl0ZXJhbD4uIFRoZW4geW91Cit3aWxsIGJlIGFibGUgdG8gdmlldyBhbmQgZWRpdCB0aGUgc3VwZXJibG9jay4gV2hlbiB5b3UgYXJlIGluIHRoZQorc3VwZXJibG9jaywgb3RoZXIgY29tbWFuZHMgd2lsbCBiZSBhdmFpbGFibGUuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5ncm91cDwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBncm91cCBbbnVtYmVyXQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5ncm91cDwvQ29tbWFuZD4gY29tbWFuZCB3aWxsICJicmluZyB5b3UiIHRvIHRoZSBtYWluIGNvcHkgb2YgdGhlCis8RW1waGFzaXM+bnVtYmVyPC9FbXBoYXNpcz4gZ3JvdXAgZGVzY3JpcHRvci4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgb2JqZWN0IHR5cGUgdG8KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MiZsb3diYXI7Z3JvdXAmbG93YmFyO2Rlc2M8L0xpdGVyYWw+LiBUaGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gdmlldyBhbmQgZWRpdCB0aGUgZ3JvdXAKK2Rlc2NyaXB0b3IgZW50cnkuIFdoZW4geW91IGFyZSB0aGVyZSwgb3RoZXIgY29tbWFuZHMgd2lsbCBiZSBhdmFpbGFibGUuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5jZDwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBjZCBwYXRoCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmNkPC9Db21tYW5kPiBjb21tYW5kIHdpbGwgbGV0IHlvdSB0cmF2ZWwgaW4gdGhlIGZpbGVzeXN0ZW0gaW4gdGhlIG5pY2Ugd2F5Cit0aGF0IHRoZSBtb3VudGVkIGZpbGVzeXN0ZW0gd291bGQgaGF2ZSBsZXQgeW91LgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8Q29tbWFuZD5jZDwvQ29tbWFuZD4gY29tbWFuZCBpcyBhIGNvbXBsaWNhdGVkIGNvbW1hbmQuIEFsdGhvdWdoIGl0IG1heSBzb3VuZAorc2ltcGxlIGF0IGZpcnN0LCBhbiBpbXBsZW1lbnRhdGlvbiBvZiBhIHR5cGljYWwgY2QgcmVxdWlyZXMgcGFzc2luZyB0aHJvdWdoCit0aGUgZ3JvdXAgZGVzY3JpcHRvcnMsIGlub2RlcywgZGlyZWN0b3J5IGVudHJpZXMsIGV0Yy4gRm9yIGV4YW1wbGU6Cis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGlubm9jZW50IGNkIC91c3IgY29tbWFuZCBjYW4gYmUgZG9uZSBieSB1c2luZyBtb3JlIHByaW1pdGl2ZQorRVhUMkVEIGNvbW1hbmRzIGluIHRoZSBmb2xsb3dpbmcgd2F5IChJdCBpcyBpbXBsZW1lbnRlZCBleGFjdGx5IHRoaXMgd2F5KToKKworPE9yZGVyZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlVc2luZyA8Q29tbWFuZD5ncm91cCAwPC9Db21tYW5kPiB0byBnbyB0byB0aGUgZmlyc3QgZ3JvdXAgZGVzY3JpcHRvci4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVVzaW5nIDxDb21tYW5kPmlub2RlPC9Db21tYW5kPiB0byBnZXQgdG8gdGhlIEJhZCBibG9ja3MgaW5vZGUuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlVc2luZyA8Q29tbWFuZD5uZXh0PC9Db21tYW5kPiB0byBwYXNzIHRvIHRoZSByb290IGRpcmVjdG9yeSBpbm9kZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVVzaW5nIDxDb21tYW5kPmRpcjwvQ29tbWFuZD4gdG8gc2VlIHRoZSBkaXJlY3RvcnkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlVc2luZyA8Q29tbWFuZD5uZXh0PC9Db21tYW5kPiB1bnRpbCB3ZSBmaW5kIHRoZSBkaXJlY3RvcnkgdXNyLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVXNpbmcgPENvbW1hbmQ+Zm9sbG93aW5vZGU8L0NvbW1hbmQ+IHRvIHBhc3MgdG8gdGhlIGlub2RlIGNvcnJlc3BvbmRpbmcgdG8gdXNyLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVXNpbmcgPENvbW1hbmQ+ZGlyPC9Db21tYW5kPiB0byBzZWUgdGhlIGRpcmVjdG9yeSBvZiAvdXNyLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9PcmRlcmVkTGlzdD4KKworQW5kIHRob3NlIGNvbW1hbmRzIGFyZW4ndCB0aGF0IHByaW1pdGl2ZTsgRm9yIGV4YW1wbGUsIHRoZSB0cmFjaW5nIG9mIHRoZQorYmxvY2tzIHdoaWNoIGJlbG9uZyB0byB0aGUgcm9vdCBkaXJlY3RvcnkgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBkaXIKK2NvbW1hbmQgYmVoaW5kIHRoZSBzY2VuZXMsIGFuZCB0aGUgZm9sbG93aW5vZGUgY29tbWFuZCB3aWxsIGF1dG9tYXRpY2FsbHkKKyJydW4iIHRvIHRoZSBjb3JyZWN0IGdyb3VwIGRlc2NyaXB0b3IgaW4gb3JkZXIgdG8gZmluZCB0aGUgcmVxdWlyZWQgaW5vZGUuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIHBhdGggdG8gdGhlIDxDb21tYW5kPmdlbmVyYWwgY2Q8L0NvbW1hbmQ+IGNvbW1hbmQgbmVlZHMgdG8gYmUgYSBmdWxsIHBhdGhuYW1lIC0KK1N0YXJ0aW5nIGZyb20gPEZpbGVuYW1lPi88L0ZpbGVuYW1lPi4gVGhlIDxDb21tYW5kPmNkPC9Db21tYW5kPiBjb21tYW5kIHN0b3BzIGF0IHRoZSBsYXN0IHJlYWNoYWJsZQorcG9pbnQsIHdoaWNoIGNhbiBiZSBhIGRpcmVjdG9yeSBlbnRyeSwgaW4gd2hpY2ggY2FzZSB0aGUgdHlwZSB3aWxsIGJlIHNldCB0bworPExpdGVyYWwgcmVtYXA9InR0Ij5kaXI8L0xpdGVyYWw+LCBvciBhbiBpbm9kZSwgaW4gd2hpY2ggY2FzZSB0aGUgdHlwZSB3aWxsIGJlIHNldCB0bworPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyJmxvd2Jhcjtpbm9kZTwvTGl0ZXJhbD4uIFN5bWJvbGljIGxpbmtzIChPbmx5IGZhc3Qgc3ltYm9saWMgbGlua3MsIG1lYW53aGlsZSkgYXJlCithdXRvbWF0aWNhbGx5IGZvbGxvd2VkIChpZiB0aGV5IGFyZSBub3QgYWNyb3NzIGZpbGVzeXN0ZW1zLCBvZi1jb3Vyc2UpLiBJZgordGhlIHR5cGUgaXMgc2V0IHRvIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlyPC9MaXRlcmFsPiwgeW91IGNhbiB1c2UgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSAKKyJjdXJyZW50IGRpcmVjdG9yeSIuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5UaGUgc3VwZXJibG9jazwvVGl0bGU+CisKKzxQYXJhPgorVGhlIHN1cGVyYmxvY2sgY2FuIGFsd2F5cyBiZSByZWFjaGVkIGJ5IHRoZSBleHQyIGdlbmVyYWwgY29tbWFuZAorPENvbW1hbmQ+c3VwZXI8L0NvbW1hbmQ+LiBDcm9zcyByZWZlcmVuY2Ugc2VjdGlvbiA8WFJlZiBMaW5rRW5kPSJnZW5lcmFsLXN1cGVyYmxvY2siPi4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgc3RhdHVzIHdpbmRvdyB3aWxsIHNob3cgeW91IHdoaWNoIGNvcHkgb2YgdGhlIHN1cGVyYmxvY2sgY29waWVzIHlvdSBhcmUKK2N1cnJlbnRseSBlZGl0aW5nLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBtYWluIGRhdGEgd2luZG93IHdpbGwgc2hvdyB5b3UgdGhlIHZhbHVlcyBvZiB0aGUgdmFyaW91cyBzdXBlcmJsb2NrCit2YXJpYWJsZXMsIGFsb25nIHdpdGggc29tZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgdmFsdWVzLgorPC9QYXJhPgorCis8UGFyYT4KK0RhdGEgY2FuIGJlIGNoYW5nZWQgd2l0aCB0aGUgPENvbW1hbmQ+c2V0PC9Db21tYW5kPiBhbmQgPENvbW1hbmQ+d3JpdGVkYXRhPC9Db21tYW5kPiBjb21tYW5kcy4KKworPFNjcmVlbj4KK0ZvciBleGFtcGxlLCBzZXQgc19yX2Jsb2Nrc19jb3VudD0xNDAwIHdpbGwgcmVzZXJ2ZSAxNDAwIGJsb2NrcyBmb3Igcm9vdC4KKzwvU2NyZWVuPgorCis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5nb2NvcHk8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogZ29jb3B5IG51bWJlcgorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5nb2NvcHk8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCAiYnJpbmcgeW91IiB0byB0aGUgYmFja3VwIGNvcHkgPEVtcGhhc2lzPm51bWJlcjwvRW1waGFzaXM+CitvZiB0aGUgc3VwZXJibG9jayBjb3BpZXMuIDxDb21tYW5kPmdvY29weSAwPC9Db21tYW5kPiwgZm9yIGV4YW1wbGUsIHdpbGwgYnJpbmcgeW91IHRvCit0aGUgbWFpbiBjb3B5LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+c2V0YWN0aXZlY29weTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBzZXRhY3RpdmVjb3B5Cis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPnNldGFjdGl2ZWNvcHk8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBjb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgY3VycmVudAorc3VwZXJibG9jayBjb3B5IG9udG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBtYWluIGNvcHkuIEl0IHdpbGwgYWxzbyBzd2l0Y2ggdG8KK2VkaXRpbmcgb2YgdGhlIG1haW4gY29weS4gTm8gYWN0dWFsIGRhdGEgaXMgd3JpdHRlbiB0byBkaXNrLCBvZi1jb3Vyc2UsCit1bnRpbCB5b3UgaXNzdWUgdGhlIDxDb21tYW5kPndyaXRlZGF0YTwvQ29tbWFuZD4gY29tbWFuZC4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSBncm91cCBkZXNjcmlwdG9yczwvVGl0bGU+CisKKzxQYXJhPgorVGhlIGdyb3VwIGRlc2NyaXB0b3JzIGNhbiBiZSBlZGl0ZWQgYnkgdGhlIDxDb21tYW5kPmdyb3VwPC9Db21tYW5kPiBjb21tYW5kLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBzdGF0dXMgd2luZG93IHdpbGwgaW5kaWNhdGUgdGhlIGN1cnJlbnQgZ3JvdXAgZGVzY3JpcHRvciwgdGhlIHRvdGFsCitudW1iZXIgb2YgZ3JvdXAgZGVzY3JpcHRvcnMgKGFuZCBoZW5jZSBvZiBncm91cCBibG9ja3MpLCBhbmQgdGhlIGJhY2t1cCBjb3B5CitudW1iZXIuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIG1haW4gZGF0YSB3aW5kb3cgd2lsbCBqdXN0IHNob3cgeW91IHRoZSB2YWx1ZXMgb2YgdGhlIHZhcmlvdXMgdmFyaWFibGVzLgorPC9QYXJhPgorCis8UGFyYT4KK0Jhc2ljYWxseSwgeW91IGNhbiB1c2UgdGhlIDxDb21tYW5kPm5leHQ8L0NvbW1hbmQ+IGFuZCA8Q29tbWFuZD5wcmV2PC9Db21tYW5kPiBjb21tYW5kcywgYWxvbmcgd2l0aCB0aGUKKzxDb21tYW5kPnNldDwvQ29tbWFuZD4gY29tbWFuZCwgdG8gbW9kaWZ5IHRoZSBncm91cCBkZXNjcmlwdG9ycy4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgZ3JvdXAgZGVzY3JpcHRvcnMgb2JqZWN0IGlzIGEganVuY3Rpb24sIGZyb20gd2hpY2ggeW91IGNhbiByZWFjaDoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGlub2RlIHRhYmxlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGJsb2NrIGdyb3VwICh0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5pbm9kZTwvTGl0ZXJhbD4KK2NvbW1hbmQpCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgYmxvY2sgYWxsb2NhdGlvbiBiaXRtYXAgKHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmJsb2NrYml0bWFwPC9MaXRlcmFsPiBjb21tYW5kKQorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGlub2RlIGFsbG9jYXRpb24gYml0bWFwICh0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5pbm9kZWJpdG1hcDwvTGl0ZXJhbD4gY29tbWFuZCkKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5ibG9ja2JpdG1hcDwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBibG9ja2JpdG1hcAorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5ibG9ja2JpdG1hcDwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIGxldCB5b3UgZWRpdCB0aGUgYmxvY2sgYml0bWFwIGFsbG9jYXRpb24KK2Jsb2NrIG9mIHRoZSBjdXJyZW50IGdyb3VwIGJsb2NrLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+ZW50cnk8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogZW50cnkgbnVtYmVyCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmVudHJ5PC9Db21tYW5kPiBjb21tYW5kIHdpbGwgbW92ZSB5b3UgdG8gdGhlIDxFbXBoYXNpcz5udW1iZXI8L0VtcGhhc2lzPiBncm91cCBkZXNjcmlwdG9yIGluIHRoZQorZ3JvdXAgZGVzY3JpcHRvcnMgdGFibGUuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5pbm9kZTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBpbm9kZQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5pbm9kZTwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIHBhc3MgeW91IHRvIHRoZSBmaXJzdCBpbm9kZSBpbiB0aGUgY3VycmVudAorZ3JvdXAgYmxvY2suCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5pbm9kZWJpdG1hcDwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBpbm9kZWJpdG1hcAorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5pbm9kZWJpdG1hcDwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIGxldCB5b3UgZWRpdCB0aGUgaW5vZGUgYml0bWFwIGFsbG9jYXRpb24KK2Jsb2NrIG9mIHRoZSBjdXJyZW50IGdyb3VwIGJsb2NrLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+bmV4dDwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBuZXh0IFtudW1iZXJdCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPm5leHQ8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBwYXNzIHRvIHRoZSBuZXh0IDxFbXBoYXNpcz5udW1iZXI8L0VtcGhhc2lzPiBncm91cAorZGVzY3JpcHRvci4gSWYgPEVtcGhhc2lzPm51bWJlcjwvRW1waGFzaXM+IGlzIG9taXR0ZWQsIDxFbXBoYXNpcz5udW1iZXI9MTwvRW1waGFzaXM+IGlzIGFzc3VtZWQuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5wcmV2PC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHByZXYgW251bWJlcl0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+cHJldjwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIHBhc3MgdG8gdGhlIHByZXZpb3VzIDxFbXBoYXNpcz5udW1iZXI8L0VtcGhhc2lzPiBncm91cAorZGVzY3JpcHRvci4gSWYgPEVtcGhhc2lzPm51bWJlcjwvRW1waGFzaXM+IGlzIG9taXR0ZWQsIDxFbXBoYXNpcz5udW1iZXI9MTwvRW1waGFzaXM+IGlzIGFzc3VtZWQuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5zZXRhY3RpdmVjb3B5PC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHNldGFjdGl2ZWNvcHkKKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+c2V0YWN0aXZlY29weTwvQ29tbWFuZD4gY29tbWFuZCBjb3BpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IGdyb3VwCitkZXNjcmlwdG9yLCB0byBpdHMgbWFpbiBjb3B5LiBUaGUgdXBkYXRlZCBtYWluIGNvcHkgd2lsbCB0aGVuIGJlIHNob3duLiBObworYWN0dWFsIGNoYW5nZSBpcyBtYWRlIHRvIHRoZSBkaXNrIHVudGlsIHlvdSBpc3N1ZSB0aGUgPENvbW1hbmQ+d3JpdGVkYXRhPC9Db21tYW5kPgorY29tbWFuZC4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSBpbm9kZTwvVGl0bGU+CisKKzxQYXJhPgorQW4gaW5vZGUgY2FuIGJlIHJlYWNoZWQgYnkgdGhlIGZvbGxvd2luZyB0d28gd2F5czoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVXNpbmcgPENvbW1hbmQ+aW5vZGU8L0NvbW1hbmQ+IGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgZ3JvdXAgZGVzY3JpcHRvci4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVVzaW5nIDxDb21tYW5kPmZvbGxvd2lub2RlPC9Db21tYW5kPiBmcm9tIGEgZGlyZWN0b3J5IGVudHJ5LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVXNpbmcgdGhlIDxDb21tYW5kPmNkPC9Db21tYW5kPiBjb21tYW5kIHdpdGggdGhlIHBhdGhuYW1lIHRvIHRoZSBmaWxlLgorCitGb3IgZXhhbXBsZSwgPENvbW1hbmQ+Y2QgL3Vzci9zcmMvZXh0MmVkL2V4dDJlZC5oPC9Db21tYW5kPgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPFBhcmE+CitUaGUgc3RhdHVzIHdpbmRvdyB3aWxsIGluZGljYXRlOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgY3VycmVudCBnbG9iYWwgaW5vZGUgbnVtYmVyLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIHRvdGFsIHRvdGFsIG51bWJlciBvZiBpbm9kZXMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlPbiB3aGljaCBibG9jayBncm91cCB0aGUgaW5vZGUgaXMgYWxsb2NhdGVkLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIHRvdGFsIG51bWJlciBvZiBpbm9kZXMgaW4gdGhpcyBncm91cCBibG9jay4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBpbm9kZSBpbiB0aGUgY3VycmVudCBncm91cCBibG9jay4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSB0eXBlIG9mIHRoZSBpbm9kZSAoZmlsZSwgZGlyZWN0b3J5LCBzcGVjaWFsLCBldGMpLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPFBhcmE+CitUaGUgbWFpbiBkYXRhIHdpbmRvdywgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgb2YgdmFyaWFibGVzLCB3aWxsIGNvbnRhaW4KK3NvbWUgaW50ZXJwcmV0YXRpb25zIG9uIHRoZSByaWdodCBzaWRlLgorPC9QYXJhPgorCis8UGFyYT4KK0lmIHRoZSBpbm9kZSBjb3JyZXNwb25kcyB0byBhIGZpbGUsIHlvdSBjYW4gdXNlIHRoZSA8Q29tbWFuZD5maWxlPC9Db21tYW5kPiBjb21tYW5kIHRvCitlZGl0IHRoZSBmaWxlLgorPC9QYXJhPgorCis8UGFyYT4KK0lmIHRoZSBpbm9kZSBpcyBhbiBpbm9kZSBvZiBhIGRpcmVjdG9yeSwgeW91IGNhbiB1c2UgdGhlIDxDb21tYW5kPmRpcjwvQ29tbWFuZD4gY29tbWFuZAordG8gZWRpdCB0aGUgZGlyZWN0b3J5LgorPC9QYXJhPgorCis8U2VjdDI+Cis8VGl0bGU+ZGlyPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IGRpcgorPC9TY3JlZW4+CisKK0lmIHRoZSBpbm9kZSBtb2RlIGNvcnJlc3BvbmRzIHRvIGEgZGlyZWN0b3J5IChzaG93biBvbiB0aGUgc3RhdHVzIHdpbmRvdyksCit5b3UgY2FuIGVudGVyIGRpcmVjdG9yeSBtb2RlIGVkaXRpbmcgYnkgdXNpbmcgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXI8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+ZW50cnk8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogZW50cnkgbnVtYmVyCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmVudHJ5PC9Db21tYW5kPiBjb21tYW5kIHdpbGwgbW92ZSB5b3UgdG8gdGhlIDxFbXBoYXNpcz5udW1iZXI8L0VtcGhhc2lzPiBpbm9kZSBpbiB0aGUKK2N1cnJlbnQgaW5vZGUgdGFibGUuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5maWxlPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IGZpbGUKKzwvU2NyZWVuPgorCitJZiB0aGUgaW5vZGUgbW9kZSBjb3JyZXNwb25kcyB0byBhIGZpbGUgKHNob3duIG9uIHRoZSBzdGF0dXMgd2luZG93KSwKK3lvdSBjYW4gZW50ZXIgZmlsZSBtb2RlIGVkaXRpbmcgYnkgdXNpbmcgPENvbW1hbmQ+ZmlsZTwvQ29tbWFuZD4uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5ncm91cDwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBncm91cAorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5ncm91cDwvQ29tbWFuZD4gY29tbWFuZCBpcyB1c2VkIHRvIGdvIHRvIHRoZSBncm91cCBkZXNjcmlwdG9yIG9mIHRoZQorY3VycmVudCBncm91cCBibG9jay4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPm5leHQ8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogbmV4dCBbbnVtYmVyXQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5uZXh0PC9Db21tYW5kPiBjb21tYW5kIHdpbGwgcGFzcyB0byB0aGUgbmV4dCA8RW1waGFzaXM+bnVtYmVyPC9FbXBoYXNpcz4gaW5vZGUuCitJZiA8RW1waGFzaXM+bnVtYmVyPC9FbXBoYXNpcz4gaXMgb21pdHRlZCwgPEVtcGhhc2lzPm51bWJlcj0xPC9FbXBoYXNpcz4gaXMgYXNzdW1lZC4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPnByZXY8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogcHJldiBbbnVtYmVyXQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5wcmV2PC9Db21tYW5kPiBjb21tYW5kIHdpbGwgcGFzcyB0byB0aGUgcHJldmlvdXMgPEVtcGhhc2lzPm51bWJlcjwvRW1waGFzaXM+IGlub2RlLgorSWYgPEVtcGhhc2lzPm51bWJlcjwvRW1waGFzaXM+IGlzIG9taXR0ZWQsIDxFbXBoYXNpcz5udW1iZXI9MTwvRW1waGFzaXM+IGlzIGFzc3VtZWQuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5UaGUgZmlsZTwvVGl0bGU+CisKKzxQYXJhPgorV2hlbiBlZGl0aW5nIGEgZmlsZSwgRVhUMkVEIG9mZmVycyB5b3UgYSBib3RoIGEgY29udGludW91cyBhbmQgYSB0cnVlCitmcmFnbWVudGVkIHZpZXcgb2YgdGhlIGZpbGUgLSBUaGUgZmlsZSBpcyBzdGlsbCBzaG93biBibG9jayBieSBibG9jayB3aXRoCit0aGUgdHJ1ZSBibG9jayBudW1iZXIgYXQgZWFjaCBzdGFnZSBhbmQgRVhUMkVEIG9mZmVycyB5b3UgY29tbWFuZHMgd2hpY2gKK2FsbG93IHlvdSB0byBtb3ZlIGJldHdlZW4gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZSBibG9ja3M8L0xpdGVyYWw+LCB3aGlsZSBmaW5kaW5nIHRoZQorYWxsb2NhdGVkIGJsb2NrcyBieSB1c2luZyB0aGUgaW5vZGUgaW5mb3JtYXRpb24gYmVoaW5kIHRoZSBzY2VuZXMuCis8L1BhcmE+CisKKzxQYXJhPgorQXNpZGUgZnJvbSB0aGlzLCB0aGUgZWRpdGluZyBpcyBqdXN0IGEgPExpdGVyYWwgcmVtYXA9InR0Ij5oZXggZWRpdGluZzwvTGl0ZXJhbD4gLSBZb3UgbW92ZSB0aGUKK2N1cnNvciBpbiB0aGUgY3VycmVudCBibG9jayBvZiB0aGUgZmlsZSBieSB1c2luZyA8Q29tbWFuZD5uZXh0PC9Db21tYW5kPiBhbmQKKzxDb21tYW5kPnByZXY8L0NvbW1hbmQ+LCBtb3ZlIGJldHdlZW4gYmxvY2tzIGJ5IDxDb21tYW5kPm5leHRibG9jazwvQ29tbWFuZD4gYW5kIDxDb21tYW5kPnByZXZibG9jazwvQ29tbWFuZD4sCithbmQgbWFrZSBjaGFuZ2VzIGJ5IHRoZSA8Q29tbWFuZD5zZXQ8L0NvbW1hbmQ+IGNvbW1hbmQuIE5vdGUgdGhhdCB0aGUgc2V0IGNvbW1hbmQgaXMKK292ZXJyaWRkZW4gaGVyZSAtIFRoZXJlIGFyZSBubyB2YXJpYWJsZXMuIFRoZSA8Q29tbWFuZD53cml0ZWRhdGE8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbAordXBkYXRlIHRoZSBjdXJyZW50IGJsb2NrIHRvIHRoZSBkaXNrLgorPC9QYXJhPgorCis8UGFyYT4KK1JlYWNoaW5nIGEgZmlsZSBjYW4gYmUgZG9uZSBieSB1c2luZyB0aGUgPENvbW1hbmQ+ZmlsZTwvQ29tbWFuZD4gY29tbWFuZCBmcm9tIGl0cyBpbm9kZS4KK1RoZSBpbm9kZSBjYW4gYmUgcmVhY2hlZCBieSBhbnkgb3RoZXIgbWVhbnMsIGZvciBleGFtcGxlLCBieSB0aGUKKzxDb21tYW5kPmNkPC9Db21tYW5kPiBjb21tYW5kLCBpZiB5b3Uga25vdyB0aGUgZmlsZSBuYW1lLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBzdGF0dXMgd2luZG93IHdpbGwgaW5kaWNhdGU6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBnbG9iYWwgYmxvY2sgbnVtYmVyLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGludGVybmFsIGZpbGUgYmxvY2sgbnVtYmVyLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGZpbGUgb2Zmc2V0LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGZpbGUgc2l6ZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBmaWxlIGlub2RlIG51bWJlci4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBpbmRpcmVjdGlvbiBsZXZlbCAtIFdoZXRoZXIgaXQgaXMgYSBkaXJlY3QgYmxvY2sgKDApLCBpbmRpcmVjdAorKDEpLCBldGMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KK1RoZSBtYWluIGRhdGEgd2luZG93IHdpbGwgZGlzcGxheSB0aGUgZmlsZSBlaXRoZXIgaW4gaGV4IG1vZGUgb3IgaW4gdGV4dAorbW9kZSwgc2VsZWN0LWFibGUgYnkgdGhlIDxDb21tYW5kPmRpc3BsYXk8L0NvbW1hbmQ+IGNvbW1hbmQuCis8L1BhcmE+CisKKzxQYXJhPgorSW4gaGV4IG1vZGUsIEVYVDJFRCB3aWxsIGRpc3BsYXkgb2Zmc2V0cyBpbiB0aGUgY3VycmVudCBibG9jaywgYWxvbmcgd2l0aCBhCit0ZXh0IGFuZCBoZXggZHVtcCBvZiB0aGUgY3VycmVudCBibG9jay4KKzwvUGFyYT4KKworPFBhcmE+CitJbiBlaXRoZXIgY2FzZSB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5jdXJyZW50IHBsYWNlPC9MaXRlcmFsPiB3aWxsIGJlIGhpZ2hsaWdodGVkLiBJbiB0aGUgaGV4IG1vZGUKK2l0IHdpbGwgYmUgYWx3YXlzIGhpZ2hsaWdodGVkLCB3aGlsZSBpbiB0aGUgdGV4dCBtb2RlIGl0IHdpbGwgYmUgaGlnaGxpZ2h0ZWQKK2lmIHRoZSBjaGFyYWN0ZXIgaXMgZGlzcGxheS1hYmxlLgorPC9QYXJhPgorCis8U2VjdDI+Cis8VGl0bGU+YmxvY2s8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogYmxvY2sgYmxvY2tfbnVtCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmJsb2NrPC9Db21tYW5kPiBjb21tYW5kIGlzIHVzZWQgdG8gbW92ZSBpbnNpZGUgdGhlIGZpbGUuIFRoZQorPEVtcGhhc2lzPmJsb2NrJmxvd2JhcjtudW08L0VtcGhhc2lzPiBhcmd1bWVudCBpcyB0aGUgcmVxdWVzdGVkIGludGVybmFsIGZpbGUgYmxvY2sgbnVtYmVyLiBBCit2YWx1ZSBvZiAwIHdpbGwgcmVhY2ggdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPmRpc3BsYXk8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogZGlzcGxheSBbdGV4dCB8fCBoZXhdCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmRpc3BsYXk8L0NvbW1hbmQ+IGNvbW1hbmQgY2hhbmdlcyB0aGUgZGlzcGxheSBtb2RlIG9mIHRoZSBmaWxlLiAKKzxDb21tYW5kPmRpc3BsYXkKK2hleDwvQ29tbWFuZD4gd2lsbCBzd2l0Y2ggdG8gPENvbW1hbmQ+aGV4IG1vZGU8L0NvbW1hbmQ+LCB3aGlsZSA8Q29tbWFuZD5kaXNwbGF5IHRleHQ8L0NvbW1hbmQ+IHdpbGwgc3dpdGNoCit0byB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IG1vZGUgd2hlbiBubyA8Q29tbWFuZD5kaXNwbGF5PC9Db21tYW5kPiBjb21tYW5kIGlzIGlzc3VlZCBpcworPENvbW1hbmQ+aGV4IG1vZGU8L0NvbW1hbmQ+LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+aW5vZGU8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogaW5vZGUKKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+aW5vZGU8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCByZXR1cm4gdG8gdGhlIGlub2RlIG9mIHRoZSBjdXJyZW50IGZpbGUuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5uZXh0PC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IG5leHQgW251bV0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+bmV4dDwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIHBhc3MgdG8gdGhlIG5leHQgYnl0ZSBpbiB0aGUgZmlsZS4gSWYKKzxFbXBoYXNpcz5udW08L0VtcGhhc2lzPiBpcyBzdXBwbGllZCwgaXQgd2lsbCBwYXNzIHRvIHRoZSBuZXh0IDxFbXBoYXNpcz5udW08L0VtcGhhc2lzPiBieXRlcy4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPm5leHRibG9jazwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBuZXh0YmxvY2sgW251bV0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+bmV4dGJsb2NrPC9Db21tYW5kPiBjb21tYW5kIHdpbGwgcGFzcyB0byB0aGUgbmV4dCBibG9jayBpbiB0aGUgZmlsZS4gSWYKKzxFbXBoYXNpcz5udW08L0VtcGhhc2lzPiBpcyBzdXBwbGllZCwgaXQgd2lsbCBwYXNzIHRvIHRoZSBuZXh0IDxFbXBoYXNpcz5udW08L0VtcGhhc2lzPiBibG9ja3MuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5wcmV2PC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHByZXYgW251bV0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+cHJldjwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIHBhc3MgdG8gdGhlIHByZXZpb3VzIGJ5dGUgaW4gdGhlIGZpbGUuIElmCis8RW1waGFzaXM+bnVtPC9FbXBoYXNpcz4gaXMgc3VwcGxpZWQsIGl0IHdpbGwgcGFzcyB0byB0aGUgcHJldmlvdXMgPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+IGJ5dGVzLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+cHJldmJsb2NrPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHByZXZibG9jayBbbnVtXQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5uZXh0YmxvY2s8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBwYXNzIHRvIHRoZSBwcmV2aW91cyBibG9jayBpbiB0aGUgZmlsZS4gSWYKKzxFbXBoYXNpcz5udW08L0VtcGhhc2lzPiBpcyBzdXBwbGllZCwgaXQgd2lsbCBwYXNzIHRvIHRoZSBwcmV2aW91cyA8RW1waGFzaXM+bnVtPC9FbXBoYXNpcz4gYmxvY2tzLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+b2Zmc2V0PC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IG9mZnNldCBmaWxlX29mZnNldAorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5vZmZzZXQ8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBtb3ZlIHRvIHRoZSBzcGVjaWZpZWQgb2Zmc2V0IGluIHRoZSBmaWxlLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+c2V0PC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHNldCBbdGV4dCB8fCBoZXhdIGFyZzEgW2FyZzIgYXJnMyAuLi5dCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmZpbGUgc2V0PC9Db21tYW5kPiBjb21tYW5kIGlzIHdvcmtpbmcgbGlrZSB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5nZW5lcmFsIHNldCBjb21tYW5kPC9MaXRlcmFsPiwKK3dpdGggPExpdGVyYWwgcmVtYXA9InR0Ij50eXBlPW5vbmU8L0xpdGVyYWw+LiBUaGVyZSBhcmUgbm8gdmFyaWFibGVzLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+d3JpdGVkYXRhPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHdyaXRlZGF0YQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD53cml0ZWRhdGE8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCB1cGRhdGUgdGhlIGN1cnJlbnQgZmlsZSBibG9jayBpbiB0aGUgZGlzay4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSBkaXJlY3Rvcnk8L1RpdGxlPgorCis8UGFyYT4KK1doZW4gZWRpdGluZyBhIGZpbGUsIEVYVDJFRCBhbmFseXplcyBmb3IgeW91IGJvdGggdGhlIGFsbG9jYXRpb24gYmxvY2tzIG9mCit0aGUgZGlyZWN0b3J5IGVudHJpZXMsIGFuZCB0aGUgZGlyZWN0b3J5IGVudHJpZXMuCis8L1BhcmE+CisKKzxQYXJhPgorRWFjaCBkaXJlY3RvcnkgZW50cnkgaXMgZGlzcGxheWVkIG9uIG9uZSByb3cuIFlvdSBjYW4gbW92ZSB0aGUgaGlnaGxpZ2h0ZWQKK2VudHJ5IHdpdGggdGhlIHVzdWFsIDxDb21tYW5kPm5leHQ8L0NvbW1hbmQ+IGFuZCA8Q29tbWFuZD5wcmV2PC9Db21tYW5kPiBjb21tYW5kcywgYW5kICJkaXZlIGluIgord2l0aCB0aGUgPENvbW1hbmQ+Zm9sbG93aW5vZGU8L0NvbW1hbmQ+IGNvbW1hbmQuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIHN0YXR1cyB3aW5kb3cgd2lsbCBpbmRpY2F0ZToKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGRpcmVjdG9yeSBlbnRyeSBudW1iZXIuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgdG90YWwgbnVtYmVyIG9mIGRpcmVjdG9yeSBlbnRyaWVzIGluIHRoaXMgZGlyZWN0b3J5LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGN1cnJlbnQgZ2xvYmFsIGJsb2NrIG51bWJlci4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBjdXJyZW50IG9mZnNldCBpbiB0aGUgZW50aXJlIGRpcmVjdG9yeSAtIFdoZW4gdmlld2luZyB0aGUKK2RpcmVjdG9yeSBhcyBhIGNvbnRpbnVvdXMgZmlsZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBpbm9kZSBudW1iZXIgb2YgdGhlIGRpcmVjdG9yeSBpdHNlbGYuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgaW5kaXJlY3Rpb24gbGV2ZWwgLSBXaGV0aGVyIGl0IGlzIGEgZGlyZWN0IGJsb2NrICgwKSwgaW5kaXJlY3QKKygxKSwgZXRjLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPFNlY3QyPgorPFRpdGxlPmNkPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IGNkIFtwYXRoXQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5jZDwvQ29tbWFuZD4gY29tbWFuZCBpcyB1c2VkIGluIHRoZSB1c3VhbCBtZWFuaW5nLCBsaWtlIHRoZSBnbG9iYWwgY2QKK2NvbW1hbmQuCisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUlmIDxFbXBoYXNpcz5wYXRoPC9FbXBoYXNpcz4gaXMgbm90IHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGVudHJ5IGlzCitmb2xsb3dlZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxFbXBoYXNpcz5wYXRoPC9FbXBoYXNpcz4gY2FuIGJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxFbXBoYXNpcz5wYXRoPC9FbXBoYXNpcz4gY2FuIGFsc28gZW5kIHVwIGluIGEgZmlsZSwgaW4gd2hpY2ggY2FzZSB0aGUgZmlsZSBpbm9kZQord2lsbCBiZSByZWFjaGVkLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJU3ltYm9saWMgbGluayAoZmFzdCBvbmx5LCBtZWFud2hpbGUpIGlzIGF1dG9tYXRpY2FsbHkgZm9sbG93ZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+ZW50cnk8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogZW50cnkgW2VudHJ5X251bV0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+ZW50cnk8L0NvbW1hbmQ+IGNvbW1hbmQgc2V0cyA8RW1waGFzaXM+ZW50cnkmbG93YmFyO251bTwvRW1waGFzaXM+IGFzIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorZW50cnkuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5mb2xsb3dpbm9kZTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBmb2xsb3dpbm9kZQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5mb2xsb3dpbm9kZTwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIG1vdmUgeW91IHRvIHRoZSBpbm9kZSBwb2ludGVkIGJ5IHRoZQorY3VycmVudCBkaXJlY3RvcnkgZW50cnkuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5pbm9kZTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBpbm9kZQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5pbm9kZTwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIHJldHVybiB5b3UgdG8gdGhlIHBhcmVudCBpbm9kZSBvZiB0aGUgd2hvbGUKK2RpcmVjdG9yeSBsaXN0aW5nLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+bmV4dDwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBuZXh0IFtudW1dCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPm5leHQ8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBwYXNzIHRvIHRoZSBuZXh0IGRpcmVjdG9yeSBlbnRyeS4KK0lmIDxFbXBoYXNpcz5udW08L0VtcGhhc2lzPiBpcyBzdXBwbGllZCwgaXQgd2lsbCBwYXNzIHRvIHRoZSBuZXh0IDxFbXBoYXNpcz5udW08L0VtcGhhc2lzPiBlbnRyaWVzLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+cHJldjwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBwcmV2IFtudW1dCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPnByZXY8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBwYXNzIHRvIHRoZSBwcmV2aW91cyBkaXJlY3RvcnkgZW50cnkuCitJZiA8RW1waGFzaXM+bnVtPC9FbXBoYXNpcz4gaXMgc3VwcGxpZWQsIGl0IHdpbGwgcGFzcyB0byB0aGUgcHJldmlvdXMgPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+IGVudHJpZXMuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT53cml0ZWRhdGE8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogd3JpdGVkYXRhCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPndyaXRlZGF0YTwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIHdyaXRlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBlbnRyeSB0byB0aGUKK2Rpc2suCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzwvU2VjdDE+CisKKzxTZWN0MSBpZD0iYmxvY2stYml0bWFwIj4KKzxUaXRsZT5UaGUgYmxvY2sgYWxsb2NhdGlvbiBiaXRtYXA8L1RpdGxlPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmJsb2NrIGFsbG9jYXRpb24gYml0bWFwPC9MaXRlcmFsPiBvZiBhbnkgYmxvY2sgZ3JvdXAgY2FuIGJlIHJlYWNoZWQgZnJvbQordGhlIGNvcnJlc3BvbmRpbmcgZ3JvdXAgZGVzY3JpcHRvci4KKzwvUGFyYT4KKworPFBhcmE+CitZb3Ugd2lsbCBiZSBvZmZlcmVkIGEgYml0IGxpc3Rpbmcgb2YgdGhlIGVudGlyZSBibG9ja3MgaW4gdGhlIGdyb3VwLiBUaGUKK2N1cnJlbnQgYmxvY2sgd2lsbCBiZSBoaWdobGlnaHRlZCBhbmQgaXRzIG51bWJlciB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUKK3N0YXR1cyB3aW5kb3cuCis8L1BhcmE+CisKKzxQYXJhPgorQSB2YWx1ZSBvZiAiMSIgbWVhbnMgdGhhdCB0aGUgYmxvY2sgaXMgYWxsb2NhdGVkLCB3aGlsZSBhIHZhbHVlIG9mICIwIgorc2lnbmFscyB0aGF0IGl0IGlzIGZyZWUuIFRoZSB2YWx1ZSBpcyBhbHNvIGludGVycHJldGVkIGluIHRoZSBzdGF0dXMKK3dpbmRvdy4gWW91IGNhbiB1c2UgdGhlIHVzdWFsIDxDb21tYW5kPm5leHQvcHJldjwvQ29tbWFuZD4gY29tbWFuZHMsIGFsb25nIHdpdGggdGhlCis8Q29tbWFuZD5hbGxvY2F0ZS9kZWFsbG9jYXRlPC9Db21tYW5kPiBjb21tYW5kcy4KKzwvUGFyYT4KKworPFNlY3QyPgorPFRpdGxlPmFsbG9jYXRlPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IGFsbG9jYXRlIFtudW1dCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmFsbG9jYXRlPC9Db21tYW5kPiBjb21tYW5kIGFsbG9jYXRlcyA8RW1waGFzaXM+bnVtPC9FbXBoYXNpcz4gYmxvY2tzLCBzdGFydGluZyBmcm9tIHRoZQoraGlnaGxpZ2h0ZWQgcG9zaXRpb24uIElmIDxFbXBoYXNpcz5udW08L0VtcGhhc2lzPiBpcyBub3Qgc3BlY2lmaWVkLCA8RW1waGFzaXM+bnVtPTE8L0VtcGhhc2lzPiBpcyBhc3N1bWVkLgorT2YtY291cnNlLCBubyBhY3R1YWwgY2hhbmdlIGlzIG1hZGUgdW50aWwgeW91IGlzc3VlIGEgPENvbW1hbmQ+d3JpdGVkYXRhPC9Db21tYW5kPiBjb21tYW5kLiAKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPmRlYWxsb2NhdGU8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogZGVhbGxvY2F0ZSBbbnVtXQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5kZWFsbG9jYXRlPC9Db21tYW5kPiBjb21tYW5kIGRlYWxsb2NhdGVzIDxFbXBoYXNpcz5udW08L0VtcGhhc2lzPiBibG9ja3MsIHN0YXJ0aW5nIGZyb20gdGhlCitoaWdobGlnaHRlZCBwb3NpdGlvbi4gSWYgPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+IGlzIG5vdCBzcGVjaWZpZWQsIDxFbXBoYXNpcz5udW09MTwvRW1waGFzaXM+IGlzIGFzc3VtZWQuCitPZi1jb3Vyc2UsIG5vIGFjdHVhbCBjaGFuZ2UgaXMgbWFkZSB1bnRpbCB5b3UgaXNzdWUgYSA8Q29tbWFuZD53cml0ZWRhdGE8L0NvbW1hbmQ+IGNvbW1hbmQuIAorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+ZW50cnk8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogZW50cnkgW2VudHJ5X251bV0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+ZW50cnk8L0NvbW1hbmQ+IGNvbW1hbmQgc2V0cyB0aGUgY3VycmVudCBoaWdobGlnaHRlZCBibG9jayB0bworPEVtcGhhc2lzPmVudHJ5Jmxvd2JhcjtudW08L0VtcGhhc2lzPi4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPm5leHQ8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogbmV4dCBbbnVtXQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5uZXh0PC9Db21tYW5kPiBjb21tYW5kIHdpbGwgcGFzcyB0byB0aGUgbmV4dCBiaXQsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZQorbmV4dCBibG9jay4gSWYgPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+IGlzIHN1cHBsaWVkLCBpdCB3aWxsIHBhc3MgdG8gdGhlIG5leHQgPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+CitiaXRzLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+cHJldjwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBwcmV2IFtudW1dCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPnByZXY8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBwYXNzIHRvIHRoZSBwcmV2aW91cyBiaXQsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZQorcHJldmlvdXMgYmxvY2suIElmIDxFbXBoYXNpcz5udW08L0VtcGhhc2lzPiBpcyBzdXBwbGllZCwgaXQgd2lsbCBwYXNzIHRvIHRoZSBwcmV2aW91cworPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+IGJpdHMuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5UaGUgaW5vZGUgYWxsb2NhdGlvbiBiaXRtYXA8L1RpdGxlPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmlub2RlIGFsbG9jYXRpb24gYml0bWFwPC9MaXRlcmFsPiBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIGJsb2NrIGFsbG9jYXRpb24KK2JpdG1hcCBleHBsYWluZWQgYWJvdmUuIEl0IGlzIGFsc28gcmVhY2hlZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGdyb3VwCitkZXNjcmlwdG9yLiBQbGVhc2UgcmVmZXIgdG8gc2VjdGlvbiA8WFJlZiBMaW5rRW5kPSJibG9jay1iaXRtYXAiPi4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPkZpbGVzeXN0ZW0gc2l6ZSBsaW1pdGF0aW9uPC9UaXRsZT4KKworPFBhcmE+CitXaGlsZSBhbiBleHQyIGZpbGVzeXN0ZW0gaGFzIGEgc2l6ZSBsaW1pdCBvZiA8TGl0ZXJhbCByZW1hcD0idHQiPjQgVEI8L0xpdGVyYWw+LCBFWFQyRUQgY3VycmVudGx5Cis8TGl0ZXJhbCByZW1hcD0idHQiPmNhbid0PC9MaXRlcmFsPiBoYW5kbGUgZmlsZXN5c3RlbXMgd2hpY2ggYXJlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YmlnZ2VyIHRoYW4gMiBHQjwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxQYXJhPgorSSBhbSBzb3JyeSBmb3IgdGhlIGluY29udmVuaWVuY2UuIFRoaXMgd2lsbCBob3BlZnVsbHkgYmUgZml4ZWQgaW4gZnV0dXJlCityZWxlYXNlcy4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPkNvcHlyaWdodDwvVGl0bGU+CisKKzxQYXJhPgorRVhUMkVEIGlzIENvcHlyaWdodCAoQykgMTk5NSBHYWRpIE94bWFuLgorPC9QYXJhPgorCis8UGFyYT4KK0VYVDJFRCBpcyBoZXJlYnkgcGxhY2VkIHVuZGVyIHRoZSBHUEwgLSBHbnUgUHVibGljIExpY2Vuc2UuIFlvdSBhcmUgZnJlZSBhbmQKK3dlbGNvbWUgdG8gY29weSwgdmlldyBhbmQgbW9kaWZ5IHRoZSBzb3VyY2VzLiBNeSBvbmx5IHdpc2ggaXMgdGhhdCBteQorY29weXJpZ2h0IHByZXNlbnRlZCBhYm92ZSB3aWxsIGJlIGxlZnQgYW5kIHRoYXQgYSBsaXN0IG9mIHRoZSBidWcgZml4ZXMsCithZGRlZCBmZWF0dXJlcywgZXRjLCB3aWxsIGJlIHByb3ZpZGVkLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBlbnRpcmUgRVhUMkVEIHByb2plY3QgaXMgYmFzZWQsIG9mLWNvdXJzZSwgb24gdGhlIGtlcm5lbCBzb3VyY2VzLiBUaGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0Mi5kZXNjcmlwdG9yczwvTGl0ZXJhbD4gZGlzdHJpYnV0ZWQgd2l0aCBFWFQyRUQgaXMgYSBzbGlnaHRseSBtb2RpZmllZAordmVyc2lvbiBvZiB0aGUgbWFpbiBleHQyIGluY2x1ZGUgZmlsZSwgL3Vzci9pbmNsdWRlL2xpbnV4L2V4dDImbG93YmFyO2ZzLmguIEZvbGxvd3MKK3RoZSBvcmlnaW5hbCBjb3B5cmlnaHQ6Cis8L1BhcmE+CisKKzxQYXJhPgorCis8U2NyZWVuPgorLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L2V4dDJfZnMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NQorICogUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorICogTGFib3JhdG9pcmUgTUFTSSAtIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiAgZnJvbQorICoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L21pbml4X2ZzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICovCisKKzwvU2NyZWVuPgorCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5BY2tub3dsZWRnbWVudHM8L1RpdGxlPgorCis8UGFyYT4KK0VYVDJFRCB3YXMgY29uc3RydWN0ZWQgYXMgYSBzdHVkZW50IHByb2plY3QgaW4gdGhlIHNvZnR3YXJlCitsYWJvcmF0b3J5IG9mIHRoZSBmYWN1bHR5IG9mIGVsZWN0cmljYWwtZW5naW5lZXJpbmcgaW4gdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPlRlY2huaW9uIC0gSXNyYWVsJ3MgaW5zdGl0dXRlIG9mIHRlY2hub2xvZ3k8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8UGFyYT4KK0F0IGZpcnN0LCBJIHdvdWxkIGxpa2UgdG8gdGhhbmsgPFBlcnNvbk5hbWU+PEZpcnN0TmFtZT5Bdm5lcjwvRmlyc3ROYW1lPiA8U3VyTmFtZT5Mb3R0ZW08L1N1ck5hbWU+PC9QZXJzb25OYW1lPiBhbmQgPFBlcnNvbk5hbWU+PEhvbm9yaWZpYz5Eb2N0b3I8L0hvbm9yaWZpYz4gPEZpcnN0TmFtZT5JbGFuYTwvRmlyc3ROYW1lPiA8U3VyTmFtZT5EYXZpZDwvU3VybmFtZT48L1BlcnNvbk5hbWU+IGZvciB0aGVpciBpbnRlcmVzdCBhbmQgYXNzaXN0YW5jZSBpbiB0aGlzIHByb2plY3QuCis8L1BhcmE+CisKKzxQYXJhPgorSSB3b3VsZCBhbHNvIGxpa2UgdG8gdGhhbmsgdGhlIGZvbGxvd2luZyBwZW9wbGUsIHdobyB3ZXJlIGludm9sdmVkIGluIHRoZQorZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZXh0MiBmaWxlc3lzdGVtIGtlcm5lbCBjb2RlIGFuZCBzdXBwb3J0Cit1dGlsaXRpZXM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorPFBlcnNvbk5hbWU+PEZpcnN0TmFtZT5SZW15PC9GaXJzdE5hbWU+IDxTdXJOYW1lPkNhcmQ8L1N1ck5hbWU+PC9QZXJzb25OYW1lPgorCitXaG8gZGVzaWduZWQsIGltcGxlbWVudGVkIGFuZCBtYWludGFpbnMgdGhlIGV4dDIgZmlsZXN5c3RlbSBrZXJuZWwKK2NvZGUsIGFuZCBzb21lIG9mIHRoZSBleHQyIHV0aWxpdGllcy4gUmVteSBDYXJkIGlzIGFsc28gdGhlIGF1dGhvcgorb2Ygc2V2ZXJhbCBoZWxwZnVsIHNsaWRlcyBjb25jZXJuaW5nIHRoZSBleHQyIGZpbGVzeXN0ZW0uCitTcGVjaWZpY2FsbHksIGhlIGlzIHRoZSBhdXRob3Igb2YgPExpdGVyYWwgcmVtYXA9InR0Ij5GaWxlIE1hbmFnZW1lbnQgaW4gdGhlIExpbnV4CitLZXJuZWw8L0xpdGVyYWw+IGFuZCBvZiA8TGl0ZXJhbCByZW1hcD0idHQiPlRoZSBTZWNvbmQgRXh0ZW5kZWQgRmlsZSBTeXN0ZW0gLSBDdXJyZW50IFN0YXRlLAorRnV0dXJlIERldmVsb3BtZW50PC9MaXRlcmFsPi4KKworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+Cis8UGVyc29uTmFtZT48Rmlyc3ROYW1lPldheW5lPC9GaXJzdE5hbWU+IDxTdXJOYW1lPkRhdmlzb248L1N1ck5hbWU+PC9QZXJzb25OYW1lPgorCitXaG8gZGVzaWduZWQgdGhlIGV4dDIgZmlsZXN5c3RlbS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorPFBlcnNvbk5hbWU+PEZpcnN0TmFtZT5TdGVwaGVuPC9GaXJzdE5hbWU+IDxTdXJuYW1lPlR3ZWVkaWU8L1N1ck5hbWU+PC9QZXJzb25OYW1lPgorCitXaG8gaGVscGVkIGRlc2lnbmluZyB0aGUgZXh0MiBmaWxlc3lzdGVtIGtlcm5lbCBjb2RlIGFuZCB3cm90ZSB0aGUKK3NsaWRlcyA8TGl0ZXJhbCByZW1hcD0idHQiPk9wdGltaXphdGlvbnMgaW4gRmlsZSBTeXN0ZW1zPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorPFBlcnNvbk5hbWU+PEZpcnN0TmFtZT5UaGVvZG9yZTwvRmlyc3ROYW1lPiA8U3VyTmFtZT5UcydvPC9TdXJOYW1lPjwvUGVyc29uTmFtZT4KKworV2hvIGlzIHRoZSBhdXRob3Igb2Ygc2V2ZXJhbCBleHQyIHV0aWxpdGllcyBhbmQgb2YgdGhlIGV4dDIgbGlicmFyeQorPExpdGVyYWwgcmVtYXA9InR0Ij5saWJleHQyZnM8L0xpdGVyYWw+ICh3aGljaCBJIGRpZG4ndCB1c2UsIHNpbXBseSBiZWNhdXNlIEkgZGlkbid0IGtub3cKK2l0IGV4aXN0cyB3aGVuIEkgc3RhcnRlZCB0byB3b3JrIG9uIG15IHByb2plY3QpLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPFBhcmE+CitMYXN0bHksIEkgd291bGQgbGlrZSB0byB0aGFuaywgb2YtY291cnNlLCA8UGVyc29uTmFtZT48Rmlyc3ROYW1lPkxpbnVzPC9GaXJzdE5hbWU+IDxTdXJOYW1lPlRvcnZhbGRzPC9TdXJOYW1lPjwvUGVyc29uTmFtZT4gYW5kIHRoZQorTGludXggY29tbXVuaXR5IGZvciBwcm92aWRpbmcgYWxsIG9mIHVzIHdpdGggc3VjaCBhIGdyZWF0IG9wZXJhdGluZworc3lzdGVtLgorPC9QYXJhPgorCis8UGFyYT4KK1BsZWFzZSBjb250YWN0IG1lIGluIGEgY2FzZSBvZiBidWcgcmVwb3J0LCBzdWdnZXN0aW9ucywgb3IganVzdCBhYm91dAorYW55dGhpbmcgY29uY2VybmluZyBFWFQyRUQuCis8L1BhcmE+CisKKzxQYXJhPgorRW5qb3ksCis8L1BhcmE+CisKKzxQYXJhPgorR2FkaSBPeG1hbiAmbHQ7dGd1ZEB0b2NobmFwYzIudGVjaG5pb24uYWMuaWwmZ3Q7Cis8L1BhcmE+CisKKzxQYXJhPgorSGFpZmEsIEF1Z3VzdCA5NQorPC9QYXJhPgorCis8L1NlY3QxPgorCis8L0FydGljbGU+CmRpZmYgLS1naXQgYS9leHQyZWQvZXh0Mi5kZXNjcmlwdG9ycyBiL2V4dDJlZC9leHQyLmRlc2NyaXB0b3JzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmOTI3YjAKLS0tIC9kZXYvbnVsbAorKysgYi9leHQyZWQvZXh0Mi5kZXNjcmlwdG9ycwpAQCAtMCwwICsxLDk3NiBAQAorRXh0ZW5kZWQgMiBmaWxlc3lzdGVtIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBmb3IgZXh0MmVkLgorCitNb3N0IG9mIHRoaXMgZmlsZSBpcyBqdXN0IGNvcGllZCBmcm9tIHRoZSBleHQyIG1haW4gaW5jbHVkZSBmaWxlLgorCitNeSBwYXJzZXIgaXMgdmVyeSBwcmltaXRpdmUgLSBJdCBvbmx5IHNlYXJjaGVzIGZvciB0aGUgc3RydWN0IGtleXdvcmRzLAorYW5kIHVzZXMgdGhlIHZhcmlhYmxlcyBpbiB0aGVyZS4gVGhlIHJlc3Qgb2YgdGhlIGZpbGUgaXMganVzdCBpZ25vcmVkLgorCitZb3Ugd2lsbCBmaW5kIGF0IHRoZSBlbmQgYSBmZXcgYWRkaXRpb25hbCB0eXBlcyB3aGljaCBhcmUgbm90IGF2aWFibGUgaW4KK3RoZSBvcmlnaW5hbCBpbmNsdWRlIGZpbGUsIHN1Y2ggYXMgdGhlIHR5cGVzICJmaWxlIiBhbmQgImRpciIuIFRoZXkgaGF2ZQorbm8gdmFyaWFibGVzLCBidXQgYXJlIG5lY2Vzc2FyeSBkdWUgdG8gdGhlIHdheSBleHQyZWQgYmluZHMgQyBjb21tYW5kcwordG8gc3BlY2lmaWMgdHlwZXMuCisKK0dhZGkgT3htYW4sIDcvOTUKKworSGVyZSBpcyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0OgorCisvKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCAgUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFib3JhdG9pcmUgTUFTSSAtIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiAgZnJvbQorICoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L21pbml4X2ZzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICovCisKKworLyoKKyAqIEFDTCBzdHJ1Y3R1cmVzCisgKi8KK3N0cnVjdCBleHQyX2FjbF9oZWFkZXIJLyogSGVhZGVyIG9mIEFjY2VzcyBDb250cm9sIExpc3RzICovCit7CisJdW5zaWduZWQgbG9uZyBhY2xoX3NpemU7CisJdW5zaWduZWQgbG9uZyBhY2xoX2ZpbGVfY291bnQ7CisJdW5zaWduZWQgbG9uZyBhY2xoX2FjbGVfY291bnQ7CisJdW5zaWduZWQgbG9uZyBhY2xoX2ZpcnN0X2FjbGU7Cit9OworCitzdHJ1Y3QgZXh0Ml9hY2xfZW50cnkJLyogQWNjZXNzIENvbnRyb2wgTGlzdCBFbnRyeSAqLworeworCXVuc2lnbmVkIGxvbmcgIGFjbGVfc2l6ZTsKKwl1bnNpZ25lZCBzaG9ydCBhY2xlX3Blcm1zOwkvKiBBY2Nlc3MgcGVybWlzc2lvbnMgKi8KKwl1bnNpZ25lZCBzaG9ydCBhY2xlX3R5cGU7CS8qIFR5cGUgb2YgZW50cnkgKi8KKwl1bnNpZ25lZCBzaG9ydCBhY2xlX3RhZzsJLyogVXNlciBvciBncm91cCBpZGVudGl0eSAqLworCXVuc2lnbmVkIHNob3J0IGFjbGVfcGFkMTsKKwl1bnNpZ25lZCBsb25nICBhY2xlX25leHQ7CS8qIFBvaW50ZXIgb24gbmV4dCBlbnRyeSBmb3IgdGhlICovCisJCQkJCS8qIHNhbWUgaW5vZGUgb3Igb24gbmV4dCBmcmVlIGVudHJ5ICovCit9OworCisvKgorICogU3RydWN0dXJlIG9mIGEgYmxvY2tzIGdyb3VwIGRlc2NyaXB0b3IKKyAqLworCitzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjCit7CisJX191MzIJYmdfYmxvY2tfYml0bWFwOwkJLyogQmxvY2tzIGJpdG1hcCBibG9jayAqLworCV9fdTMyCWJnX2lub2RlX2JpdG1hcDsJCS8qIElub2RlcyBiaXRtYXAgYmxvY2sgKi8KKwlfX3UzMgliZ19pbm9kZV90YWJsZTsJCS8qIElub2RlcyB0YWJsZSBibG9jayAqLworCV9fdTE2CWJnX2ZyZWVfYmxvY2tzX2NvdW50OwkvKiBGcmVlIGJsb2NrcyBjb3VudCAqLworCV9fdTE2CWJnX2ZyZWVfaW5vZGVzX2NvdW50OwkvKiBGcmVlIGlub2RlcyBjb3VudCAqLworCV9fdTE2CWJnX3VzZWRfZGlyc19jb3VudDsJLyogRGlyZWN0b3JpZXMgY291bnQgKi8KKwlfX3UxNgliZ19wYWQ7CisJX191MzIgICBiZ19yZXNlcnZlZFswXTsKKwlfX3UzMiAgIGJnX3Jlc2VydmVkWzFdOworCV9fdTMyICAgYmdfcmVzZXJ2ZWRbMl07Cit9OworCisvKgorICogU3RydWN0dXJlIG9mIGFuIGlub2RlIG9uIHRoZSBkaXNrCisgKi8KK3N0cnVjdCBleHQyX2lub2RlIHsKKwlfX3UxNiBpX21vZGU7CQkvKiBGaWxlIG1vZGUgKi8KKwlfX3UxNiBpX3VpZDsJCS8qIE93bmVyIFVpZCAqLworCV9fdTMyICBpX3NpemU7CQkvKiBTaXplIGluIGJ5dGVzICovCisJX191MzIgIGlfYXRpbWU7CQkvKiBBY2Nlc3MgdGltZSAqLworCV9fdTMyICBpX2N0aW1lOwkJLyogQ3JlYXRpb24gdGltZSAqLworCV9fdTMyICBpX210aW1lOwkJLyogTW9kaWZpY2F0aW9uIHRpbWUgKi8KKwlfX3UzMiAgaV9kdGltZTsJCS8qIERlbGV0aW9uIFRpbWUgKi8KKwlfX3UxNiAgaV9naWQ7CQkvKiBHcm91cCBJZCAqLworCV9fdTE2ICBpX2xpbmtzX2NvdW50OwkvKiBMaW5rcyBjb3VudCAqLworCV9fdTMyICBpX2Jsb2NrczsJLyogQmxvY2tzIGNvdW50ICovCisJX191MzIgIGlfZmxhZ3M7CQkvKiBGaWxlIGZsYWdzICovCisJX191MzIgIGxfaV9yZXNlcnZlZDE7CisJX191MzIgIGlfYmxvY2tbMF07IC8qIFBvaW50ZXJzIHRvIGJsb2NrcyAqLworCV9fdTMyICBpX2Jsb2NrWzFdOyAvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwlfX3UzMiAgaV9ibG9ja1syXTsgLyogUG9pbnRlcnMgdG8gYmxvY2tzICovCisJX191MzIgIGlfYmxvY2tbM107IC8qIFBvaW50ZXJzIHRvIGJsb2NrcyAqLworCV9fdTMyICBpX2Jsb2NrWzRdOyAvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwlfX3UzMiAgaV9ibG9ja1s1XTsgLyogUG9pbnRlcnMgdG8gYmxvY2tzICovCisJX191MzIgIGlfYmxvY2tbNl07IC8qIFBvaW50ZXJzIHRvIGJsb2NrcyAqLworCV9fdTMyICBpX2Jsb2NrWzddOyAvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwlfX3UzMiAgaV9ibG9ja1s4XTsgLyogUG9pbnRlcnMgdG8gYmxvY2tzICovCisJX191MzIgIGlfYmxvY2tbOV07IC8qIFBvaW50ZXJzIHRvIGJsb2NrcyAqLworCV9fdTMyICBpX2Jsb2NrWzEwXTsgLyogUG9pbnRlcnMgdG8gYmxvY2tzICovCisJX191MzIgIGlfYmxvY2tbMTFdOyAvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwlfX3UzMiAgaV9ibG9ja1sxMl07IC8qIFBvaW50ZXJzIHRvIGJsb2NrcyAqLworCV9fdTMyICBpX2Jsb2NrWzEzXTsgLyogUG9pbnRlcnMgdG8gYmxvY2tzICovCisJX191MzIgIGlfYmxvY2tbMTRdOyAvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwlfX3UzMiAgaV92ZXJzaW9uOwkvKiBGaWxlIHZlcnNpb24gKGZvciBORlMpICovCisJX191MzIgIGlfZmlsZV9hY2w7CS8qIEZpbGUgQUNMICovCisJX191MzIgIGlfZGlyX2FjbDsJLyogRGlyZWN0b3J5IEFDTCAqLworCV9fdTMyICBpX2ZhZGRyOwkJLyogRnJhZ21lbnQgYWRkcmVzcyAqLworCV9fdTggICBsX2lfZnJhZzsJLyogRnJhZ21lbnQgbnVtYmVyICovCisJX191OCAgIGxfaV9mc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCV9fdTE2ICBpX3BhZDE7CisJX191MTYJbF9pX3VpZF9oaWdoOwkvKiB0aGVzZSAyIGZpZWxkcyAgICAqLworCV9fdTE2CWxfaV9naWRfaGlnaDsJLyogd2VyZSByZXNlcnZlZDJbMF0gKi8KKwlfX3UzMiAgbF9pX3Jlc2VydmVkMjsKK307CisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgdGhlIHN1cGVyIGJsb2NrCisgKi8KK3N0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHsKKwlfX3UzMglzX2lub2Rlc19jb3VudDsJCS8qIElub2RlcyBjb3VudCAqLworCV9fdTMyCXNfYmxvY2tzX2NvdW50OwkJLyogQmxvY2tzIGNvdW50ICovCisJX191MzIJc19yX2Jsb2Nrc19jb3VudDsJLyogUmVzZXJ2ZWQgYmxvY2tzIGNvdW50ICovCisJX191MzIJc19mcmVlX2Jsb2Nrc19jb3VudDsJLyogRnJlZSBibG9ja3MgY291bnQgKi8KKwlfX3UzMglzX2ZyZWVfaW5vZGVzX2NvdW50OwkvKiBGcmVlIGlub2RlcyBjb3VudCAqLworCV9fdTMyCXNfZmlyc3RfZGF0YV9ibG9jazsJLyogRmlyc3QgRGF0YSBCbG9jayAqLworCV9fdTMyCXNfbG9nX2Jsb2NrX3NpemU7CS8qIEJsb2NrIHNpemUgKi8KKwlfX3MzMglzX2xvZ19mcmFnX3NpemU7CS8qIEZyYWdtZW50IHNpemUgKi8KKwlfX3UzMglzX2Jsb2Nrc19wZXJfZ3JvdXA7CS8qICMgQmxvY2tzIHBlciBncm91cCAqLworCV9fdTMyCXNfZnJhZ3NfcGVyX2dyb3VwOwkvKiAjIEZyYWdtZW50cyBwZXIgZ3JvdXAgKi8KKwlfX3UzMglzX2lub2Rlc19wZXJfZ3JvdXA7CS8qICMgSW5vZGVzIHBlciBncm91cCAqLworCV9fdTMyCXNfbXRpbWU7CQkvKiBNb3VudCB0aW1lICovCisJX191MzIJc193dGltZTsJCS8qIFdyaXRlIHRpbWUgKi8KKwlfX3UxNglzX21udF9jb3VudDsJCS8qIE1vdW50IGNvdW50ICovCisJX19zMTYJc19tYXhfbW50X2NvdW50OwkvKiBNYXhpbWFsIG1vdW50IGNvdW50ICovCisJX191MTYJc19tYWdpYzsJCS8qIE1hZ2ljIHNpZ25hdHVyZSAqLworCV9fdTE2CXNfc3RhdGU7CQkvKiBGaWxlIHN5c3RlbSBzdGF0ZSAqLworCV9fdTE2CXNfZXJyb3JzOwkJLyogQmVoYXZpb3VyIHdoZW4gZGV0ZWN0aW5nIGVycm9ycyAqLworCV9fdTE2CXNfbWlub3JfcmV2X2xldmVsOyAJLyogbWlub3IgcmV2aXNpb24gbGV2ZWwgKi8KKwlfX3UzMglzX2xhc3RjaGVjazsJCS8qIHRpbWUgb2YgbGFzdCBjaGVjayAqLworCV9fdTMyCXNfY2hlY2tpbnRlcnZhbDsJLyogbWF4LiB0aW1lIGJldHdlZW4gY2hlY2tzICovCisJX191MzIJc19jcmVhdG9yX29zOwkJLyogT1MgKi8KKwlfX3UzMglzX3Jldl9sZXZlbDsJCS8qIFJldmlzaW9uIGxldmVsICovCisJX191MTYJc19kZWZfcmVzdWlkOwkJLyogRGVmYXVsdCB1aWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLworCV9fdTE2CXNfZGVmX3Jlc2dpZDsJCS8qIERlZmF1bHQgZ2lkIGZvciByZXNlcnZlZCBibG9ja3MgKi8KKwlfX3UzMglzX2ZpcnN0X2lubzsgCQkvKiBGaXJzdCBub24tcmVzZXJ2ZWQgaW5vZGUgKi8KKwlfX3UxNiAgIHNfaW5vZGVfc2l6ZTsgCQkvKiBzaXplIG9mIGlub2RlIHN0cnVjdHVyZSAqLworCV9fdTE2CXNfYmxvY2tfZ3JvdXBfbnI7IAkvKiBibG9jayBncm91cCAjIG9mIHRoaXMgc3VwZXJibG9jayAqLworCV9fdTMyCXNfZmVhdHVyZV9jb21wYXQ7IAkvKiBjb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCisJX191MzIJc19mZWF0dXJlX2luY29tcGF0OyAJLyogaW5jb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCisJX191MzIJc19mZWF0dXJlX3JvX2NvbXBhdDsgCS8qIHJlYWRvbmx5LWNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKwljaGFyWzE2XSBzX3V1aWQ7CQkvKiAxMjgtYml0IHV1aWQgZm9yIHZvbHVtZSAqLworCWNoYXJbMTZdIHNfdm9sdW1lX25hbWU7IAkvKiB2b2x1bWUgbmFtZSAqLworCWNoYXJbNjRdIHNfbGFzdF9tb3VudGVkOyAJLyogZGlyZWN0b3J5IHdoZXJlIGxhc3QgbW91bnRlZCAqLworCV9fdTMyCXNfYWxnb3JpdGhtX3VzYWdlX2JpdG1hcDsgLyogRm9yIGNvbXByZXNzaW9uICovCisJLyoKKwkgKiBQZXJmb3JtYW5jZSBoaW50cy4gIERpcmVjdG9yeSBwcmVhbGxvY2F0aW9uIHNob3VsZCBvbmx5CisJICogaGFwcGVuIGlmIHRoZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9QUkVBTExPQyBmbGFnIGlzIG9uLgorCSAqLworCV9fdTgJc19wcmVhbGxvY19ibG9ja3M7CS8qIE5yIG9mIGJsb2NrcyB0byB0cnkgdG8gcHJlYWxsb2NhdGUqLworCV9fdTgJc19wcmVhbGxvY19kaXJfYmxvY2tzOwkvKiBOciB0byBwcmVhbGxvY2F0ZSBmb3IgZGlycyAqLworCV9fdTE2CXNfcGFkZGluZzE7CisJLyogCisJICogSm91cm5hbGluZyBzdXBwb3J0IHZhbGlkIGlmIEVYVDJfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwgc2V0LgorCSAqLworCWNoYXJbMTZdIHNfam91cm5hbF91dWlkOwkvKiB1dWlkIG9mIGpvdXJuYWwgc3VwZXJibG9jayAqLworCV9fdTMyCXNfam91cm5hbF9pbnVtOwkJLyogaW5vZGUgbnVtYmVyIG9mIGpvdXJuYWwgZmlsZSAqLworCV9fdTMyCXNfam91cm5hbF9kZXY7CQkvKiBkZXZpY2UgbnVtYmVyIG9mIGpvdXJuYWwgZmlsZSAqLworCV9fdTMyCXNfbGFzdF9vcnBoYW47CQkvKiBzdGFydCBvZiBsaXN0IG9mIGlub2RlcyB0byBkZWxldGUgKi8KKworCisJX191MzIgIHNfcmVzZXJ2ZWRbMF07CS8qIFBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KKwlfX3UzMiAgc19yZXNlcnZlZFsxXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsyXTsKKwlfX3UzMiAgc19yZXNlcnZlZFszXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs0XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs1XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs2XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs3XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs4XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs5XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTFdOworCV9fdTMyICBzX3Jlc2VydmVkWzEyXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxM107CisJX191MzIgIHNfcmVzZXJ2ZWRbMTRdOworCV9fdTMyICBzX3Jlc2VydmVkWzE1XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNl07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTddOworCV9fdTMyICBzX3Jlc2VydmVkWzE4XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxOV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMjBdOworCV9fdTMyICBzX3Jlc2VydmVkWzIxXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsyMl07CisJX191MzIgIHNfcmVzZXJ2ZWRbMjNdOworCV9fdTMyICBzX3Jlc2VydmVkWzI0XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsyNV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMjZdOworCV9fdTMyICBzX3Jlc2VydmVkWzI3XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsyOF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMjldOworCV9fdTMyICBzX3Jlc2VydmVkWzMwXTsKKwlfX3UzMiAgc19yZXNlcnZlZFszMV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMzJdOworCV9fdTMyICBzX3Jlc2VydmVkWzMzXTsKKwlfX3UzMiAgc19yZXNlcnZlZFszNF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMzVdOworCV9fdTMyICBzX3Jlc2VydmVkWzM2XTsKKwlfX3UzMiAgc19yZXNlcnZlZFszN107CisJX191MzIgIHNfcmVzZXJ2ZWRbMzhdOworCV9fdTMyICBzX3Jlc2VydmVkWzM5XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs0MF07CisJX191MzIgIHNfcmVzZXJ2ZWRbNDFdOworCV9fdTMyICBzX3Jlc2VydmVkWzQyXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs0M107CisJX191MzIgIHNfcmVzZXJ2ZWRbNDRdOworCV9fdTMyICBzX3Jlc2VydmVkWzQ1XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs0Nl07CisJX191MzIgIHNfcmVzZXJ2ZWRbNDddOworCV9fdTMyICBzX3Jlc2VydmVkWzQ4XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs0OV07CisJX191MzIgIHNfcmVzZXJ2ZWRbNTBdOworCV9fdTMyICBzX3Jlc2VydmVkWzUxXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs1Ml07CisJX191MzIgIHNfcmVzZXJ2ZWRbNTNdOworCV9fdTMyICBzX3Jlc2VydmVkWzU0XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs1NV07CisJX191MzIgIHNfcmVzZXJ2ZWRbNTZdOworCV9fdTMyICBzX3Jlc2VydmVkWzU3XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs1OF07CisJX191MzIgIHNfcmVzZXJ2ZWRbNTldOworCV9fdTMyICBzX3Jlc2VydmVkWzYwXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs2MV07CisJX191MzIgIHNfcmVzZXJ2ZWRbNjJdOworCV9fdTMyICBzX3Jlc2VydmVkWzYzXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs2NF07CisJX191MzIgIHNfcmVzZXJ2ZWRbNjVdOworCV9fdTMyICBzX3Jlc2VydmVkWzY2XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs2N107CisJX191MzIgIHNfcmVzZXJ2ZWRbNjhdOworCV9fdTMyICBzX3Jlc2VydmVkWzY5XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs3MF07CisJX191MzIgIHNfcmVzZXJ2ZWRbNzFdOworCV9fdTMyICBzX3Jlc2VydmVkWzcyXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs3M107CisJX191MzIgIHNfcmVzZXJ2ZWRbNzRdOworCV9fdTMyICBzX3Jlc2VydmVkWzc1XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs3Nl07CisJX191MzIgIHNfcmVzZXJ2ZWRbNzddOworCV9fdTMyICBzX3Jlc2VydmVkWzc4XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs3OV07CisJX191MzIgIHNfcmVzZXJ2ZWRbODBdOworCV9fdTMyICBzX3Jlc2VydmVkWzgxXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs4Ml07CisJX191MzIgIHNfcmVzZXJ2ZWRbODNdOworCV9fdTMyICBzX3Jlc2VydmVkWzg0XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs4NV07CisJX191MzIgIHNfcmVzZXJ2ZWRbODZdOworCV9fdTMyICBzX3Jlc2VydmVkWzg3XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs4OF07CisJX191MzIgIHNfcmVzZXJ2ZWRbODldOworCV9fdTMyICBzX3Jlc2VydmVkWzkwXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs5MV07CisJX191MzIgIHNfcmVzZXJ2ZWRbOTJdOworCV9fdTMyICBzX3Jlc2VydmVkWzkzXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs5NF07CisJX191MzIgIHNfcmVzZXJ2ZWRbOTVdOworCV9fdTMyICBzX3Jlc2VydmVkWzk2XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs5N107CisJX191MzIgIHNfcmVzZXJ2ZWRbOThdOworCV9fdTMyICBzX3Jlc2VydmVkWzk5XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMDBdOworCV9fdTMyICBzX3Jlc2VydmVkWzEwMV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTAyXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMDNdOworCV9fdTMyICBzX3Jlc2VydmVkWzEwNF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTA1XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMDZdOworCV9fdTMyICBzX3Jlc2VydmVkWzEwN107CisJX191MzIgIHNfcmVzZXJ2ZWRbMTA4XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMDldOworCV9fdTMyICBzX3Jlc2VydmVkWzExMF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTExXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMTJdOworCV9fdTMyICBzX3Jlc2VydmVkWzExM107CisJX191MzIgIHNfcmVzZXJ2ZWRbMTE0XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMTVdOworCV9fdTMyICBzX3Jlc2VydmVkWzExNl07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTE3XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMThdOworCV9fdTMyICBzX3Jlc2VydmVkWzExOV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTIwXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMjFdOworCV9fdTMyICBzX3Jlc2VydmVkWzEyMl07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTIzXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMjRdOworCV9fdTMyICBzX3Jlc2VydmVkWzEyNV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTI2XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMjddOworCV9fdTMyICBzX3Jlc2VydmVkWzEyOF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTI5XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMzBdOworCV9fdTMyICBzX3Jlc2VydmVkWzEzMV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTMyXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMzNdOworCV9fdTMyICBzX3Jlc2VydmVkWzEzNF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTM1XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMzZdOworCV9fdTMyICBzX3Jlc2VydmVkWzEzN107CisJX191MzIgIHNfcmVzZXJ2ZWRbMTM4XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMzldOworCV9fdTMyICBzX3Jlc2VydmVkWzE0MF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTQxXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNDJdOworCV9fdTMyICBzX3Jlc2VydmVkWzE0M107CisJX191MzIgIHNfcmVzZXJ2ZWRbMTQ0XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNDVdOworCV9fdTMyICBzX3Jlc2VydmVkWzE0Nl07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTQ3XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNDhdOworCV9fdTMyICBzX3Jlc2VydmVkWzE0OV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTUwXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNTFdOworCV9fdTMyICBzX3Jlc2VydmVkWzE1Ml07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTUzXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNTRdOworCV9fdTMyICBzX3Jlc2VydmVkWzE1NV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTU2XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNTddOworCV9fdTMyICBzX3Jlc2VydmVkWzE1OF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTU5XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNjBdOworCV9fdTMyICBzX3Jlc2VydmVkWzE2MV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTYyXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNjNdOworCV9fdTMyICBzX3Jlc2VydmVkWzE2NF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTY1XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNjZdOworCV9fdTMyICBzX3Jlc2VydmVkWzE2N107CisJX191MzIgIHNfcmVzZXJ2ZWRbMTY4XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNjldOworCV9fdTMyICBzX3Jlc2VydmVkWzE3MF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTcxXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNzJdOworCV9fdTMyICBzX3Jlc2VydmVkWzE3M107CisJX191MzIgIHNfcmVzZXJ2ZWRbMTc0XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNzVdOworCV9fdTMyICBzX3Jlc2VydmVkWzE3Nl07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTc3XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNzhdOworCV9fdTMyICBzX3Jlc2VydmVkWzE3OV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTgwXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxODFdOworCV9fdTMyICBzX3Jlc2VydmVkWzE4Ml07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTgzXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxODRdOworCV9fdTMyICBzX3Jlc2VydmVkWzE4NV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTg2XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxODddOworCV9fdTMyICBzX3Jlc2VydmVkWzE4OF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTg5XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxOTBdOworCV9fdTMyICBzX3Jlc2VydmVkWzE5MV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTkyXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxOTNdOworCV9fdTMyICBzX3Jlc2VydmVkWzE5NF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTk1XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxOTZdOworfTsKKworVGhlIGZvbGxvd2luZyBpcyBhY3R1YWxseSBub3QgdXNlZCwgZHVlIHRvIHRoZSB2YXJpYWJsZSBsZW5ndGggb2YgdGhlCituYW1lIGZpZWxkLiBFWFQyRUQgaGFuZGxlcyBkaXJlY3RvcmllcyB0aHJvdWdoIHRoZSB0eXBlICJkaXIiIGJlbG93LgorCisvKgorICogU3RydWN0dXJlIG9mIGEgZGlyZWN0b3J5IGVudHJ5CisgKi8KKworLyogc3RydWN0IGV4dDJfZGlyX2VudHJ5IHsgKi8KKy8qCisJX191MzIgIGlub2RlOwkJCS8qIElub2RlIG51bWJlciAqLworCV9fdTE2IHJlY19sZW47CQkJLyogRGlyZWN0b3J5IGVudHJ5IGxlbmd0aCAqLworCV9fdTE2IG5hbWVfbGVuOwkJLyogTmFtZSBsZW5ndGggKi8KKwljaGFyICAgICAgICAgICBuYW1lW0VYVDJfTkFNRV9MRU5dOwkvKiBGaWxlIG5hbWUgKi8KK307CisqLworCitzdHJ1Y3QgZmlsZSB7Cit9OworCitzdHJ1Y3QgZGlyIHsKK307CisKK3N0cnVjdCBibG9ja19iaXRtYXAgeworfTsKKworc3RydWN0IGlub2RlX2JpdG1hcCB7Cit9OworCitzdHJ1Y3QgZXh0Ml9keF9yb290X25vZGUgeworCV9fdTMyIGRvdF9pbm9kZTsKKwlfX3UxNiBkb3RfcmVjX2xlbjsKKwlfX3U4IGRvdF9uYW1lX2xlbjsKKwlfX3U4IGRvdF9maWxlX3R5cGU7CisJY2hhcls0XSBkb3RfbmFtZTsKKwlfX3UzMiBkb3RfZG90X2lub2RlOworCV9fdTE2IGRvdF9kb3RfcmVjX2xlbjsKKwlfX3U4IGRvdF9kb3RfbmFtZV9sZW47CisJX191OCBkb3RfZG90X2ZpbGVfdHlwZTsKKwljaGFyWzRdIGRvdF9kb3RfbmFtZTsKKwlfX3UzMiByZXNlcnZlZF96ZXJvOworCV9fdTggaGFzaF92ZXJzaW9uOyAvKiAwIG5vdywgMSBhdCByZWxlYXNlICovCisJX191OCBpbmZvX2xlbmd0aDsgLyogOCAqLworCV9fdTggaW5kaXJlY3RfbGV2ZWxzOworCV9fdTggdW51c2VkX2ZsYWdzOworCV9fdTE2IGxpbWl0OworCV9fdTE2IGNvdW50OworCV9fdTMyIGJsb2NrWzBdOworCV9fdTMyIGhhc2hbMV07CisJX191MzIgYmxvY2tbMV07CisJX191MzIgaGFzaFsyXTsKKwlfX3UzMiBibG9ja1syXTsKKwlfX3UzMiBoYXNoWzNdOworCV9fdTMyIGJsb2NrWzNdOworCV9fdTMyIGhhc2hbNF07CisJX191MzIgYmxvY2tbNF07CisJX191MzIgaGFzaFs1XTsKKwlfX3UzMiBibG9ja1s1XTsKKwlfX3UzMiBoYXNoWzZdOworCV9fdTMyIGJsb2NrWzZdOworCV9fdTMyIGhhc2hbN107CisJX191MzIgYmxvY2tbN107CisJX191MzIgaGFzaFs4XTsKKwlfX3UzMiBibG9ja1s4XTsKKwlfX3UzMiBoYXNoWzldOworCV9fdTMyIGJsb2NrWzldOworCV9fdTMyIGhhc2hbMTBdOworCV9fdTMyIGJsb2NrWzEwXTsKKwlfX3UzMiBoYXNoWzExXTsKKwlfX3UzMiBibG9ja1sxMV07CisJX191MzIgaGFzaFsxMl07CisJX191MzIgYmxvY2tbMTJdOworCV9fdTMyIGhhc2hbMTNdOworCV9fdTMyIGJsb2NrWzEzXTsKKwlfX3UzMiBoYXNoWzE0XTsKKwlfX3UzMiBibG9ja1sxNF07CisJX191MzIgaGFzaFsxNV07CisJX191MzIgYmxvY2tbMTVdOworCV9fdTMyIGhhc2hbMTZdOworCV9fdTMyIGJsb2NrWzE2XTsKKwlfX3UzMiBoYXNoWzE3XTsKKwlfX3UzMiBibG9ja1sxN107CisJX191MzIgaGFzaFsxOF07CisJX191MzIgYmxvY2tbMThdOworCV9fdTMyIGhhc2hbMTldOworCV9fdTMyIGJsb2NrWzE5XTsKKwlfX3UzMiBoYXNoWzIwXTsKKwlfX3UzMiBibG9ja1syMF07CisJX191MzIgaGFzaFsyMV07CisJX191MzIgYmxvY2tbMjFdOworCV9fdTMyIGhhc2hbMjJdOworCV9fdTMyIGJsb2NrWzIyXTsKKwlfX3UzMiBoYXNoWzIzXTsKKwlfX3UzMiBibG9ja1syM107CisJX191MzIgaGFzaFsyNF07CisJX191MzIgYmxvY2tbMjRdOworCV9fdTMyIGhhc2hbMjVdOworCV9fdTMyIGJsb2NrWzI1XTsKKwlfX3UzMiBoYXNoWzI2XTsKKwlfX3UzMiBibG9ja1syNl07CisJX191MzIgaGFzaFsyN107CisJX191MzIgYmxvY2tbMjddOworCV9fdTMyIGhhc2hbMjhdOworCV9fdTMyIGJsb2NrWzI4XTsKKwlfX3UzMiBoYXNoWzI5XTsKKwlfX3UzMiBibG9ja1syOV07CisJX191MzIgaGFzaFszMF07CisJX191MzIgYmxvY2tbMzBdOworCV9fdTMyIGhhc2hbMzFdOworCV9fdTMyIGJsb2NrWzMxXTsKKwlfX3UzMiBoYXNoWzMyXTsKKwlfX3UzMiBibG9ja1szMl07CisJX191MzIgaGFzaFszM107CisJX191MzIgYmxvY2tbMzNdOworCV9fdTMyIGhhc2hbMzRdOworCV9fdTMyIGJsb2NrWzM0XTsKKwlfX3UzMiBoYXNoWzM1XTsKKwlfX3UzMiBibG9ja1szNV07CisJX191MzIgaGFzaFszNl07CisJX191MzIgYmxvY2tbMzZdOworCV9fdTMyIGhhc2hbMzddOworCV9fdTMyIGJsb2NrWzM3XTsKKwlfX3UzMiBoYXNoWzM4XTsKKwlfX3UzMiBibG9ja1szOF07CisJX191MzIgaGFzaFszOV07CisJX191MzIgYmxvY2tbMzldOworCV9fdTMyIGhhc2hbNDBdOworCV9fdTMyIGJsb2NrWzQwXTsKKwlfX3UzMiBoYXNoWzQxXTsKKwlfX3UzMiBibG9ja1s0MV07CisJX191MzIgaGFzaFs0Ml07CisJX191MzIgYmxvY2tbNDJdOworCV9fdTMyIGhhc2hbNDNdOworCV9fdTMyIGJsb2NrWzQzXTsKKwlfX3UzMiBoYXNoWzQ0XTsKKwlfX3UzMiBibG9ja1s0NF07CisJX191MzIgaGFzaFs0NV07CisJX191MzIgYmxvY2tbNDVdOworCV9fdTMyIGhhc2hbNDZdOworCV9fdTMyIGJsb2NrWzQ2XTsKKwlfX3UzMiBoYXNoWzQ3XTsKKwlfX3UzMiBibG9ja1s0N107CisJX191MzIgaGFzaFs0OF07CisJX191MzIgYmxvY2tbNDhdOworCV9fdTMyIGhhc2hbNDldOworCV9fdTMyIGJsb2NrWzQ5XTsKKwlfX3UzMiBoYXNoWzUwXTsKKwlfX3UzMiBibG9ja1s1MF07CisJX191MzIgaGFzaFs1MV07CisJX191MzIgYmxvY2tbNTFdOworCV9fdTMyIGhhc2hbNTJdOworCV9fdTMyIGJsb2NrWzUyXTsKKwlfX3UzMiBoYXNoWzUzXTsKKwlfX3UzMiBibG9ja1s1M107CisJX191MzIgaGFzaFs1NF07CisJX191MzIgYmxvY2tbNTRdOworCV9fdTMyIGhhc2hbNTVdOworCV9fdTMyIGJsb2NrWzU1XTsKKwlfX3UzMiBoYXNoWzU2XTsKKwlfX3UzMiBibG9ja1s1Nl07CisJX191MzIgaGFzaFs1N107CisJX191MzIgYmxvY2tbNTddOworCV9fdTMyIGhhc2hbNThdOworCV9fdTMyIGJsb2NrWzU4XTsKKwlfX3UzMiBoYXNoWzU5XTsKKwlfX3UzMiBibG9ja1s1OV07CisJX191MzIgaGFzaFs2MF07CisJX191MzIgYmxvY2tbNjBdOworCV9fdTMyIGhhc2hbNjFdOworCV9fdTMyIGJsb2NrWzYxXTsKKwlfX3UzMiBoYXNoWzYyXTsKKwlfX3UzMiBibG9ja1s2Ml07CisJX191MzIgaGFzaFs2M107CisJX191MzIgYmxvY2tbNjNdOworCV9fdTMyIGhhc2hbNjRdOworCV9fdTMyIGJsb2NrWzY0XTsKKwlfX3UzMiBoYXNoWzY1XTsKKwlfX3UzMiBibG9ja1s2NV07CisJX191MzIgaGFzaFs2Nl07CisJX191MzIgYmxvY2tbNjZdOworCV9fdTMyIGhhc2hbNjddOworCV9fdTMyIGJsb2NrWzY3XTsKKwlfX3UzMiBoYXNoWzY4XTsKKwlfX3UzMiBibG9ja1s2OF07CisJX191MzIgaGFzaFs2OV07CisJX191MzIgYmxvY2tbNjldOworCV9fdTMyIGhhc2hbNzBdOworCV9fdTMyIGJsb2NrWzcwXTsKKwlfX3UzMiBoYXNoWzcxXTsKKwlfX3UzMiBibG9ja1s3MV07CisJX191MzIgaGFzaFs3Ml07CisJX191MzIgYmxvY2tbNzJdOworCV9fdTMyIGhhc2hbNzNdOworCV9fdTMyIGJsb2NrWzczXTsKKwlfX3UzMiBoYXNoWzc0XTsKKwlfX3UzMiBibG9ja1s3NF07CisJX191MzIgaGFzaFs3NV07CisJX191MzIgYmxvY2tbNzVdOworCV9fdTMyIGhhc2hbNzZdOworCV9fdTMyIGJsb2NrWzc2XTsKKwlfX3UzMiBoYXNoWzc3XTsKKwlfX3UzMiBibG9ja1s3N107CisJX191MzIgaGFzaFs3OF07CisJX191MzIgYmxvY2tbNzhdOworCV9fdTMyIGhhc2hbNzldOworCV9fdTMyIGJsb2NrWzc5XTsKKwlfX3UzMiBoYXNoWzgwXTsKKwlfX3UzMiBibG9ja1s4MF07CisJX191MzIgaGFzaFs4MV07CisJX191MzIgYmxvY2tbODFdOworCV9fdTMyIGhhc2hbODJdOworCV9fdTMyIGJsb2NrWzgyXTsKKwlfX3UzMiBoYXNoWzgzXTsKKwlfX3UzMiBibG9ja1s4M107CisJX191MzIgaGFzaFs4NF07CisJX191MzIgYmxvY2tbODRdOworCV9fdTMyIGhhc2hbODVdOworCV9fdTMyIGJsb2NrWzg1XTsKKwlfX3UzMiBoYXNoWzg2XTsKKwlfX3UzMiBibG9ja1s4Nl07CisJX191MzIgaGFzaFs4N107CisJX191MzIgYmxvY2tbODddOworCV9fdTMyIGhhc2hbODhdOworCV9fdTMyIGJsb2NrWzg4XTsKKwlfX3UzMiBoYXNoWzg5XTsKKwlfX3UzMiBibG9ja1s4OV07CisJX191MzIgaGFzaFs4MF07CisJX191MzIgYmxvY2tbODBdOworCV9fdTMyIGhhc2hbODFdOworCV9fdTMyIGJsb2NrWzgxXTsKKwlfX3UzMiBoYXNoWzgyXTsKKwlfX3UzMiBibG9ja1s4Ml07CisJX191MzIgaGFzaFs4M107CisJX191MzIgYmxvY2tbODNdOworCV9fdTMyIGhhc2hbODRdOworCV9fdTMyIGJsb2NrWzg0XTsKKwlfX3UzMiBoYXNoWzg1XTsKKwlfX3UzMiBibG9ja1s4NV07CisJX191MzIgaGFzaFs4Nl07CisJX191MzIgYmxvY2tbODZdOworCV9fdTMyIGhhc2hbODddOworCV9fdTMyIGJsb2NrWzg3XTsKKwlfX3UzMiBoYXNoWzg4XTsKKwlfX3UzMiBibG9ja1s4OF07CisJX191MzIgaGFzaFs4OV07CisJX191MzIgYmxvY2tbODldOworCV9fdTMyIGhhc2hbOTBdOworCV9fdTMyIGJsb2NrWzkwXTsKKwlfX3UzMiBoYXNoWzkxXTsKKwlfX3UzMiBibG9ja1s5MV07CisJX191MzIgaGFzaFs5Ml07CisJX191MzIgYmxvY2tbOTJdOworCV9fdTMyIGhhc2hbOTNdOworCV9fdTMyIGJsb2NrWzkzXTsKKwlfX3UzMiBoYXNoWzk0XTsKKwlfX3UzMiBibG9ja1s5NF07CisJX191MzIgaGFzaFs5NV07CisJX191MzIgYmxvY2tbOTVdOworCV9fdTMyIGhhc2hbOTZdOworCV9fdTMyIGJsb2NrWzk2XTsKKwlfX3UzMiBoYXNoWzk3XTsKKwlfX3UzMiBibG9ja1s5N107CisJX191MzIgaGFzaFs5OF07CisJX191MzIgYmxvY2tbOThdOworCV9fdTMyIGhhc2hbOTldOworCV9fdTMyIGJsb2NrWzk5XTsKKwlfX3UzMiBoYXNoWzEwMF07CisJX191MzIgYmxvY2tbMTAwXTsKKwlfX3UzMiBoYXNoWzEwMV07CisJX191MzIgYmxvY2tbMTAxXTsKKwlfX3UzMiBoYXNoWzEwMl07CisJX191MzIgYmxvY2tbMTAyXTsKKwlfX3UzMiBoYXNoWzEwM107CisJX191MzIgYmxvY2tbMTAzXTsKKwlfX3UzMiBoYXNoWzEwNF07CisJX191MzIgYmxvY2tbMTA0XTsKKwlfX3UzMiBoYXNoWzEwNV07CisJX191MzIgYmxvY2tbMTA1XTsKKwlfX3UzMiBoYXNoWzEwNl07CisJX191MzIgYmxvY2tbMTA2XTsKKwlfX3UzMiBoYXNoWzEwN107CisJX191MzIgYmxvY2tbMTA3XTsKKwlfX3UzMiBoYXNoWzEwOF07CisJX191MzIgYmxvY2tbMTA4XTsKKwlfX3UzMiBoYXNoWzEwOV07CisJX191MzIgYmxvY2tbMTA5XTsKKwlfX3UzMiBoYXNoWzExMF07CisJX191MzIgYmxvY2tbMTEwXTsKKwlfX3UzMiBoYXNoWzExMV07CisJX191MzIgYmxvY2tbMTExXTsKKwlfX3UzMiBoYXNoWzExMl07CisJX191MzIgYmxvY2tbMTEyXTsKKwlfX3UzMiBoYXNoWzExM107CisJX191MzIgYmxvY2tbMTEzXTsKKwlfX3UzMiBoYXNoWzExNF07CisJX191MzIgYmxvY2tbMTE0XTsKKwlfX3UzMiBoYXNoWzExNV07CisJX191MzIgYmxvY2tbMTE1XTsKKwlfX3UzMiBoYXNoWzExNl07CisJX191MzIgYmxvY2tbMTE2XTsKKwlfX3UzMiBoYXNoWzExN107CisJX191MzIgYmxvY2tbMTE3XTsKKwlfX3UzMiBoYXNoWzExOF07CisJX191MzIgYmxvY2tbMTE4XTsKKwlfX3UzMiBoYXNoWzExOV07CisJX191MzIgYmxvY2tbMTE5XTsKKwlfX3UzMiBoYXNoWzEyMF07CisJX191MzIgYmxvY2tbMTIwXTsKKwlfX3UzMiBoYXNoWzEyMV07CisJX191MzIgYmxvY2tbMTIxXTsKKwlfX3UzMiBoYXNoWzEyMl07CisJX191MzIgYmxvY2tbMTIyXTsKKwlfX3UzMiBoYXNoWzEyM107CisJX191MzIgYmxvY2tbMTIzXTsKKwlfX3UzMiBoYXNoWzEyNF07CisJX191MzIgYmxvY2tbMTI0XTsKKwlfX3UzMiBoYXNoWzEyNV07CisJX191MzIgYmxvY2tbMTI1XTsKKwlfX3UzMiBoYXNoWzEyNl07CisJX191MzIgYmxvY2tbMTI2XTsKKwlfX3UzMiBoYXNoWzEyN107CisJX191MzIgYmxvY2tbMTI3XTsKK307CisKK3N0cnVjdCBleHQyX2R4X2ludF9ub2RlIHsKKwlfX3UzMiBmYWtlX2lub2RlOworCV9fdTE2IGZha2VfcmVjX2xlbjsKKwlfX3U4IGZha2VfbmFtZV9sZW47CisJX191OCBmYWtlX2ZpbGVfdHlwZTsKKwlfX3UxNiBsaW1pdDsKKwlfX3UxNiBjb3VudDsKKwlfX3UzMiBibG9ja1swXTsKKwlfX3UzMiBoYXNoWzFdOworCV9fdTMyIGJsb2NrWzFdOworCV9fdTMyIGhhc2hbMl07CisJX191MzIgYmxvY2tbMl07CisJX191MzIgaGFzaFszXTsKKwlfX3UzMiBibG9ja1szXTsKKwlfX3UzMiBoYXNoWzRdOworCV9fdTMyIGJsb2NrWzRdOworCV9fdTMyIGhhc2hbNV07CisJX191MzIgYmxvY2tbNV07CisJX191MzIgaGFzaFs2XTsKKwlfX3UzMiBibG9ja1s2XTsKKwlfX3UzMiBoYXNoWzddOworCV9fdTMyIGJsb2NrWzddOworCV9fdTMyIGhhc2hbOF07CisJX191MzIgYmxvY2tbOF07CisJX191MzIgaGFzaFs5XTsKKwlfX3UzMiBibG9ja1s5XTsKKwlfX3UzMiBoYXNoWzEwXTsKKwlfX3UzMiBibG9ja1sxMF07CisJX191MzIgaGFzaFsxMV07CisJX191MzIgYmxvY2tbMTFdOworCV9fdTMyIGhhc2hbMTJdOworCV9fdTMyIGJsb2NrWzEyXTsKKwlfX3UzMiBoYXNoWzEzXTsKKwlfX3UzMiBibG9ja1sxM107CisJX191MzIgaGFzaFsxNF07CisJX191MzIgYmxvY2tbMTRdOworCV9fdTMyIGhhc2hbMTVdOworCV9fdTMyIGJsb2NrWzE1XTsKKwlfX3UzMiBoYXNoWzE2XTsKKwlfX3UzMiBibG9ja1sxNl07CisJX191MzIgaGFzaFsxN107CisJX191MzIgYmxvY2tbMTddOworCV9fdTMyIGhhc2hbMThdOworCV9fdTMyIGJsb2NrWzE4XTsKKwlfX3UzMiBoYXNoWzE5XTsKKwlfX3UzMiBibG9ja1sxOV07CisJX191MzIgaGFzaFsyMF07CisJX191MzIgYmxvY2tbMjBdOworCV9fdTMyIGhhc2hbMjFdOworCV9fdTMyIGJsb2NrWzIxXTsKKwlfX3UzMiBoYXNoWzIyXTsKKwlfX3UzMiBibG9ja1syMl07CisJX191MzIgaGFzaFsyM107CisJX191MzIgYmxvY2tbMjNdOworCV9fdTMyIGhhc2hbMjRdOworCV9fdTMyIGJsb2NrWzI0XTsKKwlfX3UzMiBoYXNoWzI1XTsKKwlfX3UzMiBibG9ja1syNV07CisJX191MzIgaGFzaFsyNl07CisJX191MzIgYmxvY2tbMjZdOworCV9fdTMyIGhhc2hbMjddOworCV9fdTMyIGJsb2NrWzI3XTsKKwlfX3UzMiBoYXNoWzI4XTsKKwlfX3UzMiBibG9ja1syOF07CisJX191MzIgaGFzaFsyOV07CisJX191MzIgYmxvY2tbMjldOworCV9fdTMyIGhhc2hbMzBdOworCV9fdTMyIGJsb2NrWzMwXTsKKwlfX3UzMiBoYXNoWzMxXTsKKwlfX3UzMiBibG9ja1szMV07CisJX191MzIgaGFzaFszMl07CisJX191MzIgYmxvY2tbMzJdOworCV9fdTMyIGhhc2hbMzNdOworCV9fdTMyIGJsb2NrWzMzXTsKKwlfX3UzMiBoYXNoWzM0XTsKKwlfX3UzMiBibG9ja1szNF07CisJX191MzIgaGFzaFszNV07CisJX191MzIgYmxvY2tbMzVdOworCV9fdTMyIGhhc2hbMzZdOworCV9fdTMyIGJsb2NrWzM2XTsKKwlfX3UzMiBoYXNoWzM3XTsKKwlfX3UzMiBibG9ja1szN107CisJX191MzIgaGFzaFszOF07CisJX191MzIgYmxvY2tbMzhdOworCV9fdTMyIGhhc2hbMzldOworCV9fdTMyIGJsb2NrWzM5XTsKKwlfX3UzMiBoYXNoWzQwXTsKKwlfX3UzMiBibG9ja1s0MF07CisJX191MzIgaGFzaFs0MV07CisJX191MzIgYmxvY2tbNDFdOworCV9fdTMyIGhhc2hbNDJdOworCV9fdTMyIGJsb2NrWzQyXTsKKwlfX3UzMiBoYXNoWzQzXTsKKwlfX3UzMiBibG9ja1s0M107CisJX191MzIgaGFzaFs0NF07CisJX191MzIgYmxvY2tbNDRdOworCV9fdTMyIGhhc2hbNDVdOworCV9fdTMyIGJsb2NrWzQ1XTsKKwlfX3UzMiBoYXNoWzQ2XTsKKwlfX3UzMiBibG9ja1s0Nl07CisJX191MzIgaGFzaFs0N107CisJX191MzIgYmxvY2tbNDddOworCV9fdTMyIGhhc2hbNDhdOworCV9fdTMyIGJsb2NrWzQ4XTsKKwlfX3UzMiBoYXNoWzQ5XTsKKwlfX3UzMiBibG9ja1s0OV07CisJX191MzIgaGFzaFs1MF07CisJX191MzIgYmxvY2tbNTBdOworCV9fdTMyIGhhc2hbNTFdOworCV9fdTMyIGJsb2NrWzUxXTsKKwlfX3UzMiBoYXNoWzUyXTsKKwlfX3UzMiBibG9ja1s1Ml07CisJX191MzIgaGFzaFs1M107CisJX191MzIgYmxvY2tbNTNdOworCV9fdTMyIGhhc2hbNTRdOworCV9fdTMyIGJsb2NrWzU0XTsKKwlfX3UzMiBoYXNoWzU1XTsKKwlfX3UzMiBibG9ja1s1NV07CisJX191MzIgaGFzaFs1Nl07CisJX191MzIgYmxvY2tbNTZdOworCV9fdTMyIGhhc2hbNTddOworCV9fdTMyIGJsb2NrWzU3XTsKKwlfX3UzMiBoYXNoWzU4XTsKKwlfX3UzMiBibG9ja1s1OF07CisJX191MzIgaGFzaFs1OV07CisJX191MzIgYmxvY2tbNTldOworCV9fdTMyIGhhc2hbNjBdOworCV9fdTMyIGJsb2NrWzYwXTsKKwlfX3UzMiBoYXNoWzYxXTsKKwlfX3UzMiBibG9ja1s2MV07CisJX191MzIgaGFzaFs2Ml07CisJX191MzIgYmxvY2tbNjJdOworCV9fdTMyIGhhc2hbNjNdOworCV9fdTMyIGJsb2NrWzYzXTsKKwlfX3UzMiBoYXNoWzY0XTsKKwlfX3UzMiBibG9ja1s2NF07CisJX191MzIgaGFzaFs2NV07CisJX191MzIgYmxvY2tbNjVdOworCV9fdTMyIGhhc2hbNjZdOworCV9fdTMyIGJsb2NrWzY2XTsKKwlfX3UzMiBoYXNoWzY3XTsKKwlfX3UzMiBibG9ja1s2N107CisJX191MzIgaGFzaFs2OF07CisJX191MzIgYmxvY2tbNjhdOworCV9fdTMyIGhhc2hbNjldOworCV9fdTMyIGJsb2NrWzY5XTsKKwlfX3UzMiBoYXNoWzcwXTsKKwlfX3UzMiBibG9ja1s3MF07CisJX191MzIgaGFzaFs3MV07CisJX191MzIgYmxvY2tbNzFdOworCV9fdTMyIGhhc2hbNzJdOworCV9fdTMyIGJsb2NrWzcyXTsKKwlfX3UzMiBoYXNoWzczXTsKKwlfX3UzMiBibG9ja1s3M107CisJX191MzIgaGFzaFs3NF07CisJX191MzIgYmxvY2tbNzRdOworCV9fdTMyIGhhc2hbNzVdOworCV9fdTMyIGJsb2NrWzc1XTsKKwlfX3UzMiBoYXNoWzc2XTsKKwlfX3UzMiBibG9ja1s3Nl07CisJX191MzIgaGFzaFs3N107CisJX191MzIgYmxvY2tbNzddOworCV9fdTMyIGhhc2hbNzhdOworCV9fdTMyIGJsb2NrWzc4XTsKKwlfX3UzMiBoYXNoWzc5XTsKKwlfX3UzMiBibG9ja1s3OV07CisJX191MzIgaGFzaFs4MF07CisJX191MzIgYmxvY2tbODBdOworCV9fdTMyIGhhc2hbODFdOworCV9fdTMyIGJsb2NrWzgxXTsKKwlfX3UzMiBoYXNoWzgyXTsKKwlfX3UzMiBibG9ja1s4Ml07CisJX191MzIgaGFzaFs4M107CisJX191MzIgYmxvY2tbODNdOworCV9fdTMyIGhhc2hbODRdOworCV9fdTMyIGJsb2NrWzg0XTsKKwlfX3UzMiBoYXNoWzg1XTsKKwlfX3UzMiBibG9ja1s4NV07CisJX191MzIgaGFzaFs4Nl07CisJX191MzIgYmxvY2tbODZdOworCV9fdTMyIGhhc2hbODddOworCV9fdTMyIGJsb2NrWzg3XTsKKwlfX3UzMiBoYXNoWzg4XTsKKwlfX3UzMiBibG9ja1s4OF07CisJX191MzIgaGFzaFs4OV07CisJX191MzIgYmxvY2tbODldOworCV9fdTMyIGhhc2hbODBdOworCV9fdTMyIGJsb2NrWzgwXTsKKwlfX3UzMiBoYXNoWzgxXTsKKwlfX3UzMiBibG9ja1s4MV07CisJX191MzIgaGFzaFs4Ml07CisJX191MzIgYmxvY2tbODJdOworCV9fdTMyIGhhc2hbODNdOworCV9fdTMyIGJsb2NrWzgzXTsKKwlfX3UzMiBoYXNoWzg0XTsKKwlfX3UzMiBibG9ja1s4NF07CisJX191MzIgaGFzaFs4NV07CisJX191MzIgYmxvY2tbODVdOworCV9fdTMyIGhhc2hbODZdOworCV9fdTMyIGJsb2NrWzg2XTsKKwlfX3UzMiBoYXNoWzg3XTsKKwlfX3UzMiBibG9ja1s4N107CisJX191MzIgaGFzaFs4OF07CisJX191MzIgYmxvY2tbODhdOworCV9fdTMyIGhhc2hbODldOworCV9fdTMyIGJsb2NrWzg5XTsKKwlfX3UzMiBoYXNoWzkwXTsKKwlfX3UzMiBibG9ja1s5MF07CisJX191MzIgaGFzaFs5MV07CisJX191MzIgYmxvY2tbOTFdOworCV9fdTMyIGhhc2hbOTJdOworCV9fdTMyIGJsb2NrWzkyXTsKKwlfX3UzMiBoYXNoWzkzXTsKKwlfX3UzMiBibG9ja1s5M107CisJX191MzIgaGFzaFs5NF07CisJX191MzIgYmxvY2tbOTRdOworCV9fdTMyIGhhc2hbOTVdOworCV9fdTMyIGJsb2NrWzk1XTsKKwlfX3UzMiBoYXNoWzk2XTsKKwlfX3UzMiBibG9ja1s5Nl07CisJX191MzIgaGFzaFs5N107CisJX191MzIgYmxvY2tbOTddOworCV9fdTMyIGhhc2hbOThdOworCV9fdTMyIGJsb2NrWzk4XTsKKwlfX3UzMiBoYXNoWzk5XTsKKwlfX3UzMiBibG9ja1s5OV07CisJX191MzIgaGFzaFsxMDBdOworCV9fdTMyIGJsb2NrWzEwMF07CisJX191MzIgaGFzaFsxMDFdOworCV9fdTMyIGJsb2NrWzEwMV07CisJX191MzIgaGFzaFsxMDJdOworCV9fdTMyIGJsb2NrWzEwMl07CisJX191MzIgaGFzaFsxMDNdOworCV9fdTMyIGJsb2NrWzEwM107CisJX191MzIgaGFzaFsxMDRdOworCV9fdTMyIGJsb2NrWzEwNF07CisJX191MzIgaGFzaFsxMDVdOworCV9fdTMyIGJsb2NrWzEwNV07CisJX191MzIgaGFzaFsxMDZdOworCV9fdTMyIGJsb2NrWzEwNl07CisJX191MzIgaGFzaFsxMDddOworCV9fdTMyIGJsb2NrWzEwN107CisJX191MzIgaGFzaFsxMDhdOworCV9fdTMyIGJsb2NrWzEwOF07CisJX191MzIgaGFzaFsxMDldOworCV9fdTMyIGJsb2NrWzEwOV07CisJX191MzIgaGFzaFsxMTBdOworCV9fdTMyIGJsb2NrWzExMF07CisJX191MzIgaGFzaFsxMTFdOworCV9fdTMyIGJsb2NrWzExMV07CisJX191MzIgaGFzaFsxMTJdOworCV9fdTMyIGJsb2NrWzExMl07CisJX191MzIgaGFzaFsxMTNdOworCV9fdTMyIGJsb2NrWzExM107CisJX191MzIgaGFzaFsxMTRdOworCV9fdTMyIGJsb2NrWzExNF07CisJX191MzIgaGFzaFsxMTVdOworCV9fdTMyIGJsb2NrWzExNV07CisJX191MzIgaGFzaFsxMTZdOworCV9fdTMyIGJsb2NrWzExNl07CisJX191MzIgaGFzaFsxMTddOworCV9fdTMyIGJsb2NrWzExN107CisJX191MzIgaGFzaFsxMThdOworCV9fdTMyIGJsb2NrWzExOF07CisJX191MzIgaGFzaFsxMTldOworCV9fdTMyIGJsb2NrWzExOV07CisJX191MzIgaGFzaFsxMjBdOworCV9fdTMyIGJsb2NrWzEyMF07CisJX191MzIgaGFzaFsxMjFdOworCV9fdTMyIGJsb2NrWzEyMV07CisJX191MzIgaGFzaFsxMjJdOworCV9fdTMyIGJsb2NrWzEyMl07CisJX191MzIgaGFzaFsxMjNdOworCV9fdTMyIGJsb2NrWzEyM107CisJX191MzIgaGFzaFsxMjRdOworCV9fdTMyIGJsb2NrWzEyNF07CisJX191MzIgaGFzaFsxMjVdOworCV9fdTMyIGJsb2NrWzEyNV07CisJX191MzIgaGFzaFsxMjZdOworCV9fdTMyIGJsb2NrWzEyNl07CisJX191MzIgaGFzaFsxMjddOworCV9fdTMyIGJsb2NrWzEyN107Cit9OworCisKZGlmZiAtLWdpdCBhL2V4dDJlZC9leHQyX2NvbS5jIGIvZXh0MmVkL2V4dDJfY29tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQwMDRmMgotLS0gL2Rldi9udWxsCisrKyBiL2V4dDJlZC9leHQyX2NvbS5jCkBAIC0wLDAgKzEsOTggQEAKKy8qCisKKy91c3Ivc3JjL2V4dDJlZC9leHQyX2NvbS5jCisKK0EgcGFydCBvZiB0aGUgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gMiBkaXNrIGVkaXRvci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0V4dGVuZGVkLTIgZmlsZXN5c3RlbSBHZW5lcmFsIGNvbW1hbmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY29tbWFuZHMgaGVyZSB3aWxsIGJlIHJlZ2lzdGVyZWQgd2hlbiB3ZSBhcmUgZWRpdGluZyBhbiBleHQyIGZpbGVzeXN0ZW0KKworRmlyc3Qgd3JpdHRlbiBvbjogSnVseSAyOCAxOTk1CisKK0NvcHlyaWdodCAoQykgMTk5NSBHYWRpIE94bWFuCisKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiZXh0MmVkLmgiCisKK3ZvaWQgdHlwZV9leHQyX19fc3VwZXIgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworLyoKKworV2UgYXJlIG1vdmluZyB0byB0aGUgc3VwZXJibG9jayAtIEp1c3QgdXNlIHNldG9mZnNldCBhbmQgc2V0dHlwZS4gVGhlIG9mZnNldCB3YXMgZ2F0aGVyZWQgaW4gdGhlCitpbml0aWFsaXphdGlvbiBwaGFzZSAoYnV0IGlzIGNvbnN0YW50IC0gMTAyNCkuCisKKyovCisKK3sKKwljaGFyIGJ1ZmZlciBbODBdOworCisJc3VwZXJfaW5mby5jb3B5X251bT0wOworCXNwcmludGYgKGJ1ZmZlciwic2V0b2Zmc2V0ICVsZCIsZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9ja19vZmZzZXQpO2Rpc3BhdGNoIChidWZmZXIpOworCXNwcmludGYgKGJ1ZmZlciwic2V0dHlwZSBleHQyX3N1cGVyX2Jsb2NrIik7ZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9CisKK3ZvaWQgdHlwZV9leHQyX19fY2QgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworLyoKKworQSBnbG9iYWwgY2QgY29tbWFuZCAtIFRoZSBwYXRoIHNob3VsZCBzdGFydCB3aXRoIC8uCisKK1dlIGltcGxlbWVudCBpdCB0aHJvdWdoIGRpc3BhdGNoaW5nIHRvIG91ciBwcmltaXRpdmUgZnVuY3Rpb25zLgorCisqLworCit7CisJY2hhciB0ZW1wIFs4MF0sYnVmZmVyIFs4MF0sKnB0cjsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0cj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBObyBhcmd1bWVudCBzcGVjaWZpZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuOworCX0KKwlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisKKwlpZiAoYnVmZmVyIFswXSAhPSAnLycpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gVXNlIGEgZnVsbCBwYXRobmFtZSAoYmVnaW4gd2l0aCAnLycpXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisKKwkvKiBOb3RlIHRoZSB2YXJpb3VzIGRpc3BhdGNoZXMgYmVsb3cgLSBUaGV5IHNob3VsZCBiZSBpbnR1aXRpdmUgaWYgeW91IGtub3cgdGhlIGV4dDIgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUgKi8KKworCWRpc3BhdGNoICgic3VwZXIiKTtkaXNwYXRjaCAoImdyb3VwIik7ZGlzcGF0Y2ggKCJpbm9kZSIpO2Rpc3BhdGNoICgibmV4dCIpO2Rpc3BhdGNoICgiZGlyIik7CisJaWYgKGJ1ZmZlciBbMV0gIT0gMCkgeworCQlzcHJpbnRmICh0ZW1wLCJjZCAlcyIsYnVmZmVyKzEpO2Rpc3BhdGNoICh0ZW1wKTsKKwl9Cit9CisKK3ZvaWQgdHlwZV9leHQyX19fZ3JvdXAgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworLyoKKworV2UgZ28gdG8gdGhlIGdyb3VwIGRlc2NyaXB0b3JzLgorRmlyc3QsIHdlIGdvIHRvIHRoZSBmaXJzdCBncm91cCBkZXNjcmlwdG9yIGluIHRoZSBtYWluIGNvcHkuCitUaGVuLCB3ZSB1c2UgdGhlIGdyb3VwJ3MgZW50cnkgY29tbWFuZCB0byBwYXNzIHRvIGFub3RoZXIgZ3JvdXAuCisKKyovCisKK3sKKwlsb25nIGdyb3VwX251bT0wOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0ciE9MCkgeworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCWdyb3VwX251bT1hdG9sIChidWZmZXIpOworCX0KKworCWdyb3VwX2luZm8uY29weV9udW09MDtncm91cF9pbmZvLmdyb3VwX251bT0wOworCXNwcmludGYgKGJ1ZmZlciwic2V0b2Zmc2V0ICVsZCIsZmlsZV9zeXN0ZW1faW5mby5maXJzdF9ncm91cF9kZXNjX29mZnNldCk7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJc3ByaW50ZiAoYnVmZmVyLCJzZXR0eXBlIGV4dDJfZ3JvdXBfZGVzYyIpO2Rpc3BhdGNoIChidWZmZXIpOworCXNwcmludGYgKGJ1ZmZlciwiZW50cnkgJWxkIixncm91cF9udW0pO2Rpc3BhdGNoIChidWZmZXIpOworfQpkaWZmIC0tZ2l0IGEvZXh0MmVkL2V4dDJlZC44LmluIGIvZXh0MmVkL2V4dDJlZC44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZDZiMzMKLS0tIC9kZXYvbnVsbAorKysgYi9leHQyZWQvZXh0MmVkLjguaW4KQEAgLTAsMCArMSw3MiBAQAorLlwiIC0qLSBucm9mZiAtKi0KKy5USCBFWFQyRUQgOCAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQorZXh0MmVkIFwtIGV4dDIgZmlsZSBzeXN0ZW0gZWRpdG9yCisuU0ggU1lOT1BTSVMKKy5CIGV4dDJlZAorLlNIIERFU0NSSVBUSU9OCisuQiBleHQyZWQKK2luIGFuIAorLkIgZWRpdG9yCitmb3IgdGhlCisuQiBzZWNvbmQgZXh0ZW5kZWQgZmlsZXN5c3RlbS4KK0l0cyBhaW0gaXMgdG8gc2hvdyB5b3UgdGhlIHZhcmlvdXMgaW50ZXJuYWwgZmlsZXN5c3RlbSBzdHJ1Y3R1cmVzIGluIGFuCitpbnR1aXRpdmUgZm9ybSBzbyB0aGF0IHlvdSB3b3VsZCBiZSBhYmxlIHRvIGVhc2lseSB1bmRlcnN0YW5kIGFuZCBtb2RpZnkKK3RoZW0uCisuU0ggRE9DVU1FTlRBVElPTgorVGhlIGRvY3VtZW50YXRpb24gaXMgbm90IGF2YWlsYWJsZSBpbiBtYW4gcGFnZSBmb3JtYXQuIEluc3RlYWQsIEkgaGF2ZQord3JpdHRlbiB0aHJlZSBhcnRpY2xlcyB3aGljaCBhcmUgcmVsYXRlZCB0byBleHQyZWQ6CisKK1RoZSBmaXJzdCBhcnRpY2xlIGlzCisuQiBUaGUgdXNlcidzIGd1aWRlLgorVGhpcyBhcnRpY2xlIGV4cGxhaW5zIGhvdyB0byB1c2UgZXh0MmVkLgorCitUaGUgc2Vjb25kIGFydGljbGUgaXMKKy5CIFRoZSBFeHQyZnMgb3ZlcnZpZXcuCitUaGlzIGFydGljbGUgZ2l2ZXMgYW4gb3ZlcnZpZXcgb2YgaW50ZXJuYWwgc3RydWN0dXJlIG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0uCitZb3UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcm5hbCBsYXlvdXQgaW4gb3JkZXIgdG8gZWZmZWN0aXZlbHkgZWRpdAoreW91ciBmaWxlc3lzdGVtLgorCitUaGUgdGhpcmQgYXJ0aWNsZSBpcworLkIgRVhUMkVEIC0gRGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbi4KK1RoaXMgYXJ0aWNsZSBleHBsYWlucyBob3cgSSBjb25zdHJ1Y3RlZCBleHQyZWQuIFlvdSBtYXkgd2FudCB0byBoYXZlIGEgbG9vaworaW4gaXQgaWYgeW91IHBsYW4gdG8gdmlldyBvciBtb2RpZnkgdGhlIHNvdXJjZSBjb2RlLgorCisuU0ggV0FSTklORworCisuQgorRG8gbm90IHVzZSBleHQyZWQgb24gYSBtb3VudGVkIGZpbGVzeXN0ZW0uCisKKy5TSCBGSUxFUworLlRQCisuSSAvdXNyL2Jpbi9leHQyZWQKK1RoZSBwcm9ncmFtIGl0c2VsZi4KKy5UUAorLkkgQHJvb3Rfc3lzY29uZmRpckAvZXh0MmVkLmNvbmYKK2V4dDJlZCdzIGNvbmZpZ3VyYXRpb24gZmlsZS4KKy5UUAorLkkgQGRhdGFkaXJAL2V4dDIuZGVzY3JpcHRvcnMKK0RlZmluaXRpb24gb2YgdGhlIHZhcmlvdXMgb2JqZWN0cyBmb3IgdGhlIGV4dDIgZmlsZXN5c3RlbS4KKy5UUAorLkkgL3Zhci9sb2cvZXh0MmVkLmxvZworTG9nIGZpbGUgb2YgYWN0dWFsIGNoYW5nZXMgbWFkZSB0byB0aGUgZmlsZXN5c3RlbS4KKy5UUAorLkkgL3Vzci9tYW4vbWFuOC9leHQyZWQuOAorVGhlIG1hbnVhbCBwYWdlLgorLlRQCisuSSBAZGF0YWRpckAvZG9jL2V4dDJlZC91c2VyLWd1aWRlLTAuMS5wcworVGhlIHVzZXIncyBndWlkZS4KKy5UUAorLkkgQGRhdGFkaXJAL2RvYy9leHQyZWQvRXh0MmZzLW92ZXJ2aWV3LTAuMS5wcworVGVjaG5pY2FsIG92ZXJ2aWV3IG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0uCisuVFAKKy5JIEBkYXRhZGlyQC9kb2MvZXh0MmVkL2V4dDJlZC1kZXNpZ24tMC4xLnBzCitFWFQyRUQgZGVzaWduIG5vdGVzLgorCisuU0ggQlVHUworRmlsZXN5c3RlbXMgYmlnZ2VyIHRoYW4gMiBHQiBhcmVuJ3QgeWV0IHN1cHBvcnRlZC4KKy5TSCBBVVRIT1IKK0dhZGkgT3htYW4gPHRndWRAdG9jaG5hcGMyLnRlY2huaW9uLmFjLmlsPgorLlNIIFNFRSBBTFNPCisuQlIgZTJmc2NrICg4KSwKKy5CUiBkZWJ1Z2ZzICg4KQpkaWZmIC0tZ2l0IGEvZXh0MmVkL2V4dDJlZC5jb25mLmluIGIvZXh0MmVkL2V4dDJlZC5jb25mLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMmE5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9leHQyZWQvZXh0MmVkLmNvbmYuaW4KQEAgLTAsMCArMSw3OSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGV4dDJlZC5jb25mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBDb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBleHRlbmRlZCAyIGZpbGUgc3lzdGVtIGRpc2sgZWRpdG9yLiAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBFeHQyRGVzY3JpcHRvcnMgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0gc3RydWN0dXJlCisjIGRlZmluaXRpb25zLgorCisKK0V4dDJEZXNjcmlwdG9ycwkJQGRhdGFkaXJAL2V4dDIuZGVzY3JpcHRvcnMgCisKKworIyBVc2luZyBBbHRlcm5hdGVEZXNjcmlwdG9ycyB5b3UgY2FuIGRlY2xhcmUgYWRkaXRpb25hbCBzdHJ1Y3R1cmVzLiBUaG9zZQorIyBzdHJ1Y3R1cmVzIGNhbiBjb250YWluIG9ubHkgdmFyaWFibGVzLiBMaW5raW5nIGZ1bmN0aW9ucyB0byB0aGUgb2JqZWN0cyBpcworIyBwb3NzaWJsZSBvbmx5IHRocm91Z2ggc291cmNlIGNvZGUgYWRkaXRpb25zLgorCisKK0FsdGVybmF0ZURlc2NyaXB0b3JzCQorCisKKyMgTG9nRmlsZSBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGxvZyBmaWxlLiBBY3R1YWwgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbQorIyBhcmUgbG9nZ2VkIHRoZXJlLiBTZWUgYWxzbyBMb2dDaGFuZ2VzLgorCisKK0xvZ0ZpbGUJCQkvdmFyL2xvZy9leHQyZWQubG9nCisKKworIyBUaGUgZm9sbG93aW5nIHNlbGVjdHMgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2hlbiBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZQorIyBmaWxlc3lzdGVtLiBXaGVuIG9uLCBlYWNoIGNoYW5nZSB3aWxsIGJlIGxvZ2dlZCAtIEJvdGggdGhlIHByZXZpb3VzIGRhdGEKKyMgYW5kIHRoZSBuZXcgd3JpdHRlbiBkYXRhLgorCisKK0xvZ0NoYW5nZXMJCW9uCisKKworIyBBbGxvd0NoYW5nZXMgb2ZmIHdpbGwgbm90IGFsbG93IGV4dDJlZCB0byBkbyBhbnkgY2hhbmdlcyB0byB0aGUKKyMgZmlsZXN5c3RlbSAtIFRoZSAiZW5hYmxld3JpdGUiIGNvbW1hbmQgd2lsbCBub3Qgd29yay4gV2hlbiBvbiwgZW5hYmxld3JpdGUKKyMgd2lsbCBzdGlsbCBoYXZlIHRvIGJlIGlzc3VlZCB0byBhbGxvdyB3cml0ZSBhY2Nlc3MuCisKKworQWxsb3dDaGFuZ2VzCQlvbgorCisKKyMgV2l0aCB0aGlzIG9wdGlvbiB5b3UgY2FuIGNob29zZSB3aGV0aGVyIGV4dDJlZCB3aWxsIGFsbG93IHJlYWQtb25seSBtb2RlIG9uCisjIGEgbW91bnRlZCBmaWxlc3lzdGVtLiBSZWFkLVdyaXRlIG1vZGUgaXMgbmV2ZXIgYWxsb3dlZCBvbiBhIG1vdW50ZWQKKyMgZmlsZXN5c3RlbS4KKworCitBbGxvd01vdW50ZWRSZWFkCW9uCisKKworIyBXaGVuIEZvcmNlRXh0MiBpcyBzZXQgdG8gb24sIHRoZSBmaWxlc3lzdGVtIGlzIGFzc3VtZWQgdG8gYmUgZXh0MgorIyBmaWxlc3lzdGVtLCBkZXNwaXRlIHRoZSBwb3NzaWJseSBjb3JydXB0IHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVyIHJlYWRpbmcuCisjIEFsbCB0aGUgZXh0MiBzcGVjaWZpYyBjb21tYW5kcyB3aWxsIGJlIGF2aWFibGUgZGVzcGl0ZSB0aGUgcG9zc2libGUKKyMgYXV0b2RldGVjdGlvbiBmYWlsdHVyZS4KKworRm9yY2VFeHQyCQlvZmYKKworCisjIE5vcm1hbGx5LCB0aGUgdmFyaW91cyBmaWxlc3lzdGVtIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgYmxvY2sgc2l6ZSBhbmQgdGhlCisjIHRvdGFsIG51bWJlciBvZiBibG9ja3MgYXJlIGdhdGhlcmVkIGZyb20gdGhlIGV4dDIgZmlsZXN5c3RlbSBpdHNlbGYuCisjIEhvd2V2ZXIsIG9uIGEgY29ycnVwdCBmaWxlc3lzdGVtLCBleHQyZWQgaXMgdW5hYmxlIHRvIGdldCB0aGUgcmlnaHQKKyMgcGFyYW1ldGVycy4gSW4gdGhpcyBjYXNlLCB0aGV5IHdpbGwgYmUgdGFrZW4gZnJvbSBoZXJlLiBTZWUgYWxzbworIyBGb3JjZURlZmF1bHQuCisKKworRGVmYXVsdEJsb2NrU2l6ZQkxMDI0CitEZWZhdWx0VG90YWxCbG9ja3MJMjA5NzE1MQkJIyB+MiBHQiB0b3RhbCBzaXplCitEZWZhdWx0QmxvY2tzSW5Hcm91cAk4MTkyCisKKyMgV2l0aCBGb3JjZURlZmF1bHQgb24sIHlvdSBjYW4gZm9yY2UgdGhlIHVzZSBvZiB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzCisjIGFib3ZlLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCwgYXMgZXh0MmVkIHdpbGwgZmFsbGJhY2sgYnkgZGVmYXVsdCB0byB0aG9zZQorIyBwYXJhbWV0ZXJzIGlmIGl0IGNhbid0IGZpZ3VyZSB1cCB0aGUgcGFyYW1ldGVycyBmcm9tIHRoZSBmaWxlc3lzdGVtIGl0c2VsZi4KKworCitGb3JjZURlZmF1bHQgCQlvZmYKKworCmRpZmYgLS1naXQgYS9leHQyZWQvZXh0MmVkLmggYi9leHQyZWQvZXh0MmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliNDNiNAotLS0gL2Rldi9udWxsCisrKyBiL2V4dDJlZC9leHQyZWQuaApAQCAtMCwwICsxLDQzNSBAQAorCisvKgorCisvdXNyL3NyYy9leHQyZWQvZXh0MmVkLmgKKworQSBwYXJ0IG9mIHRoZSBleHRlbmRlZCBmaWxlIHN5c3RlbSAyIGRpc2sgZWRpdG9yLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5jbHVkZSBmaWxlIGZvciB0aGUgZXh0MiBkaXNrIGVkaXRvci4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZmlsZSBjb250YWlucyBkZWNsYXJhdGlvbnMgd2hpY2ggYXJlIG5lZWRlZCBieSBhbGwgdGhlIGZpbGVzIGluIGV4dDJlZC4KKworRmlyc3Qgd3JpdHRlbiBvbjogQXByaWwgOSAxOTk1CisKK0NvcHlyaWdodCAoQykgMTk5NSBHYWRpIE94bWFuCisKKyovCisKKyNpZm5kZWYgRVhUMkVEX0VESVRPUl9ICisjZGVmaW5lIEVYVDJFRF9FRElUT1JfSAorCisvKgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFVzZXIgZGVmaW5hYmxlIG9wdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyovCisKKyNkZWZpbmUgREVCVUcJCQkJCQkvKiBBY3RpdmF0ZSBzZWxmLXNhbml0eSBjaGVja3MgKi8KKworI2luY2x1ZGUgPGV4dDJmcy9leHQyX2ZzLmg+CQkJCS8qIE1haW4ga2VybmVsIGV4dDIgaW5jbHVkZSBmaWxlICovCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgPG5jdXJzZXMuaD4KKworI2RlZmluZSBNQVhfRklFTERTIAkJNDAwCisKKyNkZWZpbmUgTUFYX0NPTU1BTkRfTElORSAJODEKKyNkZWZpbmUgTUFYX0NPTU1BTkRTX05VTQkzMAkJCS8qIE1heGltdW0gbnVtYmVyIG9mIGNvbW1hbmRzIG9mIG9uZSB0eXBlICovCisjZGVmaW5lIFJFTUVNQkVSX0NPVU5UCQkzMAkJCS8qIE9iamVjdCBtZW1vcnkgc2l6ZSAqLworCisvKgorCVRoZSB1c2VyIHNjcmVlbiBjb25zaXN0cyBvZiBmb3VyIHBhcnRzOgorCisJCTEuCVRpdGxlIHdpbmRvdyAodGl0bGVfd2luKS4KKwkJMi4JU2hvdyAoc3RhdHVzKSB3aW5kb3cgKHNob3dfd2luKS4KKwkJMy4JTWFpbiBzaG93IHBhZCAoc2hvd19wYWQpLgorCQk0LglDb21tYW5kIHdpbmRvdyAoY29tbWFuZF93aW4pLgorCisqLworCisvKgorCisgICBUaGUgc2hvdyBwYWQgaXMgbWFwcGVkIHRvIHRoZSBzcGFjZSBsZWZ0IGJldHdlZW4gdGhlIG90aGVyIHRocmVlIHdpbmRvd3MuCisKKyAgIElmIHlvdSB3b25kZXJlZCB3aHkgZXh0MmVkIGdyYWJzIHNvIG1lbW9yeSwgdGhlIGFuc3dlciBpcyBwcm9iYWJseSBiZWxvdyAtIEkgd2FudGVkIHRvIHRyZWF0CisgICB0aGUgdmlydHVhbCBkaXNwbGF5IGFzIGluZmluaXRlLiBEZWNyZWFzZSB0aGUgZm9sbG93aW5nIGZvciBtb3JlIHJlYWxpc3RpYyBtZW1vcnkgY29uc3VtcHRpb24uCisKKyovCisKKyNkZWZpbmUgU0hPV19QQURfTElORVMgMzAwMAorI2RlZmluZSBTSE9XX1BBRF9DT0xTIChDT0xTID4gMTQwID8gQ09MUyA6IDE0MCkKKworI2RlZmluZSBDT01NQU5EX1dJTl9MSU5FUyA2CQkJCS8qIENoYW5nZSB0aGlzIHRvIHlvdXIgcHJlZmVyZW5jZXMgKi8KKyNkZWZpbmUgVElUTEVfV0lOX0xJTkVTIDMKKyNkZWZpbmUgU0hPV19XSU5fTElORVMgMworCisjZGVmaW5lIEhFWCAxCisjZGVmaW5lIFRFWFQgMgorCisjaWZuZGVmIEVYVDJfUFJFXzAyQl9NQUdJQworCSNkZWZpbmUgRVhUMl9QUkVfMDJCX01BR0lDCTB4RUY1MQorI2VuZGlmCisKKwordHlwZWRlZiB2b2lkICgqUEYpIChjaGFyICopOwkJCQkvKiBVc2VkIHRvIHBvaW50IHRvIHRoZSBkaXNwYXRjaGVkIGZ1bmN0aW9ucyAqLworCitzdHJ1Y3Qgc3RydWN0X2NvbW1hbmRzIHsJCQkJLyogSG9sZHMgY29tbWFuZHMgb2YgYW4gb2JqZWN0ICovCisJaW50IGxhc3RfY29tbWFuZDsKKwljaGFyICpuYW1lcyBbTUFYX0NPTU1BTkRTX05VTV07CisJY2hhciAqZGVzY3JpcHRpb25zIFtNQVhfQ09NTUFORFNfTlVNXTsKKwlQRiBjYWxsYmFjayBbTUFYX0NPTU1BTkRTX05VTV07Cit9OworCitzdHJ1Y3Qgc3RydWN0X2Rlc2NyaXB0b3IgewkJCQkvKiBEZXNjcmliZXMgYW4gb2JqZWN0ICovCisJdW5zaWduZWQgbG9uZyBsZW5ndGg7CisJdW5zaWduZWQgY2hhciBuYW1lIFs2MF07CisJdW5zaWduZWQgc2hvcnQgZmllbGRzX251bTsKKwl1bnNpZ25lZCBjaGFyIGZpZWxkX25hbWVzIFtNQVhfRklFTERTXVs4MF07CisJdW5zaWduZWQgY2hhciBmaWVsZF90eXBlcyBbTUFYX0ZJRUxEU107CisJdW5zaWduZWQgc2hvcnQgZmllbGRfbGVuZ3RocyBbTUFYX0ZJRUxEU107CisJdW5zaWduZWQgc2hvcnQgZmllbGRfcG9zaXRpb25zIFtNQVhfRklFTERTXTsKKwlzdHJ1Y3Qgc3RydWN0X2NvbW1hbmRzIHR5cGVfY29tbWFuZHM7CisJc3RydWN0IHN0cnVjdF9kZXNjcmlwdG9yICpwcmV2LCpuZXh0OworfTsKKworI2RlZmluZSBGSUVMRF9UWVBFX0lOVAkgIDEKKyNkZWZpbmUgRklFTERfVFlQRV9VSU5UICAgMgorI2RlZmluZSBGSUVMRF9UWVBFX0NIQVIgICAzCisKK3N0cnVjdCBzdHJ1Y3RfdHlwZV9kYXRhIHsJCQkJLyogVGhlIG9iamVjdCdzIGRhdGEgaXMgdXN1YWxseSBoZXJlICovCisJbG9uZyBvZmZzZXRfaW5fYmxvY2s7CisKKwl1bmlvbiB1bmlvbl90eXBlX2RhdGEgewkJCQkvKiBGb3JtYXQgaXQgaW4gdmFyaW91cyB3YXlzICovCisJCWNoYXIgYnVmZmVyIFtFWFQyX01BWF9CTE9DS19TSVpFXTsKKwkJc3RydWN0IGV4dDJfYWNsX2hlYWRlciB0X2V4dDJfYWNsX2hlYWRlcjsKKwkJc3RydWN0IGV4dDJfYWNsX2VudHJ5IHRfZXh0Ml9hY2xfZW50cnk7CisJCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgdF9leHQyX2dyb3VwX2Rlc2M7CisJCXN0cnVjdCBleHQyX2lub2RlIHRfZXh0Ml9pbm9kZTsKKwkJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgdF9leHQyX3N1cGVyX2Jsb2NrOworCQlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgdF9leHQyX2Rpcl9lbnRyeTsKKwl9IHU7Cit9OworCitzdHJ1Y3Qgc3RydWN0X2ZpbGVfc3lzdGVtX2luZm8gewkJCS8qIEltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZXN5c3RlbSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBmaWxlX3N5c3RlbV9zaXplOworCXVuc2lnbmVkIGxvbmcgc3VwZXJfYmxvY2tfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBncm91cHNfY291bnQ7CisJdW5zaWduZWQgbG9uZyBpbm9kZXNfcGVyX2Jsb2NrOworCXVuc2lnbmVkIGxvbmcgYmxvY2tzX3Blcl9ncm91cDsJCQkvKiBUaGUgbmFtZSBpcyBtaXNsZWFkaW5nOyBiZXdhcmUgKi8KKwl1bnNpZ25lZCBsb25nIG5vX2Jsb2Nrc19pbl9ncm91cDsKKwl1bnNpZ25lZCBzaG9ydCBibG9ja19zaXplOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHN1cGVyX2Jsb2NrOworfTsKKworc3RydWN0IHN0cnVjdF9maWxlX2luZm8gewkJCQkvKiBVc2VkIHRvIGhhbmRsZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgKi8KKworCXN0cnVjdCBleHQyX2lub2RlICppbm9kZV9wdHI7CisKKwlsb25nIGlub2RlX29mZnNldDsKKwlsb25nIGdsb2JhbF9ibG9ja19udW0sZ2xvYmFsX2Jsb2NrX29mZnNldDsKKwlsb25nIGJsb2NrX251bSxibG9ja3NfY291bnQ7CisJbG9uZyBmaWxlX29mZnNldCxmaWxlX2xlbmd0aDsKKwlsb25nIGxldmVsOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyIFtFWFQyX01BWF9CTE9DS19TSVpFXTsKKwlsb25nIG9mZnNldF9pbl9ibG9jazsKKworCWludCBkaXNwbGF5OworCS8qIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCBpZiB0aGUgZmlsZSBpcyBhIGRpcmVjdG9yeSAqLworCisJbG9uZyBkaXJfZW50cnlfbnVtLGRpcl9lbnRyaWVzX2NvdW50OworCWxvbmcgZGlyX2VudHJ5X29mZnNldDsKK307CisKK3N0cnVjdCBzdHJ1Y3Rfc3VwZXJfaW5mbyB7CQkJCS8qIFVzZWQgdG8gaGFuZGxlIHRoZSBzdXBlcmJsb2NrICovCisJdW5zaWduZWQgbG9uZyBjb3B5X251bTsKK307CisKK3N0cnVjdCBzdHJ1Y3RfZ3JvdXBfaW5mbyB7CQkJCS8qIFVzZWQgdG8gaGFuZGxlIHRoZSBncm91cCBkZXNjcmlwdG9ycyAqLworCXVuc2lnbmVkIGxvbmcgY29weV9udW07CisJdW5zaWduZWQgbG9uZyBncm91cF9udW07Cit9OworCitzdHJ1Y3Qgc3RydWN0X2Jsb2NrX2JpdG1hcF9pbmZvIHsJCQkvKiBVc2VkIGluIGJsb2NrYml0bWFwX2NvbS5jICovCisJdW5zaWduZWQgbG9uZyBlbnRyeV9udW07CisJdW5zaWduZWQgbG9uZyBncm91cF9udW07Cit9OworCitzdHJ1Y3Qgc3RydWN0X2lub2RlX2JpdG1hcF9pbmZvIHsJCQkvKiBVc2VkIGluIGlub2RlYml0bWFwX2NvbS5jICovCisJdW5zaWduZWQgbG9uZyBlbnRyeV9udW07CisJdW5zaWduZWQgbG9uZyBncm91cF9udW07Cit9OworCitzdHJ1Y3Qgc3RydWN0X3JlbWVtYmVyX2xpZm8gewkJCQkvKiBJbXBsZW1lbnRzIHRoZSBvYmplY3RzIGNpcmN1bGFyIG1lbW9yeSAqLworCWxvbmcgZW50cmllc19jb3VudDsKKworCWxvbmcgb2Zmc2V0IFtSRU1FTUJFUl9DT1VOVF07CisJc3RydWN0IHN0cnVjdF9kZXNjcmlwdG9yICp0eXBlIFtSRU1FTUJFUl9DT1VOVF07CisJY2hhciBuYW1lIFtSRU1FTUJFUl9DT1VOVF1bODBdOworfTsKKworc3RydWN0IHN0cnVjdF9wYWRfaW5mbyB7CQkJCS8qIFVzZWQgdG8gem9vbSBpbnRvIHRoZSBwYWQgd2luZG93ICovCisJaW50IGRpc3BsYXlfbGluZXMsZGlzcGxheV9jb2xzOworCWludCBsaW5lLGNvbDsKKwlpbnQgbWF4X2xpbmUsbWF4X2NvbDsKKwlpbnQgZGlzYWJsZV9vdXRwdXQ7Cit9OworCisvKiBHbG9iYWwgdmFyaWFibGVzIChkZWZpbmVkIG1vc3RseSBpbiBtYWluLmMpICovCisKKy8qIENvbmZpZ3VyYWJsZSB2YXJpYWJsZXMgKFRocm91Z2ggY29uZmlndXJhdGlvbiBmaWxlKSAqLworCitleHRlcm4gY2hhciBBbHRlcm5hdGVEZXNjcmlwdG9ycyBbMjAwXTsKK2V4dGVybiBjaGFyIEV4dDJEZXNjcmlwdG9ycyBbMjAwXTsKK2V4dGVybiBjaGFyIExvZ0ZpbGUgWzIwMF07CitleHRlcm4gaW50IExvZ0NoYW5nZXM7CitleHRlcm4gaW50IEFsbG93Q2hhbmdlczsKK2V4dGVybiBpbnQgQWxsb3dNb3VudGVkUmVhZDsKK2V4dGVybiBpbnQgRm9yY2VFeHQyOworZXh0ZXJuIGludCBEZWZhdWx0QmxvY2tTaXplOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgRGVmYXVsdFRvdGFsQmxvY2tzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgRGVmYXVsdEJsb2Nrc0luR3JvdXA7CitleHRlcm4gaW50IEZvcmNlRGVmYXVsdDsKKworZXh0ZXJuIGNoYXIgZGV2aWNlX25hbWUgWzgwXTsKK2V4dGVybiBjaGFyIGxhc3RfY29tbWFuZF9saW5lIFs4MF07CitleHRlcm4gRklMRSAqZGV2aWNlX2hhbmRsZTsKK2V4dGVybiBsb25nIGRldmljZV9vZmZzZXQ7CitleHRlcm4gaW50ICBtb3VudGVkOworCitleHRlcm4gc2hvcnQgYmxvY2tfc2l6ZTsKK2V4dGVybiBzdHJ1Y3Qgc3RydWN0X2NvbW1hbmRzIGdlbmVyYWxfY29tbWFuZHM7CitleHRlcm4gc3RydWN0IHN0cnVjdF9jb21tYW5kcyBleHQyX2NvbW1hbmRzOworZXh0ZXJuIHN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqZmlyc3RfdHlwZTsKK2V4dGVybiBzdHJ1Y3Qgc3RydWN0X2Rlc2NyaXB0b3IgKmxhc3RfdHlwZTsKK2V4dGVybiBzdHJ1Y3Qgc3RydWN0X2Rlc2NyaXB0b3IgKmN1cnJlbnRfdHlwZTsKK2V4dGVybiBzdHJ1Y3Qgc3RydWN0X3R5cGVfZGF0YSB0eXBlX2RhdGE7CitleHRlcm4gc3RydWN0IHN0cnVjdF9maWxlX3N5c3RlbV9pbmZvIGZpbGVfc3lzdGVtX2luZm87CitleHRlcm4gc3RydWN0IHN0cnVjdF9maWxlX2luZm8gZmlsZV9pbmZvLGZpcnN0X2ZpbGVfaW5mbzsKK2V4dGVybiBzdHJ1Y3Qgc3RydWN0X2dyb3VwX2luZm8gZ3JvdXBfaW5mbzsKK2V4dGVybiBzdHJ1Y3Qgc3RydWN0X3N1cGVyX2luZm8gc3VwZXJfaW5mbzsKK2V4dGVybiBzdHJ1Y3Qgc3RydWN0X2Jsb2NrX2JpdG1hcF9pbmZvIGJsb2NrX2JpdG1hcF9pbmZvOworZXh0ZXJuIHN0cnVjdCBzdHJ1Y3RfaW5vZGVfYml0bWFwX2luZm8gaW5vZGVfYml0bWFwX2luZm87CitleHRlcm4gc3RydWN0IHN0cnVjdF9yZW1lbWJlcl9saWZvIHJlbWVtYmVyX2xpZm87CitleHRlcm4gc3RydWN0IHN0cnVjdF9wYWRfaW5mbyBzaG93X3BhZF9pbmZvOworZXh0ZXJuIGludCB3cml0ZV9hY2Nlc3M7CisKK2V4dGVybiBpbnQgcmVkcmF3X3JlcXVlc3Q7CitleHRlcm4gY2hhciBsaW5lc19zIFs4MF07CitleHRlcm4gY2hhciBjb2xzX3MgWzgwXTsKKworCisvKiBpbml0LmMgKi8KKworZXh0ZXJuIGludCBpbml0ICh2b2lkKTsKK2V4dGVybiB2b2lkIHByZXBhcmVfdG9fY2xvc2UgKHZvaWQpOworZXh0ZXJuIGludCBzZXRfc3RydWN0X2Rlc2NyaXB0b3JzIChjaGFyICpmaWxlX25hbWUpOworZXh0ZXJuIHZvaWQgZnJlZV9zdHJ1Y3RfZGVzY3JpcHRvcnMgKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqYWRkX25ld19kZXNjcmlwdG9yIChjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIGFkZF9uZXdfdmFyaWFibGUgKHN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqZGVzY3JpcHRvcixjaGFyICp2X3R5cGUsY2hhciAqdl9uYW1lKTsKK2V4dGVybiB2b2lkIGZpbGxfdHlwZV9jb21tYW5kcyAoc3RydWN0IHN0cnVjdF9kZXNjcmlwdG9yICpwdHIpOworZXh0ZXJuIHZvaWQgYWRkX3VzZXJfY29tbWFuZCAoc3RydWN0IHN0cnVjdF9jb21tYW5kcyAqcHRyLGNoYXIgKm5hbWUsY2hhciAqZGVzY3JpcHRpb24sUEYgY2FsbGJhY2spOworZXh0ZXJuIHZvaWQgZnJlZV91c2VyX2NvbW1hbmRzIChzdHJ1Y3Qgc3RydWN0X2NvbW1hbmRzICpwdHIpOworZXh0ZXJuIGludCBzZXRfZmlsZV9zeXN0ZW1faW5mbyAodm9pZCk7CitleHRlcm4gaW50IHByb2Nlc3NfY29uZmlndXJhdGlvbl9maWxlICh2b2lkKTsKK2V4dGVybiB2b2lkIGFkZF9nZW5lcmFsX2NvbW1hbmRzICh2b2lkKTsKK2V4dGVybiB2b2lkIGFkZF9leHQyX2dlbmVyYWxfY29tbWFuZHMgKHZvaWQpOworZXh0ZXJuIHZvaWQgY2hlY2tfbW91bnRlZCAoY2hhciAqbmFtZSk7CisKK2ludCBnZXRfbmV4dF9vcHRpb24gKEZJTEUgKmZwLGNoYXIgKm9wdGlvbixjaGFyICp2YWx1ZSk7Cit2b2lkIGluaXRfcmVhZGxpbmUgKHZvaWQpOwordm9pZCBpbml0X3NpZ25hbHMgKHZvaWQpOwordm9pZCBzaWduYWxfU0lHV0lOQ0hfaGFuZGxlciAoaW50IHNpZ19udW0pOwordm9pZCBzaWduYWxfU0lHVEVSTV9oYW5kbGVyIChpbnQgc2lnX251bSk7Cit2b2lkIHNpZ25hbF9TSUdTRUdWX2hhbmRsZXIgKGludCBzaWdfbnVtKTsKKworLyogZ2VuZXJhbF9jb20uYyAqLworCisvKiBHZW5lcmFsIGNvbW1hbmRzIHdoaWNoIGFyZSBhdmlhYmxlIGFsd2F5cyAqLworCitleHRlcm4gdm9pZCBoZWxwIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgc2V0IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgc2V0X2RldmljZSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHNldF9vZmZzZXQgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCBzZXRfdHlwZSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHNob3cgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCBwZ3VwIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgcGdkbiAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHJlZHJhdyAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHJlbWVtYmVyIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgcmVjYWxsIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgY2QgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCBlbmFibGVfd3JpdGUgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCBkaXNhYmxlX3dyaXRlIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgd3JpdGVfZGF0YSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIG5leHQgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCBwcmV2IChjaGFyICpjb21tYW5kX2xpbmUpOworCit2b2lkIGhleF9zZXQgKGNoYXIgKmNvbW1hbmRfbGluZSk7Cit2b2lkIGRldGFpbGVkX2hlbHAgKGNoYXIgKnRleHQpOworCisKKy8qIGV4dDJfY29tLmMgKi8KKworLyogRXh0ZW5kZWQyIGZpbGVzeXN0ZW0gZ2VuZXJlYWwgY29tbWFuZHMgLSBBdmlhYmxlIG9ubHkgd2hlbiBlZGl0aW5nIGFuCisgICBleHQyIGZpbGVzeXN0ZW0gKi8KKworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX19fc3VwZXIgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfX19ncm91cCAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9fX2NkIChjaGFyICpjb21tYW5kX2xpbmUpOworCisKKy8qIG1haW4uYyAqLworCitleHRlcm4gaW50IHZlcnNpb25fbWFqb3IsdmVyc2lvbl9taW5vcjsKK2V4dGVybiBjaGFyIHJldmlzaW9uX2RhdGUgWzgwXTsKK2V4dGVybiBjaGFyIGVtYWlsX2FkZHJlc3MgWzgwXTsKKworI2lmZGVmIERFQlVHCitleHRlcm4gdm9pZCBpbnRlcm5hbF9lcnJvciAoY2hhciAqZGVzY3JpcHRpb24sY2hhciAqc291cmNlX25hbWUsY2hhciAqZnVuY3Rpb25fbmFtZSk7CisjZW5kaWYKKwordm9pZCBwYXJzZXIgKHZvaWQpOworZXh0ZXJuIGludCBkaXNwYXRjaCAoY2hhciAqY29tbWFuZF9saW5lKTsKK2NoYXIgKnBhcnNlX3dvcmQgKGNoYXIgKnNvdXJjZSxjaGFyICpkZXN0KTsKK2NoYXIgKmNvbXBsZXRlX2NvbW1hbmQgKGNoYXIgKnRleHQsaW50IHN0YXRlKTsKK2NoYXIgKmR1cHN0ciAoY2hhciAqc3JjKTsKKworCisKKy8qIGRpc2suYyAqLworCitleHRlcm4gaW50IGxvYWRfdHlwZV9kYXRhICh2b2lkKTsKK2V4dGVybiBpbnQgd3JpdGVfdHlwZV9kYXRhICh2b2lkKTsKK2V4dGVybiBpbnQgbG93X3JlYWQgKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcix1bnNpZ25lZCBsb25nIGxlbmd0aCx1bnNpZ25lZCBsb25nIG9mZnNldCk7CitleHRlcm4gaW50IGxvd193cml0ZSAodW5zaWduZWQgY2hhciAqYnVmZmVyLHVuc2lnbmVkIGxvbmcgbGVuZ3RoLHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKK2V4dGVybiBpbnQgbG9nX2NoYW5nZXMgKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcix1bnNpZ25lZCBsb25nIGxlbmd0aCx1bnNpZ25lZCBsb25nIG9mZnNldCk7CisKKy8qIGZpbGVfY29tLmMgKi8KKworZXh0ZXJuIGludCBpbml0X2ZpbGVfaW5mbyAodm9pZCk7CitleHRlcm4gdm9pZCB0eXBlX2ZpbGVfX19zaG93IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9maWxlX19faW5vZGUgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2ZpbGVfX19kaXNwbGF5IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9maWxlX19fcHJldiAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZmlsZV9fX25leHQgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2ZpbGVfX19vZmZzZXQgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2ZpbGVfX19wcmV2YmxvY2sgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2ZpbGVfX19uZXh0YmxvY2sgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2ZpbGVfX19ibG9jayAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZmlsZV9fX3JlbWVtYmVyIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9maWxlX19fc2V0IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9maWxlX19fd3JpdGVkYXRhIChjaGFyICpjb21tYW5kX2xpbmUpOworCitleHRlcm4gbG9uZyBmaWxlX2Jsb2NrX3RvX2dsb2JhbF9ibG9jayAobG9uZyBmaWxlX2Jsb2NrLHN0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvICpmaWxlX2luZm9fcHRyKTsKK2V4dGVybiBsb25nIHJldHVybl9pbmRpcmVjdCAobG9uZyB0YWJsZV9ibG9jayxsb25nIGJsb2NrX251bSk7CitleHRlcm4gbG9uZyByZXR1cm5fZGluZGlyZWN0IChsb25nIHRhYmxlX2Jsb2NrLGxvbmcgYmxvY2tfbnVtKTsKK2V4dGVybiBsb25nIHJldHVybl90aW5kaXJlY3QgKGxvbmcgdGFibGVfYmxvY2ssbG9uZyBibG9ja19udW0pOworCit2b2lkIGZpbGVfc2hvd19oZXggKHZvaWQpOwordm9pZCBmaWxlX3Nob3dfdGV4dCAodm9pZCk7Cit2b2lkIHNob3dfc3RhdHVzICh2b2lkKTsKKworLyogaW5vZGVfY29tLmMgKi8KKworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2lub2RlX19fbmV4dCAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9pbm9kZV9fX3ByZXYgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfaW5vZGVfX19zaG93IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2lub2RlX19fZ3JvdXAgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfaW5vZGVfX19lbnRyeSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9pbm9kZV9fX2ZpbGUgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfaW5vZGVfX19kaXIgKGNoYXIgKmNvbW1hbmRfbGluZSk7CisKK2V4dGVybiBsb25nIGlub2RlX29mZnNldF90b19ncm91cF9udW0gKGxvbmcgaW5vZGVfb2Zmc2V0KTsKK2V4dGVybiBsb25nIGludCBpbm9kZV9vZmZzZXRfdG9faW5vZGVfbnVtIChsb25nIGlub2RlX29mZnNldCk7CitleHRlcm4gbG9uZyBpbnQgaW5vZGVfbnVtX3RvX2lub2RlX29mZnNldCAobG9uZyBpbm9kZV9udW0pOworCisvKiBkaXJfY29tLmMgKi8KKworZXh0ZXJuIGludCBpbml0X2Rpcl9pbmZvIChzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyAqaW5mbyk7CitleHRlcm4gdm9pZCB0eXBlX2Rpcl9fX3Nob3cgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2Rpcl9fX2lub2RlIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9kaXJfX19wZ2RuIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9kaXJfX19wZ3VwIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9kaXJfX19wcmV2IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9kaXJfX19uZXh0IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9kaXJfX19mb2xsb3dpbm9kZSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZGlyX19fcmVtZW1iZXIgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2Rpcl9fX2NkIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9kaXJfX19lbnRyeSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZGlyX19fd3JpdGVkYXRhIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9kaXJfX19zZXQgKGNoYXIgKmNvbW1hbmRfbGluZSk7CisKKyNkZWZpbmUgSEVYIDEKKyNkZWZpbmUgVEVYVCAyCisKKyNkZWZpbmUgQUJPUlQJCTAKKyNkZWZpbmUgQ09OVElOVUUJMQorI2RlZmluZSBGT1VORAkJMgorCitzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyBzZWFyY2hfZGlyX2VudHJpZXMgKGludCAoKmFjdGlvbikgKHN0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvICppbmZvKSxpbnQgKnN0YXR1cyk7CitpbnQgYWN0aW9uX2NvdW50IChzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyAqaW5mbyk7Cit2b2lkIHNob3dfZGlyX3N0YXR1cyAodm9pZCk7Citsb25nIGNvdW50X2Rpcl9lbnRyaWVzICh2b2lkKTsKK2ludCBhY3Rpb25fbmFtZSAoc3RydWN0IHN0cnVjdF9maWxlX2luZm8gKmluZm8pOworaW50IGFjdGlvbl9lbnRyeV9udW0gKHN0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvICppbmZvKTsKK2ludCBhY3Rpb25fc2hvdyAoc3RydWN0IHN0cnVjdF9maWxlX2luZm8gKmluZm8pOworCisvKiBzdXBlcl9jb20uYyAqLworCitleHRlcm4gdm9pZCB0eXBlX2V4dDJfc3VwZXJfYmxvY2tfX19zaG93IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX3N1cGVyX2Jsb2NrX19fZ29jb3B5IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX3N1cGVyX2Jsb2NrX19fc2V0YWN0aXZlY29weSAoY2hhciAqY29tbWFuZF9saW5lKTsKKworLyogZ3JvdXBfY29tLmMgKi8KKworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19uZXh0IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19wcmV2IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19lbnRyeSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9ncm91cF9kZXNjX19fc2hvdyAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9ncm91cF9kZXNjX19faW5vZGUgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX2dvY29weSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9ncm91cF9kZXNjX19fYmxvY2tiaXRtYXAgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX2lub2RlYml0bWFwIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19zZXRhY3RpdmVjb3B5IChjaGFyICpjb21tYW5kX2xpbmUpOworCisvKiBibG9ja2JpdG1hcF9jb20uYyAqLworCitleHRlcm4gdm9pZCB0eXBlX2V4dDJfYmxvY2tfYml0bWFwX19fc2hvdyAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9ibG9ja19iaXRtYXBfX19lbnRyeSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9ibG9ja19iaXRtYXBfX19uZXh0IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2Jsb2NrX2JpdG1hcF9fX3ByZXYgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfYmxvY2tfYml0bWFwX19fYWxsb2NhdGUgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfYmxvY2tfYml0bWFwX19fZGVhbGxvY2F0ZSAoY2hhciAqY29tbWFuZF9saW5lKTsKK3ZvaWQgYWxsb2NhdGVfYmxvY2sgKGxvbmcgZW50cnlfbnVtKTsKK3ZvaWQgZGVhbGxvY2F0ZV9ibG9jayAobG9uZyBlbnRyeV9udW0pOworCisvKiBpbm9kZWJpdG1hcF9ib20uYyAqLworCitleHRlcm4gdm9pZCB0eXBlX2V4dDJfaW5vZGVfYml0bWFwX19fc2hvdyAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9pbm9kZV9iaXRtYXBfX19lbnRyeSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9pbm9kZV9iaXRtYXBfX19uZXh0IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2lub2RlX2JpdG1hcF9fX3ByZXYgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfaW5vZGVfYml0bWFwX19fYWxsb2NhdGUgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfaW5vZGVfYml0bWFwX19fZGVhbGxvY2F0ZSAoY2hhciAqY29tbWFuZF9saW5lKTsKK3ZvaWQgYWxsb2NhdGVfaW5vZGUgKGxvbmcgZW50cnlfbnVtKTsKK3ZvaWQgZGVhbGxvY2F0ZV9pbm9kZSAobG9uZyBlbnRyeV9udW0pOworCisvKiB3aW4uYyAqLworCitleHRlcm4gV0lORE9XICp0aXRsZV93aW4sKnNob3dfd2luLCpjb21tYW5kX3dpbiwqc2hvd19wYWQ7CisKK2V4dGVybiB2b2lkIGluaXRfd2luZG93cyAodm9pZCk7CitleHRlcm4gdm9pZCByZWZyZXNoX3RpdGxlX3dpbiAodm9pZCk7CitleHRlcm4gdm9pZCByZWZyZXNoX3Nob3dfd2luICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlZnJlc2hfc2hvd19wYWQgKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVmcmVzaF9jb21tYW5kX3dpbiAodm9pZCk7CitleHRlcm4gdm9pZCBzaG93X2luZm8gKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVkcmF3X2FsbCAodm9pZCk7CitleHRlcm4gdm9pZCBjbG9zZV93aW5kb3dzICh2b2lkKTsKKworI2VuZGlmIC8qIEVYVDJFRF9FRElUT1JfSCAqLwpkaWZmIC0tZ2l0IGEvZXh0MmVkL2ZpbGVfY29tLmMgYi9leHQyZWQvZmlsZV9jb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjY3OTU5Ci0tLSAvZGV2L251bGwKKysrIGIvZXh0MmVkL2ZpbGVfY29tLmMKQEAgLTAsMCArMSw1NjUgQEAKKy8qCisKKy91c3Ivc3JjL2V4dDJlZC9maWxlX2NvbS5jCisKK0EgcGFydCBvZiB0aGUgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gMiBkaXNrIGVkaXRvci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tbWFuZHMgd2hpY2ggaGFuZGxlIGEgZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXJzdCB3cml0dGVuIG9uOiBBcHJpbCAxOCAxOTk1CisKK0NvcHlyaWdodCAoQykgMTk5NSBHYWRpIE94bWFuCisKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiZXh0MmVkLmgiCisKK2ludCBpbml0X2ZpbGVfaW5mbyAodm9pZCkKKworeworCXN0cnVjdCBleHQyX2lub2RlICpwdHI7CisKKwlwdHI9JnR5cGVfZGF0YS51LnRfZXh0Ml9pbm9kZTsKKworCWZpbGVfaW5mby5pbm9kZV9wdHI9cHRyOworCWZpbGVfaW5mby5pbm9kZV9vZmZzZXQ9ZGV2aWNlX29mZnNldDsKKworCWZpbGVfaW5mby5nbG9iYWxfYmxvY2tfbnVtPXB0ci0+aV9ibG9jayBbMF07CisJZmlsZV9pbmZvLmdsb2JhbF9ibG9ja19vZmZzZXQ9cHRyLT5pX2Jsb2NrIFswXSpmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisJZmlsZV9pbmZvLmJsb2NrX251bT0wOworCWZpbGVfaW5mby5ibG9ja3NfY291bnQ9KHB0ci0+aV9zaXplK2ZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZS0xKS9maWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisJZmlsZV9pbmZvLmZpbGVfb2Zmc2V0PTA7CisJZmlsZV9pbmZvLmZpbGVfbGVuZ3RoPXB0ci0+aV9zaXplOworCWZpbGVfaW5mby5sZXZlbD0wOworCWZpbGVfaW5mby5vZmZzZXRfaW5fYmxvY2s9MDsKKworCWZpbGVfaW5mby5kaXNwbGF5PUhFWDsKKworCWxvd19yZWFkIChmaWxlX2luZm8uYnVmZmVyLGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSxmaWxlX2luZm8uZ2xvYmFsX2Jsb2NrX29mZnNldCk7CisKKwlyZXR1cm4gKDEpOworfQorCisKK3ZvaWQgdHlwZV9maWxlX19faW5vZGUgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWRpc3BhdGNoICgic2V0dHlwZSBleHQyX2lub2RlIik7Cit9CisKK3ZvaWQgdHlwZV9maWxlX19fc2hvdyAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJaWYgKGZpbGVfaW5mby5kaXNwbGF5PT1IRVgpCisJCWZpbGVfc2hvd19oZXggKCk7CisJaWYgKGZpbGVfaW5mby5kaXNwbGF5PT1URVhUKQorCQlmaWxlX3Nob3dfdGV4dCAoKTsKK30KKwordm9pZCB0eXBlX2ZpbGVfX19uZXh0YmxvY2sgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgYmxvY2tfb2Zmc2V0PTE7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQlibG9ja19vZmZzZXQqPWF0b2wgKGJ1ZmZlcik7CisJfQorCisJaWYgKGZpbGVfaW5mby5ibG9ja19udW0rYmxvY2tfb2Zmc2V0ID49IGZpbGVfaW5mby5ibG9ja3NfY291bnQpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gQmxvY2sgb2Zmc2V0IG91dCBvZiByYW5nZVxuIik7d3JlZnJlc2ggKGNvbW1hbmRfd2luKTsKKwkJcmV0dXJuOworCX0KKworCWZpbGVfaW5mby5ibG9ja19udW0rPWJsb2NrX29mZnNldDsKKwlmaWxlX2luZm8uZ2xvYmFsX2Jsb2NrX251bT1maWxlX2Jsb2NrX3RvX2dsb2JhbF9ibG9jayAoZmlsZV9pbmZvLmJsb2NrX251bSwmZmlsZV9pbmZvKTsKKwlmaWxlX2luZm8uZ2xvYmFsX2Jsb2NrX29mZnNldD1maWxlX2luZm8uZ2xvYmFsX2Jsb2NrX251bSpmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisJZmlsZV9pbmZvLmZpbGVfb2Zmc2V0PWZpbGVfaW5mby5ibG9ja19udW0qZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplOworCisJbG93X3JlYWQgKGZpbGVfaW5mby5idWZmZXIsZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLGZpbGVfaW5mby5nbG9iYWxfYmxvY2tfb2Zmc2V0KTsKKworCXN0cmNweSAoYnVmZmVyLCJzaG93Iik7ZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9CisKK3ZvaWQgdHlwZV9maWxlX19fbmV4dCAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJaW50IG9mZnNldD0xOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKworCWlmICgqcHRyIT0wKSB7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkJb2Zmc2V0Kj1hdG9sIChidWZmZXIpOworCX0KKworCWlmIChmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrK29mZnNldCA8IGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSkgeworCQlmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrKz1vZmZzZXQ7CisJCXNwcmludGYgKGJ1ZmZlciwic2hvdyIpO2Rpc3BhdGNoIChidWZmZXIpOworCX0KKworCWVsc2UgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBPZmZzZXQgb3V0IG9mIGJsb2NrXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCX0KK30KKwordm9pZCB0eXBlX2ZpbGVfX19vZmZzZXQgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKworCWlmICgqcHRyIT0wKSB7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkJb2Zmc2V0PWF0b2wgKGJ1ZmZlcik7CisJfQorCWVsc2UgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBBcmd1bWVudCBub3Qgc3BlY2lmaWVkXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm47CisJfQorCisJaWYgKG9mZnNldCA8IGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSkgeworCQlmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrPW9mZnNldDsKKwkJc3ByaW50ZiAoYnVmZmVyLCJzaG93Iik7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJfQorCisJZWxzZSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE9mZnNldCBvdXQgb2YgYmxvY2tcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJfQorfQorCit2b2lkIHR5cGVfZmlsZV9fX3ByZXYgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWludCBvZmZzZXQ9MTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisKKwlpZiAoKnB0ciE9MCkgeworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCW9mZnNldCo9YXRvbCAoYnVmZmVyKTsKKwl9CisKKwlpZiAoZmlsZV9pbmZvLm9mZnNldF9pbl9ibG9jay1vZmZzZXQgPj0gMCkgeworCQlmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrLT1vZmZzZXQ7CisJCXNwcmludGYgKGJ1ZmZlciwic2hvdyIpO2Rpc3BhdGNoIChidWZmZXIpOworCX0KKworCWVsc2UgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBPZmZzZXQgb3V0IG9mIGJsb2NrXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCX0KK30KKwordm9pZCB0eXBlX2ZpbGVfX19wcmV2YmxvY2sgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgYmxvY2tfb2Zmc2V0PTE7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQlibG9ja19vZmZzZXQqPWF0b2wgKGJ1ZmZlcik7CisJfQorCisJaWYgKGZpbGVfaW5mby5ibG9ja19udW0tYmxvY2tfb2Zmc2V0IDwgMCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBCbG9jayBvZmZzZXQgb3V0IG9mIHJhbmdlXG4iKTt3cmVmcmVzaCAoY29tbWFuZF93aW4pOworCQlyZXR1cm47CisJfQorCisJZmlsZV9pbmZvLmJsb2NrX251bS09YmxvY2tfb2Zmc2V0OworCWZpbGVfaW5mby5nbG9iYWxfYmxvY2tfbnVtPWZpbGVfYmxvY2tfdG9fZ2xvYmFsX2Jsb2NrIChmaWxlX2luZm8uYmxvY2tfbnVtLCZmaWxlX2luZm8pOworCWZpbGVfaW5mby5nbG9iYWxfYmxvY2tfb2Zmc2V0PWZpbGVfaW5mby5nbG9iYWxfYmxvY2tfbnVtKmZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKwlmaWxlX2luZm8uZmlsZV9vZmZzZXQ9ZmlsZV9pbmZvLmJsb2NrX251bSpmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisKKwlsb3dfcmVhZCAoZmlsZV9pbmZvLmJ1ZmZlcixmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUsZmlsZV9pbmZvLmdsb2JhbF9ibG9ja19vZmZzZXQpOworCisJc3RyY3B5IChidWZmZXIsInNob3ciKTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKwordm9pZCB0eXBlX2ZpbGVfX19ibG9jayAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG9uZyBibG9ja19vZmZzZXQ9MTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisKKwlpZiAoKnB0cj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBJbnZhbGlkIGFyZ3VtZW50c1xuIik7d3JlZnJlc2ggKGNvbW1hbmRfd2luKTsKKwkJcmV0dXJuOworCX0KKworCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwlibG9ja19vZmZzZXQ9YXRvbCAoYnVmZmVyKTsKKworCWlmIChibG9ja19vZmZzZXQgPCAwIHx8IGJsb2NrX29mZnNldCA+PSBmaWxlX2luZm8uYmxvY2tzX2NvdW50KSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEJsb2NrIG9mZnNldCBvdXQgb2YgcmFuZ2VcbiIpO3dyZWZyZXNoIChjb21tYW5kX3dpbik7CisJCXJldHVybjsKKwl9CisKKwlmaWxlX2luZm8uYmxvY2tfbnVtPWJsb2NrX29mZnNldDsKKwlmaWxlX2luZm8uZ2xvYmFsX2Jsb2NrX251bT1maWxlX2Jsb2NrX3RvX2dsb2JhbF9ibG9jayAoZmlsZV9pbmZvLmJsb2NrX251bSwmZmlsZV9pbmZvKTsKKwlmaWxlX2luZm8uZ2xvYmFsX2Jsb2NrX29mZnNldD1maWxlX2luZm8uZ2xvYmFsX2Jsb2NrX251bSpmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisJZmlsZV9pbmZvLmZpbGVfb2Zmc2V0PWZpbGVfaW5mby5ibG9ja19udW0qZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplOworCisJbG93X3JlYWQgKGZpbGVfaW5mby5idWZmZXIsZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLGZpbGVfaW5mby5nbG9iYWxfYmxvY2tfb2Zmc2V0KTsKKworCXN0cmNweSAoYnVmZmVyLCJzaG93Iik7ZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9CisKK3ZvaWQgdHlwZV9maWxlX19fZGlzcGxheSAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCWlmICgqcHRyPT0wKQorCQlzdHJjcHkgKGJ1ZmZlciwiaGV4Iik7CisJZWxzZQorCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisKKwlpZiAoc3RyY2FzZWNtcCAoYnVmZmVyLCJoZXgiKT09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRGlzcGxheSBzZXQgdG8gaGV4XG4iKTt3cmVmcmVzaCAoY29tbWFuZF93aW4pOworCQlmaWxlX2luZm8uZGlzcGxheT1IRVg7CisJCXNwcmludGYgKGJ1ZmZlciwic2hvdyIpO2Rpc3BhdGNoIChidWZmZXIpOworCX0KKworCWVsc2UgaWYgKHN0cmNhc2VjbXAgKGJ1ZmZlciwidGV4dCIpPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJEaXNwbGF5IHNldCB0byB0ZXh0XG4iKTt3cmVmcmVzaCAoY29tbWFuZF93aW4pOworCQlmaWxlX2luZm8uZGlzcGxheT1URVhUOworCQlzcHJpbnRmIChidWZmZXIsInNob3ciKTtkaXNwYXRjaCAoYnVmZmVyKTsKKwl9CisKKwllbHNlIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gSW52YWxpZCBhcmd1bWVudHNcbiIpO3dyZWZyZXNoIChjb21tYW5kX3dpbik7CisJfQorfQorCit2b2lkIGZpbGVfc2hvd19oZXggKHZvaWQpCisKK3sKKwlsb25nIG9mZnNldD0wLGwsaTsKKwl1bnNpZ25lZCBjaGFyICpjaF9wdHI7CisKKwkvKiBkZXZpY2Vfb2Zmc2V0IGFuZCB0eXBlX2RhdGEgcG9pbnRzIHRvIHRoZSBpbm9kZSAqLworCisJc2hvd19wYWRfaW5mby5saW5lPTA7CisKKwl3bW92ZSAoc2hvd19wYWQsMCwwKTsKKwljaF9wdHI9ZmlsZV9pbmZvLmJ1ZmZlcjsKKwlmb3IgKGw9MDtsPGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZS8xNjtsKyspIHsKKwkJaWYgKGZpbGVfaW5mby5maWxlX29mZnNldCtvZmZzZXQ+ZmlsZV9pbmZvLmZpbGVfbGVuZ3RoLTEpIGJyZWFrOworCQl3cHJpbnR3IChzaG93X3BhZCwiJTA4bGQgOiAgIixvZmZzZXQpOworCQlmb3IgKGk9MDtpPDE2O2krKykgeworCisJCQlpZiAoZmlsZV9pbmZvLmZpbGVfb2Zmc2V0K29mZnNldCtpPmZpbGVfaW5mby5maWxlX2xlbmd0aC0xKSB7CisJCQkJd3ByaW50dyAoc2hvd19wYWQsIiAiKTsKKwkJCX0KKworCQkJZWxzZSB7CisJCQkJaWYgKGZpbGVfaW5mby5vZmZzZXRfaW5fYmxvY2s9PW9mZnNldCtpKQorCQkJCQl3YXR0cnNldCAoc2hvd19wYWQsQV9SRVZFUlNFKTsKKworCQkJCWlmIChjaF9wdHIgW2ldPj0nICcgJiYgY2hfcHRyIFtpXTw9J3onKQorCQkJCQl3cHJpbnR3IChzaG93X3BhZCwiJWMiLGNoX3B0ciBbaV0pOworCQkJCWVsc2UKKwkJCQkJd3ByaW50dyAoc2hvd19wYWQsIi4iKTsKKworCQkJCWlmIChmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrPT1vZmZzZXQraSkKKwkJCQkJd2F0dHJzZXQgKHNob3dfcGFkLEFfTk9STUFMKTsKKwkJCX0KKwkJfQorCisJCXdwcmludHcgKHNob3dfcGFkLCIgICAiKTsKKwkJZm9yIChpPTA7aTwxNjtpKyspIHsKKwkJCWlmIChmaWxlX2luZm8uZmlsZV9vZmZzZXQrb2Zmc2V0K2k+ZmlsZV9pbmZvLmZpbGVfbGVuZ3RoLTEpIGJyZWFrOworCQkJaWYgKGZpbGVfaW5mby5vZmZzZXRfaW5fYmxvY2s9PW9mZnNldCtpKQorCQkJCXdhdHRyc2V0IChzaG93X3BhZCxBX1JFVkVSU0UpOworCisJCQl3cHJpbnR3IChzaG93X3BhZCwiJTAyeCIsY2hfcHRyIFtpXSk7CisKKwkJCWlmIChmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrPT1vZmZzZXQraSkgeworCQkJCXdhdHRyc2V0IChzaG93X3BhZCxBX05PUk1BTCk7CisJCQkJc2hvd19wYWRfaW5mby5saW5lPWwtbCAlIHNob3dfcGFkX2luZm8uZGlzcGxheV9saW5lczsKKwkJCX0KKworCQkJd3ByaW50dyAoc2hvd19wYWQsIiAiKTsKKworCQl9CisKKwkJd3ByaW50dyAoc2hvd19wYWQsIlxuIik7CisJCW9mZnNldCs9aTsKKwkJY2hfcHRyKz1pOworCX0KKworCXNob3dfcGFkX2luZm8ubWF4X2xpbmU9bC0xOworCisJcmVmcmVzaF9zaG93X3BhZCAoKTsKKworCXNob3dfc3RhdHVzICgpOworfQorCit2b2lkIGZpbGVfc2hvd190ZXh0ICh2b2lkKQorCit7CisJbG9uZyBvZmZzZXQ9MCxsYXN0X29mZnNldCxsPTAsY29scz0wOworCXVuc2lnbmVkIGNoYXIgKmNoX3B0cjsKKworCS8qIGRldmljZV9vZmZzZXQgYW5kIHR5cGVfZGF0YSBwb2ludHMgdG8gdGhlIGlub2RlICovCisKKwlzaG93X3BhZF9pbmZvLmxpbmU9MDsKKwl3bW92ZSAoc2hvd19wYWQsMCwwKTsKKwljaF9wdHI9ZmlsZV9pbmZvLmJ1ZmZlcjsKKworCWxhc3Rfb2Zmc2V0PWZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZS0xOworCisJaWYgKGZpbGVfaW5mby5maWxlX29mZnNldCtsYXN0X29mZnNldCA+IGZpbGVfaW5mby5maWxlX2xlbmd0aC0xKQorCQlsYXN0X29mZnNldD1maWxlX2luZm8uZmlsZV9sZW5ndGgtMS1maWxlX2luZm8uZmlsZV9vZmZzZXQ7CisKKwl3aGlsZSAoIChvZmZzZXQgPD0gbGFzdF9vZmZzZXQpICYmIGw8U0hPV19QQURfTElORVMpIHsKKworCQlpZiAoY29scz09U0hPV19QQURfQ09MUy0xKSB7CisJCQl3cHJpbnR3IChzaG93X3BhZCwiXG4iKTsKKwkJCWwrKztjb2xzPTA7CisJCX0KKworCisJCWlmIChmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrPT1vZmZzZXQpCisJCQl3YXR0cnNldCAoc2hvd19wYWQsQV9SRVZFUlNFKTsKKworCQlpZiAoKmNoX3B0ciA+PSAnICcgJiYgKmNoX3B0ciA8PSAneicpCisJCQl3cHJpbnR3IChzaG93X3BhZCwiJWMiLCpjaF9wdHIpOworCisKKwkJZWxzZSB7CisJCQlpZiAoKmNoX3B0ciA9PSAweGEpIHsKKwkJCQl3cHJpbnR3IChzaG93X3BhZCwiXG4iKTsKKwkJCQlsKys7Y29scz0wOworCQkJfQorCisJCQllbHNlIGlmICgqY2hfcHRyID09IDB4OSkKKwkJCQl3cHJpbnR3IChzaG93X3BhZCwiICAgICIpOworCisJCQllbHNlCisJCQkJd3ByaW50dyAoc2hvd19wYWQsIi4iKTsKKwkJfQorCisJCWlmIChmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrPT1vZmZzZXQpIHsKKwkJCXdhdHRyc2V0IChzaG93X3BhZCxBX05PUk1BTCk7CisJCQlzaG93X3BhZF9pbmZvLmxpbmU9bC1sICUgc2hvd19wYWRfaW5mby5kaXNwbGF5X2xpbmVzOworCQl9CisKKworCQlvZmZzZXQrKztjb2xzKys7Y2hfcHRyKys7CisJfQorCisJd3ByaW50dyAoc2hvd19wYWQsIlxuIik7CisJc2hvd19wYWRfaW5mby5tYXhfbGluZT1sOworCisJcmVmcmVzaF9zaG93X3BhZCAoKTsKKworCXNob3dfc3RhdHVzICgpOworfQorCit2b2lkIHNob3dfc3RhdHVzICh2b2lkKQorCit7CisJbG9uZyBpbm9kZV9udW07CisKKwl3ZXJhc2UgKHNob3dfd2luKTt3bW92ZSAoc2hvd193aW4sMCwwKTsKKwl3cHJpbnR3IChzaG93X3dpbiwiRmlsZSBjb250ZW50cy4gQmxvY2sgJWxkLiAiLGZpbGVfaW5mby5nbG9iYWxfYmxvY2tfbnVtKTsKKwl3cHJpbnR3IChzaG93X3dpbiwiRmlsZSBibG9jayAlbGQgb2YgJWxkLiAiLGZpbGVfaW5mby5ibG9ja19udW0sZmlsZV9pbmZvLmJsb2Nrc19jb3VudC0xKTsKKwl3cHJpbnR3IChzaG93X3dpbiwiRmlsZSBPZmZzZXQgJWxkIG9mICVsZC4iLGZpbGVfaW5mby5maWxlX29mZnNldCxmaWxlX2luZm8uZmlsZV9sZW5ndGgtMSk7CisKKwl3bW92ZSAoc2hvd193aW4sMSwwKTsKKwlpbm9kZV9udW09aW5vZGVfb2Zmc2V0X3RvX2lub2RlX251bSAoZmlsZV9pbmZvLmlub2RlX29mZnNldCk7CisJd3ByaW50dyAoc2hvd193aW4sIkZpbGUgaW5vZGUgJWxkLiBJbmRpcmVjdGlvbiBsZXZlbCAlbGQuIixpbm9kZV9udW0sZmlsZV9pbmZvLmxldmVsKTsKKworCXJlZnJlc2hfc2hvd193aW4gKCk7Cit9CisKK3ZvaWQgdHlwZV9maWxlX19fcmVtZW1iZXIgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWludCBmb3VuZD0wOworCWxvbmcgZW50cnlfbnVtOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKwlzdHJ1Y3Qgc3RydWN0X2Rlc2NyaXB0b3IgKmRlc2NyaXB0b3JfcHRyOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCisJaWYgKCpwdHI9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gQXJndW1lbnQgbm90IHNwZWNpZmllZFxuIik7d3JlZnJlc2ggKGNvbW1hbmRfd2luKTsKKwkJcmV0dXJuOworCX0KKworCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKworCWVudHJ5X251bT1yZW1lbWJlcl9saWZvLmVudHJpZXNfY291bnQrKzsKKwlpZiAoZW50cnlfbnVtPlJFTUVNQkVSX0NPVU5ULTEpIHsKKwkJZW50cnlfbnVtPTA7CisJCXJlbWVtYmVyX2xpZm8uZW50cmllc19jb3VudC0tOworCX0KKworCWRlc2NyaXB0b3JfcHRyPWZpcnN0X3R5cGU7CisJd2hpbGUgKGRlc2NyaXB0b3JfcHRyIT1OVUxMICYmICFmb3VuZCkgeworCQlpZiAoc3RyY21wIChkZXNjcmlwdG9yX3B0ci0+bmFtZSwiZXh0Ml9pbm9kZSIpPT0wKQorCQkJZm91bmQ9MTsKKwkJZWxzZQorCQkJZGVzY3JpcHRvcl9wdHI9ZGVzY3JpcHRvcl9wdHItPm5leHQ7CisJfQorCisKKwlyZW1lbWJlcl9saWZvLm9mZnNldCBbZW50cnlfbnVtXT1kZXZpY2Vfb2Zmc2V0OworCXJlbWVtYmVyX2xpZm8udHlwZSBbZW50cnlfbnVtXT1kZXNjcmlwdG9yX3B0cjsKKwlzdHJjcHkgKHJlbWVtYmVyX2xpZm8ubmFtZSBbZW50cnlfbnVtXSxidWZmZXIpOworCisJd3ByaW50dyAoY29tbWFuZF93aW4sIk9iamVjdCAlcyBpbiBPZmZzZXQgJWxkIHJlbWVtYmVyZWQgYXMgJXNcbiIsZGVzY3JpcHRvcl9wdHItPm5hbWUsZGV2aWNlX29mZnNldCxidWZmZXIpOworCXdyZWZyZXNoIChjb21tYW5kX3dpbik7Cit9CisKK3ZvaWQgdHlwZV9maWxlX19fc2V0IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwl1bnNpZ25lZCBjaGFyIHRtcDsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF0sKmNoX3B0cjsKKwlpbnQgbW9kZT1IRVg7CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHI9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gQXJndW1lbnQgbm90IHNwZWNpZmllZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCisJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCisJaWYgKHN0cmNhc2VjbXAgKGJ1ZmZlciwidGV4dCIpPT0wKSB7CisJCW1vZGU9VEVYVDsKKwkJc3RyY3B5IChidWZmZXIscHRyKTsKKwl9CisKKwllbHNlIGlmIChzdHJjYXNlY21wIChidWZmZXIsImhleCIpPT0wKSB7CisJCW1vZGU9SEVYOworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJfQorCisJaWYgKCpidWZmZXI9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRGF0YSBub3Qgc3BlY2lmaWVkXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisKKwlpZiAobW9kZT09SEVYKSB7CisJCWRvIHsKKwkJCXRtcD0odW5zaWduZWQgY2hhcikgc3RydG9sIChidWZmZXIsTlVMTCwxNik7CisJCQlmaWxlX2luZm8uYnVmZmVyIFtmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrXT10bXA7CisJCQlmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrKys7CisJCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCQlpZiAoZmlsZV9pbmZvLm9mZnNldF9pbl9ibG9jaz09ZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplKSB7CisJCQkJaWYgKCpwdHIpIHsKKwkJCQkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRW5kaW5nIG9mZnNldCBvdXRzaWRlIGJsb2NrLCBvbmx5IHBhcnRpYWwgc3RyaW5nIGNoYW5nZWRcbiIpOworCQkJCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQkJCX0KKwkJCQlmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrLS07CisJCQl9CisJCX0gd2hpbGUgKCpidWZmZXIpIDsKKwl9CisKKwllbHNlIHsKKwkJY2hfcHRyPWJ1ZmZlcjsKKwkJd2hpbGUgKCpjaF9wdHIpIHsKKwkJCXRtcD0odW5zaWduZWQgY2hhcikgKmNoX3B0cisrOworCQkJZmlsZV9pbmZvLmJ1ZmZlciBbZmlsZV9pbmZvLm9mZnNldF9pbl9ibG9ja109dG1wOworCQkJZmlsZV9pbmZvLm9mZnNldF9pbl9ibG9jaysrOworCQkJaWYgKGZpbGVfaW5mby5vZmZzZXRfaW5fYmxvY2s9PWZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSkgeworCQkJCWlmICgqY2hfcHRyKSB7CisJCQkJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEVuZGluZyBvZmZzZXQgb3V0c2lkZSBibG9jaywgb25seSBwYXJ0aWFsIHN0cmluZyBjaGFuZ2VkXG4iKTsKKwkJCQkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJCQl9CisJCQkJZmlsZV9pbmZvLm9mZnNldF9pbl9ibG9jay0tOworCQkJfQorCQl9CisJfQorCisJc3RyY3B5IChidWZmZXIsInNob3ciKTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKwordm9pZCB0eXBlX2ZpbGVfX193cml0ZWRhdGEgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvd193cml0ZSAoZmlsZV9pbmZvLmJ1ZmZlcixmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUsZmlsZV9pbmZvLmdsb2JhbF9ibG9ja19vZmZzZXQpOworCXJldHVybjsKK30KKworbG9uZyBmaWxlX2Jsb2NrX3RvX2dsb2JhbF9ibG9jayAobG9uZyBmaWxlX2Jsb2NrLHN0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvICpmaWxlX2luZm9fcHRyKQorCit7CisJbG9uZyBsYXN0X2RpcmVjdCxsYXN0X2luZGlyZWN0LGxhc3RfZGluZGlyZWN0OworCisJbGFzdF9kaXJlY3Q9RVhUMl9ORElSX0JMT0NLUy0xOworCWxhc3RfaW5kaXJlY3Q9bGFzdF9kaXJlY3QrZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLzQ7CisJbGFzdF9kaW5kaXJlY3Q9bGFzdF9pbmRpcmVjdCsoZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLzQpKihmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvNCk7CisKKwlpZiAoZmlsZV9ibG9jayA8PSBsYXN0X2RpcmVjdCkgeworCQlmaWxlX2luZm9fcHRyLT5sZXZlbD0wOworCQlyZXR1cm4gKGZpbGVfaW5mb19wdHItPmlub2RlX3B0ci0+aV9ibG9jayBbZmlsZV9ibG9ja10pOworCX0KKworCWlmIChmaWxlX2Jsb2NrIDw9IGxhc3RfaW5kaXJlY3QpIHsKKwkJZmlsZV9pbmZvX3B0ci0+bGV2ZWw9MTsKKwkJZmlsZV9ibG9jaz1maWxlX2Jsb2NrLWxhc3RfZGlyZWN0LTE7CisJCXJldHVybiAocmV0dXJuX2luZGlyZWN0IChmaWxlX2luZm9fcHRyLT5pbm9kZV9wdHItPmlfYmxvY2sgW0VYVDJfSU5EX0JMT0NLXSxmaWxlX2Jsb2NrKSk7CisJfQorCisJaWYgKGZpbGVfYmxvY2sgPD0gbGFzdF9kaW5kaXJlY3QpIHsKKwkJZmlsZV9pbmZvX3B0ci0+bGV2ZWw9MjsKKwkJZmlsZV9ibG9jaz1maWxlX2Jsb2NrLWxhc3RfaW5kaXJlY3QtMTsKKwkJcmV0dXJuIChyZXR1cm5fZGluZGlyZWN0IChmaWxlX2luZm9fcHRyLT5pbm9kZV9wdHItPmlfYmxvY2sgW0VYVDJfRElORF9CTE9DS10sZmlsZV9ibG9jaykpOworCX0KKworCWZpbGVfaW5mb19wdHItPmxldmVsPTM7CisJZmlsZV9ibG9jaz1maWxlX2Jsb2NrLWxhc3RfZGluZGlyZWN0LTE7CisJcmV0dXJuIChyZXR1cm5fdGluZGlyZWN0IChmaWxlX2luZm9fcHRyLT5pbm9kZV9wdHItPmlfYmxvY2sgW0VYVDJfVElORF9CTE9DS10sZmlsZV9ibG9jaykpOworfQorCitsb25nIHJldHVybl9pbmRpcmVjdCAobG9uZyB0YWJsZV9ibG9jayxsb25nIGJsb2NrX251bSkKKworeworCWxvbmcgYmxvY2tfdGFibGUgW0VYVDJfTUFYX0JMT0NLX1NJWkUvNF07CisKKwlsb3dfcmVhZCAoKGNoYXIgKikgYmxvY2tfdGFibGUsZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLHRhYmxlX2Jsb2NrKmZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSk7CisJcmV0dXJuIChibG9ja190YWJsZSBbYmxvY2tfbnVtXSk7Cit9CisKK2xvbmcgcmV0dXJuX2RpbmRpcmVjdCAobG9uZyB0YWJsZV9ibG9jayxsb25nIGJsb2NrX251bSkKKworeworCWxvbmcgZl9pbmRpcmVjdDsKKworCWZfaW5kaXJlY3Q9YmxvY2tfbnVtLyhmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvNCk7CisJZl9pbmRpcmVjdD1yZXR1cm5faW5kaXJlY3QgKHRhYmxlX2Jsb2NrLGZfaW5kaXJlY3QpOworCXJldHVybiAocmV0dXJuX2luZGlyZWN0IChmX2luZGlyZWN0LGJsb2NrX251bSUoZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLzQpKSk7Cit9CisKK2xvbmcgcmV0dXJuX3RpbmRpcmVjdCAobG9uZyB0YWJsZV9ibG9jayxsb25nIGJsb2NrX251bSkKKworeworCWxvbmcgc19pbmRpcmVjdDsKKworCXNfaW5kaXJlY3Q9YmxvY2tfbnVtLygoZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLzQpKihmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvNCkpOworCXNfaW5kaXJlY3Q9cmV0dXJuX2luZGlyZWN0ICh0YWJsZV9ibG9jayxzX2luZGlyZWN0KTsKKwlyZXR1cm4gKHJldHVybl9kaW5kaXJlY3QgKHNfaW5kaXJlY3QsYmxvY2tfbnVtJSgoZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLzQpKihmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvNCkpKSk7Cit9CmRpZmYgLS1naXQgYS9leHQyZWQvZ2VuZXJhbF9jb20uYyBiL2V4dDJlZC9nZW5lcmFsX2NvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YjJmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9leHQyZWQvZ2VuZXJhbF9jb20uYwpAQCAtMCwwICsxLDkwNyBAQAorLyoKKworL3Vzci9zcmMvZXh0MmVkL2dlbmVyYWxfY29tLmMKKworQSBwYXJ0IG9mIHRoZSBleHRlbmRlZCBmaWxlIHN5c3RlbSAyIGRpc2sgZWRpdG9yLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYWwgdXNlciBjb21tYW5kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpcnN0IHdyaXR0ZW4gb246IEFwcmlsIDkgMTk5NQorCitDb3B5cmlnaHQgKEMpIDE5OTUgR2FkaSBPeG1hbgorCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImV4dDJlZC5oIgorI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKwordm9pZCBoZWxwIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlpbnQgaSxtYXhfbGluZT0wOworCWNoYXIgYXJndW1lbnQgWzgwXSwqcHRyOworCisJd2VyYXNlIChzaG93X3BhZCk7d21vdmUgKHNob3dfcGFkLDAsMCk7CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGFyZ3VtZW50KTsKKworCWlmICgqcHRyIT0wKSB7CisJCSBwdHI9cGFyc2Vfd29yZCAocHRyLGFyZ3VtZW50KTsKKwkJIGlmICgqYXJndW1lbnQhPTApIHsKKwkJCSBkZXRhaWxlZF9oZWxwIChhcmd1bWVudCk7CisJCQkgcmV0dXJuOworCQl9CisJfQorCisJaWYgKGN1cnJlbnRfdHlwZSE9TlVMTCkgeworCisJCXdwcmludHcgKHNob3dfcGFkLCJUeXBlICVzIHNwZWNpZmljIGNvbW1hbmRzOlxuIixjdXJyZW50X3R5cGUtPm5hbWUpO21heF9saW5lKys7CisKKwkJaWYgKGN1cnJlbnRfdHlwZS0+dHlwZV9jb21tYW5kcy5sYXN0X2NvbW1hbmQ9PS0xKSB7CisJCQl3cHJpbnR3IChzaG93X3BhZCwiXG5ub25lXG4iKTttYXhfbGluZSs9MjsKKwkJfQorCQllbHNlCisJCQlmb3IgKGk9MDtpPD1jdXJyZW50X3R5cGUtPnR5cGVfY29tbWFuZHMubGFzdF9jb21tYW5kO2krKykgeworCQkJCWlmIChpJTU9PTApIHsKKwkJCQkJd3ByaW50dyAoc2hvd19wYWQsIlxuIik7bWF4X2xpbmUrKzsKKwkJCQl9CisJCQkJd3ByaW50dyAoc2hvd19wYWQsIiUtMTNzIixjdXJyZW50X3R5cGUtPnR5cGVfY29tbWFuZHMubmFtZXMgW2ldKTsKKwkJCQlpZiAoaSU1IT00KQorCQkJCQl3cHJpbnR3IChzaG93X3BhZCwiOyAgIik7CisJCQl9CisKKwkJd3ByaW50dyAoc2hvd19wYWQsIlxuXG4iKTttYXhfbGluZSs9MjsKKwl9CisKKwlpZiAoZXh0Ml9jb21tYW5kcy5sYXN0X2NvbW1hbmQgIT0gLTEpIHsKKwkJd3ByaW50dyAoc2hvd19wYWQsImV4dDIgZmlsZXN5c3RlbSBnZW5lcmFsIGNvbW1hbmRzOiBcbiIpO21heF9saW5lKys7CisJCWZvciAoaT0wO2k8PWV4dDJfY29tbWFuZHMubGFzdF9jb21tYW5kO2krKykgeworCQkJaWYgKGklNT09MCkgeworCQkJCXdwcmludHcgKHNob3dfcGFkLCJcbiIpO21heF9saW5lKys7CisJCQl9CisJCQl3cHJpbnR3IChzaG93X3BhZCwiJS0xM3MiLGV4dDJfY29tbWFuZHMubmFtZXMgW2ldKTsKKwkJCWlmIChpJTUhPTQpCisJCQkJd3ByaW50dyAoc2hvd19wYWQsIjsgICIpOworCisJCX0KKwkJd3ByaW50dyAoc2hvd19wYWQsIlxuXG4iKTttYXhfbGluZSs9MjsKKwl9CisKKwl3cHJpbnR3IChzaG93X3BhZCwiR2VuZXJhbCBjb21tYW5kczogXG4iKTsKKworCWZvciAoaT0wO2k8PWdlbmVyYWxfY29tbWFuZHMubGFzdF9jb21tYW5kO2krKykgeworCQlpZiAoaSU1PT0wKSB7CisJCQl3cHJpbnR3IChzaG93X3BhZCwiXG4iKTttYXhfbGluZSsrOworCQl9CisJCXdwcmludHcgKHNob3dfcGFkLCIlLTEzcyIsZ2VuZXJhbF9jb21tYW5kcy5uYW1lcyBbaV0pOworCQlpZiAoaSU1IT00KQorCQkJd3ByaW50dyAoc2hvd19wYWQsIjsgICIpOworCX0KKworCXdwcmludHcgKHNob3dfcGFkLCJcblxuIik7bWF4X2xpbmUrPTI7CisKKwl3cHJpbnR3IChzaG93X3BhZCwiRVhUMkVEIHZlciAlcyAoJXMpXG4iLEUyRlNQUk9HU19WRVJTSU9OLCBFMkZTUFJPR1NfREFURSk7CisJd3ByaW50dyAoc2hvd19wYWQsIkNvcHlyaWdodCAoQykgMTk5NSBHYWRpIE94bWFuXG4iKTsKKwl3cHJpbnR3IChzaG93X3BhZCwiUmV2aWV3ZWQgMjAwMSBDaHJpc3RpYW4gQmFjXG4iKTsKKwl3cHJpbnR3IChzaG93X3BhZCwiTW9kaWZpZWQgYW5kIGVuY2hhbmNlZCBieSBUaGVvZG9yZSBUcydvLCAyMDAyXG4iKTsKKwl3cHJpbnR3IChzaG93X3BhZCwiRVhUMkVEIGlzIGhlcmVieSBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cblxuIik7CisJd3ByaW50dyAoc2hvd19wYWQsIkVYVDJFRCB3YXMgcHJvZ3JhbW1lZCBhcyBhIHN0dWRlbnQgcHJvamVjdCBpbiB0aGUgc29mdHdhcmUgbGFib3JhdG9yeVxuIik7CisJd3ByaW50dyAoc2hvd19wYWQsIm9mIHRoZSBmYWN1bHR5IG9mIGVsZWN0cmljYWwgZW5naW5lZXJpbmcgaW4gdGhlXG4iKTsKKwl3cHJpbnR3IChzaG93X3BhZCwiVGVjaG5pb24gLSBJc3JhZWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3lcbiIpOworCXdwcmludHcgKHNob3dfcGFkLCJ3aXRoIHRoZSBndWlkZSBvZiBBdm5lciBMb3R0ZW0gYW5kIERyLiBJbGFuYSBEYXZpZC5cbiIpOworCisJbWF4X2xpbmUrPTEwOworCisJc2hvd19wYWRfaW5mby5saW5lPTA7c2hvd19wYWRfaW5mby5tYXhfbGluZT1tYXhfbGluZTsKKworCXdlcmFzZSAoc2hvd193aW4pO3dtb3ZlIChzaG93X3dpbiwwLDApOworCXdwcmludHcgKHNob3dfd2luLCJFWFQyRUQgaGVscCIpOworCisJcmVmcmVzaF9zaG93X3dpbiAoKTsKKwlyZWZyZXNoX3Nob3dfcGFkICgpOworfQorCit2b2lkIGRldGFpbGVkX2hlbHAgKGNoYXIgKnRleHQpCisKK3sKKwlpbnQgaTsKKworCWlmIChjdXJyZW50X3R5cGUgIT0gTlVMTCkKKwkJZm9yIChpPTA7aTw9Y3VycmVudF90eXBlLT50eXBlX2NvbW1hbmRzLmxhc3RfY29tbWFuZDtpKyspIHsKKwkJCWlmIChzdHJjbXAgKGN1cnJlbnRfdHlwZS0+dHlwZV9jb21tYW5kcy5uYW1lcyBbaV0sdGV4dCk9PTApIHsKKwkJCQl3cHJpbnR3IChzaG93X3BhZCwiJXMgLSAlc1xuIix0ZXh0LGN1cnJlbnRfdHlwZS0+dHlwZV9jb21tYW5kcy5kZXNjcmlwdGlvbnMgW2ldKTsKKwkJCQlyZWZyZXNoX3Nob3dfcGFkICgpO3JldHVybjsKKwkJCX0KKwkJfQorCisJZm9yIChpPTA7aTw9ZXh0Ml9jb21tYW5kcy5sYXN0X2NvbW1hbmQ7aSsrKSB7CisJCWlmIChzdHJjbXAgKGV4dDJfY29tbWFuZHMubmFtZXMgW2ldLHRleHQpPT0wKSB7CisJCQkJd3ByaW50dyAoc2hvd19wYWQsIiVzIC0gJXNcbiIsdGV4dCxleHQyX2NvbW1hbmRzLmRlc2NyaXB0aW9ucyBbaV0pOworCQkJCXJlZnJlc2hfc2hvd19wYWQgKCk7cmV0dXJuOworCQl9CisJfQorCisJZm9yIChpPTA7aTw9Z2VuZXJhbF9jb21tYW5kcy5sYXN0X2NvbW1hbmQ7aSsrKSB7CisJCWlmIChzdHJjbXAgKGdlbmVyYWxfY29tbWFuZHMubmFtZXMgW2ldLHRleHQpPT0wKSB7CisJCQkJd3ByaW50dyAoc2hvd19wYWQsIiVzIC0gJXNcbiIsdGV4dCxnZW5lcmFsX2NvbW1hbmRzLmRlc2NyaXB0aW9ucyBbaV0pOworCQkJCXJlZnJlc2hfc2hvd19wYWQgKCk7cmV0dXJuOworCQl9CisJfQorCisJaWYgKHN0cmNtcCAoInF1aXQiLHRleHQpPT0wKSB7CisJCXdwcmludHcgKHNob3dfcGFkLCJxdWl0IC0gRXhpc3RzIEVYVDJFRCIpOworCQlyZWZyZXNoX3Nob3dfcGFkICgpO3JldHVybjsKKwl9CisKKwl3cHJpbnR3IChzaG93X3BhZCwiRXJyb3IgLSBDb21tYW5kICVzIG5vdCBhdmlhYmxlIG5vd1xuIix0ZXh0KTsKKwlyZWZyZXNoX3Nob3dfcGFkICgpO3JldHVybjsKK30KKworCisKK3ZvaWQgc2V0X2RldmljZSAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJY2hhciAqcHRyLG5ld19kZXZpY2UgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsbmV3X2RldmljZSk7CisJaWYgKCpwdHI9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRGV2aWNlIG5hbWUgbm90IHNwZWNpZmllZFxuIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuOworCX0KKwlwYXJzZV93b3JkIChwdHIsbmV3X2RldmljZSk7CisJY2hlY2tfbW91bnRlZCAobmV3X2RldmljZSk7CisJaWYgKG1vdW50ZWQgJiYgIUFsbG93TW91bnRlZFJlYWQpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRmlsZXN5c3RlbSBpcyBtb3VudGVkLCBhYm9ydGluZ1xuIik7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJZb3UgbWF5IHdpc2ggdG8gdXNlIHRoZSBBbGxvd01vdW50ZWRSZWFkIG9uIGNvbmZpZ3VyYXRpb24gb3B0aW9uXG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCisJaWYgKG1vdW50ZWQgJiYgQWxsb3dNb3VudGVkUmVhZCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiV2FybmluZyAtIEZpbGVzeXN0ZW0gaXMgbW91bnRlZC4gRGlzcGxheWVkIGRhdGEgbWF5IGJlIHVucmVsaWFibGUuXG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwl9CisKKwlpZiAoZGV2aWNlX2hhbmRsZSE9TlVMTCkKKwkJZmNsb3NlIChkZXZpY2VfaGFuZGxlKTsKKworCWlmICggKGRldmljZV9oYW5kbGU9Zm9wZW4gKG5ld19kZXZpY2UsInJiIikpPT1OVUxMKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIENhbiBub3Qgb3BlbiBkZXZpY2UgJXNcbiIsbmV3X2RldmljZSk7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuOworCX0KKwllbHNlIHsKKwkJc3RyY3B5IChkZXZpY2VfbmFtZSxuZXdfZGV2aWNlKTsKKwkJd3JpdGVfYWNjZXNzPTA7CQkJCS8qIFdyaXRlIGFjY2VzcyBkaXNhYmxlZCAqLworCQljdXJyZW50X3R5cGU9TlVMTDsJCQkvKiBUaGVyZSBpcyBubyB0eXBlIG5vdyAqLworCQlyZW1lbWJlcl9saWZvLmVudHJpZXNfY291bnQ9MDsJCS8qIEVtcHR5IE9iamVjdCBtZW1vcnkgKi8KKwkJZnJlZV91c2VyX2NvbW1hbmRzICgmZXh0Ml9jb21tYW5kcyk7CS8qIEZyZWUgZmlsZXN5c3RlbSBzcGVjaWZpYyBvYmplY3RzICovCisJCWZyZWVfc3RydWN0X2Rlc2NyaXB0b3JzICgpOworCQlpZiAoIXNldF9maWxlX3N5c3RlbV9pbmZvICgpKSB7CQkvKiBFcnJvciB3aGlsZSBnZXR0aW5nIGluZm8gLS0+IGFib3J0ICovCisJCQlmcmVlX3VzZXJfY29tbWFuZHMgKCZleHQyX2NvbW1hbmRzKTsKKwkJCWZyZWVfc3RydWN0X2Rlc2NyaXB0b3JzICgpOworCQkJZmNsb3NlIChkZXZpY2VfaGFuZGxlKTsKKwkJCWRldmljZV9oYW5kbGU9TlVMTDsJCS8qIE5vdGljZSB0aGF0IG91ciBkZXZpY2UgaXMgc3RpbGwgbm90IHNldCB1cCAqLworCQkJZGV2aWNlX29mZnNldD0tMTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoKkFsdGVybmF0ZURlc2NyaXB0b3JzKQkJLyogQ2hlY2sgaWYgdXNlciBkZWZpbmVkIG9iamVjdHMgZXhpc3QgKi8KKwkJCXNldF9zdHJ1Y3RfZGVzY3JpcHRvcnMgKEFsdGVybmF0ZURlc2NyaXB0b3JzKTsKKwkJZGlzcGF0Y2ggKCJzZXRvZmZzZXQgMCIpOworCQlkaXNwYXRjaCAoImhlbHAiKTsJCQkvKiBTaG93IGhlbHAgc2NyZWVuICovCisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJEZXZpY2UgY2hhbmdlZCB0byAlcyIsZGV2aWNlX25hbWUpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJfQorfQorCit2b2lkIHNldF9vZmZzZXQgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgbXVsdD0xOworCWxvbmcgbmV3X29mZnNldDsKKwljaGFyICpwdHIsbmV3X29mZnNldF9idWZmZXIgWzgwXTsKKworCWlmIChkZXZpY2VfaGFuZGxlPT1OVUxMKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE5vIGRldmljZSBvcGVuZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLG5ld19vZmZzZXRfYnVmZmVyKTsKKworCWlmICgqcHRyPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE5vIGFyZ3VtZW50IHNwZWNpZmllZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuOworCX0KKworCXB0cj1wYXJzZV93b3JkIChwdHIsbmV3X29mZnNldF9idWZmZXIpOworCisJaWYgKHN0cmNtcCAobmV3X29mZnNldF9idWZmZXIsImJsb2NrIik9PTApIHsKKwkJbXVsdD1maWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsbmV3X29mZnNldF9idWZmZXIpOworCX0KKworCWlmIChzdHJjbXAgKG5ld19vZmZzZXRfYnVmZmVyLCJ0eXBlIik9PTApIHsKKwkJaWYgKGN1cnJlbnRfdHlwZT09TlVMTCkgeworCQkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTm8gdHlwZSBzZXRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCQlyZXR1cm47CisJCX0KKworCQltdWx0PWN1cnJlbnRfdHlwZS0+bGVuZ3RoOworCQlwdHI9cGFyc2Vfd29yZCAocHRyLG5ld19vZmZzZXRfYnVmZmVyKTsKKwl9CisKKwlpZiAoKm5ld19vZmZzZXRfYnVmZmVyPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE5vIG9mZnNldCBzcGVjaWZpZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobmV3X29mZnNldF9idWZmZXIgWzBdPT0nKycpIHsKKwkJaWYgKGRldmljZV9vZmZzZXQ9PS0xKSB7CisJCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBTZWxlY3QgYSBmaXhlZCBvZmZzZXQgZmlyc3RcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCQlyZXR1cm47CisJCX0KKwkJbmV3X29mZnNldD1kZXZpY2Vfb2Zmc2V0K2F0b2wgKG5ld19vZmZzZXRfYnVmZmVyKzEpKm11bHQ7CisJfQorCisJZWxzZSBpZiAobmV3X29mZnNldF9idWZmZXIgWzBdPT0nLScpIHsKKwkJaWYgKGRldmljZV9vZmZzZXQ9PS0xKSB7CisJCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBTZWxlY3QgYSBmaXhlZCBvZmZzZXQgZmlyc3RcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCQlyZXR1cm47CisJCX0KKwkJbmV3X29mZnNldD1kZXZpY2Vfb2Zmc2V0LWF0b2wgKG5ld19vZmZzZXRfYnVmZmVyKzEpKm11bHQ7CisJCWlmIChuZXdfb2Zmc2V0PDApIG5ld19vZmZzZXQ9MDsKKwl9CisKKwllbHNlCisJCW5ld19vZmZzZXQ9YXRvbCAobmV3X29mZnNldF9idWZmZXIpKm11bHQ7CisKKwlpZiAoIChmc2VlayAoZGV2aWNlX2hhbmRsZSxuZXdfb2Zmc2V0LFNFRUtfU0VUKSk9PS0xKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEZhaWxlZCB0byBzZWVrIHRvIG9mZnNldCAlbGQgaW4gZGV2aWNlICVzXG4iLG5ld19vZmZzZXQsZGV2aWNlX25hbWUpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm47CisJfTsKKwlkZXZpY2Vfb2Zmc2V0PW5ld19vZmZzZXQ7CisJd3ByaW50dyAoY29tbWFuZF93aW4sIkRldmljZSBvZmZzZXQgY2hhbmdlZCB0byAlbGRcbiIsZGV2aWNlX29mZnNldCk7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwlsb2FkX3R5cGVfZGF0YSAoKTsKKwl0eXBlX2RhdGEub2Zmc2V0X2luX2Jsb2NrPTA7Cit9CisKK3ZvaWQgc2V0X2ludChzaG9ydCBsZW4sIHZvaWQgKnB0ciwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCit7CisJY2hhcgkqY2hhcl9wdHI7CisJc2hvcnQJKnNob3J0X3B0cjsKKwlsb25nCSpsb25nX3B0cjsKKwlsb25nCXY7CisJY2hhcgkqdG1wOworCisJdiA9IHN0cnRvbCh2YWx1ZSwgJnRtcCwgMCk7CisJaWYgKCp0bXApIHsKKwkJd3ByaW50dyggY29tbWFuZF93aW4sICJCYWQgdmFsdWUgLSAlc1xuIiwgdmFsdWUpOworCQlyZXR1cm47CisJfQorCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQljaGFyX3B0ciA9IChjaGFyICopIHB0cjsKKwkJKmNoYXJfcHRyID0gdjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlzaG9ydF9wdHIgPSAoc2hvcnQgKikgcHRyOworCQkqc2hvcnRfcHRyID0gdjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlsb25nX3B0ciA9IChsb25nICopIHB0cjsKKwkJKmxvbmdfcHRyID0gdjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sCisJCQkgInNldF9pbnQ6IHVuc3VwcG9ydGVkIGxlbmd0aDogJWRcbiIsIGxlbik7CisJCXJldHVybjsKKwl9CisJd3ByaW50dyAoY29tbWFuZF93aW4sICJWYXJpYWJsZSAlcyBzZXQgdG8gJXNcbiIsCisJCSBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgc2V0X3VpbnQoc2hvcnQgbGVuLCB2b2lkICpwdHIsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIJKmNoYXJfcHRyOworCXVuc2lnbmVkIHNob3J0CSpzaG9ydF9wdHI7CisJdW5zaWduZWQgbG9uZwkqbG9uZ19wdHI7CisJdW5zaWduZWQgbG9uZwl2OworCWNoYXIJCSp0bXA7CisKKwl2ID0gc3RydG91bCh2YWx1ZSwgJnRtcCwgMCk7CisJaWYgKCp0bXApIHsKKwkJd3ByaW50dyggY29tbWFuZF93aW4sICJCYWQgdmFsdWUgLSAlc1xuIiwgdmFsdWUpOworCQlyZXR1cm47CisJfQorCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQljaGFyX3B0ciA9ICh1bnNpZ25lZCBjaGFyICopIHB0cjsKKwkJKmNoYXJfcHRyID0gdjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlzaG9ydF9wdHIgPSAodW5zaWduZWQgc2hvcnQgKikgcHRyOworCQkqc2hvcnRfcHRyID0gdjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlsb25nX3B0ciA9ICh1bnNpZ25lZCBsb25nICopIHB0cjsKKwkJKmxvbmdfcHRyID0gdjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sCisJCQkgInNldF91aW50OiB1bnN1cHBvcnRlZCBsZW5ndGg6ICVkXG4iLCBsZW4pOworCQlyZXR1cm47CisJfQorCXdwcmludHcgKGNvbW1hbmRfd2luLCAiVmFyaWFibGUgJXMgc2V0IHRvICVzXG4iLAorCQkgbmFtZSwgdmFsdWUpOworfQorCit2b2lkIHNldF9jaGFyKHNob3J0IGxlbiwgdm9pZCAqcHRyLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoc3RybGVuKHZhbHVlKSsxID4gbGVuKSB7CisJCXdwcmludHcoIGNvbW1hbmRfd2luLCAiVmFsdWUgJXMgdG9vIGJpZyBmb3IgZmllbGRcbiIsCisJCQluYW1lLCBsZW4pOworCQlyZXR1cm47CisJfQorCW1lbXNldChwdHIsIDAsIGxlbik7CisJc3RyY3B5KChjaGFyICopIHB0ciwgdmFsdWUpOworCXdwcmludHcgKGNvbW1hbmRfd2luLCAiVmFyaWFibGUgJXMgc2V0IHRvICVzXG4iLAorCQkgbmFtZSwgdmFsdWUpOworfQorCisKK3ZvaWQgc2V0IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwl1bnNpZ25lZCBzaG9ydCAqaW50X3B0cjsKKwl1bnNpZ25lZCBjaGFyICpjaGFyX3B0cjsKKwl1bnNpZ25lZCBsb25nICpsb25nX3B0cixvZmZzZXQ9MDsKKwlpbnQgaSxsZW4sIGZvdW5kPTA7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdLHZhcmlhYmxlIFs4MF0sdmFsdWUgWzgwXTsKKworCWlmIChkZXZpY2VfaGFuZGxlPT1OVUxMKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE5vIGRldmljZSBvcGVuZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY3VycmVudF90eXBlPT1OVUxMKSB7CisJCWhleF9zZXQgKGNvbW1hbmRfbGluZSk7CisJCXJldHVybjsKKwl9CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKHB0cj09TlVMTCB8fCAqcHRyPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE1pc3NpbmcgYXJndW1lbnRzXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm47CisJfQorCXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCXB0cj1zdHJjaHIgKGJ1ZmZlciwnPScpOworCWlmIChwdHI9PU5VTEwpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gQmFkIHN5bnRheFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCXN0cm5jcHkgKHZhcmlhYmxlLGJ1ZmZlcixwdHItYnVmZmVyKTt2YXJpYWJsZSBbcHRyLWJ1ZmZlcl09MDsKKwlzdHJjcHkgKHZhbHVlLCsrcHRyKTsKKworCWlmIChjdXJyZW50X3R5cGU9PU5VTEwpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIlNvcnJ5LCBub3QgeWV0IHN1cHBvcnRlZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCisJZm9yIChpPTA7aTxjdXJyZW50X3R5cGUtPmZpZWxkc19udW0gJiYgIWZvdW5kO2krKykgeworCQlpZiAoc3RyY21wIChjdXJyZW50X3R5cGUtPmZpZWxkX25hbWVzIFtpXSx2YXJpYWJsZSk9PTApIHsKKwkJCWZvdW5kPTE7CisJCQlwdHI9dHlwZV9kYXRhLnUuYnVmZmVyK29mZnNldDsKKwkJCWxlbiA9IGN1cnJlbnRfdHlwZS0+ZmllbGRfbGVuZ3RocyBbaV07CisJCQlzd2l0Y2ggKGN1cnJlbnRfdHlwZS0+ZmllbGRfdHlwZXMgW2ldKSB7CisJCQljYXNlIEZJRUxEX1RZUEVfSU5UOgorCQkJCXNldF9pbnQobGVuLCBwdHIsIHZhcmlhYmxlLCB2YWx1ZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEZJRUxEX1RZUEVfVUlOVDoKKwkJCQlzZXRfdWludChsZW4sIHB0ciwgdmFyaWFibGUsIHZhbHVlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRklFTERfVFlQRV9DSEFSOgorCQkJCXNldF9jaGFyKGxlbiwgcHRyLCB2YXJpYWJsZSwgdmFsdWUpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl3cHJpbnR3IChjb21tYW5kX3dpbiwKKwkJCQkJICJzZXQ6IHVuaGFuZGxlZCB0eXBlICVkXG4iLAorCQkJCQkgY3VycmVudF90eXBlLT5maWVsZF90eXBlcyBbaV0pOworCQkJCWJyZWFrOworCQkJfQorCQkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJfQorCQlvZmZzZXQrPWN1cnJlbnRfdHlwZS0+ZmllbGRfbGVuZ3RocyBbaV07CisJfQorCWlmIChmb3VuZCkKKwkJZGlzcGF0Y2ggKCJzaG93Iik7CisJZWxzZSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIFZhcmlhYmxlICVzIG5vdCBmb3VuZFxuIix2YXJpYWJsZSk7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJfQorfQorCit2b2lkIGhleF9zZXQgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCXVuc2lnbmVkIGNoYXIgdG1wOworCWNoYXIgKnB0cixidWZmZXIgWzgwXSwqY2hfcHRyOworCWludCBtb2RlPUhFWDsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0cj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBBcmd1bWVudCBub3Qgc3BlY2lmaWVkXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisKKwlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisKKwlpZiAoc3RyY2FzZWNtcCAoYnVmZmVyLCJ0ZXh0Iik9PTApIHsKKwkJbW9kZT1URVhUOworCQlzdHJjcHkgKGJ1ZmZlcixwdHIpOworCX0KKworCWVsc2UgaWYgKHN0cmNhc2VjbXAgKGJ1ZmZlciwiaGV4Iik9PTApIHsKKwkJbW9kZT1IRVg7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwl9CisKKwlpZiAoKmJ1ZmZlcj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBEYXRhIG5vdCBzcGVjaWZpZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuOworCX0KKworCWlmIChtb2RlPT1IRVgpIHsKKwkJZG8geworCQkJdG1wPSh1bnNpZ25lZCBjaGFyKSBzdHJ0b2wgKGJ1ZmZlcixOVUxMLDE2KTsKKwkJCXR5cGVfZGF0YS51LmJ1ZmZlciBbdHlwZV9kYXRhLm9mZnNldF9pbl9ibG9ja109dG1wOworCQkJdHlwZV9kYXRhLm9mZnNldF9pbl9ibG9jaysrOworCQkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQkJaWYgKHR5cGVfZGF0YS5vZmZzZXRfaW5fYmxvY2s9PWZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSkgeworCQkJCWlmICgqcHRyKSB7CisJCQkJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEVuZGluZyBvZmZzZXQgb3V0c2lkZSBibG9jaywgb25seSBwYXJ0aWFsIHN0cmluZyBjaGFuZ2VkXG4iKTsKKwkJCQkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJCQl9CisJCQkJdHlwZV9kYXRhLm9mZnNldF9pbl9ibG9jay0tOworCQkJfQorCQl9IHdoaWxlICgqYnVmZmVyKSA7CisJfQorCisJZWxzZSB7CisJCWNoX3B0cj1idWZmZXI7CisJCXdoaWxlICgqY2hfcHRyKSB7CisJCQl0bXA9KHVuc2lnbmVkIGNoYXIpICpjaF9wdHIrKzsKKwkJCXR5cGVfZGF0YS51LmJ1ZmZlciBbdHlwZV9kYXRhLm9mZnNldF9pbl9ibG9ja109dG1wOworCQkJdHlwZV9kYXRhLm9mZnNldF9pbl9ibG9jaysrOworCQkJaWYgKHR5cGVfZGF0YS5vZmZzZXRfaW5fYmxvY2s9PWZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSkgeworCQkJCWlmICgqY2hfcHRyKSB7CisJCQkJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEVuZGluZyBvZmZzZXQgb3V0c2lkZSBibG9jaywgb25seSBwYXJ0aWFsIHN0cmluZyBjaGFuZ2VkXG4iKTsKKwkJCQkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJCQl9CisJCQkJdHlwZV9kYXRhLm9mZnNldF9pbl9ibG9jay0tOworCQkJfQorCQl9CisJfQorCisJc3RyY3B5IChidWZmZXIsInNob3ciKTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKworCisKK3ZvaWQgc2V0X3R5cGUgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCXN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqZGVzY3JpcHRvcl9wdHI7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdLHRtcF9idWZmZXIgWzgwXTsKKwlzaG9ydCBmb3VuZD0wOworCisJaWYgKCFsb2FkX3R5cGVfZGF0YSAoKSkKKwkJcmV0dXJuOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCisJaWYgKHN0cmNtcCAoYnVmZmVyLCJub25lIik9PTAgfHwgc3RyY21wIChidWZmZXIsImhleCIpPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJEYXRhIHdpbGwgYmUgc2hvd24gYXMgaGV4IGR1bXBcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCWN1cnJlbnRfdHlwZT1OVUxMOworCQlzcHJpbnRmICh0bXBfYnVmZmVyLCJzaG93Iik7ZGlzcGF0Y2ggKHRtcF9idWZmZXIpOworCQlyZXR1cm47CisJfQorCisJZGVzY3JpcHRvcl9wdHI9Zmlyc3RfdHlwZTsKKwl3aGlsZSAoZGVzY3JpcHRvcl9wdHIhPU5VTEwgJiYgIWZvdW5kKSB7CisJCWlmIChzdHJjbXAgKGRlc2NyaXB0b3JfcHRyLT5uYW1lLGJ1ZmZlcik9PTApCisJCQlmb3VuZD0xOworCQllbHNlCisJCQlkZXNjcmlwdG9yX3B0cj1kZXNjcmlwdG9yX3B0ci0+bmV4dDsKKwl9CisJaWYgKGZvdW5kKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJTdHJ1Y3R1cmUgdHlwZSBzZXQgdG8gJXNcbiIsYnVmZmVyKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQljdXJyZW50X3R5cGU9ZGVzY3JpcHRvcl9wdHI7CisJCXNwcmludGYgKHRtcF9idWZmZXIsInNob3ciKTtkaXNwYXRjaCAodG1wX2J1ZmZlcik7CisJfQorCWVsc2UgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSAlcyBpcyBub3QgYSB2YWxpZCB0eXBlXG4iLGJ1ZmZlcik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwl9Cit9CisKK3ZvaWQgc2hvd19pbnQoc2hvcnQgbGVuLCB2b2lkICpwdHIpCit7CisJbG9uZwl0ZW1wOworCWNoYXIJKmZvcm1hdDsKKworCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQl0ZW1wID0gKigoY2hhciAqKSBwdHIpOworCQlmb3JtYXQgPSAiJTNkICgweCUwMngpXG4iOworCQlicmVhazsKKwljYXNlIDI6CisJCXRlbXAgPSAqKChzaG9ydCAqKSBwdHIpOworCQlmb3JtYXQgPSAiJWQgKDB4JXgpXG4iOworCQlicmVhazsKKwljYXNlIDQ6CisJCXRlbXAgPSAqKChsb25nICopIHB0cik7CisJCWZvcm1hdCA9ICIlZFxuIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd3ByaW50dyAoc2hvd19wYWQsICJ1bmltcGxlbWVudGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKwl3cHJpbnR3KHNob3dfcGFkLCBmb3JtYXQsIHRlbXAsIHRlbXApOworfQorCit2b2lkIHNob3dfdWludChzaG9ydCBsZW4sIHZvaWQgKnB0cikKK3sKKwl1bnNpZ25lZCBsb25nCXRlbXA7CisJY2hhcgkJKmZvcm1hdDsKKworCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQl0ZW1wID0gKigodW5zaWduZWQgY2hhciAqKSBwdHIpOworCQl0ZW1wID0gdGVtcCAmIDB4RkY7CisJCWZvcm1hdCA9ICIlM3UgKDB4JTAyeClcbiI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdGVtcCA9ICooKHVuc2lnbmVkIHNob3J0ICopIHB0cik7CisJCXRlbXAgPSB0ZW1wICYgMHhGRkZGOworCQlmb3JtYXQgPSAiJXUgKDB4JXgpXG4iOworCQlicmVhazsKKwljYXNlIDQ6CisJCXRlbXAgPSAodW5zaWduZWQgbG9uZykgKigodW5zaWduZWQgbG9uZyAqKSBwdHIpOworCQlmb3JtYXQgPSAiJXVcbiI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXdwcmludHcgKHNob3dfcGFkLCAidW5pbXBsZW1lbnRlZFxuIik7CisJCXJldHVybjsKKwl9CisJd3ByaW50dyhzaG93X3BhZCwgZm9ybWF0LCB0ZW1wLCB0ZW1wKTsKK30KKwordm9pZCBzaG93X2NoYXIoc2hvcnQgbGVuLCB2b2lkICpwdHIpCit7CisJdW5zaWduZWQgY2hhcgkqY3AgPSAodW5zaWduZWQgY2hhciAqKSBwdHI7CisJdW5zaWduZWQgY2hhcgljaDsKKwlpbnQJCWksajsKKworCXdwcmludHcoc2hvd19wYWQsICJcIiIpOworCisJZm9yIChpPTA7IGkgPCBsZW47IGkrKykgeworCQljaCA9ICpjcCsrOworCQlpZiAoY2ggPT0gMCkgeworCQkJZm9yIChqPWkrMTsgaiA8IGxlbjsgaisrKQorCQkJCWlmIChjcFtqLWldKQorCQkJCQlicmVhazsKKwkJCWlmIChqID09IGxlbikKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoY2ggPiAxMjgpIHsKKwkJCXdwcmludHcoc2hvd19wYWQsICJNLSIpOworCQkJY2ggLT0gMTI4OworCQl9CisJCWlmICgoY2ggPCAzMikgfHwgKGNoID09IDB4N2YpKSB7CisJCQl3cHJpbnR3KHNob3dfcGFkLCAiXiIpOworCQkJY2ggXj0gMHg0MDsgLyogXkAsIF5BLCBeQjsgXj8gZm9yIERFTCAqLworCQl9CisJCXdwcmludHcoc2hvd19wYWQsICIlYyIsIGNoKTsKKwl9CisKKwl3cHJpbnR3KHNob3dfcGFkLCAiXCJcbiIpOworfQorCisKKwordm9pZCBzaG93IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwl1bnNpZ25lZCBpbnQgaSxsLGxlbix0ZW1wX2ludDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldD0wLHRlbXBfbG9uZzsKKwl1bnNpZ25lZCBjaGFyIHRlbXBfY2hhciwqY2hfcHRyOworCXZvaWQgKnB0cjsKKworCWlmIChkZXZpY2VfaGFuZGxlPT1OVUxMKQorCQlyZXR1cm47CisKKwlzaG93X3BhZF9pbmZvLmxpbmU9MDsKKworCWlmIChjdXJyZW50X3R5cGU9PU5VTEwpIHsKKwkJd21vdmUgKHNob3dfcGFkLDAsMCk7CisJCWNoX3B0cj10eXBlX2RhdGEudS5idWZmZXI7CisJCWZvciAobD0wO2w8ZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLzE2O2wrKykgeworCQkJd3ByaW50dyAoc2hvd19wYWQsIiUwOGxkIDogICIsb2Zmc2V0KTsKKwkJCWZvciAoaT0wO2k8MTY7aSsrKSB7CisJCQkJaWYgKHR5cGVfZGF0YS5vZmZzZXRfaW5fYmxvY2s9PW9mZnNldCtpKQorCQkJCQl3YXR0cnNldCAoc2hvd19wYWQsQV9SRVZFUlNFKTsKKworCQkJCWlmIChjaF9wdHIgW2ldPj0nICcgJiYgY2hfcHRyIFtpXTw9J3onKQorCQkJCQl3cHJpbnR3IChzaG93X3BhZCwiJWMiLGNoX3B0ciBbaV0pOworCQkJCWVsc2UKKwkJCQkJd3ByaW50dyAoc2hvd19wYWQsIi4iKTsKKwkJCQlpZiAodHlwZV9kYXRhLm9mZnNldF9pbl9ibG9jaz09b2Zmc2V0K2kpCisJCQkJCXdhdHRyc2V0IChzaG93X3BhZCxBX05PUk1BTCk7CisJCQl9CisJCQl3cHJpbnR3IChzaG93X3BhZCwiICAgIik7CisJCQlmb3IgKGk9MDtpPDE2O2krKykgeworCQkJCWlmICh0eXBlX2RhdGEub2Zmc2V0X2luX2Jsb2NrPT1vZmZzZXQraSkKKwkJCQkJd2F0dHJzZXQgKHNob3dfcGFkLEFfUkVWRVJTRSk7CisKKwkJCQl3cHJpbnR3IChzaG93X3BhZCwiJTAyeCIsY2hfcHRyIFtpXSk7CisKKwkJCQlpZiAodHlwZV9kYXRhLm9mZnNldF9pbl9ibG9jaz09b2Zmc2V0K2kpIHsKKwkJCQkJd2F0dHJzZXQgKHNob3dfcGFkLEFfTk9STUFMKTsKKwkJCQkJc2hvd19wYWRfaW5mby5saW5lPWwtbCAlIHNob3dfcGFkX2luZm8uZGlzcGxheV9saW5lczsKKwkJCQl9CisKKwkJCQl3cHJpbnR3IChzaG93X3BhZCwiICIpOworCQkJfQorCQkJd3ByaW50dyAoc2hvd19wYWQsIlxuIik7CisJCQlvZmZzZXQrPTE2OworCQkJY2hfcHRyKz0xNjsKKwkJfQorCQlzaG93X3BhZF9pbmZvLm1heF9saW5lPWwtMTtzaG93X3BhZF9pbmZvLm1heF9jb2w9Q09MUy0xOworCQlyZWZyZXNoX3Nob3dfcGFkICgpO3Nob3dfaW5mbyAoKTsKKwl9CisJZWxzZSB7CisJCXdtb3ZlIChzaG93X3BhZCwwLDApO2w9MDsKKwkJZm9yIChpPTA7aTxjdXJyZW50X3R5cGUtPmZpZWxkc19udW07aSsrKSB7CisJCQl3cHJpbnR3IChzaG93X3BhZCwiJS0yMHMgPSAiLGN1cnJlbnRfdHlwZS0+ZmllbGRfbmFtZXMgW2ldKTsKKwkJCXB0cj10eXBlX2RhdGEudS5idWZmZXIrb2Zmc2V0OworCQkJbGVuID0gY3VycmVudF90eXBlLT5maWVsZF9sZW5ndGhzW2ldOworCQkJc3dpdGNoIChjdXJyZW50X3R5cGUtPmZpZWxkX3R5cGVzW2ldKSB7CisJCQljYXNlIEZJRUxEX1RZUEVfSU5UOgorCQkJCXNob3dfaW50KGxlbiwgcHRyKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRklFTERfVFlQRV9VSU5UOgorCQkJCXNob3dfdWludChsZW4sIHB0cik7CisJCQkJYnJlYWs7CisJCQljYXNlIEZJRUxEX1RZUEVfQ0hBUjoKKwkJCQlzaG93X2NoYXIobGVuLCBwdHIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl3cHJpbnR3IChzaG93X3BhZCwgInVuaW1wbGVtZW50ZWRcbiIpOworCQkJCWJyZWFrOworCQkJfQorCQkJb2Zmc2V0Kz1sZW47CisJCQlsKys7CisJCX0KKwkJY3VycmVudF90eXBlLT5sZW5ndGg9b2Zmc2V0OworCQlzaG93X3BhZF9pbmZvLm1heF9saW5lPWwtMTsKKwkJcmVmcmVzaF9zaG93X3BhZCAoKTtzaG93X2luZm8gKCk7CisJfQorfQorCit2b2lkIG5leHQgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgb2Zmc2V0PTE7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQlvZmZzZXQqPWF0b2wgKGJ1ZmZlcik7CisJfQorCisJaWYgKGN1cnJlbnRfdHlwZSE9TlVMTCkgeworCQlzcHJpbnRmIChidWZmZXIsInNldG9mZnNldCB0eXBlICslbGQiLG9mZnNldCk7CisJCWRpc3BhdGNoIChidWZmZXIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHR5cGVfZGF0YS5vZmZzZXRfaW5fYmxvY2srb2Zmc2V0IDwgZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplKSB7CisJCXR5cGVfZGF0YS5vZmZzZXRfaW5fYmxvY2srPW9mZnNldDsKKwkJc3ByaW50ZiAoYnVmZmVyLCJzaG93Iik7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJfQorCisJZWxzZSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE9mZnNldCBvdXQgb2YgYmxvY2tcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJfQorfQorCit2b2lkIHByZXYgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgb2Zmc2V0PTE7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQlvZmZzZXQqPWF0b2wgKGJ1ZmZlcik7CisJfQorCisJaWYgKGN1cnJlbnRfdHlwZSE9TlVMTCkgeworCQlzcHJpbnRmIChidWZmZXIsInNldG9mZnNldCB0eXBlIC0lbGQiLG9mZnNldCk7CisJCWRpc3BhdGNoIChidWZmZXIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHR5cGVfZGF0YS5vZmZzZXRfaW5fYmxvY2stb2Zmc2V0ID49IDApIHsKKwkJdHlwZV9kYXRhLm9mZnNldF9pbl9ibG9jay09b2Zmc2V0OworCQlzcHJpbnRmIChidWZmZXIsInNob3ciKTtkaXNwYXRjaCAoYnVmZmVyKTsKKwl9CisKKwllbHNlIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gT2Zmc2V0IG91dCBvZiBibG9ja1xuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwl9Cit9CisKK3ZvaWQgcGdkbiAoY2hhciAqY29tbW5hZF9saW5lKQorCit7CisJc2hvd19wYWRfaW5mby5saW5lKz1zaG93X3BhZF9pbmZvLmRpc3BsYXlfbGluZXM7CisJcmVmcmVzaF9zaG93X3BhZCAoKTtyZWZyZXNoX3Nob3dfd2luICgpOworfQorCit2b2lkIHBndXAgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCXNob3dfcGFkX2luZm8ubGluZS09c2hvd19wYWRfaW5mby5kaXNwbGF5X2xpbmVzOworCXJlZnJlc2hfc2hvd19wYWQgKCk7cmVmcmVzaF9zaG93X3dpbiAoKTsKK30KKwordm9pZCByZWRyYXcgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCXJlZHJhd19hbGwgKCk7CisJZGlzcGF0Y2ggKCJzaG93Iik7Cit9CisKK3ZvaWQgcmVtZW1iZXIgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgZW50cnlfbnVtOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCWlmIChkZXZpY2VfaGFuZGxlPT1OVUxMKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE5vIGRldmljZSBvcGVuZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisKKwlpZiAoKnB0cj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBBcmd1bWVudCBub3Qgc3BlY2lmaWVkXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm47CisJfQorCisJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCisJZW50cnlfbnVtPXJlbWVtYmVyX2xpZm8uZW50cmllc19jb3VudCsrOworCWlmIChlbnRyeV9udW0+UkVNRU1CRVJfQ09VTlQtMSkgeworCQllbnRyeV9udW09MDsKKwkJcmVtZW1iZXJfbGlmby5lbnRyaWVzX2NvdW50LS07CisJfQorCisJcmVtZW1iZXJfbGlmby5vZmZzZXQgW2VudHJ5X251bV09ZGV2aWNlX29mZnNldDsKKwlyZW1lbWJlcl9saWZvLnR5cGUgW2VudHJ5X251bV09Y3VycmVudF90eXBlOworCXN0cmNweSAocmVtZW1iZXJfbGlmby5uYW1lIFtlbnRyeV9udW1dLGJ1ZmZlcik7CisKKwlpZiAoY3VycmVudF90eXBlIT1OVUxMKQorCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiT2JqZWN0ICVzIGluIE9mZnNldCAlbGQgcmVtZW1iZXJlZCBhcyAlc1xuIixjdXJyZW50X3R5cGUtPm5hbWUsZGV2aWNlX29mZnNldCxidWZmZXIpOworCWVsc2UKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIk9mZnNldCAlbGQgcmVtZW1iZXJlZCBhcyAlc1xuIixkZXZpY2Vfb2Zmc2V0LGJ1ZmZlcik7CisKKwlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworfQorCit2b2lkIHJlY2FsbCAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCWxvbmcgZW50cnlfbnVtOworCisJaWYgKGRldmljZV9oYW5kbGU9PU5VTEwpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTm8gZGV2aWNlIG9wZW5lZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuOworCX0KKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKworCWlmICgqcHRyPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEFyZ3VtZW50IG5vdCBzcGVjaWZpZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9CisKKwlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisKKworCWZvciAoZW50cnlfbnVtPXJlbWVtYmVyX2xpZm8uZW50cmllc19jb3VudC0xO2VudHJ5X251bT49MDtlbnRyeV9udW0tLSkgeworCQlpZiAoc3RyY21wIChyZW1lbWJlcl9saWZvLm5hbWUgW2VudHJ5X251bV0sYnVmZmVyKT09MCkKKwkJCWJyZWFrOworCX0KKworCWlmIChlbnRyeV9udW09PS0xKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIENhbiBub3QgcmVjYWxsICVzXG4iLGJ1ZmZlcik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuOworCX0KKworCXNwcmludGYgKGJ1ZmZlciwic2V0b2Zmc2V0ICVsZCIscmVtZW1iZXJfbGlmby5vZmZzZXQgW2VudHJ5X251bV0pO2Rpc3BhdGNoIChidWZmZXIpOworCWlmIChyZW1lbWJlcl9saWZvLnR5cGUgW2VudHJ5X251bV0gIT0gTlVMTCkgeworCQlzcHJpbnRmIChidWZmZXIsInNldHR5cGUgJXMiLHJlbWVtYmVyX2xpZm8udHlwZSBbZW50cnlfbnVtXS0+bmFtZSk7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJfQorCisJZWxzZSB7CisJCXNwcmludGYgKGJ1ZmZlciwic2V0dHlwZSBub25lIik7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJfQorCisJd3ByaW50dyAoY29tbWFuZF93aW4sIk9iamVjdCAlcyBpbiBPZmZzZXQgJWxkIHJlY2FsbGVkXG4iLGN1cnJlbnRfdHlwZS0+bmFtZSxkZXZpY2Vfb2Zmc2V0KTsKKwlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworfQorCit2b2lkIGVuYWJsZV93cml0ZSAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJRklMRSAqZnA7CisKKwlpZiAoZGV2aWNlX2hhbmRsZT09TlVMTCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBObyBkZXZpY2Ugb3BlbmVkXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFBbGxvd0NoYW5nZXMpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIlNvcnJ5LCB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWRcbiIpOworICAgIAkJcmV0dXJuOworICAgIAl9CisKKyAgICAJaWYgKG1vdW50ZWQpIHsKKyAgICAJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEZpbGVzeXN0ZW0gaXMgbW91bnRlZFxuIik7CisJCXJldHVybjsKKyAgICAJfQorCisJaWYgKCAoZnA9Zm9wZW4gKGRldmljZV9uYW1lLCJyK2IiKSk9PU5VTEwpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gQ2FuIG5vdCBvcGVuIGRldmljZSAlcyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZ1xuIixkZXZpY2VfbmFtZSk7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuOworCX0KKwlmY2xvc2UgKGRldmljZV9oYW5kbGUpOworCWRldmljZV9oYW5kbGU9ZnA7d3JpdGVfYWNjZXNzPTE7CisJd3ByaW50dyAoY29tbWFuZF93aW4sIldyaXRlIGFjY2VzcyBlbmFibGVkIC0gQmUgY2FyZWZ1bFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKK30KKwordm9pZCBkaXNhYmxlX3dyaXRlIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlGSUxFICpmcDsKKworCWlmIChkZXZpY2VfaGFuZGxlPT1OVUxMKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE5vIGRldmljZSBvcGVuZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIChmcD1mb3BlbiAoZGV2aWNlX25hbWUsInJiIikpPT1OVUxMKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIENhbiBub3Qgb3BlbiBkZXZpY2UgJXNcbiIsZGV2aWNlX25hbWUpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9CisKKwlmY2xvc2UgKGRldmljZV9oYW5kbGUpOworCWRldmljZV9oYW5kbGU9ZnA7d3JpdGVfYWNjZXNzPTA7CisJd3ByaW50dyAoY29tbWFuZF93aW4sIldyaXRlIGFjY2VzcyBkaXNhYmxlZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKK30KKwordm9pZCB3cml0ZV9kYXRhIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwl3cml0ZV90eXBlX2RhdGEgKCk7Cit9CmRpZmYgLS1naXQgYS9leHQyZWQvZ3JvdXBfY29tLmMgYi9leHQyZWQvZ3JvdXBfY29tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlZDE2ZQotLS0gL2Rldi9udWxsCisrKyBiL2V4dDJlZC9ncm91cF9jb20uYwpAQCAtMCwwICsxLDE4MyBAQAorLyoKKworL3Vzci9zcmMvZXh0MmVkL2dyb3VwX2NvbS5jCisKK0EgcGFydCBvZiB0aGUgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gMiBkaXNrIGVkaXRvci4KKworR2VuZXJhbCB1c2VyIGNvbW1hbmRzCisKK0ZpcnN0IHdyaXR0ZW4gb246IEFwcmlsIDE3IDE5OTUKKworQ29weXJpZ2h0IChDKSAxOTk1IEdhZGkgT3htYW4KKworKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJleHQyZWQuaCIKKwordm9pZCB0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX25leHQgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgZW50cnlfb2Zmc2V0PTE7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCWlmICgqcHRyIT0wKSB7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkJZW50cnlfb2Zmc2V0PWF0b2wgKGJ1ZmZlcik7CisJfQorCisJc3ByaW50ZiAoYnVmZmVyLCJlbnRyeSAlbGQiLGdyb3VwX2luZm8uZ3JvdXBfbnVtK2VudHJ5X29mZnNldCk7CisJZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9CisKK3ZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19wcmV2IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlsb25nIGVudHJ5X29mZnNldD0xOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0ciE9MCkgeworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCWVudHJ5X29mZnNldD1hdG9sIChidWZmZXIpOworCX0KKworCXNwcmludGYgKGJ1ZmZlciwiZW50cnkgJWxkIixncm91cF9pbmZvLmdyb3VwX251bS1lbnRyeV9vZmZzZXQpOworCWRpc3BhdGNoIChidWZmZXIpOworfQorCit2b2lkIHR5cGVfZXh0Ml9ncm91cF9kZXNjX19fZW50cnkgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgZ3JvdXBfbnVtOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0cj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBObyBhcmd1bWVudCBzcGVjaWZpZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuOworCX0KKwlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisKKwlncm91cF9udW09YXRvbCAoYnVmZmVyKTsKKworCWlmIChncm91cF9udW0gPCAwIHx8IGdyb3VwX251bSA+PSBmaWxlX3N5c3RlbV9pbmZvLmdyb3Vwc19jb3VudCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBFbnRyeSBudW1iZXIgb3V0IG9mIGJvdW5kc1xuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCisJZGV2aWNlX29mZnNldD1maWxlX3N5c3RlbV9pbmZvLmZpcnN0X2dyb3VwX2Rlc2Nfb2Zmc2V0K2dyb3VwX251bSpzaXplb2YgKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MpOworCisJc3ByaW50ZiAoYnVmZmVyLCJzZXRvZmZzZXQgJWxkIixkZXZpY2Vfb2Zmc2V0KTtkaXNwYXRjaCAoYnVmZmVyKTsKKwlzdHJjcHkgKGJ1ZmZlciwic2hvdyIpO2Rpc3BhdGNoIChidWZmZXIpOworCWdyb3VwX2luZm8uZ3JvdXBfbnVtPWdyb3VwX251bTsKK30KKworCit2b2lkIHR5cGVfZXh0Ml9ncm91cF9kZXNjX19fZ29jb3B5IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwl1bnNpZ25lZCBsb25nIGNvcHlfbnVtLG9mZnNldDsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHI9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTm8gYXJndW1lbnQgc3BlY2lmaWVkXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCisJY29weV9udW09YXRvbCAoYnVmZmVyKTsKKworCW9mZnNldD1maWxlX3N5c3RlbV9pbmZvLmZpcnN0X2dyb3VwX2Rlc2Nfb2Zmc2V0K2NvcHlfbnVtKmZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2suc19ibG9ja3NfcGVyX2dyb3VwKmZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKworCWlmIChvZmZzZXQgPiBmaWxlX3N5c3RlbV9pbmZvLmZpbGVfc3lzdGVtX3NpemUpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gQ29weSBudW1iZXIgb3V0IG9mIGJvdW5kc1xuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCisJZ3JvdXBfaW5mby5jb3B5X251bT1jb3B5X251bTsKKwlkZXZpY2Vfb2Zmc2V0PW9mZnNldCtncm91cF9pbmZvLmdyb3VwX251bSpzaXplb2YgKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MpOworCisJc3ByaW50ZiAoYnVmZmVyLCJzZXRvZmZzZXQgJWxkIixkZXZpY2Vfb2Zmc2V0KTtkaXNwYXRjaCAoYnVmZmVyKTsKKwlzdHJjcHkgKGJ1ZmZlciwic2hvdyIpO2Rpc3BhdGNoIChidWZmZXIpOworfQorCisKK3ZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19zaG93IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlsb25nIGdyb3VwX251bSx0ZW1wOworCisJdGVtcD0oZGV2aWNlX29mZnNldC1maWxlX3N5c3RlbV9pbmZvLmZpcnN0X2dyb3VwX2Rlc2Nfb2Zmc2V0KSAlIChmaWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfYmxvY2tzX3Blcl9ncm91cCpmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUpOworCWdyb3VwX251bT10ZW1wL3NpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyk7CisKKwlzaG93IChjb21tYW5kX2xpbmUpOworCisJd21vdmUgKHNob3dfd2luLDEsMCk7d3ByaW50dyAoc2hvd193aW4sIlxuIik7d21vdmUgKHNob3dfd2luLDIsMCk7CisJd3ByaW50dyAoc2hvd193aW4sIkdyb3VwICVsZCBvZiAlbGQgIixncm91cF9udW0sZmlsZV9zeXN0ZW1faW5mby5ncm91cHNfY291bnQtMSk7CisJd3ByaW50dyAoc2hvd193aW4sImluIGNvcHkgJWxkICIsZ3JvdXBfaW5mby5jb3B5X251bSk7CisJaWYgKGdyb3VwX2luZm8uY29weV9udW09PTApIHdwcmludHcgKHNob3dfd2luLCIoTWFpbiBjb3B5KSIpOworCXdwcmludHcgKHNob3dfd2luLCJcbiIpO3JlZnJlc2hfc2hvd193aW4gKCk7CisKKwlpZiAoZ3JvdXBfbnVtPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJSZWFjaGVkIGZpcnN0IGdyb3VwIGRlc2NyaXB0b3JcbiIpOworCQl3cmVmcmVzaCAoY29tbWFuZF93aW4pOworCX0KKworCWlmIChncm91cF9udW09PWZpbGVfc3lzdGVtX2luZm8uZ3JvdXBzX2NvdW50LTEpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIlJlYWNoZWQgbGFzdCBncm91cCBkZXNjcmlwdG9yXG4iKTsKKwkJd3JlZnJlc2ggKGNvbW1hbmRfd2luKTsKKwl9Cit9CisKK3ZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19pbm9kZSAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG9uZyBpbm9kZV9vZmZzZXQ7CisJY2hhciBidWZmZXIgWzgwXTsKKworCWlub2RlX29mZnNldD10eXBlX2RhdGEudS50X2V4dDJfZ3JvdXBfZGVzYy5iZ19pbm9kZV90YWJsZTsKKwlzcHJpbnRmIChidWZmZXIsInNldG9mZnNldCBibG9jayAlbGQiLGlub2RlX29mZnNldCk7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJc3ByaW50ZiAoYnVmZmVyLCJzZXR0eXBlIGV4dDJfaW5vZGUiKTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKwordm9pZCB0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX2Jsb2NrYml0bWFwIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlsb25nIGJsb2NrX2JpdG1hcF9vZmZzZXQ7CisJY2hhciBidWZmZXIgWzgwXTsKKworCWJsb2NrX2JpdG1hcF9pbmZvLmVudHJ5X251bT0wOworCWJsb2NrX2JpdG1hcF9pbmZvLmdyb3VwX251bT1ncm91cF9pbmZvLmdyb3VwX251bTsKKworCWJsb2NrX2JpdG1hcF9vZmZzZXQ9dHlwZV9kYXRhLnUudF9leHQyX2dyb3VwX2Rlc2MuYmdfYmxvY2tfYml0bWFwOworCXNwcmludGYgKGJ1ZmZlciwic2V0b2Zmc2V0IGJsb2NrICVsZCIsYmxvY2tfYml0bWFwX29mZnNldCk7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJc3ByaW50ZiAoYnVmZmVyLCJzZXR0eXBlIGJsb2NrX2JpdG1hcCIpO2Rpc3BhdGNoIChidWZmZXIpOworfQorCit2b2lkIHR5cGVfZXh0Ml9ncm91cF9kZXNjX19faW5vZGViaXRtYXAgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgaW5vZGVfYml0bWFwX29mZnNldDsKKwljaGFyIGJ1ZmZlciBbODBdOworCisJaW5vZGVfYml0bWFwX2luZm8uZW50cnlfbnVtPTA7CisJaW5vZGVfYml0bWFwX2luZm8uZ3JvdXBfbnVtPWdyb3VwX2luZm8uZ3JvdXBfbnVtOworCisJaW5vZGVfYml0bWFwX29mZnNldD10eXBlX2RhdGEudS50X2V4dDJfZ3JvdXBfZGVzYy5iZ19pbm9kZV9iaXRtYXA7CisJc3ByaW50ZiAoYnVmZmVyLCJzZXRvZmZzZXQgYmxvY2sgJWxkIixpbm9kZV9iaXRtYXBfb2Zmc2V0KTtkaXNwYXRjaCAoYnVmZmVyKTsKKwlzcHJpbnRmIChidWZmZXIsInNldHR5cGUgaW5vZGVfYml0bWFwIik7ZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9CisKK3ZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19zZXRhY3RpdmVjb3B5IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjIGdkOworCisJZ2Q9dHlwZV9kYXRhLnUudF9leHQyX2dyb3VwX2Rlc2M7CisJZGlzcGF0Y2ggKCJnb2NvcHkgMCIpOworCXR5cGVfZGF0YS51LnRfZXh0Ml9ncm91cF9kZXNjPWdkOworCWRpc3BhdGNoICgic2hvdyIpOworfQpkaWZmIC0tZ2l0IGEvZXh0MmVkL2luaXQuYyBiL2V4dDJlZC9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q5YjUyNgotLS0gL2Rldi9udWxsCisrKyBiL2V4dDJlZC9pbml0LmMKQEAgLTAsMCArMSw2MzMgQEAKKy8qCisKKy91c3Ivc3JjL2V4dDJlZC9pbml0LmMKKworQSBwYXJ0IG9mIHRoZSBleHRlbmRlZCBmaWxlIHN5c3RlbSAyIGRpc2sgZWRpdG9yLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVmFyaW91cyBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpcnN0IHdyaXR0ZW4gb246IEFwcmlsIDkgMTk5NQorCitDb3B5cmlnaHQgKEMpIDE5OTUgR2FkaSBPeG1hbgorCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX1JFQURMSU5FCisjaW5jbHVkZSA8cmVhZGxpbmUuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSAiZXh0MmVkLmgiCisKK2NoYXIgbGluZXNfcyBbODBdLGNvbHNfcyBbODBdOworCit2b2lkIHNpZ25hbF9oYW5kbGVyICh2b2lkKTsKKwordm9pZCBwcmVwYXJlX3RvX2Nsb3NlICh2b2lkKQorCit7CisJY2xvc2Vfd2luZG93cyAoKTsKKwlpZiAoZGV2aWNlX2hhbmRsZSE9TlVMTCkKKwkJZmNsb3NlIChkZXZpY2VfaGFuZGxlKTsKKwlmcmVlX3VzZXJfY29tbWFuZHMgKCZnZW5lcmFsX2NvbW1hbmRzKTsKKwlmcmVlX3VzZXJfY29tbWFuZHMgKCZleHQyX2NvbW1hbmRzKTsKKwlmcmVlX3N0cnVjdF9kZXNjcmlwdG9ycyAoKTsKK30KKworaW50IGluaXQgKHZvaWQpCisKK3sKKwlwcmludGYgKCJJbml0aWFsaXppbmcgLi4uXG4iKTsKKworCWlmICghcHJvY2Vzc19jb25maWd1cmF0aW9uX2ZpbGUgKCkpIHsKKwkJZnByaW50ZiAoc3RkZXJyLCJFcnJvciAtIFVuYWJsZSB0byBjb21wbGV0ZSBjb25maWd1cmF0aW9uLiBRdWl0dGluZy5cbiIpOworCQlyZXR1cm4gKDApOworCX07CisKKwlnZW5lcmFsX2NvbW1hbmRzLmxhc3RfY29tbWFuZD0tMTsJLyogTm8gY29tbWFuZHMgd2hhdHNvZXZlciBtZWFud2hpbGUgKi8KKwlleHQyX2NvbW1hbmRzLmxhc3RfY29tbWFuZD0tMTsKKwlhZGRfZ2VuZXJhbF9jb21tYW5kcyAoKTsJCS8qIEFkZCB0aGUgZ2VuZXJhbCBjb21tYW5kcywgYXZpYWJsZSBhbHdheXMgKi8KKwlkZXZpY2VfaGFuZGxlPU5VTEw7CQkJLyogTm90aWNlIHRoYXQgb3VyIGRldmljZSBpcyBzdGlsbCBub3Qgc2V0IHVwICovCisJZGV2aWNlX29mZnNldD0tMTsKKwljdXJyZW50X3R5cGU9TlVMTDsJCQkvKiBObyBmaWxlc3lzdGVtIHNwZWNpZmljIHR5cGVzIHlldCAqLworCisJcmVtZW1iZXJfbGlmby5lbnRyaWVzX2NvdW50PTA7CQkvKiBPYmplY3QgbWVtb3J5IGlzIGVtcHR5ICovCisKKwlpbml0X3dpbmRvd3MgKCk7CQkJLyogSW5pdGlhbGl6ZSB0aGUgTkNVUlNFUyBpbnRlcmZhY2UgKi8KKwlpbml0X3JlYWRsaW5lICgpOwkJCS8qIEluaXRpYWxpemUgdGhlIFJFQURMSU5FIGludGVyZmFjZSAqLworCWluaXRfc2lnbmFscyAoKTsJCQkvKiBJbml0aWFsaXplIHRoZSBzaWduYWwgaGFuZGxlcnMgKi8KKwl3cml0ZV9hY2Nlc3M9MDsJCQkJLyogV3JpdGUgYWNjZXNzIGRpc2FibGVkICovCisKKwlzdHJjcHkgKGxhc3RfY29tbWFuZF9saW5lLCJoZWxwIik7CS8qIFNob3cgdGhlIGhlbHAgc2NyZWVuIHRvIHRoZSB1c2VyICovCisJZGlzcGF0Y2ggKCJoZWxwIik7CisJcmV0dXJuICgxKTsJCQkJLyogU3VjY2VzcyAqLworfQorCit2b2lkIGFkZF9nZW5lcmFsX2NvbW1hbmRzICh2b2lkKQorCit7CisJYWRkX3VzZXJfY29tbWFuZCAoJmdlbmVyYWxfY29tbWFuZHMsImhlbHAiLCJFWFQyRUQgaGVscCBzeXN0ZW0iLGhlbHApOworCWFkZF91c2VyX2NvbW1hbmQgKCZnZW5lcmFsX2NvbW1hbmRzLCJzZXQiLCJDaGFuZ2VzIGEgdmFyaWFibGUgaW4gdGhlIGN1cnJlbnQgb2JqZWN0IixzZXQpOworCWFkZF91c2VyX2NvbW1hbmQgKCZnZW5lcmFsX2NvbW1hbmRzLCJzZXRkZXZpY2UiLCJTZWxlY3RzIHRoZSBmaWxlc3lzdGVtIGJsb2NrIGRldmljZSAoZS5nLiAvZGV2L2hkYTEpIixzZXRfZGV2aWNlKTsKKwlhZGRfdXNlcl9jb21tYW5kICgmZ2VuZXJhbF9jb21tYW5kcywic2V0b2Zmc2V0IiwiTW92ZXMgYXN5bmNocm9uaWNseSBpbiB0aGUgZmlsZXN5c3RlbSIsc2V0X29mZnNldCk7CisJYWRkX3VzZXJfY29tbWFuZCAoJmdlbmVyYWxfY29tbWFuZHMsInNldHR5cGUiLCJUZWxscyBFWFQyRUQgaG93IHRvIGludGVycGVydCB0aGUgY3VycmVudCBvYmplY3QiLHNldF90eXBlKTsKKwlhZGRfdXNlcl9jb21tYW5kICgmZ2VuZXJhbF9jb21tYW5kcywic2hvdyIsIkRpc3BsYXlzIHRoZSBjdXJyZW50IG9iamVjdCIsc2hvdyk7CisJYWRkX3VzZXJfY29tbWFuZCAoJmdlbmVyYWxfY29tbWFuZHMsInBndXAiLCJTY3JvbGxzIGRhdGEgb25lIHBhZ2UgdXAiLHBndXApOworCWFkZF91c2VyX2NvbW1hbmQgKCZnZW5lcmFsX2NvbW1hbmRzLCJwZ2RuIiwiU2Nyb2xscyBkYXRhIG9uZSBwYWdlIGRvd24iLHBnZG4pOworCWFkZF91c2VyX2NvbW1hbmQgKCZnZW5lcmFsX2NvbW1hbmRzLCJyZWRyYXciLCJSZWRpc3BsYXkgdGhlIHNjcmVlbiIscmVkcmF3KTsKKwlhZGRfdXNlcl9jb21tYW5kICgmZ2VuZXJhbF9jb21tYW5kcywicmVtZW1iZXIiLCJTYXZlcyB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgZGF0YSBpbmZvcm1hdGlvbiIscmVtZW1iZXIpOworCWFkZF91c2VyX2NvbW1hbmQgKCZnZW5lcmFsX2NvbW1hbmRzLCJyZWNhbGwiLCJHZXRzIGJhY2sgdG8gdGhlIHNhdmVkIG9iamVjdCBwb3NpdGlvbiIscmVjYWxsKTsKKwlhZGRfdXNlcl9jb21tYW5kICgmZ2VuZXJhbF9jb21tYW5kcywiZW5hYmxld3JpdGUiLCJFbnRlcnMgUmVhZC9Xcml0ZSBtb2RlIC0gQWxsb3dzIGNoYW5naW5nIHRoZSBmaWxlc3lzdGVtIixlbmFibGVfd3JpdGUpOworCWFkZF91c2VyX2NvbW1hbmQgKCZnZW5lcmFsX2NvbW1hbmRzLCJkaXNhYmxld3JpdGUiLCJFbnRlcnMgcmVhZCBvbmx5IG1vZGUiLGRpc2FibGVfd3JpdGUpOworCWFkZF91c2VyX2NvbW1hbmQgKCZnZW5lcmFsX2NvbW1hbmRzLCJ3cml0ZWRhdGEiLCJXcml0ZSBkYXRhIGJhY2sgdG8gZGlzayIsd3JpdGVfZGF0YSk7CisJYWRkX3VzZXJfY29tbWFuZCAoJmdlbmVyYWxfY29tbWFuZHMsIm5leHQiLCJNb3ZlcyB0byB0aGUgbmV4dCBieXRlIGluIGhleCBtb2RlIixuZXh0KTsKKwlhZGRfdXNlcl9jb21tYW5kICgmZ2VuZXJhbF9jb21tYW5kcywicHJldiIsIk1vdmVzIHRvIHRoZSBwcmV2aW91cyBieXRlIGluIGhleCBtb2RlIixwcmV2KTsKK30KKwordm9pZCBhZGRfZXh0Ml9nZW5lcmFsX2NvbW1hbmRzICh2b2lkKQorCit7CisJYWRkX3VzZXJfY29tbWFuZCAoJmV4dDJfY29tbWFuZHMsInN1cGVyIiwiTW92ZXMgdG8gdGhlIHN1cGVyYmxvY2sgb2YgdGhlIGZpbGVzeXN0ZW0iLHR5cGVfZXh0Ml9fX3N1cGVyKTsKKwlhZGRfdXNlcl9jb21tYW5kICgmZXh0Ml9jb21tYW5kcywiZ3JvdXAiLCJNb3ZlcyB0byB0aGUgZmlyc3QgZ3JvdXAgZGVzY3JpcHRvciIsdHlwZV9leHQyX19fZ3JvdXApOworCWFkZF91c2VyX2NvbW1hbmQgKCZleHQyX2NvbW1hbmRzLCJjZCIsIk1vdmVzIHRvIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIix0eXBlX2V4dDJfX19jZCk7Cit9CisKK2ludCBzZXRfc3RydWN0X2Rlc2NyaXB0b3JzIChjaGFyICpmaWxlX25hbWUpCisKK3sKKwlGSUxFICpmcDsKKwljaGFyIGN1cnJlbnRfbGluZSBbNTAwXSxjdXJyZW50X3dvcmQgWzUwXSwqY2g7CisJY2hhciB2YXJpYWJsZV9uYW1lIFs1MF0sdmFyaWFibGVfdHlwZSBbMjBdOworCXN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqY3VycmVudF9kZXNjcmlwdG9yOworCisJaWYgKCAoZnA9Zm9wZW4gKGZpbGVfbmFtZSwicnQiKSk9PU5VTEwpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRmFpbGVkIHRvIG9wZW4gZGVzY3JpcHRvcnMgZmlsZSAlc1xuIixmaWxlX25hbWUpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOwlyZXR1cm4gKDApOworCX07CisKKwl3aGlsZSAoIWZlb2YgKGZwKSkgeworCQlmZ2V0cyAoY3VycmVudF9saW5lLDUwMCxmcCk7CisJCWlmIChmZW9mIChmcCkpIGJyZWFrOworCQljaD1wYXJzZV93b3JkIChjdXJyZW50X2xpbmUsY3VycmVudF93b3JkKTsKKwkJaWYgKHN0cmNtcCAoY3VycmVudF93b3JkLCJzdHJ1Y3QiKT09MCkgeworCQkJY2g9cGFyc2Vfd29yZCAoY2gsY3VycmVudF93b3JkKTsKKwkJCWN1cnJlbnRfZGVzY3JpcHRvcj1hZGRfbmV3X2Rlc2NyaXB0b3IgKGN1cnJlbnRfd29yZCk7CisKKwkJCXdoaWxlIChzdHJjaHIgKGN1cnJlbnRfbGluZSwneycpPT1OVUxMKSB7CisJCQkJZmdldHMgKGN1cnJlbnRfbGluZSw1MDAsZnApOworCQkJCWlmIChmZW9mIChmcCkpIGJyZWFrOworCQkJfTsKKwkJCWlmIChmZW9mIChmcCkpIGJyZWFrOworCisJCQlmZ2V0cyAoY3VycmVudF9saW5lLDUwMCxmcCk7CisKKwkJCXdoaWxlIChzdHJjaHIgKGN1cnJlbnRfbGluZSwnfScpPT1OVUxMKSB7CisJCQkJd2hpbGUgKHN0cmNociAoY3VycmVudF9saW5lLCc7Jyk9PU5VTEwpIHsKKwkJCQkJZmdldHMgKGN1cnJlbnRfbGluZSw1MDAsZnApOworCQkJCQlpZiAoc3RyY2hyIChjdXJyZW50X2xpbmUsJ30nKSE9TlVMTCkgYnJlYWs7CisJCQkJfTsKKwkJCQlpZiAoc3RyY2hyIChjdXJyZW50X2xpbmUsJ30nKSAhPU5VTEwpIGJyZWFrOworCQkJCWNoPXBhcnNlX3dvcmQgKGN1cnJlbnRfbGluZSx2YXJpYWJsZV90eXBlKTsKKwkJCQljaD1wYXJzZV93b3JkIChjaCx2YXJpYWJsZV9uYW1lKTsKKwkJCQl3aGlsZSAodmFyaWFibGVfbmFtZSBbc3RybGVuICh2YXJpYWJsZV9uYW1lKS0xXSE9JzsnKSB7CisJCQkJCXN0cmNweSAodmFyaWFibGVfdHlwZSx2YXJpYWJsZV9uYW1lKTsKKwkJCQkJY2g9cGFyc2Vfd29yZCAoY2gsdmFyaWFibGVfbmFtZSk7CisJCQkJfTsKKwkJCQl2YXJpYWJsZV9uYW1lIFtzdHJsZW4gKHZhcmlhYmxlX25hbWUpLTFdPTA7CisJCQkJYWRkX25ld192YXJpYWJsZSAoY3VycmVudF9kZXNjcmlwdG9yLHZhcmlhYmxlX3R5cGUsdmFyaWFibGVfbmFtZSk7CisJCQkJZmdldHMgKGN1cnJlbnRfbGluZSw1MDAsZnApOworCQkJfTsKKwkJfTsKKwl9OworCisJZmNsb3NlIChmcCk7CisJcmV0dXJuICgxKTsKK30KKwordm9pZCBmcmVlX3N0cnVjdF9kZXNjcmlwdG9ycyAodm9pZCkKKworeworCXN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqcHRyLCpuZXh0OworCisJcHRyPWZpcnN0X3R5cGU7CisJd2hpbGUgKHB0ciE9TlVMTCkgeworCQluZXh0PXB0ci0+bmV4dDsKKwkJZnJlZV91c2VyX2NvbW1hbmRzICgmcHRyLT50eXBlX2NvbW1hbmRzKTsKKwkJZnJlZSAocHRyKTsKKwkJcHRyPW5leHQ7CisJfQorCWZpcnN0X3R5cGU9bGFzdF90eXBlPWN1cnJlbnRfdHlwZT1OVUxMOworfQorCit2b2lkIGZyZWVfdXNlcl9jb21tYW5kcyAoc3RydWN0IHN0cnVjdF9jb21tYW5kcyAqcHRyKQorCit7CisJaW50IGk7CisKKwlmb3IgKGk9MDtpPD1wdHItPmxhc3RfY29tbWFuZDtpKyspIHsKKwkJZnJlZSAocHRyLT5uYW1lcyBbaV0pOworCQlmcmVlIChwdHItPmRlc2NyaXB0aW9ucyBbaV0pOworCX0KKworCXB0ci0+bGFzdF9jb21tYW5kPS0xOworfQorCitzdHJ1Y3Qgc3RydWN0X2Rlc2NyaXB0b3IgKmFkZF9uZXdfZGVzY3JpcHRvciAoY2hhciAqbmFtZSkKKworeworCXN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqcHRyOworCisJcHRyID0gbWFsbG9jIChzaXplb2YgKHN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvcikpOworCWlmIChwdHIgPT0gTlVMTCkgeworCQlwcmludGYgKCJFcnJvciAtIENhbiBub3QgYWxsb2NhdGUgbWVtb3J5IC0gUXVpdHRpbmdcbiIpOworCQlleGl0ICgxKTsKKwl9CisJbWVtc2V0KHB0ciwgMCwgc2l6ZW9mKHN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvcikpOworCXB0ci0+cHJldiA9IHB0ci0+bmV4dCA9IE5VTEw7CisJc3RyY3B5IChwdHItPm5hbWUsbmFtZSk7CisJcHRyLT5sZW5ndGg9MDsKKwlwdHItPmZpZWxkc19udW09MDsKKwlpZiAoZmlyc3RfdHlwZT09TlVMTCkgeworCQlmaXJzdF90eXBlID0gbGFzdF90eXBlID0gcHRyOworCX0gZWxzZSB7CisJCXB0ci0+cHJldiA9IGxhc3RfdHlwZTsgbGFzdF90eXBlLT5uZXh0ID0gcHRyOyBsYXN0X3R5cGU9cHRyOworCX0KKwlwdHItPnR5cGVfY29tbWFuZHMubGFzdF9jb21tYW5kPS0xOworCWZpbGxfdHlwZV9jb21tYW5kcyAocHRyKTsKKwlyZXR1cm4gKHB0cik7Cit9CisKK3N0cnVjdCB0eXBlX3RhYmxlIHsKKwljaGFyIAkqbmFtZTsKKwlpbnQJZmllbGRfdHlwZTsKKwlpbnQJbGVuOworfTsKKworc3RydWN0IHR5cGVfdGFibGUgdHlwZV90YWJsZVtdID0geworCXsgImxvbmciLCAgIEZJRUxEX1RZUEVfSU5ULAk0IH0sCisJeyAic2hvcnQiLCAgRklFTERfVFlQRV9JTlQsCTIgfSwKKwl7ICJjaGFyIiwgICBGSUVMRF9UWVBFX0NIQVIsCTEgfSwKKwl7ICJfX3UzMiIsICBGSUVMRF9UWVBFX1VJTlQsCTQgfSwKKwl7ICJfX3MzMiIsICBGSUVMRF9UWVBFX0lOVCwJNCB9LAorCXsgIl9fdTE2IiwgIEZJRUxEX1RZUEVfVUlOVCwJMiB9LAorCXsgIl9fczE2IiwgIEZJRUxEX1RZUEVfSU5ULAkyIH0sCisJeyAiX191OCIsICAgRklFTERfVFlQRV9VSU5ULAkxIH0sCisJeyAiX19zOCIsICAgRklFTERfVFlQRV9JTlQsCTEgfSwKKwl7ICAwLCAgICAgICAwLCAgICAgICAgICAgICAgICAgIDAgfQorfTsKKwordm9pZCBhZGRfbmV3X3ZhcmlhYmxlIChzdHJ1Y3Qgc3RydWN0X2Rlc2NyaXB0b3IgKnB0cixjaGFyICp2X3R5cGUsY2hhciAqdl9uYW1lKQorCit7CisJc2hvcnQJbGVuPTE7CisJY2hhcglmaWVsZF90eXBlPUZJRUxEX1RZUEVfSU5UOworCXN0cnVjdCB0eXBlX3RhYmxlICpwOworCisJc3RyY3B5IChwdHItPmZpZWxkX25hbWVzIFtwdHItPmZpZWxkc19udW1dLHZfbmFtZSk7CisJcHRyLT5maWVsZF9wb3NpdGlvbnMgW3B0ci0+ZmllbGRzX251bV09cHRyLT5sZW5ndGg7CisKKwlmb3IgKHAgPSB0eXBlX3RhYmxlOyBwLT5uYW1lOyBwKyspIHsKKwkJaWYgKHN0cmNtcCh2X3R5cGUsIHAtPm5hbWUpID09IDApIHsKKwkJCWxlbiA9IHAtPmxlbjsKKwkJCWZpZWxkX3R5cGUgPSBwLT5maWVsZF90eXBlOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHAtPm5hbWUgPT0gMCkgeworCQlpZiAoc3RybmNtcCh2X3R5cGUsICJjaGFyWyIsIDUpID09IDApIHsKKwkJCWxlbiA9IGF0b2kodl90eXBlKzUpOworCQkJZmllbGRfdHlwZSA9IEZJRUxEX1RZUEVfQ0hBUjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiVW5rbm93biB0eXBlICVzIGZvciBmaWVsZCAlc1xuIiwgdl90eXBlLCB2X25hbWUpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCXB0ci0+ZmllbGRfbGVuZ3RocyBbcHRyLT5maWVsZHNfbnVtXSA9IGxlbjsKKwlwdHItPmZpZWxkX3R5cGVzIFtwdHItPmZpZWxkc19udW1dID0gZmllbGRfdHlwZTsKKworCXB0ci0+bGVuZ3RoKz1sZW47CisJcHRyLT5maWVsZHNfbnVtKys7Cit9CisKK3ZvaWQgZmlsbF90eXBlX2NvbW1hbmRzIChzdHJ1Y3Qgc3RydWN0X2Rlc2NyaXB0b3IgKnB0cikKKworLyoKKworU2V0IHNwZWNpZmljIHR5cGUgdXNlciBjb21tYW5kcy4KKworKi8KKworeworCisJaWYgKHN0cmNtcCAoKHB0ci0+bmFtZSksImZpbGUiKT09MCkgeworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJzaG93IiwiU2hvd3MgZmlsZSBkYXRhIix0eXBlX2ZpbGVfX19zaG93KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiaW5vZGUiLCJSZXR1cm5zIHRvIHRoZSBpbm9kZSBvZiB0aGUgY3VycmVudCBmaWxlIix0eXBlX2ZpbGVfX19pbm9kZSk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImRpc3BsYXkiLCJTcGVjaWZpZXMgZGF0YSBmb3JtYXQgLSB0ZXh0IG9yIGhleCIsdHlwZV9maWxlX19fZGlzcGxheSk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsIm5leHQiLCJQYXNzIHRvIG5leHQgYnl0ZSIsdHlwZV9maWxlX19fbmV4dCk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsInByZXYiLCJQYXNzIHRvIHRoZSBwcmV2aW91cyBieXRlIix0eXBlX2ZpbGVfX19wcmV2KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywib2Zmc2V0IiwiUGFzcyB0byBhIHNwZWNpZmllZCBieXRlIGluIHRoZSBjdXJyZW50IGJsb2NrIix0eXBlX2ZpbGVfX19vZmZzZXQpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJuZXh0YmxvY2siLCJQYXNzIHRvIG5leHQgZmlsZSBibG9jayIsdHlwZV9maWxlX19fbmV4dGJsb2NrKTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywicHJldmJsb2NrIiwiUGFzcyB0byB0aGUgcHJldmlvdXMgZmlsZSBibG9jayIsdHlwZV9maWxlX19fcHJldmJsb2NrKTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiYmxvY2siLCJTcGVjaWZ5IHdoaWNoIGZpbGUgYmxvY2sgdG8gZWRpdCIsdHlwZV9maWxlX19fYmxvY2spOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJyZW1lbWJlciIsIlNhdmVzIHRoZSBmaWxlXCdzIGlub2RlIHBvc2l0aW9uIGZvciBsYXRlciByZWZlcmVuY2UiLHR5cGVfZmlsZV9fX3JlbWVtYmVyKTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywic2V0IiwiU2V0cyB0aGUgY3VycmVudCBieXRlIix0eXBlX2ZpbGVfX19zZXQpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJ3cml0ZWRhdGEiLCJXcml0ZXMgdGhlIGN1cnJlbnQgYmxvY2sgdG8gdGhlIGRpc2siLHR5cGVfZmlsZV9fX3dyaXRlZGF0YSk7CisJfQorCisJaWYgKHN0cmNtcCAoKHB0ci0+bmFtZSksImV4dDJfaW5vZGUiKT09MCkgeworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJzaG93IiwiU2hvd3MgaW5vZGUgZGF0YSIsdHlwZV9leHQyX2lub2RlX19fc2hvdyk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsIm5leHQiLCJNb3ZlIHRvIG5leHQgaW5vZGUgaW4gY3VycmVudCBibG9jayBncm91cCIsdHlwZV9leHQyX2lub2RlX19fbmV4dCk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsInByZXYiLCJNb3ZlIHRvIG5leHQgaW5vZGUgaW4gY3VycmVudCBibG9jayBncm91cCIsdHlwZV9leHQyX2lub2RlX19fcHJldik7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImdyb3VwIiwiTW92ZSB0byB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgb2YgdGhlIGN1cnJlbnQgaW5vZGUgdGFibGUiLHR5cGVfZXh0Ml9pbm9kZV9fX2dyb3VwKTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiZW50cnkiLCJNb3ZlIHRvIGEgc3BlY2lmaWVkIGVudHJ5IGluIHRoZSBjdXJyZW50IGlub2RlIHRhYmxlIix0eXBlX2V4dDJfaW5vZGVfX19lbnRyeSk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImZpbGUiLCJEaXNwbGF5IGZpbGUgZGF0YSBvZiB0aGUgY3VycmVudCBpbm9kZSIsdHlwZV9leHQyX2lub2RlX19fZmlsZSk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImRpciIsIkRpc3BsYXkgZGlyZWN0b3J5IGRhdGEgb2YgdGhlIGN1cnJlbnQgaW5vZGUiLHR5cGVfZXh0Ml9pbm9kZV9fX2Rpcik7CisJfQorCisJaWYgKHN0cmNtcCAoKHB0ci0+bmFtZSksImRpciIpPT0wKSB7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsInNob3ciLCJTaG93cyBjdXJyZW50IGRpcmVjdG9yeSBkYXRhIix0eXBlX2Rpcl9fX3Nob3cpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJpbm9kZSIsIlJldHVybnMgdG8gdGhlIGlub2RlIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSIsdHlwZV9kaXJfX19pbm9kZSk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsIm5leHQiLCJQYXNzIHRvIHRoZSBuZXh0IGRpcmVjdG9yeSBlbnRyeSIsdHlwZV9kaXJfX19uZXh0KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywicHJldiIsIlBhc3MgdG8gdGhlIHByZXZpb3VzIGRpcmVjdG9yeSBlbnRyeSIsdHlwZV9kaXJfX19wcmV2KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiZm9sbG93aW5vZGUiLCJGb2xsb3dzIHRoZSBpbm9kZSBzcGVjaWZpZWQgaW4gdGhpcyBkaXJlY3RvcnkgZW50cnkiLHR5cGVfZGlyX19fZm9sbG93aW5vZGUpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJyZW1lbWJlciIsIlJlbWVtYmVyIHRoZSBpbm9kZSBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnkgZW50cnkiLHR5cGVfZGlyX19fcmVtZW1iZXIpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJjZCIsIkNoYW5nZXMgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSIsdHlwZV9kaXJfX19jZCk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImVudHJ5IiwiTW92ZXMgdG8gYSBzcGVjaWZpZWQgZW50cnkgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5Iix0eXBlX2Rpcl9fX2VudHJ5KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywid3JpdGVkYXRhIiwiV3JpdGVzIHRoZSBjdXJyZW50IGVudHJ5IHRvIHRoZSBkaXNrIix0eXBlX2Rpcl9fX3dyaXRlZGF0YSk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsInNldCIsIkNoYW5nZXMgYSB2YXJpYWJsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgZW50cnkiLHR5cGVfZGlyX19fc2V0KTsKKwl9CisKKwlpZiAoc3RyY21wICgocHRyLT5uYW1lKSwiZXh0Ml9zdXBlcl9ibG9jayIpPT0wKSB7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsInNob3ciLCJEaXNwbGF5cyB0aGUgc3VwZXIgYmxvY2sgZGF0YSIsdHlwZV9leHQyX3N1cGVyX2Jsb2NrX19fc2hvdyk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImdvY29weSIsIk1vdmUgdG8gYW5vdGhlciBiYWNrdXAgY29weSBvZiB0aGUgc3VwZXJibG9jayIsdHlwZV9leHQyX3N1cGVyX2Jsb2NrX19fZ29jb3B5KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywic2V0YWN0aXZlY29weSIsIkNvcGllcyB0aGUgY3VycmVudCBzdXBlcmJsb2NrIHRvIHRoZSBtYWluIHN1cGVyYmxvY2siLHR5cGVfZXh0Ml9zdXBlcl9ibG9ja19fX3NldGFjdGl2ZWNvcHkpOworCX0KKworCWlmIChzdHJjbXAgKChwdHItPm5hbWUpLCJleHQyX2dyb3VwX2Rlc2MiKT09MCkgeworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJuZXh0IiwiUGFzcyB0byB0aGUgbmV4dCBibG9jayBncm91cCBkZWNyaXB0b3IiLHR5cGVfZXh0Ml9ncm91cF9kZXNjX19fbmV4dCk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsInByZXYiLCJQYXNzIHRvIHRoZSBwcmV2aW91cyBncm91cCBkZXNjcmlwdG9yIix0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX3ByZXYpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJlbnRyeSIsIlBhc3MgdG8gYSBzcGVjaWZpYyBncm91cCBkZXNjcmlwdG9yIix0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX2VudHJ5KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywic2hvdyIsIlNob3dzIHRoZSBjdXJyZW50IGdyb3VwIGRlc2NyaXB0b3IiLHR5cGVfZXh0Ml9ncm91cF9kZXNjX19fc2hvdyk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImlub2RlIiwiUGFzcyB0byB0aGUgaW5vZGUgdGFibGUgb2YgdGhlIGN1cnJlbnQgZ3JvdXAgYmxvY2siLHR5cGVfZXh0Ml9ncm91cF9kZXNjX19faW5vZGUpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJnb2NvcHkiLCJNb3ZlIHRvIGFub3RoZXIgYmFja3VwIGNvcHkgb2YgdGhlIGdyb3VwIGRlc2NyaXB0b3IiLHR5cGVfZXh0Ml9ncm91cF9kZXNjX19fZ29jb3B5KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiYmxvY2tiaXRtYXAiLCJTaG93IHRoZSBibG9jayBhbGxvY2F0aW9uIGJpdG1hcCBvZiB0aGUgY3VycmVudCBncm91cCBibG9jayIsdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19ibG9ja2JpdG1hcCk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImlub2RlYml0bWFwIiwiU2hvdyB0aGUgaW5vZGUgYWxsb2NhdGlvbiBiaXRtYXAgb2YgdGhlIGN1cnJlbnQgZ3JvdXAgYmxvY2siLHR5cGVfZXh0Ml9ncm91cF9kZXNjX19faW5vZGViaXRtYXApOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJzZXRhY3RpdmVjb3B5IiwiQ29waWVzIHRoZSBjdXJyZW50IGdyb3VwIGRlc2NyaXB0b3IgdG8gdGhlIG1haW4gdGFibGUiLHR5cGVfZXh0Ml9zdXBlcl9ibG9ja19fX3NldGFjdGl2ZWNvcHkpOworCX0KKworCWlmIChzdHJjbXAgKChwdHItPm5hbWUpLCJibG9ja19iaXRtYXAiKT09MCkgeworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJzaG93IiwiRGlzcGxheXMgdGhlIGJsb2NrIGFsbG9jYXRpb24gYml0bWFwIix0eXBlX2V4dDJfYmxvY2tfYml0bWFwX19fc2hvdyk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImVudHJ5IiwiTW92ZXMgdG8gYSBzcGVjaWZpYyBiaXQiLHR5cGVfZXh0Ml9ibG9ja19iaXRtYXBfX19lbnRyeSk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsIm5leHQiLCJNb3ZlcyB0byB0aGUgbmV4dCBiaXQiLHR5cGVfZXh0Ml9ibG9ja19iaXRtYXBfX19uZXh0KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywicHJldiIsIk1vdmVzIHRvIHRoZSBwcmV2aW91cyBiaXQiLHR5cGVfZXh0Ml9ibG9ja19iaXRtYXBfX19wcmV2KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiYWxsb2NhdGUiLCJBbGxvY2F0ZXMgdGhlIGN1cnJlbnQgYmxvY2siLHR5cGVfZXh0Ml9ibG9ja19iaXRtYXBfX19hbGxvY2F0ZSk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImRlYWxsb2NhdGUiLCJEZWFsbG9jYXRlcyB0aGUgY3VycmVudCBibG9jayIsdHlwZV9leHQyX2Jsb2NrX2JpdG1hcF9fX2RlYWxsb2NhdGUpOworCX0KKworCWlmIChzdHJjbXAgKChwdHItPm5hbWUpLCJpbm9kZV9iaXRtYXAiKT09MCkgeworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJzaG93IiwiRGlzcGxheXMgdGhlIGlub2RlIGFsbG9jYXRpb24gYml0bWFwIix0eXBlX2V4dDJfaW5vZGVfYml0bWFwX19fc2hvdyk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImVudHJ5IiwiTW92ZXMgdG8gYSBzcGVjaWZpYyBiaXQiLHR5cGVfZXh0Ml9pbm9kZV9iaXRtYXBfX19lbnRyeSk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsIm5leHQiLCJNb3ZlcyB0byB0aGUgbmV4dCBiaXQiLHR5cGVfZXh0Ml9pbm9kZV9iaXRtYXBfX19uZXh0KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywicHJldiIsIk1vdmVzIHRvIHRoZSBwcmV2aW91cyBiaXQiLHR5cGVfZXh0Ml9pbm9kZV9iaXRtYXBfX19wcmV2KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiYWxsb2NhdGUiLCJBbGxvY2F0ZXMgdGhlIGN1cnJlbnQgaW5vZGUiLHR5cGVfZXh0Ml9pbm9kZV9iaXRtYXBfX19hbGxvY2F0ZSk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImRlYWxsb2NhdGUiLCJEZWFsbG9jYXRlcyB0aGUgY3VycmVudCBpbm9kZSIsdHlwZV9leHQyX2lub2RlX2JpdG1hcF9fX2RlYWxsb2NhdGUpOworCX0KKworfQorCit2b2lkIGFkZF91c2VyX2NvbW1hbmQgKHN0cnVjdCBzdHJ1Y3RfY29tbWFuZHMgKnB0cixjaGFyICpuYW1lLGNoYXIgKmRlc2NyaXB0aW9uLFBGIGNhbGxiYWNrKQorCit7CisJaW50IG51bTsKKworCW51bT1wdHItPmxhc3RfY29tbWFuZDsKKwlpZiAobnVtKzE9PU1BWF9DT01NQU5EU19OVU0pIHsKKwkJcHJpbnRmICgiSW50ZXJuYWwgRXJyb3IgLSBDYW4ndCBhZGQgY29tbWFuZCAlc1xuIixuYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXB0ci0+bGFzdF9jb21tYW5kPSsrbnVtOworCisJcHRyLT5uYW1lcyBbbnVtXT0oY2hhciAqKSBtYWxsb2MgKHN0cmxlbiAobmFtZSkrMSk7CisJc3RyY3B5IChwdHItPm5hbWVzIFtudW1dLG5hbWUpOworCisJaWYgKCpkZXNjcmlwdGlvbiE9MCkgeworCQlwdHItPmRlc2NyaXB0aW9ucyBbbnVtXT0oY2hhciAqKSBtYWxsb2MgKHN0cmxlbiAoZGVzY3JpcHRpb24pKzEpOworCQlzdHJjcHkgKHB0ci0+ZGVzY3JpcHRpb25zIFtudW1dLGRlc2NyaXB0aW9uKTsKKwl9CisKKwlwdHItPmNhbGxiYWNrIFtudW1dPWNhbGxiYWNrOworfQorCitpbnQgc2V0X2ZpbGVfc3lzdGVtX2luZm8gKHZvaWQpCisKK3sKKwlpbnQgZXh0Ml9kZXRlY3RlZD0wOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYjsKKworCWZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2tfb2Zmc2V0PTEwMjQ7CisJZmlsZV9zeXN0ZW1faW5mby5maWxlX3N5c3RlbV9zaXplPURlZmF1bHRUb3RhbEJsb2NrcypEZWZhdWx0QmxvY2tTaXplOworCisJbG93X3JlYWQgKChjaGFyICopICZmaWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLHNpemVvZiAoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2spLGZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2tfb2Zmc2V0KTsKKworCXNiPSZmaWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrOworCisJaWYgKHNiLT5zX21hZ2ljID09IEVYVDJfU1VQRVJfTUFHSUMpCisJCWV4dDJfZGV0ZWN0ZWQ9MTsKKworCWlmIChleHQyX2RldGVjdGVkKQorCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRGV0ZWN0ZWQgZXh0ZW5kZWQgMiBmaWxlIHN5c3RlbSBvbiBkZXZpY2UgJXNcbiIsZGV2aWNlX25hbWUpOworCWVsc2UKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIldhcm5pbmcgLSBFeHRlbmRlZCAyIGZpbGVzeXN0ZW0gbm90IGRldGVjdGVkIG9uIGRldmljZSAlc1xuIixkZXZpY2VfbmFtZSk7CisKKwlpZiAoIWV4dDJfZGV0ZWN0ZWQgJiYgIUZvcmNlRXh0MikKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIllvdSBtYXkgd2lzaCB0byB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEZvcmNlRXh0MiBvblxuIik7CisKKwlpZiAoRm9yY2VFeHQyICYmICFleHQyX2RldGVjdGVkKQorCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRm9yY2luZyBleHRlbmRlZCAyIGZpbGVzeXN0ZW1cbiIpOworCisJaWYgKEZvcmNlRGVmYXVsdCB8fCAhZXh0Ml9kZXRlY3RlZCkKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkZvcmNpbmcgZGVmYXVsdCBwYXJhbWV0ZXJzXG4iKTsKKworCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisKKwlpZiAoZXh0Ml9kZXRlY3RlZCB8fCBGb3JjZUV4dDIpIHsKKwkJYWRkX2V4dDJfZ2VuZXJhbF9jb21tYW5kcyAoKTsKKwkJaWYgKCFzZXRfc3RydWN0X2Rlc2NyaXB0b3JzIChFeHQyRGVzY3JpcHRvcnMpKQorCQkJcmV0dXJuICgwKTsKKwl9CisKKwlpZiAoIUZvcmNlRGVmYXVsdCAmJiBleHQyX2RldGVjdGVkKSB7CisKKwkJZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplPUVYVDJfTUlOX0JMT0NLX1NJWkUgPDwgc2ItPnNfbG9nX2Jsb2NrX3NpemU7CisJCWlmIChmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUgPT0gRVhUMl9NSU5fQkxPQ0tfU0laRSkKKwkJCWZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQ9MipFWFQyX01JTl9CTE9DS19TSVpFOworCQllbHNlCisJCQlmaWxlX3N5c3RlbV9pbmZvLmZpcnN0X2dyb3VwX2Rlc2Nfb2Zmc2V0PWZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKwkJZmlsZV9zeXN0ZW1faW5mby5ncm91cHNfY291bnQgPSBleHQyZnNfZGl2NjRfY2VpbChleHQyZnNfYmxvY2tzX2NvdW50KHNiKSwKKwkJCQkJCSBzYi0+c19ibG9ja3NfcGVyX2dyb3VwKTsKKworCQlmaWxlX3N5c3RlbV9pbmZvLmlub2Rlc19wZXJfYmxvY2s9ZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplL3NpemVvZiAoc3RydWN0IGV4dDJfaW5vZGUpOworCQlmaWxlX3N5c3RlbV9pbmZvLmJsb2Nrc19wZXJfZ3JvdXA9c2ItPnNfaW5vZGVzX3Blcl9ncm91cC9maWxlX3N5c3RlbV9pbmZvLmlub2Rlc19wZXJfYmxvY2s7CisJCWZpbGVfc3lzdGVtX2luZm8ubm9fYmxvY2tzX2luX2dyb3VwPXNiLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCWZpbGVfc3lzdGVtX2luZm8uZmlsZV9zeXN0ZW1fc2l6ZT0oZXh0MmZzX2Jsb2Nrc19jb3VudChzYiktMSkqZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplOworCX0KKworCWVsc2UgeworCQlmaWxlX3N5c3RlbV9pbmZvLmZpbGVfc3lzdGVtX3NpemU9RGVmYXVsdFRvdGFsQmxvY2tzKkRlZmF1bHRCbG9ja1NpemU7CisJCWZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZT1EZWZhdWx0QmxvY2tTaXplOworCQlmaWxlX3N5c3RlbV9pbmZvLm5vX2Jsb2Nrc19pbl9ncm91cD1EZWZhdWx0QmxvY2tzSW5Hcm91cDsKKwl9CisKKwlpZiAoZmlsZV9zeXN0ZW1faW5mby5maWxlX3N5c3RlbV9zaXplID4gMjE0NzQ4MzY0NykgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiU29ycnksIGZpbGVzeXN0ZW1zIGJpZ2dlciB0aGFuIDIgR0IgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJcmV0dXJuICgxKTsKK30KKwordm9pZCBpbml0X3JlYWRsaW5lICh2b2lkKQorCit7CisjaWZkZWYgSEFWRV9SRUFETElORQorCXJsX2NvbXBsZXRpb25fZW50cnlfZnVuY3Rpb249KEZ1bmN0aW9uICopIGNvbXBsZXRlX2NvbW1hbmQ7CisjZW5kaWYKK30KKwordm9pZCBpbml0X3NpZ25hbHMgKHZvaWQpCisKK3sKKwlzaWduYWwgKFNJR1dJTkNILCBzaWduYWxfU0lHV0lOQ0hfaGFuZGxlcik7CS8qIENhdGNoIFNJR1dJTkNIICovCisJc2lnbmFsIChTSUdURVJNLCBzaWduYWxfU0lHVEVSTV9oYW5kbGVyKTsKKwlzaWduYWwgKFNJR1NFR1YsIHNpZ25hbF9TSUdTRUdWX2hhbmRsZXIpOworCit9CisKK3ZvaWQgc2lnbmFsX1NJR1dJTkNIX2hhbmRsZXIgKGludCBzaWdfbnVtKQorCit7CisJcmVkcmF3X3JlcXVlc3Q9MTsJLyogV2Ugd2lsbCBoYW5kbGUgaXQgaW4gbWFpbi5jICovCisKKwkvKiBSZXNldCBzaWduYWwgaGFuZGxlciAqLworCXNpZ25hbCAoU0lHV0lOQ0gsIHNpZ25hbF9TSUdXSU5DSF9oYW5kbGVyKTsKKworfQorCit2b2lkIHNpZ25hbF9TSUdURVJNX2hhbmRsZXIgKGludCBzaWdfbnVtKQorCit7CisJcHJlcGFyZV90b19jbG9zZSAoKTsKKwlwcmludGYgKCJUZXJtaW5hdGVkIGR1ZSB0byBzaWduYWwgJWRcbiIsc2lnX251bSk7CisJZXhpdCAoMSk7Cit9CisKK3ZvaWQgc2lnbmFsX1NJR1NFR1ZfaGFuZGxlciAoaW50IHNpZ19udW0pCisKK3sKKwlwcmVwYXJlX3RvX2Nsb3NlICgpOworCXByaW50ZiAoIktpbGxlZCBieSBzaWduYWwgJWQhXG4iLHNpZ19udW0pOworCWV4aXQgKDEpOworfQorCitpbnQgcHJvY2Vzc19jb25maWd1cmF0aW9uX2ZpbGUgKHZvaWQpCisKK3sKKwljaGFyIGJ1ZmZlciBbMzAwXTsKKwljaGFyIG9wdGlvbiBbODBdLHZhbHVlIFs4MF07CisJRklMRSAqZnA7CisKKwlzdHJjcHkgKGJ1ZmZlciwgUk9PVF9TWVNDT05GRElSKTsKKwlzdHJjYXQgKGJ1ZmZlciwiL2V4dDJlZC5jb25mIik7CisKKwlpZiAoKGZwPWZvcGVuIChidWZmZXIsInJ0IikpPT1OVUxMKSB7CisJCWZwcmludGYgKHN0ZGVyciwiRXJyb3IgLSBVbmFibGUgdG8gb3BlbiBjb25maWd1cmF0aW9uIGZpbGUgJXNcbiIsYnVmZmVyKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwl3aGlsZSAoZ2V0X25leHRfb3B0aW9uIChmcCxvcHRpb24sdmFsdWUpKSB7CisJCWlmIChzdHJjYXNlY21wIChvcHRpb24sIkV4dDJEZXNjcmlwdG9ycyIpPT0wKSB7CisJCQlzdHJjcHkgKEV4dDJEZXNjcmlwdG9ycyx2YWx1ZSk7CisJCX0KKworCQllbHNlIGlmIChzdHJjYXNlY21wIChvcHRpb24sIkFsdGVybmF0ZURlc2NyaXB0b3JzIik9PTApIHsKKwkJCXN0cmNweSAoQWx0ZXJuYXRlRGVzY3JpcHRvcnMsdmFsdWUpOworCQl9CisKKwkJZWxzZSBpZiAoc3RyY2FzZWNtcCAob3B0aW9uLCJMb2dGaWxlIik9PTApIHsKKwkJCXN0cmNweSAoTG9nRmlsZSx2YWx1ZSk7CisJCX0KKworCQllbHNlIGlmIChzdHJjYXNlY21wIChvcHRpb24sIkxvZ0NoYW5nZXMiKT09MCkgeworCQkJaWYgKHN0cmNhc2VjbXAgKHZhbHVlLCJvbiIpPT0wKQorCQkJCUxvZ0NoYW5nZXMgPSAxOworCQkJZWxzZSBpZiAoc3RyY2FzZWNtcCAodmFsdWUsIm9mZiIpPT0wKQorCQkJCUxvZ0NoYW5nZXMgPSAwOworCQkJZWxzZSB7CisJCQkJZnByaW50ZiAoc3RkZXJyLCJFcnJvciAtIElsbGVnYWwgdmFsdWU6ICVzICVzXG4iLG9wdGlvbix2YWx1ZSk7CisJCQkJZmNsb3NlIChmcCk7cmV0dXJuICgwKTsKKwkJCX0KKwkJfQorCisJCWVsc2UgaWYgKHN0cmNhc2VjbXAgKG9wdGlvbiwiQWxsb3dDaGFuZ2VzIik9PTApIHsKKwkJCWlmIChzdHJjYXNlY21wICh2YWx1ZSwib24iKT09MCkKKwkJCQlBbGxvd0NoYW5nZXMgPSAxOworCQkJZWxzZSBpZiAoc3RyY2FzZWNtcCAodmFsdWUsIm9mZiIpPT0wKQorCQkJCUFsbG93Q2hhbmdlcyA9IDA7CisJCQllbHNlIHsKKwkJCQlmcHJpbnRmIChzdGRlcnIsIkVycm9yIC0gSWxsZWdhbCB2YWx1ZTogJXMgJXNcbiIsb3B0aW9uLHZhbHVlKTsKKwkJCQlmY2xvc2UgKGZwKTtyZXR1cm4gKDApOworCQkJfQorCQl9CisKKwkJZWxzZSBpZiAoc3RyY2FzZWNtcCAob3B0aW9uLCJBbGxvd01vdW50ZWRSZWFkIik9PTApIHsKKwkJCWlmIChzdHJjYXNlY21wICh2YWx1ZSwib24iKT09MCkKKwkJCQlBbGxvd01vdW50ZWRSZWFkID0gMTsKKwkJCWVsc2UgaWYgKHN0cmNhc2VjbXAgKHZhbHVlLCJvZmYiKT09MCkKKwkJCQlBbGxvd01vdW50ZWRSZWFkID0gMDsKKwkJCWVsc2UgeworCQkJCWZwcmludGYgKHN0ZGVyciwiRXJyb3IgLSBJbGxlZ2FsIHZhbHVlOiAlcyAlc1xuIixvcHRpb24sdmFsdWUpOworCQkJCWZjbG9zZSAoZnApO3JldHVybiAoMCk7CisJCQl9CisJCX0KKworCQllbHNlIGlmIChzdHJjYXNlY21wIChvcHRpb24sIkZvcmNlRXh0MiIpPT0wKSB7CisJCQlpZiAoc3RyY2FzZWNtcCAodmFsdWUsIm9uIik9PTApCisJCQkJRm9yY2VFeHQyID0gMTsKKwkJCWVsc2UgaWYgKHN0cmNhc2VjbXAgKHZhbHVlLCJvZmYiKT09MCkKKwkJCQlGb3JjZUV4dDIgPSAwOworCQkJZWxzZSB7CisJCQkJZnByaW50ZiAoc3RkZXJyLCJFcnJvciAtIElsbGVnYWwgdmFsdWU6ICVzICVzXG4iLG9wdGlvbix2YWx1ZSk7CisJCQkJZmNsb3NlIChmcCk7cmV0dXJuICgwKTsKKwkJCX0KKwkJfQorCisJCWVsc2UgaWYgKHN0cmNhc2VjbXAgKG9wdGlvbiwiRGVmYXVsdEJsb2NrU2l6ZSIpPT0wKSB7CisJCQlEZWZhdWx0QmxvY2tTaXplID0gYXRvaSAodmFsdWUpOworCQl9CisKKwkJZWxzZSBpZiAoc3RyY2FzZWNtcCAob3B0aW9uLCJEZWZhdWx0VG90YWxCbG9ja3MiKT09MCkgeworCQkJRGVmYXVsdFRvdGFsQmxvY2tzID0gc3RydG91bCAodmFsdWUsTlVMTCwxMCk7CisJCX0KKworCQllbHNlIGlmIChzdHJjYXNlY21wIChvcHRpb24sIkRlZmF1bHRCbG9ja3NJbkdyb3VwIik9PTApIHsKKwkJCURlZmF1bHRCbG9ja3NJbkdyb3VwID0gc3RydG91bCAodmFsdWUsTlVMTCwxMCk7CisJCX0KKworCQllbHNlIGlmIChzdHJjYXNlY21wIChvcHRpb24sIkZvcmNlRGVmYXVsdCIpPT0wKSB7CisJCQlpZiAoc3RyY2FzZWNtcCAodmFsdWUsIm9uIik9PTApCisJCQkJRm9yY2VEZWZhdWx0ID0gMTsKKwkJCWVsc2UgaWYgKHN0cmNhc2VjbXAgKHZhbHVlLCJvZmYiKT09MCkKKwkJCQlGb3JjZURlZmF1bHQgPSAwOworCQkJZWxzZSB7CisJCQkJZnByaW50ZiAoc3RkZXJyLCJFcnJvciAtIElsbGVnYWwgdmFsdWU6ICVzICVzXG4iLG9wdGlvbix2YWx1ZSk7CisJCQkJZmNsb3NlIChmcCk7cmV0dXJuICgwKTsKKwkJCX0KKwkJfQorCisJCWVsc2UgeworCQkJZnByaW50ZiAoc3RkZXJyLCJFcnJvciAtIFVua25vd24gb3B0aW9uOiAlc1xuIixvcHRpb24pOworCQkJZmNsb3NlIChmcCk7cmV0dXJuICgwKTsKKwkJfQorCX0KKworCXByaW50ZiAoIkNvbmZpZ3VyYXRpb24gY29tcGxldGVkXG4iKTsKKwlmY2xvc2UgKGZwKTsKKwlyZXR1cm4gKDEpOworfQorCitpbnQgZ2V0X25leHRfb3B0aW9uIChGSUxFICpmcCxjaGFyICpvcHRpb24sY2hhciAqdmFsdWUpCisKK3sKKwljaGFyICpwdHI7CisJY2hhciBidWZmZXIgWzYwMF07CisKKwlpZiAoZmVvZiAoZnApKSByZXR1cm4gKDApOworCWRveworCQlpZiAoZmVvZiAoZnApKSByZXR1cm4gKDApOworCQlmZ2V0cyAoYnVmZmVyLDUwMCxmcCk7CisJfSB3aGlsZSAoYnVmZmVyIFswXT09JyMnIHx8IGJ1ZmZlciBbMF09PSdcbicpOworCisJcHRyPXBhcnNlX3dvcmQgKGJ1ZmZlcixvcHRpb24pOworCXB0cj1wYXJzZV93b3JkIChwdHIsdmFsdWUpOworCXJldHVybiAoMSk7Cit9CisKK3ZvaWQgY2hlY2tfbW91bnRlZCAoY2hhciAqbmFtZSkKKworeworCUZJTEUgKmZwOworCWNoYXIgKnB0cjsKKwljaGFyIGN1cnJlbnRfbGluZSBbNTAwXSxjdXJyZW50X3dvcmQgWzIwMF07CisKKwltb3VudGVkPTA7CisKKwlpZiAoIChmcD1mb3BlbiAoIi9ldGMvbXRhYiIsInJ0IikpPT1OVUxMKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEZhaWxlZCB0byBvcGVuIC9ldGMvbXRhYi4gQXNzdW1pbmcgZmlsZXN5c3RlbSBpcyBtb3VudGVkLlxuIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7bW91bnRlZD0xO3JldHVybjsKKwl9OworCisJd2hpbGUgKCFmZW9mIChmcCkpIHsKKwkJZmdldHMgKGN1cnJlbnRfbGluZSw1MDAsZnApOworCQlpZiAoZmVvZiAoZnApKSBicmVhazsKKwkJcHRyPXBhcnNlX3dvcmQgKGN1cnJlbnRfbGluZSxjdXJyZW50X3dvcmQpOworCQlpZiAoc3RyY2FzZWNtcCAoY3VycmVudF93b3JkLG5hbWUpPT0wKSB7CisJCQltb3VudGVkPTE7ZmNsb3NlIChmcCk7cmV0dXJuOworCQl9CisJfTsKKworCWZjbG9zZSAoZnApOworCisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZXh0MmVkL2lub2RlX2NvbS5jIGIvZXh0MmVkL2lub2RlX2NvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkM2RkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9leHQyZWQvaW5vZGVfY29tLmMKQEAgLTAsMCArMSw0MzcgQEAKKy8qCisKKy91c3Ivc3JjL2V4dDJlZC9pbm9kZV9jb20uYworCitBIHBhcnQgb2YgdGhlIGV4dGVuZGVkIGZpbGUgc3lzdGVtIDIgZGlzayBlZGl0b3IuCisKK0NvbW1hbmRzIHJlbGV2YW50IHRvIGV4dDJfaW5vZGUgdHlwZS4KKworRmlyc3Qgd3JpdHRlbiBvbjogQXByaWwgOSAxOTk1CisKK0NvcHlyaWdodCAoQykgMTk5NSBHYWRpIE94bWFuCisKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImV4dDJlZC5oIgorCit2b2lkIHR5cGVfZXh0Ml9pbm9kZV9fX3ByZXYgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJbG9uZyBncm91cF9udW0sZ3JvdXBfb2Zmc2V0LGVudHJ5X251bSxibG9ja19udW0sZmlyc3RfZW50cnksbGFzdF9lbnRyeTsKKwlsb25nIGlub2RlX251bSxtdWx0PTE7CisJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyBkZXNjOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQltdWx0PWF0b2wgKGJ1ZmZlcik7CisJfQorCisJYmxvY2tfbnVtPWRldmljZV9vZmZzZXQvZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplOworCisJZ3JvdXBfbnVtPWlub2RlX29mZnNldF90b19ncm91cF9udW0gKGRldmljZV9vZmZzZXQpOworCWdyb3VwX29mZnNldD1maWxlX3N5c3RlbV9pbmZvLmZpcnN0X2dyb3VwX2Rlc2Nfb2Zmc2V0K2dyb3VwX251bSpzaXplb2YgKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MpOworCisJbG93X3JlYWQgKChjaGFyICopICZkZXNjLHNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyksZ3JvdXBfb2Zmc2V0KTsKKworCWVudHJ5X251bT0oZGV2aWNlX29mZnNldC1kZXNjLmJnX2lub2RlX3RhYmxlKmZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSkvc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9pbm9kZSk7CisKKwlmaXJzdF9lbnRyeT0wO2xhc3RfZW50cnk9ZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9jay5zX2lub2Rlc19wZXJfZ3JvdXAtMTsKKwlpbm9kZV9udW09MDsKKworCWlmIChlbnRyeV9udW0tbXVsdCsxPjApIHsKKwkJZGV2aWNlX29mZnNldC09c2l6ZW9mIChzdHJ1Y3QgZXh0Ml9pbm9kZSkqbXVsdDsKKwkJZW50cnlfbnVtLT1tdWx0OworCisJCXNwcmludGYgKGJ1ZmZlciwic2V0b2Zmc2V0ICVsZCIsZGV2aWNlX29mZnNldCk7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJCXN0cmNweSAoYnVmZmVyLCJzaG93Iik7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJfQorCisJZWxzZSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEVudHJ5IG91dCBvZiBsaW1pdHNcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJfQorCisJaWYgKGVudHJ5X251bT09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiUmVhY2hlZCBmaXJzdCBpbm9kZSBpbiBjdXJyZW50IGdyb3VwIGRlc2NyaXB0b3JcbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCX0KK30KKwordm9pZCB0eXBlX2V4dDJfaW5vZGVfX19uZXh0IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCWxvbmcgZ3JvdXBfbnVtLGdyb3VwX29mZnNldCxlbnRyeV9udW0sYmxvY2tfbnVtLGZpcnN0X2VudHJ5LGxhc3RfZW50cnk7CisJbG9uZyBpbm9kZV9udW0sbXVsdD0xOworCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgZGVzYzsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKworCWlmICgqcHRyIT0wKSB7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkJbXVsdD1hdG9sIChidWZmZXIpOworCX0KKworCisJYmxvY2tfbnVtPWRldmljZV9vZmZzZXQvZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplOworCisJZ3JvdXBfbnVtPWlub2RlX29mZnNldF90b19ncm91cF9udW0gKGRldmljZV9vZmZzZXQpOworCWdyb3VwX29mZnNldD1maWxlX3N5c3RlbV9pbmZvLmZpcnN0X2dyb3VwX2Rlc2Nfb2Zmc2V0K2dyb3VwX251bSpzaXplb2YgKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MpOworCisJbG93X3JlYWQgKChjaGFyICopICZkZXNjLHNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyksZ3JvdXBfb2Zmc2V0KTsKKworCWVudHJ5X251bT0oZGV2aWNlX29mZnNldC1kZXNjLmJnX2lub2RlX3RhYmxlKmZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSkvc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9pbm9kZSk7CisKKwlmaXJzdF9lbnRyeT0wO2xhc3RfZW50cnk9ZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9jay5zX2lub2Rlc19wZXJfZ3JvdXAtMTsKKwlpbm9kZV9udW09MDsKKworCWlmIChlbnRyeV9udW0rbXVsdC0xPGxhc3RfZW50cnkpIHsKKwkJZGV2aWNlX29mZnNldCs9c2l6ZW9mIChzdHJ1Y3QgZXh0Ml9pbm9kZSkqbXVsdDsKKwkJZW50cnlfbnVtKz1tdWx0OworCisJCXNwcmludGYgKGJ1ZmZlciwic2V0b2Zmc2V0ICVsZCIsZGV2aWNlX29mZnNldCk7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJCXN0cmNweSAoYnVmZmVyLCJzaG93Iik7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJfQorCisJZWxzZSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEVudHJ5IG91dCBvZiBsaW1pdHNcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJfQorCisJaWYgKGVudHJ5X251bT09bGFzdF9lbnRyeSkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiUmVhY2hlZCBsYXN0IGlub2RlIGluIGN1cnJlbnQgZ3JvdXAgZGVzY3JpcHRvclxuIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJfQorfQorCisKK3ZvaWQgdHlwZV9leHQyX2lub2RlX19fc2hvdyAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlX3B0cjsKKworCXVuc2lnbmVkIHNob3J0IHRlbXA7CisJaW50IGk7CisKKwlsb25nIGdyb3VwX251bSxncm91cF9vZmZzZXQsZW50cnlfbnVtLGJsb2NrX251bSxmaXJzdF9lbnRyeSxsYXN0X2VudHJ5LGlub2RlX251bTsKKwlzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjIGRlc2M7CisKKwlibG9ja19udW09ZGV2aWNlX29mZnNldC9maWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisKKwlncm91cF9udW09aW5vZGVfb2Zmc2V0X3RvX2dyb3VwX251bSAoZGV2aWNlX29mZnNldCk7CisJZ3JvdXBfb2Zmc2V0PWZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQrZ3JvdXBfbnVtKnNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyk7CisKKwlsb3dfcmVhZCAoKGNoYXIgKikgJmRlc2Msc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKSxncm91cF9vZmZzZXQpOworCisJZW50cnlfbnVtPShkZXZpY2Vfb2Zmc2V0LWRlc2MuYmdfaW5vZGVfdGFibGUqZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplKS9zaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKTsKKwlmaXJzdF9lbnRyeT0wO2xhc3RfZW50cnk9ZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9jay5zX2lub2Rlc19wZXJfZ3JvdXAtMTsKKwlpbm9kZV9udW09Z3JvdXBfbnVtKmZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2suc19pbm9kZXNfcGVyX2dyb3VwKzE7CisJaW5vZGVfbnVtKz1lbnRyeV9udW07CisKKwlpbm9kZV9wdHI9JnR5cGVfZGF0YS51LnRfZXh0Ml9pbm9kZTsKKworCXNob3cgKGNvbW1hbmRfbGluZSk7CisKKwl3bW92ZSAoc2hvd19wYWQsMCw0MCk7d3ByaW50dyAoc2hvd19wYWQsIm9jdGFsID0gJTA2byAiLGlub2RlX3B0ci0+aV9tb2RlKTsKKwlmb3IgKGk9NjtpPj0wO2ktPTMpIHsKKwkJdGVtcD1pbm9kZV9wdHItPmlfbW9kZSAmIDB4MWZmOworCQl0ZW1wPXRlbXAgPj4gaTsKKwkJaWYgKHRlbXAgJiA0KQorCQkJd3ByaW50dyAoc2hvd19wYWQsInIiKTsKKwkJZWxzZQorCQkJd3ByaW50dyAoc2hvd19wYWQsIi0iKTsKKworCQlpZiAodGVtcCAmIDIpCisJCQl3cHJpbnR3IChzaG93X3BhZCwidyIpOworCQllbHNlCisJCQl3cHJpbnR3IChzaG93X3BhZCwiLSIpOworCisJCWlmICh0ZW1wICYgMSkKKwkJCXdwcmludHcgKHNob3dfcGFkLCJ4Iik7CisJCWVsc2UKKwkJCXdwcmludHcgKHNob3dfcGFkLCItIik7CisJfQorCXdtb3ZlIChzaG93X3BhZCwzLDQwKTt3cHJpbnR3IChzaG93X3BhZCwiJXMiLGN0aW1lICgodGltZV90ICopICZ0eXBlX2RhdGEudS50X2V4dDJfaW5vZGUuaV9hdGltZSkpOworCXdtb3ZlIChzaG93X3BhZCw0LDQwKTt3cHJpbnR3IChzaG93X3BhZCwiJXMiLGN0aW1lICgodGltZV90ICopICZ0eXBlX2RhdGEudS50X2V4dDJfaW5vZGUuaV9jdGltZSkpOworCXdtb3ZlIChzaG93X3BhZCw1LDQwKTt3cHJpbnR3IChzaG93X3BhZCwiJXMiLGN0aW1lICgodGltZV90ICopICZ0eXBlX2RhdGEudS50X2V4dDJfaW5vZGUuaV9tdGltZSkpOworCXdtb3ZlIChzaG93X3BhZCw2LDQwKTt3cHJpbnR3IChzaG93X3BhZCwiJXMiLGN0aW1lICgodGltZV90ICopICZ0eXBlX2RhdGEudS50X2V4dDJfaW5vZGUuaV9kdGltZSkpOworCisJd21vdmUgKHNob3dfcGFkLDEwLDQwKTsKKwl0ZW1wPWlub2RlX3B0ci0+aV9mbGFnczsKKworCWlmICh0ZW1wICYgRVhUMl9TRUNSTV9GTCkKKwkJd3ByaW50dyAoc2hvd19wYWQsInMiKTsKKwllbHNlCisJCXdwcmludHcgKHNob3dfcGFkLCItIik7CisKKworCWlmICh0ZW1wICYgRVhUMl9VTlJNX0ZMKQorCQl3cHJpbnR3IChzaG93X3BhZCwidSIpOworCWVsc2UKKwkJd3ByaW50dyAoc2hvd19wYWQsIi0iKTsKKworCWlmICh0ZW1wICYgRVhUMl9DT01QUl9GTCkKKwkJd3ByaW50dyAoc2hvd19wYWQsImMiKTsKKwllbHNlCisJCXdwcmludHcgKHNob3dfcGFkLCItIik7CisKKwlpZiAodGVtcCAmIEVYVDJfU1lOQ19GTCkKKwkJd3ByaW50dyAoc2hvd19wYWQsIlMiKTsKKwllbHNlCisJCXdwcmludHcgKHNob3dfcGFkLCItIik7CisKKwlpZiAodGVtcCAmIEVYVDJfSU1NVVRBQkxFX0ZMKQorCQl3cHJpbnR3IChzaG93X3BhZCwiaSIpOworCWVsc2UKKwkJd3ByaW50dyAoc2hvd19wYWQsIi0iKTsKKworCWlmICh0ZW1wICYgRVhUMl9BUFBFTkRfRkwpCisJCXdwcmludHcgKHNob3dfcGFkLCJhIik7CisJZWxzZQorCQl3cHJpbnR3IChzaG93X3BhZCwiLSIpOworCisJaWYgKHRlbXAgJiBFWFQyX05PRFVNUF9GTCkKKwkJd3ByaW50dyAoc2hvd19wYWQsImQiKTsKKwllbHNlCisJCXdwcmludHcgKHNob3dfcGFkLCItIik7CisKKwlyZWZyZXNoX3Nob3dfcGFkICgpOworCisJd21vdmUgKHNob3dfd2luLDEsMCk7CisKKwl3cHJpbnR3IChzaG93X3dpbiwiSW5vZGUgJWxkIG9mICVsZC4gRW50cnkgJWxkIG9mICVsZCBpbiBncm91cCBkZXNjcmlwdG9yICVsZC5cbiIKKwkJLGlub2RlX251bSxmaWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfaW5vZGVzX2NvdW50LGVudHJ5X251bSxsYXN0X2VudHJ5LGdyb3VwX251bSk7CisKKwl3cHJpbnR3IChzaG93X3dpbiwiSW5vZGUgdHlwZTogIik7CisKKwlpZiAoaW5vZGVfbnVtIDwgRVhUMl9HT09EX09MRF9GSVJTVF9JTk8pIHsKKwkJc3dpdGNoIChpbm9kZV9udW0pIHsKKwkJCWNhc2UgRVhUMl9CQURfSU5POgorCQkJCXdwcmludHcgKHNob3dfd2luLCJCYWQgYmxvY2tzIGlub2RlIC0gIik7CisJCQkJYnJlYWs7CisJCQljYXNlIEVYVDJfUk9PVF9JTk86CisJCQkJd3ByaW50dyAoc2hvd193aW4sIlJvb3QgaW5vZGUgLSAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhUNF9VU1JfUVVPVEFfSU5POgorCQkJCXdwcmludHcgKHNob3dfd2luLCJVc2VyIHF1b3RhIGlub2RlIC0gIik7CisJCQkJYnJlYWs7CisJCQljYXNlIEVYVDRfR1JQX1FVT1RBX0lOTzoKKwkJCQl3cHJpbnR3IChzaG93X3dpbiwiR3JvdXAgcXVvdGEgaW5vZGUgLSAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhUMl9CT09UX0xPQURFUl9JTk86CisJCQkJd3ByaW50dyAoc2hvd193aW4sIkJvb3QgbG9hZGVyIGlub2RlIC0gIik7CisJCQkJYnJlYWs7CisJCQljYXNlIEVYVDJfVU5ERUxfRElSX0lOTzoKKwkJCQl3cHJpbnR3IChzaG93X3dpbiwiVW5kZWxldGUgZGlyZWN0b3J5IGlub2RlIC0gIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXdwcmludHcgKHNob3dfd2luLCJSZXNlcnZlZCBpbm9kZSAtICIpOworCQkJCWJyZWFrOworCQl9CisJfQorCWlmICh0eXBlX2RhdGEudS50X2V4dDJfaW5vZGUuaV9tb2RlPT0wKQorCQl3cHJpbnR3IChzaG93X3dpbiwiRnJlZS4gICAgICAgICAgICAiKTsKKworCWlmIChTX0lTUkVHICh0eXBlX2RhdGEudS50X2V4dDJfaW5vZGUuaV9tb2RlKSkKKwkJd3ByaW50dyAoc2hvd193aW4sIkZpbGUuICAgICAgICAgICAgIik7CisKKwlpZiAoU19JU0RJUiAodHlwZV9kYXRhLnUudF9leHQyX2lub2RlLmlfbW9kZSkpCisJCXdwcmludHcgKHNob3dfd2luLCJEaXJlY3RvcnkuICAgICAgICIpOworCisJaWYgKFNfSVNMTksgKHR5cGVfZGF0YS51LnRfZXh0Ml9pbm9kZS5pX21vZGUpKSB7CisJCXdwcmludHcgKHNob3dfd2luLCJTeW1ib2xpYyBsaW5rLiAgICIpOworCQl3bW92ZSAoc2hvd19wYWQsMTIsNDApOworCisJCWlmIChpbm9kZV9wdHItPmlfc2l6ZSA8PSA2MCkKKwkJCXdwcmludHcgKHNob3dfcGFkLCItPiAlcyIsKGNoYXIgKikgJnR5cGVfZGF0YS51LnRfZXh0Ml9pbm9kZS5pX2Jsb2NrIFswXSk7CisJCWVsc2UKKwkJCXdwcmludHcgKHNob3dfcGFkLCJTbG93IHN5bWJvbGljIGxpbmtcbiIpOworCQlyZWZyZXNoX3Nob3dfcGFkICgpOworCX0KKworCWlmIChTX0lTQ0hSICh0eXBlX2RhdGEudS50X2V4dDJfaW5vZGUuaV9tb2RlKSkKKwkJd3ByaW50dyAoc2hvd193aW4sIkNoYXJhY3RlciBkZXZpY2UuIik7CisKKwlpZiAoU19JU0JMSyAodHlwZV9kYXRhLnUudF9leHQyX2lub2RlLmlfbW9kZSkpCisJCXdwcmludHcgKHNob3dfd2luLCJCbG9jayBkZXZpY2UuICAgICIpOworCisJd3ByaW50dyAoc2hvd193aW4sIlxuIik7cmVmcmVzaF9zaG93X3dpbiAoKTsKKworCWlmIChlbnRyeV9udW09PWxhc3RfZW50cnkpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIlJlYWNoZWQgbGFzdCBpbm9kZSBpbiBjdXJyZW50IGdyb3VwIGRlc2NyaXB0b3JcbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCX0KKworCWlmIChlbnRyeV9udW09PWZpcnN0X2VudHJ5KSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJSZWFjaGVkIGZpcnN0IGlub2RlIGluIGN1cnJlbnQgZ3JvdXAgZGVzY3JpcHRvclxuIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJfQorCit9CisKK3ZvaWQgdHlwZV9leHQyX2lub2RlX19fZW50cnkgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCWxvbmcgZ3JvdXBfbnVtLGdyb3VwX29mZnNldCxlbnRyeV9udW0sYmxvY2tfbnVtLHdhbnRlZF9lbnRyeTsKKwlzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjIGRlc2M7CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHI9PTApIHJldHVybjsKKwlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJd2FudGVkX2VudHJ5PWF0b2wgKGJ1ZmZlcik7CisKKwlibG9ja19udW09ZGV2aWNlX29mZnNldC9maWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisKKwlncm91cF9udW09aW5vZGVfb2Zmc2V0X3RvX2dyb3VwX251bSAoZGV2aWNlX29mZnNldCk7CisJZ3JvdXBfb2Zmc2V0PWZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQrZ3JvdXBfbnVtKnNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyk7CisKKwlsb3dfcmVhZCAoKGNoYXIgKikgJmRlc2Msc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKSxncm91cF9vZmZzZXQpOworCisJZW50cnlfbnVtPShkZXZpY2Vfb2Zmc2V0LWRlc2MuYmdfaW5vZGVfdGFibGUqZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplKS9zaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKTsKKworCWlmICh3YW50ZWRfZW50cnkgPiBlbnRyeV9udW0pIHsKKwkJc3ByaW50ZiAoYnVmZmVyLCJuZXh0ICVsZCIsd2FudGVkX2VudHJ5LWVudHJ5X251bSk7CisJCWRpc3BhdGNoIChidWZmZXIpOworCX0KKworCWVsc2UgaWYgKHdhbnRlZF9lbnRyeSA8IGVudHJ5X251bSkgeworCQlzcHJpbnRmIChidWZmZXIsInByZXYgJWxkIixlbnRyeV9udW0td2FudGVkX2VudHJ5KTsKKwkJZGlzcGF0Y2ggKGJ1ZmZlcik7CisJfQorfQorCit2b2lkIHR5cGVfZXh0Ml9pbm9kZV9fX2dyb3VwIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwljaGFyIGJ1ZmZlciBbODBdOworCisJbG9uZyBncm91cF9udW0sZ3JvdXBfb2Zmc2V0OworCisJZ3JvdXBfbnVtPWlub2RlX29mZnNldF90b19ncm91cF9udW0gKGRldmljZV9vZmZzZXQpOworCWdyb3VwX29mZnNldD1maWxlX3N5c3RlbV9pbmZvLmZpcnN0X2dyb3VwX2Rlc2Nfb2Zmc2V0K2dyb3VwX251bSpzaXplb2YgKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MpOworCisJc3ByaW50ZiAoYnVmZmVyLCJzZXRvZmZzZXQgJWxkIixncm91cF9vZmZzZXQpO2Rpc3BhdGNoIChidWZmZXIpOworCXNwcmludGYgKGJ1ZmZlciwic2V0dHlwZSBleHQyX2dyb3VwX2Rlc2MiKTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKwordm9pZCB0eXBlX2V4dDJfaW5vZGVfX19maWxlIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwljaGFyIGJ1ZmZlciBbODBdOworCisJaWYgKCFTX0lTUkVHICh0eXBlX2RhdGEudS50X2V4dDJfaW5vZGUuaV9tb2RlKSkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBJbm9kZSB0eXBlIGlzIG5vdCBmaWxlXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFpbml0X2ZpbGVfaW5mbyAoKSkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBVbmFibGUgdG8gc2hvdyBmaWxlXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm47CisJfQorCisJc3ByaW50ZiAoYnVmZmVyLCJzZXR0eXBlIGZpbGUiKTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKwordm9pZCB0eXBlX2V4dDJfaW5vZGVfX19kaXIgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWNoYXIgYnVmZmVyIFs4MF07CisKKwlpZiAoIVNfSVNESVIgKHR5cGVfZGF0YS51LnRfZXh0Ml9pbm9kZS5pX21vZGUpKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIElub2RlIHR5cGUgaXMgbm90IGRpcmVjdG9yeVxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuOworCX0KKworLyogSXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gaW5pdCBmaXJzdF9maWxlX2luZm8gZmlyc3QsIGFzIHNlYXJjaF9kaXJfZW50cmllcyByZWxpZXMgb24gaXQgKi8KKworCWlmICghaW5pdF9kaXJfaW5mbyAoJmZpcnN0X2ZpbGVfaW5mbykpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gVW5hYmxlIHRvIHNob3cgZGlyZWN0b3J5XG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm47CisJfQorCisJZmlsZV9pbmZvPWZpcnN0X2ZpbGVfaW5mbzsKKworCXNwcmludGYgKGJ1ZmZlciwic2V0dHlwZSBkaXIiKTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKworbG9uZyBpbm9kZV9vZmZzZXRfdG9fZ3JvdXBfbnVtIChsb25nIGlub2RlX29mZnNldCkKKworeworCWludCBmb3VuZD0wOworCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgZGVzYzsKKworCWxvbmcgYmxvY2tfbnVtLGdyb3VwX29mZnNldCxncm91cF9udW07CisKKwlibG9ja19udW09aW5vZGVfb2Zmc2V0L2ZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKworCWdyb3VwX29mZnNldD1maWxlX3N5c3RlbV9pbmZvLmZpcnN0X2dyb3VwX2Rlc2Nfb2Zmc2V0OworCWdyb3VwX251bT0oZ3JvdXBfb2Zmc2V0LWZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQpL3NpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyk7CisKKwl3aGlsZSAoIWZvdW5kICYmIGdyb3VwX251bT49MCAmJiBncm91cF9udW08ZmlsZV9zeXN0ZW1faW5mby5ncm91cHNfY291bnQpIHsKKwkJbG93X3JlYWQgKChjaGFyICopICZkZXNjLHNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyksZ3JvdXBfb2Zmc2V0KTsKKwkJaWYgKGJsb2NrX251bT49ZGVzYy5iZ19pbm9kZV90YWJsZSAmJiBibG9ja19udW08ZGVzYy5iZ19pbm9kZV90YWJsZStmaWxlX3N5c3RlbV9pbmZvLmJsb2Nrc19wZXJfZ3JvdXApCisJCQlmb3VuZD0xOworCQllbHNlCisJCQlncm91cF9vZmZzZXQrPXNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyk7CisJCWdyb3VwX251bT0oZ3JvdXBfb2Zmc2V0LWZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQpL3NpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyk7CisJfQorCisJaWYgKCFmb3VuZCkKKwkJcmV0dXJuICgtMSk7CisKKwlyZXR1cm4gKGdyb3VwX251bSk7Cit9CisKKworCitsb25nIGludCBpbm9kZV9vZmZzZXRfdG9faW5vZGVfbnVtIChsb25nIGlub2RlX29mZnNldCkKKworeworCWxvbmcgZ3JvdXBfbnVtLGdyb3VwX29mZnNldCxlbnRyeV9udW0sYmxvY2tfbnVtLGZpcnN0X2VudHJ5LGxhc3RfZW50cnksaW5vZGVfbnVtOworCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgZGVzYzsKKworCWJsb2NrX251bT1pbm9kZV9vZmZzZXQvZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplOworCisJZ3JvdXBfbnVtPWlub2RlX29mZnNldF90b19ncm91cF9udW0gKGlub2RlX29mZnNldCk7CisJZ3JvdXBfb2Zmc2V0PWZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQrZ3JvdXBfbnVtKnNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyk7CisKKwlsb3dfcmVhZCAoKGNoYXIgKikgJmRlc2Msc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKSxncm91cF9vZmZzZXQpOworCisJZW50cnlfbnVtPShpbm9kZV9vZmZzZXQtZGVzYy5iZ19pbm9kZV90YWJsZSpmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUpL3NpemVvZiAoc3RydWN0IGV4dDJfaW5vZGUpOworCWZpcnN0X2VudHJ5PTA7bGFzdF9lbnRyeT1maWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfaW5vZGVzX3Blcl9ncm91cC0xOworCWlub2RlX251bT1ncm91cF9udW0qZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9jay5zX2lub2Rlc19wZXJfZ3JvdXArMTsKKwlpbm9kZV9udW0rPWVudHJ5X251bTsKKworCXJldHVybiAoaW5vZGVfbnVtKTsKK30KKworbG9uZyBpbnQgaW5vZGVfbnVtX3RvX2lub2RlX29mZnNldCAobG9uZyBpbm9kZV9udW0pCisKK3sKKwlsb25nIGdyb3VwX251bSxncm91cF9vZmZzZXQsaW5vZGVfb2Zmc2V0LGlub2RlX2VudHJ5OworCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgZGVzYzsKKworCWlub2RlX251bS0tOworCisJZ3JvdXBfbnVtPWlub2RlX251bS9maWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfaW5vZGVzX3Blcl9ncm91cDsKKwlpbm9kZV9lbnRyeT1pbm9kZV9udW0lZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9jay5zX2lub2Rlc19wZXJfZ3JvdXA7CisJZ3JvdXBfb2Zmc2V0PWZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQrZ3JvdXBfbnVtKnNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyk7CisJbG93X3JlYWQgKChjaGFyICopICZkZXNjLHNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyksZ3JvdXBfb2Zmc2V0KTsKKworCWlub2RlX29mZnNldD1kZXNjLmJnX2lub2RlX3RhYmxlKmZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZStpbm9kZV9lbnRyeSpzaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKTsKKworCXJldHVybiAoaW5vZGVfb2Zmc2V0KTsKK30KZGlmZiAtLWdpdCBhL2V4dDJlZC9pbm9kZWJpdG1hcF9jb20uYyBiL2V4dDJlZC9pbm9kZWJpdG1hcF9jb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTc4MDdhCi0tLSAvZGV2L251bGwKKysrIGIvZXh0MmVkL2lub2RlYml0bWFwX2NvbS5jCkBAIC0wLDAgKzEsMjE1IEBACisvKgorCisvdXNyL3NyYy9leHQyZWQvaW5vZGViaXRtYXBfY29tLmMKKworQSBwYXJ0IG9mIHRoZSBleHRlbmRlZCBmaWxlIHN5c3RlbSAyIGRpc2sgZWRpdG9yLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitIYW5kbGVzIHRoZSBpbm9kZSBiaXRtYXAuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BsZWFzZSByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBpbiBibG9ja2JpdG1hcF9jb20uYyAtIFRob3NlIHR3byBmaWxlcyBhcmUgYWxtb3N0IGVxdWFsLgorCitGaXJzdCB3cml0dGVuIG9uOiBKdWx5IDI1IDE5OTUKKworQ29weXJpZ2h0IChDKSAxOTk1IEdhZGkgT3htYW4KKworKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJleHQyZWQuaCIKKworCit2b2lkIHR5cGVfZXh0Ml9pbm9kZV9iaXRtYXBfX19lbnRyeSAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJdW5zaWduZWQgbG9uZyBlbnRyeV9udW07CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCWlmICgqcHRyPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE5vIGFyZ3VtZW50IHNwZWNpZmllZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKworCWVudHJ5X251bT1hdG9sIChidWZmZXIpOworCisJaWYgKGVudHJ5X251bSA+PSBmaWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfaW5vZGVzX3Blcl9ncm91cCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBFbnRyeSBudW1iZXIgb3V0IG9mIGJvdW5kc1xuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCisJaW5vZGVfYml0bWFwX2luZm8uZW50cnlfbnVtPWVudHJ5X251bTsKKwlzdHJjcHkgKGJ1ZmZlciwic2hvdyIpO2Rpc3BhdGNoIChidWZmZXIpOworfQorCit2b2lkIHR5cGVfZXh0Ml9pbm9kZV9iaXRtYXBfX19uZXh0IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlsb25nIGVudHJ5X29mZnNldD0xOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0ciE9MCkgeworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCWVudHJ5X29mZnNldD1hdG9sIChidWZmZXIpOworCX0KKworCXNwcmludGYgKGJ1ZmZlciwiZW50cnkgJWxkIixpbm9kZV9iaXRtYXBfaW5mby5lbnRyeV9udW0rZW50cnlfb2Zmc2V0KTsKKwlkaXNwYXRjaCAoYnVmZmVyKTsKK30KKwordm9pZCB0eXBlX2V4dDJfaW5vZGVfYml0bWFwX19fcHJldiAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG9uZyBlbnRyeV9vZmZzZXQ9MTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQllbnRyeV9vZmZzZXQ9YXRvbCAoYnVmZmVyKTsKKwl9CisKKwlzcHJpbnRmIChidWZmZXIsImVudHJ5ICVsZCIsaW5vZGVfYml0bWFwX2luZm8uZW50cnlfbnVtLWVudHJ5X29mZnNldCk7CisJZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9CisKK3ZvaWQgdHlwZV9leHQyX2lub2RlX2JpdG1hcF9fX2FsbG9jYXRlIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlsb25nIGVudHJ5X251bSxudW09MTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQludW09YXRvbCAoYnVmZmVyKTsKKwl9CisKKwllbnRyeV9udW09aW5vZGVfYml0bWFwX2luZm8uZW50cnlfbnVtOworCWlmIChudW0gPiBmaWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfaW5vZGVzX3Blcl9ncm91cC1lbnRyeV9udW0pIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gVGhlcmUgYXJlbid0IHRoYXQgbXVjaCBpbm9kZXMgaW4gdGhlIGdyb3VwXG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCisJd2hpbGUgKG51bSkgeworCQlhbGxvY2F0ZV9pbm9kZSAoZW50cnlfbnVtKTsKKwkJbnVtLS07ZW50cnlfbnVtKys7CisJfQorCisJZGlzcGF0Y2ggKCJzaG93Iik7Cit9CisKK3ZvaWQgdHlwZV9leHQyX2lub2RlX2JpdG1hcF9fX2RlYWxsb2NhdGUgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgZW50cnlfbnVtLG51bT0xOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0ciE9MCkgeworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCW51bT1hdG9sIChidWZmZXIpOworCX0KKworCWVudHJ5X251bT1pbm9kZV9iaXRtYXBfaW5mby5lbnRyeV9udW07CisJaWYgKG51bSA+IGZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2suc19pbm9kZXNfcGVyX2dyb3VwLWVudHJ5X251bSkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBUaGVyZSBhcmVuJ3QgdGhhdCBtdWNoIGlub2RlcyBpbiB0aGUgZ3JvdXBcbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisKKwl3aGlsZSAobnVtKSB7CisJCWRlYWxsb2NhdGVfaW5vZGUgKGVudHJ5X251bSk7CisJCW51bS0tO2VudHJ5X251bSsrOworCX0KKworCWRpc3BhdGNoICgic2hvdyIpOworfQorCisKK3ZvaWQgYWxsb2NhdGVfaW5vZGUgKGxvbmcgZW50cnlfbnVtKQorCit7CisJdW5zaWduZWQgY2hhciBiaXRfbWFzaz0xOworCWludCBieXRlX29mZnNldCxqOworCisJYnl0ZV9vZmZzZXQ9ZW50cnlfbnVtLzg7CisJZm9yIChqPTA7ajxlbnRyeV9udW0lODtqKyspCisJCWJpdF9tYXNrKj0yOworCXR5cGVfZGF0YS51LmJ1ZmZlciBbYnl0ZV9vZmZzZXRdIHw9IGJpdF9tYXNrOworfQorCit2b2lkIGRlYWxsb2NhdGVfaW5vZGUgKGxvbmcgZW50cnlfbnVtKQorCit7CisJdW5zaWduZWQgY2hhciBiaXRfbWFzaz0xOworCWludCBieXRlX29mZnNldCxqOworCisJYnl0ZV9vZmZzZXQ9ZW50cnlfbnVtLzg7CisJZm9yIChqPTA7ajxlbnRyeV9udW0lODtqKyspCisJCWJpdF9tYXNrKj0yOworCWJpdF9tYXNrXj0weGZmOworCisJdHlwZV9kYXRhLnUuYnVmZmVyIFtieXRlX29mZnNldF0gJj0gYml0X21hc2s7Cit9CisKK3ZvaWQgdHlwZV9leHQyX2lub2RlX2JpdG1hcF9fX3Nob3cgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWludCBpLGo7CisJdW5zaWduZWQgY2hhciAqcHRyOworCXVuc2lnbmVkIGxvbmcgaW5vZGVfbnVtLGVudHJ5X251bTsKKworCXB0cj10eXBlX2RhdGEudS5idWZmZXI7CisJc2hvd19wYWRfaW5mby5saW5lPTA7c2hvd19wYWRfaW5mby5tYXhfbGluZT0tMTsKKworCXdtb3ZlIChzaG93X3BhZCwwLDApOworCWZvciAoaT0wLGVudHJ5X251bT0wO2k8ZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9jay5zX2lub2Rlc19wZXJfZ3JvdXAvODtpKysscHRyKyspIHsKKwkJZm9yIChqPTE7ajw9MTI4O2oqPTIpIHsKKwkJCWlmIChlbnRyeV9udW09PWlub2RlX2JpdG1hcF9pbmZvLmVudHJ5X251bSkgeworCQkJCXdhdHRyc2V0IChzaG93X3BhZCxBX1JFVkVSU0UpOworCQkJCXNob3dfcGFkX2luZm8ubGluZT1zaG93X3BhZF9pbmZvLm1heF9saW5lLXNob3dfcGFkX2luZm8uZGlzcGxheV9saW5lcy8yOworCQkJfQorCisJCQlpZiAoKCpwdHIpICYgaikKKwkJCQl3cHJpbnR3IChzaG93X3BhZCwiMSIpOworCQkJZWxzZQorCQkJCXdwcmludHcgKHNob3dfcGFkLCIwIik7CisKKwkJCWlmIChlbnRyeV9udW09PWlub2RlX2JpdG1hcF9pbmZvLmVudHJ5X251bSkKKwkJCQl3YXR0cnNldCAoc2hvd19wYWQsQV9OT1JNQUwpOworCisJCQllbnRyeV9udW0rKzsKKwkJfQorCQl3cHJpbnR3IChzaG93X3BhZCwiICIpOworCQlpZiAoaSU4PT03KSB7CisJCQl3cHJpbnR3IChzaG93X3BhZCwiXG4iKTsKKwkJCXNob3dfcGFkX2luZm8ubWF4X2xpbmUrKzsKKwkJfQorCX0KKworCWlmIChpJTghPTcpIHsKKwkJd3ByaW50dyAoc2hvd19wYWQsIlxuIik7CisJCXNob3dfcGFkX2luZm8ubWF4X2xpbmUrKzsKKwl9CisKKwlyZWZyZXNoX3Nob3dfcGFkICgpOworCXNob3dfaW5mbyAoKTsKKwl3bW92ZSAoc2hvd193aW4sMSwwKTt3cHJpbnR3IChzaG93X3dpbiwiSW5vZGUgYml0bWFwIG9mIGJsb2NrIGdyb3VwICVsZFxuIixpbm9kZV9iaXRtYXBfaW5mby5ncm91cF9udW0pOworCisJaW5vZGVfbnVtPTEraW5vZGVfYml0bWFwX2luZm8uZW50cnlfbnVtK2lub2RlX2JpdG1hcF9pbmZvLmdyb3VwX251bSpmaWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfaW5vZGVzX3Blcl9ncm91cDsKKwl3cHJpbnR3IChzaG93X3dpbiwiU3RhdHVzIG9mIGlub2RlICVsZCAtICIsaW5vZGVfbnVtKTsKKwlwdHI9dHlwZV9kYXRhLnUuYnVmZmVyK2lub2RlX2JpdG1hcF9pbmZvLmVudHJ5X251bS84OworCWo9MTsKKwlmb3IgKGk9aW5vZGVfYml0bWFwX2luZm8uZW50cnlfbnVtICUgODtpPjA7aS0tKQorCQlqKj0yOworCWlmICgoKnB0cikgJiBqKQorCQl3cHJpbnR3IChzaG93X3dpbiwiQWxsb2NhdGVkXG4iKTsKKwllbHNlCisJCXdwcmludHcgKHNob3dfd2luLCJGcmVlXG4iKTsKKwlyZWZyZXNoX3Nob3dfd2luICgpOworfQpkaWZmIC0tZ2l0IGEvZXh0MmVkL21haW4uYyBiL2V4dDJlZC9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyOTk3OQotLS0gL2Rldi9udWxsCisrKyBiL2V4dDJlZC9tYWluLmMKQEAgLTAsMCArMSw1NDYgQEAKKy8qCisKKy91c3Ivc3JjL2V4dDJlZC9tYWluLmMKKworQSBwYXJ0IG9mIHRoZSBleHRlbmRlZCBmaWxlIHN5c3RlbSAyIGRpc2sgZWRpdG9yLgorCistLS0tLS0tLS0tLS0KK01haW4gcHJvZ3JhbQorLS0tLS0tLS0tLS0tCisKK1RoaXMgZmlsZSBtb3N0bHkgY29udGFpbnM6CisKKzEuCUEgbGlzdCBvZiBnbG9iYWwgdmFyaWFibGVzIHVzZWQgdGhyb3VnaCB0aGUgZW50aXJlIHByb2dyYW0uCisyLglUaGUgcGFyc2VyLCB3aGljaCBhc2tzIHRoZSBjb21tYW5kIGxpbmUgZnJvbSB0aGUgdXNlci4KKzMuCVRoZSBkaXNwYXRjaGVyLCB3aGljaCBhbmFseXplcyB0aGUgY29tbWFuZCBsaW5lIGFuZCBjYWxscyB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlciBmdW5jdGlvbi4KKzQuCUEgY29tbWFuZCBwYXR0ZXJuIG1hdGNoZXIgd2hpY2ggaXMgdXNlZCBhbG9uZyB3aXRoIHRoZSByZWFkbGluZSBjb21wbGV0aW9uIGZlYXR1cmUuCis1LglBIGZ1bmN0aW9uIHdoaWNoIHRlbGxzIHRoZSB1c2VyIHRoYXQgYW4gaW50ZXJuYWwgZXJyb3IgaGFzIG9jY3VyZWQuCisKK0ZpcnN0IHdyaXR0ZW4gb246IE1hcmNoIDMwIDE5OTUKKworQ29weXJpZ2h0IChDKSAxOTk1IEdhZGkgT3htYW4KKworKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpZmRlZiBIQVZFX1JFQURMSU5FCisjaW5jbHVkZSA8cmVhZGxpbmUuaD4KKyNpbmNsdWRlIDxoaXN0b3J5Lmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gaW50IG9wdGluZDsKK2V4dGVybiBjaGFyICpvcHRhcmc7CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJlZC5oIgorCisvKiBHbG9iYWwgdmFyaWFibGVzICovCisKKy8qCisKK0NvbmZpZ3VyYXRpb24gZmlsZSBvcHRpb25zCisKK1RoZSBmb2xsb3dpbmcgdmFyaWFibGVzIHdpbGwgYmUgc2V0IGJ5IGluaXQuYyB0byB0aGUgdmFsdWVzIHNlbGVjdGVkIGluIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS4KK1RoZXkgYXJlIGluaXRpYWxpemVkIGJlbG93IHRvIHNvbWUgbG9naWNhbCBkZWZhdWx0cy4KKworKi8KKworCitjaGFyIEV4dDJEZXNjcmlwdG9ycyBbMjAwXT0iZXh0Mi5kZXNjcmlwdG9ycyI7CS8qIFRoZSBsb2NhdGlvbiBvZiB0aGUgZXh0MiBmaWxlc3lzdGVtIG9iamVjdCBkZWZpbml0aW9uICovCitjaGFyIEFsdGVybmF0ZURlc2NyaXB0b3JzIFsyMDBdPSIiOwkJLyogV2UgYWxsb3cgdGhlIHVzZXIgdG8gZGVmaW5lIGFkZGl0aW9uYWwgc3RydWN0dXJlcyAqLworY2hhciBMb2dGaWxlIFsyMDBdPSJleHQyZWQubG9nIjsJCS8qIFRoZSBsb2NhdGlvbiBvZiB0aGUgbG9nIGZpbGUgLSBFYWNoIHdyaXRlIHdpbGwgYmUgbG9nZ2VkIHRoZXJlICovCitpbnQgTG9nQ2hhbmdlcz0xOwkJCQkvKiAxIGVuYWJsZXMgbG9nZ2luZywgMCBkaWFibGVzIGxvZ2dpbmcgKi8KK2ludCBBbGxvd0NoYW5nZXM9MDsJCQkJLyogV2hlbiBzZXQsIHRoZSBlbmFibGV3cml0ZSBjb21tYW5kIHdpbGwgZmFpbCAqLworaW50IEFsbG93TW91bnRlZFJlYWQ9MDsJCQkJLyogQmVoYXZpb3Igd2hlbiB0cnlpbmcgdG8gb3BlbiBhIG1vdW50ZWQgZmlsZXN5c3RlbSByZWFkLW9ubHkgKi8KK2ludCBGb3JjZUV4dDI9MDsJCQkJLyogV2hlbiBzZXQsIGV4dDIgYXV0b2RldGVjdGlvbiBpcyBvdmVycmlkZGVuICovCitpbnQgRGVmYXVsdEJsb2NrU2l6ZT0xMDI0OwordW5zaWduZWQgbG9uZyBEZWZhdWx0VG90YWxCbG9ja3M9MjA5NzE1MTsKK3Vuc2lnbmVkIGxvbmcgRGVmYXVsdEJsb2Nrc0luR3JvdXA9ODE5MjsJLyogVGhlIGRlZmF1bHQgdmFsdWVzIGFyZSB1c2VkIHdoZW4gYW4gZXh0MiBmaWxlc3lzdGVtIGlzIG5vdCAqLworaW50IEZvcmNlRGVmYXVsdD0wOwkJCQkvKiBkZXRlY3RlZCwgb3IgRm9yY2VEZWZhdWx0IGlzIHNldCAqLworCitjaGFyIGxhc3RfY29tbWFuZF9saW5lIFs4MF07CQkJLyogQSBzaW1wbGUgb25lIGNvbW1hbmQgY2FjaGUsIGluIGFkZGl0aW9uIHRvIHRoZSByZWFkbGluZSBoaXN0b3J5ICovCisKK2NoYXIgZGV2aWNlX25hbWUgWzgwXTsJCQkJLyogVGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlc3lzdGVtICovCitGSUxFICpkZXZpY2VfaGFuZGxlPU5VTEw7CQkJLyogVGhpcyBpcyBwYXNzZWQgdG8gdGhlIGZvcGVuIC8gZnJlYWQgLi4uIGNvbW1hbmRzICovCitsb25nIGRldmljZV9vZmZzZXQ7CQkJCS8qIFRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBmaWxlc3lzdGVtICovCisJCQkJCQkvKiBOb3RlIHRoYXQgd2UgaGF2ZSBhIDIgR0IgbGltaXRhdGlvbiAqLworCitpbnQgbW91bnRlZD0wOwkJCQkJLyogVGhpcyBpcyBzZXQgd2hlbiB3ZSBmaW5kIHRoYXQgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCAqLworCitzdHJ1Y3Qgc3RydWN0X2NvbW1hbmRzIGdlbmVyYWxfY29tbWFuZHMsZXh0Ml9jb21tYW5kczsJCS8qIFVzZWQgdG8gZGVmaW5lIHRoZSBnZW5lcmFsIGFuZCBleHQyIGNvbW1hbmRzICovCitzdHJ1Y3Qgc3RydWN0X2Rlc2NyaXB0b3IgKmZpcnN0X3R5cGUsKmxhc3RfdHlwZSwqY3VycmVudF90eXBlOwkvKiBVc2VkIHRvIGFjY2VzcyB0aGUgZG91YmxlIGxpbmtlZCBsaXN0ICovCitzdHJ1Y3Qgc3RydWN0X3R5cGVfZGF0YSB0eXBlX2RhdGE7CQkJCS8qIFRoZSBjdXJyZW50IGRhdGEgaXMgc29tZXRpbWVzIHN0b3JlZCBoZXJlICovCitzdHJ1Y3Qgc3RydWN0X2ZpbGVfc3lzdGVtX2luZm8gZmlsZV9zeXN0ZW1faW5mbzsJCS8qIEVzc2VudGlhbCBpbmZvcm1hdGlvbiBvbiB0aGUgZmlsZXN5c3RlbSAqLworc3RydWN0IHN0cnVjdF9maWxlX2luZm8gZmlsZV9pbmZvLGZpcnN0X2ZpbGVfaW5mbzsJCS8qIFVzZWQgYnkgZmlsZV9jb20uYyB0byBhY2Nlc3MgZmlsZXMgKi8KK3N0cnVjdCBzdHJ1Y3RfZ3JvdXBfaW5mbyBncm91cF9pbmZvOwkJCQkvKiBVc2VkIGJ5IGdyb3VwX2NvbS5jICovCitzdHJ1Y3Qgc3RydWN0X3N1cGVyX2luZm8gc3VwZXJfaW5mbzsJCQkJLyogVXNlZCBieSBzdXBlcl9jb20uYyAqLworc3RydWN0IHN0cnVjdF9yZW1lbWJlcl9saWZvIHJlbWVtYmVyX2xpZm87CQkJLyogQSBjaXJjdWxhciBtZW1vcnkgb2Ygb2JqZWN0cyAqLworc3RydWN0IHN0cnVjdF9ibG9ja19iaXRtYXBfaW5mbyBibG9ja19iaXRtYXBfaW5mbzsJCS8qIFVzZWQgYnkgYmxvY2tiaXRtYXBfY29tLmMgKi8KK3N0cnVjdCBzdHJ1Y3RfaW5vZGVfYml0bWFwX2luZm8gaW5vZGVfYml0bWFwX2luZm87CQkvKiBVc2VkIGJ5IGlub2RlYml0bWFwX2NvbS5jICovCisKK2ludCByZWRyYXdfcmVxdWVzdD0wOwkJCQkJCS8qIElzIHNldCBieSBhIHNpZ25hbCBoYW5kbGVyIHRvIGhhbmRsZSB0ZXJtaW5hbCAqLworCQkJCQkJCQkvKiBzY3JlZW4gc2l6ZSBjaGFuZ2UuICovCisKKworLyoKKyAqIFdlIGp1c3QgY2FsbCB0aGUgcGFyc2VyIHRvIGdldCBjb21tYW5kcyBmcm9tIHRoZSB1c2VyLiBXZSBxdWl0IHdoZW4KKyAqIHBhcnNlciByZXR1cm5zLgorICovCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludAl3cml0ZV9wcml2ID0gMDsKKwlpbnQJYzsKKwljaGFyCSpidWY7CisKKwlpZiAoIWluaXQgKCkpCisJCXJldHVybiAoMSk7CisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAidyIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ3cnOgorCQkJd3JpdGVfcHJpdisrOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKG9wdGluZCA8IGFyZ2MpIHsKKwkJYnVmID0gbWFsbG9jKHN0cmxlbihhcmd2W29wdGluZF0pICsgMzIpOworCQlpZiAoIWJ1ZikgeworCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBhbGxvY2F0ZSBmaWxlbmFtZSBidWZmZXJcbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCQlzdHJjcHkoYnVmLCAic2V0X2RldmljZSAiKTsKKwkJc3RyY2F0KGJ1ZiwgYXJndltvcHRpbmRdKTsKKwkJc2V0X2RldmljZShidWYpOworCQlmcmVlKGJ1Zik7CisJCWlmICh3cml0ZV9wcml2KSB7CisJCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiXG4iKTsKKwkJCWVuYWJsZV93cml0ZSgiZW5hYmxlX3dyaXRlIik7CisJCX0KKwl9CisJcGFyc2VyICgpOwkJCS8qIEdldCBhbmQgcGFyc2UgdXNlciBjb21tYW5kcyAqLworCXByZXBhcmVfdG9fY2xvc2UoKTsJCS8qIERvIHNvbWUgY2xlYW51cCAqLworCXByaW50ZigiUXVpdHRpbmcgLi4uXG4iKTsKKwlyZXR1cm4oMCk7Cit9CisKKworLyoKKyAqIFJlYWQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgY29tbWFuZCB3aW5kb3cKKyAqLworaW50IGNvbW1hbmRfcmVhZF9rZXkoKQoreworCWludAlrZXkgPSAwOworCisJd2hpbGUgKCFrZXkpIHsKKwkJaWYgKHJlZHJhd19yZXF1ZXN0KSB7CisJCQlyZWRyYXdfYWxsKCk7CisJCQlyZWRyYXdfcmVxdWVzdD0wOworCQl9CisJCWtleSA9IHdnZXRjaChjb21tYW5kX3dpbik7CisJCXN3aXRjaCAoa2V5KSB7CisJCWNhc2UgMHgxQToKKwkJCWtleSA9IDA7CisJCQlraWxsKGdldHBpZCgpLCBTSUdUU1RQKTsKKwkJCWJyZWFrOworCisJCWNhc2UgS0VZX05QQUdFOgorCQkJcGdkbigiIik7CisJCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBLRVlfUFBBR0U6CisJCQlwZ3VwKCIiKTsKKwkJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCQlicmVhazsKKwkJY2FzZSBFUlI6CisJCQlrZXkgPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBLRVlfQkFDS1NQQUNFOgorCQkJa2V5ID0gJ1xiJzsKKwkJfQorCQlpZiAoKGtleSA8IDMyICYmIGtleSAhPSAnXGInICYmIGtleSAhPSAnXG4nKSB8fAorCQkgICAgKGtleSA+IDEyNykpCisJCQlrZXkgPSAwOworCX0KKwlyZXR1cm4ga2V5OworfQorCisjaWZkZWYgSEFWRV9SRUFETElORQoraW50IHJsX2dldGNfcmVwbGFjZW1lbnQoRklMRSAqZikKK3sKKwlpbnQJa2V5ID0gY29tbWFuZF9yZWFkX2tleSgpOworCisJaWYgKGtleSA9PSAnXGInKSB7CisJCWlmIChybF9wb2ludCA+IDApCisJCQl3cHJpbnR3KGNvbW1hbmRfd2luLCAiXGIgXGIiKTsKKwl9IGVsc2UKKwkJd3ByaW50dyhjb21tYW5kX3dpbiwgIiVjIiwga2V5KTsKKwlyZXR1cm4ga2V5OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBhc2tzIHRoZSB1c2VyIGZvciBhIGNvbW1hbmQgYW5kIGNhbGxzIHRoZSBkaXNwYXRjaGVyCisgKiBmdW5jdGlvbiwgZGlzcGF0Y2gsIHRvIGFuYWx5emUgaXQuICBXZSB1c2UgdGhlIHJlYWRsaW5lIGxpYnJhcnkKKyAqIGZ1bmN0aW9uIHJlYWRsaW5lIHRvIHJlYWQgdGhlIGNvbW1hbmQsIGhlbmNlIGFsbCB0aGUgdXN1YWwgcmVhZGxpbmUKKyAqIGtleXMgYXJlIGF2YWlsYWJsZS4gIFRoZSBuZXcgY29tbWFuZCBpcyBzYXZlZCBib3RoIGluIHRoZQorICogcmVhZGxpbmUncyBoaXN0b3J5IGFuZCBpbiBvdXIgdGlueSBvbmUtY29tbWFuZCBjYWNoZSwgc28gdGhhdCBvbmx5CisgKiB0aGUgZW50ZXIga2V5IGlzIG5lZWRlZCB0byByZXR5cGUgaXQuCisgKi8KK3ZvaWQgcGFyc2VyICh2b2lkKQoreworCWNoYXIgKnB0cixjb21tYW5kX2xpbmUgWzgwXTsKKwlpbnQgcXVpdD0wOworCisjaWYgMAorCW5vZWNobygpOworCWNicmVhaygpOworCWtleXBhZChjb21tYW5kX3dpbiwgMSk7CisJd3RpbWVvdXQoY29tbWFuZF93aW4sIDEwMCk7CisKKwlybF9nZXRjX2Z1bmN0aW9uID0gcmxfZ2V0Y19yZXBsYWNlbWVudDsKKyNlbmRpZgorCisJd2hpbGUgKCFxdWl0KSB7CisJCS8qIFRlcm1pbmFsIHNjcmVlbiBzaXplIGhhcyBjaGFuZ2VkICovCisJCWlmIChyZWRyYXdfcmVxdWVzdCkgeworCQkJcmVkcmF3X2FsbCgpOworCQkJcmVkcmF3X3JlcXVlc3Q9MDsKKwkJfQorCisJCXdtb3ZlIChjb21tYW5kX3dpbiwwLDApOworCQl3Y2xydG9lb2wgKGNvbW1hbmRfd2luKTsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sImV4dDJlZCA+ICIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCisJCS8qCisJCSAqIFRoZSBuY3Vyc2VzIGxpYnJhcnkgb3B0aW1pemVzIGN1cnNvciBtb3ZlbWVudCBieQorCQkgKiBrZWVwaW5nIHRyYWNrIG9mIHRoZSBjdXJzb3IgcG9zaXRpb24uIEhvd2V2ZXIsIGJ5CisJCSAqIHVzaW5nIHRoZSByZWFkbGluZSBsaWJyYXJ5IEknbSBicmVha2luZyBpdHMKKwkJICogYXNzdW1wdGlvbnMuIFRoZSBkb3VibGUgLTEgYXJndW1lbnRzIHRlbGwgbmN1cnNlcworCQkgKiB0byBkaXNhYmxlIGN1cnNvciBtb3ZlbWVudCBvcHRpbWl6YXRpb24gdGhpcworCQkgKiB0aW1lLgorCQkgKi8KKwkJbXZjdXIgKC0xLC0xLExJTkVTLUNPTU1BTkRfV0lOX0xJTkVTLDApOworCisJCS8qIGVjaG8gKCk7ICovCisJCXB0cj1yZWFkbGluZSAoImV4dDJlZCA+ICIpOworCQkvKiBub2VjaG8gKCk7ICovCisKKwkJLyoKKwkJICogUmVhZGxpbmUgYWxsb2NhdGVkIHRoZSBidWZmZXIgLSBDb3B5IHRoZSBzdHJpbmcKKwkJICogYW5kIGZyZWUgdGhlIGFsbG9jYXRlZCBidWZmZXIKKwkJICogWFhYIFdIWT8/PworCQkgKi8KKwkJc3RyY3B5IChjb21tYW5kX2xpbmUscHRyKTsKKwkJZnJlZSAocHRyKTsKKworCQlpZiAoKmNvbW1hbmRfbGluZSAhPSAwKQorCQkJYWRkX2hpc3RvcnkgKGNvbW1hbmRfbGluZSk7CisKKwkJLyogSWYgb25seSBlbnRlciB3YXMgcHJlc3NlZCwgcmVjYWxsIHRoZSBsYXN0IGNvbW1hbmQgKi8KKwkJaWYgKCpjb21tYW5kX2xpbmU9PTApCisJCQlzdHJjcHkgKGNvbW1hbmRfbGluZSxsYXN0X2NvbW1hbmRfbGluZSk7CisKKwkJLyogRW11bGF0ZSByZWFkbGluZSdzIGFjdGlvbnMgZm9yIG5jdXJzZXMgKi8KKwkJbXZjdXIgKC0xLC0xLExJTkVTLUNPTU1BTkRfV0lOX0xJTkVTLDApOworCQl3ZXJhc2UgKGNvbW1hbmRfd2luKTsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sImV4dDJlZCA+ICIpOworCQl3cHJpbnR3IChjb21tYW5kX3dpbixjb21tYW5kX2xpbmUpOworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiXG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKworCQkvKiBTYXZlIHRoaXMgY29tbWFuZCBpbiBvdXIgdGlueSBjYWNoZSAqLworCQlzdHJjcHkgKGxhc3RfY29tbWFuZF9saW5lLGNvbW1hbmRfbGluZSk7CisKKwkJLyogQW5kIGNhbGwgZGlzcGF0Y2ggdG8gZG8gdGhlIGFjdHVhbCBqb2IgKi8KKwkJcXVpdD1kaXNwYXRjaCAoY29tbWFuZF9saW5lKTsKKwl9Cit9CisjZWxzZQordm9pZCByZWFkX2xpbmUoY2hhciAqIGZvbykgeworCWNoYXIgKiBjaHB0ciA9IGZvbzsKKwlpbnQgY2g7CisJaW50IGRvbmUgPSAwOworCisJd2hpbGUgKCFkb25lICYmIChjaCA9IGNvbW1hbmRfcmVhZF9rZXkoKSkpIHsKKwkJc3dpdGNoIChjaCkgeworCQljYXNlICdcbic6CisJCQlkb25lID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ1xiJzoKKwkJCWlmIChjaHB0ciA+IGZvbykgeworCQkJCXdwcmludHcoY29tbWFuZF93aW4sICJcYiBcYiIpOworCQkJCWNocHRyLS07CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJaWYgKGNoID4gMjU2KQorCQkJCWJyZWFrOworCQkJaWYgKGNoID09ICdcbicpIGJyZWFrOworCQkJKmNocHRyKysgPSBjaDsKKwkJCXdwcmludHcoY29tbWFuZF93aW4sICIlYyIsIGNoKTsKKwkJCWJyZWFrOworCQl9CisJfQorCSpjaHB0ciA9ICdcMCc7Cit9CisKK3ZvaWQgcGFyc2VyICh2b2lkKQoreworCWNoYXIgY29tbWFuZF9saW5lIFs4MF07CisJaW50IHF1aXQ9MDsKKworCW5vZWNobygpOworCWNicmVhaygpOworCXd0aW1lb3V0KGNvbW1hbmRfd2luLCAxMDApOworCWtleXBhZChjb21tYW5kX3dpbiwgMSk7CisKKwl3aGlsZSAoIXF1aXQpIHsKKwkJLyogVGVybWluYWwgc2NyZWVuIHNpemUgaGFzIGNoYW5nZWQgKi8KKwkJaWYgKHJlZHJhd19yZXF1ZXN0KSB7CisJCQlyZWRyYXdfYWxsKCk7CisJCQlyZWRyYXdfcmVxdWVzdD0wOworCQl9CisKKwkJd21vdmUgKGNvbW1hbmRfd2luLDAsMCk7d2NscnRvZW9sIChjb21tYW5kX3dpbik7CisKKwkJd21vdmUoY29tbWFuZF93aW4sIDAsIDApOworCQl3cHJpbnR3KGNvbW1hbmRfd2luLCAiZXh0MmVkID4gIik7CisJCXJlYWRfbGluZShjb21tYW5kX2xpbmUpOworCisJCS8qIElmIG9ubHkgZW50ZXIgd2FzIHByZXNzZWQsIHJlY2FsbCB0aGUgbGFzdCBjb21tYW5kICovCisgCQlpZiAoKmNvbW1hbmRfbGluZT09MCkKKyAJCQlzdHJjcHkgKGNvbW1hbmRfbGluZSxsYXN0X2NvbW1hbmRfbGluZSk7CisKKwkJbXZjdXIgKC0xLC0xLExJTkVTLUNPTU1BTkRfV0lOX0xJTkVTICsgMSwwKTsKKworIAkJc3RyY3B5IChsYXN0X2NvbW1hbmRfbGluZSxjb21tYW5kX2xpbmUpOwkvKiBTYXZlIHRoaXMgY29tbWFuZCBpbiBvdXIgdGlueSBjYWNoZSAqLworCisJCS8qIEFuZCBjYWxsIGRpc3BhdGNoIHRvIGRvIHRoZSBhY3R1YWwgam9iICovCisJCXF1aXQ9ZGlzcGF0Y2ggKGNvbW1hbmRfbGluZSk7CisJfQorfQorI2VuZGlmCisKKworLyoKKyAqIFRoaXMgaXMgYSB2ZXJ5IGltcG9ydGFudCBmdW5jdGlvbi4gSXRzIHRhc2sgaXMgdG8gcmVjaWV2ZSBhIGNvbW1hbmQKKyAqIG5hbWUgYW5kIGxpbmsgaXQgdG8gYSBDIGZ1bmN0aW9uLiAgVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIGNvbW1hbmRzOgorICoKKyAqIDEuCUdlbmVyYWwgY29tbWFuZHMgLSBBbHdheXMgYXZhaWxhYmxlIGFuZCBhY2Nlc3NlZCB0aHJvdWdoCisgKiBnZW5lcmFsX2NvbW1hbmRzLgorICogMi4JRXh0MiBzcGVjaWZpYyBjb21tYW5kcyAtIEF2YWlsYWJsZSB3aGVuIGVkaXRpbmcgYW4gZXh0MgorICogZmlsZXN5c3RlbSwgYWNjZXNzZWQgdGhyb3VnaCBleHQyX2NvbW1hbmRzLgorICogMy4JVHlwZSBzcGVjaWZpYyBjb21tYW5kcyAtIFRob3NlIGFyZSBjaGFuZ2luZyBhY2NvcmRpbmcgdG8gdGhlCisgKiBjdXJyZW50IHR5cGUuIFRoZSBnbG9iYWwgdmFyaWFibGUgY3VycmVudF90eXBlIHBvaW50cyB0byB0aGUKKyAqIGN1cnJlbnQgb2JqZWN0IGRlZmluaXRpb24gKG9mIHR5cGUgc3RydWN0X2Rlc2NyaXB0b3IpLiBJbiBpdCwgdGhlCisgKiBzdHJ1Y3RfY29tbWFuZHMgZW50cnkgY29udGFpbnMgdGhlIHR5cGUgc3BlY2lmaWMgY29tbWFuZHMgbGlua3MuCisgKgorICogT3ZlcnJpZGluZyBpcyBhbiBpbXBvcnRhbnQgZmVhdHVyZSAtIE11Y2ggbGlrZSBpbiBDKysgOiBUaGUgc2FtZQorICogY29tbWFuZCBuYW1lIGNhbiBkaXNwYXRjaCB0byBkaWZmZXJlbnQgZnVuY3Rpb25zLiBUaGUgb3ZlcnJpZGluZworICogcHJpb3JpdHkgaXMgMywyLDE7IFRoYXQgaXMgLSBBIHR5cGUgc3BlY2lmaWMgY29tbWFuZCB3aWxsIGFsd2F5cworICogb3ZlcnJpZGUgYSBnZW5lcmFsIGNvbW1hbmQuIFRoaXMgaXMgdXNlZCB0aHJvdWdoIHRoZSBwcm9ncmFtIHRvCisgKiBhbGxvdyBmaW5lIHR1bmVkIG9wZXJhdGlvbi4KKyAqCisgKiBXaGVuIGFuIGhhbmRsaW5nIGZ1bmN0aW9uIGlzIGZvdW5kLCBpdCBpcyBjYWxsZWQgYWxvbmcgd2l0aCB0aGUKKyAqIGNvbW1hbmQgbGluZSB0aGF0IHdhcyBwYXNzZWQgdG8gdXMuIFRoZSBoYW5kbGluZyBmdW5jdGlvbiBpcyB0aGVuCisgKiBmcmVlIHRvIGludGVycGVydCB0aGUgYXJndW1lbnRzIGluIGl0cyBvd24gc3R5bGUuCisgKi8KK2ludCBkaXNwYXRjaCAoY2hhciAqY29tbWFuZF9saW5lKQoreworCWludCBpLGZvdW5kPTA7CisKKwljaGFyIGNvbW1hbmQgWzgwXTsKKworCXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxjb21tYW5kKTsKKworCWlmIChzdHJjYXNlY21wIChjb21tYW5kLCJxdWl0Iik9PTApIHJldHVybiAoMSk7CisKKwkvKiAxLiBTZWFyY2ggZm9yIHR5cGUgc3BlY2lmaWMgY29tbWFuZHMgRklSU1QgLSBBbGxvd3MKKwlvdmVycmlkaW5nIG9mIGEgZ2VuZXJhbCBjb21tYW5kICovCisKKwlpZiAoY3VycmVudF90eXBlICE9IE5VTEwpCisJCWZvciAoaT0wOworCQkgICAgIGk8PWN1cnJlbnRfdHlwZS0+dHlwZV9jb21tYW5kcy5sYXN0X2NvbW1hbmQgJiYgIWZvdW5kOworCQkgICAgIGkrKykgeworCQkJaWYgKHN0cmNhc2VjbXAgKGNvbW1hbmQsY3VycmVudF90eXBlLT50eXBlX2NvbW1hbmRzLm5hbWVzIFtpXSk9PTApIHsKKwkJCQkoKmN1cnJlbnRfdHlwZS0+dHlwZV9jb21tYW5kcy5jYWxsYmFjayBbaV0pIChjb21tYW5kX2xpbmUpOworCQkJCWZvdW5kPTE7CisJCQl9CisJCX0KKworCS8qIDIuIE5vdyBzZWFyY2ggZm9yIGV4dDIgZmlsZXN5c3RlbSBnZW5lcmFsIGNvbW1hbmRzICovCisKKwlpZiAoIWZvdW5kKQorCQlmb3IgKGk9MDtpPD1leHQyX2NvbW1hbmRzLmxhc3RfY29tbWFuZCAmJiAhZm91bmQ7aSsrKSB7CisJCQlpZiAoc3RyY2FzZWNtcCAoY29tbWFuZCxleHQyX2NvbW1hbmRzLm5hbWVzIFtpXSk9PTApIHsKKwkJCQkoKmV4dDJfY29tbWFuZHMuY2FsbGJhY2sgW2ldKSAoY29tbWFuZF9saW5lKTsKKwkJCQlmb3VuZD0xOworCQkJfQorCQl9CisKKworCS8qIDMuIElmIG5vdCBmb3VuZCwgc2VhcmNoIHRoZSBnZW5lcmFsIGNvbW1hbmRzICovCisKKwlpZiAoIWZvdW5kKQorCQlmb3IgKGk9MDtpPD1nZW5lcmFsX2NvbW1hbmRzLmxhc3RfY29tbWFuZCAmJiAhZm91bmQ7aSsrKSB7CisJCQlpZiAoc3RyY2FzZWNtcCAoY29tbWFuZCxnZW5lcmFsX2NvbW1hbmRzLm5hbWVzIFtpXSk9PTApIHsKKwkJCQkoKmdlbmVyYWxfY29tbWFuZHMuY2FsbGJhY2sgW2ldKSAoY29tbWFuZF9saW5lKTsKKwkJCQlmb3VuZD0xOworCQkJfQorCQl9CisKKwkvKiA0LiBJZiBub3QgZm91bmQsIGlzc3VlIGFuIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiAqLworCisJaWYgKCFmb3VuZCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3I6IFVua25vd24gY29tbWFuZFxuIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworCisvKgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBuZXh0IHdvcmQgaW4gc291cmNlIHRvIHRoZSB2YXJpYWJsZSBkZXN0LAorICogaWdub3Jpbmcgd2hpdGVzcGFjZXMuICBJdCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV4dCB3b3JkIGluCisgKiBzb3VyY2UuICBJdCBpcyB1c2VkIHRvIHNwbGl0IHRoZSBjb21tYW5kIGxpbmUgaW50byBjb21tYW5kIGFuZCBhcmd1bWVudHMuCisgKi8KK2NoYXIgKnBhcnNlX3dvcmQgKGNoYXIgKnNvdXJjZSxjaGFyICpkZXN0KQoreworCWNoYXIgY2gsKnNvdXJjZV9wdHIsKnRhcmdldF9wdHI7CisKKwlpZiAoKnNvdXJjZT09MCkgeworCQkqZGVzdD0wOworCQlyZXR1cm4gKHNvdXJjZSk7CisJfTsKKworCXNvdXJjZV9wdHI9c291cmNlO3RhcmdldF9wdHI9ZGVzdDsKKwlkbyB7CisJCWNoPSpzb3VyY2VfcHRyKys7CisJfSB3aGlsZSAoISAoY2g+JyAnICYmIGNoPD0neicpICYmIGNoIT0wKTsKKworCXdoaWxlIChjaD4nICcgJiYgY2g8PSd6JykgeworCQkqdGFyZ2V0X3B0cisrPWNoOworCQljaD0qc291cmNlX3B0cisrOworCX0KKworCSp0YXJnZXRfcHRyPTA7CisKKwlzb3VyY2VfcHRyLS07CisJZG8geworCQljaD0qc291cmNlX3B0cisrOworCX0gd2hpbGUgKCEgKGNoPicgJyAmJiBjaDw9J3onKSAmJiBjaCE9MCk7CisKKwlyZXR1cm4gKC0tc291cmNlX3B0cik7Cit9CisKKy8qCisgKiB0ZXh0IGlzIHRoZSBwYXJ0aWFsIGNvbW1hbmQgZW50ZXJlZCBieSB0aGUgdXNlcjsgV2UgYXNzdW1lIHRoYXQgaXQKKyAqIGlzIGEgcGFydCBvZiBhIGNvbW1hbmQgLSBJIGRpZG4ndCB3cml0ZSBjb2RlIGZvciBzbWFydGVyIGNvbXBsZXRpb24uCisgKgorICogVGhlIHN0YXRlIHZhcmlhYmxlIGlzIGFuIGluZGV4IHdoaWNoIHRlbGxzIHVzIGhvdyBtYW55IHBvc3NpYmxlCisgKiBjb21wbGV0aW9ucyB3ZSBhbHJlYWR5IHJldHVybmVkIHRvIHJlYWRsaW5lLgorICoKKyAqIFdlIHJldHVybiBvbmx5IG9uZSBwb3NzaWJsZSBjb21wbGV0aW9uIG9yIChjaGFyICopIE5VTEwgaWYgdGhlcmUKKyAqIGFyZSBubyBtb3JlIGNvbXBsZXRpb25zLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHJlYWRsaW5lCisgKiBvdmVyIGFuZCBvdmVyIHVudGlsIHdlIHRlbGwgaXQgdG8gc3RvcC4KKyAqCisgKiBXaGlsZSBzY2FubmluZyBmb3IgcG9zc2libGUgY29tcGxldGlvbnMsIHdlIHVzZSB0aGUgc2FtZSBwcmlvcml0eQorICogZGVmaW5pdGlvbiB3aGljaCB3YXMgdXNlZCBpbiBkaXNwYXRjaC4KKyAqLworI2lmIEhBVkVfUkVBRExJTkUKK2NoYXIgKmNvbXBsZXRlX2NvbW1hbmQgKGNoYXIgKnRleHQsaW50IHN0YXRlKQoreworCWludCBzdGF0ZV9pbmRleD0tMTsKKwlpbnQgaSxsZW47CisKKwlsZW49c3RybGVuICh0ZXh0KTsKKworCS8qIElzIHRoZSBjb21tYW5kIHR5cGUgc3BlY2lmaWMgPyAqLworCisJaWYgKGN1cnJlbnRfdHlwZSAhPSBOVUxMKQorCQlmb3IgKGk9MDtpPD1jdXJyZW50X3R5cGUtPnR5cGVfY29tbWFuZHMubGFzdF9jb21tYW5kO2krKykgeworCQkJaWYgKHN0cm5jbXAgKGN1cnJlbnRfdHlwZS0+dHlwZV9jb21tYW5kcy5uYW1lcyBbaV0sdGV4dCxsZW4pPT0wKSB7CisJCQkJc3RhdGVfaW5kZXgrKzsKKwkJCQlpZiAoc3RhdGU9PXN0YXRlX2luZGV4KSB7CisJCQkJCXJldHVybiAoZHVwc3RyIChjdXJyZW50X3R5cGUtPnR5cGVfY29tbWFuZHMubmFtZXMgW2ldKSk7CisJCQkJfQorCQkJfQorCQl9CisKKwkvKiBObywgcGVoYXBzIGV4dDIgc3BlY2lmaWMgY29tbWFuZCB0aGVuID8gKi8KKworCWZvciAoaT0wO2k8PWV4dDJfY29tbWFuZHMubGFzdF9jb21tYW5kO2krKykgeworCQlpZiAoc3RybmNtcCAoZXh0Ml9jb21tYW5kcy5uYW1lcyBbaV0sdGV4dCxsZW4pPT0wKSB7CisJCQlzdGF0ZV9pbmRleCsrOworCQkJaWYgKHN0YXRlPT1zdGF0ZV9pbmRleCkKKwkJCXJldHVybiAoZHVwc3RyIChleHQyX2NvbW1hbmRzLm5hbWVzIFtpXSkpOworCQl9CisJfQorCisKKwkvKiBDaGVjayBmb3IgYSBnZW5lcmFsIGNvbW1hbmQgKi8KKworCWZvciAoaT0wO2k8PWdlbmVyYWxfY29tbWFuZHMubGFzdF9jb21tYW5kO2krKykgeworCQlpZiAoc3RybmNtcCAoZ2VuZXJhbF9jb21tYW5kcy5uYW1lcyBbaV0sdGV4dCxsZW4pPT0wKSB7CisJCQkJc3RhdGVfaW5kZXgrKzsKKwkJCQlpZiAoc3RhdGU9PXN0YXRlX2luZGV4KQorCQkJCQlyZXR1cm4gKGR1cHN0ciAoZ2VuZXJhbF9jb21tYW5kcy5uYW1lcyBbaV0pKTsKKwkJfQorCX0KKworCS8qIHF1aXQgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSAqLworCisJaWYgKHN0cm5jbXAgKCJxdWl0Iix0ZXh0LGxlbik9PTApIHsKKwkJc3RhdGVfaW5kZXgrKzsKKwkJaWYgKHN0YXRlPT1zdGF0ZV9pbmRleCkKKwkJCXJldHVybiAoZHVwc3RyICgicXVpdCIpKTsKKwl9CisKKwkvKiBObyBtb3JlIGNvbXBsZXRpb25zICovCisKKwlyZXR1cm4gKChjaGFyICopIE5VTEwpOworfQorI2VuZGlmCisKKworLyoKKyAqIE5vdGhpbmcgc3BlY2lhbCAtIEp1c3QgYWxsb2NhdGVzIGVub3VnaCBzcGFjZSBhbmQgY29weSB0aGUgc3RyaW5nLgorICovCitjaGFyICpkdXBzdHIgKGNoYXIgKnNyYykKK3sKKwljaGFyICpwdHI7CisKKwlwdHI9KGNoYXIgKikgbWFsbG9jIChzdHJsZW4gKHNyYykrMSk7CisJc3RyY3B5IChwdHIsc3JjKTsKKwlyZXR1cm4gKHB0cik7Cit9CisKKyNpZmRlZiBERUJVRworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVwb3J0cyBhbiBpbnRlcm5hbCBlcnJvci4gSXQgaXMgYWxtb3N0IG5vdCB1c2VkLiBPbmUKKyAqIHBsYWNlIGluIHdoaWNoIEkgZG8gY2hlY2sgZm9yIGludGVybmFsIGVycm9ycyBpcyBkaXNrLmMuCisgKgorICogV2UganVzdCByZXBvcnQgdGhlIGVycm9yLCBhbmQgdHJ5IHRvIGNvbnRpbnVlIC4uLgorICovCit2b2lkIGludGVybmFsX2Vycm9yIChjaGFyICpkZXNjcmlwdGlvbixjaGFyICpzb3VyY2VfbmFtZSxjaGFyICpmdW5jdGlvbl9uYW1lKQoreworCXdwcmludHcgKGNvbW1hbmRfd2luLCJJbnRlcm5hbCBlcnJvciAtIEZvdW5kIGJ5IHNvdXJjZTogJXMuYyAsIGZ1bmN0aW9uOiAlc1xuIixzb3VyY2VfbmFtZSxmdW5jdGlvbl9uYW1lKTsKKwl3cHJpbnR3IChjb21tYW5kX3dpbiwiXHQlc1xuIixkZXNjcmlwdGlvbik7CisJd3ByaW50dyAoY29tbWFuZF93aW4sIlByZXNzIGVudGVyIHRvIChob3BlZnVsbHkpIGNvbnRpbnVlXG4iKTsKKwlyZWZyZXNoX2NvbW1hbmRfd2luICgpO2dldGNoICgpO3dlcmFzZSAoY29tbWFuZF93aW4pOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2V4dDJlZC9zdXBlcl9jb20uYyBiL2V4dDJlZC9zdXBlcl9jb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTk4OTcwCi0tLSAvZGV2L251bGwKKysrIGIvZXh0MmVkL3N1cGVyX2NvbS5jCkBAIC0wLDAgKzEsMTU2IEBACisvKgorCisvdXNyL3NyYy9leHQyZWQvc3VwZXJfY29tLmMKKworQSBwYXJ0IG9mIHRoZSBleHRlbmRlZCBmaWxlIHN5c3RlbSAyIGRpc2sgZWRpdG9yLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitIYW5kbGVzIHRoZSBzdXBlcmJsb2NrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpcnN0IHdyaXR0ZW4gb246IEFwcmlsIDkgMTk5NQorCitDb3B5cmlnaHQgKEMpIDE5OTUgR2FkaSBPeG1hbgorCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJleHQyZWQuaCIKKwordm9pZCB0eXBlX2V4dDJfc3VwZXJfYmxvY2tfX19zaG93IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXI7CisJc3VwZXI9JnR5cGVfZGF0YS51LnRfZXh0Ml9zdXBlcl9ibG9jazsKKworCXNob3cgKGNvbW1hbmRfbGluZSk7CisKKwlpZiAoZXh0MmZzX2Jsb2Nrc19jb3VudChzdXBlcikgIT0gMCkgeworCQl3bW92ZSAoc2hvd19wYWQsMiw0MCk7d3ByaW50dyAoc2hvd19wYWQsIiUyLjJmJSUiLDEwMCooZmxvYXQpIGV4dDJmc19yX2Jsb2Nrc19jb3VudChzdXBlcikvIChmbG9hdCkgZXh0MmZzX2Jsb2Nrc19jb3VudChzdXBlcikpOworCQl3bW92ZSAoc2hvd19wYWQsMyw0MCk7d3ByaW50dyAoc2hvd19wYWQsIiUyLjJmJSUiLDEwMCooZmxvYXQpIGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChzdXBlcikvIChmbG9hdCkgZXh0MmZzX2Jsb2Nrc19jb3VudChzdXBlcikpOworCX0KKworCWlmIChzdXBlci0+c19pbm9kZXNfY291bnQgIT0gMCkgeworCQl3bW92ZSAoc2hvd19wYWQsNCw0MCk7d3ByaW50dyAoc2hvd19wYWQsIiUyLjJmJSUiLDEwMCooZmxvYXQpIHN1cGVyLT5zX2ZyZWVfaW5vZGVzX2NvdW50LyAoZmxvYXQpIHN1cGVyLT5zX2lub2Rlc19jb3VudCk7CisJfQorCisJd21vdmUgKHNob3dfcGFkLDYsNDApOworCXN3aXRjaCAoc3VwZXItPnNfbG9nX2Jsb2NrX3NpemUpIHsKKwkJY2FzZSAwOgl3cHJpbnR3IChzaG93X3BhZCwiMTAyNCBieXRlcyIpO2JyZWFrOworCQljYXNlIDE6IHdwcmludHcgKHNob3dfcGFkLCIyMDQ4IGJ5dGVzIik7YnJlYWs7CisJCWNhc2UgMjogd3ByaW50dyAoc2hvd19wYWQsIjQwOTYgYnl0ZXMiKTticmVhazsKKwl9CisJd21vdmUgKHNob3dfcGFkLDExLDQwKTt3cHJpbnR3IChzaG93X3BhZCwiJXMiLGN0aW1lICgodGltZV90ICopICZ0eXBlX2RhdGEudS50X2V4dDJfc3VwZXJfYmxvY2suc19tdGltZSkpOworCXdtb3ZlIChzaG93X3BhZCwxMiw0MCk7d3ByaW50dyAoc2hvd19wYWQsIiVzIixjdGltZSAoKHRpbWVfdCAqKSAmdHlwZV9kYXRhLnUudF9leHQyX3N1cGVyX2Jsb2NrLnNfd3RpbWUpKTsKKwl3bW92ZSAoc2hvd19wYWQsMTksNDApO3dwcmludHcgKHNob3dfcGFkLCIlcyIsY3RpbWUgKCh0aW1lX3QgKikgJnR5cGVfZGF0YS51LnRfZXh0Ml9zdXBlcl9ibG9jay5zX2xhc3RjaGVjaykpOworCXdtb3ZlIChzaG93X3BhZCwxNSw0MCk7CisKKwlzd2l0Y2ggKHR5cGVfZGF0YS51LnRfZXh0Ml9zdXBlcl9ibG9jay5zX21hZ2ljKSB7CisJCWNhc2UgRVhUMl9TVVBFUl9NQUdJQzoKKwkJCXdwcmludHcgKHNob3dfcGFkLCJleHQyID49IDAuMkIiKTsKKwkJCWJyZWFrOworCQljYXNlIEVYVDJfUFJFXzAyQl9NQUdJQzoKKwkJCXdwcmludHcgKHNob3dfcGFkLCJleHQyIDwgMC4yQiAobm90IHN1cHBvcnRlZCkiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJd3ByaW50dyAoc2hvd19wYWQsIlVua25vd24iKTsKKwkJCWJyZWFrOworCX0KKworCXdtb3ZlIChzaG93X3BhZCwxNiw0MCk7CisJaWYgKHR5cGVfZGF0YS51LnRfZXh0Ml9zdXBlcl9ibG9jay5zX3N0YXRlICYgMHgxKQorCQl3cHJpbnR3IChzaG93X3BhZCwiY2xlYW4gIik7CisJZWxzZQorCQl3cHJpbnR3IChzaG93X3BhZCwibm90IGNsZWFuICIpOworCisJaWYgKHR5cGVfZGF0YS51LnRfZXh0Ml9zdXBlcl9ibG9jay5zX3N0YXRlICYgMHgyKQorCQl3cHJpbnR3IChzaG93X3BhZCwid2l0aCBlcnJvcnMgIik7CisJZWxzZQorCQl3cHJpbnR3IChzaG93X3BhZCwid2l0aCBubyBlcnJvcnMiKTsKKworCXdtb3ZlIChzaG93X3BhZCwxNyw0MCk7CisKKwlzd2l0Y2ggKHR5cGVfZGF0YS51LnRfZXh0Ml9zdXBlcl9ibG9jay5zX2Vycm9ycykgeworCQljYXNlIEVYVDJfRVJST1JTX0NPTlRJTlVFOgorCQkJd3ByaW50dyAoc2hvd19wYWQsIkNvbnRpbnVlIik7CisJCQlicmVhazsKKwkJY2FzZSBFWFQyX0VSUk9SU19STzoKKwkJCXdwcmludHcgKHNob3dfcGFkLCJSZW1vdW50IHJlYWQgb25seSIpOworCQkJYnJlYWs7CisJCWNhc2UgRVhUMl9FUlJPUlNfUEFOSUM6CisJCQl3cHJpbnR3IChzaG93X3BhZCwiSXNzdWUga2VybmVsIHBhbmljIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXdwcmludHcgKHNob3dfcGFkLCJVbmtub3duIik7CisJCQlicmVhazsKKwl9CisKKwl3bW92ZSAoc2hvd19wYWQsMjEsNDApOworCisJc3dpdGNoICh0eXBlX2RhdGEudS50X2V4dDJfc3VwZXJfYmxvY2suc19jcmVhdG9yX29zKSB7CisKKwkJY2FzZSBFWFQyX09TX0xJTlVYOgorCQkJd3ByaW50dyAoc2hvd19wYWQsIkxpbnV4IDotKSIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBFWFQyX09TX0hVUkQ6CisJCQl3cHJpbnR3IChzaG93X3BhZCwiSHVyZCIpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXdwcmludHcgKHNob3dfcGFkLCJVbmtub3duIik7CisJCQlicmVhazsKKwl9CisKKwlyZWZyZXNoX3Nob3dfcGFkICgpOworCisJd21vdmUgKHNob3dfd2luLDEsMCk7d3ByaW50dyAoc2hvd193aW4sIlxuIik7d21vdmUgKHNob3dfd2luLDIsMCk7CisJd3ByaW50dyAoc2hvd193aW4sIlN1cGVyYmxvY2sgY29weSAlbGQgIixzdXBlcl9pbmZvLmNvcHlfbnVtKTsKKwlpZiAoc3VwZXJfaW5mby5jb3B5X251bT09MCkKKwkJd3ByaW50dyAoc2hvd193aW4sIihtYWluIGNvcHkpIik7CisJd3ByaW50dyAoc2hvd193aW4sIlxuIik7CisJcmVmcmVzaF9zaG93X3dpbiAoKTsKK30KKwordm9pZCB0eXBlX2V4dDJfc3VwZXJfYmxvY2tfX19nb2NvcHkgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCXVuc2lnbmVkIGxvbmcgY29weV9udW0sb2Zmc2V0OworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0cj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBObyBhcmd1bWVudCBzcGVjaWZpZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuOworCX0KKwlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisKKwljb3B5X251bT1hdG9sIChidWZmZXIpOworCisJb2Zmc2V0PWZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2tfb2Zmc2V0K2NvcHlfbnVtKmZpbGVfc3lzdGVtX2luZm8ubm9fYmxvY2tzX2luX2dyb3VwKmZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKworCWlmIChvZmZzZXQgPiBmaWxlX3N5c3RlbV9pbmZvLmZpbGVfc3lzdGVtX3NpemUpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gQ29weSBudW1iZXIgb3V0IG9mIGJvdW5kc1xuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCisJc3VwZXJfaW5mby5jb3B5X251bT1jb3B5X251bTsKKwlkZXZpY2Vfb2Zmc2V0PW9mZnNldDsKKworCXNwcmludGYgKGJ1ZmZlciwic2V0b2Zmc2V0ICVsZCIsZGV2aWNlX29mZnNldCk7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJc3RyY3B5IChidWZmZXIsInNob3ciKTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKwordm9pZCB0eXBlX2V4dDJfc3VwZXJfYmxvY2tfX19zZXRhY3RpdmVjb3B5IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayBzYjsKKworCXNiPXR5cGVfZGF0YS51LnRfZXh0Ml9zdXBlcl9ibG9jazsKKwlkaXNwYXRjaCAoImdvY29weSAwIik7CisJdHlwZV9kYXRhLnUudF9leHQyX3N1cGVyX2Jsb2NrPXNiOworCWRpc3BhdGNoICgic2hvdyIpOworfQpkaWZmIC0tZ2l0IGEvZXh0MmVkL3dpbi5jIGIvZXh0MmVkL3dpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZDBkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9leHQyZWQvd2luLmMKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisKKy91c3Ivc3JjL2V4dDJlZC93aW4uYworCitBIHBhcnQgb2YgdGhlIGV4dGVuZGVkIGZpbGUgc3lzdGVtIDIgZGlzayBlZGl0b3IuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXaW5kb3cgbWFuYWdlbWVudCAtIEludGVyZmFjaW5nIHdpdGggdGhlIG5jdXJzZXMgbGlicmFyeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlyc3Qgd3JpdHRlbiBvbjogQXByaWwgMTcgMTk5NQorTW9kaWZpZWQgb24gOiBBcHJpbCAwNSAyMDAxIENocmlzdGlhbi5CYWNAaW50LWV2cnkuZnIKK2l0IGxvb2tzIGxpa2UgcmVhZGxpbmUgZG9lcyBub3QgbGlrZSB0aGF0IGluaXRzY3IgZGVjaWRlcyB0byBzZXQgdGhlIHR0eSB0bworbm9lY2hvLgorCitDb3B5cmlnaHQgKEMpIDE5OTUgR2FkaSBPeG1hbgorCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisKKyNpbmNsdWRlICJleHQyZWQuaCIKKyNpbmNsdWRlICIuLi92ZXJzaW9uLmgiCisKK3N0cnVjdCBzdHJ1Y3RfcGFkX2luZm8gc2hvd19wYWRfaW5mbzsKK1dJTkRPVyAqdGl0bGVfd2luLCpzaG93X3dpbiwqY29tbWFuZF93aW4sKm10X3dpbjEsKm10X3dpbjIsKnNob3dfcGFkOworCisvKiB0byByZW1lbWJlciBjb25maWd1cmF0aW9uIGFmdGVyIGluaXRzY3IKKyAqIGFuZCBtb2RpZnkgaXQKKyAqLworc3RydWN0IHRlcm1pb3MgdGVybWlvSW5pdCwgdGVybWlvQ3VycmVudDsKKwordm9pZCBkcmF3X3RpdGxlX3dpbiAodm9pZCkKK3sKKwljaGFyIHRpdGxlX3N0cmluZyBbMTI4XTsKKworCXdlcmFzZSh0aXRsZV93aW4pOworCWJveCAodGl0bGVfd2luLDAsMCk7CisJc3ByaW50ZiAodGl0bGVfc3RyaW5nLCJFWFQyRUQgLSBFeHRlbmRlZC0yIEZpbGUgU3lzdGVtIGVkaXRvciB2ZXIgJXMgKCVzKSIsIEUyRlNQUk9HU19WRVJTSU9OLCBFMkZTUFJPR1NfREFURSk7CisJd21vdmUgKHRpdGxlX3dpbixUSVRMRV9XSU5fTElORVMvMiwoQ09MUy1zdHJsZW4gKHRpdGxlX3N0cmluZykpLzIpOworCXdwcmludHcgKHRpdGxlX3dpbix0aXRsZV9zdHJpbmcpOworCXdyZWZyZXNoKHRpdGxlX3dpbik7Cit9CisKK3ZvaWQgc2V0dXBfc2hvd193aW4odm9pZCkKK3sKKwl3YmtnZHNldCAoc2hvd193aW4sQV9SRVZFUlNFKTt3ZXJhc2UgKHNob3dfd2luKTsKKwlzaG93X3BhZF9pbmZvLmxpbmU9MDsKKwlzaG93X3BhZF9pbmZvLmNvbD0wOworCXNob3dfcGFkX2luZm8uZGlzcGxheV9saW5lcz1MSU5FUy1USVRMRV9XSU5fTElORVMtU0hPV19XSU5fTElORVMtQ09NTUFORF9XSU5fTElORVMtMjsKKwlzaG93X3BhZF9pbmZvLmRpc3BsYXlfY29scz1DT0xTOworCXNob3dfcGFkX2luZm8ubWF4X2xpbmU9c2hvd19wYWRfaW5mby5kaXNwbGF5X2xpbmVzLTE7c2hvd19wYWRfaW5mby5tYXhfY29sPXNob3dfcGFkX2luZm8uZGlzcGxheV9jb2xzLTE7CisJc2hvd19wYWRfaW5mby5kaXNhYmxlX291dHB1dD0wOworfQorCit2b2lkIGluaXRfd2luZG93cyAodm9pZCkKK3sKKwlpbml0c2NyICgpOworCXRjZ2V0YXR0cigwLCZ0ZXJtaW9Jbml0KTsgLyogc2F2ZSBpbml0aWFsIGNvbmZpZyAqLworCXRlcm1pb0N1cnJlbnQgPSB0ZXJtaW9Jbml0OworCXRlcm1pb0N1cnJlbnQuY19sZmxhZyB8PSBFQ0hPOyAvKiBzZXQgZWNobyBvbiAqLworCXRjc2V0YXR0cigwLFRDU0FOT1csJnRlcm1pb0N1cnJlbnQpOworCisJaWYgKExJTkVTPFRJVExFX1dJTl9MSU5FUytTSE9XX1dJTl9MSU5FUytDT01NQU5EX1dJTl9MSU5FUyszKSB7CisJCXByaW50ZiAoIlNvcnJ5LCB5b3VyIHRlcm1pbmFsIHNjcmVlbiBpcyB0b28gc21hbGxcbiIpOworCQlwcmludGYgKCJFcnJvciAtIENhbiBub3QgaW5pdGlhbGl6ZSB3aW5kb3dzXG4iKTsKKwkJZXhpdCAoMSk7CisJfQorCisJdGl0bGVfd2luPW5ld3dpbiAoVElUTEVfV0lOX0xJTkVTLENPTFMsMCwwKTsKKwlzaG93X3dpbj1uZXd3aW4gKFNIT1dfV0lOX0xJTkVTLENPTFMsVElUTEVfV0lOX0xJTkVTLDApOworCXNob3dfcGFkPW5ld3BhZCAoU0hPV19QQURfTElORVMsU0hPV19QQURfQ09MUyk7CisJbXRfd2luMT1uZXd3aW4gKDEsQ09MUyxUSVRMRV9XSU5fTElORVMrU0hPV19XSU5fTElORVMsMCk7CisJbXRfd2luMj1uZXd3aW4gKDEsQ09MUyxMSU5FUy1DT01NQU5EX1dJTl9MSU5FUy0xLDApOworCWNvbW1hbmRfd2luPW5ld3dpbiAoQ09NTUFORF9XSU5fTElORVMsQ09MUyxMSU5FUy1DT01NQU5EX1dJTl9MSU5FUywwKTsKKworCWlmICh0aXRsZV93aW49PU5VTEwgfHwgc2hvd193aW49PU5VTEwgfHwgc2hvd19wYWQ9PU5VTEwgfHwgY29tbWFuZF93aW49PU5VTEwpIHsKKwkJcHJpbnRmICgiRXJyb3IgLSBOb3QgZW5vdWdoIG1lbW9yeSAtIENhbiBub3QgaW5pdGlhbGl6ZSB3aW5kb3dzXG4iKTtleGl0ICgxKTsKKwl9CisKKwlkcmF3X3RpdGxlX3dpbigpOworCisJc2V0dXBfc2hvd193aW4oKTsKKworCXNjcm9sbG9rIChjb21tYW5kX3dpbixUUlVFKTsKKworCXJlZnJlc2hfdGl0bGVfd2luICgpOworCXJlZnJlc2hfc2hvd193aW4gKCk7CisJcmVmcmVzaF9zaG93X3BhZCgpOworCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJd3JlZnJlc2gobXRfd2luMSk7CisJd3JlZnJlc2gobXRfd2luMik7Cit9CisKK3ZvaWQgcmVmcmVzaF90aXRsZV93aW4gKHZvaWQpCit7CisJd3JlZnJlc2ggKHRpdGxlX3dpbik7Cit9CisKK3ZvaWQgcmVmcmVzaF9zaG93X3dpbiAodm9pZCkKK3sKKwlpbnQgY3VycmVudF9wYWdlLHRvdGFsX3BhZ2VzOworCisJY3VycmVudF9wYWdlPXNob3dfcGFkX2luZm8ubGluZS9zaG93X3BhZF9pbmZvLmRpc3BsYXlfbGluZXMrMTsKKwlpZiAoc2hvd19wYWRfaW5mby5saW5lJXNob3dfcGFkX2luZm8uZGlzcGxheV9saW5lcykKKwkJY3VycmVudF9wYWdlKys7CisJdG90YWxfcGFnZXM9c2hvd19wYWRfaW5mby5tYXhfbGluZS9zaG93X3BhZF9pbmZvLmRpc3BsYXlfbGluZXMrMTsKKworCXdtb3ZlIChzaG93X3dpbiwyLENPTFMtMTgpOworCXdwcmludHcgKHNob3dfd2luLCJQYWdlICVkIG9mICVkXG4iLGN1cnJlbnRfcGFnZSx0b3RhbF9wYWdlcyk7CisKKwl3bW92ZSAoc2hvd193aW4sMixDT0xTLTE4KTsKKwl3cmVmcmVzaCAoc2hvd193aW4pOworfQorCisKK3ZvaWQgcmVmcmVzaF9zaG93X3BhZCAodm9pZCkKKworeworCWludCBsZWZ0LHRvcCxyaWdodCxib3R0b20saTsKKworCWlmIChzaG93X3BhZF9pbmZvLmRpc2FibGVfb3V0cHV0KQorCQlyZXR1cm47CisKKwlpZiAoc2hvd19wYWRfaW5mby5tYXhfbGluZSA8IHNob3dfcGFkX2luZm8uZGlzcGxheV9saW5lcy0xKSB7CisJCWZvciAoaT1zaG93X3BhZF9pbmZvLm1heF9saW5lKzE7aTxzaG93X3BhZF9pbmZvLmRpc3BsYXlfbGluZXM7aSsrKSB7CisJCQl3bW92ZSAoc2hvd19wYWQsaSwwKTt3cHJpbnR3IChzaG93X3BhZCwiXG4iKTsKKwkJfQorCX0KKwlsZWZ0PTA7cmlnaHQ9c2hvd19wYWRfaW5mby5kaXNwbGF5X2NvbHMtMTsKKwl0b3A9VElUTEVfV0lOX0xJTkVTK1NIT1dfV0lOX0xJTkVTKzE7Ym90dG9tPXRvcCtzaG93X3BhZF9pbmZvLmRpc3BsYXlfbGluZXMtMTsKKworCWlmIChzaG93X3BhZF9pbmZvLmxpbmUgPiBzaG93X3BhZF9pbmZvLm1heF9saW5lLXNob3dfcGFkX2luZm8uZGlzcGxheV9saW5lcysxKQorCQlzaG93X3BhZF9pbmZvLmxpbmU9c2hvd19wYWRfaW5mby5tYXhfbGluZS1zaG93X3BhZF9pbmZvLmRpc3BsYXlfbGluZXMrMTsKKworCWlmIChzaG93X3BhZF9pbmZvLmxpbmUgPCAwKQorCQlzaG93X3BhZF9pbmZvLmxpbmU9MDsKKworI2lmZGVmIE9MRF9OQ1VSU0VTCisJcHJlZnJlc2ggKHNob3dfcGFkLHNob3dfcGFkX2luZm8ubGluZSxzaG93X3BhZF9pbmZvLmNvbCx0b3AsbGVmdCxzaG93X3BhZF9pbmZvLmRpc3BsYXlfbGluZXMtMSxzaG93X3BhZF9pbmZvLmRpc3BsYXlfY29scy0xKTsKKyNlbHNlCisJcHJlZnJlc2ggKHNob3dfcGFkLHNob3dfcGFkX2luZm8ubGluZSxzaG93X3BhZF9pbmZvLmNvbCx0b3AsbGVmdCx0b3Arc2hvd19wYWRfaW5mby5kaXNwbGF5X2xpbmVzLTEsbGVmdCtzaG93X3BhZF9pbmZvLmRpc3BsYXlfY29scy0xKTsKKyNlbmRpZgorfQorCit2b2lkIHJlZnJlc2hfY29tbWFuZF93aW4gKHZvaWQpCit7CisJd3JlZnJlc2ggKGNvbW1hbmRfd2luKTsKK30KKwordm9pZCBjbG9zZV93aW5kb3dzICh2b2lkKQoreworLy8JZWNobyAoKTsKKwl0Y3NldGF0dHIoMCxUQ1NBTk9XLCZ0ZXJtaW9Jbml0KTsKKworCWRlbHdpbiAodGl0bGVfd2luKTsKKwlkZWx3aW4gKGNvbW1hbmRfd2luKTsKKwlkZWx3aW4gKHNob3dfd2luKTsKKwlkZWx3aW4gKHNob3dfcGFkKTsKKworCWVuZHdpbiAoKTsKK30KKwordm9pZCBzaG93X2luZm8gKHZvaWQpCit7CisJaW50IGJsb2NrX251bSxibG9ja19vZmZzZXQ7CisKKwlibG9ja19udW09ZGV2aWNlX29mZnNldC9maWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisJYmxvY2tfb2Zmc2V0PWRldmljZV9vZmZzZXQlZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplOworCisJd21vdmUgKHNob3dfd2luLDAsMCk7CisJd3ByaW50dyAoc2hvd193aW4sIk9mZnNldCAlLTNsZCBpbiBibG9jayAlbGQuICIsYmxvY2tfb2Zmc2V0LGJsb2NrX251bSk7CisJaWYgKGN1cnJlbnRfdHlwZSAhPSBOVUxMKQorCQl3cHJpbnR3IChzaG93X3dpbiwiVHlwZTogJXNcbiIsY3VycmVudF90eXBlLT5uYW1lKTsKKwllbHNlCisJCXdwcmludHcgKHNob3dfd2luLCJUeXBlOiAlc1xuIiwibm9uZSIpOworCisJcmVmcmVzaF9zaG93X3dpbiAoKTsKK30KKworCit2b2lkIHJlZHJhd19hbGwgKHZvaWQpCit7CisJaW50IG1pbl9saW5lcyA9IFRJVExFX1dJTl9MSU5FUytTSE9XX1dJTl9MSU5FUytDT01NQU5EX1dJTl9MSU5FUyszOworCXN0cnVjdCB3aW5zaXplIHdzOworCWludAlzYXZlX2NvbCwgc2F2ZV9saW5lczsKKworCS8qIGdldCB0aGUgc2l6ZSBvZiB0aGUgdGVybWluYWwgY29ubmVjdGVkIHRvIHN0ZG91dCAqLworCWlvY3RsKDEsIFRJT0NHV0lOU1osICZ3cyk7CisJLyoKKwkgKiBEbyBpdCBhZ2FpbiBiZWNhdXNlIEdEQiBkb2Vzbid0IHN0b3AgYmVmb3JlIHRoZSBmaXJzdCBpb2N0bAorCSAqIGNhbGwsIHdlIHdhbnQgYW4gdXAtdG8tZGF0ZSBzaXplIHdoZW4gd2UncmUKKwkgKiBzaW5nbGUtc3RlcHBpbmcuCisJICovCisJaWYgKGlvY3RsKDEsIFRJT0NHV0lOU1osICZ3cykgPT0gMCkgeworCQlpZiAod3Mud3Nfcm93IDwgbWluX2xpbmVzKQorCQkJd3Mud3Nfcm93ID0gbWluX2xpbmVzOworCQlpZiAoKHdzLndzX3JvdyAhPSBMSU5FUykgfHwgKHdzLndzX2NvbCAhPSBDT0xTKSkgeworCQkJd21vdmUgKHNob3dfd2luLDIsQ09MUy0xOCk7CisJCQl3Y2xydG9lb2woc2hvd193aW4pOworCQkJd3JlZnJlc2goc2hvd193aW4pOworCQkJcmVzaXpldGVybSh3cy53c19yb3csIHdzLndzX2NvbCk7CisJCQl3cmVzaXplKHRpdGxlX3dpbiwgVElUTEVfV0lOX0xJTkVTLENPTFMpOworCQkJd3Jlc2l6ZShzaG93X3dpbiwgU0hPV19XSU5fTElORVMsQ09MUyk7CisJCQl3cmVzaXplKGNvbW1hbmRfd2luLCBDT01NQU5EX1dJTl9MSU5FUyxDT0xTKTsKKwkJCXdyZXNpemUobXRfd2luMSwgMSxDT0xTKTsKKwkJCXdyZXNpemUobXRfd2luMiwgMSxDT0xTKTsKKwkJCW12d2luKG10X3dpbjIsIExJTkVTLUNPTU1BTkRfV0lOX0xJTkVTLTEsMCk7CisJCQltdndpbihjb21tYW5kX3dpbiwgTElORVMtQ09NTUFORF9XSU5fTElORVMsMCk7CisJCQlkcmF3X3RpdGxlX3dpbigpOworCQkJc2hvd19wYWRfaW5mby5kaXNwbGF5X2xpbmVzPUxJTkVTLVRJVExFX1dJTl9MSU5FUy1TSE9XX1dJTl9MSU5FUy1DT01NQU5EX1dJTl9MSU5FUy0yOworCQkJc2hvd19wYWRfaW5mby5kaXNwbGF5X2NvbHM9Q09MUzsKKwkJfQorCX0KKwljbGVhcm9rKHRpdGxlX3dpbiwgMSk7CisJY2xlYXJvayhzaG93X3dpbiwgMSk7CisJY2xlYXJvayhjb21tYW5kX3dpbiwgMSk7CisJY2xlYXJvayhtdF93aW4xLCAxKTsKKwljbGVhcm9rKG10X3dpbjIsIDEpOworCXdyZWZyZXNoKG10X3dpbjEpOworCXdyZWZyZXNoKG10X3dpbjIpOworCXJlZnJlc2hfc2hvd19wYWQoKTsKKwlyZWZyZXNoX3Nob3dfd2luKCk7CisJcmVmcmVzaF90aXRsZV93aW4gKCk7CisJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbm9udW5peC9hc20vdHlwZXMuaCBiL2luY2x1ZGUvbm9udW5peC9hc20vdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDFjODg5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9ub251bml4L2FzbS90eXBlcy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlICIuLi9saW51eC90eXBlcy5oIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ub251bml4L2NvbmZpZy5oIGIvaW5jbHVkZS9ub251bml4L2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNjlkMjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25vbnVuaXgvY29uZmlnLmgKQEAgLTAsMCArMSwyMSBAQAorCisjZGVmaW5lIF9JTk9fVF9ERUZJTkVEIDEKKworI2RlZmluZSBIQVZFX1NURExJQl9IICAxCisjZGVmaW5lIEhBVkVfU1RSSU5HX0ggIDEKKyNkZWZpbmUgSEFWRV9HRVRPUFRfSCAgMQorI2RlZmluZSBIQVZFX0VSUk5PX0ggICAxCisjZGVmaW5lIEhBVkVfU0VUSk1QX0ggIDEKKworI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMQorI2RlZmluZSBzdHJjYXNlY21wICAgICBfc3RyaWNtcAorI2RlZmluZSBzdHJuY2FzZWNtcCAgICAgX3N0cm5pY21wCisKKyNkZWZpbmUgSEFWRV9DT05JT19IICAgMQorCisjZGVmaW5lIEhBVkVfRVhUMl9JTk9ERV9WRVJTSU9OIDEKKworI2RlZmluZSBpbmxpbmUgX19mb3JjZWlubGluZQorCisjZGVmaW5lIF9DVFlQRV9ESVNBQkxFX01BQ1JPUworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25vbnVuaXgvZGlyZW50LmggYi9pbmNsdWRlL25vbnVuaXgvZGlyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbm9udW5peC9kaXJlbnQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ub251bml4L2dldG9wdC5oIGIvaW5jbHVkZS9ub251bml4L2dldG9wdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYWQ0NmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25vbnVuaXgvZ2V0b3B0LmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qIERlY2xhcmF0aW9ucyBmb3IgZ2V0b3B0LgorICAgQ29weXJpZ2h0IChDKSAxOTg5LDkwLDkxLDkyLDkzLDk0LDk2LDk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LAorICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisjaWZuZGVmIF9HRVRPUFRfSAorI2RlZmluZSBfR0VUT1BUX0ggMQorCisjaWZkZWYJX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZm5kZWYgR0VUT1BUX1ZBUklBQkxFCisjZGVmaW5lIEdFVE9QVF9WQVJJQUJMRQorI2VuZGlmCisKKy8qIEZvciBjb21tdW5pY2F0aW9uIGZyb20gYGdldG9wdCcgdG8gdGhlIGNhbGxlci4KKyAgIFdoZW4gYGdldG9wdCcgZmluZHMgYW4gb3B0aW9uIHRoYXQgdGFrZXMgYW4gYXJndW1lbnQsCisgICB0aGUgYXJndW1lbnQgdmFsdWUgaXMgcmV0dXJuZWQgaGVyZS4KKyAgIEFsc28sIHdoZW4gYG9yZGVyaW5nJyBpcyBSRVRVUk5fSU5fT1JERVIsCisgICBlYWNoIG5vbi1vcHRpb24gQVJHVi1lbGVtZW50IGlzIHJldHVybmVkIGhlcmUuICAqLworCitleHRlcm4gR0VUT1BUX1ZBUklBQkxFIGNoYXIgKm9wdGFyZzsKKworLyogSW5kZXggaW4gQVJHViBvZiB0aGUgbmV4dCBlbGVtZW50IHRvIGJlIHNjYW5uZWQuCisgICBUaGlzIGlzIHVzZWQgZm9yIGNvbW11bmljYXRpb24gdG8gYW5kIGZyb20gdGhlIGNhbGxlcgorICAgYW5kIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gc3VjY2Vzc2l2ZSBjYWxscyB0byBgZ2V0b3B0Jy4KKworICAgT24gZW50cnkgdG8gYGdldG9wdCcsIHplcm8gbWVhbnMgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbDsgaW5pdGlhbGl6ZS4KKworICAgV2hlbiBgZ2V0b3B0JyByZXR1cm5zIC0xLCB0aGlzIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb2YgdGhlCisgICBub24tb3B0aW9uIGVsZW1lbnRzIHRoYXQgdGhlIGNhbGxlciBzaG91bGQgaXRzZWxmIHNjYW4uCisKKyAgIE90aGVyd2lzZSwgYG9wdGluZCcgY29tbXVuaWNhdGVzIGZyb20gb25lIGNhbGwgdG8gdGhlIG5leHQKKyAgIGhvdyBtdWNoIG9mIEFSR1YgaGFzIGJlZW4gc2Nhbm5lZCBzbyBmYXIuICAqLworCitleHRlcm4gR0VUT1BUX1ZBUklBQkxFIGludCBvcHRpbmQ7CisKKy8qIENhbGxlcnMgc3RvcmUgemVybyBoZXJlIHRvIGluaGliaXQgdGhlIGVycm9yIG1lc3NhZ2UgYGdldG9wdCcgcHJpbnRzCisgICBmb3IgdW5yZWNvZ25pemVkIG9wdGlvbnMuICAqLworCitleHRlcm4gR0VUT1BUX1ZBUklBQkxFIGludCBvcHRlcnI7CisKKy8qIFNldCB0byBhbiBvcHRpb24gY2hhcmFjdGVyIHdoaWNoIHdhcyB1bnJlY29nbml6ZWQuICAqLworCitleHRlcm4gR0VUT1BUX1ZBUklBQkxFIGludCBvcHRvcHQ7CisKKy8qIERlc2NyaWJlIHRoZSBsb25nLW5hbWVkIG9wdGlvbnMgcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAgIFRoZSBMT05HX09QVElPTlMgYXJndW1lbnQgdG8gZ2V0b3B0X2xvbmcgb3IgZ2V0b3B0X2xvbmdfb25seSBpcyBhIHZlY3RvcgorICAgb2YgYHN0cnVjdCBvcHRpb24nIHRlcm1pbmF0ZWQgYnkgYW4gZWxlbWVudCBjb250YWluaW5nIGEgbmFtZSB3aGljaCBpcworICAgemVyby4KKworICAgVGhlIGZpZWxkIGBoYXNfYXJnJyBpczoKKyAgIG5vX2FyZ3VtZW50CQkob3IgMCkgaWYgdGhlIG9wdGlvbiBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50LAorICAgcmVxdWlyZWRfYXJndW1lbnQJKG9yIDEpIGlmIHRoZSBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQsCisgICBvcHRpb25hbF9hcmd1bWVudCAJKG9yIDIpIGlmIHRoZSBvcHRpb24gdGFrZXMgYW4gb3B0aW9uYWwgYXJndW1lbnQuCisKKyAgIElmIHRoZSBmaWVsZCBgZmxhZycgaXMgbm90IE5VTEwsIGl0IHBvaW50cyB0byBhIHZhcmlhYmxlIHRoYXQgaXMgc2V0CisgICB0byB0aGUgdmFsdWUgZ2l2ZW4gaW4gdGhlIGZpZWxkIGB2YWwnIHdoZW4gdGhlIG9wdGlvbiBpcyBmb3VuZCwgYnV0CisgICBsZWZ0IHVuY2hhbmdlZCBpZiB0aGUgb3B0aW9uIGlzIG5vdCBmb3VuZC4KKworICAgVG8gaGF2ZSBhIGxvbmctbmFtZWQgb3B0aW9uIGRvIHNvbWV0aGluZyBvdGhlciB0aGFuIHNldCBhbiBgaW50JyB0bworICAgYSBjb21waWxlZC1pbiBjb25zdGFudCwgc3VjaCBhcyBzZXQgYSB2YWx1ZSBmcm9tIGBvcHRhcmcnLCBzZXQgdGhlCisgICBvcHRpb24ncyBgZmxhZycgZmllbGQgdG8gemVybyBhbmQgaXRzIGB2YWwnIGZpZWxkIHRvIGEgbm9uemVybworICAgdmFsdWUgKHRoZSBlcXVpdmFsZW50IHNpbmdsZS1sZXR0ZXIgb3B0aW9uIGNoYXJhY3RlciwgaWYgdGhlcmUgaXMKKyAgIG9uZSkuICBGb3IgbG9uZyBvcHRpb25zIHRoYXQgaGF2ZSBhIHplcm8gYGZsYWcnIGZpZWxkLCBgZ2V0b3B0JworICAgcmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhlIGB2YWwnIGZpZWxkLiAgKi8KKworc3RydWN0IG9wdGlvbgoreworI2lmIGRlZmluZWQgKF9fU1REQ19fKSAmJiBfX1NURENfXworICBjb25zdCBjaGFyICpuYW1lOworI2Vsc2UKKyAgY2hhciAqbmFtZTsKKyNlbmRpZgorICAvKiBoYXNfYXJnIGNhbid0IGJlIGFuIGVudW0gYmVjYXVzZSBzb21lIGNvbXBpbGVycyBjb21wbGFpbiBhYm91dAorICAgICB0eXBlIG1pc21hdGNoZXMgaW4gYWxsIHRoZSBjb2RlIHRoYXQgYXNzdW1lcyBpdCBpcyBhbiBpbnQuICAqLworICBpbnQgaGFzX2FyZzsKKyAgaW50ICpmbGFnOworICBpbnQgdmFsOworfTsKKworLyogTmFtZXMgZm9yIHRoZSB2YWx1ZXMgb2YgdGhlIGBoYXNfYXJnJyBmaWVsZCBvZiBgc3RydWN0IG9wdGlvbicuICAqLworCisjZGVmaW5lCW5vX2FyZ3VtZW50CQkwCisjZGVmaW5lIHJlcXVpcmVkX2FyZ3VtZW50CTEKKyNkZWZpbmUgb3B0aW9uYWxfYXJndW1lbnQJMgorCisjaWYgZGVmaW5lZCAoX19TVERDX18pICYmIF9fU1REQ19fCisjaWZkZWYgX19HTlVfTElCUkFSWV9fCisvKiBNYW55IG90aGVyIGxpYnJhcmllcyBoYXZlIGNvbmZsaWN0aW5nIHByb3RvdHlwZXMgZm9yIGdldG9wdCwgd2l0aAorICAgZGlmZmVyZW5jZXMgaW4gdGhlIGNvbnN0cywgaW4gc3RkbGliLmguICBUbyBhdm9pZCBjb21waWxhdGlvbgorICAgZXJyb3JzLCBvbmx5IHByb3RvdHlwZSBnZXRvcHQgZm9yIHRoZSBHTlUgQyBsaWJyYXJ5LiAgKi8KK2V4dGVybiBpbnQgZ2V0b3B0IChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKnNob3J0b3B0cyk7CisjZWxzZSAvKiBub3QgX19HTlVfTElCUkFSWV9fICovCitleHRlcm4gaW50IGdldG9wdCAoKTsKKyNlbmRpZiAvKiBfX0dOVV9MSUJSQVJZX18gKi8KK2V4dGVybiBpbnQgZ2V0b3B0X2xvbmcgKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwgY29uc3QgY2hhciAqc2hvcnRvcHRzLAorCQkgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmQpOworZXh0ZXJuIGludCBnZXRvcHRfbG9uZ19vbmx5IChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsCisJCQkgICAgIGNvbnN0IGNoYXIgKnNob3J0b3B0cywKKwkJICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmQpOworCisvKiBJbnRlcm5hbCBvbmx5LiAgVXNlcnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHkuICAqLworZXh0ZXJuIGludCBfZ2V0b3B0X2ludGVybmFsIChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsCisJCQkgICAgIGNvbnN0IGNoYXIgKnNob3J0b3B0cywKKwkJICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmQsCisJCQkgICAgIGludCBsb25nX29ubHkpOworI2Vsc2UgLyogbm90IF9fU1REQ19fICovCitleHRlcm4gaW50IGdldG9wdCAoKTsKK2V4dGVybiBpbnQgZ2V0b3B0X2xvbmcgKCk7CitleHRlcm4gaW50IGdldG9wdF9sb25nX29ubHkgKCk7CisKK2V4dGVybiBpbnQgX2dldG9wdF9pbnRlcm5hbCAoKTsKKyNlbmRpZiAvKiBfX1NURENfXyAqLworCisjaWZkZWYJX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX0dFVE9QVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25vbnVuaXgvZ3JwLmggYi9pbmNsdWRlL25vbnVuaXgvZ3JwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwMTliZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbm9udW5peC9ncnAuaApAQCAtMCwwICsxLDE3IEBACisKKyNwcmFnbWEgb25jZQorCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fZ2lkX3Q7CitfX2lubGluZSBfX2dpZF90IGdldGdpZCh2b2lkKXtyZXR1cm4gMDt9CitfX2lubGluZSBzdHJ1Y3QgZ3JvdXAgKiBnZXRncm5hbShjaGFyKiBnKXtyZXR1cm4gMDt9CisKK3N0cnVjdCBncm91cAorICB7CisgICAgY2hhciAqZ3JfbmFtZTsKKyAgICBjaGFyICpncl9wYXNzd2Q7CisgICAgX19naWRfdCBncl9naWQ7CisgICAgY2hhciAqKmdyX21lbTsKKyAgfTsKKworI2RlZmluZSBnZXRncmdpZChpKSBOVUxMCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbm9udW5peC9saW51eC90eXBlcy5oIGIvaW5jbHVkZS9ub251bml4L2xpbnV4L3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1YmM5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbm9udW5peC9saW51eC90eXBlcy5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX0xJTlVYX1RZUEVTX0gKKyNkZWZpbmUgX0xJTlVYX1RZUEVTX0gKKworI2lmbmRlZiBfTVNDX1ZFUgorI2Vycm9yICBfTVNDX1ZFUiBub3QgZGVmaW5lZAorI2VuZGlmCisKKwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDggX191ODsKK3R5cGVkZWYgc2lnbmVkIF9faW50OCBfX3M4OworCit0eXBlZGVmIHNpZ25lZCAgIF9faW50NjQgX19zNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgX191NjQ7CisKK3R5cGVkZWYJc2lnbmVkICAgX19pbnQxNglfX3MxNjsKK3R5cGVkZWYJdW5zaWduZWQgX19pbnQxNglfX3UxNjsKKwordHlwZWRlZglzaWduZWQgICBfX2ludDMyCV9fczMyOwordHlwZWRlZgl1bnNpZ25lZCBfX2ludDMyCV9fdTMyOworCit0eXBlZGVmCXNpZ25lZCAgIF9faW50NjQJX19zNjQ7Cit0eXBlZGVmCXVuc2lnbmVkIF9faW50NjQJX191NjQ7CisKKwordHlwZWRlZiBfX3UzMiBpbm9fdDsKKworCisjZW5kaWYgLyogTElOVVhfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ub251bml4L3B3ZC5oIGIvaW5jbHVkZS9ub251bml4L3B3ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjRlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25vbnVuaXgvcHdkLmgKQEAgLTAsMCArMSwyMiBAQAorCisjcHJhZ21hIG9uY2UKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3VpZF90OworX19pbmxpbmUgX191aWRfdCBnZXR1aWQodm9pZCl7cmV0dXJuIDA7fQorX19pbmxpbmUgaW50IGdldGV1aWQodm9pZCl7cmV0dXJuIDE7fQorX19pbmxpbmUgc3RydWN0IHBhc3N3ZCogZ2V0cHduYW0gKGNoYXIqIGcpe3JldHVybiAwO30KKworCitzdHJ1Y3QgcGFzc3dkCit7CisgIGNoYXIgKnB3X25hbWU7CisgIGNoYXIgKnB3X3Bhc3N3ZDsKKyAgX191aWRfdCBwd191aWQ7CisgIF9fZ2lkX3QgcHdfZ2lkOworICBjaGFyICpwd19nZWNvczsKKyAgY2hhciAqcHdfZGlyOworICBjaGFyICpwd19zaGVsbDsKK307CisKKyNkZWZpbmUgZ2V0cHd1aWQoaSkgTlVMTAorCmRpZmYgLS1naXQgYS9pbmNsdWRlL25vbnVuaXgvc3lzL2ZpbGUuaCBiL2luY2x1ZGUvbm9udW5peC9zeXMvZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25vbnVuaXgvc3lzL2ZpbGUuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ub251bml4L3N5cy9pb2N0bC5oIGIvaW5jbHVkZS9ub251bml4L3N5cy9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25vbnVuaXgvc3lzL2lvY3RsLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbm9udW5peC9zeXMvcGFyYW0uaCBiL2luY2x1ZGUvbm9udW5peC9zeXMvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9ub251bml4L3N5cy9wYXJhbS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL25vbnVuaXgvc3lzL3Jlc291cmNlLmggYi9pbmNsdWRlL25vbnVuaXgvc3lzL3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbm9udW5peC9zeXMvcmVzb3VyY2UuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ub251bml4L3N5cy9zb2NrZXQuaCBiL2luY2x1ZGUvbm9udW5peC9zeXMvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbm9udW5peC9zeXMvc29ja2V0LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbm9udW5peC9zeXMvdGltZS5oIGIvaW5jbHVkZS9ub251bml4L3N5cy90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmZDE4NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbm9udW5peC9zeXMvdGltZS5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDx0aW1lLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25vbnVuaXgvc3lzL3dhaXQuaCBiL2luY2x1ZGUvbm9udW5peC9zeXMvd2FpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25vbnVuaXgvc3lzL3dhaXQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ub251bml4L3Rlcm1pb3MuaCBiL2luY2x1ZGUvbm9udW5peC90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbm9udW5peC90ZXJtaW9zLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbm9udW5peC91bmlzdGQuaCBiL2luY2x1ZGUvbm9udW5peC91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDUzNTg3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9ub251bml4L3VuaXN0ZC5oCkBAIC0wLDAgKzEsNDkgQEAKKworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHByb2Nlc3MuaD4KKyNpbmNsdWRlIDxpby5oPgorCisjZGVmaW5lIEVPUE5PVFNVUFAgIDk1CisKKyNkZWZpbmUgT19OT05CTE9DSyAgMAorI2RlZmluZSBPX1JET05MWSAgICBfT19SRE9OTFkKKyNkZWZpbmUgT19SRFdSICAgICAgX09fUkRXUgorCisjZGVmaW5lIHBvcGVuICAgX3BvcGVuCisjZGVmaW5lIHBjbG9zZSAgX3BjbG9zZQorI2RlZmluZSBzbGVlcCAgIF9zbGVlcAorI2RlZmluZSBzdGF0ICAgIF9zdGF0CisjZGVmaW5lIG9wZW4gICAgX29wZW4KKyNkZWZpbmUgY2xvc2UgICBfY2xvc2UKKyNkZWZpbmUgZnN0YXQgICBfZnN0YXQKKyNkZWZpbmUgcmVhZCAgICBfcmVhZAorI2RlZmluZSB3cml0ZSAgIF93cml0ZQorI2RlZmluZSBvZmZfdCAgIF9vZmZfdAorI2RlZmluZSBsc2VlayAgIF9sc2VlaworI2RlZmluZSBwdXRlbnYgIF9wdXRlbnYKKyNkZWZpbmUgZ2V0cGlkICBfZ2V0cGlkCisjZGVmaW5lIHV0aW1idWYgX3V0aW1idWYKKyNkZWZpbmUgc3lzX25lcnIgX3N5c19uZXJyCisjZGVmaW5lIHN5c19lcnJsaXN0IF9zeXNfZXJybGlzdAorI2RlZmluZSBpc2F0dHkgX2lzYXR0eQorI2RlZmluZSBnZXRjaCBfZ2V0Y2gKKworI2luY2x1ZGUgPGdycC5oPgorI2luY2x1ZGUgPHB3ZC5oPgorCisKKy8vIG5vLW9wZWQgc3luYworX19pbmxpbmUgdm9pZCBzeW5jKHZvaWQpe307CisKKworCisjZGVmaW5lIGdldHRpbWVvZmRheShwLCB2KSAoKHApLT50dl9zZWMgPSAocCktPnR2X3VzZWMgPSAwKQorCisKKyNkZWZpbmUgc3RyY2FzZWNtcCBfc3RyaWNtcAorCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ub251bml4L3V0aW1lLmggYi9pbmNsdWRlL25vbnVuaXgvdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mjg1ZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9ub251bml4L3V0aW1lLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPHN5cy91dGltZS5oPgpkaWZmIC0tZ2l0IGEvaW5zdGFsbC11dGlscy9jb21waWxlX21hbnBhZ2VzIGIvaW5zdGFsbC11dGlscy9jb21waWxlX21hbnBhZ2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiM2JiZGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbnN0YWxsLXV0aWxzL2NvbXBpbGVfbWFucGFnZXMKQEAgLTAsMCArMSwxOCBAQAorIyEvYmluL3NoCisKK01BTjg9ImRlYnVnZnMgYmFkYmxvY2tzIGUyZnNjayBta2UyZnMgZHVtcGUyZnMgbWtsb3N0K2ZvdW5kIFwKKwlmc2NrIHR1bmUyZnMiCitNQU4xPSJsc2F0dHIgY2hhdHRyIgorCitmb3IgaSBpbiAkTUFOOAorZG8KKwltYW4gLVMgOCAkaSA+IC9kZXYvbnVsbAorZG9uZQorCisKK2ZvciBpIGluICRNQU4xCitkbworCW1hbiAtUyAxICRpID4gL2Rldi9udWxsCitkb25lCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvaW5zdGFsbC11dGlscy9jb252ZnN0YWIgYi9pbnN0YWxsLXV0aWxzL2NvbnZmc3RhYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTE2MGJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5zdGFsbC11dGlscy9jb252ZnN0YWIKQEAgLTAsMCArMSw3OCBAQAorIyEvYmluL3NoCisjICBNYWtlIC9ldGMvZnN0YWIgc3RhbmRhcmQgY29tcGxpYW50LgorIyAgTS5XZWxsZXIgKGVvd21vYkBleHAtbWF0aC51bmktZXNzZW4uZGUpIDEzLjExLjE5OTQuCisjICBUaGlzIHNjcmlwdCBpcyBwdWJsaWMgZG9tYWluLiBTdGlsbCBpZiBvbmx5IHNsaWdodGx5CisjICBtb2RpZmllZCBhIGNyZWRpdCB0byBtZSBtaWdodCBiZSBuaWNlLgorCitST09UX1BBU1M9MQkJIyBQYXNzIGZvciByb290IGZpbGUgc3lzdGVtCitOT05fUk9PVF9QQVNTPTIJCSMgUGFzcyBmb3Igbm9uIHJvb3QgZmlsZSBzeXN0ZW1zCitERUZfRkxBR1M9ImRlZmF1bHRzIgkjIERlZmF1bHQgZmlsZXN5c2ZsYWdzCitERUZfRFVNUD0wCQkjIERlZmF1bHQgZHVtcGZyZXEuCisJCit3aGlsZSByZWFkIExJTkUKK2RvCisgIHNldCAtLSAkTElORQorICBpZiBbICQjICE9IDAgXQorICB0aGVuCisgICAgY2FzZSAkMSBpbgorICAgICAgXCMqIHwgISogKQorCWVjaG8gIiRMSU5FIgorCSMgIEFjdHVhbGx5IHRoZXJlIGFyZSBubyBjb21tZW50cyBhbGxvd2VkIGluIC9ldGMvZnN0YWIKKwllY2hvICJXYXJuaW5nOiBjb21tZW50IGluIC9ldGMvZnN0YWIgZGV0ZWN0ZWQuIiA+JjIKKwllY2hvICJQbGVhc2UgcmVtb3ZlIGl0IGJ5IGhhbmQuIiA+JjIKKwk7OworICAgICAgKiApCisJaWYgWyAkIyAtZ3QgNiBdIHx8IFsgJCMgLWx0IDMgXQorCXRoZW4KKwkgIGVjaG8gIkRvbid0IGhhdmUgYSBjbHVlIGFib3V0IFwiJExJTkVcIi4iID4mMgorCSAgZWNobyAiJExJTkUiCisJZWxzZQorCSAgY2FzZSAkMiBpbgorCSAgICAvICkKKwkgICAgICBQQVNTPSRST09UX1BBU1MKKwkgICAgICA7OworCSAgICBub25lICkKKwkgICAgICBQQVNTPTAKKwkgICAgICA7OworCSAgICAqICkKKwkgICAgICBQQVNTPSROT05fUk9PVF9QQVNTCisJICAgICAgOzsKKwkgIGVzYWMKKwkgIERVTVA9JERFRl9EVU1QCisJICBjYXNlICQzIGluCisJICAgIGlnbm9yZSB8IGlzbzk2NjAgfCBtc2RvcyB8IGhwZnMgfCBzeXN2IHwgXAorCQkgIHhlbml4IHwgY29oZXJlbnQgfCBuZnMgfCBwcm9jIHwgc3cgfCBzd2FwICkKKwkgICAgICBEVU1QPTA7CisJICAgICAgUEFTUz0wOworCSAgICAgIDs7CisJICBlc2FjCisJICBjYXNlICQjIGluCisJICAgIDMgKQorCSAgICAgIGVjaG8gIiRMSU5FCSRERUZfRkxBR1MJJERVTVAJJFBBU1MiCisJICAgICAgOzsKKwkgICAgNCApCisJICAgICAgZWNobyAiJExJTkUJJERVTVAJJFBBU1MiCisJICAgICAgOzsKKwkgICAgNSApCisJICAgICAgZWNobyAiJExJTkUJJFBBU1MiCisJICAgICAgOzsKKwkgICAgNikKKwkgICAgICBlY2hvICIkTElORSIKKwkgICAgICA7OworCSAgZXNhYworCWZpCisJOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBlY2hvICJXYXJuaW5nOiBPbmUgZW1wdHkgbGluZSByZW1vdmVkLiIgPiYyCisgIGZpCitkb25lIDwvZXRjL2ZzdGFiID4vdG1wL25ld2ZzdGFiLiQkCittdiAtZiAvZXRjL2ZzdGFiIC9ldGMvZnN0YWIuYmFrCittdiAtZiAvdG1wL25ld2ZzdGFiLiQkIC9ldGMvZnN0YWIKK2lmIFsgJD8gIT0gMCBdCit0aGVuCisgIGVjaG8gIkluc3RhbGxhdGlvbiBvZiBwYXRjaGVkIC9ldGMvZnN0YWIgZmFpbGVkLiIKKyAgZWNobyAiSXQgd291bGQgaGF2ZSBiZWVuOiIKKyAgY2F0IC90bXAvbmV3ZnN0YWIuJCQKKyAgcm0gLWYgL3RtcC9uZXdmc3RhYi4kJAorZmkKZGlmZiAtLWdpdCBhL2luc3RhbGwtdXRpbHMvcmVtb3ZlX3ByZWZvcm1hdF9tYW5wYWdlcyBiL2luc3RhbGwtdXRpbHMvcmVtb3ZlX3ByZWZvcm1hdF9tYW5wYWdlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2RmZmY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5zdGFsbC11dGlscy9yZW1vdmVfcHJlZm9ybWF0X21hbnBhZ2VzCkBAIC0wLDAgKzEsMjEgQEAKKyMhL2Jpbi9zaAorCitQUkVGT1JNQVRfUk9PVD0vdXNyL21hbi9wcmVmb3JtYXQKK0NPTVBJTEVEX1JPT1Q9L3Vzci9tYW4KKworTUFOOD0iZGVidWdmcy44IGJhZGJsb2Nrcy44IGUyZnNjay44IG1rZTJmcy44IGR1bXBlMmZzLjggbWtsb3N0K2ZvdW5kLjggXAorCWZzY2suOCB0dW5lMmZzLjggZTJsYWJlbC44IgorTUFOMT0ibHNhdHRyLjEgY2hhdHRyLjEiCisKK2ZvciBpIGluICRNQU44CitkbworCXJtIC1mICRQUkVGT1JNQVRfUk9PVC9jYXQ4LyRpICRDT01QSUxFRF9ST09UL2NhdDgvJGkgXAorCQkkUFJFRk9STUFUX1JPT1QvY2F0OC8kaS5neiAkQ09NUElMRURfUk9PVC9jYXQ4LyRpLmd6Citkb25lCisKKworZm9yIGkgaW4gJE1BTjEKK2RvCisJcm0gLWYgJFBSRUZPUk1BVF9ST09UL2NhdDEvJGkgJENPTVBJTEVEX1JPT1QvY2F0MS8kaSBcCisJCSRQUkVGT1JNQVRfUk9PVC9jYXQxLyRpLmd6ICRDT01QSUxFRF9ST09UL2NhdDEvJGkuZ3oKK2RvbmUKZGlmZiAtLWdpdCBhL2ludGwvTWFrZWZpbGUuaW4gYi9pbnRsL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZDA4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTQwIEBACisjIE1ha2VmaWxlIGZvciBkaXJlY3Rvcnkgd2l0aCBtZXNzYWdlIGNhdGFsb2cgaGFuZGxpbmcgbGlicmFyeSBvZiBHTlUgZ2V0dGV4dAorIyBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisjIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyMgVVNBLgorCitQQUNLQUdFID0gQFBBQ0tBR0VACitWRVJTSU9OID0gQFZFUlNJT05ACisKK1NIRUxMID0gL2Jpbi9zaAorCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLi4KK1ZQQVRIID0gJChzcmNkaXIpCisKK3ByZWZpeCA9IEBwcmVmaXhACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAordHJhbnNmb3JtID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitsaWJkaXIgPSBAbGliZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorbG9jYWxlZGlyID0gJChkYXRhZGlyKS9sb2NhbGUKK2dldHRleHRzcmNkaXIgPSAkKGRhdGFkaXIpL2dldHRleHQvaW50bAorYWxpYXNwYXRoID0gJChsb2NhbGVkaXIpCitzdWJkaXIgPSBpbnRsCisKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJChNS0lOU1RBTExESVJTKQorCitAU0VUX01BS0VACisKK0BpZkdOVW1ha2VAIFYgPQorQGlmR05VbWFrZUAgaWZlcSAoJChzdHJpcCAkKFYpKSwpCitAaWZHTlVtYWtlQCAjICBFID0gQGVjaG8KK0BpZkdOVW1ha2VAICMgIFEgPSBACitAaWZHTlVtYWtlQCAgICBFID0gQEVACitAaWZHTlVtYWtlQCAgICBRID0gQFFACitAaWZHTlVtYWtlQCBlbHNlCitAaWZHTlVtYWtlQCAgICBFID0gQFwjCitAaWZHTlVtYWtlQCAgICBRID0KK0BpZkdOVW1ha2VAIGVuZGlmCisKK0BpZk5vdEdOVW1ha2VAIEUgPSBARUAKK0BpZk5vdEdOVW1ha2VAIFEgPSBAUUAKKworQGlmR05VbWFrZUAgQ0hFQ0s9c3BhcnNlCitAaWZHTlVtYWtlQCBDSEVDS19PUFRTPS1Xc3BhcnNlLWFsbCAtV25vLXRyYW5zcGFyZW50LXVuaW9uIC1Xbm8tcmV0dXJuLXZvaWQgLVduby11bmRlZiAtV25vLW5vbi1wb2ludGVyLW51bGwKK0BpZkdOVW1ha2VAIGlmZXEgKCIkKEMpIiwgIjIiKQorQGlmR05VbWFrZUAgICBDSEVDS19DTUQ9JChDSEVDSykgJChDSEVDS19PUFRTKSAtV2JpdHdpc2UgLURfX0NIRUNLX0VORElBTl9fCitAaWZHTlVtYWtlQCBlbHNlCitAaWZHTlVtYWtlQCAgIGlmZXEgKCIkKEMpIiwgIjEiKQorQGlmR05VbWFrZUAgICAgIENIRUNLX0NNRD0kKENIRUNLKSAkKENIRUNLX09QVFMpCitAaWZHTlVtYWtlQCAgICBlbHNlCitAaWZHTlVtYWtlQCAgICAgQ0hFQ0tfQ01EPUB0cnVlCitAaWZHTlVtYWtlQCAgIGVuZGlmCitAaWZHTlVtYWtlQCBlbmRpZgorCitAaWZOb3RHTlVtYWtlQCBDSEVDS19DTUQ9QHRydWUKKworbCA9IEBJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWEAKKworQVIgPSBhcgorQ0MgPSBAQ0NACitMSUJUT09MID0gQExJQlRPT0xACitSQU5MSUIgPSBAUkFOTElCQAorWUFDQyA9IEBJTlRMQklTT05AIC15IC1kCitZRkxBR1MgPSAtLW5hbWUtcHJlZml4PV9fZ2V0dGV4dAorCitERUZTID0gLURMT0NBTEVESVI9XCIkKGxvY2FsZWRpcilcIiAtRExPQ0FMRV9BTElBU19QQVRIPVwiJChhbGlhc3BhdGgpXCIgXAorLURMSUJESVI9XCIkKGxpYmRpcilcIiAtRElOX0xJQklOVEwgXAorLURFTkFCTEVfUkVMT0NBVEFCTEU9MSAtRElOX0xJQlJBUlkgLURJTlNUQUxMRElSPVwiJChsaWJkaXIpXCIgLUROT19YTUFMTE9DIFwKKy1Ec2V0X3JlbG9jYXRpb25fcHJlZml4PWxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4IFwKKy1EcmVsb2NhdGU9bGliaW50bF9yZWxvY2F0ZSBcCistRERFUEVORFNfT05fTElCSUNPTlY9MSAtREhBVkVfQ09ORklHX0gKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ0ZMQUdTID0gQENGTEFHU0AKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQlMgPSBATElCU0AKKworQ09NUElMRSA9ICQoQ0MpIC1jICQoREVGUykgJChJTkNMVURFUykgJChDUFBGTEFHUykgJChDRkxBR1MpICQoWENGTEFHUykKKworSEVBREVSUyA9IFwKKyAgZ21vLmggXAorICBnZXR0ZXh0UC5oIFwKKyAgaGFzaC1zdHJpbmcuaCBcCisgIGxvYWRpbmZvLmggXAorICBwbHVyYWwtZXhwLmggXAorICBldmFsLXBsdXJhbC5oIFwKKyAgbG9jYWxjaGFyc2V0LmggXAorICByZWxvY2F0YWJsZS5oIFwKKyAgeHNpemUuaCBcCisgIHByaW50Zi1hcmdzLmggcHJpbnRmLWFyZ3MuYyBcCisgIHByaW50Zi1wYXJzZS5oIHdwcmludGYtcGFyc2UuaCBwcmludGYtcGFyc2UuYyBcCisgIHZhc25wcmludGYuaCB2YXNud3ByaW50Zi5oIHZhc25wcmludGYuYyBcCisgIG9zMmNvbXBhdC5oIFwKKyAgbGliZ251aW50bC5oLmluCitTT1VSQ0VTID0gXAorICBiaW5kdGV4dGRvbS5jIFwKKyAgZGNnZXR0ZXh0LmMgXAorICBkZ2V0dGV4dC5jIFwKKyAgZ2V0dGV4dC5jIFwKKyAgZmluZGRvbWFpbi5jIFwKKyAgbG9hZG1zZ2NhdC5jIFwKKyAgbG9jYWxlYWxpYXMuYyBcCisgIHRleHRkb21haW4uYyBcCisgIGwxMG5mbGlzdC5jIFwKKyAgZXhwbG9kZW5hbWUuYyBcCisgIGRjaWdldHRleHQuYyBcCisgIGRjbmdldHRleHQuYyBcCisgIGRuZ2V0dGV4dC5jIFwKKyAgbmdldHRleHQuYyBcCisgIHBsdXJhbC55IFwKKyAgcGx1cmFsLWV4cC5jIFwKKyAgbG9jYWxjaGFyc2V0LmMgXAorICByZWxvY2F0YWJsZS5jIFwKKyAgbG9jYWxlbmFtZS5jIFwKKyAgbG9nLmMgXAorICBwcmludGYuYyBcCisgIG9zZGVwLmMgXAorICBvczJjb21wYXQuYyBcCisgIGludGwtY29tcGF0LmMKK09CSkVDVFMgPSBcCisgIGJpbmR0ZXh0ZG9tLiRsbyBcCisgIGRjZ2V0dGV4dC4kbG8gXAorICBkZ2V0dGV4dC4kbG8gXAorICBnZXR0ZXh0LiRsbyBcCisgIGZpbmRkb21haW4uJGxvIFwKKyAgbG9hZG1zZ2NhdC4kbG8gXAorICBsb2NhbGVhbGlhcy4kbG8gXAorICB0ZXh0ZG9tYWluLiRsbyBcCisgIGwxMG5mbGlzdC4kbG8gXAorICBleHBsb2RlbmFtZS4kbG8gXAorICBkY2lnZXR0ZXh0LiRsbyBcCisgIGRjbmdldHRleHQuJGxvIFwKKyAgZG5nZXR0ZXh0LiRsbyBcCisgIG5nZXR0ZXh0LiRsbyBcCisgIHBsdXJhbC4kbG8gXAorICBwbHVyYWwtZXhwLiRsbyBcCisgIGxvY2FsY2hhcnNldC4kbG8gXAorICByZWxvY2F0YWJsZS4kbG8gXAorICBsb2NhbGVuYW1lLiRsbyBcCisgIGxvZy4kbG8gXAorICBwcmludGYuJGxvIFwKKyAgb3NkZXAuJGxvIFwKKyAgaW50bC1jb21wYXQuJGxvCitESVNURklMRVMuY29tbW9uID0gTWFrZWZpbGUuaW4gXAorY29uZmlnLmNoYXJzZXQgbG9jYWxlLmFsaWFzIHJlZi1hZGQuc2luIHJlZi1kZWwuc2luICQoSEVBREVSUykgJChTT1VSQ0VTKQorRElTVEZJTEVTLmdlbmVyYXRlZCA9IHBsdXJhbC5jCitESVNURklMRVMubm9ybWFsID0gVkVSU0lPTgorRElTVEZJTEVTLmdldHRleHQgPSBDT1BZSU5HLkxJQi0yLjAgQ09QWUlORy5MSUItMi4xIGxpYmludGwuZ2xpYmMgXAorbGliZ251aW50bC5oX3ZtcyBNYWtlZmlsZS52bXMgXAorbGliZ251aW50bC5oLm1zdmMtc3RhdGljIGxpYmdudWludGwuaC5tc3ZjLXNoYXJlZCBSRUFETUUud29lMzIgTWFrZWZpbGUubXN2YworRElTVEZJTEVTLm9ic29sZXRlID0geG9wZW4tbXNnLnNlZCBsaW51eC1tc2cuc2VkIHBvMnRibC5zZWQuaW4gY2F0LWNvbXBhdC5jIFwKK0NPUFlJTkcuTElCLTIgZ2V0dGV4dC5oIGxpYmdldHRleHQuaCBwbHVyYWwtZXZhbC5jIGxpYmdudWludGwuaAorCithbGw6IGFsbC1AVVNFX0lOQ0xVREVEX0xJQklOVExACithbGwteWVzOiBsaWJpbnRsLiRsYSBsaWJpbnRsLmggY2hhcnNldC5hbGlhcyByZWYtYWRkLnNlZCByZWYtZGVsLnNlZAorYWxsLW5vOiBhbGwtbm8tQEJVSUxEX0lOQ0xVREVEX0xJQklOVExACithbGwtbm8teWVzOiBsaWJnbnVpbnRsLiRsYQorYWxsLW5vLW5vOgorCitsaWJpbnRsLmEgbGliZ251aW50bC5hOiAkKE9CSkVDVFMpCisJJChRKSBybSAtZiAkQAorCSQoRSkgIglBUiAkQCIKKwkkKFEpICQoQVIpIGNydSAkQCAkKE9CSkVDVFMpCisJJChFKSAiCVJBTkxJQiAkQCIKKwkkKFEpICQoUkFOTElCKSAkQAorCitsaWJpbnRsLmxhIGxpYmdudWludGwubGE6ICQoT0JKRUNUUykKKwkkKExJQlRPT0wpIC0tbW9kZT1saW5rIFwKKwkgICQoQ0MpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKSAkKFhDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgXAorCSAgJChPQkpFQ1RTKSBATFRMSUJJQ09OVkAgJChMSUJTKSAtbGMgXAorCSAgLXZlcnNpb24taW5mbyAkKExUVl9DVVJSRU5UKTokKExUVl9SRVZJU0lPTik6JChMVFZfQUdFKSBcCisJICAtcnBhdGggJChsaWJkaXIpIFwKKwkgIC1uby11bmRlZmluZWQKKworIyBMaWJ0b29sJ3MgbGlicmFyeSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciBsaWJpbnRsLgorIyBCZWZvcmUgbWFraW5nIGEgZ2V0dGV4dCByZWxlYXNlLCB0aGUgZ2V0dGV4dCBtYWludGFpbmVyIG11c3QgY2hhbmdlIHRoaXMKKyMgYWNjb3JkaW5nIHRvIHRoZSBsaWJ0b29sIGRvY3VtZW50YXRpb24sIHNlY3Rpb24gIkxpYnJhcnkgaW50ZXJmYWNlIHZlcnNpb25zIi4KKyMgTWFpbnRhaW5lcnMgb2Ygb3RoZXIgcGFja2FnZXMgdGhhdCBpbmNsdWRlIHRoZSBpbnRsIGRpcmVjdG9yeSBtdXN0ICpub3QqCisjIGNoYW5nZSB0aGVzZSB2YWx1ZXMuCitMVFZfQ1VSUkVOVD03CitMVFZfUkVWSVNJT049MAorTFRWX0FHRT00CisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLnkgLm8gLmxvIC5zaW4gLnNlZAorCisuYy5vOgorCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ09NUElMRSkgJDwKKwkkKFEpICQoQ0hFQ0tfQ01EKSAkKEFMTF9DRkxBR1MpICQ8CisKKy55LmM6CisJJChZQUNDKSAkKFlGTEFHUykgLS1vdXRwdXQgJEAgJDwKKwlybSAtZiAkKi5oCisKK2JpbmR0ZXh0ZG9tLmxvOiAkKHNyY2RpcikvYmluZHRleHRkb20uYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvYmluZHRleHRkb20uYworZGNnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGNnZXR0ZXh0LmMKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RjZ2V0dGV4dC5jCitkZ2V0dGV4dC5sbzogJChzcmNkaXIpL2RnZXR0ZXh0LmMKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RnZXR0ZXh0LmMKK2dldHRleHQubG86ICQoc3JjZGlyKS9nZXR0ZXh0LmMKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2dldHRleHQuYworZmluZGRvbWFpbi5sbzogJChzcmNkaXIpL2ZpbmRkb21haW4uYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZmluZGRvbWFpbi5jCitsb2FkbXNnY2F0LmxvOiAkKHNyY2RpcikvbG9hZG1zZ2NhdC5jCisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2FkbXNnY2F0LmMKK2xvY2FsZWFsaWFzLmxvOiAkKHNyY2RpcikvbG9jYWxlYWxpYXMuYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9jYWxlYWxpYXMuYwordGV4dGRvbWFpbi5sbzogJChzcmNkaXIpL3RleHRkb21haW4uYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvdGV4dGRvbWFpbi5jCitsMTBuZmxpc3QubG86ICQoc3JjZGlyKS9sMTBuZmxpc3QuYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbDEwbmZsaXN0LmMKK2V4cGxvZGVuYW1lLmxvOiAkKHNyY2RpcikvZXhwbG9kZW5hbWUuYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZXhwbG9kZW5hbWUuYworZGNpZ2V0dGV4dC5sbzogJChzcmNkaXIpL2RjaWdldHRleHQuYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZGNpZ2V0dGV4dC5jCitkY25nZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGNuZ2V0dGV4dC5jCisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kY25nZXR0ZXh0LmMKK2RuZ2V0dGV4dC5sbzogJChzcmNkaXIpL2RuZ2V0dGV4dC5jCisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kbmdldHRleHQuYworbmdldHRleHQubG86ICQoc3JjZGlyKS9uZ2V0dGV4dC5jCisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9uZ2V0dGV4dC5jCitwbHVyYWwubG86ICQoc3JjZGlyKS9wbHVyYWwuYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcGx1cmFsLmMKK3BsdXJhbC1leHAubG86ICQoc3JjZGlyKS9wbHVyYWwtZXhwLmMKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL3BsdXJhbC1leHAuYworbG9jYWxjaGFyc2V0LmxvOiAkKHNyY2RpcikvbG9jYWxjaGFyc2V0LmMKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2xvY2FsY2hhcnNldC5jCityZWxvY2F0YWJsZS5sbzogJChzcmNkaXIpL3JlbG9jYXRhYmxlLmMKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL3JlbG9jYXRhYmxlLmMKK2xvY2FsZW5hbWUubG86ICQoc3JjZGlyKS9sb2NhbGVuYW1lLmMKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2xvY2FsZW5hbWUuYworbG9nLmxvOiAkKHNyY2RpcikvbG9nLmMKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2xvZy5jCitwcmludGYubG86ICQoc3JjZGlyKS9wcmludGYuYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcHJpbnRmLmMKK29zZGVwLmxvOiAkKHNyY2Rpcikvb3NkZXAuYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2Rpcikvb3NkZXAuYworaW50bC1jb21wYXQubG86ICQoc3JjZGlyKS9pbnRsLWNvbXBhdC5jCisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9pbnRsLWNvbXBhdC5jCisKK3JlZi1hZGQuc2VkOiAkKHNyY2RpcikvcmVmLWFkZC5zaW4KKwkkKEUpICIJU0VEIHJlZi1hZGQuc2VkIgorCSQoUSkgc2VkIC1lICcvXiMvZCcgLWUgJ3MvQCcnUEFDS0FHRScnQC9AUEFDS0FHRUAvZycgJChzcmNkaXIpL3JlZi1hZGQuc2luID4gdC1yZWYtYWRkLnNlZAorCSQoUSkgbXYgdC1yZWYtYWRkLnNlZCByZWYtYWRkLnNlZAorcmVmLWRlbC5zZWQ6ICQoc3JjZGlyKS9yZWYtZGVsLnNpbgorCSQoRSkgIglTRUQgcmVmLWRlbC5zZWQiCisJJChRKSBzZWQgLWUgJy9eIy9kJyAtZSAncy9AJydQQUNLQUdFJydAL0BQQUNLQUdFQC9nJyAkKHNyY2RpcikvcmVmLWRlbC5zaW4gPiB0LXJlZi1kZWwuc2VkCisJJChRKSBtdiB0LXJlZi1kZWwuc2VkIHJlZi1kZWwuc2VkCisKK0lOQ0xVREVTID0gLUkuIC1JJChzcmNkaXIpIC1JLi4gLUkkKHRvcF9idWlsZGRpcikvbGliCisKK2xpYmdudWludGwuaDogJChzcmNkaXIpL2xpYmdudWludGwuaC5pbgorCSQoRSkgIglTRUQgbGliZ251aW50bC5oICIKKwkkKFEpIHNlZCAtZSAncyxAJydIQVZFX1BPU0lYX1BSSU5URicnQCxASEFWRV9QT1NJWF9QUklOVEZALGcnIFwKKwkgICAgLWUgJ3MsQCcnSEFWRV9BU1BSSU5URicnQCxASEFWRV9BU1BSSU5URkAsZycgXAorCSAgICAtZSAncyxAJydIQVZFX1NOUFJJTlRGJydALEBIQVZFX1NOUFJJTlRGQCxnJyBcCisJICAgIC1lICdzLEAnJ0hBVkVfV1BSSU5URicnQCxASEFWRV9XUFJJTlRGQCxnJyBcCisJICA8ICQoc3JjZGlyKS9saWJnbnVpbnRsLmguaW4gPiBsaWJnbnVpbnRsLmggCisKK2xpYmludGwuaDogbGliZ251aW50bC5oCisJJChFKSAiCUNQIGxpYmludGwuaCIKKwkkKFEpIGNwIGxpYmdudWludGwuaCBsaWJpbnRsLmgKKworY2hhcnNldC5hbGlhczogJChzcmNkaXIpL2NvbmZpZy5jaGFyc2V0CisJJChFKSAiCUNPTkZJRy5DSEFSU0VUICRAIgorCSQoUSkgJChTSEVMTCkgJChzcmNkaXIpL2NvbmZpZy5jaGFyc2V0ICdAaG9zdEAnID4gdC0kQAorCSQoUSkgbXYgdC0kQCAkQAorCitjaGVjazogYWxsCisKKyMgV2UgbXVzdCBub3QgaW5zdGFsbCB0aGUgbGliaW50bC5oL2xpYmludGwuYSBmaWxlcyBpZiB3ZSBhcmUgb24gYQorIyBzeXN0ZW0gd2hpY2ggaGFzIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGluIGl0cyBDIGxpYnJhcnkgb3IgaW4gYQorIyBzZXBhcmF0ZSBsaWJyYXJ5LgorIyBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIG9uZSB3aGljaCBjb21lcyB3aXRoIHRoaXMgdmVyc2lvbiBvZiB0aGUKKyMgcGFja2FnZSwgeW91IGhhdmUgdG8gdXNlIGBjb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQnLgoraW5zdGFsbDogaW5zdGFsbC1leGVjIGluc3RhbGwtZGF0YQoraW5zdGFsbC1leGVjOiBhbGwKKwkkKFEpIGlmIHsgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIiB8fCB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgfSBcCisJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpICQoREVTVERJUikkKGluY2x1ZGVkaXIpOyBcCisJICAkKElOU1RBTExfREFUQSkgbGliaW50bC5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2xpYmludGwuaDsgXAorCSAgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBcCisJICAgICQoSU5TVEFMTF9EQVRBKSBsaWJpbnRsLiRsYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwuJGxhOyBcCisJICBpZiB0ZXN0ICJAUkVMT0NBVEFCTEVAIiA9IHllczsgdGhlbiBcCisJICAgIGRlcGVuZGVuY2llcz1gc2VkIC1uIC1lICdzLF5kZXBlbmRlbmN5X2xpYnM9XCguKlwpLFwxLHAnIDwgJChERVNURElSKSQobGliZGlyKS9saWJpbnRsLmxhIHwgc2VkIC1lICJzLF4nLCwiIC1lICJzLCdcJCQsLCJgOyBcCisJICAgIGlmIHRlc3QgLW4gIiQkZGVwZW5kZW5jaWVzIjsgdGhlbiBcCisJICAgICAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9saWJpbnRsLmxhOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQorCSQoUSkgaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyIgXAorCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0gbm87IHRoZW4gXAorCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpOyBcCisJICAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsIFwKKwkgICAgJChJTlNUQUxMX0RBVEEpIGxpYmdudWludGwuJGxhICQoREVTVERJUikkKGxpYmRpcikvbGliZ251aW50bC4kbGE7IFwKKwkgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvcHJlbG9hZGFibGVfbGliaW50bC5zbzsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQoREVTVERJUikkKGxpYmRpcikvbGliZ251aW50bC5zbyAkKERFU1RESVIpJChsaWJkaXIpL3ByZWxvYWRhYmxlX2xpYmludGwuc287IFwKKwkgICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliZ251aW50bC4kbGE7IFwKKwllbHNlIFwKKwkgIDogOyBcCisJZmkKKwlpZiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCisJICB0ZXN0IEBHTElCQzIxQCAhPSBubyB8fCAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxpYmRpcik7IFwKKwkgIHRlbXA9JChERVNURElSKSQobGliZGlyKS90LWNoYXJzZXQuYWxpYXM7IFwKKwkgIGRlc3Q9JChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyBcCisJICBpZiB0ZXN0IC1mICQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgdGhlbiBcCisJICAgIG9yaWc9JChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyBcCisJICAgIHNlZCAtZiByZWYtYWRkLnNlZCAkJG9yaWcgPiAkJHRlbXA7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQkdGVtcCAkJGRlc3Q7IFwKKwkgICAgcm0gLWYgJCR0ZW1wOyBcCisJICBlbHNlIFwKKwkgICAgaWYgdGVzdCBAR0xJQkMyMUAgPSBubzsgdGhlbiBcCisJICAgICAgb3JpZz1jaGFyc2V0LmFsaWFzOyBcCisJICAgICAgc2VkIC1mIHJlZi1hZGQuc2VkICQkb3JpZyA+ICQkdGVtcDsgXAorCSAgICAgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCisJICAgICAgcm0gLWYgJCR0ZW1wOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsb2NhbGVkaXIpOyBcCisJICB0ZXN0IC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzIFwKKwkgICAgJiYgb3JpZz0kKERFU1RESVIpJChsb2NhbGVkaXIpL2xvY2FsZS5hbGlhcyBcCisJICAgIHx8IG9yaWc9JChzcmNkaXIpL2xvY2FsZS5hbGlhczsgXAorCSAgdGVtcD0kKERFU1RESVIpJChsb2NhbGVkaXIpL3QtbG9jYWxlLmFsaWFzOyBcCisJICBkZXN0PSQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzOyBcCisJICBzZWQgLWYgcmVmLWFkZC5zZWQgJCRvcmlnID4gJCR0ZW1wOyBcCisJICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorCSAgcm0gLWYgJCR0ZW1wOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCitpbnN0YWxsLWRhdGE6IGFsbAorCSQoUSkgaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorCSAgJChJTlNUQUxMX0RBVEEpIFZFUlNJT04gJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvVkVSU0lPTjsgXAorCSAgJChJTlNUQUxMX0RBVEEpIENoYW5nZUxvZy5pbnN0ICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpL0NoYW5nZUxvZzsgXAorCSAgZGlzdHM9IkNPUFlJTkcuTElCLTIuMCBDT1BZSU5HLkxJQi0yLjEgJChESVNURklMRVMuY29tbW9uKSI7IFwKKwkgIGZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGZpbGUgXAorCQkJICAgICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCSAgY2htb2QgYSt4ICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpL2NvbmZpZy5jaGFyc2V0OyBcCisJICBkaXN0cz0iJChESVNURklMRVMuZ2VuZXJhdGVkKSI7IFwKKwkgIGZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gZGlyPS47IGVsc2UgZGlyPSQoc3JjZGlyKTsgZmk7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZGlyLyQkZmlsZSBcCisJCQkgICAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJICBkaXN0cz0iJChESVNURklMRVMub2Jzb2xldGUpIjsgXAorCSAgZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorCSAgICBybSAtZiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKwkgIGRvbmU7IFwKKwllbHNlIFwKKwkgIDogOyBcCisJZmkKKworaW5zdGFsbC1zdHJpcDogaW5zdGFsbAorCitpbnN0YWxsZGlyczoKKwlpZiB7IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtcnVudGltZSIgfHwgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IH0gXAorCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiIFwKKwkgICAmJiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IG5vOyB0aGVuIFwKKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQorCWlmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKwkgIHRlc3QgQEdMSUJDMjFAICE9IG5vIHx8ICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKTsgXAorCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsb2NhbGVkaXIpOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQorCisjIERlZmluZSB0aGlzIGFzIGVtcHR5IHVudGlsIEkgZm91bmQgYSB1c2VmdWwgYXBwbGljYXRpb24uCitpbnN0YWxsY2hlY2s6CisKK2luc3RhbGwtc2hsaWJzOgorCit1bmluc3RhbGwtc2hsaWJzOgorCitpbnN0YWxsLXNobGlicy1zdHJpcDoKKwordW5pbnN0YWxsOgorCWlmIHsgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIiB8fCB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgfSBcCisJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorCSAgcm0gLWYgJChERVNURElSKSQoaW5jbHVkZWRpcikvbGliaW50bC5oOyBcCisJICAkKExJQlRPT0wpIC0tbW9kZT11bmluc3RhbGwgXAorCSAgICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwuJGxhOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyIgXAorCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0gbm87IHRoZW4gXAorCSAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCisJaWYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorCSAgaWYgdGVzdCAtZiAkKERFU1RESVIpJChsaWJkaXIpL2NoYXJzZXQuYWxpYXM7IHRoZW4gXAorCSAgICB0ZW1wPSQoREVTVERJUikkKGxpYmRpcikvdC1jaGFyc2V0LmFsaWFzOyBcCisJICAgIGRlc3Q9JChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyBcCisJICAgIHNlZCAtZiByZWYtZGVsLnNlZCAkJGRlc3QgPiAkJHRlbXA7IFwKKwkgICAgaWYgZ3JlcCAnXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAkJCcgJCR0ZW1wID4gL2Rldi9udWxsOyB0aGVuIFwKKwkgICAgICBybSAtZiAkJGRlc3Q7IFwKKwkgICAgZWxzZSBcCisJICAgICAgJChJTlNUQUxMX0RBVEEpICQkdGVtcCAkJGRlc3Q7IFwKKwkgICAgZmk7IFwKKwkgICAgcm0gLWYgJCR0ZW1wOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpL2xvY2FsZS5hbGlhczsgdGhlbiBcCisJICAgIHRlbXA9JChERVNURElSKSQobG9jYWxlZGlyKS90LWxvY2FsZS5hbGlhczsgXAorCSAgICBkZXN0PSQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzOyBcCisJICAgIHNlZCAtZiByZWYtZGVsLnNlZCAkJGRlc3QgPiAkJHRlbXA7IFwKKwkgICAgaWYgZ3JlcCAnXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAkJCcgJCR0ZW1wID4gL2Rldi9udWxsOyB0aGVuIFwKKwkgICAgICBybSAtZiAkJGRlc3Q7IFwKKwkgICAgZWxzZSBcCisJICAgICAgJChJTlNUQUxMX0RBVEEpICQkdGVtcCAkJGRlc3Q7IFwKKwkgICAgZmk7IFwKKwkgICAgcm0gLWYgJCR0ZW1wOyBcCisJICBmaTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgIGZvciBmaWxlIGluIFZFUlNJT04gQ2hhbmdlTG9nIENPUFlJTkcuTElCLTIuMCBDT1BZSU5HLkxJQi0yLjEgJChESVNURklMRVMuY29tbW9uKSAkKERJU1RGSUxFUy5nZW5lcmF0ZWQpOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQorCitpbmZvIGR2aSBwcyBwZGYgaHRtbDoKKworJChPQkpFQ1RTKTogbGliZ251aW50bC5oCitiaW5kdGV4dGRvbS4kbG8gZGNnZXR0ZXh0LiRsbyBkY2lnZXR0ZXh0LiRsbyBkY25nZXR0ZXh0LiRsbyBkZ2V0dGV4dC4kbG8gZG5nZXR0ZXh0LiRsbyBmaW5kZG9tYWluLiRsbyBnZXR0ZXh0LiRsbyBpbnRsLWNvbXBhdC4kbG8gbG9hZG1zZ2NhdC4kbG8gbG9jYWxlYWxpYXMuJGxvIG5nZXR0ZXh0LiRsbyB0ZXh0ZG9tYWluLiRsbzogJChzcmNkaXIpL2dldHRleHRQLmggJChzcmNkaXIpL2dtby5oICQoc3JjZGlyKS9sb2FkaW5mby5oCitkY2lnZXR0ZXh0LiRsbyBsb2FkbXNnY2F0LiRsbzogJChzcmNkaXIpL2hhc2gtc3RyaW5nLmgKK2V4cGxvZGVuYW1lLiRsbyBsMTBuZmxpc3QuJGxvOiAkKHNyY2RpcikvbG9hZGluZm8uaAorZGNpZ2V0dGV4dC4kbG8gbG9hZG1zZ2NhdC4kbG8gcGx1cmFsLiRsbyBwbHVyYWwtZXhwLiRsbzogJChzcmNkaXIpL3BsdXJhbC1leHAuaAorZGNpZ2V0dGV4dC4kbG86ICQoc3JjZGlyKS9ldmFsLXBsdXJhbC5oCitsb2NhbGNoYXJzZXQuJGxvOiAkKHNyY2RpcikvbG9jYWxjaGFyc2V0LmgKK2xvY2FsZWFsaWFzLiRsbyBsb2NhbGNoYXJzZXQuJGxvIHJlbG9jYXRhYmxlLiRsbzogJChzcmNkaXIpL3JlbG9jYXRhYmxlLmgKK3ByaW50Zi4kbG86ICQoc3JjZGlyKS9wcmludGYtYXJncy5oICQoc3JjZGlyKS9wcmludGYtYXJncy5jICQoc3JjZGlyKS9wcmludGYtcGFyc2UuaCAkKHNyY2Rpcikvd3ByaW50Zi1wYXJzZS5oICQoc3JjZGlyKS94c2l6ZS5oICQoc3JjZGlyKS9wcmludGYtcGFyc2UuYyAkKHNyY2RpcikvdmFzbnByaW50Zi5oICQoc3JjZGlyKS92YXNud3ByaW50Zi5oICQoc3JjZGlyKS92YXNucHJpbnRmLmMKKwordGFnczogVEFHUworCitUQUdTOiAkKEhFQURFUlMpICQoU09VUkNFUykKKwloZXJlPWBwd2RgOyBjZCAkKHNyY2RpcikgJiYgZXRhZ3MgLW8gJCRoZXJlL1RBR1MgJChIRUFERVJTKSAkKFNPVVJDRVMpCisKK2N0YWdzOiBDVEFHUworCitDVEFHUzogJChIRUFERVJTKSAkKFNPVVJDRVMpCisJaGVyZT1gcHdkYDsgY2QgJChzcmNkaXIpICYmIGN0YWdzIC1vICQkaGVyZS9DVEFHUyAkKEhFQURFUlMpICQoU09VUkNFUykKKworaWQ6IElECisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykKKwloZXJlPWBwd2RgOyBjZCAkKHNyY2RpcikgJiYgbWtpZCAtZiQkaGVyZS9JRCAkKEhFQURFUlMpICQoU09VUkNFUykKKworY292ZXJhZ2UudHh0OjoKKworbW9zdGx5Y2xlYW46CisJcm0gLWYgKi5hICoubGEgKi5vICoub2JqICoubG8gY29yZSBjb3JlLioKKwlybSAtZiBsaWJnbnVpbnRsLmggbGliaW50bC5oIGNoYXJzZXQuYWxpYXMgcmVmLWFkZC5zZWQgcmVmLWRlbC5zZWQKKwlybSAtZiAtciAubGlicyBfbGlicworCitjbGVhbjo6IG1vc3RseWNsZWFuCisKK2Rpc3RjbGVhbjogY2xlYW4KKwlybSAtZiBNYWtlZmlsZSBJRCBUQUdTCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIiB8fCB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICBybSAtZiBDaGFuZ2VMb2cuaW5zdCAkKERJU1RGSUxFUy5ub3JtYWwpOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCisKK21haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgorCSQoRSkgIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlOyIKKwkkKEUpICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKworCisjIEdOVSBnZXR0ZXh0IG5lZWRzIG5vdCBjb250YWluIHRoZSBmaWxlIGBWRVJTSU9OJyBidXQgY29udGFpbnMgc29tZQorIyBvdGhlciBmaWxlcyB3aGljaCBzaG91bGQgbm90IGJlIGRpc3RyaWJ1dGVkIGluIG90aGVyIHBhY2thZ2VzLgorZGlzdGRpciA9IC4uLyQoUEFDS0FHRSktJChWRVJTSU9OKS8kKHN1YmRpcikKK2Rpc3QgZGlzdGRpcjogTWFrZWZpbGUKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICA6IDsgXAorCWVsc2UgXAorCSAgaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIjsgdGhlbiBcCisJICAgIGFkZGl0aW9uYWw9IiQoRElTVEZJTEVTLmdldHRleHQpIjsgXAorCSAgZWxzZSBcCisJICAgIGFkZGl0aW9uYWw9IiQoRElTVEZJTEVTLm5vcm1hbCkiOyBcCisJICBmaTsgXAorCSAgJChNQUtFKSAkKERJU1RGSUxFUy5jb21tb24pICQoRElTVEZJTEVTLmdlbmVyYXRlZCkgJCRhZGRpdGlvbmFsOyBcCisJICBmb3IgZmlsZSBpbiBDaGFuZ2VMb2cgJChESVNURklMRVMuY29tbW9uKSAkKERJU1RGSUxFUy5nZW5lcmF0ZWQpICQkYWRkaXRpb25hbDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBkaXI9LjsgZWxzZSBkaXI9JChzcmNkaXIpOyBmaTsgXAorCSAgICBjcCAtcCAkJGRpci8kJGZpbGUgJChkaXN0ZGlyKTsgXAorCSAgZG9uZTsgXAorCWZpCisKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyMJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworIyBUaGlzIHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50LCBidXQgZG9lc24ndCB3b3JrIGFueSBtb3JlIHdpdGggYXV0b2NvbmYtMi41NywKKyMgd2hlbiBBQ19DT05GSUdfRklMRVMoW2ludGwvTWFrZWZpbGU6c29tZWRpci9NYWtlZmlsZS5pbl0pIGlzIHVzZWQuCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmIENPTkZJR19GSUxFUz0kKHN1YmRpcikvJEAgQ09ORklHX0hFQURFUlM9ICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2Ugbm90IHRvIGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9pbnRsL1ZFUlNJT04gYi9pbnRsL1ZFUlNJT04KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRiODQ2YwotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvVkVSU0lPTgpAQCAtMCwwICsxIEBACitHTlUgZ2V0dGV4dCBsaWJyYXJ5IGZyb20gZ2V0dGV4dC0wLjE0LjEKZGlmZiAtLWdpdCBhL2ludGwvYmluZHRleHRkb20uYyBiL2ludGwvYmluZHRleHRkb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mjg0MjI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW50bC9iaW5kdGV4dGRvbS5jCkBAIC0wLDAgKzEsMzYyIEBACisvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgYmluZHRleHRkb21haW4oMykgZnVuY3Rpb24KKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiBfTElCQworIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisjZWxzZQorIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisjZW5kaWYKKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorCisjaWZkZWYgX0xJQkMKKy8qIFdlIGhhdmUgdG8gaGFuZGxlIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCisjIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisjZWxzZQorLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aGlzIGlzIG91dHNpZGUgZ2xpYmMuICAqLworIyBkZWZpbmUgX19saWJjX3J3bG9ja19kZWZpbmUoQ0xBU1MsIE5BTUUpCisjIGRlZmluZSBfX2xpYmNfcndsb2NrX3dybG9jayhOQU1FKQorIyBkZWZpbmUgX19saWJjX3J3bG9ja191bmxvY2soTkFNRSkKKyNlbmRpZgorCisvKiBUaGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIHRoZSBzdGFuZGFsb25lIGxpYmludGwuYSBtdXN0IGhhdmUgZGlmZmVyZW50CisgICBuYW1lcyB0aGFuIHRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gR05VIGxpYmMsIG90aGVyd2lzZSBwcm9ncmFtcworICAgdXNpbmcgbGliaW50bC5hIGNhbm5vdCBiZSBsaW5rZWQgc3RhdGljYWxseS4gICovCisjaWYgIWRlZmluZWQgX0xJQkMKKyMgZGVmaW5lIF9ubF9kZWZhdWx0X2Rpcm5hbWUgbGliaW50bF9ubF9kZWZhdWx0X2Rpcm5hbWUKKyMgZGVmaW5lIF9ubF9kb21haW5fYmluZGluZ3MgbGliaW50bF9ubF9kb21haW5fYmluZGluZ3MKKyNlbmRpZgorCisvKiBTb21lIGNvbXBpbGVycywgbGlrZSBTdW5PUzQgY2MsIGRvbid0IGhhdmUgb2Zmc2V0b2YgaW4gPHN0ZGRlZi5oPi4gICovCisjaWZuZGVmIG9mZnNldG9mCisjIGRlZmluZSBvZmZzZXRvZih0eXBlLGlkZW50KSAoKHNpemVfdCkmKCgodHlwZSopMCktPmlkZW50KSkKKyNlbmRpZgorCisvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisKKy8qIENvbnRhaW5zIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBtZXNzYWdlIGNhdGFsb2dzLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyIF9ubF9kZWZhdWx0X2Rpcm5hbWVbXTsKKyNpZmRlZiBfTElCQworZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGlybmFtZV9pbnRlcm5hbFtdIGF0dHJpYnV0ZV9oaWRkZW47CisjZWxzZQorIyBkZWZpbmUgSU5UVVNFKG5hbWUpIG5hbWUKKyNlbmRpZgorCisvKiBMaXN0IHdpdGggYmluZGluZ3Mgb2Ygc3BlY2lmaWMgZG9tYWlucy4gICovCitleHRlcm4gc3RydWN0IGJpbmRpbmcgKl9ubF9kb21haW5fYmluZGluZ3M7CisKKy8qIExvY2sgdmFyaWFibGUgdG8gcHJvdGVjdCB0aGUgZ2xvYmFsIGRhdGEgaW4gdGhlIGdldHRleHQgaW1wbGVtZW50YXRpb24uICAqLworX19saWJjX3J3bG9ja19kZWZpbmUgKGV4dGVybiwgX25sX3N0YXRlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKworCisvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisjaWZkZWYgX0xJQkMKKyMgZGVmaW5lIEJJTkRURVhURE9NQUlOIF9fYmluZHRleHRkb21haW4KKyMgZGVmaW5lIEJJTkRfVEVYVERPTUFJTl9DT0RFU0VUIF9fYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKKyMgaWZuZGVmIHN0cmR1cAorIyAgZGVmaW5lIHN0cmR1cChzdHIpIF9fc3RyZHVwIChzdHIpCisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgQklORFRFWFRET01BSU4gbGliaW50bF9iaW5kdGV4dGRvbWFpbgorIyBkZWZpbmUgQklORF9URVhURE9NQUlOX0NPREVTRVQgbGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldAorI2VuZGlmCisKKy8qIFNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IG5hbWUgKkRJUk5BTUVQIGFuZCB0aGUgb3V0cHV0IGNvZGVzZXQgKkNPREVTRVRQCisgICB0byBiZSB1c2VkIGZvciB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cuCisgICBJZiAqRElSTkFNRVAgb3IgKkNPREVTRVRQIGlzIE5VTEwsIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBpcyBub3QKKyAgIG1vZGlmaWVkLCBvbmx5IHRoZSBjdXJyZW50IHZhbHVlIGlzIHJldHVybmVkLgorICAgSWYgRElSTkFNRVAgb3IgQ09ERVNFVFAgaXMgTlVMTCwgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGlzIG5laXRoZXIKKyAgIG1vZGlmaWVkIG5vciByZXR1cm5lZC4gICovCitzdGF0aWMgdm9pZAorc2V0X2JpbmRpbmdfdmFsdWVzIChjb25zdCBjaGFyICpkb21haW5uYW1lLAorCQkgICAgY29uc3QgY2hhciAqKmRpcm5hbWVwLCBjb25zdCBjaGFyICoqY29kZXNldHApCit7CisgIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOworICBpbnQgbW9kaWZpZWQ7CisKKyAgLyogU29tZSBzYW5pdHkgY2hlY2tzLiAgKi8KKyAgaWYgKGRvbWFpbm5hbWUgPT0gTlVMTCB8fCBkb21haW5uYW1lWzBdID09ICdcMCcpCisgICAgeworICAgICAgaWYgKGRpcm5hbWVwKQorCSpkaXJuYW1lcCA9IE5VTEw7CisgICAgICBpZiAoY29kZXNldHApCisJKmNvZGVzZXRwID0gTlVMTDsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgX19saWJjX3J3bG9ja193cmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKworICBtb2RpZmllZCA9IDA7CisKKyAgZm9yIChiaW5kaW5nID0gX25sX2RvbWFpbl9iaW5kaW5nczsgYmluZGluZyAhPSBOVUxMOyBiaW5kaW5nID0gYmluZGluZy0+bmV4dCkKKyAgICB7CisgICAgICBpbnQgY29tcGFyZSA9IHN0cmNtcCAoZG9tYWlubmFtZSwgYmluZGluZy0+ZG9tYWlubmFtZSk7CisgICAgICBpZiAoY29tcGFyZSA9PSAwKQorCS8qIFdlIGZvdW5kIGl0ISAgKi8KKwlicmVhazsKKyAgICAgIGlmIChjb21wYXJlIDwgMCkKKwl7CisJICAvKiBJdCBpcyBub3QgaW4gdGhlIGxpc3QuICAqLworCSAgYmluZGluZyA9IE5VTEw7CisJICBicmVhazsKKwl9CisgICAgfQorCisgIGlmIChiaW5kaW5nICE9IE5VTEwpCisgICAgeworICAgICAgaWYgKGRpcm5hbWVwKQorCXsKKwkgIGNvbnN0IGNoYXIgKmRpcm5hbWUgPSAqZGlybmFtZXA7CisKKwkgIGlmIChkaXJuYW1lID09IE5VTEwpCisJICAgIC8qIFRoZSBjdXJyZW50IGJpbmRpbmcgaGFzIGJlIHRvIHJldHVybmVkLiAgKi8KKwkgICAgKmRpcm5hbWVwID0gYmluZGluZy0+ZGlybmFtZTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIFRoZSBkb21haW4gaXMgYWxyZWFkeSBib3VuZC4gIElmIHRoZSBuZXcgdmFsdWUgYW5kIHRoZSBvbGQKKwkJIG9uZSBhcmUgZXF1YWwgd2Ugc2ltcGx5IGRvIG5vdGhpbmcuICBPdGhlcndpc2UgcmVwbGFjZSB0aGUKKwkJIG9sZCBiaW5kaW5nLiAgKi8KKwkgICAgICBjaGFyICpyZXN1bHQgPSBiaW5kaW5nLT5kaXJuYW1lOworCSAgICAgIGlmIChzdHJjbXAgKGRpcm5hbWUsIHJlc3VsdCkgIT0gMCkKKwkJeworCQkgIGlmIChzdHJjbXAgKGRpcm5hbWUsIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKSkgPT0gMCkKKwkJICAgIHJlc3VsdCA9IChjaGFyICopIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKwkJICBlbHNlCisJCSAgICB7CisjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCisJCSAgICAgIHJlc3VsdCA9IHN0cmR1cCAoZGlybmFtZSk7CisjZWxzZQorCQkgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChkaXJuYW1lKSArIDE7CisJCSAgICAgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKwkJICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCAhPSBOVUxMLCAxKSkKKwkJCW1lbWNweSAocmVzdWx0LCBkaXJuYW1lLCBsZW4pOworI2VuZGlmCisJCSAgICB9CisKKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ICE9IE5VTEwsIDEpKQorCQkgICAgeworCQkgICAgICBpZiAoYmluZGluZy0+ZGlybmFtZSAhPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpCisJCQlmcmVlIChiaW5kaW5nLT5kaXJuYW1lKTsKKworCQkgICAgICBiaW5kaW5nLT5kaXJuYW1lID0gcmVzdWx0OworCQkgICAgICBtb2RpZmllZCA9IDE7CisJCSAgICB9CisJCX0KKwkgICAgICAqZGlybmFtZXAgPSByZXN1bHQ7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChjb2Rlc2V0cCkKKwl7CisJICBjb25zdCBjaGFyICpjb2Rlc2V0ID0gKmNvZGVzZXRwOworCisJICBpZiAoY29kZXNldCA9PSBOVUxMKQorCSAgICAvKiBUaGUgY3VycmVudCBiaW5kaW5nIGhhcyBiZSB0byByZXR1cm5lZC4gICovCisJICAgICpjb2Rlc2V0cCA9IGJpbmRpbmctPmNvZGVzZXQ7CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBUaGUgZG9tYWluIGlzIGFscmVhZHkgYm91bmQuICBJZiB0aGUgbmV3IHZhbHVlIGFuZCB0aGUgb2xkCisJCSBvbmUgYXJlIGVxdWFsIHdlIHNpbXBseSBkbyBub3RoaW5nLiAgT3RoZXJ3aXNlIHJlcGxhY2UgdGhlCisJCSBvbGQgYmluZGluZy4gICovCisJICAgICAgY2hhciAqcmVzdWx0ID0gYmluZGluZy0+Y29kZXNldDsKKwkgICAgICBpZiAocmVzdWx0ID09IE5VTEwgfHwgc3RyY21wIChjb2Rlc2V0LCByZXN1bHQpICE9IDApCisJCXsKKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKwkJICByZXN1bHQgPSBzdHJkdXAgKGNvZGVzZXQpOworI2Vsc2UKKwkJICBzaXplX3QgbGVuID0gc3RybGVuIChjb2Rlc2V0KSArIDE7CisJCSAgcmVzdWx0ID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgIT0gTlVMTCwgMSkpCisJCSAgICBtZW1jcHkgKHJlc3VsdCwgY29kZXNldCwgbGVuKTsKKyNlbmRpZgorCisJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCAhPSBOVUxMLCAxKSkKKwkJICAgIHsKKwkJICAgICAgZnJlZSAoYmluZGluZy0+Y29kZXNldCk7CisKKwkJICAgICAgYmluZGluZy0+Y29kZXNldCA9IHJlc3VsdDsKKwkJICAgICAgYmluZGluZy0+Y29kZXNldF9jbnRyKys7CisJCSAgICAgIG1vZGlmaWVkID0gMTsKKwkJICAgIH0KKwkJfQorCSAgICAgICpjb2Rlc2V0cCA9IHJlc3VsdDsKKwkgICAgfQorCX0KKyAgICB9CisgIGVsc2UgaWYgKChkaXJuYW1lcCA9PSBOVUxMIHx8ICpkaXJuYW1lcCA9PSBOVUxMKQorCSAgICYmIChjb2Rlc2V0cCA9PSBOVUxMIHx8ICpjb2Rlc2V0cCA9PSBOVUxMKSkKKyAgICB7CisgICAgICAvKiBTaW1wbHkgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlcy4gICovCisgICAgICBpZiAoZGlybmFtZXApCisJKmRpcm5hbWVwID0gSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOworICAgICAgaWYgKGNvZGVzZXRwKQorCSpjb2Rlc2V0cCA9IE5VTEw7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogV2UgaGF2ZSB0byBjcmVhdGUgYSBuZXcgYmluZGluZy4gICovCisgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChkb21haW5uYW1lKSArIDE7CisgICAgICBzdHJ1Y3QgYmluZGluZyAqbmV3X2JpbmRpbmcgPQorCShzdHJ1Y3QgYmluZGluZyAqKSBtYWxsb2MgKG9mZnNldG9mIChzdHJ1Y3QgYmluZGluZywgZG9tYWlubmFtZSkgKyBsZW4pOworCisgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAobmV3X2JpbmRpbmcgPT0gTlVMTCwgMCkpCisJZ290byBmYWlsZWQ7CisKKyAgICAgIG1lbWNweSAobmV3X2JpbmRpbmctPmRvbWFpbm5hbWUsIGRvbWFpbm5hbWUsIGxlbik7CisKKyAgICAgIGlmIChkaXJuYW1lcCkKKwl7CisJICBjb25zdCBjaGFyICpkaXJuYW1lID0gKmRpcm5hbWVwOworCisJICBpZiAoZGlybmFtZSA9PSBOVUxMKQorCSAgICAvKiBUaGUgZGVmYXVsdCB2YWx1ZS4gICovCisJICAgIGRpcm5hbWUgPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoc3RyY21wIChkaXJuYW1lLCBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpID09IDApCisJCWRpcm5hbWUgPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisJICAgICAgZWxzZQorCQl7CisJCSAgY2hhciAqcmVzdWx0OworI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkRVUAorCQkgIHJlc3VsdCA9IHN0cmR1cCAoZGlybmFtZSk7CisJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKwkJICAgIGdvdG8gZmFpbGVkX2Rpcm5hbWU7CisjZWxzZQorCQkgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRpcm5hbWUpICsgMTsKKwkJICByZXN1bHQgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CisJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKwkJICAgIGdvdG8gZmFpbGVkX2Rpcm5hbWU7CisJCSAgbWVtY3B5IChyZXN1bHQsIGRpcm5hbWUsIGxlbik7CisjZW5kaWYKKwkJICBkaXJuYW1lID0gcmVzdWx0OworCQl9CisJICAgIH0KKwkgICpkaXJuYW1lcCA9IGRpcm5hbWU7CisJICBuZXdfYmluZGluZy0+ZGlybmFtZSA9IChjaGFyICopIGRpcm5hbWU7CisJfQorICAgICAgZWxzZQorCS8qIFRoZSBkZWZhdWx0IHZhbHVlLiAgKi8KKwluZXdfYmluZGluZy0+ZGlybmFtZSA9IChjaGFyICopIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKworICAgICAgbmV3X2JpbmRpbmctPmNvZGVzZXRfY250ciA9IDA7CisKKyAgICAgIGlmIChjb2Rlc2V0cCkKKwl7CisJICBjb25zdCBjaGFyICpjb2Rlc2V0ID0gKmNvZGVzZXRwOworCisJICBpZiAoY29kZXNldCAhPSBOVUxMKQorCSAgICB7CisJICAgICAgY2hhciAqcmVzdWx0OworCisjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCisJICAgICAgcmVzdWx0ID0gc3RyZHVwIChjb2Rlc2V0KTsKKwkgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ID09IE5VTEwsIDApKQorCQlnb3RvIGZhaWxlZF9jb2Rlc2V0OworI2Vsc2UKKwkgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChjb2Rlc2V0KSArIDE7CisJICAgICAgcmVzdWx0ID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgPT0gTlVMTCwgMCkpCisJCWdvdG8gZmFpbGVkX2NvZGVzZXQ7CisJICAgICAgbWVtY3B5IChyZXN1bHQsIGNvZGVzZXQsIGxlbik7CisjZW5kaWYKKwkgICAgICBjb2Rlc2V0ID0gcmVzdWx0OworCSAgICAgIG5ld19iaW5kaW5nLT5jb2Rlc2V0X2NudHIrKzsKKwkgICAgfQorCSAgKmNvZGVzZXRwID0gY29kZXNldDsKKwkgIG5ld19iaW5kaW5nLT5jb2Rlc2V0ID0gKGNoYXIgKikgY29kZXNldDsKKwl9CisgICAgICBlbHNlCisJbmV3X2JpbmRpbmctPmNvZGVzZXQgPSBOVUxMOworCisgICAgICAvKiBOb3cgZW5xdWV1ZSBpdC4gICovCisgICAgICBpZiAoX25sX2RvbWFpbl9iaW5kaW5ncyA9PSBOVUxMCisJICB8fCBzdHJjbXAgKGRvbWFpbm5hbWUsIF9ubF9kb21haW5fYmluZGluZ3MtPmRvbWFpbm5hbWUpIDwgMCkKKwl7CisJICBuZXdfYmluZGluZy0+bmV4dCA9IF9ubF9kb21haW5fYmluZGluZ3M7CisJICBfbmxfZG9tYWluX2JpbmRpbmdzID0gbmV3X2JpbmRpbmc7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGJpbmRpbmcgPSBfbmxfZG9tYWluX2JpbmRpbmdzOworCSAgd2hpbGUgKGJpbmRpbmctPm5leHQgIT0gTlVMTAorCQkgJiYgc3RyY21wIChkb21haW5uYW1lLCBiaW5kaW5nLT5uZXh0LT5kb21haW5uYW1lKSA+IDApCisJICAgIGJpbmRpbmcgPSBiaW5kaW5nLT5uZXh0OworCisJICBuZXdfYmluZGluZy0+bmV4dCA9IGJpbmRpbmctPm5leHQ7CisJICBiaW5kaW5nLT5uZXh0ID0gbmV3X2JpbmRpbmc7CisJfQorCisgICAgICBtb2RpZmllZCA9IDE7CisKKyAgICAgIC8qIEhlcmUgd2UgZGVhbCB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLiAgKi8KKyAgICAgIGlmICgwKQorCXsKKwlmYWlsZWRfY29kZXNldDoKKwkgIGlmIChuZXdfYmluZGluZy0+ZGlybmFtZSAhPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpCisJICAgIGZyZWUgKG5ld19iaW5kaW5nLT5kaXJuYW1lKTsKKwlmYWlsZWRfZGlybmFtZToKKwkgIGZyZWUgKG5ld19iaW5kaW5nKTsKKwlmYWlsZWQ6CisJICBpZiAoZGlybmFtZXApCisJICAgICpkaXJuYW1lcCA9IE5VTEw7CisJICBpZiAoY29kZXNldHApCisJICAgICpjb2Rlc2V0cCA9IE5VTEw7CisJfQorICAgIH0KKworICAvKiBJZiB3ZSBtb2RpZmllZCBhbnkgYmluZGluZywgd2UgZmx1c2ggdGhlIGNhY2hlcy4gICovCisgIGlmIChtb2RpZmllZCkKKyAgICArK19ubF9tc2dfY2F0X2NudHI7CisKKyAgX19saWJjX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKK30KKworLyogU3BlY2lmeSB0aGF0IHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIGZvdW5kCisgICBpbiBESVJOQU1FIHJhdGhlciB0aGFuIGluIHRoZSBzeXN0ZW0gbG9jYWxlIGRhdGEgYmFzZS4gICovCitjaGFyICoKK0JJTkRURVhURE9NQUlOIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICpkaXJuYW1lKQoreworICBzZXRfYmluZGluZ192YWx1ZXMgKGRvbWFpbm5hbWUsICZkaXJuYW1lLCBOVUxMKTsKKyAgcmV0dXJuIChjaGFyICopIGRpcm5hbWU7Cit9CisKKy8qIFNwZWNpZnkgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBpbiB3aGljaCB0aGUgbWVzc2FnZXMgZnJvbSB0aGUKKyAgIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgcmV0dXJuZWQuICAqLworY2hhciAqCitCSU5EX1RFWFRET01BSU5fQ09ERVNFVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqY29kZXNldCkKK3sKKyAgc2V0X2JpbmRpbmdfdmFsdWVzIChkb21haW5uYW1lLCBOVUxMLCAmY29kZXNldCk7CisgIHJldHVybiAoY2hhciAqKSBjb2Rlc2V0OworfQorCisjaWZkZWYgX0xJQkMKKy8qIEFsaWFzZXMgZm9yIGZ1bmN0aW9uIG5hbWVzIGluIEdOVSBDIExpYnJhcnkuICAqLword2Vha19hbGlhcyAoX19iaW5kdGV4dGRvbWFpbiwgYmluZHRleHRkb21haW4pOword2Vha19hbGlhcyAoX19iaW5kX3RleHRkb21haW5fY29kZXNldCwgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbnRsL2NvbmZpZy5jaGFyc2V0IGIvaW50bC9jb25maWcuY2hhcnNldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2Q0NWZiCi0tLSAvZGV2L251bGwKKysrIGIvaW50bC9jb25maWcuY2hhcnNldApAQCAtMCwwICsxLDYwOCBAQAorIyEgL2Jpbi9zaAorIyBPdXRwdXQgYSBzeXN0ZW0gZGVwZW5kZW50IHRhYmxlIG9mIGNoYXJhY3RlciBlbmNvZGluZyBhbGlhc2VzLgorIworIyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorIyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyMgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisjICAgVVNBLgorIworIyBUaGUgdGFibGUgY29uc2lzdHMgb2YgbGluZXMgb2YgdGhlIGZvcm0KKyMgICAgQUxJQVMgIENBTk9OSUNBTAorIworIyBBTElBUyBpcyB0aGUgKHN5c3RlbSBkZXBlbmRlbnQpIHJlc3VsdCBvZiAibmxfbGFuZ2luZm8gKENPREVTRVQpIi4KKyMgQUxJQVMgaXMgY29tcGFyZWQgaW4gYSBjYXNlIHNlbnNpdGl2ZSB3YXkuCisjCisjIENBTk9OSUNBTCBpcyB0aGUgR05VIGNhbm9uaWNhbCBuYW1lIGZvciB0aGlzIGNoYXJhY3RlciBlbmNvZGluZy4KKyMgSXQgbXVzdCBiZSBhbiBlbmNvZGluZyBzdXBwb3J0ZWQgYnkgbGliaWNvbnYuIFN1cHBvcnQgYnkgR05VIGxpYmMgaXMKKyMgYWxzbyBkZXNpcmFibGUuIENBTk9OSUNBTCBpcyBjYXNlIGluc2Vuc2l0aXZlLiBVc3VhbGx5IGFuIHVwcGVyIGNhc2UKKyMgTUlNRSBjaGFyc2V0IG5hbWUgaXMgcHJlZmVycmVkLgorIyBUaGUgY3VycmVudCBsaXN0IG9mIEdOVSBjYW5vbmljYWwgY2hhcnNldCBuYW1lcyBpcyBhcyBmb2xsb3dzLgorIworIyAgICAgICBuYW1lICAgICAgICAgICAgICBNSU1FPyAgICAgICAgICAgICB1c2VkIGJ5IHdoaWNoIHN5c3RlbXMKKyMgICBBU0NJSSwgQU5TSV9YMy40LTE5NjggICAgICAgZ2xpYmMgc29sYXJpcyBmcmVlYnNkIGRhcndpbgorIyAgIElTTy04ODU5LTEgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisjICAgSVNPLTg4NTktMiAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKyMgICBJU08tODg1OS0zICAgICAgICAgICAgICBZICAgZ2xpYmMgc29sYXJpcworIyAgIElTTy04ODU5LTQgICAgICAgICAgICAgIFkgICBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorIyAgIElTTy04ODU5LTUgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisjICAgSVNPLTg4NTktNiAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IHNvbGFyaXMKKyMgICBJU08tODg1OS03ICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcworIyAgIElTTy04ODU5LTggICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcworIyAgIElTTy04ODU5LTkgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzCisjICAgSVNPLTg4NTktMTMgICAgICAgICAgICAgICAgIGdsaWJjCisjICAgSVNPLTg4NTktMTQgICAgICAgICAgICAgICAgIGdsaWJjCisjICAgSVNPLTg4NTktMTUgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBvc2Ygc29sYXJpcyBmcmVlYnNkCisjICAgS09JOC1SICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKyMgICBLT0k4LVUgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgZnJlZWJzZCBkYXJ3aW4KKyMgICBLT0k4LVQgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMKKyMgICBDUDQzNyAgICAgICAgICAgICAgICAgICAgICAgZG9zCisjICAgQ1A3NzUgICAgICAgICAgICAgICAgICAgICAgIGRvcworIyAgIENQODUwICAgICAgICAgICAgICAgICAgICAgICBhaXggb3NmIGRvcworIyAgIENQODUyICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg1NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisjICAgQ1A4NTYgICAgICAgICAgICAgICAgICAgICAgIGFpeAorIyAgIENQODU3ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg2MSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisjICAgQ1A4NjIgICAgICAgICAgICAgICAgICAgICAgIGRvcworIyAgIENQODY0ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg2NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisjICAgQ1A4NjYgICAgICAgICAgICAgICAgICAgICAgIGZyZWVic2QgZGFyd2luIGRvcworIyAgIENQODY5ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg3NCAgICAgICAgICAgICAgICAgICAgICAgd29lMzIgZG9zCisjICAgQ1A5MjIgICAgICAgICAgICAgICAgICAgICAgIGFpeAorIyAgIENQOTMyICAgICAgICAgICAgICAgICAgICAgICBhaXggd29lMzIgZG9zCisjICAgQ1A5NDMgICAgICAgICAgICAgICAgICAgICAgIGFpeAorIyAgIENQOTQ5ICAgICAgICAgICAgICAgICAgICAgICBvc2Ygd29lMzIgZG9zCisjICAgQ1A5NTAgICAgICAgICAgICAgICAgICAgICAgIHdvZTMyIGRvcworIyAgIENQMTA0NiAgICAgICAgICAgICAgICAgICAgICBhaXgKKyMgICBDUDExMjQgICAgICAgICAgICAgICAgICAgICAgYWl4CisjICAgQ1AxMTI1ICAgICAgICAgICAgICAgICAgICAgIGRvcworIyAgIENQMTEyOSAgICAgICAgICAgICAgICAgICAgICBhaXgKKyMgICBDUDEyNTAgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKyMgICBDUDEyNTEgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgc29sYXJpcyBkYXJ3aW4gd29lMzIKKyMgICBDUDEyNTIgICAgICAgICAgICAgICAgICAgICAgYWl4IHdvZTMyCisjICAgQ1AxMjUzICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisjICAgQ1AxMjU0ICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisjICAgQ1AxMjU1ICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHdvZTMyCisjICAgQ1AxMjU2ICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisjICAgQ1AxMjU3ICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisjICAgR0IyMzEyICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggc29sYXJpcyBmcmVlYnNkIGRhcndpbgorIyAgIEVVQy1KUCAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisjICAgRVVDLUtSICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKyMgICBFVUMtVFcgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcworIyAgIEJJRzUgICAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorIyAgIEJJRzUtSEtTQ1MgICAgICAgICAgICAgICAgICBnbGliYyBzb2xhcmlzCisjICAgR0JLICAgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBvc2Ygc29sYXJpcyB3b2UzMiBkb3MKKyMgICBHQjE4MDMwICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgc29sYXJpcworIyAgIFNISUZUX0pJUyAgICAgICAgICAgICAgIFkgICBocHV4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisjICAgSk9IQUIgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMgd29lMzIKKyMgICBUSVMtNjIwICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgYWl4IGhwdXggb3NmIHNvbGFyaXMKKyMgICBWSVNDSUkgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMKKyMgICBUQ1ZONTcxMi0xICAgICAgICAgICAgICAgICAgZ2xpYmMKKyMgICBHRU9SR0lBTi1QUyAgICAgICAgICAgICAgICAgZ2xpYmMKKyMgICBIUC1ST01BTjggICAgICAgICAgICAgICAgICAgaHB1eAorIyAgIEhQLUFSQUJJQzggICAgICAgICAgICAgICAgICBocHV4CisjICAgSFAtR1JFRUs4ICAgICAgICAgICAgICAgICAgIGhwdXgKKyMgICBIUC1IRUJSRVc4ICAgICAgICAgICAgICAgICAgaHB1eAorIyAgIEhQLVRVUktJU0g4ICAgICAgICAgICAgICAgICBocHV4CisjICAgSFAtS0FOQTggICAgICAgICAgICAgICAgICAgIGhwdXgKKyMgICBERUMtS0FOSkkgICAgICAgICAgICAgICAgICAgb3NmCisjICAgREVDLUhBTllVICAgICAgICAgICAgICAgICAgIG9zZgorIyAgIFVURi04ICAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcworIworIyBOb3RlOiBOYW1lcyB3aGljaCBhcmUgbm90IG1hcmtlZCBhcyBiZWluZyBhIE1JTUUgbmFtZSBzaG91bGQgbm90IGJlIHVzZWQgaW4KKyMgSW50ZXJuZXQgcHJvdG9jb2xzIGZvciBpbmZvcm1hdGlvbiBpbnRlcmNoYW5nZSAobWFpbCwgbmV3cywgZXRjLikuCisjCisjIE5vdGU6IEFTQ0lJIGFuZCBBTlNJX1gzLjQtMTk2OCBhcmUgc3lub255bW91cyBjYW5vbmljYWwgbmFtZXMuIEFwcGxpY2F0aW9ucworIyBtdXN0IHVuZGVyc3RhbmQgYm90aCBuYW1lcyBhbmQgdHJlYXQgdGhlbSBhcyBlcXVpdmFsZW50LgorIworIyBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgZmlsZSBpcyB0aGUgY2Fub25pY2FsIGhvc3Qgc3BlY2lmaWNhdGlvbiwKKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKyMgb3IKKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisKK2hvc3Q9IiQxIgorb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAtZSAncy9eW14tXSotW14tXSotXCguKlwpJC9cMS8nYAorZWNobyAiIyBUaGlzIGZpbGUgY29udGFpbnMgYSB0YWJsZSBvZiBjaGFyYWN0ZXIgZW5jb2RpbmcgYWxpYXNlcywiCitlY2hvICIjIHN1aXRhYmxlIGZvciBvcGVyYXRpbmcgc3lzdGVtICcke29zfScuIgorZWNobyAiIyBJdCB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb25maWcuY2hhcnNldC4iCisjIExpc3Qgb2YgcmVmZXJlbmNlcywgdXBkYXRlZCBkdXJpbmcgaW5zdGFsbGF0aW9uOgorZWNobyAiIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6ICIKK2Nhc2UgIiRvcyIgaW4KKyAgICBsaW51eC1nbnVsaWJjMSopCisJIyBMaW51eCBsaWJjNSBkb2Vzbid0IGhhdmUgbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHRoZXJlZm9yZQorCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCWVjaG8gIkMgQVNDSUkiCisJZWNobyAiUE9TSVggQVNDSUkiCisJZm9yIGwgaW4gYWYgYWZfWkEgY2EgY2FfRVMgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgXAorCSAgICAgICAgIGVuIGVuX0FVIGVuX0JXIGVuX0NBIGVuX0RLIGVuX0dCIGVuX0lFIGVuX05aIGVuX1VTIGVuX1pBIFwKKwkgICAgICAgICBlbl9aVyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19ETyBlc19FQyBlc19FUyBlc19HVCBcCisJICAgICAgICAgZXNfSE4gZXNfTVggZXNfUEEgZXNfUEUgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgXAorCSAgICAgICAgIGV0X0VFIGV1IGV1X0VTIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIFwKKwkgICAgICAgICBmcl9MVSBnYSBnYV9JRSBnbCBnbF9FUyBpZCBpZF9JRCBpbiBpbl9JRCBpcyBpc19JUyBpdCBpdF9DSCBcCisJICAgICAgICAgaXRfSVQga2wga2xfR0wgbmwgbmxfQkUgbmxfTkwgbm8gbm9fTk8gcHQgcHRfQlIgcHRfUFQgc3YgXAorCSAgICAgICAgIHN2X0ZJIHN2X1NFOyBkbworCSAgZWNobyAiJGwgSVNPLTg4NTktMSIKKwkgIGVjaG8gIiRsLmlzby04ODU5LTEgSVNPLTg4NTktMSIKKwkgIGVjaG8gIiRsLmlzby04ODU5LTE1IElTTy04ODU5LTE1IgorCSAgZWNobyAiJGwuaXNvLTg4NTktMTVAZXVybyBJU08tODg1OS0xNSIKKwkgIGVjaG8gIiRsQGV1cm8gSVNPLTg4NTktMTUiCisJICBlY2hvICIkbC5jcC00MzcgQ1A0MzciCisJICBlY2hvICIkbC5jcC04NTAgQ1A4NTAiCisJICBlY2hvICIkbC5jcC0xMjUyIENQMTI1MiIKKwkgIGVjaG8gIiRsLmNwLTEyNTJAZXVybyBDUDEyNTIiCisJICAjZWNobyAiJGwuYXRhcmktc3QgQVRBUkktU1QiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZworCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisJICBlY2hvICIkbC51dGYtOEBldXJvIFVURi04IgorCWRvbmUKKwlmb3IgbCBpbiBjcyBjc19DWiBociBocl9IUiBodSBodV9IVSBwbCBwbF9QTCBybyByb19STyBzayBza19TSyBzbCBcCisJICAgICAgICAgc2xfU0kgc3Igc3JfQ1Mgc3JfWVU7IGRvCisJICBlY2hvICIkbCBJU08tODg1OS0yIgorCSAgZWNobyAiJGwuaXNvLTg4NTktMiBJU08tODg1OS0yIgorCSAgZWNobyAiJGwuY3AtODUyIENQODUyIgorCSAgZWNobyAiJGwuY3AtMTI1MCBDUDEyNTAiCisJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKwlkb25lCisJZm9yIGwgaW4gbWsgbWtfTUsgcnUgcnVfUlU7IGRvCisJICBlY2hvICIkbCBJU08tODg1OS01IgorCSAgZWNobyAiJGwuaXNvLTg4NTktNSBJU08tODg1OS01IgorCSAgZWNobyAiJGwua29pOC1yIEtPSTgtUiIKKwkgIGVjaG8gIiRsLmNwLTg2NiBDUDg2NiIKKwkgIGVjaG8gIiRsLmNwLTEyNTEgQ1AxMjUxIgorCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisJZG9uZQorCWZvciBsIGluIGFyIGFyX1NBOyBkbworCSAgZWNobyAiJGwgSVNPLTg4NTktNiIKKwkgIGVjaG8gIiRsLmlzby04ODU5LTYgSVNPLTg4NTktNiIKKwkgIGVjaG8gIiRsLmNwLTg2NCBDUDg2NCIKKwkgICNlY2hvICIkbC5jcC04NjggQ1A4NjgiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZworCSAgZWNobyAiJGwuY3AtMTI1NiBDUDEyNTYiCisJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKwlkb25lCisJZm9yIGwgaW4gZWwgZWxfR1IgZ3IgZ3JfR1I7IGRvCisJICBlY2hvICIkbCBJU08tODg1OS03IgorCSAgZWNobyAiJGwuaXNvLTg4NTktNyBJU08tODg1OS03IgorCSAgZWNobyAiJGwuY3AtODY5IENQODY5IgorCSAgZWNobyAiJGwuY3AtMTI1MyBDUDEyNTMiCisJICBlY2hvICIkbC5jcC0xMjUzQGV1cm8gQ1AxMjUzIgorCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisJICBlY2hvICIkbC51dGYtOEBldXJvIFVURi04IgorCWRvbmUKKwlmb3IgbCBpbiBoZSBoZV9JTCBpdyBpd19JTDsgZG8KKwkgIGVjaG8gIiRsIElTTy04ODU5LTgiCisJICBlY2hvICIkbC5pc28tODg1OS04IElTTy04ODU5LTgiCisJICBlY2hvICIkbC5jcC04NjIgQ1A4NjIiCisJICBlY2hvICIkbC5jcC0xMjU1IENQMTI1NSIKKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorCWRvbmUKKwlmb3IgbCBpbiB0ciB0cl9UUjsgZG8KKwkgIGVjaG8gIiRsIElTTy04ODU5LTkiCisJICBlY2hvICIkbC5pc28tODg1OS05IElTTy04ODU5LTkiCisJICBlY2hvICIkbC5jcC04NTcgQ1A4NTciCisJICBlY2hvICIkbC5jcC0xMjU0IENQMTI1NCIKKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorCWRvbmUKKwlmb3IgbCBpbiBsdCBsdF9MVCBsdiBsdl9MVjsgZG8KKwkgICNlY2hvICIkbCBCQUxUSUMiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZywgd3JvbmcgZW5jb2RpbmcgbmFtZQorCSAgZWNobyAiJGwgSVNPLTg4NTktMTMiCisJZG9uZQorCWZvciBsIGluIHJ1X1VBIHVrIHVrX1VBOyBkbworCSAgZWNobyAiJGwgS09JOC1VIgorCWRvbmUKKwlmb3IgbCBpbiB6aCB6aF9DTjsgZG8KKwkgICNlY2hvICIkbCBHQl8yMzEyLTgwIiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcsIHdyb25nIGVuY29kaW5nIG5hbWUKKwkgIGVjaG8gIiRsIEdCMjMxMiIKKwlkb25lCisJZm9yIGwgaW4gamEgamFfSlAgamFfSlAuRVVDOyBkbworCSAgZWNobyAiJGwgRVVDLUpQIgorCWRvbmUKKwlmb3IgbCBpbiBrbyBrb19LUjsgZG8KKwkgIGVjaG8gIiRsIEVVQy1LUiIKKwlkb25lCisJZm9yIGwgaW4gdGggdGhfVEg7IGRvCisJICBlY2hvICIkbCBUSVMtNjIwIgorCWRvbmUKKwlmb3IgbCBpbiBmYSBmYV9JUjsgZG8KKwkgICNlY2hvICIkbCBJU0lSSS0zMzQyIiAjIGEgYnJva2VuIGVuY29kaW5nCisJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKwlkb25lCisJOzsKKyAgICBsaW51eCogfCAqLWdudSopCisJIyBXaXRoIGdsaWJjLTIuMSBvciBuZXdlciwgd2UgZG9uJ3QgbmVlZCBhbnkgY2Fub25pY2FsaXphdGlvbiwKKwkjIGJlY2F1c2UgZ2xpYmMgaGFzIGljb252IGFuZCBib3RoIGdsaWJjIGFuZCBsaWJpY29udiBzdXBwb3J0IGFsbAorCSMgR05VIGNhbm9uaWNhbCBuYW1lcyBkaXJlY3RseS4gVGhlcmVmb3JlLCB0aGUgTWFrZWZpbGUgZG9lcyBub3QKKwkjIG5lZWQgdG8gaW5zdGFsbCB0aGUgYWxpYXMgZmlsZSBhdCBhbGwuCisJIyBUaGUgZm9sbG93aW5nIGFwcGxpZXMgb25seSB0byBnbGliYy0yLjAueCBhbmQgb2xkZXIgbGliY3MuCisJZWNobyAiSVNPXzY0Ni5JUlY6MTk4MyBBU0NJSSIKKwk7OworICAgIGFpeCopCisJZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCisJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisJZWNobyAiSVNPODg1OS02IElTTy04ODU5LTYiCisJZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCisJZWNobyAiSVNPODg1OS04IElTTy04ODU5LTgiCisJZWNobyAiSVNPODg1OS05IElTTy04ODU5LTkiCisJZWNobyAiSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKwllY2hvICJJQk0tODUwIENQODUwIgorCWVjaG8gIklCTS04NTYgQ1A4NTYiCisJZWNobyAiSUJNLTkyMSBJU08tODg1OS0xMyIKKwllY2hvICJJQk0tOTIyIENQOTIyIgorCWVjaG8gIklCTS05MzIgQ1A5MzIiCisJZWNobyAiSUJNLTk0MyBDUDk0MyIKKwllY2hvICJJQk0tMTA0NiBDUDEwNDYiCisJZWNobyAiSUJNLTExMjQgQ1AxMTI0IgorCWVjaG8gIklCTS0xMTI5IENQMTEyOSIKKwllY2hvICJJQk0tMTI1MiBDUDEyNTIiCisJZWNobyAiSUJNLWV1Y0NOIEdCMjMxMiIKKwllY2hvICJJQk0tZXVjSlAgRVVDLUpQIgorCWVjaG8gIklCTS1ldWNLUiBFVUMtS1IiCisJZWNobyAiSUJNLWV1Y1RXIEVVQy1UVyIKKwllY2hvICJiaWc1IEJJRzUiCisJZWNobyAiR0JLIEdCSyIKKwllY2hvICJUSVMtNjIwIFRJUy02MjAiCisJZWNobyAiVVRGLTggVVRGLTgiCisJOzsKKyAgICBocHV4KikKKwllY2hvICJpc284ODU5MSBJU08tODg1OS0xIgorCWVjaG8gImlzbzg4NTkyIElTTy04ODU5LTIiCisJZWNobyAiaXNvODg1OTUgSVNPLTg4NTktNSIKKwllY2hvICJpc284ODU5NiBJU08tODg1OS02IgorCWVjaG8gImlzbzg4NTk3IElTTy04ODU5LTciCisJZWNobyAiaXNvODg1OTggSVNPLTg4NTktOCIKKwllY2hvICJpc284ODU5OSBJU08tODg1OS05IgorCWVjaG8gImlzbzg4NTkxNSBJU08tODg1OS0xNSIKKwllY2hvICJyb21hbjggSFAtUk9NQU44IgorCWVjaG8gImFyYWJpYzggSFAtQVJBQklDOCIKKwllY2hvICJncmVlazggSFAtR1JFRUs4IgorCWVjaG8gImhlYnJldzggSFAtSEVCUkVXOCIKKwllY2hvICJ0dXJraXNoOCBIUC1UVVJLSVNIOCIKKwllY2hvICJrYW5hOCBIUC1LQU5BOCIKKwllY2hvICJ0aXM2MjAgVElTLTYyMCIKKwllY2hvICJiaWc1IEJJRzUiCisJZWNobyAiZXVjSlAgRVVDLUpQIgorCWVjaG8gImV1Y0tSIEVVQy1LUiIKKwllY2hvICJldWNUVyBFVUMtVFciCisJZWNobyAiaHAxNUNOIEdCMjMxMiIKKwkjZWNobyAiY2NkYyA/IiAjIHdoYXQgaXMgdGhpcz8KKwllY2hvICJTSklTIFNISUZUX0pJUyIKKwllY2hvICJ1dGY4IFVURi04IgorCTs7CisgICAgaXJpeCopCisJZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCisJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisJZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCisJZWNobyAiSVNPODg1OS05IElTTy04ODU5LTkiCisJZWNobyAiZXVjQ04gR0IyMzEyIgorCWVjaG8gImV1Y0pQIEVVQy1KUCIKKwllY2hvICJldWNLUiBFVUMtS1IiCisJZWNobyAiZXVjVFcgRVVDLVRXIgorCTs7CisgICAgb3NmKikKKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKwllY2hvICJJU084ODU5LTQgSVNPLTg4NTktNCIKKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKwllY2hvICJJU084ODU5LTggSVNPLTg4NTktOCIKKwllY2hvICJJU084ODU5LTkgSVNPLTg4NTktOSIKKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorCWVjaG8gImNwODUwIENQODUwIgorCWVjaG8gImJpZzUgQklHNSIKKwllY2hvICJkZWNoYW55dSBERUMtSEFOWVUiCisJZWNobyAiZGVjaGFuemkgR0IyMzEyIgorCWVjaG8gImRlY2thbmppIERFQy1LQU5KSSIKKwllY2hvICJkZWNrb3JlYW4gRVVDLUtSIgorCWVjaG8gImV1Y0pQIEVVQy1KUCIKKwllY2hvICJldWNLUiBFVUMtS1IiCisJZWNobyAiZXVjVFcgRVVDLVRXIgorCWVjaG8gIkdCSyBHQksiCisJZWNobyAiS1NDNTYwMSBDUDk0OSIKKwllY2hvICJzZGVja2FuamkgRVVDLUpQIgorCWVjaG8gIlNKSVMgU0hJRlRfSklTIgorCWVjaG8gIlRBQ1RJUyBUSVMtNjIwIgorCWVjaG8gIlVURi04IFVURi04IgorCTs7CisgICAgc29sYXJpcyopCisJZWNobyAiNjQ2IEFTQ0lJIgorCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorCWVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorCWVjaG8gIklTTzg4NTktMyBJU08tODg1OS0zIgorCWVjaG8gIklTTzg4NTktNCBJU08tODg1OS00IgorCWVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorCWVjaG8gIklTTzg4NTktNiBJU08tODg1OS02IgorCWVjaG8gIklTTzg4NTktNyBJU08tODg1OS03IgorCWVjaG8gIklTTzg4NTktOCBJU08tODg1OS04IgorCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorCWVjaG8gIklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisJZWNobyAia29pOC1yIEtPSTgtUiIKKwllY2hvICJhbnNpLTEyNTEgQ1AxMjUxIgorCWVjaG8gIkJJRzUgQklHNSIKKwllY2hvICJCaWc1LUhLU0NTIEJJRzUtSEtTQ1MiCisJZWNobyAiZ2IyMzEyIEdCMjMxMiIKKwllY2hvICJHQksgR0JLIgorCWVjaG8gIkdCMTgwMzAgR0IxODAzMCIKKwllY2hvICJjbnMxMTY0MyBFVUMtVFciCisJZWNobyAiNTYwMSBFVUMtS1IiCisJZWNobyAia29fS1Iuam9oYXA5MiBKT0hBQiIKKwllY2hvICJldWNKUCBFVUMtSlAiCisJZWNobyAiUENLIFNISUZUX0pJUyIKKwllY2hvICJUSVM2MjAuMjUzMyBUSVMtNjIwIgorCSNlY2hvICJzdW5fZXVfZ3JlZWsgPyIgIyB3aGF0IGlzIHRoaXM/CisJZWNobyAiVVRGLTggVVRGLTgiCisJOzsKKyAgICBmcmVlYnNkKiB8IG9zMiopCisJIyBGcmVlQlNEIDQuMiBkb2Vzbid0IGhhdmUgbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHRoZXJlZm9yZQorCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCSMgTGlrZXdpc2UgZm9yIE9TLzIuIE9TLzIgaGFzIFhGcmVlODYganVzdCBsaWtlIEZyZWVCU0QuIEp1c3QKKwkjIHJldXNlIEZyZWVCU0QncyBsb2NhbGUgZGF0YSBmb3IgT1MvMi4KKwllY2hvICJDIEFTQ0lJIgorCWVjaG8gIlVTLUFTQ0lJIEFTQ0lJIgorCWZvciBsIGluIGxhX0xOIGx0X0xOOyBkbworCSAgZWNobyAiJGwuQVNDSUkgQVNDSUkiCisJZG9uZQorCWZvciBsIGluIGRhX0RLIGRlX0FUIGRlX0NIIGRlX0RFIGVuX0FVIGVuX0NBIGVuX0dCIGVuX1VTIGVzX0VTIFwKKwkgICAgICAgICBmaV9GSSBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBpc19JUyBpdF9DSCBpdF9JVCBsYV9MTiBcCisJICAgICAgICAgbHRfTE4gbmxfQkUgbmxfTkwgbm9fTk8gcHRfUFQgc3ZfU0U7IGRvCisJICBlY2hvICIkbC5JU09fODg1OS0xIElTTy04ODU5LTEiCisJICBlY2hvICIkbC5ESVNfODg1OS0xNSBJU08tODg1OS0xNSIKKwlkb25lCisJZm9yIGwgaW4gY3NfQ1ogaHJfSFIgaHVfSFUgbGFfTE4gbHRfTE4gcGxfUEwgc2xfU0k7IGRvCisJICBlY2hvICIkbC5JU09fODg1OS0yIElTTy04ODU5LTIiCisJZG9uZQorCWZvciBsIGluIGxhX0xOIGx0X0xUOyBkbworCSAgZWNobyAiJGwuSVNPXzg4NTktNCBJU08tODg1OS00IgorCWRvbmUKKwlmb3IgbCBpbiBydV9SVSBydV9TVTsgZG8KKwkgIGVjaG8gIiRsLktPSTgtUiBLT0k4LVIiCisJICBlY2hvICIkbC5JU09fODg1OS01IElTTy04ODU5LTUiCisJICBlY2hvICIkbC5DUDg2NiBDUDg2NiIKKwlkb25lCisJZWNobyAidWtfVUEuS09JOC1VIEtPSTgtVSIKKwllY2hvICJ6aF9UVy5CSUc1IEJJRzUiCisJZWNobyAiemhfVFcuQmlnNSBCSUc1IgorCWVjaG8gInpoX0NOLkVVQyBHQjIzMTIiCisJZWNobyAiamFfSlAuRVVDIEVVQy1KUCIKKwllY2hvICJqYV9KUC5TSklTIFNISUZUX0pJUyIKKwllY2hvICJqYV9KUC5TaGlmdF9KSVMgU0hJRlRfSklTIgorCWVjaG8gImtvX0tSLkVVQyBFVUMtS1IiCisJOzsKKyAgICBuZXRic2QqKQorCWVjaG8gIjY0NiBBU0NJSSIKKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKwllY2hvICJJU084ODU5LTQgSVNPLTg4NTktNCIKKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorCWVjaG8gImV1Y0NOIEdCMjMxMiIKKwllY2hvICJldWNKUCBFVUMtSlAiCisJZWNobyAiZXVjS1IgRVVDLUtSIgorCWVjaG8gImV1Y1RXIEVVQy1UVyIKKwllY2hvICJCSUc1IEJJRzUiCisJZWNobyAiU0pJUyBTSElGVF9KSVMiCisJOzsKKyAgICBkYXJ3aW4qKQorCSMgRGFyd2luIDYuOCBkb2Vzbid0IGhhdmUgbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHRoZXJlZm9yZQorCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCWVjaG8gIkMgQVNDSUkiCisJZm9yIGwgaW4gZW5fQVUgZW5fQ0EgZW5fR0IgZW5fVVMgbGFfTE47IGRvCisJICBlY2hvICIkbC5VUy1BU0NJSSBBU0NJSSIKKwlkb25lCisJZm9yIGwgaW4gZGFfREsgZGVfQVQgZGVfQ0ggZGVfREUgZW5fQVUgZW5fQ0EgZW5fR0IgZW5fVVMgZXNfRVMgXAorCSAgICAgICAgIGZpX0ZJIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGlzX0lTIGl0X0NIIGl0X0lUIG5sX0JFIFwKKwkgICAgICAgICBubF9OTCBub19OTyBwdF9QVCBzdl9TRTsgZG8KKwkgIGVjaG8gIiRsIElTTy04ODU5LTEiCisJICBlY2hvICIkbC5JU084ODU5LTEgSVNPLTg4NTktMSIKKwkgIGVjaG8gIiRsLklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisJZG9uZQorCWZvciBsIGluIGxhX0xOOyBkbworCSAgZWNobyAiJGwuSVNPODg1OS0xIElTTy04ODU5LTEiCisJICBlY2hvICIkbC5JU084ODU5LTE1IElTTy04ODU5LTE1IgorCWRvbmUKKwlmb3IgbCBpbiBjc19DWiBocl9IUiBodV9IVSBsYV9MTiBwbF9QTCBzbF9TSTsgZG8KKwkgIGVjaG8gIiRsLklTTzg4NTktMiBJU08tODg1OS0yIgorCWRvbmUKKwlmb3IgbCBpbiBsYV9MTiBsdF9MVDsgZG8KKwkgIGVjaG8gIiRsLklTTzg4NTktNCBJU08tODg1OS00IgorCWRvbmUKKwlmb3IgbCBpbiBydV9SVTsgZG8KKwkgIGVjaG8gIiRsLktPSTgtUiBLT0k4LVIiCisJICBlY2hvICIkbC5JU084ODU5LTUgSVNPLTg4NTktNSIKKwkgIGVjaG8gIiRsLkNQODY2IENQODY2IgorCWRvbmUKKwlmb3IgbCBpbiBiZ19CRzsgZG8KKwkgIGVjaG8gIiRsLkNQMTI1MSBDUDEyNTEiCisJZG9uZQorCWVjaG8gInVrX1VBLktPSTgtVSBLT0k4LVUiCisJZWNobyAiemhfVFcuQklHNSBCSUc1IgorCWVjaG8gInpoX1RXLkJpZzUgQklHNSIKKwllY2hvICJ6aF9DTi5FVUMgR0IyMzEyIgorCWVjaG8gImphX0pQLkVVQyBFVUMtSlAiCisJZWNobyAiamFfSlAuU0pJUyBTSElGVF9KSVMiCisJZWNobyAia29fS1IuRVVDIEVVQy1LUiIKKwk7OworICAgIGJlb3MqKQorCSMgQmVPUyBoYXMgYSBzaW5nbGUgbG9jYWxlLCBhbmQgaXQgaGFzIFVURi04IGVuY29kaW5nLgorCWVjaG8gIiogVVRGLTgiCisJOzsKKyAgICBtc2Rvc2RqZ3BwKikKKwkjIERKR1BQIDIuMDMgZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKwkjIGxvY2FsY2hhcnNldC5jIGZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIGZ1bGwgbG9jYWxlIG5hbWUKKwkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKwllY2hvICIjIgorCWVjaG8gIiMgVGhlIGVuY29kaW5ncyBnaXZlbiBoZXJlIG1heSBub3QgYWxsIGJlIGNvcnJlY3QuIgorCWVjaG8gIiMgSWYgeW91IGZpbmQgdGhhdCB0aGUgZW5jb2RpbmcgZ2l2ZW4gZm9yIHlvdXIgbGFuZ3VhZ2UgYW5kIgorCWVjaG8gIiMgY291bnRyeSBpcyBub3QgdGhlIG9uZSB5b3VyIERPUyBtYWNoaW5lIGFjdHVhbGx5IHVzZXMsIGp1c3QiCisJZWNobyAiIyBjb3JyZWN0IGl0IGluIHRoaXMgZmlsZSwgYW5kIHNlbmQgYSBtYWlsIHRvIgorCWVjaG8gIiMgSnVhbiBNYW51ZWwgR3VlcnJlcm8gPHN0MDAxOTA2QGhyejEuaHJ6LnR1LWRhcm1zdGFkdC5kZT4iCisJZWNobyAiIyBhbmQgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LiIKKwllY2hvICIjIgorCWVjaG8gIkMgQVNDSUkiCisJIyBJU08tODg1OS0xIGxhbmd1YWdlcworCWVjaG8gImNhIENQODUwIgorCWVjaG8gImNhX0VTIENQODUwIgorCWVjaG8gImRhIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworCWVjaG8gImRhX0RLIENQODY1IiAjIG5vdCBDUDg1MCA/PworCWVjaG8gImRlIENQODUwIgorCWVjaG8gImRlX0FUIENQODUwIgorCWVjaG8gImRlX0NIIENQODUwIgorCWVjaG8gImRlX0RFIENQODUwIgorCWVjaG8gImVuIENQODUwIgorCWVjaG8gImVuX0FVIENQODUwIiAjIG5vdCBDUDQzNyA/PworCWVjaG8gImVuX0NBIENQODUwIgorCWVjaG8gImVuX0dCIENQODUwIgorCWVjaG8gImVuX05aIENQNDM3IgorCWVjaG8gImVuX1VTIENQNDM3IgorCWVjaG8gImVuX1pBIENQODUwIiAjIG5vdCBDUDQzNyA/PworCWVjaG8gImVzIENQODUwIgorCWVjaG8gImVzX0FSIENQODUwIgorCWVjaG8gImVzX0JPIENQODUwIgorCWVjaG8gImVzX0NMIENQODUwIgorCWVjaG8gImVzX0NPIENQODUwIgorCWVjaG8gImVzX0NSIENQODUwIgorCWVjaG8gImVzX0NVIENQODUwIgorCWVjaG8gImVzX0RPIENQODUwIgorCWVjaG8gImVzX0VDIENQODUwIgorCWVjaG8gImVzX0VTIENQODUwIgorCWVjaG8gImVzX0dUIENQODUwIgorCWVjaG8gImVzX0hOIENQODUwIgorCWVjaG8gImVzX01YIENQODUwIgorCWVjaG8gImVzX05JIENQODUwIgorCWVjaG8gImVzX1BBIENQODUwIgorCWVjaG8gImVzX1BZIENQODUwIgorCWVjaG8gImVzX1BFIENQODUwIgorCWVjaG8gImVzX1NWIENQODUwIgorCWVjaG8gImVzX1VZIENQODUwIgorCWVjaG8gImVzX1ZFIENQODUwIgorCWVjaG8gImV0IENQODUwIgorCWVjaG8gImV0X0VFIENQODUwIgorCWVjaG8gImV1IENQODUwIgorCWVjaG8gImV1X0VTIENQODUwIgorCWVjaG8gImZpIENQODUwIgorCWVjaG8gImZpX0ZJIENQODUwIgorCWVjaG8gImZyIENQODUwIgorCWVjaG8gImZyX0JFIENQODUwIgorCWVjaG8gImZyX0NBIENQODUwIgorCWVjaG8gImZyX0NIIENQODUwIgorCWVjaG8gImZyX0ZSIENQODUwIgorCWVjaG8gImdhIENQODUwIgorCWVjaG8gImdhX0lFIENQODUwIgorCWVjaG8gImdkIENQODUwIgorCWVjaG8gImdkX0dCIENQODUwIgorCWVjaG8gImdsIENQODUwIgorCWVjaG8gImdsX0VTIENQODUwIgorCWVjaG8gImlkIENQODUwIiAgICAjIG5vdCBDUDQzNyA/PworCWVjaG8gImlkX0lEIENQODUwIiAjIG5vdCBDUDQzNyA/PworCWVjaG8gImlzIENQODYxIiAgICAjIG5vdCBDUDg1MCA/PworCWVjaG8gImlzX0lTIENQODYxIiAjIG5vdCBDUDg1MCA/PworCWVjaG8gIml0IENQODUwIgorCWVjaG8gIml0X0NIIENQODUwIgorCWVjaG8gIml0X0lUIENQODUwIgorCWVjaG8gImx0IENQNzc1IgorCWVjaG8gImx0X0xUIENQNzc1IgorCWVjaG8gImx2IENQNzc1IgorCWVjaG8gImx2X0xWIENQNzc1IgorCWVjaG8gIm5iIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworCWVjaG8gIm5iX05PIENQODY1IiAjIG5vdCBDUDg1MCA/PworCWVjaG8gIm5sIENQODUwIgorCWVjaG8gIm5sX0JFIENQODUwIgorCWVjaG8gIm5sX05MIENQODUwIgorCWVjaG8gIm5uIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworCWVjaG8gIm5uX05PIENQODY1IiAjIG5vdCBDUDg1MCA/PworCWVjaG8gIm5vIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworCWVjaG8gIm5vX05PIENQODY1IiAjIG5vdCBDUDg1MCA/PworCWVjaG8gInB0IENQODUwIgorCWVjaG8gInB0X0JSIENQODUwIgorCWVjaG8gInB0X1BUIENQODUwIgorCWVjaG8gInN2IENQODUwIgorCWVjaG8gInN2X1NFIENQODUwIgorCSMgSVNPLTg4NTktMiBsYW5ndWFnZXMKKwllY2hvICJjcyBDUDg1MiIKKwllY2hvICJjc19DWiBDUDg1MiIKKwllY2hvICJociBDUDg1MiIKKwllY2hvICJocl9IUiBDUDg1MiIKKwllY2hvICJodSBDUDg1MiIKKwllY2hvICJodV9IVSBDUDg1MiIKKwllY2hvICJwbCBDUDg1MiIKKwllY2hvICJwbF9QTCBDUDg1MiIKKwllY2hvICJybyBDUDg1MiIKKwllY2hvICJyb19STyBDUDg1MiIKKwllY2hvICJzayBDUDg1MiIKKwllY2hvICJza19TSyBDUDg1MiIKKwllY2hvICJzbCBDUDg1MiIKKwllY2hvICJzbF9TSSBDUDg1MiIKKwllY2hvICJzcSBDUDg1MiIKKwllY2hvICJzcV9BTCBDUDg1MiIKKwllY2hvICJzciBDUDg1MiIgICAgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworCWVjaG8gInNyX0NTIENQODUyIiAjIENQODUyIG9yIENQODY2IG9yIENQODU1ID8/CisJZWNobyAic3JfWVUgQ1A4NTIiICMgQ1A4NTIgb3IgQ1A4NjYgb3IgQ1A4NTUgPz8KKwkjIElTTy04ODU5LTMgbGFuZ3VhZ2VzCisJZWNobyAibXQgQ1A4NTAiCisJZWNobyAibXRfTVQgQ1A4NTAiCisJIyBJU08tODg1OS01IGxhbmd1YWdlcworCWVjaG8gImJlIENQODY2IgorCWVjaG8gImJlX0JFIENQODY2IgorCWVjaG8gImJnIENQODY2IiAgICAjIG5vdCBDUDg1NSA/PworCWVjaG8gImJnX0JHIENQODY2IiAjIG5vdCBDUDg1NSA/PworCWVjaG8gIm1rIENQODY2IiAgICAjIG5vdCBDUDg1NSA/PworCWVjaG8gIm1rX01LIENQODY2IiAjIG5vdCBDUDg1NSA/PworCWVjaG8gInJ1IENQODY2IgorCWVjaG8gInJ1X1JVIENQODY2IgorCWVjaG8gInVrIENQMTEyNSIKKwllY2hvICJ1a19VQSBDUDExMjUiCisJIyBJU08tODg1OS02IGxhbmd1YWdlcworCWVjaG8gImFyIENQODY0IgorCWVjaG8gImFyX0FFIENQODY0IgorCWVjaG8gImFyX0RaIENQODY0IgorCWVjaG8gImFyX0VHIENQODY0IgorCWVjaG8gImFyX0lRIENQODY0IgorCWVjaG8gImFyX0lSIENQODY0IgorCWVjaG8gImFyX0pPIENQODY0IgorCWVjaG8gImFyX0tXIENQODY0IgorCWVjaG8gImFyX01BIENQODY0IgorCWVjaG8gImFyX09NIENQODY0IgorCWVjaG8gImFyX1FBIENQODY0IgorCWVjaG8gImFyX1NBIENQODY0IgorCWVjaG8gImFyX1NZIENQODY0IgorCSMgSVNPLTg4NTktNyBsYW5ndWFnZXMKKwllY2hvICJlbCBDUDg2OSIKKwllY2hvICJlbF9HUiBDUDg2OSIKKwkjIElTTy04ODU5LTggbGFuZ3VhZ2VzCisJZWNobyAiaGUgQ1A4NjIiCisJZWNobyAiaGVfSUwgQ1A4NjIiCisJIyBJU08tODg1OS05IGxhbmd1YWdlcworCWVjaG8gInRyIENQODU3IgorCWVjaG8gInRyX1RSIENQODU3IgorCSMgSmFwYW5lc2UKKwllY2hvICJqYSBDUDkzMiIKKwllY2hvICJqYV9KUCBDUDkzMiIKKwkjIENoaW5lc2UKKwllY2hvICJ6aF9DTiBHQksiCisJZWNobyAiemhfVFcgQ1A5NTAiICMgbm90IENQOTM4ID8/CisJIyBLb3JlYW4KKwllY2hvICJrciBDUDk0OSIgICAgIyBub3QgQ1A5MzQgPz8KKwllY2hvICJrcl9LUiBDUDk0OSIgIyBub3QgQ1A5MzQgPz8KKwkjIFRoYWkKKwllY2hvICJ0aCBDUDg3NCIKKwllY2hvICJ0aF9USCBDUDg3NCIKKwkjIE90aGVyCisJZWNobyAiZW8gQ1A4NTAiCisJZWNobyAiZW9fRU8gQ1A4NTAiCisJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL2ludGwvZGNnZXR0ZXh0LmMgYi9pbnRsL2RjZ2V0dGV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MGFjZGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL2RjZ2V0dGV4dC5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkY2dldHRleHQoMykgZnVuY3Rpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImdldHRleHRQLmgiCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8bGliaW50bC5oPgorI2Vsc2UKKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorI2VuZGlmCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCisgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworI2lmZGVmIF9MSUJDCisjIGRlZmluZSBEQ0dFVFRFWFQgX19kY2dldHRleHQKKyMgZGVmaW5lIERDSUdFVFRFWFQgX19kY2lnZXR0ZXh0CisjZWxzZQorIyBkZWZpbmUgRENHRVRURVhUIGxpYmludGxfZGNnZXR0ZXh0CisjIGRlZmluZSBEQ0lHRVRURVhUIGxpYmludGxfZGNpZ2V0dGV4dAorI2VuZGlmCisKKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudCBDQVRFR09SWQorICAgbG9jYWxlLiAgKi8KK2NoYXIgKgorRENHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KQoreworICByZXR1cm4gRENJR0VUVEVYVCAoZG9tYWlubmFtZSwgbXNnaWQsIE5VTEwsIDAsIDAsIGNhdGVnb3J5KTsKK30KKworI2lmZGVmIF9MSUJDCisvKiBBbGlhcyBmb3IgZnVuY3Rpb24gbmFtZSBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KK0lOVERFRihfX2RjZ2V0dGV4dCkKK3dlYWtfYWxpYXMgKF9fZGNnZXR0ZXh0LCBkY2dldHRleHQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbnRsL2RjaWdldHRleHQuYyBiL2ludGwvZGNpZ2V0dGV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5Njc4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL2RjaWdldHRleHQuYwpAQCAtMCwwICsxLDEyMjIgQEAKKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBpbnRlcm5hbCBkY2lnZXR0ZXh0IGZ1bmN0aW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKy8qIFRlbGwgZ2xpYmMncyA8c3RyaW5nLmg+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+bmV4dDsKKyAgICAgIGZyZWUgKG9sZCk7CisgICAgfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbnRsL2RjbmdldHRleHQuYyBiL2ludGwvZGNuZ2V0dGV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YTNlMDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL2RjbmdldHRleHQuYwpAQCAtMCwwICsxLDU3IEBACisvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGNuZ2V0dGV4dCgzKSBmdW5jdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyNpZmRlZiBfTElCQworIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisjZWxzZQorIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisjZW5kaWYKKworLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworCisvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisjaWZkZWYgX0xJQkMKKyMgZGVmaW5lIERDTkdFVFRFWFQgX19kY25nZXR0ZXh0CisjIGRlZmluZSBEQ0lHRVRURVhUIF9fZGNpZ2V0dGV4dAorI2Vsc2UKKyMgZGVmaW5lIERDTkdFVFRFWFQgbGliaW50bF9kY25nZXR0ZXh0CisjIGRlZmluZSBEQ0lHRVRURVhUIGxpYmludGxfZGNpZ2V0dGV4dAorI2VuZGlmCisKKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudCBDQVRFR09SWQorICAgbG9jYWxlLiAgKi8KK2NoYXIgKgorRENOR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKwkgICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4sCisJICAgIGludCBjYXRlZ29yeSkKK3sKKyAgcmV0dXJuIERDSUdFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCAxLCBuLCBjYXRlZ29yeSk7Cit9CisKKyNpZmRlZiBfTElCQworLyogQWxpYXMgZm9yIGZ1bmN0aW9uIG5hbWUgaW4gR05VIEMgTGlicmFyeS4gICovCit3ZWFrX2FsaWFzIChfX2RjbmdldHRleHQsIGRjbmdldHRleHQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbnRsL2RnZXR0ZXh0LmMgYi9pbnRsL2RnZXR0ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY0YjBmNQotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvZGdldHRleHQuYwpAQCAtMCwwICsxLDU4IEBACisvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGdldHRleHQoMykgZnVuY3Rpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImdldHRleHRQLmgiCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworI2lmZGVmIF9MSUJDCisjIGluY2x1ZGUgPGxpYmludGwuaD4KKyNlbHNlCisjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyNlbmRpZgorCisvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisKKy8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKyAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKKyAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKyNpZmRlZiBfTElCQworIyBkZWZpbmUgREdFVFRFWFQgX19kZ2V0dGV4dAorIyBkZWZpbmUgRENHRVRURVhUIElOVFVTRShfX2RjZ2V0dGV4dCkKKyNlbHNlCisjIGRlZmluZSBER0VUVEVYVCBsaWJpbnRsX2RnZXR0ZXh0CisjIGRlZmluZSBEQ0dFVFRFWFQgbGliaW50bF9kY2dldHRleHQKKyNlbmRpZgorCisvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBvZiB0aGUgY3VycmVudAorICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgKi8KK2NoYXIgKgorREdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkKQoreworICByZXR1cm4gRENHRVRURVhUIChkb21haW5uYW1lLCBtc2dpZCwgTENfTUVTU0FHRVMpOworfQorCisjaWZkZWYgX0xJQkMKKy8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLword2Vha19hbGlhcyAoX19kZ2V0dGV4dCwgZGdldHRleHQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbnRsL2RuZ2V0dGV4dC5jIGIvaW50bC9kbmdldHRleHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODE1NjM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW50bC9kbmdldHRleHQuYwpAQCAtMCwwICsxLDU5IEBACisvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZG5nZXR0ZXh0KDMpIGZ1bmN0aW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorCisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKyNpZmRlZiBfTElCQworIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisjZWxzZQorIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisjZW5kaWYKKworLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworCisvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisjaWZkZWYgX0xJQkMKKyMgZGVmaW5lIEROR0VUVEVYVCBfX2RuZ2V0dGV4dAorIyBkZWZpbmUgRENOR0VUVEVYVCBfX2RjbmdldHRleHQKKyNlbHNlCisjIGRlZmluZSBETkdFVFRFWFQgbGliaW50bF9kbmdldHRleHQKKyMgZGVmaW5lIERDTkdFVFRFWFQgbGliaW50bF9kY25nZXR0ZXh0CisjZW5kaWYKKworLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgb2YgdGhlIGN1cnJlbnQKKyAgIExDX01FU1NBR0VTIGxvY2FsZSBhbmQgc2tpcCBtZXNzYWdlIGFjY29yZGluZyB0byB0aGUgcGx1cmFsIGZvcm0uICAqLworY2hhciAqCitETkdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisJICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCit7CisgIHJldHVybiBEQ05HRVRURVhUIChkb21haW5uYW1lLCBtc2dpZDEsIG1zZ2lkMiwgbiwgTENfTUVTU0FHRVMpOworfQorCisjaWZkZWYgX0xJQkMKKy8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLword2Vha19hbGlhcyAoX19kbmdldHRleHQsIGRuZ2V0dGV4dCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2ludGwvZXZhbC1wbHVyYWwuaCBiL2ludGwvZXZhbC1wbHVyYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWJkNWFmCi0tLSAvZGV2L251bGwKKysrIGIvaW50bC9ldmFsLXBsdXJhbC5oCkBAIC0wLDAgKzEsMTA4IEBACisvKiBQbHVyYWwgZXhwcmVzc2lvbiBldmFsdWF0aW9uLgorICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisjaWZuZGVmIFNUQVRJQworI2RlZmluZSBTVEFUSUMgc3RhdGljCisjZW5kaWYKKworLyogRXZhbHVhdGUgdGhlIHBsdXJhbCBleHByZXNzaW9uIGFuZCByZXR1cm4gYW4gaW5kZXggdmFsdWUuICAqLworU1RBVElDCit1bnNpZ25lZCBsb25nIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK3BsdXJhbF9ldmFsIChzdHJ1Y3QgZXhwcmVzc2lvbiAqcGV4cCwgdW5zaWduZWQgbG9uZyBpbnQgbikKK3sKKyAgc3dpdGNoIChwZXhwLT5uYXJncykKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgc3dpdGNoIChwZXhwLT5vcGVyYXRpb24pCisJeworCWNhc2UgdmFyOgorCSAgcmV0dXJuIG47CisJY2FzZSBudW06CisJICByZXR1cm4gcGV4cC0+dmFsLm51bTsKKwlkZWZhdWx0OgorCSAgYnJlYWs7CisJfQorICAgICAgLyogTk9UUkVBQ0hFRCAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgeworCS8qIHBleHAtPm9wZXJhdGlvbiBtdXN0IGJlIGxub3QuICAqLworCXVuc2lnbmVkIGxvbmcgaW50IGFyZyA9IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1swXSwgbik7CisJcmV0dXJuICEgYXJnOworICAgICAgfQorICAgIGNhc2UgMjoKKyAgICAgIHsKKwl1bnNpZ25lZCBsb25nIGludCBsZWZ0YXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzBdLCBuKTsKKwlpZiAocGV4cC0+b3BlcmF0aW9uID09IGxvcikKKwkgIHJldHVybiBsZWZ0YXJnIHx8IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CisJZWxzZSBpZiAocGV4cC0+b3BlcmF0aW9uID09IGxhbmQpCisJICByZXR1cm4gbGVmdGFyZyAmJiBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMV0sIG4pOworCWVsc2UKKwkgIHsKKwkgICAgdW5zaWduZWQgbG9uZyBpbnQgcmlnaHRhcmcgPSBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMV0sIG4pOworCisJICAgIHN3aXRjaCAocGV4cC0+b3BlcmF0aW9uKQorCSAgICAgIHsKKwkgICAgICBjYXNlIG11bHQ6CisJCXJldHVybiBsZWZ0YXJnICogcmlnaHRhcmc7CisJICAgICAgY2FzZSBkaXZpZGU6CisjaWYgIUlOVERJVjBfUkFJU0VTX1NJR0ZQRQorCQlpZiAocmlnaHRhcmcgPT0gMCkKKwkJICByYWlzZSAoU0lHRlBFKTsKKyNlbmRpZgorCQlyZXR1cm4gbGVmdGFyZyAvIHJpZ2h0YXJnOworCSAgICAgIGNhc2UgbW9kdWxlOgorI2lmICFJTlRESVYwX1JBSVNFU19TSUdGUEUKKwkJaWYgKHJpZ2h0YXJnID09IDApCisJCSAgcmFpc2UgKFNJR0ZQRSk7CisjZW5kaWYKKwkJcmV0dXJuIGxlZnRhcmcgJSByaWdodGFyZzsKKwkgICAgICBjYXNlIHBsdXM6CisJCXJldHVybiBsZWZ0YXJnICsgcmlnaHRhcmc7CisJICAgICAgY2FzZSBtaW51czoKKwkJcmV0dXJuIGxlZnRhcmcgLSByaWdodGFyZzsKKwkgICAgICBjYXNlIGxlc3NfdGhhbjoKKwkJcmV0dXJuIGxlZnRhcmcgPCByaWdodGFyZzsKKwkgICAgICBjYXNlIGdyZWF0ZXJfdGhhbjoKKwkJcmV0dXJuIGxlZnRhcmcgPiByaWdodGFyZzsKKwkgICAgICBjYXNlIGxlc3Nfb3JfZXF1YWw6CisJCXJldHVybiBsZWZ0YXJnIDw9IHJpZ2h0YXJnOworCSAgICAgIGNhc2UgZ3JlYXRlcl9vcl9lcXVhbDoKKwkJcmV0dXJuIGxlZnRhcmcgPj0gcmlnaHRhcmc7CisJICAgICAgY2FzZSBlcXVhbDoKKwkJcmV0dXJuIGxlZnRhcmcgPT0gcmlnaHRhcmc7CisJICAgICAgY2FzZSBub3RfZXF1YWw6CisJCXJldHVybiBsZWZ0YXJnICE9IHJpZ2h0YXJnOworCSAgICAgIGRlZmF1bHQ6CisJCWJyZWFrOworCSAgICAgIH0KKwkgIH0KKwkvKiBOT1RSRUFDSEVEICovCisJYnJlYWs7CisgICAgICB9CisgICAgY2FzZSAzOgorICAgICAgeworCS8qIHBleHAtPm9wZXJhdGlvbiBtdXN0IGJlIHFtb3AuICAqLworCXVuc2lnbmVkIGxvbmcgaW50IGJvb2xhcmcgPSBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMF0sIG4pOworCXJldHVybiBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbYm9vbGFyZyA/IDEgOiAyXSwgbik7CisgICAgICB9CisgICAgfQorICAvKiBOT1RSRUFDSEVEICovCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvaW50bC9leHBsb2RlbmFtZS5jIGIvaW50bC9leHBsb2RlbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzI1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL2V4cGxvZGVuYW1lLmMKQEAgLTAsMCArMSwxODUgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlICJsb2FkaW5mby5oIgorCisvKiBPbiBzb21lIHN0cmFuZ2Ugc3lzdGVtcyBzdGlsbCBubyBkZWZpbml0aW9uIG9mIE5VTEwgaXMgZm91bmQuICBTaWdoISAgKi8KKyNpZm5kZWYgTlVMTAorIyBpZiBkZWZpbmVkIF9fU1REQ19fICYmIF9fU1REQ19fCisjICBkZWZpbmUgTlVMTCAoKHZvaWQgKikgMCkKKyMgZWxzZQorIyAgZGVmaW5lIE5VTEwgMAorIyBlbmRpZgorI2VuZGlmCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworY2hhciAqCitfbmxfZmluZF9sYW5ndWFnZSAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgd2hpbGUgKG5hbWVbMF0gIT0gJ1wwJyAmJiBuYW1lWzBdICE9ICdfJyAmJiBuYW1lWzBdICE9ICdAJworCSAmJiBuYW1lWzBdICE9ICcrJyAmJiBuYW1lWzBdICE9ICcsJykKKyAgICArK25hbWU7CisKKyAgcmV0dXJuIChjaGFyICopIG5hbWU7Cit9CisKKworaW50CitfbmxfZXhwbG9kZV9uYW1lIChjaGFyICpuYW1lLAorCQkgIGNvbnN0IGNoYXIgKipsYW5ndWFnZSwgY29uc3QgY2hhciAqKm1vZGlmaWVyLAorCQkgIGNvbnN0IGNoYXIgKip0ZXJyaXRvcnksIGNvbnN0IGNoYXIgKipjb2Rlc2V0LAorCQkgIGNvbnN0IGNoYXIgKipub3JtYWxpemVkX2NvZGVzZXQsIGNvbnN0IGNoYXIgKipzcGVjaWFsLAorCQkgIGNvbnN0IGNoYXIgKipzcG9uc29yLCBjb25zdCBjaGFyICoqcmV2aXNpb24pCit7CisgIGVudW0geyB1bmRlY2lkZWQsIHhwZywgY2VuIH0gc3ludGF4OworICBjaGFyICpjcDsKKyAgaW50IG1hc2s7CisKKyAgKm1vZGlmaWVyID0gTlVMTDsKKyAgKnRlcnJpdG9yeSA9IE5VTEw7CisgICpjb2Rlc2V0ID0gTlVMTDsKKyAgKm5vcm1hbGl6ZWRfY29kZXNldCA9IE5VTEw7CisgICpzcGVjaWFsID0gTlVMTDsKKyAgKnNwb25zb3IgPSBOVUxMOworICAqcmV2aXNpb24gPSBOVUxMOworCisgIC8qIE5vdyB3ZSBkZXRlcm1pbmUgdGhlIHNpbmdsZSBwYXJ0cyBvZiB0aGUgbG9jYWxlIG5hbWUuICBGaXJzdAorICAgICBsb29rIGZvciB0aGUgbGFuZ3VhZ2UuICBUZXJtaW5hdGlvbiBzeW1ib2xzIGFyZSBgXycgYW5kIGBAJyBpZgorICAgICB3ZSB1c2UgWFBHNCBzdHlsZSwgYW5kIGBfJywgYCsnLCBhbmQgYCwnIGlmIHdlIHVzZSBDRU4gc3ludGF4LiAgKi8KKyAgbWFzayA9IDA7CisgIHN5bnRheCA9IHVuZGVjaWRlZDsKKyAgKmxhbmd1YWdlID0gY3AgPSBuYW1lOworICBjcCA9IF9ubF9maW5kX2xhbmd1YWdlICgqbGFuZ3VhZ2UpOworCisgIGlmICgqbGFuZ3VhZ2UgPT0gY3ApCisgICAgLyogVGhpcyBkb2VzIG5vdCBtYWtlIHNlbnNlOiBsYW5ndWFnZSBoYXMgdG8gYmUgc3BlY2lmaWVkLiAgVXNlCisgICAgICAgdGhpcyBlbnRyeSBhcyBpdCBpcyB3aXRob3V0IGV4cGxvZGluZy4gIFBlcmhhcHMgaXQgaXMgYW4gYWxpYXMuICAqLworICAgIGNwID0gc3RyY2hyICgqbGFuZ3VhZ2UsICdcMCcpOworICBlbHNlIGlmIChjcFswXSA9PSAnXycpCisgICAgeworICAgICAgLyogTmV4dCBpcyB0aGUgdGVycml0b3J5LiAgKi8KKyAgICAgIGNwWzBdID0gJ1wwJzsKKyAgICAgICp0ZXJyaXRvcnkgPSArK2NwOworCisgICAgICB3aGlsZSAoY3BbMF0gIT0gJ1wwJyAmJiBjcFswXSAhPSAnLicgJiYgY3BbMF0gIT0gJ0AnCisJICAgICAmJiBjcFswXSAhPSAnKycgJiYgY3BbMF0gIT0gJywnICYmIGNwWzBdICE9ICdfJykKKwkrK2NwOworCisgICAgICBtYXNrIHw9IFRFUlJJVE9SWTsKKworICAgICAgaWYgKGNwWzBdID09ICcuJykKKwl7CisJICAvKiBOZXh0IGlzIHRoZSBjb2Rlc2V0LiAgKi8KKwkgIHN5bnRheCA9IHhwZzsKKwkgIGNwWzBdID0gJ1wwJzsKKwkgICpjb2Rlc2V0ID0gKytjcDsKKworCSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgY3BbMF0gIT0gJ0AnKQorCSAgICArK2NwOworCisJICBtYXNrIHw9IFhQR19DT0RFU0VUOworCisJICBpZiAoKmNvZGVzZXQgIT0gY3AgJiYgKCpjb2Rlc2V0KVswXSAhPSAnXDAnKQorCSAgICB7CisJICAgICAgKm5vcm1hbGl6ZWRfY29kZXNldCA9IF9ubF9ub3JtYWxpemVfY29kZXNldCAoKmNvZGVzZXQsCisJCQkJCQkJICAgY3AgLSAqY29kZXNldCk7CisJICAgICAgaWYgKHN0cmNtcCAoKmNvZGVzZXQsICpub3JtYWxpemVkX2NvZGVzZXQpID09IDApCisJCWZyZWUgKChjaGFyICopICpub3JtYWxpemVkX2NvZGVzZXQpOworCSAgICAgIGVsc2UKKwkJbWFzayB8PSBYUEdfTk9STV9DT0RFU0VUOworCSAgICB9CisJfQorICAgIH0KKworICBpZiAoY3BbMF0gPT0gJ0AnIHx8IChzeW50YXggIT0geHBnICYmIGNwWzBdID09ICcrJykpCisgICAgeworICAgICAgLyogTmV4dCBpcyB0aGUgbW9kaWZpZXIuICAqLworICAgICAgc3ludGF4ID0gY3BbMF0gPT0gJ0AnID8geHBnIDogY2VuOworICAgICAgY3BbMF0gPSAnXDAnOworICAgICAgKm1vZGlmaWVyID0gKytjcDsKKworICAgICAgd2hpbGUgKHN5bnRheCA9PSBjZW4gJiYgY3BbMF0gIT0gJ1wwJyAmJiBjcFswXSAhPSAnKycKKwkgICAgICYmIGNwWzBdICE9ICcsJyAmJiBjcFswXSAhPSAnXycpCisJKytjcDsKKworICAgICAgbWFzayB8PSBYUEdfTU9ESUZJRVIgfCBDRU5fQVVESUVOQ0U7CisgICAgfQorCisgIGlmIChzeW50YXggIT0geHBnICYmIChjcFswXSA9PSAnKycgfHwgY3BbMF0gPT0gJywnIHx8IGNwWzBdID09ICdfJykpCisgICAgeworICAgICAgc3ludGF4ID0gY2VuOworCisgICAgICBpZiAoY3BbMF0gPT0gJysnKQorCXsKKyAJICAvKiBOZXh0IGlzIHNwZWNpYWwgYXBwbGljYXRpb24gKENFTiBzeW50YXgpLiAgKi8KKwkgIGNwWzBdID0gJ1wwJzsKKwkgICpzcGVjaWFsID0gKytjcDsKKworCSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgY3BbMF0gIT0gJywnICYmIGNwWzBdICE9ICdfJykKKwkgICAgKytjcDsKKworCSAgbWFzayB8PSBDRU5fU1BFQ0lBTDsKKwl9CisKKyAgICAgIGlmIChjcFswXSA9PSAnLCcpCisJeworIAkgIC8qIE5leHQgaXMgc3BvbnNvciAoQ0VOIHN5bnRheCkuICAqLworCSAgY3BbMF0gPSAnXDAnOworCSAgKnNwb25zb3IgPSArK2NwOworCisJICB3aGlsZSAoY3BbMF0gIT0gJ1wwJyAmJiBjcFswXSAhPSAnXycpCisJICAgICsrY3A7CisKKwkgIG1hc2sgfD0gQ0VOX1NQT05TT1I7CisJfQorCisgICAgICBpZiAoY3BbMF0gPT0gJ18nKQorCXsKKyAJICAvKiBOZXh0IGlzIHJldmlzaW9uIChDRU4gc3ludGF4KS4gICovCisJICBjcFswXSA9ICdcMCc7CisJICAqcmV2aXNpb24gPSArK2NwOworCisJICBtYXNrIHw9IENFTl9SRVZJU0lPTjsKKwl9CisgICAgfQorCisgIC8qIEZvciBDRU4gc3ludGF4IHZhbHVlcyBpdCBtaWdodCBiZSBpbXBvcnRhbnQgdG8gaGF2ZSB0aGUKKyAgICAgc2VwYXJhdG9yIGNoYXJhY3RlciBpbiB0aGUgZmlsZSBuYW1lLCBub3QgZm9yIFhQRyBzeW50YXguICAqLworICBpZiAoc3ludGF4ID09IHhwZykKKyAgICB7CisgICAgICBpZiAoKnRlcnJpdG9yeSAhPSBOVUxMICYmICgqdGVycml0b3J5KVswXSA9PSAnXDAnKQorCW1hc2sgJj0gflRFUlJJVE9SWTsKKworICAgICAgaWYgKCpjb2Rlc2V0ICE9IE5VTEwgJiYgKCpjb2Rlc2V0KVswXSA9PSAnXDAnKQorCW1hc2sgJj0gflhQR19DT0RFU0VUOworCisgICAgICBpZiAoKm1vZGlmaWVyICE9IE5VTEwgJiYgKCptb2RpZmllcilbMF0gPT0gJ1wwJykKKwltYXNrICY9IH5YUEdfTU9ESUZJRVI7CisgICAgfQorCisgIHJldHVybiBtYXNrOworfQpkaWZmIC0tZ2l0IGEvaW50bC9maW5kZG9tYWluLmMgYi9pbnRsL2ZpbmRkb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTkyYThjCi0tLSAvZGV2L251bGwKKysrIGIvaW50bC9maW5kZG9tYWluLmMKQEAgLTAsMCArMSwxOTIgQEAKKy8qIEhhbmRsZSBsaXN0IG9mIG5lZWRlZCBtZXNzYWdlIGNhdGFsb2dzCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUub3JnPiwgMTk5NS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZCBIQVZFX1VOSVNURF9IIHx8IGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImdldHRleHRQLmgiCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8bGliaW50bC5oPgorI2Vsc2UKKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorI2VuZGlmCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKy8qIExpc3Qgb2YgYWxyZWFkeSBsb2FkZWQgZG9tYWlucy4gICovCitzdGF0aWMgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqX25sX2xvYWRlZF9kb21haW5zOworCisKKy8qIFJldHVybiBhIGRhdGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgY2F0YWxvZyBkZXNjcmliZWQgYnkKKyAgIHRoZSBET01BSU5OQU1FIGFuZCBDQVRFR09SWSBwYXJhbWV0ZXJzIHdpdGggcmVzcGVjdCB0byB0aGUgY3VycmVudGx5CisgICBlc3RhYmxpc2hlZCBiaW5kaW5ncy4gICovCitzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoKK2ludGVybmFsX2Z1bmN0aW9uCitfbmxfZmluZF9kb21haW4gKGNvbnN0IGNoYXIgKmRpcm5hbWUsIGNoYXIgKmxvY2FsZSwKKwkJIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nKQoreworICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpyZXR2YWw7CisgIGNvbnN0IGNoYXIgKmxhbmd1YWdlOworICBjb25zdCBjaGFyICptb2RpZmllcjsKKyAgY29uc3QgY2hhciAqdGVycml0b3J5OworICBjb25zdCBjaGFyICpjb2Rlc2V0OworICBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQ7CisgIGNvbnN0IGNoYXIgKnNwZWNpYWw7CisgIGNvbnN0IGNoYXIgKnNwb25zb3I7CisgIGNvbnN0IGNoYXIgKnJldmlzaW9uOworICBjb25zdCBjaGFyICphbGlhc192YWx1ZTsKKyAgaW50IG1hc2s7CisKKyAgLyogTE9DQUxFIGNhbiBjb25zaXN0IG9mIHVwIHRvIGZvdXIgcmVjb2duaXplZCBwYXJ0cyBmb3IgdGhlIFhQRyBzeW50YXg6CisKKwkJbGFuZ3VhZ2VbX3RlcnJpdG9yeVsuY29kZXNldF1dW0Btb2RpZmllcl0KKworICAgICBhbmQgc2l4IHBhcnRzIGZvciB0aGUgQ0VOIHN5bnRheDoKKworCWxhbmd1YWdlW190ZXJyaXRvcnldWythdWRpZW5jZV1bK3NwZWNpYWxdWyxbc3BvbnNvcl1bX3JldmlzaW9uXV0KKworICAgICBCZXNpZGUgdGhlIGZpcnN0IHBhcnQgYWxsIG9mIHRoZW0gYXJlIGFsbG93ZWQgdG8gYmUgbWlzc2luZy4gIElmCisgICAgIHRoZSBmdWxsIHNwZWNpZmllZCBsb2NhbGUgaXMgbm90IGZvdW5kLCB0aGUgbGVzcyBzcGVjaWZpYyBvbmUgYXJlCisgICAgIGxvb2tlZCBmb3IuICBUaGUgdmFyaW91cyBwYXJ0cyB3aWxsIGJlIHN0cmlwcGVkIG9mZiBhY2NvcmRpbmcgdG8KKyAgICAgdGhlIGZvbGxvd2luZyBvcmRlcjoKKwkJKDEpIHJldmlzaW9uCisJCSgyKSBzcG9uc29yCisJCSgzKSBzcGVjaWFsCisJCSg0KSBjb2Rlc2V0CisJCSg1KSBub3JtYWxpemVkIGNvZGVzZXQKKwkJKDYpIHRlcnJpdG9yeQorCQkoNykgYXVkaWVuY2UvbW9kaWZpZXIKKyAgICovCisKKyAgLyogSWYgd2UgaGF2ZSBhbHJlYWR5IHRlc3RlZCBmb3IgdGhpcyBsb2NhbGUgZW50cnkgdGhlcmUgaGFzIHRvCisgICAgIGJlIG9uZSBkYXRhIHNldCBpbiB0aGUgbGlzdCBvZiBsb2FkZWQgZG9tYWlucy4gICovCisgIHJldHZhbCA9IF9ubF9tYWtlX2wxMG5mbGlzdCAoJl9ubF9sb2FkZWRfZG9tYWlucywgZGlybmFtZSwKKwkJCSAgICAgICBzdHJsZW4gKGRpcm5hbWUpICsgMSwgMCwgbG9jYWxlLCBOVUxMLCBOVUxMLAorCQkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGRvbWFpbm5hbWUsIDApOworICBpZiAocmV0dmFsICE9IE5VTEwpCisgICAgeworICAgICAgLyogV2Uga25vdyBzb21ldGhpbmcgYWJvdXQgdGhpcyBsb2NhbGUuICAqLworICAgICAgaW50IGNudDsKKworICAgICAgaWYgKHJldHZhbC0+ZGVjaWRlZCA9PSAwKQorCV9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLCBkb21haW5iaW5kaW5nKTsKKworICAgICAgaWYgKHJldHZhbC0+ZGF0YSAhPSBOVUxMKQorCXJldHVybiByZXR2YWw7CisKKyAgICAgIGZvciAoY250ID0gMDsgcmV0dmFsLT5zdWNjZXNzb3JbY250XSAhPSBOVUxMOyArK2NudCkKKwl7CisJICBpZiAocmV0dmFsLT5zdWNjZXNzb3JbY250XS0+ZGVjaWRlZCA9PSAwKQorCSAgICBfbmxfbG9hZF9kb21haW4gKHJldHZhbC0+c3VjY2Vzc29yW2NudF0sIGRvbWFpbmJpbmRpbmcpOworCisJICBpZiAocmV0dmFsLT5zdWNjZXNzb3JbY250XS0+ZGF0YSAhPSBOVUxMKQorCSAgICBicmVhazsKKwl9CisgICAgICByZXR1cm4gY250ID49IDAgPyByZXR2YWwgOiBOVUxMOworICAgICAgLyogTk9UUkVBQ0hFRCAqLworICAgIH0KKworICAvKiBTZWUgd2hldGhlciB0aGUgbG9jYWxlIHZhbHVlIGlzIGFuIGFsaWFzLiAgSWYgeWVzIGl0cyB2YWx1ZQorICAgICAqb3ZlcndyaXRlcyogdGhlIGFsaWFzIG5hbWUuICBObyB0ZXN0IGZvciB0aGUgb3JpZ2luYWwgdmFsdWUgaXMKKyAgICAgZG9uZS4gICovCisgIGFsaWFzX3ZhbHVlID0gX25sX2V4cGFuZF9hbGlhcyAobG9jYWxlKTsKKyAgaWYgKGFsaWFzX3ZhbHVlICE9IE5VTEwpCisgICAgeworI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkRVUAorICAgICAgbG9jYWxlID0gc3RyZHVwIChhbGlhc192YWx1ZSk7CisgICAgICBpZiAobG9jYWxlID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisjZWxzZQorICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoYWxpYXNfdmFsdWUpICsgMTsKKyAgICAgIGxvY2FsZSA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKyAgICAgIGlmIChsb2NhbGUgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgICAgbWVtY3B5IChsb2NhbGUsIGFsaWFzX3ZhbHVlLCBsZW4pOworI2VuZGlmCisgICAgfQorCisgIC8qIE5vdyB3ZSBkZXRlcm1pbmUgdGhlIHNpbmdsZSBwYXJ0cyBvZiB0aGUgbG9jYWxlIG5hbWUuICBGaXJzdAorICAgICBsb29rIGZvciB0aGUgbGFuZ3VhZ2UuICBUZXJtaW5hdGlvbiBzeW1ib2xzIGFyZSBgXycgYW5kIGBAJyBpZgorICAgICB3ZSB1c2UgWFBHNCBzdHlsZSwgYW5kIGBfJywgYCsnLCBhbmQgYCwnIGlmIHdlIHVzZSBDRU4gc3ludGF4LiAgKi8KKyAgbWFzayA9IF9ubF9leHBsb2RlX25hbWUgKGxvY2FsZSwgJmxhbmd1YWdlLCAmbW9kaWZpZXIsICZ0ZXJyaXRvcnksCisJCQkgICAmY29kZXNldCwgJm5vcm1hbGl6ZWRfY29kZXNldCwgJnNwZWNpYWwsCisJCQkgICAmc3BvbnNvciwgJnJldmlzaW9uKTsKKworICAvKiBDcmVhdGUgYWxsIHBvc3NpYmxlIGxvY2FsZSBlbnRyaWVzIHdoaWNoIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4KKyAgICAgZ2VuZXJhbGl6YXRpb24uICAqLworICByZXR2YWwgPSBfbmxfbWFrZV9sMTBuZmxpc3QgKCZfbmxfbG9hZGVkX2RvbWFpbnMsIGRpcm5hbWUsCisJCQkgICAgICAgc3RybGVuIChkaXJuYW1lKSArIDEsIG1hc2ssIGxhbmd1YWdlLCB0ZXJyaXRvcnksCisJCQkgICAgICAgY29kZXNldCwgbm9ybWFsaXplZF9jb2Rlc2V0LCBtb2RpZmllciwgc3BlY2lhbCwKKwkJCSAgICAgICBzcG9uc29yLCByZXZpc2lvbiwgZG9tYWlubmFtZSwgMSk7CisgIGlmIChyZXR2YWwgPT0gTlVMTCkKKyAgICAvKiBUaGlzIG1lYW5zIHdlIGFyZSBvdXQgb2YgY29yZS4gICovCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKHJldHZhbC0+ZGVjaWRlZCA9PSAwKQorICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLCBkb21haW5iaW5kaW5nKTsKKyAgaWYgKHJldHZhbC0+ZGF0YSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGludCBjbnQ7CisgICAgICBmb3IgKGNudCA9IDA7IHJldHZhbC0+c3VjY2Vzc29yW2NudF0gIT0gTlVMTDsgKytjbnQpCisJeworCSAgaWYgKHJldHZhbC0+c3VjY2Vzc29yW2NudF0tPmRlY2lkZWQgPT0gMCkKKwkgICAgX25sX2xvYWRfZG9tYWluIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdLCBkb21haW5iaW5kaW5nKTsKKwkgIGlmIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdLT5kYXRhICE9IE5VTEwpCisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgLyogVGhlIHJvb20gZm9yIGFuIGFsaWFzIHdhcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuICBGcmVlIGl0IG5vdy4gICovCisgIGlmIChhbGlhc192YWx1ZSAhPSBOVUxMKQorICAgIGZyZWUgKGxvY2FsZSk7CisKKyAgLyogVGhlIHNwYWNlIGZvciBub3JtYWxpemVkX2NvZGVzZXQgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiAgRnJlZSBpdC4gICovCisgIGlmIChtYXNrICYgWFBHX05PUk1fQ09ERVNFVCkKKyAgICBmcmVlICgodm9pZCAqKSBub3JtYWxpemVkX2NvZGVzZXQpOworCisgIHJldHVybiByZXR2YWw7Cit9CisKKworI2lmZGVmIF9MSUJDCitsaWJjX2ZyZWVyZXNfZm4gKGZyZWVfbWVtKQoreworICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpydW5wID0gX25sX2xvYWRlZF9kb21haW5zOworCisgIHdoaWxlIChydW5wICE9IE5VTEwpCisgICAgeworICAgICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqaGVyZSA9IHJ1bnA7CisgICAgICBpZiAocnVucC0+ZGF0YSAhPSBOVUxMKQorCV9ubF91bmxvYWRfZG9tYWluICgoc3RydWN0IGxvYWRlZF9kb21haW4gKikgcnVucC0+ZGF0YSk7CisgICAgICBydW5wID0gcnVucC0+bmV4dDsKKyAgICAgIGZyZWUgKChjaGFyICopIGhlcmUtPmZpbGVuYW1lKTsKKyAgICAgIGZyZWUgKGhlcmUpOworICAgIH0KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW50bC9nZXR0ZXh0LmMgYi9pbnRsL2dldHRleHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmM0MmZhCi0tLSAvZGV2L251bGwKKysrIGIvaW50bC9nZXR0ZXh0LmMKQEAgLTAsMCArMSw2MyBAQAorLyogSW1wbGVtZW50YXRpb24gb2YgZ2V0dGV4dCgzKSBmdW5jdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NywgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2lmZGVmIF9MSUJDCisjIGRlZmluZSBfX25lZWRfTlVMTAorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGxpYi5oPgkJLyogSnVzdCBmb3IgTlVMTC4gICovCisjZW5kaWYKKworI2luY2x1ZGUgImdldHRleHRQLmgiCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8bGliaW50bC5oPgorI2Vsc2UKKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorI2VuZGlmCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCisgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworI2lmZGVmIF9MSUJDCisjIGRlZmluZSBHRVRURVhUIF9fZ2V0dGV4dAorIyBkZWZpbmUgRENHRVRURVhUIElOVFVTRShfX2RjZ2V0dGV4dCkKKyNlbHNlCisjIGRlZmluZSBHRVRURVhUIGxpYmludGxfZ2V0dGV4dAorIyBkZWZpbmUgRENHRVRURVhUIGxpYmludGxfZGNnZXR0ZXh0CisjZW5kaWYKKworLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKyAgIExDX01FU1NBR0VTIGxvY2FsZS4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBNU0dJRCBpdHNlbGYgKHRoZSBkZWZhdWx0CisgICB0ZXh0KS4gICovCitjaGFyICoKK0dFVFRFWFQgKGNvbnN0IGNoYXIgKm1zZ2lkKQoreworICByZXR1cm4gRENHRVRURVhUIChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpOworfQorCisjaWZkZWYgX0xJQkMKKy8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLword2Vha19hbGlhcyAoX19nZXR0ZXh0LCBnZXR0ZXh0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW50bC9nZXR0ZXh0UC5oIGIvaW50bC9nZXR0ZXh0UC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNjZjM2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL2dldHRleHRQLmgKQEAgLTAsMCArMSwyMTUgQEAKKy8qIEhlYWRlciBkZXNjcmliaW5nIGludGVybmFscyBvZiBsaWJpbnRsIGxpYnJhcnkuCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZm5kZWYgX0dFVFRFWFRQX0gKKyNkZWZpbmUgX0dFVFRFWFRQX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgkJLyogR2V0IHNpemVfdC4gICovCisKKyNpZmRlZiBfTElCQworIyBpbmNsdWRlICIuLi9pY29udi9nY29udl9pbnQuaCIKKyNlbHNlCisjIGlmIEhBVkVfSUNPTlYKKyMgIGluY2x1ZGUgPGljb252Lmg+CisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgImxvYWRpbmZvLmgiCisKKyNpbmNsdWRlICJnbW8uaCIJCS8qIEdldCBubHNfdWludDMyLiAgKi8KKworLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworCisjaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCisjIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbgorI2VuZGlmCisKKyNpZm5kZWYgYXR0cmlidXRlX2hpZGRlbgorIyBkZWZpbmUgYXR0cmlidXRlX2hpZGRlbgorI2VuZGlmCisKKy8qIFRlbGwgdGhlIGNvbXBpbGVyIHdoZW4gYSBjb25kaXRpb25hbCBvciBpbnRlZ2VyIGV4cHJlc3Npb24gaXMKKyAgIGFsbW9zdCBhbHdheXMgdHJ1ZSBvciBhbG1vc3QgYWx3YXlzIGZhbHNlLiAgKi8KKyNpZm5kZWYgSEFWRV9CVUlMVElOX0VYUEVDVAorIyBkZWZpbmUgX19idWlsdGluX2V4cGVjdChleHByLCB2YWwpIChleHByKQorI2VuZGlmCisKKyNpZm5kZWYgVworIyBkZWZpbmUgVyhmbGFnLCBkYXRhKSAoKGZsYWcpID8gU1dBUCAoZGF0YSkgOiAoZGF0YSkpCisjZW5kaWYKKworCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKyMgZGVmaW5lIFNXQVAoaSkgYnN3YXBfMzIgKGkpCisjZWxzZQorc3RhdGljIGlubGluZSBubHNfdWludDMyCitTV0FQIChpKQorICAgICBubHNfdWludDMyIGk7Cit7CisgIHJldHVybiAoaSA8PCAyNCkgfCAoKGkgJiAweGZmMDApIDw8IDgpIHwgKChpID4+IDgpICYgMHhmZjAwKSB8IChpID4+IDI0KTsKK30KKyNlbmRpZgorCisKKy8qIEluLW1lbW9yeSByZXByZXNlbnRhdGlvbiBvZiBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZy4gICovCitzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjCit7CisgIC8qIExlbmd0aCBvZiBhZGRyZXNzZWQgc3RyaW5nLCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gICovCisgIHNpemVfdCBsZW5ndGg7CisgIC8qIFBvaW50ZXIgdG8gYWRkcmVzc2VkIHN0cmluZy4gICovCisgIGNvbnN0IGNoYXIgKnBvaW50ZXI7Cit9OworCisvKiBUaGUgcmVwcmVzZW50YXRpb24gb2YgYW4gb3BlbmVkIG1lc3NhZ2UgY2F0YWxvZy4gICovCitzdHJ1Y3QgbG9hZGVkX2RvbWFpbgoreworICAvKiBQb2ludGVyIHRvIG1lbW9yeSBjb250YWluaW5nIHRoZSAubW8gZmlsZS4gICovCisgIGNvbnN0IGNoYXIgKmRhdGE7CisgIC8qIDEgaWYgdGhlIG1lbW9yeSBpcyBtbWFwKCllZCwgMCBpZiB0aGUgbWVtb3J5IGlzIG1hbGxvYygpZWQuICAqLworICBpbnQgdXNlX21tYXA7CisgIC8qIFNpemUgb2YgbW1hcCgpZWQgbWVtb3J5LiAgKi8KKyAgc2l6ZV90IG1tYXBfc2l6ZTsKKyAgLyogMSBpZiB0aGUgLm1vIGZpbGUgdXNlcyBhIGRpZmZlcmVudCBlbmRpYW5uZXNzIHRoYW4gdGhpcyBtYWNoaW5lLiAgKi8KKyAgaW50IG11c3Rfc3dhcDsKKyAgLyogUG9pbnRlciB0byBhZGRpdGlvbmFsIG1hbGxvYygpZWQgbWVtb3J5LiAgKi8KKyAgdm9pZCAqbWFsbG9jZWQ7CisKKyAgLyogTnVtYmVyIG9mIHN0YXRpYyBzdHJpbmdzIHBhaXJzLiAgKi8KKyAgbmxzX3VpbnQzMiBuc3RyaW5nczsKKyAgLyogUG9pbnRlciB0byBkZXNjcmlwdG9ycyBvZiBvcmlnaW5hbCBzdHJpbmdzIGluIHRoZSBmaWxlLiAgKi8KKyAgY29uc3Qgc3RydWN0IHN0cmluZ19kZXNjICpvcmlnX3RhYjsKKyAgLyogUG9pbnRlciB0byBkZXNjcmlwdG9ycyBvZiB0cmFuc2xhdGVkIHN0cmluZ3MgaW4gdGhlIGZpbGUuICAqLworICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKnRyYW5zX3RhYjsKKworICAvKiBOdW1iZXIgb2Ygc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIHBhaXJzLiAgKi8KKyAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zdHJpbmdzOworICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIG9yaWdpbmFsIHN5c2RlcCBzdHJpbmdzLiAgKi8KKyAgY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqb3JpZ19zeXNkZXBfdGFiOworICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIHRyYW5zbGF0ZWQgc3lzZGVwIHN0cmluZ3MuICAqLworICBjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjICp0cmFuc19zeXNkZXBfdGFiOworCisgIC8qIFNpemUgb2YgaGFzaCB0YWJsZS4gICovCisgIG5sc191aW50MzIgaGFzaF9zaXplOworICAvKiBQb2ludGVyIHRvIGhhc2ggdGFibGUuICAqLworICBjb25zdCBubHNfdWludDMyICpoYXNoX3RhYjsKKyAgLyogMSBpZiB0aGUgaGFzaCB0YWJsZSB1c2VzIGEgZGlmZmVyZW50IGVuZGlhbm5lc3MgdGhhbiB0aGlzIG1hY2hpbmUuICAqLworICBpbnQgbXVzdF9zd2FwX2hhc2hfdGFiOworCisgIGludCBjb2Rlc2V0X2NudHI7CisjaWZkZWYgX0xJQkMKKyAgX19nY29udl90IGNvbnY7CisjZWxzZQorIyBpZiBIQVZFX0lDT05WCisgIGljb252X3QgY29udjsKKyMgZW5kaWYKKyNlbmRpZgorICBjaGFyICoqY29udl90YWI7CisKKyAgc3RydWN0IGV4cHJlc3Npb24gKnBsdXJhbDsKKyAgdW5zaWduZWQgbG9uZyBpbnQgbnBsdXJhbHM7Cit9OworCisvKiBXZSB3YW50IHRvIGFsbG9jYXRlIGEgc3RyaW5nIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdC4gIEJ1dCBJU08gQworICAgZG9lc24ndCBhbGxvdyB6ZXJvIHNpemVkIGFycmF5cy4gICovCisjaWZkZWYgX19HTlVDX18KKyMgZGVmaW5lIFpFUk8gMAorI2Vsc2UKKyMgZGVmaW5lIFpFUk8gMQorI2VuZGlmCisKKy8qIEEgc2V0IG9mIHNldHRpbmdzIGJvdW5kIHRvIGEgbWVzc2FnZSBkb21haW4uICBVc2VkIHRvIHN0b3JlIHNldHRpbmdzCisgICBmcm9tIGJpbmR0ZXh0ZG9tYWluKCkgYW5kIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KCkuICAqLworc3RydWN0IGJpbmRpbmcKK3sKKyAgc3RydWN0IGJpbmRpbmcgKm5leHQ7CisgIGNoYXIgKmRpcm5hbWU7CisgIGludCBjb2Rlc2V0X2NudHI7CS8qIEluY3JlbWVudGVkIGVhY2ggdGltZSBjb2Rlc2V0IGNoYW5nZXMuICAqLworICBjaGFyICpjb2Rlc2V0OworICBjaGFyIGRvbWFpbm5hbWVbWkVST107Cit9OworCisvKiBBIGNvdW50ZXIgd2hpY2ggaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIHNvbWUgcHJldmlvdXMgdHJhbnNsYXRpb25zCisgICBiZWNvbWUgaW52YWxpZC4KKyAgIFRoaXMgdmFyaWFibGUgaXMgcGFydCBvZiB0aGUgZXh0ZXJuYWwgQUJJIG9mIHRoZSBHTlUgbGliaW50bC4gICovCitleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisKKyNpZm5kZWYgX0xJQkMKK2NvbnN0IGNoYXIgKl9ubF9sb2NhbGVfbmFtZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpOworI2VuZGlmCisKK3N0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9ubF9maW5kX2RvbWFpbiAoY29uc3QgY2hhciAqX19kaXJuYW1lLCBjaGFyICpfX2xvY2FsZSwKKwkJCQkJIGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCQkJIHN0cnVjdCBiaW5kaW5nICpfX2RvbWFpbmJpbmRpbmcpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOwordm9pZCBfbmxfbG9hZF9kb21haW4gKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9fZG9tYWluLAorCQkgICAgICBzdHJ1Y3QgYmluZGluZyAqX19kb21haW5iaW5kaW5nKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3ZvaWQgX25sX3VubG9hZF9kb21haW4gKHN0cnVjdCBsb2FkZWRfZG9tYWluICpfX2RvbWFpbikKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247Citjb25zdCBjaGFyICpfbmxfaW5pdF9kb21haW5fY29udiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqX19kb21haW5fZmlsZSwKKwkJCQkgIHN0cnVjdCBsb2FkZWRfZG9tYWluICpfX2RvbWFpbiwKKwkJCQkgIHN0cnVjdCBiaW5kaW5nICpfX2RvbWFpbmJpbmRpbmcpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOwordm9pZCBfbmxfZnJlZV9kb21haW5fY29udiAoc3RydWN0IGxvYWRlZF9kb21haW4gKl9fZG9tYWluKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKworY2hhciAqX25sX2ZpbmRfbXNnIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZSwKKwkJICAgIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nLCBjb25zdCBjaGFyICptc2dpZCwKKwkJICAgIHNpemVfdCAqbGVuZ3RocCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisKKyNpZmRlZiBfTElCQworZXh0ZXJuIGNoYXIgKl9fZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZCk7CitleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKTsKK2V4dGVybiBjaGFyICpfX2RjZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkLAorCQkJICBpbnQgX19jYXRlZ29yeSk7CitleHRlcm4gY2hhciAqX19uZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorCQkJIHVuc2lnbmVkIGxvbmcgaW50IF9fbik7CitleHRlcm4gY2hhciAqX19kbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCSAgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorCQkJICB1bnNpZ25lZCBsb25nIGludCBuKTsKK2V4dGVybiBjaGFyICpfX2RjbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCSAgIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwgaW50IF9fY2F0ZWdvcnkpOworZXh0ZXJuIGNoYXIgKl9fZGNpZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorCQkJICAgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorCQkJICAgaW50IF9fcGx1cmFsLCB1bnNpZ25lZCBsb25nIGludCBfX24sCisJCQkgICBpbnQgX19jYXRlZ29yeSk7CitleHRlcm4gY2hhciAqX190ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpOworZXh0ZXJuIGNoYXIgKl9fYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpOworZXh0ZXJuIGNoYXIgKl9fYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCQkJY29uc3QgY2hhciAqX19jb2Rlc2V0KTsKKyNlbHNlCisvKiBEZWNsYXJlIHRoZSBleHBvcnRlZCBsaWJpbnRsXyogZnVuY3Rpb25zLCBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0bworICAgY2FsbCB0aGVtIHVuZGVyIHRoZWlyIHJlYWwgbmFtZS4gICovCisjIHVuZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorIyB1bmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKyMgZGVmaW5lIF9JTlRMX1JFRElSRUNUX01BQ1JPUworIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCitleHRlcm4gY2hhciAqbGliaW50bF9kY2lnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisJCQkJIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKwkJCQkgaW50IF9fcGx1cmFsLCB1bnNpZ25lZCBsb25nIGludCBfX24sCisJCQkJIGludCBfX2NhdGVnb3J5KTsKKyNlbmRpZgorCisvKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKworI2VuZGlmIC8qIGdldHRleHRQLmggICovCmRpZmYgLS1naXQgYS9pbnRsL2dtby5oIGIvaW50bC9nbW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2M5Y2MxCi0tLSAvZGV2L251bGwKKysrIGIvaW50bC9nbW8uaApAQCAtMCwwICsxLDE0OSBAQAorLyogRGVzY3JpcHRpb24gb2YgR05VIG1lc3NhZ2UgY2F0YWxvZyBmb3JtYXQ6IGdlbmVyYWwgZmlsZSBsYXlvdXQuCisgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcsIDIwMDAtMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZm5kZWYgX0dFVFRFWFRfSAorI2RlZmluZSBfR0VUVEVYVF9IIDEKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorCisvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisKKy8qIFRoZSBtYWdpYyBudW1iZXIgb2YgdGhlIEdOVSBtZXNzYWdlIGNhdGFsb2cgZm9ybWF0LiAgKi8KKyNkZWZpbmUgX01BR0lDIDB4OTUwNDEyZGUKKyNkZWZpbmUgX01BR0lDX1NXQVBQRUQgMHhkZTEyMDQ5NQorCisvKiBSZXZpc2lvbiBudW1iZXIgb2YgdGhlIGN1cnJlbnRseSB1c2VkIC5tbyAoYmluYXJ5KSBmaWxlIGZvcm1hdC4gICovCisjZGVmaW5lIE1PX1JFVklTSU9OX05VTUJFUiAwCisjZGVmaW5lIE1PX1JFVklTSU9OX05VTUJFUl9XSVRIX1NZU0RFUF9JIDEKKworLyogVGhlIGZvbGxvd2luZyBjb250b3J0aW9ucyBhcmUgYW4gYXR0ZW1wdCB0byB1c2UgdGhlIEMgcHJlcHJvY2Vzc29yCisgICB0byBkZXRlcm1pbmUgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSB0aGF0IGlzIDMyIGJpdHMgd2lkZS4gIEFuCisgICBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyB0byB1c2UgYXV0b2NvbmYncyBBQ19DSEVDS19TSVpFT0YgbWFjcm8sIGJ1dAorICAgYXMgb2YgdmVyc2lvbiBhdXRvY29uZi0yLjEzLCB0aGUgQUNfQ0hFQ0tfU0laRU9GIG1hY3JvIGRvZXNuJ3Qgd29yaworICAgd2hlbiBjcm9zcy1jb21waWxpbmcuICAqLworCisjaWYgX19TVERDX18KKyMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgNDI5NDk2NzI5NVUKKyNlbHNlCisjIGRlZmluZSBVSU5UX01BWF8zMl9CSVRTIDB4RkZGRkZGRkYKKyNlbmRpZgorCisvKiBJZiBVSU5UX01BWCBpc24ndCBkZWZpbmVkLCBhc3N1bWUgaXQncyBhIDMyLWJpdCB0eXBlLgorICAgVGhpcyBzaG91bGQgYmUgdmFsaWQgZm9yIGFsbCBzeXN0ZW1zIEdOVSBjYXJlcyBhYm91dCBiZWNhdXNlCisgICB0aGF0IGRvZXNuJ3QgaW5jbHVkZSAxNi1iaXQgc3lzdGVtcywgYW5kIG9ubHkgbW9kZXJuIHN5c3RlbXMKKyAgICh0aGF0IGNlcnRhaW5seSBoYXZlIDxsaW1pdHMuaD4pIGhhdmUgNjQrLWJpdCBpbnRlZ3JhbCB0eXBlcy4gICovCisKKyNpZm5kZWYgVUlOVF9NQVgKKyMgZGVmaW5lIFVJTlRfTUFYIFVJTlRfTUFYXzMyX0JJVFMKKyNlbmRpZgorCisjaWYgVUlOVF9NQVggPT0gVUlOVF9NQVhfMzJfQklUUwordHlwZWRlZiB1bnNpZ25lZCBubHNfdWludDMyOworI2Vsc2UKKyMgaWYgVVNIUlRfTUFYID09IFVJTlRfTUFYXzMyX0JJVFMKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgbmxzX3VpbnQzMjsKKyMgZWxzZQorIyAgaWYgVUxPTkdfTUFYID09IFVJTlRfTUFYXzMyX0JJVFMKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBubHNfdWludDMyOworIyAgZWxzZQorICAvKiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgaW50ZW5kZWQgdG8gdGhyb3cgYW4gZXJyb3IuICBVc2luZyAjZXJyb3IgaXMKKyAgICAgbm90IHBvcnRhYmxlIGVub3VnaC4gICovCisgICJDYW5ub3QgZGV0ZXJtaW5lIHVuc2lnbmVkIDMyLWJpdCBkYXRhIHR5cGUuIgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIEhlYWRlciBmb3IgYmluYXJ5IC5tbyBmaWxlIGZvcm1hdC4gICovCitzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIKK3sKKyAgLyogVGhlIG1hZ2ljIG51bWJlci4gICovCisgIG5sc191aW50MzIgbWFnaWM7CisgIC8qIFRoZSByZXZpc2lvbiBudW1iZXIgb2YgdGhlIGZpbGUgZm9ybWF0LiAgKi8KKyAgbmxzX3VpbnQzMiByZXZpc2lvbjsKKworICAvKiBUaGUgZm9sbG93aW5nIGFyZSBvbmx5IHVzZWQgaW4gLm1vIGZpbGVzIHdpdGggbWFqb3IgcmV2aXNpb24gMCBvciAxLiAgKi8KKworICAvKiBUaGUgbnVtYmVyIG9mIHN0cmluZ3MgcGFpcnMuICAqLworICBubHNfdWludDMyIG5zdHJpbmdzOworICAvKiBPZmZzZXQgb2YgdGFibGUgd2l0aCBzdGFydCBvZmZzZXRzIG9mIG9yaWdpbmFsIHN0cmluZ3MuICAqLworICBubHNfdWludDMyIG9yaWdfdGFiX29mZnNldDsKKyAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiB0cmFuc2xhdGVkIHN0cmluZ3MuICAqLworICBubHNfdWludDMyIHRyYW5zX3RhYl9vZmZzZXQ7CisgIC8qIFNpemUgb2YgaGFzaCB0YWJsZS4gICovCisgIG5sc191aW50MzIgaGFzaF90YWJfc2l6ZTsKKyAgLyogT2Zmc2V0IG9mIGZpcnN0IGhhc2ggdGFibGUgZW50cnkuICAqLworICBubHNfdWludDMyIGhhc2hfdGFiX29mZnNldDsKKworICAvKiBUaGUgZm9sbG93aW5nIGFyZSBvbmx5IHVzZWQgaW4gLm1vIGZpbGVzIHdpdGggbWlub3IgcmV2aXNpb24gPj0gMS4gICovCisKKyAgLyogVGhlIG51bWJlciBvZiBzeXN0ZW0gZGVwZW5kZW50IHNlZ21lbnRzLiAgKi8KKyAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zZWdtZW50czsKKyAgLyogT2Zmc2V0IG9mIHRhYmxlIGRlc2NyaWJpbmcgc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50cy4gICovCisgIG5sc191aW50MzIgc3lzZGVwX3NlZ21lbnRzX29mZnNldDsKKyAgLyogVGhlIG51bWJlciBvZiBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MgcGFpcnMuICAqLworICBubHNfdWludDMyIG5fc3lzZGVwX3N0cmluZ3M7CisgIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2Ygb3JpZ2luYWwgc3lzZGVwIHN0cmluZ3MuICAqLworICBubHNfdWludDMyIG9yaWdfc3lzZGVwX3RhYl9vZmZzZXQ7CisgIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2YgdHJhbnNsYXRlZCBzeXNkZXAgc3RyaW5ncy4gICovCisgIG5sc191aW50MzIgdHJhbnNfc3lzZGVwX3RhYl9vZmZzZXQ7Cit9OworCisvKiBEZXNjcmlwdG9yIGZvciBzdGF0aWMgc3RyaW5nIGNvbnRhaW5lZCBpbiB0aGUgYmluYXJ5IC5tbyBmaWxlLiAgKi8KK3N0cnVjdCBzdHJpbmdfZGVzYworeworICAvKiBMZW5ndGggb2YgYWRkcmVzc2VkIHN0cmluZywgbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKyAgbmxzX3VpbnQzMiBsZW5ndGg7CisgIC8qIE9mZnNldCBvZiBzdHJpbmcgaW4gZmlsZS4gICovCisgIG5sc191aW50MzIgb2Zmc2V0OworfTsKKworLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSB1c2VkIGluIC5tbyBmaWxlcyB3aXRoIG1pbm9yIHJldmlzaW9uID49IDEuICAqLworCisvKiBEZXNjcmlwdG9yIGZvciBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZyBzZWdtZW50LiAgKi8KK3N0cnVjdCBzeXNkZXBfc2VnbWVudAoreworICAvKiBMZW5ndGggb2YgYWRkcmVzc2VkIHN0cmluZywgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuICAqLworICBubHNfdWludDMyIGxlbmd0aDsKKyAgLyogT2Zmc2V0IG9mIHN0cmluZyBpbiBmaWxlLiAgKi8KKyAgbmxzX3VpbnQzMiBvZmZzZXQ7Cit9OworCisvKiBEZXNjcmlwdG9yIGZvciBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZy4gICovCitzdHJ1Y3Qgc3lzZGVwX3N0cmluZworeworICAvKiBPZmZzZXQgb2Ygc3RhdGljIHN0cmluZyBzZWdtZW50cyBpbiBmaWxlLiAgKi8KKyAgbmxzX3VpbnQzMiBvZmZzZXQ7CisgIC8qIEFsdGVybmF0aW5nIHNlcXVlbmNlIG9mIHN0YXRpYyBhbmQgc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50cy4KKyAgICAgVGhlIGxhc3Qgc2VnbWVudCBpcyBhIHN0YXRpYyBzZWdtZW50LCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gICovCisgIHN0cnVjdCBzZWdtZW50X3BhaXIKKyAgeworICAgIC8qIFNpemUgb2Ygc3RhdGljIHNlZ21lbnQuICAqLworICAgIG5sc191aW50MzIgc2Vnc2l6ZTsKKyAgICAvKiBSZWZlcmVuY2UgdG8gc3lzdGVtIGRlcGVuZGVudCBzdHJpbmcgc2VnbWVudCwgb3IgfjAgYXQgdGhlIGVuZC4gICovCisgICAgbmxzX3VpbnQzMiBzeXNkZXByZWY7CisgIH0gc2VnbWVudHNbMV07Cit9OworCisvKiBNYXJrZXIgZm9yIHRoZSBlbmQgb2YgdGhlIHNlZ21lbnRzW10gYXJyYXkuICBUaGlzIGhhcyB0aGUgdmFsdWUgMHhGRkZGRkZGRiwKKyAgIHJlZ2FyZGxlc3Mgd2hldGhlciAnaW50JyBpcyAxNiBiaXQsIDMyIGJpdCwgb3IgNjQgYml0LiAgKi8KKyNkZWZpbmUgU0VHTUVOVFNfRU5EICgobmxzX3VpbnQzMikgfjApCisKKy8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworCisjZW5kaWYJLyogZ2V0dGV4dC5oICAqLwpkaWZmIC0tZ2l0IGEvaW50bC9oYXNoLXN0cmluZy5oIGIvaW50bC9oYXNoLXN0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5M2UzYjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL2hhc2gtc3RyaW5nLmgKQEAgLTAsMCArMSw0OCBAQAorLyogRGVzY3JpcHRpb24gb2YgR05VIG1lc3NhZ2UgY2F0YWxvZyBmb3JtYXQ6IHN0cmluZyBoYXNoaW5nIGZ1bmN0aW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3LTE5OTgsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworLyogV2UgYXNzdW1lIHRvIGhhdmUgYHVuc2lnbmVkIGxvbmcgaW50JyB2YWx1ZSB3aXRoIGF0IGxlYXN0IDMyIGJpdHMuICAqLworI2RlZmluZSBIQVNIV09SREJJVFMgMzIKKworCisvKiBEZWZpbmVzIHRoZSBzbyBjYWxsZWQgYGhhc2hwancnIGZ1bmN0aW9uIGJ5IFAuSi4gV2VpbmJlcmdlcgorICAgW3NlZSBBaG8vU2V0aGkvVWxsbWFuLCBDT01QSUxFUlM6IFByaW5jaXBsZXMsIFRlY2huaXF1ZXMgYW5kIFRvb2xzLAorICAgMTk4NiwgMTk4NyBCZWxsIFRlbGVwaG9uZSBMYWJvcmF0b3JpZXMsIEluYy5dICAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGludAoraGFzaF9zdHJpbmcgKGNvbnN0IGNoYXIgKnN0cl9wYXJhbSkKK3sKKyAgdW5zaWduZWQgbG9uZyBpbnQgaHZhbCwgZzsKKyAgY29uc3QgY2hhciAqc3RyID0gc3RyX3BhcmFtOworCisgIC8qIENvbXB1dGUgdGhlIGhhc2ggdmFsdWUgZm9yIHRoZSBnaXZlbiBzdHJpbmcuICAqLworICBodmFsID0gMDsKKyAgd2hpbGUgKCpzdHIgIT0gJ1wwJykKKyAgICB7CisgICAgICBodmFsIDw8PSA0OworICAgICAgaHZhbCArPSAodW5zaWduZWQgY2hhcikgKnN0cisrOworICAgICAgZyA9IGh2YWwgJiAoKHVuc2lnbmVkIGxvbmcgaW50KSAweGYgPDwgKEhBU0hXT1JEQklUUyAtIDQpKTsKKyAgICAgIGlmIChnICE9IDApCisJeworCSAgaHZhbCBePSBnID4+IChIQVNIV09SREJJVFMgLSA4KTsKKwkgIGh2YWwgXj0gZzsKKwl9CisgICAgfQorICByZXR1cm4gaHZhbDsKK30KZGlmZiAtLWdpdCBhL2ludGwvaW50bC1jb21wYXQuYyBiL2ludGwvaW50bC1jb21wYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmY5ZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvaW50bC9pbnRsLWNvbXBhdC5jCkBAIC0wLDAgKzEsMTMxIEBACisvKiBpbnRsLWNvbXBhdC5jIC0gU3R1YiBmdW5jdGlvbnMgdG8gY2FsbCBnZXR0ZXh0IGZ1bmN0aW9ucyBmcm9tIEdOVSBnZXR0ZXh0CisgICBMaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAxOTk1LCAyMDAwLTIwMDMgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImdldHRleHRQLmgiCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworLyogVGhpcyBmaWxlIHJlZGlyZWN0cyB0aGUgZ2V0dGV4dCBmdW5jdGlvbnMgKHdpdGhvdXQgcHJlZml4KSB0byB0aG9zZQorICAgZGVmaW5lZCBpbiB0aGUgaW5jbHVkZWQgR05VIGxpYmludGwgbGlicmFyeSAod2l0aCAibGliaW50bF8iIHByZWZpeCkuCisgICBJdCBpcyBjb21waWxlZCBpbnRvIGxpYmludGwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgQU1fR05VX0dFVFRFWFQgdGVzdAorICAgb2YgZ2V0dGV4dCA8PSAwLjExLjIgd29yayB3aXRoIHRoZSBsaWJpbnRsIGxpYnJhcnkgPj0gMC4xMS4zIHdoaWNoCisgICBoYXMgdGhlIHJlZGlyZWN0aW9ucyBwcmltYXJpbHkgaW4gdGhlIDxsaWJpbnRsLmg+IGluY2x1ZGUgZmlsZS4KKyAgIEl0IGlzIGFsc28gY29tcGlsZWQgaW50byBsaWJnbnVpbnRsIHNvIHRoYXQgbGliZ251aW50bC5zbyBjYW4gYmUgdXNlZAorICAgYXMgTERfUFJFTE9BRGFibGUgbGlicmFyeSBvbiBnbGliYyBzeXN0ZW1zLCB0byBwcm92aWRlIHRoZSBleHRyYQorICAgZmVhdHVyZXMgdGhhdCB0aGUgZnVuY3Rpb25zIGluIHRoZSBsaWJjIGRvbid0IGhhdmUgKG5hbWVseSwgbG9nZ2luZykuICAqLworCisKKyN1bmRlZiBnZXR0ZXh0CisjdW5kZWYgZGdldHRleHQKKyN1bmRlZiBkY2dldHRleHQKKyN1bmRlZiBuZ2V0dGV4dAorI3VuZGVmIGRuZ2V0dGV4dAorI3VuZGVmIGRjbmdldHRleHQKKyN1bmRlZiB0ZXh0ZG9tYWluCisjdW5kZWYgYmluZHRleHRkb21haW4KKyN1bmRlZiBiaW5kX3RleHRkb21haW5fY29kZXNldAorCisKKy8qIFdoZW4gYnVpbGRpbmcgYSBETEwsIHdlIG11c3QgZXhwb3J0IHNvbWUgZnVuY3Rpb25zLiAgTm90ZSB0aGF0IGJlY2F1c2UKKyAgIHRoZSBmdW5jdGlvbnMgYXJlIG9ubHkgZGVmaW5lZCBmb3IgYmluYXJ5IGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHdlCisgICBkb24ndCBuZWVkIHRvIHVzZSBfX2RlY2xzcGVjKGRsbGltcG9ydCkgaW4gYW55IGNhc2UuICAqLworI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgQlVJTERJTkdfRExMCisjIGRlZmluZSBETExfRVhQT1JURUQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorIyBkZWZpbmUgRExMX0VYUE9SVEVECisjZW5kaWYKKworCitETExfRVhQT1JURUQKK2NoYXIgKgorZ2V0dGV4dCAoY29uc3QgY2hhciAqbXNnaWQpCit7CisgIHJldHVybiBsaWJpbnRsX2dldHRleHQgKG1zZ2lkKTsKK30KKworCitETExfRVhQT1JURUQKK2NoYXIgKgorZGdldHRleHQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkKQoreworICByZXR1cm4gbGliaW50bF9kZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQpOworfQorCisKK0RMTF9FWFBPUlRFRAorY2hhciAqCitkY2dldHRleHQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpCit7CisgIHJldHVybiBsaWJpbnRsX2RjZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQsIGNhdGVnb3J5KTsKK30KKworCitETExfRVhQT1JURUQKK2NoYXIgKgorbmdldHRleHQgKGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuKQoreworICByZXR1cm4gbGliaW50bF9uZ2V0dGV4dCAobXNnaWQxLCBtc2dpZDIsIG4pOworfQorCisKK0RMTF9FWFBPUlRFRAorY2hhciAqCitkbmdldHRleHQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisJICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCit7CisgIHJldHVybiBsaWJpbnRsX2RuZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQxLCBtc2dpZDIsIG4pOworfQorCisKK0RMTF9FWFBPUlRFRAorY2hhciAqCitkY25nZXR0ZXh0IChjb25zdCBjaGFyICpkb21haW5uYW1lLAorCSAgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgbiwKKwkgICAgaW50IGNhdGVnb3J5KQoreworICByZXR1cm4gbGliaW50bF9kY25nZXR0ZXh0IChkb21haW5uYW1lLCBtc2dpZDEsIG1zZ2lkMiwgbiwgY2F0ZWdvcnkpOworfQorCisKK0RMTF9FWFBPUlRFRAorY2hhciAqCit0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpkb21haW5uYW1lKQoreworICByZXR1cm4gbGliaW50bF90ZXh0ZG9tYWluIChkb21haW5uYW1lKTsKK30KKworCitETExfRVhQT1JURUQKK2NoYXIgKgorYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisgIHJldHVybiBsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluIChkb21haW5uYW1lLCBkaXJuYW1lKTsKK30KKworCitETExfRVhQT1JURUQKK2NoYXIgKgorYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKmNvZGVzZXQpCit7CisgIHJldHVybiBsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChkb21haW5uYW1lLCBjb2Rlc2V0KTsKK30KZGlmZiAtLWdpdCBhL2ludGwvbDEwbmZsaXN0LmMgYi9pbnRsL2wxMG5mbGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOTNlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL2wxMG5mbGlzdC5jCkBAIC0wLDAgKzEsNDIyIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworLyogVGVsbCBnbGliYydzIDxzdHJpbmcuaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3Igc3RwY3B5KCkuCisgICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKyAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyMgZGVmaW5lIF9HTlVfU09VUkNFCTEKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9BUkdaX0gKKyMgaW5jbHVkZSA8YXJnei5oPgorI2VuZGlmCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgImxvYWRpbmZvLmgiCisKKy8qIE9uIHNvbWUgc3RyYW5nZSBzeXN0ZW1zIHN0aWxsIG5vIGRlZmluaXRpb24gb2YgTlVMTCBpcyBmb3VuZC4gIFNpZ2ghICAqLworI2lmbmRlZiBOVUxMCisjIGlmIGRlZmluZWQgX19TVERDX18gJiYgX19TVERDX18KKyMgIGRlZmluZSBOVUxMICgodm9pZCAqKSAwKQorIyBlbHNlCisjICBkZWZpbmUgTlVMTCAwCisjIGVuZGlmCisjZW5kaWYKKworLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworCisjaWZkZWYgX0xJQkMKKy8qIFJlbmFtZSB0aGUgbm9uIEFOU0kgQyBmdW5jdGlvbnMuICBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZAorICAgYmVjYXVzZSBzb21lIEFOU0kgQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorICAgZmlsZSBhbmQgdGhlIG5hbWUgc3BhY2UgbXVzdCBub3QgYmUgcG9sbHV0ZWQuICAqLworIyBpZm5kZWYgc3RwY3B5CisjICBkZWZpbmUgc3RwY3B5KGRlc3QsIHNyYykgX19zdHBjcHkoZGVzdCwgc3JjKQorIyBlbmRpZgorI2Vsc2UKKyMgaWZuZGVmIEhBVkVfU1RQQ1BZCisjZGVmaW5lIHN0cGNweShkZXN0LCBzcmMpIG15X3N0cGNweShkZXN0LCBzcmMpCitzdGF0aWMgY2hhciAqc3RwY3B5IChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFBhdGhuYW1lIHN1cHBvcnQuCisgICBJU1NMQVNIKEMpICAgICAgICAgICB0ZXN0cyB3aGV0aGVyIEMgaXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKyAgIElTX0FCU09MVVRFX1BBVEgoUCkgIHRlc3RzIHdoZXRoZXIgUCBpcyBhbiBhYnNvbHV0ZSBwYXRoLiAgSWYgaXQgaXMgbm90LAorICAgICAgICAgICAgICAgICAgICAgICAgaXQgbWF5IGJlIGNvbmNhdGVuYXRlZCB0byBhIGRpcmVjdG9yeSBwYXRobmFtZS4KKyAqLworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQorIyBkZWZpbmUgSEFTX0RFVklDRShQKSBcCisgICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorICAgICAmJiAoUClbMV0gPT0gJzonKQorIyBkZWZpbmUgSVNfQUJTT0xVVEVfUEFUSChQKSAoSVNTTEFTSCAoKFApWzBdKSB8fCBIQVNfREVWSUNFIChQKSkKKyNlbHNlCisgIC8qIFVuaXggKi8KKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycpCisjIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIElTU0xBU0ggKChQKVswXSkKKyNlbmRpZgorCisvKiBEZWZpbmUgZnVuY3Rpb24gd2hpY2ggYXJlIHVzdWFsbHkgbm90IGF2YWlsYWJsZS4gICovCisKKyNpZiAhZGVmaW5lZCBfTElCQyAmJiAhZGVmaW5lZCBIQVZFX19fQVJHWl9DT1VOVAorLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN0cmluZ3MgaW4gQVJHWi4gICovCitzdGF0aWMgc2l6ZV90Cithcmd6X2NvdW50X18gKGNvbnN0IGNoYXIgKmFyZ3osIHNpemVfdCBsZW4pCit7CisgIHNpemVfdCBjb3VudCA9IDA7CisgIHdoaWxlIChsZW4gPiAwKQorICAgIHsKKyAgICAgIHNpemVfdCBwYXJ0X2xlbiA9IHN0cmxlbiAoYXJneik7CisgICAgICBhcmd6ICs9IHBhcnRfbGVuICsgMTsKKyAgICAgIGxlbiAtPSBwYXJ0X2xlbiArIDE7CisgICAgICBjb3VudCsrOworICAgIH0KKyAgcmV0dXJuIGNvdW50OworfQorIyB1bmRlZiBfX2FyZ3pfY291bnQKKyMgZGVmaW5lIF9fYXJnel9jb3VudChhcmd6LCBsZW4pIGFyZ3pfY291bnRfXyAoYXJneiwgbGVuKQorI2Vsc2UKKyMgaWZkZWYgX0xJQkMKKyMgIGRlZmluZSBfX2FyZ3pfY291bnQoYXJneiwgbGVuKSBJTlRVU0UoX19hcmd6X2NvdW50KSAoYXJneiwgbGVuKQorIyBlbmRpZgorI2VuZGlmCS8qICFfTElCQyAmJiAhSEFWRV9fX0FSR1pfQ09VTlQgKi8KKworI2lmICFkZWZpbmVkIF9MSUJDICYmICFkZWZpbmVkIEhBVkVfX19BUkdaX1NUUklOR0lGWQorLyogTWFrZSAnXDAnIHNlcGFyYXRlZCBhcmcgdmVjdG9yIEFSR1ogcHJpbnRhYmxlIGJ5IGNvbnZlcnRpbmcgYWxsIHRoZSAnXDAncworICAgZXhjZXB0IHRoZSBsYXN0IGludG8gdGhlIGNoYXJhY3RlciBTRVAuICAqLworc3RhdGljIHZvaWQKK2FyZ3pfc3RyaW5naWZ5X18gKGNoYXIgKmFyZ3osIHNpemVfdCBsZW4sIGludCBzZXApCit7CisgIHdoaWxlIChsZW4gPiAwKQorICAgIHsKKyAgICAgIHNpemVfdCBwYXJ0X2xlbiA9IHN0cmxlbiAoYXJneik7CisgICAgICBhcmd6ICs9IHBhcnRfbGVuOworICAgICAgbGVuIC09IHBhcnRfbGVuICsgMTsKKyAgICAgIGlmIChsZW4gPiAwKQorCSphcmd6KysgPSBzZXA7CisgICAgfQorfQorIyB1bmRlZiBfX2FyZ3pfc3RyaW5naWZ5CisjIGRlZmluZSBfX2FyZ3pfc3RyaW5naWZ5KGFyZ3osIGxlbiwgc2VwKSBhcmd6X3N0cmluZ2lmeV9fIChhcmd6LCBsZW4sIHNlcCkKKyNlbHNlCisjIGlmZGVmIF9MSUJDCisjICBkZWZpbmUgX19hcmd6X3N0cmluZ2lmeShhcmd6LCBsZW4sIHNlcCkgXAorICBJTlRVU0UoX19hcmd6X3N0cmluZ2lmeSkgKGFyZ3osIGxlbiwgc2VwKQorIyBlbmRpZgorI2VuZGlmCS8qICFfTElCQyAmJiAhSEFWRV9fX0FSR1pfU1RSSU5HSUZZICovCisKKyNpZiAhZGVmaW5lZCBfTElCQyAmJiAhZGVmaW5lZCBIQVZFX19fQVJHWl9ORVhUCitzdGF0aWMgY2hhciAqCithcmd6X25leHRfXyAoY2hhciAqYXJneiwgc2l6ZV90IGFyZ3pfbGVuLCBjb25zdCBjaGFyICplbnRyeSkKK3sKKyAgaWYgKGVudHJ5KQorICAgIHsKKyAgICAgIGlmIChlbnRyeSA8IGFyZ3ogKyBhcmd6X2xlbikKKyAgICAgICAgZW50cnkgPSBzdHJjaHIgKGVudHJ5LCAnXDAnKSArIDE7CisKKyAgICAgIHJldHVybiBlbnRyeSA+PSBhcmd6ICsgYXJnel9sZW4gPyBOVUxMIDogKGNoYXIgKikgZW50cnk7CisgICAgfQorICBlbHNlCisgICAgaWYgKGFyZ3pfbGVuID4gMCkKKyAgICAgIHJldHVybiBhcmd6OworICAgIGVsc2UKKyAgICAgIHJldHVybiAwOworfQorIyB1bmRlZiBfX2FyZ3pfbmV4dAorIyBkZWZpbmUgX19hcmd6X25leHQoYXJneiwgbGVuLCBlbnRyeSkgYXJnel9uZXh0X18gKGFyZ3osIGxlbiwgZW50cnkpCisjZW5kaWYJLyogIV9MSUJDICYmICFIQVZFX19fQVJHWl9ORVhUICovCisKKworLyogUmV0dXJuIG51bWJlciBvZiBiaXRzIHNldCBpbiBYLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50Citwb3AgKGludCB4KQoreworICAvKiBXZSBhc3N1bWUgdGhhdCBubyBtb3JlIHRoYW4gMTYgYml0cyBhcmUgdXNlZC4gICovCisgIHggPSAoKHggJiB+MHg1NTU1KSA+PiAxKSArICh4ICYgMHg1NTU1KTsKKyAgeCA9ICgoeCAmIH4weDMzMzMpID4+IDIpICsgKHggJiAweDMzMzMpOworICB4ID0gKCh4ID4+IDQpICsgeCkgJiAweDBmMGY7CisgIHggPSAoKHggPj4gOCkgKyB4KSAmIDB4ZmY7CisKKyAgcmV0dXJuIHg7Cit9CisKKworc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqCitfbmxfbWFrZV9sMTBuZmxpc3QgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsMTBuZmlsZV9saXN0LAorCQkgICAgY29uc3QgY2hhciAqZGlybGlzdCwgc2l6ZV90IGRpcmxpc3RfbGVuLAorCQkgICAgaW50IG1hc2ssIGNvbnN0IGNoYXIgKmxhbmd1YWdlLCBjb25zdCBjaGFyICp0ZXJyaXRvcnksCisJCSAgICBjb25zdCBjaGFyICpjb2Rlc2V0LCBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQsCisJCSAgICBjb25zdCBjaGFyICptb2RpZmllciwgY29uc3QgY2hhciAqc3BlY2lhbCwKKwkJICAgIGNvbnN0IGNoYXIgKnNwb25zb3IsIGNvbnN0IGNoYXIgKnJldmlzaW9uLAorCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBkb19hbGxvY2F0ZSkKK3sKKyAgY2hhciAqYWJzX2ZpbGVuYW1lOworICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoqbGFzdHA7CisgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKnJldHZhbDsKKyAgY2hhciAqY3A7CisgIHNpemVfdCBkaXJsaXN0X2NvdW50OworICBzaXplX3QgZW50cmllczsKKyAgaW50IGNudDsKKworICAvKiBJZiBMQU5HVUFHRSBjb250YWlucyBhbiBhYnNvbHV0ZSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbiwgd2UgaWdub3JlCisgICAgIERJUkxJU1QuICAqLworICBpZiAoSVNfQUJTT0xVVEVfUEFUSCAobGFuZ3VhZ2UpKQorICAgIGRpcmxpc3RfbGVuID0gMDsKKworICAvKiBBbGxvY2F0ZSByb29tIGZvciB0aGUgZnVsbCBmaWxlIG5hbWUuICAqLworICBhYnNfZmlsZW5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGRpcmxpc3RfbGVuCisJCQkJICArIHN0cmxlbiAobGFuZ3VhZ2UpCisJCQkJICArICgobWFzayAmIFRFUlJJVE9SWSkgIT0gMAorCQkJCSAgICAgPyBzdHJsZW4gKHRlcnJpdG9yeSkgKyAxIDogMCkKKwkJCQkgICsgKChtYXNrICYgWFBHX0NPREVTRVQpICE9IDAKKwkJCQkgICAgID8gc3RybGVuIChjb2Rlc2V0KSArIDEgOiAwKQorCQkJCSAgKyAoKG1hc2sgJiBYUEdfTk9STV9DT0RFU0VUKSAhPSAwCisJCQkJICAgICA/IHN0cmxlbiAobm9ybWFsaXplZF9jb2Rlc2V0KSArIDEgOiAwKQorCQkJCSAgKyAoKChtYXNrICYgWFBHX01PRElGSUVSKSAhPSAwCisJCQkJICAgICAgfHwgKG1hc2sgJiBDRU5fQVVESUVOQ0UpICE9IDApCisJCQkJICAgICA/IHN0cmxlbiAobW9kaWZpZXIpICsgMSA6IDApCisJCQkJICArICgobWFzayAmIENFTl9TUEVDSUFMKSAhPSAwCisJCQkJICAgICA/IHN0cmxlbiAoc3BlY2lhbCkgKyAxIDogMCkKKwkJCQkgICsgKCgobWFzayAmIENFTl9TUE9OU09SKSAhPSAwCisJCQkJICAgICAgfHwgKG1hc2sgJiBDRU5fUkVWSVNJT04pICE9IDApCisJCQkJICAgICA/ICgxICsgKChtYXNrICYgQ0VOX1NQT05TT1IpICE9IDAKKwkJCQkJICAgICA/IHN0cmxlbiAoc3BvbnNvcikgOiAwKQorCQkJCQkrICgobWFzayAmIENFTl9SRVZJU0lPTikgIT0gMAorCQkJCQkgICA/IHN0cmxlbiAocmV2aXNpb24pICsgMSA6IDApKSA6IDApCisJCQkJICArIDEgKyBzdHJsZW4gKGZpbGVuYW1lKSArIDEpOworCisgIGlmIChhYnNfZmlsZW5hbWUgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBDb25zdHJ1Y3QgZmlsZSBuYW1lLiAgKi8KKyAgY3AgPSBhYnNfZmlsZW5hbWU7CisgIGlmIChkaXJsaXN0X2xlbiA+IDApCisgICAgeworICAgICAgbWVtY3B5IChjcCwgZGlybGlzdCwgZGlybGlzdF9sZW4pOworICAgICAgX19hcmd6X3N0cmluZ2lmeSAoY3AsIGRpcmxpc3RfbGVuLCBQQVRIX1NFUEFSQVRPUik7CisgICAgICBjcCArPSBkaXJsaXN0X2xlbjsKKyAgICAgIGNwWy0xXSA9ICcvJzsKKyAgICB9CisKKyAgY3AgPSBzdHBjcHkgKGNwLCBsYW5ndWFnZSk7CisKKyAgaWYgKChtYXNrICYgVEVSUklUT1JZKSAhPSAwKQorICAgIHsKKyAgICAgICpjcCsrID0gJ18nOworICAgICAgY3AgPSBzdHBjcHkgKGNwLCB0ZXJyaXRvcnkpOworICAgIH0KKyAgaWYgKChtYXNrICYgWFBHX0NPREVTRVQpICE9IDApCisgICAgeworICAgICAgKmNwKysgPSAnLic7CisgICAgICBjcCA9IHN0cGNweSAoY3AsIGNvZGVzZXQpOworICAgIH0KKyAgaWYgKChtYXNrICYgWFBHX05PUk1fQ09ERVNFVCkgIT0gMCkKKyAgICB7CisgICAgICAqY3ArKyA9ICcuJzsKKyAgICAgIGNwID0gc3RwY3B5IChjcCwgbm9ybWFsaXplZF9jb2Rlc2V0KTsKKyAgICB9CisgIGlmICgobWFzayAmIChYUEdfTU9ESUZJRVIgfCBDRU5fQVVESUVOQ0UpKSAhPSAwKQorICAgIHsKKyAgICAgIC8qIFRoaXMgY29tcG9uZW50IGNhbiBiZSBwYXJ0IG9mIGJvdGggc3ludGFjZXMgYnV0IGhhcyBkaWZmZXJlbnQKKwkgbGVhZGluZyBjaGFyYWN0ZXJzLiAgRm9yIENFTiB3ZSB1c2UgYCsnLCBlbHNlIGBAJy4gICovCisgICAgICAqY3ArKyA9IChtYXNrICYgQ0VOX0FVRElFTkNFKSAhPSAwID8gJysnIDogJ0AnOworICAgICAgY3AgPSBzdHBjcHkgKGNwLCBtb2RpZmllcik7CisgICAgfQorICBpZiAoKG1hc2sgJiBDRU5fU1BFQ0lBTCkgIT0gMCkKKyAgICB7CisgICAgICAqY3ArKyA9ICcrJzsKKyAgICAgIGNwID0gc3RwY3B5IChjcCwgc3BlY2lhbCk7CisgICAgfQorICBpZiAoKG1hc2sgJiAoQ0VOX1NQT05TT1IgfCBDRU5fUkVWSVNJT04pKSAhPSAwKQorICAgIHsKKyAgICAgICpjcCsrID0gJywnOworICAgICAgaWYgKChtYXNrICYgQ0VOX1NQT05TT1IpICE9IDApCisJY3AgPSBzdHBjcHkgKGNwLCBzcG9uc29yKTsKKyAgICAgIGlmICgobWFzayAmIENFTl9SRVZJU0lPTikgIT0gMCkKKwl7CisJICAqY3ArKyA9ICdfJzsKKwkgIGNwID0gc3RwY3B5IChjcCwgcmV2aXNpb24pOworCX0KKyAgICB9CisKKyAgKmNwKysgPSAnLyc7CisgIHN0cGNweSAoY3AsIGZpbGVuYW1lKTsKKworICAvKiBMb29rIGluIGxpc3Qgb2YgYWxyZWFkeSBsb2FkZWQgZG9tYWlucyB3aGV0aGVyIGl0IGlzIGFscmVhZHkKKyAgICAgYXZhaWxhYmxlLiAgKi8KKyAgbGFzdHAgPSBsMTBuZmlsZV9saXN0OworICBmb3IgKHJldHZhbCA9ICpsMTBuZmlsZV9saXN0OyByZXR2YWwgIT0gTlVMTDsgcmV0dmFsID0gcmV0dmFsLT5uZXh0KQorICAgIGlmIChyZXR2YWwtPmZpbGVuYW1lICE9IE5VTEwpCisgICAgICB7CisJaW50IGNvbXBhcmUgPSBzdHJjbXAgKHJldHZhbC0+ZmlsZW5hbWUsIGFic19maWxlbmFtZSk7CisJaWYgKGNvbXBhcmUgPT0gMCkKKwkgIC8qIFdlIGZvdW5kIGl0ISAgKi8KKwkgIGJyZWFrOworCWlmIChjb21wYXJlIDwgMCkKKwkgIHsKKwkgICAgLyogSXQncyBub3QgaW4gdGhlIGxpc3QuICAqLworCSAgICByZXR2YWwgPSBOVUxMOworCSAgICBicmVhazsKKwkgIH0KKworCWxhc3RwID0gJnJldHZhbC0+bmV4dDsKKyAgICAgIH0KKworICBpZiAocmV0dmFsICE9IE5VTEwgfHwgZG9fYWxsb2NhdGUgPT0gMCkKKyAgICB7CisgICAgICBmcmVlIChhYnNfZmlsZW5hbWUpOworICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICB9CisKKyAgZGlybGlzdF9jb3VudCA9IChkaXJsaXN0X2xlbiA+IDAgPyBfX2FyZ3pfY291bnQgKGRpcmxpc3QsIGRpcmxpc3RfbGVuKSA6IDEpOworCisgIC8qIEFsbG9jYXRlIGEgbmV3IGxvYWRlZF9sMTBuZmlsZS4gICovCisgIHJldHZhbCA9CisgICAgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKikKKyAgICBtYWxsb2MgKHNpemVvZiAoKnJldHZhbCkKKwkgICAgKyAoKChkaXJsaXN0X2NvdW50IDw8IHBvcCAobWFzaykpICsgKGRpcmxpc3RfY291bnQgPiAxID8gMSA6IDApKQorCSAgICAgICAqIHNpemVvZiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKSkpOworICBpZiAocmV0dmFsID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcmV0dmFsLT5maWxlbmFtZSA9IGFic19maWxlbmFtZTsKKworICAvKiBXZSBzZXQgcmV0dmFsLT5kYXRhIHRvIE5VTEwgaGVyZTsgaXQgaXMgZmlsbGVkIGluIGxhdGVyLgorICAgICBTZXR0aW5nIHJldHZhbC0+ZGVjaWRlZCB0byAxIGhlcmUgbWVhbnMgdGhhdCByZXR2YWwgZG9lcyBub3QKKyAgICAgY29ycmVzcG9uZCB0byBhIHJlYWwgZmlsZSAoZGlybGlzdF9jb3VudCA+IDEpIG9yIGlzIG5vdCB3b3J0aAorICAgICBsb29raW5nIHVwIChpZiBhbiB1bm5vcm1hbGl6ZWQgY29kZXNldCB3YXMgc3BlY2lmaWVkKS4gICovCisgIHJldHZhbC0+ZGVjaWRlZCA9IChkaXJsaXN0X2NvdW50ID4gMQorCQkgICAgIHx8ICgobWFzayAmIFhQR19DT0RFU0VUKSAhPSAwCisJCQkgJiYgKG1hc2sgJiBYUEdfTk9STV9DT0RFU0VUKSAhPSAwKSk7CisgIHJldHZhbC0+ZGF0YSA9IE5VTEw7CisKKyAgcmV0dmFsLT5uZXh0ID0gKmxhc3RwOworICAqbGFzdHAgPSByZXR2YWw7CisKKyAgZW50cmllcyA9IDA7CisgIC8qIFJlY3Vyc2UgdG8gZmlsbCB0aGUgaW5oZXJpdGFuY2UgbGlzdCBvZiBSRVRWQUwuCisgICAgIElmIHRoZSBESVJMSVNUIGlzIGEgcmVhbCBsaXN0IChpLmUuIERJUkxJU1RfQ09VTlQgPiAxKSwgdGhlIFJFVFZBTAorICAgICBlbnRyeSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgcmVhbCBmaWxlOyByZXR2YWwtPmZpbGVuYW1lIGNvbnRhaW5zCisgICAgIGNvbG9ucy4gIEluIHRoaXMgY2FzZSB3ZSBsb29wIGFjcm9zcyBhbGwgZWxlbWVudHMgb2YgRElSTElTVCBhbmQKKyAgICAgYWNyb3NzIGFsbCBiaXQgcGF0dGVybnMgZG9taW5hdGVkIGJ5IE1BU0suCisgICAgIElmIHRoZSBESVJMSVNUIGlzIGEgc2luZ2xlIGRpcmVjdG9yeSBvciBlbnRpcmVseSByZWR1bmRhbnQgKGkuZS4KKyAgICAgRElSTElTVF9DT1VOVCA9PSAxKSwgd2UgbG9vcCBhY3Jvc3MgYWxsIGJpdCBwYXR0ZXJucyBkb21pbmF0ZWQgYnkKKyAgICAgTUFTSywgZXhjbHVkaW5nIE1BU0sgaXRzZWxmLgorICAgICBJbiBlaXRoZXIgY2FzZSwgd2UgbG9vcCBkb3duIGZyb20gTUFTSyB0byAwLiAgVGhpcyBoYXMgdGhlIGVmZmVjdAorICAgICB0aGF0IHRoZSBleHRyYSBiaXRzIGluIHRoZSBsb2NhbGUgbmFtZSBhcmUgZHJvcHBlZCBpbiB0aGlzIG9yZGVyOgorICAgICBmaXJzdCB0aGUgbW9kaWZpZXIsIHRoZW4gdGhlIHRlcnJpdG9yeSwgdGhlbiB0aGUgY29kZXNldCwgdGhlbiB0aGUKKyAgICAgbm9ybWFsaXplZF9jb2Rlc2V0LiAgKi8KKyAgZm9yIChjbnQgPSBkaXJsaXN0X2NvdW50ID4gMSA/IG1hc2sgOiBtYXNrIC0gMTsgY250ID49IDA7IC0tY250KQorICAgIGlmICgoY250ICYgfm1hc2spID09IDAKKwkmJiAoKGNudCAmIENFTl9TUEVDSUZJQykgPT0gMCB8fCAoY250ICYgWFBHX1NQRUNJRklDKSA9PSAwKQorCSYmICgoY250ICYgWFBHX0NPREVTRVQpID09IDAgfHwgKGNudCAmIFhQR19OT1JNX0NPREVTRVQpID09IDApKQorICAgICAgeworCWlmIChkaXJsaXN0X2NvdW50ID4gMSkKKwkgIHsKKwkgICAgLyogSXRlcmF0ZSBvdmVyIGFsbCBlbGVtZW50cyBvZiB0aGUgRElSTElTVC4gICovCisJICAgIGNoYXIgKmRpciA9IE5VTEw7CisKKwkgICAgd2hpbGUgKChkaXIgPSBfX2FyZ3pfbmV4dCAoKGNoYXIgKikgZGlybGlzdCwgZGlybGlzdF9sZW4sIGRpcikpCisJCSAgICE9IE5VTEwpCisJICAgICAgcmV0dmFsLT5zdWNjZXNzb3JbZW50cmllcysrXQorCQk9IF9ubF9tYWtlX2wxMG5mbGlzdCAobDEwbmZpbGVfbGlzdCwgZGlyLCBzdHJsZW4gKGRpcikgKyAxLAorCQkJCSAgICAgIGNudCwgbGFuZ3VhZ2UsIHRlcnJpdG9yeSwgY29kZXNldCwKKwkJCQkgICAgICBub3JtYWxpemVkX2NvZGVzZXQsIG1vZGlmaWVyLCBzcGVjaWFsLAorCQkJCSAgICAgIHNwb25zb3IsIHJldmlzaW9uLCBmaWxlbmFtZSwgMSk7CisJICB9CisJZWxzZQorCSAgcmV0dmFsLT5zdWNjZXNzb3JbZW50cmllcysrXQorCSAgICA9IF9ubF9tYWtlX2wxMG5mbGlzdCAobDEwbmZpbGVfbGlzdCwgZGlybGlzdCwgZGlybGlzdF9sZW4sCisJCQkJICBjbnQsIGxhbmd1YWdlLCB0ZXJyaXRvcnksIGNvZGVzZXQsCisJCQkJICBub3JtYWxpemVkX2NvZGVzZXQsIG1vZGlmaWVyLCBzcGVjaWFsLAorCQkJCSAgc3BvbnNvciwgcmV2aXNpb24sIGZpbGVuYW1lLCAxKTsKKyAgICAgIH0KKyAgcmV0dmFsLT5zdWNjZXNzb3JbZW50cmllc10gPSBOVUxMOworCisgIHJldHVybiByZXR2YWw7Cit9CisKKy8qIE5vcm1hbGl6ZSBjb2Rlc2V0IG5hbWUuICBUaGVyZSBpcyBubyBzdGFuZGFyZCBmb3IgdGhlIGNvZGVzZXQKKyAgIG5hbWVzLiAgTm9ybWFsaXphdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gdXNlIGFueSBvZiB0aGUgY29tbW9uCisgICBuYW1lcy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBoYXMgdG8gYmUKKyAgIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICAqLworY29uc3QgY2hhciAqCitfbmxfbm9ybWFsaXplX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmNvZGVzZXQsIHNpemVfdCBuYW1lX2xlbikKK3sKKyAgaW50IGxlbiA9IDA7CisgIGludCBvbmx5X2RpZ2l0ID0gMTsKKyAgY2hhciAqcmV0dmFsOworICBjaGFyICp3cDsKKyAgc2l6ZV90IGNudDsKKworICBmb3IgKGNudCA9IDA7IGNudCA8IG5hbWVfbGVuOyArK2NudCkKKyAgICBpZiAoaXNhbG51bSAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisgICAgICB7CisJKytsZW47CisKKwlpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisJICBvbmx5X2RpZ2l0ID0gMDsKKyAgICAgIH0KKworICByZXR2YWwgPSAoY2hhciAqKSBtYWxsb2MgKChvbmx5X2RpZ2l0ID8gMyA6IDApICsgbGVuICsgMSk7CisKKyAgaWYgKHJldHZhbCAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChvbmx5X2RpZ2l0KQorCXdwID0gc3RwY3B5IChyZXR2YWwsICJpc28iKTsKKyAgICAgIGVsc2UKKwl3cCA9IHJldHZhbDsKKworICAgICAgZm9yIChjbnQgPSAwOyBjbnQgPCBuYW1lX2xlbjsgKytjbnQpCisJaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSBjb2Rlc2V0W2NudF0pKQorCSAgKndwKysgPSB0b2xvd2VyICgodW5zaWduZWQgY2hhcikgY29kZXNldFtjbnRdKTsKKwllbHNlIGlmIChpc2RpZ2l0ICgodW5zaWduZWQgY2hhcikgY29kZXNldFtjbnRdKSkKKwkgICp3cCsrID0gY29kZXNldFtjbnRdOworCisgICAgICAqd3AgPSAnXDAnOworICAgIH0KKworICByZXR1cm4gKGNvbnN0IGNoYXIgKikgcmV0dmFsOworfQorCisKKy8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworCisvKiBXZSBkb24ndCB3YW50IGxpYmludGwuYSB0byBkZXBlbmQgb24gYW55IG90aGVyIGxpYnJhcnkuICBTbyB3ZQorICAgYXZvaWQgdGhlIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiBzdHBjcHkuICBJbiBHTlUgQyBMaWJyYXJ5IHRoaXMKKyAgIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgdGhvdWdoLiAgQWxzbyBhbGxvdyB0aGUgc3ltYm9sIEhBVkVfU1RQQ1BZCisgICB0byBiZSBkZWZpbmVkLiAgKi8KKyNpZiAhX0xJQkMgJiYgIUhBVkVfU1RQQ1BZCitzdGF0aWMgY2hhciAqCitzdHBjcHkgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykKK3sKKyAgd2hpbGUgKCgqZGVzdCsrID0gKnNyYysrKSAhPSAnXDAnKQorICAgIC8qIERvIG5vdGhpbmcuICovIDsKKyAgcmV0dXJuIGRlc3QgLSAxOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbnRsL2xpYmdldHRleHQuaCBiL2ludGwvbGliZ2V0dGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTI5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL2xpYmdldHRleHQuaApAQCAtMCwwICsxLDE4MiBAQAorLyogTWVzc2FnZSBjYXRhbG9ncyBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKy8qIEJlY2F1c2Ugb24gc29tZSBzeXN0ZW1zIChlLmcuIFNvbGFyaXMpIHdlIHNvbWV0aW1lcyBoYXZlIHRvIGluY2x1ZGUKKyAgIHRoZSBzeXN0ZW1zIGxpYmludGwuaCBhcyB3ZWxsIGFzIHRoaXMgZmlsZSB3ZSBoYXZlIG1vcmUgY29tcGxleAorICAgaW5jbHVkZSBwcm90ZWN0aW9uIGFib3ZlLiAgQnV0IHRoZSBzeXN0ZW1zIGhlYWRlciBtaWdodCBwZXJoYXBzIGFsc28KKyAgIGRlZmluZSBfTElCSU5UTF9IIGFuZCB0aGVyZWZvcmUgd2UgaGF2ZSB0byBwcm90ZWN0IHRoZSBkZWZpbml0aW9uIGhlcmUuICAqLworCisjaWYgIWRlZmluZWQgX0xJQklOVExfSCB8fCAhZGVmaW5lZCBfTElCR0VUVEVYVF9ICisjaWZuZGVmIF9MSUJJTlRMX0gKKyMgZGVmaW5lIF9MSUJJTlRMX0gJMQorI2VuZGlmCisjZGVmaW5lIF9MSUJHRVRURVhUX0gJMQorCisvKiBXZSBkZWZpbmUgYW4gYWRkaXRpb25hbCBzeW1ib2wgdG8gc2lnbmFsIHRoYXQgd2UgdXNlIHRoZSBHTlUKKyAgIGltcGxlbWVudGF0aW9uIG9mIGdldHRleHQuICAqLworI2RlZmluZSBfX1VTRV9HTlVfR0VUVEVYVCAxCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmIEhBVkVfTE9DQUxFX0gKKyMgaW5jbHVkZSA8bG9jYWxlLmg+CisjZW5kaWYKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworI2lmbmRlZiBQQVJBTVMKKyMgaWYgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgZGVmaW5lIFBBUkFNUyhhcmdzKSBhcmdzCisjIGVsc2UKKyMgIGRlZmluZSBQQVJBTVMoYXJncykgKCkKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIE5VTEwKKyMgaWYgIWRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfX0dOVUNfXworIyAgZGVmaW5lIE5VTEwgKCh2b2lkICopIDApCisjIGVsc2UKKyMgIGRlZmluZSBOVUxMICgwKQorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhSEFWRV9MQ19NRVNTQUdFUworLyogVGhpcyB2YWx1ZSBkZXRlcm1pbmVzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGdldHRleHQoKSBhbmQgZGdldHRleHQoKQorICAgZnVuY3Rpb24uICBCdXQgc29tZSBzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGlzIGRlZmluZWQuICBEZWZpbmUgaXQKKyAgIHRvIGEgZGVmYXVsdCB2YWx1ZS4gICovCisjIGRlZmluZSBMQ19NRVNTQUdFUyAoLTEpCisjZW5kaWYKKworCisvKiBEZWNsYXJhdGlvbnMgZm9yIGdldHRleHQtdXNpbmctY2F0Z2V0cyBpbnRlcmZhY2UuICBEZXJpdmVkIGZyb20KKyAgIEppbSBNZXllcmluZydzIGxpYmludGwuaC4gICovCitzdHJ1Y3QgX21zZ19lbnQKK3sKKyAgY29uc3QgY2hhciAqX21zZzsKKyAgaW50IF9tc2dfbnVtYmVyOworfTsKKworCisjaWYgSEFWRV9DQVRHRVRTCisvKiBUaGVzZSB0d28gdmFyaWFibGVzIGFyZSBkZWZpbmVkIGluIHRoZSBhdXRvbWF0aWNhbGx5IGJ5IHBvLXRvLXRibC5zZWQKKyAgIGdlbmVyYXRlZCBmaWxlIGBjYXQtaWQtdGJsLmMnLiAgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgX21zZ19lbnQgX21zZ190YmxbXTsKK2V4dGVybiBpbnQgX21zZ190YmxfbGVuZ3RoOworI2VuZGlmCisKKworLyogRm9yIGF1dG9tYXRpY2FsIGV4dHJhY3Rpb24gb2YgbWVzc2FnZXMgc29tZXRpbWVzIG5vIHJlYWwKKyAgIHRyYW5zbGF0aW9uIGlzIG5lZWRlZC4gIEluc3RlYWQgdGhlIHN0cmluZyBpdHNlbGYgaXMgdGhlIHJlc3VsdC4gICovCisjZGVmaW5lIGdldHRleHRfbm9vcChTdHIpIChTdHIpCisKKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CisgICBMQ19NRVNTQUdFUyBsb2NhbGUuICBJZiBub3QgZm91bmQsIHJldHVybnMgTVNHSUQgaXRzZWxmICh0aGUgZGVmYXVsdAorICAgdGV4dCkuICAqLworZXh0ZXJuIGNoYXIgKmdldHRleHQgUEFSQU1TICgoY29uc3QgY2hhciAqX19tc2dpZCkpOworZXh0ZXJuIGNoYXIgKmdldHRleHRfXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX21zZ2lkKSk7CisKKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgKi8KK2V4dGVybiBjaGFyICpkZ2V0dGV4dCBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpKTsKK2V4dGVybiBjaGFyICpkZ2V0dGV4dF9fIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCQkgY29uc3QgY2hhciAqX19tc2dpZCkpOworCisvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQgQ0FURUdPUlkKKyAgIGxvY2FsZS4gICovCitleHRlcm4gY2hhciAqZGNnZXR0ZXh0IFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKwkJCQlpbnQgX19jYXRlZ29yeSkpOworZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dF9fIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCQkgIGNvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KSk7CisKKworLyogU2V0IHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIHRvIERPTUFJTk5BTUUuCisgICBJZiBET01BSU5OQU1FIGlzIG51bGwsIHJldHVybiB0aGUgY3VycmVudCBkZWZhdWx0LgorICAgSWYgRE9NQUlOTkFNRSBpcyAiIiwgcmVzZXQgdG8gdGhlIGRlZmF1bHQgb2YgIm1lc3NhZ2VzIi4gICovCitleHRlcm4gY2hhciAqdGV4dGRvbWFpbiBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpKTsKK2V4dGVybiBjaGFyICp0ZXh0ZG9tYWluX18gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lKSk7CisKKy8qIFNwZWNpZnkgdGhhdCB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgd2lsbCBiZSBmb3VuZAorICAgaW4gRElSTkFNRSByYXRoZXIgdGhhbiBpbiB0aGUgc3lzdGVtIGxvY2FsZSBkYXRhIGJhc2UuICAqLworZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0ZG9tYWluIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCQkgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSkpOworZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0ZG9tYWluX18gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorCQkJCSAgICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpKTsKKworI2lmIEVOQUJMRV9OTFMKKworLyogU29sYXJpcyAyLjMgaGFzIHRoZSBnZXR0ZXh0IGZ1bmN0aW9uIGJ1dCBkY2dldHRleHQgaXMgbWlzc2luZy4KKyAgIFNvIHdlIG9taXQgdGhpcyBvcHRpbWl6YXRpb24gZm9yIFNvbGFyaXMgMi4zLiAgQlRXLCBTb2xhcmlzIDIuNAorICAgaGFzIGRjZ2V0dGV4dC4gICovCisjIGlmICFIQVZFX0NBVEdFVFMgJiYgKCFIQVZFX0dFVFRFWFQgfHwgSEFWRV9EQ0dFVFRFWFQpCisKKyMgIGRlZmluZSBnZXR0ZXh0KE1zZ2lkKQkJCQkJCSAgICAgIFwKKyAgICAgZGdldHRleHQgKE5VTEwsIE1zZ2lkKQorCisjICBkZWZpbmUgZGdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQpCQkJCQkgICAgICBcCisgICAgIGRjZ2V0dGV4dCAoRG9tYWlubmFtZSwgTXNnaWQsIExDX01FU1NBR0VTKQorCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gNworLyogVGhpcyBnbG9iYWwgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiBsb2FkbXNnY2F0LmMuICBXZSBuZWVkIGEgc2lnbiwKKyAgIHdoZXRoZXIgYSBuZXcgY2F0YWxvZyB3YXMgbG9hZGVkLCB3aGljaCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGFsbAorICAgdHJhbnNsYXRpb25zLiAgKi8KK2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKKworIyAgIGRlZmluZSBkY2dldHRleHQoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KQkJCSAgICAgIFwKKyAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgIGNoYXIgKl9fcmVzdWx0OwkJCQkJCQkgICAgICBcCisgICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoTXNnaWQpKQkJCQkJICAgICAgXAorICAgICAgIHsJCQkJCQkJCSAgICAgIFwKKwkgc3RhdGljIGNoYXIgKl9fdHJhbnNsYXRpb25fXzsJCQkJCSAgICAgIFwKKwkgc3RhdGljIGludCBfX2NhdGFsb2dfY291bnRlcl9fOwkJCQkgICAgICBcCisJIGlmICghIF9fdHJhbnNsYXRpb25fXyB8fCBfX2NhdGFsb2dfY291bnRlcl9fICE9IF9ubF9tc2dfY2F0X2NudHIpICAgIFwKKwkgICB7CQkJCQkJCQkgICAgICBcCisJICAgICBfX3RyYW5zbGF0aW9uX18gPQkJCQkJCSAgICAgIFwKKwkgICAgICAgZGNnZXR0ZXh0X18gKERvbWFpbm5hbWUsIE1zZ2lkLCBDYXRlZ29yeSk7CQkgICAgICBcCisJICAgICBfX2NhdGFsb2dfY291bnRlcl9fID0gX25sX21zZ19jYXRfY250cjsJCQkgICAgICBcCisJICAgfQkJCQkJCQkJICAgICAgXAorCSBfX3Jlc3VsdCA9IF9fdHJhbnNsYXRpb25fXzsJCQkJCSAgICAgIFwKKyAgICAgICB9CQkJCQkJCQkgICAgICBcCisgICAgIGVsc2UJCQkJCQkJCSAgICAgIFwKKyAgICAgICBfX3Jlc3VsdCA9IGRjZ2V0dGV4dF9fIChEb21haW5uYW1lLCBNc2dpZCwgQ2F0ZWdvcnkpOwkJICAgICAgXAorICAgICBfX3Jlc3VsdDsJCQkJCQkJCSAgICAgIFwKKyAgICB9KSkKKyMgIGVuZGlmCisjIGVuZGlmCisKKyNlbHNlCisKKyMgZGVmaW5lIGdldHRleHQoTXNnaWQpIChNc2dpZCkKKyMgZGVmaW5lIGRnZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2lkKSAoTXNnaWQpCisjIGRlZmluZSBkY2dldHRleHQoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KSAoTXNnaWQpCisjIGRlZmluZSB0ZXh0ZG9tYWluKERvbWFpbm5hbWUpICgoY2hhciAqKSBEb21haW5uYW1lKQorIyBkZWZpbmUgYmluZHRleHRkb21haW4oRG9tYWlubmFtZSwgRGlybmFtZSkgKChjaGFyICopIERpcm5hbWUpCisKKyNlbmRpZgorCisvKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbnRsL2xpYmdudWludGwuaC5pbiBiL2ludGwvbGliZ251aW50bC5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZTdlYjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL2xpYmdudWludGwuaC5pbgpAQCAtMCwwICsxLDM4MyBAQAorLyogTWVzc2FnZSBjYXRhbG9ncyBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmbmRlZiBfTElCSU5UTF9ICisjZGVmaW5lIF9MSUJJTlRMX0gJMQorCisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKy8qIFRoZSBMQ19NRVNTQUdFUyBsb2NhbGUgY2F0ZWdvcnkgaXMgdGhlIGNhdGVnb3J5IHVzZWQgYnkgdGhlIGZ1bmN0aW9ucworICAgZ2V0dGV4dCgpIGFuZCBkZ2V0dGV4dCgpLiAgSXQgaXMgc3BlY2lmaWVkIGluIFBPU0lYLCBidXQgbm90IGluIEFOU0kgQy4KKyAgIE9uIHN5c3RlbXMgdGhhdCBkb24ndCBkZWZpbmUgaXQsIHVzZSBhbiBhcmJpdHJhcnkgdmFsdWUgaW5zdGVhZC4KKyAgIE9uIFNvbGFyaXMsIDxsb2NhbGUuaD4gZGVmaW5lcyBfX0xPQ0FMRV9IIChvciBfTE9DQUxFX0ggaW4gU29sYXJpcyAyLjUpCisgICB0aGVuIGluY2x1ZGVzIDxsaWJpbnRsLmg+IChpLmUuIHRoaXMgZmlsZSEpIGFuZCB0aGVuIG9ubHkgZGVmaW5lcworICAgTENfTUVTU0FHRVMuICBUbyBhdm9pZCBhIHJlZGVmaW5pdGlvbiB3YXJuaW5nLCBkb24ndCBkZWZpbmUgTENfTUVTU0FHRVMKKyAgIGluIHRoaXMgY2FzZS4gICovCisjaWYgIWRlZmluZWQgTENfTUVTU0FHRVMgJiYgIShkZWZpbmVkIF9fTE9DQUxFX0ggfHwgKGRlZmluZWQgX0xPQ0FMRV9IICYmIGRlZmluZWQgX19zdW4pKQorIyBkZWZpbmUgTENfTUVTU0FHRVMgMTcyOQorI2VuZGlmCisKKy8qIFdlIGRlZmluZSBhbiBhZGRpdGlvbmFsIHN5bWJvbCB0byBzaWduYWwgdGhhdCB3ZSB1c2UgdGhlIEdOVQorICAgaW1wbGVtZW50YXRpb24gb2YgZ2V0dGV4dC4gICovCisjZGVmaW5lIF9fVVNFX0dOVV9HRVRURVhUIDEKKworLyogUHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3VwcG9ydGVkIGZpbGUgZm9ybWF0cy4gIFJldHVybnMgdGhlCisgICBtYXhpbXVtIG1pbm9yIHJldmlzaW9uIG51bWJlciBzdXBwb3J0ZWQgZm9yIGEgZ2l2ZW4gbWFqb3IgcmV2aXNpb24uICAqLworI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgXAorICAoKG1ham9yKSA9PSAwID8gMSA6IC0xKQorCisvKiBSZXNvbHZlIGEgcGxhdGZvcm0gc3BlY2lmaWMgY29uZmxpY3Qgb24gREpHUFAuICBHTlUgZ2V0dGV4dCB0YWtlcworICAgcHJlY2VkZW5jZSBvdmVyIF9jb25pb19nZXR0ZXh0LiAgKi8KKyNpZmRlZiBfX0RKR1BQX18KKyMgdW5kZWYgZ2V0dGV4dAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisvKiBXZSByZWRpcmVjdCB0aGUgZnVuY3Rpb25zIHRvIHRob3NlIHByZWZpeGVkIHdpdGggImxpYmludGxfIi4gIFRoaXMgaXMKKyAgIG5lY2Vzc2FyeSwgYmVjYXVzZSBzb21lIHN5c3RlbXMgZGVmaW5lIGdldHRleHQvdGV4dGRvbWFpbi8uLi4gaW4gdGhlIEMKKyAgIGxpYnJhcnkgKG5hbWVseSwgU29sYXJpcyAyLjQgYW5kIG5ld2VyLCBhbmQgR05VIGxpYmMgMi4wIGFuZCBuZXdlcikuCisgICBJZiB3ZSB1c2VkIHRoZSB1bnByZWZpeGVkIG5hbWVzLCB0aGVyZSB3b3VsZCBiZSBjYXNlcyB3aGVyZSB0aGUKKyAgIGRlZmluaXRpb24gaW4gdGhlIEMgbGlicmFyeSB3b3VsZCBvdmVycmlkZSB0aGUgb25lIGluIHRoZSBsaWJpbnRsLnNvCisgICBzaGFyZWQgbGlicmFyeS4gIFJlY2FsbCB0aGF0IG9uIEVMRiBzeXN0ZW1zLCB0aGUgc3ltYm9scyBhcmUgbG9va2VkCisgICB1cCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorICAgICAxLiBpbiB0aGUgZXhlY3V0YWJsZSwKKyAgICAgMi4gaW4gdGhlIHNoYXJlZCBsaWJyYXJpZXMgc3BlY2lmaWVkIG9uIHRoZSBsaW5rIGNvbW1hbmQgbGluZSwgaW4gb3JkZXIsCisgICAgIDMuIGluIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJpZXMgc3BlY2lmaWVkIG9uIHRoZSBsaW5rCisgICAgICAgIGNvbW1hbmQgbGluZSwKKyAgICAgNC4gaW4gdGhlIGRsb3BlbigpZWQgc2hhcmVkIGxpYnJhcmllcywgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZQorICAgICAgICBkbG9wZW4oKWVkLgorICAgVGhlIGRlZmluaXRpb24gaW4gdGhlIEMgbGlicmFyeSB3b3VsZCBvdmVycmlkZSB0aGUgb25lIGluIGxpYmludGwuc28gaWYKKyAgIGVpdGhlcgorICAgICAqIC1sYyBpcyBnaXZlbiBvbiB0aGUgbGluayBjb21tYW5kIGxpbmUgYW5kIC1saW50bCBpc24ndCwgb3IKKyAgICAgKiAtbGMgaXMgZ2l2ZW4gb24gdGhlIGxpbmsgY29tbWFuZCBsaW5lIGJlZm9yZSAtbGludGwsIG9yCisgICAgICogbGliaW50bC5zbyBpcyBhIGRlcGVuZGVuY3kgb2YgYSBkbG9wZW4oKWVkIHNoYXJlZCBsaWJyYXJ5IGJ1dCBub3QKKyAgICAgICBsaW5rZWQgdG8gdGhlIGV4ZWN1dGFibGUgYXQgbGluayB0aW1lLgorICAgU2luY2UgU29sYXJpcyBnZXR0ZXh0KCkgYmVoYXZlcyBkaWZmZXJlbnRseSB0aGFuIEdOVSBnZXR0ZXh0KCksIHRoaXMKKyAgIHdvdWxkIGJlIHVuYWNjZXB0YWJsZS4KKworICAgVGhlIHJlZGlyZWN0aW9uIGhhcHBlbnMgYnkgZGVmYXVsdCB0aHJvdWdoIG1hY3JvcyBpbiBDLCBzbyB0aGF0ICZnZXR0ZXh0CisgICBpcyBpbmRlcGVuZGVudCBvZiB0aGUgY29tcGlsYXRpb24gdW5pdCwgYnV0IHRocm91Z2ggaW5saW5lIGZ1bmN0aW9ucyBpbgorICAgQysrLCBpbiBvcmRlciBub3QgdG8gaW50ZXJmZXJlIHdpdGggdGhlIG5hbWUgbWFuZ2xpbmcgb2YgY2xhc3MgZmllbGRzIG9yCisgICBjbGFzcyBtZXRob2RzIGNhbGxlZCAnZ2V0dGV4dCcuICAqLworCisvKiBUaGUgdXNlciBjYW4gZGVmaW5lIF9JTlRMX1JFRElSRUNUX0lOTElORSBvciBfSU5UTF9SRURJUkVDVF9NQUNST1MuCisgICBJZiBoZSBkb2Vzbid0LCB3ZSBjaG9vc2UgdGhlIG1ldGhvZC4gIEEgdGhpcmQgcG9zc2libGUgbWV0aG9kIGlzCisgICBfSU5UTF9SRURJUkVDVF9BU00sIHN1cHBvcnRlZCBvbmx5IGJ5IEdDQy4gICovCisjaWYgIShkZWZpbmVkIF9JTlRMX1JFRElSRUNUX0lOTElORSB8fCBkZWZpbmVkIF9JTlRMX1JFRElSRUNUX01BQ1JPUykKKyMgaWYgX19HTlVDX18gPj0gMiAmJiAhZGVmaW5lZCBfX0FQUExFX0NDX18gJiYgIWRlZmluZWQgX19NSU5HVzMyX18gJiYgIShfX0dOVUNfXyA9PSAyICYmIGRlZmluZWQgX0FJWCkgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cykKKyMgIGRlZmluZSBfSU5UTF9SRURJUkVDVF9BU00KKyMgZWxzZQorIyAgaWZkZWYgX19jcGx1c3BsdXMKKyMgICBkZWZpbmUgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisjICBlbHNlCisjICAgZGVmaW5lIF9JTlRMX1JFRElSRUNUX01BQ1JPUworIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorLyogQXV4aWxpYXJ5IG1hY3Jvcy4gICovCisjaWZkZWYgX0lOVExfUkVESVJFQ1RfQVNNCisjIGRlZmluZSBfSU5UTF9BU00oY25hbWUpIF9fYXNtX18gKF9JTlRMX0FTTU5BTUUgKF9fVVNFUl9MQUJFTF9QUkVGSVhfXywgI2NuYW1lKSkKKyMgZGVmaW5lIF9JTlRMX0FTTU5BTUUocHJlZml4LGNuYW1lc3RyaW5nKSBfSU5UTF9TVFJJTkdJRlkgKHByZWZpeCkgY25hbWVzdHJpbmcKKyMgZGVmaW5lIF9JTlRMX1NUUklOR0lGWShwcmVmaXgpICNwcmVmaXgKKyNlbHNlCisjIGRlZmluZSBfSU5UTF9BU00oY25hbWUpCisjZW5kaWYKKworLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKyAgIExDX01FU1NBR0VTIGxvY2FsZS4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBNU0dJRCBpdHNlbGYgKHRoZSBkZWZhdWx0CisgICB0ZXh0KS4gICovCisjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCitleHRlcm4gY2hhciAqbGliaW50bF9nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkKTsKK3N0YXRpYyBpbmxpbmUgY2hhciAqZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZCkKK3sKKyAgcmV0dXJuIGxpYmludGxfZ2V0dGV4dCAoX19tc2dpZCk7Cit9CisjZWxzZQorI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworIyBkZWZpbmUgZ2V0dGV4dCBsaWJpbnRsX2dldHRleHQKKyNlbmRpZgorZXh0ZXJuIGNoYXIgKmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpCisgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2dldHRleHQpOworI2VuZGlmCisKKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgKi8KKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKK2V4dGVybiBjaGFyICpsaWJpbnRsX2RnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpOworc3RhdGljIGlubGluZSBjaGFyICpkZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKQoreworICByZXR1cm4gbGliaW50bF9kZ2V0dGV4dCAoX19kb21haW5uYW1lLCBfX21zZ2lkKTsKK30KKyNlbHNlCisjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisjIGRlZmluZSBkZ2V0dGV4dCBsaWJpbnRsX2RnZXR0ZXh0CisjZW5kaWYKK2V4dGVybiBjaGFyICpkZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKQorICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9kZ2V0dGV4dCk7CisjZW5kaWYKKworLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50IENBVEVHT1JZCisgICBsb2NhbGUuICAqLworI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorZXh0ZXJuIGNoYXIgKmxpYmludGxfZGNnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCisJCQkJaW50IF9fY2F0ZWdvcnkpOworc3RhdGljIGlubGluZSBjaGFyICpkY2dldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKwkJCSAgICAgICBpbnQgX19jYXRlZ29yeSkKK3sKKyAgcmV0dXJuIGxpYmludGxfZGNnZXR0ZXh0IChfX2RvbWFpbm5hbWUsIF9fbXNnaWQsIF9fY2F0ZWdvcnkpOworfQorI2Vsc2UKKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKyMgZGVmaW5lIGRjZ2V0dGV4dCBsaWJpbnRsX2RjZ2V0dGV4dAorI2VuZGlmCitleHRlcm4gY2hhciAqZGNnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCisJCQlpbnQgX19jYXRlZ29yeSkKKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfZGNnZXR0ZXh0KTsKKyNlbmRpZgorCisKKy8qIFNpbWlsYXIgdG8gYGdldHRleHQnIGJ1dCBzZWxlY3QgdGhlIHBsdXJhbCBmb3JtIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICBudW1iZXIgTi4gICovCisjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCitleHRlcm4gY2hhciAqbGliaW50bF9uZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbik7CitzdGF0aWMgaW5saW5lIGNoYXIgKm5nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCit7CisgIHJldHVybiBsaWJpbnRsX25nZXR0ZXh0IChfX21zZ2lkMSwgX19tc2dpZDIsIF9fbik7Cit9CisjZWxzZQorI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworIyBkZWZpbmUgbmdldHRleHQgbGliaW50bF9uZ2V0dGV4dAorI2VuZGlmCitleHRlcm4gY2hhciAqbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfbmdldHRleHQpOworI2VuZGlmCisKKy8qIFNpbWlsYXIgdG8gYGRnZXR0ZXh0JyBidXQgc2VsZWN0IHRoZSBwbHVyYWwgZm9ybSBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgbnVtYmVyIE4uICAqLworI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorZXh0ZXJuIGNoYXIgKmxpYmludGxfZG5nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQxLAorCQkJCWNvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24pOworc3RhdGljIGlubGluZSBjaGFyICpkbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZDEsCisJCQkgICAgICAgY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKK3sKKyAgcmV0dXJuIGxpYmludGxfZG5nZXR0ZXh0IChfX2RvbWFpbm5hbWUsIF9fbXNnaWQxLCBfX21zZ2lkMiwgX19uKTsKK30KKyNlbHNlCisjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisjIGRlZmluZSBkbmdldHRleHQgbGliaW50bF9kbmdldHRleHQKKyNlbmRpZgorZXh0ZXJuIGNoYXIgKmRuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorCQkJY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorCQkJdW5zaWduZWQgbG9uZyBpbnQgX19uKQorICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9kbmdldHRleHQpOworI2VuZGlmCisKKy8qIFNpbWlsYXIgdG8gYGRjZ2V0dGV4dCcgYnV0IHNlbGVjdCB0aGUgcGx1cmFsIGZvcm0gY29ycmVzcG9uZGluZyB0byB0aGUKKyAgIG51bWJlciBOLiAgKi8KKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKK2V4dGVybiBjaGFyICpsaWJpbnRsX2RjbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCQkgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorCQkJCSB1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KTsKK3N0YXRpYyBpbmxpbmUgY2hhciAqZGNuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorCQkJCWNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKwkJCQl1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KQoreworICByZXR1cm4gbGliaW50bF9kY25nZXR0ZXh0IChfX2RvbWFpbm5hbWUsIF9fbXNnaWQxLCBfX21zZ2lkMiwgX19uLCBfX2NhdGVnb3J5KTsKK30KKyNlbHNlCisjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisjIGRlZmluZSBkY25nZXR0ZXh0IGxpYmludGxfZGNuZ2V0dGV4dAorI2VuZGlmCitleHRlcm4gY2hhciAqZGNuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorCQkJIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKwkJCSB1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KQorICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9kY25nZXR0ZXh0KTsKKyNlbmRpZgorCisKKy8qIFNldCB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyB0byBET01BSU5OQU1FLgorICAgSWYgRE9NQUlOTkFNRSBpcyBudWxsLCByZXR1cm4gdGhlIGN1cnJlbnQgZGVmYXVsdC4KKyAgIElmIERPTUFJTk5BTUUgaXMgIiIsIHJlc2V0IHRvIHRoZSBkZWZhdWx0IG9mICJtZXNzYWdlcyIuICAqLworI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorZXh0ZXJuIGNoYXIgKmxpYmludGxfdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lKTsKK3N0YXRpYyBpbmxpbmUgY2hhciAqdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lKQoreworICByZXR1cm4gbGliaW50bF90ZXh0ZG9tYWluIChfX2RvbWFpbm5hbWUpOworfQorI2Vsc2UKKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKyMgZGVmaW5lIHRleHRkb21haW4gbGliaW50bF90ZXh0ZG9tYWluCisjZW5kaWYKK2V4dGVybiBjaGFyICp0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpCisgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX3RleHRkb21haW4pOworI2VuZGlmCisKKy8qIFNwZWNpZnkgdGhhdCB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgd2lsbCBiZSBmb3VuZAorICAgaW4gRElSTkFNRSByYXRoZXIgdGhhbiBpbiB0aGUgc3lzdGVtIGxvY2FsZSBkYXRhIGJhc2UuICAqLworI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorZXh0ZXJuIGNoYXIgKmxpYmludGxfYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSk7CitzdGF0aWMgaW5saW5lIGNoYXIgKmJpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisJCQkJICAgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSkKK3sKKyAgcmV0dXJuIGxpYmludGxfYmluZHRleHRkb21haW4gKF9fZG9tYWlubmFtZSwgX19kaXJuYW1lKTsKK30KKyNlbHNlCisjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisjIGRlZmluZSBiaW5kdGV4dGRvbWFpbiBsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluCisjZW5kaWYKK2V4dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX2Rpcm5hbWUpCisgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluKTsKKyNlbmRpZgorCisvKiBTcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgaW4gd2hpY2ggdGhlIG1lc3NhZ2VzIGZyb20gdGhlCisgICBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIHJldHVybmVkLiAgKi8KKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKK2V4dGVybiBjaGFyICpsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKl9fY29kZXNldCk7CitzdGF0aWMgaW5saW5lIGNoYXIgKmJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisJCQkJCSAgICAgY29uc3QgY2hhciAqX19jb2Rlc2V0KQoreworICByZXR1cm4gbGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldCAoX19kb21haW5uYW1lLCBfX2NvZGVzZXQpOworfQorI2Vsc2UKKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKyMgZGVmaW5lIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKKyNlbmRpZgorZXh0ZXJuIGNoYXIgKmJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisJCQkJICAgICAgY29uc3QgY2hhciAqX19jb2Rlc2V0KQorICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldCk7CisjZW5kaWYKKworCisvKiBTdXBwb3J0IGZvciBmb3JtYXQgc3RyaW5ncyB3aXRoIHBvc2l0aW9ucyBpbiAqcHJpbnRmKCksIGZvbGxvd2luZyB0aGUKKyAgIFBPU0lYL1hTSSBzcGVjaWZpY2F0aW9uLgorICAgTm90ZTogVGhlc2UgcmVwbGFjZW1lbnRzIGZvciB0aGUgKnByaW50ZigpIGZ1bmN0aW9ucyBhcmUgdmlzaWJsZSBvbmx5CisgICBpbiBzb3VyY2UgZmlsZXMgdGhhdCAjaW5jbHVkZSA8bGliaW50bC5oPiBvciAjaW5jbHVkZSAiZ2V0dGV4dC5oIi4KKyAgIFBhY2thZ2VzIHRoYXQgdXNlICpwcmludGYoKSBpbiBzb3VyY2UgZmlsZXMgdGhhdCBkb24ndCByZWZlciB0byBfKCkKKyAgIG9yIGdldHRleHQoKSBidXQgZm9yIHdoaWNoIHRoZSBmb3JtYXQgc3RyaW5nIGNvdWxkIGJlIHRoZSByZXR1cm4gdmFsdWUKKyAgIG9mIF8oKSBvciBnZXR0ZXh0KCkgbmVlZCB0byBhZGQgdGhpcyAjaW5jbHVkZS4gIE9oIHdlbGwuICAqLworCisjaWYgIUBIQVZFX1BPU0lYX1BSSU5URkAKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIEdldCB2YV9saXN0LiAgKi8KKyNpZiBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIKKyMgaW5jbHVkZSA8c3RkYXJnLmg+CisjZWxzZQorIyBpbmNsdWRlIDx2YXJhcmdzLmg+CisjZW5kaWYKKworI3VuZGVmIGZwcmludGYKKyNkZWZpbmUgZnByaW50ZiBsaWJpbnRsX2ZwcmludGYKK2V4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CisjdW5kZWYgdmZwcmludGYKKyNkZWZpbmUgdmZwcmludGYgbGliaW50bF92ZnByaW50ZgorZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworCisjdW5kZWYgcHJpbnRmCisjZGVmaW5lIHByaW50ZiBsaWJpbnRsX3ByaW50ZgorZXh0ZXJuIGludCBwcmludGYgKGNvbnN0IGNoYXIgKiwgLi4uKTsKKyN1bmRlZiB2cHJpbnRmCisjZGVmaW5lIHZwcmludGYgbGliaW50bF92cHJpbnRmCitleHRlcm4gaW50IHZwcmludGYgKGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisKKyN1bmRlZiBzcHJpbnRmCisjZGVmaW5lIHNwcmludGYgbGliaW50bF9zcHJpbnRmCitleHRlcm4gaW50IHNwcmludGYgKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOworI3VuZGVmIHZzcHJpbnRmCisjZGVmaW5lIHZzcHJpbnRmIGxpYmludGxfdnNwcmludGYKK2V4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKKworI2lmIEBIQVZFX1NOUFJJTlRGQAorCisjdW5kZWYgc25wcmludGYKKyNkZWZpbmUgc25wcmludGYgbGliaW50bF9zbnByaW50ZgorZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKKyN1bmRlZiB2c25wcmludGYKKyNkZWZpbmUgdnNucHJpbnRmIGxpYmludGxfdnNucHJpbnRmCitleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisKKyNlbmRpZgorCisjaWYgQEhBVkVfQVNQUklOVEZACisKKyN1bmRlZiBhc3ByaW50ZgorI2RlZmluZSBhc3ByaW50ZiBsaWJpbnRsX2FzcHJpbnRmCitleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqLCBjb25zdCBjaGFyICosIC4uLik7CisjdW5kZWYgdmFzcHJpbnRmCisjZGVmaW5lIHZhc3ByaW50ZiBsaWJpbnRsX3Zhc3ByaW50ZgorZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisKKyNlbmRpZgorCisjaWYgQEhBVkVfV1BSSU5URkAKKworI3VuZGVmIGZ3cHJpbnRmCisjZGVmaW5lIGZ3cHJpbnRmIGxpYmludGxfZndwcmludGYKK2V4dGVybiBpbnQgZndwcmludGYgKEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOworI3VuZGVmIHZmd3ByaW50ZgorI2RlZmluZSB2ZndwcmludGYgbGliaW50bF92ZndwcmludGYKK2V4dGVybiBpbnQgdmZ3cHJpbnRmIChGSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgdmFfbGlzdCk7CisKKyN1bmRlZiB3cHJpbnRmCisjZGVmaW5lIHdwcmludGYgbGliaW50bF93cHJpbnRmCitleHRlcm4gaW50IHdwcmludGYgKGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKKyN1bmRlZiB2d3ByaW50ZgorI2RlZmluZSB2d3ByaW50ZiBsaWJpbnRsX3Z3cHJpbnRmCitleHRlcm4gaW50IHZ3cHJpbnRmIChjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOworCisjdW5kZWYgc3dwcmludGYKKyNkZWZpbmUgc3dwcmludGYgbGliaW50bF9zd3ByaW50ZgorZXh0ZXJuIGludCBzd3ByaW50ZiAod2NoYXJfdCAqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKKyN1bmRlZiB2c3dwcmludGYKKyNkZWZpbmUgdnN3cHJpbnRmIGxpYmludGxfdnN3cHJpbnRmCitleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJfdCAqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QgKiwgdmFfbGlzdCk7CisKKyNlbmRpZgorCisjZW5kaWYKKworCisvKiBTdXBwb3J0IGZvciByZWxvY2F0YWJsZSBwYWNrYWdlcy4gICovCisKKy8qIFNldHMgdGhlIG9yaWdpbmFsIGFuZCB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4IG9mIHRoZSBwYWNrYWdlLgorICAgUmVsb2NhdGlvbiBzaW1wbHkgcmVwbGFjZXMgYSBwYXRobmFtZSBzdGFydGluZyB3aXRoIHRoZSBvcmlnaW5hbCBwcmVmaXgKKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisgICBwcmVmaXhlcyBzaG91bGQgYmUgZGlyZWN0b3J5IG5hbWVzIHdpdGhvdXQgdHJhaWxpbmcgc2xhc2ggKGkuZS4gdXNlICIiCisgICBpbnN0ZWFkIG9mICIvIikuICAqLworI2RlZmluZSBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeAorZXh0ZXJuIHZvaWQKKyAgICAgICBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXgsCisJCQkJICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXgpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBsaWJpbnRsLmggKi8KZGlmZiAtLWdpdCBhL2ludGwvbG9hZGluZm8uaCBiL2ludGwvbG9hZGluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWU1ZWJkCi0tLSAvZGV2L251bGwKKysrIGIvaW50bC9sb2FkaW5mby5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5Ni4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZm5kZWYgX0xPQURJTkZPX0gKKyNkZWZpbmUgX0xPQURJTkZPX0gJMQorCisvKiBEZWNsYXJhdGlvbnMgb2YgbG9jYWxlIGRlcGVuZGVudCBjYXRhbG9nIGxvb2t1cCBmdW5jdGlvbnMuCisgICBJbXBsZW1lbnRlZCBpbgorCisgICAgIGxvY2FsZWFsaWFzLmMgICAgUG9zc2libHkgcmVwbGFjZSBhIGxvY2FsZSBuYW1lIGJ5IGFub3RoZXIuCisgICAgIGV4cGxvZGVuYW1lLmMgICAgU3BsaXQgYSBsb2NhbGUgbmFtZSBpbnRvIGl0cyB2YXJpb3VzIGZpZWxkcy4KKyAgICAgbDEwbmZsaXN0LmMgICAgICBHZW5lcmF0ZSBhIGxpc3Qgb2YgZmlsZW5hbWVzIG9mIHBvc3NpYmxlIG1lc3NhZ2UgY2F0YWxvZ3MuCisgICAgIGZpbmRkb21haW4uYyAgICAgRmluZCBhbmQgb3BlbiB0aGUgcmVsZXZhbnQgbWVzc2FnZSBjYXRhbG9ncy4KKworICAgVGhlIG1haW4gZnVuY3Rpb24gX25sX2ZpbmRfZG9tYWluKCkgaW4gZmluZGRvbWFpbi5jIGlzIGRlY2xhcmVkCisgICBpbiBnZXR0ZXh0UC5oLgorICovCisKKyNpZm5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisjZW5kaWYKKworLyogVGVsbCB0aGUgY29tcGlsZXIgd2hlbiBhIGNvbmRpdGlvbmFsIG9yIGludGVnZXIgZXhwcmVzc2lvbiBpcworICAgYWxtb3N0IGFsd2F5cyB0cnVlIG9yIGFsbW9zdCBhbHdheXMgZmFsc2UuICAqLworI2lmbmRlZiBIQVZFX0JVSUxUSU5fRVhQRUNUCisjIGRlZmluZSBfX2J1aWx0aW5fZXhwZWN0KGV4cHIsIHZhbCkgKGV4cHIpCisjZW5kaWYKKworLyogU2VwYXJhdG9yIGluIFBBVEggbGlrZSBsaXN0cyBvZiBwYXRobmFtZXMuICAqLworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisjIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOycKKyNlbHNlCisgIC8qIFVuaXggKi8KKyMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc6JworI2VuZGlmCisKKy8qIEVuY29kaW5nIG9mIGxvY2FsZSBuYW1lIHBhcnRzLiAgKi8KKyNkZWZpbmUgQ0VOX1JFVklTSU9OCQkxCisjZGVmaW5lIENFTl9TUE9OU09SCQkyCisjZGVmaW5lIENFTl9TUEVDSUFMCQk0CisjZGVmaW5lIFhQR19OT1JNX0NPREVTRVQJOAorI2RlZmluZSBYUEdfQ09ERVNFVAkJMTYKKyNkZWZpbmUgVEVSUklUT1JZCQkzMgorI2RlZmluZSBDRU5fQVVESUVOQ0UJCTY0CisjZGVmaW5lIFhQR19NT0RJRklFUgkJMTI4CisKKyNkZWZpbmUgQ0VOX1NQRUNJRklDCShDRU5fUkVWSVNJT058Q0VOX1NQT05TT1J8Q0VOX1NQRUNJQUx8Q0VOX0FVRElFTkNFKQorI2RlZmluZSBYUEdfU1BFQ0lGSUMJKFhQR19DT0RFU0VUfFhQR19OT1JNX0NPREVTRVR8WFBHX01PRElGSUVSKQorCisKK3N0cnVjdCBsb2FkZWRfbDEwbmZpbGUKK3sKKyAgY29uc3QgY2hhciAqZmlsZW5hbWU7CisgIGludCBkZWNpZGVkOworCisgIGNvbnN0IHZvaWQgKmRhdGE7CisKKyAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqbmV4dDsKKyAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqc3VjY2Vzc29yWzFdOworfTsKKworCisvKiBOb3JtYWxpemUgY29kZXNldCBuYW1lLiAgVGhlcmUgaXMgbm8gc3RhbmRhcmQgZm9yIHRoZSBjb2Rlc2V0CisgICBuYW1lcy4gIE5vcm1hbGl6YXRpb24gYWxsb3dzIHRoZSB1c2VyIHRvIHVzZSBhbnkgb2YgdGhlIGNvbW1vbgorICAgbmFtZXMuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgaGFzIHRvIGJlCisgICBmcmVlZCBieSB0aGUgY2FsbGVyLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyICpfbmxfbm9ybWFsaXplX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmNvZGVzZXQsCisJCQkJCSAgc2l6ZV90IG5hbWVfbGVuKTsKKworLyogTG9va3VwIGEgbG9jYWxlIGRlcGVuZGVudCBmaWxlLgorICAgKkwxME5GSUxFX0xJU1QgZGVub3RlcyBhIHBvb2wgb2YgbG9va3VwIHJlc3VsdHMgb2YgbG9jYWxlIGRlcGVuZGVudAorICAgZmlsZXMgb2YgdGhlIHNhbWUga2luZCwgc29ydGVkIGluIGRlY3JlYXNpbmcgb3JkZXIgb2YgLT5maWxlbmFtZS4KKyAgIERJUkxJU1QgYW5kIERJUkxJU1RfTEVOIGFyZSBhbiBhcmd6IGxpc3Qgb2YgZGlyZWN0b3JpZXMgaW4gd2hpY2ggdG8KKyAgIGxvb2ssIGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIGRpcmVjdG9yeSAoaS5lLiBESVJMSVNUX0xFTiA+IDApLgorICAgTUFTSywgTEFOR1VBR0UsIFRFUlJJVE9SWSwgQ09ERVNFVCwgTk9STUFMSVpFRF9DT0RFU0VULCBNT0RJRklFUiwKKyAgIFNQRUNJQUwsIFNQT05TT1IsIFJFVklTSU9OIGFyZSB0aGUgcGllY2VzIG9mIHRoZSBsb2NhbGUgbmFtZSwgYXMKKyAgIHByb2R1Y2VkIGJ5IF9ubF9leHBsb2RlX25hbWUoKS4gIEZJTEVOQU1FIGlzIHRoZSBmaWxlbmFtZSBzdWZmaXguCisgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBsb29rdXAgcmVzdWx0LCBlaXRoZXIgZm91bmQgaW4gKkwxME5GSUxFX0xJU1QsCisgICBvciAtIGlmIERPX0FMTE9DQVRFIGlzIG5vbnplcm8gLSBmcmVzaGx5IGFsbG9jYXRlZCwgb3IgcG9zc2libHkgTlVMTC4KKyAgIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbm9uLU5VTEwsIGl0IGlzIGFkZGVkIHRvICpMMTBORklMRV9MSVNULCBhbmQKKyAgIGl0cyAtPm5leHQgZmllbGQgZGVub3RlcyB0aGUgY2hhaW5pbmcgaW5zaWRlICpMMTBORklMRV9MSVNULCBhbmQKKyAgIGZ1cnRoZXJtb3JlIGl0cyAtPnN1Y2Nlc3NvcltdIGZpZWxkIGNvbnRhaW5zIGEgbGlzdCBvZiBvdGhlciBsb29rdXAKKyAgIHJlc3VsdHMgZnJvbSB3aGljaCB0aGlzIGxvb2t1cCByZXN1bHQgaW5oZXJpdHMuICAqLworZXh0ZXJuIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorX25sX21ha2VfbDEwbmZsaXN0IChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoqbDEwbmZpbGVfbGlzdCwKKwkJICAgIGNvbnN0IGNoYXIgKmRpcmxpc3QsIHNpemVfdCBkaXJsaXN0X2xlbiwgaW50IG1hc2ssCisJCSAgICBjb25zdCBjaGFyICpsYW5ndWFnZSwgY29uc3QgY2hhciAqdGVycml0b3J5LAorCQkgICAgY29uc3QgY2hhciAqY29kZXNldCwgY29uc3QgY2hhciAqbm9ybWFsaXplZF9jb2Rlc2V0LAorCQkgICAgY29uc3QgY2hhciAqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKnNwZWNpYWwsCisJCSAgICBjb25zdCBjaGFyICpzcG9uc29yLCBjb25zdCBjaGFyICpyZXZpc2lvbiwKKwkJICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZG9fYWxsb2NhdGUpOworCisvKiBMb29rdXAgdGhlIHJlYWwgbG9jYWxlIG5hbWUgZm9yIGEgbG9jYWxlIGFsaWFzIE5BTUUsIG9yIE5VTEwgaWYKKyAgIE5BTUUgaXMgbm90IGEgbG9jYWxlIGFsaWFzIChidXQgcG9zc2libHkgYSByZWFsIGxvY2FsZSBuYW1lKS4KKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIG11c3Qgbm90IGJlIGZyZWVkLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICpuYW1lKTsKKworLyogU3BsaXQgYSBsb2NhbGUgbmFtZSBOQU1FIGludG8gaXRzIHBpZWNlczogbGFuZ3VhZ2UsIG1vZGlmaWVyLAorICAgdGVycml0b3J5LCBjb2Rlc2V0LCBzcGVjaWFsLCBzcG9uc29yLCByZXZpc2lvbi4KKyAgIE5BTUUgZ2V0cyBkZXN0cnVjdGl2ZWx5IG1vZGlmaWVkOiBOVUwgYnl0ZXMgYXJlIGluc2VydGVkIGhlcmUgYW5kCisgICB0aGVyZS4gICpMQU5HVUFHRSBnZXRzIGFzc2lnbmVkIE5BTUUuICBFYWNoIG9mICpNT0RJRklFUiwgKlRFUlJJVE9SWSwKKyAgICpDT0RFU0VULCAqU1BFQ0lBTCwgKlNQT05TT1IsICpSRVZJU0lPTiBnZXRzIGFzc2lnbmVkIGVpdGhlciBhCisgICBwb2ludGVyIGludG8gdGhlIG9sZCBOQU1FIHN0cmluZywgb3IgTlVMTC4gICpOT1JNQUxJWkVEX0NPREVTRVQKKyAgIGdldHMgYXNzaWduZWQgdGhlIGV4cGFuZGVkICpDT0RFU0VULCBpZiBpdCBpcyBkaWZmZXJlbnQgZnJvbSAqQ09ERVNFVDsKKyAgIHRoaXMgb25lIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgaGFzIHRvIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuCisgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYml0bWFzaywgd2hlcmUgZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gb25lCisgICBmaWxsZWQtaW4gdmFsdWU6CisgICAgIFhQR19NT0RJRklFUiwgQ0VOX0FVRElFTkNFICBmb3IgKk1PRElGSUVSLAorICAgICBURVJSSVRPUlkgICAgICAgICAgICAgICAgICAgZm9yICpURVJSSVRPUlksCisgICAgIFhQR19DT0RFU0VUICAgICAgICAgICAgICAgICBmb3IgKkNPREVTRVQsCisgICAgIFhQR19OT1JNX0NPREVTRVQgICAgICAgICAgICBmb3IgKk5PUk1BTElaRURfQ09ERVNFVCwKKyAgICAgQ0VOX1NQRUNJQUwgICAgICAgICAgICAgICAgIGZvciAqU1BFQ0lBTCwKKyAgICAgQ0VOX1NQT05TT1IgICAgICAgICAgICAgICAgIGZvciAqU1BPTlNPUiwKKyAgICAgQ0VOX1JFVklTSU9OICAgICAgICAgICAgICAgIGZvciAqUkVWSVNJT04uCisgKi8KK2V4dGVybiBpbnQgX25sX2V4cGxvZGVfbmFtZSAoY2hhciAqbmFtZSwgY29uc3QgY2hhciAqKmxhbmd1YWdlLAorCQkJICAgICBjb25zdCBjaGFyICoqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKip0ZXJyaXRvcnksCisJCQkgICAgIGNvbnN0IGNoYXIgKipjb2Rlc2V0LAorCQkJICAgICBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9jb2Rlc2V0LAorCQkJICAgICBjb25zdCBjaGFyICoqc3BlY2lhbCwgY29uc3QgY2hhciAqKnNwb25zb3IsCisJCQkgICAgIGNvbnN0IGNoYXIgKipyZXZpc2lvbik7CisKKy8qIFNwbGl0IGEgbG9jYWxlIG5hbWUgTkFNRSBpbnRvIGEgbGVhZGluZyBsYW5ndWFnZSBwYXJ0IGFuZCBhbGwgdGhlCisgICByZXN0LiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBsYW5ndWFnZSwKKyAgIGkuZS4gdG8gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJlc3QuICAqLworZXh0ZXJuIGNoYXIgKl9ubF9maW5kX2xhbmd1YWdlIChjb25zdCBjaGFyICpuYW1lKTsKKworI2VuZGlmCS8qIGxvYWRpbmZvLmggKi8KZGlmZiAtLWdpdCBhL2ludGwvbG9hZG1zZ2NhdC5jIGIvaW50bC9sb2FkbXNnY2F0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZhYjcxYQotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvbG9hZG1zZ2NhdC5jCkBAIC0wLDAgKzEsMTQxOCBAQAorLyogTG9hZCBuZWVkZWQgbWVzc2FnZSBjYXRhbG9ncy4KKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisgICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKyAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+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+bW1hcF9zaXplKTsKKyAgZWxzZQorIyBlbmRpZgkvKiBfUE9TSVhfTUFQUEVEX0ZJTEVTICovCisgICAgZnJlZSAoKHZvaWQgKikgZG9tYWluLT5kYXRhKTsKKworICBmcmVlIChkb21haW4pOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbnRsL2xvY2FsY2hhcnNldC5jIGIvaW50bC9sb2NhbGNoYXJzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2UzYTliCi0tLSAvZGV2L251bGwKKysrIGIvaW50bC9sb2NhbGNoYXJzZXQuYwpAQCAtMCwwICsxLDM5NyBAQAorLyogRGV0ZXJtaW5lIGEgY2Fub25pY2FsIG5hbWUgZm9yIHRoZSBjdXJyZW50IGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisvKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgImxvY2FsY2hhcnNldC5oIgorCisjaWYgSEFWRV9TVERERUZfSAorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1NUUklOR19ICisjIGluY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVERMSUJfSAorIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18KKyMgdW5kZWYgV0lOMzIgICAvKiBhdm9pZCB3YXJuaW5nIG9uIG1pbmd3MzIgKi8KKyMgZGVmaW5lIFdJTjMyCisjZW5kaWYKKworI2lmIGRlZmluZWQgX19FTVhfXworLyogQXNzdW1lIEVNWCBwcm9ncmFtIHJ1bnMgb24gT1MvMiwgZXZlbiBpZiBjb21waWxlZCB1bmRlciBET1MuICAqLworIyBkZWZpbmUgT1MyCisjZW5kaWYKKworI2lmICFkZWZpbmVkIFdJTjMyCisjIGlmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorIyAgaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyMgZWxzZQorIyAgaWYgSEFWRV9TRVRMT0NBTEUKKyMgICBpbmNsdWRlIDxsb2NhbGUuaD4KKyMgIGVuZGlmCisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIFdJTjMyCisjIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQgT1MyCisjIGRlZmluZSBJTkNMX0RPUworIyBpbmNsdWRlIDxvczIuaD4KKyNlbmRpZgorCisjaWYgRU5BQkxFX1JFTE9DQVRBQkxFCisjIGluY2x1ZGUgInJlbG9jYXRhYmxlLmgiCisjZWxzZQorIyBkZWZpbmUgcmVsb2NhdGUocGF0aG5hbWUpIChwYXRobmFtZSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisgIC8qIFdpbjMyLCBPUy8yLCBET1MgKi8KKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycgfHwgKEMpID09ICdcXCcpCisjZW5kaWYKKworI2lmbmRlZiBESVJFQ1RPUllfU0VQQVJBVE9SCisjIGRlZmluZSBESVJFQ1RPUllfU0VQQVJBVE9SICcvJworI2VuZGlmCisKKyNpZm5kZWYgSVNTTEFTSAorIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09IERJUkVDVE9SWV9TRVBBUkFUT1IpCisjZW5kaWYKKworI2lmIEhBVkVfREVDTF9HRVRDX1VOTE9DS0VECisjIHVuZGVmIGdldGMKKyMgZGVmaW5lIGdldGMgZ2V0Y191bmxvY2tlZAorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgc3RhdGljIHZhcmlhYmxlIGlzIGRlY2xhcmVkICd2b2xhdGlsZScgdG8gYXZvaWQgYQorICAgcG9zc2libGUgbXVsdGl0aHJlYWQgcHJvYmxlbSBpbiB0aGUgZnVuY3Rpb24gZ2V0X2NoYXJzZXRfYWxpYXNlcy4gSWYgd2UKKyAgIGFyZSBydW5uaW5nIGluIGEgdGhyZWFkZWQgZW52aXJvbm1lbnQsIGFuZCBpZiB0d28gdGhyZWFkcyBpbml0aWFsaXplCisgICAnY2hhcnNldF9hbGlhc2VzJyBzaW11bHRhbmVvdXNseSwgYm90aCB3aWxsIHByb2R1Y2UgdGhlIHNhbWUgdmFsdWUsCisgICBhbmQgZXZlcnl0aGluZyB3aWxsIGJlIG9rIGlmIHRoZSB0d28gYXNzaWdubWVudHMgdG8gJ2NoYXJzZXRfYWxpYXNlcycKKyAgIGFyZSBhdG9taWMuIEJ1dCBJIGRvbid0IGtub3cgd2hhdCB3aWxsIGhhcHBlbiBpZiB0aGUgdHdvIGFzc2lnbm1lbnRzIG1peC4gICovCisjaWYgX19TVERDX18gIT0gMQorIyBkZWZpbmUgdm9sYXRpbGUgLyogZW1wdHkgKi8KKyNlbmRpZgorLyogUG9pbnRlciB0byB0aGUgY29udGVudHMgb2YgdGhlIGNoYXJzZXQuYWxpYXMgZmlsZSwgaWYgaXQgaGFzIGFscmVhZHkgYmVlbgorICAgcmVhZCwgZWxzZSBOVUxMLiAgSXRzIGZvcm1hdCBpczoKKyAgIEFMSUFTXzEgJ1wwJyBDQU5PTklDQUxfMSAnXDAnIC4uLiBBTElBU19uICdcMCcgQ0FOT05JQ0FMX24gJ1wwJyAnXDAnICAqLworc3RhdGljIGNvbnN0IGNoYXIgKiB2b2xhdGlsZSBjaGFyc2V0X2FsaWFzZXM7CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0X2NoYXJzZXRfYWxpYXNlcyAoKQoreworICBjb25zdCBjaGFyICpjcDsKKworICBjcCA9IGNoYXJzZXRfYWxpYXNlczsKKyAgaWYgKGNwID09IE5VTEwpCisgICAgeworI2lmICEoZGVmaW5lZCBWTVMgfHwgZGVmaW5lZCBXSU4zMikKKyAgICAgIEZJTEUgKmZwOworICAgICAgY29uc3QgY2hhciAqZGlyID0gcmVsb2NhdGUgKExJQkRJUik7CisgICAgICBjb25zdCBjaGFyICpiYXNlID0gImNoYXJzZXQuYWxpYXMiOworICAgICAgY2hhciAqZmlsZV9uYW1lOworCisgICAgICAvKiBDb25jYXRlbmF0ZSBkaXIgYW5kIGJhc2UgaW50byBmcmVzaGx5IGFsbG9jYXRlZCBmaWxlX25hbWUuICAqLworICAgICAgeworCXNpemVfdCBkaXJfbGVuID0gc3RybGVuIChkaXIpOworCXNpemVfdCBiYXNlX2xlbiA9IHN0cmxlbiAoYmFzZSk7CisJaW50IGFkZF9zbGFzaCA9IChkaXJfbGVuID4gMCAmJiAhSVNTTEFTSCAoZGlyW2Rpcl9sZW4gLSAxXSkpOworCWZpbGVfbmFtZSA9IChjaGFyICopIG1hbGxvYyAoZGlyX2xlbiArIGFkZF9zbGFzaCArIGJhc2VfbGVuICsgMSk7CisJaWYgKGZpbGVfbmFtZSAhPSBOVUxMKQorCSAgeworCSAgICBtZW1jcHkgKGZpbGVfbmFtZSwgZGlyLCBkaXJfbGVuKTsKKwkgICAgaWYgKGFkZF9zbGFzaCkKKwkgICAgICBmaWxlX25hbWVbZGlyX2xlbl0gPSBESVJFQ1RPUllfU0VQQVJBVE9SOworCSAgICBtZW1jcHkgKGZpbGVfbmFtZSArIGRpcl9sZW4gKyBhZGRfc2xhc2gsIGJhc2UsIGJhc2VfbGVuICsgMSk7CisJICB9CisgICAgICB9CisKKyAgICAgIGlmIChmaWxlX25hbWUgPT0gTlVMTCB8fCAoZnAgPSBmb3BlbiAoZmlsZV9uYW1lLCAiciIpKSA9PSBOVUxMKQorCS8qIE91dCBvZiBtZW1vcnkgb3IgZmlsZSBub3QgZm91bmQsIHRyZWF0IGl0IGFzIGVtcHR5LiAgKi8KKwljcCA9ICIiOworICAgICAgZWxzZQorCXsKKwkgIC8qIFBhcnNlIHRoZSBmaWxlJ3MgY29udGVudHMuICAqLworCSAgaW50IGM7CisJICBjaGFyIGJ1ZjFbNTArMV07CisJICBjaGFyIGJ1ZjJbNTArMV07CisJICBjaGFyICpyZXNfcHRyID0gTlVMTDsKKwkgIHNpemVfdCByZXNfc2l6ZSA9IDA7CisJICBzaXplX3QgbDEsIGwyOworCisJICBmb3IgKDs7KQorCSAgICB7CisJICAgICAgYyA9IGdldGMgKGZwKTsKKwkgICAgICBpZiAoYyA9PSBFT0YpCisJCWJyZWFrOworCSAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnICcgfHwgYyA9PSAnXHQnKQorCQljb250aW51ZTsKKwkgICAgICBpZiAoYyA9PSAnIycpCisJCXsKKwkJICAvKiBTa2lwIGNvbW1lbnQsIHRvIGVuZCBvZiBsaW5lLiAgKi8KKwkJICBkbworCQkgICAgYyA9IGdldGMgKGZwKTsKKwkJICB3aGlsZSAoIShjID09IEVPRiB8fCBjID09ICdcbicpKTsKKwkJICBpZiAoYyA9PSBFT0YpCisJCSAgICBicmVhazsKKwkJICBjb250aW51ZTsKKwkJfQorCSAgICAgIHVuZ2V0YyAoYywgZnApOworCSAgICAgIGlmIChmc2NhbmYgKGZwLCAiJTUwcyAlNTBzIiwgYnVmMSwgYnVmMikgPCAyKQorCQlicmVhazsKKwkgICAgICBsMSA9IHN0cmxlbiAoYnVmMSk7CisJICAgICAgbDIgPSBzdHJsZW4gKGJ1ZjIpOworCSAgICAgIGlmIChyZXNfc2l6ZSA9PSAwKQorCQl7CisJCSAgcmVzX3NpemUgPSBsMSArIDEgKyBsMiArIDE7CisJCSAgcmVzX3B0ciA9IChjaGFyICopIG1hbGxvYyAocmVzX3NpemUgKyAxKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHJlc19zaXplICs9IGwxICsgMSArIGwyICsgMTsKKwkJICByZXNfcHRyID0gKGNoYXIgKikgcmVhbGxvYyAocmVzX3B0ciwgcmVzX3NpemUgKyAxKTsKKwkJfQorCSAgICAgIGlmIChyZXNfcHRyID09IE5VTEwpCisJCXsKKwkJICAvKiBPdXQgb2YgbWVtb3J5LiAqLworCQkgIHJlc19zaXplID0gMDsKKwkJICBicmVhazsKKwkJfQorCSAgICAgIHN0cmNweSAocmVzX3B0ciArIHJlc19zaXplIC0gKGwyICsgMSkgLSAobDEgKyAxKSwgYnVmMSk7CisJICAgICAgc3RyY3B5IChyZXNfcHRyICsgcmVzX3NpemUgLSAobDIgKyAxKSwgYnVmMik7CisJICAgIH0KKwkgIGZjbG9zZSAoZnApOworCSAgaWYgKHJlc19zaXplID09IDApCisJICAgIGNwID0gIiI7CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqKHJlc19wdHIgKyByZXNfc2l6ZSkgPSAnXDAnOworCSAgICAgIGNwID0gcmVzX3B0cjsKKwkgICAgfQorCX0KKworICAgICAgZnJlZSAoZmlsZV9uYW1lKTsKKworI2Vsc2UKKworIyBpZiBkZWZpbmVkIFZNUworICAgICAgLyogVG8gYXZvaWQgdGhlIHRyb3VibGVzIG9mIGFuIGV4dHJhIGZpbGUgY2hhcnNldC5hbGlhc192bXMgaW4gdGhlCisJIHNvdXJjZXMgb2YgbWFueSBHTlUgcGFja2FnZXMsIHNpbXBseSBpbmxpbmUgdGhlIGFsaWFzZXMgaGVyZS4gICovCisgICAgICAvKiBUaGUgbGlzdCBvZiBlbmNvZGluZ3MgaXMgdGFrZW4gZnJvbSB0aGUgT3BlblZNUyA3LjMtMSBkb2N1bWVudGF0aW9uCisJICJDb21wYXEgQyBSdW4tVGltZSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwgZm9yIE9wZW5WTVMgc3lzdGVtcyIKKwkgc2VjdGlvbiAxMC43ICJIYW5kbGluZyBEaWZmZXJlbnQgQ2hhcmFjdGVyIFNldHMiLiAgKi8KKyAgICAgIGNwID0gIklTTzg4NTktMSIgIlwwIiAiSVNPLTg4NTktMSIgIlwwIgorCSAgICJJU084ODU5LTIiICJcMCIgIklTTy04ODU5LTIiICJcMCIKKwkgICAiSVNPODg1OS01IiAiXDAiICJJU08tODg1OS01IiAiXDAiCisJICAgIklTTzg4NTktNyIgIlwwIiAiSVNPLTg4NTktNyIgIlwwIgorCSAgICJJU084ODU5LTgiICJcMCIgIklTTy04ODU5LTgiICJcMCIKKwkgICAiSVNPODg1OS05IiAiXDAiICJJU08tODg1OS05IiAiXDAiCisJICAgLyogSmFwYW5lc2UgKi8KKwkgICAiZXVjSlAiICJcMCIgIkVVQy1KUCIgIlwwIgorCSAgICJTSklTIiAiXDAiICJTSElGVF9KSVMiICJcMCIKKwkgICAiREVDS0FOSkkiICJcMCIgIkRFQy1LQU5KSSIgIlwwIgorCSAgICJTREVDS0FOSkkiICJcMCIgIkVVQy1KUCIgIlwwIgorCSAgIC8qIENoaW5lc2UgKi8KKwkgICAiZXVjVFciICJcMCIgIkVVQy1UVyIgIlwwIgorCSAgICJERUNIQU5ZVSIgIlwwIiAiREVDLUhBTllVIiAiXDAiCisJICAgIkRFQ0hBTlpJIiAiXDAiICJHQjIzMTIiICJcMCIKKwkgICAvKiBLb3JlYW4gKi8KKwkgICAiREVDS09SRUFOIiAiXDAiICJFVUMtS1IiICJcMCI7CisjIGVuZGlmCisKKyMgaWYgZGVmaW5lZCBXSU4zMgorICAgICAgLyogVG8gYXZvaWQgdGhlIHRyb3VibGVzIG9mIGluc3RhbGxpbmcgYSBzZXBhcmF0ZSBmaWxlIGluIHRoZSBzYW1lCisJIGRpcmVjdG9yeSBhcyB0aGUgRExMIGFuZCBvZiByZXRyaWV2aW5nIHRoZSBETEwncyBkaXJlY3RvcnkgYXQKKwkgcnVudGltZSwgc2ltcGx5IGlubGluZSB0aGUgYWxpYXNlcyBoZXJlLiAgKi8KKworICAgICAgY3AgPSAiQ1A5MzYiICJcMCIgIkdCSyIgIlwwIgorCSAgICJDUDEzNjEiICJcMCIgIkpPSEFCIiAiXDAiCisJICAgIkNQMjAxMjciICJcMCIgIkFTQ0lJIiAiXDAiCisJICAgIkNQMjA4NjYiICJcMCIgIktPSTgtUiIgIlwwIgorCSAgICJDUDIxODY2IiAiXDAiICJLT0k4LVJVIiAiXDAiCisJICAgIkNQMjg1OTEiICJcMCIgIklTTy04ODU5LTEiICJcMCIKKwkgICAiQ1AyODU5MiIgIlwwIiAiSVNPLTg4NTktMiIgIlwwIgorCSAgICJDUDI4NTkzIiAiXDAiICJJU08tODg1OS0zIiAiXDAiCisJICAgIkNQMjg1OTQiICJcMCIgIklTTy04ODU5LTQiICJcMCIKKwkgICAiQ1AyODU5NSIgIlwwIiAiSVNPLTg4NTktNSIgIlwwIgorCSAgICJDUDI4NTk2IiAiXDAiICJJU08tODg1OS02IiAiXDAiCisJICAgIkNQMjg1OTciICJcMCIgIklTTy04ODU5LTciICJcMCIKKwkgICAiQ1AyODU5OCIgIlwwIiAiSVNPLTg4NTktOCIgIlwwIgorCSAgICJDUDI4NTk5IiAiXDAiICJJU08tODg1OS05IiAiXDAiCisJICAgIkNQMjg2MDUiICJcMCIgIklTTy04ODU5LTE1IiAiXDAiOworIyBlbmRpZgorI2VuZGlmCisKKyAgICAgIGNoYXJzZXRfYWxpYXNlcyA9IGNwOworICAgIH0KKworICByZXR1cm4gY3A7Cit9CisKKy8qIERldGVybWluZSB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFuZCBjYW5vbmljYWxpemUgaXQKKyAgIGludG8gb25lIG9mIHRoZSBjYW5vbmljYWwgbmFtZXMgbGlzdGVkIGluIGNvbmZpZy5jaGFyc2V0LgorICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCisgICBJZiB0aGUgY2Fub25pY2FsIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQsIHRoZSByZXN1bHQgaXMgYSBub24tY2Fub25pY2FsCisgICBuYW1lLiAgKi8KKworI2lmZGVmIFNUQVRJQworU1RBVElDCisjZW5kaWYKK2NvbnN0IGNoYXIgKgorbG9jYWxlX2NoYXJzZXQgKCkKK3sKKyAgY29uc3QgY2hhciAqY29kZXNldDsKKyAgY29uc3QgY2hhciAqYWxpYXNlczsKKworI2lmICEoZGVmaW5lZCBXSU4zMiB8fCBkZWZpbmVkIE9TMikKKworIyBpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKworICAvKiBNb3N0IHN5c3RlbXMgc3VwcG9ydCBubF9sYW5naW5mbyAoQ09ERVNFVCkgbm93YWRheXMuICAqLworICBjb2Rlc2V0ID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOworCisjIGVsc2UKKworICAvKiBPbiBvbGQgc3lzdGVtcyB3aGljaCBsYWNrIGl0LCB1c2Ugc2V0bG9jYWxlIG9yIGdldGVudi4gICovCisgIGNvbnN0IGNoYXIgKmxvY2FsZSA9IE5VTEw7CisKKyAgLyogQnV0IG1vc3Qgb2xkIHN5c3RlbXMgZG9uJ3QgaGF2ZSBhIGNvbXBsZXRlIHNldCBvZiBsb2NhbGVzLiAgU29tZQorICAgICAobGlrZSBTdW5PUyA0IG9yIERKR1BQKSBoYXZlIG9ubHkgdGhlIEMgbG9jYWxlLiAgVGhlcmVmb3JlIHdlIGRvbid0CisgICAgIHVzZSBzZXRsb2NhbGUgaGVyZTsgaXQgd291bGQgcmV0dXJuICJDIiB3aGVuIGl0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUKKyAgICAgbG9jYWxlIG5hbWUgdGhlIHVzZXIgaGFzIHNldC4gICovCisjICBpZiBIQVZFX1NFVExPQ0FMRSAmJiAwCisgIGxvY2FsZSA9IHNldGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwpOworIyAgZW5kaWYKKyAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorICAgIHsKKyAgICAgIGxvY2FsZSA9IGdldGVudiAoIkxDX0FMTCIpOworICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorCXsKKwkgIGxvY2FsZSA9IGdldGVudiAoIkxDX0NUWVBFIik7CisJICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisJICAgIGxvY2FsZSA9IGdldGVudiAoIkxBTkciKTsKKwl9CisgICAgfQorCisgIC8qIE9uIHNvbWUgb2xkIHN5c3RlbXMsIG9uZSB1c2VkIHRvIHNldCBsb2NhbGUgPSAiaXNvODg1OV8xIi4gT24gb3RoZXJzLAorICAgICB5b3Ugc2V0IGl0IHRvICJsYW5ndWFnZV9DT1VOVFJZLmNoYXJzZXQiLiBJbiBhbnkgY2FzZSwgd2UgcmVzb2x2ZSBpdAorICAgICB0aHJvdWdoIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworICBjb2Rlc2V0ID0gbG9jYWxlOworCisjIGVuZGlmCisKKyNlbGlmIGRlZmluZWQgV0lOMzIKKworICBzdGF0aWMgY2hhciBidWZbMiArIDEwICsgMV07CisKKyAgLyogV29lMzIgaGFzIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBsb2NhbGUncyBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCisgIHNwcmludGYgKGJ1ZiwgIkNQJXUiLCBHZXRBQ1AgKCkpOworICBjb2Rlc2V0ID0gYnVmOworCisjZWxpZiBkZWZpbmVkIE9TMgorCisgIGNvbnN0IGNoYXIgKmxvY2FsZTsKKyAgc3RhdGljIGNoYXIgYnVmWzIgKyAxMCArIDFdOworICBVTE9ORyBjcFszXTsKKyAgVUxPTkcgY3BsZW47CisKKyAgLyogQWxsb3cgdXNlciB0byBvdmVycmlkZSB0aGUgY29kZXNldCwgYXMgc2V0IGluIHRoZSBvcGVyYXRpbmcgc3lzdGVtLAorICAgICB3aXRoIHN0YW5kYXJkIGxhbmd1YWdlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gICovCisgIGxvY2FsZSA9IGdldGVudiAoIkxDX0FMTCIpOworICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisgICAgeworICAgICAgbG9jYWxlID0gZ2V0ZW52ICgiTENfQ1RZUEUiKTsKKyAgICAgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKwlsb2NhbGUgPSBnZXRlbnYgKCJMQU5HIik7CisgICAgfQorICBpZiAobG9jYWxlICE9IE5VTEwgJiYgbG9jYWxlWzBdICE9ICdcMCcpCisgICAgeworICAgICAgLyogSWYgdGhlIGxvY2FsZSBuYW1lIGNvbnRhaW5zIGFuIGVuY29kaW5nIGFmdGVyIHRoZSBkb3QsIHJldHVybiBpdC4gICovCisgICAgICBjb25zdCBjaGFyICpkb3QgPSBzdHJjaHIgKGxvY2FsZSwgJy4nKTsKKworICAgICAgaWYgKGRvdCAhPSBOVUxMKQorCXsKKwkgIGNvbnN0IGNoYXIgKm1vZGlmaWVyOworCisJICBkb3QrKzsKKwkgIC8qIExvb2sgZm9yIHRoZSBwb3NzaWJsZSBALi4uIHRyYWlsZXIgYW5kIHJlbW92ZSBpdCwgaWYgYW55LiAgKi8KKwkgIG1vZGlmaWVyID0gc3RyY2hyIChkb3QsICdAJyk7CisJICBpZiAobW9kaWZpZXIgPT0gTlVMTCkKKwkgICAgcmV0dXJuIGRvdDsKKwkgIGlmIChtb2RpZmllciAtIGRvdCA8IHNpemVvZiAoYnVmKSkKKwkgICAgeworCSAgICAgIG1lbWNweSAoYnVmLCBkb3QsIG1vZGlmaWVyIC0gZG90KTsKKwkgICAgICBidWYgW21vZGlmaWVyIC0gZG90XSA9ICdcMCc7CisJICAgICAgcmV0dXJuIGJ1ZjsKKwkgICAgfQorCX0KKworICAgICAgLyogUmVzb2x2ZSB0aHJvdWdoIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworICAgICAgY29kZXNldCA9IGxvY2FsZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBPUy8yIGhhcyBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbG9jYWxlJ3MgY29kZXBhZ2UgYXMgYSBudW1iZXIuICAqLworICAgICAgaWYgKERvc1F1ZXJ5Q3AgKHNpemVvZiAoY3ApLCBjcCwgJmNwbGVuKSkKKwljb2Rlc2V0ID0gIiI7CisgICAgICBlbHNlCisJeworCSAgc3ByaW50ZiAoYnVmLCAiQ1AldSIsIGNwWzBdKTsKKwkgIGNvZGVzZXQgPSBidWY7CisJfQorICAgIH0KKworI2VuZGlmCisKKyAgaWYgKGNvZGVzZXQgPT0gTlVMTCkKKyAgICAvKiBUaGUgY2Fub25pY2FsIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQuICAqLworICAgIGNvZGVzZXQgPSAiIjsKKworICAvKiBSZXNvbHZlIGFsaWFzLiAqLworICBmb3IgKGFsaWFzZXMgPSBnZXRfY2hhcnNldF9hbGlhc2VzICgpOworICAgICAgICphbGlhc2VzICE9ICdcMCc7CisgICAgICAgYWxpYXNlcyArPSBzdHJsZW4gKGFsaWFzZXMpICsgMSwgYWxpYXNlcyArPSBzdHJsZW4gKGFsaWFzZXMpICsgMSkKKyAgICBpZiAoc3RyY21wIChjb2Rlc2V0LCBhbGlhc2VzKSA9PSAwCisJfHwgKGFsaWFzZXNbMF0gPT0gJyonICYmIGFsaWFzZXNbMV0gPT0gJ1wwJykpCisgICAgICB7CisJY29kZXNldCA9IGFsaWFzZXMgKyBzdHJsZW4gKGFsaWFzZXMpICsgMTsKKwlicmVhazsKKyAgICAgIH0KKworICAvKiBEb24ndCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLiAgR05VIGxpYmMgYW5kIEdOVSBsaWJpY29udiBpbnRlcnByZXQKKyAgICAgdGhlIGVtcHR5IHN0cmluZyBhcyBkZW5vdGluZyAidGhlIGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZyIsCisgICAgIHRodXMgR05VIGxpYmljb252IHdvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBhIHNlY29uZCB0aW1lLiAgKi8KKyAgaWYgKGNvZGVzZXRbMF0gPT0gJ1wwJykKKyAgICBjb2Rlc2V0ID0gIkFTQ0lJIjsKKworICByZXR1cm4gY29kZXNldDsKK30KZGlmZiAtLWdpdCBhL2ludGwvbG9jYWxjaGFyc2V0LmggYi9pbnRsL2xvY2FsY2hhcnNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMTM3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL2xvY2FsY2hhcnNldC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qIERldGVybWluZSBhIGNhbm9uaWNhbCBuYW1lIGZvciB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQ0hBUlNFVCBMaWJyYXJ5LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmbmRlZiBfTE9DQUxDSEFSU0VUX0gKKyNkZWZpbmUgX0xPQ0FMQ0hBUlNFVF9ICisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qIERldGVybWluZSB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFuZCBjYW5vbmljYWxpemUgaXQKKyAgIGludG8gb25lIG9mIHRoZSBjYW5vbmljYWwgbmFtZXMgbGlzdGVkIGluIGNvbmZpZy5jaGFyc2V0LgorICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCisgICBJZiB0aGUgY2Fub25pY2FsIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQsIHRoZSByZXN1bHQgaXMgYSBub24tY2Fub25pY2FsCisgICBuYW1lLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyICogbG9jYWxlX2NoYXJzZXQgKHZvaWQpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmIC8qIF9MT0NBTENIQVJTRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW50bC9sb2NhbGUuYWxpYXMgYi9pbnRsL2xvY2FsZS5hbGlhcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDZiYjI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW50bC9sb2NhbGUuYWxpYXMKQEAgLTAsMCArMSw3OCBAQAorIyBMb2NhbGUgbmFtZSBhbGlhcyBkYXRhIGJhc2UuCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxLDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyMgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorIyBVU0EuCisKKyMgVGhlIGZvcm1hdCBvZiB0aGlzIGZpbGUgaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgb2YKKyMgdGhlIFggV2luZG93IFN5c3RlbSwgd2hpY2ggbm9ybWFsbHkgY2FuIGJlIGZvdW5kIGluCisjCS91c3IvbGliL1gxMS9sb2NhbGUvbG9jYWxlLmFsaWFzCisjIEEgc2luZ2xlIGxpbmUgY29udGFpbnMgdHdvIGZpZWxkczogYW4gYWxpYXMgYW5kIGEgc3Vic3RpdHV0aW9uIHZhbHVlLgorIyBBbGwgZW50cmllcyBhcmUgY2FzZSBpbmRlcGVuZGVudC4KKworIyBOb3RlOiBUaGlzIGZpbGUgaXMgZmFyIGZyb20gYmVpbmcgY29tcGxldGUuICBJZiB5b3UgaGF2ZSBhIHZhbHVlIGZvcgorIyB5b3VyIG93biBzaXRlIHdoaWNoIHlvdSB0aGluayBtaWdodCBiZSB1c2VmdWwgZm9yIG90aGVycyB0b28sIHNoYXJlCisjIGl0IHdpdGggdGhlIHJlc3Qgb2YgdXMuICBTZW5kIGl0IHVzaW5nIHRoZSBgZ2xpYmNidWcnIHNjcmlwdCB0bworIyBidWdzQGdudS5vcmcuCisKKyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAKKworYm9rbWFsCQluYl9OTy5JU08tODg1OS0xCitib2tt5WwJCW5iX05PLklTTy04ODU5LTEKK2NhdGFsYW4JCWNhX0VTLklTTy04ODU5LTEKK2Nyb2F0aWFuCWhyX0hSLklTTy04ODU5LTIKK2N6ZWNoCQljc19DWi5JU08tODg1OS0yCitkYW5pc2ggICAgICAgICAgZGFfREsuSVNPLTg4NTktMQorZGFuc2sJCWRhX0RLLklTTy04ODU5LTEKK2RldXRzY2gJCWRlX0RFLklTTy04ODU5LTEKK2R1dGNoCQlubF9OTC5JU08tODg1OS0xCitlZXN0aQkJZXRfRUUuSVNPLTg4NTktMQorZXN0b25pYW4JZXRfRUUuSVNPLTg4NTktMQorZmlubmlzaCAgICAgICAgIGZpX0ZJLklTTy04ODU5LTEKK2ZyYW7nYWlzCWZyX0ZSLklTTy04ODU5LTEKK2ZyZW5jaAkJZnJfRlIuSVNPLTg4NTktMQorZ2FsZWdvCQlnbF9FUy5JU08tODg1OS0xCitnYWxpY2lhbglnbF9FUy5JU08tODg1OS0xCitnZXJtYW4JCWRlX0RFLklTTy04ODU5LTEKK2dyZWVrICAgICAgICAgICBlbF9HUi5JU08tODg1OS03CitoZWJyZXcgICAgICAgICAgaGVfSUwuSVNPLTg4NTktOAoraHJ2YXRza2kJaHJfSFIuSVNPLTg4NTktMgoraHVuZ2FyaWFuICAgICAgIGh1X0hVLklTTy04ODU5LTIKK2ljZWxhbmRpYyAgICAgICBpc19JUy5JU08tODg1OS0xCitpdGFsaWFuICAgICAgICAgaXRfSVQuSVNPLTg4NTktMQoramFwYW5lc2UJamFfSlAuZXVjSlAKK2phcGFuZXNlLmV1YwlqYV9KUC5ldWNKUAoramFfSlAJCWphX0pQLmV1Y0pQCitqYV9KUC51amlzCWphX0pQLmV1Y0pQCitqYXBhbmVzZS5zamlzCWphX0pQLlNKSVMKK2tvcmVhbgkJa29fS1IuZXVjS1IKK2tvcmVhbi5ldWMgCWtvX0tSLmV1Y0tSCitrb19LUgkJa29fS1IuZXVjS1IKK2xpdGh1YW5pYW4gICAgICBsdF9MVC5JU08tODg1OS0xMworbm9fTk8JCW5iX05PLklTTy04ODU5LTEKK25vX05PLklTTy04ODU5LTEgbmJfTk8uSVNPLTg4NTktMQorbm9yd2VnaWFuICAgICAgIG5iX05PLklTTy04ODU5LTEKK255bm9yc2sJCW5uX05PLklTTy04ODU5LTEKK3BvbGlzaCAgICAgICAgICBwbF9QTC5JU08tODg1OS0yCitwb3J0dWd1ZXNlICAgICAgcHRfUFQuSVNPLTg4NTktMQorcm9tYW5pYW4gICAgICAgIHJvX1JPLklTTy04ODU5LTIKK3J1c3NpYW4gICAgICAgICBydV9SVS5JU08tODg1OS01CitzbG92YWsgICAgICAgICAgc2tfU0suSVNPLTg4NTktMgorc2xvdmVuZSAgICAgICAgIHNsX1NJLklTTy04ODU5LTIKK3Nsb3ZlbmlhbiAgICAgICBzbF9TSS5JU08tODg1OS0yCitzcGFuaXNoICAgICAgICAgZXNfRVMuSVNPLTg4NTktMQorc3dlZGlzaCAgICAgICAgIHN2X1NFLklTTy04ODU5LTEKK3RoYWkJCXRoX1RILlRJUy02MjAKK3R1cmtpc2ggICAgICAgICB0cl9UUi5JU08tODg1OS05CmRpZmYgLS1naXQgYS9pbnRsL2xvY2FsZWFsaWFzLmMgYi9pbnRsL2xvY2FsZWFsaWFzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhZjg4MQotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvbG9jYWxlYWxpYXMuYwpAQCAtMCwwICsxLDQxNCBAQAorLyogSGFuZGxlIGFsaWFzZXMgZm9yIGxvY2FsZSBuYW1lcy4KKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisgICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKyAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyMgZGVmaW5lIF9HTlVfU09VUkNFICAgIDEKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX19fRlNFVExPQ0tJTkcKKyMgaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmZGVmIF9fR05VQ19fCisjIHVuZGVmIGFsbG9jYQorIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKyNlbHNlCisjIGlmZGVmIF9NU0NfVkVSCisjICBpbmNsdWRlIDxtYWxsb2MuaD4KKyMgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorIyBlbHNlCisjICBpZiBkZWZpbmVkIEhBVkVfQUxMT0NBX0ggfHwgZGVmaW5lZCBfTElCQworIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgorIyAgZWxzZQorIyAgIGlmZGVmIF9BSVgKKyAjcHJhZ21hIGFsbG9jYQorIyAgIGVsc2UKKyMgICAgaWZuZGVmIGFsbG9jYQorY2hhciAqYWxsb2NhICgpOworIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImdldHRleHRQLmgiCisKKyNpZiBFTkFCTEVfUkVMT0NBVEFCTEUKKyMgaW5jbHVkZSAicmVsb2NhdGFibGUuaCIKKyNlbHNlCisjIGRlZmluZSByZWxvY2F0ZShwYXRobmFtZSkgKHBhdGhuYW1lKQorI2VuZGlmCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworI2lmZGVmIF9MSUJDCisvKiBSZW5hbWUgdGhlIG5vbiBBTlNJIEMgZnVuY3Rpb25zLiAgVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQKKyAgIGJlY2F1c2Ugc29tZSBBTlNJIEMgZnVuY3Rpb25zIHdpbGwgcmVxdWlyZSBsaW5raW5nIHdpdGggdGhpcyBvYmplY3QKKyAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKyMgZGVmaW5lIHN0cmNhc2VjbXAgX19zdHJjYXNlY21wCisKKyMgaWZuZGVmIG1lbXBjcHkKKyMgIGRlZmluZSBtZW1wY3B5IF9fbWVtcGNweQorIyBlbmRpZgorIyBkZWZpbmUgSEFWRV9NRU1QQ1BZCTEKKyMgZGVmaW5lIEhBVkVfX19GU0VUTE9DS0lORwkxCisKKy8qIFdlIG5lZWQgbG9ja2luZyBoZXJlIHNpbmNlIHdlIGNhbiBiZSBjYWxsZWQgZnJvbSBkaWZmZXJlbnQgcGxhY2VzLiAgKi8KKyMgaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKworX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkIChzdGF0aWMsIGxvY2spOworI2VuZGlmCisKKyNpZm5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisjZW5kaWYKKworLyogU29tZSBvcHRpbWl6YXRpb25zIGZvciBnbGliYy4gICovCisjaWZkZWYgX0xJQkMKKyMgZGVmaW5lIEZFT0YoZnApCQlmZW9mX3VubG9ja2VkIChmcCkKKyMgZGVmaW5lIEZHRVRTKGJ1ZiwgbiwgZnApCWZnZXRzX3VubG9ja2VkIChidWYsIG4sIGZwKQorI2Vsc2UKKyMgZGVmaW5lIEZFT0YoZnApCQlmZW9mIChmcCkKKyMgZGVmaW5lIEZHRVRTKGJ1ZiwgbiwgZnApCWZnZXRzIChidWYsIG4sIGZwKQorI2VuZGlmCisKKy8qIEZvciB0aG9zZSBsb3Npbmcgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGBhbGxvY2EnIHdlIGhhdmUgdG8gYWRkCisgICBzb21lIGFkZGl0aW9uYWwgY29kZSBlbXVsYXRpbmcgaXQuICAqLworI2lmZGVmIEhBVkVfQUxMT0NBCisjIGRlZmluZSBmcmVlYShwKSAvKiBub3RoaW5nICovCisjZWxzZQorIyBkZWZpbmUgYWxsb2NhKG4pIG1hbGxvYyAobikKKyMgZGVmaW5lIGZyZWVhKHApIGZyZWUgKHApCisjZW5kaWYKKworI2lmIGRlZmluZWQgX0xJQkNfUkVFTlRSQU5UIHx8IEhBVkVfREVDTF9GR0VUU19VTkxPQ0tFRAorIyB1bmRlZiBmZ2V0cworIyBkZWZpbmUgZmdldHMoYnVmLCBsZW4sIHMpIGZnZXRzX3VubG9ja2VkIChidWYsIGxlbiwgcykKKyNlbmRpZgorI2lmIGRlZmluZWQgX0xJQkNfUkVFTlRSQU5UIHx8IEhBVkVfREVDTF9GRU9GX1VOTE9DS0VECisjIHVuZGVmIGZlb2YKKyMgZGVmaW5lIGZlb2YocykgZmVvZl91bmxvY2tlZCAocykKKyNlbmRpZgorCisKK3N0cnVjdCBhbGlhc19tYXAKK3sKKyAgY29uc3QgY2hhciAqYWxpYXM7CisgIGNvbnN0IGNoYXIgKnZhbHVlOworfTsKKworCisjaWZuZGVmIF9MSUJDCisjIGRlZmluZSBsaWJjX2ZyZWVyZXNfcHRyKGRlY2wpIGRlY2wKKyNlbmRpZgorCitsaWJjX2ZyZWVyZXNfcHRyIChzdGF0aWMgY2hhciAqc3RyaW5nX3NwYWNlKTsKK3N0YXRpYyBzaXplX3Qgc3RyaW5nX3NwYWNlX2FjdDsKK3N0YXRpYyBzaXplX3Qgc3RyaW5nX3NwYWNlX21heDsKK2xpYmNfZnJlZXJlc19wdHIgKHN0YXRpYyBzdHJ1Y3QgYWxpYXNfbWFwICptYXApOworc3RhdGljIHNpemVfdCBubWFwOworc3RhdGljIHNpemVfdCBtYXhtYXA7CisKKworLyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zLiAgKi8KK3N0YXRpYyBzaXplX3QgcmVhZF9hbGlhc19maWxlIChjb25zdCBjaGFyICpmbmFtZSwgaW50IGZuYW1lX2xlbikKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgaW50IGV4dGVuZF9hbGlhc190YWJsZSAodm9pZCk7CitzdGF0aWMgaW50IGFsaWFzX2NvbXBhcmUgKGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDEsCisJCQkgIGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDIpOworCisKK2NvbnN0IGNoYXIgKgorX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgc3RhdGljIGNvbnN0IGNoYXIgKmxvY2FsZV9hbGlhc19wYXRoOworICBzdHJ1Y3QgYWxpYXNfbWFwICpyZXR2YWw7CisgIGNvbnN0IGNoYXIgKnJlc3VsdCA9IE5VTEw7CisgIHNpemVfdCBhZGRlZDsKKworI2lmZGVmIF9MSUJDCisgIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworI2VuZGlmCisKKyAgaWYgKGxvY2FsZV9hbGlhc19wYXRoID09IE5VTEwpCisgICAgbG9jYWxlX2FsaWFzX3BhdGggPSBMT0NBTEVfQUxJQVNfUEFUSDsKKworICBkbworICAgIHsKKyAgICAgIHN0cnVjdCBhbGlhc19tYXAgaXRlbTsKKworICAgICAgaXRlbS5hbGlhcyA9IG5hbWU7CisKKyAgICAgIGlmIChubWFwID4gMCkKKwlyZXR2YWwgPSAoc3RydWN0IGFsaWFzX21hcCAqKSBic2VhcmNoICgmaXRlbSwgbWFwLCBubWFwLAorCQkJCQkgICAgICAgc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfbWFwKSwKKwkJCQkJICAgICAgIChpbnQgKCopIChjb25zdCB2b2lkICosCisJCQkJCQkJIGNvbnN0IHZvaWQgKikKKwkJCQkJCSkgYWxpYXNfY29tcGFyZSk7CisgICAgICBlbHNlCisJcmV0dmFsID0gTlVMTDsKKworICAgICAgLyogV2UgcmVhbGx5IGZvdW5kIGFuIGFsaWFzLiAgUmV0dXJuIHRoZSB2YWx1ZS4gICovCisgICAgICBpZiAocmV0dmFsICE9IE5VTEwpCisJeworCSAgcmVzdWx0ID0gcmV0dmFsLT52YWx1ZTsKKwkgIGJyZWFrOworCX0KKworICAgICAgLyogUGVyaGFwcyB3ZSBjYW4gZmluZCBhbm90aGVyIGFsaWFzIGZpbGUuICAqLworICAgICAgYWRkZWQgPSAwOworICAgICAgd2hpbGUgKGFkZGVkID09IDAgJiYgbG9jYWxlX2FsaWFzX3BhdGhbMF0gIT0gJ1wwJykKKwl7CisJICBjb25zdCBjaGFyICpzdGFydDsKKworCSAgd2hpbGUgKGxvY2FsZV9hbGlhc19wYXRoWzBdID09IFBBVEhfU0VQQVJBVE9SKQorCSAgICArK2xvY2FsZV9hbGlhc19wYXRoOworCSAgc3RhcnQgPSBsb2NhbGVfYWxpYXNfcGF0aDsKKworCSAgd2hpbGUgKGxvY2FsZV9hbGlhc19wYXRoWzBdICE9ICdcMCcKKwkJICYmIGxvY2FsZV9hbGlhc19wYXRoWzBdICE9IFBBVEhfU0VQQVJBVE9SKQorCSAgICArK2xvY2FsZV9hbGlhc19wYXRoOworCisJICBpZiAoc3RhcnQgPCBsb2NhbGVfYWxpYXNfcGF0aCkKKwkgICAgYWRkZWQgPSByZWFkX2FsaWFzX2ZpbGUgKHN0YXJ0LCBsb2NhbGVfYWxpYXNfcGF0aCAtIHN0YXJ0KTsKKwl9CisgICAgfQorICB3aGlsZSAoYWRkZWQgIT0gMCk7CisKKyNpZmRlZiBfTElCQworICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworI2VuZGlmCisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgc2l6ZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVhZF9hbGlhc19maWxlIChjb25zdCBjaGFyICpmbmFtZSwgaW50IGZuYW1lX2xlbikKK3sKKyAgRklMRSAqZnA7CisgIGNoYXIgKmZ1bGxfZm5hbWU7CisgIHNpemVfdCBhZGRlZDsKKyAgc3RhdGljIGNvbnN0IGNoYXIgYWxpYXNmaWxlW10gPSAiL2xvY2FsZS5hbGlhcyI7CisKKyAgZnVsbF9mbmFtZSA9IChjaGFyICopIGFsbG9jYSAoZm5hbWVfbGVuICsgc2l6ZW9mIGFsaWFzZmlsZSk7CisjaWZkZWYgSEFWRV9NRU1QQ1BZCisgIG1lbXBjcHkgKG1lbXBjcHkgKGZ1bGxfZm5hbWUsIGZuYW1lLCBmbmFtZV9sZW4pLAorCSAgIGFsaWFzZmlsZSwgc2l6ZW9mIGFsaWFzZmlsZSk7CisjZWxzZQorICBtZW1jcHkgKGZ1bGxfZm5hbWUsIGZuYW1lLCBmbmFtZV9sZW4pOworICBtZW1jcHkgKCZmdWxsX2ZuYW1lW2ZuYW1lX2xlbl0sIGFsaWFzZmlsZSwgc2l6ZW9mIGFsaWFzZmlsZSk7CisjZW5kaWYKKworICBmcCA9IGZvcGVuIChyZWxvY2F0ZSAoZnVsbF9mbmFtZSksICJyIik7CisgIGZyZWVhIChmdWxsX2ZuYW1lKTsKKyAgaWYgKGZwID09IE5VTEwpCisgICAgcmV0dXJuIDA7CisKKyNpZmRlZiBIQVZFX19fRlNFVExPQ0tJTkcKKyAgLyogTm8gdGhyZWFkcyBwcmVzZW50LiAgKi8KKyAgX19mc2V0bG9ja2luZyAoZnAsIEZTRVRMT0NLSU5HX0JZQ0FMTEVSKTsKKyNlbmRpZgorCisgIGFkZGVkID0gMDsKKyAgd2hpbGUgKCFGRU9GIChmcCkpCisgICAgeworICAgICAgLyogSXQgaXMgYSByZWFzb25hYmxlIGFwcHJvYWNoIHRvIHVzZSBhIGZpeCBidWZmZXIgaGVyZSBiZWNhdXNlCisJIGEpIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGZpcnN0IHR3byBmaWVsZHMKKwkgYikgdGhlc2UgZmllbGRzIG11c3QgYmUgdXNhYmxlIGFzIGZpbGUgbmFtZXMgYW5kIHNvIG11c3Qgbm90CisJICAgIGJlIHRoYXQgbG9uZworCSBXZSBhdm9pZCBhIG11bHRpLWtpbG9ieXRlIGJ1ZmZlciBoZXJlIHNpbmNlIHRoaXMgd291bGQgdXNlIHVwCisJIHN0YWNrIHNwYWNlIHdoaWNoIHdlIG1pZ2h0IG5vdCBoYXZlIGlmIHRoZSBwcm9ncmFtIHJhbiBvdXQgb2YKKwkgbWVtb3J5LiAgKi8KKyAgICAgIGNoYXIgYnVmWzQwMF07CisgICAgICBjaGFyICphbGlhczsKKyAgICAgIGNoYXIgKnZhbHVlOworICAgICAgY2hhciAqY3A7CisKKyAgICAgIGlmIChGR0VUUyAoYnVmLCBzaXplb2YgYnVmLCBmcCkgPT0gTlVMTCkKKwkvKiBFT0YgcmVhY2hlZC4gICovCisJYnJlYWs7CisKKyAgICAgIGNwID0gYnVmOworICAgICAgLyogSWdub3JlIGxlYWRpbmcgd2hpdGUgc3BhY2UuICAqLworICAgICAgd2hpbGUgKGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSBjcFswXSkpCisJKytjcDsKKworICAgICAgLyogQSBsZWFkaW5nICcjJyBzaWduYWxzIGEgY29tbWVudCBsaW5lLiAgKi8KKyAgICAgIGlmIChjcFswXSAhPSAnXDAnICYmIGNwWzBdICE9ICcjJykKKwl7CisJICBhbGlhcyA9IGNwKys7CisJICB3aGlsZSAoY3BbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpIGNwWzBdKSkKKwkgICAgKytjcDsKKwkgIC8qIFRlcm1pbmF0ZSBhbGlhcyBuYW1lLiAgKi8KKwkgIGlmIChjcFswXSAhPSAnXDAnKQorCSAgICAqY3ArKyA9ICdcMCc7CisKKwkgIC8qIE5vdyBsb29rIGZvciB0aGUgYmVnaW5uaW5nIG9mIHRoZSB2YWx1ZS4gICovCisJICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpIGNwWzBdKSkKKwkgICAgKytjcDsKKworCSAgaWYgKGNwWzBdICE9ICdcMCcpCisJICAgIHsKKwkgICAgICBzaXplX3QgYWxpYXNfbGVuOworCSAgICAgIHNpemVfdCB2YWx1ZV9sZW47CisKKwkgICAgICB2YWx1ZSA9IGNwKys7CisJICAgICAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSBjcFswXSkpCisJCSsrY3A7CisJICAgICAgLyogVGVybWluYXRlIHZhbHVlLiAgKi8KKwkgICAgICBpZiAoY3BbMF0gPT0gJ1xuJykKKwkJeworCQkgIC8qIFRoaXMgaGFzIHRvIGJlIGRvbmUgdG8gbWFrZSB0aGUgZm9sbG93aW5nIHRlc3QKKwkJICAgICBmb3IgdGhlIGVuZCBvZiBsaW5lIHBvc3NpYmxlLiAgV2UgYXJlIGxvb2tpbmcgZm9yCisJCSAgICAgdGhlIHRlcm1pbmF0aW5nICdcbicgd2hpY2ggZG8gbm90IG92ZXJ3cml0ZSBoZXJlLiAgKi8KKwkJICAqY3ArKyA9ICdcMCc7CisJCSAgKmNwID0gJ1xuJzsKKwkJfQorCSAgICAgIGVsc2UgaWYgKGNwWzBdICE9ICdcMCcpCisJCSpjcCsrID0gJ1wwJzsKKworCSAgICAgIGlmIChubWFwID49IG1heG1hcCkKKwkJaWYgKF9fYnVpbHRpbl9leHBlY3QgKGV4dGVuZF9hbGlhc190YWJsZSAoKSwgMCkpCisJCSAgcmV0dXJuIGFkZGVkOworCisJICAgICAgYWxpYXNfbGVuID0gc3RybGVuIChhbGlhcykgKyAxOworCSAgICAgIHZhbHVlX2xlbiA9IHN0cmxlbiAodmFsdWUpICsgMTsKKworCSAgICAgIGlmIChzdHJpbmdfc3BhY2VfYWN0ICsgYWxpYXNfbGVuICsgdmFsdWVfbGVuID4gc3RyaW5nX3NwYWNlX21heCkKKwkJeworCQkgIC8qIEluY3JlYXNlIHNpemUgb2YgbWVtb3J5IHBvb2wuICAqLworCQkgIHNpemVfdCBuZXdfc2l6ZSA9IChzdHJpbmdfc3BhY2VfbWF4CisJCQkJICAgICArIChhbGlhc19sZW4gKyB2YWx1ZV9sZW4gPiAxMDI0CisJCQkJCT8gYWxpYXNfbGVuICsgdmFsdWVfbGVuIDogMTAyNCkpOworCQkgIGNoYXIgKm5ld19wb29sID0gKGNoYXIgKikgcmVhbGxvYyAoc3RyaW5nX3NwYWNlLCBuZXdfc2l6ZSk7CisJCSAgaWYgKG5ld19wb29sID09IE5VTEwpCisJCSAgICByZXR1cm4gYWRkZWQ7CisKKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAoc3RyaW5nX3NwYWNlICE9IG5ld19wb29sLCAwKSkKKwkJICAgIHsKKwkJICAgICAgc2l6ZV90IGk7CisKKwkJICAgICAgZm9yIChpID0gMDsgaSA8IG5tYXA7IGkrKykKKwkJCXsKKwkJCSAgbWFwW2ldLmFsaWFzICs9IG5ld19wb29sIC0gc3RyaW5nX3NwYWNlOworCQkJICBtYXBbaV0udmFsdWUgKz0gbmV3X3Bvb2wgLSBzdHJpbmdfc3BhY2U7CisJCQl9CisJCSAgICB9CisKKwkJICBzdHJpbmdfc3BhY2UgPSBuZXdfcG9vbDsKKwkJICBzdHJpbmdfc3BhY2VfbWF4ID0gbmV3X3NpemU7CisJCX0KKworCSAgICAgIG1hcFtubWFwXS5hbGlhcyA9IG1lbWNweSAoJnN0cmluZ19zcGFjZVtzdHJpbmdfc3BhY2VfYWN0XSwKKwkJCQkJYWxpYXMsIGFsaWFzX2xlbik7CisJICAgICAgc3RyaW5nX3NwYWNlX2FjdCArPSBhbGlhc19sZW47CisKKwkgICAgICBtYXBbbm1hcF0udmFsdWUgPSBtZW1jcHkgKCZzdHJpbmdfc3BhY2Vbc3RyaW5nX3NwYWNlX2FjdF0sCisJCQkJCXZhbHVlLCB2YWx1ZV9sZW4pOworCSAgICAgIHN0cmluZ19zcGFjZV9hY3QgKz0gdmFsdWVfbGVuOworCisJICAgICAgKytubWFwOworCSAgICAgICsrYWRkZWQ7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFBvc3NpYmx5IG5vdCB0aGUgd2hvbGUgbGluZSBmaXRzIGludG8gdGhlIGJ1ZmZlci4gIElnbm9yZQorCSB0aGUgcmVzdCBvZiB0aGUgbGluZS4gICovCisgICAgICB3aGlsZSAoc3RyY2hyIChidWYsICdcbicpID09IE5VTEwpCisJaWYgKEZHRVRTIChidWYsIHNpemVvZiBidWYsIGZwKSA9PSBOVUxMKQorCSAgLyogTWFrZSBzdXJlIHRoZSBpbm5lciBsb29wIHdpbGwgYmUgbGVmdC4gIFRoZSBvdXRlciBsb29wCisJICAgICB3aWxsIGV4aXQgYXQgdGhlIGBmZW9mJyB0ZXN0LiAgKi8KKwkgIGJyZWFrOworICAgIH0KKworICAvKiBTaG91bGQgd2UgdGVzdCBmb3IgZmVycm9yKCk/ICBJIHRoaW5rIHdlIGhhdmUgdG8gc2lsZW50bHkgaWdub3JlCisgICAgIGVycm9ycy4gIC0tZHJlcHBlciAgKi8KKyAgZmNsb3NlIChmcCk7CisKKyAgaWYgKGFkZGVkID4gMCkKKyAgICBxc29ydCAobWFwLCBubWFwLCBzaXplb2YgKHN0cnVjdCBhbGlhc19tYXApLAorCSAgIChpbnQgKCopIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpIGFsaWFzX2NvbXBhcmUpOworCisgIHJldHVybiBhZGRlZDsKK30KKworCitzdGF0aWMgaW50CitleHRlbmRfYWxpYXNfdGFibGUgKCkKK3sKKyAgc2l6ZV90IG5ld19zaXplOworICBzdHJ1Y3QgYWxpYXNfbWFwICpuZXdfbWFwOworCisgIG5ld19zaXplID0gbWF4bWFwID09IDAgPyAxMDAgOiAyICogbWF4bWFwOworICBuZXdfbWFwID0gKHN0cnVjdCBhbGlhc19tYXAgKikgcmVhbGxvYyAobWFwLCAobmV3X3NpemUKKwkJCQkJCSogc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfbWFwKSkpOworICBpZiAobmV3X21hcCA9PSBOVUxMKQorICAgIC8qIFNpbXBseSBkb24ndCBleHRlbmQ6IHdlIGRvbid0IGhhdmUgYW55IG1vcmUgY29yZS4gICovCisgICAgcmV0dXJuIC0xOworCisgIG1hcCA9IG5ld19tYXA7CisgIG1heG1hcCA9IG5ld19zaXplOworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50CithbGlhc19jb21wYXJlIChjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAxLCBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAyKQoreworI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkNBU0VDTVAKKyAgcmV0dXJuIHN0cmNhc2VjbXAgKG1hcDEtPmFsaWFzLCBtYXAyLT5hbGlhcyk7CisjZWxzZQorICBjb25zdCB1bnNpZ25lZCBjaGFyICpwMSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1hcDEtPmFsaWFzOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwMiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1hcDItPmFsaWFzOworICB1bnNpZ25lZCBjaGFyIGMxLCBjMjsKKworICBpZiAocDEgPT0gcDIpCisgICAgcmV0dXJuIDA7CisKKyAgZG8KKyAgICB7CisgICAgICAvKiBJIGtub3cgdGhpcyBzZWVtcyB0byBiZSBvZGQgYnV0IHRoZSB0b2xvd2VyKCkgZnVuY3Rpb24gaW4KKwkgc29tZSBzeXN0ZW1zIGxpYmMgY2Fubm90IGhhbmRsZSBub25hbHBoYSBjaGFyYWN0ZXJzLiAgKi8KKyAgICAgIGMxID0gaXN1cHBlciAoKnAxKSA/IHRvbG93ZXIgKCpwMSkgOiAqcDE7CisgICAgICBjMiA9IGlzdXBwZXIgKCpwMikgPyB0b2xvd2VyICgqcDIpIDogKnAyOworICAgICAgaWYgKGMxID09ICdcMCcpCisJYnJlYWs7CisgICAgICArK3AxOworICAgICAgKytwMjsKKyAgICB9CisgIHdoaWxlIChjMSA9PSBjMik7CisKKyAgcmV0dXJuIGMxIC0gYzI7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2ludGwvbG9jYWxlbmFtZS5jIGIvaW50bC9sb2NhbGVuYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY2MmU1NAotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvbG9jYWxlbmFtZS5jCkBAIC0wLDAgKzEsMTE0MiBAQAorLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHNlbGVjdGVkIGxvY2FsZS4KKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisvKiBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5vcmc+LCAxOTk1LiAgKi8KKy8qIFdpbjMyIGNvZGUgd3JpdHRlbiBieSBUb3IgTGlsbHF2aXN0IDx0bWxAaWtpLmZpPi4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisjIHVuZGVmIFdJTjMyICAgLyogYXZvaWQgd2FybmluZyBvbiBtaW5ndzMyICovCisjIGRlZmluZSBXSU4zMgorI2VuZGlmCisKKyNpZmRlZiBXSU4zMgorIyBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyBpbmNsdWRlIDx3aW5kb3dzLmg+CisvKiBMaXN0IG9mIGxhbmd1YWdlIGNvZGVzLCBzb3J0ZWQgYnkgdmFsdWU6CisgICAweDAxIExBTkdfQVJBQklDCisgICAweDAyIExBTkdfQlVMR0FSSUFOCisgICAweDAzIExBTkdfQ0FUQUxBTgorICAgMHgwNCBMQU5HX0NISU5FU0UKKyAgIDB4MDUgTEFOR19DWkVDSAorICAgMHgwNiBMQU5HX0RBTklTSAorICAgMHgwNyBMQU5HX0dFUk1BTgorICAgMHgwOCBMQU5HX0dSRUVLCisgICAweDA5IExBTkdfRU5HTElTSAorICAgMHgwYSBMQU5HX1NQQU5JU0gKKyAgIDB4MGIgTEFOR19GSU5OSVNICisgICAweDBjIExBTkdfRlJFTkNICisgICAweDBkIExBTkdfSEVCUkVXCisgICAweDBlIExBTkdfSFVOR0FSSUFOCisgICAweDBmIExBTkdfSUNFTEFORElDCisgICAweDEwIExBTkdfSVRBTElBTgorICAgMHgxMSBMQU5HX0pBUEFORVNFCisgICAweDEyIExBTkdfS09SRUFOCisgICAweDEzIExBTkdfRFVUQ0gKKyAgIDB4MTQgTEFOR19OT1JXRUdJQU4KKyAgIDB4MTUgTEFOR19QT0xJU0gKKyAgIDB4MTYgTEFOR19QT1JUVUdVRVNFCisgICAweDE3IExBTkdfUkhBRVRPX1JPTUFOQ0UKKyAgIDB4MTggTEFOR19ST01BTklBTgorICAgMHgxOSBMQU5HX1JVU1NJQU4KKyAgIDB4MWEgTEFOR19DUk9BVElBTiA9PSBMQU5HX1NFUkJJQU4KKyAgIDB4MWIgTEFOR19TTE9WQUsKKyAgIDB4MWMgTEFOR19BTEJBTklBTgorICAgMHgxZCBMQU5HX1NXRURJU0gKKyAgIDB4MWUgTEFOR19USEFJCisgICAweDFmIExBTkdfVFVSS0lTSAorICAgMHgyMCBMQU5HX1VSRFUKKyAgIDB4MjEgTEFOR19JTkRPTkVTSUFOCisgICAweDIyIExBTkdfVUtSQUlOSUFOCisgICAweDIzIExBTkdfQkVMQVJVU0lBTgorICAgMHgyNCBMQU5HX1NMT1ZFTklBTgorICAgMHgyNSBMQU5HX0VTVE9OSUFOCisgICAweDI2IExBTkdfTEFUVklBTgorICAgMHgyNyBMQU5HX0xJVEhVQU5JQU4KKyAgIDB4MjggTEFOR19UQUpJSworICAgMHgyOSBMQU5HX0ZBUlNJCisgICAweDJhIExBTkdfVklFVE5BTUVTRQorICAgMHgyYiBMQU5HX0FSTUVOSUFOCisgICAweDJjIExBTkdfQVpFUkkKKyAgIDB4MmQgTEFOR19CQVNRVUUKKyAgIDB4MmUgTEFOR19TT1JCSUFOCisgICAweDJmIExBTkdfTUFDRURPTklBTgorICAgMHgzMCBMQU5HX1NVVFUKKyAgIDB4MzEgTEFOR19UU09OR0EKKyAgIDB4MzIgTEFOR19UU1dBTkEKKyAgIDB4MzMgTEFOR19WRU5EQQorICAgMHgzNCBMQU5HX1hIT1NBCisgICAweDM1IExBTkdfWlVMVQorICAgMHgzNiBMQU5HX0FGUklLQUFOUworICAgMHgzNyBMQU5HX0dFT1JHSUFOCisgICAweDM4IExBTkdfRkFFUk9FU0UKKyAgIDB4MzkgTEFOR19ISU5ESQorICAgMHgzYSBMQU5HX01BTFRFU0UKKyAgIDB4M2IgTEFOR19TQUFNSQorICAgMHgzYyBMQU5HX0dBRUxJQworICAgMHgzZCBMQU5HX1lJRERJU0gKKyAgIDB4M2UgTEFOR19NQUxBWQorICAgMHgzZiBMQU5HX0tBWkFLCisgICAweDQwIExBTkdfS1lSR1laCisgICAweDQxIExBTkdfU1dBSElMSQorICAgMHg0MiBMQU5HX1RVUktNRU4KKyAgIDB4NDMgTEFOR19VWkJFSworICAgMHg0NCBMQU5HX1RBVEFSCisgICAweDQ1IExBTkdfQkVOR0FMSQorICAgMHg0NiBMQU5HX1BVTkpBQkkKKyAgIDB4NDcgTEFOR19HVUpBUkFUSQorICAgMHg0OCBMQU5HX09SSVlBCisgICAweDQ5IExBTkdfVEFNSUwKKyAgIDB4NGEgTEFOR19URUxVR1UKKyAgIDB4NGIgTEFOR19LQU5OQURBCisgICAweDRjIExBTkdfTUFMQVlBTEFNCisgICAweDRkIExBTkdfQVNTQU1FU0UKKyAgIDB4NGUgTEFOR19NQVJBVEhJCisgICAweDRmIExBTkdfU0FOU0tSSVQKKyAgIDB4NTAgTEFOR19NT05HT0xJQU4KKyAgIDB4NTEgTEFOR19USUJFVEFOCisgICAweDUyIExBTkdfV0VMU0gKKyAgIDB4NTMgTEFOR19DQU1CT0RJQU4KKyAgIDB4NTQgTEFOR19MQU8KKyAgIDB4NTUgTEFOR19CVVJNRVNFCisgICAweDU2IExBTkdfR0FMSUNJQU4KKyAgIDB4NTcgTEFOR19LT05LQU5JCisgICAweDU4IExBTkdfTUFOSVBVUkkKKyAgIDB4NTkgTEFOR19TSU5ESEkKKyAgIDB4NWEgTEFOR19TWVJJQUMKKyAgIDB4NWIgTEFOR19TSU5IQUxFU0UKKyAgIDB4NWMgTEFOR19DSEVST0tFRQorICAgMHg1ZCBMQU5HX0lOVUtUSVRVVAorICAgMHg1ZSBMQU5HX0FNSEFSSUMKKyAgIDB4NWYgTEFOR19UQU1BWklHSFQKKyAgIDB4NjAgTEFOR19LQVNITUlSSQorICAgMHg2MSBMQU5HX05FUEFMSQorICAgMHg2MiBMQU5HX0ZSSVNJQU4KKyAgIDB4NjMgTEFOR19QQVNIVE8KKyAgIDB4NjQgTEFOR19UQUdBTE9HCisgICAweDY1IExBTkdfRElWRUhJCisgICAweDY2IExBTkdfRURPCisgICAweDY3IExBTkdfRlVMRlVMREUKKyAgIDB4NjggTEFOR19IQVVTQQorICAgMHg2OSBMQU5HX0lCSUJJTworICAgMHg2YSBMQU5HX1lPUlVCQQorICAgMHg3MCBMQU5HX0lHQk8KKyAgIDB4NzEgTEFOR19LQU5VUkkKKyAgIDB4NzIgTEFOR19PUk9NTworICAgMHg3MyBMQU5HX1RJR1JJTllBCisgICAweDc0IExBTkdfR1VBUkFOSQorICAgMHg3NSBMQU5HX0hBV0FJSUFOCisgICAweDc2IExBTkdfTEFUSU4KKyAgIDB4NzcgTEFOR19TT01BTEkKKyAgIDB4NzggTEFOR19ZSQorICAgMHg3OSBMQU5HX1BBUElBTUVOVFUKKyovCisvKiBNaW5ndyBoZWFkZXJzIGRvbid0IGhhdmUgbGF0ZXN0IGxhbmd1YWdlIGFuZCBzdWJsYW5ndWFnZSBjb2Rlcy4gICovCisjIGlmbmRlZiBMQU5HX0FGUklLQUFOUworIyBkZWZpbmUgTEFOR19BRlJJS0FBTlMgMHgzNgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19BTEJBTklBTgorIyBkZWZpbmUgTEFOR19BTEJBTklBTiAweDFjCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0FNSEFSSUMKKyMgZGVmaW5lIExBTkdfQU1IQVJJQyAweDVlCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0FSQUJJQworIyBkZWZpbmUgTEFOR19BUkFCSUMgMHgwMQorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19BUk1FTklBTgorIyBkZWZpbmUgTEFOR19BUk1FTklBTiAweDJiCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0FTU0FNRVNFCisjIGRlZmluZSBMQU5HX0FTU0FNRVNFIDB4NGQKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfQVpFUkkKKyMgZGVmaW5lIExBTkdfQVpFUkkgMHgyYworIyBlbmRpZgorIyBpZm5kZWYgTEFOR19CQVNRVUUKKyMgZGVmaW5lIExBTkdfQkFTUVVFIDB4MmQKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfQkVMQVJVU0lBTgorIyBkZWZpbmUgTEFOR19CRUxBUlVTSUFOIDB4MjMKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfQkVOR0FMSQorIyBkZWZpbmUgTEFOR19CRU5HQUxJIDB4NDUKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfQlVSTUVTRQorIyBkZWZpbmUgTEFOR19CVVJNRVNFIDB4NTUKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfQ0FNQk9ESUFOCisjIGRlZmluZSBMQU5HX0NBTUJPRElBTiAweDUzCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0NBVEFMQU4KKyMgZGVmaW5lIExBTkdfQ0FUQUxBTiAweDAzCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0NIRVJPS0VFCisjIGRlZmluZSBMQU5HX0NIRVJPS0VFIDB4NWMKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfRElWRUhJCisjIGRlZmluZSBMQU5HX0RJVkVISSAweDY1CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0VETworIyBkZWZpbmUgTEFOR19FRE8gMHg2NgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19FU1RPTklBTgorIyBkZWZpbmUgTEFOR19FU1RPTklBTiAweDI1CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0ZBRVJPRVNFCisjIGRlZmluZSBMQU5HX0ZBRVJPRVNFIDB4MzgKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfRkFSU0kKKyMgZGVmaW5lIExBTkdfRkFSU0kgMHgyOQorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19GUklTSUFOCisjIGRlZmluZSBMQU5HX0ZSSVNJQU4gMHg2MgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19GVUxGVUxERQorIyBkZWZpbmUgTEFOR19GVUxGVUxERSAweDY3CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0dBRUxJQworIyBkZWZpbmUgTEFOR19HQUVMSUMgMHgzYworIyBlbmRpZgorIyBpZm5kZWYgTEFOR19HQUxJQ0lBTgorIyBkZWZpbmUgTEFOR19HQUxJQ0lBTiAweDU2CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0dFT1JHSUFOCisjIGRlZmluZSBMQU5HX0dFT1JHSUFOIDB4MzcKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfR1VBUkFOSQorIyBkZWZpbmUgTEFOR19HVUFSQU5JIDB4NzQKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfR1VKQVJBVEkKKyMgZGVmaW5lIExBTkdfR1VKQVJBVEkgMHg0NworIyBlbmRpZgorIyBpZm5kZWYgTEFOR19IQVVTQQorIyBkZWZpbmUgTEFOR19IQVVTQSAweDY4CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0hBV0FJSUFOCisjIGRlZmluZSBMQU5HX0hBV0FJSUFOIDB4NzUKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfSEVCUkVXCisjIGRlZmluZSBMQU5HX0hFQlJFVyAweDBkCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0hJTkRJCisjIGRlZmluZSBMQU5HX0hJTkRJIDB4MzkKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfSUJJQklPCisjIGRlZmluZSBMQU5HX0lCSUJJTyAweDY5CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0lHQk8KKyMgZGVmaW5lIExBTkdfSUdCTyAweDcwCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0lORE9ORVNJQU4KKyMgZGVmaW5lIExBTkdfSU5ET05FU0lBTiAweDIxCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0lOVUtUSVRVVAorIyBkZWZpbmUgTEFOR19JTlVLVElUVVQgMHg1ZAorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19LQU5OQURBCisjIGRlZmluZSBMQU5HX0tBTk5BREEgMHg0YgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19LQU5VUkkKKyMgZGVmaW5lIExBTkdfS0FOVVJJIDB4NzEKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfS0FTSE1JUkkKKyMgZGVmaW5lIExBTkdfS0FTSE1JUkkgMHg2MAorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19LQVpBSworIyBkZWZpbmUgTEFOR19LQVpBSyAweDNmCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0tPTktBTkkKKyMgZGVmaW5lIExBTkdfS09OS0FOSSAweDU3CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0tZUkdZWgorIyBkZWZpbmUgTEFOR19LWVJHWVogMHg0MAorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19MQU8KKyMgZGVmaW5lIExBTkdfTEFPIDB4NTQKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfTEFUSU4KKyMgZGVmaW5lIExBTkdfTEFUSU4gMHg3NgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19MQVRWSUFOCisjIGRlZmluZSBMQU5HX0xBVFZJQU4gMHgyNgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19MSVRIVUFOSUFOCisjIGRlZmluZSBMQU5HX0xJVEhVQU5JQU4gMHgyNworIyBlbmRpZgorIyBpZm5kZWYgTEFOR19NQUNFRE9OSUFOCisjIGRlZmluZSBMQU5HX01BQ0VET05JQU4gMHgyZgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19NQUxBWQorIyBkZWZpbmUgTEFOR19NQUxBWSAweDNlCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX01BTEFZQUxBTQorIyBkZWZpbmUgTEFOR19NQUxBWUFMQU0gMHg0YworIyBlbmRpZgorIyBpZm5kZWYgTEFOR19NQUxURVNFCisjIGRlZmluZSBMQU5HX01BTFRFU0UgMHgzYQorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19NQU5JUFVSSQorIyBkZWZpbmUgTEFOR19NQU5JUFVSSSAweDU4CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX01BUkFUSEkKKyMgZGVmaW5lIExBTkdfTUFSQVRISSAweDRlCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX01PTkdPTElBTgorIyBkZWZpbmUgTEFOR19NT05HT0xJQU4gMHg1MAorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19ORVBBTEkKKyMgZGVmaW5lIExBTkdfTkVQQUxJIDB4NjEKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfT1JJWUEKKyMgZGVmaW5lIExBTkdfT1JJWUEgMHg0OAorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19PUk9NTworIyBkZWZpbmUgTEFOR19PUk9NTyAweDcyCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1BBUElBTUVOVFUKKyMgZGVmaW5lIExBTkdfUEFQSUFNRU5UVSAweDc5CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1BBU0hUTworIyBkZWZpbmUgTEFOR19QQVNIVE8gMHg2MworIyBlbmRpZgorIyBpZm5kZWYgTEFOR19QVU5KQUJJCisjIGRlZmluZSBMQU5HX1BVTkpBQkkgMHg0NgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19SSEFFVE9fUk9NQU5DRQorIyBkZWZpbmUgTEFOR19SSEFFVE9fUk9NQU5DRSAweDE3CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1NBQU1JCisjIGRlZmluZSBMQU5HX1NBQU1JIDB4M2IKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfU0FOU0tSSVQKKyMgZGVmaW5lIExBTkdfU0FOU0tSSVQgMHg0ZgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19TRVJCSUFOCisjIGRlZmluZSBMQU5HX1NFUkJJQU4gMHgxYQorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19TSU5ESEkKKyMgZGVmaW5lIExBTkdfU0lOREhJIDB4NTkKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfU0lOSEFMRVNFCisjIGRlZmluZSBMQU5HX1NJTkhBTEVTRSAweDViCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1NMT1ZBSworIyBkZWZpbmUgTEFOR19TTE9WQUsgMHgxYgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19TT01BTEkKKyMgZGVmaW5lIExBTkdfU09NQUxJIDB4NzcKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfU09SQklBTgorIyBkZWZpbmUgTEFOR19TT1JCSUFOIDB4MmUKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfU1VUVQorIyBkZWZpbmUgTEFOR19TVVRVIDB4MzAKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfU1dBSElMSQorIyBkZWZpbmUgTEFOR19TV0FISUxJIDB4NDEKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfU1lSSUFDCisjIGRlZmluZSBMQU5HX1NZUklBQyAweDVhCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1RBR0FMT0cKKyMgZGVmaW5lIExBTkdfVEFHQUxPRyAweDY0CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1RBSklLCisjIGRlZmluZSBMQU5HX1RBSklLIDB4MjgKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfVEFNQVpJR0hUCisjIGRlZmluZSBMQU5HX1RBTUFaSUdIVCAweDVmCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1RBTUlMCisjIGRlZmluZSBMQU5HX1RBTUlMIDB4NDkKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfVEFUQVIKKyMgZGVmaW5lIExBTkdfVEFUQVIgMHg0NAorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19URUxVR1UKKyMgZGVmaW5lIExBTkdfVEVMVUdVIDB4NGEKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfVEhBSQorIyBkZWZpbmUgTEFOR19USEFJIDB4MWUKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfVElCRVRBTgorIyBkZWZpbmUgTEFOR19USUJFVEFOIDB4NTEKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfVElHUklOWUEKKyMgZGVmaW5lIExBTkdfVElHUklOWUEgMHg3MworIyBlbmRpZgorIyBpZm5kZWYgTEFOR19UU09OR0EKKyMgZGVmaW5lIExBTkdfVFNPTkdBIDB4MzEKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfVFNXQU5BCisjIGRlZmluZSBMQU5HX1RTV0FOQSAweDMyCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1RVUktNRU4KKyMgZGVmaW5lIExBTkdfVFVSS01FTiAweDQyCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1VLUkFJTklBTgorIyBkZWZpbmUgTEFOR19VS1JBSU5JQU4gMHgyMgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19VUkRVCisjIGRlZmluZSBMQU5HX1VSRFUgMHgyMAorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19VWkJFSworIyBkZWZpbmUgTEFOR19VWkJFSyAweDQzCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1ZFTkRBCisjIGRlZmluZSBMQU5HX1ZFTkRBIDB4MzMKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfVklFVE5BTUVTRQorIyBkZWZpbmUgTEFOR19WSUVUTkFNRVNFIDB4MmEKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfV0VMU0gKKyMgZGVmaW5lIExBTkdfV0VMU0ggMHg1MgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19YSE9TQQorIyBkZWZpbmUgTEFOR19YSE9TQSAweDM0CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1lJCisjIGRlZmluZSBMQU5HX1lJIDB4NzgKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfWUlERElTSAorIyBkZWZpbmUgTEFOR19ZSURESVNIIDB4M2QKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfWU9SVUJBCisjIGRlZmluZSBMQU5HX1lPUlVCQSAweDZhCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1pVTFUKKyMgZGVmaW5lIExBTkdfWlVMVSAweDM1CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19TQVVESV9BUkFCSUEKKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1NBVURJX0FSQUJJQSAweDAxCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19JUkFRCisjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19JUkFRIDB4MDIKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0VHWVBUCisjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19FR1lQVCAweDAzCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19MSUJZQQorIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfTElCWUEgMHgwNAorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfQUxHRVJJQQorIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfQUxHRVJJQSAweDA1CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19NT1JPQ0NPCisjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19NT1JPQ0NPIDB4MDYKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1RVTklTSUEKKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1RVTklTSUEgMHgwNworIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfT01BTgorIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfT01BTiAweDA4CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19ZRU1FTgorIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfWUVNRU4gMHgwOQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfU1lSSUEKKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1NZUklBIDB4MGEKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0pPUkRBTgorIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfSk9SREFOIDB4MGIKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0xFQkFOT04KKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX0xFQkFOT04gMHgwYworIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfS1VXQUlUCisjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19LVVdBSVQgMHgwZAorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfVUFFCisjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19VQUUgMHgwZQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfQkFIUkFJTgorIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfQkFIUkFJTiAweDBmCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19RQVRBUgorIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfUUFUQVIgMHgxMAorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19BWkVSSV9MQVRJTgorIyBkZWZpbmUgU1VCTEFOR19BWkVSSV9MQVRJTiAweDAxCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0FaRVJJX0NZUklMTElDCisjIGRlZmluZSBTVUJMQU5HX0FaRVJJX0NZUklMTElDIDB4MDIKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfQkVOR0FMSV9JTkRJQQorIyBkZWZpbmUgU1VCTEFOR19CRU5HQUxJX0lORElBIDB4MDAKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfQkVOR0FMSV9CQU5HTEFERVNICisjIGRlZmluZSBTVUJMQU5HX0JFTkdBTElfQkFOR0xBREVTSCAweDAxCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0NISU5FU0VfTUFDQVUKKyMgZGVmaW5lIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVSAweDA1CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfU09VVEhfQUZSSUNBCisjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfU09VVEhfQUZSSUNBIDB4MDcKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9KQU1BSUNBCisjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfSkFNQUlDQSAweDA4CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfQ0FSSUJCRUFOCisjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfQ0FSSUJCRUFOIDB4MDkKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9CRUxJWkUKKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9CRUxJWkUgMHgwYQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX1RSSU5JREFECisjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfVFJJTklEQUQgMHgwYgorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX1pJTUJBQldFCisjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0UgMHgwYworIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX1BISUxJUFBJTkVTCisjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVMgMHgwZAorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0lORE9ORVNJQQorIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX0lORE9ORVNJQSAweDBlCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfSE9OR0tPTkcKKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORyAweDBmCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfSU5ESUEKKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9JTkRJQSAweDEwCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfTUFMQVlTSUEKKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9NQUxBWVNJQSAweDExCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfU0lOR0FQT1JFCisjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfU0lOR0FQT1JFIDB4MTIKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0xVWEVNQk9VUkcKKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX0xVWEVNQk9VUkcgMHgwNQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfTU9OQUNPCisjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9NT05BQ08gMHgwNgorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfV0VTVElORElFUworIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfV0VTVElORElFUyAweDA3CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9SRVVOSU9OCisjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9SRVVOSU9OIDB4MDgKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0NPTkdPCisjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9DT05HTyAweDA5CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9TRU5FR0FMCisjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9TRU5FR0FMIDB4MGEKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0NBTUVST09OCisjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9DQU1FUk9PTiAweDBiCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9DT1RFRElWT0lSRQorIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfQ09URURJVk9JUkUgMHgwYworIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfTUFMSQorIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfTUFMSSAweDBkCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9NT1JPQ0NPCisjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9NT1JPQ0NPIDB4MGUKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0hBSVRJCisjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9IQUlUSSAweDBmCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0dFUk1BTl9MVVhFTUJPVVJHCisjIGRlZmluZSBTVUJMQU5HX0dFUk1BTl9MVVhFTUJPVVJHIDB4MDQKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfR0VSTUFOX0xJRUNIVEVOU1RFSU4KKyMgZGVmaW5lIFNVQkxBTkdfR0VSTUFOX0xJRUNIVEVOU1RFSU4gMHgwNQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19LQVNITUlSSV9JTkRJQQorIyBkZWZpbmUgU1VCTEFOR19LQVNITUlSSV9JTkRJQSAweDAyCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX01BTEFZX01BTEFZU0lBCisjIGRlZmluZSBTVUJMQU5HX01BTEFZX01BTEFZU0lBIDB4MDEKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfTUFMQVlfQlJVTkVJX0RBUlVTU0FMQU0KKyMgZGVmaW5lIFNVQkxBTkdfTUFMQVlfQlJVTkVJX0RBUlVTU0FMQU0gMHgwMgorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19ORVBBTElfSU5ESUEKKyMgZGVmaW5lIFNVQkxBTkdfTkVQQUxJX0lORElBIDB4MDIKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfUFVOSkFCSV9JTkRJQQorIyBkZWZpbmUgU1VCTEFOR19QVU5KQUJJX0lORElBIDB4MDAKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfUFVOSkFCSV9QQUtJU1RBTgorIyBkZWZpbmUgU1VCTEFOR19QVU5KQUJJX1BBS0lTVEFOIDB4MDEKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfUk9NQU5JQU5fUk9NQU5JQQorIyBkZWZpbmUgU1VCTEFOR19ST01BTklBTl9ST01BTklBIDB4MDAKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfUk9NQU5JQU5fTU9MRE9WQQorIyBkZWZpbmUgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBIDB4MDEKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfU0VSQklBTl9MQVRJTgorIyBkZWZpbmUgU1VCTEFOR19TRVJCSUFOX0xBVElOIDB4MDIKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfU0VSQklBTl9DWVJJTExJQworIyBkZWZpbmUgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDIDB4MDMKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfU0lOREhJX0lORElBCisjIGRlZmluZSBTVUJMQU5HX1NJTkRISV9JTkRJQSAweDAwCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1NJTkRISV9QQUtJU1RBTgorIyBkZWZpbmUgU1VCTEFOR19TSU5ESElfUEFLSVNUQU4gMHgwMQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0dVQVRFTUFMQQorIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0dVQVRFTUFMQSAweDA0CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfQ09TVEFfUklDQQorIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0NPU1RBX1JJQ0EgMHgwNQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1BBTkFNQQorIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX1BBTkFNQSAweDA2CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfRE9NSU5JQ0FOX1JFUFVCTElDCisjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfRE9NSU5JQ0FOX1JFUFVCTElDIDB4MDcKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9WRU5FWlVFTEEKKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9WRU5FWlVFTEEgMHgwOAorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0NPTE9NQklBCisjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUEgMHgwOQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1BFUlUKKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QRVJVIDB4MGEKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9BUkdFTlRJTkEKKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9BUkdFTlRJTkEgMHgwYgorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0VDVUFET1IKKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9FQ1VBRE9SIDB4MGMKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9DSElMRQorIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0NISUxFIDB4MGQKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9VUlVHVUFZCisjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfVVJVR1VBWSAweDBlCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUEFSQUdVQVkKKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QQVJBR1VBWSAweDBmCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfQk9MSVZJQQorIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0JPTElWSUEgMHgxMAorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0VMX1NBTFZBRE9SCisjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfRUxfU0FMVkFET1IgMHgxMQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0hPTkRVUkFTCisjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVMgMHgxMgorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX05JQ0FSQUdVQQorIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX05JQ0FSQUdVQSAweDEzCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUFVFUlRPX1JJQ08KKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTyAweDE0CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1NXRURJU0hfRklOTEFORAorIyBkZWZpbmUgU1VCTEFOR19TV0VESVNIX0ZJTkxBTkQgMHgwMgorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19UQU1BWklHSFRfQVJBQklDCisjIGRlZmluZSBTVUJMQU5HX1RBTUFaSUdIVF9BUkFCSUMgMHgwMQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19UQU1BWklHSFRfTEFUSU4KKyMgZGVmaW5lIFNVQkxBTkdfVEFNQVpJR0hUX0xBVElOIDB4MDIKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfVElHUklOWUFfRVRISU9QSUEKKyMgZGVmaW5lIFNVQkxBTkdfVElHUklOWUFfRVRISU9QSUEgMHgwMAorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19USUdSSU5ZQV9FUklUUkVBCisjIGRlZmluZSBTVUJMQU5HX1RJR1JJTllBX0VSSVRSRUEgMHgwMQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19VUkRVX1BBS0lTVEFOCisjIGRlZmluZSBTVUJMQU5HX1VSRFVfUEFLSVNUQU4gMHgwMQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19VUkRVX0lORElBCisjIGRlZmluZSBTVUJMQU5HX1VSRFVfSU5ESUEgMHgwMgorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19VWkJFS19MQVRJTgorIyBkZWZpbmUgU1VCTEFOR19VWkJFS19MQVRJTiAweDAxCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1VaQkVLX0NZUklMTElDCisjIGRlZmluZSBTVUJMQU5HX1VaQkVLX0NZUklMTElDIDB4MDIKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBYUEczIGRlZmluZXMgdGhlIHJlc3VsdCBvZiAnc2V0bG9jYWxlIChjYXRlZ29yeSwgTlVMTCknIGFzOgorICAgIkRpcmVjdHMgJ3NldGxvY2FsZSgpJyB0byBxdWVyeSAnY2F0ZWdvcnknIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQKKyAgICBzZXR0aW5nIG9mICdsb2NhbCcuIgorICAgSG93ZXZlciBpdCBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBleGFjdCBmb3JtYXQuICBOZWl0aGVyIGRvIFNVU1YyIGFuZAorICAgSVNPIEMgOTkuICBTbyB3ZSBjYW4gdXNlIHRoaXMgZmVhdHVyZSBvbmx5IG9uIHNlbGVjdGVkIHN5c3RlbXMgKGUuZy4KKyAgIHRob3NlIHVzaW5nIEdOVSBDIExpYnJhcnkpLiAgKi8KKyNpZiBkZWZpbmVkIF9MSUJDIHx8IChkZWZpbmVkIF9fR05VX0xJQlJBUllfXyAmJiBfX0dOVV9MSUJSQVJZX18gPj0gMikKKyMgZGVmaW5lIEhBVkVfTE9DQUxFX05VTEwKKyNlbmRpZgorCisvKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgbmFtZSwgYW5kIGNhbm9uaWNhbGl6ZSBpdCBpbnRvIFhQRyBzeW50YXgKKyAgICAgbGFuZ3VhZ2VbX3RlcnJpdG9yeVsuY29kZXNldF1dW0Btb2RpZmllcl0KKyAgIFRoZSBjb2Rlc2V0IHBhcnQgaW4gdGhlIHJlc3VsdCBpcyBub3QgcmVsaWFibGU7IHRoZSBsb2NhbGVfY2hhcnNldCgpCisgICBzaG91bGQgYmUgdXNlZCBmb3IgY29kZXNldCBpbmZvcm1hdGlvbiBpbnN0ZWFkLgorICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuICAqLworCitjb25zdCBjaGFyICoKK19ubF9sb2NhbGVfbmFtZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpCit7CisgIGNvbnN0IGNoYXIgKnJldHZhbDsKKworI2lmbmRlZiBXSU4zMgorCisgIC8qIFVzZSB0aGUgUE9TSVggbWV0aG9kcyBvZiBsb29raW5nIHRvICdMQ19BTEwnLCAnTENfeHh4JywgYW5kICdMQU5HJy4KKyAgICAgT24gc29tZSBzeXN0ZW1zIHRoaXMgY2FuIGJlIGRvbmUgYnkgdGhlICdzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCisjIGlmIGRlZmluZWQgSEFWRV9TRVRMT0NBTEUgJiYgZGVmaW5lZCBIQVZFX0xDX01FU1NBR0VTICYmIGRlZmluZWQgSEFWRV9MT0NBTEVfTlVMTAorICByZXR2YWwgPSBzZXRsb2NhbGUgKGNhdGVnb3J5LCBOVUxMKTsKKyMgZWxzZQorICAvKiBTZXR0aW5nIG9mIExDX0FMTCBvdmVyd3JpdGVzIGFsbCBvdGhlci4gICovCisgIHJldHZhbCA9IGdldGVudiAoIkxDX0FMTCIpOworICBpZiAocmV0dmFsID09IE5VTEwgfHwgcmV0dmFsWzBdID09ICdcMCcpCisgICAgeworICAgICAgLyogTmV4dCBjb21lcyB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBjYXRlZ29yeS4gICovCisgICAgICByZXR2YWwgPSBnZXRlbnYgKGNhdGVnb3J5bmFtZSk7CisgICAgICBpZiAocmV0dmFsID09IE5VTEwgfHwgcmV0dmFsWzBdID09ICdcMCcpCisJeworCSAgLyogTGFzdCBwb3NzaWJpbGl0eSBpcyB0aGUgTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gICovCisJICByZXR2YWwgPSBnZXRlbnYgKCJMQU5HIik7CisJICBpZiAocmV0dmFsID09IE5VTEwgfHwgcmV0dmFsWzBdID09ICdcMCcpCisJICAgIC8qIFdlIHVzZSBDIGFzIHRoZSBkZWZhdWx0IGRvbWFpbi4gIFBPU0lYIHNheXMgdGhpcyBpcworCSAgICAgICBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLiAgKi8KKwkgICAgcmV0dmFsID0gIkMiOworCX0KKyAgICB9CisjIGVuZGlmCisKKyAgcmV0dXJuIHJldHZhbDsKKworI2Vsc2UgLyogV0lOMzIgKi8KKworICAvKiBSZXR1cm4gYW4gWFBHIHN0eWxlIGxvY2FsZSBuYW1lIGxhbmd1YWdlW190ZXJyaXRvcnldW0Btb2RpZmllcl0uCisgICAgIERvbid0IGV2ZW4gYm90aGVyIGRldGVybWluaW5nIHRoZSBjb2Rlc2V0OyBpdCdzIG5vdCB1c2VmdWwgaW4gdGhpcworICAgICBjb250ZXh0LCBiZWNhdXNlIG1lc3NhZ2UgY2F0YWxvZ3MgYXJlIG5vdCBzcGVjaWZpYyB0byBhIHNpbmdsZQorICAgICBjb2Rlc2V0LiAgKi8KKworICBMQ0lEIGxjaWQ7CisgIExBTkdJRCBsYW5naWQ7CisgIGludCBwcmltYXJ5LCBzdWI7CisKKyAgLyogTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSBzeXN0ZW0gc2V0dGluZ3MgdGhyb3VnaCBlbnZpcm9ubWVudAorICAgICB2YXJpYWJsZXMsIGFzIG9uIFBPU0lYIHN5c3RlbXMuICAqLworICByZXR2YWwgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorICAgIHJldHVybiByZXR2YWw7CisgIHJldHZhbCA9IGdldGVudiAoY2F0ZWdvcnluYW1lKTsKKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorICAgIHJldHVybiByZXR2YWw7CisgIHJldHZhbCA9IGdldGVudiAoIkxBTkciKTsKKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorICAgIHJldHVybiByZXR2YWw7CisKKyAgLyogVXNlIG5hdGl2ZSBXaW4zMiBBUEkgbG9jYWxlIElELiAgKi8KKyAgbGNpZCA9IEdldFRocmVhZExvY2FsZSAoKTsKKworICAvKiBTdHJpcCBvZmYgdGhlIHNvcnRpbmcgcnVsZXMsIGtlZXAgb25seSB0aGUgbGFuZ3VhZ2UgcGFydC4gICovCisgIGxhbmdpZCA9IExBTkdJREZST01MQ0lEIChsY2lkKTsKKworICAvKiBTcGxpdCBpbnRvIGxhbmd1YWdlIGFuZCB0ZXJyaXRvcnkgcGFydC4gICovCisgIHByaW1hcnkgPSBQUklNQVJZTEFOR0lEIChsYW5naWQpOworICBzdWIgPSBTVUJMQU5HSUQgKGxhbmdpZCk7CisKKyAgLyogRGlzcGF0Y2ggb24gbGFuZ3VhZ2UuCisgICAgIFNlZSBhbHNvIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9vbmxpbmVkYXQvbGFuZ3VhZ2VzLmh0bWwgLgorICAgICBGb3IgZGV0YWlscyBhYm91dCBsYW5ndWFnZXMsIHNlZSBodHRwOi8vd3d3LmV0aG5vbG9ndWUuY29tLyAuICAqLworICBzd2l0Y2ggKHByaW1hcnkpCisgICAgeworICAgIGNhc2UgTEFOR19BRlJJS0FBTlM6IHJldHVybiAiYWZfWkEiOworICAgIGNhc2UgTEFOR19BTEJBTklBTjogcmV0dXJuICJzcV9BTCI7CisgICAgY2FzZSBMQU5HX0FNSEFSSUM6IHJldHVybiAiYW1fRVQiOworICAgIGNhc2UgTEFOR19BUkFCSUM6CisgICAgICBzd2l0Y2ggKHN1YikKKwl7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19TQVVESV9BUkFCSUE6IHJldHVybiAiYXJfU0EiOworCWNhc2UgU1VCTEFOR19BUkFCSUNfSVJBUTogcmV0dXJuICJhcl9JUSI7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19FR1lQVDogcmV0dXJuICJhcl9FRyI7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19MSUJZQTogcmV0dXJuICJhcl9MWSI7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19BTEdFUklBOiByZXR1cm4gImFyX0RaIjsKKwljYXNlIFNVQkxBTkdfQVJBQklDX01PUk9DQ086IHJldHVybiAiYXJfTUEiOworCWNhc2UgU1VCTEFOR19BUkFCSUNfVFVOSVNJQTogcmV0dXJuICJhcl9UTiI7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19PTUFOOiByZXR1cm4gImFyX09NIjsKKwljYXNlIFNVQkxBTkdfQVJBQklDX1lFTUVOOiByZXR1cm4gImFyX1lFIjsKKwljYXNlIFNVQkxBTkdfQVJBQklDX1NZUklBOiByZXR1cm4gImFyX1NZIjsKKwljYXNlIFNVQkxBTkdfQVJBQklDX0pPUkRBTjogcmV0dXJuICJhcl9KTyI7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19MRUJBTk9OOiByZXR1cm4gImFyX0xCIjsKKwljYXNlIFNVQkxBTkdfQVJBQklDX0tVV0FJVDogcmV0dXJuICJhcl9LVyI7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19VQUU6IHJldHVybiAiYXJfQUUiOworCWNhc2UgU1VCTEFOR19BUkFCSUNfQkFIUkFJTjogcmV0dXJuICJhcl9CSCI7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19RQVRBUjogcmV0dXJuICJhcl9RQSI7CisJfQorICAgICAgcmV0dXJuICJhciI7CisgICAgY2FzZSBMQU5HX0FSTUVOSUFOOiByZXR1cm4gImh5X0FNIjsKKyAgICBjYXNlIExBTkdfQVNTQU1FU0U6IHJldHVybiAiYXNfSU4iOworICAgIGNhc2UgTEFOR19BWkVSSToKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwkvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBBemVyYmFpamFuaSBsb2NhbGVzIGFwcGVhciBvbiBVbml4LiAgKi8KKwljYXNlIFNVQkxBTkdfQVpFUklfTEFUSU46IHJldHVybiAiYXpfQVpAbGF0aW4iOworCWNhc2UgU1VCTEFOR19BWkVSSV9DWVJJTExJQzogcmV0dXJuICJhel9BWkBjeXJpbGxpYyI7CisJfQorICAgICAgcmV0dXJuICJheiI7CisgICAgY2FzZSBMQU5HX0JBU1FVRToKKyAgICAgIHJldHVybiAiZXUiOyAvKiBBbWJpZ3VvdXM6IGNvdWxkIGJlICJldV9FUyIgb3IgImV1X0ZSIi4gICovCisgICAgY2FzZSBMQU5HX0JFTEFSVVNJQU46IHJldHVybiAiYmVfQlkiOworICAgIGNhc2UgTEFOR19CRU5HQUxJOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19CRU5HQUxJX0lORElBOiByZXR1cm4gImJuX0lOIjsKKwljYXNlIFNVQkxBTkdfQkVOR0FMSV9CQU5HTEFERVNIOiByZXR1cm4gImJuX0JEIjsKKwl9CisgICAgICByZXR1cm4gImJuIjsKKyAgICBjYXNlIExBTkdfQlVMR0FSSUFOOiByZXR1cm4gImJnX0JHIjsKKyAgICBjYXNlIExBTkdfQlVSTUVTRTogcmV0dXJuICJteV9NTSI7CisgICAgY2FzZSBMQU5HX0NBTUJPRElBTjogcmV0dXJuICJrbV9LSCI7CisgICAgY2FzZSBMQU5HX0NBVEFMQU46IHJldHVybiAiY2FfRVMiOworICAgIGNhc2UgTEFOR19DSEVST0tFRTogcmV0dXJuICJjaHJfVVMiOworICAgIGNhc2UgTEFOR19DSElORVNFOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19DSElORVNFX1RSQURJVElPTkFMOiByZXR1cm4gInpoX1RXIjsKKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9TSU1QTElGSUVEOiByZXR1cm4gInpoX0NOIjsKKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9IT05HS09ORzogcmV0dXJuICJ6aF9ISyI7CisJY2FzZSBTVUJMQU5HX0NISU5FU0VfU0lOR0FQT1JFOiByZXR1cm4gInpoX1NHIjsKKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVTogcmV0dXJuICJ6aF9NTyI7CisJfQorICAgICAgcmV0dXJuICJ6aCI7CisgICAgY2FzZSBMQU5HX0NST0FUSUFOOgkJLyogTEFOR19DUk9BVElBTiA9PSBMQU5HX1NFUkJJQU4KKwkJCQkgKiBXaGF0IHVzZWQgdG8gYmUgY2FsbGVkIFNlcmJvLUNyb2F0aWFuCisJCQkJICogc2hvdWxkIHJlYWxseSBub3cgYmUgdHdvIHNlcGFyYXRlCisJCQkJICogbGFuZ3VhZ2VzIGJlY2F1c2Ugb2YgcG9saXRpY2FsIHJlYXNvbnMuCisJCQkJICogKFNheXMgdG1sLCB3aG8ga25vd3Mgbm90aGluZyBhYm91dCBTZXJiaWFuCisJCQkJICogb3IgQ3JvYXRpYW4uKQorCQkJCSAqIChJIGNhbiBmZWVsIHRob3NlIGZsYW1lcyBjb21pbmcgYWxyZWFkeS4pCisJCQkJICovCisgICAgICBzd2l0Y2ggKHN1YikKKwl7CisJY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAiaHJfSFIiOworCWNhc2UgU1VCTEFOR19TRVJCSUFOX0xBVElOOiByZXR1cm4gInNyX0NTIjsKKwljYXNlIFNVQkxBTkdfU0VSQklBTl9DWVJJTExJQzogcmV0dXJuICJzcl9DU0BjeXJpbGxpYyI7CisJfQorICAgICAgcmV0dXJuICJociI7CisgICAgY2FzZSBMQU5HX0NaRUNIOiByZXR1cm4gImNzX0NaIjsKKyAgICBjYXNlIExBTkdfREFOSVNIOiByZXR1cm4gImRhX0RLIjsKKyAgICBjYXNlIExBTkdfRElWRUhJOiByZXR1cm4gImR2X01WIjsKKyAgICBjYXNlIExBTkdfRFVUQ0g6CisgICAgICBzd2l0Y2ggKHN1YikKKwl7CisJY2FzZSBTVUJMQU5HX0RVVENIOiByZXR1cm4gIm5sX05MIjsKKwljYXNlIFNVQkxBTkdfRFVUQ0hfQkVMR0lBTjogLyogRkxFTUlTSCwgVkxBQU1TICovIHJldHVybiAibmxfQkUiOworCX0KKyAgICAgIHJldHVybiAibmwiOworICAgIGNhc2UgTEFOR19FRE86IHJldHVybiAiYmluX05HIjsKKyAgICBjYXNlIExBTkdfRU5HTElTSDoKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwkvKiBTVUJMQU5HX0VOR0xJU0hfVVMgPT0gU1VCTEFOR19ERUZBVUxULiBIZWguIEkgdGhvdWdodAorCSAqIEVuZ2xpc2ggd2FzIHRoZSBsYW5ndWFnZSBzcG9rZW4gaW4gRW5nbGFuZC4KKwkgKiBPaCB3ZWxsLgorCSAqLworCWNhc2UgU1VCTEFOR19FTkdMSVNIX1VTOiByZXR1cm4gImVuX1VTIjsKKwljYXNlIFNVQkxBTkdfRU5HTElTSF9VSzogcmV0dXJuICJlbl9HQiI7CisJY2FzZSBTVUJMQU5HX0VOR0xJU0hfQVVTOiByZXR1cm4gImVuX0FVIjsKKwljYXNlIFNVQkxBTkdfRU5HTElTSF9DQU46IHJldHVybiAiZW5fQ0EiOworCWNhc2UgU1VCTEFOR19FTkdMSVNIX05aOiByZXR1cm4gImVuX05aIjsKKwljYXNlIFNVQkxBTkdfRU5HTElTSF9FSVJFOiByZXR1cm4gImVuX0lFIjsKKwljYXNlIFNVQkxBTkdfRU5HTElTSF9TT1VUSF9BRlJJQ0E6IHJldHVybiAiZW5fWkEiOworCWNhc2UgU1VCTEFOR19FTkdMSVNIX0pBTUFJQ0E6IHJldHVybiAiZW5fSk0iOworCWNhc2UgU1VCTEFOR19FTkdMSVNIX0NBUklCQkVBTjogcmV0dXJuICJlbl9HRCI7IC8qIEdyZW5hZGE/ICovCisJY2FzZSBTVUJMQU5HX0VOR0xJU0hfQkVMSVpFOiByZXR1cm4gImVuX0JaIjsKKwljYXNlIFNVQkxBTkdfRU5HTElTSF9UUklOSURBRDogcmV0dXJuICJlbl9UVCI7CisJY2FzZSBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0U6IHJldHVybiAiZW5fWlciOworCWNhc2UgU1VCTEFOR19FTkdMSVNIX1BISUxJUFBJTkVTOiByZXR1cm4gImVuX1BIIjsKKwljYXNlIFNVQkxBTkdfRU5HTElTSF9JTkRPTkVTSUE6IHJldHVybiAiZW5fSUQiOworCWNhc2UgU1VCTEFOR19FTkdMSVNIX0hPTkdLT05HOiByZXR1cm4gImVuX0hLIjsKKwljYXNlIFNVQkxBTkdfRU5HTElTSF9JTkRJQTogcmV0dXJuICJlbl9JTiI7CisJY2FzZSBTVUJMQU5HX0VOR0xJU0hfTUFMQVlTSUE6IHJldHVybiAiZW5fTVkiOworCWNhc2UgU1VCTEFOR19FTkdMSVNIX1NJTkdBUE9SRTogcmV0dXJuICJlbl9TRyI7CisJfQorICAgICAgcmV0dXJuICJlbiI7CisgICAgY2FzZSBMQU5HX0VTVE9OSUFOOiByZXR1cm4gImV0X0VFIjsKKyAgICBjYXNlIExBTkdfRkFFUk9FU0U6IHJldHVybiAiZm9fRk8iOworICAgIGNhc2UgTEFOR19GQVJTSTogcmV0dXJuICJmYV9JUiI7CisgICAgY2FzZSBMQU5HX0ZJTk5JU0g6IHJldHVybiAiZmlfRkkiOworICAgIGNhc2UgTEFOR19GUkVOQ0g6CisgICAgICBzd2l0Y2ggKHN1YikKKwl7CisJY2FzZSBTVUJMQU5HX0ZSRU5DSDogcmV0dXJuICJmcl9GUiI7CisJY2FzZSBTVUJMQU5HX0ZSRU5DSF9CRUxHSUFOOiAvKiBXQUxMT09OICovIHJldHVybiAiZnJfQkUiOworCWNhc2UgU1VCTEFOR19GUkVOQ0hfQ0FOQURJQU46IHJldHVybiAiZnJfQ0EiOworCWNhc2UgU1VCTEFOR19GUkVOQ0hfU1dJU1M6IHJldHVybiAiZnJfQ0giOworCWNhc2UgU1VCTEFOR19GUkVOQ0hfTFVYRU1CT1VSRzogcmV0dXJuICJmcl9MVSI7CisJY2FzZSBTVUJMQU5HX0ZSRU5DSF9NT05BQ086IHJldHVybiAiZnJfTUMiOworCWNhc2UgU1VCTEFOR19GUkVOQ0hfV0VTVElORElFUzogcmV0dXJuICJmciI7IC8qIENhcmliYmVhbj8gKi8KKwljYXNlIFNVQkxBTkdfRlJFTkNIX1JFVU5JT046IHJldHVybiAiZnJfUkUiOworCWNhc2UgU1VCTEFOR19GUkVOQ0hfQ09OR086IHJldHVybiAiZnJfQ0ciOworCWNhc2UgU1VCTEFOR19GUkVOQ0hfU0VORUdBTDogcmV0dXJuICJmcl9TTiI7CisJY2FzZSBTVUJMQU5HX0ZSRU5DSF9DQU1FUk9PTjogcmV0dXJuICJmcl9DTSI7CisJY2FzZSBTVUJMQU5HX0ZSRU5DSF9DT1RFRElWT0lSRTogcmV0dXJuICJmcl9DSSI7CisJY2FzZSBTVUJMQU5HX0ZSRU5DSF9NQUxJOiByZXR1cm4gImZyX01MIjsKKwljYXNlIFNVQkxBTkdfRlJFTkNIX01PUk9DQ086IHJldHVybiAiZnJfTUEiOworCWNhc2UgU1VCTEFOR19GUkVOQ0hfSEFJVEk6IHJldHVybiAiZnJfSFQiOworCX0KKyAgICAgIHJldHVybiAiZnIiOworICAgIGNhc2UgTEFOR19GUklTSUFOOiByZXR1cm4gImZ5X05MIjsKKyAgICBjYXNlIExBTkdfRlVMRlVMREU6CisgICAgICAvKiBTcG9rZW4gaW4gTmlnZXJpYSwgR3VpbmVhLCBTZW5lZ2FsLCBNYWxpLCBOaWdlciwgQ2FtZXJvb24sIEJlbmluLiAqLworICAgICAgcmV0dXJuICJmZl9ORyI7CisgICAgY2FzZSBMQU5HX0dBRUxJQzoKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwljYXNlIDB4MDE6IC8qIFNDT1RUSVNIICovIHJldHVybiAiZ2RfR0IiOworCWNhc2UgMHgwMjogLyogSVJJU0ggKi8gcmV0dXJuICJnYV9JRSI7CisJfQorICAgICAgcmV0dXJuICJDIjsKKyAgICBjYXNlIExBTkdfR0FMSUNJQU46IHJldHVybiAiZ2xfRVMiOworICAgIGNhc2UgTEFOR19HRU9SR0lBTjogcmV0dXJuICJrYV9HRSI7CisgICAgY2FzZSBMQU5HX0dFUk1BTjoKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwljYXNlIFNVQkxBTkdfR0VSTUFOOiByZXR1cm4gImRlX0RFIjsKKwljYXNlIFNVQkxBTkdfR0VSTUFOX1NXSVNTOiByZXR1cm4gImRlX0NIIjsKKwljYXNlIFNVQkxBTkdfR0VSTUFOX0FVU1RSSUFOOiByZXR1cm4gImRlX0FUIjsKKwljYXNlIFNVQkxBTkdfR0VSTUFOX0xVWEVNQk9VUkc6IHJldHVybiAiZGVfTFUiOworCWNhc2UgU1VCTEFOR19HRVJNQU5fTElFQ0hURU5TVEVJTjogcmV0dXJuICJkZV9MSSI7CisJfQorICAgICAgcmV0dXJuICJkZSI7CisgICAgY2FzZSBMQU5HX0dSRUVLOiByZXR1cm4gImVsX0dSIjsKKyAgICBjYXNlIExBTkdfR1VBUkFOSTogcmV0dXJuICJnbl9QWSI7CisgICAgY2FzZSBMQU5HX0dVSkFSQVRJOiByZXR1cm4gImd1X0lOIjsKKyAgICBjYXNlIExBTkdfSEFVU0E6IHJldHVybiAiaGFfTkciOworICAgIGNhc2UgTEFOR19IQVdBSUlBTjoKKyAgICAgIC8qIEZJWE1FOiBEbyB0aGV5IG1lYW4gSGF3YWlpYW4gKCJoYXdfVVMiLCAxMDAwIHNwZWFrZXJzKQorCSBvciBIYXdhaWkgQ3Jlb2xlIEVuZ2xpc2ggKCJjcGVfVVMiLCA2MDAwMDAgc3BlYWtlcnMpPyAgKi8KKyAgICAgIHJldHVybiAiY3BlX1VTIjsKKyAgICBjYXNlIExBTkdfSEVCUkVXOiByZXR1cm4gImhlX0lMIjsKKyAgICBjYXNlIExBTkdfSElOREk6IHJldHVybiAiaGlfSU4iOworICAgIGNhc2UgTEFOR19IVU5HQVJJQU46IHJldHVybiAiaHVfSFUiOworICAgIGNhc2UgTEFOR19JQklCSU86IHJldHVybiAibmljX05HIjsKKyAgICBjYXNlIExBTkdfSUNFTEFORElDOiByZXR1cm4gImlzX0lTIjsKKyAgICBjYXNlIExBTkdfSUdCTzogcmV0dXJuICJpZ19ORyI7CisgICAgY2FzZSBMQU5HX0lORE9ORVNJQU46IHJldHVybiAiaWRfSUQiOworICAgIGNhc2UgTEFOR19JTlVLVElUVVQ6IHJldHVybiAiaXVfQ0EiOworICAgIGNhc2UgTEFOR19JVEFMSUFOOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19JVEFMSUFOOiByZXR1cm4gIml0X0lUIjsKKwljYXNlIFNVQkxBTkdfSVRBTElBTl9TV0lTUzogcmV0dXJuICJpdF9DSCI7CisJfQorICAgICAgcmV0dXJuICJpdCI7CisgICAgY2FzZSBMQU5HX0pBUEFORVNFOiByZXR1cm4gImphX0pQIjsKKyAgICBjYXNlIExBTkdfS0FOTkFEQTogcmV0dXJuICJrbl9JTiI7CisgICAgY2FzZSBMQU5HX0tBTlVSSTogcmV0dXJuICJrcl9ORyI7CisgICAgY2FzZSBMQU5HX0tBU0hNSVJJOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19ERUZBVUxUOiByZXR1cm4gImtzX1BLIjsKKwljYXNlIFNVQkxBTkdfS0FTSE1JUklfSU5ESUE6IHJldHVybiAia3NfSU4iOworCX0KKyAgICAgIHJldHVybiAia3MiOworICAgIGNhc2UgTEFOR19LQVpBSzogcmV0dXJuICJra19LWiI7CisgICAgY2FzZSBMQU5HX0tPTktBTkk6CisgICAgICAvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBzdWNoIGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworICAgICAgcmV0dXJuICJrb2tfSU4iOworICAgIGNhc2UgTEFOR19LT1JFQU46IHJldHVybiAia29fS1IiOworICAgIGNhc2UgTEFOR19LWVJHWVo6IHJldHVybiAia3lfS0ciOworICAgIGNhc2UgTEFOR19MQU86IHJldHVybiAibG9fTEEiOworICAgIGNhc2UgTEFOR19MQVRJTjogcmV0dXJuICJsYV9WQSI7CisgICAgY2FzZSBMQU5HX0xBVFZJQU46IHJldHVybiAibHZfTFYiOworICAgIGNhc2UgTEFOR19MSVRIVUFOSUFOOiByZXR1cm4gImx0X0xUIjsKKyAgICBjYXNlIExBTkdfTUFDRURPTklBTjogcmV0dXJuICJta19NSyI7CisgICAgY2FzZSBMQU5HX01BTEFZOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19NQUxBWV9NQUxBWVNJQTogcmV0dXJuICJtc19NWSI7CisJY2FzZSBTVUJMQU5HX01BTEFZX0JSVU5FSV9EQVJVU1NBTEFNOiByZXR1cm4gIm1zX0JOIjsKKwl9CisgICAgICByZXR1cm4gIm1zIjsKKyAgICBjYXNlIExBTkdfTUFMQVlBTEFNOiByZXR1cm4gIm1sX0lOIjsKKyAgICBjYXNlIExBTkdfTUFMVEVTRTogcmV0dXJuICJtdF9NVCI7CisgICAgY2FzZSBMQU5HX01BTklQVVJJOgorICAgICAgLyogRklYTUU6IEFkanVzdCB0aGlzIHdoZW4gc3VjaCBsb2NhbGVzIGFwcGVhciBvbiBVbml4LiAgKi8KKyAgICAgIHJldHVybiAibW5pX0lOIjsKKyAgICBjYXNlIExBTkdfTUFSQVRISTogcmV0dXJuICJtcl9JTiI7CisgICAgY2FzZSBMQU5HX01PTkdPTElBTjoKKyAgICAgIHJldHVybiAibW4iOyAvKiBBbWJpZ3VvdXM6IGNvdWxkIGJlICJtbl9DTiIgb3IgIm1uX01OIi4gICovCisgICAgY2FzZSBMQU5HX05FUEFMSToKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwljYXNlIFNVQkxBTkdfREVGQVVMVDogcmV0dXJuICJuZV9OUCI7CisJY2FzZSBTVUJMQU5HX05FUEFMSV9JTkRJQTogcmV0dXJuICJuZV9JTiI7CisJfQorICAgICAgcmV0dXJuICJuZSI7CisgICAgY2FzZSBMQU5HX05PUldFR0lBTjoKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwljYXNlIFNVQkxBTkdfTk9SV0VHSUFOX0JPS01BTDogcmV0dXJuICJub19OTyI7CisJY2FzZSBTVUJMQU5HX05PUldFR0lBTl9OWU5PUlNLOiByZXR1cm4gIm5uX05PIjsKKwl9CisgICAgICByZXR1cm4gIm5vIjsKKyAgICBjYXNlIExBTkdfT1JJWUE6IHJldHVybiAib3JfSU4iOworICAgIGNhc2UgTEFOR19PUk9NTzogcmV0dXJuICJvbV9FVCI7CisgICAgY2FzZSBMQU5HX1BBUElBTUVOVFU6IHJldHVybiAicGFwX0FOIjsKKyAgICBjYXNlIExBTkdfUEFTSFRPOgorICAgICAgcmV0dXJuICJwcyI7IC8qIEFtYmlndW91czogY291bGQgYmUgInBzX1BLIiBvciAicHNfQUYiLiAgKi8KKyAgICBjYXNlIExBTkdfUE9MSVNIOiByZXR1cm4gInBsX1BMIjsKKyAgICBjYXNlIExBTkdfUE9SVFVHVUVTRToKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwljYXNlIFNVQkxBTkdfUE9SVFVHVUVTRTogcmV0dXJuICJwdF9QVCI7CisJLyogSG1tLiBTVUJMQU5HX1BPUlRVR1VFU0VfQlJBWklMSUFOID09IFNVQkxBTkdfREVGQVVMVC4KKwkgICBTYW1lIHBoZW5vbWVub24gYXMgU1VCTEFOR19FTkdMSVNIX1VTID09IFNVQkxBTkdfREVGQVVMVC4gKi8KKwljYXNlIFNVQkxBTkdfUE9SVFVHVUVTRV9CUkFaSUxJQU46IHJldHVybiAicHRfQlIiOworCX0KKyAgICAgIHJldHVybiAicHQiOworICAgIGNhc2UgTEFOR19QVU5KQUJJOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19QVU5KQUJJX0lORElBOiByZXR1cm4gInBhX0lOIjsgLyogR3VybXVraGkgc2NyaXB0ICovCisJY2FzZSBTVUJMQU5HX1BVTkpBQklfUEFLSVNUQU46IHJldHVybiAicGFfUEsiOyAvKiBBcmFiaWMgc2NyaXB0ICovCisJfQorICAgICAgcmV0dXJuICJwYSI7CisgICAgY2FzZSBMQU5HX1JIQUVUT19ST01BTkNFOiByZXR1cm4gInJtX0NIIjsKKyAgICBjYXNlIExBTkdfUk9NQU5JQU46CisgICAgICBzd2l0Y2ggKHN1YikKKwl7CisJY2FzZSBTVUJMQU5HX1JPTUFOSUFOX1JPTUFOSUE6IHJldHVybiAicm9fUk8iOworCWNhc2UgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBOiByZXR1cm4gInJvX01EIjsKKwl9CisgICAgICByZXR1cm4gInJvIjsKKyAgICBjYXNlIExBTkdfUlVTU0lBTjoKKyAgICAgIHJldHVybiAicnUiOyAvKiBBbWJpZ3VvdXM6IGNvdWxkIGJlICJydV9SVSIgb3IgInJ1X1VBIiBvciAicnVfTUQiLiAgKi8KKyAgICBjYXNlIExBTkdfU0FBTUk6IC8qIGFjdHVhbGx5IE5vcnRoZXJuIFNhbWkgKi8gcmV0dXJuICJzZV9OTyI7CisgICAgY2FzZSBMQU5HX1NBTlNLUklUOiByZXR1cm4gInNhX0lOIjsKKyAgICBjYXNlIExBTkdfU0lOREhJOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19TSU5ESElfSU5ESUE6IHJldHVybiAic2RfSU4iOworCWNhc2UgU1VCTEFOR19TSU5ESElfUEFLSVNUQU46IHJldHVybiAic2RfUEsiOworCX0KKyAgICAgIHJldHVybiAic2QiOworICAgIGNhc2UgTEFOR19TSU5IQUxFU0U6IHJldHVybiAic2lfTEsiOworICAgIGNhc2UgTEFOR19TTE9WQUs6IHJldHVybiAic2tfU0siOworICAgIGNhc2UgTEFOR19TTE9WRU5JQU46IHJldHVybiAic2xfU0kiOworICAgIGNhc2UgTEFOR19TT01BTEk6IHJldHVybiAic29fU08iOworICAgIGNhc2UgTEFOR19TT1JCSUFOOgorICAgICAgLyogRklYTUU6IEFkanVzdCB0aGlzIHdoZW4gc3VjaCBsb2NhbGVzIGFwcGVhciBvbiBVbml4LiAgKi8KKyAgICAgIHJldHVybiAid2VuX0RFIjsKKyAgICBjYXNlIExBTkdfU1BBTklTSDoKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwljYXNlIFNVQkxBTkdfU1BBTklTSDogcmV0dXJuICJlc19FUyI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfTUVYSUNBTjogcmV0dXJuICJlc19NWCI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfTU9ERVJOOgorCSAgcmV0dXJuICJlc19FU0Btb2Rlcm4iOwkvKiBub3Qgc2VlbiBvbiBVbml4ICovCisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfR1VBVEVNQUxBOiByZXR1cm4gImVzX0dUIjsKKwljYXNlIFNVQkxBTkdfU1BBTklTSF9DT1NUQV9SSUNBOiByZXR1cm4gImVzX0NSIjsKKwljYXNlIFNVQkxBTkdfU1BBTklTSF9QQU5BTUE6IHJldHVybiAiZXNfUEEiOworCWNhc2UgU1VCTEFOR19TUEFOSVNIX0RPTUlOSUNBTl9SRVBVQkxJQzogcmV0dXJuICJlc19ETyI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfVkVORVpVRUxBOiByZXR1cm4gImVzX1ZFIjsKKwljYXNlIFNVQkxBTkdfU1BBTklTSF9DT0xPTUJJQTogcmV0dXJuICJlc19DTyI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfUEVSVTogcmV0dXJuICJlc19QRSI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQVJHRU5USU5BOiByZXR1cm4gImVzX0FSIjsKKwljYXNlIFNVQkxBTkdfU1BBTklTSF9FQ1VBRE9SOiByZXR1cm4gImVzX0VDIjsKKwljYXNlIFNVQkxBTkdfU1BBTklTSF9DSElMRTogcmV0dXJuICJlc19DTCI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfVVJVR1VBWTogcmV0dXJuICJlc19VWSI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfUEFSQUdVQVk6IHJldHVybiAiZXNfUFkiOworCWNhc2UgU1VCTEFOR19TUEFOSVNIX0JPTElWSUE6IHJldHVybiAiZXNfQk8iOworCWNhc2UgU1VCTEFOR19TUEFOSVNIX0VMX1NBTFZBRE9SOiByZXR1cm4gImVzX1NWIjsKKwljYXNlIFNVQkxBTkdfU1BBTklTSF9IT05EVVJBUzogcmV0dXJuICJlc19ITiI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfTklDQVJBR1VBOiByZXR1cm4gImVzX05JIjsKKwljYXNlIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTzogcmV0dXJuICJlc19QUiI7CisJfQorICAgICAgcmV0dXJuICJlcyI7CisgICAgY2FzZSBMQU5HX1NVVFU6IHJldHVybiAiYm50X1RaIjsgLyogb3IgInN0X0xTIiBvciAibnNvX1pBIj8gKi8KKyAgICBjYXNlIExBTkdfU1dBSElMSTogcmV0dXJuICJzd19LRSI7CisgICAgY2FzZSBMQU5HX1NXRURJU0g6CisgICAgICBzd2l0Y2ggKHN1YikKKwl7CisJY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAic3ZfU0UiOworCWNhc2UgU1VCTEFOR19TV0VESVNIX0ZJTkxBTkQ6IHJldHVybiAic3ZfRkkiOworCX0KKyAgICAgIHJldHVybiAic3YiOworICAgIGNhc2UgTEFOR19TWVJJQUM6IHJldHVybiAic3lyX1RSIjsgLyogQW4gZXh0aW5jdCBsYW5ndWFnZS4gICovCisgICAgY2FzZSBMQU5HX1RBR0FMT0c6IHJldHVybiAidGxfUEgiOworICAgIGNhc2UgTEFOR19UQUpJSzogcmV0dXJuICJ0Z19USiI7CisgICAgY2FzZSBMQU5HX1RBTUFaSUdIVDoKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwkvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBUYW1hemlnaHQgbG9jYWxlcyBhcHBlYXIgb24gVW5peC4gICovCisJY2FzZSBTVUJMQU5HX1RBTUFaSUdIVF9BUkFCSUM6IHJldHVybiAiYmVyX01BQGFyYWJpYyI7CisJY2FzZSBTVUJMQU5HX1RBTUFaSUdIVF9MQVRJTjogcmV0dXJuICJiZXJfTUFAbGF0aW4iOworCX0KKyAgICAgIHJldHVybiAiYmVyX01BIjsKKyAgICBjYXNlIExBTkdfVEFNSUw6CisgICAgICByZXR1cm4gInRhIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAidGFfSU4iIG9yICJ0YV9MSyIgb3IgInRhX1NHIi4gICovCisgICAgY2FzZSBMQU5HX1RBVEFSOiByZXR1cm4gInR0X1JVIjsKKyAgICBjYXNlIExBTkdfVEVMVUdVOiByZXR1cm4gInRlX0lOIjsKKyAgICBjYXNlIExBTkdfVEhBSTogcmV0dXJuICJ0aF9USCI7CisgICAgY2FzZSBMQU5HX1RJQkVUQU46IHJldHVybiAiYm9fQ04iOworICAgIGNhc2UgTEFOR19USUdSSU5ZQToKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwljYXNlIFNVQkxBTkdfVElHUklOWUFfRVRISU9QSUE6IHJldHVybiAidGlfRVQiOworCWNhc2UgU1VCTEFOR19USUdSSU5ZQV9FUklUUkVBOiByZXR1cm4gInRpX0VSIjsKKwl9CisgICAgICByZXR1cm4gInRpIjsKKyAgICBjYXNlIExBTkdfVFNPTkdBOiByZXR1cm4gInRzX1pBIjsKKyAgICBjYXNlIExBTkdfVFNXQU5BOiByZXR1cm4gInRuX0JXIjsKKyAgICBjYXNlIExBTkdfVFVSS0lTSDogcmV0dXJuICJ0cl9UUiI7CisgICAgY2FzZSBMQU5HX1RVUktNRU46IHJldHVybiAidGtfVE0iOworICAgIGNhc2UgTEFOR19VS1JBSU5JQU46IHJldHVybiAidWtfVUEiOworICAgIGNhc2UgTEFOR19VUkRVOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19VUkRVX1BBS0lTVEFOOiByZXR1cm4gInVyX1BLIjsKKwljYXNlIFNVQkxBTkdfVVJEVV9JTkRJQTogcmV0dXJuICJ1cl9JTiI7CisJfQorICAgICAgcmV0dXJuICJ1ciI7CisgICAgY2FzZSBMQU5HX1VaQkVLOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19VWkJFS19MQVRJTjogcmV0dXJuICJ1el9VWiI7CisJY2FzZSBTVUJMQU5HX1VaQkVLX0NZUklMTElDOiByZXR1cm4gInV6X1VaQGN5cmlsbGljIjsKKwl9CisgICAgICByZXR1cm4gInV6IjsKKyAgICBjYXNlIExBTkdfVkVOREE6IHJldHVybiAidmVfWkEiOworICAgIGNhc2UgTEFOR19WSUVUTkFNRVNFOiByZXR1cm4gInZpX1ZOIjsKKyAgICBjYXNlIExBTkdfV0VMU0g6IHJldHVybiAiY3lfR0IiOworICAgIGNhc2UgTEFOR19YSE9TQTogcmV0dXJuICJ4aF9aQSI7CisgICAgY2FzZSBMQU5HX1lJOiByZXR1cm4gInNpdF9DTiI7CisgICAgY2FzZSBMQU5HX1lJRERJU0g6IHJldHVybiAieWlfSUwiOworICAgIGNhc2UgTEFOR19ZT1JVQkE6IHJldHVybiAieW9fTkciOworICAgIGNhc2UgTEFOR19aVUxVOiByZXR1cm4gInp1X1pBIjsKKyAgICBkZWZhdWx0OiByZXR1cm4gIkMiOworICAgIH0KKworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9pbnRsL2xvZy5jIGIvaW50bC9sb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjYwNzZlCi0tLSAvZGV2L251bGwKKysrIGIvaW50bC9sb2cuYwpAQCAtMCwwICsxLDk4IEBACisvKiBMb2cgZmlsZSBvdXRwdXQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisvKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBQcmludCBhbiBBU0NJSSBzdHJpbmcgd2l0aCBxdW90ZXMgYW5kIGVzY2FwZSBzZXF1ZW5jZXMgd2hlcmUgbmVlZGVkLiAgKi8KK3N0YXRpYyB2b2lkCitwcmludF9lc2NhcGVkIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgcHV0YyAoJyInLCBzdHJlYW0pOworICBmb3IgKDsgKnN0ciAhPSAnXDAnOyBzdHIrKykKKyAgICBpZiAoKnN0ciA9PSAnXG4nKQorICAgICAgeworCWZwdXRzICgiXFxuXCIiLCBzdHJlYW0pOworCWlmIChzdHJbMV0gPT0gJ1wwJykKKwkgIHJldHVybjsKKwlmcHV0cyAoIlxuXCIiLCBzdHJlYW0pOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKwlpZiAoKnN0ciA9PSAnIicgfHwgKnN0ciA9PSAnXFwnKQorCSAgcHV0YyAoJ1xcJywgc3RyZWFtKTsKKwlwdXRjICgqc3RyLCBzdHJlYW0pOworICAgICAgfQorICBwdXRjICgnIicsIHN0cmVhbSk7Cit9CisKKy8qIEFkZCB0byB0aGUgbG9nIGZpbGUgYW4gZW50cnkgZGVub3RpbmcgYSBmYWlsZWQgdHJhbnNsYXRpb24uICAqLwordm9pZAorX25sX2xvZ191bnRyYW5zbGF0ZWQgKGNvbnN0IGNoYXIgKmxvZ2ZpbGVuYW1lLCBjb25zdCBjaGFyICpkb21haW5uYW1lLAorCQkgICAgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgaW50IHBsdXJhbCkKK3sKKyAgc3RhdGljIGNoYXIgKmxhc3RfbG9nZmlsZW5hbWUgPSBOVUxMOworICBzdGF0aWMgRklMRSAqbGFzdF9sb2dmaWxlID0gTlVMTDsKKyAgRklMRSAqbG9nZmlsZTsKKworICAvKiBDYW4gd2UgcmV1c2UgdGhlIGxhc3Qgb3BlbmVkIGxvZ2ZpbGU/ICAqLworICBpZiAobGFzdF9sb2dmaWxlbmFtZSA9PSBOVUxMIHx8IHN0cmNtcCAobG9nZmlsZW5hbWUsIGxhc3RfbG9nZmlsZW5hbWUpICE9IDApCisgICAgeworICAgICAgLyogQ2xvc2UgdGhlIGxhc3QgdXNlZCBsb2dmaWxlLiAgKi8KKyAgICAgIGlmIChsYXN0X2xvZ2ZpbGVuYW1lICE9IE5VTEwpCisJeworCSAgaWYgKGxhc3RfbG9nZmlsZSAhPSBOVUxMKQorCSAgICB7CisJICAgICAgZmNsb3NlIChsYXN0X2xvZ2ZpbGUpOworCSAgICAgIGxhc3RfbG9nZmlsZSA9IE5VTEw7CisJICAgIH0KKwkgIGZyZWUgKGxhc3RfbG9nZmlsZW5hbWUpOworCSAgbGFzdF9sb2dmaWxlbmFtZSA9IE5VTEw7CisJfQorICAgICAgLyogT3BlbiB0aGUgbG9nZmlsZS4gICovCisgICAgICBsYXN0X2xvZ2ZpbGVuYW1lID0gKGNoYXIgKikgbWFsbG9jIChzdHJsZW4gKGxvZ2ZpbGVuYW1lKSArIDEpOworICAgICAgaWYgKGxhc3RfbG9nZmlsZW5hbWUgPT0gTlVMTCkKKwlyZXR1cm47CisgICAgICBzdHJjcHkgKGxhc3RfbG9nZmlsZW5hbWUsIGxvZ2ZpbGVuYW1lKTsKKyAgICAgIGxhc3RfbG9nZmlsZSA9IGZvcGVuIChsb2dmaWxlbmFtZSwgImEiKTsKKyAgICAgIGlmIChsYXN0X2xvZ2ZpbGUgPT0gTlVMTCkKKwlyZXR1cm47CisgICAgfQorICBsb2dmaWxlID0gbGFzdF9sb2dmaWxlOworCisgIGZwcmludGYgKGxvZ2ZpbGUsICJkb21haW4gIik7CisgIHByaW50X2VzY2FwZWQgKGxvZ2ZpbGUsIGRvbWFpbm5hbWUpOworICBmcHJpbnRmIChsb2dmaWxlLCAiXG5tc2dpZCAiKTsKKyAgcHJpbnRfZXNjYXBlZCAobG9nZmlsZSwgbXNnaWQxKTsKKyAgaWYgKHBsdXJhbCkKKyAgICB7CisgICAgICBmcHJpbnRmIChsb2dmaWxlLCAiXG5tc2dpZF9wbHVyYWwgIik7CisgICAgICBwcmludF9lc2NhcGVkIChsb2dmaWxlLCBtc2dpZDIpOworICAgICAgZnByaW50ZiAobG9nZmlsZSwgIlxubXNnc3RyWzBdIFwiXCJcbiIpOworICAgIH0KKyAgZWxzZQorICAgIGZwcmludGYgKGxvZ2ZpbGUsICJcbm1zZ3N0ciBcIlwiXG4iKTsKKyAgcHV0YyAoJ1xuJywgbG9nZmlsZSk7Cit9CmRpZmYgLS1naXQgYS9pbnRsL25nZXR0ZXh0LmMgYi9pbnRsL25nZXR0ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTczZTAwYwotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvbmdldHRleHQuYwpAQCAtMCwwICsxLDY1IEBACisvKiBJbXBsZW1lbnRhdGlvbiBvZiBuZ2V0dGV4dCgzKSBmdW5jdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NywgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2lmZGVmIF9MSUJDCisjIGRlZmluZSBfX25lZWRfTlVMTAorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGxpYi5oPgkJLyogSnVzdCBmb3IgTlVMTC4gICovCisjZW5kaWYKKworI2luY2x1ZGUgImdldHRleHRQLmgiCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8bGliaW50bC5oPgorI2Vsc2UKKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworCisvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisjaWZkZWYgX0xJQkMKKyMgZGVmaW5lIE5HRVRURVhUIF9fbmdldHRleHQKKyMgZGVmaW5lIERDTkdFVFRFWFQgX19kY25nZXR0ZXh0CisjZWxzZQorIyBkZWZpbmUgTkdFVFRFWFQgbGliaW50bF9uZ2V0dGV4dAorIyBkZWZpbmUgRENOR0VUVEVYVCBsaWJpbnRsX2RjbmdldHRleHQKKyNlbmRpZgorCisvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIE1TR0lEIGl0c2VsZiAodGhlIGRlZmF1bHQKKyAgIHRleHQpLiAgKi8KK2NoYXIgKgorTkdFVFRFWFQgKGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuKQoreworICByZXR1cm4gRENOR0VUVEVYVCAoTlVMTCwgbXNnaWQxLCBtc2dpZDIsIG4sIExDX01FU1NBR0VTKTsKK30KKworI2lmZGVmIF9MSUJDCisvKiBBbGlhcyBmb3IgZnVuY3Rpb24gbmFtZSBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KK3dlYWtfYWxpYXMgKF9fbmdldHRleHQsIG5nZXR0ZXh0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW50bC9vczJjb21wYXQuYyBiL2ludGwvb3MyY29tcGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhkYzMzZQotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvb3MyY29tcGF0LmMKQEAgLTAsMCArMSw5OCBAQAorLyogT1MvMiBjb21wYXRpYmlsaXR5IGZ1bmN0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2RlZmluZSBPUzJfQVdBUkUKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCisvKiBBIHZlcnNpb24gb2YgZ2V0ZW52KCkgdGhhdCB3b3JrcyBmcm9tIERMTHMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIERvc1NjYW5FbnYgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzek5hbWUsIHVuc2lnbmVkIGNoYXIgKipwcHN6VmFsdWUpOworCitjaGFyICoKK19ubF9nZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHVuc2lnbmVkIGNoYXIgKnZhbHVlOworICBpZiAoRG9zU2NhbkVudiAobmFtZSwgJnZhbHVlKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgZWxzZQorICAgIHJldHVybiB2YWx1ZTsKK30KKworLyogQSBmaXhlZCBzaXplIGJ1ZmZlci4gICovCitjaGFyIGxpYmludGxfbmxfZGVmYXVsdF9kaXJuYW1lW01BWFBBVEhMRU4rMV07CisKK2NoYXIgKl9ubG9zMl9saWJkaXIgPSBOVUxMOworY2hhciAqX25sb3MyX2xvY2FsZWFsaWFzcGF0aCA9IE5VTEw7CitjaGFyICpfbmxvczJfbG9jYWxlZGlyID0gTlVMTDsKKworc3RhdGljIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgdm9pZAorbmxvczJfaW5pdGlhbGl6ZSAoKQoreworICBjaGFyICpyb290ID0gZ2V0ZW52ICgiVU5JWFJPT1QiKTsKKyAgY2hhciAqZ251bG9jYWxlZGlyID0gZ2V0ZW52ICgiR05VTE9DQUxFRElSIik7CisKKyAgX25sb3MyX2xpYmRpciA9IGdudWxvY2FsZWRpcjsKKyAgaWYgKCFfbmxvczJfbGliZGlyKQorICAgIHsKKyAgICAgIGlmIChyb290KQorICAgICAgICB7CisgICAgICAgICAgc2l6ZV90IHNsID0gc3RybGVuIChyb290KTsKKyAgICAgICAgICBfbmxvczJfbGliZGlyID0gKGNoYXIgKikgbWFsbG9jIChzbCArIHN0cmxlbiAoTElCRElSKSArIDEpOworICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xpYmRpciwgcm9vdCwgc2wpOworICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xpYmRpciArIHNsLCBMSUJESVIsIHN0cmxlbiAoTElCRElSKSArIDEpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIF9ubG9zMl9saWJkaXIgPSBMSUJESVI7CisgICAgfQorCisgIF9ubG9zMl9sb2NhbGVhbGlhc3BhdGggPSBnbnVsb2NhbGVkaXI7CisgIGlmICghX25sb3MyX2xvY2FsZWFsaWFzcGF0aCkKKyAgICB7CisgICAgICBpZiAocm9vdCkKKyAgICAgICAgeworICAgICAgICAgIHNpemVfdCBzbCA9IHN0cmxlbiAocm9vdCk7CisgICAgICAgICAgX25sb3MyX2xvY2FsZWFsaWFzcGF0aCA9IChjaGFyICopIG1hbGxvYyAoc2wgKyBzdHJsZW4gKExPQ0FMRV9BTElBU19QQVRIKSArIDEpOworICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWFsaWFzcGF0aCwgcm9vdCwgc2wpOworICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWFsaWFzcGF0aCArIHNsLCBMT0NBTEVfQUxJQVNfUEFUSCwgc3RybGVuIChMT0NBTEVfQUxJQVNfUEFUSCkgKyAxKTsKKyAgICAgICAgfQorICAgICBlbHNlCisgICAgICAgIF9ubG9zMl9sb2NhbGVhbGlhc3BhdGggPSBMT0NBTEVfQUxJQVNfUEFUSDsKKyAgICB9CisKKyAgX25sb3MyX2xvY2FsZWRpciA9IGdudWxvY2FsZWRpcjsKKyAgaWYgKCFfbmxvczJfbG9jYWxlZGlyKQorICAgIHsKKyAgICAgIGlmIChyb290KQorICAgICAgICB7CisgICAgICAgICAgc2l6ZV90IHNsID0gc3RybGVuIChyb290KTsKKyAgICAgICAgICBfbmxvczJfbG9jYWxlZGlyID0gKGNoYXIgKikgbWFsbG9jIChzbCArIHN0cmxlbiAoTE9DQUxFRElSKSArIDEpOworICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWRpciwgcm9vdCwgc2wpOworICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWRpciArIHNsLCBMT0NBTEVESVIsIHN0cmxlbiAoTE9DQUxFRElSKSArIDEpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIF9ubG9zMl9sb2NhbGVkaXIgPSBMT0NBTEVESVI7CisgICAgfQorCisgIGlmIChzdHJsZW4gKF9ubG9zMl9sb2NhbGVkaXIpIDw9IE1BWFBBVEhMRU4pCisgICAgc3RyY3B5IChsaWJpbnRsX25sX2RlZmF1bHRfZGlybmFtZSwgX25sb3MyX2xvY2FsZWRpcik7Cit9CmRpZmYgLS1naXQgYS9pbnRsL29zMmNvbXBhdC5oIGIvaW50bC9vczJjb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjc0ZThjCi0tLSAvZGV2L251bGwKKysrIGIvaW50bC9vczJjb21wYXQuaApAQCAtMCwwICsxLDQ2IEBACisvKiBPUy8yIGNvbXBhdGliaWxpdHkgZGVmaW5lcy4KKyAgIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBpbmNsdWRlZCBmcm9tIGNvbmZpZy5oCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKy8qIFdoZW4gaW5jbHVkZWQgZnJvbSBvczJjb21wYXQuaCB3ZSBuZWVkIGFsbCB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbnMgKi8KKyNpZm5kZWYgT1MyX0FXQVJFCisKKyN1bmRlZiBMSUJESVIKKyNkZWZpbmUgTElCRElSCQkJX25sb3MyX2xpYmRpcgorZXh0ZXJuIGNoYXIgKl9ubG9zMl9saWJkaXI7CisKKyN1bmRlZiBMT0NBTEVESVIKKyNkZWZpbmUgTE9DQUxFRElSCQlfbmxvczJfbG9jYWxlZGlyCitleHRlcm4gY2hhciAqX25sb3MyX2xvY2FsZWRpcjsKKworI3VuZGVmIExPQ0FMRV9BTElBU19QQVRICisjZGVmaW5lIExPQ0FMRV9BTElBU19QQVRICV9ubG9zMl9sb2NhbGVhbGlhc3BhdGgKK2V4dGVybiBjaGFyICpfbmxvczJfbG9jYWxlYWxpYXNwYXRoOworCisjZW5kaWYKKworI3VuZGVmIEhBVkVfU1RSQ0FTRUNNUAorI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMQorI2RlZmluZSBzdHJjYXNlY21wIHN0cmljbXAKKyNkZWZpbmUgc3RybmNhc2VjbXAgc3RybmljbXAKKworLyogV2UgaGF2ZSBvdXIgb3duIGdldGVudigpIHdoaWNoIHdvcmtzIGV2ZW4gaWYgbGlicmFyeSBpcyBjb21waWxlZCBhcyBETEwgKi8KKyNkZWZpbmUgZ2V0ZW52IF9ubF9nZXRlbnYKKworLyogT2xkZXIgdmVyc2lvbnMgb2YgZ2V0dGV4dCB1c2VkIC0xIGFzIHRoZSB2YWx1ZSBvZiBMQ19NRVNTQUdFUyAqLworI2RlZmluZSBMQ19NRVNTQUdFU19DT01QQVQgKC0xKQpkaWZmIC0tZ2l0IGEvaW50bC9vc2RlcC5jIGIvaW50bC9vc2RlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNzI1OTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL29zZGVwLmMKQEAgLTAsMCArMSwyNCBAQAorLyogT1MgZGVwZW5kZW50IHBhcnRzIG9mIGxpYmludGwuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZiBkZWZpbmVkIF9fRU1YX18KKyMgaW5jbHVkZSAib3MyY29tcGF0LmMiCisjZWxzZQorLyogQXZvaWQgQUlYIGNvbXBpbGVyIHdhcm5pbmcuICAqLwordHlwZWRlZiBpbnQgZHVtbXk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2ludGwvcGx1cmFsLWV4cC5jIGIvaW50bC9wbHVyYWwtZXhwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwNGU2NAotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvcGx1cmFsLWV4cC5jCkBAIC0wLDAgKzEsMTU0IEBACisvKiBFeHByZXNzaW9uIHBhcnNpbmcgZm9yIHBsdXJhbCBmb3JtIHNlbGVjdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMjAwMC4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAicGx1cmFsLWV4cC5oIgorCisjaWYgKGRlZmluZWQgX19HTlVDX18gJiYgIWRlZmluZWQgX19BUFBMRV9DQ19fKSBcCisgICAgfHwgKGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisKKy8qIFRoZXNlIHN0cnVjdHMgYXJlIHRoZSBjb25zdGFudCBleHByZXNzaW9uIGZvciB0aGUgZ2VybWFuaWMgcGx1cmFsCisgICBmb3JtIGRldGVybWluYXRpb24uICBJdCByZXByZXNlbnRzIHRoZSBleHByZXNzaW9uICAibiAhPSAxIi4gICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4cHJlc3Npb24gcGx2YXIgPQoreworICAubmFyZ3MgPSAwLAorICAub3BlcmF0aW9uID0gdmFyLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwcmVzc2lvbiBwbG9uZSA9Cit7CisgIC5uYXJncyA9IDAsCisgIC5vcGVyYXRpb24gPSBudW0sCisgIC52YWwgPQorICB7CisgICAgLm51bSA9IDEKKyAgfQorfTsKK3N0cnVjdCBleHByZXNzaW9uIEdFUk1BTklDX1BMVVJBTCA9Cit7CisgIC5uYXJncyA9IDIsCisgIC5vcGVyYXRpb24gPSBub3RfZXF1YWwsCisgIC52YWwgPQorICB7CisgICAgLmFyZ3MgPQorICAgIHsKKyAgICAgIFswXSA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSAmcGx2YXIsCisgICAgICBbMV0gPSAoc3RydWN0IGV4cHJlc3Npb24gKikgJnBsb25lCisgICAgfQorICB9Cit9OworCisjIGRlZmluZSBJTklUX0dFUk1BTklDX1BMVVJBTCgpCisKKyNlbHNlCisKKy8qIEZvciBjb21waWxlcnMgd2l0aG91dCBzdXBwb3J0IGZvciBJU08gQyA5OSBzdHJ1Y3QvdW5pb24gaW5pdGlhbGl6ZXJzOgorICAgSW5pdGlhbGl6YXRpb24gYXQgcnVuLXRpbWUuICAqLworCitzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gcGx2YXI7CitzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gcGxvbmU7CitzdHJ1Y3QgZXhwcmVzc2lvbiBHRVJNQU5JQ19QTFVSQUw7CisKK3N0YXRpYyB2b2lkCitpbml0X2dlcm1hbmljX3BsdXJhbCAoKQoreworICBpZiAocGxvbmUudmFsLm51bSA9PSAwKQorICAgIHsKKyAgICAgIHBsdmFyLm5hcmdzID0gMDsKKyAgICAgIHBsdmFyLm9wZXJhdGlvbiA9IHZhcjsKKworICAgICAgcGxvbmUubmFyZ3MgPSAwOworICAgICAgcGxvbmUub3BlcmF0aW9uID0gbnVtOworICAgICAgcGxvbmUudmFsLm51bSA9IDE7CisKKyAgICAgIEdFUk1BTklDX1BMVVJBTC5uYXJncyA9IDI7CisgICAgICBHRVJNQU5JQ19QTFVSQUwub3BlcmF0aW9uID0gbm90X2VxdWFsOworICAgICAgR0VSTUFOSUNfUExVUkFMLnZhbC5hcmdzWzBdID0gJnBsdmFyOworICAgICAgR0VSTUFOSUNfUExVUkFMLnZhbC5hcmdzWzFdID0gJnBsb25lOworICAgIH0KK30KKworIyBkZWZpbmUgSU5JVF9HRVJNQU5JQ19QTFVSQUwoKSBpbml0X2dlcm1hbmljX3BsdXJhbCAoKQorCisjZW5kaWYKKwordm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK0VYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gKGNvbnN0IGNoYXIgKm51bGxlbnRyeSwgc3RydWN0IGV4cHJlc3Npb24gKipwbHVyYWxwLAorCQkJICAgdW5zaWduZWQgbG9uZyBpbnQgKm5wbHVyYWxzcCkKK3sKKyAgaWYgKG51bGxlbnRyeSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKnBsdXJhbDsKKyAgICAgIGNvbnN0IGNoYXIgKm5wbHVyYWxzOworCisgICAgICBwbHVyYWwgPSBzdHJzdHIgKG51bGxlbnRyeSwgInBsdXJhbD0iKTsKKyAgICAgIG5wbHVyYWxzID0gc3Ryc3RyIChudWxsZW50cnksICJucGx1cmFscz0iKTsKKyAgICAgIGlmIChwbHVyYWwgPT0gTlVMTCB8fCBucGx1cmFscyA9PSBOVUxMKQorCWdvdG8gbm9fcGx1cmFsOworICAgICAgZWxzZQorCXsKKwkgIGNoYXIgKmVuZHA7CisJICB1bnNpZ25lZCBsb25nIGludCBuOworCSAgc3RydWN0IHBhcnNlX2FyZ3MgYXJnczsKKworCSAgLyogRmlyc3QgZ2V0IHRoZSBudW1iZXIuICAqLworCSAgbnBsdXJhbHMgKz0gOTsKKwkgIHdoaWxlICgqbnBsdXJhbHMgIT0gJ1wwJyAmJiBpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKm5wbHVyYWxzKSkKKwkgICAgKytucGx1cmFsczsKKwkgIGlmICghKCpucGx1cmFscyA+PSAnMCcgJiYgKm5wbHVyYWxzIDw9ICc5JykpCisJICAgIGdvdG8gbm9fcGx1cmFsOworI2lmIGRlZmluZWQgSEFWRV9TVFJUT1VMIHx8IGRlZmluZWQgX0xJQkMKKwkgIG4gPSBzdHJ0b3VsIChucGx1cmFscywgJmVuZHAsIDEwKTsKKyNlbHNlCisJICBmb3IgKGVuZHAgPSBucGx1cmFscywgbiA9IDA7ICplbmRwID49ICcwJyAmJiAqZW5kcCA8PSAnOSc7IGVuZHArKykKKwkgICAgbiA9IG4gKiAxMCArICgqZW5kcCAtICcwJyk7CisjZW5kaWYKKwkgIGlmIChucGx1cmFscyA9PSBlbmRwKQorCSAgICBnb3RvIG5vX3BsdXJhbDsKKwkgICpucGx1cmFsc3AgPSBuOworCisJICAvKiBEdWUgdG8gdGhlIHJlc3RyaWN0aW9ucyBiaXNvbiBpbXBvc2VzIG9udG8gdGhlIGludGVyZmFjZSBvZiB0aGUKKwkgICAgIHNjYW5uZXIgZnVuY3Rpb24gd2UgaGF2ZSB0byBwdXQgdGhlIGlucHV0IHN0cmluZyBhbmQgdGhlIHJlc3VsdAorCSAgICAgcGFzc2VkIHVwIGZyb20gdGhlIHBhcnNlciBpbnRvIHRoZSBzYW1lIHN0cnVjdHVyZSB3aGljaCBhZGRyZXNzCisJICAgICBpcyBwYXNzZWQgZG93biB0byB0aGUgcGFyc2VyLiAgKi8KKwkgIHBsdXJhbCArPSA3OworCSAgYXJncy5jcCA9IHBsdXJhbDsKKwkgIGlmIChQTFVSQUxfUEFSU0UgKCZhcmdzKSAhPSAwKQorCSAgICBnb3RvIG5vX3BsdXJhbDsKKwkgICpwbHVyYWxwID0gYXJncy5yZXM7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIEJ5IGRlZmF1bHQgd2UgYXJlIHVzaW5nIHRoZSBHZXJtYW5pYyBmb3JtOiBzaW5ndWxhciBmb3JtIG9ubHkKKyAgICAgICAgIGZvciBgb25lJywgdGhlIHBsdXJhbCBmb3JtIG90aGVyd2lzZS4gIFllcywgdGhpcyBpcyBhbHNvIHdoYXQKKyAgICAgICAgIEVuZ2xpc2ggaXMgdXNpbmcgc2luY2UgRW5nbGlzaCBpcyBhIEdlcm1hbmljIGxhbmd1YWdlLiAgKi8KKyAgICBub19wbHVyYWw6CisgICAgICBJTklUX0dFUk1BTklDX1BMVVJBTCAoKTsKKyAgICAgICpwbHVyYWxwID0gJkdFUk1BTklDX1BMVVJBTDsKKyAgICAgICpucGx1cmFsc3AgPSAyOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2ludGwvcGx1cmFsLWV4cC5oIGIvaW50bC9wbHVyYWwtZXhwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDllMmM1YgotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvcGx1cmFsLWV4cC5oCkBAIC0wLDAgKzEsMTE4IEBACisvKiBFeHByZXNzaW9uIHBhcnNpbmcgYW5kIGV2YWx1YXRpb24gZm9yIHBsdXJhbCBmb3JtIHNlbGVjdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMjAwMC4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZm5kZWYgX1BMVVJBTF9FWFBfSAorI2RlZmluZSBfUExVUkFMX0VYUF9ICisKKyNpZm5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisjZW5kaWYKKworI2lmbmRlZiBhdHRyaWJ1dGVfaGlkZGVuCisjIGRlZmluZSBhdHRyaWJ1dGVfaGlkZGVuCisjZW5kaWYKKworCisvKiBUaGlzIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbnMgdG8gZGV0ZXJtaW5lIHRoZQorICAgcGx1cmFsIGZvcm0uICAqLworc3RydWN0IGV4cHJlc3Npb24KK3sKKyAgaW50IG5hcmdzOwkJCS8qIE51bWJlciBvZiBhcmd1bWVudHMuICAqLworICBlbnVtIG9wZXJhdG9yCisgIHsKKyAgICAvKiBXaXRob3V0IGFyZ3VtZW50czogICovCisgICAgdmFyLAkJCS8qIFRoZSB2YXJpYWJsZSAibiIuICAqLworICAgIG51bSwJCQkvKiBEZWNpbWFsIG51bWJlci4gICovCisgICAgLyogVW5hcnkgb3BlcmF0b3JzOiAgKi8KKyAgICBsbm90LAkJCS8qIExvZ2ljYWwgTk9ULiAgKi8KKyAgICAvKiBCaW5hcnkgb3BlcmF0b3JzOiAgKi8KKyAgICBtdWx0LAkJCS8qIE11bHRpcGxpY2F0aW9uLiAgKi8KKyAgICBkaXZpZGUsCQkJLyogRGl2aXNpb24uICAqLworICAgIG1vZHVsZSwJCQkvKiBNb2R1bG8gb3BlcmF0aW9uLiAgKi8KKyAgICBwbHVzLAkJCS8qIEFkZGl0aW9uLiAgKi8KKyAgICBtaW51cywJCQkvKiBTdWJ0cmFjdGlvbi4gICovCisgICAgbGVzc190aGFuLAkJCS8qIENvbXBhcmlzb24uICAqLworICAgIGdyZWF0ZXJfdGhhbiwJCS8qIENvbXBhcmlzb24uICAqLworICAgIGxlc3Nfb3JfZXF1YWwsCQkvKiBDb21wYXJpc29uLiAgKi8KKyAgICBncmVhdGVyX29yX2VxdWFsLAkJLyogQ29tcGFyaXNvbi4gICovCisgICAgZXF1YWwsCQkJLyogQ29tcGFyaXNvbiBmb3IgZXF1YWxpdHkuICAqLworICAgIG5vdF9lcXVhbCwJCQkvKiBDb21wYXJpc29uIGZvciBpbmVxdWFsaXR5LiAgKi8KKyAgICBsYW5kLAkJCS8qIExvZ2ljYWwgQU5ELiAgKi8KKyAgICBsb3IsCQkJLyogTG9naWNhbCBPUi4gICovCisgICAgLyogVGVybmFyeSBvcGVyYXRvcnM6ICAqLworICAgIHFtb3AJCQkvKiBRdWVzdGlvbiBtYXJrIG9wZXJhdG9yLiAgKi8KKyAgfSBvcGVyYXRpb247CisgIHVuaW9uCisgIHsKKyAgICB1bnNpZ25lZCBsb25nIGludCBudW07CS8qIE51bWJlciB2YWx1ZSBmb3IgYG51bScuICAqLworICAgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzNdOwkvKiBVcCB0byB0aHJlZSBhcmd1bWVudHMuICAqLworICB9IHZhbDsKK307CisKKy8qIFRoaXMgaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRvIHBhc3MgaW5mb3JtYXRpb24gdG8gdGhlIHBhcnNlciBhbmQgZ2V0CisgICB0aGUgcmVzdWx0IGluIGEgdGhyZWFkLXNhZmUgd2F5LiAgKi8KK3N0cnVjdCBwYXJzZV9hcmdzCit7CisgIGNvbnN0IGNoYXIgKmNwOworICBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmVzOworfTsKKworCisvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGlzIHNvdXJjZSBjb2RlIGlzIHVzZWQKKyAgIDEuIGluIHRoZSBHTlUgQyBMaWJyYXJ5IGxpYnJhcnksCisgICAyLiBpbiB0aGUgR05VIGxpYmludGwgbGlicmFyeSwKKyAgIDMuIGluIHRoZSBHTlUgZ2V0dGV4dCB0b29scy4KKyAgIFRoZSBmdW5jdGlvbiBuYW1lcyBpbiBlYWNoIHNpdHVhdGlvbiBtdXN0IGJlIGRpZmZlcmVudCwgdG8gYWxsb3cgZm9yCisgICBiaW5hcnkgaW5jb21wYXRpYmxlIGNoYW5nZXMgaW4gJ3N0cnVjdCBleHByZXNzaW9uJy4gIEZ1cnRoZXJtb3JlLAorICAgMS4gaW4gdGhlIEdOVSBDIExpYnJhcnkgbGlicmFyeSwgdGhlIG5hbWVzIGhhdmUgYSBfXyBwcmVmaXgsCisgICAyLiszLiBpbiB0aGUgR05VIGxpYmludGwgbGlicmFyeSBhbmQgaW4gdGhlIEdOVSBnZXR0ZXh0IHRvb2xzLCB0aGUgbmFtZXMKKyAgICAgICAgIG11c3QgZm9sbG93IEFOU0kgQyBhbmQgbm90IHN0YXJ0IHdpdGggX18uCisgICBTbyB3ZSBoYXZlIHRvIGRpc3Rpbmd1aXNoIHRoZSB0aHJlZSBjYXNlcy4gICovCisjaWZkZWYgX0xJQkMKKyMgZGVmaW5lIEZSRUVfRVhQUkVTU0lPTiBfX2dldHRleHRfZnJlZV9leHAKKyMgZGVmaW5lIFBMVVJBTF9QQVJTRSBfX2dldHRleHRwYXJzZQorIyBkZWZpbmUgR0VSTUFOSUNfUExVUkFMIF9fZ2V0dGV4dF9nZXJtYW5pY19wbHVyYWwKKyMgZGVmaW5lIEVYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gX19nZXR0ZXh0X2V4dHJhY3RfcGx1cmFsCisjZWxpZiBkZWZpbmVkIChJTl9MSUJJTlRMKQorIyBkZWZpbmUgRlJFRV9FWFBSRVNTSU9OIGxpYmludGxfZ2V0dGV4dF9mcmVlX2V4cAorIyBkZWZpbmUgUExVUkFMX1BBUlNFIGxpYmludGxfZ2V0dGV4dHBhcnNlCisjIGRlZmluZSBHRVJNQU5JQ19QTFVSQUwgbGliaW50bF9nZXR0ZXh0X2dlcm1hbmljX3BsdXJhbAorIyBkZWZpbmUgRVhUUkFDVF9QTFVSQUxfRVhQUkVTU0lPTiBsaWJpbnRsX2dldHRleHRfZXh0cmFjdF9wbHVyYWwKKyNlbHNlCisjIGRlZmluZSBGUkVFX0VYUFJFU1NJT04gZnJlZV9wbHVyYWxfZXhwcmVzc2lvbgorIyBkZWZpbmUgUExVUkFMX1BBUlNFIHBhcnNlX3BsdXJhbF9leHByZXNzaW9uCisjIGRlZmluZSBHRVJNQU5JQ19QTFVSQUwgZ2VybWFuaWNfcGx1cmFsCisjIGRlZmluZSBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIGV4dHJhY3RfcGx1cmFsX2V4cHJlc3Npb24KKyNlbmRpZgorCitleHRlcm4gdm9pZCBGUkVFX0VYUFJFU1NJT04gKHN0cnVjdCBleHByZXNzaW9uICpleHApCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworZXh0ZXJuIGludCBQTFVSQUxfUEFSU0UgKHZvaWQgKmFyZyk7CitleHRlcm4gc3RydWN0IGV4cHJlc3Npb24gR0VSTUFOSUNfUExVUkFMIGF0dHJpYnV0ZV9oaWRkZW47CitleHRlcm4gdm9pZCBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIChjb25zdCBjaGFyICpudWxsZW50cnksCisJCQkJICAgICAgIHN0cnVjdCBleHByZXNzaW9uICoqcGx1cmFscCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgKm5wbHVyYWxzcCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisKKyNpZiAhZGVmaW5lZCAoX0xJQkMpICYmICFkZWZpbmVkIChJTl9MSUJJTlRMKQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHBsdXJhbF9ldmFsIChzdHJ1Y3QgZXhwcmVzc2lvbiAqcGV4cCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGludCBuKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX1BMVVJBTF9FWFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW50bC9wbHVyYWwuYyBiL2ludGwvcGx1cmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MzA1YgotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvcGx1cmFsLmMKQEAgLTAsMCArMSwxNDkwIEBACisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBmcm9tIHBsdXJhbC55CisgICBieSBHTlUgYmlzb24gMS4zNS4gICovCisKKyNkZWZpbmUgWVlCSVNPTiAxICAvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLworCisjZGVmaW5lIHl5cGFyc2UgX19nZXR0ZXh0cGFyc2UKKyNkZWZpbmUgeXlsZXggX19nZXR0ZXh0bGV4CisjZGVmaW5lIHl5ZXJyb3IgX19nZXR0ZXh0ZXJyb3IKKyNkZWZpbmUgeXlsdmFsIF9fZ2V0dGV4dGx2YWwKKyNkZWZpbmUgeXljaGFyIF9fZ2V0dGV4dGNoYXIKKyNkZWZpbmUgeXlkZWJ1ZyBfX2dldHRleHRkZWJ1ZworI2RlZmluZSB5eW5lcnJzIF9fZ2V0dGV4dG5lcnJzCisjIGRlZmluZQlFUVVPUDIJMjU3CisjIGRlZmluZQlDTVBPUDIJMjU4CisjIGRlZmluZQlBRERPUDIJMjU5CisjIGRlZmluZQlNVUxPUDIJMjYwCisjIGRlZmluZQlOVU1CRVIJMjYxCisKKyNsaW5lIDEgInBsdXJhbC55IgorCisvKiBFeHByZXNzaW9uIHBhcnNpbmcgZm9yIHBsdXJhbCBmb3JtIHNlbGVjdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMjAwMC4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKy8qIFRoZSBiaXNvbiBnZW5lcmF0ZWQgcGFyc2VyIHVzZXMgYWxsb2NhLiAgQUlYIDMgZm9yY2VzIHVzIHRvIHB1dCB0aGlzCisgICBkZWNsYXJhdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiAgVGhlIGRlY2xhcmF0aW9uIGluIGJpc29uJ3MKKyAgIHNrZWxldG9uIGZpbGUgY29tZXMgdG9vIGxhdGUuICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPgorICAgYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlIGFyYml0cmFyeSBzeXN0ZW0gaGVhZGVycy4gICovCisjaWYgZGVmaW5lZCBfQUlYICYmICFkZWZpbmVkIF9fR05VQ19fCisgI3ByYWdtYSBhbGxvY2EKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAicGx1cmFsLWV4cC5oIgorCisvKiBUaGUgbWFpbiBmdW5jdGlvbiBnZW5lcmF0ZWQgYnkgdGhlIHBhcnNlciBpcyBjYWxsZWQgX19nZXR0ZXh0cGFyc2UsCisgICBidXQgd2Ugd2FudCBpdCB0byBiZSBjYWxsZWQgUExVUkFMX1BBUlNFLiAgKi8KKyNpZm5kZWYgX0xJQkMKKyMgZGVmaW5lIF9fZ2V0dGV4dHBhcnNlIFBMVVJBTF9QQVJTRQorI2VuZGlmCisKKyNkZWZpbmUgWVlMRVhfUEFSQU0JJigoc3RydWN0IHBhcnNlX2FyZ3MgKikgYXJnKS0+Y3AKKyNkZWZpbmUgWVlQQVJTRV9QQVJBTQlhcmcKKworI2xpbmUgNDkgInBsdXJhbC55IgorI2lmbmRlZiBZWVNUWVBFCit0eXBlZGVmIHVuaW9uIHsKKyAgdW5zaWduZWQgbG9uZyBpbnQgbnVtOworICBlbnVtIG9wZXJhdG9yIG9wOworICBzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwOworfSB5eXN0eXBlOworIyBkZWZpbmUgWVlTVFlQRSB5eXN0eXBlCisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2VuZGlmCisjbGluZSA1NSAicGx1cmFsLnkiCisKKy8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCitzdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFsLCBjb25zdCBjaGFyICoqcGV4cCk7CitzdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICpzdHIpOworCisvKiBBbGxvY2F0aW9uIG9mIGV4cHJlc3Npb25zLiAgKi8KKworc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKK25ld19leHAgKGludCBuYXJncywgZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKiBjb25zdCAqYXJncykKK3sKKyAgaW50IGk7CisgIHN0cnVjdCBleHByZXNzaW9uICpuZXdwOworCisgIC8qIElmIGFueSBvZiB0aGUgYXJndW1lbnQgY291bGQgbm90IGJlIG1hbGxvYydlZCwganVzdCByZXR1cm4gTlVMTC4gICovCisgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgaWYgKGFyZ3NbaV0gPT0gTlVMTCkKKyAgICAgIGdvdG8gZmFpbDsKKworICAvKiBBbGxvY2F0ZSBhIG5ldyBleHByZXNzaW9uLiAgKi8KKyAgbmV3cCA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsKKyAgaWYgKG5ld3AgIT0gTlVMTCkKKyAgICB7CisgICAgICBuZXdwLT5uYXJncyA9IG5hcmdzOworICAgICAgbmV3cC0+b3BlcmF0aW9uID0gb3A7CisgICAgICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorCW5ld3AtPnZhbC5hcmdzW2ldID0gYXJnc1tpXTsKKyAgICAgIHJldHVybiBuZXdwOworICAgIH0KKworIGZhaWw6CisgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgRlJFRV9FWFBSRVNTSU9OIChhcmdzW2ldKTsKKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCituZXdfZXhwXzAgKGVudW0gb3BlcmF0b3Igb3ApCit7CisgIHJldHVybiBuZXdfZXhwICgwLCBvcCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorbmV3X2V4cF8xIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmlnaHQpCit7CisgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzFdOworCisgIGFyZ3NbMF0gPSByaWdodDsKKyAgcmV0dXJuIG5ld19leHAgKDEsIG9wLCBhcmdzKTsKK30KKworc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKK25ld19leHBfMiAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmxlZnQsIHN0cnVjdCBleHByZXNzaW9uICpyaWdodCkKK3sKKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbMl07CisKKyAgYXJnc1swXSA9IGxlZnQ7CisgIGFyZ3NbMV0gPSByaWdodDsKKyAgcmV0dXJuIG5ld19leHAgKDIsIG9wLCBhcmdzKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCituZXdfZXhwXzMgKGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICpiZXhwLAorCSAgIHN0cnVjdCBleHByZXNzaW9uICp0YnJhbmNoLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqZmJyYW5jaCkKK3sKKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbM107CisKKyAgYXJnc1swXSA9IGJleHA7CisgIGFyZ3NbMV0gPSB0YnJhbmNoOworICBhcmdzWzJdID0gZmJyYW5jaDsKKyAgcmV0dXJuIG5ld19leHAgKDMsIG9wLCBhcmdzKTsKK30KKworI2lmbmRlZiBZWURFQlVHCisjIGRlZmluZSBZWURFQlVHIDAKKyNlbmRpZgorCisKKworI2RlZmluZQlZWUZJTkFMCQkyNworI2RlZmluZQlZWUZMQUcJCS0zMjc2OAorI2RlZmluZQlZWU5UQkFTRQkxNgorCisvKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICovCisjZGVmaW5lIFlZVFJBTlNMQVRFKHgpICgodW5zaWduZWQpKHgpIDw9IDI2MSA/IHl5dHJhbnNsYXRlW3hdIDogMTgpCisKKy8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gKi8KK3N0YXRpYyBjb25zdCBjaGFyIHl5dHJhbnNsYXRlW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgMTAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNSwgICAgIDIsCisgICAgICAxNCwgICAgMTUsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgMTIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgIDEzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMQorfTsKKworI2lmIFlZREVCVUcKK3N0YXRpYyBjb25zdCBzaG9ydCB5eXByaHNbXSA9Cit7CisgICAgICAgMCwgICAgIDAsICAgICAyLCAgICAgOCwgICAgMTIsICAgIDE2LCAgICAyMCwgICAgMjQsICAgIDI4LCAgICAzMiwKKyAgICAgIDM1LCAgICAzNywgICAgMzkKK307CitzdGF0aWMgY29uc3Qgc2hvcnQgeXlyaHNbXSA9Cit7CisgICAgICAxNywgICAgIDAsICAgIDE3LCAgICAgMywgICAgMTcsICAgIDEyLCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgNCwKKyAgICAgIDE3LCAgICAgMCwgICAgMTcsICAgICA1LCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgNiwgICAgMTcsICAgICAwLAorICAgICAgMTcsICAgICA3LCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgOCwgICAgMTcsICAgICAwLCAgICAxNywgICAgIDksCisgICAgICAxNywgICAgIDAsICAgIDEwLCAgICAxNywgICAgIDAsICAgIDEzLCAgICAgMCwgICAgMTEsICAgICAwLCAgICAxNCwKKyAgICAgIDE3LCAgICAxNSwgICAgIDAKK307CisKKyNlbmRpZgorCisjaWYgWVlERUJVRworLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gKi8KK3N0YXRpYyBjb25zdCBzaG9ydCB5eXJsaW5lW10gPQoreworICAgICAgIDAsICAgMTUwLCAgIDE1OCwgICAxNjIsICAgMTY2LCAgIDE3MCwgICAxNzQsICAgMTc4LCAgIDE4MiwgICAxODYsCisgICAgIDE5MCwgICAxOTQsICAgMTk5Cit9OworI2VuZGlmCisKKworI2lmIChZWURFQlVHKSB8fCBkZWZpbmVkIFlZRVJST1JfVkVSQk9TRQorCisvKiBZWVROQU1FW1RPS0VOX05VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHRva2VuIFRPS0VOX05VTS4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQoreworICAiJCIsICJlcnJvciIsICIkdW5kZWZpbmVkLiIsICInPyciLCAiJ3wnIiwgIicmJyIsICJFUVVPUDIiLCAiQ01QT1AyIiwKKyAgIkFERE9QMiIsICJNVUxPUDIiLCAiJyEnIiwgIk5VTUJFUiIsICInOiciLCAiJ24nIiwgIicoJyIsICInKSciLAorICAic3RhcnQiLCAiZXhwIiwgMAorfTsKKyNlbmRpZgorCisvKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAqLworc3RhdGljIGNvbnN0IHNob3J0IHl5cjFbXSA9Cit7CisgICAgICAgMCwgICAgMTYsICAgIDE3LCAgICAxNywgICAgMTcsICAgIDE3LCAgICAxNywgICAgMTcsICAgIDE3LCAgICAxNywKKyAgICAgIDE3LCAgICAxNywgICAgMTcKK307CisKKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAqLworc3RhdGljIGNvbnN0IHNob3J0IHl5cjJbXSA9Cit7CisgICAgICAgMCwgICAgIDEsICAgICA1LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMiwKKyAgICAgICAxLCAgICAgMSwgICAgIDMKK307CisKKy8qIFlZREVGQUNUW1NdIC0tIGRlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZSBTIHdoZW4gWVlUQUJMRQorICAgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybyBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbgorICAgZXJyb3IuICovCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlkZWZhY3RbXSA9Cit7CisgICAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMCwgICAgIDAsICAgICAxLCAgICAgOSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LAorICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDAsICAgICAwCit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlkZWZnb3RvW10gPQoreworICAgICAgMjUsICAgICA1Cit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlwYWN0W10gPQoreworICAgICAgLTksICAgIC05LC0zMjc2OCwtMzI3NjgsICAgIC05LCAgICAzNCwtMzI3NjgsICAgIDExLCAgICAtOSwgICAgLTksCisgICAgICAtOSwgICAgLTksICAgIC05LCAgICAtOSwgICAgLTksLTMyNzY4LCAgICAyNCwgICAgMzksICAgIDQzLCAgICAxNiwKKyAgICAgIDI2LCAgICAtMywtMzI3NjgsICAgIC05LCAgICAzNCwgICAgMjEsICAgIDUzLC0zMjc2OAorfTsKKworc3RhdGljIGNvbnN0IHNob3J0IHl5cGdvdG9bXSA9Cit7CisgIC0zMjc2OCwgICAgLTEKK307CisKKworI2RlZmluZQlZWUxBU1QJCTUzCisKKworc3RhdGljIGNvbnN0IHNob3J0IHl5dGFibGVbXSA9Cit7CisgICAgICAgNiwgICAgIDEsICAgICAyLCAgICAgNywgICAgIDMsICAgICA0LCAgICAxNCwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDI2LCAgICAyNCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTMsICAgIDE0LCAgICAyMywgICAgIDgsICAgICA5LCAgICAxMCwKKyAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMjcKK307CisKK3N0YXRpYyBjb25zdCBzaG9ydCB5eWNoZWNrW10gPQoreworICAgICAgIDEsICAgIDEwLCAgICAxMSwgICAgIDQsICAgIDEzLCAgICAxNCwgICAgIDksICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAgMCwgICAgMjMsICAgICA3LCAgICAgOCwgICAgIDksICAgIDE1LCAgICAgMywgICAgIDQsICAgICA1LAorICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgICA4LCAgICAgOSwgICAgMTIsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAgNiwKKyAgICAgICA3LCAgICAgOCwgICAgIDksICAgICAwCit9OworI2RlZmluZSBZWVBVUkUgMQorCisvKiAtKi1DLSotICBOb3RlIHNvbWUgY29tcGlsZXJzIGNob2tlIG9uIGNvbW1lbnRzIG9uIGAjbGluZScgbGluZXMuICAqLworI2xpbmUgMyAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi9iaXNvbi5zaW1wbGUiCisKKy8qIFNrZWxldG9uIG91dHB1dCBwYXJzZXIgZm9yIGJpc29uLAorCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hlbiB0aGlzIGZpbGUgaXMgY29waWVkIGJ5IEJpc29uIGludG8gYQorICAgQmlzb24gb3V0cHV0IGZpbGUsIHlvdSBtYXkgdXNlIHRoYXQgb3V0cHV0IGZpbGUgd2l0aG91dCByZXN0cmljdGlvbi4KKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgIGluIHZlcnNpb24gMS4yNCBvZiBCaXNvbi4gICovCisKKy8qIFRoaXMgaXMgdGhlIHBhcnNlciBjb2RlIHRoYXQgaXMgd3JpdHRlbiBpbnRvIGVhY2ggYmlzb24gcGFyc2VyIHdoZW4KKyAgIHRoZSAlc2VtYW50aWNfcGFyc2VyIGRlY2xhcmF0aW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGdyYW1tYXIuCisgICBJdCB3YXMgd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuIGJ5IHNpbXBsaWZ5aW5nIHRoZSBoYWlyeSBwYXJzZXIKKyAgIHVzZWQgd2hlbiAlc2VtYW50aWNfcGFyc2VyIGlzIHNwZWNpZmllZC4gICovCisKKy8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRvIGF2b2lkCisgICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKyAgIHZhcmlhYmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3MuCisgICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRvCisgICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgorICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCisKKyNpZiAhIGRlZmluZWQgKHl5b3ZlcmZsb3cpIHx8IGRlZmluZWQgKFlZRVJST1JfVkVSQk9TRSkKKworLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLworCisjIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisjIGVsc2UKKyMgIGlmbmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgICBpZiBkZWZpbmVkIChhbGxvY2EpIHx8IGRlZmluZWQgKF9BTExPQ0FfSCkKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisjICAgZWxzZQorIyAgICBpZmRlZiBfX0dOVUNfXworIyAgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKKyAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gKi8KKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlICgwKQorIyBlbHNlCisjICBpZiBkZWZpbmVkIChfX1NURENfXykgfHwgZGVmaW5lZCAoX19jcGx1c3BsdXMpCisjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjICBlbmRpZgorIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgbWFsbG9jCisjICBkZWZpbmUgWVlTVEFDS19GUkVFIGZyZWUKKyMgZW5kaWYKKyNlbmRpZiAvKiAhIGRlZmluZWQgKHl5b3ZlcmZsb3cpIHx8IGRlZmluZWQgKFlZRVJST1JfVkVSQk9TRSkgKi8KKworCisjaWYgKCEgZGVmaW5lZCAoeXlvdmVyZmxvdykgXAorICAgICAmJiAoISBkZWZpbmVkIChfX2NwbHVzcGx1cykgXAorCSB8fCAoWVlMVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQorCisvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KK3VuaW9uIHl5YWxsb2MKK3sKKyAgc2hvcnQgeXlzczsKKyAgWVlTVFlQRSB5eXZzOworIyBpZiBZWUxTUF9ORUVERUQKKyAgWVlMVFlQRSB5eWxzOworIyBlbmRpZgorfTsKKworLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWCAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCisKKy8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAorICAgTiBlbGVtZW50cy4gICovCisjIGlmIFlZTFNQX05FRURFRAorIyAgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAoKE4pICogKHNpemVvZiAoc2hvcnQpICsgc2l6ZW9mIChZWVNUWVBFKSArIHNpemVvZiAoWVlMVFlQRSkpCVwKKyAgICAgICsgMiAqIFlZU1RBQ0tfR0FQX01BWCkKKyMgZWxzZQorIyAgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAoKE4pICogKHNpemVvZiAoc2hvcnQpICsgc2l6ZW9mIChZWVNUWVBFKSkJCQkJXAorICAgICAgKyBZWVNUQUNLX0dBUF9NQVgpCisjIGVuZGlmCisKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAuICAqLworIyBpZm5kZWYgWVlDT1BZCisjICBpZiAxIDwgX19HTlVDX18KKyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgXAorICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQorIyAgZWxzZQorIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KQkJXAorICAgICAgZG8JCQkJCVwKKwl7CQkJCQlcCisJICByZWdpc3RlciBZWVNJWkVfVCB5eWk7CQlcCisJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKQlcCisJICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOwkJXAorCX0JCQkJCVwKKyAgICAgIHdoaWxlICgwKQorIyAgZW5kaWYKKyMgZW5kaWYKKworLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCisgICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKKyAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCisgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAorICAgc3RhY2suICAqLworIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsJCQkJXAorCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCisJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYOwlcCisJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3aGlsZSAoMCkKKworI2VuZGlmCisKKworI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpICYmIGRlZmluZWQgKF9fU0laRV9UWVBFX18pCisjIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisjZW5kaWYKKyNpZiAhIGRlZmluZWQgKFlZU0laRV9UKSAmJiBkZWZpbmVkIChzaXplX3QpCisjIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyNlbmRpZgorI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpCisjIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVuZGlmCisjZW5kaWYKKyNpZiAhIGRlZmluZWQgKFlZU0laRV9UKQorIyBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisjZW5kaWYKKworI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCS0yCisjZGVmaW5lIFlZRU9GCQkwCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9SVCAJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJsYWIxCisvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5CisgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQorI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpCQkJCQlcCitkbwkJCQkJCQkJXAorICBpZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIHl5Y2hhciA9IChUb2tlbik7CQkJCQkJXAorICAgICAgeXlsdmFsID0gKFZhbHVlKTsJCQkJCQlcCisgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKKyAgICAgIFlZUE9QU1RBQ0s7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlcCisgICAgfQkJCQkJCQkJXAorICBlbHNlCQkJCQkJCQlcCisgICAgeyAJCQkJCQkJCVwKKyAgICAgIHl5ZXJyb3IgKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIik7CQkJXAorICAgICAgWVlFUlJPUjsJCQkJCQkJXAorICAgIH0JCQkJCQkJCVwKK3doaWxlICgwKQorCisjZGVmaW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgorCisKKy8qIFlZTExPQ19ERUZBVUxUIC0tIENvbXB1dGUgdGhlIGRlZmF1bHQgbG9jYXRpb24gKGJlZm9yZSB0aGUgYWN0aW9ucworICAgYXJlIHJ1bikuCisKKyAgIFdoZW4gWVlMTE9DX0RFRkFVTFQgaXMgcnVuLCBDVVJSRU5UIGlzIHNldCB0aGUgbG9jYXRpb24gb2YgdGhlCisgICBmaXJzdCB0b2tlbi4gIEJ5IGRlZmF1bHQsIHRvIGltcGxlbWVudCBzdXBwb3J0IGZvciByYW5nZXMsIGV4dGVuZAorICAgaXRzIHJhbmdlIHRvIHRoZSBsYXN0IHN5bWJvbC4gICovCisKKyNpZm5kZWYgWVlMTE9DX0RFRkFVTFQKKyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAgCVwKKyAgIEN1cnJlbnQubGFzdF9saW5lICAgPSBSaHNbTl0ubGFzdF9saW5lOwlcCisgICBDdXJyZW50Lmxhc3RfY29sdW1uID0gUmhzW05dLmxhc3RfY29sdW1uOworI2VuZGlmCisKKworLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisKKyNpZiBZWVBVUkUKKyMgaWYgWVlMU1BfTkVFREVECisjICBpZmRlZiBZWUxFWF9QQVJBTQorIyAgIGRlZmluZSBZWUxFWAkJeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MsIFlZTEVYX1BBUkFNKQorIyAgZWxzZQorIyAgIGRlZmluZSBZWUxFWAkJeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MpCisjICBlbmRpZgorIyBlbHNlIC8qICFZWUxTUF9ORUVERUQgKi8KKyMgIGlmZGVmIFlZTEVYX1BBUkFNCisjICAgZGVmaW5lIFlZTEVYCQl5eWxleCAoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCisjICBlbHNlCisjICAgZGVmaW5lIFlZTEVYCQl5eWxleCAoJnl5bHZhbCkKKyMgIGVuZGlmCisjIGVuZGlmIC8qICFZWUxTUF9ORUVERUQgKi8KKyNlbHNlIC8qICFZWVBVUkUgKi8KKyMgZGVmaW5lIFlZTEVYCQkJeXlsZXggKCkKKyNlbmRpZiAvKiAhWVlQVVJFICovCisKKworLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLworI2lmIFlZREVCVUcKKworIyBpZm5kZWYgWVlGUFJJTlRGCisjICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKKyMgZW5kaWYKKworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAorZG8gewkJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisgICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKK30gd2hpbGUgKDApCisvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKyAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLworaW50IHl5ZGVidWc7CisjZWxzZSAvKiAhWVlERUJVRyAqLworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCisjZW5kaWYgLyogIVlZREVCVUcgKi8KKworLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLworI2lmbmRlZglZWUlOSVRERVBUSAorIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCisjZW5kaWYKKworLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKyAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgorCisgICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgorICAgU0laRV9NQVggPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQorICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCisKKyNpZiBZWU1BWERFUFRIID09IDAKKyMgdW5kZWYgWVlNQVhERVBUSAorI2VuZGlmCisKKyNpZm5kZWYgWVlNQVhERVBUSAorIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisKKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKworIyBpZm5kZWYgeXlzdHJsZW4KKyMgIGlmIGRlZmluZWQgKF9fR0xJQkNfXykgJiYgZGVmaW5lZCAoX1NUUklOR19IKQorIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKyMgIGVsc2UKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAorIyAgIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKK3l5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKKyMgICBlbHNlCit5eXN0cmxlbiAoeXlzdHIpCisgICAgIGNvbnN0IGNoYXIgKnl5c3RyOworIyAgIGVuZGlmCit7CisgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3RyOworCisgIHdoaWxlICgqeXlzKysgIT0gJ1wwJykKKyAgICBjb250aW51ZTsKKworICByZXR1cm4geXlzIC0geXlzdHIgLSAxOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXlzdHBjcHkKKyMgIGlmIGRlZmluZWQgKF9fR0xJQkNfXykgJiYgZGVmaW5lZCAoX1NUUklOR19IKSAmJiBkZWZpbmVkIChfR05VX1NPVVJDRSkKKyMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5CisjICBlbHNlCisvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCisgICBZWURFU1QuICAqLworc3RhdGljIGNoYXIgKgorIyAgIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKK3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQorIyAgIGVsc2UKK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQorICAgICBjaGFyICp5eWRlc3Q7CisgICAgIGNvbnN0IGNoYXIgKnl5c3JjOworIyAgIGVuZGlmCit7CisgIHJlZ2lzdGVyIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKKyAgcmVnaXN0ZXIgY29uc3QgY2hhciAqeXlzID0geXlzcmM7CisKKyAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCisgICAgY29udGludWU7CisKKyAgcmV0dXJuIHl5ZCAtIDE7Cit9CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNsaW5lIDMxNSAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi9iaXNvbi5zaW1wbGUiCisKKworLyogVGhlIHVzZXIgY2FuIGRlZmluZSBZWVBBUlNFX1BBUkFNIGFzIHRoZSBuYW1lIG9mIGFuIGFyZ3VtZW50IHRvIGJlIHBhc3NlZAorICAgaW50byB5eXBhcnNlLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBoYXZlIHR5cGUgdm9pZCAqLgorICAgSXQgc2hvdWxkIGFjdHVhbGx5IHBvaW50IHRvIGFuIG9iamVjdC4KKyAgIEdyYW1tYXIgYWN0aW9ucyBjYW4gYWNjZXNzIHRoZSB2YXJpYWJsZSBieSBjYXN0aW5nIGl0CisgICB0byB0aGUgcHJvcGVyIHBvaW50ZXIgdHlwZS4gICovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKyMgIGRlZmluZSBZWVBBUlNFX1BBUkFNX0FSRyB2b2lkICpZWVBBUlNFX1BBUkFNCisjICBkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMCisjIGVsc2UKKyMgIGRlZmluZSBZWVBBUlNFX1BBUkFNX0FSRyBZWVBBUlNFX1BBUkFNCisjICBkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMIHZvaWQgKllZUEFSU0VfUEFSQU07CisjIGVuZGlmCisjZWxzZSAvKiAhWVlQQVJTRV9QQVJBTSAqLworIyBkZWZpbmUgWVlQQVJTRV9QQVJBTV9BUkcKKyMgZGVmaW5lIFlZUEFSU0VfUEFSQU1fREVDTAorI2VuZGlmIC8qICFZWVBBUlNFX1BBUkFNICovCisKKy8qIFByZXZlbnQgd2FybmluZyBpZiAtV3N0cmljdC1wcm90b3R5cGVzLiAgKi8KKyNpZmRlZiBfX0dOVUNfXworIyBpZmRlZiBZWVBBUlNFX1BBUkFNCitpbnQgeXlwYXJzZSAodm9pZCAqKTsKKyMgZWxzZQoraW50IHl5cGFyc2UgKHZvaWQpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFlZX0RFQ0xfVkFSSUFCTEVTIC0tIGRlcGVuZGluZyB3aGV0aGVyIHdlIHVzZSBhIHB1cmUgcGFyc2VyLAorICAgdmFyaWFibGVzIGFyZSBnbG9iYWwsIG9yIGxvY2FsIHRvIFlZUEFSU0UuICAqLworCisjZGVmaW5lIFlZX0RFQ0xfTk9OX0xTUF9WQVJJQUJMRVMJCQlcCisvKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCQkJCVwKK2ludCB5eWNoYXI7CQkJCQkJXAorCQkJCQkJCVwKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gKi8JXAorWVlTVFlQRSB5eWx2YWw7CQkJCQkJXAorCQkJCQkJCVwKKy8qIE51bWJlciBvZiBwYXJzZSBlcnJvcnMgc28gZmFyLiAgKi8JCQlcCitpbnQgeXluZXJyczsKKworI2lmIFlZTFNQX05FRURFRAorIyBkZWZpbmUgWVlfREVDTF9WQVJJQUJMRVMJCQlcCitZWV9ERUNMX05PTl9MU1BfVkFSSUFCTEVTCQkJXAorCQkJCQkJXAorLyogTG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwlcCitZWUxUWVBFIHl5bGxvYzsKKyNlbHNlCisjIGRlZmluZSBZWV9ERUNMX1ZBUklBQkxFUwkJCVwKK1lZX0RFQ0xfTk9OX0xTUF9WQVJJQUJMRVMKKyNlbmRpZgorCisKKy8qIElmIG5vbnJlZW50cmFudCwgZ2VuZXJhdGUgdGhlIHZhcmlhYmxlcyBoZXJlLiAqLworCisjaWYgIVlZUFVSRQorWVlfREVDTF9WQVJJQUJMRVMKKyNlbmRpZiAgLyogIVlZUFVSRSAqLworCitpbnQKK3l5cGFyc2UgKFlZUEFSU0VfUEFSQU1fQVJHKQorICAgICBZWVBBUlNFX1BBUkFNX0RFQ0wKK3sKKyAgLyogSWYgcmVlbnRyYW50LCBnZW5lcmF0ZSB0aGUgdmFyaWFibGVzIGhlcmUuICovCisjaWYgWVlQVVJFCisgIFlZX0RFQ0xfVkFSSUFCTEVTCisjZW5kaWYgIC8qICFZWVBVUkUgKi8KKworICByZWdpc3RlciBpbnQgeXlzdGF0ZTsKKyAgcmVnaXN0ZXIgaW50IHl5bjsKKyAgaW50IHl5cmVzdWx0OworICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KKyAgaW50IHl5ZXJyc3RhdHVzOworICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovCisgIGludCB5eWNoYXIxID0gMDsKKworICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAorICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAorICAgICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgorCisgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KKworICAvKiBUaGUgc3RhdGUgc3RhY2suICovCisgIHNob3J0CXl5c3NhW1lZSU5JVERFUFRIXTsKKyAgc2hvcnQgKnl5c3MgPSB5eXNzYTsKKyAgcmVnaXN0ZXIgc2hvcnQgKnl5c3NwOworCisgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCisgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICBZWVNUWVBFICp5eXZzID0geXl2c2E7CisgIHJlZ2lzdGVyIFlZU1RZUEUgKnl5dnNwOworCisjaWYgWVlMU1BfTkVFREVECisgIC8qIFRoZSBsb2NhdGlvbiBzdGFjay4gICovCisgIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhdOworICBZWUxUWVBFICp5eWxzID0geXlsc2E7CisgIFlZTFRZUEUgKnl5bHNwOworI2VuZGlmCisKKyNpZiBZWUxTUF9ORUVERUQKKyMgZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSwgeXlsc3AtLSkKKyNlbHNlCisjIGRlZmluZSBZWVBPUFNUQUNLICAgKHl5dnNwLS0sIHl5c3NwLS0pCisjZW5kaWYKKworICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCisKKyAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKyNpZiBZWUxTUF9ORUVERUQKKyAgWVlMVFlQRSB5eWxvYzsKKyNlbmRpZgorCisgIC8qIFdoZW4gcmVkdWNpbmcsIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkCisgICAgIHJ1bGUuICovCisgIGludCB5eWxlbjsKKworICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOworCisgIHl5c3RhdGUgPSAwOworICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKworICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCisKKyAgeXlzc3AgPSB5eXNzOworICB5eXZzcCA9IHl5dnM7CisjaWYgWVlMU1BfTkVFREVECisgIHl5bHNwID0geXlsczsKKyNlbmRpZgorICBnb3RvIHl5c2V0c3RhdGU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyB5eW5ld3N0YXRlOgorICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuIHNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuCisgICAgICovCisgIHl5c3NwKys7CisKKyB5eXNldHN0YXRlOgorICAqeXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNzcCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAxKQorICAgIHsKKyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKworI2lmZGVmIHl5b3ZlcmZsb3cKKyAgICAgIHsKKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suIFVzZSBjb3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisJc2hvcnQgKnl5c3MxID0geXlzczsKKworCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgKi8KKyMgaWYgWVlMU1BfTkVFREVECisJWVlMVFlQRSAqeXlsczEgPSB5eWxzOworCS8qIFRoaXMgdXNlZCB0byBiZSBhIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywKKwkgICBidXQgdGhhdCBtaWdodCBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKwl5eW92ZXJmbG93ICgicGFyc2VyIHN0YWNrIG92ZXJmbG93IiwKKwkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAgICAmeXlsczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKKwkJICAgICZ5eXN0YWNrc2l6ZSk7CisJeXlscyA9IHl5bHMxOworIyBlbHNlCisJeXlvdmVyZmxvdyAoInBhcnNlciBzdGFjayBvdmVyZmxvdyIsCisJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorCQkgICAgJnl5c3RhY2tzaXplKTsKKyMgZW5kaWYKKwl5eXNzID0geXlzczE7CisJeXl2cyA9IHl5dnMxOworICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQorICAgICAgZ290byB5eW92ZXJmbG93bGFiOworIyBlbHNlCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KKyAgICAgIGlmICh5eXN0YWNrc2l6ZSA+PSBZWU1BWERFUFRIKQorCWdvdG8geXlvdmVyZmxvd2xhYjsKKyAgICAgIHl5c3RhY2tzaXplICo9IDI7CisgICAgICBpZiAoeXlzdGFja3NpemUgPiBZWU1BWERFUFRIKQorCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKworICAgICAgeworCXNob3J0ICp5eXNzMSA9IHl5c3M7CisJdW5pb24geXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0cikKKwkgIGdvdG8geXlvdmVyZmxvd2xhYjsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKKyMgaWYgWVlMU1BfTkVFREVECisJWVlTVEFDS19SRUxPQ0FURSAoeXlscyk7CisjIGVuZGlmCisjIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKwlpZiAoeXlzczEgIT0geXlzc2EpCisJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKyAgICAgIH0KKyMgZW5kaWYKKyNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CisgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworI2lmIFlZTFNQX05FRURFRAorICAgICAgeXlsc3AgPSB5eWxzICsgeXlzaXplIC0gMTsKKyNlbmRpZgorCisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOworCisgICAgICBpZiAoeXlzc3AgPj0geXlzcyArIHl5c3RhY2tzaXplIC0gMSkKKwlZWUFCT1JUOworICAgIH0KKworICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworCisgIGdvdG8geXliYWNrdXA7CisKKworLyotLS0tLS0tLS0tLS4KK3wgeXliYWNrdXAuICB8CitgLS0tLS0tLS0tLS0qLworeXliYWNrdXA6CisKKy8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICAqLworLyogUmVhZCBhIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisvKiB5eXJlc3VtZTogKi8KKworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KKworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlGTEFHKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogeXljaGFyIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GCisgICAgIG9yIGEgdmFsaWQgdG9rZW4gaW4gZXh0ZXJuYWwgZm9ybS4gICovCisKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworICAgICAgeXljaGFyID0gWVlMRVg7CisgICAgfQorCisgIC8qIENvbnZlcnQgdG9rZW4gdG8gaW50ZXJuYWwgZm9ybSAoaW4geXljaGFyMSkgZm9yIGluZGV4aW5nIHRhYmxlcyB3aXRoICovCisKKyAgaWYgKHl5Y2hhciA8PSAwKQkJLyogVGhpcyBtZWFucyBlbmQgb2YgaW5wdXQuICovCisgICAgeworICAgICAgeXljaGFyMSA9IDA7CisgICAgICB5eWNoYXIgPSBZWUVPRjsJCS8qIERvbid0IGNhbGwgWVlMRVggYW55IG1vcmUgKi8KKworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisKKyNpZiBZWURFQlVHCisgICAgIC8qIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGAjaWYgWVlERUJVRycsIHNpbmNlIHdlIHVzZSB2YXJpYWJsZXMKKwl3aGljaCBhcmUgZGVmaW5lZCBvbmx5IGlmIGBZWURFQlVHJyBpcyBzZXQuICAqLworICAgICAgaWYgKHl5ZGVidWcpCisJeworCSAgWVlGUFJJTlRGIChzdGRlcnIsICJOZXh0IHRva2VuIGlzICVkICglcyIsCisJCSAgICAgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKTsKKwkgIC8qIEdpdmUgdGhlIGluZGl2aWR1YWwgcGFyc2VyIGEgd2F5IHRvIHByaW50IHRoZSBwcmVjaXNlCisJICAgICBtZWFuaW5nIG9mIGEgdG9rZW4sIGZvciBmdXJ0aGVyIGRlYnVnZ2luZyBpbmZvLiAgKi8KKyMgaWZkZWYgWVlQUklOVAorCSAgWVlQUklOVCAoc3RkZXJyLCB5eWNoYXIsIHl5bHZhbCk7CisjIGVuZGlmCisJICBZWUZQUklOVEYgKHN0ZGVyciwgIilcbiIpOworCX0KKyNlbmRpZgorICAgIH0KKworICB5eW4gKz0geXljaGFyMTsKKyAgaWYgKHl5biA8IDAgfHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tbeXluXSAhPSB5eWNoYXIxKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIHl5biA9IHl5dGFibGVbeXluXTsKKworICAvKiB5eW4gaXMgd2hhdCB0byBkbyBmb3IgdGhpcyB0b2tlbiB0eXBlIGluIHRoaXMgc3RhdGUuCisgICAgIE5lZ2F0aXZlID0+IHJlZHVjZSwgLXl5biBpcyBydWxlIG51bWJlci4KKyAgICAgUG9zaXRpdmUgPT4gc2hpZnQsIHl5biBpcyBuZXcgc3RhdGUuCisgICAgICAgTmV3IHN0YXRlIGlzIGZpbmFsIHN0YXRlID0+IGRvbid0IGJvdGhlciB0byBzaGlmdCwKKyAgICAgICBqdXN0IHJldHVybiBzdWNjZXNzLgorICAgICAwLCBvciBtb3N0IG5lZ2F0aXZlIG51bWJlciA9PiBlcnJvci4gICovCisKKyAgaWYgKHl5biA8IDApCisgICAgeworICAgICAgaWYgKHl5biA9PSBZWUZMQUcpCisJZ290byB5eWVycmxhYjsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKyAgZWxzZSBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxhYjsKKworICBpZiAoeXluID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovCisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlNoaWZ0aW5nIHRva2VuICVkICglcyksICIsCisJICAgICAgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKSk7CisKKyAgLyogRGlzY2FyZCB0aGUgdG9rZW4gYmVpbmcgc2hpZnRlZCB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KKyAgaWYgKHl5Y2hhciAhPSBZWUVPRikKKyAgICB5eWNoYXIgPSBZWUVNUFRZOworCisgICorK3l5dnNwID0geXlsdmFsOworI2lmIFlZTFNQX05FRURFRAorICAqKyt5eWxzcCA9IHl5bGxvYzsKKyNlbmRpZgorCisgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgc3RhdHVzLiAgKi8KKyAgaWYgKHl5ZXJyc3RhdHVzKQorICAgIHl5ZXJyc3RhdHVzLS07CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZGVmYXVsdDoKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworICBnb3RvIHl5cmVkdWNlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5cmVkdWNlOgorICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworICB5eWxlbiA9IHl5cjJbeXluXTsKKworICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKKyAgICAgYCQkID0gJDEnLgorCisgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gdGhlIHNlbWFudGljIHZhbHVlIG9mCisgICAgIHRoZSBsb29rYWhlYWQgdG9rZW4uICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKyAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKKyAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCisgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCisgIHl5dmFsID0geXl2c3BbMS15eWxlbl07CisKKyNpZiBZWUxTUF9ORUVERUQKKyAgLyogU2ltaWxhcmx5IGZvciB0aGUgZGVmYXVsdCBsb2NhdGlvbi4gIExldCB0aGUgdXNlciBydW4gYWRkaXRpb25hbAorICAgICBjb21tYW5kcyBpZiBmb3IgaW5zdGFuY2UgbG9jYXRpb25zIGFyZSByYW5nZXMuICAqLworICB5eWxvYyA9IHl5bHNwWzEteXlsZW5dOworICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWxzcCAtIHl5bGVuKSwgeXlsZW4pOworI2VuZGlmCisKKyNpZiBZWURFQlVHCisgIC8qIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGAjaWYgWVlERUJVRycsIHNpbmNlIHdlIHVzZSB2YXJpYWJsZXMgd2hpY2gKKyAgICAgYXJlIGRlZmluZWQgb25seSBpZiBgWVlERUJVRycgaXMgc2V0LiAgKi8KKyAgaWYgKHl5ZGVidWcpCisgICAgeworICAgICAgaW50IHl5aTsKKworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyB2aWEgcnVsZSAlZCAobGluZSAlZCksICIsCisJCSB5eW4sIHl5cmxpbmVbeXluXSk7CisKKyAgICAgIC8qIFByaW50IHRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQsIGFuZCB0aGVpciByZXN1bHQuICAqLworICAgICAgZm9yICh5eWkgPSB5eXByaHNbeXluXTsgeXlyaHNbeXlpXSA+IDA7IHl5aSsrKQorCVlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgeXl0bmFtZVt5eXJoc1t5eWldXSk7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAtPiAlc1xuIiwgeXl0bmFtZVt5eXIxW3l5bl1dKTsKKyAgICB9CisjZW5kaWYKKworICBzd2l0Y2ggKHl5bikgeworCitjYXNlIDE6CisjbGluZSAxNTEgInBsdXJhbC55IgoreworCSAgICBpZiAoeXl2c3BbMF0uZXhwID09IE5VTEwpCisJICAgICAgWVlBQk9SVDsKKwkgICAgKChzdHJ1Y3QgcGFyc2VfYXJncyAqKSBhcmcpLT5yZXMgPSB5eXZzcFswXS5leHA7CisJICB9CisgICAgYnJlYWs7CitjYXNlIDI6CisjbGluZSAxNTkgInBsdXJhbC55IgoreworCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzMgKHFtb3AsIHl5dnNwWy00XS5leHAsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisJICB9CisgICAgYnJlYWs7CitjYXNlIDM6CisjbGluZSAxNjMgInBsdXJhbC55IgoreworCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzIgKGxvciwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKwkgIH0KKyAgICBicmVhazsKK2Nhc2UgNDoKKyNsaW5lIDE2NyAicGx1cmFsLnkiCit7CisJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAobGFuZCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKwkgIH0KKyAgICBicmVhazsKK2Nhc2UgNToKKyNsaW5lIDE3MSAicGx1cmFsLnkiCit7CisJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAoeXl2c3BbLTFdLm9wLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworCSAgfQorICAgIGJyZWFrOworY2FzZSA2OgorI2xpbmUgMTc1ICJwbHVyYWwueSIKK3sKKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yICh5eXZzcFstMV0ub3AsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisJICB9CisgICAgYnJlYWs7CitjYXNlIDc6CisjbGluZSAxNzkgInBsdXJhbC55IgoreworCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzIgKHl5dnNwWy0xXS5vcCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKwkgIH0KKyAgICBicmVhazsKK2Nhc2UgODoKKyNsaW5lIDE4MyAicGx1cmFsLnkiCit7CisJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAoeXl2c3BbLTFdLm9wLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworCSAgfQorICAgIGJyZWFrOworY2FzZSA5OgorI2xpbmUgMTg3ICJwbHVyYWwueSIKK3sKKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8xIChsbm90LCB5eXZzcFswXS5leHApOworCSAgfQorICAgIGJyZWFrOworY2FzZSAxMDoKKyNsaW5lIDE5MSAicGx1cmFsLnkiCit7CisJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMCAodmFyKTsKKwkgIH0KKyAgICBicmVhazsKK2Nhc2UgMTE6CisjbGluZSAxOTUgInBsdXJhbC55IgoreworCSAgICBpZiAoKHl5dmFsLmV4cCA9IG5ld19leHBfMCAobnVtKSkgIT0gTlVMTCkKKwkgICAgICB5eXZhbC5leHAtPnZhbC5udW0gPSB5eXZzcFswXS5udW07CisJICB9CisgICAgYnJlYWs7CitjYXNlIDEyOgorI2xpbmUgMjAwICJwbHVyYWwueSIKK3sKKwkgICAgeXl2YWwuZXhwID0geXl2c3BbLTFdLmV4cDsKKwkgIH0KKyAgICBicmVhazsKK30KKworI2xpbmUgNzA1ICIvdXNyL2xvY2FsL3NoYXJlL2Jpc29uL2Jpc29uLnNpbXBsZSIKKworCisgIHl5dnNwIC09IHl5bGVuOworICB5eXNzcCAtPSB5eWxlbjsKKyNpZiBZWUxTUF9ORUVERUQKKyAgeXlsc3AgLT0geXlsZW47CisjZW5kaWYKKworI2lmIFlZREVCVUcKKyAgaWYgKHl5ZGVidWcpCisgICAgeworICAgICAgc2hvcnQgKnl5c3NwMSA9IHl5c3MgLSAxOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJzdGF0ZSBzdGFjayBub3ciKTsKKyAgICAgIHdoaWxlICh5eXNzcDEgIT0geXlzc3ApCisJWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAqKyt5eXNzcDEpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworICAgIH0KKyNlbmRpZgorCisgICorK3l5dnNwID0geXl2YWw7CisjaWYgWVlMU1BfTkVFREVECisgICorK3l5bHNwID0geXlsb2M7CisjZW5kaWYKKworICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UQkFTRV0gKyAqeXlzc3A7CisgIGlmICh5eXN0YXRlID49IDAgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRCQVNFXTsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWI6CisgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLworICBpZiAoIXl5ZXJyc3RhdHVzKQorICAgIHsKKyAgICAgICsreXluZXJyczsKKworI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisgICAgICBpZiAoeXluID4gWVlGTEFHICYmIHl5biA8IFlZTEFTVCkKKwl7CisJICBZWVNJWkVfVCB5eXNpemUgPSAwOworCSAgY2hhciAqeXltc2c7CisJICBpbnQgeXl4LCB5eWNvdW50OworCisJICB5eWNvdW50ID0gMDsKKwkgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KKwkgICAgIFlZQ0hFQ0suICAqLworCSAgZm9yICh5eXggPSB5eW4gPCAwID8gLXl5biA6IDA7CisJICAgICAgIHl5eCA8IChpbnQpIChzaXplb2YgKHl5dG5hbWUpIC8gc2l6ZW9mIChjaGFyICopKTsgeXl4KyspCisJICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4KQorCSAgICAgIHl5c2l6ZSArPSB5eXN0cmxlbiAoeXl0bmFtZVt5eXhdKSArIDE1LCB5eWNvdW50Kys7CisJICB5eXNpemUgKz0geXlzdHJsZW4gKCJwYXJzZSBlcnJvciwgdW5leHBlY3RlZCAiKSArIDE7CisJICB5eXNpemUgKz0geXlzdHJsZW4gKHl5dG5hbWVbWVlUUkFOU0xBVEUgKHl5Y2hhcildKTsKKwkgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlzaXplKTsKKwkgIGlmICh5eW1zZyAhPSAwKQorCSAgICB7CisJICAgICAgY2hhciAqeXlwID0geXlzdHBjcHkgKHl5bXNnLCAicGFyc2UgZXJyb3IsIHVuZXhwZWN0ZWQgIik7CisJICAgICAgeXlwID0geXlzdHBjcHkgKHl5cCwgeXl0bmFtZVtZWVRSQU5TTEFURSAoeXljaGFyKV0pOworCisJICAgICAgaWYgKHl5Y291bnQgPCA1KQorCQl7CisJCSAgeXljb3VudCA9IDA7CisJCSAgZm9yICh5eXggPSB5eW4gPCAwID8gLXl5biA6IDA7CisJCSAgICAgICB5eXggPCAoaW50KSAoc2l6ZW9mICh5eXRuYW1lKSAvIHNpemVvZiAoY2hhciAqKSk7CisJCSAgICAgICB5eXgrKykKKwkJICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4KQorCQkgICAgICB7CisJCQljb25zdCBjaGFyICp5eXEgPSAhIHl5Y291bnQgPyAiLCBleHBlY3RpbmcgIiA6ICIgb3IgIjsKKwkJCXl5cCA9IHl5c3RwY3B5ICh5eXAsIHl5cSk7CisJCQl5eXAgPSB5eXN0cGNweSAoeXlwLCB5eXRuYW1lW3l5eF0pOworCQkJeXljb3VudCsrOworCQkgICAgICB9CisJCX0KKwkgICAgICB5eWVycm9yICh5eW1zZyk7CisJICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeXllcnJvciAoInBhcnNlIGVycm9yOyBhbHNvIHZpcnR1YWwgbWVtb3J5IGV4aGF1c3RlZCIpOworCX0KKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBkZWZpbmVkIChZWUVSUk9SX1ZFUkJPU0UpICovCisJeXllcnJvciAoInBhcnNlIGVycm9yIik7CisgICAgfQorICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYjEgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgYW4gYWN0aW9uIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjE6CisgIGlmICh5eWVycnN0YXR1cyA9PSAzKQorICAgIHsKKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKwkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLworCisgICAgICAvKiByZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQgKi8KKyAgICAgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJWVlBQk9SVDsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkRpc2NhcmRpbmcgdG9rZW4gJWQgKCVzKS5cbiIsCisJCSAgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKSk7CisgICAgICB5eWNoYXIgPSBZWUVNUFRZOworICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgICAgdG9rZW4uICAqLworCisgIHl5ZXJyc3RhdHVzID0gMzsJCS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcyAqLworCisgIGdvdG8geXllcnJoYW5kbGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmRlZmF1bHQgLS0gY3VycmVudCBzdGF0ZSBkb2VzIG5vdCBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciB0aGUgfAorfCBlcnJvciB0b2tlbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJkZWZhdWx0OgorI2lmIDAKKyAgLyogVGhpcyBpcyB3cm9uZzsgb25seSBzdGF0ZXMgdGhhdCBleHBsaWNpdGx5IHdhbnQgZXJyb3IgdG9rZW5zCisgICAgIHNob3VsZCBzaGlmdCB0aGVtLiAgKi8KKworICAvKiBJZiBpdHMgZGVmYXVsdCBpcyB0byBhY2NlcHQgYW55IHRva2VuLCBvay4gIE90aGVyd2lzZSBwb3AgaXQuICAqLworICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5bikKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKyNlbmRpZgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycnBvcCAtLSBwb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSB8Cit8IGVycm9yIHRva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJwb3A6CisgIGlmICh5eXNzcCA9PSB5eXNzKQorICAgIFlZQUJPUlQ7CisgIHl5dnNwLS07CisgIHl5c3RhdGUgPSAqLS15eXNzcDsKKyNpZiBZWUxTUF9ORUVERUQKKyAgeXlsc3AtLTsKKyNlbmRpZgorCisjaWYgWVlERUJVRworICBpZiAoeXlkZWJ1ZykKKyAgICB7CisgICAgICBzaG9ydCAqeXlzc3AxID0geXlzcyAtIDE7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIkVycm9yOiBzdGF0ZSBzdGFjayBub3ciKTsKKyAgICAgIHdoaWxlICh5eXNzcDEgIT0geXlzc3ApCisJWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAqKyt5eXNzcDEpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworICAgIH0KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmhhbmRsZS4gIHwKK2AtLS0tLS0tLS0tLS0tLSovCit5eWVycmhhbmRsZToKKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZRkxBRykKKyAgICBnb3RvIHl5ZXJyZGVmYXVsdDsKKworICB5eW4gKz0gWVlURVJST1I7CisgIGlmICh5eW4gPCAwIHx8IHl5biA+IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0gWVlURVJST1IpCisgICAgZ290byB5eWVycmRlZmF1bHQ7CisKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDwgMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IFlZRkxBRykKKwlnb3RvIHl5ZXJycG9wOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXlyZWR1Y2U7CisgICAgfQorICBlbHNlIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJycG9wOworCisgIGlmICh5eW4gPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICBZWURQUklOVEYgKChzdGRlcnIsICJTaGlmdGluZyBlcnJvciB0b2tlbiwgIikpOworCisgICorK3l5dnNwID0geXlsdmFsOworI2lmIFlZTFNQX05FRURFRAorICAqKyt5eWxzcCA9IHl5bGxvYzsKKyNlbmRpZgorCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFjY2VwdGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5cmV0dXJuOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFib3J0bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eW92ZXJmbG93YWIgLS0gcGFyc2VyIG92ZXJmbG93IGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5b3ZlcmZsb3dsYWI6CisgIHl5ZXJyb3IgKCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciKTsKKyAgeXlyZXN1bHQgPSAyOworICAvKiBGYWxsIHRocm91Z2guICAqLworCit5eXJldHVybjoKKyNpZm5kZWYgeXlvdmVyZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworI2VuZGlmCisgIHJldHVybiB5eXJlc3VsdDsKK30KKyNsaW5lIDIwNSAicGx1cmFsLnkiCisKKwordm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK0ZSRUVfRVhQUkVTU0lPTiAoc3RydWN0IGV4cHJlc3Npb24gKmV4cCkKK3sKKyAgaWYgKGV4cCA9PSBOVUxMKQorICAgIHJldHVybjsKKworICAvKiBIYW5kbGUgdGhlIHJlY3Vyc2l2ZSBjYXNlLiAgKi8KKyAgc3dpdGNoIChleHAtPm5hcmdzKQorICAgIHsKKyAgICBjYXNlIDM6CisgICAgICBGUkVFX0VYUFJFU1NJT04gKGV4cC0+dmFsLmFyZ3NbMl0pOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIDI6CisgICAgICBGUkVFX0VYUFJFU1NJT04gKGV4cC0+dmFsLmFyZ3NbMV0pOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIDE6CisgICAgICBGUkVFX0VYUFJFU1NJT04gKGV4cC0+dmFsLmFyZ3NbMF0pOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorCisgIGZyZWUgKGV4cCk7Cit9CisKKworc3RhdGljIGludAoreXlsZXggKFlZU1RZUEUgKmx2YWwsIGNvbnN0IGNoYXIgKipwZXhwKQoreworICBjb25zdCBjaGFyICpleHAgPSAqcGV4cDsKKyAgaW50IHJlc3VsdDsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAoZXhwWzBdID09ICdcMCcpCisJeworCSAgKnBleHAgPSBleHA7CisJICByZXR1cm4gWVlFT0Y7CisJfQorCisgICAgICBpZiAoZXhwWzBdICE9ICcgJyAmJiBleHBbMF0gIT0gJ1x0JykKKwlicmVhazsKKworICAgICAgKytleHA7CisgICAgfQorCisgIHJlc3VsdCA9ICpleHArKzsKKyAgc3dpdGNoIChyZXN1bHQpCisgICAgeworICAgIGNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKyAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisgICAgICB7CisJdW5zaWduZWQgbG9uZyBpbnQgbiA9IHJlc3VsdCAtICcwJzsKKwl3aGlsZSAoZXhwWzBdID49ICcwJyAmJiBleHBbMF0gPD0gJzknKQorCSAgeworCSAgICBuICo9IDEwOworCSAgICBuICs9IGV4cFswXSAtICcwJzsKKwkgICAgKytleHA7CisJICB9CisJbHZhbC0+bnVtID0gbjsKKwlyZXN1bHQgPSBOVU1CRVI7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgJz0nOgorICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisJeworCSAgKytleHA7CisJICBsdmFsLT5vcCA9IGVxdWFsOworCSAgcmVzdWx0ID0gRVFVT1AyOworCX0KKyAgICAgIGVsc2UKKwlyZXN1bHQgPSBZWUVSUkNPREU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgJyEnOgorICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisJeworCSAgKytleHA7CisJICBsdmFsLT5vcCA9IG5vdF9lcXVhbDsKKwkgIHJlc3VsdCA9IEVRVU9QMjsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgJyYnOgorICAgIGNhc2UgJ3wnOgorICAgICAgaWYgKGV4cFswXSA9PSByZXN1bHQpCisJKytleHA7CisgICAgICBlbHNlCisJcmVzdWx0ID0gWVlFUlJDT0RFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICc8JzoKKyAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorCXsKKwkgICsrZXhwOworCSAgbHZhbC0+b3AgPSBsZXNzX29yX2VxdWFsOworCX0KKyAgICAgIGVsc2UKKwlsdmFsLT5vcCA9IGxlc3NfdGhhbjsKKyAgICAgIHJlc3VsdCA9IENNUE9QMjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnPic6CisgICAgICBpZiAoZXhwWzBdID09ICc9JykKKwl7CisJICArK2V4cDsKKwkgIGx2YWwtPm9wID0gZ3JlYXRlcl9vcl9lcXVhbDsKKwl9CisgICAgICBlbHNlCisJbHZhbC0+b3AgPSBncmVhdGVyX3RoYW47CisgICAgICByZXN1bHQgPSBDTVBPUDI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgJyonOgorICAgICAgbHZhbC0+b3AgPSBtdWx0OworICAgICAgcmVzdWx0ID0gTVVMT1AyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICcvJzoKKyAgICAgIGx2YWwtPm9wID0gZGl2aWRlOworICAgICAgcmVzdWx0ID0gTVVMT1AyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICclJzoKKyAgICAgIGx2YWwtPm9wID0gbW9kdWxlOworICAgICAgcmVzdWx0ID0gTVVMT1AyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICcrJzoKKyAgICAgIGx2YWwtPm9wID0gcGx1czsKKyAgICAgIHJlc3VsdCA9IEFERE9QMjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnLSc6CisgICAgICBsdmFsLT5vcCA9IG1pbnVzOworICAgICAgcmVzdWx0ID0gQURET1AyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICduJzoKKyAgICBjYXNlICc/JzoKKyAgICBjYXNlICc6JzoKKyAgICBjYXNlICcoJzoKKyAgICBjYXNlICcpJzoKKyAgICAgIC8qIE5vdGhpbmcsIGp1c3QgcmV0dXJuIHRoZSBjaGFyYWN0ZXIuICAqLworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICc7JzoKKyAgICBjYXNlICdcbic6CisgICAgY2FzZSAnXDAnOgorICAgICAgLyogQmUgc2FmZSBhbmQgbGV0IHRoZSB1c2VyIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2Fpbi4gICovCisgICAgICAtLWV4cDsKKyAgICAgIHJlc3VsdCA9IFlZRU9GOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmVzdWx0ID0gWVlFUlJDT0RFOworI2lmIFlZREVCVUcgIT0gMAorICAgICAgLS1leHA7CisjZW5kaWYKKyAgICAgIGJyZWFrOworICAgIH0KKworICAqcGV4cCA9IGV4cDsKKworICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyB2b2lkCit5eWVycm9yIChjb25zdCBjaGFyICpzdHIpCit7CisgIC8qIERvIG5vdGhpbmcuICBXZSBkb24ndCBwcmludCBlcnJvciBtZXNzYWdlcyBoZXJlLiAgKi8KK30KZGlmZiAtLWdpdCBhL2ludGwvcGx1cmFsLnkgYi9pbnRsL3BsdXJhbC55Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMzNiZDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL3BsdXJhbC55CkBAIC0wLDAgKzEsMzgxIEBACisleworLyogRXhwcmVzc2lvbiBwYXJzaW5nIGZvciBwbHVyYWwgZm9ybSBzZWxlY3Rpb24uCisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisvKiBUaGUgYmlzb24gZ2VuZXJhdGVkIHBhcnNlciB1c2VzIGFsbG9jYS4gIEFJWCAzIGZvcmNlcyB1cyB0byBwdXQgdGhpcworICAgZGVjbGFyYXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIFRoZSBkZWNsYXJhdGlvbiBpbiBiaXNvbidzCisgICBza2VsZXRvbiBmaWxlIGNvbWVzIHRvbyBsYXRlLiAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4KKyAgIGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZSBhcmJpdHJhcnkgc3lzdGVtIGhlYWRlcnMuICAqLworI2lmIGRlZmluZWQgX0FJWCAmJiAhZGVmaW5lZCBfX0dOVUNfXworICNwcmFnbWEgYWxsb2NhCisjZW5kaWYKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInBsdXJhbC1leHAuaCIKKworLyogVGhlIG1haW4gZnVuY3Rpb24gZ2VuZXJhdGVkIGJ5IHRoZSBwYXJzZXIgaXMgY2FsbGVkIF9fZ2V0dGV4dHBhcnNlLAorICAgYnV0IHdlIHdhbnQgaXQgdG8gYmUgY2FsbGVkIFBMVVJBTF9QQVJTRS4gICovCisjaWZuZGVmIF9MSUJDCisjIGRlZmluZSBfX2dldHRleHRwYXJzZSBQTFVSQUxfUEFSU0UKKyNlbmRpZgorCisjZGVmaW5lIFlZTEVYX1BBUkFNCSYoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPmNwCisjZGVmaW5lIFlZUEFSU0VfUEFSQU0JYXJnCislfQorJXB1cmVfcGFyc2VyCislZXhwZWN0IDcKKworJXVuaW9uIHsKKyAgdW5zaWduZWQgbG9uZyBpbnQgbnVtOworICBlbnVtIG9wZXJhdG9yIG9wOworICBzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwOworfQorCisleworLyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zLiAgKi8KK3N0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWwsIGNvbnN0IGNoYXIgKipwZXhwKTsKK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKnN0cik7CisKKy8qIEFsbG9jYXRpb24gb2YgZXhwcmVzc2lvbnMuICAqLworCitzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gKgorbmV3X2V4cCAoaW50IG5hcmdzLCBlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqIGNvbnN0ICphcmdzKQoreworICBpbnQgaTsKKyAgc3RydWN0IGV4cHJlc3Npb24gKm5ld3A7CisKKyAgLyogSWYgYW55IG9mIHRoZSBhcmd1bWVudCBjb3VsZCBub3QgYmUgbWFsbG9jJ2VkLCBqdXN0IHJldHVybiBOVUxMLiAgKi8KKyAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKyAgICBpZiAoYXJnc1tpXSA9PSBOVUxMKQorICAgICAgZ290byBmYWlsOworCisgIC8qIEFsbG9jYXRlIGEgbmV3IGV4cHJlc3Npb24uICAqLworICBuZXdwID0gKHN0cnVjdCBleHByZXNzaW9uICopIG1hbGxvYyAoc2l6ZW9mICgqbmV3cCkpOworICBpZiAobmV3cCAhPSBOVUxMKQorICAgIHsKKyAgICAgIG5ld3AtPm5hcmdzID0gbmFyZ3M7CisgICAgICBuZXdwLT5vcGVyYXRpb24gPSBvcDsKKyAgICAgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisJbmV3cC0+dmFsLmFyZ3NbaV0gPSBhcmdzW2ldOworICAgICAgcmV0dXJuIG5ld3A7CisgICAgfQorCisgZmFpbDoKKyAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKyAgICBGUkVFX0VYUFJFU1NJT04gKGFyZ3NbaV0pOworCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKK25ld19leHBfMCAoZW51bSBvcGVyYXRvciBvcCkKK3sKKyAgcmV0dXJuIG5ld19leHAgKDAsIG9wLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCituZXdfZXhwXzEgKGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICpyaWdodCkKK3sKKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbMV07CisKKyAgYXJnc1swXSA9IHJpZ2h0OworICByZXR1cm4gbmV3X2V4cCAoMSwgb3AsIGFyZ3MpOworfQorCitzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gKgorbmV3X2V4cF8yIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqbGVmdCwgc3RydWN0IGV4cHJlc3Npb24gKnJpZ2h0KQoreworICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1syXTsKKworICBhcmdzWzBdID0gbGVmdDsKKyAgYXJnc1sxXSA9IHJpZ2h0OworICByZXR1cm4gbmV3X2V4cCAoMiwgb3AsIGFyZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKK25ld19leHBfMyAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmJleHAsCisJICAgc3RydWN0IGV4cHJlc3Npb24gKnRicmFuY2gsIHN0cnVjdCBleHByZXNzaW9uICpmYnJhbmNoKQoreworICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1szXTsKKworICBhcmdzWzBdID0gYmV4cDsKKyAgYXJnc1sxXSA9IHRicmFuY2g7CisgIGFyZ3NbMl0gPSBmYnJhbmNoOworICByZXR1cm4gbmV3X2V4cCAoMywgb3AsIGFyZ3MpOworfQorCislfQorCisvKiBUaGlzIGRlY2xhcmVzIHRoYXQgYWxsIG9wZXJhdG9ycyBoYXZlIHRoZSBzYW1lIGFzc29jaWF0aXZpdHkgYW5kIHRoZQorICAgcHJlY2VkZW5jZSBvcmRlciBhcyBpbiBDLiAgU2VlIFtIYXJiaXNvbiwgU3RlZWxlOiBDLCBBIFJlZmVyZW5jZSBNYW51YWxdLgorICAgVGhlcmUgaXMgbm8gdW5hcnkgbWludXMgYW5kIG5vIGJpdHdpc2Ugb3BlcmF0b3JzLgorICAgT3BlcmF0b3JzIHdpdGggdGhlIHNhbWUgc3ludGFjdGljIGJlaGF2aW91ciBoYXZlIGJlZW4gbWVyZ2VkIGludG8gYSBzaW5nbGUKKyAgIHRva2VuLCB0byBzYXZlIHNwYWNlIGluIHRoZSBhcnJheSBnZW5lcmF0ZWQgYnkgYmlzb24uICAqLworJXJpZ2h0ICc/JwkJLyogICA/CQkqLworJWxlZnQgJ3wnCQkvKiAgIHx8CQkqLworJWxlZnQgJyYnCQkvKiAgICYmCQkqLworJWxlZnQgRVFVT1AyCQkvKiAgID09ICE9CSovCislbGVmdCBDTVBPUDIJCS8qICAgPCA+IDw9ID49CSovCislbGVmdCBBRERPUDIJCS8qICAgKyAtCSovCislbGVmdCBNVUxPUDIJCS8qICAgKiAvICUJKi8KKyVyaWdodCAnIScJCS8qICAgIQkJKi8KKworJXRva2VuIDxvcD4gRVFVT1AyIENNUE9QMiBBRERPUDIgTVVMT1AyCisldG9rZW4gPG51bT4gTlVNQkVSCisldHlwZSA8ZXhwPiBleHAKKworJSUKKworc3RhcnQ6CSAgZXhwCisJICB7CisJICAgIGlmICgkMSA9PSBOVUxMKQorCSAgICAgIFlZQUJPUlQ7CisJICAgICgoc3RydWN0IHBhcnNlX2FyZ3MgKikgYXJnKS0+cmVzID0gJDE7CisJICB9CisJOworCitleHA6CSAgZXhwICc/JyBleHAgJzonIGV4cAorCSAgeworCSAgICAkJCA9IG5ld19leHBfMyAocW1vcCwgJDEsICQzLCAkNSk7CisJICB9CisJfCBleHAgJ3wnIGV4cAorCSAgeworCSAgICAkJCA9IG5ld19leHBfMiAobG9yLCAkMSwgJDMpOworCSAgfQorCXwgZXhwICcmJyBleHAKKwkgIHsKKwkgICAgJCQgPSBuZXdfZXhwXzIgKGxhbmQsICQxLCAkMyk7CisJICB9CisJfCBleHAgRVFVT1AyIGV4cAorCSAgeworCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisJICB9CisJfCBleHAgQ01QT1AyIGV4cAorCSAgeworCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisJICB9CisJfCBleHAgQURET1AyIGV4cAorCSAgeworCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisJICB9CisJfCBleHAgTVVMT1AyIGV4cAorCSAgeworCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisJICB9CisJfCAnIScgZXhwCisJICB7CisJICAgICQkID0gbmV3X2V4cF8xIChsbm90LCAkMik7CisJICB9CisJfCAnbicKKwkgIHsKKwkgICAgJCQgPSBuZXdfZXhwXzAgKHZhcik7CisJICB9CisJfCBOVU1CRVIKKwkgIHsKKwkgICAgaWYgKCgkJCA9IG5ld19leHBfMCAobnVtKSkgIT0gTlVMTCkKKwkgICAgICAkJC0+dmFsLm51bSA9ICQxOworCSAgfQorCXwgJygnIGV4cCAnKScKKwkgIHsKKwkgICAgJCQgPSAkMjsKKwkgIH0KKwk7CisKKyUlCisKK3ZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCitGUkVFX0VYUFJFU1NJT04gKHN0cnVjdCBleHByZXNzaW9uICpleHApCit7CisgIGlmIChleHAgPT0gTlVMTCkKKyAgICByZXR1cm47CisKKyAgLyogSGFuZGxlIHRoZSByZWN1cnNpdmUgY2FzZS4gICovCisgIHN3aXRjaCAoZXhwLT5uYXJncykKKyAgICB7CisgICAgY2FzZSAzOgorICAgICAgRlJFRV9FWFBSRVNTSU9OIChleHAtPnZhbC5hcmdzWzJdKTsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSAyOgorICAgICAgRlJFRV9FWFBSRVNTSU9OIChleHAtPnZhbC5hcmdzWzFdKTsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSAxOgorICAgICAgRlJFRV9FWFBSRVNTSU9OIChleHAtPnZhbC5hcmdzWzBdKTsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKworICBmcmVlIChleHApOworfQorCisKK3N0YXRpYyBpbnQKK3l5bGV4IChZWVNUWVBFICpsdmFsLCBjb25zdCBjaGFyICoqcGV4cCkKK3sKKyAgY29uc3QgY2hhciAqZXhwID0gKnBleHA7CisgIGludCByZXN1bHQ7CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaWYgKGV4cFswXSA9PSAnXDAnKQorCXsKKwkgICpwZXhwID0gZXhwOworCSAgcmV0dXJuIFlZRU9GOworCX0KKworICAgICAgaWYgKGV4cFswXSAhPSAnICcgJiYgZXhwWzBdICE9ICdcdCcpCisJYnJlYWs7CisKKyAgICAgICsrZXhwOworICAgIH0KKworICByZXN1bHQgPSAqZXhwKys7CisgIHN3aXRjaCAocmVzdWx0KQorICAgIHsKKyAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorICAgICAgeworCXVuc2lnbmVkIGxvbmcgaW50IG4gPSByZXN1bHQgLSAnMCc7CisJd2hpbGUgKGV4cFswXSA+PSAnMCcgJiYgZXhwWzBdIDw9ICc5JykKKwkgIHsKKwkgICAgbiAqPSAxMDsKKwkgICAgbiArPSBleHBbMF0gLSAnMCc7CisJICAgICsrZXhwOworCSAgfQorCWx2YWwtPm51bSA9IG47CisJcmVzdWx0ID0gTlVNQkVSOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlICc9JzoKKyAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorCXsKKwkgICsrZXhwOworCSAgbHZhbC0+b3AgPSBlcXVhbDsKKwkgIHJlc3VsdCA9IEVRVU9QMjsKKwl9CisgICAgICBlbHNlCisJcmVzdWx0ID0gWVlFUlJDT0RFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICchJzoKKyAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorCXsKKwkgICsrZXhwOworCSAgbHZhbC0+b3AgPSBub3RfZXF1YWw7CisJICByZXN1bHQgPSBFUVVPUDI7CisJfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlICcmJzoKKyAgICBjYXNlICd8JzoKKyAgICAgIGlmIChleHBbMF0gPT0gcmVzdWx0KQorCSsrZXhwOworICAgICAgZWxzZQorCXJlc3VsdCA9IFlZRVJSQ09ERTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnPCc6CisgICAgICBpZiAoZXhwWzBdID09ICc9JykKKwl7CisJICArK2V4cDsKKwkgIGx2YWwtPm9wID0gbGVzc19vcl9lcXVhbDsKKwl9CisgICAgICBlbHNlCisJbHZhbC0+b3AgPSBsZXNzX3RoYW47CisgICAgICByZXN1bHQgPSBDTVBPUDI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgJz4nOgorICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisJeworCSAgKytleHA7CisJICBsdmFsLT5vcCA9IGdyZWF0ZXJfb3JfZXF1YWw7CisJfQorICAgICAgZWxzZQorCWx2YWwtPm9wID0gZ3JlYXRlcl90aGFuOworICAgICAgcmVzdWx0ID0gQ01QT1AyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICcqJzoKKyAgICAgIGx2YWwtPm9wID0gbXVsdDsKKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnLyc6CisgICAgICBsdmFsLT5vcCA9IGRpdmlkZTsKKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnJSc6CisgICAgICBsdmFsLT5vcCA9IG1vZHVsZTsKKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnKyc6CisgICAgICBsdmFsLT5vcCA9IHBsdXM7CisgICAgICByZXN1bHQgPSBBRERPUDI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgJy0nOgorICAgICAgbHZhbC0+b3AgPSBtaW51czsKKyAgICAgIHJlc3VsdCA9IEFERE9QMjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnbic6CisgICAgY2FzZSAnPyc6CisgICAgY2FzZSAnOic6CisgICAgY2FzZSAnKCc6CisgICAgY2FzZSAnKSc6CisgICAgICAvKiBOb3RoaW5nLCBqdXN0IHJldHVybiB0aGUgY2hhcmFjdGVyLiAgKi8KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnOyc6CisgICAgY2FzZSAnXG4nOgorICAgIGNhc2UgJ1wwJzoKKyAgICAgIC8qIEJlIHNhZmUgYW5kIGxldCB0aGUgdXNlciBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4uICAqLworICAgICAgLS1leHA7CisgICAgICByZXN1bHQgPSBZWUVPRjsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJlc3VsdCA9IFlZRVJSQ09ERTsKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIC0tZXhwOworI2VuZGlmCisgICAgICBicmVhazsKKyAgICB9CisKKyAgKnBleHAgPSBleHA7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgdm9pZAoreXllcnJvciAoY29uc3QgY2hhciAqc3RyKQoreworICAvKiBEbyBub3RoaW5nLiAgV2UgZG9uJ3QgcHJpbnQgZXJyb3IgbWVzc2FnZXMgaGVyZS4gICovCit9CmRpZmYgLS1naXQgYS9pbnRsL3ByaW50Zi1hcmdzLmMgYi9pbnRsL3ByaW50Zi1hcmdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZmMzIxOQotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvcHJpbnRmLWFyZ3MuYwpAQCAtMCwwICsxLDExOSBAQAorLyogRGVjb21wb3NlZCBwcmludGYgYXJndW1lbnQgbGlzdC4KKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSAicHJpbnRmLWFyZ3MuaCIKKworI2lmZGVmIFNUQVRJQworU1RBVElDCisjZW5kaWYKK2ludAorcHJpbnRmX2ZldGNoYXJncyAodmFfbGlzdCBhcmdzLCBhcmd1bWVudHMgKmEpCit7CisgIHNpemVfdCBpOworICBhcmd1bWVudCAqYXA7CisKKyAgZm9yIChpID0gMCwgYXAgPSAmYS0+YXJnWzBdOyBpIDwgYS0+Y291bnQ7IGkrKywgYXArKykKKyAgICBzd2l0Y2ggKGFwLT50eXBlKQorICAgICAgeworICAgICAgY2FzZSBUWVBFX1NDSEFSOgorCWFwLT5hLmFfc2NoYXIgPSB2YV9hcmcgKGFyZ3MsIC8qc2lnbmVkIGNoYXIqLyBpbnQpOworCWJyZWFrOworICAgICAgY2FzZSBUWVBFX1VDSEFSOgorCWFwLT5hLmFfdWNoYXIgPSB2YV9hcmcgKGFyZ3MsIC8qdW5zaWduZWQgY2hhciovIGludCk7CisJYnJlYWs7CisgICAgICBjYXNlIFRZUEVfU0hPUlQ6CisJYXAtPmEuYV9zaG9ydCA9IHZhX2FyZyAoYXJncywgLypzaG9ydCovIGludCk7CisJYnJlYWs7CisgICAgICBjYXNlIFRZUEVfVVNIT1JUOgorCWFwLT5hLmFfdXNob3J0ID0gdmFfYXJnIChhcmdzLCAvKnVuc2lnbmVkIHNob3J0Ki8gaW50KTsKKwlicmVhazsKKyAgICAgIGNhc2UgVFlQRV9JTlQ6CisJYXAtPmEuYV9pbnQgPSB2YV9hcmcgKGFyZ3MsIGludCk7CisJYnJlYWs7CisgICAgICBjYXNlIFRZUEVfVUlOVDoKKwlhcC0+YS5hX3VpbnQgPSB2YV9hcmcgKGFyZ3MsIHVuc2lnbmVkIGludCk7CisJYnJlYWs7CisgICAgICBjYXNlIFRZUEVfTE9OR0lOVDoKKwlhcC0+YS5hX2xvbmdpbnQgPSB2YV9hcmcgKGFyZ3MsIGxvbmcgaW50KTsKKwlicmVhazsKKyAgICAgIGNhc2UgVFlQRV9VTE9OR0lOVDoKKwlhcC0+YS5hX3Vsb25naW50ID0gdmFfYXJnIChhcmdzLCB1bnNpZ25lZCBsb25nIGludCk7CisJYnJlYWs7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgIGNhc2UgVFlQRV9MT05HTE9OR0lOVDoKKwlhcC0+YS5hX2xvbmdsb25naW50ID0gdmFfYXJnIChhcmdzLCBsb25nIGxvbmcgaW50KTsKKwlicmVhazsKKyAgICAgIGNhc2UgVFlQRV9VTE9OR0xPTkdJTlQ6CisJYXAtPmEuYV91bG9uZ2xvbmdpbnQgPSB2YV9hcmcgKGFyZ3MsIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpOworCWJyZWFrOworI2VuZGlmCisgICAgICBjYXNlIFRZUEVfRE9VQkxFOgorCWFwLT5hLmFfZG91YmxlID0gdmFfYXJnIChhcmdzLCBkb3VibGUpOworCWJyZWFrOworI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKKyAgICAgIGNhc2UgVFlQRV9MT05HRE9VQkxFOgorCWFwLT5hLmFfbG9uZ2RvdWJsZSA9IHZhX2FyZyAoYXJncywgbG9uZyBkb3VibGUpOworCWJyZWFrOworI2VuZGlmCisgICAgICBjYXNlIFRZUEVfQ0hBUjoKKwlhcC0+YS5hX2NoYXIgPSB2YV9hcmcgKGFyZ3MsIGludCk7CisJYnJlYWs7CisjaWZkZWYgSEFWRV9XSU5UX1QKKyAgICAgIGNhc2UgVFlQRV9XSURFX0NIQVI6CisJYXAtPmEuYV93aWRlX2NoYXIgPSB2YV9hcmcgKGFyZ3MsIHdpbnRfdCk7CisJYnJlYWs7CisjZW5kaWYKKyAgICAgIGNhc2UgVFlQRV9TVFJJTkc6CisJYXAtPmEuYV9zdHJpbmcgPSB2YV9hcmcgKGFyZ3MsIGNvbnN0IGNoYXIgKik7CisJYnJlYWs7CisjaWZkZWYgSEFWRV9XQ0hBUl9UCisgICAgICBjYXNlIFRZUEVfV0lERV9TVFJJTkc6CisJYXAtPmEuYV93aWRlX3N0cmluZyA9IHZhX2FyZyAoYXJncywgY29uc3Qgd2NoYXJfdCAqKTsKKwlicmVhazsKKyNlbmRpZgorICAgICAgY2FzZSBUWVBFX1BPSU5URVI6CisJYXAtPmEuYV9wb2ludGVyID0gdmFfYXJnIChhcmdzLCB2b2lkICopOworCWJyZWFrOworICAgICAgY2FzZSBUWVBFX0NPVU5UX1NDSEFSX1BPSU5URVI6CisJYXAtPmEuYV9jb3VudF9zY2hhcl9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBzaWduZWQgY2hhciAqKTsKKwlicmVhazsKKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSOgorCWFwLT5hLmFfY291bnRfc2hvcnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgc2hvcnQgKik7CisJYnJlYWs7CisgICAgICBjYXNlIFRZUEVfQ09VTlRfSU5UX1BPSU5URVI6CisJYXAtPmEuYV9jb3VudF9pbnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgaW50ICopOworCWJyZWFrOworICAgICAgY2FzZSBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUjoKKwlhcC0+YS5hX2NvdW50X2xvbmdpbnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgbG9uZyBpbnQgKik7CisJYnJlYWs7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9MT05HTE9OR0lOVF9QT0lOVEVSOgorCWFwLT5hLmFfY291bnRfbG9uZ2xvbmdpbnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgbG9uZyBsb25nIGludCAqKTsKKwlicmVhazsKKyNlbmRpZgorICAgICAgZGVmYXVsdDoKKwkvKiBVbmtub3duIHR5cGUuICAqLworCXJldHVybiAtMTsKKyAgICAgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9pbnRsL3ByaW50Zi1hcmdzLmggYi9pbnRsL3ByaW50Zi1hcmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExZTY0YwotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvcHJpbnRmLWFyZ3MuaApAQCAtMCwwICsxLDEzNyBAQAorLyogRGVjb21wb3NlZCBwcmludGYgYXJndW1lbnQgbGlzdC4KKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmbmRlZiBfUFJJTlRGX0FSR1NfSAorI2RlZmluZSBfUFJJTlRGX0FSR1NfSAorCisvKiBHZXQgc2l6ZV90LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogR2V0IHdjaGFyX3QuICAqLworI2lmZGVmIEhBVkVfV0NIQVJfVAorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorCisvKiBHZXQgd2ludF90LiAgKi8KKyNpZmRlZiBIQVZFX1dJTlRfVAorIyBpbmNsdWRlIDx3Y2hhci5oPgorI2VuZGlmCisKKy8qIEdldCB2YV9saXN0LiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworCisvKiBBcmd1bWVudCB0eXBlcyAqLwordHlwZWRlZiBlbnVtCit7CisgIFRZUEVfTk9ORSwKKyAgVFlQRV9TQ0hBUiwKKyAgVFlQRV9VQ0hBUiwKKyAgVFlQRV9TSE9SVCwKKyAgVFlQRV9VU0hPUlQsCisgIFRZUEVfSU5ULAorICBUWVBFX1VJTlQsCisgIFRZUEVfTE9OR0lOVCwKKyAgVFlQRV9VTE9OR0lOVCwKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICBUWVBFX0xPTkdMT05HSU5ULAorICBUWVBFX1VMT05HTE9OR0lOVCwKKyNlbmRpZgorICBUWVBFX0RPVUJMRSwKKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisgIFRZUEVfTE9OR0RPVUJMRSwKKyNlbmRpZgorICBUWVBFX0NIQVIsCisjaWZkZWYgSEFWRV9XSU5UX1QKKyAgVFlQRV9XSURFX0NIQVIsCisjZW5kaWYKKyAgVFlQRV9TVFJJTkcsCisjaWZkZWYgSEFWRV9XQ0hBUl9UCisgIFRZUEVfV0lERV9TVFJJTkcsCisjZW5kaWYKKyAgVFlQRV9QT0lOVEVSLAorICBUWVBFX0NPVU5UX1NDSEFSX1BPSU5URVIsCisgIFRZUEVfQ09VTlRfU0hPUlRfUE9JTlRFUiwKKyAgVFlQRV9DT1VOVF9JTlRfUE9JTlRFUiwKKyAgVFlQRV9DT1VOVF9MT05HSU5UX1BPSU5URVIKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworLCBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVIKKyNlbmRpZgorfSBhcmdfdHlwZTsKKworLyogUG9seW1vcnBoaWMgYXJndW1lbnQgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIGFyZ190eXBlIHR5cGU7CisgIHVuaW9uCisgIHsKKyAgICBzaWduZWQgY2hhcgkJCWFfc2NoYXI7CisgICAgdW5zaWduZWQgY2hhcgkJYV91Y2hhcjsKKyAgICBzaG9ydAkJCWFfc2hvcnQ7CisgICAgdW5zaWduZWQgc2hvcnQJCWFfdXNob3J0OworICAgIGludAkJCQlhX2ludDsKKyAgICB1bnNpZ25lZCBpbnQJCWFfdWludDsKKyAgICBsb25nIGludAkJCWFfbG9uZ2ludDsKKyAgICB1bnNpZ25lZCBsb25nIGludAkJYV91bG9uZ2ludDsKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgIGxvbmcgbG9uZyBpbnQJCWFfbG9uZ2xvbmdpbnQ7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIGludAlhX3Vsb25nbG9uZ2ludDsKKyNlbmRpZgorICAgIGZsb2F0CQkJYV9mbG9hdDsKKyAgICBkb3VibGUJCQlhX2RvdWJsZTsKKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisgICAgbG9uZyBkb3VibGUJCQlhX2xvbmdkb3VibGU7CisjZW5kaWYKKyAgICBpbnQJCQkJYV9jaGFyOworI2lmZGVmIEhBVkVfV0lOVF9UCisgICAgd2ludF90CQkJYV93aWRlX2NoYXI7CisjZW5kaWYKKyAgICBjb25zdCBjaGFyKgkJCWFfc3RyaW5nOworI2lmZGVmIEhBVkVfV0NIQVJfVAorICAgIGNvbnN0IHdjaGFyX3QqCQlhX3dpZGVfc3RyaW5nOworI2VuZGlmCisgICAgdm9pZCoJCQlhX3BvaW50ZXI7CisgICAgc2lnbmVkIGNoYXIgKgkJYV9jb3VudF9zY2hhcl9wb2ludGVyOworICAgIHNob3J0ICoJCQlhX2NvdW50X3Nob3J0X3BvaW50ZXI7CisgICAgaW50ICoJCQlhX2NvdW50X2ludF9wb2ludGVyOworICAgIGxvbmcgaW50ICoJCQlhX2NvdW50X2xvbmdpbnRfcG9pbnRlcjsKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgIGxvbmcgbG9uZyBpbnQgKgkJYV9jb3VudF9sb25nbG9uZ2ludF9wb2ludGVyOworI2VuZGlmCisgIH0KKyAgYTsKK30KK2FyZ3VtZW50OworCit0eXBlZGVmIHN0cnVjdAoreworICBzaXplX3QgY291bnQ7CisgIGFyZ3VtZW50ICphcmc7Cit9Cithcmd1bWVudHM7CisKKworLyogRmV0Y2ggdGhlIGFyZ3VtZW50cywgcHV0dGluZyB0aGVtIGludG8gYS4gKi8KKyNpZmRlZiBTVEFUSUMKK1NUQVRJQworI2Vsc2UKK2V4dGVybgorI2VuZGlmCitpbnQgcHJpbnRmX2ZldGNoYXJncyAodmFfbGlzdCBhcmdzLCBhcmd1bWVudHMgKmEpOworCisjZW5kaWYgLyogX1BSSU5URl9BUkdTX0ggKi8KZGlmZiAtLWdpdCBhL2ludGwvcHJpbnRmLXBhcnNlLmMgYi9pbnRsL3ByaW50Zi1wYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNmRlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL3ByaW50Zi1wYXJzZS5jCkBAIC0wLDAgKzEsNTM1IEBACisvKiBGb3JtYXR0ZWQgb3V0cHV0IHRvIHN0cmluZ3MuCisgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+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+bWF4X3ByZWNpc2lvbl9sZW5ndGggPSBtYXhfcHJlY2lzaW9uX2xlbmd0aDsKKyAgcmV0dXJuIDA7CisKK2Vycm9yOgorICBmcmVlIChhLT5hcmcpOworICBmcmVlIChkLT5kaXIpOworICByZXR1cm4gLTE7Cit9CisKKyN1bmRlZiBESVJFQ1RJVkVTCisjdW5kZWYgRElSRUNUSVZFCisjdW5kZWYgQ0hBUl9UCisjdW5kZWYgUFJJTlRGX1BBUlNFCmRpZmYgLS1naXQgYS9pbnRsL3ByaW50Zi1wYXJzZS5oIGIvaW50bC9wcmludGYtcGFyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWVjNTBlCi0tLSAvZGV2L251bGwKKysrIGIvaW50bC9wcmludGYtcGFyc2UuaApAQCAtMCwwICsxLDc1IEBACisvKiBQYXJzZSBwcmludGYgZm9ybWF0IHN0cmluZy4KKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmbmRlZiBfUFJJTlRGX1BBUlNFX0gKKyNkZWZpbmUgX1BSSU5URl9QQVJTRV9ICisKKyNpbmNsdWRlICJwcmludGYtYXJncy5oIgorCisKKy8qIEZsYWdzICovCisjZGVmaW5lIEZMQUdfR1JPVVAJIDEJLyogJyBmbGFnICovCisjZGVmaW5lIEZMQUdfTEVGVAkgMgkvKiAtIGZsYWcgKi8KKyNkZWZpbmUgRkxBR19TSE9XU0lHTgkgNAkvKiArIGZsYWcgKi8KKyNkZWZpbmUgRkxBR19TUEFDRQkgOAkvKiBzcGFjZSBmbGFnICovCisjZGVmaW5lIEZMQUdfQUxUCTE2CS8qICMgZmxhZyAqLworI2RlZmluZSBGTEFHX1pFUk8JMzIKKworLyogYXJnX2luZGV4IHZhbHVlIGluZGljYXRpbmcgdGhhdCBubyBhcmd1bWVudCBpcyBjb25zdW1lZC4gICovCisjZGVmaW5lIEFSR19OT05FCSh+KHNpemVfdCkwKQorCisvKiBBIHBhcnNlZCBkaXJlY3RpdmUuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgY29uc3QgY2hhciogZGlyX3N0YXJ0OworICBjb25zdCBjaGFyKiBkaXJfZW5kOworICBpbnQgZmxhZ3M7CisgIGNvbnN0IGNoYXIqIHdpZHRoX3N0YXJ0OworICBjb25zdCBjaGFyKiB3aWR0aF9lbmQ7CisgIHNpemVfdCB3aWR0aF9hcmdfaW5kZXg7CisgIGNvbnN0IGNoYXIqIHByZWNpc2lvbl9zdGFydDsKKyAgY29uc3QgY2hhciogcHJlY2lzaW9uX2VuZDsKKyAgc2l6ZV90IHByZWNpc2lvbl9hcmdfaW5kZXg7CisgIGNoYXIgY29udmVyc2lvbjsgLyogZCBpIG8gdSB4IFggZiBlIEUgZyBHIGMgcyBwIG4gVSAlIGJ1dCBub3QgQyBTICovCisgIHNpemVfdCBhcmdfaW5kZXg7Cit9CitjaGFyX2RpcmVjdGl2ZTsKKworLyogQSBwYXJzZWQgZm9ybWF0IHN0cmluZy4gICovCit0eXBlZGVmIHN0cnVjdAoreworICBzaXplX3QgY291bnQ7CisgIGNoYXJfZGlyZWN0aXZlICpkaXI7CisgIHNpemVfdCBtYXhfd2lkdGhfbGVuZ3RoOworICBzaXplX3QgbWF4X3ByZWNpc2lvbl9sZW5ndGg7Cit9CitjaGFyX2RpcmVjdGl2ZXM7CisKKworLyogUGFyc2VzIHRoZSBmb3JtYXQgc3RyaW5nLiAgRmlsbHMgaW4gdGhlIG51bWJlciBOIG9mIGRpcmVjdGl2ZXMsIGFuZCBmaWxscworICAgaW4gZGlyZWN0aXZlc1swXSwgLi4uLCBkaXJlY3RpdmVzW04tMV0sIGFuZCBzZXRzIGRpcmVjdGl2ZXNbTl0uZGlyX3N0YXJ0CisgICB0byB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgc3RyaW5nLiAgQWxzbyBmaWxscyBpbiB0aGUgYXJnX3R5cGUgZmllbGRzIG9mIHRoZQorICAgYXJndW1lbnRzIGFuZCB0aGUgbmVlZGVkIGNvdW50IG9mIGFyZ3VtZW50cy4gICovCisjaWZkZWYgU1RBVElDCitTVEFUSUMKKyNlbHNlCitleHRlcm4KKyNlbmRpZgoraW50IHByaW50Zl9wYXJzZSAoY29uc3QgY2hhciAqZm9ybWF0LCBjaGFyX2RpcmVjdGl2ZXMgKmQsIGFyZ3VtZW50cyAqYSk7CisKKyNlbmRpZiAvKiBfUFJJTlRGX1BBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL2ludGwvcHJpbnRmLmMgYi9pbnRsL3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ODY0NmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL3ByaW50Zi5jCkBAIC0wLDAgKzEsMzcxIEBACisvKiBGb3JtYXR0ZWQgb3V0cHV0IHRvIHN0cmluZ3MsIHVzaW5nIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyB3aXRoIHBvc2l0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDAzLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2lmZGVmIF9fR05VQ19fCisjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorIyBkZWZpbmUgSEFWRV9BTExPQ0EgMQorI2Vsc2UKKyMgaWZkZWYgX01TQ19WRVIKKyMgIGluY2x1ZGUgPG1hbGxvYy5oPgorIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisjIGVsc2UKKyMgIGlmIGRlZmluZWQgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCisjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisjICBlbHNlCisjICAgaWZkZWYgX0FJWAorICNwcmFnbWEgYWxsb2NhCisjICAgZWxzZQorIyAgICBpZm5kZWYgYWxsb2NhCitjaGFyICphbGxvY2EgKCk7CisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZiAhSEFWRV9QT1NJWF9QUklOVEYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBXaGVuIGJ1aWxkaW5nIGEgRExMLCB3ZSBtdXN0IGV4cG9ydCBzb21lIGZ1bmN0aW9ucy4gIE5vdGUgdGhhdCBiZWNhdXNlCisgICB0aGUgZnVuY3Rpb25zIGFyZSBvbmx5IGRlZmluZWQgZm9yIGJpbmFyeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB3ZQorICAgZG9uJ3QgbmVlZCB0byB1c2UgX19kZWNsc3BlYyhkbGxpbXBvcnQpIGluIGFueSBjYXNlLiAgKi8KKyNpZiBkZWZpbmVkIF9NU0NfVkVSICYmIEJVSUxESU5HX0RMTAorIyBkZWZpbmUgRExMX0VYUE9SVEVEIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyMgZGVmaW5lIERMTF9FWFBPUlRFRAorI2VuZGlmCisKKyNkZWZpbmUgU1RBVElDIHN0YXRpYworCisvKiBEZWZpbmUgYXV4aWxpYXJ5IGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAicHJpbnRmLWFyZ3MuaCIuICAqLworI2luY2x1ZGUgInByaW50Zi1hcmdzLmMiCisKKy8qIERlZmluZSBhdXhpbGlhcnkgZnVuY3Rpb25zIGRlY2xhcmVkIGluICJwcmludGYtcGFyc2UuaCIuICAqLworI2luY2x1ZGUgInByaW50Zi1wYXJzZS5jIgorCisvKiBEZWZpbmUgZnVuY3Rpb25zIGRlY2xhcmVkIGluICJ2YXNucHJpbnRmLmgiLiAgKi8KKyNkZWZpbmUgdmFzbnByaW50ZiBsaWJpbnRsX3Zhc25wcmludGYKKyNpbmNsdWRlICJ2YXNucHJpbnRmLmMiCisjaWYgMCAvKiBub3QgbmVlZGVkICovCisjZGVmaW5lIGFzbnByaW50ZiBsaWJpbnRsX2FzbnByaW50ZgorI2luY2x1ZGUgImFzbnByaW50Zi5jIgorI2VuZGlmCisKK0RMTF9FWFBPUlRFRAoraW50CitsaWJpbnRsX3ZmcHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQoreworICBpZiAoc3RyY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKyAgICByZXR1cm4gdmZwcmludGYgKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIHNpemVfdCBsZW5ndGg7CisgICAgICBjaGFyICpyZXN1bHQgPSBsaWJpbnRsX3Zhc25wcmludGYgKE5VTEwsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisgICAgICBpbnQgcmV0dmFsID0gLTE7CisgICAgICBpZiAocmVzdWx0ICE9IE5VTEwpCisJeworCSAgaWYgKGZ3cml0ZSAocmVzdWx0LCAxLCBsZW5ndGgsIHN0cmVhbSkgPT0gbGVuZ3RoKQorCSAgICByZXR2YWwgPSBsZW5ndGg7CisJICBmcmVlIChyZXN1bHQpOworCX0KKyAgICAgIHJldHVybiByZXR2YWw7CisgICAgfQorfQorCitETExfRVhQT1JURUQKK2ludAorbGliaW50bF9mcHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIGludCByZXR2YWw7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHJldHZhbCA9IGxpYmludGxfdmZwcmludGYgKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKyAgcmV0dXJuIHJldHZhbDsKK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfdnByaW50ZiAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisgIHJldHVybiBsaWJpbnRsX3ZmcHJpbnRmIChzdGRvdXQsIGZvcm1hdCwgYXJncyk7Cit9CisKK0RMTF9FWFBPUlRFRAoraW50CitsaWJpbnRsX3ByaW50ZiAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldHZhbDsKKworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0dmFsID0gbGliaW50bF92cHJpbnRmIChmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gcmV0dmFsOworfQorCitETExfRVhQT1JURUQKK2ludAorbGliaW50bF92c3ByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKK3sKKyAgaWYgKHN0cmNociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCisgICAgcmV0dXJuIHZzcHJpbnRmIChyZXN1bHRidWYsIGZvcm1hdCwgYXJncyk7CisgIGVsc2UKKyAgICB7CisgICAgICBzaXplX3QgbGVuZ3RoID0gKHNpemVfdCkgfjAgLyAoNCAqIHNpemVvZiAoY2hhcikpOworICAgICAgY2hhciAqcmVzdWx0ID0gbGliaW50bF92YXNucHJpbnRmIChyZXN1bHRidWYsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdGJ1ZikKKwl7CisJICBmcmVlIChyZXN1bHQpOworCSAgcmV0dXJuIC0xOworCX0KKyAgICAgIGVsc2UKKwlyZXR1cm4gbGVuZ3RoOworICAgIH0KK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfc3ByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworICBpbnQgcmV0dmFsOworCisgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICByZXR2YWwgPSBsaWJpbnRsX3ZzcHJpbnRmIChyZXN1bHRidWYsIGZvcm1hdCwgYXJncyk7CisgIHZhX2VuZCAoYXJncyk7CisgIHJldHVybiByZXR2YWw7Cit9CisKKyNpZiBIQVZFX1NOUFJJTlRGCisKKyMgaWYgSEFWRV9ERUNMX19TTlBSSU5URgorICAgLyogV2luZG93cy4gICovCisjICBkZWZpbmUgc3lzdGVtX3ZzbnByaW50ZiBfdnNucHJpbnRmCisjIGVsc2UKKyAgIC8qIFVuaXguICAqLworIyAgZGVmaW5lIHN5c3RlbV92c25wcmludGYgdnNucHJpbnRmCisjIGVuZGlmCisKK0RMTF9FWFBPUlRFRAoraW50CitsaWJpbnRsX3ZzbnByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKK3sKKyAgaWYgKHN0cmNociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCisgICAgcmV0dXJuIHN5c3RlbV92c25wcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworICBlbHNlCisgICAgeworICAgICAgc2l6ZV90IG1heGxlbmd0aCA9IGxlbmd0aDsKKyAgICAgIGNoYXIgKnJlc3VsdCA9IGxpYmludGxfdmFzbnByaW50ZiAocmVzdWx0YnVmLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYpCisJeworCSAgaWYgKG1heGxlbmd0aCA+IDApCisJICAgIHsKKwkgICAgICBpZiAobGVuZ3RoIDwgbWF4bGVuZ3RoKQorCQlhYm9ydCAoKTsKKwkgICAgICBtZW1jcHkgKHJlc3VsdGJ1ZiwgcmVzdWx0LCBtYXhsZW5ndGggLSAxKTsKKwkgICAgICByZXN1bHRidWZbbWF4bGVuZ3RoIC0gMV0gPSAnXDAnOworCSAgICB9CisJICBmcmVlIChyZXN1bHQpOworCSAgcmV0dXJuIC0xOworCX0KKyAgICAgIGVsc2UKKwlyZXR1cm4gbGVuZ3RoOworICAgIH0KK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfc25wcmludGYgKGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90IGxlbmd0aCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldHZhbDsKKworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0dmFsID0gbGliaW50bF92c25wcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gcmV0dmFsOworfQorCisjZW5kaWYKKworI2lmIEhBVkVfQVNQUklOVEYKKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfdmFzcHJpbnRmIChjaGFyICoqcmVzdWx0cCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisgIHNpemVfdCBsZW5ndGg7CisgIGNoYXIgKnJlc3VsdCA9IGxpYmludGxfdmFzbnByaW50ZiAoTlVMTCwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKyAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgIHJldHVybiAtMTsKKyAgKnJlc3VsdHAgPSByZXN1bHQ7CisgIHJldHVybiBsZW5ndGg7Cit9CisKK0RMTF9FWFBPUlRFRAoraW50CitsaWJpbnRsX2FzcHJpbnRmIChjaGFyICoqcmVzdWx0cCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldHZhbDsKKworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0dmFsID0gbGliaW50bF92YXNwcmludGYgKHJlc3VsdHAsIGZvcm1hdCwgYXJncyk7CisgIHZhX2VuZCAoYXJncyk7CisgIHJldHVybiByZXR2YWw7Cit9CisKKyNlbmRpZgorCisjaWYgSEFWRV9GV1BSSU5URgorCisjaW5jbHVkZSA8d2NoYXIuaD4KKworI2RlZmluZSBXSURFX0NIQVJfVkVSU0lPTiAxCisKKy8qIERlZmluZSBhdXhpbGlhcnkgZnVuY3Rpb25zIGRlY2xhcmVkIGluICJ3cHJpbnRmLXBhcnNlLmgiLiAgKi8KKyNpbmNsdWRlICJwcmludGYtcGFyc2UuYyIKKworLyogRGVmaW5lIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAidmFzbnByaW50Zi5oIi4gICovCisjZGVmaW5lIHZhc253cHJpbnRmIGxpYmludGxfdmFzbndwcmludGYKKyNpbmNsdWRlICJ2YXNucHJpbnRmLmMiCisjaWYgMCAvKiBub3QgbmVlZGVkICovCisjZGVmaW5lIGFzbndwcmludGYgbGliaW50bF9hc253cHJpbnRmCisjaW5jbHVkZSAiYXNucHJpbnRmLmMiCisjZW5kaWYKKworIyBpZiBIQVZFX0RFQ0xfX1NOV1BSSU5URgorICAgLyogV2luZG93cy4gICovCisjICBkZWZpbmUgc3lzdGVtX3Zzd3ByaW50ZiBfdnNud3ByaW50ZgorIyBlbHNlCisgICAvKiBVbml4LiAgKi8KKyMgIGRlZmluZSBzeXN0ZW1fdnN3cHJpbnRmIHZzd3ByaW50ZgorIyBlbmRpZgorCitETExfRVhQT1JURUQKK2ludAorbGliaW50bF92ZndwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisgIGlmICh3Y3NjaHIgKGZvcm1hdCwgJyQnKSA9PSBOVUxMKQorICAgIHJldHVybiB2ZndwcmludGYgKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIHNpemVfdCBsZW5ndGg7CisgICAgICB3Y2hhcl90ICpyZXN1bHQgPSBsaWJpbnRsX3Zhc253cHJpbnRmIChOVUxMLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworICAgICAgaW50IHJldHZhbCA9IC0xOworICAgICAgaWYgKHJlc3VsdCAhPSBOVUxMKQorCXsKKwkgIHNpemVfdCBpOworCSAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorCSAgICBpZiAoZnB1dHdjIChyZXN1bHRbaV0sIHN0cmVhbSkgPT0gV0VPRikKKwkgICAgICBicmVhazsKKwkgIGlmIChpID09IGxlbmd0aCkKKwkgICAgcmV0dmFsID0gbGVuZ3RoOworCSAgZnJlZSAocmVzdWx0KTsKKwl9CisgICAgICByZXR1cm4gcmV0dmFsOworICAgIH0KK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfZndwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldHZhbDsKKworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0dmFsID0gbGliaW50bF92ZndwcmludGYgKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKyAgcmV0dXJuIHJldHZhbDsKK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfdndwcmludGYgKGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQoreworICByZXR1cm4gbGliaW50bF92ZndwcmludGYgKHN0ZG91dCwgZm9ybWF0LCBhcmdzKTsKK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfd3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldHZhbDsKKworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0dmFsID0gbGliaW50bF92d3ByaW50ZiAoZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKyAgcmV0dXJuIHJldHZhbDsKK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfdnN3cHJpbnRmICh3Y2hhcl90ICpyZXN1bHRidWYsIHNpemVfdCBsZW5ndGgsIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQoreworICBpZiAod2NzY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKyAgICByZXR1cm4gc3lzdGVtX3Zzd3ByaW50ZiAocmVzdWx0YnVmLCBsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisgIGVsc2UKKyAgICB7CisgICAgICBzaXplX3QgbWF4bGVuZ3RoID0gbGVuZ3RoOworICAgICAgd2NoYXJfdCAqcmVzdWx0ID0gbGliaW50bF92YXNud3ByaW50ZiAocmVzdWx0YnVmLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYpCisJeworCSAgaWYgKG1heGxlbmd0aCA+IDApCisJICAgIHsKKwkgICAgICBpZiAobGVuZ3RoIDwgbWF4bGVuZ3RoKQorCQlhYm9ydCAoKTsKKwkgICAgICBtZW1jcHkgKHJlc3VsdGJ1ZiwgcmVzdWx0LCAobWF4bGVuZ3RoIC0gMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKwkgICAgICByZXN1bHRidWZbbWF4bGVuZ3RoIC0gMV0gPSAwOworCSAgICB9CisJICBmcmVlIChyZXN1bHQpOworCSAgcmV0dXJuIC0xOworCX0KKyAgICAgIGVsc2UKKwlyZXR1cm4gbGVuZ3RoOworICAgIH0KK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfc3dwcmludGYgKHdjaGFyX3QgKnJlc3VsdGJ1Ziwgc2l6ZV90IGxlbmd0aCwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldHZhbDsKKworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0dmFsID0gbGliaW50bF92c3dwcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gcmV0dmFsOworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbnRsL3JlZi1hZGQuc2luIGIvaW50bC9yZWYtYWRkLnNpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjczNzRlCi0tLSAvZGV2L251bGwKKysrIGIvaW50bC9yZWYtYWRkLnNpbgpAQCAtMCwwICsxLDMxIEBACisjIEFkZCB0aGlzIHBhY2thZ2UgdG8gYSBsaXN0IG9mIHJlZmVyZW5jZXMgc3RvcmVkIGluIGEgdGV4dCBmaWxlLgorIworIyAgIENvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyMgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjICAgYW55IGxhdGVyIHZlcnNpb24uCisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorIyAgIFVTQS4KKyMKKyMgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4uCisjCisvXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAvIHsKKyAgcy8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovLworICB0YQorICA6YQorICBzLyBAUEFDS0FHRUAgLyBAUEFDS0FHRUAgLworICB0YgorICBzLyAkLyBAUEFDS0FHRUAgLworICA6YgorICBzL14vIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6LworfQpkaWZmIC0tZ2l0IGEvaW50bC9yZWYtZGVsLnNpbiBiL2ludGwvcmVmLWRlbC5zaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzY2YzNwotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvcmVmLWRlbC5zaW4KQEAgLTAsMCArMSwyNiBAQAorIyBSZW1vdmUgdGhpcyBwYWNrYWdlIGZyb20gYSBsaXN0IG9mIHJlZmVyZW5jZXMgc3RvcmVkIGluIGEgdGV4dCBmaWxlLgorIworIyAgIENvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyMgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjICAgYW55IGxhdGVyIHZlcnNpb24uCisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorIyAgIFVTQS4KKyMKKyMgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4uCisjCisvXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAvIHsKKyAgcy8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovLworICBzLyBAUEFDS0FHRUAgLyAvCisgIHMvXi8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovCit9CmRpZmYgLS1naXQgYS9pbnRsL3JlbG9jYXRhYmxlLmMgYi9pbnRsL3JlbG9jYXRhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3YzcwOAotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvcmVsb2NhdGFibGUuYwpAQCAtMCwwICsxLDQ0OSBAQAorLyogUHJvdmlkZSByZWxvY2F0YWJsZSBwYWNrYWdlcy4KKyAgIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDAzLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworCisvKiBUZWxsIGdsaWJjJ3MgPHN0ZGlvLmg+IHRvIHByb3ZpZGUgYSBwcm90b3R5cGUgZm9yIGdldGxpbmUoKS4KKyAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworI2lmbmRlZiBfR05VX1NPVVJDRQorIyBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgInJlbG9jYXRhYmxlLmgiCisKKyNpZiBFTkFCTEVfUkVMT0NBVEFCTEUKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiBOT19YTUFMTE9DCisjIGRlZmluZSB4bWFsbG9jIG1hbGxvYworI2Vsc2UKKyMgaW5jbHVkZSAieGFsbG9jLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisjIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCisjaWYgREVQRU5EU19PTl9MSUJDSEFSU0VUCisjIGluY2x1ZGUgPGxpYmNoYXJzZXQuaD4KKyNlbmRpZgorI2lmIERFUEVORFNfT05fTElCSUNPTlYgJiYgSEFWRV9JQ09OVgorIyBpbmNsdWRlIDxpY29udi5oPgorI2VuZGlmCisjaWYgREVQRU5EU19PTl9MSUJJTlRMICYmIEVOQUJMRV9OTFMKKyMgaW5jbHVkZSA8bGliaW50bC5oPgorI2VuZGlmCisKKy8qIEZha2VkIGNoZWFwICdib29sJy4gICovCisjdW5kZWYgYm9vbAorI3VuZGVmIGZhbHNlCisjdW5kZWYgdHJ1ZQorI2RlZmluZSBib29sIGludAorI2RlZmluZSBmYWxzZSAwCisjZGVmaW5lIHRydWUgMQorCisvKiBQYXRobmFtZSBzdXBwb3J0LgorICAgSVNTTEFTSChDKSAgICAgICAgICAgdGVzdHMgd2hldGhlciBDIGlzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciBjaGFyYWN0ZXIuCisgICBJU19QQVRIX1dJVEhfRElSKFApICB0ZXN0cyB3aGV0aGVyIFAgY29udGFpbnMgYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKyAqLworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQorIyBkZWZpbmUgSEFTX0RFVklDRShQKSBcCisgICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorICAgICAmJiAoUClbMV0gPT0gJzonKQorIyBkZWZpbmUgSVNfUEFUSF9XSVRIX0RJUihQKSBcCisgICAgKHN0cmNociAoUCwgJy8nKSAhPSBOVUxMIHx8IHN0cmNociAoUCwgJ1xcJykgIT0gTlVMTCB8fCBIQVNfREVWSUNFIChQKSkKKyMgZGVmaW5lIEZJTEVTWVNURU1fUFJFRklYX0xFTihQKSAoSEFTX0RFVklDRSAoUCkgPyAyIDogMCkKKyNlbHNlCisgIC8qIFVuaXggKi8KKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycpCisjIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIChzdHJjaHIgKFAsICcvJykgIT0gTlVMTCkKKyMgZGVmaW5lIEZJTEVTWVNURU1fUFJFRklYX0xFTihQKSAwCisjZW5kaWYKKworLyogT3JpZ2luYWwgaW5zdGFsbGF0aW9uIHByZWZpeC4gICovCitzdGF0aWMgY2hhciAqb3JpZ19wcmVmaXg7CitzdGF0aWMgc2l6ZV90IG9yaWdfcHJlZml4X2xlbjsKKy8qIEN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeC4gICovCitzdGF0aWMgY2hhciAqY3Vycl9wcmVmaXg7CitzdGF0aWMgc2l6ZV90IGN1cnJfcHJlZml4X2xlbjsKKy8qIFRoZXNlIHByZWZpeGVzIGRvIG5vdCBlbmQgaW4gYSBzbGFzaC4gIEFueXRoaW5nIHRoYXQgd2lsbCBiZSBjb25jYXRlbmF0ZWQKKyAgIHRvIHRoZW0gbXVzdCBzdGFydCB3aXRoIGEgc2xhc2guICAqLworCisvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGlzIG1vZHVsZS4KKyAgIFJlbG9jYXRpb24gc2ltcGx5IHJlcGxhY2VzIGEgcGF0aG5hbWUgc3RhcnRpbmcgd2l0aCB0aGUgb3JpZ2luYWwgcHJlZml4CisgICBieSB0aGUgY29ycmVzcG9uZGluZyBwYXRobmFtZSB3aXRoIHRoZSBjdXJyZW50IHByZWZpeCBpbnN0ZWFkLiAgQm90aAorICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorICAgaW5zdGVhZCBvZiAiLyIpLiAgKi8KK3N0YXRpYyB2b2lkCitzZXRfdGhpc19yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXhfYXJnLAorCQkJICAgIGNvbnN0IGNoYXIgKmN1cnJfcHJlZml4X2FyZykKK3sKKyAgaWYgKG9yaWdfcHJlZml4X2FyZyAhPSBOVUxMICYmIGN1cnJfcHJlZml4X2FyZyAhPSBOVUxMCisgICAgICAvKiBPcHRpbWl6YXRpb246IGlmIG9yaWdfcHJlZml4IGFuZCBjdXJyX3ByZWZpeCBhcmUgZXF1YWwsIHRoZQorCSByZWxvY2F0aW9uIGlzIGEgbm9wLiAgKi8KKyAgICAgICYmIHN0cmNtcCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpICE9IDApCisgICAgeworICAgICAgLyogRHVwbGljYXRlIHRoZSBhcmd1bWVudCBzdHJpbmdzLiAgKi8KKyAgICAgIGNoYXIgKm1lbW9yeTsKKworICAgICAgb3JpZ19wcmVmaXhfbGVuID0gc3RybGVuIChvcmlnX3ByZWZpeF9hcmcpOworICAgICAgY3Vycl9wcmVmaXhfbGVuID0gc3RybGVuIChjdXJyX3ByZWZpeF9hcmcpOworICAgICAgbWVtb3J5ID0gKGNoYXIgKikgeG1hbGxvYyAob3JpZ19wcmVmaXhfbGVuICsgMSArIGN1cnJfcHJlZml4X2xlbiArIDEpOworI2lmZGVmIE5PX1hNQUxMT0MKKyAgICAgIGlmIChtZW1vcnkgIT0gTlVMTCkKKyNlbmRpZgorCXsKKwkgIG1lbWNweSAobWVtb3J5LCBvcmlnX3ByZWZpeF9hcmcsIG9yaWdfcHJlZml4X2xlbiArIDEpOworCSAgb3JpZ19wcmVmaXggPSBtZW1vcnk7CisJICBtZW1vcnkgKz0gb3JpZ19wcmVmaXhfbGVuICsgMTsKKwkgIG1lbWNweSAobWVtb3J5LCBjdXJyX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2xlbiArIDEpOworCSAgY3Vycl9wcmVmaXggPSBtZW1vcnk7CisJICByZXR1cm47CisJfQorICAgIH0KKyAgb3JpZ19wcmVmaXggPSBOVUxMOworICBjdXJyX3ByZWZpeCA9IE5VTEw7CisgIC8qIERvbid0IHdvcnJ5IGFib3V0IHdhc3RlZCBtZW1vcnkgaGVyZSAtIHRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBvbmx5CisgICAgIGNhbGxlZCBvbmNlLiAgKi8KK30KKworLyogU2V0cyB0aGUgb3JpZ2luYWwgYW5kIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXggb2YgdGhlIHBhY2thZ2UuCisgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorICAgYnkgdGhlIGNvcnJlc3BvbmRpbmcgcGF0aG5hbWUgd2l0aCB0aGUgY3VycmVudCBwcmVmaXggaW5zdGVhZC4gIEJvdGgKKyAgIHByZWZpeGVzIHNob3VsZCBiZSBkaXJlY3RvcnkgbmFtZXMgd2l0aG91dCB0cmFpbGluZyBzbGFzaCAoaS5lLiB1c2UgIiIKKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCit2b2lkCitzZXRfcmVsb2NhdGlvbl9wcmVmaXggKGNvbnN0IGNoYXIgKm9yaWdfcHJlZml4X2FyZywgY29uc3QgY2hhciAqY3Vycl9wcmVmaXhfYXJnKQoreworICBzZXRfdGhpc19yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworCisgIC8qIE5vdyBub3RpZnkgYWxsIGRlcGVuZGVudCBsaWJyYXJpZXMuICAqLworI2lmIERFUEVORFNfT05fTElCQ0hBUlNFVAorICBsaWJjaGFyc2V0X3NldF9yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworI2VuZGlmCisjaWYgREVQRU5EU19PTl9MSUJJQ09OViAmJiBIQVZFX0lDT05WICYmIF9MSUJJQ09OVl9WRVJTSU9OID49IDB4MDEwOQorICBsaWJpY29udl9zZXRfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfcHJlZml4X2FyZywgY3Vycl9wcmVmaXhfYXJnKTsKKyNlbmRpZgorI2lmIERFUEVORFNfT05fTElCSU5UTCAmJiBFTkFCTEVfTkxTICYmIGRlZmluZWQgbGliaW50bF9zZXRfcmVsb2NhdGlvbl9wcmVmaXgKKyAgbGliaW50bF9zZXRfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfcHJlZml4X2FyZywgY3Vycl9wcmVmaXhfYXJnKTsKKyNlbmRpZgorfQorCisjaWYgIWRlZmluZWQgSU5fTElCUkFSWSB8fCAoZGVmaW5lZCBQSUMgJiYgZGVmaW5lZCBJTlNUQUxMRElSKQorCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbjoKKyAgIENvbXB1dGVzIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXgsIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAorICAgaW5zdGFsbGF0aW9uIHByZWZpeCwgdGhlIG9yaWdpbmFsIGluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb2YgYSBwYXJ0aWN1bGFyCisgICBmaWxlLCBhbmQgdGhlIGN1cnJlbnQgcGF0aG5hbWUgb2YgdGhpcyBmaWxlLiAgUmV0dXJucyBOVUxMIHVwb24gZmFpbHVyZS4gICovCisjaWZkZWYgSU5fTElCUkFSWQorI2RlZmluZSBjb21wdXRlX2N1cnJfcHJlZml4IGxvY2FsX2NvbXB1dGVfY3Vycl9wcmVmaXgKK3N0YXRpYworI2VuZGlmCitjb25zdCBjaGFyICoKK2NvbXB1dGVfY3Vycl9wcmVmaXggKGNvbnN0IGNoYXIgKm9yaWdfaW5zdGFsbHByZWZpeCwKKwkJICAgICBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIsCisJCSAgICAgY29uc3QgY2hhciAqY3Vycl9wYXRobmFtZSkKK3sKKyAgY29uc3QgY2hhciAqY3Vycl9pbnN0YWxsZGlyOworICBjb25zdCBjaGFyICpyZWxfaW5zdGFsbGRpcjsKKworICBpZiAoY3Vycl9wYXRobmFtZSA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworCisgIC8qIERldGVybWluZSB0aGUgcmVsYXRpdmUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwgcmVsYXRpdmUgdG8gdGhlIHByZWZpeC4KKyAgICAgVGhpcyBpcyBzaW1wbHkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvcmlnX2luc3RhbGxwcmVmaXggYW5kCisgICAgIG9yaWdfaW5zdGFsbGRpci4gICovCisgIGlmIChzdHJuY21wIChvcmlnX2luc3RhbGxwcmVmaXgsIG9yaWdfaW5zdGFsbGRpciwgc3RybGVuIChvcmlnX2luc3RhbGxwcmVmaXgpKQorICAgICAgIT0gMCkKKyAgICAvKiBTaG91bGRuJ3QgaGFwcGVuIC0gbm90aGluZyBzaG91bGQgYmUgaW5zdGFsbGVkIG91dHNpZGUgJChwcmVmaXgpLiAgKi8KKyAgICByZXR1cm4gTlVMTDsKKyAgcmVsX2luc3RhbGxkaXIgPSBvcmlnX2luc3RhbGxkaXIgKyBzdHJsZW4gKG9yaWdfaW5zdGFsbHByZWZpeCk7CisKKyAgLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuICAqLworICB7CisgICAgY29uc3QgY2hhciAqcF9iYXNlID0gY3Vycl9wYXRobmFtZSArIEZJTEVTWVNURU1fUFJFRklYX0xFTiAoY3Vycl9wYXRobmFtZSk7CisgICAgY29uc3QgY2hhciAqcCA9IGN1cnJfcGF0aG5hbWUgKyBzdHJsZW4gKGN1cnJfcGF0aG5hbWUpOworICAgIGNoYXIgKnE7CisKKyAgICB3aGlsZSAocCA+IHBfYmFzZSkKKyAgICAgIHsKKwlwLS07CisJaWYgKElTU0xBU0ggKCpwKSkKKwkgIGJyZWFrOworICAgICAgfQorCisgICAgcSA9IChjaGFyICopIHhtYWxsb2MgKHAgLSBjdXJyX3BhdGhuYW1lICsgMSk7CisjaWZkZWYgTk9fWE1BTExPQworICAgIGlmIChxID09IE5VTEwpCisgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorICAgIG1lbWNweSAocSwgY3Vycl9wYXRobmFtZSwgcCAtIGN1cnJfcGF0aG5hbWUpOworICAgIHFbcCAtIGN1cnJfcGF0aG5hbWVdID0gJ1wwJzsKKyAgICBjdXJyX2luc3RhbGxkaXIgPSBxOworICB9CisKKyAgLyogQ29tcHV0ZSB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4IGJ5IHJlbW92aW5nIHRoZSB0cmFpbGluZworICAgICByZWxfaW5zdGFsbGRpciBmcm9tIGl0LiAgKi8KKyAgeworICAgIGNvbnN0IGNoYXIgKnJwID0gcmVsX2luc3RhbGxkaXIgKyBzdHJsZW4gKHJlbF9pbnN0YWxsZGlyKTsKKyAgICBjb25zdCBjaGFyICpjcCA9IGN1cnJfaW5zdGFsbGRpciArIHN0cmxlbiAoY3Vycl9pbnN0YWxsZGlyKTsKKyAgICBjb25zdCBjaGFyICpjcF9iYXNlID0KKyAgICAgIGN1cnJfaW5zdGFsbGRpciArIEZJTEVTWVNURU1fUFJFRklYX0xFTiAoY3Vycl9pbnN0YWxsZGlyKTsKKworICAgIHdoaWxlIChycCA+IHJlbF9pbnN0YWxsZGlyICYmIGNwID4gY3BfYmFzZSkKKyAgICAgIHsKKwlib29sIHNhbWUgPSBmYWxzZTsKKwljb25zdCBjaGFyICpycGkgPSBycDsKKwljb25zdCBjaGFyICpjcGkgPSBjcDsKKworCXdoaWxlIChycGkgPiByZWxfaW5zdGFsbGRpciAmJiBjcGkgPiBjcF9iYXNlKQorCSAgeworCSAgICBycGktLTsKKwkgICAgY3BpLS07CisJICAgIGlmIChJU1NMQVNIICgqcnBpKSB8fCBJU1NMQVNIICgqY3BpKSkKKwkgICAgICB7CisJCWlmIChJU1NMQVNIICgqcnBpKSAmJiBJU1NMQVNIICgqY3BpKSkKKwkJICBzYW1lID0gdHJ1ZTsKKwkJYnJlYWs7CisJICAgICAgfQorI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworCSAgICAvKiBXaW4zMiwgT1MvMiwgRE9TIC0gY2FzZSBpbnNpZ25pZmljYW50IGZpbGVzeXN0ZW0gKi8KKwkgICAgaWYgKCgqcnBpID49ICdhJyAmJiAqcnBpIDw9ICd6JyA/ICpycGkgLSAnYScgKyAnQScgOiAqcnBpKQorCQkhPSAoKmNwaSA+PSAnYScgJiYgKmNwaSA8PSAneicgPyAqY3BpIC0gJ2EnICsgJ0EnIDogKmNwaSkpCisJICAgICAgYnJlYWs7CisjZWxzZQorCSAgICBpZiAoKnJwaSAhPSAqY3BpKQorCSAgICAgIGJyZWFrOworI2VuZGlmCisJICB9CisJaWYgKCFzYW1lKQorCSAgYnJlYWs7CisJLyogVGhlIGxhc3QgcGF0aG5hbWUgY29tcG9uZW50IHdhcyB0aGUgc2FtZS4gIG9waSBhbmQgY3BpIG5vdyBwb2ludAorCSAgIHRvIHRoZSBzbGFzaCBiZWZvcmUgaXQuICAqLworCXJwID0gcnBpOworCWNwID0gY3BpOworICAgICAgfQorCisgICAgaWYgKHJwID4gcmVsX2luc3RhbGxkaXIpCisgICAgICAvKiBVbmV4cGVjdGVkOiBUaGUgY3Vycl9pbnN0YWxsZGlyIGRvZXMgbm90IGVuZCB3aXRoIHJlbF9pbnN0YWxsZGlyLiAgKi8KKyAgICAgIHJldHVybiBOVUxMOworCisgICAgeworICAgICAgc2l6ZV90IGN1cnJfcHJlZml4X2xlbiA9IGNwIC0gY3Vycl9pbnN0YWxsZGlyOworICAgICAgY2hhciAqY3Vycl9wcmVmaXg7CisKKyAgICAgIGN1cnJfcHJlZml4ID0gKGNoYXIgKikgeG1hbGxvYyAoY3Vycl9wcmVmaXhfbGVuICsgMSk7CisjaWZkZWYgTk9fWE1BTExPQworICAgICAgaWYgKGN1cnJfcHJlZml4ID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisjZW5kaWYKKyAgICAgIG1lbWNweSAoY3Vycl9wcmVmaXgsIGN1cnJfaW5zdGFsbGRpciwgY3Vycl9wcmVmaXhfbGVuKTsKKyAgICAgIGN1cnJfcHJlZml4W2N1cnJfcHJlZml4X2xlbl0gPSAnXDAnOworCisgICAgICByZXR1cm4gY3Vycl9wcmVmaXg7CisgICAgfQorICB9Cit9CisKKyNlbmRpZiAvKiAhSU5fTElCUkFSWSB8fCBQSUMgKi8KKworI2lmIGRlZmluZWQgUElDICYmIGRlZmluZWQgSU5TVEFMTERJUgorCisvKiBGdWxsIHBhdGhuYW1lIG9mIHNoYXJlZCBsaWJyYXJ5LCBvciBOVUxMLiAgKi8KK3N0YXRpYyBjaGFyICpzaGFyZWRfbGlicmFyeV9mdWxsbmFtZTsKKworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisKKy8qIERldGVybWluZSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgd2hlbiBpdCBpcyBsb2FkZWQuICAqLworCitCT09MIFdJTkFQSQorRGxsTWFpbiAoSElOU1RBTkNFIG1vZHVsZV9oYW5kbGUsIERXT1JEIGV2ZW50LCBMUFZPSUQgcmVzZXJ2ZWQpCit7CisgICh2b2lkKSByZXNlcnZlZDsKKworICBpZiAoZXZlbnQgPT0gRExMX1BST0NFU1NfQVRUQUNIKQorICAgIHsKKyAgICAgIC8qIFRoZSBETEwgaXMgYmVpbmcgbG9hZGVkIGludG8gYW4gYXBwbGljYXRpb24ncyBhZGRyZXNzIHJhbmdlLiAgKi8KKyAgICAgIHN0YXRpYyBjaGFyIGxvY2F0aW9uW01BWF9QQVRIXTsKKworICAgICAgaWYgKCFHZXRNb2R1bGVGaWxlTmFtZSAobW9kdWxlX2hhbmRsZSwgbG9jYXRpb24sIHNpemVvZiAobG9jYXRpb24pKSkKKwkvKiBTaG91bGRuJ3QgaGFwcGVuLiAgKi8KKwlyZXR1cm4gRkFMU0U7CisKKyAgICAgIGlmICghSVNfUEFUSF9XSVRIX0RJUiAobG9jYXRpb24pKQorCS8qIFNob3VsZG4ndCBoYXBwZW4uICAqLworCXJldHVybiBGQUxTRTsKKworICAgICAgc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgPSBzdHJkdXAgKGxvY2F0aW9uKTsKKyAgICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKyNlbHNlIC8qIFVuaXggKi8KKworc3RhdGljIHZvaWQKK2ZpbmRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgKCkKK3sKKyNpZiBkZWZpbmVkIF9fbGludXhfXyAmJiBfX0dMSUJDX18gPj0gMgorICAvKiBMaW51eCBoYXMgL3Byb2Mvc2VsZi9tYXBzLiBnbGliYyAyIGhhcyB0aGUgZ2V0bGluZSgpIGZ1bmN0aW9uLiAgKi8KKyAgRklMRSAqZnA7CisKKyAgLyogT3BlbiB0aGUgY3VycmVudCBwcm9jZXNzJyBtYXBzIGZpbGUuICBJdCBkZXNjcmliZXMgb25lIFZNQSBwZXIgbGluZS4gICovCisgIGZwID0gZm9wZW4gKCIvcHJvYy9zZWxmL21hcHMiLCAiciIpOworICBpZiAoZnApCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpICZmaW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lOworICAgICAgZm9yICg7OykKKwl7CisJICB1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisJICBpbnQgYzsKKworCSAgaWYgKGZzY2FuZiAoZnAsICIlbHgtJWx4IiwgJnN0YXJ0LCAmZW5kKSAhPSAyKQorCSAgICBicmVhazsKKwkgIGlmIChhZGRyZXNzID49IHN0YXJ0ICYmIGFkZHJlc3MgPD0gZW5kIC0gMSkKKwkgICAgeworCSAgICAgIC8qIEZvdW5kIGl0LiAgTm93IHNlZSBpZiB0aGlzIGxpbmUgY29udGFpbnMgYSBmaWxlbmFtZS4gICovCisJICAgICAgd2hpbGUgKGMgPSBnZXRjIChmcCksIGMgIT0gRU9GICYmIGMgIT0gJ1xuJyAmJiBjICE9ICcvJykKKwkJY29udGludWU7CisJICAgICAgaWYgKGMgPT0gJy8nKQorCQl7CisJCSAgc2l6ZV90IHNpemU7CisJCSAgaW50IGxlbjsKKworCQkgIHVuZ2V0YyAoYywgZnApOworCQkgIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lID0gTlVMTDsgc2l6ZSA9IDA7CisJCSAgbGVuID0gZ2V0bGluZSAoJnNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lLCAmc2l6ZSwgZnApOworCQkgIGlmIChsZW4gPj0gMCkKKwkJICAgIHsKKwkJICAgICAgLyogU3VjY2VzczogZmlsbGVkIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lLiAgKi8KKwkJICAgICAgaWYgKGxlbiA+IDAgJiYgc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWVbbGVuIC0gMV0gPT0gJ1xuJykKKwkJCXNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lW2xlbiAtIDFdID0gJ1wwJzsKKwkJICAgIH0KKwkJfQorCSAgICAgIGJyZWFrOworCSAgICB9CisJICB3aGlsZSAoYyA9IGdldGMgKGZwKSwgYyAhPSBFT0YgJiYgYyAhPSAnXG4nKQorCSAgICBjb250aW51ZTsKKwl9CisgICAgICBmY2xvc2UgKGZwKTsKKyAgICB9CisjZW5kaWYKK30KKworI2VuZGlmIC8qIFdJTjMyIC8gVW5peCAqLworCisvKiBSZXR1cm4gdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGN1cnJlbnQgc2hhcmVkIGxpYnJhcnkuCisgICBSZXR1cm4gTlVMTCBpZiB1bmtub3duLgorICAgR3VhcmFudGVlZCB0byB3b3JrIG9ubHkgb24gTGludXggYW5kIFdvZTMyLiAgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSAoKQoreworI2lmICEoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pCisgIHN0YXRpYyBib29sIHRyaWVkX2ZpbmRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWU7CisgIGlmICghdHJpZWRfZmluZF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSkKKyAgICB7CisgICAgICBmaW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lICgpOworICAgICAgdHJpZWRfZmluZF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSA9IHRydWU7CisgICAgfQorI2VuZGlmCisgIHJldHVybiBzaGFyZWRfbGlicmFyeV9mdWxsbmFtZTsKK30KKworI2VuZGlmIC8qIFBJQyAqLworCisvKiBSZXR1cm5zIHRoZSBwYXRobmFtZSwgcmVsb2NhdGVkIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24KKyAgIGRpcmVjdG9yeS4gICovCitjb25zdCBjaGFyICoKK3JlbG9jYXRlIChjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKyNpZiBkZWZpbmVkIFBJQyAmJiBkZWZpbmVkIElOU1RBTExESVIKKyAgc3RhdGljIGludCBpbml0aWFsaXplZDsKKworICAvKiBJbml0aWFsaXphdGlvbiBjb2RlIGZvciBhIHNoYXJlZCBsaWJyYXJ5LiAgKi8KKyAgaWYgKCFpbml0aWFsaXplZCkKKyAgICB7CisgICAgICAvKiBBdCB0aGlzIHBvaW50LCBvcmlnX3ByZWZpeCBhbmQgY3Vycl9wcmVmaXggbGlrZWx5IGhhdmUgYWxyZWFkeSBiZWVuCisJIHNldCB0aHJvdWdoIHRoZSBtYWluIHByb2dyYW0ncyBzZXRfcHJvZ3JhbV9uYW1lX2FuZF9pbnN0YWxsZGlyCisJIGZ1bmN0aW9uLiAgVGhpcyBpcyBzdWZmaWNpZW50IGluIHRoZSBjYXNlIHRoYXQgdGhlIGxpYnJhcnkgaGFzCisJIGluaXRpYWxseSBiZWVuIGluc3RhbGxlZCBpbiB0aGUgc2FtZSBvcmlnX3ByZWZpeC4gIEJ1dCB3ZSBjYW4gZG8KKwkgYmV0dGVyLCB0byBhbHNvIGNvdmVyIHRoZSBjYXNlcyB0aGF0IDEuIGl0IGhhcyBiZWVuIGluc3RhbGxlZAorCSBpbiBhIGRpZmZlcmVudCBwcmVmaXggYmVmb3JlIGJlaW5nIG1vdmVkIHRvIG9yaWdfcHJlZml4IGFuZCAobGF0ZXIpCisJIHRvIGN1cnJfcHJlZml4LCAyLiB1bmxpa2UgdGhlIHByb2dyYW0sIGl0IGhhcyBub3QgbW92ZWQgYXdheSBmcm9tCisJIG9yaWdfcHJlZml4LiAgKi8KKyAgICAgIGNvbnN0IGNoYXIgKm9yaWdfaW5zdGFsbHByZWZpeCA9IElOU1RBTExQUkVGSVg7CisgICAgICBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIgPSBJTlNUQUxMRElSOworICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXhfYmV0dGVyOworCisgICAgICBjdXJyX3ByZWZpeF9iZXR0ZXIgPQorCWNvbXB1dGVfY3Vycl9wcmVmaXggKG9yaWdfaW5zdGFsbHByZWZpeCwgb3JpZ19pbnN0YWxsZGlyLAorCQkJICAgICBnZXRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgKCkpOworICAgICAgaWYgKGN1cnJfcHJlZml4X2JldHRlciA9PSBOVUxMKQorCWN1cnJfcHJlZml4X2JldHRlciA9IGN1cnJfcHJlZml4OworCisgICAgICBzZXRfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfaW5zdGFsbHByZWZpeCwgY3Vycl9wcmVmaXhfYmV0dGVyKTsKKworICAgICAgaW5pdGlhbGl6ZWQgPSAxOworICAgIH0KKyNlbmRpZgorCisgIC8qIE5vdGU6IEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gcGVyZm9ybSBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24gaGVyZSwKKyAgICAgZXZlbiBmb3IgRE9TLWxpa2UgZmlsZXN5c3RlbXMsIGJlY2F1c2UgdGhlIHBhdGhuYW1lIGFyZ3VtZW50IHdhcworICAgICB0eXBpY2FsbHkgY3JlYXRlZCBmcm9tIHRoZSBzYW1lIE1ha2VmaWxlIHZhcmlhYmxlIGFzIG9yaWdfcHJlZml4IGNhbWUKKyAgICAgZnJvbS4gICovCisgIGlmIChvcmlnX3ByZWZpeCAhPSBOVUxMICYmIGN1cnJfcHJlZml4ICE9IE5VTEwKKyAgICAgICYmIHN0cm5jbXAgKHBhdGhuYW1lLCBvcmlnX3ByZWZpeCwgb3JpZ19wcmVmaXhfbGVuKSA9PSAwKQorICAgIHsKKyAgICAgIGlmIChwYXRobmFtZVtvcmlnX3ByZWZpeF9sZW5dID09ICdcMCcpCisJLyogcGF0aG5hbWUgZXF1YWxzIG9yaWdfcHJlZml4LiAgKi8KKwlyZXR1cm4gY3Vycl9wcmVmaXg7CisgICAgICBpZiAoSVNTTEFTSCAocGF0aG5hbWVbb3JpZ19wcmVmaXhfbGVuXSkpCisJeworCSAgLyogcGF0aG5hbWUgc3RhcnRzIHdpdGggb3JpZ19wcmVmaXguICAqLworCSAgY29uc3QgY2hhciAqcGF0aG5hbWVfdGFpbCA9ICZwYXRobmFtZVtvcmlnX3ByZWZpeF9sZW5dOworCSAgY2hhciAqcmVzdWx0ID0KKwkgICAgKGNoYXIgKikgeG1hbGxvYyAoY3Vycl9wcmVmaXhfbGVuICsgc3RybGVuIChwYXRobmFtZV90YWlsKSArIDEpOworCisjaWZkZWYgTk9fWE1BTExPQworCSAgaWYgKHJlc3VsdCAhPSBOVUxMKQorI2VuZGlmCisJICAgIHsKKwkgICAgICBtZW1jcHkgKHJlc3VsdCwgY3Vycl9wcmVmaXgsIGN1cnJfcHJlZml4X2xlbik7CisJICAgICAgc3RyY3B5IChyZXN1bHQgKyBjdXJyX3ByZWZpeF9sZW4sIHBhdGhuYW1lX3RhaWwpOworCSAgICAgIHJldHVybiByZXN1bHQ7CisJICAgIH0KKwl9CisgICAgfQorICAvKiBOb3RoaW5nIHRvIHJlbG9jYXRlLiAgKi8KKyAgcmV0dXJuIHBhdGhuYW1lOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2ludGwvcmVsb2NhdGFibGUuaCBiL2ludGwvcmVsb2NhdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGM1YjcxCi0tLSAvZGV2L251bGwKKysrIGIvaW50bC9yZWxvY2F0YWJsZS5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qIFByb3ZpZGUgcmVsb2NhdGFibGUgcGFja2FnZXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwMy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZm5kZWYgX1JFTE9DQVRBQkxFX0gKKyNkZWZpbmUgX1JFTE9DQVRBQkxFX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qIFRoaXMgY2FuIGJlIGVuYWJsZWQgdGhyb3VnaCB0aGUgY29uZmlndXJlIC0tZW5hYmxlLXJlbG9jYXRhYmxlIG9wdGlvbi4gICovCisjaWYgRU5BQkxFX1JFTE9DQVRBQkxFCisKKy8qIFdoZW4gYnVpbGRpbmcgYSBETEwsIHdlIG11c3QgZXhwb3J0IHNvbWUgZnVuY3Rpb25zLiAgTm90ZSB0aGF0IGJlY2F1c2UKKyAgIHRoaXMgaXMgYSBwcml2YXRlIC5oIGZpbGUsIHdlIGRvbid0IG5lZWQgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorICAgaW4gYW55IGNhc2UuICAqLworI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgQlVJTERJTkdfRExMCisjIGRlZmluZSBSRUxPQ0FUQUJMRV9ETExfRVhQT1JURUQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorIyBkZWZpbmUgUkVMT0NBVEFCTEVfRExMX0VYUE9SVEVECisjZW5kaWYKKworLyogU2V0cyB0aGUgb3JpZ2luYWwgYW5kIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXggb2YgdGhlIHBhY2thZ2UuCisgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorICAgYnkgdGhlIGNvcnJlc3BvbmRpbmcgcGF0aG5hbWUgd2l0aCB0aGUgY3VycmVudCBwcmVmaXggaW5zdGVhZC4gIEJvdGgKKyAgIHByZWZpeGVzIHNob3VsZCBiZSBkaXJlY3RvcnkgbmFtZXMgd2l0aG91dCB0cmFpbGluZyBzbGFzaCAoaS5lLiB1c2UgIiIKKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCitleHRlcm4gUkVMT0NBVEFCTEVfRExMX0VYUE9SVEVEIHZvaWQKKyAgICAgICBzZXRfcmVsb2NhdGlvbl9wcmVmaXggKGNvbnN0IGNoYXIgKm9yaWdfcHJlZml4LAorCQkJICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXgpOworCisvKiBSZXR1cm5zIHRoZSBwYXRobmFtZSwgcmVsb2NhdGVkIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24KKyAgIGRpcmVjdG9yeS4gICovCitleHRlcm4gY29uc3QgY2hhciAqIHJlbG9jYXRlIChjb25zdCBjaGFyICpwYXRobmFtZSk7CisKKy8qIE1lbW9yeSBtYW5hZ2VtZW50OiByZWxvY2F0ZSgpIGxlYWtzIG1lbW9yeSwgYmVjYXVzZSBpdCBoYXMgdG8gY29uc3RydWN0CisgICBhIGZyZXNoIHBhdGhuYW1lLiAgSWYgdGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZSB5b3VyIHByb2dyYW0gY2FsbHMKKyAgIHJlbG9jYXRlKCkgZnJlcXVlbnRseSwgdGhpbmsgYWJvdXQgY2FjaGluZyB0aGUgcmVzdWx0LiAgKi8KKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb246CisgICBDb21wdXRlcyB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4LCBiYXNlZCBvbiB0aGUgb3JpZ2luYWwKKyAgIGluc3RhbGxhdGlvbiBwcmVmaXgsIHRoZSBvcmlnaW5hbCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9mIGEgcGFydGljdWxhcgorICAgZmlsZSwgYW5kIHRoZSBjdXJyZW50IHBhdGhuYW1lIG9mIHRoaXMgZmlsZS4gIFJldHVybnMgTlVMTCB1cG9uIGZhaWx1cmUuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb21wdXRlX2N1cnJfcHJlZml4IChjb25zdCBjaGFyICpvcmlnX2luc3RhbGxwcmVmaXgsCisJCQkJCSBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIsCisJCQkJCSBjb25zdCBjaGFyICpjdXJyX3BhdGhuYW1lKTsKKworI2Vsc2UKKworLyogQnkgZGVmYXVsdCwgd2UgdXNlIHRoZSBoYXJkd2lyZWQgcGF0aG5hbWVzLiAgKi8KKyNkZWZpbmUgcmVsb2NhdGUocGF0aG5hbWUpIChwYXRobmFtZSkKKworI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9SRUxPQ0FUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbnRsL3RleHRkb21haW4uYyBiL2ludGwvdGV4dGRvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NDVhODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRsL3RleHRkb21haW4uYwpAQCAtMCwwICsxLDE0MSBAQAorLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIHRleHRkb21haW4oMykgZnVuY3Rpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8bGliaW50bC5oPgorI2Vsc2UKKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorI2VuZGlmCisjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKworI2lmZGVmIF9MSUJDCisvKiBXZSBoYXZlIHRvIGhhbmRsZSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuICAqLworIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorI2Vsc2UKKy8qIFByb3ZpZGUgZHVtbXkgaW1wbGVtZW50YXRpb24gaWYgdGhpcyBpcyBvdXRzaWRlIGdsaWJjLiAgKi8KKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfZGVmaW5lKENMQVNTLCBOQU1FKQorIyBkZWZpbmUgX19saWJjX3J3bG9ja193cmxvY2soTkFNRSkKKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfdW5sb2NrKE5BTUUpCisjZW5kaWYKKworLyogVGhlIGludGVybmFsIHZhcmlhYmxlcyBpbiB0aGUgc3RhbmRhbG9uZSBsaWJpbnRsLmEgbXVzdCBoYXZlIGRpZmZlcmVudAorICAgbmFtZXMgdGhhbiB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIEdOVSBsaWJjLCBvdGhlcndpc2UgcHJvZ3JhbXMKKyAgIHVzaW5nIGxpYmludGwuYSBjYW5ub3QgYmUgbGlua2VkIHN0YXRpY2FsbHkuICAqLworI2lmICFkZWZpbmVkIF9MSUJDCisjIGRlZmluZSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbiBsaWJpbnRsX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4KKyMgZGVmaW5lIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIGxpYmludGxfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbgorI2VuZGlmCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworLyogTmFtZSBvZiB0aGUgZGVmYXVsdCB0ZXh0IGRvbWFpbi4gICovCitleHRlcm4gY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdIGF0dHJpYnV0ZV9oaWRkZW47CisKKy8qIERlZmF1bHQgdGV4dCBkb21haW4gaW4gd2hpY2ggZW50cmllcyBmb3IgZ2V0dGV4dCgzKSBhcmUgdG8gYmUgZm91bmQuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKl9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIGF0dHJpYnV0ZV9oaWRkZW47CisKKworLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCisgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworI2lmZGVmIF9MSUJDCisjIGRlZmluZSBURVhURE9NQUlOIF9fdGV4dGRvbWFpbgorIyBpZm5kZWYgc3RyZHVwCisjICBkZWZpbmUgc3RyZHVwKHN0cikgX19zdHJkdXAgKHN0cikKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBURVhURE9NQUlOIGxpYmludGxfdGV4dGRvbWFpbgorI2VuZGlmCisKKy8qIExvY2sgdmFyaWFibGUgdG8gcHJvdGVjdCB0aGUgZ2xvYmFsIGRhdGEgaW4gdGhlIGdldHRleHQgaW1wbGVtZW50YXRpb24uICAqLworX19saWJjX3J3bG9ja19kZWZpbmUgKGV4dGVybiwgX25sX3N0YXRlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKworLyogU2V0IHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIHRvIERPTUFJTk5BTUUuCisgICBJZiBET01BSU5OQU1FIGlzIG51bGwsIHJldHVybiB0aGUgY3VycmVudCBkZWZhdWx0LgorICAgSWYgRE9NQUlOTkFNRSBpcyAiIiwgcmVzZXQgdG8gdGhlIGRlZmF1bHQgb2YgIm1lc3NhZ2VzIi4gICovCitjaGFyICoKK1RFWFRET01BSU4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCit7CisgIGNoYXIgKm5ld19kb21haW47CisgIGNoYXIgKm9sZF9kb21haW47CisKKyAgLyogQSBOVUxMIHBvaW50ZXIgcmVxdWVzdHMgdGhlIGN1cnJlbnQgc2V0dGluZy4gICovCisgIGlmIChkb21haW5uYW1lID09IE5VTEwpCisgICAgcmV0dXJuIChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworCisgIF9fbGliY19yd2xvY2tfd3Jsb2NrIChfbmxfc3RhdGVfbG9jayk7CisKKyAgb2xkX2RvbWFpbiA9IChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworCisgIC8qIElmIGRvbWFpbiBuYW1lIGlzIHRoZSBudWxsIHN0cmluZyBzZXQgdG8gZGVmYXVsdCBkb21haW4gIm1lc3NhZ2VzIi4gICovCisgIGlmIChkb21haW5uYW1lWzBdID09ICdcMCcKKyAgICAgIHx8IHN0cmNtcCAoZG9tYWlubmFtZSwgX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pID09IDApCisgICAgeworICAgICAgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKKyAgICAgIG5ld19kb21haW4gPSAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKyAgICB9CisgIGVsc2UgaWYgKHN0cmNtcCAoZG9tYWlubmFtZSwgb2xkX2RvbWFpbikgPT0gMCkKKyAgICAvKiBUaGlzIGNhbiBoYXBwZW4gYW5kIHBlb3BsZSB3aWxsIHVzZSBpdCB0byBzaWduYWwgdGhhdCBzb21lCisgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgY2hhbmdlZC4gICovCisgICAgbmV3X2RvbWFpbiA9IG9sZF9kb21haW47CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBJZiB0aGUgZm9sbG93aW5nIG1hbGxvYyBmYWlscyBgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4nCisJIHdpbGwgYmUgTlVMTC4gIFRoaXMgdmFsdWUgd2lsbCBiZSByZXR1cm5lZCBhbmQgc28gc2lnbmFscyB3ZQorCSBhcmUgb3V0IG9mIGNvcmUuICAqLworI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkRVUAorICAgICAgbmV3X2RvbWFpbiA9IHN0cmR1cCAoZG9tYWlubmFtZSk7CisjZWxzZQorICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoZG9tYWlubmFtZSkgKyAxOworICAgICAgbmV3X2RvbWFpbiA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKyAgICAgIGlmIChuZXdfZG9tYWluICE9IE5VTEwpCisJbWVtY3B5IChuZXdfZG9tYWluLCBkb21haW5uYW1lLCBsZW4pOworI2VuZGlmCisKKyAgICAgIGlmIChuZXdfZG9tYWluICE9IE5VTEwpCisJX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBuZXdfZG9tYWluOworICAgIH0KKworICAvKiBXZSB1c2UgdGhpcyBwb3NzaWJpbGl0eSB0byBzaWduYWwgYSBjaGFuZ2Ugb2YgdGhlIGxvYWRlZCBjYXRhbG9ncworICAgICBzaW5jZSB0aGlzIGlzIG1vc3QgbGlrZWx5IHRoZSBjYXNlIGFuZCB0aGVyZSBpcyBubyBvdGhlciBlYXN5IHdlCisgICAgIHRvIGRvIGl0LiAgRG8gaXQgb25seSB3aGVuIHRoZSBjYWxsIHdhcyBzdWNjZXNzZnVsLiAgKi8KKyAgaWYgKG5ld19kb21haW4gIT0gTlVMTCkKKyAgICB7CisgICAgICArK19ubF9tc2dfY2F0X2NudHI7CisKKyAgICAgIGlmIChvbGRfZG9tYWluICE9IG5ld19kb21haW4gJiYgb2xkX2RvbWFpbiAhPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbikKKwlmcmVlIChvbGRfZG9tYWluKTsKKyAgICB9CisKKyAgX19saWJjX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKworICByZXR1cm4gbmV3X2RvbWFpbjsKK30KKworI2lmZGVmIF9MSUJDCisvKiBBbGlhcyBmb3IgZnVuY3Rpb24gbmFtZSBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KK3dlYWtfYWxpYXMgKF9fdGV4dGRvbWFpbiwgdGV4dGRvbWFpbik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2ludGwvdmFzbnByaW50Zi5jIGIvaW50bC92YXNucHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiZmI5ZQotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvdmFzbnByaW50Zi5jCkBAIC0wLDAgKzEsODg0IEBACisvKiB2c3ByaW50ZiB3aXRoIGF1dG9tYXRpYyBtZW1vcnkgYWxsb2NhdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworLyogVGVsbCBnbGliYydzIDxzdGRpby5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBzbnByaW50ZigpLgorICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+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+IGNvdW50KQorCQkJICBjb3VudCA9IHJldGNvdW50OworCQkgICAgICB9CisJCSAgICBlbHNlCisJCSAgICAgIHsKKwkJCS8qIHNucHJpbnRmKCkgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSAnJW4nCisJCQkgICBkaXJlY3RpdmUuICAqLworCQkJaWYgKHBbMV0gIT0gJ1wwJykKKwkJCSAgeworCQkJICAgIC8qIERvbid0IHVzZSB0aGUgJyVuJyBkaXJlY3RpdmU7IGluc3RlYWQsIGxvb2sKKwkJCSAgICAgICBhdCB0aGUgc25wcmludGYoKSByZXR1cm4gdmFsdWUuICAqLworCQkJICAgIHBbMV0gPSAnXDAnOworCQkJICAgIGNvbnRpbnVlOworCQkJICB9CisJCQllbHNlCisJCQkgIHsKKwkJCSAgICAvKiBMb29rIGF0IHRoZSBzbnByaW50ZigpIHJldHVybiB2YWx1ZS4gICovCisJCQkgICAgaWYgKHJldGNvdW50IDwgMCkKKwkJCSAgICAgIHsKKwkJCQkvKiBIUC1VWCAxMC4yMCBzbnByaW50ZigpIGlzIGRvdWJseSBkZWZpY2llbnQ6CisJCQkJICAgSXQgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSAnJW4nIGRpcmVjdGl2ZSwKKwkJCQkgICAqYW5kKiBpdCByZXR1cm5zIC0xIChyYXRoZXIgdGhhbiB0aGUgbGVuZ3RoCisJCQkJICAgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcmVxdWlyZWQpIHdoZW4gdGhlCisJCQkJICAgYnVmZmVyIGlzIHRvbyBzbWFsbC4gICovCisJCQkJc2l6ZV90IGJpZ2dlcl9uZWVkID0KKwkJCQkgIHhzdW0gKHh0aW1lcyAoYWxsb2NhdGVkLCAyKSwgMTIpOworCQkJCUVOU1VSRV9BTExPQ0FUSU9OIChiaWdnZXJfbmVlZCk7CisJCQkJY29udGludWU7CisJCQkgICAgICB9CisJCQkgICAgZWxzZQorCQkJICAgICAgY291bnQgPSByZXRjb3VudDsKKwkJCSAgfQorCQkgICAgICB9CisjZW5kaWYKKworCQkgICAgLyogQXR0ZW1wdCB0byBoYW5kbGUgZmFpbHVyZS4gICovCisJCSAgICBpZiAoY291bnQgPCAwKQorCQkgICAgICB7CisJCQlpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKKwkJCSAgZnJlZSAocmVzdWx0KTsKKwkJCWZyZWUgKGJ1Zl9tYWxsb2NlZCk7CisJCQlDTEVBTlVQICgpOworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gTlVMTDsKKwkJICAgICAgfQorCisjaWYgIVVTRV9TTlBSSU5URgorCQkgICAgaWYgKGNvdW50ID49IHRtcF9sZW5ndGgpCisJCSAgICAgIC8qIHRtcF9sZW5ndGggd2FzIGluY29ycmVjdGx5IGNhbGN1bGF0ZWQgLSBmaXggdGhlCisJCQkgY29kZSBhYm92ZSEgICovCisJCSAgICAgIGFib3J0ICgpOworI2VuZGlmCisKKwkJICAgIC8qIE1ha2Ugcm9vbSBmb3IgdGhlIHJlc3VsdC4gICovCisJCSAgICBpZiAoY291bnQgPj0gbWF4bGVuKQorCQkgICAgICB7CisJCQkvKiBOZWVkIGF0IGxlYXN0IGNvdW50IGJ5dGVzLiAgQnV0IGFsbG9jYXRlCisJCQkgICBwcm9wb3J0aW9uYWxseSwgdG8gYXZvaWQgbG9vcGluZyBldGVybmFsbHkgaWYKKwkJCSAgIHNucHJpbnRmKCkgcmVwb3J0cyBhIHRvbyBzbWFsbCBjb3VudC4gICovCisJCQlzaXplX3QgbiA9CisJCQkgIHhtYXggKHhzdW0gKGxlbmd0aCwgY291bnQpLCB4dGltZXMgKGFsbG9jYXRlZCwgMikpOworCisJCQlFTlNVUkVfQUxMT0NBVElPTiAobik7CisjaWYgVVNFX1NOUFJJTlRGCisJCQljb250aW51ZTsKKyNlbmRpZgorCQkgICAgICB9CisKKyNpZiBVU0VfU05QUklOVEYKKwkJICAgIC8qIFRoZSBzbnByaW50ZigpIHJlc3VsdCBkaWQgZml0LiAgKi8KKyNlbHNlCisJCSAgICAvKiBBcHBlbmQgdGhlIHNwcmludGYoKSByZXN1bHQuICAqLworCQkgICAgbWVtY3B5IChyZXN1bHQgKyBsZW5ndGgsIHRtcCwgY291bnQgKiBzaXplb2YgKENIQVJfVCkpOworCQkgICAgaWYgKHRtcCAhPSB0bXBidWYpCisJCSAgICAgIGZyZWUgKHRtcCk7CisjZW5kaWYKKworCQkgICAgbGVuZ3RoICs9IGNvdW50OworCQkgICAgYnJlYWs7CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworICAgIC8qIEFkZCB0aGUgZmluYWwgTlVMLiAgKi8KKyAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCAxKSk7CisgICAgcmVzdWx0W2xlbmd0aF0gPSAnXDAnOworCisgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYgJiYgbGVuZ3RoICsgMSA8IGFsbG9jYXRlZCkKKyAgICAgIHsKKwkvKiBTaHJpbmsgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaWYgcG9zc2libGUuICAqLworCUNIQVJfVCAqbWVtb3J5OworCisJbWVtb3J5ID0gKENIQVJfVCAqKSByZWFsbG9jIChyZXN1bHQsIChsZW5ndGggKyAxKSAqIHNpemVvZiAoQ0hBUl9UKSk7CisJaWYgKG1lbW9yeSAhPSBOVUxMKQorCSAgcmVzdWx0ID0gbWVtb3J5OworICAgICAgfQorCisgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKyAgICBDTEVBTlVQICgpOworICAgICpsZW5ndGhwID0gbGVuZ3RoOworICAgIHJldHVybiByZXN1bHQ7CisKKyAgb3V0X29mX21lbW9yeToKKyAgICBpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKKyAgICAgIGZyZWUgKHJlc3VsdCk7CisgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKyAgb3V0X29mX21lbW9yeV8xOgorICAgIENMRUFOVVAgKCk7CisgICAgZXJybm8gPSBFTk9NRU07CisgICAgcmV0dXJuIE5VTEw7CisgIH0KK30KKworI3VuZGVmIFNOUFJJTlRGCisjdW5kZWYgVVNFX1NOUFJJTlRGCisjdW5kZWYgUFJJTlRGX1BBUlNFCisjdW5kZWYgRElSRUNUSVZFUworI3VuZGVmIERJUkVDVElWRQorI3VuZGVmIENIQVJfVAorI3VuZGVmIFZBU05QUklOVEYKZGlmZiAtLWdpdCBhL2ludGwvdmFzbnByaW50Zi5oIGIvaW50bC92YXNucHJpbnRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVmMWJjMQotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvdmFzbnByaW50Zi5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qIHZzcHJpbnRmIHdpdGggYXV0b21hdGljIG1lbW9yeSBhbGxvY2F0aW9uLgorICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisjaWZuZGVmIF9WQVNOUFJJTlRGX0gKKyNkZWZpbmUgX1ZBU05QUklOVEZfSAorCisvKiBHZXQgdmFfbGlzdC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKy8qIEdldCBzaXplX3QuICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZuZGVmIF9fYXR0cmlidXRlX18KKy8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuICAqLworIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA1KSB8fCBfX1NUUklDVF9BTlNJX18KKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKFNwZWMpIC8qIGVtcHR5ICovCisjIGVuZGlmCisvKiBUaGUgX18tcHJvdGVjdGVkIHZhcmlhbnRzIG9mIGBmb3JtYXQnIGFuZCBgcHJpbnRmJyBhdHRyaWJ1dGVzCisgICBhcmUgYWNjZXB0ZWQgYnkgZ2NjIHZlcnNpb25zIDIuNi40IChlZmZlY3RpdmVseSAyLjcpIGFuZCBsYXRlci4gICovCisjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDcpCisjICBkZWZpbmUgX19mb3JtYXRfXyBmb3JtYXQKKyMgIGRlZmluZSBfX3ByaW50Zl9fIHByaW50ZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZglfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBhIHN0cmluZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MoKS4KKyAgIFlvdSBjYW4gcGFzcyBhIHByZWFsbG9jYXRlZCBidWZmZXIgZm9yIHRoZSByZXN1bHQgaW4gUkVTVUxUQlVGIGFuZCBpdHMKKyAgIHNpemUgaW4gKkxFTkdUSFA7IG90aGVyd2lzZSB5b3UgcGFzcyBSRVNVTFRCVUYgPSBOVUxMLgorICAgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJpbmcgKHRoaXMgbWF5IGJlID0gUkVTVUxUQlVGCisgICBpZiBubyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdhcyBuZWNlc3NhcnkpIGFuZCBzZXQgKkxFTkdUSFAgdG8gdGhlCisgICBudW1iZXIgb2YgcmVzdWx0aW5nIGJ5dGVzLCBleGNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gIFVwb24gZXJyb3IsIHNldAorICAgZXJybm8gYW5kIHJldHVybiBOVUxMLiAgKi8KK2V4dGVybiBjaGFyICogYXNucHJpbnRmIChjaGFyICpyZXN1bHRidWYsIHNpemVfdCAqbGVuZ3RocCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CitleHRlcm4gY2hhciAqIHZhc25wcmludGYgKGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKKworI2lmZGVmCV9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9WQVNOUFJJTlRGX0ggKi8KZGlmZiAtLWdpdCBhL2ludGwvdmFzbndwcmludGYuaCBiL2ludGwvdmFzbndwcmludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2NlZjRjCi0tLSAvZGV2L251bGwKKysrIGIvaW50bC92YXNud3ByaW50Zi5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qIHZzd3ByaW50ZiB3aXRoIGF1dG9tYXRpYyBtZW1vcnkgYWxsb2NhdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmbmRlZiBfVkFTTldQUklOVEZfSAorI2RlZmluZSBfVkFTTldQUklOVEZfSAorCisvKiBHZXQgdmFfbGlzdC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKy8qIEdldCB3Y2hhcl90LCBzaXplX3QuICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZkZWYJX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIFdyaXRlIGZvcm1hdHRlZCBvdXRwdXQgdG8gYSBzdHJpbmcgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHdpdGggbWFsbG9jKCkuCisgICBZb3UgY2FuIHBhc3MgYSBwcmVhbGxvY2F0ZWQgYnVmZmVyIGZvciB0aGUgcmVzdWx0IGluIFJFU1VMVEJVRiBhbmQgaXRzCisgICBzaXplIGluICpMRU5HVEhQOyBvdGhlcndpc2UgeW91IHBhc3MgUkVTVUxUQlVGID0gTlVMTC4KKyAgIElmIHN1Y2Nlc3NmdWwsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgc3RyaW5nICh0aGlzIG1heSBiZSA9IFJFU1VMVEJVRgorICAgaWYgbm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiB3YXMgbmVjZXNzYXJ5KSBhbmQgc2V0ICpMRU5HVEhQIHRvIHRoZQorICAgbnVtYmVyIG9mIHJlc3VsdGluZyBieXRlcywgZXhjbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuICBVcG9uIGVycm9yLCBzZXQKKyAgIGVycm5vIGFuZCByZXR1cm4gTlVMTC4gICovCitleHRlcm4gd2NoYXJfdCAqIGFzbndwcmludGYgKHdjaGFyX3QgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLik7CitleHRlcm4gd2NoYXJfdCAqIHZhc253cHJpbnRmICh3Y2hhcl90ICpyZXN1bHRidWYsIHNpemVfdCAqbGVuZ3RocCwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpOworCisjaWZkZWYJX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1ZBU05XUFJJTlRGX0ggKi8KZGlmZiAtLWdpdCBhL2ludGwvd3ByaW50Zi1wYXJzZS5oIGIvaW50bC93cHJpbnRmLXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRhMmNmYwotLS0gL2Rldi9udWxsCisrKyBiL2ludGwvd3ByaW50Zi1wYXJzZS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qIFBhcnNlIHByaW50ZiBmb3JtYXQgc3RyaW5nLgorICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisjaWZuZGVmIF9XUFJJTlRGX1BBUlNFX0gKKyNkZWZpbmUgX1dQUklOVEZfUEFSU0VfSAorCisjaW5jbHVkZSAicHJpbnRmLWFyZ3MuaCIKKworCisvKiBGbGFncyAqLworI2RlZmluZSBGTEFHX0dST1VQCSAxCS8qICcgZmxhZyAqLworI2RlZmluZSBGTEFHX0xFRlQJIDIJLyogLSBmbGFnICovCisjZGVmaW5lIEZMQUdfU0hPV1NJR04JIDQJLyogKyBmbGFnICovCisjZGVmaW5lIEZMQUdfU1BBQ0UJIDgJLyogc3BhY2UgZmxhZyAqLworI2RlZmluZSBGTEFHX0FMVAkxNgkvKiAjIGZsYWcgKi8KKyNkZWZpbmUgRkxBR19aRVJPCTMyCisKKy8qIGFyZ19pbmRleCB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgbm8gYXJndW1lbnQgaXMgY29uc3VtZWQuICAqLworI2RlZmluZSBBUkdfTk9ORQkofihzaXplX3QpMCkKKworLyogQSBwYXJzZWQgZGlyZWN0aXZlLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIGNvbnN0IHdjaGFyX3QqIGRpcl9zdGFydDsKKyAgY29uc3Qgd2NoYXJfdCogZGlyX2VuZDsKKyAgaW50IGZsYWdzOworICBjb25zdCB3Y2hhcl90KiB3aWR0aF9zdGFydDsKKyAgY29uc3Qgd2NoYXJfdCogd2lkdGhfZW5kOworICBzaXplX3Qgd2lkdGhfYXJnX2luZGV4OworICBjb25zdCB3Y2hhcl90KiBwcmVjaXNpb25fc3RhcnQ7CisgIGNvbnN0IHdjaGFyX3QqIHByZWNpc2lvbl9lbmQ7CisgIHNpemVfdCBwcmVjaXNpb25fYXJnX2luZGV4OworICB3Y2hhcl90IGNvbnZlcnNpb247IC8qIGQgaSBvIHUgeCBYIGYgZSBFIGcgRyBjIHMgcCBuIFUgJSBidXQgbm90IEMgUyAqLworICBzaXplX3QgYXJnX2luZGV4OworfQord2NoYXJfdF9kaXJlY3RpdmU7CisKKy8qIEEgcGFyc2VkIGZvcm1hdCBzdHJpbmcuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgc2l6ZV90IGNvdW50OworICB3Y2hhcl90X2RpcmVjdGl2ZSAqZGlyOworICBzaXplX3QgbWF4X3dpZHRoX2xlbmd0aDsKKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoOworfQord2NoYXJfdF9kaXJlY3RpdmVzOworCisKKy8qIFBhcnNlcyB0aGUgZm9ybWF0IHN0cmluZy4gIEZpbGxzIGluIHRoZSBudW1iZXIgTiBvZiBkaXJlY3RpdmVzLCBhbmQgZmlsbHMKKyAgIGluIGRpcmVjdGl2ZXNbMF0sIC4uLiwgZGlyZWN0aXZlc1tOLTFdLCBhbmQgc2V0cyBkaXJlY3RpdmVzW05dLmRpcl9zdGFydAorICAgdG8gdGhlIGVuZCBvZiB0aGUgZm9ybWF0IHN0cmluZy4gIEFsc28gZmlsbHMgaW4gdGhlIGFyZ190eXBlIGZpZWxkcyBvZiB0aGUKKyAgIGFyZ3VtZW50cyBhbmQgdGhlIG5lZWRlZCBjb3VudCBvZiBhcmd1bWVudHMuICAqLworI2lmZGVmIFNUQVRJQworU1RBVElDCisjZWxzZQorZXh0ZXJuCisjZW5kaWYKK2ludCB3cHJpbnRmX3BhcnNlIChjb25zdCB3Y2hhcl90ICpmb3JtYXQsIHdjaGFyX3RfZGlyZWN0aXZlcyAqZCwgYXJndW1lbnRzICphKTsKKworI2VuZGlmIC8qIF9XUFJJTlRGX1BBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL2ludGwveHNpemUuaCBiL2ludGwveHNpemUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjJlMjRiCi0tLSAvZGV2L251bGwKKysrIGIvaW50bC94c2l6ZS5oCkBAIC0wLDAgKzEsMTA5IEBACisvKiB4c2l6ZS5oIC0tIENoZWNrZWQgc2l6ZV90IGNvbXB1dGF0aW9ucy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmbmRlZiBfWFNJWkVfSAorI2RlZmluZSBfWFNJWkVfSAorCisvKiBHZXQgc2l6ZV90LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogR2V0IFNJWkVfTUFYLiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiBIQVZFX1NURElOVF9ICisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKy8qIFRoZSBzaXplIG9mIG1lbW9yeSBvYmplY3RzIGlzIG9mdGVuIGNvbXB1dGVkIHRocm91Z2ggZXhwcmVzc2lvbnMgb2YKKyAgIHR5cGUgc2l6ZV90LiBFeGFtcGxlOgorICAgICAgdm9pZCogcCA9IG1hbGxvYyAoaGVhZGVyX3NpemUgKyBuICogZWxlbWVudF9zaXplKS4KKyAgIFRoZXNlIGNvbXB1dGF0aW9ucyBjYW4gbGVhZCB0byBvdmVyZmxvdy4gIFdoZW4gdGhpcyBoYXBwZW5zLCBtYWxsb2MoKQorICAgcmV0dXJucyBhIHBpZWNlIG9mIG1lbW9yeSB0aGF0IGlzIHdheSB0b28gc21hbGwsIGFuZCB0aGUgcHJvZ3JhbSB0aGVuCisgICBjcmFzaGVzIHdoaWxlIGF0dGVtcHRpbmcgdG8gZmlsbCB0aGUgbWVtb3J5LgorICAgVG8gYXZvaWQgdGhpcywgdGhlIGZ1bmN0aW9ucyBhbmQgbWFjcm9zIGluIHRoaXMgZmlsZSBjaGVjayBmb3Igb3ZlcmZsb3cuCisgICBUaGUgY29udmVudGlvbiBpcyB0aGF0IFNJWkVfTUFYIHJlcHJlc2VudHMgb3ZlcmZsb3cuCisgICBtYWxsb2MgKFNJWkVfTUFYKSBpcyBub3QgZ3VhcmFudGVlZCB0byBmYWlsIC0tIHRoaW5rIG9mIGEgbWFsbG9jCisgICBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgbW1hcCAtLSwgaXQncyByZWNvbW1lbmRlZCB0byB1c2Ugc2l6ZV9vdmVyZmxvd19wKCkKKyAgIG9yIHNpemVfaW5fYm91bmRzX3AoKSBiZWZvcmUgaW52b2tpbmcgbWFsbG9jKCkuCisgICBUaGUgZXhhbXBsZSB0aHVzIGJlY29tZXM6CisgICAgICBzaXplX3Qgc2l6ZSA9IHhzdW0gKGhlYWRlcl9zaXplLCB4dGltZXMgKG4sIGVsZW1lbnRfc2l6ZSkpOworICAgICAgdm9pZCAqcCA9IChzaXplX2luX2JvdW5kc19wIChzaXplKSA/IG1hbGxvYyAoc2l6ZSkgOiBOVUxMKTsKKyovCisKKy8qIENvbnZlcnQgYW4gYXJiaXRyYXJ5IHZhbHVlID49IDAgdG8gdHlwZSBzaXplX3QuICAqLworI2RlZmluZSB4Y2FzdF9zaXplX3QoTikgXAorICAoKE4pIDw9IFNJWkVfTUFYID8gKHNpemVfdCkgKE4pIDogU0laRV9NQVgpCisKKy8qIFN1bSBvZiB0d28gc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworc3RhdGljIGlubGluZSBzaXplX3QKKyNpZiBfX0dOVUNfXyA+PSAzCitfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorI2VuZGlmCit4c3VtIChzaXplX3Qgc2l6ZTEsIHNpemVfdCBzaXplMikKK3sKKyAgc2l6ZV90IHN1bSA9IHNpemUxICsgc2l6ZTI7CisgIHJldHVybiAoc3VtID49IHNpemUxID8gc3VtIDogU0laRV9NQVgpOworfQorCisvKiBTdW0gb2YgdGhyZWUgc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworc3RhdGljIGlubGluZSBzaXplX3QKKyNpZiBfX0dOVUNfXyA+PSAzCitfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorI2VuZGlmCit4c3VtMyAoc2l6ZV90IHNpemUxLCBzaXplX3Qgc2l6ZTIsIHNpemVfdCBzaXplMykKK3sKKyAgcmV0dXJuIHhzdW0gKHhzdW0gKHNpemUxLCBzaXplMiksIHNpemUzKTsKK30KKworLyogU3VtIG9mIGZvdXIgc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworc3RhdGljIGlubGluZSBzaXplX3QKKyNpZiBfX0dOVUNfXyA+PSAzCitfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorI2VuZGlmCit4c3VtNCAoc2l6ZV90IHNpemUxLCBzaXplX3Qgc2l6ZTIsIHNpemVfdCBzaXplMywgc2l6ZV90IHNpemU0KQoreworICByZXR1cm4geHN1bSAoeHN1bSAoeHN1bSAoc2l6ZTEsIHNpemUyKSwgc2l6ZTMpLCBzaXplNCk7Cit9CisKKy8qIE1heGltdW0gb2YgdHdvIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90CisjaWYgX19HTlVDX18gPj0gMworX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKyNlbmRpZgoreG1heCAoc2l6ZV90IHNpemUxLCBzaXplX3Qgc2l6ZTIpCit7CisgIC8qIE5vIGV4cGxpY2l0IGNoZWNrIGlzIG5lZWRlZCBoZXJlLCBiZWNhdXNlIGZvciBhbnkgbjoKKyAgICAgbWF4IChTSVpFX01BWCwgbikgPT0gU0laRV9NQVggYW5kIG1heCAobiwgU0laRV9NQVgpID09IFNJWkVfTUFYLiAgKi8KKyAgcmV0dXJuIChzaXplMSA+PSBzaXplMiA/IHNpemUxIDogc2l6ZTIpOworfQorCisvKiBNdWx0aXBsaWNhdGlvbiBvZiBhIGNvdW50IHdpdGggYW4gZWxlbWVudCBzaXplLCB3aXRoIG92ZXJmbG93IGNoZWNrLgorICAgVGhlIGNvdW50IG11c3QgYmUgPj0gMCBhbmQgdGhlIGVsZW1lbnQgc2l6ZSBtdXN0IGJlID4gMC4KKyAgIFRoaXMgaXMgYSBtYWNybywgbm90IGFuIGlubGluZSBmdW5jdGlvbiwgc28gdGhhdCBpdCB3b3JrcyBjb3JyZWN0bHkgZXZlbgorICAgd2hlbiBOIGlzIG9mIGEgd2lkZXIgdHVwZSBhbmQgTiA+IFNJWkVfTUFYLiAgKi8KKyNkZWZpbmUgeHRpbWVzKE4sIEVMU0laRSkgXAorICAoKE4pIDw9IFNJWkVfTUFYIC8gKEVMU0laRSkgPyAoc2l6ZV90KSAoTikgKiAoRUxTSVpFKSA6IFNJWkVfTUFYKQorCisvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICAqLworI2RlZmluZSBzaXplX292ZXJmbG93X3AoU0laRSkgXAorICAoKFNJWkUpID09IFNJWkVfTUFYKQorLyogQ2hlY2sgYWdhaW5zdCBvdmVyZmxvdy4gICovCisjZGVmaW5lIHNpemVfaW5fYm91bmRzX3AoU0laRSkgXAorICAoKFNJWkUpICE9IFNJWkVfTUFYKQorCisjZW5kaWYgLyogX1hTSVpFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5ic2QtbGliIGIvbGliL01ha2VmaWxlLmJzZC1saWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNhMDlmOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9NYWtlZmlsZS5ic2QtbGliCkBAIC0wLDAgKzEsNDcgQEAKKyMKKyMgVGhpcyBpcyBhIE1ha2VmaWxlIHN0dWIgd2hpY2ggaGFuZGxlcyB0aGUgY3JlYXRpb24gb2YgQlNEIHNoYXJlZAorIyBsaWJyYXJpZXMuCisjCisjIEluIG9yZGVyIHRvIHVzZSB0aGlzIHN0dWIsIHRoZSBmb2xsb3dpbmcgbWFrZWZpbGUgdmFyaWFibGVzIG11c3QgYmUgZGVmaW5lZC4KKyMgCisjIEJTRExJQl9WRVJTSU9OID0gMS4wCisjIEJTRExJQl9JTUFHRSA9IGxpYmNlCisjIEJTRExJQl9NWURJUiA9IGV0CisjIEJTRExJQl9JTlNUQUxMX0RJUiA9ICQoU0hMSUJESVIpCisjCisKK2FsbDo6IGltYWdlCisKK3JlYWwtc3ViZGlyczo6IE1ha2VmaWxlCisJQGVjaG8gIglNS0RJUiBwaWMiCisJQG1rZGlyIC1wIHBpYworCitCU0RfTElCID0gJChCU0RMSUJfSU1BR0UpLnNvLiQoQlNETElCX1ZFUlNJT04pCitCU0RMSUJfUElDX0ZMQUcgPSAtZnBpYworCitpbWFnZToJCSQoQlNEX0xJQikKKworJChCU0RfTElCKTogJChPQkpTKQorCShjZCBwaWM7IGxkIC1Cc2hhcmVhYmxlIC1vICQoQlNEX0xJQikgJChMREZMQUdTKSAkKE9CSlMpKQorCSQoTVYpIHBpYy8kKEJTRF9MSUIpIC4KKwkkKFJNKSAtZiAuLi8kKEJTRF9MSUIpCisJKGNkIC4uOyAkKExOKSAkKExJTktfQlVJTERfRkxBR1MpIFwKKwkJYGVjaG8gJChteV9kaXIpIHwgc2VkIC1lICdzO2xpYi87OydgLyQoQlNEX0xJQikgJChCU0RfTElCKSkKKworaW5zdGFsbC1zaGxpYnMgaW5zdGFsbDo6ICQoQlNEX0xJQikKKwlAZWNobyAiCUlOU1RBTExfUFJPR1JBTSAkKEJTRExJQl9JTlNUQUxMX0RJUikvJChCU0RfTElCKSIKKwlAJChJTlNUQUxMX1BST0dSQU0pICQoQlNEX0xJQikgXAorCQkkKERFU1RESVIpJChCU0RMSUJfSU5TVEFMTF9ESVIpLyQoQlNEX0xJQikKKwlALSQoTERDT05GSUcpCisKK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKworaW5zdGFsbC1zaGxpYnMtc3RyaXA6IGluc3RhbGwtc2hsaWJzCisKK3VuaW5zdGFsbC1zaGxpYnMgdW5pbnN0YWxsOjoKKwkkKFJNKSAtZiAkKERFU1RESVIpJChCU0RMSUJfSU5TVEFMTF9ESVIpLyQoQlNEX0xJQikKKworY2xlYW46OgorCSQoUk0pIC1yZiBwaWMKKwkkKFJNKSAtZiAkKEJTRF9MSUIpCisJJChSTSkgLWYgLi4vJChCU0RfTElCKQpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLmNoZWNrZXIgYi9saWIvTWFrZWZpbGUuY2hlY2tlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjVmOWEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL01ha2VmaWxlLmNoZWNrZXIKQEAgLTAsMCArMSwzIEBACisjIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBzbyBidWlsZHMgZG9uJ3QgYnJlYWsgYWZ0ZXIgYSAiZ2l0IHB1bGwiCisjIHdoaWNoIHJlbW92ZWQgdGhlIGNoZWNrZXIgaW5mcmFzdHJ1Y3R1cmUuICBUaGlzIGZpbGUgY2FuIGJlIGRlbGV0ZWQKKyMgYWZ0ZXIgZTJmc3Byb2dzIDEuNDQgaXMgcmVsZWFzZWQKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5kYXJ3aW4tbGliIGIvbGliL01ha2VmaWxlLmRhcndpbi1saWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0YTVlNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9NYWtlZmlsZS5kYXJ3aW4tbGliCkBAIC0wLDAgKzEsNTEgQEAKKyMKKyMgVGhpcyBpcyBhIE1ha2VmaWxlIHN0dWIgd2hpY2ggaGFuZGxlcyB0aGUgY3JlYXRpb24gb2YgRGFyd2luIEJTRCBzaGFyZWQKKyMgbGlicmFyaWVzLgorIworIyBJbiBvcmRlciB0byB1c2UgdGhpcyBzdHViLCB0aGUgZm9sbG93aW5nIG1ha2VmaWxlIHZhcmlhYmxlcyBtdXN0IGJlIGRlZmluZWQuCisjCisjIEJTRExJQl9WRVJTSU9OID0gMS4wCisjIEJTRExJQl9JTUFHRSA9IGxpYmNlCisjIEJTRExJQl9NWURJUiA9IGV0CisjIEJTRExJQl9JTlNUQUxMX0RJUiA9ICQoU0hMSUJESVIpCisjCisKK2FsbDo6IGltYWdlCisKK3JlYWwtc3ViZGlyczo6IE1ha2VmaWxlCisJJChFKSAiCU1LRElSIHBpYyIKKwkkKFEpIG1rZGlyIC1wIHBpYworCitCU0RfTElCID0gJChCU0RMSUJfSU1BR0UpLiQoQlNETElCX1ZFUlNJT04pLmR5bGliCitCU0RMSUJfUElDX0ZMQUcgPSAtZlBJQworCitpbWFnZToJCSQoQlNEX0xJQikKKworJChCU0RfTElCKTogJChPQkpTKQorCSQoRSkgIglHRU5fQlNEX1NPTElCICQoQlNEX0xJQikiCisJJChRKSAoY2QgcGljOyAkKENDKSAtZHluYW1pY2xpYiAtY29tcGF0aWJpbGl0eV92ZXJzaW9uIDEuMCAtY3VycmVudF92ZXJzaW9uICQoQlNETElCX1ZFUlNJT04pIFwKKwkJLWZsYXRfbmFtZXNwYWNlIC11bmRlZmluZWQgd2FybmluZyAtbyAkKEJTRF9MSUIpICQoT0JKUykpCisJJChRKSAkKE1WKSBwaWMvJChCU0RfTElCKSAuCisJJChRKSAkKFJNKSAtZiAuLi8kKEJTRF9MSUIpCisJJChRKSAoY2QgLi47ICQoTE4pICQoTElOS19CVUlMRF9GTEFHUykgXAorCQlgZWNobyAkKG15X2RpcikgfCBzZWQgLWUgJ3M7bGliLzs7J2AvJChCU0RfTElCKSAkKEJTRF9MSUIpKQorCSQoUSkgKGNkIC4uOyAkKExOKSAkKExJTktfQlVJTERfRkxBR1MpICQoQlNEX0xJQikgJChCU0RMSUJfSU1BR0UpLmR5bGliKQorCitpbnN0YWxsLXNobGlicyBpbnN0YWxsOjogJChCU0RfTElCKQorCSQoRSkgIglJTlNUQUxMX1BST0dSQU0gJChCU0RMSUJfSU5TVEFMTF9ESVIpLyQoQlNEX0xJQikiCisJJChRKSAkKElOU1RBTExfUFJPR1JBTSkgJChCU0RfTElCKSBcCisJCSQoREVTVERJUikkKEJTRExJQl9JTlNUQUxMX0RJUikvJChCU0RfTElCKQorCS0kKFEpICQoTERDT05GSUcpCisKK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKworaW5zdGFsbC1zaGxpYnMtc3RyaXA6IGluc3RhbGwtc2hsaWJzCisKK3VuaW5zdGFsbC1zaGxpYnMgdW5pbnN0YWxsOjoKKwkkKFJNKSAtZiAkKERFU1RESVIpJChCU0RMSUJfSU5TVEFMTF9ESVIpLyQoQlNEX0xJQikKKworY2xlYW46OgorCSQoUk0pIC1yZiBwaWMKKwkkKFJNKSAtZiAkKEJTRF9MSUIpCisJJChSTSkgLWYgLi4vJChCU0RfTElCKQorCSQoUk0pIC1mIC4uLyQoQlNETElCX0lNQUdFKS5keWxpYgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLmVsZi1saWIgYi9saWIvTWFrZWZpbGUuZWxmLWxpYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODQ3OWQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL01ha2VmaWxlLmVsZi1saWIKQEAgLTAsMCArMSw3NSBAQAorIworIyBUaGlzIGlzIGEgTWFrZWZpbGUgc3R1YiB3aGljaCBoYW5kbGVzIHRoZSBjcmVhdGlvbiBvZiBMaW51eCBFTEYgc2hhcmVkCisjIGxpYnJhcmllcy4KKyMKKyMgSW4gb3JkZXIgdG8gdXNlIHRoaXMgc3R1YiwgdGhlIGZvbGxvd2luZyBtYWtlZmlsZSB2YXJpYWJsZXMgbXVzdCBiZSBkZWZpbmVkLgorIyAKKyMgRUxGX1ZFUlNJT04gPSAxLjAKKyMgRUxGX1NPX1ZFUlNJT04gPSAxCisjIEVMRl9JTUFHRSA9IGxpYmNlCisjIEVMRl9NWURJUiA9IGV0CisjIEVMRl9JTlNUQUxMX0RJUiA9ICQoU0hMSUJESVIpCisjIEVMRl9PVEhFUl9MSUJTID0gLWxjCisKK2FsbDo6IGltYWdlCisKK3JlYWwtc3ViZGlyczo6IE1ha2VmaWxlCisJJChFKSAiCU1LRElSIGVsZnNoYXJlZCIKKwkkKFEpIG1rZGlyIC1wIGVsZnNoYXJlZAorCitFTEZfTElCID0gJChFTEZfSU1BR0UpLnNvLiQoRUxGX1ZFUlNJT04pCitFTEZfU09OQU1FID0gJChFTEZfSU1BR0UpLnNvLiQoRUxGX1NPX1ZFUlNJT04pCisKK2ltYWdlOgkJJChFTEZfTElCKQorCiskKEVMRl9MSUIpOiAkKE9CSlMpCisJJChFKSAiCUdFTl9FTEZfU09MSUIgJChFTEZfTElCKSIKKwkkKFEpIChjZCBlbGZzaGFyZWQ7ICQoQ0MpIC0tc2hhcmVkIC1vICQoRUxGX0xJQikgXAorCQktTCQodG9wX2J1aWxkZGlyKS8uLi9saWIgJChMREZMQUdTKSBcCisJCS1XbCwtc29uYW1lLCQoRUxGX1NPTkFNRSkgJChPQkpTKSAkKEVMRl9PVEhFUl9MSUJTKSkKKwkkKFEpICQoTVYpIGVsZnNoYXJlZC8kKEVMRl9MSUIpIC4KKwkkKFEpICQoUk0pIC1mIC4uLyQoRUxGX0xJQikgLi4vJChFTEZfSU1BR0UpLnNvIC4uLyQoRUxGX1NPTkFNRSkKKwkkKFEpIChjZCAuLjsgJChMTikgJChMSU5LX0JVSUxEX0ZMQUdTKSBcCisJCWBlY2hvICQobXlfZGlyKSB8IHNlZCAtZSAncztsaWIvOzsnYC8kKEVMRl9MSUIpICQoRUxGX0xJQikpCisJJChRKSAoY2QgLi47ICQoTE4pICQoTElOS19CVUlMRF9GTEFHUykgJChFTEZfTElCKSAkKEVMRl9JTUFHRSkuc28pCisJJChRKSAoY2QgLi47ICQoTE4pICQoTElOS19CVUlMRF9GTEFHUykgJChFTEZfTElCKSAkKEVMRl9TT05BTUUpKQorCitpbnN0YWxsZGlycy1lbGYtbGliOjoKKwkkKEUpICIJTUtJTlNUQUxMRElSUyAkKEVMRl9JTlNUQUxMX0RJUikgJChsaWJkaXIpIgorCSQoUSkgJChNS0lOU1RBTExESVJTKSAkKERFU1RESVIpJChFTEZfSU5TVEFMTF9ESVIpIFwKKwkJJChERVNURElSKSQobGliZGlyKQorCitpbnN0YWxsZGlyczo6IGluc3RhbGxkaXJzLWVsZi1saWIKKworaW5zdGFsbC1zaGxpYnMgaW5zdGFsbDo6ICQoRUxGX0xJQikgaW5zdGFsbGRpcnMtZWxmLWxpYiAkKERFUF9JTlNUQUxMX1NZTUxJTkspCisJJChFKSAiCUlOU1RBTEwtRUxGLUxJQiAkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfTElCKSIKKwkkKFEpICQoSU5TVEFMTF9QUk9HUkFNKSAkKEVMRl9MSUIpICQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfTElCKQorCSQoRSkgIglTWU1MSU5LICQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9TT05BTUUpIgorCSQoUSkgJChJTlNUQUxMX1NZTUxJTkspICQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9MSUIpIFwKKwkJJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX1NPTkFNRSkgJChERVNURElSKQorCSQoRSkgIglTWU1MSU5LICQobGliZGlyKS8kKEVMRl9JTUFHRSkuc28iCisJJChRKSAkKElOU1RBTExfU1lNTElOSykgJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX1NPTkFNRSkgXAorCQkkKGxpYmRpcikvJChFTEZfSU1BR0UpLnNvICQoREVTVERJUikKKwkkKEUpICIJTERDT05GSUciCisJJChRKSAtJChMRENPTkZJRykKKworaW5zdGFsbC1zdHJpcDogaW5zdGFsbAorCSQoRSkgIglTVFJJUC1MSUIgJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX0xJQikiCisJJChRKSAkKFNUUklQKSAtLXN0cmlwLXVubmVlZGVkIC0tcmVtb3ZlLXNlY3Rpb249LmNvbW1lbnQgXAorCQktLXJlbW92ZS1zZWN0aW9uPS5ub3RlICQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfTElCKQorCitpbnN0YWxsLXNobGlicy1zdHJpcDogaW5zdGFsbC1zaGxpYnMKKwkkKEUpICIJU1RSSVAtTElCICQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9MSUIpIgorCSQoUSkgJChTVFJJUCkgLS1zdHJpcC11bm5lZWRlZCAtLXJlbW92ZS1zZWN0aW9uPS5jb21tZW50IFwKKwkJLS1yZW1vdmUtc2VjdGlvbj0ubm90ZSAkKERFU1RESVIpJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX0xJQikKKwordW5pbnN0YWxsLXNobGlicyB1bmluc3RhbGw6OgorCSQoUk0pIC1mICQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfTElCKSBcCisJCSQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfU09OQU1FKSBcCisJCSQoREVTVERJUikkKGxpYmRpcikvJChFTEZfSU1BR0UpLnNvCisJLSQoTERDT05GSUcpCisKK2NsZWFuOjoKKwkkKFJNKSAtcmYgZWxmc2hhcmVkCisJJChSTSkgLWYgJChFTEZfTElCKQorCSQoUk0pIC1mIC4uLyQoRUxGX0xJQikgLi4vJChFTEZfSU1BR0UpLnNvIC4uLyQoRUxGX1NPTkFNRSkKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5saWJyYXJ5IGIvbGliL01ha2VmaWxlLmxpYnJhcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4NmIwMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9NYWtlZmlsZS5saWJyYXJ5CkBAIC0wLDAgKzEsMjUgQEAKK2FsbDo6IHN1YmRpcnMgJChMSUJSQVJZKS5hCisKK2luc3RhbGwtc2hsaWJzOjoKKwordW5pbnN0YWxsLXNobGliczo6CisKK3JlYWwtc3ViZGlyczo6CisKK3N1YmRpcnM6OiBNYWtlZmlsZQorCSQoUSkgJChNQUtFKSAtcyByZWFsLXN1YmRpcnMKKwkkKFEpIHRvdWNoIHN1YmRpcnMKKworY2xlYW46OgorCSQoUSkgJChSTSkgLWYgc3ViZGlycworCiskKExJQlJBUlkpLmE6ICQoT0JKUykKKwkkKEUpICIJR0VOX0xJQiAkQCIKKwkkKFEpIChpZiB0ZXN0IC1yICRAOyB0aGVuICQoUk0pIC1mICRALmJhayAmJiAkKE1WKSAkQCAkQC5iYWs7IGZpKQorCSQoUSkgJChBUkdFTikgJEAgJChPQkpTKQorCS1AJChSQU5MSUIpICRACisJJChRKSAkKFJNKSAtZiAuLi8kQAorCSQoUSkgKGNkIC4uOyAkKExOKSAkKExJTktfQlVJTERfRkxBR1MpIFwKKwkJYGVjaG8gJChteV9kaXIpIHwgc2VkIC1lICdzO2xpYi87OydgLyRAICRAKQorCiskKExJQikvJChMSUJSQVJZKS5hOiAkKExJQlJBUlkpLmEKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5wcm9maWxlIGIvbGliL01ha2VmaWxlLnByb2ZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwZjViYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9NYWtlZmlsZS5wcm9maWxlCkBAIC0wLDAgKzEsMjcgQEAKK2FsbDo6ICQoTElCUkFSWSlfcC5hCisKK3JlYWwtc3ViZGlyczo6IE1ha2VmaWxlCisJJChFKSAiCU1LRElSIHByb2ZpbGVkIgorCSQoUSkgbWtkaXIgLXAgcHJvZmlsZWQKKworY2xlYW46OgorCSQoUk0pIC1yZiBwcm9maWxlZAorCSQoUk0pIC1mICQoTElCUkFSWSlfcC5hIC4uLyQoTElCUkFSWSlfcC5hCisKKyQoTElCUkFSWSlfcC5hOiAkKE9CSlMpCisJJChFKSAiCUdFTl9QUk9GSUxFRF9MSUIgJChFTEZfTElCKSIKKwkkKFEpIChpZiB0ZXN0IC1yICRAOyB0aGVuICQoUk0pIC1mICRALmJhayAmJiAkKE1WKSAkQCAkQC5iYWs7IGZpKQorCSQoUSkgKGNkIHByb2ZpbGVkOyAkKEFSVVBEKSAuLi8kQCAkKE9CSlMpKQorCS0kKFEpICQoUkFOTElCKSAkQAorCSQoUSkgJChSTSkgLWYgLi4vJEAKKwkkKFEpIChjZCAuLjsgJChMTikgJChMSU5LX0JVSUxEX0ZMQUdTKSBcCisJCWBlY2hvICQobXlfZGlyKSB8IHNlZCAtZSAncztsaWIvOzsnYC8kQCAkQCkKKworaW5zdGFsbDo6ICQoTElCUkFSWSlfcC5hIGluc3RhbGxkaXJzCisJJChFKSAiCUlOU1RBTExfREFUQSAkKGxpYmRpcikvJChMSUJSQVJZKV9wLmEiCisJJChRKSAkKElOU1RBTExfREFUQSkgJChMSUJSQVJZKV9wLmEgJChERVNURElSKSQobGliZGlyKS8kKExJQlJBUlkpX3AuYQorCS0kKFEpICQoUkFOTElCKSAkKERFU1RESVIpJChsaWJkaXIpLyQoTElCUkFSWSlfcC5hCisJJChRKSAkKENITU9EKSAkKExJQk1PREUpICQoREVTVERJUikkKGxpYmRpcikvJChMSUJSQVJZKV9wLmEKKwordW5pbnN0YWxsOjoKKwkkKFJNKSAtZiAkKERFU1RESVIpJChsaWJkaXIpLyQoTElCUkFSWSlfcC5hCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc29sYXJpcy1saWIgYi9saWIvTWFrZWZpbGUuc29sYXJpcy1saWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5MGJlOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9NYWtlZmlsZS5zb2xhcmlzLWxpYgpAQCAtMCwwICsxLDY1IEBACisjCisjIFRoaXMgaXMgYSBNYWtlZmlsZSBzdHViIHdoaWNoIGhhbmRsZXMgdGhlIGNyZWF0aW9uIG9mIExpbnV4IEVMRiBzaGFyZWQKKyMgbGlicmFyaWVzLgorIworIyBJbiBvcmRlciB0byB1c2UgdGhpcyBzdHViLCB0aGUgZm9sbG93aW5nIG1ha2VmaWxlIHZhcmlhYmxlcyBtdXN0IGJlIGRlZmluZWQuCisjIAorIyBFTEZfVkVSU0lPTiA9IDEuMAorIyBFTEZfU09fVkVSU0lPTiA9IDEKKyMgRUxGX0lNQUdFID0gbGliY2UKKyMgRUxGX01ZRElSID0gZXQKKyMgRUxGX0lOU1RBTExfRElSID0gJChTSExJQkRJUikKKyMgRUxGX09USEVSX0xJQlMgPSAtbGMKKworYWxsOjogaW1hZ2UKKworcmVhbC1zdWJkaXJzOjogTWFrZWZpbGUKKwkkKEUpICIJTUtESVIgZWxmc2hhcmVkIgorCSQoUSkgbWtkaXIgLXAgZWxmc2hhcmVkCisKK0VMRl9MSUIgPSAkKEVMRl9JTUFHRSkuc28uJChFTEZfVkVSU0lPTikKK0VMRl9TT05BTUUgPSAkKEVMRl9JTUFHRSkuc28uJChFTEZfU09fVkVSU0lPTikKKworaW1hZ2U6CQkkKEVMRl9MSUIpCisKKyQoRUxGX0xJQik6ICQoT0JKUykKKwkkKEUpICIJR0VOX0VMRl9TT0xJQiAkKEVMRl9MSUIpIgorCSQoUSkgKGNkIGVsZnNoYXJlZDsgJChDQykgLS1zaGFyZWQgLW8gJChFTEZfTElCKSBcCisJCS1MJCh0b3BfYnVpbGRkaXIpLy4uL2xpYiAkKExERkxBR1MpIFwKKwkJLVdsLC1oLCQoRUxGX1NPTkFNRSkgJChPQkpTKSAkKEVMRl9PVEhFUl9MSUJTKSkKKwkkKFEpICQoTVYpIGVsZnNoYXJlZC8kKEVMRl9MSUIpIC4KKwkkKFEpICQoUk0pIC1mIC4uLyQoRUxGX0xJQikgLi4vJChFTEZfSU1BR0UpLnNvIC4uLyQoRUxGX1NPTkFNRSkKKwkkKFEpIChjZCAuLjsgJChMTikgJChMSU5LX0JVSUxEX0ZMQUdTKSBcCisJCWBlY2hvICQobXlfZGlyKSB8IHNlZCAtZSAncztsaWIvOzsnYC8kKEVMRl9MSUIpICQoRUxGX0xJQikpCisJJChRKSAoY2QgLi47ICQoTE4pICQoTElOS19CVUlMRF9GTEFHUykgJChFTEZfTElCKSAkKEVMRl9JTUFHRSkuc28pCisJJChRKSAoY2QgLi47ICQoTE4pICQoTElOS19CVUlMRF9GTEFHUykgJChFTEZfTElCKSAkKEVMRl9TT05BTUUpKQorCitpbnN0YWxsZGlycy1lbGYtbGliOjoKKwkkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikgXAorCQkkKERFU1RESVIpJChsaWJkaXIpCisKK2luc3RhbGxkaXJzOjogaW5zdGFsbGRpcnMtZWxmLWxpYgorCitpbnN0YWxsLXNobGlicyBpbnN0YWxsOjogJChFTEZfTElCKSBpbnN0YWxsZGlycy1lbGYtbGliCisJJChJTlNUQUxMX1BST0dSQU0pICQoRUxGX0xJQikgJChERVNURElSKSQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9MSUIpCisJJChMTl9TKSAtZiAkKEVMRl9MSUIpICQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfU09OQU1FKQorCSQoTE5fUykgLWYgJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX1NPTkFNRSkgXAorCQkkKERFU1RESVIpJChsaWJkaXIpLyQoRUxGX0lNQUdFKS5zbworCS0kKExEQ09ORklHKQorCitpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCisJJChTVFJJUCkgLXggJChERVNURElSKSQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9MSUIpCisKK2luc3RhbGwtc2hsaWJzLXN0cmlwOiBpbnN0YWxsLXNobGlicworCSQoU1RSSVApIC14ICQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfTElCKQorCit1bmluc3RhbGwtc2hsaWJzIHVuaW5zdGFsbDo6CisJJChSTSkgLWYgJChERVNURElSKSQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9MSUIpIFwKKwkJJChERVNURElSKSQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9TT05BTUUpIFwKKwkJJChERVNURElSKSQobGliZGlyKS8kKEVMRl9JTUFHRSkuc28KKwktJChMRENPTkZJRykKKworY2xlYW46OgorCSQoUk0pIC1yZiBlbGZzaGFyZWQKKwkkKFJNKSAtZiAkKEVMRl9MSUIpCisJJChSTSkgLWYgLi4vJChFTEZfTElCKSAuLi8kKEVMRl9JTUFHRSkuc28gLi4vJChFTEZfU09OQU1FKQpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL01ha2VmaWxlLmluIGIvbGliL2Jsa2lkL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYWJkMzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyMjEgQEAKKyMgTWFrZWZpbGUgZm9yIGxpYmJsa2lkCisjCisjIENvcHlyaWdodCAoQykgMjAwMSBUaGVvZG9yZSBUcydvICh0eXRzb0BtaXQuZWR1KQorIworIyBUaGlzIGZpbGUgY2FuIGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorIyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3RvcF9idWlsZGRpciA9IC4uLy4uCitteV9kaXIgPSBsaWIvYmxraWQKK0lOU1RBTEwgPSBASU5TVEFMTEAKKworQE1DT05GSUdACisKK2FsbDo6IAorCitTTUFOUEFHRVM9CWxpYmJsa2lkLjMKKworT0JKUz0gY2FjaGUubyBkZXYubyBkZXZuYW1lLm8gZGV2bm8ubyBnZXRzaXplLm8gbGxzZWVrLm8gcHJvYmUubyBcCisgcmVhZC5vIHJlc29sdmUubyBzYXZlLm8gdGFnLm8gdmVyc2lvbi5vIAorCitTUkNTPSAkKHNyY2RpcikvY2FjaGUuYyAkKHNyY2RpcikvZGV2LmMgJChzcmNkaXIpL2Rldm5hbWUuYyAkKHNyY2RpcikvZGV2bm8uYyBcCisgJChzcmNkaXIpL2dldHNpemUuYyAkKHNyY2RpcikvbGxzZWVrLmMgJChzcmNkaXIpL3Byb2JlLmMgXAorICQoc3JjZGlyKS9yZWFkLmMgJChzcmNkaXIpL3Jlc29sdmUuYyAkKHNyY2Rpcikvc2F2ZS5jICQoc3JjZGlyKS90YWcuYyBcCisgJChzcmNkaXIpL3ZlcnNpb24uYworCitIRklMRVNfSU49CWJsa2lkLmggYmxraWRfdHlwZXMuaAorCitMSUJSQVJZPSBsaWJibGtpZAorTElCRElSPSBibGtpZAorCitFTEZfVkVSU0lPTiA9IDEuMAorRUxGX1NPX1ZFUlNJT04gPSAxCitFTEZfSU1BR0UgPSBsaWJibGtpZAorRUxGX01ZRElSID0gYmxraWQKK0VMRl9JTlNUQUxMX0RJUiA9ICQocm9vdF9saWJkaXIpCitFTEZfT1RIRVJfTElCUyA9IC1sdXVpZAorCitCU0RMSUJfVkVSU0lPTiA9IDIuMAorQlNETElCX0lNQUdFID0gbGliYmxraWQKK0JTRExJQl9NWURJUiA9IGJsa2lkCitCU0RMSUJfSU5TVEFMTF9ESVIgPSAkKHJvb3RfbGliZGlyKQorCitATUFLRUZJTEVfTElCUkFSWUAKK0BNQUtFRklMRV9FTEZACitATUFLRUZJTEVfQlNETElCQAorQE1BS0VGSUxFX1BST0ZJTEVACisKK0xJQlNfQkxLSUQ9CSQoU1RBVElDX0xJQkJMS0lEKSAkKFNUQVRJQ19MSUJVVUlEKQorREVQTElCU19CTEtJRD0JJChERVBTVEFUSUNfTElCQkxLSUQpICQoREVQU1RBVElDX0xJQlVVSUQpCisKKy5jLm86CisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCSQoUSkgJChDSEVDS19DTUQpICQoQUxMX0NGTEFHUykgJDwKK0BQUk9GSUxFX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1nIC1wZyAtbyBwcm9maWxlZC8kKi5vIC1jICQ8CitARUxGX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1mUElDIC1vIGVsZnNoYXJlZC8kKi5vIC1jICQ8CitAQlNETElCX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpICQoQlNETElCX1BJQ19GTEFHKSAtbyBwaWMvJCoubyAtYyAkPAorCithbGw6OiAkKFNNQU5QQUdFUykgYmxraWQucGMKKworYmxraWRfdHlwZXMuaDogJChzcmNkaXIpL2Jsa2lkX3R5cGVzLmguaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwkkKEUpICIJQ09ORklHLlNUQVRVUyAkQCIKKwkkKFEpIGNkICQodG9wX2J1aWxkZGlyKTsgXAorCQlDT05GSUdfRklMRVM9JChteV9kaXIpL2Jsa2lkX3R5cGVzLmggLi9jb25maWcuc3RhdHVzCisKK2Jsa2lkLmg6ICQoc3JjZGlyKS9ibGtpZC5oLmluCisJJChFKSAiCUNQICRAIgorCSQoUSkgY3AgJChzcmNkaXIpL2Jsa2lkLmguaW4gYmxraWQuaAorCitsaWJibGtpZC4zOiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvbGliYmxraWQuMy5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9saWJibGtpZC4zLmluIGxpYmJsa2lkLjMKKwordHN0X2NhY2hlOiAkKHNyY2RpcikvY2FjaGUuYyAkKERFUExJQlNfQkxLSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X2NhY2hlIC1EVEVTVF9QUk9HUkFNICQoc3JjZGlyKS9jYWNoZS5jICQoTElCU19CTEtJRCkgJChBTExfQ0ZMQUdTKQorCit0c3RfZGV2OiAkKHNyY2RpcikvZGV2LmMgJChERVBMSUJTX0JMS0lEKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9kZXYgLURURVNUX1BST0dSQU0gJChzcmNkaXIpL2Rldi5jICQoTElCU19CTEtJRCkgJChBTExfQ0ZMQUdTKQorCit0c3RfZGV2bmFtZTogJChzcmNkaXIpL2Rldm5hbWUuYyAkKERFUExJQlNfQkxLSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X2Rldm5hbWUgLURURVNUX1BST0dSQU0gJChzcmNkaXIpL2Rldm5hbWUuYyAkKExJQlNfQkxLSUQpICQoQUxMX0NGTEFHUykKKwordHN0X2Rldm5vOiAkKHNyY2RpcikvZGV2bm8uYyAkKERFUExJQlNfQkxLSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X2Rldm5vIC1EVEVTVF9QUk9HUkFNICQoc3JjZGlyKS9kZXZuby5jICQoTElCU19CTEtJRCkgJChBTExfQ0ZMQUdTKQorCit0c3RfZ2V0c2l6ZTogJChzcmNkaXIpL2dldHNpemUuYyAkKERFUExJQlNfQkxLSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X2dldHNpemUgLURURVNUX1BST0dSQU0gJChzcmNkaXIpL2dldHNpemUuYyAkKExJQlNfQkxLSUQpICQoQUxMX0NGTEFHUykKKwordHN0X3Byb2JlOiAkKHNyY2RpcikvcHJvYmUuYyAkKERFUExJQlNfQkxLSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X3Byb2JlIC1EVEVTVF9QUk9HUkFNICQoc3JjZGlyKS9wcm9iZS5jICQoTElCU19CTEtJRCkgJChBTExfQ0ZMQUdTKQorCit0c3RfcmVhZDogJChzcmNkaXIpL3JlYWQuYyAkKERFUExJQlNfQkxLSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X3JlYWQgLURURVNUX1BST0dSQU0gJChzcmNkaXIpL3JlYWQuYyAkKExJQlNfQkxLSUQpICQoQUxMX0NGTEFHUykKKwordHN0X3Jlc29sdmU6ICQoc3JjZGlyKS9yZXNvbHZlLmMgJChERVBMSUJTX0JMS0lEKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9yZXNvbHZlIC1EVEVTVF9QUk9HUkFNICQoc3JjZGlyKS9yZXNvbHZlLmMgJChMSUJTX0JMS0lEKSAkKEFMTF9DRkxBR1MpCisKK3RzdF9zYXZlOiAkKHNyY2Rpcikvc2F2ZS5jICQoREVQTElCU19CTEtJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3Rfc2F2ZSAtRFRFU1RfUFJPR1JBTSAkKHNyY2Rpcikvc2F2ZS5jICQoTElCU19CTEtJRCkgJChBTExfQ0ZMQUdTKQorCit0c3RfdGFnOiAkKHNyY2RpcikvdGFnLmMgJChERVBMSUJTX0JMS0lEKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF90YWcgLURURVNUX1BST0dSQU0gJChzcmNkaXIpL3RhZy5jICQoTElCU19CTEtJRCkgJChBTExfQ0ZMQUdTKQorCit0c3RfdHlwZXM6IHRzdF90eXBlcy5vIGJsa2lkX3R5cGVzLmggCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X3R5cGVzICQoQUxMX0xERkxBR1MpIHRzdF90eXBlcy5vCisKKy4uLy4uL21pc2MvYmxraWQubzogJCh0b3Bfc3JjZGlyKS9taXNjL2Jsa2lkLmMgYmxraWQuaAorCSQoRSkgIglDQyAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJCh0b3Bfc3JjZGlyKS9taXNjL2Jsa2lkLmMgXAorCQktbyAuLi8uLi9taXNjL2Jsa2lkLm8KKworYmxraWQ6IC4uLy4uL21pc2MvYmxraWQubyBsaWJibGtpZC5hICQoREVQTElCVVVJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyBibGtpZCAuLi8uLi9taXNjL2Jsa2lkLm8gbGliYmxraWQuYSAkKExJQlVVSUQpCisKK3Rlc3RfcHJvYmU6IHRlc3RfcHJvYmUuaW4gTWFrZWZpbGUKKwkkKEUpICJDcmVhdGluZyB0ZXN0X3Byb2JlLi4uIgorCSQoRSkgIiMhL2Jpbi9zaCIgPiB0ZXN0X3Byb2JlCisJJChFKSAiU1JDRElSPUBzcmNkaXJAIiA+PiB0ZXN0X3Byb2JlCisJJChRKSBjYXQgJChzcmNkaXIpL3Rlc3RfcHJvYmUuaW4gPj4gdGVzdF9wcm9iZQorCSQoUSkgY2htb2QgK3ggdGVzdF9wcm9iZQorCitjaGVjazo6IGFsbCB0c3RfY2FjaGUgdHN0X2RldiB0c3RfZGV2bmFtZSB0c3RfZGV2bm8gdHN0X2dldHNpemUgdHN0X3Byb2JlIFwKKyB0c3RfcmVhZCB0c3RfcmVzb2x2ZSB0c3Rfc2F2ZSB0c3RfdGFnIHRlc3RfcHJvYmUgdHN0X3R5cGVzCisJLi90ZXN0X3Byb2JlCisJLi90c3RfdHlwZXMKKworYmxraWQucGM6ICQoc3JjZGlyKS9ibGtpZC5wYy5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCSQoRSkgIglDT05GSUcuU1RBVFVTICRAIgorCSQoUSkgY2QgJCh0b3BfYnVpbGRkaXIpOyBDT05GSUdfRklMRVM9bGliL2Jsa2lkL2Jsa2lkLnBjIC4vY29uZmlnLnN0YXR1cworCitpbnN0YWxsZGlyczo6CisJJChFKSAiCU1LSU5TVEFMTERJUlMgJChsaWJkaXIpICQoaW5jbHVkZWRpcikvYmxraWQiCisJJChRKSAkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKGxpYmRpcikgXAorCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9ibGtpZCAkKERFU1RESVIpJChwa2djb25maWdkaXIpCisKK2luc3RhbGw6OiBhbGwgaW5zdGFsbGRpcnMgCisJJChFKSAiCUlOU1RBTExfREFUQSAkKGxpYmRpcikvbGliYmxraWQuYSIKKwkkKFEpICQoSU5TVEFMTF9EQVRBKSBsaWJibGtpZC5hICQoREVTVERJUikkKGxpYmRpcikvbGliYmxraWQuYQorCS0kKFEpICQoUkFOTElCKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmJsa2lkLmEKKwkkKFEpICQoQ0hNT0QpICQoTElCTU9ERSkgJChERVNURElSKSQobGliZGlyKS9saWJibGtpZC5hCisJJChRKSBzZXQgLWU7IGZvciBpIGluICQoSEZJTEVTX0lOKTsgZG8gXAorCQllY2hvICIJSU5TVEFMTF9EQVRBICQoaW5jbHVkZWRpcikvYmxraWQvJCRpIjsgXAorCQkkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2Jsa2lkLyQkaTsgXAorCWRvbmUKKwkkKFEpIGZvciBpIGluICQoU01BTlBBR0VTKTsgZG8gXAorCQllY2hvICIJSU5TVEFMTF9EQVRBICQobWFuM2RpcikvJCRpIjsgXAorCQkkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKG1hbjNkaXIpLyQkaTsgXAorCWRvbmUKKwkkKEUpICIJSU5TVEFMTF9EQVRBICQocGtnY29uZmlnZGlyKS9ibGtpZC5wYyIKKwkkKFEpICQoSU5TVEFMTF9EQVRBKSBibGtpZC5wYyAkKERFU1RESVIpJChwa2djb25maWdkaXIpL2Jsa2lkLnBjCisKK3VuaW5zdGFsbDo6CisJJChSTSkgLWYgJChERVNURElSKSQobGliZGlyKS9saWJibGtpZC5hIFwKKwkJJChERVNURElSKSQocGtnY29uZmlnZGlyKS9ibGtpZC5wYworCSQoUk0pIC1yZiAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9ibGtpZAorCWZvciBpIGluICQoU01BTlBBR0VTKTsgZG8gXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW4zZGlyKS8kJGk7IFwKKwlkb25lCisKK2NsZWFuOjoKKwkkKFJNKSAtZiBcIyogKi5zICoubyAqLm9yaWcgKi5hICp+ICouYmFrIHRzdF9jYWNoZSB0c3RfZGV2IHRzdF9kZXZuYW1lIFwKKwkJdHN0X2Rldm5vIHRzdF9nZXRzaXplIHRzdF9wcm9iZSB0c3RfcmVhZCB0c3RfcmVzb2x2ZSB0c3Rfc2F2ZSBcCisJCXRzdF90YWcgdHN0X3R5cGVzIHRlc3RzLyoub3V0IHRlc3RzLyoub2sgXAorCQl0ZXN0cy8qLmltZyByZXN1bHRzIHRlc3RfcHJvYmUgY29yZSBwcm9maWxlZC8qIFwKKwkJYmxraWQuaCBibGtpZF90eXBlcy5oIC4uL2xpYmJsa2lkLmEgLi4vbGliYmxraWRfcC5hIFwKKwkJJChTTUFOUEFHRVMpIGJsa2lkCisJQGVjaG8gcm1kaXIgdGVzdHMvdG1wIHRlc3RzCisJQChybWRpciB0ZXN0cy90bXAgdGVzdHMgMj4gL2Rldi9udWxsIDsgZXhpdCAwKQorCittb3N0bHljbGVhbjo6IGNsZWFuCitkaXN0Y2xlYW46OiBjbGVhbgorCSQoUk0pIC1mIC5kZXBlbmQgTWFrZWZpbGUgYmxraWQucGMgXAorCQkkKHNyY2RpcikvVEFHUyAkKHNyY2RpcikvTWFrZWZpbGUuaW4ub2xkCisKKyQoT0JKUyk6IHN1YmRpcnMgJChIRklMRVNfSU4pCisKKyMgKysrIERlcGVuZGVuY3kgbGluZSBlYXRlciArKysKKyMgCisjIE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb2xsb3cuICBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc2VjdGlvbiBpbgorIyB0aGUgTWFrZWZpbGUuaW4gZmlsZQorIworY2FjaGUubzogJChzcmNkaXIpL2NhY2hlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9ibGtpZFAuaCAkKHNyY2RpcikvbGlzdC5oCitkZXYubzogJChzcmNkaXIpL2Rldi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvYmxraWRQLmggJChzcmNkaXIpL2xpc3QuaAorZGV2bmFtZS5vOiAkKHNyY2RpcikvZGV2bmFtZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvYmxraWRQLmggJChzcmNkaXIpL2xpc3QuaAorZGV2bm8ubzogJChzcmNkaXIpL2Rldm5vLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9ibGtpZFAuaCAkKHNyY2RpcikvbGlzdC5oCitnZXRzaXplLm86ICQoc3JjZGlyKS9nZXRzaXplLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9ibGtpZFAuaCAkKHNyY2RpcikvbGlzdC5oCitsbHNlZWsubzogJChzcmNkaXIpL2xsc2Vlay5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvYmxraWRQLmggJChzcmNkaXIpL2xpc3QuaAorcHJvYmUubzogJChzcmNkaXIpL3Byb2JlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9ibGtpZFAuaCAkKHNyY2RpcikvbGlzdC5oIFwKKyAkKHNyY2RpcikvcHJvYmUuaAorcmVhZC5vOiAkKHNyY2RpcikvcmVhZC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvYmxraWRQLmggJChzcmNkaXIpL2xpc3QuaAorcmVzb2x2ZS5vOiAkKHNyY2RpcikvcmVzb2x2ZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvYmxraWRQLmggJChzcmNkaXIpL2xpc3QuaAorc2F2ZS5vOiAkKHNyY2Rpcikvc2F2ZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvYmxraWRQLmggJChzcmNkaXIpL2xpc3QuaAordGFnLm86ICQoc3JjZGlyKS90YWcuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2Jsa2lkUC5oICQoc3JjZGlyKS9saXN0LmgKK3ZlcnNpb24ubzogJChzcmNkaXIpL3ZlcnNpb24uYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS92ZXJzaW9uLmgKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC9ibGtpZC5oLmluIGIvbGliL2Jsa2lkL2Jsa2lkLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFmMzA5OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC9ibGtpZC5oLmluCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogYmxraWQuaCAtIEludGVyZmFjZSBmb3IgbGliYmxraWQsIGEgbGlicmFyeSB0byBpZGVudGlmeSBibG9jayBkZXZpY2VzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIEFuZHJlYXMgRGlsZ2VyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgVGhlb2RvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2lmbmRlZiBfQkxLSURfQkxLSURfSAorI2RlZmluZSBfQkxLSURfQkxLSURfSAorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8YmxraWQvYmxraWRfdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIEJMS0lEX1ZFUlNJT04JIjEuMC4wIgorI2RlZmluZSBCTEtJRF9EQVRFCSIxMi1GZWItMjAwMyIKKwordHlwZWRlZiBzdHJ1Y3QgYmxraWRfc3RydWN0X2RldiAqYmxraWRfZGV2OwordHlwZWRlZiBzdHJ1Y3QgYmxraWRfc3RydWN0X2NhY2hlICpibGtpZF9jYWNoZTsKK3R5cGVkZWYgX19zNjQgYmxraWRfbG9mZl90OworCit0eXBlZGVmIHN0cnVjdCBibGtpZF9zdHJ1Y3RfdGFnX2l0ZXJhdGUgKmJsa2lkX3RhZ19pdGVyYXRlOwordHlwZWRlZiBzdHJ1Y3QgYmxraWRfc3RydWN0X2Rldl9pdGVyYXRlICpibGtpZF9kZXZfaXRlcmF0ZTsKKworLyoKKyAqIEZsYWdzIGZvciBibGtpZF9nZXRfZGV2CisgKgorICogQkxLSURfREVWX0NSRUFURQlDcmVhdGUgYW4gZW1wdHkgZGV2aWNlIHN0cnVjdHVyZSBpZiBub3QgZm91bmQKKyAqIAkJCWluIHRoZSBjYWNoZS4KKyAqIEJMS0lEX0RFVl9WRVJJRlkJTWFrZSBzdXJlIHRoZSBkZXZpY2Ugc3RydWN0dXJlIGNvcnJlc3BvbmRzCisgKiAJCQl3aXRoIHJlYWxpdHkuCisgKiBCTEtJRF9ERVZfRklORAlKdXN0IGxvb2sgdXAgYSBkZXZpY2UgZW50cnksIGFuZCByZXR1cm4gTlVMTAorICogCQkJaWYgaXQgaXMgbm90IGZvdW5kLgorICogQkxLSURfREVWX05PUk1BTAlHZXQgYSB2YWxpZCBkZXZpY2Ugc3RydWN0dXJlLCBlaXRoZXIgZnJvbSB0aGUKKyAqIAkJCWNhY2hlIG9yIGJ5IHByb2JpbmcgdGhlIGRldmljZS4KKyAqLworI2RlZmluZSBCTEtJRF9ERVZfRklORAkJMHgwMDAwCisjZGVmaW5lIEJMS0lEX0RFVl9DUkVBVEUJMHgwMDAxCisjZGVmaW5lIEJMS0lEX0RFVl9WRVJJRlkJMHgwMDAyCisjZGVmaW5lIEJMS0lEX0RFVl9OT1JNQUwJKEJMS0lEX0RFVl9DUkVBVEUgfCBCTEtJRF9ERVZfVkVSSUZZKQorCisvKiBjYWNoZS5jICovCitleHRlcm4gdm9pZCBibGtpZF9wdXRfY2FjaGUoYmxraWRfY2FjaGUgY2FjaGUpOworZXh0ZXJuIGludCBibGtpZF9nZXRfY2FjaGUoYmxraWRfY2FjaGUgKmNhY2hlLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CitleHRlcm4gdm9pZCBibGtpZF9nY19jYWNoZShibGtpZF9jYWNoZSBjYWNoZSk7CisKKy8qIGRldi5jICovCitleHRlcm4gY29uc3QgY2hhciAqYmxraWRfZGV2X2Rldm5hbWUoYmxraWRfZGV2IGRldik7CisKK2V4dGVybiBibGtpZF9kZXZfaXRlcmF0ZSBibGtpZF9kZXZfaXRlcmF0ZV9iZWdpbihibGtpZF9jYWNoZSBjYWNoZSk7CitleHRlcm4gaW50IGJsa2lkX2Rldl9zZXRfc2VhcmNoKGJsa2lkX2Rldl9pdGVyYXRlIGl0ZXIsCisJCQkJY2hhciAqc2VhcmNoX3R5cGUsIGNoYXIgKnNlYXJjaF92YWx1ZSk7CitleHRlcm4gaW50IGJsa2lkX2Rldl9uZXh0KGJsa2lkX2Rldl9pdGVyYXRlIGl0ZXJhdGUsIGJsa2lkX2RldiAqZGV2KTsKK2V4dGVybiB2b2lkIGJsa2lkX2Rldl9pdGVyYXRlX2VuZChibGtpZF9kZXZfaXRlcmF0ZSBpdGVyYXRlKTsKKworLyogZGV2bm8uYyAqLworZXh0ZXJuIGNoYXIgKmJsa2lkX2Rldm5vX3RvX2Rldm5hbWUoZGV2X3QgZGV2bm8pOworCisvKiBkZXZuYW1lLmMgKi8KK2V4dGVybiBpbnQgYmxraWRfcHJvYmVfYWxsKGJsa2lkX2NhY2hlIGNhY2hlKTsKK2V4dGVybiBpbnQgYmxraWRfcHJvYmVfYWxsX25ldyhibGtpZF9jYWNoZSBjYWNoZSk7CitleHRlcm4gYmxraWRfZGV2IGJsa2lkX2dldF9kZXYoYmxraWRfY2FjaGUgY2FjaGUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQkgICAgICAgaW50IGZsYWdzKTsKKworLyogZ2V0c2l6ZS5jICovCitleHRlcm4gYmxraWRfbG9mZl90IGJsa2lkX2dldF9kZXZfc2l6ZShpbnQgZmQpOworCisvKiBwcm9iZS5jICovCitpbnQgYmxraWRfa25vd25fZnN0eXBlKGNvbnN0IGNoYXIgKmZzdHlwZSk7CitleHRlcm4gYmxraWRfZGV2IGJsa2lkX3ZlcmlmeShibGtpZF9jYWNoZSBjYWNoZSwgYmxraWRfZGV2IGRldik7CisKKy8qIHJlYWQuYyAqLworCisvKiByZXNvbHZlLmMgKi8KK2V4dGVybiBjaGFyICpibGtpZF9nZXRfdGFnX3ZhbHVlKGJsa2lkX2NhY2hlIGNhY2hlLCBjb25zdCBjaGFyICp0YWduYW1lLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpkZXZuYW1lKTsKK2V4dGVybiBjaGFyICpibGtpZF9nZXRfZGV2bmFtZShibGtpZF9jYWNoZSBjYWNoZSwgY29uc3QgY2hhciAqdG9rZW4sCisJCQkgICAgICAgY29uc3QgY2hhciAqdmFsdWUpOworCisvKiB0YWcuYyAqLworZXh0ZXJuIGJsa2lkX3RhZ19pdGVyYXRlIGJsa2lkX3RhZ19pdGVyYXRlX2JlZ2luKGJsa2lkX2RldiBkZXYpOworZXh0ZXJuIGludCBibGtpZF90YWdfbmV4dChibGtpZF90YWdfaXRlcmF0ZSBpdGVyYXRlLAorCQkJICAgICAgY29uc3QgY2hhciAqKnR5cGUsIGNvbnN0IGNoYXIgKip2YWx1ZSk7CitleHRlcm4gdm9pZCBibGtpZF90YWdfaXRlcmF0ZV9lbmQoYmxraWRfdGFnX2l0ZXJhdGUgaXRlcmF0ZSk7CitleHRlcm4gaW50IGJsa2lkX2Rldl9oYXNfdGFnKGJsa2lkX2RldiBkZXYsIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkgICAgIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2V4dGVybiBibGtpZF9kZXYgYmxraWRfZmluZF9kZXZfd2l0aF90YWcoYmxraWRfY2FjaGUgY2FjaGUsCisJCQkJCSBjb25zdCBjaGFyICp0eXBlLAorCQkJCQkgY29uc3QgY2hhciAqdmFsdWUpOworZXh0ZXJuIGludCBibGtpZF9wYXJzZV90YWdfc3RyaW5nKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICoqcmV0X3R5cGUsCisJCQkJICBjaGFyICoqcmV0X3ZhbCk7CisKKy8qIHZlcnNpb24uYyAqLworZXh0ZXJuIGludCBibGtpZF9wYXJzZV92ZXJzaW9uX3N0cmluZyhjb25zdCBjaGFyICp2ZXJfc3RyaW5nKTsKK2V4dGVybiBpbnQgYmxraWRfZ2V0X2xpYnJhcnlfdmVyc2lvbihjb25zdCBjaGFyICoqdmVyX3N0cmluZywKKwkJCQkgICAgIGNvbnN0IGNoYXIgKipkYXRlX3N0cmluZyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQkxLSURfQkxLSURfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL2Jsa2lkLnBjLmluIGIvbGliL2Jsa2lkL2Jsa2lkLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOGZlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvYmxraWQucGMuaW4KQEAgLTAsMCArMSwxMSBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisKK05hbWU6IGJsa2lkCitEZXNjcmlwdGlvbjogQmxvY2sgZGV2aWNlIGlkIGxpYnJhcnkKK1ZlcnNpb246IEBFMkZTUFJPR1NfVkVSU0lPTkAKK1JlcXVpcmVzLnByaXZhdGU6IHV1aWQKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9L2Jsa2lkIC1JJHtpbmNsdWRlZGlyfQorTGliczogLUwke2xpYmRpcn0gLWxibGtpZApkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL2Jsa2lkUC5oIGIvbGliL2Jsa2lkL2Jsa2lkUC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZjExYTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvYmxraWRQLmgKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBibGtpZFAuaCAtIEludGVybmFsIGludGVyZmFjZXMgZm9yIGxpYmJsa2lkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIEFuZHJlYXMgRGlsZ2VyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgVGhlb2RvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2lmbmRlZiBfQkxLSURfQkxLSURQX0gKKyNkZWZpbmUgX0JMS0lEX0JMS0lEUF9ICisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8YmxraWQvYmxraWQuaD4KKworI2luY2x1ZGUgPGJsa2lkL2xpc3QuaD4KKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9fQkxLSURfQVRUUih4KSBfX2F0dHJpYnV0ZV9fKHgpCisjZWxzZQorI2RlZmluZSBfX0JMS0lEX0FUVFIoeCkKKyNlbmRpZgorCisKKy8qCisgKiBUaGlzIGRlc2NyaWJlcyB0aGUgYXR0cmlidXRlcyBvZiBhIHNwZWNpZmljIGRldmljZS4KKyAqIFdlIGNhbiB0cmF2ZXJzZSBhbGwgb2YgdGhlIHRhZ3MgYnkgYmlkX3RhZ3MgKGxpbmtpbmcgdG8gdGhlIHRhZyBiaXRfbmFtZXMpLgorICogVGhlIGJpZF9sYWJlbCBhbmQgYmlkX3V1aWQgZmllbGRzIGFyZSBzaG9ydGN1dHMgdG8gdGhlIExBQkVMIGFuZCBVVUlEIHRhZworICogdmFsdWVzLCBpZiB0aGV5IGV4aXN0LgorICovCitzdHJ1Y3QgYmxraWRfc3RydWN0X2RldgoreworCXN0cnVjdCBsaXN0X2hlYWQJYmlkX2RldnM7CS8qIEFsbCBkZXZpY2VzIGluIHRoZSBjYWNoZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJYmlkX3RhZ3M7CS8qIEFsbCB0YWdzIGZvciB0aGlzIGRldmljZSAqLworCWJsa2lkX2NhY2hlCQliaWRfY2FjaGU7CS8qIERldiBiZWxvbmdzIHRvIHRoaXMgY2FjaGUgKi8KKwljaGFyCQkJKmJpZF9uYW1lOwkvKiBEZXZpY2UgaW5vZGUgcGF0aG5hbWUgKi8KKwljaGFyCQkJKmJpZF90eXBlOwkvKiBQcmVmZXJyZWQgZGV2aWNlIFRZUEUgKi8KKwlpbnQJCQliaWRfcHJpOwkvKiBEZXZpY2UgcHJpb3JpdHkgKi8KKwlkZXZfdAkJCWJpZF9kZXZubzsJLyogRGV2aWNlIG1ham9yL21pbm9yIG51bWJlciAqLworCXRpbWVfdAkJCWJpZF90aW1lOwkvKiBMYXN0IHVwZGF0ZSB0aW1lIG9mIGRldmljZSAqLworCXVuc2lnbmVkIGludAkJYmlkX2ZsYWdzOwkvKiBEZXZpY2Ugc3RhdHVzIGJpdGZsYWdzICovCisJY2hhcgkJCSpiaWRfbGFiZWw7CS8qIFNob3J0Y3V0IHRvIGRldmljZSBMQUJFTCAqLworCWNoYXIJCQkqYmlkX3V1aWQ7CS8qIFNob3J0Y3V0IHRvIGJpbmFyeSBVVUlEICovCit9OworCisjZGVmaW5lIEJMS0lEX0JJRF9GTF9WRVJJRklFRAkweDAwMDEJLyogRGV2aWNlIGRhdGEgdmFsaWRhdGVkIGZyb20gZGlzayAqLworI2RlZmluZSBCTEtJRF9CSURfRkxfSU5WQUxJRAkweDAwMDQJLyogRGV2aWNlIGlzIGludmFsaWQgKi8KKworLyoKKyAqIEVhY2ggdGFnIGRlZmluZXMgYSBOQU1FPXZhbHVlIHBhaXIgZm9yIGEgcGFydGljdWxhciBkZXZpY2UuICBUaGUgdGFncworICogYXJlIGxpbmtlZCB2aWEgYml0X25hbWVzIGZvciBhIHNpbmdsZSBkZXZpY2UsIHNvIHRoYXQgdHJhdmVyc2luZyB0aGUKKyAqIG5hbWVzIGxpc3Qgd2lsbCBnZXQgeW91IGEgbGlzdCBvZiBhbGwgdGFncyBhc3NvY2lhdGVkIHdpdGggYSBkZXZpY2UuCisgKiBUaGV5IGFyZSBhbHNvIGxpbmtlZCB2aWEgYml0X3ZhbHVlcyBmb3IgYWxsIGRldmljZXMsIHNvIG9uZSBjYW4gZWFzaWx5CisgKiBzZWFyY2ggYWxsIHRhZ3Mgd2l0aCBhIGdpdmVuIE5BTUUgZm9yIGEgc3BlY2lmaWMgdmFsdWUuCisgKi8KK3N0cnVjdCBibGtpZF9zdHJ1Y3RfdGFnCit7CisJc3RydWN0IGxpc3RfaGVhZAliaXRfdGFnczsJLyogQWxsIHRhZ3MgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IGxpc3RfaGVhZAliaXRfbmFtZXM7CS8qIEFsbCB0YWdzIHdpdGggZ2l2ZW4gTkFNRSAqLworCWNoYXIJCQkqYml0X25hbWU7CS8qIE5BTUUgb2YgdGFnIChzaGFyZWQpICovCisJY2hhcgkJCSpiaXRfdmFsOwkvKiB2YWx1ZSBvZiB0YWcgKi8KKwlibGtpZF9kZXYJCWJpdF9kZXY7CS8qIHBvaW50ZXIgdG8gZGV2aWNlICovCit9OwordHlwZWRlZiBzdHJ1Y3QgYmxraWRfc3RydWN0X3RhZyAqYmxraWRfdGFnOworCisvKgorICogTWluaW11bSBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIGRldmljZSBwcm9iZXMsIGV2ZW4gd2hlbiByZWFkaW5nCisgKiBmcm9tIHRoZSBjYWNoZS4gIFRoaXMgaXMgdG8gYXZvaWQgcmUtcHJvYmluZyBhbGwgZGV2aWNlcyB3aGljaCB3ZXJlCisgKiBqdXN0IHByb2JlZCBieSBhbm90aGVyIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBzaGFyZSB0aGUgY2FjaGUuCisgKi8KKyNkZWZpbmUgQkxLSURfUFJPQkVfTUlOCQkyCisKKy8qCisgKiBUaW1lIGluIHNlY29uZHMgYW4gZW50cnkgcmVtYWlucyB2ZXJpZmllZCBpbiB0aGUgaW4tbWVtb3J5IGNhY2hlCisgKiBiZWZvcmUgYmVpbmcgcmV2ZXJpZmllZCAoaW4gY2FzZSBvZiBsb25nLXJ1bm5pbmcgcHJvY2Vzc2VzIHRoYXQKKyAqIGtlZXAgYSBjYWNoZSBpbiBtZW1vcnkgYW5kIGNvbnRpbnVlIHRvIHVzZSBpdCBmb3IgYSBsb25nIHRpbWUpLgorICovCisjZGVmaW5lIEJMS0lEX1BST0JFX0lOVEVSVkFMCTIwMAorCisvKiBUaGlzIGRlc2NyaWJlcyBhbiBlbnRpcmUgYmxraWQgY2FjaGUgZmlsZSBhbmQgcHJvYmVkIGRldmljZXMuCisgKiBXZSBjYW4gdHJhdmVyc2UgYWxsIG9mIHRoZSBmb3VuZCBkZXZpY2VzIHZpYSBiaWNfbGlzdC4KKyAqIFdlIGNhbiB0cmF2ZXJzZSBhbGwgb2YgdGhlIHRhZyB0eXBlcyBieSBiaWNfdGFncywgd2hpY2ggaG9sZCBlbXB0eSB0YWdzCisgKiBmb3IgZWFjaCB0YWcgdHlwZS4gIFRob3NlIHRhZ3MgY2FuIGJlIHVzZWQgYXMgbGlzdF9oZWFkcyBmb3IgaXRlcmF0aW5nCisgKiB0aHJvdWdoIGFsbCBkZXZpY2VzIHdpdGggYSBzcGVjaWZpYyB0YWcgdHlwZSAoZS5nLiBMQUJFTCkuCisgKi8KK3N0cnVjdCBibGtpZF9zdHJ1Y3RfY2FjaGUKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCWJpY19kZXZzOwkvKiBMaXN0IGhlYWQgb2YgYWxsIGRldmljZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWJpY190YWdzOwkvKiBMaXN0IGhlYWQgb2YgYWxsIHRhZyB0eXBlcyAqLworCXRpbWVfdAkJCWJpY190aW1lOwkvKiBMYXN0IHByb2JlIHRpbWUgKi8KKwl0aW1lX3QJCQliaWNfZnRpbWU7IAkvKiBNb2QgdGltZSBvZiB0aGUgY2FjaGVmaWxlICovCisJdW5zaWduZWQgaW50CQliaWNfZmxhZ3M7CS8qIFN0YXR1cyBmbGFncyBvZiB0aGUgY2FjaGUgKi8KKwljaGFyCQkJKmJpY19maWxlbmFtZTsJLyogZmlsZW5hbWUgb2YgY2FjaGUgKi8KK307CisKKyNkZWZpbmUgQkxLSURfQklDX0ZMX1BST0JFRAkweDAwMDIJLyogV2UgcHJvYmVkIC9wcm9jL3BhcnRpdGlvbiBkZXZpY2VzICovCisjZGVmaW5lIEJMS0lEX0JJQ19GTF9DSEFOR0VECTB4MDAwNAkvKiBDYWNoZSBoYXMgY2hhbmdlZCBmcm9tIGRpc2sgKi8KKworZXh0ZXJuIGNoYXIgKmJsa2lkX3N0cmR1cChjb25zdCBjaGFyICpzKTsKK2V4dGVybiBjaGFyICpibGtpZF9zdHJuZHVwKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGludCBsZW5ndGgpOworCisjZGVmaW5lIEJMS0lEX0NBQ0hFX0ZJTEUgIi9ldGMvYmxraWQudGFiIgorCisjZGVmaW5lIEJMS0lEX0VSUl9JTwkgNQorI2RlZmluZSBCTEtJRF9FUlJfUFJPQwkgOQorI2RlZmluZSBCTEtJRF9FUlJfTUVNCTEyCisjZGVmaW5lIEJMS0lEX0VSUl9DQUNIRQkxNAorI2RlZmluZSBCTEtJRF9FUlJfREVWCTE5CisjZGVmaW5lIEJMS0lEX0VSUl9QQVJBTQkyMgorI2RlZmluZSBCTEtJRF9FUlJfQklHCTI3CisKKy8qCisgKiBQcmlvcml0eSBzZXR0aW5ncyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBCTEtJRF9QUklfRE0JNDAKKyNkZWZpbmUgQkxLSURfUFJJX0VWTVMJMzAKKyNkZWZpbmUgQkxLSURfUFJJX0xWTQkyMAorI2RlZmluZSBCTEtJRF9QUklfTUQJMTAKKworI2lmIGRlZmluZWQoVEVTVF9QUk9HUkFNKSAmJiAhZGVmaW5lZChDT05GSUdfQkxLSURfREVCVUcpCisjZGVmaW5lIENPTkZJR19CTEtJRF9ERUJVRworI2VuZGlmCisKKyNkZWZpbmUgREVCVUdfQ0FDSEUJMHgwMDAxCisjZGVmaW5lIERFQlVHX0RVTVAJMHgwMDAyCisjZGVmaW5lIERFQlVHX0RFVgkweDAwMDQKKyNkZWZpbmUgREVCVUdfREVWTkFNRQkweDAwMDgKKyNkZWZpbmUgREVCVUdfREVWTk8JMHgwMDEwCisjZGVmaW5lIERFQlVHX1BST0JFCTB4MDAyMAorI2RlZmluZSBERUJVR19SRUFECTB4MDA0MAorI2RlZmluZSBERUJVR19SRVNPTFZFCTB4MDA4MAorI2RlZmluZSBERUJVR19TQVZFCTB4MDEwMAorI2RlZmluZSBERUJVR19UQUcJMHgwMjAwCisjZGVmaW5lIERFQlVHX0lOSVQJMHg4MDAwCisjZGVmaW5lIERFQlVHX0FMTAkweEZGRkYKKworI2lmZGVmIENPTkZJR19CTEtJRF9ERUJVRworI2luY2x1ZGUgPHN0ZGlvLmg+CitleHRlcm4gaW50CWJsa2lkX2RlYnVnX21hc2s7CisjZGVmaW5lIERCRyhtLHgpCWlmICgobSkgJiBibGtpZF9kZWJ1Z19tYXNrKSB4OworI2Vsc2UKKyNkZWZpbmUgREJHKG0seCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0JMS0lEX0RFQlVHCitleHRlcm4gdm9pZCBibGtpZF9kZWJ1Z19kdW1wX2RldihibGtpZF9kZXYgZGV2KTsKK2V4dGVybiB2b2lkIGJsa2lkX2RlYnVnX2R1bXBfdGFnKGJsa2lkX3RhZyB0YWcpOworI2VuZGlmCisKKy8qIGRldm5vLmMgKi8KK3N0cnVjdCBkaXJfbGlzdCB7CisJY2hhcgkqbmFtZTsKKwlzdHJ1Y3QgZGlyX2xpc3QgKm5leHQ7Cit9OworZXh0ZXJuIHZvaWQgYmxraWRfX3NjYW5fZGlyKGNoYXIgKiwgZGV2X3QsIHN0cnVjdCBkaXJfbGlzdCAqKiwgY2hhciAqKik7CisKKy8qIGxzZWVrLmMgKi8KK2V4dGVybiBibGtpZF9sb2ZmX3QgYmxraWRfbGxzZWVrKGludCBmZCwgYmxraWRfbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSk7CisKKy8qIHJlYWQuYyAqLworZXh0ZXJuIHZvaWQgYmxraWRfcmVhZF9jYWNoZShibGtpZF9jYWNoZSBjYWNoZSk7CisKKy8qIHNhdmUuYyAqLworZXh0ZXJuIGludCBibGtpZF9mbHVzaF9jYWNoZShibGtpZF9jYWNoZSBjYWNoZSk7CisKKy8qCisgKiBGdW5jdGlvbnMgdG8gY3JlYXRlIGFuZCBmaW5kIGEgc3BlY2lmaWMgdGFnIHR5cGU6IHRhZy5jCisgKi8KK2V4dGVybiB2b2lkIGJsa2lkX2ZyZWVfdGFnKGJsa2lkX3RhZyB0YWcpOworZXh0ZXJuIGJsa2lkX3RhZyBibGtpZF9maW5kX3RhZ19kZXYoYmxraWRfZGV2IGRldiwgY29uc3QgY2hhciAqdHlwZSk7CitleHRlcm4gaW50IGJsa2lkX3NldF90YWcoYmxraWRfZGV2IGRldiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSBjb25zdCBjaGFyICp2YWx1ZSwgY29uc3QgaW50IHZsZW5ndGgpOworCisvKgorICogRnVuY3Rpb25zIHRvIGNyZWF0ZSBhbmQgZmluZCBhIHNwZWNpZmljIHRhZyB0eXBlOiBkZXYuYworICovCitleHRlcm4gYmxraWRfZGV2IGJsa2lkX25ld19kZXYodm9pZCk7CitleHRlcm4gdm9pZCBibGtpZF9mcmVlX2RldihibGtpZF9kZXYgZGV2KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9CTEtJRF9CTEtJRFBfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL2Jsa2lkX3R5cGVzLmguaW4gYi9saWIvYmxraWQvYmxraWRfdHlwZXMuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGM4MWQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL2Jsa2lkX3R5cGVzLmguaW4KQEAgLTAsMCArMSwxNjcgQEAKKy8qIAorICogSWYgbGludXgvdHlwZXMuaCBpcyBhbHJlYWR5IGJlZW4gaW5jbHVkZWQsIGFzc3VtZSBpdCBoYXMgZGVmaW5lZAorICogZXZlcnl0aGluZyB3ZSBuZWVkLiAgKGNyb3NzIGZpbmdlcnMpICBPdGhlciBoZWFkZXIgZmlsZXMgbWF5IGhhdmUgCisgKiBhbHNvIGRlZmluZWQgdGhlIHR5cGVzIHRoYXQgd2UgbmVlZC4KKyAqLworI2lmICghZGVmaW5lZChfTElOVVhfVFlQRVNfSCkgJiYgIWRlZmluZWQoX0JMS0lEX1RZUEVTX0gpICYmIFwKKwkhZGVmaW5lZChfRVhUMl9UWVBFU19IKSkKKyNkZWZpbmUgX0JMS0lEX1RZUEVTX0gKKworQEFTTV9UWVBFU19IRUFERVJACisKKyNpZm5kZWYgSEFWRV9fX1U4CisjZGVmaW5lIEhBVkVfX19VOAorI2lmZGVmIF9fVThfVFlQRURFRgordHlwZWRlZiBfX1U4X1RZUEVERUYgX191ODsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKKyNlbmRpZgorI2VuZGlmIC8qIEhBVkVfX19VOCAqLworCisjaWZuZGVmIEhBVkVfX19TOAorI2RlZmluZSBIQVZFX19fUzgKKyNpZmRlZiBfX1M4X1RZUEVERUYKK3R5cGVkZWYgX19TOF9UWVBFREVGIF9fczg7CisjZWxzZQordHlwZWRlZiBzaWduZWQgY2hhciBfX3M4OworI2VuZGlmCisjZW5kaWYgLyogSEFWRV9fX1M4ICovCisKKyNpZm5kZWYgSEFWRV9fX1UxNgorI2RlZmluZSBIQVZFX19fVTE2CisjaWZkZWYgX19VMTZfVFlQRURFRgordHlwZWRlZiBfX1UxNl9UWVBFREVGIF9fdTE2OworI2Vsc2UKKyNpZiAoQFNJWkVPRl9JTlRAID09IDIpCit0eXBlZGVmCXVuc2lnbmVkIGludAlfX3UxNjsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfU0hPUlRAID09IDIpCit0eXBlZGVmCXVuc2lnbmVkIHNob3J0CV9fdTE2OworI2Vsc2UKKyN1bmRlZiBIQVZFX19fVTE2CisgID89PWVycm9yOiB1bmRlZmluZWQgMTYgYml0IHR5cGUKKyNlbmRpZiAvKiBTSVpFT0ZfU0hPUlQgPT0gMiAqLworI2VuZGlmIC8qIFNJWkVPRl9JTlQgPT0gMiAqLworI2VuZGlmIC8qIF9fVTE2X1RZUEVERUYgKi8KKyNlbmRpZiAvKiBIQVZFX19fVTE2ICovCisKKyNpZm5kZWYgSEFWRV9fX1MxNgorI2RlZmluZSBIQVZFX19fUzE2CisjaWZkZWYgX19TMTZfVFlQRURFRgordHlwZWRlZiBfX1MxNl9UWVBFREVGIF9fczE2OworI2Vsc2UKKyNpZiAoQFNJWkVPRl9JTlRAID09IDIpCit0eXBlZGVmCWludAkJX19zMTY7CisjZWxzZQorI2lmIChAU0laRU9GX1NIT1JUQCA9PSAyKQordHlwZWRlZglzaG9ydAkJX19zMTY7CisjZWxzZQorI3VuZGVmIEhBVkVfX19TMTYKKyAgPz09ZXJyb3I6IHVuZGVmaW5lZCAxNiBiaXQgdHlwZQorI2VuZGlmIC8qIFNJWkVPRl9TSE9SVCA9PSAyICovCisjZW5kaWYgLyogU0laRU9GX0lOVCA9PSAyICovCisjZW5kaWYgLyogX19TMTZfVFlQRURFRiAqLworI2VuZGlmIC8qIEhBVkVfX19TMTYgKi8KKworI2lmbmRlZiBIQVZFX19fVTMyCisjZGVmaW5lIEhBVkVfX19VMzIKKyNpZmRlZiBfX1UzMl9UWVBFREVGCit0eXBlZGVmIF9fVTMyX1RZUEVERUYgX191MzI7CisjZWxzZQorI2lmIChAU0laRU9GX0lOVEAgPT0gNCkKK3R5cGVkZWYJdW5zaWduZWQgaW50CV9fdTMyOworI2Vsc2UKKyNpZiAoQFNJWkVPRl9MT05HQCA9PSA0KQordHlwZWRlZgl1bnNpZ25lZCBsb25nCV9fdTMyOworI2Vsc2UKKyNpZiAoQFNJWkVPRl9TSE9SVEAgPT0gNCkKK3R5cGVkZWYJdW5zaWduZWQgc2hvcnQJX191MzI7CisjZWxzZQorI3VuZGVmIEhBVkVfX19VMzIKKyA/PT0gZXJyb3I6IHVuZGVmaW5lZCAzMiBiaXQgdHlwZQorI2VuZGlmIC8qIFNJWkVPRl9TSE9SVCA9PSA0ICovCisjZW5kaWYgLyogU0laRU9GX0xPTkcgPT0gNCAqLworI2VuZGlmIC8qIFNJWkVPRl9JTlQgPT0gNCAqLworI2VuZGlmIC8qIF9fVTMyX1RZUEVERUYgKi8KKyNlbmRpZiAvKiBIQVZFX19fVTMyICovCisKKyNpZm5kZWYgSEFWRV9fX1MzMgorI2RlZmluZSBIQVZFX19fUzMyCisjaWZkZWYgX19TMzJfVFlQRURFRgordHlwZWRlZiBfX1MzMl9UWVBFREVGIF9fczMyOworI2Vsc2UKKyNpZiAoQFNJWkVPRl9JTlRAID09IDQpCit0eXBlZGVmCWludAkJX19zMzI7CisjZWxzZQorI2lmIChAU0laRU9GX0xPTkdAID09IDQpCit0eXBlZGVmCWxvbmcJCV9fczMyOworI2Vsc2UKKyNpZiAoQFNJWkVPRl9TSE9SVEAgPT0gNCkKK3R5cGVkZWYJc2hvcnQJCV9fczMyOworI2Vsc2UKKyN1bmRlZiBIQVZFX19fUzMyCisgPz09IGVycm9yOiB1bmRlZmluZWQgMzIgYml0IHR5cGUKKyNlbmRpZiAvKiBTSVpFT0ZfU0hPUlQgPT0gNCAqLworI2VuZGlmIC8qIFNJWkVPRl9MT05HID09IDQgKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDQgKi8KKyNlbmRpZiAvKiBfX1MzMl9UWVBFREVGICovCisjZW5kaWYgLyogSEFWRV9fX1MzMiAqLworCisjaWZuZGVmIEhBVkVfX19VNjQKKyNkZWZpbmUgSEFWRV9fX1U2NAorI2lmZGVmIF9fVTY0X1RZUEVERUYKK3R5cGVkZWYgX19VNjRfVFlQRURFRiBfX3U2NDsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfSU5UQCA9PSA4KQordHlwZWRlZiB1bnNpZ25lZCBpbnQJX191NjQ7CisjZWxzZQorI2lmIChAU0laRU9GX0xPTkdfTE9OR0AgPT0gOCkKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nCV9fdTY0OworI2Vsc2UKKyNpZiAoQFNJWkVPRl9MT05HQCA9PSA4KQordHlwZWRlZiB1bnNpZ25lZCBsb25nCV9fdTY0OworI2Vsc2UKKyN1bmRlZiBIQVZFX19fVTY0CisgPz09IGVycm9yOiB1bmRlZmluZWQgNjQgYml0IHR5cGUKKyNlbmRpZiAvKiBTSVpFT0ZfTE9ORyA9PSA4ICovCisjZW5kaWYgLyogU0laRU9GX0xPTkdfTE9ORyA9PSA4ICovCisjZW5kaWYgLyogU0laRU9GX0lOVCA9PSA4ICovCisjZW5kaWYgLyogX19VNjRfVFlQRURFRiAqLworI2VuZGlmIC8qIEhBVkVfX19VNjQgKi8KKworI2lmbmRlZiBIQVZFX19fUzY0CisjZGVmaW5lIEhBVkVfX19TNjQKKyNpZmRlZiBfX1M2NF9UWVBFREVGCit0eXBlZGVmIF9fUzY0X1RZUEVERUYgX19zNjQ7CisjZWxzZQorI2lmIChAU0laRU9GX0lOVEAgPT0gOCkKK3R5cGVkZWYgaW50CQlfX3M2NDsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfTE9OR19MT05HQCA9PSA4KQorI2lmIGRlZmluZWQoX19HTlVDX18pCit0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBsb25nCV9fczY0OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZwlfX3M2NDsKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworI2Vsc2UKKyNpZiAoQFNJWkVPRl9MT05HQCA9PSA4KQordHlwZWRlZiBsb25nCQlfX3M2NDsKKyNlbHNlCisjdW5kZWYgSEFWRV9fX1M2NAorID89PSBlcnJvcjogdW5kZWZpbmVkIDY0IGJpdCB0eXBlCisjZW5kaWYgLyogU0laRU9GX0xPTkcgPT0gOCAqLworI2VuZGlmIC8qIFNJWkVPRl9MT05HX0xPTkcgPT0gOCAqLworI2VuZGlmIC8qIFNJWkVPRl9JTlQgPT0gOCAqLworI2VuZGlmIC8qIF9fUzY0X1RZUEVERUYgKi8KKyNlbmRpZiAvKiBIQVZFX19fUzY0ICovCisKKyN1bmRlZiBfX1M4X1RZUEVERUYKKyN1bmRlZiBfX1U4X1RZUEVERUYKKyN1bmRlZiBfX1MxNl9UWVBFREVGCisjdW5kZWYgX19VMTZfVFlQRURFRgorI3VuZGVmIF9fUzMyX1RZUEVERUYKKyN1bmRlZiBfX1UzMl9UWVBFREVGCisjdW5kZWYgX19TNjRfVFlQRURFRgorI3VuZGVmIF9fVTY0X1RZUEVERUYKKworI2VuZGlmIC8qIF8qX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC9jYWNoZS5jIGIvbGliL2Jsa2lkL2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjODA4OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC9jYWNoZS5jCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogY2FjaGUuYyAtIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24vZnJlZSByb3V0aW5lcyBmb3IgY2FjaGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgQW5kcmVhcyBEaWxnZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMyBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmZGVmIEhBVkVfU1lTX1BSQ1RMX0gKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNlbHNlCisjZGVmaW5lIFBSX0dFVF9EVU1QQUJMRSAzCisjZW5kaWYKKyNpZiAoIWRlZmluZWQoSEFWRV9QUkNUTCkgJiYgZGVmaW5lZChsaW51eCkpCisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpbmNsdWRlICJibGtpZFAuaCIKKworaW50IGJsa2lkX2RlYnVnX21hc2sgPSAwOworCisKK3N0YXRpYyBjaGFyICpzYWZlX2dldGVudihjb25zdCBjaGFyICphcmcpCit7CisJaWYgKChnZXR1aWQoKSAhPSBnZXRldWlkKCkpIHx8IChnZXRnaWQoKSAhPSBnZXRlZ2lkKCkpKQorCQlyZXR1cm4gTlVMTDsKKyNpZiBIQVZFX1BSQ1RMCisJaWYgKHByY3RsKFBSX0dFVF9EVU1QQUJMRSwgMCwgMCwgMCwgMCkgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisjZWxzZQorI2lmIChkZWZpbmVkKGxpbnV4KSAmJiBkZWZpbmVkKFNZU19wcmN0bCkpCisJaWYgKHN5c2NhbGwoU1lTX3ByY3RsLCBQUl9HRVRfRFVNUEFCTEUsIDAsIDAsIDAsIDApID09IDApCisJCXJldHVybiBOVUxMOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9TRUNVUkVfR0VURU5WKQorCXJldHVybiBzZWN1cmVfZ2V0ZW52KGFyZyk7CisjZWxpZiBkZWZpbmVkKEhBVkVfX19TRUNVUkVfR0VURU5WKQorCXJldHVybiBfX3NlY3VyZV9nZXRlbnYoYXJnKTsKKyNlbHNlCisJcmV0dXJuIGdldGVudihhcmcpOworI2VuZGlmCit9CisKKyNpZiAwIC8qIGlmZGVmIENPTkZJR19CTEtJRF9ERUJVRyAqLworc3RhdGljIGJsa2lkX2RlYnVnX2R1bXBfY2FjaGUoaW50IG1hc2ssIGJsa2lkX2NhY2hlIGNhY2hlKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisKKwlpZiAoIWNhY2hlKSB7CisJCXByaW50ZigiY2FjaGU6IE5VTExcbiIpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRmKCJjYWNoZTogdGltZSA9ICVsdVxuIiwgY2FjaGUtPmJpY190aW1lKTsKKwlwcmludGYoImNhY2hlOiBmbGFncyA9IDB4JTA4WFxuIiwgY2FjaGUtPmJpY19mbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoKHAsICZjYWNoZS0+YmljX2RldnMpIHsKKwkJYmxraWRfZGV2IGRldiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGJsa2lkX3N0cnVjdF9kZXYsIGJpZF9kZXZzKTsKKwkJYmxraWRfZGVidWdfZHVtcF9kZXYoZGV2KTsKKwl9Cit9CisjZW5kaWYKKworaW50IGJsa2lkX2dldF9jYWNoZShibGtpZF9jYWNoZSAqcmV0X2NhY2hlLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlibGtpZF9jYWNoZSBjYWNoZTsKKworI2lmZGVmIENPTkZJR19CTEtJRF9ERUJVRworCWlmICghKGJsa2lkX2RlYnVnX21hc2sgJiBERUJVR19JTklUKSkgeworCQljaGFyICpkc3RyID0gZ2V0ZW52KCJCTEtJRF9ERUJVRyIpOworCisJCWlmIChkc3RyKQorCQkJYmxraWRfZGVidWdfbWFzayA9IHN0cnRvdWwoZHN0ciwgMCwgMCk7CisJCWJsa2lkX2RlYnVnX21hc2sgfD0gREVCVUdfSU5JVDsKKwl9CisjZW5kaWYKKworCURCRyhERUJVR19DQUNIRSwgcHJpbnRmKCJjcmVhdGluZyBibGtpZCBjYWNoZSAodXNpbmcgJXMpXG4iLAorCQkJCWZpbGVuYW1lID8gZmlsZW5hbWUgOiAiZGVmYXVsdCBjYWNoZSIpKTsKKworCWlmICghKGNhY2hlID0gKGJsa2lkX2NhY2hlKSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBibGtpZF9zdHJ1Y3RfY2FjaGUpKSkpCisJCXJldHVybiAtQkxLSURfRVJSX01FTTsKKworCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+YmljX2RldnMpOworCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+YmljX3RhZ3MpOworCisJaWYgKGZpbGVuYW1lICYmICFzdHJsZW4oZmlsZW5hbWUpKQorCQlmaWxlbmFtZSA9IDA7CisJaWYgKCFmaWxlbmFtZSkKKwkJZmlsZW5hbWUgPSBzYWZlX2dldGVudigiQkxLSURfRklMRSIpOworCWlmICghZmlsZW5hbWUpCisJCWZpbGVuYW1lID0gQkxLSURfQ0FDSEVfRklMRTsKKwljYWNoZS0+YmljX2ZpbGVuYW1lID0gYmxraWRfc3RyZHVwKGZpbGVuYW1lKTsKKworCWJsa2lkX3JlYWRfY2FjaGUoY2FjaGUpOworCisJKnJldF9jYWNoZSA9IGNhY2hlOworCXJldHVybiAwOworfQorCit2b2lkIGJsa2lkX3B1dF9jYWNoZShibGtpZF9jYWNoZSBjYWNoZSkKK3sKKwlpZiAoIWNhY2hlKQorCQlyZXR1cm47CisKKwkodm9pZCkgYmxraWRfZmx1c2hfY2FjaGUoY2FjaGUpOworCisJREJHKERFQlVHX0NBQ0hFLCBwcmludGYoImZyZWVpbmcgY2FjaGUgc3RydWN0XG4iKSk7CisKKwkvKiBEQkcoREVCVUdfQ0FDSEUsIGJsa2lkX2RlYnVnX2R1bXBfY2FjaGUoY2FjaGUpKTsgKi8KKworCXdoaWxlICghbGlzdF9lbXB0eSgmY2FjaGUtPmJpY19kZXZzKSkgeworCQlibGtpZF9kZXYgZGV2ID0gbGlzdF9lbnRyeShjYWNoZS0+YmljX2RldnMubmV4dCwKKwkJCQkJICAgc3RydWN0IGJsa2lkX3N0cnVjdF9kZXYsCisJCQkJCSAgICBiaWRfZGV2cyk7CisJCWJsa2lkX2ZyZWVfZGV2KGRldik7CisJfQorCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZjYWNoZS0+YmljX3RhZ3MpKSB7CisJCWJsa2lkX3RhZyB0YWcgPSBsaXN0X2VudHJ5KGNhY2hlLT5iaWNfdGFncy5uZXh0LAorCQkJCQkgICBzdHJ1Y3QgYmxraWRfc3RydWN0X3RhZywKKwkJCQkJICAgYml0X3RhZ3MpOworCisJCXdoaWxlICghbGlzdF9lbXB0eSgmdGFnLT5iaXRfbmFtZXMpKSB7CisJCQlibGtpZF90YWcgYmFkID0gbGlzdF9lbnRyeSh0YWctPmJpdF9uYW1lcy5uZXh0LAorCQkJCQkJICAgc3RydWN0IGJsa2lkX3N0cnVjdF90YWcsCisJCQkJCQkgICBiaXRfbmFtZXMpOworCisJCQlEQkcoREVCVUdfQ0FDSEUsIHByaW50Zigid2FybmluZzogdW5mcmVlZCB0YWcgJXM9JXNcbiIsCisJCQkJCQliYWQtPmJpdF9uYW1lLCBiYWQtPmJpdF92YWwpKTsKKwkJCWJsa2lkX2ZyZWVfdGFnKGJhZCk7CisJCX0KKwkJYmxraWRfZnJlZV90YWcodGFnKTsKKwl9CisJZnJlZShjYWNoZS0+YmljX2ZpbGVuYW1lKTsKKworCWZyZWUoY2FjaGUpOworfQorCit2b2lkIGJsa2lkX2djX2NhY2hlKGJsa2lkX2NhY2hlIGNhY2hlKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpwbmV4dDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICghY2FjaGUpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBwbmV4dCwgJmNhY2hlLT5iaWNfZGV2cykgeworCQlibGtpZF9kZXYgZGV2ID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYmxraWRfc3RydWN0X2RldiwgYmlkX2RldnMpOworCQlpZiAoc3RhdChkZXYtPmJpZF9uYW1lLCAmc3QpIDwgMCkgeworCQkJREJHKERFQlVHX0NBQ0hFLAorCQkJICAgIHByaW50ZigiZnJlZWluZyAlc1xuIiwgZGV2LT5iaWRfbmFtZSkpOworCQkJYmxraWRfZnJlZV9kZXYoZGV2KTsKKwkJCWNhY2hlLT5iaWNfZmxhZ3MgfD0gQkxLSURfQklDX0ZMX0NIQU5HRUQ7CisJCX0gZWxzZSB7CisJCQlEQkcoREVCVUdfQ0FDSEUsCisJCQkgICAgcHJpbnRmKCJEZXZpY2UgJXMgZXhpc3RzXG4iLCBkZXYtPmJpZF9uYW1lKSk7CisJCX0KKwl9Cit9CisKKworI2lmZGVmIFRFU1RfUFJPR1JBTQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworCWJsa2lkX2NhY2hlIGNhY2hlID0gTlVMTDsKKwlpbnQgcmV0OworCisJYmxraWRfZGVidWdfbWFzayA9IERFQlVHX0FMTDsKKwlpZiAoKGFyZ2MgPiAyKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBbZmlsZW5hbWVdIFxuIiwgYXJndlswXSk7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKChyZXQgPSBibGtpZF9nZXRfY2FjaGUoJmNhY2hlLCBhcmd2WzFdKSkgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZXJyb3IgJWQgcGFyc2luZyBjYWNoZSBmaWxlICVzXG4iLCByZXQsCisJCQlhcmd2WzFdID8gYXJndlsxXSA6IEJMS0lEX0NBQ0hFX0ZJTEUpOworCQlleGl0KDEpOworCX0KKwlpZiAoKHJldCA9IGJsa2lkX2dldF9jYWNoZSgmY2FjaGUsICIvZGV2L251bGwiKSkgIT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciBjcmVhdGluZyBjYWNoZSAoJWQpXG4iLAorCQkJYXJndlswXSwgcmV0KTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKChyZXQgPSBibGtpZF9wcm9iZV9hbGwoY2FjaGUpIDwgMCkpCisJCWZwcmludGYoc3RkZXJyLCAiZXJyb3IgcHJvYmluZyBkZXZpY2VzXG4iKTsKKworCWJsa2lkX3B1dF9jYWNoZShjYWNoZSk7CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvYmxraWQvZGV2LmMgYi9saWIvYmxraWQvZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ4ZWFlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC9kZXYuYwpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIGRldi5jIC0gYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbi9mcmVlIHJvdXRpbmVzIGZvciBkZXYKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgQW5kcmVhcyBEaWxnZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMyBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJibGtpZFAuaCIKKworYmxraWRfZGV2IGJsa2lkX25ld19kZXYodm9pZCkKK3sKKwlibGtpZF9kZXYgZGV2OworCisJaWYgKCEoZGV2ID0gKGJsa2lkX2RldikgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgYmxraWRfc3RydWN0X2RldikpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5iaWRfZGV2cyk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+YmlkX3RhZ3MpOworCisJcmV0dXJuIGRldjsKK30KKwordm9pZCBibGtpZF9mcmVlX2RldihibGtpZF9kZXYgZGV2KQoreworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwlEQkcoREVCVUdfREVWLAorCSAgICBwcmludGYoIiAgZnJlZWluZyBkZXYgJXMgKCVzKVxuIiwgZGV2LT5iaWRfbmFtZSwgZGV2LT5iaWRfdHlwZSA/CisJCSAgIGRldi0+YmlkX3R5cGUgOiAiKG51bGwpIikpOworCURCRyhERUJVR19ERVYsIGJsa2lkX2RlYnVnX2R1bXBfZGV2KGRldikpOworCisJbGlzdF9kZWwoJmRldi0+YmlkX2RldnMpOworCXdoaWxlICghbGlzdF9lbXB0eSgmZGV2LT5iaWRfdGFncykpIHsKKwkJYmxraWRfdGFnIHRhZyA9IGxpc3RfZW50cnkoZGV2LT5iaWRfdGFncy5uZXh0LAorCQkJCQkgICBzdHJ1Y3QgYmxraWRfc3RydWN0X3RhZywKKwkJCQkJICAgYml0X3RhZ3MpOworCQlibGtpZF9mcmVlX3RhZyh0YWcpOworCX0KKwlmcmVlKGRldi0+YmlkX25hbWUpOworCWZyZWUoZGV2KTsKK30KKworLyoKKyAqIEdpdmVuIGEgYmxraWQgZGV2aWNlLCByZXR1cm4gaXRzIG5hbWUKKyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmJsa2lkX2Rldl9kZXZuYW1lKGJsa2lkX2RldiBkZXYpCit7CisJcmV0dXJuIGRldi0+YmlkX25hbWU7Cit9CisKKyNpZmRlZiBDT05GSUdfQkxLSURfREVCVUcKK3ZvaWQgYmxraWRfZGVidWdfZHVtcF9kZXYoYmxraWRfZGV2IGRldikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCisJaWYgKCFkZXYpIHsKKwkJcHJpbnRmKCIgIGRldjogTlVMTFxuIik7CisJCXJldHVybjsKKwl9CisKKwlwcmludGYoIiAgZGV2OiBuYW1lID0gJXNcbiIsIGRldi0+YmlkX25hbWUpOworCXByaW50ZigiICBkZXY6IERFVk5PPVwiMHglMGxseFwiXG4iLCAobG9uZyBsb25nKWRldi0+YmlkX2Rldm5vKTsKKwlwcmludGYoIiAgZGV2OiBUSU1FPVwiJWxkXCJcbiIsIChsb25nKWRldi0+YmlkX3RpbWUpOworCXByaW50ZigiICBkZXY6IFBSST1cIiVkXCJcbiIsIGRldi0+YmlkX3ByaSk7CisJcHJpbnRmKCIgIGRldjogZmxhZ3MgPSAweCUwOFhcbiIsIGRldi0+YmlkX2ZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2gocCwgJmRldi0+YmlkX3RhZ3MpIHsKKwkJYmxraWRfdGFnIHRhZyA9IGxpc3RfZW50cnkocCwgc3RydWN0IGJsa2lkX3N0cnVjdF90YWcsIGJpdF90YWdzKTsKKwkJaWYgKHRhZykKKwkJCXByaW50ZigiICAgIHRhZzogJXM9XCIlc1wiXG4iLCB0YWctPmJpdF9uYW1lLAorCQkJICAgICAgIHRhZy0+Yml0X3ZhbCk7CisJCWVsc2UKKwkJCXByaW50ZigiICAgIHRhZzogTlVMTFxuIik7CisJfQorCXByaW50ZigiXG4iKTsKK30KKyNlbmRpZgorCisvKgorICogZGV2IGl0ZXJhdGlvbiByb3V0aW5lcyBmb3IgdGhlIHB1YmxpYyBsaWJibGtpZCBpbnRlcmZhY2UuCisgKgorICogVGhlc2Ugcm91dGluZXMgZG8gbm90IGV4cG9zZSB0aGUgbGlzdC5oIGltcGxlbWVudGF0aW9uLCB3aGljaCBhcmUgYQorICogY29udGFtaW5hdGlvbiBvZiB0aGUgbmFtZXNwYWNlLCBhbmQgd2hpY2ggZm9yY2UgdXMgdG8gcmV2ZWFsIGZhciwgZmFyCisgKiB0b28gbXVjaCBvZiBvdXIgaW50ZXJuYWwgaW1wbGVtZW5hdGlvbi4gIEknbSBub3QgY29udmluY2VkIEkgd2FudAorICogdG8ga2VlcCBsaXN0LmggaW4gdGhlIGxvbmcgdGVybSwgYW55d2F5LiAgSXQncyBmaW5lIGZvciBrZXJuZWwKKyAqIHByb2dyYW1taW5nLCBidXQgcGVyZm9ybWFuY2UgaXMgbm90IHRoZSAjMSBwcmlvcml0eSBmb3IgdGhpcworICogbGlicmFyeSwgYW5kIEkgcmVhbGx5IGRvbid0IGxpa2UgdGhlIHRyYWRlb2ZmIG9mIHR5cGUtc2FmZXR5IGZvcgorICogcGVyZm9ybWFuY2UgZm9yIHRoaXMgYXBwbGljYXRpb24uICBbdHl0c286MjAwMzAxMjUuMjAwN0VTVF0KKyAqLworCisvKgorICogVGhpcyBzZXJpZXMgb2YgZnVuY3Rpb25zIGl0ZXJhdGUgb3ZlciBhbGwgZGV2aWNlcyBpbiBhIGJsa2lkIGNhY2hlCisgKi8KKyNkZWZpbmUgREVWX0lURVJBVEVfTUFHSUMJMHgwMWE1Mjg0YworCitzdHJ1Y3QgYmxraWRfc3RydWN0X2Rldl9pdGVyYXRlIHsKKwlpbnQJCQltYWdpYzsKKwlibGtpZF9jYWNoZQkJY2FjaGU7CisJY2hhcgkJCSpzZWFyY2hfdHlwZTsKKwljaGFyCQkJKnNlYXJjaF92YWx1ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCSpwOworfTsKKworZXh0ZXJuIGJsa2lkX2Rldl9pdGVyYXRlIGJsa2lkX2Rldl9pdGVyYXRlX2JlZ2luKGJsa2lkX2NhY2hlIGNhY2hlKQoreworCWJsa2lkX2Rldl9pdGVyYXRlCWl0ZXI7CisKKwlpdGVyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmxraWRfc3RydWN0X2Rldl9pdGVyYXRlKSk7CisJaWYgKGl0ZXIpIHsKKwkJaXRlci0+bWFnaWMgPSBERVZfSVRFUkFURV9NQUdJQzsKKwkJaXRlci0+Y2FjaGUgPSBjYWNoZTsKKwkJaXRlci0+cAk9IGNhY2hlLT5iaWNfZGV2cy5uZXh0OworCQlpdGVyLT5zZWFyY2hfdHlwZSA9IDA7CisJCWl0ZXItPnNlYXJjaF92YWx1ZSA9IDA7CisJfQorCXJldHVybiAoaXRlcik7Cit9CisKK2V4dGVybiBpbnQgYmxraWRfZGV2X3NldF9zZWFyY2goYmxraWRfZGV2X2l0ZXJhdGUgaXRlciwKKwkJCQkgY2hhciAqc2VhcmNoX3R5cGUsIGNoYXIgKnNlYXJjaF92YWx1ZSkKK3sKKwljaGFyICpuZXdfdHlwZSwgKm5ld192YWx1ZTsKKworCWlmICghaXRlciB8fCBpdGVyLT5tYWdpYyAhPSBERVZfSVRFUkFURV9NQUdJQyB8fCAhc2VhcmNoX3R5cGUgfHwKKwkgICAgIXNlYXJjaF92YWx1ZSkKKwkJcmV0dXJuIC0xOworCW5ld190eXBlID0gbWFsbG9jKHN0cmxlbihzZWFyY2hfdHlwZSkrMSk7CisJbmV3X3ZhbHVlID0gbWFsbG9jKHN0cmxlbihzZWFyY2hfdmFsdWUpKzEpOworCWlmICghbmV3X3R5cGUgfHwgIW5ld192YWx1ZSkgeworCQlmcmVlKG5ld190eXBlKTsKKwkJZnJlZShuZXdfdmFsdWUpOworCQlyZXR1cm4gLTE7CisJfQorCXN0cmNweShuZXdfdHlwZSwgc2VhcmNoX3R5cGUpOworCXN0cmNweShuZXdfdmFsdWUsIHNlYXJjaF92YWx1ZSk7CisJZnJlZShpdGVyLT5zZWFyY2hfdHlwZSk7CisJZnJlZShpdGVyLT5zZWFyY2hfdmFsdWUpOworCWl0ZXItPnNlYXJjaF90eXBlID0gbmV3X3R5cGU7CisJaXRlci0+c2VhcmNoX3ZhbHVlID0gbmV3X3ZhbHVlOworCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKyAqLworZXh0ZXJuIGludCBibGtpZF9kZXZfbmV4dChibGtpZF9kZXZfaXRlcmF0ZSBpdGVyLAorCQkJICBibGtpZF9kZXYgKnJldF9kZXYpCit7CisJYmxraWRfZGV2CQlkZXY7CisKKwkqcmV0X2RldiA9IDA7CisJaWYgKCFpdGVyIHx8IGl0ZXItPm1hZ2ljICE9IERFVl9JVEVSQVRFX01BR0lDKQorCQlyZXR1cm4gLTE7CisJd2hpbGUgKGl0ZXItPnAgIT0gJml0ZXItPmNhY2hlLT5iaWNfZGV2cykgeworCQlkZXYgPSBsaXN0X2VudHJ5KGl0ZXItPnAsIHN0cnVjdCBibGtpZF9zdHJ1Y3RfZGV2LCBiaWRfZGV2cyk7CisJCWl0ZXItPnAgPSBpdGVyLT5wLT5uZXh0OworCQlpZiAoaXRlci0+c2VhcmNoX3R5cGUgJiYKKwkJICAgICFibGtpZF9kZXZfaGFzX3RhZyhkZXYsIGl0ZXItPnNlYXJjaF90eXBlLAorCQkJCSAgICAgICBpdGVyLT5zZWFyY2hfdmFsdWUpKQorCQkJY29udGludWU7CisJCSpyZXRfZGV2ID0gZGV2OworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCitleHRlcm4gdm9pZCBibGtpZF9kZXZfaXRlcmF0ZV9lbmQoYmxraWRfZGV2X2l0ZXJhdGUgaXRlcikKK3sKKwlpZiAoIWl0ZXIgfHwgaXRlci0+bWFnaWMgIT0gREVWX0lURVJBVEVfTUFHSUMpCisJCXJldHVybjsKKwlpdGVyLT5tYWdpYyA9IDA7CisJZnJlZShpdGVyKTsKK30KKworI2lmZGVmIFRFU1RfUFJPR1JBTQorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gY2hhciAqb3B0YXJnOworZXh0ZXJuIGludCBvcHRpbmQ7CisjZW5kaWYKKwordm9pZCB1c2FnZShjaGFyICpwcm9nKQoreworCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIFstZiBibGtpZF9maWxlXSBbLW0gZGVidWdfbWFza11cbiIsIHByb2cpOworCWZwcmludGYoc3RkZXJyLCAiXHRMaXN0IGFsbCBkZXZpY2VzIGFuZCBleGl0XG4iKTsKKwlleGl0KDEpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJYmxraWRfZGV2X2l0ZXJhdGUJaXRlcjsKKwlibGtpZF9jYWNoZSAJCWNhY2hlID0gTlVMTDsKKwlibGtpZF9kZXYJCWRldjsKKwlpbnQJCQljLCByZXQ7CisJY2hhcgkJCSp0bXA7CisJY2hhcgkJCSpmaWxlID0gTlVMTDsKKwljaGFyCQkJKnNlYXJjaF90eXBlID0gTlVMTDsKKwljaGFyCQkJKnNlYXJjaF92YWx1ZSA9IE5VTEw7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJtOmY6IikpICE9IEVPRikKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2YnOgorCQkJZmlsZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWJsa2lkX2RlYnVnX21hc2sgPSBzdHJ0b3VsIChvcHRhcmcsICZ0bXAsIDApOworCQkJaWYgKCp0bXApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgZGVidWcgbWFzazogJXNcbiIsCisJCQkJCW9wdGFyZyk7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICc/JzoKKwkJCXVzYWdlKGFyZ3ZbMF0pOworCQl9CisJaWYgKGFyZ2MgPj0gb3B0aW5kKzIpIHsKKwkJc2VhcmNoX3R5cGUgPSBhcmd2W29wdGluZF07CisJCXNlYXJjaF92YWx1ZSA9IGFyZ3Zbb3B0aW5kKzFdOworCQlvcHRpbmQgKz0gMjsKKwl9CisJaWYgKGFyZ2MgIT0gb3B0aW5kKQorCQl1c2FnZShhcmd2WzBdKTsKKworCWlmICgocmV0ID0gYmxraWRfZ2V0X2NhY2hlKCZjYWNoZSwgZmlsZSkpICE9IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogZXJyb3IgY3JlYXRpbmcgY2FjaGUgKCVkKVxuIiwKKwkJCWFyZ3ZbMF0sIHJldCk7CisJCWV4aXQoMSk7CisJfQorCisJaXRlciA9IGJsa2lkX2Rldl9pdGVyYXRlX2JlZ2luKGNhY2hlKTsKKwlpZiAoc2VhcmNoX3R5cGUpCisJCWJsa2lkX2Rldl9zZXRfc2VhcmNoKGl0ZXIsIHNlYXJjaF90eXBlLCBzZWFyY2hfdmFsdWUpOworCXdoaWxlIChibGtpZF9kZXZfbmV4dChpdGVyLCAmZGV2KSA9PSAwKSB7CisJCXByaW50ZigiRGV2aWNlOiAlc1xuIiwgYmxraWRfZGV2X2Rldm5hbWUoZGV2KSk7CisJfQorCWJsa2lkX2Rldl9pdGVyYXRlX2VuZChpdGVyKTsKKworCisJYmxraWRfcHV0X2NhY2hlKGNhY2hlKTsKKwlyZXR1cm4gKDApOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvYmxraWQvZGV2bmFtZS5jIGIvbGliL2Jsa2lkL2Rldm5hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTJlZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL2Rldm5hbWUuYwpAQCAtMCwwICsxLDU1NyBAQAorLyoKKyAqIGRldm5hbWUuYyAtIGdldCBhIGRldiBieSBpdHMgZGV2aWNlIGlub2RlIG5hbWUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIEFuZHJpZXMgQnJvdXdlcgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzIFRoZW9kb3JlIFRzJ28KKyAqIENvcHlyaWdodCAoQykgMjAwMSBBbmRyZWFzIERpbGdlcgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2RlZmluZSBfR05VX1NPVVJDRSAxCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19NS0RFVl9ICisjaW5jbHVkZSA8c3lzL21rZGV2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJibGtpZFAuaCIKKworLyoKKyAqIEZpbmQgYSBkZXYgc3RydWN0IGluIHRoZSBjYWNoZSBieSBkZXZpY2UgbmFtZSwgaWYgYXZhaWxhYmxlLgorICoKKyAqIElmIHRoZXJlIGlzIG5vIGVudHJ5IHdpdGggdGhlIHNwZWNpZmllZCBkZXZpY2UgbmFtZSwgYW5kIHRoZSBjcmVhdGUKKyAqIGZsYWcgaXMgc2V0LCB0aGVuIGNyZWF0ZSBhbiBlbXB0eSBkZXZpY2UgZW50cnkuCisgKi8KK2Jsa2lkX2RldiBibGtpZF9nZXRfZGV2KGJsa2lkX2NhY2hlIGNhY2hlLCBjb25zdCBjaGFyICpkZXZuYW1lLCBpbnQgZmxhZ3MpCit7CisJYmxraWRfZGV2IGRldiA9IE5VTEwsIHRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqcG5leHQ7CisKKwlpZiAoIWNhY2hlIHx8ICFkZXZuYW1lKQorCQlyZXR1cm4gTlVMTDsKKworCWxpc3RfZm9yX2VhY2gocCwgJmNhY2hlLT5iaWNfZGV2cykgeworCQl0bXAgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBibGtpZF9zdHJ1Y3RfZGV2LCBiaWRfZGV2cyk7CisJCWlmIChzdHJjbXAodG1wLT5iaWRfbmFtZSwgZGV2bmFtZSkpCisJCQljb250aW51ZTsKKworCQlEQkcoREVCVUdfREVWTkFNRSwKKwkJICAgIHByaW50ZigiZm91bmQgZGV2bmFtZSAlcyBpbiBjYWNoZVxuIiwgdG1wLT5iaWRfbmFtZSkpOworCQlkZXYgPSB0bXA7CisJCWJyZWFrOworCX0KKworCWlmICghZGV2ICYmIChmbGFncyAmIEJMS0lEX0RFVl9DUkVBVEUpKSB7CisJCWlmIChhY2Nlc3MoZGV2bmFtZSwgRl9PSykgPCAwKQorCQkJcmV0dXJuIE5VTEw7CisJCWRldiA9IGJsa2lkX25ld19kZXYoKTsKKwkJaWYgKCFkZXYpCisJCQlyZXR1cm4gTlVMTDsKKwkJZGV2LT5iaWRfdGltZSA9IElOVF9NSU47CisJCWRldi0+YmlkX25hbWUgPSBibGtpZF9zdHJkdXAoZGV2bmFtZSk7CisJCWRldi0+YmlkX2NhY2hlID0gY2FjaGU7CisJCWxpc3RfYWRkX3RhaWwoJmRldi0+YmlkX2RldnMsICZjYWNoZS0+YmljX2RldnMpOworCQljYWNoZS0+YmljX2ZsYWdzIHw9IEJMS0lEX0JJQ19GTF9DSEFOR0VEOworCX0KKworCWlmIChmbGFncyAmIEJMS0lEX0RFVl9WRVJJRlkpIHsKKwkJZGV2ID0gYmxraWRfdmVyaWZ5KGNhY2hlLCBkZXYpOworCQlpZiAoIWRldiB8fCAhKGRldi0+YmlkX2ZsYWdzICYgQkxLSURfQklEX0ZMX1ZFUklGSUVEKSkKKwkJCXJldHVybiBkZXY7CisJCS8qCisJCSAqIElmIHRoZSBkZXZpY2UgaXMgdmVyaWZpZWQsIHRoZW4gc2VhcmNoIHRoZSBibGtpZAorCQkgKiBjYWNoZSBmb3IgYW55IGVudHJpZXMgdGhhdCBtYXRjaCBvbiB0aGUgdHlwZSwgdXVpZCwKKwkJICogYW5kIGxhYmVsLCBhbmQgdmVyaWZ5IHRoZW07IGlmIGEgY2FjaGUgZW50cnkgY2FuCisJCSAqIG5vdCBiZSB2ZXJpZmllZCwgdGhlbiBpdCdzIHN0YWxlIGFuZCBzbyB3ZSByZW1vdmUKKwkJICogaXQuCisJCSAqLworCQlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgcG5leHQsICZjYWNoZS0+YmljX2RldnMpIHsKKwkJCWJsa2lkX2RldiBkZXYyOworCQkJZGV2MiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGJsa2lkX3N0cnVjdF9kZXYsIGJpZF9kZXZzKTsKKwkJCWlmIChkZXYyLT5iaWRfZmxhZ3MgJiBCTEtJRF9CSURfRkxfVkVSSUZJRUQpCisJCQkJY29udGludWU7CisJCQlpZiAoIWRldi0+YmlkX3R5cGUgfHwgIWRldjItPmJpZF90eXBlIHx8CisJCQkgICAgc3RyY21wKGRldi0+YmlkX3R5cGUsIGRldjItPmJpZF90eXBlKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChkZXYtPmJpZF9sYWJlbCAmJiBkZXYyLT5iaWRfbGFiZWwgJiYKKwkJCSAgICBzdHJjbXAoZGV2LT5iaWRfbGFiZWwsIGRldjItPmJpZF9sYWJlbCkpCisJCQkJY29udGludWU7CisJCQlpZiAoZGV2LT5iaWRfdXVpZCAmJiBkZXYyLT5iaWRfdXVpZCAmJgorCQkJICAgIHN0cmNtcChkZXYtPmJpZF91dWlkLCBkZXYyLT5iaWRfdXVpZCkpCisJCQkJY29udGludWU7CisJCQlpZiAoKGRldi0+YmlkX2xhYmVsICYmICFkZXYyLT5iaWRfbGFiZWwpIHx8CisJCQkgICAgKCFkZXYtPmJpZF9sYWJlbCAmJiBkZXYyLT5iaWRfbGFiZWwpIHx8CisJCQkgICAgKGRldi0+YmlkX3V1aWQgJiYgIWRldjItPmJpZF91dWlkKSB8fAorCQkJICAgICghZGV2LT5iaWRfdXVpZCAmJiBkZXYyLT5iaWRfdXVpZCkpCisJCQkJY29udGludWU7CisJCQlkZXYyID0gYmxraWRfdmVyaWZ5KGNhY2hlLCBkZXYyKTsKKwkJCWlmIChkZXYyICYmICEoZGV2Mi0+YmlkX2ZsYWdzICYgQkxLSURfQklEX0ZMX1ZFUklGSUVEKSkKKwkJCQlibGtpZF9mcmVlX2RldihkZXYyKTsKKwkJfQorCX0KKwlyZXR1cm4gZGV2OworfQorCisvKiBEaXJlY3RvcmllcyB3aGVyZSB3ZSB3aWxsIHRyeSB0byBzZWFyY2ggZm9yIGRldmljZSBuYW1lcyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmRpcmxpc3RbXSA9IHsgIi9kZXYiLCAiL2RldmZzIiwgIi9kZXZpY2VzIiwgTlVMTCB9OworCitzdGF0aWMgaW50IGlzX2RtX2xlYWYoY29uc3QgY2hhciAqZGV2bmFtZSkKK3sKKwlzdHJ1Y3QgZGlyZW50CSpkZSwgKmRfZGU7CisJRElSCQkqZGlyLCAqZF9kaXI7CisJY2hhcgkJcGF0aFsyNTZdOworCWludAkJcmV0ID0gMTsKKworCWlmICgoZGlyID0gb3BlbmRpcigiL3N5cy9ibG9jayIpKSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCWlmICghc3RyY21wKGRlLT5kX25hbWUsICIuIikgfHwgIXN0cmNtcChkZS0+ZF9uYW1lLCAiLi4iKSB8fAorCQkgICAgIXN0cmNtcChkZS0+ZF9uYW1lLCBkZXZuYW1lKSB8fAorCQkgICAgc3RybmNtcChkZS0+ZF9uYW1lLCAiZG0tIiwgMykgfHwKKwkJICAgIHN0cmxlbihkZS0+ZF9uYW1lKSA+IHNpemVvZihwYXRoKS0zMikKKwkJCWNvbnRpbnVlOworCQlzcHJpbnRmKHBhdGgsICIvc3lzL2Jsb2NrLyVzL3NsYXZlcyIsIGRlLT5kX25hbWUpOworCQlpZiAoKGRfZGlyID0gb3BlbmRpcihwYXRoKSkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQl3aGlsZSAoKGRfZGUgPSByZWFkZGlyKGRfZGlyKSkgIT0gTlVMTCkgeworCQkJaWYgKCFzdHJjbXAoZF9kZS0+ZF9uYW1lLCBkZXZuYW1lKSkgeworCQkJCXJldCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJY2xvc2VkaXIoZF9kaXIpOworCQlpZiAoIXJldCkKKwkJCWJyZWFrOworCX0KKwljbG9zZWRpcihkaXIpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTaW5jZSAyLjYuMjkgKHBhdGNoIDc4NGFhZTczNWQ5YjBiYmEzZjhiOWZhZWY0YzhiMzBkZjNiZjAxMjgpIGtlcm5lbCBzeXNmcworICogcHJvdmlkZXMgdGhlIHJlYWwgRE0gZGV2aWNlIG5hbWVzIGluIC9zeXMvYmxvY2svPHB0bmFtZT4vZG0vbmFtZQorICovCitzdGF0aWMgY2hhciAqZ2V0X2RtX25hbWUoY29uc3QgY2hhciAqcHRuYW1lKQoreworCUZJTEUJKmY7CisJc2l6ZV90CXN6OworCWNoYXIJcGF0aFsyNTZdLCBuYW1lWzI1Nl0sICpyZXMgPSBOVUxMOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiL3N5cy9ibG9jay8lcy9kbS9uYW1lIiwgcHRuYW1lKTsKKwlpZiAoKGYgPSBmb3BlbihwYXRoLCAiciIpKSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHJlYWQgIjxuYW1lPlxuIiBmcm9tIHN5c2ZzICovCisJaWYgKGZnZXRzKG5hbWUsIHNpemVvZihuYW1lKSwgZikgJiYgKHN6ID0gc3RybGVuKG5hbWUpKSA+IDEpIHsKKwkJbmFtZVtzeiAtIDFdID0gJ1wwJzsKKwkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiL2Rldi9tYXBwZXIvJXMiLCBuYW1lKTsKKwkJcmVzID0gYmxraWRfc3RyZHVwKHBhdGgpOworCX0KKwlmY2xvc2UoZik7CisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIFByb2JlIGEgc2luZ2xlIGJsb2NrIGRldmljZSB0byBhZGQgdG8gdGhlIGRldmljZSBjYWNoZS4KKyAqLworc3RhdGljIHZvaWQgcHJvYmVfb25lKGJsa2lkX2NhY2hlIGNhY2hlLCBjb25zdCBjaGFyICpwdG5hbWUsCisJCSAgICAgIGRldl90IGRldm5vLCBpbnQgcHJpLCBpbnQgb25seV9pZl9uZXcpCit7CisJYmxraWRfZGV2IGRldiA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqcCwgKnBuZXh0OworCWNvbnN0IGNoYXIgKipkaXI7CisJY2hhciAqZGV2bmFtZSA9IE5VTEw7CisKKwkvKiBTZWUgaWYgd2UgYWxyZWFkeSBoYXZlIHRoaXMgZGV2aWNlIG51bWJlciBpbiB0aGUgY2FjaGUuICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIHBuZXh0LCAmY2FjaGUtPmJpY19kZXZzKSB7CisJCWJsa2lkX2RldiB0bXAgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBibGtpZF9zdHJ1Y3RfZGV2LAorCQkJCQkgICBiaWRfZGV2cyk7CisJCWlmICh0bXAtPmJpZF9kZXZubyA9PSBkZXZubykgeworCQkJaWYgKG9ubHlfaWZfbmV3ICYmICFhY2Nlc3ModG1wLT5iaWRfbmFtZSwgRl9PSykpCisJCQkJcmV0dXJuOworCQkJZGV2ID0gYmxraWRfdmVyaWZ5KGNhY2hlLCB0bXApOworCQkJaWYgKGRldiAmJiAoZGV2LT5iaWRfZmxhZ3MgJiBCTEtJRF9CSURfRkxfVkVSSUZJRUQpKQorCQkJCWJyZWFrOworCQkJZGV2ID0gMDsKKwkJfQorCX0KKwlpZiAoZGV2ICYmIGRldi0+YmlkX2Rldm5vID09IGRldm5vKQorCQlnb3RvIHNldF9wcmk7CisKKwkvKiBUcnkgdG8gdHJhbnNsYXRlIHByaXZhdGUgZGV2aWNlLW1hcHBlciBkbS08Tj4gbmFtZXMKKwkgKiB0byBzdGFuZGFyZCAvZGV2L21hcHBlci88bmFtZT4uCisJICovCisJaWYgKCFzdHJuY21wKHB0bmFtZSwgImRtLSIsIDMpICYmIGlzZGlnaXQocHRuYW1lWzNdKSkgeworCQlkZXZuYW1lID0gZ2V0X2RtX25hbWUocHRuYW1lKTsKKwkJaWYgKCFkZXZuYW1lKQorCQkJYmxraWRfX3NjYW5fZGlyKCIvZGV2L21hcHBlciIsIGRldm5vLCAwLCAmZGV2bmFtZSk7CisJCWlmIChkZXZuYW1lKQorCQkJZ290byBnZXRfZGV2OworCX0KKworCS8qCisJICogVGFrZSBhIHF1aWNrIGxvb2sgYXQgL2Rldi9wdG5hbWUgZm9yIHRoZSBkZXZpY2UgbnVtYmVyLiAgV2UgY2hlY2sKKwkgKiBhbGwgb2YgdGhlIGxpa2VseSBkZXZpY2UgZGlyZWN0b3JpZXMuICBJZiB3ZSBkb24ndCBmaW5kIGl0LCBvciBpZgorCSAqIHRoZSBzdGF0IGluZm9ybWF0aW9uIGRvZXNuJ3QgY2hlY2sgb3V0LCB1c2UgYmxraWRfZGV2bm9fdG9fZGV2bmFtZSgpCisJICogdG8gZmluZCBpdCB2aWEgYW4gZXhoYXVzdGl2ZSBzZWFyY2ggZm9yIHRoZSBkZXZpY2UgbWFqb3IvbWlub3IuCisJICovCisJZm9yIChkaXIgPSBkaXJsaXN0OyAqZGlyOyBkaXIrKykgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJY2hhciBkZXZpY2VbMjU2XTsKKworCQlzcHJpbnRmKGRldmljZSwgIiVzLyVzIiwgKmRpciwgcHRuYW1lKTsKKwkJaWYgKChkZXYgPSBibGtpZF9nZXRfZGV2KGNhY2hlLCBkZXZpY2UsIEJMS0lEX0RFVl9GSU5EKSkgJiYKKwkJICAgIGRldi0+YmlkX2Rldm5vID09IGRldm5vKQorCQkJZ290byBzZXRfcHJpOworCisJCWlmIChzdGF0KGRldmljZSwgJnN0KSA9PSAwICYmIFNfSVNCTEsoc3Quc3RfbW9kZSkgJiYKKwkJICAgIHN0LnN0X3JkZXYgPT0gZGV2bm8pIHsKKwkJCWRldm5hbWUgPSBibGtpZF9zdHJkdXAoZGV2aWNlKTsKKwkJCWdvdG8gZ2V0X2RldjsKKwkJfQorCX0KKwkvKiBEbyBhIHNob3J0LWN1dCBzY2FuIG9mIC9kZXYvbWFwcGVyIGZpcnN0ICovCisJaWYgKCFkZXZuYW1lKQorCQlkZXZuYW1lID0gZ2V0X2RtX25hbWUocHRuYW1lKTsKKwlpZiAoIWRldm5hbWUpCisJCWJsa2lkX19zY2FuX2RpcigiL2Rldi9tYXBwZXIiLCBkZXZubywgMCwgJmRldm5hbWUpOworCWlmICghZGV2bmFtZSkgeworCQlkZXZuYW1lID0gYmxraWRfZGV2bm9fdG9fZGV2bmFtZShkZXZubyk7CisJCWlmICghZGV2bmFtZSkKKwkJCXJldHVybjsKKwl9CitnZXRfZGV2OgorCWRldiA9IGJsa2lkX2dldF9kZXYoY2FjaGUsIGRldm5hbWUsIEJMS0lEX0RFVl9OT1JNQUwpOworCWZyZWUoZGV2bmFtZSk7CitzZXRfcHJpOgorCWlmIChkZXYpIHsKKwkJaWYgKHByaSkKKwkJCWRldi0+YmlkX3ByaSA9IHByaTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAoZGV2LT5iaWRfbmFtZSwgIi9kZXYvbWFwcGVyLyIsIDExKSkgeworCQkJZGV2LT5iaWRfcHJpID0gQkxLSURfUFJJX0RNOworCQkJaWYgKGlzX2RtX2xlYWYocHRuYW1lKSkKKwkJCQlkZXYtPmJpZF9wcmkgKz0gNTsKKwkJfSBlbHNlIGlmICghc3RybmNtcChwdG5hbWUsICJtZCIsIDIpKQorCQkJZGV2LT5iaWRfcHJpID0gQkxLSURfUFJJX01EOworIAl9CisJcmV0dXJuOworfQorCisjZGVmaW5lIFBST0NfUEFSVElUSU9OUyAiL3Byb2MvcGFydGl0aW9ucyIKKyNkZWZpbmUgVkdfRElSCQkiL3Byb2MvbHZtL1ZHcyIKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIFVVSUQgY2FjaGUgd2l0aCBkZXZpY2VzIGZyb20gdGhlIExWTQorICogcHJvYyBoaWVyYXJjaHkuICBXZSBjdXJyZW50bHkgZGVwZW5kIG9uIHRoZSBuYW1lcyBvZiB0aGUgTFZNCisgKiBoaWVyYXJjaHkgZ2l2aW5nIHVzIHRoZSBkZXZpY2Ugc3RydWN0dXJlIGluIC9kZXYuICAoWFhYIGlzIHRoaXMgYQorICogc2FmZSB0aGluZyB0byBkbz8pCisgKi8KKyNpZmRlZiBWR19ESVIKK3N0YXRpYyBkZXZfdCBsdm1fZ2V0X2Rldm5vKGNvbnN0IGNoYXIgKmx2bV9kZXZpY2UpCit7CisJRklMRSAqbHZmOworCWNoYXIgYnVmWzEwMjRdOworCWludCBtYSwgbWk7CisJZGV2X3QgcmV0ID0gMDsKKworCURCRyhERUJVR19ERVZOQU1FLCBwcmludGYoIm9wZW5pbmcgJXNcbiIsIGx2bV9kZXZpY2UpKTsKKwlpZiAoKGx2ZiA9IGZvcGVuKGx2bV9kZXZpY2UsICJyIikpID09IE5VTEwpIHsKKwkJREJHKERFQlVHX0RFVk5BTUUsIHByaW50ZigiJXM6ICglZCkgJXNcbiIsIGx2bV9kZXZpY2UsIGVycm5vLAorCQkJCQkgIHN0cmVycm9yKGVycm5vKSkpOworCQlyZXR1cm4gMDsKKwl9CisKKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgbHZmKSkgeworCQlpZiAoc3NjYW5mKGJ1ZiwgImRldmljZTogJWQ6JWQiLCAmbWEsICZtaSkgPT0gMikgeworCQkJcmV0ID0gbWFrZWRldihtYSwgbWkpOworCQkJYnJlYWs7CisJCX0KKwl9CisJZmNsb3NlKGx2Zik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBsdm1fcHJvYmVfYWxsKGJsa2lkX2NhY2hlIGNhY2hlLCBpbnQgb25seV9pZl9uZXcpCit7CisJRElSCQkqdmdfbGlzdDsKKwlzdHJ1Y3QgZGlyZW50CSp2Z19pdGVyOworCWludAkJdmdfbGVuID0gc3RybGVuKFZHX0RJUik7CisJZGV2X3QJCWRldjsKKworCWlmICgodmdfbGlzdCA9IG9wZW5kaXIoVkdfRElSKSkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJREJHKERFQlVHX0RFVk5BTUUsIHByaW50ZigicHJvYmluZyBMVk0gZGV2aWNlcyB1bmRlciAlc1xuIiwgVkdfRElSKSk7CisKKwl3aGlsZSAoKHZnX2l0ZXIgPSByZWFkZGlyKHZnX2xpc3QpKSAhPSBOVUxMKSB7CisJCURJUgkJKmx2X2xpc3Q7CisJCWNoYXIJCSp2ZGlybmFtZTsKKwkJY2hhcgkJKnZnX25hbWU7CisJCXN0cnVjdCBkaXJlbnQJKmx2X2l0ZXI7CisKKwkJdmdfbmFtZSA9IHZnX2l0ZXItPmRfbmFtZTsKKwkJaWYgKCFzdHJjbXAodmdfbmFtZSwgIi4iKSB8fCAhc3RyY21wKHZnX25hbWUsICIuLiIpKQorCQkJY29udGludWU7CisJCXZkaXJuYW1lID0gbWFsbG9jKHZnX2xlbiArIHN0cmxlbih2Z19uYW1lKSArIDgpOworCQlpZiAoIXZkaXJuYW1lKQorCQkJZ290byBleGl0OworCQlzcHJpbnRmKHZkaXJuYW1lLCAiJXMvJXMvTFZzIiwgVkdfRElSLCB2Z19uYW1lKTsKKworCQlsdl9saXN0ID0gb3BlbmRpcih2ZGlybmFtZSk7CisJCWZyZWUodmRpcm5hbWUpOworCQlpZiAobHZfbGlzdCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJd2hpbGUgKChsdl9pdGVyID0gcmVhZGRpcihsdl9saXN0KSkgIT0gTlVMTCkgeworCQkJY2hhcgkJKmx2X25hbWUsICpsdm1fZGV2aWNlOworCisJCQlsdl9uYW1lID0gbHZfaXRlci0+ZF9uYW1lOworCQkJaWYgKCFzdHJjbXAobHZfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGx2X25hbWUsICIuLiIpKQorCQkJCWNvbnRpbnVlOworCisJCQlsdm1fZGV2aWNlID0gbWFsbG9jKHZnX2xlbiArIHN0cmxlbih2Z19uYW1lKSArCisJCQkJCSAgICBzdHJsZW4obHZfbmFtZSkgKyA4KTsKKwkJCWlmICghbHZtX2RldmljZSkgeworCQkJCWNsb3NlZGlyKGx2X2xpc3QpOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJCXNwcmludGYobHZtX2RldmljZSwgIiVzLyVzL0xWcy8lcyIsIFZHX0RJUiwgdmdfbmFtZSwKKwkJCQlsdl9uYW1lKTsKKwkJCWRldiA9IGx2bV9nZXRfZGV2bm8obHZtX2RldmljZSk7CisJCQlzcHJpbnRmKGx2bV9kZXZpY2UsICIlcy8lcyIsIHZnX25hbWUsIGx2X25hbWUpOworCQkJREJHKERFQlVHX0RFVk5BTUUsIHByaW50ZigiTFZNIGRldiAlczogZGV2bm8gMHglMDRYXG4iLAorCQkJCQkJICBsdm1fZGV2aWNlLAorCQkJCQkJICAodW5zaWduZWQgaW50KSBkZXYpKTsKKwkJCXByb2JlX29uZShjYWNoZSwgbHZtX2RldmljZSwgZGV2LCBCTEtJRF9QUklfTFZNLAorCQkJCSAgb25seV9pZl9uZXcpOworCQkJZnJlZShsdm1fZGV2aWNlKTsKKwkJfQorCQljbG9zZWRpcihsdl9saXN0KTsKKwl9CitleGl0OgorCWNsb3NlZGlyKHZnX2xpc3QpOworfQorI2VuZGlmCisKKyNkZWZpbmUgUFJPQ19FVk1TX1ZPTFVNRVMgIi9wcm9jL2V2bXMvdm9sdW1lcyIKKworc3RhdGljIGludAorZXZtc19wcm9iZV9hbGwoYmxraWRfY2FjaGUgY2FjaGUsIGludCBvbmx5X2lmX25ldykKK3sKKwljaGFyIGxpbmVbMTAwXTsKKwlpbnQgbWEsIG1pLCBzeiwgbnVtID0gMDsKKwlGSUxFICpwcm9jcHQ7CisJY2hhciBkZXZpY2VbMTEwXTsKKworCXByb2NwdCA9IGZvcGVuKFBST0NfRVZNU19WT0xVTUVTLCAiciIpOworCWlmICghcHJvY3B0KQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBwcm9jcHQpKSB7CisJCWlmIChzc2NhbmYgKGxpbmUsICIgJWQgJWQgJWQgJSpzICUqcyAlW15cbiBdIiwKKwkJCSAgICAmbWEsICZtaSwgJnN6LCBkZXZpY2UpICE9IDQpCisJCQljb250aW51ZTsKKworCQlEQkcoREVCVUdfREVWTkFNRSwgcHJpbnRmKCJDaGVja2luZyBwYXJ0aXRpb24gJXMgKCVkLCAlZClcbiIsCisJCQkJCSAgZGV2aWNlLCBtYSwgbWkpKTsKKworCQlwcm9iZV9vbmUoY2FjaGUsIGRldmljZSwgbWFrZWRldihtYSwgbWkpLCBCTEtJRF9QUklfRVZNUywKKwkJCSAgb25seV9pZl9uZXcpOworCQludW0rKzsKKwl9CisJZmNsb3NlKHByb2NwdCk7CisJcmV0dXJuIG51bTsKK30KKworLyoKKyAqIFJlYWQgdGhlIGRldmljZSBkYXRhIGZvciBhbGwgYXZhaWxhYmxlIGJsb2NrIGRldmljZXMgaW4gdGhlIHN5c3RlbS4KKyAqLworc3RhdGljIGludCBwcm9iZV9hbGwoYmxraWRfY2FjaGUgY2FjaGUsIGludCBvbmx5X2lmX25ldykKK3sKKwlGSUxFICpwcm9jOworCWNoYXIgbGluZVsxMDI0XTsKKwljaGFyIHB0bmFtZTBbMTI4XSwgcHRuYW1lMVsxMjhdLCAqcHRuYW1lID0gMDsKKwljaGFyICpwdG5hbWVzWzJdOworCWRldl90IGRldnNbMl07CisJaW50IG1hLCBtaTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3o7CisJaW50IGxlbnNbMl0gPSB7IDAsIDAgfTsKKwlpbnQgd2hpY2ggPSAwLCBsYXN0ID0gMDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqcG5leHQ7CisKKwlwdG5hbWVzWzBdID0gcHRuYW1lMDsKKwlwdG5hbWVzWzFdID0gcHRuYW1lMTsKKworCWlmICghY2FjaGUpCisJCXJldHVybiAtQkxLSURfRVJSX1BBUkFNOworCisJaWYgKGNhY2hlLT5iaWNfZmxhZ3MgJiBCTEtJRF9CSUNfRkxfUFJPQkVEICYmCisJICAgIHRpbWUoMCkgLSBjYWNoZS0+YmljX3RpbWUgPCBCTEtJRF9QUk9CRV9JTlRFUlZBTCkKKwkJcmV0dXJuIDA7CisKKwlibGtpZF9yZWFkX2NhY2hlKGNhY2hlKTsKKwlldm1zX3Byb2JlX2FsbChjYWNoZSwgb25seV9pZl9uZXcpOworI2lmZGVmIFZHX0RJUgorCWx2bV9wcm9iZV9hbGwoY2FjaGUsIG9ubHlfaWZfbmV3KTsKKyNlbmRpZgorCisJcHJvYyA9IGZvcGVuKFBST0NfUEFSVElUSU9OUywgInIiKTsKKwlpZiAoIXByb2MpCisJCXJldHVybiAtQkxLSURfRVJSX1BST0M7CisKKwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBwcm9jKSkgeworCQlsYXN0ID0gd2hpY2g7CisJCXdoaWNoIF49IDE7CisJCXB0bmFtZSA9IHB0bmFtZXNbd2hpY2hdOworCisJCWlmIChzc2NhbmYobGluZSwgIiAlZCAlZCAlbGx1ICUxMjhbXlxuIF0iLAorCQkJICAgJm1hLCAmbWksICZzeiwgcHRuYW1lKSAhPSA0KQorCQkJY29udGludWU7CisJCWRldnNbd2hpY2hdID0gbWFrZWRldihtYSwgbWkpOworCisJCURCRyhERUJVR19ERVZOQU1FLCBwcmludGYoInJlYWQgcGFydGl0aW9uIG5hbWUgJXNcbiIsIHB0bmFtZSkpOworCisJCS8qIFNraXAgd2hvbGUgZGlzayBkZXZzIHVubGVzcyB0aGV5IGhhdmUgbm8gcGFydGl0aW9ucy4KKwkJICogSWYgYmFzZSBuYW1lIG9mIGRldmljZSBoYXMgY2hhbmdlZCwgYWxzbworCQkgKiBjaGVjayBwcmV2aW91cyBkZXYgdG8gc2VlIGlmIGl0IGRpZG4ndCBoYXZlIGEgcGFydG4uCisJCSAqIGhldXJpc3RpYzogcGFydGl0aW9uIG5hbWUgZW5kcyBpbiBhIGRpZ2l0LCAmIHBhcnRpdGlvbgorCQkgKiBuYW1lcyBjb250YWluIHdob2xlIGRldmljZSBuYW1lIGFzIHN1YnN0cmluZy4KKwkJICoKKwkJICogU2tpcCBleHRlbmRlZCBwYXJ0aXRpb25zLgorCQkgKiBoZXVyaXN0aWM6IHNpemUgaXMgMQorCQkgKgorCQkgKiBGSVhNRTogc2tpcCAvZGV2L3tpZGEsY2Npc3MscmR9IHdob2xlLWRpc2sgZGV2cworCQkgKi8KKworCQlsZW5zW3doaWNoXSA9IHN0cmxlbihwdG5hbWUpOworCisJCS8qIGVuZHMgaW4gYSBkaWdpdCwgY2xlYXJseSBhIHBhcnRpdGlvbiwgc28gY2hlY2sgKi8KKwkJaWYgKGlzZGlnaXQocHRuYW1lW2xlbnNbd2hpY2hdIC0gMV0pKSB7CisJCQlEQkcoREVCVUdfREVWTkFNRSwKKwkJCSAgICBwcmludGYoInBhcnRpdGlvbiBkZXYgJXMsIGRldm5vIDB4JTA0WFxuIiwKKwkJCQkgICBwdG5hbWUsICh1bnNpZ25lZCBpbnQpIGRldnNbd2hpY2hdKSk7CisKKwkJCWlmIChzeiA+IDEpCisJCQkJcHJvYmVfb25lKGNhY2hlLCBwdG5hbWUsIGRldnNbd2hpY2hdLCAwLAorCQkJCQkgIG9ubHlfaWZfbmV3KTsKKwkJCWxlbnNbd2hpY2hdID0gMDsJLyogbWFyayBhcyBjaGVja2VkICovCisJCX0KKworCQkvKgorCQkgKiBJZiBsYXN0IHdhcyBhIHdob2xlIGRpc2sgYW5kIHdlIGp1c3QgZm91bmQgYSBwYXJ0aXRpb24KKwkJICogb24gaXQsIHJlbW92ZSB0aGUgd2hvbGUtZGlzayBkZXYgZnJvbSB0aGUgY2FjaGUgaWYKKwkJICogaXQgZXhpc3RzLgorCQkgKi8KKwkJaWYgKGxlbnNbbGFzdF0gJiYgIXN0cm5jbXAocHRuYW1lc1tsYXN0XSwgcHRuYW1lLCBsZW5zW2xhc3RdKSkgeworCQkJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIHBuZXh0LCAmY2FjaGUtPmJpY19kZXZzKSB7CisJCQkJYmxraWRfZGV2IHRtcDsKKworCQkJCS8qIGZpbmQgYmxraWQgZGV2IGZvciB0aGUgd2hvbGUtZGlzayBkZXZubyAqLworCQkJCXRtcCA9IGxpc3RfZW50cnkocCwgc3RydWN0IGJsa2lkX3N0cnVjdF9kZXYsCisJCQkJCQkgYmlkX2RldnMpOworCQkJCWlmICh0bXAtPmJpZF9kZXZubyA9PSBkZXZzW2xhc3RdKSB7CisJCQkJCURCRyhERUJVR19ERVZOQU1FLAorCQkJCQkJcHJpbnRmKCJmcmVlaW5nICVzXG4iLAorCQkJCQkJICAgICAgIHRtcC0+YmlkX25hbWUpKTsKKwkJCQkJYmxraWRfZnJlZV9kZXYodG1wKTsKKwkJCQkJY2FjaGUtPmJpY19mbGFncyB8PSBCTEtJRF9CSUNfRkxfQ0hBTkdFRDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJbGVuc1tsYXN0XSA9IDA7CisJCX0KKwkJLyoKKwkJICogSWYgbGFzdCB3YXMgbm90IGNoZWNrZWQgYmVjYXVzZSBpdCBsb29rZWQgbGlrZSBhIHdob2xlLWRpc2sKKwkJICogZGV2LCBhbmQgdGhlIGRldmljZSdzIGJhc2UgbmFtZSBoYXMgY2hhbmdlZCwKKwkJICogY2hlY2sgbGFzdCBhcyB3ZWxsLgorCQkgKi8KKwkJaWYgKGxlbnNbbGFzdF0gJiYgc3RybmNtcChwdG5hbWVzW2xhc3RdLCBwdG5hbWUsIGxlbnNbbGFzdF0pKSB7CisJCQlEQkcoREVCVUdfREVWTkFNRSwKKwkJCSAgICBwcmludGYoIndob2xlIGRldiAlcywgZGV2bm8gMHglMDRYXG4iLAorCQkJCSAgIHB0bmFtZXNbbGFzdF0sICh1bnNpZ25lZCBpbnQpIGRldnNbbGFzdF0pKTsKKwkJCXByb2JlX29uZShjYWNoZSwgcHRuYW1lc1tsYXN0XSwgZGV2c1tsYXN0XSwgMCwKKwkJCQkgIG9ubHlfaWZfbmV3KTsKKwkJCWxlbnNbbGFzdF0gPSAwOworCQl9CisJfQorCisJLyogSGFuZGxlIHRoZSBsYXN0IGRldmljZSBpZiBpdCB3YXNuJ3QgcGFydGl0aW9uZWQgKi8KKwlpZiAobGVuc1t3aGljaF0pCisJCXByb2JlX29uZShjYWNoZSwgcHRuYW1lLCBkZXZzW3doaWNoXSwgMCwgb25seV9pZl9uZXcpOworCisJZmNsb3NlKHByb2MpOworCWJsa2lkX2ZsdXNoX2NhY2hlKGNhY2hlKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGJsa2lkX3Byb2JlX2FsbChibGtpZF9jYWNoZSBjYWNoZSkKK3sKKwlpbnQgcmV0OworCisJREJHKERFQlVHX1BST0JFLCBwcmludGYoIkJlZ2luIGJsa2lkX3Byb2JlX2FsbCgpXG4iKSk7CisJcmV0ID0gcHJvYmVfYWxsKGNhY2hlLCAwKTsKKwljYWNoZS0+YmljX3RpbWUgPSB0aW1lKDApOworCWNhY2hlLT5iaWNfZmxhZ3MgfD0gQkxLSURfQklDX0ZMX1BST0JFRDsKKwlEQkcoREVCVUdfUFJPQkUsIHByaW50ZigiRW5kIGJsa2lkX3Byb2JlX2FsbCgpXG4iKSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGJsa2lkX3Byb2JlX2FsbF9uZXcoYmxraWRfY2FjaGUgY2FjaGUpCit7CisJaW50IHJldDsKKworCURCRyhERUJVR19QUk9CRSwgcHJpbnRmKCJCZWdpbiBibGtpZF9wcm9iZV9hbGxfbmV3KClcbiIpKTsKKwlyZXQgPSBwcm9iZV9hbGwoY2FjaGUsIDEpOworCURCRyhERUJVR19QUk9CRSwgcHJpbnRmKCJFbmQgYmxraWRfcHJvYmVfYWxsX25ldygpXG4iKSk7CisJcmV0dXJuIHJldDsKK30KKworCisjaWZkZWYgVEVTVF9QUk9HUkFNCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJYmxraWRfY2FjaGUgY2FjaGUgPSBOVUxMOworCWludCByZXQ7CisKKwlibGtpZF9kZWJ1Z19tYXNrID0gREVCVUdfQUxMOworCWlmIChhcmdjICE9IDEpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXNcbiIKKwkJCSJQcm9iZSBhbGwgZGV2aWNlcyBhbmQgZXhpdFxuIiwgYXJndlswXSk7CisJCWV4aXQoMSk7CisJfQorCWlmICgocmV0ID0gYmxraWRfZ2V0X2NhY2hlKCZjYWNoZSwgIi9kZXYvbnVsbCIpKSAhPSAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIGNyZWF0aW5nIGNhY2hlICglZClcbiIsCisJCQlhcmd2WzBdLCByZXQpOworCQlleGl0KDEpOworCX0KKwlpZiAoYmxraWRfcHJvYmVfYWxsKGNhY2hlKSA8IDApCisJCXByaW50ZigiJXM6IGVycm9yIHByb2JpbmcgZGV2aWNlc1xuIiwgYXJndlswXSk7CisKKwlibGtpZF9wdXRfY2FjaGUoY2FjaGUpOworCXJldHVybiAoMCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC9kZXZuby5jIGIvbGliL2Jsa2lkL2Rldm5vLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc5ZDk3NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC9kZXZuby5jCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogZGV2bm8uYyAtIGZpbmQgYSBwYXJ0aWN1bGFyIGRldmljZSBieSBpdHMgZGV2aWNlIG51bWJlciAobWFqb3IvbWlub3IpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAzIFRoZW9kb3JlIFRzJ28KKyAqIENvcHlyaWdodCAoQykgMjAwMSBBbmRyZWFzIERpbGdlcgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19NS0RFVl9ICisjaW5jbHVkZSA8c3lzL21rZGV2Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgImJsa2lkUC5oIgorCitjaGFyICpibGtpZF9zdHJuZHVwKGNvbnN0IGNoYXIgKnMsIGludCBsZW5ndGgpCit7CisJY2hhciAqcmV0OworCisJaWYgKCFzKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghbGVuZ3RoKQorCQlsZW5ndGggPSBzdHJsZW4ocyk7CisKKwlyZXQgPSBtYWxsb2MobGVuZ3RoICsgMSk7CisJaWYgKHJldCkgeworCQlzdHJuY3B5KHJldCwgcywgbGVuZ3RoKTsKKwkJcmV0W2xlbmd0aF0gPSAnXDAnOworCX0KKwlyZXR1cm4gcmV0OworfQorCitjaGFyICpibGtpZF9zdHJkdXAoY29uc3QgY2hhciAqcykKK3sKKwlyZXR1cm4gYmxraWRfc3RybmR1cChzLCAwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyBhbiBlbnRyeSB0byB0aGUgZGlyZWN0b3J5IGxpc3QKKyAqLworc3RhdGljIHZvaWQgYWRkX3RvX2Rpcmxpc3QoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRpcl9saXN0ICoqbGlzdCkKK3sKKwlzdHJ1Y3QgZGlyX2xpc3QgKmRwOworCisJZHAgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaXJfbGlzdCkpOworCWlmICghZHApCisJCXJldHVybjsKKwlkcC0+bmFtZSA9IGJsa2lkX3N0cmR1cChuYW1lKTsKKwlpZiAoIWRwLT5uYW1lKSB7CisJCWZyZWUoZHApOworCQlyZXR1cm47CisJfQorCWRwLT5uZXh0ID0gKmxpc3Q7CisJKmxpc3QgPSBkcDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgYSBkaXJlY3RvcnkgbGlzdAorICovCitzdGF0aWMgdm9pZCBmcmVlX2Rpcmxpc3Qoc3RydWN0IGRpcl9saXN0ICoqbGlzdCkKK3sKKwlzdHJ1Y3QgZGlyX2xpc3QgKmRwLCAqbmV4dDsKKworCWZvciAoZHAgPSAqbGlzdDsgZHA7IGRwID0gbmV4dCkgeworCQluZXh0ID0gZHAtPm5leHQ7CisJCWZyZWUoZHAtPm5hbWUpOworCQlmcmVlKGRwKTsKKwl9CisJKmxpc3QgPSBOVUxMOworfQorCit2b2lkIGJsa2lkX19zY2FuX2RpcihjaGFyICpkaXJuYW1lLCBkZXZfdCBkZXZubywgc3RydWN0IGRpcl9saXN0ICoqbGlzdCwKKwkJICAgICBjaGFyICoqZGV2bmFtZSkKK3sKKwlESVIJKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICpkcDsKKwljaGFyCXBhdGhbMTAyNF07CisJaW50CWRpcmxlbjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICgoZGlyID0gb3BlbmRpcihkaXJuYW1lKSkgPT0gTlVMTCkKKwkJcmV0dXJuOworCWRpcmxlbiA9IHN0cmxlbihkaXJuYW1lKSArIDI7CisJd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlyKSkgIT0gMCkgeworCQlpZiAoZGlybGVuICsgc3RybGVuKGRwLT5kX25hbWUpID49IHNpemVvZihwYXRoKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChkcC0+ZF9uYW1lWzBdID09ICcuJyAmJgorCQkgICAgKChkcC0+ZF9uYW1lWzFdID09IDApIHx8CisJCSAgICAgKChkcC0+ZF9uYW1lWzFdID09ICcuJykgJiYgKGRwLT5kX25hbWVbMl0gPT0gMCkpKSkKKwkJCWNvbnRpbnVlOworCisJCXNwcmludGYocGF0aCwgIiVzLyVzIiwgZGlybmFtZSwgZHAtPmRfbmFtZSk7CisJCWlmIChzdGF0KHBhdGgsICZzdCkgPCAwKQorCQkJY29udGludWU7CisKKwkJaWYgKFNfSVNCTEsoc3Quc3RfbW9kZSkgJiYgc3Quc3RfcmRldiA9PSBkZXZubykgeworCQkJKmRldm5hbWUgPSBibGtpZF9zdHJkdXAocGF0aCk7CisJCQlEQkcoREVCVUdfREVWTk8sCisJCQkgICAgcHJpbnRmKCJmb3VuZCAweCVsbHggYXQgJXMgKCVwKVxuIiwgKGxvbmcgbG9uZylkZXZubywKKwkJCQkgICBwYXRoLCAqZGV2bmFtZSkpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGxpc3QgJiYgU19JU0RJUihzdC5zdF9tb2RlKSAmJiAhbHN0YXQocGF0aCwgJnN0KSAmJgorCQkgICAgU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCWFkZF90b19kaXJsaXN0KHBhdGgsIGxpc3QpOworCX0KKwljbG9zZWRpcihkaXIpOworCXJldHVybjsKK30KKworLyogRGlyZWN0b3JpZXMgd2hlcmUgd2Ugd2lsbCB0cnkgdG8gc2VhcmNoIGZvciBkZXZpY2UgbnVtYmVycyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmRldmRpcnNbXSA9IHsgIi9kZXZpY2VzIiwgIi9kZXZmcyIsICIvZGV2IiwgTlVMTCB9OworCisvKgorICogVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgcGF0aG5hbWUgdG8gYSBibG9jayBkZXZpY2Ugd2l0aCBhIGdpdmVuCisgKiBkZXZpY2UgbnVtYmVyLiAgSXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeSB0byB0aGUKKyAqIHBhdGhuYW1lIG9uIHN1Y2Nlc3MsIGFuZCBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK2NoYXIgKmJsa2lkX2Rldm5vX3RvX2Rldm5hbWUoZGV2X3QgZGV2bm8pCit7CisJc3RydWN0IGRpcl9saXN0ICpsaXN0ID0gTlVMTCwgKm5ld19saXN0ID0gTlVMTDsKKwljaGFyICpkZXZuYW1lID0gTlVMTDsKKwljb25zdCBjaGFyICoqZGlyOworCisJLyoKKwkgKiBBZGQgdGhlIHN0YXJ0aW5nIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBpbiByZXZlcnNlIG9yZGVyIG9mCisJICogaW1wb3J0YW5jZSwgc2luY2Ugd2UgYXJlIHVzaW5nIGEgc3RhY2suLi4KKwkgKi8KKwlmb3IgKGRpciA9IGRldmRpcnM7ICpkaXI7IGRpcisrKQorCQlhZGRfdG9fZGlybGlzdCgqZGlyLCAmbGlzdCk7CisKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgZGlyX2xpc3QgKmN1cnJlbnQgPSBsaXN0OworCisJCWxpc3QgPSBsaXN0LT5uZXh0OworCQlEQkcoREVCVUdfREVWTk8sIHByaW50ZigiZGlyZWN0b3J5ICVzXG4iLCBjdXJyZW50LT5uYW1lKSk7CisJCWJsa2lkX19zY2FuX2RpcihjdXJyZW50LT5uYW1lLCBkZXZubywgJm5ld19saXN0LCAmZGV2bmFtZSk7CisJCWZyZWUoY3VycmVudC0+bmFtZSk7CisJCWZyZWUoY3VycmVudCk7CisJCWlmIChkZXZuYW1lKQorCQkJYnJlYWs7CisJCS8qCisJCSAqIElmIHdlJ3JlIGRvbmUgY2hlY2tpbmcgYXQgdGhpcyBsZXZlbCwgZGVzY2VuZCB0bworCQkgKiB0aGUgbmV4dCBsZXZlbCBvZiBzdWJkaXJlY3Rvcmllcy4gKGJyZWFkdGgtZmlyc3QpCisJCSAqLworCQlpZiAobGlzdCA9PSBOVUxMKSB7CisJCQlsaXN0ID0gbmV3X2xpc3Q7CisJCQluZXdfbGlzdCA9IE5VTEw7CisJCX0KKwl9CisJZnJlZV9kaXJsaXN0KCZsaXN0KTsKKwlmcmVlX2Rpcmxpc3QoJm5ld19saXN0KTsKKworCWlmICghZGV2bmFtZSkgeworCQlEQkcoREVCVUdfREVWTk8sCisJCSAgICBwcmludGYoImJsa2lkOiBjb3VsZG4ndCBmaW5kIGRldm5vIDB4JTA0bHhcbiIsCisJCQkgICAodW5zaWduZWQgbG9uZykgZGV2bm8pKTsKKwl9IGVsc2UgeworCQlEQkcoREVCVUdfREVWTk8sCisJCSAgICBwcmludGYoImZvdW5kIGRldm5vIDB4JTA0bGx4IGFzICVzXG4iLCAobG9uZyBsb25nKWRldm5vLCBkZXZuYW1lKSk7CisJfQorCisKKwlyZXR1cm4gZGV2bmFtZTsKK30KKworI2lmZGVmIFRFU1RfUFJPR1JBTQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworCWNoYXIJKmRldm5hbWUsICp0bXA7CisJaW50CW1ham9yLCBtaW5vcjsKKwlkZXZfdAlkZXZubzsKKwljb25zdCBjaGFyICplcnJtc2cgPSAiQ291bGRuJ3QgcGFyc2UgJXM6ICVzXG4iOworCisJYmxraWRfZGVidWdfbWFzayA9IERFQlVHX0FMTDsKKwlpZiAoKGFyZ2MgIT0gMikgJiYgKGFyZ2MgIT0gMykpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTpcdCVzIGRldmljZV9udW1iZXJcblx0JXMgbWFqb3IgbWlub3JcbiIKKwkJCSJSZXNvbHZlIGEgZGV2aWNlIG51bWJlciB0byBhIGRldmljZSBuYW1lXG4iLAorCQkJYXJndlswXSwgYXJndlswXSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChhcmdjID09IDIpIHsKKwkJZGV2bm8gPSBzdHJ0b3VsKGFyZ3ZbMV0sICZ0bXAsIDApOworCQlpZiAoKnRtcCkgeworCQkJZnByaW50ZihzdGRlcnIsIGVycm1zZywgImRldmljZSBudW1iZXIiLCBhcmd2WzFdKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9IGVsc2UgeworCQltYWpvciA9IHN0cnRvdWwoYXJndlsxXSwgJnRtcCwgMCk7CisJCWlmICgqdG1wKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgZXJybXNnLCAibWFqb3IgbnVtYmVyIiwgYXJndlsxXSk7CisJCQlleGl0KDEpOworCQl9CisJCW1pbm9yID0gc3RydG91bChhcmd2WzJdLCAmdG1wLCAwKTsKKwkJaWYgKCp0bXApIHsKKwkJCWZwcmludGYoc3RkZXJyLCBlcnJtc2csICJtaW5vciBudW1iZXIiLCBhcmd2WzJdKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJZGV2bm8gPSBtYWtlZGV2KG1ham9yLCBtaW5vcik7CisJfQorCXByaW50ZigiTG9va2luZyBmb3IgZGV2aWNlIDB4JTA0bGx4XG4iLCAobG9uZyBsb25nKWRldm5vKTsKKwlkZXZuYW1lID0gYmxraWRfZGV2bm9fdG9fZGV2bmFtZShkZXZubyk7CisJZnJlZShkZXZuYW1lKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL2dldHNpemUuYyBiL2xpYi9ibGtpZC9nZXRzaXplLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVjNDBhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC9nZXRzaXplLmMKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgKiBnZXRzaXplLmMgLS0tIGdldCB0aGUgc2l6ZSBvZiBhIHBhcnRpdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTUgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYmxraWRQLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTElOVVhfRkRfSAorI2luY2x1ZGUgPGxpbnV4L2ZkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19ESVNLTEFCRUxfSAorI2luY2x1ZGUgPHN5cy9kaXNrbGFiZWwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0RJU0tfSAorI2luY2x1ZGUgPHN5cy9kaXNrLmg+CisjZW5kaWYKKyNpZmRlZiBfX2xpbnV4X18KKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChfSU8pICYmICFkZWZpbmVkKEJMS0dFVFNJWkUpCisjZGVmaW5lIEJMS0dFVFNJWkUgX0lPKDB4MTIsOTYpCS8qIHJldHVybiBkZXZpY2Ugc2l6ZSAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChfSU9SKSAmJiAhZGVmaW5lZChCTEtHRVRTSVpFNjQpCisjZGVmaW5lIEJMS0dFVFNJWkU2NCBfSU9SKDB4MTIsMTE0LHNpemVfdCkJLyogcmV0dXJuIGRldmljZSBzaXplIGluIGJ5dGVzICh1NjQgKmFyZykgKi8KKyNlbmRpZgorCisjaWZkZWYgQVBQTEVfREFSV0lOCisjZGVmaW5lIEJMS0dFVFNJWkUgREtJT0NHRVRCTE9DS0NPVU5UMzIKKyNlbmRpZiAvKiBBUFBMRV9EQVJXSU4gKi8KKworc3RhdGljIGludCB2YWxpZF9vZmZzZXQoaW50IGZkLCBibGtpZF9sb2ZmX3Qgb2Zmc2V0KQoreworCWNoYXIgY2g7CisKKwlpZiAoYmxraWRfbGxzZWVrKGZkLCBvZmZzZXQsIDApIDwgMCkKKwkJcmV0dXJuIDA7CisJaWYgKHJlYWQoZmQsICZjaCwgMSkgPCAxKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHBhcnRpdGlvbgorICovCitibGtpZF9sb2ZmX3QgYmxraWRfZ2V0X2Rldl9zaXplKGludCBmZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTY0OworCWJsa2lkX2xvZmZfdCBoaWdoLCBsb3c7CisKKyNpZmRlZiBES0lPQ0dFVEJMT0NLQ09VTlQJLyogRm9yIEFwcGxlIERhcndpbiAqLworCWlmIChpb2N0bChmZCwgREtJT0NHRVRCTE9DS0NPVU5ULCAmc2l6ZTY0KSA+PSAwKSB7CisJCWlmIChzaXplb2YoYmxraWRfbG9mZl90KSA8IHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpICYmCisJCSAgICAoc2l6ZTY0IDw8IDkpID4gMHhGRkZGRkZGRikKKwkJCXJldHVybiAwOyAvKiBFRkJJRyAqLworCQlyZXR1cm4gKGJsa2lkX2xvZmZfdClzaXplNjQgPDwgOTsKKwl9CisjZW5kaWYKKworI2lmZGVmIEJMS0dFVFNJWkU2NAorCXsKKwkJaW50IHZhbGlkX2Jsa2dldHNpemU2NCA9IDE7CisjaWZkZWYgX19saW51eF9fCisJCXN0cnVjdAkJdXRzbmFtZSB1dDsKKworCQlpZiAoKHVuYW1lKCZ1dCkgPT0gMCkgJiYKKwkJICAgICgodXQucmVsZWFzZVswXSA9PSAnMicpICYmICh1dC5yZWxlYXNlWzFdID09ICcuJykgJiYKKwkJICAgICAodXQucmVsZWFzZVsyXSA8ICc2JykgJiYgKHV0LnJlbGVhc2VbM10gPT0gJy4nKSkpCisJCQl2YWxpZF9ibGtnZXRzaXplNjQgPSAwOworI2VuZGlmCisJCWlmICh2YWxpZF9ibGtnZXRzaXplNjQgJiYKKwkJICAgIGlvY3RsKGZkLCBCTEtHRVRTSVpFNjQsICZzaXplNjQpID49IDApIHsKKwkJCWlmIChzaXplb2YoYmxraWRfbG9mZl90KSA8IHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpICYmCisJCQkgICAgKHNpemU2NCA+IDB4RkZGRkZGRkYpKQorCQkJCXJldHVybiAwOyAvKiBFRkJJRyAqLworCQkJcmV0dXJuIHNpemU2NDsKKwkJfQorCX0KKyNlbmRpZiAvKiBCTEtHRVRTSVpFNjQgKi8KKworI2lmZGVmIEJMS0dFVFNJWkUKKwl7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCQlpZiAoaW9jdGwoZmQsIEJMS0dFVFNJWkUsICZzaXplKSA+PSAwKQorCQkJcmV0dXJuIChibGtpZF9sb2ZmX3Qpc2l6ZSA8PCA5OworCX0KKyNlbmRpZgorCisvKiB0ZXN0ZWQgb24gRnJlZUJTRCA2LjEtUkVMRUFTRSBpMzg2ICovCisjaWZkZWYgRElPQ0dNRURJQVNJWkUKKwlpZiAoaW9jdGwoZmQsIERJT0NHTUVESUFTSVpFLCAmc2l6ZTY0KSA+PSAwKQorCQlyZXR1cm4gKG9mZl90KXNpemU2NDsKKyNlbmRpZiAvKiBESU9DR01FRElBU0laRSAqLworCisjaWZkZWYgRkRHRVRQUk0KKwl7CisJCXN0cnVjdCBmbG9wcHlfc3RydWN0IHRoaXNfZmxvcHB5OworCisJCWlmIChpb2N0bChmZCwgRkRHRVRQUk0sICZ0aGlzX2Zsb3BweSkgPj0gMCkKKwkJCXJldHVybiAoYmxraWRfbG9mZl90KXRoaXNfZmxvcHB5LnNpemUgPDwgOTsKKwl9CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19ESVNLTEFCRUxfSAorCXsKKwkJaW50IHBhcnQgPSAtMTsKKwkJc3RydWN0IGRpc2tsYWJlbCBsYWI7CisJCXN0cnVjdCBwYXJ0aXRpb24gKnBwOworCQljaGFyIGNoOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQkvKgorCQkgKiBUaGlzIGNvZGUgd29ya3MgZm9yIEZyZWVCU0QgNC4xMSBpMzg2LCBleGNlcHQgZm9yIHRoZSBmdWxsCisJCSAqIGRldmljZSAoc3VjaCBhcyAvZGV2L2FkMCkuIEl0IGRvZXNuJ3Qgd29yayBwcm9wZXJseSBmb3IKKwkJICogbmV3ZXIgRnJlZUJTRCB0aG91Z2guIEZyZWVCU0QgPj0gNS4wIHNob3VsZCBiZSBjb3ZlcmVkIGJ5CisJCSAqIHRoZSBESU9DR01FRElBU0laRSBhYm92ZSBob3dldmVyLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgRnJlZUJTRCA+PSA0LjAgaGFzIGRpc2sgZGV2aWNlcyBhcyB1bmJ1ZmZlcmVkIChyYXcsCisJCSAqIGNoYXJhY3RlcikgZGV2aWNlcywgc28gd2UgbmVlZCB0byBjaGVjayBmb3IgU19JU0NIUiwgdG9vLgorCQkgKi8KKwkJaWYgKGZzdGF0KGZkLCAmc3QpID49IDAgJiYKKwkJICAgIChTX0lTQkxLKHN0LnN0X21vZGUpIHx8IFNfSVNDSFIoc3Quc3RfbW9kZSkpKQorCQkJcGFydCA9IHN0LnN0X3JkZXYgJiA3OworCisJCWlmIChwYXJ0ID49IDAgJiYgKGlvY3RsKGZkLCBESU9DR0RJTkZPLCAoY2hhciAqKSZsYWIpID49IDApKSB7CisJCQlwcCA9ICZsYWIuZF9wYXJ0aXRpb25zW3BhcnRdOworCQkJaWYgKHBwLT5wX3NpemUpCisJCQkJcmV0dXJuIHBwLT5wX3NpemUgPDwgOTsKKwkJfQorCX0KKyNlbmRpZiAvKiBIQVZFX1NZU19ESVNLTEFCRUxfSCAqLworCXsKKyNpZiBkZWZpbmVkKEhBVkVfRlNUQVQ2NCkgJiYgIWRlZmluZWQoX19PU1hfQVZBSUxBQkxFX0JVVF9ERVBSRUNBVEVEKQorCQlzdHJ1Y3Qgc3RhdDY0ICAgc3Q7CisJCWlmIChmc3RhdDY0KGZkLCAmc3QpID09IDApCisjZWxzZQorCQlzdHJ1Y3Qgc3RhdAlzdDsKKwkJaWYgKGZzdGF0KGZkLCAmc3QpID09IDApCisjZW5kaWYKKwkJCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQorCQkJCXJldHVybiBzdC5zdF9zaXplOworCX0KKworCS8qCisJICogT0ssIHdlIGNvdWxkbid0IGZpZ3VyZSBpdCBvdXQgYnkgdXNpbmcgYSBzcGVjaWFsaXplZCBpb2N0bCwKKwkgKiB3aGljaCBpcyBnZW5lcmFsbHkgdGhlIGJlc3Qgd2F5LiAgU28gZG8gYmluYXJ5IHNlYXJjaCB0bworCSAqIGZpbmQgdGhlIHNpemUgb2YgdGhlIHBhcnRpdGlvbi4KKwkgKi8KKwlsb3cgPSAwOworCWZvciAoaGlnaCA9IDEwMjQ7IHZhbGlkX29mZnNldChmZCwgaGlnaCk7IGhpZ2ggKj0gMikKKwkJbG93ID0gaGlnaDsKKwl3aGlsZSAobG93IDwgaGlnaCAtIDEpIHsKKwkJY29uc3QgYmxraWRfbG9mZl90IG1pZCA9IChsb3cgKyBoaWdoKSAvIDI7CisKKwkJaWYgKHZhbGlkX29mZnNldChmZCwgbWlkKSkKKwkJCWxvdyA9IG1pZDsKKwkJZWxzZQorCQkJaGlnaCA9IG1pZDsKKwl9CisJcmV0dXJuIGxvdyArIDE7Cit9CisKKyNpZmRlZiBURVNUX1BST0dSQU0KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlsb25nIGxvbmcgYnl0ZXM7CisJaW50CWZkOworCisJaWYgKGFyZ2MgPCAyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIGRldmljZVxuIgorCQkJIkRldGVybWluZSB0aGUgc2l6ZSBvZiBhIGRldmljZVxuIiwgYXJndlswXSk7CisJCXJldHVybiAxOworCX0KKworCWlmICgoZmQgPSBvcGVuKGFyZ3ZbMV0sIE9fUkRPTkxZKSkgPCAwKQorCQlwZXJyb3IoYXJndlswXSk7CisKKwlieXRlcyA9IGJsa2lkX2dldF9kZXZfc2l6ZShmZCk7CisJcHJpbnRmKCJEZXZpY2UgJXMgaGFzICVsbGQgMWsgYmxvY2tzLlxuIiwgYXJndlsxXSwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylieXRlcyA+PiAxMCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL2xpYmJsa2lkLjMuaW4gYi9saWIvYmxraWQvbGliYmxraWQuMy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDI0Y2IxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL2xpYmJsa2lkLjMuaW4KQEAgLTAsMCArMSw4MCBAQAorLlwiIENvcHlyaWdodCAyMDAxIEFuZHJlYXMgRGlsZ2VyIChhZGlsZ2VyQHR1cmJvbGludXguY29tKQorLlwiCisuXCIgVGhpcyBtYW4gcGFnZSB3YXMgY3JlYXRlZCBmb3IgbGliYmxraWQuc28uMS4wIGZyb20gZTJmc3Byb2dzLTEuMjQuCisuXCIKKy5cIiBUaGlzIGZpbGUgbWF5IGJlIGNvcGllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKy5cIgorLlwiIENyZWF0ZWQgIFdlZCBTZXAgMTQgMTI6MDI6MTIgMjAwMSwgQW5kcmVhcyBEaWxnZXIKKy5USCBMSUJCTEtJRCAzICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCitsaWJibGtpZCBcLSBibG9jayBkZXZpY2UgaWRlbnRpZmljYXRpb24gbGlicmFyeQorLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8YmxraWQvYmxraWQuaD4KKy5zcAorLkIgY2MKKy5JIGZpbGUuYworLkIgXC1sYmxraWQKKy5TSCBERVNDUklQVElPTgorVGhlCisuQiBsaWJibGtpZAorbGlicmFyeSBpcyB1c2VkIHRvIGlkZW50aWZ5IGJsb2NrIGRldmljZXMgKGRpc2tzKSBhcyB0byB0aGVpciBjb250ZW50IChlLmcuCitmaWxlc3lzdGVtIHR5cGUpIGFzIHdlbGwgYXMgZXh0cmFjdGluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHN1Y2ggYXMKK2ZpbGVzeXN0ZW0gbGFiZWxzL3ZvbHVtZSBuYW1lcywgdW5pcXVlIGlkZW50aWZpZXJzL3NlcmlhbCBudW1iZXJzLCBldGMuCitBIGNvbW1vbiB1c2UgaXMgdG8gYWxsb3cgdXNlIG9mIExBQkVMPSBhbmQgVVVJRD0gdGFncyBpbnN0ZWFkIG9mIGhhcmQtY29kaW5nCitzcGVjaWZpYyBibG9jayBkZXZpY2UgbmFtZXMgaW50byBjb25maWd1cmF0aW9uIGZpbGVzLgorLlAKK0Jsb2NrIGRldmljZSBpbmZvcm1hdGlvbiBpcyBub3JtYWxseSBrZXB0IGluIGEgY2FjaGUgZmlsZQorLkkgL2V0Yy9ibGtpZC50YWIKK2FuZCBpcyB2ZXJpZmllZCB0byBzdGlsbCBiZSB2YWxpZCBiZWZvcmUgYmVpbmcgcmV0dXJuZWQgdG8gdGhlIHVzZXIKKyhpZiB0aGUgdXNlciBoYXMgcmVhZCBwZXJtaXNzaW9uIG9uIHRoZSByYXcgYmxvY2sgZGV2aWNlLCBvdGhlcndpc2Ugbm90KS4KK1RoZSBjYWNoZSBmaWxlIGFsc28gYWxsb3dzIHVucHJpdmlsZWdlZCB1c2VycyAobm9ybWFsbHkgYW55b25lIG90aGVyCit0aGFuIHJvb3QsIG9yIHRob3NlIG5vdCBpbiB0aGUgImRpc2siIGdyb3VwKSB0byBsb2NhdGUgZGV2aWNlcyBieSBsYWJlbC9pZC4KK1RoZSBzdGFuZGFyZCBsb2NhdGlvbiBvZiB0aGUgY2FjaGUgZmlsZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUKK2Vudmlyb25tZW50IHZhcmlhYmxlIEJMS0lEX0ZJTEUuCisuUAorSW4gc2l0dWF0aW9ucyB3aGVyZSBvbmUgaXMgZ2V0dGluZyBpbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBrbm93biBkZXZpY2UsCitpdCBkb2VzIG5vdCBpbXBhY3QgcGVyZm9ybWFuY2Ugd2hldGhlciB0aGUgY2FjaGUgaXMgdXNlZCBvciBub3QgKHVubGVzcyB5b3UKK2FyZSBub3QgYWJsZSB0byByZWFkIHRoZSBibG9jayBkZXZpY2UgZGlyZWN0bHkpLiAgSWYgeW91IGFyZSBkZWFsaW5nIHdpdGgKK211bHRpcGxlIGRldmljZXMsIHVzZSBvZiB0aGUgY2FjaGUgaXMgaGlnaGx5IHJlY29tbWVuZGVkIChldmVuIGlmIGVtcHR5KSBhcworZGV2aWNlcyB3aWxsIGJlIHNjYW5uZWQgYXQgbW9zdCBvbmUgdGltZSBhbmQgdGhlIG9uLWRpc2sgY2FjaGUgd2lsbCBiZQordXBkYXRlZCBpZiBwb3NzaWJsZS4gIFRoZXJlIGlzIHJhcmVseSBhIHJlYXNvbiBub3QgdG8gdXNlIHRoZSBjYWNoZS4KKy5QCitJbiBzb21lIGNhc2VzIChtb2R1bGFyIGtlcm5lbHMpLCBibG9jayBkZXZpY2VzIGFyZSBub3QgZXZlbiB2aXNpYmxlIHVudGlsCithZnRlciB0aGV5IGFyZSBhY2Nlc3NlZCB0aGUgZmlyc3QgdGltZSwgc28gaXQgaXMgY3JpdGljYWwgdGhhdCB0aGVyZSBpcworc29tZSB3YXkgdG8gbG9jYXRlIHRoZXNlIGRldmljZXMgd2l0aG91dCBlbnVtZXJhdGluZyBvbmx5IHZpc2libGUgZGV2aWNlcywKK3NvIHRoZSB1c2Ugb2YgdGhlIGNhY2hlIGZpbGUgaXMKKy5CIHJlcXVpcmVkCitpbiB0aGlzIHNpdHVhdGlvbi4KKy5TSCBBVVRIT1IKKy5CIGxpYmJsa2lkCit3YXMgd3JpdHRlbiBieSBBbmRyZWFzIERpbGdlciBmb3IgdGhlIGV4dDIgZmlsZXN5c3RlbSB1dGlsdGllcywgd2l0aCBpbnB1dAorZnJvbSBUZWQgVHMnby4gIFRoZSBsaWJyYXJ5IHdhcyBzdWJzZXF1ZW50bHkgaGVhdmlseSBtb2RpZmllZCBieSBUZWQgVHMnby4KKy5TSCBGSUxFUworLlRQCisuSSAvZXRjL2Jsa2lkLnRhYgorQ2FjaGVzIGRhdGEgZXh0cmFjdGVkIGZyb20gZWFjaCByZWNvZ25pemVkIGJsb2NrIGRldmljZS4KKy5TSCBBVkFJTEFCSUxJVFkKKy5CIGxpYmJsa2lkCitpcyBwYXJ0IG9mIHRoZSBlMmZzcHJvZ3MgcGFja2FnZSBzaW5jZSB2ZXJzaW9uIDEuMzMgYW5kIGlzIGF2YWlsYWJsZSBmcm9tCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC4KKy5TSCBDT1BZSU5HCisuQiBsaWJibGtpZAoraXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoTEdQTCksCit2ZXJzaW9uIDIgKG9yIGF0IHlvdXIgZGlzY3JldGlvbiBhbnkgbGF0ZXIgdmVyc2lvbikuICBBIGNvcHkgb2YgdGhlIExHUEwKK3Nob3VsZCBiZSBpbmNsdWRlZCB3aXRoIHRoaXMgbGlicmFyeSBpbiB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworLlJTCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy5icgorNTEgRnJhbmtsaW4gU3QKKy5icgorRmlmdGggRmxvb3IKKy5icgorQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisuUkUKKy5QUAorb3IgdmlzaXQKKy5VUiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNMR1BMCitodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNMR1BMCisuVUUKKy5TSCAiU0VFIEFMU08iCisuQlIgYmxraWQgKDgpCmRpZmYgLS1naXQgYS9saWIvYmxraWQvbGlzdC5oIGIvbGliL2Jsa2lkL2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmE1YWMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL2xpc3QuaApAQCAtMCwwICsxLDE3NiBAQAorI2lmICFkZWZpbmVkKF9CTEtJRF9MSVNUX0gpICYmICFkZWZpbmVkKExJU1RfSEVBRF9JTklUKQorI2RlZmluZSBfQkxLSURfTElTVF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9JTkxJTkVfIHN0YXRpYyBfX2lubGluZV9fCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgV2F0Y29tIEMgKi8KKyNkZWZpbmUgX0lOTElORV8gc3RhdGljIGlubGluZQorI2VuZGlmCisKKy8qCisgKiBTaW1wbGUgZG91Ymx5IGxpbmtlZCBsaXN0IGltcGxlbWVudGF0aW9uLgorICoKKyAqIFNvbWUgb2YgdGhlIGludGVybmFsIGZ1bmN0aW9ucyAoIl9feHh4IikgYXJlIHVzZWZ1bCB3aGVuCisgKiBtYW5pcHVsYXRpbmcgd2hvbGUgbGlzdHMgcmF0aGVyIHRoYW4gc2luZ2xlIGVudHJpZXMsIGFzCisgKiBzb21ldGltZXMgd2UgYWxyZWFkeSBrbm93IHRoZSBuZXh0L3ByZXYgZW50cmllcyBhbmQgd2UgY2FuCisgKiBnZW5lcmF0ZSBiZXR0ZXIgY29kZSBieSB1c2luZyB0aGVtIGRpcmVjdGx5IHJhdGhlciB0aGFuCisgKiB1c2luZyB0aGUgZ2VuZXJpYyBzaW5nbGUtZW50cnkgcm91dGluZXMuCisgKi8KKworc3RydWN0IGxpc3RfaGVhZCB7CisJc3RydWN0IGxpc3RfaGVhZCAqbmV4dCwgKnByZXY7Cit9OworCisjZGVmaW5lIExJU1RfSEVBRF9JTklUKG5hbWUpIHsgJihuYW1lKSwgJihuYW1lKSB9CisKKyNkZWZpbmUgSU5JVF9MSVNUX0hFQUQocHRyKSBkbyB7IFwKKwkocHRyKS0+bmV4dCA9IChwdHIpOyAocHRyKS0+cHJldiA9IChwdHIpOyBcCit9IHdoaWxlICgwKQorCisvKgorICogSW5zZXJ0IGEgbmV3IGVudHJ5IGJldHdlZW4gdHdvIGtub3duIGNvbnNlY3V0aXZlIGVudHJpZXMuCisgKgorICogVGhpcyBpcyBvbmx5IGZvciBpbnRlcm5hbCBsaXN0IG1hbmlwdWxhdGlvbiB3aGVyZSB3ZSBrbm93CisgKiB0aGUgcHJldi9uZXh0IGVudHJpZXMgYWxyZWFkeSEKKyAqLworX0lOTElORV8gdm9pZCBfX2xpc3RfYWRkKHN0cnVjdCBsaXN0X2hlYWQgKiBhZGQsCisJc3RydWN0IGxpc3RfaGVhZCAqIHByZXYsCisJc3RydWN0IGxpc3RfaGVhZCAqIG5leHQpCit7CisJbmV4dC0+cHJldiA9IGFkZDsKKwlhZGQtPm5leHQgPSBuZXh0OworCWFkZC0+cHJldiA9IHByZXY7CisJcHJldi0+bmV4dCA9IGFkZDsKK30KKworLyoqCisgKiBsaXN0X2FkZCAtIGFkZCBhIG5ldyBlbnRyeQorICogQGFkZDoJbmV3IGVudHJ5IHRvIGJlIGFkZGVkCisgKiBAaGVhZDoJbGlzdCBoZWFkIHRvIGFkZCBpdCBhZnRlcgorICoKKyAqIEluc2VydCBhIG5ldyBlbnRyeSBhZnRlciB0aGUgc3BlY2lmaWVkIGhlYWQuCisgKiBUaGlzIGlzIGdvb2QgZm9yIGltcGxlbWVudGluZyBzdGFja3MuCisgKi8KK19JTkxJTkVfIHZvaWQgbGlzdF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqYWRkLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCV9fbGlzdF9hZGQoYWRkLCBoZWFkLCBoZWFkLT5uZXh0KTsKK30KKworLyoqCisgKiBsaXN0X2FkZF90YWlsIC0gYWRkIGEgbmV3IGVudHJ5CisgKiBAYWRkOgluZXcgZW50cnkgdG8gYmUgYWRkZWQKKyAqIEBoZWFkOglsaXN0IGhlYWQgdG8gYWRkIGl0IGJlZm9yZQorICoKKyAqIEluc2VydCBhIG5ldyBlbnRyeSBiZWZvcmUgdGhlIHNwZWNpZmllZCBoZWFkLgorICogVGhpcyBpcyB1c2VmdWwgZm9yIGltcGxlbWVudGluZyBxdWV1ZXMuCisgKi8KK19JTkxJTkVfIHZvaWQgbGlzdF9hZGRfdGFpbChzdHJ1Y3QgbGlzdF9oZWFkICphZGQsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0X2FkZChhZGQsIGhlYWQtPnByZXYsIGhlYWQpOworfQorCisvKgorICogRGVsZXRlIGEgbGlzdCBlbnRyeSBieSBtYWtpbmcgdGhlIHByZXYvbmV4dCBlbnRyaWVzCisgKiBwb2ludCB0byBlYWNoIG90aGVyLgorICoKKyAqIFRoaXMgaXMgb25seSBmb3IgaW50ZXJuYWwgbGlzdCBtYW5pcHVsYXRpb24gd2hlcmUgd2Uga25vdworICogdGhlIHByZXYvbmV4dCBlbnRyaWVzIGFscmVhZHkhCisgKi8KK19JTkxJTkVfIHZvaWQgX19saXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICogcHJldiwKKwkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKiBuZXh0KQoreworCW5leHQtPnByZXYgPSBwcmV2OworCXByZXYtPm5leHQgPSBuZXh0OworfQorCisvKioKKyAqIGxpc3RfZGVsIC0gZGVsZXRlcyBlbnRyeSBmcm9tIGxpc3QuCisgKiBAZW50cnk6CXRoZSBlbGVtZW50IHRvIGRlbGV0ZSBmcm9tIHRoZSBsaXN0LgorICoKKyAqIGxpc3RfZW1wdHkoKSBvbiBAZW50cnkgZG9lcyBub3QgcmV0dXJuIHRydWUgYWZ0ZXIgdGhpcywgQGVudHJ5IGlzCisgKiBpbiBhbiB1bmRlZmluZWQgc3RhdGUuCisgKi8KK19JTkxJTkVfIHZvaWQgbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCit7CisJX19saXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5leHQpOworfQorCisvKioKKyAqIGxpc3RfZGVsX2luaXQgLSBkZWxldGVzIGVudHJ5IGZyb20gbGlzdCBhbmQgcmVpbml0aWFsaXplIGl0LgorICogQGVudHJ5Ogl0aGUgZWxlbWVudCB0byBkZWxldGUgZnJvbSB0aGUgbGlzdC4KKyAqLworX0lOTElORV8gdm9pZCBsaXN0X2RlbF9pbml0KHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQoreworCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKKwlJTklUX0xJU1RfSEVBRChlbnRyeSk7Cit9CisKKy8qKgorICogbGlzdF9lbXB0eSAtIHRlc3RzIHdoZXRoZXIgYSBsaXN0IGlzIGVtcHR5CisgKiBAaGVhZDoJdGhlIGxpc3QgdG8gdGVzdC4KKyAqLworX0lOTElORV8gaW50IGxpc3RfZW1wdHkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlyZXR1cm4gaGVhZC0+bmV4dCA9PSBoZWFkOworfQorCisvKioKKyAqIGxpc3Rfc3BsaWNlIC0gam9pbiB0d28gbGlzdHMKKyAqIEBsaXN0Ogl0aGUgbmV3IGxpc3QgdG8gYWRkLgorICogQGhlYWQ6CXRoZSBwbGFjZSB0byBhZGQgaXQgaW4gdGhlIGZpcnN0IGxpc3QuCisgKi8KK19JTkxJTkVfIHZvaWQgbGlzdF9zcGxpY2Uoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpmaXJzdCA9IGxpc3QtPm5leHQ7CisKKwlpZiAoZmlyc3QgIT0gbGlzdCkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICpsYXN0ID0gbGlzdC0+cHJldjsKKwkJc3RydWN0IGxpc3RfaGVhZCAqYXQgPSBoZWFkLT5uZXh0OworCisJCWZpcnN0LT5wcmV2ID0gaGVhZDsKKwkJaGVhZC0+bmV4dCA9IGZpcnN0OworCisJCWxhc3QtPm5leHQgPSBhdDsKKwkJYXQtPnByZXYgPSBsYXN0OworCX0KK30KKworLyoqCisgKiBsaXN0X2VudHJ5IC0gZ2V0IHRoZSBzdHJ1Y3QgZm9yIHRoaXMgZW50cnkKKyAqIEBwdHI6CXRoZSAmc3RydWN0IGxpc3RfaGVhZCBwb2ludGVyLgorICogQHR5cGU6CXRoZSB0eXBlIG9mIHRoZSBzdHJ1Y3QgdGhpcyBpcyBlbWJlZGRlZCBpbi4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqLworI2RlZmluZSBsaXN0X2VudHJ5KHB0ciwgdHlwZSwgbWVtYmVyKSBcCisJKCh0eXBlICopKChjaGFyICopKHB0ciktKHVuc2lnbmVkIGxvbmcpKCYoKHR5cGUgKikwKS0+bWVtYmVyKSkpCisKKy8qKgorICogbGlzdF9mb3JfZWFjaCAtIGl0ZXJhdGUgb3ZlciBlbGVtZW50cyBpbiBhIGxpc3QKKyAqIEBwb3M6CXRoZSAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgYSBsb29wIGNvdW50ZXIuCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoKHBvcywgaGVhZCkgXAorCWZvciAocG9zID0gKGhlYWQpLT5uZXh0OyBwb3MgIT0gKGhlYWQpOyBwb3MgPSBwb3MtPm5leHQpCisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9zYWZlIC0gaXRlcmF0ZSBvdmVyIGVsZW1lbnRzIGluIGEgbGlzdCwgYnV0IGRvbid0IGRlcmVmZXJlbmNlCisgKiAgICAgICAgICAgICAgICAgICAgICBwb3MgYWZ0ZXIgdGhlIGJvZHkgaXMgZG9uZSAoaW4gY2FzZSBpdCBpcyBmcmVlZCkKKyAqIEBwb3M6CXRoZSAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgYSBsb29wIGNvdW50ZXIuCisgKiBAcG5leHQ6CXRoZSAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IGl0ZW0uCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdCAobm90IGluY2x1ZGVkIGluIGl0ZXJhdGlvbikuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgcG5leHQsIGhlYWQpIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dCwgcG5leHQgPSBwb3MtPm5leHQ7IHBvcyAhPSAoaGVhZCk7IFwKKwkgICAgIHBvcyA9IHBuZXh0LCBwbmV4dCA9IHBvcy0+bmV4dCkKKworI3VuZGVmIF9JTkxJTkVfCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQkxLSURfTElTVF9IICovCmRpZmYgLS1naXQgYS9saWIvYmxraWQvbGxzZWVrLmMgYi9saWIvYmxraWQvbGxzZWVrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNlZTM0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC9sbHNlZWsuYwpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIGxsc2Vlay5jIC0tIHN0dWIgY2FsbGluZyB0aGUgbGxzZWVrIHN5c3RlbSBjYWxsCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIF9fTVNET1NfXworI2luY2x1ZGUgPGlvLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImJsa2lkUC5oIgorCisjaWZkZWYgX19saW51eF9fCisKKyNpZiBkZWZpbmVkKEhBVkVfTFNFRUs2NCkgJiYgZGVmaW5lZChIQVZFX0xTRUVLNjRfUFJPVE9UWVBFKQorCisjZGVmaW5lIG15X2xsc2VlayBsc2VlazY0CisKKyNlbGlmIGRlZmluZWQoSEFWRV9MTFNFRUspCisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKworI2lmbmRlZiBIQVZFX0xMU0VFS19QUk9UT1RZUEUKK2V4dGVybiBsb25nIGxvbmcgbGxzZWVrKGludCBmZCwgbG9uZyBsb25nIG9mZnNldCwgaW50IG9yaWdpbik7CisjZW5kaWYKKworI2RlZmluZSBteV9sbHNlZWsgbGxzZWVrCisKKyNlbHNlCS8qICEgSEFWRV9MTFNFRUsgKi8KKworI2lmIFNJWkVPRl9MT05HID09IFNJWkVPRl9MT05HX0xPTkcKKworI2RlZmluZSBsbHNlZWsgbHNlZWsKKworI2Vsc2UgLyogU0laRU9GX0xPTkcgIT0gU0laRU9GX0xPTkdfTE9ORyAqLworCisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisKKyNpZm5kZWYgX19OUl9fbGxzZWVrCisjZGVmaW5lIF9fTlJfX2xsc2VlayAgICAgICAgICAgIDE0MAorI2VuZGlmCisKKyNpZm5kZWYgX19pMzg2X18KK3N0YXRpYyBpbnQgX2xsc2Vlayh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCSAgIGJsa2lkX2xvZmZfdCAqLCB1bnNpZ25lZCBpbnQpOworCitzdGF0aWMgX3N5c2NhbGw1KGludCwgX2xsc2VlaywgdW5zaWduZWQgaW50LCBmZCwgdW5zaWduZWQgbG9uZywgb2Zmc2V0X2hpZ2gsCisJCSB1bnNpZ25lZCBsb25nLCBvZmZzZXRfbG93LCBibGtpZF9sb2ZmX3QgKiwgcmVzdWx0LAorCQkgdW5zaWduZWQgaW50LCBvcmlnaW4pCisjZW5kaWYKKworc3RhdGljIGJsa2lkX2xvZmZfdCBteV9sbHNlZWsoaW50IGZkLCBibGtpZF9sb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQoreworCWJsa2lkX2xvZmZfdCByZXN1bHQ7CisJaW50IHJldHZhbDsKKworI2lmbmRlZiBfX2kzODZfXworCXJldHZhbCA9IF9sbHNlZWsoZmQsICgodW5zaWduZWQgbG9uZyBsb25nKSBvZmZzZXQpID4+IDMyLAorCQkJICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCkgJiAweGZmZmZmZmZmLAorCQkJICZyZXN1bHQsIG9yaWdpbik7CisjZWxzZQorCXJldHZhbCA9IHN5c2NhbGwoX19OUl9fbGxzZWVrLCBmZCwgKCh1bnNpZ25lZCBsb25nIGxvbmcpIG9mZnNldCkgPj4gMzIsCisJCQkgKCh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0KSAmIDB4ZmZmZmZmZmYsCisJCQkgJnJlc3VsdCwgb3JpZ2luKTsKKyNlbmRpZgorCXJldHVybiAocmV0dmFsID09IC0xID8gKGJsa2lkX2xvZmZfdCkgcmV0dmFsIDogcmVzdWx0KTsKK30KKworI2VuZGlmCS8qIF9fYWxwaGFfXyB8fCBfX2lhNjRfXyAqLworCisjZW5kaWYgLyogSEFWRV9MTFNFRUsgKi8KKworYmxraWRfbG9mZl90IGJsa2lkX2xsc2VlayhpbnQgZmQsIGJsa2lkX2xvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpCit7CisJYmxraWRfbG9mZl90IHJlc3VsdDsKKwlzdGF0aWMgaW50IGRvX2NvbXBhdCA9IDA7CisKKwlpZiAoKHNpemVvZihvZmZfdCkgPj0gc2l6ZW9mKGJsa2lkX2xvZmZfdCkpIHx8CisJICAgIChvZmZzZXQgPCAoKGJsa2lkX2xvZmZfdCkgMSA8PCAoKHNpemVvZihvZmZfdCkqOCkgLTEpKSkpCisJCXJldHVybiBsc2VlayhmZCwgKG9mZl90KSBvZmZzZXQsIHdoZW5jZSk7CisKKwlpZiAoZG9fY29tcGF0KSB7CisJCWVycm5vID0gRU9WRVJGTE9XOworCQlyZXR1cm4gLTE7CisJfQorCisJcmVzdWx0ID0gbXlfbGxzZWVrKGZkLCBvZmZzZXQsIHdoZW5jZSk7CisJaWYgKHJlc3VsdCA9PSAtMSAmJiBlcnJubyA9PSBFTk9TWVMpIHsKKwkJLyoKKwkJICogSnVzdCBpbiBjYXNlIHRoaXMgY29kZSBydW5zIG9uIHRvcCBvZiBhbiBvbGQga2VybmVsCisJCSAqIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgdGhlIGxsc2VlayBzeXN0ZW0gY2FsbAorCQkgKi8KKwkJZG9fY29tcGF0Kys7CisJCWVycm5vID0gRU9WRVJGTE9XOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisjZWxzZSAvKiAhbGludXggKi8KKworI2lmbmRlZiBFT1ZFUkZMT1cKKyNpZmRlZiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQKKyNkZWZpbmUgRU9WRVJGTE9XIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVAorI2Vsc2UKKyNkZWZpbmUgRU9WRVJGTE9XIDExMgorI2VuZGlmCisjZW5kaWYKKworYmxraWRfbG9mZl90IGJsa2lkX2xsc2VlayhpbnQgZmQsIGJsa2lkX2xvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCit7CisjaWYgZGVmaW5lZChIQVZFX0xTRUVLNjQpICYmIGRlZmluZWQoSEFWRV9MU0VFSzY0X1BST1RPVFlQRSkKKwlyZXR1cm4gbHNlZWs2NCAoZmQsIG9mZnNldCwgb3JpZ2luKTsKKyNlbHNlCisJaWYgKChzaXplb2Yob2ZmX3QpIDwgc2l6ZW9mKGJsa2lkX2xvZmZfdCkpICYmCisJICAgIChvZmZzZXQgPj0gKChibGtpZF9sb2ZmX3QpIDEgPDwgKChzaXplb2Yob2ZmX3QpKjgpIC0gMSkpKSkgeworCQllcnJubyA9IEVPVkVSRkxPVzsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gbHNlZWsoZmQsIChvZmZfdCkgb2Zmc2V0LCBvcmlnaW4pOworI2VuZGlmCit9CisKKyNlbmRpZgkvKiBsaW51eCAqLworCisKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC9wcm9iZS5jIGIvbGliL2Jsa2lkL3Byb2JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI3OTdhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC9wcm9iZS5jCkBAIC0wLDAgKzEsMTY4NCBAQAorLyoKKyAqIHByb2JlLmMgLSBpZGVudGlmeSBhIGJsb2NrIGRldmljZSBieSBpdHMgY29udGVudHMsIGFuZCByZXR1cm4gYSBkZXYKKyAqICAgICAgICAgICBzdHJ1Y3Qgd2l0aCB0aGUgZGV0YWlscworICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBieSBBbmRyaWVzIEJyb3V3ZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMyBieSBUaGVvZG9yZSBUcydvCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgYnkgQW5kcmVhcyBEaWxnZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCBLYXkgU2lldmVycyA8a2F5LnNpZXZlcnNAdnJmeS5vcmc+CisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX01LREVWX0gKKyNpbmNsdWRlIDxzeXMvbWtkZXYuaD4KKyNlbmRpZgorI2lmZGVmIF9fbGludXhfXworI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSAiYmxraWRQLmgiCisjaW5jbHVkZSAidXVpZC91dWlkLmgiCisjaW5jbHVkZSAicHJvYmUuaCIKKworc3RhdGljIGludCBmaWd1cmVfbGFiZWxfbGVuKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxhYmVsLCBpbnQgbGVuKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IGxhYmVsICsgbGVuIC0gMTsKKworCXdoaWxlICgoKmVuZCA9PSAnICcgfHwgKmVuZCA9PSAwKSAmJiBlbmQgPj0gbGFiZWwpCisJCS0tZW5kOworCWlmIChlbmQgPj0gbGFiZWwpCisJCXJldHVybiBlbmQgLSBsYWJlbCArIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpnZXRfYnVmZmVyKHN0cnVjdCBibGtpZF9wcm9iZSAqcHIsCisJCQkgIGJsa2lkX2xvZmZfdCBvZmYsIHNpemVfdCBsZW4pCit7CisJc3NpemVfdAkJcmV0X3JlYWQ7CisJdW5zaWduZWQgY2hhcgkqbmV3YnVmOworCisJaWYgKG9mZiArIGxlbiA8PSBTQl9CVUZGRVJfU0laRSkgeworCQlpZiAoIXByLT5zYmJ1ZikgeworCQkJcHItPnNiYnVmID0gbWFsbG9jKFNCX0JVRkZFUl9TSVpFKTsKKwkJCWlmICghcHItPnNiYnVmKQorCQkJCXJldHVybiBOVUxMOworCQkJaWYgKGxzZWVrKHByLT5mZCwgMCwgU0VFS19TRVQpIDwgMCkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCXJldF9yZWFkID0gcmVhZChwci0+ZmQsIHByLT5zYmJ1ZiwgU0JfQlVGRkVSX1NJWkUpOworCQkJaWYgKHJldF9yZWFkIDwgMCkKKwkJCQlyZXRfcmVhZCA9IDA7CisJCQlwci0+c2JfdmFsaWQgPSByZXRfcmVhZDsKKwkJfQorCQlpZiAob2ZmK2xlbiA+IHByLT5zYl92YWxpZCkKKwkJCXJldHVybiBOVUxMOworCQlyZXR1cm4gcHItPnNiYnVmICsgb2ZmOworCX0gZWxzZSB7CisJCWlmIChsZW4gPiBwci0+YnVmX21heCkgeworCQkJbmV3YnVmID0gcmVhbGxvYyhwci0+YnVmLCBsZW4pOworCQkJaWYgKG5ld2J1ZiA9PSBOVUxMKQorCQkJCXJldHVybiBOVUxMOworCQkJcHItPmJ1ZiA9IG5ld2J1ZjsKKwkJCXByLT5idWZfbWF4ID0gbGVuOworCQl9CisJCWlmIChibGtpZF9sbHNlZWsocHItPmZkLCBvZmYsIFNFRUtfU0VUKSA8IDApCisJCQlyZXR1cm4gTlVMTDsKKwkJcmV0X3JlYWQgPSByZWFkKHByLT5mZCwgcHItPmJ1ZiwgbGVuKTsKKwkJaWYgKHJldF9yZWFkICE9IChzc2l6ZV90KSBsZW4pCisJCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIHByLT5idWY7CisJfQorfQorCisKKy8qCisgKiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGNvZGUgdG8gY2hlY2sgZm9yIGFuIE1EUkFJRCBkZXZpY2UuICBXZSBkbworICogdGhpcyBzcGVjaWFsIHNpbmNlIGl0IHJlcXVpcmVzIGNoZWNraW5nIGZvciBhIHN1cGVyYmxvY2sgYXQgdGhlIGVuZAorICogb2YgdGhlIGRldmljZS4KKyAqLworc3RhdGljIGludCBjaGVja19tZHJhaWQoaW50IGZkLCB1bnNpZ25lZCBjaGFyICpyZXRfdXVpZCkKK3sKKwlzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfcyAqbWQ7CisJYmxraWRfbG9mZl90CQlvZmZzZXQ7CisJY2hhcgkJCWJ1Zls0MDk2XTsKKworCWlmIChmZCA8IDApCisJCXJldHVybiAtQkxLSURfRVJSX1BBUkFNOworCisJb2Zmc2V0ID0gKGJsa2lkX2dldF9kZXZfc2l6ZShmZCkgJiB+KChibGtpZF9sb2ZmX3QpNjU1MzUpKSAtIDY1NTM2OworCisJaWYgKGJsa2lkX2xsc2VlayhmZCwgb2Zmc2V0LCAwKSA8IDAgfHwKKwkgICAgcmVhZChmZCwgYnVmLCA0MDk2KSAhPSA0MDk2KQorCQlyZXR1cm4gLUJMS0lEX0VSUl9JTzsKKworCS8qIENoZWNrIGZvciBtYWdpYyBudW1iZXIgKi8KKwlpZiAobWVtY21wKCJcMjUxK05cMzc0IiwgYnVmLCA0KSAmJiBtZW1jbXAoIlwzNzROK1wyNTEiLCBidWYsIDQpKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworCWlmICghcmV0X3V1aWQpCisJCXJldHVybiAwOworCSpyZXRfdXVpZCA9IDA7CisKKwkvKiBUaGUgTUQgVVVJRCBpcyBub3QgY29udGlndW91cyBpbiB0aGUgc3VwZXJibG9jaywgbWFrZSBpdCBzbyAqLworCW1kID0gKHN0cnVjdCBtZHBfc3VwZXJibG9ja19zICopYnVmOworCWlmIChtZC0+c2V0X3V1aWQwIHx8IG1kLT5zZXRfdXVpZDEgfHwgbWQtPnNldF91dWlkMiB8fCBtZC0+c2V0X3V1aWQzKSB7CisJCW1lbWNweShyZXRfdXVpZCwgJm1kLT5zZXRfdXVpZDAsIDQpOworCQltZW1jcHkocmV0X3V1aWQgKyA0LCAmbWQtPnNldF91dWlkMSwgMTIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X3V1aWQoYmxraWRfZGV2IGRldiwgdXVpZF90IHV1aWQsIGNvbnN0IGNoYXIgKnRhZykKK3sKKwljaGFyCXN0clszN107CisKKwlpZiAoIXV1aWRfaXNfbnVsbCh1dWlkKSkgeworCQl1dWlkX3VucGFyc2UodXVpZCwgc3RyKTsKKwkJYmxraWRfc2V0X3RhZyhkZXYsIHRhZyA/IHRhZyA6ICJVVUlEIiwgc3RyLCBzaXplb2Yoc3RyKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBnZXRfZXh0Ml9pbmZvKGJsa2lkX2RldiBkZXYsIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQsCisJCQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqZXMgPSAoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKikgYnVmOworCWNvbnN0IGNoYXIgKmxhYmVsID0gMDsKKworCURCRyhERUJVR19QUk9CRSwgcHJpbnRmKCJleHQyX3NiLmNvbXBhdCA9ICUwOFg6JTA4WDolMDhYXG4iLAorCQkgICBibGtpZF9sZTMyKGVzLT5zX2ZlYXR1cmVfY29tcGF0KSwKKwkJICAgYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX2luY29tcGF0KSwKKwkJICAgYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX3JvX2NvbXBhdCkpKTsKKworCWlmIChzdHJsZW4oZXMtPnNfdm9sdW1lX25hbWUpKQorCQlsYWJlbCA9IGVzLT5zX3ZvbHVtZV9uYW1lOworCWJsa2lkX3NldF90YWcoZGV2LCAiTEFCRUwiLCBsYWJlbCwgc2l6ZW9mKGVzLT5zX3ZvbHVtZV9uYW1lKSk7CisKKwlzZXRfdXVpZChkZXYsIGVzLT5zX3V1aWQsIDApOworCisJaWYgKChlcy0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwpICYmCisJICAgICF1dWlkX2lzX251bGwoZXMtPnNfam91cm5hbF91dWlkKSkKKwkJc2V0X3V1aWQoZGV2LCBlcy0+c19qb3VybmFsX3V1aWQsICJFWFRfSk9VUk5BTCIpOworCisJaWYgKHN0cmNtcChpZC0+YmltX3R5cGUsICJleHQyIikgJiYKKwkgICAgKChibGtpZF9sZTMyKGVzLT5zX2ZlYXR1cmVfaW5jb21wYXQpICYKKwkgICAgICBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfVU5TVVBQT1JURUQpID09IDApKQorCQlibGtpZF9zZXRfdGFnKGRldiwgIlNFQ19UWVBFIiwgImV4dDIiLCBzaXplb2YoImV4dDIiKSk7Cit9CisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgYSBmaWxlc3lzdGVtIGlzIGluIC9wcm9jL2ZpbGVzeXN0ZW1zLgorICogUmV0dXJucyAxIGlmIGZvdW5kLCAwIGlmIG5vdAorICovCitzdGF0aWMgaW50IGZzX3Byb2NfY2hlY2soY29uc3QgY2hhciAqZnNfbmFtZSkKK3sKKwlGSUxFCSpmOworCWNoYXIJYnVmWzgwXSwgKmNwLCAqdDsKKworCWYgPSBmb3BlbigiL3Byb2MvZmlsZXN5c3RlbXMiLCAiciIpOworCWlmICghZikKKwkJcmV0dXJuICgwKTsKKwl3aGlsZSAoIWZlb2YoZikpIHsKKwkJaWYgKCFmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSkKKwkJCWJyZWFrOworCQljcCA9IGJ1ZjsKKwkJaWYgKCFpc3NwYWNlKCpjcCkpIHsKKwkJCXdoaWxlICgqY3AgJiYgIWlzc3BhY2UoKmNwKSkKKwkJCQljcCsrOworCQl9CisJCXdoaWxlICgqY3AgJiYgaXNzcGFjZSgqY3ApKQorCQkJY3ArKzsKKwkJaWYgKCh0ID0gc3RyY2hyKGNwLCAnXG4nKSkgIT0gTlVMTCkKKwkJCSp0ID0gMDsKKwkJaWYgKCh0ID0gc3RyY2hyKGNwLCAnXHQnKSkgIT0gTlVMTCkKKwkJCSp0ID0gMDsKKwkJaWYgKCh0ID0gc3RyY2hyKGNwLCAnICcpKSAhPSBOVUxMKQorCQkJKnQgPSAwOworCQlpZiAoIXN0cmNtcChmc19uYW1lLCBjcCkpIHsKKwkJCWZjbG9zZShmKTsKKwkJCXJldHVybiAoMSk7CisJCX0KKwl9CisJZmNsb3NlKGYpOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgYSBmaWxlc3lzdGVtIGlzIGF2YWlsYWJsZSBhcyBhIG1vZHVsZQorICogUmV0dXJucyAxIGlmIGZvdW5kLCAwIGlmIG5vdAorICovCitzdGF0aWMgaW50IGNoZWNrX2Zvcl9tb2R1bGVzKGNvbnN0IGNoYXIgKmZzX25hbWUpCit7CisjaWZkZWYgX19saW51eF9fCisJc3RydWN0IHV0c25hbWUJdXRzOworCUZJTEUJCSpmOworCWNoYXIJCWJ1ZlsxMDI0XSwgKmNwOworCWludAkJbmFtZXN6OworCisJaWYgKHVuYW1lKCZ1dHMpKQorCQlyZXR1cm4gKDApOworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIvbGliL21vZHVsZXMvJXMvbW9kdWxlcy5kZXAiLCB1dHMucmVsZWFzZSk7CisKKwlmID0gZm9wZW4oYnVmLCAiciIpOworCWlmICghZikKKwkJcmV0dXJuICgwKTsKKworCW5hbWVzeiA9IHN0cmxlbihmc19uYW1lKTsKKworCXdoaWxlICghZmVvZihmKSkgeworCQlpZiAoIWZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKQorCQkJYnJlYWs7CisJCWlmICgoY3AgPSBzdHJjaHIoYnVmLCAnOicpKSAhPSBOVUxMKQorCQkJKmNwID0gMDsKKwkJZWxzZQorCQkJY29udGludWU7CisJCWlmICgoY3AgPSBzdHJyY2hyKGJ1ZiwgJy8nKSkgIT0gTlVMTCkKKwkJCWNwKys7CisJCWVsc2UKKwkJCWNwID0gYnVmOworCQlpZiAoIXN0cm5jbXAoY3AsIGZzX25hbWUsIG5hbWVzeikgJiYKKwkJICAgICghc3RyY21wKGNwICsgbmFtZXN6LCAiLmtvIikgfHwKKwkJICAgICAhc3RyY21wKGNwICsgbmFtZXN6LCAiLmtvLmd6IikpKSB7CisJCQlmY2xvc2UoZik7CisJCQlyZXR1cm4gKDEpOworCQl9CisJfQorCWZjbG9zZShmKTsKKyNlbmRpZgorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQgbGludXhfdmVyc2lvbl9jb2RlKHZvaWQpCit7CisjaWZkZWYgX19saW51eF9fCisJc3RydWN0IHV0c25hbWUJdXQ7CisJc3RhdGljIGludAl2ZXJzaW9uX2NvZGUgPSAtMTsKKwlpbnQJCW1ham9yLCBtaW5vciwgcmV2OworCWNoYXIJCSplbmRwdHI7CisJY29uc3QgY2hhciAJKmNwOworCisJaWYgKHZlcnNpb25fY29kZSA+IDApCisJCXJldHVybiB2ZXJzaW9uX2NvZGU7CisKKwlpZiAodW5hbWUoJnV0KSkKKwkJcmV0dXJuIDA7CisJY3AgPSB1dC5yZWxlYXNlOworCisJbWFqb3IgPSBzdHJ0b2woY3AsICZlbmRwdHIsIDEwKTsKKwlpZiAoY3AgPT0gZW5kcHRyIHx8ICplbmRwdHIgIT0gJy4nKQorCQlyZXR1cm4gMDsKKwljcCA9IGVuZHB0ciArIDE7CisJbWlub3IgPSBzdHJ0b2woY3AsICZlbmRwdHIsIDEwKTsKKwlpZiAoY3AgPT0gZW5kcHRyIHx8ICplbmRwdHIgIT0gJy4nKQorCQlyZXR1cm4gMDsKKwljcCA9IGVuZHB0ciArIDE7CisJcmV2ID0gc3RydG9sKGNwLCAmZW5kcHRyLCAxMCk7CisJaWYgKGNwID09IGVuZHB0cikKKwkJcmV0dXJuIDA7CisJdmVyc2lvbl9jb2RlID0gKCgobWFqb3IgKiAyNTYpICsgbWlub3IpICogMjU2KSArIHJldjsKKwlyZXR1cm4gdmVyc2lvbl9jb2RlOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCisjZGVmaW5lIEVYVDRfU1VQUE9SVFNfRVhUMiAoMiAqIDY1NTM2ICsgNioyNTYgKyAyOSkKKworc3RhdGljIGludCBzeXN0ZW1fc3VwcG9ydHNfZXh0Mih2b2lkKQoreworCXN0YXRpYyB0aW1lX3QJbGFzdF9jaGVjayA9IDA7CisJc3RhdGljIGludAlyZXQgPSAtMTsKKwl0aW1lX3QJCW5vdyA9IHRpbWUoMCk7CisKKwlpZiAocmV0ICE9IC0xIHx8IChub3cgLSBsYXN0X2NoZWNrKSA8IDUpCisJCXJldHVybiByZXQ7CisJbGFzdF9jaGVjayA9IG5vdzsKKwlyZXQgPSAoZnNfcHJvY19jaGVjaygiZXh0MiIpIHx8IGNoZWNrX2Zvcl9tb2R1bGVzKCJleHQyIikpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3lzdGVtX3N1cHBvcnRzX2V4dDQodm9pZCkKK3sKKwlzdGF0aWMgdGltZV90CWxhc3RfY2hlY2sgPSAwOworCXN0YXRpYyBpbnQJcmV0ID0gLTE7CisJdGltZV90CQlub3cgPSB0aW1lKDApOworCisJaWYgKHJldCAhPSAtMSB8fCAobm93IC0gbGFzdF9jaGVjaykgPCA1KQorCQlyZXR1cm4gcmV0OworCWxhc3RfY2hlY2sgPSBub3c7CisJcmV0ID0gKGZzX3Byb2NfY2hlY2soImV4dDQiKSB8fCBjaGVja19mb3JfbW9kdWxlcygiZXh0NCIpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHN5c3RlbV9zdXBwb3J0c19leHQ0ZGV2KHZvaWQpCit7CisJc3RhdGljIHRpbWVfdAlsYXN0X2NoZWNrID0gMDsKKwlzdGF0aWMgaW50CXJldCA9IC0xOworCXRpbWVfdAkJbm93ID0gdGltZSgwKTsKKworCWlmIChyZXQgIT0gLTEgfHwgKG5vdyAtIGxhc3RfY2hlY2spIDwgNSkKKwkJcmV0dXJuIHJldDsKKwlsYXN0X2NoZWNrID0gbm93OworCXJldCA9IChmc19wcm9jX2NoZWNrKCJleHQ0ZGV2IikgfHwgY2hlY2tfZm9yX21vZHVsZXMoImV4dDRkZXYiKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwcm9iZV9leHQ0ZGV2KHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsCisJCQkgc3RydWN0IGJsa2lkX21hZ2ljICppZCwKKwkJCSB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzOworCWVzID0gKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICopYnVmOworCisJLyogRGlzdGluZ3Vpc2ggZnJvbSBqYmQgKi8KKwlpZiAoYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX2luY29tcGF0KSAmCisJICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVikKKwkJcmV0dXJuIC1CTEtJRF9FUlJfUEFSQU07CisKKwkvKiAKKwkgKiBJZiB0aGUgZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIGEgam91cm5hbCBhbmQgZXh0MiBhbmQgZXh0NAorCSAqIGlzIG5vdCBwcmVzZW50LCB0aGVuIGZvcmNlIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYXMgYW4KKwkgKiBleHQ0ZGV2IGZpbGVzeXN0ZW0uCisJICovCisJaWYgKCEoYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX2NvbXBhdCkgJgorCSAgICAgIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwpICYmCisJICAgICFzeXN0ZW1fc3VwcG9ydHNfZXh0MigpICYmICFzeXN0ZW1fc3VwcG9ydHNfZXh0NCgpICYmCisJICAgIHN5c3RlbV9zdXBwb3J0c19leHQ0ZGV2KCkgJiYKKwkgICAgbGludXhfdmVyc2lvbl9jb2RlKCkgPj0gRVhUNF9TVVBQT1JUU19FWFQyKQorCQlnb3RvIGZvcmNlX2V4dDRkZXY7CisKKwkvKgorCSAqIElmIHRoZSBmaWxlc3lzdGVtIGlzIG1hcmtlZCBhcyBPSyBmb3IgdXNlIGJ5IGluLWRldmVsb3BtZW50CisJICogZmlsZXN5c3RlbSBjb2RlLCBidXQgZXh0NGRldiBpcyBub3Qgc3VwcG9ydGVkLCBhbmQgZXh0NCBpcywKKwkgKiB0aGVuIGRvbid0IGNhbGwgb3Vyc2VsdmVzIGV4dDRkZXYsIHNpbmNlIHdlIHNob3VsZCBiZQorCSAqIGRldGVjdGVkIGFzIGV4dDQgaW4gdGhhdCBjYXNlLgorCSAqCisJICogSWYgdGhlIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGFzIGluIHVzZSBieSBwcm9kdWN0aW9uCisJICogZmlsZXN5c3RlbSwgdGhlbiBpdCBjYW4gb25seSBiZSB1c2VkIGJ5IGV4dDQgYW5kIE5PVCBieQorCSAqIGV4dDRkZXYsIHNvIGFsd2F5cyBkaXNjbGFpbSB3ZSBhcmUgZXh0NGRldiBpbiB0aGF0IGNhc2UuCisJICovCisJaWYgKGJsa2lkX2xlMzIoZXMtPnNfZmxhZ3MpICYgRVhUMl9GTEFHU19URVNUX0ZJTEVTWVMpIHsKKwkJaWYgKCFzeXN0ZW1fc3VwcG9ydHNfZXh0NGRldigpICYmIHN5c3RlbV9zdXBwb3J0c19leHQ0KCkpCisJCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKwl9IGVsc2UKKwkJcmV0dXJuIC1CTEtJRF9FUlJfUEFSQU07CisKK2ZvcmNlX2V4dDRkZXY6CisgICAgCWdldF9leHQyX2luZm8ocHJvYmUtPmRldiwgaWQsIGJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfZXh0NChzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLCBzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkLAorCQkgICAgICB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzOworCWVzID0gKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICopYnVmOworCisJLyogRGlzdGluZ3Vpc2ggZnJvbSBqYmQgKi8KKwlpZiAoYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX2luY29tcGF0KSAmCisJICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVikKKwkJcmV0dXJuIC1CTEtJRF9FUlJfUEFSQU07CisKKwkvKiAKKwkgKiBJZiB0aGUgZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIGEgam91cm5hbCBhbmQgZXh0MiBpcyBub3QKKwkgKiBwcmVzZW50LCB0aGVuIGZvcmNlIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYXMgYW4gZXh0MgorCSAqIGZpbGVzeXN0ZW0uCisJICovCisJaWYgKCEoYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX2NvbXBhdCkgJgorCSAgICAgIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwpICYmCisJICAgICFzeXN0ZW1fc3VwcG9ydHNfZXh0MigpICYmIHN5c3RlbV9zdXBwb3J0c19leHQ0KCkgJiYKKwkgICAgbGludXhfdmVyc2lvbl9jb2RlKCkgPj0gRVhUNF9TVVBQT1JUU19FWFQyKQorCQlnb3RvIGZvcmNlX2V4dDQ7CisKKwkvKiBFeHQ0IGhhcyBhdCBsZWFzdCBvbmUgZmVhdHVyZSB3aGljaCBleHQzIGRvZXNuJ3QgdW5kZXJzdGFuZCAqLworCWlmICghKGJsa2lkX2xlMzIoZXMtPnNfZmVhdHVyZV9yb19jb21wYXQpICYKKwkgICAgICBFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX1VOU1VQUE9SVEVEKSAmJgorCSAgICAhKGJsa2lkX2xlMzIoZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCkgJgorCSAgICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9VTlNVUFBPUlRFRCkpCisJCXJldHVybiAtQkxLSURfRVJSX1BBUkFNOworCitmb3JjZV9leHQ0OgorCS8qCisJICogSWYgdGhlIGZpbGVzeXN0ZW0gaXMgYSBPSyBmb3IgdXNlIGJ5IGluLWRldmVsb3BtZW50CisJICogZmlsZXN5c3RlbSBjb2RlLCBhbmQgZXh0NGRldiBpcyBzdXBwb3J0ZWQgb3IgZXh0NCBpcyBub3QKKwkgKiBzdXBwb3J0ZWQsIHRoZW4gZG9uJ3QgY2FsbCBvdXJzZWx2ZXMgZXh0NCwgc28gd2UgY2FuIHJlZG8KKwkgKiB0aGUgZGV0ZWN0aW9uIGFuZCBtYXJrIHRoZSBmaWxlc3lzdGVtIGFzIGV4dDRkZXYuCisJICoKKwkgKiBJZiB0aGUgZmlsZXN5c3RlbSBpcyBtYXJrZWQgYXMgaW4gdXNlIGJ5IHByb2R1Y3Rpb24KKwkgKiBmaWxlc3lzdGVtLCB0aGVuIGl0IGNhbiBvbmx5IGJlIHVzZWQgYnkgZXh0NCBhbmQgTk9UIGJ5CisJICogZXh0NGRldi4KKwkgKi8KKwlpZiAoYmxraWRfbGUzMihlcy0+c19mbGFncykgJiBFWFQyX0ZMQUdTX1RFU1RfRklMRVNZUykgeworCQlpZiAoc3lzdGVtX3N1cHBvcnRzX2V4dDRkZXYoKSB8fCAhc3lzdGVtX3N1cHBvcnRzX2V4dDQoKSkKKwkJCXJldHVybiAtQkxLSURfRVJSX1BBUkFNOworCX0KKyAgICAJZ2V0X2V4dDJfaW5mbyhwcm9iZS0+ZGV2LCBpZCwgYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9iZV9leHQzKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqZXM7CisJZXMgPSAoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKilidWY7CisKKwkvKiBleHQzIHJlcXVpcmVzIGpvdXJuYWwgKi8KKwlpZiAoIShibGtpZF9sZTMyKGVzLT5zX2ZlYXR1cmVfY29tcGF0KSAmCisJICAgICAgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCkpCisJCXJldHVybiAtQkxLSURfRVJSX1BBUkFNOworCisJLyogQW55IGZlYXR1cmVzIHdoaWNoIGV4dDMgZG9lc24ndCB1bmRlcnN0YW5kICovCisJaWYgKChibGtpZF9sZTMyKGVzLT5zX2ZlYXR1cmVfcm9fY29tcGF0KSAmCisJICAgICBFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX1VOU1VQUE9SVEVEKSB8fAorCSAgICAoYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX2luY29tcGF0KSAmCisJICAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfVU5TVVBQT1JURUQpKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworICAgIAlnZXRfZXh0Ml9pbmZvKHByb2JlLT5kZXYsIGlkLCBidWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2JlX2V4dDIoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwgc3RydWN0IGJsa2lkX21hZ2ljICppZCwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICplczsKKworCWVzID0gKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICopYnVmOworCisJLyogRGlzdGluZ3Vpc2ggYmV0d2VlbiBleHQzIGFuZCBleHQyICovCisJaWYgKChibGtpZF9sZTMyKGVzLT5zX2ZlYXR1cmVfY29tcGF0KSAmCisJICAgICAgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCkpCisJCXJldHVybiAtQkxLSURfRVJSX1BBUkFNOworCisJLyogQW55IGZlYXR1cmVzIHdoaWNoIGV4dDIgZG9lc24ndCB1bmRlcnN0YW5kICovCisJaWYgKChibGtpZF9sZTMyKGVzLT5zX2ZlYXR1cmVfcm9fY29tcGF0KSAmCisJICAgICBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1VOU1VQUE9SVEVEKSB8fAorCSAgICAoYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX2luY29tcGF0KSAmCisJICAgICBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfVU5TVVBQT1JURUQpKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworCS8qIAorCSAqIElmIGV4dDIgaXMgbm90IHByZXNlbnQsIGJ1dCBleHQ0IG9yIGV4dDRkZXYgYXJlLCB0aGVuCisJICogZGlzY2xhaW0gd2UgYXJlIGV4dDIKKwkgKi8KKwlpZiAoIXN5c3RlbV9zdXBwb3J0c19leHQyKCkgJiYKKwkgICAgKHN5c3RlbV9zdXBwb3J0c19leHQ0KCkgfHwgc3lzdGVtX3N1cHBvcnRzX2V4dDRkZXYoKSkgJiYKKwkgICAgbGludXhfdmVyc2lvbl9jb2RlKCkgPj0gRVhUNF9TVVBQT1JUU19FWFQyKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworCWdldF9leHQyX2luZm8ocHJvYmUtPmRldiwgaWQsIGJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfamJkKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQsCisJCSAgICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICplcyA9IChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqKSBidWY7CisKKwlpZiAoIShibGtpZF9sZTMyKGVzLT5zX2ZlYXR1cmVfaW5jb21wYXQpICYKKwkgICAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfSk9VUk5BTF9ERVYpKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworCWdldF9leHQyX2luZm8ocHJvYmUtPmRldiwgaWQsIGJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBGQVRfQVRUUl9WT0xVTUVfSUQJCTB4MDgKKyNkZWZpbmUgRkFUX0FUVFJfRElSCQkJMHgxMAorI2RlZmluZSBGQVRfQVRUUl9MT05HX05BTUUJCTB4MGYKKyNkZWZpbmUgRkFUX0FUVFJfTUFTSwkJCTB4M2YKKyNkZWZpbmUgRkFUX0VOVFJZX0ZSRUUJCQkweGU1CisKK3N0YXRpYyBjb25zdCBjaGFyICpub19uYW1lID0gIk5PIE5BTUUgICAgIjsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnNlYXJjaF9mYXRfbGFiZWwoc3RydWN0IHZmYXRfZGlyX2VudHJ5ICpkaXIsIGludCBjb3VudCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChkaXJbaV0ubmFtZVswXSA9PSAweDAwKQorCQkJYnJlYWs7CisKKwkJaWYgKChkaXJbaV0ubmFtZVswXSA9PSBGQVRfRU5UUllfRlJFRSkgfHwKKwkJICAgIChkaXJbaV0uY2x1c3Rlcl9oaWdoICE9IDAgfHwgZGlyW2ldLmNsdXN0ZXJfbG93ICE9IDApIHx8CisJCSAgICAoKGRpcltpXS5hdHRyICYgRkFUX0FUVFJfTUFTSykgPT0gRkFUX0FUVFJfTE9OR19OQU1FKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoZGlyW2ldLmF0dHIgJiAoRkFUX0FUVFJfVk9MVU1FX0lEIHwgRkFUX0FUVFJfRElSKSkgPT0KKwkJICAgIEZBVF9BVFRSX1ZPTFVNRV9JRCkgeworCQkJcmV0dXJuIGRpcltpXS5uYW1lOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKiBGQVQgbGFiZWwgZXh0cmFjdGlvbiBmcm9tIHRoZSByb290IGRpcmVjdG9yeSB0YWtlbiBmcm9tIEtheQorICogU2lldmVycydzIHZvbHVtZV9pZCBsaWJyYXJ5ICovCitzdGF0aWMgaW50IHByb2JlX2ZhdChzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkgICAgICBzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkIF9fQkxLSURfQVRUUigodW51c2VkKSksCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdmZhdF9zdXBlcl9ibG9jayAqdnMgPSAoc3RydWN0IHZmYXRfc3VwZXJfYmxvY2sgKikgYnVmOworCXN0cnVjdCBtc2Rvc19zdXBlcl9ibG9jayAqbXMgPSAoc3RydWN0IG1zZG9zX3N1cGVyX2Jsb2NrICopIGJ1ZjsKKwlzdHJ1Y3QgdmZhdF9kaXJfZW50cnkgKmRpcjsKKwljaGFyIHNlcm5vWzEwXTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpsYWJlbCA9IDAsICp2b2xfbGFiZWwgPSAwLCAqdG1wOworCXVuc2lnbmVkIGNoYXIJKnZvbF9zZXJubzsKKwlpbnQgbGFiZWxfbGVuID0gMCwgbWF4bG9vcCA9IDEwMDsKKwlfX3UxNiBzZWN0b3Jfc2l6ZSwgZGlyX2VudHJpZXMsIHJlc2VydmVkOworCV9fdTMyIHNlY3RfY291bnQsIGZhdF9zaXplLCBkaXJfc2l6ZSwgY2x1c3Rlcl9jb3VudCwgZmF0X2xlbmd0aDsKKwlfX3UzMiBidWZfc2l6ZSwgc3RhcnRfZGF0YV9zZWN0LCBuZXh0LCByb290X3N0YXJ0LCByb290X2Rpcl9lbnRyaWVzOworCisJLyogc2VjdG9yIHNpemUgY2hlY2sgKi8KKwl0bXAgPSAodW5zaWduZWQgY2hhciAqKSZtcy0+bXNfc2VjdG9yX3NpemU7CisJc2VjdG9yX3NpemUgPSB0bXBbMF0gKyAodG1wWzFdIDw8IDgpOworCWlmIChzZWN0b3Jfc2l6ZSAhPSAweDIwMCAmJiBzZWN0b3Jfc2l6ZSAhPSAweDQwMCAmJgorCSAgICBzZWN0b3Jfc2l6ZSAhPSAweDgwMCAmJiBzZWN0b3Jfc2l6ZSAhPSAweDEwMDApCisJCXJldHVybiAxOworCisJdG1wID0gKHVuc2lnbmVkIGNoYXIgKikmbXMtPm1zX2Rpcl9lbnRyaWVzOworCWRpcl9lbnRyaWVzID0gdG1wWzBdICsgKHRtcFsxXSA8PCA4KTsKKwlyZXNlcnZlZCA9ICBibGtpZF9sZTE2KG1zLT5tc19yZXNlcnZlZCk7CisJdG1wID0gKHVuc2lnbmVkIGNoYXIgKikmbXMtPm1zX3NlY3RvcnM7CisJc2VjdF9jb3VudCA9IHRtcFswXSArICh0bXBbMV0gPDwgOCk7CisJaWYgKHNlY3RfY291bnQgPT0gMCkKKwkJc2VjdF9jb3VudCA9IGJsa2lkX2xlMzIobXMtPm1zX3RvdGFsX3NlY3QpOworCisJZmF0X2xlbmd0aCA9IGJsa2lkX2xlMTYobXMtPm1zX2ZhdF9sZW5ndGgpOworCWlmIChmYXRfbGVuZ3RoID09IDApCisJCWZhdF9sZW5ndGggPSBibGtpZF9sZTMyKHZzLT52c19mYXQzMl9sZW5ndGgpOworCisJZmF0X3NpemUgPSBmYXRfbGVuZ3RoICogbXMtPm1zX2ZhdHM7CisJZGlyX3NpemUgPSAoKGRpcl9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCB2ZmF0X2Rpcl9lbnRyeSkpICsKKwkJCShzZWN0b3Jfc2l6ZS0xKSkgLyBzZWN0b3Jfc2l6ZTsKKworCWNsdXN0ZXJfY291bnQgPSBzZWN0X2NvdW50IC0gKHJlc2VydmVkICsgZmF0X3NpemUgKyBkaXJfc2l6ZSk7CisJaWYgKG1zLT5tc19jbHVzdGVyX3NpemUgPT0gMCkKKwkJcmV0dXJuIDE7CisJY2x1c3Rlcl9jb3VudCAvPSBtcy0+bXNfY2x1c3Rlcl9zaXplOworCisJaWYgKGNsdXN0ZXJfY291bnQgPiBGQVQzMl9NQVgpCisJCXJldHVybiAxOworCisJaWYgKG1zLT5tc19mYXRfbGVuZ3RoKSB7CisJCS8qIHRoZSBsYWJlbCBtYXkgYmUgYW4gYXR0cmlidXRlIGluIHRoZSByb290IGRpcmVjdG9yeSAqLworCQlyb290X3N0YXJ0ID0gKHJlc2VydmVkICsgZmF0X3NpemUpICogc2VjdG9yX3NpemU7CisJCXJvb3RfZGlyX2VudHJpZXMgPSB2cy0+dnNfZGlyX2VudHJpZXNbMF0gKworCQkJKHZzLT52c19kaXJfZW50cmllc1sxXSA8PCA4KTsKKworCQlidWZfc2l6ZSA9IHJvb3RfZGlyX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IHZmYXRfZGlyX2VudHJ5KTsKKwkJZGlyID0gKHN0cnVjdCB2ZmF0X2Rpcl9lbnRyeSAqKSBnZXRfYnVmZmVyKHByb2JlLCByb290X3N0YXJ0LAorCQkJCQkJCSAgIGJ1Zl9zaXplKTsKKwkJaWYgKGRpcikKKwkJCXZvbF9sYWJlbCA9IHNlYXJjaF9mYXRfbGFiZWwoZGlyLCByb290X2Rpcl9lbnRyaWVzKTsKKworCQlpZiAoIXZvbF9sYWJlbCB8fCAhbWVtY21wKHZvbF9sYWJlbCwgbm9fbmFtZSwgMTEpKQorCQkJdm9sX2xhYmVsID0gbXMtPm1zX2xhYmVsOworCQl2b2xfc2Vybm8gPSBtcy0+bXNfc2Vybm87CisKKwkJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiU0VDX1RZUEUiLCAibXNkb3MiLAorCQkJICAgICAgc2l6ZW9mKCJtc2RvcyIpKTsKKwl9IGVsc2UgeworCQkvKiBTZWFyY2ggdGhlIEZBVDMyIHJvb3QgZGlyIGZvciB0aGUgbGFiZWwgYXR0cmlidXRlICovCisJCWJ1Zl9zaXplID0gdnMtPnZzX2NsdXN0ZXJfc2l6ZSAqIHNlY3Rvcl9zaXplOworCQlzdGFydF9kYXRhX3NlY3QgPSByZXNlcnZlZCArIGZhdF9zaXplOworCisJCW5leHQgPSBibGtpZF9sZTMyKHZzLT52c19yb290X2NsdXN0ZXIpOworCQl3aGlsZSAobmV4dCAmJiAtLW1heGxvb3ApIHsKKwkJCV9fdTMyIG5leHRfc2VjdF9vZmY7CisJCQlfX3U2NCBuZXh0X29mZiwgZmF0X2VudHJ5X29mZjsKKwkJCWludCBjb3VudDsKKworCQkJbmV4dF9zZWN0X29mZiA9IChuZXh0IC0gMikgKiB2cy0+dnNfY2x1c3Rlcl9zaXplOworCQkJbmV4dF9vZmYgPSAoX191NjQpIChzdGFydF9kYXRhX3NlY3QgKyBuZXh0X3NlY3Rfb2ZmKSAqCisJCQkJc2VjdG9yX3NpemU7CisKKwkJCWRpciA9IChzdHJ1Y3QgdmZhdF9kaXJfZW50cnkgKikKKwkJCQlnZXRfYnVmZmVyKHByb2JlLCBuZXh0X29mZiwgYnVmX3NpemUpOworCQkJaWYgKGRpciA9PSBOVUxMKQorCQkJCWJyZWFrOworCisJCQljb3VudCA9IGJ1Zl9zaXplIC8gc2l6ZW9mKHN0cnVjdCB2ZmF0X2Rpcl9lbnRyeSk7CisKKwkJCXZvbF9sYWJlbCA9IHNlYXJjaF9mYXRfbGFiZWwoZGlyLCBjb3VudCk7CisJCQlpZiAodm9sX2xhYmVsKQorCQkJCWJyZWFrOworCisJCQkvKiBnZXQgRkFUIGVudHJ5ICovCisJCQlmYXRfZW50cnlfb2ZmID0KKwkJCQkoKHVuc2lnbmVkIGludCkgcmVzZXJ2ZWQgKgorCQkJCSAodW5zaWduZWQgaW50KSBzZWN0b3Jfc2l6ZSkgKworCQkJCShuZXh0ICogc2l6ZW9mKF9fdTMyKSk7CisJCQlidWYgPSBnZXRfYnVmZmVyKHByb2JlLCBmYXRfZW50cnlfb2ZmLCBidWZfc2l6ZSk7CisJCQlpZiAoYnVmID09IE5VTEwpCisJCQkJYnJlYWs7CisKKwkJCS8qIHNldCBuZXh0IGNsdXN0ZXIgKi8KKwkJCW5leHQgPSBibGtpZF9sZTMyKCooKF9fdTMyICopIGJ1ZikgJiAweDBmZmZmZmZmKTsKKwkJfQorCisJCWlmICghdm9sX2xhYmVsIHx8ICFtZW1jbXAodm9sX2xhYmVsLCBub19uYW1lLCAxMSkpCisJCQl2b2xfbGFiZWwgPSB2cy0+dnNfbGFiZWw7CisJCXZvbF9zZXJubyA9IHZzLT52c19zZXJubzsKKwl9CisKKwlpZiAodm9sX2xhYmVsICYmIG1lbWNtcCh2b2xfbGFiZWwsIG5vX25hbWUsIDExKSkgeworCQlpZiAoKGxhYmVsX2xlbiA9IGZpZ3VyZV9sYWJlbF9sZW4odm9sX2xhYmVsLCAxMSkpKQorCQkJbGFiZWwgPSB2b2xfbGFiZWw7CisJfQorCisJLyogV2UgY2FuJ3QganVzdCBwcmludCB0aGVtIGFzICUwNFgsIGJlY2F1c2UgdGhleSBhcmUgdW5hbGlnbmVkICovCisJc3ByaW50ZihzZXJubywgIiUwMlglMDJYLSUwMlglMDJYIiwgdm9sX3Nlcm5vWzNdLCB2b2xfc2Vybm9bMl0sCisJCXZvbF9zZXJub1sxXSwgdm9sX3Nlcm5vWzBdKTsKKworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgKGNvbnN0IGNoYXIgKikgbGFiZWwsIGxhYmVsX2xlbik7CisJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiVVVJRCIsIHNlcm5vLCBzaXplb2Yoc2Vybm8pLTEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgRkFUIGZpbGVzeXN0ZW0gY291bGQgYmUgd2l0aG91dCBhIG1hZ2ljIHN0cmluZyBpbiBzdXBlcmJsb2NrCisgKiAoZS5nLiBvbGQgZmxvcHBpZXMpLiAgVGhpcyBoZXVyaXN0aWMgZm9yIEZBVCBkZXRlY3Rpb24gaXMgaW5zcGlyZWQKKyAqIGJ5IGh0dHA6Ly92cmZ5Lm9yZy9wcm9qZWN0cy92b2x1bWVfaWQvIGFuZCBMaW51eCBrZXJuZWwuCisgKiBbNy1KdWwtMjAwNSwgS2FyZWwgWmFrIDxremFrQHJlZGhhdC5jb20+XQorICovCitzdGF0aWMgaW50IHByb2JlX2ZhdF9ub21hZ2ljKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsCisJCQkgICAgIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCBtc2Rvc19zdXBlcl9ibG9jayAqbXM7CisKKwltcyA9IChzdHJ1Y3QgbXNkb3Nfc3VwZXJfYmxvY2sgKilidWY7CisKKwkvKiBoZWFkcyBjaGVjayAqLworCWlmIChtcy0+bXNfaGVhZHMgPT0gMCkKKwkJcmV0dXJuIDE7CisKKwkvKiBjbHVzdGVyIHNpemUgY2hlY2sqLworCWlmIChtcy0+bXNfY2x1c3Rlcl9zaXplID09IDAgfHwKKwkgICAgKG1zLT5tc19jbHVzdGVyX3NpemUgJiAobXMtPm1zX2NsdXN0ZXJfc2l6ZS0xKSkpCisJCXJldHVybiAxOworCisJLyogbWVkaWEgY2hlY2sgKi8KKwlpZiAobXMtPm1zX21lZGlhIDwgMHhmOCAmJiBtcy0+bXNfbWVkaWEgIT0gMHhmMCkKKwkJcmV0dXJuIDE7CisKKwkvKiBmYXQgY291bnRzKExpbnV4IGtlcm5lbCBleHBlY3RzIGF0IGxlYXN0IDEgRkFUIHRhYmxlKSAqLworCWlmICghbXMtPm1zX2ZhdHMpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBPUy8yIGFuZCBhcHBhcmVudGx5IERGU2VlIHdpbGwgcGxhY2UgYSBGQVQxMi8xNi1saWtlCisJICogcHNldWRvLXN1cGVyYmxvY2sgaW4gdGhlIGZpcnN0IDUxMiBieXRlcyBvZiBub24tRkFUCisJICogZmlsZXN5c3RlbXMgLS0tIGF0IGxlYXN0IEpGUyBhbmQgSFBGUywgYW5kIHBvc3NpYmx5IG90aGVycy4KKwkgKiBTbyB3ZSBleHBsaWNpdGx5IGNoZWNrIGZvciB0aG9zZSBmaWxlc3lzdGVtcyBhdCB0aGUKKwkgKiBGQVQxMi8xNiBmaWxlc3lzdGVtIG1hZ2ljIGZpZWxkIGlkZW50aWZpZXIsIGFuZCBpZiB0aGV5IGFyZQorCSAqIHByZXNlbnQsIHdlIHJ1bGUgdGhpcyBvdXQgYXMgYSBGQVQgZmlsZXN5c3RlbSwgZGVzcGl0ZSB0aGUKKwkgKiBGQVQtbGlrZSBwc2V1ZG8taGVhZGVyLgorICAgICAgICAgKi8KKwlpZiAoKG1lbWNtcChtcy0+bXNfbWFnaWMsICJKRlMgICAgICIsIDgpID09IDApIHx8CisJICAgIChtZW1jbXAobXMtPm1zX21hZ2ljLCAiSFBGUyAgICAiLCA4KSA9PSAwKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gcHJvYmVfZmF0KHByb2JlLCBpZCwgYnVmKTsKK30KKworc3RhdGljIGludCBwcm9iZV9udGZzKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsCisJCSAgICAgIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCBudGZzX3N1cGVyX2Jsb2NrICpuczsKKwlzdHJ1Y3QgbWFzdGVyX2ZpbGVfdGFibGVfcmVjb3JkICptZnQ7CisJc3RydWN0IGZpbGVfYXR0cmlidXRlICphdHRyOworCWNoYXIJCXV1aWRfc3RyWzE3XSwgbGFiZWxfc3RyWzEyOV0sICpjcDsKKwlpbnQJCWJ5dGVzX3Blcl9zZWN0b3IsIHNlY3RvcnNfcGVyX2NsdXN0ZXI7CisJaW50CQltZnRfcmVjb3JkX3NpemUsIGF0dHJfb2ZmLCBhdHRyX2xlbjsKKwl1bnNpZ25lZCBpbnQJaSwgYXR0cl90eXBlLCB2YWxfbGVuOworCWludAkJdmFsX29mZjsKKwlfX3U2NAkJbnJfY2x1c3RlcnM7CisJYmxraWRfbG9mZl90IG9mZjsKKwl1bnNpZ25lZCBjaGFyICpidWZfbWZ0LCAqdmFsOworCisJbnMgPSAoc3RydWN0IG50ZnNfc3VwZXJfYmxvY2sgKikgYnVmOworCisJYnl0ZXNfcGVyX3NlY3RvciA9IG5zLT5iaW9zX3BhcmFtZXRlcl9ibG9ja1swXSArCisJCShucy0+Ymlvc19wYXJhbWV0ZXJfYmxvY2tbMV0gIDw8IDgpOworCXNlY3RvcnNfcGVyX2NsdXN0ZXIgPSBucy0+Ymlvc19wYXJhbWV0ZXJfYmxvY2tbMl07CisKKwlpZiAoKGJ5dGVzX3Blcl9zZWN0b3IgPCA1MTIpIHx8IChzZWN0b3JzX3Blcl9jbHVzdGVyID09IDApKQorCQlyZXR1cm4gMTsKKworCWlmIChucy0+Y2x1c3Rlcl9wZXJfbWZ0X3JlY29yZCA8IDApCisJCW1mdF9yZWNvcmRfc2l6ZSA9IDEgPDwgKDAtbnMtPmNsdXN0ZXJfcGVyX21mdF9yZWNvcmQpOworCWVsc2UKKwkJbWZ0X3JlY29yZF9zaXplID0gbnMtPmNsdXN0ZXJfcGVyX21mdF9yZWNvcmQgKgorCQkJc2VjdG9yc19wZXJfY2x1c3RlciAqIGJ5dGVzX3Blcl9zZWN0b3I7CisJbnJfY2x1c3RlcnMgPSBibGtpZF9sZTY0KG5zLT5udW1iZXJfb2Zfc2VjdG9ycykgLyBzZWN0b3JzX3Blcl9jbHVzdGVyOworCisJaWYgKChibGtpZF9sZTY0KG5zLT5tZnRfY2x1c3Rlcl9sb2NhdGlvbikgPiBucl9jbHVzdGVycykgfHwKKwkgICAgKGJsa2lkX2xlNjQobnMtPm1mdF9taXJyb3JfY2x1c3Rlcl9sb2NhdGlvbikgPiBucl9jbHVzdGVycykpCisJCXJldHVybiAxOworCisJb2ZmID0gYmxraWRfbGU2NChucy0+bWZ0X21pcnJvcl9jbHVzdGVyX2xvY2F0aW9uKSAqCisJCWJ5dGVzX3Blcl9zZWN0b3IgKiBzZWN0b3JzX3Blcl9jbHVzdGVyOworCisJYnVmX21mdCA9IGdldF9idWZmZXIocHJvYmUsIG9mZiwgbWZ0X3JlY29yZF9zaXplKTsKKwlpZiAoIWJ1Zl9tZnQpCisJCXJldHVybiAxOworCisJaWYgKG1lbWNtcChidWZfbWZ0LCAiRklMRSIsIDQpKQorCQlyZXR1cm4gMTsKKworCW9mZiA9IGJsa2lkX2xlNjQobnMtPm1mdF9jbHVzdGVyX2xvY2F0aW9uKSAqIGJ5dGVzX3Blcl9zZWN0b3IgKgorCQlzZWN0b3JzX3Blcl9jbHVzdGVyOworCisJYnVmX21mdCA9IGdldF9idWZmZXIocHJvYmUsIG9mZiwgbWZ0X3JlY29yZF9zaXplKTsKKwlpZiAoIWJ1Zl9tZnQpCisJCXJldHVybiAxOworCisJaWYgKG1lbWNtcChidWZfbWZ0LCAiRklMRSIsIDQpKQorCQlyZXR1cm4gMTsKKworCW9mZiArPSBNRlRfUkVDT1JEX1ZPTFVNRSAqIG1mdF9yZWNvcmRfc2l6ZTsKKworCWJ1Zl9tZnQgPSBnZXRfYnVmZmVyKHByb2JlLCBvZmYsIG1mdF9yZWNvcmRfc2l6ZSk7CisJaWYgKCFidWZfbWZ0KQorCQlyZXR1cm4gMTsKKworCWlmIChtZW1jbXAoYnVmX21mdCwgIkZJTEUiLCA0KSkKKwkJcmV0dXJuIDE7CisKKwltZnQgPSAoc3RydWN0IG1hc3Rlcl9maWxlX3RhYmxlX3JlY29yZCAqKSBidWZfbWZ0OworCisJYXR0cl9vZmYgPSBibGtpZF9sZTE2KG1mdC0+YXR0cnNfb2Zmc2V0KTsKKwlsYWJlbF9zdHJbMF0gPSAwOworCisJd2hpbGUgKDEpIHsKKwkJYXR0ciA9IChzdHJ1Y3QgZmlsZV9hdHRyaWJ1dGUgKikgKGJ1Zl9tZnQgKyBhdHRyX29mZik7CisJCWF0dHJfbGVuID0gYmxraWRfbGUxNihhdHRyLT5sZW4pOworCQlhdHRyX3R5cGUgPSBibGtpZF9sZTMyKGF0dHItPnR5cGUpOworCQl2YWxfb2ZmID0gYmxraWRfbGUxNihhdHRyLT52YWx1ZV9vZmZzZXQpOworCQl2YWxfbGVuID0gYmxraWRfbGUzMihhdHRyLT52YWx1ZV9sZW4pOworCisJCWF0dHJfb2ZmICs9IGF0dHJfbGVuOworCisJCWlmICgoYXR0cl9vZmYgPiBtZnRfcmVjb3JkX3NpemUpIHx8CisJCSAgICAoYXR0cl9sZW4gPT0gMCkpCisJCQlicmVhazsKKworCQlpZiAoYXR0cl90eXBlID09IE1GVF9SRUNPUkRfQVRUUl9FTkQpCisJCQlicmVhazsKKworCQlpZiAoYXR0cl90eXBlID09IE1GVF9SRUNPUkRfQVRUUl9WT0xVTUVfTkFNRSkgeworCQkJaWYgKHZhbF9sZW4gPiBzaXplb2YobGFiZWxfc3RyKSkKKwkJCQl2YWxfbGVuID0gc2l6ZW9mKGxhYmVsX3N0ciktMTsKKworCQkJZm9yIChpPTAsIGNwPWxhYmVsX3N0cjsgaSA8IHZhbF9sZW47IGkrPTIsY3ArKykgeworCQkJCXZhbCA9ICgoX191OCAqKSBhdHRyKSArIHZhbF9vZmYgKyBpOworCQkJCSpjcCA9IHZhbFswXTsKKwkJCQlpZiAodmFsWzFdKQorCQkJCQkqY3AgPSAnPyc7CisJCQl9CisJCQkqY3AgPSAwOworCQl9CisJfQorCisJc3ByaW50Zih1dWlkX3N0ciwgIiUwMTZsbFgiLCBibGtpZF9sZTY0KG5zLT52b2x1bWVfc2VyaWFsKSk7CisJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiVVVJRCIsIHV1aWRfc3RyLCAwKTsKKwlpZiAobGFiZWxfc3RyWzBdKQorCQlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJMQUJFTCIsIGxhYmVsX3N0ciwgMCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBwcm9iZV94ZnMoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJICAgICBzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkIF9fQkxLSURfQVRUUigodW51c2VkKSksCisJCSAgICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCB4ZnNfc3VwZXJfYmxvY2sgKnhzOworCWNvbnN0IGNoYXIgKmxhYmVsID0gMDsKKworCXhzID0gKHN0cnVjdCB4ZnNfc3VwZXJfYmxvY2sgKilidWY7CisKKwlpZiAoc3RybGVuKHhzLT54c19mbmFtZSkpCisJCWxhYmVsID0geHMtPnhzX2ZuYW1lOworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgbGFiZWwsIHNpemVvZih4cy0+eHNfZm5hbWUpKTsKKwlzZXRfdXVpZChwcm9iZS0+ZGV2LCB4cy0+eHNfdXVpZCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfcmVpc2VyZnMoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJCSAgc3RydWN0IGJsa2lkX21hZ2ljICppZCwgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jayAqcnMgPSAoc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrICopIGJ1ZjsKKwl1bnNpZ25lZCBpbnQgYmxvY2tzaXplOworCWNvbnN0IGNoYXIgKmxhYmVsID0gMDsKKworCWJsb2Nrc2l6ZSA9IGJsa2lkX2xlMTYocnMtPnJzX2Jsb2Nrc2l6ZSk7CisKKwkvKiBUaGUgYmxvY2tzaXplIG11c3QgYmUgYXQgbGVhc3QgMWsgKi8KKwlpZiAoKGJsb2Nrc2l6ZSA+PiAxMCkgPT0gMCkKKwkJcmV0dXJuIC1CTEtJRF9FUlJfUEFSQU07CisKKwkvKiBJZiB0aGUgc3VwZXJibG9jayBpcyBpbnNpZGUgdGhlIGpvdXJuYWwsIHdlIGhhdmUgdGhlIHdyb25nIG9uZSAqLworCWlmIChpZC0+YmltX2tib2ZmLyhibG9ja3NpemU+PjEwKSA+IGJsa2lkX2xlMzIocnMtPnJzX2pvdXJuYWxfYmxvY2spKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9CSUc7CisKKwkvKiBMQUJFTC9VVUlEIGFyZSBvbmx5IHZhbGlkIGZvciBsYXRlciB2ZXJzaW9ucyBvZiBSZWlzZXJmcyB2My42LiAqLworCWlmIChpZC0+YmltX21hZ2ljWzZdID09ICcyJyB8fCBpZC0+YmltX21hZ2ljWzZdID09ICczJykgeworCQlpZiAoc3RybGVuKHJzLT5yc19sYWJlbCkpCisJCQlsYWJlbCA9IHJzLT5yc19sYWJlbDsKKwkJc2V0X3V1aWQocHJvYmUtPmRldiwgcnMtPnJzX3V1aWQsIDApOworCX0KKwlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJMQUJFTCIsIGxhYmVsLCBzaXplb2YocnMtPnJzX2xhYmVsKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9iZV9yZWlzZXJmczQoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJCSAgIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcmVpc2VyNF9zdXBlcl9ibG9jayAqcnM0ID0gKHN0cnVjdCByZWlzZXI0X3N1cGVyX2Jsb2NrICopIGJ1ZjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpsYWJlbCA9IDA7CisKKwlpZiAoc3RybGVuKChjaGFyICopIHJzNC0+cnM0X2xhYmVsKSkKKwkJbGFiZWwgPSByczQtPnJzNF9sYWJlbDsKKwlzZXRfdXVpZChwcm9iZS0+ZGV2LCByczQtPnJzNF91dWlkLCAwKTsKKwlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJMQUJFTCIsIChjb25zdCBjaGFyICopIGxhYmVsLAorCQkgICAgICBzaXplb2YocnM0LT5yczRfbGFiZWwpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2JlX2pmcyhzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkgICAgIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJICAgICB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IGpmc19zdXBlcl9ibG9jayAqanM7CisJY29uc3QgY2hhciAqbGFiZWwgPSAwOworCisJanMgPSAoc3RydWN0IGpmc19zdXBlcl9ibG9jayAqKWJ1ZjsKKworCWlmIChibGtpZF9sZTMyKGpzLT5qc19ic2l6ZSkgIT0gKDEgPDwgYmxraWRfbGUxNihqcy0+anNfbDJic2l6ZSkpKQorCQlyZXR1cm4gMTsKKworCWlmIChibGtpZF9sZTMyKGpzLT5qc19wYnNpemUpICE9ICgxIDw8IGJsa2lkX2xlMTYoanMtPmpzX2wycGJzaXplKSkpCisJCXJldHVybiAxOworCisJaWYgKChibGtpZF9sZTE2KGpzLT5qc19sMmJzaXplKSAtIGJsa2lkX2xlMTYoanMtPmpzX2wycGJzaXplKSkgIT0KKwkgICAgYmxraWRfbGUxNihqcy0+anNfbDJiZmFjdG9yKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoc3RybGVuKChjaGFyICopIGpzLT5qc19sYWJlbCkpCisJCWxhYmVsID0gKGNoYXIgKikganMtPmpzX2xhYmVsOworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgbGFiZWwsIHNpemVvZihqcy0+anNfbGFiZWwpKTsKKwlzZXRfdXVpZChwcm9iZS0+ZGV2LCBqcy0+anNfdXVpZCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfemZzKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQsCisJCSAgICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworI2lmIDAKKwljaGFyICp2ZGV2X2xhYmVsOworCWNvbnN0IGNoYXIgKnBvb2xfbmFtZSA9IDA7CisKKwkvKiByZWFkIG52cGFpciBkYXRhIGZvciBwb29sIG5hbWUsIHBvb2wgR1VJRCAoY29tcGxleCkgKi8KKwlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJMQUJFTCIsIHBvb2xfbmFtZSwgc2l6ZW9mKHBvb2xfbmFtZSkpOworCXNldF91dWlkKHByb2JlLT5kZXYsIHBvb2xfZ3VpZCwgMCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9iZV9sdWtzKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsCisJCSAgICAgICBzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkIF9fQkxLSURfQVRUUigodW51c2VkKSksCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJY2hhciB1dWlkWzQwXTsKKworCS8qIDE2OCBpcyB0aGUgb2Zmc2V0IHRvIHRoZSA0MCBjaGFyYWN0ZXIgdXVpZDoKKwkgKiBodHRwOi8vbHVrcy5lbmRvcnBoaW4ub3JnL0xVS1Mtb24tZGlzay1mb3JtYXQucGRmICovCisJc3RybmNweSh1dWlkLCAoY2hhciAqKSBidWYrMTY4LCA0MCk7CisJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiVVVJRCIsIHV1aWQsIHNpemVvZih1dWlkKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfcm9tZnMoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJICAgICAgIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgcm9tZnNfc3VwZXJfYmxvY2sgKnJvczsKKwljb25zdCBjaGFyICpsYWJlbCA9IDA7CisKKwlyb3MgPSAoc3RydWN0IHJvbWZzX3N1cGVyX2Jsb2NrICopYnVmOworCisJaWYgKHN0cmxlbigoY2hhciAqKSByb3MtPnJvc192b2x1bWUpKQorCQlsYWJlbCA9IChjaGFyICopIHJvcy0+cm9zX3ZvbHVtZTsKKwlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJMQUJFTCIsIGxhYmVsLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9iZV9jcmFtZnMoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJCXN0cnVjdCBibGtpZF9tYWdpYyAqaWQgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJCXVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY3JhbWZzX3N1cGVyX2Jsb2NrICpjc2I7CisJY29uc3QgY2hhciAqbGFiZWwgPSAwOworCisJY3NiID0gKHN0cnVjdCBjcmFtZnNfc3VwZXJfYmxvY2sgKilidWY7CisKKwlpZiAoc3RybGVuKChjaGFyICopIGNzYi0+bmFtZSkpCisJCWxhYmVsID0gKGNoYXIgKikgY3NiLT5uYW1lOworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgbGFiZWwsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2JlX3N3YXAwKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsCisJCSAgICAgICBzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkIF9fQkxLSURfQVRUUigodW51c2VkKSksCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpidWYgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSkKK3sKKwlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJVVUlEIiwgMCwgMCk7CisJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiTEFCRUwiLCAwLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9iZV9zd2FwMShzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkgICAgICAgc3RydWN0IGJsa2lkX21hZ2ljICppZCwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiBfX0JMS0lEX0FUVFIoKHVudXNlZCkpKQoreworCXN0cnVjdCBzd2FwX2lkX2Jsb2NrICpzd3M7CisKKwlwcm9iZV9zd2FwMChwcm9iZSwgaWQsIGJ1Zik7CisJLyoKKwkgKiBWZXJzaW9uIDEgc3dhcCBoZWFkZXJzIGFyZSBhbHdheXMgbG9jYXRlZCBhdCBvZmZzZXQgb2YgMTAyNAorCSAqIGJ5dGVzLCBhbHRob3VnaCB0aGUgc3dhcCBzaWduYXR1cmUgaXRzZWxmIGlzIGxvY2F0ZWQgYXQgdGhlCisJICogZW5kIG9mIHRoZSBwYWdlICh3aGljaCBtYXkgdmFyeSBkZXBlbmRpbmcgb24gaGFyZHdhcmUKKwkgKiBwYWdlc2l6ZSkuCisJICovCisJc3dzID0gKHN0cnVjdCBzd2FwX2lkX2Jsb2NrICopIGdldF9idWZmZXIocHJvYmUsIDEwMjQsIDEwMjQpOworCWlmICghc3dzKQorCQlyZXR1cm4gMTsKKworCS8qIGNoZWNrIGZvciB3cm9uZyB2ZXJzaW9uIG9yIHplcm9lZCBwYWdlY291bnQsIGZvciBzYW5pdHkgKi8KKwlpZiAoIW1lbWNtcChpZC0+YmltX21hZ2ljLCAiU1dBUFNQQUNFMiIsIGlkLT5iaW1fbGVuKSAmJgorCQkJKHN3cy0+c3dzX3ZlcnNpb24gIT0gMSB8fCBzd3MtPnN3c19sYXN0cGFnZSA9PSAwKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBhcmJpdHJhcnkgc2FuaXR5IGNoZWNrLi4gaXMgdGhlcmUgYW55IGdhcmJhZ2UgZG93biB0aGVyZT8gKi8KKwlpZiAoc3dzLT5zd3NfcGFkWzMyXSA9PSAwICYmIHN3cy0+c3dzX3BhZFszM10gPT0gMCkgIHsKKwkJaWYgKHN3cy0+c3dzX3ZvbHVtZVswXSkKKwkJCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgc3dzLT5zd3Nfdm9sdW1lLAorCQkJCSAgICAgIHNpemVvZihzd3MtPnN3c192b2x1bWUpKTsKKwkJaWYgKHN3cy0+c3dzX3V1aWRbMF0pCisJCQlzZXRfdXVpZChwcm9iZS0+ZGV2LCBzd3MtPnN3c191dWlkLCAwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfaXNvOTY2MChzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkJIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJCSB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IGlzb192b2x1bWVfZGVzY3JpcHRvciAqaXNvOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmxhYmVsOworCisJaXNvID0gKHN0cnVjdCBpc29fdm9sdW1lX2Rlc2NyaXB0b3IgKikgYnVmOworCWxhYmVsID0gaXNvLT52b2x1bWVfaWQ7CisKKwlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJMQUJFTCIsIChjb25zdCBjaGFyICopIGxhYmVsLAorCQkgICAgICBmaWd1cmVfbGFiZWxfbGVuKGxhYmVsLCAzMikpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBjb25zdCBjaGFyCisqdWRmX21hZ2ljW10gPSB7ICJCRUEwMSIsICJCT09UMiIsICJDRDAwMSIsICJDRFcwMiIsICJOU1IwMiIsCisJCSAiTlNSMDMiLCAiVEVBMDEiLCAwIH07CisKK3N0YXRpYyBpbnQgcHJvYmVfdWRmKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsCisJCSAgICAgc3RydWN0IGJsa2lkX21hZ2ljICppZCBfX0JMS0lEX0FUVFIoKHVudXNlZCkpLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiBfX0JMS0lEX0FUVFIoKHVudXNlZCkpKQoreworCWludCBqLCBiczsKKwlzdHJ1Y3QgaXNvX3ZvbHVtZV9kZXNjcmlwdG9yICppc29zYjsKKwljb25zdCBjaGFyICoqIG07CisKKwkvKiBkZXRlcm1pbmUgdGhlIGJsb2NrIHNpemUgYnkgc2Nhbm5pbmcgaW4gMksgaW5jcmVtZW50cworCSAgIChibG9jayBzaXplcyBsYXJnZXIgdGhhbiAySyB3aWxsIGJlIG51bGwgcGFkZGVkKSAqLworCWZvciAoYnMgPSAxOyBicyA8IDE2OyBicysrKSB7CisJCWlzb3NiID0gKHN0cnVjdCBpc29fdm9sdW1lX2Rlc2NyaXB0b3IgKikKKwkJCWdldF9idWZmZXIocHJvYmUsIChibGtpZF9sb2ZmX3QpIGJzKjIwNDgrMzI3NjgsCisJCQkJICAgc2l6ZW9mKCppc29zYikpOworCQlpZiAoIWlzb3NiKQorCQkJcmV0dXJuIDE7CisJCWlmIChpc29zYi0+dmRfaWRbMF0pCisJCQlicmVhazsKKwl9CisKKwkvKiBTY2FuIHVwIHRvIGFub3RoZXIgNjQgYmxvY2tzIGxvb2tpbmcgZm9yIGFkZGl0aW9uYWwgVlNEJ3MgKi8KKwlmb3IgKGogPSAxOyBqIDwgNjQ7IGorKykgeworCQlpZiAoaiA+IDEpIHsKKwkJCWlzb3NiID0gKHN0cnVjdCBpc29fdm9sdW1lX2Rlc2NyaXB0b3IgKikKKwkJCQlnZXRfYnVmZmVyKHByb2JlLCBqKmJzKjIwNDgrMzI3NjgsCisJCQkJCSAgIHNpemVvZigqaXNvc2IpKTsKKwkJCWlmICghaXNvc2IpCisJCQkJcmV0dXJuIDE7CisJCX0KKwkJLyogSWYgd2UgZmluZCBOU1IweCB0aGVuIGNhbGwgaXQgdWRmOgorCQkgICBOU1IwMSBmb3IgVURGIDEuMDAKKwkJICAgTlNSMDIgZm9yIFVERiAxLjUwCisJCSAgIE5TUjAzIGZvciBVREYgMi4wMCAqLworCQlpZiAoIW1lbWNtcChpc29zYi0+dmRfaWQsICJOU1IwIiwgNCkpCisJCQlyZXR1cm4gcHJvYmVfaXNvOTY2MChwcm9iZSwgaWQsIGJ1Zik7CisJCWZvciAobSA9IHVkZl9tYWdpYzsgKm07IG0rKykKKwkJCWlmICghbWVtY21wKCptLCBpc29zYi0+dmRfaWQsIDUpKQorCQkJCWJyZWFrOworCQlpZiAoKm0gPT0gMCkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwcm9iZV9vY2ZzKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsCisJCSAgICAgIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCBvY2ZzX3ZvbHVtZV9oZWFkZXIgb3ZoOworCXN0cnVjdCBvY2ZzX3ZvbHVtZV9sYWJlbCBvdmw7CisJX191MzIgbWFqb3I7CisKKwltZW1jcHkoJm92aCwgYnVmLCBzaXplb2Yob3ZoKSk7CisJbWVtY3B5KCZvdmwsIGJ1Zis1MTIsIHNpemVvZihvdmwpKTsKKworCW1ham9yID0gb2Nmc21ham9yKG92aCk7CisJaWYgKG1ham9yID09IDEpCisJCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwiU0VDX1RZUEUiLCJvY2ZzMSIsc2l6ZW9mKCJvY2ZzMSIpKTsKKwllbHNlIGlmIChtYWpvciA+PSA5KQorCQlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsIlNFQ19UWVBFIiwibnRvY2ZzIixzaXplb2YoIm50b2NmcyIpKTsKKworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgb3ZsLmxhYmVsLCBvY2ZzbGFiZWxsZW4ob3ZsKSk7CisJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiTU9VTlQiLCBvdmgubW91bnQsIG9jZnNtb3VudGxlbihvdmgpKTsKKwlzZXRfdXVpZChwcm9iZS0+ZGV2LCBvdmwudm9sX2lkLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9iZV9vY2ZzMihzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkgICAgICAgc3RydWN0IGJsa2lkX21hZ2ljICppZCBfX0JMS0lEX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCBvY2ZzMl9zdXBlcl9ibG9jayAqb3NiOworCisJb3NiID0gKHN0cnVjdCBvY2ZzMl9zdXBlcl9ibG9jayAqKWJ1ZjsKKworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgb3NiLT5zX2xhYmVsLCBzaXplb2Yob3NiLT5zX2xhYmVsKSk7CisJc2V0X3V1aWQocHJvYmUtPmRldiwgb3NiLT5zX3V1aWQsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2JlX29yYWNsZWFzbShzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkJICAgc3RydWN0IGJsa2lkX21hZ2ljICppZCBfX0JMS0lEX0FUVFIoKHVudXNlZCkpLAorCQkJICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCBvcmFjbGVfYXNtX2Rpc2tfbGFiZWwgKmRsOworCisJZGwgPSAoc3RydWN0IG9yYWNsZV9hc21fZGlza19sYWJlbCAqKWJ1ZjsKKworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgZGwtPmRsX2lkLCBzaXplb2YoZGwtPmRsX2lkKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfZ2ZzKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsCisJCSAgICAgc3RydWN0IGJsa2lkX21hZ2ljICppZCBfX0JMS0lEX0FUVFIoKHVudXNlZCkpLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZ2ZzMl9zYiAqc2JkOworCWNvbnN0IGNoYXIgKmxhYmVsID0gMDsKKworCXNiZCA9IChzdHJ1Y3QgZ2ZzMl9zYiAqKWJ1ZjsKKworCWlmIChibGtpZF9iZTMyKHNiZC0+c2JfZnNfZm9ybWF0KSA9PSBHRlNfRk9STUFUX0ZTICYmCisJICAgIGJsa2lkX2JlMzIoc2JkLT5zYl9tdWx0aWhvc3RfZm9ybWF0KSA9PSBHRlNfRk9STUFUX01VTFRJKQorCXsKKwkJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiVVVJRCIsIDAsIDApOworCisJCWlmIChzdHJsZW4oc2JkLT5zYl9sb2NrdGFibGUpKQorCQkJbGFiZWwgPSBzYmQtPnNiX2xvY2t0YWJsZTsKKwkJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiTEFCRUwiLCBsYWJlbCwgc2l6ZW9mKHNiZC0+c2JfbG9ja3RhYmxlKSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwcm9iZV9nZnMyKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsCisJCSAgICAgc3RydWN0IGJsa2lkX21hZ2ljICppZCBfX0JMS0lEX0FUVFIoKHVudXNlZCkpLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZ2ZzMl9zYiAqc2JkOworCWNvbnN0IGNoYXIgKmxhYmVsID0gMDsKKworCXNiZCA9IChzdHJ1Y3QgZ2ZzMl9zYiAqKWJ1ZjsKKworCWlmIChibGtpZF9iZTMyKHNiZC0+c2JfZnNfZm9ybWF0KSA9PSBHRlMyX0ZPUk1BVF9GUyAmJgorCSAgICBibGtpZF9iZTMyKHNiZC0+c2JfbXVsdGlob3N0X2Zvcm1hdCkgPT0gR0ZTMl9GT1JNQVRfTVVMVEkpCisJeworCQlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJVVUlEIiwgMCwgMCk7CisKKwkJaWYgKHN0cmxlbihzYmQtPnNiX2xvY2t0YWJsZSkpCisJCQlsYWJlbCA9IHNiZC0+c2JfbG9ja3RhYmxlOworCQlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJMQUJFTCIsIGxhYmVsLCBzaXplb2Yoc2JkLT5zYl9sb2NrdGFibGUpKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCB1bmljb2RlXzE2YmVfdG9fdXRmOCh1bnNpZ25lZCBjaGFyICpzdHIsIGludCBvdXRfbGVuLAorCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBpbl9sZW4pCit7CisJaW50IGksIGo7CisJdW5zaWduZWQgaW50IGM7CisKKwlmb3IgKGkgPSBqID0gMDsgaSArIDIgPD0gaW5fbGVuOyBpICs9IDIpIHsKKwkJYyA9IChidWZbaV0gPDwgOCkgfCBidWZbaSsxXTsKKwkJaWYgKGMgPT0gMCkgeworCQkJc3RyW2pdID0gJ1wwJzsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGMgPCAweDgwKSB7CisJCQlpZiAoaisxID49IG91dF9sZW4pCisJCQkJYnJlYWs7CisJCQlzdHJbaisrXSA9ICh1bnNpZ25lZCBjaGFyKSBjOworCQl9IGVsc2UgaWYgKGMgPCAweDgwMCkgeworCQkJaWYgKGorMiA+PSBvdXRfbGVuKQorCQkJCWJyZWFrOworCQkJc3RyW2orK10gPSAodW5zaWduZWQgY2hhcikgKDB4YzAgfCAoYyA+PiA2KSk7CisJCQlzdHJbaisrXSA9ICh1bnNpZ25lZCBjaGFyKSAoMHg4MCB8IChjICYgMHgzZikpOworCQl9IGVsc2UgeworCQkJaWYgKGorMyA+PSBvdXRfbGVuKQorCQkJCWJyZWFrOworCQkJc3RyW2orK10gPSAodW5zaWduZWQgY2hhcikgKDB4ZTAgfCAoYyA+PiAxMikpOworCQkJc3RyW2orK10gPSAodW5zaWduZWQgY2hhcikgKDB4ODAgfCAoKGMgPj4gNikgJiAweDNmKSk7CisJCQlzdHJbaisrXSA9ICh1bnNpZ25lZCBjaGFyKSAoMHg4MCB8IChjICYgMHgzZikpOworCQl9CisJfQorCXN0cltqXSA9ICdcMCc7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfaGZzKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJCSBzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkIF9fQkxLSURfQVRUUigodW51c2VkKSksCisJCQkgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCBoZnNfbWRiICpoZnMgPSAoc3RydWN0IGhmc19tZGIgKilidWY7CisJdW5zaWduZWQgbG9uZyBsb25nICp1dWlkX3B0cjsKKwljaGFyCXV1aWRfc3RyWzE3XTsKKwlfX3U2NAl1dWlkOworCisJaWYgKChtZW1jbXAoaGZzLT5lbWJlZF9zaWcsICJIKyIsIDIpID09IDApIHx8CisJICAgIChtZW1jbXAoaGZzLT5lbWJlZF9zaWcsICJIWCIsIDIpID09IDApKQorCQlyZXR1cm4gMTsJLyogTm90IGhmcywgYnV0IGFuIGVtYmVkZGVkIEhGUysgKi8KKworCXV1aWRfcHRyID0gKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWhmcy0+ZmluZGVyX2luZm8uaWQ7CisJdXVpZCA9IGJsa2lkX2xlNjQoKnV1aWRfcHRyKTsKKwlpZiAodXVpZCkgeworCQlzcHJpbnRmKHV1aWRfc3RyLCAiJTAxNmxsWCIsIHV1aWQpOworCQlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJVVUlEIiwgdXVpZF9zdHIsIDApOworCX0KKwlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJMQUJFTCIsIChjaGFyICopaGZzLT5sYWJlbCwgaGZzLT5sYWJlbF9sZW4pOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgcHJvYmVfaGZzcGx1cyhzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkJIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQsCisJCQkgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCBoZnNwbHVzX2V4dGVudCBleHRlbnRzW0hGU1BMVVNfRVhURU5UX0NPVU5UXTsKKwlzdHJ1Y3QgaGZzcGx1c19ibm9kZV9kZXNjcmlwdG9yICpkZXNjcjsKKwlzdHJ1Y3QgaGZzcGx1c19iaGVhZGVyX3JlY29yZCAqYm5vZGU7CisJc3RydWN0IGhmc3BsdXNfY2F0YWxvZ19rZXkgKmtleTsKKwlzdHJ1Y3QgaGZzcGx1c192b2xfaGVhZGVyICpoZnNwbHVzOworCXN0cnVjdCBoZnNfbWRiICpzYmQgPSAoc3RydWN0IGhmc19tZGIgKikgYnVmOworCXVuc2lnbmVkIGludCBhbGxvY19ibG9ja19zaXplOworCXVuc2lnbmVkIGludCBhbGxvY19maXJzdF9ibG9jazsKKwl1bnNpZ25lZCBpbnQgZW1iZWRfZmlyc3RfYmxvY2s7CisJdW5zaWduZWQgaW50IG9mZiA9IDA7CisJdW5zaWduZWQgaW50IGJsb2Nrc2l6ZTsKKwl1bnNpZ25lZCBpbnQgY2F0X2Jsb2NrOworCXVuc2lnbmVkIGludCBleHRfYmxvY2tfc3RhcnQ7CisJdW5zaWduZWQgaW50IGV4dF9ibG9ja19jb3VudDsKKwl1bnNpZ25lZCBpbnQgcmVjb3JkX2NvdW50OworCXVuc2lnbmVkIGludCBsZWFmX25vZGVfaGVhZDsKKwl1bnNpZ25lZCBpbnQgbGVhZl9ub2RlX2NvdW50OworCXVuc2lnbmVkIGludCBsZWFmX25vZGVfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgbGVhZl9ibG9jazsKKwl1bnNpZ25lZCBpbnQgbGFiZWxfbGVuOworCXVuc2lnbmVkIGxvbmcgbG9uZyAqdXVpZF9wdHI7CisJX191NjQgbGVhZl9vZmYsIHV1aWQ7CisJY2hhcgl1dWlkX3N0clsxN10sIGxhYmVsWzUxMl07CisJaW50IGV4dDsKKworCS8qIENoZWNrIGZvciBhIEhGUysgdm9sdW1lIGVtYmVkZGVkIGluIGEgSEZTIHZvbHVtZSAqLworCWlmIChtZW1jbXAoc2JkLT5zaWduYXR1cmUsICJCRCIsIDIpID09IDApIHsKKwkJaWYgKChtZW1jbXAoc2JkLT5lbWJlZF9zaWcsICJIKyIsIDIpICE9IDApICYmCisJCSAgICAobWVtY21wKHNiZC0+ZW1iZWRfc2lnLCAiSFgiLCAyKSAhPSAwKSkKKwkJCS8qIFRoaXMgbXVzdCBiZSBhbiBIRlMgdm9sdW1lLCBzbyBmYWlsICovCisJCQlyZXR1cm4gMTsKKworCQlhbGxvY19ibG9ja19zaXplID0gYmxraWRfYmUzMihzYmQtPmFsX2Jsa19zaXplKTsKKwkJYWxsb2NfZmlyc3RfYmxvY2sgPSBibGtpZF9iZTE2KHNiZC0+YWxfYmxfc3QpOworCQllbWJlZF9maXJzdF9ibG9jayA9IGJsa2lkX2JlMTYoc2JkLT5lbWJlZF9zdGFydGJsb2NrKTsKKwkJb2ZmID0gKGFsbG9jX2ZpcnN0X2Jsb2NrICogNTEyKSArCisJCQkoZW1iZWRfZmlyc3RfYmxvY2sgKiBhbGxvY19ibG9ja19zaXplKTsKKwkJYnVmID0gZ2V0X2J1ZmZlcihwcm9iZSwgb2ZmICsgKGlkLT5iaW1fa2JvZmYgKiAxMDI0KSwKKwkJCQkgc2l6ZW9mKCpzYmQpKTsKKwkJaWYgKCFidWYpCisJCQlyZXR1cm4gMTsKKworCQloZnNwbHVzID0gKHN0cnVjdCBoZnNwbHVzX3ZvbF9oZWFkZXIgKikgYnVmOworCX0KKworCWhmc3BsdXMgPSAoc3RydWN0IGhmc3BsdXNfdm9sX2hlYWRlciAqKSBidWY7CisKKwlpZiAoKG1lbWNtcChoZnNwbHVzLT5zaWduYXR1cmUsICJIKyIsIDIpICE9IDApICYmCisJICAgIChtZW1jbXAoaGZzcGx1cy0+c2lnbmF0dXJlLCAiSFgiLCAyKSAhPSAwKSkKKwkJcmV0dXJuIDE7CisKKwl1dWlkX3B0ciA9ICh1bnNpZ25lZCBsb25nIGxvbmcgKiloZnNwbHVzLT5maW5kZXJfaW5mby5pZDsKKwl1dWlkID0gYmxraWRfbGU2NCgqdXVpZF9wdHIpOworCWlmICh1dWlkKSB7CisJCXNwcmludGYodXVpZF9zdHIsICIlMDE2bGxYIiwgdXVpZCk7CisJCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIlVVSUQiLCB1dWlkX3N0ciwgMCk7CisJfQorCisJYmxvY2tzaXplID0gYmxraWRfYmUzMihoZnNwbHVzLT5ibG9ja3NpemUpOworCW1lbWNweShleHRlbnRzLCBoZnNwbHVzLT5jYXRfZmlsZS5leHRlbnRzLCBzaXplb2YoZXh0ZW50cykpOworCWNhdF9ibG9jayA9IGJsa2lkX2JlMzIoZXh0ZW50c1swXS5zdGFydF9ibG9jayk7CisKKwlidWYgPSBnZXRfYnVmZmVyKHByb2JlLCBvZmYgKyAoKF9fdTY0KSBjYXRfYmxvY2sgKiBibG9ja3NpemUpLCAweDIwMDApOworCWlmICghYnVmKQorCQlyZXR1cm4gMDsKKworCWJub2RlID0gKHN0cnVjdCBoZnNwbHVzX2JoZWFkZXJfcmVjb3JkICopCisJCSZidWZbc2l6ZW9mKHN0cnVjdCBoZnNwbHVzX2Jub2RlX2Rlc2NyaXB0b3IpXTsKKworCWxlYWZfbm9kZV9oZWFkID0gYmxraWRfYmUzMihibm9kZS0+bGVhZl9oZWFkKTsKKwlsZWFmX25vZGVfc2l6ZSA9IGJsa2lkX2JlMTYoYm5vZGUtPm5vZGVfc2l6ZSk7CisJbGVhZl9ub2RlX2NvdW50ID0gYmxraWRfYmUzMihibm9kZS0+bGVhZl9jb3VudCk7CisJaWYgKGxlYWZfbm9kZV9jb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWxlYWZfYmxvY2sgPSAobGVhZl9ub2RlX2hlYWQgKiBsZWFmX25vZGVfc2l6ZSkgLyBibG9ja3NpemU7CisKKwkvKiBnZXQgcGh5c2ljYWwgbG9jYXRpb24gKi8KKwlmb3IgKGV4dCA9IDA7IGV4dCA8IEhGU1BMVVNfRVhURU5UX0NPVU5UOyBleHQrKykgeworCQlleHRfYmxvY2tfc3RhcnQgPSBibGtpZF9iZTMyKGV4dGVudHNbZXh0XS5zdGFydF9ibG9jayk7CisJCWV4dF9ibG9ja19jb3VudCA9IGJsa2lkX2JlMzIoZXh0ZW50c1tleHRdLmJsb2NrX2NvdW50KTsKKwkJaWYgKGV4dF9ibG9ja19jb3VudCA9PSAwKQorCQkJcmV0dXJuIDA7CisKKwkJLyogdGhpcyBpcyBvdXIgZXh0ZW50ICovCisJCWlmIChsZWFmX2Jsb2NrIDwgZXh0X2Jsb2NrX2NvdW50KQorCQkJYnJlYWs7CisKKwkJbGVhZl9ibG9jayAtPSBleHRfYmxvY2tfY291bnQ7CisJfQorCWlmIChleHQgPT0gSEZTUExVU19FWFRFTlRfQ09VTlQpCisJCXJldHVybiAwOworCisJbGVhZl9vZmYgPSAoX191NjQpIChleHRfYmxvY2tfc3RhcnQgKyBsZWFmX2Jsb2NrKSAqIGJsb2Nrc2l6ZTsKKworCWJ1ZiA9IGdldF9idWZmZXIocHJvYmUsIG9mZiArIGxlYWZfb2ZmLCBsZWFmX25vZGVfc2l6ZSk7CisJaWYgKCFidWYpCisJCXJldHVybiAwOworCisJZGVzY3IgPSAoc3RydWN0IGhmc3BsdXNfYm5vZGVfZGVzY3JpcHRvciAqKSBidWY7CisJcmVjb3JkX2NvdW50ID0gYmxraWRfYmUxNihkZXNjci0+bnVtX3JlY3MpOworCWlmIChyZWNvcmRfY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGVzY3ItPnR5cGUgIT0gSEZTX05PREVfTEVBRikKKwkJcmV0dXJuIDA7CisKKwlrZXkgPSAoc3RydWN0IGhmc3BsdXNfY2F0YWxvZ19rZXkgKikKKwkJJmJ1ZltzaXplb2Yoc3RydWN0IGhmc3BsdXNfYm5vZGVfZGVzY3JpcHRvcildOworCisJaWYgKGJsa2lkX2JlMzIoa2V5LT5wYXJlbnRfaWQpICE9IEhGU1BMVVNfUE9SX0NOSUQpCisJCXJldHVybiAwOworCisJbGFiZWxfbGVuID0gYmxraWRfYmUxNihrZXktPnVuaWNvZGVfbGVuKSAqIDI7CisJdW5pY29kZV8xNmJlX3RvX3V0ZjgoKHVuc2lnbmVkIGNoYXIgKilsYWJlbCwgc2l6ZW9mKGxhYmVsKSwKKwkJCSAgICAga2V5LT51bmljb2RlLCBsYWJlbF9sZW4pOworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgbGFiZWwsIDApOworCXJldHVybiAwOworfQorCisjZGVmaW5lIExWTTJfTEFCRUxfU0laRSA1MTIKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbHZtMl9jYWxjX2NyYyhjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBzaXplKQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY3JjdGFiW10gPSB7CisJCTB4MDAwMDAwMDAsIDB4MWRiNzEwNjQsIDB4M2I2ZTIwYzgsIDB4MjZkOTMwYWMsCisJCTB4NzZkYzQxOTAsIDB4NmI2YjUxZjQsIDB4NGRiMjYxNTgsIDB4NTAwNTcxM2MsCisJCTB4ZWRiODgzMjAsIDB4ZjAwZjkzNDQsIDB4ZDZkNmEzZTgsIDB4Y2I2MWIzOGMsCisJCTB4OWI2NGMyYjAsIDB4ODZkM2QyZDQsIDB4YTAwYWUyNzgsIDB4YmRiZGYyMWMKKwl9OworCXVuc2lnbmVkIGludCBpLCBjcmMgPSAweGY1OTdhNmNmOworCWNvbnN0IF9fdTggKmRhdGEgPSAoY29uc3QgX191OCAqKSBidWY7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCWNyYyBePSAqZGF0YSsrOworCQljcmMgPSAoY3JjID4+IDQpIF4gY3JjdGFiW2NyYyAmIDB4Zl07CisJCWNyYyA9IChjcmMgPj4gNCkgXiBjcmN0YWJbY3JjICYgMHhmXTsKKwl9CisJcmV0dXJuIGNyYzsKK30KKworc3RhdGljIGludCBwcm9iZV9sdm0yKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsCisJCQlzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkLAorCQkJdW5zaWduZWQgY2hhciAqYnVmKQoreworCWludCBzZWN0b3IgPSAoaWQtPmJpbV9rYm9mZikgPDwgMTsKKwlzdHJ1Y3QgbHZtMl9wdl9sYWJlbF9oZWFkZXIgKmxhYmVsPSAoc3RydWN0IGx2bTJfcHZfbGFiZWxfaGVhZGVyICopYnVmOworCWNoYXIgKnAsICpxLCB1dWlkWzQwXTsKKwl1bnNpZ25lZCBpbnQgaSwgYjsKKworCS8qIGJ1ZiBpcyBhdCAwayBvciAxayBvZmZzZXQ7IGZpbmQgbGFiZWwgaW5zaWRlICovCisJaWYgKG1lbWNtcChidWYsICJMQUJFTE9ORSIsIDgpID09IDApIHsKKwkJbGFiZWwgPSAoc3RydWN0IGx2bTJfcHZfbGFiZWxfaGVhZGVyICopYnVmOworCX0gZWxzZSBpZiAobWVtY21wKGJ1ZiArIDUxMiwgIkxBQkVMT05FIiwgOCkgPT0gMCkgeworCQlsYWJlbCA9IChzdHJ1Y3QgbHZtMl9wdl9sYWJlbF9oZWFkZXIgKikoYnVmICsgNTEyKTsKKwkJc2VjdG9yKys7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGJsa2lkX2xlNjQobGFiZWwtPnNlY3Rvcl94bCkgIT0gKHVuc2lnbmVkKSBzZWN0b3IpIHsKKwkJREJHKERFQlVHX1BST0JFLAorCQkgICAgcHJpbnRmKCJMVk0yOiBsYWJlbCBmb3Igc2VjdG9yICVsbHUgZm91bmQgYXQgc2VjdG9yICVkXG4iLAorCQkJICAgYmxraWRfbGU2NChsYWJlbC0+c2VjdG9yX3hsKSwgc2VjdG9yKSk7CisJCXJldHVybiAxOworCX0KKworCWlmIChsdm0yX2NhbGNfY3JjKCZsYWJlbC0+b2Zmc2V0X3hsLCBMVk0yX0xBQkVMX1NJWkUgLQorCQkJICAoKGNoYXIgKikmbGFiZWwtPm9mZnNldF94bCAtIChjaGFyICopbGFiZWwpKSAhPQorCQkJYmxraWRfbGUzMihsYWJlbC0+Y3JjX3hsKSkgeworCQlEQkcoREVCVUdfUFJPQkUsCisJCSAgICBwcmludGYoIkxWTTI6IGxhYmVsIGNoZWNrc3VtIGluY29ycmVjdCBhdCBzZWN0b3IgJWRcbiIsCisJCQkgICBzZWN0b3IpKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZm9yIChpPTAsIGI9MSwgcD11dWlkLCBxPSAoY2hhciAqKSBsYWJlbC0+cHZfdXVpZDsgaSA8IExWTTJfSURfTEVOOworCSAgICAgaSsrLCBiIDw8PSAxKSB7CisJCWlmIChiICYgMHg0NDQ0NDQwKQorCQkJKnArKyA9ICctJzsKKwkJKnArKyA9ICpxKys7CisJfQorCisJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiVVVJRCIsIHV1aWQsIExWTTJfSURfTEVOKzYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfYnRyZnMoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJCXN0cnVjdCBibGtpZF9tYWdpYyAqaWQsCisJCQl1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IGJ0cmZzX3N1cGVyX2Jsb2NrICpiczsKKwljb25zdCBjaGFyICpsYWJlbCA9IDA7CisKKwlicyA9IChzdHJ1Y3QgYnRyZnNfc3VwZXJfYmxvY2sgKilidWY7CisKKwlpZiAoc3RybGVuKGJzLT5sYWJlbCkpCisJCWxhYmVsID0gYnMtPmxhYmVsOworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgbGFiZWwsIHNpemVvZihicy0+bGFiZWwpKTsKKwlzZXRfdXVpZChwcm9iZS0+ZGV2LCBicy0+ZnNpZCwgMCk7CisJcmV0dXJuIDA7Cit9CisvKgorICogVmFyaW91cyBmaWxlc3lzdGVtIG1hZ2ljcyB0aGF0IHdlIGNhbiBjaGVjayBmb3IuICBOb3RlIHRoYXQga2JvZmYgYW5kCisgKiBzYm9mZiBhcmUgaW4ga2lsb2J5dGVzIGFuZCBieXRlcyByZXNwZWN0aXZlbHkuICBBbGwgbWFnaWNzIGFyZSBpbgorICogYnl0ZSBzdHJpbmdzIHNvIHdlIGRvbid0IHdvcnJ5IGFib3V0IGVuZGlhbiBpc3N1ZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYmxraWRfbWFnaWMgdHlwZV9hcnJheVtdID0geworLyogIHR5cGUgICAgIGtib2ZmICAgc2JvZmYgbGVuICBtYWdpYwkJCXByb2JlICovCisgIHsgIm9yYWNsZWFzbSIsIDAsCTMyLCAgOCwgIk9SQ0xESVNLIiwJCXByb2JlX29yYWNsZWFzbSB9LAorICB7ICJudGZzIiwJIDAsCSAzLCAgOCwgIk5URlMgICAgIiwJCXByb2JlX250ZnMgfSwKKyAgeyAiamJkIiwJIDEsICAgMHgzOCwgIDIsICJcMTIzXDM1NyIsCQlwcm9iZV9qYmQgfSwKKyAgeyAiZXh0NGRldiIsCSAxLCAgIDB4MzgsICAyLCAiXDEyM1wzNTciLAkJcHJvYmVfZXh0NGRldiB9LAorICB7ICJleHQ0IiwJIDEsICAgMHgzOCwgIDIsICJcMTIzXDM1NyIsCQlwcm9iZV9leHQ0IH0sCisgIHsgImV4dDMiLAkgMSwgICAweDM4LCAgMiwgIlwxMjNcMzU3IiwJCXByb2JlX2V4dDMgfSwKKyAgeyAiZXh0MiIsCSAxLCAgIDB4MzgsICAyLCAiXDEyM1wzNTciLAkJcHJvYmVfZXh0MiB9LAorICB7ICJyZWlzZXJmcyIsCSA4LCAgIDB4MzQsICA4LCAiUmVJc0VyRnMiLAkJcHJvYmVfcmVpc2VyZnMgfSwKKyAgeyAicmVpc2VyZnMiLCA2NCwgICAweDM0LCAgOSwgIlJlSXNFcjJGcyIsCQlwcm9iZV9yZWlzZXJmcyB9LAorICB7ICJyZWlzZXJmcyIsIDY0LCAgIDB4MzQsICA5LCAiUmVJc0VyM0ZzIiwJCXByb2JlX3JlaXNlcmZzIH0sCisgIHsgInJlaXNlcmZzIiwgNjQsICAgMHgzNCwgIDgsICJSZUlzRXJGcyIsCQlwcm9iZV9yZWlzZXJmcyB9LAorICB7ICJyZWlzZXJmcyIsCSA4LAkyMCwgIDgsICJSZUlzRXJGcyIsCQlwcm9iZV9yZWlzZXJmcyB9LAorICB7ICJyZWlzZXI0IiwgIDY0LAkgMCwgIDcsICJSZUlzRXI0IiwJCXByb2JlX3JlaXNlcmZzNCB9LAorICB7ICJnZnMyIiwgICAgIDY0LCAgICAgIDAsICA0LCAiXHgwMVx4MTZceDE5XHg3MCIsICAgICBwcm9iZV9nZnMyIH0sCisgIHsgImdmcyIsICAgICAgNjQsICAgICAgMCwgIDQsICJceDAxXHgxNlx4MTlceDcwIiwgICAgIHByb2JlX2dmcyB9LAorICB7ICJ2ZmF0IiwgICAgICAwLCAgIDB4NTIsICA1LCAiTVNXSU4iLCAgICAgICAgICAgICAgICBwcm9iZV9mYXQgfSwKKyAgeyAidmZhdCIsICAgICAgMCwgICAweDUyLCAgOCwgIkZBVDMyICAgIiwgICAgICAgICAgICAgcHJvYmVfZmF0IH0sCisgIHsgInZmYXQiLCAgICAgIDAsICAgMHgzNiwgIDUsICJNU0RPUyIsICAgICAgICAgICAgICAgIHByb2JlX2ZhdCB9LAorICB7ICJ2ZmF0IiwgICAgICAwLCAgIDB4MzYsICA4LCAiRkFUMTYgICAiLCAgICAgICAgICAgICBwcm9iZV9mYXQgfSwKKyAgeyAidmZhdCIsICAgICAgMCwgICAweDM2LCAgOCwgIkZBVDEyICAgIiwgICAgICAgICAgICAgcHJvYmVfZmF0IH0sCisgIHsgInZmYXQiLCAgICAgIDAsICAgICAgMCwgIDEsICJcMzUzIiwgICAgICAgICAgICAgICAgIHByb2JlX2ZhdF9ub21hZ2ljIH0sCisgIHsgInZmYXQiLCAgICAgIDAsICAgICAgMCwgIDEsICJcMzUxIiwgICAgICAgICAgICAgICAgIHByb2JlX2ZhdF9ub21hZ2ljIH0sCisgIHsgInZmYXQiLCAgICAgIDAsICAweDFmZSwgIDIsICJcMTI1XDI1MiIsICAgICAgICAgICAgIHByb2JlX2ZhdF9ub21hZ2ljIH0sCisgIHsgIm1pbml4IiwgICAgIDEsICAgMHgxMCwgIDIsICJcMTc3XDAyMyIsICAgICAgICAgICAgIDAgfSwKKyAgeyAibWluaXgiLCAgICAgMSwgICAweDEwLCAgMiwgIlwyMTdcMDIzIiwgICAgICAgICAgICAgMCB9LAorICB7ICJtaW5peCIsCSAxLCAgIDB4MTAsICAyLCAiXDE1MFwwNDQiLAkJMCB9LAorICB7ICJtaW5peCIsCSAxLCAgIDB4MTAsICAyLCAiXDE3MFwwNDQiLAkJMCB9LAorICB7ICJ2eGZzIiwJIDEsCSAwLCAgNCwgIlwzNjVcMzc0XDAwMVwyNDUiLAkwIH0sCisgIHsgInhmcyIsCSAwLAkgMCwgIDQsICJYRlNCIiwJCQlwcm9iZV94ZnMgfSwKKyAgeyAicm9tZnMiLAkgMCwJIDAsICA4LCAiLXJvbTFmcy0iLAkJcHJvYmVfcm9tZnMgfSwKKyAgeyAiYmZzIiwJIDAsCSAwLCAgNCwgIlwzMTZcMzcyXDE3M1wwMzMiLAkwIH0sCisgIHsgImNyYW1mcyIsCSAwLAkgMCwgIDQsICJFPVwzMTVcMDUwIiwJCXByb2JlX2NyYW1mcyB9LAorICB7ICJxbng0IiwJIDAsCSA0LCAgNiwgIlFOWDRGUyIsCQkwIH0sCisgIHsgInVkZiIsCTMyLAkgMSwgIDUsICJCRUEwMSIsCQlwcm9iZV91ZGYgfSwKKyAgeyAidWRmIiwJMzIsCSAxLCAgNSwgIkJPT1QyIiwJCXByb2JlX3VkZiB9LAorICB7ICJ1ZGYiLAkzMiwJIDEsICA1LCAiQ0QwMDEiLAkJcHJvYmVfdWRmIH0sCisgIHsgInVkZiIsCTMyLAkgMSwgIDUsICJDRFcwMiIsCQlwcm9iZV91ZGYgfSwKKyAgeyAidWRmIiwJMzIsCSAxLCAgNSwgIk5TUjAyIiwJCXByb2JlX3VkZiB9LAorICB7ICJ1ZGYiLAkzMiwJIDEsICA1LCAiTlNSMDMiLAkJcHJvYmVfdWRmIH0sCisgIHsgInVkZiIsCTMyLAkgMSwgIDUsICJURUEwMSIsCQlwcm9iZV91ZGYgfSwKKyAgeyAiaXNvOTY2MCIsCTMyLAkgMSwgIDUsICJDRDAwMSIsCQlwcm9iZV9pc285NjYwIH0sCisgIHsgImlzbzk2NjAiLAkzMiwJIDksICA1LCAiQ0RST00iLAkJcHJvYmVfaXNvOTY2MCB9LAorICB7ICJqZnMiLAkzMiwJIDAsICA0LCAiSkZTMSIsCQkJcHJvYmVfamZzIH0sCisgIHsgInpmcyIsICAgICAgIDgsCSAwLCAgOCwgIlwwXDBceDAyXHhmNVx4YjBceDA3XHhiMVx4MGMiLCBwcm9iZV96ZnMgfSwKKyAgeyAiemZzIiwgICAgICAgOCwJIDAsICA4LCAiXHgwY1x4YjFceDA3XHhiMFx4ZjVceDAyXDBcMCIsIHByb2JlX3pmcyB9LAorICB7ICJ6ZnMiLCAgICAgMjY0LAkgMCwgIDgsICJcMFwwXHgwMlx4ZjVceGIwXHgwN1x4YjFceDBjIiwgcHJvYmVfemZzIH0sCisgIHsgInpmcyIsICAgICAyNjQsCSAwLCAgOCwgIlx4MGNceGIxXHgwN1x4YjBceGY1XHgwMlwwXDAiLCBwcm9iZV96ZnMgfSwKKyAgeyAiaGZzcGx1cyIsCSAxLAkgMCwgIDIsICJCRCIsCQkJcHJvYmVfaGZzcGx1cyB9LAorICB7ICJoZnNwbHVzIiwJIDEsCSAwLCAgMiwgIkgrIiwJCQlwcm9iZV9oZnNwbHVzIH0sCisgIHsgImhmc3BsdXMiLAkgMSwJIDAsICAyLCAiSFgiLAkJCXByb2JlX2hmc3BsdXMgfSwKKyAgeyAiaGZzIiwJIDEsCSAwLCAgMiwgIkJEIiwJCQlwcm9iZV9oZnMgfSwKKyAgeyAidWZzIiwJIDgsICAweDU1YywgIDQsICJUXDAzMVwwMDFcMDAwIiwJMCB9LAorICB7ICJocGZzIiwJIDgsCSAwLCAgNCwgIklcMzUwXDIyNVwzNzEiLAkwIH0sCisgIHsgInN5c3YiLAkgMCwgIDB4M2Y4LCAgNCwgIlwwMjB+XDAzMFwzNzUiLAkwIH0sCisgIHsgInN3YXAiLAkgMCwgIDB4ZmY2LCAxMCwgIlNXQVAtU1BBQ0UiLAkJcHJvYmVfc3dhcDAgfSwKKyAgeyAic3dhcCIsCSAwLCAgMHhmZjYsIDEwLCAiU1dBUFNQQUNFMiIsCQlwcm9iZV9zd2FwMSB9LAorICB7ICJzd3N1c3BlbmQiLCAwLCAgMHhmZjYsICA5LCAiUzFTVVNQRU5EIiwJCXByb2JlX3N3YXAxIH0sCisgIHsgInN3c3VzcGVuZCIsIDAsICAweGZmNiwgIDksICJTMlNVU1BFTkQiLAkJcHJvYmVfc3dhcDEgfSwKKyAgeyAic3dzdXNwZW5kIiwgMCwgIDB4ZmY2LCAgOSwgIlVMU1VTUEVORCIsCQlwcm9iZV9zd2FwMSB9LAorICB7ICJzd2FwIiwJIDAsIDB4MWZmNiwgMTAsICJTV0FQLVNQQUNFIiwJCXByb2JlX3N3YXAwIH0sCisgIHsgInN3YXAiLAkgMCwgMHgxZmY2LCAxMCwgIlNXQVBTUEFDRTIiLAkJcHJvYmVfc3dhcDEgfSwKKyAgeyAic3dzdXNwZW5kIiwgMCwgMHgxZmY2LCAgOSwgIlMxU1VTUEVORCIsCQlwcm9iZV9zd2FwMSB9LAorICB7ICJzd3N1c3BlbmQiLCAwLCAweDFmZjYsICA5LCAiUzJTVVNQRU5EIiwJCXByb2JlX3N3YXAxIH0sCisgIHsgInN3c3VzcGVuZCIsIDAsIDB4MWZmNiwgIDksICJVTFNVU1BFTkQiLAkJcHJvYmVfc3dhcDEgfSwKKyAgeyAic3dhcCIsCSAwLCAweDNmZjYsIDEwLCAiU1dBUC1TUEFDRSIsCQlwcm9iZV9zd2FwMCB9LAorICB7ICJzd2FwIiwJIDAsIDB4M2ZmNiwgMTAsICJTV0FQU1BBQ0UyIiwJCXByb2JlX3N3YXAxIH0sCisgIHsgInN3c3VzcGVuZCIsIDAsIDB4M2ZmNiwgIDksICJTMVNVU1BFTkQiLAkJcHJvYmVfc3dhcDEgfSwKKyAgeyAic3dzdXNwZW5kIiwgMCwgMHgzZmY2LCAgOSwgIlMyU1VTUEVORCIsCQlwcm9iZV9zd2FwMSB9LAorICB7ICJzd3N1c3BlbmQiLCAwLCAweDNmZjYsICA5LCAiVUxTVVNQRU5EIiwJCXByb2JlX3N3YXAxIH0sCisgIHsgInN3YXAiLAkgMCwgMHg3ZmY2LCAxMCwgIlNXQVAtU1BBQ0UiLAkJcHJvYmVfc3dhcDAgfSwKKyAgeyAic3dhcCIsCSAwLCAweDdmZjYsIDEwLCAiU1dBUFNQQUNFMiIsCQlwcm9iZV9zd2FwMSB9LAorICB7ICJzd3N1c3BlbmQiLCAwLCAweDdmZjYsICA5LCAiUzFTVVNQRU5EIiwJCXByb2JlX3N3YXAxIH0sCisgIHsgInN3c3VzcGVuZCIsIDAsIDB4N2ZmNiwgIDksICJTMlNVU1BFTkQiLAkJcHJvYmVfc3dhcDEgfSwKKyAgeyAic3dzdXNwZW5kIiwgMCwgMHg3ZmY2LCAgOSwgIlVMU1VTUEVORCIsCQlwcm9iZV9zd2FwMSB9LAorICB7ICJzd2FwIiwJIDAsIDB4ZmZmNiwgMTAsICJTV0FQLVNQQUNFIiwJCXByb2JlX3N3YXAwIH0sCisgIHsgInN3YXAiLAkgMCwgMHhmZmY2LCAxMCwgIlNXQVBTUEFDRTIiLAkJcHJvYmVfc3dhcDEgfSwKKyAgeyAic3dzdXNwZW5kIiwgMCwgMHhmZmY2LCAgOSwgIlMxU1VTUEVORCIsCQlwcm9iZV9zd2FwMSB9LAorICB7ICJzd3N1c3BlbmQiLCAwLCAweGZmZjYsICA5LCAiUzJTVVNQRU5EIiwJCXByb2JlX3N3YXAxIH0sCisgIHsgInN3c3VzcGVuZCIsIDAsIDB4ZmZmNiwgIDksICJVTFNVU1BFTkQiLAkJcHJvYmVfc3dhcDEgfSwKKyAgeyAib2NmcyIsCSAwLAkgOCwgIDksCSJPcmFjbGVDRlMiLAkJcHJvYmVfb2NmcyB9LAorICB7ICJvY2ZzMiIsCSAxLAkgMCwgIDYsCSJPQ0ZTVjIiLAkJcHJvYmVfb2NmczIgfSwKKyAgeyAib2NmczIiLAkgMiwJIDAsICA2LAkiT0NGU1YyIiwJCXByb2JlX29jZnMyIH0sCisgIHsgIm9jZnMyIiwJIDQsCSAwLCAgNiwJIk9DRlNWMiIsCQlwcm9iZV9vY2ZzMiB9LAorICB7ICJvY2ZzMiIsCSA4LAkgMCwgIDYsCSJPQ0ZTVjIiLAkJcHJvYmVfb2NmczIgfSwKKyAgeyAiY3J5cHRfTFVLUyIsIDAsCSAwLCAgNiwJIkxVS1NceGJhXHhiZSIsCQlwcm9iZV9sdWtzIH0sCisgIHsgInNxdWFzaGZzIiwJIDAsCSAwLCAgNCwJInNxc2giLAkJCTAgfSwKKyAgeyAic3F1YXNoZnMiLAkgMCwJIDAsICA0LAkiaHNxcyIsCQkJMCB9LAorICB7ICJsdm0ycHYiLAkgMCwgIDB4MjE4LCAgOCwgIkxWTTIgMDAxIiwJCXByb2JlX2x2bTIgfSwKKyAgeyAibHZtMnB2IiwJIDAsICAweDAxOCwgIDgsICJMVk0yIDAwMSIsCQlwcm9iZV9sdm0yIH0sCisgIHsgImx2bTJwdiIsCSAxLCAgMHgwMTgsICA4LCAiTFZNMiAwMDEiLAkJcHJvYmVfbHZtMiB9LAorICB7ICJsdm0ycHYiLAkgMSwgIDB4MjE4LCAgOCwgIkxWTTIgMDAxIiwJCXByb2JlX2x2bTIgfSwKKyAgeyAiYnRyZnMiLAkgNjQsICAweDQwLCAgOCwgIl9CSFJmU19NIiwJCXByb2JlX2J0cmZzIH0sCisgIHsgICBOVUxMLAkgMCwJIDAsICAwLCBOVUxMLAkJCU5VTEwgfQorfTsKKworLyoKKyAqIFZlcmlmeSB0aGF0IHRoZSBkYXRhIGluIGRldiBpcyBjb25zaXN0ZW50IHdpdGggd2hhdCBpcyBvbiB0aGUgYWN0dWFsCisgKiBibG9jayBkZXZpY2UgKHVzaW5nIHRoZSBkZXZuYW1lIGZpZWxkIG9ubHkpLiAgTm9ybWFsbHkgdGhpcyB3aWxsIGJlCisgKiBjYWxsZWQgd2hlbiBmaW5kaW5nIGl0ZW1zIGluIHRoZSBjYWNoZSwgYnV0IGZvciBsb25nIHJ1bm5pbmcgcHJvY2Vzc2VzCisgKiBpcyBhbHNvIGRlc2lyYWJsZSB0byByZXZhbGlkYXRlIGFuIGl0ZW0gYmVmb3JlIHVzZS4KKyAqCisgKiBJZiB3ZSBhcmUgdW5hYmxlIHRvIHJldmFsaWRhdGUgdGhlIGRhdGEsIHdlIHJldHVybiB0aGUgb2xkIGRhdGEgYW5kCisgKiBkbyBub3Qgc2V0IHRoZSBCTEtJRF9CSURfRkxfVkVSSUZJRUQgZmxhZyBvbiBpdC4KKyAqLworYmxraWRfZGV2IGJsa2lkX3ZlcmlmeShibGtpZF9jYWNoZSBjYWNoZSwgYmxraWRfZGV2IGRldikKK3sKKwlzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkOworCXN0cnVjdCBibGtpZF9wcm9iZSBwcm9iZTsKKwlibGtpZF90YWdfaXRlcmF0ZSBpdGVyOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwljb25zdCBjaGFyICp0eXBlLCAqdmFsdWU7CisJc3RydWN0IHN0YXQgc3Q7CisJdGltZV90IGRpZmYsIG5vdzsKKwlpbnQgaWR4OworCisJaWYgKCFkZXYpCisJCXJldHVybiBOVUxMOworCisJbm93ID0gdGltZSgwKTsKKwlkaWZmID0gbm93IC0gZGV2LT5iaWRfdGltZTsKKworCWlmIChzdGF0KGRldi0+YmlkX25hbWUsICZzdCkgPCAwKSB7CisJCURCRyhERUJVR19QUk9CRSwKKwkJICAgIHByaW50ZigiYmxraWRfdmVyaWZ5OiBlcnJvciAlcyAoJWQpIHdoaWxlICIKKwkJCSAgICJ0cnlpbmcgdG8gc3RhdCAlc1xuIiwgc3RyZXJyb3IoZXJybm8pLCBlcnJubywKKwkJCSAgIGRldi0+YmlkX25hbWUpKTsKKwlvcGVuX2VycjoKKwkJaWYgKChlcnJubyA9PSBFUEVSTSkgfHwgKGVycm5vID09IEVBQ0NFUykgfHwgKGVycm5vID09IEVOT0VOVCkpIHsKKwkJCS8qIFdlIGRvbid0IGhhdmUgcmVhZCBwZXJtaXNzaW9uLCBqdXN0IHJldHVybiBjYWNoZSBkYXRhLiAqLworCQkJREJHKERFQlVHX1BST0JFLCBwcmludGYoInJldHVybmluZyB1bnZlcmlmaWVkIGRhdGEgZm9yICVzXG4iLAorCQkJCQkJZGV2LT5iaWRfbmFtZSkpOworCQkJcmV0dXJuIGRldjsKKwkJfQorCQlibGtpZF9mcmVlX2RldihkZXYpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoKG5vdyA+PSBkZXYtPmJpZF90aW1lKSAmJgorCSAgICAoc3Quc3RfbXRpbWUgPD0gZGV2LT5iaWRfdGltZSkgJiYKKwkgICAgKChkaWZmIDwgQkxLSURfUFJPQkVfTUlOKSB8fAorCSAgICAgKGRldi0+YmlkX2ZsYWdzICYgQkxLSURfQklEX0ZMX1ZFUklGSUVEICYmCisJICAgICAgZGlmZiA8IEJMS0lEX1BST0JFX0lOVEVSVkFMKSkpCisJCXJldHVybiBkZXY7CisKKwlEQkcoREVCVUdfUFJPQkUsCisJICAgIHByaW50ZigibmVlZCB0byByZXZhbGlkYXRlICVzIChjYWNoZSB0aW1lICVsdSwgc3RhdCB0aW1lICVsdSxcblx0IgorCQkgICAidGltZSBzaW5jZSBsYXN0IGNoZWNrICVsdSlcbiIsCisJCSAgIGRldi0+YmlkX25hbWUsICh1bnNpZ25lZCBsb25nKWRldi0+YmlkX3RpbWUsCisJCSAgICh1bnNpZ25lZCBsb25nKXN0LnN0X210aW1lLCAodW5zaWduZWQgbG9uZylkaWZmKSk7CisKKwlpZiAoKHByb2JlLmZkID0gb3BlbihkZXYtPmJpZF9uYW1lLCBPX1JET05MWSkpIDwgMCkgeworCQlEQkcoREVCVUdfUFJPQkUsIHByaW50ZigiYmxraWRfdmVyaWZ5OiBlcnJvciAlcyAoJWQpIHdoaWxlICIKKwkJCQkJIm9wZW5pbmcgJXNcbiIsIHN0cmVycm9yKGVycm5vKSwgZXJybm8sCisJCQkJCWRldi0+YmlkX25hbWUpKTsKKwkJZ290byBvcGVuX2VycjsKKwl9CisKKwlwcm9iZS5jYWNoZSA9IGNhY2hlOworCXByb2JlLmRldiA9IGRldjsKKwlwcm9iZS5zYmJ1ZiA9IDA7CisJcHJvYmUuYnVmID0gMDsKKwlwcm9iZS5idWZfbWF4ID0gMDsKKworCS8qCisJICogSXRlcmF0ZSBvdmVyIHRoZSB0eXBlIGFycmF5LiAgSWYgd2UgYWxyZWFkeSBrbm93IHRoZSB0eXBlLAorCSAqIHRoZW4gdHJ5IHRoYXQgZmlyc3QuICBJZiBpdCBkb2Vzbid0IHdvcmssIHRoZW4gYmxvdyBhd2F5CisJICogdGhlIHR5cGUgaW5mb3JtYXRpb24sIGFuZCB0cnkgYWdhaW4uCisJICoKKwkgKi8KK3RyeV9hZ2FpbjoKKwl0eXBlID0gMDsKKwlpZiAoIWRldi0+YmlkX3R5cGUgfHwgIXN0cmNtcChkZXYtPmJpZF90eXBlLCAibWRyYWlkIikpIHsKKwkJdXVpZF90CXV1aWQ7CisKKwkJaWYgKGNoZWNrX21kcmFpZChwcm9iZS5mZCwgdXVpZCkgPT0gMCkgeworCQkJc2V0X3V1aWQoZGV2LCB1dWlkLCAwKTsKKwkJCXR5cGUgPSAibWRyYWlkIjsKKwkJCWdvdG8gZm91bmRfdHlwZTsKKwkJfQorCX0KKwlmb3IgKGlkID0gdHlwZV9hcnJheTsgaWQtPmJpbV90eXBlOyBpZCsrKSB7CisJCWlmIChkZXYtPmJpZF90eXBlICYmCisJCSAgICBzdHJjbXAoaWQtPmJpbV90eXBlLCBkZXYtPmJpZF90eXBlKSkKKwkJCWNvbnRpbnVlOworCisJCWlkeCA9IGlkLT5iaW1fa2JvZmYgKyAoaWQtPmJpbV9zYm9mZiA+PiAxMCk7CisJCWJ1ZiA9IGdldF9idWZmZXIoJnByb2JlLCAoX191NjQpIGlkeCA8PCAxMCwgMTAyNCk7CisJCWlmICghYnVmKQorCQkJY29udGludWU7CisKKwkJaWYgKG1lbWNtcChpZC0+YmltX21hZ2ljLCBidWYgKyAoaWQtPmJpbV9zYm9mZiAmIDB4M2ZmKSwKKwkJCSAgIGlkLT5iaW1fbGVuKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPmJpbV9wcm9iZSA9PSBOVUxMKSB8fAorCQkgICAgKGlkLT5iaW1fcHJvYmUoJnByb2JlLCBpZCwgYnVmKSA9PSAwKSkgeworCQkJdHlwZSA9IGlkLT5iaW1fdHlwZTsKKwkJCWdvdG8gZm91bmRfdHlwZTsKKwkJfQorCX0KKworCWlmICghaWQtPmJpbV90eXBlICYmIGRldi0+YmlkX3R5cGUpIHsKKwkJLyoKKwkJICogWmFwIHRoZSBkZXZpY2UgZmlsZXN5c3RlbSBpbmZvcm1hdGlvbiBhbmQgdHJ5IGFnYWluCisJCSAqLworCQlEQkcoREVCVUdfUFJPQkUsCisJCSAgICBwcmludGYoInByZXZpb3VzIGZzIHR5cGUgJXMgbm90IHZhbGlkLCAiCisJCQkgICAidHJ5aW5nIGZ1bGwgcHJvYmVcbiIsIGRldi0+YmlkX3R5cGUpKTsKKwkJaXRlciA9IGJsa2lkX3RhZ19pdGVyYXRlX2JlZ2luKGRldik7CisJCXdoaWxlIChibGtpZF90YWdfbmV4dChpdGVyLCAmdHlwZSwgJnZhbHVlKSA9PSAwKQorCQkJYmxraWRfc2V0X3RhZyhkZXYsIHR5cGUsIDAsIDApOworCQlibGtpZF90YWdfaXRlcmF0ZV9lbmQoaXRlcik7CisJCWdvdG8gdHJ5X2FnYWluOworCX0KKworCWlmICghZGV2LT5iaWRfdHlwZSkgeworCQlibGtpZF9mcmVlX2RldihkZXYpOworCQlkZXYgPSAwOworCQlnb3RvIGZvdW5kX3R5cGU7CisJfQorCitmb3VuZF90eXBlOgorCWlmIChkZXYgJiYgdHlwZSkgeworCQlkZXYtPmJpZF9kZXZubyA9IHN0LnN0X3JkZXY7CisJCWRldi0+YmlkX3RpbWUgPSB0aW1lKDApOworCQlkZXYtPmJpZF9mbGFncyB8PSBCTEtJRF9CSURfRkxfVkVSSUZJRUQ7CisJCWNhY2hlLT5iaWNfZmxhZ3MgfD0gQkxLSURfQklDX0ZMX0NIQU5HRUQ7CisKKwkJYmxraWRfc2V0X3RhZyhkZXYsICJUWVBFIiwgdHlwZSwgMCk7CisKKwkJREJHKERFQlVHX1BST0JFLCBwcmludGYoIiVzOiBkZXZubyAweCUwNGxseCwgdHlwZSAlc1xuIiwKKwkJCSAgIGRldi0+YmlkX25hbWUsIChsb25nIGxvbmcpc3Quc3RfcmRldiwgdHlwZSkpOworCX0KKworCWZyZWUocHJvYmUuc2JidWYpOworCWZyZWUocHJvYmUuYnVmKTsKKwlpZiAocHJvYmUuZmQgPj0gMCkKKwkJY2xvc2UocHJvYmUuZmQpOworCisJcmV0dXJuIGRldjsKK30KKworaW50IGJsa2lkX2tub3duX2ZzdHlwZShjb25zdCBjaGFyICpmc3R5cGUpCit7CisJc3RydWN0IGJsa2lkX21hZ2ljICppZDsKKworCWZvciAoaWQgPSB0eXBlX2FycmF5OyBpZC0+YmltX3R5cGU7IGlkKyspIHsKKwkJaWYgKHN0cmNtcChmc3R5cGUsIGlkLT5iaW1fdHlwZSkgPT0gMCkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIFRFU1RfUFJPR1JBTQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWJsa2lkX2RldiBkZXY7CisJYmxraWRfY2FjaGUgY2FjaGU7CisJaW50IHJldDsKKworCWlmIChhcmdjICE9IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZGV2aWNlXG4iCisJCQkiUHJvYmUgYSBzaW5nbGUgZGV2aWNlIHRvIGRldGVybWluZSB0eXBlXG4iLCBhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKChyZXQgPSBibGtpZF9nZXRfY2FjaGUoJmNhY2hlLCAiL2Rldi9udWxsIikpICE9IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogZXJyb3IgY3JlYXRpbmcgY2FjaGUgKCVkKVxuIiwKKwkJCWFyZ3ZbMF0sIHJldCk7CisJCWV4aXQoMSk7CisJfQorCWRldiA9IGJsa2lkX2dldF9kZXYoY2FjaGUsIGFyZ3ZbMV0sIEJMS0lEX0RFVl9OT1JNQUwpOworCWlmICghZGV2KSB7CisJCXByaW50ZigiJXM6ICVzIGhhcyBhbiB1bnN1cHBvcnRlZCB0eXBlXG4iLCBhcmd2WzBdLCBhcmd2WzFdKTsKKwkJcmV0dXJuICgxKTsKKwl9CisJcHJpbnRmKCJUWVBFPSclcydcbiIsIGRldi0+YmlkX3R5cGUgPyBkZXYtPmJpZF90eXBlIDogIihudWxsKSIpOworCWlmIChkZXYtPmJpZF9sYWJlbCkKKwkJcHJpbnRmKCJMQUJFTD0nJXMnXG4iLCBkZXYtPmJpZF9sYWJlbCk7CisJaWYgKGRldi0+YmlkX3V1aWQpCisJCXByaW50ZigiVVVJRD0nJXMnXG4iLCBkZXYtPmJpZF91dWlkKTsKKworCWJsa2lkX2ZyZWVfZGV2KGRldik7CisJcmV0dXJuICgwKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL3Byb2JlLmggYi9saWIvYmxraWQvcHJvYmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U4MGVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL3Byb2JlLmgKQEAgLTAsMCArMSw4MTYgQEAKKy8qCisgKiBwcm9iZS5oIC0gY29uc3RhbnRzIGFuZCBvbi1kaXNrIHN0cnVjdHVyZXMgZm9yIGV4dHJhY3RpbmcgZGV2aWNlIGRhdGEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgQW5kcmllcyBCcm91d2VyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMgYnkgVGhlb2RvcmUgVHMnbworICogQ29weXJpZ2h0IChDKSAyMDAxIGJ5IEFuZHJlYXMgRGlsZ2VyCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWZuZGVmIF9CTEtJRF9QUk9CRV9ICisjZGVmaW5lIF9CTEtJRF9QUk9CRV9ICisKKyNpbmNsdWRlIDxibGtpZC9ibGtpZF90eXBlcy5oPgorCitzdHJ1Y3QgYmxraWRfbWFnaWM7CisKKyNkZWZpbmUgU0JfQlVGRkVSX1NJWkUJCTB4MTEwMDAKKworc3RydWN0IGJsa2lkX3Byb2JlIHsKKwlpbnQJCQlmZDsKKwlibGtpZF9jYWNoZQkJY2FjaGU7CisJYmxraWRfZGV2CQlkZXY7CisJdW5zaWduZWQgY2hhcgkJKnNiYnVmOworCXNpemVfdAkJCXNiX3ZhbGlkOworCXVuc2lnbmVkIGNoYXIJCSpidWY7CisJc2l6ZV90CQkJYnVmX21heDsKK307CisKK3R5cGVkZWYgaW50ICgqYmxraWRfcHJvYmVfdCkoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJCSAgICAgc3RydWN0IGJsa2lkX21hZ2ljICppZCwgdW5zaWduZWQgY2hhciAqYnVmKTsKKworc3RydWN0IGJsa2lkX21hZ2ljIHsKKwljb25zdCBjaGFyCSpiaW1fdHlwZTsJLyogdHlwZSBuYW1lIGZvciB0aGlzIG1hZ2ljICovCisJbG9uZwkJYmltX2tib2ZmOwkvKiBraWxvYnl0ZSBvZmZzZXQgb2Ygc3VwZXJibG9jayAqLworCXVuc2lnbmVkCWJpbV9zYm9mZjsJLyogYnl0ZSBvZmZzZXQgd2l0aGluIHN1cGVyYmxvY2sgKi8KKwl1bnNpZ25lZAliaW1fbGVuOwkvKiBsZW5ndGggb2YgbWFnaWMgKi8KKwljb25zdCBjaGFyCSpiaW1fbWFnaWM7CS8qIG1hZ2ljIHN0cmluZyAqLworCWJsa2lkX3Byb2JlX3QJYmltX3Byb2JlOwkvKiBwcm9iZSBmdW5jdGlvbiAqLworfTsKKworLyoKKyAqIFN0cnVjdHVyZXMgZm9yIGVhY2ggb2YgdGhlIGNvbnRlbnQgdHlwZXMgd2Ugd2FudCB0byBleHRyYWN0IGluZm9ybWF0aW9uCisgKiBmcm9tLiAgV2UgZG8gbm90IG5lY2Vzc2FyaWx5IG5lZWQgdGhlIG1hZ2ljIGZpZWxkIGhlcmUsIGJlY2F1c2Ugd2UgaGF2ZQorICogYWxyZWFkeSBpZGVudGlmaWVkIHRoZSBjb250ZW50IHR5cGUgYmVmb3JlIHdlIGdldCB0aGlzIGZhci4gIEl0IG1heSBzdGlsbAorICogYmUgdXNlZnVsIGlmIHRoZXJlIGFyZSBwcm9iZSBmdW5jdGlvbnMgd2hpY2ggaGFuZGxlIG11bHRpcGxlIGNvbnRlbnQgdHlwZXMuCisgKi8KK3N0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHsKKwlfX3UzMgkJc19pbm9kZXNfY291bnQ7CisJX191MzIJCXNfYmxvY2tzX2NvdW50OworCV9fdTMyCQlzX3JfYmxvY2tzX2NvdW50OworCV9fdTMyCQlzX2ZyZWVfYmxvY2tzX2NvdW50OworCV9fdTMyCQlzX2ZyZWVfaW5vZGVzX2NvdW50OworCV9fdTMyCQlzX2ZpcnN0X2RhdGFfYmxvY2s7CisJX191MzIJCXNfbG9nX2Jsb2NrX3NpemU7CisJX191MzIJCXNfZHVtbXkzWzddOworCXVuc2lnbmVkIGNoYXIJc19tYWdpY1syXTsKKwlfX3UxNgkJc19zdGF0ZTsKKwlfX3UzMgkJc19kdW1teTVbOF07CisJX191MzIJCXNfZmVhdHVyZV9jb21wYXQ7CisJX191MzIJCXNfZmVhdHVyZV9pbmNvbXBhdDsKKwlfX3UzMgkJc19mZWF0dXJlX3JvX2NvbXBhdDsKKwl1bnNpZ25lZCBjaGFyICAgc191dWlkWzE2XTsKKwljaGFyCSAgIHNfdm9sdW1lX25hbWVbMTZdOworCWNoYXIJc19sYXN0X21vdW50ZWRbNjRdOworCV9fdTMyCXNfYWxnb3JpdGhtX3VzYWdlX2JpdG1hcDsKKwlfX3U4CXNfcHJlYWxsb2NfYmxvY2tzOworCV9fdTgJc19wcmVhbGxvY19kaXJfYmxvY2tzOworCV9fdTE2CXNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrczsKKwlfX3U4CXNfam91cm5hbF91dWlkWzE2XTsKKwlfX3UzMglzX2pvdXJuYWxfaW51bTsKKwlfX3UzMglzX2pvdXJuYWxfZGV2OworCV9fdTMyCXNfbGFzdF9vcnBoYW47CisJX191MzIJc19oYXNoX3NlZWRbNF07CisJX191OAlzX2RlZl9oYXNoX3ZlcnNpb247CisJX191OAlzX2pubF9iYWNrdXBfdHlwZTsKKwlfX3UxNglzX3Jlc2VydmVkX3dvcmRfcGFkOworCV9fdTMyCXNfZGVmYXVsdF9tb3VudF9vcHRzOworCV9fdTMyCXNfZmlyc3RfbWV0YV9iZzsKKwlfX3UzMglzX21rZnNfdGltZTsKKwlfX3UzMglzX2pubF9ibG9ja3NbMTddOworCV9fdTMyCXNfYmxvY2tzX2NvdW50X2hpOworCV9fdTMyCXNfcl9ibG9ja3NfY291bnRfaGk7CisJX191MzIJc19mcmVlX2Jsb2Nrc19oaTsKKwlfX3UxNglzX21pbl9leHRyYV9pc2l6ZTsKKwlfX3UxNglzX3dhbnRfZXh0cmFfaXNpemU7CisJX191MzIJc19mbGFnczsKKwlfX3UxNiAgIHNfcmFpZF9zdHJpZGU7CisJX191MTYgICBzX21tcF9pbnRlcnZhbDsKKwlfX3U2NCAgIHNfbW1wX2Jsb2NrOworCV9fdTMyICAgc19yYWlkX3N0cmlwZV93aWR0aDsKKwlfX3UzMiAgIHNfcmVzZXJ2ZWRbMTYzXTsKK307CisKKy8qIGZvciBzX2ZsYWdzICovCisjZGVmaW5lIEVYVDJfRkxBR1NfVEVTVF9GSUxFU1lTCQkweDAwMDQKKworLyogZm9yIHNfZmVhdHVyZV9jb21wYXQgKi8KKyNkZWZpbmUgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTAkJMHgwMDA0CisKKy8qIGZvciBzX2ZlYXR1cmVfcm9fY29tcGF0ICovCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSCTB4MDAwMQorI2RlZmluZSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEUJMHgwMDAyCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfQlRSRUVfRElSCTB4MDAwNAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRQkweDAwMDgKKyNkZWZpbmUgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTQkJMHgwMDEwCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfRElSX05MSU5LCTB4MDAyMAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0VYVFJBX0lTSVpFCTB4MDA0MAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBCQkweDAxMDAKKworLyogZm9yIHNfZmVhdHVyZV9pbmNvbXBhdCAqLworI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUJCTB4MDAwMgorI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUgkJMHgwMDA0CisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVgkweDAwMDgKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcJCTB4MDAxMAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUwkJMHgwMDQwIC8qIGV4dGVudHMgc3VwcG9ydCAqLworI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQJCTB4MDA4MAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTU1QCQkweDAxMDAKKyNkZWZpbmUgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcJCTB4MDIwMAorCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1VQUAkoRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVJ8IFwKKwkJCQkJIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRXwgXAorCQkJCQkgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIpCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9TVVBQCShFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEV8IFwKKwkJCQkJIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfVU5TVVBQT1JURUQJfkVYVDJfRkVBVFVSRV9JTkNPTVBBVF9TVVBQCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfVU5TVVBQT1JURUQJfkVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1VQUAorCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9ST19DT01QQVRfU1VQUAkoRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVJ8IFwKKwkJCQkJIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRXwgXAorCQkJCQkgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIpCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9TVVBQCShFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEV8IFwKKwkJCQkJIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSfCBcCisJCQkJCSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykKKyNkZWZpbmUgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1VOU1VQUE9SVEVECX5FWFQzX0ZFQVRVUkVfSU5DT01QQVRfU1VQUAorI2RlZmluZSBFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX1VOU1VQUE9SVEVECX5FWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFAKKworCitzdHJ1Y3QgeGZzX3N1cGVyX2Jsb2NrIHsKKwl1bnNpZ25lZCBjaGFyCXhzX21hZ2ljWzRdOworCV9fdTMyCQl4c19ibG9ja3NpemU7CisJX191NjQJCXhzX2RibG9ja3M7CisJX191NjQJCXhzX3JibG9ja3M7CisJX191MzIJCXhzX2R1bW15MVsyXTsKKwl1bnNpZ25lZCBjaGFyCXhzX3V1aWRbMTZdOworCV9fdTMyCQl4c19kdW1teTJbMTVdOworCWNoYXIJCXhzX2ZuYW1lWzEyXTsKKwlfX3UzMgkJeHNfZHVtbXkzWzJdOworCV9fdTY0CQl4c19pY291bnQ7CisJX191NjQJCXhzX2lmcmVlOworCV9fdTY0CQl4c19mZGJsb2NrczsKK307CisKK3N0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jayB7CisJX191MzIJCXJzX2Jsb2Nrc19jb3VudDsKKwlfX3UzMgkJcnNfZnJlZV9ibG9ja3M7CisJX191MzIJCXJzX3Jvb3RfYmxvY2s7CisJX191MzIJCXJzX2pvdXJuYWxfYmxvY2s7CisJX191MzIJCXJzX2pvdXJuYWxfZGV2OworCV9fdTMyCQlyc19vcmlnX2pvdXJuYWxfc2l6ZTsKKwlfX3UzMgkJcnNfZHVtbXkyWzVdOworCV9fdTE2CQlyc19ibG9ja3NpemU7CisJX191MTYJCXJzX2R1bW15M1szXTsKKwl1bnNpZ25lZCBjaGFyCXJzX21hZ2ljWzEyXTsKKwlfX3UzMgkJcnNfZHVtbXk0WzVdOworCXVuc2lnbmVkIGNoYXIJcnNfdXVpZFsxNl07CisJY2hhcgkJcnNfbGFiZWxbMTZdOworfTsKKworc3RydWN0IHJlaXNlcjRfc3VwZXJfYmxvY2sgeworCXVuc2lnbmVkIGNoYXIJcnM0X21hZ2ljWzE2XTsKKwlfX3UxNgkJcnM0X2R1bW15WzJdOworCXVuc2lnbmVkIGNoYXIJcnM0X3V1aWRbMTZdOworCXVuc2lnbmVkIGNoYXIJcnM0X2xhYmVsWzE2XTsKKwlfX3U2NAkJcnM0X2R1bW15MjsKK307CisKK3N0cnVjdCBqZnNfc3VwZXJfYmxvY2sgeworCXVuc2lnbmVkIGNoYXIJanNfbWFnaWNbNF07CisJX191MzIJCWpzX3ZlcnNpb247CisJX191NjQJCWpzX3NpemU7CisJX191MzIJCWpzX2JzaXplOwkvKiA0OiBhZ2dyZWdhdGUgYmxvY2sgc2l6ZSBpbiBieXRlcyAqLworCV9fdTE2CQlqc19sMmJzaXplOwkvKiAyOiBsb2cyIG9mIHNfYnNpemUgKi8KKwlfX3UxNgkJanNfbDJiZmFjdG9yOwkvKiAyOiBsb2cyKHNfYnNpemUvaGFyZHdhcmUgYmxvY2sgc2l6ZSkgKi8KKwlfX3UzMgkJanNfcGJzaXplOwkvKiA0OiBoYXJkd2FyZS9MVk0gYmxvY2sgc2l6ZSBpbiBieXRlcyAqLworCV9fdTE2CQlqc19sMnBic2l6ZTsJLyogMjogbG9nMiBvZiBzX3Bic2l6ZSAqLworCV9fdTE2IAkJanNfcGFkOwkJLyogMjogcGFkZGluZyBuZWNlc3NhcnkgZm9yIGFsaWdubWVudCAqLworCV9fdTMyCQlqc19kdW1teTJbMjZdOworCXVuc2lnbmVkIGNoYXIJanNfdXVpZFsxNl07CisJdW5zaWduZWQgY2hhcglqc19sYWJlbFsxNl07CisJdW5zaWduZWQgY2hhcglqc19sb2d1dWlkWzE2XTsKK307CisKK3N0cnVjdCByb21mc19zdXBlcl9ibG9jayB7CisJdW5zaWduZWQgY2hhcglyb3NfbWFnaWNbOF07CisJX191MzIJCXJvc19kdW1teTFbMl07CisJdW5zaWduZWQgY2hhcglyb3Nfdm9sdW1lWzE2XTsKK307CisKK3N0cnVjdCBjcmFtZnNfc3VwZXJfYmxvY2sgeworCV9fdTgJCW1hZ2ljWzRdOworCV9fdTMyCQlzaXplOworCV9fdTMyCQlmbGFnczsKKwlfX3UzMgkJZnV0dXJlOworCV9fdTgJCXNpZ25hdHVyZVsxNl07CisJc3RydWN0IGNyYW1mc19pbmZvIHsKKwkJX191MzIJCWNyYzsKKwkJX191MzIJCWVkaXRpb247CisJCV9fdTMyCQlibG9ja3M7CisJCV9fdTMyCQlmaWxlczsKKwl9IGluZm87CisJX191OAkJbmFtZVsxNl07Cit9OworCitzdHJ1Y3Qgc3dhcF9pZF9ibG9jayB7CisvKgl1bnNpZ25lZCBjaGFyCXN3c19ib290WzEwMjRdOyAqLworCV9fdTMyCQlzd3NfdmVyc2lvbjsKKwlfX3UzMgkJc3dzX2xhc3RwYWdlOworCV9fdTMyCQlzd3NfbnJiYWQ7CisJdW5zaWduZWQgY2hhcglzd3NfdXVpZFsxNl07CisJY2hhcgkJc3dzX3ZvbHVtZVsxNl07CisJdW5zaWduZWQgY2hhcglzd3NfcGFkWzExN107CisJX191MzIJCXN3c19iYWRwZzsKK307CisKKy8qIFl1Y2t5IG1pc2FsaWduZWQgdmFsdWVzICovCitzdHJ1Y3QgdmZhdF9zdXBlcl9ibG9jayB7CisvKiAwMCovCXVuc2lnbmVkIGNoYXIJdnNfaWdub3JlZFszXTsKKy8qIDAzKi8JdW5zaWduZWQgY2hhcgl2c19zeXNpZFs4XTsKKy8qIDBiKi8JdW5zaWduZWQgY2hhcgl2c19zZWN0b3Jfc2l6ZVsyXTsKKy8qIDBkKi8JX191OAkJdnNfY2x1c3Rlcl9zaXplOworLyogMGUqLwlfX3UxNgkJdnNfcmVzZXJ2ZWQ7CisvKiAxMCovCV9fdTgJCXZzX2ZhdHM7CisvKiAxMSovCXVuc2lnbmVkIGNoYXIJdnNfZGlyX2VudHJpZXNbMl07CisvKiAxMyovCXVuc2lnbmVkIGNoYXIJdnNfc2VjdG9yc1syXTsKKy8qIDE1Ki8JdW5zaWduZWQgY2hhcgl2c19tZWRpYTsKKy8qIDE2Ki8JX191MTYJCXZzX2ZhdF9sZW5ndGg7CisvKiAxOCovCV9fdTE2CQl2c19zZWNzX3RyYWNrOworLyogMWEqLwlfX3UxNgkJdnNfaGVhZHM7CisvKiAxYyovCV9fdTMyCQl2c19oaWRkZW47CisvKiAyMCovCV9fdTMyCQl2c190b3RhbF9zZWN0OworLyogMjQqLwlfX3UzMgkJdnNfZmF0MzJfbGVuZ3RoOworLyogMjgqLwlfX3UxNgkJdnNfZmxhZ3M7CisvKiAyYSovCV9fdTgJCXZzX3ZlcnNpb25bMl07CisvKiAyYyovCV9fdTMyCQl2c19yb290X2NsdXN0ZXI7CisvKiAzMCovCV9fdTE2CQl2c19pbnNmb19zZWN0b3I7CisvKiAzMiovCV9fdTE2CQl2c19iYWNrdXBfYm9vdDsKKy8qIDM0Ki8JX191MTYJCXZzX3Jlc2VydmVkMls2XTsKKy8qIDQwKi8JdW5zaWduZWQgY2hhcgl2c191bmtub3duWzNdOworLyogNDMqLwl1bnNpZ25lZCBjaGFyCXZzX3Nlcm5vWzRdOworLyogNDcqLwl1bnNpZ25lZCBjaGFyCXZzX2xhYmVsWzExXTsKKy8qIDUyKi8JdW5zaWduZWQgY2hhciAgIHZzX21hZ2ljWzhdOworLyogNWEqLwl1bnNpZ25lZCBjaGFyCXZzX2R1bW15MlsxNjRdOworLyoxZmUqLwl1bnNpZ25lZCBjaGFyCXZzX3BtYWdpY1syXTsKK307CisKKy8qIFl1Y2t5IG1pc2FsaWduZWQgdmFsdWVzICovCitzdHJ1Y3QgbXNkb3Nfc3VwZXJfYmxvY2sgeworLyogMDAqLwl1bnNpZ25lZCBjaGFyCW1zX2lnbm9yZWRbM107CisvKiAwMyovCXVuc2lnbmVkIGNoYXIJbXNfc3lzaWRbOF07CisvKiAwYiovCXVuc2lnbmVkIGNoYXIJbXNfc2VjdG9yX3NpemVbMl07CisvKiAwZCovCV9fdTgJCW1zX2NsdXN0ZXJfc2l6ZTsKKy8qIDBlKi8JX191MTYJCW1zX3Jlc2VydmVkOworLyogMTAqLwlfX3U4CQltc19mYXRzOworLyogMTEqLwl1bnNpZ25lZCBjaGFyCW1zX2Rpcl9lbnRyaWVzWzJdOworLyogMTMqLwl1bnNpZ25lZCBjaGFyCW1zX3NlY3RvcnNbMl07CisvKiAxNSovCXVuc2lnbmVkIGNoYXIJbXNfbWVkaWE7CisvKiAxNiovCV9fdTE2CQltc19mYXRfbGVuZ3RoOworLyogMTgqLwlfX3UxNgkJbXNfc2Vjc190cmFjazsKKy8qIDFhKi8JX191MTYJCW1zX2hlYWRzOworLyogMWMqLwlfX3UzMgkJbXNfaGlkZGVuOworLyogMjAqLwlfX3UzMgkJbXNfdG90YWxfc2VjdDsKKy8qIDI0Ki8JdW5zaWduZWQgY2hhcgltc191bmtub3duWzNdOworLyogMjcqLwl1bnNpZ25lZCBjaGFyCW1zX3Nlcm5vWzRdOworLyogMmIqLwl1bnNpZ25lZCBjaGFyCW1zX2xhYmVsWzExXTsKKy8qIDM2Ki8JdW5zaWduZWQgY2hhciAgIG1zX21hZ2ljWzhdOworLyogM2QqLwl1bnNpZ25lZCBjaGFyCW1zX2R1bW15MlsxOTJdOworLyoxZmUqLwl1bnNpZ25lZCBjaGFyCW1zX3BtYWdpY1syXTsKK307CisKK3N0cnVjdCB2ZmF0X2Rpcl9lbnRyeSB7CisJX191OAluYW1lWzExXTsKKwlfX3U4CWF0dHI7CisJX191MTYJdGltZV9jcmVhdDsKKwlfX3UxNglkYXRlX2NyZWF0OworCV9fdTE2CXRpbWVfYWNjOworCV9fdTE2CWRhdGVfYWNjOworCV9fdTE2CWNsdXN0ZXJfaGlnaDsKKwlfX3UxNgl0aW1lX3dyaXRlOworCV9fdTE2CWRhdGVfd3JpdGU7CisJX191MTYJY2x1c3Rlcl9sb3c7CisJX191MzIJc2l6ZTsKK307CisKKy8qIG1heGltdW0gbnVtYmVyIG9mIGNsdXN0ZXJzICovCisjZGVmaW5lIEZBVDEyX01BWCAweEZGNAorI2RlZmluZSBGQVQxNl9NQVggMHhGRkY0CisjZGVmaW5lIEZBVDMyX01BWCAweDBGRkZGRkY2CisKK3N0cnVjdCBtaW5peF9zdXBlcl9ibG9jayB7CisJX191MTYJCW1zX25pbm9kZXM7CisJX191MTYJCW1zX256b25lczsKKwlfX3UxNgkJbXNfaW1hcF9ibG9ja3M7CisJX191MTYJCW1zX3ptYXBfYmxvY2tzOworCV9fdTE2CQltc19maXJzdGRhdGF6b25lOworCV9fdTE2CQltc19sb2dfem9uZV9zaXplOworCV9fdTMyCQltc19tYXhfc2l6ZTsKKwl1bnNpZ25lZCBjaGFyCW1zX21hZ2ljWzJdOworCV9fdTE2CQltc19zdGF0ZTsKKwlfX3UzMgkJbXNfem9uZXM7Cit9OworCitzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfcyB7CisJX191MzIgbWRfbWFnaWM7CisJX191MzIgbWFqb3JfdmVyc2lvbjsKKwlfX3UzMiBtaW5vcl92ZXJzaW9uOworCV9fdTMyIHBhdGNoX3ZlcnNpb247CisJX191MzIgZ3ZhbGlkX3dvcmRzOworCV9fdTMyIHNldF91dWlkMDsKKwlfX3UzMiBjdGltZTsKKwlfX3UzMiBsZXZlbDsKKwlfX3UzMiBzaXplOworCV9fdTMyIG5yX2Rpc2tzOworCV9fdTMyIHJhaWRfZGlza3M7CisJX191MzIgbWRfbWlub3I7CisJX191MzIgbm90X3BlcnNpc3RlbnQ7CisJX191MzIgc2V0X3V1aWQxOworCV9fdTMyIHNldF91dWlkMjsKKwlfX3UzMiBzZXRfdXVpZDM7Cit9OworCitzdHJ1Y3QgaGZzX3N1cGVyX2Jsb2NrIHsKKwljaGFyCWhfbWFnaWNbMl07CisJY2hhcgloX2R1bW15WzE4XTsKKwlfX3UzMgloX2Jsa3NpemU7Cit9OworCitzdHJ1Y3Qgb2Nmc192b2x1bWVfaGVhZGVyIHsKKwl1bnNpZ25lZCBjaGFyCW1pbm9yX3ZlcnNpb25bNF07CisJdW5zaWduZWQgY2hhcgltYWpvcl92ZXJzaW9uWzRdOworCXVuc2lnbmVkIGNoYXIJc2lnbmF0dXJlWzEyOF07CisJY2hhcgkJbW91bnRbMTI4XTsKKwl1bnNpZ25lZCBjaGFyICAgbW91bnRfbGVuWzJdOworfTsKKworc3RydWN0IG9jZnNfdm9sdW1lX2xhYmVsIHsKKwl1bnNpZ25lZCBjaGFyCWRpc2tfbG9ja1s0OF07CisJY2hhcgkJbGFiZWxbNjRdOworCXVuc2lnbmVkIGNoYXIJbGFiZWxfbGVuWzJdOworCXVuc2lnbmVkIGNoYXIgIHZvbF9pZFsxNl07CisJdW5zaWduZWQgY2hhciAgdm9sX2lkX2xlblsyXTsKK307CisKKyNkZWZpbmUgb2Nmc21ham9yKG8pICgoX191MzIpby5tYWpvcl92ZXJzaW9uWzBdIFwKKyAgICAgICAgICAgICAgICAgICArICgoKF9fdTMyKSBvLm1ham9yX3ZlcnNpb25bMV0pIDw8IDgpIFwKKyAgICAgICAgICAgICAgICAgICArICgoKF9fdTMyKSBvLm1ham9yX3ZlcnNpb25bMl0pIDw8IDE2KSBcCisgICAgICAgICAgICAgICAgICAgKyAoKChfX3UzMikgby5tYWpvcl92ZXJzaW9uWzNdKSA8PCAyNCkpCisjZGVmaW5lIG9jZnNsYWJlbGxlbihvKQkoKF9fdTMyKW8ubGFiZWxfbGVuWzBdICsgKCgoX191MzIpIG8ubGFiZWxfbGVuWzFdKSA8PCA4KSkKKyNkZWZpbmUgb2Nmc21vdW50bGVuKG8pCSgoX191MzIpby5tb3VudF9sZW5bMF0gKyAoKChfX3UzMikgby5tb3VudF9sZW5bMV0pPDw4KSkKKworI2RlZmluZSBPQ0ZTX01BR0lDICJPcmFjbGVDRlMiCisKK3N0cnVjdCBvY2ZzMl9zdXBlcl9ibG9jayB7CisJdW5zaWduZWQgY2hhciAgc2lnbmF0dXJlWzhdOworCXVuc2lnbmVkIGNoYXIgIHNfZHVtbXkxWzE4NF07CisJdW5zaWduZWQgY2hhciAgc19kdW1teTJbODBdOworCWNoYXIJICAgICAgIHNfbGFiZWxbNjRdOworCXVuc2lnbmVkIGNoYXIgIHNfdXVpZFsxNl07Cit9OworCisjZGVmaW5lIE9DRlMyX01JTl9CTE9DS1NJWkUgICAgICAgICAgICAgNTEyCisjZGVmaW5lIE9DRlMyX01BWF9CTE9DS1NJWkUgICAgICAgICAgICAgNDA5NgorCisjZGVmaW5lIE9DRlMyX1NVUEVSX0JMT0NLX0JMS05PICAgICAgICAgMgorCisjZGVmaW5lIE9DRlMyX1NVUEVSX0JMT0NLX1NJR05BVFVSRSAgICAgIk9DRlNWMiIKKworc3RydWN0IG9yYWNsZV9hc21fZGlza19sYWJlbCB7CisJY2hhciBkdW1teVszMl07CisJY2hhciBkbF90YWdbOF07CisJY2hhciBkbF9pZFsyNF07Cit9OworCisjZGVmaW5lIE9SQUNMRV9BU01fRElTS19MQUJFTF9NQVJLRUQgICAgIk9SQ0xESVNLIgorI2RlZmluZSBPUkFDTEVfQVNNX0RJU0tfTEFCRUxfT0ZGU0VUICAgIDMyCisKK3N0cnVjdCBpc29fdm9sdW1lX2Rlc2NyaXB0b3IgeworCXVuc2lnbmVkIGNoYXIJdmRfdHlwZTsKKwl1bnNpZ25lZCBjaGFyCXZkX2lkWzVdOworCXVuc2lnbmVkIGNoYXIJdmRfdmVyc2lvbjsKKwl1bnNpZ25lZCBjaGFyCWZsYWdzOworCXVuc2lnbmVkIGNoYXIJc3lzdGVtX2lkWzMyXTsKKwl1bnNpZ25lZCBjaGFyCXZvbHVtZV9pZFszMl07CisJdW5zaWduZWQgY2hhcgl1bnVzZWRbOF07CisJdW5zaWduZWQgY2hhcglzcGFjZV9zaXplWzhdOworCXVuc2lnbmVkIGNoYXIJZXNjYXBlX3NlcXVlbmNlc1s4XTsKK307CisKKy8qIENvbW1vbiBnZnMvZ2ZzMiBjb25zdGFudHM6ICovCisjZGVmaW5lIEdGU19NQUdJQyAgICAgICAgICAgICAgIDB4MDExNjE5NzAKKyNkZWZpbmUgR0ZTX0RFRkFVTFRfQlNJWkUgICAgICAgNDA5NgorI2RlZmluZSBHRlNfU1VQRVJCTE9DS19PRkZTRVQJKDB4MTAgKiBHRlNfREVGQVVMVF9CU0laRSkKKyNkZWZpbmUgR0ZTX01FVEFUWVBFX1NCICAgICAgICAgMQorI2RlZmluZSBHRlNfRk9STUFUX1NCICAgICAgICAgICAxMDAKKyNkZWZpbmUgR0ZTX0xPQ0tOQU1FX0xFTiAgICAgICAgNjQKKworLyogZ2ZzMSBjb25zdGFudHM6ICovCisjZGVmaW5lIEdGU19GT1JNQVRfRlMgICAgICAgICAgIDEzMDkKKyNkZWZpbmUgR0ZTX0ZPUk1BVF9NVUxUSSAgICAgICAgMTQwMQorLyogZ2ZzMiBjb25zdGFudHM6ICovCisjZGVmaW5lIEdGUzJfRk9STUFUX0ZTICAgICAgICAgIDE4MDEKKyNkZWZpbmUgR0ZTMl9GT1JNQVRfTVVMVEkgICAgICAgMTkwMAorCitzdHJ1Y3QgZ2ZzMl9tZXRhX2hlYWRlciB7CisJX191MzIgbWhfbWFnaWM7CisJX191MzIgbWhfdHlwZTsKKwlfX3U2NCBfX3BhZDA7ICAgICAgICAgIC8qIFdhcyBnZW5lcmF0aW9uIG51bWJlciBpbiBnZnMxICovCisJX191MzIgbWhfZm9ybWF0OworCV9fdTMyIF9fcGFkMTsgICAgICAgICAgLyogV2FzIGluY2FybmF0aW9uIG51bWJlciBpbiBnZnMxICovCit9OworCitzdHJ1Y3QgZ2ZzMl9pbnVtIHsKKwlfX3U2NCBub19mb3JtYWxfaW5vOworCV9fdTY0IG5vX2FkZHI7Cit9OworCitzdHJ1Y3QgZ2ZzMl9zYiB7CisJc3RydWN0IGdmczJfbWV0YV9oZWFkZXIgc2JfaGVhZGVyOworCisJX191MzIgc2JfZnNfZm9ybWF0OworCV9fdTMyIHNiX211bHRpaG9zdF9mb3JtYXQ7CisJX191MzIgIF9fcGFkMDsgIC8qIFdhcyBzdXBlcmJsb2NrIGZsYWdzIGluIGdmczEgKi8KKworCV9fdTMyIHNiX2JzaXplOworCV9fdTMyIHNiX2JzaXplX3NoaWZ0OworCV9fdTMyIF9fcGFkMTsgICAvKiBXYXMgam91cm5hbCBzZWdtZW50IHNpemUgaW4gZ2ZzMSAqLworCisJc3RydWN0IGdmczJfaW51bSBzYl9tYXN0ZXJfZGlyOyAvKiBXYXMgamluZGV4IGRpbm9kZSBpbiBnZnMxICovCisJc3RydWN0IGdmczJfaW51bSBfX3BhZDI7IC8qIFdhcyByaW5kZXggZGlub2RlIGluIGdmczEgKi8KKwlzdHJ1Y3QgZ2ZzMl9pbnVtIHNiX3Jvb3RfZGlyOworCisJY2hhciBzYl9sb2NrcHJvdG9bR0ZTX0xPQ0tOQU1FX0xFTl07CisJY2hhciBzYl9sb2NrdGFibGVbR0ZTX0xPQ0tOQU1FX0xFTl07CisJLyogSW4gZ2ZzMSwgcXVvdGEgYW5kIGxpY2Vuc2UgZGlub2RlcyBmb2xsb3dlZCAqLworfTsKKworc3RydWN0IG50ZnNfc3VwZXJfYmxvY2sgeworCV9fdTgJanVtcFszXTsKKwlfX3U4CW9lbV9pZFs4XTsKKwlfX3U4CWJpb3NfcGFyYW1ldGVyX2Jsb2NrWzI1XTsKKwlfX3UxNgl1bnVzZWRbMl07CisJX191NjQJbnVtYmVyX29mX3NlY3RvcnM7CisJX191NjQJbWZ0X2NsdXN0ZXJfbG9jYXRpb247CisJX191NjQJbWZ0X21pcnJvcl9jbHVzdGVyX2xvY2F0aW9uOworCV9fczgJY2x1c3Rlcl9wZXJfbWZ0X3JlY29yZDsKKwlfX3U4CXJlc2VydmVkMVszXTsKKwlfX3M4CWNsdXN0ZXJfcGVyX2luZGV4X3JlY29yZDsKKwlfX3U4CXJlc2VydmVkMlszXTsKKwlfX3U2NAl2b2x1bWVfc2VyaWFsOworCV9fdTE2CWNoZWNrc3VtOworfTsKKworc3RydWN0IG1hc3Rlcl9maWxlX3RhYmxlX3JlY29yZCB7CisJX191MzIJbWFnaWM7CisJX191MTYJdXNhX29mczsKKwlfX3UxNgl1c2FfY291bnQ7CisJX191NjQJbHNuOworCV9fdTE2CXNlcXVlbmNlX251bWJlcjsKKwlfX3UxNglsaW5rX2NvdW50OworCV9fdTE2CWF0dHJzX29mZnNldDsKKwlfX3UxNglmbGFnczsKKwlfX3UzMglieXRlc19pbl91c2U7CisJX191MzIJYnl0ZXNfYWxsb2NhdGVkOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBmaWxlX2F0dHJpYnV0ZSB7CisJX191MzIJdHlwZTsKKwlfX3UzMglsZW47CisJX191OAlub25fcmVzaWRlbnQ7CisJX191OAluYW1lX2xlbjsKKwlfX3UxNgluYW1lX29mZnNldDsKKwlfX3UxNglmbGFnczsKKwlfX3UxNglpbnN0YW5jZTsKKwlfX3UzMgl2YWx1ZV9sZW47CisJX191MTYJdmFsdWVfb2Zmc2V0OworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKyNkZWZpbmUgTUZUX1JFQ09SRF9WT0xVTUUJCQkzCisjZGVmaW5lIE1GVF9SRUNPUkRfQVRUUl9WT0xVTUVfTkFNRQkJMHg2MAorI2RlZmluZSBNRlRfUkVDT1JEX0FUVFJfVk9MVU1FX0lORk8JCTB4NzAKKyNkZWZpbmUgTUZUX1JFQ09SRF9BVFRSX09CSkVDVF9JRAkJMHg0MAorI2RlZmluZSBNRlRfUkVDT1JEX0FUVFJfRU5ECQkJMHhmZmZmZmZmZnUKKworLyogSEZTIC8gSEZTKyAqLworc3RydWN0IGhmc19maW5kZXJfaW5mbyB7CisgICAgICAgIF9fdTMyICAgICAgICBib290X2ZvbGRlcjsKKyAgICAgICAgX191MzIgICAgICAgIHN0YXJ0X2FwcDsKKyAgICAgICAgX191MzIgICAgICAgIG9wZW5fZm9sZGVyOworICAgICAgICBfX3UzMiAgICAgICAgb3M5X2ZvbGRlcjsKKyAgICAgICAgX191MzIgICAgICAgIHJlc2VydmVkOworICAgICAgICBfX3UzMiAgICAgICAgb3N4X2ZvbGRlcjsKKyAgICAgICAgX191OCAgICAgICAgIGlkWzhdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhmc19tZGIgeworICAgICAgICBfX3U4ICAgICAgICAgc2lnbmF0dXJlWzJdOworICAgICAgICBfX3UzMiAgICAgICAgY3JfZGF0ZTsKKyAgICAgICAgX191MzIgICAgICAgIGxzX01vZDsKKyAgICAgICAgX191MTYgICAgICAgIGF0cmI7CisgICAgICAgIF9fdTE2ICAgICAgICBubV9mbHM7CisgICAgICAgIF9fdTE2ICAgICAgICB2Ym1fc3Q7CisgICAgICAgIF9fdTE2ICAgICAgICBhbGxvY19wdHI7CisgICAgICAgIF9fdTE2ICAgICAgICBubV9hbF9ibGtzOworICAgICAgICBfX3UzMiAgICAgICAgYWxfYmxrX3NpemU7CisgICAgICAgIF9fdTMyICAgICAgICBjbHBfc2l6ZTsKKyAgICAgICAgX191MTYgICAgICAgIGFsX2JsX3N0OworICAgICAgICBfX3UzMiAgICAgICAgbnh0X2NuaWQ7CisgICAgICAgIF9fdTE2ICAgICAgICBmcmVlX2JrczsKKyAgICAgICAgX191OCAgICAgICAgIGxhYmVsX2xlbjsKKyAgICAgICAgX191OCAgICAgICAgIGxhYmVsWzI3XTsKKyAgICAgICAgX191MzIgICAgICAgIHZvbF9ia3VwOworICAgICAgICBfX3UxNiAgICAgICAgdm9sX3NlcV9udW07CisgICAgICAgIF9fdTMyICAgICAgICB3cl9jbnQ7CisgICAgICAgIF9fdTMyICAgICAgICB4dF9jbHVtcF9zaXplOworICAgICAgICBfX3UzMiAgICAgICAgY3RfY2x1bXBfc2l6ZTsKKyAgICAgICAgX191MTYgICAgICAgIG51bV9yb290X2RpcnM7CisgICAgICAgIF9fdTMyICAgICAgICBmaWxlX2NvdW50OworICAgICAgICBfX3UzMiAgICAgICAgZGlyX2NvdW50OworICAgICAgICBzdHJ1Y3QgaGZzX2ZpbmRlcl9pbmZvIGZpbmRlcl9pbmZvOworICAgICAgICBfX3U4ICAgICAgICAgZW1iZWRfc2lnWzJdOworICAgICAgICBfX3UxNiAgICAgICAgZW1iZWRfc3RhcnRibG9jazsKKyAgICAgICAgX191MTYgICAgICAgIGVtYmVkX2Jsb2NrY291bnQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKyNkZWZpbmUgSEZTX05PREVfTEVBRgkJCTB4ZmYKKyNkZWZpbmUgSEZTUExVU19QT1JfQ05JRAkJMQorCitzdHJ1Y3QgaGZzcGx1c19ibm9kZV9kZXNjcmlwdG9yIHsKKwlfX3UzMgkJbmV4dDsKKwlfX3UzMgkJcHJldjsKKwlfX3U4CQl0eXBlOworCV9fdTgJCWhlaWdodDsKKwlfX3UxNgkJbnVtX3JlY3M7CisJX191MTYJCXJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhmc3BsdXNfYmhlYWRlcl9yZWNvcmQgeworCV9fdTE2CQlkZXB0aDsKKwlfX3UzMgkJcm9vdDsKKwlfX3UzMgkJbGVhZl9jb3VudDsKKwlfX3UzMgkJbGVhZl9oZWFkOworCV9fdTMyCQlsZWFmX3RhaWw7CisJX191MTYJCW5vZGVfc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoZnNwbHVzX2NhdGFsb2dfa2V5IHsKKwlfX3UxNglrZXlfbGVuOworCV9fdTMyCXBhcmVudF9pZDsKKwlfX3UxNgl1bmljb2RlX2xlbjsKKwlfX3U4CQl1bmljb2RlWzI1NSAqIDJdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhmc3BsdXNfZXh0ZW50IHsKKwlfX3UzMgkJc3RhcnRfYmxvY2s7CisJX191MzIJCWJsb2NrX2NvdW50OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBIRlNQTFVTX0VYVEVOVF9DT1VOVAkJOAorc3RydWN0IGhmc3BsdXNfZm9yayB7CisJX191NjQJCXRvdGFsX3NpemU7CisJX191MzIJCWNsdW1wX3NpemU7CisJX191MzIJCXRvdGFsX2Jsb2NrczsKKwlzdHJ1Y3QgaGZzcGx1c19leHRlbnQgZXh0ZW50c1tIRlNQTFVTX0VYVEVOVF9DT1VOVF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGZzcGx1c192b2xfaGVhZGVyIHsKKwlfX3U4CQlzaWduYXR1cmVbMl07CisJX191MTYJCXZlcnNpb247CisJX191MzIJCWF0dHJpYnV0ZXM7CisJX191MzIJCWxhc3RfbW91bnRfdmVyczsKKwlfX3UzMgkJcmVzZXJ2ZWQ7CisJX191MzIJCWNyZWF0ZV9kYXRlOworCV9fdTMyCQltb2RpZnlfZGF0ZTsKKwlfX3UzMgkJYmFja3VwX2RhdGU7CisJX191MzIJCWNoZWNrZWRfZGF0ZTsKKwlfX3UzMgkJZmlsZV9jb3VudDsKKwlfX3UzMgkJZm9sZGVyX2NvdW50OworCV9fdTMyCQlibG9ja3NpemU7CisJX191MzIJCXRvdGFsX2Jsb2NrczsKKwlfX3UzMgkJZnJlZV9ibG9ja3M7CisJX191MzIJCW5leHRfYWxsb2M7CisJX191MzIJCXJzcmNfY2x1bXBfc3o7CisJX191MzIJCWRhdGFfY2x1bXBfc3o7CisJX191MzIJCW5leHRfY25pZDsKKwlfX3UzMgkJd3JpdGVfY291bnQ7CisJX191NjQJCWVuY29kaW5nc19ibXA7CisJc3RydWN0IGhmc19maW5kZXJfaW5mbyBmaW5kZXJfaW5mbzsKKwlzdHJ1Y3QgaGZzcGx1c19mb3JrIGFsbG9jX2ZpbGU7CisJc3RydWN0IGhmc3BsdXNfZm9yayBleHRfZmlsZTsKKwlzdHJ1Y3QgaGZzcGx1c19mb3JrIGNhdF9maWxlOworCXN0cnVjdCBoZnNwbHVzX2ZvcmsgYXR0cl9maWxlOworCXN0cnVjdCBoZnNwbHVzX2Zvcmsgc3RhcnRfZmlsZTsKK30gIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKy8qIHRoaXMgaXMgbHZtJ3MgbGFiZWxfaGVhZGVyICYgcHZfaGVhZGVyIGNvbWJpbmVkLiAqLworCisjZGVmaW5lIExWTTJfSURfTEVOIDMyCisKK3N0cnVjdCBsdm0yX3B2X2xhYmVsX2hlYWRlciB7CisJLyogbGFiZWxfaGVhZGVyICovCisJX191OAlpZFs4XTsJCS8qIExBQkVMT05FICovCisJX191NjQJc2VjdG9yX3hsOwkvKiBTZWN0b3IgbnVtYmVyIG9mIHRoaXMgbGFiZWwgKi8KKwlfX3UzMgljcmNfeGw7CQkvKiBGcm9tIG5leHQgZmllbGQgdG8gZW5kIG9mIHNlY3RvciAqLworCV9fdTMyCW9mZnNldF94bDsJLyogT2Zmc2V0IGZyb20gc3RhcnQgb2Ygc3RydWN0IHRvIGNvbnRlbnRzICovCisJX191OAl0eXBlWzhdOwkvKiBMVk0yIDAwMSAqLworCS8qIHB2X2hlYWRlciAqLworCV9fdTgJcHZfdXVpZFtMVk0yX0lEX0xFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKgorICogdGhpcyBpcyBhIHZlcnkgZ2VuZXJvdXMgcG9ydGlvbiBvZiB0aGUgc3VwZXIgYmxvY2ssIGdpdmluZyB1cworICogcm9vbSB0byB0cmFuc2xhdGUgMTQgY2h1bmtzIHdpdGggMyBzdHJpcGVzIGVhY2guCisgKi8KKyNkZWZpbmUgQlRSRlNfU1lTVEVNX0NIVU5LX0FSUkFZX1NJWkUgMjA0OAorI2RlZmluZSBCVFJGU19MQUJFTF9TSVpFIDI1NgorI2RlZmluZSBCVFJGU19VVUlEX1NJWkUgMTYKKyNkZWZpbmUgQlRSRlNfRlNJRF9TSVpFIDE2CisjZGVmaW5lIEJUUkZTX0NTVU1fU0laRSAzMgorCitzdHJ1Y3QgYnRyZnNfZGV2X2l0ZW0geworCS8qIHRoZSBpbnRlcm5hbCBidHJmcyBkZXZpY2UgaWQgKi8KKwlfX3U2NCBkZXZpZDsKKworCS8qIHNpemUgb2YgdGhlIGRldmljZSAqLworCV9fdTY0IHRvdGFsX2J5dGVzOworCisJLyogYnl0ZXMgdXNlZCAqLworCV9fdTY0IGJ5dGVzX3VzZWQ7CisKKwkvKiBvcHRpbWFsIGlvIGFsaWdubWVudCBmb3IgdGhpcyBkZXZpY2UgKi8KKwlfX3UzMiBpb19hbGlnbjsKKworCS8qIG9wdGltYWwgaW8gd2lkdGggZm9yIHRoaXMgZGV2aWNlICovCisJX191MzIgaW9fd2lkdGg7CisKKwkvKiBtaW5pbWFsIGlvIHNpemUgZm9yIHRoaXMgZGV2aWNlICovCisJX191MzIgc2VjdG9yX3NpemU7CisKKwkvKiB0eXBlIGFuZCBpbmZvIGFib3V0IHRoaXMgZGV2aWNlICovCisJX191NjQgdHlwZTsKKworCS8qIGV4cGVjdGVkIGdlbmVyYXRpb24gZm9yIHRoaXMgZGV2aWNlICovCisJX191NjQgZ2VuZXJhdGlvbjsKKworCS8qCisJICogc3RhcnRpbmcgYnl0ZSBvZiB0aGlzIHBhcnRpdGlvbiBvbiB0aGUgZGV2aWNlLAorCSAqIHRvIGFsbG93ciBmb3Igc3RyaXBlIGFsaWdubWVudCBpbiB0aGUgZnV0dXJlCisJICovCisJX191NjQgc3RhcnRfb2Zmc2V0OworCisJLyogZ3JvdXBpbmcgaW5mb3JtYXRpb24gZm9yIGFsbG9jYXRpb24gZGVjaXNpb25zICovCisJX191MzIgZGV2X2dyb3VwOworCisJLyogc2VlayBzcGVlZCAwLTEwMCB3aGVyZSAxMDAgaXMgZmFzdGVzdCAqLworCV9fdTggc2Vla19zcGVlZDsKKworCS8qIGJhbmR3aWR0aCAwLTEwMCB3aGVyZSAxMDAgaXMgZmFzdGVzdCAqLworCV9fdTggYmFuZHdpZHRoOworCisJLyogYnRyZnMgZ2VuZXJhdGVkIHV1aWQgZm9yIHRoaXMgZGV2aWNlICovCisJX191OCB1dWlkW0JUUkZTX1VVSURfU0laRV07CisKKwkvKiB1dWlkIG9mIEZTIHdobyBvd25zIHRoaXMgZGV2aWNlICovCisJX191OCBmc2lkW0JUUkZTX1VVSURfU0laRV07Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKKy8qCisgKiB0aGUgc3VwZXIgYmxvY2sgYmFzaWNhbGx5IGxpc3RzIHRoZSBtYWluIHRyZWVzIG9mIHRoZSBGUworICogaXQgY3VycmVudGx5IGxhY2tzIGFueSBibG9jayBjb3VudCBldGMgZXRjCisgKi8KK3N0cnVjdCBidHJmc19zdXBlcl9ibG9jayB7CisJX191OCBjc3VtW0JUUkZTX0NTVU1fU0laRV07CisJLyogdGhlIGZpcnN0IDMgZmllbGRzIG11c3QgbWF0Y2ggc3RydWN0IGJ0cmZzX2hlYWRlciAqLworCV9fdTggZnNpZFtCVFJGU19GU0lEX1NJWkVdOyAgICAvKiBGUyBzcGVjaWZpYyB1dWlkICovCisJX191NjQgYnl0ZW5yOyAvKiB0aGlzIGJsb2NrIG51bWJlciAqLworCV9fdTY0IGZsYWdzOworCisJLyogYWxsb3dlZCB0byBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgYnRyZnNfaGVhZGVyIGZyb20gaGVyZSBvd24gZG93biAqLworCV9fdTY0IG1hZ2ljOworCV9fdTY0IGdlbmVyYXRpb247CisJX191NjQgcm9vdDsKKwlfX3U2NCBjaHVua19yb290OworCV9fdTY0IGxvZ19yb290OworCisJLyogdGhpcyB3aWxsIGhlbHAgZmluZCB0aGUgbmV3IHN1cGVyIGJhc2VkIG9uIHRoZSBsb2cgcm9vdCAqLworCV9fdTY0IGxvZ19yb290X3RyYW5zaWQ7CisJX191NjQgdG90YWxfYnl0ZXM7CisJX191NjQgYnl0ZXNfdXNlZDsKKwlfX3U2NCByb290X2Rpcl9vYmplY3RpZDsKKwlfX3U2NCBudW1fZGV2aWNlczsKKwlfX3UzMiBzZWN0b3JzaXplOworCV9fdTMyIG5vZGVzaXplOworCV9fdTMyIGxlYWZzaXplOworCV9fdTMyIHN0cmlwZXNpemU7CisJX191MzIgc3lzX2NodW5rX2FycmF5X3NpemU7CisJX191NjQgY2h1bmtfcm9vdF9nZW5lcmF0aW9uOworCV9fdTY0IGNvbXBhdF9mbGFnczsKKwlfX3U2NCBjb21wYXRfcm9fZmxhZ3M7CisJX191NjQgaW5jb21wYXRfZmxhZ3M7CisJX191MTYgY3N1bV90eXBlOworCV9fdTggcm9vdF9sZXZlbDsKKwlfX3U4IGNodW5rX3Jvb3RfbGV2ZWw7CisJX191OCBsb2dfcm9vdF9sZXZlbDsKKwlzdHJ1Y3QgYnRyZnNfZGV2X2l0ZW0gZGV2X2l0ZW07CisKKwljaGFyIGxhYmVsW0JUUkZTX0xBQkVMX1NJWkVdOworCisJLyogZnV0dXJlIGV4cGFuc2lvbiAqLworCV9fdTY0IHJlc2VydmVkWzMyXTsKKwlfX3U4IHN5c19jaHVua19hcnJheVtCVFJGU19TWVNURU1fQ0hVTktfQVJSQVlfU0laRV07Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKKy8qCisgKiBCeXRlIHN3YXAgZnVuY3Rpb25zCisgKi8KKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBfSU5MSU5FXyBzdGF0aWMgX19pbmxpbmVfXworI2Vsc2UJCQkJLyogRm9yIFdhdGNvbSBDICovCisjZGVmaW5lIF9JTkxJTkVfIHN0YXRpYyBpbmxpbmUKKyNlbmRpZgorCitzdGF0aWMgX191MTYgYmxraWRfc3dhYjE2KF9fdTE2IHZhbCk7CitzdGF0aWMgX191MzIgYmxraWRfc3dhYjMyKF9fdTMyIHZhbCk7CitzdGF0aWMgX191NjQgYmxraWRfc3dhYjY0KF9fdTY0IHZhbCk7CisKKyNpZiAoKGRlZmluZWQgX19HTlVDX18pICYmIFwKKyAgICAgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19pNDg2X18pIHx8IGRlZmluZWQoX19pNTg2X18pKSkKKworI2RlZmluZSBfQkxLSURfSEFWRV9BU01fQklUT1BTXworCitfSU5MSU5FXyBfX3UzMiBibGtpZF9zd2FiMzIoX191MzIgdmFsKQoreworI2lmZGVmIEVYVDJGU19SRVFVSVJFXzQ4NgorCV9fYXNtX18oImJzd2FwICUwIiA6ICI9ciIgKHZhbCkgOiAiMCIgKHZhbCkpOworI2Vsc2UKKwlfX2FzbV9fKCJ4Y2hnYiAlYjAsJWgwXG5cdCIJLyogc3dhcCBsb3dlciBieXRlcwkqLworCQkicm9ybCAkMTYsJTBcblx0IgkvKiBzd2FwIHdvcmRzCQkqLworCQkieGNoZ2IgJWIwLCVoMCIJCS8qIHN3YXAgaGlnaGVyIGJ5dGVzCSovCisJCToiPXEiICh2YWwpCisJCTogIjAiICh2YWwpKTsKKyNlbmRpZgorCXJldHVybiB2YWw7Cit9CisKK19JTkxJTkVfIF9fdTE2IGJsa2lkX3N3YWIxNihfX3UxNiB2YWwpCit7CisJX19hc21fXygieGNoZ2IgJWIwLCVoMCIJCS8qIHN3YXAgYnl0ZXMJCSovIFwKKwkJOiAiPXEiICh2YWwpIFwKKwkJOiAgIjAiICh2YWwpKTsgXAorCQlyZXR1cm4gdmFsOworfQorCitfSU5MSU5FXyBfX3U2NCBibGtpZF9zd2FiNjQoX191NjQgdmFsKQoreworCXJldHVybiAoYmxraWRfc3dhYjMyKHZhbCA+PiAzMikgfAorCQkoKChfX3U2NCkgYmxraWRfc3dhYjMyKHZhbCAmIDB4RkZGRkZGRkZVTCkpIDw8IDMyKSk7Cit9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9CTEtJRF9IQVZFX0FTTV9CSVRPUFNfKQorCitfSU5MSU5FXyAgX191MTYgYmxraWRfc3dhYjE2KF9fdTE2IHZhbCkKK3sKKwlyZXR1cm4gKHZhbCA+PiA4KSB8ICh2YWwgPDwgOCk7Cit9CisKK19JTkxJTkVfIF9fdTMyIGJsa2lkX3N3YWIzMihfX3UzMiB2YWwpCit7CisJcmV0dXJuICgodmFsPj4yNCkgfCAoKHZhbD4+OCkmMHhGRjAwKSB8CisJCSgodmFsPDw4KSYweEZGMDAwMCkgfCAodmFsPDwyNCkpOworfQorCitfSU5MSU5FXyBfX3U2NCBibGtpZF9zd2FiNjQoX191NjQgdmFsKQoreworCXJldHVybiAoYmxraWRfc3dhYjMyKHZhbCA+PiAzMikgfAorCQkoKChfX3U2NCkgYmxraWRfc3dhYjMyKHZhbCAmIDB4RkZGRkZGRkZVTCkpIDw8IDMyKSk7Cit9CisjZW5kaWYKKworCisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyNkZWZpbmUgYmxraWRfbGUxNih4KSBibGtpZF9zd2FiMTYoeCkKKyNkZWZpbmUgYmxraWRfbGUzMih4KSBibGtpZF9zd2FiMzIoeCkKKyNkZWZpbmUgYmxraWRfbGU2NCh4KSBibGtpZF9zd2FiNjQoeCkKKyNkZWZpbmUgYmxraWRfYmUxNih4KSAoeCkKKyNkZWZpbmUgYmxraWRfYmUzMih4KSAoeCkKKyNkZWZpbmUgYmxraWRfYmU2NCh4KSAoeCkKKyNlbHNlCisjZGVmaW5lIGJsa2lkX2xlMTYoeCkgKHgpCisjZGVmaW5lIGJsa2lkX2xlMzIoeCkgKHgpCisjZGVmaW5lIGJsa2lkX2xlNjQoeCkgKHgpCisjZGVmaW5lIGJsa2lkX2JlMTYoeCkgYmxraWRfc3dhYjE2KHgpCisjZGVmaW5lIGJsa2lkX2JlMzIoeCkgYmxraWRfc3dhYjMyKHgpCisjZGVmaW5lIGJsa2lkX2JlNjQoeCkgYmxraWRfc3dhYjY0KHgpCisjZW5kaWYKKworI3VuZGVmIF9JTkxJTkVfCisKKyNlbmRpZiAvKiBfQkxLSURfUFJPQkVfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL3JlYWQuYyBiL2xpYi9ibGtpZC9yZWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjMzQ4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC9yZWFkLmMKQEAgLTAsMCArMSw0OTQgQEAKKy8qCisgKiByZWFkLmMgLSByZWFkIHRoZSBibGtpZCBjYWNoZSBmcm9tIGRpc2ssIHRvIGF2b2lkIHNjYW5uaW5nIGFsbCBkZXZpY2VzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzIFRoZW9kb3JlIFkuIFRzJ28KKyAqIENvcHlyaWdodCAoQykgMjAwMSBBbmRyZWFzIERpbGdlcgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2RlZmluZSBfWE9QRU5fU09VUkNFIDYwMCAvKiBmb3IgaW5jbHVzaW9uIG9mIHN0cnRvdWxsICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJibGtpZFAuaCIKKyNpbmNsdWRlICJ1dWlkL3V1aWQuaCIKKworI2lmZGVmIEhBVkVfU1RSVE9VTEwKKyNkZWZpbmUgU1RSVE9VTEwgc3RydG91bGwgLyogZGVmaW5lZCBpbiBzdGRsaWIuaCBpZiB5b3UgdHJ5IGhhcmQgZW5vdWdoICovCisjZWxzZQorLyogRklYTUU6IG5lZWQgdG8gc3VwcG9ydCByZWFsIHN0cnRvdWxsIGhlcmUgKi8KKyNkZWZpbmUgU1RSVE9VTEwgc3RydG91bAorI2VuZGlmCisKKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2lmZGVmIFRFU1RfUFJPR1JBTQorI2RlZmluZSBibGtpZF9kZWJ1Z19kdW1wX2RldihkZXYpCShkZWJ1Z19kdW1wX2RldihkZXYpKQorc3RhdGljIHZvaWQgZGVidWdfZHVtcF9kZXYoYmxraWRfZGV2IGRldik7CisjZW5kaWYKKworLyoKKyAqIEZpbGUgZm9ybWF0OgorICoKKyAqCTxkZXZpY2UgWzxOQU1FPSJ2YWx1ZSI+IC4uLl0+ZGV2aWNlX25hbWU8L2RldmljZT4KKyAqCisgKglUaGUgZm9sbG93aW5nIHRhZ3MgYXJlIHJlcXVpcmVkIGZvciBlYWNoIGVudHJ5OgorICoJPElEPSJpZCI+CXVuaXF1ZSAod2l0aGluIHRoaXMgZmlsZSkgSUQgbnVtYmVyIG9mIHRoaXMgZGV2aWNlCisgKgk8VElNRT0idGltZSI+CShhc2NpaSB0aW1lX3QpIHRpbWUgdGhpcyBlbnRyeSB3YXMgbGFzdCByZWFkIGZyb20gZGlzaworICoJPFRZUEU9InR5cGUiPgkoZGV0ZWN0ZWQpIHR5cGUgb2YgZmlsZXN5c3RlbS9kYXRhIGZvciB0aGlzIHBhcnRpdGlvbgorICoKKyAqCVRoZSBmb2xsb3dpbmcgdGFncyBtYXkgYmUgcHJlc2VudCwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgY29udGVudHMKKyAqCTxMQUJFTD0ibGFiZWwiPgkodXNlciBzdXBwbGllZCkgbGFiZWwgKHZvbHVtZSBuYW1lLCBldGMpCisgKgk8VVVJRD0idXVpZCI+CShnZW5lcmF0ZWQpIHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIChzZXJpYWwgbm8pCisgKi8KKworc3RhdGljIGNoYXIgKnNraXBfb3Zlcl9ibGFuayhjaGFyICpjcCkKK3sKKwl3aGlsZSAoKmNwICYmIGlzc3BhY2UoKmNwKSkKKwkJY3ArKzsKKwlyZXR1cm4gY3A7Cit9CisKK3N0YXRpYyBjaGFyICpza2lwX292ZXJfd29yZChjaGFyICpjcCkKK3sKKwljaGFyIGNoOworCisJd2hpbGUgKChjaCA9ICpjcCkpIHsKKwkJLyogSWYgd2Ugc2VlIGEgYmFja3NsYXNoLCBza2lwIHRoZSBuZXh0IGNoYXJhY3RlciAqLworCQlpZiAoY2ggPT0gJ1xcJykgeworCQkJY3ArKzsKKwkJCWlmICgqY3AgPT0gJ1wwJykKKwkJCQlicmVhazsKKwkJCWNwKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoaXNzcGFjZShjaCkgfHwgY2ggPT0gJzwnIHx8IGNoID09ICc+JykKKwkJCWJyZWFrOworCQljcCsrOworCX0KKwlyZXR1cm4gY3A7Cit9CisKK3N0YXRpYyBjaGFyICpzdHJpcF9saW5lKGNoYXIgKmxpbmUpCit7CisJY2hhcgkqcDsKKworCWxpbmUgPSBza2lwX292ZXJfYmxhbmsobGluZSk7CisKKwlwID0gbGluZSArIHN0cmxlbihsaW5lKSAtIDE7CisKKwl3aGlsZSAoKmxpbmUpIHsKKwkJaWYgKGlzc3BhY2UoKnApKQorCQkJKnAtLSA9ICdcMCc7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBsaW5lOworfQorCisjaWYgMAorc3RhdGljIGNoYXIgKnBhcnNlX3dvcmQoY2hhciAqKmJ1ZikKK3sKKwljaGFyICp3b3JkLCAqbmV4dDsKKworCXdvcmQgPSAqYnVmOworCWlmICgqd29yZCA9PSAnXDAnKQorCQlyZXR1cm4gTlVMTDsKKworCXdvcmQgPSBza2lwX292ZXJfYmxhbmsod29yZCk7CisJbmV4dCA9IHNraXBfb3Zlcl93b3JkKHdvcmQpOworCWlmICgqbmV4dCkgeworCQljaGFyICplbmQgPSBuZXh0IC0gMTsKKwkJaWYgKCplbmQgPT0gJyInIHx8ICplbmQgPT0gJ1wnJykKKwkJCSplbmQgPSAnXDAnOworCQkqbmV4dCsrID0gJ1wwJzsKKwl9CisJKmJ1ZiA9IG5leHQ7CisKKwlpZiAoKndvcmQgPT0gJyInIHx8ICp3b3JkID09ICdcJycpCisJCXdvcmQrKzsKKwlyZXR1cm4gd29yZDsKK30KKyNlbmRpZgorCisvKgorICogU3RhcnQgcGFyc2luZyBhIG5ldyBsaW5lIGZyb20gdGhlIGNhY2hlLgorICoKKyAqIGxpbmUgc3RhcnRzIHdpdGggIjxkZXZpY2UiIHJldHVybiAxIC0+IGNvbnRpbnVlIHBhcnNpbmcgbGluZQorICogbGluZSBzdGFydHMgd2l0aCAiPGZvbyIsIGVtcHR5LCBvciAjIHJldHVybiAwIC0+IHNraXAgbGluZQorICogbGluZSBzdGFydHMgd2l0aCBvdGhlciwgcmV0dXJuIC1CTEtJRF9FUlJfQ0FDSEUgLT4gZXJyb3IKKyAqLworc3RhdGljIGludCBwYXJzZV9zdGFydChjaGFyICoqY3ApCit7CisJY2hhciAqcDsKKworCXAgPSBzdHJpcF9saW5lKCpjcCk7CisKKwkvKiBTa2lwIGNvbW1lbnQgb3IgYmxhbmsgbGluZXMuICBXZSBjYW4ndCBqdXN0IE5VTCB0aGUgZmlyc3QgJyMnIGNoYXIsCisJICogaW4gY2FzZSBpdCBpcyBpbnNpZGUgcXVvdGVzLCBvciBlc2NhcGVkLgorCSAqLworCWlmICgqcCA9PSAnXDAnIHx8ICpwID09ICcjJykKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXN0cm5jbXAocCwgIjxkZXZpY2UiLCA3KSkgeworCQlEQkcoREVCVUdfUkVBRCwgcHJpbnRmKCJmb3VuZCBkZXZpY2UgaGVhZGVyOiAlOHNcbiIsIHApKTsKKwkJcCArPSA3OworCisJCSpjcCA9IHA7CisJCXJldHVybiAxOworCX0KKworCWlmICgqcCA9PSAnPCcpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1CTEtJRF9FUlJfQ0FDSEU7Cit9CisKKy8qIENvbnN1bWUgdGhlIHJlbWFpbmluZyBYTUwgb24gdGhlIGxpbmUgKGNvc21ldGljIG9ubHkpICovCitzdGF0aWMgaW50IHBhcnNlX2VuZChjaGFyICoqY3ApCit7CisJKmNwID0gc2tpcF9vdmVyX2JsYW5rKCpjcCk7CisKKwlpZiAoIXN0cm5jbXAoKmNwLCAiPC9kZXZpY2U+IiwgOSkpIHsKKwkJREJHKERFQlVHX1JFQUQsIHByaW50ZigiZm91bmQgZGV2aWNlIHRyYWlsZXIgJTlzXG4iLCAqY3ApKTsKKwkJKmNwICs9IDk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtQkxLSURfRVJSX0NBQ0hFOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgZGV2aWNlIHN0cnVjdCB3aXRoIGRldmljZSBuYW1lIGZpbGxlZCBpbi4gIFdpbGwgaGFuZGxlCisgKiBmaW5kaW5nIHRoZSBkZXZpY2Ugb24gbGluZXMgb2YgdGhlIGZvcm06CisgKiA8ZGV2aWNlIGZvbz1iYXI+ZGV2bmFtZTwvZGV2aWNlPgorICogPGRldmljZT5kZXZuYW1lPGZvbz5iYXI8L2Zvbz48L2RldmljZT4KKyAqLworc3RhdGljIGludCBwYXJzZV9kZXYoYmxraWRfY2FjaGUgY2FjaGUsIGJsa2lkX2RldiAqZGV2LCBjaGFyICoqY3ApCit7CisJY2hhciAqc3RhcnQsICp0bXAsICplbmQsICpuYW1lOworCWludCByZXQ7CisKKwlpZiAoKHJldCA9IHBhcnNlX3N0YXJ0KGNwKSkgPD0gMCkKKwkJcmV0dXJuIHJldDsKKworCXN0YXJ0ID0gdG1wID0gc3RyY2hyKCpjcCwgJz4nKTsKKwlpZiAoIXN0YXJ0KSB7CisJCURCRyhERUJVR19SRUFELAorCQkgICAgcHJpbnRmKCJibGtpZDogc2hvcnQgbGluZSBwYXJzaW5nIGRldjogJXNcbiIsICpjcCkpOworCQlyZXR1cm4gLUJMS0lEX0VSUl9DQUNIRTsKKwl9CisJc3RhcnQgPSBza2lwX292ZXJfYmxhbmsoc3RhcnQgKyAxKTsKKwllbmQgPSBza2lwX292ZXJfd29yZChzdGFydCk7CisKKwlEQkcoREVCVUdfUkVBRCwgcHJpbnRmKCJkZXZpY2Ugc2hvdWxkIGJlICUqc1xuIiwKKwkJCSAgICAgICAoaW50KShlbmQgLSBzdGFydCksIHN0YXJ0KSk7CisKKwlpZiAoKipjcCA9PSAnPicpCisJCSpjcCA9IGVuZDsKKwllbHNlCisJCSgqY3ApKys7CisKKwkqdG1wID0gJ1wwJzsKKworCWlmICghKHRtcCA9IHN0cnJjaHIoZW5kLCAnPCcpKSB8fCBwYXJzZV9lbmQoJnRtcCkgPCAwKSB7CisJCURCRyhERUJVR19SRUFELAorCQkgICAgcHJpbnRmKCJibGtpZDogbWlzc2luZyA8L2RldmljZT4gZW5kaW5nOiAlc1xuIiwgZW5kKSk7CisJfSBlbHNlIGlmICh0bXApCisJCSp0bXAgPSAnXDAnOworCisJaWYgKGVuZCAtIHN0YXJ0IDw9IDEpIHsKKwkJREJHKERFQlVHX1JFQUQsIHByaW50ZigiYmxraWQ6IGVtcHR5IGRldmljZSBuYW1lOiAlc1xuIiwgKmNwKSk7CisJCXJldHVybiAtQkxLSURfRVJSX0NBQ0hFOworCX0KKworCW5hbWUgPSBibGtpZF9zdHJuZHVwKHN0YXJ0LCBlbmQtc3RhcnQpOworCWlmIChuYW1lID09IE5VTEwpCisJCXJldHVybiAtQkxLSURfRVJSX01FTTsKKworCURCRyhERUJVR19SRUFELCBwcmludGYoImZvdW5kIGRldiAlc1xuIiwgbmFtZSkpOworCisJaWYgKCEoKmRldiA9IGJsa2lkX2dldF9kZXYoY2FjaGUsIG5hbWUsIEJMS0lEX0RFVl9DUkVBVEUpKSkgeworCQlmcmVlKG5hbWUpOworCQlyZXR1cm4gLUJMS0lEX0VSUl9NRU07CisJfQorCisJZnJlZShuYW1lKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEV4dHJhY3QgYSB0YWcgb2YgdGhlIGZvcm0gTkFNRT0idmFsdWUiIGZyb20gdGhlIGxpbmUuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfdG9rZW4oY2hhciAqKm5hbWUsIGNoYXIgKip2YWx1ZSwgY2hhciAqKmNwKQoreworCWNoYXIgKmVuZDsKKworCWlmICghbmFtZSB8fCAhdmFsdWUgfHwgIWNwKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworCWlmICghKCp2YWx1ZSA9IHN0cmNocigqY3AsICc9JykpKQorCQlyZXR1cm4gMDsKKworCSoqdmFsdWUgPSAnXDAnOworCSpuYW1lID0gc3RyaXBfbGluZSgqY3ApOworCSp2YWx1ZSA9IHNraXBfb3Zlcl9ibGFuaygqdmFsdWUgKyAxKTsKKworCWlmICgqKnZhbHVlID09ICciJykgeworCQllbmQgPSBzdHJjaHIoKnZhbHVlICsgMSwgJyInKTsKKwkJaWYgKCFlbmQpIHsKKwkJCURCRyhERUJVR19SRUFELAorCQkJICAgIHByaW50ZigidW5iYWxhbmNlZCBxdW90ZXMgYXQ6ICVzXG4iLCAqdmFsdWUpKTsKKwkJCSpjcCA9ICp2YWx1ZTsKKwkJCXJldHVybiAtQkxLSURfRVJSX0NBQ0hFOworCQl9CisJCSgqdmFsdWUpKys7CisJCSplbmQgPSAnXDAnOworCQllbmQrKzsKKwl9IGVsc2UgeworCQllbmQgPSBza2lwX292ZXJfd29yZCgqdmFsdWUpOworCQlpZiAoKmVuZCkgeworCQkJKmVuZCA9ICdcMCc7CisJCQllbmQrKzsKKwkJfQorCX0KKwkqY3AgPSBlbmQ7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEV4dHJhY3QgYSB0YWcgb2YgdGhlIGZvcm0gPE5BTUU+dmFsdWU8L05BTUU+IGZyb20gdGhlIGxpbmUuCisgKi8KKy8qCitzdGF0aWMgaW50IHBhcnNlX3htbChjaGFyICoqbmFtZSwgY2hhciAqKnZhbHVlLCBjaGFyICoqY3ApCit7CisJY2hhciAqZW5kOworCisJaWYgKCFuYW1lIHx8ICF2YWx1ZSB8fCAhY3ApCisJCXJldHVybiAtQkxLSURfRVJSX1BBUkFNOworCisJKm5hbWUgPSBzdHJpcF9saW5lKCpjcCk7CisKKwlpZiAoKCpuYW1lKVswXSAhPSAnPCcgfHwgKCpuYW1lKVsxXSA9PSAnLycpCisJCXJldHVybiAwOworCisJRklYTUU6IGZpbmlzaCB0aGlzLgorfQorKi8KKworLyoKKyAqIEV4dHJhY3QgYSB0YWcgZnJvbSB0aGUgbGluZS4KKyAqCisgKiBSZXR1cm4gMSBpZiBhIHZhbGlkIHRhZyB3YXMgZm91bmQuCisgKiBSZXR1cm4gMCBpZiBubyB0YWcgZm91bmQuCisgKiBSZXR1cm4gLXZlIGVycm9yIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfdGFnKGJsa2lkX2NhY2hlIGNhY2hlLCBibGtpZF9kZXYgZGV2LCBjaGFyICoqY3ApCit7CisJY2hhciAqbmFtZTsKKwljaGFyICp2YWx1ZTsKKwlpbnQgcmV0OworCisJaWYgKCFjYWNoZSB8fCAhZGV2KQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworCWlmICgocmV0ID0gcGFyc2VfdG9rZW4oJm5hbWUsICZ2YWx1ZSwgY3ApKSA8PSAwIC8qICYmCisJICAgIChyZXQgPSBwYXJzZV94bWwoJm5hbWUsICZ2YWx1ZSwgY3ApKSA8PSAwICovKQorCQlyZXR1cm4gcmV0OworCisJLyogU29tZSB0YWdzIGFyZSBzdG9yZWQgZGlyZWN0bHkgaW4gdGhlIGRldmljZSBzdHJ1Y3QgKi8KKwlpZiAoIXN0cmNtcChuYW1lLCAiREVWTk8iKSkKKwkJZGV2LT5iaWRfZGV2bm8gPSBTVFJUT1VMTCh2YWx1ZSwgMCwgMCk7CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiUFJJIikpCisJCWRldi0+YmlkX3ByaSA9IHN0cnRvbCh2YWx1ZSwgMCwgMCk7CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiVElNRSIpKQorCQlkZXYtPmJpZF90aW1lID0gU1RSVE9VTEwodmFsdWUsIDAsIDApOworCWVsc2UKKwkJcmV0ID0gYmxraWRfc2V0X3RhZyhkZXYsIG5hbWUsIHZhbHVlLCBzdHJsZW4odmFsdWUpKTsKKworCURCRyhERUJVR19SRUFELCBwcmludGYoIiAgICB0YWc6ICVzPVwiJXNcIlxuIiwgbmFtZSwgdmFsdWUpKTsKKworCXJldHVybiByZXQgPCAwID8gcmV0IDogMTsKK30KKworLyoKKyAqIFBhcnNlIGEgc2luZ2xlIGxpbmUgb2YgZGF0YSwgYW5kIHJldHVybiBhIG5ld2x5IGFsbG9jYXRlZCBkZXYgc3RydWN0LgorICogQWRkIHRoZSBuZXcgZGV2aWNlIHRvIHRoZSBjYWNoZSBzdHJ1Y3QsIGlmIG9uZSB3YXMgcmVhZC4KKyAqCisgKiBMaW5lcyBhcmUgb2YgdGhlIGZvcm0gPGRldmljZSBbVEFHPSJ2YWx1ZSIgLi4uXT4vZGV2L2ZvbzwvZGV2aWNlPgorICoKKyAqIFJldHVybnMgLXZlIHZhbHVlIG9uIGVycm9yLgorICogUmV0dXJucyAwIG90aGVyd2lzZS4KKyAqIElmIGEgdmFsaWQgZGV2aWNlIHdhcyByZWFkLCAqZGV2X3AgaXMgbm9uLU5VTEwsIG90aGVyd2lzZSBpdCBpcyBOVUxMCisgKiAoZS5nLiBjb21tZW50IGxpbmVzLCB1bmtub3duIFhNTCBjb250ZW50LCBldGMpLgorICovCitzdGF0aWMgaW50IGJsa2lkX3BhcnNlX2xpbmUoYmxraWRfY2FjaGUgY2FjaGUsIGJsa2lkX2RldiAqZGV2X3AsIGNoYXIgKmNwKQoreworCWJsa2lkX2RldiBkZXY7CisJaW50IHJldDsKKworCWlmICghY2FjaGUgfHwgIWRldl9wKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworCSpkZXZfcCA9IE5VTEw7CisKKwlEQkcoREVCVUdfUkVBRCwgcHJpbnRmKCJsaW5lOiAlc1xuIiwgY3ApKTsKKworCWlmICgocmV0ID0gcGFyc2VfZGV2KGNhY2hlLCBkZXZfcCwgJmNwKSkgPD0gMCkKKwkJcmV0dXJuIHJldDsKKworCWRldiA9ICpkZXZfcDsKKworCXdoaWxlICgocmV0ID0gcGFyc2VfdGFnKGNhY2hlLCBkZXYsICZjcCkpID4gMCkgeworCQk7CisJfQorCisJaWYgKGRldi0+YmlkX3R5cGUgPT0gTlVMTCkgeworCQlEQkcoREVCVUdfUkVBRCwKKwkJICAgIHByaW50ZigiYmxraWQ6IGRldmljZSAlcyBoYXMgbm8gVFlQRVxuIixkZXYtPmJpZF9uYW1lKSk7CisJCWJsa2lkX2ZyZWVfZGV2KGRldik7CisJfQorCisJREJHKERFQlVHX1JFQUQsIGJsa2lkX2RlYnVnX2R1bXBfZGV2KGRldikpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFBhcnNlIHRoZSBzcGVjaWZpZWQgZmlsZW5hbWUsIGFuZCByZXR1cm4gdGhlIGRhdGEgaW4gdGhlIHN1cHBsaWVkIG9yCisgKiBhIG5ld2x5IGFsbG9jYXRlZCBjYWNoZSBzdHJ1Y3QuICBJZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LCByZXR1cm4gYQorICogbmV3IGVtcHR5IGNhY2hlIHN0cnVjdC4KKyAqLwordm9pZCBibGtpZF9yZWFkX2NhY2hlKGJsa2lkX2NhY2hlIGNhY2hlKQoreworCUZJTEUgKmZpbGU7CisJY2hhciBidWZbNDA5Nl07CisJaW50IGZkLCBsaW5lbm8gPSAwOworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKCFjYWNoZSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LCB0aGVuIHdlIGp1c3QgcmV0dXJuIGFuIGVtcHR5CisJICogc3RydWN0IHNvIHRoYXQgdGhlIGNhY2hlIGNhbiBiZSBwb3B1bGF0ZWQuCisJICovCisJaWYgKChmZCA9IG9wZW4oY2FjaGUtPmJpY19maWxlbmFtZSwgT19SRE9OTFkpKSA8IDApCisJCXJldHVybjsKKwlpZiAoZnN0YXQoZmQsICZzdCkgPCAwKQorCQlnb3RvIGVycm91dDsKKwlpZiAoKHN0LnN0X210aW1lID09IGNhY2hlLT5iaWNfZnRpbWUpIHx8CisJICAgIChjYWNoZS0+YmljX2ZsYWdzICYgQkxLSURfQklDX0ZMX0NIQU5HRUQpKSB7CisJCURCRyhERUJVR19DQUNIRSwgcHJpbnRmKCJza2lwcGluZyByZS1yZWFkIG9mICVzXG4iLAorCQkJCQljYWNoZS0+YmljX2ZpbGVuYW1lKSk7CisJCWdvdG8gZXJyb3V0OworCX0KKworCURCRyhERUJVR19DQUNIRSwgcHJpbnRmKCJyZWFkaW5nIGNhY2hlIGZpbGUgJXNcbiIsCisJCQkJY2FjaGUtPmJpY19maWxlbmFtZSkpOworCisJZmlsZSA9IGZkb3BlbihmZCwgInIiKTsKKwlpZiAoIWZpbGUpCisJCWdvdG8gZXJyb3V0OworCisJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZpbGUpKSB7CisJCWJsa2lkX2RldiBkZXY7CisJCXVuc2lnbmVkIGludCBlbmQ7CisKKwkJbGluZW5vKys7CisJCWlmIChidWZbMF0gPT0gMCkKKwkJCWNvbnRpbnVlOworCQllbmQgPSBzdHJsZW4oYnVmKSAtIDE7CisJCS8qIENvbnRpbnVlIHJlYWRpbmcgbmV4dCBsaW5lIGlmIGl0IGVuZHMgd2l0aCBhIGJhY2tzbGFzaCAqLworCQl3aGlsZSAoYnVmW2VuZF0gPT0gJ1xcJyAmJiBlbmQgPCBzaXplb2YoYnVmKSAtIDIgJiYKKwkJICAgICAgIGZnZXRzKGJ1ZiArIGVuZCwgc2l6ZW9mKGJ1ZikgLSBlbmQsIGZpbGUpKSB7CisJCQllbmQgPSBzdHJsZW4oYnVmKSAtIDE7CisJCQlsaW5lbm8rKzsKKwkJfQorCisJCWlmIChibGtpZF9wYXJzZV9saW5lKGNhY2hlLCAmZGV2LCBidWYpIDwgMCkgeworCQkJREJHKERFQlVHX1JFQUQsCisJCQkgICAgcHJpbnRmKCJibGtpZDogYmFkIGZvcm1hdCBvbiBsaW5lICVkXG4iLCBsaW5lbm8pKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCWZjbG9zZShmaWxlKTsKKworCS8qCisJICogSW5pdGlhbGx5IHdlIGRvIG5vdCBuZWVkIHRvIHdyaXRlIG91dCB0aGUgY2FjaGUgZmlsZS4KKwkgKi8KKwljYWNoZS0+YmljX2ZsYWdzICY9IH5CTEtJRF9CSUNfRkxfQ0hBTkdFRDsKKwljYWNoZS0+YmljX2Z0aW1lID0gc3Quc3RfbXRpbWU7CisKKwlyZXR1cm47CitlcnJvdXQ6CisJY2xvc2UoZmQpOworCXJldHVybjsKK30KKworI2lmZGVmIFRFU1RfUFJPR1JBTQorc3RhdGljIHZvaWQgZGVidWdfZHVtcF9kZXYoYmxraWRfZGV2IGRldikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCisJaWYgKCFkZXYpIHsKKwkJcHJpbnRmKCIgIGRldjogTlVMTFxuIik7CisJCXJldHVybjsKKwl9CisKKwlwcmludGYoIiAgZGV2OiBuYW1lID0gJXNcbiIsIGRldi0+YmlkX25hbWUpOworCXByaW50ZigiICBkZXY6IERFVk5PPVwiMHglMGxseFwiXG4iLCAobG9uZyBsb25nKWRldi0+YmlkX2Rldm5vKTsKKwlwcmludGYoIiAgZGV2OiBUSU1FPVwiJWxsZFwiXG4iLCAobG9uZyBsb25nKWRldi0+YmlkX3RpbWUpOworCXByaW50ZigiICBkZXY6IFBSST1cIiVkXCJcbiIsIGRldi0+YmlkX3ByaSk7CisJcHJpbnRmKCIgIGRldjogZmxhZ3MgPSAweCUwOFhcbiIsIGRldi0+YmlkX2ZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2gocCwgJmRldi0+YmlkX3RhZ3MpIHsKKwkJYmxraWRfdGFnIHRhZyA9IGxpc3RfZW50cnkocCwgc3RydWN0IGJsa2lkX3N0cnVjdF90YWcsIGJpdF90YWdzKTsKKwkJaWYgKHRhZykKKwkJCXByaW50ZigiICAgIHRhZzogJXM9XCIlc1wiXG4iLCB0YWctPmJpdF9uYW1lLAorCQkJICAgICAgIHRhZy0+Yml0X3ZhbCk7CisJCWVsc2UKKwkJCXByaW50ZigiICAgIHRhZzogTlVMTFxuIik7CisJfQorCXByaW50ZigiXG4iKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKmFyZ3YpCit7CisJYmxraWRfY2FjaGUgY2FjaGUgPSBOVUxMOworCWludCByZXQ7CisKKwlibGtpZF9kZWJ1Z19tYXNrID0gREVCVUdfQUxMOworCWlmIChhcmdjID4gMikgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBbZmlsZW5hbWVdXG4iCisJCQkiVGVzdCBwYXJzaW5nIG9mIHRoZSBjYWNoZSAoZmlsZW5hbWUpXG4iLCBhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKChyZXQgPSBibGtpZF9nZXRfY2FjaGUoJmNhY2hlLCBhcmd2WzFdKSkgPCAwKQorCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yICVkIHJlYWRpbmcgY2FjaGUgZmlsZSAlc1xuIiwgcmV0LAorCQkJYXJndlsxXSA/IGFyZ3ZbMV0gOiBCTEtJRF9DQUNIRV9GSUxFKTsKKworCWJsa2lkX3B1dF9jYWNoZShjYWNoZSk7CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvYmxraWQvcmVzb2x2ZS5jIGIvbGliL2Jsa2lkL3Jlc29sdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmMzN2IwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL3Jlc29sdmUuYwpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIHJlc29sdmUuYyAtIHJlc29sdmUgbmFtZXMgYW5kIHRhZ3MgaW50byBzcGVjaWZpYyBkZXZpY2VzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzIFRoZW9kb3JlIFRzJ28uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgQW5kcmVhcyBEaWxnZXIKKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlICJibGtpZFAuaCIKKworLyoKKyAqIEZpbmQgYSB0YWduYW1lIChlLmcuIExBQkVMIG9yIFVVSUQpIG9uIGEgc3BlY2lmaWMgZGV2aWNlLgorICovCitjaGFyICpibGtpZF9nZXRfdGFnX3ZhbHVlKGJsa2lkX2NhY2hlIGNhY2hlLCBjb25zdCBjaGFyICp0YWduYW1lLAorCQkJICBjb25zdCBjaGFyICpkZXZuYW1lKQoreworCWJsa2lkX3RhZyBmb3VuZDsKKwlibGtpZF9kZXYgZGV2OworCWJsa2lkX2NhY2hlIGMgPSBjYWNoZTsKKwljaGFyICpyZXQgPSBOVUxMOworCisJREJHKERFQlVHX1JFU09MVkUsIHByaW50ZigibG9va2luZyBmb3IgJXMgb24gJXNcbiIsIHRhZ25hbWUsIGRldm5hbWUpKTsKKworCWlmICghZGV2bmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWNhY2hlKSB7CisJCWlmIChibGtpZF9nZXRfY2FjaGUoJmMsIE5VTEwpIDwgMCkKKwkJCXJldHVybiBOVUxMOworCX0KKworCWlmICgoZGV2ID0gYmxraWRfZ2V0X2RldihjLCBkZXZuYW1lLCBCTEtJRF9ERVZfTk9STUFMKSkgJiYKKwkgICAgKGZvdW5kID0gYmxraWRfZmluZF90YWdfZGV2KGRldiwgdGFnbmFtZSkpKQorCQlyZXQgPSBibGtpZF9zdHJkdXAoZm91bmQtPmJpdF92YWwpOworCisJaWYgKCFjYWNoZSkKKwkJYmxraWRfcHV0X2NhY2hlKGMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIExvY2F0ZSBhIGRldmljZSBuYW1lIGZyb20gYSB0b2tlbiAoTkFNRT12YWx1ZSBzdHJpbmcpLCBvciAobmFtZSwgdmFsdWUpCisgKiBwYWlyLiAgSW4gdGhlIGNhc2Ugb2YgYSB0b2tlbiwgdmFsdWUgaXMgaWdub3JlZC4gIElmIHRoZSAidG9rZW4iIGlzIG5vdAorICogb2YgdGhlIGZvcm0gIk5BTUU9dmFsdWUiIGFuZCB0aGVyZSBpcyBubyB2YWx1ZSBnaXZlbiwgdGhlbiBpdCBpcyBhc3N1bWVkCisgKiB0byBiZSB0aGUgYWN0dWFsIGRldm5hbWUgYW5kIGEgY29weSBpcyByZXR1cm5lZC4KKyAqLworY2hhciAqYmxraWRfZ2V0X2Rldm5hbWUoYmxraWRfY2FjaGUgY2FjaGUsIGNvbnN0IGNoYXIgKnRva2VuLAorCQkJY29uc3QgY2hhciAqdmFsdWUpCit7CisJYmxraWRfZGV2IGRldjsKKwlibGtpZF9jYWNoZSBjID0gY2FjaGU7CisJY2hhciAqdCA9IDAsICp2ID0gMDsKKwljaGFyICpyZXQgPSBOVUxMOworCisJaWYgKCF0b2tlbikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWNhY2hlKSB7CisJCWlmIChibGtpZF9nZXRfY2FjaGUoJmMsIE5VTEwpIDwgMCkKKwkJCXJldHVybiBOVUxMOworCX0KKworCURCRyhERUJVR19SRVNPTFZFLAorCSAgICBwcmludGYoImxvb2tpbmcgZm9yICVzJXMlcyAlc1xuIiwgdG9rZW4sIHZhbHVlID8gIj0iIDogIiIsCisJCSAgIHZhbHVlID8gdmFsdWUgOiAiIiwgY2FjaGUgPyAiaW4gY2FjaGUiIDogImZyb20gZGlzayIpKTsKKworCWlmICghdmFsdWUpIHsKKwkJaWYgKCFzdHJjaHIodG9rZW4sICc9JykpIHsKKwkJCXJldCA9IGJsa2lkX3N0cmR1cCh0b2tlbik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlibGtpZF9wYXJzZV90YWdfc3RyaW5nKHRva2VuLCAmdCwgJnYpOworCQlpZiAoIXQgfHwgIXYpCisJCQlnb3RvIG91dDsKKwkJdG9rZW4gPSB0OworCQl2YWx1ZSA9IHY7CisJfQorCisJZGV2ID0gYmxraWRfZmluZF9kZXZfd2l0aF90YWcoYywgdG9rZW4sIHZhbHVlKTsKKwlpZiAoIWRldikKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBibGtpZF9zdHJkdXAoYmxraWRfZGV2X2Rldm5hbWUoZGV2KSk7CisKK291dDoKKwlmcmVlKHQpOworCWZyZWUodik7CisJaWYgKCFjYWNoZSkgeworCQlibGtpZF9wdXRfY2FjaGUoYyk7CisJfQorCXJldHVybiAocmV0KTsKK30KKworI2lmZGVmIFRFU1RfUFJPR1JBTQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNoYXIgKnZhbHVlOworCWJsa2lkX2NhY2hlIGNhY2hlOworCisJYmxraWRfZGVidWdfbWFzayA9IERFQlVHX0FMTDsKKwlpZiAoYXJnYyAhPSAyICYmIGFyZ2MgIT0gMykgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOlx0JXMgdGFnbmFtZT12YWx1ZVxuIgorCQkJIlx0JXMgdGFnbmFtZSBkZXZuYW1lXG4iCisJCQkiRmluZCB3aGljaCBkZXZpY2UgaG9sZHMgYSBnaXZlbiB0b2tlbiBvclxuIgorCQkJIkZpbmQgd2hhdCB0aGUgdmFsdWUgb2YgYSB0YWcgaXMgaW4gYSBkZXZpY2VcbiIsCisJCQlhcmd2WzBdLCBhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKGJsa2lkX2dldF9jYWNoZSgmY2FjaGUsICIvZGV2L251bGwiKSA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBnZXQgYmxraWQgY2FjaGVcbiIpOworCQlleGl0KDEpOworCX0KKworCWlmIChhcmd2WzJdKSB7CisJCXZhbHVlID0gYmxraWRfZ2V0X3RhZ192YWx1ZShjYWNoZSwgYXJndlsxXSwgYXJndlsyXSk7CisJCXByaW50ZigiJXMgaGFzIHRhZyAlcz0lc1xuIiwgYXJndlsyXSwgYXJndlsxXSwKKwkJICAgICAgIHZhbHVlID8gdmFsdWUgOiAiPG1pc3Npbmc+Iik7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSBibGtpZF9nZXRfZGV2bmFtZShjYWNoZSwgYXJndlsxXSwgTlVMTCk7CisJCXByaW50ZigiJXMgaGFzIHRhZyAlc1xuIiwgdmFsdWUgPyB2YWx1ZSA6ICI8bm9uZT4iLCBhcmd2WzFdKTsKKwl9CisJYmxraWRfcHV0X2NhY2hlKGNhY2hlKTsKKwlyZXR1cm4gdmFsdWUgPyAwIDogMTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL3NhdmUuYyBiL2xpYi9ibGtpZC9zYXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYyZmZlZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC9zYXZlLmMKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBzYXZlLmMgLSB3cml0ZSB0aGUgY2FjaGUgc3RydWN0IHRvIGRpc2sKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgYnkgQW5kcmVhcyBEaWxnZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMyBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfTUtERVZfSAorI2luY2x1ZGUgPHN5cy9ta2Rldi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgImJsa2lkUC5oIgorCitzdGF0aWMgaW50IHNhdmVfZGV2KGJsa2lkX2RldiBkZXYsIEZJTEUgKmZpbGUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKworCWlmICghZGV2IHx8IGRldi0+YmlkX25hbWVbMF0gIT0gJy8nKQorCQlyZXR1cm4gMDsKKworCURCRyhERUJVR19TQVZFLAorCSAgICBwcmludGYoImRldmljZSAlcywgdHlwZSAlc1xuIiwgZGV2LT5iaWRfbmFtZSwgZGV2LT5iaWRfdHlwZSA/CisJCSAgIGRldi0+YmlkX3R5cGUgOiAiKG51bGwpIikpOworCisJZnByaW50ZihmaWxlLAorCQkiPGRldmljZSBERVZOTz1cIjB4JTA0bHhcIiBUSU1FPVwiJWxkXCIiLAorCQkodW5zaWduZWQgbG9uZykgZGV2LT5iaWRfZGV2bm8sIChsb25nKSBkZXYtPmJpZF90aW1lKTsKKwlpZiAoZGV2LT5iaWRfcHJpKQorCQlmcHJpbnRmKGZpbGUsICIgUFJJPVwiJWRcIiIsIGRldi0+YmlkX3ByaSk7CisJbGlzdF9mb3JfZWFjaChwLCAmZGV2LT5iaWRfdGFncykgeworCQlibGtpZF90YWcgdGFnID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYmxraWRfc3RydWN0X3RhZywgYml0X3RhZ3MpOworCQlmcHJpbnRmKGZpbGUsICIgJXM9XCIlc1wiIiwgdGFnLT5iaXRfbmFtZSx0YWctPmJpdF92YWwpOworCX0KKwlmcHJpbnRmKGZpbGUsICI+JXM8L2RldmljZT5cbiIsIGRldi0+YmlkX25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXcml0ZSBvdXQgdGhlIGNhY2hlIHN0cnVjdCB0byB0aGUgY2FjaGUgZmlsZSBvbiBkaXNrLgorICovCitpbnQgYmxraWRfZmx1c2hfY2FjaGUoYmxraWRfY2FjaGUgY2FjaGUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwljaGFyICp0bXAgPSBOVUxMOworCWNvbnN0IGNoYXIgKm9wZW5lZCA9IE5VTEw7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJRklMRSAqZmlsZSA9IE5VTEw7CisJaW50IGZkLCByZXQgPSAwOworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKCFjYWNoZSkKKwkJcmV0dXJuIC1CTEtJRF9FUlJfUEFSQU07CisKKwlpZiAobGlzdF9lbXB0eSgmY2FjaGUtPmJpY19kZXZzKSB8fAorCSAgICAhKGNhY2hlLT5iaWNfZmxhZ3MgJiBCTEtJRF9CSUNfRkxfQ0hBTkdFRCkpIHsKKwkJREJHKERFQlVHX1NBVkUsIHByaW50Zigic2tpcHBpbmcgY2FjaGUgZmlsZSB3cml0ZVxuIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmaWxlbmFtZSA9IGNhY2hlLT5iaWNfZmlsZW5hbWUgPyBjYWNoZS0+YmljX2ZpbGVuYW1lOiBCTEtJRF9DQUNIRV9GSUxFOworCisJLyogSWYgd2UgY2FuJ3Qgd3JpdGUgdG8gdGhlIGNhY2hlIGZpbGUsIHRoZW4gZG9uJ3QgZXZlbiB0cnkgKi8KKwlpZiAoKChyZXQgPSBzdGF0KGZpbGVuYW1lLCAmc3QpKSA8IDAgJiYgZXJybm8gIT0gRU5PRU5UKSB8fAorCSAgICAocmV0ID09IDAgJiYgYWNjZXNzKGZpbGVuYW1lLCBXX09LKSA8IDApKSB7CisJCURCRyhERUJVR19TQVZFLAorCQkgICAgcHJpbnRmKCJjYW4ndCB3cml0ZSB0byBjYWNoZSBmaWxlICVzXG4iLCBmaWxlbmFtZSkpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFRyeSBhbmQgY3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHNvCisJICogdGhhdCBpbiBjYXNlIG9mIGVycm9yIHdlIGRvbid0IG92ZXJ3cml0ZSB0aGUgY2FjaGUgZmlsZS4KKwkgKiBJZiB0aGUgY2FjaGUgZmlsZSBkb2Vzbid0IHlldCBleGlzdCwgaXQgaXNuJ3QgYSByZWd1bGFyCisJICogZmlsZSAoZS5nLiAvZGV2L251bGwgb3IgYSBzb2NrZXQpLCBvciB3ZSBjb3VsZG4ndCBjcmVhdGUKKwkgKiBhIHRlbXBvcmFyeSBmaWxlIHRoZW4gd2Ugb3BlbiBpdCBkaXJlY3RseS4KKwkgKi8KKwlpZiAocmV0ID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkgeworCQl0bXAgPSBtYWxsb2Moc3RybGVuKGZpbGVuYW1lKSArIDgpOworCQlpZiAodG1wKSB7CisJCQltb2RlX3Qgc2F2ZV91bWFzayA9IHVtYXNrKDAyMik7CisJCQlzcHJpbnRmKHRtcCwgIiVzLVhYWFhYWCIsIGZpbGVuYW1lKTsKKwkJCWZkID0gbWtzdGVtcCh0bXApOworCQkJdW1hc2soc2F2ZV91bWFzayk7CisJCQlpZiAoZmQgPj0gMCkgeworCQkJCWZpbGUgPSBmZG9wZW4oZmQsICJ3Iik7CisJCQkJb3BlbmVkID0gdG1wOworCQkJfQorCQkJZmNobW9kKGZkLCAwNjQ0KTsKKwkJfQorCX0KKworCWlmICghZmlsZSkgeworCQlmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJ3Iik7CisJCW9wZW5lZCA9IGZpbGVuYW1lOworCX0KKworCURCRyhERUJVR19TQVZFLAorCSAgICBwcmludGYoIndyaXRpbmcgY2FjaGUgZmlsZSAlcyAocmVhbGx5ICVzKVxuIiwKKwkJICAgZmlsZW5hbWUsIG9wZW5lZCkpOworCisJaWYgKCFmaWxlKSB7CisJCXJldCA9IGVycm5vOworCQlnb3RvIGVycm91dDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoKHAsICZjYWNoZS0+YmljX2RldnMpIHsKKwkJYmxraWRfZGV2IGRldiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGJsa2lkX3N0cnVjdF9kZXYsIGJpZF9kZXZzKTsKKwkJaWYgKCFkZXYtPmJpZF90eXBlKQorCQkJY29udGludWU7CisJCWlmICgocmV0ID0gc2F2ZV9kZXYoZGV2LCBmaWxlKSkgPCAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKHJldCA+PSAwKSB7CisJCWNhY2hlLT5iaWNfZmxhZ3MgJj0gfkJMS0lEX0JJQ19GTF9DSEFOR0VEOworCQlyZXQgPSAxOworCX0KKworCWZjbG9zZShmaWxlKTsKKwlpZiAob3BlbmVkICE9IGZpbGVuYW1lKSB7CisJCWlmIChyZXQgPCAwKSB7CisJCQkodm9pZCkgdW5saW5rKG9wZW5lZCk7CisJCQlEQkcoREVCVUdfU0FWRSwKKwkJCSAgICBwcmludGYoInVubGlua2VkIHRlbXAgY2FjaGUgJXNcbiIsIG9wZW5lZCkpOworCQl9IGVsc2UgeworCQkJY2hhciAqYmFja3VwOworCisJCQliYWNrdXAgPSBtYWxsb2Moc3RybGVuKGZpbGVuYW1lKSArIDUpOworCQkJaWYgKGJhY2t1cCkgeworCQkJCXNwcmludGYoYmFja3VwLCAiJXMub2xkIiwgZmlsZW5hbWUpOworCQkJCXVubGluayhiYWNrdXApOworCQkJCSh2b2lkKSBsaW5rKGZpbGVuYW1lLCBiYWNrdXApOworCQkJCWZyZWUoYmFja3VwKTsKKwkJCX0KKwkJCWlmIChyZW5hbWUob3BlbmVkLCBmaWxlbmFtZSkgPCAwKQorCQkJCSh2b2lkKSB1bmxpbmsob3BlbmVkKTsKKwkJCURCRyhERUJVR19TQVZFLAorCQkJICAgIHByaW50ZigibW92ZWQgdGVtcCBjYWNoZSAlc1xuIiwgb3BlbmVkKSk7CisJCX0KKwl9CisKK2Vycm91dDoKKwlmcmVlKHRtcCk7CisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIFRFU1RfUFJPR1JBTQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWJsa2lkX2NhY2hlIGNhY2hlID0gTlVMTDsKKwlpbnQgcmV0OworCisJYmxraWRfZGVidWdfbWFzayA9IERFQlVHX0FMTDsKKwlpZiAoYXJnYyA+IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgW2ZpbGVuYW1lXVxuIgorCQkJIlRlc3QgbG9hZGluZy9zYXZpbmcgYSBjYWNoZSAoZmlsZW5hbWUpXG4iLCBhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoKHJldCA9IGJsa2lkX2dldF9jYWNoZSgmY2FjaGUsICIvZGV2L251bGwiKSkgIT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciBjcmVhdGluZyBjYWNoZSAoJWQpXG4iLAorCQkJYXJndlswXSwgcmV0KTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKChyZXQgPSBibGtpZF9wcm9iZV9hbGwoY2FjaGUpKSA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJlcnJvciAoJWQpIHByb2JpbmcgZGV2aWNlc1xuIiwgcmV0KTsKKwkJZXhpdCgxKTsKKwl9CisJY2FjaGUtPmJpY19maWxlbmFtZSA9IGJsa2lkX3N0cmR1cChhcmd2WzFdKTsKKworCWlmICgocmV0ID0gYmxraWRfZmx1c2hfY2FjaGUoY2FjaGUpKSA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJlcnJvciAoJWQpIHNhdmluZyBjYWNoZVxuIiwgcmV0KTsKKwkJZXhpdCgxKTsKKwl9CisKKwlibGtpZF9wdXRfY2FjaGUoY2FjaGUpOworCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL3RhZy5jIGIvbGliL2Jsa2lkL3RhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYWU3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGFnLmMKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiB0YWcuYyAtIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24vZnJlZSByb3V0aW5lcyBmb3IgdGFnIHN0cnVjdHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgQW5kcmVhcyBEaWxnZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMyBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImJsa2lkUC5oIgorCitzdGF0aWMgYmxraWRfdGFnIGJsa2lkX25ld190YWcodm9pZCkKK3sKKwlibGtpZF90YWcgdGFnOworCisJaWYgKCEodGFnID0gKGJsa2lkX3RhZykgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgYmxraWRfc3RydWN0X3RhZykpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmdGFnLT5iaXRfdGFncyk7CisJSU5JVF9MSVNUX0hFQUQoJnRhZy0+Yml0X25hbWVzKTsKKworCXJldHVybiB0YWc7Cit9CisKKyNpZmRlZiBDT05GSUdfQkxLSURfREVCVUcKK3ZvaWQgYmxraWRfZGVidWdfZHVtcF90YWcoYmxraWRfdGFnIHRhZykKK3sKKwlpZiAoIXRhZykgeworCQlwcmludGYoIiAgICB0YWc6IE5VTExcbiIpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRmKCIgICAgdGFnOiAlcz1cIiVzXCJcbiIsIHRhZy0+Yml0X25hbWUsIHRhZy0+Yml0X3ZhbCk7Cit9CisjZW5kaWYKKwordm9pZCBibGtpZF9mcmVlX3RhZyhibGtpZF90YWcgdGFnKQoreworCWlmICghdGFnKQorCQlyZXR1cm47CisKKwlEQkcoREVCVUdfVEFHLCBwcmludGYoIiAgICBmcmVlaW5nIHRhZyAlcz0lc1xuIiwgdGFnLT5iaXRfbmFtZSwKKwkJICAgdGFnLT5iaXRfdmFsID8gdGFnLT5iaXRfdmFsIDogIihOVUxMKSIpKTsKKwlEQkcoREVCVUdfVEFHLCBibGtpZF9kZWJ1Z19kdW1wX3RhZyh0YWcpKTsKKworCWxpc3RfZGVsKCZ0YWctPmJpdF90YWdzKTsJLyogbGlzdCBvZiB0YWdzIGZvciB0aGlzIGRldmljZSAqLworCWxpc3RfZGVsKCZ0YWctPmJpdF9uYW1lcyk7CS8qIGxpc3Qgb2YgdGFncyB3aXRoIHRoaXMgdHlwZSAqLworCisJZnJlZSh0YWctPmJpdF9uYW1lKTsKKwlmcmVlKHRhZy0+Yml0X3ZhbCk7CisKKwlmcmVlKHRhZyk7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBkZXNpcmVkIHRhZyBvbiBhIGRldmljZS4gIElmIHZhbHVlIGlzIE5VTEwsIHRoZW4gdGhlCisgKiBmaXJzdCBzdWNoIHRhZyBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIHJldHVybiBvbmx5IGV4YWN0IHRhZyBpZiBmb3VuZC4KKyAqLworYmxraWRfdGFnIGJsa2lkX2ZpbmRfdGFnX2RldihibGtpZF9kZXYgZGV2LCBjb25zdCBjaGFyICp0eXBlKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisKKwlpZiAoIWRldiB8fCAhdHlwZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoKHAsICZkZXYtPmJpZF90YWdzKSB7CisJCWJsa2lkX3RhZyB0bXAgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBibGtpZF9zdHJ1Y3RfdGFnLAorCQkJCQkgICBiaXRfdGFncyk7CisKKwkJaWYgKCFzdHJjbXAodG1wLT5iaXRfbmFtZSwgdHlwZSkpCisJCQlyZXR1cm4gdG1wOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworZXh0ZXJuIGludCBibGtpZF9kZXZfaGFzX3RhZyhibGtpZF9kZXYgZGV2LCBjb25zdCBjaGFyICp0eXBlLAorCQkJICAgICBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlibGtpZF90YWcJCXRhZzsKKworCWlmICghZGV2IHx8ICF0eXBlKQorCQlyZXR1cm4gLTE7CisKKwl0YWcgPSBibGtpZF9maW5kX3RhZ19kZXYoZGV2LCB0eXBlKTsKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gKHRhZyAhPSBOVUxMKTsKKwlpZiAoIXRhZyB8fCBzdHJjbXAodGFnLT5iaXRfdmFsLCB2YWx1ZSkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKgorICogRmluZCB0aGUgZGVzaXJlZCB0YWcgdHlwZSBpbiB0aGUgY2FjaGUuCisgKiBXZSByZXR1cm4gdGhlIGhlYWQgdGFnIGZvciB0aGlzIHRhZyB0eXBlLgorICovCitzdGF0aWMgYmxraWRfdGFnIGJsa2lkX2ZpbmRfaGVhZF9jYWNoZShibGtpZF9jYWNoZSBjYWNoZSwgY29uc3QgY2hhciAqdHlwZSkKK3sKKwlibGtpZF90YWcgaGVhZCA9IE5VTEwsIHRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCisJaWYgKCFjYWNoZSB8fCAhdHlwZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoKHAsICZjYWNoZS0+YmljX3RhZ3MpIHsKKwkJdG1wID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYmxraWRfc3RydWN0X3RhZywgYml0X3RhZ3MpOworCQlpZiAoIXN0cmNtcCh0bXAtPmJpdF9uYW1lLCB0eXBlKSkgeworCQkJREJHKERFQlVHX1RBRywKKwkJCSAgICBwcmludGYoIiAgICBmb3VuZCBjYWNoZSB0YWcgaGVhZCAlc1xuIiwgdHlwZSkpOworCQkJaGVhZCA9IHRtcDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBoZWFkOworfQorCisvKgorICogU2V0IGEgdGFnIG9uIGFuIGV4aXN0aW5nIGRldmljZS4KKyAqCisgKiBJZiB2YWx1ZSBpcyBOVUxMLCB0aGVuIGRlbGV0ZSB0aGUgdGFnc2Zyb20gdGhlIGRldmljZS4KKyAqLworaW50IGJsa2lkX3NldF90YWcoYmxraWRfZGV2IGRldiwgY29uc3QgY2hhciAqbmFtZSwKKwkJICBjb25zdCBjaGFyICp2YWx1ZSwgY29uc3QgaW50IHZsZW5ndGgpCit7CisJYmxraWRfdGFnCXQgPSAwLCBoZWFkID0gMDsKKwljaGFyCQkqdmFsID0gMDsKKwljaGFyCQkqKmRldl92YXIgPSAwOworCisJaWYgKCFkZXYgfHwgIW5hbWUpCisJCXJldHVybiAtQkxLSURfRVJSX1BBUkFNOworCisJaWYgKCEodmFsID0gYmxraWRfc3RybmR1cCh2YWx1ZSwgdmxlbmd0aCkpICYmIHZhbHVlKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9NRU07CisKKwkvKgorCSAqIENlcnRhaW4gY29tbW9uIHRhZ3MgYXJlIGxpbmtlZCBkaXJlY3RseSB0byB0aGUgZGV2aWNlIHN0cnVjdAorCSAqIFdlIG5lZWQgdG8ga25vdyB3aGF0IHRoZXkgYXJlIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNlIGJlY2F1c2UKKwkgKiB0aGUgZnVuY3Rpb24gbmFtZSBwYXJhbWV0ZXIgbWlnaHQgZ2V0IGZyZWVkIGxhdGVyIG9uLgorCSAqLworCWlmICghc3RyY21wKG5hbWUsICJUWVBFIikpCisJCWRldl92YXIgPSAmZGV2LT5iaWRfdHlwZTsKKwllbHNlIGlmICghc3RyY21wKG5hbWUsICJMQUJFTCIpKQorCQlkZXZfdmFyID0gJmRldi0+YmlkX2xhYmVsOworCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgIlVVSUQiKSkKKwkJZGV2X3ZhciA9ICZkZXYtPmJpZF91dWlkOworCisJdCA9IGJsa2lkX2ZpbmRfdGFnX2RldihkZXYsIG5hbWUpOworCWlmICghdmFsdWUpIHsKKwkJaWYgKHQpCisJCQlibGtpZF9mcmVlX3RhZyh0KTsKKwl9IGVsc2UgaWYgKHQpIHsKKwkJaWYgKCFzdHJjbXAodC0+Yml0X3ZhbCwgdmFsKSkgeworCQkJLyogU2FtZSB0aGluZywgZXhpdCAqLworCQkJZnJlZSh2YWwpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJZnJlZSh0LT5iaXRfdmFsKTsKKwkJdC0+Yml0X3ZhbCA9IHZhbDsKKwl9IGVsc2UgeworCQkvKiBFeGlzdGluZyB0YWcgbm90IHByZXNlbnQsIGFkZCB0byBkZXZpY2UgKi8KKwkJaWYgKCEodCA9IGJsa2lkX25ld190YWcoKSkpCisJCQlnb3RvIGVycm91dDsKKwkJdC0+Yml0X25hbWUgPSBibGtpZF9zdHJkdXAobmFtZSk7CisJCXQtPmJpdF92YWwgPSB2YWw7CisJCXQtPmJpdF9kZXYgPSBkZXY7CisKKwkJbGlzdF9hZGRfdGFpbCgmdC0+Yml0X3RhZ3MsICZkZXYtPmJpZF90YWdzKTsKKworCQlpZiAoZGV2LT5iaWRfY2FjaGUpIHsKKwkJCWhlYWQgPSBibGtpZF9maW5kX2hlYWRfY2FjaGUoZGV2LT5iaWRfY2FjaGUsCisJCQkJCQkgICAgIHQtPmJpdF9uYW1lKTsKKwkJCWlmICghaGVhZCkgeworCQkJCWhlYWQgPSBibGtpZF9uZXdfdGFnKCk7CisJCQkJaWYgKCFoZWFkKQorCQkJCQlnb3RvIGVycm91dDsKKworCQkJCURCRyhERUJVR19UQUcsCisJCQkJICAgIHByaW50ZigiICAgIGNyZWF0aW5nIG5ldyBjYWNoZSB0YWcgaGVhZCAlc1xuIiwgbmFtZSkpOworCQkJCWhlYWQtPmJpdF9uYW1lID0gYmxraWRfc3RyZHVwKG5hbWUpOworCQkJCWlmICghaGVhZC0+Yml0X25hbWUpCisJCQkJCWdvdG8gZXJyb3V0OworCQkJCWxpc3RfYWRkX3RhaWwoJmhlYWQtPmJpdF90YWdzLAorCQkJCQkgICAgICAmZGV2LT5iaWRfY2FjaGUtPmJpY190YWdzKTsKKwkJCX0KKwkJCWxpc3RfYWRkX3RhaWwoJnQtPmJpdF9uYW1lcywgJmhlYWQtPmJpdF9uYW1lcyk7CisJCX0KKwl9CisKKwkvKiBMaW5rIGNvbW1vbiB0YWdzIGRpcmVjdGx5IHRvIHRoZSBkZXZpY2Ugc3RydWN0ICovCisJaWYgKGRldl92YXIpCisJCSpkZXZfdmFyID0gdmFsOworCisJaWYgKGRldi0+YmlkX2NhY2hlKQorCQlkZXYtPmJpZF9jYWNoZS0+YmljX2ZsYWdzIHw9IEJMS0lEX0JJQ19GTF9DSEFOR0VEOworCXJldHVybiAwOworCitlcnJvdXQ6CisJaWYgKHQpCisJCWJsa2lkX2ZyZWVfdGFnKHQpOworCWVsc2UgZnJlZSh2YWwpOworCWlmIChoZWFkKQorCQlibGtpZF9mcmVlX3RhZyhoZWFkKTsKKwlyZXR1cm4gLUJMS0lEX0VSUl9NRU07Cit9CisKKworLyoKKyAqIFBhcnNlIGEgIk5BTUU9dmFsdWUiIHN0cmluZy4gIFRoaXMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IHRoYW4KKyAqIHBhcnNlX3Rva2VuLCBiZWNhdXNlIHRoYXQgd2lsbCBlbmQgYW4gdW5xdW90ZWQgdmFsdWUgYXQgYSBzcGFjZSwgd2hpbGUKKyAqIHRoaXMgd2lsbCBhc3N1bWUgdGhhdCBhbiB1bnF1b3RlZCB2YWx1ZSBpcyB0aGUgcmVzdCBvZiB0aGUgdG9rZW4gKGUuZy4KKyAqIGlmIHdlIGFyZSBwYXNzZWQgYW4gYWxyZWFkeSBxdW90ZWQgc3RyaW5nIGZyb20gdGhlIGNvbW1hbmQtbGluZSB3ZSBkb24ndAorICogaGF2ZSB0byBib3RoIHF1b3RlIGFuZCBlc2NhcGUgcXVvdGUgc28gdGhhdCB0aGUgcXVvdGVzIG1ha2UgaXQgdG8KKyAqIHVzKS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgYW5kIC0xIG9uIGZhaWx1cmUuCisgKi8KK2ludCBibGtpZF9wYXJzZV90YWdfc3RyaW5nKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICoqcmV0X3R5cGUsIGNoYXIgKipyZXRfdmFsKQoreworCWNoYXIgKm5hbWUsICp2YWx1ZSwgKmNwOworCisJREJHKERFQlVHX1RBRywgcHJpbnRmKCJ0cnlpbmcgdG8gcGFyc2UgJyVzJyBhcyBhIHRhZ1xuIiwgdG9rZW4pKTsKKworCWlmICghdG9rZW4gfHwgIShjcCA9IHN0cmNocih0b2tlbiwgJz0nKSkpCisJCXJldHVybiAtMTsKKworCW5hbWUgPSBibGtpZF9zdHJkdXAodG9rZW4pOworCWlmICghbmFtZSkKKwkJcmV0dXJuIC0xOworCXZhbHVlID0gbmFtZSArIChjcCAtIHRva2VuKTsKKwkqdmFsdWUrKyA9ICdcMCc7CisJaWYgKCp2YWx1ZSA9PSAnIicgfHwgKnZhbHVlID09ICdcJycpIHsKKwkJY2hhciBjID0gKnZhbHVlKys7CisJCWlmICghKGNwID0gc3RycmNocih2YWx1ZSwgYykpKQorCQkJZ290byBlcnJvdXQ7IC8qIG1pc3NpbmcgY2xvc2luZyBxdW90ZSAqLworCQkqY3AgPSAnXDAnOworCX0KKwl2YWx1ZSA9IGJsa2lkX3N0cmR1cCh2YWx1ZSk7CisJaWYgKCF2YWx1ZSkKKwkJZ290byBlcnJvdXQ7CisKKwkqcmV0X3R5cGUgPSBuYW1lOworCSpyZXRfdmFsID0gdmFsdWU7CisKKwlyZXR1cm4gMDsKKworZXJyb3V0OgorCWZyZWUobmFtZSk7CisJcmV0dXJuIC0xOworfQorCisvKgorICogVGFnIGl0ZXJhdGlvbiByb3V0aW5lcyBmb3IgdGhlIHB1YmxpYyBsaWJibGtpZCBpbnRlcmZhY2UuCisgKgorICogVGhlc2Ugcm91dGluZXMgZG8gbm90IGV4cG9zZSB0aGUgbGlzdC5oIGltcGxlbWVudGF0aW9uLCB3aGljaCBhcmUgYQorICogY29udGFtaW5hdGlvbiBvZiB0aGUgbmFtZXNwYWNlLCBhbmQgd2hpY2ggZm9yY2UgdXMgdG8gcmV2ZWFsIGZhciwgZmFyCisgKiB0b28gbXVjaCBvZiBvdXIgaW50ZXJuYWwgaW1wbGVtZW5hdGlvbi4gIEknbSBub3QgY29udmluY2VkIEkgd2FudAorICogdG8ga2VlcCBsaXN0LmggaW4gdGhlIGxvbmcgdGVybSwgYW55d2F5LiAgSXQncyBmaW5lIGZvciBrZXJuZWwKKyAqIHByb2dyYW1taW5nLCBidXQgcGVyZm9ybWFuY2UgaXMgbm90IHRoZSAjMSBwcmlvcml0eSBmb3IgdGhpcworICogbGlicmFyeSwgYW5kIEkgcmVhbGx5IGRvbid0IGxpa2UgdGhlIHRyYWRlb2ZmIG9mIHR5cGUtc2FmZXR5IGZvcgorICogcGVyZm9ybWFuY2UgZm9yIHRoaXMgYXBwbGljYXRpb24uICBbdHl0c286MjAwMzAxMjUuMjAwN0VTVF0KKyAqLworCisvKgorICogVGhpcyBzZXJpZXMgb2YgZnVuY3Rpb25zIGl0ZXJhdGUgb3ZlciBhbGwgdGFncyBpbiBhIGRldmljZQorICovCisjZGVmaW5lIFRBR19JVEVSQVRFX01BR0lDCTB4MDFhNTI4NGMKKworc3RydWN0IGJsa2lkX3N0cnVjdF90YWdfaXRlcmF0ZSB7CisJaW50CQkJbWFnaWM7CisJYmxraWRfZGV2CQlkZXY7CisJc3RydWN0IGxpc3RfaGVhZAkqcDsKK307CisKK2V4dGVybiBibGtpZF90YWdfaXRlcmF0ZSBibGtpZF90YWdfaXRlcmF0ZV9iZWdpbihibGtpZF9kZXYgZGV2KQoreworCWJsa2lkX3RhZ19pdGVyYXRlCWl0ZXI7CisKKwlpdGVyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmxraWRfc3RydWN0X3RhZ19pdGVyYXRlKSk7CisJaWYgKGl0ZXIpIHsKKwkJaXRlci0+bWFnaWMgPSBUQUdfSVRFUkFURV9NQUdJQzsKKwkJaXRlci0+ZGV2ID0gZGV2OworCQlpdGVyLT5wCT0gZGV2LT5iaWRfdGFncy5uZXh0OworCX0KKwlyZXR1cm4gKGl0ZXIpOworfQorCisvKgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKyAqLworZXh0ZXJuIGludCBibGtpZF90YWdfbmV4dChibGtpZF90YWdfaXRlcmF0ZSBpdGVyLAorCQkJICBjb25zdCBjaGFyICoqdHlwZSwgY29uc3QgY2hhciAqKnZhbHVlKQoreworCWJsa2lkX3RhZyB0YWc7CisKKwkqdHlwZSA9IDA7CisJKnZhbHVlID0gMDsKKwlpZiAoIWl0ZXIgfHwgaXRlci0+bWFnaWMgIT0gVEFHX0lURVJBVEVfTUFHSUMgfHwKKwkgICAgaXRlci0+cCA9PSAmaXRlci0+ZGV2LT5iaWRfdGFncykKKwkJcmV0dXJuIC0xOworCXRhZyA9IGxpc3RfZW50cnkoaXRlci0+cCwgc3RydWN0IGJsa2lkX3N0cnVjdF90YWcsIGJpdF90YWdzKTsKKwkqdHlwZSA9IHRhZy0+Yml0X25hbWU7CisJKnZhbHVlID0gdGFnLT5iaXRfdmFsOworCWl0ZXItPnAgPSBpdGVyLT5wLT5uZXh0OworCXJldHVybiAwOworfQorCitleHRlcm4gdm9pZCBibGtpZF90YWdfaXRlcmF0ZV9lbmQoYmxraWRfdGFnX2l0ZXJhdGUgaXRlcikKK3sKKwlpZiAoIWl0ZXIgfHwgaXRlci0+bWFnaWMgIT0gVEFHX0lURVJBVEVfTUFHSUMpCisJCXJldHVybjsKKwlpdGVyLT5tYWdpYyA9IDA7CisJZnJlZShpdGVyKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGRldmljZSB3aGljaCBtYXRjaGVzIGEgcGFydGljdWxhcgorICogdHlwZS92YWx1ZSBwYWlyLiAgSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBkZXZpY2UgdGhhdCBtYXRjaGVzIHRoZQorICogc2VhcmNoIHNwZWNpZmljYXRpb24sIGl0IHJldHVybnMgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5CisgKiB2YWx1ZS4gIFRoaXMgYWxsb3dzIHVzIHRvIGdpdmUgcHJlZmVyZW5jZSB0byBFVk1TIG9yIExWTSBkZXZpY2VzLgorICovCitleHRlcm4gYmxraWRfZGV2IGJsa2lkX2ZpbmRfZGV2X3dpdGhfdGFnKGJsa2lkX2NhY2hlIGNhY2hlLAorCQkJCQkgY29uc3QgY2hhciAqdHlwZSwKKwkJCQkJIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWJsa2lkX3RhZwloZWFkOworCWJsa2lkX2RldglkZXY7CisJaW50CQlwcmk7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlpbnQJCXByb2JlX25ldyA9IDA7CisKKwlpZiAoIWNhY2hlIHx8ICF0eXBlIHx8ICF2YWx1ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlibGtpZF9yZWFkX2NhY2hlKGNhY2hlKTsKKworCURCRyhERUJVR19UQUcsIHByaW50ZigibG9va2luZyBmb3IgJXM9JXMgaW4gY2FjaGVcbiIsIHR5cGUsIHZhbHVlKSk7CisKK3RyeV9hZ2FpbjoKKwlwcmkgPSAtMTsKKwlkZXYgPSAwOworCWhlYWQgPSBibGtpZF9maW5kX2hlYWRfY2FjaGUoY2FjaGUsIHR5cGUpOworCisJaWYgKGhlYWQpIHsKKwkJbGlzdF9mb3JfZWFjaChwLCAmaGVhZC0+Yml0X25hbWVzKSB7CisJCQlibGtpZF90YWcgdG1wID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYmxraWRfc3RydWN0X3RhZywKKwkJCQkJCSAgIGJpdF9uYW1lcyk7CisKKwkJCWlmICghc3RyY21wKHRtcC0+Yml0X3ZhbCwgdmFsdWUpICYmCisJCQkgICAgKHRtcC0+Yml0X2Rldi0+YmlkX3ByaSA+IHByaSkgJiYKKwkJCSAgICAhYWNjZXNzKHRtcC0+Yml0X2Rldi0+YmlkX25hbWUsIEZfT0spKSB7CisJCQkJZGV2ID0gdG1wLT5iaXRfZGV2OworCQkJCXByaSA9IGRldi0+YmlkX3ByaTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZGV2ICYmICEoZGV2LT5iaWRfZmxhZ3MgJiBCTEtJRF9CSURfRkxfVkVSSUZJRUQpKSB7CisJCWRldiA9IGJsa2lkX3ZlcmlmeShjYWNoZSwgZGV2KTsKKwkJaWYgKCFkZXYgfHwgKGRldiAmJiAoZGV2LT5iaWRfZmxhZ3MgJiBCTEtJRF9CSURfRkxfVkVSSUZJRUQpKSkKKwkJCWdvdG8gdHJ5X2FnYWluOworCX0KKworCWlmICghZGV2ICYmICFwcm9iZV9uZXcpIHsKKwkJaWYgKGJsa2lkX3Byb2JlX2FsbF9uZXcoY2FjaGUpIDwgMCkKKwkJCXJldHVybiBOVUxMOworCQlwcm9iZV9uZXcrKzsKKwkJZ290byB0cnlfYWdhaW47CisJfQorCisJaWYgKCFkZXYgJiYgIShjYWNoZS0+YmljX2ZsYWdzICYgQkxLSURfQklDX0ZMX1BST0JFRCkpIHsKKwkJaWYgKGJsa2lkX3Byb2JlX2FsbChjYWNoZSkgPCAwKQorCQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gdHJ5X2FnYWluOworCX0KKwlyZXR1cm4gZGV2OworfQorCisjaWZkZWYgVEVTVF9QUk9HUkFNCisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZgorCit2b2lkIHVzYWdlKGNoYXIgKnByb2cpCit7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgWy1mIGJsa2lkX2ZpbGVdIFstbSBkZWJ1Z19tYXNrXSBkZXZpY2UgIgorCQkiW3R5cGUgdmFsdWVdXG4iLAorCQlwcm9nKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0TGlzdCBhbGwgdGFncyBmb3IgYSBkZXZpY2UgYW5kIGV4aXRcbiIpOworCWV4aXQoMSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlibGtpZF90YWdfaXRlcmF0ZQlpdGVyOworCWJsa2lkX2NhY2hlIAkJY2FjaGUgPSBOVUxMOworCWJsa2lkX2RldgkJZGV2OworCWludAkJCWMsIHJldCwgZm91bmQ7CisJaW50CQkJZmxhZ3MgPSBCTEtJRF9ERVZfRklORDsKKwljaGFyCQkJKnRtcDsKKwljaGFyCQkJKmZpbGUgPSBOVUxMOworCWNoYXIJCQkqZGV2bmFtZSA9IE5VTEw7CisJY2hhcgkJCSpzZWFyY2hfdHlwZSA9IE5VTEw7CisJY2hhcgkJCSpzZWFyY2hfdmFsdWUgPSBOVUxMOworCWNvbnN0IGNoYXIJCSp0eXBlLCAqdmFsdWU7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJtOmY6IikpICE9IEVPRikKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2YnOgorCQkJZmlsZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWJsa2lkX2RlYnVnX21hc2sgPSBzdHJ0b3VsIChvcHRhcmcsICZ0bXAsIDApOworCQkJaWYgKCp0bXApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgZGVidWcgbWFzazogJXNcbiIsCisJCQkJCW9wdGFyZyk7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICc/JzoKKwkJCXVzYWdlKGFyZ3ZbMF0pOworCQl9CisJaWYgKGFyZ2MgPiBvcHRpbmQpCisJCWRldm5hbWUgPSBhcmd2W29wdGluZCsrXTsKKwlpZiAoYXJnYyA+IG9wdGluZCkKKwkJc2VhcmNoX3R5cGUgPSBhcmd2W29wdGluZCsrXTsKKwlpZiAoYXJnYyA+IG9wdGluZCkKKwkJc2VhcmNoX3ZhbHVlID0gYXJndltvcHRpbmQrK107CisJaWYgKCFkZXZuYW1lIHx8IChhcmdjICE9IG9wdGluZCkpCisJCXVzYWdlKGFyZ3ZbMF0pOworCisJaWYgKChyZXQgPSBibGtpZF9nZXRfY2FjaGUoJmNhY2hlLCBmaWxlKSkgIT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciBjcmVhdGluZyBjYWNoZSAoJWQpXG4iLAorCQkJYXJndlswXSwgcmV0KTsKKwkJZXhpdCgxKTsKKwl9CisKKwlkZXYgPSBibGtpZF9nZXRfZGV2KGNhY2hlLCBkZXZuYW1lLCBmbGFncyk7CisJaWYgKCFkZXYpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogQ2FuIG5vdCBmaW5kIGRldmljZSBpbiBibGtpZCBjYWNoZVxuIiwKKwkJCWRldm5hbWUpOworCQlleGl0KDEpOworCX0KKwlpZiAoc2VhcmNoX3R5cGUpIHsKKwkJZm91bmQgPSBibGtpZF9kZXZfaGFzX3RhZyhkZXYsIHNlYXJjaF90eXBlLCBzZWFyY2hfdmFsdWUpOworCQlwcmludGYoIkRldmljZSAlczogKCVzLCAlcykgJXNcbiIsIGJsa2lkX2Rldl9kZXZuYW1lKGRldiksCisJCSAgICAgICBzZWFyY2hfdHlwZSwgc2VhcmNoX3ZhbHVlID8gc2VhcmNoX3ZhbHVlIDogIk5VTEwiLAorCQkgICAgICAgZm91bmQgPyAiRk9VTkQiIDogIk5PVCBGT1VORCIpOworCQlyZXR1cm4oIWZvdW5kKTsKKwl9CisJcHJpbnRmKCJEZXZpY2UgJXMuLi5cbiIsIGJsa2lkX2Rldl9kZXZuYW1lKGRldikpOworCisJaXRlciA9IGJsa2lkX3RhZ19pdGVyYXRlX2JlZ2luKGRldik7CisJd2hpbGUgKGJsa2lkX3RhZ19uZXh0KGl0ZXIsICZ0eXBlLCAmdmFsdWUpID09IDApIHsKKwkJcHJpbnRmKCJcdFRhZyAlcyBoYXMgdmFsdWUgJXNcbiIsIHR5cGUsIHZhbHVlKTsKKwl9CisJYmxraWRfdGFnX2l0ZXJhdGVfZW5kKGl0ZXIpOworCisJYmxraWRfcHV0X2NhY2hlKGNhY2hlKTsKKwlyZXR1cm4gKDApOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdGVzdF9wcm9iZS5pbiBiL2xpYi9ibGtpZC90ZXN0X3Byb2JlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YjI5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdF9wcm9iZS5pbgpAQCAtMCwwICsxLDYyIEBACisKK1RFU1RTPSQqCisKK2lmIHRlc3QgIiRURVNUUyJ4ID0geCA7IHRoZW4KKwlmb3IgaSBpbiAkU1JDRElSL3Rlc3RzLyouaW1nLmJ6MgorCWRvCisJCVRFU1RTPSIkVEVTVFMgYGJhc2VuYW1lICRpIC5pbWcuYnoyYCIKKwlkb25lCitmaQorCitta2RpciAtcCB0ZXN0cy90bXAKKworZm9yIGkgaW4gJFRFU1RTCitkbworCXByaW50ZiAiJXM6ICIgJGkKKwlSRVNVTFRTPSRTUkNESVIvdGVzdHMvJGkucmVzdWx0cworCUlNQUdFX0JaMj0kU1JDRElSL3Rlc3RzLyRpLmltZy5iejIKKwlJTUFHRT10ZXN0cy90bXAvJGkuaW1nLiQkCisJaWYgdGVzdCAhIC1mICRJTUFHRV9CWjIgLWEgISAtZiAkUkVTVUxUUyA7CisJdGhlbgorCQllY2hvICJub24tZXhpc3RlbnQiCisJCWNvbnRpbnVlCisJZmkKKwlpZiBbICIkaSIgPSAic3dhcDAiIF0gJiYgd2hpY2ggbWtzd2FwID4gL2Rldi9udWxsOyAgdGhlbgorCQkjIHN3YXAgaXMgbmF0aXZlLWVuZGlhbiwgc28gcmVnZW5lcmF0ZSBiZWZvcmUgdGVzdGluZworCQlkZCBpZj0vZGV2L3plcm8gb2Y9JElNQUdFIGJzPTE2ayBjb3VudD02NCAyPiAvZGV2L251bGwKKwkJbWtzd2FwIC12MCAkSU1BR0UgPiAvZGV2L251bGwKKwllbGlmIFsgIiRpIiA9ICJzd2FwMSIgXSAmJiB3aGljaCBta3N3YXAgPiAvZGV2L251bGw7IHRoZW4KKwkJIyBzd2FwIGlzIG5hdGl2ZS1lbmRpYW4sIHNvIHJlZ2VuZXJhdGUgYmVmb3JlIHRlc3RpbmcKKwkJZGQgaWY9L2Rldi96ZXJvIG9mPSRJTUFHRSBicz0xNmsgY291bnQ9NjQgMj4gL2Rldi9udWxsCisJCSMgY2hlY2sgaWYgbWtzd2FwIHN1cHBvcnRzIHRoZSAiLVUiIG9wdGlvbgorCQlpZiBta3N3YXAgLWggMj4mMSB8IGdyZXAgLXEgLS0gJy1VJzsgdGhlbgorCQkJVVVJRD0iLVUgOGZmOGU3N2YtODU1My00ODVlLTg2NTYtNThiZTY3YTgxNjY2IgorCQllbHNlCisJCQlSTVVVSUQ9InwgZ3JlcCAtdiBVVUlEIgorCQkJUkVTX1RNUD0kU1JDRElSL3Rlc3RzL3RtcC8kaS5yZXN1bHRzCisJCQlncmVwIC12IFVVSUQgJFJFU1VMVFMgPiAkUkVTX1RNUAorCQkJUkVTVUxUUz0kUkVTX1RNUAorCQlmaQorCQlta3N3YXAgLXYxIC1MIFNXQVAtVEVTVCAkVVVJRCAkSU1BR0UgPi9kZXYvbnVsbAorCWVsc2UKKwkJYnVuemlwMiA8ICRJTUFHRV9CWjIgPiAkSU1BR0UKKwlmaQorCWV2YWwgLi90c3RfcHJvYmUgJElNQUdFICRSTVVVSUQgPiB0ZXN0cy8kaS5vdXQKKwlybSAtZiAkSU1BR0UgdGVzdHMvJGkub2sgdGVzdHMvJGkuZmFpbGVkCisJY21wIC1zIHRlc3RzLyRpLm91dCAkUkVTVUxUUworCXVuc2V0IFJNVVVJRAorCWlmIFsgJD8gPSAwIF07ICB0aGVuCisJCWVjaG8gb2sKKwkJdG91Y2ggdGVzdHMvJGkub2sKKwllbHNlCQorCQllY2hvIGZhaWxlZAorCQlkaWZmIC1jIHRlc3RzLyRpLm91dCAkUkVTVUxUUyA+IHRlc3RzLyRpLmZhaWxlZAorCWZpCitkb25lCisKK251bV9vaz1gbHMgdGVzdHMvKi5vayAyPi9kZXYvbnVsbCB8IHdjIC1sYAorbnVtX2ZhaWxlZD1gbHMgdGVzdHMvKi5mYWlsZWQgMj4vZGV2L251bGwgfCB3YyAtbGAKKworZWNobyAiJG51bV9vayB0ZXN0cyBzdWNjZWVkZWQJJG51bV9mYWlsZWQgdGVzdHMgZmFpbGVkIgorCit0ZXN0ICIkbnVtX2ZhaWxlZCIgLWVxIDAgfHwgZXhpdCAxCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdGVzdHMvY3JhbWZzLmltZy5iejIgYi9saWIvYmxraWQvdGVzdHMvY3JhbWZzLmltZy5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzODExNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC90ZXN0cy9jcmFtZnMuaW1nLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdGVzdHMvY3JhbWZzLnJlc3VsdHMgYi9saWIvYmxraWQvdGVzdHMvY3JhbWZzLnJlc3VsdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0ZDllMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC90ZXN0cy9jcmFtZnMucmVzdWx0cwpAQCAtMCwwICsxLDIgQEAKK1RZUEU9J2NyYW1mcycKK0xBQkVMPSd0ZXN0LWNyYW0nCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdGVzdHMvZXh0Mi5pbWcuYnoyIGIvbGliL2Jsa2lkL3Rlc3RzL2V4dDIuaW1nLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTgxMWNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL3Rlc3RzL2V4dDIuaW1nLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdGVzdHMvZXh0Mi5yZXN1bHRzIGIvbGliL2Jsa2lkL3Rlc3RzL2V4dDIucmVzdWx0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmE3YTJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL3Rlc3RzL2V4dDIucmVzdWx0cwpAQCAtMCwwICsxLDMgQEAKK1RZUEU9J2V4dDInCitMQUJFTD0ndGVzdC1leHQyJworVVVJRD0nMjJmMGVhYzMtNWM4OS00ZWMxLTkwNzYtNjA3OTkxMTlhYWVhJwpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL3Rlc3RzL2V4dDMuaW1nLmJ6MiBiL2xpYi9ibGtpZC90ZXN0cy9leHQzLmltZy5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM5NDU5OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC90ZXN0cy9leHQzLmltZy5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL3Rlc3RzL2V4dDMucmVzdWx0cyBiL2xpYi9ibGtpZC90ZXN0cy9leHQzLnJlc3VsdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRjMjI1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC90ZXN0cy9leHQzLnJlc3VsdHMKQEAgLTAsMCArMSwzIEBACitUWVBFPSdleHQzJworTEFCRUw9J3Rlc3QtZXh0MycKK1VVSUQ9JzM1ZjY2ZGFiLTQ3N2UtNDA5MC1hODcyLTk1ZWUwZTQ5M2FkNicKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy9mYXQuaW1nLmJ6MiBiL2xpYi9ibGtpZC90ZXN0cy9mYXQuaW1nLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmE3ZjJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL3Rlc3RzL2ZhdC5pbWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy9mYXQucmVzdWx0cyBiL2xpYi9ibGtpZC90ZXN0cy9mYXQucmVzdWx0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDQxODcyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL3Rlc3RzL2ZhdC5yZXN1bHRzCkBAIC0wLDAgKzEsMyBAQAorVFlQRT0ndmZhdCcKK0xBQkVMPSdURVNULUZBVCcKK1VVSUQ9J0RFQUQtQkVFRicKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy9mYXQzMl9sYWJlbF82NE1CLmltZy5iejIgYi9saWIvYmxraWQvdGVzdHMvZmF0MzJfbGFiZWxfNjRNQi5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNzYyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvZmF0MzJfbGFiZWxfNjRNQi5pbWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy9mYXQzMl9sYWJlbF82NE1CLnJlc3VsdHMgYi9saWIvYmxraWQvdGVzdHMvZmF0MzJfbGFiZWxfNjRNQi5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZjU2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvZmF0MzJfbGFiZWxfNjRNQi5yZXN1bHRzCkBAIC0wLDAgKzEsMyBAQAorVFlQRT0ndmZhdCcKK0xBQkVMPSdCSU5HTycKK1VVSUQ9JzhDQjUtQkE0OScKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy9pc28uaW1nLmJ6MiBiL2xpYi9ibGtpZC90ZXN0cy9pc28uaW1nLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWZiNmFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL3Rlc3RzL2lzby5pbWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy9pc28ucmVzdWx0cyBiL2xpYi9ibGtpZC90ZXN0cy9pc28ucmVzdWx0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTVkMWRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL3Rlc3RzL2lzby5yZXN1bHRzCkBAIC0wLDAgKzEsMiBAQAorVFlQRT0naXNvOTY2MCcKK0xBQkVMPSd0ZXN0LWlzbycKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy9qYmQuaW1nLmJ6MiBiL2xpYi9ibGtpZC90ZXN0cy9qYmQuaW1nLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGQ3ZjkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL3Rlc3RzL2piZC5pbWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy9qYmQucmVzdWx0cyBiL2xpYi9ibGtpZC90ZXN0cy9qYmQucmVzdWx0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTQzMDg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL3Rlc3RzL2piZC5yZXN1bHRzCkBAIC0wLDAgKzEsMiBAQAorVFlQRT0namJkJworVVVJRD0nMGQ3YTA3ZGYtN2IwNi00ODI5LWJjZTctM2I5YzNlY2U1NzBjJwpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL3Rlc3RzL2pmcy5pbWcuYnoyIGIvbGliL2Jsa2lkL3Rlc3RzL2pmcy5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNGQyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvamZzLmltZy5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL3Rlc3RzL2pmcy5yZXN1bHRzIGIvbGliL2Jsa2lkL3Rlc3RzL2pmcy5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNzUyYTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvamZzLnJlc3VsdHMKQEAgLTAsMCArMSwzIEBACitUWVBFPSdqZnMnCitMQUJFTD0ndGVzdC1qZnMnCitVVUlEPSc5YmY3YjgyZS03NTgzLTRjNzQtOTlhNC0xODlhNjkxZjI3YjUnCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdGVzdHMvbWluaXguaW1nLmJ6MiBiL2xpYi9ibGtpZC90ZXN0cy9taW5peC5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMWYzYTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvbWluaXguaW1nLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdGVzdHMvbWluaXgucmVzdWx0cyBiL2xpYi9ibGtpZC90ZXN0cy9taW5peC5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYjQ0OGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvbWluaXgucmVzdWx0cwpAQCAtMCwwICsxIEBACitUWVBFPSdtaW5peCcKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy9vY2ZzMi5pbWcuYnoyIGIvbGliL2Jsa2lkL3Rlc3RzL29jZnMyLmltZy5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJhZDkxNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC90ZXN0cy9vY2ZzMi5pbWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy9vY2ZzMi5yZXN1bHRzIGIvbGliL2Jsa2lkL3Rlc3RzL29jZnMyLnJlc3VsdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4YWZhMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC90ZXN0cy9vY2ZzMi5yZXN1bHRzCkBAIC0wLDAgKzEsMyBAQAorVFlQRT0nb2NmczInCitMQUJFTD0ndGVzdC1vY2ZzMicKK1VVSUQ9JzZiNmJmYmVhLTNhNzktNGYwYy1iMTY2LWEyMDc3NjEwMjQ0NScKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy9yZWlzZXIzLmltZy5iejIgYi9saWIvYmxraWQvdGVzdHMvcmVpc2VyMy5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MDJiYzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvcmVpc2VyMy5pbWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy9yZWlzZXIzLnJlc3VsdHMgYi9saWIvYmxraWQvdGVzdHMvcmVpc2VyMy5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjM2JiN2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvcmVpc2VyMy5yZXN1bHRzCkBAIC0wLDAgKzEsMyBAQAorVFlQRT0ncmVpc2VyZnMnCitMQUJFTD0nVEVTVFJFSVNFUicKK1VVSUQ9JzllZmU3ODYzLWIxMjQtNDZkYy1hZDY4LThlY2QwNDIzMGE3YicKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy9yZWlzZXI0LmltZy5iejIgYi9saWIvYmxraWQvdGVzdHMvcmVpc2VyNC5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MGQxMmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvcmVpc2VyNC5pbWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy9yZWlzZXI0LnJlc3VsdHMgYi9saWIvYmxraWQvdGVzdHMvcmVpc2VyNC5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTIyODkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvcmVpc2VyNC5yZXN1bHRzCkBAIC0wLDAgKzEsMyBAQAorVFlQRT0ncmVpc2VyNCcKK0xBQkVMPSdURVNUUjQnCitVVUlEPSc5NzIyNjMzYy1kNjlhLTQ4ODEtYjFjOC1iZWRlY2JiZjM5ZDInCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdGVzdHMvcm9tZnMuaW1nLmJ6MiBiL2xpYi9ibGtpZC90ZXN0cy9yb21mcy5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZTMxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvcm9tZnMuaW1nLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdGVzdHMvcm9tZnMucmVzdWx0cyBiL2xpYi9ibGtpZC90ZXN0cy9yb21mcy5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZTg2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvcm9tZnMucmVzdWx0cwpAQCAtMCwwICsxLDIgQEAKK1RZUEU9J3JvbWZzJworTEFCRUw9J3Rlc3Qtcm9tZnMnCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdGVzdHMvc21hbGwtZmF0MzIuaW1nLmJ6MiBiL2xpYi9ibGtpZC90ZXN0cy9zbWFsbC1mYXQzMi5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOTBmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvc21hbGwtZmF0MzIuaW1nLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdGVzdHMvc21hbGwtZmF0MzIucmVzdWx0cyBiL2xpYi9ibGtpZC90ZXN0cy9zbWFsbC1mYXQzMi5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNWViZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvc21hbGwtZmF0MzIucmVzdWx0cwpAQCAtMCwwICsxLDMgQEAKK1RZUEU9J3ZmYXQnCitMQUJFTD0nVEVTVFZGQVQnCitVVUlEPScxNDIzLUFBRTEnCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdGVzdHMvc3dhcDAuaW1nLmJ6MiBiL2xpYi9ibGtpZC90ZXN0cy9zd2FwMC5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MWUzNzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvc3dhcDAuaW1nLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdGVzdHMvc3dhcDAucmVzdWx0cyBiL2xpYi9ibGtpZC90ZXN0cy9zd2FwMC5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NDJhNjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMvc3dhcDAucmVzdWx0cwpAQCAtMCwwICsxIEBACitUWVBFPSdzd2FwJwpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL3Rlc3RzL3N3YXAxLmltZy5iejIgYi9saWIvYmxraWQvdGVzdHMvc3dhcDEuaW1nLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmFiOWVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL3Rlc3RzL3N3YXAxLmltZy5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL3Rlc3RzL3N3YXAxLnJlc3VsdHMgYi9saWIvYmxraWQvdGVzdHMvc3dhcDEucmVzdWx0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTA0ZTVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL3Rlc3RzL3N3YXAxLnJlc3VsdHMKQEAgLTAsMCArMSwzIEBACitUWVBFPSdzd2FwJworTEFCRUw9J1NXQVAtVEVTVCcKK1VVSUQ9JzhmZjhlNzdmLTg1NTMtNDg1ZS04NjU2LTU4YmU2N2E4MTY2NicKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy91ZGYuaW1nLmJ6MiBiL2xpYi9ibGtpZC90ZXN0cy91ZGYuaW1nLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDJkZWIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL3Rlc3RzL3VkZi5pbWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9ibGtpZC90ZXN0cy91ZGYucmVzdWx0cyBiL2xpYi9ibGtpZC90ZXN0cy91ZGYucmVzdWx0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjdhYTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL3Rlc3RzL3VkZi5yZXN1bHRzCkBAIC0wLDAgKzEsMiBAQAorVFlQRT0ndWRmJworTEFCRUw9J3Rlc3QtdWRmJwpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL3Rlc3RzL3hmcy5pbWcuYnoyIGIvbGliL2Jsa2lkL3Rlc3RzL3hmcy5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNjk4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMveGZzLmltZy5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliL2Jsa2lkL3Rlc3RzL3hmcy5yZXN1bHRzIGIvbGliL2Jsa2lkL3Rlc3RzL3hmcy5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZThkODgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYmxraWQvdGVzdHMveGZzLnJlc3VsdHMKQEAgLTAsMCArMSwzIEBACitUWVBFPSd4ZnMnCitMQUJFTD0ndGVzdC14ZnMnCitVVUlEPSc4YzhhMGE1YS05ZjU3LTQ5MmUtOTYxMC00NWE2MWYzOGY1OGEnCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdGVzdHMvemZzLmltZy5iejIgYi9saWIvYmxraWQvdGVzdHMvemZzLmltZy5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmNDQ1YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC90ZXN0cy96ZnMuaW1nLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdGVzdHMvemZzLnJlc3VsdHMgYi9saWIvYmxraWQvdGVzdHMvemZzLnJlc3VsdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmOGZiOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC90ZXN0cy96ZnMucmVzdWx0cwpAQCAtMCwwICsxIEBACitUWVBFPSd6ZnMnCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdHN0X3R5cGVzLmMgYi9saWIvYmxraWQvdHN0X3R5cGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I2MTJhZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ibGtpZC90c3RfdHlwZXMuYwpAQCAtMCwwICsxLDY0IEBACisvKgorICogVGhpcyB0ZXN0aW5nIHByb2dyYW0gbWFrZXMgc3VyZSB0aGUgYmxraWRfdHlwZXMgaGVhZGVyIGZpbGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlICJibGtpZC9ibGtpZF90eXBlcy5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWlmIChzaXplb2YoX191OCkgIT0gMSkgeworCQlwcmludGYoIlNpemVvZihfX3U4KSBpcyAlZCBzaG91bGQgYmUgMVxuIiwKKwkJICAgICAgIChpbnQpc2l6ZW9mKF9fdTgpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHNpemVvZihfX3M4KSAhPSAxKSB7CisJCXByaW50ZigiU2l6ZW9mKF9zOCkgaXMgJWQgc2hvdWxkIGJlIDFcbiIsCisJCSAgICAgICAoaW50KXNpemVvZihfX3M4KSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChzaXplb2YoX191MTYpICE9IDIpIHsKKwkJcHJpbnRmKCJTaXplb2YoX191MTYpIGlzICVkIHNob3VsZCBiZSAyXG4iLAorCQkgICAgICAgKGludClzaXplb2YoX191MTYpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHNpemVvZihfX3MxNikgIT0gMikgeworCQlwcmludGYoIlNpemVvZihfX3MxNikgaXMgJWQgc2hvdWxkIGJlIDJcbiIsCisJCSAgICAgICAoaW50KXNpemVvZihfX3MxNikpOworCQlleGl0KDEpOworCX0KKwlpZiAoc2l6ZW9mKF9fdTMyKSAhPSA0KSB7CisJCXByaW50ZigiU2l6ZW9mKF9fdTMyKSBpcyAlZCBzaG91bGQgYmUgNFxuIiwKKwkJICAgICAgIChpbnQpc2l6ZW9mKF9fdTMyKSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChzaXplb2YoX19zMzIpICE9IDQpIHsKKwkJcHJpbnRmKCJTaXplb2YoX19zMzIpIGlzICVkIHNob3VsZCBiZSA0XG4iLAorCQkgICAgICAgKGludClzaXplb2YoX19zMzIpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHNpemVvZihfX3U2NCkgIT0gOCkgeworCQlwcmludGYoIlNpemVvZihfX3U2NCkgaXMgJWQgc2hvdWxkIGJlIDhcbiIsCisJCSAgICAgICAoaW50KXNpemVvZihfX3U2NCkpOworCQlleGl0KDEpOworCX0KKwlpZiAoc2l6ZW9mKF9fczY0KSAhPSA4KSB7CisJCXByaW50ZigiU2l6ZW9mKF9fczY0KSBpcyAlZCBzaG91bGQgYmUgOFxuIiwKKwkJICAgICAgIChpbnQpc2l6ZW9mKF9fczY0KSk7CisJCWV4aXQoMSk7CisJfQorCXByaW50ZigiVGhlIGJsa2lkX3R5cGVzLmggdHlwZXMgYXJlIGNvcnJlY3QuXG4iKTsKKwlleGl0KDApOworfQorCmRpZmYgLS1naXQgYS9saWIvYmxraWQvdmVyc2lvbi5jIGIvbGliL2Jsa2lkL3ZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGMxN2FhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Jsa2lkL3ZlcnNpb24uYwpAQCAtMCwwICsxLDUwIEBACisvKgorICogdmVyc2lvbi5jIC0tLSBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIGJsa2lkIGxpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlIDxibGtpZC9ibGtpZC5oPgorI2luY2x1ZGUgIi4uLy4uL3ZlcnNpb24uaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKmxpYl92ZXJzaW9uID0gRTJGU1BST0dTX1ZFUlNJT047CitzdGF0aWMgY29uc3QgY2hhciAqbGliX2RhdGUgPSBFMkZTUFJPR1NfREFURTsKKworaW50IGJsa2lkX3BhcnNlX3ZlcnNpb25fc3RyaW5nKGNvbnN0IGNoYXIgKnZlcl9zdHJpbmcpCit7CisJY29uc3QgY2hhciAqY3A7CisJaW50IHZlcnNpb24gPSAwOworCisJZm9yIChjcCA9IHZlcl9zdHJpbmc7ICpjcDsgY3ArKykgeworCQlpZiAoKmNwID09ICcuJykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWlzZGlnaXQoKmNwKSkKKwkJCWJyZWFrOworCQl2ZXJzaW9uID0gKHZlcnNpb24gKiAxMCkgKyAoKmNwIC0gJzAnKTsKKwl9CisJcmV0dXJuIHZlcnNpb247Cit9CisKK2ludCBibGtpZF9nZXRfbGlicmFyeV92ZXJzaW9uKGNvbnN0IGNoYXIgKip2ZXJfc3RyaW5nLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKipkYXRlX3N0cmluZykKK3sKKwlpZiAodmVyX3N0cmluZykKKwkJKnZlcl9zdHJpbmcgPSBsaWJfdmVyc2lvbjsKKwlpZiAoZGF0ZV9zdHJpbmcpCisJCSpkYXRlX3N0cmluZyA9IGxpYl9kYXRlOworCisJcmV0dXJuIGJsa2lkX3BhcnNlX3ZlcnNpb25fc3RyaW5nKGxpYl92ZXJzaW9uKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9jb25maWcuaC5pbiBiL2xpYi9jb25maWcuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTU4OThhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2NvbmZpZy5oLmluCkBAIC0wLDAgKzEsODQ1IEBACisvKiBsaWIvY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuaW4gYnkgYXV0b2hlYWRlci4gICovCisKKy8qIERlZmluZSBpZiBidWlsZGluZyB1bml2ZXJzYWwgKGludGVybmFsIGhlbHBlciBtYWNybykgKi8KKyN1bmRlZiBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKKworLyogRGVmaW5lIHRvIDEgaWYgZGVidWdnaW5nIHRoZSBibGtpZCBsaWJyYXJ5ICovCisjdW5kZWYgQ09ORklHX0JMS0lEX0RFQlVHCisKKy8qIERlZmluZSB0byAxIHRvIGNvbXBpbGUgZmluZGZzICovCisjdW5kZWYgQ09ORklHX0JVSUxEX0ZJTkRGUworCisvKiBEZWZpbmUgdG8gMSBpZiBkZWJ1Z2dpbmcgZXh0My80IGpvdXJuYWwgY29kZSAqLworI3VuZGVmIENPTkZJR19KQkRfREVCVUcKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHF1b3RhIHN1cHBvcnQgKi8KKyN1bmRlZiBDT05GSUdfUVVPVEEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHRlc3RpbyBJL08gbWFuYWdlciBzaG91bGQgYmUgZW5hYmxlZCAqLworI3VuZGVmIENPTkZJR19URVNUSU9fREVCVUcKKworLyogRGVmaW5lIHRvIG9uZSBvZiBgX2dldGI2NycsIGBHRVRCNjcnLCBgZ2V0YjY3JyBmb3IgQ3JheS0yIGFuZCBDcmF5LVlNUAorICAgc3lzdGVtcy4gVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCBmb3IgYGFsbG9jYS5jJyBzdXBwb3J0IG9uIHRob3NlIHN5c3RlbXMuCisgICAqLworI3VuZGVmIENSQVlfU1RBQ0tTRUdfRU5ECisKKy8qIERlZmluZSB0byAxIGlmIHVzaW5nIGBhbGxvY2EuYycuICovCisjdW5kZWYgQ19BTExPQ0EKKworLyogRGVmaW5lIHRvIDEgdG8gZGlzYWJsZSB1c2Ugb2YgYmFja3RyYWNlICovCisjdW5kZWYgRElTQUJMRV9CQUNLVFJBQ0UKKworLyogRGVmaW5lIHRvIDEgaWYgZXh0MiBjb21wcmVzc2lvbiBlbmFibGVkICovCisjdW5kZWYgRU5BQkxFX0NPTVBSRVNTSU9OCisKKy8qIERlZmluZSB0byAxIGlmIGV4dDMvNCBodHJlZSBzdXBwb3J0IGVuYWJsZWQgKi8KKyN1bmRlZiBFTkFCTEVfSFRSRUUKKworLyogRGVmaW5lIHRvIDEgaWYgdHJhbnNsYXRpb24gb2YgcHJvZ3JhbSBtZXNzYWdlcyB0byB0aGUgdXNlcidzIG5hdGl2ZQorICAgbGFuZ3VhZ2UgaXMgcmVxdWVzdGVkLiAqLworI3VuZGVmIEVOQUJMRV9OTFMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYGFsbG9jYScsIGFzIGEgZnVuY3Rpb24gb3IgbWFjcm8uICovCisjdW5kZWYgSEFWRV9BTExPQ0EKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgPGFsbG9jYS5oPiBhbmQgaXQgc2hvdWxkIGJlIHVzZWQgKG5vdCBvbiBVbHRyaXgpLgorICAgKi8KKyN1bmRlZiBIQVZFX0FMTE9DQV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXJnel9jb3VudCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9BUkdaX0NPVU5UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXJnei5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0FSR1pfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFyZ3pfbmV4dCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9BUkdaX05FWFQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhcmd6X3N0cmluZ2lmeScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9BUkdaX1NUUklOR0lGWQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFzcHJpbnRmJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0FTUFJJTlRGCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYmFja3RyYWNlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0JBQ0tUUkFDRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGJsa2lkX3Byb2JlX2VuYWJsZV9wYXJ0aXRpb25zJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0JMS0lEX1BST0JFX0VOQUJMRV9QQVJUSVRJT05TCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYmxraWRfcHJvYmVfZ2V0X3RvcG9sb2d5JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0JMS0lEX1BST0JFX0dFVF9UT1BPTE9HWQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgY29tcGlsZXIgdW5kZXJzdGFuZHMgX19idWlsdGluX2V4cGVjdC4gKi8KKyN1bmRlZiBIQVZFX0JVSUxUSU5fRVhQRUNUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWMgT1MgWCBmdW5jdGlvbiBDRkxvY2FsZUNvcHlDdXJyZW50IGluIHRoZQorICAgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLworI3VuZGVmIEhBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjIE9TIFggZnVuY3Rpb24gQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSBpbgorICAgdGhlIENvcmVGb3VuZGF0aW9uIGZyYW1ld29yay4gKi8KKyN1bmRlZiBIQVZFX0NGUFJFRkVSRU5DRVNDT1BZQVBQVkFMVUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjaGZsYWdzJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0NIRkxBR1MKKworLyogRGVmaW5lIGlmIHRoZSBHTlUgZGNnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC4KKyAgICovCisjdW5kZWYgSEFWRV9EQ0dFVFRFWFQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBmZW9mX3VubG9ja2VkJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfRkVPRl9VTkxPQ0tFRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGZnZXRzX3VubG9ja2VkJywgYW5kIHRvIDAgaWYKKyAgIHlvdSBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfRkdFVFNfVU5MT0NLRUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBnZXRjX3VubG9ja2VkJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfR0VUQ19VTkxPQ0tFRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYF9zbnByaW50ZicsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX19TTlBSSU5URgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYF9zbndwcmludGYnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9fU05XUFJJTlRGCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZW50Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRElSRU5UX0gKKworLyogRGVmaW5lIHRvIDEgaWYgZGxvcGVuL2xpYmRsIGV4aXN0cyAqLworI3VuZGVmIEhBVkVfRExPUEVOCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBkb24ndCBoYXZlIGB2cHJpbnRmJyBidXQgZG8gaGF2ZSBgX2RvcHJudC4nICovCisjdW5kZWYgSEFWRV9ET1BSTlQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxlcnJuby5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0VSUk5PX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxleGVjaW5mby5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0VYRUNJTkZPX0gKKworLyogRGVmaW5lIHRvIDEgaWYgRXh0MiBpb2N0bHMgcHJlc2VudCAqLworI3VuZGVmIEhBVkVfRVhUMl9JT0NUTFMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmYWR2aXNlNjQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRkFEVklTRTY0CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmFsbG9jYXRlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZBTExPQ0FURQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZhbGxvY2F0ZTY0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZBTExPQ0FURTY0CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmNob3duJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZDSE9XTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZkYXRhc3luYycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GREFUQVNZTkMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxmZWF0dXJlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0ZFQVRVUkVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmc3RhdDY0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZTVEFUNjQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmdHJ1bmNhdGU2NCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GVFJVTkNBVEU2NAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ1dGltZXMnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRlVUSU1FUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ3cHJpbnRmJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZXUFJJTlRGCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0Y3dkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVENXRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGR0YWJsZXNpemUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VURFRBQkxFU0laRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGVnaWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VURUdJRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGV1aWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VURVVJRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGdpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRHSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRtbnRpbmZvJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVE1OVElORk8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxnZXRvcHQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9HRVRPUFRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHBhZ2VzaXplJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFBBR0VTSVpFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHd1aWRfcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRQV1VJRF9SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cmxpbWl0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFJMSU1JVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHJ1c2FnZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRSVVNBR0UKKworLyogRGVmaW5lIGlmIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuICovCisjdW5kZWYgSEFWRV9HRVRURVhUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0dWlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFVJRAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGljb252KCkgZnVuY3Rpb24gYW5kIGl0IHdvcmtzLiAqLworI3VuZGVmIEhBVkVfSUNPTlYKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaW50bWF4X3QnIHR5cGUgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uICovCisjdW5kZWYgSEFWRV9JTlRNQVhfVAorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50cHRyX3QnLiAqLworI3VuZGVmIEhBVkVfSU5UUFRSX1QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lOVFRZUEVTX0gKKworLyogRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQKKyAgIGRlY2xhcmVzIHVpbnRtYXhfdC4gKi8KKyN1bmRlZiBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBganJhbmQ0OCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9KUkFORDQ4CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSA8bGFuZ2luZm8uaD4gYW5kIG5sX2xhbmdpbmZvKENPREVTRVQpLiAqLworI3VuZGVmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorCisvKiBEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy4gKi8KKyN1bmRlZiBIQVZFX0xDX01FU1NBR0VTCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGltaXRzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTElNSVRTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9mYWxsb2MuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSU5VWF9GQUxMT0NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2ZkLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTElOVVhfRkRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2xvb3AuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSU5VWF9MT09QX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9tYWpvci5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJTlVYX01BSk9SX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsbHNlZWsnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTExTRUVLCisKKy8qIERlZmluZSB0byAxIGlmIGxsc2VlayBkZWNsYXJlZCBpbiB1bmlzdGQuaCAqLworI3VuZGVmIEhBVkVfTExTRUVLX1BST1RPVFlQRQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSAnbG9uZyBsb25nIGludCcuICovCisjdW5kZWYgSEFWRV9MT05HX0xPTkdfSU5UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbHNlZWs2NCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9MU0VFSzY0CisKKy8qIERlZmluZSB0byAxIGlmIGxzZWVrNjQgZGVjbGFyZWQgaW4gdW5pc3RkLmggKi8KKyN1bmRlZiBIQVZFX0xTRUVLNjRfUFJPVE9UWVBFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWFsbGluZm8nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTUFMTElORk8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtYWxsb2MuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9NQUxMT0NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1icnRvd2MnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTUJSVE9XQworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1ic3Rvd2NzJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01CU1RPV0NTCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtYWxpZ24nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTUVNQUxJR04KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9NRU1PUllfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbXBjcHknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTUVNUENQWQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1tYXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTU1BUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1udGVudC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX01OVEVOVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbXN5bmMnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTVNZTkMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtdW5tYXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTVVOTUFQCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbmFub3NsZWVwJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX05BTk9TTEVFUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVRJTkVUX0lOX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWZfZGwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVRfSUZfRExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9pZi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05FVF9JRl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbmV3bG9jYWxlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX05FV0xPQ0FMRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG9wZW42NCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9PUEVONjQKKworLyogRGVmaW5lIHRvIDEgaWYgb3B0cmVzZXQgZm9yIGdldG9wdCBpcyBwcmVzZW50ICovCisjdW5kZWYgSEFWRV9PUFRSRVNFVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBhdGhjb25mJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BBVEhDT05GCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cGF0aHMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9QQVRIU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG9zaXhfZmFkdmlzZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QT1NJWF9GQURWSVNFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG9zaXhfZmFkdmlzZTY0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BPU0lYX0ZBRFZJU0U2NAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBvc2l4X21lbWFsaWduJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BPU0lYX01FTUFMSUdOCisKKy8qIERlZmluZSBpZiB5b3VyIHByaW50ZigpIGZ1bmN0aW9uIHN1cHBvcnRzIGZvcm1hdCBzdHJpbmdzIHdpdGggcG9zaXRpb25zLiAqLworI3VuZGVmIEhBVkVfUE9TSVhfUFJJTlRGCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHJjdGwnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUFJDVEwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmVhZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QUkVBRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHByZWFkNjQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUFJFQUQ2NAorCisvKiBEZWZpbmUgaWYgdGhlIDxwdGhyZWFkLmg+IGRlZmluZXMgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUuICovCisjdW5kZWYgSEFWRV9QVEhSRUFEX01VVEVYX1JFQ1VSU0lWRQorCisvKiBEZWZpbmUgaWYgdGhlIFBPU0lYIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgaGFzIHJlYWQvd3JpdGUgbG9ja3MuICovCisjdW5kZWYgSEFWRV9QVEhSRUFEX1JXTE9DSworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHB1dGVudicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QVVRFTlYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwd3JpdGUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUFdSSVRFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHdyaXRlNjQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUFdSSVRFNjQKKworLyogRGVmaW5lIHRvIDEgaWYgZGlyZW50IGhhcyBkX3JlY2xlbiAqLworI3VuZGVmIEhBVkVfUkVDTEVOX0RJUkVOVAorCisvKiBEZWZpbmUgdG8gMSBpZiBpZiBzdHJ1Y3Qgc29ja2FkZHIgY29udGFpbnMgc2FfbGVuICovCisjdW5kZWYgSEFWRV9TQV9MRU4KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZWN1cmVfZ2V0ZW52JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFQ1VSRV9HRVRFTlYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzZW1hcGhvcmUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TRU1BUEhPUkVfSAorCisvKiBEZWZpbmUgdG8gMSBpZiBzZW1faW5pdCgpIGV4aXN0cyAqLworI3VuZGVmIEhBVkVfU0VNX0lOSVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRlbnYnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VURU5WCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2V0am1wLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU0VUSk1QX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRsb2NhbGUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUTE9DQUxFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0bW50ZW50JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFVE1OVEVOVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHJlc2dpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRVRSRVNHSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRyZXN1aWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUUkVTVUlECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2lnbmFsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU0lHTkFMX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzbnByaW50ZicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TTlBSSU5URgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNyYW5kb20nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1JBTkRPTQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJ1Y3Qgc3RhdCBoYXMgc3RfZmxhZ3MgKi8KKyN1bmRlZiBIQVZFX1NUQVRfRkxBR1MKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRhcmcuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERBUkdfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGRlZi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURERFRl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RESU5UX0gKKworLyogRGVmaW5lIGlmIDxzdGRpbnQuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kIGRlY2xhcmVzCisgICB1aW50bWF4X3QuICovCisjdW5kZWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERMSUJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cGNweScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFBDUFkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJjYXNlY21wJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkNBU0VDTVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJkdXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSRFVQCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR1NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RybmxlbicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJOTEVOCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RycHRpbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSUFRJTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b3VsJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUlRPVUwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b3VsbCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJUT1VMTAorCisvKiBEZWZpbmUgdG8gMSBpZiBgc3RfYXRpbScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUX1NUX0FUSU0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzeW1saW5rJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NZTUxJTksKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzeW5jX2ZpbGVfcmFuZ2UnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1lOQ19GSUxFX1JBTkdFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3lzY29uZicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TWVNDT05GCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2Rpc2tsYWJlbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19ESVNLTEFCRUxfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9kaXNrLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX0RJU0tfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9maWxlLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX0ZJTEVfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9pb2N0bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19JT0NUTF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL21rZGV2Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX01LREVWX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvbW1hbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19NTUFOX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvbW91bnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfTU9VTlRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19QQVJBTV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3ByY3RsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1BSQ1RMX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcmVzb3VyY2UuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfUkVTT1VSQ0VfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU0VMRUNUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TT0NLSU9fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NUQVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zeXNjYWxsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NZU0NBTExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zeXNtYWNyb3MuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU1lTTUFDUk9TX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19USU1FX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91bi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19VTl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3dhaXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfV0FJVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlvcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1RFUk1JT1NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pby5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1RFUk1JT19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdHNlYXJjaCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9UU0VBUkNICisKKy8qIERlZmluZSB0byAxIGlmIHNzaXplX3QgZGVjbGFyZWQgKi8KKyN1bmRlZiBIQVZFX1RZUEVfU1NJWkVfVAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd1aW50bWF4X3QnIHR5cGUgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uICovCisjdW5kZWYgSEFWRV9VSU5UTUFYX1QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VTklTVERfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSAndW5zaWduZWQgbG9uZyBsb25nIGludCcuICovCisjdW5kZWYgSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdXNlbG9jYWxlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1VTRUxPQ0FMRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHVzbGVlcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9VU0xFRVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1dGltZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9VVElNRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHV0aW1lcycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9VVElNRVMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1VUSU1FX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB2YWxsb2MnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVkFMTE9DCisKKy8qIERlZmluZSB0byAxIG9yIDAsIGRlcGVuZGluZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyBzaW1wbGUgdmlzaWJpbGl0eQorICAgZGVjbGFyYXRpb25zLiAqLworI3VuZGVmIEhBVkVfVklTSUJJTElUWQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZwcmludGYnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVlBSSU5URgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd3Y2hhcl90JyB0eXBlLiAqLworI3VuZGVmIEhBVkVfV0NIQVJfVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdjcnRvbWInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfV0NSVE9NQgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdjc2xlbicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9XQ1NMRU4KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3Y3NubGVuJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1dDU05MRU4KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnd2ludF90JyB0eXBlLiAqLworI3VuZGVmIEhBVkVfV0lOVF9UCisKKy8qIERlZmluZSB0byAxIGlmIE9fTk9BVElNRSB3b3Jrcy4gKi8KKyN1bmRlZiBIQVZFX1dPUktJTkdfT19OT0FUSU1FCisKKy8qIERlZmluZSB0byAxIGlmIE9fTk9GT0xMT1cgd29ya3MuICovCisjdW5kZWYgSEFWRV9XT1JLSU5HX09fTk9GT0xMT1cKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfX2ZzZXRsb2NraW5nJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX19fRlNFVExPQ0tJTkcKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfX3NlY3VyZV9nZXRlbnYnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfX19TRUNVUkVfR0VURU5WCisKKy8qIERlZmluZSBhcyBjb25zdCBpZiB0aGUgZGVjbGFyYXRpb24gb2YgaWNvbnYoKSBuZWVkcyBjb25zdC4gKi8KKyN1bmRlZiBJQ09OVl9DT05TVAorCisvKiBEZWZpbmUgaWYgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBzaWduYWwgU0lHRlBFLiAqLworI3VuZGVmIElOVERJVjBfUkFJU0VTX1NJR0ZQRQorCisvKiBwYWNrYWdlIG5hbWUgZm9yIGdldHRleHQgKi8KKyN1bmRlZiBQQUNLQUdFCisKKy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLworI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX05BTUUKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKKworLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1VSTAorCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgorCisvKiBEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB1bnVzYWJsZSBQUkkqIG1hY3Jvcy4gKi8KKyN1bmRlZiBQUklfTUFDUk9TX0JST0tFTgorCisvKiBEZWZpbmUgaWYgdGhlIHB0aHJlYWRfaW5fdXNlKCkgZGV0ZWN0aW9uIGlzIGhhcmQuICovCisjdW5kZWYgUFRIUkVBRF9JTl9VU0VfREVURUNUSU9OX0hBUkQKKworLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfSU5UCisKKy8qIFRoZSBzaXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9MT05HCisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX0xPTkdfTE9ORworCisvKiBUaGUgc2l6ZSBvZiBgb2ZmX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX09GRl9UCisKKy8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfU0hPUlQKKworLyogRGVmaW5lIGFzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHR5cGUgJ3NpemVfdCcsIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBkZWZpbmUKKyAgIGl0LiAqLworI2lmbmRlZiBTSVpFX01BWAorIyB1bmRlZiBTSVpFX01BWAorI2VuZGlmCisKKy8qIElmIHVzaW5nIHRoZSBDIGltcGxlbWVudGF0aW9uIG9mIGFsbG9jYSwgZGVmaW5lIGlmIHlvdSBrbm93IHRoZQorICAgZGlyZWN0aW9uIG9mIHN0YWNrIGdyb3d0aCBmb3IgeW91ciBzeXN0ZW07IG90aGVyd2lzZSBpdCB3aWxsIGJlCisgICBhdXRvbWF0aWNhbGx5IGRlZHVjZWQgYXQgcnVudGltZS4KKwlTVEFDS19ESVJFQ1RJT04gPiAwID0+IGdyb3dzIHRvd2FyZCBoaWdoZXIgYWRkcmVzc2VzCisJU1RBQ0tfRElSRUNUSU9OIDwgMCA9PiBncm93cyB0b3dhcmQgbG93ZXIgYWRkcmVzc2VzCisJU1RBQ0tfRElSRUNUSU9OID0gMCA9PiBkaXJlY3Rpb24gb2YgZ3Jvd3RoIHVua25vd24gKi8KKyN1bmRlZiBTVEFDS19ESVJFQ1RJT04KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjdW5kZWYgU1REQ19IRUFERVJTCisKKy8qIElmIHRoZSBjb21waWxlciBzdXBwb3J0cyBhIFRMUyBzdG9yYWdlIGNsYXNzIGRlZmluZSBpdCB0byB0aGF0IGhlcmUgKi8KKyN1bmRlZiBUTFMKKworLyogRGVmaW5lIGlmIHRoZSBQT1NJWCBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IGNhbiBiZSB1c2VkLiAqLworI3VuZGVmIFVTRV9QT1NJWF9USFJFQURTCisKKy8qIERlZmluZSBpZiByZWZlcmVuY2VzIHRvIHRoZSBQT1NJWCBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IHNob3VsZCBiZSBtYWRlCisgICB3ZWFrLiAqLworI3VuZGVmIFVTRV9QT1NJWF9USFJFQURTX1dFQUsKKworLyogRGVmaW5lIGlmIHRoZSBHTlUgUHRoIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgY2FuIGJlIHVzZWQuICovCisjdW5kZWYgVVNFX1BUSF9USFJFQURTCisKKy8qIERlZmluZSBpZiByZWZlcmVuY2VzIHRvIHRoZSBHTlUgUHRoIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgc2hvdWxkIGJlIG1hZGUKKyAgIHdlYWsuICovCisjdW5kZWYgVVNFX1BUSF9USFJFQURTX1dFQUsKKworLyogRGVmaW5lIGlmIHRoZSBvbGQgU29sYXJpcyBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IGNhbiBiZSB1c2VkLiAqLworI3VuZGVmIFVTRV9TT0xBUklTX1RIUkVBRFMKKworLyogRGVmaW5lIGlmIHJlZmVyZW5jZXMgdG8gdGhlIG9sZCBTb2xhcmlzIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgc2hvdWxkIGJlCisgICBtYWRlIHdlYWsuICovCisjdW5kZWYgVVNFX1NPTEFSSVNfVEhSRUFEU19XRUFLCisKKy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIEFJWCAzLCBJbnRlcml4LiAgKi8KKyNpZm5kZWYgX0FMTF9TT1VSQ0UKKyMgdW5kZWYgX0FMTF9TT1VSQ0UKKyNlbmRpZgorLyogRW5hYmxlIEdOVSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBoYXZlIHRoZW0uICAqLworI2lmbmRlZiBfR05VX1NPVVJDRQorIyB1bmRlZiBfR05VX1NPVVJDRQorI2VuZGlmCisvKiBFbmFibGUgdGhyZWFkaW5nIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisjaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworIyB1bmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKyNlbmRpZgorLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gSFAgTm9uU3RvcC4gICovCisjaWZuZGVmIF9UQU5ERU1fU09VUkNFCisjIHVuZGVmIF9UQU5ERU1fU09VUkNFCisjZW5kaWYKKy8qIEVuYWJsZSBnZW5lcmFsIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisjaWZuZGVmIF9fRVhURU5TSU9OU19fCisjIHVuZGVmIF9fRVhURU5TSU9OU19fCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSB0byBidWlsZCB1dWlkZCAqLworI3VuZGVmIFVTRV9VVUlERAorCisvKiBEZWZpbmUgaWYgdGhlIG5hdGl2ZSBXaW5kb3dzIG11bHRpdGhyZWFkaW5nIEFQSSBjYW4gYmUgdXNlZC4gKi8KKyN1bmRlZiBVU0VfV0lORE9XU19USFJFQURTCisKKy8qIHZlcnNpb24gZm9yIGdldHRleHQgKi8KKyN1bmRlZiBWRVJTSU9OCisKKy8qIERlZmluZSBXT1JEU19CSUdFTkRJQU4gdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdAorICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCkuICovCisjaWYgZGVmaW5lZCBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKKyMgaWYgZGVmaW5lZCBfX0JJR19FTkRJQU5fXworIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCisjIGVuZGlmCisjZWxzZQorIyBpZm5kZWYgV09SRFNfQklHRU5ESUFOCisjICB1bmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gMSBpZiBBcHBsZSBEYXJ3aW4gbGliaW50bCB3b3JrYXJvdW5kIGlzIG5lZWRlZCAqLworI3VuZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworCisvKiBEZWZpbmUgdG8gMSBpZiBvbiBNSU5JWC4gKi8KKyN1bmRlZiBfTUlOSVgKKworLyogRGVmaW5lIHRvIDIgaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIFBPU0lYLjEgZmVhdHVyZXMgZXhjZXB0IHdpdGgKKyAgIHRoaXMgZGVmaW5lZC4gKi8KKyN1bmRlZiBfUE9TSVhfMV9TT1VSQ0UKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdG8gaW4gb3JkZXIgZm9yIGBzdGF0JyBhbmQgb3RoZXIgdGhpbmdzIHRvIHdvcmsuICovCisjdW5kZWYgX1BPU0lYX1NPVVJDRQorCisvKiBQbGVhc2Ugc2VlIHRoZSBHbnVsaWIgbWFudWFsIGZvciBob3cgdG8gdXNlIHRoZXNlIG1hY3Jvcy4KKworICAgU3VwcHJlc3MgZXh0ZXJuIGlubGluZSB3aXRoIEhQLVVYIGNjLCBhcyBpdCBhcHBlYXJzIHRvIGJlIGJyb2tlbjsgc2VlCisgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy10ZXhpbmZvLzIwMTMtMDIvbXNnMDAwMzAuaHRtbD4uCisKKyAgIFN1cHByZXNzIGV4dGVybiBpbmxpbmUgd2l0aCBTdW4gQyBpbiBzdGFuZGFyZHMtY29uZm9ybWFuY2UgbW9kZSwgYXMgaXQKKyAgIG1pc2hhbmRsZXMgaW5saW5lIGZ1bmN0aW9ucyB0aGF0IGNhbGwgZWFjaCBvdGhlci4gIEUuZy4sIGZvciAnaW5saW5lIHZvaWQgZgorICAgKHZvaWQpIHsgfSBpbmxpbmUgdm9pZCBnICh2b2lkKSB7IGYgKCk7IH0nLCBjOTkgaW5jb3JyZWN0bHkgY29tcGxhaW5zCisgICAncmVmZXJlbmNlIHRvIHN0YXRpYyBpZGVudGlmaWVyICJmIiBpbiBleHRlcm4gaW5saW5lIGZ1bmN0aW9uJy4KKyAgIFRoaXMgYnVnIHdhcyBvYnNlcnZlZCB3aXRoIFN1biBDIDUuMTIgU3VuT1NfaTM4NiAyMDExLzExLzE2LgorCisgICBTdXBwcmVzcyB0aGUgdXNlIG9mIGV4dGVybiBpbmxpbmUgb24gQXBwbGUncyBwbGF0Zm9ybXMsIGFzIExpYmMgYXQgbGVhc3QKKyAgIHRocm91Z2ggTGliYy04MjUuMjYgKDIwMTMtMDQtMDkpIGlzIGluY29tcGF0aWJsZSB3aXRoIGl0OyBzZWUsIGUuZy4sCisgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1nbnVsaWIvMjAxMi0xMi9tc2cwMDAyMy5odG1sPi4KKyAgIFBlcmhhcHMgQXBwbGUgd2lsbCBmaXggdGhpcyBzb21lIGRheS4gICovCisjaWYgKChfX0dOVUNfXyBcCisgICAgICA/IGRlZmluZWQgX19HTlVDX1NURENfSU5MSU5FX18gJiYgX19HTlVDX1NURENfSU5MSU5FX18gXAorICAgICAgOiAoMTk5OTAxTCA8PSBfX1NURENfVkVSU0lPTl9fIFwKKyAgICAgICAgICYmICFkZWZpbmVkIF9fSFBfY2MgXAorICAgICAgICAgJiYgIShkZWZpbmVkIF9fU1VOUFJPX0MgJiYgX19TVERDX18pKSkgXAorICAgICAmJiAhZGVmaW5lZCBfX0FQUExFX18pCisjIGRlZmluZSBfR0xfSU5MSU5FIGlubGluZQorIyBkZWZpbmUgX0dMX0VYVEVSTl9JTkxJTkUgZXh0ZXJuIGlubGluZQorI2VsaWYgKDIgPCBfX0dOVUNfXyArICg3IDw9IF9fR05VQ19NSU5PUl9fKSAmJiAhZGVmaW5lZCBfX1NUUklDVF9BTlNJX18gXAorICAgICAgICYmICFkZWZpbmVkIF9fQVBQTEVfXykKKyMgaWYgX19HTlVDX0dOVV9JTkxJTkVfXworICAgLyogX19nbnVfaW5saW5lX18gc3VwcHJlc3NlcyBhIEdDQyA0LjIgZGlhZ25vc3RpYy4gICovCisjICBkZWZpbmUgX0dMX0lOTElORSBleHRlcm4gaW5saW5lIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXykpCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfSU5MSU5FIGV4dGVybiBpbmxpbmUKKyMgZW5kaWYKKyMgZGVmaW5lIF9HTF9FWFRFUk5fSU5MSU5FIGV4dGVybgorI2Vsc2UKKyMgZGVmaW5lIF9HTF9JTkxJTkUgc3RhdGljIF9HTF9VTlVTRUQKKyMgZGVmaW5lIF9HTF9FWFRFUk5fSU5MSU5FIHN0YXRpYyBfR0xfVU5VU0VECisjZW5kaWYKKworI2lmIDQgPCBfX0dOVUNfXyArICg2IDw9IF9fR05VQ19NSU5PUl9fKQorIyBpZiBkZWZpbmVkIF9fR05VQ19TVERDX0lOTElORV9fICYmIF9fR05VQ19TVERDX0lOTElORV9fCisjICBkZWZpbmUgX0dMX0lOTElORV9IRUFERVJfQ09OU1RfUFJBR01BCisjIGVsc2UKKyMgIGRlZmluZSBfR0xfSU5MSU5FX0hFQURFUl9DT05TVF9QUkFHTUEgXAorICAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1Xc3VnZ2VzdC1hdHRyaWJ1dGU9Y29uc3RcIiIpCisjIGVuZGlmCisgIC8qIFN1cHByZXNzIEdDQydzIGJvZ3VzICJubyBwcmV2aW91cyBwcm90b3R5cGUgZm9yICdGT08nIgorICAgICBhbmQgIm5vIHByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciAnRk9PJyIgIGRpYWdub3N0aWNzLAorICAgICB3aGVuIEZPTyBpcyBhbiBpbmxpbmUgZnVuY3Rpb24gaW4gdGhlIGhlYWRlcjsgc2VlCisgICAgIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU0MTEzPi4gICovCisjIGRlZmluZSBfR0xfSU5MSU5FX0hFQURFUl9CRUdJTiBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHB1c2giKSBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV21pc3NpbmctcHJvdG90eXBlc1wiIikgXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdtaXNzaW5nLWRlY2xhcmF0aW9uc1wiIikgXAorICAgIF9HTF9JTkxJTkVfSEVBREVSX0NPTlNUX1BSQUdNQQorIyBkZWZpbmUgX0dMX0lOTElORV9IRUFERVJfRU5EIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcG9wIikKKyNlbHNlCisjIGRlZmluZSBfR0xfSU5MSU5FX0hFQURFUl9CRUdJTgorIyBkZWZpbmUgX0dMX0lOTElORV9IRUFERVJfRU5ECisjZW5kaWYKKworLyogRGVmaW5lIHRvIGBfX2lubGluZV9fJyBvciBgX19pbmxpbmUnIGlmIHRoYXQncyB3aGF0IHRoZSBDIGNvbXBpbGVyCisgICBjYWxscyBpdCwgb3IgdG8gbm90aGluZyBpZiAnaW5saW5lJyBpcyBub3Qgc3VwcG9ydGVkIHVuZGVyIGFueSBuYW1lLiAgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKyN1bmRlZiBpbmxpbmUKKyNlbmRpZgorCisvKiBEZWZpbmUgYXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyB0d28gcG9pbnRlcnMsIGlmIHRoZSBzeXN0ZW0KKyAgIGRvZXNuJ3QgZGVmaW5lIGl0LiAqLworI3VuZGVmIHB0cmRpZmZfdAorCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisjdW5kZWYgc2l6ZV90CisKKy8qIERlZmluZSB0byB1bnNpZ25lZCBsb25nIG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBpZiA8c3RkaW50Lmg+IGFuZAorICAgPGludHR5cGVzLmg+IGRvbid0IGRlZmluZS4gKi8KKyN1bmRlZiB1aW50bWF4X3QKKworI2luY2x1ZGUgPGRpcnBhdGhzLmg+CisKKworI2RlZmluZSBfX2xpYmNfbG9ja190ICAgICAgICAgICAgICAgICAgIGdsX2xvY2tfdAorI2RlZmluZSBfX2xpYmNfbG9ja19kZWZpbmUgICAgICAgICAgICAgIGdsX2xvY2tfZGVmaW5lCisjZGVmaW5lIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAgZ2xfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQKKyNkZWZpbmUgX19saWJjX2xvY2tfaW5pdCAgICAgICAgICAgICAgICBnbF9sb2NrX2luaXQKKyNkZWZpbmUgX19saWJjX2xvY2tfbG9jayAgICAgICAgICAgICAgICBnbF9sb2NrX2xvY2sKKyNkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrICAgICAgICAgICAgICBnbF9sb2NrX3VubG9jaworI2RlZmluZSBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCAgICAgICAgICAgICAgICAgICBnbF9yZWN1cnNpdmVfbG9ja190CisjZGVmaW5lIF9fbGliY19sb2NrX2RlZmluZV9yZWN1cnNpdmUgICAgICAgICAgICAgIGdsX3JlY3Vyc2l2ZV9sb2NrX2RlZmluZQorI2RlZmluZSBfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWRfcmVjdXJzaXZlICBnbF9yZWN1cnNpdmVfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQKKyNkZWZpbmUgX19saWJjX2xvY2tfaW5pdF9yZWN1cnNpdmUgICAgICAgICAgICAgICAgZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdAorI2RlZmluZSBfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZSAgICAgICAgICAgICAgICBnbF9yZWN1cnNpdmVfbG9ja19sb2NrCisjZGVmaW5lIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmUgICAgICAgICAgICAgIGdsX3JlY3Vyc2l2ZV9sb2NrX3VubG9jaworI2RlZmluZSBnbHRocmVhZF9pbl91c2UgIGxpYmludGxfdGhyZWFkX2luX3VzZQorI2RlZmluZSBnbHRocmVhZF9sb2NrX2luaXRfZnVuYyAgICAgbGliaW50bF9sb2NrX2luaXRfZnVuYworI2RlZmluZSBnbHRocmVhZF9sb2NrX2xvY2tfZnVuYyAgICAgbGliaW50bF9sb2NrX2xvY2tfZnVuYworI2RlZmluZSBnbHRocmVhZF9sb2NrX3VubG9ja19mdW5jICAgbGliaW50bF9sb2NrX3VubG9ja19mdW5jCisjZGVmaW5lIGdsdGhyZWFkX2xvY2tfZGVzdHJveV9mdW5jICBsaWJpbnRsX2xvY2tfZGVzdHJveV9mdW5jCisjZGVmaW5lIGdsdGhyZWFkX3J3bG9ja19pbml0X211bHRpdGhyZWFkZWQgICAgIGxpYmludGxfcndsb2NrX2luaXRfbXVsdGl0aHJlYWRlZAorI2RlZmluZSBnbHRocmVhZF9yd2xvY2tfaW5pdF9mdW5jICAgICAgICAgICAgICBsaWJpbnRsX3J3bG9ja19pbml0X2Z1bmMKKyNkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3JkbG9ja19tdWx0aXRocmVhZGVkICAgbGliaW50bF9yd2xvY2tfcmRsb2NrX211bHRpdGhyZWFkZWQKKyNkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3JkbG9ja19mdW5jICAgICAgICAgICAgbGliaW50bF9yd2xvY2tfcmRsb2NrX2Z1bmMKKyNkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3dybG9ja19tdWx0aXRocmVhZGVkICAgbGliaW50bF9yd2xvY2tfd3Jsb2NrX211bHRpdGhyZWFkZWQKKyNkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3dybG9ja19mdW5jICAgICAgICAgICAgbGliaW50bF9yd2xvY2tfd3Jsb2NrX2Z1bmMKKyNkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3VubG9ja19tdWx0aXRocmVhZGVkICAgbGliaW50bF9yd2xvY2tfdW5sb2NrX211bHRpdGhyZWFkZWQKKyNkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3VubG9ja19mdW5jICAgICAgICAgICAgbGliaW50bF9yd2xvY2tfdW5sb2NrX2Z1bmMKKyNkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX2Rlc3Ryb3lfbXVsdGl0aHJlYWRlZCAgbGliaW50bF9yd2xvY2tfZGVzdHJveV9tdWx0aXRocmVhZGVkCisjZGVmaW5lIGdsdGhyZWFkX3J3bG9ja19kZXN0cm95X2Z1bmMgICAgICAgICAgIGxpYmludGxfcndsb2NrX2Rlc3Ryb3lfZnVuYworI2RlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19pbml0X211bHRpdGhyZWFkZWQgICAgIGxpYmludGxfcmVjdXJzaXZlX2xvY2tfaW5pdF9tdWx0aXRocmVhZGVkCisjZGVmaW5lIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXRfZnVuYyAgICAgICAgICAgICAgbGliaW50bF9yZWN1cnNpdmVfbG9ja19pbml0X2Z1bmMKKyNkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfbG9ja19tdWx0aXRocmVhZGVkICAgICBsaWJpbnRsX3JlY3Vyc2l2ZV9sb2NrX2xvY2tfbXVsdGl0aHJlYWRlZAorI2RlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19sb2NrX2Z1bmMgICAgICAgICAgICAgIGxpYmludGxfcmVjdXJzaXZlX2xvY2tfbG9ja19mdW5jCisjZGVmaW5lIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX3VubG9ja19tdWx0aXRocmVhZGVkICAgbGliaW50bF9yZWN1cnNpdmVfbG9ja191bmxvY2tfbXVsdGl0aHJlYWRlZAorI2RlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja191bmxvY2tfZnVuYyAgICAgICAgICAgIGxpYmludGxfcmVjdXJzaXZlX2xvY2tfdW5sb2NrX2Z1bmMKKyNkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfZGVzdHJveV9tdWx0aXRocmVhZGVkICBsaWJpbnRsX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3lfbXVsdGl0aHJlYWRlZAorI2RlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19kZXN0cm95X2Z1bmMgICAgICAgICAgIGxpYmludGxfcmVjdXJzaXZlX2xvY2tfZGVzdHJveV9mdW5jCisjZGVmaW5lIGdsdGhyZWFkX29uY2VfZnVuYyAgICAgICAgICAgIGxpYmludGxfb25jZV9mdW5jCisjZGVmaW5lIGdsdGhyZWFkX29uY2Vfc2luZ2xldGhyZWFkZWQgIGxpYmludGxfb25jZV9zaW5nbGV0aHJlYWRlZAorI2RlZmluZSBnbHRocmVhZF9vbmNlX211bHRpdGhyZWFkZWQgICBsaWJpbnRsX29uY2VfbXVsdGl0aHJlYWRlZAorCmRpZmYgLS1naXQgYS9saWIvZGlycGF0aHMuaC5pbiBiL2xpYi9kaXJwYXRocy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjY2I1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZGlycGF0aHMuaC5pbgpAQCAtMCwwICsxLDEwIEBACisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwYXRoIG5hbWVzIGZvciB2YXJpb3VzIGRpcmVjdG9yaWVzIGFzCisgKiBjb250cm9sbGVkIGJ5IHRoZSBjb25maWd1cmUgc2NyaXB0LgorICovCisKKy8qIFdoZXJlIHRvIHB1dCB0aGUgbWVzc2FnZXMgZmlsZSBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydCAqLworI2RlZmluZSBMT0NBTEVESVIJCSJAZGF0YWRpckAvbG9jYWxlIgorCisvKiBXaGVyZSB0byBmaW5kIHRoZSBta2UyZnMuY29uZiBhbmQgZTJmc2NrLmNvbmYgZmlsZXMgKi8KKyNkZWZpbmUgUk9PVF9TWVNDT05GRElSCQkiQHJvb3Rfc3lzY29uZmRpckAiCmRpZmYgLS1naXQgYS9saWIvZTJwL01ha2VmaWxlLmluIGIvbGliL2UycC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzcxYzFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2UycC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDE4MyBAQAorIyBNYWtlZmlsZSBmb3IgdGhlIHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSB1dGlsaXR5IGZ1bmN0aW9ucworIworIyBDb3B5cmlnaHQgKEMpIDE5OTMgUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorIworIyBUaGlzIGZpbGUgY2FuIGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorIyBQdWJsaWMgTGljZW5zZQorCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLi4vLi4KK215X2RpciA9IGxpYi9lMnAKK0lOU1RBTEwgPSBASU5TVEFMTEAKKworQE1DT05GSUdACisKK2FsbDo6CWUycC5wYworCitPQkpTPQkJZmVhdHVyZS5vIGZnZXRmbGFncy5vIGZzZXRmbGFncy5vIGZnZXR2ZXJzaW9uLm8gZnNldHZlcnNpb24ubyBcCisJCWdldGZsYWdzLm8gZ2V0dmVyc2lvbi5vIGhhc2hzdHIubyBpb2QubyBscy5vIG1udG9wdHMubyBcCisJCXBhcnNlX251bS5vIHBlLm8gcGYubyBwcy5vIHNldGZsYWdzLm8gc2V0dmVyc2lvbi5vIHV1aWQubyBcCisJCW9zdHlwZS5vIHBlcmNlbnQubworCitTUkNTPQkJJChzcmNkaXIpL2ZlYXR1cmUuYyAkKHNyY2RpcikvZmdldGZsYWdzLmMgXAorCQkkKHNyY2RpcikvZnNldGZsYWdzLmMgJChzcmNkaXIpL2ZnZXR2ZXJzaW9uLmMgXAorCQkkKHNyY2RpcikvZnNldHZlcnNpb24uYyAkKHNyY2RpcikvZ2V0ZmxhZ3MuYyBcCisJCSQoc3JjZGlyKS9nZXR2ZXJzaW9uLmMgJChzcmNkaXIpL2hhc2hzdHIuYyAkKHNyY2RpcikvaW9kLmMgXAorCQkkKHNyY2RpcikvbHMuYyAkKHNyY2RpcikvbW50b3B0cy5jICQoc3JjZGlyKS9wYXJzZV9udW0uYyBcCisJCSQoc3JjZGlyKS9wZS5jICQoc3JjZGlyKS9wZi5jICQoc3JjZGlyKS9wcy5jIFwKKwkJJChzcmNkaXIpL3NldGZsYWdzLmMgJChzcmNkaXIpL3NldHZlcnNpb24uYyAkKHNyY2RpcikvdXVpZC5jIFwKKwkJJChzcmNkaXIpL29zdHlwZS5jICQoc3JjZGlyKS9wZXJjZW50LmMKK0hGSUxFUz0gZTJwLmgKKworTElCUkFSWT0gbGliZTJwCitMSUJESVI9IGUycAorCitFTEZfVkVSU0lPTiA9IDIuMworRUxGX1NPX1ZFUlNJT04gPSAyCitFTEZfSU1BR0UgPSBsaWJlMnAKK0VMRl9NWURJUiA9IGUycAorRUxGX0lOU1RBTExfRElSID0gJChyb290X2xpYmRpcikKK0VMRl9PVEhFUl9MSUJTID0KKworQlNETElCX1ZFUlNJT04gPSAyLjEKK0JTRExJQl9JTUFHRSA9IGxpYmUycAorQlNETElCX01ZRElSID0gZTJwCitCU0RMSUJfSU5TVEFMTF9ESVIgPSAkKHJvb3RfbGliZGlyKQorCitATUFLRUZJTEVfTElCUkFSWUAKK0BNQUtFRklMRV9FTEZACitATUFLRUZJTEVfQlNETElCQAorQE1BS0VGSUxFX1BST0ZJTEVACisKKy5jLm86CisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCSQoUSkgJChDSEVDS19DTUQpICQoQUxMX0NGTEFHUykgJDwKK0BQUk9GSUxFX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1nIC1wZyAtbyBwcm9maWxlZC8kKi5vIC1jICQ8CitARUxGX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1mUElDIC1vIGVsZnNoYXJlZC8kKi5vIC1jICQ8CitAQlNETElCX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpICQoQlNETElCX1BJQ19GTEFHKSAtbyBwaWMvJCoubyAtYyAkPAorCitlMnAucGM6ICQoc3JjZGlyKS9lMnAucGMuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwkkKEUpICIJQ09ORklHLlNUQVRVUyAkQCIKKwkkKFEpIGNkICQodG9wX2J1aWxkZGlyKTsgQ09ORklHX0ZJTEVTPWxpYi9lMnAvZTJwLnBjIC4vY29uZmlnLnN0YXR1cworCit0c3Rfb3N0eXBlOiAkKHNyY2Rpcikvb3N0eXBlLmMKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtRFRFU1RfUFJPR1JBTSAtSSQodG9wX3NyY2RpcikvbGliIC1vIHRzdF9vc3R5cGUgXAorCQkkKHNyY2Rpcikvb3N0eXBlLmMgJChBTExfQ0ZMQUdTKQorCit0c3RfZmVhdHVyZTogJChzcmNkaXIpL2ZlYXR1cmUuYworCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1EVEVTVF9QUk9HUkFNIC1JJCh0b3Bfc3JjZGlyKS9saWIgLW8gdHN0X2ZlYXR1cmUgXAorCQkkKHNyY2RpcikvZmVhdHVyZS5jICQoQUxMX0NGTEFHUykKKworY2hlY2s6Ogl0c3Rfb3N0eXBlIHRzdF9mZWF0dXJlCisJLi90c3Rfb3N0eXBlCisJLi90c3RfZmVhdHVyZQorCitpbnN0YWxsZGlyczo6CisJJChFKSAiCU1LSU5TVEFMTERJUlMgJChsaWJkaXIpICQoaW5jbHVkZWRpcikvZTJwIgorCSQoUSkgJChNS0lOU1RBTExESVJTKSAkKERFU1RESVIpJChsaWJkaXIpIFwKKwkJJChERVNURElSKSQoaW5jbHVkZWRpcikvZTJwICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikKKworaW5zdGFsbDo6IGFsbCBpbnN0YWxsZGlycyAKKwkkKEUpICIJSU5TVEFMTF9EQVRBICQobGliZGlyKS9saWJlMnAuYSIKKwkkKFEpICQoSU5TVEFMTF9EQVRBKSBsaWJlMnAuYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmUycC5hCisJLSQoUSkgJChSQU5MSUIpICQoREVTVERJUikkKGxpYmRpcikvbGliZTJwLmEKKwkkKFEpICQoQ0hNT0QpICQoTElCTU9ERSkgJChERVNURElSKSQobGliZGlyKS9saWJlMnAuYQorCSQoUSkgc2V0IC1lOyBmb3IgaSBpbiAkKEhGSUxFUyk7IGRvIFwKKwkgIGVjaG8gIglJTlNUQUxMX0RBVEEgJChpbmNsdWRlZGlyKS9lMnAvJCRpIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGkgJChERVNURElSKSQoaW5jbHVkZWRpcikvZTJwLyQkaTsgXAorCWRvbmUKKwkkKEUpICIJSU5TVEFMTF9EQVRBICQocGtnY29uZmlnZGlyKS9lMnAucGMiCisJJChRKSAkKElOU1RBTExfREFUQSkgZTJwLnBjICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikvZTJwLnBjCisKK3VuaW5zdGFsbDo6CisJJChSTSkgLWYgJChERVNURElSKSQobGliZGlyKS9saWJlMnAuYSBcCisJCSQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikvZTJwLnBjCisJJChSTSkgLXJmICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2UycAorCitjbGVhbjo6CisJJChSTSkgLWYgXCMqICoucyAqLm8gKi5hICp+ICouYmFrIGNvcmUgcHJvZmlsZWQvKgorCSQoUk0pIC1mIC4uL2xpYmUycC5hIC4uL2xpYmUycF9wLmEgdHN0X29zdHlwZSB0c3RfZmVhdHVyZQorCittb3N0bHljbGVhbjo6IGNsZWFuCitkaXN0Y2xlYW46OiBjbGVhbgorCSQoUk0pIC1mIC5kZXBlbmQgTWFrZWZpbGUgZTJwLnBjIFwKKwkJJChzcmNkaXIpL1RBR1MgJChzcmNkaXIpL01ha2VmaWxlLmluLm9sZAorCiskKE9CSlMpOiBzdWJkaXJzCisKKyMgKysrIERlcGVuZGVuY3kgbGluZSBlYXRlciArKysKKyMgCisjIE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb2xsb3cuICBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc2VjdGlvbiBpbgorIyB0aGUgTWFrZWZpbGUuaW4gZmlsZQorIworZmVhdHVyZS5vOiAkKHNyY2RpcikvZmVhdHVyZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9qZnNfdXNlci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtamJkLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9qZnNfY29tcGF0LmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2tlcm5lbC1saXN0LmgKK2ZnZXRmbGFncy5vOiAkKHNyY2RpcikvZmdldGZsYWdzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMnAuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmgKK2ZzZXRmbGFncy5vOiAkKHNyY2RpcikvZnNldGZsYWdzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMnAuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmgKK2ZnZXR2ZXJzaW9uLm86ICQoc3JjZGlyKS9mZ2V0dmVyc2lvbi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oCitmc2V0dmVyc2lvbi5vOiAkKHNyY2RpcikvZnNldHZlcnNpb24uYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UycC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaAorZ2V0ZmxhZ3MubzogJChzcmNkaXIpL2dldGZsYWdzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMnAuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmgKK2dldHZlcnNpb24ubzogJChzcmNkaXIpL2dldHZlcnNpb24uYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UycC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaAoraGFzaHN0ci5vOiAkKHNyY2RpcikvaGFzaHN0ci5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oCitpb2QubzogJChzcmNkaXIpL2lvZC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oCitscy5vOiAkKHNyY2RpcikvbHMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UycC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaAorbW50b3B0cy5vOiAkKHNyY2RpcikvbW50b3B0cy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oCitwYXJzZV9udW0ubzogJChzcmNkaXIpL3BhcnNlX251bS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oCitwZS5vOiAkKHNyY2RpcikvcGUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UycC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaAorcGYubzogJChzcmNkaXIpL3BmLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMnAuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmgKK3BzLm86ICQoc3JjZGlyKS9wcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oCitzZXRmbGFncy5vOiAkKHNyY2Rpcikvc2V0ZmxhZ3MuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UycC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaAorc2V0dmVyc2lvbi5vOiAkKHNyY2Rpcikvc2V0dmVyc2lvbi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oCit1dWlkLm86ICQoc3JjZGlyKS91dWlkLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJChzcmNkaXIpL2UycC5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmgKK29zdHlwZS5vOiAkKHNyY2Rpcikvb3N0eXBlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMnAuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmgKK3BlcmNlbnQubzogJChzcmNkaXIpL3BlcmNlbnQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UycC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaApkaWZmIC0tZ2l0IGEvbGliL2UycC9lMnAuaCBiL2xpYi9lMnAvZTJwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZhNDFmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lMnAvZTJwLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIGUycC5oIC0tLSBoZWFkZXIgZmlsZSBmb3IgdGhlIGUycCBsaWJyYXJ5CisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CQkvKiBOZWVkZWQgYnkgZGlyZW50Lmggb24gbmV0YnNkICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKworI2luY2x1ZGUgPGV4dDJmcy9leHQyX2ZzLmg+CisKKyNkZWZpbmUgRTJQX0ZFQVRVUkVfQ09NUEFUCTAKKyNkZWZpbmUgRTJQX0ZFQVRVUkVfSU5DT01QQVQJMQorI2RlZmluZSBFMlBfRkVBVFVSRV9ST19JTkNPTVBBVAkyCisjZGVmaW5lIEUyUF9GRUFUVVJFX1RZUEVfTUFTSwkweDAzCisKKyNkZWZpbmUgRTJQX0ZFQVRVUkVfTkVHQVRFX0ZMQUcJMHg4MAorCisjZGVmaW5lIEUyUF9GU19GRUFUVVJFCQkwCisjZGVmaW5lIEUyUF9KT1VSTkFMX0ZFQVRVUkUJMQorCisvKiBgb3B0aW9ucycgZm9yIHByaW50X2ZsYWdzKCkgKi8KKworI2RlZmluZSBQRk9QVF9MT05HICAxIC8qIE11c3QgYmUgMSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGBpbnQgbG9uZ19mb3JtYXQnLiAqLworCisKK2ludCBmZ2V0ZmxhZ3MgKGNvbnN0IGNoYXIgKiBuYW1lLCB1bnNpZ25lZCBsb25nICogZmxhZ3MpOworaW50IGZnZXR2ZXJzaW9uIChjb25zdCBjaGFyICogbmFtZSwgdW5zaWduZWQgbG9uZyAqIHZlcnNpb24pOworaW50IGZzZXRmbGFncyAoY29uc3QgY2hhciAqIG5hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworaW50IGZzZXR2ZXJzaW9uIChjb25zdCBjaGFyICogbmFtZSwgdW5zaWduZWQgbG9uZyB2ZXJzaW9uKTsKK2ludCBnZXRmbGFncyAoaW50IGZkLCB1bnNpZ25lZCBsb25nICogZmxhZ3MpOworaW50IGdldHZlcnNpb24gKGludCBmZCwgdW5zaWduZWQgbG9uZyAqIHZlcnNpb24pOworaW50IGl0ZXJhdGVfb25fZGlyIChjb25zdCBjaGFyICogZGlyX25hbWUsCisJCSAgICBpbnQgKCpmdW5jKSAoY29uc3QgY2hhciAqLCBzdHJ1Y3QgZGlyZW50ICosIHZvaWQgKiksCisJCSAgICB2b2lkICogcHJpdmF0ZV9hcmcpOwordm9pZCBsaXN0X3N1cGVyKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICogcyk7Cit2b2lkIGxpc3Rfc3VwZXIyKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICogcywgRklMRSAqZik7Cit2b2lkIHByaW50X2ZzX2Vycm9ycyAoRklMRSAqIGYsIHVuc2lnbmVkIHNob3J0IGVycm9ycyk7Cit2b2lkIHByaW50X2ZsYWdzIChGSUxFICogZiwgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgb3B0aW9ucyk7Cit2b2lkIHByaW50X2ZzX3N0YXRlIChGSUxFICogZiwgdW5zaWduZWQgc2hvcnQgc3RhdGUpOworaW50IHNldGZsYWdzIChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworaW50IHNldHZlcnNpb24gKGludCBmZCwgdW5zaWduZWQgbG9uZyB2ZXJzaW9uKTsKKworY29uc3QgY2hhciAqZTJwX2ZlYXR1cmUyc3RyaW5nKGludCBjb21wYXQsIHVuc2lnbmVkIGludCBtYXNrKTsKK2NvbnN0IGNoYXIgKmUycF9qcm5sX2ZlYXR1cmUyc3RyaW5nKGludCBjb21wYXQsIHVuc2lnbmVkIGludCBtYXNrKTsKK2ludCBlMnBfc3RyaW5nMmZlYXR1cmUoY2hhciAqc3RyaW5nLCBpbnQgKmNvbXBhdCwgdW5zaWduZWQgaW50ICptYXNrKTsKK2ludCBlMnBfanJubF9zdHJpbmcyZmVhdHVyZShjaGFyICpzdHJpbmcsIGludCAqY29tcGF0X3R5cGUsIHVuc2lnbmVkIGludCAqbWFzayk7CitpbnQgZTJwX2VkaXRfZmVhdHVyZShjb25zdCBjaGFyICpzdHIsIF9fdTMyICpjb21wYXRfYXJyYXksIF9fdTMyICpva19hcnJheSk7CitpbnQgZTJwX2VkaXRfZmVhdHVyZTIoY29uc3QgY2hhciAqc3RyLCBfX3UzMiAqY29tcGF0X2FycmF5LCBfX3UzMiAqb2tfYXJyYXksCisJCSAgICAgIF9fdTMyICpjbGVhcl9va19hcnJheSwgaW50ICp0eXBlX2VyciwKKwkJICAgICAgdW5zaWduZWQgaW50ICptYXNrX2Vycik7CisKK2ludCBlMnBfaXNfbnVsbF91dWlkKHZvaWQgKnV1KTsKK3ZvaWQgZTJwX3V1aWRfdG9fc3RyKHZvaWQgKnV1LCBjaGFyICpvdXQpOworY29uc3QgY2hhciAqZTJwX3V1aWQyc3RyKHZvaWQgKnV1KTsKKworY29uc3QgY2hhciAqZTJwX2hhc2gyc3RyaW5nKGludCBudW0pOworaW50IGUycF9zdHJpbmcyaGFzaChjaGFyICpzdHJpbmcpOworCitjb25zdCBjaGFyICplMnBfbW50b3B0MnN0cmluZyh1bnNpZ25lZCBpbnQgbWFzayk7CitpbnQgZTJwX3N0cmluZzJtbnRvcHQoY2hhciAqc3RyaW5nLCB1bnNpZ25lZCBpbnQgKm1hc2spOworaW50IGUycF9lZGl0X21udG9wdHMoY29uc3QgY2hhciAqc3RyLCBfX3UzMiAqbW50b3B0cywgX191MzIgb2spOworCit1bnNpZ25lZCBsb25nIHBhcnNlX251bV9ibG9ja3MoY29uc3QgY2hhciAqYXJnLCBpbnQgbG9nX2Jsb2NrX3NpemUpOwordW5zaWduZWQgbG9uZyBsb25nIHBhcnNlX251bV9ibG9ja3MyKGNvbnN0IGNoYXIgKmFyZywgaW50IGxvZ19ibG9ja19zaXplKTsKKworY2hhciAqZTJwX29zMnN0cmluZyhpbnQgb3NfdHlwZSk7CitpbnQgZTJwX3N0cmluZzJvcyhjaGFyICpzdHIpOworCit1bnNpZ25lZCBpbnQgZTJwX3BlcmNlbnQoaW50IHBlcmNlbnQsIHVuc2lnbmVkIGludCBiYXNlKTsKZGlmZiAtLWdpdCBhL2xpYi9lMnAvZTJwLnBjLmluIGIvbGliL2UycC9lMnAucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3MWFlNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lMnAvZTJwLnBjLmluCkBAIC0wLDAgKzEsMTEgQEAKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorbGliZGlyPUBsaWJkaXJACitpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorCitOYW1lOiBlMnAKK0Rlc2NyaXB0aW9uOiBFeHQyZnMgdXNlcnBhY2UgcHJvZ3JhbXMgdXRpbGl0eSBsaWJyYXJ5CitWZXJzaW9uOiBARTJGU1BST0dTX1ZFUlNJT05ACitSZXF1aXJlczogCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9lMnAgLUkke2luY2x1ZGVkaXJ9CitMaWJzOiAtTCR7bGliZGlyfSAtbGUycApkaWZmIC0tZ2l0IGEvbGliL2UycC9mZWF0dXJlLmMgYi9saWIvZTJwL2ZlYXR1cmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDNlNjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2UycC9mZWF0dXJlLmMKQEAgLTAsMCArMSw0MTEgQEAKKy8qCisgKiBmZWF0dXJlLmMgLS0tIGNvbnZlcnQgYmV0d2VlbiBmZWF0dXJlcyBhbmQgc3RyaW5ncworICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSAgVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImUycC5oIgorI2luY2x1ZGUgPGV4dDJmcy9leHQyZnMuaD4KKyNpbmNsdWRlIDxleHQyZnMvamZzX3VzZXIuaD4KKworc3RydWN0IGZlYXR1cmUgeworCWludAkJY29tcGF0OworCXVuc2lnbmVkIGludAltYXNrOworCWNvbnN0IGNoYXIJKnN0cmluZzsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmVhdHVyZSBmZWF0dXJlX2xpc3RbXSA9IHsKKwl7CUUyUF9GRUFUVVJFX0NPTVBBVCwgRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfUFJFQUxMT0MsCisJCQkiZGlyX3ByZWFsbG9jIiB9LAorCXsJRTJQX0ZFQVRVUkVfQ09NUEFULCBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMLAorCQkJImhhc19qb3VybmFsIiB9LAorCXsJRTJQX0ZFQVRVUkVfQ09NUEFULCBFWFQyX0ZFQVRVUkVfQ09NUEFUX0lNQUdJQ19JTk9ERVMsCisJCQkiaW1hZ2ljX2lub2RlcyIgfSwKKwl7CUUyUF9GRUFUVVJFX0NPTVBBVCwgRVhUMl9GRUFUVVJFX0NPTVBBVF9FWFRfQVRUUiwKKwkJCSJleHRfYXR0ciIgfSwKKwl7CUUyUF9GRUFUVVJFX0NPTVBBVCwgRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfSU5ERVgsCisJCQkiZGlyX2luZGV4IiB9LAorCXsJRTJQX0ZFQVRVUkVfQ09NUEFULCBFWFQyX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERSwKKwkJCSJyZXNpemVfaW5vZGUiIH0sCisJewlFMlBfRkVBVFVSRV9DT01QQVQsIEVYVDJfRkVBVFVSRV9DT01QQVRfTEFaWV9CRywKKwkJCSJsYXp5X2JnIiB9LAorCXsJRTJQX0ZFQVRVUkVfQ09NUEFULCBFWFQyX0ZFQVRVUkVfQ09NUEFUX0VYQ0xVREVfQklUTUFQLAorCQkJInNuYXBzaG90X2JpdG1hcCIgfSwKKwl7CUUyUF9GRUFUVVJFX0NPTVBBVCwgRVhUNF9GRUFUVVJFX0NPTVBBVF9TUEFSU0VfU1VQRVIyLAorCQkJInNwYXJzZV9zdXBlcjIiIH0sCisKKwl7CUUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULCBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUiwKKwkJCSJzcGFyc2Vfc3VwZXIiIH0sCisJewlFMlBfRkVBVFVSRV9ST19JTkNPTVBBVCwgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFLAorCQkJImxhcmdlX2ZpbGUiIH0sCisJewlFMlBfRkVBVFVSRV9ST19JTkNPTVBBVCwgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUsCisJCQkiaHVnZV9maWxlIiB9LAorCXsJRTJQX0ZFQVRVUkVfUk9fSU5DT01QQVQsIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0sCisJCQkidW5pbml0X2JnIiB9LAorCXsJRTJQX0ZFQVRVUkVfUk9fSU5DT01QQVQsIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0sCisJCQkidW5pbml0X2dyb3VwcyIgfSwKKwl7CUUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULCBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0RJUl9OTElOSywKKwkJCSJkaXJfbmxpbmsiIH0sCisJewlFMlBfRkVBVFVSRV9ST19JTkNPTVBBVCwgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9FWFRSQV9JU0laRSwKKwkJCSJleHRyYV9pc2l6ZSIgfSwKKwl7CUUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULCBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBLAorCQkJInF1b3RhIiB9LAorCXsJRTJQX0ZFQVRVUkVfUk9fSU5DT01QQVQsIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MsCisJCQkiYmlnYWxsb2MifSwKKwl7CUUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULCBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX01FVEFEQVRBX0NTVU0sCisJCQkibWV0YWRhdGFfY3N1bSJ9LAorCXsJRTJQX0ZFQVRVUkVfUk9fSU5DT01QQVQsIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfUkVQTElDQSwKKwkJCSJyZXBsaWNhIiB9LAorCisJewlFMlBfRkVBVFVSRV9JTkNPTVBBVCwgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0NPTVBSRVNTSU9OLAorCQkJImNvbXByZXNzaW9uIiB9LAorCXsJRTJQX0ZFQVRVUkVfSU5DT01QQVQsIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRSwKKwkJCSJmaWxldHlwZSIgfSwKKwl7CUUyUF9GRUFUVVJFX0lOQ09NUEFULCBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUiwKKwkJCSJuZWVkc19yZWNvdmVyeSIgfSwKKwl7CUUyUF9GRUFUVVJFX0lOQ09NUEFULCBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfSk9VUk5BTF9ERVYsCisJCQkiam91cm5hbF9kZXYiIH0sCisJewlFMlBfRkVBVFVSRV9JTkNPTVBBVCwgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMsCisJCQkiZXh0ZW50IiB9LAorCXsJRTJQX0ZFQVRVUkVfSU5DT01QQVQsIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTLAorCQkJImV4dGVudHMiIH0sCisJewlFMlBfRkVBVFVSRV9JTkNPTVBBVCwgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcsCisJCQkibWV0YV9iZyIgfSwKKwl7CUUyUF9GRUFUVVJFX0lOQ09NUEFULCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQsCisJCQkiNjRiaXQiIH0sCisJeyAgICAgICBFMlBfRkVBVFVSRV9JTkNPTVBBVCwgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01NUCwKKwkJCSJtbXAiIH0sCisJeyAgICAgICBFMlBfRkVBVFVSRV9JTkNPTVBBVCwgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcsCisJCQkiZmxleF9iZyJ9LAorCXsgICAgICAgRTJQX0ZFQVRVUkVfSU5DT01QQVQsIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FQV9JTk9ERSwKKwkJCSJlYV9pbm9kZSJ9LAorCXsgICAgICAgRTJQX0ZFQVRVUkVfSU5DT01QQVQsIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9ESVJEQVRBLAorCQkJImRpcmRhdGEifSwKKwl7ICAgICAgIEUyUF9GRUFUVVJFX0lOQ09NUEFULCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTEFSR0VESVIsCisJCQkibGFyZ2VfZGlyIn0sCisJeyAgICAgICBFMlBfRkVBVFVSRV9JTkNPTVBBVCwgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0lOTElORURBVEEsCisJCQkiaW5saW5lX2RhdGEifSwKKwl7CTAsIDAsIDAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmVhdHVyZSBqcm5sX2ZlYXR1cmVfbGlzdFtdID0geworICAgICAgIHsgICAgICAgRTJQX0ZFQVRVUkVfQ09NUEFULCBKRlNfRkVBVFVSRV9DT01QQVRfQ0hFQ0tTVU0sCisgICAgICAgICAgICAgICAgICAgICAgICJqb3VybmFsX2NoZWNrc3VtIiB9LAorCisgICAgICAgeyAgICAgICBFMlBfRkVBVFVSRV9JTkNPTVBBVCwgSkZTX0ZFQVRVUkVfSU5DT01QQVRfUkVWT0tFLAorICAgICAgICAgICAgICAgICAgICAgICAiam91cm5hbF9pbmNvbXBhdF9yZXZva2UiIH0sCisgICAgICAgeyAgICAgICBFMlBfRkVBVFVSRV9JTkNPTVBBVCwgSkZTX0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQsCisgICAgICAgICAgICAgICAgICAgICAgICJqb3VybmFsXzY0Yml0IiB9LAorICAgICAgIHsgICAgICAgRTJQX0ZFQVRVUkVfSU5DT01QQVQsIEpGU19GRUFUVVJFX0lOQ09NUEFUX0FTWU5DX0NPTU1JVCwKKyAgICAgICAgICAgICAgICAgICAgICAgImpvdXJuYWxfYXN5bmNfY29tbWl0IiB9LAorICAgICAgIHsgICAgICAgMCwgMCwgMCB9LAorfTsKKworY29uc3QgY2hhciAqZTJwX2ZlYXR1cmUyc3RyaW5nKGludCBjb21wYXQsIHVuc2lnbmVkIGludCBtYXNrKQoreworCXN0cnVjdCBmZWF0dXJlICAqZjsKKwlzdGF0aWMgY2hhciBidWZbMjBdOworCWNoYXIJZmNoYXI7CisJaW50CWZudW07CisKKwlmb3IgKGYgPSBmZWF0dXJlX2xpc3Q7IGYtPnN0cmluZzsgZisrKSB7CisJCWlmICgoY29tcGF0ID09IGYtPmNvbXBhdCkgJiYKKwkJICAgIChtYXNrID09IGYtPm1hc2spKQorCQkJcmV0dXJuIGYtPnN0cmluZzsKKwl9CisJc3dpdGNoIChjb21wYXQpIHsKKwljYXNlICBFMlBfRkVBVFVSRV9DT01QQVQ6CisJCWZjaGFyID0gJ0MnOworCQlicmVhazsKKwljYXNlIEUyUF9GRUFUVVJFX0lOQ09NUEFUOgorCQlmY2hhciA9ICdJJzsKKwkJYnJlYWs7CisJY2FzZSBFMlBfRkVBVFVSRV9ST19JTkNPTVBBVDoKKwkJZmNoYXIgPSAnUic7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZjaGFyID0gJz8nOworCQlicmVhazsKKwl9CisJZm9yIChmbnVtID0gMDsgbWFzayA+Pj0gMTsgZm51bSsrKTsKKwlzcHJpbnRmKGJ1ZiwgIkZFQVRVUkVfJWMlZCIsIGZjaGFyLCBmbnVtKTsKKwlyZXR1cm4gYnVmOworfQorCitpbnQgZTJwX3N0cmluZzJmZWF0dXJlKGNoYXIgKnN0cmluZywgaW50ICpjb21wYXRfdHlwZSwgdW5zaWduZWQgaW50ICptYXNrKQoreworCXN0cnVjdCBmZWF0dXJlICAqZjsKKwljaGFyCQkqZXB0cjsKKwlpbnQJCW51bTsKKworCWZvciAoZiA9IGZlYXR1cmVfbGlzdDsgZi0+c3RyaW5nOyBmKyspIHsKKwkJaWYgKCFzdHJjYXNlY21wKHN0cmluZywgZi0+c3RyaW5nKSkgeworCQkJKmNvbXBhdF90eXBlID0gZi0+Y29tcGF0OworCQkJKm1hc2sgPSBmLT5tYXNrOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJaWYgKHN0cm5jYXNlY21wKHN0cmluZywgIkZFQVRVUkVfIiwgOCkpCisJCXJldHVybiAxOworCisJc3dpdGNoIChzdHJpbmdbOF0pIHsKKwljYXNlICdjJzoKKwljYXNlICdDJzoKKwkJKmNvbXBhdF90eXBlID0gRTJQX0ZFQVRVUkVfQ09NUEFUOworCQlicmVhazsKKwljYXNlICdpJzoKKwljYXNlICdJJzoKKwkJKmNvbXBhdF90eXBlID0gRTJQX0ZFQVRVUkVfSU5DT01QQVQ7CisJCWJyZWFrOworCWNhc2UgJ3InOgorCWNhc2UgJ1InOgorCQkqY29tcGF0X3R5cGUgPSBFMlBfRkVBVFVSRV9ST19JTkNPTVBBVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJfQorCWlmIChzdHJpbmdbOV0gPT0gMCkKKwkJcmV0dXJuIDE7CisJbnVtID0gc3RydG9sKHN0cmluZys5LCAmZXB0ciwgMTApOworCWlmIChudW0gPiAzMiB8fCBudW0gPCAwKQorCQlyZXR1cm4gMTsKKwlpZiAoKmVwdHIpCisJCXJldHVybiAxOworCSptYXNrID0gMSA8PCBudW07CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIgKmUycF9qcm5sX2ZlYXR1cmUyc3RyaW5nKGludCBjb21wYXQsIHVuc2lnbmVkIGludCBtYXNrKQoreworCXN0cnVjdCBmZWF0dXJlICAqZjsKKwlzdGF0aWMgY2hhciBidWZbMjBdOworCWNoYXIJZmNoYXI7CisJaW50CWZudW07CisKKwlmb3IgKGYgPSBqcm5sX2ZlYXR1cmVfbGlzdDsgZi0+c3RyaW5nOyBmKyspIHsKKwkJaWYgKChjb21wYXQgPT0gZi0+Y29tcGF0KSAmJgorCQkgICAgKG1hc2sgPT0gZi0+bWFzaykpCisJCQlyZXR1cm4gZi0+c3RyaW5nOworCX0KKwlzd2l0Y2ggKGNvbXBhdCkgeworCWNhc2UgIEUyUF9GRUFUVVJFX0NPTVBBVDoKKwkJZmNoYXIgPSAnQyc7CisJCWJyZWFrOworCWNhc2UgRTJQX0ZFQVRVUkVfSU5DT01QQVQ6CisJCWZjaGFyID0gJ0knOworCQlicmVhazsKKwljYXNlIEUyUF9GRUFUVVJFX1JPX0lOQ09NUEFUOgorCQlmY2hhciA9ICdSJzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZmNoYXIgPSAnPyc7CisJCWJyZWFrOworCX0KKwlmb3IgKGZudW0gPSAwOyBtYXNrID4+PSAxOyBmbnVtKyspOworCXNwcmludGYoYnVmLCAiRkVBVFVSRV8lYyVkIiwgZmNoYXIsIGZudW0pOworCXJldHVybiBidWY7Cit9CisKK2ludCBlMnBfanJubF9zdHJpbmcyZmVhdHVyZShjaGFyICpzdHJpbmcsIGludCAqY29tcGF0X3R5cGUsIHVuc2lnbmVkIGludCAqbWFzaykKK3sKKwlzdHJ1Y3QgZmVhdHVyZSAgKmY7CisJY2hhcgkJKmVwdHI7CisJaW50CQludW07CisKKwlmb3IgKGYgPSBqcm5sX2ZlYXR1cmVfbGlzdDsgZi0+c3RyaW5nOyBmKyspIHsKKwkJaWYgKCFzdHJjYXNlY21wKHN0cmluZywgZi0+c3RyaW5nKSkgeworCQkJKmNvbXBhdF90eXBlID0gZi0+Y29tcGF0OworCQkJKm1hc2sgPSBmLT5tYXNrOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJaWYgKHN0cm5jYXNlY21wKHN0cmluZywgIkZFQVRVUkVfIiwgOCkpCisJCXJldHVybiAxOworCisJc3dpdGNoIChzdHJpbmdbOF0pIHsKKwljYXNlICdjJzoKKwljYXNlICdDJzoKKwkJKmNvbXBhdF90eXBlID0gRTJQX0ZFQVRVUkVfQ09NUEFUOworCQlicmVhazsKKwljYXNlICdpJzoKKwljYXNlICdJJzoKKwkJKmNvbXBhdF90eXBlID0gRTJQX0ZFQVRVUkVfSU5DT01QQVQ7CisJCWJyZWFrOworCWNhc2UgJ3InOgorCWNhc2UgJ1InOgorCQkqY29tcGF0X3R5cGUgPSBFMlBfRkVBVFVSRV9ST19JTkNPTVBBVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJfQorCWlmIChzdHJpbmdbOV0gPT0gMCkKKwkJcmV0dXJuIDE7CisJbnVtID0gc3RydG9sKHN0cmluZys5LCAmZXB0ciwgMTApOworCWlmIChudW0gPiAzMiB8fCBudW0gPCAwKQorCQlyZXR1cm4gMTsKKwlpZiAoKmVwdHIpCisJCXJldHVybiAxOworCSptYXNrID0gMSA8PCBudW07CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgY2hhciAqc2tpcF9vdmVyX2JsYW5rcyhjaGFyICpjcCkKK3sKKwl3aGlsZSAoKmNwICYmIGlzc3BhY2UoKmNwKSkKKwkJY3ArKzsKKwlyZXR1cm4gY3A7Cit9CisKK3N0YXRpYyBjaGFyICpza2lwX292ZXJfd29yZChjaGFyICpjcCkKK3sKKwl3aGlsZSAoKmNwICYmICFpc3NwYWNlKCpjcCkgJiYgKmNwICE9ICcsJykKKwkJY3ArKzsKKwlyZXR1cm4gY3A7Cit9CisKKy8qCisgKiBFZGl0IGEgZmVhdHVyZSBzZXQgYXJyYXkgYXMgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLiAgVGhlIG9rX2FycmF5LAorICogaWYgc2V0LCBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIGxpbWl0IHdoYXQgZmVhdHVyZXMgdGhlIHVzZXIgaXMKKyAqIGFsbG93ZWQgdG8gc2V0IG9yIGNsZWFyIHVzaW5nIHRoaXMgZnVuY3Rpb24uICBJZiBjbGVhcl9va19hcnJheSBpcyBzZXQsCisgKiB0aGVuIHVzZSBpdCB0ZWxsIHdoZXRoZXIgb3Igbm90IGl0IGlzIE9LIHRvIGNsZWFyIGEgZmlsZXN5c3RlbSBmZWF0dXJlLgorICovCitpbnQgZTJwX2VkaXRfZmVhdHVyZTIoY29uc3QgY2hhciAqc3RyLCBfX3UzMiAqY29tcGF0X2FycmF5LCBfX3UzMiAqb2tfYXJyYXksCisJCSAgICAgIF9fdTMyICpjbGVhcl9va19hcnJheSwgaW50ICp0eXBlX2VyciwKKwkJICAgICAgdW5zaWduZWQgaW50ICptYXNrX2VycikKK3sKKwljaGFyCQkqY3AsICpidWYsICpuZXh0OworCWludAkJbmVnOworCXVuc2lnbmVkIGludAltYXNrOworCWludAkJY29tcGF0X3R5cGU7CisJaW50CQlyYyA9IDA7CisKKwlpZiAoIWNsZWFyX29rX2FycmF5KQorCQljbGVhcl9va19hcnJheSA9IG9rX2FycmF5OworCisJaWYgKHR5cGVfZXJyKQorCQkqdHlwZV9lcnIgPSAwOworCWlmIChtYXNrX2VycikKKwkJKm1hc2tfZXJyID0gMDsKKworCWJ1ZiA9IG1hbGxvYyhzdHJsZW4oc3RyKSsxKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDE7CisJc3RyY3B5KGJ1Ziwgc3RyKTsKKwlmb3IgKGNwID0gYnVmOyBjcCAmJiAqY3A7IGNwID0gbmV4dCA/IG5leHQrMSA6IDApIHsKKwkJbmVnID0gMDsKKwkJY3AgPSBza2lwX292ZXJfYmxhbmtzKGNwKTsKKwkJbmV4dCA9IHNraXBfb3Zlcl93b3JkKGNwKTsKKworCQlpZiAoKm5leHQgPT0gMCkKKwkJCW5leHQgPSAwOworCQllbHNlCisJCQkqbmV4dCA9IDA7CisKKwkJaWYgKChzdHJjYXNlY21wKGNwLCAibm9uZSIpID09IDApIHx8CisJCSAgICAoc3RyY2FzZWNtcChjcCwgImNsZWFyIikgPT0gMCkpIHsKKwkJCWNvbXBhdF9hcnJheVswXSA9IDA7CisJCQljb21wYXRfYXJyYXlbMV0gPSAwOworCQkJY29tcGF0X2FycmF5WzJdID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3dpdGNoICgqY3ApIHsKKwkJY2FzZSAnLSc6CisJCWNhc2UgJ14nOgorCQkJbmVnKys7CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlICcrJzoKKwkJCWNwKys7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZTJwX3N0cmluZzJmZWF0dXJlKGNwLCAmY29tcGF0X3R5cGUsICZtYXNrKSkgeworCQkJcmMgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG5lZykgeworCQkJaWYgKGNsZWFyX29rX2FycmF5ICYmCisJCQkgICAgIShjbGVhcl9va19hcnJheVtjb21wYXRfdHlwZV0gJiBtYXNrKSkgeworCQkJCXJjID0gMTsKKwkJCQlpZiAodHlwZV9lcnIpCisJCQkJCSp0eXBlX2VyciA9IChjb21wYXRfdHlwZSB8CisJCQkJCQkgICAgIEUyUF9GRUFUVVJFX05FR0FURV9GTEFHKTsKKwkJCQlpZiAobWFza19lcnIpCisJCQkJCSptYXNrX2VyciA9IG1hc2s7CisJCQkJYnJlYWs7CisJCQl9CisJCQljb21wYXRfYXJyYXlbY29tcGF0X3R5cGVdICY9IH5tYXNrOworCQl9IGVsc2UgeworCQkJaWYgKG9rX2FycmF5ICYmICEob2tfYXJyYXlbY29tcGF0X3R5cGVdICYgbWFzaykpIHsKKwkJCQlyYyA9IDE7CisJCQkJaWYgKHR5cGVfZXJyKQorCQkJCQkqdHlwZV9lcnIgPSBjb21wYXRfdHlwZTsKKwkJCQlpZiAobWFza19lcnIpCisJCQkJCSptYXNrX2VyciA9IG1hc2s7CisJCQkJYnJlYWs7CisJCQl9CisJCQljb21wYXRfYXJyYXlbY29tcGF0X3R5cGVdIHw9IG1hc2s7CisJCX0KKwl9CisJZnJlZShidWYpOworCXJldHVybiByYzsKK30KKworaW50IGUycF9lZGl0X2ZlYXR1cmUoY29uc3QgY2hhciAqc3RyLCBfX3UzMiAqY29tcGF0X2FycmF5LCBfX3UzMiAqb2tfYXJyYXkpCit7CisJcmV0dXJuIGUycF9lZGl0X2ZlYXR1cmUyKHN0ciwgY29tcGF0X2FycmF5LCBva19hcnJheSwgMCwgMCwgMCk7Cit9CisKKyNpZmRlZiBURVNUX1BST0dSQU0KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgY29tcGF0LCBjb21wYXQyLCBpOworCXVuc2lnbmVkIGludCBtYXNrLCBtYXNrMjsKKwljb25zdCBjaGFyICpzdHI7CisJc3RydWN0IGZlYXR1cmUgKmY7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmIChpID09IDApIHsKKwkJCWYgPSBmZWF0dXJlX2xpc3Q7CisJCQlwcmludGYoIkZlYXR1cmUgbGlzdDpcbiIpOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCJcbkpvdXJuYWwgZmVhdHVyZSBsaXN0OlxuIik7CisJCQlmID0ganJubF9mZWF0dXJlX2xpc3Q7CisJCX0KKwkJZm9yICg7IGYtPnN0cmluZzsgZisrKSB7CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJZTJwX3N0cmluZzJmZWF0dXJlKChjaGFyICopZi0+c3RyaW5nLCAmY29tcGF0LAorCQkJCQkJICAgJm1hc2spOworCQkJCXN0ciA9IGUycF9mZWF0dXJlMnN0cmluZyhjb21wYXQsIG1hc2spOworCQkJfSBlbHNlIHsKKwkJCQllMnBfanJubF9zdHJpbmcyZmVhdHVyZSgoY2hhciAqKWYtPnN0cmluZywKKwkJCQkJCQkmY29tcGF0LCAmbWFzayk7CisJCQkJc3RyID0gZTJwX2pybmxfZmVhdHVyZTJzdHJpbmcoY29tcGF0LCBtYXNrKTsKKwkJCX0KKworCQkJcHJpbnRmKCJcdENvbXBhdCA9ICVkLCBNYXNrID0gJXUsICVzXG4iLAorCQkJICAgICAgIGNvbXBhdCwgbWFzaywgZi0+c3RyaW5nKTsKKwkJCWlmIChzdHJjbXAoZi0+c3RyaW5nLCBzdHIpKSB7CisJCQkJaWYgKGUycF9zdHJpbmcyZmVhdHVyZSgoY2hhciAqKSBzdHIsICZjb21wYXQyLAorCQkJCQkJICAgICAgICZtYXNrMikgfHwKKwkJCQkgICAgKGNvbXBhdDIgIT0gY29tcGF0KSB8fAorCQkJCSAgICAobWFzazIgIT0gbWFzaykpIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsICJGYWlsdXJlIVxuIik7CisJCQkJCWV4aXQoMSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWV4aXQoMCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9lMnAvZmdldGZsYWdzLmMgYi9saWIvZTJwL2ZnZXRmbGFncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZjg0NjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZTJwL2ZnZXRmbGFncy5jCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBmZ2V0ZmxhZ3MuYwkJLSBHZXQgYSBmaWxlIGZsYWdzIG9uIGFuIGV4dDIgZmlsZSBzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQgIFJlbXkgQ2FyZCA8Y2FyZEBtYXNpLmlicC5mcj4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFib3JhdG9pcmUgTUFTSSwgSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisvKgorICogSGlzdG9yeToKKyAqIDkzLzEwLzMwCS0gQ3JlYXRpb24KKyAqLworCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2lmIEhBVkVfRVhUMl9JT0NUTFMKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJlMnAuaCIKKworI2lmZGVmIE9fTEFSR0VGSUxFCisjZGVmaW5lIE9QRU5fRkxBR1MgKE9fUkRPTkxZfE9fTk9OQkxPQ0t8T19MQVJHRUZJTEUpCisjZWxzZQorI2RlZmluZSBPUEVOX0ZMQUdTIChPX1JET05MWXxPX05PTkJMT0NLKQorI2VuZGlmCisKK2ludCBmZ2V0ZmxhZ3MgKGNvbnN0IGNoYXIgKiBuYW1lLCB1bnNpZ25lZCBsb25nICogZmxhZ3MpCit7CisJc3RydWN0IHN0YXQgYnVmOworI2lmIEhBVkVfU1RBVF9GTEFHUyAmJiAhKEFQUExFX0RBUldJTiAmJiBIQVZFX0VYVDJfSU9DVExTKQorCisJaWYgKHN0YXQgKG5hbWUsICZidWYpID09IC0xKQorCQlyZXR1cm4gLTE7CisKKwkqZmxhZ3MgPSAwOworI2lmZGVmIFVGX0lNTVVUQUJMRQorCWlmIChidWYuc3RfZmxhZ3MgJiBVRl9JTU1VVEFCTEUpCisJCSpmbGFncyB8PSBFWFQyX0lNTVVUQUJMRV9GTDsKKyNlbmRpZgorI2lmZGVmIFVGX0FQUEVORAorCWlmIChidWYuc3RfZmxhZ3MgJiBVRl9BUFBFTkQpCisJCSpmbGFncyB8PSBFWFQyX0FQUEVORF9GTDsKKyNlbmRpZgorI2lmZGVmIFVGX05PRFVNUAorCWlmIChidWYuc3RfZmxhZ3MgJiBVRl9OT0RVTVApCisJCSpmbGFncyB8PSBFWFQyX05PRFVNUF9GTDsKKyNlbmRpZgorCisJcmV0dXJuIDA7CisjZWxzZSAvKiAhSEFWRV9TVEFUX0ZMQUdTIHx8IChBUFBMRV9EQVJXSU4gJiYgSEFWRV9FWFQyX0lPQ1RMUykgKi8KKyNpZiBIQVZFX0VYVDJfSU9DVExTCisJaW50IGZkLCByLCBmLCBzYXZlX2Vycm5vID0gMDsKKworCWlmICghbHN0YXQobmFtZSwgJmJ1ZikgJiYKKwkgICAgIVNfSVNSRUcoYnVmLnN0X21vZGUpICYmICFTX0lTRElSKGJ1Zi5zdF9tb2RlKSkgeworCQlnb3RvIG5vdHN1cHA7CisJfQorI2lmICFBUFBMRV9EQVJXSU4KKwlmZCA9IG9wZW4gKG5hbWUsIE9QRU5fRkxBR1MpOworCWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCXIgPSBpb2N0bCAoZmQsIEVYVDJfSU9DX0dFVEZMQUdTLCAmZik7CisJaWYgKHIgPT0gLTEpCisJCXNhdmVfZXJybm8gPSBlcnJubzsKKwkqZmxhZ3MgPSBmOworCWNsb3NlIChmZCk7CisJaWYgKHNhdmVfZXJybm8pCisJCWVycm5vID0gc2F2ZV9lcnJubzsKKwlyZXR1cm4gcjsKKyNlbHNlIC8qIEFQUExFX0RBUldJTiAqLworICAgZiA9IC0xOworICAgc2F2ZV9lcnJubyA9IHN5c2NhbGwoU1lTX2ZzY3RsLCBuYW1lLCBFWFQyX0lPQ19HRVRGTEFHUywgJmYsIDApOworICAgKmZsYWdzID0gZjsKKyAgIHJldHVybiAoc2F2ZV9lcnJubyk7CisjZW5kaWYgLyogIUFQUExFX0RBUldJTiAqLworbm90c3VwcDoKKyNlbmRpZiAvKiBIQVZFX0VYVDJfSU9DVExTICovCisjZW5kaWYKKwllcnJubyA9IEVPUE5PVFNVUFA7CisJcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvbGliL2UycC9mZ2V0dmVyc2lvbi5jIGIvbGliL2UycC9mZ2V0dmVyc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2Y2VlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZTJwL2ZnZXR2ZXJzaW9uLmMKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIGZnZXR2ZXJzaW9uLmMJLSBHZXQgYSBmaWxlIHZlcnNpb24gb24gYW4gZXh0MiBmaWxlIHN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKy8qCisgKiBIaXN0b3J5OgorICogOTMvMTAvMzAJLSBDcmVhdGlvbgorICovCisKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisKKyNpbmNsdWRlICJlMnAuaCIKKworI2lmZGVmIE9fTEFSR0VGSUxFCisjZGVmaW5lIE9QRU5fRkxBR1MgKE9fUkRPTkxZfE9fTk9OQkxPQ0t8T19MQVJHRUZJTEUpCisjZWxzZQorI2RlZmluZSBPUEVOX0ZMQUdTIChPX1JET05MWXxPX05PTkJMT0NLKQorI2VuZGlmCisKK2ludCBmZ2V0dmVyc2lvbiAoY29uc3QgY2hhciAqIG5hbWUsIHVuc2lnbmVkIGxvbmcgKiB2ZXJzaW9uKQoreworI2lmIEhBVkVfRVhUMl9JT0NUTFMKKyNpZiAhQVBQTEVfREFSV0lOCisJaW50IGZkLCByLCB2ZXIsIHNhdmVfZXJybm8gPSAwOworCisJZmQgPSBvcGVuIChuYW1lLCBPUEVOX0ZMQUdTKTsKKwlpZiAoZmQgPT0gLTEpCisJCXJldHVybiAtMTsKKwlyID0gaW9jdGwgKGZkLCBFWFQyX0lPQ19HRVRWRVJTSU9OLCAmdmVyKTsKKwlpZiAociA9PSAtMSkKKwkJc2F2ZV9lcnJubyA9IGVycm5vOworCSp2ZXJzaW9uID0gdmVyOworCWNsb3NlIChmZCk7CisJaWYgKHNhdmVfZXJybm8pCisJCWVycm5vID0gc2F2ZV9lcnJubzsKKwlyZXR1cm4gcjsKKyNlbHNlCisgICBpbnQgdmVyPS0xLCBlcnI7CisgICBlcnIgPSBzeXNjYWxsKFNZU19mc2N0bCwgbmFtZSwgRVhUMl9JT0NfR0VUVkVSU0lPTiwgJnZlciwgMCk7CisgICAqdmVyc2lvbiA9IHZlcjsKKyAgIHJldHVybihlcnIpOworI2VuZGlmCisjZWxzZSAvKiAhIEhBVkVfRVhUMl9JT0NUTFMgKi8KKwlleHRlcm4gaW50IGVycm5vOworCWVycm5vID0gRU9QTk9UU1VQUDsKKwlyZXR1cm4gLTE7CisjZW5kaWYgLyogISBIQVZFX0VYVDJfSU9DVExTICovCit9CmRpZmYgLS1naXQgYS9saWIvZTJwL2ZzZXRmbGFncy5jIGIvbGliL2UycC9mc2V0ZmxhZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjdkMTZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2UycC9mc2V0ZmxhZ3MuYwpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIGZzZXRmbGFncy5jCQktIFNldCBhIGZpbGUgZmxhZ3Mgb24gYW4gZXh0MiBmaWxlIHN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKy8qCisgKiBIaXN0b3J5OgorICogOTMvMTAvMzAJLSBDcmVhdGlvbgorICovCisKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaWYgSEFWRV9FWFQyX0lPQ1RMUworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImUycC5oIgorCisvKgorICogRGVhbCB3aXRoIGxhbWUgZ2xpYmMncyB0aGF0IGRlZmluZSB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgYWN0dWFsbHkKKyAqIGltcGxlbWVudGluZyBpdC4gIENhbiB5b3Ugc2F5ICJhdHRyYWN0aXZlIG51aXNhbmNlIiwgYm95cyBhbmQgZ2lybHM/CisgKiBJIGtuZXcgeW91IGNvdWxkIQorICovCisjaWZkZWYgX19saW51eF9fCisjdW5kZWYgSEFWRV9DSEZMQUdTCisjZW5kaWYKKworI2lmZGVmIE9fTEFSR0VGSUxFCisjZGVmaW5lIE9QRU5fRkxBR1MgKE9fUkRPTkxZfE9fTk9OQkxPQ0t8T19MQVJHRUZJTEUpCisjZWxzZQorI2RlZmluZSBPUEVOX0ZMQUdTIChPX1JET05MWXxPX05PTkJMT0NLKQorI2VuZGlmCisKK2ludCBmc2V0ZmxhZ3MgKGNvbnN0IGNoYXIgKiBuYW1lLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworI2lmIEhBVkVfQ0hGTEFHUyAmJiAhKEFQUExFX0RBUldJTiAmJiBIQVZFX0VYVDJfSU9DVExTKQorCXVuc2lnbmVkIGxvbmcgYnNkX2ZsYWdzID0gMDsKKworI2lmZGVmIFVGX0lNTVVUQUJMRQorCWlmIChmbGFncyAmIEVYVDJfSU1NVVRBQkxFX0ZMKQorCQlic2RfZmxhZ3MgfD0gVUZfSU1NVVRBQkxFOworI2VuZGlmCisjaWZkZWYgVUZfQVBQRU5ECisJaWYgKGZsYWdzICYgRVhUMl9BUFBFTkRfRkwpCisJCWJzZF9mbGFncyB8PSBVRl9BUFBFTkQ7CisjZW5kaWYKKyNpZmRlZiBVRl9OT0RVTVAKKwlpZiAoZmxhZ3MgJiBFWFQyX05PRFVNUF9GTCkKKwkJYnNkX2ZsYWdzIHw9IFVGX05PRFVNUDsKKyNlbmRpZgorCisJcmV0dXJuIGNoZmxhZ3MgKG5hbWUsIGJzZF9mbGFncyk7CisjZWxzZSAvKiAhSEFWRV9DSEZMQUdTIHx8IChBUFBMRV9EQVJXSU4gJiYgSEFWRV9FWFQyX0lPQ1RMUykgKi8KKyNpZiBIQVZFX0VYVDJfSU9DVExTCisJaW50IGZkLCByLCBmLCBzYXZlX2Vycm5vID0gMDsKKwlzdHJ1Y3Qgc3RhdCBidWY7CisKKwlpZiAoIWxzdGF0KG5hbWUsICZidWYpICYmCisJICAgICFTX0lTUkVHKGJ1Zi5zdF9tb2RlKSAmJiAhU19JU0RJUihidWYuc3RfbW9kZSkpIHsKKwkJZ290byBub3RzdXBwOworCX0KKyNpZiAhQVBQTEVfREFSV0lOCisJZmQgPSBvcGVuIChuYW1lLCBPUEVOX0ZMQUdTKTsKKwlpZiAoZmQgPT0gLTEpCisJCXJldHVybiAtMTsKKwlmID0gKGludCkgZmxhZ3M7CisJciA9IGlvY3RsIChmZCwgRVhUMl9JT0NfU0VURkxBR1MsICZmKTsKKwlpZiAociA9PSAtMSkKKwkJc2F2ZV9lcnJubyA9IGVycm5vOworCWNsb3NlIChmZCk7CisJaWYgKHNhdmVfZXJybm8pCisJCWVycm5vID0gc2F2ZV9lcnJubzsKKyNlbHNlIC8qIEFQUExFX0RBUldJTiAqLworCWYgPSAoaW50KSBmbGFnczsKKwlyZXR1cm4gc3lzY2FsbChTWVNfZnNjdGwsIG5hbWUsIEVYVDJfSU9DX1NFVEZMQUdTLCAmZiwgMCk7CisjZW5kaWYgLyogIUFQUExFX0RBUldJTiAqLworCXJldHVybiByOworCitub3RzdXBwOgorI2VuZGlmIC8qIEhBVkVfRVhUMl9JT0NUTFMgKi8KKyNlbmRpZgorCWVycm5vID0gRU9QTk9UU1VQUDsKKwlyZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9saWIvZTJwL2ZzZXR2ZXJzaW9uLmMgYi9saWIvZTJwL2ZzZXR2ZXJzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxZDU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lMnAvZnNldHZlcnNpb24uYwpAQCAtMCwwICsxLDY2IEBACisvKgorICogZnNldHZlcnNpb24uYwktIFNldCBhIGZpbGUgdmVyc2lvbiBvbiBhbiBleHQyIGZpbGUgc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0ICBSZW15IENhcmQgPGNhcmRAbWFzaS5pYnAuZnI+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYm9yYXRvaXJlIE1BU0ksIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqIEhpc3Rvcnk6CisgKiA5My8xMC8zMAktIENyZWF0aW9uCisgKi8KKworI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRQorI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworI2luY2x1ZGUgImUycC5oIgorCisjaWZkZWYgT19MQVJHRUZJTEUKKyNkZWZpbmUgT1BFTl9GTEFHUyAoT19SRE9OTFl8T19OT05CTE9DS3xPX0xBUkdFRklMRSkKKyNlbHNlCisjZGVmaW5lIE9QRU5fRkxBR1MgKE9fUkRPTkxZfE9fTk9OQkxPQ0spCisjZW5kaWYKKworaW50IGZzZXR2ZXJzaW9uIChjb25zdCBjaGFyICogbmFtZSwgdW5zaWduZWQgbG9uZyB2ZXJzaW9uKQoreworI2lmIEhBVkVfRVhUMl9JT0NUTFMKKyNpZiAhQVBQTEVfREFSV0lOCisJaW50IGZkLCByLCB2ZXIsIHNhdmVfZXJybm8gPSAwOworCisJZmQgPSBvcGVuIChuYW1lLCBPUEVOX0ZMQUdTKTsKKwlpZiAoZmQgPT0gLTEpCisJCXJldHVybiAtMTsKKwl2ZXIgPSAoaW50KSB2ZXJzaW9uOworCXIgPSBpb2N0bCAoZmQsIEVYVDJfSU9DX1NFVFZFUlNJT04sICZ2ZXIpOworCWlmIChyID09IC0xKQorCQlzYXZlX2Vycm5vID0gZXJybm87CisJY2xvc2UgKGZkKTsKKwlpZiAoc2F2ZV9lcnJubykKKwkJZXJybm8gPSBzYXZlX2Vycm5vOworCXJldHVybiByOworI2Vsc2UKKyAgIGludCB2ZXIgPSAoaW50KXZlcnNpb247CisgICByZXR1cm4gc3lzY2FsbChTWVNfZnNjdGwsIG5hbWUsIEVYVDJfSU9DX1NFVFZFUlNJT04sICZ2ZXIsIDApOworI2VuZGlmCisjZWxzZSAvKiAhIEhBVkVfRVhUMl9JT0NUTFMgKi8KKwlleHRlcm4gaW50IGVycm5vOworCWVycm5vID0gRU9QTk9UU1VQUDsKKwlyZXR1cm4gLTE7CisjZW5kaWYgLyogISBIQVZFX0VYVDJfSU9DVExTICovCit9CmRpZmYgLS1naXQgYS9saWIvZTJwL2dldGZsYWdzLmMgYi9saWIvZTJwL2dldGZsYWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRlMmFkNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lMnAvZ2V0ZmxhZ3MuYwpAQCAtMCwwICsxLDcwIEBACisvKgorICogZ2V0ZmxhZ3MuYwkJLSBHZXQgYSBmaWxlIGZsYWdzIG9uIGFuIGV4dDIgZmlsZSBzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQgIFJlbXkgQ2FyZCA8Y2FyZEBtYXNpLmlicC5mcj4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFib3JhdG9pcmUgTUFTSSwgSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisvKgorICogSGlzdG9yeToKKyAqIDkzLzEwLzMwCS0gQ3JlYXRpb24KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaWYgSEFWRV9FWFQyX0lPQ1RMUworI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJlMnAuaCIKKworaW50IGdldGZsYWdzIChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgKiBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RhdCBidWY7CisjaWYgSEFWRV9TVEFUX0ZMQUdTCisKKwlpZiAoZnN0YXQgKGZkLCAmYnVmKSA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJKmZsYWdzID0gMDsKKyNpZmRlZiBVRl9JTU1VVEFCTEUKKwlpZiAoYnVmLnN0X2ZsYWdzICYgVUZfSU1NVVRBQkxFKQorCQkqZmxhZ3MgfD0gRVhUMl9JTU1VVEFCTEVfRkw7CisjZW5kaWYKKyNpZmRlZiBVRl9BUFBFTkQKKwlpZiAoYnVmLnN0X2ZsYWdzICYgVUZfQVBQRU5EKQorCQkqZmxhZ3MgfD0gRVhUMl9BUFBFTkRfRkw7CisjZW5kaWYKKyNpZmRlZiBVRl9OT0RVTVAKKwlpZiAoYnVmLnN0X2ZsYWdzICYgVUZfTk9EVU1QKQorCQkqZmxhZ3MgfD0gRVhUMl9OT0RVTVBfRkw7CisjZW5kaWYKKworCXJldHVybiAwOworI2Vsc2UKKyNpZiBIQVZFX0VYVDJfSU9DVExTCisJaW50IHIsIGY7CisKKwlpZiAoIWZzdGF0KGZkLCAmYnVmKSAmJgorCSAgICAhU19JU1JFRyhidWYuc3RfbW9kZSkgJiYgIVNfSVNESVIoYnVmLnN0X21vZGUpKQorCQlnb3RvIG5vdHN1cHA7CisJciA9IGlvY3RsKGZkLCBFWFQyX0lPQ19HRVRGTEFHUywgJmYpOworCSpmbGFncyA9IGY7CisKKwlyZXR1cm4gcjsKK25vdHN1cHA6CisjZW5kaWYgLyogSEFWRV9FWFQyX0lPQ1RMUyAqLworI2VuZGlmCisJZXJybm8gPSBFT1BOT1RTVVBQOworCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2xpYi9lMnAvZ2V0dmVyc2lvbi5jIGIvbGliL2UycC9nZXR2ZXJzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEwMzFmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lMnAvZ2V0dmVyc2lvbi5jCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBnZXR2ZXJzaW9uLmMJCS0gR2V0IGEgZmlsZSB2ZXJzaW9uIG9uIGFuIGV4dDIgZmlsZSBzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQgIFJlbXkgQ2FyZCA8Y2FyZEBtYXNpLmlicC5mcj4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFib3JhdG9pcmUgTUFTSSwgSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisvKgorICogSGlzdG9yeToKKyAqIDkzLzEwLzMwCS0gQ3JlYXRpb24KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisjaW5jbHVkZSAiZTJwLmgiCisKK2ludCBnZXR2ZXJzaW9uIChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgKiB2ZXJzaW9uKQoreworI2lmIEhBVkVfRVhUMl9JT0NUTFMKKwlpbnQJciwgdmVyOworCisJciA9IGlvY3RsIChmZCwgRVhUMl9JT0NfR0VUVkVSU0lPTiwgJnZlcik7CisJKnZlcnNpb24gPSB2ZXI7CisJcmV0dXJuIHI7CisjZWxzZSAvKiAhIEhBVkVfRVhUMl9JT0NUTFMgKi8KKwlleHRlcm4gaW50IGVycm5vOworCWVycm5vID0gRU9QTk9UU1VQUDsKKwlyZXR1cm4gLTE7CisjZW5kaWYgLyogISBIQVZFX0VYVDJfSU9DVExTICovCit9CmRpZmYgLS1naXQgYS9saWIvZTJwL2hhc2hzdHIuYyBiL2xpYi9lMnAvaGFzaHN0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Mzc1OGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZTJwL2hhc2hzdHIuYwpAQCAtMCwwICsxLDcyIEBACisvKgorICogZmVhdHVyZS5jIC0tLSBjb252ZXJ0IGJldHdlZW4gZmVhdHVyZXMgYW5kIHN0cmluZ3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgIFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJlMnAuaCIKKworc3RydWN0IGhhc2ggeworCWludAkJbnVtOworCWNvbnN0IGNoYXIJKnN0cmluZzsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGFzaCBoYXNoX2xpc3RbXSA9IHsKKwl7CUVYVDJfSEFTSF9MRUdBQ1ksIAkibGVnYWN5IiB9LAorCXsJRVhUMl9IQVNIX0hBTEZfTUQ0LCAJImhhbGZfbWQ0IiB9LAorCXsJRVhUMl9IQVNIX1RFQSwgCQkidGVhIiB9LAorCXsJMCwgMCB9LAorfTsKKworY29uc3QgY2hhciAqZTJwX2hhc2gyc3RyaW5nKGludCBudW0pCit7CisJc3RydWN0IGhhc2ggICpwOworCXN0YXRpYyBjaGFyIGJ1ZlsyMF07CisKKwlmb3IgKHAgPSBoYXNoX2xpc3Q7IHAtPnN0cmluZzsgcCsrKSB7CisJCWlmIChudW0gPT0gcC0+bnVtKQorCQkJcmV0dXJuIHAtPnN0cmluZzsKKwl9CisJc3ByaW50ZihidWYsICJIQVNIQUxHXyVkIiwgbnVtKTsKKwlyZXR1cm4gYnVmOworfQorCisvKgorICogUmV0dXJucyB0aGUgaGFzaCBhbGdvcml0aG0sIG9yIC0xIG9uIGVycm9yCisgKi8KK2ludCBlMnBfc3RyaW5nMmhhc2goY2hhciAqc3RyaW5nKQoreworCXN0cnVjdCBoYXNoCSpwOworCWNoYXIJCSplcHRyOworCWludAkJbnVtOworCisJZm9yIChwID0gaGFzaF9saXN0OyBwLT5zdHJpbmc7IHArKykgeworCQlpZiAoIXN0cmNhc2VjbXAoc3RyaW5nLCBwLT5zdHJpbmcpKSB7CisJCQlyZXR1cm4gcC0+bnVtOworCQl9CisJfQorCWlmIChzdHJuY2FzZWNtcChzdHJpbmcsICJIQVNIQUxHXyIsIDgpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoc3RyaW5nWzhdID09IDApCisJCXJldHVybiAtMTsKKwludW0gPSBzdHJ0b2woc3RyaW5nKzgsICZlcHRyLCAxMCk7CisJaWYgKG51bSA+IDI1NSB8fCBudW0gPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKCplcHRyKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIG51bTsKK30KKwpkaWZmIC0tZ2l0IGEvbGliL2UycC9pb2QuYyBiL2xpYi9lMnAvaW9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwMzBkZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lMnAvaW9kLmMKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIGlvZC5jCQktIEl0ZXJhdGUgYSBmdW5jdGlvbiBvbiBlYWNoIGVudHJ5IG9mIGEgZGlyZWN0b3J5CisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0ICBSZW15IENhcmQgPGNhcmRAbWFzaS5pYnAuZnI+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYm9yYXRvaXJlIE1BU0ksIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqIEhpc3Rvcnk6CisgKiA5My8xMC8zMAktIENyZWF0aW9uCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImUycC5oIgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitpbnQgaXRlcmF0ZV9vbl9kaXIgKGNvbnN0IGNoYXIgKiBkaXJfbmFtZSwKKwkJICAgIGludCAoKmZ1bmMpIChjb25zdCBjaGFyICosIHN0cnVjdCBkaXJlbnQgKiwgdm9pZCAqKSwKKwkJICAgIHZvaWQgKiBwcml2YXRlKQoreworCURJUiAqIGRpcjsKKwlzdHJ1Y3QgZGlyZW50ICpkZSwgKmRlcDsKKwlpbnQJbWF4X2xlbiA9IC0xLCBsZW4sIHJldCA9IDA7CisKKyNpZiBIQVZFX1BBVEhDT05GICYmIGRlZmluZWQoX1BDX05BTUVfTUFYKQorCW1heF9sZW4gPSBwYXRoY29uZihkaXJfbmFtZSwgX1BDX05BTUVfTUFYKTsKKyNlbmRpZgorCWlmIChtYXhfbGVuID09IC0xKSB7CisjaWZkZWYgX1BPU0lYX05BTUVfTUFYCisJCW1heF9sZW4gPSBfUE9TSVhfTkFNRV9NQVg7CisjZWxzZQorI2lmZGVmIE5BTUVfTUFYCisJCW1heF9sZW4gPSBOQU1FX01BWDsKKyNlbHNlCisJCW1heF9sZW4gPSAyNTY7CisjZW5kaWYgLyogTkFNRV9NQVggKi8KKyNlbmRpZiAvKiBfUE9TSVhfTkFNRV9NQVggKi8KKwl9CisJbWF4X2xlbiArPSBzaXplb2Yoc3RydWN0IGRpcmVudCk7CisKKwlkZSA9IG1hbGxvYyhtYXhfbGVuKzEpOworCWlmICghZGUpCisJCXJldHVybiAtMTsKKwltZW1zZXQoZGUsIDAsIG1heF9sZW4rMSk7CisKKwlkaXIgPSBvcGVuZGlyIChkaXJfbmFtZSk7CisJaWYgKGRpciA9PSBOVUxMKSB7CisJCWZyZWUoZGUpOworCQlyZXR1cm4gLTE7CisJfQorCXdoaWxlICgoZGVwID0gcmVhZGRpciAoZGlyKSkpIHsKKyNpZmRlZiBIQVZFX1JFQ0xFTl9ESVJFTlQKKwkJbGVuID0gZGVwLT5kX3JlY2xlbjsKKwkJaWYgKGxlbiA+IG1heF9sZW4pCisJCQlsZW4gPSBtYXhfbGVuOworI2Vsc2UKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCBkaXJlbnQpOworI2VuZGlmCisJCW1lbWNweShkZSwgZGVwLCBsZW4pOworCQlpZiAoKCpmdW5jKShkaXJfbmFtZSwgZGUsIHByaXZhdGUpKQorCQkJcmV0Kys7CisJfQorCWZyZWUoZGUpOworCWNsb3NlZGlyKGRpcik7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYi9lMnAvbHMuYyBiL2xpYi9lMnAvbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Zjc0MWMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2UycC9scy5jCkBAIC0wLDAgKzEsNDQzIEBACisvKgorICogbHMuYwkJCS0gTGlzdCB0aGUgY29udGVudHMgb2YgYW4gZXh0MmZzIHN1cGVyYmxvY2sKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQgIFJlbXkgQ2FyZCA8Y2FyZEBtYXNpLmlicC5mcj4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFib3JhdG9pcmUgTUFTSSwgSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3ICBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSAiZTJwLmgiCisKK3N0YXRpYyB2b2lkIHByaW50X3VzZXIgKHVuc2lnbmVkIHNob3J0IHVpZCwgRklMRSAqZikKK3sKKwlzdHJ1Y3QgcGFzc3dkICpwdzsKKworCWZwcmludGYoZiwgIiV1ICIsIHVpZCk7CisJcHcgPSBnZXRwd3VpZCAodWlkKTsKKwlpZiAocHcgPT0gTlVMTCkKKwkJZnByaW50ZihmLCAiKHVzZXIgdW5rbm93bilcbiIpOworCWVsc2UKKwkJZnByaW50ZihmLCAiKHVzZXIgJXMpXG4iLCBwdy0+cHdfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2dyb3VwICh1bnNpZ25lZCBzaG9ydCBnaWQsIEZJTEUgKmYpCit7CisJc3RydWN0IGdyb3VwICpncjsKKworCWZwcmludGYoZiwgIiV1ICIsIGdpZCk7CisJZ3IgPSBnZXRncmdpZCAoZ2lkKTsKKwlpZiAoZ3IgPT0gTlVMTCkKKwkJZnByaW50ZihmLCAiKGdyb3VwIHVua25vd24pXG4iKTsKKwllbHNlCisJCWZwcmludGYoZiwgIihncm91cCAlcylcbiIsIGdyLT5ncl9uYW1lKTsKK30KKworI2RlZmluZSBNT05USF9JTlQgKDg2NDAwICogMzApCisjZGVmaW5lIFdFRUtfSU5UICg4NjQwMCAqIDcpCisjZGVmaW5lIERBWV9JTlQJKDg2NDAwKQorI2RlZmluZSBIT1VSX0lOVCAoNjAgKiA2MCkKKyNkZWZpbmUgTUlOVVRFX0lOVCAoNjApCisKK3N0YXRpYyBjb25zdCBjaGFyICppbnRlcnZhbF9zdHJpbmcodW5zaWduZWQgaW50IHNlY3MpCit7CisJc3RhdGljIGNoYXIgYnVmWzI1Nl0sIHRtcFs4MF07CisJaW50CQlociwgbWluLCBudW07CisKKwlidWZbMF0gPSAwOworCisJaWYgKHNlY3MgPT0gMCkKKwkJcmV0dXJuICI8bm9uZT4iOworCisJaWYgKHNlY3MgPj0gTU9OVEhfSU5UKSB7CisJCW51bSA9IHNlY3MgLyBNT05USF9JTlQ7CisJCXNlY3MgLT0gbnVtKk1PTlRIX0lOVDsKKwkJc3ByaW50ZihidWYsICIlZCBtb250aCVzIiwgbnVtLCAobnVtPjEpID8gInMiIDogIiIpOworCX0KKwlpZiAoc2VjcyA+PSBXRUVLX0lOVCkgeworCQludW0gPSBzZWNzIC8gV0VFS19JTlQ7CisJCXNlY3MgLT0gbnVtKldFRUtfSU5UOworCQlzcHJpbnRmKHRtcCwgIiVzJWQgd2VlayVzIiwgYnVmWzBdID8gIiwgIiA6ICIiLAorCQkJbnVtLCAobnVtPjEpID8gInMiIDogIiIpOworCQlzdHJjYXQoYnVmLCB0bXApOworCX0KKwlpZiAoc2VjcyA+PSBEQVlfSU5UKSB7CisJCW51bSA9IHNlY3MgLyBEQVlfSU5UOworCQlzZWNzIC09IG51bSpEQVlfSU5UOworCQlzcHJpbnRmKHRtcCwgIiVzJWQgZGF5JXMiLCBidWZbMF0gPyAiLCAiIDogIiIsCisJCQludW0sIChudW0+MSkgPyAicyIgOiAiIik7CisJCXN0cmNhdChidWYsIHRtcCk7CisJfQorCWlmIChzZWNzID4gMCkgeworCQlociA9IHNlY3MgLyBIT1VSX0lOVDsKKwkJc2VjcyAtPSBocipIT1VSX0lOVDsKKwkJbWluID0gc2VjcyAvIE1JTlVURV9JTlQ7CisJCXNlY3MgLT0gbWluKk1JTlVURV9JTlQ7CisJCXNwcmludGYodG1wLCAiJXMlZDolMDJkOiUwMmQiLCBidWZbMF0gPyAiLCAiIDogIiIsCisJCQlociwgbWluLCBzZWNzKTsKKwkJc3RyY2F0KGJ1ZiwgdG1wKTsKKwl9CisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZmVhdHVyZXMoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKiBzLCBGSUxFICpmKQoreworI2lmZGVmIEVYVDJfRFlOQU1JQ19SRVYKKwlpbnQJaSwgaiwgcHJpbnRlZD0wOworCV9fdTMyCSptYXNrID0gJnMtPnNfZmVhdHVyZV9jb21wYXQsIG07CisKKwlmcHJpbnRmKGYsICJGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIik7CisJZm9yIChpPTA7IGkgPDM7IGkrKyxtYXNrKyspIHsKKwkJZm9yIChqPTAsbT0xOyBqIDwgMzI7IGorKywgbTw8PTEpIHsKKwkJCWlmICgqbWFzayAmIG0pIHsKKwkJCQlmcHJpbnRmKGYsICIgJXMiLCBlMnBfZmVhdHVyZTJzdHJpbmcoaSwgbSkpOworCQkJCXByaW50ZWQrKzsKKwkJCX0KKwkJfQorCX0KKwlpZiAocHJpbnRlZCA9PSAwKQorCQlmcHJpbnRmKGYsICIgKG5vbmUpIik7CisJZnByaW50ZihmLCAiXG4iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBwcmludF9tbnRvcHRzKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICogcywgRklMRSAqZikKK3sKKyNpZmRlZiBFWFQyX0RZTkFNSUNfUkVWCisJaW50CWksIHByaW50ZWQ9MDsKKwlfX3UzMgltYXNrID0gcy0+c19kZWZhdWx0X21vdW50X29wdHMsIG07CisKKwlmcHJpbnRmKGYsICJEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIik7CisJaWYgKG1hc2sgJiBFWFQzX0RFRk1fSk1PREUpIHsKKwkJZnByaW50ZihmLCAiICVzIiwgZTJwX21udG9wdDJzdHJpbmcobWFzayAmIEVYVDNfREVGTV9KTU9ERSkpOworCQlwcmludGVkKys7CisJfQorCWZvciAoaT0wLG09MTsgaSA8IDMyOyBpKyssIG08PD0xKSB7CisJCWlmIChtICYgRVhUM19ERUZNX0pNT0RFKQorCQkJY29udGludWU7CisJCWlmIChtYXNrICYgbSkgeworCQkJZnByaW50ZihmLCAiICVzIiwgZTJwX21udG9wdDJzdHJpbmcobSkpOworCQkJcHJpbnRlZCsrOworCQl9CisJfQorCWlmIChwcmludGVkID09IDApCisJCWZwcmludGYoZiwgIiAobm9uZSkiKTsKKwlmcHJpbnRmKGYsICJcbiIpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHByaW50X3N1cGVyX2ZsYWdzKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICogcywgRklMRSAqZikKK3sKKwlpbnQJZmxhZ3NfZm91bmQgPSAwOworCisJaWYgKHMtPnNfZmxhZ3MgPT0gMCkKKwkJcmV0dXJuOworCisJZnB1dHMoIkZpbGVzeXN0ZW0gZmxhZ3M6ICAgICAgICAgIiwgZik7CisJaWYgKHMtPnNfZmxhZ3MgJiBFWFQyX0ZMQUdTX1NJR05FRF9IQVNIKSB7CisJCWZwdXRzKCJzaWduZWRfZGlyZWN0b3J5X2hhc2ggIiwgZik7CisJCWZsYWdzX2ZvdW5kKys7CisJfQorCWlmIChzLT5zX2ZsYWdzICYgRVhUMl9GTEFHU19VTlNJR05FRF9IQVNIKSB7CisJCWZwdXRzKCJ1bnNpZ25lZF9kaXJlY3RvcnlfaGFzaCAiLCBmKTsKKwkJZmxhZ3NfZm91bmQrKzsKKwl9CisJaWYgKHMtPnNfZmxhZ3MgJiBFWFQyX0ZMQUdTX1RFU1RfRklMRVNZUykgeworCQlmcHV0cygidGVzdF9maWxlc3lzdGVtICIsIGYpOworCQlmbGFnc19mb3VuZCsrOworCX0KKwlpZiAoZmxhZ3NfZm91bmQpCisJCWZwdXRzKCJcbiIsIGYpOworCWVsc2UKKwkJZnB1dHMoIihub25lKVxuIiwgZik7Cit9CisKK3N0YXRpYyBfX3U2NCBlMnBfYmxvY2tzX2NvdW50KHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcikKK3sKKwlyZXR1cm4gc3VwZXItPnNfYmxvY2tzX2NvdW50IHwKKwkJKHN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQgPworCQkoX191NjQpIHN1cGVyLT5zX2Jsb2Nrc19jb3VudF9oaSA8PCAzMiA6IDApOworfQorCitzdGF0aWMgX191NjQgZTJwX3JfYmxvY2tzX2NvdW50KHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcikKK3sKKwlyZXR1cm4gc3VwZXItPnNfcl9ibG9ja3NfY291bnQgfAorCQkoc3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCA/CisJCShfX3U2NCkgc3VwZXItPnNfcl9ibG9ja3NfY291bnRfaGkgPDwgMzIgOiAwKTsKK30KKworc3RhdGljIF9fdTY0IGUycF9mcmVlX2Jsb2Nrc19jb3VudChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXIpCit7CisJcmV0dXJuIHN1cGVyLT5zX2ZyZWVfYmxvY2tzX2NvdW50IHwKKwkJKHN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQgPworCQkoX191NjQpIHN1cGVyLT5zX2ZyZWVfYmxvY2tzX2hpIDw8IDMyIDogMCk7Cit9CisKKyNpZm5kZWYgRVhUMl9JTk9ERV9TSVpFCisjZGVmaW5lIEVYVDJfSU5PREVfU0laRShzKSBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpCisjZW5kaWYKKworI2lmbmRlZiBFWFQyX0dPT0RfT0xEX1JFVgorI2RlZmluZSBFWFQyX0dPT0RfT0xEX1JFViAwCisjZW5kaWYKKwordm9pZCBsaXN0X3N1cGVyMihzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqIHNiLCBGSUxFICpmKQoreworCWludCBpbm9kZV9ibG9ja3NfcGVyX2dyb3VwOworCWNoYXIgYnVmWzgwXSwgKnN0cjsKKwl0aW1lX3QJdG07CisKKwlpbm9kZV9ibG9ja3NfcGVyX2dyb3VwID0gKCgoc2ItPnNfaW5vZGVzX3Blcl9ncm91cCAqCisJCQkJICAgIEVYVDJfSU5PREVfU0laRShzYikpICsKKwkJCQkgICBFWFQyX0JMT0NLX1NJWkUoc2IpIC0gMSkgLworCQkJCSAgRVhUMl9CTE9DS19TSVpFKHNiKSk7CisJaWYgKHNiLT5zX3ZvbHVtZV9uYW1lWzBdKSB7CisJCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwkJc3RybmNweShidWYsIHNiLT5zX3ZvbHVtZV9uYW1lLCBzaXplb2Yoc2ItPnNfdm9sdW1lX25hbWUpKTsKKwl9IGVsc2UKKwkJc3RyY3B5KGJ1ZiwgIjxub25lPiIpOworCWZwcmludGYoZiwgIkZpbGVzeXN0ZW0gdm9sdW1lIG5hbWU6ICAgJXNcbiIsIGJ1Zik7CisJaWYgKHNiLT5zX2xhc3RfbW91bnRlZFswXSkgeworCQltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJCXN0cm5jcHkoYnVmLCBzYi0+c19sYXN0X21vdW50ZWQsIHNpemVvZihzYi0+c19sYXN0X21vdW50ZWQpKTsKKwl9IGVsc2UKKwkJc3RyY3B5KGJ1ZiwgIjxub3QgYXZhaWxhYmxlPiIpOworCWZwcmludGYoZiwgIkxhc3QgbW91bnRlZCBvbjogICAgICAgICAgJXNcbiIsIGJ1Zik7CisJZnByaW50ZihmLCAiRmlsZXN5c3RlbSBVVUlEOiAgICAgICAgICAlc1xuIiwgZTJwX3V1aWQyc3RyKHNiLT5zX3V1aWQpKTsKKwlmcHJpbnRmKGYsICJGaWxlc3lzdGVtIG1hZ2ljIG51bWJlcjogIDB4JTA0WFxuIiwgc2ItPnNfbWFnaWMpOworCWZwcmludGYoZiwgIkZpbGVzeXN0ZW0gcmV2aXNpb24gIzogICAgJWQiLCBzYi0+c19yZXZfbGV2ZWwpOworCWlmIChzYi0+c19yZXZfbGV2ZWwgPT0gRVhUMl9HT09EX09MRF9SRVYpIHsKKwkJZnByaW50ZihmLCAiIChvcmlnaW5hbClcbiIpOworI2lmZGVmIEVYVDJfRFlOQU1JQ19SRVYKKwl9IGVsc2UgaWYgKHNiLT5zX3Jldl9sZXZlbCA9PSBFWFQyX0RZTkFNSUNfUkVWKSB7CisJCWZwcmludGYoZiwgIiAoZHluYW1pYylcbiIpOworI2VuZGlmCisJfSBlbHNlCisJCWZwcmludGYoZiwgIiAodW5rbm93bilcbiIpOworCXByaW50X2ZlYXR1cmVzKHNiLCBmKTsKKwlwcmludF9zdXBlcl9mbGFncyhzYiwgZik7CisJcHJpbnRfbW50b3B0cyhzYiwgZik7CisJaWYgKHNiLT5zX21vdW50X29wdHNbMF0pCisJCWZwcmludGYoZiwgIk1vdW50IG9wdGlvbnM6ICAgICAgICAgICAgJXNcbiIsIHNiLT5zX21vdW50X29wdHMpOworCWZwcmludGYoZiwgIkZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAiKTsKKwlwcmludF9mc19zdGF0ZSAoZiwgc2ItPnNfc3RhdGUpOworCWZwcmludGYoZiwgIlxuIik7CisJZnByaW50ZihmLCAiRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICAiKTsKKwlwcmludF9mc19lcnJvcnMoZiwgc2ItPnNfZXJyb3JzKTsKKwlmcHJpbnRmKGYsICJcbiIpOworCXN0ciA9IGUycF9vczJzdHJpbmcoc2ItPnNfY3JlYXRvcl9vcyk7CisJZnByaW50ZihmLCAiRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICAlc1xuIiwgc3RyKTsKKwlmcmVlKHN0cik7CisJZnByaW50ZihmLCAiSW5vZGUgY291bnQ6ICAgICAgICAgICAgICAldVxuIiwgc2ItPnNfaW5vZGVzX2NvdW50KTsKKwlmcHJpbnRmKGYsICJCbG9jayBjb3VudDogICAgICAgICAgICAgICVsbHVcbiIsIGUycF9ibG9ja3NfY291bnQoc2IpKTsKKwlmcHJpbnRmKGYsICJSZXNlcnZlZCBibG9jayBjb3VudDogICAgICVsbHVcbiIsIGUycF9yX2Jsb2Nrc19jb3VudChzYikpOworCWlmIChzYi0+c19vdmVyaGVhZF9ibG9ja3MpCisJCWZwcmludGYoZiwgIk92ZXJoZWFkIGJsb2NrczogICAgICAgICAgJXVcbiIsCisJCQlzYi0+c19vdmVyaGVhZF9ibG9ja3MpOworCWZwcmludGYoZiwgIkZyZWUgYmxvY2tzOiAgICAgICAgICAgICAgJWxsdVxuIiwgZTJwX2ZyZWVfYmxvY2tzX2NvdW50KHNiKSk7CisJZnByaW50ZihmLCAiRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICAldVxuIiwgc2ItPnNfZnJlZV9pbm9kZXNfY291bnQpOworCWZwcmludGYoZiwgIkZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgJXVcbiIsIHNiLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCWZwcmludGYoZiwgIkJsb2NrIHNpemU6ICAgICAgICAgICAgICAgJXVcbiIsIEVYVDJfQkxPQ0tfU0laRShzYikpOworCWlmIChzYi0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpCisJCWZwcmludGYoZiwgIkNsdXN0ZXIgc2l6ZTogICAgICAgICAgICAgJXVcbiIsCisJCQlFWFQyX0NMVVNURVJfU0laRShzYikpOworCWVsc2UKKwkJZnByaW50ZihmLCAiRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICAldVxuIiwKKwkJCUVYVDJfQ0xVU1RFUl9TSVpFKHNiKSk7CisJaWYgKHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpCisJCWZwcmludGYoZiwgIkdyb3VwIGRlc2NyaXB0b3Igc2l6ZTogICAgJXVcbiIsIHNiLT5zX2Rlc2Nfc2l6ZSk7CisJaWYgKHNiLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3MpCisJCWZwcmludGYoZiwgIlJlc2VydmVkIEdEVCBibG9ja3M6ICAgICAgJXVcbiIsCisJCQlzYi0+c19yZXNlcnZlZF9nZHRfYmxvY2tzKTsKKwlmcHJpbnRmKGYsICJCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgICV1XG4iLCBzYi0+c19ibG9ja3NfcGVyX2dyb3VwKTsKKwlpZiAoc2ItPnNfZmVhdHVyZV9yb19jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0JJR0FMTE9DKQorCQlmcHJpbnRmKGYsICJDbHVzdGVycyBwZXIgZ3JvdXA6ICAgICAgICV1XG4iLAorCQkJc2ItPnNfY2x1c3RlcnNfcGVyX2dyb3VwKTsKKwllbHNlCisJCWZwcmludGYoZiwgIkZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgJXVcbiIsCisJCQlzYi0+c19jbHVzdGVyc19wZXJfZ3JvdXApOworCWZwcmludGYoZiwgIklub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgJXVcbiIsIHNiLT5zX2lub2Rlc19wZXJfZ3JvdXApOworCWZwcmludGYoZiwgIklub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgJXVcbiIsIGlub2RlX2Jsb2Nrc19wZXJfZ3JvdXApOworCWlmIChzYi0+c19yYWlkX3N0cmlkZSkKKwkJZnByaW50ZihmLCAiUkFJRCBzdHJpZGU6ICAgICAgICAgICAgICAldVxuIiwKKwkJCXNiLT5zX3JhaWRfc3RyaWRlKTsKKwlpZiAoc2ItPnNfcmFpZF9zdHJpcGVfd2lkdGgpCisJCWZwcmludGYoZiwgIlJBSUQgc3RyaXBlIHdpZHRoOiAgICAgICAgJXVcbiIsCisJCQlzYi0+c19yYWlkX3N0cmlwZV93aWR0aCk7CisJaWYgKHNiLT5zX2ZpcnN0X21ldGFfYmcpCisJCWZwcmludGYoZiwgIkZpcnN0IG1ldGEgYmxvY2sgZ3JvdXA6ICAgJXVcbiIsCisJCQlzYi0+c19maXJzdF9tZXRhX2JnKTsKKwlpZiAoc2ItPnNfbG9nX2dyb3Vwc19wZXJfZmxleCkKKwkJZnByaW50ZihmLCAiRmxleCBibG9jayBncm91cCBzaXplOiAgICAldVxuIiwKKwkJCTEgPDwgc2ItPnNfbG9nX2dyb3Vwc19wZXJfZmxleCk7CisJaWYgKHNiLT5zX21rZnNfdGltZSkgeworCQl0bSA9IHNiLT5zX21rZnNfdGltZTsKKwkJZnByaW50ZihmLCAiRmlsZXN5c3RlbSBjcmVhdGVkOiAgICAgICAlcyIsIGN0aW1lKCZ0bSkpOworCX0KKwl0bSA9IHNiLT5zX210aW1lOworCWZwcmludGYoZiwgIkxhc3QgbW91bnQgdGltZTogICAgICAgICAgJXMiLAorCQlzYi0+c19tdGltZSA/IGN0aW1lKCZ0bSkgOiAibi9hXG4iKTsKKwl0bSA9IHNiLT5zX3d0aW1lOworCWZwcmludGYoZiwgIkxhc3Qgd3JpdGUgdGltZTogICAgICAgICAgJXMiLCBjdGltZSgmdG0pKTsKKwlmcHJpbnRmKGYsICJNb3VudCBjb3VudDogICAgICAgICAgICAgICV1XG4iLCBzYi0+c19tbnRfY291bnQpOworCWZwcmludGYoZiwgIk1heGltdW0gbW91bnQgY291bnQ6ICAgICAgJWRcbiIsIHNiLT5zX21heF9tbnRfY291bnQpOworCXRtID0gc2ItPnNfbGFzdGNoZWNrOworCWZwcmludGYoZiwgIkxhc3QgY2hlY2tlZDogICAgICAgICAgICAgJXMiLCBjdGltZSgmdG0pKTsKKwlmcHJpbnRmKGYsICJDaGVjayBpbnRlcnZhbDogICAgICAgICAgICV1ICglcylcbiIsIHNiLT5zX2NoZWNraW50ZXJ2YWwsCisJICAgICAgIGludGVydmFsX3N0cmluZyhzYi0+c19jaGVja2ludGVydmFsKSk7CisJaWYgKHNiLT5zX2NoZWNraW50ZXJ2YWwpCisJeworCQl0aW1lX3QgbmV4dDsKKworCQluZXh0ID0gc2ItPnNfbGFzdGNoZWNrICsgc2ItPnNfY2hlY2tpbnRlcnZhbDsKKwkJZnByaW50ZihmLCAiTmV4dCBjaGVjayBhZnRlcjogICAgICAgICAlcyIsIGN0aW1lKCZuZXh0KSk7CisJfQorI2RlZmluZSBQT1cyKHgpICgoX191NjQpIDEgPDwgKHgpKQorCWlmIChzYi0+c19rYnl0ZXNfd3JpdHRlbikgeworCQlmcHJpbnRmKGYsICJMaWZldGltZSB3cml0ZXM6ICAgICAgICAgICIpOworCQlpZiAoc2ItPnNfa2J5dGVzX3dyaXR0ZW4gPCBQT1cyKDEzKSkKKwkJCWZwcmludGYoZiwgIiVsbHUga0JcbiIsIHNiLT5zX2tieXRlc193cml0dGVuKTsKKwkJZWxzZSBpZiAoc2ItPnNfa2J5dGVzX3dyaXR0ZW4gPCBQT1cyKDIzKSkKKwkJCWZwcmludGYoZiwgIiVsbHUgTUJcbiIsCisJCQkJKHNiLT5zX2tieXRlc193cml0dGVuICsgUE9XMig5KSkgPj4gMTApOworCQllbHNlIGlmIChzYi0+c19rYnl0ZXNfd3JpdHRlbiA8IFBPVzIoMzMpKQorCQkJZnByaW50ZihmLCAiJWxsdSBHQlxuIiwKKwkJCQkoc2ItPnNfa2J5dGVzX3dyaXR0ZW4gKyBQT1cyKDE5KSkgPj4gMjApOworCQllbHNlIGlmIChzYi0+c19rYnl0ZXNfd3JpdHRlbiA8IFBPVzIoNDMpKQorCQkJZnByaW50ZihmLCAiJWxsdSBUQlxuIiwKKwkJCQkoc2ItPnNfa2J5dGVzX3dyaXR0ZW4gKyBQT1cyKDI5KSkgPj4gMzApOworCQllbHNlCisJCQlmcHJpbnRmKGYsICIlbGx1IFBCXG4iLAorCQkJCShzYi0+c19rYnl0ZXNfd3JpdHRlbiArIFBPVzIoMzkpKSA+PiA0MCk7CisJfQorCWZwcmludGYoZiwgIlJlc2VydmVkIGJsb2NrcyB1aWQ6ICAgICAgIik7CisJcHJpbnRfdXNlcihzYi0+c19kZWZfcmVzdWlkLCBmKTsKKwlmcHJpbnRmKGYsICJSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgICIpOworCXByaW50X2dyb3VwKHNiLT5zX2RlZl9yZXNnaWQsIGYpOworCWlmIChzYi0+c19yZXZfbGV2ZWwgPj0gRVhUMl9EWU5BTUlDX1JFVikgeworCQlmcHJpbnRmKGYsICJGaXJzdCBpbm9kZTogICAgICAgICAgICAgICVkXG4iLCBzYi0+c19maXJzdF9pbm8pOworCQlmcHJpbnRmKGYsICJJbm9kZSBzaXplOgkgICAgICAgICAgJWRcbiIsIHNiLT5zX2lub2RlX3NpemUpOworCQlpZiAoc2ItPnNfbWluX2V4dHJhX2lzaXplKQorCQkJZnByaW50ZihmLCAiUmVxdWlyZWQgZXh0cmEgaXNpemU6ICAgICAlZFxuIiwKKwkJCQlzYi0+c19taW5fZXh0cmFfaXNpemUpOworCQlpZiAoc2ItPnNfd2FudF9leHRyYV9pc2l6ZSkKKwkJCWZwcmludGYoZiwgIkRlc2lyZWQgZXh0cmEgaXNpemU6ICAgICAgJWRcbiIsCisJCQkJc2ItPnNfd2FudF9leHRyYV9pc2l6ZSk7CisJfQorCWlmICghZTJwX2lzX251bGxfdXVpZChzYi0+c19qb3VybmFsX3V1aWQpKQorCQlmcHJpbnRmKGYsICJKb3VybmFsIFVVSUQ6ICAgICAgICAgICAgICVzXG4iLAorCQkJZTJwX3V1aWQyc3RyKHNiLT5zX2pvdXJuYWxfdXVpZCkpOworCWlmIChzYi0+c19qb3VybmFsX2ludW0pCisJCWZwcmludGYoZiwgIkpvdXJuYWwgaW5vZGU6ICAgICAgICAgICAgJXVcbiIsCisJCQlzYi0+c19qb3VybmFsX2ludW0pOworCWlmIChzYi0+c19qb3VybmFsX2RldikKKwkJZnByaW50ZihmLCAiSm91cm5hbCBkZXZpY2U6CSAgICAgICAgICAweCUwNHhcbiIsCisJCQlzYi0+c19qb3VybmFsX2Rldik7CisJaWYgKHNiLT5zX2xhc3Rfb3JwaGFuKQorCQlmcHJpbnRmKGYsICJGaXJzdCBvcnBoYW4gaW5vZGU6ICAgICAgICV1XG4iLAorCQkJc2ItPnNfbGFzdF9vcnBoYW4pOworCWlmICgoc2ItPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWCkgfHwKKwkgICAgc2ItPnNfZGVmX2hhc2hfdmVyc2lvbikKKwkJZnByaW50ZihmLCAiRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICAlc1xuIiwKKwkJCWUycF9oYXNoMnN0cmluZyhzYi0+c19kZWZfaGFzaF92ZXJzaW9uKSk7CisJaWYgKCFlMnBfaXNfbnVsbF91dWlkKHNiLT5zX2hhc2hfc2VlZCkpCisJCWZwcmludGYoZiwgIkRpcmVjdG9yeSBIYXNoIFNlZWQ6ICAgICAgJXNcbiIsCisJCQllMnBfdXVpZDJzdHIoc2ItPnNfaGFzaF9zZWVkKSk7CisJaWYgKHNiLT5zX2pubF9iYWNrdXBfdHlwZSkgeworCQlmcHJpbnRmKGYsICJKb3VybmFsIGJhY2t1cDogICAgICAgICAgICIpOworCQlzd2l0Y2ggKHNiLT5zX2pubF9iYWNrdXBfdHlwZSkgeworCQljYXNlIDE6CisJCQlmcHJpbnRmKGYsICJpbm9kZSBibG9ja3NcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmKGYsICJ0eXBlICV1XG4iLCBzYi0+c19qbmxfYmFja3VwX3R5cGUpOworCQl9CisJfQorCWlmIChzYi0+c19iYWNrdXBfYmdzWzBdIHx8IHNiLT5zX2JhY2t1cF9iZ3NbMV0pIHsKKwkJZnByaW50ZihmLCAiQmFja3VwIGJsb2NrIGdyb3VwczogICAgICAiKTsKKwkJaWYgKHNiLT5zX2JhY2t1cF9iZ3NbMF0pCisJCQlmcHJpbnRmKGYsICIldSAiLCBzYi0+c19iYWNrdXBfYmdzWzBdKTsKKwkJaWYgKHNiLT5zX2JhY2t1cF9iZ3NbMV0pCisJCQlmcHJpbnRmKGYsICIldSAiLCBzYi0+c19iYWNrdXBfYmdzWzFdKTsKKwkJZnB1dGMoJ1xuJywgZik7CisJfQorCWlmIChzYi0+c19zbmFwc2hvdF9pbnVtKSB7CisJCWZwcmludGYoZiwgIlNuYXBzaG90IGlub2RlOiAgICAgICAgICAgJXVcbiIsCisJCQlzYi0+c19zbmFwc2hvdF9pbnVtKTsKKwkJZnByaW50ZihmLCAiU25hcHNob3QgSUQ6ICAgICAgICAgICAgICAldVxuIiwKKwkJCXNiLT5zX3NuYXBzaG90X2lkKTsKKwkJZnByaW50ZihmLCAiU25hcHNob3QgcmVzZXJ2ZWQgYmxvY2tzOiAlbGx1XG4iLAorCQkJc2ItPnNfc25hcHNob3Rfcl9ibG9ja3NfY291bnQpOworCX0KKwlpZiAoc2ItPnNfc25hcHNob3RfbGlzdCkKKwkJZnByaW50ZihmLCAiU25hcHNob3QgbGlzdCBoZWFkOiAgICAgICAldVxuIiwKKwkJCXNiLT5zX3NuYXBzaG90X2xpc3QpOworCWlmIChzYi0+c19lcnJvcl9jb3VudCkKKwkJZnByaW50ZihmLCAiRlMgRXJyb3IgY291bnQ6ICAgICAgICAgICAldVxuIiwKKwkJCXNiLT5zX2Vycm9yX2NvdW50KTsKKwlpZiAoc2ItPnNfZmlyc3RfZXJyb3JfdGltZSkgeworCQl0bSA9IHNiLT5zX2ZpcnN0X2Vycm9yX3RpbWU7CisJCWZwcmludGYoZiwgIkZpcnN0IGVycm9yIHRpbWU6ICAgICAgICAgJXMiLCBjdGltZSgmdG0pKTsKKwkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCQlzdHJuY3B5KGJ1ZiwgKGNoYXIgKilzYi0+c19maXJzdF9lcnJvcl9mdW5jLAorCQkJc2l6ZW9mKHNiLT5zX2ZpcnN0X2Vycm9yX2Z1bmMpKTsKKwkJZnByaW50ZihmLCAiRmlyc3QgZXJyb3IgZnVuY3Rpb246ICAgICAlc1xuIiwgYnVmKTsKKwkJZnByaW50ZihmLCAiRmlyc3QgZXJyb3IgbGluZSAjOiAgICAgICAldVxuIiwKKwkJCXNiLT5zX2ZpcnN0X2Vycm9yX2xpbmUpOworCQlmcHJpbnRmKGYsICJGaXJzdCBlcnJvciBpbm9kZSAjOiAgICAgICV1XG4iLAorCQkJc2ItPnNfZmlyc3RfZXJyb3JfaW5vKTsKKwkJZnByaW50ZihmLCAiRmlyc3QgZXJyb3IgYmxvY2sgIzogICAgICAlbGx1XG4iLAorCQkJc2ItPnNfZmlyc3RfZXJyb3JfYmxvY2spOworCX0KKwlpZiAoc2ItPnNfbGFzdF9lcnJvcl90aW1lKSB7CisJCXRtID0gc2ItPnNfbGFzdF9lcnJvcl90aW1lOworCQlmcHJpbnRmKGYsICJMYXN0IGVycm9yIHRpbWU6ICAgICAgICAgICVzIiwgY3RpbWUoJnRtKSk7CisJCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwkJc3RybmNweShidWYsIChjaGFyICopc2ItPnNfbGFzdF9lcnJvcl9mdW5jLAorCQkJc2l6ZW9mKHNiLT5zX2xhc3RfZXJyb3JfZnVuYykpOworCQlmcHJpbnRmKGYsICJMYXN0IGVycm9yIGZ1bmN0aW9uOiAgICAgICVzXG4iLCBidWYpOworCQlmcHJpbnRmKGYsICJMYXN0IGVycm9yIGxpbmUgIzogICAgICAgICV1XG4iLAorCQkJc2ItPnNfbGFzdF9lcnJvcl9saW5lKTsKKwkJZnByaW50ZihmLCAiTGFzdCBlcnJvciBpbm9kZSAjOiAgICAgICAldVxuIiwKKwkJCXNiLT5zX2xhc3RfZXJyb3JfaW5vKTsKKwkJZnByaW50ZihmLCAiTGFzdCBlcnJvciBibG9jayAjOiAgICAgICAlbGx1XG4iLAorCQkJc2ItPnNfbGFzdF9lcnJvcl9ibG9jayk7CisJfQorCWlmIChzYi0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01NUCkgeworCQlmcHJpbnRmKGYsICJNTVAgYmxvY2sgbnVtYmVyOiAgICAgICAgICVsbHVcbiIsCisJCQkobG9uZyBsb25nKXNiLT5zX21tcF9ibG9jayk7CisJCWZwcmludGYoZiwgIk1NUCB1cGRhdGUgaW50ZXJ2YWw6ICAgICAgJXVcbiIsCisJCQlzYi0+c19tbXBfdXBkYXRlX2ludGVydmFsKTsKKwl9CisJaWYgKHNiLT5zX3Vzcl9xdW90YV9pbnVtKQorCQlmcHJpbnRmKGYsICJVc2VyIHF1b3RhIGlub2RlOiAgICAgICAgICV1XG4iLAorCQkJc2ItPnNfdXNyX3F1b3RhX2ludW0pOworCWlmIChzYi0+c19ncnBfcXVvdGFfaW51bSkKKwkJZnByaW50ZihmLCAiR3JvdXAgcXVvdGEgaW5vZGU6ICAgICAgICAldVxuIiwKKwkJCXNiLT5zX2dycF9xdW90YV9pbnVtKTsKKworCWlmIChzYi0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfTUVUQURBVEFfQ1NVTSkKKwkJZnByaW50ZihmLCAiQ2hlY2tzdW06ICAgICAgICAgICAgICAgICAweCUwOHhcbiIsCisJCQlzYi0+c19jaGVja3N1bSk7Cit9CisKK3ZvaWQgbGlzdF9zdXBlciAoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKiBzKQoreworCWxpc3Rfc3VwZXIyKHMsIHN0ZG91dCk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYi9lMnAvbW50b3B0cy5jIGIvbGliL2UycC9tbnRvcHRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2Y2M1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lMnAvbW50b3B0cy5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogbW91bnRvcHRzLmMgLS0tIGNvbnZlcnQgYmV0d2VlbiBkZWZhdWx0IG1vdW50IG9wdGlvbnMgYW5kIHN0cmluZ3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgIFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJlMnAuaCIKKworc3RydWN0IG1udG9wdCB7CisJdW5zaWduZWQgaW50CW1hc2s7CisJY29uc3QgY2hhcgkqc3RyaW5nOworfTsKKworc3RhdGljIHN0cnVjdCBtbnRvcHQgbW50b3B0X2xpc3RbXSA9IHsKKwl7IEVYVDJfREVGTV9ERUJVRywJImRlYnVnIiB9LAorCXsgRVhUMl9ERUZNX0JTREdST1VQUywJImJzZGdyb3VwcyIgfSwKKwl7IEVYVDJfREVGTV9YQVRUUl9VU0VSLAkidXNlcl94YXR0ciIgfSwKKwl7IEVYVDJfREVGTV9BQ0wsCSJhY2wiIH0sCisJeyBFWFQyX0RFRk1fVUlEMTYsCSJ1aWQxNiIgfSwKKwl7IEVYVDNfREVGTV9KTU9ERV9EQVRBLCAiam91cm5hbF9kYXRhIiB9LAorCXsgRVhUM19ERUZNX0pNT0RFX09SREVSRUQsICJqb3VybmFsX2RhdGFfb3JkZXJlZCIgfSwKKwl7IEVYVDNfREVGTV9KTU9ERV9XQkFDSywgImpvdXJuYWxfZGF0YV93cml0ZWJhY2siIH0sCisJeyBFWFQ0X0RFRk1fTk9CQVJSSUVSLAkibm9iYXJyaWVyIiB9LAorCXsgRVhUNF9ERUZNX0JMT0NLX1ZBTElESVRZLCAiYmxvY2tfdmFsaWRpdHkiIH0sCisJeyBFWFQ0X0RFRk1fRElTQ0FSRCwJImRpc2NhcmQifSwKKwl7IEVYVDRfREVGTV9OT0RFTEFMTE9DLAkibm9kZWxhbGxvYyJ9LAorCXsgMCwgMCB9LAorfTsKKworY29uc3QgY2hhciAqZTJwX21udG9wdDJzdHJpbmcodW5zaWduZWQgaW50IG1hc2spCit7CisJc3RydWN0IG1udG9wdCAgKmY7CisJc3RhdGljIGNoYXIgYnVmWzIwXTsKKwlpbnQJZm51bTsKKworCWZvciAoZiA9IG1udG9wdF9saXN0OyBmLT5zdHJpbmc7IGYrKykgeworCQlpZiAobWFzayA9PSBmLT5tYXNrKQorCQkJcmV0dXJuIGYtPnN0cmluZzsKKwl9CisJZm9yIChmbnVtID0gMDsgbWFzayA+Pj0gMTsgZm51bSsrKTsKKwlzcHJpbnRmKGJ1ZiwgIk1OVE9QVF8lZCIsIGZudW0pOworCXJldHVybiBidWY7Cit9CisKK2ludCBlMnBfc3RyaW5nMm1udG9wdChjaGFyICpzdHJpbmcsIHVuc2lnbmVkIGludCAqbWFzaykKK3sKKwlzdHJ1Y3QgbW50b3B0ICAqZjsKKwljaGFyCQkqZXB0cjsKKwlpbnQJCW51bTsKKworCWZvciAoZiA9IG1udG9wdF9saXN0OyBmLT5zdHJpbmc7IGYrKykgeworCQlpZiAoIXN0cmNhc2VjbXAoc3RyaW5nLCBmLT5zdHJpbmcpKSB7CisJCQkqbWFzayA9IGYtPm1hc2s7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlpZiAoc3RybmNhc2VjbXAoc3RyaW5nLCAiTU5UT1BUXyIsIDcpKQorCQlyZXR1cm4gMTsKKworCWlmIChzdHJpbmdbOF0gPT0gMCkKKwkJcmV0dXJuIDE7CisJbnVtID0gc3RydG9sKHN0cmluZys4LCAmZXB0ciwgMTApOworCWlmIChudW0gPiAzMiB8fCBudW0gPCAwKQorCQlyZXR1cm4gMTsKKwlpZiAoKmVwdHIpCisJCXJldHVybiAxOworCSptYXNrID0gMSA8PCBudW07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpza2lwX292ZXJfYmxhbmtzKGNoYXIgKmNwKQoreworCXdoaWxlICgqY3AgJiYgaXNzcGFjZSgqY3ApKQorCQljcCsrOworCXJldHVybiBjcDsKK30KKworc3RhdGljIGNoYXIgKnNraXBfb3Zlcl93b3JkKGNoYXIgKmNwKQoreworCXdoaWxlICgqY3AgJiYgIWlzc3BhY2UoKmNwKSAmJiAqY3AgIT0gJywnKQorCQljcCsrOworCXJldHVybiBjcDsKK30KKworLyoKKyAqIEVkaXQgYSBtbnRvcHQgc2V0IGFycmF5IGFzIHJlcXVlc3RlZCBieSB0aGUgdXNlci4gIFRoZSBvaworICogcGFyYW1ldGVyLCBpZiBub24temVybywgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0byBsaW1pdCB3aGF0CisgKiBtbnRvcHRzIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gc2V0IG9yIGNsZWFyIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK2ludCBlMnBfZWRpdF9tbnRvcHRzKGNvbnN0IGNoYXIgKnN0ciwgX191MzIgKm1udG9wdHMsIF9fdTMyIG9rKQoreworCWNoYXIJKmNwLCAqYnVmLCAqbmV4dDsKKwlpbnQJbmVnOworCXVuc2lnbmVkIGludAltYXNrOworCWludAlyYyA9IDA7CisKKwlidWYgPSBtYWxsb2Moc3RybGVuKHN0cikrMSk7CisJaWYgKCFidWYpCisJCXJldHVybiAxOworCXN0cmNweShidWYsIHN0cik7CisJY3AgPSBidWY7CisJd2hpbGUgKGNwICYmICpjcCkgeworCQluZWcgPSAwOworCQljcCA9IHNraXBfb3Zlcl9ibGFua3MoY3ApOworCQluZXh0ID0gc2tpcF9vdmVyX3dvcmQoY3ApOworCQlpZiAoKm5leHQgPT0gMCkKKwkJCW5leHQgPSAwOworCQllbHNlCisJCQkqbmV4dCA9IDA7CisJCXN3aXRjaCAoKmNwKSB7CisJCWNhc2UgJy0nOgorCQljYXNlICdeJzoKKwkJCW5lZysrOworCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSAnKyc6CisJCQljcCsrOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGUycF9zdHJpbmcybW50b3B0KGNwLCAmbWFzaykpIHsKKwkJCXJjID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChvayAmJiAhKG9rICYgbWFzaykpIHsKKwkJCXJjID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChtYXNrICYgRVhUM19ERUZNX0pNT0RFKQorCQkJKm1udG9wdHMgJj0gfkVYVDNfREVGTV9KTU9ERTsKKwkJaWYgKG5lZykKKwkJCSptbnRvcHRzICY9IH5tYXNrOworCQllbHNlCisJCQkqbW50b3B0cyB8PSBtYXNrOworCQljcCA9IG5leHQgPyBuZXh0KzEgOiAwOworCX0KKwlmcmVlKGJ1Zik7CisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvbGliL2UycC9vc3R5cGUuYyBiL2xpYi9lMnAvb3N0eXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwMmU3NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lMnAvb3N0eXBlLmMKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIGdldG9zdHlwZS5jICAgICAgICAgIC0gR2V0IHRoZSBGaWxlc3lzdGVtIE9TIHR5cGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJlMnAuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgKm9zX3RhYltdID0KKwl7ICJMaW51eCIsCisJICAiSHVyZCIsCisJICAiTWFzaXgiLAorCSAgIkZyZWVCU0QiLAorCSAgIkxpdGVzIiwKKwkgIDAgfTsKKworLyoKKyAqIENvbnZlcnQgYW4gb3NfdHlwZSB0byBhIHN0cmluZworICovCitjaGFyICplMnBfb3Myc3RyaW5nKGludCBvc190eXBlKQoreworICAgICAgICBjb25zdCBjaGFyCSpvczsKKwljaGFyIAkJKnJldDsKKworCWlmIChvc190eXBlIDw9IEVYVDJfT1NfTElURVMpCisJCW9zID0gb3NfdGFiW29zX3R5cGVdOworCWVsc2UKKwkJb3MgPSAiKHVua25vd24gb3MpIjsKKworICAgICAgICByZXQgPSBtYWxsb2Moc3RybGVuKG9zKSsxKTsKKwlpZiAocmV0KQorCQlzdHJjcHkocmV0LCBvcyk7CisgICAgICAgIHJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDb252ZXJ0IGFuIG9zX3R5cGUgdG8gYSBzdHJpbmcKKyAqLworaW50IGUycF9zdHJpbmcyb3MoY2hhciAqc3RyKQoreworCWNvbnN0IGNoYXIJKipjcHA7CisJaW50CQlpID0gMDsKKworCWZvciAoY3BwID0gb3NfdGFiOyAqY3BwOyBjcHArKywgaSsrKSB7CisJCWlmICghc3RyY2FzZWNtcChzdHIsICpjcHApKQorCQkJcmV0dXJuIGk7CisJfQorCXJldHVybiAtMTsKK30KKworI2lmZGVmIFRFU1RfUFJPR1JBTQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNoYXIgCSpzOworCWludAlpLCBvczsKKworCWZvciAoaT0wOyBpIDw9IEVYVDJfT1NfTElURVM7IGkrKykgeworCQlzID0gZTJwX29zMnN0cmluZyhpKTsKKwkJb3MgPSBlMnBfc3RyaW5nMm9zKHMpOworCQlwcmludGYoIiVkOiAlcyAoJWQpXG4iLCBpLCBzLCBvcyk7CisJCWlmIChpICE9IG9zKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWx1cmUhXG4iKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJZXhpdCgwKTsKK30KKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2xpYi9lMnAvcGFyc2VfbnVtLmMgYi9saWIvZTJwL3BhcnNlX251bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZDYyODMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZTJwL3BhcnNlX251bS5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBwYXJzZV9udW0uYwkJLSBQYXJzZSB0aGUgbnVtYmVyIG9mIGJsb2NrcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImUycC5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBwYXJzZV9udW1fYmxvY2tzMihjb25zdCBjaGFyICphcmcsIGludCBsb2dfYmxvY2tfc2l6ZSkKK3sKKwljaGFyICpwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBudW07CisKKwludW0gPSBzdHJ0b3VsbChhcmcsICZwLCAwKTsKKworCWlmIChwWzBdICYmIHBbMV0pCisJCXJldHVybiAwOworCisJc3dpdGNoICgqcCkgewkJLyogVXNpbmcgZmFsbC10aHJvdWdoIGxvZ2ljICovCisJY2FzZSAnVCc6IGNhc2UgJ3QnOgorCQludW0gPDw9IDEwOworCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgJ0cnOiBjYXNlICdnJzoKKwkJbnVtIDw8PSAxMDsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlICdNJzogY2FzZSAnbSc6CisJCW51bSA8PD0gMTA7CisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSAnSyc6IGNhc2UgJ2snOgorCQlpZiAobG9nX2Jsb2NrX3NpemUgPCAwKQorCQkJbnVtIDw8PSAxMDsKKwkJZWxzZQorCQkJbnVtID4+PSBsb2dfYmxvY2tfc2l6ZTsKKwkJYnJlYWs7CisJY2FzZSAncyc6CisJCWlmIChsb2dfYmxvY2tfc2l6ZSA8IDApCisJCQludW0gPDw9IDk7CisJCWVsc2UKKwkJCW51bSA+Pj0gKDErbG9nX2Jsb2NrX3NpemUpOworCQlicmVhazsKKwljYXNlICdcMCc6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gbnVtOworfQorCit1bnNpZ25lZCBsb25nIHBhcnNlX251bV9ibG9ja3MoY29uc3QgY2hhciAqYXJnLCBpbnQgbG9nX2Jsb2NrX3NpemUpCit7CisJcmV0dXJuIHBhcnNlX251bV9ibG9ja3MyKGFyZywgbG9nX2Jsb2NrX3NpemUpOworfQorCisjaWZkZWYgREVCVUcKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBsb25nIG51bTsKKwlpbnQgbG9nX2Jsb2NrX3NpemUgPSAwOworCisJaWYgKGFyZ2MgIT0gMiAmJiBhcmdjICE9IDMpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgYXJnIFtsb2dfYmxvY2tfc2l6ZV1cbiIsIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKworCWlmIChhcmdjID09IDMpIHsKKwkJY2hhciAqcDsKKworCQlsb2dfYmxvY2tfc2l6ZSA9IHN0cnRvbChhcmd2WzJdLCAmcCwgMCk7CisJCWlmICgqcCkgeworCQkJZnByaW50ZihzdGRlcnIsICJCYWQgbG9nX2Jsb2NrX3NpemU6ICVzXG4iLCBhcmd2WzJdKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwludW0gPSBwYXJzZV9udW1fYmxvY2tzKGFyZ3ZbMV0sIGxvZ19ibG9ja19zaXplKTsKKworCXByaW50ZigiUGFyc2VkIG51bWJlcjogJWx1XG4iLCBudW0pOworCWV4aXQoMCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9lMnAvcGUuYyBiL2xpYi9lMnAvcGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjI0NTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2UycC9wZS5jCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBwZS5jCQkJLSBQcmludCBhIHNlY29uZCBleHRlbmRlZCBmaWxlc3lzdGVtIGVycm9ycyBiZWhhdmlvcgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKy8qCisgKiBIaXN0b3J5OgorICogOTQvMDEvMDkJLSBDcmVhdGlvbgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiZTJwLmgiCisKK3ZvaWQgcHJpbnRfZnNfZXJyb3JzIChGSUxFICogZiwgdW5zaWduZWQgc2hvcnQgZXJyb3JzKQoreworCXN3aXRjaCAoZXJyb3JzKQorCXsKKwkJY2FzZSBFWFQyX0VSUk9SU19DT05USU5VRToKKwkJCWZwcmludGYgKGYsICJDb250aW51ZSIpOworCQkJYnJlYWs7CisJCWNhc2UgRVhUMl9FUlJPUlNfUk86CisJCQlmcHJpbnRmIChmLCAiUmVtb3VudCByZWFkLW9ubHkiKTsKKwkJCWJyZWFrOworCQljYXNlIEVYVDJfRVJST1JTX1BBTklDOgorCQkJZnByaW50ZiAoZiwgIlBhbmljIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWZwcmludGYgKGYsICJVbmtub3duIChjb250aW51ZSkiKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWIvZTJwL3BlcmNlbnQuYyBiL2xpYi9lMnAvcGVyY2VudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDBjZDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZTJwL3BlcmNlbnQuYwpAQCAtMCwwICsxLDY3IEBACisvKgorICogcGVyY2VudC5jCQktIFRha2UgcGVyY2VudGFnZSBvZiBhIG51bWJlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiAgVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJlMnAuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKgorICogV2Ugd29yayByZWFsbHkgaGFyZCB0byBjYWxjdWxhdGUgdGhpcyBhY2N1cmF0ZWx5LCB3aGlsZSBhdm9pZGluZworICogYW4gb3ZlcmZsb3cuICAiSXMgdGhlcmUgYSBoeXBoZW4gaW4gYW5hbC1yZXRlbnRpdmU/IiAgOi0pCisgKi8KK3Vuc2lnbmVkIGludCBlMnBfcGVyY2VudChpbnQgcGVyY2VudCwgdW5zaWduZWQgaW50IGJhc2UpCit7CisJdW5zaWduZWQgaW50IG1hc2sgPSB+KCgxIDw8IChzaXplb2YodW5zaWduZWQgaW50KSAtIDEpICogOCkgLSAxKTsKKworCWlmICghcGVyY2VudCkKKwkJcmV0dXJuIDA7CisJaWYgKDEwMCAlIHBlcmNlbnQgPT0gMCkKKwkJcmV0dXJuIGJhc2UgLyAoMTAwIC8gcGVyY2VudCk7CisJaWYgKG1hc2sgJiBiYXNlKQorCQlyZXR1cm4gKGJhc2UgLyAxMDApICogcGVyY2VudDsKKwlyZXR1cm4gYmFzZSAqIHBlcmNlbnQgLyAxMDA7Cit9CisKKyNpZmRlZiBERUJVRworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGludCBiYXNlOworCWludCBwZXJjZW50OworCWNoYXIgKnA7CisJaW50IGxvZ19ibG9ja19zaXplID0gMDsKKworCWlmIChhcmdjICE9IDMpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgcGVyY2VudCBiYXNlXG4iLCBhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlwZXJjZW50ID0gc3RydG91bChhcmd2WzFdLCAmcCwgMCk7CisJaWYgKHBbMF0gJiYgcFsxXSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkJhZCBwZXJjZW50OiAlc1xuIiwgYXJndlsxXSk7CisJCWV4aXQoMSk7CisJfQorCisJYmFzZSA9IHN0cnRvdWwoYXJndlsyXSwgJnAsIDApOworCWlmIChwWzBdICYmIHBbMV0pIHsKKwkJZnByaW50ZihzdGRlcnIsICJCYWQgYmFzZTogJXNcbiIsIGFyZ3ZbMl0pOworCQlleGl0KDEpOworCX0KKworCXByaW50ZigiJWQgcGVyY2VudCBvZiAldSBpcyAldS5cbiIsIHBlcmNlbnQsIGJhc2UsCisJICAgICAgIGUycF9wZXJjZW50KHBlcmNlbnQsIGJhc2UpKTsKKworCWV4aXQoMCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9lMnAvcGYuYyBiL2xpYi9lMnAvcGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmY4Y2U1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2UycC9wZi5jCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBwZi5jCQkJLSBQcmludCBmaWxlIGF0dHJpYnV0ZXMgb24gYW4gZXh0MiBmaWxlIHN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKy8qCisgKiBIaXN0b3J5OgorICogOTMvMTAvMzAJLSBDcmVhdGlvbgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiZTJwLmgiCisKK3N0cnVjdCBmbGFnc19uYW1lIHsKKwl1bnNpZ25lZCBsb25nCWZsYWc7CisJY29uc3QgY2hhcgkqc2hvcnRfbmFtZTsKKwljb25zdCBjaGFyCSpsb25nX25hbWU7Cit9OworCitzdGF0aWMgc3RydWN0IGZsYWdzX25hbWUgZmxhZ3NfYXJyYXlbXSA9IHsKKwl7IEVYVDJfU0VDUk1fRkwsICJzIiwgIlNlY3VyZV9EZWxldGlvbiIgfSwKKwl7IEVYVDJfVU5STV9GTCwgInUiICwgIlVuZGVsZXRlIiB9LAorCXsgRVhUMl9TWU5DX0ZMLCAiUyIsICJTeW5jaHJvbm91c19VcGRhdGVzIiB9LAorCXsgRVhUMl9ESVJTWU5DX0ZMLCAiRCIsICJTeW5jaHJvbm91c19EaXJlY3RvcnlfVXBkYXRlcyIgfSwKKwl7IEVYVDJfSU1NVVRBQkxFX0ZMLCAiaSIsICJJbW11dGFibGUiIH0sCisJeyBFWFQyX0FQUEVORF9GTCwgImEiLCAiQXBwZW5kX09ubHkiIH0sCisJeyBFWFQyX05PRFVNUF9GTCwgImQiLCAiTm9fRHVtcCIgfSwKKwl7IEVYVDJfTk9BVElNRV9GTCwgIkEiLCAiTm9fQXRpbWUiIH0sCisJeyBFWFQyX0NPTVBSX0ZMLCAiYyIsICJDb21wcmVzc2lvbl9SZXF1ZXN0ZWQiIH0sCisjaWZkZWYgRU5BQkxFX0NPTVBSRVNTSU9OCisJeyBFWFQyX0NPTVBSQkxLX0ZMLCAiQiIsICJDb21wcmVzc2VkX0ZpbGUiIH0sCisJeyBFWFQyX0RJUlRZX0ZMLCAiWiIsICJDb21wcmVzc2VkX0RpcnR5X0ZpbGUiIH0sCisJeyBFWFQyX05PQ09NUFJfRkwsICJYIiwgIkNvbXByZXNzaW9uX1Jhd19BY2Nlc3MiIH0sCisJeyBFWFQyX0VDT01QUl9GTCwgIkUiLCAiQ29tcHJlc3Npb25fRXJyb3IiIH0sCisjZW5kaWYKKwl7IEVYVDNfSk9VUk5BTF9EQVRBX0ZMLCAiaiIsICJKb3VybmFsZWRfRGF0YSIgfSwKKwl7IEVYVDJfSU5ERVhfRkwsICJJIiwgIkluZGV4ZWRfZGlyZWN0b3J5IiB9LAorCXsgRVhUMl9OT1RBSUxfRkwsICJ0IiwgIk5vX1RhaWxtZXJnaW5nIiB9LAorCXsgRVhUMl9UT1BESVJfRkwsICJUIiwgIlRvcF9vZl9EaXJlY3RvcnlfSGllcmFyY2hpZXMiIH0sCisJeyBFWFQ0X0VYVEVOVFNfRkwsICJlIiwgIkV4dGVudHMiIH0sCisJeyBFWFQ0X0hVR0VfRklMRV9GTCwgImgiLCAiSHVnZV9maWxlIiB9LAorCXsgRlNfTk9DT1dfRkwsICJDIiwgIk5vX0NPVyIgfSwKKwl7IDAsIE5VTEwsIE5VTEwgfQorfTsKKwordm9pZCBwcmludF9mbGFncyAoRklMRSAqIGYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIG9wdGlvbnMpCit7CisJaW50IGxvbmdfb3B0ID0gKG9wdGlvbnMgJiBQRk9QVF9MT05HKTsKKwlzdHJ1Y3QgZmxhZ3NfbmFtZSAqZnA7CisJaW50CWZpcnN0ID0gMTsKKworCWZvciAoZnAgPSBmbGFnc19hcnJheTsgZnAtPmZsYWcgIT0gMDsgZnArKykgeworCQlpZiAoZmxhZ3MgJiBmcC0+ZmxhZykgeworCQkJaWYgKGxvbmdfb3B0KSB7CisJCQkJaWYgKGZpcnN0KQorCQkJCQlmaXJzdCA9IDA7CisJCQkJZWxzZQorCQkJCQlmcHV0cygiLCAiLCBmKTsKKwkJCQlmcHV0cyhmcC0+bG9uZ19uYW1lLCBmKTsKKwkJCX0gZWxzZQorCQkJCWZwdXRzKGZwLT5zaG9ydF9uYW1lLCBmKTsKKwkJfSBlbHNlIHsKKwkJCWlmICghbG9uZ19vcHQpCisJCQkJZnB1dHMoIi0iLCBmKTsKKwkJfQorCX0KKwlpZiAobG9uZ19vcHQgJiYgZmlyc3QpCisJCWZwdXRzKCItLS0iLCBmKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGliL2UycC9wcy5jIGIvbGliL2UycC9wcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1N2Y4YTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZTJwL3BzLmMKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIHBzLmMJCQktIFByaW50IGZpbGVzeXN0ZW0gc3RhdGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQgIFJlbXkgQ2FyZCA8Y2FyZEBtYXNpLmlicC5mcj4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFib3JhdG9pcmUgTUFTSSwgSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisvKgorICogSGlzdG9yeToKKyAqIDkzLzEyLzIyCS0gQ3JlYXRpb24KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImUycC5oIgorCit2b2lkIHByaW50X2ZzX3N0YXRlIChGSUxFICogZiwgdW5zaWduZWQgc2hvcnQgc3RhdGUpCit7CisJaWYgKHN0YXRlICYgRVhUMl9WQUxJRF9GUykKKwkJZnByaW50ZiAoZiwgIiBjbGVhbiIpOworCWVsc2UKKwkJZnByaW50ZiAoZiwgIiBub3QgY2xlYW4iKTsKKwlpZiAoc3RhdGUgJiBFWFQyX0VSUk9SX0ZTKQorCQlmcHJpbnRmIChmLCAiIHdpdGggZXJyb3JzIik7Cit9CmRpZmYgLS1naXQgYS9saWIvZTJwL3NldGZsYWdzLmMgYi9saWIvZTJwL3NldGZsYWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY2YTNlMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lMnAvc2V0ZmxhZ3MuYwpAQCAtMCwwICsxLDc3IEBACisvKgorICogc2V0ZmxhZ3MuYwkJLSBTZXQgYSBmaWxlIGZsYWdzIG9uIGFuIGV4dDIgZmlsZSBzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQgIFJlbXkgQ2FyZCA8Y2FyZEBtYXNpLmlicC5mcj4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFib3JhdG9pcmUgTUFTSSwgSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisvKgorICogSGlzdG9yeToKKyAqIDkzLzEwLzMwCS0gQ3JlYXRpb24KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaWYgSEFWRV9FWFQyX0lPQ1RMUworI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJlMnAuaCIKKworLyoKKyAqIERlYWwgd2l0aCBsYW1lIGdsaWJjJ3MgdGhhdCBkZWZpbmUgdGhpcyBmdW5jdGlvbiB3aXRob3V0IGFjdHVhbGx5CisgKiBpbXBsZW1lbnRpbmcgaXQuICBDYW4geW91IHNheSAiYXR0cmFjdGl2ZSBudWlzYW5jZSIsIGJveXMgYW5kIGdpcmxzPworICogSSBrbmV3IHlvdSBjb3VsZCEKKyAqLworI2lmZGVmIF9fbGludXhfXworI3VuZGVmIEhBVkVfQ0hGTEFHUworI2VuZGlmCisKK2ludCBzZXRmbGFncyAoaW50IGZkLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworI2lmIEhBVkVfQ0hGTEFHUworCXVuc2lnbmVkIGxvbmcgYnNkX2ZsYWdzID0gMDsKKworI2lmZGVmIFVGX0lNTVVUQUJMRQorCWlmIChmbGFncyAmIEVYVDJfSU1NVVRBQkxFX0ZMKQorCQlic2RfZmxhZ3MgfD0gVUZfSU1NVVRBQkxFOworI2VuZGlmCisjaWZkZWYgVUZfQVBQRU5ECisJaWYgKGZsYWdzICYgRVhUMl9BUFBFTkRfRkwpCisJCWJzZF9mbGFncyB8PSBVRl9BUFBFTkQ7CisjZW5kaWYKKyNpZmRlZiBVRl9OT0RVTVAKKwlpZiAoZmxhZ3MgJiBFWFQyX05PRFVNUF9GTCkKKwkJYnNkX2ZsYWdzIHw9IFVGX05PRFVNUDsKKyNlbmRpZgorCisJcmV0dXJuIGZjaGZsYWdzIChmZCwgYnNkX2ZsYWdzKTsKKyNlbHNlIC8qICEgSEFWRV9DSEZMQUdTICovCisjaWYgSEFWRV9FWFQyX0lPQ1RMUworCXN0cnVjdCBzdGF0IGJ1ZjsKKwlpbnQJZjsKKworCWlmICghZnN0YXQoZmQsICZidWYpICYmCisJICAgICFTX0lTUkVHKGJ1Zi5zdF9tb2RlKSAmJiAhU19JU0RJUihidWYuc3RfbW9kZSkpIHsKKwkJZXJybm8gPSBFT1BOT1RTVVBQOworCQlyZXR1cm4gLTE7CisJfQorCWYgPSAoaW50KSBmbGFnczsKKworCXJldHVybiBpb2N0bChmZCwgRVhUMl9JT0NfU0VURkxBR1MsICZmKTsKKyNlbHNlCisJZXJybm8gPSBFT1BOT1RTVVBQOworCXJldHVybiAtMTsKKyNlbmRpZiAvKiBIQVZFX0VYVDJfSU9DVExTICovCisjZW5kaWYgLyogSEFWRV9DSEZMQUdTICovCit9CmRpZmYgLS1naXQgYS9saWIvZTJwL3NldHZlcnNpb24uYyBiL2xpYi9lMnAvc2V0dmVyc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMjgzNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZTJwL3NldHZlcnNpb24uYwpAQCAtMCwwICsxLDM5IEBACisvKgorICogc2V0dmVyc2lvbi5jCQktIFNldCBhIGZpbGUgdmVyc2lvbiBvbiBhbiBleHQyIGZpbGUgc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0ICBSZW15IENhcmQgPGNhcmRAbWFzaS5pYnAuZnI+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYm9yYXRvaXJlIE1BU0ksIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqIEhpc3Rvcnk6CisgKiA5My8xMC8zMAktIENyZWF0aW9uCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworI2luY2x1ZGUgImUycC5oIgorCitpbnQgc2V0dmVyc2lvbiAoaW50IGZkLCB1bnNpZ25lZCBsb25nIHZlcnNpb24pCit7CisjaWYgSEFWRV9FWFQyX0lPQ1RMUworCWludCB2ZXI7CisKKwl2ZXIgPSAoaW50KSB2ZXJzaW9uOworCXJldHVybiBpb2N0bCAoZmQsIEVYVDJfSU9DX1NFVFZFUlNJT04sICZ2ZXIpOworI2Vsc2UgLyogISBIQVZFX0VYVDJfSU9DVExTICovCisJZXh0ZXJuIGludCBlcnJubzsKKwllcnJubyA9IEVPUE5PVFNVUFA7CisJcmV0dXJuIC0xOworI2VuZGlmIC8qICEgSEFWRV9FWFQyX0lPQ1RMUyAqLworfQpkaWZmIC0tZ2l0IGEvbGliL2UycC91dWlkLmMgYi9saWIvZTJwL3V1aWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTAyMDkyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2UycC91dWlkLmMKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIHV1aWQuYyAtLSB1dGlsaXR5IHJvdXRpbmVzIGZvciBtYW5pcHVsYXRpbmcgVVVJRCdzLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJfdHlwZXMuaD4KKworI2luY2x1ZGUgImUycC5oIgorCitzdHJ1Y3QgdXVpZCB7CisJX191MzIJdGltZV9sb3c7CisJX191MTYJdGltZV9taWQ7CisJX191MTYJdGltZV9oaV9hbmRfdmVyc2lvbjsKKwlfX3UxNgljbG9ja19zZXE7CisJX191OAlub2RlWzZdOworfTsKKworLyogUmV0dXJucyAxIGlmIHRoZSB1dWlkIGlzIHRoZSBOVUxMIHV1aWQgKi8KK2ludCBlMnBfaXNfbnVsbF91dWlkKHZvaWQgKnV1KQoreworCV9fdTggCSpjcDsKKwlpbnQJaTsKKworCWZvciAoaT0wLCBjcCA9IHV1OyBpIDwgMTY7IGkrKykKKwkJaWYgKCpjcCsrKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGUycF91bnBhY2tfdXVpZCh2b2lkICppbiwgc3RydWN0IHV1aWQgKnV1KQoreworCV9fdTgJKnB0ciA9IGluOworCV9fdTMyCXRtcDsKKworCXRtcCA9ICpwdHIrKzsKKwl0bXAgPSAodG1wIDw8IDgpIHwgKnB0cisrOworCXRtcCA9ICh0bXAgPDwgOCkgfCAqcHRyKys7CisJdG1wID0gKHRtcCA8PCA4KSB8ICpwdHIrKzsKKwl1dS0+dGltZV9sb3cgPSB0bXA7CisKKwl0bXAgPSAqcHRyKys7CisJdG1wID0gKHRtcCA8PCA4KSB8ICpwdHIrKzsKKwl1dS0+dGltZV9taWQgPSB0bXA7CisKKwl0bXAgPSAqcHRyKys7CisJdG1wID0gKHRtcCA8PCA4KSB8ICpwdHIrKzsKKwl1dS0+dGltZV9oaV9hbmRfdmVyc2lvbiA9IHRtcDsKKworCXRtcCA9ICpwdHIrKzsKKwl0bXAgPSAodG1wIDw8IDgpIHwgKnB0cisrOworCXV1LT5jbG9ja19zZXEgPSB0bXA7CisKKwltZW1jcHkodXUtPm5vZGUsIHB0ciwgNik7Cit9CisKK3ZvaWQgZTJwX3V1aWRfdG9fc3RyKHZvaWQgKnV1LCBjaGFyICpvdXQpCit7CisJc3RydWN0IHV1aWQgdXVpZDsKKworCWUycF91bnBhY2tfdXVpZCh1dSwgJnV1aWQpOworCXNwcmludGYob3V0LAorCQkiJTA4eC0lMDR4LSUwNHgtJTAyeCUwMngtJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IiwKKwkJdXVpZC50aW1lX2xvdywgdXVpZC50aW1lX21pZCwgdXVpZC50aW1lX2hpX2FuZF92ZXJzaW9uLAorCQl1dWlkLmNsb2NrX3NlcSA+PiA4LCB1dWlkLmNsb2NrX3NlcSAmIDB4RkYsCisJCXV1aWQubm9kZVswXSwgdXVpZC5ub2RlWzFdLCB1dWlkLm5vZGVbMl0sCisJCXV1aWQubm9kZVszXSwgdXVpZC5ub2RlWzRdLCB1dWlkLm5vZGVbNV0pOworfQorCitjb25zdCBjaGFyICplMnBfdXVpZDJzdHIodm9pZCAqdXUpCit7CisJc3RhdGljIGNoYXIgYnVmWzgwXTsKKworCWlmIChlMnBfaXNfbnVsbF91dWlkKHV1KSkKKwkJcmV0dXJuICI8bm9uZT4iOworCWUycF91dWlkX3RvX3N0cih1dSwgYnVmKTsKKwlyZXR1cm4gYnVmOworfQorCmRpZmYgLS1naXQgYS9saWIvZXQvTWFrZWZpbGUuaW4gYi9saWIvZXQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjM2JhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDE4MyBAQAorIworIyBNYWtlZmlsZSBmb3IgbGliL2V0CisjCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACit0b3BfYnVpbGRkaXIgPSAuLi8uLgorbXlfZGlyID0gbGliL2V0CitJTlNUQUxMID0gQElOU1RBTExACisKK0RFUF9NQUtFRklMRSA9ICQoREVQX0xJQl9NQUtFRklMRVMpCisKK0BNQ09ORklHQAorCithbGw6OiBjb21waWxlX2V0IGNvbV9lcnIucGMKKworT0JKUz0gZXJyb3JfbWVzc2FnZS5vIGV0X25hbWUubyBpbml0X2V0Lm8gY29tX2Vyci5vIGNvbV9yaWdodC5vCitTUkNTID0gJChzcmNkaXIpL2Vycm9yX21lc3NhZ2UuYyAkKHNyY2RpcikvZXRfbmFtZS5jICQoc3JjZGlyKS9pbml0X2V0LmMgXAorCSQoc3JjZGlyKS9jb21fZXJyLmMgJChzcmNkaXIpL2NvbV9yaWdodC5jCisKK0hGSUxFUz0gY29tX2Vyci5oCitTSEFSRV9GSUxFUz0gZXRfYy5hd2sgZXRfaC5hd2sKKworTElCUkFSWT0gbGliY29tX2VycgorTElCRElSPSBldAorCitFTEZfVkVSU0lPTiA9IDIuMQorRUxGX1NPX1ZFUlNJT04gPSAyCitFTEZfSU1BR0UgPSBsaWJjb21fZXJyCitFTEZfTVlESVIgPSBldAorRUxGX0lOU1RBTExfRElSID0gJChyb290X2xpYmRpcikKK0VMRl9PVEhFUl9MSUJTID0gQFNFTV9JTklUX0xJQkAKKworQlNETElCX1ZFUlNJT04gPSAxLjEKK0JTRExJQl9JTUFHRSA9IGxpYmNvbV9lcnIKK0JTRExJQl9NWURJUiA9IGV0CitCU0RMSUJfSU5TVEFMTF9ESVIgPSAkKHJvb3RfbGliZGlyKQorCisjCisjIHdoYXQgdG8gYnVpbGQuLi4KKyMKKy5jLm86CisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCSQoUSkgJChDSEVDS19DTUQpICQoQUxMX0NGTEFHUykgJDwKK0BQUk9GSUxFX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1nIC1wZyAtbyBwcm9maWxlZC8kKi5vIC1jICQ8CitARUxGX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1mUElDIC1vIGVsZnNoYXJlZC8kKi5vIC1jICQ8CitAQlNETElCX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpICQoQlNETElCX1BJQ19GTEFHKSAtbyBwaWMvJCoubyAtYyAkPAorCitATUFLRUZJTEVfTElCUkFSWUAKK0BNQUtFRklMRV9FTEZACitATUFLRUZJTEVfQlNETElCQAorQE1BS0VGSUxFX1BST0ZJTEVACisKK2NvbXBpbGVfZXQ6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9jb21waWxlX2V0LnNoLmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFKSAkKHNyY2RpcikvY29tcGlsZV9ldC5zaC5pbiBjb21waWxlX2V0CisJJChRKSAkKENITU9EKSAreCBjb21waWxlX2V0CisKK0RWST10ZXhpMmR2aQorRFZJUFM9ZHZpcHMgLW8gIiRAIgorSU5GTz1ATUFLRUlORk9ACitIVE1MPW1ha2VpbmZvIC0taHRtbCAtLW5vLXNwbGl0CitQUzJQREY9cHMycGRmCisKK2NvbV9lcnIucHMgOiBjb21fZXJyLmR2aQorY29tX2Vyci5kdmk6IGNvbV9lcnIudGV4aW5mbworCitjb21fZXJyLmluZm86ICQoc3JjZGlyKS9jb21fZXJyLnRleGluZm8KKwkkKEUpICIJTUFLRUlORk8gJEAiCisJLSQoUSkgJChJTkZPKSAkKHNyY2RpcikvY29tX2Vyci50ZXhpbmZvCisKK2NvbV9lcnIuZHZpOiAkKHNyY2RpcikvY29tX2Vyci50ZXhpbmZvCisJJChFKSAiCVRFWEkyRFZJICRAIgorCS0kKFEpICQoRFZJKSAkKHNyY2RpcikvY29tX2Vyci50ZXhpbmZvCisKK2NvbV9lcnIucHM6IGNvbV9lcnIuZHZpCisJJChFKSAiCURWSVBTICRAIgorCS0kKFEpICQoRFZJUFMpIGNvbV9lcnIuZHZpCisKK2NvbV9lcnIucGRmOiBjb21fZXJyLnBzCisJJChFKSAiCVBTMlBERiAkQCIKKwktJChRKSAkKFBTMlBERikgY29tX2Vyci5wcworCitjb21fZXJyLmh0bWw6ICQoc3JjZGlyKS9jb21fZXJyLnRleGluZm8KKwkkKEUpICIJTUFLRUlORk8gJEAiCisJLSQoUSkgJChIVE1MKSAkKHNyY2RpcikvY29tX2Vyci50ZXhpbmZvCisKK2NvbV9lcnIucGM6ICQoc3JjZGlyKS9jb21fZXJyLnBjLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJJChFKSAiCUNPTkZJRy5TVEFUVVMgJEAiCisJJChRKSBjZCAkKHRvcF9idWlsZGRpcik7IENPTkZJR19GSUxFUz1saWIvZXQvY29tX2Vyci5wYyAuL2NvbmZpZy5zdGF0dXMKKworI2xpYmNvbV9lcnIubzoJJChMSUJPQkpTKQorIwkkKExEKSAtciAtcyAtbyBsaWJjb21fZXJyLm8gJChMSUJPQkpTKQorIwljaG1vZCAteCBsaWJjb21fZXJyLm8KKworVEFHUzoJJChTUkNTKQorCSQoVEFHUykgJChTUkNTKQorCitpbnN0YWxsZGlyczo6CisJJChFKSAiCU1LSU5TVEFMTERJUlMgJChsaWJkaXIpICQoaW5jbHVkZWRpcikvZXQgJChkYXRhZGlyKS9ldCAkKGJpbmRpcikgJChtYW4xZGlyKSAkKG1hbjNkaXIpIgorCSQoUSkgJChNS0lOU1RBTExESVJTKSAkKERFU1RESVIpJChsaWJkaXIpIFwKKwkJJChERVNURElSKSQoaW5jbHVkZWRpcikvZXQgJChERVNURElSKSQoZGF0YWRpcikvZXQgXAorCQkkKERFU1RESVIpJChiaW5kaXIpICQoREVTVERJUikkKG1hbjFkaXIpIFwKKwkJJChERVNURElSKSQobWFuM2RpcikgJChERVNURElSKSQocGtnY29uZmlnZGlyKQorCitpbnN0YWxsOjogY29tcGlsZV9ldCBsaWJjb21fZXJyLmEgJChIRklMRVMpIGluc3RhbGxkaXJzIGNvbV9lcnIucGMKKwkkKEUpICIJSU5TVEFMTF9EQVRBICQobGliZGlyKS9saWJjb21fZXJyLmEiCisJJChRKSAkKElOU1RBTExfREFUQSkgbGliY29tX2Vyci5hICQoREVTVERJUikkKGxpYmRpcikvbGliY29tX2Vyci5hCisJLSQoUSkgJChSQU5MSUIpICQoREVTVERJUikkKGxpYmRpcikvbGliY29tX2Vyci5hCisJJChRKSAkKENITU9EKSAkKExJQk1PREUpICQoREVTVERJUikkKGxpYmRpcikvbGliY29tX2Vyci5hCisJJChRKSBmb3IgaSBpbiAkKEhGSUxFUyk7IGRvIFwKKwkJZWNobyAiCUlOU1RBTExfREFUQSAkKGluY2x1ZGVkaXIpL2V0LyQkaSI7IFwKKwkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGkgJChERVNURElSKSQoaW5jbHVkZWRpcikvZXQvJCRpOyBcCisJZG9uZQorCSQoUSkgKGNkICQoREVTVERJUikkKGluY2x1ZGVkaXIpIDtcCisJCSQoTE4pICQoTElOS19JTlNUQUxMX0ZMQUdTKSBldC9jb21fZXJyLmggLiApCisJJChRKSBmb3IgaSBpbiAkKFNIQVJFX0ZJTEVTKTsgZG8gXAorCQllY2hvICIJSU5TVEFMTF9EQVRBICQoZGF0YWRpcikvZXQvJCRpIjsgXAorCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkaSAkKERFU1RESVIpJChkYXRhZGlyKS9ldC8kJGk7IFwKKwlkb25lCisJJChFKSAiCUlOU1RBTExfU0NSSVBUICQoYmluZGlyKS9jb21waWxlX2V0IgorCSQoUSkgJChJTlNUQUxMX1NDUklQVCkgY29tcGlsZV9ldCAkKERFU1RESVIpJChiaW5kaXIpL2NvbXBpbGVfZXQKKwkkKEUpICIJSU5TVEFMTF9EQVRBICQobWFuM2RpcikvY29tX2Vyci4zIgorCSQoUSkgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9jb21fZXJyLjMgJChERVNURElSKSQobWFuM2RpcikvY29tX2Vyci4zCisJJChFKSAiCUlOU1RBTExfREFUQSAkKG1hbjFkaXIpL2NvbXBpbGVfZXQuMSIKKwkkKFEpICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvY29tcGlsZV9ldC4xIFwKKwkJCSQoREVTVERJUikkKG1hbjFkaXIpL2NvbXBpbGVfZXQuMQorCSQoRSkgIglJTlNUQUxMX0RBVEEgJChwa2djb25maWdkaXIpL2NvbV9lcnIucGMiCisJJChRKSAkKElOU1RBTExfREFUQSkgY29tX2Vyci5wYyAkKERFU1RESVIpJChwa2djb25maWdkaXIpL2NvbV9lcnIucGMKKwordW5pbnN0YWxsOjoKKwkkKFJNKSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmNvbV9lcnIuYSBcCisJCSQoREVTVERJUikkKGJpbmRpcikvY29tcGlsZV9ldCBcCisJCSQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikvY29tX2Vyci5wYworCSQoUk0pIC1yZiAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9ldCAkKERFU1RESVIpJChkYXRhZGlyKS9ldAorCitjaGVjazo6IGNvbXBpbGVfZXQKKwlmb3IgaSBpbiAkKHNyY2RpcikvdGVzdF9jYXNlcy8qLmV0IDsgZG8gXAorCQl0PWBiYXNlbmFtZSAkJGkgfCBzZWQgLWUgJ3MvLmV0Ly8nYDsgXAorCQkuL2NvbXBpbGVfZXQgLS1idWlsZC10cmVlICQkaSA7IFwKKwkJZGlmZiAtYyAkKHNyY2RpcikvdGVzdF9jYXNlcy8kJHQuYyAkJHQuYyA+ICQkdC5mYWlsZWQ7IFwKKwkJaWYgWyAkJD8gLW5lIDAgXTsgdGhlbiBlY2hvIFRlc3QgY2FzZSAkJHQgZmFpbGVkOyBleGl0IDEgOyBmaSA7IFwKKwkJZGlmZiAtYyAkKHNyY2RpcikvdGVzdF9jYXNlcy8kJHQuaCAkJHQuaCA+PiAkJHQuZmFpbGVkOyBcCisJCWlmIFsgJCQ/IC1uZSAwIF07IHRoZW4gZWNobyBUZXN0IGNhc2UgJCR0IGZhaWxlZDsgZXhpdCAxIDsgZmkgOyBcCisJCSQoUk0pIC1mICQkdC5jICQkdC5oICQkdC5mYWlsZWQ7IFwKKwkJZWNobyAiVGVzdCBjYXNlICQkdCBzdWNjZWVkZWQiIDsgXAorCWRvbmUKKworY2xlYW46OgorCSQoUk0pIC1mIGNvbXBpbGVfZXQgbGliY29tX2Vyci5hIGxpYmNvbV9lcnJfcC5hIGNvbV9lcnIuaW5mbworCSQoUk0pIC1mICQoT0JKUykgcHJvZmlsZWQvKgorCSQoUk0pIC1mICp+IFwjKiAqLmJhayAqLm90bCAqLmF1eCAqLnRvYyAqLlBTICouZHZpICoucHMgVEFHUyAqLmxuIFwKKwkJKi5odG1sICouY3AgKi5mbiAqLmZucyAqLmt5ICoubG9nICoucGMgKi5wZyAqLnRvYyAqLnRwICoudnIgXAorCQkqLnBkZgorCSQoUk0pIC1mIC4uL2xpYmNvbV9lcnIuYSAuLi9saWJjb21fZXJyX3AuYQorCittb3N0bHljbGVhbjo6IGNsZWFuCitkaXN0Y2xlYW46OiBjbGVhbgorCSQoUk0pIC1mIC5kZXBlbmQgTWFrZWZpbGUgY29tX2Vyci5wYyBcCisJCSQoc3JjZGlyKS9UQUdTICQoc3JjZGlyKS9NYWtlZmlsZS5pbi5vbGQKKworJChPQkpTKTogc3ViZGlycworCisjICsrKyBEZXBlbmRlbmN5IGxpbmUgZWF0ZXIgKysrCisjIAorIyBNYWtlZmlsZSBkZXBlbmRlbmNpZXMgZm9sbG93LiAgVGhpcyBtdXN0IGJlIHRoZSBsYXN0IHNlY3Rpb24gaW4KKyMgdGhlIE1ha2VmaWxlLmluIGZpbGUKKyMKK2Vycm9yX21lc3NhZ2UubzogJChzcmNkaXIpL2Vycm9yX21lc3NhZ2UuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2NvbV9lcnIuaCAkKHNyY2RpcikvZXJyb3JfdGFibGUuaCBcCisgJChzcmNkaXIpL2ludGVybmFsLmgKK2V0X25hbWUubzogJChzcmNkaXIpL2V0X25hbWUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2NvbV9lcnIuaCAkKHNyY2RpcikvZXJyb3JfdGFibGUuaCBcCisgJChzcmNkaXIpL2ludGVybmFsLmgKK2luaXRfZXQubzogJChzcmNkaXIpL2luaXRfZXQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2NvbV9lcnIuaCAkKHNyY2RpcikvZXJyb3JfdGFibGUuaAorY29tX2Vyci5vOiAkKHNyY2RpcikvY29tX2Vyci5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvY29tX2Vyci5oICQoc3JjZGlyKS9lcnJvcl90YWJsZS5oIFwKKyAkKHNyY2RpcikvaW50ZXJuYWwuaAorY29tX3JpZ2h0Lm86ICQoc3JjZGlyKS9jb21fcmlnaHQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2NvbV9lcnIuaCAkKHNyY2RpcikvZXJyb3JfdGFibGUuaApkaWZmIC0tZ2l0IGEvbGliL2V0L2NvbV9lcnIuMyBiL2xpYi9ldC9jb21fZXJyLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEyNWYwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC9jb21fZXJyLjMKQEAgLTAsMCArMSw4NyBAQAorLlwiIENvcHlyaWdodCAoYykgMTk4OCBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LAorLlwiIFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZC4gIAorLlwiCisuVEggQ09NX0VSUiAzICIyMiBOb3YgMTk4OCIgU0lQQgorLlNIIE5BTUUKK2NvbV9lcnIgXC0gY29tbW9uIGVycm9yIGRpc3BsYXkgcm91dGluZQorLlNIIFNZTk9QU0lTCisubmYKKyAjaW5jbHVkZSA8ZXQvY29tX2Vyci5oPgordm9pZCAoKlxmSXByb2NcZlIpIChjb25zdCBjaGFyICosIGxvbmcsIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisuUFAKK3ZvaWQgY29tX2VyciAoY29uc3QgY2hhciAqd2hvYW1pLCBsb25nIGNvZGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKy5QUAorcHJvYyA9IHNldF9jb21fZXJyX2hvb2sgKHByb2MpOworLlBQCitwcm9jID0gcmVzZXRfY29tX2Vycl9ob29rICgpOworLlBQCit2b2lkIGluaXRpYWxpemVfWFhYWF9lcnJvcl90YWJsZSAoKTsKKy5maQorLlNIIERFU0NSSVBUSU9OCisuSSBDb21fZXJyCitkaXNwbGF5cyBhbiBlcnJvciBtZXNzYWdlIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KKy5JIHN0ZGVycgorKHNlZQorLklSIHN0ZGlvICgzUykpCitjb21wb3NlZCBvZiB0aGUKKy5JIHdob2FtaQorc3RyaW5nLCB3aGljaCBzaG91bGQgc3BlY2lmeSB0aGUgcHJvZ3JhbSBuYW1lIG9yIHNvbWUgc3VicG9ydGlvbiBvZgorYSBwcm9ncmFtLCBmb2xsb3dlZCBieSBhbiBlcnJvciBtZXNzYWdlIGdlbmVyYXRlZCBmcm9tIHRoZQorLkkgY29kZQordmFsdWUgKGRlcml2ZWQgZnJvbQorLklSIGNvbXBpbGVfZXQgKDEpKSwKK2FuZCBhIHN0cmluZyBwcm9kdWNlZCB1c2luZyB0aGUKKy5JIGZvcm1hdAorc3RyaW5nIGFuZCBhbnkgZm9sbG93aW5nIGFyZ3VtZW50cywgaW4gdGhlIHNhbWUgc3R5bGUgYXMKKy5JUiBmcHJpbnRmICgzKS4KKworVGhlIGJlaGF2aW9yIG9mCisuSSBjb21fZXJyCitjYW4gYmUgbW9kaWZpZWQgdXNpbmcKKy5JIHNldF9jb21fZXJyX2hvb2s7Cit0aGlzIGRlZmluZXMgYSBwcm9jZWR1cmUgd2hpY2ggaXMgY2FsbGVkIHdpdGggdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8KKy5JIGNvbV9lcnIsCitpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGludGVybmFsIHByb2NlZHVyZSB3aGljaCBzZW5kcyB0aGUgZm9ybWF0dGVkCit0ZXh0IHRvIGVycm9yIG91dHB1dC4gIFRodXMgdGhlIGVycm9yIG1lc3NhZ2VzIGZyb20gYSBwcm9ncmFtIGNhbiBhbGwKK2Vhc2lseSBiZSBkaXZlcnRlZCB0byBhbm90aGVyIGZvcm0gb2YgZGlhZ25vc3RpYyBsb2dnaW5nLCBzdWNoIGFzCisuSVIgc3lzbG9nICgzKS4KKy5JIFJlc2V0X2NvbV9lcnJfaG9vaworbWF5IGJlIHVzZWQgdG8gcmVzdG9yZSB0aGUgYmVoYXZpb3Igb2YKKy5JIGNvbV9lcnIKK3RvIGl0cyBkZWZhdWx0IGZvcm0uICBCb3RoIHByb2NlZHVyZXMgcmV0dXJuIHRoZSBwcmV2aW91cyBgYGhvb2snJwordmFsdWUuICBUaGVzZSBgYGhvb2snJyBwcm9jZWR1cmVzIG11c3QgaGF2ZSB0aGUgZGVjbGFyYXRpb24gZ2l2ZW4gZm9yCisuSSBwcm9jCithYm92ZSBpbiB0aGUgc3lub3BzaXMuCisKK1RoZQorLkkgaW5pdGlhbGl6ZV9YWFhYX2Vycm9yX3RhYmxlCityb3V0aW5lIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkKKy5JUiBjb21waWxlX2V0ICgxKQorZnJvbSBhIHNvdXJjZSBmaWxlIGNvbnRhaW5pbmcgbmFtZXMgYW5kIGFzc29jaWF0ZWQgc3RyaW5ncy4gIEVhY2gKK3RhYmxlIGhhcyBhIG5hbWUgb2YgdXAgdG8gZm91ciBjaGFyYWN0ZXJzLCB3aGljaCBpcyB1c2VkIGluIHBsYWNlIG9mCit0aGUKKy5CIFhYWFgKK2luIHRoZSBuYW1lIG9mIHRoZSByb3V0aW5lLiAgVGhlc2Ugcm91dGluZXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUKK2FueSBvZiB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBjb2RlcyBhcmUgdXNlZCwgc28gdGhhdCB0aGUKKy5JIGNvbV9lcnIKK2xpYnJhcnkgd2lsbCByZWNvZ25pemUgZXJyb3IgY29kZXMgZnJvbSB0aGVzZSB0YWJsZXMgd2hlbiB0aGV5IGFyZQordXNlZC4KKworVGhlCisuQiBjb21fZXJyLmgKK2hlYWRlciBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBhbnkgc291cmNlIGZpbGUgdGhhdCB1c2VzIHJvdXRpbmVzCitmcm9tIHRoZQorLkkgY29tX2VycgorbGlicmFyeTsgZXhlY3V0YWJsZSBmaWxlcyBtdXN0IGJlIGxpbmtlZCB1c2luZworLkkgYGAtbGNvbV9lcnInJworaW4gb3JkZXIgdG8gY2F1c2UgdGhlCisuSSBjb21fZXJyCitsaWJyYXJ5IHRvIGJlIGluY2x1ZGVkLgorCisuXCIgLklSIGZvciBtYW51YWwgZW50cmllcworLlwiIC5QUCBmb3IgcGFyYWdyYXBoIGJyZWFrcworCisuU0ggIlNFRSBBTFNPIgorY29tcGlsZV9ldCAoMSksIHN5c2xvZyAoMykuCisKK0tlbiBSYWVidXJuLCAiQSBDb21tb24gRXJyb3IgRGVzY3JpcHRpb24gTGlicmFyeSBmb3IgVU5JWCIuCmRpZmYgLS1naXQgYS9saWIvZXQvY29tX2Vyci5jIGIvbGliL2V0L2NvbV9lcnIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzg5OThhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V0L2NvbV9lcnIuYwpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTg3LCAxOTg4IGJ5IE1JVCBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9URVJNSU9TX0gKKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlICJjb21fZXJyLmgiCisjaW5jbHVkZSAiZXJyb3JfdGFibGUuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitzdGF0aWMgdm9pZAorZGVmYXVsdF9jb21fZXJyX3Byb2MgKGNvbnN0IGNoYXIgKndob2FtaSwgZXJyY29kZV90IGNvZGUsIGNvbnN0CisJCSAgICAgIGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQorCUNPTV9FUlJfQVRUUigoZm9ybWF0KHByaW50ZiwgMywgMCkpKTsKKworc3RhdGljIHZvaWQKK2RlZmF1bHRfY29tX2Vycl9wcm9jIChjb25zdCBjaGFyICp3aG9hbWksIGVycmNvZGVfdCBjb2RlLCBjb25zdAorCQkgICAgICBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKK3sKKyAgICBpbnQgZG9fY3IgPSAxLCBmZCA9IGZpbGVubyhzdGRlcnIpOworCisgICAgaWYgKHdob2FtaSkgeworCWZwdXRzKHdob2FtaSwgc3RkZXJyKTsKKwlmcHV0cygiOiAiLCBzdGRlcnIpOworICAgIH0KKyAgICBpZiAoY29kZSkgeworCWZwdXRzKGVycm9yX21lc3NhZ2UoY29kZSksIHN0ZGVycik7CisJZnB1dHMoIiAiLCBzdGRlcnIpOworICAgIH0KKyAgICBpZiAoZm10KSB7CisgICAgICAgIHZmcHJpbnRmIChzdGRlcnIsIGZtdCwgYXJncyk7CisgICAgfQorICAgIGlmICghaXNhdHR5KGZkKSkKKwlkb19jciA9IDA7CisjaWZkZWYgSEFWRV9URVJNSU9TX0gKKyAgICBlbHNlIHsKKwlzdHJ1Y3QgdGVybWlvcyB0OworCisJaWYgKCh0Y2dldGF0dHIoZmQsICZ0KSkgPT0gMCAmJgorCSAgICAodC5jX29mbGFnICYgT1BPU1QpICYmICh0LmNfb2ZsYWcgJiBPTkxDUikpCisJZG9fY3IgPSAwOworICAgIH0KKyNlbmRpZgorICAgIGlmIChkb19jcikKKwlmcHV0YygnXHInLCBzdGRlcnIpOworICAgIGZwdXRjKCdcbicsIHN0ZGVycik7CisgICAgZmZsdXNoKHN0ZGVycik7Cit9CisKK3R5cGVkZWYgdm9pZCAoKmVycmYpIChjb25zdCBjaGFyICosIGVycmNvZGVfdCwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKKworZXJyZiBjb21fZXJyX2hvb2sgPSBkZWZhdWx0X2NvbV9lcnJfcHJvYzsKKwordm9pZCBjb21fZXJyX3ZhIChjb25zdCBjaGFyICp3aG9hbWksIGVycmNvZGVfdCBjb2RlLCBjb25zdCBjaGFyICpmbXQsCisJCSB2YV9saXN0IGFyZ3MpCit7CisgICAgKCpjb21fZXJyX2hvb2spICh3aG9hbWksIGNvZGUsIGZtdCwgYXJncyk7Cit9CisKK3ZvaWQgY29tX2VyciAoY29uc3QgY2hhciAqd2hvYW1pLAorCSAgICAgIGVycmNvZGVfdCBjb2RlLAorCSAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICAgIHZhX2xpc3QgcHZhcjsKKworICAgIGlmICghY29tX2Vycl9ob29rKQorCWNvbV9lcnJfaG9vayA9IGRlZmF1bHRfY29tX2Vycl9wcm9jOworICAgIHZhX3N0YXJ0KHB2YXIsIGZtdCk7CisgICAgY29tX2Vycl92YSAod2hvYW1pLCBjb2RlLCBmbXQsIHB2YXIpOworICAgIHZhX2VuZChwdmFyKTsKK30KKworZXJyZiBzZXRfY29tX2Vycl9ob29rKGVycmYgbmV3X3Byb2MpCit7CisgICAgZXJyZiB4ID0gY29tX2Vycl9ob29rOworCisgICAgaWYgKG5ld19wcm9jKQorCWNvbV9lcnJfaG9vayA9IG5ld19wcm9jOworICAgIGVsc2UKKwljb21fZXJyX2hvb2sgPSBkZWZhdWx0X2NvbV9lcnJfcHJvYzsKKworICAgIHJldHVybiB4OworfQorCitlcnJmIHJlc2V0X2NvbV9lcnJfaG9vayh2b2lkKSB7CisgICAgZXJyZiB4ID0gY29tX2Vycl9ob29rOworICAgIGNvbV9lcnJfaG9vayA9IGRlZmF1bHRfY29tX2Vycl9wcm9jOworICAgIHJldHVybiB4OworfQpkaWZmIC0tZ2l0IGEvbGliL2V0L2NvbV9lcnIuaCBiL2xpYi9ldC9jb21fZXJyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhMzZlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC9jb21fZXJyLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIEhlYWRlciBmaWxlIGZvciBjb21tb24gZXJyb3IgZGVzY3JpcHRpb24gbGlicmFyeS4KKyAqCisgKiBDb3B5cmlnaHQgMTk4OCwgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkIG9mIHRoZQorICogTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqCisgKiBGb3IgY29weXJpZ2h0IGFuZCBkaXN0cmlidXRpb24gaW5mbywgc2VlIHRoZSBkb2N1bWVudGF0aW9uIHN1cHBsaWVkCisgKiB3aXRoIHRoaXMgcGFja2FnZS4KKyAqLworCisjaWYgIWRlZmluZWQoX19DT01fRVJSX0gpICYmICFkZWZpbmVkKF9fQ09NX0VSUl9IX18pCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBDT01fRVJSX0FUVFIoeCkgX19hdHRyaWJ1dGVfXyh4KQorI2Vsc2UKKyNkZWZpbmUgQ09NX0VSUl9BVFRSKHgpCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCit0eXBlZGVmIGxvbmcgZXJyY29kZV90OworCitzdHJ1Y3QgZXJyb3JfdGFibGUgeworCWNoYXIgY29uc3QgKiBjb25zdCAqIG1zZ3M7CisJbG9uZyBiYXNlOworCWludCBuX21zZ3M7Cit9Oworc3RydWN0IGV0X2xpc3Q7CisKK2V4dGVybiB2b2lkIGNvbV9lcnIgKGNvbnN0IGNoYXIgKiwgbG9uZywgY29uc3QgY2hhciAqLCAuLi4pCisJQ09NX0VSUl9BVFRSKChmb3JtYXQocHJpbnRmLCAzLCA0KSkpOworCitleHRlcm4gdm9pZCBjb21fZXJyX3ZhIChjb25zdCBjaGFyICp3aG9hbWksIGVycmNvZGVfdCBjb2RlLCBjb25zdCBjaGFyICpmbXQsCisJCSB2YV9saXN0IGFyZ3MpCisJQ09NX0VSUl9BVFRSKChmb3JtYXQocHJpbnRmLCAzLCAwKSkpOworCitleHRlcm4gY2hhciBjb25zdCAqZXJyb3JfbWVzc2FnZSAobG9uZyk7CitleHRlcm4gdm9pZCAoKmNvbV9lcnJfaG9vaykgKGNvbnN0IGNoYXIgKiwgbG9uZywgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKK2V4dGVybiB2b2lkICgqc2V0X2NvbV9lcnJfaG9vayAodm9pZCAoKikgKGNvbnN0IGNoYXIgKiwgbG9uZywKKwkJCQkJICBjb25zdCBjaGFyICosIHZhX2xpc3QpKSkKKwkoY29uc3QgY2hhciAqLCBsb25nLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworZXh0ZXJuIHZvaWQgKCpyZXNldF9jb21fZXJyX2hvb2sgKHZvaWQpKSAoY29uc3QgY2hhciAqLCBsb25nLAorCQkJCQkgIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CitleHRlcm4gaW50IGluaXRfZXJyb3JfdGFibGUoY29uc3QgY2hhciAqIGNvbnN0ICptc2dzLCBsb25nIGJhc2UsIGludCBjb3VudCk7CitleHRlcm4gY2hhciAqKCpzZXRfY29tX2Vycl9nZXR0ZXh0IChjaGFyICooKikgKGNvbnN0IGNoYXIgKikpKQorCShjb25zdCBjaGFyICopOworCitleHRlcm4gZXJyY29kZV90IGFkZF9lcnJvcl90YWJsZShjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgKiBldCk7CitleHRlcm4gZXJyY29kZV90IHJlbW92ZV9lcnJvcl90YWJsZShjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgKiBldCk7CitleHRlcm4gdm9pZCBhZGRfdG9fZXJyb3JfdGFibGUoc3RydWN0IGV0X2xpc3QgKm5ld190YWJsZSk7CisKKy8qIFByb3ZpZGVkIGZvciBIZWltZGFsbCBjb21wYXRpYmlsaXR5ICovCitleHRlcm4gY29uc3QgY2hhciAqY29tX3JpZ2h0KHN0cnVjdCBldF9saXN0ICpsaXN0LCBsb25nIGNvZGUpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbV9yaWdodF9yKHN0cnVjdCBldF9saXN0ICpsaXN0LCBsb25nIGNvZGUsIGNoYXIgKnN0ciwgc2l6ZV90IGxlbik7CitleHRlcm4gdm9pZCBpbml0aWFsaXplX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0LAorCQkJCSAgICAgY29uc3QgY2hhciAqKm1lc3NhZ2VzLAorCQkJCSAgICAgaW50IG51bV9lcnJvcnMsCisJCQkJICAgICBsb25nIGJhc2UpOworZXh0ZXJuIHZvaWQgZnJlZV9lcnJvcl90YWJsZShzdHJ1Y3QgZXRfbGlzdCAqZXQpOworCisvKiBQcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGNvbV9lcnIgbGlicmFyaWVzICovCitleHRlcm4gaW50IGV0X2xpc3RfbG9jayh2b2lkKTsKK2V4dGVybiBpbnQgZXRfbGlzdF91bmxvY2sodm9pZCk7CisKKyNkZWZpbmUgX19DT01fRVJSX0gKKyNkZWZpbmUgX19DT01fRVJSX0hfXworI2VuZGlmIC8qICFkZWZpbmVkKF9fQ09NX0VSUl9IKSAmJiAhZGVmaW5lZChfX0NPTV9FUlJfSF9fKSovCmRpZmYgLS1naXQgYS9saWIvZXQvY29tX2Vyci5wYy5pbiBiL2xpYi9ldC9jb21fZXJyLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZGY4YTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXQvY29tX2Vyci5wYy5pbgpAQCAtMCwwICsxLDEyIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAoraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKworTmFtZTogY29tX2VycgorRGVzY3JpcHRpb246IENvbW1vbiBlcnJvciBkZXNjcmlwdGlvbiBsaWJyYXJ5CitWZXJzaW9uOiBARTJGU1BST0dTX1ZFUlNJT05ACitSZXF1aXJlczoKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9L2V0IC1JJHtpbmNsdWRlZGlyfQorTGliczogLUwke2xpYmRpcn0gLWxjb21fZXJyCitMaWJzLnByaXZhdGU6IEBTRU1fSU5JVF9MSUJACmRpZmYgLS1naXQgYS9saWIvZXQvY29tX2Vyci50ZXhpbmZvIGIvbGliL2V0L2NvbV9lcnIudGV4aW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWQzZmNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V0L2NvbV9lcnIudGV4aW5mbwpAQCAtMCwwICsxLDUzMiBAQAorXGlucHV0IHRleGluZm8gQGMgLSotdGV4aW5mby0qLQorCitAYyAkSGVhZGVyJAorQGMgJFNvdXJjZSQKK0BjICRMb2NrZXIkCisKK0BjIE5vdGUgdGhhdCBhbHRob3VnaCB0aGlzIHNvdXJjZSBmaWxlIGlzIGluIHRleGluZm8gZm9ybWF0IChtb3JlCitAYyBvciBsZXNzKSwgaXQgaXMgbm90IHlldCBzdWl0YWJsZSBmb3IgdHVybmluZyBpbnRvIGFuIGBgaW5mbycnCitAYyBmaWxlLiAgU29ycnksIG1heWJlIG5leHQgdGltZS4KK0BjCitAYyBJbiBvcmRlciB0byBwcm9kdWNlIGhhcmRjb3B5IGRvY3VtZW50YXRpb24gZnJvbSBhIHRleGluZm8gZmlsZSwKK0BjIHJ1biBgYHRleCBjb21fZXJyLnRleGluZm8nJyB3aGljaCB3aWxsIGxvYWQgaW4gdGV4aW5mby50ZXgsCitAYyBwcm92aWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4gICh0ZXhpbmZvLnRleCBpcyBmcm9tIHRoZSBGcmVlCitAYyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQgaXMgdW5kZXIgZGlmZmVyZW50IGNvcHlyaWdodCByZXN0cmljdGlvbnMKK0BjIGZyb20gdGhlIHJlc3Qgb2YgdGhpcyBwYWNrYWdlLikKKworQHNldGZpbGVuYW1lIGNvbV9lcnIuaW5mbworQHNldHRpdGxlIEEgQ29tbW9uIEVycm9yIERlc2NyaXB0aW9uIExpYnJhcnkgZm9yIFVOSVgKKworQGlmaW5mbworQGRpcmNhdGVnb3J5IERldmVsb3BtZW50CitAZGlyZW50cnkKKyogQ29tX2VycjogKGNvbV9lcnIpLiAgIEEgQ29tbW9uIEVycm9yIERlc2NyaXB0aW9uIExpYnJhcnkgZm9yIFVOSVguCitAZW5kIGRpcmVudHJ5CitAZW5kIGlmaW5mbworCitAYyBzbWFsbGJvb2sKKworQGlmdGV4CitAZmluYWxvdXQKK0BlbmQgaWZ0ZXgKKworQGlmaW5mbworVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgdXNlIG9mIHRoZSBDb21tb24gRXJyb3IgRGVzY3JpcHRpb24gbGlicmFyeS4KKworQ29weXJpZ2h0IChDKSAxOTg3LCAxOTg4IFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZCBvZiB0aGUKK01hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZAordGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlCit1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKK3dpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLgorbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisKK05vdGUgdGhhdCB0aGUgZmlsZSB0ZXhpbmZvLnRleCwgcHJvdmlkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgZnJvbQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kIGlzIHVuZGVyIGRpZmZlcmVudCBjb3B5cmlnaHQgcmVzdHJpY3Rpb25zCitmcm9tIHRoZSByZW1haW5kZXIgb2YgdGhpcyBwYWNrYWdlLgorCitAaWdub3JlCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gcHJvY2VzcyB0aGlzIGZpbGUgdGhyb3VnaCBUZXggYW5kIHByaW50IHRoZQorcmVzdWx0cywgcHJvdmlkZWQgdGhlIHByaW50ZWQgZG9jdW1lbnQgY2FycmllcyBjb3B5aW5nIHBlcm1pc3Npb24KK25vdGljZSBpZGVudGljYWwgdG8gdGhpcyBvbmUgZXhjZXB0IGZvciB0aGUgcmVtb3ZhbCBvZiB0aGlzIHBhcmFncmFwaAorKHRoaXMgcGFyYWdyYXBoIG5vdCBiZWluZyByZWxldmFudCB0byB0aGUgcHJpbnRlZCBtYW51YWwpLgorCitAZW5kIGlnbm9yZQorQGVuZCBpZmluZm8KKworQHNldGNoYXB0ZXJuZXdwYWdlIG9kZAorCitAdGl0bGVwYWdlCitAY2VudGVyIEB0aXRsZWZvbnR7QSBDb21tb24gRXJyb3IgRGVzY3JpcHRpb259CitAY2VudGVyIEB0aXRsZWZvbnR7TGlicmFyeSBmb3IgVU5JWH0KK0BzcCAyCitAY2VudGVyIEtlbiBSYWVidXJuCitAY2VudGVyIEJpbGwgU29tbWVyZmVsZAorQHNwIDEKK0BjZW50ZXIgTUlUIFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZAorQHNwIDMKK0BjZW50ZXIgbGFzdCB1cGRhdGVkIDEgSmFudWFyeSAxOTg5CitAY2VudGVyIGZvciB2ZXJzaW9uIDEuMgorQGNlbnRlciAqKipEUkFGVCBDT1BZIE9OTFkqKioKKworQHZza2lwIDJpbgorCitAY2VudGVyIEBie0Fic3RyYWN0fQorCitVTklYIGhhcyBhbHdheXMgaGFkIGEgY2xlYW4gYW5kIHNpbXBsZSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UsIHdpdGggYQorc3RhbmRhcmQgc2V0IG9mIGVycm9yIGNvZGVzIHBhc3NlZCBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIHVzZXIKK3Byb2dyYW1zLiAgVW5mb3J0dW5hdGVseSwgdGhlIHNhbWUgY2Fubm90IGJlIHNhaWQgb2YgbWFueSBvZiB0aGUKK2xpYnJhcmllcyBsYXllcmVkIG9uIHRvcCBvZiB0aGUgcHJpbWl0aXZlcyBwcm92aWRlZCBieSB0aGUga2VybmVsLgorVHlwaWNhbGx5LCBlYWNoIG9uZSBoYXMgdXNlZCBhIGRpZmZlcmVudCBzdHlsZSBvZiBpbmRpY2F0aW5nIGVycm9ycyB0bwordGhlaXIgY2FsbGVycywgbGVhZGluZyB0byBhIHRvdGFsIGhvZGdlcG9kZ2Ugb2YgZXJyb3IgaGFuZGxpbmcsIGFuZAorY29uc2lkZXJhYmxlIGFtb3VudHMgb2Ygd29yayBmb3IgdGhlIHByb2dyYW1tZXIuICBUaGlzIHBhcGVyIGRlc2NyaWJlcworYSBsaWJyYXJ5IGFuZCBhc3NvY2lhdGVkIHV0aWxpdGllcyB3aGljaCBhbGxvd3MgYSBtb3JlIHVuaWZvcm0gd2F5IGZvcgorbGlicmFyaWVzIHRvIHJldHVybiBlcnJvcnMgdG8gdGhlaXIgY2FsbGVycywgYW5kIGZvciBwcm9ncmFtcyB0bworZGVzY3JpYmUgZXJyb3JzIGFuZCBleGNlcHRpb25hbCBjb25kaXRpb25zIHRvIHRoZWlyIHVzZXJzLgorCitAcGFnZQorQHZza2lwIDBwdCBwbHVzIDFmaWxsbAorCitDb3B5cmlnaHQgQGNvcHlyaWdodHt9IDE5ODcsIDE5ODggYnkgdGhlIFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZworQm9hcmQgb2YgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZAordGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlCit1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKK3dpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLgorbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisKK05vdGUgdGhhdCB0aGUgZmlsZSB0ZXhpbmZvLnRleCwgcHJvdmlkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgZnJvbQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kIGlzIHVuZGVyIGRpZmZlcmVudCBjb3B5cmlnaHQgcmVzdHJpY3Rpb25zCitmcm9tIHRoZSByZW1haW5kZXIgb2YgdGhpcyBwYWNrYWdlLgorCitAZW5kIHRpdGxlcGFnZQorCitAbm9kZSBUb3AsIFdoeSBjb21fZXJyPywgKGRpciksIChkaXIpCisKK0B0b3AgQSBDb21tb24gRXJyb3IgRGVzY3JpcHRpb24gTGlicmFyeSBmb3IgVU5JWAorCitUaGlzIG1hbnVhbCBkb2N1bWVudHMgdGhlIGNvbV9lcnIgbGlicmFyeS4KKworQG1lbnUKKyogV2h5IGNvbV9lcnI/OjogICAgICAgICAgICAgICAgCisqIEVycm9yIGNvZGVzOjogICAgICAgICAgICAgICAgIAorKiBFcnJvciB0YWJsZSBzb3VyY2UgZmlsZTo6ICAgICAKKyogVGhlIGVycm9yLXRhYmxlIGNvbXBpbGVyOjogICAgCisqIFJ1bi10aW1lIHN1cHBvcnQgcm91dGluZXM6OiAgIAorKiBDb2RpbmcgQ29udmVudGlvbnM6OiAgICAgICAgICAKKyogQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbjo6ICAgCisqIEJ1ZyBSZXBvcnRzOjogICAgICAgICAgICAgICAgIAorKiBBY2tub3dsZWRnZW1lbnRzOjogICAgICAgICAgICAKK0BlbmQgbWVudQorCitAcGFnZQorCitAbm9kZSBXaHkgY29tX2Vycj8sIEVycm9yIGNvZGVzLCBUb3AsIFRvcAorQGNoYXB0ZXIgV2h5IGNvbV9lcnI/CisKK0luIGJ1aWxkaW5nIGFwcGxpY2F0aW9uIHNvZnR3YXJlIHBhY2thZ2VzLCBhIHByb2dyYW1tZXIgb2Z0ZW4gaGFzIHRvCitkZWFsIHdpdGggYSBudW1iZXIgb2YgbGlicmFyaWVzLCBlYWNoIG9mIHdoaWNoIGNhbiB1c2UgYSBkaWZmZXJlbnQKK2Vycm9yLXJlcG9ydGluZyBtZWNoYW5pc20uICBTb21ldGltZXMgb25lIG9mIHR3byB2YWx1ZXMgaXMgcmV0dXJuZWQsCitpbmRpY2F0aW5nIHNpbXBseSBTVUNDRVNTIG9yIEZBSUxVUkUsIHdpdGggbm8gZGVzY3JpcHRpb24gb2YgZXJyb3JzCitlbmNvdW50ZXJlZC4gIFNvbWV0aW1lcyBpdCBpcyBhbiBpbmRleCBpbnRvIGEgdGFibGUgb2YgdGV4dCBzdHJpbmdzLAord2hlcmUgdGhlIG5hbWUgb2YgdGhlIHRhYmxlIHVzZWQgaXMgZGVwZW5kZW50IG9uIHRoZSBsaWJyYXJ5IGJlaW5nCit1c2VkIHdoZW4gdGhlIGVycm9yIGlzIGdlbmVyYXRlZDsgc2luY2UgZWFjaCB0YWJsZSBzdGFydHMgbnVtYmVyaW5nIGF0CiswIG9yIDEsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYXMgdG8gdGhlIHNvdXJjZSBvZiB0aGUgZXJyb3IgY29kZSBpcworbmVlZGVkIHRvIGRldGVybWluZSB3aGljaCB0YWJsZSB0byBsb29rIGF0LiAgU29tZXRpbWVzIG5vIHRleHQgbWVzc2FnZXMgYXJlCitzdXBwbGllZCBhdCBhbGwsIGFuZCB0aGUgcHJvZ3JhbW1lciBtdXN0IHN1cHBseSB0aGVtIGF0IGFueSBwb2ludCBhdCB3aGljaAoraGUgbWF5IHdpc2ggdG8gcmVwb3J0IGVycm9yIGNvbmRpdGlvbnMuCitPZnRlbiwgYSBnbG9iYWwgdmFyaWFibGUgaXMgYXNzaWduZWQgc29tZSB2YWx1ZSBkZXNjcmliaW5nIHRoZSBlcnJvciwgYnV0Cit0aGUgcHJvZ3JhbW1lciBoYXMgdG8ga25vdyBpbiBlYWNoIGNhc2Ugd2hldGhlciB0byBsb29rIGF0IEBjb2Rle2Vycm5vfSwKK0Bjb2Rle2hfZXJybm99LCB0aGUgcmV0dXJuIHZhbHVlIGZyb20gQGNvZGV7aGVzX2VycigpfSwgb3Igd2hhdGV2ZXIgb3RoZXIKK3ZhcmlhYmxlcyBvciByb3V0aW5lcyBhcmUgc3BlY2lmaWVkLgorQW5kIHdoYXQgaGFwcGVucyBpZiBzb21ldGhpbmcKK2luIHRoZSBwcm9jZWR1cmUgb2YKK2V4YW1pbmluZyBvciByZXBvcnRpbmcgdGhlIGVycm9yIGNoYW5nZXMgdGhlIHNhbWUgdmFyaWFibGU/CisKK1RoZSBwYWNrYWdlIHdlIGhhdmUgZGV2ZWxvcGVkIGlzIGFuIGF0dGVtcHQgdG8gcHJlc2VudCBhIGNvbW1vbgorZXJyb3ItaGFuZGxpbmcgbWVjaGFuaXNtIHRvIG1hbmlwdWxhdGUgdGhlIG1vc3QgY29tbW9uIGZvcm0gb2YgZXJyb3IgY29kZQoraW4gYSBmYXNoaW9uIHRoYXQgZG9lcyBub3QgaGF2ZSB0aGUgcHJvYmxlbXMgbGlzdGVkIGFib3ZlLgorCitBIGxpc3Qgb2YgdXAgdG8gMjU2IHRleHQgbWVzc2FnZXMgaXMgc3VwcGxpZWQgdG8gYSB0cmFuc2xhdG9yIHdlIGhhdmUKK3dyaXR0ZW4sIGFsb25nIHdpdGggdGhlIHRocmVlLSB0byBmb3VyLWNoYXJhY3RlciBgYG5hbWUnJyBvZiB0aGUgZXJyb3IKK3RhYmxlLiAgVGhlIGxpYnJhcnkgdXNpbmcgdGhpcyBlcnJvciB0YWJsZSBuZWVkIG9ubHkgY2FsbCBhIHJvdXRpbmUKK2dlbmVyYXRlZCBmcm9tIHRoaXMgZXJyb3ItdGFibGUgc291cmNlIHRvIG1ha2UgdGhlIHRhYmxlIGBga25vd24nJyB0byB0aGUKK2NvbV9lcnIgbGlicmFyeSwgYW5kIGFueSBlcnJvciBjb2RlIHRoZSBsaWJyYXJ5IGdlbmVyYXRlcyBjYW4gYmUgY29udmVydGVkCit0byB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlLiAgVGhlcmUgaXMgYWxzbyBhIGRlZmF1bHQgZm9ybWF0IGZvcgorZXJyb3IgY29kZXMgYWNjaWRlbnRhbGx5IHJldHVybmVkIGJlZm9yZSBtYWtpbmcgdGhlIHRhYmxlIGtub3duLCB3aGljaCBpcworb2YgdGhlIGZvcm0gQHNhbXB7dW5rbm93biBjb2RlIGZvbyAzMn0sIHdoZXJlIEBzYW1we2Zvb30gd291bGQgYmUgdGhlIG5hbWUKK29mIHRoZSB0YWJsZS4KKworQG5vZGUgRXJyb3IgY29kZXMsIEVycm9yIHRhYmxlIHNvdXJjZSBmaWxlLCBXaHkgY29tX2Vycj8sIFRvcAorQGNoYXB0ZXIgRXJyb3IgY29kZXMKKworRXJyb3IgY29kZXMgdGhlbXNlbHZlcyBhcmUgMzIgYml0IChzaWduZWQpIGludGVnZXJzLCBvZiB3aGljaCB0aGUgaGlnaAorb3JkZXIgMjQgYml0cyBhcmUgYW4gaWRlbnRpZmllciBvZiB3aGljaCBlcnJvciB0YWJsZSB0aGUgZXJyb3IgY29kZSBpcworZnJvbSwgYW5kIHRoZSBsb3cgb3JkZXIgOCBiaXRzIGFyZSBhIHNlcXVlbnRpYWwgZXJyb3IgbnVtYmVyIHdpdGhpbgordGhlIHRhYmxlLiAgQW4gZXJyb3IgY29kZSBtYXkgdGh1cyBiZSBlYXNpbHkgZGVjb21wb3NlZCBpbnRvIGl0cyBjb21wb25lbnQKK3BhcnRzLiAgT25seSB0aGUgbG93ZXN0IDMyIGJpdHMgb2YgYW4gZXJyb3IgY29kZSBhcmUgY29uc2lkZXJlZCBzaWduaWZpY2FudAorb24gc3lzdGVtcyB3aGljaCBzdXBwb3J0IHdpZGVyIHZhbHVlcy4KKworRXJyb3IgdGFibGUgMCBpcyBkZWZpbmVkIHRvIG1hdGNoIHRoZSBVTklYIHN5c3RlbSBjYWxsIGVycm9yIHRhYmxlCisoQGNvZGV7c3lzX2Vycmxpc3R9KTsgdGhpcyBhbGxvd3MgQGNvZGV7ZXJybm99IHZhbHVlcyB0byBiZSB1c2VkIGRpcmVjdGx5CitpbiB0aGUgbGlicmFyeSAoYXNzdW1pbmcgdGhhdCBAY29kZXtlcnJub30gaXMgb2YgYSB0eXBlIHdpdGggdGhlIHNhbWUgd2lkdGgKK2FzIEB0e2xvbmd9KS4gIE90aGVyIGVycm9yIHRhYmxlIG51bWJlcnMgYXJlIGZvcm1lZCBieSBjb21wYWN0aW5nIHRvZ2V0aGVyCit0aGUgZmlyc3QgZm91ciBjaGFyYWN0ZXJzIG9mIHRoZSBlcnJvciB0YWJsZSBuYW1lLiAgVGhlIG1hcHBpbmcgYmV0d2VlbgorY2hhcmFjdGVycyBpbiB0aGUgbmFtZSBhbmQgbnVtZXJpYyB2YWx1ZXMgaW4gdGhlIGVycm9yIGNvZGUgYXJlIGRlZmluZWQgaW4KK2Egc3lzdGVtLWluZGVwZW5kZW50IGZhc2hpb24sIHNvIHRoYXQgdHdvIHN5c3RlbXMgdGhhdCBjYW4gcGFzcyBpbnRlZ3JhbAordmFsdWVzIGJldHdlZW4gdGhlbSBjYW4gcmVsaWFibHkgcGFzcyBlcnJvciBjb2RlcyB3aXRob3V0IGxvc3Mgb2YgbWVhbmluZzsKK3RoaXMgc2hvdWxkIHdvcmsgZXZlbiBpZiB0aGUgY2hhcmFjdGVyIHNldHMgdXNlZCBhcmUgbm90IHRoZSBzYW1lLgorKEhvd2V2ZXIsIGlmIHRoaXMgaXMgdG8gYmUgZG9uZSwgZXJyb3IgdGFibGUgMCBzaG91bGQgYmUgYXZvaWRlZCwgc2luY2UgdGhlCitsb2NhbCBzeXN0ZW0gY2FsbCBlcnJvciB0YWJsZXMgbWF5IGRpZmZlci4pCisKK0FueSB2YXJpYWJsZSB3aGljaCBpcyB0byBjb250YWluIGFuIGVycm9yIGNvZGUgc2hvdWxkIGJlIGRlY2xhcmVkIEB0e2xvbmd9LgorVGhlIGRyYWZ0IHByb3Bvc2VkIEFtZXJpY2FuIE5hdGlvbmFsIFN0YW5kYXJkIGZvciBDIChhcyBvZiBNYXksIDE5ODgpCityZXF1aXJlcyB0aGF0IEB0e2xvbmd9IHZhcmlhYmxlcyBiZSBhdCBsZWFzdCAzMiBiaXRzOyBhbnkgc3lzdGVtIHdoaWNoIGRvZXMKK25vdCBzdXBwb3J0IDMyLWJpdCBAdHtsb25nfSB2YWx1ZXMgY2Fubm90IG1ha2UgdXNlIG9mIHRoaXMgcGFja2FnZSAobm9yCittdWNoIG90aGVyIHNvZnR3YXJlIHRoYXQgYXNzdW1lcyBhbiBBTlNJLUMgZW52aXJvbm1lbnQgYmFzZSkgd2l0aG91dAorc2lnbmlmaWNhbnQgZWZmb3J0LgorCitAbm9kZSBFcnJvciB0YWJsZSBzb3VyY2UgZmlsZSwgVGhlIGVycm9yLXRhYmxlIGNvbXBpbGVyLCBFcnJvciBjb2RlcywgVG9wCitAY2hhcHRlciBFcnJvciB0YWJsZSBzb3VyY2UgZmlsZQorCitUaGUgZXJyb3IgdGFibGUgc291cmNlIGZpbGUgYmVnaW5zIHdpdGggdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSB0YWJsZSBuYW1lLAorYXMKKworQGV4YW1wbGUKK2Vycm9yX3RhYmxlIEB2YXJ7dGFibGVuYW1lfQorQGVuZCBleGFtcGxlCisKK0luZGl2aWR1YWwgZXJyb3IgY29kZXMgYXJlCitzcGVjaWZpZWQgd2l0aAorCitAZXhhbXBsZQorZXJyb3JfY29kZSBAdmFye0VSUk9SX05BTUV9LCBAdmFyeyJ0ZXh0IG1lc3NhZ2UifQorQGVuZCBleGFtcGxlCisKK3doZXJlIEBzYW1we2VjfSBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgc2hvcnQgZm9ybSBvZiBAc2FtcHtlcnJvcl9jb2RlfS4gIFRvCitpbmRpY2F0ZSB0aGUgZW5kIG9mIHRoZSB0YWJsZSwgdXNlIEBzYW1we2VuZH0uICBUaHVzLCBhIChzaG9ydCkgc2FtcGxlCitlcnJvciB0YWJsZSBtaWdodCBiZToKKworQGV4YW1wbGUKKworICAgICAgICBlcnJvcl90YWJsZSAgICAgZHNjCisKKyAgICAgICAgZXJyb3JfY29kZSAgICAgIERTQ19EVVBfTVRHX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAiTWVldGluZyBhbHJlYWR5IGV4aXN0cyIKKworICAgICAgICBlYyAgICAgICAgICAgICAgRFNDX0JBRF9QQVRILAorICAgICAgICAgICAgICAgICAgICAgICAgIkEgYmFkIG1lZXRpbmcgcGF0aG5hbWUgd2FzIGdpdmVuIgorCisgICAgICAgIGVjICAgICAgICAgICAgICBEU0NfQkFEX01PREVTLAorICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgbW9kZSBmb3IgdGhpcyBhY2Nlc3MgY29udHJvbCBsaXN0IgorCisgICAgICAgIGVuZAorCitAZW5kIGV4YW1wbGUKKworQG5vZGUgVGhlIGVycm9yLXRhYmxlIGNvbXBpbGVyLCBSdW4tdGltZSBzdXBwb3J0IHJvdXRpbmVzLCBFcnJvciB0YWJsZSBzb3VyY2UgZmlsZSwgVG9wCitAY2hhcHRlciBUaGUgZXJyb3ItdGFibGUgY29tcGlsZXIKKworVGhlIGVycm9yIHRhYmxlIGNvbXBpbGVyIGlzIG5hbWVkIEBjb2Rle2NvbXBpbGVfZXR9LiAgSXQgdGFrZXMgb25lCithcmd1bWVudCwgdGhlIHBhdGhuYW1lIG9mIGEgZmlsZSAoZW5kaW5nIGluIEBzYW1wey5ldH0sIGUuZy4sCitAc2FtcHtkc2NfZXJyLmV0fSkgY29udGFpbmluZyBhbiBlcnJvciB0YWJsZSBzb3VyY2UgZmlsZS4gIEl0IHBhcnNlcyB0aGUKK2Vycm9yIHRhYmxlLCBhbmQgZ2VuZXJhdGVzIHR3byBvdXRwdXQgZmlsZXMgLS0gYSBDIGhlYWRlciBmaWxlCisoQHNhbXB7ZGlzY3Vzc19lcnIuaH0pIHdoaWNoIGNvbnRhaW5zIGRlZmluaXRpb25zIG9mIHRoZSBudW1lcmljYWwgdmFsdWVzCitvZiB0aGUgZXJyb3IgY29kZXMgZGVmaW5lZCBpbiB0aGUgZXJyb3IgdGFibGUsIGFuZCBhIEMgc291cmNlIGZpbGUgd2hpY2gKK3Nob3VsZCBiZSBjb21waWxlZCBhbmQgbGlua2VkIHdpdGggdGhlIGV4ZWN1dGFibGUuICBUaGUgaGVhZGVyIGZpbGUgbXVzdCBiZQoraW5jbHVkZWQgaW4gdGhlIHNvdXJjZSBvZiBhIG1vZHVsZSB3aGljaCB3aXNoZXMgdG8gcmVmZXJlbmNlIHRoZSBlcnJvcgorY29kZXMgZGVmaW5lZDsgdGhlIG9iamVjdCBtb2R1bGUgZ2VuZXJhdGVkIGZyb20gdGhlIEMgY29kZSBtYXkgYmUgbGlua2VkIGluCit0byBhIHByb2dyYW0gd2hpY2ggd2lzaGVzIHRvIHVzZSB0aGUgcHJpbnRlZCBmb3JtcyBvZiB0aGUgZXJyb3IgY29kZXMuCisKK0Bub2RlIFJ1bi10aW1lIHN1cHBvcnQgcm91dGluZXMsIENvZGluZyBDb252ZW50aW9ucywgVGhlIGVycm9yLXRhYmxlIGNvbXBpbGVyLCBUb3AKK0BjaGFwdGVyIFJ1bi10aW1lIHN1cHBvcnQgcm91dGluZXMKKworQW55IHNvdXJjZSBmaWxlIHdoaWNoIHVzZXMgdGhlIHJvdXRpbmVzIHN1cHBsaWVkIHdpdGggb3IgcHJvZHVjZWQgYnkgdGhlCitjb21fZXJyIHBhY2thZ2Ugc2hvdWxkIGluY2x1ZGUgdGhlIGhlYWRlciBmaWxlIEBmaWxlezxjb21fZXJyLmg+fS4gIEl0Citjb250YWlucyBkZWNsYXJhdGlvbnMgYW5kIGRlZmluaXRpb25zIHdoaWNoIG1heSBiZSBuZWVkZWQgb24gc29tZSBzeXN0ZW1zLgorKFNvbWUgZnVuY3Rpb25zIGNhbm5vdCBiZSByZWZlcmVuY2VkIHByb3Blcmx5IHdpdGhvdXQgdGhlIHJldHVybiB0eXBlCitkZWNsYXJhdGlvbnMgaW4gdGhpcyBmaWxlLiAgU29tZSBmdW5jdGlvbnMgbWF5IHdvcmsgcHJvcGVybHkgb24gbW9zdAorYXJjaGl0ZWN0dXJlcyBldmVuIHdpdGhvdXQgdGhlIGhlYWRlciBmaWxlLCBidXQgcmVseWluZyBvbiB0aGlzIGlzIG5vdAorcmVjb21tZW5kZWQuKQorCitUaGUgcnVuLXRpbWUgc3VwcG9ydCByb3V0aW5lcyBhbmQgdmFyaWFibGVzIHByb3ZpZGVkIHZpYSB0aGlzIHBhY2thZ2UKK2luY2x1ZGUgdGhlIGZvbGxvd2luZzoKKworQGV4YW1wbGUKK3ZvaWQgaW5pdGlhbGl6ZV9AdmFye3h4eHh9X2Vycm9yX3RhYmxlICh2b2lkKTsKK0BlbmQgZXhhbXBsZQorCitPbmUgb2YgdGhlc2Ugcm91dGluZXMgaXMgYnVpbHQgYnkgdGhlIGVycm9yIGNvbXBpbGVyIGZvciBlYWNoIGVycm9yIHRhYmxlLgorSXQgbWFrZXMgdGhlIEB2YXJ7eHh4eH0gZXJyb3IgdGFibGUgYGBrbm93bicnIHRvIHRoZSBlcnJvciByZXBvcnRpbmcKK3N5c3RlbS4gIEJ5IGNvbnZlbnRpb24sIHRoaXMgcm91dGluZSBzaG91bGQgYmUgY2FsbGVkIGluIHRoZSBpbml0aWFsaXphdGlvbgorcm91dGluZSBvZiB0aGUgQHZhcnt4eHh4fSBsaWJyYXJ5LiAgSWYgdGhlIGxpYnJhcnkgaGFzIG5vIGluaXRpYWxpemF0aW9uCityb3V0aW5lLCBzb21lIGNvbWJpbmF0aW9uIG9mIHJvdXRpbmVzIHdoaWNoIGZvcm0gdGhlIGNvcmUgb2YgdGhlIGxpYnJhcnkKK3Nob3VsZCBlbnN1cmUgdGhhdCB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkLiAgSXQgaXMgbm90IGFkdmlzZWQgdG8gbGVhdmUgaXQKK3RoZSBjYWxsZXIgdG8gbWFrZSB0aGlzIGNhbGwuCisKK1RoZXJlIGlzIG5vIGhhcm0gaW4gY2FsbGluZyB0aGlzIHJvdXRpbmUgbW9yZSB0aGFuIG9uY2UuCisKK0BleGFtcGxlCisjZGVmaW5lIEVSUk9SX1RBQkxFX0JBU0VfQHZhcnt4eHh4fSBAdmFye25ubm5ufUwKK0BlbmQgZXhhbXBsZQorCitUaGlzIHN5bWJvbCBjb250YWlucyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVycm9yIGNvZGUgZW50cnkgaW4gdGhlCitzcGVjaWZpZWQgdGFibGUuCitUaGlzIHJhcmVseSBuZWVkcyBiZSB1c2VkIGJ5IHRoZQorcHJvZ3JhbW1lci4KKworQGRlZnR5cGVmdW4gY29uc3QgY2hhciAqZXJyb3JfbWVzc2FnZSAobG9uZyBAdmFye2NvZGV9KTsKKworVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGNoYXJhY3RlciBzdHJpbmcgZXJyb3IgbWVzc2FnZSBhc3NvY2lhdGVkCit3aXRoIEBjb2Rle2NvZGV9OyBpZiB0aGlzIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiB1bmtub3duIGVycm9yIHRhYmxlLCBvcgoraWYgdGhlIGNvZGUgaXMgYXNzb2NpYXRlZCB3aXRoIGEga25vd24gZXJyb3IgdGFibGUgYnV0IHRoZSBjb2RlIGlzIG5vdAoraW4gdGhlIHRhYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybSBAc2FtcHtVbmtub3duIGNvZGUgQHZhcnt4eHh4IG5ufX0gaXMKK3JldHVybmVkLCB3aGVyZSBAdmFye3h4eHh9IGlzIHRoZSBlcnJvciB0YWJsZSBuYW1lIHByb2R1Y2VkIGJ5CityZXZlcnNpbmcgdGhlIGNvbXBhY3Rpb24gcGVyZm9ybWVkIG9uIHRoZSBlcnJvciB0YWJsZSBudW1iZXIgaW1wbGllZAorYnkgdGhhdCBlcnJvciBjb2RlLCBhbmQgQHZhcntubn0gaXMgdGhlIG9mZnNldCBmcm9tIHRoYXQgYmFzZSB2YWx1ZS4KKworQWx0aG91Z2ggdGhpcyByb3V0aW5lIGlzIGF2YWlsYWJsZSBmb3IgdXNlIHdoZW4gbmVlZGVkLCBpdHMgdXNlIHNob3VsZCBiZQorbGVmdCB0byBjaXJjdW1zdGFuY2VzIHdoaWNoIHJlbmRlciBAY29kZXtjb21fZXJyfSAoYmVsb3cpIHVudXNhYmxlLgorCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBjb21fZXJyIChjb25zdCBjaGFyICpAdmFye3dob2FtaX0sIGxvbmcgQHZhcntlcnJvcl9jb2RlfSwgY29uc3QgY2hhciAqQHZhcntmb3JtYXR9LCAuLi4pOyAgICAgICAgICAgICAKKworVGhpcyByb3V0aW5lIHByb3ZpZGVzIGFuIGFsdGVybmF0ZSB3YXkgdG8gcHJpbnQgZXJyb3IgbWVzc2FnZXMgdG8KK3N0YW5kYXJkIGVycm9yOyBpdCBhbGxvd3MgdGhlIGVycm9yIG1lc3NhZ2UgdG8gYmUgcGFzc2VkIGluIGFzIGEKK3BhcmFtZXRlciwgcmF0aGVyIHRoYW4gaW4gYW4gZXh0ZXJuYWwgdmFyaWFibGUuICBAZW1waHtQcm92aWRlIGdyYW1tYXRpY2FsCitjb250ZXh0IGZvciBgYG1lc3NhZ2UuJyd9CisKK1RoZSBtb2R1bGUgcmVwb3J0aW5nIHRoZSBlcnJvciBzaG91bGQgYmUgcGFzc2VkIGluIHZpYSBAdmFye3dob2FtaX0uCitJZiBAdmFye2Zvcm1hdH0gaXMgQGNvZGV7KGNoYXIgKilOVUxMfSwgdGhlIGZvcm1hdHRlZCBtZXNzYWdlIHdpbGwgbm90IGJlCitwcmludGVkLiAgQHZhcntmb3JtYXR9IG1heSBub3QgYmUgb21pdHRlZC4KKworQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgY29tX2Vycl92YSAoY29uc3QgY2hhciAqQHZhcnt3aG9hbWl9LCBsb25nIEB2YXJ7ZXJyb3JfY29kZX0sIGNvbnN0IGNoYXIgKkB2YXJ7Zm9ybWF0fSwgdmFfbGlzdCBAdmFye2FyZ3N9KTsKKworVGhpcyByb3V0aW5lIHByb3ZpZGVzIGFuIGludGVyZmFjZSwgZXF1aXZhbGVudCB0byBAY29kZXtjb21fZXJyfSBhYm92ZSwKK3doaWNoIG1heSBiZSB1c2VkIGJ5IGhpZ2hlci1sZXZlbCB2YXJpYWRpYyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyB3aGljaAorYWNjZXB0IHZhcmlhYmxlIG51bWJlcnMgb2YgYXJndW1lbnRzKS4KKworQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgKnNldF9jb21fZXJyX2hvb2sgKHZvaWQgKCpAdmFye3Byb2N9KSAoY29uc3QgY2hhciAqQHZhcnt3aG9hbWl9LCBsb25nIEB2YXJ7ZXJyb3JfY29kZX0sIHZhX2xpc3QgQHZhcnthcmdzfSkgKGNvbnN0IGNoYXIgKkB2YXJ7d2hvYW1pfSwgbG9uZyBAdmFye2Vycm9yX2NvZGV9LCB2YV9saXN0IEB2YXJ7YXJnc30pKTsKKworQGRlZnR5cGVmdW54IHZvaWQgcmVzZXRfY29tX2Vycl9ob29rICgpOworCitUaGVzZSB0d28gcm91dGluZXMgYWxsb3cgYSByb3V0aW5lIHRvIGJlIGR5bmFtaWNhbGx5IHN1YnN0aXR1dGVkIGZvcgorQHNhbXB7Y29tX2Vycn0uICBBZnRlciBAc2FtcHtzZXRfY29tX2Vycl9ob29rfSBoYXMgYmVlbiBjYWxsZWQsCitjYWxscyB0byBAc2FtcHtjb21fZXJyfSB3aWxsIHR1cm4gaW50byBjYWxscyB0byB0aGUgbmV3IGhvb2sgcm91dGluZS4KK0BzYW1we3Jlc2V0X2NvbV9lcnJfaG9va30gdHVybnMgb2ZmIHRoaXMgaG9vay4gIFRoaXMgbWF5IGludGVuZGVkIHRvCitiZSB1c2VkIGluIGRhZW1vbnMgKHRvIHVzZSBhIHJvdXRpbmUgd2hpY2ggY2FsbHMgQGNpdGV7c3lzbG9nKDMpfSksIG9yCitpbiBhIHdpbmRvdyBzeXN0ZW0gYXBwbGljYXRpb24gKHdoaWNoIGNvdWxkIHBvcCB1cCBhIGRpYWxvZ3VlIGJveCkuCisKK0lmIGEgcHJvZ3JhbSBpcyB0byBiZSB1c2VkIGluIGFuIGVudmlyb25tZW50IGluIHdoaWNoIHNpbXBseSBwcmludGluZworbWVzc2FnZXMgdG8gdGhlIEBjb2Rle3N0ZGVycn0gc3RyZWFtIHdvdWxkIGJlIGluYXBwcm9wcmlhdGUgKHN1Y2ggYXMgaW4gYQorZGFlbW9uIHByb2dyYW0gd2hpY2ggcnVucyB3aXRob3V0IGEgdGVybWluYWwgYXR0YWNoZWQpLAorQGNvZGV7c2V0X2NvbV9lcnJfaG9va30gbWF5IGJlIHVzZWQgdG8gcmVkaXJlY3Qgb3V0cHV0IGZyb20gQGNvZGV7Y29tX2Vycn0uCitUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYW4gZXJyb3IgaGFuZGxlciB3aGljaCB1c2VzIEBjaXRle3N5c2xvZygzKX0KK2FzIHN1cHBsaWVkIGluIEJTRCA0LjM6CisKK0BleGFtcGxlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKworLyogZXh0ZXJuIG9wZW5sb2cgKGNvbnN0IGNoYXIgKiBuYW1lLCBpbnQgbG9nb3B0LCBpbnQgZmFjaWxpdHkpOyAqLworLyogZXh0ZXJuIHN5c2xvZyAoaW50IHByaW9yaXR5LCBjaGFyICogbWVzc2FnZSwgLi4uKTsgKi8KKwordm9pZCBob29rIChjb25zdCBjaGFyICogd2hvYW1pLCBsb25nIGNvZGUsCisgICAgICAgICAgIGNvbnN0IGNoYXIgKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKK0B7CisgICAgY2hhciBidWZmZXJbQlVGU0laXTsKKyAgICBzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKyAgICBpZiAoIWluaXRpYWxpemVkKSBAeworICAgICAgICBvcGVubG9nICh3aG9hbWksCisgICAgICAgICAgICAgICAgIExPR19OT1dBSVR8TE9HX0NPTlN8TE9HX1BJRHxMT0dfTkRFTEFZLAorICAgICAgICAgICAgICAgICBMT0dfREFFTU9OKTsKKyAgICAgICAgaW5pdGlhbGl6ZWQgPSAxOworICAgIEB9CisgICAgdnNwcmludGYgKGJ1ZmZlciwgZm9ybWF0LCBhcmdzKTsKKyAgICBzeXNsb2cgKExPR19FUlIsICIlcyAlcyIsIGVycm9yX21lc3NhZ2UgKGNvZGUpLCBidWZmZXIpOworQH0KK0BlbmQgZXhhbXBsZQorCitBZnRlciBtYWtpbmcgdGhlIGNhbGwKK0Bjb2Rle3NldF9jb21fZXJyX2hvb2sgKGhvb2spO30sCithbnkgY2FsbHMgdG8gQGNvZGV7Y29tX2Vycn0gd2lsbCByZXN1bHQgaW4gbWVzc2FnZXMgYmVpbmcgc2VudCB0byB0aGUKK0B2YXJ7c3lzbG9nZH0gZGFlbW9uIGZvciBsb2dnaW5nLgorVGhlIG5hbWUgb2YgdGhlIHByb2dyYW0sIEBzYW1we3dob2FtaX0sIGlzIHN1cHBsaWVkIHRvIHRoZQorQHNhbXB7b3BlbmxvZygpfSBjYWxsLCBhbmQgdGhlIG1lc3NhZ2UgaXMgZm9ybWF0dGVkIGludG8gYSBidWZmZXIgYW5kCitwYXNzZWQgdG8gQGNvZGV7c3lzbG9nfS4KKworTm90ZSB0aGF0IHNpbmNlIHRoZSBleHRyYSBhcmd1bWVudHMgdG8gQGNvZGV7Y29tX2Vycn0gYXJlIHBhc3NlZCBieQorcmVmZXJlbmNlIHZpYSB0aGUgQGNvZGV7dmFfbGlzdH0gdmFsdWUgQGNvZGV7YXJnc30sIHRoZSBob29rIHJvdXRpbmUgbWF5CitwbGFjZSBhbnkgZm9ybSBvZiBpbnRlcnByZXRhdGlvbiBvbiB0aGVtLCBpbmNsdWRpbmcgaWdub3JpbmcgdGhlbS4gIEZvcgorY29uc2lzdGVuY3ksIEBjb2Rle3ByaW50Zn0tc3R5bGUgaW50ZXJwcmV0YXRpb24gaXMgc3VnZ2VzdGVkLCB2aWEKK0Bjb2Rle3ZzcHJpbnRmfSAob3IgQGNvZGV7X2RvcHJudH0gb24gQlNEIHN5c3RlbXMgd2l0aG91dCBmdWxsIHN1cHBvcnQgZm9yCit0aGUgQU5TSSBDIGxpYnJhcnkpLgorCitAZW5kIGRlZnR5cGVmdW4KKworQG5vZGUgQ29kaW5nIENvbnZlbnRpb25zLCBCdWlsZGluZyBhbmQgSW5zdGFsbGF0aW9uLCBSdW4tdGltZSBzdXBwb3J0IHJvdXRpbmVzLCBUb3AKK0BjaGFwdGVyIENvZGluZyBDb252ZW50aW9ucworCitUaGUgZm9sbG93aW5nIGNvbnZlbnRpb25zIGFyZSBqdXN0IHNvbWUgZ2VuZXJhbCBzdHlsaXN0aWMgY29udmVudGlvbnMKK3RvIGZvbGxvdyB3aGVuIHdyaXRpbmcgcm9idXN0IGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMuICBDb252ZW50aW9ucworc2ltaWxhciB0byB0aGlzIGFyZSBnZW5lcmFsbHkgZm9sbG93ZWQgaW5zaWRlIHRoZSBVTklYIGtlcm5lbCBhbmQgbW9zdAorcm91dGluZXMgaW4gdGhlIE11bHRpY3Mgb3BlcmF0aW5nIHN5c3RlbS4gIEluIGdlbmVyYWwsIGEgcm91dGluZQorZWl0aGVyIHN1Y2NlZWRzIChyZXR1cm5pbmcgYSB6ZXJvIGVycm9yIGNvZGUsIGFuZCBkb2luZyBzb21lIHNpZGUKK2VmZmVjdHMgaW4gdGhlIHByb2Nlc3MpLCBvciBpdCBmYWlscywgZG9pbmcgbWluaW1hbCBzaWRlIGVmZmVjdHM7IGluCithbnkgZXZlbnQsIGFueSBpbnZhcmlhbnQgd2hpY2ggdGhlIGxpYnJhcnkgYXNzdW1lcyBtdXN0IGJlIG1haW50YWluZWQuCisKK0luIGdlbmVyYWwsIGl0IGlzIG5vdCBpbiB0aGUgZG9tYWluIG9mIG5vbiB1c2VyLWludGVyZmFjZSBsaWJyYXJ5Cityb3V0aW5lcyB0byB3cml0ZSBlcnJvciBtZXNzYWdlcyB0byB0aGUgdXNlcidzIHRlcm1pbmFsLCBvciBoYWx0IHRoZQorcHJvY2Vzcy4gIFN1Y2ggZm9ybXMgb2YgYGBlcnJvciBoYW5kbGluZycnIHNob3VsZCBiZSByZXNlcnZlZCBmb3IKK2ZhaWx1cmVzIG9mIGludGVybmFsIGludmFyaWFudHMgYW5kIGNvbnNpc3RhbmN5IGNoZWNrcyBvbmx5LCBhcyBpdAorcHJvdmlkZXMgdGhlIHVzZXIgb2YgdGhlIGxpYnJhcnkgbm8gd2F5IHRvIGNsZWFuIHVwIGZvciBoaW1zZWxmIGluIHRoZQorZXZlbnQgb2YgdG90YWwgZmFpbHVyZS4KKworTGlicmFyeSByb3V0aW5lcyB3aGljaCBjYW4gZmFpbCBzaG91bGQgYmUgc2V0IHVwIHRvIHJldHVybiBhbiBlcnJvcgorY29kZS4gIFRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgZG9uZSBhcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZQorZnVuY3Rpb247IGlmIHRoaXMgaXMgbm90IGFjY2VwdGFibGUsIHRoZSByb3V0aW5lIHNob3VsZCByZXR1cm4gYQorYGBudWxsJycgdmFsdWUsIGFuZCBwdXQgdGhlIGVycm9yIGNvZGUgaW50byBhIHBhcmFtZXRlciBwYXNzZWQgYnkKK3JlZmVyZW5jZS4KKworUm91dGluZXMgd2hpY2ggdXNlIHRoZSBmaXJzdCBzdHlsZSBvZiBpbnRlcmZhY2UgY2FuIGJlIHVzZWQgZnJvbQordXNlci1pbnRlcmZhY2UgbGV2ZWxzIG9mIGEgcHJvZ3JhbSBhcyBmb2xsb3dzOgorCitAZXhhbXBsZQorQHsKKyAgICBpZiAoKGNvZGUgPSBpbml0aWFsaXplX3dvcmxkKGdldHVpZCgpLCByYW5kb20oKSkpICE9IDApIEB7CisgICAgICAgIGNvbV9lcnIoImRlbW8iLCBjb2RlLAorICAgICAgICAgICAgICAgICJ3aGVuIHRyeWluZyB0byBpbml0aWFsaXplIHdvcmxkIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgQH0KKyAgICBpZiAoKGRhdGFiYXNlID0gb3Blbl9kYXRhYmFzZSgibXlfc2VjcmV0cyIsICZjb2RlKSk9PU5VTEwpIEB7CisgICAgICAgIGNvbV9lcnIoImRlbW8iLCBjb2RlLAorICAgICAgICAgICAgICAgICJ3aGlsZSBvcGVuaW5nIG15X3NlY3JldHMiKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICBAfQorQH0KK0BlbmQgZXhhbXBsZQorCitBIGNhbGxlciB3aGljaCBmYWlscyB0byBjaGVjayB0aGUgcmV0dXJuIHN0YXR1cyBpcyBpbiBlcnJvci4gIEl0IGlzCitwb3NzaWJsZSB0byBsb29rIGZvciBjb2RlIHdoaWNoIGlnbm9yZXMgZXJyb3IgcmV0dXJucyBieSB1c2luZyBsaW50OworbG9vayBmb3IgZXJyb3IgbWVzc2FnZXMgb2YgdGhlIGZvcm0gYGBmb29iYXIgcmV0dXJucyB2YWx1ZSB3aGljaCBpcworc29tZXRpbWVzIGlnbm9yZWQnJyBvciBgYGZvb2JhciByZXR1cm5zIHZhbHVlIHdoaWNoIGlzIGFsd2F5cworaWdub3JlZC4nJworCitTaW5jZSBsaWJyYXJpZXMgbWF5IGJlIGJ1aWx0IG91dCBvZiBvdGhlciBsaWJyYXJpZXMsIGl0IGlzIG9mdGVuIG5lY2Vzc2FyeQorZm9yIHRoZSBzdWNjZXNzIG9mIG9uZSByb3V0aW5lIHRvIGRlcGVuZCBvbiBhbm90aGVyLiAgV2hlbiBhIGxvd2VyIGxldmVsCityb3V0aW5lIHJldHVybnMgYW4gZXJyb3IgY29kZSwgdGhlIG1pZGRsZSBsZXZlbCByb3V0aW5lIGhhcyBhIGZldyBwb3NzaWJsZQorb3B0aW9ucy4gIEl0IGNhbiBzaW1wbHkgcmV0dXJuIHRoZSBlcnJvciBjb2RlIHRvIGl0cyBjYWxsZXIgYWZ0ZXIgZG9pbmcKK3NvbWUgZm9ybSBvZiBjbGVhbnVwLCBpdCBjYW4gc3Vic3RpdHV0ZSBvbmUgb2YgaXRzIG93biwgb3IgaXQgY2FuIHRha2UKK2NvcnJlY3RpdmUgYWN0aW9uIG9mIGl0cyBvd24gYW5kIGNvbnRpbnVlIG5vcm1hbGx5LiAgRm9yIGluc3RhbmNlLCBhCitsaWJyYXJ5IHJvdXRpbmUgd2hpY2ggbWFrZXMgYSBgYGNvbm5lY3QnJyBzeXN0ZW0gY2FsbCB0byBtYWtlIGEgbmV0d29yaworY29ubmVjdGlvbiBtYXkgcmVmbGVjdCB0aGUgc3lzdGVtIGVycm9yIGNvZGUgQGNvZGV7RUNPTk5SRUZVU0VEfQorKENvbm5lY3Rpb24gcmVmdXNlZCkgdG8gaXRzIGNhbGxlciwgb3IgaXQgbWF5IHJldHVybiBhIGBgc2VydmVyIG5vdAorYXZhaWxhYmxlLCB0cnkgYWdhaW4gbGF0ZXIsJycgb3IgaXQgbWF5IHRyeSBhIGRpZmZlcmVudCBzZXJ2ZXIuCisKK0NsZWFudXAgd2hpY2ggaXMgdHlwaWNhbGx5IG5lY2Vzc2FyeSBtYXkgaW5jbHVkZSwgYnV0IG5vdCBiZSBsaW1pdGVkCit0bywgZnJlZWluZyBhbGxvY2F0ZWQgbWVtb3J5IHdoaWNoIHdpbGwgbm90IGJlIG5lZWRlZCBhbnkgbW9yZSwKK3VubG9ja2luZyBjb25jdXJyYW5jeSBsb2NrcywgZHJvcHBpbmcgcmVmZXJlbmNlIGNvdW50cywgY2xvc2luZyBmaWxlCitkZXNjcmlwdG9ycywgb3Igb3RoZXJ3aXNlIHVuZG9pbmcgYW55dGhpbmcgd2hpY2ggdGhlIHByb2NlZHVyZSBkaWQgdXAKK3RvIHRoaXMgcG9pbnQuICBXaGVuIHRoZXJlIGFyZSBhIGxvdCBvZiB0aGluZ3Mgd2hpY2ggY2FuIGdvIHdyb25nLCBpdAoraXMgZ2VuZXJhbGx5IGdvb2QgdG8gd3JpdGUgb25lIGJsb2NrIG9mIGVycm9yLWhhbmRsaW5nIGNvZGUgd2hpY2ggaXMKK2JyYW5jaGVkIHRvLCB1c2luZyBhIGdvdG8sIGluIHRoZSBldmVudCBvZiBmYWlsdXJlLiAgQSBjb21tb24gc291cmNlCitvZiBlcnJvcnMgaW4gVU5JWCBwcm9ncmFtcyBpcyBmYWlsaW5nIHRvIGNsb3NlIGZpbGUgZGVzY3JpcHRvcnMgb24KK2Vycm9yIHJldHVybnM7IHRoaXMgbGVhdmVzIGEgbnVtYmVyIG9mIGBgem9tYmllZCcnIGZpbGUgZGVzY3JpcHRvcnMKK29wZW4sIHdoaWNoIGV2ZW50dWFsbHkgY2F1c2VzIHRoZSBwcm9jZXNzIHRvIHJ1biBvdXQgb2YgZmlsZQorZGVzY3JpcHRvcnMgYW5kIGZhbGwgb3Zlci4KKworQGV4YW1wbGUKK0B7CisgICAgRklMRSAqZjE9TlVMTCwgKmYyPU5VTEwsICpmMz1OVUxMOworICAgIGludCBzdGF0dXMgPSAwOworCisgICAgaWYgKCAoZjEgPSBmb3BlbihGSUxFMSwgInIiKSkgPT0gTlVMTCkgQHsKKyAgICAgICAgc3RhdHVzID0gZXJybm87CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgQH0KKworICAgIC8qCisgICAgICogQ3J1bmNoIGZvciBhIHdoaWxlCisgICAgICovCisKKyAgICBpZiAoIChmMiA9IGZvcGVuKEZJTEUyLCAidyIpKSA9PSBOVUxMKSBAeworICAgICAgICBzdGF0dXMgPSBlcnJubzsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBAfQorCisgICAgaWYgKCAoZjMgPSBmb3BlbihGSUxFMywgImErIikpID09IE5VTEwpIEB7CisgICAgICAgIHN0YXR1cyA9IGVycm5vOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICBAfQorCisgICAgLyoKKyAgICAgKiBEbyBtb3JlIHByb2Nlc3NpbmcuCisgICAgICovCisgICAgZmNsb3NlKGYxKTsKKyAgICBmY2xvc2UoZjIpOworICAgIGZjbG9zZShmMyk7CisgICAgcmV0dXJuIDA7CisKK2Vycm9yOgorICAgIGlmIChmMSkgZmNsb3NlKGYxKTsKKyAgICBpZiAoZjIpIGZjbG9zZShmMik7CisgICAgaWYgKGYzKSBmY2xvc2UoZjMpOworICAgIHJldHVybiBzdGF0dXM7CitAfQorQGVuZCBleGFtcGxlCisKK0Bub2RlIEJ1aWxkaW5nIGFuZCBJbnN0YWxsYXRpb24sIEJ1ZyBSZXBvcnRzLCBDb2RpbmcgQ29udmVudGlvbnMsIFRvcAorQGNoYXB0ZXIgQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbgorCitUaGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgcGFja2FnZSB3aWxsIHByb2JhYmx5IGJlIGRvbmUgYXMgYSBjb21wcmVzc2VkCitgYHRhcicnLWZvcm1hdCBmaWxlIGF2YWlsYWJsZSB2aWEgYW5vbnltb3VzIEZUUCBmcm9tIFNJUEIuTUlULkVEVS4KK1JldHJpZXZlIEBzYW1we3B1Yi9jb21fZXJyLnRhci5afSBhbmQgZXh0cmFjdCB0aGUgY29udGVudHMuICBBIHN1YmRpcmVjdG9yeQorQHR7cHJvZmlsZWR9IHNob3VsZCBiZSBjcmVhdGVkIHRvIGhvbGQgb2JqZWN0cyBjb21waWxlZCBmb3IgcHJvZmlsaW5nLgorUnVubmluZyBgYG1ha2UgYWxsJycgc2hvdWxkIHRoZW4gYmUgc3VmZmljaWVudCB0byBidWlsZCB0aGUgbGlicmFyeSBhbmQKK2Vycm9yLXRhYmxlIGNvbXBpbGVyLiAgVGhlIGZpbGVzIEBzYW1we2xpYmNvbV9lcnIuYX0sCitAc2FtcHtsaWJjb21fZXJyX3AuYX0sIEBzYW1we2NvbV9lcnIuaH0sIGFuZCBAc2FtcHtjb21waWxlX2V0fSBzaG91bGQgYmUKK2luc3RhbGxlZCBmb3IgdXNlOyBAc2FtcHtjb21fZXJyLjN9IGFuZCBAc2FtcHtjb21waWxlX2V0LjF9IGNhbiBhbHNvIGJlCitpbnN0YWxsZWQgYXMgbWFudWFsIHBhZ2VzLgorCitAbm9kZSBCdWcgUmVwb3J0cywgQWNrbm93bGVkZ2VtZW50cywgQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbiwgVG9wCitAY2hhcHRlciBCdWcgUmVwb3J0cworCitUaGUgcHJpbmNpcGFsIGF1dGhvciBvZiB0aGlzIGxpYnJhcnkgaXM6IEtlbgorUmFlYnVybiwgQHR7cmFlYnVybkBATUlULkVEVX0uICAKKworVGhpcyB2ZXJzaW9uIG9mIHRoZSBjb21fZXJyIGxpYnJhcnkgaXMgYmVpbmcgbWFpbnRhaW5lZCBieSBUaGVvZG9yZQorVHMnbywgYW5kIHNvIGJ1Z3MgYW5kIGNvbW1lbnRzIHNob3VsZCBiZSBzZW50IHRvIEB0e3R5dHNvQEB0aHVuay5vcmd9LgorCisKK0Bub2RlIEFja25vd2xlZGdlbWVudHMsICAsIEJ1ZyBSZXBvcnRzLCBUb3AKK0BjaGFwdGVyIEFja25vd2xlZGdlbWVudHMKKworSSB3b3VsZCBsaWtlIHRvIHRoYW5rOiBCaWxsIFNvbW1lcmZlbGQsIGZvciBoaXMgaGVscCB3aXRoIHNvbWUgb2YgdGhpcworZG9jdW1lbnRhdGlvbiwgYW5kIGNhdGNoaW5nIHNvbWUgb2YgdGhlIGJ1Z3MgdGhlIGZpcnN0IHRpbWUgYXJvdW5kOworSG9uZXl3ZWxsIEluZm9ybWF0aW9uIFN5c3RlbXMsIGZvciBub3Qga2lsbGluZyBvZmYgdGhlIEBlbXBoe011bHRpY3N9CitvcGVyYXRpbmcgc3lzdGVtIGJlZm9yZSBJIGhhZCBhbiBvcHBvcnR1bml0eSB0byB1c2UgaXQ7IEhvbmV5d2VsbCdzCitjdXN0b21lcnMsIHdobyBwZXJzdWFkZWQgdGhlbSBub3QgdG8gZG8gc28sIGZvciBhIHdoaWxlOyBUZWQgQW5kZXJzb24gb2YKK0NNVSwgZm9yIGNhdGNoaW5nIHNvbWUgcHJvYmxlbXMgYmVmb3JlIHZlcnNpb24gMS4yIGxlZnQgdGhlIG5lc3Q7IFN0YW4KK1phbmFyb3R0aSBhbmQgc2V2ZXJhbCBvdGhlcnMgb2YgTUlUJ3MgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkLAorZm9yIGdldHRpbmcgdXMgc3RhcnRlZCB3aXRoIGBgZGlzY3VzcywnJyBmb3Igd2hpY2ggdGhpcyBwYWNrYWdlIHdhcworb3JpZ2luYWxseSB3cml0dGVuOyBhbmQgZXZlcnlvbmUgSSd2ZSB0YWxrZWQgaW50byAtLS0gSSBtZWFuLCBhc2tlZCB0byByZWFkCit0aGlzIGRvY3VtZW50IGFuZCB0aGUgYGBtYW4nJyBwYWdlcy4KKworQGNvbnRlbnRzCitAYnllCmRpZmYgLS1naXQgYS9saWIvZXQvY29tX3JpZ2h0LmMgYi9saWIvZXQvY29tX3JpZ2h0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNjZWI1NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC9jb21fcmlnaHQuYwpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIGNvbV9yaWdodC5jIC0tIHByb3ZpZGUgSGVpbWRhbGwgLyBLZXJiZXJvczRrdGggY29tX2VyciBpbnRlcmZhY2VzCisgKiAJZm9yIGJhY2t3YXJkcyBjb21wYXRiaWxpdHkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgYnkgVGhlb2RvcmUgVHMnbworICoKKyAqIFRha2VuIGZyb20gbGliL2NvbV9lcnIvZXJyb3IuYyBmcm9tIEtlcmJlcm9zNGt0aCBkaXN0cmlidXRpb24uCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk4LCAyMDAxIEt1bmdsaWdhIFRla25pc2thIEj2Z3Nrb2xhbgorICogKFJveWFsIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBTdG9ja2hvbG0sIFN3ZWRlbikuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSW5zdGl0dXRlIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBJTlNUSVRVVEUgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBJTlNUSVRVVEUgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJjb21fZXJyLmgiCisjaW5jbHVkZSAiZXJyb3JfdGFibGUuaCIKKworY29uc3QgY2hhciAqCitjb21fcmlnaHQoc3RydWN0IGV0X2xpc3QgKmxpc3QsIGxvbmcgY29kZSkKK3sKKyAgICBzdHJ1Y3QgZXRfbGlzdCAqcDsKKyAgICBmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCWlmIChjb2RlID49IHAtPnRhYmxlLT5iYXNlICYmIGNvZGUgPCBwLT50YWJsZS0+YmFzZSArIHAtPnRhYmxlLT5uX21zZ3MpCisJICAgIHJldHVybiBwLT50YWJsZS0+bXNnc1tjb2RlIC0gcC0+dGFibGUtPmJhc2VdOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworY29uc3QgY2hhciAqCitjb21fcmlnaHRfcihzdHJ1Y3QgZXRfbGlzdCAqbGlzdCwgbG9uZyBjb2RlLCBjaGFyICpzdHIsIHNpemVfdCBsZW4pCit7CisgICAgc3RydWN0IGV0X2xpc3QgKnA7CisgICAgZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwlpZiAoKGNvZGUgPj0gcC0+dGFibGUtPmJhc2UpICYmCisJICAgIChjb2RlIDwgcC0+dGFibGUtPmJhc2UgKyBwLT50YWJsZS0+bl9tc2dzKSkgeworICAgICAgICAgICAgc3RybmNweShzdHIsIHAtPnRhYmxlLT5tc2dzW2NvZGUgLSBwLT50YWJsZS0+YmFzZV0sIGxlbik7CisgICAgICAgICAgICBzdHJbbGVuLTFdID0gJ1wwJzsKKyAgICAgICAgICAgIHJldHVybiBzdHI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBmb29iYXIgeworICAgIHN0cnVjdCBldF9saXN0IGV0bDsKKyAgICBzdHJ1Y3QgZXJyb3JfdGFibGUgdGFiOworfTsKKworLyoKKyAqIFdlIHByb3ZpZGUgdGhpcyByb3V0aW5lIGZvciBjb21wYXRpYmlsaXR5IHdpdGggSGVpbWRhbGwgZ2VuZXJhdGVkCisgKiBmb29fZXJyLmMgZmlsZXMsIGJ1dCB3ZSBkb24ndCB1c2UgdGhpcyBvdXJzZWx2ZXMgZm9yIGZvb19lcnIuYworICogZmlsZXMgZ2VuZXJhdGVkIGJ5IG91ciBjb21waWxlX2V0LiAgVGhpcyBpcyBzbyBvdXIgZm9vX2Vyci5jCisgKiBmaWxlcyBjYW4gYmUgdXNlZCB3aXRoIG9sZGVyIGNvbV9lcnIgbGlicmFyaWVzIHdpdGhvdXQgcnVubmluZworICogYWZvdWwgb2YgZGVwZW5kZW5jaWVzLgorICovCit2b2lkCitpbml0aWFsaXplX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0LAorCQkJIGNvbnN0IGNoYXIgKiptZXNzYWdlcywKKwkJCSBpbnQgbnVtX2Vycm9ycywKKwkJCSBsb25nIGJhc2UpCit7CisgICAgc3RydWN0IGV0X2xpc3QgKmV0LCAqKmVuZDsKKyAgICBzdHJ1Y3QgZXJyb3JfdGFibGUgKnRhYjsKKyAgICBzdHJ1Y3QgZm9vYmFyICpmOworCisgICAgZm9yIChlbmQgPSBsaXN0LCBldCA9ICpsaXN0OyBldDsgZW5kID0gJmV0LT5uZXh0LCBldCA9IGV0LT5uZXh0KQorICAgICAgICBpZiAoZXQtPnRhYmxlLT5tc2dzID09IG1lc3NhZ2VzKQorICAgICAgICAgICAgcmV0dXJuOworICAgIGYgPSBtYWxsb2Moc2l6ZW9mKCpmKSk7CisgICAgaWYgKGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIGV0ID0gJmYtPmV0bDsKKyAgICBldC0+dGFibGUgPSB0YWIgPSAmZi0+dGFiOworICAgIHRhYi0+bXNncyA9IG1lc3NhZ2VzOworICAgIHRhYi0+bl9tc2dzID0gbnVtX2Vycm9yczsKKyAgICB0YWItPmJhc2UgPSBiYXNlOworICAgIGV0LT5uZXh0ID0gTlVMTDsKKyAgICAqZW5kID0gZXQ7Cit9CisKKwordm9pZAorZnJlZV9lcnJvcl90YWJsZShzdHJ1Y3QgZXRfbGlzdCAqZXQpCit7CisgICAgd2hpbGUoZXQpeworCXN0cnVjdCBldF9saXN0ICpwID0gZXQ7CisJZXQgPSBldC0+bmV4dDsKKwlmcmVlKHApOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2xpYi9ldC9jb21waWxlX2V0LjEgYi9saWIvZXQvY29tcGlsZV9ldC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMTk0NDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXQvY29tcGlsZV9ldC4xCkBAIC0wLDAgKzEsODIgQEAKKy5cIiBDb3B5cmlnaHQgKGMpIDE5ODggTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwKKy5cIiBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorLlwiCisuXCIgJEhlYWRlciQKKy5cIgorLlRIIENPTVBJTEVfRVQgMSAiMzAgTWFyIDE5OTgiIFNJUEIKKy5TSCBOQU1FCitjb21waWxlX2V0IFwtIGVycm9yIHRhYmxlIGNvbXBpbGVyCisuU0ggU1lOT1BTSVMKKy5CIGNvbXBpbGVfZXQKK2ZpbGUKKy5TSCBERVNDUklQVElPTgorLkIgQ29tcGlsZV9ldAorY29udmVydHMgYSB0YWJsZSBsaXN0aW5nIGVycm9yLWNvZGUgbmFtZXMgYW5kIGFzc29jaWF0ZWQgbWVzc2FnZXMgaW50bworYSBDIHNvdXJjZSBmaWxlIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCB0aGUKKy5JUiBjb21fZXJyICgzKQorbGlicmFyeS4KKworVGhlIHNvdXJjZSBmaWxlIG5hbWUgbXVzdCBlbmQgd2l0aCBhIHN1ZmZpeCBvZiBgYC5ldCcnOyB0aGUgZmlsZQorY29uc2lzdHMgb2YgYSBkZWNsYXJhdGlvbiBzdXBwbHlpbmcgdGhlIG5hbWUgKHVwIHRvIGZvdXIgY2hhcmFjdGVycworbG9uZykgb2YgdGhlIGVycm9yLWNvZGUgdGFibGU6CisKKy5CIGVycm9yX3RhYmxlCisuSSBuYW1lCisKK2ZvbGxvd2VkIGJ5IHVwIHRvIDI1NiBlbnRyaWVzIG9mIHRoZSBmb3JtOgorCisuQiBlcnJvcl9jb2RlCisuSSBuYW1lLAorIgorLkkgc3RyaW5nCisiCisKK2FuZCBhIGZpbmFsCisKKy5CIGVuZAorCit0byBpbmRpY2F0ZSB0aGUgZW5kIG9mIHRoZSB0YWJsZS4KKworVGhlIG5hbWUgb2YgdGhlIHRhYmxlIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBuYW1lIG9mIGEgc3Vicm91dGluZQorLkkgaW5pdGlhbGl6ZV9YWFhYX2Vycm9yX3RhYmxlCit3aGljaCBtdXN0IGJlIGNhbGxlZCBpbiBvcmRlciBmb3IgdGhlCisuSSBjb21fZXJyCitsaWJyYXJ5IHRvIHJlY29nbml6ZSB0aGUgZXJyb3IgdGFibGUuCisKK1RoZSB2YXJpb3VzIGVycm9yIGNvZGVzIGRlZmluZWQgYXJlIGFzc2lnbmVkIHNlcXVlbnRpYWxseSBpbmNyZWFzaW5nCitudW1iZXJzIChzdGFydGluZyB3aXRoIGEgbGFyZ2UgbnVtYmVyIGNvbXB1dGVkIGFzIGEgaGFzaCBmdW5jdGlvbiBvZgordGhlIG5hbWUgb2YgdGhlIHRhYmxlKTsgdGh1cyBmb3IgY29tcGF0aWJpbGl0eSBpdCBpcyBzdWdnZXN0ZWQgdGhhdAorbmV3IGNvZGVzIGJlIGFkZGVkIG9ubHkgdG8gdGhlIGVuZCBvZiBhbiBleGlzdGluZyB0YWJsZSwgYW5kIHRoYXQgbm8KK2NvZGVzIGJlIHJlbW92ZWQgZnJvbSB0YWJsZXMuCisKK1RoZSBuYW1lcyBkZWZpbmVkIGluIHRoZSB0YWJsZSBhcmUgcGxhY2VkIGludG8gYSBDIGhlYWRlciBmaWxlIHdpdGgKK3ByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGRlZmluaW5nIHRoZW0gYXMgaW50ZWdlciBjb25zdGFudHMgb2YgdXAgdG8KKzMyIGJpdHMgaW4gbWFnbml0dWRlLgorCitBIEMgc291cmNlIGZpbGUgaXMgYWxzbyBnZW5lcmF0ZWQgd2hpY2ggc2hvdWxkIGJlIGNvbXBpbGVkIGFuZCBsaW5rZWQKK3dpdGggdGhlIG9iamVjdCBmaWxlcyB3aGljaCByZWZlcmVuY2UgdGhlc2UgZXJyb3IgY29kZXM7IGl0IGNvbnRhaW5zCit0aGUgdGV4dCBvZiB0aGUgbWVzc2FnZXMgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBzdWJyb3V0aW5lLiAgQm90aCBDCitmaWxlcyBoYXZlIG5hbWVzIGRlcml2ZWQgZnJvbSB0aGF0IG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgd2l0aAordGhlIGBgLmV0Jycgc3VmZml4IHJlcGxhY2VkIGJ5IGBgLmMnJyBhbmQgYGAuaCcnLgorCitBIGBgIycnIGluIHRoZSBzb3VyY2UgZmlsZSBpcyB0cmVhdGVkIGFzIGEgY29tbWVudCBjaGFyYWN0ZXIsIGFuZCBhbGwKK3JlbWFpbmluZyB0ZXh0IHRvIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBsaW5lIHdpbGwgYmUgaWdub3JlZC4KKworLlNIIEJVR1MKKworU2luY2UgdGhlIG9yaWdpbmFsCisuQiBjb21waWxlX2V0Cit1c2VzIGEgdmVyeSBzaW1wbGUgcGFyc2VyIGJhc2VkIG9uCisuSVIgeWFjYyAoMSksIAorYW5kIHRoaXMgY3VycmVudCB2ZXJzaW9uIG9mIAorLkIgY29tcGlsZV9ldAordXNlcyBhbiBhd2svc2VkIGNvbWJpbmF0aW9uIG9mIHNjcmlwdHMsIAoraXRzIGVycm9yIHJlY292ZXJ5IGxlYXZlcyBtdWNoIHRvIGJlIGRlc2lyZWQuCisKKy5cIiAuSVIgZm9yIG1hbnVhbCBlbnRyaWVzCisuXCIgLlBQIGZvciBwYXJhZ3JhcGggYnJlYWtzCisKKy5TSCAiU0VFIEFMU08iCitjb21fZXJyICgzKS4KKworS2VuIFJhZWJ1cm4sICJBIENvbW1vbiBFcnJvciBEZXNjcmlwdGlvbiBMaWJyYXJ5IGZvciBVTklYIi4KZGlmZiAtLWdpdCBhL2xpYi9ldC9jb21waWxlX2V0LnNoLmluIGIvbGliL2V0L2NvbXBpbGVfZXQuc2guaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4NjFmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC9jb21waWxlX2V0LnNoLmluCkBAIC0wLDAgKzEsNjIgQEAKKyMhL2Jpbi9zaAorIworIworCitkYXRhcm9vdGRpcj1AZGF0YXJvb3RkaXJACitBV0s9QEFXS0AKK0RJUj0iJHtESVItQGRhdGFkaXJAL2V0fSIKK0VUX0RJUj0iJHtFVF9ESVItQEVUX0RJUkB9IgorCitpZiB0ZXN0ICIkMSIgPSAiLS1idWlsZC10cmVlIiA7IHRoZW4KKyAgICBzaGlmdDsKKyAgICBESVI9IiRFVF9ESVIiCitmaQorCitpZiB0ZXN0ICJ4JDEiID0geCA7IHRoZW4KKyAgICBlY2hvICJVc2FnZTogY29tcGlsZV9ldCBmaWxlIgorICAgIGV4aXQgMQorZmkKKworZm9yIGFzX3ZhciBpbiBcCisgIExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBcCisgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCisgIExDX1RFTEVQSE9ORSBMQ19USU1FCitkbworICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgorICBlbHNlCisgICAgJGFzX3Vuc2V0ICRhc192YXIKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAhIC1mICIkRElSL2V0X2guYXdrIiB8fCB0ZXN0ICEgLWYgIiRESVIvZXRfYy5hd2siIDsgdGhlbgorICAgIERJUj0iJEVUX0RJUiIKKyMgICAgZWNobyAiRmFsbGluZyBiYWNrIHRvICRESVIuLi4iCisgICAgaWYgdGVzdCAhIC1mICIkRElSL2V0X2guYXdrIiB8fCB0ZXN0ICEgLWYgIiRESVIvZXRfYy5hd2siIDsgdGhlbgorCWVjaG8gImNvbXBpbGVfZXQ6IENvdWxkbid0IGZpbmQgY29tcGlsZV9ldCdzIHRlbXBsYXRlIGZpbGVzLiIKKwlleGl0IDEKKyAgICBmaQorZmkKKworUk9PVD1gZWNobyAkMSB8IHNlZCAtZSBzLy5ldCQvL2AKK0JBU0U9YGJhc2VuYW1lICRST09UYAorCitpZiB0ZXN0ICEgLWYgIiRST09ULmV0IiA7IHRoZW4KKyAgICBlY2hvICJjb21waWxlX2V0OiAkUk9PVC5ldDogRmlsZSBub3QgZm91bmQiCisgICAgZXhpdCAxOworZmkKKworJEFXSyAtZiAiJHtESVJ9L2V0X2guYXdrIiAib3V0ZmlsZT0ke0JBU0V9LmguJCQiICJvdXRmbj0ke0JBU0V9LmgiICIkUk9PVC5ldCIKK2lmIHRlc3QgLWYgJHtCQVNFfS5oICYmIGNtcCAtcyAke0JBU0V9LmguJCQgJHtCQVNFfS5oIDsgdGhlbgorICAgIHJtIC1mICR7QkFTRX0uaC4kJAorZWxzZQorICAgIG12IC1mICR7QkFTRX0uaC4kJCAke0JBU0V9LmgKKyAgICBjaG1vZCBhLXcgJHtCQVNFfS5oCitmaQorJEFXSyAtZiAiJHtESVJ9L2V0X2MuYXdrIiAib3V0ZmlsZT0ke0JBU0V9LmMuJCQiICJvdXRmbj0ke0JBU0V9LmMiICIkUk9PVC5ldCIKK2lmIHRlc3QgLWYgJHtCQVNFfS5jICYmIGNtcCAtcyAke0JBU0V9LmMuJCQgJHtCQVNFfS5jIDsgdGhlbgorICAgIHJtIC1mICR7QkFTRX0uYy4kJAorZWxzZQorICAgIG12IC1mICR7QkFTRX0uYy4kJCAke0JBU0V9LmMKKyAgICBjaG1vZCBhLXcgJHtCQVNFfS5jCitmaQpkaWZmIC0tZ2l0IGEvbGliL2V0L2Vycm9yX21lc3NhZ2UuYyBiL2xpYi9ldC9lcnJvcl9tZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3OTEyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC9lcnJvcl9tZXNzYWdlLmMKQEAgLTAsMCArMSwzMzcgQEAKKy8qCisgKiAkSGVhZGVyJAorICogJFNvdXJjZSQKKyAqICRMb2NrZXIkCisgKgorICogQ29weXJpZ2h0IDE5ODcgYnkgdGhlIFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZAorICogb2YgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICogTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmZGVmIEhBVkVfU1lTX1BSQ1RMX0gKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNlbHNlCisjZGVmaW5lIFBSX0dFVF9EVU1QQUJMRSAzCisjZW5kaWYKKyNpZiAoIWRlZmluZWQoSEFWRV9QUkNUTCkgJiYgZGVmaW5lZChsaW51eCkpCisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU0VNQVBIT1JFX0gKKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaW5jbHVkZSAiY29tX2Vyci5oIgorI2luY2x1ZGUgImVycm9yX3RhYmxlLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworI2lmZGVmIFRMUworI2RlZmluZSBUSFJFQURfTE9DQUwgc3RhdGljIFRMUworI2Vsc2UKKyNkZWZpbmUgVEhSRUFEX0xPQ0FMIHN0YXRpYworI2VuZGlmCisKK1RIUkVBRF9MT0NBTCBjaGFyIGJ1ZmZlclsyNV07CisKK3N0cnVjdCBldF9saXN0ICogX2V0X2xpc3QgPSAoc3RydWN0IGV0X2xpc3QgKikgTlVMTDsKK3N0cnVjdCBldF9saXN0ICogX2V0X2R5bmFtaWNfbGlzdCA9IChzdHJ1Y3QgZXRfbGlzdCAqKSBOVUxMOworCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgQ09NRVJSX0FUVFIoeCkgX19hdHRyaWJ1dGVfXyh4KQorI2Vsc2UKKyNkZWZpbmUgQ09NRVJSX0FUVFIoeCkKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TRU1fSU5JVAorc3RhdGljIHNlbV90IF9ldF9sb2NrOworc3RhdGljIGludCBfZXRfbG9ja19pbml0aWFsaXplZDsKKworc3RhdGljIHZvaWQgQ09NRVJSX0FUVFIoKGNvbnN0cnVjdG9yKSkgc2V0dXBfZXRfbG9jayh2b2lkKQoreworCXNlbV9pbml0KCZfZXRfbG9jaywgMCwgMSk7CisJX2V0X2xvY2tfaW5pdGlhbGl6ZWQgPSAxOworfQorCitzdGF0aWMgdm9pZCBDT01FUlJfQVRUUigoZGVzdHJ1Y3RvcikpIGZpbmlfZXRfbG9jayh2b2lkKQoreworCXNlbV9kZXN0cm95KCZfZXRfbG9jayk7CisJX2V0X2xvY2tfaW5pdGlhbGl6ZWQgPSAwOworfQorI2VuZGlmCisKKworaW50IGV0X2xpc3RfbG9jayh2b2lkKQoreworI2lmZGVmIEhBVkVfU0VNX0lOSVQKKwlpZiAoIV9ldF9sb2NrX2luaXRpYWxpemVkKQorCQlzZXR1cF9ldF9sb2NrKCk7CisJcmV0dXJuIHNlbV93YWl0KCZfZXRfbG9jayk7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKK2ludCBldF9saXN0X3VubG9jayh2b2lkKQoreworI2lmZGVmIEhBVkVfU0VNX0lOSVQKKwlpZiAoX2V0X2xvY2tfaW5pdGlhbGl6ZWQpCisJCXJldHVybiBzZW1fcG9zdCgmX2V0X2xvY2spOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3R5cGVkZWYgY2hhciAqKCpnZXR0ZXh0ZikgKGNvbnN0IGNoYXIgKik7CisKK3N0YXRpYyBnZXR0ZXh0ZiBjb21fZXJyX2dldHRleHQgPSBOVUxMOworCitnZXR0ZXh0ZiBzZXRfY29tX2Vycl9nZXR0ZXh0KGdldHRleHRmIG5ld19wcm9jKQoreworICAgIGdldHRleHRmIHggPSBjb21fZXJyX2dldHRleHQ7CisKKyAgICBjb21fZXJyX2dldHRleHQgPSBuZXdfcHJvYzsKKworICAgIHJldHVybiB4OworfQorCisKK2NvbnN0IGNoYXIgKiBlcnJvcl9tZXNzYWdlIChlcnJjb2RlX3QgY29kZSkKK3sKKyAgICBpbnQgb2Zmc2V0OworICAgIHN0cnVjdCBldF9saXN0ICpldDsKKyAgICBlcnJjb2RlX3QgdGFibGVfbnVtOworICAgIGludCBzdGFydGVkID0gMDsKKyAgICBjaGFyICpjcDsKKworICAgIG9mZnNldCA9IChpbnQpIChjb2RlICYgKCgxPDxFUlJDT0RFX1JBTkdFKS0xKSk7CisgICAgdGFibGVfbnVtID0gY29kZSAtIG9mZnNldDsKKyAgICBpZiAoIXRhYmxlX251bSkgeworI2lmZGVmIEhBU19TWVNfRVJSTElTVAorCWlmIChvZmZzZXQgPCBzeXNfbmVycikKKwkgICAgcmV0dXJuKHN5c19lcnJsaXN0W29mZnNldF0pOworCWVsc2UKKwkgICAgZ290byBvb3BzOworI2Vsc2UKKwljcCA9IHN0cmVycm9yKG9mZnNldCk7CisJaWYgKGNwKQorCSAgICByZXR1cm4oY3ApOworCWVsc2UKKwkgICAgZ290byBvb3BzOworI2VuZGlmCisgICAgfQorICAgIGV0X2xpc3RfbG9jaygpOworICAgIGZvciAoZXQgPSBfZXRfbGlzdDsgZXQ7IGV0ID0gZXQtPm5leHQpIHsKKwlpZiAoKGV0LT50YWJsZS0+YmFzZSAmIDB4ZmZmZmZmTCkgPT0gKHRhYmxlX251bSAmIDB4ZmZmZmZmTCkpIHsKKwkgICAgLyogVGhpcyBpcyB0aGUgcmlnaHQgdGFibGUgKi8KKwkgICAgaWYgKGV0LT50YWJsZS0+bl9tc2dzIDw9IG9mZnNldCkgeworCQlicmVhazsKKwkgICAgfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqbXNnID0gZXQtPnRhYmxlLT5tc2dzW29mZnNldF07CisJCWV0X2xpc3RfdW5sb2NrKCk7CisJCWlmIChjb21fZXJyX2dldHRleHQpCisJCSAgICByZXR1cm4gKCpjb21fZXJyX2dldHRleHQpKG1zZyk7CisJCWVsc2UKKwkJICAgIHJldHVybiBtc2c7CisJICAgIH0KKwl9CisgICAgfQorICAgIGZvciAoZXQgPSBfZXRfZHluYW1pY19saXN0OyBldDsgZXQgPSBldC0+bmV4dCkgeworCWlmICgoZXQtPnRhYmxlLT5iYXNlICYgMHhmZmZmZmZMKSA9PSAodGFibGVfbnVtICYgMHhmZmZmZmZMKSkgeworCSAgICAvKiBUaGlzIGlzIHRoZSByaWdodCB0YWJsZSAqLworCSAgICBpZiAoZXQtPnRhYmxlLT5uX21zZ3MgPD0gb2Zmc2V0KSB7CisJCWJyZWFrOworCSAgICB9IGVsc2UgeworCQljb25zdCBjaGFyICptc2cgPSBldC0+dGFibGUtPm1zZ3Nbb2Zmc2V0XTsKKwkJZXRfbGlzdF91bmxvY2soKTsKKwkJaWYgKGNvbV9lcnJfZ2V0dGV4dCkKKwkJICAgIHJldHVybiAoKmNvbV9lcnJfZ2V0dGV4dCkobXNnKTsKKwkJZWxzZQorCQkgICAgcmV0dXJuIG1zZzsKKwkgICAgfQorCX0KKyAgICB9CisgICAgZXRfbGlzdF91bmxvY2soKTsKK29vcHM6CisgICAgc3RyY3B5IChidWZmZXIsICJVbmtub3duIGNvZGUgIik7CisgICAgaWYgKHRhYmxlX251bSkgeworCXN0cmNhdCAoYnVmZmVyLCBlcnJvcl90YWJsZV9uYW1lICh0YWJsZV9udW0pKTsKKwlzdHJjYXQgKGJ1ZmZlciwgIiAiKTsKKyAgICB9CisgICAgZm9yIChjcCA9IGJ1ZmZlcjsgKmNwOyBjcCsrKQorCTsKKyAgICBpZiAob2Zmc2V0ID49IDEwMCkgeworCSpjcCsrID0gJzAnICsgb2Zmc2V0IC8gMTAwOworCW9mZnNldCAlPSAxMDA7CisJc3RhcnRlZCsrOworICAgIH0KKyAgICBpZiAoc3RhcnRlZCB8fCBvZmZzZXQgPj0gMTApIHsKKwkqY3ArKyA9ICcwJyArIG9mZnNldCAvIDEwOworCW9mZnNldCAlPSAxMDsKKyAgICB9CisgICAgKmNwKysgPSAnMCcgKyBvZmZzZXQ7CisgICAgKmNwID0gJ1wwJzsKKyAgICByZXR1cm4oYnVmZmVyKTsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSB3aWxsIG9ubHkgcmV0dXJuIGEgdmFsdWUgaWYgdGhlIHdlIGFyZSBub3QgcnVubmluZyBhcworICogYSBwcml2aWxlZ2VkIHByb2Nlc3MuCisgKi8KK3N0YXRpYyBjaGFyICpzYWZlX2dldGVudihjb25zdCBjaGFyICphcmcpCit7CisJaWYgKChnZXR1aWQoKSAhPSBnZXRldWlkKCkpIHx8IChnZXRnaWQoKSAhPSBnZXRlZ2lkKCkpKQorCQlyZXR1cm4gTlVMTDsKKyNpZiBIQVZFX1BSQ1RMCisJaWYgKHByY3RsKFBSX0dFVF9EVU1QQUJMRSwgMCwgMCwgMCwgMCkgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisjZWxzZQorI2lmIChkZWZpbmVkKGxpbnV4KSAmJiBkZWZpbmVkKFNZU19wcmN0bCkpCisJaWYgKHN5c2NhbGwoU1lTX3ByY3RsLCBQUl9HRVRfRFVNUEFCTEUsIDAsIDAsIDAsIDApID09IDApCisJCXJldHVybiBOVUxMOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9TRUNVUkVfR0VURU5WKQorCXJldHVybiBzZWN1cmVfZ2V0ZW52KGFyZyk7CisjZWxpZiBkZWZpbmVkKEhBVkVfX19TRUNVUkVfR0VURU5WKQorCXJldHVybiBfX3NlY3VyZV9nZXRlbnYoYXJnKTsKKyNlbHNlCisJcmV0dXJuIGdldGVudihhcmcpOworI2VuZGlmCit9CisKKyNkZWZpbmUgREVCVUdfSU5JVAkweDgwMDAKKyNkZWZpbmUgREVCVUdfQUREUkVNT1ZFIDB4MDAwMQorCitzdGF0aWMgaW50IGRlYnVnX21hc2sgPSAwOworc3RhdGljIEZJTEUgKmRlYnVnX2YgPSAwOworCitzdGF0aWMgdm9pZCBpbml0X2RlYnVnKHZvaWQpCit7CisJY2hhcgkqZHN0ciwgKmZuLCAqdG1wOworCWludAlmZCwgZmxhZ3M7CisKKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX0lOSVQpCisJCXJldHVybjsKKworCWRzdHIgPSBnZXRlbnYoIkNPTUVSUl9ERUJVRyIpOworCWlmIChkc3RyKSB7CisJCWRlYnVnX21hc2sgPSBzdHJ0b3VsKGRzdHIsICZ0bXAsIDApOworCQlpZiAoKnRtcCB8fCBlcnJubykKKwkJCWRlYnVnX21hc2sgPSAwOworCX0KKworCWRlYnVnX21hc2sgfD0gREVCVUdfSU5JVDsKKwlpZiAoZGVidWdfbWFzayA9PSBERUJVR19JTklUKQorCQlyZXR1cm47CisKKwlmbiA9IHNhZmVfZ2V0ZW52KCJDT01FUlJfREVCVUdfRklMRSIpOworCWlmIChmbikKKwkJZGVidWdfZiA9IGZvcGVuKGZuLCAiYSIpOworCWlmICghZGVidWdfZikKKwkJZGVidWdfZiA9IGZvcGVuKCIvZGV2L3R0eSIsICJhIik7CisJaWYgKGRlYnVnX2YpIHsKKwkJZmQgPSBmaWxlbm8oZGVidWdfZik7CisJCWlmIChmZCA+PSAwKSB7CisJCQlmbGFncyA9IGZjbnRsKGZkLCBGX0dFVEZEKTsKKwkJCWlmIChmbGFncyA+PSAwKQorCQkJCWZjbnRsKGZkLCBGX1NFVEZELCBmbGFncyB8IEZEX0NMT0VYRUMpOworCQl9CisJfSBlbHNlCisJCWRlYnVnX21hc2sgPSBERUJVR19JTklUOworCit9CisKKy8qCisgKiBOZXcgaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IGtyYjUncyBjb21fZXJyIGxpYnJhcnkKKyAqLworZXJyY29kZV90IGFkZF9lcnJvcl90YWJsZShjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgKiBldCkKK3sKKwlzdHJ1Y3QgZXRfbGlzdCAqZWw7CisKKwlpZiAoIShlbCA9IChzdHJ1Y3QgZXRfbGlzdCAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBldF9saXN0KSkpKQorCQlyZXR1cm4gRU5PTUVNOworCisJaWYgKGV0X2xpc3RfbG9jaygpICE9IDApIHsKKwkJZnJlZShlbCk7CisJCXJldHVybiBlcnJubzsKKwl9CisKKwllbC0+dGFibGUgPSBldDsKKwllbC0+bmV4dCA9IF9ldF9keW5hbWljX2xpc3Q7CisJX2V0X2R5bmFtaWNfbGlzdCA9IGVsOworCisJaW5pdF9kZWJ1ZygpOworCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfQUREUkVNT1ZFKQorCQlmcHJpbnRmKGRlYnVnX2YsICJhZGRfZXJyb3JfdGFibGU6ICVzICgweCVwKVxuIiwKKwkJCWVycm9yX3RhYmxlX25hbWUoZXQtPmJhc2UpLAorCQkJKGNvbnN0IHZvaWQgKikgZXQpOworCisJZXRfbGlzdF91bmxvY2soKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE5ldyBpbnRlcmZhY2UgcHJvdmlkZWQgYnkga3JiNSdzIGNvbV9lcnIgbGlicmFyeQorICovCitlcnJjb2RlX3QgcmVtb3ZlX2Vycm9yX3RhYmxlKGNvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSAqIGV0KQoreworCXN0cnVjdCBldF9saXN0ICplbDsKKwlzdHJ1Y3QgZXRfbGlzdCAqZWwyID0gMDsKKworCWlmIChldF9saXN0X2xvY2soKSAhPSAwKQorCQlyZXR1cm4gRU5PRU5UOworCisJZWwgPSBfZXRfZHluYW1pY19saXN0OworCWluaXRfZGVidWcoKTsKKwl3aGlsZSAoZWwpIHsKKwkJaWYgKGVsLT50YWJsZS0+YmFzZSA9PSBldC0+YmFzZSkgeworCQkJaWYgKGVsMikJLyogTm90IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgKi8KKwkJCQllbDItPm5leHQgPSBlbC0+bmV4dDsKKwkJCWVsc2UKKwkJCQlfZXRfZHluYW1pY19saXN0ID0gZWwtPm5leHQ7CisJCQkodm9pZCkgZnJlZShlbCk7CisJCQlpZiAoZGVidWdfbWFzayAmIERFQlVHX0FERFJFTU9WRSkKKwkJCQlmcHJpbnRmKGRlYnVnX2YsCisJCQkJCSJyZW1vdmVfZXJyb3JfdGFibGU6ICVzICgweCVwKVxuIiwKKwkJCQkJZXJyb3JfdGFibGVfbmFtZShldC0+YmFzZSksCisJCQkJCShjb25zdCB2b2lkICopIGV0KTsKKwkJCWV0X2xpc3RfdW5sb2NrKCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQllbDIgPSBlbDsKKwkJZWwgPSBlbC0+bmV4dDsKKwl9CisJaWYgKGRlYnVnX21hc2sgJiBERUJVR19BRERSRU1PVkUpCisJCWZwcmludGYoZGVidWdfZiwgInJlbW92ZV9lcnJvcl90YWJsZSBGQUlMRUQ6ICVzICgweCVwKVxuIiwKKwkJCWVycm9yX3RhYmxlX25hbWUoZXQtPmJhc2UpLAorCQkJKGNvbnN0IHZvaWQgKikgZXQpOworCWV0X2xpc3RfdW5sb2NrKCk7CisJcmV0dXJuIEVOT0VOVDsKK30KKworLyoKKyAqIFZhcmlhbnQgb2YgdGhlIGludGVyZmFjZSBwcm92aWRlZCBieSBIZWltZGFsJ3MgY29tX2VyciBsaWJyYXJ5CisgKi8KK3ZvaWQKK2FkZF90b19lcnJvcl90YWJsZShzdHJ1Y3QgZXRfbGlzdCAqbmV3X3RhYmxlKQoreworCWFkZF9lcnJvcl90YWJsZShuZXdfdGFibGUtPnRhYmxlKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9ldC9lcnJvcl90YWJsZS5oIGIvbGliL2V0L2Vycm9yX3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlNDc2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC9lcnJvcl90YWJsZS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk4OCBieSB0aGUgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkIG9mIHRoZQorICogTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICogTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaWZuZGVmIF9FVF9ICisKK3N0cnVjdCBldF9saXN0IHsKKyAgICBzdHJ1Y3QgZXRfbGlzdCAqbmV4dDsKKyAgICBjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgKnRhYmxlOworfTsKK2V4dGVybiBzdHJ1Y3QgZXRfbGlzdCAqX2V0X2xpc3QsICpfZXRfZHluYW1pY19saXN0OworCisjZGVmaW5lCUVSUkNPREVfUkFOR0UJOAkvKiAjIG9mIGJpdHMgdG8gc2hpZnQgdGFibGUgbnVtYmVyICovCisjZGVmaW5lCUJJVFNfUEVSX0NIQVIJNgkvKiAjIGJpdHMgdG8gc2hpZnQgcGVyIGNoYXJhY3RlciBpbiBuYW1lICovCisKK2V4dGVybiBjb25zdCBjaGFyICplcnJvcl90YWJsZV9uYW1lKGVycmNvZGVfdCBudW0pOworCisjZGVmaW5lIF9FVF9ICisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9ldC9ldF9jLmF3ayBiL2xpYi9ldC9ldF9jLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWMzM2JhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V0L2V0X2MuYXdrCkBAIC0wLDAgKzEsMjY5IEBACitCRUdJTiB7IAoraWYgKCBsZW5ndGgob3V0Zm4pID09IDApIHsKKwlvdXRmbiA9IG91dGZpbGUKK30KK2NoYXJfc2hpZnQ9NjQKKyMjICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OV8iOworYzJuWyJBIl09MQorYzJuWyJCIl09MgorYzJuWyJDIl09MworYzJuWyJEIl09NAorYzJuWyJFIl09NQorYzJuWyJGIl09NgorYzJuWyJHIl09NworYzJuWyJIIl09OAorYzJuWyJJIl09OQorYzJuWyJKIl09MTAKK2MyblsiSyJdPTExCitjMm5bIkwiXT0xMgorYzJuWyJNIl09MTMKK2MyblsiTiJdPTE0CitjMm5bIk8iXT0xNQorYzJuWyJQIl09MTYKK2MyblsiUSJdPTE3CitjMm5bIlIiXT0xOAorYzJuWyJTIl09MTkKK2MyblsiVCJdPTIwCitjMm5bIlUiXT0yMQorYzJuWyJWIl09MjIKK2MyblsiVyJdPTIzCitjMm5bIlgiXT0yNAorYzJuWyJZIl09MjUKK2MyblsiWiJdPTI2CitjMm5bImEiXT0yNworYzJuWyJiIl09MjgKK2MyblsiYyJdPTI5CitjMm5bImQiXT0zMAorYzJuWyJlIl09MzEKK2MyblsiZiJdPTMyCitjMm5bImciXT0zMworYzJuWyJoIl09MzQKK2MyblsiaSJdPTM1CitjMm5bImoiXT0zNgorYzJuWyJrIl09MzcKK2MyblsibCJdPTM4CitjMm5bIm0iXT0zOQorYzJuWyJuIl09NDAKK2MyblsibyJdPTQxCitjMm5bInAiXT00MgorYzJuWyJxIl09NDMKK2MyblsiciJdPTQ0CitjMm5bInMiXT00NQorYzJuWyJ0Il09NDYKK2MyblsidSJdPTQ3CitjMm5bInYiXT00OAorYzJuWyJ3Il09NDkKK2MyblsieCJdPTUwCitjMm5bInkiXT01MQorYzJuWyJ6Il09NTIKK2MyblsiMCJdPTUzCitjMm5bIjEiXT01NAorYzJuWyIyIl09NTUKK2MyblsiMyJdPTU2CitjMm5bIjQiXT01NworYzJuWyI1Il09NTgKK2MyblsiNiJdPTU5CitjMm5bIjciXT02MAorYzJuWyI4Il09NjEKK2MyblsiOSJdPTYyCitjMm5bIl8iXT02MworfQorL14jLyB7IG5leHQgfQorL15bIFx0XSooZXJyb3JfdGFibGV8ZXQpWyBcdF0rW2EtekEtWl1bYS16QS1aMC05X10rLyB7CisJdGFibGVfbnVtYmVyID0gMAorCW1vZF9iYXNlID0gMTAwMDAwMAorCWlmIChORiA+IDIpIHsKKwkgICAgdGFibGVfbmFtZSA9ICQzCisJICAgIGJhc2VfbmFtZSA9ICQyCisJfSBlbHNlIHsKKwkgICAgdGFibGVfbmFtZSA9ICQyCisJICAgIGJhc2VfbmFtZSA9IHRhYmxlX25hbWUKKwl9CisJZm9yKGk9MTsgaTw9bGVuZ3RoKGJhc2VfbmFtZSk7IGkrKykgeworCSAgICB0YWJsZV9udW1iZXI9KHRhYmxlX251bWJlcipjaGFyX3NoaWZ0KStjMm5bc3Vic3RyKGJhc2VfbmFtZSxpLDEpXQorCX0KKworCSMgV2Ugc3RhcnQgcGxheWluZyAqX2hpZ2gsICpsb3cgZ2FtZXMgaGVyZSBiZWNhdXNlIHRoZSBzb21lCisJIyBhd2sgcHJvZ3JhbXMgZG8gbm90IGhhdmUgdGhlIG5lY2Vzc2FyeSBwcmVjaXNpb24gKHNpZ2gpCisJdGFiX2Jhc2VfbG93ID0gdGFibGVfbnVtYmVyICUgbW9kX2Jhc2UKKwlpZiAodGFiX2Jhc2VfbG93IDwgMCkgeworCQkjIFdvcmsgYXJvdW5kIHN0dXBpZCBidWcgaW4gdGhlIEFSTSBsaWJtCisJCXRhYl9iYXNlX2xvdyA9IHRhYl9iYXNlX2xvdyArIG1vZF9iYXNlCisJfQorCXRhYl9iYXNlX2hpZ2ggPSBpbnQodGFibGVfbnVtYmVyIC8gbW9kX2Jhc2UpCisJdGFiX2Jhc2Vfc2lnbiA9IDE7CisKKwkjIGZpZ3VyZSBvdXQ6IHRhYmxlX251bWJlcl9iYXNlPXRhYmxlX251bWJlcioyNTYKKwl0YWJfYmFzZV9sb3cgPSB0YWJfYmFzZV9sb3cgKiAyNTYKKwl0YWJfYmFzZV9oaWdoID0gKHRhYl9iYXNlX2hpZ2ggKiAyNTYpICsgXAorCQkJaW50KHRhYl9iYXNlX2xvdyAvIG1vZF9iYXNlKQorCXRhYl9iYXNlX2xvdyA9IHRhYl9iYXNlX2xvdyAlIG1vZF9iYXNlCisJaWYgKHRhYl9iYXNlX2xvdyA8IDApIHsKKwkJIyBXb3JrIGFyb3VuZCBzdHVwaWQgYnVnIGluIHRoZSBBUk0gbGlibQorCQl0YWJfYmFzZV9sb3cgPSB0YWJfYmFzZV9sb3cgKyBtb2RfYmFzZQorCX0KKworCWlmICh0YWJsZV9udW1iZXIgPiAxMjgqMjU2KjI1NikgeworCQkjIGZpZ3VyZSBvdXQ6ICB0YWJsZV9udW1iZXJfYmFzZSAtPSAyNTYqMjU2KjI1NioyNTYKKwkJIyBzdWJfaGlnaCwgc3ViX2xvdyBpcyAyNTYqMjU2KjI1NioyNTYKKwkJc3ViX2xvdyA9IDI1NioyNTYqMjU2ICUgbW9kX2Jhc2UKKwkJc3ViX2hpZ2ggPSBpbnQoMjU2KjI1NioyNTYgLyBtb2RfYmFzZSkKKworCQlzdWJfbG93ID0gc3ViX2xvdyAqIDI1NgorCQlzdWJfaGlnaCA9IChzdWJfaGlnaCAqIDI1NikgKyBpbnQoc3ViX2xvdyAvIG1vZF9iYXNlKQorCQlzdWJfbG93ID0gc3ViX2xvdyAlIG1vZF9iYXNlCisKKwkJdGFiX2Jhc2VfbG93ID0gc3ViX2xvdyAtIHRhYl9iYXNlX2xvdzsKKwkJdGFiX2Jhc2VfaGlnaCA9IHN1Yl9oaWdoIC0gdGFiX2Jhc2VfaGlnaDsKKwkJdGFiX2Jhc2Vfc2lnbiA9IC0xOworCQlpZiAodGFiX2Jhc2VfbG93IDwgMCkgeworCQkJdGFiX2Jhc2VfbG93ID0gdGFiX2Jhc2VfbG93ICsgbW9kX2Jhc2UKKwkJCXRhYl9iYXNlX2hpZ2gtLQorCQl9CisJfQorCXByaW50ICIvKiIgPiBvdXRmaWxlCisJcHJpbnQgIiAqICIgb3V0Zm4gIjoiID4gb3V0ZmlsZQorCXByaW50ICIgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQ7IHBsZWFzZSBkbyBub3QgZWRpdCBpdC4iID4gb3V0ZmlsZQorCXByaW50ICIgKi8iID4gb3V0ZmlsZQorCisJcHJpbnQgIiIgPiBvdXRmaWxlCisJcHJpbnQgIiNpbmNsdWRlIDxzdGRsaWIuaD4iID4gb3V0ZmlsZQorCXByaW50ICIiID4gb3V0ZmlsZQorCXByaW50ICIjZGVmaW5lIE5fKGEpIGEiID4gb3V0ZmlsZQorCXByaW50ICIiID4gb3V0ZmlsZQorCXByaW50ICJzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRleHRbXSA9IHsiID4gb3V0ZmlsZQorCXRhYmxlX2l0ZW1fY291bnQgPSAwCit9CisKKyhjb250aW51YXRpb24gPT0gMSkgJiYgKCQwIH4gL1xcWyBcdF0qJC8pIHsKKwl0ZXh0PXN1YnN0cigkMCwxLGxlbmd0aCgkMCktMSk7CisjCXByaW50ZiAiXHRcdFwiJXNcIlxuIiwgdGV4dCA+IG91dGZpbGUKKwljb250X2J1Zj1jb250X2J1ZiB0ZXh0OworfQorCisoY29udGludWF0aW9uID09IDEpICYmICgkMCB+IC8iWyBcdF0qJC8pIHsKKyMJcHJpbnRmICJcdFx0XCIlcyxcbiIsICQwID4gb3V0ZmlsZQorCXByaW50ZiAiXHROXyglcyksXG4iLCBjb250X2J1ZiAkMCA+IG91dGZpbGUKKwljb250aW51YXRpb24gPSAwOworfQorCisvXlsgXHRdKihlcnJvcl9jb2RlfGVjKVsgXHRdK1tBLVpfMC05XSssW14gXHRdLyB7CisJIyBCZSB0b2xlcmFudCB0byBtaXNzaW5nIHdoaXRlc3BhY2UgYWZ0ZXIgYCwnIC4uLgorCXN1YigvLC8sICIsICIpCit9CisKKy9eWyBcdF0qKGVycm9yX2NvZGV8ZWMpWyBcdF0rW0EtWl8wLTldKyxbIFx0XSokLyB7CisJdGFibGVfaXRlbV9jb3VudCsrCisJc2tpcG9uZT0xCisJbmV4dAorfQorCisvXlsgXHRdKihlcnJvcl9jb2RlfGVjKVsgXHRdK1tBLVpfMC05XSssWyBcdF0qIi4qIlsgXHRdKiQvIHsKKwl0ZXh0PSIiCisJZm9yIChpPTM7IGk8PU5GOyBpKyspIHsgCisJICAgIHRleHQgPSB0ZXh0IEZTICRpCisJfQorCXRleHQ9c3Vic3RyKHRleHQsMixsZW5ndGgodGV4dCktMSk7CisJcHJpbnRmICJcdE5fKCVzKSxcbiIsIHRleHQgPiBvdXRmaWxlCisJdGFibGVfaXRlbV9jb3VudCsrCit9CisKKy9eWyBcdF0qKGVycm9yX2NvZGV8ZWMpWyBcdF0rW0EtWl8wLTldKyxbIFx0XSoiLipcXFsgXHRdKiQvIHsKKwl0ZXh0PSIiCisJZm9yIChpPTM7IGk8PU5GOyBpKyspIHsgCisJICAgIHRleHQgPSB0ZXh0IEZTICRpCisJfQorCXRleHQ9c3Vic3RyKHRleHQsMixsZW5ndGgodGV4dCktMik7CisjCXByaW50ZiAiXHQlc1wiXG4iLCB0ZXh0ID4gb3V0ZmlsZQorCWNvbnRfYnVmPXRleHQKKwl0YWJsZV9pdGVtX2NvdW50KysKKwljb250aW51YXRpb24rKzsKK30KKworL15bIFx0XSoiLipcXFsgXHRdKiQvIHsKKwlpZiAoc2tpcG9uZSkgeworCSAgICB0ZXh0PXN1YnN0cigkMCwxLGxlbmd0aCgkMCktMSk7CisjCSAgICBwcmludGYgIlx0JXNcIlxuIiwgdGV4dCA+IG91dGZpbGUKKwkgICAgY29udF9idWY9dGV4dAorCSAgICBjb250aW51YXRpb24rKzsKKwl9CisJc2tpcG9uZT0wCit9CisKK3sgCisJaWYgKHNraXBvbmUpIHsKKwkgICAgcHJpbnRmICJcdE5fKCVzKSxcbiIsICQwID4gb3V0ZmlsZQorCX0KKwlza2lwb25lPTAKK30KKworL15bIFx0XSoocHJlZml4KSQvIHsKKwlwcmVmaXhfc3RyID0gIiIKK30KKworL15bIFx0XSoocHJlZml4KVsgXHRdK1tBLVpfMC05XSsvIHsKKwlwcmVmaXhfc3RyID0gJDIgIl8iCit9CisKKy9eWyBcdF0qKGluZGV4KVsgXHRdK1tBLVpfMC05XSsvIHsKKwluZXdfaWR4ID0gJDIKKwlmb3IgKGkgPSB0YWJsZV9pdGVtX2NvdW50IDsgaSA8IG5ld19pZHg7IGkrKykgeworCQlwcmludGYgIlx0Tl8oXCJSZXNlcnZlZCAlcyBlcnJvciAoJWQpXCIpLFxuIiwgXAorCQkJdGFibGVfbmFtZSwgdGFibGVfaXRlbV9jb3VudCsrID4gb3V0ZmlsZQorCX0KK30KKworRU5EIHsKKwlwcmludCAiICAgIDAiID4gb3V0ZmlsZQorCXByaW50ICJ9OyIgPiBvdXRmaWxlCisJcHJpbnQgIiIgPiBvdXRmaWxlCisJcHJpbnQgInN0cnVjdCBlcnJvcl90YWJsZSB7IiA+IG91dGZpbGUKKwlwcmludCAiICAgIGNoYXIgY29uc3QgKiBjb25zdCAqIG1zZ3M7IiA+IG91dGZpbGUKKwlwcmludCAiICAgIGxvbmcgYmFzZTsiID4gb3V0ZmlsZQorCXByaW50ICIgICAgaW50IG5fbXNnczsiID4gb3V0ZmlsZQorCXByaW50ICJ9OyIgPiBvdXRmaWxlCisJcHJpbnQgInN0cnVjdCBldF9saXN0IHsiID4gb3V0ZmlsZQorCXByaW50ICIgICAgc3RydWN0IGV0X2xpc3QgKm5leHQ7IiA+IG91dGZpbGUKKwlwcmludCAiICAgIGNvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSAqIHRhYmxlOyIgPiBvdXRmaWxlCisJcHJpbnQgIn07IiA+IG91dGZpbGUKKwlwcmludCAiZXh0ZXJuIHN0cnVjdCBldF9saXN0ICpfZXRfbGlzdDsiID4gb3V0ZmlsZQorCXByaW50ICIiID4gb3V0ZmlsZQorCWlmICh0YWJfYmFzZV9oaWdoID09IDApIHsKKwkJcHJpbnQgImNvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSBldF8iIHRhYmxlX25hbWUgIl9lcnJvcl90YWJsZSA9IHsgdGV4dCwgIiBcCisJCXNwcmludGYoIiVkTCwgJWQgfTsiLCB0YWJfYmFzZV9zaWduKnRhYl9iYXNlX2xvdywgXAorCQl0YWJsZV9pdGVtX2NvdW50KSA+IG91dGZpbGUKKwl9IGVsc2UgeworCQlwcmludCAiY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlIGV0XyIgdGFibGVfbmFtZSAiX2Vycm9yX3RhYmxlID0geyB0ZXh0LCAiIFwKKwkJc3ByaW50ZigiJWQlMDZkTCwgJWQgfTsiLCB0YWJfYmFzZV9zaWduKnRhYl9iYXNlX2hpZ2gsIFwKKwkJdGFiX2Jhc2VfbG93LCB0YWJsZV9pdGVtX2NvdW50KSA+IG91dGZpbGUKKwl9CisJcHJpbnQgIiIgPiBvdXRmaWxlCisJcHJpbnQgInN0YXRpYyBzdHJ1Y3QgZXRfbGlzdCBsaW5rID0geyAwLCAwIH07IiA+IG91dGZpbGUKKwlwcmludCAiIiA+IG91dGZpbGUKKwlwcmludCAidm9pZCBpbml0aWFsaXplXyIgdGFibGVfbmFtZSAiX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0KTsiID4gb3V0ZmlsZQorCXByaW50ICJ2b2lkIGluaXRpYWxpemVfIiB0YWJsZV9uYW1lICJfZXJyb3JfdGFibGUodm9pZCk7IiA+IG91dGZpbGUKKwlwcmludCAiIiA+IG91dGZpbGUKKwlwcmludCAidm9pZCBpbml0aWFsaXplXyIgdGFibGVfbmFtZSAiX2Vycm9yX3RhYmxlKHZvaWQpIHsiID4gb3V0ZmlsZQorCXByaW50ICIgICAgaW5pdGlhbGl6ZV8iIHRhYmxlX25hbWUgIl9lcnJvcl90YWJsZV9yKCZfZXRfbGlzdCk7IiA+IG91dGZpbGUKKwlwcmludCAifSIgPiBvdXRmaWxlCisJcHJpbnQgIiIgPiBvdXRmaWxlCisJcHJpbnQgIi8qIEZvciBIZWltZGFsIGNvbXBhdGliaWxpdHkgKi8iID4gb3V0ZmlsZQorCXByaW50ICJ2b2lkIGluaXRpYWxpemVfIiB0YWJsZV9uYW1lICJfZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpIiA+IG91dGZpbGUKKwlwcmludCAieyIgPiBvdXRmaWxlCisJcHJpbnQgIiAgICBzdHJ1Y3QgZXRfbGlzdCAqZXQsICoqZW5kOyIgPiBvdXRmaWxlCisJcHJpbnQgIiIgPiBvdXRmaWxlCisJcHJpbnQgIiAgICBmb3IgKGVuZCA9IGxpc3QsIGV0ID0gKmxpc3Q7IGV0OyBlbmQgPSAmZXQtPm5leHQsIGV0ID0gZXQtPm5leHQpIiA+IG91dGZpbGUKKwlwcmludCAiICAgICAgICBpZiAoZXQtPnRhYmxlLT5tc2dzID09IHRleHQpIiA+IG91dGZpbGUKKwlwcmludCAiICAgICAgICAgICAgcmV0dXJuOyIgPiBvdXRmaWxlCisJcHJpbnQgIiAgICBldCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGV0X2xpc3QpKTsiID4gb3V0ZmlsZQorCXByaW50ICIgICAgaWYgKGV0ID09IDApIHsiID4gb3V0ZmlsZQorCXByaW50ICIgICAgICAgIGlmICghbGluay50YWJsZSkiID4gb3V0ZmlsZQorCXByaW50ICIgICAgICAgICAgICBldCA9ICZsaW5rOyIgPiBvdXRmaWxlCisJcHJpbnQgIiAgICAgICAgZWxzZSIgPiBvdXRmaWxlCisJcHJpbnQgIiAgICAgICAgICAgIHJldHVybjsiID4gb3V0ZmlsZQorCXByaW50ICIgICAgfSIgPiBvdXRmaWxlCisJcHJpbnQgIiAgICBldC0+dGFibGUgPSAmZXRfIiB0YWJsZV9uYW1lICJfZXJyb3JfdGFibGU7IiA+IG91dGZpbGUKKwlwcmludCAiICAgIGV0LT5uZXh0ID0gMDsiID4gb3V0ZmlsZQorCXByaW50ICIgICAgKmVuZCA9IGV0OyIgPiBvdXRmaWxlCisJcHJpbnQgIn0iID4gb3V0ZmlsZQorfQpkaWZmIC0tZ2l0IGEvbGliL2V0L2V0X2guYXdrIGIvbGliL2V0L2V0X2guYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMzcxMjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXQvZXRfaC5hd2sKQEAgLTAsMCArMSwyMDQgQEAKK0JFR0lOIHsgCitpZiAoIGxlbmd0aChvdXRmbikgPT0gMCkgeworCW91dGZuID0gb3V0ZmlsZQorfQorY2hhcl9zaGlmdD02NAorIyMgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5XyI7CitjMm5bIkEiXT0xCitjMm5bIkIiXT0yCitjMm5bIkMiXT0zCitjMm5bIkQiXT00CitjMm5bIkUiXT01CitjMm5bIkYiXT02CitjMm5bIkciXT03CitjMm5bIkgiXT04CitjMm5bIkkiXT05CitjMm5bIkoiXT0xMAorYzJuWyJLIl09MTEKK2MyblsiTCJdPTEyCitjMm5bIk0iXT0xMworYzJuWyJOIl09MTQKK2MyblsiTyJdPTE1CitjMm5bIlAiXT0xNgorYzJuWyJRIl09MTcKK2MyblsiUiJdPTE4CitjMm5bIlMiXT0xOQorYzJuWyJUIl09MjAKK2MyblsiVSJdPTIxCitjMm5bIlYiXT0yMgorYzJuWyJXIl09MjMKK2MyblsiWCJdPTI0CitjMm5bIlkiXT0yNQorYzJuWyJaIl09MjYKK2MyblsiYSJdPTI3CitjMm5bImIiXT0yOAorYzJuWyJjIl09MjkKK2MyblsiZCJdPTMwCitjMm5bImUiXT0zMQorYzJuWyJmIl09MzIKK2MyblsiZyJdPTMzCitjMm5bImgiXT0zNAorYzJuWyJpIl09MzUKK2MyblsiaiJdPTM2CitjMm5bImsiXT0zNworYzJuWyJsIl09MzgKK2MyblsibSJdPTM5CitjMm5bIm4iXT00MAorYzJuWyJvIl09NDEKK2MyblsicCJdPTQyCitjMm5bInEiXT00MworYzJuWyJyIl09NDQKK2MyblsicyJdPTQ1CitjMm5bInQiXT00NgorYzJuWyJ1Il09NDcKK2MyblsidiJdPTQ4CitjMm5bInciXT00OQorYzJuWyJ4Il09NTAKK2MyblsieSJdPTUxCitjMm5bInoiXT01MgorYzJuWyIwIl09NTMKK2MyblsiMSJdPTU0CitjMm5bIjIiXT01NQorYzJuWyIzIl09NTYKK2MyblsiNCJdPTU3CitjMm5bIjUiXT01OAorYzJuWyI2Il09NTkKK2MyblsiNyJdPTYwCitjMm5bIjgiXT02MQorYzJuWyI5Il09NjIKK2MyblsiXyJdPTYzCit9CisvXiMvIHsgbmV4dCB9CisvXlsgXHRdKihlcnJvcl90YWJsZXxldClbIFx0XStbYS16QS1aXVthLXpBLVowLTlfXSsvIHsKKwl0YWJsZV9udW1iZXIgPSAwCisJbW9kX2Jhc2UgPSAxMDAwMDAwCisJaWYgKE5GID4gMikgeworCSAgICB0YWJsZV9uYW1lID0gJDMKKwkgICAgYmFzZV9uYW1lID0gJDIKKwl9IGVsc2UgeworCSAgICB0YWJsZV9uYW1lID0gJDIKKwkgICAgYmFzZV9uYW1lID0gdGFibGVfbmFtZQorCX0KKwlmb3IoaT0xOyBpPD1sZW5ndGgoYmFzZV9uYW1lKTsgaSsrKSB7CisJICAgIHRhYmxlX251bWJlcj0odGFibGVfbnVtYmVyKmNoYXJfc2hpZnQpK2MybltzdWJzdHIoYmFzZV9uYW1lLGksMSldCisJfQorCSMgV2Ugc3RhcnQgcGxheWluZyAqX2hpZ2gsICpsb3cgZ2FtZXMgaGVyZSBiZWNhdXNlIHRoZSBzb21lCisJIyBhd2sgcHJvZ3JhbXMgZG8gbm90IGhhdmUgdGhlIG5lY2Vzc2FyeSBwcmVjaXNpb24gKHNpZ2gpCisJdGFiX2Jhc2VfbG93ID0gdGFibGVfbnVtYmVyICUgbW9kX2Jhc2UKKwlpZiAodGFiX2Jhc2VfbG93IDwgMCkgeworCQkjIFdvcmsgYXJvdW5kIHN0dXBpZCBidWcgaW4gdGhlIEFSTSBsaWJtCisJCXRhYl9iYXNlX2xvdyA9IHRhYl9iYXNlX2xvdyArIG1vZF9iYXNlCisJfQorCXRhYl9iYXNlX2hpZ2ggPSBpbnQodGFibGVfbnVtYmVyIC8gbW9kX2Jhc2UpCisJdGFiX2Jhc2Vfc2lnbiA9IDE7CisKKwkjIGZpZ3VyZSBvdXQ6IHRhYmxlX251bWJlcl9iYXNlPXRhYmxlX251bWJlcioyNTYKKwl0YWJfYmFzZV9sb3cgPSB0YWJfYmFzZV9sb3cgKiAyNTYKKwl0YWJfYmFzZV9oaWdoID0gKHRhYl9iYXNlX2hpZ2ggKiAyNTYpICsgXAorCQkJaW50KHRhYl9iYXNlX2xvdyAvIG1vZF9iYXNlKQorCXRhYl9iYXNlX2xvdyA9IHRhYl9iYXNlX2xvdyAlIG1vZF9iYXNlCisJaWYgKHRhYl9iYXNlX2xvdyA8IDApIHsKKwkJIyBXb3JrIGFyb3VuZCBzdHVwaWQgYnVnIGluIHRoZSBBUk0gbGlibQorCQl0YWJfYmFzZV9sb3cgPSB0YWJfYmFzZV9sb3cgKyBtb2RfYmFzZQorCX0KKworCWlmICh0YWJsZV9udW1iZXIgPiAxMjgqMjU2KjI1NikgeworCQkjIGZpZ3VyZSBvdXQ6ICB0YWJsZV9udW1iZXJfYmFzZSAtPSAyNTYqMjU2KjI1NioyNTYKKwkJIyBzdWJfaGlnaCwgc3ViX2xvdyBpcyAyNTYqMjU2KjI1NioyNTYKKwkJc3ViX2xvdyA9IDI1NioyNTYqMjU2ICUgbW9kX2Jhc2UKKwkJc3ViX2hpZ2ggPSBpbnQoMjU2KjI1NioyNTYgLyBtb2RfYmFzZSkKKworCQlzdWJfbG93ID0gc3ViX2xvdyAqIDI1NgorCQlzdWJfaGlnaCA9IChzdWJfaGlnaCAqIDI1NikgKyBpbnQoc3ViX2xvdyAvIG1vZF9iYXNlKQorCQlzdWJfbG93ID0gc3ViX2xvdyAlIG1vZF9iYXNlCisKKwkJdGFiX2Jhc2VfbG93ID0gc3ViX2xvdyAtIHRhYl9iYXNlX2xvdzsKKwkJdGFiX2Jhc2VfaGlnaCA9IHN1Yl9oaWdoIC0gdGFiX2Jhc2VfaGlnaDsKKwkJdGFiX2Jhc2Vfc2lnbiA9IC0xOworCQlpZiAodGFiX2Jhc2VfbG93IDwgMCkgeworCQkJdGFiX2Jhc2VfbG93ID0gdGFiX2Jhc2VfbG93ICsgbW9kX2Jhc2UKKwkJCXRhYl9iYXNlX2hpZ2gtLQorCQl9CisJfQorCXByZWZpeF9zdHIgPSAiIgorCWN1cnJfaWR4ID0gMAorCWN1cnJfbG93ID0gdGFiX2Jhc2VfbG93CisJY3Vycl9oaWdoID0gdGFiX2Jhc2VfaGlnaAorCWN1cnJfc2lnbiA9IHRhYl9iYXNlX3NpZ24KKwlwcmludCAiLyoiID4gb3V0ZmlsZQorCXByaW50ICIgKiAiIG91dGZuICI6IiA+IG91dGZpbGUKKwlwcmludCAiICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkOyBwbGVhc2UgZG8gbm90IGVkaXQgaXQuIiA+IG91dGZpbGUKKwlwcmludCAiICovIiA+IG91dGZpbGUKKwlwcmludCAiIiA+IG91dGZpbGUKKwlwcmludCAiI2luY2x1ZGUgPGV0L2NvbV9lcnIuaD4iID4gb3V0ZmlsZQorCXByaW50ICIiID4gb3V0ZmlsZQorfQorCisvXlsgXHRdKihlcnJvcl9jb2RlfGVjKVsgXHRdK1tBLVpfMC05XSssLyB7CisJIyBCZSB0b2xlcmFudCB0byBtaXNzaW5nIHdoaXRlc3BhY2UgYWZ0ZXIgYCwnIC4uLgorCXN1YigvLC8sICIsICIpCisKKwl0YWc9cHJlZml4X3N0ciBzdWJzdHIoJDIsMSxsZW5ndGgoJDIpLTEpCisJaWYgKGN1cnJfaGlnaCA9PSAwKSB7CisJCXByaW50ZiAiI2RlZmluZSAlLTQwcyAoJWRMKVxuIiwgdGFnLCBcCisJCQljdXJyX3NpZ24qY3Vycl9sb3cgPiBvdXRmaWxlCisJfSBlbHNlIHsKKwkJcHJpbnRmICIjZGVmaW5lICUtNDBzICglZCUwNmRMKVxuIiwgdGFnLCBjdXJyX2hpZ2gqY3Vycl9zaWduLCBcCisJCQljdXJyX2xvdyA+IG91dGZpbGUKKwl9CisJY3Vycl9sb3cgKz0gY3Vycl9zaWduOworCWN1cnJfaWR4Kys7CisJaWYgKGN1cnJfbG93ID49IG1vZF9iYXNlKSB7CisJCWN1cnJfbG93IC09IG1vZF9iYXNlOworCQljdXJyX2hpZ2grKworCX0KKwlpZiAoY3Vycl9sb3cgPCAwKSB7CisJCWN1cl9sb3cgKz0gbW9kX2Jhc2UKKwkJY3VyX2hpZ2gtLQorCX0KK30KKworL15bIFx0XSoocHJlZml4KSQvIHsKKwlwcmVmaXhfc3RyID0gIiIKK30KKworL15bIFx0XSoocHJlZml4KVsgXHRdK1tBLVpfMC05XSsvIHsKKwlwcmVmaXhfc3RyID0gJDIgIl8iCit9CisKKy9eWyBcdF0qKGluZGV4KVsgXHRdK1tBLVpfMC05XSsvIHsKKwluZXdfaWR4ID0gJDIKKwljdXJyX2xvdyArPSBjdXJyX3NpZ24gKiAobmV3X2lkeCAtIGN1cnJfaWR4KQorCWN1cnJfaWR4ID0gbmV3X2lkeAorCWlmIChjdXJyX2xvdyA+PSBtb2RfYmFzZSkgeworCQljdXJyX2xvdyAtPSBtb2RfYmFzZTsKKwkJY3Vycl9oaWdoKysKKwl9CisJaWYgKGN1cnJfbG93IDwgMCkgeworCQljdXJfbG93ICs9IG1vZF9iYXNlCisJCWN1cl9oaWdoLS0KKwl9Cit9CisKKworRU5EIHsKKwlwcmludCAiZXh0ZXJuIGNvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSBldF8iIHRhYmxlX25hbWUgIl9lcnJvcl90YWJsZTsiID4gb3V0ZmlsZQorCXByaW50ICJleHRlcm4gdm9pZCBpbml0aWFsaXplXyIgdGFibGVfbmFtZSAiX2Vycm9yX3RhYmxlKHZvaWQpOyIgPiBvdXRmaWxlCisJcHJpbnQgIiIgPiBvdXRmaWxlCisJcHJpbnQgIi8qIEZvciBjb21wYXRpYmlsaXR5IHdpdGggSGVpbWRhbCAqLyIgPiBvdXRmaWxlCisJcHJpbnQgImV4dGVybiB2b2lkIGluaXRpYWxpemVfIiB0YWJsZV9uYW1lICJfZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpOyIgPiBvdXRmaWxlCisJcHJpbnQgIiIgPiBvdXRmaWxlCisJaWYgKHRhYl9iYXNlX2hpZ2ggPT0gMCkgeworCQlwcmludCAiI2RlZmluZSBFUlJPUl9UQUJMRV9CQVNFXyIgdGFibGVfbmFtZSAiICgiIFwKKwkJCXNwcmludGYoIiVkIiwgdGFiX2Jhc2Vfc2lnbip0YWJfYmFzZV9sb3cpIFwKKwkJCSJMKSIgPiBvdXRmaWxlCisJfSBlbHNlIHsKKwkJcHJpbnQgIiNkZWZpbmUgRVJST1JfVEFCTEVfQkFTRV8iIHRhYmxlX25hbWUgIiAoIiBcCisJCQlzcHJpbnRmKCIlZCUwNmQiLCB0YWJfYmFzZV9zaWduKnRhYl9iYXNlX2hpZ2gsIFwKKwkJCXRhYl9iYXNlX2xvdykgIkwpIiA+IG91dGZpbGUKKwl9CisJcHJpbnQgIiIgPiBvdXRmaWxlCisJcHJpbnQgIi8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMuLi4gKi8iID4gb3V0ZmlsZQorCXByaW50ICIjZGVmaW5lIGluaXRfIiB0YWJsZV9uYW1lICJfZXJyX3RibCBpbml0aWFsaXplXyIgdGFibGVfbmFtZSAiX2Vycm9yX3RhYmxlIiA+IG91dGZpbGUKKwlwcmludCAiI2RlZmluZSAiIHRhYmxlX25hbWUgIl9lcnJfYmFzZSBFUlJPUl9UQUJMRV9CQVNFXyIgdGFibGVfbmFtZSA+IG91dGZpbGUKK30KZGlmZiAtLWdpdCBhL2xpYi9ldC9ldF9uYW1lLmMgYi9saWIvZXQvZXRfbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YTNlODcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXQvZXRfbmFtZS5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk4NyBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbV9lcnIuaCIKKyNpbmNsdWRlICJlcnJvcl90YWJsZS5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGNoYXJfc2V0W10gPQorCSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OV8iOworCitzdGF0aWMgY2hhciBidWZbNl07CisKK2NvbnN0IGNoYXIgKiBlcnJvcl90YWJsZV9uYW1lKGVycmNvZGVfdCBudW0pCit7CisgICAgaW50IGNoOworICAgIGludCBpOworICAgIGNoYXIgKnA7CisKKyAgICAvKiBudW0gPSBhYSBhYWEgYWJiIGJiYiBiY2MgY2NjIGNkZCBkZGQgZD8/ID8/PyA/Pz8gKi8KKyAgICBwID0gYnVmOworICAgIG51bSA+Pj0gRVJSQ09ERV9SQU5HRTsKKyAgICAvKiBudW0gPSA/PyA/Pz8gPz8/IGFhYSBhYWEgYmJiIGJiYiBjY2MgY2NjIGRkZCBkZGQgKi8KKyAgICBudW0gJj0gMDc3Nzc3Nzc3TDsKKyAgICAvKiBudW0gPSAwMCAwMDAgMDAwIGFhYSBhYWEgYmJiIGJiYiBjY2MgY2NjIGRkZCBkZGQgKi8KKyAgICBmb3IgKGkgPSA0OyBpID49IDA7IGktLSkgeworCWNoID0gKGludCkoKG51bSA+PiBCSVRTX1BFUl9DSEFSICogaSkgJiAoKDEgPDwgQklUU19QRVJfQ0hBUikgLSAxKSk7CisJaWYgKGNoICE9IDApCisJICAgICpwKysgPSBjaGFyX3NldFtjaC0xXTsKKyAgICB9CisgICAgKnAgPSAnXDAnOworICAgIHJldHVybihidWYpOworfQpkaWZmIC0tZ2l0IGEvbGliL2V0L2luaXRfZXQuYyBiL2xpYi9ldC9pbml0X2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyNjYwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC9pbml0X2V0LmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICRIZWFkZXIkCisgKiAkU291cmNlJAorICogJExvY2tlciQKKyAqCisgKiBDb3B5cmlnaHQgMTk4NiwgMTk4NywgMTk4OCBieSBNSVQgSW5mb3JtYXRpb24gU3lzdGVtcyBhbmQKKyAqCXRoZSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlCisgKiBNLkkuVC4gUy5JLlAuQi4gbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorICogZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSAiY29tX2Vyci5oIgorI2luY2x1ZGUgImVycm9yX3RhYmxlLmgiCisKK3N0cnVjdCBmb29iYXIgeworICAgIHN0cnVjdCBldF9saXN0IGV0bDsKKyAgICBzdHJ1Y3QgZXJyb3JfdGFibGUgZXQ7Cit9OworCitleHRlcm4gc3RydWN0IGV0X2xpc3QgKiBfZXRfZHluYW1pY19saXN0OworCitpbnQgaW5pdF9lcnJvcl90YWJsZShjb25zdCBjaGFyICogY29uc3QgKm1zZ3MsIGxvbmcgYmFzZSwgaW50IGNvdW50KQoreworICAgIHN0cnVjdCBmb29iYXIgKiBuZXdfZXQ7CisKKyAgICBpZiAoIWJhc2UgfHwgIWNvdW50IHx8ICFtc2dzKQorCXJldHVybiAwOworCisgICAgbmV3X2V0ID0gKHN0cnVjdCBmb29iYXIgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3QgZm9vYmFyKSk7CisgICAgaWYgKCFuZXdfZXQpCisJcmV0dXJuIEVOT01FTTsJLyogb29wcyAqLworICAgIG5ld19ldC0+ZXRsLnRhYmxlID0gJm5ld19ldC0+ZXQ7CisgICAgbmV3X2V0LT5ldC5tc2dzID0gbXNnczsKKyAgICBuZXdfZXQtPmV0LmJhc2UgPSBiYXNlOworICAgIG5ld19ldC0+ZXQubl9tc2dzPSBjb3VudDsKKworICAgIG5ld19ldC0+ZXRsLm5leHQgPSBfZXRfZHluYW1pY19saXN0OworICAgIF9ldF9keW5hbWljX2xpc3QgPSAmbmV3X2V0LT5ldGw7CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvZXQvaW50ZXJuYWwuaCBiL2xpYi9ldC9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNmYzNzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXQvaW50ZXJuYWwuaApAQCAtMCwwICsxLDE5IEBACisvKgorICogaW50ZXJuYWwgaW5jbHVkZSBmaWxlIGZvciBjb21fZXJyIHBhY2thZ2UKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICogTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmZGVmIE5FRURfU1lTX0VSUkxJU1QKK2V4dGVybiBjaGFyIGNvbnN0ICogY29uc3Qgc3lzX2Vycmxpc3RbXTsKK2V4dGVybiBjb25zdCBpbnQgc3lzX25lcnI7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9ldC90ZXN0X2Nhc2VzL2NvbnRpbnVhdGlvbi5jIGIvbGliL2V0L3Rlc3RfY2FzZXMvY29udGludWF0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIwNzg5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC90ZXN0X2Nhc2VzL2NvbnRpbnVhdGlvbi5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBjb250aW51YXRpb24uYzoKKyAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZDsgcGxlYXNlIGRvIG5vdCBlZGl0IGl0LgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBOXyhhKSBhCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGV4dFtdID0geworCU5fKCJOZXcgcGFzc3dvcmQgd2FzIGZvdW5kIGluIGEgZGljdGlvbmFyeSBvZiBwb3NzaWJsZSBwYXNzd29yZHMgYW5kXG50aGVyZWZvcmUgbWF5IGJlIGVhc2lseSBndWVzc2VkLiBQbGVhc2UgY2hvb3NlIGFub3RoZXIgcGFzc3dvcmQuXG5TZWUgdGhlIG92cGFzc3dkIG1hbiBwYWdlIGZvciBoZWxwIGluIGNob29zaW5nIGEgZ29vZCBwYXNzd29yZC4iKSwKKyAgICAwCit9OworCitzdHJ1Y3QgZXJyb3JfdGFibGUgeworICAgIGNoYXIgY29uc3QgKiBjb25zdCAqIG1zZ3M7CisgICAgbG9uZyBiYXNlOworICAgIGludCBuX21zZ3M7Cit9Oworc3RydWN0IGV0X2xpc3QgeworICAgIHN0cnVjdCBldF9saXN0ICpuZXh0OworICAgIGNvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSAqIHRhYmxlOworfTsKK2V4dGVybiBzdHJ1Y3QgZXRfbGlzdCAqX2V0X2xpc3Q7CisKK2NvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSBldF9vdmtfZXJyb3JfdGFibGUgPSB7IHRleHQsIDQzNzg3NTIwTCwgMSB9OworCitzdGF0aWMgc3RydWN0IGV0X2xpc3QgbGluayA9IHsgMCwgMCB9OworCit2b2lkIGluaXRpYWxpemVfb3ZrX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0KTsKK3ZvaWQgaW5pdGlhbGl6ZV9vdmtfZXJyb3JfdGFibGUodm9pZCk7CisKK3ZvaWQgaW5pdGlhbGl6ZV9vdmtfZXJyb3JfdGFibGUodm9pZCkgeworICAgIGluaXRpYWxpemVfb3ZrX2Vycm9yX3RhYmxlX3IoJl9ldF9saXN0KTsKK30KKworLyogRm9yIEhlaW1kYWwgY29tcGF0aWJpbGl0eSAqLwordm9pZCBpbml0aWFsaXplX292a19lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCkKK3sKKyAgICBzdHJ1Y3QgZXRfbGlzdCAqZXQsICoqZW5kOworCisgICAgZm9yIChlbmQgPSBsaXN0LCBldCA9ICpsaXN0OyBldDsgZW5kID0gJmV0LT5uZXh0LCBldCA9IGV0LT5uZXh0KQorICAgICAgICBpZiAoZXQtPnRhYmxlLT5tc2dzID09IHRleHQpCisgICAgICAgICAgICByZXR1cm47CisgICAgZXQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBldF9saXN0KSk7CisgICAgaWYgKGV0ID09IDApIHsKKyAgICAgICAgaWYgKCFsaW5rLnRhYmxlKQorICAgICAgICAgICAgZXQgPSAmbGluazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBldC0+dGFibGUgPSAmZXRfb3ZrX2Vycm9yX3RhYmxlOworICAgIGV0LT5uZXh0ID0gMDsKKyAgICAqZW5kID0gZXQ7Cit9CmRpZmYgLS1naXQgYS9saWIvZXQvdGVzdF9jYXNlcy9jb250aW51YXRpb24uZXQgYi9saWIvZXQvdGVzdF9jYXNlcy9jb250aW51YXRpb24uZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRkMTY3NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC90ZXN0X2Nhc2VzL2NvbnRpbnVhdGlvbi5ldApAQCAtMCwwICsxLDggQEAKKwllcnJvcl90YWJsZQlvdmsKKworZXJyb3JfY29kZSBDSFBBU1NfVVRJTF9QQVNTV09SRF9JTl9ESUNUSU9OQVJZLAorIk5ldyBwYXNzd29yZCB3YXMgZm91bmQgaW4gYSBkaWN0aW9uYXJ5IG9mIHBvc3NpYmxlIHBhc3N3b3JkcyBhbmRcblwKK3RoZXJlZm9yZSBtYXkgYmUgZWFzaWx5IGd1ZXNzZWQuIFBsZWFzZSBjaG9vc2UgYW5vdGhlciBwYXNzd29yZC5cblwKK1NlZSB0aGUgb3ZwYXNzd2QgbWFuIHBhZ2UgZm9yIGhlbHAgaW4gY2hvb3NpbmcgYSBnb29kIHBhc3N3b3JkLiIKKworCWVuZApkaWZmIC0tZ2l0IGEvbGliL2V0L3Rlc3RfY2FzZXMvY29udGludWF0aW9uLmggYi9saWIvZXQvdGVzdF9jYXNlcy9jb250aW51YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2ZlNjAyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V0L3Rlc3RfY2FzZXMvY29udGludWF0aW9uLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIGNvbnRpbnVhdGlvbi5oOgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkOyBwbGVhc2UgZG8gbm90IGVkaXQgaXQuCisgKi8KKworI2luY2x1ZGUgPGV0L2NvbV9lcnIuaD4KKworI2RlZmluZSBDSFBBU1NfVVRJTF9QQVNTV09SRF9JTl9ESUNUSU9OQVJZICAgICAgICg0Mzc4NzUyMEwpCitleHRlcm4gY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlIGV0X292a19lcnJvcl90YWJsZTsKK2V4dGVybiB2b2lkIGluaXRpYWxpemVfb3ZrX2Vycm9yX3RhYmxlKHZvaWQpOworCisvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIEhlaW1kYWwgKi8KK2V4dGVybiB2b2lkIGluaXRpYWxpemVfb3ZrX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0KTsKKworI2RlZmluZSBFUlJPUl9UQUJMRV9CQVNFX292ayAoNDM3ODc1MjBMKQorCisvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLi4uICovCisjZGVmaW5lIGluaXRfb3ZrX2Vycl90YmwgaW5pdGlhbGl6ZV9vdmtfZXJyb3JfdGFibGUKKyNkZWZpbmUgb3ZrX2Vycl9iYXNlIEVSUk9SX1RBQkxFX0JBU0Vfb3ZrCmRpZmYgLS1naXQgYS9saWIvZXQvdGVzdF9jYXNlcy9oZWltZGFsLmMgYi9saWIvZXQvdGVzdF9jYXNlcy9oZWltZGFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliZTRjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwuYwpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIGhlaW1kYWwuYzoKKyAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZDsgcGxlYXNlIGRvIG5vdCBlZGl0IGl0LgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBOXyhhKSBhCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGV4dFtdID0geworCU5fKCJLZXJiZXJvcyBzdWNjZXNzZnVsIiksCisJTl8oIktlcmJlcm9zIHByaW5jaXBhbCBleHBpcmVkIiksCisJTl8oIktlcmJlcm9zIHNlcnZpY2UgZXhwaXJlZCIpLAorCU5fKCJLZXJiZXJvcyBhdXRoIGV4cGlyZWQiKSwKKwlOXygiSW5jb3JyZWN0IGtlcmJlcm9zIG1hc3RlciBrZXkgdmVyc2lvbiIpLAorCU5fKCJJbmNvcnJlY3Qga2VyYmVyb3MgbWFzdGVyIGtleSB2ZXJzaW9uIiksCisJTl8oIkluY29ycmVjdCBrZXJiZXJvcyBtYXN0ZXIga2V5IHZlcnNpb24iKSwKKwlOXygiS2VyYmVyb3MgZXJyb3I6IGJ5dGUgb3JkZXIgdW5rbm93biIpLAorCU5fKCJLZXJiZXJvcyBwcmluY2lwYWwgdW5rbm93biIpLAorCU5fKCJLZXJiZXJvcyBwcmluY2lwYWwgbm90IHVuaXF1ZSIpLAorCU5fKCJLZXJiZXJvcyBwcmluY2lwYWwgaGFzIG51bGwga2V5IiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoMTEpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoMTIpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoMTMpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoMTQpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoMTUpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoMTYpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoMTcpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoMTgpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoMTkpIiksCisJTl8oIkdlbmVyaWMgZXJyb3IgZnJvbSBLZXJiZXJvcyBLREMiKSwKKwlOXygiQ2FuJ3QgcmVhZCBLZXJiZXJvcyB0aWNrZXQgZmlsZSIpLAorCU5fKCJDYW4ndCBmaW5kIEtlcmJlcm9zIHRpY2tldCBvciBUR1QiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgyMykiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgyNCkiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgyNSkiKSwKKwlOXygiS2VyYmVyb3MgVEdUIEV4cGlyZWQiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgyNykiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgyOCkiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgyOSkiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgzMCkiKSwKKwlOXygiS2VyYmVyb3MgZXJyb3I6IENhbid0IGRlY29kZSBhdXRoZW50aWNhdG9yIiksCisJTl8oIktlcmJlcm9zIHRpY2tldCBleHBpcmVkIiksCisJTl8oIktlcmJlcm9zIHRpY2tldCBub3QgeWV0IHZhbGlkIiksCisJTl8oIktlcmJlcm9zIGVycm9yOiBSZXBlYXRlZCByZXF1ZXN0IiksCisJTl8oIlRoZSBrZXJiZXJvcyB0aWNrZXQgaXNuJ3QgZm9yIHVzIiksCisJTl8oIktlcmJlcm9zIHJlcXVlc3QgaW5jb25zaXN0ZW50IiksCisJTl8oIktlcmJlcm9zIGVycm9yOiBkZWx0YV90IHRvbyBiaWciKSwKKwlOXygiS2VyYmVyb3MgZXJyb3I6IGluY29ycmVjdCBuZXQgYWRkcmVzcyIpLAorCU5fKCJLZXJiZXJvcyBwcm90b2NvbCB2ZXJzaW9uIG1pc21hdGNoIiksCisJTl8oIktlcmJlcm9zIGVycm9yOiBpbnZhbGlkIG1zZyB0eXBlIiksCisJTl8oIktlcmJlcm9zIGVycm9yOiBtZXNzYWdlIHN0cmVhbSBtb2RpZmllZCIpLAorCU5fKCJLZXJiZXJvcyBlcnJvcjogbWVzc2FnZSBvdXQgb2Ygb3JkZXIiKSwKKwlOXygiS2VyYmVyb3MgZXJyb3I6IHVuYXV0aG9yaXplZCByZXF1ZXN0IiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoNDQpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoNDUpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoNDYpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoNDcpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoNDgpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoNDkpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoNTApIiksCisJTl8oIktlcmJlcm9zIGVycm9yOiBjdXJyZW50IFBXIGlzIG51bGwiKSwKKwlOXygiS2VyYmVyb3MgZXJyb3I6IEluY29ycmVjdCBjdXJyZW50IHBhc3N3b3JkIiksCisJTl8oIktlcmJlcm9zIHByb3RvY29sIGVycm9yIiksCisJTl8oIkVycm9yIHJldHVybmVkIGJ5IEtlcmJlcm9zIEtEQyIpLAorCU5fKCJOdWxsIEtlcmJlcm9zIHRpY2tldCByZXR1cm5lZCBieSBLREMiKSwKKwlOXygiS2VyYmVyb3MgZXJyb3I6IFJldHJ5IGNvdW50IGV4Y2VlZGVkIiksCisJTl8oIktlcmJlcm9zIGVycm9yOiBDYW4ndCBzZW5kIHJlcXVlc3QiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICg1OCkiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICg1OSkiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICg2MCkiKSwKKwlOXygiS2VyYmVyb3MgZXJyb3I6IG5vdCBhbGwgdGlja2V0cyByZXR1cm5lZCIpLAorCU5fKCJLZXJiZXJvcyBlcnJvcjogaW5jb3JyZWN0IHBhc3N3b3JkIiksCisJTl8oIktlcmJlcm9zIGVycm9yOiBQcm90b2NvbCBFcnJvciIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDY0KSIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDY1KSIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDY2KSIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDY3KSIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDY4KSIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDY5KSIpLAorCU5fKCJPdGhlciBlcnJvciIpLAorCU5fKCJEb24ndCBoYXZlIEtlcmJlcm9zIHRpY2tldC1ncmFudGluZyB0aWNrZXQiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICg3MikiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICg3MykiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICg3NCkiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICg3NSkiKSwKKwlOXygiTm8gdGlja2V0IGZpbGUgZm91bmQiKSwKKwlOXygiQ291bGRuJ3QgYWNjZXNzIHRpY2tldCBmaWxlIiksCisJTl8oIkNvdWxkbid0IGxvY2sgdGlja2V0IGZpbGUiKSwKKwlOXygiQmFkIHRpY2tldCBmaWxlIGZvcm1hdCIpLAorCU5fKCJ0Zl9pbml0IG5vdCBjYWxsZWQgZmlyc3QiKSwKKwlOXygiQmFkIEtlcmJlcm9zIG5hbWUgZm9ybWF0IiksCisgICAgMAorfTsKKworc3RydWN0IGVycm9yX3RhYmxlIHsKKyAgICBjaGFyIGNvbnN0ICogY29uc3QgKiBtc2dzOworICAgIGxvbmcgYmFzZTsKKyAgICBpbnQgbl9tc2dzOworfTsKK3N0cnVjdCBldF9saXN0IHsKKyAgICBzdHJ1Y3QgZXRfbGlzdCAqbmV4dDsKKyAgICBjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgKiB0YWJsZTsKK307CitleHRlcm4gc3RydWN0IGV0X2xpc3QgKl9ldF9saXN0OworCitjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgZXRfa3JiX2Vycm9yX3RhYmxlID0geyB0ZXh0LCAzOTUyNTM3NkwsIDgyIH07CisKK3N0YXRpYyBzdHJ1Y3QgZXRfbGlzdCBsaW5rID0geyAwLCAwIH07CisKK3ZvaWQgaW5pdGlhbGl6ZV9rcmJfZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpOwordm9pZCBpbml0aWFsaXplX2tyYl9lcnJvcl90YWJsZSh2b2lkKTsKKwordm9pZCBpbml0aWFsaXplX2tyYl9lcnJvcl90YWJsZSh2b2lkKSB7CisgICAgaW5pdGlhbGl6ZV9rcmJfZXJyb3JfdGFibGVfcigmX2V0X2xpc3QpOworfQorCisvKiBGb3IgSGVpbWRhbCBjb21wYXRpYmlsaXR5ICovCit2b2lkIGluaXRpYWxpemVfa3JiX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0KQoreworICAgIHN0cnVjdCBldF9saXN0ICpldCwgKiplbmQ7CisKKyAgICBmb3IgKGVuZCA9IGxpc3QsIGV0ID0gKmxpc3Q7IGV0OyBlbmQgPSAmZXQtPm5leHQsIGV0ID0gZXQtPm5leHQpCisgICAgICAgIGlmIChldC0+dGFibGUtPm1zZ3MgPT0gdGV4dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICBldCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGV0X2xpc3QpKTsKKyAgICBpZiAoZXQgPT0gMCkgeworICAgICAgICBpZiAoIWxpbmsudGFibGUpCisgICAgICAgICAgICBldCA9ICZsaW5rOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGV0LT50YWJsZSA9ICZldF9rcmJfZXJyb3JfdGFibGU7CisgICAgZXQtPm5leHQgPSAwOworICAgICplbmQgPSBldDsKK30KZGlmZiAtLWdpdCBhL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwuZXQgYi9saWIvZXQvdGVzdF9jYXNlcy9oZWltZGFsLmV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkY2UxOTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXQvdGVzdF9jYXNlcy9oZWltZGFsLmV0CkBAIC0wLDAgKzEsNjUgQEAKKyMJQ29weXJpZ2h0IDE5ODcsMTk4OCBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5CisjCisjCUZvciBjb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gaW5mb3JtYXRpb24sIHNlZSB0aGUgZmlsZQorIwkibWl0LWNvcHlyaWdodC5oIi4KKyMgCisjIFRoaXMgbWlnaHQgbG9vayBsaWtlIGEgY29tX2VyciBmaWxlLCBidXQgaXMgbm90CisjCitpZCAiJElkOiBrcmJfZXJyLmV0LHYgMS43IDE5OTgvMDMvMjkgMTQ6MTk6NTIgYmcgRXhwICQiCisKK2Vycm9yX3RhYmxlIGtyYgorCitwcmVmaXggS1JCRVQKK2VjIEtTVUNDRVNTLAkJIktlcmJlcm9zIHN1Y2Nlc3NmdWwiCitlYyBLRENfTkFNRV9FWFAsCSJLZXJiZXJvcyBwcmluY2lwYWwgZXhwaXJlZCIKK2VjIEtEQ19TRVJWSUNFX0VYUCwJIktlcmJlcm9zIHNlcnZpY2UgZXhwaXJlZCIKK2VjIEtEQ19BVVRIX0VYUCwJIktlcmJlcm9zIGF1dGggZXhwaXJlZCIKK2VjIEtEQ19QS1RfVkVSLAkJIkluY29ycmVjdCBrZXJiZXJvcyBtYXN0ZXIga2V5IHZlcnNpb24iCitlYyBLRENfUF9NS0VZX1ZFUiwJIkluY29ycmVjdCBrZXJiZXJvcyBtYXN0ZXIga2V5IHZlcnNpb24iCitlYyBLRENfU19NS0VZX1ZFUiwJIkluY29ycmVjdCBrZXJiZXJvcyBtYXN0ZXIga2V5IHZlcnNpb24iCitlYyBLRENfQllURV9PUkRFUiwJIktlcmJlcm9zIGVycm9yOiBieXRlIG9yZGVyIHVua25vd24iCitlYyBLRENfUFJfVU5LTk9XTiwJIktlcmJlcm9zIHByaW5jaXBhbCB1bmtub3duIgorZWMgS0RDX1BSX05fVU5JUVVFLAkiS2VyYmVyb3MgcHJpbmNpcGFsIG5vdCB1bmlxdWUiCitlYyBLRENfTlVMTF9LRVksCSJLZXJiZXJvcyBwcmluY2lwYWwgaGFzIG51bGwga2V5IgoraW5kZXggMjAKK2VjIEtEQ19HRU5fRVJSLAkJIkdlbmVyaWMgZXJyb3IgZnJvbSBLZXJiZXJvcyBLREMiCitlYyBHQ19US0ZJTCwJCSJDYW4ndCByZWFkIEtlcmJlcm9zIHRpY2tldCBmaWxlIgorZWMgR0NfTk9US1QsCQkiQ2FuJ3QgZmluZCBLZXJiZXJvcyB0aWNrZXQgb3IgVEdUIgoraW5kZXggMjYKK2VjIE1LX0FQX1RHVEVYUCwJIktlcmJlcm9zIFRHVCBFeHBpcmVkIgoraW5kZXggMzEKK2VjIFJEX0FQX1VOREVDLAkJIktlcmJlcm9zIGVycm9yOiBDYW4ndCBkZWNvZGUgYXV0aGVudGljYXRvciIKK2VjIFJEX0FQX0VYUCwJCSJLZXJiZXJvcyB0aWNrZXQgZXhwaXJlZCIKK2VjIFJEX0FQX05ZViwJCSJLZXJiZXJvcyB0aWNrZXQgbm90IHlldCB2YWxpZCIKK2VjIFJEX0FQX1JFUEVBVCwJIktlcmJlcm9zIGVycm9yOiBSZXBlYXRlZCByZXF1ZXN0IgorZWMgUkRfQVBfTk9UX1VTLAkiVGhlIGtlcmJlcm9zIHRpY2tldCBpc24ndCBmb3IgdXMiCitlYyBSRF9BUF9JTkNPTiwJCSJLZXJiZXJvcyByZXF1ZXN0IGluY29uc2lzdGVudCIKK2VjIFJEX0FQX1RJTUUsCQkiS2VyYmVyb3MgZXJyb3I6IGRlbHRhX3QgdG9vIGJpZyIKK2VjIFJEX0FQX0JBREQsCQkiS2VyYmVyb3MgZXJyb3I6IGluY29ycmVjdCBuZXQgYWRkcmVzcyIKK2VjIFJEX0FQX1ZFUlNJT04sCSJLZXJiZXJvcyBwcm90b2NvbCB2ZXJzaW9uIG1pc21hdGNoIgorZWMgUkRfQVBfTVNHX1RZUEUsCSJLZXJiZXJvcyBlcnJvcjogaW52YWxpZCBtc2cgdHlwZSIKK2VjIFJEX0FQX01PRElGSUVELAkiS2VyYmVyb3MgZXJyb3I6IG1lc3NhZ2Ugc3RyZWFtIG1vZGlmaWVkIgorZWMgUkRfQVBfT1JERVIsCQkiS2VyYmVyb3MgZXJyb3I6IG1lc3NhZ2Ugb3V0IG9mIG9yZGVyIgorZWMgUkRfQVBfVU5BVVRIT1IsCSJLZXJiZXJvcyBlcnJvcjogdW5hdXRob3JpemVkIHJlcXVlc3QiCitpbmRleCA1MQorZWMgR1RfUFdfTlVMTCwJCSJLZXJiZXJvcyBlcnJvcjogY3VycmVudCBQVyBpcyBudWxsIgorZWMgR1RfUFdfQkFEUFcsCQkiS2VyYmVyb3MgZXJyb3I6IEluY29ycmVjdCBjdXJyZW50IHBhc3N3b3JkIgorZWMgR1RfUFdfUFJPVCwJCSJLZXJiZXJvcyBwcm90b2NvbCBlcnJvciIKK2VjIEdUX1BXX0tEQ0VSUiwJIkVycm9yIHJldHVybmVkIGJ5IEtlcmJlcm9zIEtEQyIKK2VjIEdUX1BXX05VTExUS1QsCSJOdWxsIEtlcmJlcm9zIHRpY2tldCByZXR1cm5lZCBieSBLREMiCitlYyBTS0RDX1JFVFJZLAkJIktlcmJlcm9zIGVycm9yOiBSZXRyeSBjb3VudCBleGNlZWRlZCIKK2VjIFNLRENfQ0FOVCwJCSJLZXJiZXJvcyBlcnJvcjogQ2FuJ3Qgc2VuZCByZXF1ZXN0IgoraW5kZXggNjEKK2VjIElOVEtfV19OT1RBTEwsCSJLZXJiZXJvcyBlcnJvcjogbm90IGFsbCB0aWNrZXRzIHJldHVybmVkIgorZWMgSU5US19CQURQVywJCSJLZXJiZXJvcyBlcnJvcjogaW5jb3JyZWN0IHBhc3N3b3JkIgorZWMgSU5US19QUk9ULAkJIktlcmJlcm9zIGVycm9yOiBQcm90b2NvbCBFcnJvciIKK2luZGV4IDcwCitlYyBJTlRLX0VSUiwJCSJPdGhlciBlcnJvciIKK2VjIEFEX05PVEdULAkJIkRvbid0IGhhdmUgS2VyYmVyb3MgdGlja2V0LWdyYW50aW5nIHRpY2tldCIKK2luZGV4IDc2CitlYyBOT19US1RfRklMLAkJIk5vIHRpY2tldCBmaWxlIGZvdW5kIgorZWMgVEtUX0ZJTF9BQ0MsCQkiQ291bGRuJ3QgYWNjZXNzIHRpY2tldCBmaWxlIgorZWMgVEtUX0ZJTF9MQ0ssCQkiQ291bGRuJ3QgbG9jayB0aWNrZXQgZmlsZSIKK2VjIFRLVF9GSUxfRk1ULAkJIkJhZCB0aWNrZXQgZmlsZSBmb3JtYXQiCitlYyBUS1RfRklMX0lOSSwJCSJ0Zl9pbml0IG5vdCBjYWxsZWQgZmlyc3QiCitlYyBLTkFNRV9GTVQsCQkiQmFkIEtlcmJlcm9zIG5hbWUgZm9ybWF0IgpkaWZmIC0tZ2l0IGEvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbC5oIGIvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOTQzNTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXQvdGVzdF9jYXNlcy9oZWltZGFsLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIGhlaW1kYWwuaDoKKyAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZDsgcGxlYXNlIGRvIG5vdCBlZGl0IGl0LgorICovCisKKyNpbmNsdWRlIDxldC9jb21fZXJyLmg+CisKKyNkZWZpbmUgS1JCRVRfS1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzNzZMKQorI2RlZmluZSBLUkJFVF9LRENfTkFNRV9FWFAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM3N0wpCisjZGVmaW5lIEtSQkVUX0tEQ19TRVJWSUNFX0VYUCAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzc4TCkKKyNkZWZpbmUgS1JCRVRfS0RDX0FVVEhfRVhQICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzNzlMKQorI2RlZmluZSBLUkJFVF9LRENfUEtUX1ZFUiAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM4MEwpCisjZGVmaW5lIEtSQkVUX0tEQ19QX01LRVlfVkVSICAgICAgICAgICAgICAgICAgICAgKDM5NTI1MzgxTCkKKyNkZWZpbmUgS1JCRVRfS0RDX1NfTUtFWV9WRVIgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzODJMKQorI2RlZmluZSBLUkJFVF9LRENfQllURV9PUkRFUiAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM4M0wpCisjZGVmaW5lIEtSQkVUX0tEQ19QUl9VTktOT1dOICAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzg0TCkKKyNkZWZpbmUgS1JCRVRfS0RDX1BSX05fVU5JUVVFICAgICAgICAgICAgICAgICAgICAoMzk1MjUzODVMKQorI2RlZmluZSBLUkJFVF9LRENfTlVMTF9LRVkgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM4NkwpCisjZGVmaW5lIEtSQkVUX0tEQ19HRU5fRVJSICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzk2TCkKKyNkZWZpbmUgS1JCRVRfR0NfVEtGSUwgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzOTdMKQorI2RlZmluZSBLUkJFVF9HQ19OT1RLVCAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM5OEwpCisjZGVmaW5lIEtSQkVUX01LX0FQX1RHVEVYUCAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDAyTCkKKyNkZWZpbmUgS1JCRVRfUkRfQVBfVU5ERUMgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MDdMKQorI2RlZmluZSBLUkJFVF9SRF9BUF9FWFAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQwOEwpCisjZGVmaW5lIEtSQkVUX1JEX0FQX05ZViAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDA5TCkKKyNkZWZpbmUgS1JCRVRfUkRfQVBfUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MTBMKQorI2RlZmluZSBLUkJFVF9SRF9BUF9OT1RfVVMgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQxMUwpCisjZGVmaW5lIEtSQkVUX1JEX0FQX0lOQ09OICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDEyTCkKKyNkZWZpbmUgS1JCRVRfUkRfQVBfVElNRSAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MTNMKQorI2RlZmluZSBLUkJFVF9SRF9BUF9CQUREICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQxNEwpCisjZGVmaW5lIEtSQkVUX1JEX0FQX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDE1TCkKKyNkZWZpbmUgS1JCRVRfUkRfQVBfTVNHX1RZUEUgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MTZMKQorI2RlZmluZSBLUkJFVF9SRF9BUF9NT0RJRklFRCAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQxN0wpCisjZGVmaW5lIEtSQkVUX1JEX0FQX09SREVSICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDE4TCkKKyNkZWZpbmUgS1JCRVRfUkRfQVBfVU5BVVRIT1IgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MTlMKQorI2RlZmluZSBLUkJFVF9HVF9QV19OVUxMICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQyN0wpCisjZGVmaW5lIEtSQkVUX0dUX1BXX0JBRFBXICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDI4TCkKKyNkZWZpbmUgS1JCRVRfR1RfUFdfUFJPVCAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MjlMKQorI2RlZmluZSBLUkJFVF9HVF9QV19LRENFUlIgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQzMEwpCisjZGVmaW5lIEtSQkVUX0dUX1BXX05VTExUS1QgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDMxTCkKKyNkZWZpbmUgS1JCRVRfU0tEQ19SRVRSWSAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MzJMKQorI2RlZmluZSBLUkJFVF9TS0RDX0NBTlQgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQzM0wpCisjZGVmaW5lIEtSQkVUX0lOVEtfV19OT1RBTEwgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDM3TCkKKyNkZWZpbmUgS1JCRVRfSU5US19CQURQVyAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MzhMKQorI2RlZmluZSBLUkJFVF9JTlRLX1BST1QgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQzOUwpCisjZGVmaW5lIEtSQkVUX0lOVEtfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDQ2TCkKKyNkZWZpbmUgS1JCRVRfQURfTk9UR1QgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0NDdMKQorI2RlZmluZSBLUkJFVF9OT19US1RfRklMICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQ1MkwpCisjZGVmaW5lIEtSQkVUX1RLVF9GSUxfQUNDICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDUzTCkKKyNkZWZpbmUgS1JCRVRfVEtUX0ZJTF9MQ0sgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0NTRMKQorI2RlZmluZSBLUkJFVF9US1RfRklMX0ZNVCAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQ1NUwpCisjZGVmaW5lIEtSQkVUX1RLVF9GSUxfSU5JICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDU2TCkKKyNkZWZpbmUgS1JCRVRfS05BTUVfRk1UICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0NTdMKQorZXh0ZXJuIGNvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSBldF9rcmJfZXJyb3JfdGFibGU7CitleHRlcm4gdm9pZCBpbml0aWFsaXplX2tyYl9lcnJvcl90YWJsZSh2b2lkKTsKKworLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBIZWltZGFsICovCitleHRlcm4gdm9pZCBpbml0aWFsaXplX2tyYl9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCk7CisKKyNkZWZpbmUgRVJST1JfVEFCTEVfQkFTRV9rcmIgKDM5NTI1Mzc2TCkKKworLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4uLiAqLworI2RlZmluZSBpbml0X2tyYl9lcnJfdGJsIGluaXRpYWxpemVfa3JiX2Vycm9yX3RhYmxlCisjZGVmaW5lIGtyYl9lcnJfYmFzZSBFUlJPUl9UQUJMRV9CQVNFX2tyYgpkaWZmIC0tZ2l0IGEvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbDIuYyBiL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThkNGMxMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwyLmMKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBoZWltZGFsMi5jOgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkOyBwbGVhc2UgZG8gbm90IGVkaXQgaXQuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIE5fKGEpIGEKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0ZXh0W10gPSB7CisJTl8oIiRJZDoga2FkbV9lcnIuZXQsdiAxLjUgMTk5OC8wMS8xNiAyMzoxMToyNyBqb2RhIEV4cCAkIiksCisJTl8oIkNhbm5vdCBmZXRjaCBsb2NhbCByZWFsbSIpLAorCU5fKCJVbmFibGUgdG8gZmV0Y2ggY3JlZGVudGlhbHMiKSwKKwlOXygiQmFkIGtleSBzdXBwbGllZCIpLAorCU5fKCJDYW4ndCBlbmNyeXB0IGRhdGEiKSwKKwlOXygiQ2Fubm90IGVuY29kZS9kZWNvZGUgYXV0aGVudGljYXRpb24gaW5mbyIpLAorCU5fKCJQcmluY2lwYWwgYXR0ZW1waW5nIGNoYW5nZSBpcyBpbiB3cm9uZyByZWFsbSIpLAorCU5fKCJQYWNrZXQgaXMgdG9vIGxhcmdlIiksCisJTl8oIlZlcnNpb24gbnVtYmVyIGlzIGluY29ycmVjdCIpLAorCU5fKCJDaGVja3N1bSBkb2VzIG5vdCBtYXRjaCIpLAorCU5fKCJVbnNlYWxpbmcgcHJpdmF0ZSBkYXRhIGZhaWxlZCIpLAorCU5fKCJVbnN1cHBvcnRlZCBvcGVyYXRpb24iKSwKKwlOXygiQ291bGQgbm90IGZpbmQgYWRtaW5pc3RyYXRpbmcgaG9zdCIpLAorCU5fKCJBZG1pbmlzdHJhdGluZyBob3N0IG5hbWUgaXMgdW5rbm93biIpLAorCU5fKCJDb3VsZCBub3QgZmluZCBzZXJ2aWNlIG5hbWUgaW4gc2VydmljZXMgZGF0YWJhc2UiKSwKKwlOXygiQ291bGQgbm90IGNyZWF0ZSBzb2NrZXQiKSwKKwlOXygiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyIiksCisJTl8oIkNvdWxkIG5vdCBmZXRjaCBsb2NhbCBzb2NrZXQgYWRkcmVzcyIpLAorCU5fKCJDb3VsZCBub3QgZmV0Y2ggbWFzdGVyIGtleSIpLAorCU5fKCJDb3VsZCBub3QgdmVyaWZ5IG1hc3RlciBrZXkiKSwKKwlOXygiRW50cnkgYWxyZWFkeSBleGlzdHMgaW4gZGF0YWJhc2UiKSwKKwlOXygiRGF0YWJhc2Ugc3RvcmUgZXJyb3IiKSwKKwlOXygiRGF0YWJhc2UgcmVhZCBlcnJvciIpLAorCU5fKCJJbnN1ZmZpY2llbnQgYWNjZXNzIHRvIHBlcmZvcm0gcmVxdWVzdGVkIG9wZXJhdGlvbiIpLAorCU5fKCJEYXRhIGlzIGF2YWlsYWJsZSBmb3IgcmV0dXJuIHRvIGNsaWVudCIpLAorCU5fKCJObyBzdWNoIGVudHJ5IGluIHRoZSBkYXRhYmFzZSIpLAorCU5fKCJNZW1vcnkgZXhoYXVzdGVkIiksCisJTl8oIkNvdWxkIG5vdCBmZXRjaCBzeXN0ZW0gaG9zdG5hbWUiKSwKKwlOXygiQ291bGQgbm90IGJpbmQgcG9ydCIpLAorCU5fKCJMZW5ndGggbWlzbWF0Y2ggcHJvYmxlbSIpLAorCU5fKCJJbGxlZ2FsIHVzZSBvZiB3aWxkY2FyZCIpLAorCU5fKCJEYXRhYmFzZSBpcyBsb2NrZWQgb3IgaW4gdXNlLS10cnkgYWdhaW4gbGF0ZXIiKSwKKwlOXygiSW5zZWN1cmUgcGFzc3dvcmQgcmVqZWN0ZWQiKSwKKwlOXygiQ2xlYXJ0ZXh0IHBhc3N3b3JkIGFuZCBERVMga2V5IGRpZCBub3QgbWF0Y2giKSwKKwlOXygiSW52YWxpZCBwcmluY2lwYWwgZm9yIGNoYW5nZSBzcnZ0YWIgcmVxdWVzdCIpLAorCU5fKCJBdHRlbXB0IGRvIGRlbGV0ZSBpbW11dGFibGUgcHJpbmNpcGFsIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDM2KSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICgzNykiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoMzgpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDM5KSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg0MCkiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNDEpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDQyKSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg0MykiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNDQpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDQ1KSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg0NikiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNDcpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDQ4KSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg0OSkiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNTApIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDUxKSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg1MikiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNTMpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDU0KSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg1NSkiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNTYpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDU3KSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg1OCkiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNTkpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDYwKSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg2MSkiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNjIpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDYzKSIpLAorCU5fKCJOdWxsIHBhc3N3b3JkcyBhcmUgbm90IGFsbG93ZWQiKSwKKwlOXygiUGFzc3dvcmQgaXMgdG9vIHNob3J0IiksCisJTl8oIlRvbyBmZXcgY2hhcmFjdGVyIGNsYXNzZXMgaW4gcGFzc3dvcmQiKSwKKwlOXygiUGFzc3dvcmQgaXMgaW4gdGhlIHBhc3N3b3JkIGRpY3Rpb25hcnkiKSwKKyAgICAwCit9OworCitzdHJ1Y3QgZXJyb3JfdGFibGUgeworICAgIGNoYXIgY29uc3QgKiBjb25zdCAqIG1zZ3M7CisgICAgbG9uZyBiYXNlOworICAgIGludCBuX21zZ3M7Cit9Oworc3RydWN0IGV0X2xpc3QgeworICAgIHN0cnVjdCBldF9saXN0ICpuZXh0OworICAgIGNvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSAqIHRhYmxlOworfTsKK2V4dGVybiBzdHJ1Y3QgZXRfbGlzdCAqX2V0X2xpc3Q7CisKK2NvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSBldF9rYWRtX2Vycm9yX3RhYmxlID0geyB0ZXh0LCAtMTc4MzEyNjI3MkwsIDY4IH07CisKK3N0YXRpYyBzdHJ1Y3QgZXRfbGlzdCBsaW5rID0geyAwLCAwIH07CisKK3ZvaWQgaW5pdGlhbGl6ZV9rYWRtX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0KTsKK3ZvaWQgaW5pdGlhbGl6ZV9rYWRtX2Vycm9yX3RhYmxlKHZvaWQpOworCit2b2lkIGluaXRpYWxpemVfa2FkbV9lcnJvcl90YWJsZSh2b2lkKSB7CisgICAgaW5pdGlhbGl6ZV9rYWRtX2Vycm9yX3RhYmxlX3IoJl9ldF9saXN0KTsKK30KKworLyogRm9yIEhlaW1kYWwgY29tcGF0aWJpbGl0eSAqLwordm9pZCBpbml0aWFsaXplX2thZG1fZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpCit7CisgICAgc3RydWN0IGV0X2xpc3QgKmV0LCAqKmVuZDsKKworICAgIGZvciAoZW5kID0gbGlzdCwgZXQgPSAqbGlzdDsgZXQ7IGVuZCA9ICZldC0+bmV4dCwgZXQgPSBldC0+bmV4dCkKKyAgICAgICAgaWYgKGV0LT50YWJsZS0+bXNncyA9PSB0ZXh0KQorICAgICAgICAgICAgcmV0dXJuOworICAgIGV0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXRfbGlzdCkpOworICAgIGlmIChldCA9PSAwKSB7CisgICAgICAgIGlmICghbGluay50YWJsZSkKKyAgICAgICAgICAgIGV0ID0gJmxpbms7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZXQtPnRhYmxlID0gJmV0X2thZG1fZXJyb3JfdGFibGU7CisgICAgZXQtPm5leHQgPSAwOworICAgICplbmQgPSBldDsKK30KZGlmZiAtLWdpdCBhL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwyLmV0IGIvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbDIuZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyNDdjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwyLmV0CkBAIC0wLDAgKzEsNjUgQEAKKyMgJElkOiBrYWRtX2Vyci5ldCx2IDEuNSAxOTk4LzAxLzE2IDIzOjExOjI3IGpvZGEgRXhwICQKKyMKKyMgQ29weXJpZ2h0IDE5ODggYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisjCisjIEZvciBjb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIGZpbGUKKyMgPG1pdC1jb3B5cmlnaHQuaD4uCisjCisjIEtlcmJlcm9zIGFkbWluaXN0cmF0aW9uIHNlcnZlciBlcnJvciB0YWJsZQorIworCWV0CWthZG0KKworIyBLQURNX1NVQ0NFU1MsIGFzIGFsbCBzdWNjZXNzIGNvZGVzIHNob3VsZCBiZSwgaXMgemVybworCitlYyBLQURNX1JDU0lELAkJIiRJZDoga2FkbV9lcnIuZXQsdiAxLjUgMTk5OC8wMS8xNiAyMzoxMToyNyBqb2RhIEV4cCAkIgorIyAvKiBCdWlsZGluZyBhbmQgdW5idWlsZGluZyB0aGUgcGFja2V0IGVycm9ycyAqLworZWMgS0FETV9OT19SRUFMTSwJIkNhbm5vdCBmZXRjaCBsb2NhbCByZWFsbSIKK2VjIEtBRE1fTk9fQ1JFRCwJIlVuYWJsZSB0byBmZXRjaCBjcmVkZW50aWFscyIKK2VjIEtBRE1fQkFEX0tFWSwJIkJhZCBrZXkgc3VwcGxpZWQiCitlYyBLQURNX05PX0VOQ1JZUFQsCSJDYW4ndCBlbmNyeXB0IGRhdGEiCitlYyBLQURNX05PX0FVVEgsCSJDYW5ub3QgZW5jb2RlL2RlY29kZSBhdXRoZW50aWNhdGlvbiBpbmZvIgorZWMgS0FETV9XUk9OR19SRUFMTSwJIlByaW5jaXBhbCBhdHRlbXBpbmcgY2hhbmdlIGlzIGluIHdyb25nIHJlYWxtIgorZWMgS0FETV9OT19ST09NLAkiUGFja2V0IGlzIHRvbyBsYXJnZSIKK2VjIEtBRE1fQkFEX1ZFUiwJIlZlcnNpb24gbnVtYmVyIGlzIGluY29ycmVjdCIKK2VjIEtBRE1fQkFEX0NISywJIkNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIgorZWMgS0FETV9OT19SRUFELAkiVW5zZWFsaW5nIHByaXZhdGUgZGF0YSBmYWlsZWQiCitlYyBLQURNX05PX09QQ09ERSwJIlVuc3VwcG9ydGVkIG9wZXJhdGlvbiIKK2VjIEtBRE1fTk9fSE9TVCwJIkNvdWxkIG5vdCBmaW5kIGFkbWluaXN0cmF0aW5nIGhvc3QiCitlYyBLQURNX1VOS19IT1NULAkiQWRtaW5pc3RyYXRpbmcgaG9zdCBuYW1lIGlzIHVua25vd24iCitlYyBLQURNX05PX1NFUlYsCSJDb3VsZCBub3QgZmluZCBzZXJ2aWNlIG5hbWUgaW4gc2VydmljZXMgZGF0YWJhc2UiCitlYyBLQURNX05PX1NPQ0ssCSJDb3VsZCBub3QgY3JlYXRlIHNvY2tldCIKK2VjIEtBRE1fTk9fQ09OTiwJIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciIKK2VjIEtBRE1fTk9fSEVSRSwJIkNvdWxkIG5vdCBmZXRjaCBsb2NhbCBzb2NrZXQgYWRkcmVzcyIKK2VjIEtBRE1fTk9fTUFTVCwJIkNvdWxkIG5vdCBmZXRjaCBtYXN0ZXIga2V5IgorZWMgS0FETV9OT19WRVJJLAkiQ291bGQgbm90IHZlcmlmeSBtYXN0ZXIga2V5IgorCisjIC8qIEZyb20gdGhlIHNlcnZlciBzaWRlIHJvdXRpbmVzICovCitlYyBLQURNX0lOVVNFLAkJIkVudHJ5IGFscmVhZHkgZXhpc3RzIGluIGRhdGFiYXNlIgorZWMgS0FETV9VS19TRVJST1IsCSJEYXRhYmFzZSBzdG9yZSBlcnJvciIKK2VjIEtBRE1fVUtfUkVSUk9SLAkiRGF0YWJhc2UgcmVhZCBlcnJvciIKK2VjIEtBRE1fVU5BVVRILAkJIkluc3VmZmljaWVudCBhY2Nlc3MgdG8gcGVyZm9ybSByZXF1ZXN0ZWQgb3BlcmF0aW9uIgorIyBLQURNX0RBVEEgaXNuJ3QgcmVhbGx5IGFuIGVycm9yLCBidXQuLi4KK2VjIEtBRE1fREFUQSwJCSJEYXRhIGlzIGF2YWlsYWJsZSBmb3IgcmV0dXJuIHRvIGNsaWVudCIKK2VjIEtBRE1fTk9FTlRSWSwJIk5vIHN1Y2ggZW50cnkgaW4gdGhlIGRhdGFiYXNlIgorCitlYyBLQURNX05PTUVNLAkJIk1lbW9yeSBleGhhdXN0ZWQiCitlYyBLQURNX05PX0hPU1ROQU1FLAkiQ291bGQgbm90IGZldGNoIHN5c3RlbSBob3N0bmFtZSIKK2VjIEtBRE1fTk9fQklORCwJIkNvdWxkIG5vdCBiaW5kIHBvcnQiCitlYyBLQURNX0xFTkdUSF9FUlJPUiwJIkxlbmd0aCBtaXNtYXRjaCBwcm9ibGVtIgorZWMgS0FETV9JTExfV0lMRENBUkQsCSJJbGxlZ2FsIHVzZSBvZiB3aWxkY2FyZCIKKworZWMgS0FETV9EQl9JTlVTRSwJIkRhdGFiYXNlIGlzIGxvY2tlZCBvciBpbiB1c2UtLXRyeSBhZ2FpbiBsYXRlciIKKworZWMgS0FETV9JTlNFQ1VSRV9QVywgICAgIkluc2VjdXJlIHBhc3N3b3JkIHJlamVjdGVkIgorZWMgS0FETV9QV19NSVNNQVRDSCwgICAgIkNsZWFydGV4dCBwYXNzd29yZCBhbmQgREVTIGtleSBkaWQgbm90IG1hdGNoIgorCitlYyBLQURNX05PVF9TRVJWX1BSSU5DLCAiSW52YWxpZCBwcmluY2lwYWwgZm9yIGNoYW5nZSBzcnZ0YWIgcmVxdWVzdCIKK2VjIEtBRE1fSU1NVVRBQkxFLAkiQXR0ZW1wdCBkbyBkZWxldGUgaW1tdXRhYmxlIHByaW5jaXBhbCIKKyMgcGFzc3dvcmQgcXVhbGl0eSBiYXNpY2FsbHkgc3RvbGVuIGZyb20gT1YgbGlia2FkbTUKK2luZGV4IDY0CitwcmVmaXggS0FETV9QQVNTX1EKK2VjIE5VTEwsCQkiTnVsbCBwYXNzd29yZHMgYXJlIG5vdCBhbGxvd2VkIgorZWMgVE9PU0hPUlQsCQkiUGFzc3dvcmQgaXMgdG9vIHNob3J0IgorZWMgQ0xBU1MsCQkiVG9vIGZldyBjaGFyYWN0ZXIgY2xhc3NlcyBpbiBwYXNzd29yZCIKK2VjIERJQ1QsCQkiUGFzc3dvcmQgaXMgaW4gdGhlIHBhc3N3b3JkIGRpY3Rpb25hcnkiCitlbmQKZGlmZiAtLWdpdCBhL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwyLmggYi9saWIvZXQvdGVzdF9jYXNlcy9oZWltZGFsMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMmNiN2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXQvdGVzdF9jYXNlcy9oZWltZGFsMi5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBoZWltZGFsMi5oOgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkOyBwbGVhc2UgZG8gbm90IGVkaXQgaXQuCisgKi8KKworI2luY2x1ZGUgPGV0L2NvbV9lcnIuaD4KKworI2RlZmluZSBLQURNX1JDU0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI3MkwpCisjZGVmaW5lIEtBRE1fTk9fUkVBTE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjcxTCkKKyNkZWZpbmUgS0FETV9OT19DUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNzBMKQorI2RlZmluZSBLQURNX0JBRF9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI2OUwpCisjZGVmaW5lIEtBRE1fTk9fRU5DUllQVCAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjY4TCkKKyNkZWZpbmUgS0FETV9OT19BVVRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNjdMKQorI2RlZmluZSBLQURNX1dST05HX1JFQUxNICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI2NkwpCisjZGVmaW5lIEtBRE1fTk9fUk9PTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjY1TCkKKyNkZWZpbmUgS0FETV9CQURfVkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNjRMKQorI2RlZmluZSBLQURNX0JBRF9DSEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI2M0wpCisjZGVmaW5lIEtBRE1fTk9fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjYyTCkKKyNkZWZpbmUgS0FETV9OT19PUENPREUgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNjFMKQorI2RlZmluZSBLQURNX05PX0hPU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI2MEwpCisjZGVmaW5lIEtBRE1fVU5LX0hPU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjU5TCkKKyNkZWZpbmUgS0FETV9OT19TRVJWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNThMKQorI2RlZmluZSBLQURNX05PX1NPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI1N0wpCisjZGVmaW5lIEtBRE1fTk9fQ09OTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjU2TCkKKyNkZWZpbmUgS0FETV9OT19IRVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNTVMKQorI2RlZmluZSBLQURNX05PX01BU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI1NEwpCisjZGVmaW5lIEtBRE1fTk9fVkVSSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjUzTCkKKyNkZWZpbmUgS0FETV9JTlVTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNTJMKQorI2RlZmluZSBLQURNX1VLX1NFUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI1MUwpCisjZGVmaW5lIEtBRE1fVUtfUkVSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjUwTCkKKyNkZWZpbmUgS0FETV9VTkFVVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNDlMKQorI2RlZmluZSBLQURNX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI0OEwpCisjZGVmaW5lIEtBRE1fTk9FTlRSWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjQ3TCkKKyNkZWZpbmUgS0FETV9OT01FTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNDZMKQorI2RlZmluZSBLQURNX05PX0hPU1ROQU1FICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI0NUwpCisjZGVmaW5lIEtBRE1fTk9fQklORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjQ0TCkKKyNkZWZpbmUgS0FETV9MRU5HVEhfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNDNMKQorI2RlZmluZSBLQURNX0lMTF9XSUxEQ0FSRCAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI0MkwpCisjZGVmaW5lIEtBRE1fREJfSU5VU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjQxTCkKKyNkZWZpbmUgS0FETV9JTlNFQ1VSRV9QVyAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNDBMKQorI2RlZmluZSBLQURNX1BXX01JU01BVENIICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjIzOUwpCisjZGVmaW5lIEtBRE1fTk9UX1NFUlZfUFJJTkMgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjM4TCkKKyNkZWZpbmUgS0FETV9JTU1VVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyMzdMKQorI2RlZmluZSBLQURNX1BBU1NfUV9OVUxMICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjIwOEwpCisjZGVmaW5lIEtBRE1fUEFTU19RX1RPT1NIT1JUICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjA3TCkKKyNkZWZpbmUgS0FETV9QQVNTX1FfQ0xBU1MgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyMDZMKQorI2RlZmluZSBLQURNX1BBU1NfUV9ESUNUICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjIwNUwpCitleHRlcm4gY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlIGV0X2thZG1fZXJyb3JfdGFibGU7CitleHRlcm4gdm9pZCBpbml0aWFsaXplX2thZG1fZXJyb3JfdGFibGUodm9pZCk7CisKKy8qIEZvciBjb21wYXRpYmlsaXR5IHdpdGggSGVpbWRhbCAqLworZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV9rYWRtX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0KTsKKworI2RlZmluZSBFUlJPUl9UQUJMRV9CQVNFX2thZG0gKC0xNzgzMTI2MjcyTCkKKworLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4uLiAqLworI2RlZmluZSBpbml0X2thZG1fZXJyX3RibCBpbml0aWFsaXplX2thZG1fZXJyb3JfdGFibGUKKyNkZWZpbmUga2FkbV9lcnJfYmFzZSBFUlJPUl9UQUJMRV9CQVNFX2thZG0KZGlmZiAtLWdpdCBhL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwzLmMgYi9saWIvZXQvdGVzdF9jYXNlcy9oZWltZGFsMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YjliNzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXQvdGVzdF9jYXNlcy9oZWltZGFsMy5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBoZWltZGFsMy5jOgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkOyBwbGVhc2UgZG8gbm90IGVkaXQgaXQuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIE5fKGEpIGEKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0ZXh0W10gPSB7CisJTl8oIlRlc3QgbWVzc2FnZSAxIiksCisJTl8oIlRlc3QgbWVzc2FnZSAyIiksCisgICAgMAorfTsKKworc3RydWN0IGVycm9yX3RhYmxlIHsKKyAgICBjaGFyIGNvbnN0ICogY29uc3QgKiBtc2dzOworICAgIGxvbmcgYmFzZTsKKyAgICBpbnQgbl9tc2dzOworfTsKK3N0cnVjdCBldF9saXN0IHsKKyAgICBzdHJ1Y3QgZXRfbGlzdCAqbmV4dDsKKyAgICBjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgKiB0YWJsZTsKK307CitleHRlcm4gc3RydWN0IGV0X2xpc3QgKl9ldF9saXN0OworCitjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgZXRfaDN0ZXN0X2Vycm9yX3RhYmxlID0geyB0ZXh0LCA0Mzc4NzUyMEwsIDIgfTsKKworc3RhdGljIHN0cnVjdCBldF9saXN0IGxpbmsgPSB7IDAsIDAgfTsKKwordm9pZCBpbml0aWFsaXplX2gzdGVzdF9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCk7Cit2b2lkIGluaXRpYWxpemVfaDN0ZXN0X2Vycm9yX3RhYmxlKHZvaWQpOworCit2b2lkIGluaXRpYWxpemVfaDN0ZXN0X2Vycm9yX3RhYmxlKHZvaWQpIHsKKyAgICBpbml0aWFsaXplX2gzdGVzdF9lcnJvcl90YWJsZV9yKCZfZXRfbGlzdCk7Cit9CisKKy8qIEZvciBIZWltZGFsIGNvbXBhdGliaWxpdHkgKi8KK3ZvaWQgaW5pdGlhbGl6ZV9oM3Rlc3RfZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpCit7CisgICAgc3RydWN0IGV0X2xpc3QgKmV0LCAqKmVuZDsKKworICAgIGZvciAoZW5kID0gbGlzdCwgZXQgPSAqbGlzdDsgZXQ7IGVuZCA9ICZldC0+bmV4dCwgZXQgPSBldC0+bmV4dCkKKyAgICAgICAgaWYgKGV0LT50YWJsZS0+bXNncyA9PSB0ZXh0KQorICAgICAgICAgICAgcmV0dXJuOworICAgIGV0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXRfbGlzdCkpOworICAgIGlmIChldCA9PSAwKSB7CisgICAgICAgIGlmICghbGluay50YWJsZSkKKyAgICAgICAgICAgIGV0ID0gJmxpbms7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZXQtPnRhYmxlID0gJmV0X2gzdGVzdF9lcnJvcl90YWJsZTsKKyAgICBldC0+bmV4dCA9IDA7CisgICAgKmVuZCA9IGV0OworfQpkaWZmIC0tZ2l0IGEvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbDMuZXQgYi9saWIvZXQvdGVzdF9jYXNlcy9oZWltZGFsMy5ldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGJkNWMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbDMuZXQKQEAgLTAsMCArMSw1IEBACitlcnJvcl90YWJsZSBvdmsgaDN0ZXN0CitwcmVmaXggSDNURVNUCitlYyBURVNUMSwJIlRlc3QgbWVzc2FnZSAxIgorZWMgVEVTVDIsCSJUZXN0IG1lc3NhZ2UgMiIKK2VuZApkaWZmIC0tZ2l0IGEvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbDMuaCBiL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFkMmNiOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwzLmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIGhlaW1kYWwzLmg6CisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQ7IHBsZWFzZSBkbyBub3QgZWRpdCBpdC4KKyAqLworCisjaW5jbHVkZSA8ZXQvY29tX2Vyci5oPgorCisjZGVmaW5lIEgzVEVTVF9URVNUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQzNzg3NTIwTCkKKyNkZWZpbmUgSDNURVNUX1RFU1QyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNDM3ODc1MjFMKQorZXh0ZXJuIGNvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSBldF9oM3Rlc3RfZXJyb3JfdGFibGU7CitleHRlcm4gdm9pZCBpbml0aWFsaXplX2gzdGVzdF9lcnJvcl90YWJsZSh2b2lkKTsKKworLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBIZWltZGFsICovCitleHRlcm4gdm9pZCBpbml0aWFsaXplX2gzdGVzdF9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCk7CisKKyNkZWZpbmUgRVJST1JfVEFCTEVfQkFTRV9oM3Rlc3QgKDQzNzg3NTIwTCkKKworLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4uLiAqLworI2RlZmluZSBpbml0X2gzdGVzdF9lcnJfdGJsIGluaXRpYWxpemVfaDN0ZXN0X2Vycm9yX3RhYmxlCisjZGVmaW5lIGgzdGVzdF9lcnJfYmFzZSBFUlJPUl9UQUJMRV9CQVNFX2gzdGVzdApkaWZmIC0tZ2l0IGEvbGliL2V0L3Rlc3RfY2FzZXMvaW1hcF9lcnIuYyBiL2xpYi9ldC90ZXN0X2Nhc2VzL2ltYXBfZXJyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY1NzZkMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC90ZXN0X2Nhc2VzL2ltYXBfZXJyLmMKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIGltYXBfZXJyLmM6CisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQ7IHBsZWFzZSBkbyBub3QgZWRpdCBpdC4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgTl8oYSkgYQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRleHRbXSA9IHsKKwlOXyggICAiU3lzdGVtIEkvTyBlcnJvciIpLAorCU5fKCAgICJQZXJtaXNzaW9uIGRlbmllZCIpLAorCU5fKCAgICJPdmVyIHF1b3RhIiksCisJTl8oICAgIlRvbyBtYW55IHVzZXIgZmxhZ3MgaW4gbWFpbGJveCIpLAorCU5fKCAgICJNYWlsYm94IGhhcyBhbiBpbnZhbGlkIGZvcm1hdCIpLAorCU5fKCAgICJPcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiBtYWlsYm94IiksCisJTl8oICAgIk1haWxib3ggZG9lcyBub3QgZXhpc3QiKSwKKwlOXyggICAiTWFpbGJveCBhbHJlYWR5IGV4aXN0cyIpLAorCU5fKCAgICJJbnZhbGlkIG1haWxib3ggbmFtZSIpLAorCU5fKCAgICJNYWlsYm94IGlzIGxvY2tlZCBieSBQT1Agc2VydmVyIiksCisJTl8oICAgIlVua25vd24vaW52YWxpZCBwYXJ0aXRpb24iKSwKKwlOXyggICAiSW52YWxpZCBpZGVudGlmaWVyIiksCisJTl8oICAgIk1lc3NhZ2UgY29udGFpbnMgTlVMIGNoYXJhY3RlcnMiKSwKKwlOXyggICAiTWVzc2FnZSBjb250YWlucyBiYXJlIG5ld2xpbmVzIiksCisJTl8oICAgIk1lc3NhZ2UgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4gaGVhZGVycyIpLAorCU5fKCAgICJNZXNzYWdlIGNvbnRhaW5zIGludmFsaWQgaGVhZGVyIiksCisJTl8oICAgIk1lc3NhZ2UgaGFzIG5vIGhlYWRlci9ib2R5IHNlcGFyYXRvciIpLAorCU5fKCAgICJRdW90YSByb290IGRvZXMgbm90IGV4aXN0IiksCisJTl8oICAgIlVucmVjb2duaXplZCBjaGFyYWN0ZXIgc2V0IiksCisJTl8oICAgIkludmFsaWQgdXNlciIpLAorCU5fKCAgICJMb2dpbiBpbmNvcnJlY3QiKSwKKwlOXyggICAiQW5vbnltb3VzIGxvZ2luIGlzIG5vdCBwZXJtaXR0ZWQiKSwKKwlOXyggICAiVW5zdXBwb3J0ZWQgcXVvdGEgcmVzb3VyY2UiKSwKKwlOXyggICAiTWFpbGJveCBpcyBvdmVyIHF1b3RhIiksCisJTl8oICAgIk1haWxib3ggaXMgYXQgJWQlJSBvZiBxdW90YSIpLAorCU5fKCAgICJNZXNzYWdlICVkIG5vIGxvbmdlciBleGlzdHMiKSwKKwlOXyggICAiVW5hYmxlIHRvIGNoZWNrcG9pbnQgXFxTZWVuIHN0YXRlIiksCisJTl8oICAgIlVuYWJsZSB0byBwcmVzZXJ2ZSBcXFNlZW4gc3RhdGUiKSwKKwlOXyggICAiTE9HT1VUIHJlY2VpdmVkIiksCisJTl8oICAgIkNvbXBsZXRlZCIpLAorICAgIDAKK307CisKK3N0cnVjdCBlcnJvcl90YWJsZSB7CisgICAgY2hhciBjb25zdCAqIGNvbnN0ICogbXNnczsKKyAgICBsb25nIGJhc2U7CisgICAgaW50IG5fbXNnczsKK307CitzdHJ1Y3QgZXRfbGlzdCB7CisgICAgc3RydWN0IGV0X2xpc3QgKm5leHQ7CisgICAgY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlICogdGFibGU7Cit9OworZXh0ZXJuIHN0cnVjdCBldF9saXN0ICpfZXRfbGlzdDsKKworY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlIGV0X2ltYXBfZXJyb3JfdGFibGUgPSB7IHRleHQsIC0xOTA0ODA5NDcyTCwgMzAgfTsKKworc3RhdGljIHN0cnVjdCBldF9saXN0IGxpbmsgPSB7IDAsIDAgfTsKKwordm9pZCBpbml0aWFsaXplX2ltYXBfZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpOwordm9pZCBpbml0aWFsaXplX2ltYXBfZXJyb3JfdGFibGUodm9pZCk7CisKK3ZvaWQgaW5pdGlhbGl6ZV9pbWFwX2Vycm9yX3RhYmxlKHZvaWQpIHsKKyAgICBpbml0aWFsaXplX2ltYXBfZXJyb3JfdGFibGVfcigmX2V0X2xpc3QpOworfQorCisvKiBGb3IgSGVpbWRhbCBjb21wYXRpYmlsaXR5ICovCit2b2lkIGluaXRpYWxpemVfaW1hcF9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCkKK3sKKyAgICBzdHJ1Y3QgZXRfbGlzdCAqZXQsICoqZW5kOworCisgICAgZm9yIChlbmQgPSBsaXN0LCBldCA9ICpsaXN0OyBldDsgZW5kID0gJmV0LT5uZXh0LCBldCA9IGV0LT5uZXh0KQorICAgICAgICBpZiAoZXQtPnRhYmxlLT5tc2dzID09IHRleHQpCisgICAgICAgICAgICByZXR1cm47CisgICAgZXQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBldF9saXN0KSk7CisgICAgaWYgKGV0ID09IDApIHsKKyAgICAgICAgaWYgKCFsaW5rLnRhYmxlKQorICAgICAgICAgICAgZXQgPSAmbGluazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBldC0+dGFibGUgPSAmZXRfaW1hcF9lcnJvcl90YWJsZTsKKyAgICBldC0+bmV4dCA9IDA7CisgICAgKmVuZCA9IGV0OworfQpkaWZmIC0tZ2l0IGEvbGliL2V0L3Rlc3RfY2FzZXMvaW1hcF9lcnIuZXQgYi9saWIvZXQvdGVzdF9jYXNlcy9pbWFwX2Vyci5ldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Y1YmJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V0L3Rlc3RfY2FzZXMvaW1hcF9lcnIuZXQKQEAgLTAsMCArMSwxMjcgQEAKKyMgaW1hcF9lcnIuZXQgLS0gRXJyb3IgY29kZXMgZm9yIEN5cnVzIElNQVAgc2VydmVyIHByb2dyYW1zCisjCisjIENvcHlyaWdodCAxOTk4IENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CisjIAorIyBObyB3YXJyYW50aWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGFyZSBtYWRlIHJlZ2FyZGluZyB0aGUKKyMgb3BlcmF0aW9uLCB1c2UsIG9yIHJlc3VsdHMgb2YgdGhlIHNvZnR3YXJlLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGlzIGhlcmVieSBncmFudGVkIGZvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBvbmx5CisjIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcyBhbmQgaW4KKyMgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorIworIyBQZXJtaXNzaW9uIGlzIGFsc28gZ3JhbnRlZCB0byBJbnRlcm5ldCBTZXJ2aWNlIFByb3ZpZGVycyBhbmQgb3RoZXJzCisjIGVudGl0aWVzIHRvIHVzZSB0aGUgc29mdHdhcmUgZm9yIGludGVybmFsIHB1cnBvc2VzLgorIworIyBUaGUgZGlzdHJpYnV0aW9uLCBtb2RpZmljYXRpb24gb3Igc2FsZSBvZiBhIHByb2R1Y3Qgd2hpY2ggdXNlcyBvciBpcworIyBiYXNlZCBvbiB0aGUgc29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzIG9yCisjIGJlbmVmaXRzIHJlcXVpcmVzIHNwZWNpZmljLCBhZGRpdGlvbmFsIHBlcm1pc3Npb24gZnJvbToKKyMKKyMgIE9mZmljZSBvZiBUZWNobm9sb2d5IFRyYW5zZmVyCisjICBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQorIyAgNTAwMCBGb3JiZXMgQXZlbnVlCisjICBQaXR0c2J1cmdoLCBQQSAgMTUyMTMtMzg5MAorIyAgKDQxMikgMjY4LTQzODcsIGZheDogKDQxMikgMjY4LTczOTUKKyMgIHRlY2gtdHJhbnNmZXJAYW5kcmV3LmNtdS5lZHUKKyMgCitlcnJvcl90YWJsZSBpbWFwCisKK2VjIElNQVBfSU9FUlJPUiwKKyAgICJTeXN0ZW0gSS9PIGVycm9yIgorCitlYyBJTUFQX1BFUk1JU1NJT05fREVOSUVELAorICAgIlBlcm1pc3Npb24gZGVuaWVkIgorCitlYyBJTUFQX1FVT1RBX0VYQ0VFREVELAorICAgIk92ZXIgcXVvdGEiCisKK2VjIElNQVBfVVNFUkZMQUdfRVhIQVVTVEVELAorICAgIlRvbyBtYW55IHVzZXIgZmxhZ3MgaW4gbWFpbGJveCIKKworZWMgSU1BUF9NQUlMQk9YX0JBREZPUk1BVCwKKyAgICJNYWlsYm94IGhhcyBhbiBpbnZhbGlkIGZvcm1hdCIKKworZWMgSU1BUF9NQUlMQk9YX05PVFNVUFBPUlRFRCwKKyAgICJPcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiBtYWlsYm94IgorCitlYyBJTUFQX01BSUxCT1hfTk9ORVhJU1RFTlQsCisgICAiTWFpbGJveCBkb2VzIG5vdCBleGlzdCIKKworZWMgSU1BUF9NQUlMQk9YX0VYSVNUUywKKyAgICJNYWlsYm94IGFscmVhZHkgZXhpc3RzIgorCitlYyBJTUFQX01BSUxCT1hfQkFETkFNRSwKKyAgICJJbnZhbGlkIG1haWxib3ggbmFtZSIKKworZWMgSU1BUF9NQUlMQk9YX1BPUExPQ0tFRCwKKyAgICJNYWlsYm94IGlzIGxvY2tlZCBieSBQT1Agc2VydmVyIgorCitlYyBJTUFQX1BBUlRJVElPTl9VTktOT1dOLAorICAgIlVua25vd24vaW52YWxpZCBwYXJ0aXRpb24iCisKK2VjIElNQVBfSU5WQUxJRF9JREVOVElGSUVSLAorICAgIkludmFsaWQgaWRlbnRpZmllciIKKworZWMgSU1BUF9NRVNTQUdFX0NPTlRBSU5TTlVMTCwKKyAgICJNZXNzYWdlIGNvbnRhaW5zIE5VTCBjaGFyYWN0ZXJzIgorCitlYyBJTUFQX01FU1NBR0VfQ09OVEFJTlNOTCwKKyAgICJNZXNzYWdlIGNvbnRhaW5zIGJhcmUgbmV3bGluZXMiCisKK2VjIElNQVBfTUVTU0FHRV9DT05UQUlOUzhCSVQsCisgICAiTWVzc2FnZSBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBoZWFkZXJzIgorCitlYyBJTUFQX01FU1NBR0VfQkFESEVBREVSLAorICAgIk1lc3NhZ2UgY29udGFpbnMgaW52YWxpZCBoZWFkZXIiCisKK2VjIElNQVBfTUVTU0FHRV9OT0JMQU5LTElORSwKKyAgICJNZXNzYWdlIGhhcyBubyBoZWFkZXIvYm9keSBzZXBhcmF0b3IiCisKK2VjIElNQVBfUVVPVEFST09UX05PTkVYSVNURU5ULAorICAgIlF1b3RhIHJvb3QgZG9lcyBub3QgZXhpc3QiCisKKyMgRm9sbG93aW5nIG9ubHkgdXNlZCBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb24gb2YgZXJyb3IgbWVzc2FnZXMKKworZWMgSU1BUF9VTlJFQ09HTklaRURfQ0hBUlNFVCwKKyAgICJVbnJlY29nbml6ZWQgY2hhcmFjdGVyIHNldCIKKworZWMgSU1BUF9JTlZBTElEX1VTRVIsCisgICAiSW52YWxpZCB1c2VyIgorCitlYyBJTUFQX0lOVkFMSURfTE9HSU4sCisgICAiTG9naW4gaW5jb3JyZWN0IgorCitlYyBJTUFQX0FOT05ZTU9VU19OT1RfUEVSTUlUVEVELAorICAgIkFub255bW91cyBsb2dpbiBpcyBub3QgcGVybWl0dGVkIgorCitlYyBJTUFQX1VOU1VQUE9SVEVEX1FVT1RBLAorICAgIlVuc3VwcG9ydGVkIHF1b3RhIHJlc291cmNlIgorCisjIEZvbGxvd2luZyB1c2VkIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbiBvZiB1bnRhZ2dlZCBPSy9OTyByZXNwb25zZXMKKworZWMgSU1BUF9OT19PVkVSUVVPVEEsCisgICAiTWFpbGJveCBpcyBvdmVyIHF1b3RhIgorCitlYyBJTUFQX05PX0NMT1NFUVVPVEEsCisgICAiTWFpbGJveCBpcyBhdCAlZCUlIG9mIHF1b3RhIgorCitlYyBJTUFQX05PX01TR0dPTkUsCisgICAiTWVzc2FnZSAlZCBubyBsb25nZXIgZXhpc3RzIgorCitlYyBJTUFQX05PX0NIRUNLU0VFTiwKKyAgICJVbmFibGUgdG8gY2hlY2twb2ludCBcXFNlZW4gc3RhdGUiCisKK2VjIElNQVBfTk9fQ0hFQ0tQUkVTRVJWRSwKKyAgICJVbmFibGUgdG8gcHJlc2VydmUgXFxTZWVuIHN0YXRlIgorCisjIEZvbGxvd2luZyB1c2VkIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbiBvZiB1bnRhZ2dlZCBCWUUgcmVzcG9uc2UKKworZWMgSU1BUF9CWUVfTE9HT1VULAorICAgIkxPR09VVCByZWNlaXZlZCIKKworIyBGb2xsb3dpbmcgdXNlZCBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb24gb2YgdGFnZ2VkIE9LIHJlc3BvbnNlCisKK2VjIElNQVBfT0tfQ09NUExFVEVELAorICAgIkNvbXBsZXRlZCIKKworZW5kCmRpZmYgLS1naXQgYS9saWIvZXQvdGVzdF9jYXNlcy9pbWFwX2Vyci5oIGIvbGliL2V0L3Rlc3RfY2FzZXMvaW1hcF9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzY2NGM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V0L3Rlc3RfY2FzZXMvaW1hcF9lcnIuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogaW1hcF9lcnIuaDoKKyAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZDsgcGxlYXNlIGRvIG5vdCBlZGl0IGl0LgorICovCisKKyNpbmNsdWRlIDxldC9jb21fZXJyLmg+CisKKyNkZWZpbmUgSU1BUF9JT0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NzJMKQorI2RlZmluZSBJTUFQX1BFUk1JU1NJT05fREVOSUVEICAgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ3MUwpCisjZGVmaW5lIElNQVBfUVVPVEFfRVhDRUVERUQgICAgICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDcwTCkKKyNkZWZpbmUgSU1BUF9VU0VSRkxBR19FWEhBVVNURUQgICAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NjlMKQorI2RlZmluZSBJTUFQX01BSUxCT1hfQkFERk9STUFUICAgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ2OEwpCisjZGVmaW5lIElNQVBfTUFJTEJPWF9OT1RTVVBQT1JURUQgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDY3TCkKKyNkZWZpbmUgSU1BUF9NQUlMQk9YX05PTkVYSVNURU5UICAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NjZMKQorI2RlZmluZSBJTUFQX01BSUxCT1hfRVhJU1RTICAgICAgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ2NUwpCisjZGVmaW5lIElNQVBfTUFJTEJPWF9CQUROQU1FICAgICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDY0TCkKKyNkZWZpbmUgSU1BUF9NQUlMQk9YX1BPUExPQ0tFRCAgICAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NjNMKQorI2RlZmluZSBJTUFQX1BBUlRJVElPTl9VTktOT1dOICAgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ2MkwpCisjZGVmaW5lIElNQVBfSU5WQUxJRF9JREVOVElGSUVSICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDYxTCkKKyNkZWZpbmUgSU1BUF9NRVNTQUdFX0NPTlRBSU5TTlVMTCAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NjBMKQorI2RlZmluZSBJTUFQX01FU1NBR0VfQ09OVEFJTlNOTCAgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ1OUwpCisjZGVmaW5lIElNQVBfTUVTU0FHRV9DT05UQUlOUzhCSVQgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDU4TCkKKyNkZWZpbmUgSU1BUF9NRVNTQUdFX0JBREhFQURFUiAgICAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NTdMKQorI2RlZmluZSBJTUFQX01FU1NBR0VfTk9CTEFOS0xJTkUgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ1NkwpCisjZGVmaW5lIElNQVBfUVVPVEFST09UX05PTkVYSVNURU5UICAgICAgICAgICAgICAgKC0xOTA0ODA5NDU1TCkKKyNkZWZpbmUgSU1BUF9VTlJFQ09HTklaRURfQ0hBUlNFVCAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NTRMKQorI2RlZmluZSBJTUFQX0lOVkFMSURfVVNFUiAgICAgICAgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ1M0wpCisjZGVmaW5lIElNQVBfSU5WQUxJRF9MT0dJTiAgICAgICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDUyTCkKKyNkZWZpbmUgSU1BUF9BTk9OWU1PVVNfTk9UX1BFUk1JVFRFRCAgICAgICAgICAgICAoLTE5MDQ4MDk0NTFMKQorI2RlZmluZSBJTUFQX1VOU1VQUE9SVEVEX1FVT1RBICAgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ1MEwpCisjZGVmaW5lIElNQVBfTk9fT1ZFUlFVT1RBICAgICAgICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDQ5TCkKKyNkZWZpbmUgSU1BUF9OT19DTE9TRVFVT1RBICAgICAgICAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NDhMKQorI2RlZmluZSBJTUFQX05PX01TR0dPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ0N0wpCisjZGVmaW5lIElNQVBfTk9fQ0hFQ0tTRUVOICAgICAgICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDQ2TCkKKyNkZWZpbmUgSU1BUF9OT19DSEVDS1BSRVNFUlZFICAgICAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NDVMKQorI2RlZmluZSBJTUFQX0JZRV9MT0dPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ0NEwpCisjZGVmaW5lIElNQVBfT0tfQ09NUExFVEVEICAgICAgICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDQzTCkKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgZXRfaW1hcF9lcnJvcl90YWJsZTsKK2V4dGVybiB2b2lkIGluaXRpYWxpemVfaW1hcF9lcnJvcl90YWJsZSh2b2lkKTsKKworLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBIZWltZGFsICovCitleHRlcm4gdm9pZCBpbml0aWFsaXplX2ltYXBfZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpOworCisjZGVmaW5lIEVSUk9SX1RBQkxFX0JBU0VfaW1hcCAoLTE5MDQ4MDk0NzJMKQorCisvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLi4uICovCisjZGVmaW5lIGluaXRfaW1hcF9lcnJfdGJsIGluaXRpYWxpemVfaW1hcF9lcnJvcl90YWJsZQorI2RlZmluZSBpbWFwX2Vycl9iYXNlIEVSUk9SX1RBQkxFX0JBU0VfaW1hcApkaWZmIC0tZ2l0IGEvbGliL2V0L3Rlc3RfY2FzZXMvc2ltcGxlLmMgYi9saWIvZXQvdGVzdF9jYXNlcy9zaW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGFiMWEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V0L3Rlc3RfY2FzZXMvc2ltcGxlLmMKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIHNpbXBsZS5jOgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkOyBwbGVhc2UgZG8gbm90IGVkaXQgaXQuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIE5fKGEpIGEKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0ZXh0W10gPSB7CisJTl8oCQkJIkNhbid0IHJlYWQgdGlja2V0IGZpbGUiKSwKKwlOXygJCQkiQ2FuJ3QgZmluZCB0aWNrZXQgb3IgVEdUIiksCisJTl8oCQkJIlRHVCBleHBpcmVkIiksCisJTl8oCQkJIkNhbid0IGRlY29kZSBhdXRoZW50aWNhdG9yIiksCisJTl8oCQkJIlRpY2tldCBleHBpcmVkIiksCisJTl8oCQkJIlJlcGVhdGVkIHJlcXVlc3QiKSwKKwlOXygJCQkiVGhlIHRpY2tldCBpc24ndCBmb3IgdXMiKSwKKwlOXygJCQkiUmVxdWVzdCBpcyBpbmNvbnNpc3RlbnQiKSwKKwlOXygJCQkiRGVsdGEtVCB0b28gYmlnIiksCisJTl8oCQkJIkluY29ycmVjdCBuZXQgYWRkcmVzcyIpLAorCU5fKAkJCSJQcm90b2NvbCB2ZXJzaW9uIG1pc21hdGNoIiksCisJTl8oCQkJIkludmFsaWQgbWVzc2FnZSB0eXBlIiksCisJTl8oCQkJIk1lc3NhZ2Ugc3RyZWFtIG1vZGlmaWVkIiksCisJTl8oCQkJIk1lc3NhZ2Ugb3V0IG9mIG9yZGVyIiksCisJTl8oCQkJIlVuYXV0aG9yaXplZCByZXF1ZXN0IiksCisJTl8oCQkJIkN1cnJlbnQgcGFzc3dvcmQgaXMgbnVsbCIpLAorCU5fKAkJCSJJbmNvcnJlY3QgY3VycmVudCBwYXNzd29yZCIpLAorCU5fKAkJCSJQcm90b2NvbCBlcnJvciIpLAorCU5fKAkJCSJFcnJvciByZXR1cm5lZCBieSBLREMiKSwKKwlOXygJCQkiTnVsbCB0aWNrZXQgcmV0dXJuZWQgYnkgS0RDIiksCisJTl8oCQkJIlJldHJ5IGNvdW50IGV4Y2VlZGVkIiksCisJTl8oCQkJIkNhbid0IHNlbmQgcmVxdWVzdCIpLAorICAgIDAKK307CisKK3N0cnVjdCBlcnJvcl90YWJsZSB7CisgICAgY2hhciBjb25zdCAqIGNvbnN0ICogbXNnczsKKyAgICBsb25nIGJhc2U7CisgICAgaW50IG5fbXNnczsKK307CitzdHJ1Y3QgZXRfbGlzdCB7CisgICAgc3RydWN0IGV0X2xpc3QgKm5leHQ7CisgICAgY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlICogdGFibGU7Cit9OworZXh0ZXJuIHN0cnVjdCBldF9saXN0ICpfZXRfbGlzdDsKKworY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlIGV0X2tyYl9lcnJvcl90YWJsZSA9IHsgdGV4dCwgMzk1MjUzNzZMLCAyMiB9OworCitzdGF0aWMgc3RydWN0IGV0X2xpc3QgbGluayA9IHsgMCwgMCB9OworCit2b2lkIGluaXRpYWxpemVfa3JiX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0KTsKK3ZvaWQgaW5pdGlhbGl6ZV9rcmJfZXJyb3JfdGFibGUodm9pZCk7CisKK3ZvaWQgaW5pdGlhbGl6ZV9rcmJfZXJyb3JfdGFibGUodm9pZCkgeworICAgIGluaXRpYWxpemVfa3JiX2Vycm9yX3RhYmxlX3IoJl9ldF9saXN0KTsKK30KKworLyogRm9yIEhlaW1kYWwgY29tcGF0aWJpbGl0eSAqLwordm9pZCBpbml0aWFsaXplX2tyYl9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCkKK3sKKyAgICBzdHJ1Y3QgZXRfbGlzdCAqZXQsICoqZW5kOworCisgICAgZm9yIChlbmQgPSBsaXN0LCBldCA9ICpsaXN0OyBldDsgZW5kID0gJmV0LT5uZXh0LCBldCA9IGV0LT5uZXh0KQorICAgICAgICBpZiAoZXQtPnRhYmxlLT5tc2dzID09IHRleHQpCisgICAgICAgICAgICByZXR1cm47CisgICAgZXQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBldF9saXN0KSk7CisgICAgaWYgKGV0ID09IDApIHsKKyAgICAgICAgaWYgKCFsaW5rLnRhYmxlKQorICAgICAgICAgICAgZXQgPSAmbGluazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBldC0+dGFibGUgPSAmZXRfa3JiX2Vycm9yX3RhYmxlOworICAgIGV0LT5uZXh0ID0gMDsKKyAgICAqZW5kID0gZXQ7Cit9CmRpZmYgLS1naXQgYS9saWIvZXQvdGVzdF9jYXNlcy9zaW1wbGUuZXQgYi9saWIvZXQvdGVzdF9jYXNlcy9zaW1wbGUuZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM3Yjc3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC90ZXN0X2Nhc2VzL3NpbXBsZS5ldApAQCAtMCwwICsxLDY5IEBACisJZXJyb3JfdGFibGUJa3JiCisKKwllcnJvcl9jb2RlCUtSQl9NS19BUF9US0ZJTCwKKwkJCSJDYW4ndCByZWFkIHRpY2tldCBmaWxlIgorCisJZWMJCUtSQl9NS19BUF9OT1RLVCwKKwkJCSJDYW4ndCBmaW5kIHRpY2tldCBvciBUR1QiCisKKwllYwkJS1JCX01LX0FQX1RHVEVYUCwKKwkJCSJUR1QgZXhwaXJlZCIKKworCWVjCQlLUkJfUkRfQVBfVU5ERUMsCisJCQkiQ2FuJ3QgZGVjb2RlIGF1dGhlbnRpY2F0b3IiCisKKwllYwkJS1JCX1JEX0FQX0VYUCwKKwkJCSJUaWNrZXQgZXhwaXJlZCIKKworCWVjCQlLUkJfUkRfQVBfUkVQRUFULAorCQkJIlJlcGVhdGVkIHJlcXVlc3QiCisKKwllYwkJS1JCX1JEX0FQX05PVF9VUywKKwkJCSJUaGUgdGlja2V0IGlzbid0IGZvciB1cyIKKworCWVjCQlLUkJfUkRfQVBfSU5DT04sCisJCQkiUmVxdWVzdCBpcyBpbmNvbnNpc3RlbnQiCisKKwllYwkJS1JCX1JEX0FQX1RJTUUsCisJCQkiRGVsdGEtVCB0b28gYmlnIgorCisJZWMJCUtSQl9SRF9BUF9CQURELAorCQkJIkluY29ycmVjdCBuZXQgYWRkcmVzcyIKKworCWVjCQlLUkJfUkRfQVBfVkVSU0lPTiwKKwkJCSJQcm90b2NvbCB2ZXJzaW9uIG1pc21hdGNoIgorCisJZWMJCUtSQl9SRF9BUF9NU0dfVFlQRSwKKwkJCSJJbnZhbGlkIG1lc3NhZ2UgdHlwZSIKKworCWVjCQlLUkJfUkRfQVBfTU9ESUZJRUQsCisJCQkiTWVzc2FnZSBzdHJlYW0gbW9kaWZpZWQiCisKKwllYwkJS1JCX1JEX0FQX09SREVSLAorCQkJIk1lc3NhZ2Ugb3V0IG9mIG9yZGVyIgorCisJZWMJCUtSQl9SRF9BUF9VTkFVVEhPUiwKKwkJCSJVbmF1dGhvcml6ZWQgcmVxdWVzdCIKKworCWVjCQlLUkJfR1RfUFdfTlVMTCwKKwkJCSJDdXJyZW50IHBhc3N3b3JkIGlzIG51bGwiCisKKwllYwkJS1JCX0dUX1BXX0JBRFBXLAorCQkJIkluY29ycmVjdCBjdXJyZW50IHBhc3N3b3JkIgorCisJZWMJCUtSQl9HVF9QV19QUk9ULAorCQkJIlByb3RvY29sIGVycm9yIgorCisJZWMJCUtSQl9HVF9QV19LRENFUlIsCisJCQkiRXJyb3IgcmV0dXJuZWQgYnkgS0RDIgorCisJZWMJCUtSQl9HVF9QV19OVUxMVEtULAorCQkJIk51bGwgdGlja2V0IHJldHVybmVkIGJ5IEtEQyIKKworCWVjCQlLUkJfU0tEQ19SRVRSWSwKKwkJCSJSZXRyeSBjb3VudCBleGNlZWRlZCIKKworCWVjCQlLUkJfU0tEQ19DQU5ULAorCQkJIkNhbid0IHNlbmQgcmVxdWVzdCIKKworCWVuZApkaWZmIC0tZ2l0IGEvbGliL2V0L3Rlc3RfY2FzZXMvc2ltcGxlLmggYi9saWIvZXQvdGVzdF9jYXNlcy9zaW1wbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzgwMGI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V0L3Rlc3RfY2FzZXMvc2ltcGxlLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIHNpbXBsZS5oOgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkOyBwbGVhc2UgZG8gbm90IGVkaXQgaXQuCisgKi8KKworI2luY2x1ZGUgPGV0L2NvbV9lcnIuaD4KKworI2RlZmluZSBLUkJfTUtfQVBfVEtGSUwgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM3NkwpCisjZGVmaW5lIEtSQl9NS19BUF9OT1RLVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzc3TCkKKyNkZWZpbmUgS1JCX01LX0FQX1RHVEVYUCAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzNzhMKQorI2RlZmluZSBLUkJfUkRfQVBfVU5ERUMgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM3OUwpCisjZGVmaW5lIEtSQl9SRF9BUF9FWFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1MzgwTCkKKyNkZWZpbmUgS1JCX1JEX0FQX1JFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzODFMKQorI2RlZmluZSBLUkJfUkRfQVBfTk9UX1VTICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM4MkwpCisjZGVmaW5lIEtSQl9SRF9BUF9JTkNPTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1MzgzTCkKKyNkZWZpbmUgS1JCX1JEX0FQX1RJTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzODRMKQorI2RlZmluZSBLUkJfUkRfQVBfQkFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM4NUwpCisjZGVmaW5lIEtSQl9SRF9BUF9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzg2TCkKKyNkZWZpbmUgS1JCX1JEX0FQX01TR19UWVBFICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzODdMKQorI2RlZmluZSBLUkJfUkRfQVBfTU9ESUZJRUQgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM4OEwpCisjZGVmaW5lIEtSQl9SRF9BUF9PUkRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzg5TCkKKyNkZWZpbmUgS1JCX1JEX0FQX1VOQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzOTBMKQorI2RlZmluZSBLUkJfR1RfUFdfTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM5MUwpCisjZGVmaW5lIEtSQl9HVF9QV19CQURQVyAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1MzkyTCkKKyNkZWZpbmUgS1JCX0dUX1BXX1BST1QgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzOTNMKQorI2RlZmluZSBLUkJfR1RfUFdfS0RDRVJSICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM5NEwpCisjZGVmaW5lIEtSQl9HVF9QV19OVUxMVEtUICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzk1TCkKKyNkZWZpbmUgS1JCX1NLRENfUkVUUlkgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzOTZMKQorI2RlZmluZSBLUkJfU0tEQ19DQU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM5N0wpCitleHRlcm4gY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlIGV0X2tyYl9lcnJvcl90YWJsZTsKK2V4dGVybiB2b2lkIGluaXRpYWxpemVfa3JiX2Vycm9yX3RhYmxlKHZvaWQpOworCisvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIEhlaW1kYWwgKi8KK2V4dGVybiB2b2lkIGluaXRpYWxpemVfa3JiX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0KTsKKworI2RlZmluZSBFUlJPUl9UQUJMRV9CQVNFX2tyYiAoMzk1MjUzNzZMKQorCisvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLi4uICovCisjZGVmaW5lIGluaXRfa3JiX2Vycl90YmwgaW5pdGlhbGl6ZV9rcmJfZXJyb3JfdGFibGUKKyNkZWZpbmUga3JiX2Vycl9iYXNlIEVSUk9SX1RBQkxFX0JBU0Vfa3JiCmRpZmYgLS1naXQgYS9saWIvZXQvdGV4aW5mby50ZXggYi9saWIvZXQvdGV4aW5mby50ZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRkZDAxNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC90ZXhpbmZvLnRleApAQCAtMCwwICsxLDcyMjYgQEAKKyUgdGV4aW5mby50ZXggLS0gVGVYIG1hY3JvcyB0byBoYW5kbGUgVGV4aW5mbyBmaWxlcy4KKyUKKyUgTG9hZCBwbGFpbiBpZiBuZWNlc3NhcnksIGkuZS4sIGlmIHJ1bm5pbmcgdW5kZXIgaW5pdGV4LgorXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgZm10bmFtZVxlbmRjc25hbWVccmVsYXhcaW5wdXQgcGxhaW5cZmkKKyUKK1xkZWZcdGV4aW5mb3ZlcnNpb257MjAwNi0wMi0xMy4xNn0KKyUKKyUgQ29weXJpZ2h0IChDKSAxOTg1LCAxOTg2LCAxOTg4LCAxOTkwLCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LAorJSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUKKyUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorJQorJSBUaGlzIHRleGluZm8udGV4IGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCislIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCislIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQKKyUgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorJQorJSBUaGlzIHRleGluZm8udGV4IGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCislIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyUgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorJQorJSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorJSBhbG9uZyB3aXRoIHRoaXMgdGV4aW5mby50ZXggZmlsZTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlCislIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCislIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorJQorJSBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGVuIHRoaXMgZmlsZSBpcyByZWFkIGJ5IFRlWCB3aGVuIHByb2Nlc3NpbmcKKyUgYSBUZXhpbmZvIHNvdXJjZSBkb2N1bWVudCwgeW91IG1heSB1c2UgdGhlIHJlc3VsdCB3aXRob3V0CislIHJlc3RyaWN0aW9uLiAgKFRoaXMgaGFzIGJlZW4gb3VyIGludGVudCBzaW5jZSBUZXhpbmZvIHdhcyBpbnZlbnRlZC4pCislCislIFBsZWFzZSB0cnkgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRleGluZm8udGV4IGJlZm9yZSBzdWJtaXR0aW5nIGJ1ZworJSByZXBvcnRzOyB5b3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbToKKyUgICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8gKHRoZSBUZXhpbmZvIGhvbWUgcGFnZSksIG9yCislICAgZnRwOi8vdHVnLm9yZy90ZXgvdGV4aW5mby50ZXgKKyUgICAgIChhbmQgYWxsIENUQU4gbWlycm9ycywgc2VlIGh0dHA6Ly93d3cuY3Rhbi5vcmcpLgorJSBUaGUgdGV4aW5mby50ZXggaW4gYW55IGdpdmVuIGRpc3RyaWJ1dGlvbiBjb3VsZCB3ZWxsIGJlIG91dAorJSBvZiBkYXRlLCBzbyBpZiB0aGF0J3Mgd2hhdCB5b3UncmUgdXNpbmcsIHBsZWFzZSBjaGVjay4KKyUKKyUgU2VuZCBidWcgcmVwb3J0cyB0byBidWctdGV4aW5mb0BnbnUub3JnLiAgUGxlYXNlIGluY2x1ZGUgaW5jbHVkaW5nIGEKKyUgY29tcGxldGUgZG9jdW1lbnQgaW4gZWFjaCBidWcgcmVwb3J0IHdpdGggd2hpY2ggd2UgY2FuIHJlcHJvZHVjZSB0aGUKKyUgcHJvYmxlbS4gIFBhdGNoZXMgYXJlLCBvZiBjb3Vyc2UsIGdyZWF0bHkgYXBwcmVjaWF0ZWQuCislCislIFRvIHByb2Nlc3MgYSBUZXhpbmZvIG1hbnVhbCB3aXRoIFRlWCwgaXQncyBtb3N0IHJlbGlhYmxlIHRvIHVzZSB0aGUKKyUgdGV4aTJkdmkgc2hlbGwgc2NyaXB0IHRoYXQgY29tZXMgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAgRm9yIGEgc2ltcGxlCislIG1hbnVhbCBmb28udGV4aSwgaG93ZXZlciwgeW91IGNhbiBnZXQgYXdheSB3aXRoIHRoaXM6CislICAgdGV4IGZvby50ZXhpCislICAgdGV4aW5kZXggZm9vLj8/CislICAgdGV4IGZvby50ZXhpCislICAgdGV4IGZvby50ZXhpCislICAgZHZpcHMgZm9vLmR2aSAtbyAgIyBvciB3aGF0ZXZlcjsgdGhpcyBtYWtlcyBmb28ucHMuCislIFRoZSBleHRyYSBUZVggcnVucyBnZXQgdGhlIGNyb3NzLXJlZmVyZW5jZSBpbmZvcm1hdGlvbiBjb3JyZWN0LgorJSBTb21ldGltZXMgb25lIHJ1biBhZnRlciB0ZXhpbmRleCBzdWZmaWNlcywgYW5kIHNvbWV0aW1lcyB5b3UgbmVlZCBtb3JlCislIHRoYW4gdHdvOyB0ZXhpMmR2aSBkb2VzIGl0IGFzIG1hbnkgdGltZXMgYXMgbmVjZXNzYXJ5LgorJQorJSBJdCBpcyBwb3NzaWJsZSB0byBhZGFwdCB0ZXhpbmZvLnRleCBmb3Igb3RoZXIgbGFuZ3VhZ2VzLCB0byBzb21lCislIGV4dGVudC4gIFlvdSBjYW4gZ2V0IHRoZSBleGlzdGluZyBsYW5ndWFnZS1zcGVjaWZpYyBmaWxlcyBmcm9tIHRoZQorJSBmdWxsIFRleGluZm8gZGlzdHJpYnV0aW9uLgorJQorJSBUaGUgR05VIFRleGluZm8gaG9tZSBwYWdlIGlzIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLgorCisKK1xtZXNzYWdle0xvYWRpbmcgdGV4aW5mbyBbdmVyc2lvbiBcdGV4aW5mb3ZlcnNpb25dOn0KKworJSBJZiBpbiBhIC5mbXQgZmlsZSwgcHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyCislIGFuZCB0dXJuIG9uIGFjdGl2ZSBjaGFyYWN0ZXJzIHRoYXQgd2UgY291bGRuJ3QgZG8gZWFybGllciBiZWNhdXNlCislIHRoZXkgbWlnaHQgaGF2ZSBhcHBlYXJlZCBpbiB0aGUgaW5wdXQgZmlsZSBuYW1lLgorXGV2ZXJ5am9ie1xtZXNzYWdle1tUZXhpbmZvIHZlcnNpb24gXHRleGluZm92ZXJzaW9uXX0lCisgIFxjYXRjb2RlYCs9XGFjdGl2ZSBcY2F0Y29kZWBcXz1cYWN0aXZlfQorCitcbWVzc2FnZXtCYXNpY3MsfQorXGNoYXJkZWZcb3RoZXI9MTIKKworJSBXZSBuZXZlciB3YW50IHBsYWluJ3MgXG91dGVyIGRlZmluaXRpb24gb2YgXCsgaW4gVGV4aW5mby4KKyUgRm9yIEB0ZXgsIHdlIGNhbiB1c2UgXHRhYmFsaWduLgorXGxldFwrID0gXHJlbGF4CisKKyUgU2F2ZSBzb21lIHBsYWluIHRleCBtYWNyb3Mgd2hvc2UgbmFtZXMgd2Ugd2lsbCByZWRlZmluZS4KK1xsZXRccHRleGI9XGIKK1xsZXRccHRleGJ1bGxldD1cYnVsbGV0CitcbGV0XHB0ZXhjPVxjCitcbGV0XHB0ZXhjb21tYT1cLAorXGxldFxwdGV4ZG90PVwuCitcbGV0XHB0ZXhkb3RzPVxkb3RzCitcbGV0XHB0ZXhlbmQ9XGVuZAorXGxldFxwdGV4ZXF1aXY9XGVxdWl2CitcbGV0XHB0ZXhleGNsYW09XCEKK1xsZXRccHRleGZvb3Rub3RlPVxmb290bm90ZQorXGxldFxwdGV4Z3RyPT4KK1xsZXRccHRleGhhdD1eCitcbGV0XHB0ZXhpPVxpCitcbGV0XHB0ZXhpbmRlbnQ9XGluZGVudAorXGxldFxwdGV4aW5zZXJ0PVxpbnNlcnQKK1xsZXRccHRleGxicmFjZT1ceworXGxldFxwdGV4bGVzcz08CitcbGV0XHB0ZXhuZXd3cml0ZVxuZXd3cml0ZQorXGxldFxwdGV4bm9pbmRlbnQ9XG5vaW5kZW50CitcbGV0XHB0ZXhwbHVzPSsKK1xsZXRccHRleHJicmFjZT1cfQorXGxldFxwdGV4c2xhc2g9XC8KK1xsZXRccHRleHN0YXI9XCoKK1xsZXRccHRleHQ9XHQKKworJSBJZiB0aGlzIGNoYXJhY3RlciBhcHBlYXJzIGluIGFuIGVycm9yIG1lc3NhZ2Ugb3IgaGVscCBzdHJpbmcsIGl0CislIHN0YXJ0cyBhIG5ldyBsaW5lIGluIHRoZSBvdXRwdXQuCitcbmV3bGluZWNoYXIgPSBgXl5KCisKKyUgVXNlIFRlWCAzLjAncyBcaW5wdXRsaW5lbm8gdG8gZ2V0IHRoZSBsaW5lIG51bWJlciwgZm9yIGJldHRlciBlcnJvcgorJSBtZXNzYWdlcywgYnV0IGlmIHdlJ3JlIHVzaW5nIGFuIG9sZCB2ZXJzaW9uIG9mIFRlWCwgZG9uJ3QgZG8gYW55dGhpbmcuCislCitcaWZ4XGlucHV0bGluZW5vXHRoaXNpc3VuZGVmaW5lZAorICBcbGV0XGxpbmVudW1iZXIgPSBcZW1wdHkgJSBQcmUtMy4wLgorXGVsc2UKKyAgXGRlZlxsaW5lbnVtYmVye2wuXHRoZVxpbnB1dGxpbmVubzpcc3BhY2V9CitcZmkKKworJSBTZXQgdXAgZml4ZWQgd29yZHMgZm9yIEVuZ2xpc2ggaWYgbm90IGFscmVhZHkgc2V0LgorXGlmeFxwdXR3b3JkQXBwZW5kaXhcdW5kZWZpbmVkICBcZ2RlZlxwdXR3b3JkQXBwZW5kaXh7QXBwZW5kaXh9XGZpCitcaWZ4XHB1dHdvcmRDaGFwdGVyXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmRDaGFwdGVye0NoYXB0ZXJ9XGZpCitcaWZ4XHB1dHdvcmRmaWxlXHVuZGVmaW5lZCAgICAgIFxnZGVmXHB1dHdvcmRmaWxle2ZpbGV9XGZpCitcaWZ4XHB1dHdvcmRpblx1bmRlZmluZWQgICAgICAgIFxnZGVmXHB1dHdvcmRpbntpbn1cZmkKK1xpZnhccHV0d29yZEluZGV4SXNFbXB0eVx1bmRlZmluZWQgICAgIFxnZGVmXHB1dHdvcmRJbmRleElzRW1wdHl7KEluZGV4IGlzIGVtcHR5KX1cZmkKK1xpZnhccHV0d29yZEluZGV4Tm9uZXhpc3RlbnRcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRJbmRleE5vbmV4aXN0ZW50eyhJbmRleCBpcyBub25leGlzdGVudCl9XGZpCitcaWZ4XHB1dHdvcmRJbmZvXHVuZGVmaW5lZCAgICAgIFxnZGVmXHB1dHdvcmRJbmZve0luZm99XGZpCitcaWZ4XHB1dHdvcmRJbnN0YW5jZVZhcmlhYmxlb2ZcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRJbnN0YW5jZVZhcmlhYmxlb2Z7SW5zdGFuY2UgVmFyaWFibGUgb2Z9XGZpCitcaWZ4XHB1dHdvcmRNZXRob2Rvblx1bmRlZmluZWQgIFxnZGVmXHB1dHdvcmRNZXRob2RvbntNZXRob2Qgb259XGZpCitcaWZ4XHB1dHdvcmROb1RpdGxlXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmROb1RpdGxle05vIFRpdGxlfVxmaQorXGlmeFxwdXR3b3Jkb2ZcdW5kZWZpbmVkICAgICAgICBcZ2RlZlxwdXR3b3Jkb2Z7b2Z9XGZpCitcaWZ4XHB1dHdvcmRvblx1bmRlZmluZWQgICAgICAgIFxnZGVmXHB1dHdvcmRvbntvbn1cZmkKK1xpZnhccHV0d29yZHBhZ2VcdW5kZWZpbmVkICAgICAgXGdkZWZccHV0d29yZHBhZ2V7cGFnZX1cZmkKK1xpZnhccHV0d29yZHNlY3Rpb25cdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZHNlY3Rpb257c2VjdGlvbn1cZmkKK1xpZnhccHV0d29yZFNlY3Rpb25cdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZFNlY3Rpb257U2VjdGlvbn1cZmkKK1xpZnhccHV0d29yZHNlZVx1bmRlZmluZWQgICAgICAgXGdkZWZccHV0d29yZHNlZXtzZWV9XGZpCitcaWZ4XHB1dHdvcmRTZWVcdW5kZWZpbmVkICAgICAgIFxnZGVmXHB1dHdvcmRTZWV7U2VlfVxmaQorXGlmeFxwdXR3b3JkU2hvcnRUT0NcdW5kZWZpbmVkICBcZ2RlZlxwdXR3b3JkU2hvcnRUT0N7U2hvcnQgQ29udGVudHN9XGZpCitcaWZ4XHB1dHdvcmRUT0NcdW5kZWZpbmVkICAgICAgIFxnZGVmXHB1dHdvcmRUT0N7VGFibGUgb2YgQ29udGVudHN9XGZpCislCitcaWZ4XHB1dHdvcmRNSmFuXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUphbntKYW51YXJ5fVxmaQorXGlmeFxwdXR3b3JkTUZlYlx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1GZWJ7RmVicnVhcnl9XGZpCitcaWZ4XHB1dHdvcmRNTWFyXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTU1hcntNYXJjaH1cZmkKK1xpZnhccHV0d29yZE1BcHJcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNQXBye0FwcmlsfVxmaQorXGlmeFxwdXR3b3JkTU1heVx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1NYXl7TWF5fVxmaQorXGlmeFxwdXR3b3JkTUp1blx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1KdW57SnVuZX1cZmkKK1xpZnhccHV0d29yZE1KdWxcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNSnVse0p1bHl9XGZpCitcaWZ4XHB1dHdvcmRNQXVnXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUF1Z3tBdWd1c3R9XGZpCitcaWZ4XHB1dHdvcmRNU2VwXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTVNlcHtTZXB0ZW1iZXJ9XGZpCitcaWZ4XHB1dHdvcmRNT2N0XHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTU9jdHtPY3RvYmVyfVxmaQorXGlmeFxwdXR3b3JkTU5vdlx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1Ob3Z7Tm92ZW1iZXJ9XGZpCitcaWZ4XHB1dHdvcmRNRGVjXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTURlY3tEZWNlbWJlcn1cZmkKKyUKK1xpZnhccHV0d29yZERlZm1hY1x1bmRlZmluZWQgICAgXGdkZWZccHV0d29yZERlZm1hY3tNYWNyb31cZmkKK1xpZnhccHV0d29yZERlZnNwZWNcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZERlZnNwZWN7U3BlY2lhbCBGb3JtfVxmaQorXGlmeFxwdXR3b3JkRGVmdmFyXHVuZGVmaW5lZCAgICBcZ2RlZlxwdXR3b3JkRGVmdmFye1ZhcmlhYmxlfVxmaQorXGlmeFxwdXR3b3JkRGVmb3B0XHVuZGVmaW5lZCAgICBcZ2RlZlxwdXR3b3JkRGVmb3B0e1VzZXIgT3B0aW9ufVxmaQorXGlmeFxwdXR3b3JkRGVmZnVuY1x1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkRGVmZnVuY3tGdW5jdGlvbn1cZmkKKworJSBTaW5jZSB0aGUgY2F0ZWdvcnkgb2Ygc3BhY2UgaXMgbm90IGtub3duLCB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwuCitcY2hhcmRlZlxzcGFjZWNhdCA9IDEwCitcZGVmXHNwYWNlaXNzcGFjZXtcY2F0Y29kZWBcID1cc3BhY2VjYXR9CisKKyUgSWdub3JlIGEgdG9rZW4uCislCitcZGVmXGdvYmJsZSMxe30KKworJSBUaGUgZm9sbG93aW5nIGlzIHVzZWQgaW5zaWRlIHNldmVyYWwgXGVkZWYncy4KK1xkZWZcbWFrZWNzbmFtZSMxe1xleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWUjMVxlbmRjc25hbWV9CisKKyUgSHlwaGVuYXRpb24gZml4ZXMuCitcaHlwaGVuYXRpb257CisgIEZsb3ItaS1kYSBHaG9zdC1zY3JpcHQgR2hvc3QtdmlldyBNYWMtT1MgUG9zdC1TY3JpcHQKKyAgYXAtcGVuLWRpeCBiaXQtbWFwIGJpdC1tYXBzCisgIGRhdGEtYmFzZSBkYXRhLWJhc2VzIGVzaGVsbCBmYWxsLWluZyBoYWxmLXdheSBsb25nLWVzdCBtYW4tdS1zY3JpcHQKKyAgbWFuLXUtc2NyaXB0cyBtaW5pLWJ1Zi1mZXIgbWluaS1idWYtZmVycyBvdmVyLXZpZXcgcGFyLWEtZGlnbQorICBwYXItYS1kaWdtcyByYXRoLWVyIHJlYy10YW4tZ3UtbGFyIHJvLWJvdC1pY3Mgc2UtdmVyZS1seSBzZXQtdXAgc3BhLWNlcworICBzcGVsbC1pbmcgc3BlbGwtaW5ncworICBzdGFuZC1hbG9uZSBzdHJvbmctZXN0IHRpbWUtc3RhbXAgdGltZS1zdGFtcHMgd2hpY2gtZXZlciB3aGl0ZS1zcGFjZQorICB3aWRlLXNwcmVhZCB3cmFwLWFyb3VuZAorfQorCislIE1hcmdpbiB0byBhZGQgdG8gcmlnaHQgb2YgZXZlbiBwYWdlcywgdG8gbGVmdCBvZiBvZGQgcGFnZXMuCitcbmV3ZGltZW5cYmluZGluZ29mZnNldAorXG5ld2RpbWVuXG5vcm1hbG9mZnNldAorXG5ld2RpbWVuXHBhZ2V3aWR0aCBcbmV3ZGltZW5ccGFnZWhlaWdodAorCislIEZvciBhIGZpbmFsIGNvcHksIHRha2Ugb3V0IHRoZSByZWN0YW5nbGVzCislIHRoYXQgbWFyayBvdmVyZnVsbCBib3hlcyAoaW4gY2FzZSB5b3UgaGF2ZSBkZWNpZGVkCislIHRoYXQgdGhlIHRleHQgbG9va3Mgb2sgZXZlbiB0aG91Z2ggaXQgcGFzc2VzIHRoZSBtYXJnaW4pLgorJQorXGRlZlxmaW5hbG91dHtcb3ZlcmZ1bGxydWxlPTBwdH0KKworJSBAfCBpbnNlcnRzIGEgY2hhbmdlYmFyIHRvIHRoZSBsZWZ0IG9mIHRoZSBjdXJyZW50IGxpbmUuICBJdCBzaG91bGQKKyUgc3Vycm91bmQgYW55IGNoYW5nZWQgdGV4dC4gIFRoaXMgYXBwcm9hY2ggZG9lcyAqbm90KiB3b3JrIGlmIHRoZQorJSBjaGFuZ2Ugc3BhbnMgbW9yZSB0aGFuIHR3byBsaW5lcyBvZiBvdXRwdXQuICBUbyBoYW5kbGUgdGhhdCwgd2Ugd291bGQKKyUgaGF2ZSBhZG9wdCBhIG11Y2ggbW9yZSBkaWZmaWN1bHQgYXBwcm9hY2ggKHB1dHRpbmcgbWFya3MgaW50byB0aGUgbWFpbgorJSB2ZXJ0aWNhbCBsaXN0IGZvciB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgZWFjaCBjaGFuZ2UpLgorJQorXGRlZlx8eyUKKyAgJSBcdmFkanVzdCBjYW4gb25seSBiZSB1c2VkIGluIGhvcml6b250YWwgbW9kZS4KKyAgXGxlYXZldm1vZGUKKyAgJQorICAlIEFwcGVuZCB0aGlzIHZlcnRpY2FsIG1vZGUgbWF0ZXJpYWwgYWZ0ZXIgdGhlIGN1cnJlbnQgbGluZSBpbiB0aGUgb3V0cHV0LgorICBcdmFkanVzdHslCisgICAgJSBXZSB3YW50IHRvIGluc2VydCBhIHJ1bGUgd2l0aCB0aGUgaGVpZ2h0IGFuZCBkZXB0aCBvZiB0aGUgY3VycmVudAorICAgICUgbGVhZGluZzsgdGhhdCBpcyBleGFjdGx5IHdoYXQgXHN0cnV0Ym94IGlzIHN1cHBvc2VkIHRvIHJlY29yZC4KKyAgICBcdnNraXAtXGJhc2VsaW5lc2tpcAorICAgICUKKyAgICAlIFx2YWRqdXN0LWl0ZW1zIGFyZSBpbnNlcnRlZCBhdCB0aGUgbGVmdCBlZGdlIG9mIHRoZSB0eXBlLiAgU28KKyAgICAlIHRoZSBcbGxhcCBoZXJlIG1vdmVzIG91dCBpbnRvIHRoZSBsZWZ0LWhhbmQgbWFyZ2luLgorICAgIFxsbGFweyUKKyAgICAgICUKKyAgICAgICUgRm9yIGEgdGhpY2tlciBvciB0aGlubmVyIGJhciwgY2hhbmdlIHRoZSBgMXB0Jy4KKyAgICAgIFx2cnVsZSBoZWlnaHRcYmFzZWxpbmVza2lwIHdpZHRoMXB0CisgICAgICAlCisgICAgICAlIFRoaXMgaXMgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGJhciBhbmQgdGhlIHRleHQuCisgICAgICBcaHNraXAgMTJwdAorICAgIH0lCisgIH0lCit9CisKKyUgU29tZXRpbWVzIGl0IGlzIGNvbnZlbmllbnQgdG8gaGF2ZSBldmVyeXRoaW5nIGluIHRoZSB0cmFuc2NyaXB0IGZpbGUKKyUgYW5kIG5vdGhpbmcgb24gdGhlIHRlcm1pbmFsLiAgV2UgZG9uJ3QganVzdCBjYWxsIFx0cmFjaW5nYWxsIGhlcmUsCislIHNpbmNlIHRoYXQgcHJvZHVjZXMgc29tZSB1c2VsZXNzIG91dHB1dCBvbiB0aGUgdGVybWluYWwuICBXZSBhbHNvIG1ha2UKKyUgc29tZSBlZmZvcnQgdG8gb3JkZXIgdGhlIHRyYWNpbmcgY29tbWFuZHMgdG8gcmVkdWNlIG91dHB1dCBpbiB0aGUgbG9nCislIGZpbGU7IGNmLiB0cmFjZS5zdHkgaW4gTGFUZVguCislCitcZGVmXGdsb2dnaW5nYWxse1xiZWdpbmdyb3VwIFxnbG9iYWxkZWZzID0gMSBcbG9nZ2luZ2FsbCBcZW5kZ3JvdXB9JQorXGRlZlxsb2dnaW5nYWxseyUKKyAgXHRyYWNpbmdzdGF0czIKKyAgXHRyYWNpbmdwYWdlczEKKyAgXHRyYWNpbmdsb3N0Y2hhcnMyICAlIDIgZ2l2ZXMgdXMgbW9yZSBpbiBldGV4CisgIFx0cmFjaW5ncGFyYWdyYXBoczEKKyAgXHRyYWNpbmdvdXRwdXQxCisgIFx0cmFjaW5nbWFjcm9zMgorICBcdHJhY2luZ3Jlc3RvcmVzMQorICBcc2hvd2JveGJyZWFkdGhcbWF4ZGltZW4gXHNob3dib3hkZXB0aFxtYXhkaW1lbgorICBcaWZ4XGVUZVh2ZXJzaW9uXHVuZGVmaW5lZFxlbHNlICUgZXRleCBnaXZlcyB1cyBtb3JlIGxvZ2dpbmcKKyAgICBcdHJhY2luZ3NjYW50b2tlbnMxCisgICAgXHRyYWNpbmdpZnMxCisgICAgXHRyYWNpbmdncm91cHMxCisgICAgXHRyYWNpbmduZXN0aW5nMgorICAgIFx0cmFjaW5nYXNzaWduczEKKyAgXGZpCisgIFx0cmFjaW5nY29tbWFuZHMzICAlIDMgZ2l2ZXMgdXMgbW9yZSBpbiBldGV4CisgIFxlcnJvcmNvbnRleHRsaW5lczE2Cit9JQorCislIGFkZCBjaGVjayBmb3IgXGxhc3RwZW5hbHR5IHRvIHBsYWluJ3MgZGVmaW5pdGlvbnMuICBJZiB0aGUgbGFzdCB0aGluZworJSB3ZSBkaWQgd2FzIGEgXG5vYnJlYWssIHdlIGRvbid0IHdhbnQgdG8gaW5zZXJ0IG1vcmUgc3BhY2UuCislCitcZGVmXHNtYWxsYnJlYWt7XGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwXHBhclxpZmRpbVxsYXN0c2tpcDxcc21hbGxza2lwYW1vdW50CisgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTUwXHNtYWxsc2tpcFxmaVxmaX0KK1xkZWZcbWVkYnJlYWt7XGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwXHBhclxpZmRpbVxsYXN0c2tpcDxcbWVkc2tpcGFtb3VudAorICBccmVtb3ZlbGFzdHNraXBccGVuYWx0eS0xMDBcbWVkc2tpcFxmaVxmaX0KK1xkZWZcYmlnYnJlYWt7XGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwXHBhclxpZmRpbVxsYXN0c2tpcDxcYmlnc2tpcGFtb3VudAorICBccmVtb3ZlbGFzdHNraXBccGVuYWx0eS0yMDBcYmlnc2tpcFxmaVxmaX0KKworJSBGb3IgQGNyb3BtYXJrcyBjb21tYW5kLgorJSBEbyBAY3JvcG1hcmtzIHRvIGdldCBjcm9wIG1hcmtzLgorJQorXG5ld2lmXGlmY3JvcG1hcmtzCitcbGV0XGNyb3BtYXJrcyA9IFxjcm9wbWFya3N0cnVlCislCislIERpbWVuc2lvbnMgdG8gYWRkIGNyb3BtYXJrcyBhdCBjb3JuZXJzLgorJSBBZGRlZCBieSBQLiBBLiBNYWNLYXksIDEyIE5vdi4gMTk4NgorJQorXG5ld2RpbWVuXG91dGVyaHNpemUgXG5ld2RpbWVuXG91dGVydnNpemUgJSBzZXQgYnkgdGhlIHBhcGVyIHNpemUgcm91dGluZXMKK1xuZXdkaW1lblxjb3JuZXJsb25nICBcY29ybmVybG9uZz0xcGMKK1xuZXdkaW1lblxjb3JuZXJ0aGljayBcY29ybmVydGhpY2s9LjNwdAorXG5ld2RpbWVuXHRvcGFuZGJvdHRvbW1hcmdpbiBcdG9wYW5kYm90dG9tbWFyZ2luPS43NWluCisKKyUgTWFpbiBvdXRwdXQgcm91dGluZS4KK1xjaGFyZGVmXFBBR0UgPSAyNTUKK1xvdXRwdXQgPSB7XG9uZXBhZ2VvdXR7XHBhZ2Vjb250ZW50c1xQQUdFfX0KKworXG5ld2JveFxoZWFkbGluZWJveAorXG5ld2JveFxmb290bGluZWJveAorCislIFxvbmVwYWdlb3V0IHRha2VzIGEgdmJveCBhcyBhbiBhcmd1bWVudC4gIE5vdGUgdGhhdCBccGFnZWNvbnRlbnRzCislIGRvZXMgaW5zZXJ0aW9ucywgYnV0IHlvdSBoYXZlIHRvIGNhbGwgaXQgeW91cnNlbGYuCitcZGVmXG9uZXBhZ2VvdXQjMXslCisgIFxpZmNyb3BtYXJrcyBcaG9mZnNldD0wcHQgXGVsc2UgXGhvZmZzZXQ9XG5vcm1hbG9mZnNldCBcZmkKKyAgJQorICBcaWZvZGRccGFnZW5vICBcYWR2YW5jZVxob2Zmc2V0IGJ5IFxiaW5kaW5nb2Zmc2V0CisgIFxlbHNlIFxhZHZhbmNlXGhvZmZzZXQgYnkgLVxiaW5kaW5nb2Zmc2V0XGZpCisgICUKKyAgJSBEbyB0aGlzIG91dHNpZGUgb2YgdGhlIFxzaGlwb3V0IHNvIEBjb2RlIGV0Yy4gd2lsbCBiZSBleHBhbmRlZCBpbgorICAlIHRoZSBoZWFkbGluZSBhcyB0aGV5IHNob3VsZCBiZSwgbm90IHRha2VuIGxpdGVyYWxseSAob3V0cHV0dGluZyAnJ2NvZGUpLgorICBcc2V0Ym94XGhlYWRsaW5lYm94ID0gXHZib3h7XGxldFxoc2l6ZT1ccGFnZXdpZHRoIFxtYWtlaGVhZGxpbmV9JQorICBcc2V0Ym94XGZvb3RsaW5lYm94ID0gXHZib3h7XGxldFxoc2l6ZT1ccGFnZXdpZHRoIFxtYWtlZm9vdGxpbmV9JQorICAlCisgIHslCisgICAgJSBIYXZlIHRvIGRvIHRoaXMgc3R1ZmYgb3V0c2lkZSB0aGUgXHNoaXBvdXQgYmVjYXVzZSB3ZSB3YW50IGl0IHRvCisgICAgJSB0YWtlIGVmZmVjdCBpbiBcd3JpdGUncywgeWV0IHRoZSBncm91cCBkZWZpbmVkIGJ5IHRoZSBcdmJveCBlbmRzCisgICAgJSBiZWZvcmUgdGhlIFxzaGlwb3V0IHJ1bnMuCisgICAgJQorICAgIFxpbmRleGR1bW1pZXMgICAgICAgICAlIGRvbid0IGV4cGFuZCBjb21tYW5kcyBpbiB0aGUgb3V0cHV0LgorICAgIFxub3JtYWx0dXJub2ZmYWN0aXZlICAlIFwgaW4gaW5kZXggZW50cmllcyBtdXN0IG5vdCBzdGF5IFwsIGUuZy4sIGlmCisgICAgICAgICAgICAgICAlIHRoZSBwYWdlIGJyZWFrIGhhcHBlbnMgdG8gYmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBleGFtcGxlLgorICAgICAgICAgICAgICAgJSBXZSBkb24ndCB3YW50IC52ciAob3Igd2hhdGV2ZXIpIGVudHJpZXMgbGlrZSB0aGlzOgorICAgICAgICAgICAgICAgJSBcZW50cnl7e1x0dCBcaW5kZXhiYWNrc2xhc2ggfWFjcm9ueW19ezMyfXtcY29kZSB7XGFjcm9ueW19fQorICAgICAgICAgICAgICAgJSAiXGFjcm9ueW0iIHdvbid0IHdvcmsgd2hlbiBpdCdzIHJlYWQgYmFjayBpbjsKKyAgICAgICAgICAgICAgICUgaXQgbmVlZHMgdG8gYmUgCisgICAgICAgICAgICAgICAlIHtcY29kZSB7e1x0dCBcYmFja3NsYXNoY3VyZm9udCB9YWNyb255bX0KKyAgICBcc2hpcG91dFx2Ym94eyUKKyAgICAgICUgRG8gdGhpcyBlYXJseSBzbyBwZGYgcmVmZXJlbmNlcyBnbyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYWdlLgorICAgICAgXGlmcGRmbWFrZXBhZ2VkZXN0IFxwZGZkZXN0IG5hbWV7XHRoZVxwYWdlbm99IHh5elxmaQorICAgICAgJQorICAgICAgXGlmY3JvcG1hcmtzIFx2Ym94IHRvIFxvdXRlcnZzaXplXGJncm91cAorICAgICAgICBcaHNpemUgPSBcb3V0ZXJoc2l6ZQorICAgICAgICBcdnNraXAtXHRvcGFuZGJvdHRvbW1hcmdpbgorICAgICAgICBcdnRvcCB0bzBwdHslCisgICAgICAgICAgXGxpbmV7XGV3dG9wXGhmaWxcZXd0b3B9JQorICAgICAgICAgIFxub2ludGVybGluZXNraXAKKyAgICAgICAgICBcbGluZXslCisgICAgICAgICAgICBcdmJveHtcbW92ZWxlZnRcY29ybmVydGhpY2tcbnN0b3B9JQorICAgICAgICAgICAgXGhmaWxsCisgICAgICAgICAgICBcdmJveHtcbW92ZXJpZ2h0XGNvcm5lcnRoaWNrXG5zdG9wfSUKKyAgICAgICAgICB9JQorICAgICAgICAgIFx2c3N9JQorICAgICAgICBcdnNraXBcdG9wYW5kYm90dG9tbWFyZ2luCisgICAgICAgIFxsaW5lXGJncm91cAorICAgICAgICAgIFxoZmlsICUgY2VudGVyIHRoZSBwYWdlIHdpdGhpbiB0aGUgb3V0ZXIgKHBhZ2UpIGhzaXplLgorICAgICAgICAgIFxpZm9kZFxwYWdlbm9caHNraXBcYmluZGluZ29mZnNldFxmaQorICAgICAgICAgIFx2Ym94XGJncm91cAorICAgICAgXGZpCisgICAgICAlCisgICAgICBcdW52Ym94XGhlYWRsaW5lYm94CisgICAgICBccGFnZWJvZHl7IzF9JQorICAgICAgXGlmZGltXGh0XGZvb3RsaW5lYm94ID4gMHB0CisgICAgICAgICUgT25seSBsZWF2ZSB0aGlzIHNwYWNlIGlmIHRoZSBmb290bGluZSBpcyBub25lbXB0eS4KKyAgICAgICAgJSAoV2UgbGVzc2VuZWQgXHZzaXplIGZvciBpdCBpbiBcb2RkZm9vdGluZ3h4eC4pCisgICAgICAgICUgVGhlIFxiYXNlbGluZXNraXA9MjRwdCBpbiBwbGFpbidzIFxtYWtlZm9vdGxpbmUgaGFzIG5vIGVmZmVjdC4KKyAgICAgICAgXHZza2lwIDJcYmFzZWxpbmVza2lwCisgICAgICAgIFx1bnZib3hcZm9vdGxpbmVib3gKKyAgICAgIFxmaQorICAgICAgJQorICAgICAgXGlmY3JvcG1hcmtzCisgICAgICAgICAgXGVncm91cCAlIGVuZCBvZiBcdmJveFxiZ3JvdXAKKyAgICAgICAgXGhmaWxcZWdyb3VwICUgZW5kIG9mIChjZW50ZXJpbmcpIFxsaW5lXGJncm91cAorICAgICAgICBcdnNraXBcdG9wYW5kYm90dG9tbWFyZ2luIHBsdXMxZmlsbCBtaW51czFmaWxsCisgICAgICAgIFxib3htYXhkZXB0aCA9IFxjb3JuZXJ0aGljaworICAgICAgICBcdmJveCB0bzBwdHtcdnNzCisgICAgICAgICAgXGxpbmV7JQorICAgICAgICAgICAgXHZib3h7XG1vdmVsZWZ0XGNvcm5lcnRoaWNrXG5zYm90fSUKKyAgICAgICAgICAgIFxoZmlsbAorICAgICAgICAgICAgXHZib3h7XG1vdmVyaWdodFxjb3JuZXJ0aGlja1xuc2JvdH0lCisgICAgICAgICAgfSUKKyAgICAgICAgICBcbm9pbnRlcmxpbmVza2lwCisgICAgICAgICAgXGxpbmV7XGV3Ym90XGhmaWxcZXdib3R9JQorICAgICAgICB9JQorICAgICAgXGVncm91cCAlIFx2Ym94IGZyb20gZmlyc3QgY3JvcG1hcmtzIGNsYXVzZQorICAgICAgXGZpCisgICAgfSUgZW5kIG9mIFxzaGlwb3V0XHZib3gKKyAgfSUgZW5kIG9mIGdyb3VwIHdpdGggXGluZGV4ZHVtbWllcworICBcYWR2YW5jZXBhZ2VubworICBcaWZudW1cb3V0cHV0cGVuYWx0eT4tMjAwMDAgXGVsc2VcZG9zdXBlcmVqZWN0XGZpCit9CisKK1xuZXdpbnNlcnRcbWFyZ2luIFxkaW1lblxtYXJnaW49XG1heGRpbWVuCisKK1xkZWZccGFnZWJvZHkjMXtcdmJveCB0b1xwYWdlaGVpZ2h0e1xib3htYXhkZXB0aD1cbWF4ZGVwdGggIzF9fQore1xjYXRjb2RlYFxAID0xMQorXGdkZWZccGFnZWNvbnRlbnRzIzF7XGlmdm9pZFx0b3BpbnNcZWxzZVx1bnZib3hcdG9waW5zXGZpCislIG1hcmdpbmFsIGhhY2tzLCBqdWhhQHZpaXNhLnV1Y3AgKEp1aGEgVGFrYWxhKQorXGlmdm9pZFxtYXJnaW5cZWxzZSAlIG1hcmdpbmFsIGluZm8gaXMgcHJlc2VudAorICBccmxhcHtca2Vyblxoc2l6ZVx2Ym94IHRvXHpAe1xrZXJuMXB0XGJveFxtYXJnaW4gXHZzc319XGZpCitcZGltZW5APVxkcCMxIFx1bnZib3gjMQorXGlmdm9pZFxmb290aW5zXGVsc2VcdnNraXBcc2tpcFxmb290aW5zXGZvb3Rub3RlcnVsZSBcdW52Ym94XGZvb3RpbnNcZmkKK1xpZnJAZ2dlZGJvdHRvbSBca2Vybi1cZGltZW5AIFx2ZmlsIFxmaX0KK30KKworJSBIZXJlIGFyZSB0aGUgcnVsZXMgZm9yIHRoZSBjcm9wbWFya3MuICBOb3RlIHRoYXQgdGhleSBhcmUKKyUgb2Zmc2V0IHNvIHRoYXQgdGhlIHNwYWNlIGJldHdlZW4gdGhlbSBpcyB0cnVseSBcb3V0ZXJoc2l6ZSBvciBcb3V0ZXJ2c2l6ZQorJSAoUC4gQS4gTWFjS2F5LCAxMiBOb3ZlbWJlciwgMTk4NikKKyUKK1xkZWZcZXd0b3B7XHZydWxlIGhlaWdodFxjb3JuZXJ0aGljayBkZXB0aDBwdCB3aWR0aFxjb3JuZXJsb25nfQorXGRlZlxuc3RvcHtcdmJveAorICB7XGhydWxlIGhlaWdodFxjb3JuZXJ0aGljayBkZXB0aFxjb3JuZXJsb25nIHdpZHRoXGNvcm5lcnRoaWNrfX0KK1xkZWZcZXdib3R7XHZydWxlIGhlaWdodDBwdCBkZXB0aFxjb3JuZXJ0aGljayB3aWR0aFxjb3JuZXJsb25nfQorXGRlZlxuc2JvdHtcdmJveAorICB7XGhydWxlIGhlaWdodFxjb3JuZXJsb25nIGRlcHRoXGNvcm5lcnRoaWNrIHdpZHRoXGNvcm5lcnRoaWNrfX0KKworJSBQYXJzZSBhbiBhcmd1bWVudCwgdGhlbiBwYXNzIGl0IHRvICMxLiAgVGhlIGFyZ3VtZW50IGlzIHRoZSByZXN0IG9mCislIHRoZSBpbnB1dCBsaW5lIChleGNlcHQgd2UgcmVtb3ZlIGEgdHJhaWxpbmcgY29tbWVudCkuICAjMSBzaG91bGQgYmUgYQorJSBtYWNybyB3aGljaCBleHBlY3RzIGFuIG9yZGluYXJ5IHVuZGVsaW1pdGVkIFRlWCBhcmd1bWVudC4KKyUKK1xkZWZccGFyc2Vhcmd7XHBhcnNlYXJndXNpbmd7fX0KK1xkZWZccGFyc2Vhcmd1c2luZyMxIzJ7JQorICBcZGVmXG5leHR7IzJ9JQorICBcYmVnaW5ncm91cAorICAgIFxvYmV5bGluZXMKKyAgICBcc3BhY2Vpc3NwYWNlCisgICAgIzElCisgICAgXHBhcnNlYXJnbGluZVxlbXB0eSUgSW5zZXJ0IHRoZSBcZW1wdHkgdG9rZW4sIHNlZSBcZmluaXNocGFyc2VhcmcgYmVsb3cuCit9CisKK3tcb2JleWxpbmVzICUKKyAgXGdkZWZccGFyc2VhcmdsaW5lIzFeXk17JQorICAgIFxlbmRncm91cCAlIEVuZCBvZiB0aGUgZ3JvdXAgc3RhcnRlZCBpbiBccGFyc2VhcmcuCisgICAgXGFyZ3JlbW92ZWNvbW1lbnQgIzFcY29tbWVudFxBcmdUZXJtJQorICB9JQorfQorCislIEZpcnN0IHJlbW92ZSBhbnkgQGNvbW1lbnQsIHRoZW4gYW55IEBjIGNvbW1lbnQuCitcZGVmXGFyZ3JlbW92ZWNvbW1lbnQjMVxjb21tZW50IzJcQXJnVGVybXtcYXJncmVtb3ZlYyAjMVxjXEFyZ1Rlcm19CitcZGVmXGFyZ3JlbW92ZWMjMVxjIzJcQXJnVGVybXtcYXJnY2hlY2tzcGFjZXMjMVxeXk1cQXJnVGVybX0KKworJSBFYWNoIG9jY3VyZW5jZSBvZiBgXF5eTScgb3IgYDxzcGFjZT5cXl5NJyBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFjZS4KKyUKKyUgXGFyZ3JlbW92ZWMgbWlnaHQgbGVhdmUgdXMgd2l0aCB0cmFpbGluZyBzcGFjZSwgZS5nLiwKKyUgICAgQGVuZCBpdGVtaXplICBAYyBmb28KKyUgVGhpcyBzcGFjZSB0b2tlbiB1bmRlcmdvZXMgdGhlIHNhbWUgcHJvY2VkdXJlIGFuZCBpcyBldmVudHVhbGx5IHJlbW92ZWQKKyUgYnkgXGZpbmlzaHBhcnNlYXJnLgorJQorXGRlZlxhcmdjaGVja3NwYWNlcyMxXF5eTXtcYXJnY2hlY2tzcGFjZXNYIzFcXl5NIFxeXk19CitcZGVmXGFyZ2NoZWNrc3BhY2VzWCMxIFxeXk17XGFyZ2NoZWNrc3BhY2VzWSMxXF5eTX0KK1xkZWZcYXJnY2hlY2tzcGFjZXNZIzFcXl5NIzJcXl5NIzNcQXJnVGVybXslCisgIFxkZWZcdGVtcHsjM30lCisgIFxpZnhcdGVtcFxlbXB0eQorICAgICUgV2UgY2Fubm90IHVzZSBcbmV4dCBoZXJlLCBhcyBpdCBob2xkcyB0aGUgbWFjcm8gdG8gcnVuOworICAgICUgdGh1cyB3ZSByZXVzZSBcdGVtcC4KKyAgICBcbGV0XHRlbXBcZmluaXNocGFyc2VhcmcKKyAgXGVsc2UKKyAgICBcbGV0XHRlbXBcYXJnY2hlY2tzcGFjZXMKKyAgXGZpCisgICUgUHV0IHRoZSBzcGFjZSB0b2tlbiBpbjoKKyAgXHRlbXAjMSAjM1xBcmdUZXJtCit9CisKKyUgSWYgYSBfZGVsaW1pdGVkXyBhcmd1bWVudCBpcyBlbmNsb3NlZCBpbiBicmFjZXMsIHRoZXkgZ2V0IHN0cmlwcGVkOyBzbworJSB0byBnZXQgX2V4YWN0bHlfIHRoZSByZXN0IG9mIHRoZSBsaW5lLCB3ZSBoYWQgdG8gcHJldmVudCBzdWNoIHNpdHVhdGlvbi4KKyUgV2UgcHJlcGVuZGVkIGFuIFxlbXB0eSB0b2tlbiBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgYW5kIHdlIGV4cGFuZCBpdCBub3csCislIGp1c3QgYmVmb3JlIHBhc3NpbmcgdGhlIGNvbnRyb2wgdG8gXG5leHQuCislIChTaW1pbGFyaWx5LCB3ZSBoYXZlIHRvIHRoaW5rIGFib3V0ICMzIG9mIFxhcmdjaGVja3NwYWNlc1kgYWJvdmU6IGl0IGlzCislIGVpdGhlciB0aGUgbnVsbCBzdHJpbmcsIG9yIGl0IGVuZHMgd2l0aCBcXl5NLS0tdGh1cyB0aGVyZSBpcyBubyBkYW5nZXIKKyUgdGhhdCBhIHBhaXIgb2YgYnJhY2VzIHdvdWxkIGJlIHN0cmlwcGVkLgorJQorJSBCdXQgZmlyc3QsIHdlIGhhdmUgdG8gcmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZSB0b2tlbi4KKyUKK1xkZWZcZmluaXNocGFyc2VhcmcjMSBcQXJnVGVybXtcZXhwYW5kYWZ0ZXJcbmV4dFxleHBhbmRhZnRlcnsjMX19CisKKyUgXHBhcnNlYXJnZGVmXGZvb3suLi59CislCWlzIHJvdWdobHkgZXF1aXZhbGVudCB0bworJSBcZGVmXGZvb3tccGFyc2VhcmdcWGZvb30KKyUgXGRlZlxYZm9vIzF7Li4ufQorJQorJSBBY3R1YWxseSwgSSB1c2UgXGNzbmFtZVxzdHJpbmdcZm9vXGVuZGNzbmFtZSwgaWUuIFxcZm9vLCBhcyBpdCBpcyBteQorJSBmYXZvdXJpdGUgVGVYIHRyaWNrLiAgLS1rYXNhbCwgMTZub3YwMworCitcZGVmXHBhcnNlYXJnZGVmIzF7JQorICBcZXhwYW5kYWZ0ZXIgXGRvcGFyc2VhcmdkZWYgXGNzbmFtZVxzdHJpbmcjMVxlbmRjc25hbWUgIzElCit9CitcZGVmXGRvcGFyc2VhcmdkZWYjMSMyeyUKKyAgXGRlZiMye1xwYXJzZWFyZyMxfSUKKyAgXGRlZiMxIyMxJQorfQorCislIFNldmVyYWwgdXRpbGl0eSBkZWZpbml0aW9ucyB3aXRoIGFjdGl2ZSBzcGFjZToKK3sKKyAgXG9iZXlzcGFjZXMKKyAgXGdkZWZcb2JleWVkc3BhY2V7IH0KKworICAlIE1ha2UgZWFjaCBzcGFjZSBjaGFyYWN0ZXIgaW4gdGhlIGlucHV0IHByb2R1Y2UgYSBub3JtYWwgaW50ZXJ3b3JkCisgICUgc3BhY2UgaW4gdGhlIG91dHB1dC4gIERvbid0IGFsbG93IGEgbGluZSBicmVhayBhdCB0aGlzIHNwYWNlLCBhcyB0aGlzCisgICUgaXMgdXNlZCBvbmx5IGluIGVudmlyb25tZW50cyBsaWtlIEBleGFtcGxlLCB3aGVyZSBlYWNoIGxpbmUgb2YgaW5wdXQKKyAgJSBzaG91bGQgcHJvZHVjZSBhIGxpbmUgb2Ygb3V0cHV0IGFueXdheS4KKyAgJQorICBcZ2RlZlxzZXBzcGFjZXN7XG9iZXlzcGFjZXNcbGV0ID1cdGllfQorCisgICUgSWYgYW4gaW5kZXggY29tbWFuZCBpcyB1c2VkIGluIGFuIEBleGFtcGxlIGVudmlyb25tZW50LCBhbnkgc3BhY2VzCisgICUgdGhlcmVpbiBzaG91bGQgYmVjb21lIHJlZ3VsYXIgc3BhY2VzIGluIHRoZSByYXcgaW5kZXggZmlsZSwgbm90IHRoZQorICAlIGV4cGFuc2lvbiBvZiBcdGllIChcbGVhdmV2bW9kZSBccGVuYWx0eSBcQE0gXCApLgorICBcZ2RlZlx1bnNlcHNwYWNlc3tcbGV0ID1cc3BhY2V9Cit9CisKKworXGRlZlxmbHVzaGNye1xpZnhccGFyXGxpc3BwYXIgXGRlZlxuZXh0IyMxe31cZWxzZSBcbGV0XG5leHQ9XHJlbGF4IFxmaSBcbmV4dH0KKworJSBEZWZpbmUgdGhlIGZyYW1ld29yayBmb3IgZW52aXJvbm1lbnRzIGluIHRleGluZm8udGV4LiAgSXQncyB1c2VkIGxpa2UgdGhpczoKKyUKKyUgICBcZW52ZGVmXGZvb3suLi59CislICAgXGRlZlxFZm9vey4uLn0KKyUKKyUgSXQncyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgXGVudmRlZiB0byBpbnNlcnQgXGJlZ2luZ3JvdXAgYmVmb3JlIHRoZQorJSBhY3R1YWwgYm9keTsgQGVuZCBjbG9zZXMgdGhlIGdyb3VwIGFmdGVyIGNhbGxpbmcgXEVmb28uICBcZW52ZGVmIGFsc28KKyUgZGVmaW5lcyBcdGhpc2Vudiwgc28gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMga25vd247IEBlbmQgY2hlY2tzCislIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IG5hbWUgbWF0Y2hlcy4gIFRoZSBcY2hlY2tlbnYgbWFjcm8gY2FuIGFsc28gYmUKKyUgdXNlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIHRoZSBvbmUgZXhwZWN0ZWQuCislCislIE5vbi1mYWxzZSBjb25kaXRpb25hbHMgKEBpZnRleCwgQGlmc2V0KSBkb24ndCBmaXQgaW50byB0aGlzLCBzbyB0aGV5CislIGFyZSBub3QgdHJlYXRlZCBhcyBlbnZpcm9tZW50czsgdGhleSBkb24ndCBvcGVuIGEgZ3JvdXAuICAoVGhlCislIGltcGxlbWVudGF0aW9uIG9mIEBlbmQgdGFrZXMgY2FyZSBub3QgdG8gY2FsbCBcZW5kZ3JvdXAgaW4gdGhpcworJSBzcGVjaWFsIGNhc2UuKQorCisKKyUgQXQgcnVudGltZSwgZW52aXJvbm1lbnRzIHN0YXJ0IHdpdGggdGhpczoKK1xkZWZcc3RhcnRlbnZpcm9ubWVudCMxe1xiZWdpbmdyb3VwXGRlZlx0aGlzZW52eyMxfX0KKyUgaW5pdGlhbGl6ZQorXGxldFx0aGlzZW52XGVtcHR5CisKKyUgLi4uIGJ1dCB0aGV5IGdldCBkZWZpbmVkIHZpYSBgYFxlbnZkZWZcZm9vey4uLn0nJzoKK1xsb25nXGRlZlxlbnZkZWYjMSMye1xkZWYjMXtcc3RhcnRlbnZpcm9ubWVudCMxIzJ9fQorXGRlZlxlbnZwYXJzZWFyZ2RlZiMxIzJ7XHBhcnNlYXJnZGVmIzF7XHN0YXJ0ZW52aXJvbm1lbnQjMSMyfX0KKworJSBDaGVjayB3aGV0aGVyIHdlJ3JlIGluIHRoZSByaWdodCBlbnZpcm9ubWVudDoKK1xkZWZcY2hlY2tlbnYjMXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGhpc2Vudlx0ZW1wCisgIFxlbHNlCisgICAgXGJhZGVudmVycgorICBcZmkKK30KKworJSBFdmlyb25tZW50IG1pc21hdGNoLCAjMSBleHBlY3RlZDoKK1xkZWZcYmFkZW52ZXJyeyUKKyAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgXGVycm1lc3NhZ2V7VGhpcyBjb21tYW5kIGNhbiBhcHBlYXIgb25seSBcaW5lbnZpcm9ubWVudFx0ZW1wLAorICAgIG5vdCBcaW5lbnZpcm9ubWVudFx0aGlzZW52fSUKK30KK1xkZWZcaW5lbnZpcm9ubWVudCMxeyUKKyAgXGlmeCMxXGVtcHR5CisgICAgb3V0IG9mIGFueSBlbnZpcm9ubWVudCUKKyAgXGVsc2UKKyAgICBpbiBlbnZpcm9ubWVudCBcZXhwYW5kYWZ0ZXJcc3RyaW5nIzElCisgIFxmaQorfQorCislIEBlbmQgZm9vIGV4ZWN1dGVzIHRoZSBkZWZpbml0aW9uIG9mIFxFZm9vLgorJSBCdXQgZmlyc3QsIGl0IGV4ZWN1dGVzIGEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBcY2hlY2tlbnYKKyUKK1xwYXJzZWFyZ2RlZlxlbmR7JQorICBcaWYgMVxjc25hbWUgaXNjb25kLiMxXGVuZGNzbmFtZQorICBcZWxzZQorICAgICUgVGhlIGdlbmVyYWwgd29yZGluZyBvZiBcYmFkZW52ZXJyIG1heSBub3QgYmUgaWRlYWwsIGJ1dC4uLiAtLWthc2FsLCAwNm5vdjAzCisgICAgXGV4cGFuZGFmdGVyXGNoZWNrZW52XGNzbmFtZSMxXGVuZGNzbmFtZQorICAgIFxjc25hbWUgRSMxXGVuZGNzbmFtZQorICAgIFxlbmRncm91cAorICBcZmkKK30KKworXG5ld2hlbHBcRU1zaW1wbGV7UHJlc3MgUkVUVVJOIHRvIGNvbnRpbnVlLn0KKworCislJSBTaW1wbGUgc2luZ2xlLWNoYXJhY3RlciBAIGNvbW1hbmRzCisKKyUgQEAgcHJpbnRzIGFuIEAKKyUgS2x1ZGdlIHRoaXMgdW50aWwgdGhlIGZvbnRzIGFyZSByaWdodCAoZ3JyKS4KK1xkZWZcQHt7XHR0XGNoYXI2NH19CisKKyUgVGhpcyBpcyB0dXJuZWQgb2ZmIGJlY2F1c2UgaXQgd2FzIG5ldmVyIGRvY3VtZW50ZWQKKyUgYW5kIHlvdSBjYW4gdXNlIEB3ey4uLn0gYXJvdW5kIGEgcXVvdGUgdG8gc3VwcHJlc3MgbGlnYXR1cmVzLgorJSUgRGVmaW5lIEBgIGFuZCBAJyB0byBiZSB0aGUgc2FtZSBhcyBgIGFuZCAnCislJSBidXQgc3VwcHJlc3NpbmcgbGlnYXR1cmVzLgorJVxkZWZcYHt7YH19CislXGRlZlwne3snfX0KKworJSBVc2VkIHRvIGdlbmVyYXRlIHF1b3RlZCBicmFjZXMuCitcZGVmXG15bGJyYWNlIHt7XHR0XGNoYXIxMjN9fQorXGRlZlxteXJicmFjZSB7e1x0dFxjaGFyMTI1fX0KK1xsZXRcez1cbXlsYnJhY2UKK1xsZXRcfT1cbXlyYnJhY2UKK1xiZWdpbmdyb3VwCisgICUgRGVmaW5pdGlvbnMgdG8gcHJvZHVjZSBceyBhbmQgXH0gY29tbWFuZHMgZm9yIGluZGljZXMsCisgICUgYW5kIEB7IGFuZCBAfSBmb3IgdGhlIGF1eC90b2MgZmlsZXMuCisgIFxjYXRjb2RlYFx7ID0gXG90aGVyIFxjYXRjb2RlYFx9ID0gXG90aGVyCisgIFxjYXRjb2RlYFxbID0gMSBcY2F0Y29kZWBcXSA9IDIKKyAgXGNhdGNvZGVgXCEgPSAwIFxjYXRjb2RlYFxcID0gXG90aGVyCisgICFnZGVmIWxicmFjZWNtZFtce10lCisgICFnZGVmIXJicmFjZWNtZFtcfV0lCisgICFnZGVmIWxicmFjZWF0Y21kW0B7XSUKKyAgIWdkZWYhcmJyYWNlYXRjbWRbQH1dJQorIWVuZGdyb3VwCisKKyUgQGNvbW1he30gdG8gYXZvaWQgLCBwYXJzaW5nIHByb2JsZW1zLgorXGxldFxjb21tYSA9ICwKKworJSBBY2NlbnRzOiBALCBAZG90YWNjZW50IEByaW5nYWNjZW50IEB1YmFyYWNjZW50IEB1ZG90YWNjZW50CislIE90aGVycyBhcmUgZGVmaW5lZCBieSBwbGFpbiBUZVg6IEBgIEAnIEAiIEBeIEB+IEA9IEB1IEB2IEBILgorXGxldFwsID0gXGMKK1xsZXRcZG90YWNjZW50ID0gXC4KK1xkZWZccmluZ2FjY2VudCMxe3tcYWNjZW50MjMgIzF9fQorXGxldFx0aWVhY2NlbnQgPSBcdAorXGxldFx1YmFyYWNjZW50ID0gXGIKK1xsZXRcdWRvdGFjY2VudCA9IFxkCisKKyUgT3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzOiBAcXVlc3Rpb25kb3duIEBleGNsYW1kb3duIEBvcmRmIEBvcmRtCislIFBsYWluIFRlWCBkZWZpbmVzOiBAQUEgQEFFIEBPIEBPRSBATCAocGx1cyBsb3dlcmNhc2UgdmVyc2lvbnMpIEBzcy4KK1xkZWZccXVlc3Rpb25kb3duez9gfQorXGRlZlxleGNsYW1kb3dueyFgfQorXGRlZlxvcmRme1xsZWF2ZXZtb2RlXHJhaXNlMWV4XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgXHVuZGVyYmFye2F9fX0KK1xkZWZcb3JkbXtcbGVhdmV2bW9kZVxyYWlzZTFleFxoYm94e1xzZWxlY3Rmb250c1xsbGxzaXplIFx1bmRlcmJhcntvfX19CisKKyUgRG90bGVzcyBpIGFuZCBkb3RsZXNzIGosIHVzZWQgZm9yIGFjY2VudHMuCitcZGVmXGltYWNyb3tpfQorXGRlZlxqbWFjcm97an0KK1xkZWZcZG90bGVzcyMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGltYWNybyBccHRleGkKKyAgXGVsc2VcaWZ4XHRlbXBcam1hY3JvIFxqCisgIFxlbHNlIFxlcnJtZXNzYWdle0Bkb3RsZXNzIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCBpIG9yIGp9JQorICBcZmlcZmkKK30KKworJSBUaGUgXFRlWHt9IGxvZ28sIGFzIGluIHBsYWluLCBidXQgcmVzZXR0aW5nIHRoZSBzcGFjaW5nIHNvIHRoYXQgYQorJSBwZXJpb2QgZm9sbG93aW5nIGNvdW50cyBhcyBlbmRpbmcgYSBzZW50ZW5jZS4gIChJZGVhIGZvdW5kIGluIGxhdGV4LikKKyUKK1xlZGVmXFRlWHtcVGVYIFxzcGFjZWZhY3Rvcj0xMDAwIH0KKworJSBATGFUZVh7fSBsb2dvLiAgTm90IHF1aXRlIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIGRlZmluaXRpb24gaW4KKyUgbGF0ZXgubHR4LCBzaW5jZSB3ZSB1c2UgYSBkaWZmZXJlbnQgZm9udCBmb3IgdGhlIHJhaXNlZCBBOyBpdCdzIG1vc3QKKyUgY29udmVuaWVudCBmb3IgdXMgdG8gdXNlIGFuIGV4cGxpY2l0bHkgc21hbGxlciBmb250LCByYXRoZXIgdGhhbiB1c2luZworJSB0aGUgXHNjcmlwdHN0eWxlIGZvbnQgKHNpbmNlIHdlIGRvbid0IHJlc2V0IFxzY3JpcHRzdHlsZSBhbmQKKyUgXHNjcmlwdHNjcmlwdHN0eWxlKS4KKyUKK1xkZWZcTGFUZVh7JQorICBMXGtlcm4tLjM2ZW0KKyAge1xzZXRib3gwPVxoYm94e1R9JQorICAgXHZib3ggdG8gXGh0MHtcaGJveHtcc2VsZWN0Zm9udHNcbGxsc2l6ZSBBfVx2c3N9fSUKKyAgXGtlcm4tLjE1ZW0KKyAgXFRlWAorfQorCislIEJlIHN1cmUgd2UncmUgaW4gaG9yaXpvbnRhbCBtb2RlIHdoZW4gZG9pbmcgYSB0aWUsIHNpbmNlIHdlIG1ha2Ugc3BhY2UKKyUgZXF1aXZhbGVudCB0byB0aGlzIGluIEBleGFtcGxlLWxpa2UgZW52aXJvbm1lbnRzLiBPdGhlcndpc2UsIGEgc3BhY2UKKyUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgd2lsbCBzdGFydCB3aXRoIFxwZW5hbHR5IC0tIGFuZAorJSBzaW5jZSBccGVuYWx0eSBpcyB2YWxpZCBpbiB2ZXJ0aWNhbCBtb2RlLCB3ZSdkIGVuZCB1cCBwdXR0aW5nIHRoZQorJSBwZW5hbHR5IG9uIHRoZSB2ZXJ0aWNhbCBsaXN0IGluc3RlYWQgb2YgaW4gdGhlIG5ldyBwYXJhZ3JhcGguCit7XGNhdGNvZGVgQCA9IDExCisgJSBBdm9pZCB1c2luZyBcQE0gZGlyZWN0bHksIGJlY2F1c2UgdGhhdCBjYXVzZXMgdHJvdWJsZQorICUgaWYgdGhlIGRlZmluaXRpb24gaXMgd3JpdHRlbiBpbnRvIGFuIGluZGV4IGZpbGUuCisgXGdsb2JhbFxsZXRcdGllcGVuYWx0eSA9IFxATQorIFxnZGVmXHRpZXtcbGVhdmV2bW9kZVxwZW5hbHR5XHRpZXBlbmFsdHlcIH0KK30KKworJSBAOiBmb3JjZXMgbm9ybWFsIHNpemUgd2hpdGVzcGFjZSBmb2xsb3dpbmcuCitcZGVmXDp7XHNwYWNlZmFjdG9yPTEwMDAgfQorCislIEAqIGZvcmNlcyBhIGxpbmUgYnJlYWsuCitcZGVmXCp7XGhmaWxcYnJlYWtcaGJveHt9XGlnbm9yZXNwYWNlc30KKworJSBALyBhbGxvd3MgYSBsaW5lIGJyZWFrLgorXGxldFwvPVxhbGxvd2JyZWFrCisKKyUgQC4gaXMgYW4gZW5kLW9mLXNlbnRlbmNlIHBlcmlvZC4KK1xkZWZcLnsuXHNwYWNlZmFjdG9yPVxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3Jcc3BhY2V9CisKKyUgQCEgaXMgYW4gZW5kLW9mLXNlbnRlbmNlIGJhbmcuCitcZGVmXCF7IVxzcGFjZWZhY3Rvcj1cZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yXHNwYWNlfQorCislIEA/IGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBxdWVyeS4KK1xkZWZcP3s/XHNwYWNlZmFjdG9yPVxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3Jcc3BhY2V9CisKKyUgQGZyZW5jaHNwYWNpbmcgb258b2ZmICBzYXlzIHdoZXRoZXIgdG8gcHV0IGV4dHJhIHNwYWNlIGFmdGVyIHB1bmN0dWF0aW9uLgorJSAKK1xkZWZcb253b3Jke29ufQorXGRlZlxvZmZ3b3Jke29mZn0KKyUKK1xwYXJzZWFyZ2RlZlxmcmVuY2hzcGFjaW5neyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXG9ud29yZCBccGxhaW5mcmVuY2hzcGFjaW5nCisgIFxlbHNlXGlmeFx0ZW1wXG9mZndvcmQgXHBsYWlubm9uZnJlbmNoc3BhY2luZworICBcZWxzZQorICAgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgICAgXGVycm1lc3NhZ2V7VW5rbm93biBAZnJlbmNoc3BhY2luZyBvcHRpb24gYFx0ZW1wJywgbXVzdCBiZSBvbi9vZmZ9JQorICBcZmlcZmkKK30KKworJSBAdyBwcmV2ZW50cyBhIHdvcmQgYnJlYWsuICBXaXRob3V0IHRoZSBcbGVhdmV2bW9kZSwgQHcgYXQgdGhlCislIGJlZ2lubmluZyBvZiBhIHBhcmFncmFwaCwgd2hlbiBUZVggaXMgc3RpbGwgaW4gdmVydGljYWwgbW9kZSwgd291bGQKKyUgcHJvZHVjZSBhIHdob2xlIGxpbmUgb2Ygb3V0cHV0IGluc3RlYWQgb2Ygc3RhcnRpbmcgdGhlIHBhcmFncmFwaC4KK1xkZWZcdyMxe1xsZWF2ZXZtb2RlXGhib3h7IzF9fQorCislIEBncm91cCAuLi4gQGVuZCBncm91cCBmb3JjZXMgLi4uIHRvIGJlIGFsbCBvbiBvbmUgcGFnZSwgYnkgZW5jbG9zaW5nCislIGl0IGluIGEgVGVYIHZib3guICBXZSB1c2UgXHZ0b3AgaW5zdGVhZCBvZiBcdmJveCB0byBjb25zdHJ1Y3QgdGhlIGJveAorJSB0byBrZWVwIGl0cyBoZWlnaHQgdGhhdCBvZiBhIG5vcm1hbCBsaW5lLiAgQWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IKKyUgXHRvcHNraXAgKHAuMTE0IG9mIHRoZSBUZVhib29rKSwgdGhlIGdsdWUgaW5zZXJ0ZWQgaXMKKyUgbWF4IChcdG9wc2tpcCAtIFxodCAoZmlyc3QgaXRlbSksIDApLiAgSWYgdGhhdCBoZWlnaHQgaXMgbGFyZ2UsCislIHRoZXJlZm9yZSwgbm8gZ2x1ZSBpcyBpbnNlcnRlZCwgYW5kIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBoZWFkbGluZSBhbmQKKyUgdGhlIHRleHQgaXMgc21hbGwsIHdoaWNoIGxvb2tzIGJhZC4KKyUKKyUgQW5vdGhlciBjb21wbGljYXRpb24gaXMgdGhhdCB0aGUgZ3JvdXAgbWlnaHQgYmUgdmVyeSBsYXJnZS4gIFRoaXMgY2FuCislIGNhdXNlIHRoZSBnbHVlIG9uIHRoZSBwcmV2aW91cyBwYWdlIHRvIGJlIHVuZHVseSBzdHJldGNoZWQsIGJlY2F1c2UgaXQKKyUgZG9lcyBub3QgaGF2ZSBtdWNoIG1hdGVyaWFsLiAgSW4gdGhpcyBjYXNlLCBpdCdzIGJldHRlciB0byBhZGQgYW4KKyUgZXhwbGljaXQgXHZmaWxsIHNvIHRoYXQgdGhlIGV4dHJhIHNwYWNlIGlzIGF0IHRoZSBib3R0b20uICBUaGUKKyUgdGhyZXNob2xkIGZvciBkb2luZyB0aGlzIGlzIGlmIHRoZSBncm91cCBpcyBtb3JlIHRoYW4gXHZmaWxsbGltaXQKKyUgcGVyY2VudCBvZiBhIHBhZ2UgKFx2ZmlsbGxpbWl0IGNhbiBiZSBjaGFuZ2VkIGluc2lkZSBvZiBAdGV4KS4KKyUKK1xuZXdib3hcZ3JvdXBib3gKK1xkZWZcdmZpbGxsaW1pdHswLjd9CislCitcZW52ZGVmXGdyb3VweyUKKyAgXGlmbnVtXGNhdGNvZGVgXF5eTT1cYWN0aXZlIFxlbHNlCisgICAgXGVycmhlbHAgPSBcZ3JvdXBpbnZhbGlkaGVscAorICAgIFxlcnJtZXNzYWdle0Bncm91cCBpbnZhbGlkIGluIGNvbnRleHQgd2hlcmUgZmlsbGluZyBpcyBlbmFibGVkfSUKKyAgXGZpCisgIFxzdGFydHNhdmluZ2luc2VydHMKKyAgJQorICBcc2V0Ym94XGdyb3VwYm94ID0gXHZ0b3BcYmdyb3VwCisgICAgJSBEbyBAY29tbWVudCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGluc2lkZSBhbiBlbnZpcm9ubWVudCBzdWNoIGFzCisgICAgJSBAZXhhbXBsZSwgd2hlcmUgZWFjaCBlbmQtb2YtbGluZSBpbiB0aGUgaW5wdXQgY2F1c2VzIGFuCisgICAgJSBlbmQtb2YtbGluZSBpbiB0aGUgb3V0cHV0LiAgV2UgZG9uJ3Qgd2FudCB0aGUgZW5kLW9mLWxpbmUgYWZ0ZXIKKyAgICAlIHRoZSBgQGdyb3VwJyB0byBwdXQgZXh0cmEgc3BhY2UgaW4gdGhlIG91dHB1dC4gIFNpbmNlIEBncm91cAorICAgICUgc2hvdWxkIGFwcGVhciBvbiBhIGxpbmUgYnkgaXRzZWxmIChhY2NvcmRpbmcgdG8gdGhlIFRleGluZm8KKyAgICAlIG1hbnVhbCksIHdlIGRvbid0IHdvcnJ5IGFib3V0IGVhdGluZyBhbnkgdXNlciB0ZXh0LgorICAgIFxjb21tZW50Cit9CislCislIFRoZSBcdnRvcCBwcm9kdWNlcyBhIGJveCB3aXRoIG5vcm1hbCBoZWlnaHQgYW5kIGxhcmdlIGRlcHRoOyB0aHVzLCBUZVggcHV0cworJSBcYmFzZWxpbmVza2lwIGdsdWUgYmVmb3JlIGl0LCBhbmQgKHdoZW4gdGhlIG5leHQgbGluZSBvZiB0ZXh0IGlzIGRvbmUpCislIFxsaW5lc2tpcCBnbHVlIGFmdGVyIGl0LiAgVGh1cywgc3BhY2UgYmVsb3cgaXMgbm90IHF1aXRlIGVxdWFsIHRvIHNwYWNlCislIGFib3ZlLiAgQnV0IGl0J3MgcHJldHR5IGNsb3NlLgorXGRlZlxFZ3JvdXB7JQorICAgICUgVG8gZ2V0IGNvcnJlY3QgaW50ZXJsaW5lIHNwYWNlIGJldHdlZW4gdGhlIGxhc3QgbGluZSBvZiB0aGUgZ3JvdXAKKyAgICAlIGFuZCB0aGUgZmlyc3QgbGluZSBhZnRlcndhcmRzLCB3ZSBoYXZlIHRvIHByb3BhZ2F0ZSBccHJldmRlcHRoLgorICAgIFxlbmRncmFmICUgTm90IFxwYXIsIGFzIGl0IG1heSBoYXZlIGJlZW4gc2V0IHRvIFxsaXNwcGFyLgorICAgIFxnbG9iYWxcZGltZW4xID0gXHByZXZkZXB0aAorICBcZWdyb3VwICAgICAgICAgICAlIEVuZCB0aGUgXHZ0b3AuCisgICUgXGRpbWVuMCBpcyB0aGUgdmVydGljYWwgc2l6ZSBvZiB0aGUgZ3JvdXAncyBib3guCisgIFxkaW1lbjAgPSBcaHRcZ3JvdXBib3ggIFxhZHZhbmNlXGRpbWVuMCBieSBcZHBcZ3JvdXBib3gKKyAgJSBcZGltZW4yIGlzIGhvdyBtdWNoIHNwYWNlIGlzIGxlZnQgb24gdGhlIHBhZ2UgKG1vcmUgb3IgbGVzcykuCisgIFxkaW1lbjIgPSBccGFnZWhlaWdodCAgIFxhZHZhbmNlXGRpbWVuMiBieSAtXHBhZ2V0b3RhbAorICAlIGlmIHRoZSBncm91cCBkb2Vzbid0IGZpdCBvbiB0aGUgY3VycmVudCBwYWdlLCBhbmQgaXQncyBhIGJpZyBiaWcKKyAgJSBncm91cCwgZm9yY2UgYSBwYWdlIGJyZWFrLgorICBcaWZkaW0gXGRpbWVuMCA+IFxkaW1lbjIKKyAgICBcaWZkaW0gXHBhZ2V0b3RhbCA8IFx2ZmlsbGxpbWl0XHBhZ2VoZWlnaHQKKyAgICAgIFxwYWdlCisgICAgXGZpCisgIFxmaQorICBcYm94XGdyb3VwYm94CisgIFxwcmV2ZGVwdGggPSBcZGltZW4xCisgIFxjaGVja2luc2VydHMKK30KKyUKKyUgVGVYIHB1dHMgaW4gYW4gXGVzY2FwZWNoYXIgKGkuZS4sIGBAJykgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgaGVscAorJSBtZXNzYWdlLCBzbyB0aGlzIGVuZHMgdXAgcHJpbnRpbmcgYEBncm91cCBjYW4gb25seSAuLi4nLgorJQorXG5ld2hlbHBcZ3JvdXBpbnZhbGlkaGVscHslCitncm91cCBjYW4gb25seSBiZSB1c2VkIGluIGVudmlyb25tZW50cyBzdWNoIGFzIEBleGFtcGxlLF5eSiUKK3doZXJlIGVhY2ggbGluZSBvZiBpbnB1dCBwcm9kdWNlcyBhIGxpbmUgb2Ygb3V0cHV0Ln0KKworJSBAbmVlZCBzcGFjZS1pbi1taWxzCislIGZvcmNlcyBhIHBhZ2UgYnJlYWsgaWYgdGhlcmUgaXMgbm90IHNwYWNlLWluLW1pbHMgcmVtYWluaW5nLgorCitcbmV3ZGltZW5cbWlsICBcbWlsPTAuMDAxaW4KKworJSBPbGQgZGVmaW5pdGlvbi0tZGlkbid0IHdvcmsuCislXHBhcnNlYXJnZGVmXG5lZWR7XHBhciAlCislJSBUaGlzIG1ldGhvZCB0cmllcyB0byBtYWtlIFRlWCBicmVhayB0aGUgcGFnZSBuYXR1cmFsbHkKKyUlIGlmIHRoZSBkZXB0aCBvZiB0aGUgYm94IGRvZXMgbm90IGZpdC4KKyV7XGJhc2VsaW5lc2tpcD0wcHQlCislXHZ0b3AgdG8gIzFcbWlse1x2ZmlsfVxrZXJuIC0jMVxtaWxcbm9icmVhaworJVxwcmV2ZGVwdGg9LTEwMDBwdAorJX19CisKK1xwYXJzZWFyZ2RlZlxuZWVkeyUKKyAgJSBFbnN1cmUgdmVydGljYWwgbW9kZSwgc28gd2UgZG9uJ3QgbWFrZSBhIGJpZyBib3ggaW4gdGhlIG1pZGRsZSBvZiBhCisgICUgcGFyYWdyYXBoLgorICBccGFyCisgICUKKyAgJSBJZiB0aGUgQG5lZWQgdmFsdWUgaXMgbGVzcyB0aGFuIG9uZSBsaW5lIHNwYWNlLCBpdCdzIHVzZWxlc3MuCisgIFxkaW1lbjAgPSAjMVxtaWwKKyAgXGRpbWVuMiA9IFxodFxzdHJ1dGJveAorICBcYWR2YW5jZVxkaW1lbjIgYnkgXGRwXHN0cnV0Ym94CisgIFxpZmRpbVxkaW1lbjAgPiBcZGltZW4yCisgICAgJQorICAgICUgRG8gYSBcc3RydXQganVzdCB0byBtYWtlIHRoZSBoZWlnaHQgb2YgdGhpcyBib3ggYmUgbm9ybWFsLCBzbyB0aGUKKyAgICAlIG5vcm1hbCBsZWFkaW5nIGlzIGluc2VydGVkIHJlbGF0aXZlIHRvIHRoZSBwcmVjZWRpbmcgbGluZS4KKyAgICAlIEFuZCBhIHBhZ2UgYnJlYWsgaGVyZSBpcyBmaW5lLgorICAgIFx2dG9wIHRvICMxXG1pbHtcc3RydXRcdmZpbH0lCisgICAgJQorICAgICUgVGVYIGRvZXMgbm90IGV2ZW4gY29uc2lkZXIgcGFnZSBicmVha3MgaWYgYSBwZW5hbHR5IGFkZGVkIHRvIHRoZQorICAgICUgbWFpbiB2ZXJ0aWNhbCBsaXN0IGlzIDEwMDAwIG9yIG1vcmUuICBCdXQgaW4gb3JkZXIgdG8gc2VlIGlmIHRoZQorICAgICUgZW1wdHkgYm94IHdlIGp1c3QgYWRkZWQgZml0cyBvbiB0aGUgcGFnZSwgd2UgbXVzdCBtYWtlIGl0IGNvbnNpZGVyCisgICAgJSBwYWdlIGJyZWFrcy4gIE9uIHRoZSBvdGhlciBoYW5kLCB3ZSBkb24ndCB3YW50IHRvIGFjdHVhbGx5IGJyZWFrIHRoZQorICAgICUgcGFnZSBhZnRlciB0aGUgZW1wdHkgYm94LiAgU28gd2UgdXNlIGEgcGVuYWx0eSBvZiA5OTk5LgorICAgICUKKyAgICAlIFRoZXJlIGlzIGFuIGV4dHJlbWVseSBzbWFsbCBjaGFuY2UgdGhhdCBUZVggd2lsbCBhY3R1YWxseSBicmVhayB0aGUKKyAgICAlIHBhZ2UgYXQgdGhpcyBccGVuYWx0eSwgaWYgdGhlcmUgYXJlIG5vIG90aGVyIGZlYXNpYmxlIGJyZWFrcG9pbnRzIGluCisgICAgJSBzaWdodC4gIChJZiB0aGUgdXNlciBpcyB1c2luZyBsb3RzIG9mIGJpZyBAZ3JvdXAgY29tbWFuZHMsIHdoaWNoCisgICAgJSBhbG1vc3QtYnV0LW5vdC1xdWl0ZSBmaWxsIHVwIGEgcGFnZSwgVGVYIHdpbGwgaGF2ZSBhIGhhcmQgdGltZSBkb2luZworICAgICUgZ29vZCBwYWdlIGJyZWFraW5nLCBmb3IgZXhhbXBsZS4pICBIb3dldmVyLCBJIGNvdWxkIG5vdCBjb25zdHJ1Y3QgYW4KKyAgICAlIGV4YW1wbGUgd2hlcmUgYSBwYWdlIGJyb2tlIGF0IHRoaXMgXHBlbmFsdHk7IGlmIGl0IGhhcHBlbnMgaW4gYSByZWFsCisgICAgJSBkb2N1bWVudCwgdGhlbiB3ZSBjYW4gcmVjb25zaWRlciBvdXIgc3RyYXRlZ3kuCisgICAgXHBlbmFsdHk5OTk5CisgICAgJQorICAgICUgQmFjayB1cCBieSB0aGUgc2l6ZSBvZiB0aGUgYm94LCB3aGV0aGVyIHdlIGRpZCBhIHBhZ2UgYnJlYWsgb3Igbm90LgorICAgIFxrZXJuIC0jMVxtaWwKKyAgICAlCisgICAgJSBEbyBub3QgYWxsb3cgYSBwYWdlIGJyZWFrIHJpZ2h0IGFmdGVyIHRoaXMga2Vybi4KKyAgICBcbm9icmVhaworICBcZmkKK30KKworJSBAYnIgICBmb3JjZXMgcGFyYWdyYXBoIGJyZWFrIChhbmQgaXMgdW5kb2N1bWVudGVkKS4KKworXGxldFxiciA9IFxwYXIKKworJSBAcGFnZSBmb3JjZXMgdGhlIHN0YXJ0IG9mIGEgbmV3IHBhZ2UuCislCitcZGVmXHBhZ2V7XHBhclx2ZmlsbFxzdXBlcmVqZWN0fQorCislIEBleGRlbnQgdGV4dC4uLi4KKyUgb3V0cHV0cyB0ZXh0IG9uIHNlcGFyYXRlIGxpbmUgaW4gcm9tYW4gZm9udCwgc3RhcnRpbmcgYXQgc3RhbmRhcmQgcGFnZSBtYXJnaW4KKworJSBUaGlzIHJlY29yZHMgdGhlIGFtb3VudCBvZiBpbmRlbnQgaW4gdGhlIGlubmVybW9zdCBlbnZpcm9ubWVudC4KKyUgVGhhdCdzIGhvdyBtdWNoIFxleGRlbnQgc2hvdWxkIHRha2Ugb3V0LgorXG5ld3NraXBcZXhkZW50YW1vdW50CisKKyUgVGhpcyBkZWZuIGlzIHVzZWQgaW5zaWRlIGZpbGwgZW52aXJvbm1lbnRzIHN1Y2ggYXMgQGRlZnVuLgorXHBhcnNlYXJnZGVmXGV4ZGVudHtcaGZpbFxicmVha1xoYm94e1xrZXJuIC1cZXhkZW50YW1vdW50e1xybSMxfX1caGZpbFxicmVha30KKworJSBUaGlzIGRlZm4gaXMgdXNlZCBpbnNpZGUgbm9maWxsIGVudmlyb25tZW50cyBzdWNoIGFzIEBleGFtcGxlLgorXHBhcnNlYXJnZGVmXG5vZmlsbGV4ZGVudHt7XGFkdmFuY2UgXGxlZnRza2lwIGJ5IC1cZXhkZW50YW1vdW50CisgIFxsZWZ0bGluZXtcaHNraXBcbGVmdHNraXB7XHJtIzF9fX19CisKKyUgQGlubWFyZ2lue1dISUNIfXtURVhUfSBwdXRzIFRFWFQgaW4gdGhlIFdISUNIIG1hcmdpbiBuZXh0IHRvIHRoZSBjdXJyZW50CislIHBhcmFncmFwaC4gIEZvciBtb3JlIGdlbmVyYWwgcHVycG9zZXMsIHVzZSB0aGUgXG1hcmdpbiBpbnNlcnRpb24KKyUgY2xhc3MuICBXSElDSCBpcyBgbCcgb3IgYHInLgorJQorXG5ld3NraXBcaW5tYXJnaW5zcGFjaW5nIFxpbm1hcmdpbnNwYWNpbmc9MWNtCitcZGVmXHN0cnV0ZGVwdGh7XGRwXHN0cnV0Ym94fQorJQorXGRlZlxkb2lubWFyZ2luIzEjMntcc3RydXRcdmFkanVzdHslCisgIFxub2JyZWFrCisgIFxrZXJuLVxzdHJ1dGRlcHRoCisgIFx2dG9wIHRvIFxzdHJ1dGRlcHRoeyUKKyAgICBcYmFzZWxpbmVza2lwPVxzdHJ1dGRlcHRoCisgICAgXHZzcworICAgICUgaWYgeW91IGhhdmUgbXVsdGlwbGUgbGluZXMgb2Ygc3R1ZmYgdG8gcHV0IGhlcmUsIHlvdSdsbCBuZWVkIHRvCisgICAgJSBtYWtlIHRoZSB2Ym94IHlvdXJzZWxmIG9mIHRoZSBhcHByb3ByaWF0ZSBzaXplLgorICAgIFxpZngjMWwlCisgICAgICBcbGxhcHtcaWdub3Jlc3BhY2VzICMyXGhza2lwXGlubWFyZ2luc3BhY2luZ30lCisgICAgXGVsc2UKKyAgICAgIFxybGFwe1xoc2tpcFxoc2l6ZSBcaHNraXBcaW5tYXJnaW5zcGFjaW5nIFxpZ25vcmVzcGFjZXMgIzJ9JQorICAgIFxmaQorICAgIFxudWxsCisgIH0lCit9fQorXGRlZlxpbmxlZnRtYXJnaW57XGRvaW5tYXJnaW4gbH0KK1xkZWZcaW5yaWdodG1hcmdpbntcZG9pbm1hcmdpbiByfQorJQorJSBAaW5tYXJnaW57VEVYVCBbLCBSSUdIVC1URVhUXX0KKyUgKGlmIFJJR0hULVRFWFQgaXMgZ2l2ZW4sIHVzZSBURVhUIGZvciBsZWZ0IHBhZ2UsIFJJR0hULVRFWFQgZm9yIHJpZ2h0OworJSBlbHNlIHVzZSBURVhUIGZvciBib3RoKS4KKyUKK1xkZWZcaW5tYXJnaW4jMXtccGFyc2Vpbm1hcmdpbiAjMSwsXGZpbmlzaH0KK1xkZWZccGFyc2Vpbm1hcmdpbiMxLCMyLCMzXGZpbmlzaHslIG5vdCBwZXJmZWN0LCBidXQgYmV0dGVyIHRoYW4gbm90aGluZy4KKyAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfSUKKyAgXGlmZGltXHdkMCA+IDBwdAorICAgIFxkZWZcbGVmdHRleHR7IzF9JSAgaGF2ZSBib3RoIHRleHRzCisgICAgXGRlZlxyaWdodHRleHR7IzJ9JQorICBcZWxzZQorICAgIFxkZWZcbGVmdHRleHR7IzF9JSAgaGF2ZSBvbmx5IG9uZSB0ZXh0CisgICAgXGRlZlxyaWdodHRleHR7IzF9JQorICBcZmkKKyAgJQorICBcaWZvZGRccGFnZW5vCisgICAgXGRlZlx0ZW1we1xpbnJpZ2h0bWFyZ2luXHJpZ2h0dGV4dH0lIG9kZCBwYWdlIC0+IG91dHNpZGUgaXMgcmlnaHQgbWFyZ2luCisgIFxlbHNlCisgICAgXGRlZlx0ZW1we1xpbmxlZnRtYXJnaW5cbGVmdHRleHR9JQorICBcZmkKKyAgXHRlbXAKK30KKworJSBAaW5jbHVkZSBmaWxlICAgIGluc2VydCB0ZXh0IG9mIHRoYXQgZmlsZSBhcyBpbnB1dC4KKyUKK1xkZWZcaW5jbHVkZXtccGFyc2Vhcmd1c2luZ1xmaWxlbmFtZWNhdGNvZGVzXGluY2x1ZGV6enp9CitcZGVmXGluY2x1ZGV6enojMXslCisgIFxwdXNodGhpc2ZpbGVzdGFjaworICBcZGVmXHRoaXNmaWxleyMxfSUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxkZWZcdGVtcHtcaW5wdXQgIzEgfSUKKyAgICBcZXhwYW5kYWZ0ZXIKKyAgfVx0ZW1wCisgIFxwb3B0aGlzZmlsZXN0YWNrCit9CitcZGVmXGZpbGVuYW1lY2F0Y29kZXN7JQorICBcY2F0Y29kZWBcXD1cb3RoZXIKKyAgXGNhdGNvZGVgfj1cb3RoZXIKKyAgXGNhdGNvZGVgXj1cb3RoZXIKKyAgXGNhdGNvZGVgXz1cb3RoZXIKKyAgXGNhdGNvZGVgfD1cb3RoZXIKKyAgXGNhdGNvZGVgPD1cb3RoZXIKKyAgXGNhdGNvZGVgPj1cb3RoZXIKKyAgXGNhdGNvZGVgKz1cb3RoZXIKKyAgXGNhdGNvZGVgLT1cb3RoZXIKK30KKworXGRlZlxwdXNodGhpc2ZpbGVzdGFja3slCisgIFxleHBhbmRhZnRlclxwdXNodGhpc2ZpbGVzdGFja1hccG9wdGhpc2ZpbGVzdGFja1xTdGFja1Rlcm0KK30KK1xkZWZccHVzaHRoaXNmaWxlc3RhY2tYeyUKKyAgXGV4cGFuZGFmdGVyXHB1c2h0aGlzZmlsZXN0YWNrWVx0aGlzZmlsZVxTdGFja1Rlcm0KK30KK1xkZWZccHVzaHRoaXNmaWxlc3RhY2tZICMxXFN0YWNrVGVybSAjMlxTdGFja1Rlcm0geyUKKyAgXGdkZWZccG9wdGhpc2ZpbGVzdGFja3tcZ2RlZlx0aGlzZmlsZXsjMX1cZ2RlZlxwb3B0aGlzZmlsZXN0YWNreyMyfX0lCit9CisKK1xkZWZccG9wdGhpc2ZpbGVzdGFja3tcZXJydGhpc2ZpbGVzdGFja2VtcHR5fQorXGRlZlxlcnJ0aGlzZmlsZXN0YWNrZW1wdHl7XGVycm1lc3NhZ2V7SW50ZXJuYWwgZXJyb3I6CisgIHRoZSBzdGFjayBvZiBmaWxlbmFtZXMgaXMgZW1wdHkufX0KKworXGRlZlx0aGlzZmlsZXt9CisKKyUgQGNlbnRlciBsaW5lCislIG91dHB1dHMgdGhhdCBsaW5lLCBjZW50ZXJlZC4KKyUKK1xwYXJzZWFyZ2RlZlxjZW50ZXJ7JQorICBcaWZobW9kZQorICAgIFxsZXRcbmV4dFxjZW50ZXJICisgIFxlbHNlCisgICAgXGxldFxuZXh0XGNlbnRlclYKKyAgXGZpCisgIFxuZXh0e1xoZmlsIFxpZ25vcmVzcGFjZXMjMVx1bnNraXAgXGhmaWx9JQorfQorXGRlZlxjZW50ZXJIIzF7JQorICB7JQorICAgIFxoZmlsXGJyZWFrCisgICAgXGFkdmFuY2VcaHNpemUgYnkgLVxsZWZ0c2tpcAorICAgIFxhZHZhbmNlXGhzaXplIGJ5IC1ccmlnaHRza2lwCisgICAgXGxpbmV7IzF9JQorICAgIFxicmVhaworICB9JQorfQorXGRlZlxjZW50ZXJWIzF7XGxpbmV7XGtlcm5cbGVmdHNraXAgIzFca2VyblxyaWdodHNraXB9fQorCislIEBzcCBuICAgb3V0cHV0cyBuIGxpbmVzIG9mIHZlcnRpY2FsIHNwYWNlCisKK1xwYXJzZWFyZ2RlZlxzcHtcdnNraXAgIzFcYmFzZWxpbmVza2lwfQorCislIEBjb21tZW50IC4uLmxpbmUgd2hpY2ggaXMgaWdub3JlZC4uLgorJSBAYyBpcyB0aGUgc2FtZSBhcyBAY29tbWVudAorJSBAaWdub3JlIC4uLiBAZW5kIGlnbm9yZSAgaXMgYW5vdGhlciB3YXkgdG8gd3JpdGUgYSBjb21tZW50CisKK1xkZWZcY29tbWVudHtcYmVnaW5ncm91cCBcY2F0Y29kZWBcXl5NPVxvdGhlciUKK1xjYXRjb2RlYFxAPVxvdGhlciBcY2F0Y29kZWBcez1cb3RoZXIgXGNhdGNvZGVgXH09XG90aGVyJQorXGNvbW1lbnR4eHh9Cit7XGNhdGNvZGVgXF5eTT1cb3RoZXIgXGdkZWZcY29tbWVudHh4eCMxXl5Ne1xlbmRncm91cH19CisKK1xsZXRcYz1cY29tbWVudAorCislIEBwYXJhZ3JhcGhpbmRlbnQgTkNIQVJTCislIFdlJ2xsIHVzZSBlbXMgZm9yIE5DSEFSUywgY2xvc2UgZW5vdWdoLgorJSBOQ0hBUlMgY2FuIGFsc28gYmUgdGhlIHdvcmQgYGFzaXMnIG9yIGBub25lJy4KKyUgV2UgY2Fubm90IGZlYXNpYmx5IGltcGxlbWVudCBAcGFyYWdyYXBoaW5kZW50IGFzaXMsIHRob3VnaC4KKyUKK1xkZWZcYXNpc3dvcmR7YXNpc30gJSBubyB0cmFuc2xhdGlvbiwgdGhlc2UgYXJlIGtleXdvcmRzCitcZGVmXG5vbmV3b3Jke25vbmV9CislCitccGFyc2VhcmdkZWZccGFyYWdyYXBoaW5kZW50eyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGFzaXN3b3JkCisgIFxlbHNlCisgICAgXGlmeFx0ZW1wXG5vbmV3b3JkCisgICAgICBcZGVmYXVsdHBhcmluZGVudCA9IDBwdAorICAgIFxlbHNlCisgICAgICBcZGVmYXVsdHBhcmluZGVudCA9ICMxZW0KKyAgICBcZmkKKyAgXGZpCisgIFxwYXJpbmRlbnQgPSBcZGVmYXVsdHBhcmluZGVudAorfQorCislIEBleGFtcGxlaW5kZW50IE5DSEFSUworJSBXZSdsbCB1c2UgZW1zIGZvciBOQ0hBUlMgbGlrZSBAcGFyYWdyYXBoaW5kZW50LgorJSBJdCBzZWVtcyBAZXhhbXBsZWluZGVudCBhc2lzIGlzbid0IG5lY2Vzc2FyeSwgYnV0CislIEkgcHJlc2VydmUgaXQgdG8gbWFrZSBpdCBzaW1pbGFyIHRvIEBwYXJhZ3JhcGhpbmRlbnQuCitccGFyc2VhcmdkZWZcZXhhbXBsZWluZGVudHslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxhc2lzd29yZAorICBcZWxzZQorICAgIFxpZnhcdGVtcFxub25ld29yZAorICAgICAgXGxpc3BuYXJyb3dpbmcgPSAwcHQKKyAgICBcZWxzZQorICAgICAgXGxpc3BuYXJyb3dpbmcgPSAjMWVtCisgICAgXGZpCisgIFxmaQorfQorCislIEBmaXJzdHBhcmFncmFwaGluZGVudCBXT1JECislIElmIFdPUkQgaXMgYG5vbmUnLCB0aGVuIHN1cHByZXNzIGluZGVudGF0aW9uIG9mIHRoZSBmaXJzdCBwYXJhZ3JhcGgKKyUgYWZ0ZXIgYSBzZWN0aW9uIGhlYWRpbmcuICBJZiBXT1JEIGlzIGBpbnNlcnQnLCB0aGVuIGRvIGluZGVudCBhdCBzdWNoCislIHBhcmFncmFwaHMuCislCislIFRoZSBwYXJhZ3JhcGggaW5kZW50YXRpb24gaXMgc3VwcHJlc3NlZCBvciBub3QgYnkgY2FsbGluZworJSBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudCwgd2hpY2ggdGhlIHNlY3Rpb25pbmcgY29tbWFuZHMgZG8uCislIFdlIHN3aXRjaCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIGJhY2sgYW5kIGZvcnRoIGFjY29yZGluZyB0byBXT1JELgorJSBCeSBkZWZhdWx0LCB3ZSBzdXBwcmVzcyBpbmRlbnRhdGlvbi4KKyUKK1xkZWZcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudHtcZG9zdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50fQorXGRlZlxpbnNlcnR3b3Jke2luc2VydH0KKyUKK1xwYXJzZWFyZ2RlZlxmaXJzdHBhcmFncmFwaGluZGVudHslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxub25ld29yZAorICAgIFxsZXRcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudCA9IFxkb3N1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQKKyAgXGVsc2VcaWZ4XHRlbXBcaW5zZXJ0d29yZAorICAgIFxsZXRcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudCA9IFxyZWxheAorICBcZWxzZQorICAgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgICAgXGVycm1lc3NhZ2V7VW5rbm93biBAZmlyc3RwYXJhZ3JhcGhpbmRlbnQgb3B0aW9uIGBcdGVtcCd9JQorICBcZmlcZmkKK30KKworJSBIZXJlIGlzIGhvdyB3ZSBhY3R1YWxseSBzdXBwcmVzcyBpbmRlbnRhdGlvbi4gIFJlZGVmaW5lIFxldmVyeXBhciB0bworJSBca2VybiBiYWNrd2FyZHMgYnkgXHBhcmluZGVudCwgYW5kIHRoZW4gcmVzZXQgaXRzZWxmIHRvIGVtcHR5LgorJQorJSBXZSBhbHNvIG1ha2UgXGluZGVudCBpdHNlbGYgbm90IGFjdHVhbGx5IGRvIGFueXRoaW5nIHVudGlsIHRoZSBuZXh0CislIHBhcmFncmFwaC4KKyUKK1xnZGVmXGRvc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudHslCisgIFxnZGVmXGluZGVudHslCisgICAgXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudAorICAgIFxpbmRlbnQKKyAgfSUKKyAgXGdkZWZcbm9pbmRlbnR7JQorICAgIFxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnQKKyAgICBcbm9pbmRlbnQKKyAgfSUKKyAgXGdsb2JhbFxldmVyeXBhciA9IHslCisgICAgXGtlcm4gLVxwYXJpbmRlbnQKKyAgICBccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50CisgIH0lCit9CisKK1xnZGVmXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudHslCisgIFxnbG9iYWwgXGxldCBcaW5kZW50ID0gXHB0ZXhpbmRlbnQKKyAgXGdsb2JhbCBcbGV0IFxub2luZGVudCA9IFxwdGV4bm9pbmRlbnQKKyAgXGdsb2JhbCBcZXZlcnlwYXIgPSB7fSUKK30KKworCislIEBhc2lzIGp1c3QgeWllbGRzIGl0cyBhcmd1bWVudC4gIFVzZWQgd2l0aCBAdGFibGUsIGZvciBleGFtcGxlLgorJQorXGRlZlxhc2lzIzF7IzF9CisKKyUgQG1hdGggb3V0cHV0cyBpdHMgYXJndW1lbnQgaW4gbWF0aCBtb2RlLgorJQorJSBPbmUgY29tcGxpY2F0aW9uOiBfIHVzdWFsbHkgbWVhbnMgc3Vic2NyaXB0cywgYnV0IGl0IGNvdWxkIGFsc28gbWVhbgorJSBhbiBhY3R1YWwgXyBjaGFyYWN0ZXIsIGFzIGluIEBtYXRoe0B2YXJ7c29tZV92YXJpYWJsZX0gKyAxfS4gIFNvIG1ha2UKKyUgXyBhY3RpdmUsIGFuZCBkaXN0aW5ndWlzaCBieSBzZWVpbmcgaWYgdGhlIGN1cnJlbnQgZmFtaWx5IGlzIFxzbGZhbSwKKyUgd2hpY2ggaXMgd2hhdCBAdmFyIHVzZXMuCit7CisgIFxjYXRjb2RlYFxfID0gXGFjdGl2ZQorICBcZ2RlZlxtYXRodW5kZXJzY29yZXslCisgICAgXGNhdGNvZGVgXF89XGFjdGl2ZQorICAgIFxkZWZfe1xpZm51bVxmYW09XHNsZmFtIFxfXGVsc2Vcc2JcZml9JQorICB9Cit9CislIEFub3RoZXIgY29tcGxpY2F0aW9uOiB3ZSB3YW50IFxcIChhbmQgQFwpIHRvIG91dHB1dCBhIFwgY2hhcmFjdGVyLgorJSBGWUksIHBsYWluLnRleCB1c2VzIFxcIGFzIGEgdGVtcG9yYXJ5IGNvbnRyb2wgc2VxdWVuY2UgKHdoeT8pLCBidXQKKyUgdGhpcyBpcyBub3QgYWR2ZXJ0aXNlZCBhbmQgd2UgZG9uJ3QgY2FyZS4gIFRleGluZm8gZG9lcyBub3QKKyUgb3RoZXJ3aXNlIGRlZmluZSBAXC4KKyUKKyUgVGhlIFxtYXRoY2hhciBpcyBjbGFzcz0wPW9yZGluYXJ5LCBmYW1pbHk9Nz10dGZhbSwgcG9zaXRpb249NUM9XC4KK1xkZWZcbWF0aGJhY2tzbGFzaHtcaWZudW1cZmFtPVx0dGZhbSBcbWF0aGNoYXIiMDc1QyBcZWxzZVxiYWNrc2xhc2ggXGZpfQorJQorXGRlZlxtYXRoeyUKKyAgXHRleAorICBcbWF0aHVuZGVyc2NvcmUKKyAgXGxldFxcID0gXG1hdGhiYWNrc2xhc2gKKyAgXG1hdGhhY3RpdmUKKyAgJFxmaW5pc2htYXRoCit9CitcZGVmXGZpbmlzaG1hdGgjMXsjMSRcZW5kZ3JvdXB9ICAlIENsb3NlIHRoZSBncm91cCBvcGVuZWQgYnkgXHRleC4KKworJSBTb21lIGFjdGl2ZSBjaGFyYWN0ZXJzIChzdWNoIGFzIDwpIGFyZSBzcGFjZWQgZGlmZmVyZW50bHkgaW4gbWF0aC4KKyUgV2UgaGF2ZSB0byByZXNldCB0aGVpciBkZWZpbml0aW9ucyBpbiBjYXNlIHRoZSBAbWF0aCB3YXMgYW4gYXJndW1lbnQKKyUgdG8gYSBjb21tYW5kIHdoaWNoIHNldHMgdGhlIGNhdGNvZGVzIChzdWNoIGFzIEBpdGVtIG9yIEBzZWN0aW9uKS4KKyUKK3sKKyAgXGNhdGNvZGVgXiA9IFxhY3RpdmUKKyAgXGNhdGNvZGVgPCA9IFxhY3RpdmUKKyAgXGNhdGNvZGVgPiA9IFxhY3RpdmUKKyAgXGNhdGNvZGVgKyA9IFxhY3RpdmUKKyAgXGdkZWZcbWF0aGFjdGl2ZXslCisgICAgXGxldF4gPSBccHRleGhhdAorICAgIFxsZXQ8ID0gXHB0ZXhsZXNzCisgICAgXGxldD4gPSBccHRleGd0cgorICAgIFxsZXQrID0gXHB0ZXhwbHVzCisgIH0KK30KKworJSBAYnVsbGV0IGFuZCBAbWludXMgbmVlZCB0aGUgc2FtZSB0cmVhdG1lbnQgYXMgQG1hdGgsIGp1c3QgYWJvdmUuCitcZGVmXGJ1bGxldHskXHB0ZXhidWxsZXQkfQorXGRlZlxtaW51c3skLSR9CisKKyUgQGRvdHN7fSBvdXRwdXRzIGFuIGVsbGlwc2lzIHVzaW5nIHRoZSBjdXJyZW50IGZvbnQuCislIFdlIGRvIC41ZW0gcGVyIHBlcmlvZCBzbyB0aGF0IGl0IGhhcyB0aGUgc2FtZSBzcGFjaW5nIGluIGEgdHlwZXdyaXRlcgorJSBmb250IGFzIHRocmVlIGFjdHVhbCBwZXJpb2QgY2hhcmFjdGVycy4KKyUKK1xkZWZcZG90c3slCisgIFxsZWF2ZXZtb2RlCisgIFxoYm94IHRvIDEuNWVteyUKKyAgICBcaHNraXAgMHB0IHBsdXMgMC4yNWZpbAorICAgIC5caGZpbC5caGZpbC4lCisgICAgXGhza2lwIDBwdCBwbHVzIDAuNWZpbAorICB9JQorfQorCislIEBlbmRkb3Rze30gaXMgYW4gZW5kLW9mLXNlbnRlbmNlIGVsbGlwc2lzLgorJQorXGRlZlxlbmRkb3RzeyUKKyAgXGRvdHMKKyAgXHNwYWNlZmFjdG9yPVxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3IKK30KKworJSBAY29tbWF7fSBpcyBzbyBjb21tYXMgY2FuIGJlIGluc2VydGVkIGludG8gdGV4dCB3aXRob3V0IG1lc3NpbmcgdXAKKyUgVGV4aW5mbydzIHBhcnNpbmcuCislCitcbGV0XGNvbW1hID0gLAorCislIEByZWZpbGwgaXMgYSBuby1vcC4KK1xsZXRccmVmaWxsPVxyZWxheAorCislIElmIHdvcmtpbmcgb24gYSBsYXJnZSBkb2N1bWVudCBpbiBjaGFwdGVycywgaXQgaXMgY29udmVuaWVudCB0bworJSBiZSBhYmxlIHRvIGRpc2FibGUgaW5kZXhpbmcsIGNyb3NzLXJlZmVyZW5jaW5nLCBhbmQgY29udGVudHMsIGZvciB0ZXN0IHJ1bnMuCislIFRoaXMgaXMgZG9uZSB3aXRoIEBub3ZhbGlkYXRlIChiZWZvcmUgQHNldGZpbGVuYW1lKS4KKyUKK1xuZXdpZlxpZmxpbmtzIFxsaW5rc3RydWUgJSBieSBkZWZhdWx0IHdlIHdhbnQgdGhlIGF1eCBmaWxlcy4KK1xsZXRcbm92YWxpZGF0ZSA9IFxsaW5rc2ZhbHNlCisKKyUgQHNldGZpbGVuYW1lIGlzIGRvbmUgYXQgdGhlIGJlZ2lubmluZyBvZiBldmVyeSB0ZXhpbmZvIGZpbGUuCislIFNvIG9wZW4gaGVyZSB0aGUgZmlsZXMgd2UgbmVlZCB0byBoYXZlIG9wZW4gd2hpbGUgcmVhZGluZyB0aGUgaW5wdXQuCislIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gbWFrZSBhIC5mbXQgZmlsZSBmb3IgdGV4aW5mby4KK1xkZWZcc2V0ZmlsZW5hbWV7JQorICAgXGZpeGJhY2tzbGFzaCAgJSBUdXJuIG9mZiBoYWNrIHRvIHN3YWxsb3cgYFxpbnB1dCB0ZXhpbmZvJy4KKyAgIFxpZmxpbmtzCisgICAgIFx0cnlhdXhmaWxlCisgICAgICUgT3BlbiB0aGUgbmV3IGF1eCBmaWxlLiAgVGVYIHdpbGwgY2xvc2UgaXQgYXV0b21hdGljYWxseSBhdCBleGl0LgorICAgICBcaW1tZWRpYXRlXG9wZW5vdXRcYXV4ZmlsZT1cam9ibmFtZS5hdXgKKyAgIFxmaSAlIFxvcGVuaW5kaWNlcyBuZWVkcyB0byBkbyBzb21lIHdvcmsgaW4gYW55IGNhc2UuCisgICBcb3BlbmluZGljZXMKKyAgIFxsZXRcc2V0ZmlsZW5hbWU9XGNvbW1lbnQgJSBJZ25vcmUgZXh0cmEgQHNldGZpbGVuYW1lIGNtZHMuCisgICAlCisgICAlIElmIHRleGluZm8uY25mIGlzIHByZXNlbnQgb24gdGhlIHN5c3RlbSwgcmVhZCBpdC4KKyAgICUgVXNlZnVsIGZvciBzaXRlLXdpZGUgQGFmb3VycGFwZXIsIGV0Yy4KKyAgIFxvcGVuaW4gMSB0ZXhpbmZvLmNuZgorICAgXGlmZW9mIDEgXGVsc2UgXGlucHV0IHRleGluZm8uY25mIFxmaQorICAgXGNsb3NlaW4gMQorICAgJQorICAgXGNvbW1lbnQgJSBJZ25vcmUgdGhlIGFjdHVhbCBmaWxlbmFtZS4KK30KKworJSBDYWxsZWQgZnJvbSBcc2V0ZmlsZW5hbWUuCislCitcZGVmXG9wZW5pbmRpY2VzeyUKKyAgXG5ld2luZGV4e2NwfSUKKyAgXG5ld2NvZGVpbmRleHtmbn0lCisgIFxuZXdjb2RlaW5kZXh7dnJ9JQorICBcbmV3Y29kZWluZGV4e3RwfSUKKyAgXG5ld2NvZGVpbmRleHtreX0lCisgIFxuZXdjb2RlaW5kZXh7cGd9JQorfQorCislIEBieWUuCitcb3V0ZXJcZGVmXGJ5ZXtccGFnZWFsaWdubWFjcm9cdHJhY2luZ3N0YXRzPTFccHRleGVuZH0KKworCitcbWVzc2FnZXtwZGYsfQorJSBhZG9iZSBgcG9ydGFibGUnIGRvY3VtZW50IGZvcm1hdAorXG5ld2NvdW50XHRlbXBudW0KK1xuZXdjb3VudFxsbmtjb3VudAorXG5ld3Rva3NcZmlsZW5hbWUKK1xuZXdjb3VudFxmaWxlbmFtZWxlbmd0aAorXG5ld2NvdW50XHBnbgorXG5ld3Rva3NcdG9rc0EKK1xuZXd0b2tzXHRva3NCCitcbmV3dG9rc1x0b2tzQworXG5ld3Rva3NcdG9rc0QKK1xuZXdib3hcYm94QQorXG5ld2NvdW50XGNvdW50QQorXG5ld2lmXGlmcGRmCitcbmV3aWZcaWZwZGZtYWtlcGFnZWRlc3QKKworJSB3aGVuIHBkZnRleCBpcyBydW4gaW4gZHZpIG1vZGUsIFxwZGZvdXRwdXQgaXMgZGVmaW5lZCAoc28gXHBkZm91dHB1dD0xCislIGNhbiBiZSBzZXQpLiAgU28gd2UgdGVzdCBmb3IgXHJlbGF4IGFuZCAwIGFzIHdlbGwgYXMgXHVuZGVmaW5lZCwKKyUgYm9ycm93ZWQgZnJvbSBpZnBkZi5zdHkuCitcaWZ4XHBkZm91dHB1dFx1bmRlZmluZWQKK1xlbHNlCisgIFxpZnhccGRmb3V0cHV0XHJlbGF4CisgIFxlbHNlCisgICAgXGlmY2FzZVxwZGZvdXRwdXQKKyAgICBcZWxzZQorICAgICAgXHBkZnRydWUKKyAgICBcZmkKKyAgXGZpCitcZmkKKworJSBQREYgdXNlcyBQb3N0U2NyaXB0IHN0cmluZyBjb25zdGFudHMgZm9yIHRoZSBuYW1lcyBvZiB4cmVmIHRhcmdldHMsCislIGZvciBkaXNwbGF5IGluIHRoZSBvdXRsaW5lcywgYW5kIGluIG90aGVyIHBsYWNlcy4gIFRodXMsIHdlIGhhdmUgdG8KKyUgZG91YmxlIGFueSBiYWNrc2xhc2hlcy4gIE90aGVyd2lzZSwgYSBuYW1lIGxpa2UgIlxub2RlIiB3aWxsIGJlCislIGludGVycHJldGVkIGFzIGEgbmV3bGluZSAoXG4pLCBmb2xsb3dlZCBieSBvLCBkLCBlLiAgTm90IGdvb2QuCislIGh0dHA6Ly93d3cubnRnLm5sL3BpcGVybWFpbC9udGctcGRmdGV4LzIwMDQtSnVseS8wMDA2NTQuaHRtbAorJSAoYW5kIHJlbGF0ZWQgbWVzc2FnZXMsIHRoZSBmaW5hbCBvdXRjb21lIGlzIHRoYXQgaXQgaXMgdXAgdG8gdGhlIFRlWAorJSB1c2VyIHRvIGRvdWJsZSB0aGUgYmFja3NsYXNoZXMgYW5kIG90aGVyd2lzZSBtYWtlIHRoZSBzdHJpbmcgdmFsaWQsIHNvCislIHRoYXQncyB3aGF0IHdlIGRvKS4KKworJSBkb3VibGUgYWN0aXZlIGJhY2tzbGFzaGVzLgorJSAKK3tcY2F0Y29kZWBcQD0wIFxjYXRjb2RlYFxcPVxhY3RpdmUKKyBAZ2RlZkBhY3RpdmViYWNrc2xhc2hkb3VibGV7JQorICAgQGNhdGNvZGVgQFw9QGFjdGl2ZQorICAgQGxldFw9QGRvdWJsZWJhY2tzbGFzaH0KK30KKworJSBUbyBoYW5kbGUgcGFyZW5zLCB3ZSBtdXN0IGFkb3B0IGEgZGlmZmVyZW50IGFwcHJvYWNoLCBzaW5jZSBwYXJlbnMgYXJlCislIG5vdCBhY3RpdmUgY2hhcmFjdGVycy4gIGh5cGVycmVmLmR0eCAod2hpY2ggaGFzIHRoZSBzYW1lIHByb2JsZW0gYXMKKyUgdXMpIGhhbmRsZXMgaXQgd2l0aCB0aGlzIGFtYXppbmcgbWFjcm8gdG8gcmVwbGFjZSB0b2tlbnMuICBJJ3ZlCislIHRpbmtlcmVkIHdpdGggaXQgYSBsaXR0bGUgZm9yIHRleGluZm8sIGJ1dCBpdCdzIGRlZmluaXRlbHkgZnJvbSB0aGVyZS4KKyUgCislICMxIGlzIHRoZSB0b2tlbnMgdG8gcmVwbGFjZS4KKyUgIzIgaXMgdGhlIHJlcGxhY2VtZW50LgorJSAjMyBpcyB0aGUgY29udHJvbCBzZXF1ZW5jZSB3aXRoIHRoZSBzdHJpbmcuCislIAorXGRlZlxIeVBzZFN1YnN0IzEjMiMzeyUKKyAgXGRlZlxIeVBzZFJlcGxhY2UjIzEjMSMjMlxFTkR7JQorICAgICMjMSUKKyAgICBcaWZ4XFwjIzJcXCUKKyAgICBcZWxzZQorICAgICAgIzIlCisgICAgICBcSHlSZXR1cm5BZnRlckZpeyUKKyAgICAgICAgXEh5UHNkUmVwbGFjZSMjMlxFTkQKKyAgICAgIH0lCisgICAgXGZpCisgIH0lCisgIFx4ZGVmIzN7XGV4cGFuZGFmdGVyXEh5UHNkUmVwbGFjZSMzIzFcRU5EfSUKK30KK1xsb25nXGRlZlxIeVJldHVybkFmdGVyRmkjMVxmaXtcZmkjMX0KKworJSAjMSBpcyBhIGNvbnRyb2wgc2VxdWVuY2UgaW4gd2hpY2ggdG8gZG8gdGhlIHJlcGxhY2VtZW50cy4KK1xkZWZcYmFja3NsYXNocGFyZW5zIzF7JQorICBceGRlZiMxeyMxfSUgcmVkZWZpbmUgaXQgYXMgaXRzIGV4cGFuc2lvbjsgdGhlIGRlZmluaXRpb24gaXMgc2ltcGx5CisgICAgICAgICAgICAgJSBcbGFzdG5vZGUgd2hlbiBjYWxsZWQgZnJvbSBcc2V0cmVmIC0+IFxwZGZta2Rlc3QuCisgIFxIeVBzZFN1YnN0eyh9e1xyZWFsYmFja3NsYXNoKH17IzF9JQorICBcSHlQc2RTdWJzdHspfXtccmVhbGJhY2tzbGFzaCl9eyMxfSUKK30KKworXGlmcGRmCisgIFxpbnB1dCBwZGZjb2xvcgorICBccGRmY2F0YWxvZ3svUGFnZU1vZGUgL1VzZU91dGxpbmVzfSUKKyAgXGRlZlxkb3BkZmltYWdlIzEjMiMzeyUKKyAgICBcZGVmXGltYWdld2lkdGh7IzJ9JQorICAgIFxkZWZcaW1hZ2VoZWlnaHR7IzN9JQorICAgICUgd2l0aG91dCBcaW1tZWRpYXRlLCBwZGZ0ZXggc2VnIGZhdWx0cyB3aGVuIHRoZSBzYW1lIGltYWdlIGlzCisgICAgJSBpbmNsdWRlZCB0d2ljZS4gIChWZXJzaW9uIDMuMTQxNTktcHJlLTEuMC11bm9mZmljaWFsLTIwMDEwNzA0LikKKyAgICBcaWZudW1ccGRmdGV4dmVyc2lvbiA8IDE0CisgICAgICBcaW1tZWRpYXRlXHBkZmltYWdlCisgICAgXGVsc2UKKyAgICAgIFxpbW1lZGlhdGVccGRmeGltYWdlCisgICAgXGZpCisgICAgICBcaWZ4XGVtcHR5XGltYWdld2lkdGhcZWxzZSB3aWR0aCBcaW1hZ2V3aWR0aCBcZmkKKyAgICAgIFxpZnhcZW1wdHlcaW1hZ2VoZWlnaHRcZWxzZSBoZWlnaHQgXGltYWdlaGVpZ2h0IFxmaQorICAgICAgXGlmbnVtXHBkZnRleHZlcnNpb248MTMKKyAgICAgICAgICMxLnBkZiUKKyAgICAgICBcZWxzZQorICAgICAgICAgeyMxLnBkZn0lCisgICAgICAgXGZpCisgICAgXGlmbnVtXHBkZnRleHZlcnNpb24gPCAxNCBcZWxzZQorICAgICAgXHBkZnJlZnhpbWFnZSBccGRmbGFzdHhpbWFnZQorICAgIFxmaX0KKyAgXGRlZlxwZGZta2Rlc3QjMXt7JQorICAgICUgV2UgaGF2ZSB0byBzZXQgZHVtbWllcyBzbyBjb21tYW5kcyBzdWNoIGFzIEBjb2RlLCBhbmQgY2hhcmFjdGVycworICAgICUgc3VjaCBhcyBcLCBhcmVuJ3QgZXhwYW5kZWQgd2hlbiBwcmVzZW50IGluIGEgc2VjdGlvbiB0aXRsZS4KKyAgICBcYXRkdW1taWVzCisgICAgXGFjdGl2ZWJhY2tzbGFzaGRvdWJsZQorICAgIFxkZWZccGRmZGVzdG5hbWV7IzF9JQorICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmZGVzdG5hbWUKKyAgICBccGRmZGVzdCBuYW1le1xwZGZkZXN0bmFtZX0geHl6JQorICB9fSUKKyAgJQorICAlIHVzZWQgdG8gbWFyayB0YXJnZXQgbmFtZXM7IG11c3QgYmUgZXhwYW5kYWJsZS4KKyAgXGRlZlxwZGZta3BnbiMxeyMxfSUKKyAgJQorICBcbGV0XGxpbmtjb2xvciA9IFxCbHVlICAlIHdhcyBDeWFuLCBidXQgdGhhdCBzZWVtcyBsaWdodD8KKyAgXGRlZlxlbmRsaW5re1xCbGFja1xwZGZlbmRsaW5rfQorICAlIEFkZGluZyBvdXRsaW5lcyB0byBQREY7IG1hY3JvcyBmb3IgY2FsY3VsYXRpbmcgc3RydWN0dXJlIG9mIG91dGxpbmVzCisgICUgY29tZSBmcm9tIFBldHIgT2xzYWsKKyAgXGRlZlxleHBudW1iZXIjMXtcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSMxXGVuZGNzbmFtZVxyZWxheCAwJQorICAgIFxlbHNlIFxjc25hbWUjMVxlbmRjc25hbWUgXGZpfQorICBcZGVmXGFkdmFuY2VudW1iZXIjMXtcdGVtcG51bT1cZXhwbnVtYmVyeyMxfVxyZWxheAorICAgIFxhZHZhbmNlXHRlbXBudW0gYnkgMQorICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSMxXGVuZGNzbmFtZXtcdGhlXHRlbXBudW19fQorICAlCisgICUgIzEgaXMgdGhlIHNlY3Rpb24gdGV4dCwgd2hpY2ggaXMgd2hhdCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUKKyAgJSBvdXRsaW5lIGJ5IHRoZSBwZGYgdmlld2VyLiAgIzIgaXMgdGhlIHBkZiBleHByZXNzaW9uIGZvciB0aGUgbnVtYmVyCisgICUgb2Ygc3ViZW50cmllcyAob3IgZW1wdHksIGZvciBzdWJzdWJzZWN0aW9ucykuICAjMyBpcyB0aGUgbm9kZSB0ZXh0LAorICAlIHdoaWNoIG1pZ2h0IGJlIGVtcHR5IGlmIHRoaXMgdG9jIGVudHJ5IGhhZCBubyBjb3JyZXNwb25kaW5nIG5vZGUuCisgICUgIzQgaXMgdGhlIHBhZ2UgbnVtYmVyCisgICUKKyAgXGRlZlxkb3BkZm91dGxpbmUjMSMyIzMjNHslCisgICAgJSBHZW5lcmF0ZSBhIGxpbmsgdG8gdGhlIG5vZGUgdGV4dCBpZiB0aGF0IGV4aXN0czsgZWxzZSwgdXNlIHRoZQorICAgICUgcGFnZSBudW1iZXIuICBXZSBjb3VsZCBnZW5lcmF0ZSBhIGRlc3RpbmF0aW9uIGZvciB0aGUgc2VjdGlvbgorICAgICUgdGV4dCBpbiB0aGUgY2FzZSB3aGVyZSBhIHNlY3Rpb24gaGFzIG5vIG5vZGUsIGJ1dCBpdCBkb2Vzbid0CisgICAgJSBzZWVtIHdvcnRoIHRoZSB0cm91YmxlLCBzaW5jZSBtb3N0IGRvY3VtZW50cyBhcmUgbm9ybWFsbHkgc3RydWN0dXJlZC4KKyAgICBcZGVmXHBkZm91dGxpbmVkZXN0eyMzfSUKKyAgICBcaWZ4XHBkZm91dGxpbmVkZXN0XGVtcHR5CisgICAgICBcZGVmXHBkZm91dGxpbmVkZXN0eyM0fSUKKyAgICBcZWxzZQorICAgICAgJSBEb3VibGVkIGJhY2tzbGFzaGVzIGluIHRoZSBuYW1lLgorICAgICAge1xhY3RpdmViYWNrc2xhc2hkb3VibGUgXHhkZWZccGRmb3V0bGluZWRlc3R7IzN9JQorICAgICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmb3V0bGluZWRlc3R9JQorICAgIFxmaQorICAgICUKKyAgICAlIEFsc28gZG91YmxlIHRoZSBiYWNrc2xhc2hlcyBpbiB0aGUgZGlzcGxheSBzdHJpbmcuCisgICAge1xhY3RpdmViYWNrc2xhc2hkb3VibGUgXHhkZWZccGRmb3V0bGluZXRleHR7IzF9JQorICAgICBcYmFja3NsYXNocGFyZW5zXHBkZm91dGxpbmV0ZXh0fSUKKyAgICAlCisgICAgXHBkZm91dGxpbmUgZ290byBuYW1le1xwZGZta3BnbntccGRmb3V0bGluZWRlc3R9fSMye1xwZGZvdXRsaW5ldGV4dH0lCisgIH0KKyAgJQorICBcZGVmXHBkZm1ha2VvdXRsaW5lc3slCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgICUgVGhhbmgncyBoYWNrIC8gcHJvcGVyIGJyYWNlcyBpbiBib29rbWFya3MKKyAgICAgIFxlZGVmXG15bGJyYWNle1xpZnRydWUgXHN0cmluZ3tcZWxzZX1cZml9XGxldFx7PVxteWxicmFjZQorICAgICAgXGVkZWZcbXlyYnJhY2V7XGlmZmFsc2V7XGVsc2Vcc3RyaW5nfVxmaX1cbGV0XH09XG15cmJyYWNlCisgICAgICAlCisgICAgICAlIFJlYWQgdG9jIHNpbGVudGx5LCB0byBnZXQgY291bnRzIG9mIHN1YmVudHJpZXMgZm9yIFxwZGZvdXRsaW5lLgorICAgICAgXGRlZlxudW1jaGFwZW50cnkjIzEjIzIjIzMjIzR7JQorCVxkZWZcdGhpc2NoYXBudW17IyMyfSUKKwlcZGVmXHRoaXNzZWNudW17MH0lCisJXGRlZlx0aGlzc3Vic2VjbnVtezB9JQorICAgICAgfSUKKyAgICAgIFxkZWZcbnVtc2VjZW50cnkjIzEjIzIjIzMjIzR7JQorCVxhZHZhbmNlbnVtYmVye2NoYXBcdGhpc2NoYXBudW19JQorCVxkZWZcdGhpc3NlY251bXsjIzJ9JQorCVxkZWZcdGhpc3N1YnNlY251bXswfSUKKyAgICAgIH0lCisgICAgICBcZGVmXG51bXN1YnNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKwlcYWR2YW5jZW51bWJlcntzZWNcdGhpc3NlY251bX0lCisJXGRlZlx0aGlzc3Vic2VjbnVteyMjMn0lCisgICAgICB9JQorICAgICAgXGRlZlxudW1zdWJzdWJzZWNlbnRyeSMjMSMjMiMjMyMjNHslCisJXGFkdmFuY2VudW1iZXJ7c3Vic2VjXHRoaXNzdWJzZWNudW19JQorICAgICAgfSUKKyAgICAgIFxkZWZcdGhpc2NoYXBudW17MH0lCisgICAgICBcZGVmXHRoaXNzZWNudW17MH0lCisgICAgICBcZGVmXHRoaXNzdWJzZWNudW17MH0lCisgICAgICAlCisgICAgICAlIHVzZSBcZGVmIHJhdGhlciB0aGFuIFxsZXQgaGVyZSBiZWNhdXNlIHdlIHJlZGVmaW5lIFxjaGFwZW50cnkgZXQKKyAgICAgICUgYWwuIGEgc2Vjb25kIHRpbWUsIGJlbG93LgorICAgICAgXGRlZlxhcHBlbnRyeXtcbnVtY2hhcGVudHJ5fSUKKyAgICAgIFxkZWZcYXBwc2VjZW50cnl7XG51bXNlY2VudHJ5fSUKKyAgICAgIFxkZWZcYXBwc3Vic2VjZW50cnl7XG51bXN1YnNlY2VudHJ5fSUKKyAgICAgIFxkZWZcYXBwc3Vic3Vic2VjZW50cnl7XG51bXN1YnN1YnNlY2VudHJ5fSUKKyAgICAgIFxkZWZcdW5uY2hhcGVudHJ5e1xudW1jaGFwZW50cnl9JQorICAgICAgXGRlZlx1bm5zZWNlbnRyeXtcbnVtc2VjZW50cnl9JQorICAgICAgXGRlZlx1bm5zdWJzZWNlbnRyeXtcbnVtc3Vic2VjZW50cnl9JQorICAgICAgXGRlZlx1bm5zdWJzdWJzZWNlbnRyeXtcbnVtc3Vic3Vic2VjZW50cnl9JQorICAgICAgXHJlYWRkYXRhZmlsZXt0b2N9JQorICAgICAgJQorICAgICAgJSBSZWFkIHRvYyBzZWNvbmQgdGltZSwgdGhpcyB0aW1lIGFjdHVhbGx5IHByb2R1Y2luZyB0aGUgb3V0bGluZXMuCisgICAgICAlIFRoZSBgLScgbWVhbnMgdGFrZSB0aGUgXGV4cG51bWJlciBhcyB0aGUgYWJzb2x1dGUgbnVtYmVyIG9mCisgICAgICAlIHN1YmVudHJpZXMsIHdoaWNoIHdlIGNhbGN1bGF0ZWQgb24gb3VyIGZpcnN0IHJlYWQgb2YgdGhlIC50b2MgYWJvdmUuCisgICAgICAlCisgICAgICAlIFdlIHVzZSB0aGUgbm9kZSBuYW1lcyBhcyB0aGUgZGVzdGluYXRpb25zLgorICAgICAgXGRlZlxudW1jaGFwZW50cnkjIzEjIzIjIzMjIzR7JQorICAgICAgICBcZG9wZGZvdXRsaW5leyMjMX17Y291bnQtXGV4cG51bWJlcntjaGFwIyMyfX17IyMzfXsjIzR9fSUKKyAgICAgIFxkZWZcbnVtc2VjZW50cnkjIzEjIzIjIzMjIzR7JQorICAgICAgICBcZG9wZGZvdXRsaW5leyMjMX17Y291bnQtXGV4cG51bWJlcntzZWMjIzJ9fXsjIzN9eyMjNH19JQorICAgICAgXGRlZlxudW1zdWJzZWNlbnRyeSMjMSMjMiMjMyMjNHslCisgICAgICAgIFxkb3BkZm91dGxpbmV7IyMxfXtjb3VudC1cZXhwbnVtYmVye3N1YnNlYyMjMn19eyMjM317IyM0fX0lCisgICAgICBcZGVmXG51bXN1YnN1YnNlY2VudHJ5IyMxIyMyIyMzIyM0eyUgY291bnQgaXMgYWx3YXlzIHplcm8KKyAgICAgICAgXGRvcGRmb3V0bGluZXsjIzF9e317IyMzfXsjIzR9fSUKKyAgICAgICUKKyAgICAgICUgUERGIG91dGxpbmVzIGFyZSBkaXNwbGF5ZWQgdXNpbmcgc3lzdGVtIGZvbnRzLCBpbnN0ZWFkIG9mCisgICAgICAlIGRvY3VtZW50IGZvbnRzLiAgVGhlcmVmb3JlIHdlIGNhbm5vdCB1c2Ugc3BlY2lhbCBjaGFyYWN0ZXJzLAorICAgICAgJSBzaW5jZSB0aGUgZW5jb2RpbmcgaXMgdW5rbm93bi4gIEZvciBleGFtcGxlLCB0aGUgZW9nb25layBmcm9tCisgICAgICAlIExhdGluIDIgKDB4ZWEpIGdldHMgdHJhbnNsYXRlZCB0byBhIHwgY2hhcmFjdGVyLiAgSW5mbyBmcm9tCisgICAgICAlIFN0YXN6ZWsgV2F3cnlraWV3aWN6LCAxOSBKYW4gMjAwNCAwNDowOToyNCArMDEwMC4KKyAgICAgICUKKyAgICAgICUgeHggdG8gZG8gdGhpcyByaWdodCwgd2UgaGF2ZSB0byB0cmFuc2xhdGUgOC1iaXQgY2hhcmFjdGVycyB0bworICAgICAgJSB0aGVpciAiYmVzdCIgZXF1aXZhbGVudCwgYmFzZWQgb24gdGhlIEBkb2N1bWVudGVuY29kaW5nLiAgUmlnaHQKKyAgICAgICUgbm93LCBJIGd1ZXNzIHdlJ2xsIGp1c3QgbGV0IHRoZSBwZGYgcmVhZGVyIGhhdmUgaXRzIHdheS4KKyAgICAgIFxpbmRleG5vZm9udHMKKyAgICAgIFxzZXR1cGRhdGFmaWxlCisgICAgICBcY2F0Y29kZWBcXD1cYWN0aXZlIFxvdGhlcmJhY2tzbGFzaAorICAgICAgXGlucHV0IFxqb2JuYW1lLnRvYworICAgIFxlbmRncm91cAorICB9CisgICUKKyAgXGRlZlxza2lwc3BhY2VzIzF7XGRlZlxQUHsjMX1cZGVmXER7fH0lCisgICAgXGlmeFxQUFxEXGxldFxuZXh0c3BccmVsYXgKKyAgICBcZWxzZVxsZXRcbmV4dHNwXHNraXBzcGFjZXMKKyAgICAgIFxpZnhccFxzcGFjZVxlbHNlXGFkZHRva2Vuc3tcZmlsZW5hbWV9e1xQUH0lCisgICAgICAgIFxhZHZhbmNlXGZpbGVuYW1lbGVuZ3RoIGJ5IDEKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxuZXh0c3B9CisgIFxkZWZcZ2V0ZmlsZW5hbWUjMXtcZmlsZW5hbWVsZW5ndGg9MFxleHBhbmRhZnRlclxza2lwc3BhY2VzIzF8XHJlbGF4fQorICBcaWZudW1ccGRmdGV4dmVyc2lvbiA8IDE0CisgICAgXGxldCBcc3RhcnRsaW5rIFxwZGZhbm5vdGxpbmsKKyAgXGVsc2UKKyAgICBcbGV0IFxzdGFydGxpbmsgXHBkZnN0YXJ0bGluaworICBcZmkKKyAgJSBtYWtlIGEgbGl2ZSB1cmwgaW4gcGRmIG91dHB1dC4KKyAgXGRlZlxwZGZ1cmwjMXslCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgICUgaXQgc2VlbXMgd2UgcmVhbGx5IG5lZWQgeWV0IGFub3RoZXIgc2V0IG9mIGR1bW1pZXM7IGhhdmUgbm90CisgICAgICAlIHRyaWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBlYWNoIGNvbW1hbmQgc2hvdWxkIGRvIGluIHRoZSBjb250ZXh0CisgICAgICAlIG9mIEB1cmwuICBmb3Igbm93LCBqdXN0IG1ha2UgQC8gYSBuby1vcCwgdGhhdCdzIHRoZSBvbmx5IG9uZQorICAgICAgJSBwZW9wbGUgaGF2ZSBhY3R1YWxseSByZXBvcnRlZCBhIHByb2JsZW0gd2l0aC4KKyAgICAgICUgCisgICAgICBcbm9ybWFsdHVybm9mZmFjdGl2ZQorICAgICAgXGRlZlxAe0B9JQorICAgICAgXGxldFwvPVxlbXB0eQorICAgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICAgIFxsZWF2ZXZtb2RlXFJlZAorICAgICAgXHN0YXJ0bGluayBhdHRyey9Cb3JkZXIgWzAgMCAwXX0lCisgICAgICAgIHVzZXJ7L1N1YnR5cGUgL0xpbmsgL0EgPDwgL1MgL1VSSSAvVVJJICgjMSkgPj59JQorICAgIFxlbmRncm91cH0KKyAgXGRlZlxwZGZnZXR0b2tzIzEue1xzZXRib3hcYm94QT1caGJveHtcdG9rc0E9eyMxLn1cdG9rc0I9e31cbWFrZXRva3N9fQorICBcZGVmXGFkZHRva2VucyMxIzJ7XGVkZWZcYWRkdG9rc3tcbm9leHBhbmQjMT17XHRoZSMxIzJ9fVxhZGR0b2tzfQorICBcZGVmXGFkbiMxe1xhZGR0b2tlbnN7XHRva3NDfXsjMX1cZ2xvYmFsXGNvdW50QT0xXGxldFxuZXh0PVxtYWtldG9rc30KKyAgXGRlZlxwb3B0b2tzIzEjMnxFTkRUT0tTfHtcbGV0XGZpcnN0PSMxXHRva3NEPXsjMX1cdG9rc0E9eyMyfX0KKyAgXGRlZlxtYWtldG9rc3slCisgICAgXGV4cGFuZGFmdGVyXHBvcHRva3NcdGhlXHRva3NBfEVORFRPS1N8XHJlbGF4CisgICAgXGlmeFxmaXJzdDBcYWRuMAorICAgIFxlbHNlXGlmeFxmaXJzdDFcYWRuMSBcZWxzZVxpZnhcZmlyc3QyXGFkbjIgXGVsc2VcaWZ4XGZpcnN0M1xhZG4zCisgICAgXGVsc2VcaWZ4XGZpcnN0NFxhZG40IFxlbHNlXGlmeFxmaXJzdDVcYWRuNSBcZWxzZVxpZnhcZmlyc3Q2XGFkbjYKKyAgICBcZWxzZVxpZnhcZmlyc3Q3XGFkbjcgXGVsc2VcaWZ4XGZpcnN0OFxhZG44IFxlbHNlXGlmeFxmaXJzdDlcYWRuOQorICAgIFxlbHNlCisgICAgICBcaWZudW0wPVxjb3VudEFcZWxzZVxtYWtlbGlua1xmaQorICAgICAgXGlmeFxmaXJzdC5cbGV0XG5leHQ9XGRvbmVcZWxzZQorICAgICAgICBcbGV0XG5leHQ9XG1ha2V0b2tzCisgICAgICAgIFxhZGR0b2tlbnN7XHRva3NCfXtcdGhlXHRva3NEfQorICAgICAgICBcaWZ4XGZpcnN0LFxhZGR0b2tlbnN7XHRva3NCfXtcc3BhY2V9XGZpCisgICAgICBcZmkKKyAgICBcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmkKKyAgICBcbmV4dH0KKyAgXGRlZlxtYWtlbGlua3tcYWRkdG9rZW5ze1x0b2tzQn0lCisgICAge1xub2V4cGFuZFxwZGZsaW5re1x0aGVcdG9rc0N9fVx0b2tzQz17fVxnbG9iYWxcY291bnRBPTB9CisgIFxkZWZccGRmbGluayMxeyUKKyAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSBnb3RvIG5hbWV7XHBkZm1rcGdueyMxfX0KKyAgICBcbGlua2NvbG9yICMxXGVuZGxpbmt9CisgIFxkZWZcZG9uZXtcZWRlZlxzdHtcZ2xvYmFsXG5vZXhwYW5kXHRva3NBPXtcdGhlXHRva3NCfX1cc3R9CitcZWxzZQorICBcbGV0XHBkZm1rZGVzdCA9IFxnb2JibGUKKyAgXGxldFxwZGZ1cmwgPSBcZ29iYmxlCisgIFxsZXRcZW5kbGluayA9IFxyZWxheAorICBcbGV0XGxpbmtjb2xvciA9IFxyZWxheAorICBcbGV0XHBkZm1ha2VvdXRsaW5lcyA9IFxyZWxheAorXGZpICAlIFxpZnhccGRmb3V0cHV0CisKKworXG1lc3NhZ2V7Zm9udHMsfQorCislIENoYW5nZSB0aGUgY3VycmVudCBmb250IHN0eWxlIHRvICMxLCByZW1lbWJlcmluZyBpdCBpbiBcY3VyZm9udHN0eWxlLgorJSBGb3Igbm93LCB3ZSBkbyBub3QgYWNjdW11bGF0ZSBmb250IHN0eWxlczogQGJ7QGl7Zm9vfX0gcHJpbnRzIGZvbyBpbgorJSBpdGFsaWNzLCBub3QgYm9sZCBpdGFsaWNzLgorJQorXGRlZlxzZXRmb250c3R5bGUjMXslCisgIFxkZWZcY3VyZm9udHN0eWxleyMxfSUgbm90IGFzIGEgY29udHJvbCBzZXF1ZW5jZSwgYmVjYXVzZSB3ZSBhcmUgXGVkZWYnZC4KKyAgXGNzbmFtZSB0ZW4jMVxlbmRjc25hbWUgICUgY2hhbmdlIHRoZSBjdXJyZW50IGZvbnQKK30KKworJSBTZWxlY3QgIzEgZm9udHMgd2l0aCB0aGUgY3VycmVudCBzdHlsZS4KKyUKK1xkZWZcc2VsZWN0Zm9udHMjMXtcY3NuYW1lICMxZm9udHNcZW5kY3NuYW1lIFxjc25hbWVcY3VyZm9udHN0eWxlXGVuZGNzbmFtZX0KKworXGRlZlxybXtcZmFtPTAgXHNldGZvbnRzdHlsZXtybX19CitcZGVmXGl0e1xmYW09XGl0ZmFtIFxzZXRmb250c3R5bGV7aXR9fQorXGRlZlxzbHtcZmFtPVxzbGZhbSBcc2V0Zm9udHN0eWxle3NsfX0KK1xkZWZcYmZ7XGZhbT1cYmZmYW0gXHNldGZvbnRzdHlsZXtiZn19XGRlZlxiZnN0eWxlbmFtZXtiZn0KK1xkZWZcdHR7XGZhbT1cdHRmYW0gXHNldGZvbnRzdHlsZXt0dH19CisKKyUgVGV4aW5mbyBzb3J0IG9mIHN1cHBvcnRzIHRoZSBzYW5zIHNlcmlmIGZvbnQgc3R5bGUsIHdoaWNoIHBsYWluIFRlWCBkb2VzIG5vdC4KKyUgU28gd2Ugc2V0IHVwIGEgXHNmLgorXG5ld2ZhbVxzZmZhbQorXGRlZlxzZntcZmFtPVxzZmZhbSBcc2V0Zm9udHN0eWxle3NmfX0KK1xsZXRcbGkgPSBcc2YgJSBTb21ldGltZXMgd2UgY2FsbCBpdCBcbGksIG5vdCBcc2YuCisKKyUgV2UgZG9uJ3QgbmVlZCBtYXRoIGZvciB0aGlzIGZvbnQgc3R5bGUuCitcZGVmXHR0c2x7XHNldGZvbnRzdHlsZXt0dHNsfX0KKworJSBEZWZhdWx0IGxlYWRpbmcuCitcbmV3ZGltZW5cdGV4dGxlYWRpbmcgIFx0ZXh0bGVhZGluZyA9IDEzLjJwdAorCislIFNldCB0aGUgYmFzZWxpbmVza2lwIHRvICMxLCBhbmQgdGhlIGxpbmVza2lwIGFuZCBzdHJ1dCBzaXplCislIGNvcnJlc3BvbmRpbmdseS4gIFRoZXJlIGlzIG5vIGRlZXAgbWVhbmluZyBiZWhpbmQgdGhlc2UgbWFnaWMgbnVtYmVycworJSB1c2VkIGFzIGZhY3RvcnM7IHRoZXkganVzdCBtYXRjaCAoY2xvc2VseSBlbm91Z2gpIHdoYXQgS251dGggZGVmaW5lZC4KKyUKK1xkZWZcbGluZXNraXBmYWN0b3J7LjA4MzMzfQorXGRlZlxzdHJ1dGhlaWdodHBlcmNlbnR7LjcwODMzfQorXGRlZlxzdHJ1dGRlcHRocGVyY2VudCB7LjI5MTY3fQorJQorXGRlZlxzZXRsZWFkaW5nIzF7JQorICBcbm9ybWFsYmFzZWxpbmVza2lwID0gIzFccmVsYXgKKyAgXG5vcm1hbGxpbmVza2lwID0gXGxpbmVza2lwZmFjdG9yXG5vcm1hbGJhc2VsaW5lc2tpcAorICBcbm9ybWFsYmFzZWxpbmVzCisgIFxzZXRib3hcc3RydXRib3ggPVxoYm94eyUKKyAgICBcdnJ1bGUgd2lkdGgwcHQgaGVpZ2h0XHN0cnV0aGVpZ2h0cGVyY2VudFxiYXNlbGluZXNraXAKKyAgICAgICAgICAgICAgICAgICAgZGVwdGggXHN0cnV0ZGVwdGhwZXJjZW50IFxiYXNlbGluZXNraXAKKyAgfSUKK30KKworJSBTZXQgdGhlIGZvbnQgbWFjcm8gIzEgdG8gdGhlIGZvbnQgbmFtZWQgIzIsIGFkZGluZyBvbiB0aGUKKyUgc3BlY2lmaWVkIGZvbnQgcHJlZml4IChub3JtYWxseSBgY20nKS4KKyUgIzMgaXMgdGhlIGZvbnQncyBkZXNpZ24gc2l6ZSwgIzQgaXMgYSBzY2FsZSBmYWN0b3IKK1xkZWZcc2V0Zm9udCMxIzIjMyM0e1xmb250IzE9XGZvbnRwcmVmaXgjMiMzIHNjYWxlZCAjNH0KKworJSBVc2UgY20gYXMgdGhlIGRlZmF1bHQgZm9udCBwcmVmaXguCislIFRvIHNwZWNpZnkgdGhlIGZvbnQgcHJlZml4LCB5b3UgbXVzdCBkZWZpbmUgXGZvbnRwcmVmaXgKKyUgYmVmb3JlIHlvdSByZWFkIGluIHRleGluZm8udGV4LgorXGlmeFxmb250cHJlZml4XHVuZGVmaW5lZAorXGRlZlxmb250cHJlZml4e2NtfQorXGZpCislIFN1cHBvcnQgZm9udCBmYW1pbGllcyB0aGF0IGRvbid0IHVzZSB0aGUgc2FtZSBuYW1pbmcgc2NoZW1lIGFzIENNLgorXGRlZlxybXNoYXBle3J9CitcZGVmXHJtYnNoYXBle2J4fSAgICAgICAgICAgICAgICV3aGVyZSB0aGUgbm9ybWFsIGZhY2UgaXMgYm9sZAorXGRlZlxiZnNoYXBle2J9CitcZGVmXGJ4c2hhcGV7Ynh9CitcZGVmXHR0c2hhcGV7dHR9CitcZGVmXHR0YnNoYXBle3R0fQorXGRlZlx0dHNsc2hhcGV7c2x0dH0KK1xkZWZcaXRzaGFwZXt0aX0KK1xkZWZcaXRic2hhcGV7Ynh0aX0KK1xkZWZcc2xzaGFwZXtzbH0KK1xkZWZcc2xic2hhcGV7YnhzbH0KK1xkZWZcc2ZzaGFwZXtzc30KK1xkZWZcc2Zic2hhcGV7c3N9CitcZGVmXHNjc2hhcGV7Y3NjfQorXGRlZlxzY2JzaGFwZXtjc2N9CisKKyUgVGV4dCBmb250cyAoMTEuMnB0LCBtYWdzdGVwMSkuCitcZGVmXHRleHRub21pbmFsc2l6ZXsxMXB0fQorXGVkZWZcbWFpbm1hZ3N0ZXB7XG1hZ3N0ZXBoYWxmfQorXHNldGZvbnRcdGV4dHJtXHJtc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHR0dFx0dHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0YmZcYmZzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dGl0XGl0c2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHRzbFxzbHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0c2Zcc2ZzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHNjXHNjc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHR0dHNsXHR0c2xzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXGZvbnRcdGV4dGk9Y21taTEwIHNjYWxlZCBcbWFpbm1hZ3N0ZXAKK1xmb250XHRleHRzeT1jbXN5MTAgc2NhbGVkIFxtYWlubWFnc3RlcAorCislIEEgZmV3IGZvbnRzIGZvciBAZGVmdW4gbmFtZXMgYW5kIGFyZ3MuCitcc2V0Zm9udFxkZWZiZlxiZnNoYXBlezEwfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxkZWZ0dFx0dHNoYXBlezEwfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxkZWZ0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXAxfQorXGRlZlxkZntcbGV0XHRlbnR0PVxkZWZ0dCBcbGV0XHRlbmJmID0gXGRlZmJmIFxsZXRcdGVudHRzbD1cZGVmdHRzbCBcYmZ9CisKKyUgRm9udHMgZm9yIGluZGljZXMsIGZvb3Rub3Rlcywgc21hbGwgZXhhbXBsZXMgKDlwdCkuCitcZGVmXHNtYWxsbm9taW5hbHNpemV7OXB0fQorXHNldGZvbnRcc21hbGxybVxybXNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHR0XHR0c2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsYmZcYmZzaGFwZXsxMH17OTAwfQorXHNldGZvbnRcc21hbGxpdFxpdHNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHNsXHNsc2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsc2Zcc2ZzaGFwZXs5fXsxMDAwfQorXHNldGZvbnRcc21hbGxzY1xzY3NoYXBlezEwfXs5MDB9Citcc2V0Zm9udFxzbWFsbHR0c2xcdHRzbHNoYXBlezEwfXs5MDB9CitcZm9udFxzbWFsbGk9Y21taTkKK1xmb250XHNtYWxsc3k9Y21zeTkKKworJSBGb250cyBmb3Igc21hbGwgZXhhbXBsZXMgKDhwdCkuCitcZGVmXHNtYWxsZXJub21pbmFsc2l6ZXs4cHR9Citcc2V0Zm9udFxzbWFsbGVycm1ccm1zaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnR0XHR0c2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJiZlxiZnNoYXBlezEwfXs4MDB9Citcc2V0Zm9udFxzbWFsbGVyaXRcaXRzaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnNsXHNsc2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJzZlxzZnNoYXBlezh9ezEwMDB9Citcc2V0Zm9udFxzbWFsbGVyc2Ncc2NzaGFwZXsxMH17ODAwfQorXHNldGZvbnRcc21hbGxlcnR0c2xcdHRzbHNoYXBlezEwfXs4MDB9CitcZm9udFxzbWFsbGVyaT1jbW1pOAorXGZvbnRcc21hbGxlcnN5PWNtc3k4CisKKyUgRm9udHMgZm9yIHRpdGxlIHBhZ2UgKDIwLjRwdCk6CitcZGVmXHRpdGxlbm9taW5hbHNpemV7MjBwdH0KK1xzZXRmb250XHRpdGxlcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwM30KK1xzZXRmb250XHRpdGxlaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxlc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxldHRcdHRic2hhcGV7MTJ9e1xtYWdzdGVwM30KK1xzZXRmb250XHRpdGxldHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxlc2Zcc2Zic2hhcGV7MTd9e1xtYWdzdGVwMX0KK1xsZXRcdGl0bGViZj1cdGl0bGVybQorXHNldGZvbnRcdGl0bGVzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXA0fQorXGZvbnRcdGl0bGVpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAzCitcZm9udFx0aXRsZXN5PWNtc3kxMCBzY2FsZWQgXG1hZ3N0ZXA0CitcZGVmXGF1dGhvcnJte1xzZWNybX0KK1xkZWZcYXV0aG9ydHR7XHNlY3R0fQorCislIENoYXB0ZXIgKGFuZCB1bm51bWJlcmVkKSBmb250cyAoMTcuMjhwdCkuCitcZGVmXGNoYXBub21pbmFsc2l6ZXsxN3B0fQorXHNldGZvbnRcY2hhcHJtXHJtYnNoYXBlezEyfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxjaGFwaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwM30KK1xzZXRmb250XGNoYXBzbFxzbGJzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXHNldGZvbnRcY2hhcHR0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxjaGFwdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwM30KK1xzZXRmb250XGNoYXBzZlxzZmJzaGFwZXsxN317MTAwMH0KK1xsZXRcY2hhcGJmPVxjaGFwcm0KK1xzZXRmb250XGNoYXBzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXGZvbnRcY2hhcGk9Y21taTEyIHNjYWxlZCBcbWFnc3RlcDIKK1xmb250XGNoYXBzeT1jbXN5MTAgc2NhbGVkIFxtYWdzdGVwMworCislIFNlY3Rpb24gZm9udHMgKDE0LjRwdCkuCitcZGVmXHNlY25vbWluYWxzaXplezE0cHR9Citcc2V0Zm9udFxzZWNybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXAxfQorXHNldGZvbnRcc2VjaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XHNlY3NsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxzZWN0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAxfQorXHNldGZvbnRcc2VjdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XHNlY3NmXHNmYnNoYXBlezEyfXtcbWFnc3RlcDF9CitcbGV0XHNlY2JmXHNlY3JtCitcc2V0Zm9udFxzZWNzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXAyfQorXGZvbnRcc2VjaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwMQorXGZvbnRcc2Vjc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDIKKworJSBTdWJzZWN0aW9uIGZvbnRzICgxMy4xNXB0KS4KK1xkZWZcc3NlY25vbWluYWxzaXplezEzcHR9Citcc2V0Zm9udFxzc2Vjcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwaGFsZn0KK1xzZXRmb250XHNzZWNpdFxpdGJzaGFwZXsxMH17MTMxNX0KK1xzZXRmb250XHNzZWNzbFxzbGJzaGFwZXsxMH17MTMxNX0KK1xzZXRmb250XHNzZWN0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXBoYWxmfQorXHNldGZvbnRcc3NlY3R0c2xcdHRzbHNoYXBlezEwfXsxMzE1fQorXHNldGZvbnRcc3NlY3NmXHNmYnNoYXBlezEyfXtcbWFnc3RlcGhhbGZ9CitcbGV0XHNzZWNiZlxzc2Vjcm0KK1xzZXRmb250XHNzZWNzY1xzY2JzaGFwZXsxMH17MTMxNX0KK1xmb250XHNzZWNpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXBoYWxmCitcZm9udFxzc2Vjc3k9Y21zeTEwIHNjYWxlZCAxMzE1CisKKyUgUmVkdWNlZCBmb250cyBmb3IgQGFjcm8gaW4gdGV4dCAoMTBwdCkuCitcZGVmXHJlZHVjZWRub21pbmFsc2l6ZXsxMHB0fQorXHNldGZvbnRccmVkdWNlZHJtXHJtc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2VkdHRcdHRzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWRiZlxiZnNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZGl0XGl0c2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2Vkc2xcc2xzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWRzZlxzZnNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZHNjXHNjc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2VkdHRzbFx0dHNsc2hhcGV7MTB9ezEwMDB9CitcZm9udFxyZWR1Y2VkaT1jbW1pMTAKK1xmb250XHJlZHVjZWRzeT1jbXN5MTAKKworJSBJbiBvcmRlciBmb3IgdGhlIGZvbnQgY2hhbmdlcyB0byBhZmZlY3QgbW9zdCBtYXRoIHN5bWJvbHMgYW5kIGxldHRlcnMsCislIHdlIGhhdmUgdG8gZGVmaW5lIHRoZSBcdGV4dGZvbnQgb2YgdGhlIHN0YW5kYXJkIGZhbWlsaWVzLiAgU2luY2UKKyUgdGV4aW5mbyBkb2Vzbid0IGFsbG93IGZvciBwcm9kdWNpbmcgc3Vic2NyaXB0cyBhbmQgc3VwZXJzY3JpcHRzIGV4Y2VwdAorJSBpbiB0aGUgbWFpbiB0ZXh0LCB3ZSBkb24ndCBib3RoZXIgdG8gcmVzZXQgXHNjcmlwdGZvbnQgYW5kCislIFxzY3JpcHRzY3JpcHRmb250ICh3aGljaCB3b3VsZCBhbHNvIHJlcXVpcmUgbG9hZGluZyBhIGxvdCBtb3JlIGZvbnRzKS4KKyUKK1xkZWZccmVzZXRtYXRoZm9udHN7JQorICBcdGV4dGZvbnQwPVx0ZW5ybSBcdGV4dGZvbnQxPVx0ZW5pIFx0ZXh0Zm9udDI9XHRlbnN5CisgIFx0ZXh0Zm9udFxpdGZhbT1cdGVuaXQgXHRleHRmb250XHNsZmFtPVx0ZW5zbCBcdGV4dGZvbnRcYmZmYW09XHRlbmJmCisgIFx0ZXh0Zm9udFx0dGZhbT1cdGVudHQgXHRleHRmb250XHNmZmFtPVx0ZW5zZgorfQorCislIFRoZSBmb250LWNoYW5naW5nIGNvbW1hbmRzIHJlZGVmaW5lIHRoZSBtZWFuaW5ncyBvZiBcdGVuU1RZTEUsIGluc3RlYWQKKyUgb2YganVzdCBcU1RZTEUuICBXZSBkbyB0aGlzIGJlY2F1c2UgXFNUWUxFIG5lZWRzIHRvIGFsc28gc2V0IHRoZQorJSBjdXJyZW50IFxmYW0gZm9yIG1hdGggbW9kZS4gIE91ciBcU1RZTEUgKGUuZy4sIFxybSkgY29tbWFuZHMgaGFyZHdpcmUKKyUgXHRlblNUWUxFIHRvIHNldCB0aGUgY3VycmVudCBmb250LgorJQorJSBFYWNoIGZvbnQtY2hhbmdpbmcgY29tbWFuZCBhbHNvIHNldHMgdGhlIG5hbWVzIFxsc2l6ZSAob25lIHNpemUgbG93ZXIpCislIGFuZCBcbGxsc2l6ZSAodGhyZWUgc2l6ZXMgbG93ZXIpLiAgVGhlc2UgcmVsYXRpdmUgY29tbWFuZHMgYXJlIHVzZWQgaW4KKyUgdGhlIExhVGVYIGxvZ28gYW5kIGFjcm9ueW1zLgorJQorJSBUaGlzIGFsbCBuZWVkcyBnZW5lcmFsaXppbmcsIGJhZGx5LgorJQorXGRlZlx0ZXh0Zm9udHN7JQorICBcbGV0XHRlbnJtPVx0ZXh0cm0gXGxldFx0ZW5pdD1cdGV4dGl0IFxsZXRcdGVuc2w9XHRleHRzbAorICBcbGV0XHRlbmJmPVx0ZXh0YmYgXGxldFx0ZW50dD1cdGV4dHR0IFxsZXRcc21hbGxjYXBzPVx0ZXh0c2MKKyAgXGxldFx0ZW5zZj1cdGV4dHNmIFxsZXRcdGVuaT1cdGV4dGkgXGxldFx0ZW5zeT1cdGV4dHN5CisgIFxsZXRcdGVudHRzbD1cdGV4dHR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXt0ZXh0fSUKKyAgXGRlZlxsc2l6ZXtyZWR1Y2VkfVxkZWZcbGxsc2l6ZXtzbWFsbGVyfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5ne1x0ZXh0bGVhZGluZ319CitcZGVmXHRpdGxlZm9udHN7JQorICBcbGV0XHRlbnJtPVx0aXRsZXJtIFxsZXRcdGVuaXQ9XHRpdGxlaXQgXGxldFx0ZW5zbD1cdGl0bGVzbAorICBcbGV0XHRlbmJmPVx0aXRsZWJmIFxsZXRcdGVudHQ9XHRpdGxldHQgXGxldFxzbWFsbGNhcHM9XHRpdGxlc2MKKyAgXGxldFx0ZW5zZj1cdGl0bGVzZiBcbGV0XHRlbmk9XHRpdGxlaSBcbGV0XHRlbnN5PVx0aXRsZXN5CisgIFxsZXRcdGVudHRzbD1cdGl0bGV0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7dGl0bGV9JQorICBcZGVmXGxzaXple2NoYXB9XGRlZlxsbGxzaXple3N1YnNlY30lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3syNXB0fX0KK1xkZWZcdGl0bGVmb250IzF7e1x0aXRsZWZvbnRzXHJtICMxfX0KK1xkZWZcY2hhcGZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cY2hhcHJtIFxsZXRcdGVuaXQ9XGNoYXBpdCBcbGV0XHRlbnNsPVxjaGFwc2wKKyAgXGxldFx0ZW5iZj1cY2hhcGJmIFxsZXRcdGVudHQ9XGNoYXB0dCBcbGV0XHNtYWxsY2Fwcz1cY2hhcHNjCisgIFxsZXRcdGVuc2Y9XGNoYXBzZiBcbGV0XHRlbmk9XGNoYXBpIFxsZXRcdGVuc3k9XGNoYXBzeQorICBcbGV0XHRlbnR0c2w9XGNoYXB0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7Y2hhcH0lCisgIFxkZWZcbHNpemV7c2VjfVxkZWZcbGxsc2l6ZXt0ZXh0fSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezE5cHR9fQorXGRlZlxzZWNmb250c3slCisgIFxsZXRcdGVucm09XHNlY3JtIFxsZXRcdGVuaXQ9XHNlY2l0IFxsZXRcdGVuc2w9XHNlY3NsCisgIFxsZXRcdGVuYmY9XHNlY2JmIFxsZXRcdGVudHQ9XHNlY3R0IFxsZXRcc21hbGxjYXBzPVxzZWNzYworICBcbGV0XHRlbnNmPVxzZWNzZiBcbGV0XHRlbmk9XHNlY2kgXGxldFx0ZW5zeT1cc2Vjc3kKKyAgXGxldFx0ZW50dHNsPVxzZWN0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7c2VjfSUKKyAgXGRlZlxsc2l6ZXtzdWJzZWN9XGRlZlxsbGxzaXple3JlZHVjZWR9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTZwdH19CitcZGVmXHN1YnNlY2ZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cc3NlY3JtIFxsZXRcdGVuaXQ9XHNzZWNpdCBcbGV0XHRlbnNsPVxzc2Vjc2wKKyAgXGxldFx0ZW5iZj1cc3NlY2JmIFxsZXRcdGVudHQ9XHNzZWN0dCBcbGV0XHNtYWxsY2Fwcz1cc3NlY3NjCisgIFxsZXRcdGVuc2Y9XHNzZWNzZiBcbGV0XHRlbmk9XHNzZWNpIFxsZXRcdGVuc3k9XHNzZWNzeQorICBcbGV0XHRlbnR0c2w9XHNzZWN0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7c3NlY30lCisgIFxkZWZcbHNpemV7dGV4dH1cZGVmXGxsbHNpemV7c21hbGx9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTVwdH19CitcbGV0XHN1YnN1YnNlY2ZvbnRzID0gXHN1YnNlY2ZvbnRzCitcZGVmXHJlZHVjZWRmb250c3slCisgIFxsZXRcdGVucm09XHJlZHVjZWRybSBcbGV0XHRlbml0PVxyZWR1Y2VkaXQgXGxldFx0ZW5zbD1ccmVkdWNlZHNsCisgIFxsZXRcdGVuYmY9XHJlZHVjZWRiZiBcbGV0XHRlbnR0PVxyZWR1Y2VkdHQgXGxldFxyZWR1Y2VkY2Fwcz1ccmVkdWNlZHNjCisgIFxsZXRcdGVuc2Y9XHJlZHVjZWRzZiBcbGV0XHRlbmk9XHJlZHVjZWRpIFxsZXRcdGVuc3k9XHJlZHVjZWRzeQorICBcbGV0XHRlbnR0c2w9XHJlZHVjZWR0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7cmVkdWNlZH0lCisgIFxkZWZcbHNpemV7c21hbGx9XGRlZlxsbGxzaXple3NtYWxsZXJ9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTAuNXB0fX0KK1xkZWZcc21hbGxmb250c3slCisgIFxsZXRcdGVucm09XHNtYWxscm0gXGxldFx0ZW5pdD1cc21hbGxpdCBcbGV0XHRlbnNsPVxzbWFsbHNsCisgIFxsZXRcdGVuYmY9XHNtYWxsYmYgXGxldFx0ZW50dD1cc21hbGx0dCBcbGV0XHNtYWxsY2Fwcz1cc21hbGxzYworICBcbGV0XHRlbnNmPVxzbWFsbHNmIFxsZXRcdGVuaT1cc21hbGxpIFxsZXRcdGVuc3k9XHNtYWxsc3kKKyAgXGxldFx0ZW50dHNsPVxzbWFsbHR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtzbWFsbH0lCisgIFxkZWZcbHNpemV7c21hbGxlcn1cZGVmXGxsbHNpemV7c21hbGxlcn0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxMC41cHR9fQorXGRlZlxzbWFsbGVyZm9udHN7JQorICBcbGV0XHRlbnJtPVxzbWFsbGVycm0gXGxldFx0ZW5pdD1cc21hbGxlcml0IFxsZXRcdGVuc2w9XHNtYWxsZXJzbAorICBcbGV0XHRlbmJmPVxzbWFsbGVyYmYgXGxldFx0ZW50dD1cc21hbGxlcnR0IFxsZXRcc21hbGxjYXBzPVxzbWFsbGVyc2MKKyAgXGxldFx0ZW5zZj1cc21hbGxlcnNmIFxsZXRcdGVuaT1cc21hbGxlcmkgXGxldFx0ZW5zeT1cc21hbGxlcnN5CisgIFxsZXRcdGVudHRzbD1cc21hbGxlcnR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtzbWFsbGVyfSUKKyAgXGRlZlxsc2l6ZXtzbWFsbGVyfVxkZWZcbGxsc2l6ZXtzbWFsbGVyfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezkuNXB0fX0KKworJSBTZXQgdGhlIGZvbnRzIHRvIHVzZSB3aXRoIHRoZSBAc21hbGwuLi4gZW52aXJvbm1lbnRzLgorXGxldFxzbWFsbGV4YW1wbGVmb250cyA9IFxzbWFsbGZvbnRzCisKKyUgQWJvdXQgXHNtYWxsZXhhbXBsZWZvbnRzLiAgSWYgd2UgdXNlIFxzbWFsbGZvbnRzICg5cHQpLCBAc21hbGxleGFtcGxlCislIGNhbiBmaXQgdGhpcyBtYW55IGNoYXJhY3RlcnM6CislICAgOC41eDExPTg2ICAgc21hbGxib29rPTcyICBhND05MCAgYTU9NjkKKyUgSWYgd2UgdXNlIFxzY3JpcHRmb250cyAoOHB0KSwgdGhlbiB3ZSBjYW4gZml0IHRoaXMgbWFueSBjaGFyYWN0ZXJzOgorJSAgIDguNXgxMT05MCsgIHNtYWxsYm9vaz04MCAgYTQ9OTArICBhNT03NworJSBGb3IgbWUsIHN1YmplY3RpdmVseSwgdGhlIGZldyBleHRyYSBjaGFyYWN0ZXJzIHRoYXQgZml0IGFyZW4ndCB3b3J0aAorJSB0aGUgYWRkaXRpb25hbCBzbWFsbG5lc3Mgb2YgOHB0LiAgU28gSSdtIG1ha2luZyB0aGUgZGVmYXVsdCA5cHQuCislCislIEJ5IHRoZSB3YXksIGZvciBjb21wYXJpc29uLCBoZXJlJ3Mgd2hhdCBmaXRzIHdpdGggQGV4YW1wbGUgKDEwcHQpOgorJSAgIDguNXgxMT03MSAgc21hbGxib29rPTYwICBhND03NSAgYTU9NTgKKyUKKyUgSSB3aXNoIHRoZSBVU0EgdXNlZCBBNCBwYXBlci4KKyUgLS1rYXJsLCAyNGphbjAzLgorCisKKyUgU2V0IHVwIHRoZSBkZWZhdWx0IGZvbnRzLCBzbyB3ZSBjYW4gdXNlIHRoZW0gZm9yIGNyZWF0aW5nIGJveGVzLgorJQorXHRleHRmb250cyBccm0KKworJSBEZWZpbmUgdGhlc2Ugc28gdGhleSBjYW4gYmUgZWFzaWx5IGNoYW5nZWQgZm9yIG90aGVyIGZvbnRzLgorXGRlZlxhbmdsZWxlZnR7JFxsYW5nbGUkfQorXGRlZlxhbmdsZXJpZ2h0eyRccmFuZ2xlJH0KKworJSBDb3VudCBkZXB0aCBpbiBmb250LWNoYW5nZXMsIGZvciBlcnJvciBjaGVja3MKK1xuZXdjb3VudFxmb250ZGVwdGggXGZvbnRkZXB0aD0wCisKKyUgRm9udHMgZm9yIHNob3J0IHRhYmxlIG9mIGNvbnRlbnRzLgorXHNldGZvbnRcc2hvcnRjb250cm1ccm1zaGFwZXsxMn17MTAwMH0KK1xzZXRmb250XHNob3J0Y29udGJmXGJmc2hhcGV7MTB9e1xtYWdzdGVwMX0gICUgbm8gY21iMTIKK1xzZXRmb250XHNob3J0Y29udHNsXHNsc2hhcGV7MTJ9ezEwMDB9Citcc2V0Zm9udFxzaG9ydGNvbnR0dFx0dHNoYXBlezEyfXsxMDAwfQorCislJSBBZGQgc2NyaWJlLWxpa2UgZm9udCBlbnZpcm9ubWVudHMsIHBsdXMgQGwgZm9yIGlubGluZSBsaXNwICh1c3VhbGx5IHNhbnMKKyUlIHNlcmlmKSBhbmQgQGlpIGZvciBUZVggaXRhbGljCisKKyUgXHNtYXJ0aXRhbGlje0FSR30gb3V0cHV0cyBhcmcgaW4gaXRhbGljcywgZm9sbG93ZWQgYnkgYW4gaXRhbGljIGNvcnJlY3Rpb24KKyUgdW5sZXNzIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGlzIHN1Y2ggYXMgbm90IHRvIG5lZWQgb25lLgorXGRlZlxzbWFydGl0YWxpY3h7XGlmeFxuZXh0LFxlbHNlXGlmeFxuZXh0LVxlbHNlXGlmeFxuZXh0LlxlbHNlCisgICAgICAgICAgICAgICAgICAgIFxwdGV4c2xhc2hcZmlcZmlcZml9CitcZGVmXHNtYXJ0c2xhbnRlZCMxe3tcaWZ1c2luZ3R0XHR0c2xcc2wgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KK1xkZWZcc21hcnRpdGFsaWMjMXt7XGlmdXNpbmd0dFx0dHNsXGl0ICMxfVxmdXR1cmVsZXRcbmV4dFxzbWFydGl0YWxpY3h9CisKKyUgbGlrZSBcc21hcnRzbGFudGVkIGV4Y2VwdCB1bmNvbmRpdGlvbmFsbHkgdXNlcyBcdHRzbC4KKyUgQHZhciBpcyBzZXQgdG8gdGhpcyBmb3IgZGVmdW4gYXJndW1lbnRzLgorXGRlZlx0dHNsYW50ZWQjMXt7XHR0c2wgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KKworJSBsaWtlIFxzbWFydHNsYW50ZWQgZXhjZXB0IHVuY29uZGl0aW9uYWxseSB1c2UgXHNsLiAgV2UgbmV2ZXIgd2FudAorJSB0dHNsIGZvciBib29rIHRpdGxlcywgZG8gd2U/CitcZGVmXGNpdGUjMXt7XHNsICMxfVxmdXR1cmVsZXRcbmV4dFxzbWFydGl0YWxpY3h9CisKK1xsZXRcaT1cc21hcnRpdGFsaWMKK1xsZXRcc2xhbnRlZD1cc21hcnRzbGFudGVkCitcbGV0XHZhcj1cc21hcnRzbGFudGVkCitcbGV0XGRmbj1cc21hcnRzbGFudGVkCitcbGV0XGVtcGg9XHNtYXJ0aXRhbGljCisKKyUgQGIsIGV4cGxpY2l0IGJvbGQuCitcZGVmXGIjMXt7XGJmICMxfX0KK1xsZXRcc3Ryb25nPVxiCisKKyUgQHNhbnNzZXJpZiwgZXhwbGljaXQgc2Fucy4KK1xkZWZcc2Fuc3NlcmlmIzF7e1xzZiAjMX19CisKKyUgV2UgY2FuJ3QganVzdCB1c2UgXGV4aHlwaGVucGVuYWx0eSwgYmVjYXVzZSB0aGF0IG9ubHkgaGFzIGVmZmVjdCBhdAorJSB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoLiAgUmVzdG9yZSBub3JtYWwgaHlwaGVuYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUKKyUgZ3JvdXAgd2l0aGluIHdoaWNoIFxub2h5cGhlbmF0aW9uIGlzIHByZXN1bWFibHkgY2FsbGVkLgorJQorXGRlZlxub2h5cGhlbmF0aW9ue1xoeXBoZW5jaGFyXGZvbnQgPSAtMSAgXGFmdGVyZ3JvdXBccmVzdG9yZWh5cGhlbmF0aW9ufQorXGRlZlxyZXN0b3JlaHlwaGVuYXRpb257XGh5cGhlbmNoYXJcZm9udCA9IGAtIH0KKworJSBTZXQgc2Zjb2RlIHRvIG5vcm1hbCBmb3IgdGhlIGNoYXJzIHRoYXQgdXN1YWxseSBoYXZlIGFub3RoZXIgdmFsdWUuCislIENhbid0IHVzZSBwbGFpbidzIFxmcmVuY2hzcGFjaW5nIGJlY2F1c2UgaXQgdXNlcyB0aGUgYFx4IG5vdGF0aW9uLCBhbmQKKyUgc29tZXRpbWVzIFx4IGhhcyBhbiBhY3RpdmUgZGVmaW5pdGlvbiB0aGF0IG1lc3NlcyB0aGluZ3MgdXAuCislCitcY2hhcmRlZlxjb2xvbkNoYXIgPSBgXDoKK1xjaGFyZGVmXGNvbW1hQ2hhciA9IGBcLAorXGNoYXJkZWZcZG90Q2hhciAgID0gYFwuCitcY2hhcmRlZlxleGNsYW1DaGFyPSBgXCEKK1xjaGFyZGVmXHF1ZXN0Q2hhciA9IGBcPworXGNoYXJkZWZcc2VtaUNoYXIgID0gYFw7CislCitcY2F0Y29kZWBAPTExCisgIFxkZWZccGxhaW5mcmVuY2hzcGFjaW5neyUKKyAgICBcc2Zjb2RlXGRvdENoYXIgID1cQG0gXHNmY29kZVxxdWVzdENoYXI9XEBtIFxzZmNvZGVcZXhjbGFtQ2hhcj1cQG0KKyAgICBcc2Zjb2RlXGNvbG9uQ2hhcj1cQG0gXHNmY29kZVxzZW1pQ2hhciA9XEBtIFxzZmNvZGVcY29tbWFDaGFyID1cQG0KKyAgICBcZGVmXGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvcnsxMDAwfSUgZm9yIEAuIGFuZCBmcmllbmRzCisgIH0KKyAgXGRlZlxwbGFpbm5vbmZyZW5jaHNwYWNpbmd7JQorICAgIFxzZmNvZGVgXC4zMDAwXHNmY29kZWBcPzMwMDBcc2Zjb2RlYFwhMzAwMAorICAgIFxzZmNvZGVgXDoyMDAwXHNmY29kZWBcOzE1MDBcc2Zjb2RlYFwsMTI1MAorICAgIFxkZWZcZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yezMwMDB9JSBmb3IgQC4gYW5kIGZyaWVuZHMKKyAgfQorXGNhdGNvZGVgQD1cb3RoZXIKK1xkZWZcZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yezMwMDB9JSBkZWZhdWx0CisKK1xkZWZcdCMxeyUKKyAge1x0dCBccmF3YmFja3NsYXNoIFxwbGFpbmZyZW5jaHNwYWNpbmcgIzF9JQorICBcbnVsbAorfQorXGRlZlxzYW1wIzF7YFx0Y2xvc2V7IzF9J1xudWxsfQorXHNldGZvbnRca2V5cm1ccm1zaGFwZXs4fXsxMDAwfQorXGZvbnRca2V5c3k9Y21zeTkKK1xkZWZca2V5IzF7e1xrZXlybVx0ZXh0Zm9udDI9XGtleXN5IFxsZWF2ZXZtb2RlXGhib3h7JQorICBccmFpc2UwLjRwdFxoYm94e1xhbmdsZWxlZnR9XGtlcm4tLjA4ZW1cdnRvcHslCisgICAgXHZib3h7XGhydWxlXGtlcm4tMC40cHQKKyAgICAgXGhib3h7XHJhaXNlMC40cHRcaGJveHtcdnBoYW50b217XGFuZ2xlbGVmdH19IzF9fSUKKyAgICBca2Vybi0wLjRwdFxocnVsZX0lCisgIFxrZXJuLS4wNmVtXHJhaXNlMC40cHRcaGJveHtcYW5nbGVyaWdodH19fX0KKyUgVGhlIG9sZCBkZWZpbml0aW9uLCB3aXRoIG5vIGxvemVuZ2U6CislXGRlZlxrZXkgIzF7e1x0dHNsIFxub2h5cGhlbmF0aW9uIFx1cHBlcmNhc2V7IzF9fVxudWxsfQorXGRlZlxjdHJsICMxe3tcdHQgXHJhd2JhY2tzbGFzaCBcaGF0fSMxfQorCislIEBmaWxlLCBAb3B0aW9uIGFyZSB0aGUgc2FtZSBhcyBAc2FtcC4KK1xsZXRcZmlsZT1cc2FtcAorXGxldFxvcHRpb249XHNhbXAKKworJSBAY29kZSBpcyBhIG1vZGlmaWNhdGlvbiBvZiBAdCwKKyUgd2hpY2ggbWFrZXMgc3BhY2VzIHRoZSBzYW1lIHNpemUgYXMgbm9ybWFsIGluIHRoZSBzdXJyb3VuZGluZyB0ZXh0LgorXGRlZlx0Y2xvc2UjMXslCisgIHslCisgICAgJSBDaGFuZ2Ugbm9ybWFsIGludGVyd29yZCBzcGFjZSB0byBiZSBzYW1lIGFzIGZvciB0aGUgY3VycmVudCBmb250LgorICAgIFxzcGFjZXNraXAgPSBcZm9udGRpbWVuMlxmb250CisgICAgJQorICAgICUgU3dpdGNoIHRvIHR5cGV3cml0ZXIuCisgICAgXHR0CisgICAgJQorICAgICUgQnV0IGBcICcgcHJvZHVjZXMgdGhlIGxhcmdlIHR5cGV3cml0ZXIgaW50ZXJ3b3JkIHNwYWNlLgorICAgIFxkZWZcIHt7XHNwYWNlc2tpcCA9IDBwdHt9IH19JQorICAgICUKKyAgICAlIFR1cm4gb2ZmIGh5cGhlbmF0aW9uLgorICAgIFxub2h5cGhlbmF0aW9uCisgICAgJQorICAgIFxyYXdiYWNrc2xhc2gKKyAgICBccGxhaW5mcmVuY2hzcGFjaW5nCisgICAgIzElCisgIH0lCisgIFxudWxsCit9CisKKyUgV2UgKm11c3QqIHR1cm4gb24gaHlwaGVuYXRpb24gYXQgYC0nIGFuZCBgXycgaW4gQGNvZGUuCislIE90aGVyd2lzZSwgaXQgaXMgdG9vIGhhcmQgdG8gYXZvaWQgb3ZlcmZ1bGwgaGJveGVzCislIGluIHRoZSBFbWFjcyBtYW51YWwsIHRoZSBMaWJyYXJ5IG1hbnVhbCwgZXRjLgorCislIFVuZm9ydHVuYXRlbHksIFRlWCB1c2VzIG9uZSBwYXJhbWV0ZXIgKFxoeXBoZW5jaGFyKSB0byBjb250cm9sCislIGJvdGggaHlwaGVuYXRpb24gYXQgLSBhbmQgaHlwaGVuYXRpb24gd2l0aGluIHdvcmRzLgorJSBXZSBtdXN0IHRoZXJlZm9yZSB0dXJuIHRoZW0gYm90aCBvZmYgKFx0Y2xvc2UgZG9lcyB0aGF0KQorJSBhbmQgYXJyYW5nZSBleHBsaWNpdGx5IHRvIGh5cGhlbmF0ZSBhdCBhIGRhc2guCislICAtLSBybXMuCit7CisgIFxjYXRjb2RlYFwtPVxhY3RpdmUKKyAgXGNhdGNvZGVgXF89XGFjdGl2ZQorICAlCisgIFxnbG9iYWxcZGVmXGNvZGV7XGJlZ2luZ3JvdXAKKyAgICBcY2F0Y29kZWBcLT1cYWN0aXZlICBcY2F0Y29kZWBcXz1cYWN0aXZlCisgICAgXGlmYWxsb3djb2RlYnJlYWtzCisgICAgIFxsZXQtXGNvZGVkYXNoCisgICAgIFxsZXRfXGNvZGV1bmRlcgorICAgIFxlbHNlCisgICAgIFxsZXQtXHJlYWxkYXNoCisgICAgIFxsZXRfXHJlYWx1bmRlcgorICAgIFxmaQorICAgIFxjb2RleAorICB9Cit9CisKK1xkZWZccmVhbGRhc2h7LX0KK1xkZWZcY29kZWRhc2h7LVxkaXNjcmV0aW9uYXJ5e317fXt9fQorXGRlZlxjb2RldW5kZXJ7JQorICAlIHRoaXMgaXMgYWxsIHNvIEBtYXRoe0Bjb2Rle3Zhcl9uYW1lfSsxfSBjYW4gd29yay4gIEluIG1hdGggbW9kZSwgXworICAlIGlzICJhY3RpdmUiIChtYXRoY29kZSI4MDAwKSBhbmQgXG5vcm1hbHVuZGVyc2NvcmUgKG9yIFxjaGFyOTUsIGV0Yy4pCisgICUgd2lsbCB0aGVyZWZvcmUgZXhwYW5kIHRoZSBhY3RpdmUgZGVmaW5pdGlvbiBvZiBfLCB3aGljaCBpcyB1cworICAlIChpbnNpZGUgQGNvZGUgdGhhdCBpcyksIHRoZXJlZm9yZSBhbiBlbmRsZXNzIGxvb3AuCisgIFxpZnVzaW5ndHR7XGlmbW1vZGUKKyAgICAgICAgICAgICAgIFxtYXRoY2hhciIwNzVGICUgY2xhc3MgMD1vcmRpbmFyeSwgZmFtaWx5IDc9dHRmYW0sIHBvcyAweDVGPV8uCisgICAgICAgICAgICAgXGVsc2Vcbm9ybWFsdW5kZXJzY29yZSBcZmkKKyAgICAgICAgICAgICBcZGlzY3JldGlvbmFyeXt9e317fX0lCisgICAgICAgICAgICB7XF99JQorfQorXGRlZlxjb2RleCAjMXtcdGNsb3NleyMxfVxlbmRncm91cH0KKworJSBBbiBhZGRpdGlvbmFsIGNvbXBsaWNhdGlvbjogdGhlIGFib3ZlIHdpbGwgYWxsb3cgYnJlYWtzIGFmdGVyLCBlLmcuLAorJSBlYWNoIG9mIHRoZSBmb3VyIHVuZGVyc2NvcmVzIGluIF9fdHlwZW9mX18uICBUaGlzIGlzIHVuZGVzaXJhYmxlIGluCislIHNvbWUgbWFudWFscywgZXNwZWNpYWxseSBpZiB0aGV5IGRvbid0IGhhdmUgbG9uZyBpZGVudGlmaWVycyBpbgorJSBnZW5lcmFsLiAgQGFsbG93Y29kZWJyZWFrcyBwcm92aWRlcyBhIHdheSB0byBjb250cm9sIHRoaXMuCislIAorXG5ld2lmXGlmYWxsb3djb2RlYnJlYWtzICBcYWxsb3djb2RlYnJlYWtzdHJ1ZQorCitcZGVmXGtleXdvcmR0cnVle3RydWV9CitcZGVmXGtleXdvcmRmYWxzZXtmYWxzZX0KKworXHBhcnNlYXJnZGVmXGFsbG93Y29kZWJyZWFrc3slCisgIFxkZWZcdHhpYXJneyMxfSUKKyAgXGlmeFx0eGlhcmdca2V5d29yZHRydWUKKyAgICBcYWxsb3djb2RlYnJlYWtzdHJ1ZQorICBcZWxzZVxpZnhcdHhpYXJnXGtleXdvcmRmYWxzZQorICAgIFxhbGxvd2NvZGVicmVha3NmYWxzZQorICBcZWxzZQorICAgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgICAgXGVycm1lc3NhZ2V7VW5rbm93biBAYWxsb3djb2RlYnJlYWtzIG9wdGlvbiBgXHR4aWFyZyd9JQorICBcZmlcZmkKK30KKworJSBAa2JkIGlzIGxpa2UgQGNvZGUsIGV4Y2VwdCB0aGF0IGlmIHRoZSBhcmd1bWVudCBpcyBqdXN0IG9uZSBAa2V5IGNvbW1hbmQsCislIHRoZW4gQGtiZCBoYXMgbm8gZWZmZWN0LgorCislIEBrYmRpbnB1dHN0eWxlIC0tIGFyZyBpcyBgZGlzdGluY3QnIChAa2JkIHVzZXMgc2xhbnRlZCB0dHkgZm9udCBhbHdheXMpLAorJSAgIGBleGFtcGxlJyAoQGtiZCB1c2VzIHR0c2wgb25seSBpbnNpZGUgb2YgQGV4YW1wbGUgYW5kIGZyaWVuZHMpLAorJSAgIG9yIGBjb2RlJyAoQGtiZCB1c2VzIG5vcm1hbCB0dHkgZm9udCBhbHdheXMpLgorXHBhcnNlYXJnZGVmXGtiZGlucHV0c3R5bGV7JQorICBcZGVmXHR4aWFyZ3sjMX0lCisgIFxpZnhcdHhpYXJnXHdvcmRkaXN0aW5jdAorICAgIFxnZGVmXGtiZGV4YW1wbGVmb250e1x0dHNsfVxnZGVmXGtiZGZvbnR7XHR0c2x9JQorICBcZWxzZVxpZnhcdHhpYXJnXHdvcmRleGFtcGxlCisgICAgXGdkZWZca2JkZXhhbXBsZWZvbnR7XHR0c2x9XGdkZWZca2JkZm9udHtcdHR9JQorICBcZWxzZVxpZnhcdHhpYXJnXHdvcmRjb2RlCisgICAgXGdkZWZca2JkZXhhbXBsZWZvbnR7XHR0fVxnZGVmXGtiZGZvbnR7XHR0fSUKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGtiZGlucHV0c3R5bGUgb3B0aW9uIGBcdHhpYXJnJ30lCisgIFxmaVxmaVxmaQorfQorXGRlZlx3b3JkZGlzdGluY3R7ZGlzdGluY3R9CitcZGVmXHdvcmRleGFtcGxle2V4YW1wbGV9CitcZGVmXHdvcmRjb2Rle2NvZGV9CisKKyUgRGVmYXVsdCBpcyBgZGlzdGluY3QuJworXGtiZGlucHV0c3R5bGUgZGlzdGluY3QKKworXGRlZlx4a2V5e1xrZXl9CitcZGVmXGtiZGZvbyMxIzIjM1xwYXJ7XGRlZlxvbmV7IzF9XGRlZlx0aHJlZXsjM31cZGVmXHRocmVleHs/P30lCitcaWZ4XG9uZVx4a2V5XGlmeFx0aHJlZXhcdGhyZWUgXGtleXsjMn0lCitcZWxzZXtcdGNsb3Nle1xrYmRmb250XGxvb2t9fVxmaQorXGVsc2V7XHRjbG9zZXtca2JkZm9udFxsb29rfX1cZml9CisKKyUgRm9yIEBpbmRpY2F0ZXVybCwgQGVudiwgQGNvbW1hbmQgcXVvdGVzIHNlZW0gdW5uZWNlc3NhcnksIHNvIHVzZSBcY29kZS4KK1xsZXRcaW5kaWNhdGV1cmw9XGNvZGUKK1xsZXRcZW52PVxjb2RlCitcbGV0XGNvbW1hbmQ9XGNvZGUKKworJSBAdXJlZiAoYWJicmV2aWF0aW9uIGZvciBgdXJscmVmJykgdGFrZXMgYW4gb3B0aW9uYWwgKGNvbW1hLXNlcGFyYXRlZCkKKyUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZnlpbmcgdGhlIHRleHQgdG8gZGlzcGxheSBhbmQgYW4gb3B0aW9uYWwgdGhpcmQKKyUgYXJnIGFzIHRleHQgdG8gZGlzcGxheSBpbnN0ZWFkIG9mIChyYXRoZXIgdGhhbiBpbiBhZGRpdGlvbiB0bykgdGhlIHVybAorJSBpdHNlbGYuICBGaXJzdCAobWFuZGF0b3J5KSBhcmcgaXMgdGhlIHVybC4gIFBlcmhhcHMgZXZlbnR1YWxseSBwdXQgaW4KKyUgYSBoeXBlcnRleCBcc3BlY2lhbCBoZXJlLgorJQorXGRlZlx1cmVmIzF7XGRvdXJlZiAjMSwsLFxmaW5pc2h9CitcZGVmXGRvdXJlZiMxLCMyLCMzLCM0XGZpbmlzaHtcYmVnaW5ncm91cAorICBcdW5zZXBzcGFjZXMKKyAgXHBkZnVybHsjMX0lCisgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjM30lCisgIFxpZmRpbVx3ZDAgPiAwcHQKKyAgICBcdW5oYm94MCAlIHRoaXJkIGFyZyBnaXZlbiwgc2hvdyBvbmx5IHRoYXQKKyAgXGVsc2UKKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICAgIFxpZmRpbVx3ZDAgPiAwcHQKKyAgICAgIFxpZnBkZgorICAgICAgICBcdW5oYm94MCAgICAgICAgICAgICAlIFBERjogMm5kIGFyZyBnaXZlbiwgc2hvdyBvbmx5IGl0CisgICAgICBcZWxzZQorICAgICAgICBcdW5oYm94MFwgKFxjb2RleyMxfSklIERWSTogMm5kIGFyZyBnaXZlbiwgc2hvdyBib3RoIGl0IGFuZCB1cmwKKyAgICAgIFxmaQorICAgIFxlbHNlCisgICAgICBcY29kZXsjMX0lIG9ubHkgdXJsIGdpdmVuLCBzbyBzaG93IGl0CisgICAgXGZpCisgIFxmaQorICBcZW5kbGluaworXGVuZGdyb3VwfQorCislIEB1cmwgc3lub255bSBmb3IgQHVyZWYsIHNpbmNlIHRoYXQncyBob3cgZXZlcnlvbmUgdXNlcyBpdC4KKyUKK1xsZXRcdXJsPVx1cmVmCisKKyUgcm1zIGRvZXMgbm90IGxpa2UgYW5nbGUgYnJhY2tldHMgLS1rYXJsLCAxN21heTk3LgorJSBTbyBub3cgQGVtYWlsIGlzIGp1c3QgbGlrZSBAdXJlZiwgdW5sZXNzIHdlIGFyZSBwZGYuCislCislXGRlZlxlbWFpbCMxe1xhbmdsZWxlZnR7XHR0ICMxfVxhbmdsZXJpZ2h0fQorXGlmcGRmCisgIFxkZWZcZW1haWwjMXtcZG9lbWFpbCMxLCxcZmluaXNofQorICBcZGVmXGRvZW1haWwjMSwjMiwjM1xmaW5pc2h7XGJlZ2luZ3JvdXAKKyAgICBcdW5zZXBzcGFjZXMKKyAgICBccGRmdXJse21haWx0bzojMX0lCisgICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfSUKKyAgICBcaWZkaW1cd2QwPjBwdFx1bmhib3gwXGVsc2VcY29kZXsjMX1cZmkKKyAgICBcZW5kbGluaworICBcZW5kZ3JvdXB9CitcZWxzZQorICBcbGV0XGVtYWlsPVx1cmVmCitcZmkKKworJSBDaGVjayBpZiB3ZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgdHlwZXdyaXRlciBmb250LiAgU2luY2UgYWxsIHRoZQorJSBDb21wdXRlciBNb2Rlcm4gdHlwZXdyaXRlciBmb250cyBoYXZlIHplcm8gaW50ZXJ3b3JkIHN0cmV0Y2ggKGFuZAorJSBzaHJpbmspLCBhbmQgaXQgaXMgcmVhc29uYWJsZSB0byBleHBlY3QgYWxsIHR5cGV3cml0ZXIgZm9udHMgdG8gaGF2ZQorJSB0aGlzIHByb3BlcnR5LCB3ZSBjYW4gY2hlY2sgdGhhdCBmb250IHBhcmFtZXRlci4KKyUKK1xkZWZcaWZtb25vc3BhY2V7XGlmZGltXGZvbnRkaW1lbjNcZm9udD0wcHQgfQorCislIFR5cGVzZXQgYSBkaW1lbnNpb24sIGUuZy4sIGBpbicgb3IgYHB0Jy4gIFRoZSBvbmx5IHJlYXNvbiBmb3IgdGhlCislIGFyZ3VtZW50IGlzIHRvIG1ha2UgdGhlIGlucHV0IGxvb2sgcmlnaHQ6IEBkbW57cHR9IGluc3RlYWQgb2YgQGRtbnt9cHQuCislCitcZGVmXGRtbiMxe1x0aGluc3BhY2UgIzF9CisKK1xkZWZca2JkIzF7XGRlZlxsb29reyMxfVxleHBhbmRhZnRlclxrYmRmb29cbG9vaz8/XHBhcn0KKworJSBAbCB3YXMgbmV2ZXIgZG9jdW1lbnRlZCB0byBtZWFuIGBgc3dpdGNoIHRvIHRoZSBMaXNwIGZvbnQnJywKKyUgYW5kIGl0IGlzIG5vdCB1c2VkIGFzIHN1Y2ggaW4gYW55IG1hbnVhbCBJIGNhbiBmaW5kLiAgV2UgbmVlZCBpdCBmb3IKKyUgUG9saXNoIHN1cHByZXNzZWQtbC4gIC0ta2FybCwgMjJzZXA5Ni4KKyVcZGVmXGwjMXt7XGxpICMxfVxudWxsfQorCislIEV4cGxpY2l0IGZvbnQgY2hhbmdlczogQHIsIEBzYywgdW5kb2N1bWVudGVkIEBpaS4KK1xkZWZcciMxe3tccm0gIzF9fSAgICAgICAgICAgICAgJSByb21hbiBmb250CitcZGVmXHNjIzF7e1xzbWFsbGNhcHMjMX19ICAgICAgICUgc21hbGxjYXBzIGZvbnQKK1xkZWZcaWkjMXt7XGl0ICMxfX0gICAgICAgICAgICAgJSBpdGFsaWMgZm9udAorCislIEBhY3JvbnltIGZvciAiRkJJIiwgIk5BVE8iLCBhbmQgdGhlIGxpa2UuCislIFdlIHByaW50IHRoaXMgb25lIHBvaW50IHNpemUgc21hbGxlciwgc2luY2UgaXQncyBpbnRlbmRlZCBmb3IKKyUgYWxsLXVwcGVyY2FzZS4KKyUgCitcZGVmXGFjcm9ueW0jMXtcZG9hY3JvbnltICMxLCxcZmluaXNofQorXGRlZlxkb2Fjcm9ueW0jMSwjMiwjM1xmaW5pc2h7JQorICB7XHNlbGVjdGZvbnRzXGxzaXplICMxfSUKKyAgXGRlZlx0ZW1weyMyfSUKKyAgXGlmeFx0ZW1wXGVtcHR5IFxlbHNlCisgICAgXHNwYWNlICh7XHVuc2Vwc3BhY2VzIFxpZ25vcmVzcGFjZXMgXHRlbXAgXHVuc2tpcH0pJQorICBcZmkKK30KKworJSBAYWJiciBmb3IgIkNvbXB1dC4gSi4iIGFuZCB0aGUgbGlrZS4KKyUgTm8gZm9udCBjaGFuZ2UsIGJ1dCBkb24ndCBkbyBlbmQtb2Ytc2VudGVuY2Ugc3BhY2luZy4KKyUgCitcZGVmXGFiYnIjMXtcZG9hYmJyICMxLCxcZmluaXNofQorXGRlZlxkb2FiYnIjMSwjMiwjM1xmaW5pc2h7JQorICB7XHBsYWluZnJlbmNoc3BhY2luZyAjMX0lCisgIFxkZWZcdGVtcHsjMn0lCisgIFxpZnhcdGVtcFxlbXB0eSBcZWxzZQorICAgIFxzcGFjZSAoe1x1bnNlcHNwYWNlcyBcaWdub3Jlc3BhY2VzIFx0ZW1wIFx1bnNraXB9KSUKKyAgXGZpCit9CisKKyUgQHBvdW5kc3t9IGlzIGEgc3Rlcmxpbmcgc2lnbiwgd2hpY2ggS251dGggcHV0IGluIHRoZSBDTSBpdGFsaWMgZm9udC4KKyUKK1xkZWZccG91bmRze3tcaXRcJH19CisKKyUgQGV1cm97fSBjb21lcyBmcm9tIGEgc2VwYXJhdGUgZm9udCwgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHN0eWxlLgorJSBXZSB1c2UgdGhlIGZyZWUgZmV5bSogZm9udHMgZnJvbSB0aGUgZXVyb3N5bSBwYWNrYWdlIGJ5IEhlbnJpaworJSBUaGVpbGluZywgd2hpY2ggc3VwcG9ydCByZWd1bGFyLCBzbGFudGVkLCBib2xkIGFuZCBib2xkIHNsYW50ZWQgKGFuZAorJSAib3V0bGluZWQiIChibGFja2JvYXJkIGJvYXJkLCBzb3J0IG9mKSB2ZXJzaW9ucywgd2hpY2ggd2UgZG9uJ3QgbmVlZCkuCislIEl0IGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuY3Rhbi5vcmcvdGV4LWFyY2hpdmUvZm9udHMvZXVyb3N5bS4KKyUgCislIEFsdGhvdWdoIG9ubHkgcmVndWxhciBpcyB0aGUgdHJ1bHkgb2ZmaWNpYWwgRXVybyBzeW1ib2wsIHdlIGlnbm9yZQorJSB0aGF0LiAgVGhlIEV1cm8gaXMgZGVzaWduZWQgdG8gYmUgc2xpZ2h0bHkgdGFsbGVyIHRoYW4gdGhlIHJlZ3VsYXIKKyUgZm9udCBoZWlnaHQuCislIAorJSBmZXltciAtIHJlZ3VsYXIKKyUgZmV5bW8gLSBzbGFudGVkCislIGZleWJyIC0gYm9sZAorJSBmZXlibyAtIGJvbGQgc2xhbnRlZAorJSAKKyUgVGhlcmUgaXMgbm8gZ29vZCAoZnJlZSkgdHlwZXdyaXRlciB2ZXJzaW9uLCB0byBteSBrbm93bGVkZ2UuCislIEEgZmV5bXIxMCBldXJvIGlzIH43LjNwdCB3aWRlLCB3aGlsZSBhIG5vcm1hbCBjbXR0MTAgY2hhciBpcyB+NS4yNXB0IHdpZGUuCislIEhtbS4KKyUgCislIEFsc28gZG9lc24ndCB3b3JrIGluIG1hdGguICBEbyB3ZSBuZWVkIHRvIGRvIG1hdGggd2l0aCBldXJvIHN5bWJvbHM/CislIEhvcGUgbm90LgorJSAKKyUgCitcZGVmXGV1cm97e1xldXJvZm9udCBlfX0KK1xkZWZcZXVyb2ZvbnR7JQorICAlIFdlIHNldCB0aGUgZm9udCBhdCBlYWNoIGNvbW1hbmQsIHJhdGhlciB0aGFuIHByZWRlZmluaW5nIGl0IGluCisgICUgXHRleHRmb250cyBhbmQgdGhlIG90aGVyIGZvbnQtc3dpdGNoaW5nIGNvbW1hbmRzLCBzbyB0aGF0CisgICUgaW5zdGFsbGF0aW9ucyB3aGljaCBuZXZlciBuZWVkIHRoZSBzeW1ib2wgZG9uJ3QgaGF2ZSB0byBoYXZlIHRoZQorICAlIGZvbnQgaW5zdGFsbGVkLgorICAlIAorICAlIFRoZXJlIGlzIG9ubHkgb25lIGRlc2lnbmVkIHNpemUgKG5vbWluYWwgMTBwdCksIHNvIHdlIGFsd2F5cyBzY2FsZQorICAlIHRoYXQgdG8gdGhlIGN1cnJlbnQgbm9taW5hbCBzaXplLgorICAlIAorICAlIEJ5IHRoZSB3YXksIHNpbXBseSB1c2luZyAiYXQgMWVtIiB3b3JrcyBmb3IgY21yMTAgYW5kIHRoZSBsaWtlLCBidXQKKyAgJSBkb2VzIG5vdCB3b3JrIGZvciBjbWJ4MTAgYW5kIG90aGVyIGV4dGVuZGVkL3NocnVua2VuIGZvbnRzLgorICAlIAorICBcZGVmXGV1cm9zaXple1xjc25hbWVcY3VyZm9udHNpemUgbm9taW5hbHNpemVcZW5kY3NuYW1lfSUKKyAgJQorICBcaWZ4XGN1cmZvbnRzdHlsZVxiZnN0eWxlbmFtZSAKKyAgICAlIGJvbGQ6CisgICAgXGZvbnRcdGhpc2V1cm9mb250ID0gXGlmdXNpbmdpdHtmZXlibzEwfXtmZXlicjEwfSBhdCBcZXVyb3NpemUKKyAgXGVsc2UgCisgICAgJSByZWd1bGFyOgorICAgIFxmb250XHRoaXNldXJvZm9udCA9IFxpZnVzaW5naXR7ZmV5bW8xMH17ZmV5bXIxMH0gYXQgXGV1cm9zaXplCisgIFxmaQorICBcdGhpc2V1cm9mb250Cit9CisKKyUgQHJlZ2lzdGVyZWRzeW1ib2wgLSBSIGluIGEgY2lyY2xlLiAgVGhlIGZvbnQgZm9yIHRoZSBSIHNob3VsZCByZWFsbHkKKyUgYmUgc21hbGxlciB5ZXQsIGJ1dCBsbGxzaXplIGlzIHRoZSBiZXN0IHdlIGNhbiBkbyBmb3Igbm93LgorJSBBZGFwdGVkIGZyb20gdGhlIHBsYWluLnRleCBkZWZpbml0aW9uIG9mIFxjb3B5cmlnaHQuCislCitcZGVmXHJlZ2lzdGVyZWRzeW1ib2x7JQorICAkXnt7XG9vYWxpZ257XGhmaWxccmFpc2UuMDdleFxoYm94e1xzZWxlY3Rmb250c1xsbGxzaXplIFJ9JQorICAgICAgICAgICAgICAgXGhmaWxcY3JjclxPcmJ9fSUKKyAgICB9JCUKK30KKworJSBMYXVyZW50IFNpZWJlbm1hbm4gcmVwb3J0cyBcT3JiIHVuZGVmaW5lZCB3aXRoOgorJSAgVGV4dHVyZXMgMS43LjcgKHByZWxvYWRlZCBmb3JtYXQ9cGxhaW4gOTMuMTAuMTQpICAoNjhLKSAgMTYgQVBSIDIwMDQgMDI6MzgKKyUgc28gd2UnbGwgZGVmaW5lIGl0IGlmIG5lY2Vzc2FyeS4KKyUgCitcaWZ4XE9yYlx1bmRlZmluZWQKK1xkZWZcT3Jie1xtYXRoaGV4Ym94MjBEfQorXGZpCisKKworXG1lc3NhZ2V7cGFnZSBoZWFkaW5ncyx9CisKK1xuZXdza2lwXHRpdGxlcGFnZXRvcGdsdWUgXHRpdGxlcGFnZXRvcGdsdWUgPSAxLjVpbgorXG5ld3NraXBcdGl0bGVwYWdlYm90dG9tZ2x1ZSBcdGl0bGVwYWdlYm90dG9tZ2x1ZSA9IDJwYworCislIEZpcnN0IHRoZSB0aXRsZSBwYWdlLiAgTXVzdCBkbyBAc2V0dGl0bGUgYmVmb3JlIEB0aXRsZXBhZ2UuCitcbmV3aWZcaWZzZWVuYXV0aG9yCitcbmV3aWZcaWZmaW5pc2hlZHRpdGxlcGFnZQorCislIERvIGFuIGltcGxpY2l0IEBjb250ZW50cyBvciBAc2hvcnRjb250ZW50cyBhZnRlciBAZW5kIHRpdGxlcGFnZSBpZiB0aGUKKyUgdXNlciBzYXlzIEBzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlIG9yIEBzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UuCislCitcbmV3aWZcaWZzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlCisgXGxldFxzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlID0gXHNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2V0cnVlCitcbmV3aWZcaWZzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyBcbGV0XHNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZSA9IFxzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2V0cnVlCisKK1xwYXJzZWFyZ2RlZlxzaG9ydHRpdGxlcGFnZXtcYmVnaW5ncm91cFxoYm94e31cdnNraXAgMS41aW4gXGNoYXBybSBcY2VudGVybGluZXsjMX0lCisgICAgICAgIFxlbmRncm91cFxwYWdlXGhib3h7fVxwYWdlfQorCitcZW52ZGVmXHRpdGxlcGFnZXslCisgICUgT3BlbiBvbmUgZXh0cmEgZ3JvdXAsIGFzIHdlIHdhbnQgdG8gY2xvc2UgaXQgaW4gdGhlIG1pZGRsZSBvZiBcRXRpdGxlcGFnZS4KKyAgXGJlZ2luZ3JvdXAKKyAgICBccGFyaW5kZW50PTBwdCBcdGV4dGZvbnRzCisgICAgJSBMZWF2ZSBzb21lIHNwYWNlIGF0IHRoZSB2ZXJ5IHRvcCBvZiB0aGUgcGFnZS4KKyAgICBcdmdsdWVcdGl0bGVwYWdldG9wZ2x1ZQorICAgICUgTm8gcnVsZSBhdCBwYWdlIGJvdHRvbSB1bmxlc3Mgd2UgcHJpbnQgb25lIGF0IHRoZSB0b3Agd2l0aCBAdGl0bGUuCisgICAgXGZpbmlzaGVkdGl0bGVwYWdldHJ1ZQorICAgICUKKyAgICAlIE1vc3QgdGl0bGUgYGBwYWdlcycnIGFyZSBhY3R1YWxseSB0d28gcGFnZXMgbG9uZywgd2l0aCBzcGFjZQorICAgICUgYXQgdGhlIHRvcCBvZiB0aGUgc2Vjb25kLiAgV2UgZG9uJ3Qgd2FudCB0aGUgcmFnZ2VkIGxlZnQgb24gdGhlIHNlY29uZC4KKyAgICBcbGV0XG9sZHBhZ2UgPSBccGFnZQorICAgIFxkZWZccGFnZXslCisgICAgICBcaWZmaW5pc2hlZHRpdGxlcGFnZVxlbHNlCisJIFxmaW5pc2h0aXRsZXBhZ2UKKyAgICAgIFxmaQorICAgICAgXGxldFxwYWdlID0gXG9sZHBhZ2UKKyAgICAgIFxwYWdlCisgICAgICBcbnVsbAorICAgIH0lCit9CisKK1xkZWZcRXRpdGxlcGFnZXslCisgICAgXGlmZmluaXNoZWR0aXRsZXBhZ2VcZWxzZQorCVxmaW5pc2h0aXRsZXBhZ2UKKyAgICBcZmkKKyAgICAlIEl0IGlzIGltcG9ydGFudCB0byBkbyB0aGUgcGFnZSBicmVhayBiZWZvcmUgZW5kaW5nIHRoZSBncm91cCwKKyAgICAlIGJlY2F1c2UgdGhlIGhlYWRsaW5lIGFuZCBmb290bGluZSBhcmUgb25seSBlbXB0eSBpbnNpZGUgdGhlIGdyb3VwLgorICAgICUgSWYgd2UgdXNlIHRoZSBuZXcgZGVmaW5pdGlvbiBvZiBccGFnZSwgd2UgYWx3YXlzIGdldCBhIGJsYW5rIHBhZ2UKKyAgICAlIGFmdGVyIHRoZSB0aXRsZSBwYWdlLCB3aGljaCB3ZSBjZXJ0YWlubHkgZG9uJ3Qgd2FudC4KKyAgICBcb2xkcGFnZQorICBcZW5kZ3JvdXAKKyAgJQorICAlIE5lZWQgdGhpcyBiZWZvcmUgdGhlIFwuLi5hZnRlcnRpdGxlcGFnZSBjaGVja3Mgc28gdGhhdCBpZiB0aGV5IGFyZQorICAlIGluIGVmZmVjdCB0aGUgdG9jIHBhZ2VzIHdpbGwgY29tZSBvdXQgd2l0aCBwYWdlIG51bWJlcnMuCisgIFxIRUFESU5HU29uCisgICUKKyAgJSBJZiB0aGV5IHdhbnQgc2hvcnQsIHRoZXkgY2VydGFpbmx5IHdhbnQgbG9uZyB0b28uCisgIFxpZnNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorICAgIFxzaG9ydGNvbnRlbnRzCisgICAgXGNvbnRlbnRzCisgICAgXGdsb2JhbFxsZXRcc2hvcnRjb250ZW50cyA9IFxyZWxheAorICAgIFxnbG9iYWxcbGV0XGNvbnRlbnRzID0gXHJlbGF4CisgIFxmaQorICAlCisgIFxpZnNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyAgICBcY29udGVudHMKKyAgICBcZ2xvYmFsXGxldFxjb250ZW50cyA9IFxyZWxheAorICAgIFxnbG9iYWxcbGV0XHNob3J0Y29udGVudHMgPSBccmVsYXgKKyAgXGZpCit9CisKK1xkZWZcZmluaXNodGl0bGVwYWdleyUKKyAgXHZza2lwNHB0IFxocnVsZSBoZWlnaHQgMnB0IHdpZHRoIFxoc2l6ZQorICBcdnNraXBcdGl0bGVwYWdlYm90dG9tZ2x1ZQorICBcZmluaXNoZWR0aXRsZXBhZ2V0cnVlCit9CisKKyUlJSBNYWNyb3MgdG8gYmUgdXNlZCB3aXRoaW4gQHRpdGxlcGFnZToKKworXGxldFxzdWJ0aXRsZXJtPVx0ZW5ybQorXGRlZlxzdWJ0aXRsZWZvbnR7XHN1YnRpdGxlcm0gXG5vcm1hbGJhc2VsaW5lc2tpcCA9IDEzcHQgXG5vcm1hbGJhc2VsaW5lc30KKworXGRlZlxhdXRob3Jmb250e1xhdXRob3JybSBcbm9ybWFsYmFzZWxpbmVza2lwID0gMTZwdCBcbm9ybWFsYmFzZWxpbmVzCisJCVxsZXRcdHQ9XGF1dGhvcnR0fQorCitccGFyc2VhcmdkZWZcdGl0bGV7JQorICBcY2hlY2tlbnZcdGl0bGVwYWdlCisgIFxsZWZ0bGluZXtcdGl0bGVmb250c1xybSAjMX0KKyAgJSBwcmludCBhIHJ1bGUgYXQgdGhlIHBhZ2UgYm90dG9tIGFsc28uCisgIFxmaW5pc2hlZHRpdGxlcGFnZWZhbHNlCisgIFx2c2tpcDRwdCBcaHJ1bGUgaGVpZ2h0IDRwdCB3aWR0aCBcaHNpemUgXHZza2lwNHB0Cit9CisKK1xwYXJzZWFyZ2RlZlxzdWJ0aXRsZXslCisgIFxjaGVja2Vudlx0aXRsZXBhZ2UKKyAge1xzdWJ0aXRsZWZvbnQgXHJpZ2h0bGluZXsjMX19JQorfQorCislIEBhdXRob3Igc2hvdWxkIGNvbWUgbGFzdCwgYnV0IG1heSBjb21lIG1hbnkgdGltZXMuCislIEl0IGNhbiBhbHNvIGJlIHVzZWQgaW5zaWRlIEBxdW90YXRpb24uCislCitccGFyc2VhcmdkZWZcYXV0aG9yeyUKKyAgXGRlZlx0ZW1we1xxdW90YXRpb259JQorICBcaWZ4XHRoaXNlbnZcdGVtcAorICAgIFxkZWZccXVvdGF0aW9uYXV0aG9yeyMxfSUgcHJpbnRlZCBpbiBcRXF1b3RhdGlvbi4KKyAgXGVsc2UKKyAgICBcY2hlY2tlbnZcdGl0bGVwYWdlCisgICAgXGlmc2VlbmF1dGhvclxlbHNlIFx2c2tpcCAwcHQgcGx1cyAxZmlsbGwgXHNlZW5hdXRob3J0cnVlIFxmaQorICAgIHtcYXV0aG9yZm9udCBcbGVmdGxpbmV7IzF9fSUKKyAgXGZpCit9CisKKworJSUlIFNldCB1cCBwYWdlIGhlYWRpbmdzIGFuZCBmb290aW5ncy4KKworXGxldFx0aGlzcGFnZT1cZm9saW8KKworXG5ld3Rva3NcZXZlbmhlYWRsaW5lICAgICUgaGVhZGxpbmUgb24gZXZlbiBwYWdlcworXG5ld3Rva3Ncb2RkaGVhZGxpbmUgICAgICUgaGVhZGxpbmUgb24gb2RkIHBhZ2VzCitcbmV3dG9rc1xldmVuZm9vdGxpbmUgICAgJSBmb290bGluZSBvbiBldmVuIHBhZ2VzCitcbmV3dG9rc1xvZGRmb290bGluZSAgICAgJSBmb290bGluZSBvbiBvZGQgcGFnZXMKKworJSBOb3cgbWFrZSBUZVggdXNlIHRob3NlIHZhcmlhYmxlcworXGhlYWRsaW5lPXt7XHRleHRmb250c1xybSBcaWZvZGRccGFnZW5vIFx0aGVcb2RkaGVhZGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcZWxzZSBcdGhlXGV2ZW5oZWFkbGluZSBcZml9fQorXGZvb3RsaW5lPXt7XHRleHRmb250c1xybSBcaWZvZGRccGFnZW5vIFx0aGVcb2RkZm9vdGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcZWxzZSBcdGhlXGV2ZW5mb290bGluZSBcZml9XEhFQURJTkdTaG9va30KK1xsZXRcSEVBRElOR1Nob29rPVxyZWxheAorCislIENvbW1hbmRzIHRvIHNldCB0aG9zZSB2YXJpYWJsZXMuCislIEZvciBleGFtcGxlLCB0aGlzIGlzIHdoYXQgIEBoZWFkaW5ncyBvbiAgZG9lcworJSBAZXZlbmhlYWRpbmcgQHRoaXN0aXRsZXxAdGhpc3BhZ2V8QHRoaXNjaGFwdGVyCislIEBvZGRoZWFkaW5nIEB0aGlzY2hhcHRlcnxAdGhpc3BhZ2V8QHRoaXN0aXRsZQorJSBAZXZlbmZvb3RpbmcgQHRoaXNmaWxlfHwKKyUgQG9kZGZvb3RpbmcgfHxAdGhpc2ZpbGUKKworCitcZGVmXGV2ZW5oZWFkaW5ne1xwYXJzZWFyZ1xldmVuaGVhZGluZ3h4eH0KK1xkZWZcZXZlbmhlYWRpbmd4eHggIzF7XGV2ZW5oZWFkaW5neXl5ICMxXHxcfFx8XHxcZmluaXNofQorXGRlZlxldmVuaGVhZGluZ3l5eSAjMVx8IzJcfCMzXHwjNFxmaW5pc2h7JQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xybGFwe1xjZW50ZXJsaW5leyMyfX1cbGluZXsjMVxoZmlsIzN9fX0KKworXGRlZlxvZGRoZWFkaW5ne1xwYXJzZWFyZ1xvZGRoZWFkaW5neHh4fQorXGRlZlxvZGRoZWFkaW5neHh4ICMxe1xvZGRoZWFkaW5neXl5ICMxXHxcfFx8XHxcZmluaXNofQorXGRlZlxvZGRoZWFkaW5neXl5ICMxXHwjMlx8IzNcfCM0XGZpbmlzaHslCitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtccmxhcHtcY2VudGVybGluZXsjMn19XGxpbmV7IzFcaGZpbCMzfX19CisKK1xwYXJzZWFyZ2RlZlxldmVyeWhlYWRpbmd7XG9kZGhlYWRpbmd4eHh7IzF9XGV2ZW5oZWFkaW5neHh4eyMxfX0lCisKK1xkZWZcZXZlbmZvb3Rpbmd7XHBhcnNlYXJnXGV2ZW5mb290aW5neHh4fQorXGRlZlxldmVuZm9vdGluZ3h4eCAjMXtcZXZlbmZvb3Rpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXGV2ZW5mb290aW5neXl5ICMxXHwjMlx8IzNcfCM0XGZpbmlzaHslCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XHJsYXB7XGNlbnRlcmxpbmV7IzJ9fVxsaW5leyMxXGhmaWwjM319fQorCitcZGVmXG9kZGZvb3Rpbmd7XHBhcnNlYXJnXG9kZGZvb3Rpbmd4eHh9CitcZGVmXG9kZGZvb3Rpbmd4eHggIzF7XG9kZGZvb3Rpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXG9kZGZvb3Rpbmd5eXkgIzFcfCMyXHwjM1x8IzRcZmluaXNoeyUKKyAgXGdsb2JhbFxvZGRmb290bGluZSA9IHtccmxhcHtcY2VudGVybGluZXsjMn19XGxpbmV7IzFcaGZpbCMzfX0lCisgICUKKyAgJSBMZWF2ZSBzb21lIHNwYWNlIGZvciB0aGUgZm9vdGxpbmUuICBIb3BlZnVsbHkgb2sgdG8gYXNzdW1lCisgICUgQGV2ZW5mb290aW5nIHdpbGwgbm90IGJlIHVzZWQgYnkgaXRzZWxmLgorICBcZ2xvYmFsXGFkdmFuY2VccGFnZWhlaWdodCBieSAtXGJhc2VsaW5lc2tpcAorICBcZ2xvYmFsXGFkdmFuY2VcdnNpemUgYnkgLVxiYXNlbGluZXNraXAKK30KKworXHBhcnNlYXJnZGVmXGV2ZXJ5Zm9vdGluZ3tcb2RkZm9vdGluZ3h4eHsjMX1cZXZlbmZvb3Rpbmd4eHh7IzF9fQorCisKKyUgQGhlYWRpbmdzIGRvdWJsZSAgICAgIHR1cm5zIGhlYWRpbmdzIG9uIGZvciBkb3VibGUtc2lkZWQgcHJpbnRpbmcuCislIEBoZWFkaW5ncyBzaW5nbGUgICAgICB0dXJucyBoZWFkaW5ncyBvbiBmb3Igc2luZ2xlLXNpZGVkIHByaW50aW5nLgorJSBAaGVhZGluZ3Mgb2ZmICAgICAgICAgdHVybnMgdGhlbSBvZmYuCislIEBoZWFkaW5ncyBvbiAgICAgICAgICBzYW1lIGFzIEBoZWFkaW5ncyBkb3VibGUsIHJldGFpbmVkIGZvciBjb21wYXRpYmlsaXR5LgorJSBAaGVhZGluZ3MgYWZ0ZXIgICAgICAgdHVybnMgb24gZG91YmxlLXNpZGVkIGhlYWRpbmdzIGFmdGVyIHRoaXMgcGFnZS4KKyUgQGhlYWRpbmdzIGRvdWJsZWFmdGVyIHR1cm5zIG9uIGRvdWJsZS1zaWRlZCBoZWFkaW5ncyBhZnRlciB0aGlzIHBhZ2UuCislIEBoZWFkaW5ncyBzaW5nbGVhZnRlciB0dXJucyBvbiBzaW5nbGUtc2lkZWQgaGVhZGluZ3MgYWZ0ZXIgdGhpcyBwYWdlLgorJSBCeSBkZWZhdWx0LCB0aGV5IGFyZSBvZmYgYXQgdGhlIHN0YXJ0IG9mIGEgZG9jdW1lbnQsCislIGFuZCB0dXJuZWQgYG9uJyBhZnRlciBAZW5kIHRpdGxlcGFnZS4KKworXGRlZlxoZWFkaW5ncyAjMSB7XGNzbmFtZSBIRUFESU5HUyMxXGVuZGNzbmFtZX0KKworXGRlZlxIRUFESU5HU29mZnslCitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGhmaWx9IFxnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xoZmlsfSBcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH19CitcSEVBRElOR1NvZmYKKyUgV2hlbiB3ZSB0dXJuIGhlYWRpbmdzIG9uLCBzZXQgdGhlIHBhZ2UgbnVtYmVyIHRvIDEuCislIEZvciBkb3VibGUtc2lkZWQgcHJpbnRpbmcsIHB1dCBjdXJyZW50IGZpbGUgbmFtZSBpbiBsb3dlciBsZWZ0IGNvcm5lciwKKyUgY2hhcHRlciBuYW1lIG9uIGluc2lkZSB0b3Agb2YgcmlnaHQgaGFuZCBwYWdlcywgZG9jdW1lbnQKKyUgdGl0bGUgb24gaW5zaWRlIHRvcCBvZiBsZWZ0IGhhbmQgcGFnZXMsIGFuZCBwYWdlIG51bWJlcnMgb24gb3V0c2lkZSB0b3AKKyUgZWRnZSBvZiBhbGwgcGFnZXMuCitcZGVmXEhFQURJTkdTZG91YmxleyUKK1xnbG9iYWxccGFnZW5vPTEKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1xmb2xpb1xoZmlsXHRoaXN0aXRsZX19CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcG9kZHBhZ2UKK30KK1xsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorCislIEZvciBzaW5nbGUtc2lkZWQgcHJpbnRpbmcsIGNoYXB0ZXIgdGl0bGUgZ29lcyBhY3Jvc3MgdG9wIGxlZnQgb2YgcGFnZSwKKyUgcGFnZSBudW1iZXIgb24gdG9wIHJpZ2h0LgorXGRlZlxIRUFESU5HU3NpbmdsZXslCitcZ2xvYmFsXHBhZ2Vubz0xCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCit9CitcZGVmXEhFQURJTkdTb257XEhFQURJTkdTZG91YmxlfQorCitcZGVmXEhFQURJTkdTYWZ0ZXJ7XGxldFxIRUFESU5HU2hvb2s9XEhFQURJTkdTZG91YmxleH0KK1xsZXRcSEVBRElOR1Nkb3VibGVhZnRlcj1cSEVBRElOR1NhZnRlcgorXGRlZlxIRUFESU5HU2RvdWJsZXh7JQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9CitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGxpbmV7XGZvbGlvXGhmaWxcdGhpc3RpdGxlfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwb2RkcGFnZQorfQorCitcZGVmXEhFQURJTkdTc2luZ2xlYWZ0ZXJ7XGxldFxIRUFESU5HU2hvb2s9XEhFQURJTkdTc2luZ2xleH0KK1xkZWZcSEVBRElOR1NzaW5nbGV4eyUKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK30KKworJSBTdWJyb3V0aW5lcyB1c2VkIGluIGdlbmVyYXRpbmcgaGVhZGluZ3MKKyUgVGhpcyBwcm9kdWNlcyBEYXkgTW9udGggWWVhciBzdHlsZSBvZiBvdXRwdXQuCislIE9ubHkgZGVmaW5lIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQsIGluIGNhc2UgYSB0eGktPz8udGV4IGZpbGUgaGFzIHNldAorJSB1cCBhIGRpZmZlcmVudCBmb3JtYXQgKGUuZy4sIHR4aS1jcy50ZXggZG9lcyB0aGlzKS4KK1xpZnhcdG9kYXlcdW5kZWZpbmVkCitcZGVmXHRvZGF5eyUKKyAgXG51bWJlclxkYXlcc3BhY2UKKyAgXGlmY2FzZVxtb250aAorICBcb3JccHV0d29yZE1KYW5cb3JccHV0d29yZE1GZWJcb3JccHV0d29yZE1NYXJcb3JccHV0d29yZE1BcHIKKyAgXG9yXHB1dHdvcmRNTWF5XG9yXHB1dHdvcmRNSnVuXG9yXHB1dHdvcmRNSnVsXG9yXHB1dHdvcmRNQXVnCisgIFxvclxwdXR3b3JkTVNlcFxvclxwdXR3b3JkTU9jdFxvclxwdXR3b3JkTU5vdlxvclxwdXR3b3JkTURlYworICBcZmkKKyAgXHNwYWNlXG51bWJlclx5ZWFyfQorXGZpCisKKyUgQHNldHRpdGxlIGxpbmUuLi4gIHNwZWNpZmllcyB0aGUgdGl0bGUgb2YgdGhlIGRvY3VtZW50LCBmb3IgaGVhZGluZ3MuCislIEl0IGdlbmVyYXRlcyBubyBvdXRwdXQgb2YgaXRzIG93bi4KK1xkZWZcdGhpc3RpdGxle1xwdXR3b3JkTm9UaXRsZX0KK1xkZWZcc2V0dGl0bGV7XHBhcnNlYXJne1xnZGVmXHRoaXN0aXRsZX19CisKKworXG1lc3NhZ2V7dGFibGVzLH0KKyUgVGFibGVzIC0tIEB0YWJsZSwgQGZ0YWJsZSwgQHZ0YWJsZSwgQGl0ZW0oeCkuCisKKyUgZGVmYXVsdCBpbmRlbnRhdGlvbiBvZiB0YWJsZSB0ZXh0CitcbmV3ZGltZW5cdGFibGVpbmRlbnQgXHRhYmxlaW5kZW50PS44aW4KKyUgZGVmYXVsdCBpbmRlbnRhdGlvbiBvZiBAaXRlbWl6ZSBhbmQgQGVudW1lcmF0ZSB0ZXh0CitcbmV3ZGltZW5caXRlbWluZGVudCAgXGl0ZW1pbmRlbnQ9LjNpbgorJSBtYXJnaW4gYmV0d2VlbiBlbmQgb2YgdGFibGUgaXRlbSBhbmQgc3RhcnQgb2YgdGFibGUgdGV4dC4KK1xuZXdkaW1lblxpdGVtbWFyZ2luICBcaXRlbW1hcmdpbj0uMWluCisKKyUgdXNlZCBpbnRlcm5hbGx5IGZvciBcaXRlbWluZGVudCBtaW51cyBcaXRlbW1hcmdpbgorXG5ld2RpbWVuXGl0ZW1tYXgKKworJSBOb3RlIEB0YWJsZSwgQGZ0YWJsZSwgYW5kIEB2dGFibGUgZGVmaW5lIEBpdGVtLCBAaXRlbXgsIGV0Yy4sIHdpdGgKKyUgdGhlc2UgZGVmcy4KKyUgVGhleSBhbHNvIGRlZmluZSBcaXRlbWluZGV4CislIHRvIGluZGV4IHRoZSBpdGVtIG5hbWUgaW4gd2hhdGV2ZXIgbWFubmVyIGlzIGRlc2lyZWQgKHBlcmhhcHMgbm9uZSkuCisKK1xuZXdpZlxpZml0ZW14bmVlZHNuZWdhdGl2ZXZza2lwCisKK1xkZWZcaXRlbXhwYXJ7XHBhclxpZml0ZW14bmVlZHNuZWdhdGl2ZXZza2lwXG5vYnJlYWtcdnNraXAtXHBhcnNraXBcbm9icmVha1xmaX0KKworXGRlZlxpbnRlcm5hbEJpdGVte1xzbWFsbGJyZWFrIFxwYXJzZWFyZ1xpdGVtenp6fQorXGRlZlxpbnRlcm5hbEJpdGVteHtcaXRlbXhwYXIgXHBhcnNlYXJnXGl0ZW16enp9CisKK1xkZWZcaXRlbXp6eiAjMXtcYmVnaW5ncm91cCAlCisgIFxhZHZhbmNlXGhzaXplIGJ5IC1ccmlnaHRza2lwCisgIFxhZHZhbmNlXGhzaXplIGJ5IC1cdGFibGVpbmRlbnQKKyAgXHNldGJveDA9XGhib3h7XGl0ZW1pbmRpY2F0ZXsjMX19JQorICBcaXRlbWluZGV4eyMxfSUKKyAgXG5vYnJlYWsgJSBUaGlzIHByZXZlbnRzIGEgYnJlYWsgYmVmb3JlIEBpdGVteC4KKyAgJQorICAlIElmIHRoZSBpdGVtIHRleHQgZG9lcyBub3QgZml0IGluIHRoZSBzcGFjZSB3ZSBoYXZlLCBwdXQgaXQgb24gYSBsaW5lCisgICUgYnkgaXRzZWxmLCBhbmQgZG8gbm90IGFsbG93IGEgcGFnZSBicmVhayBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoYXQKKyAgJSBsaW5lLiAgV2UgZG8gbm90IHN0YXJ0IGEgcGFyYWdyYXBoIGhlcmUgYmVjYXVzZSB0aGVuIGlmIHRoZSBuZXh0CisgICUgY29tbWFuZCBpcywgZS5nLiwgQGtpbmRleCwgdGhlIHdoYXRzaXQgd291bGQgZ2V0IHB1dCBpbnRvIHRoZQorICAlIGhvcml6b250YWwgbGlzdCBvbiBhIGxpbmUgYnkgaXRzZWxmLCByZXN1bHRpbmcgaW4gZXh0cmEgYmxhbmsgc3BhY2UuCisgIFxpZmRpbSBcd2QwPlxpdGVtbWF4CisgICAgJQorICAgICUgTWFrZSB0aGlzIGEgcGFyYWdyYXBoIHNvIHdlIGdldCB0aGUgXHBhcnNraXAgZ2x1ZSBhbmQgd3JhcHBpbmcsCisgICAgJSBidXQgbGVhdmUgaXQgcmFnZ2VkLXJpZ2h0LgorICAgIFxiZWdpbmdyb3VwCisgICAgICBcYWR2YW5jZVxsZWZ0c2tpcCBieS1cdGFibGVpbmRlbnQKKyAgICAgIFxhZHZhbmNlXGhzaXplIGJ5XHRhYmxlaW5kZW50CisgICAgICBcYWR2YW5jZVxyaWdodHNraXAgYnkwcHQgcGx1czFmaWwKKyAgICAgIFxsZWF2ZXZtb2RlXHVuaGJveDBccGFyCisgICAgXGVuZGdyb3VwCisgICAgJQorICAgICUgV2UncmUgZ29pbmcgdG8gYmUgc3RhcnRpbmcgYSBwYXJhZ3JhcGgsIGJ1dCB3ZSBkb24ndCB3YW50IHRoZQorICAgICUgXHBhcnNraXAgZ2x1ZSAtLSBsb2dpY2FsbHkgaXQncyBwYXJ0IG9mIHRoZSBAaXRlbSB3ZSBqdXN0IHN0YXJ0ZWQuCisgICAgXG5vYnJlYWsgXHZza2lwLVxwYXJza2lwCisgICAgJQorICAgICUgU3RvcCBhIHBhZ2UgYnJlYWsgYXQgdGhlIFxwYXJza2lwIGdsdWUgY29taW5nIHVwLiAgSG93ZXZlciwgaWYKKyAgICAlIHdoYXQgZm9sbG93cyBpcyBhbiBlbnZpcm9ubWVudCBzdWNoIGFzIEBleGFtcGxlLCB0aGVyZSB3aWxsIGJlIG5vCisgICAgJSBccGFyc2tpcCBnbHVlOyB0aGVuIHRoZSBuZWdhdGl2ZSB2c2tpcCB3ZSBqdXN0IGluc2VydGVkIHdvdWxkCisgICAgJSBjYXVzZSB0aGUgZXhhbXBsZSBhbmQgdGhlIGl0ZW0gdG8gY3Jhc2ggdG9nZXRoZXIuICBTbyB3ZSB1c2UgdGhpcworICAgICUgYml6YXJyZSB2YWx1ZSBvZiAxMDAwMSBhcyBhIHNpZ25hbCB0byBcYWJvdmVlbnZicmVhayB0byBpbnNlcnQKKyAgICAlIFxwYXJza2lwIGdsdWUgYWZ0ZXIgYWxsLiAgU2VjdGlvbiB0aXRsZXMgYXJlIGhhbmRsZWQgdGhpcyB3YXkgYWxzby4KKyAgICAlIAorICAgIFxwZW5hbHR5IDEwMDAxCisgICAgXGVuZGdyb3VwCisgICAgXGl0ZW14bmVlZHNuZWdhdGl2ZXZza2lwZmFsc2UKKyAgXGVsc2UKKyAgICAlIFRoZSBpdGVtIHRleHQgZml0cyBpbnRvIHRoZSBzcGFjZS4gIFN0YXJ0IGEgcGFyYWdyYXBoLCBzbyB0aGF0IHRoZQorICAgICUgZm9sbG93aW5nIHRleHQgKGlmIGFueSkgd2lsbCBlbmQgdXAgb24gdGhlIHNhbWUgbGluZS4KKyAgICBcbm9pbmRlbnQKKyAgICAlIERvIHRoaXMgd2l0aCBrZXJucyBhbmQgXHVuaGJveCBzbyB0aGF0IGlmIHRoZXJlIGlzIGEgZm9vdG5vdGUgaW4KKyAgICAlIHRoZSBpdGVtIHRleHQsIGl0IGNhbiBtaWdyYXRlIHRvIHRoZSBtYWluIHZlcnRpY2FsIGxpc3QgYW5kCisgICAgJSBldmVudHVhbGx5IGJlIHByaW50ZWQuCisgICAgXG5vYnJlYWtca2Vybi1cdGFibGVpbmRlbnQKKyAgICBcZGltZW4wID0gXGl0ZW1tYXggIFxhZHZhbmNlXGRpbWVuMCBieSBcaXRlbW1hcmdpbiBcYWR2YW5jZVxkaW1lbjAgYnkgLVx3ZDAKKyAgICBcdW5oYm94MAorICAgIFxub2JyZWFrXGtlcm5cZGltZW4wCisgICAgXGVuZGdyb3VwCisgICAgXGl0ZW14bmVlZHNuZWdhdGl2ZXZza2lwdHJ1ZQorICBcZmkKK30KKworXGRlZlxpdGVte1xlcnJtZXNzYWdle0BpdGVtIHdoaWxlIG5vdCBpbiBhIGxpc3QgZW52aXJvbm1lbnR9fQorXGRlZlxpdGVteHtcZXJybWVzc2FnZXtAaXRlbXggd2hpbGUgbm90IGluIGEgbGlzdCBlbnZpcm9ubWVudH19CisKKyUgQHRhYmxlLCBAZnRhYmxlLCBAdnRhYmxlLgorXGVudmRlZlx0YWJsZXslCisgIFxsZXRcaXRlbWluZGV4XGdvYmJsZQorICBcdGFibGVjaGVja3t0YWJsZX0lCit9CitcZW52ZGVmXGZ0YWJsZXslCisgIFxkZWZcaXRlbWluZGV4ICMjMXtcZG9pbmQge2ZufXtcY29kZXsjIzF9fX0lCisgIFx0YWJsZWNoZWNre2Z0YWJsZX0lCit9CitcZW52ZGVmXHZ0YWJsZXslCisgIFxkZWZcaXRlbWluZGV4ICMjMXtcZG9pbmQge3ZyfXtcY29kZXsjIzF9fX0lCisgIFx0YWJsZWNoZWNre3Z0YWJsZX0lCit9CitcZGVmXHRhYmxlY2hlY2sjMXslCisgIFxpZm51bSBcdGhlXGNhdGNvZGVgXF5eTT1cYWN0aXZlCisgICAgXGVuZGdyb3VwCisgICAgXGVycm1lc3NhZ2V7VGhpcyBjb21tYW5kIHdvbid0IHdvcmsgaW4gdGhpcyBjb250ZXh0OyBwZXJoYXBzIHRoZSBwcm9ibGVtIGlzCisgICAgICB0aGF0IHdlIGFyZSBcaW5lbnZpcm9ubWVudFx0aGlzZW52fSUKKyAgICBcZGVmXG5leHR7XGRvaWdub3JleyMxfX0lCisgIFxlbHNlCisgICAgXGxldFxuZXh0XHRhYmxleAorICBcZmkKKyAgXG5leHQKK30KK1xkZWZcdGFibGV4IzF7JQorICBcZGVmXGl0ZW1pbmRpY2F0ZXsjMX0lCisgIFxwYXJzZWFyZ1x0YWJsZXkKK30KK1xkZWZcdGFibGV5IzF7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGVkZWZcdGVtcHtcbm9leHBhbmRcdGFibGV6ICMxXHNwYWNlXHNwYWNlXHNwYWNlfSUKKyAgICBcZXhwYW5kYWZ0ZXIKKyAgfVx0ZW1wIFxlbmR0YWJsZXoKK30KK1xkZWZcdGFibGV6ICMxICMyICMzICM0XGVuZHRhYmxlenslCisgIFxhYm92ZWVudmJyZWFrCisgIFxpZm51bSAwIzE+MCBcYWR2YW5jZSBcbGVmdHNraXAgYnkgIzFcbWlsIFxmaQorICBcaWZudW0gMCMyPjAgXHRhYmxlaW5kZW50PSMyXG1pbCBcZmkKKyAgXGlmbnVtIDAjMz4wIFxhZHZhbmNlIFxyaWdodHNraXAgYnkgIzNcbWlsIFxmaQorICBcaXRlbW1heD1cdGFibGVpbmRlbnQKKyAgXGFkdmFuY2UgXGl0ZW1tYXggYnkgLVxpdGVtbWFyZ2luCisgIFxhZHZhbmNlIFxsZWZ0c2tpcCBieSBcdGFibGVpbmRlbnQKKyAgXGV4ZGVudGFtb3VudD1cdGFibGVpbmRlbnQKKyAgXHBhcmluZGVudCA9IDBwdAorICBccGFyc2tpcCA9IFxzbWFsbHNraXBhbW91bnQKKyAgXGlmZGltIFxwYXJza2lwPTBwdCBccGFyc2tpcD0ycHQgXGZpCisgIFxsZXRcaXRlbSA9IFxpbnRlcm5hbEJpdGVtCisgIFxsZXRcaXRlbXggPSBcaW50ZXJuYWxCaXRlbXgKK30KK1xkZWZcRXRhYmxle1xlbmRncmFmXGFmdGVyZW52YnJlYWt9CitcbGV0XEVmdGFibGVcRXRhYmxlCitcbGV0XEV2dGFibGVcRXRhYmxlCitcbGV0XEVpdGVtaXplXEV0YWJsZQorXGxldFxFZW51bWVyYXRlXEV0YWJsZQorCislIFRoaXMgaXMgdGhlIGNvdW50ZXIgdXNlZCBieSBAZW51bWVyYXRlLCB3aGljaCBpcyByZWFsbHkgQGl0ZW1pemUKKworXG5ld2NvdW50IFxpdGVtbm8KKworXGVudmRlZlxpdGVtaXple1xwYXJzZWFyZ1xkb2l0ZW1pemV9CisKK1xkZWZcZG9pdGVtaXplIzF7JQorICBcYWJvdmVlbnZicmVhaworICBcaXRlbW1heD1caXRlbWluZGVudAorICBcYWR2YW5jZVxpdGVtbWF4IGJ5IC1caXRlbW1hcmdpbgorICBcYWR2YW5jZVxsZWZ0c2tpcCBieSBcaXRlbWluZGVudAorICBcZXhkZW50YW1vdW50PVxpdGVtaW5kZW50CisgIFxwYXJpbmRlbnQ9MHB0CisgIFxwYXJza2lwPVxzbWFsbHNraXBhbW91bnQKKyAgXGlmZGltXHBhcnNraXA9MHB0IFxwYXJza2lwPTJwdCBcZmkKKyAgXGRlZlxpdGVtY29udGVudHN7IzF9JQorICAlIEBpdGVtaXplIHdpdGggbm8gYXJnIGlzIGVxdWl2YWxlbnQgdG8gQGl0ZW1pemUgQGJ1bGxldC4KKyAgXGlmeFxpdGVtY29udGVudHNcZW1wdHlcZGVmXGl0ZW1jb250ZW50c3tcYnVsbGV0fVxmaQorICBcbGV0XGl0ZW09XGl0ZW1pemVpdGVtCit9CisKKyUgRGVmaW5pdGlvbiBvZiBAaXRlbSB3aGlsZSBpbnNpZGUgQGl0ZW1pemUgYW5kIEBlbnVtZXJhdGUuCislCitcZGVmXGl0ZW1pemVpdGVteyUKKyAgXGFkdmFuY2VcaXRlbW5vIGJ5IDEgICUgZm9yIGVudW1lcmF0aW9ucworICB7XGxldFxwYXI9XGVuZGdyYWYgXHNtYWxsYnJlYWt9JSByZWFzb25hYmxlIHBsYWNlIHRvIGJyZWFrCisgIHslCisgICAlIElmIHRoZSBkb2N1bWVudCBoYXMgYW4gQGl0ZW1pemUgZGlyZWN0bHkgYWZ0ZXIgYSBzZWN0aW9uIHRpdGxlLCBhCisgICAlIFxub2JyZWFrIHdpbGwgYmUgbGFzdCBvbiB0aGUgbGlzdCwgYW5kIFxzZWN0aW9uaGVhZGluZyB3aWxsIGhhdmUKKyAgICUgZG9uZSBhIFx2c2tpcC1ccGFyc2tpcC4gIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byB6ZXJvCisgICAlIHBhcnNraXAsIG9yIHRoZSBpdGVtIHRleHQgd2lsbCBjcmFzaCB3aXRoIHRoZSBoZWFkaW5nLiAgT24gdGhlCisgICAlIG90aGVyIGhhbmQsIHdoZW4gdGhlcmUgaXMgbm9ybWFsIHRleHQgcHJlY2VkaW5nIHRoZSBpdGVtIChhcyB0aGVyZQorICAgJSB1c3VhbGx5IGlzKSwgd2UgZG8gd2FudCB0byB6ZXJvIHBhcnNraXAsIG9yIHRoZXJlIHdvdWxkIGJlIHRvbyBtdWNoCisgICAlIHNwYWNlLiAgSW4gdGhhdCBjYXNlLCB3ZSB3b24ndCBoYXZlIGEgXG5vYnJlYWsgYmVmb3JlLiAgQXQgbGVhc3QKKyAgICUgdGhhdCdzIHRoZSB0aGVvcnkuCisgICBcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDAgXHBhcnNraXA9MGluIFxmaQorICAgXG5vaW5kZW50CisgICBcaGJveCB0byAwcHR7XGhzcyBcaXRlbWNvbnRlbnRzIFxrZXJuXGl0ZW1tYXJnaW59JQorICAgXHZhZGp1c3R7XHBlbmFsdHkgMTIwMH19JSBub3QgZ29vZCB0byBicmVhayBhZnRlciBmaXJzdCBsaW5lIG9mIGl0ZW0uCisgIFxmbHVzaGNyCit9CisKKyUgXHNwbGl0b2ZmIFRPS0VOU1xlbmRtYXJrIGRlZmluZXMgXGZpcnN0IHRvIGJlIHRoZSBmaXJzdCB0b2tlbiBpbgorJSBUT0tFTlMsIGFuZCBccmVzdCB0byBiZSB0aGUgcmVtYWluZGVyLgorJQorXGRlZlxzcGxpdG9mZiMxIzJcZW5kbWFya3tcZGVmXGZpcnN0eyMxfVxkZWZccmVzdHsjMn19JQorCislIEFsbG93IGFuIG9wdGlvbmFsIGFyZ3VtZW50IG9mIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGxvd2VyY2FzZSBsZXR0ZXIsCislIG9yIG51bWJlciwgdG8gc3BlY2lmeSB0aGUgZmlyc3QgbGFiZWwgaW4gdGhlIGVudW1lcmF0ZWQgbGlzdC4gIE5vCislIGFyZ3VtZW50IGlzIHRoZSBzYW1lIGFzIGAxJy4KKyUKK1xlbnZwYXJzZWFyZ2RlZlxlbnVtZXJhdGV7XGVudW1lcmF0ZXkgIzEgIFxlbmRlbnVtZXJhdGV5fQorXGRlZlxlbnVtZXJhdGV5ICMxICMyXGVuZGVudW1lcmF0ZXl7JQorICAlIElmIHdlIHdlcmUgZ2l2ZW4gbm8gYXJndW1lbnQsIHByZXRlbmQgd2Ugd2VyZSBnaXZlbiBgMScuCisgIFxkZWZcdGhlYXJneyMxfSUKKyAgXGlmeFx0aGVhcmdcZW1wdHkgXGRlZlx0aGVhcmd7MX1cZmkKKyAgJQorICAlIERldGVjdCBpZiB0aGUgYXJndW1lbnQgaXMgYSBzaW5nbGUgdG9rZW4uICBJZiBzbywgaXQgbWlnaHQgYmUgYQorICAlIGxldHRlci4gIE90aGVyd2lzZSwgdGhlIG9ubHkgdmFsaWQgdGhpbmcgaXQgY2FuIGJlIGlzIGEgbnVtYmVyLgorICAlIChXZSB3aWxsIGFsd2F5cyBoYXZlIG9uZSB0b2tlbiwgYmVjYXVzZSBvZiB0aGUgdGVzdCB3ZSBqdXN0IG1hZGUuCisgICUgVGhpcyBpcyBhIGdvb2QgdGhpbmcsIHNpbmNlIFxzcGxpdG9mZiBkb2Vzbid0IHdvcmsgZ2l2ZW4gbm90aGluZyBhdAorICAlIGFsbCAtLSB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIHVuZGVsaW1pdGVkLikKKyAgXGV4cGFuZGFmdGVyXHNwbGl0b2ZmXHRoZWFyZ1xlbmRtYXJrCisgIFxpZnhccmVzdFxlbXB0eQorICAgICUgT25seSBvbmUgdG9rZW4gaW4gdGhlIGFyZ3VtZW50LiAgSXQgY291bGQgc3RpbGwgYmUgYW55dGhpbmcuCisgICAgJSBBIGBgbG93ZXJjYXNlIGxldHRlcicnIGlzIG9uZSB3aG9zZSBcbGNjb2RlIGlzIG5vbnplcm8uCisgICAgJSBBbiBgYHVwcGVyY2FzZSBsZXR0ZXInJyBpcyBvbmUgd2hvc2UgXGxjY29kZSBpcyBib3RoIG5vbnplcm8sIGFuZAorICAgICUgICBub3QgZXF1YWwgdG8gaXRzZWxmLgorICAgICUgT3RoZXJ3aXNlLCB3ZSBhc3N1bWUgaXQncyBhIG51bWJlci4KKyAgICAlCisgICAgJSBXZSBuZWVkIHRoZSBccmVsYXggYXQgdGhlIGVuZCBvZiB0aGUgXGlmbnVtIGxpbmVzIHRvIHN0b3AgVGVYIGZyb20KKyAgICAlIGNvbnRpbnVpbmcgdG8gbG9vayBmb3IgYSA8bnVtYmVyPi4KKyAgICAlCisgICAgXGlmbnVtXGxjY29kZVxleHBhbmRhZnRlcmBcdGhlYXJnPTBccmVsYXgKKyAgICAgIFxudW1lcmljZW51bWVyYXRlICUgYSBudW1iZXIgKHdlIGhvcGUpCisgICAgXGVsc2UKKyAgICAgICUgSXQncyBhIGxldHRlci4KKyAgICAgIFxpZm51bVxsY2NvZGVcZXhwYW5kYWZ0ZXJgXHRoZWFyZz1cZXhwYW5kYWZ0ZXJgXHRoZWFyZ1xyZWxheAorICAgICAgICBcbG93ZXJjYXNlZW51bWVyYXRlICUgbG93ZXJjYXNlIGxldHRlcgorICAgICAgXGVsc2UKKyAgICAgICAgXHVwcGVyY2FzZWVudW1lcmF0ZSAlIHVwcGVyY2FzZSBsZXR0ZXIKKyAgICAgIFxmaQorICAgIFxmaQorICBcZWxzZQorICAgICUgTXVsdGlwbGUgdG9rZW5zIGluIHRoZSBhcmd1bWVudC4gIFdlIGhvcGUgaXQncyBhIG51bWJlci4KKyAgICBcbnVtZXJpY2VudW1lcmF0ZQorICBcZmkKK30KKworJSBBbiBAZW51bWVyYXRlIHdob3NlIGxhYmVscyBhcmUgaW50ZWdlcnMuICBUaGUgc3RhcnRpbmcgaW50ZWdlciBpcworJSBnaXZlbiBpbiBcdGhlYXJnLgorJQorXGRlZlxudW1lcmljZW51bWVyYXRleyUKKyAgXGl0ZW1ubyA9IFx0aGVhcmcKKyAgXHN0YXJ0ZW51bWVyYXRpb257XHRoZVxpdGVtbm99JQorfQorCislIFRoZSBzdGFydGluZyAobG93ZXJjYXNlKSBsZXR0ZXIgaXMgaW4gXHRoZWFyZy4KK1xkZWZcbG93ZXJjYXNlZW51bWVyYXRleyUKKyAgXGl0ZW1ubyA9IFxleHBhbmRhZnRlcmBcdGhlYXJnCisgIFxzdGFydGVudW1lcmF0aW9ueyUKKyAgICAlIEJlIHN1cmUgd2UncmUgbm90IGJleW9uZCB0aGUgZW5kIG9mIHRoZSBhbHBoYWJldC4KKyAgICBcaWZudW1caXRlbW5vPTAKKyAgICAgIFxlcnJtZXNzYWdle05vIG1vcmUgbG93ZXJjYXNlIGxldHRlcnMgaW4gQGVudW1lcmF0ZTsgZ2V0IGEgYmlnZ2VyCisgICAgICAgICAgICAgICAgICBhbHBoYWJldH0lCisgICAgXGZpCisgICAgXGNoYXJcbGNjb2RlXGl0ZW1ubworICB9JQorfQorCislIFRoZSBzdGFydGluZyAodXBwZXJjYXNlKSBsZXR0ZXIgaXMgaW4gXHRoZWFyZy4KK1xkZWZcdXBwZXJjYXNlZW51bWVyYXRleyUKKyAgXGl0ZW1ubyA9IFxleHBhbmRhZnRlcmBcdGhlYXJnCisgIFxzdGFydGVudW1lcmF0aW9ueyUKKyAgICAlIEJlIHN1cmUgd2UncmUgbm90IGJleW9uZCB0aGUgZW5kIG9mIHRoZSBhbHBoYWJldC4KKyAgICBcaWZudW1caXRlbW5vPTAKKyAgICAgIFxlcnJtZXNzYWdle05vIG1vcmUgdXBwZXJjYXNlIGxldHRlcnMgaW4gQGVudW1lcmF0ZTsgZ2V0IGEgYmlnZ2VyCisgICAgICAgICAgICAgICAgICBhbHBoYWJldH0KKyAgICBcZmkKKyAgICBcY2hhclx1Y2NvZGVcaXRlbW5vCisgIH0lCit9CisKKyUgQ2FsbCBcZG9pdGVtaXplLCBhZGRpbmcgYSBwZXJpb2QgdG8gdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBzdXBwbHlpbmcgdGhlCislIGNvbW1vbiBsYXN0IHR3byBhcmd1bWVudHMuICBBbHNvIHN1YnRyYWN0IG9uZSBmcm9tIHRoZSBpbml0aWFsIHZhbHVlIGluCislIFxpdGVtbm8sIHNpbmNlIEBpdGVtIGluY3JlbWVudHMgXGl0ZW1uby4KKyUKK1xkZWZcc3RhcnRlbnVtZXJhdGlvbiMxeyUKKyAgXGFkdmFuY2VcaXRlbW5vIGJ5IC0xCisgIFxkb2l0ZW1pemV7IzEufVxmbHVzaGNyCit9CisKKyUgQGFscGhhZW51bWVyYXRlIGFuZCBAY2Fwc2VudW1lcmF0ZSBhcmUgYWJicmV2aWF0aW9ucyBmb3IgZ2l2aW5nIGFuIGFyZworJSB0byBAZW51bWVyYXRlLgorJQorXGRlZlxhbHBoYWVudW1lcmF0ZXtcZW51bWVyYXRle2F9fQorXGRlZlxjYXBzZW51bWVyYXRle1xlbnVtZXJhdGV7QX19CitcZGVmXEVhbHBoYWVudW1lcmF0ZXtcRWVudW1lcmF0ZX0KK1xkZWZcRWNhcHNlbnVtZXJhdGV7XEVlbnVtZXJhdGV9CisKKworJSBAbXVsdGl0YWJsZSBtYWNyb3MKKyUgQW15IEhlbmRyaWNrc29uLCA4LzE4Lzk0LCAzLzYvOTYKKyUKKyUgQG11bHRpdGFibGUgLi4uIEBlbmQgbXVsdGl0YWJsZSB3aWxsIG1ha2UgYXMgbWFueSBjb2x1bW5zIGFzIGRlc2lyZWQuCislIENvbnRlbnRzIG9mIGVhY2ggY29sdW1uIHdpbGwgd3JhcCBhdCB3aWR0aCBnaXZlbiBpbiBwcmVhbWJsZS4gIFdpZHRoCislIGNhbiBiZSBzcGVjaWZpZWQgZWl0aGVyIHdpdGggc2FtcGxlIHRleHQgZ2l2ZW4gaW4gYSB0ZW1wbGF0ZSBsaW5lLAorJSBvciBpbiBwZXJjZW50IG9mIFxoc2l6ZSwgdGhlIGN1cnJlbnQgd2lkdGggb2YgdGV4dCBvbiBwYWdlLgorCislIFRhYmxlIGNhbiBjb250aW51ZSBvdmVyIHBhZ2VzIGJ1dCB3aWxsIG9ubHkgYnJlYWsgYmV0d2VlbiBsaW5lcy4KKworJSBUbyBtYWtlIHByZWFtYmxlOgorJQorJSBFaXRoZXIgZGVmaW5lIHdpZHRocyBvZiBjb2x1bW5zIGluIHRlcm1zIG9mIHBlcmNlbnQgb2YgXGhzaXplOgorJSAgIEBtdWx0aXRhYmxlIEBjb2x1bW5mcmFjdGlvbnMgLjI1IC4zIC40NQorJSAgIEBpdGVtIC4uLgorJQorJSAgIE51bWJlcnMgZm9sbG93aW5nIEBjb2x1bW5mcmFjdGlvbnMgYXJlIHRoZSBwZXJjZW50IG9mIHRoZSB0b3RhbAorJSAgIGN1cnJlbnQgaHNpemUgdG8gYmUgdXNlZCBmb3IgZWFjaCBjb2x1bW4uIFlvdSBtYXkgdXNlIGFzIG1hbnkKKyUgICBjb2x1bW5zIGFzIGRlc2lyZWQuCisKKworJSBPciB1c2UgYSB0ZW1wbGF0ZToKKyUgICBAbXVsdGl0YWJsZSB7Q29sdW1uIDEgdGVtcGxhdGV9IHtDb2x1bW4gMiB0ZW1wbGF0ZX0ge0NvbHVtbiAzIHRlbXBsYXRlfQorJSAgIEBpdGVtIC4uLgorJSAgIHVzaW5nIHRoZSB3aWRlc3QgdGVybSBkZXNpcmVkIGluIGVhY2ggY29sdW1uLgorCislIEVhY2ggbmV3IHRhYmxlIGxpbmUgc3RhcnRzIHdpdGggQGl0ZW0sIGVhY2ggc3Vic2VxdWVudCBuZXcgY29sdW1uCislIHN0YXJ0cyB3aXRoIEB0YWIuIEVtcHR5IGNvbHVtbnMgbWF5IGJlIHByb2R1Y2VkIGJ5IHN1cHBseWluZyBAdGFiJ3MKKyUgd2l0aCBub3RoaW5nIGJldHdlZW4gdGhlbSBmb3IgYXMgbWFueSB0aW1lcyBhcyBlbXB0eSBjb2x1bW5zIGFyZSBuZWVkZWQsCislIGllLCBAdGFiQHRhYkB0YWIgd2lsbCBwcm9kdWNlIHR3byBlbXB0eSBjb2x1bW5zLgorCislIEBpdGVtLCBAdGFiIGRvIG5vdCBuZWVkIHRvIGJlIG9uIHRoZWlyIG93biBsaW5lcywgYnV0IGl0IHdpbGwgbm90IGh1cnQKKyUgaWYgdGhleSBhcmUuCisKKyUgU2FtcGxlIG11bHRpdGFibGU6CisKKyUgICBAbXVsdGl0YWJsZSB7Q29sdW1uIDEgdGVtcGxhdGV9IHtDb2x1bW4gMiB0ZW1wbGF0ZX0ge0NvbHVtbiAzIHRlbXBsYXRlfQorJSAgIEBpdGVtIGZpcnN0IGNvbCBzdHVmZiBAdGFiIHNlY29uZCBjb2wgc3R1ZmYgQHRhYiB0aGlyZCBjb2wKKyUgICBAaXRlbQorJSAgIGZpcnN0IGNvbCBzdHVmZgorJSAgIEB0YWIKKyUgICBzZWNvbmQgY29sIHN0dWZmCislICAgQHRhYgorJSAgIHRoaXJkIGNvbAorJSAgIEBpdGVtIGZpcnN0IGNvbCBzdHVmZiBAdGFiIHNlY29uZCBjb2wgc3R1ZmYKKyUgICBAdGFiIE1hbnkgcGFyYWdyYXBocyBvZiB0ZXh0IG1heSBiZSB1c2VkIGluIGFueSBjb2x1bW4uCislCislICAgICAgICAgVGhleSB3aWxsIHdyYXAgYXQgdGhlIHdpZHRoIGRldGVybWluZWQgYnkgdGhlIHRlbXBsYXRlLgorJSAgIEBpdGVtQHRhYkB0YWIgVGhpcyB3aWxsIGJlIGluIHRoaXJkIGNvbHVtbi4KKyUgICBAZW5kIG11bHRpdGFibGUKKworJSBEZWZhdWx0IGRpbWVuc2lvbnMgbWF5IGJlIHJlc2V0IGJ5IHVzZXIuCislIEBtdWx0aXRhYmxlcGFyc2tpcCBpcyB2ZXJ0aWNhbCBzcGFjZSBiZXR3ZWVuIHBhcmFncmFwaHMgaW4gdGFibGUuCislIEBtdWx0aXRhYmxlcGFyaW5kZW50IGlzIHBhcmFncmFwaCBpbmRlbnQgaW4gdGFibGUuCislIEBtdWx0aXRhYmxlY29sbWFyZ2luIGlzIGhvcml6b250YWwgc3BhY2UgdG8gYmUgbGVmdCBiZXR3ZWVuIGNvbHVtbnMuCislIEBtdWx0aXRhYmxlbGluZXNwYWNlIGlzIHNwYWNlIHRvIGxlYXZlIGJldHdlZW4gdGFibGUgaXRlbXMsIGJhc2VsaW5lCislICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmFzZWxpbmUuCislICAgMHB0IG1lYW5zIGl0IGRlcGVuZHMgb24gY3VycmVudCBub3JtYWwgbGluZSBzcGFjaW5nLgorJQorXG5ld3NraXBcbXVsdGl0YWJsZXBhcnNraXAKK1xuZXdza2lwXG11bHRpdGFibGVwYXJpbmRlbnQKK1xuZXdkaW1lblxtdWx0aXRhYmxlY29sc3BhY2UKK1xuZXdza2lwXG11bHRpdGFibGVsaW5lc3BhY2UKK1xtdWx0aXRhYmxlcGFyc2tpcD0wcHQKK1xtdWx0aXRhYmxlcGFyaW5kZW50PTZwdAorXG11bHRpdGFibGVjb2xzcGFjZT0xMnB0CitcbXVsdGl0YWJsZWxpbmVzcGFjZT0wcHQKKworJSBNYWNyb3MgdXNlZCB0byBzZXQgdXAgaGFsaWduIHByZWFtYmxlOgorJQorXGxldFxlbmRzZXR1cHRhYmxlXHJlbGF4CitcZGVmXHhlbmRzZXR1cHRhYmxle1xlbmRzZXR1cHRhYmxlfQorXGxldFxjb2x1bW5mcmFjdGlvbnNccmVsYXgKK1xkZWZceGNvbHVtbmZyYWN0aW9uc3tcY29sdW1uZnJhY3Rpb25zfQorXG5ld2lmXGlmc2V0cGVyY2VudAorCislICMxIGlzIHRoZSBAY29sdW1uZnJhY3Rpb24sIHVzdWFsbHkgYSBkZWNpbWFsIG51bWJlciBsaWtlIC41LCBidXQgbWlnaHQKKyUgYmUganVzdCAxLiAgV2UganVzdCB1c2UgaXQsIHdoYXRldmVyIGl0IGlzLgorJQorXGRlZlxwaWNrdXB3aG9sZWZyYWN0aW9uIzEgeyUKKyAgXGdsb2JhbFxhZHZhbmNlXGNvbGNvdW50IGJ5IDEKKyAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIGNvbFx0aGVcY29sY291bnRcZW5kY3NuYW1leyMxXGhzaXplfSUKKyAgXHNldHVwdGFibGUKK30KKworXG5ld2NvdW50XGNvbGNvdW50CitcZGVmXHNldHVwdGFibGUjMXslCisgIFxkZWZcZmlyc3Rhcmd7IzF9JQorICBcaWZ4XGZpcnN0YXJnXHhlbmRzZXR1cHRhYmxlCisgICAgXGxldFxnbyA9IFxyZWxheAorICBcZWxzZQorICAgIFxpZnhcZmlyc3RhcmdceGNvbHVtbmZyYWN0aW9ucworICAgICAgXGdsb2JhbFxzZXRwZXJjZW50dHJ1ZQorICAgIFxlbHNlCisgICAgICBcaWZzZXRwZXJjZW50CisgICAgICAgICBcbGV0XGdvXHBpY2t1cHdob2xlZnJhY3Rpb24KKyAgICAgIFxlbHNlCisgICAgICAgICBcZ2xvYmFsXGFkdmFuY2VcY29sY291bnQgYnkgMQorICAgICAgICAgXHNldGJveDA9XGhib3h7IzFcdW5za2lwXHNwYWNlfSUgQWRkIGEgbm9ybWFsIHdvcmQgc3BhY2UgYXMgYQorICAgICAgICAgICAgICAgICAgICUgc2VwYXJhdG9yOyB0eXBpY2FsbHkgdGhhdCBpcyBhbHdheXMgaW4gdGhlIGlucHV0LCBhbnl3YXkuCisgICAgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUgY29sXHRoZVxjb2xjb3VudFxlbmRjc25hbWV7XHRoZVx3ZDB9JQorICAgICAgXGZpCisgICAgXGZpCisgICAgXGlmeFxnb1xwaWNrdXB3aG9sZWZyYWN0aW9uCisgICAgICAlIFB1dCB0aGUgYXJndW1lbnQgYmFjayBmb3IgdGhlIFxwaWNrdXB3aG9sZWZyYWN0aW9uIGNhbGwsIHNvCisgICAgICAlIHdlJ2xsIGFsd2F5cyBoYXZlIGEgcGVyaW9kIHRoZXJlIHRvIGJlIHBhcnNlZC4KKyAgICAgIFxkZWZcZ297XHBpY2t1cHdob2xlZnJhY3Rpb24jMX0lCisgICAgXGVsc2UKKyAgICAgIFxsZXRcZ28gPSBcc2V0dXB0YWJsZQorICAgIFxmaSUKKyAgXGZpCisgIFxnbworfQorCislIG11bHRpdGFibGUtb25seSBjb21tYW5kcy4KKyUKKyUgQGhlYWRpdGVtIHN0YXJ0cyBhIGhlYWRpbmcgcm93LCB3aGljaCB3ZSB0eXBlc2V0IGluIGJvbGQuCislIEFzc2lnbm1lbnRzIGhhdmUgdG8gYmUgZ2xvYmFsIHNpbmNlIHdlIGFyZSBpbnNpZGUgdGhlIGltcGxpY2l0IGdyb3VwCislIG9mIGFuIGFsaWdubWVudCBlbnRyeS4gIE5vdGUgdGhhdCBcZXZlcnljciByZXNldHMgXGV2ZXJ5dGFiLgorXGRlZlxoZWFkaXRlbXtcY2hlY2tlbnZcbXVsdGl0YWJsZSBcY3JjciBcZ2xvYmFsXGV2ZXJ5dGFiPXtcYmZ9XHRoZVxldmVyeXRhYn0lCislCislIEEgXHRhYiB1c2VkIHRvIGluY2x1ZGUgXGhza2lwMXNwLiAgQnV0IHRoZW4gdGhlIHNwYWNlIGluIGEgdGVtcGxhdGUKKyUgbGluZSBpcyBub3QgZW5vdWdoLiAgVGhhdCBpcyBiYWQuICBTbyBsZXQncyBnbyBiYWNrIHRvIGp1c3QgYCYnIHVudGlsCislIHdlIGVuY291bnRlciB0aGUgcHJvYmxlbSBpdCB3YXMgaW50ZW5kZWQgdG8gc29sdmUgYWdhaW4uCislCQkJCQktLWthcmwsIG5hdGhhbkBhY20ub3JnLCAyMGFwcjk5LgorXGRlZlx0YWJ7XGNoZWNrZW52XG11bHRpdGFibGUgJlx0aGVcZXZlcnl0YWJ9JQorCislIEBtdWx0aXRhYmxlIC4uLiBAZW5kIG11bHRpdGFibGUgZGVmaW5pdGlvbnM6CislCitcbmV3dG9rc1xldmVyeXRhYiAgJSBpbnNlcnQgYWZ0ZXIgZXZlcnkgdGFiLgorJQorXGVudmRlZlxtdWx0aXRhYmxleyUKKyAgXHZza2lwXHBhcnNraXAKKyAgXHN0YXJ0c2F2aW5naW5zZXJ0cworICAlCisgICUgQGl0ZW0gd2l0aGluIGEgbXVsdGl0YWJsZSBzdGFydHMgYSBub3JtYWwgcm93LgorICAlIFdlIHVzZSBcZGVmIGluc3RlYWQgb2YgXGxldCBzbyB0aGF0IGlmIG9uZSBvZiB0aGUgbXVsdGl0YWJsZSBlbnRyaWVzCisgICUgY29udGFpbnMgYW4gQGl0ZW1pemUsIHdlIGRvbid0IGNob2tlIG9uIHRoZSBcaXRlbSAoc2VlbiBhcyBcY3JjciBha2EKKyAgJSBcZW5kdGVtcGxhdGUpIGV4cGFuZGluZyBcZG9pdGVtaXplLgorICBcZGVmXGl0ZW17XGNyY3J9JQorICAlCisgIFx0b2xlcmFuY2U9OTUwMAorICBcaGJhZG5lc3M9OTUwMAorICBcc2V0bXVsdGl0YWJsZXNwYWNpbmcKKyAgXHBhcnNraXA9XG11bHRpdGFibGVwYXJza2lwCisgIFxwYXJpbmRlbnQ9XG11bHRpdGFibGVwYXJpbmRlbnQKKyAgXG92ZXJmdWxscnVsZT0wcHQKKyAgXGdsb2JhbFxjb2xjb3VudD0wCisgICUKKyAgXGV2ZXJ5Y3IgPSB7JQorICAgIFxub2FsaWdueyUKKyAgICAgIFxnbG9iYWxcZXZlcnl0YWI9e30lCisgICAgICBcZ2xvYmFsXGNvbGNvdW50PTAgJSBSZXNldCB0aGUgY29sdW1uIGNvdW50ZXIuCisgICAgICAlIENoZWNrIGZvciBzYXZlZCBmb290bm90ZXMsIGV0Yy4KKyAgICAgIFxjaGVja2luc2VydHMKKyAgICAgICUgS2VlcHMgdW5kZXJmdWxsIGJveCBtZXNzYWdlcyBvZmYgd2hlbiB0YWJsZSBicmVha3Mgb3ZlciBwYWdlcy4KKyAgICAgICVcZmlsYnJlYWsKKwklIE1heWJlIHNvLCBidXQgaXQgYWxzbyBjcmVhdGVzIHJlYWxseSB3ZWlyZCBwYWdlIGJyZWFrcyB3aGVuIHRoZQorCSUgdGFibGUgYnJlYWtzIG92ZXIgcGFnZXMuIFdvdWxkbid0IFx2ZmlsIGJlIGJldHRlcj8gIFdhaXQgdW50aWwgdGhlCisJJSBwcm9ibGVtIG1hbmlmZXN0cyBpdHNlbGYsIHNvIGl0IGNhbiBiZSBmaXhlZCBmb3IgcmVhbCAtLWthcmwuCisgICAgfSUKKyAgfSUKKyAgJQorICBccGFyc2VhcmdcZG9tdWx0aXRhYmxlCit9CitcZGVmXGRvbXVsdGl0YWJsZSMxeyUKKyAgJSBUbyBwYXJzZSBldmVyeXRoaW5nIGJldHdlZW4gQG11bHRpdGFibGUgYW5kIEBpdGVtOgorICBcc2V0dXB0YWJsZSMxIFxlbmRzZXR1cHRhYmxlCisgICUKKyAgJSBUaGlzIHByZWFtYmxlIHNldHMgdXAgYSBnZW5lcmljIGNvbHVtbiBkZWZpbml0aW9uLCB3aGljaCB3aWxsCisgICUgYmUgdXNlZCBhcyBtYW55IHRpbWVzIGFzIHVzZXIgY2FsbHMgZm9yIGNvbHVtbnMuCisgICUgXHZ0b3Agd2lsbCBzZXQgYSBzaW5nbGUgbGluZSBhbmQgd2lsbCBhbHNvIGxldCB0ZXh0IHdyYXAgYW5kCisgICUgY29udGludWUgZm9yIG1hbnkgcGFyYWdyYXBocyBpZiBkZXNpcmVkLgorICBcaGFsaWduXGJncm91cCAmJQorICAgIFxnbG9iYWxcYWR2YW5jZVxjb2xjb3VudCBieSAxCisgICAgXG11bHRpc3RydXQKKyAgICBcdnRvcHslCisgICAgICAlIFVzZSB0aGUgY3VycmVudCBcY29sY291bnQgdG8gZmluZCB0aGUgY29ycmVjdCBjb2x1bW4gd2lkdGg6CisgICAgICBcaHNpemU9XGV4cGFuZGFmdGVyXGNzbmFtZSBjb2xcdGhlXGNvbGNvdW50XGVuZGNzbmFtZQorICAgICAgJQorICAgICAgJSBJbiBvcmRlciB0byBrZWVwIGVudHJpZXMgZnJvbSBidW1waW5nIGludG8gZWFjaCBvdGhlcgorICAgICAgJSB3ZSB3aWxsIGFkZCBhIFxsZWZ0c2tpcCBvZiBcbXVsdGl0YWJsZWNvbHNwYWNlIHRvIGFsbCBjb2x1bW5zIGFmdGVyCisgICAgICAlIHRoZSBmaXJzdCBvbmUuCisgICAgICAlCisgICAgICAlIElmIGEgdGVtcGxhdGUgaGFzIGJlZW4gdXNlZCwgd2Ugd2lsbCBhZGQgXG11bHRpdGFibGVjb2xzcGFjZQorICAgICAgJSB0byB0aGUgd2lkdGggb2YgZWFjaCB0ZW1wbGF0ZSBlbnRyeS4KKyAgICAgICUKKyAgICAgICUgSWYgdGhlIHVzZXIgaGFzIHNldCBwcmVhbWJsZSBpbiB0ZXJtcyBvZiBwZXJjZW50IG9mIFxoc2l6ZSB3ZSB3aWxsCisgICAgICAlIHVzZSB0aGF0IGRpbWVuc2lvbiBhcyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiwgYW5kIHRoZSBcbGVmdHNraXAKKyAgICAgICUgd2lsbCBrZWVwIGVudHJpZXMgZnJvbSBidW1waW5nIGludG8gZWFjaCBvdGhlci4gIFRhYmxlIHdpbGwgc3RhcnQgYXQKKyAgICAgICUgbGVmdCBtYXJnaW4gYW5kIGZpbmFsIGNvbHVtbiB3aWxsIGp1c3RpZnkgYXQgcmlnaHQgbWFyZ2luLgorICAgICAgJQorICAgICAgJSBNYWtlIHN1cmUgd2UgZG9uJ3QgaW5oZXJpdCBccmlnaHRza2lwIGZyb20gdGhlIG91dGVyIGVudmlyb25tZW50LgorICAgICAgXHJpZ2h0c2tpcD0wcHQKKyAgICAgIFxpZm51bVxjb2xjb3VudD0xCisJJSBUaGUgZmlyc3QgY29sdW1uIHdpbGwgYmUgaW5kZW50ZWQgd2l0aCB0aGUgc3Vycm91bmRpbmcgdGV4dC4KKwlcYWR2YW5jZVxoc2l6ZSBieVxsZWZ0c2tpcAorICAgICAgXGVsc2UKKwlcaWZzZXRwZXJjZW50IFxlbHNlCisJICAlIElmIHVzZXIgaGFzIG5vdCBzZXQgcHJlYW1ibGUgaW4gdGVybXMgb2YgcGVyY2VudCBvZiBcaHNpemUKKwkgICUgd2Ugd2lsbCBhZHZhbmNlIFxoc2l6ZSBieSBcbXVsdGl0YWJsZWNvbHNwYWNlLgorCSAgXGFkdmFuY2VcaHNpemUgYnkgXG11bHRpdGFibGVjb2xzcGFjZQorCVxmaQorICAgICAgICUgSW4gZWl0aGVyIGNhc2Ugd2Ugd2lsbCBtYWtlIFxsZWZ0c2tpcD1cbXVsdGl0YWJsZWNvbHNwYWNlOgorICAgICAgXGxlZnRza2lwPVxtdWx0aXRhYmxlY29sc3BhY2UKKyAgICAgIFxmaQorICAgICAgJSBJZ25vcmluZyBzcGFjZSBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgYXZvaWRzIGFuIG9jY2FzaW9uYWwgc3B1cmlvdXMKKyAgICAgICUgYmxhbmsgbGluZSwgd2hlbiBUZVggZGVjaWRlcyB0byBicmVhayB0aGUgbGluZSBhdCB0aGUgc3BhY2UgYmVmb3JlIHRoZQorICAgICAgJSBib3ggZnJvbSB0aGUgbXVsdGlzdHJ1dCwgc28gdGhlIHN0cnV0IGVuZHMgdXAgb24gYSBsaW5lIGJ5IGl0c2VsZi4KKyAgICAgICUgRm9yIGV4YW1wbGU6CisgICAgICAlIEBtdWx0aXRhYmxlIEBjb2x1bW5mcmFjdGlvbnMgLjExIC44OQorICAgICAgJSBAaXRlbSBAY29kZXsjfQorICAgICAgJSBAdGFiIExlZ2FsIGhvbGlkYXkgd2hpY2ggaXMgdmFsaWQgaW4gbWFqb3IgcGFydHMgb2YgdGhlIHdob2xlIGNvdW50cnkuCisgICAgICAlIElzIGF1dG9tYXRpY2FsbHkgcHJvdmlkZWQgd2l0aCBoaWdobGlnaHRpbmcgc2VxdWVuY2VzIHJlc3BlY3RpdmVseQorICAgICAgJSBtYXJraW5nIGNoYXJhY3RlcnMuCisgICAgICBcbm9pbmRlbnRcaWdub3Jlc3BhY2VzIyNcdW5za2lwXG11bHRpc3RydXQKKyAgICB9XGNyCit9CitcZGVmXEVtdWx0aXRhYmxleyUKKyAgXGNyY3IKKyAgXGVncm91cCAlIGVuZCB0aGUgXGhhbGlnbgorICBcZ2xvYmFsXHNldHBlcmNlbnRmYWxzZQorfQorCitcZGVmXHNldG11bHRpdGFibGVzcGFjaW5neyUKKyAgXGRlZlxtdWx0aXN0cnV0e1xzdHJ1dH0lIGp1c3QgdXNlIHRoZSBzdGFuZGFyZCBsaW5lIHNwYWNpbmcKKyAgJQorICAlIENvbXB1dGUgXG11bHRpdGFibGVsaW5lc3BhY2UgKGlmIG5vdCBkZWZpbmVkIGJ5IHVzZXIpIGZvciB1c2UgaW4KKyAgJSBcbXVsdGl0YWJsZXBhcnNraXAgY2FsY3VsYXRpb24uICBXZSB1c2VkIGRlZmluZSBcbXVsdGlzdHJ1dCBiYXNlZCBvbgorICAlIHRoaXMsIGJ1dCAoaXJvbmljYWxseSkgdGhhdCBjYXVzZWQgdGhlIHNwYWNpbmcgdG8gYmUgb2ZmLgorICAlIFNlZSBidWctdGV4aW5mbyByZXBvcnQgZnJvbSBXZXJuZXIgTGVtYmVyZywgMzEgT2N0IDIwMDQgMTI6NTI6MjAgKzAxMDAuCitcaWZkaW1cbXVsdGl0YWJsZWxpbmVzcGFjZT0wcHQKK1xzZXRib3gwPVx2Ym94e1h9XGdsb2JhbFxtdWx0aXRhYmxlbGluZXNwYWNlPVx0aGVcYmFzZWxpbmVza2lwCitcZ2xvYmFsXGFkdmFuY2VcbXVsdGl0YWJsZWxpbmVzcGFjZSBieS1caHQwCitcZmkKKyUlIFRlc3QgdG8gc2VlIGlmIHBhcnNraXAgaXMgbGFyZ2VyIHRoYW4gc3BhY2UgYmV0d2VlbiBsaW5lcyBvZgorJSUgdGFibGUuIElmIG5vdCwgZG8gbm90aGluZy4KKyUlICAgICAgICBJZiBzbywgc2V0IHRvIHNhbWUgZGltZW5zaW9uIGFzIG11bHRpdGFibGVsaW5lc3BhY2UuCitcaWZkaW1cbXVsdGl0YWJsZXBhcnNraXA+XG11bHRpdGFibGVsaW5lc3BhY2UKK1xnbG9iYWxcbXVsdGl0YWJsZXBhcnNraXA9XG11bHRpdGFibGVsaW5lc3BhY2UKK1xnbG9iYWxcYWR2YW5jZVxtdWx0aXRhYmxlcGFyc2tpcC03cHQgJSUgdG8ga2VlcCBwYXJza2lwIHNvbWV3aGF0IHNtYWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSUgdGhhbiBza2lwIGJldHdlZW4gbGluZXMgaW4gdGhlIHRhYmxlLgorXGZpJQorXGlmZGltXG11bHRpdGFibGVwYXJza2lwPTBwdAorXGdsb2JhbFxtdWx0aXRhYmxlcGFyc2tpcD1cbXVsdGl0YWJsZWxpbmVzcGFjZQorXGdsb2JhbFxhZHZhbmNlXG11bHRpdGFibGVwYXJza2lwLTdwdCAlJSB0byBrZWVwIHBhcnNraXAgc29tZXdoYXQgc21hbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlJSB0aGFuIHNraXAgYmV0d2VlbiBsaW5lcyBpbiB0aGUgdGFibGUuCitcZml9CisKKworXG1lc3NhZ2V7Y29uZGl0aW9uYWxzLH0KKworJSBAaWZ0ZXgsIEBpZm5vdGRvY2Jvb2ssIEBpZm5vdGh0bWwsIEBpZm5vdGluZm8sIEBpZm5vdHBsYWludGV4dCwKKyUgQGlmbm90eG1sIGFsd2F5cyBzdWNjZWVkLiAgVGhleSBjdXJyZW50bHkgZG8gbm90aGluZzsgd2UgZG9uJ3QKKyUgYXR0ZW1wdCB0byBjaGVjayB3aGV0aGVyIHRoZSBjb25kaXRpb25hbHMgYXJlIHByb3Blcmx5IG5lc3RlZC4gIEJ1dCB3ZQorJSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgdGhleSBhcmUgY29uZGl0aW9uYWxzLCBzbyB0aGF0IEBlbmQgZG9lc24ndAorJSBhdHRlbXB0IHRvIGNsb3NlIGFuIGVudmlyb25tZW50IGdyb3VwLgorJQorXGRlZlxtYWtlY29uZCMxeyUKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgIzFcZW5kY3NuYW1lID0gXHJlbGF4CisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIGlzY29uZC4jMVxlbmRjc25hbWUgPSAxCit9CitcbWFrZWNvbmR7aWZ0ZXh9CitcbWFrZWNvbmR7aWZub3Rkb2Nib29rfQorXG1ha2Vjb25ke2lmbm90aHRtbH0KK1xtYWtlY29uZHtpZm5vdGluZm99CitcbWFrZWNvbmR7aWZub3RwbGFpbnRleHR9CitcbWFrZWNvbmR7aWZub3R4bWx9CisKKyUgSWdub3JlIEBpZ25vcmUsIEBpZmh0bWwsIEBpZmluZm8sIGFuZCB0aGUgbGlrZS4KKyUKK1xkZWZcZGlyZW50cnl7XGRvaWdub3Jle2RpcmVudHJ5fX0KK1xkZWZcZG9jdW1lbnRkZXNjcmlwdGlvbntcZG9pZ25vcmV7ZG9jdW1lbnRkZXNjcmlwdGlvbn19CitcZGVmXGRvY2Jvb2t7XGRvaWdub3Jle2RvY2Jvb2t9fQorXGRlZlxodG1se1xkb2lnbm9yZXtodG1sfX0KK1xkZWZcaWZkb2Nib29re1xkb2lnbm9yZXtpZmRvY2Jvb2t9fQorXGRlZlxpZmh0bWx7XGRvaWdub3Jle2lmaHRtbH19CitcZGVmXGlmaW5mb3tcZG9pZ25vcmV7aWZpbmZvfX0KK1xkZWZcaWZub3R0ZXh7XGRvaWdub3Jle2lmbm90dGV4fX0KK1xkZWZcaWZwbGFpbnRleHR7XGRvaWdub3Jle2lmcGxhaW50ZXh0fX0KK1xkZWZcaWZ4bWx7XGRvaWdub3Jle2lmeG1sfX0KK1xkZWZcaWdub3Jle1xkb2lnbm9yZXtpZ25vcmV9fQorXGRlZlxtZW51e1xkb2lnbm9yZXttZW51fX0KK1xkZWZceG1se1xkb2lnbm9yZXt4bWx9fQorCislIElnbm9yZSB0ZXh0IHVudGlsIGEgbGluZSBgQGVuZCAjMScsIGtlZXBpbmcgdHJhY2sgb2YgbmVzdGVkIGNvbmRpdGlvbmFscy4KKyUKKyUgQSBjb3VudCB0byByZW1lbWJlciB0aGUgZGVwdGggb2YgbmVzdGluZy4KK1xuZXdjb3VudFxkb2lnbm9yZWNvdW50CisKK1xkZWZcZG9pZ25vcmUjMXtcYmVnaW5ncm91cAorICAlIFNjYW4gaW4gYGB2ZXJiYXRpbScnIG1vZGU6CisgIFxvYmV5bGluZXMKKyAgXGNhdGNvZGVgXEAgPSBcb3RoZXIKKyAgXGNhdGNvZGVgXHsgPSBcb3RoZXIKKyAgXGNhdGNvZGVgXH0gPSBcb3RoZXIKKyAgJQorICAlIE1ha2Ugc3VyZSB0aGF0IHNwYWNlcyB0dXJuIGludG8gdG9rZW5zIHRoYXQgbWF0Y2ggd2hhdCBcZG9pZ25vcmV0ZXh0IHdhbnRzLgorICBcc3BhY2Vpc3NwYWNlCisgICUKKyAgJSBDb3VudCBudW1iZXIgb2YgIzEncyB0aGF0IHdlJ3ZlIHNlZW4uCisgIFxkb2lnbm9yZWNvdW50ID0gMAorICAlCisgICUgU3dhbGxvdyB0ZXh0IHVudGlsIHdlIHJlYWNoIHRoZSBtYXRjaGluZyBgQGVuZCAjMScuCisgIFxkb2RvaWdub3JleyMxfSUKK30KKworeyBcY2F0Y29kZWBfPTExICUgV2Ugd2FudCB0byB1c2UgXF9TVE9QXyB3aGljaCBjYW5ub3QgYXBwZWFyIGluIHRleGluZm8gc291cmNlLgorICBcb2JleWxpbmVzICUKKyAgJQorICBcZ2RlZlxkb2RvaWdub3JlIzF7JQorICAgICUgIzEgY29udGFpbnMgdGhlIGNvbW1hbmQgbmFtZSBhcyBhIHN0cmluZywgZS5nLiwgYGlmaW5mbycuCisgICAgJQorICAgICUgRGVmaW5lIGEgY29tbWFuZCB0byBmaW5kIHRoZSBuZXh0IGBAZW5kICMxJy4KKyAgICBcbG9uZ1xkZWZcZG9pZ25vcmV0ZXh0IyMxXl5NQGVuZCAjMXslCisgICAgICBcZG9pZ25vcmV0ZXh0eXl5IyMxXl5NQCMxXF9TVE9QX30lCisgICAgJQorICAgICUgQW5kIHRoaXMgY29tbWFuZCB0byBmaW5kIGFub3RoZXIgIzEgY29tbWFuZCwgYXQgdGhlIGJlZ2lubmluZyBvZiBhCisgICAgJSBsaW5lLiAgKE90aGVyd2lzZSwgd2Ugd291bGQgY29uc2lkZXIgYSBsaW5lIGBAYyBAaWZzZXQnLCBmb3IKKyAgICAlIGV4YW1wbGUsIHRvIGNvdW50IGFzIGFuIEBpZnNldCBmb3IgbmVzdGluZy4pCisgICAgXGxvbmdcZGVmXGRvaWdub3JldGV4dHl5eSMjMV5eTUAjMSMjMlxfU1RPUF97XGRvaWdub3JleXl5eyMjMn1cX1NUT1BffSUKKyAgICAlCisgICAgJSBBbmQgbm93IGV4cGFuZCB0aGF0IGNvbW1hbmQuCisgICAgXGRvaWdub3JldGV4dCBeXk0lCisgIH0lCit9CisKK1xkZWZcZG9pZ25vcmV5eXkjMXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxlbXB0eQkJCSUgTm90aGluZyBmb3VuZC4KKyAgICBcbGV0XG5leHRcZG9pZ25vcmV0ZXh0enp6CisgIFxlbHNlCQkJCQklIEZvdW5kIGEgbmVzdGVkIGNvbmRpdGlvbiwgLi4uCisgICAgXGFkdmFuY2VcZG9pZ25vcmVjb3VudCBieSAxCisgICAgXGxldFxuZXh0XGRvaWdub3JldGV4dHl5eQkJJSAuLi4sIGxvb2sgZm9yIGFub3RoZXIuCisgICAgJSBJZiB3ZSdyZSBoZXJlLCAjMSBlbmRzIHdpdGggXl5NXGlmaW5mbyAoZm9yIGV4YW1wbGUpLgorICBcZmkKKyAgXG5leHQgIzElIHRoZSB0b2tlbiBcX1NUT1BfIGlzIHByZXNlbnQganVzdCBhZnRlciB0aGlzIG1hY3JvLgorfQorCislIFdlIGhhdmUgdG8gc3dhbGxvdyB0aGUgcmVtYWluaW5nICJcX1NUT1BfIi4KKyUKK1xkZWZcZG9pZ25vcmV0ZXh0enp6IzF7JQorICBcaWZudW1cZG9pZ25vcmVjb3VudCA9IDAJJSBXZSBoYXZlIGp1c3QgZm91bmQgdGhlIG91dGVybW9zdCBAZW5kLgorICAgIFxsZXRcbmV4dFxlbmRkb2lnbm9yZQorICBcZWxzZQkJCQklIFN0aWxsIGluc2lkZSBhIG5lc3RlZCBjb25kaXRpb24uCisgICAgXGFkdmFuY2VcZG9pZ25vcmVjb3VudCBieSAtMQorICAgIFxsZXRcbmV4dFxkb2lnbm9yZXRleHQgICAgICAlIExvb2sgZm9yIHRoZSBuZXh0IEBlbmQuCisgIFxmaQorICBcbmV4dAorfQorCislIEZpbmlzaCBvZmYgaWdub3JlZCB0ZXh0LgoreyBcb2JleWxpbmVzJQorICAlIElnbm9yZSBhbnl0aGluZyBhZnRlciB0aGUgbGFzdCBgQGVuZCAjMSc7IHRoaXMgbWF0dGVycyBpbiB2ZXJiYXRpbQorICAlIGVudmlyb25tZW50cywgd2hlcmUgb3RoZXJ3aXNlIHRoZSBuZXdsaW5lIGFmdGVyIGFuIGlnbm9yZWQgY29uZGl0aW9uYWwKKyAgJSB3b3VsZCByZXN1bHQgaW4gYSBibGFuayBsaW5lIGluIHRoZSBvdXRwdXQuCisgIFxnZGVmXGVuZGRvaWdub3JlIzFeXk17XGVuZGdyb3VwXGlnbm9yZXNwYWNlc30lCit9CisKKworJSBAc2V0IFZBUiBzZXRzIHRoZSB2YXJpYWJsZSBWQVIgdG8gYW4gZW1wdHkgdmFsdWUuCislIEBzZXQgVkFSIFJFU1QtT0YtTElORSBzZXRzIFZBUiB0byB0aGUgdmFsdWUgUkVTVC1PRi1MSU5FLgorJQorJSBTaW5jZSB3ZSB3YW50IHRvIHNlcGFyYXRlIFZBUiBmcm9tIFJFU1QtT0YtTElORSAod2hpY2ggbWlnaHQgYmUKKyUgZW1wdHkpLCB3ZSBjYW4ndCBqdXN0IHVzZSBccGFyc2Vhcmc7IHdlIGhhdmUgdG8gaW5zZXJ0IGEgc3BhY2Ugb2Ygb3VyCislIG93biB0byBkZWxpbWl0IHRoZSByZXN0IG9mIHRoZSBsaW5lLCBhbmQgdGhlbiB0YWtlIGl0IG91dCBhZ2FpbiBpZiB3ZQorJSBkaWRuJ3QgbmVlZCBpdC4KKyUgV2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IFxwYXJzZWFyZyBzZXRzIFxjYXRjb2RlYFwgPTEwLgorJQorXHBhcnNlYXJnZGVmXHNldHtcc2V0eXl5IzEgXGVuZHNldHl5eX0KK1xkZWZcc2V0eXl5IzEgIzJcZW5kc2V0eXl5eyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxkZWZcdGVtcHsjMn0lCisgICAgXGVkZWZcbmV4dHtcZ2RlZlxtYWtlY3NuYW1le1NFVCMxfX0lCisgICAgXGlmeFx0ZW1wXGVtcHR5CisgICAgICBcbmV4dHt9JQorICAgIFxlbHNlCisgICAgICBcc2V0enp6IzJcZW5kc2V0enp6CisgICAgXGZpCisgIH0lCit9CislIFJlbW92ZSB0aGUgdHJhaWxpbmcgc3BhY2UgXHNldHh4eCBpbnNlcnRlZC4KK1xkZWZcc2V0enp6IzEgXGVuZHNldHp6entcbmV4dHsjMX19CisKKyUgQGNsZWFyIFZBUiBjbGVhcnMgKGkuZS4sIHVuc2V0cykgdGhlIHZhcmlhYmxlIFZBUi4KKyUKK1xwYXJzZWFyZ2RlZlxjbGVhcnslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgU0VUIzFcZW5kY3NuYW1lPVxyZWxheAorICB9JQorfQorCislIEB2YWx1ZXtmb299IGdldHMgdGhlIHRleHQgc2F2ZWQgaW4gdmFyaWFibGUgZm9vLgorXGRlZlx2YWx1ZXtcYmVnaW5ncm91cFxtYWtldmFsdWVleHBhbmRhYmxlXHZhbHVleHh4fQorXGRlZlx2YWx1ZXh4eCMxe1xleHBhbmRhYmxldmFsdWV7IzF9XGVuZGdyb3VwfQoreworICBcY2F0Y29kZWBcLSA9IFxhY3RpdmUgXGNhdGNvZGVgXF8gPSBcYWN0aXZlCisgICUKKyAgXGdkZWZcbWFrZXZhbHVlZXhwYW5kYWJsZXslCisgICAgXGxldFx2YWx1ZSA9IFxleHBhbmRhYmxldmFsdWUKKyAgICAlIFdlIGRvbid0IHdhbnQgdGhlc2UgY2hhcmFjdGVycyBhY3RpdmUsIC4uLgorICAgIFxjYXRjb2RlYFwtPVxvdGhlciBcY2F0Y29kZWBcXz1cb3RoZXIKKyAgICAlIC4uLiwgYnV0IHdlIG1pZ2h0IGVuZCB1cCB3aXRoIGFjdGl2ZSBvbmVzIGluIHRoZSBhcmd1bWVudCBpZgorICAgICUgd2UncmUgY2FsbGVkIGZyb20gQGNvZGUsIGFzIEBjb2Rle0B2YWx1ZXtmb28tYmFyX319LCB0aG91Z2guCisgICAgJSBTbyBcbGV0IHRoZW0gdG8gdGhlaXIgbm9ybWFsIGVxdWl2YWxlbnRzLgorICAgIFxsZXQtXHJlYWxkYXNoIFxsZXRfXG5vcm1hbHVuZGVyc2NvcmUKKyAgfQorfQorCislIFdlIGhhdmUgdGhpcyBzdWJyb3V0aW5lIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBhdCBsZWFzdCBzb21lIEB2YWx1ZSdzCislIHByb3Blcmx5IGluIGluZGV4ZXMgKHdlIGNhbGwgXG1ha2V2YWx1ZWV4cGFuZGFibGUgaW4gXGluZGV4ZHVtbWllcykuCislIFRoZSBjb21tYW5kIGhhcyB0byBiZSBmdWxseSBleHBhbmRhYmxlIChpZiB0aGUgdmFyaWFibGUgaXMgc2V0KSwgc2luY2UKKyUgdGhlIHJlc3VsdCB3aW5kcyB1cCBpbiB0aGUgaW5kZXggZmlsZS4gIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUKKyUgdmFyaWFibGUncyB2YWx1ZSBjb250YWlucyBvdGhlciBUZXhpbmZvIGNvbW1hbmRzLCBpdCdzIGFsbW9zdCBjZXJ0YWluCislIGl0IHdpbGwgZmFpbCAoYWx0aG91Z2ggcGVyaGFwcyB3ZSBjb3VsZCBmaXggdGhhdCB3aXRoIHN1ZmZpY2llbnQgd29yaworJSB0byBkbyBhIG9uZS1sZXZlbCBleHBhbnNpb24gb24gdGhlIHJlc3VsdCwgaW5zdGVhZCBvZiBjb21wbGV0ZSkuCislCitcZGVmXGV4cGFuZGFibGV2YWx1ZSMxeyUKKyAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgU0VUIzFcZW5kY3NuYW1lXHJlbGF4CisgICAge1tObyB2YWx1ZSBmb3IgYGAjMScnXX0lCisgICAgXG1lc3NhZ2V7VmFyaWFibGUgYCMxJywgdXNlZCBpbiBAdmFsdWUsIGlzIG5vdCBzZXQufSUKKyAgXGVsc2UKKyAgICBcY3NuYW1lIFNFVCMxXGVuZGNzbmFtZQorICBcZmkKK30KKworJSBAaWZzZXQgVkFSIC4uLiBAZW5kIGlmc2V0IHJlYWRzIHRoZSBgLi4uJyBpZmYgVkFSIGhhcyBiZWVuIGRlZmluZWQKKyUgd2l0aCBAc2V0LgorJQorJSBUbyBnZXQgc3BlY2lhbCB0cmVhdG1lbnQgb2YgYEBlbmQgaWZzZXQsJyBjYWxsIFxtYWtlb25kIGFuZCB0aGUgcmVkZWZpbmUuCislCitcbWFrZWNvbmR7aWZzZXR9CitcZGVmXGlmc2V0e1xwYXJzZWFyZ3tcZG9pZnNldHtcbGV0XG5leHQ9XGlmc2V0ZmFpbH19fQorXGRlZlxkb2lmc2V0IzEjMnslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcbGV0XG5leHQ9XGVtcHR5CisgICAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgU0VUIzJcZW5kY3NuYW1lXHJlbGF4CisgICAgICAjMSUgSWYgbm90IHNldCwgcmVkZWZpbmUgXG5leHQuCisgICAgXGZpCisgICAgXGV4cGFuZGFmdGVyCisgIH1cbmV4dAorfQorXGRlZlxpZnNldGZhaWx7XGRvaWdub3Jle2lmc2V0fX0KKworJSBAaWZjbGVhciBWQVIgLi4uIEBlbmQgaWZjbGVhciByZWFkcyB0aGUgYC4uLicgaWZmIFZBUiBoYXMgbmV2ZXIgYmVlbgorJSBkZWZpbmVkIHdpdGggQHNldCwgb3IgaGFzIGJlZW4gdW5kZWZpbmVkIHdpdGggQGNsZWFyLgorJQorJSBUaGUgYFxlbHNlJyBpbnNpZGUgdGhlIGBcZG9pZnNldCcgcGFyYW1ldGVyIGlzIGEgdHJpY2sgdG8gcmV1c2UgdGhlCislIGFib3ZlIGNvZGU6IGlmIHRoZSB2YXJpYWJsZSBpcyBub3Qgc2V0LCBkbyBub3RoaW5nLCBpZiBpdCBpcyBzZXQsCislIHRoZW4gcmVkZWZpbmUgXG5leHQgdG8gXGlmY2xlYXJmYWlsLgorJQorXG1ha2Vjb25ke2lmY2xlYXJ9CitcZGVmXGlmY2xlYXJ7XHBhcnNlYXJne1xkb2lmc2V0e1xlbHNlIFxsZXRcbmV4dD1caWZjbGVhcmZhaWx9fX0KK1xkZWZcaWZjbGVhcmZhaWx7XGRvaWdub3Jle2lmY2xlYXJ9fQorCislIEBkaXJjYXRlZ29yeSBDQVRFR09SWSAgLS0gc3BlY2lmeSBhIGNhdGVnb3J5IG9mIHRoZSBkaXIgZmlsZQorJSB3aGljaCB0aGlzIGZpbGUgc2hvdWxkIGJlbG9uZyB0by4gIElnbm9yZSB0aGlzIGluIFRlWC4KK1xsZXRcZGlyY2F0ZWdvcnk9XGNvbW1lbnQKKworJSBAZGVmaW5pbmZvZW5jbG9zZS4KK1xsZXRcZGVmaW5mb2VuY2xvc2U9XGNvbW1lbnQKKworCitcbWVzc2FnZXtpbmRleGluZyx9CislIEluZGV4IGdlbmVyYXRpb24gZmFjaWxpdGllcworCislIERlZmluZSBcbmV3d3JpdGUgdG8gYmUgaWRlbnRpY2FsIHRvIHBsYWluIHRleCdzIFxuZXd3cml0ZQorJSBleGNlcHQgbm90IFxvdXRlciwgc28gaXQgY2FuIGJlIHVzZWQgd2l0aGluIG1hY3JvcyBhbmQgXGlmJ3MuCitcZWRlZlxuZXd3cml0ZXtcbWFrZWNzbmFtZXtwdGV4bmV3d3JpdGV9fQorCislIFxuZXdpbmRleCB7Zm9vfSBkZWZpbmVzIGFuIGluZGV4IG5hbWVkIGZvby4KKyUgSXQgYXV0b21hdGljYWxseSBkZWZpbmVzIFxmb29pbmRleCBzdWNoIHRoYXQKKyUgXGZvb2luZGV4IC4uLnJlc3Qgb2YgbGluZS4uLiBwdXRzIGFuIGVudHJ5IGluIHRoZSBpbmRleCBmb28uCislIEl0IGFsc28gZGVmaW5lcyBcZm9vaW5kZmlsZSB0byBiZSB0aGUgbnVtYmVyIG9mIHRoZSBvdXRwdXQgY2hhbm5lbCBmb3IKKyUgdGhlIGZpbGUgdGhhdCBhY2N1bXVsYXRlcyB0aGlzIGluZGV4LiAgVGhlIGZpbGUncyBleHRlbnNpb24gaXMgZm9vLgorJSBUaGUgbmFtZSBvZiBhbiBpbmRleCBzaG91bGQgYmUgbm8gbW9yZSB0aGFuIDIgY2hhcmFjdGVycyBsb25nCislIGZvciB0aGUgc2FrZSBvZiB2bXMuCislCitcZGVmXG5ld2luZGV4IzF7JQorICBcaWZsaW5rcworICAgIFxleHBhbmRhZnRlclxuZXd3cml0ZSBcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZQorICAgIFxvcGVub3V0IFxjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lIFxqb2JuYW1lLiMxICUgT3BlbiB0aGUgZmlsZQorICBcZmkKKyAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIzFpbmRleFxlbmRjc25hbWV7JSAgICAgJSBEZWZpbmUgQCMxaW5kZXgKKyAgICBcbm9leHBhbmRcZG9pbmRleHsjMX19Cit9CisKKyUgQGRlZmluZGV4IGZvbyAgPT0gIFxuZXdpbmRleHtmb299CislCitcZGVmXGRlZmluZGV4e1xwYXJzZWFyZ1xuZXdpbmRleH0KKworJSBEZWZpbmUgQGRlZmNvZGVpbmRleCwgbGlrZSBAZGVmaW5kZXggZXhjZXB0IHB1dCBhbGwgZW50cmllcyBpbiBAY29kZS4KKyUKK1xkZWZcZGVmY29kZWluZGV4e1xwYXJzZWFyZ1xuZXdjb2RlaW5kZXh9CislCitcZGVmXG5ld2NvZGVpbmRleCMxeyUKKyAgXGlmbGlua3MKKyAgICBcZXhwYW5kYWZ0ZXJcbmV3d3JpdGUgXGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWUKKyAgICBcb3Blbm91dCBcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZSBcam9ibmFtZS4jMQorICBcZmkKKyAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIzFpbmRleFxlbmRjc25hbWV7JQorICAgIFxub2V4cGFuZFxkb2NvZGVpbmRleHsjMX19JQorfQorCisKKyUgQHN5bmluZGV4IGZvbyBiYXIgICAgbWFrZXMgaW5kZXggZm9vIGZlZWQgaW50byBpbmRleCBiYXIuCislIERvIHRoaXMgaW5zdGVhZCBvZiBAZGVmaW5kZXggZm9vIGlmIHlvdSBkb24ndCB3YW50IGl0IGFzIGEgc2VwYXJhdGUgaW5kZXguCislCislIEBzeW5jb2RlaW5kZXggZm9vIGJhciAgIHNpbWlsYXIsIGJ1dCBwdXQgYWxsIGVudHJpZXMgbWFkZSBmb3IgaW5kZXggZm9vCislIGluc2lkZSBAY29kZS4KKyUKK1xkZWZcc3luaW5kZXgjMSAjMiB7XGRvc3luaW5kZXhcZG9pbmRleHsjMX17IzJ9fQorXGRlZlxzeW5jb2RlaW5kZXgjMSAjMiB7XGRvc3luaW5kZXhcZG9jb2RlaW5kZXh7IzF9eyMyfX0KKworJSAjMSBpcyBcZG9pbmRleCBvciBcZG9jb2RlaW5kZXgsICMyIHRoZSBpbmRleCBnZXR0aW5nIHJlZGVmaW5lZCAoZm9vKSwKKyUgIzMgdGhlIHRhcmdldCBpbmRleCAoYmFyKS4KK1xkZWZcZG9zeW5pbmRleCMxIzIjM3slCisgICUgT25seSBkbyBcY2xvc2VvdXQgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgaXQsIGVsc2Ugd2UnbGwgZW5kIHVwCisgICUgY2xvc2luZyB0aGUgdGFyZ2V0IGluZGV4LgorICBcZXhwYW5kYWZ0ZXIgXGlmeFxjc25hbWUgZG9uZXN5bmluZGV4IzJcZW5kY3NuYW1lIFx1bmRlZmluZWQKKyAgICAlIFRoZSBcY2xvc2VvdXQgaGVscHMgcmVkdWNlIHVubmVjZXNzYXJ5IG9wZW4gZmlsZXM7IHRoZSBsaW1pdCBvbiB0aGUKKyAgICAlIEFjb3JuIFJJU0MgT1MgaXMgYSBtZXJlIDE2IGZpbGVzLgorICAgIFxleHBhbmRhZnRlclxjbG9zZW91dFxjc25hbWUjMmluZGZpbGVcZW5kY3NuYW1lCisgICAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWVcZG9uZXN5bmluZGV4IzJcZW5kY3NuYW1lID0gMQorICBcZmkKKyAgJSByZWRlZmluZSBcZm9vaW5kZmlsZToKKyAgXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlclx0ZW1wXGV4cGFuZGFmdGVyPVxjc25hbWUjM2luZGZpbGVcZW5kY3NuYW1lCisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIzJpbmRmaWxlXGVuZGNzbmFtZT1cdGVtcAorICAlIHJlZGVmaW5lIFxmb29pbmRleDoKKyAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIzJpbmRleFxlbmRjc25hbWV7XG5vZXhwYW5kIzF7IzN9fSUKK30KKworJSBEZWZpbmUgXGRvaW5kZXgsIHRoZSBkcml2ZXIgZm9yIGFsbCBcZm9vaW5kZXggbWFjcm9zLgorJSBBcmd1bWVudCAjMSBpcyBnZW5lcmF0ZWQgYnkgdGhlIGNhbGxpbmcgXGZvb2luZGV4IG1hY3JvLAorJSAgYW5kIGl0IGlzICJmb28iLCB0aGUgbmFtZSBvZiB0aGUgaW5kZXguCisKKyUgXGRvaW5kZXgganVzdCB1c2VzIFxwYXJzZWFyZzsgaXQgY2FsbHMgXGRvaW5kIGZvciB0aGUgYWN0dWFsIHdvcmsuCislIFRoaXMgaXMgYmVjYXVzZSBcZG9pbmQgaXMgbW9yZSB1c2VmdWwgdG8gY2FsbCBmcm9tIG90aGVyIG1hY3Jvcy4KKworJSBUaGVyZSBpcyBhbHNvIFxkb3N1YmluZCB7aW5kZXh9e3RvcGljfXtzdWJ0b3BpY30KKyUgd2hpY2ggbWFrZXMgYW4gZW50cnkgaW4gYSB0d28tbGV2ZWwgaW5kZXggc3VjaCBhcyB0aGUgb3BlcmF0aW9uIGluZGV4LgorCitcZGVmXGRvaW5kZXgjMXtcZWRlZlxpbmRleG5hbWV7IzF9XHBhcnNlYXJnXHNpbmdsZWluZGV4ZXJ9CitcZGVmXHNpbmdsZWluZGV4ZXIgIzF7XGRvaW5ke1xpbmRleG5hbWV9eyMxfX0KKworJSBsaWtlIHRoZSBwcmV2aW91cyB0d28sIGJ1dCB0aGV5IHB1dCBAY29kZSBhcm91bmQgdGhlIGFyZ3VtZW50LgorXGRlZlxkb2NvZGVpbmRleCMxe1xlZGVmXGluZGV4bmFtZXsjMX1ccGFyc2Vhcmdcc2luZ2xlY29kZWluZGV4ZXJ9CitcZGVmXHNpbmdsZWNvZGVpbmRleGVyICMxe1xkb2luZHtcaW5kZXhuYW1lfXtcY29kZXsjMX19fQorCislIFRha2UgY2FyZSBvZiBUZXhpbmZvIGNvbW1hbmRzIHRoYXQgY2FuIGFwcGVhciBpbiBhbiBpbmRleCBlbnRyeS4KKyUgU2luY2UgdGhlcmUgYXJlIHNvbWUgY29tbWFuZHMgd2Ugd2FudCB0byBleHBhbmQsIGFuZCBvdGhlcnMgd2UgZG9uJ3QsCislIHdlIGhhdmUgdG8gbGFib3Jpb3VzbHkgcHJldmVudCBleHBhbnNpb24gZm9yIHRob3NlIHRoYXQgd2UgZG9uJ3QuCislCitcZGVmXGluZGV4ZHVtbWllc3slCisgIFxlc2NhcGVjaGFyID0gYFxcICAgICAlIHVzZSBiYWNrc2xhc2ggaW4gb3V0cHV0IGZpbGVzLgorICBcZGVmXEB7QH0lIGNoYW5nZSB0byBAQCB3aGVuIHdlIHN3aXRjaCB0byBAIGFzIGVzY2FwZSBjaGFyIGluIGluZGV4IGZpbGVzLgorICBcZGVmXCB7XHJlYWxiYWNrc2xhc2hcc3BhY2UgfSUKKyAgJSBOZWVkIHRoZXNlIGluIGNhc2UgXHRleCBpcyBpbiBlZmZlY3QgYW5kIFx7IGlzIGEgXGRlbGltaXRlciBhZ2Fpbi4KKyAgJSBCdXQgY2FuJ3QgdXNlIFxsYnJhY2VjbWQgYW5kIFxyYnJhY2VjbWQgYmVjYXVzZSB0ZXhpbmRleCBhc3N1bWVzCisgICUgYnJhY2VzIGFuZCBiYWNrc2xhc2hlcyBhcmUgdXNlZCBvbmx5IGFzIGRlbGltaXRlcnMuCisgIFxsZXRceyA9IFxteWxicmFjZQorICBcbGV0XH0gPSBcbXlyYnJhY2UKKyAgJQorICAlIERvIHRoZSByZWRlZmluaXRpb25zLgorICBcY29tbW9uZHVtbWllcworfQorCislIEZvciB0aGUgYXV4IGFuZCB0b2MgZmlsZXMsIEAgaXMgdGhlIGVzY2FwZSBjaGFyYWN0ZXIuICBTbyB3ZSB3YW50IHRvCislIHJlZGVmaW5lIGV2ZXJ5dGhpbmcgdXNpbmcgQCBhcyB0aGUgZXNjYXBlIGNoYXJhY3RlciAoaW5zdGVhZCBvZgorJSBccmVhbGJhY2tzbGFzaCwgc3RpbGwgdXNlZCBmb3IgaW5kZXggZmlsZXMpLiAgV2hlbiBldmVyeXRoaW5nIHVzZXMgQCwKKyUgdGhpcyB3aWxsIGJlIHNpbXBsZXIuCislCitcZGVmXGF0ZHVtbWllc3slCisgIFxkZWZcQHtAQH0lCisgIFxkZWZcIHtAIH0lCisgIFxsZXRceyA9IFxsYnJhY2VhdGNtZAorICBcbGV0XH0gPSBccmJyYWNlYXRjbWQKKyAgJQorICAlIERvIHRoZSByZWRlZmluaXRpb25zLgorICBcY29tbW9uZHVtbWllcworICBcb3RoZXJiYWNrc2xhc2gKK30KKworJSBDYWxsZWQgZnJvbSBcaW5kZXhkdW1taWVzIGFuZCBcYXRkdW1taWVzLgorJQorXGRlZlxjb21tb25kdW1taWVzeyUKKyAgJQorICAlIFxkZWZpbmVkdW1teXdvcmQgZGVmaW5lcyBcIzEgYXMgXHN0cmluZ1wjMVxzcGFjZSwgdGh1cyBlZmZlY3RpdmVseQorICAlIHByZXZlbnRpbmcgaXRzIGV4cGFuc2lvbi4gIFRoaXMgaXMgdXNlZCBvbmx5IGZvciBjb250cm9sJSB3b3JkcywKKyAgJSBub3QgY29udHJvbCBsZXR0ZXJzLCBiZWNhdXNlIHRoZSBcc3BhY2Ugd291bGQgYmUgaW5jb3JyZWN0IGZvcgorICAlIGNvbnRyb2wgY2hhcmFjdGVycywgYnV0IGlzIG5lZWRlZCB0byBzZXBhcmF0ZSB0aGUgY29udHJvbCB3b3JkCisgICUgZnJvbSB3aGF0ZXZlciBmb2xsb3dzLgorICAlCisgICUgRm9yIGNvbnRyb2wgbGV0dGVycywgd2UgaGF2ZSBcZGVmaW5lZHVtbXlsZXR0ZXIsIHdoaWNoIG9taXRzIHRoZQorICAlIHNwYWNlLgorICAlCisgICUgVGhlc2UgY2FuIGJlIHVzZWQgYm90aCBmb3IgY29udHJvbCB3b3JkcyB0aGF0IHRha2UgYW4gYXJndW1lbnQgYW5kCisgICUgdGhvc2UgdGhhdCBkbyBub3QuICBJZiBpdCBpcyBmb2xsb3dlZCBieSB7YXJnfSBpbiB0aGUgaW5wdXQsIHRoZW4KKyAgJSB0aGF0IHdpbGwgZHV0aWZ1bGx5IGdldCB3cml0dGVuIHRvIHRoZSBpbmRleCAob3Igd2hlcmV2ZXIpLgorICAlCisgIFxkZWZcZGVmaW5lZHVtbXl3b3JkICAjIzF7XGRlZiMjMXtcc3RyaW5nIyMxXHNwYWNlfX0lCisgIFxkZWZcZGVmaW5lZHVtbXlsZXR0ZXIjIzF7XGRlZiMjMXtcc3RyaW5nIyMxfX0lCisgIFxsZXRcZGVmaW5lZHVtbXlhY2NlbnRcZGVmaW5lZHVtbXlsZXR0ZXIKKyAgJQorICBcY29tbW9uZHVtbWllc25vZm9udHMKKyAgJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcXyUKKyAgJQorICAlIE5vbi1FbmdsaXNoIGxldHRlcnMuCisgIFxkZWZpbmVkdW1teXdvcmRcQUEKKyAgXGRlZmluZWR1bW15d29yZFxBRQorICBcZGVmaW5lZHVtbXl3b3JkXEwKKyAgXGRlZmluZWR1bW15d29yZFxPRQorICBcZGVmaW5lZHVtbXl3b3JkXE8KKyAgXGRlZmluZWR1bW15d29yZFxhYQorICBcZGVmaW5lZHVtbXl3b3JkXGFlCisgIFxkZWZpbmVkdW1teXdvcmRcbAorICBcZGVmaW5lZHVtbXl3b3JkXG9lCisgIFxkZWZpbmVkdW1teXdvcmRcbworICBcZGVmaW5lZHVtbXl3b3JkXHNzCisgIFxkZWZpbmVkdW1teXdvcmRcZXhjbGFtZG93bgorICBcZGVmaW5lZHVtbXl3b3JkXHF1ZXN0aW9uZG93bgorICBcZGVmaW5lZHVtbXl3b3JkXG9yZGYKKyAgXGRlZmluZWR1bW15d29yZFxvcmRtCisgICUKKyAgJSBBbHRob3VnaCB0aGVzZSBpbnRlcm5hbCBjb21tYW5kcyBzaG91bGRuJ3Qgc2hvdyB1cCwgc29tZXRpbWVzIHRoZXkgZG8uCisgIFxkZWZpbmVkdW1teXdvcmRcYmYKKyAgXGRlZmluZWR1bW15d29yZFxndHIKKyAgXGRlZmluZWR1bW15d29yZFxoYXQKKyAgXGRlZmluZWR1bW15d29yZFxsZXNzCisgIFxkZWZpbmVkdW1teXdvcmRcc2YKKyAgXGRlZmluZWR1bW15d29yZFxzbAorICBcZGVmaW5lZHVtbXl3b3JkXHRjbG9zZQorICBcZGVmaW5lZHVtbXl3b3JkXHR0CisgICUKKyAgXGRlZmluZWR1bW15d29yZFxMYVRlWAorICBcZGVmaW5lZHVtbXl3b3JkXFRlWAorICAlCisgICUgQXNzb3J0ZWQgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICBcZGVmaW5lZHVtbXl3b3JkXGJ1bGxldAorICBcZGVmaW5lZHVtbXl3b3JkXGNvbW1hCisgIFxkZWZpbmVkdW1teXdvcmRcY29weXJpZ2h0CisgIFxkZWZpbmVkdW1teXdvcmRccmVnaXN0ZXJlZHN5bWJvbAorICBcZGVmaW5lZHVtbXl3b3JkXGRvdHMKKyAgXGRlZmluZWR1bW15d29yZFxlbmRkb3RzCisgIFxkZWZpbmVkdW1teXdvcmRcZXF1aXYKKyAgXGRlZmluZWR1bW15d29yZFxlcnJvcgorICBcZGVmaW5lZHVtbXl3b3JkXGV1cm8KKyAgXGRlZmluZWR1bW15d29yZFxleHBhbnNpb24KKyAgXGRlZmluZWR1bW15d29yZFxtaW51cworICBcZGVmaW5lZHVtbXl3b3JkXHBvdW5kcworICBcZGVmaW5lZHVtbXl3b3JkXHBvaW50CisgIFxkZWZpbmVkdW1teXdvcmRccHJpbnQKKyAgXGRlZmluZWR1bW15d29yZFxyZXN1bHQKKyAgJQorICAlIFdlIHdhbnQgdG8gZGlzYWJsZSBhbGwgbWFjcm9zIHNvIHRoYXQgdGhleSBhcmUgbm90IGV4cGFuZGVkIGJ5IFx3cml0ZS4KKyAgXG1hY3JvbGlzdAorICAlCisgIFxub3JtYWx0dXJub2ZmYWN0aXZlCisgICUKKyAgJSBIYW5kbGUgc29tZSBjYXNlcyBvZiBAdmFsdWUgLS0gd2hlcmUgaXQgZG9lcyBub3QgY29udGFpbiBhbnkKKyAgJSAobm9uLWZ1bGx5LWV4cGFuZGFibGUpIGNvbW1hbmRzLgorICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorfQorCislIFxjb21tb25kdW1taWVzbm9mb250czogY29tbW9uIHRvIFxjb21tb25kdW1taWVzIGFuZCBcaW5kZXhub2ZvbnRzLgorJQorXGRlZlxjb21tb25kdW1taWVzbm9mb250c3slCisgICUgQ29udHJvbCBsZXR0ZXJzIGFuZCBhY2NlbnRzLgorICBcZGVmaW5lZHVtbXlsZXR0ZXJcISUKKyAgXGRlZmluZWR1bW15YWNjZW50XCIlCisgIFxkZWZpbmVkdW1teWFjY2VudFwnJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcKiUKKyAgXGRlZmluZWR1bW15YWNjZW50XCwlCisgIFxkZWZpbmVkdW1teWxldHRlclwuJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcLyUKKyAgXGRlZmluZWR1bW15bGV0dGVyXDolCisgIFxkZWZpbmVkdW1teWFjY2VudFw9JQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcPyUKKyAgXGRlZmluZWR1bW15YWNjZW50XF4lCisgIFxkZWZpbmVkdW1teWFjY2VudFxgJQorICBcZGVmaW5lZHVtbXlhY2NlbnRcfiUKKyAgXGRlZmluZWR1bW15d29yZFx1CisgIFxkZWZpbmVkdW1teXdvcmRcdgorICBcZGVmaW5lZHVtbXl3b3JkXEgKKyAgXGRlZmluZWR1bW15d29yZFxkb3RhY2NlbnQKKyAgXGRlZmluZWR1bW15d29yZFxyaW5nYWNjZW50CisgIFxkZWZpbmVkdW1teXdvcmRcdGllYWNjZW50CisgIFxkZWZpbmVkdW1teXdvcmRcdWJhcmFjY2VudAorICBcZGVmaW5lZHVtbXl3b3JkXHVkb3RhY2NlbnQKKyAgXGRlZmluZWR1bW15d29yZFxkb3RsZXNzCisgICUKKyAgJSBUZXhpbmZvIGZvbnQgY29tbWFuZHMuCisgIFxkZWZpbmVkdW1teXdvcmRcYgorICBcZGVmaW5lZHVtbXl3b3JkXGkKKyAgXGRlZmluZWR1bW15d29yZFxyCisgIFxkZWZpbmVkdW1teXdvcmRcc2MKKyAgXGRlZmluZWR1bW15d29yZFx0CisgICUKKyAgJSBDb21tYW5kcyB0aGF0IHRha2UgYXJndW1lbnRzLgorICBcZGVmaW5lZHVtbXl3b3JkXGFjcm9ueW0KKyAgXGRlZmluZWR1bW15d29yZFxjaXRlCisgIFxkZWZpbmVkdW1teXdvcmRcY29kZQorICBcZGVmaW5lZHVtbXl3b3JkXGNvbW1hbmQKKyAgXGRlZmluZWR1bW15d29yZFxkZm4KKyAgXGRlZmluZWR1bW15d29yZFxlbXBoCisgIFxkZWZpbmVkdW1teXdvcmRcZW52CisgIFxkZWZpbmVkdW1teXdvcmRcZmlsZQorICBcZGVmaW5lZHVtbXl3b3JkXGtiZAorICBcZGVmaW5lZHVtbXl3b3JkXGtleQorICBcZGVmaW5lZHVtbXl3b3JkXG1hdGgKKyAgXGRlZmluZWR1bW15d29yZFxvcHRpb24KKyAgXGRlZmluZWR1bW15d29yZFxweHJlZgorICBcZGVmaW5lZHVtbXl3b3JkXHJlZgorICBcZGVmaW5lZHVtbXl3b3JkXHNhbXAKKyAgXGRlZmluZWR1bW15d29yZFxzdHJvbmcKKyAgXGRlZmluZWR1bW15d29yZFx0aWUKKyAgXGRlZmluZWR1bW15d29yZFx1cmVmCisgIFxkZWZpbmVkdW1teXdvcmRcdXJsCisgIFxkZWZpbmVkdW1teXdvcmRcdmFyCisgIFxkZWZpbmVkdW1teXdvcmRcdmVyYgorICBcZGVmaW5lZHVtbXl3b3JkXHcKKyAgXGRlZmluZWR1bW15d29yZFx4cmVmCit9CisKKyUgXGluZGV4bm9mb250cyBpcyB1c2VkIHdoZW4gb3V0cHV0dGluZyB0aGUgc3RyaW5ncyB0byBzb3J0IHRoZSBpbmRleAorJSBieSwgYW5kIHdoZW4gY29uc3RydWN0aW5nIGNvbnRyb2wgc2VxdWVuY2UgbmFtZXMuICBJdCBlbGltaW5hdGVzIGFsbAorJSBjb250cm9sIHNlcXVlbmNlcyBhbmQganVzdCB3cml0ZXMgd2hhdGV2ZXIgdGhlIGJlc3QgQVNDSUkgc29ydCBzdHJpbmcKKyUgd291bGQgYmUgZm9yIGEgZ2l2ZW4gY29tbWFuZCAodXN1YWxseSBpdHMgYXJndW1lbnQpLgorJQorXGRlZlxpbmRleG5vZm9udHN7JQorICAlIEFjY2VudCBjb21tYW5kcyBzaG91bGQgYmVjb21lIEBhc2lzLgorICBcZGVmXGRlZmluZWR1bW15YWNjZW50IyMxe1xsZXQjIzFcYXNpc30lCisgICUgV2UgY2FuIGp1c3QgaWdub3JlIG90aGVyIGNvbnRyb2wgbGV0dGVycy4KKyAgXGRlZlxkZWZpbmVkdW1teWxldHRlciMjMXtcbGV0IyMxXGVtcHR5fSUKKyAgJSBIb3BlZnVsbHksIGFsbCBjb250cm9sIHdvcmRzIGNhbiBiZWNvbWUgQGFzaXMuCisgIFxsZXRcZGVmaW5lZHVtbXl3b3JkXGRlZmluZWR1bW15YWNjZW50CisgICUKKyAgXGNvbW1vbmR1bW1pZXNub2ZvbnRzCisgICUKKyAgJSBEb24ndCBuby1vcCBcdHQsIHNpbmNlIGl0IGlzbid0IGEgdXNlci1sZXZlbCBjb21tYW5kCisgICUgYW5kIGlzIHVzZWQgaW4gdGhlIGRlZmluaXRpb25zIG9mIHRoZSBhY3RpdmUgY2hhcnMgbGlrZSA8LCA+LCB8LCBldGMuCisgICUgTGlrZXdpc2Ugd2l0aCB0aGUgb3RoZXIgcGxhaW4gdGV4IGZvbnQgY29tbWFuZHMuCisgICVcbGV0XHR0PVxhc2lzCisgICUKKyAgXGRlZlwgeyB9JQorICBcZGVmXEB7QH0lCisgICUgaG93IHRvIGhhbmRsZSBicmFjZXM/CisgIFxkZWZcX3tcbm9ybWFsdW5kZXJzY29yZX0lCisgICUKKyAgJSBOb24tRW5nbGlzaCBsZXR0ZXJzLgorICBcZGVmXEFBe0FBfSUKKyAgXGRlZlxBRXtBRX0lCisgIFxkZWZcTHtMfSUKKyAgXGRlZlxPRXtPRX0lCisgIFxkZWZcT3tPfSUKKyAgXGRlZlxhYXthYX0lCisgIFxkZWZcYWV7YWV9JQorICBcZGVmXGx7bH0lCisgIFxkZWZcb2V7b2V9JQorICBcZGVmXG97b30lCisgIFxkZWZcc3N7c3N9JQorICBcZGVmXGV4Y2xhbWRvd257IX0lCisgIFxkZWZccXVlc3Rpb25kb3duez99JQorICBcZGVmXG9yZGZ7YX0lCisgIFxkZWZcb3JkbXtvfSUKKyAgJQorICBcZGVmXExhVGVYe0xhVGVYfSUKKyAgXGRlZlxUZVh7VGVYfSUKKyAgJQorICAlIEFzc29ydGVkIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgJSAoVGhlIGZvbGxvd2luZyB7fSB3aWxsIGVuZCB1cCBpbiB0aGUgc29ydCBzdHJpbmcsIGJ1dCB0aGF0J3Mgb2suKQorICBcZGVmXGJ1bGxldHtidWxsZXR9JQorICBcZGVmXGNvbW1heyx9JQorICBcZGVmXGNvcHlyaWdodHtjb3B5cmlnaHR9JQorICBcZGVmXHJlZ2lzdGVyZWRzeW1ib2x7Un0lCisgIFxkZWZcZG90c3suLi59JQorICBcZGVmXGVuZGRvdHN7Li4ufSUKKyAgXGRlZlxlcXVpdns9PX0lCisgIFxkZWZcZXJyb3J7ZXJyb3J9JQorICBcZGVmXGV1cm97ZXVyb30lCisgIFxkZWZcZXhwYW5zaW9uez09Pn0lCisgIFxkZWZcbWludXN7LX0lCisgIFxkZWZccG91bmRze3BvdW5kc30lCisgIFxkZWZccG9pbnR7Ln0lCisgIFxkZWZccHJpbnR7LXx9JQorICBcZGVmXHJlc3VsdHs9Pn0lCisgICUKKyAgJSBXZSBuZWVkIHRvIGdldCByaWQgb2YgYWxsIG1hY3JvcywgbGVhdmluZyBvbmx5IHRoZSBhcmd1bWVudHMgKGlmIHByZXNlbnQpLgorICAlIE9mIGNvdXJzZSB0aGlzIGlzIG5vdCBuZWFybHkgY29ycmVjdCwgYnV0IGl0IGlzIHRoZSBiZXN0IHdlIGNhbiBkbyBmb3Igbm93LgorICAlIG1ha2VpbmZvIGRvZXMgbm90IGV4cGFuZCBtYWNyb3MgaW4gdGhlIGFyZ3VtZW50IHRvIEBkZWZmbiwgd2hpY2ggZW5kcyB1cAorICAlIHdyaXRpbmcgYW4gaW5kZXggZW50cnksIGFuZCB0ZXhpbmRleCBpc24ndCBwcmVwYXJlZCBmb3IgYW4gaW5kZXggc29ydCBlbnRyeQorICAlIHRoYXQgc3RhcnRzIHdpdGggXC4KKyAgJSAKKyAgJSBTaW5jZSBtYWNybyBpbnZvY2F0aW9ucyBhcmUgZm9sbG93ZWQgYnkgYnJhY2VzLCB3ZSBjYW4ganVzdCByZWRlZmluZSB0aGVtCisgICUgdG8gdGFrZSBhIHNpbmdsZSBUZVggYXJndW1lbnQuICBUaGUgY2FzZSBvZiBhIG1hY3JvIGludm9jYXRpb24gdGhhdAorICAlIGdvZXMgdG8gZW5kLW9mLWxpbmUgaXMgbm90IGhhbmRsZWQuCisgICUgCisgIFxtYWNyb2xpc3QKK30KKworXGxldFxpbmRleGJhY2tzbGFzaD0wICAlb3ZlcnJpZGRlbiBkdXJpbmcgXHByaW50aW5kZXguCitcbGV0XFNFVG1hcmdpbmluZGV4PVxyZWxheCAlIHB1dCBpbmRleCBlbnRyaWVzIGluIG1hcmdpbiAodW5kb2N1bWVudGVkKT8KKworJSBNb3N0IGluZGV4IGVudHJpZXMgZ28gdGhyb3VnaCBoZXJlLCBidXQgXGRvc3ViaW5kIGlzIHRoZSBnZW5lcmFsIGNhc2UuCislICMxIGlzIHRoZSBpbmRleCBuYW1lLCAjMiBpcyB0aGUgZW50cnkgdGV4dC4KK1xkZWZcZG9pbmQjMSMye1xkb3N1YmluZHsjMX17IzJ9e319CisKKyUgV29ya2hvcnNlIGZvciBhbGwgXGZvb2luZGV4ZXMuCislICMxIGlzIG5hbWUgb2YgaW5kZXgsICMyIGlzIHN0dWZmIHRvIHB1dCB0aGVyZSwgIzMgaXMgc3ViZW50cnkgLS0KKyUgZW1wdHkgaWYgY2FsbGVkIGZyb20gXGRvaW5kLCBhcyB3ZSB1c3VhbGx5IGFyZSAodGhlIG1haW4gZXhjZXB0aW9uCislIGlzIHdpdGggbW9zdCBkZWZ1bnMsIHdoaWNoIGNhbGwgdXMgZGlyZWN0bHkpLgorJQorXGRlZlxkb3N1YmluZCMxIzIjM3slCisgIFxpZmxpbmtzCisgIHslCisgICAgJSBTdG9yZSB0aGUgbWFpbiBpbmRleCBlbnRyeSB0ZXh0IChpbmNsdWRpbmcgdGhlIHRoaXJkIGFyZykuCisgICAgXHRva3MwID0geyMyfSUKKyAgICAlIElmIHRoaXJkIGFyZyBpcyBwcmVzZW50LCBwcmVjZWRlIGl0IHdpdGggYSBzcGFjZS4KKyAgICBcZGVmXHRoaXJkYXJneyMzfSUKKyAgICBcaWZ4XHRoaXJkYXJnXGVtcHR5IFxlbHNlCisgICAgICBcdG9rczAgPSBcZXhwYW5kYWZ0ZXJ7XHRoZVx0b2tzMCBcc3BhY2UgIzN9JQorICAgIFxmaQorICAgICUKKyAgICBcZWRlZlx3cml0ZXRve1xjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lfSUKKyAgICAlCisgICAgXGlmdm1vZGUKKyAgICAgIFxkb3N1YmluZHNhbml0aXplCisgICAgXGVsc2UKKyAgICAgIFxkb3N1YmluZHdyaXRlCisgICAgXGZpCisgIH0lCisgIFxmaQorfQorCislIFdyaXRlIHRoZSBlbnRyeSBpbiBcdG9rczAgdG8gdGhlIGluZGV4IGZpbGU6CislCitcZGVmXGRvc3ViaW5kd3JpdGV7JQorICAlIFB1dCB0aGUgaW5kZXggZW50cnkgaW4gdGhlIG1hcmdpbiBpZiBkZXNpcmVkLgorICBcaWZ4XFNFVG1hcmdpbmluZGV4XHJlbGF4XGVsc2UKKyAgICBcaW5zZXJ0XG1hcmdpbntcaGJveHtcdnJ1bGUgaGVpZ2h0OHB0IGRlcHRoM3B0IHdpZHRoMHB0IFx0aGVcdG9rczB9fSUKKyAgXGZpCisgICUKKyAgJSBSZW1lbWJlciwgd2UgYXJlIHdpdGhpbiBhIGdyb3VwLgorICBcaW5kZXhkdW1taWVzICUgTXVzdCBkbyB0aGlzIGhlcmUsIHNpbmNlIFxiZiwgZXRjIGV4cGFuZCBhdCB0aGlzIHN0YWdlCisgIFxkZWZcYmFja3NsYXNoY3VyZm9udHtcaW5kZXhiYWNrc2xhc2h9JSBcaW5kZXhiYWNrc2xhc2ggaXNuJ3QgZGVmaW5lZCBub3cKKyAgICAgICUgc28gaXQgd2lsbCBiZSBvdXRwdXQgYXMgaXM7IGFuZCBpdCB3aWxsIHByaW50IGFzIGJhY2tzbGFzaC4KKyAgJQorICAlIFByb2Nlc3MgdGhlIGluZGV4IGVudHJ5IHdpdGggYWxsIGZvbnQgY29tbWFuZHMgdHVybmVkIG9mZiwgdG8KKyAgJSBnZXQgdGhlIHN0cmluZyB0byBzb3J0IGJ5LgorICB7XGluZGV4bm9mb250cworICAgXGVkZWZcdGVtcHtcdGhlXHRva3MwfSUgbmVlZCBmdWxsIGV4cGFuc2lvbgorICAgXHhkZWZcaW5kZXhzb3J0dG1we1x0ZW1wfSUKKyAgfSUKKyAgJQorICAlIFNldCB1cCB0aGUgY29tcGxldGUgaW5kZXggZW50cnksIHdpdGggYm90aCB0aGUgc29ydCBrZXkgYW5kCisgICUgdGhlIG9yaWdpbmFsIHRleHQsIGluY2x1ZGluZyBhbnkgZm9udCBjb21tYW5kcy4gIFdlIHdyaXRlCisgICUgdGhyZWUgYXJndW1lbnRzIHRvIFxlbnRyeSB0byB0aGUgLj8/IGZpbGUgKGZvdXIgaW4gdGhlCisgICUgc3ViZW50cnkgY2FzZSksIHRleGluZGV4IHJlZHVjZXMgdG8gdHdvIHdoZW4gd3JpdGluZyB0aGUgLj8/cworICAlIHNvcnRlZCByZXN1bHQuCisgIFxlZGVmXHRlbXB7JQorICAgIFx3cml0ZVx3cml0ZXRveyUKKyAgICAgIFxzdHJpbmdcZW50cnl7XGluZGV4c29ydHRtcH17XG5vZXhwYW5kXGZvbGlvfXtcdGhlXHRva3MwfX0lCisgIH0lCisgIFx0ZW1wCit9CisKKyUgVGFrZSBjYXJlIG9mIHVud2FudGVkIHBhZ2UgYnJlYWtzOgorJQorJSBJZiBhIHNraXAgaXMgdGhlIGxhc3QgdGhpbmcgb24gdGhlIGxpc3Qgbm93LCBwcmVzZXJ2ZSBpdAorJSBieSBiYWNraW5nIHVwIGJ5IFxsYXN0c2tpcCwgZG9pbmcgdGhlIFx3cml0ZSwgdGhlbiBpbnNlcnRpbmcKKyUgdGhlIHNraXAgYWdhaW4uICBPdGhlcndpc2UsIHRoZSB3aGF0c2l0IGdlbmVyYXRlZCBieSB0aGUKKyUgXHdyaXRlIHdpbGwgbWFrZSBcbGFzdHNraXAgemVyby4gIFRoZSByZXN1bHQgaXMgdGhhdCBzZXF1ZW5jZXMKKyUgbGlrZSB0aGlzOgorJSBAZW5kIGRlZnVuCislIEB0aW5kZXggd2hhdGV2ZXIKKyUgQGRlZnVuIC4uLgorJSB3aWxsIGhhdmUgZXh0cmEgc3BhY2UgaW5zZXJ0ZWQsIGJlY2F1c2UgdGhlIFxtZWRicmVhayBpbiB0aGUKKyUgc3RhcnQgb2YgdGhlIEBkZWZ1biB3b24ndCBzZWUgdGhlIHNraXAgaW5zZXJ0ZWQgYnkgdGhlIEBlbmQgb2YKKyUgdGhlIHByZXZpb3VzIGRlZnVuLgorJQorJSBCdXQgZG9uJ3QgZG8gYW55IG9mIHRoaXMgaWYgd2UncmUgbm90IGluIHZlcnRpY2FsIG1vZGUuICBXZQorJSBkb24ndCB3YW50IHRvIGRvIGEgXHZza2lwIGFuZCBwcmVtYXR1cmVseSBlbmQgYSBwYXJhZ3JhcGguCislCislIEF2b2lkIHBhZ2UgYnJlYWtzIGR1ZSB0byB0aGVzZSBleHRyYSBza2lwcywgdG9vLgorJQorJSBCdXQgd2FpdCwgdGhlcmUgaXMgYSBjYXRjaCB0aGVyZToKKyUgV2UnbGwgaGF2ZSB0byBjaGVjayB3aGV0aGVyIFxsYXN0c2tpcCBpcyB6ZXJvIHNraXAuICBcaWZkaW0gaXMgbm90CislIHN1ZmZpY2llbnQgZm9yIHRoaXMgcHVycG9zZSwgYXMgaXQgaWdub3JlcyBzdHJldGNoIGFuZCBzaHJpbmsgcGFydHMKKyUgb2YgdGhlIHNraXAuICBUaGUgb25seSB3YXkgc2VlbXMgdG8gYmUgdG8gY2hlY2sgdGhlIHRleHR1YWwKKyUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNraXAuCislCislIFRoZSBmb2xsb3dpbmcgaXMgYWxtb3N0IGxpa2UgXGRlZlx6ZXJvc2tpcG1hY3JvezAuMHB0fSBleGNlcHQgdGhhdAorJSB0aGUgYGBwJycgYW5kIGBgdCcnIGNoYXJhY3RlcnMgaGF2ZSBjYXRjb2RlIFxvdGhlciwgbm90IDExIChsZXR0ZXIpLgorJQorXGVkZWZcemVyb3NraXBtYWNyb3tcZXhwYW5kYWZ0ZXJcdGhlXGNzbmFtZSB6QHNraXBcZW5kY3NuYW1lfQorJQorJSAuLi4sIHJlYWR5LCBHTzoKKyUKK1xkZWZcZG9zdWJpbmRzYW5pdGl6ZXslCisgICUgXGxhc3Rza2lwIGFuZCBcbGFzdHBlbmFsdHkgY2Fubm90IGJvdGggYmUgbm9uemVybyBzaW11bHRhbmVvdXNseS4KKyAgXHNraXAwID0gXGxhc3Rza2lwCisgIFxlZGVmXGxhc3Rza2lwbWFjcm97XHRoZVxsYXN0c2tpcH0lCisgIFxjb3VudDI1NSA9IFxsYXN0cGVuYWx0eQorICAlCisgICUgSWYgXGxhc3Rza2lwIGlzIG5vbnplcm8sIHRoYXQgbWVhbnMgdGhlIGxhc3QgaXRlbSB3YXMgYQorICAlIHNraXAuICBBbmQgc2luY2UgYSBza2lwIGlzIGRpc2NhcmRhYmxlLCB0aGF0IG1lYW5zIHRoaXMKKyAgJSAtXHNraXAwIGdsdWUgd2UncmUgaW5zZXJ0aW5nIGlzIHByZWNlZGVkIGJ5IGEKKyAgJSBub24tZGlzY2FyZGFibGUgaXRlbSwgdGhlcmVmb3JlIGl0IGlzIG5vdCBhIHBvdGVudGlhbAorICAlIGJyZWFrcG9pbnQsIHRoZXJlZm9yZSBubyBcbm9icmVhayBuZWVkZWQuCisgIFxpZnhcbGFzdHNraXBtYWNyb1x6ZXJvc2tpcG1hY3JvCisgIFxlbHNlCisgICAgXHZza2lwLVxza2lwMAorICBcZmkKKyAgJQorICBcZG9zdWJpbmR3cml0ZQorICAlCisgIFxpZnhcbGFzdHNraXBtYWNyb1x6ZXJvc2tpcG1hY3JvCisgICAgJSBJZiBcbGFzdHNraXAgd2FzIHplcm8sIHBlcmhhcHMgdGhlIGxhc3QgaXRlbSB3YXMgYSBwZW5hbHR5LCBhbmQKKyAgICAlIHBlcmhhcHMgaXQgd2FzID49MTAwMDAsIGUuZy4sIGEgXG5vYnJlYWsuICBJbiB0aGF0IGNhc2UsIHdlIHdhbnQKKyAgICAlIHRvIHJlLWluc2VydCB0aGUgc2FtZSBwZW5hbHR5ICh2YWx1ZXMgPjEwMDAwIGFyZSB1c2VkIGZvciB2YXJpb3VzCisgICAgJSBzaWduYWxzKTsgc2luY2Ugd2UganVzdCBpbnNlcnRlZCBhIG5vbi1kaXNjYXJkYWJsZSBpdGVtLCBhbnkKKyAgICAlIGZvbGxvd2luZyBnbHVlIChzdWNoIGFzIGEgXHBhcnNraXApIHdvdWxkIGJlIGEgYnJlYWtwb2ludC4gIEZvciBleGFtcGxlOgorICAgICUgCisgICAgJSAgIEBkZWZmbiBkZWZmbi13aGF0ZXZlcgorICAgICUgICBAdmluZGV4IGluZGV4LXdoYXRldmVyCisgICAgJSAgIERlc2NyaXB0aW9uLgorICAgICUgd291bGQgYWxsb3cgYSBicmVhayBiZXR3ZWVuIHRoZSBpbmRleC13aGF0ZXZlciB3aGF0c2l0CisgICAgJSBhbmQgdGhlICJEZXNjcmlwdGlvbi4iIHBhcmFncmFwaC4KKyAgICBcaWZudW1cY291bnQyNTU+OTk5OSBccGVuYWx0eVxjb3VudDI1NSBcZmkKKyAgXGVsc2UKKyAgICAlIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB3ZSBoYWQgYSBub256ZXJvIFxsYXN0c2tpcCwKKyAgICAlIHRoaXMgbWFrZS11cCBnbHVlIHdvdWxkIGJlIHByZWNlZGVkIGJ5IGEgbm9uLWRpc2NhcmRhYmxlIGl0ZW0KKyAgICAlICh0aGUgd2hhdHNpdCBmcm9tIHRoZSBcd3JpdGUpLCBzbyB3ZSBtdXN0IGluc2VydCBhIFxub2JyZWFrLgorICAgIFxub2JyZWFrXHZza2lwXHNraXAwCisgIFxmaQorfQorCislIFRoZSBpbmRleCBlbnRyeSB3cml0dGVuIGluIHRoZSBmaWxlIGFjdHVhbGx5IGxvb2tzIGxpa2UKKyUgIFxlbnRyeSB7c29ydHN0cmluZ317cGFnZX17dG9waWN9CislIG9yCislICBcZW50cnkge3NvcnRzdHJpbmd9e3BhZ2V9e3RvcGljfXtzdWJ0b3BpY30KKyUgVGhlIHRleGluZGV4IHByb2dyYW0gcmVhZHMgaW4gdGhlc2UgZmlsZXMgYW5kIHdyaXRlcyBmaWxlcworJSBjb250YWluaW5nIHRoZXNlIGtpbmRzIG9mIGxpbmVzOgorJSAgXGluaXRpYWwge2N9CislICAgICBiZWZvcmUgdGhlIGZpcnN0IHRvcGljIHdob3NlIGluaXRpYWwgaXMgYworJSAgXGVudHJ5IHt0b3BpY317cGFnZWxpc3R9CislICAgICBmb3IgYSB0b3BpYyB0aGF0IGlzIHVzZWQgd2l0aG91dCBzdWJ0b3BpY3MKKyUgIFxwcmltYXJ5IHt0b3BpY30KKyUgICAgIGZvciB0aGUgYmVnaW5uaW5nIG9mIGEgdG9waWMgdGhhdCBpcyB1c2VkIHdpdGggc3VidG9waWNzCislICBcc2Vjb25kYXJ5IHtzdWJ0b3BpY317cGFnZWxpc3R9CislICAgICBmb3IgZWFjaCBzdWJ0b3BpYy4KKworJSBEZWZpbmUgdGhlIHVzZXItYWNjZXNzaWJsZSBpbmRleGluZyBjb21tYW5kcworJSBAZmluZGV4LCBAdmluZGV4LCBAa2luZGV4LCBAY2luZGV4LgorCitcZGVmXGZpbmRleCB7XGZuaW5kZXh9CitcZGVmXGtpbmRleCB7XGt5aW5kZXh9CitcZGVmXGNpbmRleCB7XGNwaW5kZXh9CitcZGVmXHZpbmRleCB7XHZyaW5kZXh9CitcZGVmXHRpbmRleCB7XHRwaW5kZXh9CitcZGVmXHBpbmRleCB7XHBnaW5kZXh9CisKK1xkZWZcY2luZGV4c3ViIHtcYmVnaW5ncm91cFxvYmV5bGluZXNcY2luZGV4c3VifQore1xvYmV5bGluZXMgJQorXGdkZWZcY2luZGV4c3ViICIjMSIgIzJeXk17XGVuZGdyb3VwICUKK1xkb3N1YmluZHtjcH17IzJ9eyMxfX19CisKKyUgRGVmaW5lIHRoZSBtYWNyb3MgdXNlZCBpbiBmb3JtYXR0aW5nIG91dHB1dCBvZiB0aGUgc29ydGVkIGluZGV4IG1hdGVyaWFsLgorCislIEBwcmludGluZGV4IGNhdXNlcyBhIHBhcnRpY3VsYXIgaW5kZXggKHRoZSA/P3MgZmlsZSkgdG8gZ2V0IHByaW50ZWQuCislIEl0IGRvZXMgbm90IHByaW50IGFueSBjaGFwdGVyIGhlYWRpbmcgKHVzdWFsbHkgYW4gQHVubnVtYmVyZWQpLgorJQorXHBhcnNlYXJnZGVmXHByaW50aW5kZXh7XGJlZ2luZ3JvdXAKKyAgXGRvYnJlYWsgXGNoYXBoZWFkaW5nc2tpcHsxMDAwMH0lCisgICUKKyAgXHNtYWxsZm9udHMgXHJtCisgIFx0b2xlcmFuY2UgPSA5NTAwCisgIFxldmVyeXBhciA9IHt9JSBkb24ndCB3YW50IHRoZSBca2VyblwtcGFyaW5kZW50IGZyb20gaW5kZW50YXRpb24gc3VwcHJlc3Npb24uCisgICUKKyAgJSBTZWUgaWYgdGhlIGluZGV4IGZpbGUgZXhpc3RzIGFuZCBpcyBub25lbXB0eS4KKyAgJSBDaGFuZ2UgY2F0Y29kZSBvZiBAIGhlcmUgc28gdGhhdCBpZiB0aGUgaW5kZXggZmlsZSBjb250YWlucworICAlIFxpbml0aWFsIHtAfQorICAlIGFzIGl0cyBmaXJzdCBsaW5lLCBUZVggZG9lc24ndCBjb21wbGFpbiBhYm91dCBtaXNtYXRjaGVkIGJyYWNlcworICAlIChiZWNhdXNlIGl0IHRoaW5rcyBAfSBpcyBhIGNvbnRyb2wgc2VxdWVuY2UpLgorICBcY2F0Y29kZWBcQCA9IDExCisgIFxvcGVuaW4gMSBcam9ibmFtZS4jMXMKKyAgXGlmZW9mIDEKKyAgICAlIFxlbmRkb3VibGVjb2x1bW5zIGdldHMgY29uZnVzZWQgaWYgdGhlcmUgaXMgbm8gdGV4dCBpbiB0aGUgaW5kZXgsCisgICAgJSBhbmQgaXQgbG9zZXMgdGhlIGNoYXB0ZXIgdGl0bGUgYW5kIHRoZSBhdXggZmlsZSBlbnRyaWVzIGZvciB0aGUKKyAgICAlIGluZGV4LiAgVGhlIGVhc2llc3Qgd2F5IHRvIHByZXZlbnQgdGhpcyBwcm9ibGVtIGlzIHRvIG1ha2Ugc3VyZQorICAgICUgdGhlcmUgaXMgc29tZSB0ZXh0LgorICAgIFxwdXR3b3JkSW5kZXhOb25leGlzdGVudAorICBcZWxzZQorICAgICUKKyAgICAlIElmIHRoZSBpbmRleCBmaWxlIGV4aXN0cyBidXQgaXMgZW1wdHksIHRoZW4gXG9wZW5pbiBsZWF2ZXMgXGlmZW9mCisgICAgJSBmYWxzZS4gIFdlIGhhdmUgdG8gbWFrZSBUZVggdHJ5IHRvIHJlYWQgc29tZXRoaW5nIGZyb20gdGhlIGZpbGUsIHNvCisgICAgJSBpdCBjYW4gZGlzY292ZXIgaWYgdGhlcmUgaXMgYW55dGhpbmcgaW4gaXQuCisgICAgXHJlYWQgMSB0byBcdGVtcAorICAgIFxpZmVvZiAxCisgICAgICBccHV0d29yZEluZGV4SXNFbXB0eQorICAgIFxlbHNlCisgICAgICAlIEluZGV4IGZpbGVzIGFyZSBhbG1vc3QgVGV4aW5mbyBzb3VyY2UsIGJ1dCB3ZSB1c2UgXCBhcyB0aGUgZXNjYXBlCisgICAgICAlIGNoYXJhY3Rlci4gIEl0IHdvdWxkIGJlIGJldHRlciB0byB1c2UgQCwgYnV0IHRoYXQncyB0b28gYmlnIGEgY2hhbmdlCisgICAgICAlIHRvIG1ha2UgcmlnaHQgbm93LgorICAgICAgXGRlZlxpbmRleGJhY2tzbGFzaHtcYmFja3NsYXNoY3VyZm9udH0lCisgICAgICBcY2F0Y29kZWBcXCA9IDAKKyAgICAgIFxlc2NhcGVjaGFyID0gYFxcCisgICAgICBcYmVnaW5kb3VibGVjb2x1bW5zCisgICAgICBcaW5wdXQgXGpvYm5hbWUuIzFzCisgICAgICBcZW5kZG91YmxlY29sdW1ucworICAgIFxmaQorICBcZmkKKyAgXGNsb3NlaW4gMQorXGVuZGdyb3VwfQorCislIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCBieSB0aGUgc29ydGVkIGluZGV4IGZpbGUgaXRzZWxmLgorJSBDaGFuZ2UgdGhlbSB0byBjb250cm9sIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBpbmRleC4KKworXGRlZlxpbml0aWFsIzF7eyUKKyAgJSBTb21lIG1pbm9yIGZvbnQgY2hhbmdlcyBmb3IgdGhlIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgXGxldFx0ZW50dD1cc2VjdHQgXGxldFx0dD1cc2VjdHQgXGxldFxzZj1cc2VjdHQKKyAgJQorICAlIFJlbW92ZSBhbnkgZ2x1ZSB3ZSBtYXkgaGF2ZSwgd2UnbGwgYmUgaW5zZXJ0aW5nIG91ciBvd24uCisgIFxyZW1vdmVsYXN0c2tpcAorICAlCisgICUgV2UgbGlrZSBicmVha3MgYmVmb3JlIHRoZSBpbmRleCBpbml0aWFscywgc28gaW5zZXJ0IGEgYm9udXMuCisgIFxub2JyZWFrCisgIFx2c2tpcCAwcHQgcGx1cyAzXGJhc2VsaW5lc2tpcAorICBccGVuYWx0eSAwCisgIFx2c2tpcCAwcHQgcGx1cyAtM1xiYXNlbGluZXNraXAKKyAgJQorICAlIFR5cGVzZXQgdGhlIGluaXRpYWwuICBNYWtpbmcgdGhpcyBhZGQgdXAgdG8gYSB3aG9sZSBudW1iZXIgb2YKKyAgJSBiYXNlbGluZXNraXBzIGluY3JlYXNlcyB0aGUgY2hhbmNlIG9mIHRoZSBkb3RzIGxpbmluZyB1cCBmcm9tIGNvbHVtbgorICAlIHRvIGNvbHVtbi4gIEl0IHN0aWxsIHdvbid0IG9mdGVuIGJlIHBlcmZlY3QsIGJlY2F1c2Ugb2YgdGhlIHN0cmV0Y2gKKyAgJSB3ZSBuZWVkIGJlZm9yZSBlYWNoIGVudHJ5LCBidXQgaXQncyBiZXR0ZXIuCisgICUKKyAgJSBObyBzaHJpbmsgYmVjYXVzZSBpdCBjb25mdXNlcyBcYmFsYW5jZWNvbHVtbnMuCisgIFx2c2tpcCAxLjY3XGJhc2VsaW5lc2tpcCBwbHVzIC41XGJhc2VsaW5lc2tpcAorICBcbGVmdGxpbmV7XHNlY2JmICMxfSUKKyAgJSBEbyBvdXIgYmVzdCBub3QgdG8gYnJlYWsgYWZ0ZXIgdGhlIGluaXRpYWwuCisgIFxub2JyZWFrCisgIFx2c2tpcCAuMzNcYmFzZWxpbmVza2lwIHBsdXMgLjFcYmFzZWxpbmVza2lwCit9fQorCislIFxlbnRyeSB0eXBlc2V0cyBhIHBhcmFncmFwaCBjb25zaXN0aW5nIG9mIHRoZSB0ZXh0ICgjMSksIGRvdCBsZWFkZXJzLCBhbmQKKyUgdGhlbiBwYWdlIG51bWJlciAoIzIpIGZsdXNoZWQgdG8gdGhlIHJpZ2h0IG1hcmdpbi4gIEl0IGlzIHVzZWQgZm9yIGluZGV4CislIGFuZCB0YWJsZSBvZiBjb250ZW50cyBlbnRyaWVzLiAgVGhlIHBhcmFncmFwaCBpcyBpbmRlbnRlZCBieSBcbGVmdHNraXAuCislCislIEEgc3RyYWlnaHRmb3J3YXJkIGltcGxlbWVudGF0aW9uIHdvdWxkIHN0YXJ0IGxpa2UgdGhpczoKKyUJXGRlZlxlbnRyeSMxIzJ7Li4uCislIEJ1dCB0aGlzIGZyb3plcyB0aGUgY2F0Y29kZXMgaW4gdGhlIGFyZ3VtZW50LCBhbmQgY2FuIGNhdXNlIHByb2JsZW1zIHRvCislIEBjb2RlLCB3aGljaCBzZXRzIC0gYWN0aXZlLiAgVGhpcyBwcm9ibGVtIHdhcyBmaXhlZCBieSBhIGtsdWRnZS0tLQorJSBgYC0nJyB3YXMgYWN0aXZlIHRocm91Z2hvdXQgd2hvbGUgaW5kZXgsIGJ1dCB0aGlzIGlzbid0IHJlYWxseSByaWdodC4KKyUKKyUgVGhlIHJpZ2h0IHNvbHV0aW9uIGlzIHRvIHByZXZlbnQgXGVudHJ5IGZyb20gc3dhbGxvd2luZyB0aGUgd2hvbGUgdGV4dC4KKyUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWthc2FsLCAyMW5vdjAzCitcZGVmXGVudHJ5eyUKKyAgXGJlZ2luZ3JvdXAKKyAgICAlCisgICAgJSBTdGFydCBhIG5ldyBwYXJhZ3JhcGggaWYgbmVjZXNzYXJ5LCBzbyBvdXIgYXNzaWdubWVudHMgYmVsb3cgY2FuJ3QKKyAgICAlIGFmZmVjdCBwcmV2aW91cyB0ZXh0LgorICAgIFxwYXIKKyAgICAlCisgICAgJSBEbyBub3QgZmlsbCBvdXQgdGhlIGxhc3QgbGluZSB3aXRoIHdoaXRlIHNwYWNlLgorICAgIFxwYXJmaWxsc2tpcCA9IDBpbgorICAgICUKKyAgICAlIE5vIGV4dHJhIHNwYWNlIGFib3ZlIHRoaXMgcGFyYWdyYXBoLgorICAgIFxwYXJza2lwID0gMGluCisgICAgJQorICAgICUgRG8gbm90IHByZWZlciBhIHNlcGFyYXRlIGxpbmUgZW5kaW5nIHdpdGggYSBoeXBoZW4gdG8gZmV3ZXIgbGluZXMuCisgICAgXGZpbmFsaHlwaGVuZGVtZXJpdHMgPSAwCisgICAgJQorICAgICUgXGhhbmdpbmRlbnQgaXMgb25seSByZWxldmFudCB3aGVuIHRoZSBlbnRyeSB0ZXh0IGFuZCBwYWdlIG51bWJlcgorICAgICUgZG9uJ3QgYm90aCBmaXQgb24gb25lIGxpbmUuICBJbiB0aGF0IGNhc2UsIGJvYiBzdWdnZXN0cyBzdGFydGluZyB0aGUKKyAgICAlIGRvdHMgcHJldHR5IGZhciBvdmVyIG9uIHRoZSBsaW5lLiAgVW5mb3J0dW5hdGVseSwgYSBsYXJnZQorICAgICUgaW5kZW50YXRpb24gbG9va3Mgd3Jvbmcgd2hlbiB0aGUgZW50cnkgdGV4dCBpdHNlbGYgaXMgYnJva2VuIGFjcm9zcworICAgICUgbGluZXMuICBTbyB3ZSB1c2UgYSBzbWFsbCBpbmRlbnRhdGlvbiBhbmQgcHV0IHVwIHdpdGggbG9uZyBsZWFkZXJzLgorICAgICUKKyAgICAlIFxoYW5nYWZ0ZXIgaXMgcmVzZXQgdG8gMSAod2hpY2ggaXMgdGhlIHZhbHVlIHdlIHdhbnQpIGF0IHRoZSBzdGFydAorICAgICUgb2YgZWFjaCBwYXJhZ3JhcGgsIHNvIHdlIG5lZWQgbm90IGRvIGFueXRoaW5nIHdpdGggdGhhdC4KKyAgICBcaGFuZ2luZGVudCA9IDJlbQorICAgICUKKyAgICAlIFdoZW4gdGhlIGVudHJ5IHRleHQgbmVlZHMgdG8gYmUgYnJva2VuLCBqdXN0IGZpbGwgb3V0IHRoZSBmaXJzdCBsaW5lCisgICAgJSB3aXRoIGJsYW5rIHNwYWNlLgorICAgIFxyaWdodHNraXAgPSAwcHQgcGx1czFmaWwKKyAgICAlCisgICAgJSBBIGJpdCBvZiBzdHJldGNoIGJlZm9yZSBlYWNoIGVudHJ5IGZvciB0aGUgYmVuZWZpdCBvZiBiYWxhbmNpbmcKKyAgICAlIGNvbHVtbnMuCisgICAgXHZza2lwIDBwdCBwbHVzMXB0CisgICAgJQorICAgICUgU3dhbGxvdyB0aGUgbGVmdCBicmFjZSBvZiB0aGUgdGV4dCAoZmlyc3QgcGFyYW1ldGVyKToKKyAgICBcYWZ0ZXJhc3NpZ25tZW50XGRvZW50cnkKKyAgICBcbGV0XHRlbXAgPQorfQorXGRlZlxkb2VudHJ5eyUKKyAgICBcYmdyb3VwICUgSW5zdGVhZCBvZiB0aGUgc3dhbGxvd2VkIGJyYWNlLgorICAgICAgXG5vaW5kZW50CisgICAgICBcYWZ0ZXJncm91cFxmaW5pc2hlbnRyeQorICAgICAgJSBBbmQgbm93IGNvbWVzIHRoZSB0ZXh0IG9mIHRoZSBlbnRyeS4KK30KK1xkZWZcZmluaXNoZW50cnkjMXslCisgICAgJSAjMSBpcyB0aGUgcGFnZSBudW1iZXIuCisgICAgJQorICAgICUgVGhlIGZvbGxvd2luZyBpcyBrbHVkZ2VkIHRvIG5vdCBvdXRwdXQgYSBsaW5lIG9mIGRvdHMgaW4gdGhlIGluZGV4IGlmCisgICAgJSB0aGVyZSBhcmUgbm8gcGFnZSBudW1iZXJzLiAgVGhlIG5leHQgcGVyc29uIHdobyBicmVha3MgdGhpcyB3aWxsIGJlCisgICAgJSBjdXJzZWQgYnkgYSBVbml4IGRhZW1vbi4KKyAgICBcZGVmXHRlbXBhe3tccm0gfX0lCisgICAgXGRlZlx0ZW1wYnsjMX0lCisgICAgXGVkZWZcdGVtcGN7XHRlbXBhfSUKKyAgICBcZWRlZlx0ZW1wZHtcdGVtcGJ9JQorICAgIFxpZnhcdGVtcGNcdGVtcGQKKyAgICAgIFwgJQorICAgIFxlbHNlCisgICAgICAlCisgICAgICAlIElmIHdlIG11c3QsIHB1dCB0aGUgcGFnZSBudW1iZXIgb24gYSBsaW5lIG9mIGl0cyBvd24sIGFuZCBmaWxsIG91dAorICAgICAgJSB0aGlzIGxpbmUgd2l0aCBibGFuayBzcGFjZS4gIChUaGUgXGhmaWwgaXMgb3ZlcndoZWxtZWQgd2l0aCB0aGUKKyAgICAgICUgZmlsbCBsZWFkZXJzIGdsdWUgaW4gXGluZGV4ZG90ZmlsbCBpZiB0aGUgcGFnZSBudW1iZXIgZG9lcyBmaXQuKQorICAgICAgXGhmaWxccGVuYWx0eTUwCisgICAgICBcbnVsbFxub2JyZWFrXGluZGV4ZG90ZmlsbCAlIEhhdmUgbGVhZGVycyBiZWZvcmUgdGhlIHBhZ2UgbnVtYmVyLgorICAgICAgJQorICAgICAgJSBUaGUgYFwgJyBoZXJlIGlzIHJlbW92ZWQgYnkgdGhlIGltcGxpY2l0IFx1bnNraXAgdGhhdCBUZVggZG9lcyBhcworICAgICAgJSBwYXJ0IG9mICh0aGUgcHJpbWl0aXZlKSBccGFyLiAgV2l0aG91dCBpdCwgYSBzcHVyaW91cyB1bmRlcmZ1bGwKKyAgICAgICUgXGhib3ggZW5zdWVzLgorICAgICAgXGlmcGRmCisJXHBkZmdldHRva3MjMS4lCisJXCBcdGhlXHRva3NBCisgICAgICBcZWxzZQorCVwgIzElCisgICAgICBcZmkKKyAgICBcZmkKKyAgICBccGFyCisgIFxlbmRncm91cAorfQorCislIExpa2UgXGRvdGZpbGwgZXhjZXB0IHRha2VzIGF0IGxlYXN0IDEgZW0uCitcZGVmXGluZGV4ZG90ZmlsbHtcY2xlYWRlcnMKKyAgXGhib3h7JFxtYXRoc3Vycm91bmQ9MHB0IFxta2VybjEuNW11ICR7XGl0IC59JCBcbWtlcm4xLjVtdSR9XGhza2lwIDFlbSBwbHVzIDFmaWxsfQorCitcZGVmXHByaW1hcnkgIzF7XGxpbmV7IzFcaGZpbH19CisKK1xuZXdza2lwXHNlY29uZGFyeWluZGVudCBcc2Vjb25kYXJ5aW5kZW50PTAuNWNtCitcZGVmXHNlY29uZGFyeSMxIzJ7eyUKKyAgXHBhcmZpbGxza2lwPTBpbgorICBccGFyc2tpcD0waW4KKyAgXGhhbmdpbmRlbnQ9MWluCisgIFxoYW5nYWZ0ZXI9MQorICBcbm9pbmRlbnRcaHNraXBcc2Vjb25kYXJ5aW5kZW50XGhib3h7IzF9XGluZGV4ZG90ZmlsbAorICBcaWZwZGYKKyAgICBccGRmZ2V0dG9rcyMyLlwgXHRoZVx0b2tzQSAlIFRoZSBwYWdlIG51bWJlciBlbmRzIHRoZSBwYXJhZ3JhcGguCisgIFxlbHNlCisgICAgIzIKKyAgXGZpCisgIFxwYXIKK319CisKKyUgRGVmaW5lIHR3by1jb2x1bW4gbW9kZSwgd2hpY2ggd2UgdXNlIHRvIHR5cGVzZXQgaW5kZXhlcy4KKyUgQWRhcHRlZCBmcm9tIHRoZSBUZVhib29rLCBwYWdlIDQxNiwgd2hpY2ggaXMgdG8gc2F5LAorJSB0aGUgbWFubWFjLnRleCBmb3JtYXQgdXNlZCB0byBwcmludCB0aGUgVGVYYm9vayBpdHNlbGYuCitcY2F0Y29kZWBcQD0xMQorCitcbmV3Ym94XHBhcnRpYWxwYWdlCitcbmV3ZGltZW5cZG91YmxlY29sdW1uaHNpemUKKworXGRlZlxiZWdpbmRvdWJsZWNvbHVtbnN7XGJlZ2luZ3JvdXAgJSBlbmRlZCBieSBcZW5kZG91YmxlY29sdW1ucworICAlIEdyYWIgYW55IHNpbmdsZS1jb2x1bW4gbWF0ZXJpYWwgYWJvdmUgdXMuCisgIFxvdXRwdXQgPSB7JQorICAgICUKKyAgICAlIEhlcmUgaXMgYSBwb3NzaWJpbGl0eSBub3QgZm9yZXNlZW4gaW4gbWFubWFjOiBpZiB3ZSBhY2N1bXVsYXRlIGEKKyAgICAlIHdob2xlIGxvdCBvZiBtYXRlcmlhbCwgd2UgbWlnaHQgZW5kIHVwIGNhbGxpbmcgdGhpcyBcb3V0cHV0CisgICAgJSByb3V0aW5lIHR3aWNlIGluIGEgcm93IChzZWUgdGhlIGRvdWJsZWNvbC1sb3NlIHRlc3QsIHdoaWNoIGlzCisgICAgJSBlc3NlbnRpYWxseSBhIGNvdXBsZSBvZiBpbmRleGVzIHdpdGggQHNldGNoYXB0ZXJuZXdwYWdlIG9mZikuICBJbgorICAgICUgdGhhdCBjYXNlIHdlIGp1c3Qgc2hpcCBvdXQgd2hhdCBpcyBpbiBccGFydGlhbHBhZ2Ugd2l0aCB0aGUgbm9ybWFsCisgICAgJSBvdXRwdXQgcm91dGluZS4gIEdlbmVyYWxseSwgXHBhcnRpYWxwYWdlIHdpbGwgYmUgZW1wdHkgd2hlbiB0aGlzCisgICAgJSBydW5zIGFuZCB0aGlzIHdpbGwgYmUgYSBuby1vcC4gIFNlZSB0aGUgaW5kZXhzcHJlYWQudGV4IHRlc3QgY2FzZS4KKyAgICBcaWZ2b2lkXHBhcnRpYWxwYWdlIFxlbHNlCisgICAgICBcb25lcGFnZW91dHtccGFnZWNvbnRlbnRzXHBhcnRpYWxwYWdlfSUKKyAgICBcZmkKKyAgICAlCisgICAgXGdsb2JhbFxzZXRib3hccGFydGlhbHBhZ2UgPSBcdmJveHslCisgICAgICAlIFVudmJveCB0aGUgbWFpbiBvdXRwdXQgcGFnZS4KKyAgICAgIFx1bnZib3hcUEFHRQorICAgICAgXGtlcm4tXHRvcHNraXAgXGtlcm5cYmFzZWxpbmVza2lwCisgICAgfSUKKyAgfSUKKyAgXGVqZWN0ICUgcnVuIHRoYXQgb3V0cHV0IHJvdXRpbmUgdG8gc2V0IFxwYXJ0aWFscGFnZQorICAlCisgICUgVXNlIHRoZSBkb3VibGUtY29sdW1uIG91dHB1dCByb3V0aW5lIGZvciBzdWJzZXF1ZW50IHBhZ2VzLgorICBcb3V0cHV0ID0ge1xkb3VibGVjb2x1bW5vdXR9JQorICAlCisgICUgQ2hhbmdlIHRoZSBwYWdlIHNpemUgcGFyYW1ldGVycy4gIFdlIGNvdWxkIGRvIHRoaXMgb25jZSBvdXRzaWRlIHRoaXMKKyAgJSByb3V0aW5lLCBpbiBlYWNoIG9mIEBzbWFsbGJvb2ssIEBhZm91cnBhcGVyLCBhbmQgdGhlIGRlZmF1bHQgOC41eDExCisgICUgZm9ybWF0LCBidXQgdGhlbiB3ZSByZXBlYXQgdGhlIHNhbWUgY29tcHV0YXRpb24uICBSZXBlYXRpbmcgYSBjb3VwbGUKKyAgJSBvZiBhc3NpZ25tZW50cyBvbmNlIHBlciBpbmRleCBpcyBjbGVhcmx5IG1lYW5pbmdsZXNzIGZvciB0aGUKKyAgJSBleGVjdXRpb24gdGltZSwgc28gd2UgbWF5IGFzIHdlbGwgZG8gaXQgaW4gb25lIHBsYWNlLgorICAlCisgICUgRmlyc3Qgd2UgaGFsdmUgdGhlIGxpbmUgbGVuZ3RoLCBsZXNzIGEgbGl0dGxlIGZvciB0aGUgZ3V0dGVyIGJldHdlZW4KKyAgJSB0aGUgY29sdW1ucy4gIFdlIGNvbXB1dGUgdGhlIGd1dHRlciBiYXNlZCBvbiB0aGUgbGluZSBsZW5ndGgsIHNvIGl0CisgICUgY2hhbmdlcyBhdXRvbWF0aWNhbGx5IHdpdGggdGhlIHBhcGVyIGZvcm1hdC4gIFRoZSBtYWdpYyBjb25zdGFudAorICAlIGJlbG93IGlzIGNob3NlbiBzbyB0aGF0IHRoZSBndXR0ZXIgaGFzIHRoZSBzYW1lIHZhbHVlICh3ZWxsLCArLTwxcHQpCisgICUgYXMgaXQgZGlkIHdoZW4gd2UgaGFyZC1jb2RlZCBpdC4KKyAgJQorICAlIFdlIHB1dCB0aGUgcmVzdWx0IGluIGEgc2VwYXJhdGUgcmVnaXN0ZXIsIFxkb3VibGVjb2x1bWhzaXplLCBzbyB3ZQorICAlIGNhbiByZXN0b3JlIGl0IGluIFxwYWdlc29mYXIsIGFmdGVyIFxoc2l6ZSBpdHNlbGYgaGFzIChwb3RlbnRpYWxseSkKKyAgJSBiZWVuIGNsb2JiZXJlZC4KKyAgJQorICBcZG91YmxlY29sdW1uaHNpemUgPSBcaHNpemUKKyAgICBcYWR2YW5jZVxkb3VibGVjb2x1bW5oc2l6ZSBieSAtLjA0MTU0XGhzaXplCisgICAgXGRpdmlkZVxkb3VibGVjb2x1bW5oc2l6ZSBieSAyCisgIFxoc2l6ZSA9IFxkb3VibGVjb2x1bW5oc2l6ZQorICAlCisgICUgRG91YmxlIHRoZSBcdnNpemUgYXMgd2VsbC4gIChXZSBkb24ndCBuZWVkIGEgc2VwYXJhdGUgcmVnaXN0ZXIgaGVyZSwKKyAgJSBzaW5jZSBub2JvZHkgY2xvYmJlcnMgXHZzaXplLikKKyAgXHZzaXplID0gMlx2c2l6ZQorfQorCislIFRoZSBkb3VibGUtY29sdW1uIG91dHB1dCByb3V0aW5lIGZvciBhbGwgZG91YmxlLWNvbHVtbiBwYWdlcyBleGNlcHQKKyUgdGhlIGxhc3QuCislCitcZGVmXGRvdWJsZWNvbHVtbm91dHslCisgIFxzcGxpdHRvcHNraXA9XHRvcHNraXAgXHNwbGl0bWF4ZGVwdGg9XG1heGRlcHRoCisgICUgR2V0IHRoZSBhdmFpbGFibGUgc3BhY2UgZm9yIHRoZSBkb3VibGUgY29sdW1ucyAtLSB0aGUgbm9ybWFsCisgICUgKHVuZG91YmxlZCkgcGFnZSBoZWlnaHQgbWludXMgYW55IG1hdGVyaWFsIGxlZnQgb3ZlciBmcm9tIHRoZQorICAlIHByZXZpb3VzIHBhZ2UuCisgIFxkaW1lbkAgPSBcdnNpemUKKyAgXGRpdmlkZVxkaW1lbkAgYnkgMgorICBcYWR2YW5jZVxkaW1lbkAgYnkgLVxodFxwYXJ0aWFscGFnZQorICAlCisgICUgYm94MCB3aWxsIGJlIHRoZSBsZWZ0LWhhbmQgY29sdW1uLCBib3gyIHRoZSByaWdodC4KKyAgXHNldGJveDA9XHZzcGxpdDI1NSB0b1xkaW1lbkAgXHNldGJveDI9XHZzcGxpdDI1NSB0b1xkaW1lbkAKKyAgXG9uZXBhZ2VvdXRccGFnZXNvZmFyCisgIFx1bnZib3gyNTUKKyAgXHBlbmFsdHlcb3V0cHV0cGVuYWx0eQorfQorJQorJSBSZS1vdXRwdXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBvdXRwdXQgcGFnZSAtLSBhbnkgcHJldmlvdXMgbWF0ZXJpYWwsCislIGZvbGxvd2VkIGJ5IHRoZSB0d28gYm94ZXMgd2UganVzdCBzcGxpdCwgaW4gYm94MCBhbmQgYm94Mi4KK1xkZWZccGFnZXNvZmFyeyUKKyAgXHVudmJveFxwYXJ0aWFscGFnZQorICAlCisgIFxoc2l6ZSA9IFxkb3VibGVjb2x1bW5oc2l6ZQorICBcd2QwPVxoc2l6ZSBcd2QyPVxoc2l6ZQorICBcaGJveCB0b1xwYWdld2lkdGh7XGJveDBcaGZpbFxib3gyfSUKK30KKyUKKyUgQWxsIGRvbmUgd2l0aCBkb3VibGUgY29sdW1ucy4KK1xkZWZcZW5kZG91YmxlY29sdW1uc3slCisgIFxvdXRwdXQgPSB7JQorICAgICUgU3BsaXQgdGhlIGxhc3Qgb2YgdGhlIGRvdWJsZS1jb2x1bW4gbWF0ZXJpYWwuICBMZWF2ZSBpdCBvbiB0aGUKKyAgICAlIGN1cnJlbnQgcGFnZSwgbm8gYXV0b21hdGljIHBhZ2UgYnJlYWsuCisgICAgXGJhbGFuY2Vjb2x1bW5zCisgICAgJQorICAgICUgSWYgd2UgZW5kIHVwIHNwbGl0dGluZyB0b28gbXVjaCBtYXRlcmlhbCBmb3IgdGhlIGN1cnJlbnQgcGFnZSwKKyAgICAlIHRob3VnaCwgdGhlcmUgd2lsbCBiZSBhbm90aGVyIHBhZ2UgYnJlYWsgcmlnaHQgYWZ0ZXIgdGhpcyBcb3V0cHV0CisgICAgJSBpbnZvY2F0aW9uIGVuZHMuICBIYXZpbmcgY2FsbGVkIFxiYWxhbmNlY29sdW1ucyBvbmNlLCB3ZSBkbyBub3QKKyAgICAlIHdhbnQgdG8gY2FsbCBpdCBhZ2Fpbi4gIFRoZXJlZm9yZSwgcmVzZXQgXG91dHB1dCB0byBpdHMgbm9ybWFsCisgICAgJSBkZWZpbml0aW9uIHJpZ2h0IGF3YXkuICAoV2UgaG9wZSBcYmFsYW5jZWNvbHVtbnMgd2lsbCBuZXZlciBiZQorICAgICUgY2FsbGVkIG9uIHRvIGJhbGFuY2UgdG9vIG11Y2ggbWF0ZXJpYWwsIGJ1dCBpZiBpdCBpcywgdGhpcyBtYWtlcworICAgICUgdGhlIG91dHB1dCBzb21ld2hhdCBtb3JlIHBhbGF0YWJsZS4pCisgICAgXGdsb2JhbFxvdXRwdXQgPSB7XG9uZXBhZ2VvdXR7XHBhZ2Vjb250ZW50c1xQQUdFfX0lCisgIH0lCisgIFxlamVjdAorICBcZW5kZ3JvdXAgJSBzdGFydGVkIGluIFxiZWdpbmRvdWJsZWNvbHVtbnMKKyAgJQorICAlIFxwYWdlZ29hbCB3YXMgc2V0IHRvIHRoZSBkb3VibGVkIFx2c2l6ZSBhYm92ZSwgc2luY2Ugd2UgcmVzdGFydGVkCisgICUgdGhlIGN1cnJlbnQgcGFnZS4gIFdlJ3JlIG5vdyBiYWNrIHRvIG5vcm1hbCBzaW5nbGUtY29sdW1uCisgICUgdHlwZXNldHRpbmcsIHNvIHJlc2V0IFxwYWdlZ29hbCB0byB0aGUgbm9ybWFsIFx2c2l6ZSAoYWZ0ZXIgdGhlCisgICUgXGVuZGdyb3VwIHdoZXJlIFx2c2l6ZSBnb3QgcmVzdG9yZWQpLgorICBccGFnZWdvYWwgPSBcdnNpemUKK30KKyUKKyUgQ2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIGRvdWJsZSBjb2x1bW4gbWF0ZXJpYWwuCitcZGVmXGJhbGFuY2Vjb2x1bW5zeyUKKyAgXHNldGJveDAgPSBcdmJveHtcdW52Ym94MjU1fSUgbGlrZSBcYm94MjU1IGJ1dCBtb3JlIGVmZmljaWVudCwgc2VlIHAuMTIwLgorICBcZGltZW5AID0gXGh0MAorICBcYWR2YW5jZVxkaW1lbkAgYnkgXHRvcHNraXAKKyAgXGFkdmFuY2VcZGltZW5AIGJ5LVxiYXNlbGluZXNraXAKKyAgXGRpdmlkZVxkaW1lbkAgYnkgMiAlIHRhcmdldCB0byBzcGxpdCB0bworICAlZGVidWdcbWVzc2FnZXtmaW5hbCAyLWNvbHVtbiBtYXRlcmlhbCBoZWlnaHQ9XHRoZVxodDAsIHRhcmdldD1cdGhlXGRpbWVuQC59JQorICBcc3BsaXR0b3Bza2lwID0gXHRvcHNraXAKKyAgJSBMb29wIHVudGlsIHdlIGdldCBhIGRlY2VudCBicmVha3BvaW50LgorICB7JQorICAgIFx2YmFkbmVzcyA9IDEwMDAwCisgICAgXGxvb3AKKyAgICAgIFxnbG9iYWxcc2V0Ym94MyA9IFxjb3B5MAorICAgICAgXGdsb2JhbFxzZXRib3gxID0gXHZzcGxpdDMgdG8gXGRpbWVuQAorICAgIFxpZmRpbVxodDM+XGRpbWVuQAorICAgICAgXGdsb2JhbFxhZHZhbmNlXGRpbWVuQCBieSAxcHQKKyAgICBccmVwZWF0CisgIH0lCisgICVkZWJ1Z1xtZXNzYWdle3NwbGl0IHRvIFx0aGVcZGltZW5ALCBjb2x1bW4gaGVpZ2h0czogXHRoZVxodDEsIFx0aGVcaHQzLn0lCisgIFxzZXRib3gwPVx2Ym94IHRvXGRpbWVuQHtcdW52Ym94MX0lCisgIFxzZXRib3gyPVx2Ym94IHRvXGRpbWVuQHtcdW52Ym94M30lCisgICUKKyAgXHBhZ2Vzb2ZhcgorfQorXGNhdGNvZGVgXEAgPSBcb3RoZXIKKworCitcbWVzc2FnZXtzZWN0aW9uaW5nLH0KKyUgQ2hhcHRlcnMsIHNlY3Rpb25zLCBldGMuCisKKyUgXHVubnVtYmVyZWRubyBpcyBhbiBveHltb3Jvbiwgb2YgY291cnNlLiAgQnV0IHdlIGNvdW50IHRoZSB1bm51bWJlcmVkCislIHNlY3Rpb25zIHNvIHRoYXQgd2UgY2FuIHJlZmVyIHRvIHRoZW0gdW5hbWJpZ3VvdXNseSBpbiB0aGUgcGRmCislIG91dGxpbmVzIGJ5IHRoZWlyICJzZWN0aW9uIG51bWJlciIuICBXZSBhdm9pZCBjb2xsaXNpb25zIHdpdGggY2hhcHRlcgorJSBudW1iZXJzIGJ5IHN0YXJ0aW5nIHRoZW0gYXQgMTAwMDAuICAoSWYgYSBkb2N1bWVudCBldmVyIGhhcyAxMDAwMAorJSBjaGFwdGVycywgd2UncmUgaW4gdHJvdWJsZSBhbnl3YXksIEknbSBzdXJlLikKK1xuZXdjb3VudFx1bm51bWJlcmVkbm8gXHVubnVtYmVyZWRubyA9IDEwMDAwCitcbmV3Y291bnRcY2hhcG5vCitcbmV3Y291bnRcc2Vjbm8gICAgICAgIFxzZWNubz0wCitcbmV3Y291bnRcc3Vic2Vjbm8gICAgIFxzdWJzZWNubz0wCitcbmV3Y291bnRcc3Vic3Vic2Vjbm8gIFxzdWJzdWJzZWNubz0wCisKKyUgVGhpcyBjb3VudGVyIGlzIGZ1bm55IHNpbmNlIGl0IGNvdW50cyB0aHJvdWdoIGNoYXJjb2RlcyBvZiBsZXR0ZXJzIEEsIEIsIC4uLgorXG5ld2NvdW50XGFwcGVuZGl4bm8gIFxhcHBlbmRpeG5vID0gYFxACislCislIFxkZWZcYXBwZW5kaXhsZXR0ZXJ7XGNoYXJcdGhlXGFwcGVuZGl4bm99CislIFdlIGRvIHRoZSBmb2xsb3dpbmcgdWdseSBjb25kaXRpb25hbCBpbnN0ZWFkIG9mIHRoZSBhYm92ZSBzaW1wbGUKKyUgY29uc3RydWN0IGZvciB0aGUgc2FrZSBvZiBwZGZ0ZXgsIHdoaWNoIG5lZWRzIHRoZSBhY3R1YWwKKyUgbGV0dGVyIGluIHRoZSBleHBhbnNpb24sIG5vdCBqdXN0IHR5cGVzZXQuCislCitcZGVmXGFwcGVuZGl4bGV0dGVyeyUKKyAgXGlmbnVtXGFwcGVuZGl4bm89YEEgQSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gQiBCJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBDIEMlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEQgRCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRSBFJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBGIEYlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEcgRyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gSCBIJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBJIEklCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEogSiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gSyBLJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBMIEwlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YE0gTSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gTiBOJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBPIE8lCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFAgUCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUSBRJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBSIFIlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFMgUyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gVCBUJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBVIFUlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFYgViUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gVyBXJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBYIFglCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFkgWSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gWiBaJQorICAlIFRoZSBcdGhlIGlzIG5lY2Vzc2FyeSwgZGVzcGl0ZSBhcHBlYXJhbmNlcywgYmVjYXVzZSBcYXBwZW5kaXhsZXR0ZXIgaXMKKyAgJSBleHBhbmRlZCB3aGlsZSB3cml0aW5nIHRoZSAudG9jIGZpbGUuICBcY2hhclxhcHBlbmRpeG5vIGlzIG5vdAorICAlIGV4cGFuZGFibGUsIHRodXMgaXQgaXMgd3JpdHRlbiBsaXRlcmFsbHksIHRodXMgYWxsIGFwcGVuZGl4ZXMgY29tZSBvdXQKKyAgJSB3aXRoIHRoZSBzYW1lIGxldHRlciAob3IgQCkgaW4gdGhlIHRvYyB3aXRob3V0IGl0LgorICBcZWxzZVxjaGFyXHRoZVxhcHBlbmRpeG5vCisgIFxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaQorICBcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZml9CisKKyUgRWFjaCBAY2hhcHRlciBkZWZpbmVzIHRoaXMgYXMgdGhlIG5hbWUgb2YgdGhlIGNoYXB0ZXIuCislIHBhZ2UgaGVhZGluZ3MgYW5kIGZvb3RpbmdzIGNhbiB1c2UgaXQuICBAc2VjdGlvbiBkb2VzIGxpa2V3aXNlLgorJSBIb3dldmVyLCB0aGV5IGFyZSBub3QgcmVsaWFibGUsIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIG1hcmtzLgorXGRlZlx0aGlzY2hhcHRlcnt9CitcZGVmXHRoaXNzZWN0aW9ue30KKworXG5ld2NvdW50XGFic3NlY2xldmVsICUgdXNlZCB0byBjYWxjdWxhdGUgcHJvcGVyIGhlYWRpbmcgbGV2ZWwKK1xuZXdjb3VudFxzZWNiYXNlXHNlY2Jhc2U9MCAlIEByYWlzZXNlY3Rpb25zL0Bsb3dlcnNlY3Rpb25zIG1vZGlmeSB0aGlzIGNvdW50CisKKyUgQHJhaXNlc2VjdGlvbnM6IHRyZWF0IEBzZWN0aW9uIGFzIGNoYXB0ZXIsIEBzdWJzZWN0aW9uIGFzIHNlY3Rpb24sIGV0Yy4KK1xkZWZccmFpc2VzZWN0aW9uc3tcZ2xvYmFsXGFkdmFuY2Vcc2VjYmFzZSBieSAtMX0KK1xsZXRcdXA9XHJhaXNlc2VjdGlvbnMgJSBvcmlnaW5hbCBCRm94IG5hbWUKKworJSBAbG93ZXJzZWN0aW9uczogdHJlYXQgQGNoYXB0ZXIgYXMgc2VjdGlvbiwgQHNlY3Rpb24gYXMgc3Vic2VjdGlvbiwgZXRjLgorXGRlZlxsb3dlcnNlY3Rpb25ze1xnbG9iYWxcYWR2YW5jZVxzZWNiYXNlIGJ5IDF9CitcbGV0XGRvd249XGxvd2Vyc2VjdGlvbnMgJSBvcmlnaW5hbCBCRm94IG5hbWUKKworJSB3ZSBvbmx5IGhhdmUgc3Vic3ViLgorXGNoYXJkZWZcbWF4c2VjbGV2ZWwgPSAzCislCislIEEgbnVtYmVyZWQgc2VjdGlvbiB3aXRoaW4gYW4gdW5udW1iZXJlZCBjaGFuZ2VzIHRvIHVubnVtYmVyZWQgdG9vLgorJSBUbyBhY2hpdmUgdGhpcywgcmVtZW1iZXIgdGhlICJiaWdnZXN0IiB1bm51bS4gc2VjLiB3ZSBhcmUgY3VycmVudGx5IGluOgorXGNoYXJkZWZcdW5tbGV2ZWwgPSBcbWF4c2VjbGV2ZWwKKyUKKyUgVHJhY2Ugd2hldGhlciB0aGUgY3VycmVudCBjaGFwdGVyIGlzIGFuIGFwcGVuZGl4IG9yIG5vdDoKKyUgXGNoYXBoZWFkdHlwZSBpcyAiTiIgb3IgIkEiLCB1bm51bWJlcmVkIGNoYXB0ZXJzIGFyZSBpZ25vcmVkLgorXGRlZlxjaGFwaGVhZHR5cGV7Tn0KKworJSBDaG9vc2UgYSBoZWFkaW5nIG1hY3JvCislICMxIGlzIGhlYWRpbmcgdHlwZQorJSAjMiBpcyBoZWFkaW5nIGxldmVsCislICMzIGlzIHRleHQgZm9yIGhlYWRpbmcKK1xkZWZcZ2VuaGVhZCMxIzIjM3slCisgICUgQ29tcHV0ZSB0aGUgYWJzLiBzZWMuIGxldmVsOgorICBcYWJzc2VjbGV2ZWw9IzIKKyAgXGFkdmFuY2VcYWJzc2VjbGV2ZWwgYnkgXHNlY2Jhc2UKKyAgJSBNYWtlIHN1cmUgXGFic3NlY2xldmVsIGRvZXNuJ3QgZmFsbCBvdXRzaWRlIHRoZSByYW5nZToKKyAgXGlmbnVtIFxhYnNzZWNsZXZlbCA8IDAKKyAgICBcYWJzc2VjbGV2ZWwgPSAwCisgIFxlbHNlCisgICAgXGlmbnVtIFxhYnNzZWNsZXZlbCA+IDMKKyAgICAgIFxhYnNzZWNsZXZlbCA9IDMKKyAgICBcZmkKKyAgXGZpCisgICUgVGhlIGhlYWRpbmcgdHlwZToKKyAgXGRlZlxoZWFkdHlwZXsjMX0lCisgIFxpZiBcaGVhZHR5cGUgVSUKKyAgICBcaWZudW0gXGFic3NlY2xldmVsIDwgXHVubWxldmVsCisgICAgICBcY2hhcmRlZlx1bm1sZXZlbCA9IFxhYnNzZWNsZXZlbAorICAgIFxmaQorICBcZWxzZQorICAgICUgQ2hlY2sgZm9yIGFwcGVuZGl4IHNlY3Rpb25zOgorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPSAwCisgICAgICBcZWRlZlxjaGFwaGVhZHR5cGV7XGhlYWR0eXBlfSUKKyAgICBcZWxzZQorICAgICAgXGlmIFxoZWFkdHlwZSBBXGlmIFxjaGFwaGVhZHR5cGUgTiUKKwlcZXJybWVzc2FnZXtAYXBwZW5kaXguLi4gd2l0aGluIGEgbm9uLWFwcGVuZGl4IGNoYXB0ZXJ9JQorICAgICAgXGZpXGZpCisgICAgXGZpCisgICAgJSBDaGVjayBmb3IgbnVtYmVyZWQgd2l0aGluIHVubnVtYmVyZWQ6CisgICAgXGlmbnVtIFxhYnNzZWNsZXZlbCA+IFx1bm1sZXZlbAorICAgICAgXGRlZlxoZWFkdHlwZXtVfSUKKyAgICBcZWxzZQorICAgICAgXGNoYXJkZWZcdW5tbGV2ZWwgPSAzCisgICAgXGZpCisgIFxmaQorICAlIE5vdyBwcmludCB0aGUgaGVhZGluZzoKKyAgXGlmIFxoZWFkdHlwZSBVJQorICAgIFxpZmNhc2VcYWJzc2VjbGV2ZWwKKwlcdW5udW1iZXJlZHp6ensjM30lCisgICAgXG9yIFx1bm51bWJlcmVkc2Vjenp6eyMzfSUKKyAgICBcb3IgXHVubnVtYmVyZWRzdWJzZWN6enp7IzN9JQorICAgIFxvciBcdW5udW1iZXJlZHN1YnN1YnNlY3p6ensjM30lCisgICAgXGZpCisgIFxlbHNlCisgICAgXGlmIFxoZWFkdHlwZSBBJQorICAgICAgXGlmY2FzZVxhYnNzZWNsZXZlbAorCSAgXGFwcGVuZGl4enp6eyMzfSUKKyAgICAgIFxvciBcYXBwZW5kaXhzZWN0aW9uenp6eyMzfSUKKyAgICAgIFxvciBcYXBwZW5kaXhzdWJzZWN6enp7IzN9JQorICAgICAgXG9yIFxhcHBlbmRpeHN1YnN1YnNlY3p6ensjM30lCisgICAgICBcZmkKKyAgICBcZWxzZQorICAgICAgXGlmY2FzZVxhYnNzZWNsZXZlbAorCSAgXGNoYXB0ZXJ6enp7IzN9JQorICAgICAgXG9yIFxzZWN6enp7IzN9JQorICAgICAgXG9yIFxudW1iZXJlZHN1YnNlY3p6ensjM30lCisgICAgICBcb3IgXG51bWJlcmVkc3Vic3Vic2Vjenp6eyMzfSUKKyAgICAgIFxmaQorICAgIFxmaQorICBcZmkKKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQKK30KKworJSBhbiBpbnRlcmZhY2U6CitcZGVmXG51bWhlYWR7XGdlbmhlYWQgTn0KK1xkZWZcYXBwaGVhZHtcZ2VuaGVhZCBBfQorXGRlZlx1bm5taGVhZHtcZ2VuaGVhZCBVfQorCislIEBjaGFwdGVyLCBAYXBwZW5kaXgsIEB1bm51bWJlcmVkLiAgSW5jcmVtZW50IHRvcC1sZXZlbCBjb3VudGVyLCByZXNldAorJSBhbGwgbG93ZXItbGV2ZWwgc2VjdGlvbmluZyBjb3VudGVycyB0byB6ZXJvLgorJQorJSBBbHNvIHNldCBcY2hhcGxldmVscHJlZml4LCB3aGljaCB3ZSBwcmVwZW5kIHRvIEBmbG9hdCBzZXF1ZW5jZSBudW1iZXJzCislIChlLmcuLCBmaWd1cmVzKSwgcS52LiAgQnkgZGVmYXVsdCAoYmVmb3JlIGFueSBjaGFwdGVyKSwgdGhhdCBpcyBlbXB0eS4KK1xsZXRcY2hhcGxldmVscHJlZml4ID0gXGVtcHR5CislCitcb3V0ZXJccGFyc2VhcmdkZWZcY2hhcHRlcntcbnVtaGVhZDB7IzF9fSAlIG5vcm1hbGx5IG51bWhlYWQwIGNhbGxzIGNoYXB0ZXJ6enoKK1xkZWZcY2hhcHRlcnp6eiMxeyUKKyAgJSBzZWN0aW9uIHJlc2V0dGluZyBpcyBcZ2xvYmFsIGluIGNhc2UgdGhlIGNoYXB0ZXIgaXMgaW4gYSBncm91cCwgc3VjaAorICAlIGFzIGFuIEBpbmNsdWRlIGZpbGUuCisgIFxnbG9iYWxcc2Vjbm89MCBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wCisgICAgXGdsb2JhbFxhZHZhbmNlXGNoYXBubyBieSAxCisgICUKKyAgJSBVc2VkIGZvciBcZmxvYXQuCisgIFxnZGVmXGNoYXBsZXZlbHByZWZpeHtcdGhlXGNoYXBuby59JQorICBccmVzZXRhbGxmbG9hdG5vcworICAlCisgIFxtZXNzYWdle1xwdXR3b3JkQ2hhcHRlclxzcGFjZSBcdGhlXGNoYXBub30lCisgICUKKyAgJSBXcml0ZSB0aGUgYWN0dWFsIGhlYWRpbmcuCisgIFxjaGFwbWFjcm97IzF9e1ludW1iZXJlZH17XHRoZVxjaGFwbm99JQorICAlCisgICUgU28gQHNlY3Rpb24gYW5kIHRoZSBsaWtlIGFyZSBudW1iZXJlZCB1bmRlcm5lYXRoIHRoaXMgY2hhcHRlci4KKyAgXGdsb2JhbFxsZXRcc2VjdGlvbiA9IFxudW1iZXJlZHNlYworICBcZ2xvYmFsXGxldFxzdWJzZWN0aW9uID0gXG51bWJlcmVkc3Vic2VjCisgIFxnbG9iYWxcbGV0XHN1YnN1YnNlY3Rpb24gPSBcbnVtYmVyZWRzdWJzdWJzZWMKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXGFwcGVuZGl4e1xhcHBoZWFkMHsjMX19ICUgbm9ybWFsbHkgYXBwaGVhZDAgY2FsbHMgYXBwZW5kaXh6enoKK1xkZWZcYXBwZW5kaXh6enojMXslCisgIFxnbG9iYWxcc2Vjbm89MCBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wCisgICAgXGdsb2JhbFxhZHZhbmNlXGFwcGVuZGl4bm8gYnkgMQorICBcZ2RlZlxjaGFwbGV2ZWxwcmVmaXh7XGFwcGVuZGl4bGV0dGVyLn0lCisgIFxyZXNldGFsbGZsb2F0bm9zCisgICUKKyAgXGRlZlxhcHBlbmRpeG51bXtccHV0d29yZEFwcGVuZGl4XHNwYWNlIFxhcHBlbmRpeGxldHRlcn0lCisgIFxtZXNzYWdle1xhcHBlbmRpeG51bX0lCisgICUKKyAgXGNoYXBtYWNyb3sjMX17WWFwcGVuZGl4fXtcYXBwZW5kaXhsZXR0ZXJ9JQorICAlCisgIFxnbG9iYWxcbGV0XHNlY3Rpb24gPSBcYXBwZW5kaXhzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic2VjdGlvbiA9IFxhcHBlbmRpeHN1YnNlYworICBcZ2xvYmFsXGxldFxzdWJzdWJzZWN0aW9uID0gXGFwcGVuZGl4c3Vic3Vic2VjCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlx1bm51bWJlcmVke1x1bm5taGVhZDB7IzF9fSAlIG5vcm1hbGx5IHVubm1oZWFkMCBjYWxscyB1bm51bWJlcmVkenp6CitcZGVmXHVubnVtYmVyZWR6enojMXslCisgIFxnbG9iYWxcc2Vjbm89MCBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wCisgICAgXGdsb2JhbFxhZHZhbmNlXHVubnVtYmVyZWRubyBieSAxCisgICUKKyAgJSBTaW5jZSBhbiB1bm51bWJlcmVkIGhhcyBubyBudW1iZXIsIG5vIHByZWZpeCBmb3IgZmlndXJlcy4KKyAgXGdsb2JhbFxsZXRcY2hhcGxldmVscHJlZml4ID0gXGVtcHR5CisgIFxyZXNldGFsbGZsb2F0bm9zCisgICUKKyAgJSBUaGlzIHVzZWQgdG8gYmUgc2ltcGx5IFxtZXNzYWdleyMxfSwgYnV0IFRlWCBmdWxseSBleHBhbmRzIHRoZQorICAlIGFyZ3VtZW50IHRvIFxtZXNzYWdlLiAgVGhlcmVmb3JlLCBpZiAjMSBjb250YWluZWQgQC1jb21tYW5kcywgVGVYCisgICUgZXhwYW5kZWQgdGhlbS4gIEZvciBleGFtcGxlLCBpbiBgQHVubnVtYmVyZWQgVGhlIEBjaXRle0Jvb2t9JywgVGVYCisgICUgZXhwYW5kZWQgQGNpdGUgKHdoaWNoIHR1cm5zIG91dCB0byBjYXVzZSBlcnJvcnMgYmVjYXVzZSBcY2l0ZSBpcyBtZWFudAorICAlIHRvIGJlIGV4ZWN1dGVkLCBub3QgZXhwYW5kZWQpLgorICAlCisgICUgQW55d2F5LCB3ZSBkb24ndCB3YW50IHRoZSBmdWxseS1leHBhbmRlZCBkZWZpbml0aW9uIG9mIEBjaXRlIHRvIGFwcGVhcgorICAlIGFzIGEgcmVzdWx0IG9mIHRoZSBcbWVzc2FnZSwgd2UganVzdCB3YW50IGBAY2l0ZScgaXRzZWxmLiAgV2UgdXNlCisgICUgXHRoZTx0b2tzIHJlZ2lzdGVyPiB0byBhY2hpZXZlIHRoaXM6IFRlWCBleHBhbmRzIFx0aGU8dG9rcz4gb25seSBvbmNlLAorICAlIHNpbXBseSB5aWVsZGluZyB0aGUgY29udGVudHMgb2YgPHRva3MgcmVnaXN0ZXI+LiAgKFdlIGFsc28gZG8gdGhpcyBmb3IKKyAgJSB0aGUgdG9jIGVudHJpZXMuKQorICBcdG9rczAgPSB7IzF9JQorICBcbWVzc2FnZXsoXHRoZVx0b2tzMCl9JQorICAlCisgIFxjaGFwbWFjcm97IzF9e1lub3RoaW5nfXtcdGhlXHVubnVtYmVyZWRub30lCisgICUKKyAgXGdsb2JhbFxsZXRcc2VjdGlvbiA9IFx1bm51bWJlcmVkc2VjCisgIFxnbG9iYWxcbGV0XHN1YnNlY3Rpb24gPSBcdW5udW1iZXJlZHN1YnNlYworICBcZ2xvYmFsXGxldFxzdWJzdWJzZWN0aW9uID0gXHVubnVtYmVyZWRzdWJzdWJzZWMKK30KKworJSBAY2VudGVyY2hhcCBpcyBsaWtlIEB1bm51bWJlcmVkLCBidXQgdGhlIGhlYWRpbmcgaXMgY2VudGVyZWQuCitcb3V0ZXJccGFyc2VhcmdkZWZcY2VudGVyY2hhcHslCisgICUgV2VsbCwgd2UgY291bGQgZG8gdGhlIGZvbGxvd2luZyBpbiBhIGdyb3VwLCBidXQgdGhhdCB3b3VsZCBicmVhaworICAlIGFuIGFzc3VtcHRpb24gdGhhdCBcY2hhcG1hY3JvIGlzIGNhbGxlZCBhdCB0aGUgb3V0ZXJtb3N0IGxldmVsLgorICAlIFRodXMgd2UgYXJlIHNhZmVyIHRoaXMgd2F5OgkJLS1rYXNhbCwgMjRmZWIwNAorICBcbGV0XGNlbnRlcnBhcmFtZXRlcnNtYXliZSA9IFxjZW50ZXJwYXJhbWV0ZXJzCisgIFx1bm5taGVhZDB7IzF9JQorICBcbGV0XGNlbnRlcnBhcmFtZXRlcnNtYXliZSA9IFxyZWxheAorfQorCislIEB0b3AgaXMgbGlrZSBAdW5udW1iZXJlZC4KK1xsZXRcdG9wXHVubnVtYmVyZWQKKworJSBTZWN0aW9ucy4KK1xvdXRlclxwYXJzZWFyZ2RlZlxudW1iZXJlZHNlY3tcbnVtaGVhZDF7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIHNlY3p6egorXGRlZlxzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c2VjfXtZbnVtYmVyZWR9e1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXhzZWN0aW9ue1xhcHBoZWFkMXsjMX19ICUgbm9ybWFsbHkgY2FsbHMgYXBwZW5kaXhzZWN0aW9uenp6CitcZGVmXGFwcGVuZGl4c2VjdGlvbnp6eiMxeyUKKyAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1lhcHBlbmRpeH17XGFwcGVuZGl4bGV0dGVyLlx0aGVcc2Vjbm99JQorfQorXGxldFxhcHBlbmRpeHNlY1xhcHBlbmRpeHNlY3Rpb24KKworXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWRzZWN7XHVubm1oZWFkMXsjMX19ICUgbm9ybWFsbHkgY2FsbHMgdW5udW1iZXJlZHNlY3p6egorXGRlZlx1bm51bWJlcmVkc2Vjenp6IzF7JQorICBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WW5vdGhpbmd9e1x0aGVcdW5udW1iZXJlZG5vLlx0aGVcc2Vjbm99JQorfQorCislIFN1YnNlY3Rpb25zLgorXG91dGVyXHBhcnNlYXJnZGVmXG51bWJlcmVkc3Vic2Vje1xudW1oZWFkMnsjMX19ICUgbm9ybWFsbHkgY2FsbHMgbnVtYmVyZWRzdWJzZWN6enoKK1xkZWZcbnVtYmVyZWRzdWJzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1ludW1iZXJlZH17XHRoZVxjaGFwbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXGFwcGVuZGl4c3Vic2Vje1xhcHBoZWFkMnsjMX19ICUgbm9ybWFsbHkgY2FsbHMgYXBwZW5kaXhzdWJzZWN6enoKK1xkZWZcYXBwZW5kaXhzdWJzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1lhcHBlbmRpeH0lCisgICAgICAgICAgICAgICAgIHtcYXBwZW5kaXhsZXR0ZXIuXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWRzdWJzZWN7XHVubm1oZWFkMnsjMX19ICVub3JtYWxseSBjYWxscyB1bm51bWJlcmVkc3Vic2Vjenp6CitcZGVmXHVubnVtYmVyZWRzdWJzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1lub3RoaW5nfSUKKyAgICAgICAgICAgICAgICAge1x0aGVcdW5udW1iZXJlZG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNub30lCit9CisKKyUgU3Vic3Vic2VjdGlvbnMuCitcb3V0ZXJccGFyc2VhcmdkZWZcbnVtYmVyZWRzdWJzdWJzZWN7XG51bWhlYWQzeyMxfX0gJSBub3JtYWxseSBudW1iZXJlZHN1YnN1YnNlY3p6egorXGRlZlxudW1iZXJlZHN1YnN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHN1YnN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzdWJzZWN9e1ludW1iZXJlZH0lCisgICAgICAgICAgICAgICAgIHtcdGhlXGNoYXBuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlxhcHBlbmRpeHN1YnN1YnNlY3tcYXBwaGVhZDN7IzF9fSAlIG5vcm1hbGx5IGFwcGVuZGl4c3Vic3Vic2Vjenp6CitcZGVmXGFwcGVuZGl4c3Vic3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WWFwcGVuZGl4fSUKKyAgICAgICAgICAgICAgICAge1xhcHBlbmRpeGxldHRlci5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlx1bm51bWJlcmVkc3Vic3Vic2Vje1x1bm5taGVhZDN7IzF9fSAlbm9ybWFsbHkgdW5udW1iZXJlZHN1YnN1YnNlY3p6egorXGRlZlx1bm51bWJlcmVkc3Vic3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WW5vdGhpbmd9JQorICAgICAgICAgICAgICAgICB7XHRoZVx1bm51bWJlcmVkbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vLlx0aGVcc3Vic3Vic2Vjbm99JQorfQorCislIFRoZXNlIG1hY3JvcyBjb250cm9sIHdoYXQgdGhlIHNlY3Rpb24gY29tbWFuZHMgZG8sIGFjY29yZGluZworJSB0byB3aGF0IGtpbmQgb2YgY2hhcHRlciB3ZSBhcmUgaW4gKG9yZGluYXJ5LCBhcHBlbmRpeCwgb3IgdW5udW1iZXJlZCkuCislIERlZmluZSB0aGVtIGJ5IGRlZmF1bHQgZm9yIGEgbnVtYmVyZWQgY2hhcHRlci4KK1xsZXRcc2VjdGlvbiA9IFxudW1iZXJlZHNlYworXGxldFxzdWJzZWN0aW9uID0gXG51bWJlcmVkc3Vic2VjCitcbGV0XHN1YnN1YnNlY3Rpb24gPSBcbnVtYmVyZWRzdWJzdWJzZWMKKworJSBEZWZpbmUgQG1ham9yaGVhZGluZywgQGhlYWRpbmcgYW5kIEBzdWJoZWFkaW5nCisKKyUgTk9URSBvbiB1c2Ugb2YgXHZib3ggZm9yIGNoYXB0ZXIgaGVhZGluZ3MsIHNlY3Rpb24gaGVhZGluZ3MsIGFuZCBzdWNoOgorJSAgICAgICAxKSBXZSB1c2UgXHZib3ggcmF0aGVyIHRoYW4gdGhlIGVhcmxpZXIgXGxpbmUgdG8gcGVybWl0CislICAgICAgICAgIG92ZXJsb25nIGhlYWRpbmdzIHRvIGZvbGQuCislICAgICAgIDIpIFxoeXBoZW5wZW5hbHR5IGlzIHNldCB0byAxMDAwMCBiZWNhdXNlIGh5cGhlbmF0aW9uIGluIGEKKyUgICAgICAgICAgaGVhZGluZyBpcyBvYm5veGlvdXM7IHRoaXMgZm9yYmlkcyBpdC4KKyUgICAgICAgMykgTGlrZXdpc2UsIGhlYWRpbmdzIGxvb2sgYmVzdCBpZiBubyBccGFyaW5kZW50IGlzIHVzZWQsIGFuZAorJSAgICAgICAgICBpZiBqdXN0aWZpY2F0aW9uIGlzIG5vdCBhdHRlbXB0ZWQuICBIZW5jZSBccmFnZ2VkcmlnaHQuCisKKworXGRlZlxtYWpvcmhlYWRpbmd7JQorICB7XGFkdmFuY2VcY2hhcGhlYWRpbmdza2lwIGJ5IDEwcHQgXGNoYXBicmVhayB9JQorICBccGFyc2VhcmdcY2hhcGhlYWRpbmd6enoKK30KKworXGRlZlxjaGFwaGVhZGluZ3tcY2hhcGJyZWFrIFxwYXJzZWFyZ1xjaGFwaGVhZGluZ3p6en0KK1xkZWZcY2hhcGhlYWRpbmd6enojMXslCisgIHtcY2hhcGZvbnRzIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwXHRvbGVyYW5jZT01MDAwCisgICAgICAgICAgICAgICAgICAgIFxwYXJpbmRlbnQ9MHB0XHJhZ2dlZHJpZ2h0CisgICAgICAgICAgICAgICAgICAgIFxybSAjMVxoZmlsbH19JQorICBcYmlnc2tpcCBccGFyXHBlbmFsdHkgMjAwXHJlbGF4CisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50Cit9CisKKyUgQGhlYWRpbmcsIEBzdWJoZWFkaW5nLCBAc3Vic3ViaGVhZGluZy4KK1xwYXJzZWFyZ2RlZlxoZWFkaW5ne1xzZWN0aW9uaGVhZGluZ3sjMX17c2VjfXtZb21pdGZyb210b2N9e30KKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR9CitccGFyc2VhcmdkZWZcc3ViaGVhZGluZ3tcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WW9taXRmcm9tdG9jfXt9CisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50fQorXHBhcnNlYXJnZGVmXHN1YnN1YmhlYWRpbmd7XHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzdWJzZWN9e1lvbWl0ZnJvbXRvY317fQorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudH0KKworJSBUaGVzZSBtYWNyb3MgZ2VuZXJhdGUgYSBjaGFwdGVyLCBzZWN0aW9uLCBldGMuIGhlYWRpbmcgb25seQorJSAoaW5jbHVkaW5nIHdoaXRlc3BhY2UsIGxpbmVicmVha2luZywgZXRjLiBhcm91bmQgaXQpLAorJSBnaXZlbiBhbGwgdGhlIGluZm9ybWF0aW9uIGluIGNvbnZlbmllbnQsIHBhcnNlZCBmb3JtLgorCislJSUgQXJncyBhcmUgdGhlIHNraXAgYW5kIHBlbmFsdHkgKHVzdWFsbHkgbmVnYXRpdmUpCitcZGVmXGRvYnJlYWsjMSMye1xwYXJcaWZkaW1cbGFzdHNraXA8IzFccmVtb3ZlbGFzdHNraXBccGVuYWx0eSMyXHZza2lwIzFcZml9CisKKyUlJSBEZWZpbmUgcGxhaW4gY2hhcHRlciBzdGFydHMsIGFuZCBwYWdlIG9uL29mZiBzd2l0Y2hpbmcgZm9yIGl0CislIFBhcmFtZXRlciBjb250cm9sbGluZyBza2lwIGJlZm9yZSBjaGFwdGVyIGhlYWRpbmdzIChpZiBuZWVkZWQpCisKK1xuZXdza2lwXGNoYXBoZWFkaW5nc2tpcAorCitcZGVmXGNoYXBicmVha3tcZG9icmVhayBcY2hhcGhlYWRpbmdza2lwIHstNDAwMH19CitcZGVmXGNoYXBwYWdlcntccGFyXHZmaWxsXHN1cGVyZWplY3R9CitcZGVmXGNoYXBvZGRwYWdle1xjaGFwcGFnZXIgXGlmb2RkXHBhZ2VubyBcZWxzZSBcaGJveCB0byAwcHR7fSBcY2hhcHBhZ2VyXGZpfQorCitcZGVmXHNldGNoYXB0ZXJuZXdwYWdlICMxIHtcY3NuYW1lIENIQVBQQUcjMVxlbmRjc25hbWV9CisKK1xkZWZcQ0hBUFBBR29mZnslCitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCitcZ2xvYmFsXGxldFxwY2hhcHNlcG1hY3JvPVxjaGFwYnJlYWsKK1xnbG9iYWxcbGV0XHBhZ2VhbGlnbm1hY3JvPVxjaGFwcGFnZXJ9CisKK1xkZWZcQ0hBUFBBR29ueyUKK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK1xnbG9iYWxcbGV0XHBjaGFwc2VwbWFjcm89XGNoYXBwYWdlcgorXGdsb2JhbFxsZXRccGFnZWFsaWdubWFjcm89XGNoYXBwYWdlcgorXGdsb2JhbFxkZWZcSEVBRElOR1NvbntcSEVBRElOR1NzaW5nbGV9fQorCitcZGVmXENIQVBQQUdvZGR7JQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBvZGRwYWdlCitcZ2xvYmFsXGxldFxwY2hhcHNlcG1hY3JvPVxjaGFwb2RkcGFnZQorXGdsb2JhbFxsZXRccGFnZWFsaWdubWFjcm89XGNoYXBvZGRwYWdlCitcZ2xvYmFsXGRlZlxIRUFESU5HU29ue1xIRUFESU5HU2RvdWJsZX19CisKK1xDSEFQUEFHb24KKworJSBDaGFwdGVyIG9wZW5pbmcuCislCislICMxIGlzIHRoZSB0ZXh0LCAjMiBpcyB0aGUgc2VjdGlvbiB0eXBlIChZbnVtYmVyZWQsIFlub3RoaW5nLAorJSBZYXBwZW5kaXgsIFlvbWl0ZnJvbXRvYyksICMzIHRoZSBjaGFwdGVyIG51bWJlci4KKyUKKyUgVG8gdGVzdCBhZ2FpbnN0IG91ciBhcmd1bWVudC4KK1xkZWZcWW5vdGhpbmdrZXl3b3Jke1lub3RoaW5nfQorXGRlZlxZb21pdGZyb210b2NrZXl3b3Jke1lvbWl0ZnJvbXRvY30KK1xkZWZcWWFwcGVuZGl4a2V5d29yZHtZYXBwZW5kaXh9CislCitcZGVmXGNoYXBtYWNybyMxIzIjM3slCisgIFxwY2hhcHNlcG1hY3JvCisgIHslCisgICAgXGNoYXBmb250cyBccm0KKyAgICAlCisgICAgJSBIYXZlIHRvIGRlZmluZSBcdGhpc3NlY3Rpb24gYmVmb3JlIGNhbGxpbmcgXGRvbm9kZXJlZiwgYmVjYXVzZSB0aGUKKyAgICAlIHhyZWYgY29kZSBldmVudHVhbGx5IHVzZXMgaXQuICBPbiB0aGUgb3RoZXIgaGFuZCwgaXQgaGFzIHRvIGJlIGNhbGxlZAorICAgICUgYWZ0ZXIgXHBjaGFwc2VwbWFjcm8sIG9yIHRoZSBoZWFkbGluZSB3aWxsIGNoYW5nZSB0b28gc29vbi4KKyAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgXGdkZWZcdGhpc2NoYXB0ZXJuYW1leyMxfSUKKyAgICAlCisgICAgJSBPbmx5IGluc2VydCB0aGUgc2VwYXJhdGluZyBzcGFjZSBpZiB3ZSBoYXZlIGEgY2hhcHRlci9hcHBlbmRpeAorICAgICUgbnVtYmVyLCBhbmQgZG9uJ3QgcHJpbnQgdGhlIHVubnVtYmVyZWQgYGBudW1iZXInJy4KKyAgICBcZGVmXHRlbXB0eXBleyMyfSUKKyAgICBcaWZ4XHRlbXB0eXBlXFlub3RoaW5na2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHt9JQorICAgICAgXGRlZlx0b2N0eXBle3VubmNoYXB9JQorICAgICAgXGdkZWZcdGhpc2NoYXB0ZXJ7IzF9JQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZb21pdGZyb210b2NrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e30lIGNvbnRlbnRzIGxpa2UgdW5udW1iZXJlZCwgYnV0IG5vIHRvYyBlbnRyeQorICAgICAgXGRlZlx0b2N0eXBle29taXR9JQorICAgICAgXGdkZWZcdGhpc2NoYXB0ZXJ7fSUKKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWWFwcGVuZGl4a2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHtccHV0d29yZEFwcGVuZGl4e30gIzNcZW5zcGFjZX0lCisgICAgICBcZGVmXHRvY3R5cGV7YXBwfSUKKyAgICAgICUgV2UgZG9uJ3Qgc3Vic3RpdHV0ZSB0aGUgYWN0dWFsIGNoYXB0ZXIgbmFtZSBpbnRvIFx0aGlzY2hhcHRlcgorICAgICAgJSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgaXRzIG1hY3JvcyBldmFsdWF0ZWQgbm93LiAgQW5kIHdlIGRvbid0CisgICAgICAlIHVzZSBcdGhpc3NlY3Rpb24gYmVjYXVzZSB0aGF0IGNoYW5nZXMgd2l0aCBlYWNoIHNlY3Rpb24uCisgICAgICAlCisgICAgICBceGRlZlx0aGlzY2hhcHRlcntccHV0d29yZEFwcGVuZGl4e30gXGFwcGVuZGl4bGV0dGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgXG5vZXhwYW5kXHRoaXNjaGFwdGVybmFtZX0lCisgICAgXGVsc2UKKyAgICAgIFxzZXRib3gwID0gXGhib3h7IzNcZW5zcGFjZX0lCisgICAgICBcZGVmXHRvY3R5cGV7bnVtY2hhcH0lCisgICAgICBceGRlZlx0aGlzY2hhcHRlcntccHV0d29yZENoYXB0ZXJ7fSBcdGhlXGNoYXBubzoKKyAgICAgICAgICAgICAgICAgICAgICAgIFxub2V4cGFuZFx0aGlzY2hhcHRlcm5hbWV9JQorICAgIFxmaVxmaVxmaQorICAgICUKKyAgICAlIFdyaXRlIHRoZSB0b2MgZW50cnkgZm9yIHRoaXMgY2hhcHRlci4gIE11c3QgY29tZSBiZWZvcmUgdGhlCisgICAgJSBcZG9ub2RlcmVmLCBiZWNhdXNlIHdlIGluY2x1ZGUgdGhlIGN1cnJlbnQgbm9kZSBuYW1lIGluIHRoZSB0b2MKKyAgICAlIGVudHJ5LCBhbmQgXGRvbm9kZXJlZiByZXNldHMgaXQgdG8gZW1wdHkuCisgICAgXHdyaXRldG9jZW50cnl7XHRvY3R5cGV9eyMxfXsjM30lCisgICAgJQorICAgICUgRm9yIHBkZnRleCwgd2UgaGF2ZSB0byB3cml0ZSBvdXQgdGhlIG5vZGUgZGVmaW5pdGlvbiAoYWthLCBtYWtlCisgICAgJSB0aGUgcGRmZGVzdCkgYWZ0ZXIgYW55IHBhZ2UgYnJlYWssIGJ1dCBiZWZvcmUgdGhlIGFjdHVhbCB0ZXh0IGhhcworICAgICUgYmVlbiB0eXBlc2V0LiAgSWYgdGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgcGRmIG91dGxpbmUgaXMgYWZ0ZXIgdGhlCisgICAgJSB0ZXh0LCB0aGVuIGp1bXBpbmcgZnJvbSB0aGUgb3V0bGluZSBtYXkgd2luZCB1cCB3aXRoIHRoZSB0ZXh0IG5vdAorICAgICUgYmVpbmcgdmlzaWJsZSwgZm9yIGluc3RhbmNlIHVuZGVyIGhpZ2ggbWFnbmlmaWNhdGlvbi4KKyAgICBcZG9ub2RlcmVmeyMyfSUKKyAgICAlCisgICAgJSBUeXBlc2V0IHRoZSBhY3R1YWwgaGVhZGluZy4KKyAgICBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMCBcdG9sZXJhbmNlPTUwMDAgXHBhcmluZGVudD0wcHQgXHJhZ2dlZHJpZ2h0CisgICAgICAgICAgXGhhbmdpbmRlbnQ9XHdkMCBcY2VudGVycGFyYW1ldGVyc21heWJlCisgICAgICAgICAgXHVuaGJveDAgIzFccGFyfSUKKyAgfSUKKyAgXG5vYnJlYWtcYmlnc2tpcCAlIG5vIHBhZ2UgYnJlYWsgYWZ0ZXIgYSBjaGFwdGVyIHRpdGxlCisgIFxub2JyZWFrCit9CisKKyUgQGNlbnRlcmNoYXAgLS0gY2VudGVyZWQgYW5kIHVubnVtYmVyZWQuCitcbGV0XGNlbnRlcnBhcmFtZXRlcnNtYXliZSA9IFxyZWxheAorXGRlZlxjZW50ZXJwYXJhbWV0ZXJzeyUKKyAgXGFkdmFuY2VccmlnaHRza2lwIGJ5IDNccmlnaHRza2lwCisgIFxsZWZ0c2tpcCA9IFxyaWdodHNraXAKKyAgXHBhcmZpbGxza2lwID0gMHB0Cit9CisKKworJSBJIGRvbid0IHRoaW5rIHRoaXMgY2hhcHRlciBzdHlsZSBpcyBzdXBwb3J0ZWQgYW55IG1vcmUsIHNvIEknbSBub3QKKyUgdXBkYXRpbmcgaXQgd2l0aCB0aGUgbmV3IG5vZGVyZWYgc3R1ZmYuICBXZSdsbCBzZWUuICAtLWthcmwsIDExYXVnMDMuCislCitcZGVmXHNldGNoYXB0ZXJzdHlsZSAjMSB7XGNzbmFtZSBDSEFQRiMxXGVuZGNzbmFtZX0KKyUKK1xkZWZcdW5uY2hmb3BlbiAjMXslCitcY2hhcG9kZHBhZ2Uge1xjaGFwZm9udHMgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDBcdG9sZXJhbmNlPTUwMDAKKyAgICAgICAgICAgICAgICAgICAgICAgXHBhcmluZGVudD0wcHRccmFnZ2VkcmlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgXHJtICMxXGhmaWxsfX1cYmlnc2tpcCBccGFyXG5vYnJlYWsKK30KK1xkZWZcY2hmb3BlbiAjMSMye1xjaGFwb2RkcGFnZSB7XGNoYXBmb250cworXHZib3ggdG8gM2lue1x2ZmlsIFxoYm94IHRvXGhzaXple1xoZmlsICMyfSBcaGJveCB0b1xoc2l6ZXtcaGZpbCAjMX0gXHZmaWx9fSUKK1xwYXJccGVuYWx0eSA1MDAwICUKK30KK1xkZWZcY2VudGVyY2hmb3BlbiAjMXslCitcY2hhcG9kZHBhZ2Uge1xjaGFwZm9udHMgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDBcdG9sZXJhbmNlPTUwMDAKKyAgICAgICAgICAgICAgICAgICAgICAgXHBhcmluZGVudD0wcHQKKyAgICAgICAgICAgICAgICAgICAgICAgXGhmaWxsIHtccm0gIzF9XGhmaWxsfX1cYmlnc2tpcCBccGFyXG5vYnJlYWsKK30KK1xkZWZcQ0hBUEZvcGVueyUKKyAgXGdsb2JhbFxsZXRcY2hhcG1hY3JvPVxjaGZvcGVuCisgIFxnbG9iYWxcbGV0XGNlbnRlcmNoYXBtYWNybz1cY2VudGVyY2hmb3Blbn0KKworCislIFNlY3Rpb24gdGl0bGVzLiAgVGhlc2UgbWFjcm9zIGNvbWJpbmUgdGhlIHNlY3Rpb24gbnVtYmVyIHBhcnRzIGFuZAorJSBjYWxsIHRoZSBnZW5lcmljIFxzZWN0aW9uaGVhZGluZyB0byBkbyB0aGUgcHJpbnRpbmcuCislCitcbmV3c2tpcFxzZWNoZWFkaW5nc2tpcAorXGRlZlxzZWNoZWFkaW5nYnJlYWt7XGRvYnJlYWsgXHNlY2hlYWRpbmdza2lwey0xMDAwfX0KKworJSBTdWJzZWN0aW9uIHRpdGxlcy4KK1xuZXdza2lwXHN1YnNlY2hlYWRpbmdza2lwCitcZGVmXHN1YnNlY2hlYWRpbmdicmVha3tcZG9icmVhayBcc3Vic2VjaGVhZGluZ3NraXB7LTUwMH19CisKKyUgU3Vic3Vic2VjdGlvbiB0aXRsZXMuCitcZGVmXHN1YnN1YnNlY2hlYWRpbmdza2lwe1xzdWJzZWNoZWFkaW5nc2tpcH0KK1xkZWZcc3Vic3Vic2VjaGVhZGluZ2JyZWFre1xzdWJzZWNoZWFkaW5nYnJlYWt9CisKKworJSBQcmludCBhbnkgc2l6ZSwgYW55IHR5cGUsIHNlY3Rpb24gdGl0bGUuCislCislICMxIGlzIHRoZSB0ZXh0LCAjMiBpcyB0aGUgc2VjdGlvbiBsZXZlbCAoc2VjL3N1YnNlYy9zdWJzdWJzZWMpLCAjMyBpcworJSB0aGUgc2VjdGlvbiB0eXBlIGZvciB4cmVmcyAoWW51bWJlcmVkLCBZbm90aGluZywgWWFwcGVuZGl4KSwgIzQgaXMgdGhlCislIHNlY3Rpb24gbnVtYmVyLgorJQorXGRlZlxzZWN0aW9uaGVhZGluZyMxIzIjMyM0eyUKKyAgeyUKKyAgICAlIFN3aXRjaCB0byB0aGUgcmlnaHQgc2V0IG9mIGZvbnRzLgorICAgIFxjc25hbWUgIzJmb250c1xlbmRjc25hbWUgXHJtCisgICAgJQorICAgICUgSW5zZXJ0IHNwYWNlIGFib3ZlIHRoZSBoZWFkaW5nLgorICAgIFxjc25hbWUgIzJoZWFkaW5nYnJlYWtcZW5kY3NuYW1lCisgICAgJQorICAgICUgT25seSBpbnNlcnQgdGhlIHNwYWNlIGFmdGVyIHRoZSBudW1iZXIgaWYgd2UgaGF2ZSBhIHNlY3Rpb24gbnVtYmVyLgorICAgIFxkZWZcc2VjdGlvbmxldmVseyMyfSUKKyAgICBcZGVmXHRlbXB0eXBleyMzfSUKKyAgICAlCisgICAgXGlmeFx0ZW1wdHlwZVxZbm90aGluZ2tleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7fSUKKyAgICAgIFxkZWZcdG9jdHlwZXt1bm59JQorICAgICAgXGdkZWZcdGhpc3NlY3Rpb257IzF9JQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZb21pdGZyb210b2NrZXl3b3JkCisgICAgICAlIGZvciBAaGVhZGluZ3MgLS0gbm8gc2VjdGlvbiBudW1iZXIsIGRvbid0IGluY2x1ZGUgaW4gdG9jLAorICAgICAgJSBhbmQgZG9uJ3QgcmVkZWZpbmUgXHRoaXNzZWN0aW9uLgorICAgICAgXHNldGJveDAgPSBcaGJveHt9JQorICAgICAgXGRlZlx0b2N0eXBle29taXR9JQorICAgICAgXGxldFxzZWN0aW9ubGV2ZWw9XGVtcHR5CisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlhcHBlbmRpeGtleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7IzRcZW5zcGFjZX0lCisgICAgICBcZGVmXHRvY3R5cGV7YXBwfSUKKyAgICAgIFxnZGVmXHRoaXNzZWN0aW9ueyMxfSUKKyAgICBcZWxzZQorICAgICAgXHNldGJveDAgPSBcaGJveHsjNFxlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXtudW19JQorICAgICAgXGdkZWZcdGhpc3NlY3Rpb257IzF9JQorICAgIFxmaVxmaVxmaQorICAgICUKKyAgICAlIFdyaXRlIHRoZSB0b2MgZW50cnkgKGJlZm9yZSBcZG9ub2RlcmVmKS4gIFNlZSBjb21tZW50cyBpbiBcY2hhcG1hY3JvLgorICAgIFx3cml0ZXRvY2VudHJ5e1x0b2N0eXBlXHNlY3Rpb25sZXZlbH17IzF9eyM0fSUKKyAgICAlCisgICAgJSBXcml0ZSB0aGUgbm9kZSByZWZlcmVuY2UgKD0gcGRmIGRlc3RpbmF0aW9uIGZvciBwZGZ0ZXgpLgorICAgICUgQWdhaW4sIHNlZSBjb21tZW50cyBpbiBcY2hhcG1hY3JvLgorICAgIFxkb25vZGVyZWZ7IzN9JQorICAgICUKKyAgICAlIEludGVybGluZSBnbHVlIHdpbGwgYmUgaW5zZXJ0ZWQgd2hlbiB0aGUgdmJveCBpcyBjb21wbGV0ZWQuCisgICAgJSBUaGF0IGdsdWUgd2lsbCBiZSBhIHZhbGlkIGJyZWFrcG9pbnQgZm9yIHRoZSBwYWdlLCBzaW5jZSBpdCdsbCBiZQorICAgICUgcHJlY2VkZWQgYnkgYSB3aGF0c2l0ICh1c3VhbGx5IGZyb20gdGhlIFxkb25vZGVyZWYsIG9yIGZyb20gdGhlCisgICAgJSBcd3JpdGV0b2NlbnRyeSBpZiB0aGVyZSB3YXMgbm8gbm9kZSkuICBXZSBkb24ndCB3YW50IHRvIGFsbG93IHRoYXQKKyAgICAlIGJyZWFrLCBzaW5jZSB0aGVuIHRoZSB3aGF0c2l0cyBjb3VsZCBlbmQgdXAgb24gcGFnZSBuIHdoaWxlIHRoZQorICAgICUgc2VjdGlvbiBpcyBvbiBwYWdlIG4rMSwgdGh1cyB0b2MvZXRjLiBhcmUgd3JvbmcuICBEZWJpYW4gYnVnIDI3NjAwMC4KKyAgICBcbm9icmVhaworICAgICUKKyAgICAlIE91dHB1dCB0aGUgYWN0dWFsIHNlY3Rpb24gaGVhZGluZy4KKyAgICBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMCBcdG9sZXJhbmNlPTUwMDAgXHBhcmluZGVudD0wcHQgXHJhZ2dlZHJpZ2h0CisgICAgICAgICAgXGhhbmdpbmRlbnQ9XHdkMCAgJSB6ZXJvIGlmIG5vIHNlY3Rpb24gbnVtYmVyCisgICAgICAgICAgXHVuaGJveDAgIzF9JQorICB9JQorICAlIEFkZCBleHRyYSBzcGFjZSBhZnRlciB0aGUgaGVhZGluZyAtLSBoYWxmIG9mIHdoYXRldmVyIGNhbWUgYWJvdmUgaXQuCisgICUgRG9uJ3QgYWxsb3cgc3RyZXRjaCwgdGhvdWdoLgorICBca2VybiAuNSBcY3NuYW1lICMyaGVhZGluZ3NraXBcZW5kY3NuYW1lCisgICUKKyAgJSBEbyBub3QgbGV0IHRoZSBrZXJuIGJlIGEgcG90ZW50aWFsIGJyZWFrcG9pbnQsIGFzIGl0IHdvdWxkIGJlIGlmIGl0CisgICUgd2FzIGZvbGxvd2VkIGJ5IGdsdWUuCisgIFxub2JyZWFrCisgICUKKyAgJSBXZSdsbCBhbG1vc3QgY2VydGFpbmx5IHN0YXJ0IGEgcGFyYWdyYXBoIG5leHQsIHNvIGRvbid0IGxldCB0aGF0CisgICUgZ2x1ZSBhY2N1bXVsYXRlLiAgKE5vdCBhIGJyZWFrcG9pbnQgYmVjYXVzZSBpdCdzIHByZWNlZGVkIGJ5IGEKKyAgJSBkaXNjYXJkYWJsZSBpdGVtLikKKyAgXHZza2lwLVxwYXJza2lwCisgICUgCisgICUgVGhpcyBpcyBwdXJlbHkgc28gdGhlIGxhc3QgaXRlbSBvbiB0aGUgbGlzdCBpcyBhIGtub3duIFxwZW5hbHR5ID4KKyAgJSAxMDAwMC4gIFRoaXMgaXMgc28gXHN0YXJ0ZGVmdW4gY2FuIGF2b2lkIGFsbG93aW5nIGJyZWFrcG9pbnRzIGFmdGVyCisgICUgc2VjdGlvbiBoZWFkaW5ncy4gIE90aGVyd2lzZSwgaXQgd291bGQgaW5zZXJ0IGEgdmFsaWQgYnJlYWtwb2ludCBiZXR3ZWVuOgorICAlIAorICAlICAgQHNlY3Rpb24gc2VjLXdoYXRldmVyCisgICUgICBAZGVmZm4gZGVmLXdoYXRldmVyCisgIFxwZW5hbHR5IDEwMDAxCit9CisKKworXG1lc3NhZ2V7dG9jLH0KKyUgVGFibGUgb2YgY29udGVudHMuCitcbmV3d3JpdGVcdG9jZmlsZQorCislIFdyaXRlIGFuIGVudHJ5IHRvIHRoZSB0b2MgZmlsZSwgb3BlbmluZyBpdCBpZiBuZWNlc3NhcnkuCislIENhbGxlZCBmcm9tIEBjaGFwdGVyLCBldGMuCislCislIEV4YW1wbGUgdXNhZ2U6IFx3cml0ZXRvY2VudHJ5e3NlY317U2VjdGlvbiBOYW1lfXtcdGhlXGNoYXBuby5cdGhlXHNlY25vfQorJSBXZSBhcHBlbmQgdGhlIGN1cnJlbnQgbm9kZSBuYW1lIChpZiBhbnkpIGFuZCBwYWdlIG51bWJlciBhcyBhZGRpdGlvbmFsCislIGFyZ3VtZW50cyBmb3IgdGhlIFx7Y2hhcCxzZWMsLi4ufWVudHJ5IG1hY3JvcyB3aGljaCB3aWxsIGV2ZW50dWFsbHkKKyUgcmVhZCB0aGlzLiAgVGhlIG5vZGUgbmFtZSBpcyB1c2VkIGluIHRoZSBwZGYgb3V0bGluZXMgYXMgdGhlCislIGRlc3RpbmF0aW9uIHRvIGp1bXAgdG8uCislCislIFdlIG9wZW4gdGhlIC50b2MgZmlsZSBmb3Igd3JpdGluZyBoZXJlIGluc3RlYWQgb2YgYXQgQHNldGZpbGVuYW1lIChvcgorJSBhbnkgb3RoZXIgZml4ZWQgdGltZSkgc28gdGhhdCBAY29udGVudHMgY2FuIGJlIGFueXdoZXJlIGluIHRoZSBkb2N1bWVudC4KKyUgQnV0IGlmICMxIGlzIGBvbWl0JywgdGhlbiB3ZSBkb24ndCBkbyBhbnl0aGluZy4gIFRoaXMgaXMgdXNlZCBmb3IgdGhlCislIHRhYmxlIG9mIGNvbnRlbnRzIGNoYXB0ZXIgb3BlbmluZ3MgdGhlbXNlbHZlcy4KKyUKK1xuZXdpZlxpZnRvY2ZpbGVvcGVuZWQKK1xkZWZcb21pdGtleXdvcmR7b21pdH0lCislCitcZGVmXHdyaXRldG9jZW50cnkjMSMyIzN7JQorICBcZWRlZlx3cml0ZXRvY3R5cGV7IzF9JQorICBcaWZ4XHdyaXRldG9jdHlwZVxvbWl0a2V5d29yZCBcZWxzZQorICAgIFxpZnRvY2ZpbGVvcGVuZWRcZWxzZQorICAgICAgXGltbWVkaWF0ZVxvcGVub3V0XHRvY2ZpbGUgPSBcam9ibmFtZS50b2MKKyAgICAgIFxnbG9iYWxcdG9jZmlsZW9wZW5lZHRydWUKKyAgICBcZmkKKyAgICAlCisgICAgXGlmbGlua3MKKyAgICAgIHtcYXRkdW1taWVzCisgICAgICAgXGVkZWZcdGVtcHslCisgICAgICAgICBcd3JpdGVcdG9jZmlsZXtAIzFlbnRyeXsjMn17IzN9e1xsYXN0bm9kZX17XG5vZXhwYW5kXGZvbGlvfX19JQorICAgICAgIFx0ZW1wCisgICAgICB9JQorICAgIFxmaQorICBcZmkKKyAgJQorICAlIFRlbGwgXHNoaXBvdXQgdG8gY3JlYXRlIGEgcGRmIGRlc3RpbmF0aW9uIG9uIGVhY2ggcGFnZSwgaWYgd2UncmUKKyAgJSB3cml0aW5nIHBkZi4gIFRoZXNlIGFyZSB1c2VkIGluIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIFdlIGNhbid0CisgICUganVzdCB3cml0ZSBvbmUgb24gZXZlcnkgcGFnZSBiZWNhdXNlIHRoZSB0aXRsZSBwYWdlcyBhcmUgbnVtYmVyZWQKKyAgJSAxIGFuZCAyICh0aGUgcGFnZSBudW1iZXJzIGFyZW4ndCBwcmludGVkKSwgYW5kIHNvIGFyZSB0aGUgZmlyc3QKKyAgJSB0d28gcGFnZXMgb2YgdGhlIGRvY3VtZW50LiAgVGh1cywgd2UnZCBoYXZlIHR3byBkZXN0aW5hdGlvbnMgbmFtZWQKKyAgJSBgMScsIGFuZCB0d28gbmFtZWQgYDInLgorICBcaWZwZGYgXGdsb2JhbFxwZGZtYWtlcGFnZWRlc3R0cnVlIFxmaQorfQorCisKKyUgVGhlc2UgY2hhcmFjdGVycyBkbyBub3QgcHJpbnQgcHJvcGVybHkgaW4gdGhlIENvbXB1dGVyIE1vZGVybiByb21hbgorJSBmb250cywgc28gd2UgbXVzdCB0YWtlIHNwZWNpYWwgY2FyZS4gIFRoaXMgaXMgbW9yZSBvciBsZXNzIHJlZHVuZGFudAorJSB3aXRoIHRoZSBUZXhpbmZvIGlucHV0IGZvcm1hdCBzZXR1cCBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KKyUgCitcZGVmXGFjdGl2ZWNhdGNvZGVzeyUKKyAgXGNhdGNvZGVgXCI9XGFjdGl2ZQorICBcY2F0Y29kZWBcJD1cYWN0aXZlCisgIFxjYXRjb2RlYFw8PVxhY3RpdmUKKyAgXGNhdGNvZGVgXD49XGFjdGl2ZQorICBcY2F0Y29kZWBcXD1cYWN0aXZlCisgIFxjYXRjb2RlYFxePVxhY3RpdmUKKyAgXGNhdGNvZGVgXF89XGFjdGl2ZQorICBcY2F0Y29kZWBcfD1cYWN0aXZlCisgIFxjYXRjb2RlYFx+PVxhY3RpdmUKK30KKworCislIFJlYWQgdGhlIHRvYyBmaWxlLCB3aGljaCBpcyBlc3NlbnRpYWxseSBUZXhpbmZvIGlucHV0LgorXGRlZlxyZWFkdG9jZmlsZXslCisgIFxzZXR1cGRhdGFmaWxlCisgIFxhY3RpdmVjYXRjb2RlcworICBcaW5wdXQgXGpvYm5hbWUudG9jCit9CisKK1xuZXdza2lwXGNvbnRlbnRzcmlnaHRtYXJnaW4gXGNvbnRlbnRzcmlnaHRtYXJnaW49MWluCitcbmV3Y291bnRcc2F2ZXBhZ2VubworXG5ld2NvdW50XGxhc3RuZWdhdGl2ZXBhZ2VubyBcbGFzdG5lZ2F0aXZlcGFnZW5vID0gLTEKKworJSBQcmVwYXJlIHRvIHJlYWQgd2hhdCB3ZSd2ZSB3cml0dGVuIHRvIFx0b2NmaWxlLgorJQorXGRlZlxzdGFydGNvbnRlbnRzIzF7JQorICAlIElmIEBzZXRjaGFwdGVybmV3cGFnZSBvbiwgYW5kIEBoZWFkaW5ncyBkb3VibGUsIHRoZSBjb250ZW50cyBzaG91bGQKKyAgJSBzdGFydCBvbiBhbiBvZGQgcGFnZSwgdW5saWtlIGNoYXB0ZXJzLiAgVGh1cywgd2UgbWFpbnRhaW4KKyAgJSBcY29udGVudHNhbGlnbm1hY3JvIGluIHBhcmFsbGVsIHdpdGggXHBhZ2VhbGlnbm1hY3JvLgorICAlIEZyb206IFRvcmJqb3JuIEdyYW5sdW5kIDx0ZWdlQG1hdGVtYXRpay5zdS5zZT4KKyAgXGNvbnRlbnRzYWxpZ25tYWNybworICBcaW1tZWRpYXRlXGNsb3Nlb3V0XHRvY2ZpbGUKKyAgJQorICAlIERvbid0IG5lZWQgdG8gcHV0IGBDb250ZW50cycgb3IgYFNob3J0IENvbnRlbnRzJyBpbiB0aGUgaGVhZGxpbmUuCisgICUgSXQgaXMgYWJ1bmRhbnRseSBjbGVhciB3aGF0IHRoZXkgYXJlLgorICBcZGVmXHRoaXNjaGFwdGVye30lCisgIFxjaGFwbWFjcm97IzF9e1lvbWl0ZnJvbXRvY317fSUKKyAgJQorICBcc2F2ZXBhZ2VubyA9IFxwYWdlbm8KKyAgXGJlZ2luZ3JvdXAgICAgICAgICAgICAgICAgICAlIFNldCB1cCB0byBoYW5kbGUgY29udGVudHMgZmlsZXMgcHJvcGVybHkuCisgICAgXHJhZ2dlZGJvdHRvbSAgICAgICAgICAgICAgJSBXb3JyeSBtb3JlIGFib3V0IGJyZWFrcG9pbnRzIHRoYW4gdGhlIGJvdHRvbS4KKyAgICBcYWR2YW5jZVxoc2l6ZSBieSAtXGNvbnRlbnRzcmlnaHRtYXJnaW4gJSBEb24ndCB1c2UgdGhlIGZ1bGwgbGluZSBsZW5ndGguCisgICAgJQorICAgICUgUm9tYW4gbnVtZXJhbHMgZm9yIHBhZ2UgbnVtYmVycy4KKyAgICBcaWZudW0gXHBhZ2Vubz4wIFxnbG9iYWxccGFnZW5vID0gXGxhc3RuZWdhdGl2ZXBhZ2VubyBcZmkKK30KKworCislIE5vcm1hbCAobG9uZykgdG9jLgorXGRlZlxjb250ZW50c3slCisgIFxzdGFydGNvbnRlbnRze1xwdXR3b3JkVE9DfSUKKyAgICBcb3BlbmluIDEgXGpvYm5hbWUudG9jCisgICAgXGlmZW9mIDEgXGVsc2UKKyAgICAgIFxyZWFkdG9jZmlsZQorICAgIFxmaQorICAgIFx2ZmlsbCBcZWplY3QKKyAgICBcY29udGVudHNhbGlnbm1hY3JvICUgaW4gY2FzZSBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb2RkIGlzIGluIGVmZmVjdAorICAgIFxpZmVvZiAxIFxlbHNlCisgICAgICBccGRmbWFrZW91dGxpbmVzCisgICAgXGZpCisgICAgXGNsb3NlaW4gMQorICBcZW5kZ3JvdXAKKyAgXGxhc3RuZWdhdGl2ZXBhZ2VubyA9IFxwYWdlbm8KKyAgXGdsb2JhbFxwYWdlbm8gPSBcc2F2ZXBhZ2VubworfQorCislIEFuZCBqdXN0IHRoZSBjaGFwdGVycy4KK1xkZWZcc3VtbWFyeWNvbnRlbnRzeyUKKyAgXHN0YXJ0Y29udGVudHN7XHB1dHdvcmRTaG9ydFRPQ30lCisgICAgJQorICAgIFxsZXRcbnVtY2hhcGVudHJ5ID0gXHNob3J0Y2hhcGVudHJ5CisgICAgXGxldFxhcHBlbnRyeSA9IFxzaG9ydGNoYXBlbnRyeQorICAgIFxsZXRcdW5uY2hhcGVudHJ5ID0gXHNob3J0dW5uY2hhcGVudHJ5CisgICAgJSBXZSB3YW50IGEgdHJ1ZSByb21hbiBoZXJlIGZvciB0aGUgcGFnZSBudW1iZXJzLgorICAgIFxzZWNmb250cworICAgIFxsZXRccm09XHNob3J0Y29udHJtIFxsZXRcYmY9XHNob3J0Y29udGJmCisgICAgXGxldFxzbD1cc2hvcnRjb250c2wgXGxldFx0dD1cc2hvcnRjb250dHQKKyAgICBccm0KKyAgICBcaHlwaGVucGVuYWx0eSA9IDEwMDAwCisgICAgXGFkdmFuY2VcYmFzZWxpbmVza2lwIGJ5IDFwdCAlIE9wZW4gaXQgdXAgYSBsaXR0bGUuCisgICAgXGRlZlxudW1zZWNlbnRyeSMjMSMjMiMjMyMjNHt9CisgICAgXGxldFxhcHBzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcdW5uc2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XG51bXN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFxhcHBzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcdW5uc3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XG51bXN1YnN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFxhcHBzdWJzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcdW5uc3Vic3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcb3BlbmluIDEgXGpvYm5hbWUudG9jCisgICAgXGlmZW9mIDEgXGVsc2UKKyAgICAgIFxyZWFkdG9jZmlsZQorICAgIFxmaQorICAgIFxjbG9zZWluIDEKKyAgICBcdmZpbGwgXGVqZWN0CisgICAgXGNvbnRlbnRzYWxpZ25tYWNybyAlIGluIGNhc2UgQHNldGNoYXB0ZXJuZXdwYWdlIG9kZCBpcyBpbiBlZmZlY3QKKyAgXGVuZGdyb3VwCisgIFxsYXN0bmVnYXRpdmVwYWdlbm8gPSBccGFnZW5vCisgIFxnbG9iYWxccGFnZW5vID0gXHNhdmVwYWdlbm8KK30KK1xsZXRcc2hvcnRjb250ZW50cyA9IFxzdW1tYXJ5Y29udGVudHMKKworJSBUeXBlc2V0IHRoZSBsYWJlbCBmb3IgYSBjaGFwdGVyIG9yIGFwcGVuZGl4IGZvciB0aGUgc2hvcnQgY29udGVudHMuCislIFRoZSBhcmcgaXMsIGUuZy4sIGBBJyBmb3IgYW4gYXBwZW5kaXgsIG9yIGAzJyBmb3IgYSBjaGFwdGVyLgorJQorXGRlZlxzaG9ydGNoYXBsYWJlbCMxeyUKKyAgJSBUaGlzIHNwYWNlIHNob3VsZCBiZSBlbm91Z2gsIHNpbmNlIGEgc2luZ2xlIG51bWJlciBpcyAuNWVtLCBhbmQgdGhlCisgICUgd2lkZXN0IGxldHRlciAoTSkgaXMgMWVtLCBhdCBsZWFzdCBpbiB0aGUgQ29tcHV0ZXIgTW9kZXJuIGZvbnRzLgorICAlIEJ1dCB1c2UgXGhzcyBqdXN0IGluIGNhc2UuCisgICUgKFRoaXMgc3BhY2UgZG9lc24ndCBpbmNsdWRlIHRoZSBleHRyYSBzcGFjZSB0aGF0IGdldHMgYWRkZWQgYWZ0ZXIKKyAgJSB0aGUgbGFiZWw7IHRoYXQgZ2V0cyBwdXQgaW4gYnkgXHNob3J0Y2hhcGVudHJ5IGFib3ZlLikKKyAgJQorICAlIFdlJ2QgbGlrZSB0byByaWdodC1qdXN0aWZ5IGNoYXB0ZXIgbnVtYmVycywgYnV0IHRoYXQgbG9va3Mgc3RyYW5nZQorICAlIHdpdGggYXBwZW5kaXggbGV0dGVycy4gIEFuZCByaWdodC1qdXN0aWZ5aW5nIG51bWJlcnMgYW5kCisgICUgbGVmdC1qdXN0aWZ5aW5nIGxldHRlcnMgbG9va3Mgc3RyYW5nZSB3aGVuIHRoZXJlIGlzIGxlc3MgdGhhbiAxMAorICAlIGNoYXB0ZXJzLiAgSGF2ZSB0byByZWFkIHRoZSB3aG9sZSB0b2Mgb25jZSB0byBrbm93IGhvdyBtYW55IGNoYXB0ZXJzCisgICUgdGhlcmUgYXJlIGJlZm9yZSBkZWNpZGluZyAuLi4KKyAgXGhib3ggdG8gMWVteyMxXGhzc30lCit9CisKKyUgVGhlc2UgbWFjcm9zIGdlbmVyYXRlIGluZGl2aWR1YWwgZW50cmllcyBpbiB0aGUgdGFibGUgb2YgY29udGVudHMuCislIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2hhcHRlciBvciBzZWN0aW9uIG5hbWUuCislIFRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBwYWdlIG51bWJlci4KKyUgVGhlIGFyZ3VtZW50cyBpbiBiZXR3ZWVuIGFyZSB0aGUgY2hhcHRlciBudW1iZXIsIHNlY3Rpb24gbnVtYmVyLCAuLi4KKworJSBDaGFwdGVycywgaW4gdGhlIG1haW4gY29udGVudHMuCitcZGVmXG51bWNoYXBlbnRyeSMxIzIjMyM0e1xkb2NoYXBlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KKyUKKyUgQ2hhcHRlcnMsIGluIHRoZSBzaG9ydCB0b2MuCislIFNlZSBjb21tZW50cyBpbiBcZG9jaGFwZW50cnkgcmUgdmJveCBhbmQgcmVsYXRlZCBzZXR0aW5ncy4KK1xkZWZcc2hvcnRjaGFwZW50cnkjMSMyIzMjNHslCisgIFx0b2NlbnRyeXtcc2hvcnRjaGFwbGFiZWx7IzJ9XGxhYmVsc3BhY2UgIzF9e1xkb3Nob3J0cGFnZW5vXGJncm91cCM0XGVncm91cH0lCit9CisKKyUgQXBwZW5kaWNlcywgaW4gdGhlIG1haW4gY29udGVudHMuCislIE5lZWQgdGhlIHdvcmQgQXBwZW5kaXgsIGFuZCBhIGZpeGVkLXNpemUgYm94LgorJQorXGRlZlxhcHBlbmRpeGJveCMxeyUKKyAgJSBXZSB1c2UgTSBzaW5jZSBpdCdzIHByb2JhYmx5IHRoZSB3aWRlc3QgbGV0dGVyLgorICBcc2V0Ym94MCA9IFxoYm94e1xwdXR3b3JkQXBwZW5kaXh7fSBNfSUKKyAgXGhib3ggdG8gXHdkMHtccHV0d29yZEFwcGVuZGl4e30gIzFcaHNzfX0KKyUKK1xkZWZcYXBwZW50cnkjMSMyIzMjNHtcZG9jaGFwZW50cnl7XGFwcGVuZGl4Ym94eyMyfVxsYWJlbHNwYWNlIzF9eyM0fX0KKworJSBVbm51bWJlcmVkIGNoYXB0ZXJzLgorXGRlZlx1bm5jaGFwZW50cnkjMSMyIzMjNHtcZG9jaGFwZW50cnl7IzF9eyM0fX0KK1xkZWZcc2hvcnR1bm5jaGFwZW50cnkjMSMyIzMjNHtcdG9jZW50cnl7IzF9e1xkb3Nob3J0cGFnZW5vXGJncm91cCM0XGVncm91cH19CisKKyUgU2VjdGlvbnMuCitcZGVmXG51bXNlY2VudHJ5IzEjMiMzIzR7XGRvc2VjZW50cnl7IzJcbGFiZWxzcGFjZSMxfXsjNH19CitcbGV0XGFwcHNlY2VudHJ5PVxudW1zZWNlbnRyeQorXGRlZlx1bm5zZWNlbnRyeSMxIzIjMyM0e1xkb3NlY2VudHJ5eyMxfXsjNH19CisKKyUgU3Vic2VjdGlvbnMuCitcZGVmXG51bXN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic2VjZW50cnl7IzJcbGFiZWxzcGFjZSMxfXsjNH19CitcbGV0XGFwcHN1YnNlY2VudHJ5PVxudW1zdWJzZWNlbnRyeQorXGRlZlx1bm5zdWJzZWNlbnRyeSMxIzIjMyM0e1xkb3N1YnNlY2VudHJ5eyMxfXsjNH19CisKKyUgQW5kIHN1YnN1YnNlY3Rpb25zLgorXGRlZlxudW1zdWJzdWJzZWNlbnRyeSMxIzIjMyM0e1xkb3N1YnN1YnNlY2VudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorXGxldFxhcHBzdWJzdWJzZWNlbnRyeT1cbnVtc3Vic3Vic2VjZW50cnkKK1xkZWZcdW5uc3Vic3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzdWJzZWNlbnRyeXsjMX17IzR9fQorCislIFRoaXMgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgdmFyaW91cyBsZXZlbHMuCislIFNhbWUgYXMgXGRlZmF1bHRwYXJpbmRlbnQuCitcbmV3ZGltZW5cdG9jaW5kZW50IFx0b2NpbmRlbnQgPSAxNXB0CisKKyUgTm93IGZvciB0aGUgYWN0dWFsIHR5cGVzZXR0aW5nLiBJbiBhbGwgdGhlc2UsICMxIGlzIHRoZSB0ZXh0IGFuZCAjMiBpcyB0aGUKKyUgcGFnZSBudW1iZXIuCislCislIElmIHRoZSB0b2MgaGFzIHRvIGJlIGJyb2tlbiBvdmVyIHBhZ2VzLCB3ZSB3YW50IGl0IHRvIGJlIGF0IGNoYXB0ZXJzCislIGlmIGF0IGFsbCBwb3NzaWJsZTsgaGVuY2UgdGhlIFxwZW5hbHR5LgorXGRlZlxkb2NoYXBlbnRyeSMxIzJ7JQorICAgXHBlbmFsdHktMzAwIFx2c2tpcDFcYmFzZWxpbmVza2lwIHBsdXMuMzNcYmFzZWxpbmVza2lwIG1pbnVzLjI1XGJhc2VsaW5lc2tpcAorICAgXGJlZ2luZ3JvdXAKKyAgICAgXGNoYXBlbnRyeWZvbnRzCisgICAgIFx0b2NlbnRyeXsjMX17XGRvcGFnZW5vXGJncm91cCMyXGVncm91cH0lCisgICBcZW5kZ3JvdXAKKyAgIFxub2JyZWFrXHZza2lwIC4yNVxiYXNlbGluZXNraXAgcGx1cy4xXGJhc2VsaW5lc2tpcAorfQorCitcZGVmXGRvc2VjZW50cnkjMSMye1xiZWdpbmdyb3VwCisgIFxzZWNlbnRyeWZvbnRzIFxsZWZ0c2tpcD1cdG9jaW5kZW50CisgIFx0b2NlbnRyeXsjMX17XGRvcGFnZW5vXGJncm91cCMyXGVncm91cH0lCitcZW5kZ3JvdXB9CisKK1xkZWZcZG9zdWJzZWNlbnRyeSMxIzJ7XGJlZ2luZ3JvdXAKKyAgXHN1YnNlY2VudHJ5Zm9udHMgXGxlZnRza2lwPTJcdG9jaW5kZW50CisgIFx0b2NlbnRyeXsjMX17XGRvcGFnZW5vXGJncm91cCMyXGVncm91cH0lCitcZW5kZ3JvdXB9CisKK1xkZWZcZG9zdWJzdWJzZWNlbnRyeSMxIzJ7XGJlZ2luZ3JvdXAKKyAgXHN1YnN1YnNlY2VudHJ5Zm9udHMgXGxlZnRza2lwPTNcdG9jaW5kZW50CisgIFx0b2NlbnRyeXsjMX17XGRvcGFnZW5vXGJncm91cCMyXGVncm91cH0lCitcZW5kZ3JvdXB9CisKKyUgV2UgdXNlIHRoZSBzYW1lIFxlbnRyeSBtYWNybyBhcyBmb3IgdGhlIGluZGV4IGVudHJpZXMuCitcbGV0XHRvY2VudHJ5ID0gXGVudHJ5CisKKyUgU3BhY2UgYmV0d2VlbiBjaGFwdGVyIChvciB3aGF0ZXZlcikgbnVtYmVyIGFuZCB0aGUgdGl0bGUuCitcZGVmXGxhYmVsc3BhY2V7XGhza2lwMWVtIFxyZWxheH0KKworXGRlZlxkb3BhZ2VubyMxe3tccm0gIzF9fQorXGRlZlxkb3Nob3J0cGFnZW5vIzF7e1xybSAjMX19CisKK1xkZWZcY2hhcGVudHJ5Zm9udHN7XHNlY2ZvbnRzIFxybX0KK1xkZWZcc2VjZW50cnlmb250c3tcdGV4dGZvbnRzfQorXGRlZlxzdWJzZWNlbnRyeWZvbnRze1x0ZXh0Zm9udHN9CitcZGVmXHN1YnN1YnNlY2VudHJ5Zm9udHN7XHRleHRmb250c30KKworCitcbWVzc2FnZXtlbnZpcm9ubWVudHMsfQorJSBAZm9vIC4uLiBAZW5kIGZvby4KKworJSBAcG9pbnR7fSwgQHJlc3VsdHt9LCBAZXhwYW5zaW9ue30sIEBwcmludHt9LCBAZXF1aXZ7fS4KKyUKKyUgU2luY2UgdGhlc2UgY2hhcmFjdGVycyBhcmUgdXNlZCBpbiBleGFtcGxlcywgaXQgc2hvdWxkIGJlIGFuIGV2ZW4gbnVtYmVyIG9mCislIFx0dCB3aWR0aHMuIEVhY2ggXHR0IGNoYXJhY3RlciBpcyAxZW4sIHNvIHR3byBtYWtlcyBpdCAxZW0uCislCitcZGVmXHBvaW50eyRcc3RhciR9CitcZGVmXHJlc3VsdHtcbGVhdmV2bW9kZVxyYWlzZS4xNWV4XGhib3ggdG8gMWVte1xoZmlsJFxSaWdodGFycm93JFxoZmlsfX0KK1xkZWZcZXhwYW5zaW9ue1xsZWF2ZXZtb2RlXHJhaXNlLjFleFxoYm94IHRvIDFlbXtcaGZpbCRcbWFwc3RvJFxoZmlsfX0KK1xkZWZccHJpbnR7XGxlYXZldm1vZGVcbG93ZXIuMWV4XGhib3ggdG8gMWVte1xoZmlsJFxkYXNodiRcaGZpbH19CitcZGVmXGVxdWl2e1xsZWF2ZXZtb2RlXGxvd2VyLjFleFxoYm94IHRvIDFlbXtcaGZpbCRccHRleGVxdWl2JFxoZmlsfX0KKworJSBUaGUgQGVycm9ye30gY29tbWFuZC4KKyUgQWRhcHRlZCBmcm9tIHRoZSBUZVhib29rJ3MgXGJveGl0LgorJQorXG5ld2JveFxlcnJvcmJveAorJQore1x0ZW50dCBcZ2xvYmFsXGRpbWVuMCA9IDNlbX0lIFdpZHRoIG9mIHRoZSBib3guCitcZGltZW4yID0gLjU1cHQgJSBUaGlja25lc3Mgb2YgcnVsZXMKKyUgVGhlIHRleHQuIChgcicgaXMgb3BlbiBvbiB0aGUgcmlnaHQsIGBlJyBzb21ld2hhdCBsZXNzIHNvIG9uIHRoZSBsZWZ0LikKK1xzZXRib3gwID0gXGhib3h7XGtlcm4tLjc1cHQgXHRlbnNmIGVycm9yXGtlcm4tMS41cHR9CislCitcc2V0Ym94XGVycm9yYm94PVxoYm94IHRvIFxkaW1lbjB7XGhmaWwKKyAgIFxoc2l6ZSA9IFxkaW1lbjAgXGFkdmFuY2VcaHNpemUgYnkgLTUuOHB0ICUgU3BhY2UgdG8gbGVmdCtyaWdodC4KKyAgIFxhZHZhbmNlXGhzaXplIGJ5IC0yXGRpbWVuMiAlIFJ1bGVzLgorICAgXHZib3h7JQorICAgICAgXGhydWxlIGhlaWdodFxkaW1lbjIKKyAgICAgIFxoYm94e1x2cnVsZSB3aWR0aFxkaW1lbjIgXGtlcm4zcHQgICAgICAgICAgJSBTcGFjZSB0byBsZWZ0IG9mIHRleHQuCisgICAgICAgICBcdnRvcHtca2VybjIuNHB0IFxib3gwIFxrZXJuMi40cHR9JSBTcGFjZSBhYm92ZS9iZWxvdy4KKyAgICAgICAgIFxrZXJuM3B0XHZydWxlIHdpZHRoXGRpbWVuMn0lIFNwYWNlIHRvIHJpZ2h0LgorICAgICAgXGhydWxlIGhlaWdodFxkaW1lbjJ9CisgICAgXGhmaWx9CislCitcZGVmXGVycm9ye1xsZWF2ZXZtb2RlXGxvd2VyLjdleFxjb3B5XGVycm9yYm94fQorCislIEB0ZXggLi4uIEBlbmQgdGV4ICAgIGVzY2FwZXMgaW50byByYXcgVGV4IHRlbXBvcmFyaWx5LgorJSBPbmUgZXhjZXB0aW9uOiBAIGlzIHN0aWxsIGFuIGVzY2FwZSBjaGFyYWN0ZXIsIHNvIHRoYXQgQGVuZCB0ZXggd29ya3MuCislIEJ1dCBcQCBvciBAQCB3aWxsIGdldCBhIHBsYWluIHRleCBAIGNoYXJhY3Rlci4KKworXGVudmRlZlx0ZXh7JQorICBcY2F0Y29kZSBgXFw9MCBcY2F0Y29kZSBgXHs9MSBcY2F0Y29kZSBgXH09MgorICBcY2F0Y29kZSBgXCQ9MyBcY2F0Y29kZSBgXCY9NCBcY2F0Y29kZSBgXCM9NgorICBcY2F0Y29kZSBgXF49NyBcY2F0Y29kZSBgXF89OCBcY2F0Y29kZSBgXH49XGFjdGl2ZSBcbGV0fj1cdGllCisgIFxjYXRjb2RlIGBcJT0xNAorICBcY2F0Y29kZSBgXCs9XG90aGVyCisgIFxjYXRjb2RlIGBcIj1cb3RoZXIKKyAgXGNhdGNvZGUgYFx8PVxvdGhlcgorICBcY2F0Y29kZSBgXDw9XG90aGVyCisgIFxjYXRjb2RlIGBcPj1cb3RoZXIKKyAgXGVzY2FwZWNoYXI9YFxcCisgICUKKyAgXGxldFxiPVxwdGV4YgorICBcbGV0XGJ1bGxldD1ccHRleGJ1bGxldAorICBcbGV0XGM9XHB0ZXhjCisgIFxsZXRcLD1ccHRleGNvbW1hCisgIFxsZXRcLj1ccHRleGRvdAorICBcbGV0XGRvdHM9XHB0ZXhkb3RzCisgIFxsZXRcZXF1aXY9XHB0ZXhlcXVpdgorICBcbGV0XCE9XHB0ZXhleGNsYW0KKyAgXGxldFxpPVxwdGV4aQorICBcbGV0XGluZGVudD1ccHRleGluZGVudAorICBcbGV0XG5vaW5kZW50PVxwdGV4bm9pbmRlbnQKKyAgXGxldFx7PVxwdGV4bGJyYWNlCisgIFxsZXRcKz1cdGFiYWxpZ24KKyAgXGxldFx9PVxwdGV4cmJyYWNlCisgIFxsZXRcLz1ccHRleHNsYXNoCisgIFxsZXRcKj1ccHRleHN0YXIKKyAgXGxldFx0PVxwdGV4dAorICBcbGV0XGZyZW5jaHNwYWNpbmc9XHBsYWluZnJlbmNoc3BhY2luZworICAlCisgIFxkZWZcZW5kbGRvdHN7XG1hdGhpbm5lcntcbGRvdHNcbGRvdHNcbGRvdHNcbGRvdHN9fSUKKyAgXGRlZlxlbmRkb3Rze1xyZWxheFxpZm1tb2RlXGVuZGxkb3RzXGVsc2UkXG1hdGhzdXJyb3VuZD0wcHQgXGVuZGxkb3RzXCwkXGZpfSUKKyAgXGRlZlxAe0B9JQorfQorJSBUaGVyZSBpcyBubyBuZWVkIHRvIGRlZmluZSBcRXRleC4KKworJSBEZWZpbmUgQGxpc3AgLi4uIEBlbmQgbGlzcC4KKyUgQGxpc3AgZW52aXJvbm1lbnQgZm9ybXMgYSBncm91cCBzbyBpdCBjYW4gcmViaW5kIHRoaW5ncywKKyUgaW5jbHVkaW5nIHRoZSBkZWZpbml0aW9uIG9mIEBlbmQgbGlzcCAod2hpY2ggbm9ybWFsbHkgaXMgZXJyb25lb3VzKS4KKworJSBBbW91bnQgdG8gbmFycm93IHRoZSBtYXJnaW5zIGJ5IGZvciBAbGlzcC4KK1xuZXdza2lwXGxpc3BuYXJyb3dpbmcgXGxpc3BuYXJyb3dpbmc9MC40aW4KKworJSBUaGlzIGlzIHRoZSBkZWZpbml0aW9uIHRoYXQgXl5NIGdldHMgaW5zaWRlIEBsaXNwLCBAZXhhbXBsZSwgYW5kIG90aGVyCislIHN1Y2ggZW52aXJvbm1lbnRzLiAgXG51bGwgaXMgYmV0dGVyIHRoYW4gYSBzcGFjZSwgc2luY2UgaXQgZG9lc24ndAorJSBoYXZlIGFueSB3aWR0aC4KK1xkZWZcbGlzcHBhcntcbnVsbFxlbmRncmFmfQorCislIFRoaXMgc3BhY2UgaXMgYWx3YXlzIHByZXNlbnQgYWJvdmUgYW5kIGJlbG93IGVudmlyb25tZW50cy4KK1xuZXdza2lwXGVudnNraXBhbW91bnQgXGVudnNraXBhbW91bnQgPSAwcHQKKworJSBNYWtlIHNwYWNpbmcgYW5kIGJlbG93IGVudmlyb25tZW50IHN5bW1ldHJpY2FsLiAgV2UgdXNlIFxwYXJza2lwIGhlcmUKKyUgdG8gaGVscCBpbiBkb2luZyB0aGF0LCBzaW5jZSBpbiBAZXhhbXBsZS1saWtlIGVudmlyb25tZW50cyBccGFyc2tpcAorJSBpcyByZXNldCB0byB6ZXJvOyB0aHVzIHRoZSBcYWZ0ZXJlbnZicmVhayBpbnNlcnRzIG5vIHNwYWNlIC0tIGJ1dCB0aGUKKyUgc3RhcnQgb2YgdGhlIG5leHQgcGFyYWdyYXBoIHdpbGwgaW5zZXJ0IFxwYXJza2lwLgorJQorXGRlZlxhYm92ZWVudmJyZWFre3slCisgICUgPTEwMDAwIGluc3RlYWQgb2YgPDEwMDAwIGJlY2F1c2Ugb2YgYSBzcGVjaWFsIGNhc2UgaW4gXGl0ZW16enogYW5kCisgICUgXHNlY3Rpb25oZWFkaW5nLCBxLnYuCisgIFxpZm51bSBcbGFzdHBlbmFsdHk9MTAwMDAgXGVsc2UKKyAgICBcYWR2YW5jZVxlbnZza2lwYW1vdW50IGJ5IFxwYXJza2lwCisgICAgXGVuZGdyYWYKKyAgICBcaWZkaW1cbGFzdHNraXA8XGVudnNraXBhbW91bnQKKyAgICAgIFxyZW1vdmVsYXN0c2tpcAorICAgICAgJSBpdCdzIG5vdCBhIGdvb2QgcGxhY2UgdG8gYnJlYWsgaWYgdGhlIGxhc3QgcGVuYWx0eSB3YXMgXG5vYnJlYWsKKyAgICAgICUgb3IgYmV0dGVyIC4uLgorICAgICAgXGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwIFxwZW5hbHR5LTUwIFxmaQorICAgICAgXHZza2lwXGVudnNraXBhbW91bnQKKyAgICBcZmkKKyAgXGZpCit9fQorCitcbGV0XGFmdGVyZW52YnJlYWsgPSBcYWJvdmVlbnZicmVhaworCislIFxub25hcnJvd2luZyBpcyBhIGZsYWcuICBJZiAic2V0IiwgQGxpc3AgZXRjIGRvbid0IG5hcnJvdyBtYXJnaW5zOyBpdCB3aWxsCislIGFsc28gY2xlYXIgaXQsIHNvIHRoYXQgaXRzIGVtYmVkZGVkIGVudmlyb25tZW50cyBkbyB0aGUgbmFycm93aW5nIGFnYWluLgorXGxldFxub25hcnJvd2luZz1ccmVsYXgKKworJSBAY2FydG91Y2hlIC4uLiBAZW5kIGNhcnRvdWNoZTogZHJhdyByZWN0YW5nbGUgdy9yb3VuZGVkIGNvcm5lcnMgYXJvdW5kCislIGVudmlyb25tZW50IGNvbnRlbnRzLgorXGZvbnRcY2lyY2xlPWxjaXJjbGUxMAorXG5ld2RpbWVuXGNpcmN0aGljaworXG5ld2RpbWVuXGNhcnRvdXRlclxuZXdkaW1lblxjYXJ0aW5uZXIKK1xuZXdza2lwXG5vcm1ic2tpcFxuZXdza2lwXG5vcm1wc2tpcFxuZXdza2lwXG5vcm1sc2tpcAorXGNpcmN0aGljaz1cZm9udGRpbWVuOFxjaXJjbGUKKyUKK1xkZWZcY3Rse3tcY2lyY2xlXGNoYXInMDEzXGhza2lwIC02cHR9fSUgNnB0IGZyb20gcGwgZmlsZTogMS8yY2hhcndpZHRoCitcZGVmXGN0cnt7XGhza2lwIDZwdFxjaXJjbGVcY2hhcicwMTB9fQorXGRlZlxjYmx7e1xjaXJjbGVcY2hhcicwMTJcaHNraXAgLTZwdH19CitcZGVmXGNicnt7XGhza2lwIDZwdFxjaXJjbGVcY2hhcicwMTF9fQorXGRlZlxjYXJ0dG9we1xoYm94IHRvIFxjYXJ0b3V0ZXJ7XGhza2lwXGxza2lwCisgICAgICAgIFxjdGxcbGVhZGVyc1xocnVsZSBoZWlnaHRcY2lyY3RoaWNrXGhmaWxcY3RyCisgICAgICAgIFxoc2tpcFxyc2tpcH19CitcZGVmXGNhcnRib3R7XGhib3ggdG8gXGNhcnRvdXRlcntcaHNraXBcbHNraXAKKyAgICAgICAgXGNibFxsZWFkZXJzXGhydWxlIGhlaWdodFxjaXJjdGhpY2tcaGZpbFxjYnIKKyAgICAgICAgXGhza2lwXHJza2lwfX0KKyUKK1xuZXdza2lwXGxza2lwXG5ld3NraXBccnNraXAKKworXGVudmRlZlxjYXJ0b3VjaGV7JQorICBcaWZobW9kZVxwYXJcZmkgICUgY2FuJ3QgYmUgaW4gdGhlIG1pZHN0IG9mIGEgcGFyYWdyYXBoLgorICBcc3RhcnRzYXZpbmdpbnNlcnRzCisgIFxsc2tpcD1cbGVmdHNraXAgXHJza2lwPVxyaWdodHNraXAKKyAgXGxlZnRza2lwPTBwdFxyaWdodHNraXA9MHB0ICUgd2Ugd2FudCB0aGVzZSAqb3V0c2lkZSouCisgIFxjYXJ0aW5uZXI9XGhzaXplIFxhZHZhbmNlXGNhcnRpbm5lciBieS1cbHNraXAKKyAgXGFkdmFuY2VcY2FydGlubmVyIGJ5LVxyc2tpcAorICBcY2FydG91dGVyPVxoc2l6ZQorICBcYWR2YW5jZVxjYXJ0b3V0ZXIgYnkgMTguNHB0CSUgYWxsb3cgZm9yIDNwdCBrZXJucyBvbiBlaXRoZXIKKwkJCQklIHNpZGUsIGFuZCBmb3IgNnB0IHdhc3RlIGZyb20KKwkJCQklIGVhY2ggY29ybmVyIGNoYXIsIGFuZCBydWxlIHRoaWNrbmVzcworICBcbm9ybWJza2lwPVxiYXNlbGluZXNraXAgXG5vcm1wc2tpcD1ccGFyc2tpcCBcbm9ybWxza2lwPVxsaW5lc2tpcAorICAlIEZsYWcgdG8gdGVsbCBAbGlzcCwgZXRjLiwgbm90IHRvIG5hcnJvdyBtYXJnaW4uCisgIFxsZXRcbm9uYXJyb3dpbmcgPSB0JQorICBcdmJveFxiZ3JvdXAKKyAgICAgIFxiYXNlbGluZXNraXA9MHB0XHBhcnNraXA9MHB0XGxpbmVza2lwPTBwdAorICAgICAgXGNhcnR0b3AKKyAgICAgIFxoYm94XGJncm91cAorCSAgXGhza2lwXGxza2lwCisJICBcdnJ1bGVca2VybjNwdAorCSAgXHZib3hcYmdyb3VwCisJICAgICAgXGtlcm4zcHQKKwkgICAgICBcaHNpemU9XGNhcnRpbm5lcgorCSAgICAgIFxiYXNlbGluZXNraXA9XG5vcm1ic2tpcAorCSAgICAgIFxsaW5lc2tpcD1cbm9ybWxza2lwCisJICAgICAgXHBhcnNraXA9XG5vcm1wc2tpcAorCSAgICAgIFx2c2tpcCAtXHBhcnNraXAKKwkgICAgICBcY29tbWVudCAlIEZvciBleHBsYW5hdGlvbiwgc2VlIHRoZSBlbmQgb2YgXGRlZlxncm91cC4KK30KK1xkZWZcRWNhcnRvdWNoZXslCisgICAgICAgICAgICAgIFxpZmhtb2RlXHBhclxmaQorCSAgICAgIFxrZXJuM3B0CisJICBcZWdyb3VwCisJICBca2VybjNwdFx2cnVsZQorCSAgXGhza2lwXHJza2lwCisgICAgICBcZWdyb3VwCisgICAgICBcY2FydGJvdAorICBcZWdyb3VwCisgIFxjaGVja2luc2VydHMKK30KKworCislIFRoaXMgbWFjcm8gaXMgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYWxsIHRoZSBAZXhhbXBsZSB2YXJpYW50cywKKyUgaW5zaWRlIGEgZ3JvdXAuCitcZGVmXG5vbmZpbGxzdGFydHslCisgIFxhYm92ZWVudmJyZWFrCisgIFxoZnV6eiA9IDEycHQgJSBEb24ndCBiZSBmdXNzeQorICBcc2Vwc3BhY2VzICUgTWFrZSBzcGFjZXMgYmUgd29yZC1zZXBhcmF0b3JzIHJhdGhlciB0aGFuIHNwYWNlIHRva2Vucy4KKyAgXGxldFxwYXIgPSBcbGlzcHBhciAlIGRvbid0IGlnbm9yZSBibGFuayBsaW5lcworICBcb2JleWxpbmVzICUgZWFjaCBsaW5lIG9mIGlucHV0IGlzIGEgbGluZSBvZiBvdXRwdXQKKyAgXHBhcnNraXAgPSAwcHQKKyAgXHBhcmluZGVudCA9IDBwdAorICBcZW1lcmdlbmN5c3RyZXRjaCA9IDBwdCAlIGRvbid0IHRyeSB0byBhdm9pZCBvdmVyZnVsbCBib3hlcworICBcaWZ4XG5vbmFycm93aW5nXHJlbGF4CisgICAgXGFkdmFuY2UgXGxlZnRza2lwIGJ5IFxsaXNwbmFycm93aW5nCisgICAgXGV4ZGVudGFtb3VudD1cbGlzcG5hcnJvd2luZworICBcZWxzZQorICAgIFxsZXRcbm9uYXJyb3dpbmcgPSBccmVsYXgKKyAgXGZpCisgIFxsZXRcZXhkZW50PVxub2ZpbGxleGRlbnQKK30KKworJSBJZiB5b3Ugd2FudCBhbGwgZXhhbXBsZXMgZXRjLiBzbWFsbDogQHNldCBkaXNwZW52c2l6ZSBzbWFsbC4KKyUgSWYgeW91IHdhbnQgZXZlbiBzbWFsbCBleGFtcGxlcyB0aGUgZnVsbCBzaXplOiBAc2V0IGRpc3BlbnZzaXplIG5vc21hbGwuCislIFRoaXMgYWZmZWN0cyB0aGUgZm9sbG93aW5nIGRpc3BsYXllZCBlbnZpcm9ubWVudHM6CislICAgIEBleGFtcGxlLCBAZGlzcGxheSwgQGZvcm1hdCwgQGxpc3AKKyUKK1xkZWZcc21hbGx3b3Jke3NtYWxsfQorXGRlZlxub3NtYWxsd29yZHtub3NtYWxsfQorXGxldFxTRVRkaXNwZW52c2l6ZVxyZWxheAorXGRlZlxzZXRub3JtYWxkaXNwZW52eyUKKyAgXGlmeFxTRVRkaXNwZW52c2l6ZVxzbWFsbHdvcmQKKyAgICBcc21hbGxleGFtcGxlZm9udHMgXHJtCisgIFxmaQorfQorXGRlZlxzZXRzbWFsbGRpc3BlbnZ7JQorICBcaWZ4XFNFVGRpc3BlbnZzaXplXG5vc21hbGx3b3JkCisgIFxlbHNlCisgICAgXHNtYWxsZXhhbXBsZWZvbnRzIFxybQorICBcZmkKK30KKworJSBXZSBvZnRlbiBkZWZpbmUgdHdvIGVudmlyb25tZW50cywgQGZvbyBhbmQgQHNtYWxsZm9vLgorJSBMZXQncyBkbyBpdCBieSBvbmUgY29tbWFuZDoKK1xkZWZcbWFrZWRpc3BlbnYgIzEjMnsKKyAgXGV4cGFuZGFmdGVyXGVudmRlZlxjc25hbWUjMVxlbmRjc25hbWUge1xzZXRub3JtYWxkaXNwZW52ICMyfQorICBcZXhwYW5kYWZ0ZXJcZW52ZGVmXGNzbmFtZSBzbWFsbCMxXGVuZGNzbmFtZSB7XHNldHNtYWxsZGlzcGVudiAjMn0KKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgRSMxXGVuZGNzbmFtZSBcYWZ0ZXJlbnZicmVhaworICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBFc21hbGwjMVxlbmRjc25hbWUgXGFmdGVyZW52YnJlYWsKK30KKworJSBEZWZpbmUgdHdvIHN5bm9ueW1zOgorXGRlZlxtYWtldHdvZGlzcGVudnMgIzEjMiMzeworICBcbWFrZWRpc3BlbnZ7IzF9eyMzfQorICBcbWFrZWRpc3BlbnZ7IzJ9eyMzfQorfQorCislIEBsaXNwOiBpbmRlbnRlZCwgbmFycm93ZWQsIHR5cGV3cml0ZXIgZm9udDsgQGV4YW1wbGU6IHNhbWUgYXMgQGxpc3AuCislCislIEBzbWFsbGV4YW1wbGUgYW5kIEBzbWFsbGxpc3A6IHVzZSBzbWFsbGVyIGZvbnRzLgorJSBPcmlnaW5hbGx5IGNvbnRyaWJ1dGVkIGJ5IFBhdmVsQHhlcm94LgorJQorXG1ha2V0d29kaXNwZW52cyB7bGlzcH17ZXhhbXBsZX17JQorICBcbm9uZmlsbHN0YXJ0CisgIFx0dAorICBcbGV0XGtiZGZvbnQgPSBca2JkZXhhbXBsZWZvbnQgJSBBbGxvdyBAa2JkIHRvIGRvIHNvbWV0aGluZyBzcGVjaWFsLgorICBcZ29iYmxlICAgICAgICUgZWF0IHJldHVybgorfQorCislIEBkaXNwbGF5L0BzbWFsbGRpc3BsYXk6IHNhbWUgYXMgQGxpc3AgZXhjZXB0IGtlZXAgY3VycmVudCBmb250LgorJQorXG1ha2VkaXNwZW52IHtkaXNwbGF5fXslCisgIFxub25maWxsc3RhcnQKKyAgXGdvYmJsZQorfQorCislIEBmb3JtYXQvQHNtYWxsZm9ybWF0OiBzYW1lIGFzIEBkaXNwbGF5IGV4Y2VwdCBkb24ndCBuYXJyb3cgbWFyZ2lucy4KKyUKK1xtYWtlZGlzcGVudntmb3JtYXR9eyUKKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFxub25maWxsc3RhcnQKKyAgXGdvYmJsZQorfQorCislIEBmbHVzaGxlZnQ6IHNhbWUgYXMgQGZvcm1hdCwgYnV0IGRvZXNuJ3Qgb2JleSBcU0VUZGlzcGVudnNpemUuCitcZW52ZGVmXGZsdXNobGVmdHslCisgIFxsZXRcbm9uYXJyb3dpbmcgPSB0JQorICBcbm9uZmlsbHN0YXJ0CisgIFxnb2JibGUKK30KK1xsZXRcRWZsdXNobGVmdCA9IFxhZnRlcmVudmJyZWFrCisKKyUgQGZsdXNocmlnaHQuCislCitcZW52ZGVmXGZsdXNocmlnaHR7JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICBcYWR2YW5jZVxsZWZ0c2tpcCBieSAwcHQgcGx1cyAxZmlsbAorICBcZ29iYmxlCit9CitcbGV0XEVmbHVzaHJpZ2h0ID0gXGFmdGVyZW52YnJlYWsKKworCislIEBxdW90YXRpb24gZG9lcyBub3JtYWwgbGluZWJyZWFraW5nIChoZW5jZSB3ZSBjYW4ndCB1c2UgXG5vbmZpbGxzdGFydCkKKyUgYW5kIG5hcnJvd3MgdGhlIG1hcmdpbnMuICBXZSBrZWVwIFxwYXJza2lwIG5vbnplcm8gaW4gZ2VuZXJhbCwgc2luY2UKKyUgd2UncmUgZG9pbmcgbm9ybWFsIGZpbGxpbmcuICBTbywgd2hlbiB1c2luZyBcYWJvdmVlbnZicmVhayBhbmQKKyUgXGFmdGVyZW52YnJlYWssIHRlbXBvcmFyaWx5IG1ha2UgXHBhcnNraXAgMC4KKyUKK1xlbnZkZWZccXVvdGF0aW9ueyUKKyAge1xwYXJza2lwPTBwdCBcYWJvdmVlbnZicmVha30lIGJlY2F1c2UgXGFib3ZlZW52YnJlYWsgaW5zZXJ0cyBccGFyc2tpcAorICBccGFyaW5kZW50PTBwdAorICAlCisgICUgQGNhcnRvdWNoZSBkZWZpbmVzIFxub25hcnJvd2luZyB0byBpbmhpYml0IG5hcnJvd2luZyBhdCBuZXh0IGxldmVsIGRvd24uCisgIFxpZnhcbm9uYXJyb3dpbmdccmVsYXgKKyAgICBcYWR2YW5jZVxsZWZ0c2tpcCBieSBcbGlzcG5hcnJvd2luZworICAgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieSBcbGlzcG5hcnJvd2luZworICAgIFxleGRlbnRhbW91bnQgPSBcbGlzcG5hcnJvd2luZworICBcZWxzZQorICAgIFxsZXRcbm9uYXJyb3dpbmcgPSBccmVsYXgKKyAgXGZpCisgIFxwYXJzZWFyZ1xxdW90YXRpb25sYWJlbAorfQorCislIFdlIGhhdmUgcmV0YWluZWQgYSBub256ZXJvIHBhcnNraXAgZm9yIHRoZSBlbnZpcm9ubWVudCwgc2luY2Ugd2UncmUKKyUgZG9pbmcgbm9ybWFsIGZpbGxpbmcuCislCitcZGVmXEVxdW90YXRpb257JQorICBccGFyCisgIFxpZnhccXVvdGF0aW9uYXV0aG9yXHVuZGVmaW5lZFxlbHNlCisgICAgJSBpbmRlbnQgYSBiaXQuCisgICAgXGxlZnRsaW5le1xrZXJuIDJcbGVmdHNraXAgXHNsIC0tLVxxdW90YXRpb25hdXRob3J9JQorICBcZmkKKyAge1xwYXJza2lwPTBwdCBcYWZ0ZXJlbnZicmVha30lCit9CisKKyUgSWYgd2UncmUgZ2l2ZW4gYW4gYXJndW1lbnQsIHR5cGVzZXQgaXQgaW4gYm9sZCB3aXRoIGEgY29sb24gYWZ0ZXIuCitcZGVmXHF1b3RhdGlvbmxhYmVsIzF7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcZW1wdHkgXGVsc2UKKyAgICB7XGJmICMxOiB9JQorICBcZmkKK30KKworCislIExhVGVYLWxpa2UgQHZlcmJhdGltLi4uQGVuZCB2ZXJiYXRpbSBhbmQgQHZlcmJ7PGNoYXI+Li4uPGNoYXI+fQorJSBJZiB3ZSB3YW50IHRvIGFsbG93IGFueSA8Y2hhcj4gYXMgZGVsaW1pdGVyLAorJSB3ZSBuZWVkIHRoZSBjdXJseSBicmFjZXMgc28gdGhhdCBtYWtlaW5mbyBzZWVzIHRoZSBAdmVyYiBjb21tYW5kLCBlZzoKKyUgYEB2ZXJieC4uLngnIHdvdWxkIGxvb2sgbGlrZSB0aGUgJ0B2ZXJieCcgY29tbWFuZC4gIC0tamFubmVrZUBnbnUub3JnCislCislIFtLbnV0aF06IERvbmFsZCBFcnZpbiBLbnV0aCwgMTk5Ni4gIFRoZSBUZVhib29rLgorJQorJSBbS251dGhdIHAuMzQ0OyBvbmx5IHdlIG5lZWQgdG8gZG8gdGhlIG90aGVyIGNoYXJhY3RlcnMgVGV4aW5mbyBzZXRzCislIGFjdGl2ZSB0b28uICBPdGhlcndpc2UsIHRoZXkgZ2V0IGxvc3QgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvbiBhCislIHZlcmJhdGltIGxpbmUuCitcZGVmXGRvc3BlY2lhbHN7JQorICBcZG9cIFxkb1xcXGRvXHtcZG9cfVxkb1wkXGRvXCYlCisgIFxkb1wjXGRvXF5cZG9cXl5LXGRvXF9cZG9cXl5BXGRvXCVcZG9cfiUKKyAgXGRvXDxcZG9cPlxkb1x8XGRvXEBcZG8rXGRvXCIlCit9CislCislIFtLbnV0aF0gcC4gMzgwCitcZGVmXHVuY2F0Y29kZXNwZWNpYWxzeyUKKyAgXGRlZlxkbyMjMXtcY2F0Y29kZWAjIzE9XG90aGVyfVxkb3NwZWNpYWxzfQorJQorJSBbS251dGhdIHBwLiAzODAsMzgxLDM5MQorJSBEaXNhYmxlIFNwYW5pc2ggbGlnYXR1cmVzID9gIGFuZCAhYCBvZiBcdHQgZm9udAorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXGA9XGFjdGl2ZVxnZGVmYHtccmVsYXhcbHF9CitcZW5kZ3JvdXAKKyUKKyUgU2V0dXAgZm9yIHRoZSBAdmVyYiBjb21tYW5kLgorJQorJSBFaWdodCBzcGFjZXMgZm9yIGEgdGFiCitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcXl5JPVxhY3RpdmUKKyAgXGdkZWZcdGFiZWlnaHRzcGFjZXN7XGNhdGNvZGVgXF5eST1cYWN0aXZlXGRlZl5eSXtcIFwgXCBcIFwgXCBcIFwgfX0KK1xlbmRncm91cAorJQorXGRlZlxzZXR1cHZlcmJ7JQorICBcdHQgICUgZWFzaWVzdCAoYW5kIGNvbnZlbnRpb25hbGx5IHVzZWQpIGZvbnQgZm9yIHZlcmJhdGltCisgIFxkZWZccGFye1xsZWF2ZXZtb2RlXGVuZGdyYWZ9JQorICBcY2F0Y29kZWBcYD1cYWN0aXZlCisgIFx0YWJlaWdodHNwYWNlcworICAlIFJlc3BlY3QgbGluZSBicmVha3MsCisgICUgcHJpbnQgc3BlY2lhbCBzeW1ib2xzIGFzIHRoZW1zZWx2ZXMsIGFuZAorICAlIG1ha2UgZWFjaCBzcGFjZSBjb3VudAorICAlIG11c3QgZG8gaW4gdGhpcyBvcmRlcjoKKyAgXG9iZXlsaW5lcyBcdW5jYXRjb2Rlc3BlY2lhbHMgXHNlcHNwYWNlcworfQorCislIFNldHVwIGZvciB0aGUgQHZlcmJhdGltIGVudmlyb25tZW50CislCislIFJlYWwgdGFiIGV4cGFuc2lvbgorXG5ld2RpbWVuXHRhYncgXHNldGJveDA9XGhib3h7XHR0XHNwYWNlfSBcdGFidz04XHdkMCAlIHRhYiBhbW91bnQKKyUKK1xkZWZcc3RhcnR0YWJib3h7XHNldGJveDA9XGhib3hcYmdyb3VwfQorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXF5eST1cYWN0aXZlCisgIFxnZGVmXHRhYmV4cGFuZHslCisgICAgXGNhdGNvZGVgXF5eST1cYWN0aXZlCisgICAgXGRlZl5eSXtcbGVhdmV2bW9kZVxlZ3JvdXAKKyAgICAgIFxkaW1lbjA9XHdkMCAlIHRoZSB3aWR0aCBzbyBmYXIsIG9yIHNpbmNlIHRoZSBwcmV2aW91cyB0YWIKKyAgICAgIFxkaXZpZGVcZGltZW4wIGJ5XHRhYncKKyAgICAgIFxtdWx0aXBseVxkaW1lbjAgYnlcdGFidyAlIGNvbXB1dGUgcHJldmlvdXMgbXVsdGlwbGUgb2YgXHRhYncKKyAgICAgIFxhZHZhbmNlXGRpbWVuMCBieVx0YWJ3ICAlIGFkdmFuY2UgdG8gbmV4dCBtdWx0aXBsZSBvZiBcdGFidworICAgICAgXHdkMD1cZGltZW4wIFxib3gwIFxzdGFydHRhYmJveAorICAgIH0lCisgIH0KK1xlbmRncm91cAorXGRlZlxzZXR1cHZlcmJhdGlteyUKKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFxub25maWxsc3RhcnQKKyAgJSBFYXNpZXN0IChhbmQgY29udmVudGlvbmFsbHkgdXNlZCkgZm9udCBmb3IgdmVyYmF0aW0KKyAgXHR0CisgIFxkZWZccGFye1xsZWF2ZXZtb2RlXGVncm91cFxib3gwXGVuZGdyYWZ9JQorICBcY2F0Y29kZWBcYD1cYWN0aXZlCisgIFx0YWJleHBhbmQKKyAgJSBSZXNwZWN0IGxpbmUgYnJlYWtzLAorICAlIHByaW50IHNwZWNpYWwgc3ltYm9scyBhcyB0aGVtc2VsdmVzLCBhbmQKKyAgJSBtYWtlIGVhY2ggc3BhY2UgY291bnQKKyAgJSBtdXN0IGRvIGluIHRoaXMgb3JkZXI6CisgIFxvYmV5bGluZXMgXHVuY2F0Y29kZXNwZWNpYWxzIFxzZXBzcGFjZXMKKyAgXGV2ZXJ5cGFye1xzdGFydHRhYmJveH0lCit9CisKKyUgRG8gdGhlIEB2ZXJiIG1hZ2ljOiB2ZXJiYXRpbSB0ZXh0IGlzIHF1b3RlZCBieSB1bmlxdWUKKyUgZGVsaW1pdGVyIGNoYXJhY3RlcnMuICBCZWZvcmUgZmlyc3QgZGVsaW1pdGVyIGV4cGVjdCBhCislIHJpZ2h0IGJyYWNlLCBhZnRlciBsYXN0IGRlbGltaXRlciBleHBlY3QgY2xvc2luZyBicmFjZToKKyUKKyUgICAgXGRlZlxkb3ZlcmIneyc8Y2hhcj4jMTxjaGFyPid9J3sjMX0KKyUKKyUgW0tudXRoXSBwLiAzODI7IG9ubHkgZWF0IG91dGVyIHt9CitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBbPTFcY2F0Y29kZWBdPTJcY2F0Y29kZWBcez1cb3RoZXJcY2F0Y29kZWBcfT1cb3RoZXIKKyAgXGdkZWZcZG92ZXJieyMxW1xkZWZcbmV4dCMjMSMxfVsjIzFcZW5kZ3JvdXBdXG5leHRdCitcZW5kZ3JvdXAKKyUKK1xkZWZcdmVyYntcYmVnaW5ncm91cFxzZXR1cHZlcmJcZG92ZXJifQorJQorJQorJSBEbyB0aGUgQHZlcmJhdGltIG1hZ2ljOiBkZWZpbmUgdGhlIG1hY3JvIFxkb3ZlcmJhdGltIHNvIHRoYXQKKyUgdGhlIChmaXJzdCkgYXJndW1lbnQgZW5kcyB3aGVuICdAZW5kIHZlcmJhdGltJyBpcyByZWFjaGVkLCBpZToKKyUKKyUgICAgIFxkZWZcZG92ZXJiYXRpbSMxQGVuZCB2ZXJiYXRpbXsjMX0KKyUKKyUgRm9yIFRleGluZm8gaXQncyBhIGxvdCBlYXNpZXIgdGhhbiBmb3IgTGFUZVgsCislIGJlY2F1c2UgdGV4aW5mbydzIFx2ZXJiYXRpbSBkb2Vzbid0IHN0b3AgYXQgJ1xlbmR7dmVyYmF0aW19JzoKKyUgd2UgbmVlZCBub3QgcmVkZWZpbmUgJ1wnLCAneycgYW5kICd9Jy4KKyUKKyUgSW5zcGlyZWQgYnkgTGFUZVgncyB2ZXJiYXRpbSBjb21tYW5kIHNldCBbbGF0ZXgubHR4XQorJQorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXCA9XGFjdGl2ZQorICBcb2JleWxpbmVzICUKKyAgJSBpZ25vcmUgZXZlcnl0aGluZyB1cCB0byB0aGUgZmlyc3QgXl5NLCB0aGF0J3MgdGhlIG5ld2xpbmUgYXQgdGhlIGVuZAorICAlIG9mIHRoZSBAdmVyYmF0aW0gaW5wdXQgbGluZSBpdHNlbGYuICBPdGhlcndpc2Ugd2UgZ2V0IGFuIGV4dHJhIGJsYW5rCisgICUgbGluZSBpbiB0aGUgb3V0cHV0LgorICBceGRlZlxkb3ZlcmJhdGltIzFeXk0jMkBlbmQgdmVyYmF0aW17IzJcbm9leHBhbmRcZW5kXGdvYmJsZSB2ZXJiYXRpbX0lCisgICUgV2UgcmVhbGx5IHdhbnQgey4uLlxlbmQgdmVyYmF0aW19IGluIHRoZSBib2R5IG9mIHRoZSBtYWNybywgYnV0CisgICUgd2l0aG91dCB0aGUgYWN0aXZlIHNwYWNlOyB0aHVzIHdlIGhhdmUgdG8gdXNlIFx4ZGVmIGFuZCBcZ29iYmxlLgorXGVuZGdyb3VwCislCitcZW52ZGVmXHZlcmJhdGlteyUKKyAgICBcc2V0dXB2ZXJiYXRpbVxkb3ZlcmJhdGltCit9CitcbGV0XEV2ZXJiYXRpbSA9IFxhZnRlcmVudmJyZWFrCisKKworJSBAdmVyYmF0aW1pbmNsdWRlIEZJTEUgLSBpbnNlcnQgdGV4dCBvZiBmaWxlIGluIHZlcmJhdGltIGVudmlyb25tZW50LgorJQorXGRlZlx2ZXJiYXRpbWluY2x1ZGV7XHBhcnNlYXJndXNpbmdcZmlsZW5hbWVjYXRjb2Rlc1xkb3ZlcmJhdGltaW5jbHVkZX0KKyUKK1xkZWZcZG92ZXJiYXRpbWluY2x1ZGUjMXslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcc2V0dXB2ZXJiYXRpbQorICAgIFxpbnB1dCAjMQorICAgIFxhZnRlcmVudmJyZWFrCisgIH0lCit9CisKKyUgQGNvcHlpbmcgLi4uIEBlbmQgY29weWluZy4KKyUgU2F2ZSB0aGUgdGV4dCBhd2F5IGZvciBAaW5zZXJ0Y29weWluZyBsYXRlci4KKyUKKyUgV2Ugc2F2ZSB0aGUgdW5pbnRlcnByZXRlZCB0b2tlbnMsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgYm94LgorJSBTYXZpbmcgdGhlIHRleHQgaW4gYSBib3ggd291bGQgYmUgbXVjaCBlYXNpZXIsIGJ1dCB0aGVuIGFsbCB0aGUKKyUgdHlwZXNldHRpbmcgY29tbWFuZHMgKEBzbWFsbGJvb2ssIGZvbnQgY2hhbmdlcywgZXRjLikgaGF2ZSB0byBiZSBkb25lCislIGJlZm9yZWhhbmQgLS0gYW5kIGEpIHdlIHdhbnQgQGNvcHlpbmcgdG8gYmUgZG9uZSBmaXJzdCBpbiB0aGUgc291cmNlCislIGZpbGU7IGIpIGxldHRpbmcgdXNlcnMgZGVmaW5lIHRoZSBmcm9udG1hdHRlciBpbiBhcyBmbGV4aWJsZSBvcmRlciBhcworJSBwb3NzaWJsZSBpcyB2ZXJ5IGRlc2lyYWJsZS4KKyUKK1xkZWZcY29weWluZ3tcY2hlY2tlbnZ7fVxiZWdpbmdyb3VwXHNjYW5hcmdjdHh0XGRvY29weWluZ30KK1xkZWZcZG9jb3B5aW5nIzFAZW5kIGNvcHlpbmd7XGVuZGdyb3VwXGRlZlxjb3B5aW5ndGV4dHsjMX19CislCitcZGVmXGluc2VydGNvcHlpbmd7JQorICBcYmVnaW5ncm91cAorICAgIFxwYXJpbmRlbnQgPSAwcHQgICUgcGFyYWdyYXBoIGluZGVudGF0aW9uIGxvb2tzIHdyb25nIG9uIHRpdGxlIHBhZ2UKKyAgICBcc2NhbmV4cFxjb3B5aW5ndGV4dAorICBcZW5kZ3JvdXAKK30KKworXG1lc3NhZ2V7ZGVmdW5zLH0KKyUgQGRlZnVuIGV0Yy4KKworXG5ld3NraXBcZGVmYm9keWluZGVudCBcZGVmYm9keWluZGVudD0uNGluCitcbmV3c2tpcFxkZWZhcmdzaW5kZW50IFxkZWZhcmdzaW5kZW50PTUwcHQKK1xuZXdza2lwXGRlZmxhc3RhcmdtYXJnaW4gXGRlZmxhc3RhcmdtYXJnaW49MThwdAorCislIFN0YXJ0IHRoZSBwcm9jZXNzaW5nIG9mIEBkZWZmbjoKK1xkZWZcc3RhcnRkZWZ1bnslCisgIFxpZm51bVxsYXN0cGVuYWx0eTwxMDAwMAorICAgIFxtZWRicmVhaworICBcZWxzZQorICAgICUgSWYgdGhlcmUgYXJlIHR3byBAZGVmIGNvbW1hbmRzIGluIGEgcm93LCB3ZSdsbCBoYXZlIGEgXG5vYnJlYWssCisgICAgJSB3aGljaCBpcyB0aGVyZSB0byBrZWVwIHRoZSBmdW5jdGlvbiBkZXNjcmlwdGlvbiB0b2dldGhlciB3aXRoIGl0cworICAgICUgaGVhZGVyLiAgQnV0IGlmIHRoZXJlJ3Mgbm90aGluZyBidXQgaGVhZGVycywgd2UgbmVlZCB0byBhbGxvdyBhCisgICAgJSBicmVhayBzb21ld2hlcmUuICBDaGVjayBzcGVjaWZpY2FsbHkgZm9yIHBlbmFsdHkgMTAwMDIsIGluc2VydGVkCisgICAgJSBieSBcZGVmYXJnc2NvbW1vbmVuZGluZywgaW5zdGVhZCBvZiAxMDAwMCwgc2luY2UgdGhlIHNlY3Rpb25pbmcKKyAgICAlIGNvbW1hbmRzIGFsc28gaW5zZXJ0IGEgbm9icmVhayBwZW5hbHR5LCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBhbGxvdworICAgICUgYSBicmVhayBiZXR3ZWVuIGEgc2VjdGlvbiBoZWFkaW5nIGFuZCBhIGRlZnVuLgorICAgICUgCisgICAgXGlmbnVtXGxhc3RwZW5hbHR5PTEwMDAyIFxwZW5hbHR5MjAwMCBcZmkKKyAgICAlCisgICAgJSBTaW1pbGFybHksIGFmdGVyIGEgc2VjdGlvbiBoZWFkaW5nLCBkbyBub3QgYWxsb3cgYSBicmVhay4KKyAgICAlIEJ1dCBkbyBpbnNlcnQgdGhlIGdsdWUuCisgICAgXG1lZHNraXAgICUgcHJlY2VkZWQgYnkgZGlzY2FyZGFibGUgcGVuYWx0eSwgc28gbm90IGEgYnJlYWtwb2ludAorICBcZmkKKyAgJQorICBccGFyaW5kZW50PTBpbgorICBcYWR2YW5jZVxsZWZ0c2tpcCBieSBcZGVmYm9keWluZGVudAorICBcZXhkZW50YW1vdW50PVxkZWZib2R5aW5kZW50Cit9CisKK1xkZWZcZG9kZWZ1bngjMXslCisgICUgRmlyc3QsIGNoZWNrIHdoZXRoZXIgd2UgYXJlIGluIHRoZSByaWdodCBlbnZpcm9ubWVudDoKKyAgXGNoZWNrZW52IzElCisgICUKKyAgJSBBcyBhYm92ZSwgYWxsb3cgbGluZSBicmVhayBpZiB3ZSBoYXZlIG11bHRpcGxlIHggaGVhZGVycyBpbiBhIHJvdy4KKyAgJSBJdCdzIG5vdCBhIGdyZWF0IHBsYWNlLCB0aG91Z2guCisgIFxpZm51bVxsYXN0cGVuYWx0eT0xMDAwMiBccGVuYWx0eTMwMDAgXGZpCisgICUKKyAgJSBBbmQgbm93LCBpdCdzIHRpbWUgdG8gcmV1c2UgdGhlIGJvZHkgb2YgdGhlIG9yaWdpbmFsIGRlZnVuOgorICBcZXhwYW5kYWZ0ZXJcZ29iYmxlZGVmdW4jMSUKK30KK1xkZWZcZ29iYmxlZGVmdW4jMVxzdGFydGRlZnVue30KKworJSBccHJpbnRkZWZ1bmxpbmUgXGRlZmZuaGVhZGVye3RleHR9CislCitcZGVmXHByaW50ZGVmdW5saW5lIzEjMnslCisgIFxiZWdpbmdyb3VwCisgICAgJSBjYWxsIFxkZWZmbmhlYWRlcjoKKyAgICAjMSMyIFxlbmRoZWFkZXIKKyAgICAlIGNvbW1vbiBlbmRpbmc6CisgICAgXGludGVybGluZXBlbmFsdHkgPSAxMDAwMAorICAgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieSAwcHQgcGx1cyAxZmlsCisgICAgXGVuZGdyYWYKKyAgICBcbm9icmVha1x2c2tpcCAtXHBhcnNraXAKKyAgICBccGVuYWx0eSAxMDAwMiAgJSBzaWduYWwgdG8gXHN0YXJ0ZGVmdW4gYW5kIFxkb2RlZnVueAorICAgICUgU29tZSBvZiB0aGUgQGRlZnVuLXR5cGUgdGFncyBkbyBub3QgZW5hYmxlIG1hZ2ljIHBhcmVudGhlc2VzLAorICAgICUgcmVuZGVyaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2sgcmVkdW5kYW50LiAgQnV0IHdlIGRvbid0IG9wdGltaXplLgorICAgIFxjaGVja3BhcmVuY291bnRzCisgIFxlbmRncm91cAorfQorCitcZGVmXEVkZWZ1bntcZW5kZ3JhZlxtZWRicmVha30KKworJSBcbWFrZWRlZnVue2RlZmZufSBjcmVhdGVzIFxkZWZmbiwgXGRlZmZueCBhbmQgXEVkZWZmbjsKKyUgdGhlIG9ubHkgdGhpbmcgcmVtYWlubmlnIGlzIHRvIGRlZmluZSBcZGVmZm5oZWFkZXIuCislCitcZGVmXG1ha2VkZWZ1biMxeyUKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgRSMxXGVuZGNzbmFtZSA9IFxFZGVmdW4KKyAgXGVkZWZcdGVtcHtcbm9leHBhbmRcZG9tYWtlZGVmdW4KKyAgICBcbWFrZWNzbmFtZXsjMX1cbWFrZWNzbmFtZXsjMXh9XG1ha2Vjc25hbWV7IzFoZWFkZXJ9fSUKKyAgXHRlbXAKK30KKworJSBcZG9tYWtlZGVmdW4gXGRlZmZuIFxkZWZmbnggXGRlZmZuaGVhZGVyCislCislIERlZmluZSBcZGVmZm4gYW5kIFxkZWZmbngsIHdpdGhvdXQgcGFyYW1ldGVycy4KKyUgXGRlZmZuaGVhZGVyIGhhcyB0byBiZSBkZWZpbmVkIGV4cGxpY2l0bHkuCislCitcZGVmXGRvbWFrZWRlZnVuIzEjMiMzeyUKKyAgXGVudmRlZiMxeyUKKyAgICBcc3RhcnRkZWZ1bgorICAgIFxwYXJzZWFyZ3VzaW5nXGFjdGl2ZXBhcmVuc3tccHJpbnRkZWZ1bmxpbmUjM30lCisgIH0lCisgIFxkZWYjMntcZG9kZWZ1bngjMX0lCisgIFxkZWYjMyUKK30KKworJSUlIFVudHlwZWQgZnVuY3Rpb25zOgorCislIEBkZWZmbiBjYXRlZ29yeSBuYW1lIGFyZ3MKK1xtYWtlZGVmdW57ZGVmZm59e1xkZWZmbmdlbmVyYWx7fX0KKworJSBAZGVmZm4gY2F0ZWdvcnkgY2xhc3MgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZm9wfSMxIHtcZGVmb3BvbnsjMVwgXHB1dHdvcmRvbn19CisKKyUgXGRlZm9wb24ge2NhdGVnb3J5IG9ufWNsYXNzIG5hbWUgYXJncworXGRlZlxkZWZvcG9uIzEjMiB7XGRlZmZuZ2VuZXJhbHtccHV0d29yZG9uXCBcY29kZXsjMn19eyMxXCBcY29kZXsjMn19IH0KKworJSBcZGVmZm5nZW5lcmFsIHtzdWJpbmR9Y2F0ZWdvcnkgbmFtZSBhcmdzCislCitcZGVmXGRlZmZuZ2VuZXJhbCMxIzIgIzMgIzRcZW5kaGVhZGVyeyUKKyAgJSBSZW1lbWJlciB0aGF0IFxkb3N1YmluZHtmbn17Zm9vfXt9IGlzIGVxdWl2YWxlbnQgdG8gXGRvaW5ke2ZufXtmb299LgorICBcZG9zdWJpbmR7Zm59e1xjb2RleyMzfX17IzF9JQorICBcZGVmbmFtZXsjMn17fXsjM31cbWFnaWNhbXBcZGVmdW5hcmdzeyM0XHVuc2tpcH0lCit9CisKKyUlJSBUeXBlZCBmdW5jdGlvbnM6CisKKyUgQGRlZnR5cGVmbiBjYXRlZ29yeSB0eXBlIG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZ0eXBlZm59e1xkZWZ0eXBlZm5nZW5lcmFse319CisKKyUgQGRlZnR5cGVvcCBjYXRlZ29yeSBjbGFzcyB0eXBlIG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZ0eXBlb3B9IzEge1xkZWZ0eXBlb3BvbnsjMVwgXHB1dHdvcmRvbn19CisKKyUgXGRlZnR5cGVvcG9uIHtjYXRlZ29yeSBvbn1jbGFzcyB0eXBlIG5hbWUgYXJncworXGRlZlxkZWZ0eXBlb3BvbiMxIzIge1xkZWZ0eXBlZm5nZW5lcmFse1xwdXR3b3Jkb25cIFxjb2RleyMyfX17IzFcIFxjb2RleyMyfX0gfQorCislIFxkZWZ0eXBlZm5nZW5lcmFsIHtzdWJpbmR9Y2F0ZWdvcnkgdHlwZSBuYW1lIGFyZ3MKKyUKK1xkZWZcZGVmdHlwZWZuZ2VuZXJhbCMxIzIgIzMgIzQgIzVcZW5kaGVhZGVyeyUKKyAgXGRvc3ViaW5ke2ZufXtcY29kZXsjNH19eyMxfSUKKyAgXGRlZm5hbWV7IzJ9eyMzfXsjNH1cZGVmdW5hcmdzeyM1XHVuc2tpcH0lCit9CisKKyUlJSBUeXBlZCB2YXJpYWJsZXM6CisKKyUgQGRlZnR5cGV2ciBjYXRlZ29yeSB0eXBlIHZhciBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGV2cn17XGRlZnR5cGVjdmdlbmVyYWx7fX0KKworJSBAZGVmdHlwZWN2IGNhdGVnb3J5IGNsYXNzIHR5cGUgdmFyIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdHlwZWN2fSMxIHtcZGVmdHlwZWN2b2Z7IzFcIFxwdXR3b3Jkb2Z9fQorCislIFxkZWZ0eXBlY3ZvZiB7Y2F0ZWdvcnkgb2Z9Y2xhc3MgdHlwZSB2YXIgYXJncworXGRlZlxkZWZ0eXBlY3ZvZiMxIzIge1xkZWZ0eXBlY3ZnZW5lcmFse1xwdXR3b3Jkb2ZcIFxjb2RleyMyfX17IzFcIFxjb2RleyMyfX0gfQorCislIFxkZWZ0eXBlY3ZnZW5lcmFsIHtzdWJpbmR9Y2F0ZWdvcnkgdHlwZSB2YXIgYXJncworJQorXGRlZlxkZWZ0eXBlY3ZnZW5lcmFsIzEjMiAjMyAjNCAjNVxlbmRoZWFkZXJ7JQorICBcZG9zdWJpbmR7dnJ9e1xjb2RleyM0fX17IzF9JQorICBcZGVmbmFtZXsjMn17IzN9eyM0fVxkZWZ1bmFyZ3N7IzVcdW5za2lwfSUKK30KKworJSUlIFVudHlwZWQgdmFyaWFibGVzOgorCislIEBkZWZ2ciBjYXRlZ29yeSB2YXIgYXJncworXG1ha2VkZWZ1bntkZWZ2cn0jMSB7XGRlZnR5cGV2cmhlYWRlcnsjMX0ge30gfQorCislIEBkZWZjdiBjYXRlZ29yeSBjbGFzcyB2YXIgYXJncworXG1ha2VkZWZ1bntkZWZjdn0jMSB7XGRlZmN2b2Z7IzFcIFxwdXR3b3Jkb2Z9fQorCislIFxkZWZjdm9mIHtjYXRlZ29yeSBvZn1jbGFzcyB2YXIgYXJncworXGRlZlxkZWZjdm9mIzEjMiB7XGRlZnR5cGVjdm9meyMxfSMyIHt9IH0KKworJSUlIFR5cGU6CislIEBkZWZ0cCBjYXRlZ29yeSBuYW1lIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdHB9IzEgIzIgIzNcZW5kaGVhZGVyeyUKKyAgXGRvaW5ke3RwfXtcY29kZXsjMn19JQorICBcZGVmbmFtZXsjMX17fXsjMn1cZGVmdW5hcmdzeyMzXHVuc2tpcH0lCit9CisKKyUgUmVtYWluaW5nIEBkZWZ1bi1saWtlIHNob3J0Y3V0czoKK1xtYWtlZGVmdW57ZGVmdW59e1xkZWZmbmhlYWRlcntccHV0d29yZERlZmZ1bmN9IH0KK1xtYWtlZGVmdW57ZGVmbWFjfXtcZGVmZm5oZWFkZXJ7XHB1dHdvcmREZWZtYWN9IH0KK1xtYWtlZGVmdW57ZGVmc3BlY317XGRlZmZuaGVhZGVye1xwdXR3b3JkRGVmc3BlY30gfQorXG1ha2VkZWZ1bntkZWZ0eXBlZnVufXtcZGVmdHlwZWZuaGVhZGVye1xwdXR3b3JkRGVmZnVuY30gfQorXG1ha2VkZWZ1bntkZWZ2YXJ9e1xkZWZ2cmhlYWRlcntccHV0d29yZERlZnZhcn0gfQorXG1ha2VkZWZ1bntkZWZvcHR9e1xkZWZ2cmhlYWRlcntccHV0d29yZERlZm9wdH0gfQorXG1ha2VkZWZ1bntkZWZ0eXBldmFyfXtcZGVmdHlwZXZyaGVhZGVye1xwdXR3b3JkRGVmdmFyfSB9CitcbWFrZWRlZnVue2RlZm1ldGhvZH17XGRlZm9wb25ccHV0d29yZE1ldGhvZG9ufQorXG1ha2VkZWZ1bntkZWZ0eXBlbWV0aG9kfXtcZGVmdHlwZW9wb25ccHV0d29yZE1ldGhvZG9ufQorXG1ha2VkZWZ1bntkZWZpdmFyfXtcZGVmY3ZvZlxwdXR3b3JkSW5zdGFuY2VWYXJpYWJsZW9mfQorXG1ha2VkZWZ1bntkZWZ0eXBlaXZhcn17XGRlZnR5cGVjdm9mXHB1dHdvcmRJbnN0YW5jZVZhcmlhYmxlb2Z9CisKKyUgXGRlZm5hbWUsIHdoaWNoIGZvcm1hdHMgdGhlIG5hbWUgb2YgdGhlIEBkZWYgKG5vdCB0aGUgYXJncykuCislICMxIGlzIHRoZSBjYXRlZ29yeSwgc3VjaCBhcyAiRnVuY3Rpb24iLgorJSAjMiBpcyB0aGUgcmV0dXJuIHR5cGUsIGlmIGFueS4KKyUgIzMgaXMgdGhlIGZ1bmN0aW9uIG5hbWUuCislCislIFdlIGFyZSBmb2xsb3dlZCBieSAoYnV0IG5vdCBwYXNzZWQpIHRoZSBhcmd1bWVudHMsIGlmIGFueS4KKyUKK1xkZWZcZGVmbmFtZSMxIzIjM3slCisgICUgR2V0IHRoZSB2YWx1ZXMgb2YgXGxlZnRza2lwIGFuZCBccmlnaHRza2lwIGFzIHRoZXkgd2VyZSBvdXRzaWRlIHRoZSBAZGVmLi4uCisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IC1cZGVmYm9keWluZGVudAorICAlCisgICUgSG93IHdlJ2xsIGZvcm1hdCB0aGUgdHlwZSBuYW1lLiAgUHV0dGluZyBpdCBpbiBicmFja2V0cyBoZWxwcworICAlIGRpc3Rpbmd1aXNoIGl0IGZyb20gdGhlIGJvZHkgdGV4dCB0aGF0IG1heSBlbmQgdXAgb24gdGhlIG5leHQgbGluZQorICAlIGp1c3QgYmVsb3cgaXQuCisgIFxkZWZcdGVtcHsjMX0lCisgIFxzZXRib3gwPVxoYm94e1xrZXJuXGRlZmxhc3RhcmdtYXJnaW4gXGlmeFx0ZW1wXGVtcHR5XGVsc2UgW1xybVx0ZW1wXVxmaX0KKyAgJQorICAlIEZpZ3VyZSBvdXQgbGluZSBzaXplcyBmb3IgdGhlIHBhcmFncmFwaCBzaGFwZS4KKyAgJSBUaGUgZmlyc3QgbGluZSBuZWVkcyBzcGFjZSBmb3IgXGJveDA7IGJ1dCBpZiBccmlnaHRza2lwIGlzIG5vbnplcm8sCisgICUgd2UgbmVlZCBvbmx5IHNwYWNlIGZvciB0aGUgcGFydCBvZiBcYm94MCB3aGljaCBleGNlZWRzIGl0OgorICBcZGltZW4wPVxoc2l6ZSAgXGFkdmFuY2VcZGltZW4wIGJ5IC1cd2QwICBcYWR2YW5jZVxkaW1lbjAgYnkgXHJpZ2h0c2tpcAorICAlIFRoZSBjb250aW51YXRpb25zOgorICBcZGltZW4yPVxoc2l6ZSAgXGFkdmFuY2VcZGltZW4yIGJ5IC1cZGVmYXJnc2luZGVudAorICAlIChwbGFpbi50ZXggc2F5cyB0aGF0IFxkaW1lbjEgc2hvdWxkIGJlIHVzZWQgb25seSBhcyBnbG9iYWwuKQorICBccGFyc2hhcGUgMiAwaW4gXGRpbWVuMCBcZGVmYXJnc2luZGVudCBcZGltZW4yCisgICUKKyAgJSBQdXQgdGhlIHR5cGUgbmFtZSB0byB0aGUgcmlnaHQgbWFyZ2luLgorICBcbm9pbmRlbnQKKyAgXGhib3ggdG8gMHB0eyUKKyAgICBcaGZpbFxib3gwIFxrZXJuLVxoc2l6ZQorICAgICUgXGhzaXplIGhhcyB0byBiZSBzaG9ydGVuZWQgdGhpcyB3YXk6CisgICAgXGtlcm5cbGVmdHNraXAKKyAgICAlIEludGVudGlvbmFsbHkgZG8gbm90IHJlc3BlY3QgXHJpZ2h0c2tpcCwgc2luY2Ugd2UgbmVlZCB0aGUgc3BhY2UuCisgIH0lCisgICUKKyAgJSBBbGxvdyBhbGwgbGluZXMgdG8gYmUgdW5kZXJmdWxsIHdpdGhvdXQgY29tcGxhaW50OgorICBcdG9sZXJhbmNlPTEwMDAwIFxoYmFkbmVzcz0xMDAwMAorICBcZXhkZW50YW1vdW50PVxkZWZib2R5aW5kZW50CisgIHslCisgICAgJSBkZWZ1biBmb250cy4gV2UgdXNlIHR5cGV3cml0ZXIgYnkgZGVmYXVsdCAodXNlZCB0byBiZSBib2xkKSBiZWNhdXNlOgorICAgICUgLiB3ZSdyZSBwcmludGluZyBpZGVudGlmaWVycywgdGhleSBzaG91bGQgYmUgaW4gdHQgaW4gcHJpbmNpcGxlLgorICAgICUgLiBpbiBsYW5ndWFnZXMgd2l0aCBtYW55IGFjY2VudHMsIHN1Y2ggYXMgQ3plY2ggb3IgRnJlbmNoLCBpdCdzCisgICAgJSAgIGNvbW1vbiB0byBsZWF2ZSBhY2NlbnRzIG9mZiBpZGVudGlmaWVycy4gIFRoZSByZXN1bHQgbG9va3Mgb2sgaW4KKyAgICAlICAgdHQsIGJ1dCBleGNlZWRpbmdseSBzdHJhbmdlIGluIHJtLgorICAgICUgLiB3ZSBkb24ndCB3YW50IC0tIGFuZCAtLS0gdG8gYmUgdHJlYXRlZCBhcyBsaWdhdHVyZXMuCisgICAgJSAuIHRoaXMgc3RpbGwgZG9lcyBub3QgZml4IHRoZSA/YCBhbmQgIWAgbGlnYXR1cmVzLCBidXQgc28gZmFyIG5vCisgICAgJSAgIG9uZSBoYXMgbWFkZSBpZGVudGlmaWVycyB1c2luZyB0aGVtIDopLgorICAgIFxkZiBcdHQKKyAgICBcZGVmXHRlbXB7IzJ9JSByZXR1cm4gdmFsdWUgdHlwZQorICAgIFxpZnhcdGVtcFxlbXB0eVxlbHNlIFx0Y2xvc2V7XHRlbXB9IFxmaQorICAgICMzJSBvdXRwdXQgZnVuY3Rpb24gbmFtZQorICB9JQorICB7XHJtXGVuc2tpcH0lIGhza2lwIDAuNSBlbSBvZiBcdGVucm0KKyAgJQorICBcYm9sZGJyYXgKKyAgJSBhcmd1bWVudHMgd2lsbCBiZSBvdXRwdXQgbmV4dCwgaWYgYW55LgorfQorCislIFByaW50IGFyZ3VtZW50cyBpbiBzbGFudGVkIHJvbWFuIChub3QgdHRzbCksIGluY29uc2lzdGVudGx5IHdpdGggdXNpbmcKKyUgdHQgZm9yIHRoZSBuYW1lLiAgVGhpcyBpcyBiZWNhdXNlIGxpdGVyYWwgdGV4dCBpcyBzb21ldGltZXMgbmVlZGVkIGluCislIHRoZSBhcmd1bWVudCBsaXN0IChncm9mZiBtYW51YWwpLCBhbmQgdHRzbCBhbmQgdHQgYXJlIG5vdCB2ZXJ5CislIGRpc3Rpbmd1aXNoYWJsZS4gIFByZXZlbnQgaHlwaGVuYXRpb24gYXQgYC0nIGNoYXJzLgorJQorXGRlZlxkZWZ1bmFyZ3MjMXslCisgICUgdXNlIHNsIGJ5IGRlZmF1bHQgKG5vdCB0dHNsKSwKKyAgJSB0dCBmb3IgdGhlIG5hbWVzLgorICBcZGYgXHNsIFxoeXBoZW5jaGFyXGZvbnQ9MAorICAlCisgICUgT24gdGhlIG90aGVyIGhhbmQsIGlmIGFuIGFyZ3VtZW50IGhhcyB0d28gZGFzaGVzIChmb3IgaW5zdGFuY2UpLCB3ZQorICAlIHdhbnQgYSB3YXkgdG8gZ2V0IHR0c2wuICBMZXQncyB0cnkgQHZhciBmb3IgdGhhdC4KKyAgXGxldFx2YXI9XHR0c2xhbnRlZAorICAjMSUKKyAgXHNsXGh5cGhlbmNoYXJcZm9udD00NQorfQorCislIFdlIHdhbnQgKCkmW10gdG8gcHJpbnQgc3BlY2lhbGx5IG9uIHRoZSBkZWZ1biBsaW5lLgorJQorXGRlZlxhY3RpdmVwYXJlbnN7JQorICBcY2F0Y29kZWBcKD1cYWN0aXZlIFxjYXRjb2RlYFwpPVxhY3RpdmUKKyAgXGNhdGNvZGVgXFs9XGFjdGl2ZSBcY2F0Y29kZWBcXT1cYWN0aXZlCisgIFxjYXRjb2RlYFwmPVxhY3RpdmUKK30KKworJSBNYWtlIGNvbnRyb2wgc2VxdWVuY2VzIHdoaWNoIGFjdCBsaWtlIG5vcm1hbCBwYXJlbnRoZXNpcyBjaGFycy4KK1xsZXRcbHBhcmVuID0gKCBcbGV0XHJwYXJlbiA9ICkKKworJSBCZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBkZWZpbml0aW9uIGZvciBgKCcsIGV0Yy4gIEZvciBleGFtcGxlLAorJSBpZiB0aGUgZm4gbmFtZSBoYXMgcGFyZW5zIGluIGl0LCBcYm9sZGJyYXggd2lsbCBub3QgYmUgaW4gZWZmZWN0IHlldCwKKyUgc28gVGVYIHdvdWxkIG90aGVyd2lzZSBjb21wbGFpbiBhYm91dCB1bmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZS4KK3sKKyAgXGFjdGl2ZXBhcmVucworICBcZ2xvYmFsXGxldCg9XGxwYXJlbiBcZ2xvYmFsXGxldCk9XHJwYXJlbgorICBcZ2xvYmFsXGxldFs9XGxicmFjayBcZ2xvYmFsXGxldF09XHJicmFjaworICBcZ2xvYmFsXGxldCYgPSBcJgorCisgIFxnZGVmXGJvbGRicmF4e1xsZXQoPVxvcG5yXGxldCk9XGNsbnJcbGV0Wz1cbGJyYlxsZXRdPVxyYnJifQorICBcZ2RlZlxtYWdpY2FtcHtcbGV0Jj1cYW1wcm19Cit9CisKK1xuZXdjb3VudFxwYXJlbmNvdW50CisKKyUgSWYgd2UgZW5jb3VudGVyICZmb28sIHRoZW4gdHVybiBvbiAoKS1oYWNraW5nIGFmdGVyd2FyZHMKK1xuZXdpZlxpZmFtcHNlZW4KK1xkZWZcYW1wcm0jMSB7XGFtcHNlZW50cnVle1xiZlwmIzEgfX0KKworXGRlZlxwYXJlbmZvbnR7JQorICBcaWZhbXBzZWVuCisgICAgJSBBdCB0aGUgZmlyc3QgbGV2ZWwsIHByaW50IHBhcmVucyBpbiByb21hbiwKKyAgICAlIG90aGVyd2lzZSB1c2UgdGhlIGRlZmF1bHQgZm9udC4KKyAgICBcaWZudW0gXHBhcmVuY291bnQ9MSBccm0gXGZpCisgIFxlbHNlCisgICAgJSBUaGUgXHNmIHBhcmVucyAoaW4gXGJvbGRicmF4KSBhY3R1YWxseSBhcmUgYSBsaXR0bGUgYm9sZGVyIHRoYW4KKyAgICAlIHRoZSBjb250YWluZWQgdGV4dC4gIFRoaXMgaXMgZXNwZWNpYWxseSBuZWVkZWQgZm9yIFsgYW5kIF0gLgorICAgIFxzZgorICBcZmkKK30KK1xkZWZcaW5maXJzdGxldmVsIzF7JQorICBcaWZhbXBzZWVuCisgICAgXGlmbnVtXHBhcmVuY291bnQ9MQorICAgICAgIzElCisgICAgXGZpCisgIFxmaQorfQorXGRlZlxiZmFmdGVyd29yZCMxIHsjMSBcYmZ9CisKK1xkZWZcb3BucnslCisgIFxnbG9iYWxcYWR2YW5jZVxwYXJlbmNvdW50IGJ5IDEKKyAge1xwYXJlbmZvbnQofSUKKyAgXGluZmlyc3RsZXZlbCBcYmZhZnRlcndvcmQKK30KK1xkZWZcY2xucnslCisgIHtccGFyZW5mb250KX0lCisgIFxpbmZpcnN0bGV2ZWwgXHNsCisgIFxnbG9iYWxcYWR2YW5jZVxwYXJlbmNvdW50IGJ5IC0xCit9CisKK1xuZXdjb3VudFxicmFja2NvdW50CitcZGVmXGxicmJ7JQorICBcZ2xvYmFsXGFkdmFuY2VcYnJhY2tjb3VudCBieSAxCisgIHtcYmZbfSUKK30KK1xkZWZccmJyYnslCisgIHtcYmZdfSUKKyAgXGdsb2JhbFxhZHZhbmNlXGJyYWNrY291bnQgYnkgLTEKK30KKworXGRlZlxjaGVja3BhcmVuY291bnRzeyUKKyAgXGlmbnVtXHBhcmVuY291bnQ9MCBcZWxzZSBcYmFkcGFyZW5jb3VudCBcZmkKKyAgXGlmbnVtXGJyYWNrY291bnQ9MCBcZWxzZSBcYmFkYnJhY2tjb3VudCBcZmkKK30KK1xkZWZcYmFkcGFyZW5jb3VudHslCisgIFxlcnJtZXNzYWdle1VuYmFsYW5jZWQgcGFyZW50aGVzZXMgaW4gQGRlZn0lCisgIFxnbG9iYWxccGFyZW5jb3VudD0wCit9CitcZGVmXGJhZGJyYWNrY291bnR7JQorICBcZXJybWVzc2FnZXtVbmJhbGFuY2VkIHNxdWFyZSBicmFjZXMgaW4gQGRlZn0lCisgIFxnbG9iYWxcYnJhY2tjb3VudD0wCit9CisKKworXG1lc3NhZ2V7bWFjcm9zLH0KKyUgQG1hY3JvLgorCislIFRvIGRvIHRoaXMgcmlnaHQgd2UgbmVlZCBhIGZlYXR1cmUgb2YgZS1UZVgsIFxzY2FudG9rZW5zLAorJSB3aGljaCB3ZSBhcnJhbmdlIHRvIGVtdWxhdGUgd2l0aCBhIHRlbXBvcmFyeSBmaWxlIGluIG9yZGluYXJ5IFRlWC4KK1xpZnhcZVRlWHZlcnNpb25cdW5kZWZpbmVkCisgIFxuZXd3cml0ZVxtYWNzY3JpYmJsZQorICBcZGVmXHNjYW50b2tlbnMjMXslCisgICAgXHRva3MwPXsjMX0lCisgICAgXGltbWVkaWF0ZVxvcGVub3V0XG1hY3NjcmliYmxlPVxqb2JuYW1lLnRtcAorICAgIFxpbW1lZGlhdGVcd3JpdGVcbWFjc2NyaWJibGV7XHRoZVx0b2tzMH0lCisgICAgXGltbWVkaWF0ZVxjbG9zZW91dFxtYWNzY3JpYmJsZQorICAgIFxpbnB1dCBcam9ibmFtZS50bXAKKyAgfQorXGZpCisKK1xkZWZcc2Nhbm1hY3JvIzF7JQorICBcYmVnaW5ncm91cAorICAgIFxuZXdsaW5lY2hhcmBcXl5NCisgICAgXGxldFx4ZWF0c3BhY2VzXGVhdHNwYWNlcworICAgICUgVW5kbyBjYXRjb2RlIGNoYW5nZXMgb2YgXHN0YXJ0Y29udGVudHMgYW5kIFxkb3ByaW50aW5kZXgKKyAgICAlIFdoZW4gY2FsbGVkIGZyb20gQGluc2VydGNvcHlpbmcgb3IgKHNob3J0KWNhcHRpb24sIHdlIG5lZWQgYWN0aXZlCisgICAgJSBiYWNrc2xhc2ggdG8gZ2V0IGl0IHByaW50ZWQgY29ycmVjdGx5LiAgUHJldmlvdXNseSwgd2UgaGFkCisgICAgJSBcY2F0Y29kZWBcXD1cb3RoZXIgaW5zdGVhZC4gIFdlJ2xsIHNlZSB3aGV0aGVyIGEgcHJvYmxlbSBhcHBlYXJzCisgICAgJSB3aXRoIG1hY3JvIGV4cGFuc2lvbi4JCQkJLS1rYXNhbCwgMTlhdWcwNAorICAgIFxjYXRjb2RlYFxAPTAgXGNhdGNvZGVgXFw9XGFjdGl2ZSBcZXNjYXBlY2hhcj1gXEAKKyAgICAlIC4uLiBhbmQgXGV4YW1wbGUKKyAgICBcc3BhY2Vpc3NwYWNlCisgICAgJQorICAgICUgQXBwZW5kIFxlbmRpbnB1dCB0byBtYWtlIHN1cmUgdGhhdCBUZVggZG9lcyBub3Qgc2VlIHRoZSBlbmRpbmcgbmV3bGluZS4KKyAgICAlCisgICAgJSBJJ3ZlIHZlcmlmaWVkIHRoYXQgaXQgaXMgbmVjZXNzYXJ5IGJvdGggZm9yIGUtVGVYIGFuZCBmb3Igb3JkaW5hcnkgVGVYCisgICAgJQkJCQkJCQktLWthc2FsLCAyOW5vdjAzCisgICAgXHNjYW50b2tlbnN7IzFcZW5kaW5wdXR9JQorICBcZW5kZ3JvdXAKK30KKworXGRlZlxzY2FuZXhwIzF7JQorICBcZWRlZlx0ZW1we1xub2V4cGFuZFxzY2FubWFjcm97IzF9fSUKKyAgXHRlbXAKK30KKworXG5ld2NvdW50XHBhcmFtbm8gICAlIENvdW50IG9mIHBhcmFtZXRlcnMKK1xuZXd0b2tzXG1hY25hbWUgICAgJSBNYWNybyBuYW1lCitcbmV3aWZcaWZyZWN1cnNpdmUgICUgSXMgaXQgcmVjdXJzaXZlPworCislIExpc3Qgb2YgYWxsIGRlZmluZWQgbWFjcm9zIGluIHRoZSBmb3JtCislICAgIFxkZWZpbmVkdW1teXdvcmRcbWFjcm8xXGRlZmluZWR1bW15d29yZFxtYWNybzIuLi4KKyUgQ3VycmVudGx5IGlzIGFsc28gY29udGFpbnMgYWxsIEBhbGlhc2VzOyB0aGUgbGlzdCBjYW4gYmUgc3BsaXQKKyUgaWYgdGhlcmUgaXMgYSBuZWVkLgorXGRlZlxtYWNyb2xpc3R7fQorCislIEFkZCB0aGUgbWFjcm8gdG8gXG1hY3JvbGlzdAorXGRlZlxhZGR0b21hY3JvbGlzdCMxe1xleHBhbmRhZnRlciBcYWRkdG9tYWNyb2xpc3R4eHggXGNzbmFtZSMxXGVuZGNzbmFtZX0KK1xkZWZcYWRkdG9tYWNyb2xpc3R4eHgjMXslCisgICAgIFx0b2tzMCA9IFxleHBhbmRhZnRlcntcbWFjcm9saXN0XGRlZmluZWR1bW15d29yZCMxfSUKKyAgICAgXHhkZWZcbWFjcm9saXN0e1x0aGVcdG9rczB9JQorfQorCislIFV0aWxpdHkgcm91dGluZXMuCislIFRoaXMgZG9lcyBcbGV0ICMxID0gIzIsIHdpdGggXGNzbmFtZXM7IHRoYXQgaXMsCislICAgXGxldCBcY3NuYW1lIzFcZW5kY3NuYW1lID0gXGNzbmFtZSMyXGVuZGNzbmFtZQorJSAoZXhjZXB0IG9mIGNvdXJzZSB3ZSBoYXZlIHRvIHBsYXkgZXhwYW5zaW9uIGdhbWVzKS4KKyUgCitcZGVmXGNzbGV0IzEjMnslCisgIFxleHBhbmRhZnRlclxsZXQKKyAgXGNzbmFtZSMxXGV4cGFuZGFmdGVyXGVuZGNzbmFtZQorICBcY3NuYW1lIzJcZW5kY3NuYW1lCit9CisKKyUgVHJpbSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgb2ZmIGEgc3RyaW5nLgorJSBDb25jZXB0cyBmcm9tIGFyby1iZW5kIHByb2JsZW0gMTUgKHNlZSBDVEFOKS4KK3tcY2F0Y29kZWBcQD0xMQorXGdkZWZcZWF0c3BhY2VzICMxe1xleHBhbmRhZnRlclx0cmltQFxleHBhbmRhZnRlcnsjMSB9fQorXGdkZWZcdHJpbUAgIzF7XHRyaW1AQCBAIzEgQCAjMSBAIEBAfQorXGdkZWZcdHJpbUBAICMxQCAjMkAgIzNAQHtcdHJpbUBAQFxlbXB0eSAjMiBAfQorXGRlZlx1bmJyYWNlIzF7IzF9CitcdW5icmFjZXtcZ2RlZlx0cmltQEBAICMxIH0gIzJAeyMxfQorfQorCislIFRyaW0gYSBzaW5nbGUgdHJhaWxpbmcgXl5NIG9mZiBhIHN0cmluZy4KK3tcY2F0Y29kZWBcXl5NPVxvdGhlciBcY2F0Y29kZWBcUT0zJQorXGdkZWZcZWF0Y3IgIzF7XGVhdGNyYSAjMVFeXk1RfSUKK1xnZGVmXGVhdGNyYSMxXl5NUXtcZWF0Y3JiIzFRfSUKK1xnZGVmXGVhdGNyYiMxUSMyUXsjMX0lCit9CisKKyUgTWFjcm8gYm9kaWVzIGFyZSBhYnNvcmJlZCBhcyBhbiBhcmd1bWVudCBpbiBhIGNvbnRleHQgd2hlcmUKKyUgYWxsIGNoYXJhY3RlcnMgYXJlIGNhdGNvZGUgMTAsIDExIG9yIDEyLCBleGNlcHQgXCB3aGljaCBpcyBhY3RpdmUKKyUgKGFzIGluIG5vcm1hbCB0ZXhpbmZvKS4gSXQgaXMgbmVjZXNzYXJ5IHRvIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZiBcLgorCislIEl0J3MgbmVjZXNzYXJ5IHRvIGhhdmUgaGFyZCBDUnMgd2hlbiB0aGUgbWFjcm8gaXMgZXhlY3V0ZWQuIFRoaXMgaXMKKyUgZG9uZSBieSAgbWFraW5nIF5eTSAoXGVuZGxpbmVjaGFyKSBjYXRjb2RlIDEyIHdoZW4gcmVhZGluZyB0aGUgbWFjcm8KKyUgYm9keSwgYW5kIHRoZW4gbWFraW5nIGl0IHRoZSBcbmV3bGluZWNoYXIgaW4gXHNjYW5tYWNyby4KKworXGRlZlxzY2FuY3R4dHslCisgIFxjYXRjb2RlYFwiPVxvdGhlcgorICBcY2F0Y29kZWBcKz1cb3RoZXIKKyAgXGNhdGNvZGVgXDw9XG90aGVyCisgIFxjYXRjb2RlYFw+PVxvdGhlcgorICBcY2F0Y29kZWBcQD1cb3RoZXIKKyAgXGNhdGNvZGVgXF49XG90aGVyCisgIFxjYXRjb2RlYFxfPVxvdGhlcgorICBcY2F0Y29kZWBcfD1cb3RoZXIKKyAgXGNhdGNvZGVgXH49XG90aGVyCit9CisKK1xkZWZcc2NhbmFyZ2N0eHR7JQorICBcc2NhbmN0eHQKKyAgXGNhdGNvZGVgXFw9XG90aGVyCisgIFxjYXRjb2RlYFxeXk09XG90aGVyCit9CisKK1xkZWZcbWFjcm9ib2R5Y3R4dHslCisgIFxzY2FuY3R4dAorICBcY2F0Y29kZWBcez1cb3RoZXIKKyAgXGNhdGNvZGVgXH09XG90aGVyCisgIFxjYXRjb2RlYFxeXk09XG90aGVyCisgIFx1c2VtYm9keWJhY2tzbGFzaAorfQorCitcZGVmXG1hY3JvYXJnY3R4dHslCisgIFxzY2FuY3R4dAorICBcY2F0Y29kZWBcXD1cb3RoZXIKK30KKworJSBcbWJvZHliYWNrc2xhc2ggaXMgdGhlIGRlZmluaXRpb24gb2YgXCBpbiBAbWFjcm8gYm9kaWVzLgorJSBJdCBtYXBzIFxmb29cID0+IFxjc25hbWUgbWFjYXJnLmZvb1xlbmRjc25hbWUgPT4gI04KKyUgd2hlcmUgTiBpcyB0aGUgbWFjcm8gcGFyYW1ldGVyIG51bWJlci4KKyUgV2UgZGVmaW5lIFxjc25hbWUgbWFjYXJnLlxlbmRjc25hbWUgdG8gYmUgXHJlYWxiYWNrc2xhc2gsIHNvCislIFxcIGluIG1hY3JvIHJlcGxhY2VtZW50IHRleHQgZ2V0cyB5b3UgYSBiYWNrc2xhc2guCisKK3tcY2F0Y29kZWBAPTAgQGNhdGNvZGVgQFw9QGFjdGl2ZQorIEBnZGVmQHVzZW1ib2R5YmFja3NsYXNoe0BsZXRcPUBtYm9keWJhY2tzbGFzaH0KKyBAZ2RlZkBtYm9keWJhY2tzbGFzaCMxXHtAY3NuYW1lIG1hY2FyZy4jMUBlbmRjc25hbWV9Cit9CitcZXhwYW5kYWZ0ZXJcZGVmXGNzbmFtZSBtYWNhcmcuXGVuZGNzbmFtZXtccmVhbGJhY2tzbGFzaH0KKworXGRlZlxtYWNyb3tccmVjdXJzaXZlZmFsc2VccGFyc2VhcmdcbWFjcm94eHh9CitcZGVmXHJtYWNyb3tccmVjdXJzaXZldHJ1ZVxwYXJzZWFyZ1xtYWNyb3h4eH0KKworXGRlZlxtYWNyb3h4eCMxeyUKKyAgXGdldGFyZ3N7IzF9JSAgICAgICAgICAgbm93IFxtYWNuYW1lIGlzIHRoZSBtYWNuYW1lIGFuZCBcYXJnbCB0aGUgYXJnbGlzdAorICBcaWZ4XGFyZ2xcZW1wdHkgICAgICAgJSBubyBhcmd1bWVudHMKKyAgICAgXHBhcmFtbm89MCUKKyAgXGVsc2UKKyAgICAgXGV4cGFuZGFmdGVyXHBhcnNlbWFyZ2RlZiBcYXJnbDslCisgIFxmaQorICBcaWYxXGNzbmFtZSBpc21hY3JvLlx0aGVcbWFjbmFtZVxlbmRjc25hbWUKKyAgICAgXG1lc3NhZ2V7V2FybmluZzogcmVkZWZpbmluZyBcdGhlXG1hY25hbWV9JQorICBcZWxzZQorICAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBcdGhlXG1hY25hbWVcZW5kY3NuYW1lIFxyZWxheAorICAgICBcZWxzZSBcZXJybWVzc2FnZXtNYWNybyBuYW1lIFx0aGVcbWFjbmFtZVxzcGFjZSBhbHJlYWR5IGRlZmluZWR9XGZpCisgICAgIFxnbG9iYWxcY3NsZXR7bWFjc2F2ZS5cdGhlXG1hY25hbWV9e1x0aGVcbWFjbmFtZX0lCisgICAgIFxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBpc21hY3JvLlx0aGVcbWFjbmFtZVxlbmRjc25hbWU9MSUKKyAgICAgXGFkZHRvbWFjcm9saXN0e1x0aGVcbWFjbmFtZX0lCisgIFxmaQorICBcYmVnaW5ncm91cCBcbWFjcm9ib2R5Y3R4dAorICBcaWZyZWN1cnNpdmUgXGV4cGFuZGFmdGVyXHBhcnNlcm1hY2JvZHkKKyAgXGVsc2UgXGV4cGFuZGFmdGVyXHBhcnNlbWFjYm9keQorICBcZml9CisKK1xwYXJzZWFyZ2RlZlx1bm1hY3JveyUKKyAgXGlmMVxjc25hbWUgaXNtYWNyby4jMVxlbmRjc25hbWUKKyAgICBcZ2xvYmFsXGNzbGV0eyMxfXttYWNzYXZlLiMxfSUKKyAgICBcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldCBcY3NuYW1lIGlzbWFjcm8uIzFcZW5kY3NuYW1lPTAlCisgICAgJSBSZW1vdmUgdGhlIG1hY3JvIG5hbWUgZnJvbSBcbWFjcm9saXN0OgorICAgIFxiZWdpbmdyb3VwCisgICAgICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSMxXGVuZGNzbmFtZSBccmVsYXgKKyAgICAgIFxsZXRcZGVmaW5lZHVtbXl3b3JkXHVubWFjcm9kbworICAgICAgXHhkZWZcbWFjcm9saXN0e1xtYWNyb2xpc3R9JQorICAgIFxlbmRncm91cAorICBcZWxzZQorICAgIFxlcnJtZXNzYWdle01hY3JvICMxIG5vdCBkZWZpbmVkfSUKKyAgXGZpCit9CisKKyUgQ2FsbGVkIGJ5IFxkbyBmcm9tIFxkb3VubWFjcm8gb24gZWFjaCBtYWNyby4gIFRoZSBpZGVhIGlzIHRvIG9taXQgYW55CislIG1hY3JvIGRlZmluaXRpb25zIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gXHJlbGF4LgorJQorXGRlZlx1bm1hY3JvZG8jMXslCisgIFxpZnggIzFccmVsYXgKKyAgICAlIHJlbW92ZSB0aGlzCisgIFxlbHNlCisgICAgXG5vZXhwYW5kXGRlZmluZWR1bW15d29yZCBcbm9leHBhbmQjMSUKKyAgXGZpCit9CisKKyUgVGhpcyBtYWtlcyB1c2Ugb2YgdGhlIG9ic2N1cmUgZmVhdHVyZSB0aGF0IGlmIHRoZSBsYXN0IHRva2VuIG9mIGEKKyUgPHBhcmFtZXRlciBsaXN0PiBpcyAjLCB0aGVuIHRoZSBwcmVjZWRpbmcgYXJndW1lbnQgaXMgZGVsaW1pdGVkIGJ5CislIGFuIG9wZW5pbmcgYnJhY2UsIGFuZCB0aGF0IG9wZW5pbmcgYnJhY2UgaXMgbm90IGNvbnN1bWVkLgorXGRlZlxnZXRhcmdzIzF7XGdldGFyZ3N4eHgjMXt9fQorXGRlZlxnZXRhcmdzeHh4IzEje1xnZXRtYWNuYW1lICMxIFxyZWxheFxnZXRtYWNhcmdzfQorXGRlZlxnZXRtYWNuYW1lICMxICMyXHJlbGF4e1xtYWNuYW1lPXsjMX19CitcZGVmXGdldG1hY2FyZ3MjMXtcZGVmXGFyZ2x7IzF9fQorCislIFBhcnNlIHRoZSBvcHRpb25hbCB7cGFyYW1zfSBsaXN0LiAgU2V0IHVwIFxwYXJhbW5vIGFuZCBccGFyYW1saXN0CislIHNvIFxkZWZtYWNybyBrbm93cyB3aGF0IHRvIGRvLiAgRGVmaW5lIFxtYWNhcmcuYmxhaCBmb3IgZWFjaCBibGFoCislIGluIHRoZSBwYXJhbXMgbGlzdCwgdG8gYmUgIyNOIHdoZXJlIE4gaXMgdGhlIHBvc2l0aW9uIGluIHRoYXQgbGlzdC4KKyUgVGhhdCBnZXRzIHVzZWQgYnkgXG1ib2R5YmFja3NsYXNoIChhYm92ZSkuCisKKyUgV2UgbmVlZCB0byBnZXQgYG1hY3JvIHBhcmFtZXRlciBjaGFyICMnIGludG8gc2V2ZXJhbCBkZWZpbml0aW9ucy4KKyUgVGhlIHRlY2huaXF1ZSB1c2VkIGlzIHN0b2xlbiBmcm9tIExhVGVYOiAgbGV0IFxoYXNoIGJlIHNvbWV0aGluZworJSB1bmV4cGFuZGFibGUsIGluc2VydCB0aGF0IHdoZXJldmVyIHlvdSBuZWVkIGEgIywgYW5kIHRoZW4gcmVkZWZpbmUKKyUgaXQgdG8gIyBqdXN0IGJlZm9yZSB1c2luZyB0aGUgdG9rZW4gbGlzdCBwcm9kdWNlZC4KKyUKKyUgVGhlIHNhbWUgdGVjaG5pcXVlIGlzIHVzZWQgdG8gcHJvdGVjdCBcZWF0c3BhY2VzIHRpbGwganVzdCBiZWZvcmUKKyUgdGhlIG1hY3JvIGlzIHVzZWQuCisKK1xkZWZccGFyc2VtYXJnZGVmIzE7e1xwYXJhbW5vPTBcZGVmXHBhcmFtbGlzdHt9JQorICAgICAgICBcbGV0XGhhc2hccmVsYXhcbGV0XHhlYXRzcGFjZXNccmVsYXhccGFyc2VtYXJnZGVmeHh4IzEsOyx9CitcZGVmXHBhcnNlbWFyZ2RlZnh4eCMxLHslCisgIFxpZiMxO1xsZXRcbmV4dD1ccmVsYXgKKyAgXGVsc2UgXGxldFxuZXh0PVxwYXJzZW1hcmdkZWZ4eHgKKyAgICBcYWR2YW5jZVxwYXJhbW5vIGJ5IDElCisgICAgXGV4cGFuZGFmdGVyXGVkZWZcY3NuYW1lIG1hY2FyZy5cZWF0c3BhY2VzeyMxfVxlbmRjc25hbWUKKyAgICAgICAge1x4ZWF0c3BhY2Vze1xoYXNoXHRoZVxwYXJhbW5vfX0lCisgICAgXGVkZWZccGFyYW1saXN0e1xwYXJhbWxpc3RcaGFzaFx0aGVccGFyYW1ubyx9JQorICBcZmlcbmV4dH0KKworJSBUaGVzZSB0d28gY29tbWFuZHMgcmVhZCByZWN1cnNpdmUgYW5kIG5vbnJlY3Vyc2l2ZSBtYWNybyBib2RpZXMuCislIChUaGV5J3JlIGRpZmZlcmVudCBzaW5jZSByZWMgYW5kIG5vbnJlYyBtYWNyb3MgZW5kIGRpZmZlcmVudGx5LikKKworXGxvbmdcZGVmXHBhcnNlbWFjYm9keSMxQGVuZCBtYWNybyUKK3tceGRlZlx0ZW1we1xlYXRjcnsjMX19XGVuZGdyb3VwXGRlZm1hY3JvfSUKK1xsb25nXGRlZlxwYXJzZXJtYWNib2R5IzFAZW5kIHJtYWNybyUKK3tceGRlZlx0ZW1we1xlYXRjcnsjMX19XGVuZGdyb3VwXGRlZm1hY3JvfSUKKworJSBUaGlzIGRlZmluZXMgdGhlIG1hY3JvIGl0c2VsZi4gVGhlcmUgYXJlIHNpeCBjYXNlczogcmVjdXJzaXZlIGFuZAorJSBub25yZWN1cnNpdmUgbWFjcm9zIG9mIHplcm8sIG9uZSwgYW5kIG1hbnkgYXJndW1lbnRzLgorJSBNdWNoIG1hZ2ljIHdpdGggXGV4cGFuZGFmdGVyIGhlcmUuCislIFx4ZGVmIGlzIHVzZWQgc28gdGhhdCBtYWNybyBkZWZpbml0aW9ucyB3aWxsIHN1cnZpdmUgdGhlIGZpbGUKKyUgdGhleSdyZSBkZWZpbmVkIGluOyBAaW5jbHVkZSByZWFkcyB0aGUgZmlsZSBpbnNpZGUgYSBncm91cC4KK1xkZWZcZGVmbWFjcm97JQorICBcbGV0XGhhc2g9IyMlIGNvbnZlcnQgcGxhY2Vob2xkZXJzIHRvIG1hY3JvIHBhcmFtZXRlciBjaGFycworICBcaWZyZWN1cnNpdmUKKyAgICBcaWZjYXNlXHBhcmFtbm8KKyAgICAlIDAKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfX0lCisgICAgXG9yICUgMQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgXG5vZXhwYW5kXGJyYWNlb3JsaW5lCisgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUjIzF7JQorICAgICAgICAgXGVncm91cFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9fSUKKyAgICBcZWxzZSAlIG1hbnkKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKKyAgICAgICAgIFxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lfSUKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWUjIzF7JQorICAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSAjIzEsfSUKKyAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgorICAgICAgXGV4cGFuZGFmdGVyXHhkZWYKKyAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgorICAgICAgICBcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUKKyAgICAgICAgICBccGFyYW1saXN0e1xlZ3JvdXBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfX0lCisgICAgXGZpCisgIFxlbHNlCisgICAgXGlmY2FzZVxwYXJhbW5vCisgICAgJSAwCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgXG5vZXhwYW5kXG5vcmVjdXJzZXtcdGhlXG1hY25hbWV9JQorICAgICAgICBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfVxlZ3JvdXB9JQorICAgIFxvciAlIDEKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKKyAgICAgICAgIFxub2V4cGFuZFxicmFjZW9ybGluZQorICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lfSUKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lIyMxeyUKKyAgICAgICAgXGVncm91cAorICAgICAgICBcbm9leHBhbmRcbm9yZWN1cnNle1x0aGVcbWFjbmFtZX0lCisgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9XGVncm91cH0lCisgICAgXGVsc2UgJSBtYW55CisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0CisgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lIyMxeyUKKyAgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUgIyMxLH0lCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgIFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZQorICAgICAgXHBhcmFtbGlzdHslCisgICAgICAgICAgXGVncm91cAorICAgICAgICAgIFxub2V4cGFuZFxub3JlY3Vyc2V7XHRoZVxtYWNuYW1lfSUKKyAgICAgICAgICBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfVxlZ3JvdXB9JQorICAgIFxmaQorICBcZml9CisKK1xkZWZcbm9yZWN1cnNlIzF7XGJncm91cFxjc2xldHsjMX17bWFjc2F2ZS4jMX19CisKKyUgXGJyYWNlb3JsaW5lIGRlY2lkZXMgd2hldGhlciB0aGUgbmV4dCBub253aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBhCislIHsuICBJZiBzbyBpdCByZWFkcyB1cCB0byB0aGUgY2xvc2luZyB9LCBpZiBub3QsIGl0IHJlYWRzIHRoZSB3aG9sZQorJSBsaW5lLiAgV2hhdGV2ZXIgd2FzIHJlYWQgaXMgdGhlbiBmZWQgdG8gdGhlIG5leHQgY29udHJvbCBzZXF1ZW5jZQorJSBhcyBhbiBhcmd1bWVudCAoYnkgXHBhcnNlYnJhY2Ugb3IgXHBhcnNlYXJnKQorXGRlZlxicmFjZW9ybGluZSMxe1xsZXRcbmV4dD0jMVxmdXR1cmVsZXRcbmNoYXJcYnJhY2VvcmxpbmV4eHh9CitcZGVmXGJyYWNlb3JsaW5leHh4eyUKKyAgXGlmeFxuY2hhclxiZ3JvdXBcZWxzZQorICAgIFxleHBhbmRhZnRlclxwYXJzZWFyZworICBcZmkgXG5leHR9CisKKworJSBAYWxpYXMuCislIFdlIG5lZWQgc29tZSB0cmlja2VyeSB0byByZW1vdmUgdGhlIG9wdGlvbmFsIHNwYWNlcyBhcm91bmQgdGhlIGVxdWFsCislIHNpZ24uICBKdXN0IG1ha2UgdGhlbSBhY3RpdmUgYW5kIHRoZW4gZXhwYW5kIHRoZW0gYWxsIHRvIG5vdGhpbmcuCitcZGVmXGFsaWFze1xwYXJzZWFyZ3VzaW5nXG9iZXlzcGFjZXNcYWxpYXN4eHh9CitcZGVmXGFsaWFzeHh4ICMxe1xhbGlhc3l5eSMxXHJlbGF4fQorXGRlZlxhbGlhc3l5eSAjMT0jMlxyZWxheHslCisgIHslCisgICAgXGV4cGFuZGFmdGVyXGxldFxvYmV5ZWRzcGFjZT1cZW1wdHkKKyAgICBcYWRkdG9tYWNyb2xpc3R7IzF9JQorICAgIFx4ZGVmXG5leHR7XGdsb2JhbFxsZXRcbWFrZWNzbmFtZXsjMX09XG1ha2Vjc25hbWV7IzJ9fSUKKyAgfSUKKyAgXG5leHQKK30KKworCitcbWVzc2FnZXtjcm9zcyByZWZlcmVuY2VzLH0KKworXG5ld3dyaXRlXGF1eGZpbGUKKworXG5ld2lmXGlmaGF2ZXhyZWZzICAgICUgVHJ1ZSBpZiB4cmVmIHZhbHVlcyBhcmUga25vd24uCitcbmV3aWZcaWZ3YXJuZWR4cmVmcyAgJSBUcnVlIGlmIHdlIHdhcm5lZCBvbmNlIHRoYXQgdGhleSBhcmVuJ3Qga25vd24uCisKKyUgQGluZm9yZWYgaXMgcmVsYXRpdmVseSBzaW1wbGUuCitcZGVmXGluZm9yZWYgIzF7XGluZm9yZWZ6enogIzEsLCwsKip9CitcZGVmXGluZm9yZWZ6enogIzEsIzIsIzMsIzQqKntccHV0d29yZFNlZXt9IFxwdXR3b3JkSW5mb3t9IFxwdXR3b3JkZmlsZXt9IFxmaWxle1xpZ25vcmVzcGFjZXMgIzN7fX0sCisgIG5vZGUgXHNhbXB7XGlnbm9yZXNwYWNlcyMxe319fQorCislIEBub2RlJ3Mgb25seSBqb2IgaW4gVGVYIGlzIHRvIGRlZmluZSBcbGFzdG5vZGUsIHdoaWNoIGlzIHVzZWQgaW4KKyUgY3Jvc3MtcmVmZXJlbmNlcy4gIFRoZSBAbm9kZSBsaW5lIG1pZ2h0IG9yIG1pZ2h0IG5vdCBoYXZlIGNvbW1hcywgYW5kCislIG1pZ2h0IG9yIG1pZ2h0IG5vdCBoYXZlIHNwYWNlcyBiZWZvcmUgdGhlIGZpcnN0IGNvbW1hLCBsaWtlOgorJSBAbm9kZSBmb28gLCBiYXIgLCAuLi4KKyUgV2UgZG9uJ3Qgd2FudCBzdWNoIHRyYWlsaW5nIHNwYWNlcyBpbiB0aGUgbm9kZSBuYW1lLgorJQorXHBhcnNlYXJnZGVmXG5vZGV7XGNoZWNrZW52e31cZG9ub2RlICMxICxcZmluaXNobm9kZXBhcnNlfQorJQorJSBhbHNvIHJlbW92ZSBhIHRyYWlsaW5nIGNvbW1hLCBpbiBjYXNlIG9mIHNvbWV0aGluZyBsaWtlIHRoaXM6CislIEBub2RlIEhlbHAtQ3Jvc3MsICAsICAsIENyb3NzLXJlZnMKK1xkZWZcZG9ub2RlIzEgLCMyXGZpbmlzaG5vZGVwYXJzZXtcZG9kb25vZGUgIzEsXGZpbmlzaG5vZGVwYXJzZX0KK1xkZWZcZG9kb25vZGUjMSwjMlxmaW5pc2hub2RlcGFyc2V7XGdkZWZcbGFzdG5vZGV7IzF9fQorCitcbGV0XG53bm9kZT1cbm9kZQorXGxldFxsYXN0bm9kZT1cZW1wdHkKKworJSBXcml0ZSBhIGNyb3NzLXJlZmVyZW5jZSBkZWZpbml0aW9uIGZvciB0aGUgY3VycmVudCBub2RlLiAgIzEgaXMgdGhlCislIHR5cGUgKFludW1iZXJlZCwgWWFwcGVuZGl4LCBZbm90aGluZykuCislCitcZGVmXGRvbm9kZXJlZiMxeyUKKyAgXGlmeFxsYXN0bm9kZVxlbXB0eVxlbHNlCisgICAgXHNldHJlZntcbGFzdG5vZGV9eyMxfSUKKyAgICBcZ2xvYmFsXGxldFxsYXN0bm9kZT1cZW1wdHkKKyAgXGZpCit9CisKKyUgQGFuY2hvcntOQU1FfSAtLSBkZWZpbmUgeHJlZiB0YXJnZXQgYXQgYXJiaXRyYXJ5IHBvaW50LgorJQorXG5ld2NvdW50XHNhdmVzZnJlZ2lzdGVyCislCitcZGVmXHNhdmVzZntccmVsYXggXGlmaG1vZGUgXHNhdmVzZnJlZ2lzdGVyPVxzcGFjZWZhY3RvciBcZml9CitcZGVmXHJlc3RvcmVzZntccmVsYXggXGlmaG1vZGUgXHNwYWNlZmFjdG9yPVxzYXZlc2ZyZWdpc3RlciBcZml9CitcZGVmXGFuY2hvciMxe1xzYXZlc2YgXHNldHJlZnsjMX17WW5vdGhpbmd9XHJlc3RvcmVzZiBcaWdub3Jlc3BhY2VzfQorCislIFxzZXRyZWZ7TkFNRX17U05UfSBkZWZpbmVzIGEgY3Jvc3MtcmVmZXJlbmNlIHBvaW50IE5BTUUgKGEgbm9kZSBvciBhbgorJSBhbmNob3IpLCB3aGljaCBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0czoKKyUgMSkgTkFNRS10aXRsZSAtIHRoZSBjdXJyZW50IHNlY3Rpb25pbmcgbmFtZSB0YWtlbiBmcm9tIFx0aGlzc2VjdGlvbiwKKyUgICAgICAgICAgICAgICAgIG9yIHRoZSBhbmNob3IgbmFtZS4KKyUgMikgTkFNRS1zbnQgICAtIHNlY3Rpb24gbnVtYmVyIGFuZCB0eXBlLCBwYXNzZWQgYXMgdGhlIFNOVCBhcmcsIG9yCislICAgICAgICAgICAgICAgICBlbXB0eSBmb3IgYW5jaG9ycy4KKyUgMykgTkFNRS1wZyAgICAtIHRoZSBwYWdlIG51bWJlci4KKyUKKyUgVGhpcyBpcyBjYWxsZWQgZnJvbSBcZG9ub2RlcmVmLCBcYW5jaG9yLCBhbmQgXGRvZmxvYXQuICBJbiB0aGUgY2FzZSBvZgorJSBmbG9hdHMsIHRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgcGFydCwgd2hpY2ggaXMgbm90IHdyaXR0ZW4gaGVyZToKKyUgNCkgTkFNRS1sb2YgICAtIHRoZSB0ZXh0IGFzIGl0IHNob3VsZCBhcHBlYXIgaW4gYSBAbGlzdG9mZmxvYXRzLgorJQorXGRlZlxzZXRyZWYjMSMyeyUKKyAgXHBkZm1rZGVzdHsjMX0lCisgIFxpZmxpbmtzCisgICAgeyUKKyAgICAgIFxhdGR1bW1pZXMgICUgcHJlc2VydmUgY29tbWFuZHMsIGJ1dCBkb24ndCBleHBhbmQgdGhlbQorICAgICAgXGVkZWZcd3JpdGV4cmRlZiMjMSMjMnslCisJXHdyaXRlXGF1eGZpbGV7QHhyZGVmeyMxLSUgIzEgb2YgXHNldHJlZiwgZXhwYW5kZWQgYnkgdGhlIFxlZGVmCisJICAjIzF9eyMjMn19JSB0aGVzZSBhcmUgcGFyYW1ldGVycyBvZiBcd3JpdGV4cmRlZgorICAgICAgfSUKKyAgICAgIFx0b2tzMCA9IFxleHBhbmRhZnRlcntcdGhpc3NlY3Rpb259JQorICAgICAgXGltbWVkaWF0ZSBcd3JpdGV4cmRlZnt0aXRsZX17XHRoZVx0b2tzMCB9JQorICAgICAgXGltbWVkaWF0ZSBcd3JpdGV4cmRlZntzbnR9e1xjc25hbWUgIzJcZW5kY3NuYW1lfSUgXFludW1iZXJlZCBldGMuCisgICAgICBcd3JpdGV4cmRlZntwZ317XGZvbGlvfSUgd2lsbCBiZSB3cml0dGVuIGxhdGVyLCBkdXJpbmcgXHNoaXBvdXQKKyAgICB9JQorICBcZmkKK30KKworJSBAeHJlZiwgQHB4cmVmLCBhbmQgQHJlZiBnZW5lcmF0ZSBjcm9zcy1yZWZlcmVuY2VzLiAgRm9yIFx4cmVmWCwgIzEgaXMKKyUgdGhlIG5vZGUgbmFtZSwgIzIgdGhlIG5hbWUgb2YgdGhlIEluZm8gY3Jvc3MtcmVmZXJlbmNlLCAjMyB0aGUgcHJpbnRlZAorJSBub2RlIG5hbWUsICM0IHRoZSBuYW1lIG9mIHRoZSBJbmZvIGZpbGUsICM1IHRoZSBuYW1lIG9mIHRoZSBwcmludGVkCislIG1hbnVhbC4gIEFsbCBidXQgdGhlIG5vZGUgbmFtZSBjYW4gYmUgb21pdHRlZC4KKyUKK1xkZWZccHhyZWYjMXtccHV0d29yZHNlZXt9IFx4cmVmWFsjMSwsLCwsLCxdfQorXGRlZlx4cmVmIzF7XHB1dHdvcmRTZWV7fSBceHJlZlhbIzEsLCwsLCwsXX0KK1xkZWZccmVmIzF7XHhyZWZYWyMxLCwsLCwsLF19CitcZGVmXHhyZWZYWyMxLCMyLCMzLCM0LCM1LCM2XXtcYmVnaW5ncm91cAorICBcdW5zZXBzcGFjZXMKKyAgXGRlZlxwcmludGVkbWFudWFse1xpZ25vcmVzcGFjZXMgIzV9JQorICBcZGVmXHByaW50ZWRyZWZuYW1le1xpZ25vcmVzcGFjZXMgIzN9JQorICBcc2V0Ym94MT1caGJveHtccHJpbnRlZG1hbnVhbFx1bnNraXB9JQorICBcc2V0Ym94MD1caGJveHtccHJpbnRlZHJlZm5hbWVcdW5za2lwfSUKKyAgXGlmZGltIFx3ZDAgPSAwcHQKKyAgICAlIE5vIHByaW50ZWQgbm9kZSBuYW1lIHdhcyBleHBsaWNpdGx5IGdpdmVuLgorICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVHhyZWYtYXV0b21hdGljLXNlY3Rpb24tdGl0bGVcZW5kY3NuYW1lXHJlbGF4CisgICAgICAlIFVzZSB0aGUgbm9kZSBuYW1lIGluc2lkZSB0aGUgc3F1YXJlIGJyYWNrZXRzLgorICAgICAgXGRlZlxwcmludGVkcmVmbmFtZXtcaWdub3Jlc3BhY2VzICMxfSUKKyAgICBcZWxzZQorICAgICAgJSBVc2UgdGhlIGFjdHVhbCBjaGFwdGVyL3NlY3Rpb24gdGl0bGUgYXBwZWFyIGluc2lkZQorICAgICAgJSB0aGUgc3F1YXJlIGJyYWNrZXRzLiAgVXNlIHRoZSByZWFsIHNlY3Rpb24gdGl0bGUgaWYgd2UgaGF2ZSBpdC4KKyAgICAgIFxpZmRpbSBcd2QxID4gMHB0CisgICAgICAgICUgSXQgaXMgaW4gYW5vdGhlciBtYW51YWwsIHNvIHdlIGRvbid0IGhhdmUgaXQuCisgICAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XGlnbm9yZXNwYWNlcyAjMX0lCisgICAgICBcZWxzZQorICAgICAgICBcaWZoYXZleHJlZnMKKyAgICAgICAgICAlIFdlIGtub3cgdGhlIHJlYWwgdGl0bGUgaWYgd2UgaGF2ZSB0aGUgeHJlZiB2YWx1ZXMuCisgICAgICAgICAgXGRlZlxwcmludGVkcmVmbmFtZXtccmVmeHsjMS10aXRsZX17fX0lCisgICAgICAgIFxlbHNlCisgICAgICAgICAgJSBPdGhlcndpc2UganVzdCBjb3B5IHRoZSBJbmZvIG5vZGUgbmFtZS4KKyAgICAgICAgICBcZGVmXHByaW50ZWRyZWZuYW1le1xpZ25vcmVzcGFjZXMgIzF9JQorICAgICAgICBcZmklCisgICAgICBcZmkKKyAgICBcZmkKKyAgXGZpCisgICUKKyAgJSBNYWtlIGxpbmsgaW4gcGRmIG91dHB1dC4KKyAgXGlmcGRmCisgICAgXGxlYXZldm1vZGUKKyAgICBcZ2V0ZmlsZW5hbWV7IzR9JQorICAgIHtcdHVybm9mZmFjdGl2ZQorICAgICAlIFNlZSBjb21tZW50cyBhdCBcYWN0aXZlYmFja3NsYXNoZG91YmxlLgorICAgICB7XGFjdGl2ZWJhY2tzbGFzaGRvdWJsZSBceGRlZlxwZGZ4cmVmZGVzdHsjMX0lCisgICAgICBcYmFja3NsYXNocGFyZW5zXHBkZnhyZWZkZXN0fSUKKyAgICAgJQorICAgICBcaWZudW1cZmlsZW5hbWVsZW5ndGg+MAorICAgICAgIFxzdGFydGxpbmsgYXR0cnsvQm9yZGVyIFswIDAgMF19JQorICAgICAgICAgZ290byBmaWxle1x0aGVcZmlsZW5hbWUucGRmfSBuYW1le1xwZGZ4cmVmZGVzdH0lCisgICAgIFxlbHNlCisgICAgICAgXHN0YXJ0bGluayBhdHRyey9Cb3JkZXIgWzAgMCAwXX0lCisgICAgICAgICBnb3RvIG5hbWV7XHBkZm1rcGdue1xwZGZ4cmVmZGVzdH19JQorICAgICBcZmkKKyAgICB9JQorICAgIFxsaW5rY29sb3IKKyAgXGZpCisgICUKKyAgJSBGbG9hdCByZWZlcmVuY2VzIGFyZSBwcmludGVkIGNvbXBsZXRlbHkgZGlmZmVyZW50bHk6ICJGaWd1cmUgMS4yIgorICAlIGluc3RlYWQgb2YgIltzb21lbm9kZV0sIHAuMyIuICBXZSBkaXN0aW5ndWlzaCB0aGVtIGJ5IHRoZQorICAlIExBQkVMLXRpdGxlIGJlaW5nIHNldCB0byBhIG1hZ2ljIHN0cmluZy4KKyAgeyUKKyAgICAlIEhhdmUgdG8gb3RoZXJpZnkgZXZlcnl0aGluZyBzcGVjaWFsIHRvIGFsbG93IHRoZSBcY3NuYW1lIHRvCisgICAgJSBpbmNsdWRlIGFuIF8gaW4gdGhlIHhyZWYgbmFtZSwgZXRjLgorICAgIFxpbmRleG5vZm9udHMKKyAgICBcdHVybm9mZmFjdGl2ZQorICAgIFxleHBhbmRhZnRlclxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXFh0aGlzcmVmdGl0bGUKKyAgICAgIFxjc25hbWUgWFIjMS10aXRsZVxlbmRjc25hbWUKKyAgfSUKKyAgXGlmZmxvYXRcWHRoaXNyZWZ0aXRsZQorICAgICUgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIHRoZSBwcmludCBuYW1lICh0aGlyZCBhcmcpIHRvIHRoZSByZWYsCisgICAgJSBwcmludCBpdCBpbnN0ZWFkIG9mIG91ciB1c3VhbCAiRmlndXJlIDEuMiIuCisgICAgXGlmZGltXHdkMCA9IDBwdAorICAgICAgXHJlZnh7IzEtc250fXt9JQorICAgIFxlbHNlCisgICAgICBccHJpbnRlZHJlZm5hbWUKKyAgICBcZmkKKyAgICAlCisgICAgJSBpZiB0aGUgdXNlciBhbHNvIGdhdmUgdGhlIHByaW50ZWQgbWFudWFsIG5hbWUgKGZpZnRoIGFyZyksIGFwcGVuZAorICAgICUgImluIE1BTlVBTE5BTUUiLgorICAgIFxpZmRpbSBcd2QxID4gMHB0CisgICAgICBcc3BhY2UgXHB1dHdvcmRpbnt9IFxjaXRle1xwcmludGVkbWFudWFsfSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIG5vZGUvYW5jaG9yIChub24tZmxvYXQpIHJlZmVyZW5jZXMuCisgICAgJQorICAgICUgSWYgd2UgdXNlIFx1bmhib3gwIGFuZCBcdW5oYm94MSB0byBwcmludCB0aGUgbm9kZSBuYW1lcywgVGVYIGRvZXMgbm90CisgICAgJSBpbnNlcnQgZW1wdHkgZGlzY3JldGlvbmFyaWVzIGFmdGVyIGh5cGhlbnMsIHdoaWNoIG1lYW5zIHRoYXQgaXQgd2lsbAorICAgICUgbm90IGZpbmQgYSBsaW5lIGJyZWFrIGF0IGEgaHlwaGVuIGluIGEgbm9kZSBuYW1lcy4gIFNpbmNlIHNvbWUgbWFudWFscworICAgICUgYXJlIGJlc3Qgd3JpdHRlbiB3aXRoIGZhaXJseSBsb25nIG5vZGUgbmFtZXMsIGNvbnRhaW5pbmcgaHlwaGVucywgdGhpcworICAgICUgaXMgYSBsb3NzLiAgVGhlcmVmb3JlLCB3ZSBnaXZlIHRoZSB0ZXh0IG9mIHRoZSBub2RlIG5hbWUgYWdhaW4sIHNvIGl0CisgICAgJSBpcyBhcyBpZiBUZVggaXMgc2VlaW5nIGl0IGZvciB0aGUgZmlyc3QgdGltZS4KKyAgICBcaWZkaW0gXHdkMSA+IDBwdAorICAgICAgXHB1dHdvcmRzZWN0aW9ue30gYGBccHJpbnRlZHJlZm5hbWUnJyBccHV0d29yZGlue30gXGNpdGV7XHByaW50ZWRtYW51YWx9JQorICAgIFxlbHNlCisgICAgICAlIF8gKGZvciBleGFtcGxlKSBoYXMgdG8gYmUgdGhlIGNoYXJhY3RlciBfIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlCisgICAgICAlIGNvbnRyb2wgc2VxdWVuY2UgY29ycmVzcG9uZGluZyB0byB0aGUgbm9kZSwgYnV0IGl0IGhhcyB0byBleHBhbmQKKyAgICAgICUgaW50byB0aGUgdXN1YWwgXGxlYXZldm1vZGUuLi5cdnJ1bGUgc3R1ZmYgZm9yIHB1cnBvc2VzIG9mCisgICAgICAlIHByaW50aW5nLiBTbyB3ZSBcdHVybm9mZmFjdGl2ZSBmb3IgdGhlIFxyZWZ4LXNudCwgYmFjayBvbiBmb3IgdGhlCisgICAgICAlIHByaW50aW5nLCBiYWNrIG9mZiBmb3IgdGhlIFxyZWZ4LXBnLgorICAgICAge1x0dXJub2ZmYWN0aXZlCisgICAgICAgJSBPbmx5IG91dHB1dCBhIGZvbGxvd2luZyBzcGFjZSBpZiB0aGUgLXNudCByZWYgaXMgbm9uZW1wdHk7IGZvcgorICAgICAgICUgQHVubnVtYmVyZWQgYW5kIEBhbmNob3IsIGl0IHdvbid0IGJlLgorICAgICAgIFxzZXRib3gyID0gXGhib3h7XGlnbm9yZXNwYWNlcyBccmVmeHsjMS1zbnR9e319JQorICAgICAgIFxpZmRpbSBcd2QyID4gMHB0IFxyZWZ4eyMxLXNudH1cc3BhY2VcZmkKKyAgICAgIH0lCisgICAgICAlIG91dHB1dCB0aGUgYFtteW5vZGVdJyB2aWEgYSBtYWNybyBzbyBpdCBjYW4gYmUgb3ZlcnJpZGRlbi4KKyAgICAgIFx4cmVmcHJpbnRub2RlbmFtZVxwcmludGVkcmVmbmFtZQorICAgICAgJQorICAgICAgJSBCdXQgd2UgYWx3YXlzIHdhbnQgYSBjb21tYSBhbmQgYSBzcGFjZToKKyAgICAgICxcc3BhY2UKKyAgICAgICUKKyAgICAgICUgb3V0cHV0IHRoZSBgcGFnZSAzJy4KKyAgICAgIFx0dXJub2ZmYWN0aXZlIFxwdXR3b3JkcGFnZVx0aWVccmVmeHsjMS1wZ317fSUKKyAgICBcZmkKKyAgXGZpCisgIFxlbmRsaW5rCitcZW5kZ3JvdXB9CisKKyUgVGhpcyBtYWNybyBpcyBjYWxsZWQgZnJvbSBceHJlZlggZm9yIHRoZSBgW25vZGVuYW1lXScgcGFydCBvZiB4cmVmCislIG91dHB1dC4gIEl0J3MgYSBzZXBhcmF0ZSBtYWNybyBvbmx5IHNvIGl0IGNhbiBiZSBjaGFuZ2VkIG1vcmUgZWFzaWx5LAorJSBzaW5jZSBzcXVhcmUgYnJhY2tldHMgZG9uJ3Qgd29yayB3ZWxsIGluIHNvbWUgZG9jdW1lbnRzLiAgUGFydGljdWxhcmx5CislIG9uZSB0aGF0IEJvYiBpcyB3b3JraW5nIG9uIDopLgorJQorXGRlZlx4cmVmcHJpbnRub2RlbmFtZSMxe1sjMV19CisKKyUgVGhpbmdzIHJlZmVycmVkIHRvIGJ5IFxzZXRyZWYuCislCitcZGVmXFlub3RoaW5ne30KK1xkZWZcWW9taXRmcm9tdG9je30KK1xkZWZcWW51bWJlcmVkeyUKKyAgXGlmbnVtXHNlY25vPTAKKyAgICBccHV0d29yZENoYXB0ZXJAdGllIFx0aGVcY2hhcG5vCisgIFxlbHNlIFxpZm51bVxzdWJzZWNubz0wCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBcdGhlXGNoYXBuby5cdGhlXHNlY25vCisgIFxlbHNlIFxpZm51bVxzdWJzdWJzZWNubz0wCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBcdGhlXGNoYXBuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8KKyAgXGVsc2UKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIFx0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vCisgIFxmaVxmaVxmaQorfQorXGRlZlxZYXBwZW5kaXh7JQorICBcaWZudW1cc2Vjbm89MAorICAgICBccHV0d29yZEFwcGVuZGl4QHRpZSBAY2hhclx0aGVcYXBwZW5kaXhub3t9JQorICBcZWxzZSBcaWZudW1cc3Vic2Vjbm89MAorICAgICBccHV0d29yZFNlY3Rpb25AdGllIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8KKyAgXGVsc2UgXGlmbnVtXHN1YnN1YnNlY25vPTAKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNubworICBcZWxzZQorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUKKyAgICAgIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vCisgIFxmaVxmaVxmaQorfQorCislIERlZmluZSBccmVmeHtOQU1FfXtTVUZGSVh9IHRvIHJlZmVyZW5jZSBhIGNyb3NzLXJlZmVyZW5jZSBzdHJpbmcgbmFtZWQgTkFNRS4KKyUgSWYgaXRzIHZhbHVlIGlzIG5vbmVtcHR5LCBTVUZGSVggaXMgb3V0cHV0IGFmdGVyd2FyZC4KKyUKK1xkZWZccmVmeCMxIzJ7JQorICB7JQorICAgIFxpbmRleG5vZm9udHMKKyAgICBcb3RoZXJiYWNrc2xhc2gKKyAgICBcZXhwYW5kYWZ0ZXJcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlclx0aGlzcmVmWAorICAgICAgXGNzbmFtZSBYUiMxXGVuZGNzbmFtZQorICB9JQorICBcaWZ4XHRoaXNyZWZYXHJlbGF4CisgICAgJSBJZiBub3QgZGVmaW5lZCwgc2F5IHNvbWV0aGluZyBhdCBsZWFzdC4KKyAgICBcYW5nbGVsZWZ0IHVuXC1kZVwtZmluZWRcYW5nbGVyaWdodAorICAgIFxpZmxpbmtzCisgICAgICBcaWZoYXZleHJlZnMKKyAgICAgICAgXG1lc3NhZ2V7XGxpbmVudW1iZXIgVW5kZWZpbmVkIGNyb3NzIHJlZmVyZW5jZSBgIzEnLn0lCisgICAgICBcZWxzZQorICAgICAgICBcaWZ3YXJuZWR4cmVmc1xlbHNlCisgICAgICAgICAgXGdsb2JhbFx3YXJuZWR4cmVmc3RydWUKKyAgICAgICAgICBcbWVzc2FnZXtDcm9zcyByZWZlcmVuY2UgdmFsdWVzIHVua25vd247IHlvdSBtdXN0IHJ1biBUZVggYWdhaW4ufSUKKyAgICAgICAgXGZpCisgICAgICBcZmkKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIEl0J3MgZGVmaW5lZCwgc28ganVzdCB1c2UgaXQuCisgICAgXHRoaXNyZWZYCisgIFxmaQorICAjMiUgT3V0cHV0IHRoZSBzdWZmaXggaW4gYW55IGNhc2UuCit9CisKKyUgVGhpcyBpcyB0aGUgbWFjcm8gaW52b2tlZCBieSBlbnRyaWVzIGluIHRoZSBhdXggZmlsZS4gIFVzdWFsbHkgaXQncworJSBqdXN0IGEgXGRlZiAod2UgcHJlcGVuZCBYUiB0byB0aGUgY29udHJvbCBzZXF1ZW5jZSBuYW1lIHRvIGF2b2lkCislIGNvbGxpc2lvbnMpLiAgQnV0IGlmIHRoaXMgaXMgYSBmbG9hdCB0eXBlLCB3ZSBoYXZlIG1vcmUgd29yayB0byBkby4KKyUKK1xkZWZceHJkZWYjMSMyeyUKKyAgXGV4cGFuZGFmdGVyXGdkZWZcY3NuYW1lIFhSIzFcZW5kY3NuYW1leyMyfSUgcmVtZW1iZXIgdGhpcyB4cmVmIHZhbHVlLgorICAlCisgICUgV2FzIHRoYXQgeHJlZiBjb250cm9sIHNlcXVlbmNlIHRoYXQgd2UganVzdCBkZWZpbmVkIGZvciBhIGZsb2F0PworICBcZXhwYW5kYWZ0ZXJcaWZmbG9hdFxjc25hbWUgWFIjMVxlbmRjc25hbWUKKyAgICAlIGl0IHdhcyBhIGZsb2F0LCBhbmQgd2UgaGF2ZSB0aGUgKHNhZmUpIGZsb2F0IHR5cGUgaW4gXGlmZmxvYXR0eXBlLgorICAgIFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXJcZmxvYXRsaXN0CisgICAgICBcY3NuYW1lIGZsb2F0bGlzdFxpZmZsb2F0dHlwZVxlbmRjc25hbWUKKyAgICAlCisgICAgJSBJcyB0aGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gdGhpcyBmbG9hdCB0eXBlPworICAgIFxleHBhbmRhZnRlclxpZnhcZmxvYXRsaXN0XHJlbGF4CisgICAgICBcdG9rczAgPSB7XGRvfSUgeWVzLCBzbyBqdXN0IFxkbworICAgIFxlbHNlCisgICAgICAlIGhhZCBpdCBiZWZvcmUsIHNvIHByZXNlcnZlIHByZXZpb3VzIGVsZW1lbnRzIGluIGxpc3QuCisgICAgICBcdG9rczAgPSBcZXhwYW5kYWZ0ZXJ7XGZsb2F0bGlzdFxkb30lCisgICAgXGZpCisgICAgJQorICAgICUgUmVtZW1iZXIgdGhpcyB4cmVmIGluIHRoZSBjb250cm9sIHNlcXVlbmNlIFxmbG9hdGxpc3RGTE9BVFRZUEUsCisgICAgJSBmb3IgbGF0ZXIgdXNlIGluIFxsaXN0b2ZmbG9hdHMuCisgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIGZsb2F0bGlzdFxpZmZsb2F0dHlwZVxlbmRjc25hbWV7XHRoZVx0b2tzMHsjMX19JQorICBcZmkKK30KKworJSBSZWFkIHRoZSBsYXN0IGV4aXN0aW5nIGF1eCBmaWxlLCBpZiBhbnkuICBObyBlcnJvciBpZiBub25lIGV4aXN0cy4KKyUKK1xkZWZcdHJ5YXV4ZmlsZXslCisgIFxvcGVuaW4gMSBcam9ibmFtZS5hdXgKKyAgXGlmZW9mIDEgXGVsc2UKKyAgICBccmVhZGRhdGFmaWxle2F1eH0lCisgICAgXGdsb2JhbFxoYXZleHJlZnN0cnVlCisgIFxmaQorICBcY2xvc2VpbiAxCit9CisKK1xkZWZcc2V0dXBkYXRhZmlsZXslCisgIFxjYXRjb2RlYFxeXkA9XG90aGVyCisgIFxjYXRjb2RlYFxeXkE9XG90aGVyCisgIFxjYXRjb2RlYFxeXkI9XG90aGVyCisgIFxjYXRjb2RlYFxeXkM9XG90aGVyCisgIFxjYXRjb2RlYFxeXkQ9XG90aGVyCisgIFxjYXRjb2RlYFxeXkU9XG90aGVyCisgIFxjYXRjb2RlYFxeXkY9XG90aGVyCisgIFxjYXRjb2RlYFxeXkc9XG90aGVyCisgIFxjYXRjb2RlYFxeXkg9XG90aGVyCisgIFxjYXRjb2RlYFxeXks9XG90aGVyCisgIFxjYXRjb2RlYFxeXkw9XG90aGVyCisgIFxjYXRjb2RlYFxeXk49XG90aGVyCisgIFxjYXRjb2RlYFxeXlA9XG90aGVyCisgIFxjYXRjb2RlYFxeXlE9XG90aGVyCisgIFxjYXRjb2RlYFxeXlI9XG90aGVyCisgIFxjYXRjb2RlYFxeXlM9XG90aGVyCisgIFxjYXRjb2RlYFxeXlQ9XG90aGVyCisgIFxjYXRjb2RlYFxeXlU9XG90aGVyCisgIFxjYXRjb2RlYFxeXlY9XG90aGVyCisgIFxjYXRjb2RlYFxeXlc9XG90aGVyCisgIFxjYXRjb2RlYFxeXlg9XG90aGVyCisgIFxjYXRjb2RlYFxeXlo9XG90aGVyCisgIFxjYXRjb2RlYFxeXls9XG90aGVyCisgIFxjYXRjb2RlYFxeXlw9XG90aGVyCisgIFxjYXRjb2RlYFxeXl09XG90aGVyCisgIFxjYXRjb2RlYFxeXl49XG90aGVyCisgIFxjYXRjb2RlYFxeXl89XG90aGVyCisgICUgSXQgd2FzIHN1Z2dlc3RlZCB0byBzZXQgdGhlIGNhdGNvZGUgb2YgXiB0byA3LCB3aGljaCB3b3VsZCBhbGxvdyBeXmU0IGV0Yy4KKyAgJSBpbiB4cmVmIHRhZ3MsIGkuZS4sIG5vZGUgbmFtZXMuICBCdXQgc2luY2UgXl5lNCBub3RhdGlvbiBpc24ndAorICAlIHN1cHBvcnRlZCBpbiB0aGUgbWFpbiB0ZXh0LCBpdCBkb2Vzbid0IHNlZW0gZGVzaXJhYmxlLiAgRnVydGhlcm1vcmUsCisgICUgdGhhdCBpcyBub3QgZW5vdWdoOiBmb3Igbm9kZSBuYW1lcyB0aGF0IGFjdHVhbGx5IGNvbnRhaW4gYSBeCisgICUgY2hhcmFjdGVyLCB3ZSB3b3VsZCBlbmQgdXAgd3JpdGluZyBhIGxpbmUgbGlrZSB0aGlzOiAneHJkZWYgeydoYXQKKyAgJSBiLXRpdGxlfXsnaGF0IGJ9IGFuZCBceHJkZWYgZG9lcyBhIFxjc25hbWUuLi5cZW5kY3NuYW1lIG9uIHRoZSBmaXJzdAorICAlIGFyZ3VtZW50LCBhbmQgXGhhdCBpcyBub3QgYW4gZXhwYW5kYWJsZSBjb250cm9sIHNlcXVlbmNlLiAgSXQgY291bGQKKyAgJSBhbGwgYmUgd29ya2VkIG91dCwgYnV0IHdoeT8gIEVpdGhlciB3ZSBzdXBwb3J0IF5eIG9yIHdlIGRvbid0LgorICAlCisgICUgVGhlIG90aGVyIGNoYW5nZSBuZWNlc3NhcnkgZm9yIHRoaXMgd2FzIHRvIGRlZmluZSBcYXV4aGF0OgorICAlIFxkZWZcYXV4aGF0e1xkZWZeeydoYXQgfX0lIGV4dHJhIHNwYWNlIHNvIG9rIGlmIGZvbGxvd2VkIGJ5IGxldHRlcgorICAlIGFuZCB0aGVuIHRvIGNhbGwgXGF1eGhhdCBpbiBcc2V0cS4KKyAgJQorICBcY2F0Y29kZWBcXj1cb3RoZXIKKyAgJQorICAlIFNwZWNpYWwgY2hhcmFjdGVycy4gIFNob3VsZCBiZSB0dXJuZWQgb2ZmIGFueXdheSwgYnV0Li4uCisgIFxjYXRjb2RlYFx+PVxvdGhlcgorICBcY2F0Y29kZWBcWz1cb3RoZXIKKyAgXGNhdGNvZGVgXF09XG90aGVyCisgIFxjYXRjb2RlYFwiPVxvdGhlcgorICBcY2F0Y29kZWBcXz1cb3RoZXIKKyAgXGNhdGNvZGVgXHw9XG90aGVyCisgIFxjYXRjb2RlYFw8PVxvdGhlcgorICBcY2F0Y29kZWBcPj1cb3RoZXIKKyAgXGNhdGNvZGVgXCQ9XG90aGVyCisgIFxjYXRjb2RlYFwjPVxvdGhlcgorICBcY2F0Y29kZWBcJj1cb3RoZXIKKyAgXGNhdGNvZGVgXCU9XG90aGVyCisgIFxjYXRjb2RlYCs9XG90aGVyICUgYXZvaWQgXCsgZm9yIHBhcmFub2lhIGV2ZW4gdGhvdWdoIHdlJ3ZlIHR1cm5lZCBpdCBvZmYKKyAgJQorICAlIFRoaXMgaXMgdG8gc3VwcG9ydCBcIGluIG5vZGUgbmFtZXMgYW5kIHRpdGxlcywgc2luY2UgdGhlIFwKKyAgJSBjaGFyYWN0ZXJzIGVuZCB1cCBpbiBhIFxjc25hbWUuICBJdCdzIGVhc2llciB0aGFuCisgICUgbGVhdmluZyBpdCBhY3RpdmUgYW5kIG1ha2luZyBpdHMgYWN0aXZlIGRlZmluaXRpb24gYW4gYWN0dWFsIFwKKyAgJSBjaGFyYWN0ZXIuICBXaGF0IEkgZG9uJ3QgdW5kZXJzdGFuZCBpcyB3aHkgaXQgd29ya3MgaW4gdGhlICp2YWx1ZSoKKyAgJSBvZiB0aGUgeHJkZWYuICBTZWVtcyBsaWtlIGl0IHNob3VsZCBiZSBhIGNhdGNvZGUxMiBcLCBhbmQgdGhhdAorICAlIHNob3VsZCBub3QgdHlwZXNldCBwcm9wZXJseS4gIEJ1dCBpdCB3b3Jrcywgc28gSSdtIG1vdmluZyBvbiBmb3IKKyAgJSBub3cuICAtLWthcmwsIDE1amFuMDQuCisgIFxjYXRjb2RlYFxcPVxvdGhlcgorICAlCisgICUgTWFrZSB0aGUgY2hhcmFjdGVycyAxMjgtMjU1IGJlIHByaW50aW5nIGNoYXJhY3RlcnMuCisgIHslCisgICAgXGNvdW50MT0xMjgKKyAgICBcZGVmXGxvb3B7JQorICAgICAgXGNhdGNvZGVcY291bnQxPVxvdGhlcgorICAgICAgXGFkdmFuY2VcY291bnQxIGJ5IDEKKyAgICAgIFxpZm51bSBcY291bnQxPDI1NiBcbG9vcCBcZmkKKyAgICB9JQorICB9JQorICAlCisgICUgQCBpcyBvdXIgZXNjYXBlIGNoYXJhY3RlciBpbiAuYXV4IGZpbGVzLCBhbmQgd2UgbmVlZCBicmFjZXMuCisgIFxjYXRjb2RlYFx7PTEKKyAgXGNhdGNvZGVgXH09MgorICBcY2F0Y29kZWBcQD0wCit9CisKK1xkZWZccmVhZGRhdGFmaWxlIzF7JQorXGJlZ2luZ3JvdXAKKyAgXHNldHVwZGF0YWZpbGUKKyAgXGlucHV0XGpvYm5hbWUuIzEKK1xlbmRncm91cH0KKworXG1lc3NhZ2V7aW5zZXJ0aW9ucyx9CislIGluY2x1ZGluZyBmb290bm90ZXMuCisKK1xuZXdjb3VudCBcZm9vdG5vdGVubworCislIFRoZSB0cmFpbGluZyBzcGFjZSBpbiB0aGUgZm9sbG93aW5nIGRlZmluaXRpb24gZm9yIHN1cGVyZWplY3QgaXMKKyUgdml0YWwgZm9yIHByb3BlciBmaWxsaW5nOyBwYWdlcyBjb21lIG91dCB1bmFsaWduZWQgd2hlbiB5b3UgZG8gYQorJSBwYWdlYWxpZ25tYWNybyBjYWxsIGlmIHRoYXQgc3BhY2UgYmVmb3JlIHRoZSBjbG9zaW5nIGJyYWNlIGlzCislIHJlbW92ZWQuIChHZW5lcmFsbHksIG51bWVyaWMgY29uc3RhbnRzIHNob3VsZCBhbHdheXMgYmUgZm9sbG93ZWQgYnkgYQorJSBzcGFjZSB0byBwcmV2ZW50IHN0cmFuZ2UgZXhwYW5zaW9uIGVycm9ycy4pCitcZGVmXHN1cGVyZWplY3R7XHBhclxwZW5hbHR5IC0yMDAwMFxmb290bm90ZW5vID0wIH0KKworJSBAZm9vdG5vdGVzdHlsZSBpcyBtZWFuaW5nZnVsIGZvciBpbmZvIG91dHB1dCBvbmx5LgorXGxldFxmb290bm90ZXN0eWxlPVxjb21tZW50CisKK3tcY2F0Y29kZSBgXEA9MTEKKyUKKyUgQXV0by1udW1iZXIgZm9vdG5vdGVzLiAgT3RoZXJ3aXNlIGxpa2UgcGxhaW4uCitcZ2RlZlxmb290bm90ZXslCisgIFxsZXRcaW5kZW50PVxwdGV4aW5kZW50CisgIFxsZXRcbm9pbmRlbnQ9XHB0ZXhub2luZGVudAorICBcZ2xvYmFsXGFkdmFuY2VcZm9vdG5vdGVubyBieSBcQG5lCisgIFxlZGVmXHRoaXNmb290bm97JF57XHRoZVxmb290bm90ZW5vfSR9JQorICAlCisgICUgSW4gY2FzZSB0aGUgZm9vdG5vdGUgY29tZXMgYXQgdGhlIGVuZCBvZiBhIHNlbnRlbmNlLCBwcmVzZXJ2ZSB0aGUKKyAgJSBleHRyYSBzcGFjaW5nIGFmdGVyIHdlIGRvIHRoZSBmb290bm90ZSBudW1iZXIuCisgIFxsZXRcQHNmXGVtcHR5CisgIFxpZmhtb2RlXGVkZWZcQHNme1xzcGFjZWZhY3Rvclx0aGVcc3BhY2VmYWN0b3J9XHB0ZXhzbGFzaFxmaQorICAlCisgICUgUmVtb3ZlIGluYWR2ZXJ0ZW50IGJsYW5rIHNwYWNlIGJlZm9yZSB0eXBlc2V0dGluZyB0aGUgZm9vdG5vdGUgbnVtYmVyLgorICBcdW5za2lwCisgIFx0aGlzZm9vdG5vXEBzZgorICBcZG9mb290bm90ZQorfSUKKworJSBEb24ndCBib3RoZXIgd2l0aCB0aGUgdHJpY2tlcnkgaW4gcGxhaW4udGV4IHRvIG5vdCByZXF1aXJlIHRoZQorJSBmb290bm90ZSB0ZXh0IGFzIGEgcGFyYW1ldGVyLiAgT3VyIGZvb3Rub3RlcyBkb24ndCBuZWVkIHRvIGJlIHNvIGdlbmVyYWwuCislCislIE9oIHllcywgdGhleSBkbzsgb3RoZXJ3aXNlLCBAaWZzZXQgKGFuZCBhbnl0aGluZyBlbHNlIHRoYXQgdXNlcworJSBccGFyc2VhcmdsaW5lKSBmYWlscyBpbnNpZGUgZm9vdG5vdGVzIGJlY2F1c2UgdGhlIHRva2VucyBhcmUgZml4ZWQgd2hlbgorJSB0aGUgZm9vdG5vdGUgaXMgcmVhZC4gIC0ta2FybCwgMTZub3Y5Ni4KKyUKK1xnZGVmXGRvZm9vdG5vdGV7JQorICBcaW5zZXJ0XGZvb3RpbnNcYmdyb3VwCisgICUgV2Ugd2FudCB0byB0eXBlc2V0IHRoaXMgdGV4dCBhcyBhIG5vcm1hbCBwYXJhZ3JhcGgsIGV2ZW4gaWYgdGhlCisgICUgZm9vdG5vdGUgcmVmZXJlbmNlIG9jY3VycyBpbiAoZm9yIGV4YW1wbGUpIGEgZGlzcGxheSBlbnZpcm9ubWVudC4KKyAgJSBTbyByZXNldCBzb21lIHBhcmFtZXRlcnMuCisgIFxoc2l6ZT1ccGFnZXdpZHRoCisgIFxpbnRlcmxpbmVwZW5hbHR5XGludGVyZm9vdG5vdGVsaW5lcGVuYWx0eQorICBcc3BsaXR0b3Bza2lwXGh0XHN0cnV0Ym94ICUgdG9wIGJhc2VsaW5lIGZvciBicm9rZW4gZm9vdG5vdGVzCisgIFxzcGxpdG1heGRlcHRoXGRwXHN0cnV0Ym94CisgIFxmbG9hdGluZ3BlbmFsdHlcQE1NCisgIFxsZWZ0c2tpcFx6QHNraXAKKyAgXHJpZ2h0c2tpcFx6QHNraXAKKyAgXHNwYWNlc2tpcFx6QHNraXAKKyAgXHhzcGFjZXNraXBcekBza2lwCisgIFxwYXJpbmRlbnRcZGVmYXVsdHBhcmluZGVudAorICAlCisgIFxzbWFsbGZvbnRzIFxybQorICAlCisgICUgQmVjYXVzZSB3ZSB1c2UgaGFuZ2luZyBpbmRlbnRhdGlvbiBpbiBmb290bm90ZXMsIGEgQG5vaW5kZW50IGFwcGVhcnMKKyAgJSB0byBleGRlbnQgdGhpcyB0ZXh0LCBzbyBtYWtlIGl0IGJlIGEgbm8tb3AuICBtYWtlaW5mbyBkb2VzIG5vdCB1c2UKKyAgJSBoYW5naW5nIGluZGVudGF0aW9uIHNvIEBub2luZGVudCBjYW4gc3RpbGwgYmUgbmVlZGVkIHdpdGhpbiBmb290bm90ZQorICAlIHRleHQgYWZ0ZXIgYW4gQGV4YW1wbGUgb3IgdGhlIGxpa2UgKG5vdCB0aGF0IHRoaXMgaXMgZ29vZCBzdHlsZSkuCisgIFxsZXRcbm9pbmRlbnQgPSBccmVsYXgKKyAgJQorICAlIEhhbmcgdGhlIGZvb3Rub3RlIHRleHQgb2ZmIHRoZSBudW1iZXIuICBVc2UgXGV2ZXJ5cGFyIGluIGNhc2UgdGhlCisgICUgZm9vdG5vdGUgZXh0ZW5kcyBmb3IgbW9yZSB0aGFuIG9uZSBwYXJhZ3JhcGguCisgIFxldmVyeXBhciA9IHtcaGFuZ30lCisgIFx0ZXh0aW5kZW50e1x0aGlzZm9vdG5vfSUKKyAgJQorICAlIERvbid0IGNyYXNoIGludG8gdGhlIGxpbmUgYWJvdmUgdGhlIGZvb3Rub3RlIHRleHQuICBTaW5jZSB0aGlzCisgICUgZXhwYW5kcyBpbnRvIGEgYm94LCBpdCBtdXN0IGNvbWUgd2l0aGluIHRoZSBwYXJhZ3JhcGgsIGxlc3QgaXQKKyAgJSBwcm92aWRlIGEgcGxhY2Ugd2hlcmUgVGVYIGNhbiBzcGxpdCB0aGUgZm9vdG5vdGUuCisgIFxmb290c3RydXQKKyAgXGZ1dHVyZWxldFxuZXh0XGZvQHQKK30KK30lZW5kIFxjYXRjb2RlIGBcQD0xMQorCislIEluIGNhc2UgYSBAZm9vdG5vdGUgYXBwZWFycyBpbiBhIHZib3gsIHNhdmUgdGhlIGZvb3Rub3RlIHRleHQgYW5kIGNyZWF0ZQorJSB0aGUgcmVhbCBcaW5zZXJ0IGp1c3QgYWZ0ZXIgdGhlIHZib3ggZmluaXNoZWQuICBPdGhlcndpc2UsIHRoZSBpbnNlcnRpb24KKyUgd291bGQgYmUgbG9zdC4KKyUgU2ltaWxhcmlseSwgaWYgYSBAZm9vdG5vdGUgYXBwZWFycyBpbnNpZGUgYW4gYWxpZ25tZW50LCBzYXZlIHRoZSBmb290bm90ZQorJSB0ZXh0IHRvIGEgYm94IGFuZCBtYWtlIHRoZSBcaW5zZXJ0IHdoZW4gYSByb3cgb2YgdGhlIHRhYmxlIGlzIGZpbmlzaGVkLgorJSBBbmQgdGhlIHNhbWUgY2FuIGJlIGRvbmUgZm9yIG90aGVyIGluc2VydCBjbGFzc2VzLiAgLS1rYXNhbCwgMTZub3YwMy4KKworJSBSZXBsYWNlIHRoZSBcaW5zZXJ0IHByaW1pdGl2ZSBieSBhIGNoZWF0aW5nIG1hY3JvLgorJSBEZWVwZXIgaW5zaWRlLCBqdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBzYXZlZCBpbnNlcnRpb25zIGFyZSBub3Qgc3BpbGxlZAorJSBvdXQgcHJlbWF0dXJlbHkuCislCitcZGVmXHN0YXJ0c2F2aW5naW5zZXJ0c3slCisgIFxpZnggXGluc2VydFxwdGV4aW5zZXJ0CisgICAgXGxldFxpbnNlcnRcc2F2ZWluc2VydAorICBcZWxzZQorICAgIFxsZXRcY2hlY2tpbnNlcnRzXHJlbGF4CisgIFxmaQorfQorCislIFRoaXMgXGluc2VydCByZXBsYWNlbWVudCB3b3JrcyBmb3IgYm90aCBcaW5zZXJ0XGZvb3RpbnN7Zm9vfSBhbmQKKyUgXGluc2VydFxmb290aW5zXGJncm91cCBmb29cZWdyb3VwLCBidXQgaXQgZG9lc24ndCB3b3JrIGZvciBcaW5zZXJ0Mjd7Zm9vfS4KKyUKK1xkZWZcc2F2ZWluc2VydCMxeyUKKyAgXGVkZWZcbmV4dHtcbm9leHBhbmRcc2F2ZXRvYm94IFxtYWtlU0FWRW5hbWUjMX0lCisgIFxhZnRlcmFzc2lnbm1lbnRcbmV4dAorICAlIHN3YWxsb3cgdGhlIGxlZnQgYnJhY2UKKyAgXGxldFx0ZW1wID0KK30KK1xkZWZcbWFrZVNBVkVuYW1lIzF7XG1ha2Vjc25hbWV7U0FWRVxleHBhbmRhZnRlclxnb2JibGVcc3RyaW5nIzF9fQorXGRlZlxzYXZldG9ib3gjMXtcZ2xvYmFsXHNldGJveCMxID0gXHZib3hcYmdyb3VwIFx1bnZib3gjMX0KKworXGRlZlxjaGVja3NhdmVpbnMjMXtcaWZ2b2lkIzFcZWxzZSBccGxhY2VzYXZlaW5zIzFcZml9CisKK1xkZWZccGxhY2VzYXZlaW5zIzF7JQorICBccHRleGluc2VydCBcY3NuYW1lXGV4cGFuZGFmdGVyXGdvYmJsZXNhdmVcc3RyaW5nIzFcZW5kY3NuYW1lCisgICAge1xib3gjMX0lCit9CisKKyUgZWF0IEBTQVZFIC0tIGJld2FyZSwgYWxsIG9mIHRoZW0gaGF2ZSBjYXRjb2RlIFxvdGhlcjoKK3sKKyAgXGRlZlxkb3NwZWNpYWxze1xkbyBTXGRvIEFcZG8gVlxkbyBFfSBcdW5jYXRjb2Rlc3BlY2lhbHMgICUgIDstKQorICBcZ2RlZlxnb2JibGVzYXZlIEBTQVZFe30KK30KKworJSBpbml0aWFsaXphdGlvbjoKK1xkZWZcbmV3c2F2ZWlucyAjMXslCisgIFxlZGVmXG5leHR7XG5vZXhwYW5kXG5ld3NhdmVpbnNYIFxtYWtlU0FWRW5hbWUjMX0lCisgIFxuZXh0Cit9CitcZGVmXG5ld3NhdmVpbnNYICMxeyUKKyAgXGNzbmFtZSBuZXdib3hcZW5kY3NuYW1lICMxJQorICBcZXhwYW5kYWZ0ZXJcZGVmXGV4cGFuZGFmdGVyXGNoZWNraW5zZXJ0c1xleHBhbmRhZnRlcntcY2hlY2tpbnNlcnRzCisgICAgXGNoZWNrc2F2ZWlucyAjMX0lCit9CisKKyUgaW5pdGlhbGl6ZToKK1xsZXRcY2hlY2tpbnNlcnRzXGVtcHR5CitcbmV3c2F2ZWluc1xmb290aW5zCitcbmV3c2F2ZWluc1xtYXJnaW4KKworCislIEBpbWFnZS4gIFdlIHVzZSB0aGUgbWFjcm9zIGZyb20gZXBzZi50ZXggdG8gc3VwcG9ydCB0aGlzLgorJSBJZiBlcHNmLnRleCBpcyBub3QgaW5zdGFsbGVkIGFuZCBAaW1hZ2UgaXMgdXNlZCwgd2UgY29tcGxhaW4uCislCislIENoZWNrIGZvciBhbmQgcmVhZCBlcHNmLnRleCB1cCBmcm9udC4gIElmIHdlIHJlYWQgaXQgb25seSBhdCBAaW1hZ2UKKyUgdGltZSwgd2UgbWlnaHQgYmUgaW5zaWRlIGEgZ3JvdXAsIGFuZCB0aGVuIGl0cyBkZWZpbml0aW9ucyB3b3VsZCBnZXQKKyUgdW5kb25lIGFuZCB0aGUgbmV4dCBpbWFnZSB3b3VsZCBmYWlsLgorXG9wZW5pbiAxID0gZXBzZi50ZXgKK1xpZmVvZiAxIFxlbHNlCisgICUgRG8gbm90IGJvdGhlciBzaG93aW5nIGJhbm5lciB3aXRoIGVwc2YudGV4IHYyLjdrIChhdmFpbGFibGUgaW4KKyAgJSBkb2MvZXBzZi50ZXggYW5kIG9uIGN0YW4pLgorICBcZGVmXGVwc2Zhbm5vdW5jZXtcdG9rczAgPSB9JQorICBcaW5wdXQgZXBzZi50ZXgKK1xmaQorXGNsb3NlaW4gMQorJQorJSBXZSB3aWxsIG9ubHkgY29tcGxhaW4gb25jZSBhYm91dCBsYWNrIG9mIGVwc2YudGV4LgorXG5ld2lmXGlmd2FybmVkbm9lcHNmCitcbmV3aGVscFxub2Vwc2ZoZWxwe2Vwc2YudGV4IG11c3QgYmUgaW5zdGFsbGVkIGZvciBpbWFnZXMgdG8KKyAgd29yay4gIEl0IGlzIGFsc28gaW5jbHVkZWQgaW4gdGhlIFRleGluZm8gZGlzdHJpYnV0aW9uLCBvciB5b3UgY2FuIGdldAorICBpdCBmcm9tIGZ0cDovL3R1Zy5vcmcvdGV4L2Vwc2YudGV4Ln0KKyUKK1xkZWZcaW1hZ2UjMXslCisgIFxpZnhcZXBzZmJveFx1bmRlZmluZWQKKyAgICBcaWZ3YXJuZWRub2Vwc2YgXGVsc2UKKyAgICAgIFxlcnJoZWxwID0gXG5vZXBzZmhlbHAKKyAgICAgIFxlcnJtZXNzYWdle2Vwc2YudGV4IG5vdCBmb3VuZCwgaW1hZ2VzIHdpbGwgYmUgaWdub3JlZH0lCisgICAgICBcZ2xvYmFsXHdhcm5lZG5vZXBzZnRydWUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcaW1hZ2V4eHggIzEsLCwsLFxmaW5pc2gKKyAgXGZpCit9CislCislIEFyZ3VtZW50cyB0byBAaW1hZ2U6CislICMxIGlzIChtYW5kYXRvcnkpIGltYWdlIGZpbGVuYW1lOyB3ZSB0YWNrIG9uIC5lcHMgZXh0ZW5zaW9uLgorJSAjMiBpcyAob3B0aW9uYWwpIHdpZHRoLCAjMyBpcyAob3B0aW9uYWwpIGhlaWdodC4KKyUgIzQgaXMgKGlnbm9yZWQgb3B0aW9uYWwpIGh0bWwgYWx0IHRleHQuCislICM1IGlzIChpZ25vcmVkIG9wdGlvbmFsKSBleHRlbnNpb24uCislICM2IGlzIGp1c3QgdGhlIHVzdWFsIGV4dHJhIGlnbm9yZWQgYXJnIGZvciBwYXJzaW5nIHRoaXMgc3R1ZmYuCitcbmV3aWZcaWZpbWFnZXZtb2RlCitcZGVmXGltYWdleHh4IzEsIzIsIzMsIzQsIzUsIzZcZmluaXNoe1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFxeXk0gPSA1ICAgICAlIGluIGNhc2Ugd2UncmUgaW5zaWRlIGFuIGV4YW1wbGUKKyAgXG5vcm1hbHR1cm5vZmZhY3RpdmUgICUgYWxsb3cgXyBldCBhbC4gaW4gbmFtZXMKKyAgJSBJZiB0aGUgaW1hZ2UgaXMgYnkgaXRzZWxmLCBjZW50ZXIgaXQuCisgIFxpZnZtb2RlCisgICAgXGltYWdldm1vZGV0cnVlCisgICAgXG5vYnJlYWtcYmlnc2tpcAorICAgICUgVXN1YWxseSB3ZSdsbCBoYXZlIHRleHQgYWZ0ZXIgdGhlIGltYWdlIHdoaWNoIHdpbGwgaW5zZXJ0CisgICAgJSBccGFyc2tpcCBnbHVlLCBzbyBpbnNlcnQgaXQgaGVyZSB0b28gdG8gZXF1YWxpemUgdGhlIHNwYWNlCisgICAgJSBhYm92ZSBhbmQgYmVsb3cuCisgICAgXG5vYnJlYWtcdnNraXBccGFyc2tpcAorICAgIFxub2JyZWFrCisgICAgXGxpbmVcYmdyb3VwCisgIFxmaQorICAlCisgICUgT3V0cHV0IHRoZSBpbWFnZS4KKyAgXGlmcGRmCisgICAgXGRvcGRmaW1hZ2V7IzF9eyMyfXsjM30lCisgIFxlbHNlCisgICAgJSBcZXBzZmJveCBpdHNlbGYgcmVzZXRzIFxlcHNmP3NpemUgYXQgZWFjaCBmaWd1cmUuCisgICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfVxpZmRpbVx3ZDAgPiAwcHQgXGVwc2Z4c2l6ZT0jMlxyZWxheCBcZmkKKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzN9XGlmZGltXHdkMCA+IDBwdCBcZXBzZnlzaXplPSMzXHJlbGF4IFxmaQorICAgIFxlcHNmYm94eyMxLmVwc30lCisgIFxmaQorICAlCisgIFxpZmltYWdldm1vZGUgXGVncm91cCBcYmlnYnJlYWsgXGZpICAlIHNwYWNlIGFmdGVyIHRoZSBpbWFnZQorXGVuZGdyb3VwfQorCisKKyUgQGZsb2F0IEZMT0FUVFlQRSxMQUJFTCxMT0MgLi4uIEBlbmQgZmxvYXQgZm9yIGRpc3BsYXllZCBmaWd1cmVzLCB0YWJsZXMsCislIGV0Yy4gIFdlIGRvbid0IGFjdHVhbGx5IGltcGxlbWVudCBmbG9hdGluZyB5ZXQsIHdlIGFsd2F5cyBpbmNsdWRlIHRoZQorJSBmbG9hdCAiaGVyZSIuICBCdXQgaXQgc2VlbWVkIHRoZSBiZXN0IG5hbWUgZm9yIHRoZSBmdXR1cmUuCislCitcZW52cGFyc2VhcmdkZWZcZmxvYXR7XGVhdGNvbW1hc3BhY2VcZWF0Y29tbWFzcGFjZVxkb2Zsb2F0IzEsICwgLFxmaW5pc2h9CisKKyUgVGhlcmUgbWF5IGJlIGEgc3BhY2UgYmVmb3JlIHNlY29uZCBhbmQvb3IgdGhpcmQgcGFyYW1ldGVyOyBkZWxldGUgaXQuCitcZGVmXGVhdGNvbW1hc3BhY2UjMSwgeyMxLH0KKworJSAjMSBpcyB0aGUgb3B0aW9uYWwgRkxPQVRUWVBFLCB0aGUgdGV4dCBsYWJlbCBmb3IgdGhpcyBmbG9hdCwgdHlwaWNhbGx5CislICJGaWd1cmUiLCAiVGFibGUiLCAiRXhhbXBsZSIsIGV0Yy4gIENhbid0IGNvbnRhaW4gY29tbWFzLiAgSWYgb21pdHRlZCwKKyUgdGhpcyBmbG9hdCB3aWxsIG5vdCBiZSBudW1iZXJlZCBhbmQgY2Fubm90IGJlIHJlZmVycmVkIHRvLgorJQorJSAjMiBpcyB0aGUgb3B0aW9uYWwgeHJlZiBsYWJlbC4gIEFsc28gbXVzdCBiZSBwcmVzZW50IGZvciB0aGUgZmxvYXQgdG8KKyUgYmUgcmVmZXJhYmxlLgorJQorJSAjMyBpcyB0aGUgb3B0aW9uYWwgcG9zaXRpb25pbmcgYXJndW1lbnQ7IGZvciBub3csIGl0IGlzIGlnbm9yZWQuICBJdAorJSB3aWxsIHNvbWVob3cgc3BlY2lmeSB0aGUgcG9zaXRpb25zIGFsbG93ZWQgdG8gZmxvYXQgdG8gKGhlcmUsIHRvcCwgYm90dG9tKS4KKyUKKyUgV2Uga2VlcCBhIHNlcGFyYXRlIGNvdW50ZXIgZm9yIGVhY2ggRkxPQVRUWVBFLCB3aGljaCB3ZSByZXNldCBhdCBlYWNoCislIGNoYXB0ZXItbGV2ZWwgY29tbWFuZC4KK1xsZXRccmVzZXRhbGxmbG9hdG5vcz1cZW1wdHkKKyUKK1xkZWZcZG9mbG9hdCMxLCMyLCMzLCM0XGZpbmlzaHslCisgIFxsZXRcdGhpc2NhcHRpb249XGVtcHR5CisgIFxsZXRcdGhpc3Nob3J0Y2FwdGlvbj1cZW1wdHkKKyAgJQorICAlIGRvbid0IGxvc2UgZm9vdG5vdGVzIGluc2lkZSBAZmxvYXQuCisgICUKKyAgJSBCRVdBUkU6IHdoZW4gdGhlIGZsb2F0cyBzdGFydCBmbG9hdCwgd2UgaGF2ZSB0byBpc3N1ZSB3YXJuaW5nIHdoZW5ldmVyIGFuCisgICUgaW5zZXJ0IGFwcGVhcnMgaW5zaWRlIGEgZmxvYXQgd2hpY2ggY291bGQgcG9zc2libHkgZmxvYXQuIC0ta2FzYWwsIDI2bWF5MDQKKyAgJQorICBcc3RhcnRzYXZpbmdpbnNlcnRzCisgICUKKyAgJSBXZSBjYW4ndCBiZSB1c2VkIGluc2lkZSBhIHBhcmFncmFwaC4KKyAgXHBhcgorICAlCisgIFx2dG9wXGJncm91cAorICAgIFxkZWZcZmxvYXR0eXBleyMxfSUKKyAgICBcZGVmXGZsb2F0bGFiZWx7IzJ9JQorICAgIFxkZWZcZmxvYXRsb2N7IzN9JSB3ZSBkbyBub3RoaW5nIHdpdGggdGhpcyB5ZXQuCisgICAgJQorICAgIFxpZnhcZmxvYXR0eXBlXGVtcHR5CisgICAgICBcbGV0XHNhZmVmbG9hdHR5cGU9XGVtcHR5CisgICAgXGVsc2UKKyAgICAgIHslCisgICAgICAgICUgdGhlIGZsb2F0dHlwZSBtaWdodCBoYXZlIGFjY2VudHMgb3Igb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzLAorICAgICAgICAlIGJ1dCB3ZSBuZWVkIHRvIHVzZSBpdCBpbiBhIGNvbnRyb2wgc2VxdWVuY2UgbmFtZS4KKyAgICAgICAgXGluZGV4bm9mb250cworICAgICAgICBcdHVybm9mZmFjdGl2ZQorICAgICAgICBceGRlZlxzYWZlZmxvYXR0eXBle1xmbG9hdHR5cGV9JQorICAgICAgfSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBJZiBsYWJlbCBpcyBnaXZlbiBidXQgbm8gdHlwZSwgd2UgaGFuZGxlIHRoYXQgYXMgdGhlIGVtcHR5IHR5cGUuCisgICAgXGlmeFxmbG9hdGxhYmVsXGVtcHR5IFxlbHNlCisgICAgICAlIFdlIHdhbnQgZWFjaCBGTE9BVFRZUEUgdG8gYmUgbnVtYmVyZWQgc2VwYXJhdGVseSAoRmlndXJlIDEsCisgICAgICAlIFRhYmxlIDEsIEZpZ3VyZSAyLCAuLi4pLiAgKEFuZCBpZiBubyBsYWJlbCwgbm8gbnVtYmVyLikKKyAgICAgICUKKyAgICAgIFxleHBhbmRhZnRlclxnZXRmbG9hdG5vXGNzbmFtZVxzYWZlZmxvYXR0eXBlIGZsb2F0bm9cZW5kY3NuYW1lCisgICAgICBcZ2xvYmFsXGFkdmFuY2VcZmxvYXRubyBieSAxCisgICAgICAlCisgICAgICB7JQorICAgICAgICAlIFRoaXMgbWFnaWMgdmFsdWUgZm9yIFx0aGlzc2VjdGlvbiBpcyBvdXRwdXQgYnkgXHNldHJlZiBhcyB0aGUKKyAgICAgICAgJSBYUkVGTEFCRUwtdGl0bGUgdmFsdWUuICBceHJlZlggdXNlcyBpdCB0byBkaXN0aW5ndWlzaCBmbG9hdAorICAgICAgICAlIGxhYmVscyAod2hpY2ggaGF2ZSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IG91dHB1dCBmb3JtYXQpIGZyb20KKyAgICAgICAgJSBub2RlIGFuZCBhbmNob3IgbGFiZWxzLiAgQW5kIFx4cmRlZiB1c2VzIGl0IHRvIGNvbnN0cnVjdCB0aGUKKyAgICAgICAgJSBsaXN0cyBvZiBmbG9hdHMuCisgICAgICAgICUKKyAgICAgICAgXGVkZWZcdGhpc3NlY3Rpb257XGZsb2F0bWFnaWM9XHNhZmVmbG9hdHR5cGV9JQorICAgICAgICBcc2V0cmVme1xmbG9hdGxhYmVsfXtZZmxvYXR9JQorICAgICAgfSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBzdGFydCB3aXRoIFxwYXJza2lwIGdsdWUsIEkgZ3Vlc3MuCisgICAgXHZza2lwXHBhcnNraXAKKyAgICAlCisgICAgJSBEb24ndCBzdXBwcmVzcyBpbmRlbnRhdGlvbiBpZiBhIGZsb2F0IGhhcHBlbnMgdG8gc3RhcnQgYSBzZWN0aW9uLgorICAgIFxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnQKK30KKworJSB3ZSBoYXZlIHRoZXNlIHBvc3NpYmlsaXRpZXM6CislIEBmbG9hdCBGb28sbGJsICYgQGNhcHRpb257Q2FwfTogRm9vIDEuMTogQ2FwCislIEBmbG9hdCBGb28sbGJsICYgbm8gY2FwdGlvbjogICAgRm9vIDEuMQorJSBAZmxvYXQgRm9vICYgQGNhcHRpb257Q2FwfTogICAgIEZvbzogQ2FwCislIEBmbG9hdCBGb28gJiBubyBjYXB0aW9uOiAgICAgICAgRm9vCislIEBmbG9hdCAsbGJsICYgQ2FwdGlvbntDYXB9OiAgICAgMS4xOiBDYXAKKyUgQGZsb2F0ICxsYmwgJiBubyBjYXB0aW9uOiAgICAgICAxLjEKKyUgQGZsb2F0ICYgQGNhcHRpb257Q2FwfTogICAgICAgICBDYXAKKyUgQGZsb2F0ICYgbm8gY2FwdGlvbjoKKyUKK1xkZWZcRWZsb2F0eyUKKyAgICBcbGV0XGZsb2F0aWRlbnQgPSBcZW1wdHkKKyAgICAlCisgICAgJSBJbiBhbGwgY2FzZXMsIGlmIHdlIGhhdmUgYSBmbG9hdCB0eXBlLCBpdCBjb21lcyBmaXJzdC4KKyAgICBcaWZ4XGZsb2F0dHlwZVxlbXB0eSBcZWxzZSBcZGVmXGZsb2F0aWRlbnR7XGZsb2F0dHlwZX1cZmkKKyAgICAlCisgICAgJSBJZiB3ZSBoYXZlIGFuIHhyZWYgbGFiZWwsIHRoZSBudW1iZXIgY29tZXMgbmV4dC4KKyAgICBcaWZ4XGZsb2F0bGFiZWxcZW1wdHkgXGVsc2UKKyAgICAgIFxpZnhcZmxvYXR0eXBlXGVtcHR5IFxlbHNlICUgaWYgYWxzbyBoYWQgZmxvYXQgdHlwZSwgbmVlZCB0aWUgZmlyc3QuCisgICAgICAgIFxhcHBlbmR0b21hY3JvXGZsb2F0aWRlbnR7XHRpZX0lCisgICAgICBcZmkKKyAgICAgICUgdGhlIG51bWJlci4KKyAgICAgIFxhcHBlbmR0b21hY3JvXGZsb2F0aWRlbnR7XGNoYXBsZXZlbHByZWZpeFx0aGVcZmxvYXRub30lCisgICAgXGZpCisgICAgJQorICAgICUgU3RhcnQgdGhlIHByaW50ZWQgY2FwdGlvbiB3aXRoIHdoYXQgd2UndmUgY29uc3RydWN0ZWQgaW4KKyAgICAlIFxmbG9hdGlkZW50LCBidXQga2VlcCBpdCBzZXBhcmF0ZTsgd2UgbmVlZCBcZmxvYXRpZGVudCBhZ2Fpbi4KKyAgICBcbGV0XGNhcHRpb25saW5lID0gXGZsb2F0aWRlbnQKKyAgICAlCisgICAgXGlmeFx0aGlzY2FwdGlvblxlbXB0eSBcZWxzZQorICAgICAgXGlmeFxmbG9hdGlkZW50XGVtcHR5IFxlbHNlCisJXGFwcGVuZHRvbWFjcm9cY2FwdGlvbmxpbmV7OiB9JSBoYWQgaWRlbnQsIHNvIG5lZWQgYSBjb2xvbiBiZXR3ZWVuCisgICAgICBcZmkKKyAgICAgICUKKyAgICAgICUgY2FwdGlvbiB0ZXh0LgorICAgICAgXGFwcGVuZHRvbWFjcm9cY2FwdGlvbmxpbmV7XHNjYW5leHBcdGhpc2NhcHRpb259JQorICAgIFxmaQorICAgICUKKyAgICAlIElmIHdlIGhhdmUgYW55dGhpbmcgdG8gcHJpbnQsIHByaW50IGl0LCB3aXRoIHNwYWNlIGJlZm9yZS4KKyAgICAlIEV2ZW50dWFsbHkgdGhpcyBuZWVkcyB0byBiZWNvbWUgYW4gXGluc2VydC4KKyAgICBcaWZ4XGNhcHRpb25saW5lXGVtcHR5IFxlbHNlCisgICAgICBcdnNraXAuNVxwYXJza2lwCisgICAgICBcY2FwdGlvbmxpbmUKKyAgICAgICUKKyAgICAgICUgU3BhY2UgYmVsb3cgY2FwdGlvbi4KKyAgICAgIFx2c2tpcFxwYXJza2lwCisgICAgXGZpCisgICAgJQorICAgICUgSWYgaGF2ZSBhbiB4cmVmIGxhYmVsLCB3cml0ZSB0aGUgbGlzdCBvZiBmbG9hdHMgaW5mby4gIERvIHRoaXMKKyAgICAlIGFmdGVyIHRoZSBjYXB0aW9uLCB0byBhdm9pZCBjaGFuY2Ugb2YgaXQgYmVpbmcgYSBicmVha3BvaW50LgorICAgIFxpZnhcZmxvYXRsYWJlbFxlbXB0eSBcZWxzZQorICAgICAgJSBXcml0ZSB0aGUgdGV4dCB0aGF0IGdvZXMgaW4gdGhlIGxvZiB0byB0aGUgYXV4IGZpbGUgYXMKKyAgICAgICUgXGZsb2F0bGFiZWwtbG9mLiAgQmVzaWRlcyBcZmxvYXRpZGVudCwgd2UgaW5jbHVkZSB0aGUgc2hvcnQKKyAgICAgICUgY2FwdGlvbiBpZiBzcGVjaWZpZWQsIGVsc2UgdGhlIGZ1bGwgY2FwdGlvbiBpZiBzcGVjaWZpZWQsIGVsc2Ugbm90aGluZy4KKyAgICAgIHslCisgICAgICAgIFxhdGR1bW1pZXMKKyAgICAgICAgJQorICAgICAgICAlIHNpbmNlIHdlIHJlYWQgdGhlIGNhcHRpb24gdGV4dCBpbiB0aGUgbWFjcm8gd29ybGQsIHdoZXJlIF5eTQorICAgICAgICAlIGlzIHR1cm5lZCBpbnRvIGEgbm9ybWFsIGNoYXJhY3Rlciwgd2UgaGF2ZSB0byBzY2FuIGl0IGJhY2ssIHNvCisgICAgICAgICUgd2UgZG9uJ3Qgd3JpdGUgdGhlIGxpdGVyYWwgdGhyZWUgY2hhcmFjdGVycyAiXl5NIiBpbnRvIHRoZSBhdXggZmlsZS4KKwlcc2NhbmV4cHslCisJICBceGRlZlxub2V4cGFuZFxndGVtcHslCisJICAgIFxpZnhcdGhpc3Nob3J0Y2FwdGlvblxlbXB0eQorCSAgICAgIFx0aGlzY2FwdGlvbgorCSAgICBcZWxzZQorCSAgICAgIFx0aGlzc2hvcnRjYXB0aW9uCisJICAgIFxmaQorCSAgfSUKKwl9JQorICAgICAgICBcaW1tZWRpYXRlXHdyaXRlXGF1eGZpbGV7QHhyZGVme1xmbG9hdGxhYmVsLWxvZn17XGZsb2F0aWRlbnQKKwkgIFxpZnhcZ3RlbXBcZW1wdHkgXGVsc2UgOiBcZ3RlbXAgXGZpfX0lCisgICAgICB9JQorICAgIFxmaQorICBcZWdyb3VwICAlIGVuZCBvZiBcdnRvcAorICAlCisgICUgcGxhY2UgdGhlIGNhcHR1cmVkIGluc2VydHMKKyAgJQorICAlIEJFV0FSRTogd2hlbiB0aGUgZmxvYXRzIHN0YXJ0IGZsb2F0aW5nLCB3ZSBoYXZlIHRvIGlzc3VlIHdhcm5pbmcKKyAgJSB3aGVuZXZlciBhbiBpbnNlcnQgYXBwZWFycyBpbnNpZGUgYSBmbG9hdCB3aGljaCBjb3VsZCBwb3NzaWJseQorICAlIGZsb2F0LiAtLWthc2FsLCAyNm1heTA0CisgICUKKyAgXGNoZWNraW5zZXJ0cworfQorCislIEFwcGVuZCB0aGUgdG9rZW5zICMyIHRvIHRoZSBkZWZpbml0aW9uIG9mIG1hY3JvICMxLCBub3QgZXhwYW5kaW5nIGVpdGhlci4KKyUKK1xkZWZcYXBwZW5kdG9tYWNybyMxIzJ7JQorICBcZXhwYW5kYWZ0ZXJcZGVmXGV4cGFuZGFmdGVyIzFcZXhwYW5kYWZ0ZXJ7IzEjMn0lCit9CisKKyUgQGNhcHRpb24sIEBzaG9ydGNhcHRpb24KKyUKK1xkZWZcY2FwdGlvbntcZG9jYXB0aW9uXHRoaXNjYXB0aW9ufQorXGRlZlxzaG9ydGNhcHRpb257XGRvY2FwdGlvblx0aGlzc2hvcnRjYXB0aW9ufQorXGRlZlxkb2NhcHRpb257XGNoZWNrZW52XGZsb2F0IFxiZ3JvdXBcc2NhbmFyZ2N0eHRcZGVmY2FwdGlvbn0KK1xkZWZcZGVmY2FwdGlvbiMxIzJ7XGVncm91cCBcZGVmIzF7IzJ9fQorCislIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGNvbnRyb2wgc2VxdWVuY2UgaWRlbnRpZnlpbmcgdGhlIGNvdW50ZXIgd2UgYXJlCislIGdvaW5nIHRvIHVzZS4gIENyZWF0ZSBpdCBpZiBpdCBkb2Vzbid0IGV4aXN0IGFuZCBhc3NpZ24gaXQgdG8gXGZsb2F0bm8uCitcZGVmXGdldGZsb2F0bm8jMXslCisgIFxpZngjMVxyZWxheAorICAgICAgJSBIYXZlbid0IHNlZW4gdGhpcyBmaWd1cmUgdHlwZSBiZWZvcmUuCisgICAgICBcY3NuYW1lIG5ld2NvdW50XGVuZGNzbmFtZSAjMSUKKyAgICAgICUKKyAgICAgICUgUmVtZW1iZXIgdG8gcmVzZXQgdGhpcyBmbG9hdG5vIGF0IHRoZSBuZXh0IGNoYXAuCisgICAgICBcZXhwYW5kYWZ0ZXJcZ2RlZlxleHBhbmRhZnRlclxyZXNldGFsbGZsb2F0bm9zCisgICAgICAgIFxleHBhbmRhZnRlcntccmVzZXRhbGxmbG9hdG5vcyAjMT0wIH0lCisgIFxmaQorICBcbGV0XGZsb2F0bm8jMSUKK30KKworJSBcc2V0cmVmIGNhbGxzIHRoaXMgdG8gZ2V0IHRoZSBYUkVGTEFCRUwtc250IHZhbHVlLiAgV2Ugd2FudCBhbiBAeHJlZgorJSB0byB0aGUgRkxPQVRMQUJFTCB0byBleHBhbmQgdG8gIkZpZ3VyZSAzLjEiLiAgV2UgY2FsbCBcc2V0cmVmIHdoZW4gd2UKKyUgZmlyc3QgcmVhZCB0aGUgQGZsb2F0IGNvbW1hbmQuCislCitcZGVmXFlmbG9hdHtcZmxvYXR0eXBlQHRpZSBcY2hhcGxldmVscHJlZml4XHRoZVxmbG9hdG5vfSUKKworJSBNYWdpYyBzdHJpbmcgdXNlZCBmb3IgdGhlIFhSRUZMQUJFTC10aXRsZSB2YWx1ZSwgc28gXHhyZWZYIGNhbgorJSBkaXN0aW5ndWlzaCBmbG9hdHMgZnJvbSBvdGhlciB4cmVmIHR5cGVzLgorXGRlZlxmbG9hdG1hZ2ljeyEhZmxvYXQhIX0KKworJSAjMSBpcyB0aGUgY29udHJvbCBzZXF1ZW5jZSB3ZSBhcmUgcGFzc2VkOyB3ZSBleHBhbmQgaW50byBhIGNvbmRpdGlvbmFsCislIHdoaWNoIGlzIHRydWUgaWYgIzEgcmVwcmVzZW50cyBhIGZsb2F0IHJlZi4gIFRoYXQgaXMsIHRoZSBtYWdpYworJSBcdGhpc3NlY3Rpb24gdmFsdWUgd2hpY2ggd2UgXHNldHJlZiBhYm92ZS4KKyUKK1xkZWZcaWZmbG9hdCMxe1xleHBhbmRhZnRlclxkb2lmZmxvYXQjMT09XGZpbmlzaH0KKyUKKyUgIzEgaXMgKG1heWJlKSB0aGUgXGZsb2F0bWFnaWMgc3RyaW5nLiAgSWYgc28sICMyIHdpbGwgYmUgdGhlCislIChzYWZlKSBmbG9hdCB0eXBlIGZvciB0aGlzIGZsb2F0LiAgV2Ugc2V0IFxpZmZsb2F0dHlwZSB0byAjMi4KKyUKK1xkZWZcZG9pZmZsb2F0IzE9IzI9IzNcZmluaXNoeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGRlZlxpZmZsb2F0dHlwZXsjMn0lCisgIFxpZnhcdGVtcFxmbG9hdG1hZ2ljCit9CisKKyUgQGxpc3RvZmZsb2F0cyBGTE9BVFRZUEUgLSBwcmludCBhIGxpc3Qgb2YgZmxvYXRzIGxpa2UgYSB0YWJsZSBvZiBjb250ZW50cy4KKyUKK1xwYXJzZWFyZ2RlZlxsaXN0b2ZmbG9hdHN7JQorICBcZGVmXGZsb2F0dHlwZXsjMX0lIGZsb2F0dHlwZQorICB7JQorICAgICUgdGhlIGZsb2F0dHlwZSBtaWdodCBoYXZlIGFjY2VudHMgb3Igb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzLAorICAgICUgYnV0IHdlIG5lZWQgdG8gdXNlIGl0IGluIGEgY29udHJvbCBzZXF1ZW5jZSBuYW1lLgorICAgIFxpbmRleG5vZm9udHMKKyAgICBcdHVybm9mZmFjdGl2ZQorICAgIFx4ZGVmXHNhZmVmbG9hdHR5cGV7XGZsb2F0dHlwZX0lCisgIH0lCisgICUKKyAgJSBceHJkZWYgc2F2ZXMgdGhlIGZsb2F0cyBhcyBhIFxkby1saXN0IGluIFxmbG9hdGxpc3RTQUZFRkxPQVRUWVBFLgorICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBmbG9hdGxpc3Rcc2FmZWZsb2F0dHlwZVxlbmRjc25hbWUgXHJlbGF4CisgICAgXGlmaGF2ZXhyZWZzCisgICAgICAlIGlmIHRoZSB1c2VyIHNhaWQgQGxpc3RvZmZsb2F0cyBmb28gYnV0IG5ldmVyIEBmbG9hdCBmb28uCisgICAgICBcbWVzc2FnZXtcbGluZW51bWJlciBObyBgXHNhZmVmbG9hdHR5cGUnIGZsb2F0cyB0byBsaXN0Ln0lCisgICAgXGZpCisgIFxlbHNlCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgIFxsZWZ0c2tpcD1cdG9jaW5kZW50ICAlIGluZGVudCB0aGVzZSBlbnRyaWVzIGxpa2UgYSB0b2MKKyAgICAgIFxsZXRcZG89XGxpc3RvZmZsb2F0c2RvCisgICAgICBcY3NuYW1lIGZsb2F0bGlzdFxzYWZlZmxvYXR0eXBlXGVuZGNzbmFtZQorICAgIFxlbmRncm91cAorICBcZmkKK30KKworJSBUaGlzIGlzIGNhbGxlZCBvbiBlYWNoIGVudHJ5IGluIGEgbGlzdCBvZiBmbG9hdHMuICBXZSdyZSBwYXNzZWQgdGhlCislIHhyZWYgbGFiZWwsIGluIHRoZSBmb3JtIExBQkVMLXRpdGxlLCB3aGljaCBpcyBob3cgd2Ugc2F2ZSBpdCBpbiB0aGUKKyUgYXV4IGZpbGUuICBXZSBzdHJpcCBvZmYgdGhlIC10aXRsZSBhbmQgbG9vayB1cCBcWFJMQUJFTC1sb2YsIHdoaWNoCislIGhhcyB0aGUgdGV4dCB3ZSdyZSBzdXBwb3NlZCB0byB0eXBlc2V0IGhlcmUuCislCislIEZpZ3VyZXMgd2l0aG91dCB4cmVmIGxhYmVscyB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgbGlzdCAoc2luY2UKKyUgdGhleSB3b24ndCBhcHBlYXIgaW4gdGhlIGF1eCBmaWxlKS4KKyUKK1xkZWZcbGlzdG9mZmxvYXRzZG8jMXtcbGlzdG9mZmxvYXRzZG9lbnRyeSMxXGZpbmlzaH0KK1xkZWZcbGlzdG9mZmxvYXRzZG9lbnRyeSMxLXRpdGxlXGZpbmlzaHt7JQorICAlIENhbid0IGZ1bGx5IGV4cGFuZCBYUiMxLWxvZiBiZWNhdXNlIGl0IGNhbiBjb250YWluIGFueXRoaW5nLiAgSnVzdAorICAlIHBhc3MgdGhlIGNvbnRyb2wgc2VxdWVuY2UuICBPbiB0aGUgb3RoZXIgaGFuZCwgWFIjMS1wZyBpcyBqdXN0IHRoZQorICAlIHBhZ2UgbnVtYmVyLCBhbmQgd2Ugd2FudCB0byBmdWxseSBleHBhbmQgdGhhdCBzbyB3ZSBjYW4gZ2V0IGEgbGluaworICAlIGluIHBkZiBvdXRwdXQuCisgIFx0b2tzQSA9IFxleHBhbmRhZnRlcntcY3NuYW1lIFhSIzEtbG9mXGVuZGNzbmFtZX0lCisgICUKKyAgJSB1c2UgdGhlIHNhbWUgXGVudHJ5IG1hY3JvIHdlIHVzZSB0byBnZW5lcmF0ZSB0aGUgVE9DIGFuZCBpbmRleC4KKyAgXGVkZWZcd3JpdGVlbnRyeXtcbm9leHBhbmRcZW50cnl7XHRoZVx0b2tzQX17XGNzbmFtZSBYUiMxLXBnXGVuZGNzbmFtZX19JQorICBcd3JpdGVlbnRyeQorfX0KKworXG1lc3NhZ2V7bG9jYWxpemF0aW9uLH0KKyUgYW5kIGkxOG4uCisKKyUgQGRvY3VtZW50bGFuZ3VhZ2UgaXMgdXN1YWxseSBnaXZlbiB2ZXJ5IGVhcmx5LCBqdXN0IGFmdGVyCislIEBzZXRmaWxlbmFtZS4gIElmIGRvbmUgdG9vIGxhdGUsIGl0IG1heSBub3Qgb3ZlcnJpZGUgZXZlcnl0aGluZworJSBwcm9wZXJseS4gIFNpbmdsZSBhcmd1bWVudCBpcyB0aGUgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uLgorJSBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHNldCB1cCBhIGh5cGhlbmF0aW9uIGZpbGUgaGVyZS4KKyUKK1xwYXJzZWFyZ2RlZlxkb2N1bWVudGxhbmd1YWdleyUKKyAgXHRleCAlIHJlYWQgdHhpLT8/LnRleCBmaWxlIGluIHBsYWluIFRlWC4KKyAgICAlIFJlYWQgdGhlIGZpbGUgaWYgaXQgZXhpc3RzLgorICAgIFxvcGVuaW4gMSB0eGktIzEudGV4CisgICAgXGlmZW9mIDEKKyAgICAgIFxlcnJoZWxwID0gXG5vbGFuZ2hlbHAKKyAgICAgIFxlcnJtZXNzYWdle0Nhbm5vdCByZWFkIGxhbmd1YWdlIGZpbGUgdHhpLSMxLnRleH0lCisgICAgXGVsc2UKKyAgICAgIFxpbnB1dCB0eGktIzEudGV4CisgICAgXGZpCisgICAgXGNsb3NlaW4gMQorICBcZW5kZ3JvdXAKK30KK1xuZXdoZWxwXG5vbGFuZ2hlbHB7VGhlIGdpdmVuIGxhbmd1YWdlIGRlZmluaXRpb24gZmlsZSBjYW5ub3QgYmUgZm91bmQgb3IKK2lzIGVtcHR5LiAgTWF5YmUgeW91IG5lZWQgdG8gaW5zdGFsbCBpdD8gIEluIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorc2hvdWxkIHdvcmsgaWYgbm93aGVyZSBlbHNlIGRvZXMufQorCisKKyUgQGRvY3VtZW50ZW5jb2Rpbmcgc2hvdWxkIGNoYW5nZSBzb21ldGhpbmcgaW4gVGVYIGV2ZW50dWFsbHksIG1vc3QKKyUgbGlrZWx5LCBidXQgZm9yIG5vdyBqdXN0IHJlY29nbml6ZSBpdC4KK1xsZXRcZG9jdW1lbnRlbmNvZGluZyA9IFxjb21tZW50CisKKworJSBQYWdlIHNpemUgcGFyYW1ldGVycy4KKyUKK1xuZXdkaW1lblxkZWZhdWx0cGFyaW5kZW50IFxkZWZhdWx0cGFyaW5kZW50ID0gMTVwdAorCitcY2hhcGhlYWRpbmdza2lwID0gMTVwdCBwbHVzIDRwdCBtaW51cyAycHQKK1xzZWNoZWFkaW5nc2tpcCA9IDEycHQgcGx1cyAzcHQgbWludXMgMnB0Citcc3Vic2VjaGVhZGluZ3NraXAgPSA5cHQgcGx1cyAycHQgbWludXMgMnB0CisKKyUgUHJldmVudCB1bmRlcmZ1bGwgdmJveCBlcnJvciBtZXNzYWdlcy4KK1x2YmFkbmVzcyA9IDEwMDAwCisKKyUgRG9uJ3QgYmUgc28gZmluaWNreSBhYm91dCB1bmRlcmZ1bGwgaGJveGVzLCBlaXRoZXIuCitcaGJhZG5lc3MgPSAyMDAwCisKKyUgRm9sbG93aW5nIEdlb3JnZSBCdXNoLCBqdXN0IGdldCByaWQgb2Ygd2lkb3dzIGFuZCBvcnBoYW5zLgorXHdpZG93cGVuYWx0eT0xMDAwMAorXGNsdWJwZW5hbHR5PTEwMDAwCisKKyUgVXNlIFRlWCAzLjAncyBcZW1lcmdlbmN5c3RyZXRjaCB0byBoZWxwIGxpbmUgYnJlYWtpbmcsIGJ1dCBpZiB3ZSdyZQorJSB1c2luZyBhbiBvbGQgdmVyc2lvbiBvZiBUZVgsIGRvbid0IGRvIGFueXRoaW5nLiAgV2Ugd2FudCB0aGUgYW1vdW50IG9mCislIHN0cmV0Y2ggYWRkZWQgdG8gZGVwZW5kIG9uIHRoZSBsaW5lIGxlbmd0aCwgaGVuY2UgdGhlIGRlcGVuZGVuY2Ugb24KKyUgXGhzaXplLiAgV2UgY2FsbCB0aGlzIHdoZW5ldmVyIHRoZSBwYXBlciBzaXplIGlzIHNldC4KKyUKK1xkZWZcc2V0ZW1lcmdlbmN5c3RyZXRjaHslCisgIFxpZnhcZW1lcmdlbmN5c3RyZXRjaFx0aGlzaXN1bmRlZmluZWQKKyAgICAlIEFsbG93IHVzIHRvIGFzc2lnbiB0byBcZW1lcmdlbmN5c3RyZXRjaCBhbnl3YXkuCisgICAgXGRlZlxlbWVyZ2VuY3lzdHJldGNoe1xkaW1lbjB9JQorICBcZWxzZQorICAgIFxlbWVyZ2VuY3lzdHJldGNoID0gLjE1XGhzaXplCisgIFxmaQorfQorCislIFBhcmFtZXRlcnMgaW4gb3JkZXI6IDEpIHRleHRoZWlnaHQ7IDIpIHRleHR3aWR0aDsKKyUgMykgdm9mZnNldDsgNCkgaG9mZnNldDsgNSkgYmluZGluZyBvZmZzZXQ7IDYpIHRvcHNraXA7CislIDcpIHBoeXNpY2FsIHBhZ2UgaGVpZ2h0OyA4KSBwaHlzaWNhbCBwYWdlIHdpZHRoLgorJQorJSBXZSBhbHNvIGNhbGwgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfSwgc28gdGhlIGNhbGxlciBzaG91bGQgZGVmaW5lCislIFx0ZXh0bGVhZGluZy4gIFRoZSBjYWxsZXIgc2hvdWxkIGFsc28gc2V0IFxwYXJza2lwLgorJQorXGRlZlxpbnRlcm5hbHBhZ2VzaXplcyMxIzIjMyM0IzUjNiM3Izh7JQorICBcdm9mZnNldCA9ICMzXHJlbGF4CisgIFx0b3Bza2lwID0gIzZccmVsYXgKKyAgXHNwbGl0dG9wc2tpcCA9IFx0b3Bza2lwCisgICUKKyAgXHZzaXplID0gIzFccmVsYXgKKyAgXGFkdmFuY2VcdnNpemUgYnkgXHRvcHNraXAKKyAgXG91dGVydnNpemUgPSBcdnNpemUKKyAgXGFkdmFuY2Vcb3V0ZXJ2c2l6ZSBieSAyXHRvcGFuZGJvdHRvbW1hcmdpbgorICBccGFnZWhlaWdodCA9IFx2c2l6ZQorICAlCisgIFxoc2l6ZSA9ICMyXHJlbGF4CisgIFxvdXRlcmhzaXplID0gXGhzaXplCisgIFxhZHZhbmNlXG91dGVyaHNpemUgYnkgMC41aW4KKyAgXHBhZ2V3aWR0aCA9IFxoc2l6ZQorICAlCisgIFxub3JtYWxvZmZzZXQgPSAjNFxyZWxheAorICBcYmluZGluZ29mZnNldCA9ICM1XHJlbGF4CisgICUKKyAgXGlmcGRmCisgICAgXHBkZnBhZ2VoZWlnaHQgIzdccmVsYXgKKyAgICBccGRmcGFnZXdpZHRoICM4XHJlbGF4CisgIFxmaQorICAlCisgIFxzZXRsZWFkaW5ne1x0ZXh0bGVhZGluZ30KKyAgJQorICBccGFyaW5kZW50ID0gXGRlZmF1bHRwYXJpbmRlbnQKKyAgXHNldGVtZXJnZW5jeXN0cmV0Y2gKK30KKworJSBAbGV0dGVycGFwZXIgKHRoZSBkZWZhdWx0KS4KK1xkZWZcbGV0dGVycGFwZXJ7e1xnbG9iYWxkZWZzID0gMQorICBccGFyc2tpcCA9IDNwdCBwbHVzIDJwdCBtaW51cyAxcHQKKyAgXHRleHRsZWFkaW5nID0gMTMuMnB0CisgICUKKyAgJSBJZiBwYWdlIGlzIG5vdGhpbmcgYnV0IHRleHQsIG1ha2UgaXQgY29tZSBvdXQgZXZlbi4KKyAgXGludGVybmFscGFnZXNpemVzezQ2XGJhc2VsaW5lc2tpcH17NmlufSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXsuMjVpbn0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17MzZwdH0lCisgICAgICAgICAgICAgICAgICAgIHsxMWlufXs4LjVpbn0lCit9fQorCislIFVzZSBAc21hbGxib29rIHRvIHJlc2V0IHBhcmFtZXRlcnMgZm9yIDd4OS4yNSB0cmltIHNpemUuCitcZGVmXHNtYWxsYm9va3t7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gMnB0IHBsdXMgMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEycHQKKyAgJQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7Ny41aW59ezVpbn0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17LjI1aW59JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezE2cHR9JQorICAgICAgICAgICAgICAgICAgICB7OS4yNWlufXs3aW59JQorICAlCisgIFxsaXNwbmFycm93aW5nID0gMC4zaW4KKyAgXHRvbGVyYW5jZSA9IDcwMAorICBcaGZ1enogPSAxcHQKKyAgXGNvbnRlbnRzcmlnaHRtYXJnaW4gPSAwcHQKKyAgXGRlZmJvZHlpbmRlbnQgPSAuNWNtCit9fQorCislIFVzZSBAc21hbGxlcmJvb2sgdG8gcmVzZXQgcGFyYW1ldGVycyBmb3IgNng5IHRyaW0gc2l6ZS4KKyUgKEp1c3QgdGVzdGluZywgcGFyYW1ldGVycyBzdGlsbCBpbiBmbHV4LikKK1xkZWZcc21hbGxlcmJvb2t7e1xnbG9iYWxkZWZzID0gMQorICBccGFyc2tpcCA9IDEuNXB0IHBsdXMgMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEycHQKKyAgJQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7Ny40aW59ezQuOGlufSUKKyAgICAgICAgICAgICAgICAgICAgey0uMmlufXstLjRpbn0lCisgICAgICAgICAgICAgICAgICAgIHswcHR9ezE0cHR9JQorICAgICAgICAgICAgICAgICAgICB7OWlufXs2aW59JQorICAlCisgIFxsaXNwbmFycm93aW5nID0gMC4yNWluCisgIFx0b2xlcmFuY2UgPSA3MDAKKyAgXGhmdXp6ID0gMXB0CisgIFxjb250ZW50c3JpZ2h0bWFyZ2luID0gMHB0CisgIFxkZWZib2R5aW5kZW50ID0gLjRjbQorfX0KKworJSBVc2UgQGFmb3VycGFwZXIgdG8gcHJpbnQgb24gRXVyb3BlYW4gQTQgcGFwZXIuCitcZGVmXGFmb3VycGFwZXJ7e1xnbG9iYWxkZWZzID0gMQorICBccGFyc2tpcCA9IDNwdCBwbHVzIDJwdCBtaW51cyAxcHQKKyAgXHRleHRsZWFkaW5nID0gMTMuMnB0CisgICUKKyAgJSBEb3VibGUtc2lkZSBwcmludGluZyB2aWEgcG9zdHNjcmlwdCBvbiBMYXNlcmpldCA0MDUwCisgICUgcHJpbnRzIGRvdWJsZS1zaWRlZCBuaWNlbHkgd2hlbiBcYmluZGluZ29mZnNldD0xMG1tIGFuZCBcaG9mZnNldD0tNm1tLgorICAlIFRvIGNoYW5nZSB0aGUgc2V0dGluZ3MgZm9yIGEgZGlmZmVyZW50IHByaW50ZXIgb3Igc2l0dWF0aW9uLCBhZGp1c3QKKyAgJSBcbm9ybWFsb2Zmc2V0IHVudGlsIHRoZSBmcm9udC1zaWRlIGFuZCBiYWNrLXNpZGUgdGV4dHMgYWxpZ24uICBUaGVuCisgICUgZG8gdGhlIHNhbWUgZm9yIFxiaW5kaW5nb2Zmc2V0LiAgWW91IGNhbiBzZXQgdGhlc2UgZm9yIHRlc3RpbmcgaW4KKyAgJSB5b3VyIHRleGluZm8gc291cmNlIGZpbGUgbGlrZSB0aGlzOgorICAlIEB0ZXgKKyAgJSBcZ2xvYmFsXG5vcm1hbG9mZnNldCA9IC02bW0KKyAgJSBcZ2xvYmFsXGJpbmRpbmdvZmZzZXQgPSAxMG1tCisgICUgQGVuZCB0ZXgKKyAgXGludGVybmFscGFnZXNpemVzezUxXGJhc2VsaW5lc2tpcH17MTYwbW19CisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17XGhvZmZzZXR9JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezQ0cHR9JQorICAgICAgICAgICAgICAgICAgICB7Mjk3bW19ezIxMG1tfSUKKyAgJQorICBcdG9sZXJhbmNlID0gNzAwCisgIFxoZnV6eiA9IDFwdAorICBcY29udGVudHNyaWdodG1hcmdpbiA9IDBwdAorICBcZGVmYm9keWluZGVudCA9IDVtbQorfX0KKworJSBVc2UgQGFmaXZlcGFwZXIgdG8gcHJpbnQgb24gRXVyb3BlYW4gQTUgcGFwZXIuCislIEZyb20gcm9taWxkb0B1cmFuby5pY2ViLnVmb3AuYnIsIDIgSnVseSAyMDAwLgorJSBIZSBhbHNvIHJlY29tbWVuZHMgbWFraW5nIEBleGFtcGxlIGFuZCBAbGlzcCBiZSBzbWFsbC4KK1xkZWZcYWZpdmVwYXBlcnt7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gMnB0IHBsdXMgMXB0IG1pbnVzIDAuMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEyLjVwdAorICAlCisgIFxpbnRlcm5hbHBhZ2VzaXplc3sxNjBtbX17MTIwbW19JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9e1xob2Zmc2V0fSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXs4cHR9JQorICAgICAgICAgICAgICAgICAgICB7MjEwbW19ezE0OG1tfSUKKyAgJQorICBcbGlzcG5hcnJvd2luZyA9IDAuMmluCisgIFx0b2xlcmFuY2UgPSA4MDAKKyAgXGhmdXp6ID0gMS4ycHQKKyAgXGNvbnRlbnRzcmlnaHRtYXJnaW4gPSAwcHQKKyAgXGRlZmJvZHlpbmRlbnQgPSAybW0KKyAgXHRhYmxlaW5kZW50ID0gMTJtbQorfX0KKworJSBBIHNwZWNpZmljIHRleHQgbGF5b3V0LCAyNHgxNWNtIG92ZXJhbGwsIGludGVuZGVkIGZvciBBNCBwYXBlci4KK1xkZWZcYWZvdXJsYXRleHt7XGdsb2JhbGRlZnMgPSAxCisgIFxhZm91cnBhcGVyCisgIFxpbnRlcm5hbHBhZ2VzaXplc3syMzdtbX17MTUwbW19JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9ezQuNm1tfSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXs3bW19JQorICAgICAgICAgICAgICAgICAgICB7Mjk3bW19ezIxMG1tfSUKKyAgJQorICAlIE11c3QgZXhwbGljaXRseSByZXNldCB0byAwIGJlY2F1c2Ugd2UgY2FsbCBcYWZvdXJwYXBlci4KKyAgXGdsb2JhbGRlZnMgPSAwCit9fQorCislIFVzZSBAYWZvdXJ3aWRlIHRvIHByaW50IG9uIEE0IHBhcGVyIGluIGxhbmRzY2FwZSBmb3JtYXQuCitcZGVmXGFmb3Vyd2lkZXt7XGdsb2JhbGRlZnMgPSAxCisgIFxhZm91cnBhcGVyCisgIFxpbnRlcm5hbHBhZ2VzaXplc3syNDFtbX17MTY1bW19JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9ey0yLjk1bW19JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezdtbX0lCisgICAgICAgICAgICAgICAgICAgIHsyOTdtbX17MjEwbW19JQorICBcZ2xvYmFsZGVmcyA9IDAKK319CisKKyUgQHBhZ2VzaXplcyBURVhUSEVJR0hUWyxURVhUV0lEVEhdCislIFBlcmhhcHMgd2Ugc2hvdWxkIGFsbG93IHNldHRpbmcgdGhlIG1hcmdpbnMsIFx0b3Bza2lwLCBccGFyc2tpcCwKKyUgYW5kL29yIGxlYWRpbmcsIGFsc28uIE9yIHBlcmhhcHMgd2Ugc2hvdWxkIGNvbXB1dGUgdGhlbSBzb21laG93LgorJQorXHBhcnNlYXJnZGVmXHBhZ2VzaXplc3tccGFnZXNpemVzeXl5ICMxLCxcZmluaXNofQorXGRlZlxwYWdlc2l6ZXN5eXkjMSwjMiwjM1xmaW5pc2h7eyUKKyAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfVxpZmRpbVx3ZDAgPiAwcHQgXGhzaXplPSMyXHJlbGF4IFxmaQorICBcZ2xvYmFsZGVmcyA9IDEKKyAgJQorICBccGFyc2tpcCA9IDNwdCBwbHVzIDJwdCBtaW51cyAxcHQKKyAgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfSUKKyAgJQorICBcZGltZW4wID0gIzEKKyAgXGFkdmFuY2VcZGltZW4wIGJ5IFx2b2Zmc2V0CisgICUKKyAgXGRpbWVuMiA9IFxoc2l6ZQorICBcYWR2YW5jZVxkaW1lbjIgYnkgXG5vcm1hbG9mZnNldAorICAlCisgIFxpbnRlcm5hbHBhZ2VzaXplc3sjMX17XGhzaXplfSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXtcbm9ybWFsb2Zmc2V0fSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXs0NHB0fSUKKyAgICAgICAgICAgICAgICAgICAge1xkaW1lbjB9e1xkaW1lbjJ9JQorfX0KKworJSBTZXQgZGVmYXVsdCB0byBsZXR0ZXIuCislCitcbGV0dGVycGFwZXIKKworCitcbWVzc2FnZXthbmQgdHVybmluZyBvbiB0ZXhpbmZvIGlucHV0IGZvcm1hdC59CisKKyUgRGVmaW5lIG1hY3JvcyB0byBvdXRwdXQgdmFyaW91cyBjaGFyYWN0ZXJzIHdpdGggY2F0Y29kZSBmb3Igbm9ybWFsIHRleHQuCitcY2F0Y29kZWBcIj1cb3RoZXIKK1xjYXRjb2RlYFx+PVxvdGhlcgorXGNhdGNvZGVgXF49XG90aGVyCitcY2F0Y29kZWBcXz1cb3RoZXIKK1xjYXRjb2RlYFx8PVxvdGhlcgorXGNhdGNvZGVgXDw9XG90aGVyCitcY2F0Y29kZWBcPj1cb3RoZXIKK1xjYXRjb2RlYFwrPVxvdGhlcgorXGNhdGNvZGVgXCQ9XG90aGVyCitcZGVmXG5vcm1hbGRvdWJsZXF1b3RleyJ9CitcZGVmXG5vcm1hbHRpbGRle359CitcZGVmXG5vcm1hbGNhcmV0e159CitcZGVmXG5vcm1hbHVuZGVyc2NvcmV7X30KK1xkZWZcbm9ybWFsdmVydGljYWxiYXJ7fH0KK1xkZWZcbm9ybWFsbGVzc3s8fQorXGRlZlxub3JtYWxncmVhdGVyez59CitcZGVmXG5vcm1hbHBsdXN7K30KK1xkZWZcbm9ybWFsZG9sbGFyeyR9JSQgZm9udC1sb2NrIGZpeAorCislIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBtYWtlIGEgY2hhcmFjdGVyIHByaW50IG9uZSB3YXkgaW4gXHR0CislICh3aGVyZSBpdCBjYW4gcHJvYmFibHkgYmUgb3V0cHV0IGFzLWlzKSwgYW5kIGFub3RoZXIgd2F5IGluIG90aGVyIGZvbnRzLAorJSB3aGVyZSBzb21ldGhpbmcgaGFpcmllciBwcm9iYWJseSBuZWVkcyB0byBiZSBkb25lLgorJQorJSAjMSBpcyB3aGF0IHRvIHByaW50IGlmIHdlIGFyZSBpbmRlZWQgdXNpbmcgXHR0OyAjMiBpcyB3aGF0IHRvIHByaW50CislIG90aGVyd2lzZS4gIFNpbmNlIGFsbCB0aGUgQ29tcHV0ZXIgTW9kZXJuIHR5cGV3cml0ZXIgZm9udHMgaGF2ZSB6ZXJvCislIGludGVyd29yZCBzdHJldGNoIChhbmQgc2hyaW5rKSwgYW5kIGl0IGlzIHJlYXNvbmFibGUgdG8gZXhwZWN0IGFsbAorJSB0eXBld3JpdGVyIGZvbnRzIHRvIGhhdmUgdGhpcywgd2UgY2FuIGNoZWNrIHRoYXQgZm9udCBwYXJhbWV0ZXIuCislCitcZGVmXGlmdXNpbmd0dCMxIzJ7XGlmZGltIFxmb250ZGltZW4zXGZvbnQ9MHB0ICMxXGVsc2UgIzJcZml9CisKKyUgU2FtZSBhcyBhYm92ZSwgYnV0IGNoZWNrIGZvciBpdGFsaWMgZm9udC4gIEFjdHVhbGx5IHRoaXMgYWxzbyBjYXRjaGVzCislIG5vbi1pdGFsaWMgc2xhbnRlZCBmb250cyBzaW5jZSBpdCBpcyBpbXBvc3NpYmxlIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbQorJSBpdGFsaWMgZm9udHMuICBCdXQgc2luY2UgdGhpcyBpcyBvbmx5IHVzZWQgYnkgJCBhbmQgaXQgdXNlcyBcc2wgYW55d2F5CislIHRoaXMgaXMgbm90IGEgcHJvYmxlbS4KK1xkZWZcaWZ1c2luZ2l0IzEjMntcaWZkaW0gXGZvbnRkaW1lbjFcZm9udD4wcHQgIzFcZWxzZSAjMlxmaX0KKworJSBUdXJuIG9mZiBhbGwgc3BlY2lhbCBjaGFyYWN0ZXJzIGV4Y2VwdCBACislIChhbmQgdGhvc2Ugd2hpY2ggdGhlIHVzZXIgY2FuIHVzZSBhcyBpZiB0aGV5IHdlcmUgb3JkaW5hcnkpLgorJSBNb3N0IG9mIHRoZXNlIHdlIHNpbXBseSBwcmludCBmcm9tIHRoZSBcdHQgZm9udCwgYnV0IGZvciBzb21lLCB3ZSBjYW4KKyUgdXNlIG1hdGggb3Igb3RoZXIgdmFyaWFudHMgdGhhdCBsb29rIGJldHRlciBpbiBub3JtYWwgdGV4dC4KKworXGNhdGNvZGVgXCI9XGFjdGl2ZQorXGRlZlxhY3RpdmVkb3VibGVxdW90ZXt7XHR0XGNoYXIzNH19CitcbGV0Ij1cYWN0aXZlZG91YmxlcXVvdGUKK1xjYXRjb2RlYFx+PVxhY3RpdmUKK1xkZWZ+e3tcdHRcY2hhcjEyNn19CitcY2hhcmRlZlxoYXQ9YFxeCitcY2F0Y29kZWBcXj1cYWN0aXZlCitcZGVmXnt7XHR0IFxoYXR9fQorCitcY2F0Y29kZWBcXz1cYWN0aXZlCitcZGVmX3tcaWZ1c2luZ3R0XG5vcm1hbHVuZGVyc2NvcmVcX30KK1xsZXRccmVhbHVuZGVyPV8KKyUgU3Vicm91dGluZSBmb3IgdGhlIHByZXZpb3VzIG1hY3JvLgorXGRlZlxfe1xsZWF2ZXZtb2RlIFxrZXJuLjA3ZW0gXHZib3h7XGhydWxlIHdpZHRoLjNlbSBoZWlnaHQuMWV4fVxrZXJuIC4wN2VtIH0KKworXGNhdGNvZGVgXHw9XGFjdGl2ZQorXGRlZnx7e1x0dFxjaGFyMTI0fX0KK1xjaGFyZGVmIFxsZXNzPWBcPAorXGNhdGNvZGVgXDw9XGFjdGl2ZQorXGRlZjx7e1x0dCBcbGVzc319CitcY2hhcmRlZiBcZ3RyPWBcPgorXGNhdGNvZGVgXD49XGFjdGl2ZQorXGRlZj57e1x0dCBcZ3RyfX0KK1xjYXRjb2RlYFwrPVxhY3RpdmUKK1xkZWYre3tcdHQgXGNoYXIgNDN9fQorXGNhdGNvZGVgXCQ9XGFjdGl2ZQorXGRlZiR7XGlmdXNpbmdpdHt7XHNsXCR9fVxub3JtYWxkb2xsYXJ9JSQgZm9udC1sb2NrIGZpeAorCislIElmIGEgLmZtdCBmaWxlIGlzIGJlaW5nIHVzZWQsIGNoYXJhY3RlcnMgdGhhdCBtaWdodCBhcHBlYXIgaW4gYSBmaWxlCislIG5hbWUgY2Fubm90IGJlIGFjdGl2ZSB1bnRpbCB3ZSBoYXZlIHBhcnNlZCB0aGUgY29tbWFuZCBsaW5lLgorJSBTbyB0dXJuIHRoZW0gb2ZmIGFnYWluLCBhbmQgaGF2ZSBcZXZlcnlqb2IgKG9yIEBzZXRmaWxlbmFtZSkgdHVybiB0aGVtIG9uLgorJSBcb3RoZXJpZnlhY3RpdmUgaXMgY2FsbGVkIG5lYXIgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCitcZGVmXG90aGVyaWZ5YWN0aXZle1xjYXRjb2RlYCs9XG90aGVyIFxjYXRjb2RlYFxfPVxvdGhlcn0KKworJSBVc2VkIHNvbWV0aW1lcyB0byB0dXJuIG9mZiAoZWZmZWN0aXZlbHkpIHRoZSBhY3RpdmUgY2hhcmFjdGVycyBldmVuIGFmdGVyCislIHBhcnNpbmcgdGhlbS4KK1xkZWZcdHVybm9mZmFjdGl2ZXslCisgIFxub3JtYWx0dXJub2ZmYWN0aXZlCisgIFxvdGhlcmJhY2tzbGFzaAorfQorCitcY2F0Y29kZWBcQD0wCisKKyUgXGJhY2tzbGFzaGN1cmZvbnQgb3V0cHV0cyBvbmUgYmFja3NsYXNoIGNoYXJhY3RlciBpbiBjdXJyZW50IGZvbnQsCislIGFzIGluIFxjaGFyYFxcLgorXGdsb2JhbFxjaGFyZGVmXGJhY2tzbGFzaGN1cmZvbnQ9YFxcCitcZ2xvYmFsXGxldFxyYXdiYWNrc2xhc2h4eD1cYmFja3NsYXNoY3VyZm9udCAgJSBsZXQgZXhpc3RpbmcgLj8/cyBmaWxlcyB3b3JrCisKKyUgXHJlYWxiYWNrc2xhc2ggaXMgYW4gYWN0dWFsIGNoYXJhY3RlciBgXCcgd2l0aCBjYXRjb2RlIG90aGVyLCBhbmQKKyUgXGRvdWJsZWJhY2tzbGFzaCBpcyB0d28gb2YgdGhlbSAoZm9yIHRoZSBwZGYgb3V0bGluZXMpLgore1xjYXRjb2RlYFxcPVxvdGhlciBAZ2RlZkByZWFsYmFja3NsYXNoe1x9IEBnZGVmQGRvdWJsZWJhY2tzbGFzaHtcXH19CisKKyUgSW4gdGV4aW5mbywgYmFja3NsYXNoIGlzIGFuIGFjdGl2ZSBjaGFyYWN0ZXI7IGl0IHByaW50cyB0aGUgYmFja3NsYXNoCislIGluIGZpeGVkIHdpZHRoIGZvbnQuCitcY2F0Y29kZWBcXD1cYWN0aXZlCitAZGVmQG5vcm1hbGJhY2tzbGFzaHt7QHR0QGJhY2tzbGFzaGN1cmZvbnR9fQorJSBPbiBzdGFydHVwLCBAZml4YmFja3NsYXNoIGFzc2lnbnM6CislICBAbGV0IFwgPSBAbm9ybWFsYmFja3NsYXNoCisKKyUgXHJhd2JhY2tzbGFzaCBkZWZpbmVzIGFuIGFjdGl2ZSBcIHRvIGRvIFxiYWNrc2xhc2hjdXJmb250LgorJSBcb3RoZXJiYWNrc2xhc2ggZGVmaW5lcyBhbiBhY3RpdmUgXCB0byBiZSBhIGxpdGVyYWwgYFwnIGNoYXJhY3RlciB3aXRoCislIGNhdGNvZGUgb3RoZXIuCitAZ2RlZkByYXdiYWNrc2xhc2h7QGxldFw9QGJhY2tzbGFzaGN1cmZvbnR9CitAZ2RlZkBvdGhlcmJhY2tzbGFzaHtAbGV0XD1AcmVhbGJhY2tzbGFzaH0KKworJSBTYW1lIGFzIEB0dXJub2ZmYWN0aXZlIGV4Y2VwdCBvdXRwdXRzIFwgYXMge1x0dFxjaGFyYFxcfSBpbnN0ZWFkIG9mCislIHRoZSBsaXRlcmFsIGNoYXJhY3RlciBgXCcuCislIAorQGRlZkBub3JtYWx0dXJub2ZmYWN0aXZleyUKKyAgQGxldFw9QG5vcm1hbGJhY2tzbGFzaAorICBAbGV0Ij1Abm9ybWFsZG91YmxlcXVvdGUKKyAgQGxldH49QG5vcm1hbHRpbGRlCisgIEBsZXRePUBub3JtYWxjYXJldAorICBAbGV0Xz1Abm9ybWFsdW5kZXJzY29yZQorICBAbGV0fD1Abm9ybWFsdmVydGljYWxiYXIKKyAgQGxldDw9QG5vcm1hbGxlc3MKKyAgQGxldD49QG5vcm1hbGdyZWF0ZXIKKyAgQGxldCs9QG5vcm1hbHBsdXMKKyAgQGxldCQ9QG5vcm1hbGRvbGxhciAlJCBmb250LWxvY2sgZml4CisgIEB1bnNlcHNwYWNlcworfQorCislIE1ha2UgXyBhbmQgKyBcb3RoZXIgY2hhcmFjdGVycywgdGVtcG9yYXJpbHkuCislIFRoaXMgaXMgY2FuY2VsZWQgYnkgQGZpeGJhY2tzbGFzaC4KK0BvdGhlcmlmeWFjdGl2ZQorCislIElmIGEgLmZtdCBmaWxlIGlzIGJlaW5nIHVzZWQsIHdlIGRvbid0IHdhbnQgdGhlIGBcaW5wdXQgdGV4aW5mbycgdG8gc2hvdyB1cC4KKyUgVGhhdCBpcyB3aGF0IFxlYXRpbnB1dCBpcyBmb3I7IGFmdGVyIHRoYXQsIHRoZSBgXCcgc2hvdWxkIHJldmVydCB0byBwcmludGluZworJSBhIGJhY2tzbGFzaC4KKyUKK0BnZGVmQGVhdGlucHV0IGlucHV0IHRleGluZm97QGZpeGJhY2tzbGFzaH0KK0BnbG9iYWxAbGV0XCA9IEBlYXRpbnB1dAorCislIE9uIHRoZSBvdGhlciBoYW5kLCBwZXJoYXBzIHRoZSBmaWxlIGRpZCBub3QgaGF2ZSBhIGBcaW5wdXQgdGV4aW5mbycuIFRoZW4KKyUgdGhlIGZpcnN0IGBcJyBpbiB0aGUgZmlsZSB3b3VsZCBjYXVzZSBhbiBlcnJvci4gVGhpcyBtYWNybyB0cmllcyB0byBmaXgKKyUgdGhhdCwgYXNzdW1pbmcgaXQgaXMgY2FsbGVkIGJlZm9yZSB0aGUgZmlyc3QgYFwnIGNvdWxkIHBsYXVzaWJseSBvY2N1ci4KKyUgQWxzbyB0dXJuIGJhY2sgb24gYWN0aXZlIGNoYXJhY3RlcnMgdGhhdCBtaWdodCBhcHBlYXIgaW4gdGhlIGlucHV0CislIGZpbGUgbmFtZSwgaW4gY2FzZSBub3QgdXNpbmcgYSBwcmUtZHVtcGVkIGZvcm1hdC4KKyUKK0BnZGVmQGZpeGJhY2tzbGFzaHslCisgIEBpZnhcQGVhdGlucHV0IEBsZXRcID0gQG5vcm1hbGJhY2tzbGFzaCBAZmkKKyAgQGNhdGNvZGVgKz1AYWN0aXZlCisgIEBjYXRjb2RlYEBfPUBhY3RpdmUKK30KKworJSBTYXkgQGZvbywgbm90IFxmb28sIGluIGVycm9yIG1lc3NhZ2VzLgorQGVzY2FwZWNoYXIgPSBgQEAKKworJSBUaGVzZSBsb29rIG9rIGluIGFsbCBmb250cywgc28ganVzdCBtYWtlIHRoZW0gbm90IHNwZWNpYWwuCitAY2F0Y29kZWBAJiA9IEBvdGhlcgorQGNhdGNvZGVgQCMgPSBAb3RoZXIKK0BjYXRjb2RlYEAlID0gQG90aGVyCisKKworQGMgTG9jYWwgdmFyaWFibGVzOgorQGMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorQGMgcGFnZS1kZWxpbWl0ZXI6ICJeXFxcXG1lc3NhZ2UiCitAYyB0aW1lLXN0YW1wLXN0YXJ0OiAiZGVmXFxcXHRleGluZm92ZXJzaW9ueyIKK0BjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorQGMgdGltZS1zdGFtcC1lbmQ6ICJ9IgorQGMgRW5kOgorCitAYyB2aW06c3c9MjoKKworQGlnbm9yZQorICAgYXJjaC10YWc6IGUxYjM2ZTMyLWM5NmUtNDEzNS1hNDFhLTBiMmVmYTJlYTExNQorQGVuZCBpZ25vcmUKZGlmZiAtLWdpdCBhL2xpYi9ldC92ZnByaW50Zi5jIGIvbGliL2V0L3ZmcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNmY2Q3OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ldC92ZnByaW50Zi5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODggUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIGFyZSBwZXJtaXR0ZWQKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFyZQorICogZHVwbGljYXRlZCBpbiBhbGwgc3VjaCBmb3JtcyBhbmQgdGhhdCBhbnkgZG9jdW1lbnRhdGlvbiwKKyAqIGFkdmVydGlzaW5nIG1hdGVyaWFscywgYW5kIG90aGVyIG1hdGVyaWFscyByZWxhdGVkIHRvIHN1Y2gKKyAqIGRpc3RyaWJ1dGlvbiBhbmQgdXNlIGFja25vd2xlZGdlIHRoYXQgdGhlIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQKKyAqIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIEJlcmtlbGV5LiAgVGhlIG5hbWUgb2YgdGhlCisgKiBVbml2ZXJzaXR5IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXZmcHJpbnRmLmMJNS4yIChCZXJrZWxleSkgNi8yNy84OCI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgIUhBVkVfVlBSSU5URiAmJiBIQVZFX0RPUFJOVAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dmFyYXJncy5oPgorCitpbnQKK3ZmcHJpbnRmKGlvcCwgZm10LCBhcCkKKwlGSUxFICppb3A7CisJY2hhciAqZm10OworCXZhX2xpc3QgYXA7Cit7CisJaW50IGxlbjsKKwljaGFyIGxvY2FsYnVmW0JVRlNJWl07CisKKwlpZiAoaW9wLT5fZmxhZyAmIF9JT05CRikgeworCQlpb3AtPl9mbGFnICY9IH5fSU9OQkY7CisJCWlvcC0+X3B0ciA9IGlvcC0+X2Jhc2UgPSBsb2NhbGJ1ZjsKKwkJbGVuID0gX2RvcHJudChmbXQsIGFwLCBpb3ApOworCQkodm9pZCkgZmZsdXNoKGlvcCk7CisJCWlvcC0+X2ZsYWcgfD0gX0lPTkJGOworCQlpb3AtPl9iYXNlID0gTlVMTDsKKwkJaW9wLT5fYnVmc2l6ID0gMDsKKwkJaW9wLT5fY250ID0gMDsKKwl9IGVsc2UKKwkJbGVuID0gX2RvcHJudChmbXQsIGFwLCBpb3ApOworCisJcmV0dXJuIChmZXJyb3IoaW9wKSA/IEVPRiA6IGxlbik7Cit9CisjZW5kaWYgLyogIUhBVkVfVlBSSU5URiAqLwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9NYWtlZmlsZS5pbiBiL2xpYi9leHQyZnMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3YzI2YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxMTk2IEBACitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLi4vLi4KK215X2RpciA9IGxpYi9leHQyZnMKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0RFUEVORF9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvZGVidWdmcworCitATUNPTkZJR0AKKworQERFQlVHRlNfQ01UQERFQlVHRlNfTElCX09CSlMgPSBiYl9jb21wYXQubyBpbm9kZV9pby5vIHdyaXRlX2JiX2ZpbGUubworCitNS19DTURTPQlfU1NfRElSX09WRVJSSURFPS4uL3NzIC4uL3NzL21rX2NtZHMKKworQFJFU0laRVJfQ01UQFJFU0laRV9MSUJfT0JKUyA9IGR1cGZzLm8KK0BURVNUX0lPX0NNVEBURVNUX0lPX0xJQl9PQkpTID0gdGVzdF9pby5vCitASU1BR0VSX0NNVEBFMklNQUdFX0xJQl9PQkpTID0gaW1hZ2VyLm8KKworREVCVUdfT0JKUz0gZGVidWdfY21kcy5vIGV4dGVudF9jbWRzLm8gdHN0X2NtZHMubyBkZWJ1Z2ZzLm8gdXRpbC5vIFwKKwluY2hlY2subyBpY2hlY2subyBscy5vIGxzZGVsLm8gZHVtcC5vIHNldF9maWVsZHMubyBsb2dkdW1wLm8gXAorCWh0cmVlLm8gdW51c2VkLm8gZTJmcmVlZnJhZy5vIGZpbGVmcmFnLm8gZXh0ZW50X2lub2RlLm8gemFwLm8gXAorCXF1b3RhLm8gdHN0X2xpYmV4dDJmcy5vCisKK0RFQlVHX1NSQ1M9IGRlYnVnX2NtZHMuYyBleHRlbnRfY21kcy5jIHRzdF9jbWRzLmMgXAorCSQodG9wX3NyY2RpcikvZGVidWdmcy9kZWJ1Z2ZzLmMgXAorCSQodG9wX3NyY2RpcikvZGVidWdmcy91dGlsLmMgXAorCSQodG9wX3NyY2RpcikvZGVidWdmcy9uY2hlY2suYyBcCisJJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2ljaGVjay5jIFwKKwkkKHRvcF9zcmNkaXIpL2RlYnVnZnMvbHMuYyBcCisJJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2xzZGVsLmMgXAorCSQodG9wX3NyY2RpcikvZGVidWdmcy9kdW1wLmMgXAorCSQodG9wX3NyY2RpcikvZGVidWdmcy9zZXRfZmllbGRzLmMgXAorCSQodG9wX3NyY2RpcikvZGVidWdmcy9sb2dkdW1wLmMgXAorCSQodG9wX3NyY2RpcikvZGVidWdmcy9odHJlZS5jIFwKKwkkKHRvcF9zcmNkaXIpL2RlYnVnZnMvdW51c2VkLmMgXAorCSQodG9wX3NyY2RpcikvZGVidWdmcy9maWxlZnJhZy5jIFwKKwkkKHRvcF9zcmNkaXIpL2RlYnVnZnMvZXh0ZW50X2lub2RlLmMgXAorCSQodG9wX3NyY2RpcikvZGVidWdmcy96YXAuYyBcCisJJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL3F1b3RhLmMgXAorCSQodG9wX3NyY2RpcikvbWlzYy9lMmZyZWVmcmFnLmMKKworT0JKUz0gJChERUJVR0ZTX0xJQl9PQkpTKSAkKFJFU0laRV9MSUJfT0JKUykgJChFMklNQUdFX0xJQl9PQkpTKSBcCisJJChURVNUX0lPX0xJQl9PQkpTKSBcCisJZXh0Ml9lcnIubyBcCisJYWxsb2MubyBcCisJYWxsb2Nfc2IubyBcCisJYWxsb2Nfc3RhdHMubyBcCisJYWxsb2NfdGFibGVzLm8gXAorCWJhZGJsb2Nrcy5vIFwKKwliYl9pbm9kZS5vIFwKKwliaXRtYXBzLm8gXAorCWJpdG9wcy5vIFwKKwlibGttYXA2NF9iYS5vIFwKKwlibGttYXA2NF9yYi5vIFwKKwlibGtudW0ubyBcCisJYmxvY2subyBcCisJYm1hcC5vIFwKKwljaGVja19kZXNjLm8gXAorCWNsb3NlZnMubyBcCisJY3JjMTYubyBcCisJY3JjMzJjLm8gXAorCWNzdW0ubyBcCisJZGJsaXN0Lm8gXAorCWRibGlzdF9kaXIubyBcCisJZGlyYmxvY2subyBcCisJZGlyaGFzaC5vIFwKKwlkaXJfaXRlcmF0ZS5vIFwKKwlleHBhbmRkaXIubyBcCisJZXh0X2F0dHIubyBcCisJZXh0ZW50Lm8gXAorCWZpbGVpby5vIFwKKwlmaW5kZGV2Lm8gXAorCWZsdXNoYi5vIFwKKwlmcmVlZnMubyBcCisJZ2VuX2JpdG1hcC5vIFwKKwlnZW5fYml0bWFwNjQubyBcCisJZ2V0X3BhdGhuYW1lLm8gXAorCWdldHNpemUubyBcCisJZ2V0c2VjdHNpemUubyBcCisJaV9ibG9jay5vIFwKKwlpY291bnQubyBcCisJaW5kX2Jsb2NrLm8gXAorCWluaXRpYWxpemUubyBcCisJaW5saW5lLm8gXAorCWlub2RlLm8gXAorCWlvX21hbmFnZXIubyBcCisJaXNtb3VudGVkLm8gXAorCWxpbmsubyBcCisJbGxzZWVrLm8gXAorCWxvb2t1cC5vIFwKKwlta2Rpci5vIFwKKwlta2pvdXJuYWwubyBcCisJbW1wLm8gXAorCW5hbWVpLm8gXAorCW5hdGl2ZS5vIFwKKwluZXdkaXIubyBcCisJb3BlbmZzLm8gXAorCXByb2dyZXNzLm8gXAorCXB1bmNoLm8gXAorCXFjb3cyLm8gXAorCXJlYWRfYmIubyBcCisJcmVhZF9iYl9maWxlLm8gXAorCXJlc19nZHQubyBcCisJcndfYml0bWFwcy5vIFwKKwlzd2FwZnMubyBcCisJc3ltbGluay5vIFwKKwl0ZGIubyBcCisJdW5kb19pby5vIFwKKwl1bml4X2lvLm8gXAorCXVubGluay5vIFwKKwl2YWxpZF9ibGsubyBcCisJdmVyc2lvbi5vIFwKKwlyYnRyZWUubworCitTUkNTPSBleHQyX2Vyci5jIFwKKwkkKHNyY2RpcikvYWxsb2MuYyBcCisJJChzcmNkaXIpL2FsbG9jX3NiLmMgXAorCSQoc3JjZGlyKS9hbGxvY19zdGF0cy5jIFwKKwkkKHNyY2RpcikvYWxsb2NfdGFibGVzLmMgXAorCSQoc3JjZGlyKS9iYWRibG9ja3MuYyBcCisJJChzcmNkaXIpL2JiX2NvbXBhdC5jIFwKKwkkKHNyY2RpcikvYmJfaW5vZGUuYyBcCisJJChzcmNkaXIpL2JpdG1hcHMuYyBcCisJJChzcmNkaXIpL2JpdG9wcy5jIFwKKwkkKHNyY2RpcikvYmxrbWFwNjRfYmEuYyBcCisJJChzcmNkaXIpL2Jsa21hcDY0X3JiLmMgXAorCSQoc3JjZGlyKS9ibG9jay5jIFwKKwkkKHNyY2RpcikvYm1hcC5jIFwKKwkkKHNyY2RpcikvY2hlY2tfZGVzYy5jIFwKKwkkKHNyY2RpcikvY2xvc2Vmcy5jIFwKKwkkKHNyY2RpcikvY3JjMTYuYyBcCisJJChzcmNkaXIpL2NyYzMyYy5jIFwKKwkkKHNyY2RpcikvZ2VuX2NyYzMyY3RhYmxlLmMgXAorCSQoc3JjZGlyKS9jc3VtLmMgXAorCSQoc3JjZGlyKS9kYmxpc3QuYyBcCisJJChzcmNkaXIpL2RibGlzdF9kaXIuYyBcCisJJChzcmNkaXIpL2RpcmJsb2NrLmMgXAorCSQoc3JjZGlyKS9kaXJoYXNoLmMgXAorCSQoc3JjZGlyKS9kaXJfaXRlcmF0ZS5jIFwKKwkkKHNyY2RpcikvZHVwZnMuYyBcCisJJChzcmNkaXIpL2V4cGFuZGRpci5jIFwKKwkkKHNyY2RpcikvZXh0X2F0dHIuYyBcCisJJChzcmNkaXIpL2V4dGVudC5jIFwKKwkkKHNyY2RpcikvZmlsZWlvLmMgXAorCSQoc3JjZGlyKS9maW5kZGV2LmMgXAorCSQoc3JjZGlyKS9mbHVzaGIuYyBcCisJJChzcmNkaXIpL2ZyZWVmcy5jIFwKKwkkKHNyY2RpcikvZ2VuX2JpdG1hcC5jIFwKKwkkKHNyY2RpcikvZ2VuX2JpdG1hcDY0LmMgXAorCSQoc3JjZGlyKS9nZXRfcGF0aG5hbWUuYyBcCisJJChzcmNkaXIpL2dldHNpemUuYyBcCisJJChzcmNkaXIpL2dldHNlY3RzaXplLmMgXAorCSQoc3JjZGlyKS9pX2Jsb2NrLmMgXAorCSQoc3JjZGlyKS9pY291bnQuYyBcCisJJChzcmNkaXIpL2luZF9ibG9jay5jIFwKKwkkKHNyY2RpcikvaW5pdGlhbGl6ZS5jIFwKKwkkKHNyY2RpcikvaW5saW5lLmMgXAorCSQoc3JjZGlyKS9pbm9kZS5jIFwKKwkkKHNyY2RpcikvaW5vZGVfaW8uYyBcCisJJChzcmNkaXIpL2ltYWdlci5jIFwKKwkkKHNyY2RpcikvaW9fbWFuYWdlci5jIFwKKwkkKHNyY2RpcikvaXNtb3VudGVkLmMgXAorCSQoc3JjZGlyKS9saW5rLmMgXAorCSQoc3JjZGlyKS9sbHNlZWsuYyBcCisJJChzcmNkaXIpL2xvb2t1cC5jIFwKKwkkKHNyY2RpcikvbWtkaXIuYyBcCisJJChzcmNkaXIpL21ram91cm5hbC5jIFwKKwkkKHNyY2RpcikvbW1wLmMJXAorCSQoc3JjZGlyKS9uYW1laS5jIFwKKwkkKHNyY2RpcikvbmF0aXZlLmMgXAorCSQoc3JjZGlyKS9uZXdkaXIuYyBcCisJJChzcmNkaXIpL29wZW5mcy5jIFwKKwkkKHNyY2RpcikvcHJvZ3Jlc3MuYyBcCisJJChzcmNkaXIpL3B1bmNoLmMgXAorCSQoc3JjZGlyKS9xY293Mi5jIFwKKwkkKHNyY2RpcikvcmVhZF9iYi5jIFwKKwkkKHNyY2RpcikvcmVhZF9iYl9maWxlLmMgXAorCSQoc3JjZGlyKS9yZXNfZ2R0LmMgXAorCSQoc3JjZGlyKS9yd19iaXRtYXBzLmMgXAorCSQoc3JjZGlyKS9zd2FwZnMuYyBcCisJJChzcmNkaXIpL3N5bWxpbmsuYyBcCisJJChzcmNkaXIpL3RkYi5jIFwKKwkkKHNyY2RpcikvdGVzdF9pby5jIFwKKwkkKHNyY2RpcikvdHN0X2JhZGJsb2Nrcy5jIFwKKwkkKHNyY2RpcikvdHN0X2JpdG9wcy5jIFwKKwkkKHNyY2RpcikvdHN0X2J5dGVzd2FwLmMgXAorCSQoc3JjZGlyKS90c3RfZ2V0c2l6ZS5jIFwKKwkkKHNyY2RpcikvdHN0X2lzY2FuLmMgXAorCSQoc3JjZGlyKS91bmRvX2lvLmMgXAorCSQoc3JjZGlyKS91bml4X2lvLmMgXAorCSQoc3JjZGlyKS91bmxpbmsuYyBcCisJJChzcmNkaXIpL3ZhbGlkX2Jsay5jIFwKKwkkKHNyY2RpcikvdmVyc2lvbi5jIFwKKwkkKHNyY2Rpcikvd3JpdGVfYmJfZmlsZS5jIFwKKwkkKHNyY2RpcikvcmJ0cmVlLmMgXAorCSQoc3JjZGlyKS90c3RfbGliZXh0MmZzLmMgXAorCSQoREVCVUdfU1JDUykKKworSEZJTEVTPSBiaXRvcHMuaCBleHQyZnMuaCBleHQyX2lvLmggZXh0Ml9mcy5oIGV4dDJfZXh0X2F0dHIuaCBleHQzX2V4dGVudHMuaCBcCisJdGRiLmggcWNvdzIuaAorSEZJTEVTX0lOPSAgZXh0Ml9lcnIuaCBleHQyX3R5cGVzLmgKKworTElCUkFSWT0gbGliZXh0MmZzCitMSUJESVI9IGV4dDJmcworCitFTEZfVkVSU0lPTiA9IDIuNAorRUxGX1NPX1ZFUlNJT04gPSAyCitFTEZfSU1BR0UgPSBsaWJleHQyZnMKK0VMRl9NWURJUiA9IGV4dDJmcworRUxGX0lOU1RBTExfRElSID0gJChyb290X2xpYmRpcikKK0VMRl9PVEhFUl9MSUJTID0gLWxjb21fZXJyCisKK0JTRExJQl9WRVJTSU9OID0gMi4xCitCU0RMSUJfSU1BR0UgPSBsaWJleHQyZnMKK0JTRExJQl9NWURJUiA9IGV4dDJmcworQlNETElCX0lOU1RBTExfRElSID0gJChyb290X2xpYmRpcikKKworQE1BS0VGSUxFX0xJQlJBUllACitATUFLRUZJTEVfRUxGQAorQE1BS0VGSUxFX0JTRExJQkAKK0BNQUtFRklMRV9QUk9GSUxFQAorCithbGw6OiBleHQyZnMucGMKKworLmMubzoKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jICQ8IC1vICRACisJJChRKSAkKENIRUNLX0NNRCkgJChBTExfQ0ZMQUdTKSAkPAorQFBST0ZJTEVfQ01UQAkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWcgLXBnIC1vIHByb2ZpbGVkLyQqLm8gLWMgJDwKK0BFTEZfQ01UQAkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWZQSUMgLW8gZWxmc2hhcmVkLyQqLm8gLWMgJDwKK0BCU0RMSUJfQ01UQAkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgJChCU0RMSUJfUElDX0ZMQUcpIC1vIHBpYy8kKi5vIC1jICQ8CisKK0NPTVBJTEVfRVQ9Li4vZXQvY29tcGlsZV9ldCAtLWJ1aWxkLXRyZWUKKworRElTVEZJTEVTPSBNYWtlZmlsZSAqLmMgKi5oIGltYWdlCisKK2V4dDJfZXJyLmV0OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvZXh0Ml9lcnIuZXQuaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEUpICQoc3JjZGlyKS9leHQyX2Vyci5ldC5pbiBleHQyX2Vyci5ldAorCitleHQyX2Vyci5jIGV4dDJfZXJyLmg6IGV4dDJfZXJyLmV0CisJJChFKSAiCUNPTVBJTEVfRVQgZXh0Ml9lcnIuZXQiCisJJChRKSAkKENPTVBJTEVfRVQpIGV4dDJfZXJyLmV0CisKK2V4dDJmcy5wYzogJChzcmNkaXIpL2V4dDJmcy5wYy5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCSQoRSkgIglDT05GSUcuU1RBVFVTICRAIgorCSQoUSkgY2QgJCh0b3BfYnVpbGRkaXIpOyBDT05GSUdfRklMRVM9bGliL2V4dDJmcy9leHQyZnMucGMgLi9jb25maWcuc3RhdHVzCisKK3RzdF9iYWRibG9ja3M6IHRzdF9iYWRibG9ja3MubyAkKFNUQVRJQ19MSUJFWFQyRlMpICQoREVQU1RBVElDX0xJQkNPTV9FUlIpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X2JhZGJsb2NrcyB0c3RfYmFkYmxvY2tzLm8gJChBTExfTERGTEFHUykgXAorCQkkKFNUQVRJQ19MSUJFWFQyRlMpICQoU1RBVElDX0xJQkNPTV9FUlIpICQoU1lTTElCUykKKwordHN0X2ljb3VudDogJChzcmNkaXIpL2ljb3VudC5jICQoU1RBVElDX0xJQkVYVDJGUykgJChERVBTVEFUSUNfTElCQ09NX0VSUikKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfaWNvdW50ICQoc3JjZGlyKS9pY291bnQuYyAtRERFQlVHIFwKKwkJJChBTExfQ0ZMQUdTKSAkKEFMTF9MREZMQUdTKSBcCisJCSQoU1RBVElDX0xJQkVYVDJGUykgJChTVEFUSUNfTElCQ09NX0VSUikgJChTWVNMSUJTKQorCit0c3RfaXNjYW46IHRzdF9pc2Nhbi5vICQoU1RBVElDX0xJQkVYVDJGUykgJChERVBTVEFUSUNfTElCQ09NX0VSUikKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfaXNjYW4gdHN0X2lzY2FuLm8gJChBTExfTERGTEFHUykgXAorCQkkKFNUQVRJQ19MSUJFWFQyRlMpICQoU1RBVElDX0xJQkNPTV9FUlIpICQoU1lTTElCUykKKwordHN0X2dldHNpemU6IHRzdF9nZXRzaXplLm8gJChTVEFUSUNfTElCRVhUMkZTKSAkKERFUFNUQVRJQ19MSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9nZXRzaXplIHRzdF9nZXRzaXplLm8gJChBTExfTERGTEFHUykgXAorCQkkKFNUQVRJQ19MSUJFWFQyRlMpICQoU1RBVElDX0xJQkNPTV9FUlIpICQoU1lTTElCUykKKwordHN0X2lzbW91bnRlZDogJChzcmNkaXIpL2lzbW91bnRlZC5jICQoU1RBVElDX0xJQkVYVDJGUykgXAorCQkkKERFUFNUQVRJQ19MSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9pc21vdW50ZWQgJChzcmNkaXIpL2lzbW91bnRlZC5jIFwKKwkJJChTVEFUSUNfTElCRVhUMkZTKSAtRERFQlVHICQoQUxMX0NGTEFHUykgJChBTExfTERGTEFHUykgXAorCQkkKFNUQVRJQ19MSUJDT01fRVJSKSAkKFNZU0xJQlMpCisKK3RzdF9ieXRlc3dhcDogdHN0X2J5dGVzd2FwLm8gJChTVEFUSUNfTElCRVhUMkZTKSAkKERFUFNUQVRJQ19MSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9ieXRlc3dhcCB0c3RfYnl0ZXN3YXAubyAkKEFMTF9MREZMQUdTKSBcCisJCSQoU1RBVElDX0xJQkVYVDJGUykgJChTVEFUSUNfTElCQ09NX0VSUikgJChTWVNMSUJTKQorCit0c3RfYml0b3BzOiB0c3RfYml0b3BzLm8gJChTVEFUSUNfTElCRVhUMkZTKSAkKERFUFNUQVRJQ19MSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9iaXRvcHMgdHN0X2JpdG9wcy5vICQoQUxMX0NGTEFHUykgJChBTExfTERGTEFHUykgXAorCQkkKFNUQVRJQ19MSUJFWFQyRlMpICQoU1RBVElDX0xJQkNPTV9FUlIpICQoU1lTTElCUykKKwordHN0X2dldHNlY3RzaXplOiB0c3RfZ2V0c2VjdHNpemUubyAkKFNUQVRJQ19MSUJFWFQyRlMpICQoREVQU1RBVElDX0xJQkNPTV9FUlIpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X3NlY3RnZXRzaXplIHRzdF9nZXRzZWN0c2l6ZS5vICQoQUxMX0xERkxBR1MpIFwKKwkJJChTVEFUSUNfTElCRVhUMkZTKSAkKFNUQVRJQ19MSUJDT01fRVJSKSAkKFNZU0xJQlMpCisKK3RzdF90eXBlcy5vOiAkKHNyY2RpcikvdHN0X3R5cGVzLmMgZXh0Ml90eXBlcy5oIAorCit0c3RfdHlwZXM6IHRzdF90eXBlcy5vIGV4dDJfdHlwZXMuaCAKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfdHlwZXMgdHN0X3R5cGVzLm8gJChBTExfTERGTEFHUykgJChTWVNMSUJTKQorCit0c3Rfc3VwZXJfc2l6ZS5vOiAkKHNyY2RpcikvdHN0X3N1cGVyX3NpemUuYyAkKHNyY2RpcikvZXh0Ml9mcy5oCisKK3RzdF9zdXBlcl9zaXplOiB0c3Rfc3VwZXJfc2l6ZS5vCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X3N1cGVyX3NpemUgdHN0X3N1cGVyX3NpemUubyAkKEFMTF9MREZMQUdTKSAkKFNZU0xJQlMpCisKK3RzdF9mc19zdHJ1Y3QubzogJChzcmNkaXIpL3RzdF9mc19zdHJ1Y3QuYyAkKHNyY2RpcikvZXh0MmZzLmgKKwordHN0X2ZzX3N0cnVjdDogdHN0X2ZzX3N0cnVjdC5vCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X2ZzX3N0cnVjdCB0c3RfZnNfc3RydWN0Lm8gJChBTExfTERGTEFHUykgJChTWVNMSUJTKQorCit0c3RfaW5vZGVfc2l6ZS5vOiAkKHNyY2RpcikvdHN0X2lub2RlX3NpemUuYyAkKHNyY2RpcikvZXh0Ml9mcy5oCisKK3RzdF9pbm9kZV9zaXplOiB0c3RfaW5vZGVfc2l6ZS5vCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X2lub2RlX3NpemUgdHN0X2lub2RlX3NpemUubyAkKEFMTF9MREZMQUdTKSAkKFNZU0xJQlMpCisKK2V4dDJfdGRidG9vbDogdGRidG9vbC5vCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gZXh0Ml90ZGJ0b29sIHRkYnRvb2wubyB0ZGIubyAkKEFMTF9MREZMQUdTKSAkKFNZU0xJQlMpCisKK3RzdF9jbWRzLmMgdHN0X2NtZHMuaDogdHN0X2NtZHMuY3QKKwkkKEUpICIJTUtfQ01EUyAkQCIKKwkkKFEpICQoTUtfQ01EUykgJChzcmNkaXIpL3RzdF9jbWRzLmN0CisKK2RlYnVnX2NtZHMuYyBkZWJ1Z19jbWRzLmg6ICQodG9wX3NyY2RpcikvZGVidWdmcy9kZWJ1Z19jbWRzLmN0CisJJChFKSAiCU1LX0NNRFMgJDwiCisJJChRKSAkKE1LX0NNRFMpICQodG9wX3NyY2RpcikvZGVidWdmcy9kZWJ1Z19jbWRzLmN0CisKK2V4dGVudF9jbWRzLmMgZXh0ZW50X2NtZHMuaDogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2V4dGVudF9jbWRzLmN0CisJJChFKSAiCU1LX0NNRFMgJDwiCisJJChRKSAkKE1LX0NNRFMpICQodG9wX3NyY2RpcikvZGVidWdmcy9leHRlbnRfY21kcy5jdAorCitkZWJ1Z2ZzLm86ICQodG9wX3NyY2RpcikvZGVidWdmcy9kZWJ1Z2ZzLmMKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jICQ8IC1vICRACisKK2V4dGVudF9pbm9kZS5vOiAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvZXh0ZW50X2lub2RlLmMKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jICQ8IC1vICRACisKK3V0aWwubzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL3V0aWwuYworCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJDwgLW8gJEAKKworbmNoZWNrLm86ICQodG9wX3NyY2RpcikvZGVidWdmcy9uY2hlY2suYworCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJDwgLW8gJEAKKworaWNoZWNrLm86ICQodG9wX3NyY2RpcikvZGVidWdmcy9pY2hlY2suYworCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJDwgLW8gJEAKKworbHMubzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2xzLmMKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jICQ8IC1vICRACisKK2xzZGVsLm86ICQodG9wX3NyY2RpcikvZGVidWdmcy9sc2RlbC5jCisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCitkdW1wLm86ICQodG9wX3NyY2RpcikvZGVidWdmcy9kdW1wLmMKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jICQ8IC1vICRACisKK3NldF9maWVsZHMubzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL3NldF9maWVsZHMuYworCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJDwgLW8gJEAKKworbG9nZHVtcC5vOiAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvbG9nZHVtcC5jCisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCitodHJlZS5vOiAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvaHRyZWUuYworCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJDwgLW8gJEAKKwordW51c2VkLm86ICQodG9wX3NyY2RpcikvZGVidWdmcy91bnVzZWQuYworCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJDwgLW8gJEAKKworemFwLm86ICQodG9wX3NyY2RpcikvZGVidWdmcy96YXAuYworCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJDwgLW8gJEAKKworcXVvdGEubzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL3F1b3RhLmMKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jICQ8IC1vICRACisKK2UyZnJlZWZyYWcubzogJCh0b3Bfc3JjZGlyKS9taXNjL2UyZnJlZWZyYWcuYworCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLURERUJVR0ZTIC1JJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzIC1jICQ8IC1vICRACisKK2ZpbGVmcmFnLm86ICQodG9wX3NyY2RpcikvZGVidWdmcy9maWxlZnJhZy5jCisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCit0c3RfbGliZXh0MmZzLm86ICQoc3JjZGlyKS90c3RfbGliZXh0MmZzLmMKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpICQoQUxMX0xERkxBR1MpICQoREVQRU5EX0NGTEFHUykgLWMgJDwgLW8gJEAKKwordHN0X2JpdG1hcHNfY21kLmM6IHRzdF9iaXRtYXBzX2NtZC5jdAorCSQoRSkgIglNS19DTURTICRAIgorCSQoUSkgRElSPSQoc3JjZGlyKSAkKE1LX0NNRFMpICQoc3JjZGlyKS90c3RfYml0bWFwc19jbWQuY3QKKwordHN0X2JpdG1hcHM6IHRzdF9iaXRtYXBzLm8gdHN0X2JpdG1hcHNfY21kLm8gJChzcmNkaXIpL2Jsa21hcDY0X3JiLmMgXAorCQkkKFNUQVRJQ19MSUJFWFQyRlMpICQoREVQU1RBVElDX0xJQlNTKSAkKERFUFNUQVRJQ19MSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vICRAIHRzdF9iaXRtYXBzLm8gdHN0X2JpdG1hcHNfY21kLm8gXAorCQktRERFQlVHX1JCICQoc3JjZGlyKS9ibGttYXA2NF9yYi5jICQoQUxMX0NGTEFHUykgXAorCQkkKEFMTF9MREZMQUdTKSAkKFNUQVRJQ19MSUJFWFQyRlMpICQoU1RBVElDX0xJQlNTKSBcCisJCSQoU1RBVElDX0xJQkNPTV9FUlIpICQoU1lTTElCUykKKwordHN0X2V4dGVudHM6ICQoc3JjZGlyKS9leHRlbnQuYyAkKERFQlVHX09CSlMpICQoREVQU1RBVElDX0xJQlNTKSBsaWJleHQyZnMuYSBcCisJJChTVEFUSUNfTElCRTJQKSAkKERFUExJQlVVSUQpICQoREVQTElCQkxLSUQpICQoREVQU1RBVElDX0xJQkNPTV9FUlIpIFwKKwkkKERFUExJQlFVT1RBKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9leHRlbnRzICQoc3JjZGlyKS9leHRlbnQuYyBcCisJCSQoQUxMX0NGTEFHUykgJChBTExfTERGTEFHUykgLURERUJVRyAkKERFQlVHX09CSlMpIFwKKwkJJChTVEFUSUNfTElCU1MpICQoU1RBVElDX0xJQkUyUCkgJChMSUJRVU9UQSkgXAorCQkkKFNUQVRJQ19MSUJFWFQyRlMpICQoTElCQkxLSUQpICQoTElCVVVJRCkgXAorCQkkKFNUQVRJQ19MSUJDT01fRVJSKSAkKFNZU0xJQlMpIC1JICQodG9wX3NyY2RpcikvZGVidWdmcworCit0c3RfbGliZXh0MmZzOiAkKERFQlVHX09CSlMpIFwKKwkkKERFUFNUQVRJQ19MSUJTUykgJChTVEFUSUNfTElCRTJQKSAkKERFUExJQlVVSUQpIGxpYmV4dDJmcy5hIFwKKwkkKERFUExJQkJMS0lEKSAkKERFUFNUQVRJQ19MSUJDT01fRVJSKSAkKERFUExJQlFVT1RBKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9saWJleHQyZnMgJChBTExfTERGTEFHUykgLURERUJVRyAkKERFQlVHX09CSlMpIFwKKwkJJChTVEFUSUNfTElCU1MpICQoU1RBVElDX0xJQkUyUCkgJChMSUJRVU9UQSkgXAorCQkkKFNUQVRJQ19MSUJFWFQyRlMpICQoTElCQkxLSUQpICQoTElCVVVJRCkgXAorCQkkKFNUQVRJQ19MSUJDT01fRVJSKSAkKFNZU0xJQlMpIC1JICQodG9wX3NyY2RpcikvZGVidWdmcworCit0c3RfaW5saW5lOiAkKHNyY2RpcikvaW5saW5lLmMgJChTVEFUSUNfTElCRVhUMkZTKSAkKERFUFNUQVRJQ19MSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9pbmxpbmUgJChzcmNkaXIpL2lubGluZS5jICQoQUxMX0NGTEFHUykgXAorCQkkKEFMTF9MREZMQUdTKSAtRERFQlVHICQoU1RBVElDX0xJQkVYVDJGUykgXAorCQkkKFNUQVRJQ19MSUJDT01fRVJSKSAkKFNZU0xJQlMpCisKK3RzdF9jc3VtOiBjc3VtLmMgJChTVEFUSUNfTElCRVhUMkZTKSAkKERFUFNUQVRJQ19MSUJDT01fRVJSKSAkKFNUQVRJQ19MSUJFMlApIFwKKwkJJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X2NzdW0gJChzcmNkaXIpL2NzdW0uYyAtRERFQlVHIFwKKwkJJChBTExfQ0ZMQUdTKSAkKEFMTF9MREZMQUdTKSAkKFNUQVRJQ19MSUJFWFQyRlMpIFwKKwkJJChTVEFUSUNfTElCQ09NX0VSUikgJChTVEFUSUNfTElCRTJQKSAkKFNZU0xJQlMpCisKK3RzdF9jcmMzMmM6ICQoc3JjZGlyKS9jcmMzMmMuYyAkKFNUQVRJQ19MSUJFWFQyRlMpICQoREVQU1RBVElDX0xJQkNPTV9FUlIpCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAkKEFMTF9DRkxBR1MpIC1vIHRzdF9jcmMzMmMgJChzcmNkaXIpL2NyYzMyYy5jIFwKKwkJLURVTklUVEVTVCAkKFNUQVRJQ19MSUJFWFQyRlMpICQoU1RBVElDX0xJQkNPTV9FUlIpIFwKKwkJJChTWVNMSUJTKQorCitta2pvdXJuYWw6IG1ram91cm5hbC5jICQoU1RBVElDX0xJQkVYVDJGUykgJChERVBMSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIG1ram91cm5hbCAkKHNyY2RpcikvbWtqb3VybmFsLmMgLURERUJVRyBcCisJCSQoU1RBVElDX0xJQkVYVDJGUykgJChMSUJDT01fRVJSKSAkKEFMTF9DRkxBR1MpICQoU1lTTElCUykKKworY2hlY2s6OiB0c3RfYml0b3BzIHRzdF9iYWRibG9ja3MgdHN0X2lzY2FuIHRzdF90eXBlcyB0c3RfaWNvdW50IFwKKyAgICB0c3Rfc3VwZXJfc2l6ZSB0c3RfdHlwZXMgdHN0X2lub2RlX3NpemUgdHN0X2NzdW0gdHN0X2NyYzMyYyB0c3RfYml0bWFwcyBcCisgICAgdHN0X2lubGluZSB0c3RfbGliZXh0MmZzCisJJChURVNURU5WKSAuL3RzdF9iaXRvcHMKKwkkKFRFU1RFTlYpIC4vdHN0X2JhZGJsb2NrcworCSQoVEVTVEVOVikgLi90c3RfaXNjYW4KKwkkKFRFU1RFTlYpIC4vdHN0X3R5cGVzCisJJChURVNURU5WKSAuL3RzdF9pY291bnQKKwkkKFRFU1RFTlYpIC4vdHN0X3N1cGVyX3NpemUKKwkkKFRFU1RFTlYpIC4vdHN0X2lub2RlX3NpemUKKwkkKFRFU1RFTlYpIC4vdHN0X2NzdW0KKwkkKFRFU1RFTlYpIC4vdHN0X2lubGluZQorCSQoVEVTVEVOVikgLi90c3RfY3JjMzJjCisJJChURVNURU5WKSAuL3RzdF9iaXRtYXBzIC1mICQoc3JjZGlyKS90c3RfYml0bWFwc19jbWRzID4gdHN0X2JpdG1hcHNfb3V0CisJZGlmZiAkKHNyY2RpcikvdHN0X2JpdG1hcHNfZXhwIHRzdF9iaXRtYXBzX291dAorCSQoVEVTVEVOVikgLi90c3RfYml0bWFwcyAtdCAyIC1mICQoc3JjZGlyKS90c3RfYml0bWFwc19jbWRzID4gdHN0X2JpdG1hcHNfb3V0CisJZGlmZiAkKHNyY2RpcikvdHN0X2JpdG1hcHNfZXhwIHRzdF9iaXRtYXBzX291dAorCSQoVEVTVEVOVikgLi90c3RfYml0bWFwcyAtdCAzIC1mICQoc3JjZGlyKS90c3RfYml0bWFwc19jbWRzID4gdHN0X2JpdG1hcHNfb3V0CisJZGlmZiAkKHNyY2RpcikvdHN0X2JpdG1hcHNfZXhwIHRzdF9iaXRtYXBzX291dAorCSQoVEVTVEVOVikgLi90c3RfYml0bWFwcyAtbCAtZiAkKHNyY2RpcikvdHN0X2JpdG1hcHNfY21kcyA+IHRzdF9iaXRtYXBzX291dAorCWRpZmYgJChzcmNkaXIpL3RzdF9iaXRtYXBzX2V4cCB0c3RfYml0bWFwc19vdXQKKworaW5zdGFsbGRpcnM6OgorCSQoRSkgIglNS0lOU1RBTExESVJTICQobGliZGlyKSAkKGluY2x1ZGVkaXIpL2V4dDJmcyIKKwkkKFEpICQoTUtJTlNUQUxMRElSUykgJChERVNURElSKSQobGliZGlyKSBcCisJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpL2V4dDJmcyAkKERFU1RESVIpJChwa2djb25maWdkaXIpCisKK2luc3RhbGw6OiBhbGwgJChIRklMRVMpICQoSEZJTEVTX0lOKSBpbnN0YWxsZGlycyBleHQyZnMucGMKKwkkKEUpICIJSU5TVEFMTF9EQVRBICQobGliZGlyKS9saWJleHQyZnMuYSIKKwkkKFEpICQoSU5TVEFMTF9EQVRBKSBsaWJleHQyZnMuYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmV4dDJmcy5hCisJLSQoUSkgJChSQU5MSUIpICQoREVTVERJUikkKGxpYmRpcikvbGliZXh0MmZzLmEKKwkkKFEpICQoQ0hNT0QpICQoTElCTU9ERSkgJChERVNURElSKSQobGliZGlyKS9saWJleHQyZnMuYQorCSQoUSkgZm9yIGkgaW4gJChIRklMRVMpOyBkbyBcCisJCWVjaG8gIglJTlNUQUxMX0RBVEEgJChpbmNsdWRlZGlyKS9leHQyZnMvJCRpIjsgXAorCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkaSAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9leHQyZnMvJCRpOyBcCisJZG9uZQorCSQoUSkgZm9yIGkgaW4gJChIRklMRVNfSU4pOyBkbyBcCisJCWVjaG8gIglJTlNUQUxMX0RBVEEgJChpbmNsdWRlZGlyKS9leHQyZnMvJCRpIjsgXAorCQkkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2V4dDJmcy8kJGk7IFwKKwlkb25lCisJJChFKSAiCUlOU1RBTExfREFUQSAkKHBrZ2NvbmZpZ2RpcikvZXh0MmZzLnBjIgorCSQoUSkgJChJTlNUQUxMX0RBVEEpIGV4dDJmcy5wYyAkKERFU1RESVIpJChwa2djb25maWdkaXIpL2V4dDJmcy5wYworCit1bmluc3RhbGw6OgorCSQoUk0pIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliZXh0MmZzLmEgXAorCQkkKERFU1RESVIpJChwa2djb25maWdkaXIpL2V4dDJmcy5wYworCSQoUk0pIC1yZiAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9leHQyZnMgCisKK2NsZWFuOjoKKwkkKFJNKSAtZiBcIyogKi5zICoubyAqLmEgKn4gKi5iYWsgY29yZSBwcm9maWxlZC8qIFwKKwkJdHN0X2JhZGJsb2NrcyB0c3RfaXNjYW4gZXh0Ml9lcnIuZXQgZXh0Ml9lcnIuYyBleHQyX2Vyci5oIFwKKwkJdHN0X2J5dGVzd2FwIHRzdF9pc21vdW50ZWQgdHN0X2dldHNpemUgdHN0X3NlY3RnZXRzaXplIFwKKwkJdHN0X2JpdG9wcyB0c3RfdHlwZXMgdHN0X2ljb3VudCB0c3Rfc3VwZXJfc2l6ZSB0c3RfY3N1bSBcCisJCXRzdF9iaXRtYXBzIHRzdF9iaXRtYXBzX291dCB0c3RfZXh0ZW50cyB0c3RfaW5saW5lIFwKKwkJdHN0X2lubGluZV9kYXRhIHRzdF9pbm9kZV9zaXplIHRzdF9iaXRtYXBzX2NtZC5jIFwKKwkJZXh0Ml90ZGJ0b29sIG1ram91cm5hbCBkZWJ1Z19jbWRzLmMgdHN0X2NtZHMuYyBleHRlbnRfY21kcy5jIFwKKwkJLi4vbGliZXh0MmZzLmEgLi4vbGliZXh0MmZzX3AuYSAuLi9saWJleHQyZnNfY2hrLmEgXAorCQljcmMzMmNfdGFibGUuaCBnZW5fY3JjMzJjdGFibGUgdHN0X2NyYzMyYyB0c3RfbGliZXh0MmZzIFwKKwkJZXh0MmZzLnBjIGV4dDJfdHlwZXMuaAorCittb3N0bHljbGVhbjo6IGNsZWFuCitkaXN0Y2xlYW46OiBjbGVhbgorCSQoUk0pIC1mIC5kZXBlbmQgZXh0Ml9lcnIuYyBleHQyX2Vyci5oIE1ha2VmaWxlIGV4dDJmcy5wYyBcCisJCSQoc3JjZGlyKS9UQUdTICQoc3JjZGlyKS9NYWtlZmlsZS5pbi5vbGQKKyMKKyMgSGFjayB0byBwYXJhbGxlbCBtYWtlcyByZWNvZ25pemUgZGVwZW5kZW5jaWVzIGNvcnJlY3RseS4KKyMKKyQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmg6IGV4dDJfZXJyLmgKKworJChPQkpTKTogc3ViZGlycworCitnZW5fY3JjMzJjdGFibGU6ICQoc3JjZGlyKS9nZW5fY3JjMzJjdGFibGUuYworCSQoRSkgIglDQyAkQCIKKwkkKFEpICQoQlVJTERfQ0MpICQoQlVJTERfQ0ZMQUdTKSAkKEJVSUxEX0xERkxBR1MpIC1vIGdlbl9jcmMzMmN0YWJsZSBcCisJCSQoc3JjZGlyKS9nZW5fY3JjMzJjdGFibGUuYworCitjcmMzMmNfdGFibGUuaDogZ2VuX2NyYzMyY3RhYmxlCisJJChFKSAiCUdFTjMyQ1RBQkxFICRAIgorCSQoUSkgLi9nZW5fY3JjMzJjdGFibGUgPiBjcmMzMmNfdGFibGUuaAorCiskKHRvcF9idWlsZGRpcikvJChteV9kaXIpL2V4dDJfdHlwZXMuaDogJChzcmNkaXIpL2V4dDJfdHlwZXMuaC5pbiBcCisJCSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJY2QgJCh0b3BfYnVpbGRkaXIpOyBDT05GSUdfRklMRVM9JChteV9kaXIpL2V4dDJfdHlwZXMuaCAuL2NvbmZpZy5zdGF0dXMKKworIyArKysgRGVwZW5kZW5jeSBsaW5lIGVhdGVyICsrKworIyAKKyMgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvbGxvdy4gIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBzZWN0aW9uIGluCisjIHRoZSBNYWtlZmlsZS5pbiBmaWxlCisjCitleHQyX2Vyci5vOiBleHQyX2Vyci5jCithbGxvYy5vOiAkKHNyY2RpcikvYWxsb2MuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCithbGxvY19zYi5vOiAkKHNyY2RpcikvYWxsb2Nfc2IuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCithbGxvY19zdGF0cy5vOiAkKHNyY2RpcikvYWxsb2Nfc3RhdHMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCithbGxvY190YWJsZXMubzogJChzcmNkaXIpL2FsbG9jX3RhYmxlcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmggJChzcmNkaXIpL2V4dDJmc1AuaAorYmFkYmxvY2tzLm86ICQoc3JjZGlyKS9iYWRibG9ja3MuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnNQLmggXAorICQoc3JjZGlyKS9leHQyZnMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oCitiYl9jb21wYXQubzogJChzcmNkaXIpL2JiX2NvbXBhdC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmc1AuaCBcCisgJChzcmNkaXIpL2V4dDJmcy5oICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmgKK2JiX2lub2RlLm86ICQoc3JjZGlyKS9iYl9pbm9kZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK2JpdG1hcHMubzogJChzcmNkaXIpL2JpdG1hcHMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oICQoc3JjZGlyKS9leHQyZnNQLmggXAorICQoc3JjZGlyKS9ibWFwNjQuaAorYml0b3BzLm86ICQoc3JjZGlyKS9iaXRvcHMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitibGttYXA2NF9iYS5vOiAkKHNyY2RpcikvYmxrbWFwNjRfYmEuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnNQLmggXAorICQoc3JjZGlyKS9leHQyZnMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oICQoc3JjZGlyKS9ibWFwNjQuaAorYmxrbWFwNjRfcmIubzogJChzcmNkaXIpL2Jsa21hcDY0X3JiLmMgJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnNQLmggXAorICQoc3JjZGlyKS9leHQyZnMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oICQoc3JjZGlyKS9ibWFwNjQuaCAkKHNyY2RpcikvcmJ0cmVlLmgKK2Jsb2NrLm86ICQoc3JjZGlyKS9ibG9jay5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK2JtYXAubzogJChzcmNkaXIpL2JtYXAuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnNQLmggXAorICQoc3JjZGlyKS9leHQyZnMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oCitjaGVja19kZXNjLm86ICQoc3JjZGlyKS9jaGVja19kZXNjLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAorY2xvc2Vmcy5vOiAkKHNyY2RpcikvY2xvc2Vmcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmc1AuaCBcCisgJChzcmNkaXIpL2V4dDJmcy5oICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmgKK2NyYzE2Lm86ICQoc3JjZGlyKS9jcmMxNi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQoc3JjZGlyKS9jcmMxNi5oCitjcmMzMmMubzogJChzcmNkaXIpL2NyYzMyYy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvY3JjMzJjX2RlZnMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oIGNyYzMyY190YWJsZS5oCitnZW5fY3JjMzJjdGFibGUubzogJChzcmNkaXIpL2dlbl9jcmMzMmN0YWJsZS5jICQoc3JjZGlyKS9jcmMzMmNfZGVmcy5oCitjc3VtLm86ICQoc3JjZGlyKS9jc3VtLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaCAkKHNyY2RpcikvY3JjMTYuaAorZGJsaXN0Lm86ICQoc3JjZGlyKS9kYmxpc3QuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnNQLmggXAorICQoc3JjZGlyKS9leHQyZnMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oCitkYmxpc3RfZGlyLm86ICQoc3JjZGlyKS9kYmxpc3RfZGlyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzUC5oIFwKKyAkKHNyY2RpcikvZXh0MmZzLmggJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggXAorICQoc3JjZGlyKS9iaXRvcHMuaAorZGlyYmxvY2subzogJChzcmNkaXIpL2RpcmJsb2NrLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAorZGlyaGFzaC5vOiAkKHNyY2RpcikvZGlyaGFzaC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK2Rpcl9pdGVyYXRlLm86ICQoc3JjZGlyKS9kaXJfaXRlcmF0ZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmc1AuaCBcCisgJChzcmNkaXIpL2V4dDJmcy5oICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmgKK2R1cGZzLm86ICQoc3JjZGlyKS9kdXBmcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmc1AuaCBcCisgJChzcmNkaXIpL2V4dDJmcy5oICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmgKK2V4cGFuZGRpci5vOiAkKHNyY2RpcikvZXhwYW5kZGlyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAorZXh0X2F0dHIubzogJChzcmNkaXIpL2V4dF9hdHRyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvZXh0MmZzLmggJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggXAorICQoc3JjZGlyKS9iaXRvcHMuaAorZXh0ZW50Lm86ICQoc3JjZGlyKS9leHRlbnQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnNQLmggXAorICQoc3JjZGlyKS9leHQyZnMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oICQoc3JjZGlyKS9lMmltYWdlLmgKK2ZpbGVpby5vOiAkKHNyY2RpcikvZmlsZWlvLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaCAkKHNyY2RpcikvZXh0MmZzUC5oCitmaW5kZGV2Lm86ICQoc3JjZGlyKS9maW5kZGV2LmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaCAkKHNyY2RpcikvZXh0MmZzUC5oCitmbHVzaGIubzogJChzcmNkaXIpL2ZsdXNoYi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK2ZyZWVmcy5vOiAkKHNyY2RpcikvZnJlZWZzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzUC5oIFwKKyAkKHNyY2RpcikvZXh0MmZzLmggJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggXAorICQoc3JjZGlyKS9iaXRvcHMuaAorZ2VuX2JpdG1hcC5vOiAkKHNyY2RpcikvZ2VuX2JpdG1hcC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmc1AuaCBcCisgJChzcmNkaXIpL2V4dDJmcy5oICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmgKK2dlbl9iaXRtYXA2NC5vOiAkKHNyY2RpcikvZ2VuX2JpdG1hcDY0LmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzUC5oIFwKKyAkKHNyY2RpcikvZXh0MmZzLmggJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggXAorICQoc3JjZGlyKS9iaXRvcHMuaCAkKHNyY2RpcikvYm1hcDY0LmgKK2dldF9wYXRobmFtZS5vOiAkKHNyY2RpcikvZ2V0X3BhdGhuYW1lLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAorZ2V0c2l6ZS5vOiAkKHNyY2RpcikvZ2V0c2l6ZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK2dldHNlY3RzaXplLm86ICQoc3JjZGlyKS9nZXRzZWN0c2l6ZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK2lfYmxvY2subzogJChzcmNkaXIpL2lfYmxvY2suYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitpY291bnQubzogJChzcmNkaXIpL2ljb3VudC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmggJChzcmNkaXIpL3RkYi5oCitpbmRfYmxvY2subzogJChzcmNkaXIpL2luZF9ibG9jay5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK2luaXRpYWxpemUubzogJChzcmNkaXIpL2luaXRpYWxpemUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitpbmxpbmUubzogJChzcmNkaXIpL2lubGluZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK2lub2RlLm86ICQoc3JjZGlyKS9pbm9kZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmc1AuaCBcCisgJChzcmNkaXIpL2V4dDJmcy5oICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmggJChzcmNkaXIpL2UyaW1hZ2UuaAoraW5vZGVfaW8ubzogJChzcmNkaXIpL2lub2RlX2lvLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAoraW1hZ2VyLm86ICQoc3JjZGlyKS9pbWFnZXIuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitpb19tYW5hZ2VyLm86ICQoc3JjZGlyKS9pb19tYW5hZ2VyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAoraXNtb3VudGVkLm86ICQoc3JjZGlyKS9pc21vdW50ZWQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitsaW5rLm86ICQoc3JjZGlyKS9saW5rLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAorbGxzZWVrLm86ICQoc3JjZGlyKS9sbHNlZWsuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oCitsb29rdXAubzogJChzcmNkaXIpL2xvb2t1cC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK21rZGlyLm86ICQoc3JjZGlyKS9ta2Rpci5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK21ram91cm5hbC5vOiAkKHNyY2RpcikvbWtqb3VybmFsLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDJmcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oICQoc3JjZGlyKS9qZnNfdXNlci5oICQoc3JjZGlyKS9rZXJuZWwtamJkLmggXAorICQoc3JjZGlyKS9qZnNfY29tcGF0LmggJChzcmNkaXIpL2tlcm5lbC1saXN0LmgKK21tcC5vOiAkKHNyY2RpcikvbW1wLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmgKK25hbWVpLm86ICQoc3JjZGlyKS9uYW1laS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmggJChzcmNkaXIpL2V4dDJmc1AuaAorbmF0aXZlLm86ICQoc3JjZGlyKS9uYXRpdmUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCituZXdkaXIubzogJChzcmNkaXIpL25ld2Rpci5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK29wZW5mcy5vOiAkKHNyY2Rpcikvb3BlbmZzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaCAkKHNyY2RpcikvZTJpbWFnZS5oCitwcm9ncmVzcy5vOiAkKHNyY2RpcikvcHJvZ3Jlc3MuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggXAorICQoc3JjZGlyKS9iaXRvcHMuaCAkKHNyY2RpcikvZXh0MmZzUC5oCitwdW5jaC5vOiAkKHNyY2RpcikvcHVuY2guYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitxY293Mi5vOiAkKHNyY2RpcikvcWNvdzIuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggXAorICQoc3JjZGlyKS9iaXRvcHMuaCAkKHNyY2RpcikvcWNvdzIuaAorcmVhZF9iYi5vOiAkKHNyY2RpcikvcmVhZF9iYi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK3JlYWRfYmJfZmlsZS5vOiAkKHNyY2RpcikvcmVhZF9iYl9maWxlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAorcmVzX2dkdC5vOiAkKHNyY2RpcikvcmVzX2dkdC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK3J3X2JpdG1hcHMubzogJChzcmNkaXIpL3J3X2JpdG1hcHMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oICQoc3JjZGlyKS9lMmltYWdlLmgKK3N3YXBmcy5vOiAkKHNyY2Rpcikvc3dhcGZzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAorc3ltbGluay5vOiAkKHNyY2Rpcikvc3ltbGluay5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK3RkYi5vOiAkKHNyY2RpcikvdGRiLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS90ZGIuaAordGVzdF9pby5vOiAkKHNyY2RpcikvdGVzdF9pby5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK3RzdF9iYWRibG9ja3MubzogJChzcmNkaXIpL3RzdF9iYWRibG9ja3MuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCit0c3RfYml0b3BzLm86ICQoc3JjZGlyKS90c3RfYml0b3BzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAordHN0X2J5dGVzd2FwLm86ICQoc3JjZGlyKS90c3RfYnl0ZXN3YXAuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCit0c3RfZ2V0c2l6ZS5vOiAkKHNyY2RpcikvdHN0X2dldHNpemUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCit0c3RfaXNjYW4ubzogJChzcmNkaXIpL3RzdF9pc2Nhbi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK3VuZG9faW8ubzogJChzcmNkaXIpL3VuZG9faW8uYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL3RkYi5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAordW5peF9pby5vOiAkKHNyY2RpcikvdW5peF9pby5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK3VubGluay5vOiAkKHNyY2RpcikvdW5saW5rLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAordmFsaWRfYmxrLm86ICQoc3JjZGlyKS92YWxpZF9ibGsuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCit2ZXJzaW9uLm86ICQoc3JjZGlyKS92ZXJzaW9uLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaCAkKHRvcF9zcmNkaXIpL3ZlcnNpb24uaAord3JpdGVfYmJfZmlsZS5vOiAkKHNyY2Rpcikvd3JpdGVfYmJfZmlsZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK3JidHJlZS5vOiAkKHNyY2RpcikvcmJ0cmVlLmMgJChzcmNkaXIpL3JidHJlZS5oCit0c3RfbGliZXh0MmZzLm86ICQoc3JjZGlyKS90c3RfbGliZXh0MmZzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzUC5oIFwKKyAkKHNyY2RpcikvZXh0MmZzLmggJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggXAorICQoc3JjZGlyKS9iaXRvcHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggXAorICQodG9wX3NyY2RpcikvZGVidWdmcy9kZWJ1Z2ZzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorZGVidWdfY21kcy5vOiBkZWJ1Z19jbWRzLmMgJCh0b3Bfc3JjZGlyKS9saWIvc3Mvc3MuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmgKK2V4dGVudF9jbWRzLm86IGV4dGVudF9jbWRzLmMgJCh0b3Bfc3JjZGlyKS9saWIvc3Mvc3MuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmgKK3RzdF9jbWRzLm86IHRzdF9jbWRzLmMgJCh0b3Bfc3JjZGlyKS9saWIvc3Mvc3MuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmgKK2RlYnVnZnMubzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2RlYnVnZnMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2RlYnVnZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvc3Mvc3MuaCAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaCAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmggXAorICQodG9wX3NyY2RpcikvZGVidWdmcy8uLi92ZXJzaW9uLmggJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2pmc191c2VyLmggXAorICQoc3JjZGlyKS9rZXJuZWwtamJkLmggJChzcmNkaXIpL2pmc19jb21wYXQuaCAkKHNyY2Rpcikva2VybmVsLWxpc3QuaAordXRpbC5vOiAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvdXRpbC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2RlYnVnZnMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oCituY2hlY2subzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL25jaGVjay5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvZGVidWdmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oCitpY2hlY2subzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2ljaGVjay5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvZGVidWdmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oCitscy5vOiAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvbHMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2RlYnVnZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvc3Mvc3MuaCAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorbHNkZWwubzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2xzZGVsLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvZGVidWdmcy9kZWJ1Z2ZzLmggXAorICQodG9wX3NyY2RpcikvbGliL3NzL3NzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHNyY2RpcikvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggXAorICQoc3JjZGlyKS9iaXRvcHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggXAorICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmgKK2R1bXAubzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2R1bXAuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2RlYnVnZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvc3Mvc3MuaCAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorc2V0X2ZpZWxkcy5vOiAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvc2V0X2ZpZWxkcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvZGVidWdmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaAorbG9nZHVtcC5vOiAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvbG9nZHVtcC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvZGVidWdmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oICQodG9wX3NyY2RpcikvZGVidWdmcy9qZnNfdXNlci5oIFwKKyAkKHNyY2Rpcikva2VybmVsLWpiZC5oICQoc3JjZGlyKS9qZnNfY29tcGF0LmggJChzcmNkaXIpL2tlcm5lbC1saXN0LmgKK2h0cmVlLm86ICQodG9wX3NyY2RpcikvZGVidWdmcy9odHJlZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvZGVidWdmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaAordW51c2VkLm86ICQodG9wX3NyY2RpcikvZGVidWdmcy91bnVzZWQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2RlYnVnZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvc3Mvc3MuaCAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorZmlsZWZyYWcubzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2ZpbGVmcmFnLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvZGVidWdmcy9kZWJ1Z2ZzLmggXAorICQodG9wX3NyY2RpcikvbGliL3NzL3NzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHNyY2RpcikvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggXAorICQoc3JjZGlyKS9iaXRvcHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggXAorICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmgKK2V4dGVudF9pbm9kZS5vOiAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvZXh0ZW50X2lub2RlLmMgXAorICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oIFwKKyAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvZGVidWdmcy5oICQodG9wX3NyY2RpcikvbGliL3NzL3NzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJChzcmNkaXIpL2V4dDJmcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHNyY2RpcikvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggXAorICQoc3JjZGlyKS9iaXRvcHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggXAorICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmgKK3phcC5vOiAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvemFwLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvZGVidWdmcy9kZWJ1Z2ZzLmggXAorICQodG9wX3NyY2RpcikvbGliL3NzL3NzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHNyY2RpcikvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggXAorICQoc3JjZGlyKS9iaXRvcHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggXAorICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmgKK3F1b3RhLm86ICQodG9wX3NyY2RpcikvZGVidWdmcy9xdW90YS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvZGVidWdmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oCitlMmZyZWVmcmFnLm86ICQodG9wX3NyY2RpcikvbWlzYy9lMmZyZWVmcmFnLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmggJCh0b3Bfc3JjZGlyKS9taXNjL2UyZnJlZWZyYWcuaApkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9hbGxvYy5jIGIvbGliL2V4dDJmcy9hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNjFiOWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2FsbG9jLmMKQEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiBhbGxvYy5jIC0tLSBhbGxvY2F0ZSBuZXcgaW5vZGVzLCBibG9ja3MgZm9yIGV4dDJmcworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworLyoKKyAqIENsZWFyIHRoZSB1bmluaXQgYmxvY2sgYml0bWFwIGZsYWcgaWYgbmVjZXNzYXJ5CisgKi8KK3N0YXRpYyB2b2lkIGNsZWFyX2Jsb2NrX3VuaW5pdChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKQoreworCWlmICghKEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pKSB8fAorCSAgICAhKGV4dDJmc19iZ19mbGFnc190ZXN0KGZzLCBncm91cCwgRVhUMl9CR19CTE9DS19VTklOSVQpKSkKKwkJcmV0dXJuOworCisJLyogdW5pbml0IGJsb2NrIGJpdG1hcHMgYXJlIG5vdyBpbml0aWFsaXplZCBpbiByZWFkX2JpdG1hcHMoKSAqLworCisJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGZzLCBncm91cCwgRVhUMl9CR19CTE9DS19VTklOSVQpOworCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBncm91cCk7CisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCWV4dDJmc19tYXJrX2JiX2RpcnR5KGZzKTsKK30KKworLyoKKyAqIENoZWNrIGZvciB1bmluaXQgaW5vZGUgYml0bWFwcyBhbmQgZGVhbCB3aXRoIHRoZW0gYXBwcm9wcmlhdGVseQorICovCitzdGF0aWMgdm9pZCBjaGVja19pbm9kZV91bmluaXQoZXh0Ml9maWxzeXMgZnMsIGV4dDJmc19pbm9kZV9iaXRtYXAgbWFwLAorCQkJICBkZ3JwX3QgZ3JvdXApCit7CisJZXh0Ml9pbm9fdAlpLCBpbm87CisKKwlpZiAoIShFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSkgfHwKKwkgICAgIShleHQyZnNfYmdfZmxhZ3NfdGVzdChmcywgZ3JvdXAsIEVYVDJfQkdfSU5PREVfVU5JTklUKSkpCisJCXJldHVybjsKKworCWlubyA9IChncm91cCAqIGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwKSArIDE7CisJZm9yIChpPTA7IGkgPCBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cDsgaSsrLCBpbm8rKykKKwkJZXh0MmZzX2Zhc3RfdW5tYXJrX2lub2RlX2JpdG1hcDIobWFwLCBpbm8pOworCisJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGZzLCBncm91cCwgRVhUMl9CR19JTk9ERV9VTklOSVQpOworCS8qIE1pbWljcyB3aGF0IHRoZSBrZXJuZWwgZG9lcyAqLworCWV4dDJmc19iZ19mbGFnc19jbGVhcihmcywgZ3JvdXAsIEVYVDJfQkdfQkxPQ0tfVU5JTklUKTsKKwlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgZ3JvdXApOworCWV4dDJmc19tYXJrX2liX2RpcnR5KGZzKTsKKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7Cit9CisKKy8qCisgKiBSaWdodCBub3csIGp1c3Qgc2VhcmNoIGZvcndhcmQgZnJvbSB0aGUgcGFyZW50IGRpcmVjdG9yeSdzIGJsb2NrCisgKiBncm91cCB0byBmaW5kIHRoZSBuZXh0IGZyZWUgaW5vZGUuCisgKgorICogU2hvdWxkIGhhdmUgYSBzcGVjaWFsIHBvbGljeSBmb3IgZGlyZWN0b3JpZXMuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfbmV3X2lub2RlKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGRpciwKKwkJCSAgIGludCBtb2RlIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgIGV4dDJmc19pbm9kZV9iaXRtYXAgbWFwLCBleHQyX2lub190ICpyZXQpCit7CisJZXh0Ml9pbm9fdAlzdGFydF9pbm9kZSA9IDA7CisJZXh0Ml9pbm9fdAlpLCBpbm9faW5fZ3JvdXAsIHVwdG8sIGZpcnN0X3plcm87CisJZXJyY29kZV90CXJldHZhbDsKKwlkZ3JwX3QJCWdyb3VwOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmICghbWFwKQorCQltYXAgPSBmcy0+aW5vZGVfbWFwOworCWlmICghbWFwKQorCQlyZXR1cm4gRVhUMl9FVF9OT19JTk9ERV9CSVRNQVA7CisKKwlpZiAoZGlyID4gMCkgeworCQlncm91cCA9IChkaXIgLSAxKSAvIEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpOworCQlzdGFydF9pbm9kZSA9IChncm91cCAqIEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpKSArIDE7CisJfQorCWlmIChzdGFydF9pbm9kZSA8IEVYVDJfRklSU1RfSU5PREUoZnMtPnN1cGVyKSkKKwkJc3RhcnRfaW5vZGUgPSBFWFQyX0ZJUlNUX0lOT0RFKGZzLT5zdXBlcik7CisJaWYgKHN0YXJ0X2lub2RlID4gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCkKKwkJcmV0dXJuIEVYVDJfRVRfSU5PREVfQUxMT0NfRkFJTDsKKwlpID0gc3RhcnRfaW5vZGU7CisJZG8geworCQlpbm9faW5fZ3JvdXAgPSAoaSAtIDEpICUgRVhUMl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zdXBlcik7CisJCWdyb3VwID0gKGkgLSAxKSAvIEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpOworCisJCWNoZWNrX2lub2RlX3VuaW5pdChmcywgbWFwLCBncm91cCk7CisJCXVwdG8gPSBpICsgKEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpIC0gaW5vX2luX2dyb3VwKTsKKwkJaWYgKGkgPCBzdGFydF9pbm9kZSAmJiB1cHRvID49IHN0YXJ0X2lub2RlKQorCQkJdXB0byA9IHN0YXJ0X2lub2RlIC0gMTsKKwkJaWYgKHVwdG8gPiBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KQorCQkJdXB0byA9IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQ7CisKKwkJcmV0dmFsID0gZXh0MmZzX2ZpbmRfZmlyc3RfemVyb19pbm9kZV9iaXRtYXAyKG1hcCwgaSwgdXB0bywKKwkJCQkJCQkgICAgICAmZmlyc3RfemVybyk7CisJCWlmIChyZXR2YWwgPT0gMCkgeworCQkJaSA9IGZpcnN0X3plcm87CisJCQlicmVhazsKKwkJfQorCQlpZiAocmV0dmFsICE9IEVOT0VOVCkKKwkJCXJldHVybiBFWFQyX0VUX0lOT0RFX0FMTE9DX0ZBSUw7CisJCWkgPSB1cHRvICsgMTsKKwkJaWYgKGkgPiBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KQorCQkJaSA9IEVYVDJfRklSU1RfSU5PREUoZnMtPnN1cGVyKTsKKwl9IHdoaWxlIChpICE9IHN0YXJ0X2lub2RlKTsKKworCWlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKG1hcCwgaSkpCisJCXJldHVybiBFWFQyX0VUX0lOT0RFX0FMTE9DX0ZBSUw7CisJKnJldCA9IGk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTdHVwaWQgYWxnb3JpdGhtIC0tLSB3ZSBub3cganVzdCBzZWFyY2ggZm9yd2FyZCBzdGFydGluZyBmcm9tIHRoZQorICogZ29hbC4gIFNob3VsZCBwdXQgaW4gYSBzbWFydGVyIG9uZSBzb21lZGF5Li4uLgorICovCitlcnJjb2RlX3QgZXh0MmZzX25ld19ibG9jazIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgZ29hbCwKKwkJCSAgIGV4dDJmc19ibG9ja19iaXRtYXAgbWFwLCBibGs2NF90ICpyZXQpCit7CisJZXJyY29kZV90IHJldHZhbDsKKwlibGs2NF90CWIgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmICghbWFwKQorCQltYXAgPSBmcy0+YmxvY2tfbWFwOworCWlmICghbWFwKQorCQlyZXR1cm4gRVhUMl9FVF9OT19CTE9DS19CSVRNQVA7CisJaWYgKCFnb2FsIHx8IChnb2FsID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkpCisJCWdvYWwgPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwlnb2FsICY9IH5FWFQyRlNfQ0xVU1RFUl9NQVNLKGZzKTsKKworCXJldHZhbCA9IGV4dDJmc19maW5kX2ZpcnN0X3plcm9fYmxvY2tfYml0bWFwMihtYXAsCisJCQlnb2FsLCBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLSAxLCAmYik7CisJaWYgKChyZXR2YWwgPT0gRU5PRU5UKSAmJiAoZ29hbCAhPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykpCisJCXJldHZhbCA9IGV4dDJmc19maW5kX2ZpcnN0X3plcm9fYmxvY2tfYml0bWFwMihtYXAsCisJCQlmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaywgZ29hbCAtIDEsICZiKTsKKwlpZiAocmV0dmFsID09IEVOT0VOVCkKKwkJcmV0dXJuIEVYVDJfRVRfQkxPQ0tfQUxMT0NfRkFJTDsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJY2xlYXJfYmxvY2tfdW5pbml0KGZzLCBleHQyZnNfZ3JvdXBfb2ZfYmxrMihmcywgYikpOworCSpyZXQgPSBiOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX25ld19ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrX3QgZ29hbCwKKwkJCSAgIGV4dDJmc19ibG9ja19iaXRtYXAgbWFwLCBibGtfdCAqcmV0KQoreworCWVycmNvZGVfdCByZXR2YWw7CisJYmxrNjRfdCB2YWw7CisJcmV0dmFsID0gZXh0MmZzX25ld19ibG9jazIoZnMsIGdvYWwsIG1hcCwgJnZhbCk7CisJaWYgKCFyZXR2YWwpCisJCSpyZXQgPSAoYmxrX3QpIHZhbDsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB6ZXJvcyBvdXQgdGhlIGFsbG9jYXRlZCBibG9jaywgYW5kIHVwZGF0ZXMgYWxsIG9mIHRoZQorICogYXBwcm9wcmlhdGUgZmlsZXN5c3RlbSByZWNvcmRzLgorICovCitlcnJjb2RlX3QgZXh0MmZzX2FsbG9jX2Jsb2NrMihleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBnb2FsLAorCQkJICAgICBjaGFyICpibG9ja19idWYsIGJsazY0X3QgKnJldCkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWJsazY0X3QJCWJsb2NrOworCWNoYXIJCSpidWYgPSAwOworCisJaWYgKCFibG9ja19idWYpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSwgJmJ1Zik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlibG9ja19idWYgPSBidWY7CisJfQorCW1lbXNldChibG9ja19idWYsIDAsIGZzLT5ibG9ja3NpemUpOworCisJaWYgKGZzLT5nZXRfYWxsb2NfYmxvY2spIHsKKwkJcmV0dmFsID0gKGZzLT5nZXRfYWxsb2NfYmxvY2spKGZzLCBnb2FsLCAmYmxvY2spOworCQlpZiAocmV0dmFsKQorCQkJZ290byBmYWlsOworCX0gZWxzZSB7CisJCWlmICghZnMtPmJsb2NrX21hcCkgeworCQkJcmV0dmFsID0gZXh0MmZzX3JlYWRfYmxvY2tfYml0bWFwKGZzKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBmYWlsOworCQl9CisKKwkJcmV0dmFsID0gZXh0MmZzX25ld19ibG9jazIoZnMsIGdvYWwsIDAsICZibG9jayk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGZhaWw7CisJfQorCisJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIGJsb2NrLCAxLCBibG9ja19idWYpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbDsKKworCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIGJsb2NrLCArMSk7CisJKnJldCA9IGJsb2NrOworCitmYWlsOgorCWlmIChidWYpCisJCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2FsbG9jX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBnb2FsLAorCQkJICAgICBjaGFyICpibG9ja19idWYsIGJsa190ICpyZXQpCit7CisJZXJyY29kZV90IHJldHZhbDsKKwlibGs2NF90CXZhbDsKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NfYmxvY2syKGZzLCBnb2FsLCBibG9ja19idWYsICZ2YWwpOworCWlmICghcmV0dmFsKQorCQkqcmV0ID0gKGJsa190KSB2YWw7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGV4dDJmc19nZXRfZnJlZV9ibG9ja3MyKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90IHN0YXJ0LCBibGs2NF90IGZpbmlzaCwKKwkJCQkgaW50IG51bSwgZXh0MmZzX2Jsb2NrX2JpdG1hcCBtYXAsIGJsazY0X3QgKnJldCkKK3sKKwlibGs2NF90CWIgPSBzdGFydDsKKwlpbnQJY19yYXRpbzsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwlpZiAoIW1hcCkKKwkJbWFwID0gZnMtPmJsb2NrX21hcDsKKwlpZiAoIW1hcCkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fQkxPQ0tfQklUTUFQOworCWlmICghYikKKwkJYiA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCWlmICghZmluaXNoKQorCQlmaW5pc2ggPSBzdGFydDsKKwlpZiAoIW51bSkKKwkJbnVtID0gMTsKKwljX3JhdGlvID0gMSA8PCBleHQyZnNfZ2V0X2JpdG1hcF9ncmFudWxhcml0eShtYXApOworCWIgJj0gfihjX3JhdGlvIC0gMSk7CisJZmluaXNoICY9IH4oY19yYXRpbyAtMSk7CisJZG8geworCQlpZiAoYiArIG51bSAtIDEgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSB7CisJCQlpZiAoZmluaXNoID4gc3RhcnQpCisJCQkJcmV0dXJuIEVYVDJfRVRfQkxPQ0tfQUxMT0NfRkFJTDsKKwkJCWIgPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwkJfQorCQlpZiAoZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2UyKG1hcCwgYiwgbnVtKSkgeworCQkJKnJldCA9IGI7CisJCQlyZXR1cm4gMDsKKwkJfQorCQliICs9IGNfcmF0aW87CisJfSB3aGlsZSAoYiAhPSBmaW5pc2gpOworCXJldHVybiBFWFQyX0VUX0JMT0NLX0FMTE9DX0ZBSUw7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBzdGFydCwgYmxrX3QgZmluaXNoLAorCQkJCSBpbnQgbnVtLCBleHQyZnNfYmxvY2tfYml0bWFwIG1hcCwgYmxrX3QgKnJldCkKK3sKKwllcnJjb2RlX3QgcmV0dmFsOworCWJsazY0X3QgdmFsOworCXJldHZhbCA9IGV4dDJmc19nZXRfZnJlZV9ibG9ja3MyKGZzLCBzdGFydCwgZmluaXNoLCBudW0sIG1hcCwgJnZhbCk7CisJaWYoIXJldHZhbCkKKwkJKnJldCA9IChibGtfdCkgdmFsOworCXJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgZXh0MmZzX3NldF9hbGxvY19ibG9ja19jYWxsYmFjayhleHQyX2ZpbHN5cyBmcywKKwkJCQkgICAgIGVycmNvZGVfdCAoKmZ1bmMpKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkJICAgICAgIGJsazY0X3QgZ29hbCwKKwkJCQkJCSAgICAgICBibGs2NF90ICpyZXQpLAorCQkJCSAgICAgZXJyY29kZV90ICgqKm9sZCkoZXh0Ml9maWxzeXMgZnMsCisJCQkJCQkgICAgICAgYmxrNjRfdCBnb2FsLAorCQkJCQkJICAgICAgIGJsazY0X3QgKnJldCkpCit7CisJaWYgKCFmcyB8fCBmcy0+bWFnaWMgIT0gRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKQorCQlyZXR1cm47CisKKwlpZiAob2xkKQorCQkqb2xkID0gZnMtPmdldF9hbGxvY19ibG9jazsKKworCWZzLT5nZXRfYWxsb2NfYmxvY2sgPSBmdW5jOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9hbGxvY19zYi5jIGIvbGliL2V4dDJmcy9hbGxvY19zYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ODhjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2FsbG9jX3NiLmMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIGFsbG9jX3NiLmMgLS0tIEFsbG9jYXRlIHRoZSBzdXBlcmJsb2NrIGFuZCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBmb3IgYQorICogbmV3bHkgaW5pdGlhbGl6ZWQgZmlsZXN5c3RlbS4gIFVzZWQgYnkgbWtlMmZzIHdoZW4gaW5pdGlhbGl6aW5nIGEgZmlsZXN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMjAwMyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXNlcnZlcyB0aGUgc3VwZXJibG9jayBhbmQgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMKKyAqIGZvciBhIGdpdmVuIGJsb2NrIGdyb3VwLiAgSXQgY3VycmVudGx5IHJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlCisgKiBibG9ja3MgYXNzdW1pbmcgdGhhdCBpbm9kZSB0YWJsZSBhbmQgYWxsb2NhdGlvbiBiaXRtYXBzIHdpbGwgYmUgaW4KKyAqIHRoZSBncm91cC4gIFRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBjYXNlIHdoZW4gdGhlIGZsZXhfYmcKKyAqIGZlYXR1cmUgaXMgZW5hYmxlZCwgc28gY2FsbGVycyBzaG91bGQgdGFrZSBjYXJlISAgSXQgd2FzIG9ubHkKKyAqIHJlYWxseSBpbnRlbmRlZCBmb3IgdXNlIGJ5IG1rZTJmcywgYW5kIGV2ZW4gdGhlcmUgaXQncyBub3QgdGhhdAorICogdXNlZnVsLiAgSW4gdGhlIGZ1dHVyZSwgd2hlbiB3ZSByZWRvIHRoaXMgZnVuY3Rpb24gZm9yIDY0LWJpdCBibG9jaworICogbnVtYmVycywgd2Ugc2hvdWxkIHByb2JhYmx5IHJldHVybiB0aGUgbnVtYmVyIG9mIGJsb2NrcyB1c2VkIGJ5IHRoZQorICogc3VwZXIgYmxvY2sgYW5kIGdyb3VwIGRlc2NyaXB0b3JzIGluc3RlYWQuCisgKgorICogU2VlIGFsc28gdGhlIGNvbW1lbnQgZm9yIGV4dDJmc19zdXBlcl9hbmRfYmdkX2xvYygpCisgKi8KK2ludCBleHQyZnNfcmVzZXJ2ZV9zdXBlcl9hbmRfYmdkKGV4dDJfZmlsc3lzIGZzLAorCQkJCSBkZ3JwX3QgZ3JvdXAsCisJCQkJIGV4dDJmc19ibG9ja19iaXRtYXAgYm1hcCkKK3sKKwlibGs2NF90CXN1cGVyX2Jsaywgb2xkX2Rlc2NfYmxrLCBuZXdfZGVzY19ibGs7CisJYmxrX3QJdXNlZF9ibGtzOworCWludAlvbGRfZGVzY19ibG9ja3MsIG51bV9ibG9ja3M7CisKKwlleHQyZnNfc3VwZXJfYW5kX2JnZF9sb2MyKGZzLCBncm91cCwgJnN1cGVyX2JsaywKKwkJCQkgICZvbGRfZGVzY19ibGssICZuZXdfZGVzY19ibGssICZ1c2VkX2Jsa3MpOworCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworCWVsc2UKKwkJb2xkX2Rlc2NfYmxvY2tzID0KKwkJCWZzLT5kZXNjX2Jsb2NrcyArIGZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzOworCisJaWYgKHN1cGVyX2JsayB8fCAoZ3JvdXAgPT0gMCkpCisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoYm1hcCwgc3VwZXJfYmxrKTsKKwlpZiAoKGdyb3VwID09IDApICYmIChmcy0+YmxvY2tzaXplID09IDEwMjQpICYmCisJICAgIEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKSA+IDEpCisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoYm1hcCwgMCk7CisKKwlpZiAob2xkX2Rlc2NfYmxrKSB7CisJCW51bV9ibG9ja3MgPSBvbGRfZGVzY19ibG9ja3M7CisJCWlmIChvbGRfZGVzY19ibGsgKyBudW1fYmxvY2tzID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkKKwkJCW51bV9ibG9ja3MgPSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLQorCQkJCW9sZF9kZXNjX2JsazsKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwX3JhbmdlMihibWFwLCBvbGRfZGVzY19ibGssIG51bV9ibG9ja3MpOworCX0KKwlpZiAobmV3X2Rlc2NfYmxrKQorCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGJtYXAsIG5ld19kZXNjX2Jsayk7CisKKwludW1fYmxvY2tzID0gZXh0MmZzX2dyb3VwX2Jsb2Nrc19jb3VudChmcywgZ3JvdXApOworCW51bV9ibG9ja3MgLT0gMiArIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwICsgdXNlZF9ibGtzOworCisJcmV0dXJuIG51bV9ibG9ja3MgIDsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvYWxsb2Nfc3RhdHMuYyBiL2xpYi9leHQyZnMvYWxsb2Nfc3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Q5OTBhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9hbGxvY19zdGF0cy5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogYWxsb2Nfc3RhdHMuYyAtLS0gVXBkYXRlIGFsbG9jYXRpb24gc3RhdGlzdGljcyBmb3IgZXh0MmZzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKwordm9pZCBleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCSAgICAgICBpbnQgaW51c2UsIGludCBpc2RpcikKK3sKKwlpbnQJZ3JvdXAgPSBleHQyZnNfZ3JvdXBfb2ZfaW5vKGZzLCBpbm8pOworCisJaWYgKGlubyA+IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQpIHsKKyNpZm5kZWYgT01JVF9DT01fRVJSCisJCWNvbV9lcnIoImV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIiLCAwLAorCQkJIklsbGVnYWwgaW5vZGUgbnVtYmVyOiAlbHUiLCAodW5zaWduZWQgbG9uZykgaW5vKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCWlmIChpbnVzZSA+IDApCisJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoZnMtPmlub2RlX21hcCwgaW5vKTsKKwllbHNlCisJCWV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMihmcy0+aW5vZGVfbWFwLCBpbm8pOworCWV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudF9zZXQoZnMsIGdyb3VwLCBleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnQoZnMsIGdyb3VwKSAtIGludXNlKTsKKwlpZiAoaXNkaXIpCisJCWV4dDJmc19iZ191c2VkX2RpcnNfY291bnRfc2V0KGZzLCBncm91cCwgZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudChmcywgZ3JvdXApICsgaW51c2UpOworCisJLyogV2UgZG9uJ3Qgc3RyaWN0bHkgbmVlZCB0byBiZSBjbGVhcmluZyB0aGUgdW5pbml0IGZsYWcgaWYgaW51c2UgPCAwCisJICogKGkuZS4gZnJlZWluZyBpbm9kZXMpIGJ1dCBpdCBhbHNvIG1lYW5zIHNvbWV0aGluZyBpcyBiYWQuICovCisJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGZzLCBncm91cCwgRVhUMl9CR19JTk9ERV9VTklOSVQpOworCWlmIChFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pKSB7CisJCWV4dDJfaW5vX3QgZmlyc3RfdW51c2VkX2lub2RlID0JZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgLQorCQkJZXh0MmZzX2JnX2l0YWJsZV91bnVzZWQoZnMsIGdyb3VwKSArCisJCQlncm91cCAqIGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwICsgMTsKKworCQlpZiAoaW5vID49IGZpcnN0X3VudXNlZF9pbm9kZSkKKwkJCWV4dDJmc19iZ19pdGFibGVfdW51c2VkX3NldChmcywgZ3JvdXAsIGdyb3VwICogZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgKyBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCAtIGlubyk7CisJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBncm91cCk7CisJfQorCisJZnMtPnN1cGVyLT5zX2ZyZWVfaW5vZGVzX2NvdW50IC09IGludXNlOworCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwlleHQyZnNfbWFya19pYl9kaXJ0eShmcyk7Cit9CisKK3ZvaWQgZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywgaW50IGludXNlKQoreworCWV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoZnMsIGlubywgaW51c2UsIDApOworfQorCit2b2lkIGV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxrLCBpbnQgaW51c2UpCit7CisJaW50CWdyb3VwID0gZXh0MmZzX2dyb3VwX29mX2JsazIoZnMsIGJsayk7CisKKwlpZiAoYmxrID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkgeworI2lmbmRlZiBPTUlUX0NPTV9FUlIKKwkJY29tX2VycigiZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzIiwgMCwKKwkJCSJJbGxlZ2FsIGJsb2NrIG51bWJlcjogJWx1IiwgKHVuc2lnbmVkIGxvbmcpIGJsayk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKwlpZiAoaW51c2UgPiAwKQorCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsIGJsayk7CisJZWxzZQorCQlleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcDIoZnMtPmJsb2NrX21hcCwgYmxrKTsKKwlleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLCBncm91cCwgZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50KGZzLCBncm91cCkgLSBpbnVzZSk7CisJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGZzLCBncm91cCwgRVhUMl9CR19CTE9DS19VTklOSVQpOworCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBncm91cCk7CisKKwlleHQyZnNfZnJlZV9ibG9ja3NfY291bnRfYWRkKGZzLT5zdXBlciwKKwkJCSAgICAgLWludXNlICogKGJsazY0X3QpIEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKSk7CisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCWV4dDJmc19tYXJrX2JiX2RpcnR5KGZzKTsKKwlpZiAoZnMtPmJsb2NrX2FsbG9jX3N0YXRzKQorCQkoZnMtPmJsb2NrX2FsbG9jX3N0YXRzKShmcywgKGJsazY0X3QpIGJsaywgaW51c2UpOworfQorCit2b2lkIGV4dDJmc19ibG9ja19hbGxvY19zdGF0cyhleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxrLCBpbnQgaW51c2UpCit7CisJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgYmxrLCBpbnVzZSk7Cit9CisKK3ZvaWQgZXh0MmZzX3NldF9ibG9ja19hbGxvY19zdGF0c19jYWxsYmFjayhleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgdm9pZCAoKmZ1bmMpKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkJCWJsazY0X3QgYmxrLAorCQkJCQkJCWludCBpbnVzZSksCisJCQkJCSAgIHZvaWQgKCoqb2xkKShleHQyX2ZpbHN5cyBmcywKKwkJCQkJCQlibGs2NF90IGJsaywKKwkJCQkJCQlpbnQgaW51c2UpKQoreworCWlmICghZnMgfHwgZnMtPm1hZ2ljICE9IEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUykKKwkJcmV0dXJuOworCWlmIChvbGQpCisJCSpvbGQgPSBmcy0+YmxvY2tfYWxsb2Nfc3RhdHM7CisKKwlmcy0+YmxvY2tfYWxsb2Nfc3RhdHMgPSBmdW5jOworfQorCit2b2lkIGV4dDJmc19ibG9ja19hbGxvY19zdGF0c19yYW5nZShleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibGssCisJCQkJICAgIGJsa190IG51bSwgaW50IGludXNlKQoreworI2lmbmRlZiBPTUlUX0NPTV9FUlIKKwlpZiAoYmxrICsgbnVtID4gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSB7CisJCWNvbV9lcnIoImV4dDJmc19ibG9ja19hbGxvY19zdGF0c19yYW5nZSIsIDAsCisJCQkiSWxsZWdhbCBibG9jayByYW5nZTogJWxsdSAoJXUpICIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSBibGssIG51bSk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwlpZiAoaW51c2UgPT0gMCkKKwkJcmV0dXJuOworCWlmIChpbnVzZSA+IDApIHsKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwX3JhbmdlMihmcy0+YmxvY2tfbWFwLCBibGssIG51bSk7CisJCWludXNlID0gMTsKKwl9IGVsc2UgeworCQlleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIoZnMtPmJsb2NrX21hcCwgYmxrLCBudW0pOworCQlpbnVzZSA9IC0xOworCX0KKwl3aGlsZSAobnVtKSB7CisJCWludCBncm91cCA9IGV4dDJmc19ncm91cF9vZl9ibGsyKGZzLCBibGspOworCQlibGs2NF90IGxhc3RfYmxrID0gZXh0MmZzX2dyb3VwX2xhc3RfYmxvY2syKGZzLCBncm91cCk7CisJCWJsa190IG4gPSBudW07CisKKwkJaWYgKGJsayArIG51bSA+IGxhc3RfYmxrKQorCQkJbiA9IGxhc3RfYmxrIC0gYmxrICsgMTsKKworCQlleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLCBncm91cCwKKwkJCWV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudChmcywgZ3JvdXApIC0KKwkJCWludXNlKm4vRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpKTsKKwkJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGZzLCBncm91cCwgRVhUMl9CR19CTE9DS19VTklOSVQpOworCQlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgZ3JvdXApOworCQlleHQyZnNfZnJlZV9ibG9ja3NfY291bnRfYWRkKGZzLT5zdXBlciwgLWludXNlICogKGJsazY0X3QpIG4pOworCQlibGsgKz0gbjsKKwkJbnVtIC09IG47CisJfQorCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwlleHQyZnNfbWFya19iYl9kaXJ0eShmcyk7Cit9CmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2FsbG9jX3RhYmxlcy5jIGIvbGliL2V4dDJmcy9hbGxvY190YWJsZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzYwZDYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9hbGxvY190YWJsZXMuYwpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIGFsbG9jX3RhYmxlcy5jIC0tLSBBbGxvY2F0ZSB0YWJsZXMgZm9yIGEgbmV3bHkgaW5pdGlhbGl6ZWQKKyAqIGZpbGVzeXN0ZW0uICBVc2VkIGJ5IG1rZTJmcyB3aGVuIGluaXRpYWxpemluZyBhIGZpbGVzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKyNpbmNsdWRlICJleHQyZnNQLmgiCisKKy8qCisgKiBUaGlzIHJvdXRpbmUgc2VhcmNoZXMgZm9yIGZyZWUgYmxvY2tzIHRoYXQgY2FuIGFsbG9jYXRlIGEgZnVsbAorICogZ3JvdXAgb2YgYml0bWFwcyBvciBpbm9kZSB0YWJsZXMgZm9yIGEgZmxleGJnIGdyb3VwLiAgUmV0dXJucyB0aGUKKyAqIGJsb2NrIG51bWJlciB3aXRoIGEgY29ycmVjdCBvZmZzZXQgd2VyZSB0aGUgYml0bWFwcyBhbmQgaW5vZGUKKyAqIHRhYmxlcyBjYW4gYmUgYWxsb2NhdGVkIGNvbnRpbm91c2x5IGFuZCBpbiBvcmRlci4KKyAqLworc3RhdGljIGJsazY0X3QgZmxleGJnX29mZnNldChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwLCBibGs2NF90IHN0YXJ0X2JsaywKKwkJCSAgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwLCBpbnQgcmVtX2dycCwKKwkJCSAgICAgaW50IGVsZW1fc2l6ZSkKK3sKKwlpbnQJCWZsZXhiZywgZmxleGJnX3NpemUsIHNpemU7CisJYmxrNjRfdAkJbGFzdF9ibGssIGZpcnN0X2ZyZWUgPSAwOworCWRncnBfdAkgICAgICAgCWxhc3RfZ3JwOworCisJZmxleGJnX3NpemUgPSAxIDw8IGZzLT5zdXBlci0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4OworCWZsZXhiZyA9IGdyb3VwIC8gZmxleGJnX3NpemU7CisJc2l6ZSA9IHJlbV9ncnAgKiBlbGVtX3NpemU7CisKKwlpZiAoc2l6ZSA+IChpbnQpIChmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cCAvIDQpKQorCQlzaXplID0gKGludCkgZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXAgLyA0OworCisJLyoKKwkgKiBEb24ndCBkbyBhIGxvbmcgc2VhcmNoIGlmIHRoZSBwcmV2aW91cyBibG9jayBzZWFyY2ggaXMgc3RpbGwgdmFsaWQsCisJICogYnV0IHNraXAgbWlub3Igb2JzdHJ1Y3Rpb25zIHN1Y2ggYXMgZ3JvdXAgZGVzY3JpcHRvciBiYWNrdXBzLgorCSAqLworCWlmIChzdGFydF9ibGsgJiYgc3RhcnRfYmxrIDwgZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpICYmCisJICAgIGV4dDJmc19nZXRfZnJlZV9ibG9ja3MyKGZzLCBzdGFydF9ibGssIHN0YXJ0X2JsayArIHNpemUsIGVsZW1fc2l6ZSwKKwkJCQkgICAgYm1hcCwgJmZpcnN0X2ZyZWUpID09IDApCisJCXJldHVybiBmaXJzdF9mcmVlOworCisJc3RhcnRfYmxrID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywgZmxleGJnX3NpemUgKiBmbGV4YmcpOworCWxhc3RfZ3JwID0gZ3JvdXAgfCAoZmxleGJnX3NpemUgLSAxKTsKKwlpZiAobGFzdF9ncnAgPiBmcy0+Z3JvdXBfZGVzY19jb3VudC0xKQorCQlsYXN0X2dycCA9IGZzLT5ncm91cF9kZXNjX2NvdW50LTE7CisJbGFzdF9ibGsgPSBleHQyZnNfZ3JvdXBfbGFzdF9ibG9jazIoZnMsIGxhc3RfZ3JwKTsKKworCS8qIEZpbmQgdGhlIGZpcnN0IGF2YWlsYWJsZSBibG9jayAqLworCWlmIChleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzMihmcywgc3RhcnRfYmxrLCBsYXN0X2Jsaywgc2l6ZSwKKwkJCQkgICAgYm1hcCwgJmZpcnN0X2ZyZWUpID09IDApCisJCXJldHVybiBmaXJzdF9mcmVlOworCisJaWYgKGV4dDJmc19nZXRfZnJlZV9ibG9ja3MyKGZzLCBzdGFydF9ibGssIGxhc3RfYmxrLCBlbGVtX3NpemUsCisJCQkJICAgYm1hcCwgJmZpcnN0X2ZyZWUpID09IDApCisJCXJldHVybiBmaXJzdF9mcmVlOworCisJaWYgKGV4dDJmc19nZXRfZnJlZV9ibG9ja3MyKGZzLCAwLCBsYXN0X2JsaywgZWxlbV9zaXplLCBibWFwLAorCQkJCSAgICAmZmlyc3RfZnJlZSkgPT0gMCkKKwkJcmV0dXJuIGZpcnN0X2ZyZWU7CisKKwlyZXR1cm4gZmlyc3RfZnJlZTsKK30KKworZXJyY29kZV90IGV4dDJmc19hbGxvY2F0ZV9ncm91cF90YWJsZShleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwLAorCQkJCSAgICAgIGV4dDJmc19ibG9ja19iaXRtYXAgYm1hcCkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWJsazY0X3QJCWdyb3VwX2Jsaywgc3RhcnRfYmxrLCBsYXN0X2JsaywgbmV3X2JsazsKKwlkZ3JwX3QJCWxhc3RfZ3JwID0gMDsKKwlpbnQJCXJlbV9ncnBzID0gMCwgZmxleGJnX3NpemUgPSAwLCB0YWJsZV9vZmZzZXQgPSAwOworCisJZ3JvdXBfYmxrID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywgZ3JvdXApOworCWxhc3RfYmxrID0gZXh0MmZzX2dyb3VwX2xhc3RfYmxvY2syKGZzLCBncm91cCk7CisKKwlpZiAoIWJtYXApCisJCWJtYXAgPSBmcy0+YmxvY2tfbWFwOworCisJaWYgKEVYVDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCSAgICAgIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHKSAmJgorCSAgICBmcy0+c3VwZXItPnNfbG9nX2dyb3Vwc19wZXJfZmxleCkgeworCQlmbGV4Ymdfc2l6ZSA9IDEgPDwgZnMtPnN1cGVyLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXg7CisJCWxhc3RfZ3JwID0gZ3JvdXAgfCAoZmxleGJnX3NpemUgLSAxKTsKKwkJaWYgKGxhc3RfZ3JwID4gZnMtPmdyb3VwX2Rlc2NfY291bnQtMSkKKwkJCWxhc3RfZ3JwID0gZnMtPmdyb3VwX2Rlc2NfY291bnQtMTsKKwkJcmVtX2dycHMgPSBsYXN0X2dycCAtIGdyb3VwICsgMTsKKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIHRoZSBibG9jayBhbmQgaW5vZGUgYml0bWFwcywgaWYgbmVjZXNzYXJ5CisJICovCisJaWYgKGZzLT5zdHJpZGUpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9mcmVlX2Jsb2NrczIoZnMsIGdyb3VwX2JsaywgbGFzdF9ibGssCisJCQkJCQkgMSwgYm1hcCwgJnN0YXJ0X2Jsayk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlzdGFydF9ibGsgKz0gZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCXN0YXJ0X2JsayArPSAoKGZzLT5zdHJpZGUgKiBncm91cCkgJQorCQkJICAgICAgKGxhc3RfYmxrIC0gc3RhcnRfYmxrICsgMSkpOworCQlpZiAoc3RhcnRfYmxrID49IGxhc3RfYmxrKQorCQkJc3RhcnRfYmxrID0gZ3JvdXBfYmxrOworCX0gZWxzZQorCQlzdGFydF9ibGsgPSBncm91cF9ibGs7CisKKwlpZiAoZmxleGJnX3NpemUpIHsKKwkJYmxrNjRfdCBwcmV2X2Jsb2NrID0gMDsKKworCQl0YWJsZV9vZmZzZXQgPSBmbGV4Ymdfc2l6ZTsKKwkJaWYgKGdyb3VwICUgZmxleGJnX3NpemUpCisJCQlwcmV2X2Jsb2NrID0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGdyb3VwIC0gMSkgKyAxOworCQllbHNlIGlmIChsYXN0X2dycCA9PSBmcy0+Z3JvdXBfZGVzY19jb3VudC0xKSB7CisJCQkvKgorCQkJICogSWYgd2UgYXJlIGFsbG9jYXRpbmcgZm9yIHRoZSBsYXN0IGZsZXhfYmcKKwkJCSAqIGtlZXAgdGhlIG1ldGFkYXRhIHRhYmxlcyBjb250aWd1b3VzCisJCQkgKi8KKwkJCXRhYmxlX29mZnNldCA9IGxhc3RfZ3JwICYgKGZsZXhiZ19zaXplIC0gMSk7CisJCQlpZiAodGFibGVfb2Zmc2V0ID09IDApCisJCQkJdGFibGVfb2Zmc2V0ID0gZmxleGJnX3NpemU7CisJCQllbHNlCisJCQkJdGFibGVfb2Zmc2V0Kys7CisJCX0KKwkJLyogRklYTUU6IFRha2UgYmFja3VwIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzIGludG8gYWNjb3VudAorCQkgKiBpZiB0aGUgZmxleGJnIGFsbG9jYXRpb25zIHdpbGwgZ3JvdyB0byBvdmVybGFwIHRoZW0uLi4gKi8KKwkJc3RhcnRfYmxrID0gZmxleGJnX29mZnNldChmcywgZ3JvdXAsIHByZXZfYmxvY2ssIGJtYXAsCisJCQkJCSAgcmVtX2dycHMsIDEpOworCQlsYXN0X2JsayA9IGV4dDJmc19ncm91cF9sYXN0X2Jsb2NrMihmcywgbGFzdF9ncnApOworCX0KKworCWlmICghZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGdyb3VwKSkgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzMihmcywgc3RhcnRfYmxrLCBsYXN0X2JsaywKKwkJCQkJCSAxLCBibWFwLCAmbmV3X2Jsayk7CisJCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9CTE9DS19BTExPQ19GQUlMKQorCQkJcmV0dmFsID0gZXh0MmZzX2dldF9mcmVlX2Jsb2NrczIoZnMsIGdyb3VwX2JsaywKKwkJCQkJbGFzdF9ibGssIDEsIGJtYXAsICZuZXdfYmxrKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoYm1hcCwgbmV3X2Jsayk7CisJCWV4dDJmc19ibG9ja19iaXRtYXBfbG9jX3NldChmcywgZ3JvdXAsIG5ld19ibGspOworCQlpZiAoZmxleGJnX3NpemUpIHsKKwkJCWRncnBfdCBnciA9IGV4dDJmc19ncm91cF9vZl9ibGsyKGZzLCBuZXdfYmxrKTsKKwkJCWV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoZnMsIGdyLCBleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnQoZnMsIGdyKSAtIDEpOworCQkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X2FkZChmcy0+c3VwZXIsIC0xKTsKKwkJCWV4dDJmc19iZ19mbGFnc19jbGVhcihmcywgZ3IsIEVYVDJfQkdfQkxPQ0tfVU5JTklUKTsKKwkJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBncik7CisJCX0KKwl9CisKKwlpZiAoZmxleGJnX3NpemUpIHsKKwkJYmxrNjRfdCBwcmV2X2Jsb2NrID0gMDsKKwkJaWYgKGdyb3VwICUgZmxleGJnX3NpemUpCisJCQlwcmV2X2Jsb2NrID0gZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGdyb3VwIC0gMSkgKyAxOworCQllbHNlCisJCQlwcmV2X2Jsb2NrID0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGdyb3VwKSArCisJCQkJdGFibGVfb2Zmc2V0OworCQkvKiBGSVhNRTogVGFrZSBiYWNrdXAgZ3JvdXAgZGVzY3JpcHRvciBibG9ja3MgaW50byBhY2NvdW50CisJCSAqIGlmIHRoZSBmbGV4YmcgYWxsb2NhdGlvbnMgd2lsbCBncm93IHRvIG92ZXJsYXAgdGhlbS4uLiAqLworCQlzdGFydF9ibGsgPSBmbGV4Ymdfb2Zmc2V0KGZzLCBncm91cCwgcHJldl9ibG9jaywgYm1hcCwKKwkJCQkJICByZW1fZ3JwcywgMSk7CisJCWxhc3RfYmxrID0gZXh0MmZzX2dyb3VwX2xhc3RfYmxvY2syKGZzLCBsYXN0X2dycCk7CisJfQorCisJaWYgKCFleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgZ3JvdXApKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfZnJlZV9ibG9ja3MyKGZzLCBzdGFydF9ibGssIGxhc3RfYmxrLAorCQkJCQkJIDEsIGJtYXAsICZuZXdfYmxrKTsKKwkJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0JMT0NLX0FMTE9DX0ZBSUwpCisJCQlyZXR2YWwgPSBleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzMihmcywgZ3JvdXBfYmxrLAorCQkJCQkgbGFzdF9ibGssIDEsIGJtYXAsICZuZXdfYmxrKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoYm1hcCwgbmV3X2Jsayk7CisJCWV4dDJmc19pbm9kZV9iaXRtYXBfbG9jX3NldChmcywgZ3JvdXAsIG5ld19ibGspOworCQlpZiAoZmxleGJnX3NpemUpIHsKKwkJCWRncnBfdCBnciA9IGV4dDJmc19ncm91cF9vZl9ibGsyKGZzLCBuZXdfYmxrKTsKKwkJCWV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoZnMsIGdyLCBleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnQoZnMsIGdyKSAtIDEpOworCQkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X2FkZChmcy0+c3VwZXIsIC0xKTsKKwkJCWV4dDJmc19iZ19mbGFnc19jbGVhcihmcywgZ3IsIEVYVDJfQkdfQkxPQ0tfVU5JTklUKTsKKwkJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBncik7CisJCX0KKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIHRoZSBpbm9kZSB0YWJsZQorCSAqLworCWlmIChmbGV4Ymdfc2l6ZSkgeworCQlibGs2NF90IHByZXZfYmxvY2sgPSAwOworCisJCWlmIChncm91cCAlIGZsZXhiZ19zaXplKQorCQkJcHJldl9ibG9jayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGdyb3VwIC0gMSkgKworCQkJCWZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwOworCQllbHNlCisJCQlwcmV2X2Jsb2NrID0gZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGdyb3VwKSArCisJCQkJdGFibGVfb2Zmc2V0OworCisJCS8qIEZJWE1FOiBUYWtlIGJhY2t1cCBncm91cCBkZXNjcmlwdG9yIGJsb2NrcyBpbnRvIGFjY291bnQKKwkJICogaWYgdGhlIGZsZXhiZyBhbGxvY2F0aW9ucyB3aWxsIGdyb3cgdG8gb3ZlcmxhcCB0aGVtLi4uICovCisJCWdyb3VwX2JsayA9IGZsZXhiZ19vZmZzZXQoZnMsIGdyb3VwLCBwcmV2X2Jsb2NrLCBibWFwLAorCQkJCQkgIHJlbV9ncnBzLCBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCk7CisJCWxhc3RfYmxrID0gZXh0MmZzX2dyb3VwX2xhc3RfYmxvY2syKGZzLCBsYXN0X2dycCk7CisJfQorCisJaWYgKCFleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBncm91cCkpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9mcmVlX2Jsb2NrczIoZnMsIGdyb3VwX2JsaywgbGFzdF9ibGssCisJCQkJCQlmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCwKKwkJCQkJCWJtYXAsICZuZXdfYmxrKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCWlmIChmbGV4Ymdfc2l6ZSkKKwkJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0c19yYW5nZShmcywgbmV3X2JsaywKKwkJCQkgICAgICAgZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAsICsxKTsKKwkJZWxzZQorCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwX3JhbmdlMihmcy0+YmxvY2tfbWFwLAorCQkJCQluZXdfYmxrLCBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCk7CisJCWV4dDJmc19pbm9kZV90YWJsZV9sb2Nfc2V0KGZzLCBncm91cCwgbmV3X2Jsayk7CisJfQorCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBncm91cCk7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfYWxsb2NhdGVfdGFibGVzKGV4dDJfZmlsc3lzIGZzKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJZGdycF90CQlpOworCXN0cnVjdCBleHQyZnNfbnVtZXJpY19wcm9ncmVzc19zdHJ1Y3QgcHJvZ3Jlc3M7CisKKwlleHQyZnNfbnVtZXJpY19wcm9ncmVzc19pbml0KGZzLCAmcHJvZ3Jlc3MsIE5VTEwsCisJCQkJICAgICBmcy0+Z3JvdXBfZGVzY19jb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlleHQyZnNfbnVtZXJpY19wcm9ncmVzc191cGRhdGUoZnMsICZwcm9ncmVzcywgaSk7CisJCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9ncm91cF90YWJsZShmcywgaSwgZnMtPmJsb2NrX21hcCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwlleHQyZnNfbnVtZXJpY19wcm9ncmVzc19jbG9zZShmcywgJnByb2dyZXNzLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9iYWRibG9ja3MuYyBiL2xpYi9leHQyZnMvYmFkYmxvY2tzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYyMzk4MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvYmFkYmxvY2tzLmMKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiBiYWRibG9ja3MuYyAtLS0gcm91dGluZXMgdG8gbWFuaXB1bGF0ZSB0aGUgYmFkIGJsb2NrIHN0cnVjdHVyZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmc1AuaCIKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgbWFraW5nIGEgYmFkYmxvY2tzIGxpc3QKKyAqLworc3RhdGljIGVycmNvZGVfdCBtYWtlX3UzMl9saXN0KGludCBzaXplLCBpbnQgbnVtLCBfX3UzMiAqbGlzdCwKKwkJCSAgICAgICBleHQyX3UzMl9saXN0ICpyZXQpCit7CisJZXh0Ml91MzJfbGlzdAliYjsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBleHQyX3N0cnVjdF91MzJfbGlzdCksICZiYik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwltZW1zZXQoYmIsIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9zdHJ1Y3RfdTMyX2xpc3QpKTsKKwliYi0+bWFnaWMgPSBFWFQyX0VUX01BR0lDX0JBREJMT0NLU19MSVNUOworCWJiLT5zaXplID0gc2l6ZSA/IHNpemUgOiAxMDsKKwliYi0+bnVtID0gbnVtOworCXJldHZhbCA9IGV4dDJmc19nZXRfYXJyYXkoYmItPnNpemUsIHNpemVvZihibGtfdCksICZiYi0+bGlzdCk7CisJaWYgKHJldHZhbCkgeworCQlleHQyZnNfZnJlZV9tZW0oJmJiKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJaWYgKGxpc3QpCisJCW1lbWNweShiYi0+bGlzdCwgbGlzdCwgYmItPnNpemUgKiBzaXplb2YoYmxrX3QpKTsKKwllbHNlCisJCW1lbXNldChiYi0+bGlzdCwgMCwgYmItPnNpemUgKiBzaXplb2YoYmxrX3QpKTsKKwkqcmV0ID0gYmI7CisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIFRoaXMgcHJvY2VkdXJlIGNyZWF0ZXMgYW4gZW1wdHkgdTMyIGxpc3QuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfdTMyX2xpc3RfY3JlYXRlKGV4dDJfdTMyX2xpc3QgKnJldCwgaW50IHNpemUpCit7CisJcmV0dXJuIG1ha2VfdTMyX2xpc3Qoc2l6ZSwgMCwgMCwgcmV0KTsKK30KKworLyoKKyAqIFRoaXMgcHJvY2VkdXJlIGNyZWF0ZXMgYW4gZW1wdHkgYmFkYmxvY2tzIGxpc3QuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfY3JlYXRlKGV4dDJfYmFkYmxvY2tzX2xpc3QgKnJldCwgaW50IHNpemUpCit7CisJcmV0dXJuIG1ha2VfdTMyX2xpc3Qoc2l6ZSwgMCwgMCwgKGV4dDJfYmFkYmxvY2tzX2xpc3QgKikgcmV0KTsKK30KKworCisvKgorICogVGhpcyBwcm9jZWR1cmUgY29waWVzIGEgYmFkYmxvY2tzIGxpc3QKKyAqLworZXJyY29kZV90IGV4dDJmc191MzJfY29weShleHQyX3UzMl9saXN0IHNyYywgZXh0Ml91MzJfbGlzdCAqZGVzdCkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCisJcmV0dmFsID0gbWFrZV91MzJfbGlzdChzcmMtPnNpemUsIHNyYy0+bnVtLCBzcmMtPmxpc3QsIGRlc3QpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJKCpkZXN0KS0+YmFkYmxvY2tzX2ZsYWdzID0gc3JjLT5iYWRibG9ja3NfZmxhZ3M7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfYmFkYmxvY2tzX2NvcHkoZXh0Ml9iYWRibG9ja3NfbGlzdCBzcmMsCisJCQkJZXh0Ml9iYWRibG9ja3NfbGlzdCAqZGVzdCkKK3sKKwlyZXR1cm4gZXh0MmZzX3UzMl9jb3B5KChleHQyX3UzMl9saXN0KSBzcmMsCisJCQkgICAgICAgKGV4dDJfdTMyX2xpc3QgKikgZGVzdCk7Cit9CisKKy8qCisgKiBUaGlzIHByb2NlZHVyZSBmcmVlcyBhIGJhZGJsb2NrcyBsaXN0LgorICoKKyAqIChub3RlOiBtb3ZlZCB0byBjbG9zZWZzLmMpCisgKi8KKworCisvKgorICogVGhpcyBwcm9jZWR1cmUgYWRkcyBhIGJsb2NrIHRvIGEgYmFkYmxvY2tzIGxpc3QuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfdTMyX2xpc3RfYWRkKGV4dDJfdTMyX2xpc3QgYmIsIF9fdTMyIGJsaykKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJaSwgajsKKwl1bnNpZ25lZCBsb25nCW9sZF9zaXplOworCisJRVhUMl9DSEVDS19NQUdJQyhiYiwgRVhUMl9FVF9NQUdJQ19CQURCTE9DS1NfTElTVCk7CisKKwlpZiAoYmItPm51bSA+PSBiYi0+c2l6ZSkgeworCQlvbGRfc2l6ZSA9IGJiLT5zaXplICogc2l6ZW9mKF9fdTMyKTsKKwkJYmItPnNpemUgKz0gMTAwOworCQlyZXR2YWwgPSBleHQyZnNfcmVzaXplX21lbShvbGRfc2l6ZSwgYmItPnNpemUgKiBzaXplb2YoX191MzIpLAorCQkJCQkgICAmYmItPmxpc3QpOworCQlpZiAocmV0dmFsKSB7CisJCQliYi0+c2l6ZSAtPSAxMDA7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJfQorCisJLyoKKwkgKiBBZGQgc3BlY2lhbCBjYXNlIGNvZGUgZm9yIGFwcGVuZGluZyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CisJICovCisJaSA9IGJiLT5udW0tMTsKKwlpZiAoKGJiLT5udW0gIT0gMCkgJiYgKGJiLT5saXN0W2ldID09IGJsaykpCisJCXJldHVybiAwOworCWlmICgoYmItPm51bSA9PSAwKSB8fCAoYmItPmxpc3RbaV0gPCBibGspKSB7CisJCWJiLT5saXN0W2JiLT5udW0rK10gPSBibGs7CisJCXJldHVybiAwOworCX0KKworCWogPSBiYi0+bnVtOworCWZvciAoaT0wOyBpIDwgYmItPm51bTsgaSsrKSB7CisJCWlmIChiYi0+bGlzdFtpXSA9PSBibGspCisJCQlyZXR1cm4gMDsKKwkJaWYgKGJiLT5saXN0W2ldID4gYmxrKSB7CisJCQlqID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCWZvciAoaT1iYi0+bnVtOyBpID4gajsgaS0tKQorCQliYi0+bGlzdFtpXSA9IGJiLT5saXN0W2ktMV07CisJYmItPmxpc3Rbal0gPSBibGs7CisJYmItPm51bSsrOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2JhZGJsb2Nrc19saXN0X2FkZChleHQyX2JhZGJsb2Nrc19saXN0IGJiLCBibGtfdCBibGspCit7CisJcmV0dXJuIGV4dDJmc191MzJfbGlzdF9hZGQoKGV4dDJfdTMyX2xpc3QpIGJiLCAoX191MzIpIGJsayk7Cit9CisKKy8qCisgKiBUaGlzIHByb2NlZHVyZSBmaW5kcyBhIHBhcnRpY3VsYXIgYmxvY2sgaXMgb24gYSBiYWRibG9ja3MKKyAqIGxpc3QuCisgKi8KK2ludCBleHQyZnNfdTMyX2xpc3RfZmluZChleHQyX3UzMl9saXN0IGJiLCBfX3UzMiBibGspCit7CisJaW50CWxvdywgaGlnaCwgbWlkOworCisJaWYgKGJiLT5tYWdpYyAhPSBFWFQyX0VUX01BR0lDX0JBREJMT0NLU19MSVNUKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoYmItPm51bSA9PSAwKQorCQlyZXR1cm4gLTE7CisKKwlsb3cgPSAwOworCWhpZ2ggPSBiYi0+bnVtLTE7CisJaWYgKGJsayA9PSBiYi0+bGlzdFtsb3ddKQorCQlyZXR1cm4gbG93OworCWlmIChibGsgPT0gYmItPmxpc3RbaGlnaF0pCisJCXJldHVybiBoaWdoOworCisJd2hpbGUgKGxvdyA8IGhpZ2gpIHsKKwkJbWlkID0gKCh1bnNpZ25lZClsb3cgKyAodW5zaWduZWQpaGlnaCkvMjsKKwkJaWYgKG1pZCA9PSBsb3cgfHwgbWlkID09IGhpZ2gpCisJCQlicmVhazsKKwkJaWYgKGJsayA9PSBiYi0+bGlzdFttaWRdKQorCQkJcmV0dXJuIG1pZDsKKwkJaWYgKGJsayA8IGJiLT5saXN0W21pZF0pCisJCQloaWdoID0gbWlkOworCQllbHNlCisJCQlsb3cgPSBtaWQ7CisJfQorCXJldHVybiAtMTsKK30KKworLyoKKyAqIFRoaXMgcHJvY2VkdXJlIHRlc3RzIHRvIHNlZSBpZiBhIHBhcnRpY3VsYXIgYmxvY2sgaXMgb24gYSBiYWRibG9ja3MKKyAqIGxpc3QuCisgKi8KK2ludCBleHQyZnNfdTMyX2xpc3RfdGVzdChleHQyX3UzMl9saXN0IGJiLCBfX3UzMiBibGspCit7CisJaWYgKGV4dDJmc191MzJfbGlzdF9maW5kKGJiLCBibGspIDwgMCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworaW50IGV4dDJmc19iYWRibG9ja3NfbGlzdF90ZXN0KGV4dDJfYmFkYmxvY2tzX2xpc3QgYmIsIGJsa190IGJsaykKK3sKKwlyZXR1cm4gZXh0MmZzX3UzMl9saXN0X3Rlc3QoKGV4dDJfdTMyX2xpc3QpIGJiLCAoX191MzIpIGJsayk7Cit9CisKKworLyoKKyAqIFJlbW92ZSBhIGJsb2NrIGZyb20gdGhlIGJhZGJsb2NrIGxpc3QKKyAqLworaW50IGV4dDJmc191MzJfbGlzdF9kZWwoZXh0Ml91MzJfbGlzdCBiYiwgX191MzIgYmxrKQoreworCWludAlyZW1sb2MsIGk7CisKKwlpZiAoYmItPm51bSA9PSAwKQorCQlyZXR1cm4gLTE7CisKKwlyZW1sb2MgPSBleHQyZnNfdTMyX2xpc3RfZmluZChiYiwgYmxrKTsKKwlpZiAocmVtbG9jIDwgMCkKKwkJcmV0dXJuIC0xOworCisJZm9yIChpID0gcmVtbG9jIDsgaSA8IGJiLT5udW0tMTsgaSsrKQorCQliYi0+bGlzdFtpXSA9IGJiLT5saXN0W2krMV07CisJYmItPm51bS0tOworCXJldHVybiAwOworfQorCit2b2lkIGV4dDJmc19iYWRibG9ja3NfbGlzdF9kZWwoZXh0Ml91MzJfbGlzdCBiYiwgX191MzIgYmxrKQoreworCWV4dDJmc191MzJfbGlzdF9kZWwoYmIsIGJsayk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfdTMyX2xpc3RfaXRlcmF0ZV9iZWdpbihleHQyX3UzMl9saXN0IGJiLAorCQkJCQlleHQyX3UzMl9pdGVyYXRlICpyZXQpCit7CisJZXh0Ml91MzJfaXRlcmF0ZSBpdGVyOworCWVycmNvZGVfdAkJcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhiYiwgRVhUMl9FVF9NQUdJQ19CQURCTE9DS1NfTElTVCk7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGV4dDJfc3RydWN0X3UzMl9pdGVyYXRlKSwgJml0ZXIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpdGVyLT5tYWdpYyA9IEVYVDJfRVRfTUFHSUNfQkFEQkxPQ0tTX0lURVJBVEU7CisJaXRlci0+YmIgPSBiYjsKKwlpdGVyLT5wdHIgPSAwOworCSpyZXQgPSBpdGVyOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfYmVnaW4oZXh0Ml9iYWRibG9ja3NfbGlzdCBiYiwKKwkJCQkJICAgICAgZXh0Ml9iYWRibG9ja3NfaXRlcmF0ZSAqcmV0KQoreworCXJldHVybiBleHQyZnNfdTMyX2xpc3RfaXRlcmF0ZV9iZWdpbigoZXh0Ml91MzJfbGlzdCkgYmIsCisJCQkJCSAgICAgIChleHQyX3UzMl9pdGVyYXRlICopIHJldCk7Cit9CisKKworaW50IGV4dDJmc191MzJfbGlzdF9pdGVyYXRlKGV4dDJfdTMyX2l0ZXJhdGUgaXRlciwgX191MzIgKmJsaykKK3sKKwlleHQyX3UzMl9saXN0CWJiOworCisJaWYgKGl0ZXItPm1hZ2ljICE9IEVYVDJfRVRfTUFHSUNfQkFEQkxPQ0tTX0lURVJBVEUpCisJCXJldHVybiAwOworCisJYmIgPSBpdGVyLT5iYjsKKworCWlmIChiYi0+bWFnaWMgIT0gRVhUMl9FVF9NQUdJQ19CQURCTE9DS1NfTElTVCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXRlci0+cHRyIDwgYmItPm51bSkgeworCQkqYmxrID0gYmItPmxpc3RbaXRlci0+cHRyKytdOworCQlyZXR1cm4gMTsKKwl9CisJKmJsayA9IDA7CisJcmV0dXJuIDA7Cit9CisKK2ludCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZShleHQyX2JhZGJsb2Nrc19pdGVyYXRlIGl0ZXIsIGJsa190ICpibGspCit7CisJcmV0dXJuIGV4dDJmc191MzJfbGlzdF9pdGVyYXRlKChleHQyX3UzMl9pdGVyYXRlKSBpdGVyLAorCQkJCSAgICAgICAoX191MzIgKikgYmxrKTsKK30KKworCit2b2lkIGV4dDJmc191MzJfbGlzdF9pdGVyYXRlX2VuZChleHQyX3UzMl9pdGVyYXRlIGl0ZXIpCit7CisJaWYgKCFpdGVyIHx8IChpdGVyLT5tYWdpYyAhPSBFWFQyX0VUX01BR0lDX0JBREJMT0NLU19JVEVSQVRFKSkKKwkJcmV0dXJuOworCisJaXRlci0+YmIgPSAwOworCWV4dDJmc19mcmVlX21lbSgmaXRlcik7Cit9CisKK3ZvaWQgZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfZW5kKGV4dDJfYmFkYmxvY2tzX2l0ZXJhdGUgaXRlcikKK3sKKwlleHQyZnNfdTMyX2xpc3RfaXRlcmF0ZV9lbmQoKGV4dDJfdTMyX2l0ZXJhdGUpIGl0ZXIpOworfQorCisKK2ludCBleHQyZnNfdTMyX2xpc3RfZXF1YWwoZXh0Ml91MzJfbGlzdCBiYjEsIGV4dDJfdTMyX2xpc3QgYmIyKQoreworCUVYVDJfQ0hFQ0tfTUFHSUMoYmIxLCBFWFQyX0VUX01BR0lDX0JBREJMT0NLU19MSVNUKTsKKwlFWFQyX0NIRUNLX01BR0lDKGJiMiwgRVhUMl9FVF9NQUdJQ19CQURCTE9DS1NfTElTVCk7CisKKwlpZiAoYmIxLT5udW0gIT0gYmIyLT5udW0pCisJCXJldHVybiAwOworCisJaWYgKG1lbWNtcChiYjEtPmxpc3QsIGJiMi0+bGlzdCwgYmIxLT5udW0gKiBzaXplb2YoYmxrX3QpKSAhPSAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworaW50IGV4dDJmc19iYWRibG9ja3NfZXF1YWwoZXh0Ml9iYWRibG9ja3NfbGlzdCBiYjEsIGV4dDJfYmFkYmxvY2tzX2xpc3QgYmIyKQoreworCXJldHVybiBleHQyZnNfdTMyX2xpc3RfZXF1YWwoKGV4dDJfdTMyX2xpc3QpIGJiMSwKKwkJCQkgICAgIChleHQyX3UzMl9saXN0KSBiYjIpOworfQorCitpbnQgZXh0MmZzX3UzMl9saXN0X2NvdW50KGV4dDJfdTMyX2xpc3QgYmIpCit7CisJcmV0dXJuIGJiLT5udW07Cit9CmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2JiX2NvbXBhdC5jIGIvbGliL2V4dDJmcy9iYl9jb21wYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzM3OTJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9iYl9jb21wYXQuYwpAQCAtMCwwICsxLDY0IEBACisvKgorICogYmJfY29tcGF0LmMgLS0tIGNvbXBhdGliaWxpdHkgYmFkYmxvY2tzIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorCitlcnJjb2RlX3QgYmFkYmxvY2tzX2xpc3RfY3JlYXRlKGJhZGJsb2Nrc19saXN0ICpyZXQsIGludCBzaXplKQoreworCXJldHVybiBleHQyZnNfYmFkYmxvY2tzX2xpc3RfY3JlYXRlKHJldCwgc2l6ZSk7Cit9CisKK3ZvaWQgYmFkYmxvY2tzX2xpc3RfZnJlZShiYWRibG9ja3NfbGlzdCBiYikKK3sKKwlleHQyZnNfYmFkYmxvY2tzX2xpc3RfZnJlZShiYik7Cit9CisKK2VycmNvZGVfdCBiYWRibG9ja3NfbGlzdF9hZGQoYmFkYmxvY2tzX2xpc3QgYmIsIGJsa190IGJsaykKK3sKKwlyZXR1cm4gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2FkZChiYiwgYmxrKTsKK30KKworaW50IGJhZGJsb2Nrc19saXN0X3Rlc3QoYmFkYmxvY2tzX2xpc3QgYmIsIGJsa190IGJsaykKK3sKKwlyZXR1cm4gZXh0MmZzX2JhZGJsb2Nrc19saXN0X3Rlc3QoYmIsIGJsayk7Cit9CisKK2VycmNvZGVfdCBiYWRibG9ja3NfbGlzdF9pdGVyYXRlX2JlZ2luKGJhZGJsb2Nrc19saXN0IGJiLAorCQkJCSAgICAgICBiYWRibG9ja3NfaXRlcmF0ZSAqcmV0KQoreworCXJldHVybiBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9iZWdpbihiYiwgcmV0KTsKK30KKworaW50IGJhZGJsb2Nrc19saXN0X2l0ZXJhdGUoYmFkYmxvY2tzX2l0ZXJhdGUgaXRlciwgYmxrX3QgKmJsaykKK3sKKwlyZXR1cm4gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGUoaXRlciwgYmxrKTsKK30KKwordm9pZCBiYWRibG9ja3NfbGlzdF9pdGVyYXRlX2VuZChiYWRibG9ja3NfaXRlcmF0ZSBpdGVyKQoreworCWV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlX2VuZChpdGVyKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvYmJfaW5vZGUuYyBiL2xpYi9leHQyZnMvYmJfaW5vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGUxMTRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9iYl9pbm9kZS5jCkBAIC0wLDAgKzEsMjcwIEBACisvKgorICogYmJfaW5vZGUuYyAtLS0gcm91dGluZXMgdG8gdXBkYXRlIHRoZSBiYWQgYmxvY2sgaW5vZGUuCisgKgorICogV0FSTklORzogVGhpcyByb3V0aW5lIG1vZGlmaWVzIGEgbG90IG9mIHN0YXRlIGluIHRoZSBmaWxlc3lzdGVtOyBpZgorICogdGhpcyByb3V0aW5lIHJldHVybnMgYW4gZXJyb3IsIHRoZSBiYWQgYmxvY2sgaW5vZGUgbWF5IGJlIGluIGFuCisgKiBpbmNvbnNpc3RlbnQgc3RhdGUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKK3N0cnVjdCBzZXRfYmFkYmxvY2tfcmVjb3JkIHsKKwlleHQyX2JhZGJsb2Nrc19pdGVyYXRlCWJiX2l0ZXI7CisJaW50CQliYWRfYmxvY2tfY291bnQ7CisJYmxrX3QJCSppbmRfYmxvY2tzOworCWludAkJbWF4X2luZF9ibG9ja3M7CisJaW50CQlpbmRfYmxvY2tzX3NpemU7CisJaW50CQlpbmRfYmxvY2tzX3B0cjsKKwljaGFyCQkqYmxvY2tfYnVmOworCWVycmNvZGVfdAllcnI7Cit9OworCitzdGF0aWMgaW50IHNldF9iYWRfYmxvY2tfcHJvYyhleHQyX2ZpbHN5cyBmcywgYmxrX3QgKmJsb2NrX25yLAorCQkJICAgICAgZTJfYmxrY250X3QgYmxvY2tjbnQsCisJCQkgICAgICBibGtfdCByZWZfYmxvY2ssIGludCByZWZfb2Zmc2V0LAorCQkJICAgICAgdm9pZCAqcHJpdl9kYXRhKTsKK3N0YXRpYyBpbnQgY2xlYXJfYmFkX2Jsb2NrX3Byb2MoZXh0Ml9maWxzeXMgZnMsIGJsa190ICpibG9ja19uciwKKwkJCQllMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJCQlibGtfdCByZWZfYmxvY2ssIGludCByZWZfb2Zmc2V0LAorCQkJCXZvaWQgKnByaXZfZGF0YSk7CisKKy8qCisgKiBHaXZlbiBhIGJhZCBibG9ja3MgYml0bWFwLCB1cGRhdGUgdGhlIGJhZCBibG9ja3MgaW5vZGUgdG8gcmVmbGVjdAorICogdGhlIG1hcC4KKyAqLworZXJyY29kZV90IGV4dDJmc191cGRhdGVfYmJfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfYmFkYmxvY2tzX2xpc3QgYmJfbGlzdCkKK3sKKwllcnJjb2RlX3QJCQlyZXR2YWw7CisJc3RydWN0IHNldF9iYWRibG9ja19yZWNvcmQgCXJlYzsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQkJaW5vZGU7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJaWYgKCFmcy0+YmxvY2tfbWFwKQorCQlyZXR1cm4gRVhUMl9FVF9OT19CTE9DS19CSVRNQVA7CisKKwltZW1zZXQoJnJlYywgMCwgc2l6ZW9mKHJlYykpOworCXJlYy5tYXhfaW5kX2Jsb2NrcyA9IDEwOworCXJldHZhbCA9IGV4dDJmc19nZXRfYXJyYXkocmVjLm1heF9pbmRfYmxvY2tzLCBzaXplb2YoYmxrX3QpLAorCQkJCSZyZWMuaW5kX2Jsb2Nrcyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwltZW1zZXQocmVjLmluZF9ibG9ja3MsIDAsIHJlYy5tYXhfaW5kX2Jsb2NrcyAqIHNpemVvZihibGtfdCkpOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZyZWMuYmxvY2tfYnVmKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisJbWVtc2V0KHJlYy5ibG9ja19idWYsIDAsIGZzLT5ibG9ja3NpemUpOworCXJlYy5lcnIgPSAwOworCisJLyoKKwkgKiBGaXJzdCBjbGVhciB0aGUgb2xkIGJhZCBibG9ja3MgKHdoaWxlIHNhdmluZyB0aGUgaW5kaXJlY3QgYmxvY2tzKQorCSAqLworCXJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlMihmcywgRVhUMl9CQURfSU5PLAorCQkJCSAgICAgICBCTE9DS19GTEFHX0RFUFRIX1RSQVZFUlNFLCAwLAorCQkJCSAgICAgICBjbGVhcl9iYWRfYmxvY2tfcHJvYywgJnJlYyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCWlmIChyZWMuZXJyKSB7CisJCXJldHZhbCA9IHJlYy5lcnI7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKgorCSAqIE5vdyBzZXQgdGhlIGJhZCBibG9ja3MhCisJICoKKwkgKiBGaXJzdCwgbWFyayB0aGUgYmFkIGJsb2NrcyBhcyB1c2VkLiAgVGhpcyBwcmV2ZW50cyBhIGJhZAorCSAqIGJsb2NrIGZyb20gYmVpbmcgdXNlZCBhcyBhbiBpbmRpcmVjdG8gYmxvY2sgZm9yIHRoZSBiYWQKKwkgKiBibG9jayBpbm9kZSAoISkuCisJICovCisJaWYgKGJiX2xpc3QpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfYmVnaW4oYmJfbGlzdCwKKwkJCQkJCQkgICAgICZyZWMuYmJfaXRlcik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJCXJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlMihmcywgRVhUMl9CQURfSU5PLAorCQkJCQkgICAgICAgQkxPQ0tfRkxBR19BUFBFTkQsIDAsCisJCQkJCSAgICAgICBzZXRfYmFkX2Jsb2NrX3Byb2MsICZyZWMpOworCQlleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9lbmQocmVjLmJiX2l0ZXIpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworCQlpZiAocmVjLmVycikgeworCQkJcmV0dmFsID0gcmVjLmVycjsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0KKworCS8qCisJICogVXBkYXRlIHRoZSBiYWQgYmxvY2sgaW5vZGUncyBtb2QgdGltZSBhbmQgYmxvY2sgY291bnQKKwkgKiBmaWVsZC4KKwkgKi8KKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgRVhUMl9CQURfSU5PLCAmaW5vZGUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKworCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX210aW1lID0gZnMtPm5vdyA/IGZzLT5ub3cgOiB0aW1lKDApOworCWlmICghaW5vZGUuaV9jdGltZSkKKwkJaW5vZGUuaV9jdGltZSA9IGZzLT5ub3cgPyBmcy0+bm93IDogdGltZSgwKTsKKwlleHQyZnNfaWJsa19zZXQoZnMsICZpbm9kZSwgcmVjLmJhZF9ibG9ja19jb3VudCk7CisJcmV0dmFsID0gZXh0MmZzX2lub2RlX3NpemVfc2V0KGZzLCAmaW5vZGUsCisJCQkJICAgICAgIHJlYy5iYWRfYmxvY2tfY291bnQgKiBmcy0+YmxvY2tzaXplKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisKKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoZnMsIEVYVDJfQkFEX0lOTywgJmlub2RlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisKK2NsZWFudXA6CisJZXh0MmZzX2ZyZWVfbWVtKCZyZWMuaW5kX2Jsb2Nrcyk7CisJZXh0MmZzX2ZyZWVfbWVtKCZyZWMuYmxvY2tfYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciB1cGRhdGVfYmJfaW5vZGUoKQorICoKKyAqIENsZWFyIHRoZSBiYWQgYmxvY2tzIGluIHRoZSBiYWQgYmxvY2sgaW5vZGUsIHdoaWxlIHNhdmluZyB0aGUKKyAqIGluZGlyZWN0IGJsb2Nrcy4KKyAqLworI2lmZGVmIF9fVFVSQk9DX18KKyAjcHJhZ21hIGFyZ3N1c2VkCisjZW5kaWYKK3N0YXRpYyBpbnQgY2xlYXJfYmFkX2Jsb2NrX3Byb2MoZXh0Ml9maWxzeXMgZnMsIGJsa190ICpibG9ja19uciwKKwkJCQllMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJCQlibGtfdCByZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCWludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQl2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHNldF9iYWRibG9ja19yZWNvcmQgKnJlYyA9IChzdHJ1Y3Qgc2V0X2JhZGJsb2NrX3JlY29yZCAqKQorCQlwcml2X2RhdGE7CisJZXJyY29kZV90CXJldHZhbDsKKwl1bnNpZ25lZCBsb25nIAlvbGRfc2l6ZTsKKworCWlmICghKmJsb2NrX25yKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIGJsb2NrIG51bWJlciBpcyBvdXRyYWdlb3VzLCBjbGVhciBpdCBhbmQgaWdub3JlIGl0LgorCSAqLworCWlmICgqYmxvY2tfbnIgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpIHx8CisJICAgICpibG9ja19uciA8IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSB7CisJCSpibG9ja19uciA9IDA7CisJCXJldHVybiBCTE9DS19DSEFOR0VEOworCX0KKworCWlmIChibG9ja2NudCA8IDApIHsKKwkJaWYgKHJlYy0+aW5kX2Jsb2Nrc19zaXplID49IHJlYy0+bWF4X2luZF9ibG9ja3MpIHsKKwkJCW9sZF9zaXplID0gcmVjLT5tYXhfaW5kX2Jsb2NrcyAqIHNpemVvZihibGtfdCk7CisJCQlyZWMtPm1heF9pbmRfYmxvY2tzICs9IDEwOworCQkJcmV0dmFsID0gZXh0MmZzX3Jlc2l6ZV9tZW0ob2xkX3NpemUsCisJCQkJICAgcmVjLT5tYXhfaW5kX2Jsb2NrcyAqIHNpemVvZihibGtfdCksCisJCQkJICAgJnJlYy0+aW5kX2Jsb2Nrcyk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJcmVjLT5tYXhfaW5kX2Jsb2NrcyAtPSAxMDsKKwkJCQlyZWMtPmVyciA9IHJldHZhbDsKKwkJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCQl9CisJCX0KKwkJcmVjLT5pbmRfYmxvY2tzW3JlYy0+aW5kX2Jsb2Nrc19zaXplKytdID0gKmJsb2NrX25yOworCX0KKworCS8qCisJICogTWFyayB0aGUgYmxvY2sgYXMgdW51c2VkLCBhbmQgdXBkYXRlIGFjY291bnRpbmcgaW5mb3JtYXRpb24KKwkgKi8KKwlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCAqYmxvY2tfbnIsIC0xKTsKKworCSpibG9ja19uciA9IDA7CisJcmV0dXJuIEJMT0NLX0NIQU5HRUQ7Cit9CisKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgdXBkYXRlX2JiX2lub2RlKCkKKyAqCisgKiBTZXQgdGhlIGJsb2NrIGxpc3QgaW4gdGhlIGJhZCBibG9jayBpbm9kZSwgdXNpbmcgdGhlIHN1cHBsaWVkIGJpdG1hcC4KKyAqLworI2lmZGVmIF9fVFVSQk9DX18KKyAjcHJhZ21hIGFyZ3N1c2VkCisjZW5kaWYKK3N0YXRpYyBpbnQgc2V0X2JhZF9ibG9ja19wcm9jKGV4dDJfZmlsc3lzIGZzLCBibGtfdCAqYmxvY2tfbnIsCisJCQkgICAgICBlMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJCSAgICAgIGJsa190IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHNldF9iYWRibG9ja19yZWNvcmQgKnJlYyA9IChzdHJ1Y3Qgc2V0X2JhZGJsb2NrX3JlY29yZCAqKQorCQlwcml2X2RhdGE7CisJZXJyY29kZV90CXJldHZhbDsKKwlibGtfdAkJYmxrOworCisJaWYgKGJsb2NrY250ID49IDApIHsKKwkJLyoKKwkJICogR2V0IHRoZSBuZXh0IGJhZCBibG9jay4KKwkJICovCisJCWlmICghZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGUocmVjLT5iYl9pdGVyLCAmYmxrKSkKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJcmVjLT5iYWRfYmxvY2tfY291bnQrKzsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBBbiBpbmRpcmVjdCBibG9jazsgZmV0Y2ggYSBibG9jayBmcm9tIHRoZQorCQkgKiBwcmV2aW91c2x5IHVzZWQgaW5kaXJlY3QgYmxvY2sgbGlzdC4gIFRoZSBibG9jaworCQkgKiBtb3N0IGJlIG5vdCBtYXJrZWQgYXMgdXNlZDsgaWYgc28sIGdldCBhbm90aGVyIG9uZS4KKwkJICogSWYgd2UgcnVuIG91dCBvZiByZXNlcnZlZCBpbmRpcmVjdCBibG9ja3MsIGFsbG9jYXRlCisJCSAqIGEgbmV3IG9uZS4KKwkJICovCisJcmV0cnk6CisJCWlmIChyZWMtPmluZF9ibG9ja3NfcHRyIDwgcmVjLT5pbmRfYmxvY2tzX3NpemUpIHsKKwkJCWJsayA9IHJlYy0+aW5kX2Jsb2Nrc1tyZWMtPmluZF9ibG9ja3NfcHRyKytdOworCQkJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoZnMtPmJsb2NrX21hcCwgYmxrKSkKKwkJCQlnb3RvIHJldHJ5OworCQl9IGVsc2UgeworCQkJcmV0dmFsID0gZXh0MmZzX25ld19ibG9jayhmcywgMCwgMCwgJmJsayk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJcmVjLT5lcnIgPSByZXR2YWw7CisJCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQkJfQorCQl9CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBibGssIDEsIHJlYy0+YmxvY2tfYnVmKTsKKwkJaWYgKHJldHZhbCkgeworCQkJcmVjLT5lcnIgPSByZXR2YWw7CisJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCX0KKwl9CisKKwkvKgorCSAqIFVwZGF0ZSBibG9jayBjb3VudHMKKwkgKi8KKwlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBibGssICsxKTsKKworCSpibG9ja19uciA9IGJsazsKKwlyZXR1cm4gQkxPQ0tfQ0hBTkdFRDsKK30KKworCisKKworCisKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvYml0bWFwcy5jIGIvbGliL2V4dDJmcy9iaXRtYXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQwMjE5MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvYml0bWFwcy5jCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICogYml0bWFwcy5jIC0tLSByb3V0aW5lcyB0byByZWFkLCB3cml0ZSwgYW5kIG1hbmlwdWxhdGUgdGhlIGlub2RlIGFuZAorICogYmxvY2sgYml0bWFwcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKyNpbmNsdWRlICJleHQyZnNQLmgiCisjaW5jbHVkZSAiYm1hcDY0LmgiCisKK3ZvaWQgZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwKQoreworCWV4dDJmc19mcmVlX2dlbmVyaWNfYm1hcChiaXRtYXApOworfQorCit2b2lkIGV4dDJmc19mcmVlX2Jsb2NrX2JpdG1hcChleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCkKK3sKKwlleHQyZnNfZnJlZV9nZW5lcmljX2JtYXAoYml0bWFwKTsKK30KKworZXJyY29kZV90IGV4dDJmc19jb3B5X2JpdG1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgc3JjLAorCQkJICAgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgKmRlc3QpCit7CisJcmV0dXJuIChleHQyZnNfY29weV9nZW5lcmljX2JtYXAoc3JjLCBkZXN0KSk7Cit9Cit2b2lkIGV4dDJmc19zZXRfYml0bWFwX3BhZGRpbmcoZXh0MmZzX2dlbmVyaWNfYml0bWFwIG1hcCkKK3sKKwlleHQyZnNfc2V0X2dlbmVyaWNfYm1hcF9wYWRkaW5nKG1hcCk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfYWxsb2NhdGVfaW5vZGVfYml0bWFwKGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpkZXNjciwKKwkJCQkgICAgICAgZXh0MmZzX2lub2RlX2JpdG1hcCAqcmV0KQoreworCV9fdTY0CQlzdGFydCwgZW5kLCByZWFsX2VuZDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwlmcy0+d3JpdGVfYml0bWFwcyA9IGV4dDJmc193cml0ZV9iaXRtYXBzOworCisJc3RhcnQgPSAxOworCWVuZCA9IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQ7CisJcmVhbF9lbmQgPSAoRVhUMl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zdXBlcikgKiBmcy0+Z3JvdXBfZGVzY19jb3VudCk7CisKKwkvKiBBcmUgd2UgcGVybWl0dGVkIHRvIHVzZSBuZXctc3R5bGUgYml0bWFwcz8gKi8KKwlpZiAoZnMtPmZsYWdzICYgRVhUMl9GTEFHXzY0QklUUykKKwkJcmV0dXJuIChleHQyZnNfYWxsb2NfZ2VuZXJpY19ibWFwKGZzLAorCQkJCUVYVDJfRVRfTUFHSUNfSU5PREVfQklUTUFQNjQsCisJCQkJZnMtPmRlZmF1bHRfYml0bWFwX3R5cGUsCisJCQkJc3RhcnQsIGVuZCwgcmVhbF9lbmQsIGRlc2NyLCByZXQpKTsKKworCS8qIE90aGVyd2lzZSwgY2hlY2sgdG8gc2VlIGlmIHRoZSBmaWxlIHN5c3RlbSBpcyBzbWFsbCBlbm91Z2gKKwkgKiB0byB1c2Ugb2xkLXN0eWxlIDMyLWJpdCBiaXRtYXBzICovCisJaWYgKChlbmQgPiB+MFUpIHx8IChyZWFsX2VuZCA+IH4wVSkpCisJCXJldHVybiBFWFQyX0VUX0NBTlRfVVNFX0xFR0FDWV9CSVRNQVBTOworCisJcmV0dXJuIChleHQyZnNfbWFrZV9nZW5lcmljX2JpdG1hcChFWFQyX0VUX01BR0lDX0lOT0RFX0JJVE1BUCwgZnMsCisJCQkJCSBzdGFydCwgZW5kLCByZWFsX2VuZCwKKwkJCQkJIGRlc2NyLCAwLAorCQkJCQkgKGV4dDJmc19nZW5lcmljX2JpdG1hcCAqKSByZXQpKTsKK30KKworZXJyY29kZV90IGV4dDJmc19hbGxvY2F0ZV9ibG9ja19iaXRtYXAoZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyLAorCQkJCSAgICAgICBleHQyZnNfYmxvY2tfYml0bWFwICpyZXQpCit7CisJX191NjQJCXN0YXJ0LCBlbmQsIHJlYWxfZW5kOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWZzLT53cml0ZV9iaXRtYXBzID0gZXh0MmZzX3dyaXRlX2JpdG1hcHM7CisKKwlzdGFydCA9IEVYVDJGU19CMkMoZnMsIGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKTsKKwllbmQgPSBFWFQyRlNfQjJDKGZzLCBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlciktMSk7CisJcmVhbF9lbmQgPSAoKF9fdTY0KSBFWFQyX0NMVVNURVJTX1BFUl9HUk9VUChmcy0+c3VwZXIpCisJCSAgICAqIChfX3U2NCkgZnMtPmdyb3VwX2Rlc2NfY291bnQpLTEgKyBzdGFydDsKKworCWlmIChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfNjRCSVRTKQorCQlyZXR1cm4gKGV4dDJmc19hbGxvY19nZW5lcmljX2JtYXAoZnMsCisJCQkJRVhUMl9FVF9NQUdJQ19CTE9DS19CSVRNQVA2NCwKKwkJCQlmcy0+ZGVmYXVsdF9iaXRtYXBfdHlwZSwKKwkJCQlzdGFydCwgZW5kLCByZWFsX2VuZCwgZGVzY3IsIHJldCkpOworCisJaWYgKChlbmQgPiB+MFUpIHx8IChyZWFsX2VuZCA+IH4wVSkpCisJCXJldHVybiBFWFQyX0VUX0NBTlRfVVNFX0xFR0FDWV9CSVRNQVBTOworCisJcmV0dXJuIChleHQyZnNfbWFrZV9nZW5lcmljX2JpdG1hcChFWFQyX0VUX01BR0lDX0JMT0NLX0JJVE1BUCwgZnMsCisJCQkJCSAgIHN0YXJ0LCBlbmQsIHJlYWxfZW5kLAorCQkJCQkgICBkZXNjciwgMCwKKwkJCQkJICAgKGV4dDJmc19nZW5lcmljX2JpdG1hcCAqKSByZXQpKTsKK30KKworLyoKKyAqIGV4dDJmc19hbGxvY2F0ZV9ibG9ja19iaXRtYXAoKSByZWFsbHkgYWxsb2NhdGVzIGEgcGVyLWNsdXN0ZXIKKyAqIGJpdG1hcCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhCisgKiBibG9jayBiaXRtYXAgd2hpY2ggaXMgdHJ1bHkgcGVyLWJsb2NrLCBldmVuIGlmIGNsdXN0ZXJzL2JpZ2FsbG9jCisgKiBhcmUgZW5hYmxlZC4gIG1rZTJmcyBhbmQgZTJmc2NrIG5lZWQgdGhpcyBmb3IgdHJhY2tpbmcgdGhlCisgKiBhbGxvY2F0aW9uIG9mIHRoZSBmaWxlIHN5c3RlbSBtZXRhZGF0YSBibG9ja3MuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfYWxsb2NhdGVfc3ViY2x1c3Rlcl9iaXRtYXAoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgICBjb25zdCBjaGFyICpkZXNjciwKKwkJCQkJICAgIGV4dDJmc19ibG9ja19iaXRtYXAgKnJldCkKK3sKKwlfX3U2NAkJCXN0YXJ0LCBlbmQsIHJlYWxfZW5kOworCWV4dDJmc19nZW5lcmljX2JpdG1hcAlibWFwOworCWVycmNvZGVfdAkJcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWZzLT53cml0ZV9iaXRtYXBzID0gZXh0MmZzX3dyaXRlX2JpdG1hcHM7CisKKwlpZiAoIWZzLT5jbHVzdGVyX3JhdGlvX2JpdHMpCisJCXJldHVybiBleHQyZnNfYWxsb2NhdGVfYmxvY2tfYml0bWFwKGZzLCBkZXNjciwgcmV0KTsKKworCWlmICgoZnMtPmZsYWdzICYgRVhUMl9GTEFHXzY0QklUUykgPT0gMCkKKwkJcmV0dXJuIEVYVDJfRVRfQ0FOVF9VU0VfTEVHQUNZX0JJVE1BUFM7CisKKwlzdGFydCA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCWVuZCA9IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKS0xOworCXJlYWxfZW5kID0gKChfX3U2NCkgRVhUMl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zdXBlcikKKwkJICAgICogKF9fdTY0KSBmcy0+Z3JvdXBfZGVzY19jb3VudCktMSArIHN0YXJ0OworCisJcmV0dmFsID0gZXh0MmZzX2FsbG9jX2dlbmVyaWNfYm1hcChmcywgRVhUMl9FVF9NQUdJQ19CTE9DS19CSVRNQVA2NCwKKwkJCQkJICAgZnMtPmRlZmF1bHRfYml0bWFwX3R5cGUsIHN0YXJ0LAorCQkJCQkgICBlbmQsIHJlYWxfZW5kLCBkZXNjciwgJmJtYXApOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJYm1hcC0+Y2x1c3Rlcl9iaXRzID0gMDsKKwkqcmV0ID0gYm1hcDsKKwlyZXR1cm4gMDsKK30KKworaW50IGV4dDJmc19nZXRfYml0bWFwX2dyYW51bGFyaXR5KGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwKQoreworCWV4dDJmc19nZW5lcmljX2JpdG1hcCBibWFwID0gYml0bWFwOworCisJaWYgKCFFWFQyRlNfSVNfNjRfQklUTUFQKGJtYXApKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBibWFwLT5jbHVzdGVyX2JpdHM7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZnVkZ2VfaW5vZGVfYml0bWFwX2VuZChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkJZXh0Ml9pbm9fdCBlbmQsIGV4dDJfaW5vX3QgKm9lbmQpCit7CisJX191NjQgdG1wX29lbmQ7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGV4dDJmc19mdWRnZV9nZW5lcmljX2JtYXBfZW5kKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCwKKwkJCQkJICAgICAgIEVYVDJfRVRfRlVER0VfSU5PREVfQklUTUFQX0VORCwKKwkJCQkJICAgICAgIGVuZCwgJnRtcF9vZW5kKTsKKwlpZiAob2VuZCkKKwkJKm9lbmQgPSB0bXBfb2VuZDsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2Z1ZGdlX2Jsb2NrX2JpdG1hcF9lbmQoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCWJsa190IGVuZCwgYmxrX3QgKm9lbmQpCit7CisJcmV0dXJuIChleHQyZnNfZnVkZ2VfZ2VuZXJpY19iaXRtYXBfZW5kKGJpdG1hcCwKKwkJCQkJCUVYVDJfRVRfTUFHSUNfQkxPQ0tfQklUTUFQLAorCQkJCQkJRVhUMl9FVF9GVURHRV9CTE9DS19CSVRNQVBfRU5ELAorCQkJCQkJZW5kLCBvZW5kKSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZnVkZ2VfYmxvY2tfYml0bWFwX2VuZDIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSBibGs2NF90IGVuZCwgYmxrNjRfdCAqb2VuZCkKK3sKKwlyZXR1cm4gKGV4dDJmc19mdWRnZV9nZW5lcmljX2JtYXBfZW5kKGJpdG1hcCwKKwkJCQkJICAgICAgRVhUMl9FVF9GVURHRV9CTE9DS19CSVRNQVBfRU5ELAorCQkJCQkgICAgICBlbmQsIG9lbmQpKTsKK30KKwordm9pZCBleHQyZnNfY2xlYXJfaW5vZGVfYml0bWFwKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwKQoreworCWV4dDJmc19jbGVhcl9nZW5lcmljX2JtYXAoYml0bWFwKTsKK30KKwordm9pZCBleHQyZnNfY2xlYXJfYmxvY2tfYml0bWFwKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwKQoreworCWV4dDJmc19jbGVhcl9nZW5lcmljX2JtYXAoYml0bWFwKTsKK30KKworZXJyY29kZV90IGV4dDJmc19yZXNpemVfaW5vZGVfYml0bWFwKF9fdTMyIG5ld19lbmQsIF9fdTMyIG5ld19yZWFsX2VuZCwKKwkJCQkgICAgIGV4dDJmc19pbm9kZV9iaXRtYXAgYm1hcCkKK3sKKwlyZXR1cm4gKGV4dDJmc19yZXNpemVfZ2VuZXJpY19iaXRtYXAoRVhUMl9FVF9NQUdJQ19JTk9ERV9CSVRNQVAsCisJCQkJCSAgICAgbmV3X2VuZCwgbmV3X3JlYWxfZW5kLCBibWFwKSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfcmVzaXplX2lub2RlX2JpdG1hcDIoX191NjQgbmV3X2VuZCwgX191NjQgbmV3X3JlYWxfZW5kLAorCQkJCSAgICAgIGV4dDJmc19pbm9kZV9iaXRtYXAgYm1hcCkKK3sKKwlyZXR1cm4gKGV4dDJmc19yZXNpemVfZ2VuZXJpY19ibWFwKGJtYXAsIG5ld19lbmQsIG5ld19yZWFsX2VuZCkpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3Jlc2l6ZV9ibG9ja19iaXRtYXAoX191MzIgbmV3X2VuZCwgX191MzIgbmV3X3JlYWxfZW5kLAorCQkJCSAgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwKQoreworCXJldHVybiAoZXh0MmZzX3Jlc2l6ZV9nZW5lcmljX2JpdG1hcChFWFQyX0VUX01BR0lDX0JMT0NLX0JJVE1BUCwKKwkJCQkJICAgICBuZXdfZW5kLCBuZXdfcmVhbF9lbmQsIGJtYXApKTsKK30KKworZXJyY29kZV90IGV4dDJmc19yZXNpemVfYmxvY2tfYml0bWFwMihfX3U2NCBuZXdfZW5kLCBfX3U2NCBuZXdfcmVhbF9lbmQsCisJCQkJICAgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwKQoreworCXJldHVybiAoZXh0MmZzX3Jlc2l6ZV9nZW5lcmljX2JtYXAoYm1hcCwgbmV3X2VuZCwgbmV3X3JlYWxfZW5kKSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfY29tcGFyZV9ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBibTEsCisJCQkJICAgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCBibTIpCit7CisJcmV0dXJuIChleHQyZnNfY29tcGFyZV9nZW5lcmljX2JtYXAoRVhUMl9FVF9ORVFfQkxPQ0tfQklUTUFQLAorCQkJCQkgICAgYm0xLCBibTIpKTsKK30KKworZXJyY29kZV90IGV4dDJmc19jb21wYXJlX2lub2RlX2JpdG1hcChleHQyZnNfaW5vZGVfYml0bWFwIGJtMSwKKwkJCQkgICAgICBleHQyZnNfaW5vZGVfYml0bWFwIGJtMikKK3sKKwlyZXR1cm4gKGV4dDJmc19jb21wYXJlX2dlbmVyaWNfYm1hcChFWFQyX0VUX05FUV9JTk9ERV9CSVRNQVAsCisJCQkJCSAgICBibTEsIGJtMikpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3NldF9pbm9kZV9iaXRtYXBfcmFuZ2UoZXh0MmZzX2lub2RlX2JpdG1hcCBibWFwLAorCQkJCQlleHQyX2lub190IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbnVtLAorCQkJCQl2b2lkICppbikKK3sKKwlyZXR1cm4gKGV4dDJmc19zZXRfZ2VuZXJpY19iaXRtYXBfcmFuZ2UoYm1hcCwKKwkJCQkJCUVYVDJfRVRfTUFHSUNfSU5PREVfQklUTUFQLAorCQkJCQkJc3RhcnQsIG51bSwgaW4pKTsKK30KKworZXJyY29kZV90IGV4dDJmc19zZXRfaW5vZGVfYml0bWFwX3JhbmdlMihleHQyZnNfaW5vZGVfYml0bWFwIGJtYXAsCisJCQkJCSBfX3U2NCBzdGFydCwgc2l6ZV90IG51bSwKKwkJCQkJIHZvaWQgKmluKQoreworCXJldHVybiAoZXh0MmZzX3NldF9nZW5lcmljX2JtYXBfcmFuZ2UoYm1hcCwgc3RhcnQsIG51bSwgaW4pKTsKK30KKworZXJyY29kZV90IGV4dDJmc19nZXRfaW5vZGVfYml0bWFwX3JhbmdlKGV4dDJmc19pbm9kZV9iaXRtYXAgYm1hcCwKKwkJCQkJZXh0Ml9pbm9fdCBzdGFydCwgdW5zaWduZWQgaW50IG51bSwKKwkJCQkJdm9pZCAqb3V0KQoreworCXJldHVybiAoZXh0MmZzX2dldF9nZW5lcmljX2JpdG1hcF9yYW5nZShibWFwLAorCQkJCQkJRVhUMl9FVF9NQUdJQ19JTk9ERV9CSVRNQVAsCisJCQkJCQlzdGFydCwgbnVtLCBvdXQpKTsKK30KKworZXJyY29kZV90IGV4dDJmc19nZXRfaW5vZGVfYml0bWFwX3JhbmdlMihleHQyZnNfaW5vZGVfYml0bWFwIGJtYXAsCisJCQkJCSBfX3U2NCBzdGFydCwgc2l6ZV90IG51bSwKKwkJCQkJIHZvaWQgKm91dCkKK3sKKwlyZXR1cm4gKGV4dDJmc19nZXRfZ2VuZXJpY19ibWFwX3JhbmdlKGJtYXAsIHN0YXJ0LCBudW0sIG91dCkpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3NldF9ibG9ja19iaXRtYXBfcmFuZ2UoZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwLAorCQkJCQlibGtfdCBzdGFydCwgdW5zaWduZWQgaW50IG51bSwKKwkJCQkJdm9pZCAqaW4pCit7CisJcmV0dXJuIChleHQyZnNfc2V0X2dlbmVyaWNfYml0bWFwX3JhbmdlKGJtYXAsCisJCQkJCQlFWFQyX0VUX01BR0lDX0JMT0NLX0JJVE1BUCwKKwkJCQkJCXN0YXJ0LCBudW0sIGluKSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfc2V0X2Jsb2NrX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwLAorCQkJCQkgYmxrNjRfdCBzdGFydCwgc2l6ZV90IG51bSwKKwkJCQkJIHZvaWQgKmluKQoreworCXJldHVybiAoZXh0MmZzX3NldF9nZW5lcmljX2JtYXBfcmFuZ2UoYm1hcCwgc3RhcnQsIG51bSwgaW4pKTsKK30KKworZXJyY29kZV90IGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3JhbmdlKGV4dDJmc19ibG9ja19iaXRtYXAgYm1hcCwKKwkJCQkJYmxrX3Qgc3RhcnQsIHVuc2lnbmVkIGludCBudW0sCisJCQkJCXZvaWQgKm91dCkKK3sKKwlyZXR1cm4gKGV4dDJmc19nZXRfZ2VuZXJpY19iaXRtYXBfcmFuZ2UoYm1hcCwKKwkJCQkJCUVYVDJfRVRfTUFHSUNfQkxPQ0tfQklUTUFQLAorCQkJCQkJc3RhcnQsIG51bSwgb3V0KSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwLAorCQkJCQkgYmxrNjRfdCBzdGFydCwgc2l6ZV90IG51bSwKKwkJCQkJIHZvaWQgKm91dCkKK3sKKwlyZXR1cm4gKGV4dDJmc19nZXRfZ2VuZXJpY19ibWFwX3JhbmdlKGJtYXAsIHN0YXJ0LCBudW0sIG91dCkpOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9iaXRvcHMuYyBiL2xpYi9leHQyZnMvYml0b3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0YzA1YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvYml0b3BzLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBiaXRvcHMuYyAtLS0gQml0bWFwIGZyb2JiaW5nIGNvZGUuICBTZWUgYml0b3BzLmggZm9yIHRoZSBpbmxpbmVkCisgKiAJcm91dGluZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworI2lmbmRlZiBfRVhUMl9IQVZFX0FTTV9CSVRPUFNfCisKKy8qCisgKiBGb3IgdGhlIGJlbmVmaXQgb2YgdGhvc2Ugd2hvIGFyZSB0cnlpbmcgdG8gcG9ydCBMaW51eCB0byBhbm90aGVyCisgKiBhcmNoaXRlY3R1cmUsIGhlcmUgYXJlIHNvbWUgQy1sYW5ndWFnZSBlcXVpdmFsZW50cy4gIFlvdSBzaG91bGQKKyAqIHJlY29kZSB0aGVzZSBpbiB0aGUgbmF0aXZlIGFzc21lYmx5IGxhbmd1YWdlLCBpZiBhdCBhbGwgcG9zc2libGUuCisgKgorICogQyBsYW5ndWFnZSBlcXVpdmFsZW50cyB3cml0dGVuIGJ5IFRoZW9kb3JlIFRzJ28sIDkvMjYvOTIuCisgKiBNb2RpZmllZCBieSBQZXRlIEEuIFphaXRjZXYgNy8xNC85NSB0byBiZSBwb3J0YWJsZSB0byBiaWcgZW5kaWFuCisgKiBzeXN0ZW1zLCBhcyB3ZWxsIGFzIG5vbi0zMiBiaXQgc3lzdGVtcy4KKyAqLworCitpbnQgZXh0MmZzX3NldF9iaXQodW5zaWduZWQgaW50IG5yLHZvaWQgKiBhZGRyKQoreworCWludAkJbWFzaywgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIJKkFERFIgPSAodW5zaWduZWQgY2hhciAqKSBhZGRyOworCisJQUREUiArPSBuciA+PiAzOworCW1hc2sgPSAxIDw8IChuciAmIDB4MDcpOworCXJldHZhbCA9IG1hc2sgJiAqQUREUjsKKwkqQUREUiB8PSBtYXNrOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBleHQyZnNfY2xlYXJfYml0KHVuc2lnbmVkIGludCBuciwgdm9pZCAqIGFkZHIpCit7CisJaW50CQltYXNrLCByZXR2YWw7CisJdW5zaWduZWQgY2hhcgkqQUREUiA9ICh1bnNpZ25lZCBjaGFyICopIGFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJbWFzayA9IDEgPDwgKG5yICYgMHgwNyk7CisJcmV0dmFsID0gbWFzayAmICpBRERSOworCSpBRERSICY9IH5tYXNrOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBleHQyZnNfdGVzdF9iaXQodW5zaWduZWQgaW50IG5yLCBjb25zdCB2b2lkICogYWRkcikKK3sKKwlpbnQJCQltYXNrOworCWNvbnN0IHVuc2lnbmVkIGNoYXIJKkFERFIgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBhZGRyOworCisJQUREUiArPSBuciA+PiAzOworCW1hc2sgPSAxIDw8IChuciAmIDB4MDcpOworCXJldHVybiAobWFzayAmICpBRERSKTsKK30KKworI2VuZGlmCS8qICFfRVhUMl9IQVZFX0FTTV9CSVRPUFNfICovCisKK3ZvaWQgZXh0MmZzX3dhcm5fYml0bWFwKGVycmNvZGVfdCBlcnJjb2RlLCB1bnNpZ25lZCBsb25nIGFyZywKKwkJCWNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKQoreworI2lmbmRlZiBPTUlUX0NPTV9FUlIKKwlpZiAoZGVzY3JpcHRpb24pCisJCWNvbV9lcnIoMCwgZXJyY29kZSwgIiMlbHUgZm9yICVzIiwgYXJnLCBkZXNjcmlwdGlvbik7CisJZWxzZQorCQljb21fZXJyKDAsIGVycmNvZGUsICIjJWx1IiwgYXJnKTsKKyNlbmRpZgorfQorCisvKgorICogQy1vbmx5IDY0IGJpdCBvcHMuCisgKi8KKworaW50IGV4dDJmc19zZXRfYml0NjQoX191NjQgbnIsIHZvaWQgKiBhZGRyKQoreworCWludAkJbWFzaywgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIJKkFERFIgPSAodW5zaWduZWQgY2hhciAqKSBhZGRyOworCisJQUREUiArPSBuciA+PiAzOworCW1hc2sgPSAxIDw8IChuciAmIDB4MDcpOworCXJldHZhbCA9IG1hc2sgJiAqQUREUjsKKwkqQUREUiB8PSBtYXNrOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBleHQyZnNfY2xlYXJfYml0NjQoX191NjQgbnIsIHZvaWQgKiBhZGRyKQoreworCWludAkJbWFzaywgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIJKkFERFIgPSAodW5zaWduZWQgY2hhciAqKSBhZGRyOworCisJQUREUiArPSBuciA+PiAzOworCW1hc2sgPSAxIDw8IChuciAmIDB4MDcpOworCXJldHZhbCA9IG1hc2sgJiAqQUREUjsKKwkqQUREUiAmPSB+bWFzazsKKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQgZXh0MmZzX3Rlc3RfYml0NjQoX191NjQgbnIsIGNvbnN0IHZvaWQgKiBhZGRyKQoreworCWludAkJCW1hc2s7CisJY29uc3QgdW5zaWduZWQgY2hhcgkqQUREUiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIGFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJbWFzayA9IDEgPDwgKG5yICYgMHgwNyk7CisJcmV0dXJuIChtYXNrICYgKkFERFIpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBvcGNvdW50OCh1bnNpZ25lZCBpbnQgdykKK3sKKwl1bnNpZ25lZCBpbnQgcmVzID0gdyAtICgodyA+PiAxKSAmIDB4NTUpOworCXJlcyA9IChyZXMgJiAweDMzKSArICgocmVzID4+IDIpICYgMHgzMyk7CisJcmV0dXJuIChyZXMgKyAocmVzID4+IDQpKSAmIDB4MEY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG9wY291bnQzMih1bnNpZ25lZCBpbnQgdykKK3sKKwl1bnNpZ25lZCBpbnQgcmVzID0gdyAtICgodyA+PiAxKSAmIDB4NTU1NTU1NTUpOworCXJlcyA9IChyZXMgJiAweDMzMzMzMzMzKSArICgocmVzID4+IDIpICYgMHgzMzMzMzMzMyk7CisJcmVzID0gKHJlcyArIChyZXMgPj4gNCkpICYgMHgwRjBGMEYwRjsKKwlyZXMgPSByZXMgKyAocmVzID4+IDgpOworCXJldHVybiAocmVzICsgKHJlcyA+PiAxNikpICYgMHgwMDAwMDBGRjsKK30KKwordW5zaWduZWQgaW50IGV4dDJmc19iaXRjb3VudChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwID0gYWRkcjsKKwljb25zdCBfX3UzMiAqcDsKKwl1bnNpZ25lZCBpbnQgcmVzID0gMDsKKworCXdoaWxlICgoKCgodW5zaWduZWQgbG9uZykgY3ApICYgMykgIT0gMCkgJiYgKG5ieXRlcyA+IDApKSB7CisJCXJlcyArPSBwb3Bjb3VudDgoKmNwKyspOworCQluYnl0ZXMtLTsKKwl9CisJcCA9IChjb25zdCBfX3UzMiAqKSBjcDsKKworCXdoaWxlIChuYnl0ZXMgPiA0KSB7CisJCXJlcyArPSBwb3Bjb3VudDMyKCpwKyspOworCQluYnl0ZXMgLT0gNDsKKwl9CisJY3AgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwOworCisJd2hpbGUgKG5ieXRlcyA+IDApIHsKKwkJcmVzICs9IHBvcGNvdW50OCgqY3ArKyk7CisJCW5ieXRlcy0tOworCX0KKwlyZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9iaXRvcHMuaCBiL2xpYi9leHQyZnMvYml0b3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZiN2RjNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvYml0b3BzLmgKQEAgLTAsMCArMSw3MDEgQEAKKy8qCisgKiBiaXRvcHMuaCAtLS0gQml0bWFwIGZyb2JiaW5nIGNvZGUuICBUaGUgYnl0ZSBzd2FwcGluZyByb3V0aW5lcyBhcmUKKyAqIAlhbHNvIGluY2x1ZGVkIGhlcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIGV4dDJmc19jcHVfdG9fbGU2NCh4KSBleHQyZnNfc3dhYjY0KCh4KSkKKyNkZWZpbmUgZXh0MmZzX2xlNjRfdG9fY3B1KHgpIGV4dDJmc19zd2FiNjQoKHgpKQorI2RlZmluZSBleHQyZnNfY3B1X3RvX2xlMzIoeCkgZXh0MmZzX3N3YWIzMigoeCkpCisjZGVmaW5lIGV4dDJmc19sZTMyX3RvX2NwdSh4KSBleHQyZnNfc3dhYjMyKCh4KSkKKyNkZWZpbmUgZXh0MmZzX2NwdV90b19sZTE2KHgpIGV4dDJmc19zd2FiMTYoKHgpKQorI2RlZmluZSBleHQyZnNfbGUxNl90b19jcHUoeCkgZXh0MmZzX3N3YWIxNigoeCkpCisjZGVmaW5lIGV4dDJmc19jcHVfdG9fYmU2NCh4KSAoKF9fdTY0KSh4KSkKKyNkZWZpbmUgZXh0MmZzX2JlNjRfdG9fY3B1KHgpICgoX191NjQpKHgpKQorI2RlZmluZSBleHQyZnNfY3B1X3RvX2JlMzIoeCkgKChfX3UzMikoeCkpCisjZGVmaW5lIGV4dDJmc19iZTMyX3RvX2NwdSh4KSAoKF9fdTMyKSh4KSkKKyNkZWZpbmUgZXh0MmZzX2NwdV90b19iZTE2KHgpICgoX191MTYpKHgpKQorI2RlZmluZSBleHQyZnNfYmUxNl90b19jcHUoeCkgKChfX3UxNikoeCkpCisjZWxzZQorI2RlZmluZSBleHQyZnNfY3B1X3RvX2xlNjQoeCkgKChfX3U2NCkoeCkpCisjZGVmaW5lIGV4dDJmc19sZTY0X3RvX2NwdSh4KSAoKF9fdTY0KSh4KSkKKyNkZWZpbmUgZXh0MmZzX2NwdV90b19sZTMyKHgpICgoX191MzIpKHgpKQorI2RlZmluZSBleHQyZnNfbGUzMl90b19jcHUoeCkgKChfX3UzMikoeCkpCisjZGVmaW5lIGV4dDJmc19jcHVfdG9fbGUxNih4KSAoKF9fdTE2KSh4KSkKKyNkZWZpbmUgZXh0MmZzX2xlMTZfdG9fY3B1KHgpICgoX191MTYpKHgpKQorI2RlZmluZSBleHQyZnNfY3B1X3RvX2JlNjQoeCkgZXh0MmZzX3N3YWI2NCgoeCkpCisjZGVmaW5lIGV4dDJmc19iZTY0X3RvX2NwdSh4KSBleHQyZnNfc3dhYjY0KCh4KSkKKyNkZWZpbmUgZXh0MmZzX2NwdV90b19iZTMyKHgpIGV4dDJmc19zd2FiMzIoKHgpKQorI2RlZmluZSBleHQyZnNfYmUzMl90b19jcHUoeCkgZXh0MmZzX3N3YWIzMigoeCkpCisjZGVmaW5lIGV4dDJmc19jcHVfdG9fYmUxNih4KSBleHQyZnNfc3dhYjE2KCh4KSkKKyNkZWZpbmUgZXh0MmZzX2JlMTZfdG9fY3B1KHgpIGV4dDJmc19zd2FiMTYoKHgpKQorI2VuZGlmCisKKy8qCisgKiBFWFQyRlMgYml0bWFwIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4KKyAqLworCisvKiBTdXBwb3J0IGZvciBzZW5kaW5nIHdhcm5pbmcgbWVzc2FnZXMgZnJvbSB0aGUgaW5saW5lIHN1YnJvdXRpbmVzICovCitleHRlcm4gY29uc3QgY2hhciAqZXh0MmZzX2Jsb2NrX3N0cmluZzsKK2V4dGVybiBjb25zdCBjaGFyICpleHQyZnNfaW5vZGVfc3RyaW5nOworZXh0ZXJuIGNvbnN0IGNoYXIgKmV4dDJmc19tYXJrX3N0cmluZzsKK2V4dGVybiBjb25zdCBjaGFyICpleHQyZnNfdW5tYXJrX3N0cmluZzsKK2V4dGVybiBjb25zdCBjaGFyICpleHQyZnNfdGVzdF9zdHJpbmc7CitleHRlcm4gdm9pZCBleHQyZnNfd2Fybl9iaXRtYXAoZXJyY29kZV90IGVycmNvZGUsIHVuc2lnbmVkIGxvbmcgYXJnLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKTsKK2V4dGVybiB2b2lkIGV4dDJmc193YXJuX2JpdG1hcDIoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQlpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhcmcpOworCisjaWZkZWYgTk9fSU5MSU5FX0ZVTkNTCitleHRlcm4gdm9pZCBleHQyZnNfZmFzdF9zZXRfYml0KHVuc2lnbmVkIGludCBucix2b2lkICogYWRkcik7CitleHRlcm4gdm9pZCBleHQyZnNfZmFzdF9jbGVhcl9iaXQodW5zaWduZWQgaW50IG5yLCB2b2lkICogYWRkcik7CitleHRlcm4gdm9pZCBleHQyZnNfZmFzdF9zZXRfYml0NjQoX191NjQgbnIsdm9pZCAqIGFkZHIpOworZXh0ZXJuIHZvaWQgZXh0MmZzX2Zhc3RfY2xlYXJfYml0NjQoX191NjQgbnIsIHZvaWQgKiBhZGRyKTsKK2V4dGVybiBfX3UxNiBleHQyZnNfc3dhYjE2KF9fdTE2IHZhbCk7CitleHRlcm4gX191MzIgZXh0MmZzX3N3YWIzMihfX3UzMiB2YWwpOworZXh0ZXJuIF9fdTY0IGV4dDJmc19zd2FiNjQoX191NjQgdmFsKTsKKworZXh0ZXJuIGludCBleHQyZnNfbWFya19ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsIGJsa190IGJsb2NrKTsKK2V4dGVybiBpbnQgZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgICAgIGJsa190IGJsb2NrKTsKK2V4dGVybiBpbnQgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLCBibGtfdCBibG9jayk7CisKK2V4dGVybiBpbnQgZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLCBleHQyX2lub190IGlub2RlKTsKK2V4dGVybiBpbnQgZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgICAgIGV4dDJfaW5vX3QgaW5vZGUpOworZXh0ZXJuIGludCBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsIGV4dDJfaW5vX3QgaW5vZGUpOworCitleHRlcm4gdm9pZCBleHQyZnNfZmFzdF9tYXJrX2Jsb2NrX2JpdG1hcChleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICBibGtfdCBibG9jayk7CitleHRlcm4gdm9pZCBleHQyZnNfZmFzdF91bm1hcmtfYmxvY2tfYml0bWFwKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgYmxrX3QgYmxvY2spOworZXh0ZXJuIGludCBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcChleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJIGJsa190IGJsb2NrKTsKKworZXh0ZXJuIHZvaWQgZXh0MmZzX2Zhc3RfbWFya19pbm9kZV9iaXRtYXAoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgZXh0Ml9pbm9fdCBpbm9kZSk7CitleHRlcm4gdm9pZCBleHQyZnNfZmFzdF91bm1hcmtfaW5vZGVfYml0bWFwKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgZXh0Ml9pbm9fdCBpbm9kZSk7CitleHRlcm4gaW50IGV4dDJmc19mYXN0X3Rlc3RfaW5vZGVfYml0bWFwKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCQkgZXh0Ml9pbm9fdCBpbm9kZSk7CitleHRlcm4gYmxrX3QgZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfc3RhcnQoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXApOworZXh0ZXJuIGV4dDJfaW5vX3QgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfc3RhcnQoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXApOworZXh0ZXJuIGJsa190IGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX2VuZChleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCk7CitleHRlcm4gZXh0Ml9pbm9fdCBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9lbmQoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXApOworCitleHRlcm4gdm9pZCBleHQyZnNfZmFzdF9tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZShleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJCWJsa190IGJsb2NrLCBpbnQgbnVtKTsKK2V4dGVybiB2b2lkIGV4dDJmc19mYXN0X3VubWFya19ibG9ja19iaXRtYXBfcmFuZ2UoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkgIGJsa190IGJsb2NrLCBpbnQgbnVtKTsKK2V4dGVybiBpbnQgZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2UoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgICAgICBibGtfdCBibG9jaywgaW50IG51bSk7CisjZW5kaWYKKworLyogVGhlc2UgZnVuY3Rpb25zIHJvdXRpbmVzIG1vdmVkIHRvIGdlbl9iaXRtYXAuYyAqLworZXh0ZXJuIHZvaWQgZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwX3JhbmdlKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgICBibGtfdCBibG9jaywgaW50IG51bSk7CitleHRlcm4gdm9pZCBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZShleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgICBibGtfdCBibG9jaywgaW50IG51bSk7CitleHRlcm4gaW50IGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZShleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICBibGtfdCBibG9jaywgaW50IG51bSk7CitleHRlcm4gaW50IGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcF9yYW5nZShleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkJICBpbm9fdCBpbm9kZSwgaW50IG51bSk7CitleHRlcm4gaW50IGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJCSBfX3UzMiBiaXRubyk7CitleHRlcm4gaW50IGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgYmxrX3QgYml0bm8pOworZXh0ZXJuIGludCBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgIGJsa190IGJpdG5vKTsKK2V4dGVybiBpbnQgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwX3JhbmdlKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgIGJsa190IGJsb2NrLCBpbnQgbnVtKTsKK2V4dGVybiB2b2lkIGV4dDJmc19zZXRfYml0bWFwX3BhZGRpbmcoZXh0MmZzX2dlbmVyaWNfYml0bWFwIG1hcCk7CitleHRlcm4gX191MzIgZXh0MmZzX2dldF9nZW5lcmljX2JpdG1hcF9zdGFydChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKTsKK2V4dGVybiBfX3UzMiBleHQyZnNfZ2V0X2dlbmVyaWNfYml0bWFwX2VuZChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKTsKKworLyogNjQtYml0IHZlcnNpb25zICovCisKKyNpZmRlZiBOT19JTkxJTkVfRlVOQ1MKK2V4dGVybiBpbnQgZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgIGJsazY0X3QgYmxvY2spOworZXh0ZXJuIGludCBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcDIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgICAgIGJsazY0X3QgYmxvY2spOworZXh0ZXJuIGludCBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgYmxrNjRfdCBibG9jayk7CisKK2V4dGVybiBpbnQgZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgIGV4dDJfaW5vX3QgaW5vZGUpOworZXh0ZXJuIGludCBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcDIoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgICAgIGV4dDJfaW5vX3QgaW5vZGUpOworZXh0ZXJuIGludCBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgZXh0Ml9pbm9fdCBpbm9kZSk7CisKK2V4dGVybiB2b2lkIGV4dDJmc19mYXN0X21hcmtfYmxvY2tfYml0bWFwMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgYmxrNjRfdCBibG9jayk7CitleHRlcm4gdm9pZCBleHQyZnNfZmFzdF91bm1hcmtfYmxvY2tfYml0bWFwMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgICBibGs2NF90IGJsb2NrKTsKK2V4dGVybiBpbnQgZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXAyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgIGJsazY0X3QgYmxvY2spOworCitleHRlcm4gdm9pZCBleHQyZnNfZmFzdF9tYXJrX2lub2RlX2JpdG1hcDIoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgIGV4dDJfaW5vX3QgaW5vZGUpOworZXh0ZXJuIHZvaWQgZXh0MmZzX2Zhc3RfdW5tYXJrX2lub2RlX2JpdG1hcDIoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgICBleHQyX2lub190IGlub2RlKTsKK2V4dGVybiBpbnQgZXh0MmZzX2Zhc3RfdGVzdF9pbm9kZV9iaXRtYXAyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCQkgIGV4dDJfaW5vX3QgaW5vZGUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmluZF9maXJzdF96ZXJvX2Jsb2NrX2JpdG1hcDIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkgICAgICBibGs2NF90IHN0YXJ0LAorCQkJCQkJICAgICAgYmxrNjRfdCBlbmQsCisJCQkJCQkgICAgICBibGs2NF90ICpvdXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmluZF9maXJzdF96ZXJvX2lub2RlX2JpdG1hcDIoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkgICAgICBleHQyX2lub190IHN0YXJ0LAorCQkJCQkJICAgICAgZXh0Ml9pbm9fdCBlbmQsCisJCQkJCQkgICAgICBleHQyX2lub190ICpvdXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmluZF9maXJzdF9zZXRfYmxvY2tfYml0bWFwMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJCSAgICAgYmxrNjRfdCBzdGFydCwKKwkJCQkJCSAgICAgYmxrNjRfdCBlbmQsCisJCQkJCQkgICAgIGJsazY0X3QgKm91dCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19maW5kX2ZpcnN0X3NldF9pbm9kZV9iaXRtYXAyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCQkJICAgICAgZXh0Ml9pbm9fdCBzdGFydCwKKwkJCQkJCSAgICAgIGV4dDJfaW5vX3QgZW5kLAorCQkJCQkJICAgICAgZXh0Ml9pbm9fdCAqb3V0KTsKK2V4dGVybiBibGs2NF90IGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3N0YXJ0MihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCk7CitleHRlcm4gZXh0Ml9pbm9fdCBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9zdGFydDIoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXApOworZXh0ZXJuIGJsazY0X3QgZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfZW5kMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCk7CitleHRlcm4gZXh0Ml9pbm9fdCBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9lbmQyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwKTsKKworZXh0ZXJuIGludCBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCQlibGs2NF90IGJsb2NrLAorCQkJCQkJdW5zaWduZWQgaW50IG51bSk7CitleHRlcm4gdm9pZCBleHQyZnNfZmFzdF9tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkgYmxrNjRfdCBibG9jaywKKwkJCQkJCSB1bnNpZ25lZCBpbnQgbnVtKTsKK2V4dGVybiB2b2lkIGV4dDJmc19mYXN0X3VubWFya19ibG9ja19iaXRtYXBfcmFuZ2UyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkJICAgYmxrNjRfdCBibG9jaywKKwkJCQkJCSAgIHVuc2lnbmVkIGludCBudW0pOworI2VuZGlmCisKKy8qIFRoZXNlIHJvdXRpbmVzIG1vdmVkIHRvIGdlbl9iaXRtYXA2NC5jICovCitleHRlcm4gdm9pZCBleHQyZnNfY2xlYXJfZ2VuZXJpY19ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXApOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY29tcGFyZV9nZW5lcmljX2JtYXAoZXJyY29kZV90IG5lcSwKKwkJCQkJICAgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm0xLAorCQkJCQkgICAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCBibTIpOworZXh0ZXJuIHZvaWQgZXh0MmZzX3NldF9nZW5lcmljX2JtYXBfcGFkZGluZyhleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCk7CitleHRlcm4gaW50IGV4dDJmc19tYXJrX2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCSAgICBibGs2NF90IGJpdG5vKTsKK2V4dGVybiBpbnQgZXh0MmZzX3VubWFya19nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgICBibGs2NF90IGJpdG5vKTsKK2V4dGVybiBpbnQgZXh0MmZzX3Rlc3RfZ2VuZXJpY19ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgIGJsazY0X3QgYml0bm8pOworZXh0ZXJuIGludCBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2UyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgICBibGs2NF90IGJsb2NrLCB1bnNpZ25lZCBpbnQgbnVtKTsKK2V4dGVybiBfX3U2NCBleHQyZnNfZ2V0X2dlbmVyaWNfYm1hcF9zdGFydChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKTsKK2V4dGVybiBfX3U2NCBleHQyZnNfZ2V0X2dlbmVyaWNfYm1hcF9lbmQoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCk7CitleHRlcm4gaW50IGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgIGJsazY0X3QgYmxvY2ssIHVuc2lnbmVkIGludCBudW0pOworZXh0ZXJuIHZvaWQgZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwX3JhbmdlMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgIGJsazY0X3QgYmxvY2ssIHVuc2lnbmVkIGludCBudW0pOworZXh0ZXJuIHZvaWQgZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXBfcmFuZ2UyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgICBibGs2NF90IGJsb2NrLCB1bnNpZ25lZCBpbnQgbnVtKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2ZpbmRfZmlyc3RfemVyb19nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJCSAgICAgX191NjQgc3RhcnQsIF9fdTY0IGVuZCwKKwkJCQkJCSAgICAgX191NjQgKm91dCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19maW5kX2ZpcnN0X3NldF9nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJCSAgICBfX3U2NCBzdGFydCwgX191NjQgZW5kLAorCQkJCQkJICAgIF9fdTY0ICpvdXQpOworCisvKgorICogVGhlIGlubGluZSByb3V0aW5lcyB0aGVtc2VsdmVzLi4uCisgKgorICogSWYgTk9fSU5MSU5FX0ZVTkNTIGlzIGRlZmluZWQsIHRoZW4gd2Ugd29uJ3QgdHJ5IHRvIGRvIGlubGluZQorICogZnVuY3Rpb25zIGF0IGFsbDsgdGhleSB3aWxsIGJlIGluY2x1ZGVkIGFzIG5vcm1hbCBmdW5jdGlvbnMgaW4KKyAqIGlubGluZS5jCisgKi8KKyNpZmRlZiBOT19JTkxJTkVfRlVOQ1MKKyNpZiAoZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19pNDg2X18pIHx8IFwKKwkJCSAgIGRlZmluZWQoX19pNTg2X18pKSkKKwkvKiBUaGlzIHByZXZlbnRzIGJpdG9wcy5jIGZyb20gdHJ5aW5nIHRvIGluY2x1ZGUgdGhlIEMgKi8KKwkvKiBmdW5jdGlvbiB2ZXJzaW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyAqLworI2RlZmluZSBfRVhUMl9IQVZFX0FTTV9CSVRPUFNfCisjZW5kaWYKKyNlbmRpZiAvKiBOT19JTkxJTkVfRlVOQ1MgKi8KKworI2lmIChkZWZpbmVkKElOQ0xVREVfSU5MSU5FX0ZVTkNTKSB8fCAhZGVmaW5lZChOT19JTkxJTkVfRlVOQ1MpKQorI2lmZGVmIElOQ0xVREVfSU5MSU5FX0ZVTkNTCisjaWYgKF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKyNkZWZpbmUgX0lOTElORV8gZXh0ZXJuIGlubGluZQorI2Vsc2UKKyNkZWZpbmUgX0lOTElORV8gaW5saW5lCisjZW5kaWYKKyNlbHNlIC8qICFJTkNMVURFX0lOTElORSBGVU5DUyAqLworI2lmIChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisjZGVmaW5lIF9JTkxJTkVfIGlubGluZQorI2Vsc2UgLyogbm90IEM5OSAqLworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9JTkxJTkVfIGV4dGVybiBfX2lubGluZV9fCisjZWxzZQkJCQkvKiBGb3IgV2F0Y29tIEMgKi8KKyNkZWZpbmUgX0lOTElORV8gZXh0ZXJuIGlubGluZQorI2VuZGlmIC8qIF9fR05VQ19fICovCisjZW5kaWYgLyogX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMICovCisjZW5kaWYgLyogSU5DTFVERV9JTkxJTkVfRlVOQ1MgKi8KKworLyoKKyAqIEZhc3QgYml0IHNldC9jbGVhciBmdW5jdGlvbnMgdGhhdCBkb2Vzbid0IG5lZWQgdG8gcmV0dXJuIHRoZQorICogcHJldmlvdXMgYml0IHZhbHVlLgorICovCisKK19JTkxJTkVfIHZvaWQgZXh0MmZzX2Zhc3Rfc2V0X2JpdCh1bnNpZ25lZCBpbnQgbnIsdm9pZCAqIGFkZHIpCit7CisJdW5zaWduZWQgY2hhcgkqQUREUiA9ICh1bnNpZ25lZCBjaGFyICopIGFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJKkFERFIgfD0gKHVuc2lnbmVkIGNoYXIpICgxIDw8IChuciAmIDB4MDcpKTsKK30KKworX0lOTElORV8gdm9pZCBleHQyZnNfZmFzdF9jbGVhcl9iaXQodW5zaWduZWQgaW50IG5yLCB2b2lkICogYWRkcikKK3sKKwl1bnNpZ25lZCBjaGFyCSpBRERSID0gKHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKKworCUFERFIgKz0gbnIgPj4gMzsKKwkqQUREUiAmPSAodW5zaWduZWQgY2hhcikgfigxIDw8IChuciAmIDB4MDcpKTsKK30KKworCitfSU5MSU5FXyB2b2lkIGV4dDJmc19mYXN0X3NldF9iaXQ2NChfX3U2NCBuciwgdm9pZCAqIGFkZHIpCit7CisJdW5zaWduZWQgY2hhcgkqQUREUiA9ICh1bnNpZ25lZCBjaGFyICopIGFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJKkFERFIgfD0gKHVuc2lnbmVkIGNoYXIpICgxIDw8IChuciAmIDB4MDcpKTsKK30KKworX0lOTElORV8gdm9pZCBleHQyZnNfZmFzdF9jbGVhcl9iaXQ2NChfX3U2NCBuciwgdm9pZCAqIGFkZHIpCit7CisJdW5zaWduZWQgY2hhcgkqQUREUiA9ICh1bnNpZ25lZCBjaGFyICopIGFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJKkFERFIgJj0gKHVuc2lnbmVkIGNoYXIpIH4oMSA8PCAobnIgJiAweDA3KSk7Cit9CisKKworI2lmICgoZGVmaW5lZCBfX0dOVUNfXykgJiYgIWRlZmluZWQoX0VYVDJfVVNFX0NfVkVSU0lPTlNfKSAmJiBcCisgICAgIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9faTQ4Nl9fKSB8fCBkZWZpbmVkKF9faTU4Nl9fKSkpCisKKyNkZWZpbmUgX0VYVDJfSEFWRV9BU01fQklUT1BTXworI2RlZmluZSBfRVhUMl9IQVZFX0FTTV9TV0FCXworCisvKgorICogVGhlc2UgYXJlIGRvbmUgYnkgaW5saW5lIGFzc2VtYmx5IGZvciBzcGVlZCByZWFzb25zLi4uLi4KKyAqCisgKiBBbGwgYml0b3BlcmF0aW9ucyByZXR1cm4gMCBpZiB0aGUgYml0IHdhcyBjbGVhcmVkIGJlZm9yZSB0aGUKKyAqIG9wZXJhdGlvbiBhbmQgIT0gMCBpZiBpdCB3YXMgbm90LiAgQml0IDAgaXMgdGhlIExTQiBvZiBhZGRyOyBiaXQgMzIKKyAqIGlzIHRoZSBMU0Igb2YgKGFkZHIrMSkuCisgKi8KKworLyoKKyAqIFNvbWUgaGFja3MgdG8gZGVmZWF0IGdjYyBvdmVyLW9wdGltaXphdGlvbnMuLgorICovCitzdHJ1Y3QgX19kdW1teV9oIHsgdW5zaWduZWQgbG9uZyBhWzEwMF07IH07CisjZGVmaW5lIEVYVDJGU19BRERSICgqKHN0cnVjdCBfX2R1bW15X2ggKikgYWRkcikKKyNkZWZpbmUgRVhUMkZTX0NPTlNUX0FERFIgKCooY29uc3Qgc3RydWN0IF9fZHVtbXlfaCAqKSBhZGRyKQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX3NldF9iaXQodW5zaWduZWQgaW50IG5yLCB2b2lkICogYWRkcikKK3sKKwlpbnQgb2xkYml0OworCisJYWRkciA9ICh2b2lkICopICgoKHVuc2lnbmVkIGNoYXIgKikgYWRkcikgKyAobnIgPj4gMykpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJidHNsICUyLCUxXG5cdHNiYmwgJTAsJTAiCisJCToiPXIiIChvbGRiaXQpLCIrbSIgKEVYVDJGU19BRERSKQorCQk6InIiIChuciAmIDcpKTsKKwlyZXR1cm4gb2xkYml0OworfQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX2NsZWFyX2JpdCh1bnNpZ25lZCBpbnQgbnIsIHZvaWQgKiBhZGRyKQoreworCWludCBvbGRiaXQ7CisKKwlhZGRyID0gKHZvaWQgKikgKCgodW5zaWduZWQgY2hhciAqKSBhZGRyKSArIChuciA+PiAzKSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImJ0cmwgJTIsJTFcblx0c2JibCAlMCwlMCIKKwkJOiI9ciIgKG9sZGJpdCksIittIiAoRVhUMkZTX0FERFIpCisJCToiciIgKG5yICYgNykpOworCXJldHVybiBvbGRiaXQ7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfdGVzdF9iaXQodW5zaWduZWQgaW50IG5yLCBjb25zdCB2b2lkICogYWRkcikKK3sKKwlpbnQgb2xkYml0OworCisJYWRkciA9IChjb25zdCB2b2lkICopICgoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYWRkcikgKyAobnIgPj4gMykpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJidGwgJTIsJTFcblx0c2JibCAlMCwlMCIKKwkJOiI9ciIgKG9sZGJpdCkKKwkJOiJtIiAoRVhUMkZTX0NPTlNUX0FERFIpLCJyIiAobnIgJiA3KSk7CisJcmV0dXJuIG9sZGJpdDsKK30KKworX0lOTElORV8gX191MzIgZXh0MmZzX3N3YWIzMihfX3UzMiB2YWwpCit7CisjaWZkZWYgRVhUMkZTX1JFUVVJUkVfNDg2CisJX19hc21fXygiYnN3YXAgJTAiIDogIj1yIiAodmFsKSA6ICIwIiAodmFsKSk7CisjZWxzZQorCV9fYXNtX18oInhjaGdiICViMCwlaDBcblx0IgkvKiBzd2FwIGxvd2VyIGJ5dGVzCSovCisJCSJyb3JsICQxNiwlMFxuXHQiCS8qIHN3YXAgd29yZHMJCSovCisJCSJ4Y2hnYiAlYjAsJWgwIgkJLyogc3dhcCBoaWdoZXIgYnl0ZXMJKi8KKwkJOiI9cSIgKHZhbCkKKwkJOiAiMCIgKHZhbCkpOworI2VuZGlmCisJcmV0dXJuIHZhbDsKK30KKworX0lOTElORV8gX191MTYgZXh0MmZzX3N3YWIxNihfX3UxNiB2YWwpCit7CisJX19hc21fXygieGNoZ2IgJWIwLCVoMCIJCS8qIHN3YXAgYnl0ZXMJCSovIFwKKwkJOiAiPXEiICh2YWwpIFwKKwkJOiAgIjAiICh2YWwpKTsgXAorCQlyZXR1cm4gdmFsOworfQorCisjdW5kZWYgRVhUMkZTX0FERFIKKworI2VuZGlmCS8qIGkzODYgKi8KKworCisjaWYgIWRlZmluZWQoX0VYVDJfSEFWRV9BU01fU1dBQl8pCisKK19JTkxJTkVfIF9fdTE2IGV4dDJmc19zd2FiMTYoX191MTYgdmFsKQoreworCXJldHVybiAodmFsID4+IDgpIHwgKF9fdTE2KSAodmFsIDw8IDgpOworfQorCitfSU5MSU5FXyBfX3UzMiBleHQyZnNfc3dhYjMyKF9fdTMyIHZhbCkKK3sKKwlyZXR1cm4gKCh2YWw+PjI0KSB8ICgodmFsPj44KSYweEZGMDApIHwKKwkJKCh2YWw8PDgpJjB4RkYwMDAwKSB8ICh2YWw8PDI0KSk7Cit9CisKKyNlbmRpZiAvKiAhX0VYVDJfSEFWRV9BU01fU1dBQiAqLworCitfSU5MSU5FXyBfX3U2NCBleHQyZnNfc3dhYjY0KF9fdTY0IHZhbCkKK3sKKwlyZXR1cm4gKGV4dDJmc19zd2FiMzIoKF9fdTMyKSAodmFsID4+IDMyKSkgfAorCQkoKChfX3U2NClleHQyZnNfc3dhYjMyKHZhbCAmIDB4RkZGRkZGRkZVTCkpIDw8IDMyKSk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfbWFya19ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgICAgIGJsa190IGJsb2NrKQoreworCXJldHVybiBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsCisJCQkJCSAgYmxvY2spOworfQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSBibGtfdCBibG9jaykKK3sKKwlyZXR1cm4gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsCisJCQkJCSAgICBibG9jayk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgICAgIGJsa190IGJsb2NrKQoreworCXJldHVybiBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsCisJCQkJCSAgYmxvY2spOworfQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgICBleHQyX2lub190IGlub2RlKQoreworCXJldHVybiBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsCisJCQkJCSAgaW5vZGUpOworfQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJCSBleHQyX2lub190IGlub2RlKQoreworCXJldHVybiBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCwKKwkJCQkgICAgIGlub2RlKTsKK30KKworX0lOTElORV8gaW50IGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgICAgZXh0Ml9pbm9fdCBpbm9kZSkKK3sKKwlyZXR1cm4gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLAorCQkJCQkgIGlub2RlKTsKK30KKworX0lOTElORV8gdm9pZCBleHQyZnNfZmFzdF9tYXJrX2Jsb2NrX2JpdG1hcChleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgIGJsa190IGJsb2NrKQoreworCWV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCwgYmxvY2spOworfQorCitfSU5MSU5FXyB2b2lkIGV4dDJmc19mYXN0X3VubWFya19ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgICAgIGJsa190IGJsb2NrKQoreworCWV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLCBibG9jayk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcChleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgIGJsa190IGJsb2NrKQoreworCXJldHVybiBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsCisJCQkJCSAgYmxvY2spOworfQorCitfSU5MSU5FXyB2b2lkIGV4dDJmc19mYXN0X21hcmtfaW5vZGVfYml0bWFwKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgZXh0Ml9pbm9fdCBpbm9kZSkKK3sKKwlleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsIGlub2RlKTsKK30KKworX0lOTElORV8gdm9pZCBleHQyZnNfZmFzdF91bm1hcmtfaW5vZGVfYml0bWFwKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgICBleHQyX2lub190IGlub2RlKQoreworCWV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLCBpbm9kZSk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfZmFzdF90ZXN0X2lub2RlX2JpdG1hcChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgZXh0Ml9pbm9fdCBpbm9kZSkKK3sKKwlyZXR1cm4gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLAorCQkJCQkgIGlub2RlKTsKK30KKworX0lOTElORV8gYmxrX3QgZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfc3RhcnQoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXApCit7CisJcmV0dXJuIGV4dDJmc19nZXRfZ2VuZXJpY19iaXRtYXBfc3RhcnQoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwKTsKK30KKworX0lOTElORV8gZXh0Ml9pbm9fdCBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9zdGFydChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCkKK3sKKwlyZXR1cm4gZXh0MmZzX2dldF9nZW5lcmljX2JpdG1hcF9zdGFydCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXApOworfQorCitfSU5MSU5FXyBibGtfdCBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9lbmQoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXApCit7CisJcmV0dXJuIGV4dDJmc19nZXRfZ2VuZXJpY19iaXRtYXBfZW5kKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCk7Cit9CisKK19JTkxJTkVfIGV4dDJfaW5vX3QgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfZW5kKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwKQoreworCXJldHVybiBleHQyZnNfZ2V0X2dlbmVyaWNfYml0bWFwX2VuZCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXApOworfQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2UoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkgYmxrX3QgYmxvY2ssIGludCBudW0pCit7CisJcmV0dXJuIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZShiaXRtYXAsIGJsb2NrLCBudW0pOworfQorCitfSU5MSU5FXyB2b2lkIGV4dDJmc19mYXN0X21hcmtfYmxvY2tfYml0bWFwX3JhbmdlKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkJICBibGtfdCBibG9jaywgaW50IG51bSkKK3sKKwlleHQyZnNfbWFya19ibG9ja19iaXRtYXBfcmFuZ2UoYml0bWFwLCBibG9jaywgbnVtKTsKK30KKworX0lOTElORV8gdm9pZCBleHQyZnNfZmFzdF91bm1hcmtfYmxvY2tfYml0bWFwX3JhbmdlKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkJICAgIGJsa190IGJsb2NrLCBpbnQgbnVtKQoreworCWV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwX3JhbmdlKGJpdG1hcCwgYmxvY2ssIG51bSk7Cit9CisKKy8qIDY0LWJpdCB2ZXJzaW9ucyAqLworCitfSU5MSU5FXyBpbnQgZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgICAgYmxrNjRfdCBibG9jaykKK3sKKwlyZXR1cm4gZXh0MmZzX21hcmtfZ2VuZXJpY19ibWFwKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCwKKwkJCQkJYmxvY2spOworfQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgYmxrNjRfdCBibG9jaykKK3sKKwlyZXR1cm4gZXh0MmZzX3VubWFya19nZW5lcmljX2JtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLCBibG9jayk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgICBibGs2NF90IGJsb2NrKQoreworCXJldHVybiBleHQyZnNfdGVzdF9nZW5lcmljX2JtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLAorCQkJCQlibG9jayk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgICBleHQyX2lub190IGlub2RlKQoreworCXJldHVybiBleHQyZnNfbWFya19nZW5lcmljX2JtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLAorCQkJCQlpbm9kZSk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcDIoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJCSBleHQyX2lub190IGlub2RlKQoreworCXJldHVybiBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYm1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsCisJCQkJCSAgaW5vZGUpOworfQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgICAgZXh0Ml9pbm9fdCBpbm9kZSkKK3sKKwlyZXR1cm4gZXh0MmZzX3Rlc3RfZ2VuZXJpY19ibWFwKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCwKKwkJCQkJaW5vZGUpOworfQorCitfSU5MSU5FXyB2b2lkIGV4dDJmc19mYXN0X21hcmtfYmxvY2tfYml0bWFwMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgICBibGs2NF90IGJsb2NrKQoreworCWV4dDJmc19tYXJrX2dlbmVyaWNfYm1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsIGJsb2NrKTsKK30KKworX0lOTElORV8gdm9pZCBleHQyZnNfZmFzdF91bm1hcmtfYmxvY2tfYml0bWFwMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgICAgIGJsazY0X3QgYmxvY2spCit7CisJZXh0MmZzX3VubWFya19nZW5lcmljX2JtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLCBibG9jayk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcDIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgICBibGs2NF90IGJsb2NrKQoreworCXJldHVybiBleHQyZnNfdGVzdF9nZW5lcmljX2JtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLAorCQkJCQlibG9jayk7Cit9CisKK19JTkxJTkVfIHZvaWQgZXh0MmZzX2Zhc3RfbWFya19pbm9kZV9iaXRtYXAyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgIGV4dDJfaW5vX3QgaW5vZGUpCit7CisJZXh0MmZzX21hcmtfZ2VuZXJpY19ibWFwKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCwgaW5vZGUpOworfQorCitfSU5MSU5FXyB2b2lkIGV4dDJmc19mYXN0X3VubWFya19pbm9kZV9iaXRtYXAyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgICAgZXh0Ml9pbm9fdCBpbm9kZSkKK3sKKwlleHQyZnNfdW5tYXJrX2dlbmVyaWNfYm1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsIGlub2RlKTsKK30KKworX0lOTElORV8gaW50IGV4dDJmc19mYXN0X3Rlc3RfaW5vZGVfYml0bWFwMihleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgIGV4dDJfaW5vX3QgaW5vZGUpCit7CisJcmV0dXJuIGV4dDJmc190ZXN0X2dlbmVyaWNfYm1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsCisJCQkJCWlub2RlKTsKK30KKworX0lOTElORV8gZXJyY29kZV90IGV4dDJmc19maW5kX2ZpcnN0X3plcm9fYmxvY2tfYml0bWFwMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJCQlibGs2NF90IHN0YXJ0LAorCQkJCQkJCWJsazY0X3QgZW5kLAorCQkJCQkJCWJsazY0X3QgKm91dCkKK3sKKwlfX3U2NCBvOworCWVycmNvZGVfdCBydjsKKworCXJ2ID0gZXh0MmZzX2ZpbmRfZmlyc3RfemVyb19nZW5lcmljX2JtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLAorCQkJCQkJIHN0YXJ0LCBlbmQsICZvKTsKKwlpZiAoIXJ2KQorCQkqb3V0ID0gbzsKKwlyZXR1cm4gcnY7Cit9CisKK19JTkxJTkVfIGVycmNvZGVfdCBleHQyZnNfZmluZF9maXJzdF96ZXJvX2lub2RlX2JpdG1hcDIoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkJZXh0Ml9pbm9fdCBzdGFydCwKKwkJCQkJCQlleHQyX2lub190IGVuZCwKKwkJCQkJCQlleHQyX2lub190ICpvdXQpCit7CisJX191NjQgbzsKKwllcnJjb2RlX3QgcnY7CisKKwlydiA9IGV4dDJmc19maW5kX2ZpcnN0X3plcm9fZ2VuZXJpY19ibWFwKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCwKKwkJCQkJCSBzdGFydCwgZW5kLCAmbyk7CisJaWYgKCFydikKKwkJKm91dCA9IChleHQyX2lub190KSBvOworCXJldHVybiBydjsKK30KKworX0lOTElORV8gZXJyY29kZV90IGV4dDJmc19maW5kX2ZpcnN0X3NldF9ibG9ja19iaXRtYXAyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkJICAgICAgIGJsazY0X3Qgc3RhcnQsCisJCQkJCQkgICAgICAgYmxrNjRfdCBlbmQsCisJCQkJCQkgICAgICAgYmxrNjRfdCAqb3V0KQoreworCV9fdTY0IG87CisJZXJyY29kZV90IHJ2OworCisJcnYgPSBleHQyZnNfZmluZF9maXJzdF9zZXRfZ2VuZXJpY19ibWFwKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCwKKwkJCQkJCXN0YXJ0LCBlbmQsICZvKTsKKwlpZiAoIXJ2KQorCQkqb3V0ID0gbzsKKwlyZXR1cm4gcnY7Cit9CisKK19JTkxJTkVfIGVycmNvZGVfdCBleHQyZnNfZmluZF9maXJzdF9zZXRfaW5vZGVfYml0bWFwMihleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkJCSAgICAgICBleHQyX2lub190IHN0YXJ0LAorCQkJCQkJICAgICAgIGV4dDJfaW5vX3QgZW5kLAorCQkJCQkJICAgICAgIGV4dDJfaW5vX3QgKm91dCkKK3sKKwlfX3U2NCBvOworCWVycmNvZGVfdCBydjsKKworCXJ2ID0gZXh0MmZzX2ZpbmRfZmlyc3Rfc2V0X2dlbmVyaWNfYm1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsCisJCQkJCQlzdGFydCwgZW5kLCAmbyk7CisJaWYgKCFydikKKwkJKm91dCA9IChleHQyX2lub190KSBvOworCXJldHVybiBydjsKK30KKworX0lOTElORV8gYmxrNjRfdCBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9zdGFydDIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXApCit7CisJcmV0dXJuIGV4dDJmc19nZXRfZ2VuZXJpY19ibWFwX3N0YXJ0KChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCk7Cit9CisKK19JTkxJTkVfIGV4dDJfaW5vX3QgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfc3RhcnQyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwKQoreworCXJldHVybiAoZXh0Ml9pbm9fdCkgZXh0MmZzX2dldF9nZW5lcmljX2JtYXBfc3RhcnQoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwKTsKK30KKworX0lOTElORV8gYmxrNjRfdCBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9lbmQyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwKQoreworCXJldHVybiBleHQyZnNfZ2V0X2dlbmVyaWNfYm1hcF9lbmQoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwKTsKK30KKworX0lOTElORV8gZXh0Ml9pbm9fdCBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9lbmQyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwKQoreworCXJldHVybiAoZXh0Ml9pbm9fdCkgZXh0MmZzX2dldF9nZW5lcmljX2JtYXBfZW5kKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkgIGJsazY0X3QgYmxvY2ssCisJCQkJCQkgIHVuc2lnbmVkIGludCBudW0pCit7CisJcmV0dXJuIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZTIoYml0bWFwLCBibG9jaywgbnVtKTsKK30KKworX0lOTElORV8gdm9pZCBleHQyZnNfZmFzdF9tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkgICBibGs2NF90IGJsb2NrLAorCQkJCQkJICAgdW5zaWduZWQgaW50IG51bSkKK3sKKwlleHQyZnNfbWFya19ibG9ja19iaXRtYXBfcmFuZ2UyKGJpdG1hcCwgYmxvY2ssIG51bSk7Cit9CisKK19JTkxJTkVfIHZvaWQgZXh0MmZzX2Zhc3RfdW5tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkgICAgIGJsazY0X3QgYmxvY2ssCisJCQkJCQkgICAgIHVuc2lnbmVkIGludCBudW0pCit7CisJZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXBfcmFuZ2UyKGJpdG1hcCwgYmxvY2ssIG51bSk7Cit9CisKKyN1bmRlZiBfSU5MSU5FXworI2VuZGlmCisKKyNpZm5kZWYgX0VYVDJfSEFWRV9BU01fQklUT1BTXworZXh0ZXJuIGludCBleHQyZnNfc2V0X2JpdCh1bnNpZ25lZCBpbnQgbnIsdm9pZCAqIGFkZHIpOworZXh0ZXJuIGludCBleHQyZnNfY2xlYXJfYml0KHVuc2lnbmVkIGludCBuciwgdm9pZCAqIGFkZHIpOworZXh0ZXJuIGludCBleHQyZnNfdGVzdF9iaXQodW5zaWduZWQgaW50IG5yLCBjb25zdCB2b2lkICogYWRkcik7CisjZW5kaWYKKworZXh0ZXJuIGludCBleHQyZnNfc2V0X2JpdDY0KF9fdTY0IG5yLHZvaWQgKiBhZGRyKTsKK2V4dGVybiBpbnQgZXh0MmZzX2NsZWFyX2JpdDY0KF9fdTY0IG5yLCB2b2lkICogYWRkcik7CitleHRlcm4gaW50IGV4dDJmc190ZXN0X2JpdDY0KF9fdTY0IG5yLCBjb25zdCB2b2lkICogYWRkcik7CitleHRlcm4gdW5zaWduZWQgaW50IGV4dDJmc19iaXRjb3VudChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvYmxrbWFwNjRfYmEuYyBiL2xpYi9leHQyZnMvYmxrbWFwNjRfYmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTQyOTNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9ibGttYXA2NF9iYS5jCkBAIC0wLDAgKzEsNDg2IEBACisvKgorICogYmxrbWFwNjRfYmEuYyAtLS0gU2ltcGxlIGJpdGFycmF5IGltcGxlbWVudGF0aW9uIGZvciBiaXRtYXBzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+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+PiAzKSArIDEgKworCQlzaXplb2Yoc3RydWN0IGV4dDJmc19iYV9wcml2YXRlX3N0cnVjdCkpOworfQorCisvKiBGaW5kIHRoZSBmaXJzdCB6ZXJvIGJpdCBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQsIGluY2x1c2l2ZS4gKi8KK3N0YXRpYyBlcnJjb2RlX3QgYmFfZmluZF9maXJzdF96ZXJvKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgIF9fdTY0IHN0YXJ0LCBfX3U2NCBlbmQsIF9fdTY0ICpvdXQpCit7CisJZXh0MmZzX2JhX3ByaXZhdGUgYnAgPSAoZXh0MmZzX2JhX3ByaXZhdGUpYml0bWFwLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgYml0cG9zID0gc3RhcnQgLSBiaXRtYXAtPnN0YXJ0OworCXVuc2lnbmVkIGxvbmcgY291bnQgPSBlbmQgLSBzdGFydCArIDE7CisJaW50IGJ5dGVfZm91bmQgPSAwOyAvKiB3aGV0aGVyIGEgIT0gMHhmZiBieXRlIGhhcyBiZWVuIGZvdW5kICovCisJY29uc3QgdW5zaWduZWQgY2hhciAqcG9zOworCXVuc2lnbmVkIGxvbmcgbWF4X2xvb3BfY291bnQsIGk7CisKKwkvKiBzY2FuIGJpdHMgdW50aWwgd2UgaGl0IGEgYnl0ZSBib3VuZGFyeSAqLworCXdoaWxlICgoYml0cG9zICYgMHg3KSAhPSAwICYmIGNvdW50ID4gMCkgeworCQlpZiAoIWV4dDJmc190ZXN0X2JpdDY0KGJpdHBvcywgYnAtPmJpdGFycmF5KSkgeworCQkJKm91dCA9IGJpdHBvcyArIGJpdG1hcC0+c3RhcnQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQliaXRwb3MrKzsKKwkJY291bnQtLTsKKwl9CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gRU5PRU5UOworCisJcG9zID0gKCh1bnNpZ25lZCBjaGFyICopYnAtPmJpdGFycmF5KSArIChiaXRwb3MgPj4gMyk7CisJLyogc2NhbiBieXRlcyB1bnRpbCA4LWJ5dGUgKDY0LWJpdCkgYWxpZ25lZCAqLworCXdoaWxlIChjb3VudCA+PSA4ICYmICgoKHVuc2lnbmVkIGxvbmcpcG9zKSAmIDB4MDcpKSB7CisJCWlmICgqcG9zICE9IDB4ZmYpIHsKKwkJCWJ5dGVfZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJcG9zKys7CisJCWNvdW50IC09IDg7CisJCWJpdHBvcyArPSA4OworCX0KKworCWlmICghYnl0ZV9mb3VuZCkgeworCQltYXhfbG9vcF9jb3VudCA9IGNvdW50ID4+IDY7IC8qIDgtYnl0ZSBibG9ja3MgKi8KKwkJaSA9IG1heF9sb29wX2NvdW50OworCQl3aGlsZSAoaSkgeworCQkJaWYgKCooKGNvbnN0IF9fdTY0ICopcG9zKSAhPSAoKF9fdTY0KS0xKSkKKwkJCQlicmVhazsKKwkJCXBvcyArPSA4OworCQkJaS0tOworCQl9CisJCWNvdW50IC09IDY0ICogKG1heF9sb29wX2NvdW50IC0gaSk7CisJCWJpdHBvcyArPSA2NCAqIChtYXhfbG9vcF9jb3VudCAtIGkpOworCisJCW1heF9sb29wX2NvdW50ID0gY291bnQgPj4gMzsKKwkJaSA9IG1heF9sb29wX2NvdW50OworCQl3aGlsZSAoaSkgeworCQkJaWYgKCpwb3MgIT0gMHhmZikgeworCQkJCWJ5dGVfZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJcG9zKys7CisJCQlpLS07CisJCX0KKwkJY291bnQgLT0gOCAqIChtYXhfbG9vcF9jb3VudCAtIGkpOworCQliaXRwb3MgKz0gOCAqIChtYXhfbG9vcF9jb3VudCAtIGkpOworCX0KKworCS8qIEhlcmUgZWl0aGVyIGNvdW50IDwgOCBvciBieXRlX2ZvdW5kID09IDEuICovCisJd2hpbGUgKGNvdW50LS0gPiAwKSB7CisJCWlmICghZXh0MmZzX3Rlc3RfYml0NjQoYml0cG9zLCBicC0+Yml0YXJyYXkpKSB7CisJCQkqb3V0ID0gYml0cG9zICsgYml0bWFwLT5zdGFydDsKKwkJCXJldHVybiAwOworCQl9CisJCWJpdHBvcysrOworCX0KKworCXJldHVybiBFTk9FTlQ7Cit9CisKKy8qIEZpbmQgdGhlIGZpcnN0IG9uZSBiaXQgYmV0d2VlbiBzdGFydCBhbmQgZW5kLCBpbmNsdXNpdmUuICovCitzdGF0aWMgZXJyY29kZV90IGJhX2ZpbmRfZmlyc3Rfc2V0KGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgIF9fdTY0IHN0YXJ0LCBfX3U2NCBlbmQsIF9fdTY0ICpvdXQpCit7CisJZXh0MmZzX2JhX3ByaXZhdGUgYnAgPSAoZXh0MmZzX2JhX3ByaXZhdGUpYml0bWFwLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgYml0cG9zID0gc3RhcnQgLSBiaXRtYXAtPnN0YXJ0OworCXVuc2lnbmVkIGxvbmcgY291bnQgPSBlbmQgLSBzdGFydCArIDE7CisJaW50IGJ5dGVfZm91bmQgPSAwOyAvKiB3aGV0aGVyIGEgIT0gMHhmZiBieXRlIGhhcyBiZWVuIGZvdW5kICovCisJY29uc3QgdW5zaWduZWQgY2hhciAqcG9zOworCXVuc2lnbmVkIGxvbmcgbWF4X2xvb3BfY291bnQsIGk7CisKKwkvKiBzY2FuIGJpdHMgdW50aWwgd2UgaGl0IGEgYnl0ZSBib3VuZGFyeSAqLworCXdoaWxlICgoYml0cG9zICYgMHg3KSAhPSAwICYmIGNvdW50ID4gMCkgeworCQlpZiAoZXh0MmZzX3Rlc3RfYml0NjQoYml0cG9zLCBicC0+Yml0YXJyYXkpKSB7CisJCQkqb3V0ID0gYml0cG9zICsgYml0bWFwLT5zdGFydDsKKwkJCXJldHVybiAwOworCQl9CisJCWJpdHBvcysrOworCQljb3VudC0tOworCX0KKworCWlmICghY291bnQpCisJCXJldHVybiBFTk9FTlQ7CisKKwlwb3MgPSAoKHVuc2lnbmVkIGNoYXIgKilicC0+Yml0YXJyYXkpICsgKGJpdHBvcyA+PiAzKTsKKwkvKiBzY2FuIGJ5dGVzIHVudGlsIDgtYnl0ZSAoNjQtYml0KSBhbGlnbmVkICovCisJd2hpbGUgKGNvdW50ID49IDggJiYgKCgodW5zaWduZWQgbG9uZylwb3MpICYgMHgwNykpIHsKKwkJaWYgKCpwb3MgIT0gMCkgeworCQkJYnl0ZV9mb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCQlwb3MrKzsKKwkJY291bnQgLT0gODsKKwkJYml0cG9zICs9IDg7CisJfQorCisJaWYgKCFieXRlX2ZvdW5kKSB7CisJCW1heF9sb29wX2NvdW50ID0gY291bnQgPj4gNjsgLyogOC1ieXRlIGJsb2NrcyAqLworCQlpID0gbWF4X2xvb3BfY291bnQ7CisJCXdoaWxlIChpKSB7CisJCQlpZiAoKigoY29uc3QgX191NjQgKilwb3MpICE9IDApCisJCQkJYnJlYWs7CisJCQlwb3MgKz0gODsKKwkJCWktLTsKKwkJfQorCQljb3VudCAtPSA2NCAqIChtYXhfbG9vcF9jb3VudCAtIGkpOworCQliaXRwb3MgKz0gNjQgKiAobWF4X2xvb3BfY291bnQgLSBpKTsKKworCQltYXhfbG9vcF9jb3VudCA9IGNvdW50ID4+IDM7CisJCWkgPSBtYXhfbG9vcF9jb3VudDsKKwkJd2hpbGUgKGkpIHsKKwkJCWlmICgqcG9zICE9IDApIHsKKwkJCQlieXRlX2ZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXBvcysrOworCQkJaS0tOworCQl9CisJCWNvdW50IC09IDggKiAobWF4X2xvb3BfY291bnQgLSBpKTsKKwkJYml0cG9zICs9IDggKiAobWF4X2xvb3BfY291bnQgLSBpKTsKKwl9CisKKwkvKiBIZXJlIGVpdGhlciBjb3VudCA8IDggb3IgYnl0ZV9mb3VuZCA9PSAxLiAqLworCXdoaWxlIChjb3VudC0tID4gMCkgeworCQlpZiAoZXh0MmZzX3Rlc3RfYml0NjQoYml0cG9zLCBicC0+Yml0YXJyYXkpKSB7CisJCQkqb3V0ID0gYml0cG9zICsgYml0bWFwLT5zdGFydDsKKwkJCXJldHVybiAwOworCQl9CisJCWJpdHBvcysrOworCX0KKworCXJldHVybiBFTk9FTlQ7Cit9CisKK3N0cnVjdCBleHQyX2JpdG1hcF9vcHMgZXh0MmZzX2Jsa21hcDY0X2JpdGFycmF5ID0geworCS50eXBlID0gRVhUMkZTX0JNQVA2NF9CSVRBUlJBWSwKKwkubmV3X2JtYXAgPSBiYV9uZXdfYm1hcCwKKwkuZnJlZV9ibWFwID0gYmFfZnJlZV9ibWFwLAorCS5jb3B5X2JtYXAgPSBiYV9jb3B5X2JtYXAsCisJLnJlc2l6ZV9ibWFwID0gYmFfcmVzaXplX2JtYXAsCisJLm1hcmtfYm1hcCA9IGJhX21hcmtfYm1hcCwKKwkudW5tYXJrX2JtYXAgPSBiYV91bm1hcmtfYm1hcCwKKwkudGVzdF9ibWFwID0gYmFfdGVzdF9ibWFwLAorCS50ZXN0X2NsZWFyX2JtYXBfZXh0ZW50ID0gYmFfdGVzdF9jbGVhcl9ibWFwX2V4dGVudCwKKwkubWFya19ibWFwX2V4dGVudCA9IGJhX21hcmtfYm1hcF9leHRlbnQsCisJLnVubWFya19ibWFwX2V4dGVudCA9IGJhX3VubWFya19ibWFwX2V4dGVudCwKKwkuc2V0X2JtYXBfcmFuZ2UgPSBiYV9zZXRfYm1hcF9yYW5nZSwKKwkuZ2V0X2JtYXBfcmFuZ2UgPSBiYV9nZXRfYm1hcF9yYW5nZSwKKwkuY2xlYXJfYm1hcCA9IGJhX2NsZWFyX2JtYXAsCisJLnByaW50X3N0YXRzID0gYmFfcHJpbnRfc3RhdHMsCisJLmZpbmRfZmlyc3RfemVybyA9IGJhX2ZpbmRfZmlyc3RfemVybywKKwkuZmluZF9maXJzdF9zZXQgPSBiYV9maW5kX2ZpcnN0X3NldAorfTsKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvYmxrbWFwNjRfcmIuYyBiL2xpYi9leHQyZnMvYmxrbWFwNjRfcmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGJkMzMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9ibGttYXA2NF9yYi5jCkBAIC0wLDAgKzEsOTc3IEBACisvKgorICogYmxrbWFwNjRfcmIuYyAtLS0gU2ltcGxlIHJiLXRyZWUgaW1wbGVtZW50YXRpb24gZm9yIGJpdG1hcHMKKyAqCisgKiAoQykyMDEwIFJlZCBIYXQsIEluYy4sIEx1a2FzIEN6ZXJuZXIgPGxjemVybmVyQHJlZGhhdC5jb20+CisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorI2luY2x1ZGUgImJtYXA2NC5oIgorI2luY2x1ZGUgInJidHJlZS5oIgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisKK3N0cnVjdCBibWFwX3JiX2V4dGVudCB7CisJc3RydWN0IHJiX25vZGUgbm9kZTsKKwlfX3U2NCBzdGFydDsKKwlfX3U2NCBjb3VudDsKK307CisKK3N0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSB7CisJc3RydWN0IHJiX3Jvb3Qgcm9vdDsKKwlzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKndjdXJzb3I7CisJc3RydWN0IGJtYXBfcmJfZXh0ZW50ICpyY3Vyc29yOworCXN0cnVjdCBibWFwX3JiX2V4dGVudCAqcmN1cnNvcl9uZXh0OworI2lmZGVmIEJNQVBfU1RBVFNfT1BTCisJX191NjQgbWFya19oaXQ7CisJX191NjQgdGVzdF9oaXQ7CisjZW5kaWYKK307CisKK2lubGluZSBzdGF0aWMgc3RydWN0IGJtYXBfcmJfZXh0ZW50ICpub2RlX3RvX2V4dGVudChzdHJ1Y3QgcmJfbm9kZSAqbm9kZSkKK3sKKwkvKgorCSAqIFRoaXMgZGVwZW5kcyBvbiB0aGUgZmFjdCB0aGUgc3RydWN0IHJiX25vZGUgaXMgYXQgdGhlCisJICogYmVnaW5uaW5nIG9mIHRoZSBibWFwX3JiX2V4dGVudCBzdHJ1Y3R1cmUuICBXZSB1c2UgdGhpcworCSAqIGluc3RlYWQgb2YgdGhlIGV4dDJmc19yYl9lbnRyeSBtYWNybyBiZWNhdXNlIGl0IGNhdXNlcyBnY2MKKwkgKiAtV2FsbCB0byBnZW5lcmF0ZSBhIGh1Z2UgYW1vdW50IG9mIG5vaXNlLgorCSAqLworCXJldHVybiAoc3RydWN0IGJtYXBfcmJfZXh0ZW50ICopIG5vZGU7Cit9CisKK3N0YXRpYyBpbnQgcmJfaW5zZXJ0X2V4dGVudChfX3U2NCBzdGFydCwgX191NjQgY291bnQsCisJCQkgICAgc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICopOworc3RhdGljIHZvaWQgcmJfZ2V0X25ld19leHRlbnQoc3RydWN0IGJtYXBfcmJfZXh0ZW50ICoqLCBfX3U2NCwgX191NjQpOworCisvKiAjZGVmaW5lIERFQlVHX1JCICovCisKKyNpZmRlZiBERUJVR19SQgorc3RhdGljIHZvaWQgcHJpbnRfdHJlZShzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9IE5VTEw7CisJc3RydWN0IGJtYXBfcmJfZXh0ZW50ICpleHQ7CisKKwlwcmludGYoIlx0XHRcdD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJbm9kZSA9IGV4dDJmc19yYl9maXJzdChyb290KTsKKwlmb3IgKG5vZGUgPSBleHQyZnNfcmJfZmlyc3Qocm9vdCk7IG5vZGUgIT0gTlVMTDsgCisJICAgICBub2RlID0gZXh0MmZzX3JiX25leHQobm9kZSkpIHsKKwkJZXh0ID0gbm9kZV90b19leHRlbnQobm9kZSk7CisJCXByaW50ZigiXHRcdFx0LS0+ICglbGx1IC0+ICVsbHUpXG4iLAorCQkJZXh0LT5zdGFydCwgZXh0LT5zdGFydCArIGV4dC0+Y291bnQpOworCX0KKwlwcmludGYoIlx0XHRcdD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3RyZWUoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKmV4dCwgKm9sZCA9IE5VTEw7CisKKwlmb3IgKG5vZGUgPSBleHQyZnNfcmJfZmlyc3Qocm9vdCk7IG5vZGU7CisJICAgICBub2RlID0gZXh0MmZzX3JiX25leHQobm9kZSkpIHsKKwkJZXh0ID0gbm9kZV90b19leHRlbnQobm9kZSk7CisJCWlmIChleHQtPmNvdW50ID09IDApIHsKKwkJCXByaW50ZigiVHJlZSBFcnJvcjogY291bnQgaXMgemVyb1xuIik7CisJCQlwcmludGYoImV4dGVudDogJWxsdSAtPiAlbGx1ICglbGx1KVxuIiwgZXh0LT5zdGFydCwKKwkJCQlleHQtPnN0YXJ0ICsgZXh0LT5jb3VudCwgZXh0LT5jb3VudCk7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwkJaWYgKGV4dC0+c3RhcnQgKyBleHQtPmNvdW50IDwgZXh0LT5zdGFydCkgeworCQkJcHJpbnRmKCJUcmVlIEVycm9yOiBzdGFydCBvciBjb3VudCBpcyBjcmF6eVxuIik7CisJCQlwcmludGYoImV4dGVudDogJWxsdSAtPiAlbGx1ICglbGx1KVxuIiwgZXh0LT5zdGFydCwKKwkJCQlleHQtPnN0YXJ0ICsgZXh0LT5jb3VudCwgZXh0LT5jb3VudCk7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKworCQlpZiAob2xkKSB7CisJCQlpZiAob2xkLT5zdGFydCA+IGV4dC0+c3RhcnQpIHsKKwkJCQlwcmludGYoIlRyZWUgRXJyb3I6IHN0YXJ0IGlzIGNyYXp5XG4iKTsKKwkJCQlwcmludGYoImV4dGVudDogJWxsdSAtPiAlbGx1ICglbGx1KVxuIiwKKwkJCQkJb2xkLT5zdGFydCwgb2xkLT5zdGFydCArIG9sZC0+Y291bnQsCisJCQkJCW9sZC0+Y291bnQpOworCQkJCXByaW50ZigiZXh0ZW50IG5leHQ6ICVsbHUgLT4gJWxsdSAoJWxsdSlcbiIsCisJCQkJCWV4dC0+c3RhcnQsIGV4dC0+c3RhcnQgKyBleHQtPmNvdW50LAorCQkJCQlleHQtPmNvdW50KTsKKwkJCQlnb3RvIGVycl9vdXQ7CisJCQl9CisJCQlpZiAoKG9sZC0+c3RhcnQgKyBvbGQtPmNvdW50KSA+PSBleHQtPnN0YXJ0KSB7CisJCQkJcHJpbnRmKCJUcmVlIEVycm9yOiBleHRlbnQgaXMgY3JhenlcbiIpOworCQkJCXByaW50ZigiZXh0ZW50OiAlbGx1IC0+ICVsbHUgKCVsbHUpXG4iLAorCQkJCQlvbGQtPnN0YXJ0LCBvbGQtPnN0YXJ0ICsgb2xkLT5jb3VudCwKKwkJCQkJb2xkLT5jb3VudCk7CisJCQkJcHJpbnRmKCJleHRlbnQgbmV4dDogJWxsdSAtPiAlbGx1ICglbGx1KVxuIiwKKwkJCQkJZXh0LT5zdGFydCwgZXh0LT5zdGFydCArIGV4dC0+Y291bnQsCisJCQkJCWV4dC0+Y291bnQpOworCQkJCWdvdG8gZXJyX291dDsKKwkJCX0KKwkJfQorCQlvbGQgPSBleHQ7CisJfQorCXJldHVybjsKKworZXJyX291dDoKKwlwcmludGYoIiVzXG4iLCBtc2cpOworCXByaW50X3RyZWUocm9vdCk7CisJZXhpdCgxKTsKK30KKyNlbHNlCisjZGVmaW5lIGNoZWNrX3RyZWUocm9vdCwgbXNnKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgcHJpbnRfdHJlZShyb290KSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCByYl9nZXRfbmV3X2V4dGVudChzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKipleHQsIF9fdTY0IHN0YXJ0LAorCQkJICAgICBfX3U2NCBjb3VudCkKK3sKKwlzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKm5ld19leHQ7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZiAoc3RydWN0IGJtYXBfcmJfZXh0ZW50KSwKKwkJCQkmbmV3X2V4dCk7CisJaWYgKHJldHZhbCkgeworCQlwZXJyb3IoImV4dDJmc19nZXRfbWVtIik7CisJCWV4aXQoMSk7CisJfQorCisJbmV3X2V4dC0+c3RhcnQgPSBzdGFydDsKKwluZXdfZXh0LT5jb3VudCA9IGNvdW50OworCSpleHQgPSBuZXdfZXh0OworfQorCitpbmxpbmUKK3N0YXRpYyB2b2lkIHJiX2ZyZWVfZXh0ZW50KHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqYnAsCisJCQkgICBzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKmV4dCkKK3sKKwlpZiAoYnAtPndjdXJzb3IgPT0gZXh0KQorCQlicC0+d2N1cnNvciA9IE5VTEw7CisJaWYgKGJwLT5yY3Vyc29yID09IGV4dCkKKwkJYnAtPnJjdXJzb3IgPSBOVUxMOworCWlmIChicC0+cmN1cnNvcl9uZXh0ID09IGV4dCkKKwkJYnAtPnJjdXJzb3JfbmV4dCA9IE5VTEw7CisJZXh0MmZzX2ZyZWVfbWVtKCZleHQpOworfQorCitzdGF0aWMgZXJyY29kZV90IHJiX2FsbG9jX3ByaXZhdGVfZGF0YSAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCkKK3sKKwlzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKmJwOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2YgKHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSksICZicCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWJwLT5yb290ID0gUkJfUk9PVDsKKwlicC0+cmN1cnNvciA9IE5VTEw7CisJYnAtPnJjdXJzb3JfbmV4dCA9IE5VTEw7CisJYnAtPndjdXJzb3IgPSBOVUxMOworCisjaWZkZWYgQk1BUF9TVEFUU19PUFMKKwlicC0+dGVzdF9oaXQgPSAwOworCWJwLT5tYXJrX2hpdCA9IDA7CisjZW5kaWYKKworCWJpdG1hcC0+cHJpdmF0ZSA9ICh2b2lkICopIGJwOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IHJiX25ld19ibWFwKGV4dDJfZmlsc3lzIGZzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCisJcmV0dmFsID0gcmJfYWxsb2NfcHJpdmF0ZV9kYXRhIChiaXRtYXApOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmJfZnJlZV90cmVlKHN0cnVjdCByYl9yb290ICpyb290KQoreworCXN0cnVjdCBibWFwX3JiX2V4dGVudCAqZXh0OworCXN0cnVjdCByYl9ub2RlICpub2RlLCAqbmV4dDsKKworCWZvciAobm9kZSA9IGV4dDJmc19yYl9maXJzdChyb290KTsgbm9kZTsgbm9kZSA9IG5leHQpIHsKKwkJbmV4dCA9IGV4dDJmc19yYl9uZXh0KG5vZGUpOworCQlleHQgPSBub2RlX3RvX2V4dGVudChub2RlKTsKKwkJZXh0MmZzX3JiX2VyYXNlKG5vZGUsIHJvb3QpOworCQlleHQyZnNfZnJlZV9tZW0oJmV4dCk7CisJfQorfQorCitzdGF0aWMgdm9pZCByYl9mcmVlX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCkKK3sKKwlzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKmJwOworCisJYnAgPSAoc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICopIGJpdG1hcC0+cHJpdmF0ZTsKKworCXJiX2ZyZWVfdHJlZSgmYnAtPnJvb3QpOworCWV4dDJmc19mcmVlX21lbSgmYnApOworCWJwID0gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCByYl9jb3B5X2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIHNyYywKKwkJCSAgICAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCBkZXN0KQoreworCXN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqc3JjX2JwLCAqZGVzdF9icDsKKwlzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKnNyY19leHQsICpkZXN0X2V4dDsKKwlzdHJ1Y3QgcmJfbm9kZSAqZGVzdF9ub2RlLCAqc3JjX25vZGUsICpkZXN0X2xhc3QsICoqbjsKKwllcnJjb2RlX3QgcmV0dmFsID0gMDsKKworCXJldHZhbCA9IHJiX2FsbG9jX3ByaXZhdGVfZGF0YSAoZGVzdCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXNyY19icCA9IChzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKikgc3JjLT5wcml2YXRlOworCWRlc3RfYnAgPSAoc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICopIGRlc3QtPnByaXZhdGU7CisJc3JjX2JwLT5yY3Vyc29yID0gTlVMTDsKKwlkZXN0X2JwLT5yY3Vyc29yID0gTlVMTDsKKworCXNyY19ub2RlID0gZXh0MmZzX3JiX2ZpcnN0KCZzcmNfYnAtPnJvb3QpOworCXdoaWxlIChzcmNfbm9kZSkgeworCQlzcmNfZXh0ID0gbm9kZV90b19leHRlbnQoc3JjX25vZGUpOworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2YgKHN0cnVjdCBibWFwX3JiX2V4dGVudCksCisJCQkJCSZkZXN0X2V4dCk7CisJCWlmIChyZXR2YWwpCisJCQlicmVhazsKKworCQltZW1jcHkoZGVzdF9leHQsIHNyY19leHQsIHNpemVvZihzdHJ1Y3QgYm1hcF9yYl9leHRlbnQpKTsKKworCQlkZXN0X25vZGUgPSAmZGVzdF9leHQtPm5vZGU7CisJCW4gPSAmZGVzdF9icC0+cm9vdC5yYl9ub2RlOworCisJCWRlc3RfbGFzdCA9IE5VTEw7CisJCWlmICgqbikgeworCQkJZGVzdF9sYXN0ID0gZXh0MmZzX3JiX2xhc3QoJmRlc3RfYnAtPnJvb3QpOworCQkJbiA9ICYoZGVzdF9sYXN0KS0+cmJfcmlnaHQ7CisJCX0KKworCQlleHQyZnNfcmJfbGlua19ub2RlKGRlc3Rfbm9kZSwgZGVzdF9sYXN0LCBuKTsKKwkJZXh0MmZzX3JiX2luc2VydF9jb2xvcihkZXN0X25vZGUsICZkZXN0X2JwLT5yb290KTsKKworCQlzcmNfbm9kZSA9IGV4dDJmc19yYl9uZXh0KHNyY19ub2RlKTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCByYl90cnVuY2F0ZShfX3U2NCBuZXdfbWF4LCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKK3sKKwlzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKmV4dDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKworCW5vZGUgPSBleHQyZnNfcmJfbGFzdChyb290KTsKKwl3aGlsZSAobm9kZSkgeworCQlleHQgPSBub2RlX3RvX2V4dGVudChub2RlKTsKKworCQlpZiAoKGV4dC0+c3RhcnQgKyBleHQtPmNvdW50IC0gMSkgPD0gbmV3X21heCkKKwkJCWJyZWFrOworCQllbHNlIGlmIChleHQtPnN0YXJ0ID4gbmV3X21heCkgeworCQkJZXh0MmZzX3JiX2VyYXNlKG5vZGUsIHJvb3QpOworCQkJZXh0MmZzX2ZyZWVfbWVtKCZleHQpOworCQkJbm9kZSA9IGV4dDJmc19yYl9sYXN0KHJvb3QpOworCQkJY29udGludWU7CisJCX0gZWxzZQorCQkJZXh0LT5jb3VudCA9IG5ld19tYXggLSBleHQtPnN0YXJ0ICsgMTsKKwl9Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgcmJfcmVzaXplX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXAsCisJCQkJX191NjQgbmV3X2VuZCwgX191NjQgbmV3X3JlYWxfZW5kKQoreworCXN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqYnA7CisKKwlicCA9IChzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKikgYm1hcC0+cHJpdmF0ZTsKKwlicC0+cmN1cnNvciA9IE5VTEw7CisJYnAtPndjdXJzb3IgPSBOVUxMOworCisJcmJfdHJ1bmNhdGUoKChuZXdfZW5kIDwgYm1hcC0+ZW5kKSA/IG5ld19lbmQgOiBibWFwLT5lbmQpIC0gYm1hcC0+c3RhcnQsCisJCSAgICAmYnAtPnJvb3QpOworCisJYm1hcC0+ZW5kID0gbmV3X2VuZDsKKwlibWFwLT5yZWFsX2VuZCA9IG5ld19yZWFsX2VuZDsKKworCWlmIChibWFwLT5lbmQgPCBibWFwLT5yZWFsX2VuZCkKKwkJcmJfaW5zZXJ0X2V4dGVudChibWFwLT5lbmQgKyAxIC0gYm1hcC0+c3RhcnQsCisJCQkJIGJtYXAtPnJlYWxfZW5kIC0gYm1hcC0+ZW5kLCBicCk7CisJcmV0dXJuIDA7CisKK30KKworaW5saW5lIHN0YXRpYyBpbnQKK3JiX3Rlc3RfYml0KHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqYnAsIF9fdTY0IGJpdCkKK3sKKwlzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKnJjdXJzb3IsICpuZXh0X2V4dCA9IE5VTEw7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEwsICpuZXh0OworCXN0cnVjdCByYl9ub2RlICoqbiA9ICZicC0+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+c3RhcnQpOworCQkJZXh0LT5zdGFydCA9IHN0YXJ0ICsgY291bnQ7CisJCQlyZXR2YWwgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHJiX21hcmtfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLCBfX3U2NCBhcmcpCit7CisJc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICpicDsKKwlpbnQgcmV0dmFsOworCisJYnAgPSAoc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICopIGJpdG1hcC0+cHJpdmF0ZTsKKwlhcmcgLT0gYml0bWFwLT5zdGFydDsKKworCXJldHZhbCA9IHJiX2luc2VydF9leHRlbnQoYXJnLCAxLCBicCk7CisJY2hlY2tfdHJlZSgmYnAtPnJvb3QsIF9fZnVuY19fKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHJiX3VubWFya19ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsIF9fdTY0IGFyZykKK3sKKwlzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKmJwOworCWludCByZXR2YWw7CisKKwlicCA9IChzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKikgYml0bWFwLT5wcml2YXRlOworCWFyZyAtPSBiaXRtYXAtPnN0YXJ0OworCisJcmV0dmFsID0gcmJfcmVtb3ZlX2V4dGVudChhcmcsIDEsIGJwKTsKKwljaGVja190cmVlKCZicC0+cm9vdCwgX19mdW5jX18pOworCisJcmV0dXJuIHJldHZhbDsKK30KKworaW5saW5lCitzdGF0aWMgaW50IHJiX3Rlc3RfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLCBfX3U2NCBhcmcpCit7CisJc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICpicDsKKworCWJwID0gKHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqKSBiaXRtYXAtPnByaXZhdGU7CisJYXJnIC09IGJpdG1hcC0+c3RhcnQ7CisKKwlyZXR1cm4gcmJfdGVzdF9iaXQoYnAsIGFyZyk7Cit9CisKK3N0YXRpYyB2b2lkIHJiX21hcmtfYm1hcF9leHRlbnQoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwgX191NjQgYXJnLAorCQkJCXVuc2lnbmVkIGludCBudW0pCit7CisJc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICpicDsKKworCWJwID0gKHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqKSBiaXRtYXAtPnByaXZhdGU7CisJYXJnIC09IGJpdG1hcC0+c3RhcnQ7CisKKwlyYl9pbnNlcnRfZXh0ZW50KGFyZywgbnVtLCBicCk7CisJY2hlY2tfdHJlZSgmYnAtPnJvb3QsIF9fZnVuY19fKTsKK30KKworc3RhdGljIHZvaWQgcmJfdW5tYXJrX2JtYXBfZXh0ZW50KGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsIF9fdTY0IGFyZywKKwkJCQkgIHVuc2lnbmVkIGludCBudW0pCit7CisJc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICpicDsKKworCWJwID0gKHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqKSBiaXRtYXAtPnByaXZhdGU7CisJYXJnIC09IGJpdG1hcC0+c3RhcnQ7CisKKwlyYl9yZW1vdmVfZXh0ZW50KGFyZywgbnVtLCBicCk7CisJY2hlY2tfdHJlZSgmYnAtPnJvb3QsIF9fZnVuY19fKTsKK30KKworc3RhdGljIGludCByYl90ZXN0X2NsZWFyX2JtYXBfZXh0ZW50KGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgICBfX3U2NCBzdGFydCwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTCwgKipuOworCXN0cnVjdCByYl9ub2RlICpub2RlLCAqbmV4dDsKKwlzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKmJwOworCXN0cnVjdCBibWFwX3JiX2V4dGVudCAqZXh0OworCWludCByZXR2YWwgPSAxOworCisJYnAgPSAoc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICopIGJpdG1hcC0+cHJpdmF0ZTsKKwluID0gJmJwLT5yb290LnJiX25vZGU7CisJc3RhcnQgLT0gYml0bWFwLT5zdGFydDsKKworCWlmICgobGVuID09IDApIHx8IEVYVDJGU19SQl9FTVBUWV9ST09UKCZicC0+cm9vdCkpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBJZiB3ZSBmaW5kIG5vdGhpbmcsIHdlIHNob3VsZCBleGFtaW5lIHdob2xlIGV4dGVudCwgYnV0CisJICogd2hlbiB3ZSBmaW5kIG1hdGNoLCB0aGUgZXh0ZW50IGlzIG5vdCBjbGVhbiwgdGh1cyBiZSByZXR1cm4KKwkgKiBmYWxzZS4KKwkgKi8KKwl3aGlsZSAoKm4pIHsKKwkJcGFyZW50ID0gKm47CisJCWV4dCA9IG5vZGVfdG9fZXh0ZW50KHBhcmVudCk7CisJCWlmIChzdGFydCA8IGV4dC0+c3RhcnQpIHsKKwkJCW4gPSAmKCpuKS0+cmJfbGVmdDsKKwkJfSBlbHNlIGlmIChzdGFydCA+PSAoZXh0LT5zdGFydCArIGV4dC0+Y291bnQpKSB7CisJCQluID0gJigqbiktPnJiX3JpZ2h0OworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFdlIGZvdW5kIGV4dGVudCBpbnQgdGhlIHRyZWUgLT4gZXh0ZW50IGlzIG5vdAorCQkJICogY2xlYW4KKwkJCSAqLworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlub2RlID0gcGFyZW50OworCXdoaWxlIChub2RlKSB7CisJCW5leHQgPSBleHQyZnNfcmJfbmV4dChub2RlKTsKKwkJZXh0ID0gbm9kZV90b19leHRlbnQobm9kZSk7CisJCW5vZGUgPSBuZXh0OworCisJCWlmICgoZXh0LT5zdGFydCArIGV4dC0+Y291bnQpIDw9IHN0YXJ0KQorCQkJY29udGludWU7CisKKwkJLyogTm8gbW9yZSBtZXJnaW5nICovCisJCWlmICgoc3RhcnQgKyBsZW4pIDw9IGV4dC0+c3RhcnQpCisJCQlicmVhazsKKworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCByYl9zZXRfYm1hcF9yYW5nZShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgX191NjQgc3RhcnQsIHNpemVfdCBudW0sIHZvaWQgKmluKQoreworCXN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqYnA7CisJdW5zaWduZWQgY2hhciAqY3AgPSBpbjsKKwlzaXplX3QgaTsKKwlpbnQgZmlyc3Rfc2V0ID0gLTE7CisKKwlicCA9IChzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKikgYml0bWFwLT5wcml2YXRlOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWlmICgoaSAmIDcpID09IDApIHsKKwkJCXVuc2lnbmVkIGNoYXIgYyA9IGNwW2kvOF07CisJCQlpZiAoYyA9PSAweEZGKSB7CisJCQkJaWYgKGZpcnN0X3NldCA9PSAtMSkKKwkJCQkJZmlyc3Rfc2V0ID0gaTsKKwkJCQlpICs9IDc7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoKGMgPT0gMHgwMCkgJiYgKGZpcnN0X3NldCA9PSAtMSkpIHsKKwkJCQlpICs9IDc7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJaWYgKGV4dDJmc190ZXN0X2JpdChpLCBpbikpIHsKKwkJCWlmIChmaXJzdF9zZXQgPT0gLTEpCisJCQkJZmlyc3Rfc2V0ID0gaTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChmaXJzdF9zZXQgPT0gLTEpCisJCQljb250aW51ZTsKKworCQlyYl9pbnNlcnRfZXh0ZW50KHN0YXJ0ICsgZmlyc3Rfc2V0IC0gYml0bWFwLT5zdGFydCwKKwkJCQkgaSAtIGZpcnN0X3NldCwgYnApOworCQljaGVja190cmVlKCZicC0+cm9vdCwgX19mdW5jX18pOworCQlmaXJzdF9zZXQgPSAtMTsKKwl9CisJaWYgKGZpcnN0X3NldCAhPSAtMSkgeworCQlyYl9pbnNlcnRfZXh0ZW50KHN0YXJ0ICsgZmlyc3Rfc2V0IC0gYml0bWFwLT5zdGFydCwKKwkJCQkgbnVtIC0gZmlyc3Rfc2V0LCBicCk7CisJCWNoZWNrX3RyZWUoJmJwLT5yb290LCBfX2Z1bmNfXyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgcmJfZ2V0X2JtYXBfcmFuZ2UoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgIF9fdTY0IHN0YXJ0LCBzaXplX3QgbnVtLCB2b2lkICpvdXQpCit7CisKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTCwgKm5leHQsICoqbjsKKwlzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKmJwOworCXN0cnVjdCBibWFwX3JiX2V4dGVudCAqZXh0OworCWludCBjb3VudDsKKwlfX3U2NCBwb3M7CisKKwlicCA9IChzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKikgYml0bWFwLT5wcml2YXRlOworCW4gPSAmYnAtPnJvb3QucmJfbm9kZTsKKwlzdGFydCAtPSBiaXRtYXAtPnN0YXJ0OworCisJaWYgKEVYVDJGU19SQl9FTVBUWV9ST09UKCZicC0+cm9vdCkpCisJCXJldHVybiAwOworCisJd2hpbGUgKCpuKSB7CisJCXBhcmVudCA9ICpuOworCQlleHQgPSBub2RlX3RvX2V4dGVudChwYXJlbnQpOworCQlpZiAoc3RhcnQgPCBleHQtPnN0YXJ0KSB7CisJCQluID0gJigqbiktPnJiX2xlZnQ7CisJCX0gZWxzZSBpZiAoc3RhcnQgPj0gKGV4dC0+c3RhcnQgKyBleHQtPmNvdW50KSkgeworCQkJbiA9ICYoKm4pLT5yYl9yaWdodDsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9CisKKwltZW1zZXQob3V0LCAwLCAobnVtICsgNykgPj4gMyk7CisKKwlmb3IgKDsgcGFyZW50ICE9IE5VTEw7IHBhcmVudCA9IG5leHQpIHsKKwkJbmV4dCA9IGV4dDJmc19yYl9uZXh0KHBhcmVudCk7CisJCWV4dCA9IG5vZGVfdG9fZXh0ZW50KHBhcmVudCk7CisKKwkJcG9zID0gZXh0LT5zdGFydDsKKwkJY291bnQgPSBleHQtPmNvdW50OworCQlpZiAocG9zID49IHN0YXJ0ICsgbnVtKQorCQkJYnJlYWs7CisJCWlmIChwb3MgPCBzdGFydCkgeworCQkJY291bnQgLT0gc3RhcnQgLSBwb3M7CisJCQlpZiAoY291bnQgPCAwKQorCQkJCWNvbnRpbnVlOworCQkJcG9zID0gc3RhcnQ7CisJCX0KKwkJaWYgKHBvcyArIGNvdW50ID4gc3RhcnQgKyBudW0pCisJCQljb3VudCA9IHN0YXJ0ICsgbnVtIC0gcG9zOworCisJCXdoaWxlIChjb3VudCA+IDApIHsKKwkJCWlmICgoY291bnQgPj0gOCkgJiYKKwkJCSAgICAoKHBvcyAtIHN0YXJ0KSAlIDgpID09IDApIHsKKwkJCQlpbnQgbmJ5dGVzID0gY291bnQgPj4gMzsKKwkJCQlpbnQgb2Zmc2V0ID0gKHBvcyAtIHN0YXJ0KSA+PiAzOworCisJCQkJbWVtc2V0KCgoY2hhciAqKSBvdXQpICsgb2Zmc2V0LCAweEZGLCBuYnl0ZXMpOworCQkJCXBvcyArPSBuYnl0ZXMgPDwgMzsKKwkJCQljb3VudCAtPSBuYnl0ZXMgPDwgMzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWV4dDJmc19mYXN0X3NldF9iaXQ2NCgocG9zIC0gc3RhcnQpLCBvdXQpOworCQkJcG9zKys7CisJCQljb3VudC0tOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByYl9jbGVhcl9ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXApCit7CisJc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICpicDsKKworCWJwID0gKHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqKSBiaXRtYXAtPnByaXZhdGU7CisKKwlyYl9mcmVlX3RyZWUoJmJwLT5yb290KTsKKwlicC0+cmN1cnNvciA9IE5VTEw7CisJYnAtPnJjdXJzb3JfbmV4dCA9IE5VTEw7CisJYnAtPndjdXJzb3IgPSBOVUxMOworCWNoZWNrX3RyZWUoJmJwLT5yb290LCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgcmJfZmluZF9maXJzdF96ZXJvKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgX191NjQgc3RhcnQsIF9fdTY0IGVuZCwgX191NjQgKm91dCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTCwgKipuOworCXN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqYnA7CisJc3RydWN0IGJtYXBfcmJfZXh0ZW50ICpleHQ7CisKKwlicCA9IChzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKikgYml0bWFwLT5wcml2YXRlOworCW4gPSAmYnAtPnJvb3QucmJfbm9kZTsKKwlzdGFydCAtPSBiaXRtYXAtPnN0YXJ0OworCWVuZCAtPSBiaXRtYXAtPnN0YXJ0OworCisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gRUlOVkFMOworCisJaWYgKEVYVDJGU19SQl9FTVBUWV9ST09UKCZicC0+cm9vdCkpCisJCXJldHVybiBFTk9FTlQ7CisKKwl3aGlsZSAoKm4pIHsKKwkJcGFyZW50ID0gKm47CisJCWV4dCA9IG5vZGVfdG9fZXh0ZW50KHBhcmVudCk7CisJCWlmIChzdGFydCA8IGV4dC0+c3RhcnQpIHsKKwkJCW4gPSAmKCpuKS0+cmJfbGVmdDsKKwkJfSBlbHNlIGlmIChzdGFydCA+PSAoZXh0LT5zdGFydCArIGV4dC0+Y291bnQpKSB7CisJCQluID0gJigqbiktPnJiX3JpZ2h0OworCQl9IGVsc2UgaWYgKGV4dC0+c3RhcnQgKyBleHQtPmNvdW50IDw9IGVuZCkgeworCQkJKm91dCA9IGV4dC0+c3RhcnQgKyBleHQtPmNvdW50ICsgYml0bWFwLT5zdGFydDsKKwkJCXJldHVybiAwOworCQl9IGVsc2UKKwkJCXJldHVybiBFTk9FTlQ7CisJfQorCisJKm91dCA9IHN0YXJ0ICsgYml0bWFwLT5zdGFydDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCByYl9maW5kX2ZpcnN0X3NldChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCSAgIF9fdTY0IHN0YXJ0LCBfX3U2NCBlbmQsIF9fdTY0ICpvdXQpCit7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEwsICoqbjsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKmJwOworCXN0cnVjdCBibWFwX3JiX2V4dGVudCAqZXh0OworCisJYnAgPSAoc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICopIGJpdG1hcC0+cHJpdmF0ZTsKKwluID0gJmJwLT5yb290LnJiX25vZGU7CisJc3RhcnQgLT0gYml0bWFwLT5zdGFydDsKKwllbmQgLT0gYml0bWFwLT5zdGFydDsKKworCWlmIChzdGFydCA+IGVuZCkKKwkJcmV0dXJuIEVJTlZBTDsKKworCWlmIChFWFQyRlNfUkJfRU1QVFlfUk9PVCgmYnAtPnJvb3QpKQorCQlyZXR1cm4gRU5PRU5UOworCisJd2hpbGUgKCpuKSB7CisJCXBhcmVudCA9ICpuOworCQlleHQgPSBub2RlX3RvX2V4dGVudChwYXJlbnQpOworCQlpZiAoc3RhcnQgPCBleHQtPnN0YXJ0KSB7CisJCQluID0gJigqbiktPnJiX2xlZnQ7CisJCX0gZWxzZSBpZiAoc3RhcnQgPj0gKGV4dC0+c3RhcnQgKyBleHQtPmNvdW50KSkgeworCQkJbiA9ICYoKm4pLT5yYl9yaWdodDsKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBzdGFydCBiaXQgaXMgc2V0ICovCisJCQkqb3V0ID0gc3RhcnQgKyBiaXRtYXAtPnN0YXJ0OworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlub2RlID0gcGFyZW50OworCWV4dCA9IG5vZGVfdG9fZXh0ZW50KG5vZGUpOworCWlmIChleHQtPnN0YXJ0IDwgc3RhcnQpIHsKKwkJbm9kZSA9IGV4dDJmc19yYl9uZXh0KG5vZGUpOworCQlpZiAobm9kZSA9PSBOVUxMKQorCQkJcmV0dXJuIEVOT0VOVDsKKwkJZXh0ID0gbm9kZV90b19leHRlbnQobm9kZSk7CisJfQorCWlmIChleHQtPnN0YXJ0IDw9IGVuZCkgeworCQkqb3V0ID0gZXh0LT5zdGFydCArIGJpdG1hcC0+c3RhcnQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gRU5PRU5UOworfQorCisjaWZkZWYgQk1BUF9TVEFUUworc3RhdGljIHZvaWQgcmJfcHJpbnRfc3RhdHMoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCkKK3sKKwlzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKmJwOworCXN0cnVjdCByYl9ub2RlICpub2RlID0gTlVMTDsKKwlzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKmV4dDsKKwlfX3U2NCBjb3VudCA9IDA7CisJX191NjQgbWF4X3NpemUgPSAwOworCV9fdTY0IG1pbl9zaXplID0gVUxPTkdfTUFYOworCV9fdTY0IHNpemUgPSAwLCBhdmdfc2l6ZSA9IDA7CisJZG91YmxlIGVmZjsKKyNpZmRlZiBCTUFQX1NUQVRTX09QUworCV9fdTY0IG1hcmtfYWxsLCB0ZXN0X2FsbDsKKwlkb3VibGUgbV9oaXQgPSAwLjAsIHRfaGl0ID0gMC4wOworI2VuZGlmCisKKwlicCA9IChzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKikgYml0bWFwLT5wcml2YXRlOworCisJZm9yIChub2RlID0gZXh0MmZzX3JiX2ZpcnN0KCZicC0+cm9vdCk7IG5vZGUgIT0gTlVMTDsKKwkgICAgIG5vZGUgPSBleHQyZnNfcmJfbmV4dChub2RlKSkgeworCQlleHQgPSBub2RlX3RvX2V4dGVudChub2RlKTsKKwkJY291bnQrKzsKKwkJaWYgKGV4dC0+Y291bnQgPiBtYXhfc2l6ZSkKKwkJCW1heF9zaXplID0gZXh0LT5jb3VudDsKKwkJaWYgKGV4dC0+Y291bnQgPCBtaW5fc2l6ZSkKKwkJCW1pbl9zaXplID0gZXh0LT5jb3VudDsKKwkJc2l6ZSArPSBleHQtPmNvdW50OworCX0KKworCWlmIChjb3VudCkKKwkJYXZnX3NpemUgPSBzaXplIC8gY291bnQ7CisJaWYgKG1pbl9zaXplID09IFVMT05HX01BWCkKKwkJbWluX3NpemUgPSAwOworCWVmZiA9IChkb3VibGUpKChjb3VudCAqIHNpemVvZihzdHJ1Y3QgYm1hcF9yYl9leHRlbnQpKSA8PCAzKSAvCisJICAgICAgKGJpdG1hcC0+cmVhbF9lbmQgLSBiaXRtYXAtPnN0YXJ0KTsKKyNpZmRlZiBCTUFQX1NUQVRTX09QUworCW1hcmtfYWxsID0gYml0bWFwLT5zdGF0cy5tYXJrX2NvdW50ICsgYml0bWFwLT5zdGF0cy5tYXJrX2V4dF9jb3VudDsKKwl0ZXN0X2FsbCA9IGJpdG1hcC0+c3RhdHMudGVzdF9jb3VudCArIGJpdG1hcC0+c3RhdHMudGVzdF9leHRfY291bnQ7CisJaWYgKG1hcmtfYWxsKQorCQltX2hpdCA9ICgoZG91YmxlKWJwLT5tYXJrX2hpdCAvIG1hcmtfYWxsKSAqIDEwMDsKKwlpZiAodGVzdF9hbGwpCisJCXRfaGl0ID0gKChkb3VibGUpYnAtPnRlc3RfaGl0IC8gdGVzdF9hbGwpICogMTAwOworCisJZnByaW50ZihzdGRlcnIsICIlMTZsbHUgY2FjaGUgaGl0cyBvbiB0ZXN0ICglLjJmJSUpXG4iCisJCSIlMTZsbHUgY2FjaGUgaGl0cyBvbiBtYXJrICglLjJmJSUpXG4iLAorCQlicC0+dGVzdF9oaXQsIHRfaGl0LCBicC0+bWFya19oaXQsIG1faGl0KTsKKyNlbmRpZgorCWZwcmludGYoc3RkZXJyLCAiJTE2bGx1IGV4dGVudHMgKCVsbHUgYnl0ZXMpXG4iLAorCQljb3VudCwgKChjb3VudCAqIHNpemVvZihzdHJ1Y3QgYm1hcF9yYl9leHRlbnQpKSArCisJCQlzaXplb2Yoc3RydWN0IGV4dDJmc19yYl9wcml2YXRlKSkpOworIAlmcHJpbnRmKHN0ZGVyciwgIiUxNmxsdSBiaXRzIG1pbmltdW0gc2l6ZVxuIiwKKwkJbWluX3NpemUpOworCWZwcmludGYoc3RkZXJyLCAiJTE2bGx1IGJpdHMgbWF4aW11bSBzaXplXG4iCisJCSIlMTZsbHUgYml0cyBhdmVyYWdlIHNpemVcbiIsCisJCW1heF9zaXplLCBhdmdfc2l6ZSk7CisJZnByaW50ZihzdGRlcnIsICIlMTZsbHUgYml0cyBzZXQgaW4gYml0bWFwIChvdXQgb2YgJWxsdSlcbiIsIHNpemUsCisJCWJpdG1hcC0+cmVhbF9lbmQgLSBiaXRtYXAtPnN0YXJ0KTsKKwlmcHJpbnRmKHN0ZGVyciwKKwkJIiUxNi40bGYgbWVtb3J5IC8gYml0bWFwIGJpdCBtZW1vcnkgcmF0aW8gKGJpdGFycmF5ID0gMSlcbiIsCisJCWVmZik7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgcmJfcHJpbnRfc3RhdHMoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCl7fQorI2VuZGlmCisKK3N0cnVjdCBleHQyX2JpdG1hcF9vcHMgZXh0MmZzX2Jsa21hcDY0X3JidHJlZSA9IHsKKwkudHlwZSA9IEVYVDJGU19CTUFQNjRfUkJUUkVFLAorCS5uZXdfYm1hcCA9IHJiX25ld19ibWFwLAorCS5mcmVlX2JtYXAgPSByYl9mcmVlX2JtYXAsCisJLmNvcHlfYm1hcCA9IHJiX2NvcHlfYm1hcCwKKwkucmVzaXplX2JtYXAgPSByYl9yZXNpemVfYm1hcCwKKwkubWFya19ibWFwID0gcmJfbWFya19ibWFwLAorCS51bm1hcmtfYm1hcCA9IHJiX3VubWFya19ibWFwLAorCS50ZXN0X2JtYXAgPSByYl90ZXN0X2JtYXAsCisJLnRlc3RfY2xlYXJfYm1hcF9leHRlbnQgPSByYl90ZXN0X2NsZWFyX2JtYXBfZXh0ZW50LAorCS5tYXJrX2JtYXBfZXh0ZW50ID0gcmJfbWFya19ibWFwX2V4dGVudCwKKwkudW5tYXJrX2JtYXBfZXh0ZW50ID0gcmJfdW5tYXJrX2JtYXBfZXh0ZW50LAorCS5zZXRfYm1hcF9yYW5nZSA9IHJiX3NldF9ibWFwX3JhbmdlLAorCS5nZXRfYm1hcF9yYW5nZSA9IHJiX2dldF9ibWFwX3JhbmdlLAorCS5jbGVhcl9ibWFwID0gcmJfY2xlYXJfYm1hcCwKKwkucHJpbnRfc3RhdHMgPSByYl9wcmludF9zdGF0cywKKwkuZmluZF9maXJzdF96ZXJvID0gcmJfZmluZF9maXJzdF96ZXJvLAorCS5maW5kX2ZpcnN0X3NldCA9IHJiX2ZpbmRfZmlyc3Rfc2V0LAorfTsKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvYmxrbnVtLmMgYi9saWIvZXh0MmZzL2Jsa251bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNjczMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2Jsa251bS5jCkBAIC0wLDAgKzEsNTIzIEBACisvKgorICogYmxrbnVtLmMgLS0tIEZ1bmN0aW9ucyB0byBoYW5kbGUgYmxrNjRfdCBhbmQgaGlnaC9sb3cgNjQtYml0IGJsb2NrCisgKiBudW1iZXIuCisgKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiwgMjAwNworICogQXV0aG9yIEpvc2UgUi4gU2FudG9zIDxqcnNAdXMuaWJtLmNvbT4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworLyoKKyAqIFJldHVybiB0aGUgZ3JvdXAgIyBvZiBhIGJsb2NrCisgKi8KK2RncnBfdCBleHQyZnNfZ3JvdXBfb2ZfYmxrMihleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibGspCit7CisJcmV0dXJuIChibGsgLSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgLworCQlmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZmlyc3QgYmxvY2sgKGluY2x1c2l2ZSkgaW4gYSBncm91cAorICovCitibGs2NF90IGV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCkKK3sKKwlyZXR1cm4gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2sgKworCQlFWFQyX0dST1VQU19UT19CTE9DS1MoZnMtPnN1cGVyLCBncm91cCk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGxhc3QgYmxvY2sgKGluY2x1c2l2ZSkgaW4gYSBncm91cAorICovCitibGs2NF90IGV4dDJmc19ncm91cF9sYXN0X2Jsb2NrMihleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKQoreworCXJldHVybiAoZ3JvdXAgPT0gZnMtPmdyb3VwX2Rlc2NfY291bnQgLSAxID8KKwkJZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpIC0gMSA6CisJCWV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZnMsIGdyb3VwKSArCisJCQkoZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXAgLSAxKSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBibG9ja3MgaW4gYSBncm91cAorICovCitpbnQgZXh0MmZzX2dyb3VwX2Jsb2Nrc19jb3VudChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKQoreworCWludCBudW1fYmxvY2tzOworCisJaWYgKGdyb3VwID09IGZzLT5ncm91cF9kZXNjX2NvdW50IC0gMSkgeworCQludW1fYmxvY2tzID0gKGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtCisJCQkJZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spICUKKwkJCSAgICAgIGZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwOworCQlpZiAoIW51bV9ibG9ja3MpCisJCQludW1fYmxvY2tzID0gZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJfSBlbHNlCisJCW51bV9ibG9ja3MgPSBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKworCXJldHVybiBudW1fYmxvY2tzOworfQorCisvKgorICogUmV0dXJuIHRoZSBpbm9kZSBkYXRhIGJsb2NrIGNvdW50CisgKi8KK2JsazY0X3QgZXh0MmZzX2lub2RlX2RhdGFfYmxvY2tzMihleHQyX2ZpbHN5cyBmcywKKwkJCQkJc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKQoreworCXJldHVybiAoaW5vZGUtPmlfYmxvY2tzIHwKKwkJKChmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCQkgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSA/CisJCSAoX191NjQpIGlub2RlLT5vc2QyLmxpbnV4Mi5sX2lfYmxvY2tzX2hpIDw8IDMyIDogMCkpIC0KKwkJKGlub2RlLT5pX2ZpbGVfYWNsID8gZnMtPmJsb2Nrc2l6ZSA+PiA5IDogMCk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGlub2RlIGlfYmxvY2tzIGNvdW50CisgKi8KK2JsazY0X3QgZXh0MmZzX2lub2RlX2lfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLAorCQkJCQlzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIChpbm9kZS0+aV9ibG9ja3MgfAorCQkoKGZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJCSAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpID8KKwkJIChfX3U2NClpbm9kZS0+b3NkMi5saW51eDIubF9pX2Jsb2Nrc19oaSA8PCAzMiA6IDApKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZnMgYmxvY2sgY291bnQKKyAqLworYmxrNjRfdCBleHQyZnNfYmxvY2tzX2NvdW50KHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcikKK3sKKwlyZXR1cm4gc3VwZXItPnNfYmxvY2tzX2NvdW50IHwKKwkJKHN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQgPworCQkoX191NjQpIHN1cGVyLT5zX2Jsb2Nrc19jb3VudF9oaSA8PCAzMiA6IDApOworfQorCisvKgorICogU2V0IHRoZSBmcyBibG9jayBjb3VudAorICovCit2b2lkIGV4dDJmc19ibG9ja3NfY291bnRfc2V0KHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlciwgYmxrNjRfdCBibGspCit7CisJc3VwZXItPnNfYmxvY2tzX2NvdW50ID0gYmxrOworCWlmIChzdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKQorCQlzdXBlci0+c19ibG9ja3NfY291bnRfaGkgPSAoX191NjQpIGJsayA+PiAzMjsKK30KKworLyoKKyAqIEFkZCB0byB0aGUgY3VycmVudCBmcyBibG9jayBjb3VudAorICovCit2b2lkIGV4dDJmc19ibG9ja3NfY291bnRfYWRkKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlciwgYmxrNjRfdCBibGspCit7CisJYmxrNjRfdCB0bXA7CisJdG1wID0gZXh0MmZzX2Jsb2Nrc19jb3VudChzdXBlcikgKyBibGs7CisJZXh0MmZzX2Jsb2Nrc19jb3VudF9zZXQoc3VwZXIsIHRtcCk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGZzIHJlc2VydmVkIGJsb2NrIGNvdW50CisgKi8KK2JsazY0X3QgZXh0MmZzX3JfYmxvY2tzX2NvdW50KHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcikKK3sKKwlyZXR1cm4gc3VwZXItPnNfcl9ibG9ja3NfY291bnQgfAorCQkoc3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCA/CisJCShfX3U2NCkgc3VwZXItPnNfcl9ibG9ja3NfY291bnRfaGkgPDwgMzIgOiAwKTsKK30KKworLyoKKyAqIFNldCB0aGUgZnMgcmVzZXJ2ZWQgYmxvY2sgY291bnQKKyAqLwordm9pZCBleHQyZnNfcl9ibG9ja3NfY291bnRfc2V0KHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlciwgYmxrNjRfdCBibGspCit7CisJc3VwZXItPnNfcl9ibG9ja3NfY291bnQgPSBibGs7CisJaWYgKHN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpCisJCXN1cGVyLT5zX3JfYmxvY2tzX2NvdW50X2hpID0gKF9fdTY0KSBibGsgPj4gMzI7Cit9CisKKy8qCisgKiBBZGQgdG8gdGhlIGN1cnJlbnQgcmVzZXJ2ZWQgZnMgYmxvY2sgY291bnQKKyAqLwordm9pZCBleHQyZnNfcl9ibG9ja3NfY291bnRfYWRkKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlciwgYmxrNjRfdCBibGspCit7CisJYmxrNjRfdCB0bXA7CisJdG1wID0gZXh0MmZzX3JfYmxvY2tzX2NvdW50KHN1cGVyKSArIGJsazsKKwlleHQyZnNfcl9ibG9ja3NfY291bnRfc2V0KHN1cGVyLCB0bXApOworfQorCisvKgorICogUmV0dXJuIHRoZSBmcyBmcmVlIGJsb2NrIGNvdW50CisgKi8KK2JsazY0X3QgZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50KHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcikKK3sKKwlyZXR1cm4gc3VwZXItPnNfZnJlZV9ibG9ja3NfY291bnQgfAorCQkoc3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCA/CisJCShfX3U2NCkgc3VwZXItPnNfZnJlZV9ibG9ja3NfaGkgPDwgMzIgOiAwKTsKK30KKworLyoKKyAqIFNldCB0aGUgZnMgZnJlZSBibG9jayBjb3VudAorICovCit2b2lkIGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnN1cGVyLCBibGs2NF90IGJsaykKK3sKKwlzdXBlci0+c19mcmVlX2Jsb2Nrc19jb3VudCA9IGJsazsKKwlpZiAoc3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkKKwkJc3VwZXItPnNfZnJlZV9ibG9ja3NfaGkgPSAoX191NjQpIGJsayA+PiAzMjsKK30KKworLyoKKyAqIEFkZCB0byB0aGUgY3VycmVudCBmcmVlIGZzIGJsb2NrIGNvdW50CisgKi8KK3ZvaWQgZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X2FkZChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXIsIGJsazY0X3QgYmxrKQoreworCWJsazY0X3QgdG1wOworCXRtcCA9IGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChzdXBlcikgKyBibGs7CisJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X3NldChzdXBlciwgdG1wKTsKK30KKworLyoKKyAqIEdldCBhIHBvaW50ZXIgdG8gYSBibG9jayBncm91cCBkZXNjcmlwdG9yLiAgV2UgbmVlZCB0aGUgZXhwbGljaXQKKyAqIHBvaW50ZXIgdG8gdGhlIGdyb3VwIGRlc2MgZm9yIGNvZGUgdGhhdCBzd2FwcyBibG9jayBncm91cAorICogZGVzY3JpcHRvcnMgYmVmb3JlIHdyaXRpbmcgdGhlbSBvdXQsIGFzIGl0IHdhbnRzIHRvIG1ha2UgYSBjb3B5IGFuZAorICogZG8gdGhlIHN3YXAgdGhlcmUuCisgKi8KK3N0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKmV4dDJmc19ncm91cF9kZXNjKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgIHN0cnVjdCBvcGFxdWVfZXh0Ml9ncm91cF9kZXNjICpnZHAsCisJCQkJCSAgZGdycF90IGdyb3VwKQoreworCXJldHVybiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqKSgoY2hhciAqKWdkcCArCisJCQkJCSAgZ3JvdXAgKiBFWFQyX0RFU0NfU0laRShmcy0+c3VwZXIpKTsKK30KKworLyogRG8gdGhlIHNhbWUgYnV0IGFzIGFuIGV4dDQgZ3JvdXAgZGVzYyBmb3IgaW50ZXJuYWwgdXNlIGhlcmUgKi8KK3N0YXRpYyBzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpleHQ0ZnNfZ3JvdXBfZGVzYyhleHQyX2ZpbHN5cyBmcywKKwkJCQkJICBzdHJ1Y3Qgb3BhcXVlX2V4dDJfZ3JvdXBfZGVzYyAqZ2RwLAorCQkJCQkgIGRncnBfdCBncm91cCkKK3sKKwlyZXR1cm4gKHN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKilleHQyZnNfZ3JvdXBfZGVzYyhmcywgZ2RwLCBncm91cCk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGJsb2NrIGJpdG1hcCBibG9jayBvZiBhIGdyb3VwCisgKi8KK2JsazY0X3QgZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCkKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlyZXR1cm4gZ2RwLT5iZ19ibG9ja19iaXRtYXAgfAorCQkoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQKKwkJICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUID8KKwkJIChfX3U2NClnZHAtPmJnX2Jsb2NrX2JpdG1hcF9oaSA8PCAzMiA6IDApOworfQorCisvKgorICogU2V0IHRoZSBibG9jayBiaXRtYXAgYmxvY2sgb2YgYSBncm91cAorICovCit2b2lkIGV4dDJmc19ibG9ja19iaXRtYXBfbG9jX3NldChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwLCBibGs2NF90IGJsaykKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlnZHAtPmJnX2Jsb2NrX2JpdG1hcCA9IGJsazsKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpCisJCWdkcC0+YmdfYmxvY2tfYml0bWFwX2hpID0gKF9fdTY0KSBibGsgPj4gMzI7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGlub2RlIGJpdG1hcCBibG9jayBvZiBhIGdyb3VwCisgKi8KK2JsazY0X3QgZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCkKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlyZXR1cm4gZ2RwLT5iZ19pbm9kZV9iaXRtYXAgfAorCQkoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQKKwkJICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUID8KKwkJIChfX3U2NCkgZ2RwLT5iZ19pbm9kZV9iaXRtYXBfaGkgPDwgMzIgOiAwKTsKK30KKworLyoKKyAqIFNldCB0aGUgaW5vZGUgYml0bWFwIGJsb2NrIG9mIGEgZ3JvdXAKKyAqLwordm9pZCBleHQyZnNfaW5vZGVfYml0bWFwX2xvY19zZXQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgYmxrNjRfdCBibGspCit7CisJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwOworCisJZ2RwID0gZXh0NGZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBncm91cCk7CisJZ2RwLT5iZ19pbm9kZV9iaXRtYXAgPSBibGs7CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKQorCQlnZHAtPmJnX2lub2RlX2JpdG1hcF9oaSA9IChfX3U2NCkgYmxrID4+IDMyOworfQorCisvKgorICogUmV0dXJuIHRoZSBpbm9kZSB0YWJsZSBibG9jayBvZiBhIGdyb3VwCisgKi8KK2JsazY0X3QgZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKQoreworCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcDsKKworCWdkcCA9IGV4dDRmc19ncm91cF9kZXNjKGZzLCBmcy0+Z3JvdXBfZGVzYywgZ3JvdXApOworCXJldHVybiBnZHAtPmJnX2lub2RlX3RhYmxlIHwKKwkJKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0CisJCSAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCA/CisJCSAoX191NjQpIGdkcC0+YmdfaW5vZGVfdGFibGVfaGkgPDwgMzIgOiAwKTsKK30KKworLyoKKyAqIFNldCB0aGUgaW5vZGUgdGFibGUgYmxvY2sgb2YgYSBncm91cAorICovCit2b2lkIGV4dDJmc19pbm9kZV90YWJsZV9sb2Nfc2V0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsIGJsazY0X3QgYmxrKQoreworCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcDsKKworCWdkcCA9IGV4dDRmc19ncm91cF9kZXNjKGZzLCBmcy0+Z3JvdXBfZGVzYywgZ3JvdXApOworCWdkcC0+YmdfaW5vZGVfdGFibGUgPSBibGs7CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKQorCQlnZHAtPmJnX2lub2RlX3RhYmxlX2hpID0gKF9fdTY0KSBibGsgPj4gMzI7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGZyZWUgYmxvY2tzIGNvdW50IG9mIGEgZ3JvdXAKKyAqLworX191MzIgZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApCit7CisJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwOworCisJZ2RwID0gZXh0NGZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBncm91cCk7CisJcmV0dXJuIGdkcC0+YmdfZnJlZV9ibG9ja3NfY291bnQgfAorCQkoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQKKwkJICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUID8KKwkJIChfX3UzMikgZ2RwLT5iZ19mcmVlX2Jsb2Nrc19jb3VudF9oaSA8PCAxNiA6IDApOworfQorCisvKgorICogU2V0IHRoZSBmcmVlIGJsb2NrcyBjb3VudCBvZiBhIGdyb3VwCisgKi8KK3ZvaWQgZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50X3NldChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwLCBfX3UzMiBuKQoreworCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcDsKKworCWdkcCA9IGV4dDRmc19ncm91cF9kZXNjKGZzLCBmcy0+Z3JvdXBfZGVzYywgZ3JvdXApOworCWdkcC0+YmdfZnJlZV9ibG9ja3NfY291bnQgPSBuOworCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKQorCQlnZHAtPmJnX2ZyZWVfYmxvY2tzX2NvdW50X2hpID0gKF9fdTMyKSBuID4+IDE2OworfQorCisvKgorICogUmV0dXJuIHRoZSBmcmVlIGlub2RlcyBjb3VudCBvZiBhIGdyb3VwCisgKi8KK19fdTMyIGV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKQoreworCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcDsKKworCWdkcCA9IGV4dDRmc19ncm91cF9kZXNjKGZzLCBmcy0+Z3JvdXBfZGVzYywgZ3JvdXApOworCXJldHVybiBnZHAtPmJnX2ZyZWVfaW5vZGVzX2NvdW50IHwKKwkJKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0CisJCSAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCA/CisJCSAoX191MzIpIGdkcC0+YmdfZnJlZV9pbm9kZXNfY291bnRfaGkgPDwgMTYgOiAwKTsKK30KKworLyoKKyAqIFNldCB0aGUgZnJlZSBpbm9kZXMgY291bnQgb2YgYSBncm91cAorICovCit2b2lkIGV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudF9zZXQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgX191MzIgbikKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlnZHAtPmJnX2ZyZWVfaW5vZGVzX2NvdW50ID0gbjsKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpCisJCWdkcC0+YmdfZnJlZV9pbm9kZXNfY291bnRfaGkgPSAoX191MzIpIG4gPj4gMTY7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHVzZWQgZGlycyBjb3VudCBvZiBhIGdyb3VwCisgKi8KK19fdTMyIGV4dDJmc19iZ191c2VkX2RpcnNfY291bnQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCkKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlyZXR1cm4gZ2RwLT5iZ191c2VkX2RpcnNfY291bnQgfAorCQkoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQKKwkJICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUID8KKwkJIChfX3UzMikgZ2RwLT5iZ191c2VkX2RpcnNfY291bnRfaGkgPDwgMTYgOiAwKTsKK30KKworLyoKKyAqIFNldCB0aGUgdXNlZCBkaXJzIGNvdW50IG9mIGEgZ3JvdXAKKyAqLwordm9pZCBleHQyZnNfYmdfdXNlZF9kaXJzX2NvdW50X3NldChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwLCBfX3UzMiBuKQoreworCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcDsKKworCWdkcCA9IGV4dDRmc19ncm91cF9kZXNjKGZzLCBmcy0+Z3JvdXBfZGVzYywgZ3JvdXApOworCWdkcC0+YmdfdXNlZF9kaXJzX2NvdW50ID0gbjsKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpCisJCWdkcC0+YmdfdXNlZF9kaXJzX2NvdW50X2hpID0gKF9fdTMyKSBuID4+IDE2OworfQorCisvKgorICogUmV0dXJuIHRoZSB1bnVzZWQgaW5vZGVzIGNvdW50IG9mIGEgZ3JvdXAKKyAqLworX191MzIgZXh0MmZzX2JnX2l0YWJsZV91bnVzZWQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCkKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlyZXR1cm4gZ2RwLT5iZ19pdGFibGVfdW51c2VkIHwKKwkJKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0CisJCSAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCA/CisJCSAoX191MzIpIGdkcC0+YmdfaXRhYmxlX3VudXNlZF9oaSA8PCAxNiA6IDApOworfQorCisvKgorICogU2V0IHRoZSB1bnVzZWQgaW5vZGVzIGNvdW50IG9mIGEgZ3JvdXAKKyAqLwordm9pZCBleHQyZnNfYmdfaXRhYmxlX3VudXNlZF9zZXQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgX191MzIgbikKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlnZHAtPmJnX2l0YWJsZV91bnVzZWQgPSBuOworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkKKwkJZ2RwLT5iZ19pdGFibGVfdW51c2VkX2hpID0gKF9fdTMyKSBuID4+IDE2OworfQorCisvKgorICogR2V0IHRoZSBmbGFncyBmb3IgdGhpcyBibG9jayBncm91cAorICovCitfX3UxNiBleHQyZnNfYmdfZmxhZ3MoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCkKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlyZXR1cm4gZ2RwLT5iZ19mbGFnczsKK30KKworLyoKKyAqIFplcm8gb3V0IHRoZSBmbGFncyBmb3IgdGhpcyBibG9jayBncm91cAorICovCit2b2lkIGV4dDJmc19iZ19mbGFnc196YXAoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCkKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlnZHAtPmJnX2ZsYWdzID0gMDsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBHZXQgdGhlIHZhbHVlIG9mIGEgcGFydGljdWxhciBmbGFnIGZvciB0aGlzIGJsb2NrIGdyb3VwCisgKi8KK2ludCBleHQyZnNfYmdfZmxhZ3NfdGVzdChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwLCBfX3UxNiBiZ19mbGFnKQoreworCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcDsKKworCWdkcCA9IGV4dDRmc19ncm91cF9kZXNjKGZzLCBmcy0+Z3JvdXBfZGVzYywgZ3JvdXApOworCXJldHVybiBnZHAtPmJnX2ZsYWdzICYgYmdfZmxhZzsKK30KKworLyoKKyAqIFNldCBhIGZsYWcgb3Igc2V0IG9mIGZsYWdzIGZvciB0aGlzIGJsb2NrIGdyb3VwCisgKi8KK3ZvaWQgZXh0MmZzX2JnX2ZsYWdzX3NldChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwLCBfX3UxNiBiZ19mbGFncykKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlnZHAtPmJnX2ZsYWdzIHw9IGJnX2ZsYWdzOworCXJldHVybjsKK30KKworLyoKKyAqIENsZWFyIGEgZmxhZyBvciBzZXQgb2YgZmxhZ3MgZm9yIHRoaXMgYmxvY2sgZ3JvdXAKKyAqLwordm9pZCBleHQyZnNfYmdfZmxhZ3NfY2xlYXIoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgX191MTYgYmdfZmxhZ3MpCit7CisJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwOworCisJZ2RwID0gZXh0NGZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBncm91cCk7CisJZ2RwLT5iZ19mbGFncyAmPSB+YmdfZmxhZ3M7CisJcmV0dXJuOworfQorCisvKgorICogR2V0IHRoZSBjaGVja3N1bSBmb3IgdGhpcyBibG9jayBncm91cAorICovCitfX3UxNiBleHQyZnNfYmdfY2hlY2tzdW0oZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCkKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlyZXR1cm4gZ2RwLT5iZ19jaGVja3N1bTsKK30KKworLyoKKyAqIFNldCB0aGUgY2hlY2tzdW0gZm9yIHRoaXMgYmxvY2sgZ3JvdXAgdG8gYSBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgdmFsdWUKKyAqLwordm9pZCBleHQyZnNfYmdfY2hlY2tzdW1fc2V0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsIF9fdTE2IGNoZWNrc3VtKQoreworCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcDsKKworCWdkcCA9IGV4dDRmc19ncm91cF9kZXNjKGZzLCBmcy0+Z3JvdXBfZGVzYywgZ3JvdXApOworCWdkcC0+YmdfY2hlY2tzdW0gPSBjaGVja3N1bTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBHZXQgdGhlIGFjbCBibG9jayBvZiBhIGZpbGUKKyAqLworYmxrNjRfdCBleHQyZnNfZmlsZV9hY2xfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGNvbnN0IHN0cnVjdCBleHQyX2lub2RlICppbm9kZSkKK3sKKwlibGs2NF90CWJsayA9IGlub2RlLT5pX2ZpbGVfYWNsOworCisJaWYgKGZzICYmIGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKQorCQlibGsgfD0gKChfX3U2NCkgaW5vZGUtPm9zZDIubGludXgyLmxfaV9maWxlX2FjbF9oaWdoKSA8PCAzMjsKKwlyZXR1cm4gYmxrOworfQorCisvKgorICogU2V0IHRoZSBhY2wgYmxvY2sgb2YgYSBmaWxlCisgKi8KK3ZvaWQgZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrX3NldChleHQyX2ZpbHN5cyBmcywgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJICAgICAgIGJsazY0X3QgYmxrKQoreworCWlub2RlLT5pX2ZpbGVfYWNsID0gYmxrOworCWlmIChmcyAmJiBmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkKKwkJaW5vZGUtPm9zZDIubGludXgyLmxfaV9maWxlX2FjbF9oaWdoID0gKF9fdTY0KSBibGsgPj4gMzI7Cit9CisKKy8qCisgKiBTZXQgdGhlIHNpemUgb2YgdGhlIGlub2RlCisgKi8KK2VycmNvZGVfdCBleHQyZnNfaW5vZGVfc2l6ZV9zZXQoZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCQlleHQyX29mZjY0X3Qgc2l6ZSkKK3sKKwkvKiBPbmx5IHJlZ3VsYXIgZmlsZXMgZ2V0IHRvIGJlIGxhcmdlciB0aGFuIDRHQiAqLworCWlmICghTElOVVhfU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJiAoc2l6ZSA+PiAzMikpCisJCXJldHVybiBFWFQyX0VUX0ZJTEVfVE9PX0JJRzsKKworCS8qIElmIHdlJ3JlIHdyaXRpbmcgYSBsYXJnZSBmaWxlLCBzZXQgdGhlIGxhcmdlX2ZpbGUgZmxhZyAqLworCWlmIChMSU5VWF9TX0lTUkVHKGlub2RlLT5pX21vZGUpICYmCisJICAgIGV4dDJmc19uZWVkc19sYXJnZV9maWxlX2ZlYXR1cmUoc2l6ZSkgJiYKKwkgICAgKCFFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEUpIHx8CisJICAgICBmcy0+c3VwZXItPnNfcmV2X2xldmVsID09IEVYVDJfR09PRF9PTERfUkVWKSkgeworCQlmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgfD0KKwkJCQkJRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFOworCQlleHQyZnNfdXBkYXRlX2R5bmFtaWNfcmV2KGZzKTsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCX0KKworCWlub2RlLT5pX3NpemUgPSBzaXplICYgMHhmZmZmZmZmZjsKKwlpbm9kZS0+aV9zaXplX2hpZ2ggPSAoc2l6ZSA+PiAzMik7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9ibG9jay5jIGIvbGliL2V4dDJmcy9ibG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YzY4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2Jsb2NrLmMKQEAgLTAsMCArMSw2NTIgQEAKKy8qCisgKiBibG9jay5jIC0tLSBpdGVyYXRlIG92ZXIgYWxsIGJsb2NrcyBpbiBhbiBpbm9kZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKK3N0cnVjdCBibG9ja19jb250ZXh0IHsKKwlleHQyX2ZpbHN5cwlmczsKKwlpbnQgKCpmdW5jKShleHQyX2ZpbHN5cwlmcywKKwkJICAgIGJsazY0X3QJKmJsb2NrbnIsCisJCSAgICBlMl9ibGtjbnRfdAliY291bnQsCisJCSAgICBibGs2NF90CXJlZl9ibGssCisJCSAgICBpbnQJCXJlZl9vZmZzZXQsCisJCSAgICB2b2lkCSpwcml2X2RhdGEpOworCWUyX2Jsa2NudF90CWJjb3VudDsKKwlpbnQJCWJzaXplOworCWludAkJZmxhZ3M7CisJZXJyY29kZV90CWVycmNvZGU7CisJY2hhcgkqaW5kX2J1ZjsKKwljaGFyCSpkaW5kX2J1ZjsKKwljaGFyCSp0aW5kX2J1ZjsKKwl2b2lkCSpwcml2X2RhdGE7Cit9OworCisjZGVmaW5lIGNoZWNrX2Zvcl9yb192aW9sYXRpb25fcmV0dXJuKGN0eCwgcmV0KQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoKChjdHgpLT5mbGFncyAmIEJMT0NLX0ZMQUdfUkVBRF9PTkxZKSAmJgkJXAorCQkgICAgKChyZXQpICYgQkxPQ0tfQ0hBTkdFRCkpIHsJCQkJXAorCQkJKGN0eCktPmVycmNvZGUgPSBFWFQyX0VUX1JPX0JMT0NLX0lURVJBVEU7CVwKKwkJCXJldCB8PSBCTE9DS19BQk9SVCB8IEJMT0NLX0VSUk9SOwkJXAorCQkJcmV0dXJuIHJldDsJCQkJCVwKKwkJfQkJCQkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBjaGVja19mb3Jfcm9fdmlvbGF0aW9uX2dvdG8oY3R4LCByZXQsIGxhYmVsKQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICgoKGN0eCktPmZsYWdzICYgQkxPQ0tfRkxBR19SRUFEX09OTFkpICYmCQlcCisJCSAgICAoKHJldCkgJiBCTE9DS19DSEFOR0VEKSkgewkJCQlcCisJCQkoY3R4KS0+ZXJyY29kZSA9IEVYVDJfRVRfUk9fQkxPQ0tfSVRFUkFURTsJXAorCQkJcmV0IHw9IEJMT0NLX0FCT1JUIHwgQkxPQ0tfRVJST1I7CQlcCisJCQlnb3RvIGxhYmVsOwkJCQkJXAorCQl9CQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgaW50IGJsb2NrX2l0ZXJhdGVfaW5kKGJsa190ICppbmRfYmxvY2ssIGJsa190IHJlZl9ibG9jaywKKwkJCSAgICAgaW50IHJlZl9vZmZzZXQsIHN0cnVjdCBibG9ja19jb250ZXh0ICpjdHgpCit7CisJaW50CXJldCA9IDAsIGNoYW5nZWQgPSAwOworCWludAlpLCBmbGFncywgbGltaXQsIG9mZnNldDsKKwlibGtfdAkqYmxvY2tfbnI7CisJYmxrNjRfdAlibGs2NDsKKworCWxpbWl0ID0gY3R4LT5mcy0+YmxvY2tzaXplID4+IDI7CisJaWYgKCEoY3R4LT5mbGFncyAmIEJMT0NLX0ZMQUdfREVQVEhfVFJBVkVSU0UpICYmCisJICAgICEoY3R4LT5mbGFncyAmIEJMT0NLX0ZMQUdfREFUQV9PTkxZKSkgeworCQlibGs2NCA9ICppbmRfYmxvY2s7CisJCXJldCA9ICgqY3R4LT5mdW5jKShjdHgtPmZzLCAmYmxrNjQsCisJCQkJICAgQkxPQ0tfQ09VTlRfSU5ELCByZWZfYmxvY2ssCisJCQkJICAgcmVmX29mZnNldCwgY3R4LT5wcml2X2RhdGEpOworCQkqaW5kX2Jsb2NrID0gYmxrNjQ7CisJfQorCWNoZWNrX2Zvcl9yb192aW9sYXRpb25fcmV0dXJuKGN0eCwgcmV0KTsKKwlpZiAoISppbmRfYmxvY2sgfHwgKHJldCAmIEJMT0NLX0FCT1JUKSkgeworCQljdHgtPmJjb3VudCArPSBsaW1pdDsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKCppbmRfYmxvY2sgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChjdHgtPmZzLT5zdXBlcikgfHwKKwkgICAgKmluZF9ibG9jayA8IGN0eC0+ZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spIHsKKwkJY3R4LT5lcnJjb2RlID0gRVhUMl9FVF9CQURfSU5EX0JMT0NLOworCQlyZXQgfD0gQkxPQ0tfRVJST1I7CisJCXJldHVybiByZXQ7CisJfQorCWN0eC0+ZXJyY29kZSA9IGV4dDJmc19yZWFkX2luZF9ibG9jayhjdHgtPmZzLCAqaW5kX2Jsb2NrLAorCQkJCQkgICAgIGN0eC0+aW5kX2J1Zik7CisJaWYgKGN0eC0+ZXJyY29kZSkgeworCQlyZXQgfD0gQkxPQ0tfRVJST1I7CisJCXJldHVybiByZXQ7CisJfQorCisJYmxvY2tfbnIgPSAoYmxrX3QgKikgY3R4LT5pbmRfYnVmOworCW9mZnNldCA9IDA7CisJaWYgKGN0eC0+ZmxhZ3MgJiBCTE9DS19GTEFHX0FQUEVORCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbGltaXQ7IGkrKywgY3R4LT5iY291bnQrKywgYmxvY2tfbnIrKykgeworCQkJYmxrNjQgPSAqYmxvY2tfbnI7CisJCQlmbGFncyA9ICgqY3R4LT5mdW5jKShjdHgtPmZzLCAmYmxrNjQsIGN0eC0+YmNvdW50LAorCQkJCQkgICAgICppbmRfYmxvY2ssIG9mZnNldCwKKwkJCQkJICAgICBjdHgtPnByaXZfZGF0YSk7CisJCQkqYmxvY2tfbnIgPSBibGs2NDsKKwkJCWNoYW5nZWQJfD0gZmxhZ3M7CisJCQlpZiAoZmxhZ3MgJiBCTE9DS19BQk9SVCkgeworCQkJCXJldCB8PSBCTE9DS19BQk9SVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW9mZnNldCArPSBzaXplb2YoYmxrX3QpOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyssIGN0eC0+YmNvdW50KyssIGJsb2NrX25yKyspIHsKKwkJCWlmICgqYmxvY2tfbnIgPT0gMCkKKwkJCQlnb3RvIHNraXBfc3BhcnNlOworCQkJYmxrNjQgPSAqYmxvY2tfbnI7CisJCQlmbGFncyA9ICgqY3R4LT5mdW5jKShjdHgtPmZzLCAmYmxrNjQsIGN0eC0+YmNvdW50LAorCQkJCQkgICAgICppbmRfYmxvY2ssIG9mZnNldCwKKwkJCQkJICAgICBjdHgtPnByaXZfZGF0YSk7CisJCQkqYmxvY2tfbnIgPSBibGs2NDsKKwkJCWNoYW5nZWQJfD0gZmxhZ3M7CisJCQlpZiAoZmxhZ3MgJiBCTE9DS19BQk9SVCkgeworCQkJCXJldCB8PSBCTE9DS19BQk9SVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJc2tpcF9zcGFyc2U6CisJCQlvZmZzZXQgKz0gc2l6ZW9mKGJsa190KTsKKwkJfQorCX0KKwljaGVja19mb3Jfcm9fdmlvbGF0aW9uX3JldHVybihjdHgsIGNoYW5nZWQpOworCWlmIChjaGFuZ2VkICYgQkxPQ0tfQ0hBTkdFRCkgeworCQljdHgtPmVycmNvZGUgPSBleHQyZnNfd3JpdGVfaW5kX2Jsb2NrKGN0eC0+ZnMsICppbmRfYmxvY2ssCisJCQkJCQkgICAgICBjdHgtPmluZF9idWYpOworCQlpZiAoY3R4LT5lcnJjb2RlKQorCQkJcmV0IHw9IEJMT0NLX0VSUk9SIHwgQkxPQ0tfQUJPUlQ7CisJfQorCWlmICgoY3R4LT5mbGFncyAmIEJMT0NLX0ZMQUdfREVQVEhfVFJBVkVSU0UpICYmCisJICAgICEoY3R4LT5mbGFncyAmIEJMT0NLX0ZMQUdfREFUQV9PTkxZKSAmJgorCSAgICAhKHJldCAmIEJMT0NLX0FCT1JUKSkgeworCQlibGs2NCA9ICppbmRfYmxvY2s7CisJCXJldCB8PSAoKmN0eC0+ZnVuYykoY3R4LT5mcywgJmJsazY0LAorCQkJCSAgICBCTE9DS19DT1VOVF9JTkQsIHJlZl9ibG9jaywKKwkJCQkgICAgcmVmX29mZnNldCwgY3R4LT5wcml2X2RhdGEpOworCQkqaW5kX2Jsb2NrID0gYmxrNjQ7CisJfQorCWNoZWNrX2Zvcl9yb192aW9sYXRpb25fcmV0dXJuKGN0eCwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJsb2NrX2l0ZXJhdGVfZGluZChibGtfdCAqZGluZF9ibG9jaywgYmxrX3QgcmVmX2Jsb2NrLAorCQkJICAgICAgaW50IHJlZl9vZmZzZXQsIHN0cnVjdCBibG9ja19jb250ZXh0ICpjdHgpCit7CisJaW50CXJldCA9IDAsIGNoYW5nZWQgPSAwOworCWludAlpLCBmbGFncywgbGltaXQsIG9mZnNldDsKKwlibGtfdAkqYmxvY2tfbnI7CisJYmxrNjRfdAlibGs2NDsKKworCWxpbWl0ID0gY3R4LT5mcy0+YmxvY2tzaXplID4+IDI7CisJaWYgKCEoY3R4LT5mbGFncyAmIChCTE9DS19GTEFHX0RFUFRIX1RSQVZFUlNFIHwKKwkJCSAgICBCTE9DS19GTEFHX0RBVEFfT05MWSkpKSB7CisJCWJsazY0ID0gKmRpbmRfYmxvY2s7CisJCXJldCA9ICgqY3R4LT5mdW5jKShjdHgtPmZzLCAmYmxrNjQsCisJCQkJICAgQkxPQ0tfQ09VTlRfRElORCwgcmVmX2Jsb2NrLAorCQkJCSAgIHJlZl9vZmZzZXQsIGN0eC0+cHJpdl9kYXRhKTsKKwkJKmRpbmRfYmxvY2sgPSBibGs2NDsKKwl9CisJY2hlY2tfZm9yX3JvX3Zpb2xhdGlvbl9yZXR1cm4oY3R4LCByZXQpOworCWlmICghKmRpbmRfYmxvY2sgfHwgKHJldCAmIEJMT0NLX0FCT1JUKSkgeworCQljdHgtPmJjb3VudCArPSBsaW1pdCpsaW1pdDsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKCpkaW5kX2Jsb2NrID49IGV4dDJmc19ibG9ja3NfY291bnQoY3R4LT5mcy0+c3VwZXIpIHx8CisJICAgICpkaW5kX2Jsb2NrIDwgY3R4LT5mcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgeworCQljdHgtPmVycmNvZGUgPSBFWFQyX0VUX0JBRF9ESU5EX0JMT0NLOworCQlyZXQgfD0gQkxPQ0tfRVJST1I7CisJCXJldHVybiByZXQ7CisJfQorCWN0eC0+ZXJyY29kZSA9IGV4dDJmc19yZWFkX2luZF9ibG9jayhjdHgtPmZzLCAqZGluZF9ibG9jaywKKwkJCQkJICAgICBjdHgtPmRpbmRfYnVmKTsKKwlpZiAoY3R4LT5lcnJjb2RlKSB7CisJCXJldCB8PSBCTE9DS19FUlJPUjsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlibG9ja19uciA9IChibGtfdCAqKSBjdHgtPmRpbmRfYnVmOworCW9mZnNldCA9IDA7CisJaWYgKGN0eC0+ZmxhZ3MgJiBCTE9DS19GTEFHX0FQUEVORCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbGltaXQ7IGkrKywgYmxvY2tfbnIrKykgeworCQkJZmxhZ3MgPSBibG9ja19pdGVyYXRlX2luZChibG9ja19uciwKKwkJCQkJCSAgKmRpbmRfYmxvY2ssIG9mZnNldCwKKwkJCQkJCSAgY3R4KTsKKwkJCWNoYW5nZWQgfD0gZmxhZ3M7CisJCQlpZiAoZmxhZ3MgJiAoQkxPQ0tfQUJPUlQgfCBCTE9DS19FUlJPUikpIHsKKwkJCQlyZXQgfD0gZmxhZ3MgJiAoQkxPQ0tfQUJPUlQgfCBCTE9DS19FUlJPUik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlvZmZzZXQgKz0gc2l6ZW9mKGJsa190KTsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBsaW1pdDsgaSsrLCBibG9ja19ucisrKSB7CisJCQlpZiAoKmJsb2NrX25yID09IDApIHsKKwkJCQljdHgtPmJjb3VudCArPSBsaW1pdDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWZsYWdzID0gYmxvY2tfaXRlcmF0ZV9pbmQoYmxvY2tfbnIsCisJCQkJCQkgICpkaW5kX2Jsb2NrLCBvZmZzZXQsCisJCQkJCQkgIGN0eCk7CisJCQljaGFuZ2VkIHw9IGZsYWdzOworCQkJaWYgKGZsYWdzICYgKEJMT0NLX0FCT1JUIHwgQkxPQ0tfRVJST1IpKSB7CisJCQkJcmV0IHw9IGZsYWdzICYgKEJMT0NLX0FCT1JUIHwgQkxPQ0tfRVJST1IpOworCQkJCWJyZWFrOworCQkJfQorCQkJb2Zmc2V0ICs9IHNpemVvZihibGtfdCk7CisJCX0KKwl9CisJY2hlY2tfZm9yX3JvX3Zpb2xhdGlvbl9yZXR1cm4oY3R4LCBjaGFuZ2VkKTsKKwlpZiAoY2hhbmdlZCAmIEJMT0NLX0NIQU5HRUQpIHsKKwkJY3R4LT5lcnJjb2RlID0gZXh0MmZzX3dyaXRlX2luZF9ibG9jayhjdHgtPmZzLCAqZGluZF9ibG9jaywKKwkJCQkJCSAgICAgIGN0eC0+ZGluZF9idWYpOworCQlpZiAoY3R4LT5lcnJjb2RlKQorCQkJcmV0IHw9IEJMT0NLX0VSUk9SIHwgQkxPQ0tfQUJPUlQ7CisJfQorCWlmICgoY3R4LT5mbGFncyAmIEJMT0NLX0ZMQUdfREVQVEhfVFJBVkVSU0UpICYmCisJICAgICEoY3R4LT5mbGFncyAmIEJMT0NLX0ZMQUdfREFUQV9PTkxZKSAmJgorCSAgICAhKHJldCAmIEJMT0NLX0FCT1JUKSkgeworCQlibGs2NCA9ICpkaW5kX2Jsb2NrOworCQlyZXQgfD0gKCpjdHgtPmZ1bmMpKGN0eC0+ZnMsICZibGs2NCwKKwkJCQkgICAgQkxPQ0tfQ09VTlRfRElORCwgcmVmX2Jsb2NrLAorCQkJCSAgICByZWZfb2Zmc2V0LCBjdHgtPnByaXZfZGF0YSk7CisJCSpkaW5kX2Jsb2NrID0gYmxrNjQ7CisJfQorCWNoZWNrX2Zvcl9yb192aW9sYXRpb25fcmV0dXJuKGN0eCwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJsb2NrX2l0ZXJhdGVfdGluZChibGtfdCAqdGluZF9ibG9jaywgYmxrX3QgcmVmX2Jsb2NrLAorCQkJICAgICAgaW50IHJlZl9vZmZzZXQsIHN0cnVjdCBibG9ja19jb250ZXh0ICpjdHgpCit7CisJaW50CXJldCA9IDAsIGNoYW5nZWQgPSAwOworCWludAlpLCBmbGFncywgbGltaXQsIG9mZnNldDsKKwlibGtfdAkqYmxvY2tfbnI7CisJYmxrNjRfdAlibGs2NDsKKworCWxpbWl0ID0gY3R4LT5mcy0+YmxvY2tzaXplID4+IDI7CisJaWYgKCEoY3R4LT5mbGFncyAmIChCTE9DS19GTEFHX0RFUFRIX1RSQVZFUlNFIHwKKwkJCSAgICBCTE9DS19GTEFHX0RBVEFfT05MWSkpKSB7CisJCWJsazY0ID0gKnRpbmRfYmxvY2s7CisJCXJldCA9ICgqY3R4LT5mdW5jKShjdHgtPmZzLCAmYmxrNjQsCisJCQkJICAgQkxPQ0tfQ09VTlRfVElORCwgcmVmX2Jsb2NrLAorCQkJCSAgIHJlZl9vZmZzZXQsIGN0eC0+cHJpdl9kYXRhKTsKKwkJKnRpbmRfYmxvY2sgPSBibGs2NDsKKwl9CisJY2hlY2tfZm9yX3JvX3Zpb2xhdGlvbl9yZXR1cm4oY3R4LCByZXQpOworCWlmICghKnRpbmRfYmxvY2sgfHwgKHJldCAmIEJMT0NLX0FCT1JUKSkgeworCQljdHgtPmJjb3VudCArPSBsaW1pdCpsaW1pdCpsaW1pdDsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKCp0aW5kX2Jsb2NrID49IGV4dDJmc19ibG9ja3NfY291bnQoY3R4LT5mcy0+c3VwZXIpIHx8CisJICAgICp0aW5kX2Jsb2NrIDwgY3R4LT5mcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgeworCQljdHgtPmVycmNvZGUgPSBFWFQyX0VUX0JBRF9USU5EX0JMT0NLOworCQlyZXQgfD0gQkxPQ0tfRVJST1I7CisJCXJldHVybiByZXQ7CisJfQorCWN0eC0+ZXJyY29kZSA9IGV4dDJmc19yZWFkX2luZF9ibG9jayhjdHgtPmZzLCAqdGluZF9ibG9jaywKKwkJCQkJICAgICBjdHgtPnRpbmRfYnVmKTsKKwlpZiAoY3R4LT5lcnJjb2RlKSB7CisJCXJldCB8PSBCTE9DS19FUlJPUjsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlibG9ja19uciA9IChibGtfdCAqKSBjdHgtPnRpbmRfYnVmOworCW9mZnNldCA9IDA7CisJaWYgKGN0eC0+ZmxhZ3MgJiBCTE9DS19GTEFHX0FQUEVORCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbGltaXQ7IGkrKywgYmxvY2tfbnIrKykgeworCQkJZmxhZ3MgPSBibG9ja19pdGVyYXRlX2RpbmQoYmxvY2tfbnIsCisJCQkJCQkgICAqdGluZF9ibG9jaywKKwkJCQkJCSAgIG9mZnNldCwgY3R4KTsKKwkJCWNoYW5nZWQgfD0gZmxhZ3M7CisJCQlpZiAoZmxhZ3MgJiAoQkxPQ0tfQUJPUlQgfCBCTE9DS19FUlJPUikpIHsKKwkJCQlyZXQgfD0gZmxhZ3MgJiAoQkxPQ0tfQUJPUlQgfCBCTE9DS19FUlJPUik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlvZmZzZXQgKz0gc2l6ZW9mKGJsa190KTsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBsaW1pdDsgaSsrLCBibG9ja19ucisrKSB7CisJCQlpZiAoKmJsb2NrX25yID09IDApIHsKKwkJCQljdHgtPmJjb3VudCArPSBsaW1pdCpsaW1pdDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWZsYWdzID0gYmxvY2tfaXRlcmF0ZV9kaW5kKGJsb2NrX25yLAorCQkJCQkJICAgKnRpbmRfYmxvY2ssCisJCQkJCQkgICBvZmZzZXQsIGN0eCk7CisJCQljaGFuZ2VkIHw9IGZsYWdzOworCQkJaWYgKGZsYWdzICYgKEJMT0NLX0FCT1JUIHwgQkxPQ0tfRVJST1IpKSB7CisJCQkJcmV0IHw9IGZsYWdzICYgKEJMT0NLX0FCT1JUIHwgQkxPQ0tfRVJST1IpOworCQkJCWJyZWFrOworCQkJfQorCQkJb2Zmc2V0ICs9IHNpemVvZihibGtfdCk7CisJCX0KKwl9CisJY2hlY2tfZm9yX3JvX3Zpb2xhdGlvbl9yZXR1cm4oY3R4LCBjaGFuZ2VkKTsKKwlpZiAoY2hhbmdlZCAmIEJMT0NLX0NIQU5HRUQpIHsKKwkJY3R4LT5lcnJjb2RlID0gZXh0MmZzX3dyaXRlX2luZF9ibG9jayhjdHgtPmZzLCAqdGluZF9ibG9jaywKKwkJCQkJCSAgICAgIGN0eC0+dGluZF9idWYpOworCQlpZiAoY3R4LT5lcnJjb2RlKQorCQkJcmV0IHw9IEJMT0NLX0VSUk9SIHwgQkxPQ0tfQUJPUlQ7CisJfQorCWlmICgoY3R4LT5mbGFncyAmIEJMT0NLX0ZMQUdfREVQVEhfVFJBVkVSU0UpICYmCisJICAgICEoY3R4LT5mbGFncyAmIEJMT0NLX0ZMQUdfREFUQV9PTkxZKSAmJgorCSAgICAhKHJldCAmIEJMT0NLX0FCT1JUKSkgeworCQlibGs2NCA9ICp0aW5kX2Jsb2NrOworCQlyZXQgfD0gKCpjdHgtPmZ1bmMpKGN0eC0+ZnMsICZibGs2NCwKKwkJCQkgICAgQkxPQ0tfQ09VTlRfVElORCwgcmVmX2Jsb2NrLAorCQkJCSAgICByZWZfb2Zmc2V0LCBjdHgtPnByaXZfZGF0YSk7CisJCSp0aW5kX2Jsb2NrID0gYmxrNjQ7CisJfQorCWNoZWNrX2Zvcl9yb192aW9sYXRpb25fcmV0dXJuKGN0eCwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitlcnJjb2RlX3QgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGV4dDJfZmlsc3lzIGZzLAorCQkJCWV4dDJfaW5vX3QgaW5vLAorCQkJCWludAlmbGFncywKKwkJCQljaGFyICpibG9ja19idWYsCisJCQkJaW50ICgqZnVuYykoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgICBibGs2NF90CSpibG9ja25yLAorCQkJCQkgICAgZTJfYmxrY250X3QJYmxvY2tjbnQsCisJCQkJCSAgICBibGs2NF90CXJlZl9ibGssCisJCQkJCSAgICBpbnQJCXJlZl9vZmZzZXQsCisJCQkJCSAgICB2b2lkCSpwcml2X2RhdGEpLAorCQkJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwlpbnQJaTsKKwlpbnQJciwgcmV0ID0gMDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKwllcnJjb2RlX3QJcmV0dmFsOworCXN0cnVjdCBibG9ja19jb250ZXh0IGN0eDsKKwlpbnQJbGltaXQ7CisJYmxrNjRfdAlibGs2NDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwljdHguZXJyY29kZSA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBpbm8sICZpbm9kZSk7CisJaWYgKGN0eC5lcnJjb2RlKQorCQlyZXR1cm4gY3R4LmVycmNvZGU7CisKKwkvKgorCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGxpbWl0IGxhcmdlIGZpbGVzCisJICovCisJaWYgKGZsYWdzICYgQkxPQ0tfRkxBR19OT19MQVJHRSkgeworCQlpZiAoIUxJTlVYX1NfSVNESVIoaW5vZGUuaV9tb2RlKSAmJgorCQkgICAgKGlub2RlLmlfc2l6ZV9oaWdoICE9IDApKQorCQkJcmV0dXJuIEVYVDJfRVRfRklMRV9UT09fQklHOworCX0KKworCWxpbWl0ID0gZnMtPmJsb2Nrc2l6ZSA+PiAyOworCisJY3R4LmZzID0gZnM7CisJY3R4LmZ1bmMgPSBmdW5jOworCWN0eC5wcml2X2RhdGEgPSBwcml2X2RhdGE7CisJY3R4LmZsYWdzID0gZmxhZ3M7CisJY3R4LmJjb3VudCA9IDA7CisJaWYgKGJsb2NrX2J1ZikgeworCQljdHguaW5kX2J1ZiA9IGJsb2NrX2J1ZjsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KDMsIGZzLT5ibG9ja3NpemUsICZjdHguaW5kX2J1Zik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwljdHguZGluZF9idWYgPSBjdHguaW5kX2J1ZiArIGZzLT5ibG9ja3NpemU7CisJY3R4LnRpbmRfYnVmID0gY3R4LmRpbmRfYnVmICsgZnMtPmJsb2Nrc2l6ZTsKKworCS8qCisJICogSXRlcmF0ZSBvdmVyIHRoZSBIVVJEIHRyYW5zbGF0b3IgYmxvY2sgKGlmIHByZXNlbnQpCisJICovCisJaWYgKChmcy0+c3VwZXItPnNfY3JlYXRvcl9vcyA9PSBFWFQyX09TX0hVUkQpICYmCisJICAgICEoZmxhZ3MgJiBCTE9DS19GTEFHX0RBVEFfT05MWSkpIHsKKwkJaWYgKGlub2RlLm9zZDEuaHVyZDEuaF9pX3RyYW5zbGF0b3IpIHsKKwkJCWJsazY0ID0gaW5vZGUub3NkMS5odXJkMS5oX2lfdHJhbnNsYXRvcjsKKwkJCXJldCB8PSAoKmN0eC5mdW5jKShmcywgJmJsazY0LAorCQkJCQkgICBCTE9DS19DT1VOVF9UUkFOU0xBVE9SLAorCQkJCQkgICAwLCAwLCBwcml2X2RhdGEpOworCQkJaW5vZGUub3NkMS5odXJkMS5oX2lfdHJhbnNsYXRvciA9IChibGtfdCkgYmxrNjQ7CisJCQlpZiAocmV0ICYgQkxPQ0tfQUJPUlQpCisJCQkJZ290byBhYm9ydF9leGl0OworCQkJY2hlY2tfZm9yX3JvX3Zpb2xhdGlvbl9nb3RvKCZjdHgsIHJldCwgYWJvcnRfZXhpdCk7CisJCX0KKwl9CisKKwlpZiAoaW5vZGUuaV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkgeworCQlleHQyX2V4dGVudF9oYW5kbGVfdAloYW5kbGU7CisJCXN0cnVjdCBleHQyZnNfZXh0ZW50CWV4dGVudCwgbmV4dDsKKwkJZTJfYmxrY250X3QJCWJsb2NrY250ID0gMDsKKwkJYmxrNjRfdAkJCWJsaywgbmV3X2JsazsKKwkJaW50CQkJb3AgPSBFWFQyX0VYVEVOVF9ST09UOworCQlpbnQJCQl1bmluaXQ7CisJCXVuc2lnbmVkIGludAkJajsKKworCQljdHguZXJyY29kZSA9IGV4dDJmc19leHRlbnRfb3BlbjIoZnMsIGlubywgJmlub2RlLCAmaGFuZGxlKTsKKwkJaWYgKGN0eC5lcnJjb2RlKQorCQkJZ290byBhYm9ydF9leGl0OworCisJCXdoaWxlICgxKSB7CisJCQlpZiAob3AgPT0gRVhUMl9FWFRFTlRfQ1VSUkVOVCkKKwkJCQljdHguZXJyY29kZSA9IDA7CisJCQllbHNlCisJCQkJY3R4LmVycmNvZGUgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIG9wLAorCQkJCQkJCQkmZXh0ZW50KTsKKwkJCWlmIChjdHguZXJyY29kZSkgeworCQkJCWlmIChjdHguZXJyY29kZSAhPSBFWFQyX0VUX0VYVEVOVF9OT19ORVhUKQorCQkJCQlicmVhazsKKwkJCQljdHguZXJyY29kZSA9IDA7CisJCQkJaWYgKCEoZmxhZ3MgJiBCTE9DS19GTEFHX0FQUEVORCkpCisJCQkJCWJyZWFrOworCQkJbmV4dF9ibG9ja19zZXQ6CisJCQkJYmxrID0gMDsKKwkJCQlyID0gKCpjdHguZnVuYykoZnMsICZibGssIGJsb2NrY250LAorCQkJCQkJMCwgMCwgcHJpdl9kYXRhKTsKKwkJCQlyZXQgfD0gcjsKKwkJCQljaGVja19mb3Jfcm9fdmlvbGF0aW9uX2dvdG8oJmN0eCwgcmV0LAorCQkJCQkJCSAgICBleHRlbnRfZG9uZSk7CisJCQkJaWYgKHIgJiBCTE9DS19DSEFOR0VEKSB7CisJCQkJCWN0eC5lcnJjb2RlID0KKwkJCQkJCWV4dDJmc19leHRlbnRfc2V0X2JtYXAoaGFuZGxlLAorCQkJCQkJICAgICAgIChibGs2NF90KSBibG9ja2NudCsrLAorCQkJCQkJICAgICAgIChibGs2NF90KSBibGssIDApOworCQkJCQlpZiAoY3R4LmVycmNvZGUgfHwgKHJldCAmIEJMT0NLX0FCT1JUKSkKKwkJCQkJCWJyZWFrOworCQkJCQlpZiAoYmxrKQorCQkJCQkJZ290byBuZXh0X2Jsb2NrX3NldDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCW9wID0gRVhUMl9FWFRFTlRfTkVYVDsKKwkJCWJsayA9IGV4dGVudC5lX3BibGs7CisJCQlpZiAoIShleHRlbnQuZV9mbGFncyAmIEVYVDJfRVhURU5UX0ZMQUdTX0xFQUYpKSB7CisJCQkJaWYgKGN0eC5mbGFncyAmIEJMT0NLX0ZMQUdfREFUQV9PTkxZKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoKCEoZXh0ZW50LmVfZmxhZ3MgJgorCQkJCSAgICAgICBFWFQyX0VYVEVOVF9GTEFHU19TRUNPTkRfVklTSVQpICYmCisJCQkJICAgICAhKGN0eC5mbGFncyAmIEJMT0NLX0ZMQUdfREVQVEhfVFJBVkVSU0UpKSB8fAorCQkJCSAgICAoKGV4dGVudC5lX2ZsYWdzICYKKwkJCQkgICAgICBFWFQyX0VYVEVOVF9GTEFHU19TRUNPTkRfVklTSVQpICYmCisJCQkJICAgICAoY3R4LmZsYWdzICYgQkxPQ0tfRkxBR19ERVBUSF9UUkFWRVJTRSkpKSB7CisJCQkJCXJldCB8PSAoKmN0eC5mdW5jKShmcywgJmJsaywKKwkJCQkJCQkgICAtMSwgMCwgMCwgcHJpdl9kYXRhKTsKKwkJCQkJaWYgKHJldCAmIEJMT0NLX0NIQU5HRUQpIHsKKwkJCQkJCWV4dGVudC5lX3BibGsgPSBibGs7CisJCQkJCQljdHguZXJyY29kZSA9CisJCQkJZXh0MmZzX2V4dGVudF9yZXBsYWNlKGhhbmRsZSwgMCwgJmV4dGVudCk7CisJCQkJCQlpZiAoY3R4LmVycmNvZGUpCisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJaWYgKHJldCAmIEJMT0NLX0FCT1JUKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJfQorCQkJdW5pbml0ID0gMDsKKwkJCWlmIChleHRlbnQuZV9mbGFncyAmIEVYVDJfRVhURU5UX0ZMQUdTX1VOSU5JVCkKKwkJCQl1bmluaXQgPSBFWFQyX0VYVEVOVF9TRVRfQk1BUF9VTklOSVQ7CisKKwkJCS8qIAorCQkJICogR2V0IHRoZSBuZXh0IGV4dGVudCBiZWZvcmUgd2Ugc3RhcnQgbWVzc2luZworCQkJICogd2l0aCB0aGUgY3VycmVudCBleHRlbnQKKwkJCSAqLworCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBvcCwgJm5leHQpOworCisjaWYgMAorCQkJcHJpbnRmKCJsYmxrICVsbHUgcGJsayAlbGx1IGxlbiAlZCBibG9ja2NudCAlbGx1XG4iLAorCQkJICAgICAgIGV4dGVudC5lX2xibGssIGV4dGVudC5lX3BibGssCisJCQkgICAgICAgZXh0ZW50LmVfbGVuLCBibG9ja2NudCk7CisjZW5kaWYKKwkJCWlmIChleHRlbnQuZV9sYmxrICsgZXh0ZW50LmVfbGVuIDw9IChibGs2NF90KSBibG9ja2NudCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChleHRlbnQuZV9sYmxrID4gKGJsazY0X3QpIGJsb2NrY250KQorCQkJCWJsb2NrY250ID0gZXh0ZW50LmVfbGJsazsKKwkJCWogPSBibG9ja2NudCAtIGV4dGVudC5lX2xibGs7CisJCQlibGsgKz0gajsKKwkJCWZvciAoYmxvY2tjbnQgPSBleHRlbnQuZV9sYmxrLCBqID0gMDsKKwkJCSAgICAgaiA8IGV4dGVudC5lX2xlbjsKKwkJCSAgICAgYmxrKyssIGJsb2NrY250KyssIGorKykgeworCQkJCW5ld19ibGsgPSBibGs7CisJCQkJciA9ICgqY3R4LmZ1bmMpKGZzLCAmbmV3X2JsaywgYmxvY2tjbnQsCisJCQkJCQkwLCAwLCBwcml2X2RhdGEpOworCQkJCXJldCB8PSByOworCQkJCWNoZWNrX2Zvcl9yb192aW9sYXRpb25fZ290bygmY3R4LCByZXQsCisJCQkJCQkJICAgIGV4dGVudF9kb25lKTsKKwkJCQlpZiAociAmIEJMT0NLX0NIQU5HRUQpIHsKKwkJCQkJY3R4LmVycmNvZGUgPQorCQkJCQkJZXh0MmZzX2V4dGVudF9zZXRfYm1hcChoYW5kbGUsCisJCQkJCQkgICAgICAgKGJsazY0X3QpIGJsb2NrY250LAorCQkJCQkJICAgICAgIG5ld19ibGssIHVuaW5pdCk7CisJCQkJCWlmIChjdHguZXJyY29kZSkKKwkJCQkJCWdvdG8gZXh0ZW50X2RvbmU7CisJCQkJfQorCQkJCWlmIChyZXQgJiBCTE9DS19BQk9SVCkKKwkJCQkJZ290byBleHRlbnRfZG9uZTsKKwkJCX0KKwkJCWlmIChyZXR2YWwgPT0gMCkgeworCQkJCWV4dGVudCA9IG5leHQ7CisJCQkJb3AgPSBFWFQyX0VYVEVOVF9DVVJSRU5UOworCQkJfQorCQl9CisKKwlleHRlbnRfZG9uZToKKwkJZXh0MmZzX2V4dGVudF9mcmVlKGhhbmRsZSk7CisJCXJldCB8PSBCTE9DS19FUlJPUjsgLyogY3R4LmVycmNvZGUgaXMgYWx3YXlzIHZhbGlkIGhlcmUgKi8KKwkJZ290byBlcnJvdXQ7CisJfQorCisJLyoKKwkgKiBJdGVyYXRlIG92ZXIgbm9ybWFsIGRhdGEgYmxvY2tzCisJICovCisJZm9yIChpID0gMDsgaSA8IEVYVDJfTkRJUl9CTE9DS1MgOyBpKyssIGN0eC5iY291bnQrKykgeworCQlpZiAoaW5vZGUuaV9ibG9ja1tpXSB8fCAoZmxhZ3MgJiBCTE9DS19GTEFHX0FQUEVORCkpIHsKKwkJCWJsazY0ID0gaW5vZGUuaV9ibG9ja1tpXTsKKwkJCXJldCB8PSAoKmN0eC5mdW5jKShmcywgJmJsazY0LCBjdHguYmNvdW50LCAwLCBpLCAKKwkJCQkJICAgcHJpdl9kYXRhKTsKKwkJCWlub2RlLmlfYmxvY2tbaV0gPSAoYmxrX3QpIGJsazY0OworCQkJaWYgKHJldCAmIEJMT0NLX0FCT1JUKQorCQkJCWdvdG8gYWJvcnRfZXhpdDsKKwkJfQorCX0KKwljaGVja19mb3Jfcm9fdmlvbGF0aW9uX2dvdG8oJmN0eCwgcmV0LCBhYm9ydF9leGl0KTsKKwlpZiAoaW5vZGUuaV9ibG9ja1tFWFQyX0lORF9CTE9DS10gfHwgKGZsYWdzICYgQkxPQ0tfRkxBR19BUFBFTkQpKSB7CisJCXJldCB8PSBibG9ja19pdGVyYXRlX2luZCgmaW5vZGUuaV9ibG9ja1tFWFQyX0lORF9CTE9DS10sIAorCQkJCQkgMCwgRVhUMl9JTkRfQkxPQ0ssICZjdHgpOworCQlpZiAocmV0ICYgQkxPQ0tfQUJPUlQpCisJCQlnb3RvIGFib3J0X2V4aXQ7CisJfSBlbHNlCisJCWN0eC5iY291bnQgKz0gbGltaXQ7CisJaWYgKGlub2RlLmlfYmxvY2tbRVhUMl9ESU5EX0JMT0NLXSB8fCAoZmxhZ3MgJiBCTE9DS19GTEFHX0FQUEVORCkpIHsKKwkJcmV0IHw9IGJsb2NrX2l0ZXJhdGVfZGluZCgmaW5vZGUuaV9ibG9ja1tFWFQyX0RJTkRfQkxPQ0tdLAorCQkJCQkgIDAsIEVYVDJfRElORF9CTE9DSywgJmN0eCk7CisJCWlmIChyZXQgJiBCTE9DS19BQk9SVCkKKwkJCWdvdG8gYWJvcnRfZXhpdDsKKwl9IGVsc2UKKwkJY3R4LmJjb3VudCArPSBsaW1pdCAqIGxpbWl0OworCWlmIChpbm9kZS5pX2Jsb2NrW0VYVDJfVElORF9CTE9DS10gfHwgKGZsYWdzICYgQkxPQ0tfRkxBR19BUFBFTkQpKSB7CisJCXJldCB8PSBibG9ja19pdGVyYXRlX3RpbmQoJmlub2RlLmlfYmxvY2tbRVhUMl9USU5EX0JMT0NLXSwKKwkJCQkJICAwLCBFWFQyX1RJTkRfQkxPQ0ssICZjdHgpOworCQlpZiAocmV0ICYgQkxPQ0tfQUJPUlQpCisJCQlnb3RvIGFib3J0X2V4aXQ7CisJfQorCithYm9ydF9leGl0OgorCWlmIChyZXQgJiBCTE9DS19DSEFOR0VEKSB7CisJCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZShmcywgaW5vLCAmaW5vZGUpOworCQlpZiAocmV0dmFsKSB7CisJCQlyZXQgfD0gQkxPQ0tfRVJST1I7CisJCQljdHguZXJyY29kZSA9IHJldHZhbDsKKwkJfQorCX0KK2Vycm91dDoKKwlpZiAoIWJsb2NrX2J1ZikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZjdHguaW5kX2J1Zik7CisKKwlyZXR1cm4gKHJldCAmIEJMT0NLX0VSUk9SKSA/IGN0eC5lcnJjb2RlIDogMDsKK30KKworLyoKKyAqIEVtdWxhdGUgdGhlIG9sZCBleHQyZnNfYmxvY2tfaXRlcmF0ZSBmdW5jdGlvbiEKKyAqLworCitzdHJ1Y3QgeGxhdGU2NCB7CisJaW50ICgqZnVuYykoZXh0Ml9maWxzeXMgZnMsCisJCSAgICBibGtfdAkqYmxvY2tuciwKKwkJICAgIGUyX2Jsa2NudF90CWJsb2NrY250LAorCQkgICAgYmxrX3QJcmVmX2JsaywKKwkJICAgIGludAkJcmVmX29mZnNldCwKKwkJICAgIHZvaWQJKnByaXZfZGF0YSk7CisJdm9pZCAqcmVhbF9wcml2YXRlOworfTsKKworc3RhdGljIGludCB4bGF0ZTY0X2Z1bmMoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QJKmJsb2NrbnIsCisJCQllMl9ibGtjbnRfdCBibG9ja2NudCwgYmxrNjRfdCByZWZfYmxrLAorCQkJaW50IHJlZl9vZmZzZXQsIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgeGxhdGU2NCAqeGwgPSAoc3RydWN0IHhsYXRlNjQgKikgcHJpdl9kYXRhOworCWludAkJcmV0OworCWJsa190CQlibG9jazMyID0gKmJsb2NrbnI7CisJCisJcmV0ID0gKCp4bC0+ZnVuYykoZnMsICZibG9jazMyLCBibG9ja2NudCwgKGJsa190KSByZWZfYmxrLCByZWZfb2Zmc2V0LAorCQkJICAgICB4bC0+cmVhbF9wcml2YXRlKTsKKwkqYmxvY2tuciA9IGJsb2NrMzI7CisJcmV0dXJuIHJldDsKK30KKworZXJyY29kZV90IGV4dDJmc19ibG9ja19pdGVyYXRlMihleHQyX2ZpbHN5cyBmcywKKwkJCQlleHQyX2lub190IGlubywKKwkJCQlpbnQJZmxhZ3MsCisJCQkJY2hhciAqYmxvY2tfYnVmLAorCQkJCWludCAoKmZ1bmMpKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgICAgYmxrX3QJKmJsb2NrbnIsCisJCQkJCSAgICBlMl9ibGtjbnRfdAlibG9ja2NudCwKKwkJCQkJICAgIGJsa190CXJlZl9ibGssCisJCQkJCSAgICBpbnQJCXJlZl9vZmZzZXQsCisJCQkJCSAgICB2b2lkCSpwcml2X2RhdGEpLAorCQkJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgeGxhdGU2NCB4bDsKKworCXhsLnJlYWxfcHJpdmF0ZSA9IHByaXZfZGF0YTsKKwl4bC5mdW5jID0gZnVuYzsKKworCXJldHVybiBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIGlubywgZmxhZ3MsIGJsb2NrX2J1ZiwgCisJCQkJICAgICB4bGF0ZTY0X2Z1bmMsICZ4bCk7Cit9CisKKworc3RydWN0IHhsYXRlIHsKKwlpbnQgKCpmdW5jKShleHQyX2ZpbHN5cwlmcywKKwkJICAgIGJsa190CSpibG9ja25yLAorCQkgICAgaW50CQliY291bnQsCisJCSAgICB2b2lkCSpwcml2X2RhdGEpOworCXZvaWQgKnJlYWxfcHJpdmF0ZTsKK307CisKKyNpZmRlZiBfX1RVUkJPQ19fCisgI3ByYWdtYSBhcmdzdXNlZAorI2VuZGlmCitzdGF0aWMgaW50IHhsYXRlX2Z1bmMoZXh0Ml9maWxzeXMgZnMsIGJsa190ICpibG9ja25yLCBlMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJICAgICAgYmxrX3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgaW50IHJlZl9vZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHhsYXRlICp4bCA9IChzdHJ1Y3QgeGxhdGUgKikgcHJpdl9kYXRhOworCisJcmV0dXJuICgqeGwtPmZ1bmMpKGZzLCBibG9ja25yLCAoaW50KSBibG9ja2NudCwgeGwtPnJlYWxfcHJpdmF0ZSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfYmxvY2tfaXRlcmF0ZShleHQyX2ZpbHN5cyBmcywKKwkJCSAgICAgICBleHQyX2lub190IGlubywKKwkJCSAgICAgICBpbnQJZmxhZ3MsCisJCQkgICAgICAgY2hhciAqYmxvY2tfYnVmLAorCQkJICAgICAgIGludCAoKmZ1bmMpKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgICBibGtfdAkqYmxvY2tuciwKKwkJCQkJICAgaW50CWJsb2NrY250LAorCQkJCQkgICB2b2lkCSpwcml2X2RhdGEpLAorCQkJICAgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgeGxhdGUgeGw7CisKKwl4bC5yZWFsX3ByaXZhdGUgPSBwcml2X2RhdGE7CisJeGwuZnVuYyA9IGZ1bmM7CisKKwlyZXR1cm4gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUyKGZzLCBpbm8sIEJMT0NLX0ZMQUdfTk9fTEFSR0UgfCBmbGFncywKKwkJCQkgICAgIGJsb2NrX2J1ZiwgeGxhdGVfZnVuYywgJnhsKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9ibWFwLmMgYi9saWIvZXh0MmZzL2JtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGJiMDBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9ibWFwLmMKQEAgLTAsMCArMSw0NjIgQEAKKy8qCisgKiBibWFwLmMgLS0tIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwcGluZworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnNQLmgiCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChOT19JTkxJTkVfRlVOQ1MpCisjZGVmaW5lIF9CTUFQX0lOTElORV8JX19pbmxpbmVfXworI2Vsc2UKKyNkZWZpbmUgX0JNQVBfSU5MSU5FXworI2VuZGlmCisKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2JtYXAoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkgICAgIGNoYXIgKmJsb2NrX2J1ZiwgaW50IGJtYXBfZmxhZ3MsCisJCQkgICAgIGJsa190IGJsb2NrLCBibGtfdCAqcGh5c19ibGspOworCisjZGVmaW5lIGlub2RlX2JtYXAoaW5vZGUsIG5yKSAoKGlub2RlKS0+aV9ibG9ja1sobnIpXSkKKworc3RhdGljIF9CTUFQX0lOTElORV8gZXJyY29kZV90IGJsb2NrX2luZF9ibWFwKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmxhZ3MsCisJCQkJCSAgICAgIGJsa190IGluZCwgY2hhciAqYmxvY2tfYnVmLAorCQkJCQkgICAgICBpbnQgKmJsb2Nrc19hbGxvYywKKwkJCQkJICAgICAgYmxrX3QgbnIsIGJsa190ICpyZXRfYmxrKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrX3QJCWI7CisKKwlpZiAoIWluZCkgeworCQlpZiAoZmxhZ3MgJiBCTUFQX1NFVCkKKwkJCXJldHVybiBFWFQyX0VUX1NFVF9CTUFQX05PX0lORDsKKwkJKnJldF9ibGsgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2Jsayhmcy0+aW8sIGluZCwgMSwgYmxvY2tfYnVmKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKGZsYWdzICYgQk1BUF9TRVQpIHsKKwkJYiA9ICpyZXRfYmxrOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCQliID0gZXh0MmZzX3N3YWIzMihiKTsKKyNlbmRpZgorCQkoKGJsa190ICopIGJsb2NrX2J1ZilbbnJdID0gYjsKKwkJcmV0dXJuIGlvX2NoYW5uZWxfd3JpdGVfYmxrKGZzLT5pbywgaW5kLCAxLCBibG9ja19idWYpOworCX0KKworCWIgPSAoKGJsa190ICopIGJsb2NrX2J1ZilbbnJdOworCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJYiA9IGV4dDJmc19zd2FiMzIoYik7CisjZW5kaWYKKworCWlmICghYiAmJiAoZmxhZ3MgJiBCTUFQX0FMTE9DKSkgeworCQliID0gbnIgPyBleHQyZnNfbGUzMl90b19jcHUoKChibGtfdCAqKWJsb2NrX2J1ZilbbnIgLSAxXSkgOiBpbmQ7CisJCXJldHZhbCA9IGV4dDJmc19hbGxvY19ibG9jayhmcywgYiwKKwkJCQkJICAgIGJsb2NrX2J1ZiArIGZzLT5ibG9ja3NpemUsICZiKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJKChibGtfdCAqKSBibG9ja19idWYpW25yXSA9IGV4dDJmc19zd2FiMzIoYik7CisjZWxzZQorCQkoKGJsa190ICopIGJsb2NrX2J1ZilbbnJdID0gYjsKKyNlbmRpZgorCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrKGZzLT5pbywgaW5kLCAxLCBibG9ja19idWYpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKworCQkoKmJsb2Nrc19hbGxvYykrKzsKKwl9CisKKwkqcmV0X2JsayA9IGI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfQk1BUF9JTkxJTkVfIGVycmNvZGVfdCBibG9ja19kaW5kX2JtYXAoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncywKKwkJCQkJICAgICAgIGJsa190IGRpbmQsIGNoYXIgKmJsb2NrX2J1ZiwKKwkJCQkJICAgICAgIGludCAqYmxvY2tzX2FsbG9jLAorCQkJCQkgICAgICAgYmxrX3QgbnIsIGJsa190ICpyZXRfYmxrKQoreworCWJsa190CQliID0gMDsKKwllcnJjb2RlX3QJcmV0dmFsOworCWJsa190CQlhZGRyX3Blcl9ibG9jazsKKworCWFkZHJfcGVyX2Jsb2NrID0gKGJsa190KSBmcy0+YmxvY2tzaXplID4+IDI7CisKKwlyZXR2YWwgPSBibG9ja19pbmRfYm1hcChmcywgZmxhZ3MgJiB+Qk1BUF9TRVQsIGRpbmQsIGJsb2NrX2J1ZiwKKwkJCQlibG9ja3NfYWxsb2MsIG5yIC8gYWRkcl9wZXJfYmxvY2ssICZiKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IGJsb2NrX2luZF9ibWFwKGZzLCBmbGFncywgYiwgYmxvY2tfYnVmLCBibG9ja3NfYWxsb2MsCisJCQkJbnIgJSBhZGRyX3Blcl9ibG9jaywgcmV0X2Jsayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIF9CTUFQX0lOTElORV8gZXJyY29kZV90IGJsb2NrX3RpbmRfYm1hcChleHQyX2ZpbHN5cyBmcywgaW50IGZsYWdzLAorCQkJCQkgICAgICAgYmxrX3QgdGluZCwgY2hhciAqYmxvY2tfYnVmLAorCQkJCQkgICAgICAgaW50ICpibG9ja3NfYWxsb2MsCisJCQkJCSAgICAgICBibGtfdCBuciwgYmxrX3QgKnJldF9ibGspCit7CisJYmxrX3QJCWIgPSAwOworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrX3QJCWFkZHJfcGVyX2Jsb2NrOworCisJYWRkcl9wZXJfYmxvY2sgPSAoYmxrX3QpIGZzLT5ibG9ja3NpemUgPj4gMjsKKworCXJldHZhbCA9IGJsb2NrX2RpbmRfYm1hcChmcywgZmxhZ3MgJiB+Qk1BUF9TRVQsIHRpbmQsIGJsb2NrX2J1ZiwKKwkJCQkgYmxvY2tzX2FsbG9jLCBuciAvIGFkZHJfcGVyX2Jsb2NrLCAmYik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSBibG9ja19pbmRfYm1hcChmcywgZmxhZ3MsIGIsIGJsb2NrX2J1ZiwgYmxvY2tzX2FsbG9jLAorCQkJCW5yICUgYWRkcl9wZXJfYmxvY2ssIHJldF9ibGspOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgZXh0ZW50X2JtYXAoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkgICAgIGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSwKKwkJCSAgICAgY2hhciAqYmxvY2tfYnVmLCBpbnQgYm1hcF9mbGFncywgYmxrNjRfdCBibG9jaywKKwkJCSAgICAgaW50ICpyZXRfZmxhZ3MsIGludCAqYmxvY2tzX2FsbG9jLAorCQkJICAgICBibGs2NF90ICpwaHlzX2Jsayk7CisKK3N0YXRpYyBlcnJjb2RlX3QgaW1wbGllZF9jbHVzdGVyX2FsbG9jKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkgICAgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUsCisJCQkJICAgICAgIGJsazY0X3QgbGJsaywgYmxrNjRfdCAqcGh5c19ibGspCit7CisJYmxrNjRfdAliYXNlX2Jsb2NrLCBwYmxvY2sgPSAwOworCWludCBpOworCisJaWYgKCFFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpKQorCQlyZXR1cm4gMDsKKworCWJhc2VfYmxvY2sgPSBsYmxrICYgfkVYVDJGU19DTFVTVEVSX01BU0soZnMpOworCS8qCisJICogRXhjZXB0IGZvciB0aGUgbG9naWNhbCBibG9jayAobGJsaykgdGhhdCB3YXMgcGFzc2VkIGluLCBzZWFyY2ggYWxsCisJICogYmxvY2tzIGluIHRoaXMgbG9naWNhbCBjbHVzdGVyIGZvciBhIG1hcHBpbmcgdG8gYSBwaHlzaWNhbCBjbHVzdGVyLgorCSAqIElmIGFueSBzdWNoIG1hcCBleGlzdHMsIGNhbGN1bGF0ZSB0aGUgcGh5c2ljYWwgYmxvY2sgdGhhdCBtYXBzIHRvCisJICogdGhlIGxvZ2ljYWwgYmxvY2sgYW5kIHJldHVybiB0aGF0LgorCSAqCisJICogVGhlIG9sZCBjb2RlIHdvdWxkbid0IGV2ZW4gbG9vayBpZiAoYmxvY2sgJSBjbHVzdGVyX3JhdGlvKSA9PSAwOworCSAqIHRoaXMgaXMgaW5jb3JyZWN0IGlmIHdlJ3JlIGFsbG9jYXRpbmcgYmxvY2tzIGluIHJldmVyc2Ugb3JkZXIuCisJICovCisJZm9yIChpID0gMDsgaSA8IEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKTsgaSsrKSB7CisJCWlmIChiYXNlX2Jsb2NrICsgaSA9PSBsYmxrKQorCQkJY29udGludWU7CisJCWV4dGVudF9ibWFwKGZzLCBpbm8sIGlub2RlLCBoYW5kbGUsIDAsIDAsCisJCQkgICAgYmFzZV9ibG9jayArIGksIDAsIDAsICZwYmxvY2spOworCQlpZiAocGJsb2NrKQorCQkJYnJlYWs7CisJfQorCWlmIChwYmxvY2sgPT0gMCkKKwkJcmV0dXJuIDA7CisJKnBoeXNfYmxrID0gcGJsb2NrIC0gaSArIChsYmxrIC0gYmFzZV9ibG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRyeSB0byBtYXAgYSBsb2dpY2FsIGJsb2NrIHRvIGFuIGFscmVhZHktYWxsb2NhdGVkIHBoeXNpY2FsIGNsdXN0ZXIuICovCitlcnJjb2RlX3QgZXh0MmZzX21hcF9jbHVzdGVyX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIGJsazY0X3QgbGJsaywKKwkJCQkgICBibGs2NF90ICpwYmxrKQoreworCWV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZTsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJLyogTmVlZCBiaWdhbGxvYyBhbmQgZXh0ZW50cyB0byBiZSBlbmFibGVkICovCisJKnBibGsgPSAwOworCWlmICghRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0JJR0FMTE9DKSB8fAorCSAgICAhKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X29wZW4yKGZzLCBpbm8sIGlub2RlLCAmaGFuZGxlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKworCXJldHZhbCA9IGltcGxpZWRfY2x1c3Rlcl9hbGxvYyhmcywgaW5vLCBpbm9kZSwgaGFuZGxlLCBsYmxrLCBwYmxrKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDI7CisKK291dDI6CisJZXh0MmZzX2V4dGVudF9mcmVlKGhhbmRsZSk7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCBleHRlbnRfYm1hcChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCSAgICAgZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlLAorCQkJICAgICBjaGFyICpibG9ja19idWYsIGludCBibWFwX2ZsYWdzLCBibGs2NF90IGJsb2NrLAorCQkJICAgICBpbnQgKnJldF9mbGFncywgaW50ICpibG9ja3NfYWxsb2MsCisJCQkgICAgIGJsazY0X3QgKnBoeXNfYmxrKQoreworCXN0cnVjdCBleHQyZnNfZXh0ZW50CWV4dGVudDsKKwl1bnNpZ25lZCBpbnQJCW9mZnNldDsKKwllcnJjb2RlX3QJCXJldHZhbCA9IDA7CisJYmxrNjRfdAkJCWJsazY0ID0gMDsKKwlpbnQJCQlhbGxvYyA9IDA7CisKKwlpZiAoYm1hcF9mbGFncyAmIEJNQVBfU0VUKSB7CisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfc2V0X2JtYXAoaGFuZGxlLCBibG9jaywKKwkJCQkJCSpwaHlzX2JsaywgMCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ290byhoYW5kbGUsIGJsb2NrKTsKKwlpZiAocmV0dmFsKSB7CisJCS8qIElmIHRoZSBleHRlbnQgaXMgbm90IGZvdW5kLCByZXR1cm4gcGh5c19ibGsgPSAwICovCisJCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9FWFRFTlRfTk9UX0ZPVU5EKQorCQkJZ290byBnb3RfYmxvY2s7CisJCXJldHVybiByZXR2YWw7CisJfQorCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwgRVhUMl9FWFRFTlRfQ1VSUkVOVCwgJmV4dGVudCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlvZmZzZXQgPSBibG9jayAtIGV4dGVudC5lX2xibGs7CisJaWYgKGJsb2NrID49IGV4dGVudC5lX2xibGsgJiYgKG9mZnNldCA8PSBleHRlbnQuZV9sZW4pKSB7CisJCSpwaHlzX2JsayA9IGV4dGVudC5lX3BibGsgKyBvZmZzZXQ7CisJCWlmIChyZXRfZmxhZ3MgJiYgZXh0ZW50LmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19VTklOSVQpCisJCQkqcmV0X2ZsYWdzIHw9IEJNQVBfUkVUX1VOSU5JVDsKKwl9Citnb3RfYmxvY2s6CisJaWYgKCgqcGh5c19ibGsgPT0gMCkgJiYgKGJtYXBfZmxhZ3MgJiBCTUFQX0FMTE9DKSkgeworCQlpbXBsaWVkX2NsdXN0ZXJfYWxsb2MoZnMsIGlubywgaW5vZGUsIGhhbmRsZSwgYmxvY2ssICZibGs2NCk7CisJCWlmIChibGs2NCkKKwkJCWdvdG8gc2V0X2V4dGVudDsKKwkJcmV0dmFsID0gZXh0ZW50X2JtYXAoZnMsIGlubywgaW5vZGUsIGhhbmRsZSwgYmxvY2tfYnVmLAorCQkJCSAgICAgMCwgYmxvY2stMSwgMCwgYmxvY2tzX2FsbG9jLCAmYmxrNjQpOworCQlpZiAocmV0dmFsKQorCQkJYmxrNjQgPSAwOworCQlyZXR2YWwgPSBleHQyZnNfYWxsb2NfYmxvY2syKGZzLCBibGs2NCwgYmxvY2tfYnVmLAorCQkJCQkgICAgICZibGs2NCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlibGs2NCAmPSB+RVhUMkZTX0NMVVNURVJfTUFTSyhmcyk7CisJCWJsazY0ICs9IEVYVDJGU19DTFVTVEVSX01BU0soZnMpICYgYmxvY2s7CisJCWFsbG9jKys7CisJc2V0X2V4dGVudDoKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9zZXRfYm1hcChoYW5kbGUsIGJsb2NrLAorCQkJCQkJYmxrNjQsIDApOworCQlpZiAocmV0dmFsKSB7CisJCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBibGs2NCwgLTEpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQkvKiBVcGRhdGUgaW5vZGUgYWZ0ZXIgc2V0dGluZyBleHRlbnQgKi8KKwkJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIGlubywgaW5vZGUpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJKmJsb2Nrc19hbGxvYyArPSBhbGxvYzsKKwkJKnBoeXNfYmxrID0gYmxrNjQ7CisJfQorCXJldHVybiAwOworfQorCitpbnQgZXh0MmZzX2ZpbGVfYmxvY2tfb2Zmc2V0X3Rvb19iaWcoZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkJICAgICBibGs2NF90IG9mZnNldCkKK3sKKwlibGs2NF90IGFkZHJfcGVyX2Jsb2NrLCBtYXhfbWFwX2Jsb2NrOworCisJLyogS2VybmVsIHNlZW1zIHRvIGN1dCB1cyBvZmYgYXQgNDI5NDk2NzI5NCBibG9ja3MgKi8KKwlpZiAob2Zmc2V0ID49ICgxVUxMIDw8IDMyKSAtIDEpCisJCXJldHVybiAxOworCisJaWYgKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKQorCQlyZXR1cm4gMDsKKworCWFkZHJfcGVyX2Jsb2NrID0gZnMtPmJsb2Nrc2l6ZSA+PiAyOworCW1heF9tYXBfYmxvY2sgPSBhZGRyX3Blcl9ibG9jazsKKwltYXhfbWFwX2Jsb2NrICs9IGFkZHJfcGVyX2Jsb2NrICogYWRkcl9wZXJfYmxvY2s7CisJbWF4X21hcF9ibG9jayArPSBhZGRyX3Blcl9ibG9jayAqIGFkZHJfcGVyX2Jsb2NrICogYWRkcl9wZXJfYmxvY2s7CisJbWF4X21hcF9ibG9jayArPSAxMjsKKworCXJldHVybiBvZmZzZXQgPj0gbWF4X21hcF9ibG9jazsKK30KKworZXJyY29kZV90IGV4dDJmc19ibWFwMihleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJICAgICAgIGNoYXIgKmJsb2NrX2J1ZiwgaW50IGJtYXBfZmxhZ3MsIGJsazY0X3QgYmxvY2ssCisJCSAgICAgICBpbnQgKnJldF9mbGFncywgYmxrNjRfdCAqcGh5c19ibGspCit7CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGVfYnVmOworCWV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSA9IDA7CisJYmxrX3QgYWRkcl9wZXJfYmxvY2s7CisJYmxrX3QJYiwgYmxrMzI7CisJY2hhcgkqYnVmID0gMDsKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKwlpbnQJCWJsb2Nrc19hbGxvYyA9IDAsIGlub2RlX2RpcnR5ID0gMDsKKworCWlmICghKGJtYXBfZmxhZ3MgJiBCTUFQX1NFVCkpCisJCSpwaHlzX2JsayA9IDA7CisKKwlpZiAocmV0X2ZsYWdzKQorCQkqcmV0X2ZsYWdzID0gMDsKKworCS8qIFJlYWQgaW5vZGUgc3RydWN0dXJlIGlmIG5lY2Vzc2FyeSAqLworCWlmICghaW5vZGUpIHsKKwkJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIGlubywgJmlub2RlX2J1Zik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlpbm9kZSA9ICZpbm9kZV9idWY7CisJfQorCWFkZHJfcGVyX2Jsb2NrID0gKGJsa190KSBmcy0+YmxvY2tzaXplID4+IDI7CisKKwlpZiAoZXh0MmZzX2ZpbGVfYmxvY2tfb2Zmc2V0X3Rvb19iaWcoZnMsIGlub2RlLCBibG9jaykpCisJCXJldHVybiBFWFQyX0VUX0ZJTEVfVE9PX0JJRzsKKworCWlmICghYmxvY2tfYnVmKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfYXJyYXkoMiwgZnMtPmJsb2Nrc2l6ZSwgJmJ1Zik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlibG9ja19idWYgPSBidWY7CisJfQorCisJaWYgKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSB7CisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfb3BlbjIoZnMsIGlubywgaW5vZGUsICZoYW5kbGUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBkb25lOworCQlyZXR2YWwgPSBleHRlbnRfYm1hcChmcywgaW5vLCBpbm9kZSwgaGFuZGxlLCBibG9ja19idWYsCisJCQkJICAgICBibWFwX2ZsYWdzLCBibG9jaywgcmV0X2ZsYWdzLAorCQkJCSAgICAgJmJsb2Nrc19hbGxvYywgcGh5c19ibGspOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGJsb2NrIDwgRVhUMl9ORElSX0JMT0NLUykgeworCQlpZiAoYm1hcF9mbGFncyAmIEJNQVBfU0VUKSB7CisJCQliID0gKnBoeXNfYmxrOworCQkJaW5vZGVfYm1hcChpbm9kZSwgYmxvY2spID0gYjsKKwkJCWlub2RlX2RpcnR5Kys7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQkqcGh5c19ibGsgPSBpbm9kZV9ibWFwKGlub2RlLCBibG9jayk7CisJCWIgPSBibG9jayA/IGlub2RlX2JtYXAoaW5vZGUsIGJsb2NrLTEpIDogMDsKKworCQlpZiAoKCpwaHlzX2JsayA9PSAwKSAmJiAoYm1hcF9mbGFncyAmIEJNQVBfQUxMT0MpKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfYWxsb2NfYmxvY2soZnMsIGIsIGJsb2NrX2J1ZiwgJmIpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGRvbmU7CisJCQlpbm9kZV9ibWFwKGlub2RlLCBibG9jaykgPSBiOworCQkJYmxvY2tzX2FsbG9jKys7CisJCQkqcGh5c19ibGsgPSBiOworCQl9CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBJbmRpcmVjdCBibG9jayAqLworCWJsb2NrIC09IEVYVDJfTkRJUl9CTE9DS1M7CisJYmxrMzIgPSAqcGh5c19ibGs7CisJaWYgKGJsb2NrIDwgYWRkcl9wZXJfYmxvY2spIHsKKwkJYiA9IGlub2RlX2JtYXAoaW5vZGUsIEVYVDJfSU5EX0JMT0NLKTsKKwkJaWYgKCFiKSB7CisJCQlpZiAoIShibWFwX2ZsYWdzICYgQk1BUF9BTExPQykpIHsKKwkJCQlpZiAoYm1hcF9mbGFncyAmIEJNQVBfU0VUKQorCQkJCQlyZXR2YWwgPSBFWFQyX0VUX1NFVF9CTUFQX05PX0lORDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisKKwkJCWIgPSBpbm9kZV9ibWFwKGlub2RlLCBFWFQyX0lORF9CTE9DSy0xKTsKKyAJCQlyZXR2YWwgPSBleHQyZnNfYWxsb2NfYmxvY2soZnMsIGIsIGJsb2NrX2J1ZiwgJmIpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGRvbmU7CisJCQlpbm9kZV9ibWFwKGlub2RlLCBFWFQyX0lORF9CTE9DSykgPSBiOworCQkJYmxvY2tzX2FsbG9jKys7CisJCX0KKwkJcmV0dmFsID0gYmxvY2tfaW5kX2JtYXAoZnMsIGJtYXBfZmxhZ3MsIGIsIGJsb2NrX2J1ZiwKKwkJCQkJJmJsb2Nrc19hbGxvYywgYmxvY2ssICZibGszMik7CisJCWlmIChyZXR2YWwgPT0gMCkKKwkJCSpwaHlzX2JsayA9IGJsazMyOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogRG91Ymx5IGluZGlyZWN0IGJsb2NrICAqLworCWJsb2NrIC09IGFkZHJfcGVyX2Jsb2NrOworCWlmIChibG9jayA8IGFkZHJfcGVyX2Jsb2NrICogYWRkcl9wZXJfYmxvY2spIHsKKwkJYiA9IGlub2RlX2JtYXAoaW5vZGUsIEVYVDJfRElORF9CTE9DSyk7CisJCWlmICghYikgeworCQkJaWYgKCEoYm1hcF9mbGFncyAmIEJNQVBfQUxMT0MpKSB7CisJCQkJaWYgKGJtYXBfZmxhZ3MgJiBCTUFQX1NFVCkKKwkJCQkJcmV0dmFsID0gRVhUMl9FVF9TRVRfQk1BUF9OT19JTkQ7CisJCQkJZ290byBkb25lOworCQkJfQorCisJCQliID0gaW5vZGVfYm1hcChpbm9kZSwgRVhUMl9JTkRfQkxPQ0spOworIAkJCXJldHZhbCA9IGV4dDJmc19hbGxvY19ibG9jayhmcywgYiwgYmxvY2tfYnVmLCAmYik7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZG9uZTsKKwkJCWlub2RlX2JtYXAoaW5vZGUsIEVYVDJfRElORF9CTE9DSykgPSBiOworCQkJYmxvY2tzX2FsbG9jKys7CisJCX0KKwkJcmV0dmFsID0gYmxvY2tfZGluZF9ibWFwKGZzLCBibWFwX2ZsYWdzLCBiLCBibG9ja19idWYsCisJCQkJCSAmYmxvY2tzX2FsbG9jLCBibG9jaywgJmJsazMyKTsKKwkJaWYgKHJldHZhbCA9PSAwKQorCQkJKnBoeXNfYmxrID0gYmxrMzI7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBUcmlwbHkgaW5kaXJlY3QgYmxvY2sgKi8KKwlibG9jayAtPSBhZGRyX3Blcl9ibG9jayAqIGFkZHJfcGVyX2Jsb2NrOworCWIgPSBpbm9kZV9ibWFwKGlub2RlLCBFWFQyX1RJTkRfQkxPQ0spOworCWlmICghYikgeworCQlpZiAoIShibWFwX2ZsYWdzICYgQk1BUF9BTExPQykpIHsKKwkJCWlmIChibWFwX2ZsYWdzICYgQk1BUF9TRVQpCisJCQkJcmV0dmFsID0gRVhUMl9FVF9TRVRfQk1BUF9OT19JTkQ7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQliID0gaW5vZGVfYm1hcChpbm9kZSwgRVhUMl9ESU5EX0JMT0NLKTsKKwkJcmV0dmFsID0gZXh0MmZzX2FsbG9jX2Jsb2NrKGZzLCBiLCBibG9ja19idWYsICZiKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZG9uZTsKKwkJaW5vZGVfYm1hcChpbm9kZSwgRVhUMl9USU5EX0JMT0NLKSA9IGI7CisJCWJsb2Nrc19hbGxvYysrOworCX0KKwlyZXR2YWwgPSBibG9ja190aW5kX2JtYXAoZnMsIGJtYXBfZmxhZ3MsIGIsIGJsb2NrX2J1ZiwKKwkJCQkgJmJsb2Nrc19hbGxvYywgYmxvY2ssICZibGszMik7CisJaWYgKHJldHZhbCA9PSAwKQorCQkqcGh5c19ibGsgPSBibGszMjsKK2RvbmU6CisJaWYgKGJ1ZikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCWlmIChoYW5kbGUpCisJCWV4dDJmc19leHRlbnRfZnJlZShoYW5kbGUpOworCWlmICgocmV0dmFsID09IDApICYmIChibG9ja3NfYWxsb2MgfHwgaW5vZGVfZGlydHkpKSB7CisJCWV4dDJmc19pYmxrX2FkZF9ibG9ja3MoZnMsIGlub2RlLCBibG9ja3NfYWxsb2MpOworCQlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoZnMsIGlubywgaW5vZGUpOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2JtYXAoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCSAgICAgIGNoYXIgKmJsb2NrX2J1ZiwgaW50IGJtYXBfZmxhZ3MsIGJsa190IGJsb2NrLAorCQkgICAgICBibGtfdCAqcGh5c19ibGspCit7CisJZXJyY29kZV90IHJldDsKKwlibGs2NF90CXJldF9ibGsgPSAqcGh5c19ibGs7CisKKwlyZXQgPSBleHQyZnNfYm1hcDIoZnMsIGlubywgaW5vZGUsIGJsb2NrX2J1ZiwgYm1hcF9mbGFncywgYmxvY2ssCisJCQkgICAgMCwgJnJldF9ibGspOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJaWYgKHJldF9ibGsgPj0gKChsb25nIGxvbmcpIDEgPDwgMzIpKQorCQlyZXR1cm4gRU9WRVJGTE9XOworCSpwaHlzX2JsayA9IHJldF9ibGs7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2JtYXA2NC5oIGIvbGliL2V4dDJmcy9ibWFwNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGViYTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9ibWFwNjQuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIGJtYXA2NC5oIC0tLSA2NC1iaXQgYml0bWFwIHN0cnVjdHVyZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworc3RydWN0IGV4dDJfYm1hcF9zdGF0aXN0aWNzIHsKKwlpbnQJCXR5cGU7CisJc3RydWN0IHRpbWV2YWwJY3JlYXRlZDsKKworI2lmZGVmIEJNQVBfU1RBVFNfT1BTCisJdW5zaWduZWQgbG9uZwljb3B5X2NvdW50OworCXVuc2lnbmVkIGxvbmcJcmVzaXplX2NvdW50OworCXVuc2lnbmVkIGxvbmcJbWFya19jb3VudDsKKwl1bnNpZ25lZCBsb25nCXVubWFya19jb3VudDsKKwl1bnNpZ25lZCBsb25nCXRlc3RfY291bnQ7CisJdW5zaWduZWQgbG9uZwltYXJrX2V4dF9jb3VudDsKKwl1bnNpZ25lZCBsb25nCXVubWFya19leHRfY291bnQ7CisJdW5zaWduZWQgbG9uZwl0ZXN0X2V4dF9jb3VudDsKKwl1bnNpZ25lZCBsb25nCXNldF9yYW5nZV9jb3VudDsKKwl1bnNpZ25lZCBsb25nCWdldF9yYW5nZV9jb3VudDsKKwl1bnNpZ25lZCBsb25nCWNsZWFyX2NvdW50OworCisJYmxrNjRfdAkJbGFzdF9tYXJrZWQ7CisJYmxrNjRfdAkJbGFzdF90ZXN0ZWQ7CisJYmxrNjRfdAkJbWFya19iYWNrOworCWJsazY0X3QJCXRlc3RfYmFjazsKKworCXVuc2lnbmVkIGxvbmcJbWFya19zZXE7CisJdW5zaWduZWQgbG9uZwl0ZXN0X3NlcTsKKyNlbmRpZiAvKiBCTUFQX1NUQVRTX09QUyAqLworfTsKKworCitzdHJ1Y3QgZXh0MmZzX3N0cnVjdF9nZW5lcmljX2JpdG1hcCB7CisJZXJyY29kZV90CQltYWdpYzsKKwlleHQyX2ZpbHN5cyAJCWZzOworCXN0cnVjdCBleHQyX2JpdG1hcF9vcHMJKmJpdG1hcF9vcHM7CisJaW50CQkJZmxhZ3M7CisJX191NjQJCQlzdGFydCwgZW5kOworCV9fdTY0CQkJcmVhbF9lbmQ7CisJaW50CQkJY2x1c3Rlcl9iaXRzOworCWNoYXIJCQkqZGVzY3JpcHRpb247CisJdm9pZAkJCSpwcml2YXRlOworCWVycmNvZGVfdAkJYmFzZV9lcnJvcl9jb2RlOworI2lmZGVmIEJNQVBfU1RBVFMKKwlzdHJ1Y3QgZXh0Ml9ibWFwX3N0YXRpc3RpY3MJc3RhdHM7CisjZW5kaWYKK307CisKKyNkZWZpbmUgRVhUMkZTX0lTXzMyX0JJVE1BUChibWFwKSBcCisJKCgoYm1hcCktPm1hZ2ljID09IEVYVDJfRVRfTUFHSUNfR0VORVJJQ19CSVRNQVApIHx8IFwKKwkgKChibWFwKS0+bWFnaWMgPT0gRVhUMl9FVF9NQUdJQ19CTE9DS19CSVRNQVApIHx8IFwKKwkgKChibWFwKS0+bWFnaWMgPT0gRVhUMl9FVF9NQUdJQ19JTk9ERV9CSVRNQVApKQorCisjZGVmaW5lIEVYVDJGU19JU182NF9CSVRNQVAoYm1hcCkgXAorCSgoKGJtYXApLT5tYWdpYyA9PSBFWFQyX0VUX01BR0lDX0dFTkVSSUNfQklUTUFQNjQpIHx8IFwKKwkgKChibWFwKS0+bWFnaWMgPT0gRVhUMl9FVF9NQUdJQ19CTE9DS19CSVRNQVA2NCkgfHwgXAorCSAoKGJtYXApLT5tYWdpYyA9PSBFWFQyX0VUX01BR0lDX0lOT0RFX0JJVE1BUDY0KSkKKworc3RydWN0IGV4dDJfYml0bWFwX29wcyB7CisJaW50CXR5cGU7CisJLyogR2VuZXJpYyBibWFwIG9wZXJhdG9ycyAqLworCWVycmNvZGVfdCAoKm5ld19ibWFwKShleHQyX2ZpbHN5cyBmcywgZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXApOworCXZvaWQJKCpmcmVlX2JtYXApKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXApOworCWVycmNvZGVfdCAoKmNvcHlfYm1hcCkoZXh0MmZzX2dlbmVyaWNfYml0bWFwIHNyYywKKwkJCSAgICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwIGRlc3QpOworCWVycmNvZGVfdCAoKnJlc2l6ZV9ibWFwKShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJICAgICAgIF9fdTY0IG5ld19lbmQsCisJCQkgICAgICAgX191NjQgbmV3X3JlYWxfZW5kKTsKKwkvKiBiaXQgc2V0L3Rlc3Qgb3BlcmF0b3JzICovCisJaW50CSgqbWFya19ibWFwKShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLCBfX3U2NCBhcmcpOworCWludAkoKnVubWFya19ibWFwKShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLCBfX3U2NCBhcmcpOworCWludAkoKnRlc3RfYm1hcCkoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwgX191NjQgYXJnKTsKKwl2b2lkCSgqbWFya19ibWFwX2V4dGVudCkoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwgX191NjQgYXJnLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgbnVtKTsKKwl2b2lkCSgqdW5tYXJrX2JtYXBfZXh0ZW50KShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLCBfX3U2NCBhcmcsCisJCQkJICAgICAgdW5zaWduZWQgaW50IG51bSk7CisJaW50CSgqdGVzdF9jbGVhcl9ibWFwX2V4dGVudCkoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJICBfX3U2NCBhcmcsIHVuc2lnbmVkIGludCBudW0pOworCWVycmNvZGVfdCAoKnNldF9ibWFwX3JhbmdlKShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCSAgICBfX3U2NCBzdGFydCwgc2l6ZV90IG51bSwgdm9pZCAqaW4pOworCWVycmNvZGVfdCAoKmdldF9ibWFwX3JhbmdlKShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCSAgICBfX3U2NCBzdGFydCwgc2l6ZV90IG51bSwgdm9pZCAqb3V0KTsKKwl2b2lkICgqY2xlYXJfYm1hcCkoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCk7CisJdm9pZCAoKnByaW50X3N0YXRzKShleHQyZnNfZ2VuZXJpY19iaXRtYXApOworCisJLyogRmluZCB0aGUgZmlyc3QgemVybyBiaXQgYmV0d2VlbiBzdGFydCBhbmQgZW5kLCBpbmNsdXNpdmUuCisJICogTWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgYSBnZW5lcmljIGZ1bmN0aW9uIGlzIHVzZWQuICovCisJZXJyY29kZV90ICgqZmluZF9maXJzdF96ZXJvKShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgX191NjQgc3RhcnQsIF9fdTY0IGVuZCwgX191NjQgKm91dCk7CisJLyogRmluZCB0aGUgZmlyc3Qgc2V0IGJpdCBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQsIGluY2x1c2l2ZS4KKwkgKiBNYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBhIGdlbmVyaWMgZnVuY3Rpb24gaXMgdXNlZC4gKi8KKwllcnJjb2RlX3QgKCpmaW5kX2ZpcnN0X3NldCkoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgX191NjQgc3RhcnQsIF9fdTY0IGVuZCwgX191NjQgKm91dCk7Cit9OworCitleHRlcm4gc3RydWN0IGV4dDJfYml0bWFwX29wcyBleHQyZnNfYmxrbWFwNjRfYml0YXJyYXk7CitleHRlcm4gc3RydWN0IGV4dDJfYml0bWFwX29wcyBleHQyZnNfYmxrbWFwNjRfcmJ0cmVlOwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9ibW92ZS5jIGIvbGliL2V4dDJmcy9ibW92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZWE0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2Jtb3ZlLmMKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBibW92ZS5jIC0tLSBNb3ZlIGJsb2NrcyBhcm91bmQgdG8gbWFrZSB3YXkgZm9yIGEgcGFydGljdWxhcgorICogCWZpbGVzeXN0ZW0gc3RydWN0dXJlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmc1AuaCIKKworc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0IHsKKwlleHQyX2lub190CQlpbm87CisJc3RydWN0IGV4dDJfaW5vZGUgKglpbm9kZTsKKwlleHQyZnNfYmxvY2tfYml0bWFwCXJlc2VydmU7CisJZXh0MmZzX2Jsb2NrX2JpdG1hcAlhbGxvY19tYXA7CisJZXJyY29kZV90CQllcnJvcjsKKwljaGFyCQkJKmJ1ZjsKKwlpbnQJCQlhZGRfZGlyOworCWludAkJCWZsYWdzOworfTsKKworc3RhdGljIGludCBwcm9jZXNzX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90ICpibG9ja19uciwKKwkJCSBlMl9ibGtjbnRfdCBibG9ja2NudCwgYmxrNjRfdCByZWZfYmxvY2ssCisJCQkgaW50IHJlZl9vZmZzZXQsIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgKnBiOworCWVycmNvZGVfdAlyZXR2YWw7CisJaW50CQlyZXQ7CisJYmxrNjRfdAkJYmxvY2ssIG9yaWc7CisKKwlwYiA9IChzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgKikgcHJpdl9kYXRhOworCWJsb2NrID0gb3JpZyA9ICpibG9ja19ucjsKKwlyZXQgPSAwOworCisJLyoKKwkgKiBMZXQncyBzZWUgaWYgdGhpcyBpcyBvbmUgd2hpY2ggd2UgbmVlZCB0byByZWxvY2F0ZQorCSAqLworCWlmIChleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKHBiLT5yZXNlcnZlLCBibG9jaykpIHsKKwkJZG8geworCQkJaWYgKCsrYmxvY2sgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKQorCQkJCWJsb2NrID0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2s7CisJCQlpZiAoYmxvY2sgPT0gb3JpZykgeworCQkJCXBiLT5lcnJvciA9IEVYVDJfRVRfQkxPQ0tfQUxMT0NfRkFJTDsKKwkJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCQl9CisJCX0gd2hpbGUgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIocGItPnJlc2VydmUsIGJsb2NrKSB8fAorCQkJIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIocGItPmFsbG9jX21hcCwgYmxvY2spKTsKKworCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCBvcmlnLCAxLCBwYi0+YnVmKTsKKwkJaWYgKHJldHZhbCkgeworCQkJcGItPmVycm9yID0gcmV0dmFsOworCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQl9CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBibG9jaywgMSwgcGItPmJ1Zik7CisJCWlmIChyZXR2YWwpIHsKKwkJCXBiLT5lcnJvciA9IHJldHZhbDsKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJfQorCQkqYmxvY2tfbnIgPSBibG9jazsKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihwYi0+YWxsb2NfbWFwLCBibG9jayk7CisJCXJldCA9IEJMT0NLX0NIQU5HRUQ7CisJCWlmIChwYi0+ZmxhZ3MgJiBFWFQyX0JNT1ZFX0RFQlVHKQorCQkJcHJpbnRmKCJpbm89JXUsIGJsb2NrY250PSVsbGQsICVsbHUtPiVsbHVcbiIsCisJCQkgICAgICAgKHVuc2lnbmVkKSBwYi0+aW5vLCBibG9ja2NudCwgCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgb3JpZywKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBibG9jayk7CisJfQorCWlmIChwYi0+YWRkX2RpcikgeworCQlyZXR2YWwgPSBleHQyZnNfYWRkX2Rpcl9ibG9jazIoZnMtPmRibGlzdCwgcGItPmlubywKKwkJCQkJICAgICAgIGJsb2NrLCBibG9ja2NudCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCXBiLT5lcnJvciA9IHJldHZhbDsKKwkJCXJldCB8PSBCTE9DS19BQk9SVDsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitlcnJjb2RlX3QgZXh0MmZzX21vdmVfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgICBleHQyZnNfYmxvY2tfYml0bWFwIHJlc2VydmUsCisJCQkgICAgIGV4dDJmc19ibG9ja19iaXRtYXAgYWxsb2NfbWFwLAorCQkJICAgICBpbnQgZmxhZ3MpCit7CisJZXh0Ml9pbm9fdAlpbm87CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgcGI7CisJZXh0Ml9pbm9kZV9zY2FuCXNjYW47CisJY2hhcgkJKmJsb2NrX2J1ZjsKKworCXJldHZhbCA9IGV4dDJmc19vcGVuX2lub2RlX3NjYW4oZnMsIDAsICZzY2FuKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcGIucmVzZXJ2ZSA9IHJlc2VydmU7CisJcGIuZXJyb3IgPSAwOworCXBiLmFsbG9jX21hcCA9IGFsbG9jX21hcCA/IGFsbG9jX21hcCA6IGZzLT5ibG9ja19tYXA7CisJcGIuZmxhZ3MgPSBmbGFnczsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfYXJyYXkoNCwgZnMtPmJsb2Nrc2l6ZSwgJmJsb2NrX2J1Zik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlwYi5idWYgPSBibG9ja19idWYgKyBmcy0+YmxvY2tzaXplICogMzsKKworCS8qCisJICogSWYgR0VUX0RCTElTVCBpcyBzZXQgaW4gdGhlIGZsYWdzIGZpZWxkLCB0aGVuIHdlIHNob3VsZAorCSAqIGdhdGhlciBkaXJlY3RvcnkgYmxvY2sgaW5mb3JtYXRpb24gd2hpbGUgd2UncmUgZG9pbmcgdGhlCisJICogYmxvY2sgbW92ZS4KKwkgKi8KKwlpZiAoZmxhZ3MgJiBFWFQyX0JNT1ZFX0dFVF9EQkxJU1QpIHsKKwkJaWYgKGZzLT5kYmxpc3QpIHsKKwkJCWV4dDJmc19mcmVlX2RibGlzdChmcy0+ZGJsaXN0KTsKKwkJCWZzLT5kYmxpc3QgPSBOVUxMOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19pbml0X2RibGlzdChmcywgMCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJldHZhbCA9IGV4dDJmc19nZXRfbmV4dF9pbm9kZShzY2FuLCAmaW5vLCAmaW5vZGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwl3aGlsZSAoaW5vKSB7CisJCWlmICgoaW5vZGUuaV9saW5rc19jb3VudCA9PSAwKSB8fAorCQkgICAgIWV4dDJmc19pbm9kZV9oYXNfdmFsaWRfYmxvY2tzMihmcywgJmlub2RlKSkKKwkJCWdvdG8gbmV4dDsKKworCQlwYi5pbm8gPSBpbm87CisJCXBiLmlub2RlID0gJmlub2RlOworCisJCXBiLmFkZF9kaXIgPSAoTElOVVhfU19JU0RJUihpbm9kZS5pX21vZGUpICYmCisJCQkgICAgICBmbGFncyAmIEVYVDJfQk1PVkVfR0VUX0RCTElTVCk7CisKKwkJcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBpbm8sIDAsIGJsb2NrX2J1ZiwKKwkJCQkJICAgICAgIHByb2Nlc3NfYmxvY2ssICZwYik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlpZiAocGIuZXJyb3IpCisJCQlyZXR1cm4gcGIuZXJyb3I7CisKKwluZXh0OgorCQlyZXR2YWwgPSBleHQyZnNfZ2V0X25leHRfaW5vZGUoc2NhbiwgJmlubywgJmlub2RlKTsKKwkJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0JBRF9CTE9DS19JTl9JTk9ERV9UQUJMRSkKKwkJCWdvdG8gbmV4dDsKKwl9CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvYnJlbC5oIGIvbGliL2V4dDJmcy9icmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkZGRkNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvYnJlbC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBicmVsLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKK3N0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRlX2VudHJ5IHsKKwlibGs2NF90CW5ldzsKKwlfX3MxNglvZmZzZXQ7CisJX191MTYJZmxhZ3M7CisJdW5pb24geworCQlibGs2NF90CQlibG9ja19yZWY7CisJCWV4dDJfaW5vX3QJaW5vZGVfcmVmOworCX0gb3duZXI7Cit9OworCisjZGVmaW5lIFJFTE9DQVRFX1RZUEVfUkVGICAweDAwMDcKKyNkZWZpbmUgUkVMT0NBVEVfQkxPQ0tfUkVGIDB4MDAwMQorI2RlZmluZSBSRUxPQ0FURV9JTk9ERV9SRUYgMHgwMDAyCisKK3R5cGVkZWYgc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGlvbl90YWJsZSAqZXh0Ml9icmVsOworCitzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0aW9uX3RhYmxlIHsKKwlfX3UzMgltYWdpYzsKKwljaGFyCSpuYW1lOworCWJsazY0X3QJY3VycmVudDsKKwl2b2lkCSpwcml2X2RhdGE7CisKKwkvKgorCSAqIEFkZCBhIGJsb2NrIHJlbG9jYXRpb24gZW50cnkuCisJICovCisJZXJyY29kZV90ICgqcHV0KShleHQyX2JyZWwgYnJlbCwgYmxrNjRfdCBvbGQsCisJCQkgICAgICBzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0ZV9lbnRyeSAqZW50KTsKKworCS8qCisJICogR2V0IGEgYmxvY2sgcmVsb2NhdGlvbiBlbnRyeS4KKwkgKi8KKwllcnJjb2RlX3QgKCpnZXQpKGV4dDJfYnJlbCBicmVsLCBibGs2NF90IG9sZCwKKwkJCSAgICAgIHN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRlX2VudHJ5ICplbnQpOworCisJLyoKKwkgKiBJbml0aWFsaXplIGZvciBpdGVyYXRpbmcgb3ZlciB0aGUgYmxvY2sgcmVsb2NhdGlvbiBlbnRyaWVzLgorCSAqLworCWVycmNvZGVfdCAoKnN0YXJ0X2l0ZXIpKGV4dDJfYnJlbCBicmVsKTsKKworCS8qCisJICogVGhlIGl0ZXJhdG9yIGZ1bmN0aW9uIGZvciB0aGUgaW5vZGUgcmVsb2NhdGlvbiBlbnRyaWVzLgorCSAqIFJldHVybnMgYW4gaW5vZGUgbnVtYmVyIG9mIDAgd2hlbiBvdXQgb2YgZW50cmllcy4KKwkgKi8KKwllcnJjb2RlX3QgKCpuZXh0KShleHQyX2JyZWwgYnJlbCwgYmxrNjRfdCAqb2xkLAorCQkJICBzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0ZV9lbnRyeSAqZW50KTsKKworCS8qCisJICogTW92ZSB0aGUgaW5vZGUgcmVsb2NhdGlvbiB0YWJsZSBmcm9tIG9uZSBibG9jayBudW1iZXIgdG8KKwkgKiBhbm90aGVyLgorCSAqLworCWVycmNvZGVfdCAoKm1vdmUpKGV4dDJfYnJlbCBicmVsLCBibGs2NF90IG9sZCwgYmxrX3QgbmV3KTsKKworCS8qCisJICogUmVtb3ZlIGEgYmxvY2sgcmVsb2NhdGlvbiBlbnRyeS4KKwkgKi8KKwllcnJjb2RlX3QgKCpkZWxldGUpKGV4dDJfYnJlbCBicmVsLCBibGs2NF90IG9sZCk7CisKKworCS8qCisJICogRnJlZSB0aGUgYmxvY2sgcmVsb2NhdGlvbiB0YWJsZS4KKwkgKi8KKwllcnJjb2RlX3QgKCpmcmVlKShleHQyX2JyZWwgYnJlbCk7Cit9OworCitlcnJjb2RlX3QgZXh0MmZzX2JyZWxfbWVtYXJyYXlfY3JlYXRlKGNoYXIgKm5hbWUsIGJsazY0X3QgbWF4X2Jsb2NrLAorCQkJCSAgICBleHQyX2JyZWwgKmJyZWwpOworCisjZGVmaW5lIGV4dDJmc19icmVsX3B1dChicmVsLCBvbGQsIGVudCkgKChicmVsKS0+cHV0KChicmVsKSwgb2xkLCBlbnQpKQorI2RlZmluZSBleHQyZnNfYnJlbF9nZXQoYnJlbCwgb2xkLCBlbnQpICgoYnJlbCktPmdldCgoYnJlbCksIG9sZCwgZW50KSkKKyNkZWZpbmUgZXh0MmZzX2JyZWxfc3RhcnRfaXRlcihicmVsKSAoKGJyZWwpLT5zdGFydF9pdGVyKChicmVsKSkpCisjZGVmaW5lIGV4dDJmc19icmVsX25leHQoYnJlbCwgb2xkLCBlbnQpICgoYnJlbCktPm5leHQoKGJyZWwpLCBvbGQsIGVudCkpCisjZGVmaW5lIGV4dDJmc19icmVsX21vdmUoYnJlbCwgb2xkLCBuZXcpICgoYnJlbCktPm1vdmUoKGJyZWwpLCBvbGQsIG5ldykpCisjZGVmaW5lIGV4dDJmc19icmVsX2RlbGV0ZShicmVsLCBvbGQpICgoYnJlbCktPmRlbGV0ZSgoYnJlbCksIG9sZCkpCisjZGVmaW5lIGV4dDJmc19icmVsX2ZyZWUoYnJlbCkgKChicmVsKS0+ZnJlZSgoYnJlbCkpKQorCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2JyZWxfbWEuYyBiL2xpYi9leHQyZnMvYnJlbF9tYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMmFmYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2JyZWxfbWEuYwpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIGJyZWxfbWEuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqIFRPRE86IHJld3JpdGUgdG8gbm90IHVzZSBhIGRpcmVjdCBhcnJheSEhISAgKEZvcnR1bmF0ZWx5IHRoaXMKKyAqIG1vZHVsZSBpc24ndCByZWFsbHkgdXNlZCB5ZXQuKQorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisjaW5jbHVkZSAiYnJlbC5oIgorCitzdGF0aWMgZXJyY29kZV90IGJtYV9wdXQoZXh0Ml9icmVsIGJyZWwsIGJsazY0X3Qgb2xkLAorCQkJc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGVfZW50cnkgKmVudCk7CitzdGF0aWMgZXJyY29kZV90IGJtYV9nZXQoZXh0Ml9icmVsIGJyZWwsIGJsazY0X3Qgb2xkLAorCQkJc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGVfZW50cnkgKmVudCk7CitzdGF0aWMgZXJyY29kZV90IGJtYV9zdGFydF9pdGVyKGV4dDJfYnJlbCBicmVsKTsKK3N0YXRpYyBlcnJjb2RlX3QgYm1hX25leHQoZXh0Ml9icmVsIGJyZWwsIGJsazY0X3QgKm9sZCwKKwkJCSBzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0ZV9lbnRyeSAqZW50KTsKK3N0YXRpYyBlcnJjb2RlX3QgYm1hX21vdmUoZXh0Ml9icmVsIGJyZWwsIGJsazY0X3Qgb2xkLCBibGs2NF90IG5ldyk7CitzdGF0aWMgZXJyY29kZV90IGJtYV9kZWxldGUoZXh0Ml9icmVsIGJyZWwsIGJsazY0X3Qgb2xkKTsKK3N0YXRpYyBlcnJjb2RlX3QgYm1hX2ZyZWUoZXh0Ml9icmVsIGJyZWwpOworCitzdHJ1Y3QgYnJlbF9tYSB7CisJX191MzIgbWFnaWM7CisJYmxrNjRfdCBtYXhfYmxvY2s7CisJc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGVfZW50cnkgKmVudHJpZXM7Cit9OworCitlcnJjb2RlX3QgZXh0MmZzX2JyZWxfbWVtYXJyYXlfY3JlYXRlKGNoYXIgKm5hbWUsIGJsazY0X3QgbWF4X2Jsb2NrLAorCQkJCSAgICAgIGV4dDJfYnJlbCAqbmV3X2JyZWwpCit7CisJZXh0Ml9icmVsCQlicmVsID0gMDsKKwllcnJjb2RlX3QJcmV0dmFsOworCXN0cnVjdCBicmVsX21hIAkqbWEgPSAwOworCXNpemVfdAkJc2l6ZTsKKworCSpuZXdfYnJlbCA9IDA7CisKKwkvKgorCSAqIEFsbG9jYXRlIG1lbW9yeSBzdHJ1Y3R1cmVzCisJICovCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRpb25fdGFibGUpLAorCQkJCSZicmVsKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwltZW1zZXQoYnJlbCwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRpb25fdGFibGUpKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHN0cmxlbihuYW1lKSsxLCAmYnJlbC0+bmFtZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJc3RyY3B5KGJyZWwtPm5hbWUsIG5hbWUpOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBicmVsX21hKSwgJm1hKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwltZW1zZXQobWEsIDAsIHNpemVvZihzdHJ1Y3QgYnJlbF9tYSkpOworCWJyZWwtPnByaXZfZGF0YSA9IG1hOworCisJc2l6ZSA9IChzaXplX3QpIChzaXplb2Yoc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGVfZW50cnkpICoKKwkJCSAobWF4X2Jsb2NrKzEpKTsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KG1heF9ibG9jaysxLAorCQlzaXplb2Yoc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGVfZW50cnkpLCAmbWEtPmVudHJpZXMpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCW1lbXNldChtYS0+ZW50cmllcywgMCwgc2l6ZSk7CisJbWEtPm1heF9ibG9jayA9IG1heF9ibG9jazsKKworCS8qCisJICogRmlsbCBpbiB0aGUgYnJlbCBkYXRhIHN0cnVjdHVyZQorCSAqLworCWJyZWwtPnB1dCA9IGJtYV9wdXQ7CisJYnJlbC0+Z2V0ID0gYm1hX2dldDsKKwlicmVsLT5zdGFydF9pdGVyID0gYm1hX3N0YXJ0X2l0ZXI7CisJYnJlbC0+bmV4dCA9IGJtYV9uZXh0OworCWJyZWwtPm1vdmUgPSBibWFfbW92ZTsKKwlicmVsLT5kZWxldGUgPSBibWFfZGVsZXRlOworCWJyZWwtPmZyZWUgPSBibWFfZnJlZTsKKworCSpuZXdfYnJlbCA9IGJyZWw7CisJcmV0dXJuIDA7CisKK2Vycm91dDoKKwlibWFfZnJlZShicmVsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IGJtYV9wdXQoZXh0Ml9icmVsIGJyZWwsIGJsazY0X3Qgb2xkLAorCQkJc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGVfZW50cnkgKmVudCkKK3sKKwlzdHJ1Y3QgYnJlbF9tYSAJKm1hOworCisJbWEgPSBicmVsLT5wcml2X2RhdGE7CisJaWYgKG9sZCA+IG1hLT5tYXhfYmxvY2spCisJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJbWEtPmVudHJpZXNbKHVuc2lnbmVkKW9sZF0gPSAqZW50OworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IGJtYV9nZXQoZXh0Ml9icmVsIGJyZWwsIGJsazY0X3Qgb2xkLAorCQkJc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGVfZW50cnkgKmVudCkKK3sKKwlzdHJ1Y3QgYnJlbF9tYSAJKm1hOworCisJbWEgPSBicmVsLT5wcml2X2RhdGE7CisJaWYgKG9sZCA+IG1hLT5tYXhfYmxvY2spCisJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJaWYgKG1hLT5lbnRyaWVzWyh1bnNpZ25lZClvbGRdLm5ldyA9PSAwKQorCQlyZXR1cm4gRU5PRU5UOworCSplbnQgPSBtYS0+ZW50cmllc1tvbGRdOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IGJtYV9zdGFydF9pdGVyKGV4dDJfYnJlbCBicmVsKQoreworCWJyZWwtPmN1cnJlbnQgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IGJtYV9uZXh0KGV4dDJfYnJlbCBicmVsLCBibGs2NF90ICpvbGQsCisJCQkgIHN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRlX2VudHJ5ICplbnQpCit7CisJc3RydWN0IGJyZWxfbWEgCSptYTsKKworCW1hID0gYnJlbC0+cHJpdl9kYXRhOworCXdoaWxlICgrK2JyZWwtPmN1cnJlbnQgPCBtYS0+bWF4X2Jsb2NrKSB7CisJCWlmIChtYS0+ZW50cmllc1sodW5zaWduZWQpYnJlbC0+Y3VycmVudF0ubmV3ID09IDApCisJCQljb250aW51ZTsKKwkJKm9sZCA9IGJyZWwtPmN1cnJlbnQ7CisJCSplbnQgPSBtYS0+ZW50cmllc1sodW5zaWduZWQpYnJlbC0+Y3VycmVudF07CisJCXJldHVybiAwOworCX0KKwkqb2xkID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBibWFfbW92ZShleHQyX2JyZWwgYnJlbCwgYmxrNjRfdCBvbGQsIGJsazY0X3QgbmV3KQoreworCXN0cnVjdCBicmVsX21hIAkqbWE7CisKKwltYSA9IGJyZWwtPnByaXZfZGF0YTsKKwlpZiAoKG9sZCA+IG1hLT5tYXhfYmxvY2spIHx8IChuZXcgPiBtYS0+bWF4X2Jsb2NrKSkKKwkJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKwlpZiAobWEtPmVudHJpZXNbKHVuc2lnbmVkKW9sZF0ubmV3ID09IDApCisJCXJldHVybiBFTk9FTlQ7CisJbWEtPmVudHJpZXNbKHVuc2lnbmVkKW5ld10gPSBtYS0+ZW50cmllc1tvbGRdOworCW1hLT5lbnRyaWVzWyh1bnNpZ25lZClvbGRdLm5ldyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgYm1hX2RlbGV0ZShleHQyX2JyZWwgYnJlbCwgYmxrNjRfdCBvbGQpCit7CisJc3RydWN0IGJyZWxfbWEgCSptYTsKKworCW1hID0gYnJlbC0+cHJpdl9kYXRhOworCWlmIChvbGQgPiBtYS0+bWF4X2Jsb2NrKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCWlmIChtYS0+ZW50cmllc1sodW5zaWduZWQpb2xkXS5uZXcgPT0gMCkKKwkJcmV0dXJuIEVOT0VOVDsKKwltYS0+ZW50cmllc1sodW5zaWduZWQpb2xkXS5uZXcgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IGJtYV9mcmVlKGV4dDJfYnJlbCBicmVsKQoreworCXN0cnVjdCBicmVsX21hIAkqbWE7CisKKwlpZiAoIWJyZWwpCisJCXJldHVybiAwOworCisJbWEgPSBicmVsLT5wcml2X2RhdGE7CisKKwlpZiAobWEpIHsKKwkJaWYgKG1hLT5lbnRyaWVzKQorCQkJZXh0MmZzX2ZyZWVfbWVtKCZtYS0+ZW50cmllcyk7CisJCWV4dDJmc19mcmVlX21lbSgmbWEpOworCX0KKwlpZiAoYnJlbC0+bmFtZSkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZicmVsLT5uYW1lKTsKKwlleHQyZnNfZnJlZV9tZW0oJmJyZWwpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9jaGVja19kZXNjLmMgYi9saWIvZXh0MmZzL2NoZWNrX2Rlc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTc2OGY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9jaGVja19kZXNjLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBjaGVja19kZXNjLmMgLS0tIENoZWNrIHRoZSBncm91cCBkZXNjcmlwdG9ycyBvZiBhbiBleHQyIGZpbGVzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworLyoKKyAqIFRoaXMgcm91dGluZSBzYW5pdHkgY2hlY2tzIHRoZSBncm91cCBkZXNjcmlwdG9ycworICovCitlcnJjb2RlX3QgZXh0MmZzX2NoZWNrX2Rlc2MoZXh0Ml9maWxzeXMgZnMpCit7CisJZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwOworCWVycmNvZGVfdCByZXR2YWw7CisJZGdycF90IGk7CisJYmxrNjRfdCBmaXJzdF9ibG9jayA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCWJsazY0X3QgbGFzdF9ibG9jayA9IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKS0xOworCWJsazY0X3QgYmxrLCBiOworCXVuc2lnbmVkIGludCBqOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmIChFWFQyX0RFU0NfU0laRShmcy0+c3VwZXIpICYgKEVYVDJfREVTQ19TSVpFKGZzLT5zdXBlcikgLSAxKSkKKwkJcmV0dXJuIEVYVDJfRVRfQkFEX0RFU0NfU0laRTsKKworCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9zdWJjbHVzdGVyX2JpdG1hcChmcywgImNoZWNrX2Rlc2MgbWFwIiwgJmJtYXApOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykKKwkJZXh0MmZzX3Jlc2VydmVfc3VwZXJfYW5kX2JnZChmcywgaSwgYm1hcCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlpZiAoIUVYVDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQkgICAgICAgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcpKSB7CisJCQlmaXJzdF9ibG9jayA9IGV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZnMsIGkpOworCQkJbGFzdF9ibG9jayA9IGV4dDJmc19ncm91cF9sYXN0X2Jsb2NrMihmcywgaSk7CisJCX0KKworCQkvKgorCQkgKiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIGJsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgaXMgc2FuZQorCQkgKi8KKwkJYmxrID0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpOworCQlpZiAoYmxrIDwgZmlyc3RfYmxvY2sgfHwgYmxrID4gbGFzdF9ibG9jayB8fAorCQkgICAgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihibWFwLCBibGspKSB7CisJCQlyZXR2YWwgPSBFWFQyX0VUX0dERVNDX0JBRF9CTE9DS19NQVA7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGJtYXAsIGJsayk7CisKKwkJLyoKKwkJICogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBpbm9kZSBiaXRtYXAgZm9yIGdyb3VwIGlzIHNhbmUKKwkJICovCisJCWJsayA9IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKTsKKwkJaWYgKGJsayA8IGZpcnN0X2Jsb2NrIHx8IGJsayA+IGxhc3RfYmxvY2sgfHwKKwkJICAgIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoYm1hcCwgYmxrKSkgeworCQkJcmV0dmFsID0gRVhUMl9FVF9HREVTQ19CQURfSU5PREVfTUFQOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihibWFwLCBibGspOworCisJCS8qCisJCSAqIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgaW5vZGUgdGFibGUgZm9yIGdyb3VwIGlzIHNhbmUKKwkJICovCisJCWJsayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpOworCQlpZiAoYmxrIDwgZmlyc3RfYmxvY2sgfHwKKwkJICAgICgoYmxrICsgZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAgLSAxKSA+IGxhc3RfYmxvY2spKSB7CisJCQlyZXR2YWwgPSBFWFQyX0VUX0dERVNDX0JBRF9JTk9ERV9UQUJMRTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWZvciAoaiA9IDAsIGIgPSBibGs7IGogPCBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKwkJICAgICBqKyssIGIrKykgeworCQkJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoYm1hcCwgYikpIHsKKwkJCQlyZXR2YWwgPSBFWFQyX0VUX0dERVNDX0JBRF9JTk9ERV9UQUJMRTsKKwkJCQlnb3RvIGVycm91dDsKKwkJCX0KKwkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoYm1hcCwgYik7CisJCX0KKwl9CitlcnJvdXQ6CisJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKGJtYXApOworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2Nsb3NlZnMuYyBiL2xpYi9leHQyZnMvY2xvc2Vmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNWIyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2Nsb3NlZnMuYwpAQCAtMCwwICsxLDQ5NyBAQAorLyoKKyAqIGNsb3NlZnMuYyAtLS0gY2xvc2UgYW4gZXh0MiBmaWxlc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorCitzdGF0aWMgaW50IHRlc3Rfcm9vdCh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7CisJd2hpbGUgKDEpIHsKKwkJaWYgKGEgPCBiKQorCQkJcmV0dXJuIDA7CisJCWlmIChhID09IGIpCisJCQlyZXR1cm4gMTsKKwkJaWYgKGEgJSBiKQorCQkJcmV0dXJuIDA7CisJCWEgPSBhIC8gYjsKKwl9Cit9CisKK2ludCBleHQyZnNfYmdfaGFzX3N1cGVyKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApCit7CisJaWYgKGdyb3VwID09IDApCisJCXJldHVybiAxOworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfQ09NUEFUX1NQQVJTRV9TVVBFUjIpIHsKKwkJaWYgKGdyb3VwID09IGZzLT5zdXBlci0+c19iYWNrdXBfYmdzWzBdIHx8CisJCSAgICBncm91cCA9PSBmcy0+c3VwZXItPnNfYmFja3VwX2Jnc1sxXSkKKwkJCXJldHVybiAxOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKChncm91cCA8PSAxKSB8fCAhKGZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJCQkgICAgICBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUikpCisJCXJldHVybiAxOworCWlmICghKGdyb3VwICYgMSkpCisJCXJldHVybiAwOworCWlmICh0ZXN0X3Jvb3QoZ3JvdXAsIDMpIHx8ICh0ZXN0X3Jvb3QoZ3JvdXAsIDUpKSB8fAorCSAgICB0ZXN0X3Jvb3QoZ3JvdXAsIDcpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKgorICogZXh0MmZzX3N1cGVyX2FuZF9iZ2RfbG9jMigpCisgKiBAZnM6CQkJZXh0MiBmcyBwb2ludGVyCisgKiBAZ3JvdXAJCWdpdmVuIGJsb2NrIGdyb3VwCisgKiBAcmV0X3N1cGVyX2JsazoJaWYgIU5VTEwsIHJldHVybnMgc3VwZXIgYmxvY2sgbG9jYXRpb24KKyAqIEByZXRfb2xkX2Rlc2NfYmxrOglpZiAhTlVMTCwgcmV0dXJucyBsb2NhdGlvbiBvZiB0aGUgb2xkIGJsb2NrCisgKgkJCWdyb3VwIGRlc2NyaXB0b3IKKyAqIEByZXRfbmV3X2Rlc2NfYmxrOglpZiAhTlVMTCwgcmV0dXJucyBsb2NhdGlvbiBvZiBtZXRhX2JnIGJsb2NrCisgKgkJCWdyb3VwIGRlc2NyaXB0b3IKKyAqIEByZXRfdXNlZF9ibGtzOglpZiAhTlVMTCwgcmV0dXJucyBudW1iZXIgb2YgYmxvY2tzIHVzZWQgYnkKKyAqCQkJc3VwZXIgYmxvY2sgYW5kIGdyb3VwX2Rlc2NyaXB0b3JzLgorICoKKyAqIFJldHVybnMgZXJyY29kZV90IG9mIDAKKyAqLworZXJyY29kZV90IGV4dDJmc19zdXBlcl9hbmRfYmdkX2xvYzIoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgIGRncnBfdCBncm91cCwKKwkJCQkJICAgYmxrNjRfdCAqcmV0X3N1cGVyX2JsaywKKwkJCQkJICAgYmxrNjRfdCAqcmV0X29sZF9kZXNjX2JsaywKKwkJCQkJICAgYmxrNjRfdCAqcmV0X25ld19kZXNjX2JsaywKKwkJCQkJICAgYmxrX3QgKnJldF91c2VkX2Jsa3MpCit7CisJYmxrNjRfdAlncm91cF9ibG9jaywgc3VwZXJfYmxrID0gMCwgb2xkX2Rlc2NfYmxrID0gMCwgbmV3X2Rlc2NfYmxrID0gMDsKKwl1bnNpZ25lZCBpbnQgbWV0YV9iZywgbWV0YV9iZ19zaXplOworCWJsa190CW51bWJsb2NrcyA9IDA7CisJYmxrNjRfdCBvbGRfZGVzY19ibG9ja3M7CisJaW50CWhhc19zdXBlcjsKKworCWdyb3VwX2Jsb2NrID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywgZ3JvdXApOworCWlmIChncm91cF9ibG9jayA9PSAwICYmIGZzLT5ibG9ja3NpemUgPT0gMTAyNCkKKwkJZ3JvdXBfYmxvY2sgPSAxOyAvKiBEZWFsIHdpdGggMTAyNCBibG9ja3NpemUgJiYgYmlnYWxsb2MgKi8KKworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKwllbHNlCisJCW9sZF9kZXNjX2Jsb2NrcyA9CisJCQlmcy0+ZGVzY19ibG9ja3MgKyBmcy0+c3VwZXItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrczsKKworCWhhc19zdXBlciA9IGV4dDJmc19iZ19oYXNfc3VwZXIoZnMsIGdyb3VwKTsKKworCWlmIChoYXNfc3VwZXIpIHsKKwkJc3VwZXJfYmxrID0gZ3JvdXBfYmxvY2s7CisJCW51bWJsb2NrcysrOworCX0KKwltZXRhX2JnX3NpemUgPSBFWFQyX0RFU0NfUEVSX0JMT0NLKGZzLT5zdXBlcik7CisJbWV0YV9iZyA9IGdyb3VwIC8gbWV0YV9iZ19zaXplOworCisJaWYgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgfHwKKwkgICAgKG1ldGFfYmcgPCBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZykpIHsKKwkJaWYgKGhhc19zdXBlcikgeworCQkJb2xkX2Rlc2NfYmxrID0gZ3JvdXBfYmxvY2sgKyAxOworCQkJbnVtYmxvY2tzICs9IG9sZF9kZXNjX2Jsb2NrczsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgoKGdyb3VwICUgbWV0YV9iZ19zaXplKSA9PSAwKSB8fAorCQkgICAgKChncm91cCAlIG1ldGFfYmdfc2l6ZSkgPT0gMSkgfHwKKwkJICAgICgoZ3JvdXAgJSBtZXRhX2JnX3NpemUpID09IChtZXRhX2JnX3NpemUtMSkpKSB7CisJCQlpZiAoaGFzX3N1cGVyKQorCQkJCWhhc19zdXBlciA9IDE7CisJCQluZXdfZGVzY19ibGsgPSBncm91cF9ibG9jayArIGhhc19zdXBlcjsKKwkJCW51bWJsb2NrcysrOworCQl9CisJfQorCisJaWYgKHJldF9zdXBlcl9ibGspCisJCSpyZXRfc3VwZXJfYmxrID0gc3VwZXJfYmxrOworCWlmIChyZXRfb2xkX2Rlc2NfYmxrKQorCQkqcmV0X29sZF9kZXNjX2JsayA9IG9sZF9kZXNjX2JsazsKKwlpZiAocmV0X25ld19kZXNjX2JsaykKKwkJKnJldF9uZXdfZGVzY19ibGsgPSBuZXdfZGVzY19ibGs7CisJaWYgKHJldF91c2VkX2Jsa3MpCisJCSpyZXRfdXNlZF9ibGtzID0gbnVtYmxvY2tzOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzdXBlcmJsb2NrLCBibG9jayBncm91cAorICogZGVzY3JpcHRvcnMgZm9yIGEgZ2l2ZW4gYmxvY2sgZ3JvdXAuICBJdCBjdXJyZW50bHkgcmV0dXJucyB0aGUKKyAqIG51bWJlciBvZiBmcmVlIGJsb2NrcyBhc3N1bWluZyB0aGF0IGlub2RlIHRhYmxlIGFuZCBhbGxvY2F0aW9uCisgKiBiaXRtYXBzIHdpbGwgYmUgaW4gdGhlIGdyb3VwLiAgVGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGNhc2UKKyAqIHdoZW4gdGhlIGZsZXhfYmcgZmVhdHVyZSBpcyBlbmFibGVkLCBzbyBjYWxsZXJzIHNob3VsZCB0YWtlIGNhcmUhCisgKiBJdCB3YXMgb25seSByZWFsbHkgaW50ZW5kZWQgZm9yIHVzZSBieSBta2UyZnMsIGFuZCBldmVuIHRoZXJlIGl0J3MKKyAqIG5vdCB0aGF0IHVzZWZ1bC4KKyAqCisgKiBUaGUgZXh0MmZzX3N1cGVyX2FuZF9iZ2RfbG9jMigpIGZ1bmN0aW9uIGlzIDY0LWJpdCBibG9jayBudW1iZXIKKyAqIGNhcGFibGUgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBibG9ja3MgdXNlZCBieSBzdXBlciBibG9jayBhbmQKKyAqIGdyb3VwIGRlc2NyaXB0b3JzLgorICovCitpbnQgZXh0MmZzX3N1cGVyX2FuZF9iZ2RfbG9jKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgICBkZ3JwX3QgZ3JvdXAsCisJCQkgICAgIGJsa190ICpyZXRfc3VwZXJfYmxrLAorCQkJICAgICBibGtfdCAqcmV0X29sZF9kZXNjX2JsaywKKwkJCSAgICAgYmxrX3QgKnJldF9uZXdfZGVzY19ibGssCisJCQkgICAgIGludCAqcmV0X21ldGFfYmcpCit7CisJYmxrNjRfdCByZXRfc3VwZXJfYmxrMjsKKwlibGs2NF90IHJldF9vbGRfZGVzY19ibGsyOworCWJsazY0X3QgcmV0X25ld19kZXNjX2JsazI7CisJYmxrX3QgcmV0X3VzZWRfYmxrczsKKwlibGtfdCBudW1ibG9ja3M7CisJdW5zaWduZWQgaW50IG1ldGFfYmdfc2l6ZTsKKworCWV4dDJmc19zdXBlcl9hbmRfYmdkX2xvYzIoZnMsIGdyb3VwLCAmcmV0X3N1cGVyX2JsazIsCisJCQkJCSZyZXRfb2xkX2Rlc2NfYmxrMiwKKwkJCQkJJnJldF9uZXdfZGVzY19ibGsyLAorCQkJCQkmcmV0X3VzZWRfYmxrcyk7CisKKwludW1ibG9ja3MgPSBleHQyZnNfZ3JvdXBfYmxvY2tzX2NvdW50KGZzLCBncm91cCk7CisKKwlpZiAocmV0X3N1cGVyX2JsaykKKwkJKnJldF9zdXBlcl9ibGsgPSAoYmxrX3QpcmV0X3N1cGVyX2JsazI7CisJaWYgKHJldF9vbGRfZGVzY19ibGspCisJCSpyZXRfb2xkX2Rlc2NfYmxrID0gKGJsa190KXJldF9vbGRfZGVzY19ibGsyOworCWlmIChyZXRfbmV3X2Rlc2NfYmxrKQorCQkqcmV0X25ld19kZXNjX2JsayA9IChibGtfdClyZXRfbmV3X2Rlc2NfYmxrMjsKKwlpZiAocmV0X21ldGFfYmcpIHsKKwkJbWV0YV9iZ19zaXplID0gRVhUMl9ERVNDX1BFUl9CTE9DSyhmcy0+c3VwZXIpOworCQkqcmV0X21ldGFfYmcgPSBncm91cCAvIG1ldGFfYmdfc2l6ZTsKKwl9CisKKwludW1ibG9ja3MgLT0gMiArIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwICsgcmV0X3VzZWRfYmxrczsKKworCXJldHVybiBudW1ibG9ja3M7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZvcmNlcyBvdXQgdGhlIHByaW1hcnkgc3VwZXJibG9jay4gIFdlIG5lZWQgdG8gb25seQorICogd3JpdGUgb3V0IHRob3NlIGZpZWxkcyB3aGljaCB3ZSBoYXZlIGNoYW5nZWQsIHNpbmNlIGlmIHRoZQorICogZmlsZXN5c3RlbSBpcyBtb3VudGVkLCBpdCBtYXkgaGF2ZSBjaGFuZ2VkIHNvbWUgb2YgdGhlIG90aGVyCisgKiBmaWVsZHMuCisgKgorICogSXQgdGFrZXMgYXMgaW5wdXQgYSBzdXBlcmJsb2NrIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gYnl0ZSBzd2FwcGVkCisgKiAoaWYgbmVjZXNzYXJ5KS4KKyAqCisgKi8KK3N0YXRpYyBlcnJjb2RlX3Qgd3JpdGVfcHJpbWFyeV9zdXBlcmJsb2NrKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcikKK3sKKwlfX3UxNgkJKm9sZF9zdXBlciwgKm5ld19zdXBlcjsKKwlpbnQJCWNoZWNrX2lkeCwgd3JpdGVfaWR4LCBzaXplOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAoIWZzLT5pby0+bWFuYWdlci0+d3JpdGVfYnl0ZSB8fCAhZnMtPm9yaWdfc3VwZXIpIHsKKwlmYWxsYmFjazoKKwkJaW9fY2hhbm5lbF9zZXRfYmxrc2l6ZShmcy0+aW8sIFNVUEVSQkxPQ0tfT0ZGU0VUKTsKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIDEsIC1TVVBFUkJMT0NLX1NJWkUsCisJCQkJCSAgICAgIHN1cGVyKTsKKwkJaW9fY2hhbm5lbF9zZXRfYmxrc2l6ZShmcy0+aW8sIGZzLT5ibG9ja3NpemUpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCW9sZF9zdXBlciA9IChfX3UxNiAqKSBmcy0+b3JpZ19zdXBlcjsKKwluZXdfc3VwZXIgPSAoX191MTYgKikgc3VwZXI7CisKKwlmb3IgKGNoZWNrX2lkeCA9IDA7IGNoZWNrX2lkeCA8IFNVUEVSQkxPQ0tfU0laRS8yOyBjaGVja19pZHgrKykgeworCQlpZiAob2xkX3N1cGVyW2NoZWNrX2lkeF0gPT0gbmV3X3N1cGVyW2NoZWNrX2lkeF0pCisJCQljb250aW51ZTsKKwkJd3JpdGVfaWR4ID0gY2hlY2tfaWR4OworCQlmb3IgKGNoZWNrX2lkeCsrOyBjaGVja19pZHggPCBTVVBFUkJMT0NLX1NJWkUvMjsgY2hlY2tfaWR4KyspCisJCQlpZiAob2xkX3N1cGVyW2NoZWNrX2lkeF0gPT0gbmV3X3N1cGVyW2NoZWNrX2lkeF0pCisJCQkJYnJlYWs7CisJCXNpemUgPSAyICogKGNoZWNrX2lkeCAtIHdyaXRlX2lkeCk7CisjaWYgMAorCQlwcmludGYoIldyaXRpbmcgJWQgYnl0ZXMgc3RhcnRpbmcgYXQgJWRcbiIsCisJCSAgICAgICBzaXplLCB3cml0ZV9pZHgqMik7CisjZW5kaWYKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ieXRlKGZzLT5pbywKKwkJCSAgICAgICBTVVBFUkJMT0NLX09GRlNFVCArICgyICogd3JpdGVfaWR4KSwgc2l6ZSwKKwkJCQkJICAgICAgIG5ld19zdXBlciArIHdyaXRlX2lkeCk7CisJCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9VTklNUExFTUVOVEVEKQorCQkJZ290byBmYWxsYmFjazsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCW1lbWNweShmcy0+b3JpZ19zdXBlciwgc3VwZXIsIFNVUEVSQkxPQ0tfU0laRSk7CisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIFVwZGF0ZXMgdGhlIHJldmlzaW9uIHRvIEVYVDJfRFlOQU1JQ19SRVYKKyAqLwordm9pZCBleHQyZnNfdXBkYXRlX2R5bmFtaWNfcmV2KGV4dDJfZmlsc3lzIGZzKQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGZzLT5zdXBlcjsKKworCWlmIChzYi0+c19yZXZfbGV2ZWwgPiBFWFQyX0dPT0RfT0xEX1JFVikKKwkJcmV0dXJuOworCisJc2ItPnNfcmV2X2xldmVsID0gRVhUMl9EWU5BTUlDX1JFVjsKKwlzYi0+c19maXJzdF9pbm8gPSBFWFQyX0dPT0RfT0xEX0ZJUlNUX0lOTzsKKwlzYi0+c19pbm9kZV9zaXplID0gRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFOworCS8qIHNfdXVpZCBpcyBoYW5kbGVkIGJ5IGUyZnNjayBhbHJlYWR5ICovCisJLyogb3RoZXIgZmllbGRzIHNob3VsZCBiZSBsZWZ0IGFsb25lICovCit9CisKK3N0YXRpYyBlcnJjb2RlX3Qgd3JpdGVfYmFja3VwX3N1cGVyKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsCisJCQkJICAgIGJsazY0X3QgZ3JvdXBfYmxvY2ssCisJCQkJICAgIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcl9zaGFkb3cpCit7CisJZGdycF90CXNncnAgPSBncm91cDsKKworCWlmIChzZ3JwID4gKCgxIDw8IDE2KSAtIDEpKQorCQlzZ3JwID0gKDEgPDwgMTYpIC0gMTsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwlzdXBlcl9zaGFkb3ctPnNfYmxvY2tfZ3JvdXBfbnIgPSBleHQyZnNfc3dhYjE2KHNncnApOworI2Vsc2UKKwlmcy0+c3VwZXItPnNfYmxvY2tfZ3JvdXBfbnIgPSBzZ3JwOworI2VuZGlmCisKKwlyZXR1cm4gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIGdyb3VwX2Jsb2NrLCAtU1VQRVJCTE9DS19TSVpFLAorCQkJCSAgICBzdXBlcl9zaGFkb3cpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2ZsdXNoKGV4dDJfZmlsc3lzIGZzKQoreworCXJldHVybiBleHQyZnNfZmx1c2gyKGZzLCAwKTsKK30KKworZXJyY29kZV90IGV4dDJmc19mbHVzaDIoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncykKK3sKKwlkZ3JwX3QJCWk7CisJZXJyY29kZV90CXJldHZhbDsKKwl1bnNpZ25lZCBsb25nCWZzX3N0YXRlOworCV9fdTMyCQlmZWF0dXJlX2luY29tcGF0OworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcl9zaGFkb3cgPSAwOworCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKmdyb3VwX3NoYWRvdyA9IDA7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqZ2RwOworCWRncnBfdAkJajsKKyNlbmRpZgorCWNoYXIJKmdyb3VwX3B0cjsKKwlibGs2NF90CW9sZF9kZXNjX2Jsb2NrczsKKwlzdHJ1Y3QgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3Nfc3RydWN0IHByb2dyZXNzOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWZzX3N0YXRlID0gZnMtPnN1cGVyLT5zX3N0YXRlOworCWZlYXR1cmVfaW5jb21wYXQgPSBmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdDsKKworCWZzLT5zdXBlci0+c193dGltZSA9IGZzLT5ub3cgPyBmcy0+bm93IDogdGltZShOVUxMKTsKKwlmcy0+c3VwZXItPnNfYmxvY2tfZ3JvdXBfbnIgPSAwOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCXJldHZhbCA9IEVYVDJfRVRfTk9fTUVNT1JZOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKFNVUEVSQkxPQ0tfU0laRSwgJnN1cGVyX3NoYWRvdyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJcmV0dmFsID0gZXh0MmZzX2dldF9hcnJheShmcy0+ZGVzY19ibG9ja3MsIGZzLT5ibG9ja3NpemUsCisJCQkJICAmZ3JvdXBfc2hhZG93KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwltZW1jcHkoZ3JvdXBfc2hhZG93LCBmcy0+Z3JvdXBfZGVzYywgKHNpemVfdCkgZnMtPmJsb2Nrc2l6ZSAqCisJICAgICAgIGZzLT5kZXNjX2Jsb2Nrcyk7CisKKwkvKiBzd2FwIHRoZSBncm91cCBkZXNjcmlwdG9ycyAqLworCWZvciAoaiA9IDA7IGogPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaisrKSB7CisJCWdkcCA9IGV4dDJmc19ncm91cF9kZXNjKGZzLCBncm91cF9zaGFkb3csIGopOworCQlleHQyZnNfc3dhcF9ncm91cF9kZXNjMihmcywgZ2RwKTsKKwl9CisjZWxzZQorCXN1cGVyX3NoYWRvdyA9IGZzLT5zdXBlcjsKKwlncm91cF9zaGFkb3cgPSBleHQyZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIDApOworI2VuZGlmCisKKwkvKgorCSAqIFNldCB0aGUgc3RhdGUgb2YgdGhlIEZTIHRvIGJlIG5vbi12YWxpZC4gIChUaGUgc3RhdGUgaGFzCisJICogYWxyZWFkeSBiZWVuIGJhY2tlZCB1cCBlYXJsaWVyLCBhbmQgd2lsbCBiZSByZXN0b3JlZCBhZnRlcgorCSAqIHdlIHdyaXRlIG91dCB0aGUgYmFja3VwIHN1cGVyYmxvY2tzLikKKwkgKi8KKwlmcy0+c3VwZXItPnNfc3RhdGUgJj0gfkVYVDJfVkFMSURfRlM7CisJZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJj0gfkVYVDNfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCSpzdXBlcl9zaGFkb3cgPSAqZnMtPnN1cGVyOworCWV4dDJmc19zd2FwX3N1cGVyKHN1cGVyX3NoYWRvdyk7CisjZW5kaWYKKworCS8qCisJICogSWYgdGhpcyBpcyBhbiBleHRlcm5hbCBqb3VybmFsIGRldmljZSwgZG9uJ3Qgd3JpdGUgb3V0IHRoZQorCSAqIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIG9yIGFueSBvZiB0aGUgYmFja3VwIHN1cGVyYmxvY2tzCisJICovCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkgICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0pPVVJOQUxfREVWKQorCQlnb3RvIHdyaXRlX3ByaW1hcnlfc3VwZXJibG9ja19vbmx5OworCisJLyoKKwkgKiBXcml0ZSBvdXQgdGhlIG1hc3RlciBncm91cCBkZXNjcmlwdG9ycywgYW5kIHRoZSBiYWNrdXAKKwkgKiBzdXBlcmJsb2NrcyBhbmQgZ3JvdXAgZGVzY3JpcHRvcnMuCisJICovCisJZ3JvdXBfcHRyID0gKGNoYXIgKikgZ3JvdXBfc2hhZG93OworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKSB7CisJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworCQlpZiAob2xkX2Rlc2NfYmxvY2tzID4gZnMtPmRlc2NfYmxvY2tzKQorCQkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPmRlc2NfYmxvY2tzOworCX0gZWxzZQorCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+ZGVzY19ibG9ja3M7CisKKwlleHQyZnNfbnVtZXJpY19wcm9ncmVzc19pbml0KGZzLCAmcHJvZ3Jlc3MsIE5VTEwsCisJCQkJICAgICBmcy0+Z3JvdXBfZGVzY19jb3VudCk7CisKKworCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCWJsazY0X3QJc3VwZXJfYmxrLCBvbGRfZGVzY19ibGssIG5ld19kZXNjX2JsazsKKworCQlleHQyZnNfbnVtZXJpY19wcm9ncmVzc191cGRhdGUoZnMsICZwcm9ncmVzcywgaSk7CisJCWV4dDJmc19zdXBlcl9hbmRfYmdkX2xvYzIoZnMsIGksICZzdXBlcl9ibGssICZvbGRfZGVzY19ibGssCisJCQkJCSAmbmV3X2Rlc2NfYmxrLCAwKTsKKworCQlpZiAoIShmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFkpICYmaSAmJiBzdXBlcl9ibGspIHsKKwkJCXJldHZhbCA9IHdyaXRlX2JhY2t1cF9zdXBlcihmcywgaSwgc3VwZXJfYmxrLAorCQkJCQkJICAgIHN1cGVyX3NoYWRvdyk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZXJyb3V0OworCQl9CisJCWlmIChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfU1VQRVJfT05MWSkKKwkJCWNvbnRpbnVlOworCQlpZiAoKG9sZF9kZXNjX2JsaykgJiYKKwkJICAgICghKGZzLT5mbGFncyAmIEVYVDJfRkxBR19NQVNURVJfU0JfT05MWSkgfHwgKGkgPT0gMCkpKSB7CisJCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywKKwkJCSAgICAgIG9sZF9kZXNjX2Jsaywgb2xkX2Rlc2NfYmxvY2tzLCBncm91cF9wdHIpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycm91dDsKKwkJfQorCQlpZiAobmV3X2Rlc2NfYmxrKSB7CisJCQlpbnQgbWV0YV9iZyA9IGkgLyBFWFQyX0RFU0NfUEVSX0JMT0NLKGZzLT5zdXBlcik7CisKKwkJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBuZXdfZGVzY19ibGssCisJCQkJMSwgZ3JvdXBfcHRyICsgKG1ldGFfYmcqZnMtPmJsb2Nrc2l6ZSkpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycm91dDsKKwkJfQorCX0KKworCWV4dDJmc19udW1lcmljX3Byb2dyZXNzX2Nsb3NlKGZzLCAmcHJvZ3Jlc3MsIE5VTEwpOworCisJLyoKKwkgKiBJZiB0aGUgd3JpdGVfYml0bWFwcygpIGZ1bmN0aW9uIGlzIHByZXNlbnQsIGNhbGwgaXQgdG8KKwkgKiBmbHVzaCB0aGUgYml0bWFwcy4gIFRoaXMgaXMgZG9uZSB0aGlzIHdheSBzbyB0aGF0IGEgc2ltcGxlCisJICogcHJvZ3JhbSB0aGF0IGRvZXNuJ3QgbWVzcyB3aXRoIHRoZSBiaXRtYXBzIGRvZXNuJ3QgbmVlZCB0bworCSAqIGRyYWcgaW4gdGhlIGJpdG1hcHMuYyBjb2RlLgorCSAqLworCWlmIChmcy0+d3JpdGVfYml0bWFwcykgeworCQlyZXR2YWwgPSBmcy0+d3JpdGVfYml0bWFwcyhmcyk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwl9CisKK3dyaXRlX3ByaW1hcnlfc3VwZXJibG9ja19vbmx5OgorCS8qCisJICogV3JpdGUgb3V0IG1hc3RlciBzdXBlcmJsb2NrLiAgVGhpcyBoYXMgdG8gYmUgZG9uZQorCSAqIHNlcGFyYXRlbHksIHNpbmNlIGl0IGlzIGxvY2F0ZWQgYXQgYSBmaXhlZCBsb2NhdGlvbgorCSAqIChTVVBFUkJMT0NLX09GRlNFVCkuICBXZSBmbHVzaCBhbGwgb3RoZXIgcGVuZGluZyBjaGFuZ2VzCisJICogb3V0IHRvIGRpc2sgZmlyc3QsIGp1c3QgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIGFuCisJICogaW5zeS10aW5zeSB3aW5kb3cuLi4uCisJICovCisKKwlmcy0+c3VwZXItPnNfYmxvY2tfZ3JvdXBfbnIgPSAwOworCWZzLT5zdXBlci0+c19zdGF0ZSA9IGZzX3N0YXRlOworCWZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ID0gZmVhdHVyZV9pbmNvbXBhdDsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwkqc3VwZXJfc2hhZG93ID0gKmZzLT5zdXBlcjsKKwlleHQyZnNfc3dhcF9zdXBlcihzdXBlcl9zaGFkb3cpOworI2VuZGlmCisKKwlpZiAoIShmbGFncyAmIEVYVDJfRkxBR19GTFVTSF9OT19TWU5DKSkKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9mbHVzaChmcy0+aW8pOworCXJldHZhbCA9IHdyaXRlX3ByaW1hcnlfc3VwZXJibG9jayhmcywgc3VwZXJfc2hhZG93KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX0RJUlRZOworCisJaWYgKCEoZmxhZ3MgJiBFWFQyX0ZMQUdfRkxVU0hfTk9fU1lOQykpCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfZmx1c2goZnMtPmlvKTsKK2Vycm91dDoKKwlmcy0+c3VwZXItPnNfc3RhdGUgPSBmc19zdGF0ZTsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwlpZiAoc3VwZXJfc2hhZG93KQorCQlleHQyZnNfZnJlZV9tZW0oJnN1cGVyX3NoYWRvdyk7CisJaWYgKGdyb3VwX3NoYWRvdykKKwkJZXh0MmZzX2ZyZWVfbWVtKCZncm91cF9zaGFkb3cpOworI2VuZGlmCisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGV4dDJmc19jbG9zZV9mcmVlKGV4dDJfZmlsc3lzICpmc19wdHIpCit7CisJZXJyY29kZV90IHJldDsKKwlleHQyX2ZpbHN5cyBmcyA9ICpmc19wdHI7CisKKwlyZXQgPSBleHQyZnNfY2xvc2UyKGZzLCAwKTsKKwlpZiAocmV0KQorCQlleHQyZnNfZnJlZShmcyk7CisJKmZzX3B0ciA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKworZXJyY29kZV90IGV4dDJmc19jbG9zZShleHQyX2ZpbHN5cyBmcykKK3sKKwlyZXR1cm4gZXh0MmZzX2Nsb3NlMihmcywgMCk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfY2xvc2UyKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmxhZ3MpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlpbnQJCW1ldGFfYmxrczsKKwlpb19zdGF0cyBzdGF0cyA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJaWYgKGZzLT53cml0ZV9iaXRtYXBzKSB7CisJCXJldHZhbCA9IGZzLT53cml0ZV9iaXRtYXBzKGZzKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCWlmIChmcy0+c3VwZXItPnNfa2J5dGVzX3dyaXR0ZW4gJiYKKwkgICAgZnMtPmlvLT5tYW5hZ2VyLT5nZXRfc3RhdHMpCisJCWZzLT5pby0+bWFuYWdlci0+Z2V0X3N0YXRzKGZzLT5pbywgJnN0YXRzKTsKKwlpZiAoc3RhdHMgJiYgc3RhdHMtPmJ5dGVzX3dyaXR0ZW4gJiYgKGZzLT5mbGFncyAmIEVYVDJfRkxBR19SVykpIHsKKwkJZnMtPnN1cGVyLT5zX2tieXRlc193cml0dGVuICs9IHN0YXRzLT5ieXRlc193cml0dGVuID4+IDEwOworCQltZXRhX2Jsa3MgPSBmcy0+ZGVzY19ibG9ja3MgKyAxOworCQlpZiAoIShmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfU1VQRVJfT05MWSkpCisJCQlmcy0+c3VwZXItPnNfa2J5dGVzX3dyaXR0ZW4gKz0gbWV0YV9ibGtzIC8KKwkJCQkoZnMtPmJsb2Nrc2l6ZSAvIDEwMjQpOworCQlpZiAoKGZzLT5mbGFncyAmIEVYVDJfRkxBR19ESVJUWSkgPT0gMCkKKwkJCWZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfU1VQRVJfT05MWSB8IEVYVDJfRkxBR19ESVJUWTsKKwl9CisJaWYgKGZzLT5mbGFncyAmIEVYVDJfRkxBR19ESVJUWSkgeworCQlyZXR2YWwgPSBleHQyZnNfZmx1c2gyKGZzLCBmbGFncyk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJldHZhbCA9IGV4dDJmc19tbXBfc3RvcChmcyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWV4dDJmc19mcmVlKGZzKTsKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9jcmMxNi5jIGIvbGliL2V4dDJmcy9jcmMxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZGViMjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2NyYzE2LmMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqICAgICAgY3JjMTYuYworICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogVmVyc2lvbiAyLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxleHQyZnMvZXh0Ml90eXBlcy5oPgorCisjaW5jbHVkZSAiY3JjMTYuaCIKKworLyoqIENSQyB0YWJsZSBmb3IgdGhlIENSQy0xNi4gVGhlIHBvbHkgaXMgMHg4MDA1ICh4MTYgKyB4MTUgKyB4MiArIDEpICovCitzdGF0aWMgX191MTYgY29uc3QgY3JjMTZfdGFibGVbMjU2XSA9IHsKKwkweDAwMDAsIDB4QzBDMSwgMHhDMTgxLCAweDAxNDAsIDB4QzMwMSwgMHgwM0MwLCAweDAyODAsIDB4QzI0MSwKKwkweEM2MDEsIDB4MDZDMCwgMHgwNzgwLCAweEM3NDEsIDB4MDUwMCwgMHhDNUMxLCAweEM0ODEsIDB4MDQ0MCwKKwkweENDMDEsIDB4MENDMCwgMHgwRDgwLCAweENENDEsIDB4MEYwMCwgMHhDRkMxLCAweENFODEsIDB4MEU0MCwKKwkweDBBMDAsIDB4Q0FDMSwgMHhDQjgxLCAweDBCNDAsIDB4QzkwMSwgMHgwOUMwLCAweDA4ODAsIDB4Qzg0MSwKKwkweEQ4MDEsIDB4MThDMCwgMHgxOTgwLCAweEQ5NDEsIDB4MUIwMCwgMHhEQkMxLCAweERBODEsIDB4MUE0MCwKKwkweDFFMDAsIDB4REVDMSwgMHhERjgxLCAweDFGNDAsIDB4REQwMSwgMHgxREMwLCAweDFDODAsIDB4REM0MSwKKwkweDE0MDAsIDB4RDRDMSwgMHhENTgxLCAweDE1NDAsIDB4RDcwMSwgMHgxN0MwLCAweDE2ODAsIDB4RDY0MSwKKwkweEQyMDEsIDB4MTJDMCwgMHgxMzgwLCAweEQzNDEsIDB4MTEwMCwgMHhEMUMxLCAweEQwODEsIDB4MTA0MCwKKwkweEYwMDEsIDB4MzBDMCwgMHgzMTgwLCAweEYxNDEsIDB4MzMwMCwgMHhGM0MxLCAweEYyODEsIDB4MzI0MCwKKwkweDM2MDAsIDB4RjZDMSwgMHhGNzgxLCAweDM3NDAsIDB4RjUwMSwgMHgzNUMwLCAweDM0ODAsIDB4RjQ0MSwKKwkweDNDMDAsIDB4RkNDMSwgMHhGRDgxLCAweDNENDAsIDB4RkYwMSwgMHgzRkMwLCAweDNFODAsIDB4RkU0MSwKKwkweEZBMDEsIDB4M0FDMCwgMHgzQjgwLCAweEZCNDEsIDB4MzkwMCwgMHhGOUMxLCAweEY4ODEsIDB4Mzg0MCwKKwkweDI4MDAsIDB4RThDMSwgMHhFOTgxLCAweDI5NDAsIDB4RUIwMSwgMHgyQkMwLCAweDJBODAsIDB4RUE0MSwKKwkweEVFMDEsIDB4MkVDMCwgMHgyRjgwLCAweEVGNDEsIDB4MkQwMCwgMHhFREMxLCAweEVDODEsIDB4MkM0MCwKKwkweEU0MDEsIDB4MjRDMCwgMHgyNTgwLCAweEU1NDEsIDB4MjcwMCwgMHhFN0MxLCAweEU2ODEsIDB4MjY0MCwKKwkweDIyMDAsIDB4RTJDMSwgMHhFMzgxLCAweDIzNDAsIDB4RTEwMSwgMHgyMUMwLCAweDIwODAsIDB4RTA0MSwKKwkweEEwMDEsIDB4NjBDMCwgMHg2MTgwLCAweEExNDEsIDB4NjMwMCwgMHhBM0MxLCAweEEyODEsIDB4NjI0MCwKKwkweDY2MDAsIDB4QTZDMSwgMHhBNzgxLCAweDY3NDAsIDB4QTUwMSwgMHg2NUMwLCAweDY0ODAsIDB4QTQ0MSwKKwkweDZDMDAsIDB4QUNDMSwgMHhBRDgxLCAweDZENDAsIDB4QUYwMSwgMHg2RkMwLCAweDZFODAsIDB4QUU0MSwKKwkweEFBMDEsIDB4NkFDMCwgMHg2QjgwLCAweEFCNDEsIDB4NjkwMCwgMHhBOUMxLCAweEE4ODEsIDB4Njg0MCwKKwkweDc4MDAsIDB4QjhDMSwgMHhCOTgxLCAweDc5NDAsIDB4QkIwMSwgMHg3QkMwLCAweDdBODAsIDB4QkE0MSwKKwkweEJFMDEsIDB4N0VDMCwgMHg3RjgwLCAweEJGNDEsIDB4N0QwMCwgMHhCREMxLCAweEJDODEsIDB4N0M0MCwKKwkweEI0MDEsIDB4NzRDMCwgMHg3NTgwLCAweEI1NDEsIDB4NzcwMCwgMHhCN0MxLCAweEI2ODEsIDB4NzY0MCwKKwkweDcyMDAsIDB4QjJDMSwgMHhCMzgxLCAweDczNDAsIDB4QjEwMSwgMHg3MUMwLCAweDcwODAsIDB4QjA0MSwKKwkweDUwMDAsIDB4OTBDMSwgMHg5MTgxLCAweDUxNDAsIDB4OTMwMSwgMHg1M0MwLCAweDUyODAsIDB4OTI0MSwKKwkweDk2MDEsIDB4NTZDMCwgMHg1NzgwLCAweDk3NDEsIDB4NTUwMCwgMHg5NUMxLCAweDk0ODEsIDB4NTQ0MCwKKwkweDlDMDEsIDB4NUNDMCwgMHg1RDgwLCAweDlENDEsIDB4NUYwMCwgMHg5RkMxLCAweDlFODEsIDB4NUU0MCwKKwkweDVBMDAsIDB4OUFDMSwgMHg5QjgxLCAweDVCNDAsIDB4OTkwMSwgMHg1OUMwLCAweDU4ODAsIDB4OTg0MSwKKwkweDg4MDEsIDB4NDhDMCwgMHg0OTgwLCAweDg5NDEsIDB4NEIwMCwgMHg4QkMxLCAweDhBODEsIDB4NEE0MCwKKwkweDRFMDAsIDB4OEVDMSwgMHg4RjgxLCAweDRGNDAsIDB4OEQwMSwgMHg0REMwLCAweDRDODAsIDB4OEM0MSwKKwkweDQ0MDAsIDB4ODRDMSwgMHg4NTgxLCAweDQ1NDAsIDB4ODcwMSwgMHg0N0MwLCAweDQ2ODAsIDB4ODY0MSwKKwkweDgyMDEsIDB4NDJDMCwgMHg0MzgwLCAweDgzNDEsIDB4NDEwMCwgMHg4MUMxLCAweDgwODEsIDB4NDA0MAorfTsKKworLyoqCisgKiBDb21wdXRlIHRoZSBDUkMtMTYgZm9yIHRoZSBkYXRhIGJ1ZmZlcgorICoKKyAqIEBwYXJhbSBjcmMgICAgIHByZXZpb3VzIENSQyB2YWx1ZQorICogQHBhcmFtIGJ1ZmZlciAgZGF0YSBwb2ludGVyCisgKiBAcGFyYW0gbGVuICAgICBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlcgorICogQHJldHVybiAgICAgICAgdGhlIHVwZGF0ZWQgQ1JDIHZhbHVlCisgKi8KK2NyYzE2X3QgZXh0MmZzX2NyYzE2KGNyYzE2X3QgY3JjLCBjb25zdCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY3AgPSBidWZmZXI7CisKKwl3aGlsZSAobGVuLS0pCisJCS8qCisJCSAqIGZvciBhbiB1bmtub3duIHJlYXNvbiwgUFBDIHRyZWF0cyBfX3UxNiBhcyBzaWduZWQKKwkJICogYW5kIGtlZXBzIGRvaW5nIHNpZ24gZXh0ZW5zaW9uIG9uIHRoZSB2YWx1ZS4KKwkJICogSW5zdGVhZCwgdXNlIG9ubHkgdGhlIGxvdyAxNiBiaXRzIG9mIGFuIHVuc2lnbmVkCisJCSAqIGludCBmb3IgaG9sZGluZyB0aGUgQ1JDIHZhbHVlIHRvIGF2b2lkIHRoaXMuCisJCSAqLworCQljcmMgPSAoKChjcmMgPj4gOCkgJiAweGZmVSkgXgorCQkgICAgICAgY3JjMTZfdGFibGVbKGNyYyBeICpjcCsrKSAmIDB4ZmZVXSkgJiAweDAwMDBmZmZmVTsKKwlyZXR1cm4gY3JjOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9jcmMxNi5oIGIvbGliL2V4dDJmcy9jcmMxNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMmU2OGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2NyYzE2LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqCWNyYzE2LmggLSBDUkMtMTYgcm91dGluZQorICoKKyAqIEltcGxlbWVudHMgdGhlIHN0YW5kYXJkIENSQy0xNjoKKyAqICAgV2lkdGggMTYKKyAqICAgUG9seSAgMHg4MDA1ICh4MTYgKyB4MTUgKyB4MiArIDEpCisgKiAgIEluaXQgIDAKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQmVuIEdhcmRuZXIgPGJnYXJkbmVyQHdhYnRlYy5jb20+CisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiBWZXJzaW9uIDIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0NSQzE2X0gKKyNkZWZpbmUgX19DUkMxNl9ICisKKy8qIGZvciBhbiB1bmtub3duIHJlYXNvbiwgUFBDIHRyZWF0cyBfX3UxNiBhcyBzaWduZWQgYW5kIGtlZXBzIGRvaW5nIHNpZ24KKyAqIGV4dGVuc2lvbiBvbiB0aGUgdmFsdWUuICBJbnN0ZWFkLCB1c2Ugb25seSB0aGUgbG93IDE2IGJpdHMgb2YgYW4KKyAqIHVuc2lnbmVkIGludCBmb3IgaG9sZGluZyB0aGUgQ1JDIHZhbHVlIHRvIGF2b2lkIHRoaXMuCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGNyYzE2X3Q7CisKK2V4dGVybiBjcmMxNl90IGV4dDJmc19jcmMxNihjcmMxNl90IGNyYywgY29uc3Qgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKTsKKworI2VuZGlmIC8qIF9fQ1JDMTZfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9jcmMzMmMuYyBiL2xpYi9leHQyZnMvY3JjMzJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUxMjUyOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvY3JjMzJjLmMKQEAgLTAsMCArMSwxMTQ0IEBACisvKgorICogY3JjMzJjLmMKKyAqCisgKiBBdWd1c3QgMjYsIDIwMTEgRGFycmljayBKLiBXb25nIDxkandvbmcgYXQgdXMuaWJtLmNvbT4KKyAqIFJldXNlIEJvYiBQZWFyc29uJ3Mgc2xpY2UtYnktOCBpbXBsZW1lbnRhdGlvbiBmb3IgZTJmc3Byb2dzLgorICoKKyAqIEp1bHkgMjAsIDIwMTEgQm9iIFBlYXJzb24gPHJwZWFyc29uIGF0IHN5c3RlbWZhYnJpY3dvcmtzLmNvbT4KKyAqIGFkZGVkIHNsaWNlIGJ5IDggYWxnb3JpdGhtIHRvIHRoZSBleGlzdGluZyBjb252ZW50aW9uYWwgYW5kCisgKiBzbGljZSBieSA0IGFsZ29yaXRobXMuCisgKgorICogT2N0IDE1LCAyMDAwIE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KKyAqIE5pY2VyIGNyYzMyIGZ1bmN0aW9ucy9kb2NzIHN1Ym1pdHRlZCBieSBsaW51eEBob3Jpem9uLmNvbS4gIFRoYW5rcyEKKyAqIENvZGUgd2FzIGZyb20gdGhlIHB1YmxpYyBkb21haW4sIGNvcHlyaWdodCBhYmFuZG9uZWQuICBDb2RlIHdhcworICogc3Vic2VxdWVudGx5IGluY2x1ZGVkIGluIHRoZSBrZXJuZWwsIHRodXMgd2FzIHJlLWxpY2Vuc2VkIHVuZGVyIHRoZQorICogR05VIEdQTCB2Mi4KKyAqCisgKiBPY3QgMTIsIDIwMDAgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgorICogU2FtZSBjcmMzMiBmdW5jdGlvbiB3YXMgdXNlZCBpbiA1IG90aGVyIHBsYWNlcyBpbiB0aGUga2VybmVsLgorICogSSBtYWRlIG9uZSB2ZXJzaW9uLCBhbmQgZGVsZXRlZCB0aGUgb3RoZXJzLgorICogVGhlcmUgYXJlIHZhcmlvdXMgaW5jYW50YXRpb25zIG9mIGNyYzMyKCkuICBTb21lIHVzZSBhIHNlZWQgb2YgMCBvciB+MC4KKyAqIFNvbWUgeG9yIGF0IHRoZSBlbmQgd2l0aCB+MC4gIFRoZSBnZW5lcmljIGNyYzMyKCkgZnVuY3Rpb24gdGFrZXMKKyAqIHNlZWQgYXMgYW4gYXJndW1lbnQsIGFuZCBkb2Vzbid0IHhvciBhdCB0aGUgZW5kLiAgVGhlbiBpbmRpdmlkdWFsCisgKiB1c2VycyBjYW4gZG8gd2hhdGV2ZXIgdGhleSBuZWVkLgorICogICBkcml2ZXJzL25ldC9zbWM5MTk0LmMgdXNlcyBzZWVkIH4wLCBkb2Vzbid0IHhvciB3aXRoIH4wLgorICogICBmcy9qZmZzMiB1c2VzIHNlZWQgMCwgZG9lc24ndCB4b3Igd2l0aCB+MC4KKyAqICAgZnMvcGFydGl0aW9ucy9lZmkuYyB1c2VzIHNlZWQgfjAsIHhvcidzIHdpdGggfjAuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiBWZXJzaW9uIDIuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgX19mb3JjZQorI2RlZmluZSBtaW4oeCwgeSkJCSgoeCkgPiAoeSkgPyAoeSkgOiAoeCkpCisjZGVmaW5lIF9fQUxJR05fS0VSTkVMX01BU0soeCwgbWFzaykJKCgoeCkgKyAobWFzaykpICYgfihtYXNrKSkKKyNkZWZpbmUgX19BTElHTl9LRVJORUwoeCwgYSkJX19BTElHTl9LRVJORUxfTUFTSyh4LCAoX190eXBlb2ZfXyh4KSkoYSkgLSAxKQorI2RlZmluZSBBTElHTih4LCBhKQkJX19BTElHTl9LRVJORUwoKHgpLCAoYSkpCisjZGVmaW5lIFBUUl9BTElHTihwLCBhKQkJKChfX3R5cGVvZl9fKHApKUFMSUdOKCh1bnNpZ25lZCBsb25nKShwKSwgKGEpKSkKKyNpbmNsdWRlICJjcmMzMmNfZGVmcy5oIgorCisjaW5jbHVkZSAiZXh0MmZzLmgiCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoeCkgX19fY29uc3RhbnRfc3dhYjMyKCh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fYmUzMih4KSAoeCkKKyNkZWZpbmUgX19iZTMyX3RvX2NwdSh4KSAoeCkKKyNkZWZpbmUgX19jcHVfdG9fYmUzMih4KSAoeCkKKyNkZWZpbmUgX19jcHVfdG9fbGUzMih4KSAoZXh0MmZzX2NwdV90b19sZTMyKCh4KSkpCisjZGVmaW5lIF9fbGUzMl90b19jcHUoeCkgKGV4dDJmc19sZTMyX3RvX2NwdSgoeCkpKQorI2Vsc2UKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGUzMih4KSAoeCkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fYmUzMih4KSBfX19jb25zdGFudF9zd2FiMzIoKHgpKQorI2RlZmluZSBfX2JlMzJfdG9fY3B1KHgpIChleHQyZnNfYmUzMl90b19jcHUoKHgpKSkKKyNkZWZpbmUgX19jcHVfdG9fYmUzMih4KSAoZXh0MmZzX2NwdV90b19iZTMyKCh4KSkpCisjZGVmaW5lIF9fY3B1X3RvX2xlMzIoeCkgKHgpCisjZGVmaW5lIF9fbGUzMl90b19jcHUoeCkgKHgpCisjZW5kaWYKKworI2lmIENSQ19MRV9CSVRTID4gOAorIyBkZWZpbmUgdG9sZSh4KSAoX19mb3JjZSB1aW50MzJfdCkgX19jb25zdGFudF9jcHVfdG9fbGUzMih4KQorI2Vsc2UKKyMgZGVmaW5lIHRvbGUoeCkgKHgpCisjZW5kaWYKKworI2lmIENSQ19CRV9CSVRTID4gOAorIyBkZWZpbmUgdG9iZSh4KSAoX19mb3JjZSB1aW50MzJfdCkgX19jb25zdGFudF9jcHVfdG9fYmUzMih4KQorI2Vsc2UKKyMgZGVmaW5lIHRvYmUoeCkgKHgpCisjZW5kaWYKKworI2luY2x1ZGUgImNyYzMyY190YWJsZS5oIgorCisjaWYgQ1JDX0xFX0JJVFMgPT0gMzIKKy8qIHNsaWNlIGJ5IDQgYWxnb3JpdGhtICovCitzdGF0aWMgdWludDMyX3QgY3JjMzJjX2xlX2JvZHkodWludDMyX3QgY3JjLCB1aW50OF90IGNvbnN0ICpidWYsIHNpemVfdCBsZW4pCit7CisJY29uc3QgdWludDhfdCAqcDg7CisJY29uc3QgdWludDMyX3QgKnAzMjsKKwlzaXplX3QgaW5pdF9ieXRlczsKKwlzaXplX3Qgd29yZHM7CisJc2l6ZV90IGVuZF9ieXRlczsKKwlzaXplX3QgaTsKKwl1aW50MzJfdCBxOworCXVpbnQ4X3QgaTAsIGkxLCBpMiwgaTM7CisKKwljcmMgPSAoX19mb3JjZSB1aW50MzJfdCkgX19jcHVfdG9fbGUzMihjcmMpOworCisJLyogdW5yb2xsIGxvb3AgaW50byAnaW5pdF9ieXRlcycgb2RkIGJ5dGVzIGZvbGxvd2VkIGJ5CisJICogJ3dvcmRzJyBhbGlnbmVkIDQgYnl0ZSB3b3JkcyBmb2xsb3dlZCBieQorCSAqICdlbmRfYnl0ZXMnIG9kZCBieXRlcyBhdCB0aGUgZW5kICovCisJcDggPSBidWY7CisJcDMyID0gKHVpbnQzMl90ICopUFRSX0FMSUdOKHA4LCA0KTsKKwlpbml0X2J5dGVzID0gbWluKCh1aW50cHRyX3QpcDMyIC0gKHVpbnRwdHJfdClwOCwgbGVuKTsKKwl3b3JkcyA9IChsZW4gLSBpbml0X2J5dGVzKSA+PiAyOworCWVuZF9ieXRlcyA9IChsZW4gLSBpbml0X2J5dGVzKSAmIDM7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5pdF9ieXRlczsgaSsrKSB7CisjaWZuZGVmIFdPUkRTX0JJR0VORElBTgorCQlpMCA9ICpwOCsrIF4gY3JjOworCQljcmMgPSB0MF9sZVtpMF0gXiAoY3JjID4+IDgpOworI2Vsc2UKKwkJaTAgPSAqcDgrKyBeIChjcmMgPj4gMjQpOworCQljcmMgPSB0MF9sZVtpMF0gXiAoY3JjIDw8IDgpOworI2VuZGlmCisJfQorCisJLyogdXNpbmcgcHJlLWluY3JlbWVudCBiZWxvdyBzbGlnaHRseSBmYXN0ZXIgKi8KKwlwMzItLTsKKworCWZvciAoaSA9IDA7IGkgPCB3b3JkczsgaSsrKSB7CisjaWZuZGVmIFdPUkRTX0JJR0VORElBTgorCQlxID0gKisrcDMyIF4gY3JjOworCQlpMyA9IHE7CisJCWkyID0gcSA+PiA4OworCQlpMSA9IHEgPj4gMTY7CisJCWkwID0gcSA+PiAyNDsKKwkJY3JjID0gdDNfbGVbaTNdIF4gdDJfbGVbaTJdIF4gdDFfbGVbaTFdIF4gdDBfbGVbaTBdOworI2Vsc2UKKwkJcSA9ICorK3AzMiBeIGNyYzsKKwkJaTMgPSBxID4+IDI0OworCQlpMiA9IHEgPj4gMTY7CisJCWkxID0gcSA+PiA4OworCQlpMCA9IHE7CisJCWNyYyA9IHQzX2xlW2kzXSBeIHQyX2xlW2kyXSBeIHQxX2xlW2kxXSBeIHQwX2xlW2kwXTsKKyNlbmRpZgorCX0KKworCXA4ID0gKHVpbnQ4X3QgKikoKytwMzIpOworCisJZm9yIChpID0gMDsgaSA8IGVuZF9ieXRlczsgaSsrKSB7CisjaWZuZGVmIFdPUkRTX0JJR0VORElBTgorCQlpMCA9ICpwOCsrIF4gY3JjOworCQljcmMgPSB0MF9sZVtpMF0gXiAoY3JjID4+IDgpOworI2Vsc2UKKwkJaTAgPSAqcDgrKyBeIChjcmMgPj4gMjQpOworCQljcmMgPSB0MF9sZVtpMF0gXiAoY3JjIDw8IDgpOworI2VuZGlmCisJfQorCisJcmV0dXJuIF9fbGUzMl90b19jcHUoKF9fZm9yY2UgX19sZTMyKWNyYyk7Cit9CisjZW5kaWYKKworI2lmIENSQ19CRV9CSVRTID09IDMyCitzdGF0aWMgdWludDMyX3QgY3JjMzJjX2JlX2JvZHkodWludDMyX3QgY3JjLCB1aW50OF90IGNvbnN0ICpidWYsIHNpemVfdCBsZW4pCit7CisJY29uc3QgdWludDhfdCAqcDg7CisJY29uc3QgdWludDMyX3QgKnAzMjsKKwlzaXplX3QgaW5pdF9ieXRlczsKKwlzaXplX3Qgd29yZHM7CisJc2l6ZV90IGVuZF9ieXRlczsKKwlzaXplX3QgaTsKKwl1aW50MzJfdCBxOworCXVpbnQ4X3QgaTAsIGkxLCBpMiwgaTM7CisKKwljcmMgPSAoX19mb3JjZSB1aW50MzJfdCkgX19jcHVfdG9fYmUzMihjcmMpOworCisJcDggPSBidWY7CisJcDMyID0gKHVpbnQzMl90ICopUFRSX0FMSUdOKHA4LCA0KTsKKwlpbml0X2J5dGVzID0gbWluKCh1aW50cHRyX3QpcDMyIC0gKHVpbnRwdHJfdClwOCwgbGVuKTsKKwl3b3JkcyA9IChsZW4gLSBpbml0X2J5dGVzKSA+PiAyOworCWVuZF9ieXRlcyA9IChsZW4gLSBpbml0X2J5dGVzKSAmIDM7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5pdF9ieXRlczsgaSsrKSB7CisjaWZuZGVmIFdPUkRTX0JJR0VORElBTgorCQlpMCA9ICpwOCsrIF4gY3JjOworCQljcmMgPSB0MF9iZVtpMF0gXiAoY3JjID4+IDgpOworI2Vsc2UKKwkJaTAgPSAqcDgrKyBeIChjcmMgPj4gMjQpOworCQljcmMgPSB0MF9iZVtpMF0gXiAoY3JjIDw8IDgpOworI2VuZGlmCisJfQorCisJcDMyLS07CisKKwlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykgeworI2lmbmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJcSA9ICorK3AzMiBeIGNyYzsKKwkJaTMgPSBxOworCQlpMiA9IHEgPj4gODsKKwkJaTEgPSBxID4+IDE2OworCQlpMCA9IHEgPj4gMjQ7CisJCWNyYyA9IHQzX2JlW2kzXSBeIHQyX2JlW2kyXSBeIHQxX2JlW2kxXSBeIHQwX2JlW2kwXTsKKyNlbHNlCisJCXEgPSAqKytwMzIgXiBjcmM7CisJCWkzID0gcSA+PiAyNDsKKwkJaTIgPSBxID4+IDE2OworCQlpMSA9IHEgPj4gODsKKwkJaTAgPSBxOworCQljcmMgPSB0M19iZVtpM10gXiB0Ml9iZVtpMl0gXiB0MV9iZVtpMV0gXiB0MF9iZVtpMF07CisjZW5kaWYKKwl9CisKKwlwOCA9ICh1aW50OF90ICopKCsrcDMyKTsKKworCWZvciAoaSA9IDA7IGkgPCBlbmRfYnl0ZXM7IGkrKykgeworI2lmbmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJaTAgPSAqcDgrKyBeIGNyYzsKKwkJY3JjID0gdDBfYmVbaTBdIF4gKGNyYyA+PiA4KTsKKyNlbHNlCisJCWkwID0gKnA4KysgXiAoY3JjID4+IDI0KTsKKwkJY3JjID0gdDBfYmVbaTBdIF4gKGNyYyA8PCA4KTsKKyNlbmRpZgorCX0KKworCXJldHVybiBfX2JlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMiljcmMpOworfQorI2VuZGlmCisKKyNpZiBDUkNfTEVfQklUUyA9PSA2NAorLyogc2xpY2UgYnkgOCBhbGdvcml0aG0gKi8KK3N0YXRpYyB1aW50MzJfdCBjcmMzMmNfbGVfYm9keSh1aW50MzJfdCBjcmMsIHVpbnQ4X3QgY29uc3QgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwljb25zdCB1aW50OF90ICpwODsKKwljb25zdCB1aW50MzJfdCAqcDMyOworCXNpemVfdCBpbml0X2J5dGVzOworCXNpemVfdCB3b3JkczsKKwlzaXplX3QgZW5kX2J5dGVzOworCXNpemVfdCBpOworCXVpbnQzMl90IHE7CisJdWludDhfdCBpMCwgaTEsIGkyLCBpMzsKKworCWNyYyA9IChfX2ZvcmNlIHVpbnQzMl90KSBfX2NwdV90b19sZTMyKGNyYyk7CisKKwlwOCA9IGJ1ZjsKKwlwMzIgPSAoY29uc3QgdWludDMyX3QgKilQVFJfQUxJR04ocDgsIDgpOworCWluaXRfYnl0ZXMgPSBtaW4oKHVpbnRwdHJfdClwMzIgLSAodWludHB0cl90KXA4LCBsZW4pOworCXdvcmRzID0gKGxlbiAtIGluaXRfYnl0ZXMpID4+IDM7CisJZW5kX2J5dGVzID0gKGxlbiAtIGluaXRfYnl0ZXMpICYgNzsKKworCWZvciAoaSA9IDA7IGkgPCBpbml0X2J5dGVzOyBpKyspIHsKKyNpZm5kZWYgV09SRFNfQklHRU5ESUFOCisJCWkwID0gKnA4KysgXiBjcmM7CisJCWNyYyA9IHQwX2xlW2kwXSBeIChjcmMgPj4gOCk7CisjZWxzZQorCQlpMCA9ICpwOCsrIF4gKGNyYyA+PiAyNCk7CisJCWNyYyA9IHQwX2xlW2kwXSBeIChjcmMgPDwgOCk7CisjZW5kaWYKKwl9CisKKwlwMzItLTsKKworCWZvciAoaSA9IDA7IGkgPCB3b3JkczsgaSsrKSB7CisjaWZuZGVmIFdPUkRTX0JJR0VORElBTgorCQlxID0gKisrcDMyIF4gY3JjOworCQlpMyA9IHE7CisJCWkyID0gcSA+PiA4OworCQlpMSA9IHEgPj4gMTY7CisJCWkwID0gcSA+PiAyNDsKKwkJY3JjID0gdDdfbGVbaTNdIF4gdDZfbGVbaTJdIF4gdDVfbGVbaTFdIF4gdDRfbGVbaTBdOworCisJCXEgPSAqKytwMzI7CisJCWkzID0gcTsKKwkJaTIgPSBxID4+IDg7CisJCWkxID0gcSA+PiAxNjsKKwkJaTAgPSBxID4+IDI0OworCQljcmMgXj0gdDNfbGVbaTNdIF4gdDJfbGVbaTJdIF4gdDFfbGVbaTFdIF4gdDBfbGVbaTBdOworI2Vsc2UKKwkJcSA9ICorK3AzMiBeIGNyYzsKKwkJaTMgPSBxID4+IDI0OworCQlpMiA9IHEgPj4gMTY7CisJCWkxID0gcSA+PiA4OworCQlpMCA9IHE7CisJCWNyYyA9IHQ3X2xlW2kzXSBeIHQ2X2xlW2kyXSBeIHQ1X2xlW2kxXSBeIHQ0X2xlW2kwXTsKKworCQlxID0gKisrcDMyOworCQlpMyA9IHEgPj4gMjQ7CisJCWkyID0gcSA+PiAxNjsKKwkJaTEgPSBxID4+IDg7CisJCWkwID0gcTsKKwkJY3JjIF49IHQzX2xlW2kzXSBeIHQyX2xlW2kyXSBeIHQxX2xlW2kxXSBeIHQwX2xlW2kwXTsKKyNlbmRpZgorCX0KKworCXA4ID0gKGNvbnN0IHVpbnQ4X3QgKikoKytwMzIpOworCisJZm9yIChpID0gMDsgaSA8IGVuZF9ieXRlczsgaSsrKSB7CisjaWZuZGVmIFdPUkRTX0JJR0VORElBTgorCQlpMCA9ICpwOCsrIF4gY3JjOworCQljcmMgPSB0MF9sZVtpMF0gXiAoY3JjID4+IDgpOworI2Vsc2UKKwkJaTAgPSAqcDgrKyBeIChjcmMgPj4gMjQpOworCQljcmMgPSB0MF9sZVtpMF0gXiAoY3JjIDw8IDgpOworI2VuZGlmCisJfQorCisJcmV0dXJuIF9fbGUzMl90b19jcHUoY3JjKTsKK30KKyNlbmRpZgorCisjaWYgQ1JDX0JFX0JJVFMgPT0gNjQKK3N0YXRpYyB1aW50MzJfdCBjcmMzMmNfYmVfYm9keSh1aW50MzJfdCBjcmMsIHVpbnQ4X3QgY29uc3QgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwljb25zdCB1aW50OF90ICpwODsKKwljb25zdCB1aW50MzJfdCAqcDMyOworCXNpemVfdCBpbml0X2J5dGVzOworCXNpemVfdCB3b3JkczsKKwlzaXplX3QgZW5kX2J5dGVzOworCXNpemVfdCBpOworCXVpbnQzMl90IHE7CisJdWludDhfdCBpMCwgaTEsIGkyLCBpMzsKKworCWNyYyA9IChfX2ZvcmNlIHVpbnQzMl90KSBfX2NwdV90b19iZTMyKGNyYyk7CisKKwlwOCA9IGJ1ZjsKKwlwMzIgPSAoY29uc3QgdWludDMyX3QgKilQVFJfQUxJR04ocDgsIDgpOworCWluaXRfYnl0ZXMgPSBtaW4oKHVpbnRwdHJfdClwMzIgLSAodWludHB0cl90KXA4LCBsZW4pOworCXdvcmRzID0gKGxlbiAtIGluaXRfYnl0ZXMpID4+IDM7CisJZW5kX2J5dGVzID0gKGxlbiAtIGluaXRfYnl0ZXMpICYgNzsKKworCWZvciAoaSA9IDA7IGkgPCBpbml0X2J5dGVzOyBpKyspIHsKKyNpZm5kZWYgV09SRFNfQklHRU5ESUFOCisJCWkwID0gKnA4KysgXiBjcmM7CisJCWNyYyA9IHQwX2JlW2kwXSBeIChjcmMgPj4gOCk7CisjZWxzZQorCQlpMCA9ICpwOCsrIF4gKGNyYyA+PiAyNCk7CisJCWNyYyA9IHQwX2JlW2kwXSBeIChjcmMgPDwgOCk7CisjZW5kaWYKKwl9CisKKwlwMzItLTsKKworCWZvciAoaSA9IDA7IGkgPCB3b3JkczsgaSsrKSB7CisjaWZuZGVmIFdPUkRTX0JJR0VORElBTgorCQlxID0gKisrcDMyIF4gY3JjOworCQlpMyA9IHE7CisJCWkyID0gcSA+PiA4OworCQlpMSA9IHEgPj4gMTY7CisJCWkwID0gcSA+PiAyNDsKKwkJY3JjID0gdDdfYmVbaTNdIF4gdDZfYmVbaTJdIF4gdDVfYmVbaTFdIF4gdDRfYmVbaTBdOworCisJCXEgPSAqKytwMzI7CisJCWkzID0gcTsKKwkJaTIgPSBxID4+IDg7CisJCWkxID0gcSA+PiAxNjsKKwkJaTAgPSBxID4+IDI0OworCQljcmMgXj0gdDNfYmVbaTNdIF4gdDJfYmVbaTJdIF4gdDFfYmVbaTFdIF4gdDBfYmVbaTBdOworI2Vsc2UKKwkJcSA9ICorK3AzMiBeIGNyYzsKKwkJaTMgPSBxID4+IDI0OworCQlpMiA9IHEgPj4gMTY7CisJCWkxID0gcSA+PiA4OworCQlpMCA9IHE7CisJCWNyYyA9IHQ3X2JlW2kzXSBeIHQ2X2JlW2kyXSBeIHQ1X2JlW2kxXSBeIHQ0X2JlW2kwXTsKKworCQlxID0gKisrcDMyOworCQlpMyA9IHEgPj4gMjQ7CisJCWkyID0gcSA+PiAxNjsKKwkJaTEgPSBxID4+IDg7CisJCWkwID0gcTsKKwkJY3JjIF49IHQzX2JlW2kzXSBeIHQyX2JlW2kyXSBeIHQxX2JlW2kxXSBeIHQwX2JlW2kwXTsKKyNlbmRpZgorCX0KKworCXA4ID0gKGNvbnN0IHVpbnQ4X3QgKikoKytwMzIpOworCisJZm9yIChpID0gMDsgaSA8IGVuZF9ieXRlczsgaSsrKSB7CisjaWZuZGVmIFdPUkRTX0JJR0VORElBTgorCQlpMCA9ICpwOCsrIF4gY3JjOworCQljcmMgPSB0MF9iZVtpMF0gXiAoY3JjID4+IDgpOworI2Vsc2UKKwkJaTAgPSAqcDgrKyBeIChjcmMgPj4gMjQpOworCQljcmMgPSB0MF9iZVtpMF0gXiAoY3JjIDw8IDgpOworI2VuZGlmCisJfQorCisJcmV0dXJuIF9fYmUzMl90b19jcHUoY3JjKTsKK30KKyNlbmRpZgorCisvKioKKyAqIGNyYzMyY19sZSgpIC0gQ2FsY3VsYXRlIGJpdHdpc2UgbGl0dGxlLWVuZGlhbiBDUkMzMmMuCisgKiBAY3JjOiBzZWVkIHZhbHVlIGZvciBjb21wdXRhdGlvbi4gIH4wIGZvciBleHQ0LCBzb21ldGltZXMgMCBmb3IKKyAqCW90aGVyIHVzZXMsIG9yIHRoZSBwcmV2aW91cyBjcmMzMmMgdmFsdWUgaWYgY29tcHV0aW5nIGluY3JlbWVudGFsbHkuCisgKiBAcDogcG9pbnRlciB0byBidWZmZXIgb3ZlciB3aGljaCBDUkMgaXMgcnVuCisgKiBAbGVuOiBsZW5ndGggb2YgYnVmZmVyIEBwCisgKi8KK3VpbnQzMl90IGV4dDJmc19jcmMzMmNfbGUodWludDMyX3QgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBzaXplX3QgbGVuKQoreworI2lmIENSQ19MRV9CSVRTID09IDEKKwlpbnQgaTsKKwl3aGlsZSAobGVuLS0pIHsKKwkJY3JjIF49ICpwKys7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQljcmMgPSAoY3JjID4+IDEpIF4gKChjcmMgJiAxKSA/IENSQ1BPTFlfTEUgOiAwKTsKKwl9CisjIGVsaWYgQ1JDX0xFX0JJVFMgPT0gMgorCXdoaWxlIChsZW4tLSkgeworCQljcmMgXj0gKnArKzsKKwkJY3JjID0gKGNyYyA+PiAyKSBeIHQwX2xlW2NyYyAmIDB4MDNdOworCQljcmMgPSAoY3JjID4+IDIpIF4gdDBfbGVbY3JjICYgMHgwM107CisJCWNyYyA9IChjcmMgPj4gMikgXiB0MF9sZVtjcmMgJiAweDAzXTsKKwkJY3JjID0gKGNyYyA+PiAyKSBeIHQwX2xlW2NyYyAmIDB4MDNdOworCX0KKyMgZWxpZiBDUkNfTEVfQklUUyA9PSA0CisJd2hpbGUgKGxlbi0tKSB7CisJCWNyYyBePSAqcCsrOworCQljcmMgPSAoY3JjID4+IDQpIF4gdDBfbGVbY3JjICYgMHgwZl07CisJCWNyYyA9IChjcmMgPj4gNCkgXiB0MF9sZVtjcmMgJiAweDBmXTsKKwl9CisjIGVsaWYgQ1JDX0xFX0JJVFMgPT0gOAorCXdoaWxlIChsZW4tLSkgeworCQljcmMgXj0gKnArKzsKKwkJY3JjID0gKGNyYyA+PiA4KSBeIHQwX2xlW2NyYyAmIDB4ZmZdOworCX0KKyMgZWxzZQorCWNyYyA9IGNyYzMyY19sZV9ib2R5KGNyYywgcCwgbGVuKTsKKyMgZW5kaWYKKwlyZXR1cm4gY3JjOworfQorCisvKioKKyAqIGNyYzMyY19iZSgpIC0gQ2FsY3VsYXRlIGJpdHdpc2UgYmlnLWVuZGlhbiBDUkMzMmMuCisgKiBAY3JjOiBzZWVkIHZhbHVlIGZvciBjb21wdXRhdGlvbi4gIH4wIGZvciBleHQ0LCBzb21ldGltZXMgMCBmb3IKKyAqCW90aGVyIHVzZXMsIG9yIHRoZSBwcmV2aW91cyBjcmMzMmMgdmFsdWUgaWYgY29tcHV0aW5nIGluY3JlbWVudGFsbHkuCisgKiBAcDogcG9pbnRlciB0byBidWZmZXIgb3ZlciB3aGljaCBDUkMgaXMgcnVuCisgKiBAbGVuOiBsZW5ndGggb2YgYnVmZmVyIEBwCisgKi8KK3VpbnQzMl90IGV4dDJmc19jcmMzMmNfYmUodWludDMyX3QgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBzaXplX3QgbGVuKQoreworI2lmIENSQ19CRV9CSVRTID09IDEKKwlpbnQgaTsKKwl3aGlsZSAobGVuLS0pIHsKKwkJY3JjIF49ICpwKysgPDwgMjQ7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQljcmMgPSAoY3JjIDw8IDEpIF4KKwkJCSAgICAgICgoY3JjICYgMHg4MDAwMDAwMCkgPyBDUkNQT0xZX0JFIDogMCk7CisJfQorIyBlbGlmIENSQ19CRV9CSVRTID09IDIKKwl3aGlsZSAobGVuLS0pIHsKKwkJY3JjIF49ICpwKysgPDwgMjQ7CisJCWNyYyA9IChjcmMgPDwgMikgXiB0MF9iZVtjcmMgPj4gMzBdOworCQljcmMgPSAoY3JjIDw8IDIpIF4gdDBfYmVbY3JjID4+IDMwXTsKKwkJY3JjID0gKGNyYyA8PCAyKSBeIHQwX2JlW2NyYyA+PiAzMF07CisJCWNyYyA9IChjcmMgPDwgMikgXiB0MF9iZVtjcmMgPj4gMzBdOworCX0KKyMgZWxpZiBDUkNfQkVfQklUUyA9PSA0CisJd2hpbGUgKGxlbi0tKSB7CisJCWNyYyBePSAqcCsrIDw8IDI0OworCQljcmMgPSAoY3JjIDw8IDQpIF4gdDBfYmVbY3JjID4+IDI4XTsKKwkJY3JjID0gKGNyYyA8PCA0KSBeIHQwX2JlW2NyYyA+PiAyOF07CisJfQorIyBlbGlmIENSQ19CRV9CSVRTID09IDgKKwl3aGlsZSAobGVuLS0pIHsKKwkJY3JjIF49ICpwKysgPDwgMjQ7CisJCWNyYyA9IChjcmMgPDwgOCkgXiB0MF9iZVtjcmMgPj4gMjRdOworCX0KKyMgZWxzZQorCWNyYyA9IGNyYzMyY19iZV9ib2R5KGNyYywgcCwgbGVuKTsKKyMgZW5kaWYKKwlyZXR1cm4gY3JjOworfQorCisjaWZkZWYgVU5JVFRFU1QKK3N0YXRpYyB1aW50OF90IHRlc3RfYnVmW10gPSB7CisJMHhkOSwgMHhkNywgMHg2YSwgMHgxMywgMHgzYSwgMHhiMSwgMHgwNSwgMHg0OCwKKwkweGRhLCAweGFkLCAweDE0LCAweGJkLCAweDAzLCAweDNhLCAweDU4LCAweDVlLAorCTB4NmUsIDB4ZDEsIDB4NTYsIDB4YzksIDB4MmUsIDB4YzQsIDB4Y2IsIDB4NmIsCisJMHhlOCwgMHg3NywgMHg1MiwgMHgzNywgMHg0ZSwgMHgwZiwgMHg1NSwgMHhkMiwKKwkweDEyLCAweDY1LCAweDkwLCAweGMyLCAweDQxLCAweDQ5LCAweDgxLCAweDAxLAorCTB4ZjUsIDB4MDEsIDB4ZWIsIDB4MmQsIDB4NzgsIDB4NzQsIDB4MjMsIDB4NWQsCisJMHg4NCwgMHg1YywgMHg4MSwgMHg5MiwgMHgyMSwgMHhlOSwgMHg4ZCwgMHgxZCwKKwkweDg5LCAweGYyLCAweDRhLCAweGFjLCAweGRkLCAweGY5LCAweGFmLCAweGVlLAorCTB4NDQsIDB4ZTcsIDB4NmUsIDB4ZWQsIDB4ZmIsIDB4ZDgsIDB4ODksIDB4MGUsCisJMHg5NiwgMHg2MiwgMHhjZCwgMHhhNCwgMHg0YiwgMHhhOSwgMHhlNSwgMHg0NSwKKwkweGIxLCAweDI5LCAweDliLCAweDBmLCAweGZjLCAweGJkLCAweDgzLCAweGFiLAorCTB4YTgsIDB4NTQsIDB4OTYsIDB4NDQsIDB4MmMsIDB4N2YsIDB4YmIsIDB4ZTcsCisJMHg1MiwgMHgyOSwgMHgwOCwgMHhlZSwgMHgxNCwgMHhjNSwgMHhjMiwgMHhlYywKKwkweDVhLCAweGViLCAweDQwLCAweDQwLCAweGVhLCAweGQxLCAweDNkLCAweDE1LAorCTB4NzMsIDB4YWEsIDB4OGMsIDB4NzMsIDB4ZmMsIDB4ZjIsIDB4MmIsIDB4NDksCisJMHgwYiwgMHgxMywgMHg5NiwgMHhkOSwgMHg4ZSwgMHg0YiwgMHhiYywgMHhlMCwKKwkweGY0LCAweGQyLCAweGUwLCAweDJlLCAweDdhLCAweGYwLCAweDVkLCAweDFmLAorCTB4ZDIsIDB4OTIsIDB4OTcsIDB4ZTAsIDB4YWEsIDB4NTksIDB4YWIsIDB4YzksCisJMHg1YywgMHhhNiwgMHg1MSwgMHgxYSwgMHhlMywgMHhkNiwgMHgwNiwgMHhiOSwKKwkweGFlLCAweGI4LCAweDc2LCAweDM2LCAweDc5LCAweDM3LCAweDUyLCAweGY2LAorCTB4MzQsIDB4YWYsIDB4MjcsIDB4MTksIDB4ZTEsIDB4YzAsIDB4MmIsIDB4ZGQsCisJMHgwMSwgMHgxNSwgMHhjZCwgMHhjZSwgMHg0NCwgMHhmNiwgMHg0YywgMHgxOCwKKwkweDkyLCAweDY5LCAweGJlLCAweDhhLCAweDc2LCAweDIzLCAweDUyLCAweDEzLAorCTB4M2YsIDB4ZjksIDB4ZTAsIDB4ZjUsIDB4MDYsIDB4MjgsIDB4N2MsIDB4YzcsCisJMHhmMywgMHg0MiwgMHgwZiwgMHhkZCwgMHg0MCwgMHgzMywgMHhmNywgMHg5OSwKKwkweGUyLCAweGFkLCAweDI2LCAweGQ5LCAweDUzLCAweDEwLCAweDcyLCAweDBjLAorCTB4NGUsIDB4NDMsIDB4NGMsIDB4NjEsIDB4ZmUsIDB4ZDksIDB4YzEsIDB4MTYsCisJMHhhMSwgMHg5MywgMHhjYSwgMHgzYywgMHg3NSwgMHg3ZiwgMHgwNywgMHg3YSwKKwkweDY1LCAweGIzLCAweDUzLCAweDJhLCAweDUyLCAweDAwLCAweGEwLCAweDYyLAorCTB4ZTAsIDB4YTMsIDB4MWYsIDB4YWQsIDB4ZDcsIDB4YmIsIDB4YzAsIDB4ODMsCisJMHg1ZCwgMHg1NCwgMHg4NywgMHg1ZiwgMHhjOCwgMHgyZiwgMHhjOCwgMHhiZiwKKwkweDY5LCAweDA0LCAweDkxLCAweGM4LCAweGE2LCAweDFkLCAweDRkLCAweDQ2LAorCTB4OTEsIDB4ZmMsIDB4MjYsIDB4ZjQsIDB4MTYsIDB4ZDEsIDB4YTQsIDB4YmYsCisJMHg1YywgMHhhMiwgMHg2YywgMHhkZCwgMHhiNCwgMHg0MCwgMHhmMiwgMHgyZSwKKwkweGEyLCAweGFkLCAweGY3LCAweGY0LCAweGE1LCAweDhhLCAweDNlLCAweDIzLAorCTB4NjQsIDB4MDgsIDB4YzgsIDB4YTEsIDB4YTAsIDB4ZjAsIDB4NWQsIDB4NzAsCisJMHhkMiwgMHg3NywgMHhmZCwgMHhjOCwgMHg1MCwgMHg4MywgMHgwZiwgMHhkNiwKKwkweDJiLCAweGU0LCAweDFmLCAweDUyLCAweDM0LCAweDMzLCAweDY4LCAweGZkLAorCTB4OTIsIDB4YmUsIDB4OWYsIDB4OTcsIDB4NmIsIDB4OGQsIDB4ODEsIDB4OTEsCisJMHgwZiwgMHhlZiwgMHg2NSwgMHhjOCwgMHgwZCwgMHgxNSwgMHgwMSwgMHg3NywKKwkweDU4LCAweGIyLCAweGY0LCAweDFiLCAweDA2LCAweDdlLCAweGY1LCAweGNhLAorCTB4MTUsIDB4MmUsIDB4MzgsIDB4ZDgsIDB4ODEsIDB4MWMsIDB4MWMsIDB4YTAsCisJMHhiNiwgMHgxMywgMHg2YSwgMHgyYiwgMHg3MSwgMHgzNCwgMHg1MiwgMHhkNywKKwkweDFkLCAweGJkLCAweDM3LCAweDU5LCAweGJjLCAweDg2LCAweDI1LCAweDJiLAorCTB4YTgsIDB4OTMsIDB4Y2UsIDB4MWEsIDB4MDMsIDB4MTYsIDB4ZmUsIDB4MDEsCisJMHg1NywgMHg5OSwgMHgyNCwgMHgyNSwgMHgyYywgMHhiMywgMHhhYiwgMHgxZSwKKwkweDJkLCAweDY1LCAweDIwLCAweDg5LCAweDE3LCAweDAyLCAweDBlLCAweDBhLAorCTB4ZjUsIDB4MWUsIDB4YzcsIDB4ZmYsIDB4MWYsIDB4NjEsIDB4YTksIDB4NTQsCisJMHgxOCwgMHhkNCwgMHhiYSwgMHg1MCwgMHg1NywgMHgwMiwgMHhhMSwgMHhhYiwKKwkweDIyLCAweDJlLCAweDA3LCAweGVhLCAweGE5LCAweGEzLCAweDgzLCAweDRmLAorCTB4MjcsIDB4ZjUsIDB4YzUsIDB4ZWUsIDB4M2MsIDB4M2IsIDB4MTAsIDB4YWQsCisJMHgzMiwgMHgyYiwgMHgxYywgMHgwMywgMHhjYiwgMHhhZiwgMHg5OCwgMHg4MywKKwkweDU0LCAweGMzLCAweDY4LCAweDYzLCAweGQ0LCAweGUwLCAweDBlLCAweDNjLAorCTB4MWEsIDB4NGUsIDB4YzAsIDB4ODEsIDB4ZDAsIDB4ZTgsIDB4NmEsIDB4NjIsCisJMHg2YiwgMHgzZSwgMHg2ZiwgMHhjNCwgMHhjNiwgMHgzMywgMHg0ZSwgMHgyNiwKKwkweDIxLCAweGY1LCAweDA0LCAweGRmLCAweGZhLCAweGNlLCAweDQ1LCAweGFmLAorCTB4ZGMsIDB4NWUsIDB4MWIsIDB4YWQsIDB4OTMsIDB4Y2EsIDB4ZjUsIDB4Y2YsCisJMHhkNywgMHhlZSwgMHgwYywgMHg1YywgMHg1ZSwgMHhiNCwgMHhmMCwgMHg5MiwKKwkweGQyLCAweGYyLCAweGYwLCAweGE5LCAweDFlLCAweGFiLCAweDgwLCAweDY4LAorCTB4NDYsIDB4ZWYsIDB4Y2MsIDB4MjYsIDB4MGMsIDB4NWMsIDB4ZGQsIDB4NGUsCisJMHg4MywgMHhiOCwgMHhiOSwgMHg1MywgMHg2ZSwgMHhmOCwgMHg5MywgMHgzOCwKKwkweDY3LCAweGE0LCAweDQxLCAweDg3LCAweDcyLCAweGU3LCAweDdlLCAweDg2LAorCTB4YzksIDB4NDksIDB4MDAsIDB4MzMsIDB4YjEsIDB4MzgsIDB4NmMsIDB4NzEsCisJMHhkNywgMHgxZCwgMHg4ZSwgMHg2MSwgMHgwMSwgMHhiNiwgMHg1NywgMHhhOSwKKwkweGYxLCAweGFjLCAweDE1LCAweGMyLCAweDgzLCAweDc3LCAweGNhLCAweDY0LAorCTB4Y2EsIDB4N2IsIDB4NmMsIDB4YTEsIDB4MTAsIDB4MWIsIDB4MTMsIDB4ZDAsCisJMHhkMywgMHg5ZSwgMHg5ZSwgMHgxMCwgMHg3MCwgMHhjOCwgMHgxYSwgMHhiYiwKKwkweDNmLCAweDE5LCAweDg2LCAweGFiLCAweDAxLCAweDBlLCAweGVhLCAweDM0LAorCTB4MjIsIDB4ZWEsIDB4ZTIsIDB4MTUsIDB4YjcsIDB4ZWQsIDB4MjEsIDB4MjEsCisJMHg3NSwgMHhhNSwgMHhlNywgMHgwOCwgMHhhMSwgMHgzOCwgMHhlMCwgMHg5MSwKKwkweDA1LCAweDYwLCAweGVhLCAweGE3LCAweDUwLCAweDI3LCAweDE4LCAweDA3LAorCTB4OWQsIDB4ZTAsIDB4MTgsIDB4MmIsIDB4ZDQsIDB4MDcsIDB4NTksIDB4MDAsCisJMHhlNiwgMHg0NSwgMHgxOCwgMHgyYSwgMHgzMCwgMHg2ZSwgMHhmMywgMHhiNCwKKwkweGQwLCAweGVmLCAweGE2LCAweDViLCAweDcxLCAweGEyLCAweDVhLCAweDNiLAorCTB4ODksIDB4NGMsIDB4YWYsIDB4M2YsIDB4Y2IsIDB4OWYsIDB4MDMsIDB4ZmIsCisJMHg0MywgMHg3YywgMHg2YiwgMHhkMywgMHg2YSwgMHhlYSwgMHhjZSwgMHg0YSwKKwkweDVmLCAweDY0LCAweGI1LCAweDYyLCAweGRhLCAweDVkLCAweDI3LCAweGI3LAorCTB4YjgsIDB4MTEsIDB4Y2EsIDB4MzMsIDB4MzAsIDB4ZWMsIDB4NzAsIDB4ZjAsCisJMHgxYiwgMHgwMywgMHg1MCwgMHhmZiwgMHg1ZSwgMHhhNiwgMHgwOCwgMHhkZSwKKwkweDM3LCAweDcwLCAweGMwLCAweDgxLCAweDU1LCAweDYwLCAweDE3LCAweGExLAorCTB4ODUsIDB4YWUsIDB4MjYsIDB4NDQsIDB4ZTQsIDB4NjcsIDB4M2MsIDB4OTEsCisJMHhmZCwgMHhjNCwgMHgzZCwgMHg5NywgMHg3MiwgMHgyMywgMHhmMywgMHgzYywKKwkweDhmLCAweGUwLCAweGUyLCAweGYyLCAweDA5LCAweDk2LCAweDEwLCAweDY3LAorCTB4YjUsIDB4ZmUsIDB4ZmYsIDB4M2QsIDB4NGEsIDB4YzgsIDB4NjIsIDB4MTEsCisJMHhhNSwgMHg5OCwgMHhjMSwgMHgyZCwgMHg0MCwgMHg4MiwgMHg4OCwgMHg4YiwKKwkweGU1LCAweGIwLCAweDc1LCAweGJmLCAweDJmLCAweGE4LCAweDZhLCAweDU1LAorCTB4NDksIDB4MmUsIDB4OWMsIDB4MjksIDB4ZDIsIDB4N2MsIDB4YmYsIDB4ZjMsCisJMHhhYSwgMHgzYSwgMHgxNiwgMHg0YSwgMHhhNCwgMHgxNSwgMHhmMywgMHg0OCwKKwkweGRlLCAweDM4LCAweDEzLCAweDQ0LCAweDI2LCAweDAyLCAweGU2LCAweGU5LAorCTB4YTgsIDB4MjQsIDB4ODksIDB4YjUsIDB4NDMsIDB4OTUsIDB4ZTQsIDB4NGMsCisJMHhjMywgMHhhMCwgMHhkZiwgMHhjYywgMHg0MiwgMHhmOCwgMHg4ZCwgMHhiMCwKKwkweDNiLCAweGVhLCAweDEwLCAweGI3LCAweGUxLCAweDQwLCAweDU0LCAweGI5LAorCTB4YTMsIDB4MmQsIDB4ZmIsIDB4YjQsIDB4OTEsIDB4YzAsIDB4M2UsIDB4OTQsCisJMHhmMSwgMHhhMSwgMHgzYywgMHhiZSwgMHhlZiwgMHhiOCwgMHg3MCwgMHg1NSwKKwkweDBhLCAweDI2LCAweDkzLCAweGJmLCAweGU2LCAweDIxLCAweDkyLCAweDMyLAorCTB4M2MsIDB4MzksIDB4MjcsIDB4NmEsIDB4MjMsIDB4NDgsIDB4MDIsIDB4MzUsCisJMHgzYywgMHhkNCwgMHhjYywgMHgwNCwgMHhjMCwgMHg0ZSwgMHhhNywgMHgwMiwKKwkweDYzLCAweDM3LCAweGMyLCAweGI4LCAweDU2LCAweDFkLCAweDU3LCAweDU3LAorCTB4NDIsIDB4MDQsIDB4OGQsIDB4ZWUsIDB4Y2YsIDB4OGIsIDB4YzksIDB4YzMsCisJMHhiYSwgMHgzYiwgMHgxNSwgMHhkNywgMHhhZiwgMHhiZiwgMHg5ZSwgMHhjZCwKKwkweDQ0LCAweGNmLCAweGYwLCAweDAwLCAweGI3LCAweDNhLCAweGZjLCAweGE4LAorCTB4MTIsIDB4YWIsIDB4M2EsIDB4NjIsIDB4MDEsIDB4MjEsIDB4NDYsIDB4ZTksCisJMHgxZSwgMHg0OCwgMHgzNywgMHhmYywgMHgxMywgMHg0ZCwgMHhmNiwgMHgyYSwKKwkweDcyLCAweDQwLCAweDc1LCAweDM4LCAweDcxLCAweGYyLCAweDE3LCAweDIwLAorCTB4MmMsIDB4ZGQsIDB4YzAsIDB4NDksIDB4YmMsIDB4NjMsIDB4MzMsIDB4ZWEsCisJMHgwNiwgMHg3NSwgMHg0MSwgMHhlNywgMHg1YywgMHgxZiwgMHhmYiwgMHhmOSwKKwkweDY4LCAweDgzLCAweGMyLCAweDVhLCAweDRhLCAweDFlLCAweDYxLCAweDA4LAorCTB4NTcsIDB4ZjMsIDB4MDAsIDB4YmEsIDB4NzcsIDB4OTIsIDB4NjMsIDB4YTUsCisJMHhiNywgMHhmZSwgMHg5NywgMHgyMiwgMHhkYSwgMHg1ZSwgMHhkMywgMHhhZiwKKwkweGJjLCAweDg5LCAweDBkLCAweDRjLCAweDM3LCAweGE5LCAweDI3LCAweDRhLAorCTB4N2YsIDB4ZGIsIDB4ODEsIDB4MzksIDB4MTEsIDB4ODYsIDB4MTIsIDB4ZjksCisJMHgxMCwgMHg1MCwgMHhlNCwgMHhkYiwgMHg3MiwgMHhmOSwgMHhhZSwgMHgxMCwKKwkweDdjLCAweGVkLCAweDUwLCAweDVjLCAweDYxLCAweGViLCAweDQyLCAweDFlLAorCTB4YTQsIDB4ZjQsIDB4ZjAsIDB4ZmEsIDB4NDUsIDB4NGQsIDB4OTUsIDB4MmIsCisJMHhkNCwgMHg2NywgMHg0YSwgMHhlMywgMHg4YSwgMHgxNSwgMHg1NSwgMHg5MiwKKwkweDc3LCAweDY0LCAweDhjLCAweDUxLCAweDM4LCAweGY5LCAweDI2LCAweDNlLAorCTB4NjgsIDB4ZTIsIDB4YWMsIDB4YmIsIDB4NjQsIDB4NzcsIDB4ZTIsIDB4ODIsCisJMHhhNCwgMHg0MiwgMHg0MSwgMHgzOCwgMHhhMCwgMHhmMCwgMHhjOSwgMHhkOCwKKwkweDZjLCAweGUwLCAweGVmLCAweDRjLCAweGRhLCAweGI0LCAweDkyLCAweGVmLAorCTB4MWIsIDB4ZTMsIDB4OWIsIDB4YzEsIDB4NDQsIDB4M2MsIDB4YjksIDB4YjcsCisJMHgzOSwgMHhhYywgMHg1YywgMHgzMiwgMHgzOSwgMHhiNCwgMHgyMSwgMHg4NSwKKwkweDkzLCAweGJjLCAweGYyLCAweDUxLCAweDQzLCAweGI3LCAweGFlLCAweDFlLAorCTB4NjEsIDB4OWMsIDB4MzgsIDB4OWMsIDB4YWEsIDB4ZmYsIDB4ZGUsIDB4ZmMsCisJMHhiZiwgMHg4NSwgMHhlZiwgMHgxNywgMHgzNCwgMHgzNiwgMHg3MSwgMHg1ZiwKKwkweDA0LCAweDE2LCAweGE2LCAweDllLCAweGZkLCAweDNhLCAweDAzLCAweGQ4LAorCTB4YmYsIDB4NzEsIDB4NzAsIDB4MjAsIDB4OGYsIDB4N2MsIDB4ZmIsIDB4ZmYsCisJMHg2MSwgMHhlMCwgMHhlMiwgMHg2MCwgMHhhNywgMHhiMSwgMHhjMCwgMHhlMCwKKwkweGQ5LCAweDNmLCAweGRjLCAweDhkLCAweDRhLCAweGE0LCAweDUyLCAweDYxLAorCTB4YWYsIDB4OWQsIDB4ZGYsIDB4OGEsIDB4MGQsIDB4NDEsIDB4YzAsIDB4MjUsCisJMHg2OCwgMHgxMiwgMHg3YiwgMHhkNSwgMHhjNywgMHhkYiwgMHg2OCwgMHg3MCwKKwkweDJkLCAweDdkLCAweDk1LCAweDEyLCAweDAzLCAweDIzLCAweDBjLCAweGU4LAorCTB4MTQsIDB4NDEsIDB4MTEsIDB4MjgsIDB4ZWMsIDB4OWQsIDB4ZDMsIDB4MjgsCisJMHg3NywgMHg3YSwgMHgzYywgMHg5MywgMHg4ZSwgMHg1YywgMHg3ZSwgMHhiMywKKwkweDQyLCAweDlhLCAweDE4LCAweDI1LCAweDkzLCAweGM4LCAweGVhLCAweDQzLAorCTB4MWIsIDB4YmUsIDB4ZDUsIDB4MjcsIDB4ZjEsIDB4ZDQsIDB4ZTAsIDB4MWUsCisJMHhjZSwgMHhjNywgMHhjNywgMHgyYywgMHgyNSwgMHgzNSwgMHg1OCwgMHhiOCwKKwkweDZjLCAweGYzLCAweGEyLCAweGFkLCAweGU3LCAweDU4LCAweDQ5LCAweDQ3LAorCTB4ZjcsIDB4Y2EsIDB4ZGUsIDB4OGIsIDB4ODEsIDB4YjcsIDB4NzUsIDB4ZjQsCisJMHg5NSwgMHhhNywgMHg1YywgMHhjMywgMHgyYywgMHgwZSwgMHgxYywgMHg1MiwKKwkweDlhLCAweGMzLCAweDJhLCAweDAwLCAweDIxLCAweGE3LCAweDUxLCAweDZiLAorCTB4ZjAsIDB4MDUsIDB4ODcsIDB4OGMsIDB4NDIsIDB4MWIsIDB4YzMsIDB4MmUsCisJMHhhMywgMHg3NiwgMHgyMiwgMHhkNSwgMHg3ZiwgMHg1NiwgMHgxMCwgMHhlZiwKKwkweDk4LCAweDg1LCAweDY1LCAweDg2LCAweDcxLCAweDg3LCAweGQyLCAweDhjLAorCTB4YzAsIDB4NDcsIDB4MjAsIDB4ZTgsIDB4YjUsIDB4MWMsIDB4ZTMsIDB4ZGQsCisJMHgzYywgMHg1YywgMHgwMywgMHhiYiwgMHgwZSwgMHg5NywgMHgzYiwgMHhlMSwKKwkweDU2LCAweDlhLCAweGQ1LCAweDBhLCAweDYzLCAweGQ1LCAweDMzLCAweGFmLAorCTB4MzYsIDB4Y2EsIDB4Y2YsIDB4OGYsIDB4MDAsIDB4MjgsIDB4YTMsIDB4NDUsCisJMHhiOCwgMHhjZCwgMHhkZSwgMHg3MywgMHhkNCwgMHhmYSwgMHgyZCwgMHg2ZiwKKwkweGRiLCAweDkzLCAweGFhLCAweGRkLCAweDdmLCAweGQyLCAweDIyLCAweDljLAorCTB4OTYsIDB4NDgsIDB4MWUsIDB4YTgsIDB4NjMsIDB4YmUsIDB4YmMsIDB4MGQsCisJMHgxNCwgMHgzYywgMHgyZSwgMHgxMSwgMHgxZiwgMHhkMiwgMHhmNCwgMHg1NywKKwkweGIzLCAweDQ3LCAweGY4LCAweGE2LCAweDFiLCAweGMzLCAweGE3LCAweDk1LAorCTB4MmQsIDB4ZDQsIDB4Y2EsIDB4YjgsIDB4MGQsIDB4ZmIsIDB4MDYsIDB4ODUsCisJMHhkYSwgMHg2MywgMHhmMCwgMHgzZSwgMHg5ZCwgMHg1ZSwgMHhlZSwgMHhjZSwKKwkweGVkLCAweDc0LCAweDFkLCAweDJjLCAweDk3LCAweDNmLCAweDcxLCAweDk1LAorCTB4MTIsIDB4MDMsIDB4YzUsIDB4OTIsIDB4NDYsIDB4ODQsIDB4MWIsIDB4MDcsCisJMHhlNiwgMHhiNCwgMHgxZCwgMHgzYSwgMHhmMSwgMHg4OSwgMHg5MCwgMHg1MCwKKwkweDEwLCAweDI5LCAweDM0LCAweGMwLCAweDkwLCAweGJlLCAweDRhLCAweGE5LAorCTB4MGQsIDB4YjAsIDB4N2IsIDB4ZmIsIDB4MzUsIDB4ZWUsIDB4NGUsIDB4MzQsCisJMHhlYywgMHg1YSwgMHg1OCwgMHhiYywgMHhiOCwgMHhkYSwgMHgzOCwgMHg4OCwKKwkweDhjLCAweDc0LCAweDFlLCAweGM5LCAweGFiLCAweDc4LCAweDJlLCAweDJhLAorCTB4MTcsIDB4OGEsIDB4NDMsIDB4M2QsIDB4YTEsIDB4MmEsIDB4NDEsIDB4YjUsCisJMHhkNiwgMHhlOCwgMHg1YiwgMHhjNSwgMHg0YSwgMHgxYywgMHgzYywgMHg5ZiwKKwkweDhkLCAweDNhLCAweDY5LCAweDg4LCAweGY4LCAweDgwLCAweGQyLCAweDExLAorCTB4ZmMsIDB4N2UsIDB4ODAsIDB4OGUsIDB4N2YsIDB4ODUsIDB4NjQsIDB4OWMsCisJMHg0NiwgMHg1OCwgMHhjOCwgMHg0OCwgMHg5OCwgMHg0YiwgMHhmNSwgMHg3MywKKwkweDNmLCAweDQ5LCAweGNlLCAweDUzLCAweDJjLCAweGQ1LCAweGZjLCAweDMzLAorCTB4ZjEsIDB4NmYsIDB4ZDgsIDB4ZTksIDB4MmUsIDB4NzAsIDB4MmUsIDB4ZGMsCisJMHhlNSwgMHg0MywgMHg4MCwgMHgzOCwgMHhmMiwgMHg4NywgMHhlZCwgMHg4NSwKKwkweGU0LCAweDNlLCAweDQ1LCAweDE0LCAweDIwLCAweGNmLCAweGEwLCAweDYxLAorCTB4NGYsIDB4ZTgsIDB4ZDcsIDB4NWIsIDB4YjMsIDB4MGQsIDB4MGUsIDB4NGUsCisJMHg0ZCwgMHhjZSwgMHhiZSwgMHhiYSwgMHhhYSwgMHg5MCwgMHgwOSwgMHhjYiwKKwkweDRiLCAweDVkLCAweDA4LCAweGZmLCAweDUyLCAweGQ1LCAweDIzLCAweGJjLAorCTB4YWQsIDB4OGQsIDB4ZDMsIDB4MDYsIDB4NGEsIDB4YTAsIDB4NTEsIDB4NTYsCisJMHhhNywgMHhkOCwgMHgzMywgMHhhYiwgMHhiYywgMHhkMCwgMHhkZiwgMHg5MiwKKwkweDg3LCAweDIwLCAweDJkLCAweDdiLCAweDVlLCAweGZhLCAweDMwLCAweGE3LAorCTB4MDYsIDB4MDYsIDB4ZTUsIDB4NGYsIDB4MmMsIDB4YjUsIDB4NjEsIDB4ZDcsCisJMHg1NCwgMHhkMywgMHhkZiwgMHhkMCwgMHgwYSwgMHhiMCwgMHgwNiwgMHhjZSwKKwkweGY2LCAweDg2LCAweGI3LCAweDhlLCAweGFhLCAweDdiLCAweDc4LCAweGQ1LAorCTB4YjksIDB4ZWIsIDB4MDcsIDB4YWMsIDB4NWYsIDB4YzUsIDB4ZDIsIDB4OGMsCisJMHg0MCwgMHhlMCwgMHg3ZiwgMHg5OCwgMHhkNCwgMHhlNSwgMHg0YiwgMHhjYSwKKwkweGZiLCAweDQ3LCAweGVmLCAweGVmLCAweGI5LCAweDRkLCAweDZkLCAweDhmLAorCTB4ODIsIDB4NjgsIDB4NzQsIDB4ODQsIDB4ZTAsIDB4MGEsIDB4OTMsIDB4MGYsCisJMHhiMiwgMHgwMSwgMHhhOSwgMHg5ZiwgMHg2OCwgMHg2YSwgMHhlOCwgMHhmNywKKwkweGZiLCAweDBiLCAweGRlLCAweDE3LCAweGUwLCAweDMwLCAweDM4LCAweDUxLAorCTB4YmMsIDB4MDcsIDB4YjgsIDB4MmMsIDB4OTEsIDB4MGYsIDB4YzEsIDB4MGUsCisJMHhhNiwgMHhmOSwgMHhmMCwgMHhkNSwgMHg0OCwgMHg3NiwgMHg4YSwgMHhkZSwKKwkweDc0LCAweGUzLCAweDMwLCAweDY1LCAweDU2LCAweGIzLCAweDVjLCAweGUyLAorCTB4ODksIDB4OGQsIDB4ZGEsIDB4ODAsIDB4YWQsIDB4MGYsIDB4MjIsIDB4ZmIsCisJMHgyNCwgMHgxZCwgMHgxNiwgMHhkZCwgMHgzNCwgMHg0YiwgMHg5MCwgMHg1OCwKKwkweDRlLCAweDBjLCAweDEzLCAweDI4LCAweGNmLCAweDFkLCAweGE0LCAweGFhLAorCTB4YjcsIDB4ZjMsIDB4YjEsIDB4NjYsIDB4YWQsIDB4M2IsIDB4Y2YsIDB4NzksCisJMHgxMiwgMHgwNCwgMHhkNywgMHg3OSwgMHhkOSwgMHg1ZiwgMHhkZiwgMHg4OSwKKwkweGIyLCAweDViLCAweGE3LCAweDlhLCAweDI2LCAweDFlLCAweDY3LCAweDQ2LAorCTB4N2MsIDB4NjYsIDB4OTUsIDB4NjcsIDB4ZTYsIDB4NDUsIDB4OGIsIDB4MWYsCisJMHg2NSwgMHg3OSwgMHg5ZiwgMHg2ZCwgMHgxMSwgMHg4MSwgMHgxNywgMHgwZCwKKwkweDExLCAweGIwLCAweDVjLCAweGI0LCAweGM3LCAweDI3LCAweDg3LCAweGFiLAorCTB4NWQsIDB4MGEsIDB4MTgsIDB4YWUsIDB4NGUsIDB4MDYsIDB4YTMsIDB4M2QsCisJMHhjNywgMHhiMCwgMHgyMiwgMHhiYSwgMHgwMywgMHhhNCwgMHgwZiwgMHhlNSwKKwkweDFjLCAweDcyLCAweDJhLCAweDA0LCAweGNlLCAweDgzLCAweGU5LCAweGYzLAorCTB4ZDcsIDB4YzksIDB4NjcsIDB4NmMsIDB4MWUsIDB4NmIsIDB4M2MsIDB4OWIsCisJMHgwYiwgMHg1ZSwgMHg2YSwgMHhhNiwgMHg3OSwgMHgwYSwgMHhmMSwgMHhiZSwKKwkweGQ3LCAweGI0LCAweDZmLCAweDQ1LCAweDFlLCAweGZiLCAweDc4LCAweDk3LAorCTB4YWYsIDB4MzQsIDB4NzYsIDB4OTUsIDB4NTIsIDB4ZjcsIDB4M2QsIDB4NWQsCisJMHgwNywgMHgyOCwgMHg1NywgMHg5YywgMHg0YSwgMHgwZiwgMHhjZiwgMHgwYiwKKwkweDFiLCAweGM0LCAweGMyLCAweDcyLCAweGQ3LCAweDcyLCAweDM4LCAweDliLAorCTB4ZWEsIDB4ZWIsIDB4ZWUsIDB4YWUsIDB4MzQsIDB4YzgsIDB4MDEsIDB4ZDcsCisJMHhhNSwgMHhlMywgMHhjZSwgMHg0MSwgMHhhZCwgMHgwMiwgMHg2MCwgMHgyMywKKwkweDE4LCAweDM2LCAweGJhLCAweDE3LCAweGZhLCAweGNmLCAweGU0LCAweGRhLAorCTB4ZGMsIDB4ZmMsIDB4ODIsIDB4ZGMsIDB4N2MsIDB4MTEsIDB4ZjQsIDB4YjgsCisJMHg1MiwgMHg1ZCwgMHhmNywgMHgyZiwgMHhjOCwgMHhmZSwgMHg0YSwgMHhlNiwKKwkweGI5LCAweGFmLCAweDRiLCAweDE3LCAweDE4LCAweDkxLCAweGMyLCAweGZlLAorCTB4ZDcsIDB4M2EsIDB4NzcsIDB4MGMsIDB4YTAsIDB4NDMsIDB4OWMsIDB4NmYsCisJMHgxMywgMHgwNiwgMHhiZSwgMHg2ZSwgMHhlMCwgMHgxYSwgMHgzYywgMHhmMywKKwkweGY1LCAweGNjLCAweDc4LCAweGZiLCAweDVkLCAweGQ1LCAweGRhLCAweGI3LAorCTB4NTgsIDB4ZWEsIDB4ODYsIDB4NDIsIDB4NmIsIDB4MzIsIDB4ZmYsIDB4YjIsCisJMHhlMiwgMHhlZSwgMHgwMywgMHgxZiwgMHhmNCwgMHhlZiwgMHhkYiwgMHg1MywKKwkweDc5LCAweGQ1LCAweDRlLCAweGFmLCAweDYwLCAweDhlLCAweDAyLCAweGMyLAorCTB4Y2MsIDB4MzksIDB4OTcsIDB4N2IsIDB4ZmQsIDB4YTEsIDB4ZjgsIDB4N2EsCisJMHgyNiwgMHhlOCwgMHg1NSwgMHhkNiwgMHhhNCwgMHg4YiwgMHhhMCwgMHgxYiwKKwkweDJkLCAweDYzLCAweGFhLCAweDczLCAweDcxLCAweDZlLCAweGJmLCAweDhiLAorCTB4M2IsIDB4ZTMsIDB4MWIsIDB4MGQsIDB4YmIsIDB4MmUsIDB4NDQsIDB4MDksCisJMHg2NCwgMHhhYywgMHhjNywgMHg5ZSwgMHhiNSwgMHhjNiwgMHg3NywgMHhiMCwKKwkweDc5LCAweGIzLCAweGFhLCAweGZjLCAweDY3LCAweDU3LCAweDlhLCAweDUwLAorCTB4ODEsIDB4MzcsIDB4MTQsIDB4N2MsIDB4ZDcsIDB4YTAsIDB4ZDQsIDB4NmEsCisJMHg3OSwgMHg4NCwgMHg1MSwgMHgwZSwgMHg5NSwgMHgwYSwgMHgzMCwgMHhhMywKKwkweDYwLCAweDU1LCAweDQ4LCAweDA1LCAweDE2LCAweGFlLCAweDQzLCAweDkwLAorCTB4ZGMsIDB4OGUsIDB4MDksIDB4YmUsIDB4NzksIDB4ZjYsIDB4OTAsIDB4NzQsCisJMHhmOCwgMHgyMCwgMHg5NiwgMHg0ZCwgMHhhNywgMHhmNSwgMHgxYSwgMHgyYiwKKwkweGM3LCAweDE1LCAweDlkLCAweDE4LCAweGY3LCAweDk0LCAweDg3LCAweGY3LAorCTB4ZjQsIDB4ZmIsIDB4MGQsIDB4NjEsIDB4YjYsIDB4ZDcsIDB4YmUsIDB4MTAsCisJMHg4ZSwgMHg0NywgMHgzYywgMHgxMCwgMHg0NCwgMHg5MCwgMHg1MiwgMHgyMSwKKwkweDgzLCAweGMwLCAweGY1LCAweDk5LCAweGFhLCAweGJjLCAweGY2LCAweDU1LAorCTB4YWUsIDB4ZjUsIDB4YjIsIDB4YTQsIDB4Y2QsIDB4NGQsIDB4YjksIDB4MzgsCisJMHg2YywgMHhiYywgMHg4MCwgMHhjMywgMHhhZCwgMHhmNCwgMHg0NiwgMHgzMSwKKwkweDAxLCAweDU4LCAweDJkLCAweDg4LCAweDU3LCAweGMzLCAweDIzLCAweGQxLAorCTB4NjQsIDB4YzksIDB4YTMsIDB4MjEsIDB4NmIsIDB4OGIsIDB4OGEsIDB4MjMsCisJMHgyYywgMHg0ZiwgMHhhOSwgMHhjZCwgMHg2NywgMHhmYSwgMHg3NywgMHhhZCwKKwkweGEzLCAweDE2LCAweGEyLCAweGU1LCAweDE5LCAweDE0LCAweDcwLCAweDQxLAorCTB4NWIsIDB4ZGEsIDB4MTQsIDB4ZGUsIDB4ZTMsIDB4ZTUsIDB4YzEsIDB4MTUsCisJMHhiNCwgMHg3NywgMHhhNCwgMHg5YiwgMHhiOCwgMHhiMSwgMHgyOCwgMHg1MSwKKwkweDMwLCAweGI0LCAweGYxLCAweGYzLCAweGY4LCAweDZkLCAweGQwLCAweGMzLAorCTB4OGMsIDB4NGMsIDB4NzYsIDB4YjAsIDB4OWEsIDB4ZGYsIDB4YzgsIDB4YmUsCisJMHhmOCwgMHg0YSwgMHg2MSwgMHg2ZSwgMHgzZSwgMHhkNiwgMHgzYywgMHhlOCwKKwkweGRlLCAweDU2LCAweGEwLCAweDljLCAweDI1LCAweGJlLCAweGNlLCAweDkzLAorCTB4MWYsIDB4ODgsIDB4ZmIsIDB4OWEsIDB4MWEsIDB4ZTIsIDB4ZmYsIDB4ODgsCisJMHhhZCwgMHgxMCwgMHhjYiwgMHg2YywgMHhkNiwgMHhlNywgMHgzOSwgMHgwYiwKKwkweGU1LCAweDFhLCAweDA2LCAweDA1LCAweDY0LCAweDViLCAweDBhLCAweGRmLAorCTB4MjIsIDB4NTgsIDB4ZDcsIDB4ZmIsIDB4ODgsIDB4MTIsIDB4ZGQsIDB4YjcsCisJMHg1MiwgMHgzYSwgMHhjOSwgMHhiZiwgMHg0OSwgMHhkZiwgMHg4YywgMHg4NywKKwkweDlmLCAweDg0LCAweGI1LCAweDBhLCAweGY2LCAweDAwLCAweDUyLCAweGFlLAorCTB4NjcsIDB4MTIsIDB4MWEsIDB4OGMsIDB4NzEsIDB4MTUsIDB4ZjUsIDB4YTEsCisJMHgxMywgMHgzOSwgMHhmMCwgMHg5MSwgMHg3ZSwgMHg4OCwgMHg3YywgMHhiMywKKwkweDk1LCAweDUwLCAweDAyLCAweGE2LCAweDYzLCAweGI1LCAweDY0LCAweGZiLAorCTB4OTAsIDB4ODcsIDB4NjEsIDB4ZTIsIDB4MjcsIDB4YWYsIDB4MTEsIDB4MGMsCisJMHg3MywgMHg4MywgMHhlZiwgMHhhOSwgMHgyOCwgMHhmZSwgMHhjOCwgMHg4NSwKKwkweDFhLCAweDNhLCAweGRlLCAweGYyLCAweGU1LCAweDI1LCAweDY0LCAweDZkLAorCTB4YWEsIDB4NDEsIDB4NGMsIDB4ODAsIDB4MmUsIDB4ODQsIDB4ZmYsIDB4YzEsCisJMHhjMCwgMHg1NCwgMHgwYywgMHgyOSwgMHgxYiwgMHhhMywgMHgwNywgMHg3YywKKwkweDMzLCAweDRjLCAweDEwLCAweGY2LCAweDZmLCAweDc5LCAweGRmLCAweGQzLAorCTB4ZjAsIDB4MjQsIDB4NTcsIDB4ZjEsIDB4NjAsIDB4ZTEsIDB4ZjAsIDB4YmQsCisJMHhjNCwgMHgxZiwgMHhmNCwgMHg2NywgMHhkMiwgMHhkMywgMHhjYywgMHg2YSwKKwkweDA3LCAweDcyLCAweDQ0LCAweDE2LCAweDg1LCAweDQ2LCAweGQwLCAweDczLAorCTB4ODcsIDB4YTksIDB4YzcsIDB4MmYsIDB4ZDEsIDB4ZjUsIDB4ZWMsIDB4ZTMsCisJMHgyOCwgMHhhMywgMHg5MywgMHg0ZiwgMHhkNywgMHg3NiwgMHhjMSwgMHgzYywKKwkweDBkLCAweDEzLCAweDMzLCAweGNmLCAweDViLCAweGJkLCAweDZhLCAweDUyLAorCTB4NGUsIDB4ZWUsIDB4YzgsIDB4NWUsIDB4YTEsIDB4NTgsIDB4NGEsIDB4MDgsCisJMHg4MSwgMHhkOSwgMHgyMywgMHhjYywgMHhmYiwgMHgxYywgMHhiMiwgMHhkOCwKKwkweGEzLCAweGU0LCAweDUzLCAweGZlLCAweGY0LCAweDRiLCAweDQ4LCAweGMxLAorCTB4MjAsIDB4YTQsIDB4OTcsIDB4ZjgsIDB4MzgsIDB4YTMsIDB4NjksIDB4YzEsCisJMHgxMSwgMHhmMCwgMHhhMSwgMHgzYiwgMHhhOSwgMHg5YSwgMHgxMiwgMHg2MSwKKwkweGU4LCAweDhkLCAweDk5LCAweDQ0LCAweDNmLCAweDk0LCAweDcyLCAweDgyLAorCTB4MTksIDB4OTYsIDB4NjIsIDB4YjAsIDB4YTYsIDB4NjQsIDB4MDUsIDB4MTksCisJMHg4ZiwgMHhkNiwgMHg1ZCwgMHgwNSwgMHhiZiwgMHg3OSwgMHg5ZSwgMHg5ZCwKKwkweGU0LCAweDkzLCAweDRjLCAweGFkLCAweDYxLCAweDhjLCAweDE4LCAweGRhLAorCTB4YjYsIDB4MmUsIDB4YjMsIDB4Y2EsIDB4MTQsIDB4NGQsIDB4NTMsIDB4YTQsCisJMHg5NywgMHgyNywgMHgxMCwgMHg1NiwgMHhhMiwgMHg2NywgMHg1YSwgMHg1YSwKKwkweDVlLCAweDEzLCAweGMwLCAweGRiLCAweGE3LCAweDlmLCAweDQ1LCAweDViLAorCTB4ZWIsIDB4MWEsIDB4MTQsIDB4MGMsIDB4OGMsIDB4MzgsIDB4NWUsIDB4NzcsCisJMHg5YSwgMHhlYywgMHg3NSwgMHg2OCwgMHg5MywgMHg2NSwgMHgwMiwgMHg5YywKKwkweGZiLCAweDYyLCAweDYwLCAweDQ5LCAweGRkLCAweGIyLCAweDJhLCAweDY3LAorCTB4ODYsIDB4ZTMsIDB4OGEsIDB4N2QsIDB4OGMsIDB4NDYsIDB4NzgsIDB4ODEsCisJMHg2MCwgMHg2OSwgMHhmMiwgMHgzZiwgMHg3NCwgMHgxMSwgMHgzNSwgMHhmZiwKKwkweDc3LCAweGEzLCAweDY2LCAweDIwLCAweGZjLCAweDk4LCAweDRhLCAweDM1LAorCTB4N2EsIDB4NTIsIDB4ZTQsIDB4OTAsIDB4MTMsIDB4ODAsIDB4YjksIDB4YTYsCisJMHg3MywgMHg3YSwgMHg3ZCwgMHg2NiwgMHg2ZSwgMHg2YiwgMHhiNiwgMHg0MywKKwkweDEwLCAweGQ1LCAweDkxLCAweDJiLCAweDY2LCAweGRkLCAweDg5LCAweDg3LAorCTB4ZTMsIDB4OGMsIDB4NTgsIDB4NTMsIDB4MmYsIDB4NDAsIDB4NzQsIDB4NDUsCisJMHgxYiwgMHg3NywgMHg3YSwgMHhhNCwgMHg0NCwgMHgxOSwgMHg3OCwgMHhiYSwKKwkweDg3LCAweDEwLCAweDQxLCAweDMxLCAweDMyLCAweDVmLCAweDg3LCAweDY4LAorCTB4ZGUsIDB4NDMsIDB4NGEsIDB4ZWYsIDB4MzMsIDB4YjMsIDB4MTEsIDB4ODMsCisJMHhhOSwgMHhjMiwgMHg2ZiwgMHg4ZCwgMHgzNCwgMHhlMiwgMHg5NSwgMHg4NCwKKwkweDNhLCAweDRmLCAweDZmLCAweDhjLCAweDMxLCAweDFkLCAweGI2LCAweGY1LAorCTB4OTUsIDB4MGQsIDB4MDEsIDB4MTEsIDB4MjAsIDB4ZGYsIDB4NzIsIDB4ZjMsCisJMHgzZiwgMHg5YSwgMHgzMywgMHhhYSwgMHhiMSwgMHgwNiwgMHg2YSwgMHg2MywKKwkweDQ3LCAweDkxLCAweDAxLCAweGRmLCAweGIzLCAweDU0LCAweDM2LCAweGZkLAorCTB4MDYsIDB4MmQsIDB4YjgsIDB4MDgsIDB4ZTMsIDB4ZDMsIDB4NjUsIDB4YWMsCisJMHg2NiwgMHgwMywgMHhlZSwgMHhhNCwgMHg2MywgMHhiZCwgMHhkNCwgMHhjZSwKKwkweGJkLCAweDc5LCAweGE3LCAweDQ4LCAweDM4LCAweGM1LCAweDdkLCAweGI1LAorCTB4NzEsIDB4OWEsIDB4M2MsIDB4MTEsIDB4N2MsIDB4NmMsIDB4ZTIsIDB4NTQsCisJMHgwMiwgMHg1ZCwgMHg0MiwgMHhhYiwgMHgyNSwgMHg5MywgMHg2NiwgMHgwMSwKKwkweDM3LCAweDc4LCAweDM1LCAweDRhLCAweDhjLCAweDE5LCAweDRkLCAweDAwLAorCTB4NzUsIDB4NGYsIDB4Y2MsIDB4YzAsIDB4MjYsIDB4ODIsIDB4YzEsIDB4MzUsCisJMHg4YywgMHhjNywgMHhjMiwgMHg1OSwgMHgwMSwgMHgzZSwgMHg5OCwgMHgyMiwKKwkweDg4LCAweDljLCAweDkwLCAweDc1LCAweDA1LCAweDMzLCAweDA3LCAweGI5LAorCTB4MzksIDB4ODEsIDB4MzgsIDB4NTgsIDB4MTAsIDB4MjksIDB4Y2YsIDB4YzgsCisJMHg5OCwgMHhiMiwgMHgwMywgMHhkNywgMHg1YiwgMHhiMywgMHgxOCwgMHhiYSwKKwkweDM0LCAweDBjLCAweDlmLCAweGFiLCAweGQ3LCAweGVkLCAweDI5LCAweDgyLAorCTB4NDEsIDB4ZTAsIDB4MjAsIDB4OTcsIDB4NTcsIDB4OTIsIDB4YjIsIDB4YjgsCisJMHgxMCwgMHgyZCwgMHgwYiwgMHhhMiwgMHhjNSwgMHg4ZiwgMHg5MCwgMHg2ZiwKKwkweGVkLCAweDEyLCAweDU2LCAweDI1LCAweGJlLCAweGZkLCAweDc1LCAweGY3LAorCTB4YjYsIDB4ZjgsIDB4NDAsIDB4NjcsIDB4MzksIDB4MTEsIDB4ZmEsIDB4MTUsCisJMHhhZSwgMHg2YSwgMHg1NCwgMHg1ZiwgMHgzMiwgMHgyYiwgMHhmOCwgMHg0OCwKKwkweDU1LCAweGJlLCAweDg2LCAweDJmLCAweDY5LCAweDQ4LCAweDViLCAweDVkLAorCTB4NGQsIDB4YjcsIDB4MzUsIDB4YWEsIDB4YjYsIDB4OTEsIDB4ODgsIDB4MTksCisJMHg5NiwgMHgxYywgMHg2OCwgMHhmNiwgMHg4NSwgMHg5ZSwgMHhiMywgMHhiMiwKKwkweGEzLCAweDMyLCAweGQ0LCAweDUyLCAweDcwLCAweGI3LCAweDYyLCAweGUzLAorCTB4MTQsIDB4YjYsIDB4NzgsIDB4NWYsIDB4MWIsIDB4MWQsIDB4MDQsIDB4OWMsCisJMHgyNiwgMHgwYywgMHgzMywgMHg5NCwgMHhiMSwgMHg5NywgMHgwOCwgMHhkYiwKKwkweDBiLCAweDM5LCAweDI5LCAweGQ0LCAweGJjLCAweDZkLCAweGRmLCAweDAyLAorCTB4YzYsIDB4OTksIDB4YWIsIDB4OTksIDB4MzIsIDB4ZTUsIDB4Y2UsIDB4NTEsCisJMHg0ZiwgMHhhZSwgMHhiOCwgMHg4YiwgMHhlMCwgMHhhZiwgMHgwNywgMHhjNCwKKwkweGY5LCAweDQxLCAweDdjLCAweDU5LCAweGEwLCAweGFjLCAweDc0LCAweDRkLAorCTB4N2UsIDB4NDMsIDB4NzcsIDB4OWMsIDB4MDYsIDB4NDksIDB4NzksIDB4OGEsCisJMHgxNCwgMHg3MywgMHg5MywgMHhhOCwgMHg1YiwgMHgxYiwgMHgzNCwgMHgyOSwKKwkweDc4LCAweDA0LCAweDJmLCAweGQ3LCAweDFmLCAweDEzLCAweDkwLCAweGUwLAorCTB4ZGQsIDB4M2IsIDB4NDIsIDB4NmIsIDB4NzksIDB4NmUsIDB4NTIsIDB4YzcsCisJMHgwZiwgMHgzOCwgMHhkYSwgMHgwMSwgMHgyYywgMHg4ZCwgMHhlNiwgMHg5NCwKKwkweDVkLCAweDU5LCAweDI3LCAweDFkLCAweDEwLCAweDRlLCAweDExLCAweDM2LAorCTB4ZmIsIDB4NTMsIDB4MTYsIDB4MDUsIDB4MjUsIDB4ZjIsIDB4NjQsIDB4ZDgsCisJMHhmOSwgMHhjZCwgMHg1YywgMHhmZSwgMHhiNCwgMHgxOCwgMHg0NCwgMHg4MCwKKwkweDEwLCAweGJjLCAweDNkLCAweGYzLCAweDFkLCAweDVhLCAweGYwLCAweGMxLAorCTB4YzMsIDB4NTUsIDB4ZmYsIDB4NDEsIDB4M2UsIDB4ZTMsIDB4ZWYsIDB4NDQsCisJMHhiMiwgMHhjMCwgMHgwMSwgMHgxOCwgMHhhMiwgMHg0OSwgMHg4OCwgMHg3OCwKKwkweDBkLCAweDRjLCAweGM4LCAweDczLCAweGNmLCAweDMwLCAweDg1LCAweDNhLAorCTB4ODgsIDB4OTAsIDB4MDEsIDB4Y2YsIDB4NjksIDB4NTMsIDB4YTMsIDB4MTgsCisJMHgzZiwgMHhkNiwgMHhlNywgMHg5NCwgMHgxNCwgMHhhNywgMHhhZSwgMHhjZCwKKwkweDZmLCAweDExLCAweDcyLCAweGZlLCAweDJiLCAweGIwLCAweDgxLCAweDUzLAorCTB4ZWEsIDB4NjcsIDB4ZDYsIDB4ZTQsIDB4Y2EsIDB4NDIsIDB4YTAsIDB4ZjksCisJMHhiMSwgMHhkNCwgMHhiNSwgMHgzYiwgMHhjOSwgMHhmMCwgMHgzNiwgMHhjMSwKKwkweDFjLCAweGY0LCAweGIxLCAweGY2LCAweDg0LCAweGQwLCAweDg2LCAweDZjLAorCTB4NzYsIDB4OWEsIDB4MDMsIDB4YzIsIDB4YjYsIDB4MmUsIDB4OWEsIDB4NDYsCisJMHhmNSwgMHg1ZiwgMHgyYywgMHgzOCwgMHhhYywgMHhhZCwgMHg2ZiwgMHgyZSwKKwkweDdhLCAweDE4LCAweDJkLCAweDIyLCAweDk1LCAweDVlLCAweDVlLCAweGM5LAorCTB4N2EsIDB4MGEsIDB4NTYsIDB4ZTEsIDB4YzcsIDB4MTUsIDB4ZmQsIDB4YmYsCisJMHhmZiwgMHhmNywgMHg3ZSwgMHg4NSwgMHgyMCwgMHhhOSwgMHg4YSwgMHg5YywKKwkweGE5LCAweDdkLCAweGU4LCAweGVkLCAweGZjLCAweDdmLCAweGJiLCAweGYwLAorCTB4MDUsIDB4M2YsIDB4Y2UsIDB4NGYsIDB4NGMsIDB4ZWUsIDB4YTQsIDB4YTAsCisJMHhjYywgMHg5YywgMHg2MiwgMHgxZSwgMHhkNiwgMHhkMCwgMHgzMCwgMHgzNywKKwkweGI4LCAweDk4LCAweDU2LCAweDFkLCAweGFhLCAweGQ2LCAweDVlLCAweDczLAorCTB4MTIsIDB4ZTQsIDB4ODgsIDB4ODIsIDB4NDgsIDB4NjQsIDB4MDYsIDB4ZDcsCisJMHgyYSwgMHgzMSwgMHg1MCwgMHg3YiwgMHgxMCwgMHgxNywgMHhiOCwgMHg0YywKKwkweDVhLCAweDhkLCAweGYxLCAweGZjLCAweGYxLCAweDMzLCAweDNiLCAweDk4LAorCTB4NDIsIDB4MTgsIDB4NWIsIDB4MzUsIDB4NzgsIDB4Y2EsIDB4OGUsIDB4NDEsCisJMHg1MiwgMHhhZSwgMHg2ZCwgMHhlMSwgMHhhMiwgMHg5ZCwgMHg1YiwgMHhiZCwKKwkweGYzLCAweDVmLCAweDQ5LCAweGMxLCAweDI3LCAweDA2LCAweGMxLCAweGFmLAorCTB4YzAsIDB4YTMsIDB4OWQsIDB4ZjMsIDB4MWMsIDB4OGUsIDB4OTAsIDB4OGEsCisJMHhiMCwgMHg2OSwgMHhiMCwgMHhjNSwgMHgxMSwgMHgwYywgMHg5MSwgMHgxNCwKKwkweDFmLCAweDVlLCAweDEwLCAweGUxLCAweDFkLCAweDE0LCAweDMwLCAweDU0LAorCTB4MWUsIDB4MTcsIDB4M2QsIDB4MzEsIDB4N2IsIDB4YmYsIDB4MmYsIDB4OWQsCisJMHg2ZCwgMHg2MywgMHgzMiwgMHhmMCwgMHg5ZCwgMHg5ZiwgMHg5NSwgMHgzZCwKKwkweDBiLCAweGQyLCAweDRkLCAweDEwLCAweGUyLCAweDNmLCAweDY3LCAweDY5LAorCTB4NDMsIDB4OWEsIDB4NGEsIDB4MmMsIDB4NTQsIDB4NzEsIDB4YTgsIDB4YTAsCisJMHg5ZSwgMHg5ZiwgMHgxMCwgMHhhZiwgMHgxYiwgMHhjZSwgMHg5OSwgMHhlMywKKwkweDI1LCAweDMyLCAweDEwLCAweDU0LCAweDgwLCAweGZlLCAweGRhLCAweDU3LAorCTB4ZDAsIDB4YjIsIDB4OTIsIDB4N2YsIDB4YmIsIDB4NWYsIDB4ZTcsIDB4NGQsCisJMHgxYiwgMHgzZCwgMHg0NiwgMHg0ZCwgMHhlNCwgMHg0YywgMHhkNiwgMHhhZiwKKwkweDFhLCAweDMyLCAweDEyLCAweDQwLCAweGI4LCAweDg0LCAweDhlLCAweGU0LAorCTB4ODAsIDB4Y2UsIDB4N2UsIDB4YzEsIDB4MTMsIDB4OGIsIDB4YjAsIDB4YjcsCisJMHg2ZiwgMHgyNCwgMHhiYSwgMHg4NSwgMHg1MCwgMHg4MywgMHhjMywgMHhjZiwKKwkweDE5LCAweGIzLCAweGYwLCAweGM3LCAweGVlLCAweDY4LCAweGJlLCAweDllLAorCTB4NmQsIDB4YjksIDB4ZmIsIDB4ZDUsIDB4MjksIDB4Y2UsIDB4ODIsIDB4Y2QsCisJMHg2OSwgMHgxNiwgMHg2OCwgMHg2YiwgMHg2YSwgMHhmNCwgMHgwMiwgMHgzMiwKKwkweGNlLCAweDYwLCAweDM3LCAweDBjLCAweGI5LCAweDM4LCAweDkyLCAweDljLAorCTB4NDIsIDB4YTksIDB4MGIsIDB4NTMsIDB4OTYsIDB4ZmUsIDB4MzksIDB4YzEsCisJMHgyNCwgMHg2NSwgMHg5YiwgMHhjZCwgMHhlNywgMHg4ZCwgMHgzNiwgMHgwNywKKwkweDlmLCAweDFkLCAweDM1LCAweDhlLCAweGRjLCAweDRjLCAweGI1LCAweDY4LAorCTB4YzUsIDB4ZmQsIDB4NDQsIDB4MTksIDB4ZjIsIDB4NmMsIDB4NTksIDB4MWMsCisJMHhiMSwgMHgwYiwgMHgzNSwgMHg0OCwgMHg4NiwgMHgxYSwgMHgwNSwgMHgyMiwKKwkweDAzLCAweDBjLCAweDBjLCAweGEyLCAweDkyLCAweDkwLCAweDM1LCAweGZiLAorCTB4MzcsIDB4OTQsIDB4YzcsIDB4MTUsIDB4ODQsIDB4YWUsIDB4ZTgsIDB4MDUsCisJMHhhMCwgMHhmNywgMHgzMCwgMHgxMSwgMHg1YywgMHhlNCwgMHg1ZCwgMHgzZSwKKwkweDEyLCAweDU0LCAweDgwLCAweDU0LCAweDZiLCAweDA5LCAweDhjLCAweGNlLAorCTB4ODAsIDB4NWUsIDB4YTcsIDB4YzgsIDB4NmEsIDB4MGMsIDB4NTYsIDB4ZTEsCisJMHgxOCwgMHg3ZCwgMHhjOSwgMHgzOSwgMHhjMSwgMHhlZiwgMHhlMywgMHgyNSwKKwkweGEwLCAweDhiLCAweDJmLCAweDYwLCAweDNhLCAweDQzLCAweDM5LCAweGE2LAorCTB4MjgsIDB4MjgsIDB4N2IsIDB4NGMsIDB4NzcsIDB4ZDQsIDB4NDksIDB4NjEsCisJMHg0NiwgMHhlOSwgMHgxYiwgMHg0NSwgMHhkNiwgMHhiMSwgMHg1NiwgMHhlMSwKKwkweDdkLCAweDM0LCAweGNkLCAweDA2LCAweGI2LCAweDY3LCAweDhkLCAweDdkLAorCTB4N2EsIDB4ZTIsIDB4YmUsIDB4NjgsIDB4MzUsIDB4YTYsIDB4NzgsIDB4ZTUsCisJMHg0NywgMHg0OCwgMHhiNywgMHhjNywgMHhkZSwgMHhjZCwgMHhjOSwgMHgwNSwKKwkweGI0LCAweGU3LCAweDUwLCAweDQ4LCAweGUxLCAweDRiLCAweGZlLCAweDc2LAorCTB4NzcsIDB4YzYsIDB4ZjcsIDB4NWYsIDB4Y2IsIDB4YzIsIDB4YTgsIDB4ZDcsCisJMHhkNiwgMHg4YSwgMHhlNSwgMHg0OSwgMHhkOSwgMHhjYSwgMHg0NSwgMHhmNCwKKwkweGRhLCAweGNkLCAweDMzLCAweGQxLCAweDU5LCAweDJkLCAweDllLCAweGMxLAorCTB4NWMsIDB4ZTYsIDB4MDEsIDB4MTgsIDB4YjgsIDB4ZjAsIDB4NWUsIDB4YjEsCisJMHg2OSwgMHg5NSwgMHgyZiwgMHgwMiwgMHgyYSwgMHhlNywgMHg0YSwgMHhkNywKKwkweGQxLCAweGMzLCAweGQ1LCAweDZmLCAweDE1LCAweGM4LCAweGRjLCAweDI5LAorCTB4ZGUsIDB4YjksIDB4M2YsIDB4OGIsIDB4YTYsIDB4YmMsIDB4ZGQsIDB4MjUsCisJMHg4NCwgMHgzNSwgMHgzYywgMHg5MCwgMHgyZCwgMHhjMiwgMHgxZSwgMHg5OCwKKwkweDhhLCAweDUwLCAweDA5LCAweDc3LCAweDQyLCAweGU5LCAweDM1LCAweDhhLAorCTB4N2MsIDB4OTcsIDB4YmYsIDB4ZTgsIDB4YmYsIDB4NTYsIDB4ZDAsIDB4OGIsCisJMHg2NSwgMHhkMywgMHhhZiwgMHgxZSwgMHgwNSwgMHg5NCwgMHhmYSwgMHhhYywKKwkweGE4LCAweDJiLCAweDI4LCAweGNiLCAweDM3LCAweDNlLCAweGU4LCAweGJiLAorCTB4NjYsIDB4M2EsIDB4ZWQsIDB4YjIsIDB4NDgsIDB4MTAsIDB4MGYsIDB4M2EsCisJMHg1YSwgMHhjNSwgMHhkYiwgMHgyNiwgMHgwZSwgMHhhYSwgMHg1ZSwgMHg2OSwKKwkweDE1LCAweGQ2LCAweDgxLCAweGFlLCAweGJkLCAweGU2LCAweDAzLCAweGYxLAorCTB4ZjYsIDB4MzcsIDB4YzgsIDB4ZGUsIDB4NzAsIDB4MWYsIDB4NjQsIDB4YjksCisJMHg1ZSwgMHhiZiwgMHgyZSwgMHg0ZiwgMHhiMSwgMHhlYSwgMHhhMCwgMHgxNywKKwkweGU2LCAweDdjLCAweGY5LCAweDJmLCAweDFlLCAweGQ4LCAweDU4LCAweGRlLAorCTB4YTcsIDB4ZjAsIDB4NDYsIDB4NTIsIDB4OTUsIDB4ZGYsIDB4YTQsIDB4OTYsCisJMHhkMCwgMHhjNCwgMHg5NywgMHgyYiwgMHg5NSwgMHhjZCwgMHg1ZSwgMHg0MCwKKwkweDIzLCAweDVjLCAweDEwLCAweGVlLCAweGJhLCAweDcyLCAweDliLCAweGNmLAorCTB4MGIsIDB4ZTgsIDB4MTgsIDB4M2EsIDB4NzAsIDB4ZDIsIDB4NWUsIDB4MDcsCisJMHg2OCwgMHg5MywgMHhlZiwgMHg0YSwgMHg1YiwgMHg4ZCwgMHg3MiwgMHg0MSwKKwkweDRlLCAweGVhLCAweDMzLCAweDZhLCAweDBhLCAweDVlLCAweGZiLCAweDAyLAorCTB4M2YsIDB4ZDQsIDB4ZWQsIDB4NWIsIDB4ZTAsIDB4NDIsIDB4ODQsIDB4ZDQsCisJMHhhYSwgMHg4NSwgMHhkYywgMHg1YiwgMHg2NywgMHhlZSwgMHg3MSwgMHg2NywKKwkweGJhLCAweDhlLCAweGQyLCAweGJlLCAweDYxLCAweGRmLCAweDVhLCAweDI2LAorCTB4YjksIDB4ZjAsIDB4NzcsIDB4ODEsIDB4NTMsIDB4MjQsIDB4MTYsIDB4Y2IsCisJMHg4YywgMHhiOCwgMHgwNiwgMHg2ZSwgMHg2OCwgMHhkYSwgMHhjOCwgMHgyZCwKKwkweDE3LCAweDU0LCAweGRiLCAweDQ2LCAweGNiLCAweGZkLCAweDFmLCAweDNkLAorCTB4OTQsIDB4ODEsIDB4MDksIDB4NGIsIDB4ZmEsIDB4YjEsIDB4NDYsIDB4ZDksCisJMHgxMSwgMHhhMywgMHhiNywgMHgzMSwgMHg5YywgMHhkMiwgMHgzOCwgMHhkNiwKKwkweGJhLCAweDNkLCAweGEzLCAweDc0LCAweGQ4LCAweGYxLCAweDI0LCAweGU4LAorCTB4OWMsIDB4Y2IsIDB4MWQsIDB4ZjksIDB4NGEsIDB4ZjcsIDB4YzgsIDB4NGIsCisJMHhmZSwgMHg5NywgMHg3YywgMHhhMSwgMHgwMiwgMHhlYiwgMHg0MCwgMHhjMywKKwkweDg5LCAweDcxLCAweDAxLCAweGNkLCAweDMzLCAweDJhLCAweGMyLCAweDgyLAorCTB4Y2UsIDB4NjIsIDB4OGQsIDB4NTMsIDB4N2MsIDB4ZGYsIDB4Y2UsIDB4ZDcsCisJMHhmNSwgMHhhOCwgMHg0ZiwgMHhmMiwgMHhmMiwgMHgyZSwgMHhjMSwgMHhlYiwKKwkweDk3LCAweDk5LCAweDM3LCAweDNjLCAweDUzLCAweGE2LCAweGI0LCAweDQ2LAorCTB4MDUsIDB4NjQsIDB4OTIsIDB4ODcsIDB4MDgsIDB4M2MsIDB4MjMsIDB4NGIsCisJMHg5ZCwgMHg2NywgMHgxOCwgMHhmOSwgMHhlMiwgMHgwYiwgMHgxYywgMHgzOSwKKwkweGQzLCAweDg3LCAweDcwLCAweGMwLCAweGI5LCAweDFlLCAweDUyLCAweDBhLAorCTB4MGYsIDB4NDgsIDB4ZTIsIDB4ZTcsIDB4NTEsIDB4NzIsIDB4OTQsIDB4ZjcsCisJMHhhMywgMHhkYywgMHhlNSwgMHg2NiwgMHgzMywgMHgzOSwgMHg1NCwgMHgwNiwKKwkweDU1LCAweDkzLCAweDMwLCAweGY5LCAweDVlLCAweDc2LCAweDhmLCAweGUwLAorCTB4NTksIDB4NGQsIDB4MGQsIDB4YTcsIDB4ZjUsIDB4YmUsIDB4ZGIsIDB4MjAsCisJMHhhZCwgMHgwZCwgMHg3NiwgMHg4OCwgMHg1ZiwgMHg5YywgMHg3YywgMHg3NSwKKwkweDJmLCAweDJhLCAweDBiLCAweDc5LCAweDZlLCAweGQzLCAweGUyLCAweDY2LAorCTB4ZjUsIDB4NGEsIDB4MmQsIDB4ODcsIDB4ODcsIDB4NDksIDB4ODQsIDB4MTcsCisJMHhhMiwgMHg2MiwgMHg0YywgMHhiYiwgMHhlNCwgMHg2ZSwgMHg5OCwgMHgxMCwKKwkweGM5LCAweGZiLCAweDhhLCAweDA0LCAweDY4LCAweDhkLCAweDIyLCAweDY2LAorCTB4YWQsIDB4ZWEsIDB4MmEsIDB4YzksIDB4OTcsIDB4MmQsIDB4M2MsIDB4YmMsCisJMHhkMCwgMHg3NywgMHg1ZiwgMHhlNiwgMHhiOCwgMHg3ZiwgMHhlNiwgMHhmNiwKKwkweDM5LCAweGJmLCAweDU2LCAweDBlLCAweDI2LCAweDZkLCAweGM1LCAweDNlLAorCTB4NTMsIDB4MTksIDB4ZDYsIDB4YjQsIDB4NTcsIDB4MzYsIDB4YTMsIDB4YzYsCisJMHhkMywgMHgzZCwgMHg2NiwgMHg3OSwgMHgzMCwgMHg1YywgMHgxNCwgMHgwYywKKwkweDBmLCAweDNlLCAweDk2LCAweGFlLCAweDkwLCAweDk3LCAweGFiLCAweDBkLAorCTB4OWYsIDB4YzMsIDB4ZTcsIDB4NjYsIDB4M2UsIDB4ZTAsIDB4MzEsIDB4NDMsCisJMHg0YiwgMHgwMSwgMHhiMywgMHgwZSwgMHg5ZSwgMHg4YywgMHg4MiwgMHg0YSwKKwkweDhjLCAweGM3LCAweDc5LCAweDg1LCAweGRmLCAweDc1LCAweDBkLCAweGI0LAorCTB4MmIsIDB4MDMsIDB4MTQsIDB4ZWYsIDB4NzIsIDB4NTgsIDB4ZmQsIDB4NjQsCisJMHhjOCwgMHhlMywgMHgwZCwgMHg5YSwgMHgxNCwgMHg2ZiwgMHg3NiwgMHhmOSwKKwkweDQ2LCAweGQxLCAweGQyLCAweDgxLCAweGIzLCAweDE2LCAweDZlLCAweGM3LAorCTB4NzYsIDB4ODIsIDB4Y2UsIDB4ZjQsIDB4ZWUsIDB4MzMsIDB4MDAsIDB4ZTYsCisJMHg3NywgMHhjNCwgMHhhZCwgMHg0ZiwgMHgwNiwgMHhhNywgMHg0OCwgMHg4MCwKKwkweDllLCAweDIxLCAweDY2LCAweGNhLCAweDc1LCAweDY5LCAweDU3LCAweGNiLAorCTB4ZjAsIDB4NjcsIDB4NmEsIDB4YWEsIDB4OGYsIDB4ODgsIDB4MTQsIDB4YmQsCisJMHg2NSwgMHg2MiwgMHhlMiwgMHhhZCwgMHhjYywgMHgyMiwgMHg4OCwgMHg3YiwKKwkweDk0LCAweGJkLCAweDBlLCAweGNkLCAweGI2LCAweDY5LCAweGEyLCAweGNiLAorCTB4N2QsIDB4NTcsIDB4NWMsIDB4YjQsIDB4OTIsIDB4ODAsIDB4MTMsIDB4OTksCisJMHg4NCwgMHhmMywgMHg3OSwgMHgwYSwgMHgyZCwgMHg3MCwgMHhhNCwgMHhlMCwKKwkweGRlLCAweGM2LCAweDMyLCAweGIwLCAweDhhLCAweDYyLCAweGI1LCAweGNmLAorCTB4ZmEsIDB4NWUsIDB4NWEsIDB4OTIsIDB4MzIsIDB4N2QsIDB4MzQsIDB4MDcsCisJMHhiNSwgMHg1MiwgMHgzYSwgMHhiNSwgMHg3ZCwgMHgwZiwgMHhhMSwgMHhiYSwKKwkweDU2LCAweGQwLCAweDA3LCAweDc2LCAweDExLCAweGYyLCAweGMzLCAweDMzLAorCTB4OWQsIDB4YmQsIDB4MTIsIDB4MzUsIDB4NWUsIDB4ZjcsIDB4MDUsIDB4ODgsCisJMHg3NiwgMHg5NCwgMHhhNiwgMHhiZiwgMHhlZCwgMHhiOCwgMHhhNCwgMHhhMiwKKwkweDBjLCAweGJlLCAweDBmLCAweDZhLCAweGFmLCAweGYzLCAweDFiLCAweDMzLAorCTB4NGEsIDB4YjcsIDB4NjgsIDB4M2YsIDB4YmUsIDB4OTUsIDB4MTMsIDB4OTcsCisJMHgwZiwgMHgxNSwgMHgxNywgMHgxYiwgMHgyMywgMHhhYSwgMHgwOCwgMHg3OCwKKwkweGE2LCAweDViLCAweDA4LCAweGEyLCAweDlkLCAweDAzLCAweGE4LCAweGE3LAorCTB4MzksIDB4ZGMsIDB4YmMsIDB4OWEsIDB4ODUsIDB4ZjUsIDB4ZTUsIDB4NTUsCisJMHg1OSwgMHgzYywgMHhlZiwgMHhmOSwgMHgzZiwgMHgyMiwgMHg4ZSwgMHhmOCwKKwkweGQ4LCAweDNlLCAweDAyLCAweDBiLCAweGQ4LCAweDc4LCAweDRiLCAweDE1LAorCTB4N2YsIDB4YWEsIDB4MmMsIDB4ZmYsIDB4YmUsIDB4NzcsIDB4MzMsIDB4YzcsCisJMHg2YSwgMHgxMiwgMHhhYSwgMHhhNCwgMHhiZSwgMHhjMCwgMHgzYiwgMHhjYiwKKwkweDEzLCAweDlkLCAweDljLCAweDVhLCAweDlmLCAweDhhLCAweDU3LCAweDM2LAorCTB4NGYsIDB4MDIsIDB4NWEsIDB4ZjgsIDB4MWQsIDB4OTcsIDB4NzcsIDB4NDMsCisJMHhjOCwgMHhhNSwgMHhiNywgMHg5YiwgMHgxMCwgMHg5OCwgMHhmZCwgMHg1OCwKKwkweGJmLCAweDQyLCAweGY2LCAweGJmLCAweGZmLCAweDZjLCAweDQwLCAweDE4LAorCTB4MTgsIDB4ZGYsIDB4YWMsIDB4NTcsIDB4NzEsIDB4ZWEsIDB4Y2MsIDB4OGUsCisJMHhmZCwgMHhmZSwgMHgxMCwgMHhmYiwgMHhiOSwgMHhmZSwgMHhiYywgMHg5YSwKKwkweDljLCAweDI3LCAweGU0LCAweDEwLCAweDE1LCAweDk0LCAweDQxLCAweGExLAorCTB4Y2MsIDB4ZjYsIDB4MjUsIDB4NDksIDB4NGYsIDB4OTYsIDB4YzEsIDB4OGMsCisJMHg5ZSwgMHgzZSwgMHgxOCwgMHgyOSwgMHg0OSwgMHg5MiwgMHhlNywgMHhmZSwKKwkweDIyLCAweGZmLCAweGVkLCAweDAyLCAweDE2LCAweDkwLCAweGVmLCAweGFjLAorCTB4ZWMsIDB4OTUsIDB4MWQsIDB4NWIsIDB4OTQsIDB4OWMsIDB4ZjYsIDB4N2MsCisJMHgxYiwgMHg1YSwgMHg5ZCwgMHhiMCwgMHg5YiwgMHgwNSwgMHgzNiwgMHhiZiwKKwkweGVmLCAweGVjLCAweDYzLCAweDM1LCAweDQwLCAweDI0LCAweDQ1LCAweDQwLAorCTB4MzAsIDB4MWEsIDB4OWIsIDB4OTAsIDB4YzMsIDB4YzIsIDB4ZjcsIDB4MzcsCisJMHhmYiwgMHgwOCwgMHg4ZSwgMHg0OCwgMHgxOSwgMHg0OCwgMHhlZCwgMHhhOCwKKwkweGE4LCAweDA0LCAweDZmLCAweGQwLCAweDMzLCAweGU5LCAweGI4LCAweDhkLAorCTB4ZTcsIDB4MWUsIDB4NWMsIDB4NDcsIDB4NzQsIDB4YzAsIDB4NjYsIDB4MzAsCisJMHg0ZSwgMHhhNywgMHg4NiwgMHg3MywgMHhmMSwgMHhlNSwgMHg3OCwgMHhhNiwKKwkweGUwLCAweGMxLCAweGRhLCAweDEzLCAweDcyLCAweDA3LCAweDg1LCAweDM0LAorCTB4NjMsIDB4OTUsIDB4NDksIDB4MzAsIDB4NGIsIDB4OWQsIDB4MDMsIDB4ZjEsCisJMHg3YSwgMHg2YiwgMHg5MSwgMHhhMiwgMHg4NSwgMHg0MSwgMHhmOSwgMHg0YSwKKwkweGQ2LCAweGZmLCAweGZmLCAweDg2LCAweGY3LCAweGYwLCAweGNlLCAweGI5LAorCTB4MDcsIDB4ZjEsIDB4ODgsIDB4MDQsIDB4MzMsIDB4YWEsIDB4ZWIsIDB4NTQsCisJMHhiMiwgMHgxYywgMHg4ZSwgMHgyZSwgMHg3YiwgMHgwNCwgMHhhOCwgMHhjYywKKwkweDJjLCAweDdhLCAweGIzLCAweGFkLCAweDFhLCAweDg5LCAweDM4LCAweDg5LAorCTB4ZDcsIDB4MTEsIDB4M2EsIDB4OGMsIDB4Y2YsIDB4ZTMsIDB4YzUsIDB4YmEsCisJMHhiMCwgMHhjYywgMHhjNCwgMHhlMywgMHgzMywgMHhmMywgMHgxOCwgMHhiYSwKKwkweGVjLCAweDU2LCAweGQ5LCAweDFjLCAweDQwLCAweDcwLCAweDBkLCAweDRlLAorCTB4OTcsIDB4MDEsIDB4MjMsIDB4ZjMsIDB4NWEsIDB4ZGMsIDB4YmYsIDB4NjgsCisJMHg5MywgMHhjMiwgMHgxZCwgMHg4YSwgMHg5NiwgMHhiNywgMHhhYywgMHgxOCwKKwkweDZmLCAweGY3LCAweDg0LCAweDcxLCAweDBkLCAweDNkLCAweGY4LCAweGJhLAorCTB4ZGYsIDB4YjYsIDB4ODksIDB4MWQsIDB4NzgsIDB4MTksIDB4ZjIsIDB4NTksCisJMHhlOSwgMHgxNSwgMHg1NSwgMHgyOSwgMHg3MywgMHg1MCwgMHg1OSwgMHgxNCwKKwkweDAyLCAweDIxLCAweDE2LCAweDhmLCAweDBmLCAweGRmLCAweGE1LCAweGYwLAorfTsKKworc3RhdGljIHN0cnVjdCBjcmNfdGVzdCB7CisJdWludDMyX3QgY3JjOwkJLyogcmFuZG9tIHN0YXJ0aW5nIGNyYyAqLworCXVpbnQzMl90IHN0YXJ0OwkJLyogcmFuZG9tIG9mZnNldCBpbiBidWYgKi8KKwl1aW50MzJfdCBsZW5ndGg7CS8qIHJhbmRvbSBsZW5ndGggb2YgdGVzdCAqLworCXVpbnQzMl90IGNyY19sZTsJLyogZXhwZWN0ZWQgY3JjMzJfbGUgcmVzdWx0ICovCisJdWludDMyX3QgY3JjX2JlOwkvKiBleHBlY3RlZCBjcmMzMl9iZSByZXN1bHQgKi8KK30gdGVzdFtdID0geworCXsweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweDAwMDAxMDAwLCAweDEzOTM0YmVmLCAweDE0ZjNiNzVmfSwKKwl7MHhmZTczMjhlYSwgMHgwMDAwMDc2MywgMHgwMDAwMDcxNywgMHhlZDJjMGQ3MCwgMHg1NzUzMTIxNH0sCisJezB4NGM0MDY4NGUsIDB4MDAwMDA3MjEsIDB4MDAwMDAxMWUsIDB4ZDdmNDZjY2MsIDB4ZWRmMTJlYzN9LAorCXsweDZiNDg3ZjkwLCAweDAwMDAwMjY0LCAweDAwMDAwN2JjLCAweDc1OWU5OTM5LCAweDlhZjhlMzg3fSwKKwl7MHg5ZjU4MTBkYiwgMHgwMDAwMGFmYSwgMHgwMDAwMDI1NSwgMHgyNjg1MTk3ZiwgMHg3MTZkZTZlZH0sCisJezB4YjE1YzQ3NTUsIDB4MDAwMDBkNWIsIDB4MDAwMDAyYTQsIDB4ZDhmYWRjYjUsIDB4ZmMzNGFlM2Z9LAorCXsweDA2NTE4MjUzLCAweDAwMDAwZmZiLCAweDAwMDAwMDA0LCAweGFiZWUyNDMzLCAweGZhMzBhYzllfSwKKwl7MHhkOWU3MWM1NSwgMHgwMDAwMGEyYSwgMHgwMDAwMDI1OSwgMHg5NjY4MmFmMiwgMHhlNTkwN2VhM30sCisJezB4MGMxYWU4NDMsIDB4MDAwMDBjZTQsIDB4MDAwMDAzMWIsIDB4N2I2MzdjNDMsIDB4ZTdmNzFiMDR9LAorCXsweGVjM2NkNTE3LCAweDAwMDAwMmZmLCAweDAwMDAwNTY2LCAweDVkNzE5YTc3LCAweGVkMTZlMDQ1fSwKKwl7MHg3NzgyOGU5NSwgMHgwMDAwMDY3ZiwgMHgwMDAwMDM4ZiwgMHg0M2VlNWI2YywgMHgzNTk5OTkyN30sCisJezB4ZWM4N2I0ZTMsIDB4MDAwMDBkMWMsIDB4MDAwMDAyZTMsIDB4MmRkZDJlZWUsIDB4OTQ1MmQzZjh9LAorCXsweDQxMjE1OGJiLCAweDAwMDAwZWVlLCAweDAwMDAwMTExLCAweDY3YjM4YmEyLCAweDE3Nzk3NmQwfSwKKwl7MHgyZTUyZGUzZSwgMHgwMDAwMGM0YSwgMHgwMDAwMDNiNSwgMHhiY2M1ZDYxZCwgMHhmNjBmZWU3MX0sCisJezB4NmRkYWFlOGIsIDB4MDAwMDBkOTksIDB4MDAwMDAyNjYsIDB4OGI1MzU1NDQsIDB4MWRhYjg1OTZ9LAorCXsweDA0OWI2Y2IxLCAweDAwMDAwOWM1LCAweDAwMDAwMGIwLCAweGZjMjJjYWJjLCAweDQ3ZWJjOTU0fSwKKwl7MHg3N2Q0Yjk1NCwgMHgwMDAwMDI4YSwgMHgwMDAwMDdmYSwgMHg3MWQwMDkyMywgMHg5MDU1ODVlZn0sCisJezB4NWUxOTIzNTUsIDB4MDAwMDBhYzEsIDB4MDAwMDAxZmEsIDB4Yjk2NmI4MWEsIDB4MzNjMTI5MDN9LAorCXsweDdkODBiNzFkLCAweDAwMDAwMjEzLCAweDAwMDAwMWUwLCAweDJiYmEzNzFhLCAweDVmNGJkOGQ5fSwKKwl7MHgwMWY2ZjFlNCwgMHgwMDAwMDFkNiwgMHgwMDAwMDM5NSwgMHhiN2U4YTY0NywgMHgyYTc5NDNhMX0sCisJezB4MWRmYWJiMTMsIDB4MDAwMDBlMTQsIDB4MDAwMDAxZWIsIDB4NTM5MTdmYmEsIDB4OGRlZTFlNWR9LAorCXsweGIwMGE0NDQ5LCAweDAwMDAwYmY2LCAweDAwMDAwNDA5LCAweGVkZWNiNTc3LCAweDYyOGUwODdkfSwKKwl7MHg3ZWNkMzk4MSwgMHgwMDAwMDgzZiwgMHgwMDAwMDE2YiwgMHhlZmVmNjJiOSwgMHhkYTRmOTRlNn0sCisJezB4ZjhmMzMwZDIsIDB4MDAwMDA0YmUsIDB4MDAwMDA3NTcsIDB4OTM1N2M5ZjMsIDB4OGUyZDVjMmZ9LAorCXsweDAzYzM4YWYyLCAweDAwMDAwZDIzLCAweDAwMDAwMmRjLCAweDM2MGZhOGMwLCAweDYyOTRjMGQ2fSwKKwl7MHg2ODdiYjc5YiwgMHgwMDAwMGYzZCwgMHgwMDAwMDBjMiwgMHg0NDhkM2JlMiwgMHgwOGY0OGYzYX0sCisJezB4NjcxMGY1NTAsIDB4MDAwMDA5ZTksIDB4MDAwMDA2MDMsIDB4ZGJmZDE5OTgsIDB4Yzk1MGFjMjl9LAorCXsweDg3MzE3MWQxLCAweDAwMDAwNzg3LCAweDAwMDAwNGQ1LCAweGFiN2YxYjYyLCAweGU2Njg5NmFifSwKKwl7MHgzNzNiMTMxNCwgMHgwMDAwMGYwZiwgMHgwMDAwMDBmMCwgMHgxODQwOThhYiwgMHg0MDM4ZTY3NH0sCisJezB4OTBmYWQ5Y2QsIDB4MDAwMDBlYWQsIDB4MDAwMDAxNTIsIDB4MjNjZTUyZmYsIDB4OWVmZjM5NzR9LAorCXsweDE5Njc2ZmU3LCAweDAwMDAwMDdkLCAweDAwMDAwNzBkLCAweGY4YTc2ZjFlLCAweGZiYzVjOGE5fSwKKwl7MHg4OWZhY2Q0NSwgMHgwMDAwMDVmMywgMHgwMDAwMDQ3MywgMHg0MzMxYTAwNiwgMHhiOGYwZjBjY30sCisJezB4NmYxNzM3NDcsIDB4MDAwMDBmYzMsIDB4MDAwMDAwM2MsIDB4YjAxMmYwOGUsIDB4NTEyNmUzNzh9LAorCXsweDRiNDRhMTA2LCAweDAwMDAwNzVhLCAweDAwMDAwMDhiLCAweGY2ZjdhYzM4LCAweGY5YjE3ODFifSwKKwl7MHhiNjIwYWQwNiwgMHgwMDAwMDc3NCwgMHgwMDAwMDE3ZSwgMHhkMzQ1NThlNiwgMHhiMTc1ZWRkM30sCisJezB4OTc2ZjIxZTksIDB4MDAwMDA4ZDcsIDB4MDAwMDAzNGEsIDB4ZTUzM2FhM2EsIDB4MWU0MzY3Yjl9LAorCXsweDY4NzYyOGMwLCAweDAwMDAwNmM1LCAweDAwMDAwNjFiLCAweDNhODQwYjE1LCAweGZiNTk4OWEwfSwKKwl7MHhlMjRhYzEwOCwgMHgwMDAwMGNkMCwgMHgwMDAwMDMyZiwgMHg1MTAxMGFlOCwgMHhjZGQ4ZjE4Mn0sCisJezB4MzYxYzQ0YTMsIDB4MDAwMDAzMDQsIDB4MDAwMDA3MTksIDB4ZmQ3YmQ0ODEsIDB4MTJkZTU0MGZ9LAorCXsweGQ5M2ZmOTVlLCAweDAwMDAwZGI3LCAweDAwMDAwMDhlLCAweGNmYmJjMzA0LCAweDQyZWVjZDVhfSwKKwl7MHhlZDc1MmQxMiwgMHgwMDAwMDg4MywgMHgwMDAwMDA5MSwgMHg2NWE2Yzg2OCwgMHg5ZWJmYTU3OH0sCisJezB4YjRmZjRiNTQsIDB4MDAwMDAzZDMsIDB4MDAwMDAxYzEsIDB4ZjgyNTk3ZTcsIDB4YThhZDJiMTl9LAorCXsweDExMWI1MjBmLCAweDAwMDAwNzA4LCAweDAwMDAwMGViLCAweGMzZTEwOWYzLCAweDMyM2FjZTE3fSwKKwl7MHg2MmM4MDZmMiwgMHgwMDAwMGJhMywgMHgwMDAwMDQ1YywgMHg4NzRkM2E3MiwgMHhhZjFhMTM2MH0sCisJezB4NDBkOTc0NzAsIDB4MDAwMDA1ZTEsIDB4MDAwMDA1OGQsIDB4ODdhOTY4NGYsIDB4NTI0MjQ0YTh9LAorCXsweDQzMTIxNzljLCAweDAwMDAwMDU2LCAweDAwMDAwNzBlLCAweDgwOWEwMGY1LCAweGY5ZTk0MGIwfSwKKwl7MHgxM2Q1Zjg0YywgMHgwMDAwMGEyZCwgMHgwMDAwMDEwNCwgMHhmM2QyNzU3OCwgMHg1ZDMzMzQxY30sCisJezB4MWYzMDJjYjIsIDB4MDAwMDAxNTEsIDB4MDAwMDAwMTQsIDB4MWUxNjI2OTMsIDB4NTNjM2NmYzN9LAorCXsweGU0OTFkYjI0LCAweDAwMDAwNjAwLCAweDAwMDAwNmY2LCAweDdmZjA5NjE1LCAweGEzMDBlY2Y3fSwKKwl7MHhmOWE5ODA2OSwgMHgwMDAwMDJiYSwgMHgwMDAwMDJhZCwgMHgwMWFmNzM4NywgMHgzMWMwOTExZX0sCisJezB4ZTljNDc3YWQsIDB4MDAwMDAxNWYsIDB4MDAwMDA3NzgsIDB4NmZhY2Y5YTAsIDB4MTk5M2I2ODh9LAorCXsweDM1M2YzMmIyLCAweDAwMDAwODdjLCAweDAwMDAwNzgzLCAweDZjYzk2NGVhLCAweDQxOGRiNTYxfSwKKwl7MHg3OGUxYjI0ZiwgMHgwMDAwMDY1MCwgMHgwMDAwMDZhOCwgMHhiM2JiN2MyNywgMHhmMmFhZDAwNn0sCisJezB4NjFhYTQwMGUsIDB4MDAwMDAwNDksIDB4MDAwMDAyNTQsIDB4YjhjZDE2ODEsIDB4NzkxNTBiMTV9LAorCXsweGI4NGIxMGIwLCAweDAwMDAwZjczLCAweDAwMDAwMDhjLCAweDQwNmE2NDUwLCAweDBjNzA1MjIyfSwKKwl7MHg5ZmE5OWM5YywgMHgwMDAwMGE3YywgMHgwMDAwMDRkNywgMHhmYjNkMjFiNCwgMHhlNGU3ODlkZn0sCisJezB4M2ZjOWViZTMsIDB4MDAwMDBjZDksIDB4MDAwMDAwZDYsIDB4NDM4MDNmOWMsIDB4NWExNTJiZTV9LAorCXsweDUyOTg3OWNkLCAweDAwMDAwMmYyLCAweDAwMDAwNTk1LCAweDc4YjRjNmE2LCAweGY3MjM2ZWM0fSwKKwl7MHgzYTkzMzAxOSwgMHgwMDAwMDUxNiwgMHgwMDAwMDI2NiwgMHhkY2I0NTQzNiwgMHgyYzc5MzVmNX0sCisJezB4ODg3YjQ5NzcsIDB4MDAwMDAyMjcsIDB4MDAwMDAzOGQsIDB4YzVmN2MzZDksIDB4MGQ2ZDdkZjZ9LAorCXsweDc3MDc0NWRlLCAweDAwMDAwOGM2LCAweDAwMDAwNzM5LCAweGY2OTE0NWU4LCAweDQ3ZDVlZmM5fSwKKwl7MHgyOGJlM2I0NywgMHgwMDAwMGM0NiwgMHgwMDAwMDMyYiwgMHg3NjRjMDI4ZiwgMHgxZWI3MGQ2NH0sCisJezB4NTAxM2EwNTAsIDB4MDAwMDBjZjYsIDB4MDAwMDAzMDksIDB4ZWE4ZmUxNjQsIDB4MTg2YWZmYTR9LAorCXsweDJlYzRjOWJhLCAweDAwMDAwNmU4LCAweDAwMDAwNzhkLCAweGEzNTU1N2E5LCAweGI0MWY0OWVjfSwKKwl7MHhhOWY5NTBjOSwgMHgwMDAwMGQzMywgMHgwMDAwMDJjYywgMHg0MWVhODYxOCwgMHhhYjhkZmFlM30sCisJezB4NWI1MjAyMjksIDB4MDAwMDA3YjIsIDB4MDAwMDA0ODQsIDB4NDQ1NjlmMWYsIDB4NjA3YTgwNTJ9LAorCXsweGQ4ZGNiYmZjLCAweDAwMDAwMDJmLCAweDAwMDAwNDhjLCAweGRiODhhYjhiLCAweGYxYzQxMWYxfSwKKwl7MHgyNTUyOTc5MiwgMHgwMDAwMGQxZCwgMHgwMDAwMDJlMiwgMHgyMGNkYTQwNCwgMHgzMjY4M2EyZH0sCisJezB4OWYzZjZkNzEsIDB4MDAwMDAyMzgsIDB4MDAwMDA3OWEsIDB4MDcyMDQ0M2UsIDB4NGI4YmEyZmZ9LAorCXsweDY0MTIxMjE1LCAweDAwMDAwN2ZmLCAweDAwMDAwMzhmLCAweDZhYWNmZjJjLCAweDNiODQyMzNifSwKKwl7MHhmYjZjZGRlMCwgMHgwMDAwMGVmOCwgMHgwMDAwMDEwNywgMHhiZDQzYTBmMSwgMHg5MjY2MjRkMH0sCisJezB4MjIxYzlkNmYsIDB4MDAwMDA3YjYsIDB4MDAwMDAxNGYsIDB4YjY3ZjgzNGIsIDB4MmJkZWRkYTR9LAorCXsweDAzMGUxZGU0LCAweDAwMDAwODM2LCAweDAwMDAwNGI0LCAweDBkNjdkMjZhLCAweDc1YTczYjczfSwKKwl7MHhiNTZmYTZjZiwgMHgwMDAwMGMwNywgMHgwMDAwMDNmOCwgMHg2MDYwMWFjMSwgMHgxMGE0M2YzNX0sCisJezB4YjU1Yzg5ZjUsIDB4MDAwMDA5OGUsIDB4MDAwMDAxZDQsIDB4MjQwMGVmYmUsIDB4MDA2ZTI4ZWJ9LAorCXsweDVlOTBiNmQ1LCAweDAwMDAwNzBiLCAweDAwMDAwM2VhLCAweDNiYjVkNmVhLCAweGIxNzVmYTZifSwKKwl7MHgyYTcwNDVhZSwgMHgwMDAwMDk2MSwgMHgwMDAwMDYzMywgMHhmY2E4OWU0YiwgMHg5NjJjZDZkMn0sCisJezB4OGIzNzRlYTksIDB4MDAwMDA2YmEsIDB4MDAwMDA3ODAsIDB4YmNlMDM2ZWQsIDB4NGRjODI3OWJ9LAorCXsweDhiZDkwYmM5LCAweDAwMDAwNTYyLCAweDAwMDAwMzY5LCAweGNiMjZhMjRiLCAweDUwZGVlNzQzfSwKKwl7MHg1YjFiMTc2MiwgMHgwMDAwMDBmZCwgMHgwMDAwMDUxYSwgMHgzM2NkZGEwNywgMHhlZTc1ZmY3Yn0sCisJezB4YTQxNTM1NTUsIDB4MDAwMDA1OGYsIDB4MDAwMDA1YzcsIDB4YmU1MGVlY2EsIDB4ZTczZmZmY2N9LAorCXsweDBiZTFmOTMxLCAweDAwMDAwNjUxLCAweDAwMDAwNjcyLCAweDk1YTI1NzUzLCAweDRhZDYyNzBmfSwKKwl7MHhiN2U3ODYxOCwgMHgwMDAwMGE3ZiwgMHgwMDAwMDJiYiwgMHhlMDZiY2MxYywgMHgxYTM1ZWU1OX0sCisJezB4NGE5YmM0MWIsIDB4MDAwMDBlNTEsIDB4MDAwMDAxYWUsIDB4NzA5ZThkMmMsIDB4NzUwODBjYTh9LAorCXsweGZjMzU5ZDEzLCAweDAwMDAwNDQwLCAweDAwMDAwMmY4LCAweDBhNTg0NTFmLCAweDZmYTNjZmJmfSwKKwl7MHg1YWE0ODYxOSwgMHgwMDAwMDZkMSwgMHgwMDAwMDI4NCwgMHg5MjhlYWQ4MywgMHhiZDYwMGVmY30sCisJezB4YTYwOWFmYTgsIDB4MDAwMDA1M2UsIDB4MDAwMDAyNzIsIDB4YjA0OGMxNDEsIDB4MTg0ZjgwYmJ9LAorCXsweDNmMTA4YWZiLCAweDAwMDAwOTQ5LCAweDAwMDAwMTUwLCAweDlhNmJiNWJjLCAweDBlYTAyYmUxfSwKKwl7MHg3OWJlYzJkMywgMHgwMDAwMDhlZCwgMHgwMDAwMDcxMiwgMHgzMjY5MmQ1NywgMHgyZWIxMzI4OX0sCisJezB4OTQyOWUwNjcsIDB4MDAwMDBiYzMsIDB4MDAwMDA0M2MsIDB4NTI5NWNlZmYsIDB4OGE5MDE0YTd9LAorCXsweGFlNThiOTZhLCAweDAwMDAwODJkLCAweDAwMDAwN2QyLCAweGMyYTY4MWJhLCAweDZhZjk0MDg5fSwKKwl7MHg5NWRmMjRiZSwgMHgwMDAwMDk4NSwgMHgwMDAwMDRjMSwgMHgzYTI4Nzc2NSwgMHgzNzlmY2I0Mn0sCisJezB4NWU5NDk3NmYsIDB4MDAwMDA1OTYsIDB4MDAwMDA0ZWQsIDB4ZmYwMGM0ODksIDB4OTkxZmMxZjV9LAorCXsweGY1ZTVmMWRlLCAweDAwMDAwZDMxLCAweDAwMDAwMmNlLCAweDM1ZjI4ZTkxLCAweDU0M2RlZjFhfSwKKwl7MHhhMmMyMTljZiwgMHgwMDAwMGEzYywgMHgwMDAwMDM3NCwgMHg3MDdkMjFlYiwgMHhhNmQyOGJjMX0sCisJezB4ZjIxYjZjZWIsIDB4MDAwMDA5MTksIDB4MDAwMDAxMzUsIDB4MDg0N2ZiOGIsIDB4MjI0NDY4YzJ9LAorCXsweGFhOTg4NzI4LCAweDAwMDAwNzg3LCAweDAwMDAwNzcxLCAweDg4NWFlYWE0LCAweDgxNGRiMDBifSwKKwl7MHhhYTVkZmFhYywgMHgwMDAwMDNlNSwgMHgwMDAwMDUxYiwgMHg1MmM0OGFiNywgMHg3MjViZWY4YX0sCisJezB4MGEwNTM5NjgsIDB4MDAwMDBkMmEsIDB4MDAwMDAyZDUsIDB4N2E5MDI1NmQsIDB4YzUzYjk0MDJ9LAorCXsweDE0MjFkYzIwLCAweDAwMDAwZWVmLCAweDAwMDAwMTEwLCAweDk3ZDZkYTI0LCAweDEwODQ2OTM1fSwKKwl7MHhiNDdjMjE2NiwgMHgwMDAwMGE2YSwgMHgwMDAwMDIwOSwgMHhjZmQ2Y2M1MiwgMHg0NmUyNzk3ZX0sCisJezB4NzdkZDE5NTUsIDB4MDAwMDAwZGUsIDB4MDAwMDAyNjYsIDB4YmE3NGJjYWEsIDB4NGZhM2ZlOWN9LAorCXsweDY4YTAzY2MyLCAweDAwMDAwODJmLCAweDAwMDAwN2IwLCAweDc1MmJkNWQ4LCAweDRmNzYwYzYzfSwKKwl7MHgwMjI2YjBhMywgMHgwMDAwMGE1ZiwgMHgwMDAwMDVhMCwgMHg4MmRlNDk3MCwgMHg4ZWUxMzEwZX0sCisJezB4NjM3YmYzYjEsIDB4MDAwMDBkOTMsIDB4MDAwMDAyNmMsIDB4NWM3MTE1Y2IsIDB4OWY2YTBjZWR9LAorCXsweDNiMTIwZWRmLCAweDAwMDAwYzEzLCAweDAwMDAwM2VjLCAweDgwZDdkMjBmLCAweDI0MTY1N2Q1fSwKKwl7MHhlMjQ1Njc4MCwgMHgwMDAwMDJlYiwgMHgwMDAwMDY0MSwgMHhjMGE1ZDI4OSwgMHg3NGRmOTZiNH0sCisJezB4OWIyZTcxMjUsIDB4MDAwMDBjMGMsIDB4MDAwMDAzZjMsIDB4Y2MxNWY1N2UsIDB4MDNlMjkwYmZ9LAorCXsweDE1MzAzM2VmLCAweDAwMDAwNzg3LCAweDAwMDAwNmI2LCAweDNjZGU0NDNiLCAweDdiZjFkMTIxfSwKKwl7MHgxODQ1OGIzZiwgMHgwMDAwMDY2YywgMHgwMDAwMDU2MSwgMHg5YTJiZDhjNiwgMHg5ZDU2NGJlZn0sCisJezB4NGZmOWQ0YjksIDB4MDAwMDBjOGYsIDB4MDAwMDAzM2EsIDB4ZDBlZTZkNmQsIDB4ZWUwMGFhMGJ9LAorCXsweGRmODRiNWQ5LCAweDAwMDAwODAyLCAweDAwMDAwMjlhLCAweGRhYjBkNzRhLCAweGQwY2I2M2RjfSwKKwl7MHg4MWVlMTVkZiwgMHgwMDAwMDNjZSwgMHgwMDAwMDcyNSwgMHg5OTQyZTJkZSwgMHhlNDhmYjI2Yn0sCisJezB4NWM3NjhlMDQsIDB4MDAwMDBhZmQsIDB4MDAwMDAxNjAsIDB4MzYxMTA4MzEsIDB4OGRjNzQ0ODN9LAorCXsweGU1ZTE4MDk0LCAweDAwMDAwYjRiLCAweDAwMDAwMGEwLCAweGZmYTNlNGE3LCAweGMwMTQ1ZTFifSwKKwl7MHhlZDcyNjNiNiwgMHgwMDAwMGQwZCwgMHgwMDAwMDJmMiwgMHhiMDAwNmEzNSwgMHg1NDY4YWUzYX0sCisJezB4NWJmZGU3ZDcsIDB4MDAwMDA2ZmIsIDB4MDAwMDA1NTQsIDB4YTQxOTNiNzYsIDB4YjczZDM0YjJ9LAorCXsweDY3ZjRhNzQzLCAweDAwMDAwYjg1LCAweDAwMDAwNDdhLCAweGYwNWM4ZDhmLCAweDRmODQzZTQ5fSwKKwl7MHhmMTNiZGYyMiwgMHgwMDAwMGZmNywgMHgwMDAwMDAwOCwgMHg4MTYzNTFlYiwgMHg0MWY1MzdmNn0sCisJezB4MDhlY2M2MDgsIDB4MDAwMDBkNWQsIDB4MDAwMDAwOTgsIDB4OTA0OTI3NzIsIDB4ZjUxNzIyMDR9LAorCXsweDI5NmY1MmJhLCAweDAwMDAwNGY5LCAweDAwMDAwNzg4LCAweDVlNWE0ODk2LCAweGUwMWQ1YjQ2fSwKKwl7MHhiZTQ2MjRjMiwgMHgwMDAwMDQyNywgMHgwMDAwMDRlZiwgMHhjZDI2N2I5NCwgMHg3YjkwNjlmNH0sCisJezB4OTA2ZjdjN2MsIDB4MDAwMDBhMDUsIDB4MDAwMDAwM2YsIDB4MDNmY2ZjMzMsIDB4N2I2ZmY1NjN9LAorCXsweDhmN2IzMjNlLCAweDAwMDAwNDU4LCAweDAwMDAwNGM3LCAweGNkNDk2OWM4LCAweGQ0YzIyYWRhfSwKKwl7MHg4OGQ2NTkzZCwgMHgwMDAwMDU5NywgMHgwMDAwMDViNSwgMHhmMTk5Y2QzYiwgMHg1YzNlOGNhMn0sCisJezB4OTc4YTc3NjgsIDB4MDAwMDAyNjgsIDB4MDAwMDAxZDMsIDB4YjI4Yzk1YmQsIDB4NDlhMmNjNjd9LAorCXsweDg1N2E2MjFlLCAweDAwMDAwN2E3LCAweDAwMDAwM2E4LCAweGY0YmY4NGFiLCAweGRlMjZmMzY5fSwKKwl7MHhiMGUxMjFlZiwgMHgwMDAwMDViZSwgMHgwMDAwMDY0NCwgMHgyODc0N2MxNCwgMHg2MWQ0ZGM2Yn0sCisJezAsIDAsIDAsIDAsIDB9LAorfTsKKworc3RhdGljIGludCB0ZXN0X2NyYzMyYyh2b2lkKQoreworCXN0cnVjdCBjcmNfdGVzdCAqdCA9IHRlc3Q7CisJaW50IGZhaWx1cmVzID0gMDsKKworCXdoaWxlICh0LT5sZW5ndGgpIHsKKwkJdWludDMyX3QgYmUsIGxlOworCQlsZSA9IGV4dDJmc19jcmMzMmNfbGUodC0+Y3JjLCB0ZXN0X2J1ZiArIHQtPnN0YXJ0LCB0LT5sZW5ndGgpOworCQliZSA9IGV4dDJmc19jcmMzMmNfYmUodC0+Y3JjLCB0ZXN0X2J1ZiArIHQtPnN0YXJ0LCB0LT5sZW5ndGgpOworCQlpZiAobGUgIT0gdC0+Y3JjX2xlKSB7CisJCQlwcmludGYoIlRlc3QgJWQgTEUgZmFpbHMsICV4ICE9ICV4XG4iLAorCQkJICAgICAgIChpbnQpICh0IC0gdGVzdCksIGxlLCB0LT5jcmNfbGUpOworCQkJZmFpbHVyZXMrKzsKKwkJfQorCQlpZiAoYmUgIT0gdC0+Y3JjX2JlKSB7CisJCQlwcmludGYoIlRlc3QgJWQgQkUgZmFpbHMsICV4ICE9ICV4XG4iLAorCQkJICAgICAgIChpbnQpICh0IC0gdGVzdCksIGJlLCB0LT5jcmNfYmUpOworCQkJZmFpbHVyZXMrKzsKKwkJfQorCQl0Kys7CisJfQorCisJcmV0dXJuIGZhaWx1cmVzOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCByZXQ7CisKKwlyZXQgPSB0ZXN0X2NyYzMyYygpOworCWlmICghcmV0KQorCQlwcmludGYoIk5vIGZhaWx1cmVzLlxuIik7CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmIC8qIFVOSVRURVNUICovCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2NyYzMyY19kZWZzLmggYi9saWIvZXh0MmZzL2NyYzMyY19kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzZjJjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvY3JjMzJjX2RlZnMuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogVGhpcyBpcyB0aGUgQ1JDMzJjIHBvbHlub21pYWwsIGFzIG91dGxpbmVkIGJ5IENhc3RhZ25vbGkuCisgKiB4XjMyK3heMjgreF4yNyt4XjI2K3heMjUreF4yMyt4XjIyK3heMjAreF4xOSt4XjE4K3heMTQreF4xMyt4XjExK3heMTAreF45KworICogeF44K3heNit4XjAKKyAqLworI2RlZmluZSBDUkNQT0xZX0xFIDB4ODJGNjNCNzgKKyNkZWZpbmUgQ1JDUE9MWV9CRSAweDFFREM2RjQxCisKKy8qIEhvdyBtYW55IGJpdHMgYXQgYSB0aW1lIHRvIHVzZS4gIFZhbGlkIHZhbHVlcyBhcmUgMSwgMiwgNCwgOCwgMzIgYW5kIDY0LiAqLworLyogRm9yIGxlc3MgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlLCB1c2UgNCAqLworI2lmbmRlZiBDUkNfTEVfQklUUworIyBkZWZpbmUgQ1JDX0xFX0JJVFMgNjQKKyNlbmRpZgorI2lmbmRlZiBDUkNfQkVfQklUUworIyBkZWZpbmUgQ1JDX0JFX0JJVFMgNjQKKyNlbmRpZgorCisvKgorICogTGl0dGxlLWVuZGlhbiBDUkMgY29tcHV0YXRpb24uICBVc2VkIHdpdGggc2VyaWFsIGJpdCBzdHJlYW1zIHNlbnQKKyAqIGxzYml0LWZpcnN0LiAgQmUgc3VyZSB0byB1c2UgY3B1X3RvX2xlMzIoKSB0byBhcHBlbmQgdGhlIGNvbXB1dGVkIENSQy4KKyAqLworI2lmIENSQ19MRV9CSVRTID4gNjQgfHwgQ1JDX0xFX0JJVFMgPCAxIHx8IENSQ19MRV9CSVRTID09IDE2IHx8IFwKKwlDUkNfTEVfQklUUyAmIENSQ19MRV9CSVRTLTEKKyMgZXJyb3IgIkNSQ19MRV9CSVRTIG11c3QgYmUgb25lIG9mIHsxLCAyLCA0LCA4LCAzMiwgNjR9IgorI2VuZGlmCisKKy8qCisgKiBCaWctZW5kaWFuIENSQyBjb21wdXRhdGlvbi4gIFVzZWQgd2l0aCBzZXJpYWwgYml0IHN0cmVhbXMgc2VudAorICogbXNiaXQtZmlyc3QuICBCZSBzdXJlIHRvIHVzZSBjcHVfdG9fYmUzMigpIHRvIGFwcGVuZCB0aGUgY29tcHV0ZWQgQ1JDLgorICovCisjaWYgQ1JDX0JFX0JJVFMgPiA2NCB8fCBDUkNfQkVfQklUUyA8IDEgfHwgQ1JDX0JFX0JJVFMgPT0gMTYgfHwgXAorCUNSQ19CRV9CSVRTICYgQ1JDX0JFX0JJVFMtMQorIyBlcnJvciAiQ1JDX0JFX0JJVFMgbXVzdCBiZSBvbmUgb2YgezEsIDIsIDQsIDgsIDMyLCA2NH0iCisjZW5kaWYKKworCisjZGVmaW5lIF9fX2NvbnN0YW50X3N3YWIzMih4KSBcCisJKCh1aW50MzJfdCkoIFwKKwkJKCgodWludDMyX3QpKHgpICYgKHVpbnQzMl90KTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgXAorCQkoKCh1aW50MzJfdCkoeCkgJiAodWludDMyX3QpMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCBcCisJCSgoKHVpbnQzMl90KSh4KSAmICh1aW50MzJfdCkweDAwZmYwMDAwVUwpID4+ICA4KSB8IFwKKwkJKCgodWludDMyX3QpKHgpICYgKHVpbnQzMl90KTB4ZmYwMDAwMDBVTCkgPj4gMjQpKSkKKworCisjaWYgKF9fR05VQ19fID49IDMpCisjZGVmaW5lIGxpa2VseSh4KQlfX2J1aWx0aW5fZXhwZWN0KCEhKHgpLCAxKQorI2RlZmluZSB1bmxpa2VseSh4KQlfX2J1aWx0aW5fZXhwZWN0KCEhKHgpLCAwKQorI2Vsc2UKKyNkZWZpbmUgbGlrZWx5KHgpCSh4KQorI2RlZmluZSB1bmxpa2VseSh4KQkoeCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9jc3VtLmMgYi9saWIvZXh0MmZzL2NzdW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjlmODA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9jc3VtLmMKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisgKiBjc3VtLmMgLS0tIGNoZWNrc3VtbWluZyBvZiBleHQzIHN0cnVjdHVyZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ2x1c3RlciBGaWxlIFN5c3RlbXMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBieSBBbmRyZWFzIERpbGdlciA8YWRpbGdlckBjbHVzdGVyZnMuY29tPgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorI2luY2x1ZGUgImNyYzE2LmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpZm5kZWYgb2Zmc2V0b2YKKyNkZWZpbmUgb2Zmc2V0b2YoVFlQRSwgTUVNQkVSKSAoKHNpemVfdCkgJigoVFlQRSAqKTApLT5NRU1CRVIpCisjZW5kaWYKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIFNUQVRJQworI2Vsc2UKKyNkZWZpbmUgU1RBVElDIHN0YXRpYworI2VuZGlmCisKK19fdTE2IGV4dDJmc19ncm91cF9kZXNjX2NzdW0oZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCkKK3sKKwlzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjICpkZXNjID0gZXh0MmZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLAorCQkJCQkJCSBncm91cCk7CisJc2l6ZV90IHNpemUgPSBFWFQyX0RFU0NfU0laRShmcy0+c3VwZXIpOworCV9fdTE2IGNyYyA9IDA7CisKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkgeworCQlzaXplX3Qgb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYywgYmdfY2hlY2tzdW0pOworCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2Mgc3dhYmRlc2M7CisJCXNpemVfdCBzYXZlX3NpemUgPSBzaXplOworCQljb25zdCBzaXplX3QgZXh0NF9iZ19zaXplID0gc2l6ZW9mKHN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MpOworCQlzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjICpzYXZlX2Rlc2MgPSBkZXNjOworCisJCS8qIEhhdmUgdG8gc3dhYiBiYWNrIHRvIGxpdHRsZS1lbmRpYW4gdG8gZG8gdGhlIGNoZWNrc3VtICovCisJCWlmIChzaXplID4gZXh0NF9iZ19zaXplKQorCQkJc2l6ZSA9IGV4dDRfYmdfc2l6ZTsKKwkJbWVtY3B5KCZzd2FiZGVzYywgZGVzYywgc2l6ZSk7CisJCWV4dDJmc19zd2FwX2dyb3VwX2Rlc2MyKGZzLAorCQkJCQkoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqKSAmc3dhYmRlc2MpOworCQlkZXNjID0gKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKikgJnN3YWJkZXNjOworCisJCWdyb3VwID0gZXh0MmZzX3N3YWIzMihncm91cCk7CisjZW5kaWYKKwkJY3JjID0gZXh0MmZzX2NyYzE2KH4wLCBmcy0+c3VwZXItPnNfdXVpZCwKKwkJCQkgICBzaXplb2YoZnMtPnN1cGVyLT5zX3V1aWQpKTsKKwkJY3JjID0gZXh0MmZzX2NyYzE2KGNyYywgJmdyb3VwLCBzaXplb2YoZ3JvdXApKTsKKwkJY3JjID0gZXh0MmZzX2NyYzE2KGNyYywgZGVzYywgb2Zmc2V0KTsKKwkJb2Zmc2V0ICs9IHNpemVvZihkZXNjLT5iZ19jaGVja3N1bSk7IC8qIHNraXAgY2hlY2tzdW0gKi8KKwkJLyogZm9yIGNoZWNrc3VtIG9mIHN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgZG8gdGhlIHJlc3QuLi4qLworCQlpZiAob2Zmc2V0IDwgc2l6ZSkgeworCQkJY3JjID0gZXh0MmZzX2NyYzE2KGNyYywgKGNoYXIgKilkZXNjICsgb2Zmc2V0LAorCQkJCQkgICBzaXplIC0gb2Zmc2V0KTsKKwkJfQorI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCQkvKgorCQkgKiBJZiB0aGUgc2l6ZSBvZiB0aGUgYmcgZGVzY3JpcHRvciBpcyBncmVhdGVyIHRoYW4gNjQKKwkJICogYnl0ZXMsIHdoaWNoIGlzIHRoZSBzaXplIG9mIHRoZSB0cmFkaXRpb25hbCBleHQ0IGJnCisJCSAqIGRlc2NyaXB0b3IsIGNoZWNrc3VtIHRoZSByZXN0IG9mIHRoZSBkZXNjcmlwdG9yIGhlcmUKKwkJICovCisJCWlmIChzYXZlX3NpemUgPiBleHQ0X2JnX3NpemUpCisJCQljcmMgPSBleHQyZnNfY3JjMTYoY3JjLAorCQkJCQkgICAoY2hhciAqKXNhdmVfZGVzYyArIGV4dDRfYmdfc2l6ZSwKKwkJCQkJICAgc2F2ZV9zaXplIC0gZXh0NF9iZ19zaXplKTsKKyNlbmRpZgorCX0KKworCXJldHVybiBjcmM7Cit9CisKK2ludCBleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3ZlcmlmeShleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKQoreworCWlmIChFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pICYmCisJICAgIChleHQyZnNfYmdfY2hlY2tzdW0oZnMsIGdyb3VwKSAhPQorCSAgICAgZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bShmcywgZ3JvdXApKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKQoreworCWlmICghRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSkKKwkJcmV0dXJuOworCisJLyogZXh0MmZzX2JnX2NoZWNrc3VtX3NldCgpIHNldHMgdGhlIGFjdHVhbCBjaGVja3N1bSBmaWVsZCBidXQKKwkgKiBkb2VzIG5vdCBjYWxjdWxhdGUgdGhlIGNoZWNrc3VtIGl0c2VsZi4gKi8KKwlleHQyZnNfYmdfY2hlY2tzdW1fc2V0KGZzLCBncm91cCwgZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bShmcywgZ3JvdXApKTsKK30KKworc3RhdGljIF9fdTMyIGZpbmRfbGFzdF9pbm9kZV9pbmdycChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkgICBfX3UzMiBpbm9kZXNfcGVyX2dycCwgZGdycF90IGdycF9ubykKK3sKKwlleHQyX2lub190IGksIHN0YXJ0X2lubywgZW5kX2lubzsKKworCXN0YXJ0X2lubyA9IGdycF9ubyAqIGlub2Rlc19wZXJfZ3JwICsgMTsKKwllbmRfaW5vID0gc3RhcnRfaW5vICsgaW5vZGVzX3Blcl9ncnAgLSAxOworCisJZm9yIChpID0gZW5kX2lubzsgaSA+PSBzdGFydF9pbm87IGktLSkgeworCQlpZiAoZXh0MmZzX2Zhc3RfdGVzdF9pbm9kZV9iaXRtYXAyKGJpdG1hcCwgaSkpCisJCQlyZXR1cm4gaSAtIHN0YXJ0X2lubyArIDE7CisJfQorCXJldHVybiBpbm9kZXNfcGVyX2dycDsKK30KKworLyogdXBkYXRlIHRoZSBiaXRtYXAgZmxhZ3MsIHNldCB0aGUgaXRhYmxlIGhpZ2ggd2F0ZXJtYXJrLCBhbmQgY2FsY3VsYXRlCisgKiBjaGVja3N1bXMgZm9yIHRoZSBncm91cCBkZXNjcmlwdG9ycyAqLworZXJyY29kZV90IGV4dDJmc19zZXRfZ2R0X2NzdW0oZXh0Ml9maWxzeXMgZnMpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiID0gZnMtPnN1cGVyOworCWludCBkaXJ0eSA9IDA7CisJZGdycF90IGk7CisKKwlpZiAoIWZzLT5pbm9kZV9tYXApCisJCXJldHVybiBFWFQyX0VUX05PX0lOT0RFX0JJVE1BUDsKKworCWlmICghRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlfX3UzMiBvbGRfY3N1bSA9IGV4dDJmc19iZ19jaGVja3N1bShmcywgaSk7CisJCV9fdTMyIG9sZF91bnVzZWQgPSBleHQyZnNfYmdfaXRhYmxlX3VudXNlZChmcywgaSk7CisJCV9fdTMyIG9sZF9mbGFncyA9IGV4dDJmc19iZ19mbGFncyhmcywgaSk7CisJCV9fdTMyIG9sZF9mcmVlX2lub2Rlc19jb3VudCA9IGV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudChmcywgaSk7CisKKwkJaWYgKG9sZF9mcmVlX2lub2Rlc19jb3VudCA9PSBzYi0+c19pbm9kZXNfcGVyX2dyb3VwKSB7CisJCQlleHQyZnNfYmdfZmxhZ3Nfc2V0KGZzLCBpLCBFWFQyX0JHX0lOT0RFX1VOSU5JVCk7CisJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZF9zZXQoZnMsIGksIHNiLT5zX2lub2Rlc19wZXJfZ3JvdXApOworCQl9IGVsc2UgeworCQkJaW50IHVudXNlZCA9CisJCQkJc2ItPnNfaW5vZGVzX3Blcl9ncm91cCAtCisJCQkJZmluZF9sYXN0X2lub2RlX2luZ3JwKGZzLT5pbm9kZV9tYXAsCisJCQkJCQkgICAgICBzYi0+c19pbm9kZXNfcGVyX2dyb3VwLCBpKTsKKworCQkJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGZzLCBpLCBFWFQyX0JHX0lOT0RFX1VOSU5JVCk7CisJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZF9zZXQoZnMsIGksIHVudXNlZCk7CisJCX0KKworCQlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgaSk7CisJCWlmIChvbGRfZmxhZ3MgIT0gZXh0MmZzX2JnX2ZsYWdzKGZzLCBpKSkKKwkJCWRpcnR5ID0gMTsKKwkJaWYgKG9sZF91bnVzZWQgIT0gZXh0MmZzX2JnX2l0YWJsZV91bnVzZWQoZnMsIGkpKQorCQkJZGlydHkgPSAxOworCQlpZiAob2xkX2NzdW0gIT0gZXh0MmZzX2JnX2NoZWNrc3VtKGZzLCBpKSkKKwkJCWRpcnR5ID0gMTsKKwl9CisJaWYgKGRpcnR5KQorCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBERUJVRworI2luY2x1ZGUgImUycC9lMnAuaCIKKwordm9pZCBwcmludF9jc3VtKGNvbnN0IGNoYXIgKm1zZywgZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCkKK3sKKwlfX3UxNiBjcmMxLCBjcmMyLCBjcmMzOworCWRncnBfdCBzd2FiZ3JvdXA7CisJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqZGVzYyA9IGV4dDJmc19ncm91cF9kZXNjKGZzLCBmcy0+Z3JvdXBfZGVzYywKKwkJCQkJCQkgZ3JvdXApOworCXNpemVfdCBzaXplID0gRVhUMl9ERVNDX1NJWkUoZnMtPnN1cGVyKTsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IgPSBmcy0+c3VwZXI7CisJaW50IG9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MsIGJnX2NoZWNrc3VtKTsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjIHN3YWJkZXNjOworCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKnNhdmVfZGVzYyA9IGRlc2M7CisJY29uc3Qgc2l6ZV90IGV4dDRfYmdfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjKTsKKwlzaXplX3Qgc2F2ZV9zaXplID0gc2l6ZTsKKyNlbmRpZgorCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJLyogSGF2ZSB0byBzd2FiIGJhY2sgdG8gbGl0dGxlLWVuZGlhbiB0byBkbyB0aGUgY2hlY2tzdW0gKi8KKwlpZiAoc2l6ZSA+IGV4dDRfYmdfc2l6ZSkKKwkJc2l6ZSA9IGV4dDRfYmdfc2l6ZTsKKwltZW1jcHkoJnN3YWJkZXNjLCBkZXNjLCBzaXplKTsKKwlleHQyZnNfc3dhcF9ncm91cF9kZXNjMihmcywgKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKikgJnN3YWJkZXNjKTsKKwlkZXNjID0gKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKikgJnN3YWJkZXNjOworCisJc3dhYmdyb3VwID0gZXh0MmZzX3N3YWIzMihncm91cCk7CisjZWxzZQorCXN3YWJncm91cCA9IGdyb3VwOworI2VuZGlmCisKKwljcmMxID0gZXh0MmZzX2NyYzE2KH4wLCBzYi0+c191dWlkLCBzaXplb2YoZnMtPnN1cGVyLT5zX3V1aWQpKTsKKwljcmMyID0gZXh0MmZzX2NyYzE2KGNyYzEsICZzd2FiZ3JvdXAsIHNpemVvZihzd2FiZ3JvdXApKTsKKwljcmMzID0gZXh0MmZzX2NyYzE2KGNyYzIsIGRlc2MsIG9mZnNldCk7CisJb2Zmc2V0ICs9IHNpemVvZihkZXNjLT5iZ19jaGVja3N1bSk7IC8qIHNraXAgY2hlY2tzdW0gKi8KKwkvKiBmb3IgY2hlY2tzdW0gb2Ygc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyBkbyB0aGUgcmVzdC4uLiovCisJaWYgKG9mZnNldCA8IHNpemUpCisJCWNyYzMgPSBleHQyZnNfY3JjMTYoY3JjMywgKGNoYXIgKilkZXNjICsgb2Zmc2V0LCBzaXplIC0gb2Zmc2V0KTsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwlpZiAoc2F2ZV9zaXplID4gZXh0NF9iZ19zaXplKQorCQljcmMzID0gZXh0MmZzX2NyYzE2KGNyYzMsIChjaGFyICopc2F2ZV9kZXNjICsgZXh0NF9iZ19zaXplLAorCQkJCSAgICBzYXZlX3NpemUgLSBleHQ0X2JnX3NpemUpOworI2VuZGlmCisKKwlwcmludGYoIiVzIFVVSUQgJXM9JTA0eCwgZ3JwICV1PSUwNHg6ICUwNHg9JTA0eFxuIiwKKwkgICAgICAgbXNnLCBlMnBfdXVpZDJzdHIoc2ItPnNfdXVpZCksIGNyYzEsIGdyb3VwLCBjcmMyLCBjcmMzLAorCSAgICAgICBleHQyZnNfZ3JvdXBfZGVzY19jc3VtKGZzLCBncm91cCkpOworfQorCit1bnNpZ25lZCBjaGFyIHNiX3V1aWRbMTZdID0geyAweDRmLCAweDI1LCAweGU4LCAweGNmLCAweGU3LCAweDk3LCAweDQ4LCAweDIzLAorCQkJICAgICAgMHhiZSwgMHhmYSwgMHhhNywgMHg4OCwgMHg0YiwgMHhhZSwgMHhlYywgMHhkYiB9OworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgcGFyYW07CisJZXJyY29kZV90CQlyZXR2YWw7CisJZXh0Ml9maWxzeXMJCWZzOworCWludAkJCWk7CisJX191MTYgY3N1bTEsIGNzdW0yLCBjc3VtX2tub3duID0gMHhkM2E0OworCisJbWVtc2V0KCZwYXJhbSwgMCwgc2l6ZW9mKHBhcmFtKSk7CisJZXh0MmZzX2Jsb2Nrc19jb3VudF9zZXQoJnBhcmFtLCAzMjc2OCk7CisjaWYgMAorCXBhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCB8PSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQ7CisJcGFyYW0uc19kZXNjX3NpemUgPSAxMjg7CisJY3N1bV9rbm93biA9IDB4NWI2ZTsKKyNlbmRpZgorCisJcmV0dmFsID0gZXh0MmZzX2luaXRpYWxpemUoInRlc3QgZnMiLCBFWFQyX0ZMQUdfNjRCSVRTLCAmcGFyYW0sCisJCQkJICAgdGVzdF9pb19tYW5hZ2VyLCAmZnMpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycigic2V0dXAiLCByZXR2YWwsCisJCQkiV2hpbGUgaW5pdGlhbGl6aW5nIGZpbGVzeXN0ZW0iKTsKKwkJZXhpdCgxKTsKKwl9CisJbWVtY3B5KGZzLT5zdXBlci0+c191dWlkLCBzYl91dWlkLCAxNik7CisJZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ID0gRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTTsKKworCWZvciAoaT0wOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlleHQyZnNfYmxvY2tfYml0bWFwX2xvY19zZXQoZnMsIGksIDEyNCk7CisJCWV4dDJmc19pbm9kZV9iaXRtYXBfbG9jX3NldChmcywgaSwgMTI1KTsKKwkJZXh0MmZzX2lub2RlX3RhYmxlX2xvY19zZXQoZnMsIGksIDEyNik7CisJCWV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoZnMsIGksIDMxMTE5KTsKKwkJZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50X3NldChmcywgaSwgMTU3MDEpOworCQlleHQyZnNfYmdfdXNlZF9kaXJzX2NvdW50X3NldChmcywgaSwgMik7CisJCWV4dDJmc19iZ19mbGFnc196YXAoZnMsIGkpOworCX07CisKKwljc3VtMSA9IGV4dDJmc19ncm91cF9kZXNjX2NzdW0oZnMsIDApOworCXByaW50X2NzdW0oImNzdW0wMDAwIiwgZnMsIDApOworCisJaWYgKGNzdW0xICE9IGNzdW1fa25vd24pIHsKKwkJcHJpbnRmKCJjaGVja3N1bSBmb3IgZ3JvdXAgMCBzaG91bGQgYmUgJTA0eFxuIiwgY3N1bV9rbm93bik7CisJCWV4aXQoMSk7CisJfQorCWNzdW0yID0gZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bShmcywgMSk7CisJcHJpbnRfY3N1bSgiY3N1bTAwMDEiLCBmcywgMSk7CisJaWYgKGNzdW0xID09IGNzdW0yKSB7CisJCXByaW50ZigiY2hlY2tzdW1zIGZvciBkaWZmZXJlbnQgZ3JvdXBzIHNob3VsZG4ndCBtYXRjaFxuIik7CisJCWV4aXQoMSk7CisJfQorCWNzdW0yID0gZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bShmcywgMik7CisJcHJpbnRfY3N1bSgiY3N1bWZmZmYiLCBmcywgMik7CisJaWYgKGNzdW0xID09IGNzdW0yKSB7CisJCXByaW50ZigiY2hlY2tzdW1zIGZvciBkaWZmZXJlbnQgZ3JvdXBzIHNob3VsZG4ndCBtYXRjaFxuIik7CisJCWV4aXQoMSk7CisJfQorCWV4dDJmc19iZ19jaGVja3N1bV9zZXQoZnMsIDAsIGNzdW0xKTsKKwljc3VtMiA9IGV4dDJmc19ncm91cF9kZXNjX2NzdW0oZnMsIDApOworCXByaW50X2NzdW0oImNzdW1fc2V0IiwgZnMsIDApOworCWlmIChjc3VtMSAhPSBjc3VtMikgeworCQlwcmludGYoImNoZWNrc3VtcyBzaG91bGQgbm90IGRlcGVuZCBvbiBjaGVja3N1bSBmaWVsZFxuIik7CisJCWV4aXQoMSk7CisJfQorCWlmICghZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV92ZXJpZnkoZnMsIDApKSB7CisJCXByaW50ZigiY2hlY2tzdW1zIHNob3VsZCB2ZXJpZnkgYWdhaW5zdCBnZF9jaGVja3N1bVxuIik7CisJCWV4aXQoMSk7CisJfQorCW1lbXNldChmcy0+c3VwZXItPnNfdXVpZCwgMHgzMCwgc2l6ZW9mKGZzLT5zdXBlci0+c191dWlkKSk7CisJcHJpbnRfY3N1bSgibmV3X3V1aWQiLCBmcywgMCk7CisJaWYgKGV4dDJmc19ncm91cF9kZXNjX2NzdW1fdmVyaWZ5KGZzLCAwKSAhPSAwKSB7CisJCXByaW50ZigiY2hlY2tzdW1zIGZvciBkaWZmZXJlbnQgZmlsZXN5c3RlbXMgc2hvdWxkbid0IG1hdGNoXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisJY3N1bTEgPSBleHQyZnNfZ3JvdXBfZGVzY19jc3VtKGZzLCAwKTsKKwlleHQyZnNfYmdfY2hlY2tzdW1fc2V0KGZzLCAwLCBjc3VtMSk7CisJcHJpbnRfY3N1bSgiY3N1bV9uZXciLCBmcywgMCk7CisJZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcywgMCwgMSk7CisJY3N1bTIgPSBleHQyZnNfZ3JvdXBfZGVzY19jc3VtKGZzLCAwKTsKKwlwcmludF9jc3VtKCJjc3VtX2JsayIsIGZzLCAwKTsKKwlpZiAoY3N1bTEgPT0gY3N1bTIpIHsKKwkJcHJpbnRmKCJjaGVja3N1bXMgZm9yIGRpZmZlcmVudCBkYXRhIHNob3VsZG4ndCBtYXRjaFxuIik7CisJCWV4aXQoMSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvZGJsaXN0LmMgYi9saWIvZXh0MmZzL2RibGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNmVhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2RibGlzdC5jCkBAIC0wLDAgKzEsNDE2IEBACisvKgorICogZGJsaXN0LmMgLS0gZGlyZWN0b3J5IGJsb2NrIGxpc3QgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IDE5OTcgYnkgVGhlb2RvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmc1AuaCIKKworc3RhdGljIEVYVDJfUVNPUlRfVFlQRSBkaXJfYmxvY2tfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOworc3RhdGljIEVYVDJfUVNPUlRfVFlQRSBkaXJfYmxvY2tfY21wMihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKK3N0YXRpYyBFWFQyX1FTT1JUX1RZUEUgKCpzb3J0ZnVuYzMyKShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKKworLyoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkaXJlY3RvcmllcyBpbiB0aGUgZmlsZXN5c3RlbSBhcyByZXBvcnRlZCBieQorICogdGhlIGdyb3VwIGRlc2NyaXB0b3JzLiAgT2YgY291cnNlLCB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgY291bGQgYmUKKyAqIHdyb25nIQorICovCitlcnJjb2RlX3QgZXh0MmZzX2dldF9udW1fZGlycyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCAqcmV0X251bV9kaXJzKQoreworCWRncnBfdAlpOworCWV4dDJfaW5vX3QJbnVtX2RpcnMsIG1heF9kaXJzOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCW51bV9kaXJzID0gMDsKKwltYXhfZGlycyA9IGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwOworCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCWlmIChleHQyZnNfYmdfdXNlZF9kaXJzX2NvdW50KGZzLCBpKSA+IG1heF9kaXJzKQorCQkJbnVtX2RpcnMgKz0gbWF4X2RpcnMgLyA4OworCQllbHNlCisJCQludW1fZGlycyArPSBleHQyZnNfYmdfdXNlZF9kaXJzX2NvdW50KGZzLCBpKTsKKwl9CisJaWYgKG51bV9kaXJzID4gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCkKKwkJbnVtX2RpcnMgPSBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50OworCisJKnJldF9udW1fZGlycyA9IG51bV9kaXJzOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gZm9yIG1ha2luZyBhIG5ldyBkaXJlY3RvcnkgYmxvY2sgbGlzdCAoZm9yCisgKiBpbml0aWFsaXplIGFuZCBjb3B5KS4KKyAqLworc3RhdGljIGVycmNvZGVfdCBtYWtlX2RibGlzdChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBzaXplLAorCQkJICAgICBleHQyX2lub190IGNvdW50LAorCQkJICAgICBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKmxpc3QsCisJCQkgICAgIGV4dDJfZGJsaXN0ICpyZXRfZGJsaXN0KQoreworCWV4dDJfZGJsaXN0CWRibGlzdCA9IE5VTEw7CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2lub190CW51bV9kaXJzOworCXNpemVfdAkJbGVuOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmICgocmV0X2RibGlzdCA9PSAwKSAmJiBmcy0+ZGJsaXN0ICYmCisJICAgIChmcy0+ZGJsaXN0LT5tYWdpYyA9PSBFWFQyX0VUX01BR0lDX0RCTElTVCkpCisJCXJldHVybiAwOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBleHQyX3N0cnVjdF9kYmxpc3QpLCAmZGJsaXN0KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisJbWVtc2V0KGRibGlzdCwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX3N0cnVjdF9kYmxpc3QpKTsKKworCWRibGlzdC0+bWFnaWMgPSBFWFQyX0VUX01BR0lDX0RCTElTVDsKKwlkYmxpc3QtPmZzID0gZnM7CisJaWYgKHNpemUpCisJCWRibGlzdC0+c2l6ZSA9IHNpemU7CisJZWxzZSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbnVtX2RpcnMoZnMsICZudW1fZGlycyk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJCWRibGlzdC0+c2l6ZSA9IChudW1fZGlycyAqIDIpICsgMTI7CisJfQorCWxlbiA9IChzaXplX3QpIHNpemVvZihzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIpICogZGJsaXN0LT5zaXplOworCWRibGlzdC0+Y291bnQgPSBjb3VudDsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KGRibGlzdC0+c2l6ZSwgc2l6ZW9mKHN0cnVjdCBleHQyX2RiX2VudHJ5MiksCisJCSZkYmxpc3QtPmxpc3QpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKworCWlmIChsaXN0KQorCQltZW1jcHkoZGJsaXN0LT5saXN0LCBsaXN0LCBsZW4pOworCWVsc2UKKwkJbWVtc2V0KGRibGlzdC0+bGlzdCwgMCwgbGVuKTsKKwlpZiAocmV0X2RibGlzdCkKKwkJKnJldF9kYmxpc3QgPSBkYmxpc3Q7CisJZWxzZQorCQlmcy0+ZGJsaXN0ID0gZGJsaXN0OworCXJldHVybiAwOworY2xlYW51cDoKKwlpZiAoZGJsaXN0KQorCQlleHQyZnNfZnJlZV9tZW0oJmRibGlzdCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIEluaXRpYWxpemUgYSBkaXJlY3RvcnkgYmxvY2sgbGlzdAorICovCitlcnJjb2RlX3QgZXh0MmZzX2luaXRfZGJsaXN0KGV4dDJfZmlsc3lzIGZzLCBleHQyX2RibGlzdCAqcmV0X2RibGlzdCkKK3sKKwlleHQyX2RibGlzdAlkYmxpc3Q7CisJZXJyY29kZV90CXJldHZhbDsKKworCXJldHZhbCA9IG1ha2VfZGJsaXN0KGZzLCAwLCAwLCAwLCAmZGJsaXN0KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJZGJsaXN0LT5zb3J0ZWQgPSAxOworCWlmIChyZXRfZGJsaXN0KQorCQkqcmV0X2RibGlzdCA9IGRibGlzdDsKKwllbHNlCisJCWZzLT5kYmxpc3QgPSBkYmxpc3Q7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvcHkgYSBkaXJlY3RvcnkgYmxvY2sgbGlzdAorICovCitlcnJjb2RlX3QgZXh0MmZzX2NvcHlfZGJsaXN0KGV4dDJfZGJsaXN0IHNyYywgZXh0Ml9kYmxpc3QgKmRlc3QpCit7CisJZXh0Ml9kYmxpc3QJZGJsaXN0OworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlyZXR2YWwgPSBtYWtlX2RibGlzdChzcmMtPmZzLCBzcmMtPnNpemUsIHNyYy0+Y291bnQsIHNyYy0+bGlzdCwKKwkJCSAgICAgJmRibGlzdCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlkYmxpc3QtPnNvcnRlZCA9IHNyYy0+c29ydGVkOworCSpkZXN0ID0gZGJsaXN0OworCXJldHVybiAwOworfQorCisvKgorICogQ2xvc2UgYSBkaXJlY3RvcnkgYmxvY2sgbGlzdAorICoKKyAqIChtb3ZlZCB0byBjbG9zZWZzLmMpCisgKi8KKworCisvKgorICogQWRkIGEgZGlyZWN0b3J5IGJsb2NrIHRvIHRoZSBkaXJlY3RvcnkgYmxvY2sgbGlzdAorICovCitlcnJjb2RlX3QgZXh0MmZzX2FkZF9kaXJfYmxvY2syKGV4dDJfZGJsaXN0IGRibGlzdCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkJYmxrNjRfdCBibGssIGUyX2Jsa2NudF90IGJsb2NrY250KQoreworCXN0cnVjdCBleHQyX2RiX2VudHJ5MiAJKm5ld19lbnRyeTsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwl1bnNpZ25lZCBsb25nCQlvbGRfc2l6ZTsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZGJsaXN0LCBFWFQyX0VUX01BR0lDX0RCTElTVCk7CisKKwlpZiAoZGJsaXN0LT5jb3VudCA+PSBkYmxpc3QtPnNpemUpIHsKKwkJb2xkX3NpemUgPSBkYmxpc3QtPnNpemUgKiBzaXplb2Yoc3RydWN0IGV4dDJfZGJfZW50cnkyKTsKKwkJZGJsaXN0LT5zaXplICs9IGRibGlzdC0+c2l6ZSA+IDIwMCA/IGRibGlzdC0+c2l6ZSAvIDIgOiAxMDA7CisJCXJldHZhbCA9IGV4dDJmc19yZXNpemVfbWVtKG9sZF9zaXplLCAoc2l6ZV90KSBkYmxpc3QtPnNpemUgKgorCQkJCQkgICBzaXplb2Yoc3RydWN0IGV4dDJfZGJfZW50cnkyKSwKKwkJCQkJICAgJmRibGlzdC0+bGlzdCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWRibGlzdC0+c2l6ZSA9IG9sZF9zaXplIC8gc2l6ZW9mKHN0cnVjdCBleHQyX2RiX2VudHJ5Mik7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJfQorCW5ld19lbnRyeSA9IGRibGlzdC0+bGlzdCArICggZGJsaXN0LT5jb3VudCsrKTsKKwluZXdfZW50cnktPmJsayA9IGJsazsKKwluZXdfZW50cnktPmlubyA9IGlubzsKKwluZXdfZW50cnktPmJsb2NrY250ID0gYmxvY2tjbnQ7CisKKwlkYmxpc3QtPnNvcnRlZCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENoYW5nZSB0aGUgZGlyZWN0b3J5IGJsb2NrIHRvIHRoZSBkaXJlY3RvcnkgYmxvY2sgbGlzdAorICovCitlcnJjb2RlX3QgZXh0MmZzX3NldF9kaXJfYmxvY2syKGV4dDJfZGJsaXN0IGRibGlzdCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkJYmxrNjRfdCBibGssIGUyX2Jsa2NudF90IGJsb2NrY250KQoreworCWRncnBfdAkJCWk7CisKKwlFWFQyX0NIRUNLX01BR0lDKGRibGlzdCwgRVhUMl9FVF9NQUdJQ19EQkxJU1QpOworCisJZm9yIChpPTA7IGkgPCBkYmxpc3QtPmNvdW50OyBpKyspIHsKKwkJaWYgKChkYmxpc3QtPmxpc3RbaV0uaW5vICE9IGlubykgfHwKKwkJICAgIChkYmxpc3QtPmxpc3RbaV0uYmxvY2tjbnQgIT0gYmxvY2tjbnQpKQorCQkJY29udGludWU7CisJCWRibGlzdC0+bGlzdFtpXS5ibGsgPSBibGs7CisJCWRibGlzdC0+c29ydGVkID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBFWFQyX0VUX0RCX05PVF9GT1VORDsKK30KKwordm9pZCBleHQyZnNfZGJsaXN0X3NvcnQyKGV4dDJfZGJsaXN0IGRibGlzdCwKKwkJCSBFWFQyX1FTT1JUX1RZUEUgKCpzb3J0ZnVuYykoY29uc3Qgdm9pZCAqLAorCQkJCQkJICAgICBjb25zdCB2b2lkICopKQoreworCWlmICghc29ydGZ1bmMpCisJCXNvcnRmdW5jID0gZGlyX2Jsb2NrX2NtcDI7CisJcXNvcnQoZGJsaXN0LT5saXN0LCAoc2l6ZV90KSBkYmxpc3QtPmNvdW50LAorCSAgICAgIHNpemVvZihzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIpLCBzb3J0ZnVuYyk7CisJZGJsaXN0LT5zb3J0ZWQgPSAxOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIHRoZSBkaXJlY3RvcnkgYmxvY2sgbGlzdAorICovCitlcnJjb2RlX3QgZXh0MmZzX2RibGlzdF9pdGVyYXRlMihleHQyX2RibGlzdCBkYmxpc3QsCisJCQkJIGludCAoKmZ1bmMpKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgICAgIHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqZGJfaW5mbywKKwkJCQkJICAgICB2b2lkCSpwcml2X2RhdGEpLAorCQkJCSB2b2lkICpwcml2X2RhdGEpCit7CisJdW5zaWduZWQgbG9uZyBsb25nCWk7CisJaW50CQlyZXQ7CisKKwlFWFQyX0NIRUNLX01BR0lDKGRibGlzdCwgRVhUMl9FVF9NQUdJQ19EQkxJU1QpOworCisJaWYgKCFkYmxpc3QtPnNvcnRlZCkKKwkJZXh0MmZzX2RibGlzdF9zb3J0MihkYmxpc3QsIDApOworCWZvciAoaT0wOyBpIDwgZGJsaXN0LT5jb3VudDsgaSsrKSB7CisJCXJldCA9ICgqZnVuYykoZGJsaXN0LT5mcywgJmRibGlzdC0+bGlzdFtpXSwgcHJpdl9kYXRhKTsKKwkJaWYgKHJldCAmIERCTElTVF9BQk9SVCkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIEVYVDJfUVNPUlRfVFlQRSBkaXJfYmxvY2tfY21wMihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqZGJfYSA9CisJCShjb25zdCBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKikgYTsKKwljb25zdCBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKmRiX2IgPQorCQkoY29uc3Qgc3RydWN0IGV4dDJfZGJfZW50cnkyICopIGI7CisKKwlpZiAoZGJfYS0+YmxrICE9IGRiX2ItPmJsaykKKwkJcmV0dXJuIChpbnQpIChkYl9hLT5ibGsgLSBkYl9iLT5ibGspOworCisJaWYgKGRiX2EtPmlubyAhPSBkYl9iLT5pbm8pCisJCXJldHVybiAoaW50KSAoZGJfYS0+aW5vIC0gZGJfYi0+aW5vKTsKKworCXJldHVybiAoZGJfYS0+YmxvY2tjbnQgLSBkYl9iLT5ibG9ja2NudCk7Cit9CisKK2JsazY0X3QgZXh0MmZzX2RibGlzdF9jb3VudDIoZXh0Ml9kYmxpc3QgZGJsaXN0KQoreworCXJldHVybiBkYmxpc3QtPmNvdW50OworfQorCitlcnJjb2RlX3QgZXh0MmZzX2RibGlzdF9nZXRfbGFzdDIoZXh0Ml9kYmxpc3QgZGJsaXN0LAorCQkJCSAgc3RydWN0IGV4dDJfZGJfZW50cnkyICoqZW50cnkpCit7CisJRVhUMl9DSEVDS19NQUdJQyhkYmxpc3QsIEVYVDJfRVRfTUFHSUNfREJMSVNUKTsKKworCWlmIChkYmxpc3QtPmNvdW50ID09IDApCisJCXJldHVybiBFWFQyX0VUX0RCTElTVF9FTVBUWTsKKworCWlmIChlbnRyeSkKKwkJKmVudHJ5ID0gZGJsaXN0LT5saXN0ICsgKCBkYmxpc3QtPmNvdW50LTEpOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2RibGlzdF9kcm9wX2xhc3QoZXh0Ml9kYmxpc3QgZGJsaXN0KQoreworCUVYVDJfQ0hFQ0tfTUFHSUMoZGJsaXN0LCBFWFQyX0VUX01BR0lDX0RCTElTVCk7CisKKwlpZiAoZGJsaXN0LT5jb3VudCA9PSAwKQorCQlyZXR1cm4gRVhUMl9FVF9EQkxJU1RfRU1QVFk7CisKKwlkYmxpc3QtPmNvdW50LS07CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMZWdhY3kgMzItYml0IHZlcnNpb25zCisgKi8KKworLyoKKyAqIEFkZCBhIGRpcmVjdG9yeSBibG9jayB0byB0aGUgZGlyZWN0b3J5IGJsb2NrIGxpc3QKKyAqLworZXJyY29kZV90IGV4dDJmc19hZGRfZGlyX2Jsb2NrKGV4dDJfZGJsaXN0IGRibGlzdCwgZXh0Ml9pbm9fdCBpbm8sIGJsa190IGJsaywKKwkJCSAgICAgICBpbnQgYmxvY2tjbnQpCit7CisJcmV0dXJuIGV4dDJmc19hZGRfZGlyX2Jsb2NrMihkYmxpc3QsIGlubywgYmxrLCBibG9ja2NudCk7Cit9CisKKy8qCisgKiBDaGFuZ2UgdGhlIGRpcmVjdG9yeSBibG9jayB0byB0aGUgZGlyZWN0b3J5IGJsb2NrIGxpc3QKKyAqLworZXJyY29kZV90IGV4dDJmc19zZXRfZGlyX2Jsb2NrKGV4dDJfZGJsaXN0IGRibGlzdCwgZXh0Ml9pbm9fdCBpbm8sIGJsa190IGJsaywKKwkJCSAgICAgICBpbnQgYmxvY2tjbnQpCit7CisJcmV0dXJuIGV4dDJmc19zZXRfZGlyX2Jsb2NrMihkYmxpc3QsIGlubywgYmxrLCBibG9ja2NudCk7Cit9CisKK3ZvaWQgZXh0MmZzX2RibGlzdF9zb3J0KGV4dDJfZGJsaXN0IGRibGlzdCwKKwkJCUVYVDJfUVNPUlRfVFlQRSAoKnNvcnRmdW5jKShjb25zdCB2b2lkICosCisJCQkJCQkgICAgY29uc3Qgdm9pZCAqKSkKK3sKKwlpZiAoc29ydGZ1bmMpIHsKKwkJc29ydGZ1bmMzMiA9IHNvcnRmdW5jOworCQlzb3J0ZnVuYyA9IGRpcl9ibG9ja19jbXA7CisJfSBlbHNlCisJCXNvcnRmdW5jID0gZGlyX2Jsb2NrX2NtcDI7CisJcXNvcnQoZGJsaXN0LT5saXN0LCAoc2l6ZV90KSBkYmxpc3QtPmNvdW50LAorCSAgICAgIHNpemVvZihzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIpLCBzb3J0ZnVuYyk7CisJZGJsaXN0LT5zb3J0ZWQgPSAxOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIHRoZSBkaXJlY3RvcnkgYmxvY2sgbGlzdAorICovCitzdHJ1Y3QgaXRlcmF0ZV9wYXNzdGhyb3VnaCB7CisJaW50ICgqZnVuYykoZXh0Ml9maWxzeXMgZnMsCisJCSAgICBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeSAqZGJfaW5mbywKKwkJICAgIHZvaWQJKnByaXZfZGF0YSk7CisJdm9pZCAqcHJpdl9kYXRhOworfTsKKworc3RhdGljIGludCBwYXNzdGhyb3VnaF9mdW5jKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgIHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqZGJfaW5mbywKKwkJCSAgICB2b2lkCSpwcml2X2RhdGEpCit7CisJc3RydWN0IGl0ZXJhdGVfcGFzc3Rocm91Z2ggKnAgPSBwcml2X2RhdGE7CisJc3RydWN0IGV4dDJfZGJfZW50cnkgZGI7CisJaW50IHJldDsKKworCWRiLmlubyA9IGRiX2luZm8tPmlubzsKKwlkYi5ibGsgPSAoYmxrX3QpIGRiX2luZm8tPmJsazsKKwlkYi5ibG9ja2NudCA9IChpbnQpIGRiX2luZm8tPmJsb2NrY250OworCXJldCA9IChwLT5mdW5jKShmcywgJmRiLCBwLT5wcml2X2RhdGEpOworCWRiX2luZm8tPmlubyA9IGRiLmlubzsKKwlkYl9pbmZvLT5ibGsgPSBkYi5ibGs7CisJZGJfaW5mby0+YmxvY2tjbnQgPSBkYi5ibG9ja2NudDsKKwlyZXR1cm4gcmV0OworfQorCitlcnJjb2RlX3QgZXh0MmZzX2RibGlzdF9pdGVyYXRlKGV4dDJfZGJsaXN0IGRibGlzdCwKKwkJCQlpbnQgKCpmdW5jKShleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgIHN0cnVjdCBleHQyX2RiX2VudHJ5ICpkYl9pbmZvLAorCQkJCQkgICAgdm9pZAkqcHJpdl9kYXRhKSwKKwkJCQl2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IGl0ZXJhdGVfcGFzc3Rocm91Z2ggcGFzczsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZGJsaXN0LCBFWFQyX0VUX01BR0lDX0RCTElTVCk7CisJcGFzcy5mdW5jID0gZnVuYzsKKwlwYXNzLnByaXZfZGF0YSA9IHByaXZfZGF0YTsKKworCXJldHVybiBleHQyZnNfZGJsaXN0X2l0ZXJhdGUyKGRibGlzdCwgcGFzc3Rocm91Z2hfZnVuYywgJnBhc3MpOworfQorCitzdGF0aWMgRVhUMl9RU09SVF9UWVBFIGRpcl9ibG9ja19jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKmRiX2EgPQorCQkoY29uc3Qgc3RydWN0IGV4dDJfZGJfZW50cnkyICopIGE7CisJY29uc3Qgc3RydWN0IGV4dDJfZGJfZW50cnkyICpkYl9iID0KKwkJKGNvbnN0IHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqKSBiOworCisJc3RydWN0IGV4dDJfZGJfZW50cnkgYTMyLCBiMzI7CisKKwlhMzIuaW5vID0gZGJfYS0+aW5vOyAgYTMyLmJsayA9IGRiX2EtPmJsazsKKwlhMzIuYmxvY2tjbnQgPSBkYl9hLT5ibG9ja2NudDsKKworCWIzMi5pbm8gPSBkYl9iLT5pbm87ICBiMzIuYmxrID0gZGJfYi0+YmxrOworCWIzMi5ibG9ja2NudCA9IGRiX2ItPmJsb2NrY250OworCisJcmV0dXJuIHNvcnRmdW5jMzIoJmEzMiwgJmIzMik7Cit9CisKK2ludCBleHQyZnNfZGJsaXN0X2NvdW50KGV4dDJfZGJsaXN0IGRibGlzdCkKK3sKKwlyZXR1cm4gZGJsaXN0LT5jb3VudDsKK30KKworZXJyY29kZV90IGV4dDJmc19kYmxpc3RfZ2V0X2xhc3QoZXh0Ml9kYmxpc3QgZGJsaXN0LAorCQkJCSBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeSAqKmVudHJ5KQoreworCXN0YXRpYyBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeSByZXRfZW50cnk7CisJc3RydWN0IGV4dDJfZGJfZW50cnkyICpsYXN0OworCisJRVhUMl9DSEVDS19NQUdJQyhkYmxpc3QsIEVYVDJfRVRfTUFHSUNfREJMSVNUKTsKKworCWlmIChkYmxpc3QtPmNvdW50ID09IDApCisJCXJldHVybiBFWFQyX0VUX0RCTElTVF9FTVBUWTsKKworCWlmICghZW50cnkpCisJCXJldHVybiAwOworCisJbGFzdCA9IGRibGlzdC0+bGlzdCArIGRibGlzdC0+Y291bnQgLTE7CisKKwlyZXRfZW50cnkuaW5vID0gbGFzdC0+aW5vOworCXJldF9lbnRyeS5ibGsgPSBsYXN0LT5ibGs7CisJcmV0X2VudHJ5LmJsb2NrY250ID0gbGFzdC0+YmxvY2tjbnQ7CisJKmVudHJ5ID0gJnJldF9lbnRyeTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2RibGlzdF9kaXIuYyBiL2xpYi9leHQyZnMvZGJsaXN0X2Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZDUxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2RibGlzdF9kaXIuYwpAQCAtMCwwICsxLDgwIEBACisvKgorICogZGJsaXN0X2Rpci5jIC0tLSBpdGVyYXRlIGJ5IGRpcmVjdG9yeSBlbnRyeQorICoKKyAqIENvcHlyaWdodCAxOTk3IGJ5IFRoZW9kb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnNQLmgiCisKK3N0YXRpYyBpbnQgZGJfZGlyX3Byb2MoZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqZGJfaW5mbywKKwkJICAgICAgIHZvaWQgKnByaXZfZGF0YSk7CisKK2VycmNvZGVfdCBleHQyZnNfZGJsaXN0X2Rpcl9pdGVyYXRlKGV4dDJfZGJsaXN0IGRibGlzdCwKKwkJCQkgICAgaW50CWZsYWdzLAorCQkJCSAgICBjaGFyCSpibG9ja19idWYsCisJCQkJICAgIGludCAoKmZ1bmMpKGV4dDJfaW5vX3QgZGlyLAorCQkJCQkJaW50CWVudHJ5LAorCQkJCQkJc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCQkJCQlpbnQJb2Zmc2V0LAorCQkJCQkJaW50CWJsb2Nrc2l6ZSwKKwkJCQkJCWNoYXIJKmJ1ZiwKKwkJCQkJCXZvaWQJKnByaXZfZGF0YSksCisJCQkJICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlzdHJ1Y3QgZGlyX2NvbnRleHQJY3R4OworCisJRVhUMl9DSEVDS19NQUdJQyhkYmxpc3QsIEVYVDJfRVRfTUFHSUNfREJMSVNUKTsKKworCWN0eC5kaXIgPSAwOworCWN0eC5mbGFncyA9IGZsYWdzOworCWlmIChibG9ja19idWYpCisJCWN0eC5idWYgPSBibG9ja19idWY7CisJZWxzZSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGRibGlzdC0+ZnMtPmJsb2Nrc2l6ZSwgJmN0eC5idWYpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisJY3R4LmZ1bmMgPSBmdW5jOworCWN0eC5wcml2X2RhdGEgPSBwcml2X2RhdGE7CisJY3R4LmVycmNvZGUgPSAwOworCisJcmV0dmFsID0gZXh0MmZzX2RibGlzdF9pdGVyYXRlMihkYmxpc3QsIGRiX2Rpcl9wcm9jLCAmY3R4KTsKKworCWlmICghYmxvY2tfYnVmKQorCQlleHQyZnNfZnJlZV9tZW0oJmN0eC5idWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dXJuIGN0eC5lcnJjb2RlOworfQorCitzdGF0aWMgaW50IGRiX2Rpcl9wcm9jKGV4dDJfZmlsc3lzIGZzLCBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKmRiX2luZm8sCisJCSAgICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IGRpcl9jb250ZXh0CSpjdHg7CisJaW50CQkJcmV0OworCisJY3R4ID0gKHN0cnVjdCBkaXJfY29udGV4dCAqKSBwcml2X2RhdGE7CisJY3R4LT5kaXIgPSBkYl9pbmZvLT5pbm87CisJY3R4LT5lcnJjb2RlID0gMDsKKworCXJldCA9IGV4dDJmc19wcm9jZXNzX2Rpcl9ibG9jayhmcywgJmRiX2luZm8tPmJsaywKKwkJCQkgICAgICAgZGJfaW5mby0+YmxvY2tjbnQsIDAsIDAsIHByaXZfZGF0YSk7CisJaWYgKChyZXQgJiBCTE9DS19BQk9SVCkgJiYgIWN0eC0+ZXJyY29kZSkKKwkJcmV0dXJuIERCTElTVF9BQk9SVDsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvZGlyX2l0ZXJhdGUuYyBiL2xpYi9leHQyZnMvZGlyX2l0ZXJhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzQ0ZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9kaXJfaXRlcmF0ZS5jCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogZGlyX2l0ZXJhdGUuYyAtLS0gZXh0MmZzIGRpcmVjdG9yeSBpdGVyYXRpb24gb3BlcmF0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmc1AuaCIKKworI2RlZmluZSBFWFQ0X01BWF9SRUNfTEVOCQkoKDE8PDE2KS0xKQorCitlcnJjb2RlX3QgZXh0MmZzX2dldF9yZWNfbGVuKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgICBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJCSAgICAgdW5zaWduZWQgaW50ICpyZWNfbGVuKQoreworCXVuc2lnbmVkIGludCBsZW4gPSBkaXJlbnQtPnJlY19sZW47CisKKwlpZiAoZnMtPmJsb2Nrc2l6ZSA8IDY1NTM2KQorCQkqcmVjX2xlbiA9IGxlbjsKKwllbHNlIGlmIChsZW4gPT0gRVhUNF9NQVhfUkVDX0xFTiB8fCBsZW4gPT0gMCkKKwkJKnJlY19sZW4gPSBmcy0+YmxvY2tzaXplOworCWVsc2UgCisJCSpyZWNfbGVuID0gKGxlbiAmIDY1NTMyKSB8ICgobGVuICYgMykgPDwgMTYpOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3NldF9yZWNfbGVuKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICAgICBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCkKK3sKKwlpZiAoKGxlbiA+IGZzLT5ibG9ja3NpemUpIHx8IChmcy0+YmxvY2tzaXplID4gKDEgPDwgMTgpKSB8fCAobGVuICYgMykpCisJCXJldHVybiBFSU5WQUw7CisJaWYgKGxlbiA8IDY1NTM2KSB7CisJCWRpcmVudC0+cmVjX2xlbiA9IGxlbjsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChsZW4gPT0gZnMtPmJsb2Nrc2l6ZSkgeworCQlpZiAoZnMtPmJsb2Nrc2l6ZSA9PSA2NTUzNikKKwkJCWRpcmVudC0+cmVjX2xlbiA9IEVYVDRfTUFYX1JFQ19MRU47CisJCWVsc2UgCisJCQlkaXJlbnQtPnJlY19sZW4gPSAwOworCX0gZWxzZQorCQlkaXJlbnQtPnJlY19sZW4gPSAobGVuICYgNjU1MzIpIHwgKChsZW4gPj4gMTYpICYgMyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgd2hldGhlciBvciBub3QgYSBwb3RlbnRpYWwgZGVsZXRlZAorICogZGlyZWN0b3J5IGVudHJ5IGxvb2tzIHZhbGlkLiAgV2hhdCB3ZSBkbyBpcyBjaGVjayB0aGUgZGVsZXRlZCBlbnRyeQorICogYW5kIGVhY2ggc3VjY2Vzc2l2ZSBlbnRyeSB0byBtYWtlIHN1cmUgdGhhdCB0aGV5IGFsbCBsb29rIHZhbGlkIGFuZAorICogdGhhdCB0aGUgbGFzdCBkZWxldGVkIGVudHJ5IGVuZHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dAorICogdW5kZWxldGVkIGVudHJ5LiAgUmV0dXJucyAxIGlmIHRoZSBkZWxldGVkIGVudHJ5IGxvb2tzIHZhbGlkLCB6ZXJvCisgKiBpZiBub3QgdmFsaWQuCisgKi8KK3N0YXRpYyBpbnQgZXh0MmZzX3ZhbGlkYXRlX2VudHJ5KGV4dDJfZmlsc3lzIGZzLCBjaGFyICpidWYsCisJCQkJIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJIHVuc2lnbmVkIGludCBmaW5hbF9vZmZzZXQpCit7CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQ7CisJdW5zaWduZWQgaW50IHJlY19sZW47CisjZGVmaW5lIERJUkVOVF9NSU5fTEVOR1RIIDEyCisKKwl3aGlsZSAoKG9mZnNldCA8IGZpbmFsX29mZnNldCkgJiYKKwkgICAgICAgKG9mZnNldCA8PSBmcy0+YmxvY2tzaXplIC0gRElSRU5UX01JTl9MRU5HVEgpKSB7CisJCWRpcmVudCA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikoYnVmICsgb2Zmc2V0KTsKKwkJaWYgKGV4dDJmc19nZXRfcmVjX2xlbihmcywgZGlyZW50LCAmcmVjX2xlbikpCisJCQlyZXR1cm4gMDsKKwkJb2Zmc2V0ICs9IHJlY19sZW47CisJCWlmICgocmVjX2xlbiA8IDgpIHx8CisJCSAgICAoKHJlY19sZW4gJSA0KSAhPSAwKSB8fAorCQkgICAgKCgoKHVuc2lnbmVkKSBkaXJlbnQtPm5hbWVfbGVuICYgMHhGRikrOCkgPiByZWNfbGVuKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gKG9mZnNldCA9PSBmaW5hbF9vZmZzZXQpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2Rpcl9pdGVyYXRlMihleHQyX2ZpbHN5cyBmcywKKwkJCSAgICAgIGV4dDJfaW5vX3QgZGlyLAorCQkJICAgICAgaW50IGZsYWdzLAorCQkJICAgICAgY2hhciAqYmxvY2tfYnVmLAorCQkJICAgICAgaW50ICgqZnVuYykoZXh0Ml9pbm9fdAlkaXIsCisJCQkJCSAgaW50CQllbnRyeSwKKwkJCQkJICBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJCQkJICBpbnQJb2Zmc2V0LAorCQkJCQkgIGludAlibG9ja3NpemUsCisJCQkJCSAgY2hhcgkqYnVmLAorCQkJCQkgIHZvaWQJKnByaXZfZGF0YSksCisJCQkgICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0CQlkaXJfY29udGV4dAljdHg7CisJZXJyY29kZV90CXJldHZhbDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwlyZXR2YWwgPSBleHQyZnNfY2hlY2tfZGlyZWN0b3J5KGZzLCBkaXIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwljdHguZGlyID0gZGlyOworCWN0eC5mbGFncyA9IGZsYWdzOworCWlmIChibG9ja19idWYpCisJCWN0eC5idWYgPSBibG9ja19idWY7CisJZWxzZSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZjdHguYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCWN0eC5mdW5jID0gZnVuYzsKKwljdHgucHJpdl9kYXRhID0gcHJpdl9kYXRhOworCWN0eC5lcnJjb2RlID0gMDsKKwlyZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIGRpciwgQkxPQ0tfRkxBR19SRUFEX09OTFksIDAsCisJCQkJICAgICAgIGV4dDJmc19wcm9jZXNzX2Rpcl9ibG9jaywgJmN0eCk7CisJaWYgKCFibG9ja19idWYpCisJCWV4dDJmc19mcmVlX21lbSgmY3R4LmJ1Zik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gY3R4LmVycmNvZGU7Cit9CisKK3N0cnVjdCB4bGF0ZSB7CisJaW50ICgqZnVuYykoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCSAgICBpbnQJCW9mZnNldCwKKwkJICAgIGludAkJYmxvY2tzaXplLAorCQkgICAgY2hhcgkqYnVmLAorCQkgICAgdm9pZAkqcHJpdl9kYXRhKTsKKwl2b2lkICpyZWFsX3ByaXZhdGU7Cit9OworCitzdGF0aWMgaW50IHhsYXRlX2Z1bmMoZXh0Ml9pbm9fdCBkaXIgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICBpbnQgZW50cnkgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwgaW50IG9mZnNldCwKKwkJICAgICAgaW50IGJsb2Nrc2l6ZSwgY2hhciAqYnVmLCB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHhsYXRlICp4bCA9IChzdHJ1Y3QgeGxhdGUgKikgcHJpdl9kYXRhOworCisJcmV0dXJuICgqeGwtPmZ1bmMpKGRpcmVudCwgb2Zmc2V0LCBibG9ja3NpemUsIGJ1ZiwgeGwtPnJlYWxfcHJpdmF0ZSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZGlyX2l0ZXJhdGUoZXh0Ml9maWxzeXMgZnMsCisJCQkgICAgIGV4dDJfaW5vX3QgZGlyLAorCQkJICAgICBpbnQgZmxhZ3MsCisJCQkgICAgIGNoYXIgKmJsb2NrX2J1ZiwKKwkJCSAgICAgaW50ICgqZnVuYykoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCQkJCSBpbnQJb2Zmc2V0LAorCQkJCQkgaW50CWJsb2Nrc2l6ZSwKKwkJCQkJIGNoYXIJKmJ1ZiwKKwkJCQkJIHZvaWQJKnByaXZfZGF0YSksCisJCQkgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgeGxhdGUgeGw7CisKKwl4bC5yZWFsX3ByaXZhdGUgPSBwcml2X2RhdGE7CisJeGwuZnVuYyA9IGZ1bmM7CisKKwlyZXR1cm4gZXh0MmZzX2Rpcl9pdGVyYXRlMihmcywgZGlyLCBmbGFncywgYmxvY2tfYnVmLAorCQkJCSAgIHhsYXRlX2Z1bmMsICZ4bCk7Cit9CisKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBpcyBwcml2YXRlIHRvIHRoaXMgbW9kdWxlLiAgVXNlZCBieQorICogZXh0MmZzX2Rpcl9pdGVyYXRlKCkgYW5kIGV4dDJmc19kYmxpc3RfZGlyX2l0ZXJhdGUoKQorICovCitpbnQgZXh0MmZzX3Byb2Nlc3NfZGlyX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgICBibGs2NF90CSpibG9ja25yLAorCQkJICAgICBlMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJCSAgICAgYmxrNjRfdAlyZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICBpbnQJcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgIHZvaWQJKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCA9IChzdHJ1Y3QgZGlyX2NvbnRleHQgKikgcHJpdl9kYXRhOworCXVuc2lnbmVkIGludAlvZmZzZXQgPSAwOworCXVuc2lnbmVkIGludAluZXh0X3JlYWxfZW50cnkgPSAwOworCWludAkJcmV0ID0gMDsKKwlpbnQJCWNoYW5nZWQgPSAwOworCWludAkJZG9fYWJvcnQgPSAwOworCXVuc2lnbmVkIGludAlyZWNfbGVuLCBzaXplOworCWludAkJZW50cnk7CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQ7CisKKwlpZiAoYmxvY2tjbnQgPCAwKQorCQlyZXR1cm4gMDsKKworCWVudHJ5ID0gYmxvY2tjbnQgPyBESVJFTlRfT1RIRVJfRklMRSA6IERJUkVOVF9ET1RfRklMRTsKKworCWN0eC0+ZXJyY29kZSA9IGV4dDJmc19yZWFkX2Rpcl9ibG9jazMoZnMsICpibG9ja25yLCBjdHgtPmJ1ZiwgMCk7CisJaWYgKGN0eC0+ZXJyY29kZSkKKwkJcmV0dXJuIEJMT0NLX0FCT1JUOworCisJd2hpbGUgKG9mZnNldCA8IGZzLT5ibG9ja3NpemUgLSA4KSB7CisJCWRpcmVudCA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikgKGN0eC0+YnVmICsgb2Zmc2V0KTsKKwkJaWYgKGV4dDJmc19nZXRfcmVjX2xlbihmcywgZGlyZW50LCAmcmVjX2xlbikpCisJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCWlmICgoKG9mZnNldCArIHJlY19sZW4pID4gZnMtPmJsb2Nrc2l6ZSkgfHwKKwkJICAgIChyZWNfbGVuIDwgOCkgfHwKKwkJICAgICgocmVjX2xlbiAlIDQpICE9IDApIHx8CisJCSAgICAoKCgodW5zaWduZWQpIGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSs4KSA+IHJlY19sZW4pKSB7CisJCQljdHgtPmVycmNvZGUgPSBFWFQyX0VUX0RJUl9DT1JSVVBURUQ7CisJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCX0KKwkJaWYgKCFkaXJlbnQtPmlub2RlICYmCisJCSAgICAhKGN0eC0+ZmxhZ3MgJiBESVJFTlRfRkxBR19JTkNMVURFX0VNUFRZKSkKKwkJCWdvdG8gbmV4dDsKKworCQlyZXQgPSAoY3R4LT5mdW5jKShjdHgtPmRpciwKKwkJCQkgIChuZXh0X3JlYWxfZW50cnkgPiBvZmZzZXQpID8KKwkJCQkgIERJUkVOVF9ERUxFVEVEX0ZJTEUgOiBlbnRyeSwKKwkJCQkgIGRpcmVudCwgb2Zmc2V0LAorCQkJCSAgZnMtPmJsb2Nrc2l6ZSwgY3R4LT5idWYsCisJCQkJICBjdHgtPnByaXZfZGF0YSk7CisJCWlmIChlbnRyeSA8IERJUkVOVF9PVEhFUl9GSUxFKQorCQkJZW50cnkrKzsKKworCQlpZiAocmV0ICYgRElSRU5UX0NIQU5HRUQpIHsKKwkJCWlmIChleHQyZnNfZ2V0X3JlY19sZW4oZnMsIGRpcmVudCwgJnJlY19sZW4pKQorCQkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJCWNoYW5nZWQrKzsKKwkJfQorCQlpZiAocmV0ICYgRElSRU5UX0FCT1JUKSB7CisJCQlkb19hYm9ydCsrOworCQkJYnJlYWs7CisJCX0KK25leHQ6CisgCQlpZiAobmV4dF9yZWFsX2VudHJ5ID09IG9mZnNldCkKKwkJCW5leHRfcmVhbF9lbnRyeSArPSByZWNfbGVuOworCisgCQlpZiAoY3R4LT5mbGFncyAmIERJUkVOVF9GTEFHX0lOQ0xVREVfUkVNT1ZFRCkgeworCQkJc2l6ZSA9ICgoZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpICsgMTEpICYgfjM7CisKKwkJCWlmIChyZWNfbGVuICE9IHNpemUpICB7CisJCQkJdW5zaWduZWQgaW50IGZpbmFsX29mZnNldDsKKworCQkJCWZpbmFsX29mZnNldCA9IG9mZnNldCArIHJlY19sZW47CisJCQkJb2Zmc2V0ICs9IHNpemU7CisJCQkJd2hpbGUgKG9mZnNldCA8IGZpbmFsX29mZnNldCAmJgorCQkJCSAgICAgICAhZXh0MmZzX3ZhbGlkYXRlX2VudHJ5KGZzLCBjdHgtPmJ1ZiwKKwkJCQkJCQkgICAgICBvZmZzZXQsCisJCQkJCQkJICAgICAgZmluYWxfb2Zmc2V0KSkKKwkJCQkJb2Zmc2V0ICs9IDQ7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJb2Zmc2V0ICs9IHJlY19sZW47CisJfQorCisJaWYgKGNoYW5nZWQpIHsKKwkJY3R4LT5lcnJjb2RlID0gZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazMoZnMsICpibG9ja25yLCBjdHgtPmJ1ZiwKKwkJCQkJCSAgICAgICAwKTsKKwkJaWYgKGN0eC0+ZXJyY29kZSkKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwl9CisJaWYgKGRvX2Fib3J0KQorCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvZGlyYmxvY2suYyBiL2xpYi9leHQyZnMvZGlyYmxvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjNhMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9kaXJibG9jay5jCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogZGlyYmxvY2suYyAtLS0gZGlyZWN0b3J5IGJsb2NrIHJvdXRpbmVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCitlcnJjb2RlX3QgZXh0MmZzX3JlYWRfZGlyX2Jsb2NrMyhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibG9jaywKKwkJCQkgdm9pZCAqYnVmLCBpbnQgZmxhZ3MgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJKnAsICplbmQ7CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQ7CisJdW5zaWduZWQgaW50CW5hbWVfbGVuLCByZWNfbGVuOworCisKKwlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCBibG9jaywgMSwgYnVmKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcCA9IChjaGFyICopIGJ1ZjsKKwllbmQgPSAoY2hhciAqKSBidWYgKyBmcy0+YmxvY2tzaXplOworCXdoaWxlIChwIDwgZW5kLTgpIHsKKwkJZGlyZW50ID0gKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSBwOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCQlkaXJlbnQtPmlub2RlID0gZXh0MmZzX3N3YWIzMihkaXJlbnQtPmlub2RlKTsKKwkJZGlyZW50LT5yZWNfbGVuID0gZXh0MmZzX3N3YWIxNihkaXJlbnQtPnJlY19sZW4pOworCQlkaXJlbnQtPm5hbWVfbGVuID0gZXh0MmZzX3N3YWIxNihkaXJlbnQtPm5hbWVfbGVuKTsKKyNlbmRpZgorCQluYW1lX2xlbiA9IGRpcmVudC0+bmFtZV9sZW47CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJCWlmIChmbGFncyAmIEVYVDJfRElSQkxPQ0tfVjJfU1RSVUNUKQorCQkJZGlyZW50LT5uYW1lX2xlbiA9IGV4dDJmc19zd2FiMTYoZGlyZW50LT5uYW1lX2xlbik7CisjZW5kaWYKKwkJaWYgKChyZXR2YWwgPSBleHQyZnNfZ2V0X3JlY19sZW4oZnMsIGRpcmVudCwgJnJlY19sZW4pKSAhPSAwKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJaWYgKChyZWNfbGVuIDwgOCkgfHwgKHJlY19sZW4gJSA0KSkgeworCQkJcmVjX2xlbiA9IDg7CisJCQlyZXR2YWwgPSBFWFQyX0VUX0RJUl9DT1JSVVBURUQ7CisJCX0gZWxzZSBpZiAoKChuYW1lX2xlbiAmIDB4RkYpICsgOCkgPiByZWNfbGVuKQorCQkJcmV0dmFsID0gRVhUMl9FVF9ESVJfQ09SUlVQVEVEOworCQlwICs9IHJlY19sZW47CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfcmVhZF9kaXJfYmxvY2syKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibG9jaywKKwkJCQkgdm9pZCAqYnVmLCBpbnQgZmxhZ3MgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCXJldHVybiBleHQyZnNfcmVhZF9kaXJfYmxvY2szKGZzLCBibG9jaywgYnVmLCBmbGFncyk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfcmVhZF9kaXJfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsa190IGJsb2NrLAorCQkJCSB2b2lkICpidWYpCit7CisJcmV0dXJuIGV4dDJmc19yZWFkX2Rpcl9ibG9jazMoZnMsIGJsb2NrLCBidWYsIDApOworfQorCisKK2VycmNvZGVfdCBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrMyhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibG9jaywKKwkJCQkgIHZvaWQgKmluYnVmLCBpbnQgZmxhZ3MgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJKnAsICplbmQ7CisJY2hhcgkJKmJ1ZiA9IDA7CisJdW5zaWduZWQgaW50CXJlY19sZW47CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQ7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmYnVmKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCW1lbWNweShidWYsIGluYnVmLCBmcy0+YmxvY2tzaXplKTsKKwlwID0gYnVmOworCWVuZCA9IGJ1ZiArIGZzLT5ibG9ja3NpemU7CisJd2hpbGUgKHAgPCBlbmQpIHsKKwkJZGlyZW50ID0gKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSBwOworCQlpZiAoKHJldHZhbCA9IGV4dDJmc19nZXRfcmVjX2xlbihmcywgZGlyZW50LCAmcmVjX2xlbikpICE9IDApCisJCQlyZXR1cm4gcmV0dmFsOworCQlpZiAoKHJlY19sZW4gPCA4KSB8fAorCQkgICAgKHJlY19sZW4gJSA0KSkgeworCQkJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCQkJcmV0dXJuIChFWFQyX0VUX0RJUl9DT1JSVVBURUQpOworCQl9CisJCXAgKz0gcmVjX2xlbjsKKwkJZGlyZW50LT5pbm9kZSA9IGV4dDJmc19zd2FiMzIoZGlyZW50LT5pbm9kZSk7CisJCWRpcmVudC0+cmVjX2xlbiA9IGV4dDJmc19zd2FiMTYoZGlyZW50LT5yZWNfbGVuKTsKKwkJZGlyZW50LT5uYW1lX2xlbiA9IGV4dDJmc19zd2FiMTYoZGlyZW50LT5uYW1lX2xlbik7CisKKwkJaWYgKGZsYWdzICYgRVhUMl9ESVJCTE9DS19WMl9TVFJVQ1QpCisJCQlkaXJlbnQtPm5hbWVfbGVuID0gZXh0MmZzX3N3YWIxNihkaXJlbnQtPm5hbWVfbGVuKTsKKwl9CisJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIGJsb2NrLCAxLCBidWYpOworCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworI2Vsc2UKKwlyZXR1cm4gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIGJsb2NrLCAxLCAoY2hhciAqKSBpbmJ1Zik7CisjZW5kaWYKK30KKworZXJyY29kZV90IGV4dDJmc193cml0ZV9kaXJfYmxvY2syKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibG9jaywKKwkJCQkgdm9pZCAqaW5idWYsIGludCBmbGFncyBFWFQyRlNfQVRUUigodW51c2VkKSkpCit7CisJcmV0dXJuIGV4dDJmc193cml0ZV9kaXJfYmxvY2szKGZzLCBibG9jaywgaW5idWYsIGZsYWdzKTsKK30KKworZXJyY29kZV90IGV4dDJmc193cml0ZV9kaXJfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsa190IGJsb2NrLAorCQkJCSB2b2lkICppbmJ1ZikKK3sKKwlyZXR1cm4gZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazMoZnMsIGJsb2NrLCBpbmJ1ZiwgMCk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvZGlyaGFzaC5jIGIvbGliL2V4dDJmcy9kaXJoYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhYzk0ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvZGlyaGFzaC5jCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogZGlyaGFzaC5jIC0tIENhbGN1bGF0ZSB0aGUgaGFzaCBvZiBhIGRpcmVjdG9yeSBlbnRyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMSAgRGFuaWVsIFBoaWxsaXBzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworLyoKKyAqIEtleWVkIDMyLWJpdCBoYXNoIGZ1bmN0aW9uIHVzaW5nIFRFQSBpbiBhIERhdmlzLU1leWVyIGZ1bmN0aW9uCisgKiAgIEgwID0gS2V5CisgKiAgIEhpID0gRSBNaShIaS0xKSArIEhpLTEKKyAqCisgKiAoc2VlIEFwcGxpZWQgQ3J5cHRvZ3JhcGh5LCAybmQgZWRpdGlvbiwgcDQ0OCkuCisgKgorICogSmVyZW15IEZpdHpoYXJkaW5nZSA8amVyZW15QHppcC5jb20uYXU+IDE5OTgKKyAqCisgKiBUaGlzIGNvZGUgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwKKyAqLworI2RlZmluZSBERUxUQSAweDlFMzc3OUI5CisKK3N0YXRpYyB2b2lkIFRFQV90cmFuc2Zvcm0oX191MzIgYnVmWzRdLCBfX3UzMiBjb25zdCBpbltdKQoreworCV9fdTMyCXN1bSA9IDA7CisJX191MzIJYjAgPSBidWZbMF0sIGIxID0gYnVmWzFdOworCV9fdTMyCWEgPSBpblswXSwgYiA9IGluWzFdLCBjID0gaW5bMl0sIGQgPSBpblszXTsKKwlpbnQJbiA9IDE2OworCisJZG8geworCQlzdW0gKz0gREVMVEE7CisJCWIwICs9ICgoYjEgPDwgNCkrYSkgXiAoYjErc3VtKSBeICgoYjEgPj4gNSkrYik7CisJCWIxICs9ICgoYjAgPDwgNCkrYykgXiAoYjArc3VtKSBeICgoYjAgPj4gNSkrZCk7CisJfSB3aGlsZSgtLW4pOworCisJYnVmWzBdICs9IGIwOworCWJ1ZlsxXSArPSBiMTsKK30KKworLyogRiwgRyBhbmQgSCBhcmUgYmFzaWMgTUQ0IGZ1bmN0aW9uczogc2VsZWN0aW9uLCBtYWpvcml0eSwgcGFyaXR5ICovCisjZGVmaW5lIEYoeCwgeSwgeikgKCh6KSBeICgoeCkgJiAoKHkpIF4gKHopKSkpCisjZGVmaW5lIEcoeCwgeSwgeikgKCgoeCkgJiAoeSkpICsgKCgoeCkgXiAoeSkpICYgKHopKSkKKyNkZWZpbmUgSCh4LCB5LCB6KSAoKHgpIF4gKHkpIF4gKHopKQorCisvKgorICogVGhlIGdlbmVyaWMgcm91bmQgZnVuY3Rpb24uICBUaGUgYXBwbGljYXRpb24gaXMgc28gc3BlY2lmaWMgdGhhdAorICogd2UgZG9uJ3QgYm90aGVyIHByb3RlY3RpbmcgYWxsIHRoZSBhcmd1bWVudHMgd2l0aCBwYXJlbnMsIGFzIGlzIGdlbmVyYWxseQorICogZ29vZCBtYWNybyBwcmFjdGljZSwgaW4gZmF2b3Igb2YgZXh0cmEgbGVnaWJpbGl0eS4KKyAqIFJvdGF0aW9uIGlzIHNlcGFyYXRlIGZyb20gYWRkaXRpb24gdG8gcHJldmVudCByZWNvbXB1dGF0aW9uCisgKi8KKyNkZWZpbmUgUk9VTkQoZiwgYSwgYiwgYywgZCwgeCwgcykJXAorCShhICs9IGYoYiwgYywgZCkgKyB4LCBhID0gKGEgPDwgcykgfCAoYSA+PiAoMzItcykpKQorI2RlZmluZSBLMSAwCisjZGVmaW5lIEsyIDAxMzI0MDQ3NDYzMVVMCisjZGVmaW5lIEszIDAxNTY2NjM2NTY0MVVMCisKKy8qCisgKiBCYXNpYyBjdXQtZG93biBNRDQgdHJhbnNmb3JtLiAgUmV0dXJucyBvbmx5IDMyIGJpdHMgb2YgcmVzdWx0LgorICovCitzdGF0aWMgdm9pZCBoYWxmTUQ0VHJhbnNmb3JtIChfX3UzMiBidWZbNF0sIF9fdTMyIGNvbnN0IGluW10pCit7CisJX191MzIJYSA9IGJ1ZlswXSwgYiA9IGJ1ZlsxXSwgYyA9IGJ1ZlsyXSwgZCA9IGJ1ZlszXTsKKworCS8qIFJvdW5kIDEgKi8KKwlST1VORChGLCBhLCBiLCBjLCBkLCBpblswXSArIEsxLCAgMyk7CisJUk9VTkQoRiwgZCwgYSwgYiwgYywgaW5bMV0gKyBLMSwgIDcpOworCVJPVU5EKEYsIGMsIGQsIGEsIGIsIGluWzJdICsgSzEsIDExKTsKKwlST1VORChGLCBiLCBjLCBkLCBhLCBpblszXSArIEsxLCAxOSk7CisJUk9VTkQoRiwgYSwgYiwgYywgZCwgaW5bNF0gKyBLMSwgIDMpOworCVJPVU5EKEYsIGQsIGEsIGIsIGMsIGluWzVdICsgSzEsICA3KTsKKwlST1VORChGLCBjLCBkLCBhLCBiLCBpbls2XSArIEsxLCAxMSk7CisJUk9VTkQoRiwgYiwgYywgZCwgYSwgaW5bN10gKyBLMSwgMTkpOworCisJLyogUm91bmQgMiAqLworCVJPVU5EKEcsIGEsIGIsIGMsIGQsIGluWzFdICsgSzIsICAzKTsKKwlST1VORChHLCBkLCBhLCBiLCBjLCBpblszXSArIEsyLCAgNSk7CisJUk9VTkQoRywgYywgZCwgYSwgYiwgaW5bNV0gKyBLMiwgIDkpOworCVJPVU5EKEcsIGIsIGMsIGQsIGEsIGluWzddICsgSzIsIDEzKTsKKwlST1VORChHLCBhLCBiLCBjLCBkLCBpblswXSArIEsyLCAgMyk7CisJUk9VTkQoRywgZCwgYSwgYiwgYywgaW5bMl0gKyBLMiwgIDUpOworCVJPVU5EKEcsIGMsIGQsIGEsIGIsIGluWzRdICsgSzIsICA5KTsKKwlST1VORChHLCBiLCBjLCBkLCBhLCBpbls2XSArIEsyLCAxMyk7CisKKwkvKiBSb3VuZCAzICovCisJUk9VTkQoSCwgYSwgYiwgYywgZCwgaW5bM10gKyBLMywgIDMpOworCVJPVU5EKEgsIGQsIGEsIGIsIGMsIGluWzddICsgSzMsICA5KTsKKwlST1VORChILCBjLCBkLCBhLCBiLCBpblsyXSArIEszLCAxMSk7CisJUk9VTkQoSCwgYiwgYywgZCwgYSwgaW5bNl0gKyBLMywgMTUpOworCVJPVU5EKEgsIGEsIGIsIGMsIGQsIGluWzFdICsgSzMsICAzKTsKKwlST1VORChILCBkLCBhLCBiLCBjLCBpbls1XSArIEszLCAgOSk7CisJUk9VTkQoSCwgYywgZCwgYSwgYiwgaW5bMF0gKyBLMywgMTEpOworCVJPVU5EKEgsIGIsIGMsIGQsIGEsIGluWzRdICsgSzMsIDE1KTsKKworCWJ1ZlswXSArPSBhOworCWJ1ZlsxXSArPSBiOworCWJ1ZlsyXSArPSBjOworCWJ1ZlszXSArPSBkOworfQorCisjdW5kZWYgUk9VTkQKKyN1bmRlZiBGCisjdW5kZWYgRworI3VuZGVmIEgKKyN1bmRlZiBLMQorI3VuZGVmIEsyCisjdW5kZWYgSzMKKworLyogVGhlIG9sZCBsZWdhY3kgaGFzaCAqLworc3RhdGljIGV4dDJfZGlyaGFzaF90IGR4X2hhY2tfaGFzaCAoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJCQkgICAgaW50IHVuc2lnbmVkX2ZsYWcpCit7CisJX191MzIgaGFzaCwgaGFzaDAgPSAweDEyYTNmZTJkLCBoYXNoMSA9IDB4MzdhYmU4Zjk7CisJY29uc3QgdW5zaWduZWQgY2hhciAqdWNwID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbmFtZTsKKwljb25zdCBzaWduZWQgY2hhciAqc2NwID0gKGNvbnN0IHNpZ25lZCBjaGFyICopIG5hbWU7CisJaW50IGM7CisKKwl3aGlsZSAobGVuLS0pIHsKKwkJaWYgKHVuc2lnbmVkX2ZsYWcpCisJCQljID0gKGludCkgKnVjcCsrOworCQllbHNlCisJCQljID0gKGludCkgKnNjcCsrOworCQloYXNoID0gaGFzaDEgKyAoaGFzaDAgXiAoYyAqIDcxNTIzNzMpKTsKKworCQlpZiAoaGFzaCAmIDB4ODAwMDAwMDApIGhhc2ggLT0gMHg3ZmZmZmZmZjsKKwkJaGFzaDEgPSBoYXNoMDsKKwkJaGFzaDAgPSBoYXNoOworCX0KKwlyZXR1cm4gKGhhc2gwIDw8IDEpOworfQorCitzdGF0aWMgdm9pZCBzdHIyaGFzaGJ1Zihjb25zdCBjaGFyICptc2csIGludCBsZW4sIF9fdTMyICpidWYsIGludCBudW0sCisJCQlpbnQgdW5zaWduZWRfZmxhZykKK3sKKwlfX3UzMglwYWQsIHZhbDsKKwlpbnQJaSwgYzsKKwljb25zdCB1bnNpZ25lZCBjaGFyICp1Y3AgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtc2c7CisJY29uc3Qgc2lnbmVkIGNoYXIgKnNjcCA9IChjb25zdCBzaWduZWQgY2hhciAqKSBtc2c7CisKKwlwYWQgPSAoX191MzIpbGVuIHwgKChfX3UzMilsZW4gPDwgOCk7CisJcGFkIHw9IHBhZCA8PCAxNjsKKworCXZhbCA9IHBhZDsKKwlpZiAobGVuID4gbnVtKjQpCisJCWxlbiA9IG51bSAqIDQ7CisJZm9yIChpPTA7IGkgPCBsZW47IGkrKykgeworCQlpZiAoKGkgJSA0KSA9PSAwKQorCQkJdmFsID0gcGFkOworCQlpZiAodW5zaWduZWRfZmxhZykKKwkJCWMgPSAoaW50KSB1Y3BbaV07CisJCWVsc2UKKwkJCWMgPSAoaW50KSBzY3BbaV07CisKKwkJdmFsID0gYyArICh2YWwgPDwgOCk7CisJCWlmICgoaSAlIDQpID09IDMpIHsKKwkJCSpidWYrKyA9IHZhbDsKKwkJCXZhbCA9IHBhZDsKKwkJCW51bS0tOworCQl9CisJfQorCWlmICgtLW51bSA+PSAwKQorCQkqYnVmKysgPSB2YWw7CisJd2hpbGUgKC0tbnVtID49IDApCisJCSpidWYrKyA9IHBhZDsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIGhhc2ggb2YgYSBmaWxlbmFtZS4gIElmIGxlbiBpcyAwIGFuZCBuYW1lIGlzIE5VTEwsIHRoZW4KKyAqIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gdGVzdCB3aGV0aGVyIG9yIG5vdCBhIGhhc2ggdmVyc2lvbiBpcworICogc3VwcG9ydGVkLgorICoKKyAqIFRoZSBzZWVkIGlzIGFuIDQgbG9uZ3dvcmQgKDMyIGJpdHMpICJzZWNyZXQiIHdoaWNoIGNhbiBiZSB1c2VkIHRvCisgKiB1bmlxdWlmeSBhIGhhc2guICBJZiB0aGUgc2VlZCBpcyBhbGwgemVybydzLCB0aGVuIHNvbWUgZGVmYXVsdCBzZWVkCisgKiBtYXkgYmUgdXNlZC4KKyAqCisgKiBBIHBhcnRpY3VsYXIgaGFzaCB2ZXJzaW9uIHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgc2VlZCBpcworICogcmVwcmVzZW50ZWQsIGFuZCB3aGV0aGVyIG9yIG5vdCB0aGUgcmV0dXJuZWQgaGFzaCBpcyAzMiBiaXRzIG9yIDY0CisgKiBiaXRzLiAgMzIgYml0IGhhc2hlcyB3aWxsIHJldHVybiAwIGZvciB0aGUgbWlub3IgaGFzaC4KKyAqLworZXJyY29kZV90IGV4dDJmc19kaXJoYXNoKGludCB2ZXJzaW9uLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAorCQkJIGNvbnN0IF9fdTMyICpzZWVkLAorCQkJIGV4dDJfZGlyaGFzaF90ICpyZXRfaGFzaCwKKwkJCSBleHQyX2Rpcmhhc2hfdCAqcmV0X21pbm9yX2hhc2gpCit7CisJX191MzIJaGFzaDsKKwlfX3UzMgltaW5vcl9oYXNoID0gMDsKKwljb25zdCBjaGFyCSpwOworCWludAkJaTsKKwlfX3UzMiAJCWluWzhdLCBidWZbNF07CisJaW50CQl1bnNpZ25lZF9mbGFnID0gMDsKKworCS8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgc2VlZCBmb3IgdGhlIGhhc2ggY2hlY2tzdW0gZnVuY3Rpb25zICovCisJYnVmWzBdID0gMHg2NzQ1MjMwMTsKKwlidWZbMV0gPSAweGVmY2RhYjg5OworCWJ1ZlsyXSA9IDB4OThiYWRjZmU7CisJYnVmWzNdID0gMHgxMDMyNTQ3NjsKKworCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgc2VlZCBpcyBhbGwgemVybydzICovCisJaWYgKHNlZWQpIHsKKwkJZm9yIChpPTA7IGkgPCA0OyBpKyspIHsKKwkJCWlmIChzZWVkW2ldKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpIDwgNCkKKwkJCW1lbWNweShidWYsIHNlZWQsIHNpemVvZihidWYpKTsKKwl9CisKKwlzd2l0Y2ggKHZlcnNpb24pIHsKKwljYXNlIEVYVDJfSEFTSF9MRUdBQ1lfVU5TSUdORUQ6CisJCXVuc2lnbmVkX2ZsYWcrKzsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIEVYVDJfSEFTSF9MRUdBQ1k6CisJCWhhc2ggPSBkeF9oYWNrX2hhc2gobmFtZSwgbGVuLCB1bnNpZ25lZF9mbGFnKTsKKwkJYnJlYWs7CisJY2FzZSBFWFQyX0hBU0hfSEFMRl9NRDRfVU5TSUdORUQ6CisJCXVuc2lnbmVkX2ZsYWcrKzsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIEVYVDJfSEFTSF9IQUxGX01ENDoKKwkJcCA9IG5hbWU7CisJCXdoaWxlIChsZW4gPiAwKSB7CisJCQlzdHIyaGFzaGJ1ZihwLCBsZW4sIGluLCA4LCB1bnNpZ25lZF9mbGFnKTsKKwkJCWhhbGZNRDRUcmFuc2Zvcm0oYnVmLCBpbik7CisJCQlsZW4gLT0gMzI7CisJCQlwICs9IDMyOworCQl9CisJCW1pbm9yX2hhc2ggPSBidWZbMl07CisJCWhhc2ggPSBidWZbMV07CisJCWJyZWFrOworCWNhc2UgRVhUMl9IQVNIX1RFQV9VTlNJR05FRDoKKwkJdW5zaWduZWRfZmxhZysrOworCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgRVhUMl9IQVNIX1RFQToKKwkJcCA9IG5hbWU7CisJCXdoaWxlIChsZW4gPiAwKSB7CisJCQlzdHIyaGFzaGJ1ZihwLCBsZW4sIGluLCA0LCB1bnNpZ25lZF9mbGFnKTsKKwkJCVRFQV90cmFuc2Zvcm0oYnVmLCBpbik7CisJCQlsZW4gLT0gMTY7CisJCQlwICs9IDE2OworCQl9CisJCWhhc2ggPSBidWZbMF07CisJCW1pbm9yX2hhc2ggPSBidWZbMV07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSpyZXRfaGFzaCA9IDA7CisJCXJldHVybiBFWFQyX0VUX0RJUkhBU0hfVU5TVVBQOworCX0KKwkqcmV0X2hhc2ggPSBoYXNoICYgfjE7CisJaWYgKHJldF9taW5vcl9oYXNoKQorCQkqcmV0X21pbm9yX2hhc2ggPSBtaW5vcl9oYXNoOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9kb3Npby5jIGIvbGliL2V4dDJmcy9kb3Npby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwY2YyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2Rvc2lvLmMKQEAgLTAsMCArMSw0NTkgQEAKKy8qCisgKiBkb3Npby5jIC0tIERpc2sgSS9PIG1vZHVsZSBmb3IgdGhlIGV4dDJmcy9ET1MgbGlicmFyeS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcgTWFyayBIYWJlcnNhY2sKKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGJpb3MuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGlvLmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJfdHlwZXMuaD4KKyNpbmNsdWRlICJ1dGlscy5oIgorI2luY2x1ZGUgImRvc2lvLmgiCisjaW5jbHVkZSAiZXQvY29tX2Vyci5oIgorI2luY2x1ZGUgImV4dDJfZXJyLmgiCisjaW5jbHVkZSAiZXh0MmZzL2lvLmgiCisKKy8qCisgKiBTb21lIGhlbHBlciBtYWNyb3MKKyAqLworI2RlZmluZSBMSU5VWF9FWFQyRlMgICAgICAgMHg4MworI2RlZmluZSBMSU5VWF9TV0FQICAgICAgICAgMHg4MgorI2RlZmluZSBXUklURV9FUlIoX21zZ18pIHdyaXRlKDIsIF9tc2dfLCBzdHJsZW4oX21zZ18pKQorI2RlZmluZSBXUklURV9FUlJfUyhfbXNnXykgd3JpdGUoMiwgX21zZ18sIHNpemVvZihfbXNnXykpCisKKy8qCisgKiBFeHBvcnRlZCB2YXJpYWJsZXMKKyAqLwordW5zaWduZWQgbG9uZyAgICAgICAgX2Rpb19lcnJvcjsKK3Vuc2lnbmVkIGxvbmcgICAgICAgIF9kaW9faHdfZXJyb3I7CisKKy8qCisgKiBBcnJheSBvZiBhbGwgb3BlbmVkIHBhcnRpdGlvbnMKKyAqLworc3RhdGljIFBBUlRJVElPTiAgICAgICAgKipwYXJ0aXRpb25zID0gTlVMTDsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCAgIG5wYXJ0ID0gMDsgLyogTnVtYmVyIG9mIG1hcHBlZCBwYXJ0aXRpb25zICovCitzdGF0aWMgUEFSVElUSU9OICAgICAgICAqYWN0aXZlID0gTlVMTDsKKworLyoKKyAqIEkvTyBNYW5hZ2VyIHJvdXRpbmUgcHJvdG90eXBlcworICovCitzdGF0aWMgZXJyY29kZV90IGRvc19vcGVuKGNvbnN0IGNoYXIgKmRldiwgaW50IGZsYWdzLCBpb19jaGFubmVsICpjaGFubmVsKTsKK3N0YXRpYyBlcnJjb2RlX3QgZG9zX2Nsb3NlKGlvX2NoYW5uZWwgY2hhbm5lbCk7CitzdGF0aWMgZXJyY29kZV90IGRvc19zZXRfYmxrc2l6ZShpb19jaGFubmVsIGNoYW5uZWwsIGludCBibGtzaXplKTsKK3N0YXRpYyBlcnJjb2RlX3QgZG9zX3JlYWRfYmxrKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgdm9pZCAqYnVmKTsKK3N0YXRpYyBlcnJjb2RlX3QgZG9zX3dyaXRlX2Jsayhpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBjb25zdCB2b2lkICpidWYpOworc3RhdGljIGVycmNvZGVfdCBkb3NfZmx1c2goaW9fY2hhbm5lbCBjaGFubmVsKTsKKworc3RhdGljIHN0cnVjdCBzdHJ1Y3RfaW9fbWFuYWdlciBzdHJ1Y3RfZG9zX21hbmFnZXIgPSB7CisJLm1hZ2ljCQk9IEVYVDJfRVRfTUFHSUNfSU9fTUFOQUdFUiwKKwkubmFtZQkJPSAiRE9TIEkvTyBNYW5hZ2VyIiwKKwkub3BlbgkJPSBkb3Nfb3BlbiwKKwkuY2xvc2UJCT0gZG9zX2Nsb3NlLAorCS5zZXRfYmxrc2l6ZQk9IGRvc19zZXRfYmxrc2l6ZSwKKwkucmVhZF9ibGsJPSBkb3NfcmVhZF9ibGssCisJLndyaXRlX2Jsawk9IGRvc193cml0ZV9ibGssCisJLmZsdXNoCQk9IGRvc19mbHVzaAorfTsKKworaW9fbWFuYWdlciBkb3NfaW9fbWFuYWdlciA9ICZzdHJ1Y3RfZG9zX21hbmFnZXI7CisKKy8qCisgKiBNYWNybyB0YWtlbiBmcm9tIHVuaXhfaW8uYworICovCisvKgorICogRm9yIGNoZWNraW5nIHN0cnVjdHVyZSBtYWdpYyBudW1iZXJzLi4uCisgKi8KKworI2RlZmluZSBFWFQyX0NIRUNLX01BR0lDKHN0cnVjdCwgY29kZSkgXAorICAgICAgICAgIGlmICgoc3RydWN0KS0+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+cGh5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocy5oZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hzLmN5bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocy5zZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIDwgNTEyID8gMSA6IHNpemUvNTEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKWJ1Zik7CisKKyAgaWYoIUhXX09LKCkpCisgIHsKKyAgICBfZGlvX2Vycm9yID0gRVJSX0hBUkRXQVJFOworICAgIHJldHVybiBFRkFVTFQ7CisgIH0KKworICByZXR1cm4gMDsKK30KKworI2lmZGVmIF9fVFVSQk9DX18KKyNwcmFnbWEgYXJnc3VzZWQKKyNlbmRpZgorc3RhdGljIGVycmNvZGVfdCBkb3NfZmx1c2goaW9fY2hhbm5lbCBjaGFubmVsKQoreworICAvKgorICAgKiBObyBidWZmZXJzLCBubyBmbHVzaC4uLgorICAgKi8KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2Rvc2lvLmggYi9saWIvZXh0MmZzL2Rvc2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhOGYwMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvZG9zaW8uaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIHYxLjAKKyAqCisgKiBEaXNrIEkvTyBpbmNsdWRlIGZpbGUgZm9yIHRoZSBleHQyZnMvRE9TIGxpYnJhcnkuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk3IE1hcmsgSGFiZXJzYWNrCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWZuZGVmIF9fZGlza2lvX2gKKyNkZWZpbmUgX19kaXNraW9faAorI2lmZGVmIF9fVFVSQk9DX18KKyNpZm5kZWYgX19MQVJHRV9fCisjIGVycm9yICJleHQyZnMvRE9TIGxpYnJhcnkgcmVxdWlyZXMgTEFSR0UgbW9kZWwhIgorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fVFVSQk9DX18KKyNpbmNsdWRlICJtc2Rvcy5oIgorI2VuZGlmCisKKy8qCisgKiBBIGhlbHBlciBzdHJ1Y3R1cmUgdXNlZCBpbiBMQkEgPT4gQ0hTIGNvbnZlcnNpb24KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdW5zaWduZWQgc2hvcnQgICAgICAgY3lsOyAgICAgLyogQ3lsaW5kZXIgKG9yIHRyYWNrKSAqLworICB1bnNpZ25lZCBzaG9ydCAgICAgICBoZWFkOworICB1bnNpZ25lZCBzaG9ydCAgICAgICBzZWN0b3I7CisgIHVuc2lnbmVkIHNob3J0ICAgICAgIG9mZnNldDsgIC8qIE9mZnNldCBvZiBieXRlIHdpdGhpbiB0aGUgc2VjdG9yICovCit9IENIUzsKKworLyoKKyAqIEFsbCBwYXJ0aXRpb24gZGF0YSB3ZSBuZWVkIGlzIGhlcmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgY2hhciAgICAgICAgICAgICAgICAgKmRldjsgIC8qIF9MaW51eF8gZGV2aWNlIG5hbWUgKGxpa2UgIi9kZXYvaGRhMSIpICovCisgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBoeXM7ICAvKiBQaHlzaWNhbCBET1MgZHJpdmUgbnVtYmVyICovCisgIHVuc2lnbmVkIGxvbmcgICAgICAgIHN0YXJ0OyAvKiBMQkEgYWRkcmVzcyBvZiBwYXJ0aXRpb24gc3RhcnQgKi8KKyAgdW5zaWduZWQgbG9uZyAgICAgICAgbGVuOyAgIC8qIGxlbmd0aCBvZiBwYXJ0aXRpb24gaW4gc2VjdG9ycyAqLworICB1bnNpZ25lZCBjaGFyICAgICAgICBwbm87ICAgLyogUGFydGl0aW9uIG51bWJlciAocmVhZCBmcm9tICpkZXYpICovCisKKyAgLyogVGhpcyBwYXJ0aXRpb24ncyBkcml2ZSBnZW9tZXRyeSAqLworICB1bnNpZ25lZCBzaG9ydCAgICAgICBjeWxzOworICB1bnNpZ25lZCBzaG9ydCAgICAgICBoZWFkczsKKyAgdW5zaWduZWQgc2hvcnQgICAgICAgc2VjdHM7Cit9IFBBUlRJVElPTjsKKworLyoKKyAqIFBDIHBhcnRpdGlvbiB0YWJsZSBlbnRyeSBmb3JtYXQKKyAqLworI2lmZGVmIF9fREpHUFBfXworI3ByYWdtYSBwYWNrKDEpCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0Cit7CisgIHVuc2lnbmVkIGNoYXIgICAgICAgIGFjdGl2ZTsKKyAgdW5zaWduZWQgY2hhciAgICAgICAgc3RhcnRfaGVhZDsKKyAgdW5zaWduZWQgY2hhciAgICAgICAgc3RhcnRfc2VjOworICB1bnNpZ25lZCBjaGFyICAgICAgICBzdGFydF9jeWw7CisgIHVuc2lnbmVkIGNoYXIgICAgICAgIHR5cGU7CisgIHVuc2lnbmVkIGNoYXIgICAgICAgIGVuZF9oZWFkOworICB1bnNpZ25lZCBjaGFyICAgICAgICBlbmRfc2VjOworICB1bnNpZ25lZCBjaGFyICAgICAgICBlbmRfY3lsOworICB1bnNpZ25lZCBsb25nICAgICAgICBmaXJzdF9zZWNfcmVsOworICB1bnNpZ25lZCBsb25nICAgICAgICBzaXplOworfSBQVEFCTEVfRU5UUlk7CisjaWZkZWYgX19ESkdQUF9fCisjcHJhZ21hIHBhY2soKQorI2VuZGlmCisKKy8qCisgKiBJTlQgMHgxMyBvcGVyYXRpb24gY29kZXMKKyAqLworI2RlZmluZSBESVNLX1JFQUQgICAgICAgICAgMHgwMgorI2RlZmluZSBESVNLX1dSSVRFICAgICAgICAgMHgwMworI2RlZmluZSBESVNLX0dFVF9HRU9NRVRSWSAgMHgwOAorI2RlZmluZSBESVNLX1JFQURZICAgICAgICAgMHgxMAorCisvKgorICogRXJyb3JzIHRvIHB1dCBpbiBfZGlvX2Vycm9yCisgKi8KKyNkZWZpbmUgRVJSX0JBRERFViAgICAgICAgIDB4MDAwMDAwMDFMCisjZGVmaW5lIEVSUl9IQVJEV0FSRSAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBFUlJfTk9UU1VQUCAgICAgICAgMHgwMDAwMDAwM0wKKyNkZWZpbmUgRVJSX05PVEVYVDJGUyAgICAgIDB4MDAwMDAwMDRMCisjZGVmaW5lIEVSUl9FTVBUWVBBUlQgICAgICAweDAwMDAwMDA1TAorI2RlZmluZSBFUlJfTElOVVhTV0FQICAgICAgMHgwMDAwMDAwNkwKKworLyoKKyAqIEZ1bmN0aW9ucyBpbiBkaXNraW8uYworICovCisKKy8qCisgKiBWYXJpYWJsZSBjb250YWlucyBsYXN0IG1vZHVsZSdzIGVycm9yCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nICAgICAgICBfZGlvX2Vycm9yOworCisvKgorICogVGhpcyBvbmUgY29udGFpbnMgbGFzdCBoYXJkd2FyZSBlcnJvciAoaWYgX2Rpb19lcnJvciA9PSBFUlJfSEFSRFdBUkUpCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nICAgICAgICBfZGlvX2h3X2Vycm9yOworCisvKgorICogTWFjcm9zIHRvIGNoZWNrIGZvciBkaXNrIGhhcmR3YXJlIGVycm9ycworICovCisjZGVmaW5lIEhXX09LKCkgICAgICAgICAgICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHgwMCkKKyNkZWZpbmUgSFdfQkFEX0NNRCgpICAgICAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweDAxKQorI2RlZmluZSBIV19OT19BRERSX01BUksoKSAgICgodW5zaWduZWQgY2hhcilfZGlvX2h3X2Vycm9yID09IDB4MDIpCisjZGVmaW5lIEhXX1dSSVRFX1BST1QoKSAgICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHgwMykKKyNkZWZpbmUgSFdfTk9fU0VDVE9SKCkgICAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweDA0KQorI2RlZmluZSBIV19SRVNFVF9GQUlMKCkgICAgICgodW5zaWduZWQgY2hhcilfZGlvX2h3X2Vycm9yID09IDB4MDUpCisjZGVmaW5lIEhXX0RJU0tfQ0hBTkdFRCgpICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHgwNikKKyNkZWZpbmUgSFdfRFJJVkVfRkFJTCgpICAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweDA3KQorI2RlZmluZSBIV19ETUFfT1ZFUlJVTigpICAgICgodW5zaWduZWQgY2hhcilfZGlvX2h3X2Vycm9yID09IDB4MDgpCisjZGVmaW5lIEhXX0RNQV9CT1VOREFSWSgpICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHgwOSkKKyNkZWZpbmUgSFdfQkFEX1NFQ1RPUigpICAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweDBBKQorI2RlZmluZSBIV19CQURfVFJBQ0soKSAgICAgICgodW5zaWduZWQgY2hhcilfZGlvX2h3X2Vycm9yID09IDB4MEIpCisjZGVmaW5lIEhXX1VOU1VQUF9UUkFDSygpICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHgwQykKKyNkZWZpbmUgSFdfQkFEX0NSQ19FQ0MoKSAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweDEwKQorI2RlZmluZSBIV19DUkNfRUNDX0NPUlIoKSAgICgodW5zaWduZWQgY2hhcilfZGlvX2h3X2Vycm9yID09IDB4MTEpCisjZGVmaW5lIEhXX0NPTlRSX0ZBSUwoKSAgICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHgyMCkKKyNkZWZpbmUgSFdfU0VFS19GQUlMKCkgICAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweDQwKQorI2RlZmluZSBIV19BVFRBQ0hfRkFJTCgpICAgICgodW5zaWduZWQgY2hhcilfZGlvX2h3X2Vycm9yID09IDB4ODApCisjZGVmaW5lIEhXX0RSSVZFX05SRUFEWSgpICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHhBQSkKKyNkZWZpbmUgSFdfVU5ERUZfRVJST1IoKSAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweEJCKQorI2RlZmluZSBIV19XUklURV9GQVVMVCgpICAgICgodW5zaWduZWQgY2hhcilfZGlvX2h3X2Vycm9yID09IDB4Q0MpCisjZGVmaW5lIEhXX1NUQVRVU19FUlJPUigpICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHhFMCkKKyNkZWZpbmUgSFdfU0VOU0VfRkFJTCgpICAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweEZGKQorCisKKy8qCisgKiBPcGVuIHRoZSBzcGVjaWZpZWQgcGFydGl0aW9uLgorICogU3RyaW5nICdkZXYnIG11c3QgaGF2ZSBhIGZvcm1hdDoKKyAqCisgKiAgL2Rldi97c2R8aGR8ZmR9W1hdCisgKgorICogd2hlcmUsCisgKgorICogIG9ubHkgb25lIG9mIHRoZSBvcHRpb24gaW4gY3VybHkgYnJhY2VzIGNhbiBiZSB1c2VkIGFuZCBYIGlzIGFuIG9wdGlvbmFsCisgKiAgcGFydGl0aW9uIG51bWJlciBmb3IgdGhlIGdpdmVuIGRldmljZS4gSWYgWCBpcyBub3Qgc3BlY2lmaWVkLCBmdW5jdGlvbgorICogIHNjYW5zIHRoZSBkcml2ZSdzIHBhcnRpdGlvbiB0YWJsZSBpbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBMaW51eCBleHQyZnMKKyAqICBwYXJ0aXRpb24gKHNpZ25hdHVyZSAweDgzKS4gQWxvbmcgdGhlIHdheSBpdCBkaXZlcyBpbnRvIGV2ZXJ5IGV4dGVuZGVkCisgKiAgcGFydGl0aW9uIGVuY291bnRlcmVkLgorICogIFNjYW4gZW5kcyBpZiBlaXRoZXIgKGEpIHRoZXJlIGFyZSBubyBtb3JlIHVzZWQgcGFydGl0aW9uIGVudHJpZXMsIG9yCisgKiAgKGIpIHRoZXJlIGlzIG5vIFh0aCBwYXJ0aXRpb24uCisgKgorICogUm91dGluZSByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgIT0wIG90aGVyd2lzZS4KKyAqLworaW50IG9wZW5fcGFydGl0aW9uKGNoYXIgKmRldik7CisKKyNlbmRpZiAvKiBfX2Rpc2tpb19oICovCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2R1cGZzLmMgYi9saWIvZXh0MmZzL2R1cGZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3MjFlMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvZHVwZnMuYwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIGR1cGZzLmMgLS0tIGR1cGxpY2F0ZSBhIGV4dDIgZmlsZXN5c3RlbSBoYW5kbGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDIwMDEsIDIwMDMsIDIwMDUgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnNQLmgiCisKK2VycmNvZGVfdCBleHQyZnNfZHVwX2hhbmRsZShleHQyX2ZpbHN5cyBzcmMsIGV4dDJfZmlsc3lzICpkZXN0KQoreworCWV4dDJfZmlsc3lzCWZzOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlFWFQyX0NIRUNLX01BR0lDKHNyYywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3Qgc3RydWN0X2V4dDJfZmlsc3lzKSwgJmZzKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJKmZzID0gKnNyYzsKKwlmcy0+ZGV2aWNlX25hbWUgPSAwOworCWZzLT5zdXBlciA9IDA7CisJZnMtPm9yaWdfc3VwZXIgPSAwOworCWZzLT5ncm91cF9kZXNjID0gMDsKKwlmcy0+aW5vZGVfbWFwID0gMDsKKwlmcy0+YmxvY2tfbWFwID0gMDsKKwlmcy0+YmFkYmxvY2tzID0gMDsKKwlmcy0+ZGJsaXN0ID0gMDsKKwlmcy0+bW1wX2J1ZiA9IDA7CisJZnMtPm1tcF9jbXAgPSAwOworCWZzLT5tbXBfZmQgPSAtMTsKKworCWlvX2NoYW5uZWxfYnVtcGNvdW50KGZzLT5pbyk7CisJaWYgKGZzLT5pY2FjaGUpCisJCWZzLT5pY2FjaGUtPnJlZmNvdW50Kys7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzdHJsZW4oc3JjLT5kZXZpY2VfbmFtZSkrMSwgJmZzLT5kZXZpY2VfbmFtZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJc3RyY3B5KGZzLT5kZXZpY2VfbmFtZSwgc3JjLT5kZXZpY2VfbmFtZSk7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShTVVBFUkJMT0NLX1NJWkUsICZmcy0+c3VwZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCW1lbWNweShmcy0+c3VwZXIsIHNyYy0+c3VwZXIsIFNVUEVSQkxPQ0tfU0laRSk7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShTVVBFUkJMT0NLX1NJWkUsICZmcy0+b3JpZ19zdXBlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJbWVtY3B5KGZzLT5vcmlnX3N1cGVyLCBzcmMtPm9yaWdfc3VwZXIsIFNVUEVSQkxPQ0tfU0laRSk7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KGZzLT5kZXNjX2Jsb2NrcywgZnMtPmJsb2Nrc2l6ZSwKKwkJCQkmZnMtPmdyb3VwX2Rlc2MpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCW1lbWNweShmcy0+Z3JvdXBfZGVzYywgc3JjLT5ncm91cF9kZXNjLAorCSAgICAgICAoc2l6ZV90KSBmcy0+ZGVzY19ibG9ja3MgKiBmcy0+YmxvY2tzaXplKTsKKworCWlmIChzcmMtPmlub2RlX21hcCkgeworCQlyZXR2YWwgPSBleHQyZnNfY29weV9iaXRtYXAoc3JjLT5pbm9kZV9tYXAsICZmcy0+aW5vZGVfbWFwKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCX0KKwlpZiAoc3JjLT5ibG9ja19tYXApIHsKKwkJcmV0dmFsID0gZXh0MmZzX2NvcHlfYml0bWFwKHNyYy0+YmxvY2tfbWFwLCAmZnMtPmJsb2NrX21hcCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwl9CisJaWYgKHNyYy0+YmFkYmxvY2tzKSB7CisJCXJldHZhbCA9IGV4dDJmc19iYWRibG9ja3NfY29weShzcmMtPmJhZGJsb2NrcywgJmZzLT5iYWRibG9ja3MpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJfQorCWlmIChzcmMtPmRibGlzdCkgeworCQlyZXR2YWwgPSBleHQyZnNfY29weV9kYmxpc3Qoc3JjLT5kYmxpc3QsICZmcy0+ZGJsaXN0KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCX0KKwlpZiAoc3JjLT5tbXBfYnVmKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNyYy0+YmxvY2tzaXplLCAmZnMtPm1tcF9idWYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJCW1lbWNweShmcy0+bW1wX2J1Ziwgc3JjLT5tbXBfYnVmLCBzcmMtPmJsb2Nrc2l6ZSk7CisJfQorCWlmIChzcmMtPm1tcF9mZCA+PSAwKSB7CisJCWZzLT5tbXBfZmQgPSBkdXAoc3JjLT5tbXBfZmQpOworCQlpZiAoZnMtPm1tcF9mZCA8IDApIHsKKwkJCXJldHZhbCA9IEVYVDJfRVRfTU1QX09QRU5fRElSRUNUOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwl9CisJaWYgKHNyYy0+bW1wX2NtcCkgeworCQlpbnQgYWxpZ24gPSBleHQyZnNfZ2V0X2Rpb19hbGlnbm1lbnQoc3JjLT5tbXBfZmQpOworCisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtYWxpZ24oc3JjLT5ibG9ja3NpemUsIGFsaWduLAorCQkJCQkgICAgICZmcy0+bW1wX2NtcCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwkJbWVtY3B5KGZzLT5tbXBfY21wLCBzcmMtPm1tcF9jbXAsIHNyYy0+YmxvY2tzaXplKTsKKwl9CisJKmRlc3QgPSBmczsKKwlyZXR1cm4gMDsKK2Vycm91dDoKKwlleHQyZnNfZnJlZShmcyk7CisJcmV0dXJuIHJldHZhbDsKKworfQorCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2UyaW1hZ2UuaCBiL2xpYi9leHQyZnMvZTJpbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYjIwY2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2UyaW1hZ2UuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogZTJpbWFnZS5oIC0tLSBoZWFkZXIgZmlsZSBkZXNjcmliaW5nIHRoZSBleHQyIGltYWdlIGZvcm1hdAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBUaGVvZG9yZSBUcydvLgorICoKKyAqIE5vdGU6IHRoaXMgdXNlcyB0aGUgUE9TSVggSU8gaW50ZXJmYWNlcywgdW5saWtlIG1vc3Qgb2YgdGhlIG90aGVyCisgKiBmdW5jdGlvbnMgaW4gdGhpcyBsaWJyYXJ5LiAgU28gc3VlIG1lLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworc3RydWN0IGV4dDJfaW1hZ2VfaGRyIHsKKwlfX3UzMgltYWdpY19udW1iZXI7CS8qIFRoaXMgbXVzdCBiZSBFWFQyX0VUX01BR0lDX0UySU1BR0UgKi8KKwljaGFyCW1hZ2ljX2Rlc2NyaXB0b3JbMTZdOyAvKiAiRXh0MiBJbWFnZSAxLjAiLCB3LyBudWxsIHBhZGRpbmcgKi8KKwljaGFyCWZzX2hvc3RuYW1lWzY0XTsvKiBIb3N0bmFtZSBvZiBtYWNoaW5lIG9mIGltYWdlICovCisJY2hhcglmc19uZXRhZGRyWzMyXTsJLyogTmV0d29yayBhZGRyZXNzICovCisJX191MzIJZnNfbmV0YWRkcl90eXBlOy8qIDAgPSBJUFY0LCAxID0gSVBWNiwgZXRjLiAqLworCV9fdTMyCWZzX2RldmljZTsJLyogRGV2aWNlIG51bWJlciBvZiBpbWFnZSAqLworCWNoYXIJZnNfZGV2aWNlX25hbWVbNjRdOyAvKiBEZXZpY2UgbmFtZSAqLworCWNoYXIJZnNfdXVpZFsxNl07CS8qIFVVSUQgb2YgZmlsZXN5c3RlbSAqLworCV9fdTMyCWZzX2Jsb2Nrc2l6ZTsJLyogQmxvY2sgc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbSAqLworCV9fdTMyCWZzX3Jlc2VydmVkWzhdOworCisJX191MzIJaW1hZ2VfZGV2aWNlOwkvKiBEZXZpY2UgbnVtYmVyIG9mIGltYWdlIGZpbGUgKi8KKwlfX3UzMglpbWFnZV9pbm9kZTsJLyogSW5vZGUgbnVtYmVyIG9mIGltYWdlIGZpbGUgKi8KKwlfX3UzMglpbWFnZV90aW1lOwkvKiBUaW1lIG9mIGltYWdlIGNyZWF0aW9uICovCisJX191MzIJaW1hZ2VfcmVzZXJ2ZWRbOF07CisKKwlfX3UzMglvZmZzZXRfc3VwZXI7CS8qIEJ5dGUgb2Zmc2V0IG9mIHRoZSBzYiBhbmQgZGVzY3JpcHRvcnMgKi8KKwlfX3UzMglvZmZzZXRfaW5vZGU7CS8qIEJ5dGUgb2Zmc2V0IG9mIHRoZSBpbm9kZSB0YWJsZSAgKi8KKwlfX3UzMglvZmZzZXRfaW5vZGVtYXA7IC8qIEJ5dGUgb2Zmc2V0IG9mIHRoZSBpbm9kZSBiaXRtYXBzICovCisJX191MzIJb2Zmc2V0X2Jsb2NrbWFwOyAvKiBCeXRlIG9mZnNldCBvZiB0aGUgaW5vZGUgYml0bWFwcyAqLworCV9fdTMyCW9mZnNldF9yZXNlcnZlZFs4XTsKK307CmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2V4cGFuZGRpci5jIGIvbGliL2V4dDJmcy9leHBhbmRkaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTNiODM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9leHBhbmRkaXIuYwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIGV4cGFuZC5jIC0tLSBleHBhbmQgYW4gZXh0MmZzIGRpcmVjdG9yeQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSAgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCitzdHJ1Y3QgZXhwYW5kX2Rpcl9zdHJ1Y3QgeworCWludAkJZG9uZTsKKwlpbnQJCW5ld2Jsb2NrczsKKwlibGs2NF90CQlnb2FsOworCWVycmNvZGVfdAllcnI7Cit9OworCitzdGF0aWMgaW50IGV4cGFuZF9kaXJfcHJvYyhleHQyX2ZpbHN5cwlmcywKKwkJCSAgIGJsazY0X3QJKmJsb2NrbnIsCisJCQkgICBlMl9ibGtjbnRfdAlibG9ja2NudCwKKwkJCSAgIGJsazY0X3QJcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgIGludAkJcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICB2b2lkCQkqcHJpdl9kYXRhKQoreworCXN0cnVjdCBleHBhbmRfZGlyX3N0cnVjdCAqZXMgPSAoc3RydWN0IGV4cGFuZF9kaXJfc3RydWN0ICopIHByaXZfZGF0YTsKKwlibGs2NF90CW5ld19ibGs7CisJY2hhcgkJKmJsb2NrOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAoKmJsb2NrbnIpIHsKKwkJaWYgKGJsb2NrY250ID49IDApCisJCQllcy0+Z29hbCA9ICpibG9ja25yOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGJsb2NrY250ICYmCisJICAgIChFWFQyRlNfQjJDKGZzLCBlcy0+Z29hbCkgPT0gRVhUMkZTX0IyQyhmcywgZXMtPmdvYWwrMSkpKQorCQluZXdfYmxrID0gZXMtPmdvYWwrMTsKKwllbHNlIHsKKwkJZXMtPmdvYWwgJj0gfkVYVDJGU19DTFVTVEVSX01BU0soZnMpOworCQlyZXR2YWwgPSBleHQyZnNfbmV3X2Jsb2NrMihmcywgZXMtPmdvYWwsIDAsICZuZXdfYmxrKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZXMtPmVyciA9IHJldHZhbDsKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJfQorCQllcy0+bmV3YmxvY2tzKys7CisJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIG5ld19ibGssICsxKTsKKwl9CisJaWYgKGJsb2NrY250ID4gMCkgeworCQlyZXR2YWwgPSBleHQyZnNfbmV3X2Rpcl9ibG9jayhmcywgMCwgMCwgJmJsb2NrKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZXMtPmVyciA9IHJldHZhbDsKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJfQorCQllcy0+ZG9uZSA9IDE7CisJCXJldHZhbCA9IGV4dDJmc193cml0ZV9kaXJfYmxvY2soZnMsIG5ld19ibGssIGJsb2NrKTsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmYmxvY2spOworCQlpZiAocmV0dmFsKSB7CisJCQllcy0+ZXJyID0gcmV0dmFsOworCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQl9CisJCW1lbXNldChibG9jaywgMCwgZnMtPmJsb2Nrc2l6ZSk7CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBuZXdfYmxrLCAxLCBibG9jayk7CisJfQorCWlmIChibG9ja2NudCA+PSAwKQorCQllcy0+Z29hbCA9IG5ld19ibGs7CisJaWYgKHJldHZhbCkgeworCQllcy0+ZXJyID0gcmV0dmFsOworCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJfQorCWV4dDJmc19mcmVlX21lbSgmYmxvY2spOworCSpibG9ja25yID0gbmV3X2JsazsKKworCWlmIChlcy0+ZG9uZSkKKwkJcmV0dXJuIChCTE9DS19DSEFOR0VEIHwgQkxPQ0tfQUJPUlQpOworCWVsc2UKKwkJcmV0dXJuIEJMT0NLX0NIQU5HRUQ7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZXhwYW5kX2RpcihleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBkaXIpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgZXhwYW5kX2Rpcl9zdHJ1Y3QgZXM7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJaWYgKCEoZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSkKKwkJcmV0dXJuIEVYVDJfRVRfUk9fRklMU1lTOworCisJaWYgKCFmcy0+YmxvY2tfbWFwKQorCQlyZXR1cm4gRVhUMl9FVF9OT19CTE9DS19CSVRNQVA7CisKKwlyZXR2YWwgPSBleHQyZnNfY2hlY2tfZGlyZWN0b3J5KGZzLCBkaXIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwllcy5kb25lID0gMDsKKwllcy5lcnIgPSAwOworCWVzLmdvYWwgPSAwOworCWVzLm5ld2Jsb2NrcyA9IDA7CisKKwlyZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIGRpciwgQkxPQ0tfRkxBR19BUFBFTkQsCisJCQkJICAgICAgIDAsIGV4cGFuZF9kaXJfcHJvYywgJmVzKTsKKworCWlmIChlcy5lcnIpCisJCXJldHVybiBlcy5lcnI7CisJaWYgKCFlcy5kb25lKQorCQlyZXR1cm4gRVhUMl9FVF9FWFBBTkRfRElSX0VSUjsKKworCS8qCisJICogVXBkYXRlIHRoZSBzaXplIGFuZCBibG9jayBjb3VudCBmaWVsZHMgaW4gdGhlIGlub2RlLgorCSAqLworCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBkaXIsICZpbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlub2RlLmlfc2l6ZSArPSBmcy0+YmxvY2tzaXplOworCWV4dDJmc19pYmxrX2FkZF9ibG9ja3MoZnMsICZpbm9kZSwgZXMubmV3YmxvY2tzKTsKKworCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZShmcywgZGlyLCAmaW5vZGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvZXh0Ml9lcnIuZXQuaW4gYi9saWIvZXh0MmZzL2V4dDJfZXJyLmV0LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ODEyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2V4dDJfZXJyLmV0LmluCkBAIC0wLDAgKzEsNDc5IEBACisjCisjIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiBUaGVvZG9yZSBUcydvLiAgCisjCisjICVCZWdpbi1IZWFkZXIlCisjIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyMgTGljZW5zZS4KKyMgJUVuZC1IZWFkZXIlCisjCisJZXJyb3JfdGFibGUgZXh0MgorCitlYwlFWFQyX0VUX0JBU0UsCisJIkVYVDJGUyBMaWJyYXJ5IHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKworZWMJRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTLAorCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDJfZmlsc3lzIHN0cnVjdHVyZSIKKworZWMJRVhUMl9FVF9NQUdJQ19CQURCTE9DS1NfTElTVCwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBiYWRibG9ja3NfbGlzdCBzdHJ1Y3R1cmUiCisKK2VjCUVYVDJfRVRfTUFHSUNfQkFEQkxPQ0tTX0lURVJBVEUsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorCitlYwlFWFQyX0VUX01BR0lDX0lOT0RFX1NDQU4sCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfc2NhbiBzdHJ1Y3R1cmUiCisKK2VjCUVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19jaGFubmVsIHN0cnVjdHVyZSIKKworZWMJRVhUMl9FVF9NQUdJQ19VTklYX0lPX0NIQU5ORUwsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdW5peCBpb19jaGFubmVsIHN0cnVjdHVyZSIKKworZWMJRVhUMl9FVF9NQUdJQ19JT19NQU5BR0VSLAorCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX21hbmFnZXIgc3RydWN0dXJlIgorCitlYwlFWFQyX0VUX01BR0lDX0JMT0NLX0JJVE1BUCwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBibG9ja19iaXRtYXAgc3RydWN0dXJlIgorCitlYwlFWFQyX0VUX01BR0lDX0lOT0RFX0JJVE1BUCwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9iaXRtYXAgc3RydWN0dXJlIgorCitlYwlFWFQyX0VUX01BR0lDX0dFTkVSSUNfQklUTUFQLAorCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGdlbmVyaWNfYml0bWFwIHN0cnVjdHVyZSIKKworZWMJRVhUMl9FVF9NQUdJQ19URVNUX0lPX0NIQU5ORUwsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdGVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKKworZWMJRVhUMl9FVF9NQUdJQ19EQkxJU1QsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZGlyZWN0b3J5IGJsb2NrIGxpc3Qgc3RydWN0dXJlIgorCitlYwlFWFQyX0VUX01BR0lDX0lDT1VOVCwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpY291bnQgc3RydWN0dXJlIgorCitlYwlFWFQyX0VUX01BR0lDX1BRX0lPX0NIQU5ORUwsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgUG93ZXJxdWVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKKworZWMJRVhUMl9FVF9NQUdJQ19FWFQyX0ZJTEUsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0MiBmaWxlIHN0cnVjdHVyZSIKKworZWMJRVhUMl9FVF9NQUdJQ19FMklNQUdFLAorCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIEV4dDIgSW1hZ2UgSGVhZGVyIgorCitlYwlFWFQyX0VUX01BR0lDX0lOT0RFX0lPX0NIQU5ORUwsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGUgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCisKK2VjCUVYVDJfRVRfTUFHSUNfRVhURU5UX0hBTkRMRSwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBoYW5kbGUiCisKK2VjCUVYVDJfRVRfQkFEX01BR0lDLAorCSJCYWQgbWFnaWMgbnVtYmVyIGluIHN1cGVyLWJsb2NrIgorCitlYwlFWFQyX0VUX1JFVl9UT09fSElHSCwKKwkiRmlsZXN5c3RlbSByZXZpc2lvbiB0b28gaGlnaCIKKworZWMJRVhUMl9FVF9ST19GSUxTWVMsCisJIkF0dGVtcHQgdG8gd3JpdGUgdG8gZmlsZXN5c3RlbSBvcGVuZWQgcmVhZC1vbmx5IgorCitlYwlFWFQyX0VUX0dERVNDX1JFQUQsCisJIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiCisKK2VjCUVYVDJfRVRfR0RFU0NfV1JJVEUsCisJIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIgorCitlYwlFWFQyX0VUX0dERVNDX0JBRF9CTE9DS19NQVAsCisJIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBibG9jayBiaXRtYXAiCisKK2VjCUVYVDJfRVRfR0RFU0NfQkFEX0lOT0RFX01BUCwKKwkiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIGJpdG1hcCIKKworZWMJRVhUMl9FVF9HREVTQ19CQURfSU5PREVfVEFCTEUsCisJIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSB0YWJsZSIKKworZWMJRVhUMl9FVF9JTk9ERV9CSVRNQVBfV1JJVEUsCisJIkNhbid0IHdyaXRlIGFuIGlub2RlIGJpdG1hcCIKKworZWMJRVhUMl9FVF9JTk9ERV9CSVRNQVBfUkVBRCwKKwkiQ2FuJ3QgcmVhZCBhbiBpbm9kZSBiaXRtYXAiCisKK2VjCUVYVDJfRVRfQkxPQ0tfQklUTUFQX1dSSVRFLAorCSJDYW4ndCB3cml0ZSBhIGJsb2NrIGJpdG1hcCIKKworZWMJRVhUMl9FVF9CTE9DS19CSVRNQVBfUkVBRCwKKwkiQ2FuJ3QgcmVhZCBhIGJsb2NrIGJpdG1hcCIKKworZWMJRVhUMl9FVF9JTk9ERV9UQUJMRV9XUklURSwKKwkiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgdGFibGUiCisKK2VjCUVYVDJfRVRfSU5PREVfVEFCTEVfUkVBRCwKKwkiQ2FuJ3QgcmVhZCBhbiBpbm9kZSB0YWJsZSIKKworZWMJRVhUMl9FVF9ORVhUX0lOT0RFX1JFQUQsCisJIkNhbid0IHJlYWQgbmV4dCBpbm9kZSIKKworZWMJRVhUMl9FVF9VTkVYUEVDVEVEX0JMT0NLX1NJWkUsCisJIkZpbGVzeXN0ZW0gaGFzIHVuZXhwZWN0ZWQgYmxvY2sgc2l6ZSIKKworZWMJRVhUMl9FVF9ESVJfQ09SUlVQVEVELAorCSJFWFQyIGRpcmVjdG9yeSBjb3JydXB0ZWQiCisKK2VjCUVYVDJfRVRfU0hPUlRfUkVBRCwKKwkiQXR0ZW1wdCB0byByZWFkIGJsb2NrIGZyb20gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCByZWFkIgorCitlYwlFWFQyX0VUX1NIT1JUX1dSSVRFLAorCSJBdHRlbXB0IHRvIHdyaXRlIGJsb2NrIHRvIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgd3JpdGUiCisKK2VjCUVYVDJfRVRfRElSX05PX1NQQUNFLAorCSJObyBmcmVlIHNwYWNlIGluIHRoZSBkaXJlY3RvcnkiCisKK2VjCUVYVDJfRVRfTk9fSU5PREVfQklUTUFQLAorCSJJbm9kZSBiaXRtYXAgbm90IGxvYWRlZCIKKworZWMJRVhUMl9FVF9OT19CTE9DS19CSVRNQVAsCisJIkJsb2NrIGJpdG1hcCBub3QgbG9hZGVkIgorCitlYwlFWFQyX0VUX0JBRF9JTk9ERV9OVU0sCisJIklsbGVnYWwgaW5vZGUgbnVtYmVyIgorCitlYwlFWFQyX0VUX0JBRF9CTE9DS19OVU0sCisJIklsbGVnYWwgYmxvY2sgbnVtYmVyIgorCitlYwlFWFQyX0VUX0VYUEFORF9ESVJfRVJSLAorCSJJbnRlcm5hbCBlcnJvciBpbiBleHQyZnNfZXhwYW5kX2RpciIKKworZWMJRVhUMl9FVF9UT09TTUFMTCwKKwkiTm90IGVub3VnaCBzcGFjZSB0byBidWlsZCBwcm9wb3NlZCBmaWxlc3lzdGVtIgorCitlYwlFWFQyX0VUX0JBRF9CTE9DS19NQVJLLAorCSJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwIgorCitlYwlFWFQyX0VUX0JBRF9CTE9DS19VTk1BUkssCisJIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKKworZWMJRVhUMl9FVF9CQURfQkxPQ0tfVEVTVCwKKwkiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKKworZWMJRVhUMl9FVF9CQURfSU5PREVfTUFSSywKKwkiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2lub2RlX2JpdG1hcCIKKworZWMJRVhUMl9FVF9CQURfSU5PREVfVU5NQVJLLAorCSJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCisKK2VjCUVYVDJfRVRfQkFEX0lOT0RFX1RFU1QsCisJIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCisKK2VjCUVYVDJfRVRfRlVER0VfQkxPQ0tfQklUTUFQX0VORCwKKwkiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgYmxvY2sgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorCitlYwlFWFQyX0VUX0ZVREdFX0lOT0RFX0JJVE1BUF9FTkQsCisJIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGlub2RlIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKKworZWMJRVhUMl9FVF9CQURfSU5EX0JMT0NLLAorCSJJbGxlZ2FsIGluZGlyZWN0IGJsb2NrIGZvdW5kIiAKKworZWMJRVhUMl9FVF9CQURfRElORF9CTE9DSywKKwkiSWxsZWdhbCBkb3VibHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiIAorCitlYwlFWFQyX0VUX0JBRF9USU5EX0JMT0NLLAorCSJJbGxlZ2FsIHRyaXBseSBpbmRpcmVjdCBibG9jayBmb3VuZCIgCisKK2VjCUVYVDJfRVRfTkVRX0JMT0NLX0JJVE1BUCwKKwkiQmxvY2sgYml0bWFwcyBhcmUgbm90IHRoZSBzYW1lIgorCitlYwlFWFQyX0VUX05FUV9JTk9ERV9CSVRNQVAsCisJIklub2RlIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKKworZWMJRVhUMl9FVF9CQURfREVWSUNFX05BTUUsCisJIklsbGVnYWwgb3IgbWFsZm9ybWVkIGRldmljZSBuYW1lIgorCitlYwlFWFQyX0VUX01JU1NJTkdfSU5PREVfVEFCTEUsCisJIkEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSIKKworZWMJRVhUMl9FVF9DT1JSVVBUX1NVUEVSQkxPQ0ssCisJIlRoZSBleHQyIHN1cGVyYmxvY2sgaXMgY29ycnVwdCIKKworZWMJRVhUMl9FVF9CQURfR0VORVJJQ19NQVJLLAorCSJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAiCisKK2VjCUVYVDJfRVRfQkFEX0dFTkVSSUNfVU5NQVJLLAorCSJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCIKKworZWMJRVhUMl9FVF9CQURfR0VORVJJQ19URVNULAorCSJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCisKK2VjCUVYVDJfRVRfU1lNTElOS19MT09QLAorCSJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZC4iCisKK2VjCUVYVDJfRVRfQ0FMTEJBQ0tfTk9USEFORExFRCwKKwkiVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB0aGlzIGNhc2UiCisKK2VjCUVYVDJfRVRfQkFEX0JMT0NLX0lOX0lOT0RFX1RBQkxFLAorCSJUaGUgaW5vZGUgaXMgZnJvbSBhIGJhZCBibG9jayBpbiB0aGUgaW5vZGUgdGFibGUiCisKK2VjCUVYVDJfRVRfVU5TVVBQX0ZFQVRVUkUsCisJIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocykiCisKK2VjCUVYVDJfRVRfUk9fVU5TVVBQX0ZFQVRVUkUsCisJIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIHJlYWQtb25seSBmZWF0dXJlKHMpIgorCitlYwlFWFQyX0VUX0xMU0VFS19GQUlMRUQsCisJIklPIENoYW5uZWwgZmFpbGVkIHRvIHNlZWsgb24gcmVhZCBvciB3cml0ZSIKKworZWMJRVhUMl9FVF9OT19NRU1PUlksCisJIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKKworZWMJRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5ULAorCSJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkiCisKK2VjCUVYVDJfRVRfQkxPQ0tfQUxMT0NfRkFJTCwKKwkiQ291bGQgbm90IGFsbG9jYXRlIGJsb2NrIGluIGV4dDIgZmlsZXN5c3RlbSIKKworZWMJRVhUMl9FVF9JTk9ERV9BTExPQ19GQUlMLAorCSJDb3VsZCBub3QgYWxsb2NhdGUgaW5vZGUgaW4gZXh0MiBmaWxlc3lzdGVtIgorCitlYwlFWFQyX0VUX05PX0RJUkVDVE9SWSwKKwkiRXh0MiBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkiCisKK2VjCUVYVDJfRVRfVE9PX01BTllfUkVGUywKKwkiVG9vIG1hbnkgcmVmZXJlbmNlcyBpbiB0YWJsZSIKKworZWMJRVhUMl9FVF9GSUxFX05PVF9GT1VORCwKKwkiRmlsZSBub3QgZm91bmQgYnkgZXh0Ml9sb29rdXAiCisKK2VjCUVYVDJfRVRfRklMRV9STywKKwkiRmlsZSBvcGVuIHJlYWQtb25seSIKKworZWMJRVhUMl9FVF9EQl9OT1RfRk9VTkQsCisJIkV4dDIgZGlyZWN0b3J5IGJsb2NrIG5vdCBmb3VuZCIKKworZWMJRVhUMl9FVF9ESVJfRVhJU1RTLAorCSJFeHQyIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyIKKworZWMJRVhUMl9FVF9VTklNUExFTUVOVEVELAorCSJVbmltcGxlbWVudGVkIGV4dDIgbGlicmFyeSBmdW5jdGlvbiIKKworZWMJRVhUMl9FVF9DQU5DRUxfUkVRVUVTVEVELAorCSJVc2VyIGNhbmNlbCByZXF1ZXN0ZWQiCisKK2VjCUVYVDJfRVRfRklMRV9UT09fQklHLAorCSJFeHQyIGZpbGUgdG9vIGJpZyIKKworZWMJRVhUMl9FVF9KT1VSTkFMX05PVF9CTE9DSywKKwkiU3VwcGxpZWQgam91cm5hbCBkZXZpY2Ugbm90IGEgYmxvY2sgZGV2aWNlIgorCitlYwlFWFQyX0VUX05PX0pPVVJOQUxfU0IsCisJIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQiCisKK2VjCUVYVDJfRVRfSk9VUk5BTF9UT09fU01BTEwsCisJIkpvdXJuYWwgbXVzdCBiZSBhdCBsZWFzdCAxMDI0IGJsb2NrcyIKKworZWMJRVhUMl9FVF9KT1VSTkFMX1VOU1VQUF9WRVJTSU9OLAorCSJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iCisKK2VjCUVYVDJfRVRfTE9BRF9FWFRfSk9VUk5BTCwKKwkiRXJyb3IgbG9hZGluZyBleHRlcm5hbCBqb3VybmFsIgorCitlYwlFWFQyX0VUX05PX0pPVVJOQUwsCisJIkpvdXJuYWwgbm90IGZvdW5kIgorCitlYwlFWFQyX0VUX0RJUkhBU0hfVU5TVVBQLAorCSJEaXJlY3RvcnkgaGFzaCB1bnN1cHBvcnRlZCIKKworZWMJRVhUMl9FVF9CQURfRUFfQkxPQ0tfTlVNLAorCSJJbGxlZ2FsIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBudW1iZXIiCisKK2VjCUVYVDJfRVRfVE9PX01BTllfSU5PREVTLAorCSJDYW5ub3QgY3JlYXRlIGZpbGVzeXN0ZW0gd2l0aCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGlub2RlcyIKKworZWMJRVhUMl9FVF9OT1RfSU1BR0VfRklMRSwKKwkiRTJpbWFnZSBzbmFwc2hvdCBub3QgaW4gdXNlIgorCitlYwlFWFQyX0VUX1JFU19HRFRfQkxPQ0tTLAorCSJUb28gbWFueSByZXNlcnZlZCBncm91cCBkZXNjcmlwdG9yIGJsb2NrcyIKKworZWMJRVhUMl9FVF9SRVNJWkVfSU5PREVfQ09SUlVQVCwKKwkiUmVzaXplIGlub2RlIGlzIGNvcnJ1cHQiCisKK2VjCUVYVDJfRVRfU0VUX0JNQVBfTk9fSU5ELAorCSJUcmllZCB0byBzZXQgYmxvY2sgYm1hcCB3aXRoIG1pc3NpbmcgaW5kaXJlY3QgYmxvY2siCisKK2VjCUVYVDJfRVRfVERCX1NVQ0NFU1MsCisJIlREQjogU3VjY2VzcyIKKworZWMJRVhUMl9FVF9UREJfRVJSX0NPUlJVUFQsCisJIlREQjogQ29ycnVwdCBkYXRhYmFzZSIKKworZWMJRVhUMl9FVF9UREJfRVJSX0lPLAorCSJUREI6IElPIEVycm9yIgorCitlYwlFWFQyX0VUX1REQl9FUlJfTE9DSywKKwkiVERCOiBMb2NraW5nIGVycm9yIgorCitlYwlFWFQyX0VUX1REQl9FUlJfT09NLAorCSJUREI6IE91dCBvZiBtZW1vcnkiCisKK2VjCUVYVDJfRVRfVERCX0VSUl9FWElTVFMsCisJIlREQjogUmVjb3JkIGV4aXN0cyIKKworZWMJRVhUMl9FVF9UREJfRVJSX05PTE9DSywKKwkiVERCOiBMb2NrIGV4aXN0cyBvbiBvdGhlciBrZXlzIgorCitlYwlFWFQyX0VUX1REQl9FUlJfRUlOVkFMLAorCSJUREI6IEludmFsaWQgcGFyYW1ldGVyIgorCitlYwlFWFQyX0VUX1REQl9FUlJfTk9FWElTVCwKKwkiVERCOiBSZWNvcmQgZG9lcyBub3QgZXhpc3QiCisKK2VjCUVYVDJfRVRfVERCX0VSUl9SRE9OTFksCisJIlREQjogV3JpdGUgbm90IHBlcm1pdHRlZCIKKworZWMJRVhUMl9FVF9EQkxJU1RfRU1QVFksCisJIkV4dDJmcyBkaXJlY3RvcnkgYmxvY2sgbGlzdCBpcyBlbXB0eSIKKworZWMJRVhUMl9FVF9ST19CTE9DS19JVEVSQVRFLAorCSJBdHRlbXB0IHRvIG1vZGlmeSBhIGJsb2NrIG1hcHBpbmcgdmlhIGEgcmVhZC1vbmx5IGJsb2NrIGl0ZXJhdG9yIgorCitlYwlFWFQyX0VUX01BR0lDX0VYVEVOVF9QQVRILAorCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IHNhdmVkIHBhdGgiCisKK2VjCUVYVDJfRVRfTUFHSUNfR0VORVJJQ19CSVRNQVA2NCwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgZ2VuZXJpYyBiaXRtYXAiCisKK2VjCUVYVDJfRVRfTUFHSUNfQkxPQ0tfQklUTUFQNjQsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGJsb2NrIGJpdG1hcCIKKworZWMJRVhUMl9FVF9NQUdJQ19JTk9ERV9CSVRNQVA2NCwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgaW5vZGUgYml0bWFwIgorCitlYwlFWFQyX0VUX01BR0lDX1JFU0VSVkVEXzEzLAorCSJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzEzIgorCitlYwlFWFQyX0VUX01BR0lDX1JFU0VSVkVEXzE0LAorCSJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE0IgorCitlYwlFWFQyX0VUX01BR0lDX1JFU0VSVkVEXzE1LAorCSJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE1IgorCitlYwlFWFQyX0VUX01BR0lDX1JFU0VSVkVEXzE2LAorCSJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE2IgorCitlYwlFWFQyX0VUX01BR0lDX1JFU0VSVkVEXzE3LAorCSJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE3IgorCitlYwlFWFQyX0VUX01BR0lDX1JFU0VSVkVEXzE4LAorCSJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE4IgorCitlYwlFWFQyX0VUX01BR0lDX1JFU0VSVkVEXzE5LAorCSJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE5IgorCitlYwlFWFQyX0VUX0VYVEVOVF9IRUFERVJfQkFELAorCSJDb3JydXB0IGV4dGVudCBoZWFkZXIiCisKK2VjCUVYVDJfRVRfRVhURU5UX0lOREVYX0JBRCwKKwkiQ29ycnVwdCBleHRlbnQgaW5kZXgiCisKK2VjCUVYVDJfRVRfRVhURU5UX0xFQUZfQkFELAorCSJDb3JydXB0IGV4dGVudCIKKworZWMJRVhUMl9FVF9FWFRFTlRfTk9fU1BBQ0UsCisJIk5vIGZyZWUgc3BhY2UgaW4gZXh0ZW50IG1hcCIKKworZWMJRVhUMl9FVF9JTk9ERV9OT1RfRVhURU5ULAorCSJJbm9kZSBkb2VzIG5vdCB1c2UgZXh0ZW50cyIKKworZWMJRVhUMl9FVF9FWFRFTlRfTk9fTkVYVCwKKwkiTm8gJ25leHQnIGV4dGVudCIKKworZWMJRVhUMl9FVF9FWFRFTlRfTk9fUFJFViwKKwkiTm8gJ3ByZXZpb3VzJyBleHRlbnQiCisKK2VjCUVYVDJfRVRfRVhURU5UX05PX1VQLAorCSJObyAndXAnIGV4dGVudCIKKworZWMJRVhUMl9FVF9FWFRFTlRfTk9fRE9XTiwKKwkiTm8gJ2Rvd24nIGV4dGVudCIKKworZWMJRVhUMl9FVF9OT19DVVJSRU5UX05PREUsCisJIk5vIGN1cnJlbnQgbm9kZSIKKworZWMJRVhUMl9FVF9PUF9OT1RfU1VQUE9SVEVELAorCSJFeHQyZnMgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiCisKK2VjCUVYVDJfRVRfQ0FOVF9JTlNFUlRfRVhURU5ULAorCSJObyByb29tIHRvIGluc2VydCBleHRlbnQgaW4gbm9kZSIKKworZWMJRVhUMl9FVF9DQU5UX1NQTElUX0VYVEVOVCwKKwkiU3BsaXR0aW5nIHdvdWxkIHJlc3VsdCBpbiBlbXB0eSBub2RlIgorCitlYwlFWFQyX0VUX0VYVEVOVF9OT1RfRk9VTkQsCisJIkV4dGVudCBub3QgZm91bmQiCisKK2VjCUVYVDJfRVRfRVhURU5UX05PVF9TVVBQT1JURUQsCisJIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGZvciBpbm9kZXMgY29udGFpbmluZyBleHRlbnRzIgorCitlYwlFWFQyX0VUX0VYVEVOVF9JTlZBTElEX0xFTkdUSCwKKwkiRXh0ZW50IGxlbmd0aCBpcyBpbnZhbGlkIgorCitlYwlFWFQyX0VUX0lPX0NIQU5ORUxfTk9fU1VQUE9SVF82NCwKKwkiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIKKworZWMJRVhUMl9FVF9OT19NVEFCX0ZJTEUsCisJIkNhbid0IGNoZWNrIGlmIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBkdWUgdG8gbWlzc2luZyBtdGFiIGZpbGUiCisKK2VjCUVYVDJfRVRfQ0FOVF9VU0VfTEVHQUNZX0JJVE1BUFMsCisJIkZpbGVzeXN0ZW0gdG9vIGxhcmdlIHRvIHVzZSBsZWdhY3kgYml0bWFwcyIKKworZWMJRVhUMl9FVF9NTVBfTUFHSUNfSU5WQUxJRCwKKwkiTU1QOiBpbnZhbGlkIG1hZ2ljIG51bWJlciIKKworZWMJRVhUMl9FVF9NTVBfRkFJTEVELAorCSJNTVA6IGRldmljZSBjdXJyZW50bHkgYWN0aXZlIgorCitlYwlFWFQyX0VUX01NUF9GU0NLX09OLAorCSJNTVA6IGZzY2sgYmVpbmcgcnVuIgorCitlYwlFWFQyX0VUX01NUF9CQURfQkxPQ0ssCisJIk1NUDogYmxvY2sgbnVtYmVyIGJleW9uZCBmaWxlc3lzdGVtIHJhbmdlIgorCitlYwlFWFQyX0VUX01NUF9VTktOT1dOX1NFUSwKKwkiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorCitlYwlFWFQyX0VUX01NUF9DSEFOR0VfQUJPUlQsCisJIk1NUDogZmlsZXN5c3RlbSBzdGlsbCBpbiB1c2UiCisKK2VjCUVYVDJfRVRfTU1QX09QRU5fRElSRUNULAorCSJNTVA6IG9wZW4gd2l0aCBPX0RJUkVDVCBmYWlsZWQiCisKK2VjCUVYVDJfRVRfQkFEX0RFU0NfU0laRSwKKwkiQmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBzaXplIGluY29ycmVjdCIKKworZWMJRVhUMl9FVF9JTk9ERV9DU1VNX0lOVkFMSUQsCisJIklub2RlIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGlub2RlIgorCitlYwlFWFQyX0VUX0lOT0RFX0JJVE1BUF9DU1VNX0lOVkFMSUQsCisJIklub2RlIGJpdG1hcCBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBiaXRtYXAiCisKK2VjCUVYVDJfRVRfRVhURU5UX0NTVU1fSU5WQUxJRCwKKwkiRXh0ZW50IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGV4dGVudCBibG9jayIKKworZWMJRVhUMl9FVF9ESVJfTk9fU1BBQ0VfRk9SX0NTVU0sCisJIkRpcmVjdG9yeSBibG9jayBkb2VzIG5vdCBoYXZlIHNwYWNlIGZvciBjaGVja3N1bSIKKworZWMJRVhUMl9FVF9ESVJfQ1NVTV9JTlZBTElELAorCSJEaXJlY3RvcnkgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZGlyZWN0b3J5IGJsb2NrIgorCitlYwlFWFQyX0VUX0VYVF9BVFRSX0NTVU1fSU5WQUxJRCwKKwkiRXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGJsb2NrIgorCitlYwlFWFQyX0VUX1NCX0NTVU1fSU5WQUxJRCwKKwkiU3VwZXJibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBzdXBlcmJsb2NrIgorCitlYwlFWFQyX0VUX1VOS05PV05fQ1NVTSwKKwkiVW5rbm93biBjaGVja3N1bSBhbGdvcml0aG0iCisKK2VjCUVYVDJfRVRfTU1QX0NTVU1fSU5WQUxJRCwKKwkiTU1QIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIE1NUCBibG9jayIKKworZWMJRVhUMl9FVF9GSUxFX0VYSVNUUywKKwkiRXh0MiBmaWxlIGFscmVhZHkgZXhpc3RzIgorCisJZW5kCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCBiL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNTQ4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaApAQCAtMCwwICsxLDcxIEBACisvKgorICBGaWxlOiBsaW51eC9leHQyX2V4dF9hdHRyLmgKKworICBPbi1kaXNrIGZvcm1hdCBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciB0aGUgZXh0MiBmaWxlc3lzdGVtLgorCisgIChDKSAyMDAwIEFuZHJlYXMgR3J1ZW5iYWNoZXIsIDxhLmdydWVuYmFjaGVyQGNvbXB1dGVyLm9yZz4KKyovCisKKyNpZm5kZWYgX0VYVDJfRVhUX0FUVFJfSAorI2RlZmluZSBfRVhUMl9FWFRfQVRUUl9ICisvKiBNYWdpYyB2YWx1ZSBpbiBhdHRyaWJ1dGUgYmxvY2tzICovCisjZGVmaW5lIEVYVDJfRVhUX0FUVFJfTUFHSUNfdjEJCTB4RUEwMTAwMDAKKyNkZWZpbmUgRVhUMl9FWFRfQVRUUl9NQUdJQwkJMHhFQTAyMDAwMAorCisvKiBNYXhpbXVtIG51bWJlciBvZiByZWZlcmVuY2VzIHRvIG9uZSBhdHRyaWJ1dGUgYmxvY2sgKi8KKyNkZWZpbmUgRVhUMl9FWFRfQVRUUl9SRUZDT1VOVF9NQVgJMTAyNAorCitzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9oZWFkZXIgeworCV9fdTMyCWhfbWFnaWM7CS8qIG1hZ2ljIG51bWJlciBmb3IgaWRlbnRpZmljYXRpb24gKi8KKwlfX3UzMgloX3JlZmNvdW50OwkvKiByZWZlcmVuY2UgY291bnQgKi8KKwlfX3UzMgloX2Jsb2NrczsJLyogbnVtYmVyIG9mIGRpc2sgYmxvY2tzIHVzZWQgKi8KKwlfX3UzMgloX2hhc2g7CQkvKiBoYXNoIHZhbHVlIG9mIGFsbCBhdHRyaWJ1dGVzICovCisJX191MzIJaF9yZXNlcnZlZFs0XTsJLyogemVybyByaWdodCBub3cgKi8KK307CisKK3N0cnVjdCBleHQyX2V4dF9hdHRyX2VudHJ5IHsKKwlfX3U4CWVfbmFtZV9sZW47CS8qIGxlbmd0aCBvZiBuYW1lICovCisJX191OAllX25hbWVfaW5kZXg7CS8qIGF0dHJpYnV0ZSBuYW1lIGluZGV4ICovCisJX191MTYJZV92YWx1ZV9vZmZzOwkvKiBvZmZzZXQgaW4gZGlzayBibG9jayBvZiB2YWx1ZSAqLworCV9fdTMyCWVfdmFsdWVfYmxvY2s7CS8qIGRpc2sgYmxvY2sgYXR0cmlidXRlIGlzIHN0b3JlZCBvbiAobi9pKSAqLworCV9fdTMyCWVfdmFsdWVfc2l6ZTsJLyogc2l6ZSBvZiBhdHRyaWJ1dGUgdmFsdWUgKi8KKwlfX3UzMgllX2hhc2g7CQkvKiBoYXNoIHZhbHVlIG9mIG5hbWUgYW5kIHZhbHVlICovCisjaWYgMAorCWNoYXIJZV9uYW1lWzBdOwkvKiBhdHRyaWJ1dGUgbmFtZSAqLworI2VuZGlmCit9OworCisjZGVmaW5lIEVYVDJfRVhUX0FUVFJfUEFEX0JJVFMJCTIKKyNkZWZpbmUgRVhUMl9FWFRfQVRUUl9QQUQJCSgodW5zaWduZWQpIDE8PEVYVDJfRVhUX0FUVFJfUEFEX0JJVFMpCisjZGVmaW5lIEVYVDJfRVhUX0FUVFJfUk9VTkQJCShFWFQyX0VYVF9BVFRSX1BBRC0xKQorI2RlZmluZSBFWFQyX0VYVF9BVFRSX0xFTihuYW1lX2xlbikgXAorCSgoKG5hbWVfbGVuKSArIEVYVDJfRVhUX0FUVFJfUk9VTkQgKyBcCisJc2l6ZW9mKHN0cnVjdCBleHQyX2V4dF9hdHRyX2VudHJ5KSkgJiB+RVhUMl9FWFRfQVRUUl9ST1VORCkKKyNkZWZpbmUgRVhUMl9FWFRfQVRUUl9ORVhUKGVudHJ5KSBcCisJKCAoc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkgKikoIFwKKwkgIChjaGFyICopKGVudHJ5KSArIEVYVDJfRVhUX0FUVFJfTEVOKChlbnRyeSktPmVfbmFtZV9sZW4pKSApCisjZGVmaW5lIEVYVDJfRVhUX0FUVFJfU0laRShzaXplKSBcCisJKCgoc2l6ZSkgKyBFWFQyX0VYVF9BVFRSX1JPVU5EKSAmIH5FWFQyX0VYVF9BVFRSX1JPVU5EKQorI2RlZmluZSBFWFQyX0VYVF9JU19MQVNUX0VOVFJZKGVudHJ5KSAoKigoX191MzIgKikoZW50cnkpKSA9PSAwVUwpCisjZGVmaW5lIEVYVDJfRVhUX0FUVFJfTkFNRShlbnRyeSkgXAorCSgoKGNoYXIgKikgKGVudHJ5KSkgKyBzaXplb2Yoc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkpKQorI2RlZmluZSBFWFQyX1hBVFRSX0xFTihuYW1lX2xlbikgXAorCSgoKG5hbWVfbGVuKSArIEVYVDJfRVhUX0FUVFJfUk9VTkQgKyBcCisJc2l6ZW9mKHN0cnVjdCBleHQyX3hhdHRyX2VudHJ5KSkgJiB+RVhUMl9FWFRfQVRUUl9ST1VORCkKKyNkZWZpbmUgRVhUMl9YQVRUUl9TSVpFKHNpemUpIFwKKwkoKChzaXplKSArIEVYVDJfRVhUX0FUVFJfUk9VTkQpICYgfkVYVDJfRVhUX0FUVFJfUk9VTkQpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGlmZGVmIENPTkZJR19FWFQyX0ZTX0VYVF9BVFRSCitleHRlcm4gaW50IGV4dDJfZ2V0X2V4dF9hdHRyKHN0cnVjdCBpbm9kZSAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIGludCBleHQyX3NldF9leHRfYXR0cihzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCwgaW50KTsKK2V4dGVybiB2b2lkIGV4dDJfZXh0X2F0dHJfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2V4dGVybiB2b2lkIGV4dDJfZXh0X2F0dHJfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworZXh0ZXJuIGludCBleHQyX2V4dF9hdHRyX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBleHQyX2V4dF9hdHRyX2RvbmUodm9pZCk7CisjIGVsc2UKKyMgIGRlZmluZSBleHQyX2dldF9leHRfYXR0ciBOVUxMCisjICBkZWZpbmUgZXh0Ml9zZXRfZXh0X2F0dHIgTlVMTAorIyBlbmRpZgorI2VuZGlmICAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgIC8qIF9FWFQyX0VYVF9BVFRSX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvZXh0Ml9mcy5oIGIvbGliL2V4dDJmcy9leHQyX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzNjIwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvZXh0Ml9mcy5oCkBAIC0wLDAgKzEsODY3IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiBSZW15IENhcmQgKGNhcmRAbWFzaS5pYnAuZnIpCisgKiBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICBmcm9tCisgKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvbWluaXhfZnMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKi8KKworI2lmbmRlZiBfTElOVVhfRVhUMl9GU19ICisjZGVmaW5lIF9MSU5VWF9FWFQyX0ZTX0gKKworI2luY2x1ZGUgPGV4dDJmcy9leHQyX3R5cGVzLmg+CQkvKiBDaGFuZ2VkIGZyb20gbGludXgvdHlwZXMuaCAqLworCisvKgorICogVGhlIHNlY29uZCBleHRlbmRlZCBmaWxlc3lzdGVtIGNvbnN0YW50cy9zdHJ1Y3R1cmVzCisgKi8KKworLyoKKyAqIERlZmluZSBFWFQyRlNfREVCVUcgdG8gcHJvZHVjZSBkZWJ1ZyBtZXNzYWdlcworICovCisjdW5kZWYgRVhUMkZTX0RFQlVHCisKKy8qCisgKiBEZWZpbmUgRVhUMl9QUkVBTExPQ0FURSB0byBwcmVhbGxvY2F0ZSBkYXRhIGJsb2NrcyBmb3IgZXhwYW5kaW5nIGZpbGVzCisgKi8KKyNkZWZpbmUgRVhUMl9QUkVBTExPQ0FURQorI2RlZmluZSBFWFQyX0RFRkFVTFRfUFJFQUxMT0NfQkxPQ0tTCTgKKworLyoKKyAqIFRoZSBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gdmVyc2lvbgorICovCisjZGVmaW5lIEVYVDJGU19EQVRFCQkiOTUvMDgvMDkiCisjZGVmaW5lIEVYVDJGU19WRVJTSU9OCQkiMC41YiIKKworLyoKKyAqIFNwZWNpYWwgaW5vZGUgbnVtYmVycworICovCisjZGVmaW5lIEVYVDJfQkFEX0lOTwkJIDEJLyogQmFkIGJsb2NrcyBpbm9kZSAqLworI2RlZmluZSBFWFQyX1JPT1RfSU5PCQkgMgkvKiBSb290IGlub2RlICovCisjZGVmaW5lIEVYVDRfVVNSX1FVT1RBX0lOTwkgMwkvKiBVc2VyIHF1b3RhIGlub2RlICovCisjZGVmaW5lIEVYVDRfR1JQX1FVT1RBX0lOTwkgNAkvKiBHcm91cCBxdW90YSBpbm9kZSAqLworI2RlZmluZSBFWFQyX0JPT1RfTE9BREVSX0lOTwkgNQkvKiBCb290IGxvYWRlciBpbm9kZSAqLworI2RlZmluZSBFWFQyX1VOREVMX0RJUl9JTk8JIDYJLyogVW5kZWxldGUgZGlyZWN0b3J5IGlub2RlICovCisjZGVmaW5lIEVYVDJfUkVTSVpFX0lOTwkJIDcJLyogUmVzZXJ2ZWQgZ3JvdXAgZGVzY3JpcHRvcnMgaW5vZGUgKi8KKyNkZWZpbmUgRVhUMl9KT1VSTkFMX0lOTwkgOAkvKiBKb3VybmFsIGlub2RlICovCisjZGVmaW5lIEVYVDJfRVhDTFVERV9JTk8JIDkJLyogVGhlICJleGNsdWRlIiBpbm9kZSwgZm9yIHNuYXBzaG90cyAqLworI2RlZmluZSBFWFQ0X1JFUExJQ0FfSU5PCTEwCS8qIFVzZWQgYnkgbm9uLXVwc3RyZWFtIGZlYXR1cmUgKi8KKworLyogRmlyc3Qgbm9uLXJlc2VydmVkIGlub2RlIGZvciBvbGQgZXh0MiBmaWxlc3lzdGVtcyAqLworI2RlZmluZSBFWFQyX0dPT0RfT0xEX0ZJUlNUX0lOTwkxMQorCisvKgorICogVGhlIHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSBtYWdpYyBudW1iZXIKKyAqLworI2RlZmluZSBFWFQyX1NVUEVSX01BR0lDCTB4RUY1MworCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBFWFQyX1NCKHNiKQkoJigoc2IpLT51LmV4dDJfc2IpKQorI2Vsc2UKKy8qIEFzc3VtZSB0aGF0IHVzZXIgbW9kZSBwcm9ncmFtcyBhcmUgcGFzc2luZyBpbiBhbiBleHQyZnMgc3VwZXJibG9jaywgbm90CisgKiBhIGtlcm5lbCBzdHJ1Y3Qgc3VwZXJfYmxvY2suICBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gY2FsbCB0aGUgZmVhdHVyZS10ZXN0CisgKiBtYWNyb3MgZnJvbSB1c2VyIGxhbmQuICovCisjZGVmaW5lIEVYVDJfU0Ioc2IpCShzYikKKyNlbmRpZgorCisvKgorICogTWF4aW1hbCBjb3VudCBvZiBsaW5rcyB0byBhIGZpbGUKKyAqLworI2RlZmluZSBFWFQyX0xJTktfTUFYCQk2NTAwMAorCisvKgorICogTWFjcm8taW5zdHJ1Y3Rpb25zIHVzZWQgdG8gbWFuYWdlIHNldmVyYWwgYmxvY2sgc2l6ZXMKKyAqLworI2RlZmluZSBFWFQyX01JTl9CTE9DS19MT0dfU0laRQkJMTAJLyogMTAyNCAqLworI2RlZmluZSBFWFQyX01BWF9CTE9DS19MT0dfU0laRQkJMTYJLyogNjU1MzYgKi8KKyNkZWZpbmUgRVhUMl9NSU5fQkxPQ0tfU0laRQkoMSA8PCBFWFQyX01JTl9CTE9DS19MT0dfU0laRSkKKyNkZWZpbmUgRVhUMl9NQVhfQkxPQ0tfU0laRQkoMSA8PCBFWFQyX01BWF9CTE9DS19MT0dfU0laRSkKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIEVYVDJfQkxPQ0tfU0laRShzKQkoKHMpLT5zX2Jsb2Nrc2l6ZSkKKyNkZWZpbmUgRVhUMl9CTE9DS19TSVpFX0JJVFMocykJKChzKS0+c19ibG9ja3NpemVfYml0cykKKyNkZWZpbmUgRVhUMl9BRERSX1BFUl9CTE9DS19CSVRTKHMpCShFWFQyX1NCKHMpLT5hZGRyX3Blcl9ibG9ja19iaXRzKQorI2RlZmluZSBFWFQyX0lOT0RFX1NJWkUocykJKEVYVDJfU0IocyktPnNfaW5vZGVfc2l6ZSkKKyNkZWZpbmUgRVhUMl9GSVJTVF9JTk8ocykJKEVYVDJfU0IocyktPnNfZmlyc3RfaW5vKQorI2Vsc2UKKyNkZWZpbmUgRVhUMl9CTE9DS19TSVpFKHMpCShFWFQyX01JTl9CTE9DS19TSVpFIDw8IChzKS0+c19sb2dfYmxvY2tfc2l6ZSkKKyNkZWZpbmUgRVhUMl9CTE9DS19TSVpFX0JJVFMocykJKChzKS0+c19sb2dfYmxvY2tfc2l6ZSArIDEwKQorI2RlZmluZSBFWFQyX0lOT0RFX1NJWkUocykJKCgocyktPnNfcmV2X2xldmVsID09IEVYVDJfR09PRF9PTERfUkVWKSA/IFwKKwkJCQkgRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFIDogKHMpLT5zX2lub2RlX3NpemUpCisjZGVmaW5lIEVYVDJfRklSU1RfSU5PKHMpCSgoKHMpLT5zX3Jldl9sZXZlbCA9PSBFWFQyX0dPT0RfT0xEX1JFVikgPyBcCisJCQkJIEVYVDJfR09PRF9PTERfRklSU1RfSU5PIDogKHMpLT5zX2ZpcnN0X2lubykKKyNlbmRpZgorI2RlZmluZSBFWFQyX0FERFJfUEVSX0JMT0NLKHMpCShFWFQyX0JMT0NLX1NJWkUocykgLyBzaXplb2YoX191MzIpKQorCisvKgorICogTWFjcm8taW5zdHJ1Y3Rpb25zIHVzZWQgdG8gbWFuYWdlIGFsbG9jYXRpb24gY2x1c3RlcnMKKyAqLworI2RlZmluZSBFWFQyX01JTl9DTFVTVEVSX0xPR19TSVpFCUVYVDJfTUlOX0JMT0NLX0xPR19TSVpFCisjZGVmaW5lIEVYVDJfTUFYX0NMVVNURVJfTE9HX1NJWkUJMjkJLyogNTEyTUIgICovCisjZGVmaW5lIEVYVDJfTUlOX0NMVVNURVJfU0laRQkJRVhUMl9NSU5fQkxPQ0tfU0laRQorI2RlZmluZSBFWFQyX01BWF9DTFVTVEVSX1NJWkUJCSgxIDw8IEVYVDJfTUFYX0NMVVNURVJfTE9HX1NJWkUpCisjZGVmaW5lIEVYVDJfQ0xVU1RFUl9TSVpFKHMpCQkoRVhUMl9NSU5fQkxPQ0tfU0laRSA8PCBcCisJCQkJCQkocyktPnNfbG9nX2NsdXN0ZXJfc2l6ZSkKKyNkZWZpbmUgRVhUMl9DTFVTVEVSX1NJWkVfQklUUyhzKQkoKHMpLT5zX2xvZ19jbHVzdGVyX3NpemUgKyAxMCkKKworLyoKKyAqIE1hY3JvLWluc3RydWN0aW9ucyB1c2VkIHRvIG1hbmFnZSBmcmFnbWVudHMKKyAqCisgKiBOb3RlOiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seSwgZm9yIHRoZSBkdW1wIHByb2dyYW0uCisgKiBFeHQyLzMvNCB3aWxsIG5ldmVyIHN1cHBvcnQgZnJhZ21lbnRzLi4uLgorICovCisjZGVmaW5lIEVYVDJfTUlOX0ZSQUdfU0laRSAgICAgICAgICAgICAgRVhUMl9NSU5fQkxPQ0tfU0laRQorI2RlZmluZSBFWFQyX01BWF9GUkFHX1NJWkUgICAgICAgICAgICAgIEVYVDJfTUFYX0JMT0NLX1NJWkUKKyNkZWZpbmUgRVhUMl9NSU5fRlJBR19MT0dfU0laRSAgICAgICAgICBFWFQyX01JTl9CTE9DS19MT0dfU0laRQorI2RlZmluZSBFWFQyX0ZSQUdfU0laRShzKQkJRVhUMl9CTE9DS19TSVpFKHMpCisjZGVmaW5lIEVYVDJfRlJBR1NfUEVSX0JMT0NLKHMpCQkxCisKKy8qCisgKiBBQ0wgc3RydWN0dXJlcworICovCitzdHJ1Y3QgZXh0Ml9hY2xfaGVhZGVyCS8qIEhlYWRlciBvZiBBY2Nlc3MgQ29udHJvbCBMaXN0cyAqLworeworCV9fdTMyCWFjbGhfc2l6ZTsKKwlfX3UzMglhY2xoX2ZpbGVfY291bnQ7CisJX191MzIJYWNsaF9hY2xlX2NvdW50OworCV9fdTMyCWFjbGhfZmlyc3RfYWNsZTsKK307CisKK3N0cnVjdCBleHQyX2FjbF9lbnRyeQkvKiBBY2Nlc3MgQ29udHJvbCBMaXN0IEVudHJ5ICovCit7CisJX191MzIJYWNsZV9zaXplOworCV9fdTE2CWFjbGVfcGVybXM7CS8qIEFjY2VzcyBwZXJtaXNzaW9ucyAqLworCV9fdTE2CWFjbGVfdHlwZTsJLyogVHlwZSBvZiBlbnRyeSAqLworCV9fdTE2CWFjbGVfdGFnOwkvKiBVc2VyIG9yIGdyb3VwIGlkZW50aXR5ICovCisJX191MTYJYWNsZV9wYWQxOworCV9fdTMyCWFjbGVfbmV4dDsJLyogUG9pbnRlciBvbiBuZXh0IGVudHJ5IGZvciB0aGUgKi8KKwkJCQkJLyogc2FtZSBpbm9kZSBvciBvbiBuZXh0IGZyZWUgZW50cnkgKi8KK307CisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgYSBibG9ja3MgZ3JvdXAgZGVzY3JpcHRvcgorICovCitzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjCit7CisJX191MzIJYmdfYmxvY2tfYml0bWFwOwkvKiBCbG9ja3MgYml0bWFwIGJsb2NrICovCisJX191MzIJYmdfaW5vZGVfYml0bWFwOwkvKiBJbm9kZXMgYml0bWFwIGJsb2NrICovCisJX191MzIJYmdfaW5vZGVfdGFibGU7CQkvKiBJbm9kZXMgdGFibGUgYmxvY2sgKi8KKwlfX3UxNgliZ19mcmVlX2Jsb2Nrc19jb3VudDsJLyogRnJlZSBibG9ja3MgY291bnQgKi8KKwlfX3UxNgliZ19mcmVlX2lub2Rlc19jb3VudDsJLyogRnJlZSBpbm9kZXMgY291bnQgKi8KKwlfX3UxNgliZ191c2VkX2RpcnNfY291bnQ7CS8qIERpcmVjdG9yaWVzIGNvdW50ICovCisJX191MTYJYmdfZmxhZ3M7CisJX191MzIJYmdfZXhjbHVkZV9iaXRtYXBfbG87CS8qIEV4Y2x1ZGUgYml0bWFwIGZvciBzbmFwc2hvdHMgKi8KKwlfX3UxNgliZ19ibG9ja19iaXRtYXBfY3N1bV9sbzsvKiBjcmMzMmMoc191dWlkK2dycF9udW0rYml0bWFwKSBMU0IgKi8KKwlfX3UxNgliZ19pbm9kZV9iaXRtYXBfY3N1bV9sbzsvKiBjcmMzMmMoc191dWlkK2dycF9udW0rYml0bWFwKSBMU0IgKi8KKwlfX3UxNgliZ19pdGFibGVfdW51c2VkOwkvKiBVbnVzZWQgaW5vZGVzIGNvdW50ICovCisJX191MTYJYmdfY2hlY2tzdW07CQkvKiBjcmMxNihzX3V1aWQrZ3JvdXBfbnVtK2dyb3VwX2Rlc2MpKi8KK307CisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgYSBibG9ja3MgZ3JvdXAgZGVzY3JpcHRvcgorICovCitzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjCit7CisJX191MzIJYmdfYmxvY2tfYml0bWFwOwkvKiBCbG9ja3MgYml0bWFwIGJsb2NrICovCisJX191MzIJYmdfaW5vZGVfYml0bWFwOwkvKiBJbm9kZXMgYml0bWFwIGJsb2NrICovCisJX191MzIJYmdfaW5vZGVfdGFibGU7CQkvKiBJbm9kZXMgdGFibGUgYmxvY2sgKi8KKwlfX3UxNgliZ19mcmVlX2Jsb2Nrc19jb3VudDsJLyogRnJlZSBibG9ja3MgY291bnQgKi8KKwlfX3UxNgliZ19mcmVlX2lub2Rlc19jb3VudDsJLyogRnJlZSBpbm9kZXMgY291bnQgKi8KKwlfX3UxNgliZ191c2VkX2RpcnNfY291bnQ7CS8qIERpcmVjdG9yaWVzIGNvdW50ICovCisJX191MTYJYmdfZmxhZ3M7CQkvKiBFWFQ0X0JHX2ZsYWdzIChJTk9ERV9VTklOSVQsIGV0YykgKi8KKwlfX3UzMgliZ19leGNsdWRlX2JpdG1hcF9sbzsJLyogRXhjbHVkZSBiaXRtYXAgZm9yIHNuYXBzaG90cyAqLworCV9fdTE2CWJnX2Jsb2NrX2JpdG1hcF9jc3VtX2xvOy8qIGNyYzMyYyhzX3V1aWQrZ3JwX251bStiaXRtYXApIExTQiAqLworCV9fdTE2CWJnX2lub2RlX2JpdG1hcF9jc3VtX2xvOy8qIGNyYzMyYyhzX3V1aWQrZ3JwX251bStiaXRtYXApIExTQiAqLworCV9fdTE2CWJnX2l0YWJsZV91bnVzZWQ7CS8qIFVudXNlZCBpbm9kZXMgY291bnQgKi8KKwlfX3UxNgliZ19jaGVja3N1bTsJCS8qIGNyYzE2KHNiX3V1aWQrZ3JvdXArZGVzYykgKi8KKwlfX3UzMgliZ19ibG9ja19iaXRtYXBfaGk7CS8qIEJsb2NrcyBiaXRtYXAgYmxvY2sgTVNCICovCisJX191MzIJYmdfaW5vZGVfYml0bWFwX2hpOwkvKiBJbm9kZXMgYml0bWFwIGJsb2NrIE1TQiAqLworCV9fdTMyCWJnX2lub2RlX3RhYmxlX2hpOwkvKiBJbm9kZXMgdGFibGUgYmxvY2sgTVNCICovCisJX191MTYJYmdfZnJlZV9ibG9ja3NfY291bnRfaGk7LyogRnJlZSBibG9ja3MgY291bnQgTVNCICovCisJX191MTYJYmdfZnJlZV9pbm9kZXNfY291bnRfaGk7LyogRnJlZSBpbm9kZXMgY291bnQgTVNCICovCisJX191MTYJYmdfdXNlZF9kaXJzX2NvdW50X2hpOwkvKiBEaXJlY3RvcmllcyBjb3VudCBNU0IgKi8KKwlfX3UxNgliZ19pdGFibGVfdW51c2VkX2hpOwkvKiBVbnVzZWQgaW5vZGVzIGNvdW50IE1TQiAqLworCV9fdTMyCWJnX2V4Y2x1ZGVfYml0bWFwX2hpOwkvKiBFeGNsdWRlIGJpdG1hcCBibG9jayBNU0IgKi8KKwlfX3UxNgliZ19ibG9ja19iaXRtYXBfY3N1bV9oaTsvKiBjcmMzMmMoc191dWlkK2dycF9udW0rYml0bWFwKSBNU0IgKi8KKwlfX3UxNgliZ19pbm9kZV9iaXRtYXBfY3N1bV9oaTsvKiBjcmMzMmMoc191dWlkK2dycF9udW0rYml0bWFwKSBNU0IgKi8KKwlfX3UzMgliZ19yZXNlcnZlZDsKK307CisKKyNkZWZpbmUgRVhUMl9CR19JTk9ERV9VTklOSVQJMHgwMDAxIC8qIElub2RlIHRhYmxlL2JpdG1hcCBub3QgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgRVhUMl9CR19CTE9DS19VTklOSVQJMHgwMDAyIC8qIEJsb2NrIGJpdG1hcCBub3QgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgRVhUMl9CR19JTk9ERV9aRVJPRUQJMHgwMDA0IC8qIE9uLWRpc2sgaXRhYmxlIGluaXRpYWxpemVkIHRvIHplcm8gKi8KKworLyoKKyAqIERhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IHRoZSBkaXJlY3RvcnkgaW5kZXhpbmcgZmVhdHVyZQorICoKKyAqIE5vdGU6IGFsbCBvZiB0aGUgbXVsdGlieXRlIGludGVnZXIgZmllbGRzIGFyZSBsaXR0bGUgZW5kaWFuLgorICovCisKKy8qCisgKiBOb3RlOiBkeF9yb290X2luZm8gaXMgbGFpZCBvdXQgc28gdGhhdCBpZiBpdCBzaG91bGQgc29tZWhvdyBnZXQKKyAqIG92ZXJsYWlkIGJ5IGEgZGlyZW50IHRoZSB0d28gbG93IGJpdHMgb2YgdGhlIGhhc2ggdmVyc2lvbiB3aWxsIGJlCisgKiB6ZXJvLiAgVGhlcmVmb3JlLCB0aGUgaGFzaCB2ZXJzaW9uIG1vZCA0IHNob3VsZCBuZXZlciBiZSAwLgorICogU2luY2VyZWx5LCB0aGUgcGFyYW5vaWEgZGVwYXJ0bWVudC4KKyAqLworc3RydWN0IGV4dDJfZHhfcm9vdF9pbmZvIHsKKwlfX3UzMiByZXNlcnZlZF96ZXJvOworCV9fdTggaGFzaF92ZXJzaW9uOyAvKiAwIG5vdywgMSBhdCByZWxlYXNlICovCisJX191OCBpbmZvX2xlbmd0aDsgLyogOCAqLworCV9fdTggaW5kaXJlY3RfbGV2ZWxzOworCV9fdTggdW51c2VkX2ZsYWdzOworfTsKKworI2RlZmluZSBFWFQyX0hBU0hfTEVHQUNZCQkwCisjZGVmaW5lIEVYVDJfSEFTSF9IQUxGX01ENAkJMQorI2RlZmluZSBFWFQyX0hBU0hfVEVBCQkJMgorI2RlZmluZSBFWFQyX0hBU0hfTEVHQUNZX1VOU0lHTkVECTMgLyogcmVzZXJ2ZWQgZm9yIHVzZXJzcGFjZSBsaWIgKi8KKyNkZWZpbmUgRVhUMl9IQVNIX0hBTEZfTUQ0X1VOU0lHTkVECTQgLyogcmVzZXJ2ZWQgZm9yIHVzZXJzcGFjZSBsaWIgKi8KKyNkZWZpbmUgRVhUMl9IQVNIX1RFQV9VTlNJR05FRAkJNSAvKiByZXNlcnZlZCBmb3IgdXNlcnNwYWNlIGxpYiAqLworCisjZGVmaW5lIEVYVDJfSEFTSF9GTEFHX0lOQ09NUEFUCTB4MQorCitzdHJ1Y3QgZXh0Ml9keF9lbnRyeSB7CisJX191MzIgaGFzaDsKKwlfX3UzMiBibG9jazsKK307CisKK3N0cnVjdCBleHQyX2R4X2NvdW50bGltaXQgeworCV9fdTE2IGxpbWl0OworCV9fdTE2IGNvdW50OworfTsKKworCisvKgorICogTWFjcm8taW5zdHJ1Y3Rpb25zIHVzZWQgdG8gbWFuYWdlIGdyb3VwIGRlc2NyaXB0b3JzCisgKi8KKyNkZWZpbmUgRVhUMl9NSU5fREVTQ19TSVpFICAgICAgICAgICAgIDMyCisjZGVmaW5lIEVYVDJfTUlOX0RFU0NfU0laRV82NEJJVCAgICAgICA2NAorI2RlZmluZSBFWFQyX01BWF9ERVNDX1NJWkUgICAgICAgICAgICAgRVhUMl9NSU5fQkxPQ0tfU0laRQorI2RlZmluZSBFWFQyX0RFU0NfU0laRShzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAoKEVYVDJfU0IocyktPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkgPyBcCisJKHMpLT5zX2Rlc2Nfc2l6ZSA6IEVYVDJfTUlOX0RFU0NfU0laRSkKKworI2RlZmluZSBFWFQyX0JMT0NLU19QRVJfR1JPVVAocykJKEVYVDJfU0IocyktPnNfYmxvY2tzX3Blcl9ncm91cCkKKyNkZWZpbmUgRVhUMl9JTk9ERVNfUEVSX0dST1VQKHMpCShFWFQyX1NCKHMpLT5zX2lub2Rlc19wZXJfZ3JvdXApCisjZGVmaW5lIEVYVDJfQ0xVU1RFUlNfUEVSX0dST1VQKHMpCShFWFQyX1NCKHMpLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCkKKyNkZWZpbmUgRVhUMl9JTk9ERVNfUEVSX0JMT0NLKHMpCShFWFQyX0JMT0NLX1NJWkUocykvRVhUMl9JTk9ERV9TSVpFKHMpKQorLyogbGltaXRzIGltcG9zZWQgYnkgMTYtYml0IHZhbHVlIGdkX2ZyZWVfe2Jsb2Nrcyxpbm9kZX1fY291bnQgKi8KKyNkZWZpbmUgRVhUMl9NQVhfQkxPQ0tTX1BFUl9HUk9VUChzKQkoKCgodW5zaWduZWQpIDEgPDwgMTYpIC0gOCkgKglcCisJCQkJCSAoRVhUMl9DTFVTVEVSX1NJWkUocykgLyBcCisJCQkJCSAgRVhUMl9CTE9DS19TSVpFKHMpKSkKKyNkZWZpbmUgRVhUMl9NQVhfQ0xVU1RFUlNfUEVSX0dST1VQKHMpCSgoKHVuc2lnbmVkKSAxIDw8IDE2KSAtIDgpCisjZGVmaW5lIEVYVDJfTUFYX0lOT0RFU19QRVJfR1JPVVAocykJKCgodW5zaWduZWQpIDEgPDwgMTYpIC0gXAorCQkJCQkgRVhUMl9JTk9ERVNfUEVSX0JMT0NLKHMpKQorI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgRVhUMl9ERVNDX1BFUl9CTE9DSyhzKQkJKEVYVDJfU0IocyktPnNfZGVzY19wZXJfYmxvY2spCisjZGVmaW5lIEVYVDJfREVTQ19QRVJfQkxPQ0tfQklUUyhzKQkoRVhUMl9TQihzKS0+c19kZXNjX3Blcl9ibG9ja19iaXRzKQorI2Vsc2UKKyNkZWZpbmUgRVhUMl9ERVNDX1BFUl9CTE9DSyhzKQkJKEVYVDJfQkxPQ0tfU0laRShzKSAvIEVYVDJfREVTQ19TSVpFKHMpKQorI2VuZGlmCisKKyNkZWZpbmUgRVhUMl9HUk9VUFNfVE9fQkxPQ0tTKHMsIGcpICAgKChibGs2NF90KSBFWFQyX0JMT0NLU19QRVJfR1JPVVAocykgKiBcCisJCQkJICAgICAgIChnKSkKKyNkZWZpbmUgRVhUMl9HUk9VUFNfVE9fQ0xVU1RFUlMocywgZykgKChibGs2NF90KSBFWFQyX0NMVVNURVJTX1BFUl9HUk9VUChzKSAqIFwKKwkJCQkgICAgICAgKGcpKQorCisvKgorICogQ29uc3RhbnRzIHJlbGF0aXZlIHRvIHRoZSBkYXRhIGJsb2NrcworICovCisjZGVmaW5lIEVYVDJfTkRJUl9CTE9DS1MJCTEyCisjZGVmaW5lIEVYVDJfSU5EX0JMT0NLCQkJRVhUMl9ORElSX0JMT0NLUworI2RlZmluZSBFWFQyX0RJTkRfQkxPQ0sJCQkoRVhUMl9JTkRfQkxPQ0sgKyAxKQorI2RlZmluZSBFWFQyX1RJTkRfQkxPQ0sJCQkoRVhUMl9ESU5EX0JMT0NLICsgMSkKKyNkZWZpbmUgRVhUMl9OX0JMT0NLUwkJCShFWFQyX1RJTkRfQkxPQ0sgKyAxKQorCisvKgorICogSW5vZGUgZmxhZ3MKKyAqLworI2RlZmluZSBFWFQyX1NFQ1JNX0ZMCQkJMHgwMDAwMDAwMSAvKiBTZWN1cmUgZGVsZXRpb24gKi8KKyNkZWZpbmUgRVhUMl9VTlJNX0ZMCQkJMHgwMDAwMDAwMiAvKiBVbmRlbGV0ZSAqLworI2RlZmluZSBFWFQyX0NPTVBSX0ZMCQkJMHgwMDAwMDAwNCAvKiBDb21wcmVzcyBmaWxlICovCisjZGVmaW5lIEVYVDJfU1lOQ19GTAkJCTB4MDAwMDAwMDggLyogU3luY2hyb25vdXMgdXBkYXRlcyAqLworI2RlZmluZSBFWFQyX0lNTVVUQUJMRV9GTAkJMHgwMDAwMDAxMCAvKiBJbW11dGFibGUgZmlsZSAqLworI2RlZmluZSBFWFQyX0FQUEVORF9GTAkJCTB4MDAwMDAwMjAgLyogd3JpdGVzIHRvIGZpbGUgbWF5IG9ubHkgYXBwZW5kICovCisjZGVmaW5lIEVYVDJfTk9EVU1QX0ZMCQkJMHgwMDAwMDA0MCAvKiBkbyBub3QgZHVtcCBmaWxlICovCisjZGVmaW5lIEVYVDJfTk9BVElNRV9GTAkJCTB4MDAwMDAwODAgLyogZG8gbm90IHVwZGF0ZSBhdGltZSAqLworLyogUmVzZXJ2ZWQgZm9yIGNvbXByZXNzaW9uIHVzYWdlLi4uICovCisjZGVmaW5lIEVYVDJfRElSVFlfRkwJCQkweDAwMDAwMTAwCisjZGVmaW5lIEVYVDJfQ09NUFJCTEtfRkwJCTB4MDAwMDAyMDAgLyogT25lIG9yIG1vcmUgY29tcHJlc3NlZCBjbHVzdGVycyAqLworI2RlZmluZSBFWFQyX05PQ09NUFJfRkwJCQkweDAwMDAwNDAwIC8qIEFjY2VzcyByYXcgY29tcHJlc3NlZCBkYXRhICovCisjZGVmaW5lIEVYVDJfRUNPTVBSX0ZMCQkJMHgwMDAwMDgwMCAvKiBDb21wcmVzc2lvbiBlcnJvciAqLworLyogRW5kIGNvbXByZXNzaW9uIGZsYWdzIC0tLSBtYXliZSBub3QgYWxsIHVzZWQgKi8KKyNkZWZpbmUgRVhUMl9CVFJFRV9GTAkJCTB4MDAwMDEwMDAgLyogYnRyZWUgZm9ybWF0IGRpciAqLworI2RlZmluZSBFWFQyX0lOREVYX0ZMCQkJMHgwMDAwMTAwMCAvKiBoYXNoLWluZGV4ZWQgZGlyZWN0b3J5ICovCisjZGVmaW5lIEVYVDJfSU1BR0lDX0ZMCQkJMHgwMDAwMjAwMAorI2RlZmluZSBFWFQzX0pPVVJOQUxfREFUQV9GTAkJMHgwMDAwNDAwMCAvKiBmaWxlIGRhdGEgc2hvdWxkIGJlIGpvdXJuYWxlZCAqLworI2RlZmluZSBFWFQyX05PVEFJTF9GTAkJCTB4MDAwMDgwMDAgLyogZmlsZSB0YWlsIHNob3VsZCBub3QgYmUgbWVyZ2VkICovCisjZGVmaW5lIEVYVDJfRElSU1lOQ19GTCAJCTB4MDAwMTAwMDAgLyogU3luY2hyb25vdXMgZGlyZWN0b3J5IG1vZGlmaWNhdGlvbnMgKi8KKyNkZWZpbmUgRVhUMl9UT1BESVJfRkwJCQkweDAwMDIwMDAwIC8qIFRvcCBvZiBkaXJlY3RvcnkgaGllcmFyY2hpZXMqLworI2RlZmluZSBFWFQ0X0hVR0VfRklMRV9GTCAgICAgICAgICAgICAgIDB4MDAwNDAwMDAgLyogU2V0IHRvIGVhY2ggaHVnZSBmaWxlICovCisjZGVmaW5lIEVYVDRfRVhURU5UU19GTCAJCTB4MDAwODAwMDAgLyogSW5vZGUgdXNlcyBleHRlbnRzICovCisjZGVmaW5lIEVYVDRfRUFfSU5PREVfRkwJICAgICAgICAweDAwMjAwMDAwIC8qIElub2RlIHVzZWQgZm9yIGxhcmdlIEVBICovCisvKiBFWFQ0X0VPRkJMT0NLU19GTCAweDAwNDAwMDAwIHdhcyBoZXJlICovCisjZGVmaW5lIEZTX05PQ09XX0ZMCQkJMHgwMDgwMDAwMCAvKiBEbyBub3QgY293IGZpbGUgKi8KKyNkZWZpbmUgRVhUNF9TTkFQRklMRV9GTAkJMHgwMTAwMDAwMCAgLyogSW5vZGUgaXMgYSBzbmFwc2hvdCAqLworI2RlZmluZSBFWFQ0X1NOQVBGSUxFX0RFTEVURURfRkwJMHgwNDAwMDAwMCAgLyogU25hcHNob3QgaXMgYmVpbmcgZGVsZXRlZCAqLworI2RlZmluZSBFWFQ0X1NOQVBGSUxFX1NIUlVOS19GTAkJMHgwODAwMDAwMCAgLyogU25hcHNob3Qgc2hyaW5rIGhhcyBjb21wbGV0ZWQgKi8KKyNkZWZpbmUgRVhUMl9SRVNFUlZFRF9GTAkJMHg4MDAwMDAwMCAvKiByZXNlcnZlZCBmb3IgZXh0MiBsaWIgKi8KKworI2RlZmluZSBFWFQyX0ZMX1VTRVJfVklTSUJMRQkJMHgwMDRCREZGRiAvKiBVc2VyIHZpc2libGUgZmxhZ3MgKi8KKyNkZWZpbmUgRVhUMl9GTF9VU0VSX01PRElGSUFCTEUJCTB4MDA0QjgwRkYgLyogVXNlciBtb2RpZmlhYmxlIGZsYWdzICovCisKKy8qCisgKiBpb2N0bCBjb21tYW5kcworICovCisKKy8qIFVzZWQgZm9yIG9ubGluZSByZXNpemUgKi8KK3N0cnVjdCBleHQyX25ld19ncm91cF9pbnB1dCB7CisJX191MzIgZ3JvdXA7CQkvKiBHcm91cCBudW1iZXIgZm9yIHRoaXMgZGF0YSAqLworCV9fdTMyIGJsb2NrX2JpdG1hcDsJLyogQWJzb2x1dGUgYmxvY2sgbnVtYmVyIG9mIGJsb2NrIGJpdG1hcCAqLworCV9fdTMyIGlub2RlX2JpdG1hcDsJLyogQWJzb2x1dGUgYmxvY2sgbnVtYmVyIG9mIGlub2RlIGJpdG1hcCAqLworCV9fdTMyIGlub2RlX3RhYmxlOwkvKiBBYnNvbHV0ZSBibG9jayBudW1iZXIgb2YgaW5vZGUgdGFibGUgc3RhcnQgKi8KKwlfX3UzMiBibG9ja3NfY291bnQ7CS8qIFRvdGFsIG51bWJlciBvZiBibG9ja3MgaW4gdGhpcyBncm91cCAqLworCV9fdTE2IHJlc2VydmVkX2Jsb2NrczsJLyogTnVtYmVyIG9mIHJlc2VydmVkIGJsb2NrcyBpbiB0aGlzIGdyb3VwICovCisJX191MTYgdW51c2VkOwkJLyogTnVtYmVyIG9mIHJlc2VydmVkIEdEVCBibG9ja3MgaW4gZ3JvdXAgKi8KK307CisKK3N0cnVjdCBleHQ0X25ld19ncm91cF9pbnB1dCB7CisJX191MzIgZ3JvdXA7CQkvKiBHcm91cCBudW1iZXIgZm9yIHRoaXMgZGF0YSAqLworCV9fdTY0IGJsb2NrX2JpdG1hcDsJLyogQWJzb2x1dGUgYmxvY2sgbnVtYmVyIG9mIGJsb2NrIGJpdG1hcCAqLworCV9fdTY0IGlub2RlX2JpdG1hcDsJLyogQWJzb2x1dGUgYmxvY2sgbnVtYmVyIG9mIGlub2RlIGJpdG1hcCAqLworCV9fdTY0IGlub2RlX3RhYmxlOwkvKiBBYnNvbHV0ZSBibG9jayBudW1iZXIgb2YgaW5vZGUgdGFibGUgc3RhcnQgKi8KKwlfX3UzMiBibG9ja3NfY291bnQ7CS8qIFRvdGFsIG51bWJlciBvZiBibG9ja3MgaW4gdGhpcyBncm91cCAqLworCV9fdTE2IHJlc2VydmVkX2Jsb2NrczsJLyogTnVtYmVyIG9mIHJlc2VydmVkIGJsb2NrcyBpbiB0aGlzIGdyb3VwICovCisJX191MTYgdW51c2VkOworfTsKKworI2lmZGVmIF9fR05VX18JCQkvKiBOZWVkZWQgZm9yIHRoZSBIdXJkICovCisjZGVmaW5lIF9JT1RfZXh0Ml9uZXdfZ3JvdXBfaW5wdXQgX0lPVCAoX0lPVFMoX191MzIpLCA1LCBfSU9UUyhfX3UxNiksIDIsIDAsIDApCisjZW5kaWYKKworI2RlZmluZSBFWFQyX0lPQ19HRVRGTEFHUwkJX0lPUignZicsIDEsIGxvbmcpCisjZGVmaW5lIEVYVDJfSU9DX1NFVEZMQUdTCQlfSU9XKCdmJywgMiwgbG9uZykKKyNkZWZpbmUgRVhUMl9JT0NfR0VUVkVSU0lPTgkJX0lPUigndicsIDEsIGxvbmcpCisjZGVmaW5lIEVYVDJfSU9DX1NFVFZFUlNJT04JCV9JT1coJ3YnLCAyLCBsb25nKQorI2RlZmluZSBFWFQyX0lPQ19HRVRWRVJTSU9OX05FVwkJX0lPUignZicsIDMsIGxvbmcpCisjZGVmaW5lIEVYVDJfSU9DX1NFVFZFUlNJT05fTkVXCQlfSU9XKCdmJywgNCwgbG9uZykKKyNkZWZpbmUgRVhUMl9JT0NfR1JPVVBfRVhURU5ECQlfSU9XKCdmJywgNywgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgRVhUMl9JT0NfR1JPVVBfQURECQlfSU9XKCdmJywgOCxzdHJ1Y3QgZXh0Ml9uZXdfZ3JvdXBfaW5wdXQpCisjZGVmaW5lIEVYVDRfSU9DX0dST1VQX0FERAkJX0lPVygnZicsIDgsc3RydWN0IGV4dDRfbmV3X2dyb3VwX2lucHV0KQorI2RlZmluZSBFWFQ0X0lPQ19SRVNJWkVfRlMJCV9JT1coJ2YnLCAxNiwgX191NjQpCisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgYW4gaW5vZGUgb24gdGhlIGRpc2sKKyAqLworc3RydWN0IGV4dDJfaW5vZGUgeworCV9fdTE2CWlfbW9kZTsJCS8qIEZpbGUgbW9kZSAqLworCV9fdTE2CWlfdWlkOwkJLyogTG93IDE2IGJpdHMgb2YgT3duZXIgVWlkICovCisJX191MzIJaV9zaXplOwkJLyogU2l6ZSBpbiBieXRlcyAqLworCV9fdTMyCWlfYXRpbWU7CS8qIEFjY2VzcyB0aW1lICovCisJX191MzIJaV9jdGltZTsJLyogSW5vZGUgY2hhbmdlIHRpbWUgKi8KKwlfX3UzMglpX210aW1lOwkvKiBNb2RpZmljYXRpb24gdGltZSAqLworCV9fdTMyCWlfZHRpbWU7CS8qIERlbGV0aW9uIFRpbWUgKi8KKwlfX3UxNglpX2dpZDsJCS8qIExvdyAxNiBiaXRzIG9mIEdyb3VwIElkICovCisJX191MTYJaV9saW5rc19jb3VudDsJLyogTGlua3MgY291bnQgKi8KKwlfX3UzMglpX2Jsb2NrczsJLyogQmxvY2tzIGNvdW50ICovCisJX191MzIJaV9mbGFnczsJLyogRmlsZSBmbGFncyAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fdTMyCWxfaV92ZXJzaW9uOyAvKiB3YXMgbF9pX3Jlc2VydmVkMSAqLworCQl9IGxpbnV4MTsKKwkJc3RydWN0IHsKKwkJCV9fdTMyICBoX2lfdHJhbnNsYXRvcjsKKwkJfSBodXJkMTsKKwl9IG9zZDE7CQkJCS8qIE9TIGRlcGVuZGVudCAxICovCisJX191MzIJaV9ibG9ja1tFWFQyX05fQkxPQ0tTXTsvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwlfX3UzMglpX2dlbmVyYXRpb247CS8qIEZpbGUgdmVyc2lvbiAoZm9yIE5GUykgKi8KKwlfX3UzMglpX2ZpbGVfYWNsOwkvKiBGaWxlIEFDTCAqLworCV9fdTMyCWlfc2l6ZV9oaWdoOwkvKiBGb3JtZXJseSBpX2Rpcl9hY2wsIGRpcmVjdG9yeSBBQ0wgKi8KKwlfX3UzMglpX2ZhZGRyOwkvKiBGcmFnbWVudCBhZGRyZXNzICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX191MTYJbF9pX2Jsb2Nrc19oaTsKKwkJCV9fdTE2CWxfaV9maWxlX2FjbF9oaWdoOworCQkJX191MTYJbF9pX3VpZF9oaWdoOwkvKiB0aGVzZSAyIGZpZWxkcyAgICAqLworCQkJX191MTYJbF9pX2dpZF9oaWdoOwkvKiB3ZXJlIHJlc2VydmVkMlswXSAqLworCQkJX191MTYJbF9pX2NoZWNrc3VtX2xvOyAvKiBjcmMzMmModXVpZCtpbnVtK2lub2RlKSAqLworCQkJX191MTYJbF9pX3Jlc2VydmVkOworCQl9IGxpbnV4MjsKKwkJc3RydWN0IHsKKwkJCV9fdTgJaF9pX2ZyYWc7CS8qIEZyYWdtZW50IG51bWJlciAqLworCQkJX191OAloX2lfZnNpemU7CS8qIEZyYWdtZW50IHNpemUgKi8KKwkJCV9fdTE2CWhfaV9tb2RlX2hpZ2g7CisJCQlfX3UxNgloX2lfdWlkX2hpZ2g7CisJCQlfX3UxNgloX2lfZ2lkX2hpZ2g7CisJCQlfX3UzMgloX2lfYXV0aG9yOworCQl9IGh1cmQyOworCX0gb3NkMjsJCQkJLyogT1MgZGVwZW5kZW50IDIgKi8KK307CisKKy8qCisgKiBQZXJtYW5lbnQgcGFydCBvZiBhbiBsYXJnZSBpbm9kZSBvbiB0aGUgZGlzaworICovCitzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSB7CisJX191MTYJaV9tb2RlOwkJLyogRmlsZSBtb2RlICovCisJX191MTYJaV91aWQ7CQkvKiBMb3cgMTYgYml0cyBvZiBPd25lciBVaWQgKi8KKwlfX3UzMglpX3NpemU7CQkvKiBTaXplIGluIGJ5dGVzICovCisJX191MzIJaV9hdGltZTsJLyogQWNjZXNzIHRpbWUgKi8KKwlfX3UzMglpX2N0aW1lOwkvKiBJbm9kZSBDaGFuZ2UgdGltZSAqLworCV9fdTMyCWlfbXRpbWU7CS8qIE1vZGlmaWNhdGlvbiB0aW1lICovCisJX191MzIJaV9kdGltZTsJLyogRGVsZXRpb24gVGltZSAqLworCV9fdTE2CWlfZ2lkOwkJLyogTG93IDE2IGJpdHMgb2YgR3JvdXAgSWQgKi8KKwlfX3UxNglpX2xpbmtzX2NvdW50OwkvKiBMaW5rcyBjb3VudCAqLworCV9fdTMyCWlfYmxvY2tzOwkvKiBCbG9ja3MgY291bnQgKi8KKwlfX3UzMglpX2ZsYWdzOwkvKiBGaWxlIGZsYWdzICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX191MzIJbF9pX3ZlcnNpb247IC8qIHdhcyBsX2lfcmVzZXJ2ZWQxICovCisJCX0gbGludXgxOworCQlzdHJ1Y3QgeworCQkJX191MzIgIGhfaV90cmFuc2xhdG9yOworCQl9IGh1cmQxOworCX0gb3NkMTsJCQkJLyogT1MgZGVwZW5kZW50IDEgKi8KKwlfX3UzMglpX2Jsb2NrW0VYVDJfTl9CTE9DS1NdOy8qIFBvaW50ZXJzIHRvIGJsb2NrcyAqLworCV9fdTMyCWlfZ2VuZXJhdGlvbjsJLyogRmlsZSB2ZXJzaW9uIChmb3IgTkZTKSAqLworCV9fdTMyCWlfZmlsZV9hY2w7CS8qIEZpbGUgQUNMICovCisJX191MzIJaV9zaXplX2hpZ2g7CS8qIEZvcm1lcmx5IGlfZGlyX2FjbCwgZGlyZWN0b3J5IEFDTCAqLworCV9fdTMyCWlfZmFkZHI7CS8qIEZyYWdtZW50IGFkZHJlc3MgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX3UxNglsX2lfYmxvY2tzX2hpOworCQkJX191MTYJbF9pX2ZpbGVfYWNsX2hpZ2g7CisJCQlfX3UxNglsX2lfdWlkX2hpZ2g7CS8qIHRoZXNlIDIgZmllbGRzICAgICovCisJCQlfX3UxNglsX2lfZ2lkX2hpZ2g7CS8qIHdlcmUgcmVzZXJ2ZWQyWzBdICovCisJCQlfX3UxNglsX2lfY2hlY2tzdW1fbG87IC8qIGNyYzMyYyh1dWlkK2ludW0raW5vZGUpICovCisJCQlfX3UxNglsX2lfcmVzZXJ2ZWQ7CisJCX0gbGludXgyOworCQlzdHJ1Y3QgeworCQkJX191OAloX2lfZnJhZzsJLyogRnJhZ21lbnQgbnVtYmVyICovCisJCQlfX3U4CWhfaV9mc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCQkJX191MTYJaF9pX21vZGVfaGlnaDsKKwkJCV9fdTE2CWhfaV91aWRfaGlnaDsKKwkJCV9fdTE2CWhfaV9naWRfaGlnaDsKKwkJCV9fdTMyCWhfaV9hdXRob3I7CisJCX0gaHVyZDI7CisJfSBvc2QyOwkJCQkvKiBPUyBkZXBlbmRlbnQgMiAqLworCV9fdTE2CWlfZXh0cmFfaXNpemU7CisJX191MTYJaV9jaGVja3N1bV9oaTsJLyogY3JjMzJjKHV1aWQraW51bStpbm9kZSkgKi8KKwlfX3UzMglpX2N0aW1lX2V4dHJhOwkvKiBleHRyYSBDaGFuZ2UgdGltZSAobnNlYyA8PCAyIHwgZXBvY2gpICovCisJX191MzIJaV9tdGltZV9leHRyYTsJLyogZXh0cmEgTW9kaWZpY2F0aW9uIHRpbWUgKG5zZWMgPDwgMiB8IGVwb2NoKSAqLworCV9fdTMyCWlfYXRpbWVfZXh0cmE7CS8qIGV4dHJhIEFjY2VzcyB0aW1lIChuc2VjIDw8IDIgfCBlcG9jaCkgKi8KKwlfX3UzMglpX2NydGltZTsJLyogRmlsZSBjcmVhdGlvbiB0aW1lICovCisJX191MzIJaV9jcnRpbWVfZXh0cmE7CS8qIGV4dHJhIEZpbGUgY3JlYXRpb24gdGltZSAobnNlYyA8PCAyIHwgZXBvY2gpKi8KKwlfX3UzMglpX3ZlcnNpb25faGk7CS8qIGhpZ2ggMzIgYml0cyBmb3IgNjQtYml0IHZlcnNpb24gKi8KK307CisKKyNkZWZpbmUgaV9kaXJfYWNsCWlfc2l6ZV9oaWdoCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19saW51eF9fKQorI2RlZmluZSBpX3Jlc2VydmVkMQlvc2QxLmxpbnV4MS5sX2lfcmVzZXJ2ZWQxCisjZGVmaW5lIGlfZnJhZwkJb3NkMi5saW51eDIubF9pX2ZyYWcKKyNkZWZpbmUgaV9mc2l6ZQkJb3NkMi5saW51eDIubF9pX2ZzaXplCisjZGVmaW5lIGlfdWlkX2xvdwlpX3VpZAorI2RlZmluZSBpX2dpZF9sb3cJaV9naWQKKyNkZWZpbmUgaV91aWRfaGlnaAlvc2QyLmxpbnV4Mi5sX2lfdWlkX2hpZ2gKKyNkZWZpbmUgaV9naWRfaGlnaAlvc2QyLmxpbnV4Mi5sX2lfZ2lkX2hpZ2gKKyNlbHNlCisjaWYgZGVmaW5lZChfX0dOVV9fKQorCisjZGVmaW5lIGlfdHJhbnNsYXRvcglvc2QxLmh1cmQxLmhfaV90cmFuc2xhdG9yCisjZGVmaW5lIGlfZnJhZwkJb3NkMi5odXJkMi5oX2lfZnJhZzsKKyNkZWZpbmUgaV9mc2l6ZQkJb3NkMi5odXJkMi5oX2lfZnNpemU7CisjZGVmaW5lIGlfdWlkX2hpZ2gJb3NkMi5odXJkMi5oX2lfdWlkX2hpZ2gKKyNkZWZpbmUgaV9naWRfaGlnaAlvc2QyLmh1cmQyLmhfaV9naWRfaGlnaAorI2RlZmluZSBpX2F1dGhvcglvc2QyLmh1cmQyLmhfaV9hdXRob3IKKworI2VuZGlmICAvKiBfX0dOVV9fICovCisjZW5kaWYJLyogZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKF9fbGludXhfXykgKi8KKworI2RlZmluZSBpbm9kZV91aWQoaW5vZGUpCSgoaW5vZGUpLmlfdWlkIHwgKGlub2RlKS5vc2QyLmxpbnV4Mi5sX2lfdWlkX2hpZ2ggPDwgMTYpCisjZGVmaW5lIGlub2RlX2dpZChpbm9kZSkJKChpbm9kZSkuaV9naWQgfCAoaW5vZGUpLm9zZDIubGludXgyLmxfaV9naWRfaGlnaCA8PCAxNikKKyNkZWZpbmUgZXh0MmZzX3NldF9pX3VpZF9oaWdoKGlub2RlLHgpICgoaW5vZGUpLm9zZDIubGludXgyLmxfaV91aWRfaGlnaCA9ICh4KSkKKyNkZWZpbmUgZXh0MmZzX3NldF9pX2dpZF9oaWdoKGlub2RlLHgpICgoaW5vZGUpLm9zZDIubGludXgyLmxfaV9naWRfaGlnaCA9ICh4KSkKKworLyoKKyAqIEZpbGUgc3lzdGVtIHN0YXRlcworICovCisjZGVmaW5lIEVYVDJfVkFMSURfRlMJCQkweDAwMDEJLyogVW5tb3VudGVkIGNsZWFubHkgKi8KKyNkZWZpbmUgRVhUMl9FUlJPUl9GUwkJCTB4MDAwMgkvKiBFcnJvcnMgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgRVhUM19PUlBIQU5fRlMJCQkweDAwMDQJLyogT3JwaGFucyBiZWluZyByZWNvdmVyZWQgKi8KKworLyoKKyAqIE1pc2MuIGZpbGVzeXN0ZW0gZmxhZ3MKKyAqLworI2RlZmluZSBFWFQyX0ZMQUdTX1NJR05FRF9IQVNICQkweDAwMDEgIC8qIFNpZ25lZCBkaXJoYXNoIGluIHVzZSAqLworI2RlZmluZSBFWFQyX0ZMQUdTX1VOU0lHTkVEX0hBU0gJMHgwMDAyICAvKiBVbnNpZ25lZCBkaXJoYXNoIGluIHVzZSAqLworI2RlZmluZSBFWFQyX0ZMQUdTX1RFU1RfRklMRVNZUwkJMHgwMDA0CS8qIE9LIGZvciB1c2Ugb24gZGV2ZWxvcG1lbnQgY29kZSAqLworI2RlZmluZSBFWFQyX0ZMQUdTX0lTX1NOQVBTSE9UCQkweDAwMTAJLyogVGhpcyBpcyBhIHNuYXBzaG90IGltYWdlICovCisjZGVmaW5lIEVYVDJfRkxBR1NfRklYX1NOQVBTSE9UCQkweDAwMjAJLyogU25hcHNob3QgaW5vZGVzIGNvcnJ1cHRlZCAqLworI2RlZmluZSBFWFQyX0ZMQUdTX0ZJWF9FWENMVURFCQkweDAwNDAJLyogRXhjbHVkZSBiaXRtYXBzIGNvcnJ1cHRlZCAqLworCisvKgorICogTW91bnQgZmxhZ3MKKyAqLworI2RlZmluZSBFWFQyX01PVU5UX0NIRUNLCQkweDAwMDEJLyogRG8gbW91bnQtdGltZSBjaGVja3MgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9HUlBJRAkJMHgwMDA0CS8qIENyZWF0ZSBmaWxlcyB3aXRoIGRpcmVjdG9yeSdzIGdyb3VwICovCisjZGVmaW5lIEVYVDJfTU9VTlRfREVCVUcJCTB4MDAwOAkvKiBTb21lIGRlYnVnZ2luZyBtZXNzYWdlcyAqLworI2RlZmluZSBFWFQyX01PVU5UX0VSUk9SU19DT05UCQkweDAwMTAJLyogQ29udGludWUgb24gZXJyb3JzICovCisjZGVmaW5lIEVYVDJfTU9VTlRfRVJST1JTX1JPCQkweDAwMjAJLyogUmVtb3VudCBmcyBybyBvbiBlcnJvcnMgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9FUlJPUlNfUEFOSUMJCTB4MDA0MAkvKiBQYW5pYyBvbiBlcnJvcnMgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9NSU5JWF9ERgkJMHgwMDgwCS8qIE1pbWljcyB0aGUgTWluaXggc3RhdGZzICovCisjZGVmaW5lIEVYVDJfTU9VTlRfTk9fVUlEMzIJCTB4MDIwMCAgLyogRGlzYWJsZSAzMi1iaXQgVUlEcyAqLworCisjZGVmaW5lIGNsZWFyX29wdChvLCBvcHQpCQlvICY9IH5FWFQyX01PVU5UXyMjb3B0CisjZGVmaW5lIHNldF9vcHQobywgb3B0KQkJCW8gfD0gRVhUMl9NT1VOVF8jI29wdAorI2RlZmluZSB0ZXN0X29wdChzYiwgb3B0KQkJKEVYVDJfU0Ioc2IpLT5zX21vdW50X29wdCAmIFwKKwkJCQkJIEVYVDJfTU9VTlRfIyNvcHQpCisvKgorICogTWF4aW1hbCBtb3VudCBjb3VudHMgYmV0d2VlbiB0d28gZmlsZXN5c3RlbSBjaGVja3MKKyAqLworI2RlZmluZSBFWFQyX0RGTF9NQVhfTU5UX0NPVU5UCQkyMAkvKiBBbGxvdyAyMCBtb3VudHMgKi8KKyNkZWZpbmUgRVhUMl9ERkxfQ0hFQ0tJTlRFUlZBTAkJMAkvKiBEb24ndCB1c2UgaW50ZXJ2YWwgY2hlY2sgKi8KKworLyoKKyAqIEJlaGF2aW91ciB3aGVuIGRldGVjdGluZyBlcnJvcnMKKyAqLworI2RlZmluZSBFWFQyX0VSUk9SU19DT05USU5VRQkJMQkvKiBDb250aW51ZSBleGVjdXRpb24gKi8KKyNkZWZpbmUgRVhUMl9FUlJPUlNfUk8JCQkyCS8qIFJlbW91bnQgZnMgcmVhZC1vbmx5ICovCisjZGVmaW5lIEVYVDJfRVJST1JTX1BBTklDCQkzCS8qIFBhbmljICovCisjZGVmaW5lIEVYVDJfRVJST1JTX0RFRkFVTFQJCUVYVDJfRVJST1JTX0NPTlRJTlVFCisKKyNpZiAoX19HTlVDX18gPj0gNCkKKyNkZWZpbmUgZXh0NF9vZmZzZXRvZihUWVBFLE1FTUJFUikgX19idWlsdGluX29mZnNldG9mKFRZUEUsTUVNQkVSKQorI2Vsc2UKKyNkZWZpbmUgZXh0NF9vZmZzZXRvZihUWVBFLCBNRU1CRVIpICgoc2l6ZV90KSAmKChUWVBFICopMCktPk1FTUJFUikKKyNlbmRpZgorCisvKgorICogU3RydWN0dXJlIG9mIHRoZSBzdXBlciBibG9jaworICovCitzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayB7CisJX191MzIJc19pbm9kZXNfY291bnQ7CQkvKiBJbm9kZXMgY291bnQgKi8KKwlfX3UzMglzX2Jsb2Nrc19jb3VudDsJCS8qIEJsb2NrcyBjb3VudCAqLworCV9fdTMyCXNfcl9ibG9ja3NfY291bnQ7CS8qIFJlc2VydmVkIGJsb2NrcyBjb3VudCAqLworCV9fdTMyCXNfZnJlZV9ibG9ja3NfY291bnQ7CS8qIEZyZWUgYmxvY2tzIGNvdW50ICovCisJX191MzIJc19mcmVlX2lub2Rlc19jb3VudDsJLyogRnJlZSBpbm9kZXMgY291bnQgKi8KKwlfX3UzMglzX2ZpcnN0X2RhdGFfYmxvY2s7CS8qIEZpcnN0IERhdGEgQmxvY2sgKi8KKwlfX3UzMglzX2xvZ19ibG9ja19zaXplOwkvKiBCbG9jayBzaXplICovCisJX191MzIJc19sb2dfY2x1c3Rlcl9zaXplOwkvKiBBbGxvY2F0aW9uIGNsdXN0ZXIgc2l6ZSAqLworCV9fdTMyCXNfYmxvY2tzX3Blcl9ncm91cDsJLyogIyBCbG9ja3MgcGVyIGdyb3VwICovCisJX191MzIJc19jbHVzdGVyc19wZXJfZ3JvdXA7CS8qICMgRnJhZ21lbnRzIHBlciBncm91cCAqLworCV9fdTMyCXNfaW5vZGVzX3Blcl9ncm91cDsJLyogIyBJbm9kZXMgcGVyIGdyb3VwICovCisJX191MzIJc19tdGltZTsJCS8qIE1vdW50IHRpbWUgKi8KKwlfX3UzMglzX3d0aW1lOwkJLyogV3JpdGUgdGltZSAqLworCV9fdTE2CXNfbW50X2NvdW50OwkJLyogTW91bnQgY291bnQgKi8KKwlfX3MxNglzX21heF9tbnRfY291bnQ7CS8qIE1heGltYWwgbW91bnQgY291bnQgKi8KKwlfX3UxNglzX21hZ2ljOwkJLyogTWFnaWMgc2lnbmF0dXJlICovCisJX191MTYJc19zdGF0ZTsJCS8qIEZpbGUgc3lzdGVtIHN0YXRlICovCisJX191MTYJc19lcnJvcnM7CQkvKiBCZWhhdmlvdXIgd2hlbiBkZXRlY3RpbmcgZXJyb3JzICovCisJX191MTYJc19taW5vcl9yZXZfbGV2ZWw7CS8qIG1pbm9yIHJldmlzaW9uIGxldmVsICovCisJX191MzIJc19sYXN0Y2hlY2s7CQkvKiB0aW1lIG9mIGxhc3QgY2hlY2sgKi8KKwlfX3UzMglzX2NoZWNraW50ZXJ2YWw7CS8qIG1heC4gdGltZSBiZXR3ZWVuIGNoZWNrcyAqLworCV9fdTMyCXNfY3JlYXRvcl9vczsJCS8qIE9TICovCisJX191MzIJc19yZXZfbGV2ZWw7CQkvKiBSZXZpc2lvbiBsZXZlbCAqLworCV9fdTE2CXNfZGVmX3Jlc3VpZDsJCS8qIERlZmF1bHQgdWlkIGZvciByZXNlcnZlZCBibG9ja3MgKi8KKwlfX3UxNglzX2RlZl9yZXNnaWQ7CQkvKiBEZWZhdWx0IGdpZCBmb3IgcmVzZXJ2ZWQgYmxvY2tzICovCisJLyoKKwkgKiBUaGVzZSBmaWVsZHMgYXJlIGZvciBFWFQyX0RZTkFNSUNfUkVWIHN1cGVyYmxvY2tzIG9ubHkuCisJICoKKwkgKiBOb3RlOiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjb21wYXRpYmxlIGZlYXR1cmUgc2V0IGFuZAorCSAqIHRoZSBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgaXMgdGhhdCBpZiB0aGVyZSBpcyBhIGJpdCBzZXQKKwkgKiBpbiB0aGUgaW5jb21wYXRpYmxlIGZlYXR1cmUgc2V0IHRoYXQgdGhlIGtlcm5lbCBkb2Vzbid0CisJICoga25vdyBhYm91dCwgaXQgc2hvdWxkIHJlZnVzZSB0byBtb3VudCB0aGUgZmlsZXN5c3RlbS4KKwkgKgorCSAqIGUyZnNjaydzIHJlcXVpcmVtZW50cyBhcmUgbW9yZSBzdHJpY3Q7IGlmIGl0IGRvZXNuJ3Qga25vdworCSAqIGFib3V0IGEgZmVhdHVyZSBpbiBlaXRoZXIgdGhlIGNvbXBhdGlibGUgb3IgaW5jb21wYXRpYmxlCisJICogZmVhdHVyZSBzZXQsIGl0IG11c3QgYWJvcnQgYW5kIG5vdCB0cnkgdG8gbWVkZGxlIHdpdGgKKwkgKiB0aGluZ3MgaXQgZG9lc24ndCB1bmRlcnN0YW5kLi4uCisJICovCisJX191MzIJc19maXJzdF9pbm87CQkvKiBGaXJzdCBub24tcmVzZXJ2ZWQgaW5vZGUgKi8KKwlfX3UxNiAgIHNfaW5vZGVfc2l6ZTsJCS8qIHNpemUgb2YgaW5vZGUgc3RydWN0dXJlICovCisJX191MTYJc19ibG9ja19ncm91cF9ucjsJLyogYmxvY2sgZ3JvdXAgIyBvZiB0aGlzIHN1cGVyYmxvY2sgKi8KKwlfX3UzMglzX2ZlYXR1cmVfY29tcGF0OwkvKiBjb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCisJX191MzIJc19mZWF0dXJlX2luY29tcGF0OwkvKiBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKwlfX3UzMglzX2ZlYXR1cmVfcm9fY29tcGF0OwkvKiByZWFkb25seS1jb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCisJX191OAlzX3V1aWRbMTZdOwkJLyogMTI4LWJpdCB1dWlkIGZvciB2b2x1bWUgKi8KKwljaGFyCXNfdm9sdW1lX25hbWVbMTZdOwkvKiB2b2x1bWUgbmFtZSAqLworCWNoYXIJc19sYXN0X21vdW50ZWRbNjRdOwkvKiBkaXJlY3Rvcnkgd2hlcmUgbGFzdCBtb3VudGVkICovCisJX191MzIJc19hbGdvcml0aG1fdXNhZ2VfYml0bWFwOyAvKiBGb3IgY29tcHJlc3Npb24gKi8KKwkvKgorCSAqIFBlcmZvcm1hbmNlIGhpbnRzLiAgRGlyZWN0b3J5IHByZWFsbG9jYXRpb24gc2hvdWxkIG9ubHkKKwkgKiBoYXBwZW4gaWYgdGhlIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX1BSRUFMTE9DIGZsYWcgaXMgb24uCisJICovCisJX191OAlzX3ByZWFsbG9jX2Jsb2NrczsJLyogTnIgb2YgYmxvY2tzIHRvIHRyeSB0byBwcmVhbGxvY2F0ZSovCisJX191OAlzX3ByZWFsbG9jX2Rpcl9ibG9ja3M7CS8qIE5yIHRvIHByZWFsbG9jYXRlIGZvciBkaXJzICovCisJX191MTYJc19yZXNlcnZlZF9nZHRfYmxvY2tzOwkvKiBQZXIgZ3JvdXAgdGFibGUgZm9yIG9ubGluZSBncm93dGggKi8KKwkvKgorCSAqIEpvdXJuYWxpbmcgc3VwcG9ydCB2YWxpZCBpZiBFWFQyX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMIHNldC4KKwkgKi8KKwlfX3U4CXNfam91cm5hbF91dWlkWzE2XTsJLyogdXVpZCBvZiBqb3VybmFsIHN1cGVyYmxvY2sgKi8KKwlfX3UzMglzX2pvdXJuYWxfaW51bTsJCS8qIGlub2RlIG51bWJlciBvZiBqb3VybmFsIGZpbGUgKi8KKwlfX3UzMglzX2pvdXJuYWxfZGV2OwkJLyogZGV2aWNlIG51bWJlciBvZiBqb3VybmFsIGZpbGUgKi8KKwlfX3UzMglzX2xhc3Rfb3JwaGFuOwkJLyogc3RhcnQgb2YgbGlzdCBvZiBpbm9kZXMgdG8gZGVsZXRlICovCisJX191MzIJc19oYXNoX3NlZWRbNF07CQkvKiBIVFJFRSBoYXNoIHNlZWQgKi8KKwlfX3U4CXNfZGVmX2hhc2hfdmVyc2lvbjsJLyogRGVmYXVsdCBoYXNoIHZlcnNpb24gdG8gdXNlICovCisJX191OAlzX2pubF9iYWNrdXBfdHlwZTsgCS8qIERlZmF1bHQgdHlwZSBvZiBqb3VybmFsIGJhY2t1cCAqLworCV9fdTE2CXNfZGVzY19zaXplOwkJLyogR3JvdXAgZGVzYy4gc2l6ZTogSU5DT01QQVRfNjRCSVQgKi8KKwlfX3UzMglzX2RlZmF1bHRfbW91bnRfb3B0czsKKwlfX3UzMglzX2ZpcnN0X21ldGFfYmc7CS8qIEZpcnN0IG1ldGFibG9jayBncm91cCAqLworCV9fdTMyCXNfbWtmc190aW1lOwkJLyogV2hlbiB0aGUgZmlsZXN5c3RlbSB3YXMgY3JlYXRlZCAqLworCV9fdTMyCXNfam5sX2Jsb2Nrc1sxN107IAkvKiBCYWNrdXAgb2YgdGhlIGpvdXJuYWwgaW5vZGUgKi8KKwlfX3UzMglzX2Jsb2Nrc19jb3VudF9oaTsJLyogQmxvY2tzIGNvdW50IGhpZ2ggMzJiaXRzICovCisJX191MzIJc19yX2Jsb2Nrc19jb3VudF9oaTsJLyogUmVzZXJ2ZWQgYmxvY2tzIGNvdW50IGhpZ2ggMzIgYml0cyovCisJX191MzIJc19mcmVlX2Jsb2Nrc19oaTsgCS8qIEZyZWUgYmxvY2tzIGNvdW50ICovCisJX191MTYJc19taW5fZXh0cmFfaXNpemU7CS8qIEFsbCBpbm9kZXMgaGF2ZSBhdCBsZWFzdCAjIGJ5dGVzICovCisJX191MTYJc193YW50X2V4dHJhX2lzaXplOyAJLyogTmV3IGlub2RlcyBzaG91bGQgcmVzZXJ2ZSAjIGJ5dGVzICovCisJX191MzIJc19mbGFnczsJCS8qIE1pc2NlbGxhbmVvdXMgZmxhZ3MgKi8KKwlfX3UxNiAgIHNfcmFpZF9zdHJpZGU7CQkvKiBSQUlEIHN0cmlkZSAqLworCV9fdTE2ICAgc19tbXBfdXBkYXRlX2ludGVydmFsOyAgLyogIyBzZWNvbmRzIHRvIHdhaXQgaW4gTU1QIGNoZWNraW5nICovCisJX191NjQgICBzX21tcF9ibG9jazsgICAgICAgICAgICAvKiBCbG9jayBmb3IgbXVsdGktbW91bnQgcHJvdGVjdGlvbiAqLworCV9fdTMyICAgc19yYWlkX3N0cmlwZV93aWR0aDsgICAgLyogYmxvY2tzIG9uIGFsbCBkYXRhIGRpc2tzIChOKnN0cmlkZSkqLworCV9fdTgJc19sb2dfZ3JvdXBzX3Blcl9mbGV4OwkvKiBGTEVYX0JHIGdyb3VwIHNpemUgKi8KKwlfX3U4ICAgIHNfcmVzZXJ2ZWRfY2hhcl9wYWQ7CisJX191MTYJc19yZXNlcnZlZF9wYWQ7CQkvKiBQYWRkaW5nIHRvIG5leHQgMzJiaXRzICovCisJX191NjQJc19rYnl0ZXNfd3JpdHRlbjsJLyogbnIgb2YgbGlmZXRpbWUga2lsb2J5dGVzIHdyaXR0ZW4gKi8KKwlfX3UzMglzX3NuYXBzaG90X2ludW07CS8qIElub2RlIG51bWJlciBvZiBhY3RpdmUgc25hcHNob3QgKi8KKwlfX3UzMglzX3NuYXBzaG90X2lkOwkJLyogc2VxdWVudGlhbCBJRCBvZiBhY3RpdmUgc25hcHNob3QgKi8KKwlfX3U2NAlzX3NuYXBzaG90X3JfYmxvY2tzX2NvdW50OyAvKiByZXNlcnZlZCBibG9ja3MgZm9yIGFjdGl2ZQorCQkJCQkgICAgICBzbmFwc2hvdCdzIGZ1dHVyZSB1c2UgKi8KKwlfX3UzMglzX3NuYXBzaG90X2xpc3Q7CS8qIGlub2RlIG51bWJlciBvZiB0aGUgaGVhZCBvZiB0aGUgb24tZGlzayBzbmFwc2hvdCBsaXN0ICovCisjZGVmaW5lIEVYVDRfU19FUlJfU1RBUlQgZXh0NF9vZmZzZXRvZihzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jaywgc19lcnJvcl9jb3VudCkKKwlfX3UzMglzX2Vycm9yX2NvdW50OwkJLyogbnVtYmVyIG9mIGZzIGVycm9ycyAqLworCV9fdTMyCXNfZmlyc3RfZXJyb3JfdGltZTsJLyogZmlyc3QgdGltZSBhbiBlcnJvciBoYXBwZW5lZCAqLworCV9fdTMyCXNfZmlyc3RfZXJyb3JfaW5vOwkvKiBpbm9kZSBpbnZvbHZlZCBpbiBmaXJzdCBlcnJvciAqLworCV9fdTY0CXNfZmlyc3RfZXJyb3JfYmxvY2s7CS8qIGJsb2NrIGludm9sdmVkIG9mIGZpcnN0IGVycm9yICovCisJX191OAlzX2ZpcnN0X2Vycm9yX2Z1bmNbMzJdOwkvKiBmdW5jdGlvbiB3aGVyZSB0aGUgZXJyb3IgaGFwcGVuZWQgKi8KKwlfX3UzMglzX2ZpcnN0X2Vycm9yX2xpbmU7CS8qIGxpbmUgbnVtYmVyIHdoZXJlIGVycm9yIGhhcHBlbmVkICovCisJX191MzIJc19sYXN0X2Vycm9yX3RpbWU7CS8qIG1vc3QgcmVjZW50IHRpbWUgb2YgYW4gZXJyb3IgKi8KKwlfX3UzMglzX2xhc3RfZXJyb3JfaW5vOwkvKiBpbm9kZSBpbnZvbHZlZCBpbiBsYXN0IGVycm9yICovCisJX191MzIJc19sYXN0X2Vycm9yX2xpbmU7CS8qIGxpbmUgbnVtYmVyIHdoZXJlIGVycm9yIGhhcHBlbmVkICovCisJX191NjQJc19sYXN0X2Vycm9yX2Jsb2NrOwkvKiBibG9jayBpbnZvbHZlZCBvZiBsYXN0IGVycm9yICovCisJX191OAlzX2xhc3RfZXJyb3JfZnVuY1szMl07CS8qIGZ1bmN0aW9uIHdoZXJlIHRoZSBlcnJvciBoYXBwZW5lZCAqLworI2RlZmluZSBFWFQ0X1NfRVJSX0VORCBleHQ0X29mZnNldG9mKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrLCBzX21vdW50X29wdHMpCisJX191OAlzX21vdW50X29wdHNbNjRdOworCV9fdTMyCXNfdXNyX3F1b3RhX2ludW07CS8qIGlub2RlIG51bWJlciBvZiB1c2VyIHF1b3RhIGZpbGUgKi8KKwlfX3UzMglzX2dycF9xdW90YV9pbnVtOwkvKiBpbm9kZSBudW1iZXIgb2YgZ3JvdXAgcXVvdGEgZmlsZSAqLworCV9fdTMyCXNfb3ZlcmhlYWRfYmxvY2tzOwkvKiBvdmVyaGVhZCBibG9ja3MvY2x1c3RlcnMgaW4gZnMgKi8KKwlfX3UzMglzX2JhY2t1cF9iZ3NbMl07CS8qIElmIHNwYXJzZV9zdXBlcjIgZW5hYmxlZCAqLworCV9fdTMyICAgc19yZXNlcnZlZFsxMDZdOyAgICAgICAgLyogUGFkZGluZyB0byB0aGUgZW5kIG9mIHRoZSBibG9jayAqLworCV9fdTMyCXNfY2hlY2tzdW07CQkvKiBjcmMzMmMoc3VwZXJibG9jaykgKi8KK307CisKKyNkZWZpbmUgRVhUNF9TX0VSUl9MRU4gKEVYVDRfU19FUlJfRU5EIC0gRVhUNF9TX0VSUl9TVEFSVCkKKworLyoKKyAqIENvZGVzIGZvciBvcGVyYXRpbmcgc3lzdGVtcworICovCisjZGVmaW5lIEVYVDJfT1NfTElOVVgJCTAKKyNkZWZpbmUgRVhUMl9PU19IVVJECQkxCisjZGVmaW5lIEVYVDJfT0JTT19PU19NQVNJWAkyCisjZGVmaW5lIEVYVDJfT1NfRlJFRUJTRAkJMworI2RlZmluZSBFWFQyX09TX0xJVEVTCQk0CisKKy8qCisgKiBSZXZpc2lvbiBsZXZlbHMKKyAqLworI2RlZmluZSBFWFQyX0dPT0RfT0xEX1JFVgkwCS8qIFRoZSBnb29kIG9sZCAob3JpZ2luYWwpIGZvcm1hdCAqLworI2RlZmluZSBFWFQyX0RZTkFNSUNfUkVWCTEJLyogVjIgZm9ybWF0IHcvIGR5bmFtaWMgaW5vZGUgc2l6ZXMgKi8KKworI2RlZmluZSBFWFQyX0NVUlJFTlRfUkVWCUVYVDJfR09PRF9PTERfUkVWCisjZGVmaW5lIEVYVDJfTUFYX1NVUFBfUkVWCUVYVDJfRFlOQU1JQ19SRVYKKworI2RlZmluZSBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgMTI4CisKKy8qCisgKiBKb3VybmFsIGlub2RlIGJhY2t1cCB0eXBlcworICovCisjZGVmaW5lIEVYVDNfSk5MX0JBQ0tVUF9CTE9DS1MJMQorCisvKgorICogRmVhdHVyZSBzZXQgZGVmaW5pdGlvbnMKKyAqLworCisjZGVmaW5lIEVYVDJfSEFTX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spCQkJXAorCSggRVhUMl9TQihzYiktPnNfZmVhdHVyZV9jb21wYXQgJiAobWFzaykgKQorI2RlZmluZSBFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShzYixtYXNrKQkJCVwKKwkoIEVYVDJfU0Ioc2IpLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgKG1hc2spICkKKyNkZWZpbmUgRVhUMl9IQVNfSU5DT01QQVRfRkVBVFVSRShzYixtYXNrKQkJCVwKKwkoIEVYVDJfU0Ioc2IpLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiAobWFzaykgKQorCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX1BSRUFMTE9DCTB4MDAwMQorI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0lNQUdJQ19JTk9ERVMJMHgwMDAyCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwJCTB4MDAwNAorI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0VYVF9BVFRSCQkweDAwMDgKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREUJMHgwMDEwCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYCQkweDAwMjAKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9MQVpZX0JHCQkweDAwNDAKKy8qICNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9FWENMVURFX0lOT0RFCTB4MDA4MCBub3QgdXNlZCwgbGVnYWN5ICovCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfRVhDTFVERV9CSVRNQVAJMHgwMTAwCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9DT01QQVRfU1BBUlNFX1NVUEVSMgkweDAyMDAKKworCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSCTB4MDAwMQorI2RlZmluZSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEUJMHgwMDAyCisvKiAjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfQlRSRUVfRElSCTB4MDAwNCBub3QgdXNlZCAqLworI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRQkweDAwMDgKKyNkZWZpbmUgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTQkJMHgwMDEwCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfRElSX05MSU5LCTB4MDAyMAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0VYVFJBX0lTSVpFCTB4MDA0MAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hBU19TTkFQU0hPVAkweDAwODAKKyNkZWZpbmUgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9RVU9UQQkJMHgwMTAwCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MJCTB4MDIwMAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX01FVEFEQVRBX0NTVU0JMHgwNDAwCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfUkVQTElDQQkJMHgwODAwCisKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0NPTVBSRVNTSU9OCTB4MDAwMQorI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUJCTB4MDAwMgorI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUgkJMHgwMDA0IC8qIE5lZWRzIHJlY292ZXJ5ICovCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVgkweDAwMDggLyogSm91cm5hbCBkZXZpY2UgKi8KKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcJCTB4MDAxMAorI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUwkJMHgwMDQwCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVAkJMHgwMDgwCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9NTVAJCTB4MDEwMAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRwkJMHgwMjAwCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FQV9JTk9ERQkJMHgwNDAwCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9ESVJEQVRBCQkweDEwMDAKKy8qIDB4MjAwMCB3YXMgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0JHX1VTRV9NRVRBX0NTVU0gYnV0IHRoaXMgd2FzIG5ldmVyIHVzZWQgKi8KKyNkZWZpbmUgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0xBUkdFRElSCQkweDQwMDAgLyogPjJHQiBvciAzLWx2bCBodHJlZSAqLworI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfSU5MSU5FREFUQQkweDgwMDAgLyogZGF0YSBpbiBpbm9kZSAqLworCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfU1VQUAkwCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9TVVBQICAgIChFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEV8IFwKKwkJCQkgICAgICAgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01NUCkKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TVVBQCShFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUnwgXAorCQkJCQkgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFfCBcCisJCQkJCSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0RJUl9OTElOS3wgXAorCQkJCQkgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIpCisKKy8qCisgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdXNlciBhbmQvb3IgZ3JvdXAgdXNpbmcgcmVzZXJ2ZWQgYmxvY2tzCisgKi8KKyNkZWZpbmUgRVhUMl9ERUZfUkVTVUlECQkwCisjZGVmaW5lIEVYVDJfREVGX1JFU0dJRAkJMAorCisvKgorICogRGVmYXVsdCBtb3VudCBvcHRpb25zCisgKi8KKyNkZWZpbmUgRVhUMl9ERUZNX0RFQlVHCQkweDAwMDEKKyNkZWZpbmUgRVhUMl9ERUZNX0JTREdST1VQUwkweDAwMDIKKyNkZWZpbmUgRVhUMl9ERUZNX1hBVFRSX1VTRVIJMHgwMDA0CisjZGVmaW5lIEVYVDJfREVGTV9BQ0wJCTB4MDAwOAorI2RlZmluZSBFWFQyX0RFRk1fVUlEMTYJCTB4MDAxMAorI2RlZmluZSBFWFQzX0RFRk1fSk1PREUJCTB4MDA2MAorI2RlZmluZSBFWFQzX0RFRk1fSk1PREVfREFUQQkweDAwMjAKKyNkZWZpbmUgRVhUM19ERUZNX0pNT0RFX09SREVSRUQJMHgwMDQwCisjZGVmaW5lIEVYVDNfREVGTV9KTU9ERV9XQkFDSwkweDAwNjAKKyNkZWZpbmUgRVhUNF9ERUZNX05PQkFSUklFUgkweDAxMDAKKyNkZWZpbmUgRVhUNF9ERUZNX0JMT0NLX1ZBTElESVRZIDB4MDIwMAorI2RlZmluZSBFWFQ0X0RFRk1fRElTQ0FSRAkweDA0MDAKKyNkZWZpbmUgRVhUNF9ERUZNX05PREVMQUxMT0MJMHgwODAwCisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgYSBkaXJlY3RvcnkgZW50cnkKKyAqLworI2RlZmluZSBFWFQyX05BTUVfTEVOIDI1NQorCitzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgeworCV9fdTMyCWlub2RlOwkJCS8qIElub2RlIG51bWJlciAqLworCV9fdTE2CXJlY19sZW47CQkvKiBEaXJlY3RvcnkgZW50cnkgbGVuZ3RoICovCisJX191MTYJbmFtZV9sZW47CQkvKiBOYW1lIGxlbmd0aCAqLworCWNoYXIJbmFtZVtFWFQyX05BTUVfTEVOXTsJLyogRmlsZSBuYW1lICovCit9OworCisvKgorICogVGhlIG5ldyB2ZXJzaW9uIG9mIHRoZSBkaXJlY3RvcnkgZW50cnkuICBTaW5jZSBFWFQyIHN0cnVjdHVyZXMgYXJlCisgKiBzdG9yZWQgaW4gaW50ZWwgYnl0ZSBvcmRlciwgYW5kIHRoZSBuYW1lX2xlbiBmaWVsZCBjb3VsZCBuZXZlciBiZQorICogYmlnZ2VyIHRoYW4gMjU1IGNoYXJzLCBpdCdzIHNhZmUgdG8gcmVjbGFpbSB0aGUgZXh0cmEgYnl0ZSBmb3IgdGhlCisgKiBmaWxlX3R5cGUgZmllbGQuCisgKi8KK3N0cnVjdCBleHQyX2Rpcl9lbnRyeV8yIHsKKwlfX3UzMglpbm9kZTsJCQkvKiBJbm9kZSBudW1iZXIgKi8KKwlfX3UxNglyZWNfbGVuOwkJLyogRGlyZWN0b3J5IGVudHJ5IGxlbmd0aCAqLworCV9fdTgJbmFtZV9sZW47CQkvKiBOYW1lIGxlbmd0aCAqLworCV9fdTgJZmlsZV90eXBlOworCWNoYXIJbmFtZVtFWFQyX05BTUVfTEVOXTsJLyogRmlsZSBuYW1lICovCit9OworCisvKgorICogRXh0MiBkaXJlY3RvcnkgZmlsZSB0eXBlcy4gIE9ubHkgdGhlIGxvdyAzIGJpdHMgYXJlIHVzZWQuICBUaGUKKyAqIG90aGVyIGJpdHMgYXJlIHJlc2VydmVkIGZvciBub3cuCisgKi8KKyNkZWZpbmUgRVhUMl9GVF9VTktOT1dOCQkwCisjZGVmaW5lIEVYVDJfRlRfUkVHX0ZJTEUJMQorI2RlZmluZSBFWFQyX0ZUX0RJUgkJMgorI2RlZmluZSBFWFQyX0ZUX0NIUkRFVgkJMworI2RlZmluZSBFWFQyX0ZUX0JMS0RFVgkJNAorI2RlZmluZSBFWFQyX0ZUX0ZJRk8JCTUKKyNkZWZpbmUgRVhUMl9GVF9TT0NLCQk2CisjZGVmaW5lIEVYVDJfRlRfU1lNTElOSwkJNworCisjZGVmaW5lIEVYVDJfRlRfTUFYCQk4CisKKy8qCisgKiBFWFQyX0RJUl9QQUQgZGVmaW5lcyB0aGUgZGlyZWN0b3J5IGVudHJpZXMgYm91bmRhcmllcworICoKKyAqIE5PVEU6IEl0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0CisgKi8KKyNkZWZpbmUgRVhUMl9ESVJfUEFECQkJNAorI2RlZmluZSBFWFQyX0RJUl9ST1VORAkJCShFWFQyX0RJUl9QQUQgLSAxKQorI2RlZmluZSBFWFQyX0RJUl9SRUNfTEVOKG5hbWVfbGVuKQkoKChuYW1lX2xlbikgKyA4ICsgRVhUMl9ESVJfUk9VTkQpICYgXAorCQkJCQkgfkVYVDJfRElSX1JPVU5EKQorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbi4gSXQgaXMgd3JpdHRlbgorICogaW50byB0aGUgYmxvY2sgbnVtYmVyIHNhdmVkIGluIHRoZSBzX21tcF9ibG9jayBmaWVsZCBpbiB0aGUgc3VwZXJibG9jay4KKyAqIFByb2dyYW1zIHRoYXQgY2hlY2sgTU1QIHNob3VsZCBhc3N1bWUgdGhhdCBpZiBTRVFfRlNDSyAob3IgYW55IHVua25vd24KKyAqIGNvZGUgYWJvdmUgU0VRX01BWCkgaXMgcHJlc2VudCB0aGVuIGl0IGlzIE5PVCBzYWZlIHRvIHVzZSB0aGUgZmlsZXN5c3RlbSwKKyAqIHJlZ2FyZGxlc3Mgb2YgaG93IG9sZCB0aGUgdGltZXN0YW1wIGlzLgorICoKKyAqIFRoZSB0aW1lc3RhbXAgaW4gdGhlIE1NUCBzdHJ1Y3R1cmUgd2lsbCBiZSB1cGRhdGVkIGJ5IGUyZnNjayBhdCBzb21lCisgKiBhcmJpdGFyeSBpbnRlcnZhbHMgKHN0YXJ0IG9mIHBhc3NlcywgYWZ0ZXIgZXZlcnkgZmV3IGdyb3VwcyBvZiBpbm9kZXMKKyAqIGluIHBhc3MxIGFuZCBwYXNzMWIpLiAgVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgZTJmc2NrIGlzIHVwZGF0aW5nCisgKiB0aGUgTU1QIGJsb2NrIGluIGEgdGltZWx5IG1hbm5lciwgYW5kIHRoZSB1cGRhdGVzIGl0IGRvZXMgYXJlIHB1cmVseQorICogZm9yIHRoZSBjb252ZW5pZW5jZSBvZiB0aGUgc3lzYWRtaW4gYW5kIG5vdCBmb3IgYXV0b21hdGljIHZhbGlkYXRpb24uCisgKgorICogTm90ZTogT25seSB0aGUgbW1wX3NlcSB2YWx1ZSBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBNTVAgYmxvY2sKKyAqCWlzIGJlaW5nIHVwZGF0ZWQuICBUaGUgbW1wX3RpbWUsIG1tcF9ub2RlbmFtZSwgYW5kIG1tcF9iZGV2bmFtZQorICoJZmllbGRzIGFyZSBvbmx5IGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIGZvciB0aGUgYWRtaW5pc3RyYXRvciwKKyAqCWR1ZSB0byBjbG9jayBza2V3IGJldHdlZW4gbm9kZXMgYW5kIGhvc3RuYW1lIEhBIHNlcnZpY2UgdGFrZW92ZXIuCisgKi8KKyNkZWZpbmUgRVhUNF9NTVBfTUFHSUMgICAgIDB4MDA0RDRENTBVIC8qIEFTQ0lJIGZvciBNTVAgKi8KKyNkZWZpbmUgRVhUNF9NTVBfU0VRX0NMRUFOIDB4RkY0RDRENTBVIC8qIG1tcF9zZXEgdmFsdWUgZm9yIGNsZWFuIHVubW91bnQgKi8KKyNkZWZpbmUgRVhUNF9NTVBfU0VRX0ZTQ0sgIDB4RTI0RDRENTBVIC8qIG1tcF9zZXEgdmFsdWUgd2hlbiBiZWluZyBmc2NrZWQgKi8KKyNkZWZpbmUgRVhUNF9NTVBfU0VRX01BWCAgIDB4RTI0RDRENEZVIC8qIG1heGltdW0gdmFsaWQgbW1wX3NlcSB2YWx1ZSAqLworCitzdHJ1Y3QgbW1wX3N0cnVjdCB7CisJX191MzIJbW1wX21hZ2ljOwkJLyogTWFnaWMgbnVtYmVyIGZvciBNTVAgKi8KKwlfX3UzMgltbXBfc2VxOwkJLyogU2VxdWVuY2Ugbm8uIHVwZGF0ZWQgcGVyaW9kaWNhbGx5ICovCisJX191NjQJbW1wX3RpbWU7CQkvKiBUaW1lIGxhc3QgdXBkYXRlZCAqLworCWNoYXIJbW1wX25vZGVuYW1lWzY0XTsJLyogTm9kZSB3aGljaCBsYXN0IHVwZGF0ZWQgTU1QIGJsb2NrICovCisJY2hhcgltbXBfYmRldm5hbWVbMzJdOwkvKiBCZGV2IHdoaWNoIGxhc3QgdXBkYXRlZCBNTVAgYmxvY2sgKi8KKwlfX3UxNgltbXBfY2hlY2tfaW50ZXJ2YWw7CS8qIENoYW5nZWQgbW1wX2NoZWNrX2ludGVydmFsICovCisJX191MTYJbW1wX3BhZDE7CisJX191MzIJbW1wX3BhZDJbMjI3XTsKK307CisKKy8qCisgKiBEZWZhdWx0IGludGVydmFsIGZvciBNTVAgdXBkYXRlIGluIHNlY29uZHMuCisgKi8KKyNkZWZpbmUgRVhUNF9NTVBfVVBEQVRFX0lOVEVSVkFMCTUKKworLyoKKyAqIE1heGltdW0gaW50ZXJ2YWwgZm9yIE1NUCB1cGRhdGUgaW4gc2Vjb25kcy4KKyAqLworI2RlZmluZSBFWFQ0X01NUF9NQVhfVVBEQVRFX0lOVEVSVkFMCTMwMAorCisvKgorICogTWluaW11bSBpbnRlcnZhbCBmb3IgTU1QIGNoZWNraW5nIGluIHNlY29uZHMuCisgKi8KKyNkZWZpbmUgRVhUNF9NTVBfTUlOX0NIRUNLX0lOVEVSVkFMICAgICA1CisKKyNlbmRpZgkvKiBfTElOVVhfRVhUMl9GU19IICovCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2V4dDJfaW8uaCBiL2xpYi9leHQyZnMvZXh0Ml9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OTRmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2V4dDJfaW8uaApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIGlvLmggLS0tIHRoZSBJL08gbWFuYWdlciBhYnN0cmFjdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2lmbmRlZiBfRVhUMkZTX0VYVDJfSU9fSAorI2RlZmluZSBfRVhUMkZTX0VYVDJfSU9fSAorCisvKgorICogZXh0Ml9sb2ZmX3QgaXMgZGVmaW5lZCBoZXJlIHNpbmNlIHVuaXhfaW8uYyBuZWVkcyBpdC4KKyAqLworI2lmIGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoSEFTX0xPTkdfTE9ORykKK3R5cGVkZWYgbG9uZyBsb25nCWV4dDJfbG9mZl90OworI2Vsc2UKK3R5cGVkZWYgbG9uZwkJZXh0Ml9sb2ZmX3Q7CisjZW5kaWYKKworLyogbGxzZWVrLmMgKi8KK2V4dDJfbG9mZl90IGV4dDJmc19sbHNlZWsgKGludCwgZXh0Ml9sb2ZmX3QsIGludCk7CisKK3R5cGVkZWYgc3RydWN0IHN0cnVjdF9pb19tYW5hZ2VyICppb19tYW5hZ2VyOwordHlwZWRlZiBzdHJ1Y3Qgc3RydWN0X2lvX2NoYW5uZWwgKmlvX2NoYW5uZWw7Cit0eXBlZGVmIHN0cnVjdCBzdHJ1Y3RfaW9fc3RhdHMgKmlvX3N0YXRzOworCisjZGVmaW5lIENIQU5ORUxfRkxBR1NfV1JJVEVUSFJPVUdICTB4MDEKKyNkZWZpbmUgQ0hBTk5FTF9GTEFHU19ESVNDQVJEX1pFUk9FUwkweDAyCisjZGVmaW5lIENIQU5ORUxfRkxBR1NfQkxPQ0tfREVWSUNFCTB4MDQKKworI2RlZmluZSBpb19jaGFubmVsX2Rpc2NhcmRfemVyb2VzX2RhdGEoaSkgKGktPmZsYWdzICYgQ0hBTk5FTF9GTEFHU19ESVNDQVJEX1pFUk9FUykKKworc3RydWN0IHN0cnVjdF9pb19jaGFubmVsIHsKKwllcnJjb2RlX3QJbWFnaWM7CisJaW9fbWFuYWdlcgltYW5hZ2VyOworCWNoYXIJCSpuYW1lOworCWludAkJYmxvY2tfc2l6ZTsKKwllcnJjb2RlX3QJKCpyZWFkX2Vycm9yKShpb19jaGFubmVsIGNoYW5uZWwsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBibG9jaywKKwkJCQkgICAgICBpbnQgY291bnQsCisJCQkJICAgICAgdm9pZCAqZGF0YSwKKwkJCQkgICAgICBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICBpbnQgYWN0dWFsX2J5dGVzX3JlYWQsCisJCQkJICAgICAgZXJyY29kZV90CWVycm9yKTsKKwllcnJjb2RlX3QJKCp3cml0ZV9lcnJvcikoaW9fY2hhbm5lbCBjaGFubmVsLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJCSAgICAgICBpbnQgY291bnQsCisJCQkJICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkJICAgICAgIHNpemVfdCBzaXplLAorCQkJCSAgICAgICBpbnQgYWN0dWFsX2J5dGVzX3dyaXR0ZW4sCisJCQkJICAgICAgIGVycmNvZGVfdCBlcnJvcik7CisJaW50CQlyZWZjb3VudDsKKwlpbnQJCWZsYWdzOworCWxvbmcJCXJlc2VydmVkWzE0XTsKKwl2b2lkCQkqcHJpdmF0ZV9kYXRhOworCXZvaWQJCSphcHBfZGF0YTsKKwlpbnQJCWFsaWduOworfTsKKworc3RydWN0IHN0cnVjdF9pb19zdGF0cyB7CisJaW50CQkJbnVtX2ZpZWxkczsKKwlpbnQJCQlyZXNlcnZlZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcJYnl0ZXNfcmVhZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcJYnl0ZXNfd3JpdHRlbjsKK307CisKK3N0cnVjdCBzdHJ1Y3RfaW9fbWFuYWdlciB7CisJZXJyY29kZV90IG1hZ2ljOworCWNvbnN0IGNoYXIgKm5hbWU7CisJZXJyY29kZV90ICgqb3BlbikoY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLCBpb19jaGFubmVsICpjaGFubmVsKTsKKwllcnJjb2RlX3QgKCpjbG9zZSkoaW9fY2hhbm5lbCBjaGFubmVsKTsKKwllcnJjb2RlX3QgKCpzZXRfYmxrc2l6ZSkoaW9fY2hhbm5lbCBjaGFubmVsLCBpbnQgYmxrc2l6ZSk7CisJZXJyY29kZV90ICgqcmVhZF9ibGspKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBibG9jaywKKwkJCSAgICAgIGludCBjb3VudCwgdm9pZCAqZGF0YSk7CisJZXJyY29kZV90ICgqd3JpdGVfYmxrKShpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisJCQkgICAgICAgaW50IGNvdW50LCBjb25zdCB2b2lkICpkYXRhKTsKKwllcnJjb2RlX3QgKCpmbHVzaCkoaW9fY2hhbm5lbCBjaGFubmVsKTsKKwllcnJjb2RlX3QgKCp3cml0ZV9ieXRlKShpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCWludCBjb3VudCwgY29uc3Qgdm9pZCAqZGF0YSk7CisJZXJyY29kZV90ICgqc2V0X29wdGlvbikoaW9fY2hhbm5lbCBjaGFubmVsLCBjb25zdCBjaGFyICpvcHRpb24sCisJCQkJY29uc3QgY2hhciAqYXJnKTsKKwllcnJjb2RlX3QgKCpnZXRfc3RhdHMpKGlvX2NoYW5uZWwgY2hhbm5lbCwgaW9fc3RhdHMgKmlvX3N0YXRzKTsKKwllcnJjb2RlX3QgKCpyZWFkX2JsazY0KShpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCQkJaW50IGNvdW50LCB2b2lkICpkYXRhKTsKKwllcnJjb2RlX3QgKCp3cml0ZV9ibGs2NCkoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssCisJCQkJCWludCBjb3VudCwgY29uc3Qgdm9pZCAqZGF0YSk7CisJZXJyY29kZV90ICgqZGlzY2FyZCkoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBjb3VudCk7CisJbG9uZwlyZXNlcnZlZFsxNl07Cit9OworCisjZGVmaW5lIElPX0ZMQUdfUlcJCTB4MDAwMQorI2RlZmluZSBJT19GTEFHX0VYQ0xVU0lWRQkweDAwMDIKKyNkZWZpbmUgSU9fRkxBR19ESVJFQ1RfSU8JMHgwMDA0CisKKy8qCisgKiBDb252ZW5pZW5jZSBmdW5jdGlvbnMuLi4uCisgKi8KKyNkZWZpbmUgaW9fY2hhbm5lbF9jbG9zZShjKSAJCSgoYyktPm1hbmFnZXItPmNsb3NlKChjKSkpCisjZGVmaW5lIGlvX2NoYW5uZWxfc2V0X2Jsa3NpemUoYyxzKQkoKGMpLT5tYW5hZ2VyLT5zZXRfYmxrc2l6ZSgoYykscykpCisjZGVmaW5lIGlvX2NoYW5uZWxfcmVhZF9ibGsoYyxiLG4sZCkJKChjKS0+bWFuYWdlci0+cmVhZF9ibGsoKGMpLGIsbixkKSkKKyNkZWZpbmUgaW9fY2hhbm5lbF93cml0ZV9ibGsoYyxiLG4sZCkJKChjKS0+bWFuYWdlci0+d3JpdGVfYmxrKChjKSxiLG4sZCkpCisjZGVmaW5lIGlvX2NoYW5uZWxfZmx1c2goYykgCQkoKGMpLT5tYW5hZ2VyLT5mbHVzaCgoYykpKQorI2RlZmluZSBpb19jaGFubmVsX2J1bXBjb3VudChjKQkJKChjKS0+cmVmY291bnQrKykKKworLyogaW9fbWFuYWdlci5jICovCitleHRlcm4gZXJyY29kZV90IGlvX2NoYW5uZWxfc2V0X29wdGlvbnMoaW9fY2hhbm5lbCBjaGFubmVsLAorCQkJCQljb25zdCBjaGFyICpvcHRpb25zKTsKK2V4dGVybiBlcnJjb2RlX3QgaW9fY2hhbm5lbF93cml0ZV9ieXRlKGlvX2NoYW5uZWwgY2hhbm5lbCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJICAgICAgIGludCBjb3VudCwgY29uc3Qgdm9pZCAqZGF0YSk7CitleHRlcm4gZXJyY29kZV90IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChpb19jaGFubmVsIGNoYW5uZWwsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCQkgICAgICAgaW50IGNvdW50LCB2b2lkICpkYXRhKTsKK2V4dGVybiBlcnJjb2RlX3QgaW9fY2hhbm5lbF93cml0ZV9ibGs2NChpb19jaGFubmVsIGNoYW5uZWwsCisJCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCQkJaW50IGNvdW50LCBjb25zdCB2b2lkICpkYXRhKTsKK2V4dGVybiBlcnJjb2RlX3QgaW9fY2hhbm5lbF9kaXNjYXJkKGlvX2NoYW5uZWwgY2hhbm5lbCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGxvbmcgY291bnQpOworZXh0ZXJuIGVycmNvZGVfdCBpb19jaGFubmVsX2FsbG9jX2J1Zihpb19jaGFubmVsIGNoYW5uZWwsCisJCQkJICAgICAgaW50IGNvdW50LCB2b2lkICpwdHIpOworCisvKiB1bml4X2lvLmMgKi8KK2V4dGVybiBpb19tYW5hZ2VyIHVuaXhfaW9fbWFuYWdlcjsKKworLyogdW5kb19pby5jICovCitleHRlcm4gaW9fbWFuYWdlciB1bmRvX2lvX21hbmFnZXI7CitleHRlcm4gZXJyY29kZV90IHNldF91bmRvX2lvX2JhY2tpbmdfbWFuYWdlcihpb19tYW5hZ2VyIG1hbmFnZXIpOworZXh0ZXJuIGVycmNvZGVfdCBzZXRfdW5kb19pb19iYWNrdXBfZmlsZShjaGFyICpmaWxlX25hbWUpOworCisvKiB0ZXN0X2lvLmMgKi8KK2V4dGVybiBpb19tYW5hZ2VyIHRlc3RfaW9fbWFuYWdlciwgdGVzdF9pb19iYWNraW5nX21hbmFnZXI7CitleHRlcm4gdm9pZCAoKnRlc3RfaW9fY2JfcmVhZF9ibGspCisJKHVuc2lnbmVkIGxvbmcgYmxvY2ssIGludCBjb3VudCwgZXJyY29kZV90IGVycik7CitleHRlcm4gdm9pZCAoKnRlc3RfaW9fY2Jfd3JpdGVfYmxrKQorCSh1bnNpZ25lZCBsb25nIGJsb2NrLCBpbnQgY291bnQsIGVycmNvZGVfdCBlcnIpOworZXh0ZXJuIHZvaWQgKCp0ZXN0X2lvX2NiX3JlYWRfYmxrNjQpCisJKHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywgaW50IGNvdW50LCBlcnJjb2RlX3QgZXJyKTsKK2V4dGVybiB2b2lkICgqdGVzdF9pb19jYl93cml0ZV9ibGs2NCkKKwkodW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLCBpbnQgY291bnQsIGVycmNvZGVfdCBlcnIpOworZXh0ZXJuIHZvaWQgKCp0ZXN0X2lvX2NiX3NldF9ibGtzaXplKQorCShpbnQgYmxrc2l6ZSwgZXJyY29kZV90IGVycik7CisKKyNlbmRpZiAvKiBfRVhUMkZTX0VYVDJfSU9fSCAqLworCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaC5pbiBiL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMjA0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaC5pbgpAQCAtMCwwICsxLDE2OSBAQAorLyogCisgKiBJZiBsaW51eC90eXBlcy5oIGlzIGFscmVhZHkgYmVlbiBpbmNsdWRlZCwgYXNzdW1lIGl0IGhhcyBkZWZpbmVkCisgKiBldmVyeXRoaW5nIHdlIG5lZWQuICAoY3Jvc3MgZmluZ2VycykgIE90aGVyIGhlYWRlciBmaWxlcyBtYXkgaGF2ZSAKKyAqIGFsc28gZGVmaW5lZCB0aGUgdHlwZXMgdGhhdCB3ZSBuZWVkLgorICovCisjaWYgKCFkZWZpbmVkKF9MSU5VWF9UWVBFU19IKSAmJiAhZGVmaW5lZChfQkxLSURfVFlQRVNfSCkgJiYgXAorCSFkZWZpbmVkKF9FWFQyX1RZUEVTX0gpKQorI2RlZmluZSBfRVhUMl9UWVBFU19ICisKK0BBU01fVFlQRVNfSEVBREVSQAorCisjaWZuZGVmIEhBVkVfX19VOAorI2RlZmluZSBIQVZFX19fVTgKKyNpZmRlZiBfX1U4X1RZUEVERUYKK3R5cGVkZWYgX19VOF9UWVBFREVGIF9fdTg7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7CisjZW5kaWYKKyNlbmRpZiAvKiBIQVZFX19fVTggKi8KKworI2lmbmRlZiBIQVZFX19fUzgKKyNkZWZpbmUgSEFWRV9fX1M4CisjaWZkZWYgX19TOF9UWVBFREVGCit0eXBlZGVmIF9fUzhfVFlQRURFRiBfX3M4OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgX19zODsKKyNlbmRpZgorI2VuZGlmIC8qIEhBVkVfX19TOCAqLworCisjaWZuZGVmIEhBVkVfX19VMTYKKyNkZWZpbmUgSEFWRV9fX1UxNgorI2lmZGVmIF9fVTE2X1RZUEVERUYKK3R5cGVkZWYgX19VMTZfVFlQRURFRiBfX3UxNjsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfSU5UQCA9PSAyKQordHlwZWRlZgl1bnNpZ25lZCBpbnQJX191MTY7CisjZWxzZQorI2lmIChAU0laRU9GX1NIT1JUQCA9PSAyKQordHlwZWRlZgl1bnNpZ25lZCBzaG9ydAlfX3UxNjsKKyNlbHNlCisjdW5kZWYgSEFWRV9fX1UxNgorICA/PT1lcnJvcjogdW5kZWZpbmVkIDE2IGJpdCB0eXBlCisjZW5kaWYgLyogU0laRU9GX1NIT1JUID09IDIgKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDIgKi8KKyNlbmRpZiAvKiBfX1UxNl9UWVBFREVGICovCisjZW5kaWYgLyogSEFWRV9fX1UxNiAqLworCisjaWZuZGVmIEhBVkVfX19TMTYKKyNkZWZpbmUgSEFWRV9fX1MxNgorI2lmZGVmIF9fUzE2X1RZUEVERUYKK3R5cGVkZWYgX19TMTZfVFlQRURFRiBfX3MxNjsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfSU5UQCA9PSAyKQordHlwZWRlZglpbnQJCV9fczE2OworI2Vsc2UKKyNpZiAoQFNJWkVPRl9TSE9SVEAgPT0gMikKK3R5cGVkZWYJc2hvcnQJCV9fczE2OworI2Vsc2UKKyN1bmRlZiBIQVZFX19fUzE2CisgID89PWVycm9yOiB1bmRlZmluZWQgMTYgYml0IHR5cGUKKyNlbmRpZiAvKiBTSVpFT0ZfU0hPUlQgPT0gMiAqLworI2VuZGlmIC8qIFNJWkVPRl9JTlQgPT0gMiAqLworI2VuZGlmIC8qIF9fUzE2X1RZUEVERUYgKi8KKyNlbmRpZiAvKiBIQVZFX19fUzE2ICovCisKKyNpZm5kZWYgSEFWRV9fX1UzMgorI2RlZmluZSBIQVZFX19fVTMyCisjaWZkZWYgX19VMzJfVFlQRURFRgordHlwZWRlZiBfX1UzMl9UWVBFREVGIF9fdTMyOworI2Vsc2UKKyNpZiAoQFNJWkVPRl9JTlRAID09IDQpCit0eXBlZGVmCXVuc2lnbmVkIGludAlfX3UzMjsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfTE9OR0AgPT0gNCkKK3R5cGVkZWYJdW5zaWduZWQgbG9uZwlfX3UzMjsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfU0hPUlRAID09IDQpCit0eXBlZGVmCXVuc2lnbmVkIHNob3J0CV9fdTMyOworI2Vsc2UKKyN1bmRlZiBIQVZFX19fVTMyCisgPz09IGVycm9yOiB1bmRlZmluZWQgMzIgYml0IHR5cGUKKyNlbmRpZiAvKiBTSVpFT0ZfU0hPUlQgPT0gNCAqLworI2VuZGlmIC8qIFNJWkVPRl9MT05HID09IDQgKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDQgKi8KKyNlbmRpZiAvKiBfX1UzMl9UWVBFREVGICovCisjZW5kaWYgLyogSEFWRV9fX1UzMiAqLworCisjaWZuZGVmIEhBVkVfX19TMzIKKyNkZWZpbmUgSEFWRV9fX1MzMgorI2lmZGVmIF9fUzMyX1RZUEVERUYKK3R5cGVkZWYgX19TMzJfVFlQRURFRiBfX3MzMjsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfSU5UQCA9PSA0KQordHlwZWRlZglpbnQJCV9fczMyOworI2Vsc2UKKyNpZiAoQFNJWkVPRl9MT05HQCA9PSA0KQordHlwZWRlZglsb25nCQlfX3MzMjsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfU0hPUlRAID09IDQpCit0eXBlZGVmCXNob3J0CQlfX3MzMjsKKyNlbHNlCisjdW5kZWYgSEFWRV9fX1MzMgorID89PSBlcnJvcjogdW5kZWZpbmVkIDMyIGJpdCB0eXBlCisjZW5kaWYgLyogU0laRU9GX1NIT1JUID09IDQgKi8KKyNlbmRpZiAvKiBTSVpFT0ZfTE9ORyA9PSA0ICovCisjZW5kaWYgLyogU0laRU9GX0lOVCA9PSA0ICovCisjZW5kaWYgLyogX19TMzJfVFlQRURFRiAqLworI2VuZGlmIC8qIEhBVkVfX19TMzIgKi8KKworI2lmbmRlZiBIQVZFX19fVTY0CisjZGVmaW5lIEhBVkVfX19VNjQKKyNpZmRlZiBfX1U2NF9UWVBFREVGCit0eXBlZGVmIF9fVTY0X1RZUEVERUYgX191NjQ7CisjZWxzZQorI2lmIChAU0laRU9GX0lOVEAgPT0gOCkKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fdTY0OworI2Vsc2UKKyNpZiAoQFNJWkVPRl9MT05HX0xPTkdAID09IDgpCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZwlfX3U2NDsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfTE9OR0AgPT0gOCkKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX3U2NDsKKyNlbHNlCisjdW5kZWYgSEFWRV9fX1U2NAorID89PSBlcnJvcjogdW5kZWZpbmVkIDY0IGJpdCB0eXBlCisjZW5kaWYgLyogU0laRU9GX0xPTkdfTE9ORyA9PSA4ICovCisjZW5kaWYgLyogU0laRU9GX0xPTkcgPT0gOCAqLworI2VuZGlmIC8qIFNJWkVPRl9JTlQgPT0gOCAqLworI2VuZGlmIC8qIF9fVTY0X1RZUEVERUYgKi8KKyNlbmRpZiAvKiBIQVZFX19fVTY0ICovCisKKyNpZm5kZWYgSEFWRV9fX1M2NAorI2RlZmluZSBIQVZFX19fUzY0CisjaWZkZWYgX19TNjRfVFlQRURFRgordHlwZWRlZiBfX1M2NF9UWVBFREVGIF9fczY0OworI2Vsc2UKKyNpZiAoQFNJWkVPRl9JTlRAID09IDgpCit0eXBlZGVmIGludAkJX19zNjQ7CisjZWxzZQorI2lmIChAU0laRU9GX0xPTkdfTE9OR0AgPT0gOCkKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQordHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZwlfX3M2NDsKKyNlbHNlCit0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcJX19zNjQ7CisjZW5kaWYgLyogX19HTlVDX18gKi8KKyNlbHNlCisjaWYgKEBTSVpFT0ZfTE9OR0AgPT0gOCkKK3R5cGVkZWYgbG9uZwkJX19zNjQ7CisjZWxzZQorI3VuZGVmIEhBVkVfX19TNjQKKyA/PT0gZXJyb3I6IHVuZGVmaW5lZCA2NCBiaXQgdHlwZQorI2VuZGlmIC8qIFNJWkVPRl9MT05HX0xPTkcgPT0gOCAqLworI2VuZGlmIC8qIFNJWkVPRl9MT05HID09IDggKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDggKi8KKyNlbmRpZiAvKiBfX1M2NF9UWVBFREVGICovCisjZW5kaWYgLyogSEFWRV9fX1M2NCAqLworCisjdW5kZWYgX19TOF9UWVBFREVGCisjdW5kZWYgX19VOF9UWVBFREVGCisjdW5kZWYgX19TMTZfVFlQRURFRgorI3VuZGVmIF9fVTE2X1RZUEVERUYKKyN1bmRlZiBfX1MzMl9UWVBFREVGCisjdW5kZWYgX19VMzJfVFlQRURFRgorI3VuZGVmIF9fUzY0X1RZUEVERUYKKyN1bmRlZiBfX1U2NF9UWVBFREVGCisKKyNlbmRpZiAvKiBfKl9UWVBFU19IICovCisKK0BQVUJMSUNfQ09ORklHX0hFQURFUkAKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvZXh0MmZzLmggYi9saWIvZXh0MmZzL2V4dDJmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYTM0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2V4dDJmcy5oCkBAIC0wLDAgKzEsMTc2MiBAQAorLyoKKyAqIGV4dDJmcy5oIC0tLSBleHQyZnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpZm5kZWYgX0VYVDJGU19FWFQyRlNfSAorI2RlZmluZSBfRVhUMkZTX0VYVDJGU19ICisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBFWFQyRlNfQVRUUih4KSBfX2F0dHJpYnV0ZV9fKHgpCisjZWxzZQorI2RlZmluZSBFWFQyRlNfQVRUUih4KQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyAqIE5vbi1HTlUgQyBjb21waWxlcnMgd29uJ3QgbmVjZXNzYXJpbHkgdW5kZXJzdGFuZCBpbmxpbmUKKyAqLworI2lmICghZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19XQVRDT01DX18pKQorI2RlZmluZSBOT19JTkxJTkVfRlVOQ1MKKyNlbmRpZgorCisvKgorICogV2hlcmUgdGhlIG1hc3RlciBjb3B5IG9mIHRoZSBzdXBlcmJsb2NrIGlzIGxvY2F0ZWQsIGFuZCBob3cgYmlnCisgKiBzdXBlcmJsb2NrcyBhcmUgc3VwcG9zZWQgdG8gYmUuICBXZSBkZWZpbmUgU1VQRVJCTE9DS19TSVpFIGJlY2F1c2UKKyAqIHRoZSBzaXplIG9mIHRoZSBzdXBlcmJsb2NrIHN0cnVjdHVyZSBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1c3R3b3J0aHkKKyAqIChzb21lIHZlcnNpb25zIGhhdmUgdGhlIHBhZGRpbmcgc2V0IHVwIHNvIHRoYXQgdGhlIHN1cGVyYmxvY2sgaXMKKyAqIDEwMzIgYnl0ZXMgbG9uZykuCisgKi8KKyNkZWZpbmUgU1VQRVJCTE9DS19PRkZTRVQJMTAyNAorI2RlZmluZSBTVVBFUkJMT0NLX1NJWkUJCTEwMjQKKworI2RlZmluZSBVVUlEX1NUUl9TSVpFIDM3CisKKy8qCisgKiBUaGUgbGFzdCBleHQyZnMgcmV2aXNpb24gbGV2ZWwgdGhhdCB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgaXMKKyAqIGFibGUgdG8gc3VwcG9ydC4KKyAqLworI2RlZmluZSBFWFQyX0xJQl9DVVJSRU5UX1JFVglFWFQyX0RZTkFNSUNfUkVWCisKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmIEVYVDJfRkxBVF9JTkNMVURFUworI2luY2x1ZGUgImUyX3R5cGVzLmgiCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDNfZXh0ZW50cy5oIgorI2Vsc2UKKyNpbmNsdWRlIDxleHQyZnMvZXh0Ml90eXBlcy5oPgorI2luY2x1ZGUgPGV4dDJmcy9leHQyX2ZzLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2V4dDNfZXh0ZW50cy5oPgorI2VuZGlmIC8qIEVYVDJfRkxBVF9JTkNMVURFUyAqLworCisjaWZkZWYgX19DSEVDS19FTkRJQU5fXworI2RlZmluZSBfX2JpdHdpc2UgX19hdHRyaWJ1dGVfXygoYml0d2lzZSkpCisjZWxzZQorI2RlZmluZSBfX2JpdHdpc2UKKyNlbmRpZgorCit0eXBlZGVmIF9fdTMyIF9fYml0d2lzZQkJZXh0Ml9pbm9fdDsKK3R5cGVkZWYgX191MzIgX19iaXR3aXNlCQlibGtfdDsKK3R5cGVkZWYgX191NjQgX19iaXR3aXNlCQlibGs2NF90OwordHlwZWRlZiBfX3UzMiBfX2JpdHdpc2UJCWRncnBfdDsKK3R5cGVkZWYgX191MzIgX19iaXR3aXNlCQlleHQyX29mZl90OwordHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UJCWV4dDJfb2ZmNjRfdDsKK3R5cGVkZWYgX19zNjQgX19iaXR3aXNlCQllMl9ibGtjbnRfdDsKK3R5cGVkZWYgX191MzIgX19iaXR3aXNlCQlleHQyX2Rpcmhhc2hfdDsKKworI2lmIEVYVDJfRkxBVF9JTkNMVURFUworI2luY2x1ZGUgImNvbV9lcnIuaCIKKyNpbmNsdWRlICJleHQyX2lvLmgiCisjaW5jbHVkZSAiZXh0Ml9lcnIuaCIKKyNpbmNsdWRlICJleHQyX2V4dF9hdHRyLmgiCisjZWxzZQorI2luY2x1ZGUgPGV0L2NvbV9lcnIuaD4KKyNpbmNsdWRlIDxleHQyZnMvZXh0Ml9pby5oPgorI2luY2x1ZGUgPGV4dDJmcy9leHQyX2Vyci5oPgorI2luY2x1ZGUgPGV4dDJmcy9leHQyX2V4dF9hdHRyLmg+CisjZW5kaWYKKworLyoKKyAqIFBvcnRhYmlsaXR5IGhlbHAgZm9yIE1pY3Jvc29mdCBWaXN1YWwgQysrCisgKi8KKyNpZmRlZiBfTVNDX1ZFUgorI2RlZmluZSBFWFQyX1FTT1JUX1RZUEUgaW50IF9fY2RlY2wKKyNlbHNlCisjZGVmaW5lIEVYVDJfUVNPUlRfVFlQRSBpbnQKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBzdHJ1Y3RfZXh0Ml9maWxzeXMgKmV4dDJfZmlsc3lzOworCisjZGVmaW5lIEVYVDJGU19NQVJLX0VSUk9SIAkwCisjZGVmaW5lIEVYVDJGU19VTk1BUktfRVJST1IgCTEKKyNkZWZpbmUgRVhUMkZTX1RFU1RfRVJST1IJMgorCit0eXBlZGVmIHN0cnVjdCBleHQyZnNfc3RydWN0X2dlbmVyaWNfYml0bWFwICpleHQyZnNfZ2VuZXJpY19iaXRtYXA7Cit0eXBlZGVmIHN0cnVjdCBleHQyZnNfc3RydWN0X2dlbmVyaWNfYml0bWFwICpleHQyZnNfaW5vZGVfYml0bWFwOwordHlwZWRlZiBzdHJ1Y3QgZXh0MmZzX3N0cnVjdF9nZW5lcmljX2JpdG1hcCAqZXh0MmZzX2Jsb2NrX2JpdG1hcDsKKworI2RlZmluZSBFWFQyX0ZJUlNUX0lOT0RFKHMpCUVYVDJfRklSU1RfSU5PKHMpCisKKworLyoKKyAqIEJhZGJsb2NrcyBsaXN0IGRlZmluaXRpb25zCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgZXh0Ml9zdHJ1Y3RfdTMyX2xpc3QgKmV4dDJfYmFkYmxvY2tzX2xpc3Q7Cit0eXBlZGVmIHN0cnVjdCBleHQyX3N0cnVjdF91MzJfaXRlcmF0ZSAqZXh0Ml9iYWRibG9ja3NfaXRlcmF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgZXh0Ml9zdHJ1Y3RfdTMyX2xpc3QgKmV4dDJfdTMyX2xpc3Q7Cit0eXBlZGVmIHN0cnVjdCBleHQyX3N0cnVjdF91MzJfaXRlcmF0ZSAqZXh0Ml91MzJfaXRlcmF0ZTsKKworLyogb2xkICovCit0eXBlZGVmIHN0cnVjdCBleHQyX3N0cnVjdF91MzJfbGlzdCAqYmFkYmxvY2tzX2xpc3Q7Cit0eXBlZGVmIHN0cnVjdCBleHQyX3N0cnVjdF91MzJfaXRlcmF0ZSAqYmFkYmxvY2tzX2l0ZXJhdGU7CisKKyNkZWZpbmUgQkFEQkxPQ0tTX0ZMQUdfRElSVFkJMQorCisvKgorICogZXh0Ml9kYmxpc3Qgc3RydWN0dXJlIGFuZCBhYnN0cmFjdGlvbnMgKHNlZSBkYmxpc3QuYykKKyAqLworc3RydWN0IGV4dDJfZGJfZW50cnkyIHsKKwlleHQyX2lub190CWlubzsKKwlibGs2NF90CWJsazsKKwllMl9ibGtjbnRfdAlibG9ja2NudDsKK307CisKKy8qIFllIE9sZGUgMzItYml0IHZlcnNpb24gKi8KK3N0cnVjdCBleHQyX2RiX2VudHJ5IHsKKwlleHQyX2lub190CWlubzsKKwlibGtfdAlibGs7CisJaW50CWJsb2NrY250OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgZXh0Ml9zdHJ1Y3RfZGJsaXN0ICpleHQyX2RibGlzdDsKKworI2RlZmluZSBEQkxJU1RfQUJPUlQJMQorCisvKgorICogZXh0Ml9maWxlaW8gZGVmaW5pdGlvbnMKKyAqLworCisjZGVmaW5lIEVYVDJfRklMRV9XUklURQkJMHgwMDAxCisjZGVmaW5lIEVYVDJfRklMRV9DUkVBVEUJMHgwMDAyCisKKyNkZWZpbmUgRVhUMl9GSUxFX01BU0sJCTB4MDBGRgorCisjZGVmaW5lIEVYVDJfRklMRV9CVUZfRElSVFkJMHg0MDAwCisjZGVmaW5lIEVYVDJfRklMRV9CVUZfVkFMSUQJMHgyMDAwCisKK3R5cGVkZWYgc3RydWN0IGV4dDJfZmlsZSAqZXh0Ml9maWxlX3Q7CisKKyNkZWZpbmUgRVhUMl9TRUVLX1NFVAkwCisjZGVmaW5lIEVYVDJfU0VFS19DVVIJMQorI2RlZmluZSBFWFQyX1NFRUtfRU5ECTIKKworLyoKKyAqIEZsYWdzIGZvciB0aGUgZXh0Ml9maWxzeXMgc3RydWN0dXJlIGFuZCBmb3IgZXh0MmZzX29wZW4oKQorICovCisjZGVmaW5lIEVYVDJfRkxBR19SVwkJCTB4MDEKKyNkZWZpbmUgRVhUMl9GTEFHX0NIQU5HRUQJCTB4MDIKKyNkZWZpbmUgRVhUMl9GTEFHX0RJUlRZCQkJMHgwNAorI2RlZmluZSBFWFQyX0ZMQUdfVkFMSUQJCQkweDA4CisjZGVmaW5lIEVYVDJfRkxBR19JQl9ESVJUWQkJMHgxMAorI2RlZmluZSBFWFQyX0ZMQUdfQkJfRElSVFkJCTB4MjAKKyNkZWZpbmUgRVhUMl9GTEFHX1NXQVBfQllURVMJCTB4NDAKKyNkZWZpbmUgRVhUMl9GTEFHX1NXQVBfQllURVNfUkVBRAkweDgwCisjZGVmaW5lIEVYVDJfRkxBR19TV0FQX0JZVEVTX1dSSVRFCTB4MTAwCisjZGVmaW5lIEVYVDJfRkxBR19NQVNURVJfU0JfT05MWQkweDIwMAorI2RlZmluZSBFWFQyX0ZMQUdfRk9SQ0UJCQkweDQwMAorI2RlZmluZSBFWFQyX0ZMQUdfU1VQRVJfT05MWQkJMHg4MDAKKyNkZWZpbmUgRVhUMl9GTEFHX0pPVVJOQUxfREVWX09LCTB4MTAwMAorI2RlZmluZSBFWFQyX0ZMQUdfSU1BR0VfRklMRQkJMHgyMDAwCisjZGVmaW5lIEVYVDJfRkxBR19FWENMVVNJVkUJCTB4NDAwMAorI2RlZmluZSBFWFQyX0ZMQUdfU09GVFNVUFBfRkVBVFVSRVMJMHg4MDAwCisjZGVmaW5lIEVYVDJfRkxBR19OT0ZSRUVfT05fRVJST1IJMHgxMDAwMAorI2RlZmluZSBFWFQyX0ZMQUdfNjRCSVRTCQkweDIwMDAwCisjZGVmaW5lIEVYVDJfRkxBR19QUklOVF9QUk9HUkVTUwkweDQwMDAwCisjZGVmaW5lIEVYVDJfRkxBR19ESVJFQ1RfSU8JCTB4ODAwMDAKKyNkZWZpbmUgRVhUMl9GTEFHX1NLSVBfTU1QCQkweDEwMDAwMAorCisvKgorICogU3BlY2lhbCBmbGFnIGluIHRoZSBleHQyIGlub2RlIGlfZmxhZyBmaWVsZCB0aGF0IG1lYW5zIHRoYXQgdGhpcyBpcworICogYSBuZXcgaW5vZGUuICAoU28gdGhhdCBleHQyX3dyaXRlX2lub2RlKCkgY2FuIGNsZWFyIGV4dHJhIGZpZWxkcy4pCisgKi8KKyNkZWZpbmUgRVhUMl9ORVdfSU5PREVfRkwJMHg4MDAwMDAwMAorCisvKgorICogRmxhZ3MgZm9yIG1ram91cm5hbAorICovCisjZGVmaW5lIEVYVDJfTUtKT1VSTkFMX1YxX1NVUEVSCTB4MDAwMDAwMSAvKiBjcmVhdGUgVjEgc3VwZXJibG9jayAoZGVwcmVjYXRlZCkgKi8KKyNkZWZpbmUgRVhUMl9NS0pPVVJOQUxfTEFaWUlOSVQJMHgwMDAwMDAyIC8qIGRvbid0IHplcm8gam91cm5hbCBpbm9kZSBiZWZvcmUgdXNlKi8KKyNkZWZpbmUgRVhUMl9NS0pPVVJOQUxfTk9fTU5UX0NIRUNLIDB4MDAwMDAwNCAvKiBkb24ndCBjaGVjayBtb3VudCBzdGF0dXMgKi8KKworc3RydWN0IG9wYXF1ZV9leHQyX2dyb3VwX2Rlc2M7CisKK3N0cnVjdCBzdHJ1Y3RfZXh0Ml9maWxzeXMgeworCWVycmNvZGVfdAkJCW1hZ2ljOworCWlvX2NoYW5uZWwJCQlpbzsKKwlpbnQJCQkJZmxhZ3M7CisJY2hhciAqCQkJCWRldmljZV9uYW1lOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrCSogCXN1cGVyOworCXVuc2lnbmVkIGludAkJCWJsb2Nrc2l6ZTsKKwlpbnQJCQkJZnJhZ3NpemU7CisJZGdycF90CQkJCWdyb3VwX2Rlc2NfY291bnQ7CisJdW5zaWduZWQgbG9uZwkJCWRlc2NfYmxvY2tzOworCXN0cnVjdCBvcGFxdWVfZXh0Ml9ncm91cF9kZXNjICoJZ3JvdXBfZGVzYzsKKwl1bnNpZ25lZCBpbnQJCQlpbm9kZV9ibG9ja3NfcGVyX2dyb3VwOworCWV4dDJmc19pbm9kZV9iaXRtYXAJCWlub2RlX21hcDsKKwlleHQyZnNfYmxvY2tfYml0bWFwCQlibG9ja19tYXA7CisJLyogWFhYIEZJWE1FLTY0OiBub3QgNjQtYml0IHNhZmUsIGJ1dCBub3QgdXNlZD8gKi8KKwllcnJjb2RlX3QgKCpnZXRfYmxvY2tzKShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sIGJsa190ICpibG9ja3MpOworCWVycmNvZGVfdCAoKmNoZWNrX2RpcmVjdG9yeSkoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vKTsKKwllcnJjb2RlX3QgKCp3cml0ZV9iaXRtYXBzKShleHQyX2ZpbHN5cyBmcyk7CisJZXJyY29kZV90ICgqcmVhZF9pbm9kZSkoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCXN0cnVjdCBleHQyX2lub2RlICppbm9kZSk7CisJZXJyY29kZV90ICgqd3JpdGVfaW5vZGUpKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQlzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpOworCWV4dDJfYmFkYmxvY2tzX2xpc3QJCWJhZGJsb2NrczsKKwlleHQyX2RibGlzdAkJCWRibGlzdDsKKwlfX3UzMgkJCQlzdHJpZGU7CS8qIGZvciBta2UyZnMgKi8KKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqCW9yaWdfc3VwZXI7CisJc3RydWN0IGV4dDJfaW1hZ2VfaGRyICoJCWltYWdlX2hlYWRlcjsKKwlfX3UzMgkJCQl1bWFzazsKKwl0aW1lX3QJCQkJbm93OworCWludAkJCQljbHVzdGVyX3JhdGlvX2JpdHM7CisJX191MTYJCQkJZGVmYXVsdF9iaXRtYXBfdHlwZTsKKwlfX3UxNgkJCQlwYWQ7CisJLyoKKwkgKiBSZXNlcnZlZCBmb3IgZnV0dXJlIGV4cGFuc2lvbgorCSAqLworCV9fdTMyCQkJCXJlc2VydmVkWzVdOworCisJLyoKKwkgKiBSZXNlcnZlZCBmb3IgdGhlIHVzZSBvZiB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4KKwkgKi8KKwl2b2lkICoJCQkJcHJpdl9kYXRhOworCisJLyoKKwkgKiBJbm9kZSBjYWNoZQorCSAqLworCXN0cnVjdCBleHQyX2lub2RlX2NhY2hlCQkqaWNhY2hlOworCWlvX2NoYW5uZWwJCQlpbWFnZV9pbzsKKworCS8qCisJICogTW9yZSBjYWxsYmFjayBmdW5jdGlvbnMKKwkgKi8KKwllcnJjb2RlX3QgKCpnZXRfYWxsb2NfYmxvY2spKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90IGdvYWwsCisJCQkJICAgICBibGs2NF90ICpyZXQpOworCXZvaWQgKCpibG9ja19hbGxvY19zdGF0cykoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxrLCBpbnQgaW51c2UpOworCisJLyoKKwkgKiBCdWZmZXJzIGZvciBNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uKE1NUCkgYmxvY2suCisJICovCisJdm9pZCAqbW1wX2J1ZjsKKwl2b2lkICptbXBfY21wOworCWludCBtbXBfZmQ7CisKKwkvKgorCSAqIFRpbWUgYXQgd2hpY2ggZTJmc2NrIGxhc3QgdXBkYXRlZCB0aGUgTU1QIGJsb2NrLgorCSAqLworCWxvbmcgbW1wX2xhc3Rfd3JpdHRlbjsKK307CisKKyNpZiBFWFQyX0ZMQVRfSU5DTFVERVMKKyNpbmNsdWRlICJlMl9iaXRvcHMuaCIKKyNlbHNlCisjaW5jbHVkZSA8ZXh0MmZzL2JpdG9wcy5oPgorI2VuZGlmCisKKy8qCisgKiA2NC1iaXQgYml0bWFwIGJhY2tlbmQgdHlwZXMKKyAqLworI2RlZmluZSBFWFQyRlNfQk1BUDY0X0JJVEFSUkFZCTEKKyNkZWZpbmUgRVhUMkZTX0JNQVA2NF9SQlRSRUUJMgorI2RlZmluZSBFWFQyRlNfQk1BUDY0X0FVVE9ESVIJMworCisvKgorICogUmV0dXJuIGZsYWdzIGZvciB0aGUgYmxvY2sgaXRlcmF0b3IgZnVuY3Rpb25zCisgKi8KKyNkZWZpbmUgQkxPQ0tfQ0hBTkdFRAkxCisjZGVmaW5lIEJMT0NLX0FCT1JUCTIKKyNkZWZpbmUgQkxPQ0tfRVJST1IJNAorCisvKgorICogQmxvY2sgaW50ZXJhdGUgZmxhZ3MKKyAqCisgKiBCTE9DS19GTEFHX0FQUEVORCwgb3IgQkxPQ0tfRkxBR19IT0xFLCBpbmRpY2F0ZXMgdGhhdCB0aGUgaW50ZXJhdG9yCisgKiBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9uIGJsb2NrcyB3aGVyZSB0aGUgYmxvY2sgbnVtYmVyIGlzIHplcm8uCisgKiBUaGlzIGlzIHVzZWQgYnkgZXh0MmZzX2V4cGFuZF9kaXIoKSB0byBiZSBhYmxlIHRvIGFkZCBhIG5ldyBibG9jaworICogdG8gYW4gaW5vZGUuICBJdCBjYW4gYWxzbyBiZSB1c2VkIGZvciBwcm9ncmFtcyB0aGF0IHdhbnQgdG8gYmUgYWJsZQorICogdG8gZGVhbCB3aXRoIGZpbGVzIHRoYXQgY29udGFpbiAiaG9sZXMiLgorICoKKyAqIEJMT0NLX0ZMQUdfREVQVEhfVFJBVkVSU0UgaW5kaWNhdGVzIHRoYXQgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uIGZvcgorICogdGhlIGluZGlyZWN0LCBkb3VibHkgaW5kaXJlY3QsIGV0Yy4gYmxvY2tzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIKKyAqIGFsbCBvZiB0aGUgYmxvY2tzIGNvbnRhaW5pbmVkIGluIHRoZSBpbmRpcmVjdCBibG9ja3MgYXJlIHByb2Nlc3NlZC4KKyAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBhcmUgZ29pbmcgdG8gYmUgZGVhbGxvY2F0aW5nIGJsb2NrcyBmcm9tIGFuCisgKiBpbm9kZS4KKyAqCisgKiBCTE9DS19GTEFHX0RBVEFfT05MWSBpbmRpY2F0ZXMgdGhhdCB0aGUgaXRlcmF0b3IgZnVuY3Rpb24gc2hvdWxkIGJlCisgKiBjYWxsZWQgZm9yIGRhdGEgYmxvY2tzIG9ubHkuCisgKgorICogQkxPQ0tfRkxBR19SRUFEX09OTFkgaXMgYSBwcm9taXNlIGJ5IHRoZSBjYWxsZXIgdGhhdCBpdCB3aWxsIG5vdAorICogbW9kaWZ5IHJldHVybmVkIGJsb2NrIG51bWJlci4KKyAqCisgKiBCTE9DS19GTEFHX05PX0xBUkdFIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seS4gIEl0IGluZm9ybXMKKyAqIGV4dDJmc19ibG9ja19pdGVyYXRlMiB0aGF0IGxhcmdlIGZpbGVzIHdvbid0IGJlIGFjY2VwdGVkLgorICovCisjZGVmaW5lIEJMT0NLX0ZMQUdfQVBQRU5ECTEKKyNkZWZpbmUgQkxPQ0tfRkxBR19IT0xFCQkxCisjZGVmaW5lIEJMT0NLX0ZMQUdfREVQVEhfVFJBVkVSU0UJMgorI2RlZmluZSBCTE9DS19GTEFHX0RBVEFfT05MWQk0CisjZGVmaW5lIEJMT0NLX0ZMQUdfUkVBRF9PTkxZCTgKKworI2RlZmluZSBCTE9DS19GTEFHX05PX0xBUkdFCTB4MTAwMAorCisvKgorICogTWFnaWMgImJsb2NrIGNvdW50IiByZXR1cm4gdmFsdWVzIGZvciB0aGUgYmxvY2sgaXRlcmF0b3IgZnVuY3Rpb24uCisgKi8KKyNkZWZpbmUgQkxPQ0tfQ09VTlRfSU5ECQkoLTEpCisjZGVmaW5lIEJMT0NLX0NPVU5UX0RJTkQJKC0yKQorI2RlZmluZSBCTE9DS19DT1VOVF9USU5ECSgtMykKKyNkZWZpbmUgQkxPQ0tfQ09VTlRfVFJBTlNMQVRPUgkoLTQpCisKKyNpZiAwCisvKgorICogRmxhZ3MgZm9yIGV4dDJmc19tb3ZlX2Jsb2NrcworICovCisjZGVmaW5lIEVYVDJfQk1PVkVfR0VUX0RCTElTVAkweDAwMDEKKyNkZWZpbmUgRVhUMl9CTU9WRV9ERUJVRwkweDAwMDIKKyNlbmRpZgorCisvKgorICogR2VuZXJpYyAobm9uLWZpbGVzeXN0ZW0gbGF5b3V0IHNwZWNpZmljKSBleHRlbnRzIHN0cnVjdHVyZQorICovCisKKyNkZWZpbmUgRVhUMl9FWFRFTlRfRkxBR1NfTEVBRgkJMHgwMDAxCisjZGVmaW5lIEVYVDJfRVhURU5UX0ZMQUdTX1VOSU5JVAkweDAwMDIKKyNkZWZpbmUgRVhUMl9FWFRFTlRfRkxBR1NfU0VDT05EX1ZJU0lUCTB4MDAwNAorCitzdHJ1Y3QgZXh0MmZzX2V4dGVudCB7CisJYmxrNjRfdAllX3BibGs7CQkvKiBmaXJzdCBwaHlzaWNhbCBibG9jayAqLworCWJsazY0X3QJZV9sYmxrOwkJLyogZmlyc3QgbG9naWNhbCBibG9jayBleHRlbnQgY292ZXJzICovCisJX191MzIJZV9sZW47CQkvKiBudW1iZXIgb2YgYmxvY2tzIGNvdmVyZWQgYnkgZXh0ZW50ICovCisJX191MzIJZV9mbGFnczsJLyogZXh0ZW50IGZsYWdzICovCit9OworCit0eXBlZGVmIHN0cnVjdCBleHQyX2V4dGVudF9oYW5kbGUgKmV4dDJfZXh0ZW50X2hhbmRsZV90OwordHlwZWRlZiBzdHJ1Y3QgZXh0Ml9leHRlbnRfcGF0aCAqZXh0Ml9leHRlbnRfcGF0aF90OworCisvKgorICogRmxhZ3MgdXNlZCBieSBleHQyZnNfZXh0ZW50X2dldCgpCisgKi8KKyNkZWZpbmUgRVhUMl9FWFRFTlRfQ1VSUkVOVAkweDAwMDAKKyNkZWZpbmUgRVhUMl9FWFRFTlRfTU9WRV9NQVNLCTB4MDAwRgorI2RlZmluZSBFWFQyX0VYVEVOVF9ST09UCTB4MDAwMQorI2RlZmluZSBFWFQyX0VYVEVOVF9MQVNUX0xFQUYJMHgwMDAyCisjZGVmaW5lIEVYVDJfRVhURU5UX0ZJUlNUX1NJQgkweDAwMDMKKyNkZWZpbmUgRVhUMl9FWFRFTlRfTEFTVF9TSUIJMHgwMDA0CisjZGVmaW5lIEVYVDJfRVhURU5UX05FWFRfU0lCCTB4MDAwNQorI2RlZmluZSBFWFQyX0VYVEVOVF9QUkVWX1NJQgkweDAwMDYKKyNkZWZpbmUgRVhUMl9FWFRFTlRfTkVYVF9MRUFGCTB4MDAwNworI2RlZmluZSBFWFQyX0VYVEVOVF9QUkVWX0xFQUYJMHgwMDA4CisjZGVmaW5lIEVYVDJfRVhURU5UX05FWFQJMHgwMDA5CisjZGVmaW5lIEVYVDJfRVhURU5UX1BSRVYJMHgwMDBBCisjZGVmaW5lIEVYVDJfRVhURU5UX1VQCQkweDAwMEIKKyNkZWZpbmUgRVhUMl9FWFRFTlRfRE9XTgkweDAwMEMKKyNkZWZpbmUgRVhUMl9FWFRFTlRfRE9XTl9BTkRfTEFTVCAweDAwMEQKKworLyoKKyAqIEZsYWdzIHVzZWQgYnkgZXh0MmZzX2V4dGVudF9pbnNlcnQoKQorICovCisjZGVmaW5lIEVYVDJfRVhURU5UX0lOU0VSVF9BRlRFUgkweDAwMDEgLyogaW5zZXJ0IGFmdGVyIGhhbmRsZSBsb2MnbiAqLworI2RlZmluZSBFWFQyX0VYVEVOVF9JTlNFUlRfTk9TUExJVAkweDAwMDIgLyogaW5zZXJ0IG1heSBub3QgY2F1c2Ugc3BsaXQgKi8KKworLyoKKyAqIEZsYWdzIHVzZWQgYnkgZXh0MmZzX2V4dGVudF9kZWxldGUoKQorICovCisjZGVmaW5lIEVYVDJfRVhURU5UX0RFTEVURV9LRUVQX0VNUFRZCTB4MDAxIC8qIGtlZXAgbm9kZSBpZiBsYXN0IGV4dG50IGdvbmUgKi8KKworLyoKKyAqIEZsYWdzIHVzZWQgYnkgZXh0MmZzX2V4dGVudF9zZXRfYm1hcCgpCisgKi8KKyNkZWZpbmUgRVhUMl9FWFRFTlRfU0VUX0JNQVBfVU5JTklUCTB4MDAwMQorCisvKgorICogRGF0YSBzdHJ1Y3R1cmUgcmV0dXJuZWQgYnkgZXh0MmZzX2V4dGVudF9nZXRfaW5mbygpCisgKi8KK3N0cnVjdCBleHQyX2V4dGVudF9pbmZvIHsKKwlpbnQJCWN1cnJfZW50cnk7CisJaW50CQljdXJyX2xldmVsOworCWludAkJbnVtX2VudHJpZXM7CisJaW50CQltYXhfZW50cmllczsKKwlpbnQJCW1heF9kZXB0aDsKKwlpbnQJCWJ5dGVzX2F2YWlsOworCWJsazY0X3QJCW1heF9sYmxrOworCWJsazY0X3QJCW1heF9wYmxrOworCV9fdTMyCQltYXhfbGVuOworCV9fdTMyCQltYXhfdW5pbml0X2xlbjsKK307CisKKy8qCisgKiBGbGFncyBmb3IgZGlyZWN0b3J5IGJsb2NrIHJlYWRpbmcgYW5kIHdyaXRpbmcgZnVuY3Rpb25zCisgKi8KKyNkZWZpbmUgRVhUMl9ESVJCTE9DS19WMl9TVFJVQ1QJMHgwMDAxCisKKy8qCisgKiBSZXR1cm4gZmxhZ3MgZm9yIHRoZSBkaXJlY3RvcnkgaXRlcmF0b3IgZnVuY3Rpb25zCisgKi8KKyNkZWZpbmUgRElSRU5UX0NIQU5HRUQJMQorI2RlZmluZSBESVJFTlRfQUJPUlQJMgorI2RlZmluZSBESVJFTlRfRVJST1IJMworCisvKgorICogRGlyZWN0b3J5IGl0ZXJhdG9yIGZsYWdzCisgKi8KKworI2RlZmluZSBESVJFTlRfRkxBR19JTkNMVURFX0VNUFRZCTEKKyNkZWZpbmUgRElSRU5UX0ZMQUdfSU5DTFVERV9SRU1PVkVECTIKKworI2RlZmluZSBESVJFTlRfRE9UX0ZJTEUJCTEKKyNkZWZpbmUgRElSRU5UX0RPVF9ET1RfRklMRQkyCisjZGVmaW5lIERJUkVOVF9PVEhFUl9GSUxFCTMKKyNkZWZpbmUgRElSRU5UX0RFTEVURURfRklMRQk0CisKKy8qCisgKiBJbm9kZSBzY2FuIGRlZmluaXRpb25zCisgKi8KK3R5cGVkZWYgc3RydWN0IGV4dDJfc3RydWN0X2lub2RlX3NjYW4gKmV4dDJfaW5vZGVfc2NhbjsKKworLyoKKyAqIGV4dDJmc19zY2FuIGZsYWdzCisgKi8KKyNkZWZpbmUgRVhUMl9TRl9DSEtfQkFEQkxPQ0tTCTB4MDAwMQorI2RlZmluZSBFWFQyX1NGX0JBRF9JTk9ERV9CTEsJMHgwMDAyCisjZGVmaW5lIEVYVDJfU0ZfQkFEX0VYVFJBX0JZVEVTCTB4MDAwNAorI2RlZmluZSBFWFQyX1NGX1NLSVBfTUlTU0lOR19JVEFCTEUJMHgwMDA4CisjZGVmaW5lIEVYVDJfU0ZfRE9fTEFaWQkJMHgwMDEwCisKKy8qCisgKiBleHQyZnNfY2hlY2tfaWZfbW91bnRlZCBmbGFncworICovCisjZGVmaW5lIEVYVDJfTUZfTU9VTlRFRAkJMQorI2RlZmluZSBFWFQyX01GX0lTUk9PVAkJMgorI2RlZmluZSBFWFQyX01GX1JFQURPTkxZCTQKKyNkZWZpbmUgRVhUMl9NRl9TV0FQCQk4CisjZGVmaW5lIEVYVDJfTUZfQlVTWQkJMTYKKworLyoKKyAqIEV4dDIvbGludXggbW9kZSBmbGFncy4gIFdlIGRlZmluZSB0aGVtIGhlcmUgc28gdGhhdCB3ZSBkb24ndCBuZWVkCisgKiB0byBkZXBlbmQgb24gdGhlIE9TJ3Mgc3lzL3N0YXQuaCwgc2luY2Ugd2UgbWF5IGJlIGNvbXBpbGluZyBvbiBhCisgKiBub24tTGludXggc3lzdGVtLgorICovCisjZGVmaW5lIExJTlVYX1NfSUZNVCAgMDAxNzAwMDAKKyNkZWZpbmUgTElOVVhfU19JRlNPQ0sgMDE0MDAwMAorI2RlZmluZSBMSU5VWF9TX0lGTE5LCSAwMTIwMDAwCisjZGVmaW5lIExJTlVYX1NfSUZSRUcgIDAxMDAwMDAKKyNkZWZpbmUgTElOVVhfU19JRkJMSyAgMDA2MDAwMAorI2RlZmluZSBMSU5VWF9TX0lGRElSICAwMDQwMDAwCisjZGVmaW5lIExJTlVYX1NfSUZDSFIgIDAwMjAwMDAKKyNkZWZpbmUgTElOVVhfU19JRklGTyAgMDAxMDAwMAorI2RlZmluZSBMSU5VWF9TX0lTVUlEICAwMDA0MDAwCisjZGVmaW5lIExJTlVYX1NfSVNHSUQgIDAwMDIwMDAKKyNkZWZpbmUgTElOVVhfU19JU1ZUWCAgMDAwMTAwMAorCisjZGVmaW5lIExJTlVYX1NfSVJXWFUgMDA3MDAKKyNkZWZpbmUgTElOVVhfU19JUlVTUiAwMDQwMAorI2RlZmluZSBMSU5VWF9TX0lXVVNSIDAwMjAwCisjZGVmaW5lIExJTlVYX1NfSVhVU1IgMDAxMDAKKworI2RlZmluZSBMSU5VWF9TX0lSV1hHIDAwMDcwCisjZGVmaW5lIExJTlVYX1NfSVJHUlAgMDAwNDAKKyNkZWZpbmUgTElOVVhfU19JV0dSUCAwMDAyMAorI2RlZmluZSBMSU5VWF9TX0lYR1JQIDAwMDEwCisKKyNkZWZpbmUgTElOVVhfU19JUldYTyAwMDAwNworI2RlZmluZSBMSU5VWF9TX0lST1RIIDAwMDA0CisjZGVmaW5lIExJTlVYX1NfSVdPVEggMDAwMDIKKyNkZWZpbmUgTElOVVhfU19JWE9USCAwMDAwMQorCisjZGVmaW5lIExJTlVYX1NfSVNMTksobSkJKCgobSkgJiBMSU5VWF9TX0lGTVQpID09IExJTlVYX1NfSUZMTkspCisjZGVmaW5lIExJTlVYX1NfSVNSRUcobSkJKCgobSkgJiBMSU5VWF9TX0lGTVQpID09IExJTlVYX1NfSUZSRUcpCisjZGVmaW5lIExJTlVYX1NfSVNESVIobSkJKCgobSkgJiBMSU5VWF9TX0lGTVQpID09IExJTlVYX1NfSUZESVIpCisjZGVmaW5lIExJTlVYX1NfSVNDSFIobSkJKCgobSkgJiBMSU5VWF9TX0lGTVQpID09IExJTlVYX1NfSUZDSFIpCisjZGVmaW5lIExJTlVYX1NfSVNCTEsobSkJKCgobSkgJiBMSU5VWF9TX0lGTVQpID09IExJTlVYX1NfSUZCTEspCisjZGVmaW5lIExJTlVYX1NfSVNGSUZPKG0pCSgoKG0pICYgTElOVVhfU19JRk1UKSA9PSBMSU5VWF9TX0lGSUZPKQorI2RlZmluZSBMSU5VWF9TX0lTU09DSyhtKQkoKChtKSAmIExJTlVYX1NfSUZNVCkgPT0gTElOVVhfU19JRlNPQ0spCisKKy8qCisgKiBleHQyIHNpemUgb2YgYW4gaW5vZGUKKyAqLworI2RlZmluZSBFWFQyX0lfU0laRShpKQkoKGkpLT5pX3NpemUgfCAoKF9fdTY0KSAoaSktPmlfc2l6ZV9oaWdoIDw8IDMyKSkKKworLyoKKyAqIGV4dDJfaWNvdW50X3QgYWJzdHJhY3Rpb24KKyAqLworI2RlZmluZSBFWFQyX0lDT1VOVF9PUFRfSU5DUkVNRU5UCTB4MDEKKwordHlwZWRlZiBzdHJ1Y3QgZXh0Ml9pY291bnQgKmV4dDJfaWNvdW50X3Q7CisKKy8qCisgKiBGbGFncyBmb3IgZXh0MmZzX2JtYXAKKyAqLworI2RlZmluZSBCTUFQX0FMTE9DCTB4MDAwMQorI2RlZmluZSBCTUFQX1NFVAkweDAwMDIKKworLyoKKyAqIFJldHVybmVkIGZsYWdzIGZyb20gZXh0MmZzX2JtYXAKKyAqLworI2RlZmluZSBCTUFQX1JFVF9VTklOSVQJMHgwMDAxCisKKy8qCisgKiBGbGFncyBmb3IgaW1hZ2VyLmMgZnVuY3Rpb25zCisgKi8KKyNkZWZpbmUgSU1BR0VSX0ZMQUdfSU5PREVNQVAJMQorI2RlZmluZSBJTUFHRVJfRkxBR19TUEFSU0VXUklURQkyCisKKy8qCisgKiBGb3IgY2hlY2tpbmcgc3RydWN0dXJlIG1hZ2ljIG51bWJlcnMuLi4KKyAqLworCisjZGVmaW5lIEVYVDJfQ0hFQ0tfTUFHSUMoc3RydWN0LCBjb2RlKSBcCisJICBpZiAoKHN0cnVjdCktPm1hZ2ljICE9IChjb2RlKSkgcmV0dXJuIChjb2RlKQorCisKKy8qCisgKiBGb3IgZXh0MiBjb21wcmVzc2lvbiBzdXBwb3J0CisgKi8KKyNkZWZpbmUgRVhUMkZTX0NPTVBSRVNTRURfQkxLQUREUiAoKGJsa190KSAtMSkKKyNkZWZpbmUgSE9MRV9CTEtBRERSKF9iKSAoKF9iKSA9PSAwIHx8IChfYikgPT0gRVhUMkZTX0NPTVBSRVNTRURfQkxLQUREUikKKworLyoKKyAqIEZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkKKyAqLworI2RlZmluZSBFWFQyX0xJQl9GRUFUVVJFX0NPTVBBVF9TVVBQCShFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9QUkVBTExPQ3xcCisJCQkJCSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0lNQUdJQ19JTk9ERVN8XAorCQkJCQkgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTHxcCisJCQkJCSBFWFQyX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERXxcCisJCQkJCSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWHxcCisJCQkJCSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0VYVF9BVFRSfFwKKwkJCQkJIEVYVDRfRkVBVFVSRV9DT01QQVRfU1BBUlNFX1NVUEVSMikKKworLyogVGhpcyAjaWZkZWYgaXMgdGVtcG9yYXJ5IHVudGlsIGNvbXByZXNzaW9uIGlzIGZ1bGx5IHN1cHBvcnRlZCAqLworI2lmZGVmIEVOQUJMRV9DT01QUkVTU0lPTgorI2lmbmRlZiBJX0tOT1dfVEhBVF9DT01QUkVTU0lPTl9JU19FWFBFUklNRU5UQUwKKy8qIElmIHRoZSBiZWxvdyB3YXJuaW5nIGJ1Z3MgeW91LCB0aGVuIGhhdmUKKyAgIGBDUFBGTEFHUz0tRElfS05PV19USEFUX0NPTVBSRVNTSU9OX0lTX0VYUEVSSU1FTlRBTCcgaW4geW91cgorICAgZW52aXJvbm1lbnQgYXQgY29uZmlndXJlIHRpbWUuICovCisgI3dhcm5pbmcgIkNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsIgorI2VuZGlmCisjZGVmaW5lIEVYVDJfTElCX0ZFQVRVUkVfSU5DT01QQVRfU1VQUAkoRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFfFwKKwkJCQkJIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9DT01QUkVTU0lPTnxcCisJCQkJCSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfSk9VUk5BTF9ERVZ8XAorCQkJCQkgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkd8XAorCQkJCQkgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVJ8XAorCQkJCQkgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFN8XAorCQkJCQkgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkd8XAorCQkJCQkgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01NUHxcCisJCQkJCSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpCisjZWxzZQorI2RlZmluZSBFWFQyX0xJQl9GRUFUVVJFX0lOQ09NUEFUX1NVUFAJKEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRXxcCisJCQkJCSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfSk9VUk5BTF9ERVZ8XAorCQkJCQkgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkd8XAorCQkJCQkgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVJ8XAorCQkJCQkgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFN8XAorCQkJCQkgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkd8XAorCQkJCQkgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01NUHxcCisJCQkJCSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUVVPVEEKKyNkZWZpbmUgRVhUMl9MSUJfRkVBVFVSRV9ST19DT01QQVRfU1VQUAkoRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVJ8XAorCQkJCQkgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEV8XAorCQkJCQkgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFfFwKKwkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfRElSX05MSU5LfFwKKwkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfRVhUUkFfSVNJWkV8XAorCQkJCQkgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTXxcCisJCQkJCSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0JJR0FMTE9DfFwKKwkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfUVVPVEEpCisjZWxzZQorI2RlZmluZSBFWFQyX0xJQl9GRUFUVVJFX1JPX0NPTVBBVF9TVVBQCShFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUnxcCisJCQkJCSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRXxcCisJCQkJCSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEV8XAorCQkJCQkgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9ESVJfTkxJTkt8XAorCQkJCQkgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9FWFRSQV9JU0laRXxcCisJCQkJCSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNfFwKKwkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpCisjZW5kaWYKKworLyoKKyAqIFRoZXNlIGZlYXR1cmVzIGFyZSBvbmx5IGFsbG93ZWQgaWYgRVhUMl9GTEFHX1NPRlRTVVBQX0ZFQVRVUkVTIGlzIHBhc3NlZAorICogdG8gZXh0MmZzX29wZW5mcygpCisgKi8KKyNkZWZpbmUgRVhUMl9MSUJfU09GVFNVUFBfSU5DT01QQVQJKDApCisjZGVmaW5lIEVYVDJfTElCX1NPRlRTVVBQX1JPX0NPTVBBVAkoRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9SRVBMSUNBKQorCisKKy8qIFRyYW5zbGF0ZSBhIGJsb2NrIG51bWJlciB0byBhIGNsdXN0ZXIgbnVtYmVyICovCisjZGVmaW5lIEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKQkoMSA8PCAoZnMpLT5jbHVzdGVyX3JhdGlvX2JpdHMpCisjZGVmaW5lIEVYVDJGU19DTFVTVEVSX01BU0soZnMpCQkoRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpIC0gMSkKKyNkZWZpbmUgRVhUMkZTX0IyQyhmcywgYmxrKQkJKChibGspID4+IChmcyktPmNsdXN0ZXJfcmF0aW9fYml0cykKKy8qIFRyYW5zbGF0ZSBhIGNsdXN0ZXIgbnVtYmVyIHRvIGEgYmxvY2sgbnVtYmVyICovCisjZGVmaW5lIEVYVDJGU19DMkIoZnMsIGNsdXN0ZXIpCQkoKGNsdXN0ZXIpIDw8IChmcyktPmNsdXN0ZXJfcmF0aW9fYml0cykKKy8qIFRyYW5zbGF0ZSAjIG9mIGJsa3MgdG8gIyBvZiBjbHVzdGVycyAqLworI2RlZmluZSBFWFQyRlNfTlVNX0IyQyhmcywgYmxrcykJKCgoYmxrcykgKyBFWFQyRlNfQ0xVU1RFUl9NQVNLKGZzKSkgPj4gXAorCQkJCQkgKGZzKS0+Y2x1c3Rlcl9yYXRpb19iaXRzKQorCisjaWYgZGVmaW5lZChIQVZFX0ZTVEFUNjQpICYmICFkZWZpbmVkKF9fT1NYX0FWQUlMQUJMRV9CVVRfREVQUkVDQVRFRCkKK3R5cGVkZWYgc3RydWN0IHN0YXQ2NCBleHQyZnNfc3RydWN0X3N0YXQ7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3Qgc3RhdCBleHQyZnNfc3RydWN0X3N0YXQ7CisjZW5kaWYKKworLyoKKyAqIEZvciBleHQyZnNfY2xvc2UyKCkgYW5kIGV4dDJmc19mbHVzaDIoKSwgdGhpcyBmbGFnIGFsbG93cyB5b3UgdG8KKyAqIGF2b2lkIHRoZSBmc3luYyBjYWxsLgorICovCisjZGVmaW5lIEVYVDJfRkxBR19GTFVTSF9OT19TWU5DICAgICAgICAgIDEKKworLyoKKyAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworCisvKiBUaGUgTEFSR0VfRklMRSBmZWF0dXJlIHNob3VsZCBiZSBzZXQgaWYgd2UgaGF2ZSBzdG9yZWQgZmlsZXMgMkdCKyBpbiBzaXplICovCitzdGF0aWMgaW5saW5lIGludCBleHQyZnNfbmVlZHNfbGFyZ2VfZmlsZV9mZWF0dXJlKHVuc2lnbmVkIGxvbmcgbG9uZyBmaWxlX3NpemUpCit7CisJcmV0dXJuIGZpbGVfc2l6ZSA+PSAweDgwMDAwMDAwVUxMOworfQorCisvKiBhbGxvYy5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19uZXdfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgZGlyLCBpbnQgbW9kZSwKKwkJCQkgIGV4dDJmc19pbm9kZV9iaXRtYXAgbWFwLCBleHQyX2lub190ICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfbmV3X2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBnb2FsLAorCQkJCSAgZXh0MmZzX2Jsb2NrX2JpdG1hcCBtYXAsIGJsa190ICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfbmV3X2Jsb2NrMihleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBnb2FsLAorCQkJCSAgIGV4dDJmc19ibG9ja19iaXRtYXAgbWFwLCBibGs2NF90ICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBzdGFydCwKKwkJCQkJYmxrX3QgZmluaXNoLCBpbnQgbnVtLAorCQkJCQlleHQyZnNfYmxvY2tfYml0bWFwIG1hcCwKKwkJCQkJYmxrX3QgKnJldCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfZnJlZV9ibG9ja3MyKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90IHN0YXJ0LAorCQkJCQkgYmxrNjRfdCBmaW5pc2gsIGludCBudW0sCisJCQkJCSBleHQyZnNfYmxvY2tfYml0bWFwIG1hcCwKKwkJCQkJIGJsazY0X3QgKnJldCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19hbGxvY19ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrX3QgZ29hbCwKKwkJCQkgICAgY2hhciAqYmxvY2tfYnVmLCBibGtfdCAqcmV0KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2FsbG9jX2Jsb2NrMihleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBnb2FsLAorCQkJCSAgICAgY2hhciAqYmxvY2tfYnVmLCBibGs2NF90ICpyZXQpOworZXh0ZXJuIHZvaWQgZXh0MmZzX3NldF9hbGxvY19ibG9ja19jYWxsYmFjayhleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgIGVycmNvZGVfdCAoKmZ1bmMpKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkJCSAgICAgIGJsazY0X3QgZ29hbCwKKwkJCQkJCQkgICAgICBibGs2NF90ICpyZXQpLAorCQkJCQkgICAgZXJyY29kZV90ICgqKm9sZCkoZXh0Ml9maWxzeXMgZnMsCisJCQkJCQkJICAgICAgYmxrNjRfdCBnb2FsLAorCQkJCQkJCSAgICAgIGJsazY0X3QgKnJldCkpOworCisvKiBhbGxvY19zYi5jICovCitleHRlcm4gaW50IGV4dDJmc19yZXNlcnZlX3N1cGVyX2FuZF9iZ2QoZXh0Ml9maWxzeXMgZnMsCisJCQkJCWRncnBfdCBncm91cCwKKwkJCQkJZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwKTsKK2V4dGVybiB2b2lkIGV4dDJmc19zZXRfYmxvY2tfYWxsb2Nfc3RhdHNfY2FsbGJhY2soZXh0Ml9maWxzeXMgZnMsCisJCQkJCQkgIHZvaWQgKCpmdW5jKShleHQyX2ZpbHN5cyBmcywKKwkJCQkJCQkgICAgICAgYmxrNjRfdCBibGssCisJCQkJCQkJICAgICAgIGludCBpbnVzZSksCisJCQkJCQkgIHZvaWQgKCoqb2xkKShleHQyX2ZpbHN5cyBmcywKKwkJCQkJCQkgICAgICAgYmxrNjRfdCBibGssCisJCQkJCQkJICAgICAgIGludCBpbnVzZSkpOworCisvKiBhbGxvY19zdGF0cy5jICovCit2b2lkIGV4dDJmc19pbm9kZV9hbGxvY19zdGF0cyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sIGludCBpbnVzZSk7Cit2b2lkIGV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICAgIGludCBpbnVzZSwgaW50IGlzZGlyKTsKK3ZvaWQgZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibGssIGludCBpbnVzZSk7Cit2b2lkIGV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxrLCBpbnQgaW51c2UpOwordm9pZCBleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHNfcmFuZ2UoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxrLAorCQkJCSAgICBibGtfdCBudW0sIGludCBpbnVzZSk7CisKKy8qIGFsbG9jX3RhYmxlcy5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19hbGxvY2F0ZV90YWJsZXMoZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYWxsb2NhdGVfZ3JvdXBfdGFibGUoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwKKwkJCQkJICAgICBleHQyZnNfYmxvY2tfYml0bWFwIGJtYXApOworCisvKiBiYWRibG9ja3MuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfdTMyX2xpc3RfY3JlYXRlKGV4dDJfdTMyX2xpc3QgKnJldCwgaW50IHNpemUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfdTMyX2xpc3RfYWRkKGV4dDJfdTMyX2xpc3QgYmIsIF9fdTMyIGJsayk7CitleHRlcm4gaW50IGV4dDJmc191MzJfbGlzdF9maW5kKGV4dDJfdTMyX2xpc3QgYmIsIF9fdTMyIGJsayk7CitleHRlcm4gaW50IGV4dDJmc191MzJfbGlzdF90ZXN0KGV4dDJfdTMyX2xpc3QgYmIsIGJsa190IGJsayk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc191MzJfbGlzdF9pdGVyYXRlX2JlZ2luKGV4dDJfdTMyX2xpc3QgYmIsCisJCQkJCSAgICAgICBleHQyX3UzMl9pdGVyYXRlICpyZXQpOworZXh0ZXJuIGludCBleHQyZnNfdTMyX2xpc3RfaXRlcmF0ZShleHQyX3UzMl9pdGVyYXRlIGl0ZXIsIGJsa190ICpibGspOworZXh0ZXJuIHZvaWQgZXh0MmZzX3UzMl9saXN0X2l0ZXJhdGVfZW5kKGV4dDJfdTMyX2l0ZXJhdGUgaXRlcik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc191MzJfY29weShleHQyX3UzMl9saXN0IHNyYywgZXh0Ml91MzJfbGlzdCAqZGVzdCk7CitleHRlcm4gaW50IGV4dDJmc191MzJfbGlzdF9lcXVhbChleHQyX3UzMl9saXN0IGJiMSwgZXh0Ml91MzJfbGlzdCBiYjIpOworCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19iYWRibG9ja3NfbGlzdF9jcmVhdGUoZXh0Ml9iYWRibG9ja3NfbGlzdCAqcmV0LAorCQkJCQkgICAgaW50IHNpemUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfYWRkKGV4dDJfYmFkYmxvY2tzX2xpc3QgYmIsCisJCQkJCSAgIGJsa190IGJsayk7CitleHRlcm4gaW50IGV4dDJmc19iYWRibG9ja3NfbGlzdF90ZXN0KGV4dDJfYmFkYmxvY2tzX2xpc3QgYmIsCisJCQkJICAgIGJsa190IGJsayk7CitleHRlcm4gaW50IGV4dDJmc191MzJfbGlzdF9kZWwoZXh0Ml91MzJfbGlzdCBiYiwgX191MzIgYmxrKTsKK2V4dGVybiB2b2lkIGV4dDJmc19iYWRibG9ja3NfbGlzdF9kZWwoZXh0Ml91MzJfbGlzdCBiYiwgX191MzIgYmxrKTsKK2V4dGVybiBlcnJjb2RlX3QKKwlleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9iZWdpbihleHQyX2JhZGJsb2Nrc19saXN0IGJiLAorCQkJCQkgICAgZXh0Ml9iYWRibG9ja3NfaXRlcmF0ZSAqcmV0KTsKK2V4dGVybiBpbnQgZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGUoZXh0Ml9iYWRibG9ja3NfaXRlcmF0ZSBpdGVyLAorCQkJCQkgYmxrX3QgKmJsayk7CitleHRlcm4gdm9pZCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9lbmQoZXh0Ml9iYWRibG9ja3NfaXRlcmF0ZSBpdGVyKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2JhZGJsb2Nrc19jb3B5KGV4dDJfYmFkYmxvY2tzX2xpc3Qgc3JjLAorCQkJCSAgICAgICBleHQyX2JhZGJsb2Nrc19saXN0ICpkZXN0KTsKK2V4dGVybiBpbnQgZXh0MmZzX2JhZGJsb2Nrc19lcXVhbChleHQyX2JhZGJsb2Nrc19saXN0IGJiMSwKKwkJCQkgIGV4dDJfYmFkYmxvY2tzX2xpc3QgYmIyKTsKK2V4dGVybiBpbnQgZXh0MmZzX3UzMl9saXN0X2NvdW50KGV4dDJfdTMyX2xpc3QgYmIpOworCisvKiBiYl9jb21wYXQgKi8KK2V4dGVybiBlcnJjb2RlX3QgYmFkYmxvY2tzX2xpc3RfY3JlYXRlKGJhZGJsb2Nrc19saXN0ICpyZXQsIGludCBzaXplKTsKK2V4dGVybiBlcnJjb2RlX3QgYmFkYmxvY2tzX2xpc3RfYWRkKGJhZGJsb2Nrc19saXN0IGJiLCBibGtfdCBibGspOworZXh0ZXJuIGludCBiYWRibG9ja3NfbGlzdF90ZXN0KGJhZGJsb2Nrc19saXN0IGJiLCBibGtfdCBibGspOworZXh0ZXJuIGVycmNvZGVfdCBiYWRibG9ja3NfbGlzdF9pdGVyYXRlX2JlZ2luKGJhZGJsb2Nrc19saXN0IGJiLAorCQkJCQkgICAgICBiYWRibG9ja3NfaXRlcmF0ZSAqcmV0KTsKK2V4dGVybiBpbnQgYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZShiYWRibG9ja3NfaXRlcmF0ZSBpdGVyLCBibGtfdCAqYmxrKTsKK2V4dGVybiB2b2lkIGJhZGJsb2Nrc19saXN0X2l0ZXJhdGVfZW5kKGJhZGJsb2Nrc19pdGVyYXRlIGl0ZXIpOworZXh0ZXJuIHZvaWQgYmFkYmxvY2tzX2xpc3RfZnJlZShiYWRibG9ja3NfbGlzdCBiYik7CisKKy8qIGJiX2lub2RlLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3VwZGF0ZV9iYl9pbm9kZShleHQyX2ZpbHN5cyBmcywKKwkJCQkJZXh0Ml9iYWRibG9ja3NfbGlzdCBiYl9saXN0KTsKKworLyogYml0bWFwcy5jICovCitleHRlcm4gdm9pZCBleHQyZnNfZnJlZV9ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXApOworZXh0ZXJuIHZvaWQgZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2NvcHlfYml0bWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBzcmMsCisJCQkJICAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCAqZGVzdCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc193cml0ZV9pbm9kZV9iaXRtYXAoZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfd3JpdGVfYmxvY2tfYml0bWFwIChleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZWFkX2lub2RlX2JpdG1hcCAoZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfcmVhZF9ibG9ja19iaXRtYXAoZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYWxsb2NhdGVfYmxvY2tfYml0bWFwKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgICAgICBjb25zdCBjaGFyICpkZXNjciwKKwkJCQkJICAgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCAqcmV0KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2FsbG9jYXRlX3N1YmNsdXN0ZXJfYml0bWFwKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkJICAgY29uc3QgY2hhciAqZGVzY3IsCisJCQkJCQkgICBleHQyZnNfYmxvY2tfYml0bWFwICpyZXQpOworZXh0ZXJuIGludCBleHQyZnNfZ2V0X2JpdG1hcF9ncmFudWxhcml0eShleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKmRlc2NyLAorCQkJCQkgICAgICBleHQyZnNfaW5vZGVfYml0bWFwICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZnVkZ2VfaW5vZGVfYml0bWFwX2VuZChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgICAgIGV4dDJfaW5vX3QgZW5kLCBleHQyX2lub190ICpvZW5kKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2Z1ZGdlX2Jsb2NrX2JpdG1hcF9lbmQoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgICAgICBibGtfdCBlbmQsIGJsa190ICpvZW5kKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2Z1ZGdlX2Jsb2NrX2JpdG1hcF9lbmQyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgYmxrNjRfdCBlbmQsIGJsazY0X3QgKm9lbmQpOworZXh0ZXJuIHZvaWQgZXh0MmZzX2NsZWFyX2lub2RlX2JpdG1hcChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCk7CitleHRlcm4gdm9pZCBleHQyZnNfY2xlYXJfYmxvY2tfYml0bWFwKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3JlYWRfYml0bWFwcyhleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc193cml0ZV9iaXRtYXBzKGV4dDJfZmlsc3lzIGZzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3Jlc2l6ZV9pbm9kZV9iaXRtYXAoX191MzIgbmV3X2VuZCwgX191MzIgbmV3X3JlYWxfZW5kLAorCQkJCQkgICAgZXh0MmZzX2lub2RlX2JpdG1hcCBibWFwKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3Jlc2l6ZV9pbm9kZV9iaXRtYXAyKF9fdTY0IG5ld19lbmQsCisJCQkJCSAgICAgX191NjQgbmV3X3JlYWxfZW5kLAorCQkJCQkgICAgIGV4dDJmc19pbm9kZV9iaXRtYXAgYm1hcCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZXNpemVfYmxvY2tfYml0bWFwKF9fdTMyIG5ld19lbmQsIF9fdTMyIG5ld19yZWFsX2VuZCwKKwkJCQkJICAgIGV4dDJmc19ibG9ja19iaXRtYXAgYm1hcCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZXNpemVfYmxvY2tfYml0bWFwMihfX3U2NCBuZXdfZW5kLAorCQkJCQkgICAgIF9fdTY0IG5ld19yZWFsX2VuZCwKKwkJCQkJICAgICBleHQyZnNfYmxvY2tfYml0bWFwIGJtYXApOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY29tcGFyZV9ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBibTEsCisJCQkJCSAgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCBibTIpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY29tcGFyZV9pbm9kZV9iaXRtYXAoZXh0MmZzX2lub2RlX2JpdG1hcCBibTEsCisJCQkJCSAgICAgZXh0MmZzX2lub2RlX2JpdG1hcCBibTIpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfc2V0X2lub2RlX2JpdG1hcF9yYW5nZShleHQyZnNfaW5vZGVfYml0bWFwIGJtYXAsCisJCQkJCWV4dDJfaW5vX3Qgc3RhcnQsIHVuc2lnbmVkIGludCBudW0sCisJCQkJCXZvaWQgKmluKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3NldF9pbm9kZV9iaXRtYXBfcmFuZ2UyKGV4dDJmc19pbm9kZV9iaXRtYXAgYm1hcCwKKwkJCQkJIF9fdTY0IHN0YXJ0LCBzaXplX3QgbnVtLAorCQkJCQkgdm9pZCAqaW4pOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9yYW5nZShleHQyZnNfaW5vZGVfYml0bWFwIGJtYXAsCisJCQkJCWV4dDJfaW5vX3Qgc3RhcnQsIHVuc2lnbmVkIGludCBudW0sCisJCQkJCXZvaWQgKm91dCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfaW5vZGVfYml0bWFwX3JhbmdlMihleHQyZnNfaW5vZGVfYml0bWFwIGJtYXAsCisJCQkJCSBfX3U2NCBzdGFydCwgc2l6ZV90IG51bSwKKwkJCQkJIHZvaWQgKm91dCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19zZXRfYmxvY2tfYml0bWFwX3JhbmdlKGV4dDJmc19ibG9ja19iaXRtYXAgYm1hcCwKKwkJCQkJYmxrX3Qgc3RhcnQsIHVuc2lnbmVkIGludCBudW0sCisJCQkJCXZvaWQgKmluKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3NldF9ibG9ja19iaXRtYXBfcmFuZ2UyKGV4dDJmc19ibG9ja19iaXRtYXAgYm1hcCwKKwkJCQkJIGJsazY0X3Qgc3RhcnQsIHNpemVfdCBudW0sCisJCQkJCSB2b2lkICppbik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3JhbmdlKGV4dDJmc19ibG9ja19iaXRtYXAgYm1hcCwKKwkJCQkJYmxrX3Qgc3RhcnQsIHVuc2lnbmVkIGludCBudW0sCisJCQkJCXZvaWQgKm91dCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3JhbmdlMihleHQyZnNfYmxvY2tfYml0bWFwIGJtYXAsCisJCQkJCSBibGs2NF90IHN0YXJ0LCBzaXplX3QgbnVtLAorCQkJCQkgdm9pZCAqb3V0KTsKKworLyogYmxrbnVtLmMgKi8KK2V4dGVybiBkZ3JwX3QgZXh0MmZzX2dyb3VwX29mX2JsazIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QpOworZXh0ZXJuIGJsazY0X3QgZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKTsKK2V4dGVybiBibGs2NF90IGV4dDJmc19ncm91cF9sYXN0X2Jsb2NrMihleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKTsKK2V4dGVybiBpbnQgZXh0MmZzX2dyb3VwX2Jsb2Nrc19jb3VudChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKTsKK2V4dGVybiBibGs2NF90IGV4dDJmc19pbm9kZV9kYXRhX2Jsb2NrczIoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpOworZXh0ZXJuIGJsazY0X3QgZXh0MmZzX2lub2RlX2lfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKTsKK2V4dGVybiBibGs2NF90IGV4dDJmc19ibG9ja3NfY291bnQoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnN1cGVyKTsKK2V4dGVybiB2b2lkIGV4dDJmc19ibG9ja3NfY291bnRfc2V0KHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlciwKKwkJCQkgICAgYmxrNjRfdCBibGspOworZXh0ZXJuIHZvaWQgZXh0MmZzX2Jsb2Nrc19jb3VudF9hZGQoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnN1cGVyLAorCQkJCSAgICBibGs2NF90IGJsayk7CitleHRlcm4gYmxrNjRfdCBleHQyZnNfcl9ibG9ja3NfY291bnQoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnN1cGVyKTsKK2V4dGVybiB2b2lkIGV4dDJmc19yX2Jsb2Nrc19jb3VudF9zZXQoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnN1cGVyLAorCQkJCSAgICAgIGJsazY0X3QgYmxrKTsKK2V4dGVybiB2b2lkIGV4dDJmc19yX2Jsb2Nrc19jb3VudF9hZGQoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnN1cGVyLAorCQkJCSAgICAgIGJsazY0X3QgYmxrKTsKK2V4dGVybiBibGs2NF90IGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXIpOworZXh0ZXJuIHZvaWQgZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X3NldChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXIsCisJCQkJCSBibGs2NF90IGJsayk7CitleHRlcm4gdm9pZCBleHQyZnNfZnJlZV9ibG9ja3NfY291bnRfYWRkKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlciwKKwkJCQkJIGJsazY0X3QgYmxrKTsKKy8qIEJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgYWNjZXNzb3IgZnVuY3Rpb25zICovCitleHRlcm4gc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqZXh0MmZzX2dyb3VwX2Rlc2MoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgc3RydWN0IG9wYXF1ZV9leHQyX2dyb3VwX2Rlc2MgKmdkcCwKKwkJCQkJICBkZ3JwX3QgZ3JvdXApOworZXh0ZXJuIGJsazY0X3QgZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCk7CitleHRlcm4gdm9pZCBleHQyZnNfYmxvY2tfYml0bWFwX2xvY19zZXQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwKKwkJCQkJYmxrNjRfdCBibGspOworZXh0ZXJuIGJsazY0X3QgZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCk7CitleHRlcm4gdm9pZCBleHQyZnNfaW5vZGVfYml0bWFwX2xvY19zZXQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwKKwkJCQkJYmxrNjRfdCBibGspOworZXh0ZXJuIGJsazY0X3QgZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKTsKK2V4dGVybiB2b2lkIGV4dDJmc19pbm9kZV90YWJsZV9sb2Nfc2V0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsCisJCQkJICAgICAgIGJsazY0X3QgYmxrKTsKK2V4dGVybiBfX3UzMiBleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCk7CitleHRlcm4gdm9pZCBleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnRfc2V0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsCisJCQkJCSBfX3UzMiBuKTsKK2V4dGVybiBfX3UzMiBleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCk7CitleHRlcm4gdm9pZCBleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnRfc2V0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsCisJCQkJCSBfX3UzMiBuKTsKK2V4dGVybiBfX3UzMiBleHQyZnNfYmdfdXNlZF9kaXJzX2NvdW50KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApOworZXh0ZXJuIHZvaWQgZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudF9zZXQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwKKwkJCQkgICAgICAgX191MzIgbik7CitleHRlcm4gX191MzIgZXh0MmZzX2JnX2l0YWJsZV91bnVzZWQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCk7CitleHRlcm4gdm9pZCBleHQyZnNfYmdfaXRhYmxlX3VudXNlZF9zZXQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwKKwkJCQkgICAgIF9fdTMyIG4pOworZXh0ZXJuIF9fdTE2IGV4dDJmc19iZ19mbGFncyhleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKTsKK2V4dGVybiB2b2lkIGV4dDJmc19iZ19mbGFnc196YXAoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCk7CitleHRlcm4gaW50IGV4dDJmc19iZ19mbGFnc190ZXN0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsIF9fdTE2IGJnX2ZsYWcpOworZXh0ZXJuIHZvaWQgZXh0MmZzX2JnX2ZsYWdzX3NldChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwLCBfX3UxNiBiZ19mbGFncyk7CitleHRlcm4gdm9pZCBleHQyZnNfYmdfZmxhZ3NfY2xlYXIoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgX191MTYgYmdfZmxhZ3MpOworZXh0ZXJuIF9fdTE2IGV4dDJmc19iZ19jaGVja3N1bShleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKTsKK2V4dGVybiB2b2lkIGV4dDJmc19iZ19jaGVja3N1bV9zZXQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgX191MTYgY2hlY2tzdW0pOworZXh0ZXJuIGJsazY0X3QgZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKTsKK2V4dGVybiB2b2lkIGV4dDJmc19maWxlX2FjbF9ibG9ja19zZXQoZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBibGs2NF90IGJsayk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19pbm9kZV9zaXplX3NldChleHQyX2ZpbHN5cyBmcywgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBleHQyX29mZjY0X3Qgc2l6ZSk7CisKKy8qIGJsb2NrLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUoZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgICAgZXh0Ml9pbm9fdAlpbm8sCisJCQkJICAgICAgaW50CWZsYWdzLAorCQkJCSAgICAgIGNoYXIgKmJsb2NrX2J1ZiwKKwkJCQkgICAgICBpbnQgKCpmdW5jKShleHQyX2ZpbHN5cyBmcywKKwkJCQkJCSAgYmxrX3QJKmJsb2NrbnIsCisJCQkJCQkgIGludAlibG9ja2NudCwKKwkJCQkJCSAgdm9pZAkqcHJpdl9kYXRhKSwKKwkJCQkgICAgICB2b2lkICpwcml2X2RhdGEpOworZXJyY29kZV90IGV4dDJmc19ibG9ja19pdGVyYXRlMihleHQyX2ZpbHN5cyBmcywKKwkJCQlleHQyX2lub190CWlubywKKwkJCQlpbnQJZmxhZ3MsCisJCQkJY2hhciAqYmxvY2tfYnVmLAorCQkJCWludCAoKmZ1bmMpKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgICAgYmxrX3QJKmJsb2NrbnIsCisJCQkJCSAgICBlMl9ibGtjbnRfdAlibG9ja2NudCwKKwkJCQkJICAgIGJsa190CXJlZl9ibGssCisJCQkJCSAgICBpbnQJCXJlZl9vZmZzZXQsCisJCQkJCSAgICB2b2lkCSpwcml2X2RhdGEpLAorCQkJCXZvaWQgKnByaXZfZGF0YSk7CitlcnJjb2RlX3QgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGV4dDJfZmlsc3lzIGZzLAorCQkJCWV4dDJfaW5vX3QgaW5vLAorCQkJCWludAlmbGFncywKKwkJCQljaGFyICpibG9ja19idWYsCisJCQkJaW50ICgqZnVuYykoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgICBibGs2NF90CSpibG9ja25yLAorCQkJCQkgICAgZTJfYmxrY250X3QJYmxvY2tjbnQsCisJCQkJCSAgICBibGs2NF90CXJlZl9ibGssCisJCQkJCSAgICBpbnQJCXJlZl9vZmZzZXQsCisJCQkJCSAgICB2b2lkCSpwcml2X2RhdGEpLAorCQkJCXZvaWQgKnByaXZfZGF0YSk7CisKKy8qIGJtYXAuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYm1hcChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCSAgICAgY2hhciAqYmxvY2tfYnVmLCBpbnQgYm1hcF9mbGFncywKKwkJCSAgICAgYmxrX3QgYmxvY2ssIGJsa190ICpwaHlzX2Jsayk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19ibWFwMihleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkgICAgICBjaGFyICpibG9ja19idWYsIGludCBibWFwX2ZsYWdzLCBibGs2NF90IGJsb2NrLAorCQkJICAgICAgaW50ICpyZXRfZmxhZ3MsIGJsazY0X3QgKnBoeXNfYmxrKTsKK2VycmNvZGVfdCBleHQyZnNfbWFwX2NsdXN0ZXJfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwgYmxrNjRfdCBsYmxrLAorCQkJCSAgIGJsazY0X3QgKnBibGspOworCisjaWYgMAorLyogYm1vdmUuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfbW92ZV9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgIGV4dDJmc19ibG9ja19iaXRtYXAgcmVzZXJ2ZSwKKwkJCQkgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCBhbGxvY19tYXAsCisJCQkJICAgIGludCBmbGFncyk7CisjZW5kaWYKKworLyogY2hlY2tfZGVzYy5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19jaGVja19kZXNjKGV4dDJfZmlsc3lzIGZzKTsKKworLyogY2xvc2Vmcy5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19jbG9zZShleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19jbG9zZTIoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19jbG9zZV9mcmVlKGV4dDJfZmlsc3lzICpmcyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19mbHVzaChleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19mbHVzaDIoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncyk7CitleHRlcm4gaW50IGV4dDJmc19iZ19oYXNfc3VwZXIoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cF9ibG9jayk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19zdXBlcl9hbmRfYmdkX2xvYzIoZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgIGRncnBfdCBncm91cCwKKwkJCQkgICAgYmxrNjRfdCAqcmV0X3N1cGVyX2JsaywKKwkJCQkgICAgYmxrNjRfdCAqcmV0X29sZF9kZXNjX2JsaywKKwkJCQkgICAgYmxrNjRfdCAqcmV0X25ld19kZXNjX2JsaywKKwkJCQkgICAgYmxrX3QgKnJldF91c2VkX2Jsa3MpOworZXh0ZXJuIGludCBleHQyZnNfc3VwZXJfYW5kX2JnZF9sb2MoZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgIGRncnBfdCBncm91cCwKKwkJCQkgICAgYmxrX3QgKnJldF9zdXBlcl9ibGssCisJCQkJICAgIGJsa190ICpyZXRfb2xkX2Rlc2NfYmxrLAorCQkJCSAgICBibGtfdCAqcmV0X25ld19kZXNjX2JsaywKKwkJCQkgICAgaW50ICpyZXRfbWV0YV9iZyk7CitleHRlcm4gdm9pZCBleHQyZnNfdXBkYXRlX2R5bmFtaWNfcmV2KGV4dDJfZmlsc3lzIGZzKTsKKworLyogY3JjMzJjLmMgKi8KK2V4dGVybiBfX3UzMiBleHQyZnNfY3JjMzJjX2JlKF9fdTMyIGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqcCwgc2l6ZV90IGxlbik7CitleHRlcm4gX191MzIgZXh0MmZzX2NyYzMyY19sZShfX3UzMiBjcmMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsIHNpemVfdCBsZW4pOworCisvKiBjc3VtLmMgKi8KK2V4dGVybiB2b2lkIGV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApOworZXh0ZXJuIGludCBleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3ZlcmlmeShleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3NldF9nZHRfY3N1bShleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gX191MTYgZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bShleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKTsKKworLyogZGJsaXN0LmMgKi8KKworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X251bV9kaXJzKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190ICpyZXRfbnVtX2RpcnMpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfaW5pdF9kYmxpc3QoZXh0Ml9maWxzeXMgZnMsIGV4dDJfZGJsaXN0ICpyZXRfZGJsaXN0KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2FkZF9kaXJfYmxvY2soZXh0Ml9kYmxpc3QgZGJsaXN0LCBleHQyX2lub190IGlubywKKwkJCQkgICAgICBibGtfdCBibGssIGludCBibG9ja2NudCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19hZGRfZGlyX2Jsb2NrMihleHQyX2RibGlzdCBkYmxpc3QsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgICAgICBibGs2NF90IGJsaywgZTJfYmxrY250X3QgYmxvY2tjbnQpOworZXh0ZXJuIHZvaWQgZXh0MmZzX2RibGlzdF9zb3J0KGV4dDJfZGJsaXN0IGRibGlzdCwKKwkJCSAgICAgICBFWFQyX1FTT1JUX1RZUEUgKCpzb3J0ZnVuYykoY29uc3Qgdm9pZCAqLAorCQkJCQkJCSAgIGNvbnN0IHZvaWQgKikpOworZXh0ZXJuIHZvaWQgZXh0MmZzX2RibGlzdF9zb3J0MihleHQyX2RibGlzdCBkYmxpc3QsCisJCQkJRVhUMl9RU09SVF9UWVBFICgqc29ydGZ1bmMpKGNvbnN0IHZvaWQgKiwKKwkJCQkJCQkgICAgY29uc3Qgdm9pZCAqKSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19kYmxpc3RfaXRlcmF0ZShleHQyX2RibGlzdCBkYmxpc3QsCisJaW50ICgqZnVuYykoZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBleHQyX2RiX2VudHJ5ICpkYl9pbmZvLAorCQkgICAgdm9pZAkqcHJpdl9kYXRhKSwKKyAgICAgICB2b2lkICpwcml2X2RhdGEpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZGJsaXN0X2l0ZXJhdGUyKGV4dDJfZGJsaXN0IGRibGlzdCwKKwlpbnQgKCpmdW5jKShleHQyX2ZpbHN5cyBmcywgc3RydWN0IGV4dDJfZGJfZW50cnkyICpkYl9pbmZvLAorCQkgICAgdm9pZAkqcHJpdl9kYXRhKSwKKyAgICAgICB2b2lkICpwcml2X2RhdGEpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfc2V0X2Rpcl9ibG9jayhleHQyX2RibGlzdCBkYmxpc3QsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgICAgIGJsa190IGJsaywgaW50IGJsb2NrY250KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3NldF9kaXJfYmxvY2syKGV4dDJfZGJsaXN0IGRibGlzdCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICAgICAgIGJsazY0X3QgYmxrLCBlMl9ibGtjbnRfdCBibG9ja2NudCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19jb3B5X2RibGlzdChleHQyX2RibGlzdCBzcmMsCisJCQkJICAgIGV4dDJfZGJsaXN0ICpkZXN0KTsKK2V4dGVybiBpbnQgZXh0MmZzX2RibGlzdF9jb3VudChleHQyX2RibGlzdCBkYmxpc3QpOworZXh0ZXJuIGJsazY0X3QgZXh0MmZzX2RibGlzdF9jb3VudDIoZXh0Ml9kYmxpc3QgZGJsaXN0KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2RibGlzdF9nZXRfbGFzdChleHQyX2RibGlzdCBkYmxpc3QsCisJCQkJCXN0cnVjdCBleHQyX2RiX2VudHJ5ICoqZW50cnkpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZGJsaXN0X2dldF9sYXN0MihleHQyX2RibGlzdCBkYmxpc3QsCisJCQkJCXN0cnVjdCBleHQyX2RiX2VudHJ5MiAqKmVudHJ5KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2RibGlzdF9kcm9wX2xhc3QoZXh0Ml9kYmxpc3QgZGJsaXN0KTsKKworLyogZGJsaXN0X2Rpci5jICovCitleHRlcm4gZXJyY29kZV90CisJZXh0MmZzX2RibGlzdF9kaXJfaXRlcmF0ZShleHQyX2RibGlzdCBkYmxpc3QsCisJCQkJICBpbnQJZmxhZ3MsCisJCQkJICBjaGFyCSpibG9ja19idWYsCisJCQkJICBpbnQgKCpmdW5jKShleHQyX2lub190CWRpciwKKwkJCQkJICAgICAgaW50CQllbnRyeSwKKwkJCQkJICAgICAgc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCQkJCSAgICAgIGludAlvZmZzZXQsCisJCQkJCSAgICAgIGludAlibG9ja3NpemUsCisJCQkJCSAgICAgIGNoYXIJKmJ1ZiwKKwkJCQkJICAgICAgdm9pZAkqcHJpdl9kYXRhKSwKKwkJCQkgIHZvaWQgKnByaXZfZGF0YSk7CisKKy8qIGRpcmJsb2NrLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3JlYWRfZGlyX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibG9jaywKKwkJCQkgICAgICAgdm9pZCAqYnVmKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3JlYWRfZGlyX2Jsb2NrMihleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxvY2ssCisJCQkJCXZvaWQgKmJ1ZiwgaW50IGZsYWdzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3JlYWRfZGlyX2Jsb2NrMyhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibG9jaywKKwkJCQkJdm9pZCAqYnVmLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibG9jaywKKwkJCQkJdm9pZCAqYnVmKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazIoZXh0Ml9maWxzeXMgZnMsIGJsa190IGJsb2NrLAorCQkJCQkgdm9pZCAqYnVmLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrMyhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibG9jaywKKwkJCQkJIHZvaWQgKmJ1ZiwgaW50IGZsYWdzKTsKKworLyogZGlyaGFzaC5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19kaXJoYXNoKGludCB2ZXJzaW9uLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAorCQkJCWNvbnN0IF9fdTMyICpzZWVkLAorCQkJCWV4dDJfZGlyaGFzaF90ICpyZXRfaGFzaCwKKwkJCQlleHQyX2Rpcmhhc2hfdCAqcmV0X21pbm9yX2hhc2gpOworCisKKy8qIGRpcl9pdGVyYXRlLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2dldF9yZWNfbGVuKGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgICBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJCQkgICAgdW5zaWduZWQgaW50ICpyZWNfbGVuKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3NldF9yZWNfbGVuKGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCSAgICBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19kaXJfaXRlcmF0ZShleHQyX2ZpbHN5cyBmcywKKwkJCSAgICAgIGV4dDJfaW5vX3QgZGlyLAorCQkJICAgICAgaW50IGZsYWdzLAorCQkJICAgICAgY2hhciAqYmxvY2tfYnVmLAorCQkJICAgICAgaW50ICgqZnVuYykoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCQkJCSAgaW50CW9mZnNldCwKKwkJCQkJICBpbnQJYmxvY2tzaXplLAorCQkJCQkgIGNoYXIJKmJ1ZiwKKwkJCQkJICB2b2lkCSpwcml2X2RhdGEpLAorCQkJICAgICAgdm9pZCAqcHJpdl9kYXRhKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2Rpcl9pdGVyYXRlMihleHQyX2ZpbHN5cyBmcywKKwkJCSAgICAgIGV4dDJfaW5vX3QgZGlyLAorCQkJICAgICAgaW50IGZsYWdzLAorCQkJICAgICAgY2hhciAqYmxvY2tfYnVmLAorCQkJICAgICAgaW50ICgqZnVuYykoZXh0Ml9pbm9fdAlkaXIsCisJCQkJCSAgaW50CWVudHJ5LAorCQkJCQkgIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkJCQkgIGludAlvZmZzZXQsCisJCQkJCSAgaW50CWJsb2Nrc2l6ZSwKKwkJCQkJICBjaGFyCSpidWYsCisJCQkJCSAgdm9pZAkqcHJpdl9kYXRhKSwKKwkJCSAgICAgIHZvaWQgKnByaXZfZGF0YSk7CisKKy8qIGR1cGZzLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2R1cF9oYW5kbGUoZXh0Ml9maWxzeXMgc3JjLCBleHQyX2ZpbHN5cyAqZGVzdCk7CisKKy8qIGV4cGFuZGRpci5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19leHBhbmRfZGlyKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGRpcik7CisKKy8qIGV4dF9hdHRyLmMgKi8KK2V4dGVybiBfX3UzMiBleHQyZnNfZXh0X2F0dHJfaGFzaF9lbnRyeShzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9lbnRyeSAqZW50cnksCisJCQkJCXZvaWQgKmRhdGEpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfcmVhZF9leHRfYXR0cihleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxvY2ssIHZvaWQgKmJ1Zik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZWFkX2V4dF9hdHRyMihleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibG9jaywKKwkJCQkgICAgICAgdm9pZCAqYnVmKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2V4dF9hdHRyKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibG9jaywKKwkJCQkgICAgICAgdm9pZCAqYnVmKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2V4dF9hdHRyMihleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibG9jaywKKwkJCQkgICAgICAgdm9pZCAqYnVmKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudChleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxrLAorCQkJCQkgICBjaGFyICpibG9ja19idWYsCisJCQkJCSAgIGludCBhZGp1c3QsIF9fdTMyICpuZXdjb3VudCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90IGJsaywKKwkJCQkJICAgY2hhciAqYmxvY2tfYnVmLAorCQkJCQkgICBpbnQgYWRqdXN0LCBfX3UzMiAqbmV3Y291bnQpOworCisvKiBleHRlbnQuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZXh0ZW50X2hlYWRlcl92ZXJpZnkodm9pZCAqcHRyLCBpbnQgc2l6ZSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19leHRlbnRfb3BlbihleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICAgIGV4dDJfZXh0ZW50X2hhbmRsZV90ICpoYW5kbGUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZXh0ZW50X29wZW4yKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkJc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCQlleHQyX2V4dGVudF9oYW5kbGVfdCAqcmV0X2hhbmRsZSk7CitleHRlcm4gdm9pZCBleHQyZnNfZXh0ZW50X2ZyZWUoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9nZXQoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlLAorCQkJCSAgIGludCBmbGFncywgc3RydWN0IGV4dDJmc19leHRlbnQgKmV4dGVudCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19leHRlbnRfbm9kZV9zcGxpdChleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZXh0ZW50X3JlcGxhY2UoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlLCBpbnQgZmxhZ3MsCisJCQkJICAgICAgIHN0cnVjdCBleHQyZnNfZXh0ZW50ICpleHRlbnQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZXh0ZW50X2luc2VydChleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUsIGludCBmbGFncywKKwkJCQkgICAgICBzdHJ1Y3QgZXh0MmZzX2V4dGVudCAqZXh0ZW50KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9zZXRfYm1hcChleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUsCisJCQkJCWJsazY0X3QgbG9naWNhbCwgYmxrNjRfdCBwaHlzaWNhbCwKKwkJCQkJaW50IGZsYWdzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9kZWxldGUoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZXh0ZW50X2dldF9pbmZvKGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSwKKwkJCQkJc3RydWN0IGV4dDJfZXh0ZW50X2luZm8gKmluZm8pOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZXh0ZW50X2dvdG8oZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlLAorCQkJCSAgICBibGs2NF90IGJsayk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19leHRlbnRfZ290bzIoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlLAorCQkJCSAgICAgaW50IGxlYWZfbGV2ZWwsIGJsazY0X3QgYmxrKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9maXhfcGFyZW50cyhleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUpOworCisvKiBmaWxlaW8uYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmlsZV9vcGVuMihleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCSAgIGludCBmbGFncywgZXh0Ml9maWxlX3QgKnJldCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19maWxlX29wZW4oZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgaW50IGZsYWdzLCBleHQyX2ZpbGVfdCAqcmV0KTsKK2V4dGVybiBleHQyX2ZpbHN5cyBleHQyZnNfZmlsZV9nZXRfZnMoZXh0Ml9maWxlX3QgZmlsZSk7CitzdHJ1Y3QgZXh0Ml9pbm9kZSAqZXh0MmZzX2ZpbGVfZ2V0X2lub2RlKGV4dDJfZmlsZV90IGZpbGUpOworZXh0ZXJuIGV4dDJfaW5vX3QgZXh0MmZzX2ZpbGVfZ2V0X2lub2RlX251bShleHQyX2ZpbGVfdCBmaWxlKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfY2xvc2UoZXh0Ml9maWxlX3QgZmlsZSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19maWxlX2ZsdXNoKGV4dDJfZmlsZV90IGZpbGUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmlsZV9yZWFkKGV4dDJfZmlsZV90IGZpbGUsIHZvaWQgKmJ1ZiwKKwkJCQkgIHVuc2lnbmVkIGludCB3YW50ZWQsIHVuc2lnbmVkIGludCAqZ290KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfd3JpdGUoZXh0Ml9maWxlX3QgZmlsZSwgY29uc3Qgdm9pZCAqYnVmLAorCQkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMsIHVuc2lnbmVkIGludCAqd3JpdHRlbik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19maWxlX2xsc2VlayhleHQyX2ZpbGVfdCBmaWxlLCBfX3U2NCBvZmZzZXQsCisJCQkJICAgaW50IHdoZW5jZSwgX191NjQgKnJldF9wb3MpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmlsZV9sc2VlayhleHQyX2ZpbGVfdCBmaWxlLCBleHQyX29mZl90IG9mZnNldCwKKwkJCQkgICBpbnQgd2hlbmNlLCBleHQyX29mZl90ICpyZXRfcG9zKTsKK2VycmNvZGVfdCBleHQyZnNfZmlsZV9nZXRfbHNpemUoZXh0Ml9maWxlX3QgZmlsZSwgX191NjQgKnJldF9zaXplKTsKK2V4dGVybiBleHQyX29mZl90IGV4dDJmc19maWxlX2dldF9zaXplKGV4dDJfZmlsZV90IGZpbGUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmlsZV9zZXRfc2l6ZShleHQyX2ZpbGVfdCBmaWxlLCBleHQyX29mZl90IHNpemUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmlsZV9zZXRfc2l6ZTIoZXh0Ml9maWxlX3QgZmlsZSwgZXh0Ml9vZmY2NF90IHNpemUpOworCisvKiBmaW5kZGV2LmMgKi8KK2V4dGVybiBjaGFyICpleHQyZnNfZmluZF9ibG9ja19kZXZpY2UoZGV2X3QgZGV2aWNlKTsKKworLyogZmx1c2hiLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3N5bmNfZGV2aWNlKGludCBmZCwgaW50IGZsdXNoYik7CisKKy8qIGZyZWVmcy5jICovCitleHRlcm4gdm9pZCBleHQyZnNfZnJlZShleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gdm9pZCBleHQyZnNfZnJlZV9kYmxpc3QoZXh0Ml9kYmxpc3QgZGJsaXN0KTsKK2V4dGVybiB2b2lkIGV4dDJmc19iYWRibG9ja3NfbGlzdF9mcmVlKGV4dDJfYmFkYmxvY2tzX2xpc3QgYmIpOworZXh0ZXJuIHZvaWQgZXh0MmZzX3UzMl9saXN0X2ZyZWUoZXh0Ml91MzJfbGlzdCBiYik7CisKKy8qIGdlbl9iaXRtYXAuYyAqLworZXh0ZXJuIHZvaWQgZXh0MmZzX2ZyZWVfZ2VuZXJpY19iaXRtYXAoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXApOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfbWFrZV9nZW5lcmljX2JpdG1hcChlcnJjb2RlX3QgbWFnaWMsIGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgICAgX191MzIgc3RhcnQsIF9fdTMyIGVuZCwKKwkJCQkJICAgIF9fdTMyIHJlYWxfZW5kLAorCQkJCQkgICAgY29uc3QgY2hhciAqZGVzY3IsIGNoYXIgKmluaXRfbWFwLAorCQkJCQkgICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYWxsb2NhdGVfZ2VuZXJpY19iaXRtYXAoX191MzIgc3RhcnQsCisJCQkJCQlfX3UzMiBlbmQsCisJCQkJCQlfX3UzMiByZWFsX2VuZCwKKwkJCQkJCWNvbnN0IGNoYXIgKmRlc2NyLAorCQkJCQkJZXh0MmZzX2dlbmVyaWNfYml0bWFwICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY29weV9nZW5lcmljX2JpdG1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgc3JjLAorCQkJCQkgICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwICpkZXN0KTsKK2V4dGVybiB2b2lkIGV4dDJmc19jbGVhcl9nZW5lcmljX2JpdG1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2Z1ZGdlX2dlbmVyaWNfYml0bWFwX2VuZChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkJCSBlcnJjb2RlX3QgbWFnaWMsCisJCQkJCQkgZXJyY29kZV90IG5lcSwKKwkJCQkJCSBleHQyX2lub190IGVuZCwKKwkJCQkJCSBleHQyX2lub190ICpvZW5kKTsKK2V4dGVybiB2b2lkIGV4dDJmc19zZXRfZ2VuZXJpY19iaXRtYXBfcGFkZGluZyhleHQyZnNfZ2VuZXJpY19iaXRtYXAgbWFwKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3Jlc2l6ZV9nZW5lcmljX2JpdG1hcChlcnJjb2RlX3QgbWFnaWMsCisJCQkJCSAgICAgIF9fdTMyIG5ld19lbmQsCisJCQkJCSAgICAgIF9fdTMyIG5ld19yZWFsX2VuZCwKKwkJCQkJICAgICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXApOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY29tcGFyZV9nZW5lcmljX2JpdG1hcChlcnJjb2RlX3QgbWFnaWMsIGVycmNvZGVfdCBuZXEsCisJCQkJCSAgICAgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm0xLAorCQkJCQkgICAgICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtMik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfZ2VuZXJpY19iaXRtYXBfcmFuZ2UoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXAsCisJCQkJCQkgZXJyY29kZV90IG1hZ2ljLAorCQkJCQkJIF9fdTMyIHN0YXJ0LCBfX3UzMiBudW0sCisJCQkJCQkgdm9pZCAqb3V0KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3NldF9nZW5lcmljX2JpdG1hcF9yYW5nZShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCwKKwkJCQkJCSBlcnJjb2RlX3QgbWFnaWMsCisJCQkJCQkgX191MzIgc3RhcnQsIF9fdTMyIG51bSwKKwkJCQkJCSB2b2lkICppbik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19maW5kX2ZpcnN0X3plcm9fZ2VuZXJpY19iaXRtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJCSAgICAgICBfX3UzMiBzdGFydCwgX191MzIgZW5kLAorCQkJCQkJICAgICAgIF9fdTMyICpvdXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmluZF9maXJzdF9zZXRfZ2VuZXJpY19iaXRtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJCSAgICAgICBfX3UzMiBzdGFydCwgX191MzIgZW5kLAorCQkJCQkJICAgICAgIF9fdTMyICpvdXQpOworCisvKiBnZW5fYml0bWFwNjQuYyAqLworCisvKiBHZW5lcmF0ZSBhbmQgcHJpbnQgYml0bWFwIHVzYWdlIHN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgQk1BUF9TVEFUUworCit2b2lkIGV4dDJmc19mcmVlX2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCk7CitlcnJjb2RlX3QgZXh0MmZzX2FsbG9jX2dlbmVyaWNfYm1hcChleHQyX2ZpbHN5cyBmcywgZXJyY29kZV90IG1hZ2ljLAorCQkJCSAgICBpbnQgdHlwZSwgX191NjQgc3RhcnQsIF9fdTY0IGVuZCwKKwkJCQkgICAgX191NjQgcmVhbF9lbmQsCisJCQkJICAgIGNvbnN0IGNoYXIgKmRlc2NyLAorCQkJCSAgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgKnJldCk7CitlcnJjb2RlX3QgZXh0MmZzX2NvcHlfZ2VuZXJpY19ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBzcmMsCisJCQkJICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwICpkZXN0KTsKK3ZvaWQgZXh0MmZzX2NsZWFyX2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKTsKK2VycmNvZGVfdCBleHQyZnNfZnVkZ2VfZ2VuZXJpY19ibWFwX2VuZChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCQllcnJjb2RlX3QgbmVxLAorCQkJCQlfX3U2NCBlbmQsIF9fdTY0ICpvZW5kKTsKK3ZvaWQgZXh0MmZzX3NldF9nZW5lcmljX2JtYXBfcGFkZGluZyhleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCk7CitlcnJjb2RlX3QgZXh0MmZzX3Jlc2l6ZV9nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXAsCisJCQkJICAgICBfX3U2NCBuZXdfZW5kLAorCQkJCSAgICAgX191NjQgbmV3X3JlYWxfZW5kKTsKK2VycmNvZGVfdCBleHQyZnNfY29tcGFyZV9nZW5lcmljX2JtYXAoZXJyY29kZV90IG5lcSwKKwkJCQkgICAgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm0xLAorCQkJCSAgICAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCBibTIpOworZXJyY29kZV90IGV4dDJmc19nZXRfZ2VuZXJpY19ibWFwX3JhbmdlKGV4dDJmc19nZW5lcmljX2JpdG1hcCBibWFwLAorCQkJCQlfX3U2NCBzdGFydCwgdW5zaWduZWQgaW50IG51bSwKKwkJCQkJdm9pZCAqb3V0KTsKK2VycmNvZGVfdCBleHQyZnNfc2V0X2dlbmVyaWNfYm1hcF9yYW5nZShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCwKKwkJCQkJX191NjQgc3RhcnQsIHVuc2lnbmVkIGludCBudW0sCisJCQkJCXZvaWQgKmluKTsKK2VycmNvZGVfdCBleHQyZnNfY29udmVydF9zdWJjbHVzdGVyX2JpdG1hcChleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCAqYml0bWFwKTsKKworLyogZ2V0c2l6ZS5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfZGV2aWNlX3NpemUoY29uc3QgY2hhciAqZmlsZSwgaW50IGJsb2Nrc2l6ZSwKKwkJCQkJYmxrX3QgKnJldGJsb2Nrcyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfZGV2aWNlX3NpemUyKGNvbnN0IGNoYXIgKmZpbGUsIGludCBibG9ja3NpemUsCisJCQkJCWJsazY0X3QgKnJldGJsb2Nrcyk7CisKKy8qIGdldHNlY3RzaXplLmMgKi8KK2V4dGVybiBpbnQgZXh0MmZzX2dldF9kaW9fYWxpZ25tZW50KGludCBmZCk7CitlcnJjb2RlX3QgZXh0MmZzX2dldF9kZXZpY2Vfc2VjdHNpemUoY29uc3QgY2hhciAqZmlsZSwgaW50ICpzZWN0c2l6ZSk7CitlcnJjb2RlX3QgZXh0MmZzX2dldF9kZXZpY2VfcGh5c19zZWN0c2l6ZShjb25zdCBjaGFyICpmaWxlLCBpbnQgKnNlY3RzaXplKTsKKworLyogaV9ibG9jay5jICovCitlcnJjb2RlX3QgZXh0MmZzX2libGtfYWRkX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCSBibGs2NF90IG51bV9ibG9ja3MpOworZXJyY29kZV90IGV4dDJmc19pYmxrX3N1Yl9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCQkgYmxrNjRfdCBudW1fYmxvY2tzKTsKK2VycmNvZGVfdCBleHQyZnNfaWJsa19zZXQoZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwgYmxrNjRfdCBiKTsKKworLyogaW1hZ2VyLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2ltYWdlX2lub2RlX3dyaXRlKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmQsIGludCBmbGFncyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19pbWFnZV9pbm9kZV9yZWFkKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmQsIGludCBmbGFncyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19pbWFnZV9zdXBlcl93cml0ZShleHQyX2ZpbHN5cyBmcywgaW50IGZkLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfaW1hZ2Vfc3VwZXJfcmVhZChleHQyX2ZpbHN5cyBmcywgaW50IGZkLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfaW1hZ2VfYml0bWFwX3dyaXRlKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmQsIGludCBmbGFncyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19pbWFnZV9iaXRtYXBfcmVhZChleHQyX2ZpbHN5cyBmcywgaW50IGZkLCBpbnQgZmxhZ3MpOworCisvKiBpbmRfYmxvY2suYyAqLworZXJyY29kZV90IGV4dDJmc19yZWFkX2luZF9ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxrLCB2b2lkICpidWYpOworZXJyY29kZV90IGV4dDJmc193cml0ZV9pbmRfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsa190IGJsaywgdm9pZCAqYnVmKTsKKworLyogaW5pdGlhbGl6ZS5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19pbml0aWFsaXplKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywKKwkJCQkgICBzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqcGFyYW0sCisJCQkJICAgaW9fbWFuYWdlciBtYW5hZ2VyLCBleHQyX2ZpbHN5cyAqcmV0X2ZzKTsKKworLyogaWNvdW50LmMgKi8KK2V4dGVybiB2b2lkIGV4dDJmc19mcmVlX2ljb3VudChleHQyX2ljb3VudF90IGljb3VudCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19jcmVhdGVfaWNvdW50X3RkYihleHQyX2ZpbHN5cyBmcywgY2hhciAqdGRiX2RpciwKKwkJCQkJICBpbnQgZmxhZ3MsIGV4dDJfaWNvdW50X3QgKnJldCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19jcmVhdGVfaWNvdW50MihleHQyX2ZpbHN5cyBmcywgaW50IGZsYWdzLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJCQkgICAgICAgZXh0Ml9pY291bnRfdCBoaW50LCBleHQyX2ljb3VudF90ICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY3JlYXRlX2ljb3VudChleHQyX2ZpbHN5cyBmcywgaW50IGZsYWdzLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBzaXplLAorCQkJCSAgICAgIGV4dDJfaWNvdW50X3QgKnJldCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19pY291bnRfZmV0Y2goZXh0Ml9pY291bnRfdCBpY291bnQsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgICAgX191MTYgKnJldCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19pY291bnRfaW5jcmVtZW50KGV4dDJfaWNvdW50X3QgaWNvdW50LCBleHQyX2lub190IGlubywKKwkJCQkJIF9fdTE2ICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfaWNvdW50X2RlY3JlbWVudChleHQyX2ljb3VudF90IGljb3VudCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkJCSBfX3UxNiAqcmV0KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2ljb3VudF9zdG9yZShleHQyX2ljb3VudF90IGljb3VudCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICAgICBfX3UxNiBjb3VudCk7CitleHRlcm4gZXh0Ml9pbm9fdCBleHQyZnNfZ2V0X2ljb3VudF9zaXplKGV4dDJfaWNvdW50X3QgaWNvdW50KTsKK2VycmNvZGVfdCBleHQyZnNfaWNvdW50X3ZhbGlkYXRlKGV4dDJfaWNvdW50X3QgaWNvdW50LCBGSUxFICopOworCisvKiBpbmxpbmUuYyAqLworCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfbWVtYWxpZ24odW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwgdm9pZCAqcHRyKTsKKworLyogaW5vZGUuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmx1c2hfaWNhY2hlKGV4dDJfZmlsc3lzIGZzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2dldF9uZXh0X2lub2RlX2Z1bGwoZXh0Ml9pbm9kZV9zY2FuIHNjYW4sCisJCQkJCSAgICBleHQyX2lub190ICppbm8sCisJCQkJCSAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkJCSAgICBpbnQgYnVmc2l6ZSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19vcGVuX2lub2RlX3NjYW4oZXh0Ml9maWxzeXMgZnMsIGludCBidWZmZXJfYmxvY2tzLAorCQkJCSAgZXh0Ml9pbm9kZV9zY2FuICpyZXRfc2Nhbik7CitleHRlcm4gdm9pZCBleHQyZnNfY2xvc2VfaW5vZGVfc2NhbihleHQyX2lub2RlX3NjYW4gc2Nhbik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfbmV4dF9pbm9kZShleHQyX2lub2RlX3NjYW4gc2NhbiwgZXh0Ml9pbm9fdCAqaW5vLAorCQkJICAgICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19pbm9kZV9zY2FuX2dvdG9fYmxvY2tncm91cChleHQyX2lub2RlX3NjYW4gc2NhbiwKKwkJCQkJCSAgIGludAlncm91cCk7CitleHRlcm4gdm9pZCBleHQyZnNfc2V0X2lub2RlX2NhbGxiYWNrCisJKGV4dDJfaW5vZGVfc2NhbiBzY2FuLAorCSBlcnJjb2RlX3QgKCpkb25lX2dyb3VwKShleHQyX2ZpbHN5cyBmcywKKwkJCQkgZXh0Ml9pbm9kZV9zY2FuIHNjYW4sCisJCQkJIGRncnBfdCBncm91cCwKKwkJCQkgdm9pZCAqIHByaXZfZGF0YSksCisJIHZvaWQgKmRvbmVfZ3JvdXBfZGF0YSk7CitleHRlcm4gaW50IGV4dDJmc19pbm9kZV9zY2FuX2ZsYWdzKGV4dDJfaW5vZGVfc2NhbiBzY2FuLCBpbnQgc2V0X2ZsYWdzLAorCQkJCSAgIGludCBjbGVhcl9mbGFncyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZWFkX2lub2RlX2Z1bGwoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCQlzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLAorCQkJCQlpbnQgYnVmc2l6ZSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZWFkX2lub2RlIChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgc3RydWN0IGV4dDJfaW5vZGUgKiBpbm9kZSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc193cml0ZV9pbm9kZV9mdWxsKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkJIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUsCisJCQkJCSBpbnQgYnVmc2l6ZSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc193cml0ZV9pbm9kZShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgc3RydWN0IGV4dDJfaW5vZGUgKiBpbm9kZSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sIGJsa190ICpibG9ja3MpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY2hlY2tfZGlyZWN0b3J5KGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubyk7CisKKy8qIGlub2RlX2lvLmMgKi8KK2V4dGVybiBpb19tYW5hZ2VyIGlub2RlX2lvX21hbmFnZXI7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19pbm9kZV9pb19pbnRlcm4oZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCQljaGFyICoqbmFtZSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19pbm9kZV9pb19pbnRlcm4yKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkJIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCQkJIGNoYXIgKipuYW1lKTsKKworLyogaXNtb3VudGVkLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQoY29uc3QgY2hhciAqZmlsZSwgaW50ICptb3VudF9mbGFncyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19jaGVja19tb3VudF9wb2ludChjb25zdCBjaGFyICpkZXZpY2UsIGludCAqbW91bnRfZmxhZ3MsCisJCQkJCSAgY2hhciAqbXRwdCwgaW50IG10bGVuKTsKKworLyogcHVuY2guYyAqLworLyoKKyAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBmcm9tIGFuIGlub2RlIHRoZSBibG9ja3MgInN0YXJ0IiwgImVuZCIsIGFuZAorICogZXZlcnkgYmxvY2sgaW4gYmV0d2Vlbi4KKyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfcHVuY2goZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJICAgICAgY2hhciAqYmxvY2tfYnVmLCBibGs2NF90IHN0YXJ0LAorCQkJICAgICAgYmxrNjRfdCBlbmQpOworCisvKiBuYW1laS5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19sb29rdXAoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgZGlyLCBjb25zdCBjaGFyICpuYW1lLAorCQkJIGludCBuYW1lbGVuLCBjaGFyICpidWYsIGV4dDJfaW5vX3QgKmlub2RlKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX25hbWVpKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IHJvb3QsIGV4dDJfaW5vX3QgY3dkLAorCQkJY29uc3QgY2hhciAqbmFtZSwgZXh0Ml9pbm9fdCAqaW5vZGUpOworZXJyY29kZV90IGV4dDJmc19uYW1laV9mb2xsb3coZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3Qgcm9vdCwgZXh0Ml9pbm9fdCBjd2QsCisJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBleHQyX2lub190ICppbm9kZSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19mb2xsb3dfbGluayhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCByb290LCBleHQyX2lub190IGN3ZCwKKwkJCWV4dDJfaW5vX3QgaW5vZGUsIGV4dDJfaW5vX3QgKnJlc19pbm9kZSk7CisKKy8qIG5hdGl2ZS5jICovCitpbnQgZXh0MmZzX25hdGl2ZV9mbGFnKHZvaWQpOworCisvKiBuZXdkaXIuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfbmV3X2Rpcl9ibG9jayhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBkaXJfaW5vLAorCQkJCWV4dDJfaW5vX3QgcGFyZW50X2lubywgY2hhciAqKmJsb2NrKTsKKworLyogbWtkaXIuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfbWtkaXIoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgcGFyZW50LCBleHQyX2lub190IGludW0sCisJCQkgICAgICBjb25zdCBjaGFyICpuYW1lKTsKKworLyogbWtqb3VybmFsLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3plcm9fYmxvY2tzKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibGssIGludCBudW0sCisJCQkJICAgIGJsa190ICpyZXRfYmxrLCBpbnQgKnJldF9jb3VudCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc196ZXJvX2Jsb2NrczIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxrLCBpbnQgbnVtLAorCQkJCSAgICAgYmxrNjRfdCAqcmV0X2JsaywgaW50ICpyZXRfY291bnQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY3JlYXRlX2pvdXJuYWxfc3VwZXJibG9jayhleHQyX2ZpbHN5cyBmcywKKwkJCQkJCSAgX191MzIgbnVtX2Jsb2NrcywgaW50IGZsYWdzLAorCQkJCQkJICBjaGFyICAqKnJldF9qc2IpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYWRkX2pvdXJuYWxfZGV2aWNlKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgICBleHQyX2ZpbHN5cyBqb3VybmFsX2Rldik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19hZGRfam91cm5hbF9pbm9kZShleHQyX2ZpbHN5cyBmcywgYmxrX3QgbnVtX2Jsb2NrcywKKwkJCQkJICBpbnQgZmxhZ3MpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYWRkX2pvdXJuYWxfaW5vZGUyKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBudW1fYmxvY2tzLAorCQkJCQkgICBibGs2NF90IGdvYWwsIGludCBmbGFncyk7CitleHRlcm4gaW50IGV4dDJmc19kZWZhdWx0X2pvdXJuYWxfc2l6ZShfX3U2NCBudW1fYmxvY2tzKTsKK2V4dGVybiBpbnQgZXh0MmZzX2pvdXJuYWxfc2Jfc3RhcnQoaW50IGJsb2Nrc2l6ZSk7CisKKy8qIG9wZW5mcy5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19vcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywgaW50IHN1cGVyYmxvY2ssCisJCQkgICAgIHVuc2lnbmVkIGludCBibG9ja19zaXplLCBpb19tYW5hZ2VyIG1hbmFnZXIsCisJCQkgICAgIGV4dDJfZmlsc3lzICpyZXRfZnMpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfb3BlbjIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqaW9fb3B0aW9ucywKKwkJCSAgICAgIGludCBmbGFncywgaW50IHN1cGVyYmxvY2ssCisJCQkgICAgICB1bnNpZ25lZCBpbnQgYmxvY2tfc2l6ZSwgaW9fbWFuYWdlciBtYW5hZ2VyLAorCQkJICAgICAgZXh0Ml9maWxzeXMgKnJldF9mcyk7CisvKgorICogVGhlIGRncnBfdCBhcmd1bWVudCB0byB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIG5vdCBhY3R1YWxseSBhIGdyb3VwIG51bWJlcgorICogYnV0IGEgYmxvY2sgbnVtYmVyIG9mZnNldCB3aXRoaW4gYSBncm91cCB0YWJsZSEgIENvbnZlcnQgd2l0aCB0aGUgZm9ybXVsYQorICogKGdyb3VwX251bWJlciAvIGdyb3Vwc19wZXJfYmxvY2spLgorICovCitleHRlcm4gYmxrNjRfdCBleHQyZnNfZGVzY3JpcHRvcl9ibG9ja19sb2MyKGV4dDJfZmlsc3lzIGZzLAorCQkJCQlibGs2NF90IGdyb3VwX2Jsb2NrLCBkZ3JwX3QgaSk7CitleHRlcm4gYmxrX3QgZXh0MmZzX2Rlc2NyaXB0b3JfYmxvY2tfbG9jKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBncm91cF9ibG9jaywKKwkJCQkJIGRncnBfdCBpKTsKK2VycmNvZGVfdCBleHQyZnNfZ2V0X2RhdGFfaW8oZXh0Ml9maWxzeXMgZnMsIGlvX2NoYW5uZWwgKm9sZF9pbyk7CitlcnJjb2RlX3QgZXh0MmZzX3NldF9kYXRhX2lvKGV4dDJfZmlsc3lzIGZzLCBpb19jaGFubmVsIG5ld19pbyk7CitlcnJjb2RlX3QgZXh0MmZzX3Jld3JpdGVfdG9faW8oZXh0Ml9maWxzeXMgZnMsIGlvX2NoYW5uZWwgbmV3X2lvKTsKKworLyogZ2V0X3BhdGhuYW1lLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2dldF9wYXRobmFtZShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBkaXIsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICAgIGNoYXIgKipuYW1lKTsKKworLyogbGluay5jICovCitlcnJjb2RlX3QgZXh0MmZzX2xpbmsoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgZGlyLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBleHQyX2lub190IGlubywgaW50IGZsYWdzKTsKK2VycmNvZGVfdCBleHQyZnNfdW5saW5rKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGRpciwgY29uc3QgY2hhciAqbmFtZSwKKwkJCWV4dDJfaW5vX3QgaW5vLCBpbnQgZmxhZ3MpOworCisvKiBzeW1saW5rLmMgKi8KK2VycmNvZGVfdCBleHQyZnNfc3ltbGluayhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBwYXJlbnQsIGV4dDJfaW5vX3QgaW5vLAorCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRhcmdldCk7CisKKy8qIG1tcC5jICovCitlcnJjb2RlX3QgZXh0MmZzX21tcF9yZWFkKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90IG1tcF9ibGssIHZvaWQgKmJ1Zik7CitlcnJjb2RlX3QgZXh0MmZzX21tcF93cml0ZShleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBtbXBfYmxrLCB2b2lkICpidWYpOworZXJyY29kZV90IGV4dDJmc19tbXBfY2xlYXIoZXh0Ml9maWxzeXMgZnMpOworZXJyY29kZV90IGV4dDJmc19tbXBfaW5pdChleHQyX2ZpbHN5cyBmcyk7CitlcnJjb2RlX3QgZXh0MmZzX21tcF9zdGFydChleHQyX2ZpbHN5cyBmcyk7CitlcnJjb2RlX3QgZXh0MmZzX21tcF91cGRhdGUoZXh0Ml9maWxzeXMgZnMpOworZXJyY29kZV90IGV4dDJmc19tbXBfc3RvcChleHQyX2ZpbHN5cyBmcyk7Cit1bnNpZ25lZCBleHQyZnNfbW1wX25ld19zZXEodm9pZCk7CisKKy8qIHJlYWRfYmIuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfcmVhZF9iYl9pbm9kZShleHQyX2ZpbHN5cyBmcywKKwkJCQkgICAgICBleHQyX2JhZGJsb2Nrc19saXN0ICpiYl9saXN0KTsKKworLyogcmVhZF9iYl9maWxlLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3JlYWRfYmJfRklMRTIoZXh0Ml9maWxzeXMgZnMsIEZJTEUgKmYsCisJCQkJICAgICAgZXh0Ml9iYWRibG9ja3NfbGlzdCAqYmJfbGlzdCwKKwkJCQkgICAgICB2b2lkICpwcml2X2RhdGEsCisJCQkJICAgICAgdm9pZCAoKmludmFsaWQpKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkJICAgICAgYmxrX3QgYmxrLAorCQkJCQkJICAgICAgY2hhciAqYmFkc3RyLAorCQkJCQkJICAgICAgdm9pZCAqcHJpdl9kYXRhKSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZWFkX2JiX0ZJTEUoZXh0Ml9maWxzeXMgZnMsIEZJTEUgKmYsCisJCQkJICAgICBleHQyX2JhZGJsb2Nrc19saXN0ICpiYl9saXN0LAorCQkJCSAgICAgdm9pZCAoKmludmFsaWQpKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkJICAgICBibGtfdCBibGspKTsKKworLyogcmVzX2dkdC5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19jcmVhdGVfcmVzaXplX2lub2RlKGV4dDJfZmlsc3lzIGZzKTsKKworLyogc3dhcGZzLmMgKi8KK2V4dGVybiB2b2lkIGV4dDJmc19zd2FwX2V4dF9hdHRyKGNoYXIgKnRvLCBjaGFyICpmcm9tLCBpbnQgYnVmc2l6ZSwKKwkJCQkgaW50IGhhc19oZWFkZXIpOworZXh0ZXJuIHZvaWQgZXh0MmZzX3N3YXBfZXh0X2F0dHJfaGVhZGVyKHN0cnVjdCBleHQyX2V4dF9hdHRyX2hlYWRlciAqdG9faGVhZGVyLAorCQkJCQlzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9oZWFkZXIgKmZyb21faGRyKTsKK2V4dGVybiB2b2lkIGV4dDJmc19zd2FwX2V4dF9hdHRyX2VudHJ5KHN0cnVjdCBleHQyX2V4dF9hdHRyX2VudHJ5ICp0b19lbnRyeSwKKwkJCQkgICAgICAgc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkgKmZyb21fZW50cnkpOworZXh0ZXJuIHZvaWQgZXh0MmZzX3N3YXBfc3VwZXIoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKiBzdXBlcik7CitleHRlcm4gdm9pZCBleHQyZnNfc3dhcF9ncm91cF9kZXNjKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKmdkcCk7CitleHRlcm4gdm9pZCBleHQyZnNfc3dhcF9ncm91cF9kZXNjMihleHQyX2ZpbHN5cywgc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqZ2RwKTsKK2V4dGVybiB2b2lkIGV4dDJmc19zd2FwX2lub2RlX2Z1bGwoZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBleHQyX2lub2RlX2xhcmdlICp0LAorCQkJCSAgIHN0cnVjdCBleHQyX2lub2RlX2xhcmdlICpmLCBpbnQgaG9zdG9yZGVyLAorCQkJCSAgIGludCBidWZzaXplKTsKK2V4dGVybiB2b2lkIGV4dDJmc19zd2FwX2lub2RlKGV4dDJfZmlsc3lzIGZzLHN0cnVjdCBleHQyX2lub2RlICp0LAorCQkJICAgICAgc3RydWN0IGV4dDJfaW5vZGUgKmYsIGludCBob3N0b3JkZXIpOworZXh0ZXJuIHZvaWQgZXh0MmZzX3N3YXBfbW1wKHN0cnVjdCBtbXBfc3RydWN0ICptbXApOworCisvKiB1bml4X2lvLmMgKi8KK2V4dGVybiBpbnQgZXh0MmZzX29wZW5fZmlsZShjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzLCBtb2RlX3QgbW9kZSk7CitleHRlcm4gaW50IGV4dDJmc19zdGF0KGNvbnN0IGNoYXIgKnBhdGgsIGV4dDJmc19zdHJ1Y3Rfc3RhdCAqYnVmKTsKK2V4dGVybiBpbnQgZXh0MmZzX2ZzdGF0KGludCBmZCwgZXh0MmZzX3N0cnVjdF9zdGF0ICpidWYpOworCisvKiB2YWxpZF9ibGsuYyAqLworZXh0ZXJuIGludCBleHQyZnNfaW5vZGVfaGFzX3ZhbGlkX2Jsb2NrcyhzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpOworZXh0ZXJuIGludCBleHQyZnNfaW5vZGVfaGFzX3ZhbGlkX2Jsb2NrczIoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKTsKKworLyogdmVyc2lvbi5jICovCitleHRlcm4gaW50IGV4dDJmc19wYXJzZV92ZXJzaW9uX3N0cmluZyhjb25zdCBjaGFyICp2ZXJfc3RyaW5nKTsKK2V4dGVybiBpbnQgZXh0MmZzX2dldF9saWJyYXJ5X3ZlcnNpb24oY29uc3QgY2hhciAqKnZlcl9zdHJpbmcsCisJCQkJICAgICAgY29uc3QgY2hhciAqKmRhdGVfc3RyaW5nKTsKKworLyogd3JpdGVfYmJfZmlsZS5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc193cml0ZV9iYl9GSUxFKGV4dDJfYmFkYmxvY2tzX2xpc3QgYmJfbGlzdCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkJICAgICAgRklMRSAqZik7CisKKworLyogaW5saW5lIGZ1bmN0aW9ucyAqLworI2lmZGVmIE5PX0lOTElORV9GVU5DUworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X21lbSh1bnNpZ25lZCBsb25nIHNpemUsIHZvaWQgKnB0cik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfbWVtemVybyh1bnNpZ25lZCBsb25nIHNpemUsIHZvaWQgKnB0cik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfYXJyYXkodW5zaWduZWQgbG9uZyBjb3VudCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdm9pZCAqcHRyKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2dldF9hcnJheXplcm8odW5zaWduZWQgbG9uZyBjb3VudCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHZvaWQgKnB0cik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19mcmVlX21lbSh2b2lkICpwdHIpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfcmVzaXplX21lbSh1bnNpZ25lZCBsb25nIG9sZF9zaXplLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdm9pZCAqcHRyKTsKK2V4dGVybiB2b2lkIGV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGV4dDJfZmlsc3lzIGZzKTsKK2V4dGVybiB2b2lkIGV4dDJmc19tYXJrX2NoYW5nZWQoZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIGludCBleHQyZnNfdGVzdF9jaGFuZ2VkKGV4dDJfZmlsc3lzIGZzKTsKK2V4dGVybiB2b2lkIGV4dDJmc19tYXJrX3ZhbGlkKGV4dDJfZmlsc3lzIGZzKTsKK2V4dGVybiB2b2lkIGV4dDJmc191bm1hcmtfdmFsaWQoZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIGludCBleHQyZnNfdGVzdF92YWxpZChleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gdm9pZCBleHQyZnNfbWFya19pYl9kaXJ0eShleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gdm9pZCBleHQyZnNfbWFya19iYl9kaXJ0eShleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gaW50IGV4dDJmc190ZXN0X2liX2RpcnR5KGV4dDJfZmlsc3lzIGZzKTsKK2V4dGVybiBpbnQgZXh0MmZzX3Rlc3RfYmJfZGlydHkoZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIGRncnBfdCBleHQyZnNfZ3JvdXBfb2ZfYmxrKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibGspOworZXh0ZXJuIGRncnBfdCBleHQyZnNfZ3JvdXBfb2ZfaW5vKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubyk7CitleHRlcm4gYmxrX3QgZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApOworZXh0ZXJuIGJsa190IGV4dDJmc19ncm91cF9sYXN0X2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApOworZXh0ZXJuIGJsa190IGV4dDJmc19pbm9kZV9kYXRhX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywKKwkJCQkgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpOworZXh0ZXJuIHVuc2lnbmVkIGludCBleHQyZnNfZGl2X2NlaWwodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKTsKK2V4dGVybiBfX3U2NCBleHQyZnNfZGl2NjRfY2VpbChfX3U2NCBhLCBfX3U2NCBiKTsKKyNlbmRpZgorCisvKgorICogVGhlIGFjdHVhbCBpbmxpbmVkIGZ1bmN0aW9ucyBkZWZpbml0aW9ucyB0aGVtc2VsdmVzLi4uCisgKgorICogSWYgTk9fSU5MSU5FX0ZVTkNTIGlzIGRlZmluZWQsIHRoZW4gd2Ugd29uJ3QgdHJ5IHRvIGRvIGlubGluZQorICogZnVuY3Rpb25zIGF0IGFsbCEKKyAqLworI2lmIChkZWZpbmVkKElOQ0xVREVfSU5MSU5FX0ZVTkNTKSB8fCAhZGVmaW5lZChOT19JTkxJTkVfRlVOQ1MpKQorI2lmZGVmIElOQ0xVREVfSU5MSU5FX0ZVTkNTCisjZGVmaW5lIF9JTkxJTkVfIGV4dGVybgorI2Vsc2UKKyNpZiAoX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKQorI2RlZmluZSBfSU5MSU5FXyBpbmxpbmUKKyNlbHNlCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgX0lOTElORV8gZXh0ZXJuIF9faW5saW5lX18KKyNlbHNlCQkJCS8qIEZvciBXYXRjb20gQyAqLworI2RlZmluZSBfSU5MSU5FXyBleHRlcm4gaW5saW5lCisjZW5kaWYgLyogX19HTlVDX18gKi8KKyNlbmRpZiAvKiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVYVDJfQ1VTVE9NX01FTU9SWV9ST1VUSU5FUworI2luY2x1ZGUgPHN0cmluZy5oPgorLyoKKyAqICBBbGxvY2F0ZSBtZW1vcnkuICBUaGUgJ3B0cicgYXJnIG11c3QgcG9pbnQgdG8gYSBwb2ludGVyLgorICovCitfSU5MSU5FXyBlcnJjb2RlX3QgZXh0MmZzX2dldF9tZW0odW5zaWduZWQgbG9uZyBzaXplLCB2b2lkICpwdHIpCit7CisJdm9pZCAqcHA7CisKKwlwcCA9IG1hbGxvYyhzaXplKTsKKwlpZiAoIXBwKQorCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisJbWVtY3B5KHB0ciwgJnBwLCBzaXplb2YgKHBwKSk7CisJcmV0dXJuIDA7Cit9CisKK19JTkxJTkVfIGVycmNvZGVfdCBleHQyZnNfZ2V0X21lbXplcm8odW5zaWduZWQgbG9uZyBzaXplLCB2b2lkICpwdHIpCit7CisJdm9pZCAqcHA7CisKKwlwcCA9IG1hbGxvYyhzaXplKTsKKwlpZiAoIXBwKQorCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisJbWVtc2V0KHBwLCAwLCBzaXplKTsKKwltZW1jcHkocHRyLCAmcHAsIHNpemVvZihwcCkpOworCXJldHVybiAwOworfQorCitfSU5MSU5FXyBlcnJjb2RlX3QgZXh0MmZzX2dldF9hcnJheSh1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHNpemUsIHZvaWQgKnB0cikKK3sKKwlpZiAoY291bnQgJiYgKC0xVUwpL2NvdW50PHNpemUpCisJCXJldHVybiBFWFQyX0VUX05PX01FTU9SWTsKKwlyZXR1cm4gZXh0MmZzX2dldF9tZW0oY291bnQqc2l6ZSwgcHRyKTsKK30KKworX0lOTElORV8gZXJyY29kZV90IGV4dDJmc19nZXRfYXJyYXl6ZXJvKHVuc2lnbmVkIGxvbmcgY291bnQsCisJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdm9pZCAqcHRyKQoreworCXZvaWQgKnBwOworCisJaWYgKGNvdW50ICYmICgtMVVMKS9jb3VudDxzaXplKQorCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisJcHAgPSBjYWxsb2MoY291bnQsIHNpemUpOworCWlmICghcHApCisJCXJldHVybiBFWFQyX0VUX05PX01FTU9SWTsKKwltZW1jcHkocHRyLCAmcHAsIHNpemVvZihwcCkpOworCXJldHVybiAwOworfQorCisvKgorICogRnJlZSBtZW1vcnkuICBUaGUgJ3B0cicgYXJnIG11c3QgcG9pbnQgdG8gYSBwb2ludGVyLgorICovCitfSU5MSU5FXyBlcnJjb2RlX3QgZXh0MmZzX2ZyZWVfbWVtKHZvaWQgKnB0cikKK3sKKwl2b2lkICpwOworCisJbWVtY3B5KCZwLCBwdHIsIHNpemVvZihwKSk7CisJZnJlZShwKTsKKwlwID0gMDsKKwltZW1jcHkocHRyLCAmcCwgc2l6ZW9mKHApKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICBSZXNpemUgbWVtb3J5LiAgVGhlICdwdHInIGFyZyBtdXN0IHBvaW50IHRvIGEgcG9pbnRlci4KKyAqLworX0lOTElORV8gZXJyY29kZV90IGV4dDJmc19yZXNpemVfbWVtKHVuc2lnbmVkIGxvbmcgRVhUMkZTX0FUVFIoKHVudXNlZCkpIG9sZF9zaXplLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB2b2lkICpwdHIpCit7CisJdm9pZCAqcDsKKworCS8qIFVzZSAibWVtY3B5IiBmb3IgcG9pbnRlciBhc3NpZ25tZW50cyBoZXJlIHRvIGF2b2lkIHByb2JsZW1zCisJICogd2l0aCBDOTkgc3RyaWN0IHR5cGUgYWxpYXNpbmcgcnVsZXMuICovCisJbWVtY3B5KCZwLCBwdHIsIHNpemVvZihwKSk7CisJcCA9IHJlYWxsb2MocCwgc2l6ZSk7CisJaWYgKCFwKQorCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisJbWVtY3B5KHB0ciwgJnAsIHNpemVvZihwKSk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYJLyogQ3VzdG9tIG1lbW9yeSByb3V0aW5lcyAqLworCisvKgorICogTWFyayBhIGZpbGVzeXN0ZW0gc3VwZXJibG9jayBhcyBkaXJ0eQorICovCitfSU5MSU5FXyB2b2lkIGV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGV4dDJfZmlsc3lzIGZzKQoreworCWZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfRElSVFkgfCBFWFQyX0ZMQUdfQ0hBTkdFRDsKK30KKworLyoKKyAqIE1hcmsgYSBmaWxlc3lzdGVtIGFzIGNoYW5nZWQKKyAqLworX0lOTElORV8gdm9pZCBleHQyZnNfbWFya19jaGFuZ2VkKGV4dDJfZmlsc3lzIGZzKQoreworCWZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfQ0hBTkdFRDsKK30KKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiBhIGZpbGVzeXN0ZW0gaGFzIGNoYW5nZWQKKyAqLworX0lOTElORV8gaW50IGV4dDJmc190ZXN0X2NoYW5nZWQoZXh0Ml9maWxzeXMgZnMpCit7CisJcmV0dXJuIChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfQ0hBTkdFRCk7Cit9CisKKy8qCisgKiBNYXJrIGEgZmlsZXN5c3RlbSBhcyB2YWxpZAorICovCitfSU5MSU5FXyB2b2lkIGV4dDJmc19tYXJrX3ZhbGlkKGV4dDJfZmlsc3lzIGZzKQoreworCWZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfVkFMSUQ7Cit9CisKKy8qCisgKiBNYXJrIGEgZmlsZXN5c3RlbSBhcyBOT1QgdmFsaWQKKyAqLworX0lOTElORV8gdm9pZCBleHQyZnNfdW5tYXJrX3ZhbGlkKGV4dDJfZmlsc3lzIGZzKQoreworCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX1ZBTElEOworfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIGEgZmlsZXN5c3RlbSBpcyB2YWxpZAorICovCitfSU5MSU5FXyBpbnQgZXh0MmZzX3Rlc3RfdmFsaWQoZXh0Ml9maWxzeXMgZnMpCit7CisJcmV0dXJuIChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfVkFMSUQpOworfQorCisvKgorICogTWFyayB0aGUgaW5vZGUgYml0bWFwIGFzIGRpcnR5CisgKi8KK19JTkxJTkVfIHZvaWQgZXh0MmZzX21hcmtfaWJfZGlydHkoZXh0Ml9maWxzeXMgZnMpCit7CisJZnMtPmZsYWdzIHw9IEVYVDJfRkxBR19JQl9ESVJUWSB8IEVYVDJfRkxBR19DSEFOR0VEOworfQorCisvKgorICogTWFyayB0aGUgYmxvY2sgYml0bWFwIGFzIGRpcnR5CisgKi8KK19JTkxJTkVfIHZvaWQgZXh0MmZzX21hcmtfYmJfZGlydHkoZXh0Ml9maWxzeXMgZnMpCit7CisJZnMtPmZsYWdzIHw9IEVYVDJfRkxBR19CQl9ESVJUWSB8IEVYVDJfRkxBR19DSEFOR0VEOworfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIGEgZmlsZXN5c3RlbSdzIGlub2RlIGJpdG1hcCBpcyBkaXJ0eQorICovCitfSU5MSU5FXyBpbnQgZXh0MmZzX3Rlc3RfaWJfZGlydHkoZXh0Ml9maWxzeXMgZnMpCit7CisJcmV0dXJuIChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfSUJfRElSVFkpOworfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIGEgZmlsZXN5c3RlbSdzIGJsb2NrIGJpdG1hcCBpcyBkaXJ0eQorICovCitfSU5MSU5FXyBpbnQgZXh0MmZzX3Rlc3RfYmJfZGlydHkoZXh0Ml9maWxzeXMgZnMpCit7CisJcmV0dXJuIChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfQkJfRElSVFkpOworfQorCisvKgorICogUmV0dXJuIHRoZSBncm91cCAjIG9mIGEgYmxvY2sKKyAqLworX0lOTElORV8gZGdycF90IGV4dDJmc19ncm91cF9vZl9ibGsoZXh0Ml9maWxzeXMgZnMsIGJsa190IGJsaykKK3sKKwlyZXR1cm4gZXh0MmZzX2dyb3VwX29mX2JsazIoZnMsIGJsayk7Cit9CisvKgorICogUmV0dXJuIHRoZSBncm91cCAjIG9mIGFuIGlub2RlIG51bWJlcgorICovCitfSU5MSU5FXyBkZ3JwX3QgZXh0MmZzX2dyb3VwX29mX2lubyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8pCit7CisJcmV0dXJuIChpbm8gLSAxKSAvIGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwOworfQorCisvKgorICogUmV0dXJuIHRoZSBmaXJzdCBibG9jayAoaW5jbHVzaXZlKSBpbiBhIGdyb3VwCisgKi8KK19JTkxJTkVfIGJsa190IGV4dDJmc19ncm91cF9maXJzdF9ibG9jayhleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKQoreworCXJldHVybiAoYmxrX3QpIGV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZnMsIGdyb3VwKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbGFzdCBibG9jayAoaW5jbHVzaXZlKSBpbiBhIGdyb3VwCisgKi8KK19JTkxJTkVfIGJsa190IGV4dDJmc19ncm91cF9sYXN0X2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApCit7CisJcmV0dXJuIChibGtfdCkgZXh0MmZzX2dyb3VwX2xhc3RfYmxvY2syKGZzLCBncm91cCk7Cit9CisKK19JTkxJTkVfIGJsa190IGV4dDJmc19pbm9kZV9kYXRhX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywKKwkJCQkJc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKQoreworCXJldHVybiAoYmxrX3QpIGV4dDJmc19pbm9kZV9kYXRhX2Jsb2NrczIoZnMsIGlub2RlKTsKK30KKworLyoKKyAqIFRoaXMgaXMgYW4gZWZmaWNpZW50LCBvdmVyZmxvdyBzYWZlIHdheSBvZiBjYWxjdWxhdGluZyBjZWlsKCgxLjAgKiBhKSAvIGIpCisgKi8KK19JTkxJTkVfIHVuc2lnbmVkIGludCBleHQyZnNfZGl2X2NlaWwodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQoreworCWlmICghYSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICgoYSAtIDEpIC8gYikgKyAxOworfQorCitfSU5MSU5FXyBfX3U2NCBleHQyZnNfZGl2NjRfY2VpbChfX3U2NCBhLCBfX3U2NCBiKQoreworCWlmICghYSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICgoYSAtIDEpIC8gYikgKyAxOworfQorCisjdW5kZWYgX0lOTElORV8KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX0VYVDJGU19FWFQyRlNfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9leHQyZnMucGMuaW4gYi9saWIvZXh0MmZzL2V4dDJmcy5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmFjODVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9leHQyZnMucGMuaW4KQEAgLTAsMCArMSwxMSBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisKK05hbWU6IGV4dDJmcworRGVzY3JpcHRpb246IEV4dDJmcyBsaWJyYXJ5CitWZXJzaW9uOiBARTJGU1BST0dTX1ZFUlNJT05ACitSZXF1aXJlcy5wcml2YXRlOiBjb21fZXJyCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9leHQyZnMgLUkke2luY2x1ZGVkaXJ9CitMaWJzOiAtTCR7bGliZGlyfSAtbGV4dDJmcwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9leHQyZnNQLmggYi9saWIvZXh0MmZzL2V4dDJmc1AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODhkYjkzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9leHQyZnNQLmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBleHQyZnNQLmggLS0tIHByaXZhdGUgaGVhZGVyIGZpbGUgZm9yIGV4dDIgbGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImV4dDJmcy5oIgorCisjZGVmaW5lIEVYVDJGU19NQVhfTkVTVEVEX0xJTktTICA4CisKKy8qCisgKiBCYWRibG9ja3MgbGlzdAorICovCitzdHJ1Y3QgZXh0Ml9zdHJ1Y3RfdTMyX2xpc3QgeworCWludAltYWdpYzsKKwlpbnQJbnVtOworCWludAlzaXplOworCV9fdTMyCSpsaXN0OworCWludAliYWRibG9ja3NfZmxhZ3M7Cit9OworCitzdHJ1Y3QgZXh0Ml9zdHJ1Y3RfdTMyX2l0ZXJhdGUgeworCWludAkJCW1hZ2ljOworCWV4dDJfdTMyX2xpc3QJCWJiOworCWludAkJCXB0cjsKK307CisKKworLyoKKyAqIERpcmVjdG9yeSBibG9jayBpdGVyYXRvciBkZWZpbml0aW9uCisgKi8KK3N0cnVjdCBleHQyX3N0cnVjdF9kYmxpc3QgeworCWludAkJCW1hZ2ljOworCWV4dDJfZmlsc3lzCQlmczsKKwl1bnNpZ25lZCBsb25nIGxvbmcJc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcJY291bnQ7CisJaW50CQkJc29ydGVkOworCXN0cnVjdCBleHQyX2RiX2VudHJ5MiAqCWxpc3Q7Cit9OworCisvKgorICogRm9yIGRpcmVjdG9yeSBpdGVyYXRvcnMKKyAqLworc3RydWN0IGRpcl9jb250ZXh0IHsKKwlleHQyX2lub190CQlkaXI7CisJaW50CQlmbGFnczsKKwljaGFyCQkqYnVmOworCWludCAoKmZ1bmMpKGV4dDJfaW5vX3QJZGlyLAorCQkgICAgaW50CWVudHJ5LAorCQkgICAgc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCSAgICBpbnQJb2Zmc2V0LAorCQkgICAgaW50CWJsb2Nrc2l6ZSwKKwkJICAgIGNoYXIJKmJ1ZiwKKwkJICAgIHZvaWQJKnByaXZfZGF0YSk7CisJdm9pZAkJKnByaXZfZGF0YTsKKwllcnJjb2RlX3QJZXJyY29kZTsKK307CisKKy8qCisgKiBJbm9kZSBjYWNoZSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGV4dDJfaW5vZGVfY2FjaGUgeworCXZvaWQgKgkJCQlidWZmZXI7CisJYmxrNjRfdAkJCQlidWZmZXJfYmxrOworCWludAkJCQljYWNoZV9sYXN0OworCWludAkJCQljYWNoZV9zaXplOworCWludAkJCQlyZWZjb3VudDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9jYWNoZV9lbnQJKmNhY2hlOworfTsKKworc3RydWN0IGV4dDJfaW5vZGVfY2FjaGVfZW50IHsKKwlleHQyX2lub190CQlpbm87CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7Cit9OworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCisKK2V4dGVybiBpbnQgZXh0MmZzX3Byb2Nlc3NfZGlyX2Jsb2NrKGV4dDJfZmlsc3lzICAJZnMsCisJCQkJICAgIGJsazY0X3QJCSpibG9ja25yLAorCQkJCSAgICBlMl9ibGtjbnRfdAkJYmxvY2tjbnQsCisJCQkJICAgIGJsazY0X3QJCXJlZl9ibG9jaywKKwkJCQkgICAgaW50CQkJcmVmX29mZnNldCwKKwkJCQkgICAgdm9pZAkJKnByaXZfZGF0YSk7CisKKy8qIEdlbmVyaWMgbnVtZXJpYyBwcm9ncmVzcyBtZXRlciAqLworCitzdHJ1Y3QgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3Nfc3RydWN0IHsKKwlfX3U2NAkJbWF4OworCWludAkJbG9nX21heDsKKwlpbnQJCXNraXBfcHJvZ3Jlc3M7Cit9OworCitleHRlcm4gdm9pZCBleHQyZnNfbnVtZXJpY19wcm9ncmVzc19pbml0KGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgc3RydWN0IGV4dDJmc19udW1lcmljX3Byb2dyZXNzX3N0cnVjdCAqIHByb2dyZXNzLAorCQkJCQkgY29uc3QgY2hhciAqbGFiZWwsIF9fdTY0IG1heCk7CitleHRlcm4gdm9pZCBleHQyZnNfbnVtZXJpY19wcm9ncmVzc191cGRhdGUoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgIHN0cnVjdCBleHQyZnNfbnVtZXJpY19wcm9ncmVzc19zdHJ1Y3QgKiBwcm9ncmVzcywKKwkJCQkJICAgX191NjQgdmFsKTsKK2V4dGVybiB2b2lkIGV4dDJmc19udW1lcmljX3Byb2dyZXNzX2Nsb3NlKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgIHN0cnVjdCBleHQyZnNfbnVtZXJpY19wcm9ncmVzc19zdHJ1Y3QgKiBwcm9ncmVzcywKKwkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKKworLyoKKyAqIDY0LWJpdCBiaXRtYXAgc3VwcG9ydAorICovCisKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2FsbG9jX2dlbmVyaWNfYm1hcChleHQyX2ZpbHN5cyBmcywgZXJyY29kZV90IG1hZ2ljLAorCQkJCQkgICBpbnQgdHlwZSwgX191NjQgc3RhcnQsIF9fdTY0IGVuZCwKKwkJCQkJICAgX191NjQgcmVhbF9lbmQsCisJCQkJCSAgIGNvbnN0IGNoYXIgKiBkZXNjcmlwdGlvbiwKKwkJCQkJICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwICpibWFwKTsKKworZXh0ZXJuIHZvaWQgZXh0MmZzX2ZyZWVfZ2VuZXJpY19ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBibWFwKTsKKworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY29weV9nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIHNyYywKKwkJCQkJICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgKmRlc3QpOworCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZXNpemVfZ2VuZXJpY19ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBibWFwLAorCQkJCQkgICAgX191NjQgbmV3X2VuZCwKKwkJCQkJICAgIF9fdTY0IG5ld19yZWFsX2VuZCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19mdWRnZV9nZW5lcmljX2JtYXBfZW5kKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgICAgICBlcnJjb2RlX3QgbmVxLAorCQkJCQkgICAgICAgX191NjQgZW5kLCBfX3U2NCAqb2VuZCk7CitleHRlcm4gaW50IGV4dDJmc19tYXJrX2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCSAgICBfX3U2NCBhcmcpOworZXh0ZXJuIGludCBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgIF9fdTY0IGFyZyk7CitleHRlcm4gaW50IGV4dDJmc190ZXN0X2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCSAgICBfX3U2NCBhcmcpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfc2V0X2dlbmVyaWNfYm1hcF9yYW5nZShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgICAgX191NjQgc3RhcnQsIHVuc2lnbmVkIGludCBudW0sCisJCQkJCSAgICAgICB2b2lkICppbik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfZ2VuZXJpY19ibWFwX3JhbmdlKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgICAgICBfX3U2NCBzdGFydCwgdW5zaWduZWQgaW50IG51bSwKKwkJCQkJICAgICAgIHZvaWQgKm91dCk7CitleHRlcm4gdm9pZCBleHQyZnNfd2Fybl9iaXRtYXAzMihleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLGNvbnN0IGNoYXIgKmZ1bmMpOworCitleHRlcm4gaW50IGV4dDJmc19tZW1faXNfemVybyhjb25zdCBjaGFyICptZW0sIHNpemVfdCBsZW4pOworCitleHRlcm4gaW50IGV4dDJmc19maWxlX2Jsb2NrX29mZnNldF90b29fYmlnKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCQkgICAgYmxrNjRfdCBvZmZzZXQpOwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBiL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmNGQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNCBDbHVzdGVyIEZpbGUgU3lzdGVtcywgSW5jLCBpbmZvQGNsdXN0ZXJmcy5jb20KKyAqIFdyaXR0ZW4gYnkgQWxleCBUb21hcyA8YWxleEBjbHVzdGVyZnMuY29tPgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2lmbmRlZiBfTElOVVhfRVhUM19FWFRFTlRTCisjZGVmaW5lIF9MSU5VWF9FWFQzX0VYVEVOVFMKKworLyoKKyAqIGV4dDNfaW5vZGUgaGFzIGlfYmxvY2sgYXJyYXkgKHRvdGFsIDYwIGJ5dGVzKQorICogZmlyc3QgNCBieXRlcyBhcmUgdXNlZCB0byBzdG9yZToKKyAqICAtIHRyZWUgZGVwdGggKDAgbWVhbiB0aGVyZSBpcyBubyB0cmVlIHlldC4gYWxsIGV4dGVudHMgaW4gdGhlIGlub2RlKQorICogIC0gbnVtYmVyIG9mIGFsaXZlIGV4dGVudHMgaW4gdGhlIGlub2RlCisgKi8KKworLyoKKyAqIHRoaXMgaXMgZXh0ZW50IG9uLWRpc2sgc3RydWN0dXJlCisgKiBpdCdzIHVzZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdHJlZQorICovCitzdHJ1Y3QgZXh0M19leHRlbnQgeworCV9fdTMyCWVlX2Jsb2NrOwkvKiBmaXJzdCBsb2dpY2FsIGJsb2NrIGV4dGVudCBjb3ZlcnMgKi8KKwlfX3UxNgllZV9sZW47CQkvKiBudW1iZXIgb2YgYmxvY2tzIGNvdmVyZWQgYnkgZXh0ZW50ICovCisJX191MTYJZWVfc3RhcnRfaGk7CS8qIGhpZ2ggMTYgYml0cyBvZiBwaHlzaWNhbCBibG9jayAqLworCV9fdTMyCWVlX3N0YXJ0OwkvKiBsb3cgMzIgYmlncyBvZiBwaHlzaWNhbCBibG9jayAqLworfTsKKworLyoKKyAqIHRoaXMgaXMgaW5kZXggb24tZGlzayBzdHJ1Y3R1cmUKKyAqIGl0J3MgdXNlZCBhdCBhbGwgdGhlIGxldmVscywgYnV0IHRoZSBib3R0b20KKyAqLworc3RydWN0IGV4dDNfZXh0ZW50X2lkeCB7CisJX191MzIJZWlfYmxvY2s7CS8qIGluZGV4IGNvdmVycyBsb2dpY2FsIGJsb2NrcyBmcm9tICdibG9jaycgKi8KKwlfX3UzMgllaV9sZWFmOwkvKiBwb2ludGVyIHRvIHRoZSBwaHlzaWNhbCBibG9jayBvZiB0aGUgbmV4dCAqCisJCQkJICogbGV2ZWwuIGxlYWYgb3IgbmV4dCBpbmRleCBjb3VsZCBiZXQgaGVyZSAqLworCV9fdTE2CWVpX2xlYWZfaGk7CS8qIGhpZ2ggMTYgYml0cyBvZiBwaHlzaWNhbCBibG9jayAqLworCV9fdTE2CWVpX3VudXNlZDsKK307CisKKy8qCisgKiBlYWNoIGJsb2NrIChsZWF2ZXMgYW5kIGluZGV4ZXMpLCBldmVuIGlub2RlLXN0b3JlZCBoYXMgaGVhZGVyCisgKi8KK3N0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgeworCV9fdTE2CWVoX21hZ2ljOwkvKiBwcm9iYWJseSB3aWxsIHN1cHBvcnQgZGlmZmVyZW50IGZvcm1hdHMgKi8KKwlfX3UxNgllaF9lbnRyaWVzOwkvKiBudW1iZXIgb2YgdmFsaWQgZW50cmllcyAqLworCV9fdTE2CWVoX21heDsJCS8qIGNhcGFjaXR5IG9mIHN0b3JlIGluIGVudHJpZXMgKi8KKwlfX3UxNgllaF9kZXB0aDsJLyogaGFzIHRyZWUgcmVhbCB1bmRlcmxheWluZyBibG9ja3M/ICovCisJX191MzIJZWhfZ2VuZXJhdGlvbjsJLyogZ2VuZXJhdGlvbiBvZiB0aGUgdHJlZSAqLworfTsKKworI2RlZmluZSBFWFQzX0VYVF9NQUdJQwkJMHhmMzBhCisKKy8qCisgKiBhcnJheSBvZiBleHQzX2V4dF9wYXRoIGNvbnRhaW5zIHBhdGggdG8gc29tZSBleHRlbnQKKyAqIGNyZWF0aW9uL2xvb2t1cCByb3V0aW5lcyB1c2UgaXQgZm9yIHRyYXZlcnNhbC9zcGxpdHRpbmcvZXRjCisgKiB0cnVuY2F0ZSB1c2VzIGl0IHRvIHNpbXVsYXRlIHJlY3Vyc2l2ZSB3YWxraW5nCisgKi8KK3N0cnVjdCBleHQzX2V4dF9wYXRoIHsKKwlfX3UzMgkJCQlwX2Jsb2NrOworCV9fdTE2CQkJCXBfZGVwdGg7CisJc3RydWN0IGV4dDNfZXh0ZW50CQkqcF9leHQ7CisJc3RydWN0IGV4dDNfZXh0ZW50X2lkeAkJKnBfaWR4OworCXN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIJKnBfaGRyOworCXN0cnVjdCBidWZmZXJfaGVhZAkJKnBfYmg7Cit9OworCisvKgorICogRVhUX0lOSVRfTUFYX0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIHdlIGNhbiBoYXZlIGluIGFuCisgKiBpbml0aWFsaXplZCBleHRlbnQuIFRoaXMgaXMgMl4xNSBhbmQgbm90ICgyXjE2IC0gMSksIHNpbmNlIHdlIHVzZSB0aGUKKyAqIE1TQiBvZiBlZV9sZW4gZmllbGQgaW4gdGhlIGV4dGVudCBkYXRhc3RydWN0dXJlIHRvIHNpZ25pZnkgaWYgdGhpcworICogcGFydGljdWxhciBleHRlbnQgaXMgYW4gaW5pdGlhbGl6ZWQgZXh0ZW50IG9yIGFuIHVuaW5pdGlhbGl6ZWQgKGkuZS4KKyAqIHByZWFsbG9jYXRlZCkuCisgKiBFWFRfVU5JTklUX01BWF9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyB3ZSBjYW4gaGF2ZSBpbiBhbgorICogdW5pbml0aWFsaXplZCBleHRlbnQuCisgKiBJZiBlZV9sZW4gaXMgPD0gMHg4MDAwLCBpdCBpcyBhbiBpbml0aWFsaXplZCBleHRlbnQuIE90aGVyd2lzZSwgaXQgaXMgYW4KKyAqIHVuaW5pdGlhbGl6ZWQgb25lLiBJbiBvdGhlciB3b3JkcywgaWYgTVNCIG9mIGVlX2xlbiBpcyBzZXQsIGl0IGlzIGFuCisgKiB1bmluaXRpYWxpemVkIGV4dGVudCB3aXRoIG9ubHkgb25lIHNwZWNpYWwgc2NlbmFyaW8gd2hlbiBlZV9sZW4gPSAweDgwMDAuCisgKiBJbiB0aGlzIGNhc2Ugd2UgY2FuIG5vdCBoYXZlIGFuIHVuaW5pdGlhbGl6ZWQgZXh0ZW50IG9mIHplcm8gbGVuZ3RoIGFuZAorICogdGh1cyB3ZSBtYWtlIGl0IGFzIGEgc3BlY2lhbCBjYXNlIG9mIGluaXRpYWxpemVkIGV4dGVudCB3aXRoIDB4ODAwMCBsZW5ndGguCisgKiBUaGlzIHdheSB3ZSBnZXQgYmV0dGVyIGV4dGVudC10by1ncm91cCBhbGlnbm1lbnQgZm9yIGluaXRpYWxpemVkIGV4dGVudHMuCisgKiBIZW5jZSwgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyB3ZSBjYW4gaGF2ZSBpbiBhbiAqaW5pdGlhbGl6ZWQqCisgKiBleHRlbnQgaXMgMl4xNSAoMzI3NjgpIGFuZCBpbiBhbiAqdW5pbml0aWFsaXplZCogZXh0ZW50IGlzIDJeMTUtMSAoMzI3NjcpLgorICovCisjZGVmaW5lIEVYVF9JTklUX01BWF9MRU4JKDFVTCA8PCAxNSkKKyNkZWZpbmUgRVhUX1VOSU5JVF9NQVhfTEVOCShFWFRfSU5JVF9NQVhfTEVOIC0gMSkKKworI2RlZmluZSBFWFRfRklSU1RfRVhURU5UKF9faGRyX18pIFwKKwkoKHN0cnVjdCBleHQzX2V4dGVudCAqKSAoKChjaGFyICopIChfX2hkcl9fKSkgKwkJXAorCQkJCSBzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlcikpKQorI2RlZmluZSBFWFRfRklSU1RfSU5ERVgoX19oZHJfXykgXAorCSgoc3RydWN0IGV4dDNfZXh0ZW50X2lkeCAqKSAoKChjaGFyICopIChfX2hkcl9fKSkgKwlcCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlcikpKQorI2RlZmluZSBFWFRfSEFTX0ZSRUVfSU5ERVgoX19wYXRoX18pIFwKKwkoZXh0MmZzX2xlMTZfdG9fY3B1KChfX3BhdGhfXyktPnBfaGRyLT5laF9lbnRyaWVzKSA8IFwKKwkgZXh0MmZzX2xlMTZfdG9fY3B1KChfX3BhdGhfXyktPnBfaGRyLT5laF9tYXgpKQorI2RlZmluZSBFWFRfTEFTVF9FWFRFTlQoX19oZHJfXykgXAorCShFWFRfRklSU1RfRVhURU5UKChfX2hkcl9fKSkgKyBcCisJZXh0MmZzX2xlMTZfdG9fY3B1KChfX2hkcl9fKS0+ZWhfZW50cmllcykgLSAxKQorI2RlZmluZSBFWFRfTEFTVF9JTkRFWChfX2hkcl9fKSBcCisJKEVYVF9GSVJTVF9JTkRFWCgoX19oZHJfXykpICsgXAorCWV4dDJmc19sZTE2X3RvX2NwdSgoX19oZHJfXyktPmVoX2VudHJpZXMpIC0gMSkKKyNkZWZpbmUgRVhUX01BWF9FWFRFTlQoX19oZHJfXykgXAorCShFWFRfRklSU1RfRVhURU5UKChfX2hkcl9fKSkgKyBcCisJZXh0MmZzX2xlMTZfdG9fY3B1KChfX2hkcl9fKS0+ZWhfbWF4KSAtIDEpCisjZGVmaW5lIEVYVF9NQVhfSU5ERVgoX19oZHJfXykgXAorCShFWFRfRklSU1RfSU5ERVgoKF9faGRyX18pKSArIFwKKwlleHQyZnNfbGUxNl90b19jcHUoKF9faGRyX18pLT5laF9tYXgpIC0gMSkKKworI2VuZGlmIC8qIF9MSU5VWF9FWFQzX0VYVEVOVFMgKi8KKwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9leHRfYXR0ci5jIGIvbGliL2V4dDJmcy9leHRfYXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ODk4MjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2V4dF9hdHRyLmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBleHRfYXR0ci5jIC0tLSBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2tzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIEFuZHJlYXMgR3J1ZW5iYWNoZXIsIDxhLmdydWVuYmFjaGVyQGNvbXB1dGVyLm9yZz4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyX2V4dF9hdHRyLmgiCisKKyNpbmNsdWRlICJleHQyZnMuaCIKKworI2RlZmluZSBOQU1FX0hBU0hfU0hJRlQgNQorI2RlZmluZSBWQUxVRV9IQVNIX1NISUZUIDE2CisKKy8qCisgKiBleHQyX3hhdHRyX2hhc2hfZW50cnkoKQorICoKKyAqIENvbXB1dGUgdGhlIGhhc2ggb2YgYW4gZXh0ZW5kZWQgYXR0cmlidXRlLgorICovCitfX3UzMiBleHQyZnNfZXh0X2F0dHJfaGFzaF9lbnRyeShzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9lbnRyeSAqZW50cnksIHZvaWQgKmRhdGEpCit7CisJX191MzIgaGFzaCA9IDA7CisJY2hhciAqbmFtZSA9ICgoY2hhciAqKSBlbnRyeSkgKyBzaXplb2Yoc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkpOworCWludCBuOworCisJZm9yIChuID0gMDsgbiA8IGVudHJ5LT5lX25hbWVfbGVuOyBuKyspIHsKKwkJaGFzaCA9IChoYXNoIDw8IE5BTUVfSEFTSF9TSElGVCkgXgorCQkgICAgICAgKGhhc2ggPj4gKDgqc2l6ZW9mKGhhc2gpIC0gTkFNRV9IQVNIX1NISUZUKSkgXgorCQkgICAgICAgKm5hbWUrKzsKKwl9CisKKwkvKiBUaGUgaGFzaCBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIG9uIHRoZSBkYXRhIGluIGxpdHRsZS1lbmRpYW4uICovCisJaWYgKGVudHJ5LT5lX3ZhbHVlX2Jsb2NrID09IDAgJiYgZW50cnktPmVfdmFsdWVfc2l6ZSAhPSAwKSB7CisJCV9fdTMyICp2YWx1ZSA9IChfX3UzMiAqKWRhdGE7CisJCWZvciAobiA9IChlbnRyeS0+ZV92YWx1ZV9zaXplICsgRVhUMl9FWFRfQVRUUl9ST1VORCkgPj4KKwkJCSBFWFQyX0VYVF9BVFRSX1BBRF9CSVRTOyBuOyBuLS0pIHsKKwkJCWhhc2ggPSAoaGFzaCA8PCBWQUxVRV9IQVNIX1NISUZUKSBeCisJCQkgICAgICAgKGhhc2ggPj4gKDgqc2l6ZW9mKGhhc2gpIC0gVkFMVUVfSEFTSF9TSElGVCkpIF4KKwkJCSAgICAgICBleHQyZnNfbGUzMl90b19jcHUoKnZhbHVlKyspOworCQl9CisJfQorCisJcmV0dXJuIGhhc2g7Cit9CisKKyN1bmRlZiBOQU1FX0hBU0hfU0hJRlQKKyN1bmRlZiBWQUxVRV9IQVNIX1NISUZUCisKK2VycmNvZGVfdCBleHQyZnNfcmVhZF9leHRfYXR0cjIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxvY2ssIHZvaWQgKmJ1ZikKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCisJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbywgYmxvY2ssIDEsIGJ1Zik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwlleHQyZnNfc3dhcF9leHRfYXR0cihidWYsIGJ1ZiwgZnMtPmJsb2Nrc2l6ZSwgMSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19yZWFkX2V4dF9hdHRyKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibG9jaywgdm9pZCAqYnVmKQoreworCXJldHVybiBleHQyZnNfcmVhZF9leHRfYXR0cjIoZnMsIGJsb2NrLCBidWYpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2V4dF9hdHRyMihleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibG9jaywgdm9pZCAqaW5idWYpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwljaGFyCQkqd3JpdGVfYnVmOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCWNoYXIJCSpidWYgPSBOVUxMOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSwgJmJ1Zik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwl3cml0ZV9idWYgPSBidWY7CisJZXh0MmZzX3N3YXBfZXh0X2F0dHIoYnVmLCBpbmJ1ZiwgZnMtPmJsb2Nrc2l6ZSwgMSk7CisjZWxzZQorCXdyaXRlX2J1ZiA9IChjaGFyICopIGluYnVmOworI2VuZGlmCisJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIGJsb2NrLCAxLCB3cml0ZV9idWYpOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKyNlbmRpZgorCWlmICghcmV0dmFsKQorCQlleHQyZnNfbWFya19jaGFuZ2VkKGZzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2V4dF9hdHRyKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibG9jaywgdm9pZCAqaW5idWYpCit7CisJcmV0dXJuIGV4dDJmc193cml0ZV9leHRfYXR0cjIoZnMsIGJsb2NrLCBpbmJ1Zik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFkanVzdHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgRUEgYmxvY2suCisgKi8KK2VycmNvZGVfdCBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MihleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibGssCisJCQkJICAgIGNoYXIgKmJsb2NrX2J1ZiwgaW50IGFkanVzdCwKKwkJCQkgICAgX191MzIgKm5ld2NvdW50KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJc3RydWN0IGV4dDJfZXh0X2F0dHJfaGVhZGVyICpoZWFkZXI7CisJY2hhcgkqYnVmID0gMDsKKworCWlmICgoYmxrID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkgfHwKKwkgICAgKGJsayA8IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSkKKwkJcmV0dXJuIEVYVDJfRVRfQkFEX0VBX0JMT0NLX05VTTsKKworCWlmICghYmxvY2tfYnVmKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZidWYpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJYmxvY2tfYnVmID0gYnVmOworCX0KKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2V4dF9hdHRyMihmcywgYmxrLCBibG9ja19idWYpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCisJaGVhZGVyID0gKHN0cnVjdCBleHQyX2V4dF9hdHRyX2hlYWRlciAqKSBibG9ja19idWY7CisJaGVhZGVyLT5oX3JlZmNvdW50ICs9IGFkanVzdDsKKwlpZiAobmV3Y291bnQpCisJCSpuZXdjb3VudCA9IGhlYWRlci0+aF9yZWZjb3VudDsKKworCXJldHZhbCA9IGV4dDJmc193cml0ZV9leHRfYXR0cjIoZnMsIGJsaywgYmxvY2tfYnVmKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworZXJyb3V0OgorCWlmIChidWYpCisJCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudChleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxrLAorCQkJCQljaGFyICpibG9ja19idWYsIGludCBhZGp1c3QsCisJCQkJCV9fdTMyICpuZXdjb3VudCkKK3sKKwlyZXR1cm4gZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudChmcywgYmxrLCBibG9ja19idWYsIGFkanVzdCwgbmV3Y291bnQpOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9leHRlbnQuYyBiL2xpYi9leHQyZnMvZXh0ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEyYmM5MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvZXh0ZW50LmMKQEAgLTAsMCArMSwxNjU5IEBACisvKgorICogZXh0ZW50LmMgLS0tIHJvdXRpbmVzIHRvIGltcGxlbWVudCBleHRlbnRzIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorI2luY2x1ZGUgImUyaW1hZ2UuaCIKKworI3VuZGVmIERFQlVHCisKKy8qCisgKiBEZWZpbml0aW9ucyB0byBiZSBkcm9wcGVkIGluIGxpYi9leHQyZnMvZXh0MmZzLmgKKyAqLworCisvKgorICogUHJpdmF0ZSBkZWZpbml0aW9ucworICovCisKK3N0cnVjdCBleHRlbnRfcGF0aCB7CisJY2hhcgkJKmJ1ZjsKKwlpbnQJCWVudHJpZXM7CisJaW50CQltYXhfZW50cmllczsKKwlpbnQJCWxlZnQ7CisJaW50CQl2aXNpdF9udW07CisJaW50CQlmbGFnczsKKwlibGs2NF90CQllbmRfYmxrOworCXZvaWQJCSpjdXJyOworfTsKKworCitzdHJ1Y3QgZXh0Ml9leHRlbnRfaGFuZGxlIHsKKwllcnJjb2RlX3QJCW1hZ2ljOworCWV4dDJfZmlsc3lzCQlmczsKKwlleHQyX2lub190IAkJaW5vOworCXN0cnVjdCBleHQyX2lub2RlCSppbm9kZTsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZWJ1ZjsKKwlpbnQJCQl0eXBlOworCWludAkJCWxldmVsOworCWludAkJCW1heF9kZXB0aDsKKwlzdHJ1Y3QgZXh0ZW50X3BhdGgJKnBhdGg7Cit9OworCitzdHJ1Y3QgZXh0Ml9leHRlbnRfcGF0aCB7CisJZXJyY29kZV90CQltYWdpYzsKKwlpbnQJCQlsZWFmX2hlaWdodDsKKwlibGs2NF90CQkJbGJsazsKK307CisKKy8qCisgKiAgVXNlZnVsIERlYnVnZ2luZyBzdHVmZgorICovCisKKyNpZmRlZiBERUJVRworc3RhdGljIHZvaWQgZGJnX3Nob3dfaGVhZGVyKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKmVoKQoreworCXByaW50ZigiaGVhZGVyOiBtYWdpYz0leCBlbnRyaWVzPSV1IG1heD0ldSBkZXB0aD0ldSBnZW5lcmF0aW9uPSV1XG4iLAorCQkJZXh0MmZzX2xlMTZfdG9fY3B1KGVoLT5laF9tYWdpYyksCisJCQlleHQyZnNfbGUxNl90b19jcHUoZWgtPmVoX2VudHJpZXMpLAorCQkJZXh0MmZzX2xlMTZfdG9fY3B1KGVoLT5laF9tYXgpLAorCQkJZXh0MmZzX2xlMTZfdG9fY3B1KGVoLT5laF9kZXB0aCksCisJCQlleHQyZnNfbGUzMl90b19jcHUoZWgtPmVoX2dlbmVyYXRpb24pKTsKK30KKworc3RhdGljIHZvaWQgZGJnX3Nob3dfaW5kZXgoc3RydWN0IGV4dDNfZXh0ZW50X2lkeCAqaXgpCit7CisJcHJpbnRmKCJpbmRleDogYmxvY2s9JXUgbGVhZj0ldSBsZWFmX2hpPSV1IHVudXNlZD0ldVxuIiwKKwkJCWV4dDJmc19sZTMyX3RvX2NwdShpeC0+ZWlfYmxvY2spLAorCQkJZXh0MmZzX2xlMzJfdG9fY3B1KGl4LT5laV9sZWFmKSwKKwkJCWV4dDJmc19sZTE2X3RvX2NwdShpeC0+ZWlfbGVhZl9oaSksCisJCQlleHQyZnNfbGUxNl90b19jcHUoaXgtPmVpX3VudXNlZCkpOworfQorCitzdGF0aWMgdm9pZCBkYmdfc2hvd19leHRlbnQoc3RydWN0IGV4dDNfZXh0ZW50ICpleCkKK3sKKwlwcmludGYoImV4dGVudDogYmxvY2s9JXUtJXUgbGVuPSV1IHN0YXJ0PSV1IHN0YXJ0X2hpPSV1XG4iLAorCQkJZXh0MmZzX2xlMzJfdG9fY3B1KGV4LT5lZV9ibG9jayksCisJCQlleHQyZnNfbGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKSArCisJCQlleHQyZnNfbGUxNl90b19jcHUoZXgtPmVlX2xlbikgLSAxLAorCQkJZXh0MmZzX2xlMTZfdG9fY3B1KGV4LT5lZV9sZW4pLAorCQkJZXh0MmZzX2xlMzJfdG9fY3B1KGV4LT5lZV9zdGFydCksCisJCQlleHQyZnNfbGUxNl90b19jcHUoZXgtPmVlX3N0YXJ0X2hpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRiZ19wcmludF9leHRlbnQoY2hhciAqZGVzYywgc3RydWN0IGV4dDJmc19leHRlbnQgKmV4dGVudCkKK3sKKwlpZiAoZGVzYykKKwkJcHJpbnRmKCIlczogIiwgZGVzYyk7CisJcHJpbnRmKCJleHRlbnQ6IGxibGsgJWxsdS0tJWxsdSwgbGVuICV1LCBwYmxrICVsbHUsIGZsYWdzOiAiLAorCSAgICAgICBleHRlbnQtPmVfbGJsaywgZXh0ZW50LT5lX2xibGsgKyBleHRlbnQtPmVfbGVuIC0gMSwKKwkgICAgICAgZXh0ZW50LT5lX2xlbiwgZXh0ZW50LT5lX3BibGspOworCWlmIChleHRlbnQtPmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19MRUFGKQorCQlmcHV0cygiTEVBRiAiLCBzdGRvdXQpOworCWlmIChleHRlbnQtPmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19VTklOSVQpCisJCWZwdXRzKCJVTklOSVQgIiwgc3Rkb3V0KTsKKwlpZiAoZXh0ZW50LT5lX2ZsYWdzICYgRVhUMl9FWFRFTlRfRkxBR1NfU0VDT05EX1ZJU0lUKQorCQlmcHV0cygiMk5EX1ZJU0lUICIsIHN0ZG91dCk7CisJaWYgKCFleHRlbnQtPmVfZmxhZ3MpCisJCWZwdXRzKCIobm9uZSkiLCBzdGRvdXQpOworCWZwdXRjKCdcbicsIHN0ZG91dCk7CisKK30KKworc3RhdGljIHZvaWQgZHVtcF9wYXRoKGNvbnN0IGNoYXIgKnRhZywgc3RydWN0IGV4dDJfZXh0ZW50X2hhbmRsZSAqaGFuZGxlLAorCQkgICAgICBzdHJ1Y3QgZXh0ZW50X3BhdGggKnBhdGgpCit7CisJc3RydWN0IGV4dGVudF9wYXRoICpwcHAgPSBwYXRoOworCXByaW50ZigiJXM6IGxldmVsPSVkXG4iLCB0YWcsIGhhbmRsZS0+bGV2ZWwpOworCisJZG8geworCQlwcmludGYoIiVzOiBwYXRoPSVsZCBidWY9JXAgZW50cmllcz0lZCBtYXhfZW50cmllcz0lZCBsZWZ0PSVkICIKKwkJICAgICAgICJ2aXNpdF9udW09JWQgZmxhZ3M9MHgleCBlbmRfYmxrPSVsbHUgY3Vycj0lcCglbGQpXG4iLAorCQkgICAgICAgdGFnLCAocHBwIC0gaGFuZGxlLT5wYXRoKSwgcHBwLT5idWYsIHBwcC0+ZW50cmllcywKKwkJICAgICAgIHBwcC0+bWF4X2VudHJpZXMsIHBwcC0+bGVmdCwgcHBwLT52aXNpdF9udW0sIHBwcC0+ZmxhZ3MsCisJCSAgICAgICBwcHAtPmVuZF9ibGssIHBwcC0+Y3VyciwgcHBwLT5jdXJyIC0gKHZvaWQgKilwcHAtPmJ1Zik7CisJCXByaW50ZigiICAiKTsKKwkJZGJnX3Nob3dfaGVhZGVyKChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopcHBwLT5idWYpOworCQlpZiAocHBwLT5jdXJyKSB7CisJCQlwcmludGYoIiAgIik7CisJCQlkYmdfc2hvd19pbmRleChwcHAtPmN1cnIpOworCQkJcHJpbnRmKCIgICIpOworCQkJZGJnX3Nob3dfZXh0ZW50KHBwcC0+Y3Vycik7CisJCX0KKwkJcHBwLS07CisJfSB3aGlsZSAocHBwID49IGhhbmRsZS0+cGF0aCk7CisJZmZsdXNoKHN0ZG91dCk7CisKKwlyZXR1cm47Cit9CisKKyNlbHNlCisjZGVmaW5lIGRiZ19zaG93X2hlYWRlcihlaCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkYmdfc2hvd19pbmRleChpeCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkYmdfc2hvd19leHRlbnQoZXgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGJnX3ByaW50X2V4dGVudChkZXNjLCBleCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkdW1wX3BhdGgodGFnLCBoYW5kbGUsIHBhdGgpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKgorICogVmVyaWZ5IHRoZSBleHRlbnQgaGVhZGVyIGFzIGJlaW5nIHNhbmUKKyAqLworZXJyY29kZV90IGV4dDJmc19leHRlbnRfaGVhZGVyX3ZlcmlmeSh2b2lkICpwdHIsIGludCBzaXplKQoreworCWludCBlaF9tYXgsIGVudHJ5X3NpemU7CisJc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqZWggPSBwdHI7CisKKwlkYmdfc2hvd19oZWFkZXIoZWgpOworCWlmIChleHQyZnNfbGUxNl90b19jcHUoZWgtPmVoX21hZ2ljKSAhPSBFWFQzX0VYVF9NQUdJQykKKwkJcmV0dXJuIEVYVDJfRVRfRVhURU5UX0hFQURFUl9CQUQ7CisJaWYgKGV4dDJmc19sZTE2X3RvX2NwdShlaC0+ZWhfZW50cmllcykgPiBleHQyZnNfbGUxNl90b19jcHUoZWgtPmVoX21heCkpCisJCXJldHVybiBFWFQyX0VUX0VYVEVOVF9IRUFERVJfQkFEOworCWlmIChlaC0+ZWhfZGVwdGggPT0gMCkKKwkJZW50cnlfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZXh0M19leHRlbnQpOworCWVsc2UKKwkJZW50cnlfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZXh0M19leHRlbnRfaWR4KTsKKworCWVoX21heCA9IChzaXplIC0gc2l6ZW9mKCplaCkpIC8gZW50cnlfc2l6ZTsKKwkvKiBBbGxvdyB0d28gZXh0ZW50LXNpemVkIGl0ZW1zIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLCBmb3IKKwkgKiBleHQ0X2V4dGVudF90YWlsIHdpdGggY2hlY2tzdW0gaW4gdGhlIGZ1dHVyZS4gKi8KKwlpZiAoKGV4dDJmc19sZTE2X3RvX2NwdShlaC0+ZWhfbWF4KSA+IGVoX21heCkgfHwKKwkgICAgKGV4dDJmc19sZTE2X3RvX2NwdShlaC0+ZWhfbWF4KSA8IChlaF9tYXggLSAyKSkpCisJCXJldHVybiBFWFQyX0VUX0VYVEVOVF9IRUFERVJfQkFEOworCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIEJlZ2luIGZ1bmN0aW9ucyB0byBoYW5kbGUgYW4gaW5vZGUncyBleHRlbnQgaW5mb3JtYXRpb24KKyAqLwordm9pZCBleHQyZnNfZXh0ZW50X2ZyZWUoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlKQoreworCWludAkJCWk7CisKKwlpZiAoIWhhbmRsZSkKKwkJcmV0dXJuOworCisJaWYgKGhhbmRsZS0+cGF0aCkgeworCQlmb3IgKGk9MTsgaSA8PSBoYW5kbGUtPm1heF9kZXB0aDsgaSsrKSB7CisJCQlpZiAoaGFuZGxlLT5wYXRoW2ldLmJ1ZikKKwkJCQlleHQyZnNfZnJlZV9tZW0oJmhhbmRsZS0+cGF0aFtpXS5idWYpOworCQl9CisJCWV4dDJmc19mcmVlX21lbSgmaGFuZGxlLT5wYXRoKTsKKwl9CisJZXh0MmZzX2ZyZWVfbWVtKCZoYW5kbGUpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9vcGVuKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkgICAgZXh0Ml9leHRlbnRfaGFuZGxlX3QgKnJldF9oYW5kbGUpCit7CisJcmV0dXJuIGV4dDJmc19leHRlbnRfb3BlbjIoZnMsIGlubywgTlVMTCwgcmV0X2hhbmRsZSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZXh0ZW50X29wZW4yKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCSAgICBleHQyX2V4dGVudF9oYW5kbGVfdCAqcmV0X2hhbmRsZSkKK3sKKwlzdHJ1Y3QgZXh0Ml9leHRlbnRfaGFuZGxlCSpoYW5kbGU7CisJZXJyY29kZV90CQkJcmV0dmFsOworCWludAkJCQlpOworCXN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIJKmVoOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmICghaW5vZGUpCisJCWlmICgoaW5vID09IDApIHx8IChpbm8gPiBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KSkKKwkJCXJldHVybiBFWFQyX0VUX0JBRF9JTk9ERV9OVU07CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGV4dDJfZXh0ZW50X2hhbmRsZSksICZoYW5kbGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJbWVtc2V0KGhhbmRsZSwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX2V4dGVudF9oYW5kbGUpKTsKKworCWhhbmRsZS0+aW5vID0gaW5vOworCWhhbmRsZS0+ZnMgPSBmczsKKworCWlmIChpbm9kZSkgeworCQloYW5kbGUtPmlub2RlID0gaW5vZGU7CisJfSBlbHNlIHsKKwkJaGFuZGxlLT5pbm9kZSA9ICZoYW5kbGUtPmlub2RlYnVmOworCQlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgaW5vLCBoYW5kbGUtPmlub2RlKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCX0KKworCWVoID0gKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKikgJmhhbmRsZS0+aW5vZGUtPmlfYmxvY2tbMF07CisKKwlmb3IgKGk9MDsgaSA8IEVYVDJfTl9CTE9DS1M7IGkrKykKKwkJaWYgKGhhbmRsZS0+aW5vZGUtPmlfYmxvY2tbaV0pCisJCQlicmVhazsKKwlpZiAoaSA+PSBFWFQyX05fQkxPQ0tTKSB7CisJCWVoLT5laF9tYWdpYyA9IGV4dDJmc19jcHVfdG9fbGUxNihFWFQzX0VYVF9NQUdJQyk7CisJCWVoLT5laF9kZXB0aCA9IDA7CisJCWVoLT5laF9lbnRyaWVzID0gMDsKKwkJaSA9IChzaXplb2YoaGFuZGxlLT5pbm9kZS0+aV9ibG9jaykgLSBzaXplb2YoKmVoKSkgLworCQkJc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudCk7CisJCWVoLT5laF9tYXggPSBleHQyZnNfY3B1X3RvX2xlMTYoaSk7CisJCWhhbmRsZS0+aW5vZGUtPmlfZmxhZ3MgfD0gRVhUNF9FWFRFTlRTX0ZMOworCX0KKworCWlmICghKGhhbmRsZS0+aW5vZGUtPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfSU5PREVfTk9UX0VYVEVOVDsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9oZWFkZXJfdmVyaWZ5KGVoLCBzaXplb2YoaGFuZGxlLT5pbm9kZS0+aV9ibG9jaykpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCisJaGFuZGxlLT5tYXhfZGVwdGggPSBleHQyZnNfbGUxNl90b19jcHUoZWgtPmVoX2RlcHRoKTsKKwloYW5kbGUtPnR5cGUgPSBleHQyZnNfbGUxNl90b19jcHUoZWgtPmVoX21hZ2ljKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKCgoaGFuZGxlLT5tYXhfZGVwdGgrMSkgKgorCQkJCSBzaXplb2Yoc3RydWN0IGV4dGVudF9wYXRoKSksCisJCQkJJmhhbmRsZS0+cGF0aCk7CisJbWVtc2V0KGhhbmRsZS0+cGF0aCwgMCwKKwkgICAgICAgKGhhbmRsZS0+bWF4X2RlcHRoKzEpICogc2l6ZW9mKHN0cnVjdCBleHRlbnRfcGF0aCkpOworCWhhbmRsZS0+cGF0aFswXS5idWYgPSAoY2hhciAqKSBoYW5kbGUtPmlub2RlLT5pX2Jsb2NrOworCisJaGFuZGxlLT5wYXRoWzBdLmxlZnQgPSBoYW5kbGUtPnBhdGhbMF0uZW50cmllcyA9CisJCWV4dDJmc19sZTE2X3RvX2NwdShlaC0+ZWhfZW50cmllcyk7CisJaGFuZGxlLT5wYXRoWzBdLm1heF9lbnRyaWVzID0gZXh0MmZzX2xlMTZfdG9fY3B1KGVoLT5laF9tYXgpOworCWhhbmRsZS0+cGF0aFswXS5jdXJyID0gMDsKKwloYW5kbGUtPnBhdGhbMF0uZW5kX2JsayA9CisJCShFWFQyX0lfU0laRShoYW5kbGUtPmlub2RlKSArIGZzLT5ibG9ja3NpemUgLSAxKSA+PgorCQkgRVhUMl9CTE9DS19TSVpFX0JJVFMoZnMtPnN1cGVyKTsKKwloYW5kbGUtPnBhdGhbMF0udmlzaXRfbnVtID0gMTsKKwloYW5kbGUtPmxldmVsID0gMDsKKwloYW5kbGUtPm1hZ2ljID0gRVhUMl9FVF9NQUdJQ19FWFRFTlRfSEFORExFOworCisJKnJldF9oYW5kbGUgPSBoYW5kbGU7CisJcmV0dXJuIDA7CisKK2Vycm91dDoKKwlleHQyZnNfZXh0ZW50X2ZyZWUoaGFuZGxlKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgKG9wdGlvbmFsbHkpIG1vdmluZyB0aHJvdWdoIHRoZQorICogZXh0ZW50IHRyZWUgYW5kIHRoZW4gcmV0dXJuaW5nIHRoZSBjdXJyZW50IGV4dGVudAorICovCitlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9nZXQoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlLAorCQkJICAgIGludCBmbGFncywgc3RydWN0IGV4dDJmc19leHRlbnQgKmV4dGVudCkKK3sKKwlzdHJ1Y3QgZXh0ZW50X3BhdGgJKnBhdGgsICpuZXdwYXRoOworCXN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIJKmVoOworCXN0cnVjdCBleHQzX2V4dGVudF9pZHgJCSppeCA9IDA7CisJc3RydWN0IGV4dDNfZXh0ZW50CQkqZXg7CisJZXJyY29kZV90CQkJcmV0dmFsOworCWJsazY0X3QJCQkJYmxrOworCWJsazY0X3QJCQkJZW5kX2JsazsKKwlpbnQJCQkJb3JpZ19vcCwgb3A7CisKKwlFWFQyX0NIRUNLX01BR0lDKGhhbmRsZSwgRVhUMl9FVF9NQUdJQ19FWFRFTlRfSEFORExFKTsKKworCWlmICghaGFuZGxlLT5wYXRoKQorCQlyZXR1cm4gRVhUMl9FVF9OT19DVVJSRU5UX05PREU7CisKKwlvcmlnX29wID0gb3AgPSBmbGFncyAmIEVYVDJfRVhURU5UX01PVkVfTUFTSzsKKworcmV0cnk6CisJcGF0aCA9IGhhbmRsZS0+cGF0aCArIGhhbmRsZS0+bGV2ZWw7CisJaWYgKChvcmlnX29wID09IEVYVDJfRVhURU5UX05FWFQpIHx8CisJICAgIChvcmlnX29wID09IEVYVDJfRVhURU5UX05FWFRfTEVBRikpIHsKKwkJaWYgKGhhbmRsZS0+bGV2ZWwgPCBoYW5kbGUtPm1heF9kZXB0aCkgeworCQkJLyogaW50ZXJpb3Igbm9kZSAqLworCQkJaWYgKHBhdGgtPnZpc2l0X251bSA9PSAwKSB7CisJCQkJcGF0aC0+dmlzaXRfbnVtKys7CisJCQkJb3AgPSBFWFQyX0VYVEVOVF9ET1dOOworCQkJfSBlbHNlIGlmIChwYXRoLT5sZWZ0ID4gMCkKKwkJCQlvcCA9IEVYVDJfRVhURU5UX05FWFRfU0lCOworCQkJZWxzZSBpZiAoaGFuZGxlLT5sZXZlbCA+IDApCisJCQkJb3AgPSBFWFQyX0VYVEVOVF9VUDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gRVhUMl9FVF9FWFRFTlRfTk9fTkVYVDsKKwkJfSBlbHNlIHsKKwkJCS8qIGxlYWYgbm9kZSAqLworCQkJaWYgKHBhdGgtPmxlZnQgPiAwKQorCQkJCW9wID0gRVhUMl9FWFRFTlRfTkVYVF9TSUI7CisJCQllbHNlIGlmIChoYW5kbGUtPmxldmVsID4gMCkKKwkJCQlvcCA9IEVYVDJfRVhURU5UX1VQOworCQkJZWxzZQorCQkJCXJldHVybiBFWFQyX0VUX0VYVEVOVF9OT19ORVhUOworCQl9CisJCWlmIChvcCAhPSBFWFQyX0VYVEVOVF9ORVhUX1NJQikgeworI2lmZGVmIERFQlVHX0dFVF9FWFRFTlQKKwkJCXByaW50ZigiPDw8PCBPUCA9ICVzXG4iLAorCQkJICAgICAgIChvcCA9PSBFWFQyX0VYVEVOVF9ET1dOKSA/ICJkb3duIiA6CisJCQkgICAgICAgKChvcCA9PSBFWFQyX0VYVEVOVF9VUCkgPyAidXAiIDogInVua25vd24iKSk7CisjZW5kaWYKKwkJfQorCX0KKworCWlmICgob3JpZ19vcCA9PSBFWFQyX0VYVEVOVF9QUkVWKSB8fAorCSAgICAob3JpZ19vcCA9PSBFWFQyX0VYVEVOVF9QUkVWX0xFQUYpKSB7CisJCWlmIChoYW5kbGUtPmxldmVsIDwgaGFuZGxlLT5tYXhfZGVwdGgpIHsKKwkJCS8qIGludGVyaW9yIG5vZGUgKi8KKwkJCWlmIChwYXRoLT52aXNpdF9udW0gPiAwICkgeworCQkJCS8qIHBhdGgtPnZpc2l0X251bSA9IDA7ICovCisJCQkJb3AgPSBFWFQyX0VYVEVOVF9ET1dOX0FORF9MQVNUOworCQkJfSBlbHNlIGlmIChwYXRoLT5sZWZ0IDwgcGF0aC0+ZW50cmllcy0xKQorCQkJCW9wID0gRVhUMl9FWFRFTlRfUFJFVl9TSUI7CisJCQllbHNlIGlmIChoYW5kbGUtPmxldmVsID4gMCkKKwkJCQlvcCA9IEVYVDJfRVhURU5UX1VQOworCQkJZWxzZQorCQkJCXJldHVybiBFWFQyX0VUX0VYVEVOVF9OT19QUkVWOworCQl9IGVsc2UgeworCQkJLyogbGVhZiBub2RlICovCisJCQlpZiAocGF0aC0+bGVmdCA8IHBhdGgtPmVudHJpZXMtMSkKKwkJCQlvcCA9IEVYVDJfRVhURU5UX1BSRVZfU0lCOworCQkJZWxzZSBpZiAoaGFuZGxlLT5sZXZlbCA+IDApCisJCQkJb3AgPSBFWFQyX0VYVEVOVF9VUDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gRVhUMl9FVF9FWFRFTlRfTk9fUFJFVjsKKwkJfQorCQlpZiAob3AgIT0gRVhUMl9FWFRFTlRfUFJFVl9TSUIpIHsKKyNpZmRlZiBERUJVR19HRVRfRVhURU5UCisJCQlwcmludGYoIjw8PDwgT1AgPSAlc1xuIiwKKwkJCSAgICAgICAob3AgPT0gRVhUMl9FWFRFTlRfRE9XTl9BTkRfTEFTVCkgPyAiZG93bi9sYXN0IiA6CisJCQkgICAgICAgKChvcCA9PSBFWFQyX0VYVEVOVF9VUCkgPyAidXAiIDogInVua25vd24iKSk7CisjZW5kaWYKKwkJfQorCX0KKworCWlmIChvcmlnX29wID09IEVYVDJfRVhURU5UX0xBU1RfTEVBRikgeworCQlpZiAoKGhhbmRsZS0+bGV2ZWwgPCBoYW5kbGUtPm1heF9kZXB0aCkgJiYKKwkJICAgIChwYXRoLT5sZWZ0ID09IDApKQorCQkJb3AgPSBFWFQyX0VYVEVOVF9ET1dOOworCQllbHNlCisJCQlvcCA9IEVYVDJfRVhURU5UX0xBU1RfU0lCOworI2lmZGVmIERFQlVHX0dFVF9FWFRFTlQKKwkJcHJpbnRmKCI8PDw8IE9QID0gJXNcbiIsCisJCQkgICAob3AgPT0gRVhUMl9FWFRFTlRfRE9XTikgPyAiZG93biIgOiAibGFzdF9zaWIiKTsKKyNlbmRpZgorCX0KKworCXN3aXRjaCAob3ApIHsKKwljYXNlIEVYVDJfRVhURU5UX0NVUlJFTlQ6CisJCWl4ID0gcGF0aC0+Y3VycjsKKwkJYnJlYWs7CisJY2FzZSBFWFQyX0VYVEVOVF9ST09UOgorCQloYW5kbGUtPmxldmVsID0gMDsKKwkJcGF0aCA9IGhhbmRsZS0+cGF0aCArIGhhbmRsZS0+bGV2ZWw7CisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBFWFQyX0VYVEVOVF9GSVJTVF9TSUI6CisJCXBhdGgtPmxlZnQgPSBwYXRoLT5lbnRyaWVzOworCQlwYXRoLT5jdXJyID0gMDsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIEVYVDJfRVhURU5UX05FWFRfU0lCOgorCQlpZiAocGF0aC0+bGVmdCA8PSAwKQorCQkJcmV0dXJuIEVYVDJfRVRfRVhURU5UX05PX05FWFQ7CisJCWlmIChwYXRoLT5jdXJyKSB7CisJCQlpeCA9IHBhdGgtPmN1cnI7CisJCQlpeCsrOworCQl9IGVsc2UgeworCQkJZWggPSAoc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqKSBwYXRoLT5idWY7CisJCQlpeCA9IEVYVF9GSVJTVF9JTkRFWChlaCk7CisJCX0KKwkJcGF0aC0+bGVmdC0tOworCQlwYXRoLT5jdXJyID0gaXg7CisJCXBhdGgtPnZpc2l0X251bSA9IDA7CisJCWJyZWFrOworCWNhc2UgRVhUMl9FWFRFTlRfUFJFVl9TSUI6CisJCWlmICghcGF0aC0+Y3VyciB8fAorCQkgICAgcGF0aC0+bGVmdCsxID49IHBhdGgtPmVudHJpZXMpCisJCQlyZXR1cm4gRVhUMl9FVF9FWFRFTlRfTk9fUFJFVjsKKwkJaXggPSBwYXRoLT5jdXJyOworCQlpeC0tOworCQlwYXRoLT5jdXJyID0gaXg7CisJCXBhdGgtPmxlZnQrKzsKKwkJaWYgKGhhbmRsZS0+bGV2ZWwgPCBoYW5kbGUtPm1heF9kZXB0aCkKKwkJCXBhdGgtPnZpc2l0X251bSA9IDE7CisJCWJyZWFrOworCWNhc2UgRVhUMl9FWFRFTlRfTEFTVF9TSUI6CisJCWVoID0gKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKikgcGF0aC0+YnVmOworCQlwYXRoLT5jdXJyID0gRVhUX0xBU1RfRVhURU5UKGVoKTsKKwkJaXggPSBwYXRoLT5jdXJyOworCQlwYXRoLT5sZWZ0ID0gMDsKKwkJcGF0aC0+dmlzaXRfbnVtID0gMDsKKwkJYnJlYWs7CisJY2FzZSBFWFQyX0VYVEVOVF9VUDoKKwkJaWYgKGhhbmRsZS0+bGV2ZWwgPD0gMCkKKwkJCXJldHVybiBFWFQyX0VUX0VYVEVOVF9OT19VUDsKKwkJaGFuZGxlLT5sZXZlbC0tOworCQlwYXRoLS07CisJCWl4ID0gcGF0aC0+Y3VycjsKKwkJaWYgKChvcmlnX29wID09IEVYVDJfRVhURU5UX1BSRVYpIHx8CisJCSAgICAob3JpZ19vcCA9PSBFWFQyX0VYVEVOVF9QUkVWX0xFQUYpKQorCQkJcGF0aC0+dmlzaXRfbnVtID0gMDsKKwkJYnJlYWs7CisJY2FzZSBFWFQyX0VYVEVOVF9ET1dOOgorCWNhc2UgRVhUMl9FWFRFTlRfRE9XTl9BTkRfTEFTVDoKKwkJaWYgKCFwYXRoLT5jdXJyIHx8KGhhbmRsZS0+bGV2ZWwgPj0gaGFuZGxlLT5tYXhfZGVwdGgpKQorCQkJcmV0dXJuIEVYVDJfRVRfRVhURU5UX05PX0RPV047CisKKwkJaXggPSBwYXRoLT5jdXJyOworCQluZXdwYXRoID0gcGF0aCArIDE7CisJCWlmICghbmV3cGF0aC0+YnVmKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShoYW5kbGUtPmZzLT5ibG9ja3NpemUsCisJCQkJCQkmbmV3cGF0aC0+YnVmKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlibGsgPSBleHQyZnNfbGUzMl90b19jcHUoaXgtPmVpX2xlYWYpICsKKwkJCSgoX191NjQpIGV4dDJmc19sZTE2X3RvX2NwdShpeC0+ZWlfbGVhZl9oaSkgPDwgMzIpOworCQlpZiAoKGhhbmRsZS0+ZnMtPmZsYWdzICYgRVhUMl9GTEFHX0lNQUdFX0ZJTEUpICYmCisJCSAgICAoaGFuZGxlLT5mcy0+aW8gIT0gaGFuZGxlLT5mcy0+aW1hZ2VfaW8pKQorCQkJbWVtc2V0KG5ld3BhdGgtPmJ1ZiwgMCwgaGFuZGxlLT5mcy0+YmxvY2tzaXplKTsKKwkJZWxzZSB7CisJCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoaGFuZGxlLT5mcy0+aW8sCisJCQkJCQkgICAgIGJsaywgMSwgbmV3cGF0aC0+YnVmKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQloYW5kbGUtPmxldmVsKys7CisKKwkJZWggPSAoc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqKSBuZXdwYXRoLT5idWY7CisKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9oZWFkZXJfdmVyaWZ5KGVoLCBoYW5kbGUtPmZzLT5ibG9ja3NpemUpOworCQlpZiAocmV0dmFsKSB7CisJCQloYW5kbGUtPmxldmVsLS07CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisKKwkJbmV3cGF0aC0+bGVmdCA9IG5ld3BhdGgtPmVudHJpZXMgPQorCQkJZXh0MmZzX2xlMTZfdG9fY3B1KGVoLT5laF9lbnRyaWVzKTsKKwkJbmV3cGF0aC0+bWF4X2VudHJpZXMgPSBleHQyZnNfbGUxNl90b19jcHUoZWgtPmVoX21heCk7CisKKwkJaWYgKHBhdGgtPmxlZnQgPiAwKSB7CisJCQlpeCsrOworCQkJbmV3cGF0aC0+ZW5kX2JsayA9IGV4dDJmc19sZTMyX3RvX2NwdShpeC0+ZWlfYmxvY2spOworCQl9IGVsc2UKKwkJCW5ld3BhdGgtPmVuZF9ibGsgPSBwYXRoLT5lbmRfYmxrOworCisJCXBhdGggPSBuZXdwYXRoOworCQlpZiAob3AgPT0gRVhUMl9FWFRFTlRfRE9XTikgeworCQkJaXggPSBFWFRfRklSU1RfSU5ERVgoKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKikgZWgpOworCQkJcGF0aC0+Y3VyciA9IGl4OworCQkJcGF0aC0+bGVmdCA9IHBhdGgtPmVudHJpZXMgLSAxOworCQkJcGF0aC0+dmlzaXRfbnVtID0gMDsKKwkJfSBlbHNlIHsKKwkJCWl4ID0gRVhUX0xBU1RfSU5ERVgoKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKikgZWgpOworCQkJcGF0aC0+Y3VyciA9IGl4OworCQkJcGF0aC0+bGVmdCA9IDA7CisJCQlpZiAoaGFuZGxlLT5sZXZlbCA8IGhhbmRsZS0+bWF4X2RlcHRoKQorCQkJCXBhdGgtPnZpc2l0X251bSA9IDE7CisJCX0KKyNpZmRlZiBERUJVR19HRVRfRVhURU5UCisJCXByaW50ZigiRG93biB0byBsZXZlbCAlZC8lZCwgZW5kX2Jsaz0lbGx1XG4iLAorCQkJICAgaGFuZGxlLT5sZXZlbCwgaGFuZGxlLT5tYXhfZGVwdGgsCisJCQkgICBwYXRoLT5lbmRfYmxrKTsKKyNlbmRpZgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRVhUMl9FVF9PUF9OT1RfU1VQUE9SVEVEOworCX0KKworCWlmICghaXgpCisJCXJldHVybiBFWFQyX0VUX05PX0NVUlJFTlRfTk9ERTsKKworCWV4dGVudC0+ZV9mbGFncyA9IDA7CisjaWZkZWYgREVCVUdfR0VUX0VYVEVOVAorCXByaW50ZigiKExlZnQgJWQpXG4iLCBwYXRoLT5sZWZ0KTsKKyNlbmRpZgorCisJaWYgKGhhbmRsZS0+bGV2ZWwgPT0gaGFuZGxlLT5tYXhfZGVwdGgpIHsKKwkJZXggPSAoc3RydWN0IGV4dDNfZXh0ZW50ICopIGl4OworCisJCWV4dGVudC0+ZV9wYmxrID0gZXh0MmZzX2xlMzJfdG9fY3B1KGV4LT5lZV9zdGFydCkgKworCQkJKChfX3U2NCkgZXh0MmZzX2xlMTZfdG9fY3B1KGV4LT5lZV9zdGFydF9oaSkgPDwgMzIpOworCQlleHRlbnQtPmVfbGJsayA9IGV4dDJmc19sZTMyX3RvX2NwdShleC0+ZWVfYmxvY2spOworCQlleHRlbnQtPmVfbGVuID0gZXh0MmZzX2xlMTZfdG9fY3B1KGV4LT5lZV9sZW4pOworCQlleHRlbnQtPmVfZmxhZ3MgfD0gRVhUMl9FWFRFTlRfRkxBR1NfTEVBRjsKKwkJaWYgKGV4dGVudC0+ZV9sZW4gPiBFWFRfSU5JVF9NQVhfTEVOKSB7CisJCQlleHRlbnQtPmVfbGVuIC09IEVYVF9JTklUX01BWF9MRU47CisJCQlleHRlbnQtPmVfZmxhZ3MgfD0gRVhUMl9FWFRFTlRfRkxBR1NfVU5JTklUOworCQl9CisJfSBlbHNlIHsKKwkJZXh0ZW50LT5lX3BibGsgPSBleHQyZnNfbGUzMl90b19jcHUoaXgtPmVpX2xlYWYpICsKKwkJCSgoX191NjQpIGV4dDJmc19sZTE2X3RvX2NwdShpeC0+ZWlfbGVhZl9oaSkgPDwgMzIpOworCQlleHRlbnQtPmVfbGJsayA9IGV4dDJmc19sZTMyX3RvX2NwdShpeC0+ZWlfYmxvY2spOworCQlpZiAocGF0aC0+bGVmdCA+IDApIHsKKwkJCWl4Kys7CisJCQllbmRfYmxrID0gZXh0MmZzX2xlMzJfdG9fY3B1KGl4LT5laV9ibG9jayk7CisJCX0gZWxzZQorCQkJZW5kX2JsayA9IHBhdGgtPmVuZF9ibGs7CisKKwkJZXh0ZW50LT5lX2xlbiA9IGVuZF9ibGsgLSBleHRlbnQtPmVfbGJsazsKKwl9CisJaWYgKHBhdGgtPnZpc2l0X251bSkKKwkJZXh0ZW50LT5lX2ZsYWdzIHw9IEVYVDJfRVhURU5UX0ZMQUdTX1NFQ09ORF9WSVNJVDsKKworCWlmICgoKG9yaWdfb3AgPT0gRVhUMl9FWFRFTlRfTkVYVF9MRUFGKSB8fAorCSAgICAgKG9yaWdfb3AgPT0gRVhUMl9FWFRFTlRfUFJFVl9MRUFGKSkgJiYKKwkgICAgKGhhbmRsZS0+bGV2ZWwgIT0gaGFuZGxlLT5tYXhfZGVwdGgpKQorCQlnb3RvIHJldHJ5OworCisJaWYgKChvcmlnX29wID09IEVYVDJfRVhURU5UX0xBU1RfTEVBRikgJiYKKwkgICAgKChoYW5kbGUtPmxldmVsICE9IGhhbmRsZS0+bWF4X2RlcHRoKSB8fAorCSAgICAgKHBhdGgtPmxlZnQgIT0gMCkpKQorCQlnb3RvIHJldHJ5OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdXBkYXRlX3BhdGgoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlKQoreworCWJsazY0X3QJCQkJYmxrOworCWVycmNvZGVfdAkJCXJldHZhbDsKKwlzdHJ1Y3QgZXh0M19leHRlbnRfaWR4CQkqaXg7CisKKwlpZiAoaGFuZGxlLT5sZXZlbCA9PSAwKSB7CisJCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZShoYW5kbGUtPmZzLCBoYW5kbGUtPmlubywKKwkJCQkJICAgIGhhbmRsZS0+aW5vZGUpOworCX0gZWxzZSB7CisJCWl4ID0gaGFuZGxlLT5wYXRoW2hhbmRsZS0+bGV2ZWwgLSAxXS5jdXJyOworCQlibGsgPSBleHQyZnNfbGUzMl90b19jcHUoaXgtPmVpX2xlYWYpICsKKwkJCSgoX191NjQpIGV4dDJmc19sZTE2X3RvX2NwdShpeC0+ZWlfbGVhZl9oaSkgPDwgMzIpOworCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoaGFuZGxlLT5mcy0+aW8sCisJCQkJICAgICAgYmxrLCAxLCBoYW5kbGUtPnBhdGhbaGFuZGxlLT5sZXZlbF0uYnVmKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmIDAKK2VycmNvZGVfdCBleHQyZnNfZXh0ZW50X3NhdmVfcGF0aChleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUsCisJCQkJICBleHQyX2V4dGVudF9wYXRoX3QgKnJldF9wYXRoKQoreworCWV4dDJfZXh0ZW50X3BhdGhfdAlzYXZlX3BhdGg7CisJc3RydWN0IGV4dDJmc19leHRlbnQJZXh0ZW50OworCXN0cnVjdCBleHQyX2V4dGVudF9pbmZvCWluZm87CisJZXJyY29kZV90CQlyZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIEVYVDJfRVhURU5UX0NVUlJFTlQsICZleHRlbnQpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldF9pbmZvKGhhbmRsZSwgJmluZm8pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGV4dDJfZXh0ZW50X3BhdGgpLCAmc2F2ZV9wYXRoKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCW1lbXNldChzYXZlX3BhdGgsIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9leHRlbnRfcGF0aCkpOworCisJc2F2ZV9wYXRoLT5tYWdpYyA9IEVYVDJfRVRfTUFHSUNfRVhURU5UX1BBVEg7CisJc2F2ZV9wYXRoLT5sZWFmX2hlaWdodCA9IGluZm8ubWF4X2RlcHRoIC0gaW5mby5jdXJyX2xldmVsIC0gMTsKKwlzYXZlX3BhdGgtPmxibGsgPSBleHRlbnQuZV9sYmxrOworCisJKnJldF9wYXRoID0gc2F2ZV9wYXRoOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9mcmVlX3BhdGgoZXh0Ml9leHRlbnRfcGF0aF90IHBhdGgpCit7CisJRVhUMl9DSEVDS19NQUdJQyhwYXRoLCBFWFQyX0VUX01BR0lDX0VYVEVOVF9QQVRIKTsKKworCWV4dDJmc19mcmVlX21lbSgmcGF0aCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoKKyAqIEdvIHRvIHRoZSBub2RlIGF0IGxlYWZfbGV2ZWwgd2hpY2ggY29udGFpbnMgbG9naWNhbCBibG9jayBibGsuCisgKgorICogbGVhZl9sZXZlbCBpcyBoZWlnaHQgZnJvbSB0aGUgbGVhZiBub2RlIGxldmVsLCBpLmUuCisgKiBsZWFmX2xldmVsIDAgaXMgYXQgbGVhZiBub2RlLCBsZWFmX2xldmVsIDEgaXMgMSBhYm92ZSBldGMuCisgKgorICogSWYgImJsayIgaGFzIG5vIG1hcHBpbmcgKGhvbGUpIHRoZW4gaGFuZGxlIGlzIGxlZnQgYXQgbGFzdAorICogZXh0ZW50IGJlZm9yZSBibGsuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfZXh0ZW50X2dvdG8yKGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSwKKwkJCSAgICAgIGludCBsZWFmX2xldmVsLCBibGs2NF90IGJsaykKK3sKKwlzdHJ1Y3QgZXh0MmZzX2V4dGVudAlleHRlbnQ7CisJZXJyY29kZV90CQlyZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIEVYVDJfRVhURU5UX1JPT1QsICZleHRlbnQpOworCWlmIChyZXR2YWwpIHsKKwkJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0VYVEVOVF9OT19ORVhUKQorCQkJcmV0dmFsID0gRVhUMl9FVF9FWFRFTlRfTk9UX0ZPVU5EOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmIChsZWFmX2xldmVsID4gaGFuZGxlLT5tYXhfZGVwdGgpIHsKKyNpZmRlZiBERUJVRworCQlwcmludGYoImxlYWYgbGV2ZWwgJWQgZ3JlYXRlciB0aGFuIHRyZWUgZGVwdGggJWRcbiIsCisJCQlsZWFmX2xldmVsLCBoYW5kbGUtPm1heF9kZXB0aCk7CisjZW5kaWYKKwkJcmV0dXJuIEVYVDJfRVRfT1BfTk9UX1NVUFBPUlRFRDsKKwl9CisKKyNpZmRlZiBERUJVRworCXByaW50ZigiZ290byBleHRlbnQgaW5vICV1LCBsZXZlbCAlZCwgJWxsdVxuIiwgaGFuZGxlLT5pbm8sCisJICAgICAgIGxlYWZfbGV2ZWwsIGJsayk7CisjZW5kaWYKKworI2lmZGVmIERFQlVHX0dPVE9fRVhURU5UUworCWRiZ19wcmludF9leHRlbnQoInJvb3QiLCAmZXh0ZW50KTsKKyNlbmRpZgorCXdoaWxlICgxKSB7CisJCWlmIChoYW5kbGUtPm1heF9kZXB0aCAtIGhhbmRsZS0+bGV2ZWwgPT0gbGVhZl9sZXZlbCkgeworCQkJLyogYmxvY2sgaXMgaW4gdGhpcyAmZXh0ZW50ICovCisJCQlpZiAoKGJsayA+PSBleHRlbnQuZV9sYmxrKSAmJgorCQkJICAgIChibGsgPCBleHRlbnQuZV9sYmxrICsgZXh0ZW50LmVfbGVuKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmIChibGsgPCBleHRlbnQuZV9sYmxrKSB7CisJCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLAorCQkJCQkJCSAgIEVYVDJfRVhURU5UX1BSRVZfU0lCLAorCQkJCQkJCSAgICZleHRlbnQpOworCQkJCXJldHVybiBFWFQyX0VUX0VYVEVOVF9OT1RfRk9VTkQ7CisJCQl9CisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsCisJCQkJCQkgICBFWFQyX0VYVEVOVF9ORVhUX1NJQiwKKwkJCQkJCSAgICZleHRlbnQpOworCQkJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0VYVEVOVF9OT19ORVhUKQorCQkJCXJldHVybiBFWFQyX0VUX0VYVEVOVF9OT1RfRk9VTkQ7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwgRVhUMl9FWFRFTlRfTkVYVF9TSUIsCisJCQkJCSAgICZleHRlbnQpOworCQlpZiAocmV0dmFsID09IEVYVDJfRVRfRVhURU5UX05PX05FWFQpCisJCQlnb3RvIGdvX2Rvd247CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCisjaWZkZWYgREVCVUdfR09UT19FWFRFTlRTCisJCWRiZ19wcmludF9leHRlbnQoIm5leHQiLCAmZXh0ZW50KTsKKyNlbmRpZgorCQlpZiAoYmxrID09IGV4dGVudC5lX2xibGspCisJCQlnb3RvIGdvX2Rvd247CisJCWlmIChibGsgPiBleHRlbnQuZV9sYmxrKQorCQkJY29udGludWU7CisKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBFWFQyX0VYVEVOVF9QUkVWX1NJQiwKKwkJCQkJICAgJmV4dGVudCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCisjaWZkZWYgREVCVUdfR09UT19FWFRFTlRTCisJCWRiZ19wcmludF9leHRlbnQoInByZXYiLCAmZXh0ZW50KTsKKyNlbmRpZgorCisJZ29fZG93bjoKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBFWFQyX0VYVEVOVF9ET1dOLAorCQkJCQkgICAmZXh0ZW50KTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisKKyNpZmRlZiBERUJVR19HT1RPX0VYVEVOVFMKKwkJZGJnX3ByaW50X2V4dGVudCgiZG93biIsICZleHRlbnQpOworI2VuZGlmCisJfQorfQorCitlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9nb3RvKGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSwKKwkJCSAgICAgYmxrNjRfdCBibGspCit7CisJcmV0dXJuIGV4dDJmc19leHRlbnRfZ290bzIoaGFuZGxlLCAwLCBibGspOworfQorCisvKgorICogVHJhdmVyc2UgYmFjayB1cCB0byByb290IGZpeGluZyBwYXJlbnRzIG9mIGN1cnJlbnQgbm9kZSBhcyBuZWVkZWQuCisgKgorICogSWYgd2UgY2hhbmdlZCBzdGFydCBvZiBmaXJzdCBlbnRyeSBpbiBhIG5vZGUsIGZpeCBwYXJlbnQgaW5kZXggc3RhcnQKKyAqIGFuZCBzbyBvbi4KKyAqCisgKiBTYWZlIHRvIGNhbGwgZm9yIGFueSBwb3NpdGlvbiBpbiBub2RlOyBpZiBub3QgYXQgdGhlIGZpcnN0IGVudHJ5LAorICogd2lsbCAgc2ltcGx5IHJldHVybi4KKyAqLworZXJyY29kZV90IGV4dDJmc19leHRlbnRfZml4X3BhcmVudHMoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlKQoreworCWludAkJCQlyZXR2YWwgPSAwOworCWludAkJCQlvcmlnX2hlaWdodDsKKwlibGs2NF90CQkJCXN0YXJ0OworCXN0cnVjdCBleHRlbnRfcGF0aAkJKnBhdGg7CisJc3RydWN0IGV4dDJmc19leHRlbnQJCWV4dGVudDsKKwlzdHJ1Y3QgZXh0Ml9leHRlbnRfaW5mbwkJaW5mbzsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoaGFuZGxlLCBFWFQyX0VUX01BR0lDX0VYVEVOVF9IQU5ETEUpOworCisJaWYgKCEoaGFuZGxlLT5mcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUlcpKQorCQlyZXR1cm4gRVhUMl9FVF9ST19GSUxTWVM7CisKKwlpZiAoIWhhbmRsZS0+cGF0aCkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fQ1VSUkVOVF9OT0RFOworCisJcGF0aCA9IGhhbmRsZS0+cGF0aCArIGhhbmRsZS0+bGV2ZWw7CisJaWYgKCFwYXRoLT5jdXJyKQorCQlyZXR1cm4gRVhUMl9FVF9OT19DVVJSRU5UX05PREU7CisKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIEVYVDJfRVhURU5UX0NVUlJFTlQsICZleHRlbnQpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZG9uZTsKKworCS8qIG1vZGlmaWVkIG5vZGUncyBzdGFydCBibG9jayAqLworCXN0YXJ0ID0gZXh0ZW50LmVfbGJsazsKKworCWlmICgocmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXRfaW5mbyhoYW5kbGUsICZpbmZvKSkpCisJCXJldHVybiByZXR2YWw7CisJb3JpZ19oZWlnaHQgPSBpbmZvLm1heF9kZXB0aCAtIGluZm8uY3Vycl9sZXZlbDsKKworCS8qIHRyYXZlcnNlIHVwIHVudGlsIGluZGV4IG5vdCBmaXJzdCwgb3Igc3RhcnRibGsgbWF0Y2hlcywgb3IgdG9wICovCisJd2hpbGUgKGhhbmRsZS0+bGV2ZWwgPiAwICYmCisJICAgICAgIChwYXRoLT5sZWZ0ID09IHBhdGgtPmVudHJpZXMgLSAxKSkgeworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIEVYVDJfRVhURU5UX1VQLCAmZXh0ZW50KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZG9uZTsKKwkJaWYgKGV4dGVudC5lX2xibGsgPT0gc3RhcnQpCisJCQlicmVhazsKKwkJcGF0aCA9IGhhbmRsZS0+cGF0aCArIGhhbmRsZS0+bGV2ZWw7CisJCWV4dGVudC5lX2xlbiArPSAoZXh0ZW50LmVfbGJsayAtIHN0YXJ0KTsKKwkJZXh0ZW50LmVfbGJsayA9IHN0YXJ0OworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X3JlcGxhY2UoaGFuZGxlLCAwLCAmZXh0ZW50KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZG9uZTsKKwkJdXBkYXRlX3BhdGgoaGFuZGxlKTsKKwl9CisKKwkvKiBwdXQgaGFuZGxlIGJhY2sgdG8gd2hlcmUgd2Ugc3RhcnRlZCAqLworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ290bzIoaGFuZGxlLCBvcmlnX2hlaWdodCwgc3RhcnQpOworZG9uZToKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9yZXBsYWNlKGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSwKKwkJCQlpbnQgZmxhZ3MgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCXN0cnVjdCBleHQyZnNfZXh0ZW50ICpleHRlbnQpCit7CisJc3RydWN0IGV4dGVudF9wYXRoCQkqcGF0aDsKKwlzdHJ1Y3QgZXh0M19leHRlbnRfaWR4CQkqaXg7CisJc3RydWN0IGV4dDNfZXh0ZW50CQkqZXg7CisKKwlFWFQyX0NIRUNLX01BR0lDKGhhbmRsZSwgRVhUMl9FVF9NQUdJQ19FWFRFTlRfSEFORExFKTsKKworCWlmICghKGhhbmRsZS0+ZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSkKKwkJcmV0dXJuIEVYVDJfRVRfUk9fRklMU1lTOworCisJaWYgKCFoYW5kbGUtPnBhdGgpCisJCXJldHVybiBFWFQyX0VUX05PX0NVUlJFTlRfTk9ERTsKKworCXBhdGggPSBoYW5kbGUtPnBhdGggKyBoYW5kbGUtPmxldmVsOworCWlmICghcGF0aC0+Y3VycikKKwkJcmV0dXJuIEVYVDJfRVRfTk9fQ1VSUkVOVF9OT0RFOworCisjaWZkZWYgREVCVUcKKwlwcmludGYoImV4dGVudCByZXBsYWNlOiAldSAiLCBoYW5kbGUtPmlubyk7CisJZGJnX3ByaW50X2V4dGVudCgwLCBleHRlbnQpOworI2VuZGlmCisKKwlpZiAoaGFuZGxlLT5sZXZlbCA9PSBoYW5kbGUtPm1heF9kZXB0aCkgeworCQlleCA9IHBhdGgtPmN1cnI7CisKKwkJZXgtPmVlX2Jsb2NrID0gZXh0MmZzX2NwdV90b19sZTMyKGV4dGVudC0+ZV9sYmxrKTsKKwkJZXgtPmVlX3N0YXJ0ID0gZXh0MmZzX2NwdV90b19sZTMyKGV4dGVudC0+ZV9wYmxrICYgMHhGRkZGRkZGRik7CisJCWV4LT5lZV9zdGFydF9oaSA9IGV4dDJmc19jcHVfdG9fbGUxNihleHRlbnQtPmVfcGJsayA+PiAzMik7CisJCWlmIChleHRlbnQtPmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19VTklOSVQpIHsKKwkJCWlmIChleHRlbnQtPmVfbGVuID4gRVhUX1VOSU5JVF9NQVhfTEVOKQorCQkJCXJldHVybiBFWFQyX0VUX0VYVEVOVF9JTlZBTElEX0xFTkdUSDsKKwkJCWV4LT5lZV9sZW4gPSBleHQyZnNfY3B1X3RvX2xlMTYoZXh0ZW50LT5lX2xlbiArCisJCQkJCQkJRVhUX0lOSVRfTUFYX0xFTik7CisJCX0gZWxzZSB7CisJCQlpZiAoZXh0ZW50LT5lX2xlbiA+IEVYVF9JTklUX01BWF9MRU4pCisJCQkJcmV0dXJuIEVYVDJfRVRfRVhURU5UX0lOVkFMSURfTEVOR1RIOworCQkJZXgtPmVlX2xlbiA9IGV4dDJmc19jcHVfdG9fbGUxNihleHRlbnQtPmVfbGVuKTsKKwkJfQorCX0gZWxzZSB7CisJCWl4ID0gcGF0aC0+Y3VycjsKKworCQlpeC0+ZWlfbGVhZiA9IGV4dDJmc19jcHVfdG9fbGUzMihleHRlbnQtPmVfcGJsayAmIDB4RkZGRkZGRkYpOworCQlpeC0+ZWlfbGVhZl9oaSA9IGV4dDJmc19jcHVfdG9fbGUxNihleHRlbnQtPmVfcGJsayA+PiAzMik7CisJCWl4LT5laV9ibG9jayA9IGV4dDJmc19jcHVfdG9fbGUzMihleHRlbnQtPmVfbGJsayk7CisJCWl4LT5laV91bnVzZWQgPSAwOworCX0KKwl1cGRhdGVfcGF0aChoYW5kbGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNwbGl0dGluZ19hdF9lb2Yoc3RydWN0IGV4dDJfZXh0ZW50X2hhbmRsZSAqaGFuZGxlLAorCQkJICAgIHN0cnVjdCBleHRlbnRfcGF0aCAqcGF0aCkKK3sKKwlzdHJ1Y3QgZXh0ZW50X3BhdGggKnBwcCA9IHBhdGg7CisJZHVtcF9wYXRoKF9fZnVuY19fLCBoYW5kbGUsIHBhdGgpOworCisJaWYgKGhhbmRsZS0+bGV2ZWwgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlkbyB7CisJCWlmIChwcHAtPmxlZnQpCisJCQlyZXR1cm4gMDsKKwkJcHBwLS07CisJfSB3aGlsZSAocHBwID49IGhhbmRsZS0+cGF0aCk7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIGFsbG9jYXRlIGEgbmV3IGJsb2NrLCBtb3ZlIGhhbGYgdGhlIGN1cnJlbnQgbm9kZSB0byBpdCwgYW5kIHVwZGF0ZSBwYXJlbnQKKyAqCisgKiBoYW5kbGUgd2lsbCBiZSBsZWZ0IHBvaW50aW5nIGF0IG9yaWdpbmFsIHJlY29yZC4KKyAqLworc3RhdGljIGVycmNvZGVfdCBleHRlbnRfbm9kZV9zcGxpdChleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUsCisJCQkJICAgaW50IGV4cGFuZF9hbGxvd2VkKQoreworCWVycmNvZGVfdAkJCXJldHZhbCA9IDA7CisJYmxrNjRfdAkJCQluZXdfbm9kZV9wYmxrOworCWJsazY0X3QJCQkJbmV3X25vZGVfc3RhcnQ7CisJYmxrNjRfdAkJCQlvcmlnX2xibGs7CisJYmxrNjRfdAkJCQlnb2FsX2JsayA9IDA7CisJaW50CQkJCW9yaWdfaGVpZ2h0OworCWNoYXIJCQkJKmJsb2NrX2J1ZiA9IE5VTEw7CisJc3RydWN0IGV4dDJmc19leHRlbnQJCWV4dGVudDsKKwlzdHJ1Y3QgZXh0ZW50X3BhdGgJCSpwYXRoLCAqbmV3cGF0aCA9IDA7CisJc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlcgkqZWgsICpuZXdlaDsKKwlpbnQJCQkJdG9jb3B5OworCWludAkJCQluZXdfcm9vdCA9IDA7CisJc3RydWN0IGV4dDJfZXh0ZW50X2luZm8JCWluZm87CisJaW50CQkJCW5vX2JhbGFuY2U7CisKKwkvKiBiYXNpYyBzYW5pdHkgKi8KKwlFWFQyX0NIRUNLX01BR0lDKGhhbmRsZSwgRVhUMl9FVF9NQUdJQ19FWFRFTlRfSEFORExFKTsKKworCWlmICghKGhhbmRsZS0+ZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSkKKwkJcmV0dXJuIEVYVDJfRVRfUk9fRklMU1lTOworCisJaWYgKCFoYW5kbGUtPnBhdGgpCisJCXJldHVybiBFWFQyX0VUX05PX0NVUlJFTlRfTk9ERTsKKworI2lmZGVmIERFQlVHCisJcHJpbnRmKCJzcGxpdHRpbmcgbm9kZSBhdCBsZXZlbCAlZFxuIiwgaGFuZGxlLT5sZXZlbCk7CisjZW5kaWYKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIEVYVDJfRVhURU5UX0NVUlJFTlQsICZleHRlbnQpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZG9uZTsKKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0X2luZm8oaGFuZGxlLCAmaW5mbyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBkb25lOworCisJLyogc2F2ZSB0aGUgcG9zaXRpb24gd2Ugd2VyZSBvcmlnaW5hbGx5IHNwbGl0dGluZy4uLiAqLworCW9yaWdfaGVpZ2h0ID0gaW5mby5tYXhfZGVwdGggLSBpbmZvLmN1cnJfbGV2ZWw7CisJb3JpZ19sYmxrID0gZXh0ZW50LmVfbGJsazsKKworCS8qIElzIHRoZXJlIHJvb20gaW4gdGhlIHBhcmVudCBmb3IgYSBuZXcgZW50cnk/ICovCisJaWYgKGhhbmRsZS0+bGV2ZWwgJiYKKwkJCShoYW5kbGUtPnBhdGhbaGFuZGxlLT5sZXZlbCAtIDFdLmVudHJpZXMgPj0KKwkJCSBoYW5kbGUtPnBhdGhbaGFuZGxlLT5sZXZlbCAtIDFdLm1heF9lbnRyaWVzKSkgeworCisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCJwYXJlbnQgbGV2ZWwgJWQgZnVsbDsgc3BsaXR0aW5nIGl0IHRvb1xuIiwKKwkJCQkJCQloYW5kbGUtPmxldmVsIC0gMSk7CisjZW5kaWYKKwkJLyogc3BsaXQgdGhlIHBhcmVudCAqLworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIEVYVDJfRVhURU5UX1VQLCAmZXh0ZW50KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZG9uZTsKKwkJZ29hbF9ibGsgPSBleHRlbnQuZV9wYmxrOworCisJCXJldHZhbCA9IGV4dGVudF9ub2RlX3NwbGl0KGhhbmRsZSwgZXhwYW5kX2FsbG93ZWQpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBkb25lOworCisJCS8qIGdldCBoYW5kbGUgYmFjayB0byBvdXIgb3JpZ2luYWwgc3BsaXQgcG9zaXRpb24gKi8KKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nb3RvMihoYW5kbGUsIG9yaWdfaGVpZ2h0LCBvcmlnX2xibGspOworCQlpZiAocmV0dmFsKQorCQkJZ290byBkb25lOworCX0KKworCS8qIEF0IHRoaXMgcG9pbnQsIHBhcmVudCBzaG91bGQgaGF2ZSByb29tIGZvciB0aGlzIHNwbGl0ICovCisJcGF0aCA9IGhhbmRsZS0+cGF0aCArIGhhbmRsZS0+bGV2ZWw7CisJaWYgKCFwYXRoLT5jdXJyKQorCQlyZXR1cm4gRVhUMl9FVF9OT19DVVJSRU5UX05PREU7CisKKwkvKgorCSAqIE5vcm1hbGx5LCB3ZSB0cnkgdG8gc3BsaXQgYSBmdWxsIG5vZGUgaW4gaGFsZi4gIFRoaXMgZG9lc24ndCB0dXJuCisJICogb3V0IHNvIHdlbGwgaWYgd2UncmUgdGFja2luZyBleHRlbnRzIG9uIHRoZSBlbmQgb2YgdGhlIGZpbGUgYmVjYXVzZQorCSAqIHRoZW4gd2UncmUgc3R1Y2sgd2l0aCBhIHRyZWUgb2YgaGFsZi1mdWxsIGV4dGVudCBibG9ja3MuICBUaGlzIG9mCisJICogY291cnNlIGRvZXNuJ3QgYXBwbHkgdG8gdGhlIHJvb3QgbGV2ZWwuCisJICovCisJbm9fYmFsYW5jZSA9IGV4cGFuZF9hbGxvd2VkID8gc3BsaXR0aW5nX2F0X2VvZihoYW5kbGUsIHBhdGgpIDogMDsKKworCS8qIGV4dGVudCBoZWFkZXIgb2YgdGhlIGN1cnJlbnQgbm9kZSB3ZSdsbCBzcGxpdCAqLworCWVoID0gKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKilwYXRoLT5idWY7CisKKwkvKiBzcGxpdHRpbmcgcm9vdCBsZXZlbCBtZWFucyBtb3ZpbmcgdGhlbSBhbGwgb3V0ICovCisJaWYgKGhhbmRsZS0+bGV2ZWwgPT0gMCkgeworCQluZXdfcm9vdCA9IDE7CisJCXRvY29weSA9IGV4dDJmc19sZTE2X3RvX2NwdShlaC0+ZWhfZW50cmllcyk7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKCgoaGFuZGxlLT5tYXhfZGVwdGgrMikgKgorCQkJCQkgc2l6ZW9mKHN0cnVjdCBleHRlbnRfcGF0aCkpLAorCQkJCQkmbmV3cGF0aCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGRvbmU7CisJCW1lbXNldChuZXdwYXRoLCAwLAorCQkgICAgICAgKChoYW5kbGUtPm1heF9kZXB0aCsyKSAqIHNpemVvZihzdHJ1Y3QgZXh0ZW50X3BhdGgpKSk7CisJfSBlbHNlIHsKKwkJaWYgKG5vX2JhbGFuY2UpCisJCQl0b2NvcHkgPSAxOworCQllbHNlCisJCQl0b2NvcHkgPSBleHQyZnNfbGUxNl90b19jcHUoZWgtPmVoX2VudHJpZXMpIC8gMjsKKwl9CisKKyNpZmRlZiBERUJVRworCXByaW50Zigid2lsbCBjb3B5IG91dCAlZCBvZiAlZCBlbnRyaWVzIGF0IGxldmVsICVkXG4iLAorCQkJCXRvY29weSwgZXh0MmZzX2xlMTZfdG9fY3B1KGVoLT5laF9lbnRyaWVzKSwKKwkJCQloYW5kbGUtPmxldmVsKTsKKyNlbmRpZgorCisJaWYgKCF0b2NvcHkgJiYgIW5vX2JhbGFuY2UpIHsKKyNpZmRlZiBERUJVRworCQlwcmludGYoIk5vdGhpbmcgdG8gY29weSB0byBuZXcgYmxvY2shXG4iKTsKKyNlbmRpZgorCQlyZXR2YWwgPSBFWFQyX0VUX0NBTlRfU1BMSVRfRVhURU5UOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogZmlyc3Qgd2UgbmVlZCBhIG5ldyBibG9jaywgb3IgY2FuIGRvIG5vdGhpbmcuICovCisJYmxvY2tfYnVmID0gbWFsbG9jKGhhbmRsZS0+ZnMtPmJsb2Nrc2l6ZSk7CisJaWYgKCFibG9ja19idWYpIHsKKwkJcmV0dmFsID0gRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCFnb2FsX2JsaykgeworCQlkZ3JwX3QJZ3JvdXAgPSBleHQyZnNfZ3JvdXBfb2ZfaW5vKGhhbmRsZS0+ZnMsIGhhbmRsZS0+aW5vKTsKKwkJX191OAlsb2dfZmxleCA9IGhhbmRsZS0+ZnMtPnN1cGVyLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXg7CisKKwkJaWYgKGxvZ19mbGV4KQorCQkJZ3JvdXAgPSBncm91cCAmIH4oKDEgPDwgKGxvZ19mbGV4KSkgLSAxKTsKKwkJZ29hbF9ibGsgPSBleHQyZnNfZ3JvdXBfZmlyc3RfYmxvY2syKGhhbmRsZS0+ZnMsIGdyb3VwKTsKKwl9CisJcmV0dmFsID0gZXh0MmZzX2FsbG9jX2Jsb2NrMihoYW5kbGUtPmZzLCBnb2FsX2JsaywgYmxvY2tfYnVmLAorCQkJCSAgICAmbmV3X25vZGVfcGJsayk7CisJaWYgKHJldHZhbCkKKwkJZ290byBkb25lOworCisjaWZkZWYgREVCVUcKKwlwcmludGYoIndpbGwgY29weSB0byBuZXcgbm9kZSBhdCBibG9jayAlbHVcbiIsCisJICAgICAgICh1bnNpZ25lZCBsb25nKSBuZXdfbm9kZV9wYmxrKTsKKyNlbmRpZgorCisJLyogQ29weSBkYXRhIGludG8gbmV3IGJsb2NrIGJ1ZmZlciAqLworCS8qIEZpcnN0IHRoZSBoZWFkZXIgZm9yIHRoZSBuZXcgYmxvY2suLi4gKi8KKwluZXdlaCA9IChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopIGJsb2NrX2J1ZjsKKwltZW1jcHkobmV3ZWgsIGVoLCBzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlcikpOworCW5ld2VoLT5laF9lbnRyaWVzID0gZXh0MmZzX2NwdV90b19sZTE2KHRvY29weSk7CisJbmV3ZWgtPmVoX21heCA9IGV4dDJmc19jcHVfdG9fbGUxNigoaGFuZGxlLT5mcy0+YmxvY2tzaXplIC0KKwkJCSBzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlcikpIC8KKwkJCQlzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50KSk7CisKKwkvKiB0aGVuIHRoZSBlbnRyaWVzIGZvciB0aGUgbmV3IGJsb2NrLi4uICovCisJbWVtY3B5KEVYVF9GSVJTVF9JTkRFWChuZXdlaCksCisJCUVYVF9GSVJTVF9JTkRFWChlaCkgKworCQkJKGV4dDJmc19sZTE2X3RvX2NwdShlaC0+ZWhfZW50cmllcykgLSB0b2NvcHkpLAorCQlzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50X2lkeCkgKiB0b2NvcHkpOworCisJbmV3X25vZGVfc3RhcnQgPSBleHQyZnNfbGUzMl90b19jcHUoRVhUX0ZJUlNUX0lOREVYKG5ld2VoKS0+ZWlfYmxvY2spOworCisJLyogLi4uYW5kIHdyaXRlIHRoZSBuZXcgbm9kZSBibG9jayBvdXQgdG8gZGlzay4gKi8KKwlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGhhbmRsZS0+ZnMtPmlvLCBuZXdfbm9kZV9wYmxrLCAxLAorCQkJCQlibG9ja19idWYpOworCisJaWYgKHJldHZhbCkKKwkJZ290byBkb25lOworCisJLyogT0shIHdlJ3ZlIGNyZWF0ZWQgdGhlIG5ldyBub2RlOyBub3cgYWRqdXN0IHRoZSB0cmVlICovCisKKwkvKiBjdXJyZW50IHBhdGggbm93IGhhcyBmZXdlciBhY3RpdmUgZW50cmllcywgd2UgY29waWVkIHNvbWUgb3V0ICovCisJaWYgKGhhbmRsZS0+bGV2ZWwgPT0gMCkgeworCQltZW1jcHkobmV3cGF0aCwgcGF0aCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXh0ZW50X3BhdGgpICogKGhhbmRsZS0+bWF4X2RlcHRoKzEpKTsKKwkJaGFuZGxlLT5wYXRoID0gbmV3cGF0aDsKKwkJbmV3cGF0aCA9IHBhdGg7CisJCXBhdGggPSBoYW5kbGUtPnBhdGg7CisJCXBhdGgtPmVudHJpZXMgPSAxOworCQlwYXRoLT5sZWZ0ID0gcGF0aC0+bWF4X2VudHJpZXMgLSAxOworCQloYW5kbGUtPm1heF9kZXB0aCsrOworCQllaC0+ZWhfZGVwdGggPSBleHQyZnNfY3B1X3RvX2xlMTYoaGFuZGxlLT5tYXhfZGVwdGgpOworCX0gZWxzZSB7CisJCXBhdGgtPmVudHJpZXMgLT0gdG9jb3B5OworCQlwYXRoLT5sZWZ0IC09IHRvY29weTsKKwl9CisKKwllaC0+ZWhfZW50cmllcyA9IGV4dDJmc19jcHVfdG9fbGUxNihwYXRoLT5lbnRyaWVzKTsKKwkvKiB0aGlzIHdyaXRlcyBvdXQgdGhlIG5vZGUsIGluY2wuIHRoZSBtb2RpZmllZCBoZWFkZXIgKi8KKwlyZXR2YWwgPSB1cGRhdGVfcGF0aChoYW5kbGUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZG9uZTsKKworCS8qIG5vdyBnbyB1cCBhbmQgaW5zZXJ0L3JlcGxhY2UgaW5kZXggZm9yIG5ldyBub2RlIHdlIGNyZWF0ZWQgKi8KKwlpZiAobmV3X3Jvb3QpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBFWFQyX0VYVEVOVF9GSVJTVF9TSUIsICZleHRlbnQpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBkb25lOworCisJCWV4dGVudC5lX2xibGsgPSBuZXdfbm9kZV9zdGFydDsKKwkJZXh0ZW50LmVfcGJsayA9IG5ld19ub2RlX3BibGs7CisJCWV4dGVudC5lX2xlbiA9IGhhbmRsZS0+cGF0aFswXS5lbmRfYmxrIC0gZXh0ZW50LmVfbGJsazsKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9yZXBsYWNlKGhhbmRsZSwgMCwgJmV4dGVudCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGRvbmU7CisJfSBlbHNlIHsKKwkJX191MzIgbmV3X25vZGVfbGVuZ3RoOworCisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwgRVhUMl9FWFRFTlRfVVAsICZleHRlbnQpOworCQkvKiB3aWxsIGluc2VydCBhZnRlciB0aGlzIG9uZTsgaXQncyBsZW5ndGggaXMgc2hvcnRlciBub3cgKi8KKwkJbmV3X25vZGVfbGVuZ3RoID0gbmV3X25vZGVfc3RhcnQgLSBleHRlbnQuZV9sYmxrOworCQlleHRlbnQuZV9sZW4gLT0gbmV3X25vZGVfbGVuZ3RoOworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X3JlcGxhY2UoaGFuZGxlLCAwLCAmZXh0ZW50KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZG9uZTsKKworCQkvKiBub3cgc2V0IHVwIHRoZSBuZXcgZXh0ZW50IGFuZCBpbnNlcnQgaXQgKi8KKwkJZXh0ZW50LmVfbGJsayA9IG5ld19ub2RlX3N0YXJ0OworCQlleHRlbnQuZV9wYmxrID0gbmV3X25vZGVfcGJsazsKKwkJZXh0ZW50LmVfbGVuID0gbmV3X25vZGVfbGVuZ3RoOworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2luc2VydChoYW5kbGUsIEVYVDJfRVhURU5UX0lOU0VSVF9BRlRFUiwgJmV4dGVudCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGRvbmU7CisJfQorCisJLyogZ2V0IGhhbmRsZSBiYWNrIHRvIG91ciBvcmlnaW5hbCBwb3NpdGlvbiAqLworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ290bzIoaGFuZGxlLCBvcmlnX2hlaWdodCwgb3JpZ19sYmxrKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGRvbmU7CisKKwkvKiBuZXcgbm9kZSBob29rZWQgaW4sIHNvIHVwZGF0ZSBpbm9kZSBibG9jayBjb3VudCAoZG8gdGhpcyBoZXJlPykgKi8KKwlleHQyZnNfaWJsa19hZGRfYmxvY2tzKGhhbmRsZS0+ZnMsIGhhbmRsZS0+aW5vZGUsIDEpOworCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZShoYW5kbGUtPmZzLCBoYW5kbGUtPmlubywKKwkJCQkgICAgaGFuZGxlLT5pbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBkb25lOworCitkb25lOgorCWlmIChuZXdwYXRoKQorCQlleHQyZnNfZnJlZV9tZW0oJm5ld3BhdGgpOworCWZyZWUoYmxvY2tfYnVmKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZXh0ZW50X25vZGVfc3BsaXQoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlKQoreworCXJldHVybiBleHRlbnRfbm9kZV9zcGxpdChoYW5kbGUsIDApOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9pbnNlcnQoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlLCBpbnQgZmxhZ3MsCisJCQkJICAgICAgc3RydWN0IGV4dDJmc19leHRlbnQgKmV4dGVudCkKK3sKKwlzdHJ1Y3QgZXh0ZW50X3BhdGgJCSpwYXRoOworCXN0cnVjdCBleHQzX2V4dGVudF9pZHgJCSppeDsKKwlzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyCSplaDsKKwllcnJjb2RlX3QJCQlyZXR2YWw7CisKKwlFWFQyX0NIRUNLX01BR0lDKGhhbmRsZSwgRVhUMl9FVF9NQUdJQ19FWFRFTlRfSEFORExFKTsKKworCWlmICghKGhhbmRsZS0+ZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSkKKwkJcmV0dXJuIEVYVDJfRVRfUk9fRklMU1lTOworCisJaWYgKCFoYW5kbGUtPnBhdGgpCisJCXJldHVybiBFWFQyX0VUX05PX0NVUlJFTlRfTk9ERTsKKworI2lmZGVmIERFQlVHCisJcHJpbnRmKCJleHRlbnQgaW5zZXJ0OiAldSAiLCBoYW5kbGUtPmlubyk7CisJZGJnX3ByaW50X2V4dGVudCgwLCBleHRlbnQpOworI2VuZGlmCisKKwlwYXRoID0gaGFuZGxlLT5wYXRoICsgaGFuZGxlLT5sZXZlbDsKKworCWlmIChwYXRoLT5lbnRyaWVzID49IHBhdGgtPm1heF9lbnRyaWVzKSB7CisJCWlmIChmbGFncyAmIEVYVDJfRVhURU5UX0lOU0VSVF9OT1NQTElUKSB7CisJCQlyZXR1cm4gRVhUMl9FVF9DQU5UX0lOU0VSVF9FWFRFTlQ7CisJCX0gZWxzZSB7CisjaWZkZWYgREVCVUcKKwkJCXByaW50Zigibm9kZSBmdWxsIChsZXZlbCAlZCkgLSBzcGxpdHRpbmdcbiIsCisJCQkJICAgaGFuZGxlLT5sZXZlbCk7CisjZW5kaWYKKwkJCXJldHZhbCA9IGV4dGVudF9ub2RlX3NwbGl0KGhhbmRsZSwgMSk7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCQlwYXRoID0gaGFuZGxlLT5wYXRoICsgaGFuZGxlLT5sZXZlbDsKKwkJfQorCX0KKworCWVoID0gKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKikgcGF0aC0+YnVmOworCWlmIChwYXRoLT5jdXJyKSB7CisJCWl4ID0gcGF0aC0+Y3VycjsKKwkJaWYgKGZsYWdzICYgRVhUMl9FWFRFTlRfSU5TRVJUX0FGVEVSKSB7CisJCQlpeCsrOworCQkJcGF0aC0+bGVmdC0tOworCQl9CisJfSBlbHNlIHsKKwkJaXggPSBFWFRfRklSU1RfSU5ERVgoZWgpOworCQlwYXRoLT5sZWZ0ID0gLTE7CisJfQorCisJcGF0aC0+Y3VyciA9IGl4OworCisJaWYgKHBhdGgtPmxlZnQgPj0gMCkKKwkJbWVtbW92ZShpeCArIDEsIGl4LAorCQkJKHBhdGgtPmxlZnQrMSkgKiBzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50X2lkeCkpOworCXBhdGgtPmxlZnQrKzsKKwlwYXRoLT5lbnRyaWVzKys7CisKKwllaCA9IChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopIHBhdGgtPmJ1ZjsKKwllaC0+ZWhfZW50cmllcyA9IGV4dDJmc19jcHVfdG9fbGUxNihwYXRoLT5lbnRyaWVzKTsKKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfcmVwbGFjZShoYW5kbGUsIDAsIGV4dGVudCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlyZXR2YWwgPSB1cGRhdGVfcGF0aChoYW5kbGUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCisJcmV0dXJuIDA7CisKK2Vycm91dDoKKwlleHQyZnNfZXh0ZW50X2RlbGV0ZShoYW5kbGUsIDApOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBTZXRzIHRoZSBwaHlzaWNhbCBibG9jayBmb3IgYSBsb2dpY2FsIGZpbGUgYmxvY2sgaW4gdGhlIGV4dGVudCB0cmVlLgorICoKKyAqIE1heTogbWFwIHVubWFwcGVkLCB1bm1hcCBtYXBwZWQsIG9yIHJlbWFwIG1hcHBlZCBibG9ja3MuCisgKgorICogTWFwcGluZyBhbiB1bm1hcHBlZCBibG9jayBhZGRzIGEgc2luZ2xlLWJsb2NrIGV4dGVudC4KKyAqCisgKiBVbm1hcHBpbmcgZmlyc3Qgb3IgbGFzdCBibG9jayBtb2RpZmllcyBleHRlbnQgaW4tcGxhY2UKKyAqICAtIEJ1dCBtYXkgbmVlZCB0byBmaXggcGFyZW50J3Mgc3RhcnRzIHRvbyBpbiBmaXJzdC1ibG9jayBjYXNlCisgKgorICogTWFwcGluZyBhbnkgdW5tYXBwZWQgYmxvY2sgcmVxdWlyZXMgYWRkaW5nIGEgKHNpbmdsZS1ibG9jaykgZXh0ZW50CisgKiBhbmQgaW5zZXJ0aW5nIGludG8gcHJvcGVyIHBvaW50IGluIHRyZWUuCisgKgorICogTW9kaWZ5aW5nICh1bm1hcHBpbmcgb3IgcmVtYXBwaW5nKSBhIGJsb2NrIGluIHRoZSBtaWRkbGUKKyAqIG9mIGFuIGV4dGVudCByZXF1aXJlcyBzcGxpdHRpbmcgdGhlIGV4dGVudC4KKyAqICAtIFJlbWFwcGluZyBjYXNlIHJlcXVpcmVzIG5ldyBzaW5nbGUtYmxvY2sgZXh0ZW50LgorICoKKyAqIFJlbWFwcGluZyBmaXJzdCBvciBsYXN0IGJsb2NrIGFkZHMgYW4gZXh0ZW50LgorICoKKyAqIFdlIHJlYWxseSBuZWVkIGV4dGVudCBhZGRpbmcgdG8gYmUgc21hcnQgYWJvdXQgbWVyZ2luZy4KKyAqLworCitlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9zZXRfYm1hcChleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUsCisJCQkJIGJsazY0X3QgbG9naWNhbCwgYmxrNjRfdCBwaHlzaWNhbCwgaW50IGZsYWdzKQoreworCWVycmNvZGVfdAkJZWMsIHJldHZhbCA9IDA7CisJaW50CQkJbWFwcGVkID0gMTsgLyogbG9naWNhbCBpcyBtYXBwZWQ/ICovCisJaW50CQkJb3JpZ19oZWlnaHQ7CisJaW50CQkJZXh0ZW50X3VuaW5pdCA9IDA7CisJaW50CQkJcHJldl91bmluaXQgPSAwOworCWludAkJCW5leHRfdW5pbml0ID0gMDsKKwlpbnQJCQluZXdfdW5pbml0ID0gMDsKKwlpbnQJCQltYXhfbGVuID0gRVhUX0lOSVRfTUFYX0xFTjsKKwlpbnQJCQloYXNfcHJldiwgaGFzX25leHQ7CisJYmxrNjRfdAkJCW9yaWdfbGJsazsKKwlzdHJ1Y3QgZXh0ZW50X3BhdGgJKnBhdGg7CisJc3RydWN0IGV4dDJmc19leHRlbnQJZXh0ZW50LCBuZXh0X2V4dGVudCwgcHJldl9leHRlbnQ7CisJc3RydWN0IGV4dDJmc19leHRlbnQJbmV3ZXh0ZW50OworCXN0cnVjdCBleHQyX2V4dGVudF9pbmZvCWluZm87CisKKwlFWFQyX0NIRUNLX01BR0lDKGhhbmRsZSwgRVhUMl9FVF9NQUdJQ19FWFRFTlRfSEFORExFKTsKKworI2lmZGVmIERFQlVHCisJcHJpbnRmKCJzZXRfYm1hcCBpbm8gJXUgbG9nICVsbGQgcGh5cyAlbGxkIGZsYWdzICVkXG4iLAorCSAgICAgICBoYW5kbGUtPmlubywgbG9naWNhbCwgcGh5c2ljYWwsIGZsYWdzKTsKKyNlbmRpZgorCisJaWYgKCEoaGFuZGxlLT5mcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUlcpKQorCQlyZXR1cm4gRVhUMl9FVF9ST19GSUxTWVM7CisKKwlpZiAoIWhhbmRsZS0+cGF0aCkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fQ1VSUkVOVF9OT0RFOworCisJcGF0aCA9IGhhbmRsZS0+cGF0aCArIGhhbmRsZS0+bGV2ZWw7CisKKwlpZiAoZmxhZ3MgJiBFWFQyX0VYVEVOVF9TRVRfQk1BUF9VTklOSVQpIHsKKwkJbmV3X3VuaW5pdCA9IDE7CisJCW1heF9sZW4gPSBFWFRfVU5JTklUX01BWF9MRU47CisJfQorCisJLyogaWYgKHJlKW1hcHBpbmcsIHNldCB1cCBuZXcgZXh0ZW50IHRvIGluc2VydCAqLworCWlmIChwaHlzaWNhbCkgeworCQluZXdleHRlbnQuZV9sZW4gPSAxOworCQluZXdleHRlbnQuZV9wYmxrID0gcGh5c2ljYWw7CisJCW5ld2V4dGVudC5lX2xibGsgPSBsb2dpY2FsOworCQluZXdleHRlbnQuZV9mbGFncyA9IEVYVDJfRVhURU5UX0ZMQUdTX0xFQUY7CisJCWlmIChuZXdfdW5pbml0KQorCQkJbmV3ZXh0ZW50LmVfZmxhZ3MgfD0gRVhUMl9FWFRFTlRfRkxBR1NfVU5JTklUOworCX0KKworCS8qIHNwZWNpYWwgY2FzZSBpZiB0aGUgZXh0ZW50IHRyZWUgaXMgY29tcGxldGVseSBlbXB0eSAqLworCWlmICgoaGFuZGxlLT5tYXhfZGVwdGggPT0gMCkgJiYgKHBhdGgtPmVudHJpZXMgPT0gMCkpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9pbnNlcnQoaGFuZGxlLCAwLCAmbmV3ZXh0ZW50KTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKiBzYXZlIG91ciBvcmlnaW5hbCBsb2NhdGlvbiBpbiB0aGUgZXh0ZW50IHRyZWUgKi8KKwlpZiAoKHJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwgRVhUMl9FWFRFTlRfQ1VSUkVOVCwKKwkJCQkJJmV4dGVudCkpKSB7CisJCWlmIChyZXR2YWwgIT0gRVhUMl9FVF9OT19DVVJSRU5UX05PREUpCisJCQlyZXR1cm4gcmV0dmFsOworCQltZW1zZXQoJmV4dGVudCwgMCwgc2l6ZW9mKGV4dGVudCkpOworCX0KKwlpZiAoKHJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0X2luZm8oaGFuZGxlLCAmaW5mbykpKQorCQlyZXR1cm4gcmV0dmFsOworCW9yaWdfaGVpZ2h0ID0gaW5mby5tYXhfZGVwdGggLSBpbmZvLmN1cnJfbGV2ZWw7CisJb3JpZ19sYmxrID0gZXh0ZW50LmVfbGJsazsKKworCS8qIGdvIHRvIHRoZSBsb2dpY2FsIHNwb3Qgd2Ugd2FudCB0byAocmUvdW4pbWFwICovCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nb3RvKGhhbmRsZSwgbG9naWNhbCk7CisJaWYgKHJldHZhbCkgeworCQlpZiAocmV0dmFsID09IEVYVDJfRVRfRVhURU5UX05PVF9GT1VORCkgeworCQkJcmV0dmFsID0gMDsKKwkJCW1hcHBlZCA9IDA7CisJCQlpZiAoIXBoeXNpY2FsKSB7CisjaWZkZWYgREVCVUcKKwkJCQlwcmludGYoImJsb2NrICVsbHUgYWxyZWFkeSB1bm1hcHBlZFxuIiwKKwkJCQkJbG9naWNhbCk7CisjZW5kaWYKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCX0gZWxzZQorCQkJZ290byBkb25lOworCX0KKworCS8qCisJICogVGhpcyBtYXkgYmUgdGhlIGV4dGVudCAqYmVmb3JlKiB0aGUgcmVxdWVzdGVkIGxvZ2ljYWwsCisJICogaWYgaXQncyBjdXJyZW50bHkgdW5tYXBwZWQuCisJICoKKwkgKiBHZXQgdGhlIHByZXZpb3VzIGFuZCBuZXh0IGxlYWYgZXh0ZW50cywgaWYgdGhleSBhcmUgcHJlc2VudC4KKwkgKi8KKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIEVYVDJfRVhURU5UX0NVUlJFTlQsICZleHRlbnQpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZG9uZTsKKwlpZiAoZXh0ZW50LmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19VTklOSVQpCisJCWV4dGVudF91bmluaXQgPSAxOworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwgRVhUMl9FWFRFTlRfTkVYVF9MRUFGLCAmbmV4dF9leHRlbnQpOworCWlmIChyZXR2YWwpIHsKKwkJaGFzX25leHQgPSAwOworCQlpZiAocmV0dmFsICE9IEVYVDJfRVRfRVhURU5UX05PX05FWFQpCisJCQlnb3RvIGRvbmU7CisJfSBlbHNlIHsKKwkJZGJnX3ByaW50X2V4dGVudCgic2V0X2JtYXA6IG5leHRfZXh0ZW50IiwKKwkJCQkgJm5leHRfZXh0ZW50KTsKKwkJaGFzX25leHQgPSAxOworCQlpZiAobmV4dF9leHRlbnQuZV9mbGFncyAmIEVYVDJfRVhURU5UX0ZMQUdTX1VOSU5JVCkKKwkJCW5leHRfdW5pbml0ID0gMTsKKwl9CisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nb3RvKGhhbmRsZSwgbG9naWNhbCk7CisJaWYgKHJldHZhbCAmJiByZXR2YWwgIT0gRVhUMl9FVF9FWFRFTlRfTk9UX0ZPVU5EKQorCQlnb3RvIGRvbmU7CisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBFWFQyX0VYVEVOVF9QUkVWX0xFQUYsICZwcmV2X2V4dGVudCk7CisJaWYgKHJldHZhbCkgeworCQloYXNfcHJldiA9IDA7CisJCWlmIChyZXR2YWwgIT0gRVhUMl9FVF9FWFRFTlRfTk9fUFJFVikKKwkJCWdvdG8gZG9uZTsKKwl9IGVsc2UgeworCQloYXNfcHJldiA9IDE7CisJCWRiZ19wcmludF9leHRlbnQoInNldF9ibWFwOiBwcmV2X2V4dGVudCIsCisJCQkJICZwcmV2X2V4dGVudCk7CisJCWlmIChwcmV2X2V4dGVudC5lX2ZsYWdzICYgRVhUMl9FWFRFTlRfRkxBR1NfVU5JTklUKQorCQkJcHJldl91bmluaXQgPSAxOworCX0KKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dvdG8oaGFuZGxlLCBsb2dpY2FsKTsKKwlpZiAocmV0dmFsICYmIHJldHZhbCAhPSBFWFQyX0VUX0VYVEVOVF9OT1RfRk9VTkQpCisJCWdvdG8gZG9uZTsKKworCS8qIGNoZWNrIGlmIGFscmVhZHkgcG9pbnRpbmcgdG8gdGhlIHJlcXVlc3RlZCBwaHlzaWNhbCAqLworCWlmIChtYXBwZWQgJiYgKG5ld191bmluaXQgPT0gZXh0ZW50X3VuaW5pdCkgJiYKKwkgICAgKGV4dGVudC5lX3BibGsgKyAobG9naWNhbCAtIGV4dGVudC5lX2xibGspID09IHBoeXNpY2FsKSkgeworI2lmZGVmIERFQlVHCisJCXByaW50ZigicGh5c2ljYWwgYmxvY2sgKGF0ICVsbHUpIHVuY2hhbmdlZFxuIiwgbG9naWNhbCk7CisjZW5kaWYKKwkJZ290byBkb25lOworCX0KKworCWlmICghbWFwcGVkKSB7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCJtYXBwaW5nIHVubWFwcGVkIGxvZ2ljYWwgYmxvY2sgJWxsdVxuIiwgbG9naWNhbCk7CisjZW5kaWYKKwkJaWYgKChsb2dpY2FsID09IGV4dGVudC5lX2xibGsgKyBleHRlbnQuZV9sZW4pICYmCisJCSAgICAocGh5c2ljYWwgPT0gZXh0ZW50LmVfcGJsayArIGV4dGVudC5lX2xlbikgJiYKKwkJICAgIChuZXdfdW5pbml0ID09IGV4dGVudF91bmluaXQpICYmCisJCSAgICAoKGludCkgZXh0ZW50LmVfbGVuIDwgbWF4X2xlbi0xKSkgeworCQkJZXh0ZW50LmVfbGVuKys7CisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X3JlcGxhY2UoaGFuZGxlLCAwLCAmZXh0ZW50KTsKKwkJfSBlbHNlIGlmICgobG9naWNhbCA9PSBleHRlbnQuZV9sYmxrIC0gMSkgJiYKKwkJCSAgIChwaHlzaWNhbCA9PSBleHRlbnQuZV9wYmxrIC0gMSkgJiYKKwkJCSAgIChuZXdfdW5pbml0ID09IGV4dGVudF91bmluaXQpICYmCisJCQkgICAoKGludCkgZXh0ZW50LmVfbGVuIDwgbWF4X2xlbiAtIDEpKSB7CisJCQlleHRlbnQuZV9sZW4rKzsKKwkJCWV4dGVudC5lX2xibGstLTsKKwkJCWV4dGVudC5lX3BibGstLTsKKwkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfcmVwbGFjZShoYW5kbGUsIDAsICZleHRlbnQpOworCQl9IGVsc2UgaWYgKGhhc19uZXh0ICYmCisJCQkgICAobG9naWNhbCA9PSBuZXh0X2V4dGVudC5lX2xibGsgLSAxKSAmJgorCQkJICAgKHBoeXNpY2FsID09IG5leHRfZXh0ZW50LmVfcGJsayAtIDEpICYmCisJCQkgICAobmV3X3VuaW5pdCA9PSBuZXh0X3VuaW5pdCkgJiYKKwkJCSAgICgoaW50KSBuZXh0X2V4dGVudC5lX2xlbiA8IG1heF9sZW4gLSAxKSkgeworCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLAorCQkJCQkJICAgRVhUMl9FWFRFTlRfTkVYVF9MRUFGLAorCQkJCQkJICAgJm5leHRfZXh0ZW50KTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBkb25lOworCQkJbmV4dF9leHRlbnQuZV9sZW4rKzsKKwkJCW5leHRfZXh0ZW50LmVfbGJsay0tOworCQkJbmV4dF9leHRlbnQuZV9wYmxrLS07CisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X3JlcGxhY2UoaGFuZGxlLCAwLCAmbmV4dF9leHRlbnQpOworCQl9IGVsc2UgaWYgKGxvZ2ljYWwgPCBleHRlbnQuZV9sYmxrKQorCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9pbnNlcnQoaGFuZGxlLCAwLCAmbmV3ZXh0ZW50KTsKKwkJZWxzZQorCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9pbnNlcnQoaGFuZGxlLAorCQkJCSAgICAgIEVYVDJfRVhURU5UX0lOU0VSVF9BRlRFUiwgJm5ld2V4dGVudCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGRvbmU7CisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZml4X3BhcmVudHMoaGFuZGxlKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZG9uZTsKKwl9IGVsc2UgaWYgKChsb2dpY2FsID09IGV4dGVudC5lX2xibGspICYmIChleHRlbnQuZV9sZW4gPT0gMSkpICB7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCIocmUvdW4pbWFwcGluZyBvbmx5IGJsb2NrIGluIGV4dGVudFxuIik7CisjZW5kaWYKKwkJaWYgKHBoeXNpY2FsKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X3JlcGxhY2UoaGFuZGxlLCAwLCAmbmV3ZXh0ZW50KTsKKwkJfSBlbHNlIHsKKwkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZGVsZXRlKGhhbmRsZSwgMCk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZG9uZTsKKwkJCWVjID0gZXh0MmZzX2V4dGVudF9maXhfcGFyZW50cyhoYW5kbGUpOworCQkJaWYgKGVjICE9IEVYVDJfRVRfTk9fQ1VSUkVOVF9OT0RFKQorCQkJCXJldHZhbCA9IGVjOworCQl9CisKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZG9uZTsKKwl9IGVsc2UgaWYgKGxvZ2ljYWwgPT0gZXh0ZW50LmVfbGJsayArIGV4dGVudC5lX2xlbiAtIDEpICB7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCIocmUvdW4pbWFwcGluZyBsYXN0IGJsb2NrIGluIGV4dGVudFxuIik7CisjZW5kaWYKKwkJaWYgKHBoeXNpY2FsKSB7CisJCQlpZiAoaGFzX25leHQgJiYKKwkJCSAgICAobG9naWNhbCA9PSAobmV4dF9leHRlbnQuZV9sYmxrIC0gMSkpICYmCisJCQkgICAgKHBoeXNpY2FsID09IChuZXh0X2V4dGVudC5lX3BibGsgLSAxKSkgJiYKKwkJCSAgICAobmV3X3VuaW5pdCA9PSBuZXh0X3VuaW5pdCkgJiYKKwkJCSAgICAoKGludCkgbmV4dF9leHRlbnQuZV9sZW4gPCBtYXhfbGVuIC0gMSkpIHsKKwkJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsCisJCQkJCUVYVDJfRVhURU5UX05FWFRfTEVBRiwgJm5leHRfZXh0ZW50KTsKKwkJCQlpZiAocmV0dmFsKQorCQkJCQlnb3RvIGRvbmU7CisJCQkJbmV4dF9leHRlbnQuZV9sZW4rKzsKKwkJCQluZXh0X2V4dGVudC5lX2xibGstLTsKKwkJCQluZXh0X2V4dGVudC5lX3BibGstLTsKKwkJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X3JlcGxhY2UoaGFuZGxlLCAwLAorCQkJCQkJCSAgICAgICAmbmV4dF9leHRlbnQpOworCQkJCWlmIChyZXR2YWwpCisJCQkJCWdvdG8gZG9uZTsKKwkJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2ZpeF9wYXJlbnRzKGhhbmRsZSk7CisJCQkJaWYgKHJldHZhbCkKKwkJCQkJZ290byBkb25lOworCQkJfSBlbHNlCisJCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9pbnNlcnQoaGFuZGxlLAorCQkJCSAgICAgIEVYVDJfRVhURU5UX0lOU0VSVF9BRlRFUiwgJm5ld2V4dGVudCk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZG9uZTsKKwkJCS8qIE5vdyBwb2ludGluZyBhdCBpbnNlcnRlZCBleHRlbnQ7IG1vdmUgYmFjayB0byBwcmV2ICovCisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsCisJCQkJCQkgICBFWFQyX0VYVEVOVF9QUkVWX0xFQUYsCisJCQkJCQkgICAmZXh0ZW50KTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBkb25lOworCQl9CisJCWV4dGVudC5lX2xlbi0tOworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X3JlcGxhY2UoaGFuZGxlLCAwLCAmZXh0ZW50KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZG9uZTsKKwl9IGVsc2UgaWYgKGxvZ2ljYWwgPT0gZXh0ZW50LmVfbGJsaykgeworI2lmZGVmIERFQlVHCisJCXByaW50ZigiKHJlL3VuKW1hcHBpbmcgZmlyc3QgYmxvY2sgaW4gZXh0ZW50XG4iKTsKKyNlbmRpZgorCQlpZiAocGh5c2ljYWwpIHsKKwkJCWlmIChoYXNfcHJldiAmJgorCQkJICAgIChsb2dpY2FsID09IChwcmV2X2V4dGVudC5lX2xibGsgKworCQkJCQkgcHJldl9leHRlbnQuZV9sZW4pKSAmJgorCQkJICAgIChwaHlzaWNhbCA9PSAocHJldl9leHRlbnQuZV9wYmxrICsKKwkJCQkJICBwcmV2X2V4dGVudC5lX2xlbikpICYmCisJCQkgICAgKG5ld191bmluaXQgPT0gcHJldl91bmluaXQpICYmCisJCQkgICAgKChpbnQpIHByZXZfZXh0ZW50LmVfbGVuIDwgbWF4X2xlbi0xKSkgeworCQkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwgCisJCQkJCUVYVDJfRVhURU5UX1BSRVZfTEVBRiwgJnByZXZfZXh0ZW50KTsKKwkJCQlpZiAocmV0dmFsKQorCQkJCQlnb3RvIGRvbmU7CisJCQkJcHJldl9leHRlbnQuZV9sZW4rKzsKKwkJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X3JlcGxhY2UoaGFuZGxlLCAwLAorCQkJCQkJCSAgICAgICAmcHJldl9leHRlbnQpOworCQkJfSBlbHNlCisJCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9pbnNlcnQoaGFuZGxlLAorCQkJCQkJCSAgICAgIDAsICZuZXdleHRlbnQpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGRvbmU7CisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsCisJCQkJCQkgICBFWFQyX0VYVEVOVF9ORVhUX0xFQUYsCisJCQkJCQkgICAmZXh0ZW50KTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBkb25lOworCQl9CisJCWV4dGVudC5lX3BibGsrKzsKKwkJZXh0ZW50LmVfbGJsaysrOworCQlleHRlbnQuZV9sZW4tLTsKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9yZXBsYWNlKGhhbmRsZSwgMCwgJmV4dGVudCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGRvbmU7CisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZml4X3BhcmVudHMoaGFuZGxlKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZG9uZTsKKwl9IGVsc2UgeworCQlfX3UzMglvcmlnX2xlbmd0aDsKKwkJYmxrNjRfdAlvcmlnX2xibGs7CisJCXN0cnVjdCBleHQyZnNfZXh0ZW50IG9yaWdfZXh0ZW50OworCQllcnJjb2RlX3QgcjI7CisKKyNpZmRlZiBERUJVRworCQlwcmludGYoIihyZS91biltYXBwaW5nIGluIG1pZGRsZSBvZiBleHRlbnRcbiIpOworI2VuZGlmCisJCS8qIG5lZWQgdG8gc3BsaXQgdGhpcyBleHRlbnQ7IGxhdGVyICovCisJCW9yaWdfbGJsayA9IGV4dGVudC5lX2xibGs7CisJCW9yaWdfbGVuZ3RoID0gZXh0ZW50LmVfbGVuOworCQlvcmlnX2V4dGVudCA9IGV4dGVudDsKKworCQkvKiBzaG9ydGVuIHByZS1zcGxpdCBleHRlbnQgKi8KKwkJZXh0ZW50LmVfbGVuID0gKGxvZ2ljYWwgLSBleHRlbnQuZV9sYmxrKTsKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9yZXBsYWNlKGhhbmRsZSwgMCwgJmV4dGVudCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGRvbmU7CisJCS8qIGluc2VydCBvdXIgbmV3IGV4dGVudCwgaWYgYW55ICovCisJCWlmIChwaHlzaWNhbCkgeworCQkJLyogaW5zZXJ0IG5ldyBleHRlbnQgYWZ0ZXIgY3VycmVudCAqLworCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9pbnNlcnQoaGFuZGxlLAorCQkJCQlFWFQyX0VYVEVOVF9JTlNFUlRfQUZURVIsICZuZXdleHRlbnQpOworCQkJaWYgKHJldHZhbCkgeworCQkJCXIyID0gZXh0MmZzX2V4dGVudF9nb3RvKGhhbmRsZSwgb3JpZ19sYmxrKTsKKwkJCQlpZiAocjIgPT0gMCkKKwkJCQkJZXh0MmZzX2V4dGVudF9yZXBsYWNlKGhhbmRsZSwgMCwKKwkJCQkJCQkgICAgICAmb3JpZ19leHRlbnQpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfQorCQkvKiBhZGQgcG9zdC1zcGxpdCBleHRlbnQgKi8KKwkJZXh0ZW50LmVfcGJsayArPSBleHRlbnQuZV9sZW4gKyAxOworCQlleHRlbnQuZV9sYmxrICs9IGV4dGVudC5lX2xlbiArIDE7CisJCWV4dGVudC5lX2xlbiA9IG9yaWdfbGVuZ3RoIC0gZXh0ZW50LmVfbGVuIC0gMTsKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9pbnNlcnQoaGFuZGxlLAorCQkJCUVYVDJfRVhURU5UX0lOU0VSVF9BRlRFUiwgJmV4dGVudCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWlmIChwaHlzaWNhbCkgeworCQkJCXIyID0gZXh0MmZzX2V4dGVudF9nb3RvKGhhbmRsZSwKKwkJCQkJCQluZXdleHRlbnQuZV9sYmxrKTsKKwkJCQlpZiAocjIgPT0gMCkKKwkJCQkJZXh0MmZzX2V4dGVudF9kZWxldGUoaGFuZGxlLCAwKTsKKwkJCX0KKwkJCXIyID0gZXh0MmZzX2V4dGVudF9nb3RvKGhhbmRsZSwgb3JpZ19sYmxrKTsKKwkJCWlmIChyMiA9PSAwKQorCQkJCWV4dDJmc19leHRlbnRfcmVwbGFjZShoYW5kbGUsIDAsICZvcmlnX2V4dGVudCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKK2RvbmU6CisJLyogZ2V0IGhhbmRsZSBiYWNrIHRvIGl0cyBwb3NpdGlvbiAqLworCWlmIChvcmlnX2hlaWdodCA+IGhhbmRsZS0+bWF4X2RlcHRoKQorCQlvcmlnX2hlaWdodCA9IGhhbmRsZS0+bWF4X2RlcHRoOyAvKiBJbiBjYXNlIHdlIHNob3J0ZW5lZCB0aGUgdHJlZSAqLworCWV4dDJmc19leHRlbnRfZ290bzIoaGFuZGxlLCBvcmlnX2hlaWdodCwgb3JpZ19sYmxrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9kZWxldGUoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGV4dGVudF9wYXRoCQkqcGF0aDsKKwljaGFyIAkJCQkqY3A7CisJc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlcgkqZWg7CisJZXJyY29kZV90CQkJcmV0dmFsID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoaGFuZGxlLCBFWFQyX0VUX01BR0lDX0VYVEVOVF9IQU5ETEUpOworCisJaWYgKCEoaGFuZGxlLT5mcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUlcpKQorCQlyZXR1cm4gRVhUMl9FVF9ST19GSUxTWVM7CisKKwlpZiAoIWhhbmRsZS0+cGF0aCkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fQ1VSUkVOVF9OT0RFOworCisjaWZkZWYgREVCVUcKKwl7CisJCXN0cnVjdCBleHQyZnNfZXh0ZW50CWV4dGVudDsKKworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIEVYVDJfRVhURU5UX0NVUlJFTlQsCisJCQkJCSAgICZleHRlbnQpOworCQlpZiAocmV0dmFsID09IDApIHsKKwkJCXByaW50ZigiZXh0ZW50IGRlbGV0ZSAldSAiLCBoYW5kbGUtPmlubyk7CisJCQlkYmdfcHJpbnRfZXh0ZW50KDAsICZleHRlbnQpOworCQl9CisJfQorI2VuZGlmCisKKwlwYXRoID0gaGFuZGxlLT5wYXRoICsgaGFuZGxlLT5sZXZlbDsKKwlpZiAoIXBhdGgtPmN1cnIpCisJCXJldHVybiBFWFQyX0VUX05PX0NVUlJFTlRfTk9ERTsKKworCWNwID0gcGF0aC0+Y3VycjsKKworCWlmIChwYXRoLT5sZWZ0KSB7CisJCW1lbW1vdmUoY3AsIGNwICsgc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudF9pZHgpLAorCQkJcGF0aC0+bGVmdCAqIHNpemVvZihzdHJ1Y3QgZXh0M19leHRlbnRfaWR4KSk7CisJCXBhdGgtPmxlZnQtLTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgZXh0M19leHRlbnRfaWR4CSppeCA9IHBhdGgtPmN1cnI7CisJCWl4LS07CisJCXBhdGgtPmN1cnIgPSBpeDsKKwl9CisJaWYgKC0tcGF0aC0+ZW50cmllcyA9PSAwKQorCQlwYXRoLT5jdXJyID0gMDsKKworCS8qIGlmIG5vbi1yb290IG5vZGUgaGFzIG5vIGVudHJpZXMgbGVmdCwgcmVtb3ZlIGl0ICYgcGFyZW50IHB0ciB0byBpdCAqLworCWlmIChwYXRoLT5lbnRyaWVzID09IDAgJiYgaGFuZGxlLT5sZXZlbCkgeworCQlpZiAoIShmbGFncyAmIEVYVDJfRVhURU5UX0RFTEVURV9LRUVQX0VNUFRZKSkgeworCQkJc3RydWN0IGV4dDJmc19leHRlbnQJZXh0ZW50OworCisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIEVYVDJfRVhURU5UX1VQLAorCQkJCQkJCQkmZXh0ZW50KTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKKworCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9kZWxldGUoaGFuZGxlLCBmbGFncyk7CisJCQloYW5kbGUtPmlub2RlLT5pX2Jsb2NrcyAtPQorCQkJCShoYW5kbGUtPmZzLT5ibG9ja3NpemUgKgorCQkJCSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhoYW5kbGUtPmZzKSkgLyA1MTI7CisJCQlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoaGFuZGxlLT5mcywgaGFuZGxlLT5pbm8sCisJCQkJCQkgICAgaGFuZGxlLT5pbm9kZSk7CisJCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGhhbmRsZS0+ZnMsCisJCQkJCQkgIGV4dGVudC5lX3BibGssIC0xKTsKKwkJfQorCX0gZWxzZSB7CisJCWVoID0gKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKikgcGF0aC0+YnVmOworCQllaC0+ZWhfZW50cmllcyA9IGV4dDJmc19jcHVfdG9fbGUxNihwYXRoLT5lbnRyaWVzKTsKKwkJaWYgKChwYXRoLT5lbnRyaWVzID09IDApICYmIChoYW5kbGUtPmxldmVsID09IDApKQorCQkJZWgtPmVoX2RlcHRoID0gaGFuZGxlLT5tYXhfZGVwdGggPSAwOworCQlyZXR2YWwgPSB1cGRhdGVfcGF0aChoYW5kbGUpOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9nZXRfaW5mbyhleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUsCisJCQkJIHN0cnVjdCBleHQyX2V4dGVudF9pbmZvICppbmZvKQoreworCXN0cnVjdCBleHRlbnRfcGF0aAkJKnBhdGg7CisKKwlFWFQyX0NIRUNLX01BR0lDKGhhbmRsZSwgRVhUMl9FVF9NQUdJQ19FWFRFTlRfSEFORExFKTsKKworCW1lbXNldChpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfZXh0ZW50X2luZm8pKTsKKworCXBhdGggPSBoYW5kbGUtPnBhdGggKyBoYW5kbGUtPmxldmVsOworCWlmIChwYXRoKSB7CisJCWlmIChwYXRoLT5jdXJyKQorCQkJaW5mby0+Y3Vycl9lbnRyeSA9ICgoY2hhciAqKSBwYXRoLT5jdXJyIC0gcGF0aC0+YnVmKSAvCisJCQkJc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudF9pZHgpOworCQllbHNlCisJCQlpbmZvLT5jdXJyX2VudHJ5ID0gMDsKKwkJaW5mby0+bnVtX2VudHJpZXMgPSBwYXRoLT5lbnRyaWVzOworCQlpbmZvLT5tYXhfZW50cmllcyA9IHBhdGgtPm1heF9lbnRyaWVzOworCQlpbmZvLT5ieXRlc19hdmFpbCA9IChwYXRoLT5tYXhfZW50cmllcyAtIHBhdGgtPmVudHJpZXMpICoKKwkJCXNpemVvZihzdHJ1Y3QgZXh0M19leHRlbnQpOworCX0KKworCWluZm8tPmN1cnJfbGV2ZWwgPSBoYW5kbGUtPmxldmVsOworCWluZm8tPm1heF9kZXB0aCA9IGhhbmRsZS0+bWF4X2RlcHRoOworCWluZm8tPm1heF9sYmxrID0gKChfX3U2NCkgMSA8PCAzMikgLSAxOworCWluZm8tPm1heF9wYmxrID0gKChfX3U2NCkgMSA8PCA0OCkgLSAxOworCWluZm8tPm1heF9sZW4gPSAoMVVMIDw8IDE1KTsKKwlpbmZvLT5tYXhfdW5pbml0X2xlbiA9ICgxVUwgPDwgMTUpIC0gMTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgREVCVUcKKy8qCisgKiBPdmVycmlkZSBkZWJ1Z2ZzJ3MgcHJvbXB0CisgKi8KK2NvbnN0IGNoYXIgKmRlYnVnX3Byb2dfbmFtZSA9ICJ0c3RfZXh0ZW50cyI7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2ZpZW1hcC5oIGIvbGliL2V4dDJmcy9maWVtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTVjZDBiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9maWVtYXAuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogRlNfSU9DX0ZJRU1BUCBpb2N0bCBpbmZyYXN0cnVjdHVyZS4KKyAqCisgKiBTb21lIHBvcnRpb25zIGNvcHlyaWdodCAoQykgMjAwNyBDbHVzdGVyIEZpbGUgU3lzdGVtcywgSW5jCisgKgorICogQXV0aG9yczogTWFyayBGYXNoZWggPG1mYXNoZWhAc3VzZS5jb20+CisgKiAgICAgICAgICBLYWxwYWsgU2hhaCA8a2FscGFrLnNoYWhAc3VuLmNvbT4KKyAqICAgICAgICAgIEFuZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyQHN1bi5jb20+CisgKi8KKworI2lmbmRlZiBfTElOVVhfRklFTUFQX0gKKyNkZWZpbmUgX0xJTlVYX0ZJRU1BUF9ICisKK3N0cnVjdCBmaWVtYXBfZXh0ZW50IHsKKwlfX3U2NCBmZV9sb2dpY2FsOyAgLyogbG9naWNhbCBvZmZzZXQgaW4gYnl0ZXMgZm9yIHRoZSBzdGFydCBvZgorCQkJICAgICogdGhlIGV4dGVudCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgKi8KKwlfX3U2NCBmZV9waHlzaWNhbDsgLyogcGh5c2ljYWwgb2Zmc2V0IGluIGJ5dGVzIGZvciB0aGUgc3RhcnQKKwkJCSAgICAqIG9mIHRoZSBleHRlbnQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkaXNrICovCisJX191NjQgZmVfbGVuZ3RoOyAgIC8qIGxlbmd0aCBpbiBieXRlcyBmb3IgdGhpcyBleHRlbnQgKi8KKwlfX3U2NCBmZV9yZXNlcnZlZDY0WzJdOworCV9fdTMyIGZlX2ZsYWdzOyAgICAvKiBGSUVNQVBfRVhURU5UXyogZmxhZ3MgZm9yIHRoaXMgZXh0ZW50ICovCisJX191MzIgZmVfcmVzZXJ2ZWRbM107Cit9OworCitzdHJ1Y3QgZmllbWFwIHsKKwlfX3U2NCBmbV9zdGFydDsJCS8qIGxvZ2ljYWwgb2Zmc2V0IChpbmNsdXNpdmUpIGF0CisJCQkJICogd2hpY2ggdG8gc3RhcnQgbWFwcGluZyAoaW4pICovCisJX191NjQgZm1fbGVuZ3RoOwkvKiBsb2dpY2FsIGxlbmd0aCBvZiBtYXBwaW5nIHdoaWNoCisJCQkJICogdXNlcnNwYWNlIHdhbnRzIChpbikgKi8KKwlfX3UzMiBmbV9mbGFnczsJCS8qIEZJRU1BUF9GTEFHXyogZmxhZ3MgZm9yIHJlcXVlc3QgKGluL291dCkgKi8KKwlfX3UzMiBmbV9tYXBwZWRfZXh0ZW50czsvKiBudW1iZXIgb2YgZXh0ZW50cyB0aGF0IHdlcmUgbWFwcGVkIChvdXQpICovCisJX191MzIgZm1fZXh0ZW50X2NvdW50OyAgLyogc2l6ZSBvZiBmbV9leHRlbnRzIGFycmF5IChpbikgKi8KKwlfX3UzMiBmbV9yZXNlcnZlZDsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudCBmbV9leHRlbnRzWzBdOyAvKiBhcnJheSBvZiBtYXBwZWQgZXh0ZW50cyAob3V0KSAqLworfTsKKworI2lmbmRlZiBGU19JT0NfRklFTUFQCisjZGVmaW5lIEZTX0lPQ19GSUVNQVAJX0lPV1IoJ2YnLCAxMSwgc3RydWN0IGZpZW1hcCkKKyNlbmRpZgorCisjZGVmaW5lIEZJRU1BUF9NQVhfT0ZGU0VUCSh+MFVMTCkKKworI2RlZmluZSBGSUVNQVBfRkxBR19TWU5DCTB4MDAwMDAwMDEgLyogc3luYyBmaWxlIGRhdGEgYmVmb3JlIG1hcCAqLworI2RlZmluZSBGSUVNQVBfRkxBR19YQVRUUgkweDAwMDAwMDAyIC8qIG1hcCBleHRlbmRlZCBhdHRyaWJ1dGUgdHJlZSAqLworCisjZGVmaW5lIEZJRU1BUF9GTEFHU19DT01QQVQJKEZJRU1BUF9GTEFHX1NZTkMgfCBGSUVNQVBfRkxBR19YQVRUUikKKworI2RlZmluZSBGSUVNQVBfRVhURU5UX0xBU1QJCTB4MDAwMDAwMDEgLyogTGFzdCBleHRlbnQgaW4gZmlsZS4gKi8KKyNkZWZpbmUgRklFTUFQX0VYVEVOVF9VTktOT1dOCQkweDAwMDAwMDAyIC8qIERhdGEgbG9jYXRpb24gdW5rbm93bi4gKi8KKyNkZWZpbmUgRklFTUFQX0VYVEVOVF9ERUxBTExPQwkJMHgwMDAwMDAwNCAvKiBMb2NhdGlvbiBzdGlsbCBwZW5kaW5nLgorCQkJCQkJICAgICogU2V0cyBFWFRFTlRfVU5LTk9XTi4gKi8KKyNkZWZpbmUgRklFTUFQX0VYVEVOVF9FTkNPREVECQkweDAwMDAwMDA4IC8qIERhdGEgY2FuIG5vdCBiZSByZWFkCisJCQkJCQkgICAgKiB3aGlsZSBmcyBpcyB1bm1vdW50ZWQgKi8KKyNkZWZpbmUgRklFTUFQX0VYVEVOVF9EQVRBX0VOQ1JZUFRFRAkweDAwMDAwMDgwIC8qIERhdGEgaXMgZW5jcnlwdGVkIGJ5IGZzLgorCQkJCQkJICAgICogU2V0cyBFWFRFTlRfTk9fQllQQVNTLiAqLworI2RlZmluZSBGSUVNQVBfRVhURU5UX05PVF9BTElHTkVECTB4MDAwMDAxMDAgLyogRXh0ZW50IG9mZnNldHMgbWF5IG5vdCBiZQorCQkJCQkJICAgICogYmxvY2sgYWxpZ25lZC4gKi8KKyNkZWZpbmUgRklFTUFQX0VYVEVOVF9EQVRBX0lOTElORQkweDAwMDAwMjAwIC8qIERhdGEgbWl4ZWQgd2l0aCBtZXRhZGF0YS4KKwkJCQkJCSAgICAqIFNldHMgRVhURU5UX05PVF9BTElHTkVELiovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfREFUQV9UQUlMCQkweDAwMDAwNDAwIC8qIE11bHRpcGxlIGZpbGVzIGluIGJsb2NrLgorCQkJCQkJICAgICogU2V0cyBFWFRFTlRfTk9UX0FMSUdORUQuKi8KKyNkZWZpbmUgRklFTUFQX0VYVEVOVF9VTldSSVRURU4JCTB4MDAwMDA4MDAgLyogU3BhY2UgYWxsb2NhdGVkLCBidXQKKwkJCQkJCSAgICAqIG5vIGRhdGEgKGkuZS4gemVybykuICovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfTUVSR0VECQkweDAwMDAxMDAwIC8qIEZpbGUgZG9lcyBub3QgbmF0aXZlbHkKKwkJCQkJCSAgICAqIHN1cHBvcnQgZXh0ZW50cy4gUmVzdWx0CisJCQkJCQkgICAgKiBtZXJnZWQgZm9yIGVmZmljaWVuY3kuICovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfU0hBUkVECQkweDAwMDAyMDAwIC8qIFNwYWNlIHNoYXJlZCB3aXRoIG90aGVyCisJCQkJCQkgICAgKiBmaWxlcy4gKi8KKworI2VuZGlmIC8qIF9MSU5VWF9GSUVNQVBfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9maWxlaW8uYyBiL2xpYi9leHQyZnMvZmlsZWlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkYjI0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvZmlsZWlvLmMKQEAgLTAsMCArMSw0ODkgQEAKKy8qCisgKiBmaWxlaW8uYyAtLS0gU2ltcGxlIGZpbGUgSS9PIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKyNpbmNsdWRlICJleHQyZnNQLmgiCisKK3N0cnVjdCBleHQyX2ZpbGUgeworCWVycmNvZGVfdAkJbWFnaWM7CisJZXh0Ml9maWxzeXMgCQlmczsKKwlleHQyX2lub190CQlpbm87CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJaW50IAkJCWZsYWdzOworCV9fdTY0CQkJcG9zOworCWJsazY0X3QJCQlibG9ja25vOworCWJsazY0X3QJCQlwaHlzYmxvY2s7CisJY2hhciAJCQkqYnVmOworfTsKKworI2RlZmluZSBCTUFQX0JVRkZFUiAoZmlsZS0+YnVmICsgZnMtPmJsb2Nrc2l6ZSkKKworZXJyY29kZV90IGV4dDJmc19maWxlX29wZW4yKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCSAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkgICAgaW50IGZsYWdzLCBleHQyX2ZpbGVfdCAqcmV0KQoreworCWV4dDJfZmlsZV90IAlmaWxlOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwkvKgorCSAqIERvbid0IGxldCBjYWxsZXIgY3JlYXRlIG9yIG9wZW4gYSBmaWxlIGZvciB3cml0aW5nIGlmIHRoZQorCSAqIGZpbGVzeXN0ZW0gaXMgcmVhZC1vbmx5LgorCSAqLworCWlmICgoZmxhZ3MgJiAoRVhUMl9GSUxFX1dSSVRFIHwgRVhUMl9GSUxFX0NSRUFURSkpICYmCisJICAgICEoZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSkKKwkJcmV0dXJuIEVYVDJfRVRfUk9fRklMU1lTOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBleHQyX2ZpbGUpLCAmZmlsZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCW1lbXNldChmaWxlLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfZmlsZSkpOworCWZpbGUtPm1hZ2ljID0gRVhUMl9FVF9NQUdJQ19FWFQyX0ZJTEU7CisJZmlsZS0+ZnMgPSBmczsKKwlmaWxlLT5pbm8gPSBpbm87CisJZmlsZS0+ZmxhZ3MgPSBmbGFncyAmIEVYVDJfRklMRV9NQVNLOworCisJaWYgKGlub2RlKSB7CisJCW1lbWNweSgmZmlsZS0+aW5vZGUsIGlub2RlLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgaW5vLCAmZmlsZS0+aW5vZGUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBmYWlsOworCX0KKworCXJldHZhbCA9IGV4dDJmc19nZXRfYXJyYXkoMywgZnMtPmJsb2Nrc2l6ZSwgJmZpbGUtPmJ1Zik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsOworCisJKnJldCA9IGZpbGU7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJaWYgKGZpbGUtPmJ1ZikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZmaWxlLT5idWYpOworCWV4dDJmc19mcmVlX21lbSgmZmlsZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGV4dDJmc19maWxlX29wZW4oZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgaW50IGZsYWdzLCBleHQyX2ZpbGVfdCAqcmV0KQoreworCXJldHVybiBleHQyZnNfZmlsZV9vcGVuMihmcywgaW5vLCBOVUxMLCBmbGFncywgcmV0KTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlsZXN5c3RlbSBoYW5kbGUgb2YgYSBmaWxlIGZyb20gdGhlIHN0cnVjdHVyZQorICovCitleHQyX2ZpbHN5cyBleHQyZnNfZmlsZV9nZXRfZnMoZXh0Ml9maWxlX3QgZmlsZSkKK3sKKwlpZiAoZmlsZS0+bWFnaWMgIT0gRVhUMl9FVF9NQUdJQ19FWFQyX0ZJTEUpCisJCXJldHVybiAwOworCXJldHVybiBmaWxlLT5mczsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgaW5vZGUgb2YgYSBmaWxlIGZyb20gdGhlIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgZXh0Ml9pbm9kZSAqZXh0MmZzX2ZpbGVfZ2V0X2lub2RlKGV4dDJfZmlsZV90IGZpbGUpCit7CisJaWYgKGZpbGUtPm1hZ2ljICE9IEVYVDJfRVRfTUFHSUNfRVhUMl9GSUxFKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gJmZpbGUtPmlub2RlOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGlub2RlIG51bWJlciBmcm9tIHRoZSBzdHJ1Y3R1cmUgKi8KK2V4dDJfaW5vX3QgZXh0MmZzX2ZpbGVfZ2V0X2lub2RlX251bShleHQyX2ZpbGVfdCBmaWxlKQoreworCWlmIChmaWxlLT5tYWdpYyAhPSBFWFQyX0VUX01BR0lDX0VYVDJfRklMRSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGZpbGUtPmlubzsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyB0aGUgZGlydHkgYmxvY2sgYnVmZmVyIG91dCB0byBkaXNrIGlmCisgKiBuZWNlc3NhcnkuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfZmlsZV9mbHVzaChleHQyX2ZpbGVfdCBmaWxlKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJZXh0Ml9maWxzeXMgZnM7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZpbGUsIEVYVDJfRVRfTUFHSUNfRVhUMl9GSUxFKTsKKwlmcyA9IGZpbGUtPmZzOworCisJaWYgKCEoZmlsZS0+ZmxhZ3MgJiBFWFQyX0ZJTEVfQlVGX1ZBTElEKSB8fAorCSAgICAhKGZpbGUtPmZsYWdzICYgRVhUMl9GSUxFX0JVRl9ESVJUWSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBPSywgdGhlIHBoeXNpY2FsIGJsb2NrIGhhc24ndCBiZWVuIGFsbG9jYXRlZCB5ZXQuCisJICogQWxsb2NhdGUgaXQuCisJICovCisJaWYgKCFmaWxlLT5waHlzYmxvY2spIHsKKwkJcmV0dmFsID0gZXh0MmZzX2JtYXAyKGZzLCBmaWxlLT5pbm8sICZmaWxlLT5pbm9kZSwKKwkJCQkgICAgIEJNQVBfQlVGRkVSLCBmaWxlLT5pbm8gPyBCTUFQX0FMTE9DIDogMCwKKwkJCQkgICAgIGZpbGUtPmJsb2Nrbm8sIDAsICZmaWxlLT5waHlzYmxvY2spOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgZmlsZS0+cGh5c2Jsb2NrLCAxLCBmaWxlLT5idWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlmaWxlLT5mbGFncyAmPSB+RVhUMl9GSUxFX0JVRl9ESVJUWTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHN5bmNocm9uaXplcyB0aGUgZmlsZSdzIGJsb2NrIGJ1ZmZlciBhbmQgdGhlIGN1cnJlbnQKKyAqIGZpbGUgcG9zaXRpb24sIHBvc3NpYmx5IGludmFsaWRhdGluZyBibG9jayBidWZmZXIgaWYgbmVjZXNzYXJ5CisgKi8KK3N0YXRpYyBlcnJjb2RlX3Qgc3luY19idWZmZXJfcG9zaXRpb24oZXh0Ml9maWxlX3QgZmlsZSkKK3sKKwlibGs2NF90CWI7CisJZXJyY29kZV90CXJldHZhbDsKKworCWIgPSBmaWxlLT5wb3MgLyBmaWxlLT5mcy0+YmxvY2tzaXplOworCWlmIChiICE9IGZpbGUtPmJsb2Nrbm8pIHsKKwkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfZmx1c2goZmlsZSk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlmaWxlLT5mbGFncyAmPSB+RVhUMl9GSUxFX0JVRl9WQUxJRDsKKwl9CisJZmlsZS0+YmxvY2tubyA9IGI7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGxvYWRzIHRoZSBmaWxlJ3MgYmxvY2sgYnVmZmVyIHdpdGggdmFsaWQgZGF0YSBmcm9tCisgKiB0aGUgZGlzayBhcyBuZWNlc3NhcnkuCisgKgorICogSWYgZG9udGZpbGwgaXMgdHJ1ZSwgdGhlbiBza2lwIGluaXRpYWxpemluZyB0aGUgYnVmZmVyIHNpbmNlIHdlJ3JlCisgKiBnb2luZyB0byBiZSByZXBsYWNpbmcgaXRzIGVudGlyZSBjb250ZW50cyBhbnl3YXkuICBJZiBzZXQsIHRoZW4gdGhlCisgKiBmdW5jdGlvbiBiYXNpY2FsbHkgb25seSBzZXRzIGZpbGUtPnBoeXNibG9jayBhbmQgRVhUMl9GSUxFX0JVRl9WQUxJRAorICovCisjZGVmaW5lIERPTlRGSUxMIDEKK3N0YXRpYyBlcnJjb2RlX3QgbG9hZF9idWZmZXIoZXh0Ml9maWxlX3QgZmlsZSwgaW50IGRvbnRmaWxsKQoreworCWV4dDJfZmlsc3lzCWZzID0gZmlsZS0+ZnM7CisJZXJyY29kZV90CXJldHZhbDsKKworCWlmICghKGZpbGUtPmZsYWdzICYgRVhUMl9GSUxFX0JVRl9WQUxJRCkpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2JtYXAyKGZzLCBmaWxlLT5pbm8sICZmaWxlLT5pbm9kZSwKKwkJCQkgICAgIEJNQVBfQlVGRkVSLCAwLCBmaWxlLT5ibG9ja25vLCAwLAorCQkJCSAgICAgJmZpbGUtPnBoeXNibG9jayk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlpZiAoIWRvbnRmaWxsKSB7CisJCQlpZiAoZmlsZS0+cGh5c2Jsb2NrKSB7CisJCQkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbywKKwkJCQkJCQkgICAgICAgZmlsZS0+cGh5c2Jsb2NrLAorCQkJCQkJCSAgICAgICAxLCBmaWxlLT5idWYpOworCQkJCWlmIChyZXR2YWwpCisJCQkJCXJldHVybiByZXR2YWw7CisJCQl9IGVsc2UKKwkJCQltZW1zZXQoZmlsZS0+YnVmLCAwLCBmcy0+YmxvY2tzaXplKTsKKwkJfQorCQlmaWxlLT5mbGFncyB8PSBFWFQyX0ZJTEVfQlVGX1ZBTElEOworCX0KKwlyZXR1cm4gMDsKK30KKworCitlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfY2xvc2UoZXh0Ml9maWxlX3QgZmlsZSkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhmaWxlLCBFWFQyX0VUX01BR0lDX0VYVDJfRklMRSk7CisKKwlyZXR2YWwgPSBleHQyZnNfZmlsZV9mbHVzaChmaWxlKTsKKworCWlmIChmaWxlLT5idWYpCisJCWV4dDJmc19mcmVlX21lbSgmZmlsZS0+YnVmKTsKKwlleHQyZnNfZnJlZV9tZW0oJmZpbGUpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworCitlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfcmVhZChleHQyX2ZpbGVfdCBmaWxlLCB2b2lkICpidWYsCisJCQkgICB1bnNpZ25lZCBpbnQgd2FudGVkLCB1bnNpZ25lZCBpbnQgKmdvdCkKK3sKKwlleHQyX2ZpbHN5cwlmczsKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBpbnQJc3RhcnQsIGMsIGNvdW50ID0gMDsKKwlfX3U2NAkJbGVmdDsKKwljaGFyCQkqcHRyID0gKGNoYXIgKikgYnVmOworCisJRVhUMl9DSEVDS19NQUdJQyhmaWxlLCBFWFQyX0VUX01BR0lDX0VYVDJfRklMRSk7CisJZnMgPSBmaWxlLT5mczsKKworCXdoaWxlICgoZmlsZS0+cG9zIDwgRVhUMl9JX1NJWkUoJmZpbGUtPmlub2RlKSkgJiYgKHdhbnRlZCA+IDApKSB7CisJCXJldHZhbCA9IHN5bmNfYnVmZmVyX3Bvc2l0aW9uKGZpbGUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBmYWlsOworCQlyZXR2YWwgPSBsb2FkX2J1ZmZlcihmaWxlLCAwKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGFydCA9IGZpbGUtPnBvcyAlIGZzLT5ibG9ja3NpemU7CisJCWMgPSBmcy0+YmxvY2tzaXplIC0gc3RhcnQ7CisJCWlmIChjID4gd2FudGVkKQorCQkJYyA9IHdhbnRlZDsKKwkJbGVmdCA9IEVYVDJfSV9TSVpFKCZmaWxlLT5pbm9kZSkgLSBmaWxlLT5wb3MgOworCQlpZiAoYyA+IGxlZnQpCisJCQljID0gbGVmdDsKKworCQltZW1jcHkocHRyLCBmaWxlLT5idWYrc3RhcnQsIGMpOworCQlmaWxlLT5wb3MgKz0gYzsKKwkJcHRyICs9IGM7CisJCWNvdW50ICs9IGM7CisJCXdhbnRlZCAtPSBjOworCX0KKworZmFpbDoKKwlpZiAoZ290KQorCQkqZ290ID0gY291bnQ7CisJcmV0dXJuIHJldHZhbDsKK30KKworCitlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfd3JpdGUoZXh0Ml9maWxlX3QgZmlsZSwgY29uc3Qgdm9pZCAqYnVmLAorCQkJICAgIHVuc2lnbmVkIGludCBuYnl0ZXMsIHVuc2lnbmVkIGludCAqd3JpdHRlbikKK3sKKwlleHQyX2ZpbHN5cwlmczsKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBpbnQJc3RhcnQsIGMsIGNvdW50ID0gMDsKKwljb25zdCBjaGFyCSpwdHIgPSAoY29uc3QgY2hhciAqKSBidWY7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZpbGUsIEVYVDJfRVRfTUFHSUNfRVhUMl9GSUxFKTsKKwlmcyA9IGZpbGUtPmZzOworCisJaWYgKCEoZmlsZS0+ZmxhZ3MgJiBFWFQyX0ZJTEVfV1JJVEUpKQorCQlyZXR1cm4gRVhUMl9FVF9GSUxFX1JPOworCisJd2hpbGUgKG5ieXRlcyA+IDApIHsKKwkJcmV0dmFsID0gc3luY19idWZmZXJfcG9zaXRpb24oZmlsZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhcnQgPSBmaWxlLT5wb3MgJSBmcy0+YmxvY2tzaXplOworCQljID0gZnMtPmJsb2Nrc2l6ZSAtIHN0YXJ0OworCQlpZiAoYyA+IG5ieXRlcykKKwkJCWMgPSBuYnl0ZXM7CisKKwkJLyoKKwkJICogV2Ugb25seSBuZWVkIHRvIGRvIGEgcmVhZC1tb2RpZnktdXBkYXRlIGN5Y2xlIGlmCisJCSAqIHdlJ3JlIGRvaW5nIGEgcGFydGlhbCB3cml0ZS4KKwkJICovCisJCXJldHZhbCA9IGxvYWRfYnVmZmVyKGZpbGUsIChjID09IGZzLT5ibG9ja3NpemUpKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZmFpbDsKKworCQkvKgorCQkgKiBPSywgdGhlIHBoeXNpY2FsIGJsb2NrIGhhc24ndCBiZWVuIGFsbG9jYXRlZCB5ZXQuCisJCSAqIEFsbG9jYXRlIGl0LgorCQkgKi8KKwkJaWYgKCFmaWxlLT5waHlzYmxvY2spIHsKKwkJCXJldHZhbCA9IGV4dDJmc19ibWFwMihmcywgZmlsZS0+aW5vLCAmZmlsZS0+aW5vZGUsCisJCQkJCSAgICAgIEJNQVBfQlVGRkVSLAorCQkJCQkgICAgICBmaWxlLT5pbm8gPyBCTUFQX0FMTE9DIDogMCwKKwkJCQkJICAgICAgZmlsZS0+YmxvY2tubywgMCwKKwkJCQkJICAgICAgJmZpbGUtPnBoeXNibG9jayk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZmFpbDsKKwkJfQorCisJCWZpbGUtPmZsYWdzIHw9IEVYVDJfRklMRV9CVUZfRElSVFk7CisJCW1lbWNweShmaWxlLT5idWYrc3RhcnQsIHB0ciwgYyk7CisJCWZpbGUtPnBvcyArPSBjOworCQlwdHIgKz0gYzsKKwkJY291bnQgKz0gYzsKKwkJbmJ5dGVzIC09IGM7CisJfQorCitmYWlsOgorCS8qIFVwZGF0ZSBpbm9kZSBzaXplICovCisJaWYgKGNvdW50ICE9IDAgJiYgRVhUMl9JX1NJWkUoJmZpbGUtPmlub2RlKSA8IGZpbGUtPnBvcykgeworCQllcnJjb2RlX3QJcmM7CisKKwkJcmMgPSBleHQyZnNfZmlsZV9zZXRfc2l6ZTIoZmlsZSwgZmlsZS0+cG9zKTsKKwkJaWYgKHJldHZhbCA9PSAwKQorCQkJcmV0dmFsID0gcmM7CisJfQorCisJaWYgKHdyaXR0ZW4pCisJCSp3cml0dGVuID0gY291bnQ7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGV4dDJmc19maWxlX2xsc2VlayhleHQyX2ZpbGVfdCBmaWxlLCBfX3U2NCBvZmZzZXQsCisJCQkgICAgaW50IHdoZW5jZSwgX191NjQgKnJldF9wb3MpCit7CisJRVhUMl9DSEVDS19NQUdJQyhmaWxlLCBFWFQyX0VUX01BR0lDX0VYVDJfRklMRSk7CisKKwlpZiAod2hlbmNlID09IEVYVDJfU0VFS19TRVQpCisJCWZpbGUtPnBvcyA9IG9mZnNldDsKKwllbHNlIGlmICh3aGVuY2UgPT0gRVhUMl9TRUVLX0NVUikKKwkJZmlsZS0+cG9zICs9IG9mZnNldDsKKwllbHNlIGlmICh3aGVuY2UgPT0gRVhUMl9TRUVLX0VORCkKKwkJZmlsZS0+cG9zID0gRVhUMl9JX1NJWkUoJmZpbGUtPmlub2RlKSArIG9mZnNldDsKKwllbHNlCisJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisKKwlpZiAocmV0X3BvcykKKwkJKnJldF9wb3MgPSBmaWxlLT5wb3M7CisKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19maWxlX2xzZWVrKGV4dDJfZmlsZV90IGZpbGUsIGV4dDJfb2ZmX3Qgb2Zmc2V0LAorCQkJICAgIGludCB3aGVuY2UsIGV4dDJfb2ZmX3QgKnJldF9wb3MpCit7CisJX191NjQJCWxvZmZzZXQsIHJldF9sb2Zmc2V0OworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlsb2Zmc2V0ID0gb2Zmc2V0OworCXJldHZhbCA9IGV4dDJmc19maWxlX2xsc2VlayhmaWxlLCBsb2Zmc2V0LCB3aGVuY2UsICZyZXRfbG9mZnNldCk7CisJaWYgKHJldF9wb3MpCisJCSpyZXRfcG9zID0gKGV4dDJfb2ZmX3QpIHJldF9sb2Zmc2V0OworCXJldHVybiByZXR2YWw7Cit9CisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgYWNjb3JkaW5nIHRvIHRoZSBpbm9kZQorICovCitlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfZ2V0X2xzaXplKGV4dDJfZmlsZV90IGZpbGUsIF9fdTY0ICpyZXRfc2l6ZSkKK3sKKwlpZiAoZmlsZS0+bWFnaWMgIT0gRVhUMl9FVF9NQUdJQ19FWFQyX0ZJTEUpCisJCXJldHVybiBFWFQyX0VUX01BR0lDX0VYVDJfRklMRTsKKwkqcmV0X3NpemUgPSBFWFQyX0lfU0laRSgmZmlsZS0+aW5vZGUpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBmaWxlLCBhY2NvcmRpbmcgdG8gdGhlIGlub2RlCisgKi8KK2V4dDJfb2ZmX3QgZXh0MmZzX2ZpbGVfZ2V0X3NpemUoZXh0Ml9maWxlX3QgZmlsZSkKK3sKKwlfX3U2NAlzaXplOworCisJaWYgKGV4dDJmc19maWxlX2dldF9sc2l6ZShmaWxlLCAmc2l6ZSkpCisJCXJldHVybiAwOworCWlmICgoc2l6ZSA+PiAzMikgIT0gMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNpemU7Cit9CisKKy8qIFplcm8gdGhlIHBhcnRzIG9mIHRoZSBsYXN0IGJsb2NrIHRoYXQgYXJlIHBhc3QgRU9GLiAqLworc3RhdGljIGVycmNvZGVfdCBleHQyZnNfZmlsZV96ZXJvX3Bhc3Rfb2Zmc2V0KGV4dDJfZmlsZV90IGZpbGUsCisJCQkJCSAgICAgIGV4dDJfb2ZmNjRfdCBvZmZzZXQpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBmaWxlLT5mczsKKwljaGFyICpiID0gTlVMTDsKKwlleHQyX29mZjY0X3Qgb2ZmID0gb2Zmc2V0ICUgZnMtPmJsb2Nrc2l6ZTsKKwlibGs2NF90IGJsazsKKwlpbnQgcmV0X2ZsYWdzOworCWVycmNvZGVfdCByZXR2YWw7CisKKwlpZiAob2ZmID09IDApCisJCXJldHVybiAwOworCisJcmV0dmFsID0gc3luY19idWZmZXJfcG9zaXRpb24oZmlsZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qIElzIHRoZXJlIGFuIGluaXRpYWxpemVkIGJsb2NrIGF0IHRoZSBlbmQ/ICovCisJcmV0dmFsID0gZXh0MmZzX2JtYXAyKGZzLCBmaWxlLT5pbm8sIE5VTEwsIE5VTEwsIDAsCisJCQkgICAgICBvZmZzZXQgLyBmcy0+YmxvY2tzaXplLCAmcmV0X2ZsYWdzLCAmYmxrKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWlmICgoYmxrID09IDApIHx8IChyZXRfZmxhZ3MgJiBCTUFQX1JFVF9VTklOSVQpKQorCQlyZXR1cm4gMDsKKworCS8qIFplcm8gdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmYik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qIFJlYWQvemVyby93cml0ZSBibG9jayAqLworCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW8sIGJsaywgMSwgYik7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQ7CisKKwltZW1zZXQoYiArIG9mZiwgMCwgZnMtPmJsb2Nrc2l6ZSAtIG9mZik7CisKKwlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgYmxrLCAxLCBiKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKworb3V0OgorCWV4dDJmc19mcmVlX21lbSgmYik7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgdHJ1bmNhdGluZyBpdCBpZiBuZWNlc3NhcnkKKyAqCisgKi8KK2VycmNvZGVfdCBleHQyZnNfZmlsZV9zZXRfc2l6ZTIoZXh0Ml9maWxlX3QgZmlsZSwgZXh0Ml9vZmY2NF90IHNpemUpCit7CisJZXh0Ml9vZmY2NF90CW9sZF9zaXplOworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrNjRfdAkJb2xkX3RydW5jYXRlLCB0cnVuY2F0ZV9ibG9jazsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZmlsZSwgRVhUMl9FVF9NQUdJQ19FWFQyX0ZJTEUpOworCisJaWYgKHNpemUgJiYgZXh0MmZzX2ZpbGVfYmxvY2tfb2Zmc2V0X3Rvb19iaWcoZmlsZS0+ZnMsICZmaWxlLT5pbm9kZSwKKwkJCQkJKHNpemUgLSAxKSAvIGZpbGUtPmZzLT5ibG9ja3NpemUpKQorCQlyZXR1cm4gRVhUMl9FVF9GSUxFX1RPT19CSUc7CisJdHJ1bmNhdGVfYmxvY2sgPSAoKHNpemUgKyBmaWxlLT5mcy0+YmxvY2tzaXplIC0gMSkgPj4KKwkJCSAgRVhUMl9CTE9DS19TSVpFX0JJVFMoZmlsZS0+ZnMtPnN1cGVyKSk7CisJb2xkX3NpemUgPSBFWFQyX0lfU0laRSgmZmlsZS0+aW5vZGUpOworCW9sZF90cnVuY2F0ZSA9ICgob2xkX3NpemUgKyBmaWxlLT5mcy0+YmxvY2tzaXplIC0gMSkgPj4KKwkJICAgICAgRVhUMl9CTE9DS19TSVpFX0JJVFMoZmlsZS0+ZnMtPnN1cGVyKSk7CisKKwlyZXR2YWwgPSBleHQyZnNfaW5vZGVfc2l6ZV9zZXQoZmlsZS0+ZnMsICZmaWxlLT5pbm9kZSwgc2l6ZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmIChmaWxlLT5pbm8pIHsKKwkJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGZpbGUtPmZzLCBmaWxlLT5pbm8sICZmaWxlLT5pbm9kZSk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJldHZhbCA9IGV4dDJmc19maWxlX3plcm9fcGFzdF9vZmZzZXQoZmlsZSwgc2l6ZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmICh0cnVuY2F0ZV9ibG9jayA+PSBvbGRfdHJ1bmNhdGUpCisJCXJldHVybiAwOworCisJcmV0dXJuIGV4dDJmc19wdW5jaChmaWxlLT5mcywgZmlsZS0+aW5vLCAmZmlsZS0+aW5vZGUsIDAsCisJCQkgICAgdHJ1bmNhdGVfYmxvY2ssIH4wVUxMKTsKK30KKworZXJyY29kZV90IGV4dDJmc19maWxlX3NldF9zaXplKGV4dDJfZmlsZV90IGZpbGUsIGV4dDJfb2ZmX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gZXh0MmZzX2ZpbGVfc2V0X3NpemUyKGZpbGUsIHNpemUpOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9maW5kZGV2LmMgYi9saWIvZXh0MmZzL2ZpbmRkZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTE2MDhkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9maW5kZGV2LmMKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBmaW5kZGV2LmMgLS0gdGhpcyByb3V0aW5lIGF0dGVtcHRzIHRvIGZpbmQgYSBwYXJ0aWN1bGFyIGRldmljZSBpbgorICogCS9kZXYKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfTUtERVZfSAorI2luY2x1ZGUgPHN5cy9ta2Rldi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorCitzdHJ1Y3QgZGlyX2xpc3QgeworCWNoYXIJKm5hbWU7CisJc3RydWN0IGRpcl9saXN0ICpuZXh0OworfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyBhbiBlbnRyeSB0byB0aGUgZGlyZWN0b3J5IGxpc3QKKyAqLworc3RhdGljIHZvaWQgYWRkX3RvX2Rpcmxpc3QoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRpcl9saXN0ICoqbGlzdCkKK3sKKwlzdHJ1Y3QgZGlyX2xpc3QgKmRwOworCisJZHAgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaXJfbGlzdCkpOworCWlmICghZHApCisJCXJldHVybjsKKwlkcC0+bmFtZSA9IG1hbGxvYyhzdHJsZW4obmFtZSkrMSk7CisJaWYgKCFkcC0+bmFtZSkgeworCQlmcmVlKGRwKTsKKwkJcmV0dXJuOworCX0KKwlzdHJjcHkoZHAtPm5hbWUsIG5hbWUpOworCWRwLT5uZXh0ID0gKmxpc3Q7CisJKmxpc3QgPSBkcDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgYSBkaXJlY3RvcnkgbGlzdAorICovCitzdGF0aWMgdm9pZCBmcmVlX2Rpcmxpc3Qoc3RydWN0IGRpcl9saXN0ICoqbGlzdCkKK3sKKwlzdHJ1Y3QgZGlyX2xpc3QgKmRwLCAqbmV4dDsKKworCWZvciAoZHAgPSAqbGlzdDsgZHA7IGRwID0gbmV4dCkgeworCQluZXh0ID0gZHAtPm5leHQ7CisJCWZyZWUoZHAtPm5hbWUpOworCQlmcmVlKGRwKTsKKwl9CisJKmxpc3QgPSAwOworfQorCitzdGF0aWMgaW50IHNjYW5fZGlyKGNoYXIgKmRpcm5hbWUsIGRldl90IGRldmljZSwgc3RydWN0IGRpcl9saXN0ICoqbGlzdCwKKwkJICAgIGNoYXIgKipyZXRfcGF0aCkKK3sKKwlESVIJKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICpkcDsKKwljaGFyCXBhdGhbMTAyNF0sICpjcDsKKwlpbnQJZGlybGVuOworCXN0cnVjdCBzdGF0IHN0OworCisJZGlybGVuID0gc3RybGVuKGRpcm5hbWUpOworCWlmICgoZGlyID0gb3BlbmRpcihkaXJuYW1lKSkgPT0gTlVMTCkKKwkJcmV0dXJuIGVycm5vOworCWRwID0gcmVhZGRpcihkaXIpOworCXdoaWxlIChkcCkgeworCQlpZiAoZGlybGVuICsgc3RybGVuKGRwLT5kX25hbWUpICsgMiA+PSBzaXplb2YocGF0aCkpCisJCQlnb3RvIHNraXBfdG9fbmV4dDsKKwkJaWYgKGRwLT5kX25hbWVbMF0gPT0gJy4nICYmCisJCSAgICAoKGRwLT5kX25hbWVbMV0gPT0gMCkgfHwKKwkJICAgICAoKGRwLT5kX25hbWVbMV0gPT0gJy4nKSAmJiAoZHAtPmRfbmFtZVsyXSA9PSAwKSkpKQorCQkJZ290byBza2lwX3RvX25leHQ7CisJCXNwcmludGYocGF0aCwgIiVzLyVzIiwgZGlybmFtZSwgZHAtPmRfbmFtZSk7CisJCWlmIChzdGF0KHBhdGgsICZzdCkgPCAwKQorCQkJZ290byBza2lwX3RvX25leHQ7CisJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKQorCQkJYWRkX3RvX2Rpcmxpc3QocGF0aCwgbGlzdCk7CisJCWlmIChTX0lTQkxLKHN0LnN0X21vZGUpICYmIHN0LnN0X3JkZXYgPT0gZGV2aWNlKSB7CisJCQljcCA9IG1hbGxvYyhzdHJsZW4ocGF0aCkrMSk7CisJCQlpZiAoIWNwKSB7CisJCQkJY2xvc2VkaXIoZGlyKTsKKwkJCQlyZXR1cm4gRU5PTUVNOworCQkJfQorCQkJc3RyY3B5KGNwLCBwYXRoKTsKKwkJCSpyZXRfcGF0aCA9IGNwOworCQkJZ290byBzdWNjZXNzOworCQl9CisJc2tpcF90b19uZXh0OgorCQlkcCA9IHJlYWRkaXIoZGlyKTsKKwl9CitzdWNjZXNzOgorCWNsb3NlZGlyKGRpcik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBwYXRobmFtZSB0byBhIGJsb2NrIGRldmljZSB3aXRoIGEgZ2l2ZW4KKyAqIGRldmljZSBudW1iZXIuICBJdCByZXR1cm5zIGEgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5IHRvIHRoZQorICogcGF0aG5hbWUgb24gc3VjY2VzcywgYW5kIE5VTEwgb24gZmFpbHVyZS4KKyAqLworY2hhciAqZXh0MmZzX2ZpbmRfYmxvY2tfZGV2aWNlKGRldl90IGRldmljZSkKK3sKKwlzdHJ1Y3QgZGlyX2xpc3QgKmxpc3QgPSAwLCAqbmV3X2xpc3QgPSAwOworCXN0cnVjdCBkaXJfbGlzdCAqY3VycmVudDsKKwljaGFyCSpyZXRfcGF0aCA9IDA7CisJaW50ICAgIGxldmVsID0gMDsKKworCS8qCisJICogQWRkIHRoZSBzdGFydGluZyBkaXJlY3RvcmllcyB0byBzZWFyY2guLi4KKwkgKi8KKwlhZGRfdG9fZGlybGlzdCgiL2RldmljZXMiLCAmbGlzdCk7CisJYWRkX3RvX2Rpcmxpc3QoIi9kZXZmcyIsICZsaXN0KTsKKwlhZGRfdG9fZGlybGlzdCgiL2RldiIsICZsaXN0KTsKKworCXdoaWxlIChsaXN0KSB7CisJCWN1cnJlbnQgPSBsaXN0OworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKyNpZmRlZiBERUJVRworCQlwcmludGYoIlNjYW5uaW5nIGRpcmVjdG9yeSAlc1xuIiwgY3VycmVudC0+bmFtZSk7CisjZW5kaWYKKwkJc2Nhbl9kaXIoY3VycmVudC0+bmFtZSwgZGV2aWNlLCAmbmV3X2xpc3QsICZyZXRfcGF0aCk7CisJCWZyZWUoY3VycmVudC0+bmFtZSk7CisJCWZyZWUoY3VycmVudCk7CisJCWlmIChyZXRfcGF0aCkKKwkJCWJyZWFrOworCQkvKgorCQkgKiBJZiB3ZSdyZSBkb25lIGNoZWNraW5nIGF0IHRoaXMgbGV2ZWwsIGRlc2NlbmQgdG8KKwkJICogdGhlIG5leHQgbGV2ZWwgb2Ygc3ViZGlyZWN0b3JpZXMuIChicmVhZHRoLWZpcnN0KQorCQkgKi8KKwkJaWYgKGxpc3QgPT0gMCkgeworCQkJbGlzdCA9IG5ld19saXN0OworCQkJbmV3X2xpc3QgPSAwOworCQkJLyogQXZvaWQgaW5maW5pdGUgbG9vcCAqLworCQkJaWYgKCsrbGV2ZWwgPj0gRVhUMkZTX01BWF9ORVNURURfTElOS1MpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJZnJlZV9kaXJsaXN0KCZsaXN0KTsKKwlmcmVlX2Rpcmxpc3QoJm5ld19saXN0KTsKKwlyZXR1cm4gcmV0X3BhdGg7Cit9CisKKworI2lmZGVmIERFQlVHCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisJY2hhcgkqZGV2bmFtZSwgKnRtcDsKKwlpbnQJbWFqb3IsIG1pbm9yOworCWRldl90CWRldmljZTsKKwljb25zdCBjaGFyICplcnJtc2cgPSAiQ291bGRuJ3QgcGFyc2UgJXM6ICVzXG4iOworCisJaWYgKChhcmdjICE9IDIpICYmIChhcmdjICE9IDMpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIGRldmljZV9udW1iZXJcbiIsIGFyZ3ZbMF0pOworCQlmcHJpbnRmKHN0ZGVyciwgIlx0OiAlcyBtYWpvciBtaW5vclxuIiwgYXJndlswXSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChhcmdjID09IDIpIHsKKwkJZGV2aWNlID0gc3RydG91bChhcmd2WzFdLCAmdG1wLCAwKTsKKwkJaWYgKCp0bXApIHsKKwkJCWZwcmludGYoc3RkZXJyLCBlcnJtc2csICJkZXZpY2UgbnVtYmVyIiwgYXJndlsxXSk7CisJCQlleGl0KDEpOworCQl9CisJfSBlbHNlIHsKKwkJbWFqb3IgPSBzdHJ0b3VsKGFyZ3ZbMV0sICZ0bXAsIDApOworCQlpZiAoKnRtcCkgeworCQkJZnByaW50ZihzdGRlcnIsIGVycm1zZywgIm1ham9yIG51bWJlciIsIGFyZ3ZbMV0pOworCQkJZXhpdCgxKTsKKwkJfQorCQltaW5vciA9IHN0cnRvdWwoYXJndlsyXSwgJnRtcCwgMCk7CisJCWlmICgqdG1wKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgZXJybXNnLCAibWlub3IgbnVtYmVyIiwgYXJndlsyXSk7CisJCQlleGl0KDEpOworCQl9CisJCWRldmljZSA9IG1ha2VkZXYobWFqb3IsIG1pbm9yKTsKKwkJcHJpbnRmKCJMb29raW5nIGZvciBkZXZpY2UgMHglMDR4ICglZDolZClcbiIsIGRldmljZSwKKwkJICAgICAgIG1ham9yLCBtaW5vcik7CisJfQorCWRldm5hbWUgPSBleHQyZnNfZmluZF9ibG9ja19kZXZpY2UoZGV2aWNlKTsKKwlpZiAoZGV2bmFtZSkgeworCQlwcmludGYoIkZvdW5kIGRldmljZSEgICVzXG4iLCBkZXZuYW1lKTsKKwkJZnJlZShkZXZuYW1lKTsKKwl9IGVsc2UgeworCQlwcmludGYoIkNvdWxkbid0IGZpbmQgZGV2aWNlLlxuIik7CisJfQorCXJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvZmx1c2hiLmMgYi9saWIvZXh0MmZzL2ZsdXNoYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ODIxZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2ZsdXNoYi5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBmbHVzaGIuYyAtLS0gSGlkZXMgc3lzdGVtLWRlcGVuZGVudCBpbmZvcm1hdGlvbiBmb3IgYm90aCBzeW5jaW5nIGEKKyAqIAlkZXZpY2UgdG8gZGlzayBhbmQgdG8gZmx1c2ggYW55IGJ1ZmZlcnMgZnJvbSBkaXNrIGNhY2hlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX01PVU5UX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4JCS8qIFRoaXMgbWF5IGRlZmluZSBCTEtGTFNCVUYgKi8KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisvKgorICogRm9yIExpbnV4LCBkZWZpbmUgQkxLRkxTQlVGIGFuZCBGREZMVVNIIGlmIG5lY2Vzc2FyeSwgc2luY2UKKyAqIG5vdCBhbGwgcG9ydGFibGUgaGVhZGVyIGZpbGUgZG9lcyBzbyBmb3IgdXMuICBUaGlzIHJlYWxseSBzaG91bGQgYmUKKyAqIGZpeGVkIGluIHRoZSBnbGliYyBoZWFkZXIgZmlsZXMuICAoUmVjZW50IGdsaWJjcyBhcHBlYXIgdG8gZGVmaW5lCisgKiBCTEtGTFNCVUYgaW4gc3lzL21vdW50LmgsIGJ1dCBGREZMVVNIIHN0aWxsIGRvZXNuJ3Qgc2VlbSB0byBiZQorICogZGVmaW5lZCBhbnl3aGVyZSBwb3J0YWJsZS4pICBVbnRpbCB0aGVuLi4uLgorICovCisjaWZkZWYgX19saW51eF9fCisjaWZuZGVmIEJMS0ZMU0JVRgorI2RlZmluZSBCTEtGTFNCVUYJX0lPKDB4MTIsOTcpCS8qIGZsdXNoIGJ1ZmZlciBjYWNoZSAqLworI2VuZGlmCisjaWZuZGVmIEZERkxVU0gKKyNkZWZpbmUgRkRGTFVTSAkJX0lPKDIsMHg0YikJLyogZmx1c2ggZmxvcHB5IGRpc2sgKi8KKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc3luYyBhIGRldmljZS9maWxlLCBhbmQgb3B0aW9uYWxseSBhdHRlbXB0IHRvCisgKiBmbHVzaCB0aGUgYnVmZmVyIGNhY2hlLiAgVGhlIGxhdHRlciBpcyBiYXNpY2FsbHkgb25seSB1c2VmdWwgZm9yCisgKiBzeXN0ZW0gYmVuY2htYXJrcyBhbmQgZm9yIHRvcnR1cmluZyBzeXN0ZW1zIGluIGJ1cm4taW4gdGVzdHMuICA6KQorICovCitlcnJjb2RlX3QgZXh0MmZzX3N5bmNfZGV2aWNlKGludCBmZCwgaW50IGZsdXNoYikKK3sKKwkvKgorCSAqIFdlIGFsd2F5cyBzeW5jIHRoZSBkZXZpY2UgaW4gY2FzZSB3ZSdyZSBydW5uaW5nIG9uIG9sZAorCSAqIGtlcm5lbHMgZm9yIHdoaWNoIHdlIGNhbiBsb3NlIGRhdGEgaWYgd2UgZG9uJ3QuICAoVGhlcmUKKwkgKiBzdGlsbCBpcyBhIHJhY2UgY29uZGl0aW9uIGZvciB0aG9zZSBrZXJuZWxzLCBidXQgdGhpcworCSAqIHJlZHVjZXMgaXQgZ3JlYXRseS4pCisJICovCisJaWYgKGZzeW5jIChmZCkgPT0gLTEpCisJCXJldHVybiBlcnJubzsKKworCWlmIChmbHVzaGIpIHsKKworI2lmZGVmIEJMS0ZMU0JVRgorCQlpZiAoaW9jdGwgKGZkLCBCTEtGTFNCVUYsIDApID09IDApCisJCQlyZXR1cm4gMDsKKyNlbGlmIGRlZmluZWQoX19saW51eF9fKQorI3dhcm5pbmcgQkxLRkxTQlVGIG5vdCBkZWZpbmVkCisjZW5kaWYKKyNpZmRlZiBGREZMVVNICisJCXJldHVybiBpb2N0bChmZCwgRkRGTFVTSCwgMCk7ICAgLyogSW4gY2FzZSB0aGlzIGlzIGEgZmxvcHB5ICovCisjZWxpZiBkZWZpbmVkKF9fbGludXhfXykKKyN3YXJuaW5nIEZERkxVU0ggbm90IGRlZmluZWQKKyNlbmRpZgorCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvZnJlZWZzLmMgYi9saWIvZXh0MmZzL2ZyZWVmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZDJkOTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2ZyZWVmcy5jCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogZnJlZWZzLmMgLS0tIGZyZWUgYW4gZXh0MiBmaWxlc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnNQLmgiCisKK3N0YXRpYyB2b2lkIGV4dDJmc19mcmVlX2lub2RlX2NhY2hlKHN0cnVjdCBleHQyX2lub2RlX2NhY2hlICppY2FjaGUpOworCit2b2lkIGV4dDJmc19mcmVlKGV4dDJfZmlsc3lzIGZzKQoreworCWlmICghZnMgfHwgKGZzLT5tYWdpYyAhPSBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpKQorCQlyZXR1cm47CisJaWYgKGZzLT5pbWFnZV9pbyAhPSBmcy0+aW8pIHsKKwkJaWYgKGZzLT5pbWFnZV9pbykKKwkJCWlvX2NoYW5uZWxfY2xvc2UoZnMtPmltYWdlX2lvKTsKKwl9CisJaWYgKGZzLT5pbykgeworCQlpb19jaGFubmVsX2Nsb3NlKGZzLT5pbyk7CisJfQorCWlmIChmcy0+ZGV2aWNlX25hbWUpCisJCWV4dDJmc19mcmVlX21lbSgmZnMtPmRldmljZV9uYW1lKTsKKwlpZiAoZnMtPnN1cGVyKQorCQlleHQyZnNfZnJlZV9tZW0oJmZzLT5zdXBlcik7CisJaWYgKGZzLT5vcmlnX3N1cGVyKQorCQlleHQyZnNfZnJlZV9tZW0oJmZzLT5vcmlnX3N1cGVyKTsKKwlpZiAoZnMtPmdyb3VwX2Rlc2MpCisJCWV4dDJmc19mcmVlX21lbSgmZnMtPmdyb3VwX2Rlc2MpOworCWlmIChmcy0+YmxvY2tfbWFwKQorCQlleHQyZnNfZnJlZV9ibG9ja19iaXRtYXAoZnMtPmJsb2NrX21hcCk7CisJaWYgKGZzLT5pbm9kZV9tYXApCisJCWV4dDJmc19mcmVlX2lub2RlX2JpdG1hcChmcy0+aW5vZGVfbWFwKTsKKwlpZiAoZnMtPmltYWdlX2hlYWRlcikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZmcy0+aW1hZ2VfaGVhZGVyKTsKKworCWlmIChmcy0+YmFkYmxvY2tzKQorCQlleHQyZnNfYmFkYmxvY2tzX2xpc3RfZnJlZShmcy0+YmFkYmxvY2tzKTsKKwlmcy0+YmFkYmxvY2tzID0gMDsKKworCWlmIChmcy0+ZGJsaXN0KQorCQlleHQyZnNfZnJlZV9kYmxpc3QoZnMtPmRibGlzdCk7CisKKwlpZiAoZnMtPmljYWNoZSkKKwkJZXh0MmZzX2ZyZWVfaW5vZGVfY2FjaGUoZnMtPmljYWNoZSk7CisKKwlpZiAoZnMtPm1tcF9idWYpCisJCWV4dDJmc19mcmVlX21lbSgmZnMtPm1tcF9idWYpOworCWlmIChmcy0+bW1wX2NtcCkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZmcy0+bW1wX2NtcCk7CisKKwlmcy0+bWFnaWMgPSAwOworCisJZXh0MmZzX2ZyZWVfbWVtKCZmcyk7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBpbm9kZSBjYWNoZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgZXh0MmZzX2ZyZWVfaW5vZGVfY2FjaGUoc3RydWN0IGV4dDJfaW5vZGVfY2FjaGUgKmljYWNoZSkKK3sKKwlpZiAoLS1pY2FjaGUtPnJlZmNvdW50KQorCQlyZXR1cm47CisJaWYgKGljYWNoZS0+YnVmZmVyKQorCQlleHQyZnNfZnJlZV9tZW0oJmljYWNoZS0+YnVmZmVyKTsKKwlpZiAoaWNhY2hlLT5jYWNoZSkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZpY2FjaGUtPmNhY2hlKTsKKwlpY2FjaGUtPmJ1ZmZlcl9ibGsgPSAwOworCWV4dDJmc19mcmVlX21lbSgmaWNhY2hlKTsKK30KKworLyoKKyAqIFRoaXMgcHJvY2VkdXJlIGZyZWVzIGEgYmFkYmxvY2tzIGxpc3QuCisgKi8KK3ZvaWQgZXh0MmZzX3UzMl9saXN0X2ZyZWUoZXh0Ml91MzJfbGlzdCBiYikKK3sKKwlpZiAoYmItPm1hZ2ljICE9IEVYVDJfRVRfTUFHSUNfQkFEQkxPQ0tTX0xJU1QpCisJCXJldHVybjsKKworCWlmIChiYi0+bGlzdCkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZiYi0+bGlzdCk7CisJYmItPmxpc3QgPSAwOworCWV4dDJmc19mcmVlX21lbSgmYmIpOworfQorCit2b2lkIGV4dDJmc19iYWRibG9ja3NfbGlzdF9mcmVlKGV4dDJfYmFkYmxvY2tzX2xpc3QgYmIpCit7CisJZXh0MmZzX3UzMl9saXN0X2ZyZWUoKGV4dDJfdTMyX2xpc3QpIGJiKTsKK30KKworCisvKgorICogRnJlZSBhIGRpcmVjdG9yeSBibG9jayBsaXN0CisgKi8KK3ZvaWQgZXh0MmZzX2ZyZWVfZGJsaXN0KGV4dDJfZGJsaXN0IGRibGlzdCkKK3sKKwlpZiAoIWRibGlzdCB8fCAoZGJsaXN0LT5tYWdpYyAhPSBFWFQyX0VUX01BR0lDX0RCTElTVCkpCisJCXJldHVybjsKKworCWlmIChkYmxpc3QtPmxpc3QpCisJCWV4dDJmc19mcmVlX21lbSgmZGJsaXN0LT5saXN0KTsKKwlkYmxpc3QtPmxpc3QgPSAwOworCWlmIChkYmxpc3QtPmZzICYmIGRibGlzdC0+ZnMtPmRibGlzdCA9PSBkYmxpc3QpCisJCWRibGlzdC0+ZnMtPmRibGlzdCA9IDA7CisJZGJsaXN0LT5tYWdpYyA9IDA7CisJZXh0MmZzX2ZyZWVfbWVtKCZkYmxpc3QpOworfQorCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2dlbl9iaXRtYXAuYyBiL2xpYi9leHQyZnMvZ2VuX2JpdG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZDZmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2dlbl9iaXRtYXAuYwpAQCAtMCwwICsxLDYwNyBAQAorLyoKKyAqIGdlbl9iaXRtYXAuYyAtLS0gR2VuZXJpYyAoMzItYml0KSBiaXRtYXAgcm91dGluZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmc1AuaCIKKworc3RydWN0IGV4dDJmc19zdHJ1Y3RfZ2VuZXJpY19iaXRtYXAgeworCWVycmNvZGVfdAltYWdpYzsKKwlleHQyX2ZpbHN5cyAJZnM7CisJX191MzIJCXN0YXJ0LCBlbmQ7CisJX191MzIJCXJlYWxfZW5kOworCWNoYXIJKglkZXNjcmlwdGlvbjsKKwljaGFyCSoJYml0bWFwOworCWVycmNvZGVfdAliYXNlX2Vycm9yX2NvZGU7CisJX191MzIJCXJlc2VydmVkWzddOworfTsKKworI2RlZmluZSBFWFQyRlNfSVNfMzJfQklUTUFQKGJtYXApIFwKKwkoKChibWFwKS0+bWFnaWMgPT0gRVhUMl9FVF9NQUdJQ19HRU5FUklDX0JJVE1BUCkgfHwgXAorCSAoKGJtYXApLT5tYWdpYyA9PSBFWFQyX0VUX01BR0lDX0JMT0NLX0JJVE1BUCkgfHwgXAorCSAoKGJtYXApLT5tYWdpYyA9PSBFWFQyX0VUX01BR0lDX0lOT0RFX0JJVE1BUCkpCisKKyNkZWZpbmUgRVhUMkZTX0lTXzY0X0JJVE1BUChibWFwKSBcCisJKCgoYm1hcCktPm1hZ2ljID09IEVYVDJfRVRfTUFHSUNfR0VORVJJQ19CSVRNQVA2NCkgfHwgXAorCSAoKGJtYXApLT5tYWdpYyA9PSBFWFQyX0VUX01BR0lDX0JMT0NLX0JJVE1BUDY0KSB8fCBcCisJICgoYm1hcCktPm1hZ2ljID09IEVYVDJfRVRfTUFHSUNfSU5PREVfQklUTUFQNjQpKQorCisvKgorICogVXNlZCBieSBwcmV2aW91c2x5IGlubGluZWQgZnVuY3Rpb24sIHNvIHdlIGhhdmUgdG8gZXhwb3J0IHRoaXMgYW5kCisgKiBub3QgY2hhbmdlIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUKKyAqLwordm9pZCBleHQyZnNfd2Fybl9iaXRtYXAyKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkgICAgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworI2lmbmRlZiBPTUlUX0NPTV9FUlIKKwlpZiAoYml0bWFwLT5kZXNjcmlwdGlvbikKKwkJY29tX2VycigwLCBiaXRtYXAtPmJhc2VfZXJyb3JfY29kZStjb2RlLAorCQkJIiMlbHUgZm9yICVzIiwgYXJnLCBiaXRtYXAtPmRlc2NyaXB0aW9uKTsKKwllbHNlCisJCWNvbV9lcnIoMCwgYml0bWFwLT5iYXNlX2Vycm9yX2NvZGUgKyBjb2RlLCAiIyVsdSIsIGFyZyk7CisjZW5kaWYKK30KKworc3RhdGljIGVycmNvZGVfdCBjaGVja19tYWdpYyhleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKQoreworCWlmICghYml0bWFwIHx8ICEoKGJpdG1hcC0+bWFnaWMgPT0gRVhUMl9FVF9NQUdJQ19HRU5FUklDX0JJVE1BUCkgfHwKKwkJCSAoYml0bWFwLT5tYWdpYyA9PSBFWFQyX0VUX01BR0lDX0lOT0RFX0JJVE1BUCkgfHwKKwkJCSAoYml0bWFwLT5tYWdpYyA9PSBFWFQyX0VUX01BR0lDX0JMT0NLX0JJVE1BUCkpKQorCQlyZXR1cm4gRVhUMl9FVF9NQUdJQ19HRU5FUklDX0JJVE1BUDsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19tYWtlX2dlbmVyaWNfYml0bWFwKGVycmNvZGVfdCBtYWdpYywgZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgICBfX3UzMiBzdGFydCwgX191MzIgZW5kLCBfX3UzMiByZWFsX2VuZCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmRlc2NyLCBjaGFyICppbml0X21hcCwKKwkJCQkgICAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCAqcmV0KQoreworCWV4dDJmc19nZW5lcmljX2JpdG1hcAliaXRtYXA7CisJZXJyY29kZV90CQlyZXR2YWw7CisJc2l6ZV90CQkJc2l6ZTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgZXh0MmZzX3N0cnVjdF9nZW5lcmljX2JpdG1hcCksCisJCQkJJmJpdG1hcCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWJpdG1hcC0+bWFnaWMgPSBtYWdpYzsKKwliaXRtYXAtPmZzID0gZnM7CisJYml0bWFwLT5zdGFydCA9IHN0YXJ0OworCWJpdG1hcC0+ZW5kID0gZW5kOworCWJpdG1hcC0+cmVhbF9lbmQgPSByZWFsX2VuZDsKKwlzd2l0Y2ggKG1hZ2ljKSB7CisJY2FzZSBFWFQyX0VUX01BR0lDX0lOT0RFX0JJVE1BUDoKKwkJYml0bWFwLT5iYXNlX2Vycm9yX2NvZGUgPSBFWFQyX0VUX0JBRF9JTk9ERV9NQVJLOworCQlicmVhazsKKwljYXNlIEVYVDJfRVRfTUFHSUNfQkxPQ0tfQklUTUFQOgorCQliaXRtYXAtPmJhc2VfZXJyb3JfY29kZSA9IEVYVDJfRVRfQkFEX0JMT0NLX01BUks7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJpdG1hcC0+YmFzZV9lcnJvcl9jb2RlID0gRVhUMl9FVF9CQURfR0VORVJJQ19NQVJLOworCX0KKwlpZiAoZGVzY3IpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc3RybGVuKGRlc2NyKSsxLCAmYml0bWFwLT5kZXNjcmlwdGlvbik7CisJCWlmIChyZXR2YWwpIHsKKwkJCWV4dDJmc19mcmVlX21lbSgmYml0bWFwKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJc3RyY3B5KGJpdG1hcC0+ZGVzY3JpcHRpb24sIGRlc2NyKTsKKwl9IGVsc2UKKwkJYml0bWFwLT5kZXNjcmlwdGlvbiA9IDA7CisKKwlzaXplID0gKHNpemVfdCkgKCgoYml0bWFwLT5yZWFsX2VuZCAtIGJpdG1hcC0+c3RhcnQpIC8gOCkgKyAxKTsKKwkvKiBSb3VuZCB1cCB0byBhbGxvdyBmb3IgdGhlIEJUIHg4NiBpbnN0cnVjdGlvbiAqLworCXNpemUgPSAoc2l6ZSArIDcpICYgfjM7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZSwgJmJpdG1hcC0+Yml0bWFwKTsKKwlpZiAocmV0dmFsKSB7CisJCWV4dDJmc19mcmVlX21lbSgmYml0bWFwLT5kZXNjcmlwdGlvbik7CisJCWV4dDJmc19mcmVlX21lbSgmYml0bWFwKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoaW5pdF9tYXApCisJCW1lbWNweShiaXRtYXAtPmJpdG1hcCwgaW5pdF9tYXAsIHNpemUpOworCWVsc2UKKwkJbWVtc2V0KGJpdG1hcC0+Yml0bWFwLCAwLCBzaXplKTsKKwkqcmV0ID0gYml0bWFwOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2FsbG9jYXRlX2dlbmVyaWNfYml0bWFwKF9fdTMyIHN0YXJ0LAorCQkJCQkgX191MzIgZW5kLAorCQkJCQkgX191MzIgcmVhbF9lbmQsCisJCQkJCSBjb25zdCBjaGFyICpkZXNjciwKKwkJCQkJIGV4dDJmc19nZW5lcmljX2JpdG1hcCAqcmV0KQoreworCXJldHVybiBleHQyZnNfbWFrZV9nZW5lcmljX2JpdG1hcChFWFQyX0VUX01BR0lDX0dFTkVSSUNfQklUTUFQLCAwLAorCQkJCQkgIHN0YXJ0LCBlbmQsIHJlYWxfZW5kLCBkZXNjciwgMCwgcmV0KTsKK30KKworZXJyY29kZV90IGV4dDJmc19jb3B5X2dlbmVyaWNfYml0bWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBzcmMsCisJCQkJICAgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgKmRlc3QpCit7CisJcmV0dXJuIChleHQyZnNfbWFrZV9nZW5lcmljX2JpdG1hcChzcmMtPm1hZ2ljLCBzcmMtPmZzLAorCQkJCQkgICBzcmMtPnN0YXJ0LCBzcmMtPmVuZCwKKwkJCQkJICAgc3JjLT5yZWFsX2VuZCwKKwkJCQkJICAgc3JjLT5kZXNjcmlwdGlvbiwgc3JjLT5iaXRtYXAsCisJCQkJCSAgIGRlc3QpKTsKK30KKwordm9pZCBleHQyZnNfZnJlZV9nZW5lcmljX2JpdG1hcChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCkKK3sKKwlpZiAoY2hlY2tfbWFnaWMoYml0bWFwKSkKKwkJcmV0dXJuOworCisJYml0bWFwLT5tYWdpYyA9IDA7CisJaWYgKGJpdG1hcC0+ZGVzY3JpcHRpb24pIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZiaXRtYXAtPmRlc2NyaXB0aW9uKTsKKwkJYml0bWFwLT5kZXNjcmlwdGlvbiA9IDA7CisJfQorCWlmIChiaXRtYXAtPmJpdG1hcCkgeworCQlleHQyZnNfZnJlZV9tZW0oJmJpdG1hcC0+Yml0bWFwKTsKKwkJYml0bWFwLT5iaXRtYXAgPSAwOworCX0KKwlleHQyZnNfZnJlZV9tZW0oJmJpdG1hcCk7Cit9CisKK2ludCBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCQlibGtfdCBiaXRubykKK3sKKwlpZiAoIUVYVDJGU19JU18zMl9CSVRNQVAoYml0bWFwKSkgeworCQlpZiAoRVhUMkZTX0lTXzY0X0JJVE1BUChiaXRtYXApKSB7CisJCQlleHQyZnNfd2Fybl9iaXRtYXAzMihiaXRtYXAsIF9fZnVuY19fKTsKKwkJCXJldHVybiBleHQyZnNfdGVzdF9nZW5lcmljX2JtYXAoYml0bWFwLCBiaXRubyk7CisJCX0KKyNpZm5kZWYgT01JVF9DT01fRVJSCisJCWNvbV9lcnIoMCwgRVhUMl9FVF9NQUdJQ19HRU5FUklDX0JJVE1BUCwKKwkJCSJ0ZXN0X2JpdG1hcCglbHUpIiwgKHVuc2lnbmVkIGxvbmcpIGJpdG5vKTsKKyNlbmRpZgorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKGJpdG5vIDwgYml0bWFwLT5zdGFydCkgfHwgKGJpdG5vID4gYml0bWFwLT5lbmQpKSB7CisJCWV4dDJmc193YXJuX2JpdG1hcDIoYml0bWFwLCBFWFQyRlNfVEVTVF9FUlJPUiwgYml0bm8pOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGV4dDJmc190ZXN0X2JpdChiaXRubyAtIGJpdG1hcC0+c3RhcnQsIGJpdG1hcC0+Yml0bWFwKTsKK30KKworaW50IGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJCSBfX3UzMiBiaXRubykKK3sKKwlpZiAoIUVYVDJGU19JU18zMl9CSVRNQVAoYml0bWFwKSkgeworCQlpZiAoRVhUMkZTX0lTXzY0X0JJVE1BUChiaXRtYXApKSB7CisJCQlleHQyZnNfd2Fybl9iaXRtYXAzMihiaXRtYXAsIF9fZnVuY19fKTsKKwkJCXJldHVybiBleHQyZnNfbWFya19nZW5lcmljX2JtYXAoYml0bWFwLCBiaXRubyk7CisJCX0KKyNpZm5kZWYgT01JVF9DT01fRVJSCisJCWNvbV9lcnIoMCwgRVhUMl9FVF9NQUdJQ19HRU5FUklDX0JJVE1BUCwKKwkJCSJtYXJrX2JpdG1hcCglbHUpIiwgKHVuc2lnbmVkIGxvbmcpIGJpdG5vKTsKKyNlbmRpZgorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKGJpdG5vIDwgYml0bWFwLT5zdGFydCkgfHwgKGJpdG5vID4gYml0bWFwLT5lbmQpKSB7CisJCWV4dDJmc193YXJuX2JpdG1hcDIoYml0bWFwLCBFWFQyRlNfTUFSS19FUlJPUiwgYml0bm8pOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGV4dDJmc19zZXRfYml0KGJpdG5vIC0gYml0bWFwLT5zdGFydCwgYml0bWFwLT5iaXRtYXApOworfQorCitpbnQgZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCQkgICBibGtfdCBiaXRubykKK3sKKwlpZiAoIUVYVDJGU19JU18zMl9CSVRNQVAoYml0bWFwKSkgeworCQlpZiAoRVhUMkZTX0lTXzY0X0JJVE1BUChiaXRtYXApKSB7CisJCQlleHQyZnNfd2Fybl9iaXRtYXAzMihiaXRtYXAsIF9fZnVuY19fKTsKKwkJCXJldHVybiBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYm1hcChiaXRtYXAsIGJpdG5vKTsKKwkJfQorI2lmbmRlZiBPTUlUX0NPTV9FUlIKKwkJY29tX2VycigwLCBFWFQyX0VUX01BR0lDX0dFTkVSSUNfQklUTUFQLAorCQkJIm1hcmtfYml0bWFwKCVsdSkiLCAodW5zaWduZWQgbG9uZykgYml0bm8pOworI2VuZGlmCisJCXJldHVybiAwOworCX0KKworCWlmICgoYml0bm8gPCBiaXRtYXAtPnN0YXJ0KSB8fCAoYml0bm8gPiBiaXRtYXAtPmVuZCkpIHsKKwkJZXh0MmZzX3dhcm5fYml0bWFwMihiaXRtYXAsIEVYVDJGU19VTk1BUktfRVJST1IsIGJpdG5vKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBleHQyZnNfY2xlYXJfYml0KGJpdG5vIC0gYml0bWFwLT5zdGFydCwgYml0bWFwLT5iaXRtYXApOworfQorCitfX3UzMiBleHQyZnNfZ2V0X2dlbmVyaWNfYml0bWFwX3N0YXJ0KGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXApCit7CisJaWYgKCFFWFQyRlNfSVNfMzJfQklUTUFQKGJpdG1hcCkpIHsKKwkJaWYgKEVYVDJGU19JU182NF9CSVRNQVAoYml0bWFwKSkgeworCQkJZXh0MmZzX3dhcm5fYml0bWFwMzIoYml0bWFwLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gZXh0MmZzX2dldF9nZW5lcmljX2JtYXBfc3RhcnQoYml0bWFwKTsKKwkJfQorI2lmbmRlZiBPTUlUX0NPTV9FUlIKKwkJY29tX2VycigwLCBFWFQyX0VUX01BR0lDX0dFTkVSSUNfQklUTUFQLAorCQkJImdldF9iaXRtYXBfc3RhcnQiKTsKKyNlbmRpZgorCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gYml0bWFwLT5zdGFydDsKK30KKworX191MzIgZXh0MmZzX2dldF9nZW5lcmljX2JpdG1hcF9lbmQoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCkKK3sKKwlpZiAoIUVYVDJGU19JU18zMl9CSVRNQVAoYml0bWFwKSkgeworCQlpZiAoRVhUMkZTX0lTXzY0X0JJVE1BUChiaXRtYXApKSB7CisJCQlleHQyZnNfd2Fybl9iaXRtYXAzMihiaXRtYXAsIF9fZnVuY19fKTsKKwkJCXJldHVybiBleHQyZnNfZ2V0X2dlbmVyaWNfYm1hcF9lbmQoYml0bWFwKTsKKwkJfQorI2lmbmRlZiBPTUlUX0NPTV9FUlIKKwkJY29tX2VycigwLCBFWFQyX0VUX01BR0lDX0dFTkVSSUNfQklUTUFQLAorCQkJImdldF9iaXRtYXBfZW5kIik7CisjZW5kaWYKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBiaXRtYXAtPmVuZDsKK30KKwordm9pZCBleHQyZnNfY2xlYXJfZ2VuZXJpY19iaXRtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCkKK3sKKwlpZiAoIUVYVDJGU19JU18zMl9CSVRNQVAoYml0bWFwKSkgeworCQlpZiAoRVhUMkZTX0lTXzY0X0JJVE1BUChiaXRtYXApKSB7CisJCQlleHQyZnNfd2Fybl9iaXRtYXAzMihiaXRtYXAsIF9fZnVuY19fKTsKKwkJCWV4dDJmc19jbGVhcl9nZW5lcmljX2JtYXAoYml0bWFwKTsKKwkJCXJldHVybjsKKwkJfQorI2lmbmRlZiBPTUlUX0NPTV9FUlIKKwkJY29tX2VycigwLCBFWFQyX0VUX01BR0lDX0dFTkVSSUNfQklUTUFQLAorCQkJImNsZWFyX2dlbmVyaWNfYml0bWFwIik7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKworCW1lbXNldChiaXRtYXAtPmJpdG1hcCwgMCwKKwkgICAgICAgKHNpemVfdCkgKCgoYml0bWFwLT5yZWFsX2VuZCAtIGJpdG1hcC0+c3RhcnQpIC8gOCkgKyAxKSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZnVkZ2VfZ2VuZXJpY19iaXRtYXBfZW5kKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCQkgIGVycmNvZGVfdCBtYWdpYywgZXJyY29kZV90IG5lcSwKKwkJCQkJICBleHQyX2lub190IGVuZCwgZXh0Ml9pbm9fdCAqb2VuZCkKK3sKKwlFWFQyX0NIRUNLX01BR0lDKGJpdG1hcCwgbWFnaWMpOworCisJaWYgKGVuZCA+IGJpdG1hcC0+cmVhbF9lbmQpCisJCXJldHVybiBuZXE7CisJaWYgKG9lbmQpCisJCSpvZW5kID0gYml0bWFwLT5lbmQ7CisJYml0bWFwLT5lbmQgPSBlbmQ7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfcmVzaXplX2dlbmVyaWNfYml0bWFwKGVycmNvZGVfdCBtYWdpYywKKwkJCQkgICAgICAgX191MzIgbmV3X2VuZCwgX191MzIgbmV3X3JlYWxfZW5kLAorCQkJCSAgICAgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCXNpemVfdAkJc2l6ZSwgbmV3X3NpemU7CisJX191MzIJCWJpdG5vOworCisJaWYgKCFibWFwIHx8IChibWFwLT5tYWdpYyAhPSBtYWdpYykpCisJCXJldHVybiBtYWdpYzsKKworCS8qCisJICogSWYgd2UncmUgZXhwYW5kaW5nIHRoZSBiaXRtYXAsIG1ha2Ugc3VyZSBhbGwgb2YgdGhlIG5ldworCSAqIHBhcnRzIG9mIHRoZSBiaXRtYXAgYXJlIHplcm8uCisJICovCisJaWYgKG5ld19lbmQgPiBibWFwLT5lbmQpIHsKKwkJYml0bm8gPSBibWFwLT5yZWFsX2VuZDsKKwkJaWYgKGJpdG5vID4gbmV3X2VuZCkKKwkJCWJpdG5vID0gbmV3X2VuZDsKKwkJZm9yICg7IGJpdG5vID4gYm1hcC0+ZW5kOyBiaXRuby0tKQorCQkJZXh0MmZzX2NsZWFyX2JpdChiaXRubyAtIGJtYXAtPnN0YXJ0LCBibWFwLT5iaXRtYXApOworCX0KKwlpZiAobmV3X3JlYWxfZW5kID09IGJtYXAtPnJlYWxfZW5kKSB7CisJCWJtYXAtPmVuZCA9IG5ld19lbmQ7CisJCXJldHVybiAwOworCX0KKworCXNpemUgPSAoKGJtYXAtPnJlYWxfZW5kIC0gYm1hcC0+c3RhcnQpIC8gOCkgKyAxOworCW5ld19zaXplID0gKChuZXdfcmVhbF9lbmQgLSBibWFwLT5zdGFydCkgLyA4KSArIDE7CisKKwlpZiAoc2l6ZSAhPSBuZXdfc2l6ZSkgeworCQlyZXR2YWwgPSBleHQyZnNfcmVzaXplX21lbShzaXplLCBuZXdfc2l6ZSwgJmJtYXAtPmJpdG1hcCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwlpZiAobmV3X3NpemUgPiBzaXplKQorCQltZW1zZXQoYm1hcC0+Yml0bWFwICsgc2l6ZSwgMCwgbmV3X3NpemUgLSBzaXplKTsKKworCWJtYXAtPmVuZCA9IG5ld19lbmQ7CisJYm1hcC0+cmVhbF9lbmQgPSBuZXdfcmVhbF9lbmQ7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfY29tcGFyZV9nZW5lcmljX2JpdG1hcChlcnJjb2RlX3QgbWFnaWMsIGVycmNvZGVfdCBuZXEsCisJCQkJCWV4dDJmc19nZW5lcmljX2JpdG1hcCBibTEsCisJCQkJCWV4dDJmc19nZW5lcmljX2JpdG1hcCBibTIpCit7CisJYmxrX3QJaTsKKworCWlmICghYm0xIHx8IGJtMS0+bWFnaWMgIT0gbWFnaWMpCisJCXJldHVybiBtYWdpYzsKKwlpZiAoIWJtMiB8fCBibTItPm1hZ2ljICE9IG1hZ2ljKQorCQlyZXR1cm4gbWFnaWM7CisKKwlpZiAoKGJtMS0+c3RhcnQgIT0gYm0yLT5zdGFydCkgfHwKKwkgICAgKGJtMS0+ZW5kICE9IGJtMi0+ZW5kKSB8fAorCSAgICAobWVtY21wKGJtMS0+Yml0bWFwLCBibTItPmJpdG1hcCwKKwkJICAgIChzaXplX3QpIChibTEtPmVuZCAtIGJtMS0+c3RhcnQpLzgpKSkKKwkJcmV0dXJuIG5lcTsKKworCWZvciAoaSA9IGJtMS0+ZW5kIC0gKChibTEtPmVuZCAtIGJtMS0+c3RhcnQpICUgOCk7IGkgPD0gYm0xLT5lbmQ7IGkrKykKKwkJaWYgKGV4dDJmc19mYXN0X3Rlc3RfYmxvY2tfYml0bWFwKGJtMSwgaSkgIT0KKwkJICAgIGV4dDJmc19mYXN0X3Rlc3RfYmxvY2tfYml0bWFwKGJtMiwgaSkpCisJCQlyZXR1cm4gbmVxOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZXh0MmZzX3NldF9nZW5lcmljX2JpdG1hcF9wYWRkaW5nKGV4dDJmc19nZW5lcmljX2JpdG1hcCBtYXApCit7CisJX191MzIJaSwgajsKKworCS8qIFByb3RlY3QgbG9vcCBmcm9tIHdyYXAtYXJvdW5kIGlmIG1hcC0+cmVhbF9lbmQgaXMgbWF4ZWQgKi8KKwlmb3IgKGk9bWFwLT5lbmQrMSwgaiA9IGkgLSBtYXAtPnN0YXJ0OworCSAgICAgaSA8PSBtYXAtPnJlYWxfZW5kICYmIGkgPiBtYXAtPmVuZDsKKwkgICAgIGkrKywgaisrKQorCQlleHQyZnNfc2V0X2JpdChqLCBtYXAtPmJpdG1hcCk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZ2V0X2dlbmVyaWNfYml0bWFwX3JhbmdlKGV4dDJmc19nZW5lcmljX2JpdG1hcCBibWFwLAorCQkJCQkgIGVycmNvZGVfdCBtYWdpYywKKwkJCQkJICBfX3UzMiBzdGFydCwgX191MzIgbnVtLAorCQkJCQkgIHZvaWQgKm91dCkKK3sKKwlpZiAoIWJtYXAgfHwgKGJtYXAtPm1hZ2ljICE9IG1hZ2ljKSkKKwkJcmV0dXJuIG1hZ2ljOworCisJaWYgKChzdGFydCA8IGJtYXAtPnN0YXJ0KSB8fCAoc3RhcnQrbnVtLTEgPiBibWFwLT5yZWFsX2VuZCkpCisJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisKKwltZW1jcHkob3V0LCBibWFwLT5iaXRtYXAgKyAoc3RhcnQgPj4gMyksIChudW0rNykgPj4gMyk7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfc2V0X2dlbmVyaWNfYml0bWFwX3JhbmdlKGV4dDJmc19nZW5lcmljX2JpdG1hcCBibWFwLAorCQkJCQkgIGVycmNvZGVfdCBtYWdpYywKKwkJCQkJICBfX3UzMiBzdGFydCwgX191MzIgbnVtLAorCQkJCQkgIHZvaWQgKmluKQoreworCWlmICghYm1hcCB8fCAoYm1hcC0+bWFnaWMgIT0gbWFnaWMpKQorCQlyZXR1cm4gbWFnaWM7CisKKwlpZiAoKHN0YXJ0IDwgYm1hcC0+c3RhcnQpIHx8IChzdGFydCtudW0tMSA+IGJtYXAtPnJlYWxfZW5kKSkKKwkJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKworCW1lbWNweShibWFwLT5iaXRtYXAgKyAoc3RhcnQgPj4gMyksIGluLCAobnVtKzcpID4+IDMpOworCXJldHVybiAwOworfQorCisvKgorICogQ29tcGFyZSBAbWVtIHRvIHplcm8gYnVmZmVyIGJ5IDI1NiBieXRlcy4KKyAqIFJldHVybiAxIGlmIEBtZW0gaXMgemVyb2VkIG1lbW9yeSwgb3RoZXJ3aXNlIHJldHVybiAwLgorICovCitpbnQgZXh0MmZzX21lbV9pc196ZXJvKGNvbnN0IGNoYXIgKm1lbSwgc2l6ZV90IGxlbikKK3sKKwlzdGF0aWMgY29uc3QgY2hhciB6ZXJvX2J1ZlsyNTZdOworCisJd2hpbGUgKGxlbiA+PSBzaXplb2YoemVyb19idWYpKSB7CisJCWlmIChtZW1jbXAobWVtLCB6ZXJvX2J1Ziwgc2l6ZW9mKHplcm9fYnVmKSkpCisJCQlyZXR1cm4gMDsKKwkJbGVuIC09IHNpemVvZih6ZXJvX2J1Zik7CisJCW1lbSArPSBzaXplb2YoemVyb19idWYpOworCX0KKwkvKiBEZWFsIHdpdGggbGVmdG92ZXIgYnl0ZXMuICovCisJaWYgKGxlbikKKwkJcmV0dXJuICFtZW1jbXAobWVtLCB6ZXJvX2J1ZiwgbGVuKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFJldHVybiB0cnVlIGlmIGFsbCBvZiB0aGUgYml0cyBpbiBhIHNwZWNpZmllZCByYW5nZSBhcmUgY2xlYXIKKyAqLworc3RhdGljIGludCBleHQyZnNfdGVzdF9jbGVhcl9nZW5lcmljX2JpdG1hcF9yYW5nZShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCQkJICB1bnNpZ25lZCBpbnQgc3RhcnQsCisJCQkJCQkgIHVuc2lnbmVkIGludCBsZW4pCit7CisJc2l6ZV90IHN0YXJ0X2J5dGUsIGxlbl9ieXRlID0gbGVuID4+IDM7CisJdW5zaWduZWQgaW50IHN0YXJ0X2JpdCwgbGVuX2JpdCA9IGxlbiAlIDg7CisJaW50IGZpcnN0X2JpdCA9IDA7CisJaW50IGxhc3RfYml0ICA9IDA7CisJaW50IG1hcmtfY291bnQgPSAwOworCWludCBtYXJrX2JpdCA9IDA7CisJaW50IGk7CisJY29uc3QgY2hhciAqQUREUiA9IGJpdG1hcC0+Yml0bWFwOworCisJc3RhcnQgLT0gYml0bWFwLT5zdGFydDsKKwlzdGFydF9ieXRlID0gc3RhcnQgPj4gMzsKKwlzdGFydF9iaXQgPSBzdGFydCAlIDg7CisKKwlpZiAoc3RhcnRfYml0ICE9IDApIHsKKwkJLyoKKwkJICogVGhlIGNvbXBhcmVkIHN0YXJ0IGJsb2NrIG51bWJlciBvciBzdGFydCBpbm9kZSBudW1iZXIKKwkJICogaXMgbm90IHRoZSBmaXJzdCBiaXQgaW4gYSBieXRlLgorCQkgKi8KKwkJbWFya19jb3VudCA9IDggLSBzdGFydF9iaXQ7CisJCWlmIChsZW4gPCA4IC0gc3RhcnRfYml0KSB7CisJCQltYXJrX2NvdW50ID0gKGludClsZW47CisJCQltYXJrX2JpdCA9IGxlbiArIHN0YXJ0X2JpdCAtIDE7CisJCX0gZWxzZQorCQkJbWFya19iaXQgPSA3OworCisJCWZvciAoaSA9IG1hcmtfY291bnQ7IGkgPiAwOyBpLS0sIG1hcmtfYml0LS0pCisJCQlmaXJzdF9iaXQgfD0gMSA8PCBtYXJrX2JpdDsKKworCQkvKgorCQkgKiBDb21wYXJlIGJsb2NrcyBvciBpbm9kZXMgaW4gdGhlIGZpcnN0IGJ5dGUuCisJCSAqIElmIHRoZXJlIGlzIGFueSBtYXJrZWQgYml0LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMC4KKwkJICovCisJCWlmIChmaXJzdF9iaXQgJiBBRERSW3N0YXJ0X2J5dGVdKQorCQkJcmV0dXJuIDA7CisJCWVsc2UgaWYgKGxlbiA8PSA4IC0gc3RhcnRfYml0KQorCQkJcmV0dXJuIDE7CisKKwkJc3RhcnRfYnl0ZSsrOworCQlsZW5fYml0ID0gKGxlbiAtIG1hcmtfY291bnQpICUgODsKKwkJbGVuX2J5dGUgPSAobGVuIC0gbWFya19jb3VudCkgPj4gMzsKKwl9CisKKwkvKgorCSAqIFRoZSBjb21wYXJlZCBzdGFydCBibG9jayBudW1iZXIgb3Igc3RhcnQgaW5vZGUgbnVtYmVyIGlzCisJICogdGhlIGZpcnN0IGJpdCBpbiBhIGJ5dGUuCisJICovCisJaWYgKGxlbl9iaXQgIT0gMCkgeworCQkvKgorCQkgKiBUaGUgY29tcGFyZWQgZW5kIGJsb2NrIG51bWJlciBvciBlbmQgaW5vZGUgbnVtYmVyIGlzCisJCSAqIG5vdCB0aGUgbGFzdCBiaXQgaW4gYSBieXRlLgorCQkgKi8KKwkJZm9yIChtYXJrX2JpdCA9IGxlbl9iaXQgLSAxOyBtYXJrX2JpdCA+PSAwOyBtYXJrX2JpdC0tKQorCQkJbGFzdF9iaXQgfD0gMSA8PCBtYXJrX2JpdDsKKworCQkvKgorCQkgKiBDb21wYXJlIGJsb2NrcyBvciBpbm9kZXMgaW4gdGhlIGxhc3QgYnl0ZS4KKwkJICogSWYgdGhlcmUgaXMgYW55IG1hcmtlZCBiaXQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAwLgorCQkgKi8KKwkJaWYgKGxhc3RfYml0ICYgQUREUltzdGFydF9ieXRlICsgbGVuX2J5dGVdKQorCQkJcmV0dXJuIDA7CisJCWVsc2UgaWYgKGxlbl9ieXRlID09IDApCisJCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBDaGVjayB3aGV0aGVyIGFsbCBieXRlcyBhcmUgMCAqLworCXJldHVybiBleHQyZnNfbWVtX2lzX3plcm8oQUREUiArIHN0YXJ0X2J5dGUsIGxlbl9ieXRlKTsKK30KKworZXJyY29kZV90IGV4dDJmc19maW5kX2ZpcnN0X3plcm9fZ2VuZXJpY19iaXRtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJCV9fdTMyIHN0YXJ0LCBfX3UzMiBlbmQsCisJCQkJCQlfX3UzMiAqb3V0KQoreworCWJsa190IGI7CisKKwlpZiAoc3RhcnQgPCBiaXRtYXAtPnN0YXJ0IHx8IGVuZCA+IGJpdG1hcC0+ZW5kIHx8IHN0YXJ0ID4gZW5kKSB7CisJCWV4dDJmc193YXJuX2JpdG1hcDIoYml0bWFwLCBFWFQyRlNfVEVTVF9FUlJPUiwgc3RhcnQpOworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCXdoaWxlIChzdGFydCA8PSBlbmQpIHsKKwkJYiA9IGV4dDJmc190ZXN0X2JpdChzdGFydCAtIGJpdG1hcC0+c3RhcnQsIGJpdG1hcC0+Yml0bWFwKTsKKwkJaWYgKCFiKSB7CisJCQkqb3V0ID0gc3RhcnQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlzdGFydCsrOworCX0KKworCXJldHVybiBFTk9FTlQ7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZmluZF9maXJzdF9zZXRfZ2VuZXJpY19iaXRtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgICAgIF9fdTMyIHN0YXJ0LCBfX3UzMiBlbmQsCisJCQkJCSAgICAgICBfX3UzMiAqb3V0KQoreworCWJsa190IGI7CisKKwlpZiAoc3RhcnQgPCBiaXRtYXAtPnN0YXJ0IHx8IGVuZCA+IGJpdG1hcC0+ZW5kIHx8IHN0YXJ0ID4gZW5kKSB7CisJCWV4dDJmc193YXJuX2JpdG1hcDIoYml0bWFwLCBFWFQyRlNfVEVTVF9FUlJPUiwgc3RhcnQpOworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCXdoaWxlIChzdGFydCA8PSBlbmQpIHsKKwkJYiA9IGV4dDJmc190ZXN0X2JpdChzdGFydCAtIGJpdG1hcC0+c3RhcnQsIGJpdG1hcC0+Yml0bWFwKTsKKwkJaWYgKGIpIHsKKwkJCSpvdXQgPSBzdGFydDsKKwkJCXJldHVybiAwOworCQl9CisJCXN0YXJ0Kys7CisJfQorCisJcmV0dXJuIEVOT0VOVDsKK30KKworaW50IGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZShleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkgICBibGtfdCBibG9jaywgaW50IG51bSkKK3sKKwlFWFQyX0NIRUNLX01BR0lDKGJpdG1hcCwgRVhUMl9FVF9NQUdJQ19CTE9DS19CSVRNQVApOworCWlmICgoYmxvY2sgPCBiaXRtYXAtPnN0YXJ0KSB8fCAoYmxvY2srbnVtLTEgPiBiaXRtYXAtPnJlYWxfZW5kKSkgeworCQlleHQyZnNfd2Fybl9iaXRtYXAoRVhUMl9FVF9CQURfQkxPQ0tfVEVTVCwKKwkJCQkgICBibG9jaywgYml0bWFwLT5kZXNjcmlwdGlvbik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZXh0MmZzX3Rlc3RfY2xlYXJfZ2VuZXJpY19iaXRtYXBfcmFuZ2UoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkKKwkJCQkJCSAgICAgIGJpdG1hcCwgYmxvY2ssIG51bSk7Cit9CisKK2ludCBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXBfcmFuZ2UoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgaW5vX3QgaW5vZGUsIGludCBudW0pCit7CisJRVhUMl9DSEVDS19NQUdJQyhiaXRtYXAsIEVYVDJfRVRfTUFHSUNfSU5PREVfQklUTUFQKTsKKwlpZiAoKGlub2RlIDwgYml0bWFwLT5zdGFydCkgfHwgKGlub2RlK251bS0xID4gYml0bWFwLT5yZWFsX2VuZCkpIHsKKwkJZXh0MmZzX3dhcm5fYml0bWFwKEVYVDJfRVRfQkFEX0lOT0RFX1RFU1QsCisJCQkJICAgaW5vZGUsIGJpdG1hcC0+ZGVzY3JpcHRpb24pOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGV4dDJmc190ZXN0X2NsZWFyX2dlbmVyaWNfYml0bWFwX3JhbmdlKChleHQyZnNfZ2VuZXJpY19iaXRtYXApCisJCQkJCQkgICAgICBiaXRtYXAsIGlub2RlLCBudW0pOworfQorCit2b2lkIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZShleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgYmxrX3QgYmxvY2ssIGludCBudW0pCit7CisJaW50CWk7CisKKwlpZiAoKGJsb2NrIDwgYml0bWFwLT5zdGFydCkgfHwgKGJsb2NrK251bS0xID4gYml0bWFwLT5lbmQpKSB7CisJCWV4dDJmc193YXJuX2JpdG1hcChFWFQyX0VUX0JBRF9CTE9DS19NQVJLLCBibG9jaywKKwkJCQkgICBiaXRtYXAtPmRlc2NyaXB0aW9uKTsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGk9MDsgaSA8IG51bTsgaSsrKQorCQlleHQyZnNfZmFzdF9zZXRfYml0KGJsb2NrICsgaSAtIGJpdG1hcC0+c3RhcnQsIGJpdG1hcC0+Yml0bWFwKTsKK30KKwordm9pZCBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZShleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgICAgIGJsa190IGJsb2NrLCBpbnQgbnVtKQoreworCWludAlpOworCisJaWYgKChibG9jayA8IGJpdG1hcC0+c3RhcnQpIHx8IChibG9jaytudW0tMSA+IGJpdG1hcC0+ZW5kKSkgeworCQlleHQyZnNfd2Fybl9iaXRtYXAoRVhUMl9FVF9CQURfQkxPQ0tfVU5NQVJLLCBibG9jaywKKwkJCQkgICBiaXRtYXAtPmRlc2NyaXB0aW9uKTsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGk9MDsgaSA8IG51bTsgaSsrKQorCQlleHQyZnNfZmFzdF9jbGVhcl9iaXQoYmxvY2sgKyBpIC0gYml0bWFwLT5zdGFydCwKKwkJCQkgICAgICBiaXRtYXAtPmJpdG1hcCk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvZ2VuX2JpdG1hcDY0LmMgYi9saWIvZXh0MmZzL2dlbl9iaXRtYXA2NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNTUwOTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2dlbl9iaXRtYXA2NC5jCkBAIC0wLDAgKzEsOTA2IEBACisvKgorICogZ2VuX2JpdG1hcDY0LmMgLS0tIHJvdXRpbmVzIHRvIHJlYWQsIHdyaXRlLCBhbmQgbWFuaXB1bGF0ZSB0aGUgbmV3IHFpbm9kZSBhbmQKKyAqIGJsb2NrIGJpdG1hcHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorI2luY2x1ZGUgImJtYXA2NC5oIgorCisvKgorICogRGVzaWduIG9mIDY0LWJpdCBiaXRtYXBzCisgKgorICogSW4gb3JkZXIgbWFpbnRhaW4gQUJJIGNvbXBhdGliaWxpdHkgd2l0aCBwcm9ncmFtcyB0aGF0IGRvbid0CisgKiB1bmRlcnN0YW5kIGFib3V0IDY0LWJpdCBibG9ja3MvaW5vZGVzLAorICogZXh0MmZzX2FsbG9jYXRlX2lub2RlX2JpdG1hcCgpIGFuZCBleHQyZnNfYWxsb2NhdGVfYmxvY2tfYml0bWFwKCkKKyAqIHdpbGwgY3JlYXRlIG9sZC1zdHlsZSBiaXRtYXBzIHVubGVzcyB0aGUgYXBwbGljYXRpb24gcGFzc2VzIHRoZQorICogZmxhZyBFWFQyX0ZMQUdfNjRCSVRTIHRvIGV4dDJmc19vcGVuKCkuICBJZiB0aGlzIGZsYWcgaXMKKyAqIHBhc3NlZCwgdGhlbiB3ZSBrbm93IHRoZSBhcHBsaWNhdGlvbiBoYXMgYmVlbiByZWNvbXBpbGVkLCBzbyB3ZSBjYW4KKyAqIHVzZSB0aGUgbmV3LXN0eWxlIGJpdG1hcHMuICBJZiBpdCBpcyBub3QgcGFzc2VkLCB3ZSBoYXZlIHRvIHJldHVybgorICogYW4gZXJyb3IgaWYgdHJ5aW5nIHRvIG9wZW4gYSBmaWxlc3lzdGVtIHdoaWNoIG5lZWRzIDY0LWJpdCBiaXRtYXBzLgorICoKKyAqIFRoZSBuZXcgYml0bWFwcyB1c2UgYSBuZXcgc2V0IG9mIHN0cnVjdHVyZSBtYWdpYyBudW1iZXJzLCBzbyB0aGF0CisgKiBib3RoIHRoZSBvbGQtc3R5bGUgYW5kIG5ldy1zdHlsZSBpbnRlcmZhY2VzIGNhbiBpZGVudGlmeSB3aGljaAorICogdmVyc2lvbiBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmUgd2FzIHVzZWQuICBCb3RoIHRoZSBvbGQtc3R5bGUgYW5kCisgKiBuZXctc3R5bGUgaW50ZXJmYWNlcyB3aWxsIHN1cHBvcnQgZWl0aGVyIHR5cGUgb2YgYml0bWFwLCBhbHRob3VnaAorICogb2YgY291cnNlIDY0LWJpdCBvcGVyYXRpb24gd2lsbCBvbmx5IGJlIHBvc3NpYmxlIHdoZW4gYm90aCB0aGUKKyAqIG5ldy1zdHlsZSBpbnRlcmZhY2UgYW5kIHRoZSBuZXctc3R5bGUgYml0bWFwIGFyZSB1c2VkLgorICoKKyAqIEZvciBleGFtcGxlLCB0aGUgbmV3IGJpdG1hcCBpbnRlcmZhY2VzIHdpbGwgY2hlY2sgdGhlIHN0cnVjdHVyZQorICogbWFnaWMgbnVtYmVycyBhbmQgc28gd2lsbCBiZSBhYmxlIHRvIGRldGVjdCBvbGQtc3R5cGUgYml0bWFwLiAgSWYKKyAqIHRoZXkgc2VlIGFuIG9sZC1zdHlsZSBiaXRtYXAsIHRoZXkgd2lsbCBwYXNzIGl0IHRvIHRoZSBnZW5fYml0bWFwLmMKKyAqIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcuICBUaGUgc2FtZSB3aWxsIGJlIHRydWUgZm9yIHRoZSBvbGQKKyAqIGludGVyZmFjZXMgYXMgd2VsbC4KKyAqCisgKiBUaGUgbmV3LXN0eWxlIGludGVyZmFjZXMgd2lsbCBoYXZlIHNldmVyYWwgZGlmZmVyZW50IGJhY2stZW5kCisgKiBpbXBsZW1lbnRhdGlvbnMsIHNvIHdlIGNhbiBzdXBwb3J0IGRpZmZlcmVudCBlbmNvZGluZ3MgdGhhdCBhcmUKKyAqIGFwcHJvcHJpYXRlIGZvciBkaWZmZXJlbnQgYXBwbGljYXRpb25zLiAgSW4gZ2VuZXJhbCB0aGUgZGVmYXVsdAorICogc2hvdWxkIGJlIHdoYXRldmVyIG1ha2VzIHNlbnNlLCBhbmQgd2hhdCB0aGUgYXBwbGljYXRpb24vbGlicmFyeQorICogd2lsbCB1c2UuICBIb3dldmVyLCBlMmZzY2sgbWF5IG5lZWQgc3BlY2lhbGl6ZWQgaW1wbGVtZW50YXRpb25zIGZvcgorICogaXRzIG93biB1c2VzLiAgRm9yIGV4YW1wbGUsIHdoZW4gZG9pbmcgcGFyZW50IGRpcmVjdG9yeSBwb2ludGVyCisgKiBsb29wIGRldGVjdGlvbnMgaW4gcGFzcyAzLCB0aGUgYml0bWFwIHdpbGwgKmFsd2F5cyogYmUgc3BhcnNlLCBzbworICogZTJmc2NrIGNhbiByZXF1ZXN0IGFuIGVuY29kaW5nIHdoaWNoIGlzIG9wdGltaXplZCBmb3IgdGhhdC4KKyAqLworCitzdGF0aWMgdm9pZCB3YXJuX2JpdG1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJaW50IGNvZGUsIF9fdTY0IGFyZykKK3sKKyNpZm5kZWYgT01JVF9DT01fRVJSCisJaWYgKGJpdG1hcC0+ZGVzY3JpcHRpb24pCisJCWNvbV9lcnIoMCwgYml0bWFwLT5iYXNlX2Vycm9yX2NvZGUrY29kZSwKKwkJCSIjJWxsdSBmb3IgJXMiLCBhcmcsIGJpdG1hcC0+ZGVzY3JpcHRpb24pOworCWVsc2UKKwkJY29tX2VycigwLCBiaXRtYXAtPmJhc2VfZXJyb3JfY29kZSArIGNvZGUsICIjJWxsdSIsIGFyZyk7CisjZW5kaWYKK30KKworI2lmZGVmIEJNQVBfU1RBVFNfT1BTCisjZGVmaW5lIElOQ19TVEFUKG1hcCwgbmFtZSkgbWFwLT5zdGF0cy5uYW1lCisjZWxzZQorI2RlZmluZSBJTkNfU1RBVChtYXAsIG5hbWUpIDs7CisjZW5kaWYKKworCitlcnJjb2RlX3QgZXh0MmZzX2FsbG9jX2dlbmVyaWNfYm1hcChleHQyX2ZpbHN5cyBmcywgZXJyY29kZV90IG1hZ2ljLAorCQkJCSAgICBpbnQgdHlwZSwgX191NjQgc3RhcnQsIF9fdTY0IGVuZCwKKwkJCQkgICAgX191NjQgcmVhbF9lbmQsCisJCQkJICAgIGNvbnN0IGNoYXIgKmRlc2NyLAorCQkJCSAgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgKnJldCkKK3sKKwlleHQyZnNfZ2VuZXJpY19iaXRtYXAJYml0bWFwOworCXN0cnVjdCBleHQyX2JpdG1hcF9vcHMJKm9wczsKKwlleHQyX2lub190IG51bV9kaXJzOworCWVycmNvZGVfdCByZXR2YWw7CisKKwlpZiAoIXR5cGUpCisJCXR5cGUgPSBFWFQyRlNfQk1BUDY0X0JJVEFSUkFZOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBFWFQyRlNfQk1BUDY0X0JJVEFSUkFZOgorCQlvcHMgPSAmZXh0MmZzX2Jsa21hcDY0X2JpdGFycmF5OworCQlicmVhazsKKwljYXNlIEVYVDJGU19CTUFQNjRfUkJUUkVFOgorCQlvcHMgPSAmZXh0MmZzX2Jsa21hcDY0X3JidHJlZTsKKwkJYnJlYWs7CisJY2FzZSBFWFQyRlNfQk1BUDY0X0FVVE9ESVI6CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbnVtX2RpcnMoZnMsICZudW1fZGlycyk7CisJCWlmIChyZXR2YWwgfHwgbnVtX2RpcnMgPiAoZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCAvIDMyMCkpCisJCQlvcHMgPSAmZXh0MmZzX2Jsa21hcDY0X2JpdGFycmF5OworCQllbHNlCisJCQlvcHMgPSAmZXh0MmZzX2Jsa21hcDY0X3JidHJlZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEVJTlZBTDsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbXplcm8oc2l6ZW9mKHN0cnVjdCBleHQyZnNfc3RydWN0X2dlbmVyaWNfYml0bWFwKSwKKwkJCQkgICAgJmJpdG1hcCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworI2lmZGVmIEJNQVBfU1RBVFMKKwlpZiAoZ2V0dGltZW9mZGF5KCZiaXRtYXAtPnN0YXRzLmNyZWF0ZWQsCisJCQkgKHN0cnVjdCB0aW1lem9uZSAqKSBOVUxMKSA9PSAtMSkgeworCQlwZXJyb3IoImdldHRpbWVvZmRheSIpOworCQlleHQyZnNfZnJlZV9tZW0oJmJpdG1hcCk7CisJCXJldHVybiAxOworCX0KKwliaXRtYXAtPnN0YXRzLnR5cGUgPSB0eXBlOworI2VuZGlmCisKKwkvKiBYWFggZmFjdG9yIG91dCwgcmVwZWF0ZWQgaW4gY29weV9ibWFwICovCisJYml0bWFwLT5tYWdpYyA9IG1hZ2ljOworCWJpdG1hcC0+ZnMgPSBmczsKKwliaXRtYXAtPnN0YXJ0ID0gc3RhcnQ7CisJYml0bWFwLT5lbmQgPSBlbmQ7CisJYml0bWFwLT5yZWFsX2VuZCA9IHJlYWxfZW5kOworCWJpdG1hcC0+Yml0bWFwX29wcyA9IG9wczsKKwliaXRtYXAtPmNsdXN0ZXJfYml0cyA9IDA7CisJc3dpdGNoIChtYWdpYykgeworCWNhc2UgRVhUMl9FVF9NQUdJQ19JTk9ERV9CSVRNQVA2NDoKKwkJYml0bWFwLT5iYXNlX2Vycm9yX2NvZGUgPSBFWFQyX0VUX0JBRF9JTk9ERV9NQVJLOworCQlicmVhazsKKwljYXNlIEVYVDJfRVRfTUFHSUNfQkxPQ0tfQklUTUFQNjQ6CisJCWJpdG1hcC0+YmFzZV9lcnJvcl9jb2RlID0gRVhUMl9FVF9CQURfQkxPQ0tfTUFSSzsKKwkJYml0bWFwLT5jbHVzdGVyX2JpdHMgPSBmcy0+Y2x1c3Rlcl9yYXRpb19iaXRzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliaXRtYXAtPmJhc2VfZXJyb3JfY29kZSA9IEVYVDJfRVRfQkFEX0dFTkVSSUNfTUFSSzsKKwl9CisJaWYgKGRlc2NyKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHN0cmxlbihkZXNjcikrMSwgJmJpdG1hcC0+ZGVzY3JpcHRpb24pOworCQlpZiAocmV0dmFsKSB7CisJCQlleHQyZnNfZnJlZV9tZW0oJmJpdG1hcCk7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCXN0cmNweShiaXRtYXAtPmRlc2NyaXB0aW9uLCBkZXNjcik7CisJfSBlbHNlCisJCWJpdG1hcC0+ZGVzY3JpcHRpb24gPSAwOworCisJcmV0dmFsID0gYml0bWFwLT5iaXRtYXBfb3BzLT5uZXdfYm1hcChmcywgYml0bWFwKTsKKwlpZiAocmV0dmFsKSB7CisJCWV4dDJmc19mcmVlX21lbSgmYml0bWFwLT5kZXNjcmlwdGlvbik7CisJCWV4dDJmc19mcmVlX21lbSgmYml0bWFwKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkqcmV0ID0gYml0bWFwOworCXJldHVybiAwOworfQorCisjaWZkZWYgQk1BUF9TVEFUUworc3RhdGljIHZvaWQgZXh0MmZzX3ByaW50X2JtYXBfc3RhdGlzdGljcyhleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKQoreworCXN0cnVjdCBleHQyX2JtYXBfc3RhdGlzdGljcyAqc3RhdHMgPSAmYml0bWFwLT5zdGF0czsKKyNpZmRlZiBCTUFQX1NUQVRTX09QUworCWZsb2F0IG1hcmtfc2VxX3BlcmMgPSAwLjAsIHRlc3Rfc2VxX3BlcmMgPSAwLjA7CisJZmxvYXQgbWFya19iYWNrX3BlcmMgPSAwLjAsIHRlc3RfYmFja19wZXJjID0gMC4wOworI2VuZGlmCisJZG91YmxlIGludXNlOworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKworI2lmZGVmIEJNQVBfU1RBVFNfT1BTCisJaWYgKHN0YXRzLT50ZXN0X2NvdW50KSB7CisJCXRlc3Rfc2VxX3BlcmMgPSAoKGZsb2F0KXN0YXRzLT50ZXN0X3NlcSAvCisJCQkJIHN0YXRzLT50ZXN0X2NvdW50KSAqIDEwMDsKKwkJdGVzdF9iYWNrX3BlcmMgPSAoKGZsb2F0KXN0YXRzLT50ZXN0X2JhY2sgLworCQkJCSAgc3RhdHMtPnRlc3RfY291bnQpICogMTAwOworCX0KKworCWlmIChzdGF0cy0+bWFya19jb3VudCkgeworCQltYXJrX3NlcV9wZXJjID0gKChmbG9hdClzdGF0cy0+bWFya19zZXEgLworCQkJCSBzdGF0cy0+bWFya19jb3VudCkgKiAxMDA7CisJCW1hcmtfYmFja19wZXJjID0gKChmbG9hdClzdGF0cy0+bWFya19iYWNrIC8KKwkJCQkgIHN0YXRzLT5tYXJrX2NvdW50KSAqIDEwMDsKKwl9CisjZW5kaWYKKworCWlmIChnZXR0aW1lb2ZkYXkoJm5vdywgKHN0cnVjdCB0aW1lem9uZSAqKSBOVUxMKSA9PSAtMSkgeworCQlwZXJyb3IoImdldHRpbWVvZmRheSIpOworCQlyZXR1cm47CisJfQorCisJaW51c2UgPSAoZG91YmxlKSBub3cudHZfc2VjICsgXAorCQkoKChkb3VibGUpIG5vdy50dl91c2VjKSAqIDAuMDAwMDAxKTsKKwlpbnVzZSAtPSAoZG91YmxlKSBzdGF0cy0+Y3JlYXRlZC50dl9zZWMgKyBcCisJCSgoKGRvdWJsZSkgc3RhdHMtPmNyZWF0ZWQudHZfdXNlYykgKiAwLjAwMDAwMSk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIlxuWytdICVzIGJpdG1hcCAodHlwZSAlZClcbiIsIGJpdG1hcC0+ZGVzY3JpcHRpb24sCisJCXN0YXRzLT50eXBlKTsKKwlmcHJpbnRmKHN0ZGVyciwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworI2lmZGVmIEJNQVBfU1RBVFNfT1BTCisJZnByaW50ZihzdGRlcnIsICIlMTZsbHUgYml0cyBsb25nXG4iLAorCQliaXRtYXAtPnJlYWxfZW5kIC0gYml0bWFwLT5zdGFydCk7CisJZnByaW50ZihzdGRlcnIsICIlMTZsdSBjb3B5X2JtYXBcbiUxNmx1IHJlc2l6ZV9ibWFwXG4iLAorCQlzdGF0cy0+Y29weV9jb3VudCwgc3RhdHMtPnJlc2l6ZV9jb3VudCk7CisJZnByaW50ZihzdGRlcnIsICIlMTZsdSBtYXJrIGJtYXBcbiUxNmx1IHVubWFya19ibWFwXG4iLAorCQlzdGF0cy0+bWFya19jb3VudCwgc3RhdHMtPnVubWFya19jb3VudCk7CisJZnByaW50ZihzdGRlcnIsICIlMTZsdSB0ZXN0X2JtYXBcbiUxNmx1IG1hcmtfYm1hcF9leHRlbnRcbiIsCisJCXN0YXRzLT50ZXN0X2NvdW50LCBzdGF0cy0+bWFya19leHRfY291bnQpOworCWZwcmludGYoc3RkZXJyLCAiJTE2bHUgdW5tYXJrX2JtYXBfZXh0ZW50XG4iCisJCSIlMTZsdSB0ZXN0X2NsZWFyX2JtYXBfZXh0ZW50XG4iLAorCQlzdGF0cy0+dW5tYXJrX2V4dF9jb3VudCwgc3RhdHMtPnRlc3RfZXh0X2NvdW50KTsKKwlmcHJpbnRmKHN0ZGVyciwgIiUxNmx1IHNldF9ibWFwX3JhbmdlXG4lMTZsdSBzZXRfYm1hcF9yYW5nZVxuIiwKKwkJc3RhdHMtPnNldF9yYW5nZV9jb3VudCwgc3RhdHMtPmdldF9yYW5nZV9jb3VudCk7CisJZnByaW50ZihzdGRlcnIsICIlMTZsdSBjbGVhcl9ibWFwXG4lMTZsdSBjb250aWd1b3VzIGJpdCB0ZXN0ICglLjJmJSUpXG4iLAorCQlzdGF0cy0+Y2xlYXJfY291bnQsIHN0YXRzLT50ZXN0X3NlcSwgdGVzdF9zZXFfcGVyYyk7CisJZnByaW50ZihzdGRlcnIsICIlMTZsdSBjb250aWd1b3VzIGJpdCBtYXJrICglLjJmJSUpXG4iCisJCSIlMTZsbHUgYml0cyB0ZXN0ZWQgYmFja3dhcmRzICglLjJmJSUpXG4iLAorCQlzdGF0cy0+bWFya19zZXEsIG1hcmtfc2VxX3BlcmMsCisJCXN0YXRzLT50ZXN0X2JhY2ssIHRlc3RfYmFja19wZXJjKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiUxNmxsdSBiaXRzIG1hcmtlZCBiYWNrd2FyZHMgKCUuMmYlJSlcbiIKKwkJIiUxNi4yZiBzZWNvbmRzIGluIHVzZVxuIiwKKwkJc3RhdHMtPm1hcmtfYmFjaywgbWFya19iYWNrX3BlcmMsIGludXNlKTsKKyNlbmRpZiAvKiBCTUFQX1NUQVRTX09QUyAqLworfQorI2VuZGlmCisKK3ZvaWQgZXh0MmZzX2ZyZWVfZ2VuZXJpY19ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBibWFwKQoreworCWlmICghYm1hcCkKKwkJcmV0dXJuOworCisJaWYgKEVYVDJGU19JU18zMl9CSVRNQVAoYm1hcCkpIHsKKwkJZXh0MmZzX2ZyZWVfZ2VuZXJpY19iaXRtYXAoYm1hcCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIUVYVDJGU19JU182NF9CSVRNQVAoYm1hcCkpCisJCXJldHVybjsKKworI2lmZGVmIEJNQVBfU1RBVFMKKwlpZiAoZ2V0ZW52KCJFMkZTUFJPR1NfQklUTUFQX1NUQVRTIikpIHsKKwkJZXh0MmZzX3ByaW50X2JtYXBfc3RhdGlzdGljcyhibWFwKTsKKwkJYm1hcC0+Yml0bWFwX29wcy0+cHJpbnRfc3RhdHMoYm1hcCk7CisJfQorI2VuZGlmCisKKwlibWFwLT5iaXRtYXBfb3BzLT5mcmVlX2JtYXAoYm1hcCk7CisKKwlpZiAoYm1hcC0+ZGVzY3JpcHRpb24pIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZibWFwLT5kZXNjcmlwdGlvbik7CisJCWJtYXAtPmRlc2NyaXB0aW9uID0gMDsKKwl9CisJYm1hcC0+bWFnaWMgPSAwOworCWV4dDJmc19mcmVlX21lbSgmYm1hcCk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfY29weV9nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIHNyYywKKwkJCQkgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgKmRlc3QpCit7CisJY2hhciAqZGVzY3IsICpuZXdfZGVzY3I7CisJZXh0MmZzX2dlbmVyaWNfYml0bWFwCW5ld19ibWFwOworCWVycmNvZGVfdCByZXR2YWw7CisKKwlpZiAoIXNyYykKKwkJcmV0dXJuIEVJTlZBTDsKKworCWlmIChFWFQyRlNfSVNfMzJfQklUTUFQKHNyYykpCisJCXJldHVybiBleHQyZnNfY29weV9nZW5lcmljX2JpdG1hcChzcmMsIGRlc3QpOworCisJaWYgKCFFWFQyRlNfSVNfNjRfQklUTUFQKHNyYykpCisJCXJldHVybiBFSU5WQUw7CisKKwkvKiBBbGxvY2F0ZSBhIG5ldyBiaXRtYXAgc3RydWN0ICovCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW16ZXJvKHNpemVvZihzdHJ1Y3QgZXh0MmZzX3N0cnVjdF9nZW5lcmljX2JpdG1hcCksCisJCQkJICAgICZuZXdfYm1hcCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCisjaWZkZWYgQk1BUF9TVEFUU19PUFMKKwlzcmMtPnN0YXRzLmNvcHlfY291bnQrKzsKKyNlbmRpZgorI2lmZGVmIEJNQVBfU1RBVFMKKwlpZiAoZ2V0dGltZW9mZGF5KCZuZXdfYm1hcC0+c3RhdHMuY3JlYXRlZCwKKwkJCSAoc3RydWN0IHRpbWV6b25lICopIE5VTEwpID09IC0xKSB7CisJCXBlcnJvcigiZ2V0dGltZW9mZGF5Iik7CisJCWV4dDJmc19mcmVlX21lbSgmbmV3X2JtYXApOworCQlyZXR1cm4gMTsKKwl9CisJbmV3X2JtYXAtPnN0YXRzLnR5cGUgPSBzcmMtPnN0YXRzLnR5cGU7CisjZW5kaWYKKworCS8qIENvcHkgYWxsIHRoZSBoaWdoLWxldmVsIHBhcnRzIG92ZXIgKi8KKwluZXdfYm1hcC0+bWFnaWMgPSBzcmMtPm1hZ2ljOworCW5ld19ibWFwLT5mcyA9IHNyYy0+ZnM7CisJbmV3X2JtYXAtPnN0YXJ0ID0gc3JjLT5zdGFydDsKKwluZXdfYm1hcC0+ZW5kID0gc3JjLT5lbmQ7CisJbmV3X2JtYXAtPnJlYWxfZW5kID0gc3JjLT5yZWFsX2VuZDsKKwluZXdfYm1hcC0+Yml0bWFwX29wcyA9IHNyYy0+Yml0bWFwX29wczsKKwluZXdfYm1hcC0+YmFzZV9lcnJvcl9jb2RlID0gc3JjLT5iYXNlX2Vycm9yX2NvZGU7CisJbmV3X2JtYXAtPmNsdXN0ZXJfYml0cyA9IHNyYy0+Y2x1c3Rlcl9iaXRzOworCisJZGVzY3IgPSBzcmMtPmRlc2NyaXB0aW9uOworCWlmIChkZXNjcikgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzdHJsZW4oZGVzY3IpKzEwLCAmbmV3X2Rlc2NyKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZXh0MmZzX2ZyZWVfbWVtKCZuZXdfYm1hcCk7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCXNwcmludGYobmV3X2Rlc2NyLCAiY29weSBvZiAlcyIsIGRlc2NyKTsKKwkJbmV3X2JtYXAtPmRlc2NyaXB0aW9uID0gbmV3X2Rlc2NyOworCX0KKworCXJldHZhbCA9IHNyYy0+Yml0bWFwX29wcy0+Y29weV9ibWFwKHNyYywgbmV3X2JtYXApOworCWlmIChyZXR2YWwpIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZuZXdfYm1hcC0+ZGVzY3JpcHRpb24pOworCQlleHQyZnNfZnJlZV9tZW0oJm5ld19ibWFwKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkqZGVzdCA9IG5ld19ibWFwOworCisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfcmVzaXplX2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCwKKwkJCQkgICAgIF9fdTY0IG5ld19lbmQsCisJCQkJICAgICBfX3U2NCBuZXdfcmVhbF9lbmQpCit7CisJaWYgKCFibWFwKQorCQlyZXR1cm4gRUlOVkFMOworCisJaWYgKEVYVDJGU19JU18zMl9CSVRNQVAoYm1hcCkpCisJCXJldHVybiBleHQyZnNfcmVzaXplX2dlbmVyaWNfYml0bWFwKGJtYXAtPm1hZ2ljLCBuZXdfZW5kLAorCQkJCQkJICAgIG5ld19yZWFsX2VuZCwgYm1hcCk7CisKKwlpZiAoIUVYVDJGU19JU182NF9CSVRNQVAoYm1hcCkpCisJCXJldHVybiBFSU5WQUw7CisKKwlJTkNfU1RBVChibWFwLCByZXNpemVfY291bnQpOworCisJcmV0dXJuIGJtYXAtPmJpdG1hcF9vcHMtPnJlc2l6ZV9ibWFwKGJtYXAsIG5ld19lbmQsIG5ld19yZWFsX2VuZCk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZnVkZ2VfZ2VuZXJpY19ibWFwX2VuZChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCQllcnJjb2RlX3QgbmVxLAorCQkJCQlfX3U2NCBlbmQsIF9fdTY0ICpvZW5kKQoreworCWlmICghYml0bWFwKQorCQlyZXR1cm4gRUlOVkFMOworCisJaWYgKEVYVDJGU19JU18zMl9CSVRNQVAoYml0bWFwKSkgeworCQlleHQyX2lub190IHRtcF9vZW5kOworCQlpbnQgcmV0dmFsOworCisJCXJldHZhbCA9IGV4dDJmc19mdWRnZV9nZW5lcmljX2JpdG1hcF9lbmQoYml0bWFwLCBiaXRtYXAtPm1hZ2ljLAorCQkJCQkJCSBuZXEsIGVuZCwgJnRtcF9vZW5kKTsKKwkJaWYgKG9lbmQpCisJCQkqb2VuZCA9IHRtcF9vZW5kOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICghRVhUMkZTX0lTXzY0X0JJVE1BUChiaXRtYXApKQorCQlyZXR1cm4gRUlOVkFMOworCisJaWYgKGVuZCA+IGJpdG1hcC0+cmVhbF9lbmQpCisJCXJldHVybiBuZXE7CisJaWYgKG9lbmQpCisJCSpvZW5kID0gYml0bWFwLT5lbmQ7CisJYml0bWFwLT5lbmQgPSBlbmQ7CisJcmV0dXJuIDA7Cit9CisKK19fdTY0IGV4dDJmc19nZXRfZ2VuZXJpY19ibWFwX3N0YXJ0KGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXApCit7CisJaWYgKCFiaXRtYXApCisJCXJldHVybiBFSU5WQUw7CisKKwlpZiAoRVhUMkZTX0lTXzMyX0JJVE1BUChiaXRtYXApKQorCQlyZXR1cm4gZXh0MmZzX2dldF9nZW5lcmljX2JpdG1hcF9zdGFydChiaXRtYXApOworCisJaWYgKCFFWFQyRlNfSVNfNjRfQklUTUFQKGJpdG1hcCkpCisJCXJldHVybiBFSU5WQUw7CisKKwlyZXR1cm4gYml0bWFwLT5zdGFydDsKK30KKworX191NjQgZXh0MmZzX2dldF9nZW5lcmljX2JtYXBfZW5kKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXApCit7CisJaWYgKCFiaXRtYXApCisJCXJldHVybiBFSU5WQUw7CisKKwlpZiAoRVhUMkZTX0lTXzMyX0JJVE1BUChiaXRtYXApKQorCQlyZXR1cm4gZXh0MmZzX2dldF9nZW5lcmljX2JpdG1hcF9lbmQoYml0bWFwKTsKKworCWlmICghRVhUMkZTX0lTXzY0X0JJVE1BUChiaXRtYXApKQorCQlyZXR1cm4gRUlOVkFMOworCisJcmV0dXJuIGJpdG1hcC0+ZW5kOworfQorCit2b2lkIGV4dDJmc19jbGVhcl9nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCkKK3sKKwlpZiAoRVhUMkZTX0lTXzMyX0JJVE1BUChiaXRtYXApKQorCQlleHQyZnNfY2xlYXJfZ2VuZXJpY19iaXRtYXAoYml0bWFwKTsKKwllbHNlCisJCWJpdG1hcC0+Yml0bWFwX29wcy0+Y2xlYXJfYm1hcCAoYml0bWFwKTsKK30KKworaW50IGV4dDJmc19tYXJrX2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJICAgICBfX3U2NCBhcmcpCit7CisJaWYgKCFiaXRtYXApCisJCXJldHVybiAwOworCisJaWYgKEVYVDJGU19JU18zMl9CSVRNQVAoYml0bWFwKSkgeworCQlpZiAoYXJnICYgfjB4ZmZmZmZmZmZVTEwpIHsKKwkJCWV4dDJmc193YXJuX2JpdG1hcDIoYml0bWFwLAorCQkJCQkgICAgRVhUMkZTX01BUktfRVJST1IsIDB4ZmZmZmZmZmYpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwKGJpdG1hcCwgYXJnKTsKKwl9CisKKwlpZiAoIUVYVDJGU19JU182NF9CSVRNQVAoYml0bWFwKSkKKwkJcmV0dXJuIDA7CisKKwlhcmcgPj49IGJpdG1hcC0+Y2x1c3Rlcl9iaXRzOworCisjaWZkZWYgQk1BUF9TVEFUU19PUFMKKwlpZiAoYXJnID09IGJpdG1hcC0+c3RhdHMubGFzdF9tYXJrZWQgKyAxKQorCQliaXRtYXAtPnN0YXRzLm1hcmtfc2VxKys7CisJaWYgKGFyZyA8IGJpdG1hcC0+c3RhdHMubGFzdF9tYXJrZWQpCisJCWJpdG1hcC0+c3RhdHMubWFya19iYWNrKys7CisJYml0bWFwLT5zdGF0cy5sYXN0X21hcmtlZCA9IGFyZzsKKwliaXRtYXAtPnN0YXRzLm1hcmtfY291bnQrKzsKKyNlbmRpZgorCisJaWYgKChhcmcgPCBiaXRtYXAtPnN0YXJ0KSB8fCAoYXJnID4gYml0bWFwLT5lbmQpKSB7CisJCXdhcm5fYml0bWFwKGJpdG1hcCwgRVhUMkZTX01BUktfRVJST1IsIGFyZyk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBiaXRtYXAtPmJpdG1hcF9vcHMtPm1hcmtfYm1hcChiaXRtYXAsIGFyZyk7Cit9CisKK2ludCBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJICAgICAgIF9fdTY0IGFyZykKK3sKKwlpZiAoIWJpdG1hcCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoRVhUMkZTX0lTXzMyX0JJVE1BUChiaXRtYXApKSB7CisJCWlmIChhcmcgJiB+MHhmZmZmZmZmZlVMTCkgeworCQkJZXh0MmZzX3dhcm5fYml0bWFwMihiaXRtYXAsIEVYVDJGU19VTk1BUktfRVJST1IsCisJCQkJCSAgICAweGZmZmZmZmZmKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwKGJpdG1hcCwgYXJnKTsKKwl9CisKKwlpZiAoIUVYVDJGU19JU182NF9CSVRNQVAoYml0bWFwKSkKKwkJcmV0dXJuIDA7CisKKwlhcmcgPj49IGJpdG1hcC0+Y2x1c3Rlcl9iaXRzOworCisJSU5DX1NUQVQoYml0bWFwLCB1bm1hcmtfY291bnQpOworCisJaWYgKChhcmcgPCBiaXRtYXAtPnN0YXJ0KSB8fCAoYXJnID4gYml0bWFwLT5lbmQpKSB7CisJCXdhcm5fYml0bWFwKGJpdG1hcCwgRVhUMkZTX1VOTUFSS19FUlJPUiwgYXJnKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGJpdG1hcC0+Yml0bWFwX29wcy0+dW5tYXJrX2JtYXAoYml0bWFwLCBhcmcpOworfQorCitpbnQgZXh0MmZzX3Rlc3RfZ2VuZXJpY19ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkgICAgIF9fdTY0IGFyZykKK3sKKwlpZiAoIWJpdG1hcCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoRVhUMkZTX0lTXzMyX0JJVE1BUChiaXRtYXApKSB7CisJCWlmIChhcmcgJiB+MHhmZmZmZmZmZlVMTCkgeworCQkJZXh0MmZzX3dhcm5fYml0bWFwMihiaXRtYXAsIEVYVDJGU19URVNUX0VSUk9SLAorCQkJCQkgICAgMHhmZmZmZmZmZik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAoYml0bWFwLCBhcmcpOworCX0KKworCWlmICghRVhUMkZTX0lTXzY0X0JJVE1BUChiaXRtYXApKQorCQlyZXR1cm4gMDsKKworCWFyZyA+Pj0gYml0bWFwLT5jbHVzdGVyX2JpdHM7CisKKyNpZmRlZiBCTUFQX1NUQVRTX09QUworCWJpdG1hcC0+c3RhdHMudGVzdF9jb3VudCsrOworCWlmIChhcmcgPT0gYml0bWFwLT5zdGF0cy5sYXN0X3Rlc3RlZCArIDEpCisJCWJpdG1hcC0+c3RhdHMudGVzdF9zZXErKzsKKwlpZiAoYXJnIDwgYml0bWFwLT5zdGF0cy5sYXN0X3Rlc3RlZCkKKwkJYml0bWFwLT5zdGF0cy50ZXN0X2JhY2srKzsKKwliaXRtYXAtPnN0YXRzLmxhc3RfdGVzdGVkID0gYXJnOworI2VuZGlmCisKKwlpZiAoKGFyZyA8IGJpdG1hcC0+c3RhcnQpIHx8IChhcmcgPiBiaXRtYXAtPmVuZCkpIHsKKwkJd2Fybl9iaXRtYXAoYml0bWFwLCBFWFQyRlNfVEVTVF9FUlJPUiwgYXJnKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGJpdG1hcC0+Yml0bWFwX29wcy0+dGVzdF9ibWFwKGJpdG1hcCwgYXJnKTsKK30KKworZXJyY29kZV90IGV4dDJmc19zZXRfZ2VuZXJpY19ibWFwX3JhbmdlKGV4dDJmc19nZW5lcmljX2JpdG1hcCBibWFwLAorCQkJCQlfX3U2NCBzdGFydCwgdW5zaWduZWQgaW50IG51bSwKKwkJCQkJdm9pZCAqaW4pCit7CisJaWYgKCFibWFwKQorCQlyZXR1cm4gRUlOVkFMOworCisJaWYgKEVYVDJGU19JU18zMl9CSVRNQVAoYm1hcCkpIHsKKwkJaWYgKChzdGFydCtudW0tMSkgJiB+MHhmZmZmZmZmZlVMTCkgeworCQkJZXh0MmZzX3dhcm5fYml0bWFwMihibWFwLCBFWFQyRlNfVU5NQVJLX0VSUk9SLAorCQkJCQkgICAgMHhmZmZmZmZmZik7CisJCQlyZXR1cm4gRUlOVkFMOworCQl9CisJCXJldHVybiBleHQyZnNfc2V0X2dlbmVyaWNfYml0bWFwX3JhbmdlKGJtYXAsIGJtYXAtPm1hZ2ljLAorCQkJCQkJICAgICAgIHN0YXJ0LCBudW0sIGluKTsKKwl9CisKKwlpZiAoIUVYVDJGU19JU182NF9CSVRNQVAoYm1hcCkpCisJCXJldHVybiBFSU5WQUw7CisKKwlJTkNfU1RBVChibWFwLCBzZXRfcmFuZ2VfY291bnQpOworCisJcmV0dXJuIGJtYXAtPmJpdG1hcF9vcHMtPnNldF9ibWFwX3JhbmdlKGJtYXAsIHN0YXJ0LCBudW0sIGluKTsKK30KKworZXJyY29kZV90IGV4dDJmc19nZXRfZ2VuZXJpY19ibWFwX3JhbmdlKGV4dDJmc19nZW5lcmljX2JpdG1hcCBibWFwLAorCQkJCQlfX3U2NCBzdGFydCwgdW5zaWduZWQgaW50IG51bSwKKwkJCQkJdm9pZCAqb3V0KQoreworCWlmICghYm1hcCkKKwkJcmV0dXJuIEVJTlZBTDsKKworCWlmIChFWFQyRlNfSVNfMzJfQklUTUFQKGJtYXApKSB7CisJCWlmICgoc3RhcnQrbnVtLTEpICYgfjB4ZmZmZmZmZmZVTEwpIHsKKwkJCWV4dDJmc193YXJuX2JpdG1hcDIoYm1hcCwKKwkJCQkJICAgIEVYVDJGU19VTk1BUktfRVJST1IsIDB4ZmZmZmZmZmYpOworCQkJcmV0dXJuIEVJTlZBTDsKKwkJfQorCQlyZXR1cm4gZXh0MmZzX2dldF9nZW5lcmljX2JpdG1hcF9yYW5nZShibWFwLCBibWFwLT5tYWdpYywKKwkJCQkJCSAgICAgICBzdGFydCwgbnVtLCBvdXQpOworCX0KKworCWlmICghRVhUMkZTX0lTXzY0X0JJVE1BUChibWFwKSkKKwkJcmV0dXJuIEVJTlZBTDsKKworCUlOQ19TVEFUKGJtYXAsIGdldF9yYW5nZV9jb3VudCk7CisKKwlyZXR1cm4gYm1hcC0+Yml0bWFwX29wcy0+Z2V0X2JtYXBfcmFuZ2UoYm1hcCwgc3RhcnQsIG51bSwgb3V0KTsKK30KKworZXJyY29kZV90IGV4dDJmc19jb21wYXJlX2dlbmVyaWNfYm1hcChlcnJjb2RlX3QgbmVxLAorCQkJCSAgICAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCBibTEsCisJCQkJICAgICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtMikKK3sKKwlibGs2NF90CWk7CisKKwlpZiAoIWJtMSB8fCAhYm0yKQorCQlyZXR1cm4gRUlOVkFMOworCWlmIChibTEtPm1hZ2ljICE9IGJtMi0+bWFnaWMpCisJCXJldHVybiBFSU5WQUw7CisKKwkvKiBOb3cgd2Uga25vdyBib3RoIGJpdG1hcHMgaGF2ZSB0aGUgc2FtZSBtYWdpYyAqLworCWlmIChFWFQyRlNfSVNfMzJfQklUTUFQKGJtMSkpCisJCXJldHVybiBleHQyZnNfY29tcGFyZV9nZW5lcmljX2JpdG1hcChibTEtPm1hZ2ljLCBuZXEsIGJtMSwgYm0yKTsKKworCWlmICghRVhUMkZTX0lTXzY0X0JJVE1BUChibTEpKQorCQlyZXR1cm4gRUlOVkFMOworCisJaWYgKChibTEtPnN0YXJ0ICE9IGJtMi0+c3RhcnQpIHx8CisJICAgIChibTEtPmVuZCAhPSBibTItPmVuZCkpCisJCXJldHVybiBuZXE7CisKKwlmb3IgKGkgPSBibTEtPmVuZCAtICgoYm0xLT5lbmQgLSBibTEtPnN0YXJ0KSAlIDgpOyBpIDw9IGJtMS0+ZW5kOyBpKyspCisJCWlmIChleHQyZnNfdGVzdF9nZW5lcmljX2JtYXAoYm0xLCBpKSAhPQorCQkgICAgZXh0MmZzX3Rlc3RfZ2VuZXJpY19ibWFwKGJtMiwgaSkpCisJCQlyZXR1cm4gbmVxOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZXh0MmZzX3NldF9nZW5lcmljX2JtYXBfcGFkZGluZyhleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCkKK3sKKwlfX3U2NAlzdGFydCwgbnVtOworCisJaWYgKEVYVDJGU19JU18zMl9CSVRNQVAoYm1hcCkpIHsKKwkJZXh0MmZzX3NldF9nZW5lcmljX2JpdG1hcF9wYWRkaW5nKGJtYXApOworCQlyZXR1cm47CisJfQorCisJc3RhcnQgPSBibWFwLT5lbmQgKyAxOworCW51bSA9IGJtYXAtPnJlYWxfZW5kIC0gYm1hcC0+ZW5kOworCWJtYXAtPmJpdG1hcF9vcHMtPm1hcmtfYm1hcF9leHRlbnQoYm1hcCwgc3RhcnQsIG51bSk7CisJLyogWFhYIG91Z2h0IHRvIHdhcm4gb24gZXJyb3IgKi8KK30KKworaW50IGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwLAorCQkJCSAgICBibGs2NF90IGJsb2NrLCB1bnNpZ25lZCBpbnQgbnVtKQoreworCV9fdTY0CWVuZCA9IGJsb2NrICsgbnVtOworCisJaWYgKCFibWFwKQorCQlyZXR1cm4gRUlOVkFMOworCisJaWYgKG51bSA9PSAxKQorCQlyZXR1cm4gIWV4dDJmc190ZXN0X2dlbmVyaWNfYm1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKQorCQkJCQkJIGJtYXAsIGJsb2NrKTsKKworCWlmIChFWFQyRlNfSVNfMzJfQklUTUFQKGJtYXApKSB7CisJCWlmICgoYmxvY2srbnVtLTEpICYgfjB4ZmZmZmZmZmZVTEwpIHsKKwkJCWV4dDJmc193YXJuX2JpdG1hcDIoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYm1hcCwKKwkJCQkJICAgIEVYVDJGU19VTk1BUktfRVJST1IsIDB4ZmZmZmZmZmYpOworCQkJcmV0dXJuIEVJTlZBTDsKKwkJfQorCQlyZXR1cm4gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwX3JhbmdlKAorCQkJKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYm1hcCwgYmxvY2ssIG51bSk7CisJfQorCisJaWYgKCFFWFQyRlNfSVNfNjRfQklUTUFQKGJtYXApKQorCQlyZXR1cm4gRUlOVkFMOworCisJSU5DX1NUQVQoYm1hcCwgdGVzdF9leHRfY291bnQpOworCisJLyogY29udmVydCB0byBjbHVzdGVycyBpZiBuZWNlc3NhcnkgKi8KKwlibG9jayA+Pj0gYm1hcC0+Y2x1c3Rlcl9iaXRzOworCWVuZCArPSAoMSA8PCBibWFwLT5jbHVzdGVyX2JpdHMpIC0gMTsKKwllbmQgPj49IGJtYXAtPmNsdXN0ZXJfYml0czsKKwludW0gPSBlbmQgLSBibG9jazsKKworCWlmICgoYmxvY2sgPCBibWFwLT5zdGFydCkgfHwgKGJsb2NrK251bS0xID4gYm1hcC0+ZW5kKSkgeworCQlleHQyZnNfd2Fybl9iaXRtYXAoRVhUMl9FVF9CQURfQkxPQ0tfVEVTVCwgYmxvY2ssCisJCQkJICAgYm1hcC0+ZGVzY3JpcHRpb24pOworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCXJldHVybiBibWFwLT5iaXRtYXBfb3BzLT50ZXN0X2NsZWFyX2JtYXBfZXh0ZW50KGJtYXAsIGJsb2NrLCBudW0pOworfQorCit2b2lkIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwLAorCQkJCSAgICAgYmxrNjRfdCBibG9jaywgdW5zaWduZWQgaW50IG51bSkKK3sKKwlfX3U2NAllbmQgPSBibG9jayArIG51bTsKKworCWlmICghYm1hcCkKKwkJcmV0dXJuOworCisJaWYgKEVYVDJGU19JU18zMl9CSVRNQVAoYm1hcCkpIHsKKwkJaWYgKChibG9jaytudW0tMSkgJiB+MHhmZmZmZmZmZlVMTCkgeworCQkJZXh0MmZzX3dhcm5fYml0bWFwMigoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBibWFwLAorCQkJCQkgICAgRVhUMkZTX1VOTUFSS19FUlJPUiwgMHhmZmZmZmZmZik7CisJCQlyZXR1cm47CisJCX0KKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwX3JhbmdlKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJtYXAsCisJCQkJCSAgICAgICBibG9jaywgbnVtKTsKKwl9CisKKwlpZiAoIUVYVDJGU19JU182NF9CSVRNQVAoYm1hcCkpCisJCXJldHVybjsKKworCUlOQ19TVEFUKGJtYXAsIG1hcmtfZXh0X2NvdW50KTsKKworCS8qIGNvbnZlcnQgdG8gY2x1c3RlcnMgaWYgbmVjZXNzYXJ5ICovCisJYmxvY2sgPj49IGJtYXAtPmNsdXN0ZXJfYml0czsKKwllbmQgKz0gKDEgPDwgYm1hcC0+Y2x1c3Rlcl9iaXRzKSAtIDE7CisJZW5kID4+PSBibWFwLT5jbHVzdGVyX2JpdHM7CisJbnVtID0gZW5kIC0gYmxvY2s7CisKKwlpZiAoKGJsb2NrIDwgYm1hcC0+c3RhcnQpIHx8IChibG9jaytudW0tMSA+IGJtYXAtPmVuZCkpIHsKKwkJZXh0MmZzX3dhcm5fYml0bWFwKEVYVDJfRVRfQkFEX0JMT0NLX01BUkssIGJsb2NrLAorCQkJCSAgIGJtYXAtPmRlc2NyaXB0aW9uKTsKKwkJcmV0dXJuOworCX0KKworCWJtYXAtPmJpdG1hcF9vcHMtPm1hcmtfYm1hcF9leHRlbnQoYm1hcCwgYmxvY2ssIG51bSk7Cit9CisKK3ZvaWQgZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXBfcmFuZ2UyKGV4dDJmc19ibG9ja19iaXRtYXAgYm1hcCwKKwkJCQkgICAgICAgYmxrNjRfdCBibG9jaywgdW5zaWduZWQgaW50IG51bSkKK3sKKwlfX3U2NAllbmQgPSBibG9jayArIG51bTsKKworCWlmICghYm1hcCkKKwkJcmV0dXJuOworCisJaWYgKEVYVDJGU19JU18zMl9CSVRNQVAoYm1hcCkpIHsKKwkJaWYgKChibG9jaytudW0tMSkgJiB+MHhmZmZmZmZmZlVMTCkgeworCQkJZXh0MmZzX3dhcm5fYml0bWFwMigoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBibWFwLAorCQkJCQkgICAgRVhUMkZTX1VOTUFSS19FUlJPUiwgMHhmZmZmZmZmZik7CisJCQlyZXR1cm47CisJCX0KKwkJZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXBfcmFuZ2UoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYm1hcCwKKwkJCQkJCSBibG9jaywgbnVtKTsKKwl9CisKKwlpZiAoIUVYVDJGU19JU182NF9CSVRNQVAoYm1hcCkpCisJCXJldHVybjsKKworCUlOQ19TVEFUKGJtYXAsIHVubWFya19leHRfY291bnQpOworCisJLyogY29udmVydCB0byBjbHVzdGVycyBpZiBuZWNlc3NhcnkgKi8KKwlibG9jayA+Pj0gYm1hcC0+Y2x1c3Rlcl9iaXRzOworCWVuZCArPSAoMSA8PCBibWFwLT5jbHVzdGVyX2JpdHMpIC0gMTsKKwllbmQgPj49IGJtYXAtPmNsdXN0ZXJfYml0czsKKwludW0gPSBlbmQgLSBibG9jazsKKworCWlmICgoYmxvY2sgPCBibWFwLT5zdGFydCkgfHwgKGJsb2NrK251bS0xID4gYm1hcC0+ZW5kKSkgeworCQlleHQyZnNfd2Fybl9iaXRtYXAoRVhUMl9FVF9CQURfQkxPQ0tfVU5NQVJLLCBibG9jaywKKwkJCQkgICBibWFwLT5kZXNjcmlwdGlvbik7CisJCXJldHVybjsKKwl9CisKKwlibWFwLT5iaXRtYXBfb3BzLT51bm1hcmtfYm1hcF9leHRlbnQoYm1hcCwgYmxvY2ssIG51bSk7Cit9CisKK3ZvaWQgZXh0MmZzX3dhcm5fYml0bWFwMzIoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwgY29uc3QgY2hhciAqZnVuYykKK3sKKyNpZm5kZWYgT01JVF9DT01fRVJSCisJaWYgKGJpdG1hcCAmJiBiaXRtYXAtPmRlc2NyaXB0aW9uKQorCQljb21fZXJyKDAsIEVYVDJfRVRfTUFHSUNfR0VORVJJQ19CSVRNQVAsCisJCQkiY2FsbGVkICVzIHdpdGggNjQtYml0IGJpdG1hcCBmb3IgJXMiLCBmdW5jLAorCQkJYml0bWFwLT5kZXNjcmlwdGlvbik7CisJZWxzZQorCQljb21fZXJyKDAsIEVYVDJfRVRfTUFHSUNfR0VORVJJQ19CSVRNQVAsCisJCQkiY2FsbGVkICVzIHdpdGggNjQtYml0IGJpdG1hcCIsIGZ1bmMpOworI2VuZGlmCit9CisKK2VycmNvZGVfdCBleHQyZnNfY29udmVydF9zdWJjbHVzdGVyX2JpdG1hcChleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCAqYml0bWFwKQoreworCWV4dDJmc19ibG9ja19iaXRtYXAJY21hcCwgYm1hcDsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlibGs2NF90CQkJaSwgYl9lbmQsIGNfZW5kOworCWludAkJCW4sIHJhdGlvOworCisJYm1hcCA9ICpiaXRtYXA7CisKKwlpZiAoZnMtPmNsdXN0ZXJfcmF0aW9fYml0cyA9PSBleHQyZnNfZ2V0X2JpdG1hcF9ncmFudWxhcml0eShibWFwKSkKKwkJcmV0dXJuIDA7CS8qIE5vdGhpbmcgdG8gZG8gKi8KKworCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9ibG9ja19iaXRtYXAoZnMsICJjb252ZXJ0ZWQgY2x1c3RlciBiaXRtYXAiLAorCQkJCQkgICAgICAmY21hcCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWkgPSBibWFwLT5zdGFydDsKKwliX2VuZCA9IGJtYXAtPmVuZDsKKwlibWFwLT5lbmQgPSBibWFwLT5yZWFsX2VuZDsKKwljX2VuZCA9IGNtYXAtPmVuZDsKKwljbWFwLT5lbmQgPSBjbWFwLT5yZWFsX2VuZDsKKwluID0gMDsKKwlyYXRpbyA9IDEgPDwgZnMtPmNsdXN0ZXJfcmF0aW9fYml0czsKKwl3aGlsZSAoaSA8IGJtYXAtPnJlYWxfZW5kKSB7CisJCWlmIChleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGJtYXAsIGkpKSB7CisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGNtYXAsIGkpOworCQkJaSArPSByYXRpbyAtIG47CisJCQluID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWkrKzsgbisrOworCQlpZiAobiA+PSByYXRpbykKKwkJCW4gPSAwOworCX0KKwlibWFwLT5lbmQgPSBiX2VuZDsKKwljbWFwLT5lbmQgPSBjX2VuZDsKKwlleHQyZnNfZnJlZV9ibG9ja19iaXRtYXAoYm1hcCk7CisJKmJpdG1hcCA9IGNtYXA7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZmluZF9maXJzdF96ZXJvX2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgICBfX3U2NCBzdGFydCwgX191NjQgZW5kLCBfX3U2NCAqb3V0KQoreworCV9fdTY0IGNzdGFydCwgY2VuZCwgY291dDsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJaWYgKCFiaXRtYXApCisJCXJldHVybiBFSU5WQUw7CisKKwlpZiAoRVhUMkZTX0lTXzMyX0JJVE1BUChiaXRtYXApKSB7CisJCWJsa190IGJsayA9IDA7CisKKwkJaWYgKCgoc3RhcnQpICYgfjB4ZmZmZmZmZmZVTEwpIHx8CisJCSAgICAoKGVuZCkgJiB+MHhmZmZmZmZmZlVMTCkpIHsKKwkJCWV4dDJmc193YXJuX2JpdG1hcDIoYml0bWFwLCBFWFQyRlNfVEVTVF9FUlJPUiwgc3RhcnQpOworCQkJcmV0dXJuIEVJTlZBTDsKKwkJfQorCisJCXJldHZhbCA9IGV4dDJmc19maW5kX2ZpcnN0X3plcm9fZ2VuZXJpY19iaXRtYXAoYml0bWFwLCBzdGFydCwKKwkJCQkJCQkgICAgICAgZW5kLCAmYmxrKTsKKwkJaWYgKHJldHZhbCA9PSAwKQorCQkJKm91dCA9IGJsazsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoIUVYVDJGU19JU182NF9CSVRNQVAoYml0bWFwKSkKKwkJcmV0dXJuIEVJTlZBTDsKKworCWNzdGFydCA9IHN0YXJ0ID4+IGJpdG1hcC0+Y2x1c3Rlcl9iaXRzOworCWNlbmQgPSBlbmQgPj4gYml0bWFwLT5jbHVzdGVyX2JpdHM7CisKKwlpZiAoY3N0YXJ0IDwgYml0bWFwLT5zdGFydCB8fCBjZW5kID4gYml0bWFwLT5lbmQgfHwgc3RhcnQgPiBlbmQpIHsKKwkJd2Fybl9iaXRtYXAoYml0bWFwLCBFWFQyRlNfVEVTVF9FUlJPUiwgc3RhcnQpOworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCWlmIChiaXRtYXAtPmJpdG1hcF9vcHMtPmZpbmRfZmlyc3RfemVybykgeworCQlyZXR2YWwgPSBiaXRtYXAtPmJpdG1hcF9vcHMtPmZpbmRfZmlyc3RfemVybyhiaXRtYXAsIGNzdGFydCwKKwkJCQkJCQkgICAgIGNlbmQsICZjb3V0KTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJZm91bmQ6CisJCWNvdXQgPDw9IGJpdG1hcC0+Y2x1c3Rlcl9iaXRzOworCQkqb3V0ID0gKGNvdXQgPj0gc3RhcnQpID8gY291dCA6IHN0YXJ0OworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3IgKGNvdXQgPSBjc3RhcnQ7IGNvdXQgPD0gY2VuZDsgY291dCsrKQorCQlpZiAoIWJpdG1hcC0+Yml0bWFwX29wcy0+dGVzdF9ibWFwKGJpdG1hcCwgY291dCkpCisJCQlnb3RvIGZvdW5kOworCisJcmV0dXJuIEVOT0VOVDsKK30KKworZXJyY29kZV90IGV4dDJmc19maW5kX2ZpcnN0X3NldF9nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgICBfX3U2NCBzdGFydCwgX191NjQgZW5kLCBfX3U2NCAqb3V0KQoreworCV9fdTY0IGNzdGFydCwgY2VuZCwgY291dDsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJaWYgKCFiaXRtYXApCisJCXJldHVybiBFSU5WQUw7CisKKwlpZiAoRVhUMkZTX0lTXzMyX0JJVE1BUChiaXRtYXApKSB7CisJCWJsa190IGJsayA9IDA7CisKKwkJaWYgKCgoc3RhcnQpICYgfjB4ZmZmZmZmZmZVTEwpIHx8CisJCSAgICAoKGVuZCkgJiB+MHhmZmZmZmZmZlVMTCkpIHsKKwkJCWV4dDJmc193YXJuX2JpdG1hcDIoYml0bWFwLCBFWFQyRlNfVEVTVF9FUlJPUiwgc3RhcnQpOworCQkJcmV0dXJuIEVJTlZBTDsKKwkJfQorCisJCXJldHZhbCA9IGV4dDJmc19maW5kX2ZpcnN0X3NldF9nZW5lcmljX2JpdG1hcChiaXRtYXAsIHN0YXJ0LAorCQkJCQkJCSAgICAgIGVuZCwgJmJsayk7CisJCWlmIChyZXR2YWwgPT0gMCkKKwkJCSpvdXQgPSBibGs7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJaWYgKCFFWFQyRlNfSVNfNjRfQklUTUFQKGJpdG1hcCkpCisJCXJldHVybiBFSU5WQUw7CisKKwljc3RhcnQgPSBzdGFydCA+PiBiaXRtYXAtPmNsdXN0ZXJfYml0czsKKwljZW5kID0gZW5kID4+IGJpdG1hcC0+Y2x1c3Rlcl9iaXRzOworCisJaWYgKGNzdGFydCA8IGJpdG1hcC0+c3RhcnQgfHwgY2VuZCA+IGJpdG1hcC0+ZW5kIHx8IHN0YXJ0ID4gZW5kKSB7CisJCXdhcm5fYml0bWFwKGJpdG1hcCwgRVhUMkZTX1RFU1RfRVJST1IsIHN0YXJ0KTsKKwkJcmV0dXJuIEVJTlZBTDsKKwl9CisKKwlpZiAoYml0bWFwLT5iaXRtYXBfb3BzLT5maW5kX2ZpcnN0X3NldCkgeworCQlyZXR2YWwgPSBiaXRtYXAtPmJpdG1hcF9vcHMtPmZpbmRfZmlyc3Rfc2V0KGJpdG1hcCwgY3N0YXJ0LAorCQkJCQkJCSAgICBjZW5kLCAmY291dCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCWZvdW5kOgorCQljb3V0IDw8PSBiaXRtYXAtPmNsdXN0ZXJfYml0czsKKwkJKm91dCA9IChjb3V0ID49IHN0YXJ0KSA/IGNvdXQgOiBzdGFydDsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yIChjb3V0ID0gY3N0YXJ0OyBjb3V0IDw9IGNlbmQ7IGNvdXQrKykKKwkJaWYgKGJpdG1hcC0+Yml0bWFwX29wcy0+dGVzdF9ibWFwKGJpdG1hcCwgY291dCkpCisJCQlnb3RvIGZvdW5kOworCisJcmV0dXJuIEVOT0VOVDsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvZ2VuX2NyYzMyY3RhYmxlLmMgYi9saWIvZXh0MmZzL2dlbl9jcmMzMmN0YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OTZlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2dlbl9jcmMzMmN0YWJsZS5jCkBAIC0wLDAgKzEsMTIzIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJjcmMzMmNfZGVmcy5oIgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisKKyNkZWZpbmUgRU5UUklFU19QRVJfTElORSA0CisKKyNpZiBDUkNfTEVfQklUUyA8PSA4CisjZGVmaW5lIExFX1RBQkxFX1NJWkUgKDEgPDwgQ1JDX0xFX0JJVFMpCisjZWxzZQorI2RlZmluZSBMRV9UQUJMRV9TSVpFIDI1NgorI2VuZGlmCisKKyNpZiBDUkNfQkVfQklUUyA8PSA4CisjZGVmaW5lIEJFX1RBQkxFX1NJWkUgKDEgPDwgQ1JDX0JFX0JJVFMpCisjZWxzZQorI2RlZmluZSBCRV9UQUJMRV9TSVpFIDI1NgorI2VuZGlmCisKK3N0YXRpYyB1aW50MzJfdCBjcmMzMmN0YWJsZV9sZVs4XVsyNTZdOworc3RhdGljIHVpbnQzMl90IGNyYzMyY3RhYmxlX2JlWzhdWzI1Nl07CisKKy8qKgorICogY3JjMzJjaW5pdF9sZSgpIC0gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgTEUgdGFibGUgZGF0YQorICoKKyAqIGNyYyBpcyB0aGUgY3JjIG9mIHRoZSBieXRlIGk7IG90aGVyIGVudHJpZXMgYXJlIGZpbGxlZCBpbiBiYXNlZCBvbiB0aGUKKyAqIGZhY3QgdGhhdCBjcmN0YWJsZVtpXmpdID0gY3JjdGFibGVbaV0gXiBjcmN0YWJsZVtqXS4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIGNyYzMyY2luaXRfbGUodm9pZCkKK3sKKwl1bnNpZ25lZCBpLCBqOworCXVpbnQzMl90IGNyYyA9IDE7CisKKwljcmMzMmN0YWJsZV9sZVswXVswXSA9IDA7CisKKwlmb3IgKGkgPSBMRV9UQUJMRV9TSVpFID4+IDE7IGk7IGkgPj49IDEpIHsKKwkJY3JjID0gKGNyYyA+PiAxKSBeICgoY3JjICYgMSkgPyBDUkNQT0xZX0xFIDogMCk7CisJCWZvciAoaiA9IDA7IGogPCBMRV9UQUJMRV9TSVpFOyBqICs9IDIgKiBpKQorCQkJY3JjMzJjdGFibGVfbGVbMF1baSArIGpdID0gY3JjIF4gY3JjMzJjdGFibGVfbGVbMF1bal07CisJfQorCWZvciAoaSA9IDA7IGkgPCBMRV9UQUJMRV9TSVpFOyBpKyspIHsKKwkJY3JjID0gY3JjMzJjdGFibGVfbGVbMF1baV07CisJCWZvciAoaiA9IDE7IGogPCA4OyBqKyspIHsKKwkJCWNyYyA9IGNyYzMyY3RhYmxlX2xlWzBdW2NyYyAmIDB4ZmZdIF4gKGNyYyA+PiA4KTsKKwkJCWNyYzMyY3RhYmxlX2xlW2pdW2ldID0gY3JjOworCQl9CisJfQorfQorCisvKioKKyAqIGNyYzMyY2luaXRfYmUoKSAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIEJFIHRhYmxlIGRhdGEKKyAqLworc3RhdGljIHZvaWQgY3JjMzJjaW5pdF9iZSh2b2lkKQoreworCXVuc2lnbmVkIGksIGo7CisJdWludDMyX3QgY3JjID0gMHg4MDAwMDAwMDsKKworCWNyYzMyY3RhYmxlX2JlWzBdWzBdID0gMDsKKworCWZvciAoaSA9IDE7IGkgPCBCRV9UQUJMRV9TSVpFOyBpIDw8PSAxKSB7CisJCWNyYyA9IChjcmMgPDwgMSkgXiAoKGNyYyAmIDB4ODAwMDAwMDApID8gQ1JDUE9MWV9CRSA6IDApOworCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQkJY3JjMzJjdGFibGVfYmVbMF1baSArIGpdID0gY3JjIF4gY3JjMzJjdGFibGVfYmVbMF1bal07CisJfQorCWZvciAoaSA9IDA7IGkgPCBCRV9UQUJMRV9TSVpFOyBpKyspIHsKKwkJY3JjID0gY3JjMzJjdGFibGVfYmVbMF1baV07CisJCWZvciAoaiA9IDE7IGogPCA4OyBqKyspIHsKKwkJCWNyYyA9IGNyYzMyY3RhYmxlX2JlWzBdWyhjcmMgPj4gMjQpICYgMHhmZl0gXgorCQkJICAgICAgKGNyYyA8PCA4KTsKKwkJCWNyYzMyY3RhYmxlX2JlW2pdW2ldID0gY3JjOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBvdXRwdXRfdGFibGUodWludDMyX3QgdGFibGVbOF1bMjU2XSwgaW50IGxlbiwgY2hhciB0cmFucykKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaiA9IDAgOyBqIDwgODsgaisrKSB7CisJCXByaW50Zigic3RhdGljIGNvbnN0IHVpbnQzMl90IHQlZF8lY2VbXSA9IHsiLCBqLCB0cmFucyk7CisJCWZvciAoaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHsKKwkJCWlmICgoaSAlIEVOVFJJRVNfUEVSX0xJTkUpID09IDApCisJCQkJcHJpbnRmKCJcbiIpOworCQkJcHJpbnRmKCJ0byVjZSgweCU4Ljh4TCksIiwgdHJhbnMsIHRhYmxlW2pdW2ldKTsKKwkJCWlmICgoaSAlIEVOVFJJRVNfUEVSX0xJTkUpICE9IChFTlRSSUVTX1BFUl9MSU5FIC0gMSkpCisJCQkJcHJpbnRmKCIgIik7CisJCX0KKwkJcHJpbnRmKCJ0byVjZSgweCU4Ljh4TCl9O1xuXG4iLCB0cmFucywgdGFibGVbal1bbGVuIC0gMV0pOworCisJCWlmICh0cmFucyA9PSAnbCcpIHsKKwkJCWlmICgoaisxKSo4ID49IENSQ19MRV9CSVRTKQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJaWYgKChqKzEpKjggPj0gQ1JDX0JFX0JJVFMpCisJCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlwcmludGYoIi8qXG4iKTsKKwlwcmludGYoIiAqIGNyYzMyY3RhYmxlLmggLSBDUkMzMmMgdGFibGVzXG4iKTsKKwlwcmludGYoIiAqICAgIHRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgLSBkbyBub3QgZWRpdFxuIik7CisJcHJpbnRmKCIgKgkjIGdlbl9jcmMzMmN0YWJsZSA+IGNyYzMyY190YWJsZS5oXG4iKTsKKwlwcmludGYoIiAqICAgIHdpdGhcbiIpOworCXByaW50ZigiICoJQ1JDX0xFX0JJVFMgPSAlZFxuIiwgQ1JDX0xFX0JJVFMpOworCXByaW50ZigiICoJQ1JDX0JFX0JJVFMgPSAlZFxuIiwgQ1JDX0JFX0JJVFMpOworCXByaW50ZigiICovXG4iKTsKKwlwcmludGYoIiNpbmNsdWRlIDxzdGRpbnQuaD5cbiIpOworCisJaWYgKENSQ19MRV9CSVRTID4gMSkgeworCQljcmMzMmNpbml0X2xlKCk7CisJCW91dHB1dF90YWJsZShjcmMzMmN0YWJsZV9sZSwgTEVfVEFCTEVfU0laRSwgJ2wnKTsKKwl9CisKKwlpZiAoQ1JDX0JFX0JJVFMgPiAxKSB7CisJCWNyYzMyY2luaXRfYmUoKTsKKwkJb3V0cHV0X3RhYmxlKGNyYzMyY3RhYmxlX2JlLCBCRV9UQUJMRV9TSVpFLCAnYicpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9nZXRfcGF0aG5hbWUuYyBiL2xpYi9leHQyZnMvZ2V0X3BhdGhuYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhZWE2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvZ2V0X3BhdGhuYW1lLmMKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBnZXRfcGF0aG5hbWUuYyAtLS0gZG8gZGlyZWN0cnkvaW5vZGUgLT4gbmFtZSB0cmFuc2xhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqCisgKiAJZXh0MmZzX2dldF9wYXRobmFtZShmcywgZGlyLCBpbm8sIG5hbWUpCisgKgorICogCVRoaXMgZnVuY3Rpb24gdHJhbnNsYXRlcyB0YWtlcyB0d28gaW5vZGUgbnVtYmVycyBpbnRvIGEKKyAqIAlzdHJpbmcsIHBsYWNpbmcgdGhlIHJlc3VsdCBpbiA8bmFtZT4uICA8ZGlyPiBpcyB0aGUgY29udGFpbmluZworICogCWRpcmVjdG9yeSBpbm9kZSwgYW5kIDxpbm8+IGlzIHRoZSBpbm9kZSBudW1iZXIgaXRzZWxmLiAgSWYKKyAqIAk8aW5vPiBpcyB6ZXJvLCB0aGVuIGV4dDJmc19nZXRfcGF0aG5hbWUgd2lsbCByZXR1cm4gcGF0aG5hbWUKKyAqIAlvZiB0aGUgdGhlIGRpcmVjdG9yeSA8ZGlyPi4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKK3N0cnVjdCBnZXRfcGF0aG5hbWVfc3RydWN0IHsKKwlleHQyX2lub190CXNlYXJjaF9pbm87CisJZXh0Ml9pbm9fdAlwYXJlbnQ7CisJY2hhcgkJKm5hbWU7CisJZXJyY29kZV90CWVycmNvZGU7Cit9OworCisjaWZkZWYgX19UVVJCT0NfXworICNwcmFnbWEgYXJnc3VzZWQKKyNlbmRpZgorc3RhdGljIGludCBnZXRfcGF0aG5hbWVfcHJvYyhzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJCSAgICAgaW50CW9mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgIGludAlibG9ja3NpemUgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICBjaGFyCSpidWYgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICB2b2lkCSpwcml2X2RhdGEpCit7CisJc3RydWN0IGdldF9wYXRobmFtZV9zdHJ1Y3QJKmdwOworCWVycmNvZGVfdAkJCXJldHZhbDsKKworCWdwID0gKHN0cnVjdCBnZXRfcGF0aG5hbWVfc3RydWN0ICopIHByaXZfZGF0YTsKKworCWlmICgoKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSA9PSAyKSAmJgorCSAgICAhc3RybmNtcChkaXJlbnQtPm5hbWUsICIuLiIsIDIpKQorCQlncC0+cGFyZW50ID0gZGlyZW50LT5pbm9kZTsKKwlpZiAoZGlyZW50LT5pbm9kZSA9PSBncC0+c2VhcmNoX2lubykgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbSgoZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpICsgMSwKKwkJCQkJJmdwLT5uYW1lKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZ3AtPmVycmNvZGUgPSByZXR2YWw7CisJCQlyZXR1cm4gRElSRU5UX0FCT1JUOworCQl9CisJCXN0cm5jcHkoZ3AtPm5hbWUsIGRpcmVudC0+bmFtZSwgKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSk7CisJCWdwLT5uYW1lW2RpcmVudC0+bmFtZV9sZW4gJiAweEZGXSA9ICdcMCc7CisJCXJldHVybiBESVJFTlRfQUJPUlQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IGV4dDJmc19nZXRfcGF0aG5hbWVfaW50KGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGRpciwKKwkJCQkJIGV4dDJfaW5vX3QgaW5vLCBpbnQgbWF4ZGVwdGgsCisJCQkJCSBjaGFyICpidWYsIGNoYXIgKipuYW1lKQoreworCXN0cnVjdCBnZXRfcGF0aG5hbWVfc3RydWN0IGdwOworCWNoYXIJKnBhcmVudF9uYW1lID0gMCwgKnJldDsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJaWYgKGRpciA9PSBpbm8pIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oMiwgbmFtZSk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlzdHJjcHkoKm5hbWUsIChkaXIgPT0gRVhUMl9ST09UX0lOTykgPyAiLyIgOiAiLiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWRpciB8fCAobWF4ZGVwdGggPCAwKSkgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbSg0LCBuYW1lKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCXN0cmNweSgqbmFtZSwgIi4uLiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlncC5zZWFyY2hfaW5vID0gaW5vOworCWdwLnBhcmVudCA9IDA7CisJZ3AubmFtZSA9IDA7CisJZ3AuZXJyY29kZSA9IDA7CisKKwlyZXR2YWwgPSBleHQyZnNfZGlyX2l0ZXJhdGUoZnMsIGRpciwgMCwgYnVmLCBnZXRfcGF0aG5hbWVfcHJvYywgJmdwKTsKKwlpZiAocmV0dmFsID09IEVYVDJfRVRfTk9fRElSRUNUT1JZKSB7CisJCWNoYXIgdG1wWzMyXTsKKworCQlpZiAoaW5vKQorCQkJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIjwldT4vPCV1PiIsIGRpciwgaW5vKTsKKwkJZWxzZQorCQkJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIjwldT4iLCBkaXIpOworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzdHJsZW4odG1wKSsxLCBuYW1lKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKwkJc3RyY3B5KCpuYW1lLCB0bXApOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCWlmIChncC5lcnJjb2RlKSB7CisJCXJldHZhbCA9IGdwLmVycmNvZGU7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X3BhdGhuYW1lX2ludChmcywgZ3AucGFyZW50LCBkaXIsIG1heGRlcHRoLTEsCisJCQkJCSBidWYsICZwYXJlbnRfbmFtZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCWlmICghaW5vKSB7CisJCSpuYW1lID0gcGFyZW50X25hbWU7CisJCXJldHVybiAwOworCX0KKworCWlmIChncC5uYW1lKQorCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzdHJsZW4ocGFyZW50X25hbWUpK3N0cmxlbihncC5uYW1lKSsyLAorCQkJCQkmcmV0KTsKKwllbHNlCisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHN0cmxlbihwYXJlbnRfbmFtZSkrNSwgJnJldCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJcmV0WzBdID0gMDsKKwlpZiAocGFyZW50X25hbWVbMV0pCisJCXN0cmNhdChyZXQsIHBhcmVudF9uYW1lKTsKKwlzdHJjYXQocmV0LCAiLyIpOworCWlmIChncC5uYW1lKQorCQlzdHJjYXQocmV0LCBncC5uYW1lKTsKKwllbHNlCisJCXN0cmNhdChyZXQsICI/Pz8iKTsKKwkqbmFtZSA9IHJldDsKKwlyZXR2YWwgPSAwOworCitjbGVhbnVwOgorCWV4dDJmc19mcmVlX21lbSgmcGFyZW50X25hbWUpOworCWV4dDJmc19mcmVlX21lbSgmZ3AubmFtZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGV4dDJmc19nZXRfcGF0aG5hbWUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgZGlyLCBleHQyX2lub190IGlubywKKwkJCSAgICAgIGNoYXIgKipuYW1lKQoreworCWNoYXIJKmJ1ZjsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZidWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJaWYgKGRpciA9PSBpbm8pCisJCWlubyA9IDA7CisJcmV0dmFsID0gZXh0MmZzX2dldF9wYXRobmFtZV9pbnQoZnMsIGRpciwgaW5vLCAzMiwgYnVmLCBuYW1lKTsKKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisJcmV0dXJuIHJldHZhbDsKKworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9nZXRzZWN0c2l6ZS5jIGIvbGliL2V4dDJmcy9nZXRzZWN0c2l6ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljM2Y0YTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2dldHNlY3RzaXplLmMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBnZXRzZWN0c2l6ZS5jIC0tLSBnZXQgdGhlIHNlY3RvciBzaXplIG9mIGEgZGV2aWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NSBUaGVvZG9yZSBUcydvLgorICogQ29weXJpZ2h0IChDKSAyMDAzIFZNd2FyZSwgSW5jLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRQorI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2lmZGVmIEhBVkVfTElOVVhfRkRfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZkLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9JTykKKyNpZiAhZGVmaW5lZChCTEtTU1pHRVQpCisjZGVmaW5lIEJMS1NTWkdFVCAgX0lPKDB4MTIsMTA0KS8qIGdldCBibG9jayBkZXZpY2Ugc2VjdG9yIHNpemUgKi8KKyNlbmRpZgorI2lmICFkZWZpbmVkKEJMS1BCU1pHRVQpCisjZGVmaW5lIEJMS1BCU1pHRVQgX0lPKDB4MTIsMTIzKS8qIGdldCBibG9jayBwaHlzaWNhbCBzZWN0b3Igc2l6ZSAqLworI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworLyoKKyAqIFJldHVybnMgdGhlIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgYSBkZXZpY2UKKyAqLworZXJyY29kZV90IGV4dDJmc19nZXRfZGV2aWNlX3NlY3RzaXplKGNvbnN0IGNoYXIgKmZpbGUsIGludCAqc2VjdHNpemUpCit7CisJaW50CWZkOworCisJZmQgPSBleHQyZnNfb3Blbl9maWxlKGZpbGUsIE9fUkRPTkxZLCAwKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZXJybm87CisKKyNpZmRlZiBCTEtTU1pHRVQKKwlpZiAoaW9jdGwoZmQsIEJMS1NTWkdFVCwgc2VjdHNpemUpID49IDApIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwkqc2VjdHNpemUgPSAwOworCWNsb3NlKGZkKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiBkZXNpcmVkIGFsaWdubWVudCBmb3IgZGlyZWN0IEkvTworICovCitpbnQgZXh0MmZzX2dldF9kaW9fYWxpZ25tZW50KGludCBmZCkKK3sKKwlpbnQgYWxpZ24gPSAwOworCisjaWZkZWYgQkxLU1NaR0VUCisJaWYgKGlvY3RsKGZkLCBCTEtTU1pHRVQsICZhbGlnbikgPCAwKQorCQlhbGlnbiA9IDA7CisjZW5kaWYKKworI2lmZGVmIF9TQ19QQUdFU0laRQorCWlmIChhbGlnbiA8PSAwKQorCQlhbGlnbiA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfR0VUUEFHRVNJWkUKKwlpZiAoYWxpZ24gPD0gMCkKKwkJYWxpZ24gPSBnZXRwYWdlc2l6ZSgpOworI2VuZGlmCisJaWYgKGFsaWduIDw9IDApCisJCWFsaWduID0gNDA5NjsKKworCXJldHVybiBhbGlnbjsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIHBoeXNpY2FsIHNlY3RvciBzaXplIG9mIGEgZGV2aWNlCisgKi8KK2VycmNvZGVfdCBleHQyZnNfZ2V0X2RldmljZV9waHlzX3NlY3RzaXplKGNvbnN0IGNoYXIgKmZpbGUsIGludCAqc2VjdHNpemUpCit7CisJaW50CWZkOworCisJZmQgPSBleHQyZnNfb3Blbl9maWxlKGZpbGUsIE9fUkRPTkxZLCAwKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZXJybm87CisKKyNpZmRlZiBCTEtQQlNaR0VUCisJaWYgKGlvY3RsKGZkLCBCTEtQQlNaR0VULCBzZWN0c2l6ZSkgPj0gMCkgeworCQljbG9zZShmZCk7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCSpzZWN0c2l6ZSA9IDA7CisJY2xvc2UoZmQpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9nZXRzaXplLmMgYi9saWIvZXh0MmZzL2dldHNpemUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjI3MTU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9nZXRzaXplLmMKQEAgLTAsMCArMSwzMDggQEAKKy8qCisgKiBnZXRzaXplLmMgLS0tIGdldCB0aGUgc2l6ZSBvZiBhIHBhcnRpdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTUgVGhlb2RvcmUgVHMnby4KKyAqIENvcHlyaWdodCAoQykgMjAwMyBWTXdhcmUsIEluYy4KKyAqCisgKiBXaW5kb3dzIHZlcnNpb24gb2YgZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZSBieSBDaHJpcyBMaSwgVk13YXJlLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRQorI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTElOVVhfRkRfSAorI2luY2x1ZGUgPGxpbnV4L2ZkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19ESVNLTEFCRUxfSAorI2luY2x1ZGUgPHN5cy9kaXNrbGFiZWwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0RJU0tfSAorI2luY2x1ZGUgPHN5cy9kaXNrLmg+CisjZW5kaWYKKyNpZmRlZiBfX2xpbnV4X18KKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChfSU8pICYmICFkZWZpbmVkKEJMS0dFVFNJWkUpCisjZGVmaW5lIEJMS0dFVFNJWkUgX0lPKDB4MTIsOTYpCS8qIHJldHVybiBkZXZpY2Ugc2l6ZSAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChfSU9SKSAmJiAhZGVmaW5lZChCTEtHRVRTSVpFNjQpCisjZGVmaW5lIEJMS0dFVFNJWkU2NCBfSU9SKDB4MTIsMTE0LHNpemVfdCkJLyogcmV0dXJuIGRldmljZSBzaXplIGluIGJ5dGVzICh1NjQgKmFyZykgKi8KKyNlbmRpZgorCisjaWZkZWYgQVBQTEVfREFSV0lOCisjZGVmaW5lIEJMS0dFVFNJWkUgREtJT0NHRVRCTE9DS0NPVU5UMzIKKyNlbmRpZiAvKiBBUFBMRV9EQVJXSU4gKi8KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZCAoV0lOMzIpCisjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgIndpbmlvY3RsLmgiCisKKyNpZiAoX1dJTjMyX1dJTk5UID49IDB4MDUwMCkKKyNkZWZpbmUgSEFWRV9HRVRfRklMRV9TSVpFX0VYIDEKKyNlbmRpZgorCitlcnJjb2RlX3QgZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZShjb25zdCBjaGFyICpmaWxlLCBpbnQgYmxvY2tzaXplLAorCQkJCSBibGtfdCAqcmV0YmxvY2tzKQoreworCUhBTkRMRSBkZXY7CisJUEFSVElUSU9OX0lORk9STUFUSU9OIHBpOworCURJU0tfR0VPTUVUUlkgZ2k7CisJRFdPUkQgcmV0Ynl0ZXM7CisjaWZkZWYgSEFWRV9HRVRfRklMRV9TSVpFX0VYCisJTEFSR0VfSU5URUdFUiBmaWxlc2l6ZTsKKyNlbHNlCisJRFdPUkQgZmlsZXNpemU7CisjZW5kaWYgLyogSEFWRV9HRVRfRklMRV9TSVpFX0VYICovCisKKwlkZXYgPSBDcmVhdGVGaWxlKGZpbGUsIEdFTkVSSUNfUkVBRCwKKwkJCSBGSUxFX1NIQVJFX1JFQUQgfCBGSUxFX1NIQVJFX1dSSVRFICwKKyAgICAgICAgICAgICAgICAJIE5VTEwsICBPUEVOX0VYSVNUSU5HLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsICBOVUxMKTsKKworCWlmIChkZXYgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCXJldHVybiBFQkFERjsKKwlpZiAoRGV2aWNlSW9Db250cm9sKGRldiwgSU9DVExfRElTS19HRVRfUEFSVElUSU9OX0lORk8sCisJCQkgICAgJnBpLCBzaXplb2YoUEFSVElUSU9OX0lORk9STUFUSU9OKSwKKwkJCSAgICAmcGksIHNpemVvZihQQVJUSVRJT05fSU5GT1JNQVRJT04pLAorCQkJICAgICZyZXRieXRlcywgTlVMTCkpIHsKKworCQkqcmV0YmxvY2tzID0gcGkuUGFydGl0aW9uTGVuZ3RoLlF1YWRQYXJ0IC8gYmxvY2tzaXplOworCisJfSBlbHNlIGlmIChEZXZpY2VJb0NvbnRyb2woZGV2LCBJT0NUTF9ESVNLX0dFVF9EUklWRV9HRU9NRVRSWSwKKwkJCQkmZ2ksIHNpemVvZihESVNLX0dFT01FVFJZKSwKKwkJCQkmZ2ksIHNpemVvZihESVNLX0dFT01FVFJZKSwKKwkJCQkmcmV0Ynl0ZXMsIE5VTEwpKSB7CisKKwkJKnJldGJsb2NrcyA9IGdpLkJ5dGVzUGVyU2VjdG9yICoKKwkJCSAgICAgZ2kuU2VjdG9yc1BlclRyYWNrICoKKwkJCSAgICAgZ2kuVHJhY2tzUGVyQ3lsaW5kZXIgKgorCQkJICAgICBnaS5DeWxpbmRlcnMuUXVhZFBhcnQgLyBibG9ja3NpemU7CisKKyNpZmRlZiBIQVZFX0dFVF9GSUxFX1NJWkVfRVgKKwl9IGVsc2UgaWYgKEdldEZpbGVTaXplRXgoZGV2LCAmZmlsZXNpemUpKSB7CisJCSpyZXRibG9ja3MgPSBmaWxlc2l6ZS5RdWFkUGFydCAvIGJsb2Nrc2l6ZTsKKwl9CisjZWxzZQorCX0gZWxzZSB7CisJCWZpbGVzaXplID0gR2V0RmlsZVNpemUoZGV2LCBOVUxMKTsKKwkJaWYgKElOVkFMSURfRklMRV9TSVpFICE9IGZpbGVzaXplKSB7CisJCQkqcmV0YmxvY2tzID0gZmlsZXNpemUgLyBibG9ja3NpemU7CisJCX0KKwl9CisjZW5kaWYgLyogSEFWRV9HRVRfRklMRV9TSVpFX0VYICovCisKKwlDbG9zZUhhbmRsZShkZXYpOworCXJldHVybiAwOworfQorCisjZWxzZQorCitzdGF0aWMgaW50IHZhbGlkX29mZnNldCAoaW50IGZkLCBleHQyX2xvZmZfdCBvZmZzZXQpCit7CisJY2hhciBjaDsKKworCWlmIChleHQyZnNfbGxzZWVrIChmZCwgb2Zmc2V0LCAwKSA8IDApCisJCXJldHVybiAwOworCWlmIChyZWFkIChmZCwgJmNoLCAxKSA8IDEpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBpbiBhIHBhcnRpdGlvbgorICovCitlcnJjb2RlX3QgZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZTIoY29uc3QgY2hhciAqZmlsZSwgaW50IGJsb2Nrc2l6ZSwKKwkJCQkgIGJsazY0X3QgKnJldGJsb2NrcykKK3sKKwlpbnQJZmQsIHJjID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTY0OworCWV4dDJfbG9mZl90IGhpZ2gsIGxvdzsKKworCWZkID0gZXh0MmZzX29wZW5fZmlsZShmaWxlLCBPX1JET05MWSwgMCk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIGVycm5vOworCisjaWZkZWYgREtJT0NHRVRCTE9DS0NPVU5UCS8qIEZvciBBcHBsZSBEYXJ3aW4gKi8KKwlpZiAoaW9jdGwoZmQsIERLSU9DR0VUQkxPQ0tDT1VOVCwgJnNpemU2NCkgPj0gMCkgeworCQkqcmV0YmxvY2tzID0gc2l6ZTY0IC8gKGJsb2Nrc2l6ZSAvIDUxMik7CisJCWdvdG8gb3V0OworCX0KKyNlbmRpZgorCisjaWZkZWYgQkxLR0VUU0laRTY0CisJeworCQlpbnQgdmFsaWRfYmxrZ2V0c2l6ZTY0ID0gMTsKKyNpZmRlZiBfX2xpbnV4X18KKwkJc3RydWN0IHV0c25hbWUgdXQ7CisKKwkJaWYgKCh1bmFtZSgmdXQpID09IDApICYmCisJCSAgICAoKHV0LnJlbGVhc2VbMF0gPT0gJzInKSAmJiAodXQucmVsZWFzZVsxXSA9PSAnLicpICYmCisJCSAgICAgKHV0LnJlbGVhc2VbMl0gPCAnNicpICYmICh1dC5yZWxlYXNlWzNdID09ICcuJykpKQorCQkJdmFsaWRfYmxrZ2V0c2l6ZTY0ID0gMDsKKyNlbmRpZgorCQlpZiAodmFsaWRfYmxrZ2V0c2l6ZTY0ICYmCisJCSAgICBpb2N0bChmZCwgQkxLR0VUU0laRTY0LCAmc2l6ZTY0KSA+PSAwKSB7CisJCQkqcmV0YmxvY2tzID0gc2l6ZTY0IC8gYmxvY2tzaXplOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisjZW5kaWYgLyogQkxLR0VUU0laRTY0ICovCisKKyNpZmRlZiBCTEtHRVRTSVpFCisJeworCQl1bnNpZ25lZCBsb25nCXNpemU7CisKKwkJaWYgKGlvY3RsKGZkLCBCTEtHRVRTSVpFLCAmc2l6ZSkgPj0gMCkgeworCQkJKnJldGJsb2NrcyA9IHNpemUgLyAoYmxvY2tzaXplIC8gNTEyKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorI2VuZGlmCisKKyNpZmRlZiBGREdFVFBSTQorCXsKKwkJc3RydWN0IGZsb3BweV9zdHJ1Y3QgdGhpc19mbG9wcHk7CisKKwkJaWYgKGlvY3RsKGZkLCBGREdFVFBSTSwgJnRoaXNfZmxvcHB5KSA+PSAwKSB7CisJCQkqcmV0YmxvY2tzID0gdGhpc19mbG9wcHkuc2l6ZSAvIChibG9ja3NpemUgLyA1MTIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX0RJU0tMQUJFTF9ICisJeworCQlpbnQgcGFydDsKKwkJc3RydWN0IGRpc2tsYWJlbCBsYWI7CisJCXN0cnVjdCBwYXJ0aXRpb24gKnBwOworCQljaGFyIGNoOworCisjaWYgZGVmaW5lZChESU9DR01FRElBU0laRSkKKwkJeworCQkJb2ZmX3QgbXM7CisJCQl1X2ludCBiczsKKwkJCWlmIChpb2N0bChmZCwgRElPQ0dNRURJQVNJWkUsICZtcykgPj0gMCkgeworCQkJCSpyZXRibG9ja3MgPSBtcyAvIGJsb2Nrc2l6ZTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorI2VsaWYgZGVmaW5lZChESU9DR0RJTkZPKQorCQkvKiBvbGQgZGlza2xhYmVsIGludGVyZmFjZSAqLworCQlwYXJ0ID0gc3RybGVuKGZpbGUpIC0gMTsKKwkJaWYgKHBhcnQgPj0gMCkgeworCQkJY2ggPSBmaWxlW3BhcnRdOworCQkJaWYgKGlzZGlnaXQoY2gpKQorCQkJCXBhcnQgPSAwOworCQkJZWxzZSBpZiAoY2ggPj0gJ2EnICYmIGNoIDw9ICdoJykKKwkJCQlwYXJ0ID0gY2ggLSAnYSc7CisJCQllbHNlCisJCQkJcGFydCA9IC0xOworCQl9CisJCWlmIChwYXJ0ID49IDAgJiYgKGlvY3RsKGZkLCBESU9DR0RJTkZPLCAoY2hhciAqKSZsYWIpID49IDApKSB7CisJCQlwcCA9ICZsYWIuZF9wYXJ0aXRpb25zW3BhcnRdOworCQkJaWYgKHBwLT5wX3NpemUpIHsKKwkJCQkqcmV0YmxvY2tzID0gcHAtPnBfc2l6ZSAvIChibG9ja3NpemUgLyA1MTIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisjZW5kaWYgLyogZGVmaW5lZChESU9DRyopICovCisJfQorI2VuZGlmIC8qIEhBVkVfU1lTX0RJU0tMQUJFTF9IICovCisKKwl7CisJCWV4dDJmc19zdHJ1Y3Rfc3RhdCBzdDsKKworCQlpZiAoZXh0MmZzX2ZzdGF0KGZkLCAmc3QpID09IDApCisJCQlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkgeworCQkJCSpyZXRibG9ja3MgPSBzdC5zdF9zaXplIC8gYmxvY2tzaXplOworCQkJCWdvdG8gb3V0OworCQkJfQorCX0KKworCS8qCisJICogT0ssIHdlIGNvdWxkbid0IGZpZ3VyZSBpdCBvdXQgYnkgdXNpbmcgYSBzcGVjaWFsaXplZCBpb2N0bCwKKwkgKiB3aGljaCBpcyBnZW5lcmFsbHkgdGhlIGJlc3Qgd2F5LiAgU28gZG8gYmluYXJ5IHNlYXJjaCB0bworCSAqIGZpbmQgdGhlIHNpemUgb2YgdGhlIHBhcnRpdGlvbi4KKwkgKi8KKwlsb3cgPSAwOworCWZvciAoaGlnaCA9IDEwMjQ7IHZhbGlkX29mZnNldChmZCwgaGlnaCk7IGhpZ2ggKj0gMikKKwkJbG93ID0gaGlnaDsKKwl3aGlsZSAobG93IDwgaGlnaCAtIDEpIHsKKwkJY29uc3QgZXh0Ml9sb2ZmX3QgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKKworCQlpZiAodmFsaWRfb2Zmc2V0IChmZCwgbWlkKSkKKwkJCWxvdyA9IG1pZDsKKwkJZWxzZQorCQkJaGlnaCA9IG1pZDsKKwl9CisJdmFsaWRfb2Zmc2V0KGZkLCAwKTsKKwlzaXplNjQgPSBsb3cgKyAxOworCSpyZXRibG9ja3MgPSBzaXplNjQgLyBibG9ja3NpemU7CitvdXQ6CisJY2xvc2UoZmQpOworCXJldHVybiByYzsKK30KKworZXJyY29kZV90IGV4dDJmc19nZXRfZGV2aWNlX3NpemUoY29uc3QgY2hhciAqZmlsZSwgaW50IGJsb2Nrc2l6ZSwKKwkJCQkgYmxrX3QgKnJldGJsb2NrcykKK3sKKwllcnJjb2RlX3QgcmV0dmFsOworCWJsazY0X3QJYmxvY2tzOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZTIoZmlsZSwgYmxvY2tzaXplLCAmYmxvY2tzKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWlmIChibG9ja3MgPj0gKDFVTEwgPDwgMzIpKQorCQlyZXR1cm4gRUZCSUc7CisJKnJldGJsb2NrcyA9IChibGtfdCkgYmxvY2tzOworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogV0lOMzIgKi8KKworI2lmZGVmIERFQlVHCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJYmxrX3QJYmxvY2tzOworCWludAlyZXR2YWw7CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZGV2aWNlXG4iLCBhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2RldmljZV9zaXplKGFyZ3ZbMV0sIDEwMjQsICZibG9ja3MpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsCisJCQkid2hpbGUgY2FsbGluZyBleHQyZnNfZ2V0X2RldmljZV9zaXplIik7CisJCWV4aXQoMSk7CisJfQorCXByaW50ZigiRGV2aWNlICVzIGhhcyAldSAxayBibG9ja3MuXG4iLCBhcmd2WzFdLCBibG9ja3MpOworCWV4aXQoMCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvaV9ibG9jay5jIGIvbGliL2V4dDJmcy9pX2Jsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhNTdlNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvaV9ibG9jay5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBpX2Jsb2NrLmMgLS0tIE1hbmFnZSB0aGUgaV9ibG9jayBmaWVsZCBmb3IgaV9ibG9ja3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworZXJyY29kZV90IGV4dDJmc19pYmxrX2FkZF9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCQkgYmxrNjRfdCBudW1fYmxvY2tzKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBiID0gaW5vZGUtPmlfYmxvY2tzOworCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKQorCQliICs9ICgobG9uZyBsb25nKSBpbm9kZS0+b3NkMi5saW51eDIubF9pX2Jsb2Nrc19oaSkgPDwgMzI7CisKKwlpZiAoIShmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCSAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSB8fAorCSAgICAhKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9IVUdFX0ZJTEVfRkwpKQorCSAgICBudW1fYmxvY2tzICo9IGZzLT5ibG9ja3NpemUgLyA1MTI7CisJbnVtX2Jsb2NrcyAqPSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcyk7CisKKwliICs9IG51bV9ibG9ja3M7CisKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpCisJCWlub2RlLT5vc2QyLmxpbnV4Mi5sX2lfYmxvY2tzX2hpID0gYiA+PiAzMjsKKwllbHNlIGlmIChiID4gMHhGRkZGRkZGRikKKwkJcmV0dXJuIEVPVkVSRkxPVzsKKwlpbm9kZS0+aV9ibG9ja3MgPSBiICYgMHhGRkZGRkZGRjsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19pYmxrX3N1Yl9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCQkgYmxrNjRfdCBudW1fYmxvY2tzKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBiID0gaW5vZGUtPmlfYmxvY2tzOworCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKQorCQliICs9ICgobG9uZyBsb25nKSBpbm9kZS0+b3NkMi5saW51eDIubF9pX2Jsb2Nrc19oaSkgPDwgMzI7CisKKwlpZiAoIShmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCSAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSB8fAorCSAgICAhKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9IVUdFX0ZJTEVfRkwpKQorCSAgICBudW1fYmxvY2tzICo9IGZzLT5ibG9ja3NpemUgLyA1MTI7CisJbnVtX2Jsb2NrcyAqPSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcyk7CisKKwlpZiAobnVtX2Jsb2NrcyA+IGIpCisJCXJldHVybiBFT1ZFUkZMT1c7CisKKwliIC09IG51bV9ibG9ja3M7CisKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpCisJCWlub2RlLT5vc2QyLmxpbnV4Mi5sX2lfYmxvY2tzX2hpID0gYiA+PiAzMjsKKwlpbm9kZS0+aV9ibG9ja3MgPSBiICYgMHhGRkZGRkZGRjsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19pYmxrX3NldChleHQyX2ZpbHN5cyBmcywgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBibGs2NF90IGIpCit7CisJaWYgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYKKwkgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSkgfHwKKwkgICAgIShpbm9kZS0+aV9mbGFncyAmIEVYVDRfSFVHRV9GSUxFX0ZMKSkKKwkJYiAqPSBmcy0+YmxvY2tzaXplIC8gNTEyOworCWIgKj0gRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpOworCisJaW5vZGUtPmlfYmxvY2tzID0gYiAmIDB4RkZGRkZGRkY7CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKQorCQlpbm9kZS0+b3NkMi5saW51eDIubF9pX2Jsb2Nrc19oaSA9IGIgPj4gMzI7CisJZWxzZSBpZiAoYiA+PiAzMikKKwkJcmV0dXJuIEVPVkVSRkxPVzsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvaWNvdW50LmMgYi9saWIvZXh0MmZzL2ljb3VudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjIwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2ljb3VudC5jCkBAIC0wLDAgKzEsODUyIEBACisvKgorICogaWNvdW50LmMgLS0tIGFuIGVmZmljaWVudCBpbm9kZSBjb3VudCBhYnN0cmFjdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisjaW5jbHVkZSAidGRiLmgiCisKKy8qCisgKiBUaGUgZGF0YSBzdG9yYWdlIHN0cmF0ZWd5IHVzZWQgYnkgaWNvdW50IHJlbGllcyBvbiB0aGUgb2JzZXJ2YXRpb24KKyAqIHRoYXQgbW9zdCBpbm9kZSBjb3VudHMgYXJlIGVpdGhlciB6ZXJvIChmb3Igbm9uLWFsbG9jYXRlZCBpbm9kZXMpLAorICogb25lIChmb3IgbW9zdCBmaWxlcyksIGFuZCBvbmx5IGEgZmV3IHRoYXQgYXJlIHR3byBvciBtb3JlCisgKiAoZGlyZWN0b3JpZXMgYW5kIGZpbGVzIHRoYXQgYXJlIGxpbmtlZCB0byBtb3JlIHRoYW4gb25lIGRpcmVjdG9yeSkuCisgKgorICogQWxzbywgZTJmc2NrIHRlbmRzIHRvIGxvYWQgdGhlIGljb3VudCBkYXRhIHNlcXVlbnRpYWxseS4KKyAqCisgKiBTbywgd2UgdXNlIGFuIGlub2RlIGJpdG1hcCB0byBpbmRpY2F0ZSB3aGljaCBpbm9kZXMgaGF2ZSBhIGNvdW50IG9mCisgKiBvbmUsIGFuZCB0aGVuIHVzZSBhIHNvcnRlZCBsaXN0IHRvIHN0b3JlIHRoZSBjb3VudHMgZm9yIGlub2RlcworICogd2hpY2ggYXJlIGdyZWF0ZXIgdGhhbiBvbmUuCisgKgorICogV2UgYWxzbyB1c2UgYW4gb3B0aW9uYWwgYml0bWFwIHRvIGluZGljYXRlIHdoaWNoIGlub2RlcyBhcmUgYWxyZWFkeQorICogaW4gdGhlIHNvcnRlZCBsaXN0LCB0byBzcGVlZCB1cCB0aGUgdXNlIG9mIHRoaXMgYWJzdHJhY3Rpb24gYnkKKyAqIGUyZnNjaydzIHBhc3MgMi4gIFBhc3MgMiBpbmNyZW1lbnRzIGlub2RlIGNvdW50cyBhcyBpdCBmaW5kcyB0aGVtLAorICogc28gdGhpcyBleHRyYSBiaXRtYXAgYXZvaWRzIHNlYXJjaGluZyB0aGUgc29ydGVkIGxpc3QgdG8gc2VlIGlmIGEKKyAqIHBhcnRpY3VsYXIgaW5vZGUgaXMgb24gdGhlIHNvcnRlZCBsaXN0IGFscmVhZHkuCisgKi8KKworc3RydWN0IGV4dDJfaWNvdW50X2VsIHsKKwlleHQyX2lub190CWlubzsKKwlfX3UzMgkJY291bnQ7Cit9OworCitzdHJ1Y3QgZXh0Ml9pY291bnQgeworCWVycmNvZGVfdAkJbWFnaWM7CisJZXh0MmZzX2lub2RlX2JpdG1hcAlzaW5nbGU7CisJZXh0MmZzX2lub2RlX2JpdG1hcAltdWx0aXBsZTsKKwlleHQyX2lub190CQljb3VudDsKKwlleHQyX2lub190CQlzaXplOworCWV4dDJfaW5vX3QJCW51bV9pbm9kZXM7CisJZXh0Ml9pbm9fdAkJY3Vyc29yOworCXN0cnVjdCBleHQyX2ljb3VudF9lbAkqbGlzdDsKKwlzdHJ1Y3QgZXh0Ml9pY291bnRfZWwJKmxhc3RfbG9va3VwOworCWNoYXIJCQkqdGRiX2ZuOworCVREQl9DT05URVhUCQkqdGRiOworfTsKKworLyoKKyAqIFdlIG5vdyB1c2UgYSAzMi1iaXQgY291bnRlciBmaWVsZCBiZWNhdXNlIGl0IGRvZXNuJ3QgY29zdCB1cworICogYW55dGhpbmcgZXh0cmEgZm9yIHRoZSBpbi1tZW1vcnkgZGF0YSBzdHJ1Y3R1cmUsIGR1ZSB0byBhbGlnbm1lbnQKKyAqIHBhZGRpbmcuICBCdXQgdGhlcmUncyBubyBwb2ludCBjaGFuZ2luZyB0aGUgaW50ZXJmYWNlIGlmIG1vc3Qgb2YKKyAqIHRoZSB0aW1lIHdlIG9ubHkgY2FyZSBpZiB0aGUgbnVtYmVyIGlzIGJpZ2dlciB0aGFuIDY1LDAwMCBvciBub3QuCisgKiBTbyB1c2UgdGhlIGZvbGxvd2luZyB0cmFuc2xhdGlvbiBmdW5jdGlvbiB0byByZXR1cm4gYSAxNi1iaXQgY291bnQuCisgKi8KKyNkZWZpbmUgaWNvdW50XzE2X3hsYXRlKHgpICgoKHgpID4gNjU1MDApID8gNjU1MDAgOiAoeCkpCisKK3ZvaWQgZXh0MmZzX2ZyZWVfaWNvdW50KGV4dDJfaWNvdW50X3QgaWNvdW50KQoreworCWlmICghaWNvdW50KQorCQlyZXR1cm47CisKKwlpY291bnQtPm1hZ2ljID0gMDsKKwlpZiAoaWNvdW50LT5saXN0KQorCQlleHQyZnNfZnJlZV9tZW0oJmljb3VudC0+bGlzdCk7CisJaWYgKGljb3VudC0+c2luZ2xlKQorCQlleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAoaWNvdW50LT5zaW5nbGUpOworCWlmIChpY291bnQtPm11bHRpcGxlKQorCQlleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAoaWNvdW50LT5tdWx0aXBsZSk7CisJaWYgKGljb3VudC0+dGRiKQorCQl0ZGJfY2xvc2UoaWNvdW50LT50ZGIpOworCWlmIChpY291bnQtPnRkYl9mbikgeworCQl1bmxpbmsoaWNvdW50LT50ZGJfZm4pOworCQlmcmVlKGljb3VudC0+dGRiX2ZuKTsKKwl9CisKKwlleHQyZnNfZnJlZV9tZW0oJmljb3VudCk7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgYWxsb2NfaWNvdW50KGV4dDJfZmlsc3lzIGZzLCBpbnQgZmxhZ3MsIGV4dDJfaWNvdW50X3QgKnJldCkKK3sKKwlleHQyX2ljb3VudF90CWljb3VudDsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJKnJldCA9IDA7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGV4dDJfaWNvdW50KSwgJmljb3VudCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwltZW1zZXQoaWNvdW50LCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaWNvdW50KSk7CisKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfaW5vZGVfYml0bWFwKGZzLCAiaWNvdW50IiwgJmljb3VudC0+c2luZ2xlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCWlmIChmbGFncyAmIEVYVDJfSUNPVU5UX09QVF9JTkNSRU1FTlQpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2lub2RlX2JpdG1hcChmcywgImljb3VudF9pbmMiLAorCQkJCQkJICAgICAgJmljb3VudC0+bXVsdGlwbGUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJfSBlbHNlCisJCWljb3VudC0+bXVsdGlwbGUgPSAwOworCisJaWNvdW50LT5tYWdpYyA9IEVYVDJfRVRfTUFHSUNfSUNPVU5UOworCWljb3VudC0+bnVtX2lub2RlcyA9IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQ7CisKKwkqcmV0ID0gaWNvdW50OworCXJldHVybiAwOworCitlcnJvdXQ6CisJZXh0MmZzX2ZyZWVfaWNvdW50KGljb3VudCk7CisJcmV0dXJuKHJldHZhbCk7Cit9CisKK3N0cnVjdCB1dWlkIHsKKwlfX3UzMgl0aW1lX2xvdzsKKwlfX3UxNgl0aW1lX21pZDsKKwlfX3UxNgl0aW1lX2hpX2FuZF92ZXJzaW9uOworCV9fdTE2CWNsb2NrX3NlcTsKKwlfX3U4CW5vZGVbNl07Cit9OworCitzdGF0aWMgdm9pZCB1bnBhY2tfdXVpZCh2b2lkICppbiwgc3RydWN0IHV1aWQgKnV1KQoreworCV9fdTgJKnB0ciA9IGluOworCV9fdTMyCXRtcDsKKworCXRtcCA9ICpwdHIrKzsKKwl0bXAgPSAodG1wIDw8IDgpIHwgKnB0cisrOworCXRtcCA9ICh0bXAgPDwgOCkgfCAqcHRyKys7CisJdG1wID0gKHRtcCA8PCA4KSB8ICpwdHIrKzsKKwl1dS0+dGltZV9sb3cgPSB0bXA7CisKKwl0bXAgPSAqcHRyKys7CisJdG1wID0gKHRtcCA8PCA4KSB8ICpwdHIrKzsKKwl1dS0+dGltZV9taWQgPSB0bXA7CisKKwl0bXAgPSAqcHRyKys7CisJdG1wID0gKHRtcCA8PCA4KSB8ICpwdHIrKzsKKwl1dS0+dGltZV9oaV9hbmRfdmVyc2lvbiA9IHRtcDsKKworCXRtcCA9ICpwdHIrKzsKKwl0bXAgPSAodG1wIDw8IDgpIHwgKnB0cisrOworCXV1LT5jbG9ja19zZXEgPSB0bXA7CisKKwltZW1jcHkodXUtPm5vZGUsIHB0ciwgNik7Cit9CisKK3N0YXRpYyB2b2lkIHV1aWRfdW5wYXJzZSh2b2lkICp1dSwgY2hhciAqb3V0KQoreworCXN0cnVjdCB1dWlkIHV1aWQ7CisKKwl1bnBhY2tfdXVpZCh1dSwgJnV1aWQpOworCXNwcmludGYob3V0LAorCQkiJTA4eC0lMDR4LSUwNHgtJTAyeCUwMngtJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IiwKKwkJdXVpZC50aW1lX2xvdywgdXVpZC50aW1lX21pZCwgdXVpZC50aW1lX2hpX2FuZF92ZXJzaW9uLAorCQl1dWlkLmNsb2NrX3NlcSA+PiA4LCB1dWlkLmNsb2NrX3NlcSAmIDB4RkYsCisJCXV1aWQubm9kZVswXSwgdXVpZC5ub2RlWzFdLCB1dWlkLm5vZGVbMl0sCisJCXV1aWQubm9kZVszXSwgdXVpZC5ub2RlWzRdLCB1dWlkLm5vZGVbNV0pOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2NyZWF0ZV9pY291bnRfdGRiKGV4dDJfZmlsc3lzIGZzLCBjaGFyICp0ZGJfZGlyLAorCQkJCSAgIGludCBmbGFncywgZXh0Ml9pY291bnRfdCAqcmV0KQoreworCWV4dDJfaWNvdW50X3QJaWNvdW50OworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhciAJCSpmbiwgdXVpZFs0MF07CisJZXh0Ml9pbm9fdAludW1faW5vZGVzOworCW1vZGVfdAkJc2F2ZV91bWFzazsKKwlpbnQJCWZkOworCisJcmV0dmFsID0gYWxsb2NfaWNvdW50KGZzLCBmbGFncywgICZpY291bnQpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzdHJsZW4odGRiX2RpcikgKyA2NCwgJmZuKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwl1dWlkX3VucGFyc2UoZnMtPnN1cGVyLT5zX3V1aWQsIHV1aWQpOworCXNwcmludGYoZm4sICIlcy8lcy1pY291bnQtWFhYWFhYIiwgdGRiX2RpciwgdXVpZCk7CisJaWNvdW50LT50ZGJfZm4gPSBmbjsKKwlzYXZlX3VtYXNrID0gdW1hc2soMDc3KTsKKwlmZCA9IG1rc3RlbXAoZm4pOworCWlmIChmZCA8IDApIHsKKwkJcmV0dmFsID0gZXJybm87CisJCWdvdG8gZXJyb3V0OworCX0KKwl1bWFzayhzYXZlX3VtYXNrKTsKKwkvKgorCSAqIFRoaXMgaXMgYW4gb3ZlcmVzdGltYXRlIG9mIHRoZSBzaXplIHRoYXQgd2Ugd2lsbCBuZWVkOyB0aGUKKwkgKiBpZGVhbCB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHVzZWQgaW5vZGVzIHdpdGggYSBjb3VudAorCSAqIGdyZWF0ZXIgdGhhbiAxLiAgT1RPSCB0aGUgdGltZXMgd2hlbiB3ZSByZWFsbHkgbmVlZCB0aGlzIGlzCisJICogd2l0aCB0aGUgYmFja3VwIHByb2dyYW1zIHRoYXQgdXNlIGxvdHMgb2YgaGFyZCBsaW5rcywgaW4KKwkgKiB3aGljaCBjYXNlIHRoZSBudW1iZXIgb2YgaW5vZGVzIGluIHVzZSBhcHByb2FjaGVzIHRoZSBpZGVhbAorCSAqIHZhbHVlLgorCSAqLworCW51bV9pbm9kZXMgPSBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50IC0gZnMtPnN1cGVyLT5zX2ZyZWVfaW5vZGVzX2NvdW50OworCisJaWNvdW50LT50ZGIgPSB0ZGJfb3BlbihmbiwgbnVtX2lub2RlcywgVERCX05PTE9DSyB8IFREQl9OT1NZTkMsCisJCQkgICAgICAgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2MDApOworCWNsb3NlKGZkKTsKKwlpZiAoaWNvdW50LT50ZGIgPT0gTlVMTCkgeworCQlyZXR2YWwgPSBlcnJubzsKKwkJZ290byBlcnJvdXQ7CisJfQorCSpyZXQgPSBpY291bnQ7CisJcmV0dXJuIDA7CitlcnJvdXQ6CisJZXh0MmZzX2ZyZWVfaWNvdW50KGljb3VudCk7CisJcmV0dXJuKHJldHZhbCk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfY3JlYXRlX2ljb3VudDIoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncywgdW5zaWduZWQgaW50IHNpemUsCisJCQkJZXh0Ml9pY291bnRfdCBoaW50LCBleHQyX2ljb3VudF90ICpyZXQpCit7CisJZXh0Ml9pY291bnRfdAlpY291bnQ7CisJZXJyY29kZV90CXJldHZhbDsKKwlzaXplX3QJCWJ5dGVzOworCWV4dDJfaW5vX3QJaTsKKworCWlmIChoaW50KSB7CisJCUVYVDJfQ0hFQ0tfTUFHSUMoaGludCwgRVhUMl9FVF9NQUdJQ19JQ09VTlQpOworCQlpZiAoaGludC0+c2l6ZSA+IHNpemUpCisJCQlzaXplID0gKHNpemVfdCkgaGludC0+c2l6ZTsKKwl9CisKKwlyZXR2YWwgPSBhbGxvY19pY291bnQoZnMsIGZsYWdzLCAmaWNvdW50KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKHNpemUpIHsKKwkJaWNvdW50LT5zaXplID0gc2l6ZTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBGaWd1cmUgb3V0IGhvdyBtYW55IHNwZWNpYWwgY2FzZSBpbm9kZSBjb3VudHMgd2Ugd2lsbAorCQkgKiBoYXZlLiAgV2Uga25vdyB3ZSB3aWxsIG5lZWQgb25lIGZvciBlYWNoIGRpcmVjdG9yeTsKKwkJICogd2UgYWxzbyBuZWVkIHRvIHJlc2VydmUgc29tZSBleHRyYSByb29tIGZvciBmaWxlIGxpbmtzCisJCSAqLworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X251bV9kaXJzKGZzLCAmaWNvdW50LT5zaXplKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCQlpY291bnQtPnNpemUgKz0gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCAvIDUwOworCX0KKworCWJ5dGVzID0gKHNpemVfdCkgKGljb3VudC0+c2l6ZSAqIHNpemVvZihzdHJ1Y3QgZXh0Ml9pY291bnRfZWwpKTsKKyNpZiAwCisJcHJpbnRmKCJJY291bnQgYWxsb2NhdGVkICV1IGVudHJpZXMsICVkIGJ5dGVzLlxuIiwKKwkgICAgICAgaWNvdW50LT5zaXplLCBieXRlcyk7CisjZW5kaWYKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KGljb3VudC0+c2l6ZSwgc2l6ZW9mKHN0cnVjdCBleHQyX2ljb3VudF9lbCksCisJCQkgJmljb3VudC0+bGlzdCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJbWVtc2V0KGljb3VudC0+bGlzdCwgMCwgYnl0ZXMpOworCisJaWNvdW50LT5jb3VudCA9IDA7CisJaWNvdW50LT5jdXJzb3IgPSAwOworCisJLyoKKwkgKiBQb3B1bGF0ZSB0aGUgc29ydGVkIGxpc3Qgd2l0aCB0aG9zZSBlbnRyaWVzIHdoaWNoIHdlcmUKKwkgKiBmb3VuZCBpbiB0aGUgaGludCBpY291bnQgKHNpbmNlIHRob3NlIGFyZSBvbmVzIHdoaWNoIHdpbGwKKwkgKiBsaWtlbHkgbmVlZCB0byBiZSBpbiB0aGUgc29ydGVkIGxpc3QgdGhpcyB0aW1lIGFyb3VuZCkuCisJICovCisJaWYgKGhpbnQpIHsKKwkJZm9yIChpPTA7IGkgPCBoaW50LT5jb3VudDsgaSsrKQorCQkJaWNvdW50LT5saXN0W2ldLmlubyA9IGhpbnQtPmxpc3RbaV0uaW5vOworCQlpY291bnQtPmNvdW50ID0gaGludC0+Y291bnQ7CisJfQorCisJKnJldCA9IGljb3VudDsKKwlyZXR1cm4gMDsKKworZXJyb3V0OgorCWV4dDJmc19mcmVlX2ljb3VudChpY291bnQpOworCXJldHVybihyZXR2YWwpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2NyZWF0ZV9pY291bnQoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJCSAgICAgICBleHQyX2ljb3VudF90ICpyZXQpCit7CisJcmV0dXJuIGV4dDJmc19jcmVhdGVfaWNvdW50MihmcywgZmxhZ3MsIHNpemUsIDAsIHJldCk7Cit9CisKKy8qCisgKiBpbnNlcnRfaWNvdW50X2VsKCkgLS0tIEluc2VydCBhIG5ldyBlbnRyeSBpbnRvIHRoZSBzb3J0ZWQgbGlzdCBhdCBhCisgKiAJc3BlY2lmaWVkIHBvc2l0aW9uLgorICovCitzdGF0aWMgc3RydWN0IGV4dDJfaWNvdW50X2VsICppbnNlcnRfaWNvdW50X2VsKGV4dDJfaWNvdW50X3QgaWNvdW50LAorCQkJCQkgICAgZXh0Ml9pbm9fdCBpbm8sIGludCBwb3MpCit7CisJc3RydWN0IGV4dDJfaWNvdW50X2VsIAkqZWw7CisJZXJyY29kZV90CQlyZXR2YWw7CisJZXh0Ml9pbm9fdAkJbmV3X3NpemUgPSAwOworCWludAkJCW51bTsKKworCWlmIChpY291bnQtPmxhc3RfbG9va3VwICYmIGljb3VudC0+bGFzdF9sb29rdXAtPmlubyA9PSBpbm8pCisJCXJldHVybiBpY291bnQtPmxhc3RfbG9va3VwOworCisJaWYgKGljb3VudC0+Y291bnQgPj0gaWNvdW50LT5zaXplKSB7CisJCWlmIChpY291bnQtPmNvdW50KSB7CisJCQluZXdfc2l6ZSA9IGljb3VudC0+bGlzdFsodW5zaWduZWQpaWNvdW50LT5jb3VudC0xXS5pbm87CisJCQluZXdfc2l6ZSA9IChleHQyX2lub190KSAoaWNvdW50LT5jb3VudCAqCisJCQkJKChmbG9hdCkgaWNvdW50LT5udW1faW5vZGVzIC8gbmV3X3NpemUpKTsKKwkJfQorCQlpZiAobmV3X3NpemUgPCAoaWNvdW50LT5zaXplICsgMTAwKSkKKwkJCW5ld19zaXplID0gaWNvdW50LT5zaXplICsgMTAwOworI2lmIDAKKwkJcHJpbnRmKCJSZWFsbG9jYXRpbmcgaWNvdW50ICV1IGVudHJpZXMuLi5cbiIsIG5ld19zaXplKTsKKyNlbmRpZgorCQlyZXR2YWwgPSBleHQyZnNfcmVzaXplX21lbSgoc2l6ZV90KSBpY291bnQtPnNpemUgKgorCQkJCQkgICBzaXplb2Yoc3RydWN0IGV4dDJfaWNvdW50X2VsKSwKKwkJCQkJICAgKHNpemVfdCkgbmV3X3NpemUgKgorCQkJCQkgICBzaXplb2Yoc3RydWN0IGV4dDJfaWNvdW50X2VsKSwKKwkJCQkJICAgJmljb3VudC0+bGlzdCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gMDsKKwkJaWNvdW50LT5zaXplID0gbmV3X3NpemU7CisJfQorCW51bSA9IChpbnQpIGljb3VudC0+Y291bnQgLSBwb3M7CisJaWYgKG51bSA8IDApCisJCXJldHVybiAwOwkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJaWYgKG51bSkgeworCQltZW1tb3ZlKCZpY291bnQtPmxpc3RbcG9zKzFdLCAmaWNvdW50LT5saXN0W3Bvc10sCisJCQlzaXplb2Yoc3RydWN0IGV4dDJfaWNvdW50X2VsKSAqIG51bSk7CisJfQorCWljb3VudC0+Y291bnQrKzsKKwllbCA9ICZpY291bnQtPmxpc3RbcG9zXTsKKwllbC0+Y291bnQgPSAwOworCWVsLT5pbm8gPSBpbm87CisJaWNvdW50LT5sYXN0X2xvb2t1cCA9IGVsOworCXJldHVybiBlbDsKK30KKworLyoKKyAqIGdldF9pY291bnRfZWwoKSAtLS0gZ2l2ZW4gYW4gaW5vZGUgbnVtYmVyLCB0cnkgdG8gZmluZCBpY291bnQKKyAqIAlpbmZvcm1hdGlvbiBpbiB0aGUgc29ydGVkIGxpc3QuICBJZiB0aGUgY3JlYXRlIGZsYWcgaXMgc2V0LAorICogCWFuZCB3ZSBjYW4ndCBmaW5kIGFuIGVudHJ5LCBjcmVhdGUgb25lIGluIHRoZSBzb3J0ZWQgbGlzdC4KKyAqLworc3RhdGljIHN0cnVjdCBleHQyX2ljb3VudF9lbCAqZ2V0X2ljb3VudF9lbChleHQyX2ljb3VudF90IGljb3VudCwKKwkJCQkJICAgIGV4dDJfaW5vX3QgaW5vLCBpbnQgY3JlYXRlKQoreworCWludAlsb3csIGhpZ2gsIG1pZDsKKworCWlmICghaWNvdW50IHx8ICFpY291bnQtPmxpc3QpCisJCXJldHVybiAwOworCisJaWYgKGNyZWF0ZSAmJiAoKGljb3VudC0+Y291bnQgPT0gMCkgfHwKKwkJICAgICAgIChpbm8gPiBpY291bnQtPmxpc3RbKHVuc2lnbmVkKWljb3VudC0+Y291bnQtMV0uaW5vKSkpIHsKKwkJcmV0dXJuIGluc2VydF9pY291bnRfZWwoaWNvdW50LCBpbm8sICh1bnNpZ25lZCkgaWNvdW50LT5jb3VudCk7CisJfQorCWlmIChpY291bnQtPmNvdW50ID09IDApCisJCXJldHVybiAwOworCisJaWYgKGljb3VudC0+Y3Vyc29yID49IGljb3VudC0+Y291bnQpCisJCWljb3VudC0+Y3Vyc29yID0gMDsKKwlpZiAoaW5vID09IGljb3VudC0+bGlzdFtpY291bnQtPmN1cnNvcl0uaW5vKQorCQlyZXR1cm4gJmljb3VudC0+bGlzdFtpY291bnQtPmN1cnNvcisrXTsKKyNpZiAwCisJcHJpbnRmKCJOb24tY3Vyc29yIGdldF9pY291bnRfZWw6ICV1XG4iLCBpbm8pOworI2VuZGlmCisJbG93ID0gMDsKKwloaWdoID0gKGludCkgaWNvdW50LT5jb3VudC0xOworCXdoaWxlIChsb3cgPD0gaGlnaCkgeworCQltaWQgPSAoKHVuc2lnbmVkKWxvdyArICh1bnNpZ25lZCloaWdoKSA+PiAxOworCQlpZiAoaW5vID09IGljb3VudC0+bGlzdFttaWRdLmlubykgeworCQkJaWNvdW50LT5jdXJzb3IgPSBtaWQrMTsKKwkJCXJldHVybiAmaWNvdW50LT5saXN0W21pZF07CisJCX0KKwkJaWYgKGlubyA8IGljb3VudC0+bGlzdFttaWRdLmlubykKKwkJCWhpZ2ggPSBtaWQtMTsKKwkJZWxzZQorCQkJbG93ID0gbWlkKzE7CisJfQorCS8qCisJICogSWYgd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgZW50cnksIGl0IHNob3VsZCBiZSByaWdodCBhdAorCSAqIGxvdyAod2hlcmUgaGlnaCB3aWxsIGJlIGxlZnQgYXQgbG93LTEpLgorCSAqLworCWlmIChjcmVhdGUpCisJCXJldHVybiBpbnNlcnRfaWNvdW50X2VsKGljb3VudCwgaW5vLCBsb3cpOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IHNldF9pbm9kZV9jb3VudChleHQyX2ljb3VudF90IGljb3VudCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkJIF9fdTMyIGNvdW50KQoreworCXN0cnVjdCBleHQyX2ljb3VudF9lbCAJKmVsOworCVREQl9EQVRBIGtleSwgZGF0YTsKKworCWlmIChpY291bnQtPnRkYikgeworCQlrZXkuZHB0ciA9ICh1bnNpZ25lZCBjaGFyICopICZpbm87CisJCWtleS5kc2l6ZSA9IHNpemVvZihleHQyX2lub190KTsKKwkJZGF0YS5kcHRyID0gKHVuc2lnbmVkIGNoYXIgKikgJmNvdW50OworCQlkYXRhLmRzaXplID0gc2l6ZW9mKF9fdTMyKTsKKwkJaWYgKGNvdW50KSB7CisJCQlpZiAodGRiX3N0b3JlKGljb3VudC0+dGRiLCBrZXksIGRhdGEsIFREQl9SRVBMQUNFKSkKKwkJCQlyZXR1cm4gdGRiX2Vycm9yKGljb3VudC0+dGRiKSArCisJCQkJCUVYVDJfRVRfVERCX1NVQ0NFU1M7CisJCX0gZWxzZSB7CisJCQlpZiAodGRiX2RlbGV0ZShpY291bnQtPnRkYiwga2V5KSkKKwkJCQlyZXR1cm4gdGRiX2Vycm9yKGljb3VudC0+dGRiKSArCisJCQkJCUVYVDJfRVRfVERCX1NVQ0NFU1M7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJZWwgPSBnZXRfaWNvdW50X2VsKGljb3VudCwgaW5vLCAxKTsKKwlpZiAoIWVsKQorCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisKKwllbC0+Y291bnQgPSBjb3VudDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBnZXRfaW5vZGVfY291bnQoZXh0Ml9pY291bnRfdCBpY291bnQsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSBfX3UzMiAqY291bnQpCit7CisJc3RydWN0IGV4dDJfaWNvdW50X2VsIAkqZWw7CisJVERCX0RBVEEga2V5LCBkYXRhOworCisJaWYgKGljb3VudC0+dGRiKSB7CisJCWtleS5kcHRyID0gKHVuc2lnbmVkIGNoYXIgKikgJmlubzsKKwkJa2V5LmRzaXplID0gc2l6ZW9mKGV4dDJfaW5vX3QpOworCisJCWRhdGEgPSB0ZGJfZmV0Y2goaWNvdW50LT50ZGIsIGtleSk7CisJCWlmIChkYXRhLmRwdHIgPT0gTlVMTCkgeworCQkJKmNvdW50ID0gMDsKKwkJCXJldHVybiB0ZGJfZXJyb3IoaWNvdW50LT50ZGIpICsgRVhUMl9FVF9UREJfU1VDQ0VTUzsKKwkJfQorCisJCSpjb3VudCA9ICooKF9fdTMyICopIGRhdGEuZHB0cik7CisJCWZyZWUoZGF0YS5kcHRyKTsKKwkJcmV0dXJuIDA7CisJfQorCWVsID0gZ2V0X2ljb3VudF9lbChpY291bnQsIGlubywgMCk7CisJaWYgKCFlbCkgeworCQkqY291bnQgPSAwOworCQlyZXR1cm4gRU5PRU5UOworCX0KKworCSpjb3VudCA9IGVsLT5jb3VudDsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19pY291bnRfdmFsaWRhdGUoZXh0Ml9pY291bnRfdCBpY291bnQsIEZJTEUgKm91dCkKK3sKKwllcnJjb2RlX3QJcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQJaTsKKwljb25zdCBjaGFyICpiYWQgPSAiYmFkIGljb3VudCI7CisKKwlFWFQyX0NIRUNLX01BR0lDKGljb3VudCwgRVhUMl9FVF9NQUdJQ19JQ09VTlQpOworCisJaWYgKGljb3VudC0+Y291bnQgPiBpY291bnQtPnNpemUpIHsKKwkJZnByaW50ZihvdXQsICIlczogY291bnQgPiBzaXplXG4iLCBiYWQpOworCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCX0KKwlmb3IgKGk9MTsgaSA8IGljb3VudC0+Y291bnQ7IGkrKykgeworCQlpZiAoaWNvdW50LT5saXN0W2ktMV0uaW5vID49IGljb3VudC0+bGlzdFtpXS5pbm8pIHsKKwkJCWZwcmludGYob3V0LCAiJXM6IGxpc3RbJWRdLmlubz0ldSwgbGlzdFslZF0uaW5vPSV1XG4iLAorCQkJCWJhZCwgaS0xLCBpY291bnQtPmxpc3RbaS0xXS5pbm8sCisJCQkJaSwgaWNvdW50LT5saXN0W2ldLmlubyk7CisJCQlyZXQgPSBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworZXJyY29kZV90IGV4dDJmc19pY291bnRfZmV0Y2goZXh0Ml9pY291bnRfdCBpY291bnQsIGV4dDJfaW5vX3QgaW5vLCBfX3UxNiAqcmV0KQoreworCV9fdTMyCXZhbDsKKwlFWFQyX0NIRUNLX01BR0lDKGljb3VudCwgRVhUMl9FVF9NQUdJQ19JQ09VTlQpOworCisJaWYgKCFpbm8gfHwgKGlubyA+IGljb3VudC0+bnVtX2lub2RlcykpCisJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisKKwlpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihpY291bnQtPnNpbmdsZSwgaW5vKSkgeworCQkqcmV0ID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChpY291bnQtPm11bHRpcGxlICYmCisJICAgICFleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGljb3VudC0+bXVsdGlwbGUsIGlubykpIHsKKwkJKnJldCA9IDA7CisJCXJldHVybiAwOworCX0KKwlnZXRfaW5vZGVfY291bnQoaWNvdW50LCBpbm8sICZ2YWwpOworCSpyZXQgPSBpY291bnRfMTZfeGxhdGUodmFsKTsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19pY291bnRfaW5jcmVtZW50KGV4dDJfaWNvdW50X3QgaWNvdW50LCBleHQyX2lub190IGlubywKKwkJCQkgIF9fdTE2ICpyZXQpCit7CisJX191MzIJCQljdXJyX3ZhbHVlOworCisJRVhUMl9DSEVDS19NQUdJQyhpY291bnQsIEVYVDJfRVRfTUFHSUNfSUNPVU5UKTsKKworCWlmICghaW5vIHx8IChpbm8gPiBpY291bnQtPm51bV9pbm9kZXMpKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCisJaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoaWNvdW50LT5zaW5nbGUsIGlubykpIHsKKwkJLyoKKwkJICogSWYgdGhlIGV4aXN0aW5nIGNvdW50IGlzIDEsIHRoZW4gd2Uga25vdyB0aGVyZSBpcworCQkgKiBubyBlbnRyeSBpbiB0aGUgbGlzdC4KKwkJICovCisJCWlmIChzZXRfaW5vZGVfY291bnQoaWNvdW50LCBpbm8sIDIpKQorCQkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworCQljdXJyX3ZhbHVlID0gMjsKKwkJZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAyKGljb3VudC0+c2luZ2xlLCBpbm8pOworCX0gZWxzZSBpZiAoaWNvdW50LT5tdWx0aXBsZSkgeworCQkvKgorCQkgKiBUaGUgY291bnQgaXMgZWl0aGVyIHplcm8gb3IgZ3JlYXRlciB0aGFuIDE7IGlmIHRoZQorCQkgKiBpbm9kZSBpcyBzZXQgaW4gaWNvdW50LT5tdWx0aXBsZSwgdGhlbiB0aGVyZSBzaG91bGQKKwkJICogYmUgYW4gZW50cnkgaW4gdGhlIGxpc3QsIHNvIHdlIG5lZWQgdG8gZml4IGl0LgorCQkgKi8KKwkJaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoaWNvdW50LT5tdWx0aXBsZSwgaW5vKSkgeworCQkJZ2V0X2lub2RlX2NvdW50KGljb3VudCwgaW5vLCAmY3Vycl92YWx1ZSk7CisJCQljdXJyX3ZhbHVlKys7CisJCQlpZiAoc2V0X2lub2RlX2NvdW50KGljb3VudCwgaW5vLCBjdXJyX3ZhbHVlKSkKKwkJCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVGhlIGNvdW50IHdhcyB6ZXJvOyBtYXJrIHRoZSBzaW5nbGUgYml0bWFwCisJCQkgKiBhbmQgcmV0dXJuLgorCQkJICovCisJCQlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGljb3VudC0+c2luZ2xlLCBpbm8pOworCQkJaWYgKHJldCkKKwkJCQkqcmV0ID0gMTsKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIGNvdW50IGlzIGVpdGhlciB6ZXJvIG9yIGdyZWF0ZXIgdGhhbiAxOyB0cnkgdG8KKwkJICogZmluZCBhbiBlbnRyeSBpbiB0aGUgbGlzdCB0byBkZXRlcm1pbmUgd2hpY2guCisJCSAqLworCQlnZXRfaW5vZGVfY291bnQoaWNvdW50LCBpbm8sICZjdXJyX3ZhbHVlKTsKKwkJY3Vycl92YWx1ZSsrOworCQlpZiAoc2V0X2lub2RlX2NvdW50KGljb3VudCwgaW5vLCBjdXJyX3ZhbHVlKSkKKwkJCXJldHVybiBFWFQyX0VUX05PX01FTU9SWTsKKwl9CisJaWYgKGljb3VudC0+bXVsdGlwbGUpCisJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoaWNvdW50LT5tdWx0aXBsZSwgaW5vKTsKKwlpZiAocmV0KQorCQkqcmV0ID0gaWNvdW50XzE2X3hsYXRlKGN1cnJfdmFsdWUpOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2ljb3VudF9kZWNyZW1lbnQoZXh0Ml9pY291bnRfdCBpY291bnQsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgX191MTYgKnJldCkKK3sKKwlfX3UzMgkJCWN1cnJfdmFsdWU7CisKKwlpZiAoIWlubyB8fCAoaW5vID4gaWNvdW50LT5udW1faW5vZGVzKSkKKwkJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoaWNvdW50LCBFWFQyX0VUX01BR0lDX0lDT1VOVCk7CisKKwlpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihpY291bnQtPnNpbmdsZSwgaW5vKSkgeworCQlleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcDIoaWNvdW50LT5zaW5nbGUsIGlubyk7CisJCWlmIChpY291bnQtPm11bHRpcGxlKQorCQkJZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAyKGljb3VudC0+bXVsdGlwbGUsIGlubyk7CisJCWVsc2UgeworCQkJc2V0X2lub2RlX2NvdW50KGljb3VudCwgaW5vLCAwKTsKKwkJfQorCQlpZiAocmV0KQorCQkJKnJldCA9IDA7CisJCXJldHVybiAwOworCX0KKworCWlmIChpY291bnQtPm11bHRpcGxlICYmCisJICAgICFleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGljb3VudC0+bXVsdGlwbGUsIGlubykpCisJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisKKwlnZXRfaW5vZGVfY291bnQoaWNvdW50LCBpbm8sICZjdXJyX3ZhbHVlKTsKKwlpZiAoIWN1cnJfdmFsdWUpCisJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJY3Vycl92YWx1ZS0tOworCWlmIChzZXRfaW5vZGVfY291bnQoaWNvdW50LCBpbm8sIGN1cnJfdmFsdWUpKQorCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisKKwlpZiAoY3Vycl92YWx1ZSA9PSAxKQorCQlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGljb3VudC0+c2luZ2xlLCBpbm8pOworCWlmICgoY3Vycl92YWx1ZSA9PSAwKSAmJiBpY291bnQtPm11bHRpcGxlKQorCQlleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcDIoaWNvdW50LT5tdWx0aXBsZSwgaW5vKTsKKworCWlmIChyZXQpCisJCSpyZXQgPSBpY291bnRfMTZfeGxhdGUoY3Vycl92YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfaWNvdW50X3N0b3JlKGV4dDJfaWNvdW50X3QgaWNvdW50LCBleHQyX2lub190IGlubywKKwkJCSAgICAgIF9fdTE2IGNvdW50KQoreworCWlmICghaW5vIHx8IChpbm8gPiBpY291bnQtPm51bV9pbm9kZXMpKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCisJRVhUMl9DSEVDS19NQUdJQyhpY291bnQsIEVYVDJfRVRfTUFHSUNfSUNPVU5UKTsKKworCWlmIChjb3VudCA9PSAxKSB7CisJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoaWNvdW50LT5zaW5nbGUsIGlubyk7CisJCWlmIChpY291bnQtPm11bHRpcGxlKQorCQkJZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAyKGljb3VudC0+bXVsdGlwbGUsIGlubyk7CisJCXJldHVybiAwOworCX0KKwlpZiAoY291bnQgPT0gMCkgeworCQlleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcDIoaWNvdW50LT5zaW5nbGUsIGlubyk7CisJCWlmIChpY291bnQtPm11bHRpcGxlKSB7CisJCQkvKgorCQkJICogSWYgdGhlIGljb3VudC0+bXVsdGlwbGUgYml0bWFwIGlzIGVuYWJsZWQsCisJCQkgKiB3ZSBjYW4ganVzdCBjbGVhciBib3RoIGJpdG1hcHMgYW5kIHdlJ3JlIGRvbmUKKwkJCSAqLworCQkJZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAyKGljb3VudC0+bXVsdGlwbGUsIGlubyk7CisJCX0gZWxzZQorCQkJc2V0X2lub2RlX2NvdW50KGljb3VudCwgaW5vLCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHNldF9pbm9kZV9jb3VudChpY291bnQsIGlubywgY291bnQpKQorCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisJZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAyKGljb3VudC0+c2luZ2xlLCBpbm8pOworCWlmIChpY291bnQtPm11bHRpcGxlKQorCQlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGljb3VudC0+bXVsdGlwbGUsIGlubyk7CisJcmV0dXJuIDA7Cit9CisKK2V4dDJfaW5vX3QgZXh0MmZzX2dldF9pY291bnRfc2l6ZShleHQyX2ljb3VudF90IGljb3VudCkKK3sKKwlpZiAoIWljb3VudCB8fCBpY291bnQtPm1hZ2ljICE9IEVYVDJfRVRfTUFHSUNfSUNPVU5UKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBpY291bnQtPnNpemU7Cit9CisKKyNpZmRlZiBERUJVRworCitleHQyX2ZpbHN5cwl0ZXN0X2ZzOworZXh0Ml9pY291bnRfdAlpY291bnQ7CisKKyNkZWZpbmUgRVhJVAkJMHgwMAorI2RlZmluZSBGRVRDSAkJMHgwMQorI2RlZmluZSBTVE9SRQkJMHgwMgorI2RlZmluZSBJTkNSRU1FTlQJMHgwMworI2RlZmluZSBERUNSRU1FTlQJMHgwNAorCitzdHJ1Y3QgdGVzdF9wcm9ncmFtIHsKKwlpbnQJCWNtZDsKKwlleHQyX2lub190CWlubzsKKwlfX3UxNgkJYXJnOworCV9fdTE2CQlleHBlY3RlZDsKK307CisKK3N0cnVjdCB0ZXN0X3Byb2dyYW0gcHJvZ1tdID0geworCXsgU1RPUkUsIDQyLCA0MiwgNDIgfSwKKwl7IFNUT1JFLCAxLCAgMSwgMSB9LAorCXsgU1RPUkUsIDIsICAyLCAyIH0sCisJeyBTVE9SRSwgMywgIDMsIDMgfSwKKwl7IFNUT1JFLCAxMCwgMSwgMSB9LAorCXsgU1RPUkUsIDQyLCAwLCAwIH0sCisJeyBJTkNSRU1FTlQsIDUsIDAsIDEgfSwKKwl7IElOQ1JFTUVOVCwgNSwgMCwgMiB9LAorCXsgSU5DUkVNRU5ULCA1LCAwLCAzIH0sCisJeyBJTkNSRU1FTlQsIDUsIDAsIDQgfSwKKwl7IERFQ1JFTUVOVCwgNSwgMCwgMyB9LAorCXsgREVDUkVNRU5ULCA1LCAwLCAyIH0sCisJeyBERUNSRU1FTlQsIDUsIDAsIDEgfSwKKwl7IERFQ1JFTUVOVCwgNSwgMCwgMCB9LAorCXsgRkVUQ0gsIDEwLCAwLCAxIH0sCisJeyBGRVRDSCwgMSwgMCwgMSB9LAorCXsgRkVUQ0gsIDIsIDAsIDIgfSwKKwl7IEZFVENILCAzLCAwLCAzIH0sCisJeyBJTkNSRU1FTlQsIDEsIDAsIDIgfSwKKwl7IERFQ1JFTUVOVCwgMiwgMCwgMSB9LAorCXsgREVDUkVNRU5ULCAyLCAwLCAwIH0sCisJeyBGRVRDSCwgMTIsIDAsIDAgfSwKKwl7IEVYSVQsIDAsIDAsIDAgfQorfTsKKworc3RydWN0IHRlc3RfcHJvZ3JhbSBleHRlbmRlZFtdID0geworCXsgU1RPUkUsIDEsICAxLCAxIH0sCisJeyBTVE9SRSwgMiwgIDIsIDIgfSwKKwl7IFNUT1JFLCAzLCAgMywgMyB9LAorCXsgU1RPUkUsIDQsICA0LCA0IH0sCisJeyBTVE9SRSwgNSwgIDUsIDUgfSwKKwl7IFNUT1JFLCA2LCAgMSwgMSB9LAorCXsgU1RPUkUsIDcsICAyLCAyIH0sCisJeyBTVE9SRSwgOCwgIDMsIDMgfSwKKwl7IFNUT1JFLCA5LCAgNCwgNCB9LAorCXsgU1RPUkUsIDEwLCA1LCA1IH0sCisJeyBTVE9SRSwgMTEsIDEsIDEgfSwKKwl7IFNUT1JFLCAxMiwgMiwgMiB9LAorCXsgU1RPUkUsIDEzLCAzLCAzIH0sCisJeyBTVE9SRSwgMTQsIDQsIDQgfSwKKwl7IFNUT1JFLCAxNSwgNSwgNSB9LAorCXsgU1RPUkUsIDE2LCAxLCAxIH0sCisJeyBTVE9SRSwgMTcsIDIsIDIgfSwKKwl7IFNUT1JFLCAxOCwgMywgMyB9LAorCXsgU1RPUkUsIDE5LCA0LCA0IH0sCisJeyBTVE9SRSwgMjAsIDUsIDUgfSwKKwl7IFNUT1JFLCAyMSwgMSwgMSB9LAorCXsgU1RPUkUsIDIyLCAyLCAyIH0sCisJeyBTVE9SRSwgMjMsIDMsIDMgfSwKKwl7IFNUT1JFLCAyNCwgNCwgNCB9LAorCXsgU1RPUkUsIDI1LCA1LCA1IH0sCisJeyBTVE9SRSwgMjYsIDEsIDEgfSwKKwl7IFNUT1JFLCAyNywgMiwgMiB9LAorCXsgU1RPUkUsIDI4LCAzLCAzIH0sCisJeyBTVE9SRSwgMjksIDQsIDQgfSwKKwl7IFNUT1JFLCAzMCwgNSwgNSB9LAorCXsgRVhJVCwgMCwgMCwgMCB9Cit9OworCisvKgorICogU2V0dXAgdGhlIHZhcmlhYmxlcyBmb3IgZG9pbmcgdGhlIGlub2RlIHNjYW4gdGVzdC4KKyAqLworc3RhdGljIHZvaWQgc2V0dXAodm9pZCkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHBhcmFtOworCisJaW5pdGlhbGl6ZV9leHQyX2Vycm9yX3RhYmxlKCk7CisKKwltZW1zZXQoJnBhcmFtLCAwLCBzaXplb2YocGFyYW0pKTsKKwlleHQyZnNfYmxvY2tzX2NvdW50X3NldCgmcGFyYW0sIDEyMDAwKTsKKworCXJldHZhbCA9IGV4dDJmc19pbml0aWFsaXplKCJ0ZXN0IGZzIiwgRVhUMl9GTEFHXzY0QklUUywgJnBhcmFtLAorCQkJCSAgIHRlc3RfaW9fbWFuYWdlciwgJnRlc3RfZnMpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycigic2V0dXAiLCByZXR2YWwsCisJCQkid2hpbGUgaW5pdGlhbGl6aW5nIGZpbGVzeXN0ZW0iKTsKKwkJZXhpdCgxKTsKKwl9CisJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX3RhYmxlcyh0ZXN0X2ZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoInNldHVwIiwgcmV0dmFsLAorCQkJIndoaWxlIGFsbG9jYXRpbmcgdGFibGVzIGZvciB0ZXN0IGZpbGVzeXN0ZW0iKTsKKwkJZXhpdCgxKTsKKwl9Cit9CisKK2ludCBydW5fdGVzdChpbnQgZmxhZ3MsIGludCBzaXplLCBjaGFyICpkaXIsIHN0cnVjdCB0ZXN0X3Byb2dyYW0gKnByb2cpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2ljb3VudF90CWljb3VudDsKKwlzdHJ1Y3QgdGVzdF9wcm9ncmFtICpwYzsKKwlfX3UxNgkJcmVzdWx0OworCWludAkJcHJvYmxlbSA9IDA7CisKKwlpZiAoZGlyKSB7CisJCXJldHZhbCA9IGV4dDJmc19jcmVhdGVfaWNvdW50X3RkYih0ZXN0X2ZzLCBkaXIsCisJCQkJCQkgIGZsYWdzLCAmaWNvdW50KTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigicnVuX3Rlc3QiLCByZXR2YWwsCisJCQkJIndoaWxlIGNyZWF0aW5nIGljb3VudCB1c2luZyB0ZGIiKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9IGVsc2UgeworCQlyZXR2YWwgPSBleHQyZnNfY3JlYXRlX2ljb3VudDIodGVzdF9mcywgZmxhZ3MsIHNpemUsIDAsCisJCQkJCSAgICAgICAmaWNvdW50KTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigicnVuX3Rlc3QiLCByZXR2YWwsICJ3aGlsZSBjcmVhdGluZyBpY291bnQiKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJZm9yIChwYyA9IHByb2c7IHBjLT5jbWQgIT0gRVhJVDsgcGMrKykgeworCQlzd2l0Y2ggKHBjLT5jbWQpIHsKKwkJY2FzZSBGRVRDSDoKKwkJCXByaW50ZigiaWNvdW50X2ZldGNoKCV1KSA9ICIsIHBjLT5pbm8pOworCQkJYnJlYWs7CisJCWNhc2UgU1RPUkU6CisJCQlyZXR2YWwgPSBleHQyZnNfaWNvdW50X3N0b3JlKGljb3VudCwgcGMtPmlubywgcGMtPmFyZyk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJY29tX2VycigicnVuX3Rlc3QiLCByZXR2YWwsCisJCQkJCSJ3aGlsZSBjYWxsaW5nIGljb3VudF9zdG9yZSIpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlwcmludGYoImljb3VudF9zdG9yZSgldSwgJXUpID0gIiwgcGMtPmlubywgcGMtPmFyZyk7CisJCQlicmVhazsKKwkJY2FzZSBJTkNSRU1FTlQ6CisJCQlyZXR2YWwgPSBleHQyZnNfaWNvdW50X2luY3JlbWVudChpY291bnQsIHBjLT5pbm8sIDApOworCQkJaWYgKHJldHZhbCkgeworCQkJCWNvbV9lcnIoInJ1bl90ZXN0IiwgcmV0dmFsLAorCQkJCQkid2hpbGUgY2FsbGluZyBpY291bnRfaW5jcmVtZW50Iik7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCXByaW50ZigiaWNvdW50X2luY3JlbWVudCgldSkgPSAiLCBwYy0+aW5vKTsKKwkJCWJyZWFrOworCQljYXNlIERFQ1JFTUVOVDoKKwkJCXJldHZhbCA9IGV4dDJmc19pY291bnRfZGVjcmVtZW50KGljb3VudCwgcGMtPmlubywgMCk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJY29tX2VycigicnVuX3Rlc3QiLCByZXR2YWwsCisJCQkJCSJ3aGlsZSBjYWxsaW5nIGljb3VudF9kZWNyZW1lbnQiKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJcHJpbnRmKCJpY291bnRfZGVjcmVtZW50KCV1KSA9ICIsIHBjLT5pbm8pOworCQkJYnJlYWs7CisJCX0KKwkJcmV0dmFsID0gZXh0MmZzX2ljb3VudF9mZXRjaChpY291bnQsIHBjLT5pbm8sICZyZXN1bHQpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKCJydW5fdGVzdCIsIHJldHZhbCwKKwkJCQkid2hpbGUgY2FsbGluZyBpY291bnRfZmV0Y2giKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJcHJpbnRmKCIldSAoJXMpXG4iLCByZXN1bHQsIChyZXN1bHQgPT0gcGMtPmV4cGVjdGVkKSA/CisJCSAgICAgICAiT0siIDogIk5PVCBPSyIpOworCQlpZiAocmVzdWx0ICE9IHBjLT5leHBlY3RlZCkKKwkJCXByb2JsZW0rKzsKKwl9CisJcHJpbnRmKCJpY291bnQgc2l6ZSBpcyAldVxuIiwgZXh0MmZzX2dldF9pY291bnRfc2l6ZShpY291bnQpKTsKKwlyZXR2YWwgPSBleHQyZnNfaWNvdW50X3ZhbGlkYXRlKGljb3VudCwgc3Rkb3V0KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoInJ1bl90ZXN0IiwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBpY291bnRfdmFsaWRhdGUiKTsKKwkJZXhpdCgxKTsKKwl9CisJZXh0MmZzX2ZyZWVfaWNvdW50KGljb3VudCk7CisJcmV0dXJuIHByb2JsZW07Cit9CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBmYWlsZWQgPSAwOworCisJc2V0dXAoKTsKKwlwcmludGYoIlN0YW5kYXJkIGljb3VudCBydW46XG4iKTsKKwlmYWlsZWQgKz0gcnVuX3Rlc3QoMCwgMCwgMCwgcHJvZyk7CisJcHJpbnRmKCJcbk11bHRpcGxlIGJpdG1hcCB0ZXN0OlxuIik7CisJZmFpbGVkICs9IHJ1bl90ZXN0KEVYVDJfSUNPVU5UX09QVF9JTkNSRU1FTlQsIDAsIDAsIHByb2cpOworCXByaW50ZigiXG5SZXNpemluZyBpY291bnQ6XG4iKTsKKwlmYWlsZWQgKz0gcnVuX3Rlc3QoMCwgMywgMCwgZXh0ZW5kZWQpOworCXByaW50ZigiXG5TdGFuZGFyZCBpY291bnQgcnVuIHdpdGggdGRiOlxuIik7CisJZmFpbGVkICs9IHJ1bl90ZXN0KDAsIDAsICIuIiwgcHJvZyk7CisJcHJpbnRmKCJcbk11bHRpcGxlIGJpdG1hcCB0ZXN0IHdpdGggdGRiOlxuIik7CisJZmFpbGVkICs9IHJ1bl90ZXN0KEVYVDJfSUNPVU5UX09QVF9JTkNSRU1FTlQsIDAsICIuIiwgcHJvZyk7CisJaWYgKGZhaWxlZCkKKwkJcHJpbnRmKCJGQUlMRUQhXG4iKTsKKwlyZXR1cm4gZmFpbGVkOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2ltYWdlci5jIGIvbGliL2V4dDJmcy9pbWFnZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQzY2M2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9pbWFnZXIuYwpAQCAtMCwwICsxLDQxMCBAQAorLyoKKyAqIGltYWdlLmMgLS0tIHdyaXRlcyBvdXQgdGhlIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBmaWxlc3lzdGVtIGFzIGEKKyAqIAlmbGF0IGZpbGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIFRoZW9kb3JlIFRzJ28uCisgKgorICogTm90ZTogdGhpcyB1c2VzIHRoZSBQT1NJWCBJTyBpbnRlcmZhY2VzLCB1bmxpa2UgbW9zdCBvZiB0aGUgb3RoZXIKKyAqIGZ1bmN0aW9ucyBpbiB0aGlzIGxpYnJhcnkuICBTbyBzdWUgbWUuCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisjaWZuZGVmIEhBVkVfVFlQRV9TU0laRV9UCit0eXBlZGVmIGludCBzc2l6ZV90OworI2VuZGlmCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMSBpZiB0aGUgc3BlY2lmaWVkIGJsb2NrIGlzIGFsbCB6ZXJvcworICovCitzdGF0aWMgaW50IGNoZWNrX3plcm9fYmxvY2soY2hhciAqYnVmLCBpbnQgYmxvY2tzaXplKQoreworCWNoYXIJKmNwID0gYnVmOworCWludAlsZWZ0ID0gYmxvY2tzaXplOworCisJd2hpbGUgKGxlZnQgPiAwKSB7CisJCWlmICgqY3ArKykKKwkJCXJldHVybiAwOworCQlsZWZ0LS07CisJfQorCXJldHVybiAxOworfQorCisvKgorICogV3JpdGUgdGhlIGlub2RlIHRhYmxlIG91dCBhcyBhIHNpbmdsZSBibG9jay4KKyAqLworI2RlZmluZSBCVUZfQkxPQ0tTCTMyCisKK2VycmNvZGVfdCBleHQyZnNfaW1hZ2VfaW5vZGVfd3JpdGUoZXh0Ml9maWxzeXMgZnMsIGludCBmZCwgaW50IGZsYWdzKQoreworCXVuc2lnbmVkIGludAlncm91cCwgbGVmdCwgYywgZDsKKwljaGFyCQkqYnVmLCAqY3A7CisJYmxrNjRfdAkJYmxrOworCXNzaXplX3QJCWFjdHVhbDsKKwllcnJjb2RlX3QJcmV0dmFsOworCW9mZl90CQlyOworCisJYnVmID0gbWFsbG9jKGZzLT5ibG9ja3NpemUgKiBCVUZfQkxPQ0tTKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIEVOT01FTTsKKworCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBncm91cCsrKSB7CisJCWJsayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsICh1bnNpZ25lZClncm91cCk7CisJCWlmICghYmxrKSB7CisJCQlyZXR2YWwgPSBFWFQyX0VUX01JU1NJTkdfSU5PREVfVEFCTEU7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQlsZWZ0ID0gZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCXdoaWxlIChsZWZ0KSB7CisJCQljID0gQlVGX0JMT0NLUzsKKwkJCWlmIChjID4gbGVmdCkKKwkJCQljID0gbGVmdDsKKwkJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW8sIGJsaywgYywgYnVmKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisJCQljcCA9IGJ1ZjsKKwkJCXdoaWxlIChjKSB7CisJCQkJaWYgKCEoZmxhZ3MgJiBJTUFHRVJfRkxBR19TUEFSU0VXUklURSkpIHsKKwkJCQkJZCA9IGM7CisJCQkJCWdvdG8gc2tpcF9zcGFyc2U7CisJCQkJfQorCQkJCS8qIFNraXAgemVybyBibG9ja3MgKi8KKwkJCQlpZiAoY2hlY2tfemVyb19ibG9jayhjcCwgZnMtPmJsb2Nrc2l6ZSkpIHsKKwkJCQkJYy0tOworCQkJCQlibGsrKzsKKwkJCQkJbGVmdC0tOworCQkJCQljcCArPSBmcy0+YmxvY2tzaXplOworCQkJCQlyID0gbHNlZWsoZmQsIGZzLT5ibG9ja3NpemUsIFNFRUtfQ1VSKTsKKwkJCQkJaWYgKHIgPCAwKSB7CisJCQkJCQlyZXR2YWwgPSBlcnJubzsKKwkJCQkJCWdvdG8gZXJyb3V0OworCQkJCQl9CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQkvKiBGaW5kIG5vbi16ZXJvIGJsb2NrcyAqLworCQkJCWZvciAoZD0xOyBkIDwgYzsgZCsrKSB7CisJCQkJCWlmIChjaGVja196ZXJvX2Jsb2NrKGNwICsgZCpmcy0+YmxvY2tzaXplLCBmcy0+YmxvY2tzaXplKSkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCXNraXBfc3BhcnNlOgorCQkJCWFjdHVhbCA9IHdyaXRlKGZkLCBjcCwgZnMtPmJsb2Nrc2l6ZSAqIGQpOworCQkJCWlmIChhY3R1YWwgPT0gLTEpIHsKKwkJCQkJcmV0dmFsID0gZXJybm87CisJCQkJCWdvdG8gZXJyb3V0OworCQkJCX0KKwkJCQlpZiAoYWN0dWFsICE9IChzc2l6ZV90KSAoZnMtPmJsb2Nrc2l6ZSAqIGQpKSB7CisJCQkJCXJldHZhbCA9IEVYVDJfRVRfU0hPUlRfV1JJVEU7CisJCQkJCWdvdG8gZXJyb3V0OworCQkJCX0KKwkJCQlibGsgKz0gZDsKKwkJCQlsZWZ0IC09IGQ7CisJCQkJY3AgKz0gZnMtPmJsb2Nrc2l6ZSAqIGQ7CisJCQkJYyAtPSBkOworCQkJfQorCQl9CisJfQorCXJldHZhbCA9IDA7CisKK2Vycm91dDoKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFJlYWQgaW4gdGhlIGlub2RlIHRhYmxlIGFuZCBzdHVmZiBpdCBpbnRvIHBsYWNlCisgKi8KK2VycmNvZGVfdCBleHQyZnNfaW1hZ2VfaW5vZGVfcmVhZChleHQyX2ZpbHN5cyBmcywgaW50IGZkLAorCQkJCSAgaW50IGZsYWdzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwl1bnNpZ25lZCBpbnQJZ3JvdXAsIGMsIGxlZnQ7CisJY2hhcgkJKmJ1ZjsKKwlibGs2NF90CQlibGs7CisJc3NpemVfdAkJYWN0dWFsOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlidWYgPSBtYWxsb2MoZnMtPmJsb2Nrc2l6ZSAqIEJVRl9CTE9DS1MpOworCWlmICghYnVmKQorCQlyZXR1cm4gRU5PTUVNOworCisJZm9yIChncm91cCA9IDA7IGdyb3VwIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGdyb3VwKyspIHsKKwkJYmxrID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgKHVuc2lnbmVkKWdyb3VwKTsKKwkJaWYgKCFibGspIHsKKwkJCXJldHZhbCA9IEVYVDJfRVRfTUlTU0lOR19JTk9ERV9UQUJMRTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWxlZnQgPSBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKwkJd2hpbGUgKGxlZnQpIHsKKwkJCWMgPSBCVUZfQkxPQ0tTOworCQkJaWYgKGMgPiBsZWZ0KQorCQkJCWMgPSBsZWZ0OworCQkJYWN0dWFsID0gcmVhZChmZCwgYnVmLCBmcy0+YmxvY2tzaXplICogYyk7CisJCQlpZiAoYWN0dWFsID09IC0xKSB7CisJCQkJcmV0dmFsID0gZXJybm87CisJCQkJZ290byBlcnJvdXQ7CisJCQl9CisJCQlpZiAoYWN0dWFsICE9IChzc2l6ZV90KSAoZnMtPmJsb2Nrc2l6ZSAqIGMpKSB7CisJCQkJcmV0dmFsID0gRVhUMl9FVF9TSE9SVF9SRUFEOworCQkJCWdvdG8gZXJyb3V0OworCQkJfQorCQkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIGJsaywgYywgYnVmKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisKKwkJCWJsayArPSBjOworCQkJbGVmdCAtPSBjOworCQl9CisJfQorCXJldHZhbCA9IGV4dDJmc19mbHVzaF9pY2FjaGUoZnMpOworCitlcnJvdXQ6CisJZnJlZShidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBXcml0ZSBvdXQgc3VwZXJibG9jayBhbmQgZ3JvdXAgZGVzY3JpcHRvcnMKKyAqLworZXJyY29kZV90IGV4dDJmc19pbWFnZV9zdXBlcl93cml0ZShleHQyX2ZpbHN5cyBmcywgaW50IGZkLAorCQkJCSAgIGludCBmbGFncyBFWFQyRlNfQVRUUigodW51c2VkKSkpCit7CisJY2hhcgkJKmJ1ZiwgKmNwOworCXNzaXplX3QJCWFjdHVhbDsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJYnVmID0gbWFsbG9jKGZzLT5ibG9ja3NpemUpOworCWlmICghYnVmKQorCQlyZXR1cm4gRU5PTUVNOworCisJLyoKKwkgKiBXcml0ZSBvdXQgdGhlIHN1cGVyYmxvY2sKKwkgKi8KKwltZW1zZXQoYnVmLCAwLCBmcy0+YmxvY2tzaXplKTsKKwltZW1jcHkoYnVmLCBmcy0+c3VwZXIsIFNVUEVSQkxPQ0tfU0laRSk7CisJYWN0dWFsID0gd3JpdGUoZmQsIGJ1ZiwgZnMtPmJsb2Nrc2l6ZSk7CisJaWYgKGFjdHVhbCA9PSAtMSkgeworCQlyZXR2YWwgPSBlcnJubzsKKwkJZ290byBlcnJvdXQ7CisJfQorCWlmIChhY3R1YWwgIT0gKHNzaXplX3QpIGZzLT5ibG9ja3NpemUpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9TSE9SVF9XUklURTsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJLyoKKwkgKiBOb3cgd3JpdGUgb3V0IHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9ycworCSAqLworCWNwID0gKGNoYXIgKikgZnMtPmdyb3VwX2Rlc2M7CisJYWN0dWFsID0gd3JpdGUoZmQsIGNwLCBmcy0+YmxvY2tzaXplICogZnMtPmRlc2NfYmxvY2tzKTsKKwlpZiAoYWN0dWFsID09IC0xKSB7CisJCXJldHZhbCA9IGVycm5vOworCQlnb3RvIGVycm91dDsKKwl9CisJaWYgKGFjdHVhbCAhPSAoc3NpemVfdCkgKGZzLT5ibG9ja3NpemUgKiBmcy0+ZGVzY19ibG9ja3MpKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfU0hPUlRfV1JJVEU7CisJCWdvdG8gZXJyb3V0OworCX0KKworCXJldHZhbCA9IDA7CisKK2Vycm91dDoKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFJlYWQgdGhlIHN1cGVyYmxvY2sgYW5kIGdyb3VwIGRlc2NyaXB0b3JzIGFuZCBvdmVyd3JpdGUgdGhlbS4KKyAqLworZXJyY29kZV90IGV4dDJmc19pbWFnZV9zdXBlcl9yZWFkKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmQsCisJCQkJICBpbnQgZmxhZ3MgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWNoYXIJCSpidWY7CisJc3NpemVfdAkJYWN0dWFsLCBzaXplOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlzaXplID0gZnMtPmJsb2Nrc2l6ZSAqIChmcy0+Z3JvdXBfZGVzY19jb3VudCArIDEpOworCWJ1ZiA9IG1hbGxvYyhzaXplKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIEVOT01FTTsKKworCS8qCisJICogUmVhZCBpdCBhbGwgaW4uCisJICovCisJYWN0dWFsID0gcmVhZChmZCwgYnVmLCBzaXplKTsKKwlpZiAoYWN0dWFsID09IC0xKSB7CisJCXJldHZhbCA9IGVycm5vOworCQlnb3RvIGVycm91dDsKKwl9CisJaWYgKGFjdHVhbCAhPSBzaXplKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfU0hPUlRfUkVBRDsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJLyoKKwkgKiBOb3cgY29weSBpbiB0aGUgc3VwZXJibG9jayBhbmQgZ3JvdXAgZGVzY3JpcHRvcnMKKwkgKi8KKwltZW1jcHkoZnMtPnN1cGVyLCBidWYsIFNVUEVSQkxPQ0tfU0laRSk7CisKKwltZW1jcHkoZnMtPmdyb3VwX2Rlc2MsIGJ1ZiArIGZzLT5ibG9ja3NpemUsCisJICAgICAgIGZzLT5ibG9ja3NpemUgKiBmcy0+Z3JvdXBfZGVzY19jb3VudCk7CisKKwlyZXR2YWwgPSAwOworCitlcnJvdXQ6CisJZnJlZShidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBXcml0ZSB0aGUgYmxvY2svaW5vZGUgYml0bWFwcy4KKyAqLworZXJyY29kZV90IGV4dDJmc19pbWFnZV9iaXRtYXBfd3JpdGUoZXh0Ml9maWxzeXMgZnMsIGludCBmZCwgaW50IGZsYWdzKQoreworCWV4dDJmc19nZW5lcmljX2JpdG1hcAlibWFwOworCWVycmNvZGVfdAkJcmV0dmFsOworCXNzaXplX3QJCQlhY3R1YWw7CisJc2l6ZV90CQkJYzsKKwlfX3U2NAkJCWl0ciwgY250LCBzaXplLCB0b3RhbF9zaXplOworCWNoYXIJCQlidWZbMTAyNF07CisKKwlpZiAoZmxhZ3MgJiBJTUFHRVJfRkxBR19JTk9ERU1BUCkgeworCQlpZiAoIWZzLT5pbm9kZV9tYXApIHsKKwkJCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlX2JpdG1hcChmcyk7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJYm1hcCA9IGZzLT5pbm9kZV9tYXA7CisJCWl0ciA9IDE7CisJCWNudCA9IEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpICogZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJCXNpemUgPSAoRVhUMl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zdXBlcikgLyA4KTsKKwl9IGVsc2UgeworCQlpZiAoIWZzLT5ibG9ja19tYXApIHsKKwkJCXJldHZhbCA9IGV4dDJmc19yZWFkX2Jsb2NrX2JpdG1hcChmcyk7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJYm1hcCA9IGZzLT5ibG9ja19tYXA7CisJCWl0ciA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCQljbnQgPSBFWFQyX0dST1VQU19UT19CTE9DS1MoZnMtPnN1cGVyLCBmcy0+Z3JvdXBfZGVzY19jb3VudCk7CisJCXNpemUgPSBFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKSAvIDg7CisJfQorCXRvdGFsX3NpemUgPSBzaXplICogZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisKKwl3aGlsZSAoY250ID4gMCkgeworCQlzaXplID0gc2l6ZW9mKGJ1Zik7CisJCWlmIChzaXplID4gKGNudCA+PiAzKSkKKwkJCXNpemUgPSAoY250ID4+IDMpOworCisJCXJldHZhbCA9IGV4dDJmc19nZXRfZ2VuZXJpY19ibWFwX3JhbmdlKGJtYXAsIGl0ciwKKwkJCQkJCSAgICAgICBzaXplIDw8IDMsIGJ1Zik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCisJCWFjdHVhbCA9IHdyaXRlKGZkLCBidWYsIHNpemUpOworCQlpZiAoYWN0dWFsID09IC0xKQorCQkJcmV0dXJuIGVycm5vOworCQlpZiAoYWN0dWFsICE9IChpbnQpIHNpemUpCisJCQlyZXR1cm4gRVhUMl9FVF9TSE9SVF9SRUFEOworCisJCWl0ciArPSBzaXplIDw8IDM7CisJCWNudCAtPSBzaXplIDw8IDM7CisJfQorCisJc2l6ZSA9IHRvdGFsX3NpemUgJSBmcy0+YmxvY2tzaXplOworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwlpZiAoc2l6ZSkgeworCQlzaXplID0gZnMtPmJsb2Nrc2l6ZSAtIHNpemU7CisJCXdoaWxlIChzaXplKSB7CisJCQljID0gc2l6ZTsKKwkJCWlmIChjID4gKGludCkgc2l6ZW9mKGJ1ZikpCisJCQkJYyA9IHNpemVvZihidWYpOworCQkJYWN0dWFsID0gd3JpdGUoZmQsIGJ1ZiwgYyk7CisJCQlpZiAoYWN0dWFsIDwgMCkKKwkJCQlyZXR1cm4gZXJybm87CisJCQlpZiAoKHNpemVfdCkgYWN0dWFsICE9IGMpCisJCQkJcmV0dXJuIEVYVDJfRVRfU0hPUlRfV1JJVEU7CisJCQlzaXplIC09IGM7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIFJlYWQgdGhlIGJsb2NrL2lub2RlIGJpdG1hcHMuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfaW1hZ2VfYml0bWFwX3JlYWQoZXh0Ml9maWxzeXMgZnMsIGludCBmZCwgaW50IGZsYWdzKQoreworCWV4dDJmc19nZW5lcmljX2JpdG1hcAlibWFwOworCWVycmNvZGVfdAkJcmV0dmFsOworCV9fdTY0CQkJaXRyLCBjbnQ7CisJY2hhcgkJCWJ1ZlsxMDI0XTsKKwl1bnNpZ25lZCBpbnQJCXNpemU7CisJc3NpemVfdAkJCWFjdHVhbDsKKworCWlmIChmbGFncyAmIElNQUdFUl9GTEFHX0lOT0RFTUFQKSB7CisJCWlmICghZnMtPmlub2RlX21hcCkgeworCQkJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGVfYml0bWFwKGZzKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlibWFwID0gZnMtPmlub2RlX21hcDsKKwkJaXRyID0gMTsKKwkJY250ID0gRVhUMl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zdXBlcikgKiBmcy0+Z3JvdXBfZGVzY19jb3VudDsKKwkJc2l6ZSA9IChFWFQyX0lOT0RFU19QRVJfR1JPVVAoZnMtPnN1cGVyKSAvIDgpOworCX0gZWxzZSB7CisJCWlmICghZnMtPmJsb2NrX21hcCkgeworCQkJcmV0dmFsID0gZXh0MmZzX3JlYWRfYmxvY2tfYml0bWFwKGZzKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlibWFwID0gZnMtPmJsb2NrX21hcDsKKwkJaXRyID0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2s7CisJCWNudCA9IEVYVDJfR1JPVVBTX1RPX0JMT0NLUyhmcy0+c3VwZXIsIGZzLT5ncm91cF9kZXNjX2NvdW50KTsKKwkJc2l6ZSA9IEVYVDJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c3VwZXIpIC8gODsKKwl9CisKKwl3aGlsZSAoY250ID4gMCkgeworCQlzaXplID0gc2l6ZW9mKGJ1Zik7CisJCWlmIChzaXplID4gKGNudCA+PiAzKSkKKwkJCXNpemUgPSAoY250ID4+IDMpOworCisJCWFjdHVhbCA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZSk7CisJCWlmIChhY3R1YWwgPT0gLTEpCisJCQlyZXR1cm4gZXJybm87CisJCWlmIChhY3R1YWwgIT0gKGludCkgc2l6ZSkKKwkJCXJldHVybiBFWFQyX0VUX1NIT1JUX1JFQUQ7CisKKwkJcmV0dmFsID0gZXh0MmZzX3NldF9nZW5lcmljX2JtYXBfcmFuZ2UoYm1hcCwgaXRyLAorCQkJCQkJICAgICAgIHNpemUgPDwgMywgYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisKKwkJaXRyICs9IHNpemUgPDwgMzsKKwkJY250IC09IHNpemUgPDwgMzsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2luZF9ibG9jay5jIGIvbGliL2V4dDJmcy9pbmRfYmxvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTgyYWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9pbmRfYmxvY2suYwpAQCAtMCwwICsxLDY3IEBACisvKgorICogaW5kX2Jsb2NrLmMgLS0tIGluZGlyZWN0IGJsb2NrIEkvTyByb3V0aW5lcworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKyAqIAkyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IGJ5ICBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKK2VycmNvZGVfdCBleHQyZnNfcmVhZF9pbmRfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsa190IGJsaywgdm9pZCAqYnVmKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJYmxrX3QJCSpibG9ja19ucjsKKwlpbnQJCWk7CisJaW50CQlsaW1pdCA9IGZzLT5ibG9ja3NpemUgPj4gMjsKKyNlbmRpZgorCisJaWYgKChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfSU1BR0VfRklMRSkgJiYKKwkgICAgKGZzLT5pbyAhPSBmcy0+aW1hZ2VfaW8pKQorCQltZW1zZXQoYnVmLCAwLCBmcy0+YmxvY2tzaXplKTsKKwllbHNlIHsKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2Jsayhmcy0+aW8sIGJsaywgMSwgYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCWJsb2NrX25yID0gKGJsa190ICopIGJ1ZjsKKwlmb3IgKGkgPSAwOyBpIDwgbGltaXQ7IGkrKywgYmxvY2tfbnIrKykKKwkJKmJsb2NrX25yID0gZXh0MmZzX3N3YWIzMigqYmxvY2tfbnIpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfd3JpdGVfaW5kX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibGssIHZvaWQgKmJ1ZikKK3sKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwlibGtfdAkJKmJsb2NrX25yOworCWludAkJaTsKKwlpbnQJCWxpbWl0ID0gZnMtPmJsb2Nrc2l6ZSA+PiAyOworI2VuZGlmCisKKwlpZiAoZnMtPmZsYWdzICYgRVhUMl9GTEFHX0lNQUdFX0ZJTEUpCisJCXJldHVybiAwOworCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJYmxvY2tfbnIgPSAoYmxrX3QgKikgYnVmOworCWZvciAoaSA9IDA7IGkgPCBsaW1pdDsgaSsrLCBibG9ja19ucisrKQorCQkqYmxvY2tfbnIgPSBleHQyZnNfc3dhYjMyKCpibG9ja19ucik7CisjZW5kaWYKKwlyZXR1cm4gaW9fY2hhbm5lbF93cml0ZV9ibGsoZnMtPmlvLCBibGssIDEsIGJ1Zik7Cit9CisKKwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9pbml0aWFsaXplLmMgYi9saWIvZXh0MmZzL2luaXRpYWxpemUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM5NGE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9pbml0aWFsaXplLmMKQEAgLTAsMCArMSw1MzYgQEAKKy8qCisgKiBpbml0aWFsaXplLmMgLS0tIGluaXRpYWxpemUgYSBmaWxlc3lzdGVtIGhhbmRsZSBnaXZlbiBzdXBlcmJsb2NrCisgKiAJcGFyYW1ldGVycy4gIFVzZWQgYnkgbWtlMmZzIHdoZW4gaW5pdGlhbGl6aW5nIGEgZmlsZXN5c3RlbS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworI2lmIGRlZmluZWQoX19saW51eF9fKSAgICAmJglkZWZpbmVkKEVYVDJfT1NfTElOVVgpCisjZGVmaW5lIENSRUFUT1JfT1MgRVhUMl9PU19MSU5VWAorI2Vsc2UKKyNpZiBkZWZpbmVkKF9fR05VX18pICAgICAmJglkZWZpbmVkKEVYVDJfT1NfSFVSRCkKKyNkZWZpbmUgQ1JFQVRPUl9PUyBFWFQyX09TX0hVUkQKKyNlbHNlCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYJZGVmaW5lZChFWFQyX09TX0ZSRUVCU0QpCisjZGVmaW5lIENSRUFUT1JfT1MgRVhUMl9PU19GUkVFQlNECisjZWxzZQorI2lmIGRlZmluZWQoTElURVMpIAkgICAmJglkZWZpbmVkKEVYVDJfT1NfTElURVMpCisjZGVmaW5lIENSRUFUT1JfT1MgRVhUMl9PU19MSVRFUworI2Vsc2UKKyNkZWZpbmUgQ1JFQVRPUl9PUyBFWFQyX09TX0xJTlVYIC8qIGJ5IGRlZmF1bHQgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKExJVEVTKSAmJiBkZWZpbmVkKEVYVDJfT1NfTElURVMpICovCisjZW5kaWYgLyogZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChFWFQyX09TX0ZSRUVCU0QpICovCisjZW5kaWYgLyogZGVmaW5lZChfX0dOVV9fKSAgICAgJiYgZGVmaW5lZChFWFQyX09TX0hVUkQpICovCisjZW5kaWYgLyogZGVmaW5lZChfX2xpbnV4X18pICAgJiYgZGVmaW5lZChFWFQyX09TX0xJTlVYKSAqLworCisvKgorICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgR0RUIGJsb2NrcyB0byByZXNlcnZlIGZvciBvbmxpbmUgZmlsZXN5c3RlbSBncm93dGguCisgKiBUaGUgYWJzb2x1dGUgbWF4aW11bSBudW1iZXIgb2YgR0RUIGJsb2NrcyB3ZSBjYW4gcmVzZXJ2ZSBpcyBkZXRlcm1pbmVkIGJ5CisgKiB0aGUgbnVtYmVyIG9mIGJsb2NrIHBvaW50ZXJzIHRoYXQgY2FuIGZpdCBpbnRvIGEgc2luZ2xlIGJsb2NrLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGNhbGNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyhleHQyX2ZpbHN5cyBmcykKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IgPSBmcy0+c3VwZXI7CisJdW5zaWduZWQgbG9uZyBicGcgPSBzYi0+c19ibG9ja3NfcGVyX2dyb3VwOworCXVuc2lnbmVkIGludCBnZHBiID0gRVhUMl9ERVNDX1BFUl9CTE9DSyhzYik7CisJdW5zaWduZWQgbG9uZyBtYXhfYmxvY2tzID0gMHhmZmZmZmZmZjsKKwl1bnNpZ25lZCBsb25nIHJzdl9ncm91cHM7CisJdW5zaWduZWQgaW50IHJzdl9nZGI7CisKKwkvKiBXZSBzZXQgaXQgYXQgMTAyNHggdGhlIGN1cnJlbnQgZmlsZXN5c3RlbSBzaXplLCBvcgorCSAqIHRoZSB1cHBlciBibG9jayBjb3VudCBsaW1pdCAoMl4zMiksIHdoaWNoZXZlciBpcyBsb3dlci4KKwkgKi8KKwlpZiAoZXh0MmZzX2Jsb2Nrc19jb3VudChzYikgPCBtYXhfYmxvY2tzIC8gMTAyNCkKKwkJbWF4X2Jsb2NrcyA9IGV4dDJmc19ibG9ja3NfY291bnQoc2IpICogMTAyNDsKKwkvKgorCSAqIGV4dDJmc19kaXY2NF9jZWlsKCkgaXMgdW5uZWNlc3NhcnkgYmVjYXVzZSBtYXhfYmxvY2tzIGlzCisJICogbWF4IF9HRFRfIGJsb2Nrcywgd2hpY2ggaXMgbGltaXRlZCB0byAzMiBiaXRzLgorCSAqLworCXJzdl9ncm91cHMgPSBleHQyZnNfZGl2X2NlaWwobWF4X2Jsb2NrcyAtIHNiLT5zX2ZpcnN0X2RhdGFfYmxvY2ssIGJwZyk7CisJcnN2X2dkYiA9IGV4dDJmc19kaXZfY2VpbChyc3ZfZ3JvdXBzLCBnZHBiKSAtIGZzLT5kZXNjX2Jsb2NrczsKKwlpZiAocnN2X2dkYiA+IEVYVDJfQUREUl9QRVJfQkxPQ0soc2IpKQorCQlyc3ZfZ2RiID0gRVhUMl9BRERSX1BFUl9CTE9DSyhzYik7CisjaWZkZWYgUkVTX0dEVF9ERUJVRworCXByaW50ZigibWF4X2Jsb2NrcyAlbHUsIHJzdl9ncm91cHMgPSAlbHUsIHJzdl9nZGIgPSAldVxuIiwKKwkgICAgICAgbWF4X2Jsb2NrcywgcnN2X2dyb3VwcywgcnN2X2dkYik7CisjZW5kaWYKKworCXJldHVybiByc3ZfZ2RiOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2luaXRpYWxpemUoY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLAorCQkJICAgIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpwYXJhbSwKKwkJCSAgICBpb19tYW5hZ2VyIG1hbmFnZXIsIGV4dDJfZmlsc3lzICpyZXRfZnMpCit7CisJZXh0Ml9maWxzeXMJZnM7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXI7CisJdW5zaWduZWQgaW50CXJlbTsKKwl1bnNpZ25lZCBpbnQJb3ZlcmhlYWQgPSAwOworCXVuc2lnbmVkIGludAlpcGc7CisJZGdycF90CQlpOworCWJsazY0X3QJCWZyZWVfYmxvY2tzOworCWJsa190CQludW1ibG9ja3M7CisJaW50CQlyc3ZfZ2R0OworCWludAkJY3N1bV9mbGFnOworCWludAkJYmlnYWxsb2NfZmxhZzsKKwlpbnQJCWlvX2ZsYWdzOworCXVuc2lnbmVkCXJlc2VydmVkX2lub3M7CisJY2hhcgkJKmJ1ZiA9IDA7CisJY2hhcgkJYzsKKwlkb3VibGUJCXJlc2VydmVkX3JhdGlvOworCisJaWYgKCFwYXJhbSB8fCAhZXh0MmZzX2Jsb2Nrc19jb3VudChwYXJhbSkpCisJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IHN0cnVjdF9leHQyX2ZpbHN5cyksICZmcyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCW1lbXNldChmcywgMCwgc2l6ZW9mKHN0cnVjdCBzdHJ1Y3RfZXh0Ml9maWxzeXMpKTsKKwlmcy0+bWFnaWMgPSBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVM7CisJZnMtPmZsYWdzID0gZmxhZ3MgfCBFWFQyX0ZMQUdfUlc7CisJZnMtPnVtYXNrID0gMDIyOworCWZzLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gRVhUMkZTX0JNQVA2NF9SQlRSRUU7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJZnMtPmZsYWdzIHw9IEVYVDJfRkxBR19TV0FQX0JZVEVTOworI2VuZGlmCisJaW9fZmxhZ3MgPSBJT19GTEFHX1JXOworCWlmIChmbGFncyAmIEVYVDJfRkxBR19FWENMVVNJVkUpCisJCWlvX2ZsYWdzIHw9IElPX0ZMQUdfRVhDTFVTSVZFOworCWlmIChmbGFncyAmIEVYVDJfRkxBR19ESVJFQ1RfSU8pCisJCWlvX2ZsYWdzIHw9IElPX0ZMQUdfRElSRUNUX0lPOworCXJldHZhbCA9IG1hbmFnZXItPm9wZW4obmFtZSwgaW9fZmxhZ3MsICZmcy0+aW8pOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKwlmcy0+aW1hZ2VfaW8gPSBmcy0+aW87CisJZnMtPmlvLT5hcHBfZGF0YSA9IGZzOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHN0cmxlbihuYW1lKSsxLCAmZnMtPmRldmljZV9uYW1lKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisKKwlzdHJjcHkoZnMtPmRldmljZV9uYW1lLCBuYW1lKTsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShTVVBFUkJMT0NLX1NJWkUsICZzdXBlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCWZzLT5zdXBlciA9IHN1cGVyOworCisJbWVtc2V0KHN1cGVyLCAwLCBTVVBFUkJMT0NLX1NJWkUpOworCisjZGVmaW5lIHNldF9maWVsZChmaWVsZCwgZGVmYXVsdCkgKHN1cGVyLT5maWVsZCA9IHBhcmFtLT5maWVsZCA/IFwKKwkJCQkgICBwYXJhbS0+ZmllbGQgOiAoZGVmYXVsdCkpCisjZGVmaW5lIGFzc2lnbl9maWVsZChmaWVsZCkJKHN1cGVyLT5maWVsZCA9IHBhcmFtLT5maWVsZCkKKworCXN1cGVyLT5zX21hZ2ljID0gRVhUMl9TVVBFUl9NQUdJQzsKKwlzdXBlci0+c19zdGF0ZSA9IEVYVDJfVkFMSURfRlM7CisKKwliaWdhbGxvY19mbGFnID0gRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUocGFyYW0sCisJCQkJICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9CSUdBTExPQyk7CisKKwlhc3NpZ25fZmllbGQoc19sb2dfYmxvY2tfc2l6ZSk7CisKKwlpZiAoYmlnYWxsb2NfZmxhZykgeworCQlzZXRfZmllbGQoc19sb2dfY2x1c3Rlcl9zaXplLCBzdXBlci0+c19sb2dfYmxvY2tfc2l6ZSs0KTsKKwkJaWYgKHN1cGVyLT5zX2xvZ19ibG9ja19zaXplID4gc3VwZXItPnNfbG9nX2NsdXN0ZXJfc2l6ZSkgeworCQkJcmV0dmFsID0gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfSBlbHNlCisJCXN1cGVyLT5zX2xvZ19jbHVzdGVyX3NpemUgPSBzdXBlci0+c19sb2dfYmxvY2tfc2l6ZTsKKworCXNldF9maWVsZChzX2ZpcnN0X2RhdGFfYmxvY2ssIHN1cGVyLT5zX2xvZ19jbHVzdGVyX3NpemUgPyAwIDogMSk7CisJc2V0X2ZpZWxkKHNfbWF4X21udF9jb3VudCwgMCk7CisJc2V0X2ZpZWxkKHNfZXJyb3JzLCBFWFQyX0VSUk9SU19ERUZBVUxUKTsKKwlzZXRfZmllbGQoc19mZWF0dXJlX2NvbXBhdCwgMCk7CisJc2V0X2ZpZWxkKHNfZmVhdHVyZV9pbmNvbXBhdCwgMCk7CisJc2V0X2ZpZWxkKHNfZmVhdHVyZV9yb19jb21wYXQsIDApOworCXNldF9maWVsZChzX2RlZmF1bHRfbW91bnRfb3B0cywgMCk7CisJc2V0X2ZpZWxkKHNfZmlyc3RfbWV0YV9iZywgMCk7CisJc2V0X2ZpZWxkKHNfcmFpZF9zdHJpZGUsIDApOwkJLyogZGVmYXVsdCBzdHJpZGUgc2l6ZTogMCAqLworCXNldF9maWVsZChzX3JhaWRfc3RyaXBlX3dpZHRoLCAwKTsJLyogZGVmYXVsdCBzdHJpcGUgd2lkdGg6IDAgKi8KKwlzZXRfZmllbGQoc19sb2dfZ3JvdXBzX3Blcl9mbGV4LCAwKTsKKwlzZXRfZmllbGQoc19mbGFncywgMCk7CisJYXNzaWduX2ZpZWxkKHNfYmFja3VwX2Jnc1swXSk7CisJYXNzaWduX2ZpZWxkKHNfYmFja3VwX2Jnc1sxXSk7CisJaWYgKHN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiB+RVhUMl9MSUJfRkVBVFVSRV9JTkNPTVBBVF9TVVBQKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfVU5TVVBQX0ZFQVRVUkU7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJaWYgKHN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgfkVYVDJfTElCX0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFApIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9ST19VTlNVUFBfRkVBVFVSRTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXNldF9maWVsZChzX3Jldl9sZXZlbCwgRVhUMl9HT09EX09MRF9SRVYpOworCWlmIChzdXBlci0+c19yZXZfbGV2ZWwgPj0gRVhUMl9EWU5BTUlDX1JFVikgeworCQlzZXRfZmllbGQoc19maXJzdF9pbm8sIEVYVDJfR09PRF9PTERfRklSU1RfSU5PKTsKKwkJc2V0X2ZpZWxkKHNfaW5vZGVfc2l6ZSwgRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFKTsKKwkJaWYgKHN1cGVyLT5zX2lub2RlX3NpemUgPj0gc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlX2xhcmdlKSkgeworCQkJaW50IGV4dHJhX2lzaXplID0gc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlX2xhcmdlKSAtCisJCQkJRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFOworCQkJc2V0X2ZpZWxkKHNfbWluX2V4dHJhX2lzaXplLCBleHRyYV9pc2l6ZSk7CisJCQlzZXRfZmllbGQoc193YW50X2V4dHJhX2lzaXplLCBleHRyYV9pc2l6ZSk7CisJCX0KKwl9IGVsc2UgeworCQlzdXBlci0+c19maXJzdF9pbm8gPSBFWFQyX0dPT0RfT0xEX0ZJUlNUX0lOTzsKKwkJc3VwZXItPnNfaW5vZGVfc2l6ZSA9IEVYVDJfR09PRF9PTERfSU5PREVfU0laRTsKKwl9CisKKwlzZXRfZmllbGQoc19jaGVja2ludGVydmFsLCAwKTsKKwlzdXBlci0+c19ta2ZzX3RpbWUgPSBzdXBlci0+c19sYXN0Y2hlY2sgPSBmcy0+bm93ID8gZnMtPm5vdyA6IHRpbWUoTlVMTCk7CisKKwlzdXBlci0+c19jcmVhdG9yX29zID0gQ1JFQVRPUl9PUzsKKworCWZzLT5mcmFnc2l6ZSA9IGZzLT5ibG9ja3NpemUgPSBFWFQyX0JMT0NLX1NJWkUoc3VwZXIpOworCWZzLT5jbHVzdGVyX3JhdGlvX2JpdHMgPSBzdXBlci0+c19sb2dfY2x1c3Rlcl9zaXplIC0KKwkJc3VwZXItPnNfbG9nX2Jsb2NrX3NpemU7CisKKwlpZiAoYmlnYWxsb2NfZmxhZykgeworCQl1bnNpZ25lZCBsb25nIGxvbmcgYnBnOworCisJCWlmIChwYXJhbS0+c19ibG9ja3NfcGVyX2dyb3VwICYmCisJCSAgICBwYXJhbS0+c19jbHVzdGVyc19wZXJfZ3JvdXAgJiYKKwkJICAgICgocGFyYW0tPnNfY2x1c3RlcnNfcGVyX2dyb3VwICogRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpKSAhPQorCQkgICAgIHBhcmFtLT5zX2Jsb2Nrc19wZXJfZ3JvdXApKSB7CisJCQlyZXR2YWwgPSBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJaWYgKHBhcmFtLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCkKKwkJCWFzc2lnbl9maWVsZChzX2NsdXN0ZXJzX3Blcl9ncm91cCk7CisJCWVsc2UgaWYgKHBhcmFtLT5zX2Jsb2Nrc19wZXJfZ3JvdXApCisJCQlzdXBlci0+c19jbHVzdGVyc19wZXJfZ3JvdXAgPSAKKwkJCQlwYXJhbS0+c19ibG9ja3NfcGVyX2dyb3VwIC8KKwkJCQlFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcyk7CisJCWVsc2UgaWYgKHN1cGVyLT5zX2xvZ19jbHVzdGVyX3NpemUgKyAxNSA8IDMyKQorCQkJc3VwZXItPnNfY2x1c3RlcnNfcGVyX2dyb3VwID0gZnMtPmJsb2Nrc2l6ZSAqIDg7CisJCWVsc2UKKwkJCXN1cGVyLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCA9IChmcy0+YmxvY2tzaXplIC0gMSkgKiA4OworCQlpZiAoc3VwZXItPnNfY2x1c3RlcnNfcGVyX2dyb3VwID4gRVhUMl9NQVhfQ0xVU1RFUlNfUEVSX0dST1VQKHN1cGVyKSkKKwkJCXN1cGVyLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCA9IEVYVDJfTUFYX0NMVVNURVJTX1BFUl9HUk9VUChzdXBlcik7CisJCWJwZyA9IEVYVDJGU19DMkIoZnMsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSBzdXBlci0+c19jbHVzdGVyc19wZXJfZ3JvdXApOworCQlpZiAoYnBnID49ICgoKHVuc2lnbmVkIGxvbmcgbG9uZykgMSkgPDwgMzIpKSB7CisJCQlyZXR2YWwgPSBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJc3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cCA9IGJwZzsKKwl9IGVsc2UgeworCQlzZXRfZmllbGQoc19ibG9ja3NfcGVyX2dyb3VwLCBmcy0+YmxvY2tzaXplICogOCk7CisJCWlmIChzdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwID4gRVhUMl9NQVhfQkxPQ0tTX1BFUl9HUk9VUChzdXBlcikpCisJCQlzdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwID0gRVhUMl9NQVhfQkxPQ0tTX1BFUl9HUk9VUChzdXBlcik7CisJCXN1cGVyLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCA9IHN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJfQorCisJZXh0MmZzX2Jsb2Nrc19jb3VudF9zZXQoc3VwZXIsIGV4dDJmc19ibG9ja3NfY291bnQocGFyYW0pICYKKwkJCQl+KChibGs2NF90KSBFWFQyRlNfQ0xVU1RFUl9NQVNLKGZzKSkpOworCWV4dDJmc19yX2Jsb2Nrc19jb3VudF9zZXQoc3VwZXIsIGV4dDJmc19yX2Jsb2Nrc19jb3VudChwYXJhbSkpOworCWlmIChleHQyZnNfcl9ibG9ja3NfY291bnQoc3VwZXIpID49IGV4dDJmc19ibG9ja3NfY291bnQocGFyYW0pKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXNldF9maWVsZChzX21tcF91cGRhdGVfaW50ZXJ2YWwsIDApOworCisJLyoKKwkgKiBJZiB3ZSdyZSBjcmVhdGluZyBhbiBleHRlcm5hbCBqb3VybmFsIGRldmljZSwgd2UgZG9uJ3QgbmVlZAorCSAqIHRvIGJvdGhlciB3aXRoIHRoZSByZXN0LgorCSAqLworCWlmIChzdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0pPVVJOQUxfREVWKSB7CisJCWZzLT5ncm91cF9kZXNjX2NvdW50ID0gMDsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQkqcmV0X2ZzID0gZnM7CisJCXJldHVybiAwOworCX0KKworcmV0cnk6CisJZnMtPmdyb3VwX2Rlc2NfY291bnQgPSAoZGdycF90KSBleHQyZnNfZGl2NjRfY2VpbCgKKwkJZXh0MmZzX2Jsb2Nrc19jb3VudChzdXBlcikgLSBzdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrLAorCQlFWFQyX0JMT0NLU19QRVJfR1JPVVAoc3VwZXIpKTsKKwlpZiAoZnMtPmdyb3VwX2Rlc2NfY291bnQgPT0gMCkgeworCQlyZXR2YWwgPSBFWFQyX0VUX1RPT1NNQUxMOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJc2V0X2ZpZWxkKHNfZGVzY19zaXplLAorCQkgIHN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQgPworCQkgIEVYVDJfTUlOX0RFU0NfU0laRV82NEJJVCA6IDApOworCisJZnMtPmRlc2NfYmxvY2tzID0gZXh0MmZzX2Rpdl9jZWlsKGZzLT5ncm91cF9kZXNjX2NvdW50LAorCQkJCQkgIEVYVDJfREVTQ19QRVJfQkxPQ0soc3VwZXIpKTsKKworCWkgPSBmcy0+YmxvY2tzaXplID49IDQwOTYgPyAxIDogNDA5NiAvIGZzLT5ibG9ja3NpemU7CisKKwlpZiAoc3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCAmJgorCSAgICAoZXh0MmZzX2Jsb2Nrc19jb3VudChzdXBlcikgLyBpKSA+ICgxVUxMIDw8IDMyKSkKKwkJc2V0X2ZpZWxkKHNfaW5vZGVzX2NvdW50LCB+MFUpOworCWVsc2UKKwkJc2V0X2ZpZWxkKHNfaW5vZGVzX2NvdW50LCBleHQyZnNfYmxvY2tzX2NvdW50KHN1cGVyKSAvIGkpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBFWFQyX0ZJUlNUX0lOTyArIDEgaW5vZGVzLCBzbworCSAqIHRoYXQgd2UgaGF2ZSBlbm91Z2ggaW5vZGVzIGZvciB0aGUgZmlsZXN5c3RlbSghKQorCSAqLworCWlmIChzdXBlci0+c19pbm9kZXNfY291bnQgPCBFWFQyX0ZJUlNUX0lOT0RFKHN1cGVyKSsxKQorCQlzdXBlci0+c19pbm9kZXNfY291bnQgPSBFWFQyX0ZJUlNUX0lOT0RFKHN1cGVyKSsxOworCisJLyoKKwkgKiBUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3QgYXMgbWFueSBpbm9kZXMgYXMgdGhlIHVzZXIKKwkgKiByZXF1ZXN0ZWQuICBGaWd1cmUgb3V0IGhvdyBtYW55IGlub2RlcyBwZXIgZ3JvdXAgdGhhdAorCSAqIHNob3VsZCBiZS4gIEJ1dCBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBhbGxvY2F0ZSBtb3JlIHRoYW4KKwkgKiBvbmUgYml0bWFwJ3Mgd29ydGggb2YgaW5vZGVzIGVhY2ggZ3JvdXAuCisJICovCisJaXBnID0gZXh0MmZzX2Rpdl9jZWlsKHN1cGVyLT5zX2lub2Rlc19jb3VudCwgZnMtPmdyb3VwX2Rlc2NfY291bnQpOworCWlmIChpcGcgPiBmcy0+YmxvY2tzaXplICogOCkgeworCQlpZiAoIWJpZ2FsbG9jX2ZsYWcgJiYgc3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cCA+PSAyNTYpIHsKKwkJCS8qIFRyeSBhZ2FpbiB3aXRoIHNsaWdodGx5IGRpZmZlcmVudCBwYXJhbWV0ZXJzICovCisJCQlzdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwIC09IDg7CisJCQlleHQyZnNfYmxvY2tzX2NvdW50X3NldChzdXBlciwKKwkJCQkJCWV4dDJmc19ibG9ja3NfY291bnQocGFyYW0pKTsKKwkJCXN1cGVyLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCA9IHN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCQlnb3RvIHJldHJ5OworCQl9IGVsc2UgeworCQkJcmV0dmFsID0gRVhUMl9FVF9UT09fTUFOWV9JTk9ERVM7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisKKwlpZiAoaXBnID4gKHVuc2lnbmVkKSBFWFQyX01BWF9JTk9ERVNfUEVSX0dST1VQKHN1cGVyKSkKKwkJaXBnID0gRVhUMl9NQVhfSU5PREVTX1BFUl9HUk9VUChzdXBlcik7CisKK2lwZ19yZXRyeToKKwlzdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwID0gaXBnOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIG51bWJlciBvZiBpbm9kZXMgcGVyIGdyb3VwIGNvbXBsZXRlbHkgZmlsbHMKKwkgKiB0aGUgaW5vZGUgdGFibGUgYmxvY2tzIGluIHRoZSBkZXNjcmlwdG9yLiAgSWYgbm90LCBhZGQgc29tZQorCSAqIGFkZGl0aW9uYWwgaW5vZGVzL2dyb3VwLiAgV2FzdGUgbm90LCB3YW50IG5vdC4uLgorCSAqLworCWZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwID0gKCgoc3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCAqCisJCQkJCUVYVDJfSU5PREVfU0laRShzdXBlcikpICsKKwkJCQkgICAgICAgRVhUMl9CTE9DS19TSVpFKHN1cGVyKSAtIDEpIC8KKwkJCQkgICAgICBFWFQyX0JMT0NLX1NJWkUoc3VwZXIpKTsKKwlzdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwID0gKChmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCAqCisJCQkJICAgICAgRVhUMl9CTE9DS19TSVpFKHN1cGVyKSkgLworCQkJCSAgICAgRVhUMl9JTk9ERV9TSVpFKHN1cGVyKSk7CisJLyoKKwkgKiBGaW5hbGx5LCBtYWtlIHN1cmUgdGhlIG51bWJlciBvZiBpbm9kZXMgcGVyIGdyb3VwIGlzIGEKKwkgKiBtdWx0aXBsZSBvZiA4LiAgVGhpcyBpcyBuZWVkZWQgdG8gc2ltcGxpZnkgdGhlIGJpdG1hcAorCSAqIHNwbGljaW5nIGNvZGUuCisJICovCisJaWYgKHN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgPCA4KQorCQlzdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwID0gODsKKwlzdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwICY9IH43OworCWZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwID0gKCgoc3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCAqCisJCQkJCUVYVDJfSU5PREVfU0laRShzdXBlcikpICsKKwkJCQkgICAgICAgRVhUMl9CTE9DS19TSVpFKHN1cGVyKSAtIDEpIC8KKwkJCQkgICAgICBFWFQyX0JMT0NLX1NJWkUoc3VwZXIpKTsKKworCS8qCisJICogYWRqdXN0IGlub2RlIGNvdW50IHRvIHJlZmxlY3QgdGhlIGFkanVzdGVkIGlub2Rlc19wZXJfZ3JvdXAKKwkgKi8KKwlpZiAoKF9fdTY0KXN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgKiBmcy0+Z3JvdXBfZGVzY19jb3VudCA+IH4wVSkgeworCQlpcGctLTsKKwkJZ290byBpcGdfcmV0cnk7CisJfQorCXN1cGVyLT5zX2lub2Rlc19jb3VudCA9IHN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgKgorCQlmcy0+Z3JvdXBfZGVzY19jb3VudDsKKwlzdXBlci0+c19mcmVlX2lub2Rlc19jb3VudCA9IHN1cGVyLT5zX2lub2Rlc19jb3VudDsKKworCS8qCisJICogY2hlY2sgdGhlIG51bWJlciBvZiByZXNlcnZlZCBncm91cCBkZXNjcmlwdG9yIHRhYmxlIGJsb2NrcworCSAqLworCWlmIChzdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFKQorCQlyc3ZfZ2R0ID0gY2FsY19yZXNlcnZlZF9nZHRfYmxvY2tzKGZzKTsKKwllbHNlCisJCXJzdl9nZHQgPSAwOworCXNldF9maWVsZChzX3Jlc2VydmVkX2dkdF9ibG9ja3MsIHJzdl9nZHQpOworCWlmIChzdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzID4gRVhUMl9BRERSX1BFUl9CTE9DSyhzdXBlcikpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9SRVNfR0RUX0JMT0NLUzsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBib29ra2VlcGluZyBibG9ja3MgcGVyCisJICogZ3JvdXAuICBJdCBpbmNsdWRlcyB0aGUgc3VwZXJibG9jaywgdGhlIGJsb2NrIGdyb3VwCisJICogZGVzY3JpcHRvcnMsIHRoZSBibG9jayBiaXRtYXAsIHRoZSBpbm9kZSBiaXRtYXAsIHRoZSBpbm9kZQorCSAqIHRhYmxlLCBhbmQgdGhlIHJlc2VydmVkIGdkdCBibG9ja3MuCisJICovCisJb3ZlcmhlYWQgPSAoaW50KSAoMyArIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwICsKKwkJCSAgZnMtPmRlc2NfYmxvY2tzICsgc3VwZXItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrcyk7CisKKwkvKiBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUgdXNlciByZXF1ZXN0ZWQgdG9vIG1hbnkgaW5vZGVzICovCisJaWYgKG92ZXJoZWFkID4gc3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cCkgeworCQlyZXR2YWwgPSBFWFQyX0VUX1RPT19NQU5ZX0lOT0RFUzsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogU2VlIGlmIHRoZSBsYXN0IGdyb3VwIGlzIGJpZyBlbm91Z2ggdG8gc3VwcG9ydCB0aGUKKwkgKiBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzLiAgSWYgbm90LCB3ZSBuZWVkIHRvIGdldCByaWQgb2YKKwkgKiBpdC4gIFdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIG92ZXJoZWFkIGZvciB0aGUgbGFzdCBibG9jaworCSAqIGdyb3VwLCBzaW5jZSBpdCBtaWdodCBvciBtaWdodCBub3QgaGF2ZSBhIHN1cGVyYmxvY2sKKwkgKiBiYWNrdXAuCisJICovCisJb3ZlcmhlYWQgPSAoaW50KSAoMiArIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKTsKKwlpZiAoZXh0MmZzX2JnX2hhc19zdXBlcihmcywgZnMtPmdyb3VwX2Rlc2NfY291bnQgLSAxKSkKKwkJb3ZlcmhlYWQgKz0gMSArIGZzLT5kZXNjX2Jsb2NrcyArIHN1cGVyLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3M7CisJcmVtID0gKChleHQyZnNfYmxvY2tzX2NvdW50KHN1cGVyKSAtIHN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spICUKKwkgICAgICAgc3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cCk7CisJaWYgKChmcy0+Z3JvdXBfZGVzY19jb3VudCA9PSAxKSAmJiByZW0gJiYgKHJlbSA8IG92ZXJoZWFkKSkgeworCQlyZXR2YWwgPSBFWFQyX0VUX1RPT1NNQUxMOworCQlnb3RvIGNsZWFudXA7CisJfQorCWlmIChyZW0gJiYgKHJlbSA8IG92ZXJoZWFkKzUwKSkgeworCQlleHQyZnNfYmxvY2tzX2NvdW50X3NldChzdXBlciwgZXh0MmZzX2Jsb2Nrc19jb3VudChzdXBlcikgLQorCQkJCQlyZW0pOworCQkvKgorCQkgKiBJZiBibG9ja3MgY291bnQgaXMgY2hhbmdlZCwgd2UgbmVlZCB0byByZWNhbGN1bGF0ZQorCQkgKiByZXNlcnZlZCBibG9ja3MgY291bnQgbm90IHRvIGV4Y2VlZCA1MCUuCisJCSAqLworCQlyZXNlcnZlZF9yYXRpbyA9IDEwMC4wICogZXh0MmZzX3JfYmxvY2tzX2NvdW50KHBhcmFtKSAvCisJCQlleHQyZnNfYmxvY2tzX2NvdW50KHBhcmFtKTsKKwkJZXh0MmZzX3JfYmxvY2tzX2NvdW50X3NldChzdXBlciwgcmVzZXJ2ZWRfcmF0aW8gKgorCQkJZXh0MmZzX2Jsb2Nrc19jb3VudChzdXBlcikgLyAxMDAuMCk7CisKKwkJZ290byByZXRyeTsKKwl9CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQgd2Uga25vdyBob3cgYmlnIHRoZSBmaWxlc3lzdGVtIHdpbGwgYmUuICBTbworCSAqIHdlIGNhbiBkbyBhbnkgYW5kIGFsbCBhbGxvY2F0aW9ucyB0aGF0IGRlcGVuZCBvbiB0aGUgYmxvY2sKKwkgKiBjb3VudC4KKwkgKi8KKworCS8qIFNldCB1cCB0aGUgbG9jYXRpb25zIG9mIHRoZSBiYWNrdXAgc3VwZXJibG9ja3MgKi8KKwlpZiAoc3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfQ09NUEFUX1NQQVJTRV9TVVBFUjIpIHsKKwkJaWYgKHN1cGVyLT5zX2JhY2t1cF9iZ3NbMF0gPj0gZnMtPmdyb3VwX2Rlc2NfY291bnQpCisJCQlzdXBlci0+c19iYWNrdXBfYmdzWzBdID0gZnMtPmdyb3VwX2Rlc2NfY291bnQgLSAxOworCQlpZiAoc3VwZXItPnNfYmFja3VwX2Jnc1sxXSA+PSBmcy0+Z3JvdXBfZGVzY19jb3VudCkKKwkJCXN1cGVyLT5zX2JhY2t1cF9iZ3NbMV0gPSBmcy0+Z3JvdXBfZGVzY19jb3VudCAtIDE7CisJCWlmIChzdXBlci0+c19iYWNrdXBfYmdzWzBdID09IHN1cGVyLT5zX2JhY2t1cF9iZ3NbMV0pCisJCQlzdXBlci0+c19iYWNrdXBfYmdzWzFdID0gMDsKKwkJaWYgKHN1cGVyLT5zX2JhY2t1cF9iZ3NbMF0gPiBzdXBlci0+c19iYWNrdXBfYmdzWzFdKSB7CisJCQlfX3UzMiB0ID0gc3VwZXItPnNfYmFja3VwX2Jnc1swXTsKKwkJCXN1cGVyLT5zX2JhY2t1cF9iZ3NbMF0gPSBzdXBlci0+c19iYWNrdXBfYmdzWzFdOworCQkJc3VwZXItPnNfYmFja3VwX2Jnc1sxXSA9IHQ7CisJCX0KKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzdHJsZW4oZnMtPmRldmljZV9uYW1lKSArIDgwLCAmYnVmKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisKKwlzdHJjcHkoYnVmLCAiYmxvY2sgYml0bWFwIGZvciAiKTsKKwlzdHJjYXQoYnVmLCBmcy0+ZGV2aWNlX25hbWUpOworCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9zdWJjbHVzdGVyX2JpdG1hcChmcywgYnVmLCAmZnMtPmJsb2NrX21hcCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJc3RyY3B5KGJ1ZiwgImlub2RlIGJpdG1hcCBmb3IgIik7CisJc3RyY2F0KGJ1ZiwgZnMtPmRldmljZV9uYW1lKTsKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfaW5vZGVfYml0bWFwKGZzLCBidWYsICZmcy0+aW5vZGVfbWFwKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisKKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KGZzLT5kZXNjX2Jsb2NrcywgZnMtPmJsb2Nrc2l6ZSwKKwkJCQkmZnMtPmdyb3VwX2Rlc2MpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKworCW1lbXNldChmcy0+Z3JvdXBfZGVzYywgMCwgKHNpemVfdCkgZnMtPmRlc2NfYmxvY2tzICogZnMtPmJsb2Nrc2l6ZSk7CisKKwkvKgorCSAqIFJlc2VydmUgdGhlIHN1cGVyYmxvY2sgYW5kIGdyb3VwIGRlc2NyaXB0b3JzIGZvciBlYWNoCisJICogZ3JvdXAsIGFuZCBmaWxsIGluIHRoZSBjb3JyZWN0IGdyb3VwIHN0YXRpc3RpY3MgZm9yIGdyb3VwLgorCSAqIE5vdGUgdGhhdCBhbHRob3VnaCB0aGUgYmxvY2sgYml0bWFwLCBpbm9kZSBiaXRtYXAsIGFuZAorCSAqIGlub2RlIHRhYmxlIGhhdmUgbm90IGJlZW4gYWxsb2NhdGVkIChhbmQgaW4gZmFjdCB3b24ndCBiZQorCSAqIGJ5IHRoaXMgcm91dGluZSksIHRoZXkgYXJlIGFjY291bnRlZCBmb3IgbmV2ZXJ0aGVsZXNzLgorCSAqCisJICogSWYgRkxFWF9CRyBtZXRhLWRhdGEgZ3JvdXBpbmcgaXMgdXNlZCwgb25seSBhY2NvdW50IGZvciB0aGUKKwkgKiBzdXBlcmJsb2NrIGFuZCBncm91cCBkZXNjcmlwdG9ycyAodGhlIGlub2RlIHRhYmxlcyBhbmQKKwkgKiBiaXRtYXBzIHdpbGwgYmUgYWNjb3VudGVkIGZvciB3aGVuIGFsbG9jYXRlZCkuCisJICovCisJZnJlZV9ibG9ja3MgPSAwOworCWNzdW1fZmxhZyA9IEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pOworCXJlc2VydmVkX2lub3MgPSBzdXBlci0+c19maXJzdF9pbm87CisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJLyoKKwkJICogRG9uJ3Qgc2V0IHRoZSBCTE9DS19VTklOSVQgZ3JvdXAgZm9yIHRoZSBsYXN0IGdyb3VwCisJCSAqIGJlY2F1c2UgdGhlIGJsb2NrIGJpdG1hcCBuZWVkcyB0byBiZSBwYWRkZWQuCisJCSAqLworCQlpZiAoY3N1bV9mbGFnKSB7CisJCQlpZiAoaSAhPSBmcy0+Z3JvdXBfZGVzY19jb3VudCAtIDEpCisJCQkJZXh0MmZzX2JnX2ZsYWdzX3NldChmcywgaSwKKwkJCQkJCSAgICBFWFQyX0JHX0JMT0NLX1VOSU5JVCk7CisJCQlleHQyZnNfYmdfZmxhZ3Nfc2V0KGZzLCBpLCBFWFQyX0JHX0lOT0RFX1VOSU5JVCk7CisJCQludW1ibG9ja3MgPSBzdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwOworCQkJaWYgKHJlc2VydmVkX2lub3MpIHsKKwkJCQlpZiAobnVtYmxvY2tzID4gcmVzZXJ2ZWRfaW5vcykgeworCQkJCQludW1ibG9ja3MgLT0gcmVzZXJ2ZWRfaW5vczsKKwkJCQkJcmVzZXJ2ZWRfaW5vcyA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJcmVzZXJ2ZWRfaW5vcyAtPSBudW1ibG9ja3M7CisJCQkJCW51bWJsb2NrcyA9IDA7CisJCQkJfQorCQkJfQorCQkJZXh0MmZzX2JnX2l0YWJsZV91bnVzZWRfc2V0KGZzLCBpLCBudW1ibG9ja3MpOworCQl9CisJCW51bWJsb2NrcyA9IGV4dDJmc19yZXNlcnZlX3N1cGVyX2FuZF9iZ2QoZnMsIGksIGZzLT5ibG9ja19tYXApOworCQlpZiAoZnMtPnN1cGVyLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXgpCisJCQludW1ibG9ja3MgKz0gMiArIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwOworCisJCWZyZWVfYmxvY2tzICs9IG51bWJsb2NrczsKKwkJZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcywgaSwgbnVtYmxvY2tzKTsKKwkJZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50X3NldChmcywgaSwgZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXApOworCQlleHQyZnNfYmdfdXNlZF9kaXJzX2NvdW50X3NldChmcywgaSwgMCk7CisJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBpKTsKKwl9CisJZnJlZV9ibG9ja3MgJj0gfkVYVDJGU19DTFVTVEVSX01BU0soZnMpOworCWV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoc3VwZXIsIGZyZWVfYmxvY2tzKTsKKworCWMgPSAoY2hhcikgMjU1OworCWlmICgoKGludCkgYykgPT0gLTEpIHsKKwkJc3VwZXItPnNfZmxhZ3MgfD0gRVhUMl9GTEFHU19TSUdORURfSEFTSDsKKwl9IGVsc2UgeworCQlzdXBlci0+c19mbGFncyB8PSBFWFQyX0ZMQUdTX1VOU0lHTkVEX0hBU0g7CisJfQorCisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCWV4dDJmc19tYXJrX2JiX2RpcnR5KGZzKTsKKwlleHQyZnNfbWFya19pYl9kaXJ0eShmcyk7CisKKwlpb19jaGFubmVsX3NldF9ibGtzaXplKGZzLT5pbywgZnMtPmJsb2Nrc2l6ZSk7CisKKwkqcmV0X2ZzID0gZnM7CisJcmV0dXJuIDA7CitjbGVhbnVwOgorCWZyZWUoYnVmKTsKKwlleHQyZnNfZnJlZShmcyk7CisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvaW5saW5lLmMgYi9saWIvZXh0MmZzL2lubGluZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZGExZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2lubGluZS5jCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogaW5saW5lLmMgLS0tIEluY2x1ZGVzIHRoZSBpbmxpbmVkIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBoZWFkZXIKKyAqIAlmaWxlcyBhcyBzdGFuZGFsb25lIGZ1bmN0aW9ucywgaW4gY2FzZSB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbQorICogCWlzIGNvbXBpbGVkIHdpdGggaW5saW5pbmcgdHVybmVkIG9mZi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpZm5kZWYgX1hPUEVOX1NPVVJDRQorI2RlZmluZSBfWE9QRU5fU09VUkNFIDYwMAkvKiBmb3IgcG9zaXhfbWVtYWxpZ24oKSAqLworI2VuZGlmCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX01BTExPQ19ICisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNkZWZpbmUgSU5DTFVERV9JTkxJTkVfRlVOQ1MKKyNpbmNsdWRlICJleHQyZnMuaCIKKworLyoKKyAqIFdlIHVzZWQgdG8gZGVmaW5lIHRoaXMgYXMgYW4gaW5saW5lLCBidXQgc2luY2Ugd2UgYXJlIG5vdyB1c2luZworICogYXV0b2NvbmYtZGVmaW5lZCAjaWZkZWYncywgd2UgbmVlZCB0byBleHBvcnQgdGhpcyBhcyBhCisgKiBsaWJyYXJ5LXByb3ZpZGVkIGZ1bmN0aW9uIGV4Y2x1c2l2ZWx5LgorICovCitlcnJjb2RlX3QgZXh0MmZzX2dldF9tZW1hbGlnbih1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGFsaWduLCB2b2lkICpwdHIpCit7CisJZXJyY29kZV90IHJldHZhbDsKKwl2b2lkICoqcCA9IHB0cjsKKworCWlmIChhbGlnbiA8IDgpCisJCWFsaWduID0gODsKKyNpZmRlZiBIQVZFX1BPU0lYX01FTUFMSUdOCisJcmV0dmFsID0gcG9zaXhfbWVtYWxpZ24ocCwgYWxpZ24sIHNpemUpOworCWlmIChyZXR2YWwpIHsKKwkJaWYgKHJldHZhbCA9PSBFTk9NRU0pCisJCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisJCXJldHVybiByZXR2YWw7CisJfQorI2Vsc2UKKyNpZmRlZiBIQVZFX01FTUFMSUdOCisJKnAgPSBtZW1hbGlnbihhbGlnbiwgc2l6ZSk7CisJaWYgKCpwID09IE5VTEwpIHsKKwkJaWYgKGVycm5vKQorCQkJcmV0dXJuIGVycm5vOworCQllbHNlCisJCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisJfQorI2Vsc2UKKyNpZmRlZiBIQVZFX1ZBTExPQworCWlmIChhbGlnbiA+IHNpemVvZihsb25nIGxvbmcpKQorCQkqcCA9IHZhbGxvYyhzaXplKTsKKwllbHNlCisjZW5kaWYKKwkJKnAgPSBtYWxsb2Moc2l6ZSk7CisJaWYgKCh1bnNpZ25lZCBsb25nKSAqcCAmIChhbGlnbiAtIDEpKSB7CisJCWZyZWUoKnApOworCQkqcCA9IDA7CisJfQorCWlmICgqcCA9PSAwKQorCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisjZW5kaWYKKyNlbmRpZgorCXJldHVybiAwOworfQorCisjaWZkZWYgREVCVUcKK3N0YXRpYyBpbnQgaXNhbGlnbmVkKHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBhbGlnbikKK3sKKwlyZXR1cm4gKCgodW5zaWduZWQgbG9uZykgcHRyICYgKGFsaWduIC0gMSkpID09IDApOworfQorCitzdGF0aWMgZXJyY29kZV90IHRlc3RfbWVtYWxpZ24odW5zaWduZWQgbG9uZyBhbGlnbikKK3sKKwl2b2lkICpwdHIgPSAwOworCWVycmNvZGVfdCByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbWFsaWduKDMyLCBhbGlnbiwgJnB0cik7CisJaWYgKCFyZXR2YWwgJiYgIWlzYWxpZ25lZChwdHIsIGFsaWduKSkKKwkJcmV0dmFsID0gRUlOVkFMOworCWZyZWUocHRyKTsKKwlwcmludGYoInRzdF9tZW1hbGlnbiglbHUpIGlzICVzXG4iLCBhbGlnbiwKKwkgICAgICAgcmV0dmFsID8gZXJyb3JfbWVzc2FnZShyZXR2YWwpIDogIk9LIik7CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBlcnIgPSAwOworCisJaWYgKHRlc3RfbWVtYWxpZ24oNCkpCisJCWVycisrOworCWlmICh0ZXN0X21lbWFsaWduKDMyKSkKKwkJZXJyKys7CisJaWYgKHRlc3RfbWVtYWxpZ24oMTAyNCkpCisJCWVycisrOworCWlmICh0ZXN0X21lbWFsaWduKDQwOTYpKQorCQllcnIrKzsKKwlyZXR1cm4gZXJyOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2lub2RlLmMgYi9saWIvZXh0MmZzL2lub2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJmMmVjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvaW5vZGUuYwpAQCAtMCwwICsxLDg0NyBAQAorLyoKKyAqIGlub2RlLmMgLS0tIHV0aWxpdHkgcm91dGluZXMgdG8gcmVhZCBhbmQgd3JpdGUgaW5vZGVzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnNQLmgiCisjaW5jbHVkZSAiZTJpbWFnZS5oIgorCitzdHJ1Y3QgZXh0Ml9zdHJ1Y3RfaW5vZGVfc2NhbiB7CisJZXJyY29kZV90CQltYWdpYzsKKwlleHQyX2ZpbHN5cwkJZnM7CisJZXh0Ml9pbm9fdAkJY3VycmVudF9pbm9kZTsKKwlibGs2NF90CQkJY3VycmVudF9ibG9jazsKKwlkZ3JwX3QJCQljdXJyZW50X2dyb3VwOworCWV4dDJfaW5vX3QJCWlub2Rlc19sZWZ0OworCWJsa190CQkJYmxvY2tzX2xlZnQ7CisJZGdycF90CQkJZ3JvdXBzX2xlZnQ7CisJYmxrX3QJCQlpbm9kZV9idWZmZXJfYmxvY2tzOworCWNoYXIgKgkJCWlub2RlX2J1ZmZlcjsKKwlpbnQJCQlpbm9kZV9zaXplOworCWNoYXIgKgkJCXB0cjsKKwlpbnQJCQlieXRlc19sZWZ0OworCWNoYXIJCQkqdGVtcF9idWZmZXI7CisJZXJyY29kZV90CQkoKmRvbmVfZ3JvdXApKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgICAgICBleHQyX2lub2RlX3NjYW4gc2NhbiwKKwkJCQkJICAgICAgZGdycF90IGdyb3VwLAorCQkJCQkgICAgICB2b2lkICogcHJpdl9kYXRhKTsKKwl2b2lkICoJCQlkb25lX2dyb3VwX2RhdGE7CisJaW50CQkJYmFkX2Jsb2NrX3B0cjsKKwlpbnQJCQlzY2FuX2ZsYWdzOworCWludAkJCXJlc2VydmVkWzZdOworfTsKKworLyoKKyAqIFRoaXMgcm91dGluZSBmbHVzaGVzIHRoZSBpY2FjaGUsIGlmIGl0IGV4aXN0cy4KKyAqLworZXJyY29kZV90IGV4dDJmc19mbHVzaF9pY2FjaGUoZXh0Ml9maWxzeXMgZnMpCit7CisJaW50CWk7CisKKwlpZiAoIWZzLT5pY2FjaGUpCisJCXJldHVybiAwOworCisJZm9yIChpPTA7IGkgPCBmcy0+aWNhY2hlLT5jYWNoZV9zaXplOyBpKyspCisJCWZzLT5pY2FjaGUtPmNhY2hlW2ldLmlubyA9IDA7CisKKwlmcy0+aWNhY2hlLT5idWZmZXJfYmxrID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBjcmVhdGVfaWNhY2hlKGV4dDJfZmlsc3lzIGZzKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAoZnMtPmljYWNoZSkKKwkJcmV0dXJuIDA7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlX2NhY2hlKSwgJmZzLT5pY2FjaGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwltZW1zZXQoZnMtPmljYWNoZSwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlX2NhY2hlKSk7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSwgJmZzLT5pY2FjaGUtPmJ1ZmZlcik7CisJaWYgKHJldHZhbCkgeworCQlleHQyZnNfZnJlZV9tZW0oJmZzLT5pY2FjaGUpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlmcy0+aWNhY2hlLT5idWZmZXJfYmxrID0gMDsKKwlmcy0+aWNhY2hlLT5jYWNoZV9sYXN0ID0gLTE7CisJZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZSA9IDQ7CisJZnMtPmljYWNoZS0+cmVmY291bnQgPSAxOworCXJldHZhbCA9IGV4dDJmc19nZXRfYXJyYXkoZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZSwKKwkJCQkgIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZV9jYWNoZV9lbnQpLAorCQkJCSAgJmZzLT5pY2FjaGUtPmNhY2hlKTsKKwlpZiAocmV0dmFsKSB7CisJCWV4dDJmc19mcmVlX21lbSgmZnMtPmljYWNoZS0+YnVmZmVyKTsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZmcy0+aWNhY2hlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJZXh0MmZzX2ZsdXNoX2ljYWNoZShmcyk7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfb3Blbl9pbm9kZV9zY2FuKGV4dDJfZmlsc3lzIGZzLCBpbnQgYnVmZmVyX2Jsb2NrcywKKwkJCQkgZXh0Ml9pbm9kZV9zY2FuICpyZXRfc2NhbikKK3sKKwlleHQyX2lub2RlX3NjYW4Jc2NhbjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWVycmNvZGVfdCAoKnNhdmVfZ2V0X2Jsb2NrcykoZXh0Ml9maWxzeXMgZiwgZXh0Ml9pbm9fdCBpbm8sIGJsa190ICpibG9ja3MpOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCS8qCisJICogSWYgZnMtPmJhZGJsb2NrcyBpc24ndCBzZXQsIHRoZW4gc2V0IGl0IC0tLSBzaW5jZSB0aGUgaW5vZGUKKwkgKiBzY2FubmluZyBmdW5jdGlvbnMgcmVxdWlyZSBpdC4KKwkgKi8KKwlpZiAoZnMtPmJhZGJsb2NrcyA9PSAwKSB7CisJCS8qCisJCSAqIFRlbXBvcmFybHkgc2F2ZSBmcy0+Z2V0X2Jsb2NrcyBhbmQgc2V0IGl0IHRvIHplcm8sCisJCSAqIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGUyZnNjaydzLgorCQkgKi8KKwkJc2F2ZV9nZXRfYmxvY2tzID0gZnMtPmdldF9ibG9ja3M7CisJCWZzLT5nZXRfYmxvY2tzID0gMDsKKwkJcmV0dmFsID0gZXh0MmZzX3JlYWRfYmJfaW5vZGUoZnMsICZmcy0+YmFkYmxvY2tzKTsKKwkJaWYgKHJldHZhbCAmJiBmcy0+YmFkYmxvY2tzKSB7CisJCQlleHQyZnNfYmFkYmxvY2tzX2xpc3RfZnJlZShmcy0+YmFkYmxvY2tzKTsKKwkJCWZzLT5iYWRibG9ja3MgPSAwOworCQl9CisJCWZzLT5nZXRfYmxvY2tzID0gc2F2ZV9nZXRfYmxvY2tzOworCX0KKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgZXh0Ml9zdHJ1Y3RfaW5vZGVfc2NhbiksICZzY2FuKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCW1lbXNldChzY2FuLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfc3RydWN0X2lub2RlX3NjYW4pKTsKKworCXNjYW4tPm1hZ2ljID0gRVhUMl9FVF9NQUdJQ19JTk9ERV9TQ0FOOworCXNjYW4tPmZzID0gZnM7CisJc2Nhbi0+aW5vZGVfc2l6ZSA9IEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpOworCXNjYW4tPmJ5dGVzX2xlZnQgPSAwOworCXNjYW4tPmN1cnJlbnRfZ3JvdXAgPSAwOworCXNjYW4tPmdyb3Vwc19sZWZ0ID0gZnMtPmdyb3VwX2Rlc2NfY291bnQgLSAxOworCXNjYW4tPmlub2RlX2J1ZmZlcl9ibG9ja3MgPSBidWZmZXJfYmxvY2tzID8gYnVmZmVyX2Jsb2NrcyA6IDg7CisJc2Nhbi0+Y3VycmVudF9ibG9jayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2Moc2Nhbi0+ZnMsCisJCQkJCQkgICAgIHNjYW4tPmN1cnJlbnRfZ3JvdXApOworCXNjYW4tPmlub2Rlc19sZWZ0ID0gRVhUMl9JTk9ERVNfUEVSX0dST1VQKHNjYW4tPmZzLT5zdXBlcik7CisJc2Nhbi0+YmxvY2tzX2xlZnQgPSBzY2FuLT5mcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKwlpZiAoRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSkgeworCQlfX3UzMiB1bnVzZWQgPSBleHQyZnNfYmdfaXRhYmxlX3VudXNlZChmcywgc2Nhbi0+Y3VycmVudF9ncm91cCk7CisJCWlmIChzY2FuLT5pbm9kZXNfbGVmdCA+IHVudXNlZCkKKwkJCXNjYW4tPmlub2Rlc19sZWZ0IC09IHVudXNlZDsKKwkJZWxzZQorCQkJc2Nhbi0+aW5vZGVzX2xlZnQgPSAwOworCQlzY2FuLT5ibG9ja3NfbGVmdCA9CisJCQkoc2Nhbi0+aW5vZGVzX2xlZnQgKworCQkJIChmcy0+YmxvY2tzaXplIC8gc2Nhbi0+aW5vZGVfc2l6ZSAtIDEpKSAqCisJCQlzY2FuLT5pbm9kZV9zaXplIC8gZnMtPmJsb2Nrc2l6ZTsKKwl9CisJcmV0dmFsID0gaW9fY2hhbm5lbF9hbGxvY19idWYoZnMtPmlvLCBzY2FuLT5pbm9kZV9idWZmZXJfYmxvY2tzLAorCQkJCSAgICAgICZzY2FuLT5pbm9kZV9idWZmZXIpOworCXNjYW4tPmRvbmVfZ3JvdXAgPSAwOworCXNjYW4tPmRvbmVfZ3JvdXBfZGF0YSA9IDA7CisJc2Nhbi0+YmFkX2Jsb2NrX3B0ciA9IDA7CisJaWYgKHJldHZhbCkgeworCQlleHQyZnNfZnJlZV9tZW0oJnNjYW4pOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzY2FuLT5pbm9kZV9zaXplLCAmc2Nhbi0+dGVtcF9idWZmZXIpOworCWlmIChyZXR2YWwpIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZzY2FuLT5pbm9kZV9idWZmZXIpOworCQlleHQyZnNfZnJlZV9tZW0oJnNjYW4pOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlpZiAoc2Nhbi0+ZnMtPmJhZGJsb2NrcyAmJiBzY2FuLT5mcy0+YmFkYmxvY2tzLT5udW0pCisJCXNjYW4tPnNjYW5fZmxhZ3MgfD0gRVhUMl9TRl9DSEtfQkFEQkxPQ0tTOworCWlmIChFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pKQorCQlzY2FuLT5zY2FuX2ZsYWdzIHw9IEVYVDJfU0ZfRE9fTEFaWTsKKwkqcmV0X3NjYW4gPSBzY2FuOworCXJldHVybiAwOworfQorCit2b2lkIGV4dDJmc19jbG9zZV9pbm9kZV9zY2FuKGV4dDJfaW5vZGVfc2NhbiBzY2FuKQoreworCWlmICghc2NhbiB8fCAoc2Nhbi0+bWFnaWMgIT0gRVhUMl9FVF9NQUdJQ19JTk9ERV9TQ0FOKSkKKwkJcmV0dXJuOworCisJZXh0MmZzX2ZyZWVfbWVtKCZzY2FuLT5pbm9kZV9idWZmZXIpOworCXNjYW4tPmlub2RlX2J1ZmZlciA9IE5VTEw7CisJZXh0MmZzX2ZyZWVfbWVtKCZzY2FuLT50ZW1wX2J1ZmZlcik7CisJc2Nhbi0+dGVtcF9idWZmZXIgPSBOVUxMOworCWV4dDJmc19mcmVlX21lbSgmc2Nhbik7CisJcmV0dXJuOworfQorCit2b2lkIGV4dDJmc19zZXRfaW5vZGVfY2FsbGJhY2soZXh0Ml9pbm9kZV9zY2FuIHNjYW4sCisJCQkgICAgICAgZXJyY29kZV90ICgqZG9uZV9ncm91cCkoZXh0Ml9maWxzeXMgZnMsCisJCQkJCQkgICAgICAgZXh0Ml9pbm9kZV9zY2FuIHNjYW4sCisJCQkJCQkgICAgICAgZGdycF90IGdyb3VwLAorCQkJCQkJICAgICAgIHZvaWQgKiBwcml2X2RhdGEpLAorCQkJICAgICAgIHZvaWQgKmRvbmVfZ3JvdXBfZGF0YSkKK3sKKwlpZiAoIXNjYW4gfHwgKHNjYW4tPm1hZ2ljICE9IEVYVDJfRVRfTUFHSUNfSU5PREVfU0NBTikpCisJCXJldHVybjsKKworCXNjYW4tPmRvbmVfZ3JvdXAgPSBkb25lX2dyb3VwOworCXNjYW4tPmRvbmVfZ3JvdXBfZGF0YSA9IGRvbmVfZ3JvdXBfZGF0YTsKK30KKworaW50IGV4dDJmc19pbm9kZV9zY2FuX2ZsYWdzKGV4dDJfaW5vZGVfc2NhbiBzY2FuLCBpbnQgc2V0X2ZsYWdzLAorCQkJICAgIGludCBjbGVhcl9mbGFncykKK3sKKwlpbnQJb2xkX2ZsYWdzOworCisJaWYgKCFzY2FuIHx8IChzY2FuLT5tYWdpYyAhPSBFWFQyX0VUX01BR0lDX0lOT0RFX1NDQU4pKQorCQlyZXR1cm4gMDsKKworCW9sZF9mbGFncyA9IHNjYW4tPnNjYW5fZmxhZ3M7CisJc2Nhbi0+c2Nhbl9mbGFncyAmPSB+Y2xlYXJfZmxhZ3M7CisJc2Nhbi0+c2Nhbl9mbGFncyB8PSBzZXRfZmxhZ3M7CisJcmV0dXJuIG9sZF9mbGFnczsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGV4dDJmc19nZXRfbmV4dF9pbm9kZSB3aGVuIGl0IG5lZWRzIHRvCisgKiBnZXQgcmVhZHkgdG8gcmVhZCBpbiBhIG5ldyBibG9ja2dyb3VwLgorICovCitzdGF0aWMgZXJyY29kZV90IGdldF9uZXh0X2Jsb2NrZ3JvdXAoZXh0Ml9pbm9kZV9zY2FuIHNjYW4pCit7CisJZXh0Ml9maWxzeXMgZnMgPSBzY2FuLT5mczsKKworCXNjYW4tPmN1cnJlbnRfZ3JvdXArKzsKKwlzY2FuLT5ncm91cHNfbGVmdC0tOworCisJc2Nhbi0+Y3VycmVudF9ibG9jayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2Moc2Nhbi0+ZnMsCisJCQkJCQkgICAgIHNjYW4tPmN1cnJlbnRfZ3JvdXApOworCXNjYW4tPmN1cnJlbnRfaW5vZGUgPSBzY2FuLT5jdXJyZW50X2dyb3VwICoKKwkJRVhUMl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zdXBlcik7CisKKwlzY2FuLT5ieXRlc19sZWZ0ID0gMDsKKwlzY2FuLT5pbm9kZXNfbGVmdCA9IEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpOworCXNjYW4tPmJsb2Nrc19sZWZ0ID0gZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisJaWYgKEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkpIHsKKwkJX191MzIgdW51c2VkID0gZXh0MmZzX2JnX2l0YWJsZV91bnVzZWQoZnMsIHNjYW4tPmN1cnJlbnRfZ3JvdXApOworCQlpZiAoc2Nhbi0+aW5vZGVzX2xlZnQgPiB1bnVzZWQpCisJCQlzY2FuLT5pbm9kZXNfbGVmdCAtPSB1bnVzZWQ7CisJCWVsc2UKKwkJCXNjYW4tPmlub2Rlc19sZWZ0ID0gMDsKKwkJc2Nhbi0+YmxvY2tzX2xlZnQgPQorCQkJKHNjYW4tPmlub2Rlc19sZWZ0ICsKKwkJCSAoZnMtPmJsb2Nrc2l6ZSAvIHNjYW4tPmlub2RlX3NpemUgLSAxKSkgKgorCQkJc2Nhbi0+aW5vZGVfc2l6ZSAvIGZzLT5ibG9ja3NpemU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfaW5vZGVfc2Nhbl9nb3RvX2Jsb2NrZ3JvdXAoZXh0Ml9pbm9kZV9zY2FuIHNjYW4sCisJCQkJCSAgICBpbnQJZ3JvdXApCit7CisJc2Nhbi0+Y3VycmVudF9ncm91cCA9IGdyb3VwIC0gMTsKKwlzY2FuLT5ncm91cHNfbGVmdCA9IHNjYW4tPmZzLT5ncm91cF9kZXNjX2NvdW50IC0gZ3JvdXA7CisJcmV0dXJuIGdldF9uZXh0X2Jsb2NrZ3JvdXAoc2Nhbik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBnZXRfbmV4dF9ibG9ja3MoKSB0byBjaGVjayBmb3IgYmFkCisgKiBibG9ja3MgaW4gdGhlIGlub2RlIHRhYmxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGJhZGJsb2Nrc19saXN0LT5saXN0IGlzIHNvcnRlZCBpbgorICogaW5jcmVhc2luZyBvcmRlci4KKyAqLworc3RhdGljIGVycmNvZGVfdCBjaGVja19mb3JfaW5vZGVfYmFkX2Jsb2NrcyhleHQyX2lub2RlX3NjYW4gc2NhbiwKKwkJCQkJICAgIGJsazY0X3QgKm51bV9ibG9ja3MpCit7CisJYmxrNjRfdAlibGsgPSBzY2FuLT5jdXJyZW50X2Jsb2NrOworCWJhZGJsb2Nrc19saXN0CWJiID0gc2Nhbi0+ZnMtPmJhZGJsb2NrczsKKworCS8qCisJICogSWYgdGhlIGlub2RlIHRhYmxlIGlzIG1pc3NpbmcsIHRoZW4gb2J2aW91c2x5IHRoZXJlIGFyZSBubworCSAqIGJhZCBibG9ja3MuICA6LSkKKwkgKi8KKwlpZiAoYmxrID09IDApCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB0aGUgY3VycmVudCBibG9jayBpcyBncmVhdGVyIHRoYW4gdGhlIGJhZCBibG9jayBsaXN0ZWQKKwkgKiBpbiB0aGUgYmFkIGJsb2NrIGxpc3QsIHRoZW4gYWR2YW5jZSB0aGUgcG9pbnRlciB1bnRpbCB0aGlzCisJICogaXMgbm8gbG9uZ2VyIHRoZSBjYXNlLiAgSWYgd2UgcnVuIG91dCBvZiBiYWQgYmxvY2tzLCB0aGVuCisJICogd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnkgbW9yZSBjaGVja2luZyEKKwkgKi8KKwl3aGlsZSAoYmxrID4gYmItPmxpc3Rbc2Nhbi0+YmFkX2Jsb2NrX3B0cl0pIHsKKwkJaWYgKCsrc2Nhbi0+YmFkX2Jsb2NrX3B0ciA+PSBiYi0+bnVtKSB7CisJCQlzY2FuLT5zY2FuX2ZsYWdzICY9IH5FWFQyX1NGX0NIS19CQURCTE9DS1M7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qCisJICogSWYgdGhlIGN1cnJlbnQgYmxvY2sgaXMgZXF1YWwgdG8gdGhlIGJhZCBibG9jayBsaXN0ZWQgaW4KKwkgKiB0aGUgYmFkIGJsb2NrIGxpc3QsIHRoZW4gaGFuZGxlIHRoYXQgb25lIGJsb2NrIHNwZWNpYWxseS4KKwkgKiAoV2UgY291bGQgdHJ5IHRvIGhhbmRsZSBydW5zIG9mIGJhZCBibG9ja3MsIGJ1dCB0aGF0CisJICogb25seSBpbmNyZWFzZXMgQ1BVIGVmZmljaWVuY3kgYnkgYSBzbWFsbCBhbW91bnQsIGF0IHRoZQorCSAqIGV4cGVuc2Ugb2YgYSBodWdlIGV4cGVuc2Ugb2YgY29kZSBjb21wbGV4aXR5LCBhbmQgZm9yIGFuCisJICogdW5jb21tb24gY2FzZSBhdCB0aGF0LikKKwkgKi8KKwlpZiAoYmxrID09IGJiLT5saXN0W3NjYW4tPmJhZF9ibG9ja19wdHJdKSB7CisJCXNjYW4tPnNjYW5fZmxhZ3MgfD0gRVhUMl9TRl9CQURfSU5PREVfQkxLOworCQkqbnVtX2Jsb2NrcyA9IDE7CisJCWlmICgrK3NjYW4tPmJhZF9ibG9ja19wdHIgPj0gYmItPm51bSkKKwkJCXNjYW4tPnNjYW5fZmxhZ3MgJj0gfkVYVDJfU0ZfQ0hLX0JBREJMT0NLUzsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIGJhZCBibG9jayBpbiB0aGUgcmFuZ2UgdGhhdCB3ZSdyZSBhYm91dCB0bworCSAqIHJlYWQgaW4sIGFkanVzdCB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0byByZWFkIHNvIHRoYXQgd2Ugd2UKKwkgKiBkb24ndCByZWFkIGluIHRoZSBiYWQgYmxvY2suICAoVGhlbiB0aGUgbmV4dCBibG9jayB0byByZWFkCisJICogd2lsbCBiZSB0aGUgYmFkIGJsb2NrLCB3aGljaCBpcyBoYW5kbGVkIGluIHRoZSBhYm92ZSBjYXNlLikKKwkgKi8KKwlpZiAoKGJsayArICpudW1fYmxvY2tzKSA+IGJiLT5saXN0W3NjYW4tPmJhZF9ibG9ja19wdHJdKQorCQkqbnVtX2Jsb2NrcyA9IChpbnQpIChiYi0+bGlzdFtzY2FuLT5iYWRfYmxvY2tfcHRyXSAtIGJsayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGV4dDJmc19nZXRfbmV4dF9pbm9kZSB3aGVuIGl0IG5lZWRzIHRvCisgKiByZWFkIGluIG1vcmUgYmxvY2tzIGZyb20gdGhlIGN1cnJlbnQgYmxvY2tncm91cCdzIGlub2RlIHRhYmxlLgorICovCitzdGF0aWMgZXJyY29kZV90IGdldF9uZXh0X2Jsb2NrcyhleHQyX2lub2RlX3NjYW4gc2NhbikKK3sKKwlibGs2NF90CQludW1fYmxvY2tzOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwkvKgorCSAqIEZpZ3VyZSBvdXQgaG93IG1hbnkgYmxvY2tzIHRvIHJlYWQ7IHdlIHJlYWQgYXQgbW9zdAorCSAqIGlub2RlX2J1ZmZlcl9ibG9ja3MsIGFuZCBwZXJoYXBzIGxlc3MgaWYgdGhlcmUgYXJlbid0IHRoYXQKKwkgKiBtYW55IGJsb2NrcyBsZWZ0IHRvIHJlYWQuCisJICovCisJbnVtX2Jsb2NrcyA9IHNjYW4tPmlub2RlX2J1ZmZlcl9ibG9ja3M7CisJaWYgKG51bV9ibG9ja3MgPiBzY2FuLT5ibG9ja3NfbGVmdCkKKwkJbnVtX2Jsb2NrcyA9IHNjYW4tPmJsb2Nrc19sZWZ0OworCisJLyoKKwkgKiBJZiB0aGUgcGFzdCBibG9jayAicmVhZCIgd2FzIGEgYmFkIGJsb2NrLCB0aGVuIG1hcmsgdGhlCisJICogbGVmdC1vdmVyIGV4dHJhIGJ5dGVzIGFzIGFsc28gYmVpbmcgYmFkLgorCSAqLworCWlmIChzY2FuLT5zY2FuX2ZsYWdzICYgRVhUMl9TRl9CQURfSU5PREVfQkxLKSB7CisJCWlmIChzY2FuLT5ieXRlc19sZWZ0KQorCQkJc2Nhbi0+c2Nhbl9mbGFncyB8PSBFWFQyX1NGX0JBRF9FWFRSQV9CWVRFUzsKKwkJc2Nhbi0+c2Nhbl9mbGFncyAmPSB+RVhUMl9TRl9CQURfSU5PREVfQkxLOworCX0KKworCS8qCisJICogRG8gaW5vZGUgYmFkIGJsb2NrIHByb2Nlc3NpbmcsIGlmIG5lY2Vzc2FyeS4KKwkgKi8KKwlpZiAoc2Nhbi0+c2Nhbl9mbGFncyAmIEVYVDJfU0ZfQ0hLX0JBREJMT0NLUykgeworCQlyZXR2YWwgPSBjaGVja19mb3JfaW5vZGVfYmFkX2Jsb2NrcyhzY2FuLCAmbnVtX2Jsb2Nrcyk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICgoc2Nhbi0+c2Nhbl9mbGFncyAmIEVYVDJfU0ZfQkFEX0lOT0RFX0JMSykgfHwKKwkgICAgKHNjYW4tPmN1cnJlbnRfYmxvY2sgPT0gMCkpIHsKKwkJbWVtc2V0KHNjYW4tPmlub2RlX2J1ZmZlciwgMCwKKwkJICAgICAgIChzaXplX3QpIG51bV9ibG9ja3MgKiBzY2FuLT5mcy0+YmxvY2tzaXplKTsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoc2Nhbi0+ZnMtPmlvLAorCQkJCQkgICAgIHNjYW4tPmN1cnJlbnRfYmxvY2ssCisJCQkJCSAgICAgKGludCkgbnVtX2Jsb2NrcywKKwkJCQkJICAgICBzY2FuLT5pbm9kZV9idWZmZXIpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIEVYVDJfRVRfTkVYVF9JTk9ERV9SRUFEOworCX0KKwlzY2FuLT5wdHIgPSBzY2FuLT5pbm9kZV9idWZmZXI7CisJc2Nhbi0+Ynl0ZXNfbGVmdCA9IG51bV9ibG9ja3MgKiBzY2FuLT5mcy0+YmxvY2tzaXplOworCisJc2Nhbi0+YmxvY2tzX2xlZnQgLT0gbnVtX2Jsb2NrczsKKwlpZiAoc2Nhbi0+Y3VycmVudF9ibG9jaykKKwkJc2Nhbi0+Y3VycmVudF9ibG9jayArPSBudW1fYmxvY2tzOworCXJldHVybiAwOworfQorCisjaWYgMAorLyoKKyAqIFJldHVybnMgMSBpZiB0aGUgZW50aXJlIGlub2RlX2J1ZmZlciBoYXMgYSBub24temVybyBzaXplIGFuZAorICogY29udGFpbnMgYWxsIHplcm9zLiAgKE5vdCBqdXN0IGRlbGV0ZWQgaW5vZGVzLCBzaW5jZSB0aGF0IG1lYW5zCisgKiB0aGF0IHBhcnQgb2YgdGhlIGlub2RlIHRhYmxlIHdhcyB1c2VkIGF0IG9uZSBwb2ludDsgd2Ugd2FudCBhbGwKKyAqIHplcm9zLCB3aGljaCBtZWFucyB0aGF0IHRoZSBpbm9kZSB0YWJsZSBpcyBwcmlzdGluZS4pCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX2VtcHR5X3NjYW4oZXh0Ml9pbm9kZV9zY2FuIHNjYW4pCit7CisJaW50CWk7CisKKwlpZiAoc2Nhbi0+Ynl0ZXNfbGVmdCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWZvciAoaT0wOyBpIDwgc2Nhbi0+Ynl0ZXNfbGVmdDsgaSsrKQorCQlpZiAoc2Nhbi0+cHRyW2ldKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworZXJyY29kZV90IGV4dDJmc19nZXRfbmV4dF9pbm9kZV9mdWxsKGV4dDJfaW5vZGVfc2NhbiBzY2FuLCBleHQyX2lub190ICppbm8sCisJCQkJICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIGludCBidWZzaXplKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJaW50CQlleHRyYV9ieXRlcyA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKHNjYW4sIEVYVDJfRVRfTUFHSUNfSU5PREVfU0NBTik7CisKKwkvKgorCSAqIERvIHdlIG5lZWQgdG8gc3RhcnQgcmVhZGluZyBhIG5ldyBibG9jayBncm91cD8KKwkgKi8KKwlpZiAoc2Nhbi0+aW5vZGVzX2xlZnQgPD0gMCkgeworCWZvcmNlX25ld19ncm91cDoKKwkJaWYgKHNjYW4tPmRvbmVfZ3JvdXApIHsKKwkJCXJldHZhbCA9IChzY2FuLT5kb25lX2dyb3VwKQorCQkJCShzY2FuLT5mcywgc2Nhbiwgc2Nhbi0+Y3VycmVudF9ncm91cCwKKwkJCQkgc2Nhbi0+ZG9uZV9ncm91cF9kYXRhKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlpZiAoc2Nhbi0+Z3JvdXBzX2xlZnQgPD0gMCkgeworCQkJKmlubyA9IDA7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR2YWwgPSBnZXRfbmV4dF9ibG9ja2dyb3VwKHNjYW4pOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisJLyoKKwkgKiBUaGVzZSBjaGVja3MgYXJlIGRvbmUgb3V0c2lkZSB0aGUgYWJvdmUgaWYgc3RhdGVtZW50IHNvCisJICogdGhleSBjYW4gYmUgZG9uZSBmb3IgYmxvY2sgZ3JvdXAgIzAuCisJICovCisJaWYgKChzY2FuLT5zY2FuX2ZsYWdzICYgRVhUMl9TRl9ET19MQVpZKSAmJgorCSAgICAoZXh0MmZzX2JnX2ZsYWdzX3Rlc3Qoc2Nhbi0+ZnMsIHNjYW4tPmN1cnJlbnRfZ3JvdXAsIEVYVDJfQkdfSU5PREVfVU5JTklUKQorCSAgICAgKSkKKwkJZ290byBmb3JjZV9uZXdfZ3JvdXA7CisJaWYgKHNjYW4tPmlub2Rlc19sZWZ0ID09IDApCisJCWdvdG8gZm9yY2VfbmV3X2dyb3VwOworCWlmIChzY2FuLT5jdXJyZW50X2Jsb2NrID09IDApIHsKKwkJaWYgKHNjYW4tPnNjYW5fZmxhZ3MgJiBFWFQyX1NGX1NLSVBfTUlTU0lOR19JVEFCTEUpIHsKKwkJCWdvdG8gZm9yY2VfbmV3X2dyb3VwOworCQl9IGVsc2UKKwkJCXJldHVybiBFWFQyX0VUX01JU1NJTkdfSU5PREVfVEFCTEU7CisJfQorCisKKwkvKgorCSAqIEhhdmUgd2UgcnVuIG91dCBvZiBzcGFjZSBpbiB0aGUgaW5vZGUgYnVmZmVyPyAgSWYgc28sIHdlCisJICogbmVlZCB0byByZWFkIGluIG1vcmUgYmxvY2tzLgorCSAqLworCWlmIChzY2FuLT5ieXRlc19sZWZ0IDwgc2Nhbi0+aW5vZGVfc2l6ZSkgeworCQltZW1jcHkoc2Nhbi0+dGVtcF9idWZmZXIsIHNjYW4tPnB0ciwgc2Nhbi0+Ynl0ZXNfbGVmdCk7CisJCWV4dHJhX2J5dGVzID0gc2Nhbi0+Ynl0ZXNfbGVmdDsKKworCQlyZXR2YWwgPSBnZXRfbmV4dF9ibG9ja3Moc2Nhbik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworI2lmIDAKKwkJLyoKKwkJICogWFhYIHRlc3QgIE5lZWQgY2hlY2sgZm9yIHVzZWQgaW5vZGUgc29tZWhvdy4KKwkJICogKE5vdGU6IHRoaXMgaXMgaGFyZC4pCisJCSAqLworCQlpZiAoaXNfZW1wdHlfc2NhbihzY2FuKSkKKwkJCWdvdG8gZm9yY2VfbmV3X2dyb3VwOworI2VuZGlmCisJfQorCisJcmV0dmFsID0gMDsKKwlpZiAoZXh0cmFfYnl0ZXMpIHsKKwkJbWVtY3B5KHNjYW4tPnRlbXBfYnVmZmVyK2V4dHJhX2J5dGVzLCBzY2FuLT5wdHIsCisJCSAgICAgICBzY2FuLT5pbm9kZV9zaXplIC0gZXh0cmFfYnl0ZXMpOworCQlzY2FuLT5wdHIgKz0gc2Nhbi0+aW5vZGVfc2l6ZSAtIGV4dHJhX2J5dGVzOworCQlzY2FuLT5ieXRlc19sZWZ0IC09IHNjYW4tPmlub2RlX3NpemUgLSBleHRyYV9ieXRlczsKKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCQltZW1zZXQoaW5vZGUsIDAsIGJ1ZnNpemUpOworCQlleHQyZnNfc3dhcF9pbm9kZV9mdWxsKHNjYW4tPmZzLAorCQkJICAgICAgIChzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqKSBpbm9kZSwKKwkJCSAgICAgICAoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgKikgc2Nhbi0+dGVtcF9idWZmZXIsCisJCQkgICAgICAgMCwgYnVmc2l6ZSk7CisjZWxzZQorCQkqaW5vZGUgPSAqKChzdHJ1Y3QgZXh0Ml9pbm9kZSAqKSBzY2FuLT50ZW1wX2J1ZmZlcik7CisjZW5kaWYKKwkJaWYgKHNjYW4tPnNjYW5fZmxhZ3MgJiBFWFQyX1NGX0JBRF9FWFRSQV9CWVRFUykKKwkJCXJldHZhbCA9IEVYVDJfRVRfQkFEX0JMT0NLX0lOX0lOT0RFX1RBQkxFOworCQlzY2FuLT5zY2FuX2ZsYWdzICY9IH5FWFQyX1NGX0JBRF9FWFRSQV9CWVRFUzsKKwl9IGVsc2UgeworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCQltZW1zZXQoaW5vZGUsIDAsIGJ1ZnNpemUpOworCQlleHQyZnNfc3dhcF9pbm9kZV9mdWxsKHNjYW4tPmZzLAorCQkJCShzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqKSBpbm9kZSwKKwkJCQkoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgKikgc2Nhbi0+cHRyLAorCQkJCTAsIGJ1ZnNpemUpOworI2Vsc2UKKwkJbWVtY3B5KGlub2RlLCBzY2FuLT5wdHIsIGJ1ZnNpemUpOworI2VuZGlmCisJCXNjYW4tPnB0ciArPSBzY2FuLT5pbm9kZV9zaXplOworCQlzY2FuLT5ieXRlc19sZWZ0IC09IHNjYW4tPmlub2RlX3NpemU7CisJCWlmIChzY2FuLT5zY2FuX2ZsYWdzICYgRVhUMl9TRl9CQURfSU5PREVfQkxLKQorCQkJcmV0dmFsID0gRVhUMl9FVF9CQURfQkxPQ0tfSU5fSU5PREVfVEFCTEU7CisJfQorCisJc2Nhbi0+aW5vZGVzX2xlZnQtLTsKKwlzY2FuLT5jdXJyZW50X2lub2RlKys7CisJKmlubyA9IHNjYW4tPmN1cnJlbnRfaW5vZGU7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGV4dDJmc19nZXRfbmV4dF9pbm9kZShleHQyX2lub2RlX3NjYW4gc2NhbiwgZXh0Ml9pbm9fdCAqaW5vLAorCQkJCXN0cnVjdCBleHQyX2lub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gZXh0MmZzX2dldF9uZXh0X2lub2RlX2Z1bGwoc2NhbiwgaW5vLCBpbm9kZSwKKwkJCQkJCXNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpOworfQorCisvKgorICogRnVuY3Rpb25zIHRvIHJlYWQgYW5kIHdyaXRlIGEgc2luZ2xlIGlub2RlLgorICovCitlcnJjb2RlX3QgZXh0MmZzX3JlYWRfaW5vZGVfZnVsbChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUsIGludCBidWZzaXplKQoreworCWJsazY0X3QJCWJsb2NrX25yOworCXVuc2lnbmVkIGxvbmcgCWdyb3VwLCBibG9jaywgb2Zmc2V0OworCWNoYXIgCQkqcHRyOworCWVycmNvZGVfdAlyZXR2YWw7CisJaW50IAkJY2xlbiwgaSwgaW5vZGVzX3Blcl9ibG9jaywgbGVuZ3RoOworCWlvX2NoYW5uZWwJaW87CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHVzZXIgaGFzIGFuIG92ZXJyaWRlIGZ1bmN0aW9uICovCisJaWYgKGZzLT5yZWFkX2lub2RlICYmCisJICAgICgoYnVmc2l6ZSA9PSBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKSB8fAorCSAgICAgKEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpID09IHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpKSkgeworCQlyZXR2YWwgPSAoZnMtPnJlYWRfaW5vZGUpKGZzLCBpbm8sIGlub2RlKTsKKwkJaWYgKHJldHZhbCAhPSBFWFQyX0VUX0NBTExCQUNLX05PVEhBTkRMRUQpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwlpZiAoKGlubyA9PSAwKSB8fCAoaW5vID4gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCkpCisJCXJldHVybiBFWFQyX0VUX0JBRF9JTk9ERV9OVU07CisJLyogQ3JlYXRlIGlub2RlIGNhY2hlIGlmIG5vdCBwcmVzZW50ICovCisJaWYgKCFmcy0+aWNhY2hlKSB7CisJCXJldHZhbCA9IGNyZWF0ZV9pY2FjaGUoZnMpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisJLyogQ2hlY2sgdG8gc2VlIGlmIGl0J3MgaW4gdGhlIGlub2RlIGNhY2hlICovCisJaWYgKGJ1ZnNpemUgPT0gc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSkgeworCQkvKiBvbmx5IG9sZCBnb29kIGlub2RlIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgY2FjaGUgKi8KKwkJZm9yIChpPTA7IGkgPCBmcy0+aWNhY2hlLT5jYWNoZV9zaXplOyBpKyspIHsKKwkJCWlmIChmcy0+aWNhY2hlLT5jYWNoZVtpXS5pbm8gPT0gaW5vKSB7CisJCQkJKmlub2RlID0gZnMtPmljYWNoZS0+Y2FjaGVbaV0uaW5vZGU7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisJaWYgKGZzLT5mbGFncyAmIEVYVDJfRkxBR19JTUFHRV9GSUxFKSB7CisJCWlub2Rlc19wZXJfYmxvY2sgPSBmcy0+YmxvY2tzaXplIC8gRVhUMl9JTk9ERV9TSVpFKGZzLT5zdXBlcik7CisJCWJsb2NrX25yID0gZnMtPmltYWdlX2hlYWRlci0+b2Zmc2V0X2lub2RlIC8gZnMtPmJsb2Nrc2l6ZTsKKwkJYmxvY2tfbnIgKz0gKGlubyAtIDEpIC8gaW5vZGVzX3Blcl9ibG9jazsKKwkJb2Zmc2V0ID0gKChpbm8gLSAxKSAlIGlub2Rlc19wZXJfYmxvY2spICoKKwkJCUVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpOworCQlpbyA9IGZzLT5pbWFnZV9pbzsKKwl9IGVsc2UgeworCQlncm91cCA9IChpbm8gLSAxKSAvIEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpOworCQlpZiAoZ3JvdXAgPiBmcy0+Z3JvdXBfZGVzY19jb3VudCkKKwkJCXJldHVybiBFWFQyX0VUX0JBRF9JTk9ERV9OVU07CisJCW9mZnNldCA9ICgoaW5vIC0gMSkgJSBFWFQyX0lOT0RFU19QRVJfR1JPVVAoZnMtPnN1cGVyKSkgKgorCQkJRVhUMl9JTk9ERV9TSVpFKGZzLT5zdXBlcik7CisJCWJsb2NrID0gb2Zmc2V0ID4+IEVYVDJfQkxPQ0tfU0laRV9CSVRTKGZzLT5zdXBlcik7CisJCWlmICghZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgKHVuc2lnbmVkKSBncm91cCkpCisJCQlyZXR1cm4gRVhUMl9FVF9NSVNTSU5HX0lOT0RFX1RBQkxFOworCQlibG9ja19uciA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGdyb3VwKSArCisJCQlibG9jazsKKwkJaW8gPSBmcy0+aW87CisJfQorCW9mZnNldCAmPSAoRVhUMl9CTE9DS19TSVpFKGZzLT5zdXBlcikgLSAxKTsKKworCWxlbmd0aCA9IEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpOworCWlmIChidWZzaXplIDwgbGVuZ3RoKQorCQlsZW5ndGggPSBidWZzaXplOworCisJcHRyID0gKGNoYXIgKikgaW5vZGU7CisJd2hpbGUgKGxlbmd0aCkgeworCQljbGVuID0gbGVuZ3RoOworCQlpZiAoKG9mZnNldCArIGxlbmd0aCkgPiBmcy0+YmxvY2tzaXplKQorCQkJY2xlbiA9IGZzLT5ibG9ja3NpemUgLSBvZmZzZXQ7CisKKwkJaWYgKGJsb2NrX25yICE9IGZzLT5pY2FjaGUtPmJ1ZmZlcl9ibGspIHsKKwkJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChpbywgYmxvY2tfbnIsIDEsCisJCQkJCQkgICAgIGZzLT5pY2FjaGUtPmJ1ZmZlcik7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCQlmcy0+aWNhY2hlLT5idWZmZXJfYmxrID0gYmxvY2tfbnI7CisJCX0KKworCQltZW1jcHkocHRyLCAoKGNoYXIgKikgZnMtPmljYWNoZS0+YnVmZmVyKSArICh1bnNpZ25lZCkgb2Zmc2V0LAorCQkgICAgICAgY2xlbik7CisKKwkJb2Zmc2V0ID0gMDsKKwkJbGVuZ3RoIC09IGNsZW47CisJCXB0ciArPSBjbGVuOworCQlibG9ja19ucisrOworCX0KKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCWV4dDJmc19zd2FwX2lub2RlX2Z1bGwoZnMsIChzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqKSBpbm9kZSwKKwkJCSAgICAgICAoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgKikgaW5vZGUsCisJCQkgICAgICAgMCwgYnVmc2l6ZSk7CisjZW5kaWYKKworCS8qIFVwZGF0ZSB0aGUgaW5vZGUgY2FjaGUgKi8KKwlmcy0+aWNhY2hlLT5jYWNoZV9sYXN0ID0gKGZzLT5pY2FjaGUtPmNhY2hlX2xhc3QgKyAxKSAlCisJCWZzLT5pY2FjaGUtPmNhY2hlX3NpemU7CisJZnMtPmljYWNoZS0+Y2FjaGVbZnMtPmljYWNoZS0+Y2FjaGVfbGFzdF0uaW5vID0gaW5vOworCWZzLT5pY2FjaGUtPmNhY2hlW2ZzLT5pY2FjaGUtPmNhY2hlX2xhc3RdLmlub2RlID0gKmlub2RlOworCisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfcmVhZF9pbm9kZShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgc3RydWN0IGV4dDJfaW5vZGUgKiBpbm9kZSkKK3sKKwlyZXR1cm4gZXh0MmZzX3JlYWRfaW5vZGVfZnVsbChmcywgaW5vLCBpbm9kZSwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfd3JpdGVfaW5vZGVfZnVsbChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLCBpbnQgYnVmc2l6ZSkKK3sKKwlibGs2NF90IGJsb2NrX25yOworCXVuc2lnbmVkIGxvbmcgZ3JvdXAsIGJsb2NrLCBvZmZzZXQ7CisJZXJyY29kZV90IHJldHZhbCA9IDA7CisJc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgdGVtcF9pbm9kZSwgKndfaW5vZGU7CisJY2hhciAqcHRyOworCWludCBjbGVuLCBpLCBsZW5ndGg7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHVzZXIgcHJvdmlkZWQgYW4gb3ZlcnJpZGUgZnVuY3Rpb24gKi8KKwlpZiAoZnMtPndyaXRlX2lub2RlKSB7CisJCXJldHZhbCA9IChmcy0+d3JpdGVfaW5vZGUpKGZzLCBpbm8sIGlub2RlKTsKKwkJaWYgKHJldHZhbCAhPSBFWFQyX0VUX0NBTExCQUNLX05PVEhBTkRMRUQpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgaW5vZGUgY2FjaGUgbmVlZHMgdG8gYmUgdXBkYXRlZCAqLworCWlmIChmcy0+aWNhY2hlKSB7CisJCWZvciAoaT0wOyBpIDwgZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZTsgaSsrKSB7CisJCQlpZiAoZnMtPmljYWNoZS0+Y2FjaGVbaV0uaW5vID09IGlubykgeworCQkJCWZzLT5pY2FjaGUtPmNhY2hlW2ldLmlub2RlID0gKmlub2RlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJcmV0dmFsID0gY3JlYXRlX2ljYWNoZShmcyk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICghKGZzLT5mbGFncyAmIEVYVDJfRkxBR19SVykpCisJCXJldHVybiBFWFQyX0VUX1JPX0ZJTFNZUzsKKworCWlmICgoaW5vID09IDApIHx8IChpbm8gPiBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KSkKKwkJcmV0dXJuIEVYVDJfRVRfQkFEX0lOT0RFX05VTTsKKworCWxlbmd0aCA9IGJ1ZnNpemU7CisJaWYgKGxlbmd0aCA8IEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpKQorCQlsZW5ndGggPSBFWFQyX0lOT0RFX1NJWkUoZnMtPnN1cGVyKTsKKworCWlmIChsZW5ndGggPiAoaW50KSBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UpKSB7CisJCXdfaW5vZGUgPSBtYWxsb2MobGVuZ3RoKTsKKwkJaWYgKCF3X2lub2RlKSB7CisJCQlyZXR2YWwgPSBFTk9NRU07CisJCQlnb3RvIGVycm91dDsKKwkJfQorCX0gZWxzZQorCQl3X2lub2RlID0gJnRlbXBfaW5vZGU7CisJbWVtc2V0KHdfaW5vZGUsIDAsIGxlbmd0aCk7CisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwlleHQyZnNfc3dhcF9pbm9kZV9mdWxsKGZzLCB3X2lub2RlLAorCQkJICAgICAgIChzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqKSBpbm9kZSwKKwkJCSAgICAgICAxLCBidWZzaXplKTsKKyNlbHNlCisJbWVtY3B5KHdfaW5vZGUsIGlub2RlLCBidWZzaXplKTsKKyNlbmRpZgorCisJZ3JvdXAgPSAoaW5vIC0gMSkgLyBFWFQyX0lOT0RFU19QRVJfR1JPVVAoZnMtPnN1cGVyKTsKKwlvZmZzZXQgPSAoKGlubyAtIDEpICUgRVhUMl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zdXBlcikpICoKKwkJRVhUMl9JTk9ERV9TSVpFKGZzLT5zdXBlcik7CisJYmxvY2sgPSBvZmZzZXQgPj4gRVhUMl9CTE9DS19TSVpFX0JJVFMoZnMtPnN1cGVyKTsKKwlpZiAoIWV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsICh1bnNpZ25lZCkgZ3JvdXApKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfTUlTU0lOR19JTk9ERV9UQUJMRTsKKwkJZ290byBlcnJvdXQ7CisJfQorCWJsb2NrX25yID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgKHVuc2lnbmVkKSBncm91cCkgKyBibG9jazsKKworCW9mZnNldCAmPSAoRVhUMl9CTE9DS19TSVpFKGZzLT5zdXBlcikgLSAxKTsKKworCWxlbmd0aCA9IEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpOworCWlmIChsZW5ndGggPiBidWZzaXplKQorCQlsZW5ndGggPSBidWZzaXplOworCisJcHRyID0gKGNoYXIgKikgd19pbm9kZTsKKworCXdoaWxlIChsZW5ndGgpIHsKKwkJY2xlbiA9IGxlbmd0aDsKKwkJaWYgKChvZmZzZXQgKyBsZW5ndGgpID4gZnMtPmJsb2Nrc2l6ZSkKKwkJCWNsZW4gPSBmcy0+YmxvY2tzaXplIC0gb2Zmc2V0OworCisJCWlmIChmcy0+aWNhY2hlLT5idWZmZXJfYmxrICE9IGJsb2NrX25yKSB7CisJCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCBibG9ja19uciwgMSwKKwkJCQkJCSAgICAgZnMtPmljYWNoZS0+YnVmZmVyKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisJCQlmcy0+aWNhY2hlLT5idWZmZXJfYmxrID0gYmxvY2tfbnI7CisJCX0KKworCisJCW1lbWNweSgoY2hhciAqKSBmcy0+aWNhY2hlLT5idWZmZXIgKyAodW5zaWduZWQpIG9mZnNldCwKKwkJICAgICAgIHB0ciwgY2xlbik7CisKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIGJsb2NrX25yLCAxLAorCQkJCQkgICAgICBmcy0+aWNhY2hlLT5idWZmZXIpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisKKwkJb2Zmc2V0ID0gMDsKKwkJcHRyICs9IGNsZW47CisJCWxlbmd0aCAtPSBjbGVuOworCQlibG9ja19ucisrOworCX0KKworCWZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfQ0hBTkdFRDsKK2Vycm91dDoKKwlpZiAod19pbm9kZSAmJiB3X2lub2RlICE9ICZ0ZW1wX2lub2RlKQorCQlmcmVlKHdfaW5vZGUpOworCXJldHVybiByZXR2YWw7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfd3JpdGVfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIGV4dDJmc193cml0ZV9pbm9kZV9mdWxsKGZzLCBpbm8sIGlub2RlLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHdyaXRpbmcgYSBuZXcgaW5vZGUuICBJdCBtYWtlcworICogc3VyZSB0aGF0IGV4dHJhIHBhcnQgb2YgbGFyZ2UgaW5vZGVzIGlzIGluaXRpYWxpemVkIHByb3Blcmx5LgorICovCitlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX25ld19pbm9kZShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQkqYnVmOworCWludCAJCQlzaXplID0gRVhUMl9JTk9ERV9TSVpFKGZzLT5zdXBlcik7CisJc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UJKmxhcmdlX2lub2RlOworCWVycmNvZGVfdAkJcmV0dmFsOworCV9fdTMyIAkJCXQgPSBmcy0+bm93ID8gZnMtPm5vdyA6IHRpbWUoTlVMTCk7CisKKwlpZiAoIWlub2RlLT5pX2N0aW1lKQorCQlpbm9kZS0+aV9jdGltZSA9IHQ7CisJaWYgKCFpbm9kZS0+aV9tdGltZSkKKwkJaW5vZGUtPmlfbXRpbWUgPSB0OworCWlmICghaW5vZGUtPmlfYXRpbWUpCisJCWlub2RlLT5pX2F0aW1lID0gdDsKKworCWlmIChzaXplID09IHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpCisJCXJldHVybiBleHQyZnNfd3JpdGVfaW5vZGVfZnVsbChmcywgaW5vLCBpbm9kZSwKKwkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpOworCisJYnVmID0gbWFsbG9jKHNpemUpOworCWlmICghYnVmKQorCQlyZXR1cm4gRU5PTUVNOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZSk7CisJKmJ1ZiA9ICppbm9kZTsKKworCWxhcmdlX2lub2RlID0gKHN0cnVjdCBleHQyX2lub2RlX2xhcmdlICopIGJ1ZjsKKwlsYXJnZV9pbm9kZS0+aV9leHRyYV9pc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSkgLQorCQlFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkU7CisJaWYgKCFsYXJnZV9pbm9kZS0+aV9jcnRpbWUpCisJCWxhcmdlX2lub2RlLT5pX2NydGltZSA9IHQ7CisKKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGVfZnVsbChmcywgaW5vLCBidWYsIHNpemUpOworCWZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK2VycmNvZGVfdCBleHQyZnNfZ2V0X2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sIGJsa190ICpibG9ja3MpCit7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJaW50CQkJaTsKKwllcnJjb2RlX3QJCXJldHZhbDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwlpZiAoaW5vID4gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCkKKwkJcmV0dXJuIEVYVDJfRVRfQkFEX0lOT0RFX05VTTsKKworCWlmIChmcy0+Z2V0X2Jsb2NrcykgeworCQlpZiAoISgqZnMtPmdldF9ibG9ja3MpKGZzLCBpbm8sIGJsb2NrcykpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIGlubywgJmlub2RlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWZvciAoaT0wOyBpIDwgRVhUMl9OX0JMT0NLUzsgaSsrKQorCQlibG9ja3NbaV0gPSBpbm9kZS5pX2Jsb2NrW2ldOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2NoZWNrX2RpcmVjdG9yeShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8pCit7CisJc3RydWN0CWV4dDJfaW5vZGUJaW5vZGU7CisJZXJyY29kZV90CQlyZXR2YWw7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJaWYgKGlubyA+IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQpCisJCXJldHVybiBFWFQyX0VUX0JBRF9JTk9ERV9OVU07CisKKwlpZiAoZnMtPmNoZWNrX2RpcmVjdG9yeSkgeworCQlyZXR2YWwgPSAoZnMtPmNoZWNrX2RpcmVjdG9yeSkoZnMsIGlubyk7CisJCWlmIChyZXR2YWwgIT0gRVhUMl9FVF9DQUxMQkFDS19OT1RIQU5ETEVEKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIGlubywgJmlub2RlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWlmICghTElOVVhfU19JU0RJUihpbm9kZS5pX21vZGUpKQorCQlyZXR1cm4gRVhUMl9FVF9OT19ESVJFQ1RPUlk7CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvaW5vZGVfaW8uYyBiL2xpYi9leHQyZnMvaW5vZGVfaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2Q5NGM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9pbm9kZV9pby5jCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogaW5vZGVfaW8uYyAtLS0gVGhpcyBpcyBhbGxvd3MgYW4gaW5vZGUgaW4gYW4gZXh0MiBmaWxlc3lzdGVtIGltYWdlCisgKiAJdG8gYmUgYWNjZXNzZWQgdmlhIHRoZSBJL08gbWFuYWdlciBpbnRlcmZhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisvKgorICogRm9yIGNoZWNraW5nIHN0cnVjdHVyZSBtYWdpYyBudW1iZXJzLi4uCisgKi8KKworI2RlZmluZSBFWFQyX0NIRUNLX01BR0lDKHN0cnVjdCwgY29kZSkgXAorCSAgaWYgKChzdHJ1Y3QpLT5tYWdpYyAhPSAoY29kZSkpIHJldHVybiAoY29kZSkKKworc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSB7CisJaW50CQkJCW1hZ2ljOworCWNoYXIJCQkJbmFtZVszMl07CisJZXh0Ml9maWxlX3QJCQlmaWxlOworCWV4dDJfZmlsc3lzCQkJZnM7CisJZXh0Ml9pbm9fdCAJCQlpbm87CisJc3RydWN0IGV4dDJfaW5vZGUJCWlub2RlOworCWludAkJCQlmbGFnczsKKwlzdHJ1Y3QgaW5vZGVfcHJpdmF0ZV9kYXRhCSpuZXh0OworfTsKKworI2RlZmluZSBDSEFOTkVMX0hBU19JTk9ERQkweDgwMDAKKworc3RhdGljIHN0cnVjdCBpbm9kZV9wcml2YXRlX2RhdGEgKnRvcF9pbnRlcm47CitzdGF0aWMgaW50IGlub191bmlxdWUgPSAwOworCitzdGF0aWMgZXJyY29kZV90IGlub2RlX29wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLCBpb19jaGFubmVsICpjaGFubmVsKTsKK3N0YXRpYyBlcnJjb2RlX3QgaW5vZGVfY2xvc2UoaW9fY2hhbm5lbCBjaGFubmVsKTsKK3N0YXRpYyBlcnJjb2RlX3QgaW5vZGVfc2V0X2Jsa3NpemUoaW9fY2hhbm5lbCBjaGFubmVsLCBpbnQgYmxrc2l6ZSk7CitzdGF0aWMgZXJyY29kZV90IGlub2RlX3JlYWRfYmxrKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBibG9jaywKKwkJCSAgICAgICBpbnQgY291bnQsIHZvaWQgKmRhdGEpOworc3RhdGljIGVycmNvZGVfdCBpbm9kZV93cml0ZV9ibGsoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJCWludCBjb3VudCwgY29uc3Qgdm9pZCAqZGF0YSk7CitzdGF0aWMgZXJyY29kZV90IGlub2RlX2ZsdXNoKGlvX2NoYW5uZWwgY2hhbm5lbCk7CitzdGF0aWMgZXJyY29kZV90IGlub2RlX3dyaXRlX2J5dGUoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQlpbnQgc2l6ZSwgY29uc3Qgdm9pZCAqZGF0YSk7CitzdGF0aWMgZXJyY29kZV90IGlub2RlX3JlYWRfYmxrNjQoaW9fY2hhbm5lbCBjaGFubmVsLAorCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywgaW50IGNvdW50LCB2b2lkICpkYXRhKTsKK3N0YXRpYyBlcnJjb2RlX3QgaW5vZGVfd3JpdGVfYmxrNjQoaW9fY2hhbm5lbCBjaGFubmVsLAorCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywgaW50IGNvdW50LCBjb25zdCB2b2lkICpkYXRhKTsKKworc3RhdGljIHN0cnVjdCBzdHJ1Y3RfaW9fbWFuYWdlciBzdHJ1Y3RfaW5vZGVfbWFuYWdlciA9IHsKKwkubWFnaWMJCT0gRVhUMl9FVF9NQUdJQ19JT19NQU5BR0VSLAorCS5uYW1lCQk9ICJJbm9kZSBJL08gTWFuYWdlciIsCisJLm9wZW4JCT0gaW5vZGVfb3BlbiwKKwkuY2xvc2UJCT0gaW5vZGVfY2xvc2UsCisJLnNldF9ibGtzaXplCT0gaW5vZGVfc2V0X2Jsa3NpemUsCisJLnJlYWRfYmxrCT0gaW5vZGVfcmVhZF9ibGssCisJLndyaXRlX2Jsawk9IGlub2RlX3dyaXRlX2JsaywKKwkuZmx1c2gJCT0gaW5vZGVfZmx1c2gsCisJLndyaXRlX2J5dGUJPSBpbm9kZV93cml0ZV9ieXRlLAorCS5yZWFkX2JsazY0CT0gaW5vZGVfcmVhZF9ibGs2NCwKKwkud3JpdGVfYmxrNjQJPSBpbm9kZV93cml0ZV9ibGs2NAorfTsKKworaW9fbWFuYWdlciBpbm9kZV9pb19tYW5hZ2VyID0gJnN0cnVjdF9pbm9kZV9tYW5hZ2VyOworCitlcnJjb2RlX3QgZXh0MmZzX2lub2RlX2lvX2ludGVybjIoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCSAgY2hhciAqKm5hbWUpCit7CisJc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSAJKmRhdGE7CisJZXJyY29kZV90CQkJcmV0dmFsOworCisJaWYgKChyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSksCisJCQkJICAgICAmZGF0YSkpKQorCQlyZXR1cm4gcmV0dmFsOworCWRhdGEtPm1hZ2ljID0gRVhUMl9FVF9NQUdJQ19JTk9ERV9JT19DSEFOTkVMOworCXNwcmludGYoZGF0YS0+bmFtZSwgIiV1OiVkIiwgaW5vLCBpbm9fdW5pcXVlKyspOworCWRhdGEtPmZpbGUgPSAwOworCWRhdGEtPmZzID0gZnM7CisJZGF0YS0+aW5vID0gaW5vOworCWRhdGEtPmZsYWdzID0gMDsKKwlpZiAoaW5vZGUpIHsKKwkJbWVtY3B5KCZkYXRhLT5pbm9kZSwgaW5vZGUsIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpOworCQlkYXRhLT5mbGFncyB8PSBDSEFOTkVMX0hBU19JTk9ERTsKKwl9CisJZGF0YS0+bmV4dCA9IHRvcF9pbnRlcm47CisJdG9wX2ludGVybiA9IGRhdGE7CisJKm5hbWUgPSBkYXRhLT5uYW1lOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2lub2RlX2lvX2ludGVybihleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJIGNoYXIgKipuYW1lKQoreworCXJldHVybiBleHQyZnNfaW5vZGVfaW9faW50ZXJuMihmcywgaW5vLCBOVUxMLCBuYW1lKTsKK30KKworCitzdGF0aWMgZXJyY29kZV90IGlub2RlX29wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLCBpb19jaGFubmVsICpjaGFubmVsKQoreworCWlvX2NoYW5uZWwJaW8gPSBOVUxMOworCXN0cnVjdCBpbm9kZV9wcml2YXRlX2RhdGEgKnByZXYsICpkYXRhID0gTlVMTDsKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJb3Blbl9mbGFnczsKKworCWlmIChuYW1lID09IDApCisJCXJldHVybiBFWFQyX0VUX0JBRF9ERVZJQ0VfTkFNRTsKKworCWZvciAoZGF0YSA9IHRvcF9pbnRlcm4sIHByZXYgPSBOVUxMOyBkYXRhOworCSAgICAgcHJldiA9IGRhdGEsIGRhdGEgPSBkYXRhLT5uZXh0KQorCQlpZiAoc3RyY21wKG5hbWUsIGRhdGEtPm5hbWUpID09IDApCisJCQlicmVhazsKKwlpZiAoIWRhdGEpCisJCXJldHVybiBFTk9FTlQ7CisJaWYgKHByZXYpCisJCXByZXYtPm5leHQgPSBkYXRhLT5uZXh0OworCWVsc2UKKwkJdG9wX2ludGVybiA9IGRhdGEtPm5leHQ7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IHN0cnVjdF9pb19jaGFubmVsKSwgJmlvKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisJbWVtc2V0KGlvLCAwLCBzaXplb2Yoc3RydWN0IHN0cnVjdF9pb19jaGFubmVsKSk7CisKKwlpby0+bWFnaWMgPSBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUw7CisJaW8tPm1hbmFnZXIgPSBpbm9kZV9pb19tYW5hZ2VyOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHN0cmxlbihuYW1lKSsxLCAmaW8tPm5hbWUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKworCXN0cmNweShpby0+bmFtZSwgbmFtZSk7CisJaW8tPnByaXZhdGVfZGF0YSA9IGRhdGE7CisJaW8tPmJsb2NrX3NpemUgPSAxMDI0OworCWlvLT5yZWFkX2Vycm9yID0gMDsKKwlpby0+d3JpdGVfZXJyb3IgPSAwOworCWlvLT5yZWZjb3VudCA9IDE7CisKKwlvcGVuX2ZsYWdzID0gKGZsYWdzICYgSU9fRkxBR19SVykgPyBFWFQyX0ZJTEVfV1JJVEUgOiAwOworCXJldHZhbCA9IGV4dDJmc19maWxlX29wZW4yKGRhdGEtPmZzLCBkYXRhLT5pbm8sCisJCQkJICAgKGRhdGEtPmZsYWdzICYgQ0hBTk5FTF9IQVNfSU5PREUpID8KKwkJCQkgICAmZGF0YS0+aW5vZGUgOiAwLCBvcGVuX2ZsYWdzLAorCQkJCSAgICZkYXRhLT5maWxlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisKKwkqY2hhbm5lbCA9IGlvOworCXJldHVybiAwOworCitjbGVhbnVwOgorCWlmIChpbyAmJiBpby0+bmFtZSkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZpby0+bmFtZSk7CisJaWYgKGRhdGEpCisJCWV4dDJmc19mcmVlX21lbSgmZGF0YSk7CisJaWYgKGlvKQorCQlleHQyZnNfZnJlZV9tZW0oJmlvKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IGlub2RlX2Nsb3NlKGlvX2NoYW5uZWwgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgaW5vZGVfcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX0lOT0RFX0lPX0NIQU5ORUwpOworCisJaWYgKC0tY2hhbm5lbC0+cmVmY291bnQgPiAwKQorCQlyZXR1cm4gMDsKKworCXJldHZhbCA9IGV4dDJmc19maWxlX2Nsb3NlKGRhdGEtPmZpbGUpOworCisJZXh0MmZzX2ZyZWVfbWVtKCZjaGFubmVsLT5wcml2YXRlX2RhdGEpOworCWlmIChjaGFubmVsLT5uYW1lKQorCQlleHQyZnNfZnJlZV9tZW0oJmNoYW5uZWwtPm5hbWUpOworCWV4dDJmc19mcmVlX21lbSgmY2hhbm5lbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCBpbm9kZV9zZXRfYmxrc2l6ZShpb19jaGFubmVsIGNoYW5uZWwsIGludCBibGtzaXplKQoreworCXN0cnVjdCBpbm9kZV9wcml2YXRlX2RhdGEgKmRhdGE7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgaW5vZGVfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfSU5PREVfSU9fQ0hBTk5FTCk7CisKKwljaGFubmVsLT5ibG9ja19zaXplID0gYmxrc2l6ZTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgZXJyY29kZV90IGlub2RlX3JlYWRfYmxrNjQoaW9fY2hhbm5lbCBjaGFubmVsLAorCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywgaW50IGNvdW50LCB2b2lkICpidWYpCit7CisJc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSAqZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX0lOT0RFX0lPX0NIQU5ORUwpOworCisJaWYgKChyZXR2YWwgPSBleHQyZnNfZmlsZV9sc2VlayhkYXRhLT5maWxlLAorCQkJCQlibG9jayAqIGNoYW5uZWwtPmJsb2NrX3NpemUsCisJCQkJCUVYVDJfU0VFS19TRVQsIDApKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCWNvdW50ID0gKGNvdW50IDwgMCkgPyAtY291bnQgOiAoY291bnQgKiBjaGFubmVsLT5ibG9ja19zaXplKTsKKworCXJldHVybiBleHQyZnNfZmlsZV9yZWFkKGRhdGEtPmZpbGUsIGJ1ZiwgY291bnQsIDApOworfQorCitzdGF0aWMgZXJyY29kZV90IGlub2RlX3JlYWRfYmxrKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBibG9jaywKKwkJCSAgICAgICBpbnQgY291bnQsIHZvaWQgKmJ1ZikKK3sKKwlyZXR1cm4gaW5vZGVfcmVhZF9ibGs2NChjaGFubmVsLCBibG9jaywgY291bnQsIGJ1Zik7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgaW5vZGVfd3JpdGVfYmxrNjQoaW9fY2hhbm5lbCBjaGFubmVsLAorCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywgaW50IGNvdW50LCBjb25zdCB2b2lkICpidWYpCit7CisJc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSAqZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX0lOT0RFX0lPX0NIQU5ORUwpOworCisJaWYgKChyZXR2YWwgPSBleHQyZnNfZmlsZV9sc2VlayhkYXRhLT5maWxlLAorCQkJCQlibG9jayAqIGNoYW5uZWwtPmJsb2NrX3NpemUsCisJCQkJCUVYVDJfU0VFS19TRVQsIDApKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCWNvdW50ID0gKGNvdW50IDwgMCkgPyAtY291bnQgOiAoY291bnQgKiBjaGFubmVsLT5ibG9ja19zaXplKTsKKworCXJldHVybiBleHQyZnNfZmlsZV93cml0ZShkYXRhLT5maWxlLCBidWYsIGNvdW50LCAwKTsKK30KKworc3RhdGljIGVycmNvZGVfdCBpbm9kZV93cml0ZV9ibGsoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJCWludCBjb3VudCwgY29uc3Qgdm9pZCAqYnVmKQoreworCXJldHVybiBpbm9kZV93cml0ZV9ibGs2NChjaGFubmVsLCBibG9jaywgY291bnQsIGJ1Zik7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgaW5vZGVfd3JpdGVfYnl0ZShpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSBpbnQgc2l6ZSwgY29uc3Qgdm9pZCAqYnVmKQoreworCXN0cnVjdCBpbm9kZV9wcml2YXRlX2RhdGEgKmRhdGE7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgaW5vZGVfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfSU5PREVfSU9fQ0hBTk5FTCk7CisKKwlpZiAoKHJldHZhbCA9IGV4dDJmc19maWxlX2xzZWVrKGRhdGEtPmZpbGUsIG9mZnNldCwKKwkJCQkJRVhUMl9TRUVLX1NFVCwgMCkpKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIGV4dDJmc19maWxlX3dyaXRlKGRhdGEtPmZpbGUsIGJ1Ziwgc2l6ZSwgMCk7Cit9CisKKy8qCisgKiBGbHVzaCBkYXRhIGJ1ZmZlcnMgdG8gZGlzay4KKyAqLworc3RhdGljIGVycmNvZGVfdCBpbm9kZV9mbHVzaChpb19jaGFubmVsIGNoYW5uZWwpCit7CisJc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSAqZGF0YTsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlkYXRhID0gKHN0cnVjdCBpbm9kZV9wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19JTk9ERV9JT19DSEFOTkVMKTsKKworCXJldHVybiBleHQyZnNfZmlsZV9mbHVzaChkYXRhLT5maWxlKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9pb19tYW5hZ2VyLmMgYi9saWIvZXh0MmZzL2lvX21hbmFnZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGU0ODU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9pb19tYW5hZ2VyLmMKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBpb19tYW5hZ2VyLmMgLS0tIHRoZSBJL08gbWFuYWdlciBhYnN0cmFjdGlvbgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworZXJyY29kZV90IGlvX2NoYW5uZWxfc2V0X29wdGlvbnMoaW9fY2hhbm5lbCBjaGFubmVsLCBjb25zdCBjaGFyICpvcHRzKQoreworCWVycmNvZGVfdCByZXR2YWwgPSAwOworCWNoYXIgKm5leHQsICpwdHIsICpvcHRpb25zLCAqYXJnOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCisJaWYgKCFvcHRzKQorCQlyZXR1cm4gMDsKKworCWlmICghY2hhbm5lbC0+bWFuYWdlci0+c2V0X29wdGlvbikKKwkJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKworCW9wdGlvbnMgPSBtYWxsb2Moc3RybGVuKG9wdHMpKzEpOworCWlmICghb3B0aW9ucykKKwkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworCXN0cmNweShvcHRpb25zLCBvcHRzKTsKKwlwdHIgPSBvcHRpb25zOworCisJd2hpbGUgKHB0ciAmJiAqcHRyKSB7CisJCW5leHQgPSBzdHJjaHIocHRyLCAnJicpOworCQlpZiAobmV4dCkKKwkJCSpuZXh0KysgPSAwOworCisJCWFyZyA9IHN0cmNocihwdHIsICc9Jyk7CisJCWlmIChhcmcpCisJCQkqYXJnKysgPSAwOworCisJCXJldHZhbCA9IChjaGFubmVsLT5tYW5hZ2VyLT5zZXRfb3B0aW9uKShjaGFubmVsLCBwdHIsIGFyZyk7CisJCWlmIChyZXR2YWwpCisJCQlicmVhazsKKwkJcHRyID0gbmV4dDsKKwl9CisJZnJlZShvcHRpb25zKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgaW9fY2hhbm5lbF93cml0ZV9ieXRlKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJaW50IGNvdW50LCBjb25zdCB2b2lkICpkYXRhKQoreworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKworCWlmIChjaGFubmVsLT5tYW5hZ2VyLT53cml0ZV9ieXRlKQorCQlyZXR1cm4gY2hhbm5lbC0+bWFuYWdlci0+d3JpdGVfYnl0ZShjaGFubmVsLCBvZmZzZXQsCisJCQkJCQkgICAgY291bnQsIGRhdGEpOworCisJcmV0dXJuIEVYVDJfRVRfVU5JTVBMRU1FTlRFRDsKK30KKworZXJyY29kZV90IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCQkgaW50IGNvdW50LCB2b2lkICpkYXRhKQoreworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKworCWlmIChjaGFubmVsLT5tYW5hZ2VyLT5yZWFkX2JsazY0KQorCQlyZXR1cm4gKGNoYW5uZWwtPm1hbmFnZXItPnJlYWRfYmxrNjQpKGNoYW5uZWwsIGJsb2NrLAorCQkJCQkJICAgICAgY291bnQsIGRhdGEpOworCisJaWYgKChibG9jayA+PiAzMikgIT0gMCkKKwkJcmV0dXJuIEVYVDJfRVRfSU9fQ0hBTk5FTF9OT19TVVBQT1JUXzY0OworCisJcmV0dXJuIChjaGFubmVsLT5tYW5hZ2VyLT5yZWFkX2JsaykoY2hhbm5lbCwgKHVuc2lnbmVkIGxvbmcpIGJsb2NrLAorCQkJCQkgICAgIGNvdW50LCBkYXRhKTsKK30KKworZXJyY29kZV90IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssCisJCQkJIGludCBjb3VudCwgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisKKwlpZiAoY2hhbm5lbC0+bWFuYWdlci0+d3JpdGVfYmxrNjQpCisJCXJldHVybiAoY2hhbm5lbC0+bWFuYWdlci0+d3JpdGVfYmxrNjQpKGNoYW5uZWwsIGJsb2NrLAorCQkJCQkJICAgICAgIGNvdW50LCBkYXRhKTsKKworCWlmICgoYmxvY2sgPj4gMzIpICE9IDApCisJCXJldHVybiBFWFQyX0VUX0lPX0NIQU5ORUxfTk9fU1VQUE9SVF82NDsKKworCXJldHVybiAoY2hhbm5lbC0+bWFuYWdlci0+d3JpdGVfYmxrKShjaGFubmVsLCAodW5zaWduZWQgbG9uZykgYmxvY2ssCisJCQkJCSAgICAgY291bnQsIGRhdGEpOworfQorCitlcnJjb2RlX3QgaW9fY2hhbm5lbF9kaXNjYXJkKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGxvbmcgY291bnQpCit7CisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCisJaWYgKGNoYW5uZWwtPm1hbmFnZXItPmRpc2NhcmQpCisJCXJldHVybiAoY2hhbm5lbC0+bWFuYWdlci0+ZGlzY2FyZCkoY2hhbm5lbCwgYmxvY2ssIGNvdW50KTsKKworCXJldHVybiBFWFQyX0VUX1VOSU1QTEVNRU5URUQ7Cit9CisKK2VycmNvZGVfdCBpb19jaGFubmVsX2FsbG9jX2J1Zihpb19jaGFubmVsIGlvLCBpbnQgY291bnQsIHZvaWQgKnB0cikKK3sKKwlzaXplX3QJc2l6ZTsKKworCWlmIChjb3VudCA9PSAwKQorCQlzaXplID0gaW8tPmJsb2NrX3NpemU7CisJZWxzZSBpZiAoY291bnQgPiAwKQorCQlzaXplID0gaW8tPmJsb2NrX3NpemUgKiBjb3VudDsKKwllbHNlCisJCXNpemUgPSAtY291bnQ7CisKKwlpZiAoaW8tPmFsaWduKQorCQlyZXR1cm4gZXh0MmZzX2dldF9tZW1hbGlnbihzaXplLCBpby0+YWxpZ24sIHB0cik7CisJZWxzZQorCQlyZXR1cm4gZXh0MmZzX2dldF9tZW0oc2l6ZSwgcHRyKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvaXJlbC5oIGIvbGliL2V4dDJmcy9pcmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhYTJkMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvaXJlbC5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogaXJlbC5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCitzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWZlcmVuY2UgeworCWJsazY0X3QJYmxvY2s7CisJX191MTYgb2Zmc2V0OworfTsKKworc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdGVfZW50cnkgeworCWV4dDJfaW5vX3QJbmV3OworCWV4dDJfaW5vX3QJb3JpZzsKKwlfX3UxNgkJZmxhZ3M7CisJX191MTYJCW1heF9yZWZzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0aW9uX3RhYmxlICpleHQyX2lyZWw7CisKK3N0cnVjdCBleHQyX2lub2RlX3JlbG9jYXRpb25fdGFibGUgeworCV9fdTMyCW1hZ2ljOworCWNoYXIJKm5hbWU7CisJZXh0Ml9pbm9fdAljdXJyZW50OworCXZvaWQJKnByaXZfZGF0YTsKKworCS8qCisJICogQWRkIGFuIGlub2RlIHJlbG9jYXRpb24gZW50cnkuCisJICovCisJZXJyY29kZV90ICgqcHV0KShleHQyX2lyZWwgaXJlbCwgZXh0Ml9pbm9fdCBvbGQsCisJCQkgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSAqZW50KTsKKwkvKgorCSAqIEdldCBhbiBpbm9kZSByZWxvY2F0aW9uIGVudHJ5LgorCSAqLworCWVycmNvZGVfdCAoKmdldCkoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3Qgb2xkLAorCQkJICAgICAgc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdGVfZW50cnkgKmVudCk7CisKKwkvKgorCSAqIEdldCBhbiBpbm9kZSByZWxvY2F0aW9uIGVudHJ5IGJ5IGl0cyBvcmlnaW5hbCBpbm9kZSBudW1iZXIKKwkgKi8KKwllcnJjb2RlX3QgKCpnZXRfYnlfb3JpZykoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3Qgb3JpZywgZXh0Ml9pbm9fdCAqb2xkLAorCQkJCSBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSAqZW50KTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBmb3IgaXRlcmF0aW5nIG92ZXIgdGhlIGlub2RlIHJlbG9jYXRpb24gZW50cmllcy4KKwkgKi8KKwllcnJjb2RlX3QgKCpzdGFydF9pdGVyKShleHQyX2lyZWwgaXJlbCk7CisKKwkvKgorCSAqIFRoZSBpdGVyYXRvciBmdW5jdGlvbiBmb3IgdGhlIGlub2RlIHJlbG9jYXRpb24gZW50cmllcy4KKwkgKiBSZXR1cm5zIGFuIGlub2RlIG51bWJlciBvZiAwIHdoZW4gb3V0IG9mIGVudHJpZXMuCisJICovCisJZXJyY29kZV90ICgqbmV4dCkoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3QgKm9sZCwKKwkJCSAgc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdGVfZW50cnkgKmVudCk7CisKKwkvKgorCSAqIEFkZCBhbiBpbm9kZSByZWZlcmVuY2UgKGkuZS4sIG5vdGUgdGhlIGZhY3QgdGhhdCBhCisJICogcGFydGljdWxhciBibG9jay9vZmZzZXQgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gYW4gaW5vZGUpCisJICovCisJZXJyY29kZV90ICgqYWRkX3JlZikoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWZlcmVuY2UgKnJlZik7CisKKwkvKgorCSAqIEluaXRpYWxpemUgZm9yIGl0ZXJhdGluZyBvdmVyIHRoZSBpbm9kZSByZWZlcmVuY2VzIGZvciBhCisJICogcGFydGljdWxhciBpbm9kZS4KKwkgKi8KKwllcnJjb2RlX3QgKCpzdGFydF9pdGVyX3JlZikoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3QgaW5vKTsKKworCS8qCisJICogVGhlIGl0ZXJhdG9yIGZ1bmN0aW9uIGZvciB0aGUgaW5vZGUgcmVmZXJlbmNlcyBmb3IgYW4KKwkgKiBpbm9kZS4gIFRoZSByZWZlcmVuY2VzIGZvciBvbmx5IG9uZSBpbm9kZSBjYW4gYmUgaW50ZXJhdG9yCisJICogb3ZlciBhdCBhIHRpbWUsIGFzIHRoZSBpdGVyYXRvciBzdGF0ZSBpcyBzdG9yZWQgaW4gZXh0Ml9pcmVsLgorCSAqLworCWVycmNvZGVfdCAoKm5leHRfcmVmKShleHQyX2lyZWwgaXJlbCwKKwkJCSAgICAgIHN0cnVjdCBleHQyX2lub2RlX3JlZmVyZW5jZSAqcmVmKTsKKworCS8qCisJICogTW92ZSB0aGUgaW5vZGUgcmVsb2NhdGlvbiB0YWJsZSBmcm9tIG9uZSBpbm9kZSBudW1iZXIgdG8KKwkgKiBhbm90aGVyLiAgTm90ZSB0aGF0IHRoZSBpbm9kZSByZWZlcmVuY2VzIGFsc28gbXVzdCBtb3ZlLgorCSAqLworCWVycmNvZGVfdCAoKm1vdmUpKGV4dDJfaXJlbCBpcmVsLCBleHQyX2lub190IG9sZCwgZXh0Ml9pbm9fdCBuZXcpOworCisJLyoKKwkgKiBSZW1vdmUgYW4gaW5vZGUgcmVsb2NhdGlvbiBlbnRyeSwgYWxvbmcgd2l0aCBhbGwgb2YgdGhlCisJICogaW5vZGUgcmVmZXJlbmNlcy4KKwkgKi8KKwllcnJjb2RlX3QgKCpkZWxldGUpKGV4dDJfaXJlbCBpcmVsLCBleHQyX2lub190IG9sZCk7CisKKwkvKgorCSAqIEZyZWUgdGhlIGlub2RlIHJlbG9jYXRpb24gdGFibGUuCisJICovCisJZXJyY29kZV90ICgqZnJlZSkoZXh0Ml9pcmVsIGlyZWwpOworfTsKKworZXJyY29kZV90IGV4dDJmc19pcmVsX21lbWFycmF5X2NyZWF0ZShjaGFyICpuYW1lLCBleHQyX2lub190IG1heF9pbm9kZSwKKwkJCQkgICAgZXh0Ml9pcmVsICppcmVsKTsKKworI2RlZmluZSBleHQyZnNfaXJlbF9wdXQoaXJlbCwgb2xkLCBlbnQpICgoaXJlbCktPnB1dCgoaXJlbCksIG9sZCwgZW50KSkKKyNkZWZpbmUgZXh0MmZzX2lyZWxfZ2V0KGlyZWwsIG9sZCwgZW50KSAoKGlyZWwpLT5nZXQoKGlyZWwpLCBvbGQsIGVudCkpCisjZGVmaW5lIGV4dDJmc19pcmVsX2dldF9ieV9vcmlnKGlyZWwsIG9yaWcsIG9sZCwgZW50KSBcCisJCQkoKGlyZWwpLT5nZXRfYnlfb3JpZygoaXJlbCksIG9yaWcsIG9sZCwgZW50KSkKKyNkZWZpbmUgZXh0MmZzX2lyZWxfc3RhcnRfaXRlcihpcmVsKSAoKGlyZWwpLT5zdGFydF9pdGVyKChpcmVsKSkpCisjZGVmaW5lIGV4dDJmc19pcmVsX25leHQoaXJlbCwgb2xkLCBlbnQpICgoaXJlbCktPm5leHQoKGlyZWwpLCBvbGQsIGVudCkpCisjZGVmaW5lIGV4dDJmc19pcmVsX2FkZF9yZWYoaXJlbCwgaW5vLCByZWYpICgoaXJlbCktPmFkZF9yZWYoKGlyZWwpLCBpbm8sIHJlZikpCisjZGVmaW5lIGV4dDJmc19pcmVsX3N0YXJ0X2l0ZXJfcmVmKGlyZWwsIGlubykgKChpcmVsKS0+c3RhcnRfaXRlcl9yZWYoKGlyZWwpLCBpbm8pKQorI2RlZmluZSBleHQyZnNfaXJlbF9uZXh0X3JlZihpcmVsLCByZWYpICgoaXJlbCktPm5leHRfcmVmKChpcmVsKSwgcmVmKSkKKyNkZWZpbmUgZXh0MmZzX2lyZWxfbW92ZShpcmVsLCBvbGQsIG5ldykgKChpcmVsKS0+bW92ZSgoaXJlbCksIG9sZCwgbmV3KSkKKyNkZWZpbmUgZXh0MmZzX2lyZWxfZGVsZXRlKGlyZWwsIG9sZCkgKChpcmVsKS0+ZGVsZXRlKChpcmVsKSwgb2xkKSkKKyNkZWZpbmUgZXh0MmZzX2lyZWxfZnJlZShpcmVsKSAoKGlyZWwpLT5mcmVlKChpcmVsKSkpCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2lyZWxfbWEuYyBiL2xpYi9leHQyZnMvaXJlbF9tYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NGI3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2lyZWxfbWEuYwpAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAqIGlyZWxfbWEuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGZjbnRsLmg+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+bmFtZSkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZpcmVsLT5uYW1lKTsKKwlleHQyZnNfZnJlZV9tZW0oJmlyZWwpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9pc21vdW50ZWQuYyBiL2xpYi9leHQyZnMvaXNtb3VudGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2ZWNmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvaXNtb3VudGVkLmMKQEAgLTAsMCArMSw0MzggQEAKKy8qCisgKiBpc21vdW50ZWQuYyAtLS0gQ2hlY2sgdG8gc2VlIGlmIHRoZSBmaWxlc3lzdGVtIHdhcyBtb3VudGVkCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LDE5OTYsMTk5NywxOTk4LDE5OTksMjAwMCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaWZkZWYgSEFWRV9MSU5VWF9GRF9ICisjaW5jbHVkZSA8bGludXgvZmQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTElOVVhfTE9PUF9ICisjaW5jbHVkZSA8bGludXgvbG9vcC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2lmZGVmIEhBVkVfTElOVVhfTUFKT1JfSAorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjZW5kaWYgLyogSEFWRV9MSU5VWF9NQUpPUl9IICovCisjZW5kaWYgLyogSEFWRV9MSU5VWF9MT09QX0ggKi8KKyNpZmRlZiBIQVZFX01OVEVOVF9ICisjaW5jbHVkZSA8bW50ZW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0dFVE1OVElORk8KKyNpbmNsdWRlIDxwYXRocy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2VuZGlmIC8qIEhBVkVfR0VUTU5USU5GTyAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgYSByZWd1bGFyIGZpbGUgaXMgbW91bnRlZC4KKyAqIElmIC9ldGMvbXRhYi8gaXMgYSBzeW1saW5rIG9mIC9wcm9jL21vdW50cywgeW91IHdpbGwgbmVlZCB0aGUgZm9sbG93aW5nIGNoZWNrCisgKiBiZWNhdXNlIHRoZSBuYW1lIGluIC9wcm9jL21vdW50cyBpcyBhIGxvb3BiYWNrIGRldmljZSBub3QgYSByZWd1bGFyIGZpbGUuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfbG9vcF9tb3VudGVkKGNvbnN0IGNoYXIgKm1udF9mc25hbWUsIGRldl90IG1udF9yZGV2LAorCQkJCWRldl90IGZpbGVfZGV2LCBpbm9fdCBmaWxlX2lubykKK3sKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTE9PUF9IKSAmJiBkZWZpbmVkKEhBVkVfTElOVVhfTUFKT1JfSCkKKwlzdHJ1Y3QgbG9vcF9pbmZvNjQgbG9vcGluZm87CisJaW50IGxvb3BfZmQsIHJldDsKKworCWlmIChtYWpvcihtbnRfcmRldikgPT0gTE9PUF9NQUpPUikgeworCQlsb29wX2ZkID0gb3BlbihtbnRfZnNuYW1lLCBPX1JET05MWSk7CisJCWlmIChsb29wX2ZkIDwgMCkKKwkJCXJldHVybiAtMTsKKworCQlyZXQgPSBpb2N0bChsb29wX2ZkLCBMT09QX0dFVF9TVEFUVVM2NCwgJmxvb3BpbmZvKTsKKwkJY2xvc2UobG9vcF9mZCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCWlmIChmaWxlX2RldiA9PSBsb29waW5mby5sb19kZXZpY2UgJiYKKwkJCQlmaWxlX2lubyA9PSBsb29waW5mby5sb19pbm9kZSkKKwkJCXJldHVybiAxOworCX0KKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTElOVVhfTE9PUF9IKSAmJiBkZWZpbmVkKEhBVkVfTElOVVhfTUFKT1JfSCkgKi8KKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIEhBVkVfU0VUTU5URU5UCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBhIGZpbGUgaW4gL2V0Yy9tdGFiIGZvcm1hdCB0byBzZWUgaWYgYQorICogZmlsZXN5c3RlbSBpcyBtb3VudGVkLiAgUmV0dXJucyBhbiBlcnJvciBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0CisgKiBvciBjYW4ndCBiZSBvcGVuZWQuCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgY2hlY2tfbW50ZW50X2ZpbGUoY29uc3QgY2hhciAqbXRhYl9maWxlLCBjb25zdCBjaGFyICpmaWxlLAorCQkJCSAgIGludCAqbW91bnRfZmxhZ3MsIGNoYXIgKm10cHQsIGludCBtdGxlbikKK3sKKwlzdHJ1Y3QgbW50ZW50IAkqbW50OworCXN0cnVjdCBzdGF0CXN0X2J1ZjsKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKwlkZXZfdAkJZmlsZV9kZXY9MCwgZmlsZV9yZGV2PTA7CisJaW5vX3QJCWZpbGVfaW5vPTA7CisJRklMRSAJCSpmOworCWludAkJZmQ7CisKKwkqbW91bnRfZmxhZ3MgPSAwOworCWlmICgoZiA9IHNldG1udGVudCAobXRhYl9maWxlLCAiciIpKSA9PSBOVUxMKSB7CisJCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKKwkJCWlmIChnZXRlbnYoIkVYVDJGU19OT19NVEFCX09LIikpCisJCQkJcmV0dXJuIDA7CisJCQllbHNlCisJCQkJcmV0dXJuIEVYVDJfRVRfTk9fTVRBQl9GSUxFOworCQl9CisJCXJldHVybiBlcnJubzsKKwl9CisJaWYgKHN0YXQoZmlsZSwgJnN0X2J1ZikgPT0gMCkgeworCQlpZiAoU19JU0JMSyhzdF9idWYuc3RfbW9kZSkpIHsKKyNpZm5kZWYgX19HTlVfXyAvKiBUaGUgR05VIGh1cmQgaXMgYnJva2VuIHdpdGggcmVzcGVjdCB0byBzdGF0IGRldmljZXMgKi8KKwkJCWZpbGVfcmRldiA9IHN0X2J1Zi5zdF9yZGV2OworI2VuZGlmCS8qIF9fR05VX18gKi8KKwkJfSBlbHNlIHsKKwkJCWZpbGVfZGV2ID0gc3RfYnVmLnN0X2RldjsKKwkJCWZpbGVfaW5vID0gc3RfYnVmLnN0X2lubzsKKwkJfQorCX0KKwl3aGlsZSAoKG1udCA9IGdldG1udGVudCAoZikpICE9IE5VTEwpIHsKKwkJaWYgKG1udC0+bW50X2ZzbmFtZVswXSAhPSAnLycpCisJCQljb250aW51ZTsKKwkJaWYgKHN0cmNtcChmaWxlLCBtbnQtPm1udF9mc25hbWUpID09IDApCisJCQlicmVhazsKKwkJaWYgKHN0YXQobW50LT5tbnRfZnNuYW1lLCAmc3RfYnVmKSA9PSAwKSB7CisJCQlpZiAoU19JU0JMSyhzdF9idWYuc3RfbW9kZSkpIHsKKyNpZm5kZWYgX19HTlVfXworCQkJCWlmIChmaWxlX3JkZXYgJiYgKGZpbGVfcmRldiA9PSBzdF9idWYuc3RfcmRldikpCisJCQkJCWJyZWFrOworCQkJCWlmIChjaGVja19sb29wX21vdW50ZWQobW50LT5tbnRfZnNuYW1lLAorCQkJCQkJc3RfYnVmLnN0X3JkZXYsIGZpbGVfZGV2LAorCQkJCQkJZmlsZV9pbm8pID09IDEpCisJCQkJCWJyZWFrOworI2VuZGlmCS8qIF9fR05VX18gKi8KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGZpbGVfZGV2ICYmICgoZmlsZV9kZXYgPT0gc3RfYnVmLnN0X2RldikgJiYKKwkJCQkJCSAoZmlsZV9pbm8gPT0gc3RfYnVmLnN0X2lubykpKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmIChtbnQgPT0gMCkgeworI2lmbmRlZiBfX0dOVV9fIC8qIFRoZSBHTlUgaHVyZCBpcyBicm9rZW4gd2l0aCByZXNwZWN0IHRvIHN0YXQgZGV2aWNlcyAqLworCQkvKgorCQkgKiBEbyBhbiBleHRyYSBjaGVjayB0byBzZWUgaWYgdGhpcyBpcyB0aGUgcm9vdCBkZXZpY2UuICBXZQorCQkgKiBjYW4ndCB0cnVzdCAvZXRjL210YWIsIGFuZCAvcHJvYy9tb3VudHMgd2lsbCBvbmx5IGxpc3QKKwkJICogL2Rldi9yb290IGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtLiAgQXJnaC4gIEluc3RlYWQgd2UKKwkJICogY2hlY2sgaWYgdGhlIGdpdmVuIGRldmljZSBoYXMgdGhlIHNhbWUgbWFqb3IvbWlub3IgbnVtYmVyCisJCSAqIGFzIHRoZSBkZXZpY2UgdGhhdCB0aGUgcm9vdCBkaXJlY3RvcnkgaXMgb24uCisJCSAqLworCQlpZiAoZmlsZV9yZGV2ICYmIHN0YXQoIi8iLCAmc3RfYnVmKSA9PSAwKSB7CisJCQlpZiAoc3RfYnVmLnN0X2RldiA9PSBmaWxlX3JkZXYpIHsKKwkJCQkqbW91bnRfZmxhZ3MgPSBFWFQyX01GX01PVU5URUQ7CisJCQkJaWYgKG10cHQpCisJCQkJCXN0cm5jcHkobXRwdCwgIi8iLCBtdGxlbik7CisJCQkJZ290byBpc19yb290OworCQkJfQorCQl9CisjZW5kaWYJLyogX19HTlVfXyAqLworCQlnb3RvIGVycm91dDsKKwl9CisjaWZuZGVmIF9fR05VX18gLyogVGhlIEdOVSBodXJkIGlzIGRlZmljaWVudDsgd2hhdCBlbHNlIGlzIG5ldz8gKi8KKwkvKiBWYWxpZGF0ZSB0aGUgZW50cnkgaW4gY2FzZSAvZXRjL210YWIgaXMgb3V0IG9mIGRhdGUgKi8KKwkvKgorCSAqIFdlIG5lZWQgdG8gYmUgcGFyYW5vaWQsIGJlY2F1c2Ugc29tZSBicm9rZW4gZGlzdHJpYnV0aW9ucworCSAqIChyZWFkOiBTbGFja3dhcmUpIGRvbid0IGluaXRpYWxpemUgL2V0Yy9tdGFiIGJlZm9yZSBjaGVja2luZworCSAqIGFsbCBvZiB0aGUgbm9uLXJvb3QgZmlsZXN5c3RlbXMgb24gdGhlIGRpc2suCisJICovCisJaWYgKHN0YXQobW50LT5tbnRfZGlyLCAmc3RfYnVmKSA8IDApIHsKKwkJcmV0dmFsID0gZXJybm87CisJCWlmIChyZXR2YWwgPT0gRU5PRU5UKSB7CisjaWZkZWYgREVCVUcKKwkJCXByaW50ZigiQm9ndXMgZW50cnkgaW4gJXMhICAoJXMgZG9lcyBub3QgZXhpc3QpXG4iLAorCQkJICAgICAgIG10YWJfZmlsZSwgbW50LT5tbnRfZGlyKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlnb3RvIGVycm91dDsKKwl9CisJaWYgKGZpbGVfcmRldiAmJiAoc3RfYnVmLnN0X2RldiAhPSBmaWxlX3JkZXYpKSB7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCJCb2d1cyBlbnRyeSBpbiAlcyEgICglcyBub3QgbW91bnRlZCBvbiAlcylcbiIsCisJCSAgICAgICBtdGFiX2ZpbGUsIGZpbGUsIG1udC0+bW50X2Rpcik7CisjZW5kaWYgLyogREVCVUcgKi8KKwkJZ290byBlcnJvdXQ7CisJfQorI2VuZGlmIC8qIF9fR05VX18gKi8KKwkqbW91bnRfZmxhZ3MgPSBFWFQyX01GX01PVU5URUQ7CisKKyNpZmRlZiBNTlRPUFRfUk8KKwkvKiBDaGVjayB0byBzZWUgaWYgdGhlIHJvIG9wdGlvbiBpcyBzZXQgKi8KKwlpZiAoaGFzbW50b3B0KG1udCwgTU5UT1BUX1JPKSkKKwkJKm1vdW50X2ZsYWdzIHw9IEVYVDJfTUZfUkVBRE9OTFk7CisjZW5kaWYKKworCWlmIChtdHB0KQorCQlzdHJuY3B5KG10cHQsIG1udC0+bW50X2RpciwgbXRsZW4pOworCS8qCisJICogQ2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHJlZmVycmluZyB0byB0aGUgcm9vdCBmaWxlc3lzdGVtLgorCSAqIElmIHNvLCBkbyBhIG1hbnVhbCBjaGVjayB0byBzZWUgaWYgd2UgY2FuIG9wZW4gL2V0Yy9tdGFiCisJICogcmVhZC93cml0ZSwgc2luY2UgaWYgdGhlIHJvb3QgaXMgbW91bnRlZCByZWFkL29ubHksIHRoZQorCSAqIGNvbnRlbnRzIG9mIC9ldGMvbXRhYiBtYXkgbm90IGJlIGFjY3VyYXRlLgorCSAqLworCWlmICghc3RyY21wKG1udC0+bW50X2RpciwgIi8iKSkgeworaXNfcm9vdDoKKyNkZWZpbmUgVEVTVF9GSUxFICIvLmlzbW91bnQtdGVzdC1maWxlIgorCQkqbW91bnRfZmxhZ3MgfD0gRVhUMl9NRl9JU1JPT1Q7CisJCWZkID0gb3BlbihURVNUX0ZJTEUsIE9fUkRXUnxPX0NSRUFULCAwNjAwKTsKKwkJaWYgKGZkIDwgMCkgeworCQkJaWYgKGVycm5vID09IEVST0ZTKQorCQkJCSptb3VudF9mbGFncyB8PSBFWFQyX01GX1JFQURPTkxZOworCQl9IGVsc2UKKwkJCWNsb3NlKGZkKTsKKwkJKHZvaWQpIHVubGluayhURVNUX0ZJTEUpOworCX0KKwlyZXR2YWwgPSAwOworZXJyb3V0OgorCWVuZG1udGVudCAoZik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCBjaGVja19tbnRlbnQoY29uc3QgY2hhciAqZmlsZSwgaW50ICptb3VudF9mbGFncywKKwkJCSAgICAgIGNoYXIgKm10cHQsIGludCBtdGxlbikKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCisjaWZkZWYgREVCVUcKKwlyZXR2YWwgPSBjaGVja19tbnRlbnRfZmlsZSgiL3RtcC9tdGFiIiwgZmlsZSwgbW91bnRfZmxhZ3MsCisJCQkJICAgbXRwdCwgbXRsZW4pOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuIDA7CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBfX2xpbnV4X18KKwlyZXR2YWwgPSBjaGVja19tbnRlbnRfZmlsZSgiL3Byb2MvbW91bnRzIiwgZmlsZSwgbW91bnRfZmxhZ3MsCisJCQkJICAgbXRwdCwgbXRsZW4pOworCWlmIChyZXR2YWwgPT0gMCAmJiAoKm1vdW50X2ZsYWdzICE9IDApKQorCQlyZXR1cm4gMDsKKyNlbmRpZiAvKiBfX2xpbnV4X18gKi8KKyNpZiBkZWZpbmVkKE1PVU5URUQpIHx8IGRlZmluZWQoX1BBVEhfTU9VTlRFRCkKKyNpZm5kZWYgTU9VTlRFRAorI2RlZmluZSBNT1VOVEVEIF9QQVRIX01PVU5URUQKKyNlbmRpZiAvKiBNT1VOVEVEICovCisJcmV0dmFsID0gY2hlY2tfbW50ZW50X2ZpbGUoTU9VTlRFRCwgZmlsZSwgbW91bnRfZmxhZ3MsIG10cHQsIG10bGVuKTsKKwlyZXR1cm4gcmV0dmFsOworI2Vsc2UKKwkqbW91bnRfZmxhZ3MgPSAwOworCXJldHVybiAwOworI2VuZGlmIC8qIGRlZmluZWQoTU9VTlRFRCkgfHwgZGVmaW5lZChfUEFUSF9NT1VOVEVEKSAqLworfQorCisjZWxzZQorI2lmIGRlZmluZWQoSEFWRV9HRVRNTlRJTkZPKQorCitzdGF0aWMgZXJyY29kZV90IGNoZWNrX2dldG1udGluZm8oY29uc3QgY2hhciAqZmlsZSwgaW50ICptb3VudF9mbGFncywKKwkJCQkgIGNoYXIgKm10cHQsIGludCBtdGxlbikKK3sKKwlzdHJ1Y3Qgc3RhdGZzICptcDsKKyAgICAgICAgaW50ICAgIGxlbiwgbjsKKyAgICAgICAgY29uc3QgIGNoYXIgICAqczE7CisJY2hhcgkqczI7CisKKyAgICAgICAgbiA9IGdldG1udGluZm8oJm1wLCBNTlRfTk9XQUlUKTsKKyAgICAgICAgaWYgKG4gPT0gMCkKKwkJcmV0dXJuIGVycm5vOworCisgICAgICAgIGxlbiA9IHNpemVvZihfUEFUSF9ERVYpIC0gMTsKKyAgICAgICAgczEgPSBmaWxlOworICAgICAgICBpZiAoc3RybmNtcChfUEFUSF9ERVYsIHMxLCBsZW4pID09IDApCisgICAgICAgICAgICAgICAgczEgKz0gbGVuOworCisJKm1vdW50X2ZsYWdzID0gMDsKKyAgICAgICAgd2hpbGUgKC0tbiA+PSAwKSB7CisgICAgICAgICAgICAgICAgczIgPSBtcC0+Zl9tbnRmcm9tbmFtZTsKKyAgICAgICAgICAgICAgICBpZiAoc3RybmNtcChfUEFUSF9ERVYsIHMyLCBsZW4pID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMyICs9IGxlbiAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAqczIgPSAncic7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoczEsIHMyKSA9PSAwIHx8IHN0cmNtcChzMSwgJnMyWzFdKSA9PSAwKSB7CisJCQkqbW91bnRfZmxhZ3MgPSBFWFQyX01GX01PVU5URUQ7CisJCQlicmVhazsKKwkJfQorICAgICAgICAgICAgICAgICsrbXA7CisJfQorCWlmIChtdHB0KQorCQlzdHJuY3B5KG10cHQsIG1wLT5mX21udG9ubmFtZSwgbXRsZW4pOworCXJldHVybiAwOworfQorI2VuZGlmIC8qIEhBVkVfR0VUTU5USU5GTyAqLworI2VuZGlmIC8qIEhBVkVfU0VUTU5URU5UICovCisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBzd2FwIGRldmljZS4KKyAqLworc3RhdGljIGludCBpc19zd2FwX2RldmljZShjb25zdCBjaGFyICpmaWxlKQoreworCUZJTEUJCSpmOworCWNoYXIJCWJ1ZlsxMDI0XSwgKmNwOworCWRldl90CQlmaWxlX2RldjsKKwlzdHJ1Y3Qgc3RhdAlzdF9idWY7CisJaW50CQlyZXQgPSAwOworCisJZmlsZV9kZXYgPSAwOworI2lmbmRlZiBfX0dOVV9fIC8qIFRoZSBHTlUgaHVyZCBpcyBicm9rZW4gd2l0aCByZXNwZWN0IHRvIHN0YXQgZGV2aWNlcyAqLworCWlmICgoc3RhdChmaWxlLCAmc3RfYnVmKSA9PSAwKSAmJgorCSAgICBTX0lTQkxLKHN0X2J1Zi5zdF9tb2RlKSkKKwkJZmlsZV9kZXYgPSBzdF9idWYuc3RfcmRldjsKKyNlbmRpZgkvKiBfX0dOVV9fICovCisKKwlpZiAoIShmID0gZm9wZW4oIi9wcm9jL3N3YXBzIiwgInIiKSkpCisJCXJldHVybiAwOworCS8qIFNraXAgdGhlIGZpcnN0IGxpbmUgKi8KKwlpZiAoIWZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKQorCQlnb3RvIGxlYXZlOworCWlmICgqYnVmICYmIHN0cm5jbXAoYnVmLCAiRmlsZW5hbWVcdCIsIDkpKQorCQkvKiBMaW51eCA8PTIuNi4xOSBjb250YWluZWQgYSBidWcgaW4gdGhlIC9wcm9jL3N3YXBzCisJCSAqIGNvZGUgd2hlcmUgdGhlIGhlYWRlciB3b3VsZCBub3QgYmUgZGlzcGxheWVkCisJCSAqLworCQlnb3RvIHZhbGlkX2ZpcnN0X2xpbmU7CisKKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZikpIHsKK3ZhbGlkX2ZpcnN0X2xpbmU6CisJCWlmICgoY3AgPSBzdHJjaHIoYnVmLCAnICcpKSAhPSBOVUxMKQorCQkJKmNwID0gMDsKKwkJaWYgKChjcCA9IHN0cmNocihidWYsICdcdCcpKSAhPSBOVUxMKQorCQkJKmNwID0gMDsKKwkJaWYgKHN0cmNtcChidWYsIGZpbGUpID09IDApIHsKKwkJCXJldCsrOworCQkJYnJlYWs7CisJCX0KKyNpZm5kZWYgX19HTlVfXworCQlpZiAoZmlsZV9kZXYgJiYgKHN0YXQoYnVmLCAmc3RfYnVmKSA9PSAwKSAmJgorCQkgICAgU19JU0JMSyhzdF9idWYuc3RfbW9kZSkgJiYKKwkJICAgIGZpbGVfZGV2ID09IHN0X2J1Zi5zdF9yZGV2KSB7CisJCQlyZXQrKzsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYgCS8qIF9fR05VX18gKi8KKwl9CisKK2xlYXZlOgorCWZjbG9zZShmKTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiBleHQyZnNfY2hlY2tfbW91bnRfcG9pbnQoKSBmaWxscyBkZXRlcm1pbmVzIGlmIHRoZSBkZXZpY2UgaXMKKyAqIG1vdW50ZWQgb3Igb3RoZXJ3aXNlIGJ1c3ksIGFuZCBmaWxscyBpbiBtb3VudF9mbGFncyB3aXRoIG9uZSBvcgorICogbW9yZSBvZiB0aGUgZm9sbG93aW5nIGZsYWdzOiBFWFQyX01GX01PVU5URUQsIEVYVDJfTUZfSVNST09ULAorICogRVhUMl9NRl9SRUFET05MWSwgRVhUMl9NRl9TV0FQLCBhbmQgRVhUMl9NRl9CVVNZLiAgSWYgbXRwdCBpcworICogbm9uLU5VTEwsIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGRldmljZSBpcyBtb3VudGVkIGlzIGNvcGllZCB0bworICogd2hlcmUgbXRwdCBpcyBwb2ludGluZywgdXAgdG8gbXRsZW4gY2hhcmFjdGVycy4KKyAqLworI2lmZGVmIF9fVFVSQk9DX18KKyAjcHJhZ21hIGFyZ3N1c2VkCisjZW5kaWYKK2VycmNvZGVfdCBleHQyZnNfY2hlY2tfbW91bnRfcG9pbnQoY29uc3QgY2hhciAqZGV2aWNlLCBpbnQgKm1vdW50X2ZsYWdzLAorCQkJCSAgY2hhciAqbXRwdCwgaW50IG10bGVuKQoreworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCisJaWYgKGlzX3N3YXBfZGV2aWNlKGRldmljZSkpIHsKKwkJKm1vdW50X2ZsYWdzID0gRVhUMl9NRl9NT1VOVEVEIHwgRVhUMl9NRl9TV0FQOworCQlzdHJuY3B5KG10cHQsICI8c3dhcD4iLCBtdGxlbik7CisJfSBlbHNlIHsKKyNpZmRlZiBIQVZFX1NFVE1OVEVOVAorCQlyZXR2YWwgPSBjaGVja19tbnRlbnQoZGV2aWNlLCBtb3VudF9mbGFncywgbXRwdCwgbXRsZW4pOworI2Vsc2UKKyNpZmRlZiBIQVZFX0dFVE1OVElORk8KKwkJcmV0dmFsID0gY2hlY2tfZ2V0bW50aW5mbyhkZXZpY2UsIG1vdW50X2ZsYWdzLCBtdHB0LCBtdGxlbik7CisjZWxzZQorI2lmZGVmIF9fR05VQ19fCisgI3dhcm5pbmcgIkNhbid0IHVzZSBnZXRtbnRlbnQgb3IgZ2V0bW50aW5mbyB0byBjaGVjayBmb3IgbW91bnRlZCBmaWxlc3lzdGVtcyEiCisjZW5kaWYKKwkJKm1vdW50X2ZsYWdzID0gMDsKKyNlbmRpZiAvKiBIQVZFX0dFVE1OVElORk8gKi8KKyNlbmRpZiAvKiBIQVZFX1NFVE1OVEVOVCAqLworCX0KKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisjaWZkZWYgX19saW51eF9fIC8qIFRoaXMgb25seSB3b3JrcyBvbiBMaW51eCAyLjYrIHN5c3RlbXMgKi8KKwl7CisJCXN0cnVjdCBzdGF0IHN0X2J1ZjsKKworCQlpZiAoc3RhdChkZXZpY2UsICZzdF9idWYpID09IDAgJiYgU19JU0JMSyhzdF9idWYuc3RfbW9kZSkpIHsKKwkJCWludCBmZCA9IG9wZW4oZGV2aWNlLCBPX1JET05MWSB8IE9fRVhDTCk7CisKKwkJCWlmIChmZCA+PSAwKQorCQkJCWNsb3NlKGZkKTsKKwkJCWVsc2UgaWYgKGVycm5vID09IEVCVVNZKQorCQkJCSptb3VudF9mbGFncyB8PSBFWFQyX01GX0JVU1k7CisJCX0KKwl9CisjZW5kaWYKKworCXJldHVybiAwOworfQorCisvKgorICogZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQoKSBzZXRzIHRoZSBtb3VudF9mbGFncyBFWFQyX01GX01PVU5URUQsCisgKiBFWFQyX01GX1JFQURPTkxZLCBhbmQgRVhUMl9NRl9ST09UCisgKgorICovCitlcnJjb2RlX3QgZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQoY29uc3QgY2hhciAqZmlsZSwgaW50ICptb3VudF9mbGFncykKK3sKKwlyZXR1cm4gZXh0MmZzX2NoZWNrX21vdW50X3BvaW50KGZpbGUsIG1vdW50X2ZsYWdzLCBOVUxMLCAwKTsKK30KKworI2lmZGVmIERFQlVHCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CXJldHZhbCwgbW91bnRfZmxhZ3M7CisJY2hhcgltbnRwdFs4MF07CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZGV2aWNlXG4iLCBhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlhZGRfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworCW1udHB0WzBdID0gMDsKKwlyZXR2YWwgPSBleHQyZnNfY2hlY2tfbW91bnRfcG9pbnQoYXJndlsxXSwgJm1vdW50X2ZsYWdzLAorCQkJCQkgIG1udHB0LCBzaXplb2YobW50cHQpKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLAorCQkJIndoaWxlIGNhbGxpbmcgZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQiKTsKKwkJZXhpdCgxKTsKKwl9CisJcHJpbnRmKCJEZXZpY2UgJXMgcmVwb3J0cyBmbGFncyAlMDJ4XG4iLCBhcmd2WzFdLCBtb3VudF9mbGFncyk7CisJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9CVVNZKQorCQlwcmludGYoIlx0JXMgaXMgYXBwYXJlbnRseSBpbiB1c2UuXG4iLCBhcmd2WzFdKTsKKwlpZiAobW91bnRfZmxhZ3MgJiBFWFQyX01GX01PVU5URUQpCisJCXByaW50ZigiXHQlcyBpcyBtb3VudGVkLlxuIiwgYXJndlsxXSk7CisJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9TV0FQKQorCQlwcmludGYoIlx0JXMgaXMgYSBzd2FwIGRldmljZS5cbiIsIGFyZ3ZbMV0pOworCWlmIChtb3VudF9mbGFncyAmIEVYVDJfTUZfUkVBRE9OTFkpCisJCXByaW50ZigiXHQlcyBpcyByZWFkLW9ubHkuXG4iLCBhcmd2WzFdKTsKKwlpZiAobW91bnRfZmxhZ3MgJiBFWFQyX01GX0lTUk9PVCkKKwkJcHJpbnRmKCJcdCVzIGlzIHRoZSByb290IGZpbGVzeXN0ZW0uXG4iLCBhcmd2WzFdKTsKKwlpZiAobW50cHRbMF0pCisJCXByaW50ZigiXHQlcyBpcyBtb3VudGVkIG9uICVzLlxuIiwgYXJndlsxXSwgbW50cHQpOworCWV4aXQoMCk7Cit9CisjZW5kaWYgLyogREVCVUcgKi8KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvamZzX2NvbXBhdC5oIGIvbGliL2V4dDJmcy9qZnNfY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I4YWFmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvamZzX2NvbXBhdC5oCkBAIC0wLDAgKzEsNjggQEAKKworI2lmbmRlZiBfSkZTX0NPTVBBVF9ICisjZGVmaW5lIF9KRlNfQ09NUEFUX0gKKworI2luY2x1ZGUgImtlcm5lbC1saXN0LmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCisjZGVmaW5lIHByaW50ayBwcmludGYKKyNkZWZpbmUgS0VSTl9FUlIgIiIKKyNkZWZpbmUgS0VSTl9ERUJVRyAiIgorCisjZGVmaW5lIFJFQUQgMAorI2RlZmluZSBXUklURSAxCisKKyNkZWZpbmUgY3B1X3RvX2JlMzIobikgaHRvbmwobikKKyNkZWZpbmUgYmUzMl90b19jcHUobikgbnRvaGwobikKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdGlkX3Q7Cit0eXBlZGVmIHN0cnVjdCBqb3VybmFsX3Mgam91cm5hbF90OworCitzdHJ1Y3QgYnVmZmVyX2hlYWQ7CitzdHJ1Y3QgaW5vZGU7CisKK3N0cnVjdCBqb3VybmFsX3MKK3sKKwl1bnNpZ25lZCBsb25nCQlqX2ZsYWdzOworCWludAkJCWpfZXJybm87CisJc3RydWN0IGJ1ZmZlcl9oZWFkICoJal9zYl9idWZmZXI7CisJc3RydWN0IGpvdXJuYWxfc3VwZXJibG9ja19zICpqX3N1cGVyYmxvY2s7CisJaW50CQkJal9mb3JtYXRfdmVyc2lvbjsKKwl1bnNpZ25lZCBsb25nCQlqX2hlYWQ7CisJdW5zaWduZWQgbG9uZwkJal90YWlsOworCXVuc2lnbmVkIGxvbmcJCWpfZnJlZTsKKwl1bnNpZ25lZCBsb25nCQlqX2ZpcnN0LCBqX2xhc3Q7CisJa2Rldl90CQkJal9kZXY7CisJa2Rldl90CQkJal9mc19kZXY7CisJaW50CQkJal9ibG9ja3NpemU7CisJdW5zaWduZWQgaW50CQlqX2Jsa19vZmZzZXQ7CisJdW5zaWduZWQgaW50CQlqX21heGxlbjsKKwlzdHJ1Y3QgaW5vZGUgKgkJal9pbm9kZTsKKwl0aWRfdAkJCWpfdGFpbF9zZXF1ZW5jZTsKKwl0aWRfdAkJCWpfdHJhbnNhY3Rpb25fc2VxdWVuY2U7CisJX191OAkJCWpfdXVpZFsxNl07CisJc3RydWN0IGpiZF9yZXZva2VfdGFibGVfcyAqal9yZXZva2U7CisJdGlkX3QJCQlqX2ZhaWxlZF9jb21taXQ7Cit9OworCisjZGVmaW5lIEpfQVNTRVJUKGFzc2VydCkJCQkJCQlcCisJZG8geyBpZiAoIShhc3NlcnQpKSB7CQkJCQkJXAorCQlwcmludGYgKCJBc3NlcnRpb24gZmFpbHVyZSBpbiAlcygpIGF0ICVzIGxpbmUgJWQ6ICIJXAorCQkJIlwiJXNcIlxuIiwJCQkJCVwKKwkJCV9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fLCAjIGFzc2VydCk7CVwKKwkJZmF0YWxfZXJyb3IoZTJmc2NrX2dsb2JhbF9jdHgsIDApOwkJCVwKKwl9IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgaXNfam91cm5hbF9hYm9ydCh4KSAwCisKKyNkZWZpbmUgQlVGRkVSX1RSQUNFKGJoLCBpbmZvKQlkbyB7fSB3aGlsZSAoMCkKKworLyogTmVlZCB0aGlzIHNvIHdlIGNhbiBjb21waWxlIHdpdGggY29uZmlndXJlIC0tZW5hYmxlLWdjYy13YWxsICovCisjaWZkZWYgTk9fSU5MSU5FX0ZVTkNTCisjZGVmaW5lIGlubGluZQorI2VuZGlmCisKKyNlbmRpZiAvKiBfSkZTX0NPTVBBVF9IICovCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2pmc19kYXQuaCBiL2xpYi9leHQyZnMvamZzX2RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNzc4YzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2pmc19kYXQuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogamZzX2RhdC5oIC0tLSBzdHJpcHBlZCBkb3duIGhlYWRlciBmaWxlIHdoaWNoIG9ubHkgY29udGFpbnMgdGhlIEpGUworICogCW9uLWRpc2sgZGF0YSBzdHJ1Y3R1cmVzCisgKi8KKworI2RlZmluZSBKRlNfTUFHSUNfTlVNQkVSIDB4YzAzYjM5OThVIC8qIFRoZSBmaXJzdCA0IGJ5dGVzIG9mIC9kZXYvcmFuZG9tISAqLworCisvKgorICogT24tZGlzayBzdHJ1Y3R1cmVzCisgKi8KKworLyoKKyAqIERlc2NyaXB0b3IgYmxvY2sgdHlwZXM6CisgKi8KKworI2RlZmluZSBKRlNfREVTQ1JJUFRPUl9CTE9DSwkxCisjZGVmaW5lIEpGU19DT01NSVRfQkxPQ0sJMgorI2RlZmluZSBKRlNfU1VQRVJCTE9DSwkJMworCisvKgorICogU3RhbmRhcmQgaGVhZGVyIGZvciBhbGwgZGVzY3JpcHRvciBibG9ja3M6CisgKi8KK3R5cGVkZWYgc3RydWN0IGpvdXJuYWxfaGVhZGVyX3MKK3sKKwlfX3UzMgkJaF9tYWdpYzsKKwlfX3UzMgkJaF9ibG9ja3R5cGU7CisJX191MzIJCWhfc2VxdWVuY2U7Cit9IGpvdXJuYWxfaGVhZGVyX3Q7CisKKworLyoKKyAqIFRoZSBibG9jayB0YWc6IHVzZWQgdG8gZGVzY3JpYmUgYSBzaW5nbGUgYnVmZmVyIGluIHRoZSBqb3VybmFsCisgKi8KK3R5cGVkZWYgc3RydWN0IGpvdXJuYWxfYmxvY2tfdGFnX3MKK3sKKwlfX3UzMgkJdF9ibG9ja25yOwkvKiBUaGUgb24tZGlzayBibG9jayBudW1iZXIgKi8KKwlfX3UzMgkJdF9mbGFnczsJLyogU2VlIGJlbG93ICovCit9IGpvdXJuYWxfYmxvY2tfdGFnX3Q7CisKKy8qIERlZmluaXRpb25zIGZvciB0aGUgam91cm5hbCB0YWcgZmxhZ3Mgd29yZDogKi8KKyNkZWZpbmUgSkZTX0ZMQUdfRVNDQVBFCQkxCS8qIG9uLWRpc2sgYmxvY2sgaXMgZXNjYXBlZCAqLworI2RlZmluZSBKRlNfRkxBR19TQU1FX1VVSUQJMgkvKiBibG9jayBoYXMgc2FtZSB1dWlkIGFzIHByZXZpb3VzICovCisjZGVmaW5lIEpGU19GTEFHX0RFTEVURUQJNAkvKiBibG9jayBkZWxldGVkIGJ5IHRoaXMgdHJhbnNhY3Rpb24gKi8KKyNkZWZpbmUgSkZTX0ZMQUdfTEFTVF9UQUcJOAkvKiBsYXN0IHRhZyBpbiB0aGlzIGRlc2NyaXB0b3IgYmxvY2sgKi8KKworCisvKgorICogVGhlIGpvdXJuYWwgc3VwZXJibG9jaworICovCit0eXBlZGVmIHN0cnVjdCBqb3VybmFsX3N1cGVyYmxvY2tfcworeworCWpvdXJuYWxfaGVhZGVyX3Qgc19oZWFkZXI7CisKKwkvKiBTdGF0aWMgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgam91cm5hbCAqLworCV9fdTMyCQlzX2Jsb2Nrc2l6ZTsJLyogam91cm5hbCBkZXZpY2UgYmxvY2tzaXplICovCisJX191MzIJCXNfbWF4bGVuOwkvKiB0b3RhbCBibG9ja3MgaW4gam91cm5hbCBmaWxlICovCisJX191MzIJCXNfZmlyc3Q7CS8qIGZpcnN0IGJsb2NrIG9mIGxvZyBpbmZvcm1hdGlvbiAqLworCisJLyogRHluYW1pYyBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBsb2cgKi8KKwlfX3UzMgkJc19zZXF1ZW5jZTsJLyogZmlyc3QgY29tbWl0IElEIGV4cGVjdGVkIGluIGxvZyAqLworCV9fdTMyCQlzX3N0YXJ0OwkvKiBibG9ja25yIG9mIHN0YXJ0IG9mIGxvZyAqLworCit9IGpvdXJuYWxfc3VwZXJibG9ja190OworCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2pmc191c2VyLmggYi9saWIvZXh0MmZzL2pmc191c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E1MjEyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvamZzX3VzZXIuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX0pGU19VU0VSX0gKKyNkZWZpbmUgX0pGU19VU0VSX0gKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBrZGV2X3Q7CisKKyNpbmNsdWRlICJrZXJuZWwtamJkLmgiCisKKyNlbmRpZiAvKiBfSkZTX1VTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9rZXJuZWwtamJkLmggYi9saWIvZXh0MmZzL2tlcm5lbC1qYmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmFhZTczCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9rZXJuZWwtamJkLmgKQEAgLTAsMCArMSw5NTYgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L2piZC5oCisgKgorICogV3JpdHRlbiBieSBTdGVwaGVuIEMuIFR3ZWVkaWUgPHNjdEByZWRoYXQuY29tPgorICoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDAgUmVkIEhhdCwgSW5jIC0tLSBBbGwgUmlnaHRzIFJlc2VydmVkCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCBhbmQgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgb3IgYXQgeW91cgorICogb3B0aW9uLCBhbnkgbGF0ZXIgdmVyc2lvbiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKgorICogRGVmaW5pdGlvbnMgZm9yIHRyYW5zYWN0aW9uIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGJ1ZmZlciBjYWNoZQorICogZmlsZXN5c3RlbSBqb3VybmFsaW5nIHN1cHBvcnQuCisgKi8KKworI2lmbmRlZiBfTElOVVhfSkJEX0gKKyNkZWZpbmUgX0xJTlVYX0pCRF9ICisKKyNpZiBkZWZpbmVkKENPTkZJR19KQkQpIHx8IGRlZmluZWQoQ09ORklHX0pCRF9NT0RVTEUpIHx8ICFkZWZpbmVkKF9fS0VSTkVMX18pCisKKy8qIEFsbG93IHRoaXMgZmlsZSB0byBiZSBpbmNsdWRlZCBkaXJlY3RseSBpbnRvIGUyZnNwcm9ncyAqLworI2lmbmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSAiamZzX2NvbXBhdC5oIgorI2RlZmluZSBKRlNfREVCVUcKKyNkZWZpbmUgamZzX2RlYnVnIGpiZF9kZWJ1ZworI2Vsc2UKKworI2luY2x1ZGUgPGxpbnV4L2pvdXJuYWwtaGVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNlbmRpZgorCisjaWZuZGVmIF9fR05VQ19fCisjZGVmaW5lIF9fRlVOQ1RJT05fXyAiIgorI2VuZGlmCisKKyNkZWZpbmUgam91cm5hbF9vb21fcmV0cnkgMQorCisjaWZkZWYgX19TVERDX18KKyNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCisvKgorICogRGVmaW5lIEpCRF9FWFBFTlNJVkVfQ0hFQ0tJTkcgdG8gZW5hYmxlIG1vcmUgZXhwZW5zaXZlIGludGVybmFsCisgKiBjb25zaXN0ZW5jeSBjaGVja3MuICBCeSBkZWZhdWx0IHdlIGRvbid0IGRvIHRoaXMgdW5sZXNzCisgKiBDT05GSUdfSkJEX0RFQlVHIGlzIG9uLgorICovCisjZGVmaW5lIEpCRF9FWFBFTlNJVkVfQ0hFQ0tJTkcKK2V4dGVybiBpbnQgam91cm5hbF9lbmFibGVfZGVidWc7CisKKyNkZWZpbmUgamJkX2RlYnVnKG4sIGYsIGEuLi4pCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKChuKSA8PSBqb3VybmFsX2VuYWJsZV9kZWJ1ZykgewkJCVwKKwkJCXByaW50ayAoS0VSTl9ERUJVRyAiKCVzLCAlZCk6ICVzOiAiLAkJXAorCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJXAorCQkgIAlwcmludGsgKGYsICMjIGEpOwkJCQlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIGpiZF9kZWJ1ZyhmLCBhLi4uKQkvKiovCisjZWxzZQorI2RlZmluZSBqYmRfZGVidWcoZiwgLi4uKQkvKiovCisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgamJkX2RlYnVnKHgpCQkvKiBBSVggZG9lc24ndCBkbyBTVERDICovCisjZW5kaWYKKworZXh0ZXJuIHZvaWQgKiBfX2piZF9rbWFsbG9jIChjaGFyICp3aGVyZSwgc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IHJldHJ5KTsKKyNkZWZpbmUgamJkX2ttYWxsb2Moc2l6ZSwgZmxhZ3MpIFwKKwlfX2piZF9rbWFsbG9jKF9fRlVOQ1RJT05fXywgKHNpemUpLCAoZmxhZ3MpLCBqb3VybmFsX29vbV9yZXRyeSkKKyNkZWZpbmUgamJkX3JlcF9rbWFsbG9jKHNpemUsIGZsYWdzKSBcCisJX19qYmRfa21hbGxvYyhfX0ZVTkNUSU9OX18sIChzaXplKSwgKGZsYWdzKSwgMSkKKworI2RlZmluZSBKRlNfTUlOX0pPVVJOQUxfQkxPQ0tTIDEwMjQKKworI2lmZGVmIF9fS0VSTkVMX18KK3R5cGVkZWYgc3RydWN0IGhhbmRsZV9zCQloYW5kbGVfdDsJLyogQXRvbWljIG9wZXJhdGlvbiB0eXBlICovCit0eXBlZGVmIHN0cnVjdCBqb3VybmFsX3MJam91cm5hbF90OwkvKiBKb3VybmFsIGNvbnRyb2wgc3RydWN0dXJlICovCisjZW5kaWYKKworLyoKKyAqIEludGVybmFsIHN0cnVjdHVyZXMgdXNlZCBieSB0aGUgbG9nZ2luZyBtZWNoYW5pc206CisgKi8KKworI2RlZmluZSBKRlNfTUFHSUNfTlVNQkVSIDB4YzAzYjM5OThVIC8qIFRoZSBmaXJzdCA0IGJ5dGVzIG9mIC9kZXYvcmFuZG9tISAqLworCisvKgorICogT24tZGlzayBzdHJ1Y3R1cmVzCisgKi8KKworLyoKKyAqIERlc2NyaXB0b3IgYmxvY2sgdHlwZXM6CisgKi8KKworI2RlZmluZSBKRlNfREVTQ1JJUFRPUl9CTE9DSwkxCisjZGVmaW5lIEpGU19DT01NSVRfQkxPQ0sJMgorI2RlZmluZSBKRlNfU1VQRVJCTE9DS19WMQkzCisjZGVmaW5lIEpGU19TVVBFUkJMT0NLX1YyCTQKKyNkZWZpbmUgSkZTX1JFVk9LRV9CTE9DSwk1CisKKy8qCisgKiBTdGFuZGFyZCBoZWFkZXIgZm9yIGFsbCBkZXNjcmlwdG9yIGJsb2NrczoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgam91cm5hbF9oZWFkZXJfcworeworCV9fdTMyCQloX21hZ2ljOworCV9fdTMyCQloX2Jsb2NrdHlwZTsKKwlfX3UzMgkJaF9zZXF1ZW5jZTsKK30gam91cm5hbF9oZWFkZXJfdDsKKworLyoKKyAqIENoZWNrc3VtIHR5cGVzLgorICovCisjZGVmaW5lIEpCRDJfQ1JDMzJfQ0hLU1VNICAgMQorI2RlZmluZSBKQkQyX01ENV9DSEtTVU0gICAgIDIKKyNkZWZpbmUgSkJEMl9TSEExX0NIS1NVTSAgICAzCisKKyNkZWZpbmUgSkJEMl9DUkMzMl9DSEtTVU1fU0laRSA0CisKKyNkZWZpbmUgSkJEMl9DSEVDS1NVTV9CWVRFUyAoMzIgLyBzaXplb2YoX191MzIpKQorLyoKKyAqIENvbW1pdCBibG9jayBoZWFkZXIgZm9yIHN0b3JpbmcgdHJhbnNhY3Rpb25hbCBjaGVja3N1bXM6CisgKi8KK3N0cnVjdCBjb21taXRfaGVhZGVyIHsKKwlfX3UzMgkJaF9tYWdpYzsKKwlfX3UzMgkJaF9ibG9ja3R5cGU7CisJX191MzIJCWhfc2VxdWVuY2U7CisJdW5zaWduZWQgY2hhcgloX2Noa3N1bV90eXBlOworCXVuc2lnbmVkIGNoYXIJaF9jaGtzdW1fc2l6ZTsKKwl1bnNpZ25lZCBjaGFyCWhfcGFkZGluZ1syXTsKKwlfX3UzMgkJaF9jaGtzdW1bSkJEMl9DSEVDS1NVTV9CWVRFU107CisJX191NjQJCWhfY29tbWl0X3NlYzsKKwlfX3UzMgkJaF9jb21taXRfbnNlYzsKK307CisKKy8qCisgKiBUaGUgYmxvY2sgdGFnOiB1c2VkIHRvIGRlc2NyaWJlIGEgc2luZ2xlIGJ1ZmZlciBpbiB0aGUgam91cm5hbAorICovCit0eXBlZGVmIHN0cnVjdCBqb3VybmFsX2Jsb2NrX3RhZ19zCit7CisJX191MzIJCXRfYmxvY2tucjsJLyogVGhlIG9uLWRpc2sgYmxvY2sgbnVtYmVyICovCisJX191MzIJCXRfZmxhZ3M7CS8qIFNlZSBiZWxvdyAqLworCV9fdTMyCQl0X2Jsb2NrbnJfaGlnaDsgLyogbW9zdC1zaWduaWZpY2FudCBoaWdoIDMyYml0cy4gKi8KK30gam91cm5hbF9ibG9ja190YWdfdDsKKworI2RlZmluZSBKQkRfVEFHX1NJWkU2NCAoc2l6ZW9mKGpvdXJuYWxfYmxvY2tfdGFnX3QpKQorI2RlZmluZSBKQkRfVEFHX1NJWkUzMiAoOCkKKworLyoKKyAqIFRoZSByZXZva2UgZGVzY3JpcHRvcjogdXNlZCBvbiBkaXNrIHRvIGRlc2NyaWJlIGEgc2VyaWVzIG9mIGJsb2NrcyB0bworICogYmUgcmV2b2tlZCBmcm9tIHRoZSBsb2cKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgam91cm5hbF9yZXZva2VfaGVhZGVyX3MKK3sKKwlqb3VybmFsX2hlYWRlcl90IHJfaGVhZGVyOworCWludAkJIHJfY291bnQ7CS8qIENvdW50IG9mIGJ5dGVzIHVzZWQgaW4gdGhlIGJsb2NrICovCit9IGpvdXJuYWxfcmV2b2tlX2hlYWRlcl90OworCisKKy8qIERlZmluaXRpb25zIGZvciB0aGUgam91cm5hbCB0YWcgZmxhZ3Mgd29yZDogKi8KKyNkZWZpbmUgSkZTX0ZMQUdfRVNDQVBFCQkxCS8qIG9uLWRpc2sgYmxvY2sgaXMgZXNjYXBlZCAqLworI2RlZmluZSBKRlNfRkxBR19TQU1FX1VVSUQJMgkvKiBibG9jayBoYXMgc2FtZSB1dWlkIGFzIHByZXZpb3VzICovCisjZGVmaW5lIEpGU19GTEFHX0RFTEVURUQJNAkvKiBibG9jayBkZWxldGVkIGJ5IHRoaXMgdHJhbnNhY3Rpb24gKi8KKyNkZWZpbmUgSkZTX0ZMQUdfTEFTVF9UQUcJOAkvKiBsYXN0IHRhZyBpbiB0aGlzIGRlc2NyaXB0b3IgYmxvY2sgKi8KKworCisjZGVmaW5lIFVVSURfU0laRSAxNgorI2RlZmluZSBKRlNfVVNFUlNfTUFYIDQ4CisjZGVmaW5lIEpGU19VU0VSU19TSVpFIChVVUlEX1NJWkUgKiBKRlNfVVNFUlNfTUFYKQorLyoKKyAqIFRoZSBqb3VybmFsIHN1cGVyYmxvY2suICBBbGwgZmllbGRzIGFyZSBpbiBiaWctZW5kaWFuIGJ5dGUgb3JkZXIuCisgKi8KK3R5cGVkZWYgc3RydWN0IGpvdXJuYWxfc3VwZXJibG9ja19zCit7CisvKiAweDAwMDAgKi8KKwlqb3VybmFsX2hlYWRlcl90IHNfaGVhZGVyOworCisvKiAweDAwMEMgKi8KKwkvKiBTdGF0aWMgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgam91cm5hbCAqLworCV9fdTMyCXNfYmxvY2tzaXplOwkJLyogam91cm5hbCBkZXZpY2UgYmxvY2tzaXplICovCisJX191MzIJc19tYXhsZW47CQkvKiB0b3RhbCBibG9ja3MgaW4gam91cm5hbCBmaWxlICovCisJX191MzIJc19maXJzdDsJCS8qIGZpcnN0IGJsb2NrIG9mIGxvZyBpbmZvcm1hdGlvbiAqLworCisvKiAweDAwMTggKi8KKwkvKiBEeW5hbWljIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGxvZyAqLworCV9fdTMyCXNfc2VxdWVuY2U7CQkvKiBmaXJzdCBjb21taXQgSUQgZXhwZWN0ZWQgaW4gbG9nICovCisJX191MzIJc19zdGFydDsJCS8qIGJsb2NrbnIgb2Ygc3RhcnQgb2YgbG9nICovCisKKy8qIDB4MDAyMCAqLworCS8qIEVycm9yIHZhbHVlLCBhcyBzZXQgYnkgam91cm5hbF9hYm9ydCgpLiAqLworCV9fczMyCXNfZXJybm87CisKKy8qIDB4MDAyNCAqLworCS8qIFJlbWFpbmluZyBmaWVsZHMgYXJlIG9ubHkgdmFsaWQgaW4gYSB2ZXJzaW9uLTIgc3VwZXJibG9jayAqLworCV9fdTMyCXNfZmVhdHVyZV9jb21wYXQ7IAkvKiBjb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCisJX191MzIJc19mZWF0dXJlX2luY29tcGF0OyAJLyogaW5jb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCisJX191MzIJc19mZWF0dXJlX3JvX2NvbXBhdDsgCS8qIHJlYWRvbmx5LWNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKy8qIDB4MDAzMCAqLworCV9fdTgJc191dWlkWzE2XTsJCS8qIDEyOC1iaXQgdXVpZCBmb3Igam91cm5hbCAqLworCisvKiAweDAwNDAgKi8KKwlfX3UzMglzX25yX3VzZXJzOwkJLyogTnIgb2YgZmlsZXN5c3RlbXMgc2hhcmluZyBsb2cgKi8KKworCV9fdTMyCXNfZHluc3VwZXI7CQkvKiBCbG9ja25yIG9mIGR5bmFtaWMgc3VwZXJibG9jayBjb3B5Ki8KKworLyogMHgwMDQ4ICovCisJX191MzIJc19tYXhfdHJhbnNhY3Rpb247CS8qIExpbWl0IG9mIGpvdXJuYWwgYmxvY2tzIHBlciB0cmFucy4qLworCV9fdTMyCXNfbWF4X3RyYW5zX2RhdGE7CS8qIExpbWl0IG9mIGRhdGEgYmxvY2tzIHBlciB0cmFucy4gKi8KKworLyogMHgwMDUwICovCisJX191MzIJc19wYWRkaW5nWzQ0XTsKKworLyogMHgwMTAwICovCisJX191OAlzX3VzZXJzW0pGU19VU0VSU19TSVpFXTsJCS8qIGlkcyBvZiBhbGwgZnMnZXMgc2hhcmluZyB0aGUgbG9nICovCisKKy8qIDB4MDQwMCAqLworfSBqb3VybmFsX3N1cGVyYmxvY2tfdDsKKworI2RlZmluZSBKRlNfSEFTX0NPTVBBVF9GRUFUVVJFKGosbWFzaykJCQkJCVwKKwkoKGopLT5qX2Zvcm1hdF92ZXJzaW9uID49IDIgJiYJCQkJCVwKKwkgKChqKS0+al9zdXBlcmJsb2NrLT5zX2ZlYXR1cmVfY29tcGF0ICYgZXh0MmZzX2NwdV90b19iZTMyKChtYXNrKSkpKQorI2RlZmluZSBKRlNfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGosbWFzaykJCQkJXAorCSgoaiktPmpfZm9ybWF0X3ZlcnNpb24gPj0gMiAmJgkJCQkJXAorCSAoKGopLT5qX3N1cGVyYmxvY2stPnNfZmVhdHVyZV9yb19jb21wYXQgJiBleHQyZnNfY3B1X3RvX2JlMzIoKG1hc2spKSkpCisjZGVmaW5lIEpGU19IQVNfSU5DT01QQVRfRkVBVFVSRShqLG1hc2spCQkJCVwKKwkoKGopLT5qX2Zvcm1hdF92ZXJzaW9uID49IDIgJiYJCQkJCVwKKwkgKChqKS0+al9zdXBlcmJsb2NrLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBleHQyZnNfY3B1X3RvX2JlMzIoKG1hc2spKSkpCisKKyNkZWZpbmUgSkZTX0ZFQVRVUkVfQ09NUEFUX0NIRUNLU1VNCTB4MDAwMDAwMDEKKworI2RlZmluZSBKRlNfRkVBVFVSRV9JTkNPTVBBVF9SRVZPS0UJMHgwMDAwMDAwMQorCisjZGVmaW5lIEpGU19GRUFUVVJFX0lOQ09NUEFUX1JFVk9LRQkJMHgwMDAwMDAwMQorI2RlZmluZSBKRlNfRkVBVFVSRV9JTkNPTVBBVF82NEJJVAkJMHgwMDAwMDAwMgorI2RlZmluZSBKRlNfRkVBVFVSRV9JTkNPTVBBVF9BU1lOQ19DT01NSVQJMHgwMDAwMDAwNAorCisvKiBGZWF0dXJlcyBrbm93biB0byB0aGlzIGtlcm5lbCB2ZXJzaW9uOiAqLworI2RlZmluZSBKRlNfS05PV05fQ09NUEFUX0ZFQVRVUkVTCTAKKyNkZWZpbmUgSkZTX0tOT1dOX1JPQ09NUEFUX0ZFQVRVUkVTCTAKKyNkZWZpbmUgSkZTX0tOT1dOX0lOQ09NUEFUX0ZFQVRVUkVTCShKRlNfRkVBVFVSRV9JTkNPTVBBVF9SRVZPS0V8XAorCQkJCQkgSkZTX0ZFQVRVUkVfSU5DT01QQVRfQVNZTkNfQ09NTUlUfFwKKwkJCQkJIEpGU19GRUFUVVJFX0lOQ09NUEFUXzY0QklUKQorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjZGVmaW5lIEpCRF9BU1NFUlRJT05TCisjaWZkZWYgSkJEX0FTU0VSVElPTlMKKyNkZWZpbmUgSl9BU1NFUlQoYXNzZXJ0KQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKCEoYXNzZXJ0KSkgewkJCQkJCVwKKwkJcHJpbnRrIChLRVJOX0VNRVJHCQkJCQlcCisJCQkiQXNzZXJ0aW9uIGZhaWx1cmUgaW4gJXMoKSBhdCAlczolZDogXCIlc1wiXG4iLAlcCisJCQlfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXywgIyBhc3NlcnQpOwlcCisJCUJVRygpOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2lmIGRlZmluZWQoQ09ORklHX0JVRkZFUl9ERUJVRykKK3ZvaWQgYnVmZmVyX2Fzc2VydGlvbl9mYWlsdXJlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOworI2RlZmluZSBKX0FTU0VSVF9CSChiaCwgZXhwcikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoIShleHByKSkJCQkJCQlcCisJCQlidWZmZXJfYXNzZXJ0aW9uX2ZhaWx1cmUoYmgpOwkJCVwKKwkJSl9BU1NFUlQoZXhwcik7CQkJCQkJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIEpfQVNTRVJUX0pIKGpoLCBleHByKQlKX0FTU0VSVF9CSChqaDJiaChqaCksIGV4cHIpCisjZWxzZQorI2RlZmluZSBKX0FTU0VSVF9CSChiaCwgZXhwcikJSl9BU1NFUlQoZXhwcikKKyNkZWZpbmUgSl9BU1NFUlRfSkgoamgsIGV4cHIpCUpfQVNTRVJUKGV4cHIpCisjZW5kaWYKKworI2Vsc2UKKyNkZWZpbmUgSl9BU1NFUlQoYXNzZXJ0KQorI2VuZGlmCQkvKiBKQkRfQVNTRVJUSU9OUyAqLworCitlbnVtIGpiZF9zdGF0ZV9iaXRzIHsKKwlCSF9KV3JpdGUKKwkgID0gQkhfUHJpdmF0ZVN0YXJ0LAkvKiAxIGlmIGJlaW5nIHdyaXR0ZW4gdG8gbG9nIChAQEAgREVCVUdHSU5HKSAqLworCUJIX0ZyZWVkLAkJLyogMSBpZiBidWZmZXIgaGFzIGJlZW4gZnJlZWQgKHRydW5jYXRlZCkgKi8KKwlCSF9SZXZva2VkLAkJLyogMSBpZiBidWZmZXIgaGFzIGJlZW4gcmV2b2tlZCBmcm9tIHRoZSBsb2cgKi8KKwlCSF9SZXZva2VWYWxpZCwJCS8qIDEgaWYgYnVmZmVyIHJldm9rZWQgZmxhZyBpcyB2YWxpZCAqLworCUJIX0pCRERpcnR5LAkJLyogMSBpZiBidWZmZXIgaXMgZGlydHkgYnV0IGpvdXJuYWxlZCAqLworfTsKKworLyogUmV0dXJuIHRydWUgaWYgdGhlIGJ1ZmZlciBpcyBvbmUgd2hpY2ggSkJEIGlzIG1hbmFnaW5nICovCitzdGF0aWMgaW5saW5lIGludCBidWZmZXJfamJkKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJcmV0dXJuIF9fYnVmZmVyX3N0YXRlKGJoLCBKQkQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqamgyYmgoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgpCit7CisJcmV0dXJuIGpoLT5iX2JoOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBqb3VybmFsX2hlYWQgKmJoMmpoKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJcmV0dXJuIGJoLT5iX3ByaXZhdGU7Cit9CisKK3N0cnVjdCBqYmRfcmV2b2tlX3RhYmxlX3M7CisKKy8qIFRoZSBoYW5kbGVfdCB0eXBlIHJlcHJlc2VudHMgYSBzaW5nbGUgYXRvbWljIHVwZGF0ZSBiZWluZyBwZXJmb3JtZWQKKyAqIGJ5IHNvbWUgcHJvY2Vzcy4gIEFsbCBmaWxlc3lzdGVtIG1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGUgcHJvY2VzcyBnbworICogdGhyb3VnaCB0aGlzIGhhbmRsZS4gIFJlY3Vyc2l2ZSBvcGVyYXRpb25zIChzdWNoIGFzIHF1b3RhIG9wZXJhdGlvbnMpCisgKiBhcmUgZ2F0aGVyZWQgaW50byBhIHNpbmdsZSB1cGRhdGUuCisgKgorICogVGhlIGJ1ZmZlciBjcmVkaXRzIGZpZWxkIGlzIHVzZWQgdG8gYWNjb3VudCBmb3Igam91cm5hbGVkIGJ1ZmZlcnMKKyAqIGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBydW5uaW5nIHByb2Nlc3MuICBUbyBlbnN1cmUgdGhhdCB0aGVyZSBpcworICogZW5vdWdoIGxvZyBzcGFjZSBmb3IgYWxsIG91dHN0YW5kaW5nIG9wZXJhdGlvbnMsIHdlIG5lZWQgdG8gbGltaXQgdGhlCisgKiBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgYnVmZmVycyBwb3NzaWJsZSBhdCBhbnkgdGltZS4gIFdoZW4gdGhlCisgKiBvcGVyYXRpb24gY29tcGxldGVzLCBhbnkgYnVmZmVyIGNyZWRpdHMgbm90IHVzZWQgYXJlIGNyZWRpdGVkIGJhY2sgdG8KKyAqIHRoZSB0cmFuc2FjdGlvbiwgc28gdGhhdCBhdCBhbGwgdGltZXMgd2Uga25vdyBob3cgbWFueSBidWZmZXJzIHRoZQorICogb3V0c3RhbmRpbmcgdXBkYXRlcyBvbiBhIHRyYW5zYWN0aW9uIG1pZ2h0IHBvc3NpYmx5IHRvdWNoLiAqLworCitzdHJ1Y3QgaGFuZGxlX3MKK3sKKwkvKiBXaGljaCBjb21wb3VuZCB0cmFuc2FjdGlvbiBpcyB0aGlzIHVwZGF0ZSBhIHBhcnQgb2Y/ICovCisJdHJhbnNhY3Rpb25fdAkgICAgICAqIGhfdHJhbnNhY3Rpb247CisKKwkvKiBOdW1iZXIgb2YgcmVtYWluaW5nIGJ1ZmZlcnMgd2UgYXJlIGFsbG93ZWQgdG8gZGlydHk6ICovCisJaW50CQkJaF9idWZmZXJfY3JlZGl0czsKKworCS8qIFJlZmVyZW5jZSBjb3VudCBvbiB0aGlzIGhhbmRsZSAqLworCWludAkJCWhfcmVmOworCisJLyogRmllbGQgZm9yIGNhbGxlcidzIHVzZSB0byB0cmFjayBlcnJvcnMgdGhyb3VnaCBsYXJnZSBmcworCSAgIG9wZXJhdGlvbnMgKi8KKwlpbnQJCQloX2VycjsKKworCS8qIEZsYWdzICovCisJdW5zaWduZWQgaW50CWhfc3luYzoJCTE7CS8qIHN5bmMtb24tY2xvc2UgKi8KKwl1bnNpZ25lZCBpbnQJaF9qZGF0YToJMTsJLyogZm9yY2UgZGF0YSBqb3VybmFsaW5nICovCisJdW5zaWduZWQgaW50CWhfYWJvcnRlZDoJMTsJLyogZmF0YWwgZXJyb3Igb24gaGFuZGxlICovCit9OworCisKKy8qIFRoZSB0cmFuc2FjdGlvbl90IHR5cGUgaXMgdGhlIGd1dHMgb2YgdGhlIGpvdXJuYWxpbmcgbWVjaGFuaXNtLiAgSXQKKyAqIHRyYWNrcyBhIGNvbXBvdW5kIHRyYW5zYWN0aW9uIHRocm91Z2ggaXRzIHZhcmlvdXMgc3RhdGVzOgorICoKKyAqIFJVTk5JTkc6CWFjY2VwdGluZyBuZXcgdXBkYXRlcworICogTE9DS0VEOglVcGRhdGVzIHN0aWxsIHJ1bm5pbmcgYnV0IHdlIGRvbid0IGFjY2VwdCBuZXcgb25lcworICogUlVORE9XTjoJVXBkYXRlcyBhcmUgdGlkeWluZyB1cCBidXQgaGF2ZSBmaW5pc2hlZCByZXF1ZXN0aW5nCisgKgkJbmV3IGJ1ZmZlcnMgdG8gbW9kaWZ5IChzdGF0ZSBub3QgdXNlZCBmb3Igbm93KQorICogRkxVU0g6ICAgICAgIEFsbCB1cGRhdGVzIGNvbXBsZXRlLCBidXQgd2UgYXJlIHN0aWxsIHdyaXRpbmcgdG8gZGlzaworICogQ09NTUlUOiAgICAgIEFsbCBkYXRhIG9uIGRpc2ssIHdyaXRpbmcgY29tbWl0IHJlY29yZAorICogRklOSVNIRUQ6CVdlIHN0aWxsIGhhdmUgdG8ga2VlcCB0aGUgdHJhbnNhY3Rpb24gZm9yIGNoZWNrcG9pbnRpbmcuCisgKgorICogVGhlIHRyYW5zYWN0aW9uIGtlZXBzIHRyYWNrIG9mIGFsbCBvZiB0aGUgYnVmZmVycyBtb2RpZmllZCBieSBhCisgKiBydW5uaW5nIHRyYW5zYWN0aW9uLCBhbmQgYWxsIG9mIHRoZSBidWZmZXJzIGNvbW1pdHRlZCBidXQgbm90IHlldAorICogZmx1c2hlZCB0byBob21lIGZvciBmaW5pc2hlZCB0cmFuc2FjdGlvbnMuCisgKi8KKworc3RydWN0IHRyYW5zYWN0aW9uX3MKK3sKKwkvKiBQb2ludGVyIHRvIHRoZSBqb3VybmFsIGZvciB0aGlzIHRyYW5zYWN0aW9uLiAqLworCWpvdXJuYWxfdCAqCQl0X2pvdXJuYWw7CisKKwkvKiBTZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgdHJhbnNhY3Rpb24gKi8KKwl0aWRfdAkJCXRfdGlkOworCisJLyogVHJhbnNhY3Rpb24ncyBjdXJyZW50IHN0YXRlICovCisJZW51bSB7CisJCVRfUlVOTklORywKKwkJVF9MT0NLRUQsCisJCVRfUlVORE9XTiwKKwkJVF9GTFVTSCwKKwkJVF9DT01NSVQsCisJCVRfRklOSVNIRUQKKwl9CQkJdF9zdGF0ZTsKKworCS8qIFdoZXJlIGluIHRoZSBsb2cgZG9lcyB0aGlzIHRyYW5zYWN0aW9uJ3MgY29tbWl0IHN0YXJ0PyAqLworCXVuc2lnbmVkIGxvbmcJCXRfbG9nX3N0YXJ0OworCisJLyogRG91Ymx5LWxpbmtlZCBjaXJjdWxhciBsaXN0IG9mIGFsbCBpbm9kZXMgb3duZWQgYnkgdGhpcworICAgICAgICAgICB0cmFuc2FjdGlvbiAqLwkvKiBBS1BNOiB1bnVzZWQgKi8KKwlzdHJ1Y3QgaW5vZGUgKgkJdF9pbGlzdDsKKworCS8qIE51bWJlciBvZiBidWZmZXJzIG9uIHRoZSB0X2J1ZmZlcnMgbGlzdCAqLworCWludAkJCXRfbnJfYnVmZmVyczsKKworCS8qIERvdWJseS1saW5rZWQgY2lyY3VsYXIgbGlzdCBvZiBhbGwgYnVmZmVycyByZXNlcnZlZCBidXQgbm90CisgICAgICAgICAgIHlldCBtb2RpZmllZCBieSB0aGlzIHRyYW5zYWN0aW9uICovCisJc3RydWN0IGpvdXJuYWxfaGVhZCAqCXRfcmVzZXJ2ZWRfbGlzdDsKKworCS8qIERvdWJseS1saW5rZWQgY2lyY3VsYXIgbGlzdCBvZiBhbGwgbWV0YWRhdGEgYnVmZmVycyBvd25lZCBieSB0aGlzCisgICAgICAgICAgIHRyYW5zYWN0aW9uICovCisJc3RydWN0IGpvdXJuYWxfaGVhZCAqCXRfYnVmZmVyczsKKworCS8qCisJICogRG91Ymx5LWxpbmtlZCBjaXJjdWxhciBsaXN0IG9mIGFsbCBkYXRhIGJ1ZmZlcnMgc3RpbGwgdG8gYmUKKwkgKiBmbHVzaGVkIGJlZm9yZSB0aGlzIHRyYW5zYWN0aW9uIGNhbiBiZSBjb21taXR0ZWQuCisJICogUHJvdGVjdGVkIGJ5IGpvdXJuYWxfZGF0YWxpc3RfbG9jay4KKwkgKi8KKwlzdHJ1Y3Qgam91cm5hbF9oZWFkICoJdF9zeW5jX2RhdGFsaXN0OworCisJLyoKKwkgKiBEb3VibHktbGlua2VkIGNpcmN1bGFyIGxpc3Qgb2YgYWxsIHdyaXRlcGFnZSBkYXRhIGJ1ZmZlcnMKKwkgKiBzdGlsbCB0byBiZSB3cml0dGVuIGJlZm9yZSB0aGlzIHRyYW5zYWN0aW9uIGNhbiBiZSBjb21taXR0ZWQuCisJICogUHJvdGVjdGVkIGJ5IGpvdXJuYWxfZGF0YWxpc3RfbG9jay4KKwkgKi8KKwlzdHJ1Y3Qgam91cm5hbF9oZWFkICoJdF9hc3luY19kYXRhbGlzdDsKKworCS8qIERvdWJseS1saW5rZWQgY2lyY3VsYXIgbGlzdCBvZiBhbGwgZm9yZ2V0IGJ1ZmZlcnMgKHN1cGVyY2VkZWQKKyAgICAgICAgICAgYnVmZmVycyB3aGljaCB3ZSBjYW4gdW4tY2hlY2twb2ludCBvbmNlIHRoaXMgdHJhbnNhY3Rpb24KKyAgICAgICAgICAgY29tbWl0cykgKi8KKwlzdHJ1Y3Qgam91cm5hbF9oZWFkICoJdF9mb3JnZXQ7CisKKwkvKgorCSAqIERvdWJseS1saW5rZWQgY2lyY3VsYXIgbGlzdCBvZiBhbGwgYnVmZmVycyBzdGlsbCB0byBiZQorCSAqIGZsdXNoZWQgYmVmb3JlIHRoaXMgdHJhbnNhY3Rpb24gY2FuIGJlIGNoZWNrcG9pbnRlZC4KKwkgKi8KKwkvKiBQcm90ZWN0ZWQgYnkgam91cm5hbF9kYXRhbGlzdF9sb2NrICovCisJc3RydWN0IGpvdXJuYWxfaGVhZCAqCXRfY2hlY2twb2ludF9saXN0OworCisJLyogRG91Ymx5LWxpbmtlZCBjaXJjdWxhciBsaXN0IG9mIHRlbXBvcmFyeSBidWZmZXJzIGN1cnJlbnRseQorICAgICAgICAgICB1bmRlcmdvaW5nIElPIGluIHRoZSBsb2cgKi8KKwlzdHJ1Y3Qgam91cm5hbF9oZWFkICoJdF9pb2J1Zl9saXN0OworCisJLyogRG91Ymx5LWxpbmtlZCBjaXJjdWxhciBsaXN0IG9mIG1ldGFkYXRhIGJ1ZmZlcnMgYmVpbmcKKyAgICAgICAgICAgc2hhZG93ZWQgYnkgbG9nIElPLiAgVGhlIElPIGJ1ZmZlcnMgb24gdGhlIGlvYnVmIGxpc3QgYW5kIHRoZQorICAgICAgICAgICBzaGFkb3cgYnVmZmVycyBvbiB0aGlzIGxpc3QgbWF0Y2ggZWFjaCBvdGhlciBvbmUgZm9yIG9uZSBhdAorICAgICAgICAgICBhbGwgdGltZXMuICovCisJc3RydWN0IGpvdXJuYWxfaGVhZCAqCXRfc2hhZG93X2xpc3Q7CisKKwkvKiBEb3VibHktbGlua2VkIGNpcmN1bGFyIGxpc3Qgb2YgY29udHJvbCBidWZmZXJzIGJlaW5nIHdyaXR0ZW4KKyAgICAgICAgICAgdG8gdGhlIGxvZy4gKi8KKwlzdHJ1Y3Qgam91cm5hbF9oZWFkICoJdF9sb2dfbGlzdDsKKworCS8qIE51bWJlciBvZiBvdXRzdGFuZGluZyB1cGRhdGVzIHJ1bm5pbmcgb24gdGhpcyB0cmFuc2FjdGlvbiAqLworCWludAkJCXRfdXBkYXRlczsKKworCS8qIE51bWJlciBvZiBidWZmZXJzIHJlc2VydmVkIGZvciB1c2UgYnkgYWxsIGhhbmRsZXMgaW4gdGhpcworCSAqIHRyYW5zYWN0aW9uIGhhbmRsZSBidXQgbm90IHlldCBtb2RpZmllZC4gKi8KKwlpbnQJCQl0X291dHN0YW5kaW5nX2NyZWRpdHM7CisKKwkvKgorCSAqIEZvcndhcmQgYW5kIGJhY2t3YXJkIGxpbmtzIGZvciB0aGUgY2lyY3VsYXIgbGlzdCBvZiBhbGwKKwkgKiB0cmFuc2FjdGlvbnMgYXdhaXRpbmcgY2hlY2twb2ludC4KKwkgKi8KKwkvKiBQcm90ZWN0ZWQgYnkgam91cm5hbF9kYXRhbGlzdF9sb2NrICovCisJdHJhbnNhY3Rpb25fdAkJKnRfY3BuZXh0LCAqdF9jcHByZXY7CisKKwkvKiBXaGVuIHdpbGwgdGhlIHRyYW5zYWN0aW9uIGV4cGlyZSAoYmVjb21lIGR1ZSBmb3IgY29tbWl0KSwgaW4KKwkgKiBqaWZmaWVzID8gKi8KKwl1bnNpZ25lZCBsb25nCQl0X2V4cGlyZXM7CisKKwkvKiBIb3cgbWFueSBoYW5kbGVzIHVzZWQgdGhpcyB0cmFuc2FjdGlvbj8gKi8KKwlpbnQgdF9oYW5kbGVfY291bnQ7Cit9OworCisKKy8qIFRoZSBqb3VybmFsX3QgbWFpbnRhaW5zIGFsbCBvZiB0aGUgam91cm5hbGluZyBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgYQorICogc2luZ2xlIGZpbGVzeXN0ZW0uICBJdCBpcyBsaW5rZWQgdG8gZnJvbSB0aGUgZnMgc3VwZXJibG9jayBzdHJ1Y3R1cmUuCisgKgorICogV2UgdXNlIHRoZSBqb3VybmFsX3QgdG8ga2VlcCB0cmFjayBvZiBhbGwgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb24KKyAqIGFjdGl2aXR5IG9uIHRoZSBmaWxlc3lzdGVtLCBhbmQgdG8gbWFuYWdlIHRoZSBzdGF0ZSBvZiB0aGUgbG9nCisgKiB3cml0aW5nIHByb2Nlc3MuICovCisKK3N0cnVjdCBqb3VybmFsX3MKK3sKKwkvKiBHZW5lcmFsIGpvdXJuYWxpbmcgc3RhdGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBsb25nCQlqX2ZsYWdzOworCisJLyogSXMgdGhlcmUgYW4gb3V0c3RhbmRpbmcgdW5jbGVhcmVkIGVycm9yIG9uIHRoZSBqb3VybmFsIChmcm9tCisJICogYSBwcmlvciBhYm9ydCk/ICovCisJaW50CQkJal9lcnJubzsKKworCS8qIFRoZSBzdXBlcmJsb2NrIGJ1ZmZlciAqLworCXN0cnVjdCBidWZmZXJfaGVhZCAqCWpfc2JfYnVmZmVyOworCWpvdXJuYWxfc3VwZXJibG9ja190ICoJal9zdXBlcmJsb2NrOworCisJLyogVmVyc2lvbiBvZiB0aGUgc3VwZXJibG9jayBmb3JtYXQgKi8KKwlpbnQJCQlqX2Zvcm1hdF92ZXJzaW9uOworCisJLyogTnVtYmVyIG9mIHByb2Nlc3NlcyB3YWl0aW5nIHRvIGNyZWF0ZSBhIGJhcnJpZXIgbG9jayAqLworCWludAkJCWpfYmFycmllcl9jb3VudDsKKworCS8qIFRoZSBiYXJyaWVyIGxvY2sgaXRzZWxmICovCisJc3RydWN0IHNlbWFwaG9yZQlqX2JhcnJpZXI7CisKKwkvKiBUcmFuc2FjdGlvbnM6IFRoZSBjdXJyZW50IHJ1bm5pbmcgdHJhbnNhY3Rpb24uLi4gKi8KKwl0cmFuc2FjdGlvbl90ICoJCWpfcnVubmluZ190cmFuc2FjdGlvbjsKKworCS8qIC4uLiB0aGUgdHJhbnNhY3Rpb24gd2UgYXJlIHB1c2hpbmcgdG8gZGlzayAuLi4gKi8KKwl0cmFuc2FjdGlvbl90ICoJCWpfY29tbWl0dGluZ190cmFuc2FjdGlvbjsKKworCS8qIC4uLiBhbmQgYSBsaW5rZWQgY2lyY3VsYXIgbGlzdCBvZiBhbGwgdHJhbnNhY3Rpb25zIHdhaXRpbmcKKwkgKiBmb3IgY2hlY2twb2ludGluZy4gKi8KKwkvKiBQcm90ZWN0ZWQgYnkgam91cm5hbF9kYXRhbGlzdF9sb2NrICovCisJdHJhbnNhY3Rpb25fdCAqCQlqX2NoZWNrcG9pbnRfdHJhbnNhY3Rpb25zOworCisJLyogV2FpdCBxdWV1ZSBmb3Igd2FpdGluZyBmb3IgYSBsb2NrZWQgdHJhbnNhY3Rpb24gdG8gc3RhcnQKKyAgICAgICAgICAgY29tbWl0dGluZywgb3IgZm9yIGEgYmFycmllciBsb2NrIHRvIGJlIHJlbGVhc2VkICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJal93YWl0X3RyYW5zYWN0aW9uX2xvY2tlZDsKKworCS8qIFdhaXQgcXVldWUgZm9yIHdhaXRpbmcgZm9yIGNoZWNrcG9pbnRpbmcgdG8gY29tcGxldGUgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAlqX3dhaXRfbG9nc3BhY2U7CisKKwkvKiBXYWl0IHF1ZXVlIGZvciB3YWl0aW5nIGZvciBjb21taXQgdG8gY29tcGxldGUgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAlqX3dhaXRfZG9uZV9jb21taXQ7CisKKwkvKiBXYWl0IHF1ZXVlIHRvIHRyaWdnZXIgY2hlY2twb2ludGluZyAqLworCXdhaXRfcXVldWVfaGVhZF90CWpfd2FpdF9jaGVja3BvaW50OworCisJLyogV2FpdCBxdWV1ZSB0byB0cmlnZ2VyIGNvbW1pdCAqLworCXdhaXRfcXVldWVfaGVhZF90CWpfd2FpdF9jb21taXQ7CisKKwkvKiBXYWl0IHF1ZXVlIHRvIHdhaXQgZm9yIHVwZGF0ZXMgdG8gY29tcGxldGUgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAlqX3dhaXRfdXBkYXRlczsKKworCS8qIFNlbWFwaG9yZSBmb3IgbG9ja2luZyBhZ2FpbnN0IGNvbmN1cnJlbnQgY2hlY2twb2ludHMgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIAlqX2NoZWNrcG9pbnRfc2VtOworCisJLyogVGhlIG1haW4gam91cm5hbCBsb2NrLCB1c2VkIGJ5IGxvY2tfam91cm5hbCgpICovCisJc3RydWN0IHNlbWFwaG9yZQlqX3NlbTsKKworCS8qIEpvdXJuYWwgaGVhZDogaWRlbnRpZmllcyB0aGUgZmlyc3QgdW51c2VkIGJsb2NrIGluIHRoZSBqb3VybmFsLiAqLworCXVuc2lnbmVkIGxvbmcJCWpfaGVhZDsKKworCS8qIEpvdXJuYWwgdGFpbDogaWRlbnRpZmllcyB0aGUgb2xkZXN0IHN0aWxsLXVzZWQgYmxvY2sgaW4gdGhlCisJICogam91cm5hbC4gKi8KKwl1bnNpZ25lZCBsb25nCQlqX3RhaWw7CisKKwkvKiBKb3VybmFsIGZyZWU6IGhvdyBtYW55IGZyZWUgYmxvY2tzIGFyZSB0aGVyZSBpbiB0aGUgam91cm5hbD8gKi8KKwl1bnNpZ25lZCBsb25nCQlqX2ZyZWU7CisKKwkvKiBKb3VybmFsIHN0YXJ0IGFuZCBlbmQ6IHRoZSBibG9jayBudW1iZXJzIG9mIHRoZSBmaXJzdCB1c2FibGUKKwkgKiBibG9jayBhbmQgb25lIGJleW9uZCB0aGUgbGFzdCB1c2FibGUgYmxvY2sgaW4gdGhlIGpvdXJuYWwuICovCisJdW5zaWduZWQgbG9uZwkJal9maXJzdCwgal9sYXN0OworCisJLyogRGV2aWNlLCBibG9ja3NpemUgYW5kIHN0YXJ0aW5nIGJsb2NrIG9mZnNldCBmb3IgdGhlIGxvY2F0aW9uCisJICogd2hlcmUgd2Ugc3RvcmUgdGhlIGpvdXJuYWwuICovCisJa2Rldl90CQkJal9kZXY7CisJaW50CQkJal9ibG9ja3NpemU7CisJdW5zaWduZWQgaW50CQlqX2Jsa19vZmZzZXQ7CisKKwkvKiBEZXZpY2Ugd2hpY2ggaG9sZHMgdGhlIGNsaWVudCBmcy4gIEZvciBpbnRlcm5hbCBqb3VybmFsIHRoaXMKKwkgKiB3aWxsIGJlIGVxdWFsIHRvIGpfZGV2LiAqLworCWtkZXZfdAkJCWpfZnNfZGV2OworCisJLyogVG90YWwgbWF4aW11bSBjYXBhY2l0eSBvZiB0aGUgam91cm5hbCByZWdpb24gb24gZGlzay4gKi8KKwl1bnNpZ25lZCBpbnQJCWpfbWF4bGVuOworCisJLyogT3B0aW9uYWwgaW5vZGUgd2hlcmUgd2Ugc3RvcmUgdGhlIGpvdXJuYWwuICBJZiBwcmVzZW50LCBhbGwKKwkgKiBqb3VybmFsIGJsb2NrIG51bWJlcnMgYXJlIG1hcHBlZCBpbnRvIHRoaXMgaW5vZGUgdmlhCisJICogYm1hcCgpLiAqLworCXN0cnVjdCBpbm9kZSAqCQlqX2lub2RlOworCisJLyogU2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBvbGRlc3QgdHJhbnNhY3Rpb24gaW4gdGhlIGxvZyAqLworCXRpZF90CQkJal90YWlsX3NlcXVlbmNlOworCS8qIFNlcXVlbmNlIG51bWJlciBvZiB0aGUgbmV4dCB0cmFuc2FjdGlvbiB0byBncmFudCAqLworCXRpZF90CQkJal90cmFuc2FjdGlvbl9zZXF1ZW5jZTsKKwkvKiBTZXF1ZW5jZSBudW1iZXIgb2YgdGhlIG1vc3QgcmVjZW50bHkgY29tbWl0dGVkIHRyYW5zYWN0aW9uICovCisJdGlkX3QJCQlqX2NvbW1pdF9zZXF1ZW5jZTsKKwkvKiBTZXF1ZW5jZSBudW1iZXIgb2YgdGhlIG1vc3QgcmVjZW50IHRyYW5zYWN0aW9uIHdhbnRpbmcgY29tbWl0ICovCisJdGlkX3QJCQlqX2NvbW1pdF9yZXF1ZXN0OworCisJLyogSm91cm5hbCB1dWlkOiBpZGVudGlmaWVzIHRoZSBvYmplY3QgKGZpbGVzeXN0ZW0sIExWTSB2b2x1bWUKKwkgKiBldGMpIGJhY2tlZCBieSB0aGlzIGpvdXJuYWwuICBUaGlzIHdpbGwgZXZlbnR1YWxseSBiZQorCSAqIHJlcGxhY2VkIGJ5IGFuIGFycmF5IG9mIHV1aWRzLCBhbGxvd2luZyB1cyB0byBpbmRleCBtdWx0aXBsZQorCSAqIGRldmljZXMgd2l0aGluIGEgc2luZ2xlIGpvdXJuYWwgYW5kIHRvIHBlcmZvcm0gYXRvbWljIHVwZGF0ZXMKKwkgKiBhY3Jvc3MgdGhlbS4gICovCisKKwlfX3U4CQkJal91dWlkWzE2XTsKKworCS8qIFBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgY29tbWl0IHRocmVhZCBmb3IgdGhpcyBqb3VybmFsICovCisJc3RydWN0IHRhc2tfc3RydWN0ICoJal90YXNrOworCisJLyogTWF4aW11bSBudW1iZXIgb2YgbWV0YWRhdGEgYnVmZmVycyB0byBhbGxvdyBpbiBhIHNpbmdsZQorCSAqIGNvbXBvdW5kIGNvbW1pdCB0cmFuc2FjdGlvbiAqLworCWludAkJCWpfbWF4X3RyYW5zYWN0aW9uX2J1ZmZlcnM7CisKKwkvKiBXaGF0IGlzIHRoZSBtYXhpbXVtIHRyYW5zYWN0aW9uIGxpZmV0aW1lIGJlZm9yZSB3ZSBiZWdpbiBhCisJICogY29tbWl0PyAqLworCXVuc2lnbmVkIGxvbmcJCWpfY29tbWl0X2ludGVydmFsOworCisJLyogVGhlIHRpbWVyIHVzZWQgdG8gd2FrZXVwIHRoZSBjb21taXQgdGhyZWFkOiAqLworCXN0cnVjdCB0aW1lcl9saXN0ICoJal9jb21taXRfdGltZXI7CisJaW50CQkJal9jb21taXRfdGltZXJfYWN0aXZlOworCisJLyogTGluayBhbGwgam91cm5hbHMgdG9nZXRoZXIgLSBzeXN0ZW0td2lkZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJal9hbGxfam91cm5hbHM7CisKKwkvKiBUaGUgcmV2b2tlIHRhYmxlOiBtYWludGFpbnMgdGhlIGxpc3Qgb2YgcmV2b2tlZCBibG9ja3MgaW4gdGhlCisgICAgICAgICAgIGN1cnJlbnQgdHJhbnNhY3Rpb24uICovCisJc3RydWN0IGpiZF9yZXZva2VfdGFibGVfcyAqal9yZXZva2U7CisKKwkvKiBGYWlsZWQgam91cm5hbCBjb21taXQgSUQgKi8KKwl1bnNpZ25lZCBpbnQJCWpfZmFpbGVkX2NvbW1pdDsKK307CisKKy8qCisgKiBKb3VybmFsIGZsYWcgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBKRlNfVU5NT1VOVAkweDAwMQkvKiBKb3VybmFsIHRocmVhZCBpcyBiZWluZyBkZXN0cm95ZWQgKi8KKyNkZWZpbmUgSkZTX0FCT1JUCTB4MDAyCS8qIEpvdXJuYWxpbmcgaGFzIGJlZW4gYWJvcnRlZCBmb3IgZXJyb3JzLiAqLworI2RlZmluZSBKRlNfQUNLX0VSUgkweDAwNAkvKiBUaGUgZXJybm8gaW4gdGhlIHNiIGhhcyBiZWVuIGFja2VkICovCisjZGVmaW5lIEpGU19GTFVTSEVECTB4MDA4CS8qIFRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGJlZW4gZmx1c2hlZCAqLworI2RlZmluZSBKRlNfTE9BREVECTB4MDEwCS8qIFRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGJlZW4gbG9hZGVkICovCisKKy8qCisgKiBGdW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBqb3VybmFsaW5nIHRyYW5zYWN0aW9uIGFuZCBidWZmZXIKKyAqIG1hbmFnZW1lbnQKKyAqLworCisvKiBGaWxpbmcgYnVmZmVycyAqLworZXh0ZXJuIHZvaWQgX19qb3VybmFsX3VuZmlsZV9idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqKTsKK2V4dGVybiB2b2lkIGpvdXJuYWxfdW5maWxlX2J1ZmZlcihzdHJ1Y3Qgam91cm5hbF9oZWFkICopOworZXh0ZXJuIHZvaWQgX19qb3VybmFsX3JlZmlsZV9idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqKTsKK2V4dGVybiB2b2lkIGpvdXJuYWxfcmVmaWxlX2J1ZmZlcihzdHJ1Y3Qgam91cm5hbF9oZWFkICopOworZXh0ZXJuIHZvaWQgX19qb3VybmFsX2ZpbGVfYnVmZmVyKHN0cnVjdCBqb3VybmFsX2hlYWQgKiwgdHJhbnNhY3Rpb25fdCAqLCBpbnQpOworZXh0ZXJuIHZvaWQgX19qb3VybmFsX2ZyZWVfYnVmZmVyKHN0cnVjdCBqb3VybmFsX2hlYWQgKmJoKTsKK2V4dGVybiB2b2lkIGpvdXJuYWxfZmlsZV9idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqLCB0cmFuc2FjdGlvbl90ICosIGludCk7CitleHRlcm4gdm9pZCBfX2pvdXJuYWxfY2xlYW5fZGF0YV9saXN0KHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uKTsKKworLyogTG9nIGJ1ZmZlciBhbGxvY2F0aW9uICovCitleHRlcm4gc3RydWN0IGpvdXJuYWxfaGVhZCAqIGpvdXJuYWxfZ2V0X2Rlc2NyaXB0b3JfYnVmZmVyKGpvdXJuYWxfdCAqKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGpvdXJuYWxfbmV4dF9sb2dfYmxvY2soam91cm5hbF90ICopOworCisvKiBDb21taXQgbWFuYWdlbWVudCAqLworZXh0ZXJuIHZvaWQgam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24oam91cm5hbF90ICopOworCisvKiBDaGVja3BvaW50IGxpc3QgbWFuYWdlbWVudCAqLworaW50IF9fam91cm5hbF9jbGVhbl9jaGVja3BvaW50X2xpc3Qoam91cm5hbF90ICpqb3VybmFsKTsKK2V4dGVybiB2b2lkIGpvdXJuYWxfcmVtb3ZlX2NoZWNrcG9pbnQoc3RydWN0IGpvdXJuYWxfaGVhZCAqKTsKK2V4dGVybiB2b2lkIF9fam91cm5hbF9yZW1vdmVfY2hlY2twb2ludChzdHJ1Y3Qgam91cm5hbF9oZWFkICopOworZXh0ZXJuIHZvaWQgam91cm5hbF9pbnNlcnRfY2hlY2twb2ludChzdHJ1Y3Qgam91cm5hbF9oZWFkICosIHRyYW5zYWN0aW9uX3QgKik7CitleHRlcm4gdm9pZCBfX2pvdXJuYWxfaW5zZXJ0X2NoZWNrcG9pbnQoc3RydWN0IGpvdXJuYWxfaGVhZCAqLHRyYW5zYWN0aW9uX3QgKik7CisKKy8qIEJ1ZmZlciBJTyAqLworZXh0ZXJuIGludAoram91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdAkgICp0cmFuc2FjdGlvbiwKKwkJCSAgICAgIHN0cnVjdCBqb3VybmFsX2hlYWQgICpqaF9pbiwKKwkJCSAgICAgIHN0cnVjdCBqb3VybmFsX2hlYWQgKipqaF9vdXQsCisJCQkgICAgICBpbnQJCSAgIGJsb2NrbnIpOworCisvKiBUcmFuc2FjdGlvbiBsb2NraW5nICovCitleHRlcm4gdm9pZAkJX193YWl0X29uX2pvdXJuYWwgKGpvdXJuYWxfdCAqKTsKKworLyoKKyAqIEpvdXJuYWwgbG9ja2luZy4KKyAqCisgKiBXZSBuZWVkIHRvIGxvY2sgdGhlIGpvdXJuYWwgZHVyaW5nIHRyYW5zYWN0aW9uIHN0YXRlIGNoYW5nZXMgc28gdGhhdAorICogbm9ib2R5IGV2ZXIgdHJpZXMgdG8gdGFrZSBhIGhhbmRsZSBvbiB0aGUgcnVubmluZyB0cmFuc2FjdGlvbiB3aGlsZQorICogd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgbW92aW5nIGl0IHRvIHRoZSBjb21taXQgcGhhc2UuCisgKgorICogTm90ZSB0aGF0IHRoZSBsb2NraW5nIGlzIGNvbXBsZXRlbHkgaW50ZXJydXB0IHVuc2FmZS4gIFdlIG5ldmVyIHRvdWNoCisgKiBqb3VybmFsIHN0cnVjdHVyZXMgZnJvbSBpbnRlcnJ1cHRzLgorICoKKyAqIEluIDIuMiwgdGhlIEJLTCB3YXMgcmVxdWlyZWQgZm9yIGxvY2tfam91cm5hbC4gIFRoaXMgaXMgbm8gbG9uZ2VyCisgKiB0aGUgY2FzZS4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19qb3VybmFsKGpvdXJuYWxfdCAqam91cm5hbCkKK3sKKwlkb3duKCZqb3VybmFsLT5qX3NlbSk7Cit9CisKKy8qIFRoaXMgcmV0dXJucyB6ZXJvIGlmIHdlIGFjcXVpcmVkIHRoZSBzZW1hcGhvcmUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRyeV9sb2NrX2pvdXJuYWwoam91cm5hbF90ICogam91cm5hbCkKK3sKKwlyZXR1cm4gZG93bl90cnlsb2NrKCZqb3VybmFsLT5qX3NlbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfam91cm5hbChqb3VybmFsX3QgKiBqb3VybmFsKQoreworCXVwKCZqb3VybmFsLT5qX3NlbSk7Cit9CisKKworc3RhdGljIGlubGluZSBoYW5kbGVfdCAqam91cm5hbF9jdXJyZW50X2hhbmRsZSh2b2lkKQoreworCXJldHVybiBjdXJyZW50LT5qb3VybmFsX2luZm87Cit9CisKKy8qIFRoZSBqb3VybmFsaW5nIGNvZGUgdXNlciBpbnRlcmZhY2U6CisgKgorICogQ3JlYXRlIGFuZCBkZXN0cm95IGhhbmRsZXMKKyAqIFJlZ2lzdGVyIGJ1ZmZlciBtb2RpZmljYXRpb25zIGFnYWluc3QgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCisgKi8KKworZXh0ZXJuIGhhbmRsZV90ICpqb3VybmFsX3N0YXJ0KGpvdXJuYWxfdCAqLCBpbnQgbmJsb2Nrcyk7CitleHRlcm4gaGFuZGxlX3QgKmpvdXJuYWxfdHJ5X3N0YXJ0KGpvdXJuYWxfdCAqLCBpbnQgbmJsb2Nrcyk7CitleHRlcm4gaW50CSBqb3VybmFsX3Jlc3RhcnQgKGhhbmRsZV90ICosIGludCBuYmxvY2tzKTsKK2V4dGVybiBpbnQJIGpvdXJuYWxfZXh0ZW5kIChoYW5kbGVfdCAqLCBpbnQgbmJsb2Nrcyk7CitleHRlcm4gaW50CSBqb3VybmFsX2dldF93cml0ZV9hY2Nlc3MgKGhhbmRsZV90ICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKK2V4dGVybiBpbnQJIGpvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MgKGhhbmRsZV90ICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKK2V4dGVybiBpbnQJIGpvdXJuYWxfZ2V0X3VuZG9fYWNjZXNzIChoYW5kbGVfdCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CitleHRlcm4gaW50CSBqb3VybmFsX2RpcnR5X2RhdGEgKGhhbmRsZV90ICosCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCBhc3luYyk7CitleHRlcm4gaW50CSBqb3VybmFsX2RpcnR5X21ldGFkYXRhIChoYW5kbGVfdCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CitleHRlcm4gdm9pZAkgam91cm5hbF9yZWxlYXNlX2J1ZmZlciAoaGFuZGxlX3QgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOworZXh0ZXJuIHZvaWQJIGpvdXJuYWxfZm9yZ2V0IChoYW5kbGVfdCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CitleHRlcm4gdm9pZAkgam91cm5hbF9zeW5jX2J1ZmZlciAoc3RydWN0IGJ1ZmZlcl9oZWFkICopOworZXh0ZXJuIGludAkgam91cm5hbF9mbHVzaHBhZ2Uoam91cm5hbF90ICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGludAkgam91cm5hbF90cnlfdG9fZnJlZV9idWZmZXJzKGpvdXJuYWxfdCAqLCBzdHJ1Y3QgcGFnZSAqLCBpbnQpOworZXh0ZXJuIGludAkgam91cm5hbF9zdG9wKGhhbmRsZV90ICopOworZXh0ZXJuIGludAkgam91cm5hbF9mbHVzaCAoam91cm5hbF90ICopOworCitleHRlcm4gdm9pZAkgam91cm5hbF9sb2NrX3VwZGF0ZXMgKGpvdXJuYWxfdCAqKTsKK2V4dGVybiB2b2lkCSBqb3VybmFsX3VubG9ja191cGRhdGVzIChqb3VybmFsX3QgKik7CisKK2V4dGVybiBqb3VybmFsX3QgKiBqb3VybmFsX2luaXRfZGV2KGtkZXZfdCBkZXYsIGtkZXZfdCBmc19kZXYsCisJCQkJaW50IHN0YXJ0LCBpbnQgbGVuLCBpbnQgYnNpemUpOworZXh0ZXJuIGpvdXJuYWxfdCAqIGpvdXJuYWxfaW5pdF9pbm9kZSAoc3RydWN0IGlub2RlICopOworZXh0ZXJuIGludAkgICBqb3VybmFsX3VwZGF0ZV9mb3JtYXQgKGpvdXJuYWxfdCAqKTsKK2V4dGVybiBpbnQJICAgam91cm5hbF9jaGVja191c2VkX2ZlYXR1cmVzCisJCSAgIChqb3VybmFsX3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfY2hlY2tfYXZhaWxhYmxlX2ZlYXR1cmVzCisJCSAgIChqb3VybmFsX3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfc2V0X2ZlYXR1cmVzCisJCSAgIChqb3VybmFsX3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfY3JlYXRlICAgICAoam91cm5hbF90ICopOworZXh0ZXJuIGludAkgICBqb3VybmFsX2xvYWQgICAgICAgKGpvdXJuYWxfdCAqam91cm5hbCk7CitleHRlcm4gdm9pZAkgICBqb3VybmFsX2Rlc3Ryb3kgICAgKGpvdXJuYWxfdCAqKTsKK2V4dGVybiBpbnQJICAgam91cm5hbF9yZWNvdmVyICAgIChqb3VybmFsX3QgKmpvdXJuYWwpOworZXh0ZXJuIGludAkgICBqb3VybmFsX3dpcGUgICAgICAgKGpvdXJuYWxfdCAqLCBpbnQpOworZXh0ZXJuIGludAkgICBqb3VybmFsX3NraXBfcmVjb3ZlcnkgKGpvdXJuYWxfdCAqKTsKK2V4dGVybiB2b2lkCSAgIGpvdXJuYWxfdXBkYXRlX3N1cGVyYmxvY2sgKGpvdXJuYWxfdCAqLCBpbnQpOworZXh0ZXJuIHZvaWQJICAgX19qb3VybmFsX2Fib3J0ICAgICAgKGpvdXJuYWxfdCAqKTsKK2V4dGVybiB2b2lkCSAgIGpvdXJuYWxfYWJvcnQgICAgICAoam91cm5hbF90ICosIGludCk7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfZXJybm8gICAgICAoam91cm5hbF90ICopOworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9hY2tfZXJyICAgIChqb3VybmFsX3QgKik7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfY2xlYXJfZXJyICAoam91cm5hbF90ICopOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgam91cm5hbF9ibWFwKGpvdXJuYWxfdCAqam91cm5hbCwgdW5zaWduZWQgbG9uZyBibG9ja25yKTsKK2V4dGVybiBpbnQJICAgIGpvdXJuYWxfZm9yY2VfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCk7CisKKy8qCisgKiBqb3VybmFsX2hlYWQgbWFuYWdlbWVudAorICovCitleHRlcm4gc3RydWN0IGpvdXJuYWxfaGVhZAorCQkqam91cm5hbF9hZGRfam91cm5hbF9oZWFkKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOworZXh0ZXJuIHZvaWQJam91cm5hbF9yZW1vdmVfam91cm5hbF9oZWFkKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOworZXh0ZXJuIHZvaWQJX19qb3VybmFsX3JlbW92ZV9qb3VybmFsX2hlYWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CitleHRlcm4gdm9pZAlqb3VybmFsX3VubG9ja19qb3VybmFsX2hlYWQoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgpOworCisvKiBQcmltYXJ5IHJldm9rZSBzdXBwb3J0ICovCisjZGVmaW5lIEpPVVJOQUxfUkVWT0tFX0RFRkFVTFRfSEFTSCAyNTYKK2V4dGVybiBpbnQJICAgam91cm5hbF9pbml0X3Jldm9rZShqb3VybmFsX3QgKiwgaW50KTsKK2V4dGVybiB2b2lkCSAgIGpvdXJuYWxfZGVzdHJveV9yZXZva2VfY2FjaGVzKHZvaWQpOworZXh0ZXJuIGludAkgICBqb3VybmFsX2luaXRfcmV2b2tlX2NhY2hlcyh2b2lkKTsKKworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9kZXN0cm95X3Jldm9rZShqb3VybmFsX3QgKik7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfcmV2b2tlIChoYW5kbGVfdCAqLAorCQkJCXVuc2lnbmVkIGxvbmcsIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKK2V4dGVybiBpbnQJICAgam91cm5hbF9jYW5jZWxfcmV2b2tlKGhhbmRsZV90ICosIHN0cnVjdCBqb3VybmFsX2hlYWQgKik7CitleHRlcm4gdm9pZAkgICBqb3VybmFsX3dyaXRlX3Jldm9rZV9yZWNvcmRzKGpvdXJuYWxfdCAqLCB0cmFuc2FjdGlvbl90ICopOworCisvKiBSZWNvdmVyeSByZXZva2Ugc3VwcG9ydCAqLworZXh0ZXJuIGludAkgICBqb3VybmFsX3NldF9yZXZva2Uoam91cm5hbF90ICosIHVuc2lnbmVkIGxvbmcsIHRpZF90KTsKK2V4dGVybiBpbnQJICAgam91cm5hbF90ZXN0X3Jldm9rZShqb3VybmFsX3QgKiwgdW5zaWduZWQgbG9uZywgdGlkX3QpOworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9jbGVhcl9yZXZva2Uoam91cm5hbF90ICopOworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9icmVsc2VfYXJyYXkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiW10sIGludCBuKTsKKworLyogVGhlIGxvZyB0aHJlYWQgdXNlciBpbnRlcmZhY2U6CisgKgorICogUmVxdWVzdCBzcGFjZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgYW5kIGZvcmNlIHRyYW5zYWN0aW9uIGNvbW1pdAorICogdHJhbnNpdGlvbnMgb24gZGVtYW5kLgorICovCisKK2V4dGVybiBpbnQJbG9nX3NwYWNlX2xlZnQgKGpvdXJuYWxfdCAqKTsgLyogQ2FsbGVkIHdpdGggam91cm5hbCBsb2NrZWQgKi8KK2V4dGVybiB0aWRfdAlsb2dfc3RhcnRfY29tbWl0IChqb3VybmFsX3QgKiwgdHJhbnNhY3Rpb25fdCAqKTsKK2V4dGVybiB2b2lkCWxvZ193YWl0X2NvbW1pdCAoam91cm5hbF90ICosIHRpZF90KTsKK2V4dGVybiBpbnQJbG9nX2RvX2NoZWNrcG9pbnQgKGpvdXJuYWxfdCAqLCBpbnQpOworCitleHRlcm4gdm9pZAlsb2dfd2FpdF9mb3Jfc3BhY2Uoam91cm5hbF90ICosIGludCBuYmxvY2tzKTsKK2V4dGVybiB2b2lkCV9fam91cm5hbF9kcm9wX3RyYW5zYWN0aW9uKGpvdXJuYWxfdCAqLCB0cmFuc2FjdGlvbl90ICopOworZXh0ZXJuIGludAljbGVhbnVwX2pvdXJuYWxfdGFpbChqb3VybmFsX3QgKik7CisKKy8qIFJlZHVjZSBqb3VybmFsIG1lbW9yeSB1c2FnZSBieSBmbHVzaGluZyAqLworZXh0ZXJuIHZvaWQgc2hyaW5rX2pvdXJuYWxfbWVtb3J5KHZvaWQpOworCisvKiBEZWJ1Z2dpbmcgY29kZSBvbmx5OiAqLworCisjZGVmaW5lIGpiZF9FTk9TWVMoKSBcCitkbyB7CQkJCQkJCQkgICAgICBcCisJcHJpbnRrIChLRVJOX0VSUiAiSkJEIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb24gIiBfX0ZVTkNUSU9OX18pOyBcCisJY3VycmVudC0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJMRTsJCQkgICAgICBcCisJc2NoZWR1bGUoKTsJCQkJCQkgICAgICBcCit9IHdoaWxlICgxKQorCisvKgorICogaXNfam91cm5hbF9hYm9ydAorICoKKyAqIFNpbXBsZSB0ZXN0IHdyYXBwZXIgZnVuY3Rpb24gdG8gdGVzdCB0aGUgSkZTX0FCT1JUIHN0YXRlIGZsYWcuICBUaGlzCisgKiBiaXQsIHdoZW4gc2V0LCBpbmRpY2F0ZXMgdGhhdCB3ZSBoYXZlIGhhZCBhIGZhdGFsIGVycm9yIHNvbWV3aGVyZSwKKyAqIGVpdGhlciBpbnNpZGUgdGhlIGpvdXJuYWxpbmcgbGF5ZXIgb3IgaW5kaWNhdGVkIHRvIHVzIGJ5IHRoZSBjbGllbnQKKyAqIChlZy4gZXh0MyksIGFuZCB0aGF0IHdlIGFuZCBzaG91bGQgbm90IGNvbW1pdCBhbnkgZnVydGhlcgorICogdHJhbnNhY3Rpb25zLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsX3QgKmpvdXJuYWwpCit7CisJcmV0dXJuIGpvdXJuYWwtPmpfZmxhZ3MgJiBKRlNfQUJPUlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2hhbmRsZV9hYm9ydGVkKGhhbmRsZV90ICpoYW5kbGUpCit7CisJaWYgKGhhbmRsZS0+aF9hYm9ydGVkKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gaXNfam91cm5hbF9hYm9ydGVkKGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF9qb3VybmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGpvdXJuYWxfYWJvcnRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUpCit7CisJaGFuZGxlLT5oX2Fib3J0ZWQgPSAxOworfQorCisvKiBOb3QgYWxsIGFyY2hpdGVjdHVyZXMgZGVmaW5lIEJVRygpICovCisjaWZuZGVmIEJVRworI2RlZmluZSBCVUcoKSBkbyB7IFwKKyAgICAgICAgcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorCSogKChjaGFyICopIDApID0gMDsgXAorIH0gd2hpbGUgKDApCisjZW5kaWYgLyogQlVHICovCisKKyNlbHNlCisKK2V4dGVybiBpbnQJICAgam91cm5hbF9yZWNvdmVyICAgIChqb3VybmFsX3QgKmpvdXJuYWwpOworZXh0ZXJuIGludAkgICBqb3VybmFsX3NraXBfcmVjb3ZlcnkgKGpvdXJuYWxfdCAqKTsKKworLyogUHJpbWFyeSByZXZva2Ugc3VwcG9ydCAqLworZXh0ZXJuIGludAkgICBqb3VybmFsX2luaXRfcmV2b2tlKGpvdXJuYWxfdCAqLCBpbnQpOworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9kZXN0cm95X3Jldm9rZV9jYWNoZXModm9pZCk7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfaW5pdF9yZXZva2VfY2FjaGVzKHZvaWQpOworCisvKiBSZWNvdmVyeSByZXZva2Ugc3VwcG9ydCAqLworZXh0ZXJuIGludAkgICBqb3VybmFsX3NldF9yZXZva2Uoam91cm5hbF90ICosIHVuc2lnbmVkIGxvbmcsIHRpZF90KTsKK2V4dGVybiBpbnQJICAgam91cm5hbF90ZXN0X3Jldm9rZShqb3VybmFsX3QgKiwgdW5zaWduZWQgbG9uZywgdGlkX3QpOworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9jbGVhcl9yZXZva2Uoam91cm5hbF90ICopOworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9icmVsc2VfYXJyYXkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiW10sIGludCBuKTsKKworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9kZXN0cm95X3Jldm9rZShqb3VybmFsX3QgKik7CisjZW5kaWYgLyogX19LRVJORUxfXyAgICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHRpZF9ndCh0aWRfdCB4LCB0aWRfdCB5KSBFWFQyRlNfQVRUUigodW51c2VkKSk7CitzdGF0aWMgaW5saW5lIGludCB0aWRfZ2VxKHRpZF90IHgsIHRpZF90IHkpIEVYVDJGU19BVFRSKCh1bnVzZWQpKTsKKworLyogQ29tcGFyaXNvbiBmdW5jdGlvbnMgZm9yIHRyYW5zYWN0aW9uIElEczogcGVyZm9ybSBjb21wYXJpc29ucyB1c2luZworICogbW9kdWxvIGFyaXRobWV0aWMgc28gdGhhdCB0aGV5IHdvcmsgb3ZlciBzZXF1ZW5jZSBudW1iZXIgd3JhcHMuICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHRpZF9ndCh0aWRfdCB4LCB0aWRfdCB5KQoreworCWludCBkaWZmZXJlbmNlID0gKHggLSB5KTsKKwlyZXR1cm4gKGRpZmZlcmVuY2UgPiAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGlkX2dlcSh0aWRfdCB4LCB0aWRfdCB5KQoreworCWludCBkaWZmZXJlbmNlID0gKHggLSB5KTsKKwlyZXR1cm4gKGRpZmZlcmVuY2UgPj0gMCk7Cit9CisKK2V4dGVybiBpbnQgam91cm5hbF9ibG9ja3NfcGVyX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSk7CisKKy8qCisgKiBEZWZpbml0aW9ucyB3aGljaCBhdWdtZW50IHRoZSBidWZmZXJfaGVhZCBsYXllcgorICovCisKKy8qIGpvdXJuYWxpbmcgYnVmZmVyIHR5cGVzICovCisjZGVmaW5lIEJKX05vbmUJCTAJLyogTm90IGpvdXJuYWxlZCAqLworI2RlZmluZSBCSl9TeW5jRGF0YQkxCS8qIE5vcm1hbCBkYXRhOiBmbHVzaCBiZWZvcmUgY29tbWl0ICovCisjZGVmaW5lIEJKX0FzeW5jRGF0YQkyCS8qIHdyaXRlcGFnZSBkYXRhOiB3YWl0IG9uIGl0IGJlZm9yZSBjb21taXQgKi8KKyNkZWZpbmUgQkpfTWV0YWRhdGEJMwkvKiBOb3JtYWwgam91cm5hbGVkIG1ldGFkYXRhICovCisjZGVmaW5lIEJKX0ZvcmdldAk0CS8qIEJ1ZmZlciBzdXBlcmNlZGVkIGJ5IHRoaXMgdHJhbnNhY3Rpb24gKi8KKyNkZWZpbmUgQkpfSU8JCTUJLyogQnVmZmVyIGlzIGZvciB0ZW1wb3JhcnkgSU8gdXNlICovCisjZGVmaW5lIEJKX1NoYWRvdwk2CS8qIEJ1ZmZlciBjb250ZW50cyBiZWluZyBzaGFkb3dlZCB0byB0aGUgbG9nICovCisjZGVmaW5lIEJKX0xvZ0N0bAk3CS8qIEJ1ZmZlciBjb250YWlucyBsb2cgZGVzY3JpcHRvcnMgKi8KKyNkZWZpbmUgQkpfUmVzZXJ2ZWQJOAkvKiBCdWZmZXIgaXMgcmVzZXJ2ZWQgZm9yIGFjY2VzcyBieSBqb3VybmFsICovCisjZGVmaW5lIEJKX1R5cGVzCTkKKworZXh0ZXJuIGludCBqYmRfYmxvY2tzX3Blcl9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworCisjaWZkZWYgX19LRVJORUxfXworCitleHRlcm4gc3BpbmxvY2tfdCBqaF9zcGxpY2VfbG9jazsKKy8qCisgKiBPbmNlIGBleHByMScgaGFzIGJlZW4gZm91bmQgdHJ1ZSwgdGFrZSBqaF9zcGxpY2VfbG9jaworICogYW5kIHRoZW4gcmVldmFsdWF0ZSBldmVyeXRoaW5nLgorICovCisjZGVmaW5lIFNQTElDRV9MT0NLKGV4cHIxLCBleHByMikJCQkJXAorCSh7CQkJCQkJCVwKKwkJaW50IHJldCA9IChleHByMSk7CQkJCVwKKwkJaWYgKHJldCkgewkJCQkJXAorCQkJc3Bpbl9sb2NrKCZqaF9zcGxpY2VfbG9jayk7CQlcCisJCQlyZXQgPSAoZXhwcjEpICYmIChleHByMik7CQlcCisJCQlzcGluX3VubG9jaygmamhfc3BsaWNlX2xvY2spOwkJXAorCQl9CQkJCQkJXAorCQlyZXQ7CQkJCQkJXAorCX0pCisKKy8qCisgKiBBIG51bWJlciBvZiBidWZmZXIgc3RhdGUgcHJlZGljYXRlcy4gIFRoZXkgdGVzdCBmb3IKKyAqIGJ1ZmZlcl9qYmQoKSBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgaW4gY29yZSBrZXJuZWwgY29kZS4KKyAqCisgKiBUaGVzZSB3aWxsIGJlIHJhY3kgb24gU01QIHVubGVzcyB3ZSdyZSAqc3VyZSogdGhhdCB0aGUKKyAqIGJ1ZmZlciB3b24ndCBiZSBkZXRhY2hlZCBmcm9tIHRoZSBqb3VybmFsbGluZyBzeXN0ZW0KKyAqIGluIHBhcmFsbGVsLgorICovCisKKy8qIFJldHVybiB0cnVlIGlmIHRoZSBidWZmZXIgaXMgb24gam91cm5hbCBsaXN0IGBsaXN0JyAqLworc3RhdGljIGlubGluZSBpbnQgYnVmZmVyX2psaXN0X2VxKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBsaXN0KQoreworCXJldHVybiBTUExJQ0VfTE9DSyhidWZmZXJfamJkKGJoKSwgYmgyamgoYmgpLT5iX2psaXN0ID09IGxpc3QpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGJ1ZmVyIGlzIGRpcnR5IHdydCB0aGUgam91cm5hbCAqLworc3RhdGljIGlubGluZSBpbnQgYnVmZmVyX2pkaXJ0eShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCXJldHVybiBidWZmZXJfamJkKGJoKSAmJiBfX2J1ZmZlcl9zdGF0ZShiaCwgSkJERGlydHkpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBpdCdzIGEgZGF0YSBidWZmZXIgd2hpY2ggam91cm5hbGxpbmcgaXMgbWFuYWdpbmcgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJ1ZmZlcl9qYmRfZGF0YShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCXJldHVybiBTUExJQ0VfTE9DSyhidWZmZXJfamJkKGJoKSwKKwkJCWJoMmpoKGJoKS0+Yl9qbGlzdCA9PSBCSl9TeW5jRGF0YSB8fAorCQkJYmgyamgoYmgpLT5iX2psaXN0ID09IEJKX0FzeW5jRGF0YSk7Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIGFzc2VydF9zcGluX2xvY2tlZChsb2NrKQlKX0FTU0VSVChzcGluX2lzX2xvY2tlZChsb2NrKSkKKyNlbHNlCisjZGVmaW5lIGFzc2VydF9zcGluX2xvY2tlZChsb2NrKQlkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgYnVmZmVyX3RyYWNlX2luaXQoYmgpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBwcmludF9idWZmZXJfZmllbGRzKGJoKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgcHJpbnRfYnVmZmVyX3RyYWNlKGJoKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQlVGRkVSX1RSQUNFKGJoLCBpbmZvKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQlVGRkVSX1RSQUNFMihiaCwgYmgyLCBpbmZvKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgSkJVRkZFUl9UUkFDRShqaCwgaW5mbykJZG8ge30gd2hpbGUgKDApCisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgkvKiBDT05GSUdfSkJEIHx8IENPTkZJR19KQkRfTU9EVUxFIHx8ICFfX0tFUk5FTF9fICovCisKKy8qCisgKiBDb21wYXRpYmlsaXR5IG5vLW9wcyB3aGljaCBhbGxvdyB0aGUga2VybmVsIHRvIGNvbXBpbGUgd2l0aG91dCBDT05GSUdfSkJECisgKiBnbyBoZXJlLgorICovCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICEoZGVmaW5lZChDT05GSUdfSkJEKSB8fCBkZWZpbmVkKENPTkZJR19KQkRfTU9EVUxFKSkKKworI2RlZmluZSBKX0FTU0VSVChleHByKQkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBKX0FTU0VSVF9CSChiaCwgZXhwcikJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBidWZmZXJfamJkKGJoKQkJCTAKKyNkZWZpbmUgYnVmZmVyX2psaXN0X2VxKGJoLCB2YWwpCTAKKyNkZWZpbmUgam91cm5hbF9idWZmZXJfam91cm5hbF9scnUoYmgpCTAKKworI2VuZGlmCS8qIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoQ09ORklHX0pCRCkgKi8KKyNlbmRpZgkvKiBfTElOVVhfSkJEX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMva2VybmVsLWxpc3QuaCBiL2xpYi9leHQyZnMva2VybmVsLWxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWY0ZjZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9rZXJuZWwtbGlzdC5oCkBAIC0wLDAgKzEsMTA5IEBACisjaWZuZGVmIF9MSU5VWF9MSVNUX0gKKyNkZWZpbmUgX0xJTlVYX0xJU1RfSAorCisvKgorICogU2ltcGxlIGRvdWJseSBsaW5rZWQgbGlzdCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBTb21lIG9mIHRoZSBpbnRlcm5hbCBmdW5jdGlvbnMgKCJfX3h4eCIpIGFyZSB1c2VmdWwgd2hlbgorICogbWFuaXB1bGF0aW5nIHdob2xlIGxpc3RzIHJhdGhlciB0aGFuIHNpbmdsZSBlbnRyaWVzLCBhcworICogc29tZXRpbWVzIHdlIGFscmVhZHkga25vdyB0aGUgbmV4dC9wcmV2IGVudHJpZXMgYW5kIHdlIGNhbgorICogZ2VuZXJhdGUgYmV0dGVyIGNvZGUgYnkgdXNpbmcgdGhlbSBkaXJlY3RseSByYXRoZXIgdGhhbgorICogdXNpbmcgdGhlIGdlbmVyaWMgc2luZ2xlLWVudHJ5IHJvdXRpbmVzLgorICovCisKK3N0cnVjdCBsaXN0X2hlYWQgeworCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQsICpwcmV2OworfTsKKworI2RlZmluZSBMSVNUX0hFQURfSU5JVChuYW1lKSB7ICYobmFtZSksICYobmFtZSkgfQorCisjZGVmaW5lIElOSVRfTElTVF9IRUFEKHB0cikgZG8geyBcCisJKHB0ciktPm5leHQgPSAocHRyKTsgKHB0ciktPnByZXYgPSAocHRyKTsgXAorfSB3aGlsZSAoMCkKKworI2lmICghZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19XQVRDT01DX18pKQorI2RlZmluZSBfX2lubGluZV9fCisjZW5kaWYKKworLyoKKyAqIEluc2VydCBhIG5ldyBlbnRyeSBiZXR3ZWVuIHR3byBrbm93biBjb25zZWN1dGl2ZSBlbnRyaWVzLgorICoKKyAqIFRoaXMgaXMgb25seSBmb3IgaW50ZXJuYWwgbGlzdCBtYW5pcHVsYXRpb24gd2hlcmUgd2Uga25vdworICogdGhlIHByZXYvbmV4dCBlbnRyaWVzIGFscmVhZHkhCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19saXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICogbmV3LAorCXN0cnVjdCBsaXN0X2hlYWQgKiBwcmV2LAorCXN0cnVjdCBsaXN0X2hlYWQgKiBuZXh0KQoreworCW5leHQtPnByZXYgPSBuZXc7CisJbmV3LT5uZXh0ID0gbmV4dDsKKwluZXctPnByZXYgPSBwcmV2OworCXByZXYtPm5leHQgPSBuZXc7Cit9CisKKy8qCisgKiBJbnNlcnQgYSBuZXcgZW50cnkgYWZ0ZXIgdGhlIHNwZWNpZmllZCBoZWFkLi4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBsaXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpuZXcsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0X2FkZChuZXcsIGhlYWQsIGhlYWQtPm5leHQpOworfQorCisvKgorICogSW5zZXJ0IGEgbmV3IGVudHJ5IGF0IHRoZSB0YWlsCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbGlzdF9hZGRfdGFpbChzdHJ1Y3QgbGlzdF9oZWFkICpuZXcsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0X2FkZChuZXcsIGhlYWQtPnByZXYsIGhlYWQpOworfQorCisvKgorICogRGVsZXRlIGEgbGlzdCBlbnRyeSBieSBtYWtpbmcgdGhlIHByZXYvbmV4dCBlbnRyaWVzCisgKiBwb2ludCB0byBlYWNoIG90aGVyLgorICoKKyAqIFRoaXMgaXMgb25seSBmb3IgaW50ZXJuYWwgbGlzdCBtYW5pcHVsYXRpb24gd2hlcmUgd2Uga25vdworICogdGhlIHByZXYvbmV4dCBlbnRyaWVzIGFscmVhZHkhCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19saXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICogcHJldiwKKwkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKiBuZXh0KQoreworCW5leHQtPnByZXYgPSBwcmV2OworCXByZXYtPm5leHQgPSBuZXh0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQoreworCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGxpc3RfZW1wdHkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlyZXR1cm4gaGVhZC0+bmV4dCA9PSBoZWFkOworfQorCisvKgorICogU3BsaWNlIGluICJsaXN0IiBpbnRvICJoZWFkIgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxpc3Rfc3BsaWNlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZmlyc3QgPSBsaXN0LT5uZXh0OworCisJaWYgKGZpcnN0ICE9IGxpc3QpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqbGFzdCA9IGxpc3QtPnByZXY7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmF0ID0gaGVhZC0+bmV4dDsKKworCQlmaXJzdC0+cHJldiA9IGhlYWQ7CisJCWhlYWQtPm5leHQgPSBmaXJzdDsKKworCQlsYXN0LT5uZXh0ID0gYXQ7CisJCWF0LT5wcmV2ID0gbGFzdDsKKwl9Cit9CisKKyNkZWZpbmUgbGlzdF9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgXAorCSgodHlwZSAqKSgoY2hhciAqKShwdHIpLSh1bnNpZ25lZCBsb25nKSgmKCh0eXBlICopMCktPm1lbWJlcikpKQorCisjZGVmaW5lIGxpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSBcCisgICAgICAgIGZvciAocG9zID0gKGhlYWQpLT5uZXh0OyBwb3MgIT0gKGhlYWQpOyBwb3MgPSBwb3MtPm5leHQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9saW5rLmMgYi9saWIvZXh0MmZzL2xpbmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjNjODU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9saW5rLmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBsaW5rLmMgLS0tIGNyZWF0ZSBsaW5rcyBpbiBhIGV4dDJmcyBkaXJlY3RvcnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCitzdHJ1Y3QgbGlua19zdHJ1Y3QgIHsKKwlleHQyX2ZpbHN5cwlmczsKKwljb25zdCBjaGFyCSpuYW1lOworCWludAkJbmFtZWxlbjsKKwlleHQyX2lub190CWlub2RlOworCWludAkJZmxhZ3M7CisJaW50CQlkb25lOworCXVuc2lnbmVkIGludAlibG9ja3NpemU7CisJZXJyY29kZV90CWVycjsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2I7Cit9OworCitzdGF0aWMgaW50IGxpbmtfcHJvYyhzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJICAgICBpbnQJb2Zmc2V0LAorCQkgICAgIGludAlibG9ja3NpemUsCisJCSAgICAgY2hhcgkqYnVmLAorCQkgICAgIHZvaWQJKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgbGlua19zdHJ1Y3QgKmxzID0gKHN0cnVjdCBsaW5rX3N0cnVjdCAqKSBwcml2X2RhdGE7CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpuZXh0OworCXVuc2lnbmVkIGludCByZWNfbGVuLCBtaW5fcmVjX2xlbiwgY3Vycl9yZWNfbGVuOworCWludCByZXQgPSAwOworCisJaWYgKGxzLT5kb25lKQorCQlyZXR1cm4gRElSRU5UX0FCT1JUOworCisJcmVjX2xlbiA9IEVYVDJfRElSX1JFQ19MRU4obHMtPm5hbWVsZW4pOworCisJbHMtPmVyciA9IGV4dDJmc19nZXRfcmVjX2xlbihscy0+ZnMsIGRpcmVudCwgJmN1cnJfcmVjX2xlbik7CisJaWYgKGxzLT5lcnIpCisJCXJldHVybiBESVJFTlRfQUJPUlQ7CisKKwkvKgorCSAqIFNlZSBpZiB0aGUgZm9sbG93aW5nIGRpcmVjdG9yeSBlbnRyeSAoaWYgYW55KSBpcyB1bnVzZWQ7CisJICogaWYgc28sIGFic29yYiBpdCBpbnRvIHRoaXMgb25lLgorCSAqLworCW5leHQgPSAoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICopIChidWYgKyBvZmZzZXQgKyBjdXJyX3JlY19sZW4pOworCWlmICgob2Zmc2V0ICsgKGludCkgY3Vycl9yZWNfbGVuIDwgYmxvY2tzaXplIC0gOCkgJiYKKwkgICAgKG5leHQtPmlub2RlID09IDApICYmCisJICAgIChvZmZzZXQgKyAoaW50KSBjdXJyX3JlY19sZW4gKyAoaW50KSBuZXh0LT5yZWNfbGVuIDw9IGJsb2Nrc2l6ZSkpIHsKKwkJY3Vycl9yZWNfbGVuICs9IG5leHQtPnJlY19sZW47CisJCWxzLT5lcnIgPSBleHQyZnNfc2V0X3JlY19sZW4obHMtPmZzLCBjdXJyX3JlY19sZW4sIGRpcmVudCk7CisJCWlmIChscy0+ZXJyKQorCQkJcmV0dXJuIERJUkVOVF9BQk9SVDsKKwkJcmV0ID0gRElSRU5UX0NIQU5HRUQ7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgZGlyZWN0b3J5IGVudHJ5IGlzIHVzZWQsIHNlZSBpZiB3ZSBjYW4gc3BsaXQgdGhlCisJICogZGlyZWN0b3J5IGVudHJ5IHRvIG1ha2Ugcm9vbSBmb3IgdGhlIG5ldyBuYW1lLiAgSWYgc28sCisJICogdHJ1bmNhdGUgaXQgYW5kIHJldHVybi4KKwkgKi8KKwlpZiAoZGlyZW50LT5pbm9kZSkgeworCQltaW5fcmVjX2xlbiA9IEVYVDJfRElSX1JFQ19MRU4oZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpOworCQlpZiAoY3Vycl9yZWNfbGVuIDwgKG1pbl9yZWNfbGVuICsgcmVjX2xlbikpCisJCQlyZXR1cm4gcmV0OworCQlyZWNfbGVuID0gY3Vycl9yZWNfbGVuIC0gbWluX3JlY19sZW47CisJCWxzLT5lcnIgPSBleHQyZnNfc2V0X3JlY19sZW4obHMtPmZzLCBtaW5fcmVjX2xlbiwgZGlyZW50KTsKKwkJaWYgKGxzLT5lcnIpCisJCQlyZXR1cm4gRElSRU5UX0FCT1JUOworCQluZXh0ID0gKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSAoYnVmICsgb2Zmc2V0ICsKKwkJCQkJCSAgZGlyZW50LT5yZWNfbGVuKTsKKwkJbmV4dC0+aW5vZGUgPSAwOworCQluZXh0LT5uYW1lX2xlbiA9IDA7CisJCWxzLT5lcnIgPSBleHQyZnNfc2V0X3JlY19sZW4obHMtPmZzLCByZWNfbGVuLCBuZXh0KTsKKwkJaWYgKGxzLT5lcnIpCisJCQlyZXR1cm4gRElSRU5UX0FCT1JUOworCQlyZXR1cm4gRElSRU5UX0NIQU5HRUQ7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBnZXQgdGhpcyBmYXIsIHRoZW4gdGhlIGRpcmVjdG9yeSBlbnRyeSBpcyBub3QgdXNlZC4KKwkgKiBTZWUgaWYgd2UgY2FuIGZpdCB0aGUgcmVxdWVzdCBlbnRyeSBpbi4gIElmIHNvLCBkbyBpdC4KKwkgKi8KKwlpZiAoY3Vycl9yZWNfbGVuIDwgcmVjX2xlbikKKwkJcmV0dXJuIHJldDsKKwlkaXJlbnQtPmlub2RlID0gbHMtPmlub2RlOworCWRpcmVudC0+bmFtZV9sZW4gPSBscy0+bmFtZWxlbjsKKwlzdHJuY3B5KGRpcmVudC0+bmFtZSwgbHMtPm5hbWUsIGxzLT5uYW1lbGVuKTsKKwlpZiAobHMtPnNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUpCisJCWRpcmVudC0+bmFtZV9sZW4gfD0gKGxzLT5mbGFncyAmIDB4NykgPDwgODsKKworCWxzLT5kb25lKys7CisJcmV0dXJuIERJUkVOVF9BQk9SVHxESVJFTlRfQ0hBTkdFRDsKK30KKworLyoKKyAqIE5vdGU6IHRoZSBsb3cgMyBiaXRzIG9mIHRoZSBmbGFncyBmaWVsZCBhcmUgdXNlZCBhcyB0aGUgZGlyZWN0b3J5CisgKiBlbnRyeSBmaWxldHlwZS4KKyAqLworI2lmZGVmIF9fVFVSQk9DX18KKyAjcHJhZ21hIGFyZ3N1c2VkCisjZW5kaWYKK2VycmNvZGVfdCBleHQyZnNfbGluayhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBkaXIsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgIGV4dDJfaW5vX3QgaW5vLCBpbnQgZmxhZ3MpCit7CisJZXJyY29kZV90CQlyZXR2YWw7CisJc3RydWN0IGxpbmtfc3RydWN0CWxzOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmICghKGZzLT5mbGFncyAmIEVYVDJfRkxBR19SVykpCisJCXJldHVybiBFWFQyX0VUX1JPX0ZJTFNZUzsKKworCWxzLmZzID0gZnM7CisJbHMubmFtZSA9IG5hbWU7CisJbHMubmFtZWxlbiA9IG5hbWUgPyBzdHJsZW4obmFtZSkgOiAwOworCWxzLmlub2RlID0gaW5vOworCWxzLmZsYWdzID0gZmxhZ3M7CisJbHMuZG9uZSA9IDA7CisJbHMuc2IgPSBmcy0+c3VwZXI7CisJbHMuYmxvY2tzaXplID0gZnMtPmJsb2Nrc2l6ZTsKKwlscy5lcnIgPSAwOworCisJcmV0dmFsID0gZXh0MmZzX2Rpcl9pdGVyYXRlKGZzLCBkaXIsIERJUkVOVF9GTEFHX0lOQ0xVREVfRU1QVFksCisJCQkJICAgIDAsIGxpbmtfcHJvYywgJmxzKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWlmIChscy5lcnIpCisJCXJldHVybiBscy5lcnI7CisKKwlpZiAoIWxzLmRvbmUpCisJCXJldHVybiBFWFQyX0VUX0RJUl9OT19TUEFDRTsKKworCWlmICgocmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIGRpciwgJmlub2RlKSkgIT0gMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmIChpbm9kZS5pX2ZsYWdzICYgRVhUMl9JTkRFWF9GTCkgeworCQlpbm9kZS5pX2ZsYWdzICY9IH5FWFQyX0lOREVYX0ZMOworCQlpZiAoKHJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZShmcywgZGlyLCAmaW5vZGUpKSAhPSAwKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvbGxzZWVrLmMgYi9saWIvZXh0MmZzL2xsc2Vlay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MzBmMjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2xsc2Vlay5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogbGxzZWVrLmMgLS0gc3R1YiBjYWxsaW5nIHRoZSBsbHNlZWsgc3lzdGVtIGNhbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgX19NU0RPU19fCisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9pby5oIgorCisjaWZkZWYgX19saW51eF9fCisKKyNpZiBkZWZpbmVkKEhBVkVfTFNFRUs2NCkgJiYgZGVmaW5lZChIQVZFX0xTRUVLNjRfUFJPVE9UWVBFKQorCisjZGVmaW5lIG15X2xsc2VlayBsc2VlazY0CisKKyNlbHNlCisjaWYgZGVmaW5lZChIQVZFX0xMU0VFSykKKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorCisjaWZuZGVmIEhBVkVfTExTRUVLX1BST1RPVFlQRQorZXh0ZXJuIGxvbmcgbG9uZyBsbHNlZWsgKGludCBmZCwgbG9uZyBsb25nIG9mZnNldCwgaW50IG9yaWdpbik7CisjZW5kaWYKKworI2RlZmluZSBteV9sbHNlZWsgbGxzZWVrCisKKyNlbHNlCS8qICEgSEFWRV9MTFNFRUsgKi8KKworI2lmIFNJWkVPRl9MT05HID09IFNJWkVPRl9MT05HX0xPTkcKKworI2RlZmluZSBsbHNlZWsgbHNlZWsKKworI2Vsc2UgLyogU0laRU9GX0xPTkcgIT0gU0laRU9GX0xPTkdfTE9ORyAqLworCisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisKKyNpZm5kZWYgX19OUl9fbGxzZWVrCisjZGVmaW5lIF9fTlJfX2xsc2VlayAgICAgICAgICAgIDE0MAorI2VuZGlmCisKKyNpZm5kZWYgX19pMzg2X18KK3N0YXRpYyBpbnQgX2xsc2VlayAodW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nLAorCQkgICB1bnNpZ25lZCBsb25nLCBleHQyX2xvZmZfdCAqLCB1bnNpZ25lZCBpbnQpOworCitzdGF0aWMgX3N5c2NhbGw1KGludCxfbGxzZWVrLHVuc2lnbmVkIGludCxmZCx1bnNpZ25lZCBsb25nLG9mZnNldF9oaWdoLAorCQkgdW5zaWduZWQgbG9uZywgb2Zmc2V0X2xvdyxleHQyX2xvZmZfdCAqLHJlc3VsdCwKKwkJIHVuc2lnbmVkIGludCwgb3JpZ2luKQorI2VuZGlmCisKK3N0YXRpYyBleHQyX2xvZmZfdCBteV9sbHNlZWsgKGludCBmZCwgZXh0Ml9sb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQoreworCWV4dDJfbG9mZl90IHJlc3VsdDsKKwlpbnQgcmV0dmFsOworCisjaWZuZGVmIF9faTM4Nl9fCisJcmV0dmFsID0gX2xsc2VlayhmZCwgKCh1bnNpZ25lZCBsb25nIGxvbmcpIG9mZnNldCkgPj4gMzIsCisjZWxzZQorCXJldHZhbCA9IHN5c2NhbGwoX19OUl9fbGxzZWVrLCBmZCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgKG9mZnNldCA+PiAzMiksCisjZW5kaWYKKwkJCSAgKCh1bnNpZ25lZCBsb25nIGxvbmcpIG9mZnNldCkgJiAweGZmZmZmZmZmLAorCQkJJnJlc3VsdCwgb3JpZ2luKTsKKwlyZXR1cm4gKHJldHZhbCA9PSAtMSA/IChleHQyX2xvZmZfdCkgcmV0dmFsIDogcmVzdWx0KTsKK30KKworI2VuZGlmCS8qIF9fYWxwaGFfXyB8fCBfX2lhNjRfXyAqLworCisjZW5kaWYgLyogSEFWRV9MTFNFRUsgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTFNFRUs2NCkgJiYgZGVmaW5lZChIQVZFX0xTRUVLNjRfUFJPVE9UWVBFKSAqLworCitleHQyX2xvZmZfdCBleHQyZnNfbGxzZWVrIChpbnQgZmQsIGV4dDJfbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKK3sKKyNpZiBTSVpFT0ZfT0ZGX1QgPj0gU0laRU9GX0xPTkdfTE9ORworCXJldHVybiBsc2VlayAoZmQsIG9mZnNldCwgb3JpZ2luKTsKKyNlbHNlCisJZXh0Ml9sb2ZmX3QgcmVzdWx0OworCXN0YXRpYyBpbnQgZG9fY29tcGF0ID0gMDsKKworCWlmIChkb19jb21wYXQpCisJCWdvdG8gZmFsbGJhY2s7CisKKwlyZXN1bHQgPSBteV9sbHNlZWsgKGZkLCBvZmZzZXQsIG9yaWdpbik7CisJaWYgKHJlc3VsdCA9PSAtMSAmJiBlcnJubyA9PSBFTk9TWVMpIHsKKwkJLyoKKwkJICogSnVzdCBpbiBjYXNlIHRoaXMgY29kZSBydW5zIG9uIHRvcCBvZiBhbiBvbGQga2VybmVsCisJCSAqIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgdGhlIGxsc2VlayBzeXN0ZW0gY2FsbAorCQkgKi8KKwkJZG9fY29tcGF0Kys7CisJZmFsbGJhY2s6CisJCWlmIChvZmZzZXQgPCAoKGV4dDJfbG9mZl90KSAxIDw8ICgoc2l6ZW9mKG9mZl90KSo4KSAtMSkpKQorCQkJcmV0dXJuIGxzZWVrKGZkLCAob2ZmX3QpIG9mZnNldCwgb3JpZ2luKTsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorfQorCisjZWxzZSAvKiAhbGludXggKi8KKworI2lmbmRlZiBFSU5WQUwKKyNkZWZpbmUgRUlOVkFMIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVAorI2VuZGlmCisKK2V4dDJfbG9mZl90IGV4dDJmc19sbHNlZWsgKGludCBmZCwgZXh0Ml9sb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQoreworI2lmIGRlZmluZWQoSEFWRV9MU0VFSzY0KSAmJiBkZWZpbmVkKEhBVkVfTFNFRUs2NF9QUk9UT1RZUEUpCisJcmV0dXJuIGxzZWVrNjQgKGZkLCBvZmZzZXQsIG9yaWdpbik7CisjZWxzZQorCWlmICgoc2l6ZW9mKG9mZl90KSA8IHNpemVvZihleHQyX2xvZmZfdCkpICYmCisJICAgIChvZmZzZXQgPj0gKChleHQyX2xvZmZfdCkgMSA8PCAoKHNpemVvZihvZmZfdCkqOCkgLTEpKSkpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIGxzZWVrIChmZCwgKG9mZl90KSBvZmZzZXQsIG9yaWdpbik7CisjZW5kaWYKK30KKworI2VuZGlmIAkvKiBsaW51eCAqLworCisKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvbG9va3VwLmMgYi9saWIvZXh0MmZzL2xvb2t1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNjZlNzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL2xvb2t1cC5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBsb29rdXAuYyAtLS0gZXh0MmZzIGRpcmVjdG9yeSBsb29rdXAgb3BlcmF0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NCwgMTk5NSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKK3N0cnVjdCBsb29rdXBfc3RydWN0ICB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwlpbnQJCWxlbjsKKwlleHQyX2lub190CSppbm9kZTsKKwlpbnQJCWZvdW5kOworfTsKKworI2lmZGVmIF9fVFVSQk9DX18KKyAjcHJhZ21hIGFyZ3N1c2VkCisjZW5kaWYKK3N0YXRpYyBpbnQgbG9va3VwX3Byb2Moc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCSAgICAgICBpbnQJb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgIGludAlibG9ja3NpemUgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICAgY2hhcgkqYnVmIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgIHZvaWQJKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgbG9va3VwX3N0cnVjdCAqbHMgPSAoc3RydWN0IGxvb2t1cF9zdHJ1Y3QgKikgcHJpdl9kYXRhOworCisJaWYgKGxzLT5sZW4gIT0gKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN0cm5jbXAobHMtPm5hbWUsIGRpcmVudC0+bmFtZSwgKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSkpCisJCXJldHVybiAwOworCSpscy0+aW5vZGUgPSBkaXJlbnQtPmlub2RlOworCWxzLT5mb3VuZCsrOworCXJldHVybiBESVJFTlRfQUJPUlQ7Cit9CisKKworZXJyY29kZV90IGV4dDJmc19sb29rdXAoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgZGlyLCBjb25zdCBjaGFyICpuYW1lLAorCQkJaW50IG5hbWVsZW4sIGNoYXIgKmJ1ZiwgZXh0Ml9pbm9fdCAqaW5vZGUpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgbG9va3VwX3N0cnVjdCBsczsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwlscy5uYW1lID0gbmFtZTsKKwlscy5sZW4gPSBuYW1lbGVuOworCWxzLmlub2RlID0gaW5vZGU7CisJbHMuZm91bmQgPSAwOworCisJcmV0dmFsID0gZXh0MmZzX2Rpcl9pdGVyYXRlKGZzLCBkaXIsIDAsIGJ1ZiwgbG9va3VwX3Byb2MsICZscyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHVybiAobHMuZm91bmQpID8gMCA6IEVYVDJfRVRfRklMRV9OT1RfRk9VTkQ7Cit9CisKKwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9ta2Rpci5jIGIvbGliL2V4dDJmcy9ta2Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMmJmMmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL21rZGlyLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBta2Rpci5jIC0tLSBtYWtlIGEgZGlyZWN0b3J5IGluIHRoZSBmaWxlc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKKyNpZm5kZWYgRVhUMl9GVF9ESVIKKyNkZWZpbmUgRVhUMl9GVF9ESVIJCTIKKyNlbmRpZgorCitlcnJjb2RlX3QgZXh0MmZzX21rZGlyKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IHBhcmVudCwgZXh0Ml9pbm9fdCBpbnVtLAorCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlleHQyX2V4dGVudF9oYW5kbGVfdAloYW5kbGU7CisJZXJyY29kZV90CQlyZXR2YWw7CisJc3RydWN0IGV4dDJfaW5vZGUJcGFyZW50X2lub2RlLCBpbm9kZTsKKwlleHQyX2lub190CQlpbm8gPSBpbnVtOworCWV4dDJfaW5vX3QJCXNjcmF0Y2hfaW5vOworCWJsazY0X3QJCQlibGs7CisJY2hhcgkJCSpibG9jayA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJLyoKKwkgKiBBbGxvY2F0ZSBhbiBpbm9kZSwgaWYgbmVjZXNzYXJ5CisJICovCisJaWYgKCFpbm8pIHsKKwkJcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShmcywgcGFyZW50LCBMSU5VWF9TX0lGRElSIHwgMDc1NSwKKwkJCQkJICAwLCAmaW5vKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIGEgZGF0YSBibG9jayBmb3IgdGhlIGRpcmVjdG9yeQorCSAqLworCXJldHZhbCA9IGV4dDJmc19uZXdfYmxvY2syKGZzLCAwLCAwLCAmYmxrKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisKKwkvKgorCSAqIENyZWF0ZSBhIHNjcmF0Y2ggdGVtcGxhdGUgZm9yIHRoZSBkaXJlY3RvcnkKKwkgKi8KKwlyZXR2YWwgPSBleHQyZnNfbmV3X2Rpcl9ibG9jayhmcywgaW5vLCBwYXJlbnQsICZibG9jayk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJLyoKKwkgKiBHZXQgdGhlIHBhcmVudCdzIGlub2RlLCBpZiBuZWNlc3NhcnkKKwkgKi8KKwlpZiAocGFyZW50ICE9IGlubykgeworCQlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgcGFyZW50LCAmcGFyZW50X2lub2RlKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKwl9IGVsc2UKKwkJbWVtc2V0KCZwYXJlbnRfaW5vZGUsIDAsIHNpemVvZihwYXJlbnRfaW5vZGUpKTsKKworCS8qCisJICogQ3JlYXRlIHRoZSBpbm9kZSBzdHJ1Y3R1cmUuLi4uCisJICovCisJbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSk7CisJaW5vZGUuaV9tb2RlID0gTElOVVhfU19JRkRJUiB8ICgwNzc3ICYgfmZzLT51bWFzayk7CisJaW5vZGUuaV91aWQgPSBpbm9kZS5pX2dpZCA9IDA7CisJZXh0MmZzX2libGtfc2V0KGZzLCAmaW5vZGUsIDEpOworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKQorCQlpbm9kZS5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKwllbHNlCisJCWlub2RlLmlfYmxvY2tbMF0gPSBibGs7CisJaW5vZGUuaV9saW5rc19jb3VudCA9IDI7CisJaW5vZGUuaV9zaXplID0gZnMtPmJsb2Nrc2l6ZTsKKworCS8qCisJICogV3JpdGUgb3V0IHRoZSBpbm9kZSBhbmQgaW5vZGUgZGF0YSBibG9jaworCSAqLworCXJldHZhbCA9IGV4dDJmc193cml0ZV9kaXJfYmxvY2soZnMsIGJsaywgYmxvY2spOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfbmV3X2lub2RlKGZzLCBpbm8sICZpbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9vcGVuMihmcywgaW5vLCAmaW5vZGUsICZoYW5kbGUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X3NldF9ibWFwKGhhbmRsZSwgMCwgYmxrLCAwKTsKKwkJZXh0MmZzX2V4dGVudF9mcmVlKGhhbmRsZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyoKKwkgKiBMaW5rIHRoZSBkaXJlY3RvcnkgaW50byB0aGUgZmlsZXN5c3RlbSBoaWVyYXJjaHkKKwkgKi8KKwlpZiAobmFtZSkgeworCQlyZXR2YWwgPSBleHQyZnNfbG9va3VwKGZzLCBwYXJlbnQsIG5hbWUsIHN0cmxlbihuYW1lKSwgMCwKKwkJCQkgICAgICAgJnNjcmF0Y2hfaW5vKTsKKwkJaWYgKCFyZXR2YWwpIHsKKwkJCXJldHZhbCA9IEVYVDJfRVRfRElSX0VYSVNUUzsKKwkJCW5hbWUgPSAwOworCQkJZ290byBjbGVhbnVwOworCQl9CisJCWlmIChyZXR2YWwgIT0gRVhUMl9FVF9GSUxFX05PVF9GT1VORCkKKwkJCWdvdG8gY2xlYW51cDsKKwkJcmV0dmFsID0gZXh0MmZzX2xpbmsoZnMsIHBhcmVudCwgbmFtZSwgaW5vLCBFWFQyX0ZUX0RJUik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyoKKwkgKiBVcGRhdGUgcGFyZW50IGlub2RlJ3MgY291bnRzCisJICovCisJaWYgKHBhcmVudCAhPSBpbm8pIHsKKwkJcGFyZW50X2lub2RlLmlfbGlua3NfY291bnQrKzsKKwkJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGZzLCBwYXJlbnQsICZwYXJlbnRfaW5vZGUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogVXBkYXRlIGFjY291bnRpbmcuLi4uCisJICovCisJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgYmxrLCArMSk7CisJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihmcywgaW5vLCArMSwgMSk7CisKK2NsZWFudXA6CisJaWYgKGJsb2NrKQorCQlleHQyZnNfZnJlZV9tZW0oJmJsb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworCit9CisKKwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9ta2pvdXJuYWwuYyBiL2xpYi9leHQyZnMvbWtqb3VybmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkMDRjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvbWtqb3VybmFsLmMKQEAgLTAsMCArMSw2NTMgQEAKKy8qCisgKiBta2pvdXJuYWwuYyAtLS0gbWFrZSBhIGpvdXJuYWwgZm9yIGEgZmlsZXN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImUycC9lMnAuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKyNpbmNsdWRlICJqZnNfdXNlci5oIgorCisvKgorICogVGhpcyBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5IHNldHMgdXAgdGhlIGpvdXJuYWwgc3VwZXJibG9jayBhbmQKKyAqIHJldHVybnMgaXQgYXMgYW4gYWxsb2NhdGVkIGJsb2NrLgorICovCitlcnJjb2RlX3QgZXh0MmZzX2NyZWF0ZV9qb3VybmFsX3N1cGVyYmxvY2soZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgIF9fdTMyIG51bV9ibG9ja3MsIGludCBmbGFncywKKwkJCQkJICAgY2hhciAgKipyZXRfanNiKQoreworCWVycmNvZGVfdAkJcmV0dmFsOworCWpvdXJuYWxfc3VwZXJibG9ja190CSpqc2I7CisKKwlpZiAobnVtX2Jsb2NrcyA8IEpGU19NSU5fSk9VUk5BTF9CTE9DS1MpCisJCXJldHVybiBFWFQyX0VUX0pPVVJOQUxfVE9PX1NNQUxMOworCisJaWYgKChyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmanNiKSkpCisJCXJldHVybiByZXR2YWw7CisKKwltZW1zZXQgKGpzYiwgMCwgZnMtPmJsb2Nrc2l6ZSk7CisKKwlqc2ItPnNfaGVhZGVyLmhfbWFnaWMgPSBodG9ubChKRlNfTUFHSUNfTlVNQkVSKTsKKwlpZiAoZmxhZ3MgJiBFWFQyX01LSk9VUk5BTF9WMV9TVVBFUikKKwkJanNiLT5zX2hlYWRlci5oX2Jsb2NrdHlwZSA9IGh0b25sKEpGU19TVVBFUkJMT0NLX1YxKTsKKwllbHNlCisJCWpzYi0+c19oZWFkZXIuaF9ibG9ja3R5cGUgPSBodG9ubChKRlNfU1VQRVJCTE9DS19WMik7CisJanNiLT5zX2Jsb2Nrc2l6ZSA9IGh0b25sKGZzLT5ibG9ja3NpemUpOworCWpzYi0+c19tYXhsZW4gPSBodG9ubChudW1fYmxvY2tzKTsKKwlqc2ItPnNfbnJfdXNlcnMgPSBodG9ubCgxKTsKKwlqc2ItPnNfZmlyc3QgPSBodG9ubCgxKTsKKwlqc2ItPnNfc2VxdWVuY2UgPSBodG9ubCgxKTsKKwltZW1jcHkoanNiLT5zX3V1aWQsIGZzLT5zdXBlci0+c191dWlkLCBzaXplb2YoZnMtPnN1cGVyLT5zX3V1aWQpKTsKKwkvKgorCSAqIElmIHdlJ3JlIGNyZWF0aW5nIGFuIGV4dGVybmFsIGpvdXJuYWwgZGV2aWNlLCB3ZSBuZWVkIHRvCisJICogYWRqdXN0IHRoZXNlIGZpZWxkcy4KKwkgKi8KKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCSAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfSk9VUk5BTF9ERVYpIHsKKwkJanNiLT5zX25yX3VzZXJzID0gMDsKKwkJanNiLT5zX2ZpcnN0ID0gaHRvbmwoZXh0MmZzX2pvdXJuYWxfc2Jfc3RhcnQoZnMtPmJsb2Nrc2l6ZSkgKyAxKTsKKwl9CisKKwkqcmV0X2pzYiA9IChjaGFyICopIGpzYjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIGEgam91cm5hbCB1c2luZyBQT1NJWCByb3V0aW5lcy4gIEl0IGlzIHVzZWQKKyAqIGZvciBjcmVhdGluZyBleHRlcm5hbCBqb3VybmFscyBhbmQgY3JlYXRpbmcgam91cm5hbHMgb24gbGl2ZQorICogZmlsZXN5c3RlbXMuCisgKi8KK3N0YXRpYyBlcnJjb2RlX3Qgd3JpdGVfam91cm5hbF9maWxlKGV4dDJfZmlsc3lzIGZzLCBjaGFyICpmaWxlbmFtZSwKKwkJCQkgICAgYmxrX3QgbnVtX2Jsb2NrcywgaW50IGZsYWdzKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJKmJ1ZiA9IDA7CisJaW50CQlmZCwgcmV0X3NpemU7CisJYmxrX3QJCWk7CisKKwlpZiAoKHJldHZhbCA9IGV4dDJmc19jcmVhdGVfam91cm5hbF9zdXBlcmJsb2NrKGZzLCBudW1fYmxvY2tzLCBmbGFncywKKwkJCQkJCSAgICAgICAmYnVmKSkpCisJCXJldHVybiByZXR2YWw7CisKKwkvKiBPcGVuIHRoZSBkZXZpY2Ugb3Igam91cm5hbCBmaWxlICovCisJaWYgKChmZCA9IG9wZW4oZmlsZW5hbWUsIE9fV1JPTkxZKSkgPCAwKSB7CisJCXJldHZhbCA9IGVycm5vOworCQlnb3RvIGVycmZyZWU7CisJfQorCisJLyogV3JpdGUgdGhlIHN1cGVyYmxvY2sgb3V0ICovCisJcmV0dmFsID0gRVhUMl9FVF9TSE9SVF9XUklURTsKKwlyZXRfc2l6ZSA9IHdyaXRlKGZkLCBidWYsIGZzLT5ibG9ja3NpemUpOworCWlmIChyZXRfc2l6ZSA8IDApIHsKKwkJcmV0dmFsID0gZXJybm87CisJCWdvdG8gZXJyb3V0OworCX0KKwlpZiAocmV0X3NpemUgIT0gKGludCkgZnMtPmJsb2Nrc2l6ZSkKKwkJZ290byBlcnJvdXQ7CisJbWVtc2V0KGJ1ZiwgMCwgZnMtPmJsb2Nrc2l6ZSk7CisKKwlpZiAoZmxhZ3MgJiBFWFQyX01LSk9VUk5BTF9MQVpZSU5JVCkKKwkJZ290byBzdWNjZXNzOworCisJZm9yIChpID0gMTsgaSA8IG51bV9ibG9ja3M7IGkrKykgeworCQlyZXRfc2l6ZSA9IHdyaXRlKGZkLCBidWYsIGZzLT5ibG9ja3NpemUpOworCQlpZiAocmV0X3NpemUgPCAwKSB7CisJCQlyZXR2YWwgPSBlcnJubzsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWlmIChyZXRfc2l6ZSAhPSAoaW50KSBmcy0+YmxvY2tzaXplKQorCQkJZ290byBlcnJvdXQ7CisJfQorCitzdWNjZXNzOgorCXJldHZhbCA9IDA7CitlcnJvdXQ6CisJY2xvc2UoZmQpOworZXJyZnJlZToKKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHdoaWNoIHplcm9zIG91dCBfbnVtXyBibG9ja3Mgc3RhcnRpbmcgYXQKKyAqIF9ibGtfLiAgSW4gY2FzZSBvZiBhbiBlcnJvciwgdGhlIGRldGFpbHMgb2YgdGhlIGVycm9yIGlzIHJldHVybmVkCisgKiB2aWEgX3JldF9ibGtfIGFuZCBfcmV0X2NvdW50XyBpZiB0aGV5IGFyZSBub24tTlVMTCBwb2ludGVycy4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBhbmQgYW4gZXJyb3IgY29kZSBvbiBhbiBlcnJvci4KKyAqCisgKiBBcyBhIHNwZWNpYWwgY2FzZSwgaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIE5VTEwsIHRoZW4gaXQgd2lsbAorICogYXR0ZW1wdCB0byBmcmVlIHRoZSBzdGF0aWMgemVyb2l6aW5nIGJ1ZmZlci4gIChUaGlzIGlzIHRvIGtlZXAKKyAqIHByb2dyYW1zIHRoYXQgY2hlY2sgZm9yIG1lbW9yeSBsZWFrcyBoYXBweS4pCisgKi8KKyNkZWZpbmUgU1RSSURFX0xFTkdUSCA4CitlcnJjb2RlX3QgZXh0MmZzX3plcm9fYmxvY2tzMihleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibGssIGludCBudW0sCisJCQkgICAgICBibGs2NF90ICpyZXRfYmxrLCBpbnQgKnJldF9jb3VudCkKK3sKKwlpbnQJCWosIGNvdW50OworCXN0YXRpYyBjaGFyCSpidWY7CisJZXJyY29kZV90CXJldHZhbDsKKworCS8qIElmIGZzIGlzIG51bGwsIGNsZWFuIHVwIHRoZSBzdGF0aWMgYnVmZmVyIGFuZCByZXR1cm4gKi8KKwlpZiAoIWZzKSB7CisJCWlmIChidWYpIHsKKwkJCWZyZWUoYnVmKTsKKwkJCWJ1ZiA9IDA7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCS8qIEFsbG9jYXRlIHRoZSB6ZXJvaXppbmcgYnVmZmVyIGlmIG5lY2Vzc2FyeSAqLworCWlmICghYnVmKSB7CisJCWJ1ZiA9IG1hbGxvYyhmcy0+YmxvY2tzaXplICogU1RSSURFX0xFTkdUSCk7CisJCWlmICghYnVmKQorCQkJcmV0dXJuIEVOT01FTTsKKwkJbWVtc2V0KGJ1ZiwgMCwgZnMtPmJsb2Nrc2l6ZSAqIFNUUklERV9MRU5HVEgpOworCX0KKwkvKiBPSywgZG8gdGhlIHdyaXRlIGxvb3AgKi8KKwlqPTA7CisJd2hpbGUgKGogPCBudW0pIHsKKwkJaWYgKGJsayAlIFNUUklERV9MRU5HVEgpIHsKKwkJCWNvdW50ID0gU1RSSURFX0xFTkdUSCAtIChibGsgJSBTVFJJREVfTEVOR1RIKTsKKwkJCWlmIChjb3VudCA+IChudW0gLSBqKSkKKwkJCQljb3VudCA9IG51bSAtIGo7CisJCX0gZWxzZSB7CisJCQljb3VudCA9IG51bSAtIGo7CisJCQlpZiAoY291bnQgPiBTVFJJREVfTEVOR1RIKQorCQkJCWNvdW50ID0gU1RSSURFX0xFTkdUSDsKKwkJfQorCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgYmxrLCBjb3VudCwgYnVmKTsKKwkJaWYgKHJldHZhbCkgeworCQkJaWYgKHJldF9jb3VudCkKKwkJCQkqcmV0X2NvdW50ID0gY291bnQ7CisJCQlpZiAocmV0X2JsaykKKwkJCQkqcmV0X2JsayA9IGJsazsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJaiArPSBjb3VudDsgYmxrICs9IGNvdW50OworCX0KKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc196ZXJvX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxrLCBpbnQgbnVtLAorCQkJICAgICBibGtfdCAqcmV0X2JsaywgaW50ICpyZXRfY291bnQpCit7CisJYmxrNjRfdCByZXRfYmxrMjsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX3plcm9fYmxvY2tzMihmcywgYmxrLCBudW0sICZyZXRfYmxrMiwgcmV0X2NvdW50KTsKKwlpZiAocmV0dmFsKQorCQkqcmV0X2JsayA9IChibGtfdCkgcmV0X2JsazI7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgdGhlIGpvdXJuYWwgdXNpbmcgZGlyZWN0IEkvTyByb3V0aW5lcworICovCitzdHJ1Y3QgbWtqb3VybmFsX3N0cnVjdCB7CisJaW50CQludW1fYmxvY2tzOworCWludAkJbmV3YmxvY2tzOworCWJsazY0X3QJCWdvYWw7CisJYmxrNjRfdAkJYmxrX3RvX3plcm87CisJaW50CQl6ZXJvX2NvdW50OworCWludAkJZmxhZ3M7CisJY2hhcgkJKmJ1ZjsKKwllcnJjb2RlX3QJZXJyOworfTsKKworc3RhdGljIGludCBta2pvdXJuYWxfcHJvYyhleHQyX2ZpbHN5cwlmcywKKwkJCSAgYmxrNjRfdAkqYmxvY2tuciwKKwkJCSAgZTJfYmxrY250X3QJYmxvY2tjbnQsCisJCQkgIGJsazY0X3QJcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgaW50CQlyZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgdm9pZAkJKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgbWtqb3VybmFsX3N0cnVjdCAqZXMgPSAoc3RydWN0IG1ram91cm5hbF9zdHJ1Y3QgKikgcHJpdl9kYXRhOworCWJsazY0X3QJbmV3X2JsazsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJaWYgKCpibG9ja25yKSB7CisJCWVzLT5nb2FsID0gKmJsb2NrbnI7CisJCXJldHVybiAwOworCX0KKwlpZiAoYmxvY2tjbnQgJiYKKwkgICAgKEVYVDJGU19CMkMoZnMsIGVzLT5nb2FsKSA9PSBFWFQyRlNfQjJDKGZzLCBlcy0+Z29hbCsxKSkpCisJCW5ld19ibGsgPSBlcy0+Z29hbCsxOworCWVsc2UgeworCQllcy0+Z29hbCAmPSB+RVhUMkZTX0NMVVNURVJfTUFTSyhmcyk7CisJCXJldHZhbCA9IGV4dDJmc19uZXdfYmxvY2syKGZzLCBlcy0+Z29hbCwgMCwgJm5ld19ibGspOworCQlpZiAocmV0dmFsKSB7CisJCQllcy0+ZXJyID0gcmV0dmFsOworCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQl9CisJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIG5ld19ibGssICsxKTsKKwkJZXMtPm5ld2Jsb2NrcysrOworCX0KKwlpZiAoYmxvY2tjbnQgPj0gMCkKKwkJZXMtPm51bV9ibG9ja3MtLTsKKworCXJldHZhbCA9IDA7CisJaWYgKGJsb2NrY250IDw9IDApCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBuZXdfYmxrLCAxLCBlcy0+YnVmKTsKKwllbHNlIGlmICghKGVzLT5mbGFncyAmIEVYVDJfTUtKT1VSTkFMX0xBWllJTklUKSkgeworCQlpZiAoZXMtPnplcm9fY291bnQpIHsKKwkJCWlmICgoZXMtPmJsa190b196ZXJvICsgZXMtPnplcm9fY291bnQgPT0gbmV3X2JsaykgJiYKKwkJCSAgICAoZXMtPnplcm9fY291bnQgPCAxMDI0KSkKKwkJCQllcy0+emVyb19jb3VudCsrOworCQkJZWxzZSB7CisJCQkJcmV0dmFsID0gZXh0MmZzX3plcm9fYmxvY2tzMihmcywKKwkJCQkJCQkgICAgIGVzLT5ibGtfdG9femVybywKKwkJCQkJCQkgICAgIGVzLT56ZXJvX2NvdW50LAorCQkJCQkJCSAgICAgMCwgMCk7CisJCQkJZXMtPnplcm9fY291bnQgPSAwOworCQkJfQorCQl9CisJCWlmIChlcy0+emVyb19jb3VudCA9PSAwKSB7CisJCQllcy0+YmxrX3RvX3plcm8gPSBuZXdfYmxrOworCQkJZXMtPnplcm9fY291bnQgPSAxOworCQl9CisJfQorCisJaWYgKGJsb2NrY250ID09IDApCisJCW1lbXNldChlcy0+YnVmLCAwLCBmcy0+YmxvY2tzaXplKTsKKworCWlmIChyZXR2YWwpIHsKKwkJZXMtPmVyciA9IHJldHZhbDsKKwkJcmV0dXJuIEJMT0NLX0FCT1JUOworCX0KKwkqYmxvY2tuciA9IGVzLT5nb2FsID0gbmV3X2JsazsKKworCWlmIChlcy0+bnVtX2Jsb2NrcyA9PSAwKQorCQlyZXR1cm4gKEJMT0NLX0NIQU5HRUQgfCBCTE9DS19BQk9SVCk7CisJZWxzZQorCQlyZXR1cm4gQkxPQ0tfQ0hBTkdFRDsKKworfQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBpbml0aWFsIGdvYWwgYmxvY2sgdG8gYmUgcm91Z2hseSBhdCB0aGUgbWlkZGxlIG9mIHRoZQorICogZmlsZXN5c3RlbS4gIFBpY2sgYSBncm91cCB0aGF0IGhhcyB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgZnJlZQorICogYmxvY2tzLgorICovCitzdGF0aWMgYmxrNjRfdCBnZXRfbWlkcG9pbnRfam91cm5hbF9ibG9jayhleHQyX2ZpbHN5cyBmcykKK3sKKwlkZ3JwX3QJZ3JvdXAsIHN0YXJ0LCBlbmQsIGksIGxvZ19mbGV4OworCisJZ3JvdXAgPSBleHQyZnNfZ3JvdXBfb2ZfYmxrMihmcywgKGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtCisJCQkJCSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgLyAyKTsKKwlsb2dfZmxleCA9IDEgPDwgZnMtPnN1cGVyLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXg7CisJaWYgKGZzLT5zdXBlci0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4ICYmIChncm91cCA+IGxvZ19mbGV4KSkgeworCQlncm91cCA9IGdyb3VwICYgfihsb2dfZmxleCAtIDEpOworCQl3aGlsZSAoKGdyb3VwIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQpICYmCisJCSAgICAgICBleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnQoZnMsIGdyb3VwKSA9PSAwKQorCQkJZ3JvdXArKzsKKwkJaWYgKGdyb3VwID09IGZzLT5ncm91cF9kZXNjX2NvdW50KQorCQkJZ3JvdXAgPSAwOworCQlzdGFydCA9IGdyb3VwOworCX0gZWxzZQorCQlzdGFydCA9IChncm91cCA+IDApID8gZ3JvdXAtMSA6IGdyb3VwOworCWVuZCA9ICgoZ3JvdXArMSkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudCkgPyBncm91cCsxIDogZ3JvdXA7CisJZ3JvdXAgPSBzdGFydDsKKwlmb3IgKGkgPSBzdGFydCArIDE7IGkgPD0gZW5kOyBpKyspCisJCWlmIChleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnQoZnMsIGkpID4KKwkJICAgIGV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudChmcywgZ3JvdXApKQorCQkJZ3JvdXAgPSBpOworCXJldHVybiBleHQyZnNfZ3JvdXBfZmlyc3RfYmxvY2syKGZzLCBncm91cCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBqb3VybmFsIHVzaW5nIGRpcmVjdCBJL08gcm91dGluZXMuCisgKi8KK3N0YXRpYyBlcnJjb2RlX3Qgd3JpdGVfam91cm5hbF9pbm9kZShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBqb3VybmFsX2lubywKKwkJCQkgICAgIGJsa190IG51bV9ibG9ja3MsIGJsazY0X3QgZ29hbCwgaW50IGZsYWdzKQoreworCWNoYXIJCQkqYnVmOworCWVycmNvZGVfdAkJcmV0dmFsOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCXVuc2lnbmVkIGxvbmcgbG9uZwlpbm9kZV9zaXplOworCXN0cnVjdCBta2pvdXJuYWxfc3RydWN0CWVzOworCisJaWYgKChyZXR2YWwgPSBleHQyZnNfY3JlYXRlX2pvdXJuYWxfc3VwZXJibG9jayhmcywgbnVtX2Jsb2NrcywgZmxhZ3MsCisJCQkJCQkgICAgICAgJmJ1ZikpKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKChyZXR2YWwgPSBleHQyZnNfcmVhZF9iaXRtYXBzKGZzKSkpCisJCWdvdG8gb3V0MjsKKworCWlmICgocmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIGpvdXJuYWxfaW5vLCAmaW5vZGUpKSkKKwkJZ290byBvdXQyOworCisJaWYgKGlub2RlLmlfYmxvY2tzID4gMCkgeworCQlyZXR2YWwgPSBFRVhJU1Q7CisJCWdvdG8gb3V0MjsKKwl9CisKKwllcy5udW1fYmxvY2tzID0gbnVtX2Jsb2NrczsKKwllcy5uZXdibG9ja3MgPSAwOworCWVzLmJ1ZiA9IGJ1ZjsKKwllcy5lcnIgPSAwOworCWVzLmZsYWdzID0gZmxhZ3M7CisJZXMuemVyb19jb3VudCA9IDA7CisJZXMuZ29hbCA9IChnb2FsICE9IH4wVUxMKSA/IGdvYWwgOiBnZXRfbWlkcG9pbnRfam91cm5hbF9ibG9jayhmcyk7CisKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUykgeworCQlpbm9kZS5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKwkJaWYgKChyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoZnMsIGpvdXJuYWxfaW5vLCAmaW5vZGUpKSkKKwkJCWdvdG8gb3V0MjsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIGpvdXJuYWxfaW5vLCBCTE9DS19GTEFHX0FQUEVORCwKKwkJCQkgICAgICAgMCwgbWtqb3VybmFsX3Byb2MsICZlcyk7CisJaWYgKGVzLmVycikgeworCQlyZXR2YWwgPSBlcy5lcnI7CisJCWdvdG8gZXJyb3V0OworCX0KKwlpZiAoZXMuemVyb19jb3VudCkgeworCQlyZXR2YWwgPSBleHQyZnNfemVyb19ibG9ja3MyKGZzLCBlcy5ibGtfdG9femVybywKKwkJCQkJICAgIGVzLnplcm9fY291bnQsIDAsIDApOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJfQorCisJaWYgKChyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgam91cm5hbF9pbm8sICZpbm9kZSkpKQorCQlnb3RvIGVycm91dDsKKworCWlub2RlX3NpemUgPSAodW5zaWduZWQgbG9uZyBsb25nKWZzLT5ibG9ja3NpemUgKiBudW1fYmxvY2tzOworCWV4dDJmc19pYmxrX2FkZF9ibG9ja3MoZnMsICZpbm9kZSwgZXMubmV3YmxvY2tzKTsKKwlpbm9kZS5pX210aW1lID0gaW5vZGUuaV9jdGltZSA9IGZzLT5ub3cgPyBmcy0+bm93IDogdGltZSgwKTsKKwlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMTsKKwlpbm9kZS5pX21vZGUgPSBMSU5VWF9TX0lGUkVHIHwgMDYwMDsKKwlyZXR2YWwgPSBleHQyZnNfaW5vZGVfc2l6ZV9zZXQoZnMsICZpbm9kZSwgaW5vZGVfc2l6ZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlpZiAoKHJldHZhbCA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZnMsIGpvdXJuYWxfaW5vLCAmaW5vZGUpKSkKKwkJZ290byBlcnJvdXQ7CisJcmV0dmFsID0gMDsKKworCW1lbWNweShmcy0+c3VwZXItPnNfam5sX2Jsb2NrcywgaW5vZGUuaV9ibG9jaywgRVhUMl9OX0JMT0NLUyo0KTsKKwlmcy0+c3VwZXItPnNfam5sX2Jsb2Nrc1sxNV0gPSBpbm9kZS5pX3NpemVfaGlnaDsKKwlmcy0+c3VwZXItPnNfam5sX2Jsb2Nrc1sxNl0gPSBpbm9kZS5pX3NpemU7CisJZnMtPnN1cGVyLT5zX2pubF9iYWNrdXBfdHlwZSA9IEVYVDNfSk5MX0JBQ0tVUF9CTE9DS1M7CisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCitlcnJvdXQ6CisJZXh0MmZzX3plcm9fYmxvY2tzMigwLCAwLCAwLCAwLCAwKTsKK291dDI6CisJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBGaW5kIGEgcmVhc29uYWJsZSBqb3VybmFsIGZpbGUgc2l6ZSAoaW4gYmxvY2tzKSBnaXZlbiB0aGUgbnVtYmVyIG9mIGJsb2NrcworICogaW4gdGhlIGZpbGVzeXN0ZW0uICBGb3IgdmVyeSBzbWFsbCBmaWxlc3lzdGVtcywgaXQgaXMgbm90IHJlYXNvbmFibGUgdG8KKyAqIGhhdmUgYSBqb3VybmFsIHRoYXQgZmlsbHMgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIGZpbGVzeXN0ZW0uCisgKi8KK2ludCBleHQyZnNfZGVmYXVsdF9qb3VybmFsX3NpemUoX191NjQgbnVtX2Jsb2NrcykKK3sKKwlpZiAobnVtX2Jsb2NrcyA8IDIwNDgpCisJCXJldHVybiAtMTsKKwlpZiAobnVtX2Jsb2NrcyA8IDMyNzY4KQorCQlyZXR1cm4gKDEwMjQpOworCWlmIChudW1fYmxvY2tzIDwgMjU2KjEwMjQpCisJCXJldHVybiAoNDA5Nik7CisJaWYgKG51bV9ibG9ja3MgPCA1MTIqMTAyNCkKKwkJcmV0dXJuICg4MTkyKTsKKwlpZiAobnVtX2Jsb2NrcyA8IDEwMjQqMTAyNCkKKwkJcmV0dXJuICgxNjM4NCk7CisJcmV0dXJuIDMyNzY4OworfQorCitpbnQgZXh0MmZzX2pvdXJuYWxfc2Jfc3RhcnQoaW50IGJsb2Nrc2l6ZSkKK3sKKwlpZiAoYmxvY2tzaXplID09IEVYVDJfTUlOX0JMT0NLX1NJWkUpCisJCXJldHVybiAyOworCXJldHVybiAxOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBhZGRzIGEgam91cm5hbCBkZXZpY2UgdG8gYSBmaWxlc3lzdGVtCisgKi8KK2VycmNvZGVfdCBleHQyZnNfYWRkX2pvdXJuYWxfZGV2aWNlKGV4dDJfZmlsc3lzIGZzLCBleHQyX2ZpbHN5cyBqb3VybmFsX2RldikKK3sKKwlzdHJ1Y3Qgc3RhdAlzdDsKKwllcnJjb2RlX3QJcmV0dmFsOworCWNoYXIJCWJ1ZltTVVBFUkJMT0NLX1NJWkVdOworCWpvdXJuYWxfc3VwZXJibG9ja190CSpqc2I7CisJaW50CQlzdGFydDsKKwlfX3UzMgkJaSwgbnJfdXNlcnM7CisKKwkvKiBNYWtlIHN1cmUgdGhlIGRldmljZSBleGlzdHMgYW5kIGlzIGEgYmxvY2sgZGV2aWNlICovCisJaWYgKHN0YXQoam91cm5hbF9kZXYtPmRldmljZV9uYW1lLCAmc3QpIDwgMCkKKwkJcmV0dXJuIGVycm5vOworCisJaWYgKCFTX0lTQkxLKHN0LnN0X21vZGUpKQorCQlyZXR1cm4gRVhUMl9FVF9KT1VSTkFMX05PVF9CTE9DSzsgLyogTXVzdCBiZSBhIGJsb2NrIGRldmljZSAqLworCisJLyogR2V0IHRoZSBqb3VybmFsIHN1cGVyYmxvY2sgKi8KKwlzdGFydCA9IGV4dDJmc19qb3VybmFsX3NiX3N0YXJ0KGpvdXJuYWxfZGV2LT5ibG9ja3NpemUpOworCWlmICgocmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGpvdXJuYWxfZGV2LT5pbywgc3RhcnQsCisJCQkJCSAgICAtU1VQRVJCTE9DS19TSVpFLAorCQkJCQkgICAgYnVmKSkpCisJCXJldHVybiByZXR2YWw7CisKKwlqc2IgPSAoam91cm5hbF9zdXBlcmJsb2NrX3QgKikgYnVmOworCWlmICgoanNiLT5zX2hlYWRlci5oX21hZ2ljICE9ICh1bnNpZ25lZCkgbnRvaGwoSkZTX01BR0lDX05VTUJFUikpIHx8CisJICAgIChqc2ItPnNfaGVhZGVyLmhfYmxvY2t0eXBlICE9ICh1bnNpZ25lZCkgbnRvaGwoSkZTX1NVUEVSQkxPQ0tfVjIpKSkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fSk9VUk5BTF9TQjsKKworCWlmIChudG9obChqc2ItPnNfYmxvY2tzaXplKSAhPSAodW5zaWduZWQgbG9uZykgZnMtPmJsb2Nrc2l6ZSkKKwkJcmV0dXJuIEVYVDJfRVRfVU5FWFBFQ1RFRF9CTE9DS19TSVpFOworCisJLyogQ2hlY2sgYW5kIHNlZSBpZiB0aGlzIGZpbGVzeXN0ZW0gaGFzIGFscmVhZHkgYmVlbiBhZGRlZCAqLworCW5yX3VzZXJzID0gbnRvaGwoanNiLT5zX25yX3VzZXJzKTsKKwlmb3IgKGk9MDsgaSA8IG5yX3VzZXJzOyBpKyspIHsKKwkJaWYgKG1lbWNtcChmcy0+c3VwZXItPnNfdXVpZCwKKwkJCSAgICZqc2ItPnNfdXNlcnNbaSoxNl0sIDE2KSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWlmIChpID49IG5yX3VzZXJzKSB7CisJCW1lbWNweSgmanNiLT5zX3VzZXJzW25yX3VzZXJzKjE2XSwKKwkJICAgICAgIGZzLT5zdXBlci0+c191dWlkLCAxNik7CisJCWpzYi0+c19ucl91c2VycyA9IGh0b25sKG5yX3VzZXJzKzEpOworCX0KKworCS8qIFdyaXRlYmFjayB0aGUgam91cm5hbCBzdXBlcmJsb2NrICovCisJaWYgKChyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGpvdXJuYWxfZGV2LT5pbywgc3RhcnQsCisJCQkJCSAgICAtU1VQRVJCTE9DS19TSVpFLCBidWYpKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCWZzLT5zdXBlci0+c19qb3VybmFsX2ludW0gPSAwOworCWZzLT5zdXBlci0+c19qb3VybmFsX2RldiA9IHN0LnN0X3JkZXY7CisJbWVtY3B5KGZzLT5zdXBlci0+c19qb3VybmFsX3V1aWQsIGpzYi0+c191dWlkLAorCSAgICAgICBzaXplb2YoZnMtPnN1cGVyLT5zX2pvdXJuYWxfdXVpZCkpOworCWZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCB8PSBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMOworCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyBhIGpvdXJuYWwgaW5vZGUgdG8gYSBmaWxlc3lzdGVtLCB1c2luZyBlaXRoZXIKKyAqIFBPU0lYIHJvdXRpbmVzIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQsIG9yIHVzaW5nIGRpcmVjdCBJL08KKyAqIGZ1bmN0aW9ucyBpZiBpdCBpcyBub3QuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfYWRkX2pvdXJuYWxfaW5vZGUyKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBudW1fYmxvY2tzLAorCQkJCSAgICBibGs2NF90IGdvYWwsIGludCBmbGFncykKK3sKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlleHQyX2lub190CQlqb3VybmFsX2lubzsKKwlzdHJ1Y3Qgc3RhdAkJc3Q7CisJY2hhcgkJCWpmaWxlWzEwMjRdOworCWludAkJCW1vdW50X2ZsYWdzOworCWludAkJCWZkID0gLTE7CisKKwlpZiAoZmxhZ3MgJiBFWFQyX01LSk9VUk5BTF9OT19NTlRfQ0hFQ0spCisJCW1vdW50X2ZsYWdzID0gMDsKKwllbHNlIGlmICgocmV0dmFsID0gZXh0MmZzX2NoZWNrX21vdW50X3BvaW50KGZzLT5kZXZpY2VfbmFtZSwKKwkJCQkJCSAgICAmbW91bnRfZmxhZ3MsCisJCQkJCQkgICAgamZpbGUsIHNpemVvZihqZmlsZSktMTApKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmIChtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkgeworI2lmIEhBVkVfRVhUMl9JT0NUTFMKKwkJaW50IGYgPSAwOworI2VuZGlmCisJCXN0cmNhdChqZmlsZSwgIi8uam91cm5hbCIpOworCisJCS8qCisJCSAqIElmIC4uLi8uam91cm5hbCBhbHJlYWR5IGV4aXN0cywgbWFrZSBzdXJlIGFueQorCQkgKiBpbW11dGFibGUgb3IgYXBwZW5kLW9ubHkgZmxhZ3MgYXJlIGNsZWFyZWQuCisJCSAqLworI2lmIGRlZmluZWQoSEFWRV9DSEZMQUdTKSAmJiBkZWZpbmVkKFVGX05PRFVNUCkKKwkJKHZvaWQpIGNoZmxhZ3MgKGpmaWxlLCAwKTsKKyNlbHNlCisjaWYgSEFWRV9FWFQyX0lPQ1RMUworCQlmZCA9IG9wZW4oamZpbGUsIE9fUkRPTkxZKTsKKwkJaWYgKGZkID49IDApIHsKKwkJCXJldHZhbCA9IGlvY3RsKGZkLCBFWFQyX0lPQ19TRVRGTEFHUywgJmYpOworCQkJY2xvc2UoZmQpOworCQkJaWYgKHJldHZhbCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQl9CisjZW5kaWYKKyNlbmRpZgorCisJCS8qIENyZWF0ZSB0aGUgam91cm5hbCBmaWxlICovCisJCWlmICgoZmQgPSBvcGVuKGpmaWxlLCBPX0NSRUFUfE9fV1JPTkxZLCAwNjAwKSkgPCAwKQorCQkJcmV0dXJuIGVycm5vOworCisJCS8qIE5vdGUgdGhhdCB3ZSBjYW4ndCBkbyBsYXp5IGpvdXJuYWwgaW5pdGlhbGl6YXRpb24gZm9yIG1vdW50ZWQKKwkJICogZmlsZXN5c3RlbXMsIHNpbmNlIHRoZSB6ZXJvIHdyaXRpbmcgaXMgYWxzbyBhbGxvY2F0aW5nIHRoZQorCQkgKiBqb3VybmFsIGJsb2Nrcy4gIFdlIGNvdWxkIHVzZSBmYWxsb2NhdGUsIGJ1dCBub3QgYWxsIGtlcm5lbHMKKwkJICogc3VwcG9ydCB0aGF0LCBhbmQgY3JlYXRpbmcgYSBqb3VybmFsIG9uIGEgbW91bnRlZCBleHQyCisJCSAqIGZpbGVzeXN0ZW1zIGlzIGV4dHJlbWVseSByYXJlIHRoZXNlIGRheXMuLi4gIElnbm9yZSBpdC4gKi8KKwkJZmxhZ3MgJj0gfkVYVDJfTUtKT1VSTkFMX0xBWllJTklUOworCisJCWlmICgocmV0dmFsID0gd3JpdGVfam91cm5hbF9maWxlKGZzLCBqZmlsZSwgbnVtX2Jsb2NrcywgZmxhZ3MpKSkKKwkJCWdvdG8gZXJyb3V0OworCisJCS8qIEdldCBpbm9kZSBudW1iZXIgb2YgdGhlIGpvdXJuYWwgZmlsZSAqLworCQlpZiAoZnN0YXQoZmQsICZzdCkgPCAwKSB7CisJCQlyZXR2YWwgPSBlcnJubzsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisKKyNpZiBkZWZpbmVkKEhBVkVfQ0hGTEFHUykgJiYgZGVmaW5lZChVRl9OT0RVTVApCisJCXJldHZhbCA9IGZjaGZsYWdzIChmZCwgVUZfTk9EVU1QfFVGX0lNTVVUQUJMRSk7CisjZWxzZQorI2lmIEhBVkVfRVhUMl9JT0NUTFMKKwkJaWYgKGlvY3RsKGZkLCBFWFQyX0lPQ19HRVRGTEFHUywgJmYpIDwgMCkgeworCQkJcmV0dmFsID0gZXJybm87CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQlmIHw9IEVYVDJfTk9EVU1QX0ZMIHwgRVhUMl9JTU1VVEFCTEVfRkw7CisJCXJldHZhbCA9IGlvY3RsKGZkLCBFWFQyX0lPQ19TRVRGTEFHUywgJmYpOworI2VuZGlmCisjZW5kaWYKKwkJaWYgKHJldHZhbCkgeworCQkJcmV0dmFsID0gZXJybm87CisJCQlnb3RvIGVycm91dDsKKwkJfQorCisJCWlmIChjbG9zZShmZCkgPCAwKSB7CisJCQlyZXR2YWwgPSBlcnJubzsKKwkJCWZkID0gLTE7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQlqb3VybmFsX2lubyA9IHN0LnN0X2lubzsKKwkJbWVtc2V0KGZzLT5zdXBlci0+c19qbmxfYmxvY2tzLCAwLAorCQkgICAgICAgc2l6ZW9mKGZzLT5zdXBlci0+c19qbmxfYmxvY2tzKSk7CisJfSBlbHNlIHsKKwkJaWYgKChtb3VudF9mbGFncyAmIEVYVDJfTUZfQlVTWSkgJiYKKwkJICAgICEoZnMtPmZsYWdzICYgRVhUMl9GTEFHX0VYQ0xVU0lWRSkpIHsKKwkJCXJldHZhbCA9IEVCVVNZOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJam91cm5hbF9pbm8gPSBFWFQyX0pPVVJOQUxfSU5POworCQlpZiAoKHJldHZhbCA9IHdyaXRlX2pvdXJuYWxfaW5vZGUoZnMsIGpvdXJuYWxfaW5vLAorCQkJCQkJICBudW1fYmxvY2tzLCBnb2FsLCBmbGFncykpKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlmcy0+c3VwZXItPnNfam91cm5hbF9pbnVtID0gam91cm5hbF9pbm87CisJZnMtPnN1cGVyLT5zX2pvdXJuYWxfZGV2ID0gMDsKKwltZW1zZXQoZnMtPnN1cGVyLT5zX2pvdXJuYWxfdXVpZCwgMCwKKwkgICAgICAgc2l6ZW9mKGZzLT5zdXBlci0+c19qb3VybmFsX3V1aWQpKTsKKwlmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgfD0gRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTDsKKworCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwlyZXR1cm4gMDsKK2Vycm91dDoKKwlpZiAoZmQgPj0gMCkKKwkJY2xvc2UoZmQpOworCXJldHVybiByZXR2YWw7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfYWRkX2pvdXJuYWxfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIGJsa190IG51bV9ibG9ja3MsIGludCBmbGFncykKK3sKKwlyZXR1cm4gZXh0MmZzX2FkZF9qb3VybmFsX2lub2RlMihmcywgbnVtX2Jsb2NrcywgfjBVTEwsIGZsYWdzKTsKK30KKworCisjaWZkZWYgREVCVUcKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJKmRldmljZV9uYW1lOworCWV4dDJfZmlsc3lzCWZzOworCisJaWYgKGFyZ2MgPCAyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIGZpbGVzeXN0ZW1cbiIsIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKwlkZXZpY2VfbmFtZSA9IGFyZ3ZbMV07CisKKwlyZXR2YWwgPSBleHQyZnNfb3BlbiAoZGV2aWNlX25hbWUsIEVYVDJfRkxBR19SVywgMCwgMCwKKwkJCSAgICAgIHVuaXhfaW9fbWFuYWdlciwgJmZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgb3BlbmluZyAlcyIsIGRldmljZV9uYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfYWRkX2pvdXJuYWxfaW5vZGUoZnMsIEpGU19NSU5fSk9VUk5BTF9CTE9DS1MsIDApOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBhZGRpbmcgam91cm5hbCB0byAlcyIsCisJCQlkZXZpY2VfbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCXJldHZhbCA9IGV4dDJmc19mbHVzaChmcyk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGYoIldhcm5pbmcsIGhhZCB0cm91YmxlIHdyaXRpbmcgb3V0IHN1cGVyYmxvY2tzLlxuIik7CisJfQorCWV4dDJmc19jbG9zZV9mcmVlKCZmcyk7CisJZXhpdCgwKTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL21tcC5jIGIvbGliL2V4dDJmcy9tbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGM3ZGNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9tbXAuYwpAQCAtMCwwICsxLDM5OCBAQAorLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gKE1NUCkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIFdoYW1jbG91ZCwgSW5jLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2lmbmRlZiBfR05VX1NPVVJDRQorI2RlZmluZSBfR05VX1NPVVJDRQorI2VuZGlmCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90aW1lLmg+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+c19tbXBfYmxvY2ssIGZzLT5tbXBfYnVmKTsKKworbW1wX2Vycm9yOgorCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL25hbWVpLmMgYi9saWIvZXh0MmZzL25hbWVpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA3YWVjYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvbmFtZWkuYwpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIG5hbWVpLmMgLS0tIGV4dDJmcyBkaXJlY3RvcnkgbG9va3VwIG9wZXJhdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTQsIDE5OTUgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisvKiAjZGVmaW5lIE5BTUVJX0RFQlVHICovCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorCitzdGF0aWMgZXJyY29kZV90IG9wZW5fbmFtZWkoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3Qgcm9vdCwgZXh0Ml9pbm9fdCBiYXNlLAorCQkJICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBzaXplX3QgcGF0aGxlbiwgaW50IGZvbGxvdywKKwkJCSAgICBpbnQgbGlua19jb3VudCwgY2hhciAqYnVmLCBleHQyX2lub190ICpyZXNfaW5vZGUpOworCitzdGF0aWMgZXJyY29kZV90IGZvbGxvd19saW5rKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IHJvb3QsIGV4dDJfaW5vX3QgZGlyLAorCQkJICAgICBleHQyX2lub190IGlub2RlLCBpbnQgbGlua19jb3VudCwKKwkJCSAgICAgY2hhciAqYnVmLCBleHQyX2lub190ICpyZXNfaW5vZGUpCit7CisJY2hhciAqcGF0aG5hbWU7CisJY2hhciAqYnVmZmVyID0gMDsKKwllcnJjb2RlX3QgcmV0dmFsOworCXN0cnVjdCBleHQyX2lub2RlIGVpOworCWJsazY0X3QgYmxrOworCisjaWZkZWYgTkFNRUlfREVCVUcKKwlwcmludGYoImZvbGxvd19saW5rOiByb290PSVsdSwgZGlyPSVsdSwgaW5vZGU9JWx1LCBsYz0lZFxuIiwKKwkgICAgICAgcm9vdCwgZGlyLCBpbm9kZSwgbGlua19jb3VudCk7CisKKyNlbmRpZgorCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlIChmcywgaW5vZGUsICZlaSk7CisJaWYgKHJldHZhbCkgcmV0dXJuIHJldHZhbDsKKwlpZiAoIUxJTlVYX1NfSVNMTksgKGVpLmlfbW9kZSkpIHsKKwkJKnJlc19pbm9kZSA9IGlub2RlOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGxpbmtfY291bnQrKyA+PSBFWFQyRlNfTUFYX05FU1RFRF9MSU5LUykKKwkJcmV0dXJuIEVYVDJfRVRfU1lNTElOS19MT09QOworCisJaWYgKGV4dDJmc19pbm9kZV9kYXRhX2Jsb2NrcyhmcywmZWkpKSB7CisJCXJldHZhbCA9IGV4dDJmc19ibWFwMihmcywgaW5vZGUsICZlaSwgTlVMTCwgMCwgMCwgTlVMTCwgJmJsayk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZidWZmZXIpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKworCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCBibGssIDEsIGJ1ZmZlcik7CisJCWlmIChyZXR2YWwpIHsKKwkJCWV4dDJmc19mcmVlX21lbSgmYnVmZmVyKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJcGF0aG5hbWUgPSBidWZmZXI7CisJfSBlbHNlCisJCXBhdGhuYW1lID0gKGNoYXIgKikmKGVpLmlfYmxvY2tbMF0pOworCXJldHZhbCA9IG9wZW5fbmFtZWkoZnMsIHJvb3QsIGRpciwgcGF0aG5hbWUsIGVpLmlfc2l6ZSwgMSwKKwkJCSAgICBsaW5rX2NvdW50LCBidWYsIHJlc19pbm9kZSk7CisJaWYgKGJ1ZmZlcikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZidWZmZXIpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaW50ZXJwcmV0cyBhIHBhdGhuYW1lIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50CisgKiBkaXJlY3RvcnkgYW5kIHRoZSByb290IGRpcmVjdG9yeSwgYW5kIHJldHVybnMgdGhlIGlub2RlIG9mIHRoZQorICogY29udGFpbmluZyBkaXJlY3RvcnksIGFuZCBhIHBvaW50ZXIgdG8gdGhlIGZpbGVuYW1lIG9mIHRoZSBmaWxlCisgKiAocG9pbnRpbmcgaW50byB0aGUgcGF0aG5hbWUpIGFuZCB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlbmFtZS4KKyAqLworc3RhdGljIGVycmNvZGVfdCBkaXJfbmFtZWkoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3Qgcm9vdCwgZXh0Ml9pbm9fdCBkaXIsCisJCQkgICBjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IHBhdGhsZW4sCisJCQkgICBpbnQgbGlua19jb3VudCwgY2hhciAqYnVmLAorCQkJICAgY29uc3QgY2hhciAqKm5hbWUsIGludCAqbmFtZWxlbiwKKwkJCSAgIGV4dDJfaW5vX3QgKnJlc19pbm9kZSkKK3sKKwljaGFyIGM7CisJY29uc3QgY2hhciAqdGhpc25hbWU7CisJaW50IGxlbjsKKwlleHQyX2lub190IGlub2RlOworCWVycmNvZGVfdCByZXR2YWw7CisKKwlpZiAoKGMgPSAqcGF0aG5hbWUpID09ICcvJykgeworICAgICAgICAJZGlyID0gcm9vdDsKKwkJcGF0aG5hbWUrKzsKKwkJcGF0aGxlbi0tOworCX0KKwl3aGlsZSAoMSkgeworICAgICAgICAJdGhpc25hbWUgPSBwYXRobmFtZTsKKwkJZm9yIChsZW49MDsgLS1wYXRobGVuID49IDA7bGVuKyspIHsKKwkJCWMgPSAqKHBhdGhuYW1lKyspOworCQkJaWYgKGMgPT0gJy8nKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChwYXRobGVuIDwgMCkKKwkJCWJyZWFrOworCQlyZXR2YWwgPSBleHQyZnNfbG9va3VwIChmcywgZGlyLCB0aGlzbmFtZSwgbGVuLCBidWYsICZpbm9kZSk7CisJCWlmIChyZXR2YWwpIHJldHVybiByZXR2YWw7CisgICAgICAgIAlyZXR2YWwgPSBmb2xsb3dfbGluayAoZnMsIHJvb3QsIGRpciwgaW5vZGUsCisJCQkJICAgICAgbGlua19jb3VudCwgYnVmLCAmZGlyKTsKKyAgICAgICAgCWlmIChyZXR2YWwpIHJldHVybiByZXR2YWw7CisgICAgCX0KKwkqbmFtZSA9IHRoaXNuYW1lOworCSpuYW1lbGVuID0gbGVuOworCSpyZXNfaW5vZGUgPSBkaXI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3Qgb3Blbl9uYW1laShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCByb290LCBleHQyX2lub190IGJhc2UsCisJCQkgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsIHNpemVfdCBwYXRobGVuLCBpbnQgZm9sbG93LAorCQkJICAgIGludCBsaW5rX2NvdW50LCBjaGFyICpidWYsIGV4dDJfaW5vX3QgKnJlc19pbm9kZSkKK3sKKwljb25zdCBjaGFyICpiYXNlX25hbWU7CisJaW50IG5hbWVsZW47CisJZXh0Ml9pbm9fdCBkaXIsIGlub2RlOworCWVycmNvZGVfdCByZXR2YWw7CisKKyNpZmRlZiBOQU1FSV9ERUJVRworCXByaW50Zigib3Blbl9uYW1laTogcm9vdD0lbHUsIGRpcj0lbHUsIHBhdGg9JSpzLCBsYz0lZFxuIiwKKwkgICAgICAgcm9vdCwgYmFzZSwgcGF0aGxlbiwgcGF0aG5hbWUsIGxpbmtfY291bnQpOworI2VuZGlmCisJcmV0dmFsID0gZGlyX25hbWVpKGZzLCByb290LCBiYXNlLCBwYXRobmFtZSwgcGF0aGxlbiwKKwkJCSAgIGxpbmtfY291bnQsIGJ1ZiwgJmJhc2VfbmFtZSwgJm5hbWVsZW4sICZkaXIpOworCWlmIChyZXR2YWwpIHJldHVybiByZXR2YWw7CisJaWYgKCFuYW1lbGVuKSB7ICAgICAgICAgICAgICAgICAgICAgLyogc3BlY2lhbCBjYXNlOiAnL3Vzci8nIGV0YyAqLworCQkqcmVzX2lub2RlPWRpcjsKKwkJcmV0dXJuIDA7CisJfQorCXJldHZhbCA9IGV4dDJmc19sb29rdXAgKGZzLCBkaXIsIGJhc2VfbmFtZSwgbmFtZWxlbiwgYnVmLCAmaW5vZGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJaWYgKGZvbGxvdykgeworCQlyZXR2YWwgPSBmb2xsb3dfbGluayhmcywgcm9vdCwgZGlyLCBpbm9kZSwgbGlua19jb3VudCwKKwkJCQkgICAgIGJ1ZiwgJmlub2RlKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorI2lmZGVmIE5BTUVJX0RFQlVHCisJcHJpbnRmKCJvcGVuX25hbWVpOiAobGlua19jb3VudD0lZCkgcmV0dXJucyAlbHVcbiIsCisJICAgICAgIGxpbmtfY291bnQsIGlub2RlKTsKKyNlbmRpZgorCSpyZXNfaW5vZGUgPSBpbm9kZTsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19uYW1laShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCByb290LCBleHQyX2lub190IGN3ZCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGV4dDJfaW5vX3QgKmlub2RlKQoreworCWNoYXIgKmJ1ZjsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZidWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBvcGVuX25hbWVpKGZzLCByb290LCBjd2QsIG5hbWUsIHN0cmxlbihuYW1lKSwgMCwgMCwKKwkJCSAgICBidWYsIGlub2RlKTsKKworCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX25hbWVpX2ZvbGxvdyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCByb290LCBleHQyX2lub190IGN3ZCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGV4dDJfaW5vX3QgKmlub2RlKQoreworCWNoYXIgKmJ1ZjsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZidWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBvcGVuX25hbWVpKGZzLCByb290LCBjd2QsIG5hbWUsIHN0cmxlbihuYW1lKSwgMSwgMCwKKwkJCSAgICBidWYsIGlub2RlKTsKKworCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2ZvbGxvd19saW5rKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IHJvb3QsIGV4dDJfaW5vX3QgY3dkLAorCQkJZXh0Ml9pbm9fdCBpbm9kZSwgZXh0Ml9pbm9fdCAqcmVzX2lub2RlKQoreworCWNoYXIgKmJ1ZjsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZidWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBmb2xsb3dfbGluayhmcywgcm9vdCwgY3dkLCBpbm9kZSwgMCwgYnVmLCByZXNfaW5vZGUpOworCisJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvbmF0aXZlLmMgYi9saWIvZXh0MmZzL25hdGl2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhM2UwYzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL25hdGl2ZS5jCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBuYXRpdmUuYyAtLS0gcmV0dXJucyB0aGUgZXh0Ml9mbGFnIGZvciBhIG5hdGl2ZSBieXRlIG9yZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworaW50IGV4dDJmc19uYXRpdmVfZmxhZyh2b2lkKQoreworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCXJldHVybiBFWFQyX0ZMQUdfU1dBUF9CWVRFUzsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworCisKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvbmV3ZGlyLmMgYi9saWIvZXh0MmZzL25ld2Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmMwZGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL25ld2Rpci5jCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBuZXdkaXIuYyAtLS0gY3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBibG9jaworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKKyNpZm5kZWYgRVhUMl9GVF9ESVIKKyNkZWZpbmUgRVhUMl9GVF9ESVIJCTIKKyNlbmRpZgorCisvKgorICogQ3JlYXRlIG5ldyBkaXJlY3RvcnkgYmxvY2sKKyAqLworZXJyY29kZV90IGV4dDJmc19uZXdfZGlyX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGRpcl9pbm8sCisJCQkgICAgICAgZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjaGFyICoqYmxvY2spCit7CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5IAkqZGlyID0gTlVMTDsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwljaGFyCQkJKmJ1ZjsKKwlpbnQJCQlyZWNfbGVuOworCWludAkJCWZpbGV0eXBlID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmYnVmKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCW1lbXNldChidWYsIDAsIGZzLT5ibG9ja3NpemUpOworCWRpciA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikgYnVmOworCisJcmV0dmFsID0gZXh0MmZzX3NldF9yZWNfbGVuKGZzLCBmcy0+YmxvY2tzaXplLCBkaXIpOworCWlmIChyZXR2YWwpIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmIChkaXJfaW5vKSB7CisJCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCSAgICBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUpCisJCQlmaWxldHlwZSA9IEVYVDJfRlRfRElSIDw8IDg7CisJCS8qCisJCSAqIFNldCB1cCBlbnRyeSBmb3IgJy4nCisJCSAqLworCQlkaXItPmlub2RlID0gZGlyX2lubzsKKwkJZGlyLT5uYW1lX2xlbiA9IDEgfCBmaWxldHlwZTsKKwkJZGlyLT5uYW1lWzBdID0gJy4nOworCQlyZWNfbGVuID0gZnMtPmJsb2Nrc2l6ZSAtIEVYVDJfRElSX1JFQ19MRU4oMSk7CisJCWRpci0+cmVjX2xlbiA9IEVYVDJfRElSX1JFQ19MRU4oMSk7CisKKwkJLyoKKwkJICogU2V0IHVwIGVudHJ5IGZvciAnLi4nCisJCSAqLworCQlkaXIgPSAoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICopIChidWYgKyBkaXItPnJlY19sZW4pOworCQlyZXR2YWwgPSBleHQyZnNfc2V0X3JlY19sZW4oZnMsIHJlY19sZW4sIGRpcik7CisJCWlmIChyZXR2YWwpIHsKKwkJCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJZGlyLT5pbm9kZSA9IHBhcmVudF9pbm87CisJCWRpci0+bmFtZV9sZW4gPSAyIHwgZmlsZXR5cGU7CisJCWRpci0+bmFtZVswXSA9ICcuJzsKKwkJZGlyLT5uYW1lWzFdID0gJy4nOworCisJfQorCSpibG9jayA9IGJ1ZjsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvbnRfaW8uYyBiL2xpYi9leHQyZnMvbnRfaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGQxNmFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9udF9pby5jCkBAIC0wLDAgKzEsMTQ5NCBAQAorLyoKKyAqIG50X2lvLmMgLS0tIFRoaXMgaXMgdGhlIE50IEkvTyBpbnRlcmZhY2UgdG8gdGhlIEkvTyBtYW5hZ2VyLgorICoKKyAqIEltcGxlbWVudHMgYSBvbmUtYmxvY2sgd3JpdGUtdGhyb3VnaCBjYWNoZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUgVGhlb2RvcmUgVHMnby4KKyAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXkgU2hlZGVsIChhbmRyZXlzQG5zLmNyLmN5Y28uY29tKQorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisKKy8vCisvLyBJIG5lZWQgc29tZSB3YXJuaW5ncyB0byBkaXNhYmxlLi4uCisvLworCisKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ1MTQpIC8vIHVucmVmZXJlbmNlZCBpbmxpbmUgZnVuY3Rpb24gaGFzIGJlZW4gcmVtb3ZlZAorI3ByYWdtYSB3YXJuaW5nKHB1c2gsNCkKKworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDIwMSkgLy8gbm9uc3RhbmRhcmQgZXh0ZW5zaW9uIHVzZWQgOiBuYW1lbGVzcyBzdHJ1Y3QvdW5pb24pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjE0KSAvLyBub25zdGFuZGFyZCBleHRlbnNpb24gdXNlZCA6IGJpdCBmaWVsZCB0eXBlcyBvdGhlciB0aGFuIGludAorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDExNSkgLy8gbmFtZWQgdHlwZSBkZWZpbml0aW9uIGluIHBhcmVudGhlc2VzCisKKyNpbmNsdWRlIDxudGRkay5oPgorI2luY2x1ZGUgPG50ZGRkaXNrLmg+CisjaW5jbHVkZSA8bnRzdGF0dXMuaD4KKworI3ByYWdtYSB3YXJuaW5nKHBvcCkKKworCisvLworLy8gU29tZSBuYXRpdmUgQVBJcy4KKy8vCisKK05UU1lTQVBJCitVTE9ORworTlRBUEkKK1J0bE50U3RhdHVzVG9Eb3NFcnJvcigKKyAgICBJTiBOVFNUQVRVUyBTdGF0dXMKKyAgICk7CisKK05UU1lTQVBJCitOVFNUQVRVUworTlRBUEkKK050Q2xvc2UoCisgICAgSU4gSEFORExFIEhhbmRsZQorICAgKTsKKworCitOVFNZU0FQSQorTlRTVEFUVVMKK05UQVBJCitOdE9wZW5GaWxlKAorICAgIE9VVCBQSEFORExFIEZpbGVIYW5kbGUsCisgICAgSU4gQUNDRVNTX01BU0sgRGVzaXJlZEFjY2VzcywKKyAgICBJTiBQT0JKRUNUX0FUVFJJQlVURVMgT2JqZWN0QXR0cmlidXRlcywKKyAgICBPVVQgUElPX1NUQVRVU19CTE9DSyBJb1N0YXR1c0Jsb2NrLAorICAgIElOIFVMT05HIFNoYXJlQWNjZXNzLAorICAgIElOIFVMT05HIE9wZW5PcHRpb25zCisgICAgKTsKKworTlRTWVNBUEkKK05UU1RBVFVTCitOVEFQSQorTnRGbHVzaEJ1ZmZlcnNGaWxlKAorICAgIElOIEhBTkRMRSBGaWxlSGFuZGxlLAorICAgIE9VVCBQSU9fU1RBVFVTX0JMT0NLIElvU3RhdHVzQmxvY2sKKyAgICk7CisKKworTlRTWVNBUEkKK05UU1RBVFVTCitOVEFQSQorTnRSZWFkRmlsZSgKKyAgICBJTiBIQU5ETEUgRmlsZUhhbmRsZSwKKyAgICBJTiBIQU5ETEUgRXZlbnQgT1BUSU9OQUwsCisgICAgSU4gUElPX0FQQ19ST1VUSU5FIEFwY1JvdXRpbmUgT1BUSU9OQUwsCisgICAgSU4gUFZPSUQgQXBjQ29udGV4dCBPUFRJT05BTCwKKyAgICBPVVQgUElPX1NUQVRVU19CTE9DSyBJb1N0YXR1c0Jsb2NrLAorICAgIE9VVCBQVk9JRCBCdWZmZXIsCisgICAgSU4gVUxPTkcgTGVuZ3RoLAorICAgIElOIFBMQVJHRV9JTlRFR0VSIEJ5dGVPZmZzZXQgT1BUSU9OQUwsCisgICAgSU4gUFVMT05HIEtleSBPUFRJT05BTAorICAgICk7CisKK05UU1lTQVBJCitOVFNUQVRVUworTlRBUEkKK050V3JpdGVGaWxlKAorICAgIElOIEhBTkRMRSBGaWxlSGFuZGxlLAorICAgIElOIEhBTkRMRSBFdmVudCBPUFRJT05BTCwKKyAgICBJTiBQSU9fQVBDX1JPVVRJTkUgQXBjUm91dGluZSBPUFRJT05BTCwKKyAgICBJTiBQVk9JRCBBcGNDb250ZXh0IE9QVElPTkFMLAorICAgIE9VVCBQSU9fU1RBVFVTX0JMT0NLIElvU3RhdHVzQmxvY2ssCisgICAgSU4gUFZPSUQgQnVmZmVyLAorICAgIElOIFVMT05HIExlbmd0aCwKKyAgICBJTiBQTEFSR0VfSU5URUdFUiBCeXRlT2Zmc2V0IE9QVElPTkFMLAorICAgIElOIFBVTE9ORyBLZXkgT1BUSU9OQUwKKyAgICApOworCitOVFNZU0FQSQorTlRTVEFUVVMKK05UQVBJCitOdERldmljZUlvQ29udHJvbEZpbGUoCisgICAgSU4gSEFORExFIEZpbGVIYW5kbGUsCisgICAgSU4gSEFORExFIEV2ZW50IE9QVElPTkFMLAorICAgIElOIFBJT19BUENfUk9VVElORSBBcGNSb3V0aW5lIE9QVElPTkFMLAorICAgIElOIFBWT0lEIEFwY0NvbnRleHQgT1BUSU9OQUwsCisgICAgT1VUIFBJT19TVEFUVVNfQkxPQ0sgSW9TdGF0dXNCbG9jaywKKyAgICBJTiBVTE9ORyBJb0NvbnRyb2xDb2RlLAorICAgIElOIFBWT0lEIElucHV0QnVmZmVyIE9QVElPTkFMLAorICAgIElOIFVMT05HIElucHV0QnVmZmVyTGVuZ3RoLAorICAgIE9VVCBQVk9JRCBPdXRwdXRCdWZmZXIgT1BUSU9OQUwsCisgICAgSU4gVUxPTkcgT3V0cHV0QnVmZmVyTGVuZ3RoCisgICAgKTsKKworTlRTWVNBUEkKK05UU1RBVFVTCitOVEFQSQorTnRGc0NvbnRyb2xGaWxlKAorICAgIElOIEhBTkRMRSBGaWxlSGFuZGxlLAorICAgIElOIEhBTkRMRSBFdmVudCBPUFRJT05BTCwKKyAgICBJTiBQSU9fQVBDX1JPVVRJTkUgQXBjUm91dGluZSBPUFRJT05BTCwKKyAgICBJTiBQVk9JRCBBcGNDb250ZXh0IE9QVElPTkFMLAorICAgIE9VVCBQSU9fU1RBVFVTX0JMT0NLIElvU3RhdHVzQmxvY2ssCisgICAgSU4gVUxPTkcgSW9Db250cm9sQ29kZSwKKyAgICBJTiBQVk9JRCBJbnB1dEJ1ZmZlciBPUFRJT05BTCwKKyAgICBJTiBVTE9ORyBJbnB1dEJ1ZmZlckxlbmd0aCwKKyAgICBPVVQgUFZPSUQgT3V0cHV0QnVmZmVyIE9QVElPTkFMLAorICAgIElOIFVMT05HIE91dHB1dEJ1ZmZlckxlbmd0aAorICAgICk7CisKKworTlRTWVNBUEkKK05UU1RBVFVTCitOVEFQSQorTnREZWxheUV4ZWN1dGlvbigKKyAgICBJTiBCT09MRUFOIEFsZXJ0YWJsZSwKKyAgICBJTiBQTEFSR0VfSU5URUdFUiBJbnRlcnZhbAorICAgICk7CisKKworI2RlZmluZSBGU0NUTF9MT0NLX1ZPTFVNRSAgICAgICAgICAgICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLCA2LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKyNkZWZpbmUgRlNDVExfVU5MT0NLX1ZPTFVNRSAgICAgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgNywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIEZTQ1RMX0RJU01PVU5UX1ZPTFVNRSAgICAgICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDgsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBGU0NUTF9JU19WT0xVTUVfTU9VTlRFRCAgICAgICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLDEwLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKworCisvLworLy8gdXNlZnVsIG1hY3JvcworLy8KKworI2RlZmluZSBCb29sZWFuRmxhZ09uKEZsYWdzLFNpbmdsZUZsYWcpICgoQk9PTEVBTikoKCgoRmxhZ3MpICYgKFNpbmdsZUZsYWcpKSAhPSAwKSkpCisKKworLy8KKy8vIEluY2x1ZGUgV2luMzIgZXJyb3IgY29kZXMuCisvLworCisjaW5jbHVkZSA8d2luZXJyb3IuaD4KKworLy8KKy8vIHN0YW5kYXJkIHN0dWZmCisvLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJldC9jb21fZXJyLmgiCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyX2Vyci5oIgorCisKKworCisvLworLy8gRm9yIGNoZWNraW5nIHN0cnVjdHVyZSBtYWdpYyBudW1iZXJzLi4uCisvLworCisKKyNkZWZpbmUgRVhUMl9DSEVDS19NQUdJQyhzdHJ1Y3QsIGNvZGUpIFwKKwkgIGlmICgoc3RydWN0KS0+bWFnaWMgIT0gKGNvZGUpKSByZXR1cm4gKGNvZGUpCisKKyNkZWZpbmUgRVhUMl9FVF9NQUdJQ19OVF9JT19DSEFOTkVMICAweDEwZWQKKworCisvLworLy8gUHJpdmF0ZSBkYXRhIGJsb2NrCisvLworCit0eXBlZGVmIHN0cnVjdCBfTlRfUFJJVkFURV9EQVRBIHsKKwlpbnQJICAgbWFnaWM7CisJSEFORExFIEhhbmRsZTsKKwlpbnQJICAgRmxhZ3M7CisJUENIQVIgIEJ1ZmZlcjsKKwlfX3UzMiAgQnVmZmVyQmxvY2tOdW1iZXI7CisJVUxPTkcgIEJ1ZmZlclNpemU7CisJQk9PTEVBTiBPcGVuZWRSZWFkb25seTsKKwlCT09MRUFOIFdyaXR0ZW47Cit9TlRfUFJJVkFURV9EQVRBLCAqUE5UX1BSSVZBVEVfREFUQTsKKworCisKKy8vCisvLyBTdGFuZGFyZCBpbnRlcmZhY2UgcHJvdG90eXBlcworLy8KKworc3RhdGljIGVycmNvZGVfdCBudF9vcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywgaW9fY2hhbm5lbCAqY2hhbm5lbCk7CitzdGF0aWMgZXJyY29kZV90IG50X2Nsb3NlKGlvX2NoYW5uZWwgY2hhbm5lbCk7CitzdGF0aWMgZXJyY29kZV90IG50X3NldF9ibGtzaXplKGlvX2NoYW5uZWwgY2hhbm5lbCwgaW50IGJsa3NpemUpOworc3RhdGljIGVycmNvZGVfdCBudF9yZWFkX2Jsayhpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisJCQkgICAgICAgaW50IGNvdW50LCB2b2lkICpkYXRhKTsKK3N0YXRpYyBlcnJjb2RlX3QgbnRfd3JpdGVfYmxrKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBibG9jaywKKwkJCQlpbnQgY291bnQsIGNvbnN0IHZvaWQgKmRhdGEpOworc3RhdGljIGVycmNvZGVfdCBudF9mbHVzaChpb19jaGFubmVsIGNoYW5uZWwpOworCitzdGF0aWMgc3RydWN0IHN0cnVjdF9pb19tYW5hZ2VyIHN0cnVjdF9udF9tYW5hZ2VyID0geworCS5tYWdpYwkJPSBFWFQyX0VUX01BR0lDX0lPX01BTkFHRVIsCisJLm5hbWUJCT0gIk5UIEkvTyBNYW5hZ2VyIiwKKwkub3BlbgkJPSBudF9vcGVuLAorCS5jbG9zZQkJPSBudF9jbG9zZSwKKwkuc2V0X2Jsa3NpemUJPSBudF9zZXRfYmxrc2l6ZSwKKwkucmVhZF9ibGsJPSBudF9yZWFkX2JsaywKKwkud3JpdGVfYmxrCT0gbnRfd3JpdGVfYmxrLAorCS5mbHVzaAkJPSBudF9mbHVzaAorfTsKKworLy8KKy8vIGZ1bmN0aW9uIHRvIGdldCBBUEkKKy8vCisKK2lvX21hbmFnZXIgbnRfaW9fbWFuYWdlcigpCit7CisJcmV0dXJuICZzdHJ1Y3RfbnRfbWFuYWdlcjsKK30KKworCisKKworCisvLworLy8gVGhpcyBpcyBhIGNvZGUgdG8gY29udmVydCBXaW4zMiBlcnJvcnMgdG8gdW5peCBlcnJubworLy8KKwordHlwZWRlZiBzdHJ1Y3QgeworCVVMT05HIFdpbkVycm9yOworCWludCBlcnJub2NvZGU7Cit9RVJST1JfRU5UUlk7CisKK3N0YXRpYyBFUlJPUl9FTlRSWSBFcnJvclRhYmxlW10gPSB7CisgICAgICAgIHsgIEVSUk9SX0lOVkFMSURfRlVOQ1RJT04sICAgICAgIEVJTlZBTCAgICB9LAorICAgICAgICB7ICBFUlJPUl9GSUxFX05PVF9GT1VORCwgICAgICAgICBFTk9FTlQgICAgfSwKKyAgICAgICAgeyAgRVJST1JfUEFUSF9OT1RfRk9VTkQsICAgICAgICAgRU5PRU5UICAgIH0sCisgICAgICAgIHsgIEVSUk9SX1RPT19NQU5ZX09QRU5fRklMRVMsICAgIEVNRklMRSAgICB9LAorICAgICAgICB7ICBFUlJPUl9BQ0NFU1NfREVOSUVELCAgICAgICAgICBFQUNDRVMgICAgfSwKKyAgICAgICAgeyAgRVJST1JfSU5WQUxJRF9IQU5ETEUsICAgICAgICAgRUJBREYgICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0FSRU5BX1RSQVNIRUQsICAgICAgICAgIEVOT01FTSAgICB9LAorICAgICAgICB7ICBFUlJPUl9OT1RfRU5PVUdIX01FTU9SWSwgICAgICBFTk9NRU0gICAgfSwKKyAgICAgICAgeyAgRVJST1JfSU5WQUxJRF9CTE9DSywgICAgICAgICAgRU5PTUVNICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0JBRF9FTlZJUk9OTUVOVCwgICAgICAgIEUyQklHICAgICB9LAorICAgICAgICB7ICBFUlJPUl9CQURfRk9STUFULCAgICAgICAgICAgICBFTk9FWEVDICAgfSwKKyAgICAgICAgeyAgRVJST1JfSU5WQUxJRF9BQ0NFU1MsICAgICAgICAgRUlOVkFMICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0lOVkFMSURfREFUQSwgICAgICAgICAgIEVJTlZBTCAgICB9LAorICAgICAgICB7ICBFUlJPUl9JTlZBTElEX0RSSVZFLCAgICAgICAgICBFTk9FTlQgICAgfSwKKyAgICAgICAgeyAgRVJST1JfQ1VSUkVOVF9ESVJFQ1RPUlksICAgICAgRUFDQ0VTICAgIH0sCisgICAgICAgIHsgIEVSUk9SX05PVF9TQU1FX0RFVklDRSwgICAgICAgIEVYREVWICAgICB9LAorICAgICAgICB7ICBFUlJPUl9OT19NT1JFX0ZJTEVTLCAgICAgICAgICBFTk9FTlQgICAgfSwKKyAgICAgICAgeyAgRVJST1JfTE9DS19WSU9MQVRJT04sICAgICAgICAgRUFDQ0VTICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0JBRF9ORVRQQVRILCAgICAgICAgICAgIEVOT0VOVCAgICB9LAorICAgICAgICB7ICBFUlJPUl9ORVRXT1JLX0FDQ0VTU19ERU5JRUQsICBFQUNDRVMgICAgfSwKKyAgICAgICAgeyAgRVJST1JfQkFEX05FVF9OQU1FLCAgICAgICAgICAgRU5PRU5UICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0ZJTEVfRVhJU1RTLCAgICAgICAgICAgIEVFWElTVCAgICB9LAorICAgICAgICB7ICBFUlJPUl9DQU5OT1RfTUFLRSwgICAgICAgICAgICBFQUNDRVMgICAgfSwKKyAgICAgICAgeyAgRVJST1JfRkFJTF9JMjQsICAgICAgICAgICAgICAgRUFDQ0VTICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSLCAgICAgIEVJTlZBTCAgICB9LAorICAgICAgICB7ICBFUlJPUl9OT19QUk9DX1NMT1RTLCAgICAgICAgICBFQUdBSU4gICAgfSwKKyAgICAgICAgeyAgRVJST1JfRFJJVkVfTE9DS0VELCAgICAgICAgICAgRUFDQ0VTICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0JST0tFTl9QSVBFLCAgICAgICAgICAgIEVQSVBFICAgICB9LAorICAgICAgICB7ICBFUlJPUl9ESVNLX0ZVTEwsICAgICAgICAgICAgICBFTk9TUEMgICAgfSwKKyAgICAgICAgeyAgRVJST1JfSU5WQUxJRF9UQVJHRVRfSEFORExFLCAgRUJBREYgICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0lOVkFMSURfSEFORExFLCAgICAgICAgIEVJTlZBTCAgICB9LAorICAgICAgICB7ICBFUlJPUl9XQUlUX05PX0NISUxEUkVOLCAgICAgICBFQ0hJTEQgICAgfSwKKyAgICAgICAgeyAgRVJST1JfQ0hJTERfTk9UX0NPTVBMRVRFLCAgICAgRUNISUxEICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0RJUkVDVF9BQ0NFU1NfSEFORExFLCAgIEVCQURGICAgICB9LAorICAgICAgICB7ICBFUlJPUl9ORUdBVElWRV9TRUVLLCAgICAgICAgICBFSU5WQUwgICAgfSwKKyAgICAgICAgeyAgRVJST1JfU0VFS19PTl9ERVZJQ0UsICAgICAgICAgRUFDQ0VTICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0RJUl9OT1RfRU1QVFksICAgICAgICAgIEVOT1RFTVBUWSB9LAorICAgICAgICB7ICBFUlJPUl9OT1RfTE9DS0VELCAgICAgICAgICAgICBFQUNDRVMgICAgfSwKKyAgICAgICAgeyAgRVJST1JfQkFEX1BBVEhOQU1FLCAgICAgICAgICAgRU5PRU5UICAgIH0sCisgICAgICAgIHsgIEVSUk9SX01BWF9USFJEU19SRUFDSEVELCAgICAgIEVBR0FJTiAgICB9LAorICAgICAgICB7ICBFUlJPUl9MT0NLX0ZBSUxFRCwgICAgICAgICAgICBFQUNDRVMgICAgfSwKKyAgICAgICAgeyAgRVJST1JfQUxSRUFEWV9FWElTVFMsICAgICAgICAgRUVYSVNUICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0ZJTEVOQU1FX0VYQ0VEX1JBTkdFLCAgIEVOT0VOVCAgICB9LAorICAgICAgICB7ICBFUlJPUl9ORVNUSU5HX05PVF9BTExPV0VELCAgICBFQUdBSU4gICAgfSwKKyAgICAgICAgeyAgRVJST1JfTk9UX0VOT1VHSF9RVU9UQSwgICAgICAgRU5PTUVNICAgIH0KK307CisKKworCisKK3N0YXRpYwordW5zaWduZWQKK19NYXBEb3NFcnJvciAoCisgICAgSU4gVUxPTkcgV2luRXJyb3IKKyAgICkKK3sKKwlpbnQgaTsKKworCS8vCisJLy8gTG9va3VwCisJLy8KKworCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKEVycm9yVGFibGUpL3NpemVvZihFcnJvclRhYmxlWzBdKSk7ICsraSkKKwl7CisJCWlmIChXaW5FcnJvciA9PSBFcnJvclRhYmxlW2ldLldpbkVycm9yKQorCQl7CisJCQlyZXR1cm4gRXJyb3JUYWJsZVtpXS5lcnJub2NvZGU7CisJCX0KKwl9CisKKwkvLworCS8vIG5vdCBpbiB0YWJsZS4gQ2hlY2sgcmFuZ2VzCisJLy8KKworCWlmICgoV2luRXJyb3IgPj0gRVJST1JfV1JJVEVfUFJPVEVDVCkgJiYKKwkJKFdpbkVycm9yIDw9IEVSUk9SX1NIQVJJTkdfQlVGRkVSX0VYQ0VFREVEKSkKKwl7CisJCXJldHVybiBFQUNDRVM7CisJfQorCWVsc2UgaWYgKChXaW5FcnJvciA+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+SGFuZGxlLCAweDgzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL29wZW5mcy5jIGIvbGliL2V4dDJmcy9vcGVuZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTUwMWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9vcGVuZnMuYwpAQCAtMCwwICsxLDUwNyBAQAorLyoKKyAqIG9wZW5mcy5jIC0tLSBvcGVuIGFuIGV4dDIgZmlsZXN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKworCisjaW5jbHVkZSAiZXh0MmZzLmgiCisjaW5jbHVkZSAiZTJpbWFnZS5oIgorCitibGs2NF90IGV4dDJmc19kZXNjcmlwdG9yX2Jsb2NrX2xvYzIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgZ3JvdXBfYmxvY2ssCisJCQkJICAgICBkZ3JwX3QgaSkKK3sKKwlpbnQJYmc7CisJaW50CWhhc19zdXBlciA9IDAsIGdyb3VwX3plcm9fYWRqdXN0ID0gMDsKKwlibGs2NF90CXJldF9ibGs7CisKKwkvKgorCSAqIE9uIGEgYmlnYWxsb2MgRlMgd2l0aCAxSyBibG9ja3MsIGJsb2NrIDAgaXMgcmVzZXJ2ZWQgZm9yIG5vbi1leHQ0CisJICogc3R1ZmYsIHNvIGFkanVzdCBmb3IgdGhhdCBpZiB3ZSdyZSBiZWluZyBhc2tlZCBmb3IgZ3JvdXAgMC4KKwkgKi8KKwlpZiAoaSA9PSAwICYmIGZzLT5ibG9ja3NpemUgPT0gMTAyNCAmJiBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykgPiAxKQorCQlncm91cF96ZXJvX2FkanVzdCA9IDE7CisKKwlpZiAoIShmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKSB8fAorCSAgICAoaSA8IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnKSkKKwkJcmV0dXJuIGdyb3VwX2Jsb2NrICsgaSArIDEgKyBncm91cF96ZXJvX2FkanVzdDsKKworCWJnID0gRVhUMl9ERVNDX1BFUl9CTE9DSyhmcy0+c3VwZXIpICogaTsKKwlpZiAoZXh0MmZzX2JnX2hhc19zdXBlcihmcywgYmcpKQorCQloYXNfc3VwZXIgPSAxOworCXJldF9ibGsgPSBleHQyZnNfZ3JvdXBfZmlyc3RfYmxvY2syKGZzLCBiZyk7CisJLyoKKwkgKiBJZiBncm91cF9ibG9jayBpcyBub3QgdGhlIG5vcm1hbCB2YWx1ZSwgd2UncmUgdHJ5aW5nIHRvIHVzZQorCSAqIHRoZSBiYWNrdXAgZ3JvdXAgZGVzY3JpcHRvcnMgYW5kIHN1cGVyYmxvY2sgLS0tIHNvIHVzZSB0aGUKKwkgKiBhbHRlcm5hdGUgbG9jYXRpb24gb2YgdGhlIHNlY29uZCBibG9jayBncm91cCBpbiB0aGUKKwkgKiBtZXRhYmxvY2sgZ3JvdXAuICBJZGVhbGx5IHdlIHNob3VsZCBiZSB0ZXN0aW5nIGVhY2ggYmcKKwkgKiBkZXNjcmlwdG9yIGJsb2NrIGluZGl2aWR1YWxseSBmb3IgY29ycmVjdG5lc3MsIGJ1dCB3ZSBkb24ndAorCSAqIGhhdmUgdGhlIGluZnJhc3RydWN0dXJlIGluIHBsYWNlIHRvIGRvIHRoYXQuCisJICovCisJaWYgKGdyb3VwX2Jsb2NrICE9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrICYmCisJICAgICgocmV0X2JsayArIGhhc19zdXBlciArIGZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwKSA8CisJICAgICBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpKSB7CisJCXJldF9ibGsgKz0gZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisKKwkJLyoKKwkJICogSWYgd2UncmUgZ29pbmcgdG8ganVtcCBmb3J3YXJkIGEgYmxvY2sgZ3JvdXAsIG1ha2Ugc3VyZQorCQkgKiB0aGF0IHdlIGFkanVzdCBoYXNfc3VwZXIgdG8gYWNjb3VudCBmb3IgdGhlIG5leHQgZ3JvdXAncworCQkgKiBiYWNrdXAgc3VwZXJibG9jayAob3IgbGFjayB0aGVyZW9mKS4KKwkJICovCisJCWlmIChleHQyZnNfYmdfaGFzX3N1cGVyKGZzLCBiZyArIDEpKQorCQkJaGFzX3N1cGVyID0gMTsKKwkJZWxzZQorCQkJaGFzX3N1cGVyID0gMDsKKwl9CisJcmV0dXJuIHJldF9ibGsgKyBoYXNfc3VwZXIgKyBncm91cF96ZXJvX2FkanVzdDsKK30KKworYmxrX3QgZXh0MmZzX2Rlc2NyaXB0b3JfYmxvY2tfbG9jKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBncm91cF9ibG9jaywgZGdycF90IGkpCit7CisJcmV0dXJuIGV4dDJmc19kZXNjcmlwdG9yX2Jsb2NrX2xvYzIoZnMsIGdyb3VwX2Jsb2NrLCBpKTsKK30KKworZXJyY29kZV90IGV4dDJmc19vcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywgaW50IHN1cGVyYmxvY2ssCisJCSAgICAgIHVuc2lnbmVkIGludCBibG9ja19zaXplLCBpb19tYW5hZ2VyIG1hbmFnZXIsCisJCSAgICAgIGV4dDJfZmlsc3lzICpyZXRfZnMpCit7CisJcmV0dXJuIGV4dDJmc19vcGVuMihuYW1lLCAwLCBmbGFncywgc3VwZXJibG9jaywgYmxvY2tfc2l6ZSwKKwkJCSAgICBtYW5hZ2VyLCByZXRfZnMpOworfQorCisvKgorICogIE5vdGU6IGlmIHN1cGVyYmxvY2sgaXMgbm9uLXplcm8sIGJsb2NrLXNpemUgbXVzdCBhbHNvIGJlIG5vbi16ZXJvLgorICogCVN1cGVyYmxvY2sgYW5kIGJsb2NrX3NpemUgY2FuIGJlIHplcm8gdG8gdXNlIHRoZSBkZWZhdWx0IHNpemUuCisgKgorICogVmFsaWQgZmxhZ3MgZm9yIGV4dDJmc19vcGVuKCkKKyAqCisgKiAJRVhUMl9GTEFHX1JXCS0gT3BlbiB0aGUgZmlsZXN5c3RlbSBmb3IgcmVhZC93cml0ZS4KKyAqIAlFWFQyX0ZMQUdfRk9SQ0UgLSBPcGVuIHRoZSBmaWxlc3lzdGVtIGV2ZW4gaWYgc29tZSBvZiB0aGUKKyAqCQkJCWZlYXR1cmVzIGFyZW4ndCBzdXBwb3J0ZWQuCisgKglFWFQyX0ZMQUdfSk9VUk5BTF9ERVZfT0sgLSBPcGVuIGFuIGV4dDMgam91cm5hbCBkZXZpY2UKKyAqCUVYVDJfRkxBR19TS0lQX01NUCAtIE9wZW4gd2l0aG91dCBtdWx0aS1tb3VudCBwcm90ZWN0aW9uIGNoZWNrLgorICoJRVhUMl9GTEFHXzY0QklUUyAtIEFsbG93IDY0LWJpdCBiaXRmaWVsZHMgKG5lZWRlZCBmb3IgbGFyZ2UKKyAqCQkJCWZpbGVzeXN0ZW1zKQorICovCitlcnJjb2RlX3QgZXh0MmZzX29wZW4yKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmlvX29wdGlvbnMsCisJCSAgICAgICBpbnQgZmxhZ3MsIGludCBzdXBlcmJsb2NrLAorCQkgICAgICAgdW5zaWduZWQgaW50IGJsb2NrX3NpemUsIGlvX21hbmFnZXIgbWFuYWdlciwKKwkJICAgICAgIGV4dDJfZmlsc3lzICpyZXRfZnMpCit7CisJZXh0Ml9maWxzeXMJZnM7CisJZXJyY29kZV90CXJldHZhbDsKKwl1bnNpZ25lZCBsb25nCWksIGZpcnN0X21ldGFfYmc7CisJX191MzIJCWZlYXR1cmVzOworCXVuc2lnbmVkIGludAlibG9ja3NfcGVyX2dyb3VwLCBpb19mbGFnczsKKwlibGs2NF90CQlncm91cF9ibG9jaywgYmxrOworCWNoYXIJCSpkZXN0LCAqY3A7CisJaW50CQlncm91cF96ZXJvX2FkanVzdCA9IDA7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJdW5zaWduZWQgaW50CWdyb3Vwc19wZXJfYmxvY2s7CisJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqZ2RwOworCWludAkJajsKKyNlbmRpZgorCisJRVhUMl9DSEVDS19NQUdJQyhtYW5hZ2VyLCBFWFQyX0VUX01BR0lDX0lPX01BTkFHRVIpOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBzdHJ1Y3RfZXh0Ml9maWxzeXMpLCAmZnMpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwltZW1zZXQoZnMsIDAsIHNpemVvZihzdHJ1Y3Qgc3RydWN0X2V4dDJfZmlsc3lzKSk7CisJZnMtPm1hZ2ljID0gRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTOworCWZzLT5mbGFncyA9IGZsYWdzOworCS8qIGRvbid0IG92ZXJ3cml0ZSBzYiBiYWNrdXBzIHVubGVzcyBmbGFnIGlzIGV4cGxpY2l0bHkgY2xlYXJlZCAqLworCWZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFk7CisJZnMtPnVtYXNrID0gMDIyOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHN0cmxlbihuYW1lKSsxLCAmZnMtPmRldmljZV9uYW1lKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisJc3RyY3B5KGZzLT5kZXZpY2VfbmFtZSwgbmFtZSk7CisJY3AgPSBzdHJjaHIoZnMtPmRldmljZV9uYW1lLCAnPycpOworCWlmICghaW9fb3B0aW9ucyAmJiBjcCkgeworCQkqY3ArKyA9IDA7CisJCWlvX29wdGlvbnMgPSBjcDsKKwl9CisKKwlpb19mbGFncyA9IDA7CisJaWYgKGZsYWdzICYgRVhUMl9GTEFHX1JXKQorCQlpb19mbGFncyB8PSBJT19GTEFHX1JXOworCWlmIChmbGFncyAmIEVYVDJfRkxBR19FWENMVVNJVkUpCisJCWlvX2ZsYWdzIHw9IElPX0ZMQUdfRVhDTFVTSVZFOworCWlmIChmbGFncyAmIEVYVDJfRkxBR19ESVJFQ1RfSU8pCisJCWlvX2ZsYWdzIHw9IElPX0ZMQUdfRElSRUNUX0lPOworCXJldHZhbCA9IG1hbmFnZXItPm9wZW4oZnMtPmRldmljZV9uYW1lLCBpb19mbGFncywgJmZzLT5pbyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCWlmIChpb19vcHRpb25zICYmCisJICAgIChyZXR2YWwgPSBpb19jaGFubmVsX3NldF9vcHRpb25zKGZzLT5pbywgaW9fb3B0aW9ucykpKQorCQlnb3RvIGNsZWFudXA7CisJZnMtPmltYWdlX2lvID0gZnMtPmlvOworCWZzLT5pby0+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+c19maXJzdF9kYXRhX2Jsb2NrOworCS8qCisJICogT24gYSBGUyB3aXRoIGEgMUsgYmxvY2tzaXplLCBibG9jayAwIGlzIHJlc2VydmVkIGZvciBib290bG9hZGVycworCSAqIHNvIHdlIG11c3QgaW5jcmVtZW50IGJsb2NrIG51bWJlcnMgdG8gYW55IGdyb3VwIDAgaXRlbXMuCisJICoKKwkgKiBIb3dldmVyLCB3ZSBjYW5ub3QgdG91Y2ggZ3JvdXBfYmxvY2sgZGlyZWN0bHkgYmVjYXVzZSBpbiB0aGUgbWV0YV9iZworCSAqIGNhc2UsIHRoZSBleHQyZnNfZGVzY3JpcHRvcl9ibG9ja19sb2MyKCkgZnVuY3Rpb24gd2lsbCBpbnRlcnByZXQKKwkgKiBncm91cF9ibG9jayAhPSBzX2ZpcnN0X2RhdGFfYmxvY2sgdG8gbWVhbiB0aGF0IHdlIHdhbnQgdG8gYWNjZXNzIHRoZQorCSAqIGJhY2t1cCBncm91cCBkZXNjcmlwdG9ycy4gIFRoaXMgaXMgbm90IHdoYXQgd2Ugd2FudCBpZiB0aGUgY2FsbGVyCisJICogc2V0IHN1cGVyYmxvY2sgPT0gMCAoaS5lLiBhdXRvLWRldGVjdCB0aGUgc3VwZXJibG9jayksIHdoaWNoIGlzCisJICogd2hhdCdzIGdvaW5nIG9uIGhlcmUuCisJICovCisJaWYgKGdyb3VwX2Jsb2NrID09IDAgJiYgZnMtPmJsb2Nrc2l6ZSA9PSAxMDI0KQorCQlncm91cF96ZXJvX2FkanVzdCA9IDE7CisJZGVzdCA9IChjaGFyICopIGZzLT5ncm91cF9kZXNjOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCWdyb3Vwc19wZXJfYmxvY2sgPSBFWFQyX0RFU0NfUEVSX0JMT0NLKGZzLT5zdXBlcik7CisjZW5kaWYKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgeworCQlmaXJzdF9tZXRhX2JnID0gZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmc7CisJCWlmIChmaXJzdF9tZXRhX2JnID4gZnMtPmRlc2NfYmxvY2tzKQorCQkJZmlyc3RfbWV0YV9iZyA9IGZzLT5kZXNjX2Jsb2NrczsKKwl9IGVsc2UKKwkJZmlyc3RfbWV0YV9iZyA9IGZzLT5kZXNjX2Jsb2NrczsKKwlpZiAoZmlyc3RfbWV0YV9iZykgeworCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrKGZzLT5pbywgZ3JvdXBfYmxvY2sgKworCQkJCQkgICAgIGdyb3VwX3plcm9fYWRqdXN0ICsgMSwKKwkJCQkJICAgICBmaXJzdF9tZXRhX2JnLCBkZXN0KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJZ2RwID0gKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKikgZGVzdDsKKwkJZm9yIChqPTA7IGogPCBncm91cHNfcGVyX2Jsb2NrKmZpcnN0X21ldGFfYmc7IGorKykgeworCQkJZ2RwID0gZXh0MmZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBqKTsKKwkJCWV4dDJmc19zd2FwX2dyb3VwX2Rlc2MyKGZzLCBnZHApOworCQl9CisjZW5kaWYKKwkJZGVzdCArPSBmcy0+YmxvY2tzaXplKmZpcnN0X21ldGFfYmc7CisJfQorCWZvciAoaT1maXJzdF9tZXRhX2JnIDsgaSA8IGZzLT5kZXNjX2Jsb2NrczsgaSsrKSB7CisJCWJsayA9IGV4dDJmc19kZXNjcmlwdG9yX2Jsb2NrX2xvYzIoZnMsIGdyb3VwX2Jsb2NrLCBpKTsKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbywgYmxrLCAxLCBkZXN0KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJZm9yIChqPTA7IGogPCBncm91cHNfcGVyX2Jsb2NrOyBqKyspIHsKKwkJCWdkcCA9IGV4dDJmc19ncm91cF9kZXNjKGZzLCBmcy0+Z3JvdXBfZGVzYywKKwkJCQkJCWkgKiBncm91cHNfcGVyX2Jsb2NrICsgaik7CisJCQlleHQyZnNfc3dhcF9ncm91cF9kZXNjMihmcywgZ2RwKTsKKwkJfQorI2VuZGlmCisJCWRlc3QgKz0gZnMtPmJsb2Nrc2l6ZTsKKwl9CisKKwlmcy0+c3RyaWRlID0gZnMtPnN1cGVyLT5zX3JhaWRfc3RyaWRlOworCisJLyoKKwkgKiBJZiByZWNvdmVyeSBpcyBmcm9tIGJhY2t1cCBzdXBlcmJsb2NrLCBDbGVhciBfVU5JTklOVCBmbGFncyAmCisJICogcmVzZXQgYmdfaXRhYmxlX3VudXNlZCB0byB6ZXJvCisJICovCisJaWYgKHN1cGVyYmxvY2sgPiAxICYmIEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkpIHsKKwkJZGdycF90IGdyb3VwOworCisJCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBncm91cCsrKSB7CisJCQlleHQyZnNfYmdfZmxhZ3NfY2xlYXIoZnMsIGdyb3VwLCBFWFQyX0JHX0JMT0NLX1VOSU5JVCk7CisJCQlleHQyZnNfYmdfZmxhZ3NfY2xlYXIoZnMsIGdyb3VwLCBFWFQyX0JHX0lOT0RFX1VOSU5JVCk7CisJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZF9zZXQoZnMsIGdyb3VwLCAwKTsKKwkJCS8qIFRoZSBjaGVja3N1bSB3aWxsIGJlIHJlc2V0IGxhdGVyLCBidXQgZml4IGl0IGhlcmUKKwkJCSAqIGFueXdheSB0byBhdm9pZCBwcmludGluZyBhIGxvdCBvZiBzcHVyaW91cyBlcnJvcnMuICovCisJCQlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgZ3JvdXApOworCQl9CisJCWlmIChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUlcpCisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJfQorCisJaWYgKChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9NTVApICYmCisJICAgICEoZmxhZ3MgJiBFWFQyX0ZMQUdfU0tJUF9NTVApICYmCisJICAgIChmbGFncyAmIChFWFQyX0ZMQUdfUlcgfCBFWFQyX0ZMQUdfRVhDTFVTSVZFKSkpIHsKKwkJcmV0dmFsID0gZXh0MmZzX21tcF9zdGFydChmcyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfU0tJUF9NTVA7IC8qIGp1c3QgZG8gY2xlYW51cCAqLworCQkJZXh0MmZzX21tcF9zdG9wKGZzKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0KKworCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX05PRlJFRV9PTl9FUlJPUjsKKwkqcmV0X2ZzID0gZnM7CisKKwlyZXR1cm4gMDsKK2NsZWFudXA6CisJaWYgKCEoZmxhZ3MgJiBFWFQyX0ZMQUdfTk9GUkVFX09OX0VSUk9SKSkgeworCQlleHQyZnNfZnJlZShmcyk7CisJCWZzID0gTlVMTDsKKwl9CisJKnJldF9mcyA9IGZzOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBTZXQvZ2V0IHRoZSBmaWxlc3lzdGVtIGRhdGEgSS9PIGNoYW5uZWwuCisgKgorICogVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IHZhbGlkIGlmIEVYVDJfRkxBR19JTUFHRV9GSUxFIGlzIHRydWUuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfZ2V0X2RhdGFfaW8oZXh0Ml9maWxzeXMgZnMsIGlvX2NoYW5uZWwgKm9sZF9pbykKK3sKKwlpZiAoKGZzLT5mbGFncyAmIEVYVDJfRkxBR19JTUFHRV9GSUxFKSA9PSAwKQorCQlyZXR1cm4gRVhUMl9FVF9OT1RfSU1BR0VfRklMRTsKKwlpZiAob2xkX2lvKSB7CisJCSpvbGRfaW8gPSAoZnMtPmltYWdlX2lvID09IGZzLT5pbykgPyAwIDogZnMtPmlvOworCX0KKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19zZXRfZGF0YV9pbyhleHQyX2ZpbHN5cyBmcywgaW9fY2hhbm5lbCBuZXdfaW8pCit7CisJaWYgKChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfSU1BR0VfRklMRSkgPT0gMCkKKwkJcmV0dXJuIEVYVDJfRVRfTk9UX0lNQUdFX0ZJTEU7CisJZnMtPmlvID0gbmV3X2lvID8gbmV3X2lvIDogZnMtPmltYWdlX2lvOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3Jld3JpdGVfdG9faW8oZXh0Ml9maWxzeXMgZnMsIGlvX2NoYW5uZWwgbmV3X2lvKQoreworCWVycmNvZGVfdCBlcnI7CisKKwlpZiAoKGZzLT5mbGFncyAmIEVYVDJfRkxBR19JTUFHRV9GSUxFKSA9PSAwKQorCQlyZXR1cm4gRVhUMl9FVF9OT1RfSU1BR0VfRklMRTsKKwllcnIgPSBpb19jaGFubmVsX3NldF9ibGtzaXplKG5ld19pbywgZnMtPmJsb2Nrc2l6ZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAoKG5ld19pbyA9PSBmcy0+aW1hZ2VfaW8pIHx8IChuZXdfaW8gPT0gZnMtPmlvKSkKKwkJcmV0dXJuIDA7CisJaWYgKChmcy0+aW1hZ2VfaW8gIT0gZnMtPmlvKSAmJgorCSAgICBmcy0+aW1hZ2VfaW8pCisJCWlvX2NoYW5uZWxfY2xvc2UoZnMtPmltYWdlX2lvKTsKKwlpZiAoZnMtPmlvKQorCQlpb19jaGFubmVsX2Nsb3NlKGZzLT5pbyk7CisJZnMtPmlvID0gZnMtPmltYWdlX2lvID0gbmV3X2lvOworCWZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfRElSVFkgfCBFWFQyX0ZMQUdfUlcgfAorCQlFWFQyX0ZMQUdfQkJfRElSVFkgfCBFWFQyX0ZMQUdfSUJfRElSVFk7CisJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfSU1BR0VfRklMRTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvcHJvZ3Jlc3MuYyBiL2xpYi9leHQyZnMvcHJvZ3Jlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzlhNmYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9wcm9ncmVzcy5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBwcm9ncmVzcy5jIC0gTnVtZXJpYyBwcm9ncmVzcyBtZXRlcgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyAqIAkyMDAzLCAyMDA0LCAyMDA1IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorCisjaW5jbHVkZSA8dGltZS5oPgorCitzdGF0aWMgY2hhciBzcGFjZXNbODBdLCBiYWNrc3BhY2VzWzgwXTsKK3N0YXRpYyB0aW1lX3QgbGFzdF91cGRhdGU7CisKK3N0YXRpYyBpbnQgaW50X2xvZzEwKHVuc2lnbmVkIGludCBhcmcpCit7CisJaW50CWw7CisKKwlmb3IgKGw9MDsgYXJnIDsgbCsrKQorCQlhcmcgPSBhcmcgLyAxMDsKKwlyZXR1cm4gbDsKK30KKwordm9pZCBleHQyZnNfbnVtZXJpY19wcm9ncmVzc19pbml0KGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgc3RydWN0IGV4dDJmc19udW1lcmljX3Byb2dyZXNzX3N0cnVjdCAqIHByb2dyZXNzLAorCQkJCSAgY29uc3QgY2hhciAqbGFiZWwsIF9fdTY0IG1heCkKK3sKKwkvKgorCSAqIFRoZSBQUklOVF9QUk9HUkVTUyBmbGFnIHR1cm5zIG9uIG9yIG9mZiBBTEwKKwkgKiBwcm9ncmVzcy1yZWxhdGVkIG1lc3NhZ2VzLCB3aGVyZWFzIHRoZSBTS0lQX1BST0dSRVNTCisJICogZW52aXJvbm1lbnQgdmFyaWFibGUgcHJpbnRzIHRoZSBzdGFydCBhbmQgZW5kIG1lc3NhZ2VzIGJ1dAorCSAqIG5vdCB0aGUgbnVtZXJpYyBjb3VudGRvd24gaW4gdGhlIG1pZGRsZS4KKwkgKi8KKwlpZiAoIShmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUFJJTlRfUFJPR1JFU1MpKQorCQlyZXR1cm47CisKKwltZW1zZXQoc3BhY2VzLCAnICcsIHNpemVvZihzcGFjZXMpLTEpOworCXNwYWNlc1tzaXplb2Yoc3BhY2VzKS0xXSA9IDA7CisJbWVtc2V0KGJhY2tzcGFjZXMsICdcYicsIHNpemVvZihiYWNrc3BhY2VzKS0xKTsKKwliYWNrc3BhY2VzW3NpemVvZihiYWNrc3BhY2VzKS0xXSA9IDA7CisKKwltZW1zZXQocHJvZ3Jlc3MsIDAsIHNpemVvZigqcHJvZ3Jlc3MpKTsKKwlpZiAoZ2V0ZW52KCJFMkZTUFJPR1NfU0tJUF9QUk9HUkVTUyIpKQorCQlwcm9ncmVzcy0+c2tpcF9wcm9ncmVzcysrOworCisKKwkvKgorCSAqIEZpZ3VyZSBvdXQgaG93IG1hbnkgZGlnaXRzIHdlIG5lZWQKKwkgKi8KKwlwcm9ncmVzcy0+bWF4ID0gbWF4OworCXByb2dyZXNzLT5sb2dfbWF4ID0gaW50X2xvZzEwKG1heCk7CisKKwlpZiAobGFiZWwpIHsKKwkJZnB1dHMobGFiZWwsIHN0ZG91dCk7CisJCWZmbHVzaChzdGRvdXQpOworCX0KKwlsYXN0X3VwZGF0ZSA9IDA7Cit9CisKK3ZvaWQgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfdXBkYXRlKGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgICBzdHJ1Y3QgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3Nfc3RydWN0ICogcHJvZ3Jlc3MsCisJCQkJICAgIF9fdTY0IHZhbCkKK3sKKwl0aW1lX3Qgbm93OworCisJaWYgKCEoZnMtPmZsYWdzICYgRVhUMl9GTEFHX1BSSU5UX1BST0dSRVNTKSkKKwkJcmV0dXJuOworCWlmIChwcm9ncmVzcy0+c2tpcF9wcm9ncmVzcykKKwkJcmV0dXJuOworCW5vdyA9IHRpbWUoMCk7CisJaWYgKG5vdyA9PSBsYXN0X3VwZGF0ZSkKKwkJcmV0dXJuOworCWxhc3RfdXBkYXRlID0gbm93OworCisJcHJpbnRmKCIlKmxsdS8lKmxsdSIsIHByb2dyZXNzLT5sb2dfbWF4LCB2YWwsCisJICAgICAgIHByb2dyZXNzLT5sb2dfbWF4LCBwcm9ncmVzcy0+bWF4KTsKKwlmcHJpbnRmKHN0ZG91dCwgIiUuKnMiLCAoMipwcm9ncmVzcy0+bG9nX21heCkrMSwgYmFja3NwYWNlcyk7Cit9CisKK3ZvaWQgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfY2xvc2UoZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgc3RydWN0IGV4dDJmc19udW1lcmljX3Byb2dyZXNzX3N0cnVjdCAqIHByb2dyZXNzLAorCQkJCSAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJaWYgKCEoZnMtPmZsYWdzICYgRVhUMl9GTEFHX1BSSU5UX1BST0dSRVNTKSkKKwkJcmV0dXJuOworCWZwcmludGYoc3Rkb3V0LCAiJS4qcyIsICgyKnByb2dyZXNzLT5sb2dfbWF4KSsxLCBzcGFjZXMpOworCWZwcmludGYoc3Rkb3V0LCAiJS4qcyIsICgyKnByb2dyZXNzLT5sb2dfbWF4KSsxLCBiYWNrc3BhY2VzKTsKKwlpZiAobWVzc2FnZSkKKwkJZnB1dHMobWVzc2FnZSwgc3Rkb3V0KTsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvcHVuY2guYyBiL2xpYi9leHQyZnMvcHVuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2QwMjBlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy9wdW5jaC5jCkBAIC0wLDAgKzEsNDY1IEBACisvKgorICogcHVuY2guYyAtLS0gZGVhbGxvY2F0ZSBibG9ja3MgYWxsb2NhdGVkIHRvIGFuIGlub2RlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisjdW5kZWYgUFVOQ0hfREVCVUcKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAxIGlmIHRoZSBzcGVjaWZpZWQgYmxvY2sgaXMgYWxsIHplcm9zCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfemVyb19ibG9jayhjaGFyICpidWYsIGludCBibG9ja3NpemUpCit7CisJY2hhcgkqY3AgPSBidWY7CisJaW50CWxlZnQgPSBibG9ja3NpemU7CisKKwl3aGlsZSAobGVmdCA+IDApIHsKKwkJaWYgKCpjcCsrKQorCQkJcmV0dXJuIDA7CisJCWxlZnQtLTsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBUaGlzIGNsZXZlciByZWN1cnNpdmUgZnVuY3Rpb24gaGFuZGxlcyBpX2Jsb2Nrc1tdIGFzIHdlbGwgYXMKKyAqIGluZGlyZWN0LCBkb3VibGUgaW5kaXJlY3QsIGFuZCB0cmlwbGUgaW5kaXJlY3QgYmxvY2tzLiAgSXQgaXRlcmF0ZXMKKyAqIG92ZXIgdGhlIGVudHJpZXMgaW4gdGhlIGlfYmxvY2tzIGFycmF5IG9yIGluZGlyZWN0IGJsb2NrcywgYW5kIGZvcgorICogZWFjaCBvbmUsIHdpbGwgcmVjdXJzaXZlbHkgaGFuZGxlIGFueSBpbmRpcmVjdCBibG9ja3MgYW5kIHRoZW4KKyAqIGZyZWVzIGFuZCBkZWFsbG9jYXRlcyB0aGUgYmxvY2tzLgorICovCitzdGF0aWMgZXJyY29kZV90IGluZF9wdW5jaChleHQyX2ZpbHN5cyBmcywgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJICAgY2hhciAqYmxvY2tfYnVmLCBibGtfdCAqcCwgaW50IGxldmVsLAorCQkJICAgYmxrX3Qgc3RhcnQsIGJsa190IGNvdW50LCBpbnQgbWF4KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrX3QJCWI7CisJaW50CQlpOworCWJsazY0X3QJCW9mZnNldCwgaW5jcjsKKwlpbnQJCWZyZWVkID0gMDsKKworI2lmZGVmIFBVTkNIX0RFQlVHCisJcHJpbnRmKCJFbnRlcmluZyBpbmRfcHVuY2gsIGxldmVsICVkLCBzdGFydCAldSwgY291bnQgJXUsICIKKwkgICAgICAgIm1heCAlZFxuIiwgbGV2ZWwsIHN0YXJ0LCBjb3VudCwgbWF4KTsKKyNlbmRpZgorCWluY3IgPSAxVUxMIDw8ICgoRVhUMl9CTE9DS19TSVpFX0JJVFMoZnMtPnN1cGVyKS0yKSpsZXZlbCk7CisJZm9yIChpPTAsIG9mZnNldD0wOyBpIDwgbWF4OyBpKyssIHArKywgb2Zmc2V0ICs9IGluY3IpIHsKKwkJaWYgKG9mZnNldCA+PSBzdGFydCArIGNvdW50KQorCQkJYnJlYWs7CisJCWlmICgqcCA9PSAwIHx8IChvZmZzZXQraW5jcikgPD0gc3RhcnQpCisJCQljb250aW51ZTsKKwkJYiA9ICpwOworCQlpZiAobGV2ZWwgPiAwKSB7CisJCQlibGtfdCBzdGFydDI7CisjaWZkZWYgUFVOQ0hfREVCVUcKKwkJCXByaW50ZigiUmVhZGluZyBpbmRpcmVjdCBibG9jayAldVxuIiwgYik7CisjZW5kaWYKKwkJCXJldHZhbCA9IGV4dDJmc19yZWFkX2luZF9ibG9jayhmcywgYiwgYmxvY2tfYnVmKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCXN0YXJ0MiA9IChzdGFydCA+IG9mZnNldCkgPyBzdGFydCAtIG9mZnNldCA6IDA7CisJCQlyZXR2YWwgPSBpbmRfcHVuY2goZnMsIGlub2RlLCBibG9ja19idWYgKyBmcy0+YmxvY2tzaXplLAorCQkJCQkgICAoYmxrX3QgKikgYmxvY2tfYnVmLCBsZXZlbCAtIDEsCisJCQkJCSAgIHN0YXJ0MiwgY291bnQgLSBvZmZzZXQsCisJCQkJCSAgIGZzLT5ibG9ja3NpemUgPj4gMik7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCQlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5kX2Jsb2NrKGZzLCBiLCBibG9ja19idWYpOworCQkJaWYgKHJldHZhbCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJaWYgKCFjaGVja196ZXJvX2Jsb2NrKGJsb2NrX2J1ZiwgZnMtPmJsb2Nrc2l6ZSkpCisJCQkJY29udGludWU7CisJCX0KKyNpZmRlZiBQVU5DSF9ERUJVRworCQlwcmludGYoIkZyZWVpbmcgYmxvY2sgJXUgKG9mZnNldCAlbGx1KVxuIiwgYiwgb2Zmc2V0KTsKKyNlbmRpZgorCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMoZnMsIGIsIC0xKTsKKwkJKnAgPSAwOworCQlmcmVlZCsrOworCX0KKyNpZmRlZiBQVU5DSF9ERUJVRworCXByaW50ZigiRnJlZWQgJWQgYmxvY2tzXG4iLCBmcmVlZCk7CisjZW5kaWYKKwlyZXR1cm4gZXh0MmZzX2libGtfc3ViX2Jsb2NrcyhmcywgaW5vZGUsIGZyZWVkKTsKK30KKworc3RhdGljIGVycmNvZGVfdCBleHQyZnNfcHVuY2hfaW5kKGV4dDJfZmlsc3lzIGZzLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkJICBjaGFyICpibG9ja19idWYsIGJsa190IHN0YXJ0LCBibGtfdCBjb3VudCkKK3sKKwllcnJjb2RlX3QJCXJldHZhbDsKKwljaGFyCQkJKmJ1ZiA9IDA7CisJaW50CQkJbGV2ZWw7CisJaW50CQkJbnVtID0gRVhUMl9ORElSX0JMT0NLUzsKKwlibGtfdAkJCSpicCA9IGlub2RlLT5pX2Jsb2NrOworCWJsa190CQkJYWRkcl9wZXJfYmxvY2s7CisJYmxrNjRfdAkJCW1heCA9IEVYVDJfTkRJUl9CTE9DS1M7CisKKwlpZiAoIWJsb2NrX2J1ZikgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KDMsIGZzLT5ibG9ja3NpemUsICZidWYpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJYmxvY2tfYnVmID0gYnVmOworCX0KKworCWFkZHJfcGVyX2Jsb2NrID0gKGJsa190KSBmcy0+YmxvY2tzaXplID4+IDI7CisKKwlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPCA0OyBsZXZlbCsrLCBtYXggKj0gKGJsazY0X3QpYWRkcl9wZXJfYmxvY2spIHsKKyNpZmRlZiBQVU5DSF9ERUJVRworCQlwcmludGYoIk1haW4gbG9vcCBsZXZlbCAlZCwgc3RhcnQgJXUgY291bnQgJXUgIgorCQkgICAgICAgIm1heCAlbGx1IG51bSAlZFxuIiwgbGV2ZWwsIHN0YXJ0LCBjb3VudCwgbWF4LCBudW0pOworI2VuZGlmCisJCWlmIChzdGFydCA8IG1heCkgeworCQkJcmV0dmFsID0gaW5kX3B1bmNoKGZzLCBpbm9kZSwgYmxvY2tfYnVmLCBicCwgbGV2ZWwsCisJCQkJCSAgIHN0YXJ0LCBjb3VudCwgbnVtKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisJCQlpZiAoY291bnQgPiBtYXgpCisJCQkJY291bnQgLT0gbWF4IC0gc3RhcnQ7CisJCQllbHNlCisJCQkJYnJlYWs7CisJCQlzdGFydCA9IDA7CisJCX0gZWxzZQorCQkJc3RhcnQgLT0gbWF4OworCQlicCArPSBudW07CisJCWlmIChsZXZlbCA9PSAwKSB7CisJCQludW0gPSAxOworCQkJbWF4ID0gMTsKKwkJfQorCX0KKwlyZXR2YWwgPSAwOworZXJyb3V0OgorCWlmIChidWYpCisJCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisjaWZkZWYgUFVOQ0hfREVCVUcKKworI2RlZmluZSBkYmdfcHJpbnRmKGYsIGEuLi4pICBwcmludGYoZiwgIyMgYSkKKworc3RhdGljIHZvaWQgZGJnX3ByaW50X2V4dGVudChjaGFyICpkZXNjLCBzdHJ1Y3QgZXh0MmZzX2V4dGVudCAqZXh0ZW50KQoreworCWlmIChkZXNjKQorCQlwcmludGYoIiVzOiAiLCBkZXNjKTsKKwlwcmludGYoImV4dGVudDogbGJsayAlbGx1LS0lbGx1LCBsZW4gJXUsIHBibGsgJWxsdSwgZmxhZ3M6ICIsCisJICAgICAgIGV4dGVudC0+ZV9sYmxrLCBleHRlbnQtPmVfbGJsayArIGV4dGVudC0+ZV9sZW4gLSAxLAorCSAgICAgICBleHRlbnQtPmVfbGVuLCBleHRlbnQtPmVfcGJsayk7CisJaWYgKGV4dGVudC0+ZV9mbGFncyAmIEVYVDJfRVhURU5UX0ZMQUdTX0xFQUYpCisJCWZwdXRzKCJMRUFGICIsIHN0ZG91dCk7CisJaWYgKGV4dGVudC0+ZV9mbGFncyAmIEVYVDJfRVhURU5UX0ZMQUdTX1VOSU5JVCkKKwkJZnB1dHMoIlVOSU5JVCAiLCBzdGRvdXQpOworCWlmIChleHRlbnQtPmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19TRUNPTkRfVklTSVQpCisJCWZwdXRzKCIyTkRfVklTSVQgIiwgc3Rkb3V0KTsKKwlpZiAoIWV4dGVudC0+ZV9mbGFncykKKwkJZnB1dHMoIihub25lKSIsIHN0ZG91dCk7CisJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKKworfQorI2Vsc2UKKyNkZWZpbmUgZGJnX3ByaW50X2V4dGVudChkZXNjLCBleCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkYmdfcHJpbnRmKGYsIGEuLi4pCQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogRnJlZSBhIHJhbmdlIG9mIGJsb2NrcywgcmVzcGVjdGluZyBjbHVzdGVyIGJvdW5kYXJpZXMgKi8KK3N0YXRpYyBlcnJjb2RlX3QgcHVuY2hfZXh0ZW50X2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkJICAgICBibGs2NF90IGxmcmVlX3N0YXJ0LCBibGs2NF90IGZyZWVfc3RhcnQsCisJCQkJICAgICBfX3UzMiBmcmVlX2NvdW50LCBpbnQgKmZyZWVkKQoreworCWJsazY0X3QJCXBibGs7CisJaW50CQlmcmVlZF9ub3cgPSAwOworCV9fdTMyCQljbHVzdGVyX2ZyZWVkOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCisJLyogTm8gYmlnYWxsb2M/ICBKdXN0IGZyZWUgZWFjaCBibG9jay4gKi8KKwlpZiAoRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpID09IDEpIHsKKwkJKmZyZWVkICs9IGZyZWVfY291bnQ7CisJCXdoaWxlIChmcmVlX2NvdW50LS0gPiAwKQorCQkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgZnJlZV9zdGFydCsrLCAtMSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyoKKwkgKiBUcnkgdG8gZnJlZSB1cCB0byB0aGUgbmV4dCBjbHVzdGVyIGJvdW5kYXJ5LiAgV2UgYXNzdW1lIHRoYXQgYWxsCisJICogYmxvY2tzIGluIGEgbG9naWNhbCBjbHVzdGVyIG1hcCB0byBibG9ja3MgZnJvbSB0aGUgc2FtZSBwaHlzaWNhbAorCSAqIGNsdXN0ZXIsIGFuZCB0aGF0IHRoZSBvZmZzZXRzIHdpdGhpbiB0aGUgW3BsXWNsdXN0ZXJzIG1hdGNoLgorCSAqLworCWlmIChmcmVlX3N0YXJ0ICYgRVhUMkZTX0NMVVNURVJfTUFTSyhmcykpIHsKKwkJcmV0dmFsID0gZXh0MmZzX21hcF9jbHVzdGVyX2Jsb2NrKGZzLCBpbm8sIGlub2RlLAorCQkJCQkJICBsZnJlZV9zdGFydCwgJnBibGspOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJCWlmICghcGJsaykgeworCQkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgZnJlZV9zdGFydCwgLTEpOworCQkJZnJlZWRfbm93Kys7CisJCX0KKwkJY2x1c3Rlcl9mcmVlZCA9IEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKSAtCisJCQkoZnJlZV9zdGFydCAmIEVYVDJGU19DTFVTVEVSX01BU0soZnMpKTsKKwkJaWYgKGNsdXN0ZXJfZnJlZWQgPiBmcmVlX2NvdW50KQorCQkJY2x1c3Rlcl9mcmVlZCA9IGZyZWVfY291bnQ7CisJCWZyZWVfY291bnQgLT0gY2x1c3Rlcl9mcmVlZDsKKwkJZnJlZV9zdGFydCArPSBjbHVzdGVyX2ZyZWVkOworCQlsZnJlZV9zdGFydCArPSBjbHVzdGVyX2ZyZWVkOworCX0KKworCS8qIEZyZWUgd2hvbGUgY2x1c3RlcnMgZnJvbSB0aGUgbWlkZGxlIG9mIHRoZSByYW5nZS4gKi8KKwl3aGlsZSAoZnJlZV9jb3VudCA+IDAgJiYgZnJlZV9jb3VudCA+PSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykpIHsKKwkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgZnJlZV9zdGFydCwgLTEpOworCQlmcmVlZF9ub3crKzsKKwkJY2x1c3Rlcl9mcmVlZCA9IEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKTsKKwkJZnJlZV9jb3VudCAtPSBjbHVzdGVyX2ZyZWVkOworCQlmcmVlX3N0YXJ0ICs9IGNsdXN0ZXJfZnJlZWQ7CisJCWxmcmVlX3N0YXJ0ICs9IGNsdXN0ZXJfZnJlZWQ7CisJfQorCisJLyogVHJ5IHRvIGZyZWUgdGhlIGxhc3QgY2x1c3Rlci4gKi8KKwlpZiAoZnJlZV9jb3VudCA+IDApIHsKKwkJcmV0dmFsID0gZXh0MmZzX21hcF9jbHVzdGVyX2Jsb2NrKGZzLCBpbm8sIGlub2RlLAorCQkJCQkJICBsZnJlZV9zdGFydCwgJnBibGspOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJCWlmICghcGJsaykgeworCQkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgZnJlZV9zdGFydCwgLTEpOworCQkJZnJlZWRfbm93Kys7CisJCX0KKwl9CisKK2Vycm91dDoKKwkqZnJlZWQgKz0gZnJlZWRfbm93OworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgZXh0MmZzX3B1bmNoX2V4dGVudChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkJICAgICBibGs2NF90IHN0YXJ0LCBibGs2NF90IGVuZCkKK3sKKwlleHQyX2V4dGVudF9oYW5kbGVfdAloYW5kbGUgPSAwOworCXN0cnVjdCBleHQyZnNfZXh0ZW50CWV4dGVudDsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlibGs2NF90CQkJZnJlZV9zdGFydCwgbmV4dCwgbGZyZWVfc3RhcnQ7CisJX191MzIJCQlmcmVlX2NvdW50LCBuZXdsZW47CisJaW50CQkJZnJlZWQgPSAwOworCWludAkJCW9wOworCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9vcGVuMihmcywgaW5vLCBpbm9kZSwgJmhhbmRsZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwkvKgorCSAqIEZpbmQgdGhlIGV4dGVudCBjbG9zZXN0IHRvIHRoZSBzdGFydCBvZiB0aGUgcHVuY2ggcmFuZ2UuICBXZSBkb24ndAorCSAqIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgYmVjYXVzZSBfZ290bygpIHNldHMgdGhlIGN1cnJlbnQgbm9kZSB0byB0aGUKKwkgKiBuZXh0LWxvd2VzdCBleHRlbnQgaWYgJ3N0YXJ0JyBpcyBpbiBhIGhvbGUsIGFuZCBkb2Vzbid0IHNldCBhCisJICogY3VycmVudCBub2RlIGlmIHRoZXJlIHdhcyBhIHJlYWwgZXJyb3IgcmVhZGluZyB0aGUgZXh0ZW50IHRyZWUuCisJICogSW4gdGhhdCBjYXNlLCBfZ2V0KCkgd2lsbCBlcnJvciBvdXQuCisJICoKKwkgKiBOb3RlOiBJZiBfZ2V0KCkgcmV0dXJucyAnbm8gY3VycmVudCBub2RlJywgdGhhdCBzaW1wbHkgbWVhbnMgdGhhdAorCSAqIHRoZXJlIGFyZW4ndCBhbnkgYmxvY2tzIG1hcHBlZCBwYXN0IHRoaXMgcG9pbnQgaW4gdGhlIGZpbGUsIHNvIHdlJ3JlCisJICogZG9uZS4KKwkgKi8KKwlleHQyZnNfZXh0ZW50X2dvdG8oaGFuZGxlLCBzdGFydCk7CisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBFWFQyX0VYVEVOVF9DVVJSRU5ULCAmZXh0ZW50KTsKKwlpZiAocmV0dmFsID09IEVYVDJfRVRfTk9fQ1VSUkVOVF9OT0RFKSB7CisJCXJldHZhbCA9IDA7CisJCWdvdG8gZXJyb3V0OworCX0gZWxzZSBpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwl3aGlsZSAoMSkgeworCQlvcCA9IEVYVDJfRVhURU5UX05FWFRfTEVBRjsKKwkJZGJnX3ByaW50X2V4dGVudCgibWFpbiBsb29wIiwgJmV4dGVudCk7CisJCW5leHQgPSBleHRlbnQuZV9sYmxrICsgZXh0ZW50LmVfbGVuOworCQlkYmdfcHJpbnRmKCJzdGFydCAlbGx1LCBlbmQgJWxsdSwgbmV4dCAlbGx1XG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhcnQsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBlbmQsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBuZXh0KTsKKwkJaWYgKHN0YXJ0IDw9IGV4dGVudC5lX2xibGspIHsKKwkJCS8qCisJCQkgKiBIYXZlIHdlIGl0ZXJhdGVkIHBhc3QgdGhlIGVuZCBvZiB0aGUgcHVuY2ggcmVnaW9uPworCQkJICogSWYgc28sIHdlIGNhbiBzdG9wLgorCQkJICovCisJCQlpZiAoZW5kIDwgZXh0ZW50LmVfbGJsaykKKwkJCQlicmVhazsKKwkJCWRiZ19wcmludGYoIkNhc2UgIyVkXG4iLCAxKTsKKwkJCS8qIFN0YXJ0IG9mIGRlbGV0ZWQgcmVnaW9uIGJlZm9yZSBleHRlbnQ7IAorCQkJICAgYWRqdXN0IGJlZ2lubmluZyBvZiBleHRlbnQgKi8KKwkJCWZyZWVfc3RhcnQgPSBleHRlbnQuZV9wYmxrOworCQkJbGZyZWVfc3RhcnQgPSBleHRlbnQuZV9sYmxrOworCQkJaWYgKG5leHQgPiBlbmQpCisJCQkJZnJlZV9jb3VudCA9IGVuZCAtIGV4dGVudC5lX2xibGsgKyAxOworCQkJZWxzZQorCQkJCWZyZWVfY291bnQgPSBleHRlbnQuZV9sZW47CisJCQlleHRlbnQuZV9sZW4gLT0gZnJlZV9jb3VudDsKKwkJCWV4dGVudC5lX2xibGsgKz0gZnJlZV9jb3VudDsKKwkJCWV4dGVudC5lX3BibGsgKz0gZnJlZV9jb3VudDsKKwkJfSBlbHNlIGlmIChlbmQgPj0gbmV4dC0xKSB7CisJCQkvKgorCQkJICogSXMgdGhlIHB1bmNoIHJlZ2lvbiBiZXlvbmQgdGhpcyBleHRlbnQ/ICBUaGlzIGNhbgorCQkJICogaGFwcGVuIGlmIHN0YXJ0IGlzIGFscmVhZHkgaW5zaWRlIGEgaG9sZS4gIFRyeSB0bworCQkJICogYWR2YW5jZSB0byB0aGUgbmV4dCBleHRlbnQgaWYgdGhpcyBpcyB0aGUgY2FzZS4KKwkJCSAqLworCQkJaWYgKHN0YXJ0ID49IG5leHQpCisJCQkJZ290byBuZXh0X2V4dGVudDsKKwkJCS8qIEVuZCBvZiBkZWxldGVkIHJlZ2lvbiBhZnRlciBleHRlbnQ7CisJCQkgICBhZGp1c3QgZW5kIG9mIGV4dGVudCAqLworCQkJZGJnX3ByaW50ZigiQ2FzZSAjJWRcbiIsIDIpOworCQkJbmV3bGVuID0gc3RhcnQgLSBleHRlbnQuZV9sYmxrOworCQkJZnJlZV9zdGFydCA9IGV4dGVudC5lX3BibGsgKyBuZXdsZW47CisJCQlsZnJlZV9zdGFydCA9IGV4dGVudC5lX2xibGsgKyBuZXdsZW47CisJCQlmcmVlX2NvdW50ID0gZXh0ZW50LmVfbGVuIC0gbmV3bGVuOworCQkJZXh0ZW50LmVfbGVuID0gbmV3bGVuOworCQl9IGVsc2UgeworCQkJc3RydWN0IGV4dDJmc19leHRlbnQJbmV3ZXg7CisKKwkJCWRiZ19wcmludGYoIkNhc2UgIyVkXG4iLCAzKTsKKwkJCS8qIFRoZSBoYXJkIGNhc2U7IHdlIG5lZWQgdG8gc3BsaXQgdGhlIGV4dGVudCAqLworCQkJbmV3ZXguZV9wYmxrID0gZXh0ZW50LmVfcGJsayArCisJCQkJKGVuZCArIDEgLSBleHRlbnQuZV9sYmxrKTsKKwkJCW5ld2V4LmVfbGJsayA9IGVuZCArIDE7CisJCQluZXdleC5lX2xlbiA9IG5leHQgLSBlbmQgLSAxOworCQkJbmV3ZXguZV9mbGFncyA9IGV4dGVudC5lX2ZsYWdzOworCisJCQlleHRlbnQuZV9sZW4gPSBzdGFydCAtIGV4dGVudC5lX2xibGs7CisJCQlmcmVlX3N0YXJ0ID0gZXh0ZW50LmVfcGJsayArIGV4dGVudC5lX2xlbjsKKwkJCWxmcmVlX3N0YXJ0ID0gZXh0ZW50LmVfbGJsayArIGV4dGVudC5lX2xlbjsKKwkJCWZyZWVfY291bnQgPSBlbmQgLSBzdGFydCArIDE7CisKKwkJCWRiZ19wcmludF9leHRlbnQoImluc2VydGluZyIsICZuZXdleCk7CisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2luc2VydChoYW5kbGUsCisJCQkJCUVYVDJfRVhURU5UX0lOU0VSVF9BRlRFUiwgJm5ld2V4KTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisJCQkvKiBOb3cgcG9pbnRpbmcgYXQgaW5zZXJ0ZWQgZXh0ZW50OyBzbyBnbyBiYWNrICovCisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsCisJCQkJCQkgICBFWFQyX0VYVEVOVF9QUkVWX0xFQUYsCisJCQkJCQkgICAmbmV3ZXgpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycm91dDsKKwkJfSAKKwkJaWYgKGV4dGVudC5lX2xlbikgeworCQkJZGJnX3ByaW50X2V4dGVudCgicmVwbGFjaW5nIiwgJmV4dGVudCk7CisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X3JlcGxhY2UoaGFuZGxlLCAwLCAmZXh0ZW50KTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2ZpeF9wYXJlbnRzKGhhbmRsZSk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgZXh0MmZzX2V4dGVudAluZXdleDsKKwkJCWJsazY0X3QJCQlvbGRfbGJsaywgbmV4dF9sYmxrOworCQkJZGJnX3ByaW50ZigiZGVsZXRpbmcgY3VycmVudCBleHRlbnQlc1xuIiwgIiIpOworCisJCQkvKgorCQkJICogU2F2ZSB0aGUgbG9jYXRpb24gb2YgdGhlIG5leHQgbGVhZiwgdGhlbiBzbGlwCisJCQkgKiBiYWNrIHRvIHRoZSBjdXJyZW50IGV4dGVudC4KKwkJCSAqLworCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBFWFQyX0VYVEVOVF9DVVJSRU5ULAorCQkJCQkJICAgJm5ld2V4KTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisJCQlvbGRfbGJsayA9IG5ld2V4LmVfbGJsazsKKworCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLAorCQkJCQkJICAgRVhUMl9FWFRFTlRfTkVYVF9MRUFGLAorCQkJCQkJICAgJm5ld2V4KTsKKwkJCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9FWFRFTlRfTk9fTkVYVCkKKwkJCQluZXh0X2xibGsgPSBvbGRfbGJsazsKKwkJCWVsc2UgaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycm91dDsKKwkJCWVsc2UKKwkJCQluZXh0X2xibGsgPSBuZXdleC5lX2xibGs7CisKKwkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ290byhoYW5kbGUsIG9sZF9sYmxrKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisKKwkJCS8qIE5vdyBkZWxldGUgdGhlIGV4dGVudC4gKi8KKwkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZGVsZXRlKGhhbmRsZSwgMCk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZXJyb3V0OworCisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2ZpeF9wYXJlbnRzKGhhbmRsZSk7CisJCQlpZiAocmV0dmFsICYmIHJldHZhbCAhPSBFWFQyX0VUX05PX0NVUlJFTlRfTk9ERSkKKwkJCQlnb3RvIGVycm91dDsKKwkJCXJldHZhbCA9IDA7CisKKwkJCS8qIEp1bXAgZm9yd2FyZCB0byB0aGUgbmV4dCBleHRlbnQuICovCisJCQlleHQyZnNfZXh0ZW50X2dvdG8oaGFuZGxlLCBuZXh0X2xibGspOworCQkJb3AgPSBFWFQyX0VYVEVOVF9DVVJSRU5UOworCQl9CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwkJZGJnX3ByaW50ZigiRnJlZSBzdGFydCAlbGx1LCBmcmVlIGNvdW50ID0gJXVcbiIsCisJCSAgICAgICBmcmVlX3N0YXJ0LCBmcmVlX2NvdW50KTsKKwkJcmV0dmFsID0gcHVuY2hfZXh0ZW50X2Jsb2NrcyhmcywgaW5vLCBpbm9kZSwgbGZyZWVfc3RhcnQsCisJCQkJCSAgICAgZnJlZV9zdGFydCwgZnJlZV9jb3VudCwgJmZyZWVkKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCW5leHRfZXh0ZW50OgorCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIG9wLAorCQkJCQkgICAmZXh0ZW50KTsKKwkJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0VYVEVOVF9OT19ORVhUIHx8CisJCSAgICByZXR2YWwgPT0gRVhUMl9FVF9OT19DVVJSRU5UX05PREUpCisJCQlicmVhazsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCX0KKwlkYmdfcHJpbnRmKCJGcmVlZCAlZCBibG9ja3NcbiIsIGZyZWVkKTsKKwlyZXR2YWwgPSBleHQyZnNfaWJsa19zdWJfYmxvY2tzKGZzLCBpbm9kZSwgZnJlZWQpOworZXJyb3V0OgorCWV4dDJmc19leHRlbnRfZnJlZShoYW5kbGUpOworCXJldHVybiByZXR2YWw7Cit9CisJCisvKgorICogRGVhbGxvY2F0ZSBhbGwgbG9naWNhbCBibG9ja3Mgc3RhcnRpbmcgYXQgc3RhcnQgdG8gZW5kLCBpbmNsdXNpdmUuCisgKiBJZiBlbmQgaXMgfjAsIHRoZW4gdGhpcyBpcyBlZmZlY3RpdmVseSB0cnVuY2F0ZS4KKyAqLworZXJyY29kZV90IGV4dDJmc19wdW5jaChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCSAgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCSAgICAgICBjaGFyICpibG9ja19idWYsIGJsazY0X3Qgc3RhcnQsCisJCSAgICAgICBibGs2NF90IGVuZCkKK3sKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZV9idWY7CisKKwlpZiAoc3RhcnQgPiBlbmQpCisJCXJldHVybiBFSU5WQUw7CisKKwkvKiBSZWFkIGlub2RlIHN0cnVjdHVyZSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoIWlub2RlKSB7CisJCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBpbm8sICZpbm9kZV9idWYpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJaW5vZGUgPSAmaW5vZGVfYnVmOworCX0KKwlpZiAoaW5vZGUtPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpCisJCXJldHZhbCA9IGV4dDJmc19wdW5jaF9leHRlbnQoZnMsIGlubywgaW5vZGUsIHN0YXJ0LCBlbmQpOworCWVsc2UgeworCQlibGtfdAljb3VudDsKKworCQlpZiAoc3RhcnQgPiB+MFUpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGVuZCA+IH4wVSkKKwkJCWVuZCA9IH4wVTsKKwkJY291bnQgPSAoKGVuZCAtIHN0YXJ0ICsgMSkgPCB+MFUpID8gKGVuZCAtIHN0YXJ0ICsgMSkgOiB+MFU7CisJCXJldHZhbCA9IGV4dDJmc19wdW5jaF9pbmQoZnMsIGlub2RlLCBibG9ja19idWYsIAorCQkJCQkgIChibGtfdCkgc3RhcnQsIGNvdW50KTsKKwl9CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHVybiBleHQyZnNfd3JpdGVfaW5vZGUoZnMsIGlubywgaW5vZGUpOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9xY293Mi5jIGIvbGliL2V4dDJmcy9xY293Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3Y2RiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL3Fjb3cyLmMKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgKiBxY293Mi5jIC0tLSBGdW5jdGlvbnMgdG8gZ2VuZXJhdGUgcWNvdzIgZm9ybWF0dGVkIGRpc2sgaW1hZ2VzLiAgVGhpcworICogZm9ybWF0IGlzIHVzZWQgb3JpZ2luYWxseSBieSBRRU1VIGZvciB2aXJ0dWFsIG1hY2hpbmVzLCBhbmQgc3RvcmVzIHRoZQorICogZmlsZXN5c3RlbSBkYXRhIG9uIGRpc2sgaW4gYSBwYWNrZWQgZm9ybWF0IHRvIGF2b2lkIGNyZWF0aW5nIHNwYXJzZQorICogaW1hZ2UgZmlsZXMgdGhhdCBuZWVkIGxvdHMgb2Ygc2Vla2luZyB0byByZWFkIGFuZCB3cml0ZS4KKyAqCisgKiBUaGUgcWNvdzIgZm9ybWF0IHN1cHBvcnRzIHpsaWIgY29tcHJlc3Npb24sIGJ1dCB0aGF0IGlzIG5vdCB5ZXQKKyAqIGltcGxlbWVudGVkLgorICoKKyAqIEl0IGlzIHBvc3NpYmxlIHRvIGRpcmVjdGx5IG1vdW50IGEgcWNvdzIgaW1hZ2UgdXNpbmcgcWVtdS1uYmQ6CisgKgorICogW3Jvb3RdIyBtb2Rwcm9iZSBuYmQgbWF4X3BhcnQ9NjMKKyAqIFtyb290XSMgcWVtdS1uYmQgLWMgL2Rldi9uYmQwIGltYWdlLmltZworICogW3Jvb3RdIyBtb3VudCAvZGV2L25iZDBwMSAvbW50L3FlbXUKKyAqCisgKiBGb3JtYXQgZGV0YWlscyBhdCBodHRwOi8vcGVvcGxlLmdub21lLm9yZy9+bWFya21jL3Fjb3ctaW1hZ2UtZm9ybWF0Lmh0bWwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVkIEhhdCwgSW5jLiwgTHVrYXMgQ3plcm5lciA8bGN6ZXJuZXJAcmVkaGF0LmNvbT4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxncnAuaD4KKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKyNpbmNsdWRlICJxY293Mi5oIgorCisvKiBGdW5jdGlvbnMgZm9yIGNvbnZlcnRpbmcgcWNvdzIgaW1hZ2UgaW50byByYXcgaW1hZ2UgKi8KKworc3RydWN0IGV4dDJfcWNvdzJfaGRyICpxY293Ml9yZWFkX2hlYWRlcihpbnQgZmQpCit7CisJdm9pZCAqYnVmZmVyID0gTlVMTDsKKwlzdHJ1Y3QgZXh0Ml9xY293Ml9oZHIgKmhkciA9IE5VTEw7CisJc2l6ZV90IHNpemU7CisJZXJyY29kZV90IHJldDsKKworCXJldCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgZXh0Ml9xY293Ml9oZHIpLCAmYnVmZmVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfcWNvdzJfaGRyKSk7CisKKwlpZiAoZXh0MmZzX2xsc2VlayhmZCwgMCwgU0VFS19TRVQgPCAwKSkgeworCQlleHQyZnNfZnJlZV9tZW0oJmJ1ZmZlcik7CisJCXJldHVybiBOVUxMOworCX0KKworCXNpemUgPSByZWFkKGZkLCBidWZmZXIsIHNpemVvZihzdHJ1Y3QgZXh0Ml9xY293Ml9oZHIpKTsKKwlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGV4dDJfcWNvdzJfaGRyKSkgeworCQlleHQyZnNfZnJlZV9tZW0oJmJ1ZmZlcik7CisJCXJldHVybiBOVUxMOworCX0KKworCWhkciA9IChzdHJ1Y3QgZXh0Ml9xY293Ml9oZHIgKikoYnVmZmVyKTsKKworCWlmICgoZXh0MmZzX2JlMzJfdG9fY3B1KGhkci0+bWFnaWMpICE9IFFDT1dfTUFHSUMpIHx8CisJICAgIChleHQyZnNfYmUzMl90b19jcHUoaGRyLT52ZXJzaW9uKSAhPSAyKSkgeworCQlleHQyZnNfZnJlZV9tZW0oJmhkcik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBoZHI7Cit9CisKK3N0YXRpYyBpbnQgcWNvdzJfcmVhZF9sMV90YWJsZShzdHJ1Y3QgZXh0Ml9xY293Ml9pbWFnZSAqaW1nKQoreworCWludCBmZCA9IGltZy0+ZmQ7CisJc2l6ZV90IHNpemUsIGwxX3NpemUgPSBpbWctPmwxX3NpemUgKiBzaXplb2YoYmxrNjRfdCk7CisJYmxrNjRfdCAqdGFibGU7CisJZXJyY29kZV90IHJldDsKKworCXJldCA9IGV4dDJmc19nZXRfbWVtemVybyhsMV9zaXplLCAmdGFibGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoZXh0MmZzX2xsc2VlayhmZCwgaW1nLT5sMV9vZmZzZXQsIFNFRUtfU0VUKSA8IDApIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZ0YWJsZSk7CisJCXJldHVybiBlcnJubzsKKwl9CisKKwlzaXplID0gcmVhZChmZCwgdGFibGUsIGwxX3NpemUpOworCWlmIChzaXplICE9IGwxX3NpemUpIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZ0YWJsZSk7CisJCXJldHVybiBlcnJubzsKKwl9CisKKwlpbWctPmwxX3RhYmxlID0gdGFibGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxY293Ml9yZWFkX2wyX3RhYmxlKHN0cnVjdCBleHQyX3Fjb3cyX2ltYWdlICppbWcsCisJCQkgICAgICAgZXh0Ml9vZmY2NF90IG9mZnNldCwgYmxrNjRfdCAqKmwyX3RhYmxlKQoreworCWludCBmZCA9IGltZy0+ZmQ7CisJc2l6ZV90IHNpemU7CisKKwlhc3NlcnQoKmwyX3RhYmxlKTsKKworCWlmIChleHQyZnNfbGxzZWVrKGZkLCBvZmZzZXQsIFNFRUtfU0VUKSA8IDApCisJCXJldHVybiBlcnJubzsKKworCXNpemUgPSByZWFkKGZkLCAqbDJfdGFibGUsIGltZy0+Y2x1c3Rlcl9zaXplKTsKKwlpZiAoc2l6ZSAhPSBpbWctPmNsdXN0ZXJfc2l6ZSkKKwkJcmV0dXJuIGVycm5vOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWNvdzJfY29weV9kYXRhKGludCBmZGluLCBpbnQgZmRvdXQsIGV4dDJfb2ZmNjRfdCBvZmZfaW4sCisJCQkgICBleHQyX29mZjY0X3Qgb2ZmX291dCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc2l6ZV90IHNpemU7CisKKwlhc3NlcnQoYnVmKTsKKworCWlmIChleHQyZnNfbGxzZWVrKGZkb3V0LCBvZmZfb3V0LCBTRUVLX1NFVCkgPCAwKQorCQlyZXR1cm4gZXJybm87CisKKwlpZiAoZXh0MmZzX2xsc2VlayhmZGluLCBvZmZfaW4sIFNFRUtfU0VUKSA8IDApCisJCXJldHVybiBlcnJubzsKKworCXNpemUgPSByZWFkKGZkaW4sIGJ1ZiwgY291bnQpOworCWlmIChzaXplICE9IGNvdW50KQorCQlyZXR1cm4gZXJybm87CisKKwlzaXplID0gd3JpdGUoZmRvdXQsIGJ1ZiwgY291bnQpOworCWlmIChzaXplICE9IGNvdW50KQorCQlyZXR1cm4gZXJybm87CisKKwlyZXR1cm4gMDsKK30KKworCitpbnQgcWNvdzJfd3JpdGVfcmF3X2ltYWdlKGludCBxY293Ml9mZCwgaW50IHJhd19mZCwKKwkJCSAgICAgIHN0cnVjdCBleHQyX3Fjb3cyX2hkciAqaGRyKQoreworCXN0cnVjdCBleHQyX3Fjb3cyX2ltYWdlIGltZzsKKwllcnJjb2RlX3QgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgbDFfaW5kZXgsIGwyX2luZGV4OworCWV4dDJfb2ZmNjRfdCBvZmZzZXQ7CisJYmxrNjRfdCAqbDFfdGFibGUsICpsMl90YWJsZSA9IE5VTEw7CisJdm9pZCAqY29weV9idWYgPSBOVUxMOworCXNpemVfdCBzaXplOworCisJaWYgKGhkci0+Y3J5cHRfbWV0aG9kKQorCQlyZXR1cm4gLVFDT1dfRU5DUllQVEVEOworCisJaW1nLmZkID0gcWNvdzJfZmQ7CisJaW1nLmhkciA9IGhkcjsKKwlpbWcubDJfY2FjaGUgPSBOVUxMOworCWltZy5sMV90YWJsZSA9IE5VTEw7CisJaW1nLmNsdXN0ZXJfYml0cyA9IGV4dDJmc19iZTMyX3RvX2NwdShoZHItPmNsdXN0ZXJfYml0cyk7CisJaW1nLmNsdXN0ZXJfc2l6ZSA9IDEgPDwgaW1nLmNsdXN0ZXJfYml0czsKKwlpbWcubDFfc2l6ZSA9IGV4dDJmc19iZTMyX3RvX2NwdShoZHItPmwxX3NpemUpOworCWltZy5sMV9vZmZzZXQgPSBleHQyZnNfYmU2NF90b19jcHUoaGRyLT5sMV90YWJsZV9vZmZzZXQpOworCWltZy5sMl9zaXplID0gMSA8PCAoaW1nLmNsdXN0ZXJfYml0cyAtIDMpOworCWltZy5pbWFnZV9zaXplID0gZXh0MmZzX2JlNjRfdG9fY3B1KGhkci0+c2l6ZSk7CisKKworCXJldCA9IGV4dDJmc19nZXRfbWVtemVybyhpbWcuY2x1c3Rlcl9zaXplLCAmbDJfdGFibGUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gZXh0MmZzX2dldF9tZW16ZXJvKDEgPDwgaW1nLmNsdXN0ZXJfYml0cywgJmNvcHlfYnVmKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWlmIChleHQyZnNfbGxzZWVrKHJhd19mZCwgMCwgU0VFS19TRVQpIDwgMCkgeworCQlyZXQgPSBlcnJubzsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gcWNvdzJfcmVhZF9sMV90YWJsZSgmaW1nKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWwxX3RhYmxlID0gaW1nLmwxX3RhYmxlOworCS8qIFdhbGsgdGhyb3VnaCBsMSB0YWJsZSAqLworCWZvciAobDFfaW5kZXggPSAwOyBsMV9pbmRleCA8IGltZy5sMV9zaXplOyBsMV9pbmRleCsrKSB7CisJCWV4dDJfb2ZmNjRfdCBvZmZfb3V0OworCisJCW9mZnNldCA9IGV4dDJmc19iZTY0X3RvX2NwdShsMV90YWJsZVtsMV9pbmRleF0pICYKKwkJCSB+UUNPV19PRkxBR19DT1BJRUQ7CisKKwkJaWYgKChvZmZzZXQgPiBpbWcuaW1hZ2Vfc2l6ZSkgfHwKKwkJICAgIChvZmZzZXQgPD0gMCkpCisJCQljb250aW51ZTsKKworCQlpZiAob2Zmc2V0ICYgUUNPV19PRkxBR19DT01QUkVTU0VEKSB7CisJCQlyZXQgPSAtUUNPV19DT01QUkVTU0VEOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSBxY293Ml9yZWFkX2wyX3RhYmxlKCZpbWcsIG9mZnNldCwgJmwyX3RhYmxlKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCisJCS8qIFdhbGsgdGhyb3VnaCBsMiB0YWJsZSBhbmQgY29weSBkYXRhIGJsb2NrcyBpbnRvIHJhdyBpbWFnZSAqLworCQlmb3IgKGwyX2luZGV4ID0gMDsgbDJfaW5kZXggPCBpbWcubDJfc2l6ZTsgbDJfaW5kZXgrKykgeworCQkJb2Zmc2V0ID0gZXh0MmZzX2JlNjRfdG9fY3B1KGwyX3RhYmxlW2wyX2luZGV4XSkgJgorCQkJCSB+UUNPV19PRkxBR19DT1BJRUQ7CisKKwkJCWlmIChvZmZzZXQgPT0gMCkKKwkJCQljb250aW51ZTsKKworCQkJb2ZmX291dCA9IChsMV9pbmRleCAqIGltZy5sMl9zaXplKSArCisJCQkJICBsMl9pbmRleDsKKwkJCW9mZl9vdXQgPDw9IGltZy5jbHVzdGVyX2JpdHM7CisJCQlyZXQgPSBxY293Ml9jb3B5X2RhdGEocWNvdzJfZmQsIHJhd19mZCwgb2Zmc2V0LAorCQkJCQlvZmZfb3V0LCBjb3B5X2J1ZiwgaW1nLmNsdXN0ZXJfc2l6ZSk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogUmVzaXplIHRoZSBvdXRwdXQgaW1hZ2UgdG8gdGhlIGZpbGVzeXN0ZW0gc2l6ZSAqLworCWlmIChleHQyZnNfbGxzZWVrKHJhd19mZCwgaW1nLmltYWdlX3NpemUgLSAxLCBTRUVLX1NFVCkgPCAwKSB7CisJCXJldCA9IGVycm5vOworCQlnb3RvIG91dDsKKwl9CisKKwkoKGNoYXIgKiljb3B5X2J1ZilbMF0gPSAwOworCXNpemUgPSB3cml0ZShyYXdfZmQsIGNvcHlfYnVmLCAxKTsKKwlpZiAoc2l6ZSAhPSAxKSB7CisJCXJldCA9IGVycm5vOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlpZiAoY29weV9idWYpCisJCWV4dDJmc19mcmVlX21lbSgmY29weV9idWYpOworCWlmIChpbWcubDFfdGFibGUpCisJCWV4dDJmc19mcmVlX21lbSgmaW1nLmwxX3RhYmxlKTsKKwlpZiAobDJfdGFibGUpCisJCWV4dDJmc19mcmVlX21lbSgmbDJfdGFibGUpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL3Fjb3cyLmggYi9saWIvZXh0MmZzL3Fjb3cyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlMGVjOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvcWNvdzIuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIHFjb3cyLmggLS0tIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHFjb3cyLmMgdG8gZ2VuZXJhdGUKKyAqIHFjb3cyIGZvcm1hdHRlZCBkaXNrIGltYWdlcy4gIFRoaXMgZm9ybWF0IGlzIHVzZWQgb3JpZ2luYWxseSBieSBRRU1VCisgKiBmb3IgdmlydHVhbCBtYWNoaW5lcywgYW5kIHN0b3JlcyB0aGUgZmlsZXN5c3RlbSBkYXRhIG9uIGRpc2sgaW4gYQorICogcGFja2VkIGZvcm1hdCB0byBhdm9pZCBjcmVhdGluZyBzcGFyc2UgaW1hZ2UgZmlsZXMgdGhhdCBuZWVkIGxvdHMgb2YKKyAqIHNlZWtpbmcgdG8gcmVhZCBhbmQgd3JpdGUuCisgKgorICogVGhlIHFjb3cyIGZvcm1hdCBzdXBwb3J0cyB6bGliIGNvbXByZXNzaW9uLCBidXQgdGhhdCBpcyBub3QgeWV0CisgKiBpbXBsZW1lbnRlZC4KKyAqCisgKiBJdCBpcyBwb3NzaWJsZSB0byBkaXJlY3RseSBtb3VudCBhIHFjb3cyIGltYWdlIHVzaW5nIHFlbXUtbmJkOgorICoKKyAqIFtyb290XSMgbW9kcHJvYmUgbmJkIG1heF9wYXJ0PTYzCisgKiBbcm9vdF0jIHFlbXUtbmJkIC1jIC9kZXYvbmJkMCBpbWFnZS5pbWcKKyAqIFtyb290XSMgbW91bnQgL2Rldi9uYmQwcDEgL21udC9xZW11CisgKgorICogRm9ybWF0IGRldGFpbHMgYXQgaHR0cDovL3Blb3BsZS5nbm9tZS5vcmcvfm1hcmttYy9xY293LWltYWdlLWZvcm1hdC5odG1sCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlZCBIYXQsIEluYy4sIEx1a2FzIEN6ZXJuZXIgPGxjemVybmVyQHJlZGhhdC5jb20+CisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisvKiBOdW1iZXIgb2YgbDIgdGFibGVzIGluIG1lbW9yeSBiZWZvcmUgd3JpdGViYWNrICovCisjZGVmaW5lIEwyX0NBQ0hFX1BSRUFMTE9DCTUxMgorCisKKyNkZWZpbmUgUUNPV19NQUdJQyAoKCdRJyA8PCAyNCkgfCAoJ0YnIDw8IDE2KSB8ICgnSScgPDwgOCkgfCAweGZiKQorI2RlZmluZSBRQ09XX1ZFUlNJT04JCTIKKyNkZWZpbmUgUUNPV19PRkxBR19DT1BJRUQJKDFMTCA8PCA2MykKKyNkZWZpbmUgUUNPV19PRkxBR19DT01QUkVTU0VECSgxTEwgPDwgNjIpCisKKyNkZWZpbmUgUUNPV19DT01QUkVTU0VECQkxCisjZGVmaW5lIFFDT1dfRU5DUllQVEVECQkyCisKK3N0cnVjdCBleHQyX3Fjb3cyX2hkciB7CisJX191MzIJbWFnaWM7CisJX191MzIJdmVyc2lvbjsKKworCV9fdTY0CWJhY2tpbmdfZmlsZV9vZmZzZXQ7CisJX191MzIJYmFja2luZ19maWxlX3NpemU7CisKKwlfX3UzMgljbHVzdGVyX2JpdHM7CisJX191NjQJc2l6ZTsKKwlfX3UzMgljcnlwdF9tZXRob2Q7CisKKwlfX3UzMglsMV9zaXplOworCV9fdTY0CWwxX3RhYmxlX29mZnNldDsKKworCV9fdTY0CXJlZmNvdW50X3RhYmxlX29mZnNldDsKKwlfX3UzMglyZWZjb3VudF90YWJsZV9jbHVzdGVyczsKKworCV9fdTMyCW5iX3NuYXBzaG90czsKKwlfX3U2NAlzbmFwc2hvdHNfb2Zmc2V0OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgZXh0Ml9xY293Ml9sMl90YWJsZSBMMl9DQUNIRV9IRUFEOworCitzdHJ1Y3QgZXh0Ml9xY293Ml9sMl90YWJsZSB7CisJX191MzIJCWwxX2luZGV4OworCV9fdTY0CQlvZmZzZXQ7CisJX191NjQJCSpkYXRhOworCUwyX0NBQ0hFX0hFQUQJKm5leHQ7Cit9OworCitzdHJ1Y3QgZXh0Ml9xY293Ml9sMl9jYWNoZSB7CisJTDJfQ0FDSEVfSEVBRAkqdXNlZF9oZWFkOworCUwyX0NBQ0hFX0hFQUQJKnVzZWRfdGFpbDsKKwlMMl9DQUNIRV9IRUFECSpmcmVlX2hlYWQ7CisJX191MzIJCWZyZWU7CisJX191MzIJCWNvdW50OworCV9fdTY0CQluZXh0X29mZnNldDsKK307CisKK3N0cnVjdCBleHQyX3Fjb3cyX3JlZmNvdW50IHsKKwlfX3U2NAkqcmVmY291bnRfdGFibGU7CisJX191NjQJcmVmY291bnRfdGFibGVfb2Zmc2V0OworCV9fdTY0CXJlZmNvdW50X2Jsb2NrX29mZnNldDsKKworCV9fdTMyCXJlZmNvdW50X3RhYmxlX2NsdXN0ZXJzOworCV9fdTMyCXJlZmNvdW50X3RhYmxlX2luZGV4OworCV9fdTMyCXJlZmNvdW50X2Jsb2NrX2luZGV4OworCisJX191MTYJKnJlZmNvdW50X2Jsb2NrOworfTsKKworc3RydWN0IGV4dDJfcWNvdzJfaW1hZ2UgeworCWludAlmZDsKKwlzdHJ1Y3QJZXh0Ml9xY293Ml9oZHIJCSpoZHI7CisJc3RydWN0CWV4dDJfcWNvdzJfbDJfY2FjaGUJKmwyX2NhY2hlOworCXN0cnVjdAlleHQyX3Fjb3cyX3JlZmNvdW50CXJlZmNvdW50OworCV9fdTMyCWNsdXN0ZXJfc2l6ZTsKKwlfX3UzMgljbHVzdGVyX2JpdHM7CisJX191MzIJbDFfc2l6ZTsKKwlfX3UzMglsMl9zaXplOworCisJX191NjQJKmwxX3RhYmxlOworCV9fdTY0CWwyX29mZnNldDsKKwlfX3U2NAlsMV9vZmZzZXQ7CisJX191NjQJaW1hZ2Vfc2l6ZTsKK307CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KKworLyogcWNvdzIuYyAqLworCisvKiBGdW5jdGlvbnMgZm9yIGNvbnZlcnRpbmcgcWNvdzIgaW1hZ2UgaW50byByYXcgaW1hZ2UgKi8KK3N0cnVjdCBleHQyX3Fjb3cyX2hkciAqcWNvdzJfcmVhZF9oZWFkZXIoaW50KTsKK2ludCBxY293Ml93cml0ZV9yYXdfaW1hZ2UoaW50LCBpbnQsIHN0cnVjdCBleHQyX3Fjb3cyX2hkciAqKTsKKwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9yYnRyZWUuYyBiL2xpYi9leHQyZnMvcmJ0cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQzOTMwMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvcmJ0cmVlLmMKQEAgLTAsMCArMSw0NTEgQEAKKy8qCisgIFJlZCBCbGFjayBUcmVlcworICAoQykgMTk5OSAgQW5kcmVhIEFyY2FuZ2VsaSA8YW5kcmVhQHN1c2UuZGU+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+cmJfbGVmdCkKKwkJZXh0MmZzX3JiX3NldF9wYXJlbnQodmljdGltLT5yYl9sZWZ0LCBuZXcpOworCWlmICh2aWN0aW0tPnJiX3JpZ2h0KQorCQlleHQyZnNfcmJfc2V0X3BhcmVudCh2aWN0aW0tPnJiX3JpZ2h0LCBuZXcpOworCisJLyogQ29weSB0aGUgcG9pbnRlcnMvY29sb3VyIGZyb20gdGhlIHZpY3RpbSB0byB0aGUgcmVwbGFjZW1lbnQgKi8KKwkqbmV3ID0gKnZpY3RpbTsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvcmJ0cmVlLmggYi9saWIvZXh0MmZzL3JidHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMGIwNzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL3JidHJlZS5oCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICBSZWQgQmxhY2sgVHJlZXMKKyAgKEMpIDE5OTkgIEFuZHJlYSBBcmNhbmdlbGkgPGFuZHJlYUBzdXNlLmRlPgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyAgbGludXgvaW5jbHVkZS9saW51eC9yYnRyZWUuaAorCisgIFRvIHVzZSByYnRyZWVzIHlvdSdsbCBoYXZlIHRvIGltcGxlbWVudCB5b3VyIG93biBpbnNlcnQgYW5kIHNlYXJjaCBjb3Jlcy4KKyAgVGhpcyB3aWxsIGF2b2lkIHVzIHRvIHVzZSBjYWxsYmFja3MgYW5kIHRvIGRyb3AgZHJhbW1hdGljYWxseSBwZXJmb3JtYW5jZXMuCisgIEkga25vdyBpdCdzIG5vdCB0aGUgY2xlYW5lciB3YXksICBidXQgaW4gQyAobm90IGluIEMrKykgdG8gZ2V0CisgIHBlcmZvcm1hbmNlcyBhbmQgZ2VuZXJpY2l0eS4uLgorCisgIFNvbWUgZXhhbXBsZSBvZiBpbnNlcnQgYW5kIHNlYXJjaCBmb2xsb3dzIGhlcmUuIFRoZSBzZWFyY2ggaXMgYSBwbGFpbgorICBub3JtYWwgc2VhcmNoIG92ZXIgYW4gb3JkZXJlZCB0cmVlLiBUaGUgaW5zZXJ0IGluc3RlYWQgbXVzdCBiZSBpbXBsZW1lbnRlZAorICBpbiB0d28gc3RlcHM6IEZpcnN0LCB0aGUgY29kZSBtdXN0IGluc2VydCB0aGUgZWxlbWVudCBpbiBvcmRlciBhcyBhIHJlZCBsZWFmCisgIGluIHRoZSB0cmVlLCBhbmQgdGhlbiB0aGUgc3VwcG9ydCBsaWJyYXJ5IGZ1bmN0aW9uIHJiX2luc2VydF9jb2xvcigpIG11c3QKKyAgYmUgY2FsbGVkLiBTdWNoIGZ1bmN0aW9uIHdpbGwgZG8gdGhlIG5vdCB0cml2aWFsIHdvcmsgdG8gcmViYWxhbmNlIHRoZQorICByYnRyZWUsIGlmIG5lY2Vzc2FyeS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKiByYl9zZWFyY2hfcGFnZV9jYWNoZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqIG4gPSBpbm9kZS0+aV9yYl9wYWdlX2NhY2hlLnJiX25vZGU7CisJc3RydWN0IHBhZ2UgKiBwYWdlOworCisJd2hpbGUgKG4pCisJeworCQlwYWdlID0gcmJfZW50cnkobiwgc3RydWN0IHBhZ2UsIHJiX3BhZ2VfY2FjaGUpOworCisJCWlmIChvZmZzZXQgPCBwYWdlLT5vZmZzZXQpCisJCQluID0gbi0+cmJfbGVmdDsKKwkJZWxzZSBpZiAob2Zmc2V0ID4gcGFnZS0+b2Zmc2V0KQorCQkJbiA9IG4tPnJiX3JpZ2h0OworCQllbHNlCisJCQlyZXR1cm4gcGFnZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKiBfX3JiX2luc2VydF9wYWdlX2NhY2hlKHN0cnVjdCBpbm9kZSAqIGlub2RlLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCQkgICBzdHJ1Y3QgcmJfbm9kZSAqIG5vZGUpCit7CisJc3RydWN0IHJiX25vZGUgKiogcCA9ICZpbm9kZS0+aV9yYl9wYWdlX2NhY2hlLnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKiBwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBwYWdlICogcGFnZTsKKworCXdoaWxlICgqcCkKKwl7CisJCXBhcmVudCA9ICpwOworCQlwYWdlID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgcGFnZSwgcmJfcGFnZV9jYWNoZSk7CisKKwkJaWYgKG9mZnNldCA8IHBhZ2UtPm9mZnNldCkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAob2Zmc2V0ID4gcGFnZS0+b2Zmc2V0KQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIHBhZ2U7CisJfQorCisJcmJfbGlua19ub2RlKG5vZGUsIHBhcmVudCwgcCk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqIHJiX2luc2VydF9wYWdlX2NhY2hlKHN0cnVjdCBpbm9kZSAqIGlub2RlLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkJIHN0cnVjdCByYl9ub2RlICogbm9kZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqIHJldDsKKwlpZiAoKHJldCA9IF9fcmJfaW5zZXJ0X3BhZ2VfY2FjaGUoaW5vZGUsIG9mZnNldCwgbm9kZSkpKQorCQlnb3RvIG91dDsKKwlyYl9pbnNlcnRfY29sb3Iobm9kZSwgJmlub2RlLT5pX3JiX3BhZ2VfY2FjaGUpOworIG91dDoKKwlyZXR1cm4gcmV0OworfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYJX0xJTlVYX1JCVFJFRV9ICisjZGVmaW5lCV9MSU5VWF9SQlRSRUVfSAorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyN1bmRlZiBvZmZzZXRvZgorI2lmZGVmIF9fY29tcGlsZXJfb2Zmc2V0b2YKKyNkZWZpbmUgb2Zmc2V0b2YoVFlQRSxNRU1CRVIpIF9fY29tcGlsZXJfb2Zmc2V0b2YoVFlQRSxNRU1CRVIpCisjZWxzZQorI2RlZmluZSBvZmZzZXRvZihUWVBFLCBNRU1CRVIpICgoc2l6ZV90KSAmKChUWVBFICopMCktPk1FTUJFUikKKyNlbmRpZgorCisjZGVmaW5lIGNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJlcikgKHsJCQlcCisJY29uc3QgX190eXBlb2ZfXyggKCh0eXBlICopMCktPm1lbWJlciApICpfX21wdHIgPSAocHRyKTsJXAorCSh0eXBlICopKCAoY2hhciAqKV9fbXB0ciAtIG9mZnNldG9mKHR5cGUsbWVtYmVyKSApO30pCisKK3N0cnVjdCByYl9ub2RlCit7CisJdW5zaWduZWQgbG9uZyAgcmJfcGFyZW50X2NvbG9yOworI2RlZmluZQlSQl9SRUQJCTAKKyNkZWZpbmUJUkJfQkxBQ0sJMQorCXN0cnVjdCByYl9ub2RlICpyYl9yaWdodDsKKwlzdHJ1Y3QgcmJfbm9kZSAqcmJfbGVmdDsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YobG9uZykpKSk7CisgICAgLyogVGhlIGFsaWdubWVudCBtaWdodCBzZWVtIHBvaW50bGVzcywgYnV0IGFsbGVnZWRseSBDUklTIG5lZWRzIGl0ICovCisKK3N0cnVjdCByYl9yb290Cit7CisJc3RydWN0IHJiX25vZGUgKnJiX25vZGU7Cit9OworCisKKyNkZWZpbmUgZXh0MmZzX3JiX3BhcmVudChyKSAgICgoc3RydWN0IHJiX25vZGUgKikoKHIpLT5yYl9wYXJlbnRfY29sb3IgJiB+MykpCisjZGVmaW5lIGV4dDJmc19yYl9jb2xvcihyKSAgICgociktPnJiX3BhcmVudF9jb2xvciAmIDEpCisjZGVmaW5lIGV4dDJmc19yYl9pc19yZWQocikgICAoIWV4dDJmc19yYl9jb2xvcihyKSkKKyNkZWZpbmUgZXh0MmZzX3JiX2lzX2JsYWNrKHIpIGV4dDJmc19yYl9jb2xvcihyKQorI2RlZmluZSBleHQyZnNfcmJfc2V0X3JlZChyKSAgZG8geyAociktPnJiX3BhcmVudF9jb2xvciAmPSB+MTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZXh0MmZzX3JiX3NldF9ibGFjayhyKSAgZG8geyAociktPnJiX3BhcmVudF9jb2xvciB8PSAxOyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXh0MmZzX3JiX3NldF9wYXJlbnQoc3RydWN0IHJiX25vZGUgKnJiLCBzdHJ1Y3QgcmJfbm9kZSAqcCkKK3sKKwlyYi0+cmJfcGFyZW50X2NvbG9yID0gKHJiLT5yYl9wYXJlbnRfY29sb3IgJiAzKSB8ICh1bnNpZ25lZCBsb25nKXA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZXh0MmZzX3JiX3NldF9jb2xvcihzdHJ1Y3QgcmJfbm9kZSAqcmIsIGludCBjb2xvcikKK3sKKwlyYi0+cmJfcGFyZW50X2NvbG9yID0gKHJiLT5yYl9wYXJlbnRfY29sb3IgJiB+MSkgfCBjb2xvcjsKK30KKworI2RlZmluZSBSQl9ST09UCShzdHJ1Y3QgcmJfcm9vdCkgeyBOVUxMLCB9CisjZGVmaW5lCWV4dDJmc19yYl9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgY29udGFpbmVyX29mKHB0ciwgdHlwZSwgbWVtYmVyKQorCisjZGVmaW5lIEVYVDJGU19SQl9FTVBUWV9ST09UKHJvb3QpCSgocm9vdCktPnJiX25vZGUgPT0gTlVMTCkKKyNkZWZpbmUgRVhUMkZTX1JCX0VNUFRZX05PREUobm9kZSkJKGV4dDJmc19yYl9wYXJlbnQobm9kZSkgPT0gbm9kZSkKKyNkZWZpbmUgRVhUMkZTX1JCX0NMRUFSX05PREUobm9kZSkJKGV4dDJmc19yYl9zZXRfcGFyZW50KG5vZGUsIG5vZGUpKQorCitleHRlcm4gdm9pZCBleHQyZnNfcmJfaW5zZXJ0X2NvbG9yKHN0cnVjdCByYl9ub2RlICosIHN0cnVjdCByYl9yb290ICopOworZXh0ZXJuIHZvaWQgZXh0MmZzX3JiX2VyYXNlKHN0cnVjdCByYl9ub2RlICosIHN0cnVjdCByYl9yb290ICopOworCit0eXBlZGVmIHZvaWQgKCpyYl9hdWdtZW50X2YpKHN0cnVjdCByYl9ub2RlICpub2RlLCB2b2lkICpkYXRhKTsKKworZXh0ZXJuIHZvaWQgZXh0MmZzX3JiX2F1Z21lbnRfaW5zZXJ0KHN0cnVjdCByYl9ub2RlICpub2RlLAorCQkJICAgICAgcmJfYXVnbWVudF9mIGZ1bmMsIHZvaWQgKmRhdGEpOworZXh0ZXJuIHN0cnVjdCByYl9ub2RlICpleHQyZnNfcmJfYXVnbWVudF9lcmFzZV9iZWdpbihzdHJ1Y3QgcmJfbm9kZSAqbm9kZSk7CitleHRlcm4gdm9pZCBleHQyZnNfcmJfYXVnbWVudF9lcmFzZV9lbmQoc3RydWN0IHJiX25vZGUgKm5vZGUsCisJCQkJIHJiX2F1Z21lbnRfZiBmdW5jLCB2b2lkICpkYXRhKTsKKworLyogRmluZCBsb2dpY2FsIG5leHQgYW5kIHByZXZpb3VzIG5vZGVzIGluIGEgdHJlZSAqLworZXh0ZXJuIHN0cnVjdCByYl9ub2RlICpleHQyZnNfcmJfbmV4dChzdHJ1Y3QgcmJfbm9kZSAqKTsKK2V4dGVybiBzdHJ1Y3QgcmJfbm9kZSAqZXh0MmZzX3JiX3ByZXYoc3RydWN0IHJiX25vZGUgKik7CitleHRlcm4gc3RydWN0IHJiX25vZGUgKmV4dDJmc19yYl9maXJzdChjb25zdCBzdHJ1Y3QgcmJfcm9vdCAqKTsKK2V4dGVybiBzdHJ1Y3QgcmJfbm9kZSAqZXh0MmZzX3JiX2xhc3QoY29uc3Qgc3RydWN0IHJiX3Jvb3QgKik7CisKKy8qIEZhc3QgcmVwbGFjZW1lbnQgb2YgYSBzaW5nbGUgbm9kZSB3aXRob3V0IHJlbW92ZS9yZWJhbGFuY2UvYWRkL3JlYmFsYW5jZSAqLworZXh0ZXJuIHZvaWQgZXh0MmZzX3JiX3JlcGxhY2Vfbm9kZShzdHJ1Y3QgcmJfbm9kZSAqdmljdGltLCBzdHJ1Y3QgcmJfbm9kZSAqbmV3LAorCQkJCSBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBleHQyZnNfcmJfbGlua19ub2RlKHN0cnVjdCByYl9ub2RlICogbm9kZSwKKwkJCQkgICAgIHN0cnVjdCByYl9ub2RlICogcGFyZW50LAorCQkJCSAgICAgc3RydWN0IHJiX25vZGUgKiogcmJfbGluaykKK3sKKwlub2RlLT5yYl9wYXJlbnRfY29sb3IgPSAodW5zaWduZWQgbG9uZyApcGFyZW50OworCW5vZGUtPnJiX2xlZnQgPSBub2RlLT5yYl9yaWdodCA9IE5VTEw7CisKKwkqcmJfbGluayA9IG5vZGU7Cit9CisKKyNlbmRpZgkvKiBfTElOVVhfUkJUUkVFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvcmVhZF9iYi5jIGIvbGliL2V4dDJmcy9yZWFkX2JiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVhMGQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvcmVhZF9iYi5jCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogcmVhZF9iYiAtLS0gcmVhZCB0aGUgYmFkIGJsb2NrcyBpbm9kZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCitzdHJ1Y3QgcmVhZF9iYl9yZWNvcmQgeworCWV4dDJfYmFkYmxvY2tzX2xpc3QJYmJfbGlzdDsKKwllcnJjb2RlX3QJZXJyOworfTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgZXh0MmZzX3JlYWRfYmJfaW5vZGUoKQorICovCisjaWZkZWYgX19UVVJCT0NfXworICNwcmFnbWEgYXJnc3VzZWQKKyNlbmRpZgorc3RhdGljIGludCBtYXJrX2JhZF9ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrX3QgKmJsb2NrX25yLAorCQkJICBlMl9ibGtjbnRfdCBibG9ja2NudCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgIGJsa190IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCByZWFkX2JiX3JlY29yZCAqcmIgPSAoc3RydWN0IHJlYWRfYmJfcmVjb3JkICopIHByaXZfZGF0YTsKKworCWlmIChibG9ja2NudCA8IDApCisJCXJldHVybiAwOworCisJaWYgKCgqYmxvY2tfbnIgPCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgfHwKKwkgICAgKCpibG9ja19uciA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpKQorCQlyZXR1cm4gMDsJLyogSWdub3JlIGlsbGVnYWwgYmxvY2tzICovCisKKwlyYi0+ZXJyID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2FkZChyYi0+YmJfbGlzdCwgKmJsb2NrX25yKTsKKwlpZiAocmItPmVycikKKwkJcmV0dXJuIEJMT0NLX0FCT1JUOworCXJldHVybiAwOworfQorCisvKgorICogUmVhZHMgdGhlIGN1cnJlbnQgYmFkIGJsb2NrcyBmcm9tIHRoZSBiYWQgYmxvY2tzIGlub2RlLgorICovCitlcnJjb2RlX3QgZXh0MmZzX3JlYWRfYmJfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfYmFkYmxvY2tzX2xpc3QgKmJiX2xpc3QpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgcmVhZF9iYl9yZWNvcmQgcmI7CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisJYmxrX3QJbnVtYmxvY2tzOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmICghKmJiX2xpc3QpIHsKKwkJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIEVYVDJfQkFEX0lOTywgJmlub2RlKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCW51bWJsb2NrcyA9IGlub2RlLmlfYmxvY2tzOworCQlpZiAoISgoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYKKwkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSAmJgorCQkgICAgICAoaW5vZGUuaV9mbGFncyAmIEVYVDRfSFVHRV9GSUxFX0ZMKSkpCisJCQludW1ibG9ja3MgPSBudW1ibG9ja3MgLyAoZnMtPmJsb2Nrc2l6ZSAvIDUxMik7CisJCW51bWJsb2NrcyArPSAyMDsKKwkJaWYgKG51bWJsb2NrcyA8IDUwKQorCQkJbnVtYmxvY2tzID0gNTA7CisJCWlmIChudW1ibG9ja3MgPiA1MDAwMCkKKwkJCW51bWJsb2NrcyA9IDUwMDsKKwkJcmV0dmFsID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2NyZWF0ZShiYl9saXN0LCBudW1ibG9ja3MpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyYi5iYl9saXN0ID0gKmJiX2xpc3Q7CisJcmIuZXJyID0gMDsKKwlyZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTIoZnMsIEVYVDJfQkFEX0lOTywgQkxPQ0tfRkxBR19SRUFEX09OTFksCisJCQkJICAgICAgIDAsIG1hcmtfYmFkX2Jsb2NrLCAmcmIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gcmIuZXJyOworfQorCisKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvcmVhZF9iYl9maWxlLmMgYi9saWIvZXh0MmZzL3JlYWRfYmJfZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMWFkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL3JlYWRfYmJfZmlsZS5jCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogcmVhZF9iYl9maWxlLmMgLS0tIHJlYWQgYSBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBhIEZJTEUgKgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMjAwMCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisvKgorICogUmVhZHMgYSBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSAgYSBGSUxFICoKKyAqLworZXJyY29kZV90IGV4dDJmc19yZWFkX2JiX0ZJTEUyKGV4dDJfZmlsc3lzIGZzLCBGSUxFICpmLAorCQkJICAgICAgIGV4dDJfYmFkYmxvY2tzX2xpc3QgKmJiX2xpc3QsCisJCQkgICAgICAgdm9pZCAqcHJpdl9kYXRhLAorCQkJICAgICAgIHZvaWQgKCppbnZhbGlkKShleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgICAgIGJsa190IGJsaywKKwkJCQkJICAgICAgIGNoYXIgKmJhZHN0ciwKKwkJCQkJICAgICAgIHZvaWQgKnByaXZfZGF0YSkpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlibGs2NF90CQlibG9ja25vOworCWludAkJY291bnQ7CisJY2hhcgkJYnVmWzEyOF07CisKKwlpZiAoZnMpCisJCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwlpZiAoISpiYl9saXN0KSB7CisJCXJldHZhbCA9IGV4dDJmc19iYWRibG9ja3NfbGlzdF9jcmVhdGUoYmJfbGlzdCwgMTApOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwl3aGlsZSAoIWZlb2YgKGYpKSB7CisJCWlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWNvdW50ID0gc3NjYW5mKGJ1ZiwgIiVsbHUiLCAmYmxvY2tubyk7CisJCWlmIChjb3VudCA8PSAwKQorCQkJY29udGludWU7CisJCS8qIEJhZGJsb2NrcyBpc24ndCBnb2luZyB0byBiZSB1cGRhdGVkIGZvciA2NGJpdCAqLworCQlpZiAoYmxvY2tubyA+PiAzMikKKwkJCXJldHVybiBFT1ZFUkZMT1c7CisJCWlmIChmcyAmJgorCQkgICAgKChibG9ja25vIDwgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spIHx8CisJCSAgICAgKGJsb2Nrbm8gPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSkpIHsKKwkJCWlmIChpbnZhbGlkKQorCQkJCShpbnZhbGlkKShmcywgYmxvY2tubywgYnVmLCBwcml2X2RhdGEpOworCQkJY29udGludWU7CisJCX0KKwkJcmV0dmFsID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2FkZCgqYmJfbGlzdCwgYmxvY2tubyk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNvbXBhdF9zdHJ1Y3QgeworCXZvaWQgKCppbnZhbGlkKShleHQyX2ZpbHN5cywgYmxrX3QpOworfTsKKworc3RhdGljIHZvaWQgY2FsbF9jb21wYXRfaW52YWxpZChleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxrLAorCQkJCWNoYXIgKmJhZHN0ciBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBjb21wYXRfc3RydWN0ICpzdDsKKworCXN0ID0gKHN0cnVjdCBjb21wYXRfc3RydWN0ICopIHByaXZfZGF0YTsKKwlpZiAoc3QtPmludmFsaWQpCisJCShzdC0+aW52YWxpZCkoZnMsIGJsayk7Cit9CisKKworLyoKKyAqIFJlYWRzIGEgbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gIGEgRklMRSAqCisgKi8KK2VycmNvZGVfdCBleHQyZnNfcmVhZF9iYl9GSUxFKGV4dDJfZmlsc3lzIGZzLCBGSUxFICpmLAorCQkJICAgICAgZXh0Ml9iYWRibG9ja3NfbGlzdCAqYmJfbGlzdCwKKwkJCSAgICAgIHZvaWQgKCppbnZhbGlkKShleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxrKSkKK3sKKwlzdHJ1Y3QgY29tcGF0X3N0cnVjdCBzdDsKKworCXN0LmludmFsaWQgPSBpbnZhbGlkOworCisJcmV0dXJuIGV4dDJmc19yZWFkX2JiX0ZJTEUyKGZzLCBmLCBiYl9saXN0LCAmc3QsCisJCQkJICAgIGNhbGxfY29tcGF0X2ludmFsaWQpOworfQorCisKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvcmVzX2dkdC5jIGIvbGliL2V4dDJmcy9yZXNfZ2R0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZkYjYxYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvcmVzX2dkdC5jCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogcmVzX2dkdC5jIC0tLSByZXNlcnZlIGJsb2NrcyBmb3IgZ3Jvd2luZyB0aGUgZ3JvdXAgZGVzY3JpcHRvciB0YWJsZQorICogICAgICAgICAgICAgICBkdXJpbmcgb25saW5lIHJlc2l6aW5nLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBBbmRyZWFzIERpbGdlcgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworLyoKKyAqIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZ3JvdXBzIHdoaWNoIGhvbGQgQkFDS1VQIHN1cGVyYmxvY2svR0RUIGNvcGllcyBpbiBhbgorICogZXh0MyBmaWxlc3lzdGVtLiAgVGhlIGNvdW50ZXJzIHNob3VsZCBiZSBpbml0aWFsaXplZCB0byAxLCA1LCBhbmQgNyBiZWZvcmUKKyAqIGNhbGxpbmcgdGhpcyBmb3IgdGhlIGZpcnN0IHRpbWUuICBJbiBhIHNwYXJzZSBmaWxlc3lzdGVtIGl0IHdpbGwgYmUgdGhlCisgKiBzZXF1ZW5jZSBvZiBwb3dlcnMgb2YgMywgNSwgYW5kIDc6IDEsIDMsIDUsIDcsIDksIDI1LCAyNywgNDksIDgxLCAuLi4KKyAqIEZvciBhIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSBpdCB3aWxsIGJlIGV2ZXJ5IGdyb3VwOiAxLCAyLCAzLCA0LCAuLi4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBsaXN0X2JhY2t1cHMoZXh0Ml9maWxzeXMgZnMsIHVuc2lnbmVkIGludCAqdGhyZWUsCisJCQkJIHVuc2lnbmVkIGludCAqZml2ZSwgdW5zaWduZWQgaW50ICpzZXZlbikKK3sKKwl1bnNpZ25lZCBpbnQgKm1pbiA9IHRocmVlOworCWludCBtdWx0ID0gMzsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDRfRkVBVFVSRV9DT01QQVRfU1BBUlNFX1NVUEVSMikgeworCQlpZiAoKm1pbiA9PSAxKSB7CisJCQkqbWluICs9IDE7CisJCQlpZiAoZnMtPnN1cGVyLT5zX2JhY2t1cF9iZ3NbMF0pCisJCQkJcmV0dXJuIGZzLT5zdXBlci0+c19iYWNrdXBfYmdzWzBdOworCQl9CisJCWlmICgqbWluID09IDIpIHsKKwkJCSptaW4gKz0gMTsKKwkJCWlmIChmcy0+c3VwZXItPnNfYmFja3VwX2Jnc1sxXSkKKwkJCQlyZXR1cm4gZnMtPnN1cGVyLT5zX2JhY2t1cF9iZ3NbMV07CisJCX0KKwkJcmV0dXJuIGZzLT5ncm91cF9kZXNjX2NvdW50OworCX0KKwlpZiAoIShmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCSAgICAgIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSKSkgeworCQlyZXQgPSAqbWluOworCQkqbWluICs9IDE7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKCpmaXZlIDwgKm1pbikgeworCQltaW4gPSBmaXZlOworCQltdWx0ID0gNTsKKwl9CisJaWYgKCpzZXZlbiA8ICptaW4pIHsKKwkJbWluID0gc2V2ZW47CisJCW11bHQgPSA3OworCX0KKworCXJldCA9ICptaW47CisJKm1pbiAqPSBtdWx0OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgdGhlIHJlc2VydmVkIGJsb2NrcyBoYXZlIGFscmVhZHkgYmVlbiBtYXJrZWQgaW4tdXNlCisgKiBkdXJpbmcgZXh0MmZzX2luaXRpYWxpemUoKSwgc28gdGhhdCB0aGV5IGFyZSBub3QgYWxsb2NhdGVkIGZvciBvdGhlcgorICogdXNlcyBiZWZvcmUgd2UgY2FuIGFkZCB0aGVtIHRvIHRoZSByZXNpemUgaW5vZGUgKHdoaWNoIGhhcyB0byBjb21lCisgKiBhZnRlciB0aGUgY3JlYXRpb24gb2YgdGhlIGlub2RlIHRhYmxlKS4KKyAqLworZXJyY29kZV90IGV4dDJmc19jcmVhdGVfcmVzaXplX2lub2RlKGV4dDJfZmlsc3lzIGZzKQoreworCWVycmNvZGVfdAkJcmV0dmFsLCByZXR2YWwyOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrCSpzYjsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKwlfX3UzMgkJCSpkaW5kaXJfYnVmLCAqZ2R0X2J1ZjsKKwl1bnNpZ25lZCBsb25nIGxvbmcJYXBiLCBpbm9kZV9zaXplOworCS8qIEZJWE1FLTY0IC0gY2FuJ3QgZGVhbCB3aXRoIGV4dGVudHMgKi8KKwlibGtfdAkJCWRpbmRpcl9ibGssIHJzdl9vZmYsIGdkdF9vZmYsIGdkdF9ibGs7CisJaW50CQkJZGluZGlyX2RpcnR5ID0gMCwgaW5vZGVfZGlydHkgPSAwLCBzYl9ibGsgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCXNiID0gZnMtPnN1cGVyOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9hcnJheSgyLCBmcy0+YmxvY2tzaXplLCAmZGluZGlyX2J1Zik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlnZHRfYnVmID0gKF9fdTMyICopKChjaGFyICopZGluZGlyX2J1ZiArIGZzLT5ibG9ja3NpemUpOworCisJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIEVYVDJfUkVTSVpFX0lOTywgJmlub2RlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dF9mcmVlOworCisJLyoKKwkgKiBGaWxlIHN5c3RlbXMgd2l0aCBhIGJsb2Nrc2l6ZSBvZiAxMDI0IGFuZCBiaWdhbGxvYyBoYXZlCisJICogc2ItPnNfZmlyc3RfZGF0YV9ibG9jayBvZiAwOyB5ZXQgdGhlIHN1cGVyYmxvY2sgaXMgc3RpbGwgYXQKKwkgKiBibG9jayAjMS4gIFdlIGNvbXBlbnNhdGUgZm9yIGl0IGhlcmUuCisJICovCisJc2JfYmxrID0gc2ItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwlpZiAoZnMtPmJsb2Nrc2l6ZSA9PSAxMDI0ICYmIHNiX2JsayA9PSAwKQorCQlzYl9ibGsgPSAxOworCisJLyogTWF4aW11bSBwb3NzaWJsZSBmaWxlIHNpemUgKHdlIGRvbmx5IHVzZSB0aGUgZGluZGlyZWN0IGJsb2NrcykgKi8KKwlhcGIgPSBFWFQyX0FERFJfUEVSX0JMT0NLKHNiKTsKKwlpZiAoKGRpbmRpcl9ibGsgPSBpbm9kZS5pX2Jsb2NrW0VYVDJfRElORF9CTE9DS10pKSB7CisjaWZkZWYgUkVTX0dEVF9ERUJVRworCQlwcmludGYoInJlYWRpbmcgR0RUIGRpbmRpciAldVxuIiwgZGluZGlyX2Jsayk7CisjZW5kaWYKKwkJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5kX2Jsb2NrKGZzLCBkaW5kaXJfYmxrLCBkaW5kaXJfYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gb3V0X2lub2RlOworCX0gZWxzZSB7CisJCWJsa190IGdvYWwgPSBzYl9ibGsgKyBmcy0+ZGVzY19ibG9ja3MgKworCQkJc2ItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyArIDIgKworCQkJZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisKKwkJcmV0dmFsID0gZXh0MmZzX2FsbG9jX2Jsb2NrKGZzLCBnb2FsLCAwLCAmZGluZGlyX2Jsayk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dF9mcmVlOworCQlpbm9kZS5pX21vZGUgPSBMSU5VWF9TX0lGUkVHIHwgMDYwMDsKKwkJaW5vZGUuaV9saW5rc19jb3VudCA9IDE7CisJCWlub2RlLmlfYmxvY2tbRVhUMl9ESU5EX0JMT0NLXSA9IGRpbmRpcl9ibGs7CisJCWV4dDJmc19pYmxrX3NldChmcywgJmlub2RlLCAxKTsKKwkJbWVtc2V0KGRpbmRpcl9idWYsIDAsIGZzLT5ibG9ja3NpemUpOworI2lmZGVmIFJFU19HRFRfREVCVUcKKwkJcHJpbnRmKCJhbGxvY2F0ZWQgR0RUIGRpbmRpciAldVxuIiwgZGluZGlyX2Jsayk7CisjZW5kaWYKKwkJZGluZGlyX2RpcnR5ID0gaW5vZGVfZGlydHkgPSAxOworCQlpbm9kZV9zaXplID0gYXBiKmFwYiArIGFwYiArIEVYVDJfTkRJUl9CTE9DS1M7CisJCWlub2RlX3NpemUgKj0gZnMtPmJsb2Nrc2l6ZTsKKwkJcmV0dmFsID0gZXh0MmZzX2lub2RlX3NpemVfc2V0KGZzLCAmaW5vZGUsIGlub2RlX3NpemUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXRfZnJlZTsKKwkJaW5vZGUuaV9jdGltZSA9IGZzLT5ub3cgPyBmcy0+bm93IDogdGltZSgwKTsKKwl9CisKKwlmb3IgKHJzdl9vZmYgPSAwLCBnZHRfb2ZmID0gZnMtPmRlc2NfYmxvY2tzLAorCSAgICAgZ2R0X2JsayA9IHNiX2JsayArIDEgKyBmcy0+ZGVzY19ibG9ja3M7CisJICAgICByc3Zfb2ZmIDwgc2ItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrczsKKwkgICAgIHJzdl9vZmYrKywgZ2R0X29mZisrLCBnZHRfYmxrKyspIHsKKwkJdW5zaWduZWQgaW50IHRocmVlID0gMSwgZml2ZSA9IDUsIHNldmVuID0gNzsKKwkJdW5zaWduZWQgaW50IGdycCwgbGFzdCA9IDA7CisJCWludCBnZHRfZGlydHkgPSAwOworCisJCWdkdF9vZmYgJT0gYXBiOworCQlpZiAoIWRpbmRpcl9idWZbZ2R0X29mZl0pIHsKKwkJCS8qIEZJWE1FIFhYWCBYWFgKKwkJCWJsa190IG5ld19ibGs7CisKKwkJCXJldHZhbCA9IGV4dDJmc19uZXdfYmxvY2soZnMsIGdkdF9ibGssIDAsICZuZXdfYmxrKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBvdXRfZnJlZTsKKwkJCWlmIChuZXdfYmxrICE9IGdkdF9ibGspIHsKKwkJCQkvLyBYWFggZnJlZSBibG9jaworCQkJCXJldHZhbCA9IC0xOyAvLyBYWFgKKwkJCX0KKwkJCSovCisJCQlnZHRfZGlydHkgPSBkaW5kaXJfZGlydHkgPSBpbm9kZV9kaXJ0eSA9IDE7CisJCQltZW1zZXQoZ2R0X2J1ZiwgMCwgZnMtPmJsb2Nrc2l6ZSk7CisJCQlkaW5kaXJfYnVmW2dkdF9vZmZdID0gZ2R0X2JsazsKKwkJCWV4dDJmc19pYmxrX2FkZF9ibG9ja3MoZnMsICZpbm9kZSwgMSk7CisjaWZkZWYgUkVTX0dEVF9ERUJVRworCQkJcHJpbnRmKCJhZGRlZCBwcmltYXJ5IEdEVCBibG9jayAldSBhdCAldVsldV1cbiIsCisJCQkgICAgICAgZ2R0X2JsaywgZGluZGlyX2JsaywgZ2R0X29mZik7CisjZW5kaWYKKwkJfSBlbHNlIGlmIChkaW5kaXJfYnVmW2dkdF9vZmZdID09IGdkdF9ibGspIHsKKyNpZmRlZiBSRVNfR0RUX0RFQlVHCisJCQlwcmludGYoInJlYWRpbmcgcHJpbWFyeSBHRFQgYmxvY2sgJXVcbiIsIGdkdF9ibGspOworI2VuZGlmCisJCQlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbmRfYmxvY2soZnMsIGdkdF9ibGssIGdkdF9idWYpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIG91dF9kaW5kaXI7CisJCX0gZWxzZSB7CisjaWZkZWYgUkVTX0dEVF9ERUJVRworCQkJcHJpbnRmKCJiYWQgcHJpbWFyeSBHRFQgJXUgIT0gJXUgYXQgJXVbJXVdXG4iLAorCQkJICAgICAgIGRpbmRpcl9idWZbZ2R0X29mZl0sIGdkdF9ibGssZGluZGlyX2JsayxnZHRfb2ZmKTsKKyNlbmRpZgorCQkJcmV0dmFsID0gRVhUMl9FVF9SRVNJWkVfSU5PREVfQ09SUlVQVDsKKwkJCWdvdG8gb3V0X2RpbmRpcjsKKwkJfQorCisJCXdoaWxlICgoZ3JwID0gbGlzdF9iYWNrdXBzKGZzLCAmdGhyZWUsICZmaXZlLCAmc2V2ZW4pKSA8CisJCSAgICAgICBmcy0+Z3JvdXBfZGVzY19jb3VudCkgeworCQkJYmxrX3QgZXhwZWN0ID0gZ2R0X2JsayArIGdycCAqIHNiLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisKKwkJCWlmICghZ2R0X2J1ZltsYXN0XSkgeworI2lmZGVmIFJFU19HRFRfREVCVUcKKwkJCQlwcmludGYoImFkZGVkIGJhY2t1cCBHRFQgJXUgZ3JwICV1QCV1WyV1XVxuIiwKKwkJCQkgICAgICAgZXhwZWN0LCBncnAsIGdkdF9ibGssIGxhc3QpOworI2VuZGlmCisJCQkJZ2R0X2J1ZltsYXN0XSA9IGV4cGVjdDsKKwkJCQlleHQyZnNfaWJsa19hZGRfYmxvY2tzKGZzLCAmaW5vZGUsIDEpOworCQkJCWdkdF9kaXJ0eSA9IGlub2RlX2RpcnR5ID0gMTsKKwkJCX0gZWxzZSBpZiAoZ2R0X2J1ZltsYXN0XSAhPSBleHBlY3QpIHsKKyNpZmRlZiBSRVNfR0RUX0RFQlVHCisJCQkJcHJpbnRmKCJiYWQgYmFja3VwIEdEVCAldSAhPSAldSBhdCAldVsldV1cbiIsCisJCQkJICAgICAgIGdkdF9idWZbbGFzdF0sIGV4cGVjdCwgZ2R0X2JsaywgbGFzdCk7CisjZW5kaWYKKwkJCQlyZXR2YWwgPSBFWFQyX0VUX1JFU0laRV9JTk9ERV9DT1JSVVBUOworCQkJCWdvdG8gb3V0X2RpbmRpcjsKKwkJCX0KKwkJCWxhc3QrKzsKKwkJfQorCQlpZiAoZ2R0X2RpcnR5KSB7CisjaWZkZWYgUkVTX0dEVF9ERUJVRworCQkJcHJpbnRmKCJ3cml0aW5nIHByaW1hcnkgR0RUIGJsb2NrICV1XG4iLCBnZHRfYmxrKTsKKyNlbmRpZgorCQkJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2luZF9ibG9jayhmcywgZ2R0X2JsaywgZ2R0X2J1Zik7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gb3V0X2RpbmRpcjsKKwkJfQorCX0KKworb3V0X2RpbmRpcjoKKwlpZiAoZGluZGlyX2RpcnR5KSB7CisJCXJldHZhbDIgPSBleHQyZnNfd3JpdGVfaW5kX2Jsb2NrKGZzLCBkaW5kaXJfYmxrLCBkaW5kaXJfYnVmKTsKKwkJaWYgKCFyZXR2YWwpCisJCQlyZXR2YWwgPSByZXR2YWwyOworCX0KK291dF9pbm9kZToKKyNpZmRlZiBSRVNfR0RUX0RFQlVHCisJcHJpbnRmKCJpbm9kZS5pX2Jsb2NrcyA9ICV1LCBpX3NpemUgPSAldVxuIiwgaW5vZGUuaV9ibG9ja3MsCisJICAgICAgIGlub2RlLmlfc2l6ZSk7CisjZW5kaWYKKwlpZiAoaW5vZGVfZGlydHkpIHsKKwkJaW5vZGUuaV9hdGltZSA9IGlub2RlLmlfbXRpbWUgPSBmcy0+bm93ID8gZnMtPm5vdyA6IHRpbWUoMCk7CisJCXJldHZhbDIgPSBleHQyZnNfd3JpdGVfbmV3X2lub2RlKGZzLCBFWFQyX1JFU0laRV9JTk8sICZpbm9kZSk7CisJCWlmICghcmV0dmFsKQorCQkJcmV0dmFsID0gcmV0dmFsMjsKKwl9CitvdXRfZnJlZToKKwlleHQyZnNfZnJlZV9tZW0oJmRpbmRpcl9idWYpOworCXJldHVybiByZXR2YWw7Cit9CisKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvcndfYml0bWFwcy5jIGIvbGliL2V4dDJmcy9yd19iaXRtYXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA3ZWNkNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvcndfYml0bWFwcy5jCkBAIC0wLDAgKzEsNDAyIEBACisvKgorICogcndfYml0bWFwcy5jIC0tLSByb3V0aW5lcyB0byByZWFkIGFuZCB3cml0ZSB0aGUgIGlub2RlIGFuZCBibG9jayBiaXRtYXBzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NCwgMTk5NiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorI2luY2x1ZGUgImUyaW1hZ2UuaCIKKworc3RhdGljIGVycmNvZGVfdCB3cml0ZV9iaXRtYXBzKGV4dDJfZmlsc3lzIGZzLCBpbnQgZG9faW5vZGUsIGludCBkb19ibG9jaykKK3sKKwlkZ3JwX3QgCQlpOworCXVuc2lnbmVkIGludAlqOworCWludAkJYmxvY2tfbmJ5dGVzLCBpbm9kZV9uYnl0ZXM7CisJdW5zaWduZWQgaW50CW5iaXRzOworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJKmJsb2NrX2J1ZiA9IE5VTEwsICppbm9kZV9idWYgPSBOVUxMOworCWludAkJY3N1bV9mbGFnID0gMDsKKwlibGs2NF90CQlibGs7CisJYmxrNjRfdAkJYmxrX2l0ciA9IEVYVDJGU19CMkMoZnMsIGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKTsKKwlleHQyX2lub190CWlub19pdHIgPSAxOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmICghKGZzLT5mbGFncyAmIEVYVDJfRkxBR19SVykpCisJCXJldHVybiBFWFQyX0VUX1JPX0ZJTFNZUzsKKworCWlmIChFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pKQorCQljc3VtX2ZsYWcgPSAxOworCisJaW5vZGVfbmJ5dGVzID0gYmxvY2tfbmJ5dGVzID0gMDsKKwlpZiAoZG9fYmxvY2spIHsKKwkJYmxvY2tfbmJ5dGVzID0gRVhUMl9DTFVTVEVSU19QRVJfR1JPVVAoZnMtPnN1cGVyKSAvIDg7CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfYWxsb2NfYnVmKGZzLT5pbywgMCwgJmJsb2NrX2J1Zik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwkJbWVtc2V0KGJsb2NrX2J1ZiwgMHhmZiwgZnMtPmJsb2Nrc2l6ZSk7CisJfQorCWlmIChkb19pbm9kZSkgeworCQlpbm9kZV9uYnl0ZXMgPSAoc2l6ZV90KQorCQkJKChFWFQyX0lOT0RFU19QRVJfR1JPVVAoZnMtPnN1cGVyKSs3KSAvIDgpOworCQlyZXR2YWwgPSBpb19jaGFubmVsX2FsbG9jX2J1Zihmcy0+aW8sIDAsICZpbm9kZV9idWYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJCW1lbXNldChpbm9kZV9idWYsIDB4ZmYsIGZzLT5ibG9ja3NpemUpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCWlmICghZG9fYmxvY2spCisJCQlnb3RvIHNraXBfYmxvY2tfYml0bWFwOworCisJCWlmIChjc3VtX2ZsYWcgJiYgZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGksIEVYVDJfQkdfQkxPQ0tfVU5JTklUKQorCQkgICAgKQorCQkJZ290byBza2lwX3RoaXNfYmxvY2tfYml0bWFwOworCisJCXJldHZhbCA9IGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3JhbmdlMihmcy0+YmxvY2tfbWFwLAorCQkJCWJsa19pdHIsIGJsb2NrX25ieXRlcyA8PCAzLCBibG9ja19idWYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisKKwkJaWYgKGkgPT0gZnMtPmdyb3VwX2Rlc2NfY291bnQgLSAxKSB7CisJCQkvKiBGb3JjZSBiaXRtYXAgcGFkZGluZyBmb3IgdGhlIGxhc3QgZ3JvdXAgKi8KKwkJCW5iaXRzID0gRVhUMkZTX05VTV9CMkMoZnMsCisJCQkJKChleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikKKwkJCQkgIC0gKF9fdTY0KSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykKKwkJCQkgJSAoX191NjQpIEVYVDJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c3VwZXIpKSk7CisJCQlpZiAobmJpdHMpCisJCQkJZm9yIChqID0gbmJpdHM7IGogPCBmcy0+YmxvY2tzaXplICogODsgaisrKQorCQkJCQlleHQyZnNfc2V0X2JpdChqLCBibG9ja19idWYpOworCQl9CisJCWJsayA9IGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBpKTsKKwkJaWYgKGJsaykgeworCQkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIGJsaywgMSwKKwkJCQkJCQlibG9ja19idWYpOworCQkJaWYgKHJldHZhbCkgeworCQkJCXJldHZhbCA9IEVYVDJfRVRfQkxPQ0tfQklUTUFQX1dSSVRFOworCQkJCWdvdG8gZXJyb3V0OworCQkJfQorCQl9CisJc2tpcF90aGlzX2Jsb2NrX2JpdG1hcDoKKwkJYmxrX2l0ciArPSBibG9ja19uYnl0ZXMgPDwgMzsKKwlza2lwX2Jsb2NrX2JpdG1hcDoKKworCQlpZiAoIWRvX2lub2RlKQorCQkJY29udGludWU7CisKKwkJaWYgKGNzdW1fZmxhZyAmJiBleHQyZnNfYmdfZmxhZ3NfdGVzdChmcywgaSwgRVhUMl9CR19JTk9ERV9VTklOSVQpCisJCSAgICApCisJCQlnb3RvIHNraXBfdGhpc19pbm9kZV9iaXRtYXA7CisKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfcmFuZ2UyKGZzLT5pbm9kZV9tYXAsCisJCQkJaW5vX2l0ciwgaW5vZGVfbmJ5dGVzIDw8IDMsIGlub2RlX2J1Zik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKworCQlibGsgPSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSk7CisJCWlmIChibGspIHsKKwkJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBibGssIDEsCisJCQkJCQkgICAgICBpbm9kZV9idWYpOworCQkJaWYgKHJldHZhbCkgeworCQkJCXJldHZhbCA9IEVYVDJfRVRfSU5PREVfQklUTUFQX1dSSVRFOworCQkJCWdvdG8gZXJyb3V0OworCQkJfQorCQl9CisJc2tpcF90aGlzX2lub2RlX2JpdG1hcDoKKwkJaW5vX2l0ciArPSBpbm9kZV9uYnl0ZXMgPDwgMzsKKworCX0KKwlpZiAoZG9fYmxvY2spIHsKKwkJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfQkJfRElSVFk7CisJCWV4dDJmc19mcmVlX21lbSgmYmxvY2tfYnVmKTsKKwl9CisJaWYgKGRvX2lub2RlKSB7CisJCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX0lCX0RJUlRZOworCQlleHQyZnNfZnJlZV9tZW0oJmlub2RlX2J1Zik7CisJfQorCXJldHVybiAwOworZXJyb3V0OgorCWlmIChpbm9kZV9idWYpCisJCWV4dDJmc19mcmVlX21lbSgmaW5vZGVfYnVmKTsKKwlpZiAoYmxvY2tfYnVmKQorCQlleHQyZnNfZnJlZV9tZW0oJmJsb2NrX2J1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCBtYXJrX3VuaW5pdF9iZ19ncm91cF9ibG9ja3MoZXh0Ml9maWxzeXMgZnMpCit7CisJZGdycF90CQkJaTsKKwlibGs2NF90CQkJYmxrOworCWV4dDJmc19ibG9ja19iaXRtYXAJYm1hcCA9IGZzLT5ibG9ja19tYXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlpZiAoIWV4dDJmc19iZ19mbGFnc190ZXN0KGZzLCBpLCBFWFQyX0JHX0JMT0NLX1VOSU5JVCkpCisJCQljb250aW51ZTsKKworCQlleHQyZnNfcmVzZXJ2ZV9zdXBlcl9hbmRfYmdkKGZzLCBpLCBibWFwKTsKKworCQkvKgorCQkgKiBNYXJrIHRoZSBibG9ja3MgdXNlZCBmb3IgdGhlIGlub2RlIHRhYmxlCisJCSAqLworCQlibGsgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKTsKKwkJaWYgKGJsaykKKwkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIoYm1hcCwgYmxrLAorCQkJCQkJZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXApOworCisJCS8qCisJCSAqIE1hcmsgYmxvY2sgdXNlZCBmb3IgdGhlIGJsb2NrIGJpdG1hcAorCQkgKi8KKwkJYmxrID0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpOworCQlpZiAoYmxrKQorCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihibWFwLCBibGspOworCisJCS8qCisJCSAqIE1hcmsgYmxvY2sgdXNlZCBmb3IgdGhlIGlub2RlIGJpdG1hcAorCQkgKi8KKwkJYmxrID0gZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpOworCQlpZiAoYmxrKQorCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihibWFwLCBibGspOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCByZWFkX2JpdG1hcHMoZXh0Ml9maWxzeXMgZnMsIGludCBkb19pbm9kZSwgaW50IGRvX2Jsb2NrKQoreworCWRncnBfdCBpOworCWNoYXIgKmJsb2NrX2JpdG1hcCA9IDAsICppbm9kZV9iaXRtYXAgPSAwOworCWNoYXIgKmJ1ZjsKKwllcnJjb2RlX3QgcmV0dmFsOworCWludCBibG9ja19uYnl0ZXMgPSBFWFQyX0NMVVNURVJTX1BFUl9HUk9VUChmcy0+c3VwZXIpIC8gODsKKwlpbnQgaW5vZGVfbmJ5dGVzID0gRVhUMl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zdXBlcikgLyA4OworCWludCBjc3VtX2ZsYWcgPSAwOworCXVuc2lnbmVkIGludAljbnQ7CisJYmxrNjRfdAlibGs7CisJYmxrNjRfdAlibGtfaXRyID0gRVhUMkZTX0IyQyhmcywgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCWJsazY0X3QgICBibGtfY250OworCWV4dDJfaW5vX3QgaW5vX2l0ciA9IDE7CisJZXh0Ml9pbm9fdCBpbm9fY250OworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmICgoYmxvY2tfbmJ5dGVzID4gKGludCkgZnMtPmJsb2Nrc2l6ZSkgfHwKKwkgICAgKGlub2RlX25ieXRlcyA+IChpbnQpIGZzLT5ibG9ja3NpemUpKQorCQlyZXR1cm4gRVhUMl9FVF9DT1JSVVBUX1NVUEVSQkxPQ0s7CisKKwlmcy0+d3JpdGVfYml0bWFwcyA9IGV4dDJmc193cml0ZV9iaXRtYXBzOworCisJaWYgKEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkpCisJCWNzdW1fZmxhZyA9IDE7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzdHJsZW4oZnMtPmRldmljZV9uYW1lKSArIDgwLCAmYnVmKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWlmIChkb19ibG9jaykgeworCQlpZiAoZnMtPmJsb2NrX21hcCkKKwkJCWV4dDJmc19mcmVlX2Jsb2NrX2JpdG1hcChmcy0+YmxvY2tfbWFwKTsKKwkJc3RyY3B5KGJ1ZiwgImJsb2NrIGJpdG1hcCBmb3IgIik7CisJCXN0cmNhdChidWYsIGZzLT5kZXZpY2VfbmFtZSk7CisJCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9ibG9ja19iaXRtYXAoZnMsIGJ1ZiwgJmZzLT5ibG9ja19tYXApOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworCQlyZXR2YWwgPSBpb19jaGFubmVsX2FsbG9jX2J1Zihmcy0+aW8sIDAsICZibG9ja19iaXRtYXApOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworCX0gZWxzZQorCQlibG9ja19uYnl0ZXMgPSAwOworCWlmIChkb19pbm9kZSkgeworCQlpZiAoZnMtPmlub2RlX21hcCkKKwkJCWV4dDJmc19mcmVlX2lub2RlX2JpdG1hcChmcy0+aW5vZGVfbWFwKTsKKwkJc3RyY3B5KGJ1ZiwgImlub2RlIGJpdG1hcCBmb3IgIik7CisJCXN0cmNhdChidWYsIGZzLT5kZXZpY2VfbmFtZSk7CisJCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoZnMsIGJ1ZiwgJmZzLT5pbm9kZV9tYXApOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworCQlyZXR2YWwgPSBpb19jaGFubmVsX2FsbG9jX2J1Zihmcy0+aW8sIDAsICZpbm9kZV9iaXRtYXApOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworCX0gZWxzZQorCQlpbm9kZV9uYnl0ZXMgPSAwOworCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKworCWlmIChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfSU1BR0VfRklMRSkgeworCQlibGsgPSAoZnMtPmltYWdlX2hlYWRlci0+b2Zmc2V0X2lub2RlbWFwIC8gZnMtPmJsb2Nrc2l6ZSk7CisJCWlub19jbnQgPSBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50OworCQl3aGlsZSAoaW5vZGVfbmJ5dGVzID4gMCkgeworCQkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbWFnZV9pbywgYmxrKyssCisJCQkJCQkgICAgIDEsIGlub2RlX2JpdG1hcCk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gY2xlYW51cDsKKwkJCWNudCA9IGZzLT5ibG9ja3NpemUgPDwgMzsKKwkJCWlmIChjbnQgPiBpbm9fY250KQorCQkJCWNudCA9IGlub19jbnQ7CisJCQlyZXR2YWwgPSBleHQyZnNfc2V0X2lub2RlX2JpdG1hcF9yYW5nZTIoZnMtPmlub2RlX21hcCwKKwkJCQkJICAgICAgIGlub19pdHIsIGNudCwgaW5vZGVfYml0bWFwKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBjbGVhbnVwOworCQkJaW5vX2l0ciArPSBmcy0+YmxvY2tzaXplIDw8IDM7CisJCQlpbm9fY250IC09IGZzLT5ibG9ja3NpemUgPDwgMzsKKwkJCWlub2RlX25ieXRlcyAtPSBmcy0+YmxvY2tzaXplOworCQl9CisJCWJsayA9IChmcy0+aW1hZ2VfaGVhZGVyLT5vZmZzZXRfYmxvY2ttYXAgLworCQkgICAgICAgZnMtPmJsb2Nrc2l6ZSk7CisJCWJsa19jbnQgPSBFWFQyX0dST1VQU19UT19DTFVTVEVSUyhmcy0+c3VwZXIsCisJCQkJCQkgIGZzLT5ncm91cF9kZXNjX2NvdW50KTsKKwkJd2hpbGUgKGJsb2NrX25ieXRlcyA+IDApIHsKKwkJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW1hZ2VfaW8sIGJsaysrLAorCQkJCQkJICAgICAxLCBibG9ja19iaXRtYXApOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGNsZWFudXA7CisJCQljbnQgPSBmcy0+YmxvY2tzaXplIDw8IDM7CisJCQlpZiAoY250ID4gYmxrX2NudCkKKwkJCQljbnQgPSBibGtfY250OworCQkJcmV0dmFsID0gZXh0MmZzX3NldF9ibG9ja19iaXRtYXBfcmFuZ2UyKGZzLT5ibG9ja19tYXAsCisJCQkJICAgICAgIGJsa19pdHIsIGNudCwgYmxvY2tfYml0bWFwKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBjbGVhbnVwOworCQkJYmxrX2l0ciArPSBmcy0+YmxvY2tzaXplIDw8IDM7CisJCQlibGtfY250IC09IGZzLT5ibG9ja3NpemUgPDwgMzsKKwkJCWJsb2NrX25ieXRlcyAtPSBmcy0+YmxvY2tzaXplOworCQl9CisJCWdvdG8gc3VjY2Vzc19jbGVhbnVwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCWlmIChibG9ja19iaXRtYXApIHsKKwkJCWJsayA9IGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBpKTsKKwkJCWlmIChjc3VtX2ZsYWcgJiYKKwkJCSAgICBleHQyZnNfYmdfZmxhZ3NfdGVzdChmcywgaSwgRVhUMl9CR19CTE9DS19VTklOSVQpICYmCisJCQkgICAgZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV92ZXJpZnkoZnMsIGkpKQorCQkJCWJsayA9IDA7CisJCQlpZiAoYmxrKSB7CisJCQkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbywgYmxrLAorCQkJCQkJCSAgICAgICAxLCBibG9ja19iaXRtYXApOworCQkJCWlmIChyZXR2YWwpIHsKKwkJCQkJcmV0dmFsID0gRVhUMl9FVF9CTE9DS19CSVRNQVBfUkVBRDsKKwkJCQkJZ290byBjbGVhbnVwOworCQkJCX0KKwkJCX0gZWxzZQorCQkJCW1lbXNldChibG9ja19iaXRtYXAsIDAsIGJsb2NrX25ieXRlcyk7CisJCQljbnQgPSBibG9ja19uYnl0ZXMgPDwgMzsKKwkJCXJldHZhbCA9IGV4dDJmc19zZXRfYmxvY2tfYml0bWFwX3JhbmdlMihmcy0+YmxvY2tfbWFwLAorCQkJCQkgICAgICAgYmxrX2l0ciwgY250LCBibG9ja19iaXRtYXApOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGNsZWFudXA7CisJCQlibGtfaXRyICs9IGJsb2NrX25ieXRlcyA8PCAzOworCQl9CisJCWlmIChpbm9kZV9iaXRtYXApIHsKKwkJCWJsayA9IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKTsKKwkJCWlmIChjc3VtX2ZsYWcgJiYKKwkJCSAgICBleHQyZnNfYmdfZmxhZ3NfdGVzdChmcywgaSwgRVhUMl9CR19JTk9ERV9VTklOSVQpICYmCisJCQkgICAgZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV92ZXJpZnkoZnMsIGkpKQorCQkJCWJsayA9IDA7CisJCQlpZiAoYmxrKSB7CisJCQkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbywgYmxrLAorCQkJCQkJCSAgICAgICAxLCBpbm9kZV9iaXRtYXApOworCQkJCWlmIChyZXR2YWwpIHsKKwkJCQkJcmV0dmFsID0gRVhUMl9FVF9JTk9ERV9CSVRNQVBfUkVBRDsKKwkJCQkJZ290byBjbGVhbnVwOworCQkJCX0KKwkJCX0gZWxzZQorCQkJCW1lbXNldChpbm9kZV9iaXRtYXAsIDAsIGlub2RlX25ieXRlcyk7CisJCQljbnQgPSBpbm9kZV9uYnl0ZXMgPDwgMzsKKwkJCXJldHZhbCA9IGV4dDJmc19zZXRfaW5vZGVfYml0bWFwX3JhbmdlMihmcy0+aW5vZGVfbWFwLAorCQkJCQkgICAgICAgaW5vX2l0ciwgY250LCBpbm9kZV9iaXRtYXApOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGNsZWFudXA7CisJCQlpbm9faXRyICs9IGlub2RlX25ieXRlcyA8PCAzOworCQl9CisJfQorCisJLyogTWFyayBncm91cCBibG9ja3MgZm9yIGFueSBCTE9DS19VTklOSVQgZ3JvdXBzICovCisJaWYgKGRvX2Jsb2NrKSB7CisJCXJldHZhbCA9IG1hcmtfdW5pbml0X2JnX2dyb3VwX2Jsb2Nrcyhmcyk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJfQorCitzdWNjZXNzX2NsZWFudXA6CisJaWYgKGlub2RlX2JpdG1hcCkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZpbm9kZV9iaXRtYXApOworCWlmIChibG9ja19iaXRtYXApCisJCWV4dDJmc19mcmVlX21lbSgmYmxvY2tfYml0bWFwKTsKKwlyZXR1cm4gMDsKKworY2xlYW51cDoKKwlpZiAoZG9fYmxvY2spIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZmcy0+YmxvY2tfbWFwKTsKKwkJZnMtPmJsb2NrX21hcCA9IDA7CisJfQorCWlmIChkb19pbm9kZSkgeworCQlleHQyZnNfZnJlZV9tZW0oJmZzLT5pbm9kZV9tYXApOworCQlmcy0+aW5vZGVfbWFwID0gMDsKKwl9CisJaWYgKGlub2RlX2JpdG1hcCkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZpbm9kZV9iaXRtYXApOworCWlmIChibG9ja19iaXRtYXApCisJCWV4dDJmc19mcmVlX21lbSgmYmxvY2tfYml0bWFwKTsKKwlpZiAoYnVmKQorCQlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGV4dDJmc19yZWFkX2lub2RlX2JpdG1hcChleHQyX2ZpbHN5cyBmcykKK3sKKwlyZXR1cm4gcmVhZF9iaXRtYXBzKGZzLCAxLCAwKTsKK30KKworZXJyY29kZV90IGV4dDJmc19yZWFkX2Jsb2NrX2JpdG1hcChleHQyX2ZpbHN5cyBmcykKK3sKKwlyZXR1cm4gcmVhZF9iaXRtYXBzKGZzLCAwLCAxKTsKK30KKworZXJyY29kZV90IGV4dDJmc193cml0ZV9pbm9kZV9iaXRtYXAoZXh0Ml9maWxzeXMgZnMpCit7CisJcmV0dXJuIHdyaXRlX2JpdG1hcHMoZnMsIDEsIDApOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2Jsb2NrX2JpdG1hcCAoZXh0Ml9maWxzeXMgZnMpCit7CisJcmV0dXJuIHdyaXRlX2JpdG1hcHMoZnMsIDAsIDEpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3JlYWRfYml0bWFwcyhleHQyX2ZpbHN5cyBmcykKK3sKKwlpZiAoZnMtPmlub2RlX21hcCAmJiBmcy0+YmxvY2tfbWFwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiByZWFkX2JpdG1hcHMoZnMsICFmcy0+aW5vZGVfbWFwLCAhZnMtPmJsb2NrX21hcCk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfd3JpdGVfYml0bWFwcyhleHQyX2ZpbHN5cyBmcykKK3sKKwlpbnQgZG9faW5vZGUgPSBmcy0+aW5vZGVfbWFwICYmIGV4dDJmc190ZXN0X2liX2RpcnR5KGZzKTsKKwlpbnQgZG9fYmxvY2sgPSBmcy0+YmxvY2tfbWFwICYmIGV4dDJmc190ZXN0X2JiX2RpcnR5KGZzKTsKKworCWlmICghZG9faW5vZGUgJiYgIWRvX2Jsb2NrKQorCQlyZXR1cm4gMDsKKworCXJldHVybiB3cml0ZV9iaXRtYXBzKGZzLCBkb19pbm9kZSwgZG9fYmxvY2spOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9zd2FwZnMuYyBiL2xpYi9leHQyZnMvc3dhcGZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE3Yjc2OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvc3dhcGZzLmMKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBzd2FwZnMuYyAtLS0gc3dhcCBleHQyIGZpbGVzeXN0ZW0gZGF0YSBzdHJ1Y3R1cmVzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAyMDAyIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJfZXh0X2F0dHIuaD4KKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgordm9pZCBleHQyZnNfc3dhcF9zdXBlcihzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqIHNiKQoreworICAJaW50IGk7CisJc2ItPnNfaW5vZGVzX2NvdW50ID0gZXh0MmZzX3N3YWIzMihzYi0+c19pbm9kZXNfY291bnQpOworCXNiLT5zX2Jsb2Nrc19jb3VudCA9IGV4dDJmc19zd2FiMzIoc2ItPnNfYmxvY2tzX2NvdW50KTsKKwlzYi0+c19yX2Jsb2Nrc19jb3VudCA9IGV4dDJmc19zd2FiMzIoc2ItPnNfcl9ibG9ja3NfY291bnQpOworCXNiLT5zX2ZyZWVfYmxvY2tzX2NvdW50ID0gZXh0MmZzX3N3YWIzMihzYi0+c19mcmVlX2Jsb2Nrc19jb3VudCk7CisJc2ItPnNfZnJlZV9pbm9kZXNfY291bnQgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2ZyZWVfaW5vZGVzX2NvdW50KTsKKwlzYi0+c19maXJzdF9kYXRhX2Jsb2NrID0gZXh0MmZzX3N3YWIzMihzYi0+c19maXJzdF9kYXRhX2Jsb2NrKTsKKwlzYi0+c19sb2dfYmxvY2tfc2l6ZSA9IGV4dDJmc19zd2FiMzIoc2ItPnNfbG9nX2Jsb2NrX3NpemUpOworCXNiLT5zX2xvZ19jbHVzdGVyX3NpemUgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2xvZ19jbHVzdGVyX3NpemUpOworCXNiLT5zX2Jsb2Nrc19wZXJfZ3JvdXAgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2Jsb2Nrc19wZXJfZ3JvdXApOworCXNiLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCA9IGV4dDJmc19zd2FiMzIoc2ItPnNfY2x1c3RlcnNfcGVyX2dyb3VwKTsKKwlzYi0+c19pbm9kZXNfcGVyX2dyb3VwID0gZXh0MmZzX3N3YWIzMihzYi0+c19pbm9kZXNfcGVyX2dyb3VwKTsKKwlzYi0+c19tdGltZSA9IGV4dDJmc19zd2FiMzIoc2ItPnNfbXRpbWUpOworCXNiLT5zX3d0aW1lID0gZXh0MmZzX3N3YWIzMihzYi0+c193dGltZSk7CisJc2ItPnNfbW50X2NvdW50ID0gZXh0MmZzX3N3YWIxNihzYi0+c19tbnRfY291bnQpOworCXNiLT5zX21heF9tbnRfY291bnQgPSBleHQyZnNfc3dhYjE2KHNiLT5zX21heF9tbnRfY291bnQpOworCXNiLT5zX21hZ2ljID0gZXh0MmZzX3N3YWIxNihzYi0+c19tYWdpYyk7CisJc2ItPnNfc3RhdGUgPSBleHQyZnNfc3dhYjE2KHNiLT5zX3N0YXRlKTsKKwlzYi0+c19lcnJvcnMgPSBleHQyZnNfc3dhYjE2KHNiLT5zX2Vycm9ycyk7CisJc2ItPnNfbWlub3JfcmV2X2xldmVsID0gZXh0MmZzX3N3YWIxNihzYi0+c19taW5vcl9yZXZfbGV2ZWwpOworCXNiLT5zX2xhc3RjaGVjayA9IGV4dDJmc19zd2FiMzIoc2ItPnNfbGFzdGNoZWNrKTsKKwlzYi0+c19jaGVja2ludGVydmFsID0gZXh0MmZzX3N3YWIzMihzYi0+c19jaGVja2ludGVydmFsKTsKKwlzYi0+c19jcmVhdG9yX29zID0gZXh0MmZzX3N3YWIzMihzYi0+c19jcmVhdG9yX29zKTsKKwlzYi0+c19yZXZfbGV2ZWwgPSBleHQyZnNfc3dhYjMyKHNiLT5zX3Jldl9sZXZlbCk7CisJc2ItPnNfZGVmX3Jlc3VpZCA9IGV4dDJmc19zd2FiMTYoc2ItPnNfZGVmX3Jlc3VpZCk7CisJc2ItPnNfZGVmX3Jlc2dpZCA9IGV4dDJmc19zd2FiMTYoc2ItPnNfZGVmX3Jlc2dpZCk7CisJc2ItPnNfZmlyc3RfaW5vID0gZXh0MmZzX3N3YWIzMihzYi0+c19maXJzdF9pbm8pOworCXNiLT5zX2lub2RlX3NpemUgPSBleHQyZnNfc3dhYjE2KHNiLT5zX2lub2RlX3NpemUpOworCXNiLT5zX2Jsb2NrX2dyb3VwX25yID0gZXh0MmZzX3N3YWIxNihzYi0+c19ibG9ja19ncm91cF9ucik7CisJc2ItPnNfZmVhdHVyZV9jb21wYXQgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2ZlYXR1cmVfY29tcGF0KTsKKwlzYi0+c19mZWF0dXJlX2luY29tcGF0ID0gZXh0MmZzX3N3YWIzMihzYi0+c19mZWF0dXJlX2luY29tcGF0KTsKKwlzYi0+c19mZWF0dXJlX3JvX2NvbXBhdCA9IGV4dDJmc19zd2FiMzIoc2ItPnNfZmVhdHVyZV9yb19jb21wYXQpOworCXNiLT5zX2FsZ29yaXRobV91c2FnZV9iaXRtYXAgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2FsZ29yaXRobV91c2FnZV9iaXRtYXApOworCXNiLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3MgPSBleHQyZnNfc3dhYjE2KHNiLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3MpOworCXNiLT5zX2pvdXJuYWxfaW51bSA9IGV4dDJmc19zd2FiMzIoc2ItPnNfam91cm5hbF9pbnVtKTsKKwlzYi0+c19qb3VybmFsX2RldiA9IGV4dDJmc19zd2FiMzIoc2ItPnNfam91cm5hbF9kZXYpOworCXNiLT5zX2xhc3Rfb3JwaGFuID0gZXh0MmZzX3N3YWIzMihzYi0+c19sYXN0X29ycGhhbik7CisJc2ItPnNfZGVzY19zaXplID0gZXh0MmZzX3N3YWIxNihzYi0+c19kZXNjX3NpemUpOworCXNiLT5zX2RlZmF1bHRfbW91bnRfb3B0cyA9IGV4dDJmc19zd2FiMzIoc2ItPnNfZGVmYXVsdF9tb3VudF9vcHRzKTsKKwlzYi0+c19maXJzdF9tZXRhX2JnID0gZXh0MmZzX3N3YWIzMihzYi0+c19maXJzdF9tZXRhX2JnKTsKKwlzYi0+c19ta2ZzX3RpbWUgPSBleHQyZnNfc3dhYjMyKHNiLT5zX21rZnNfdGltZSk7CisJc2ItPnNfYmxvY2tzX2NvdW50X2hpID0gZXh0MmZzX3N3YWIzMihzYi0+c19ibG9ja3NfY291bnRfaGkpOworCXNiLT5zX3JfYmxvY2tzX2NvdW50X2hpID0gZXh0MmZzX3N3YWIzMihzYi0+c19yX2Jsb2Nrc19jb3VudF9oaSk7CisJc2ItPnNfZnJlZV9ibG9ja3NfaGkgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2ZyZWVfYmxvY2tzX2hpKTsKKwlzYi0+c19taW5fZXh0cmFfaXNpemUgPSBleHQyZnNfc3dhYjE2KHNiLT5zX21pbl9leHRyYV9pc2l6ZSk7CisJc2ItPnNfd2FudF9leHRyYV9pc2l6ZSA9IGV4dDJmc19zd2FiMTYoc2ItPnNfd2FudF9leHRyYV9pc2l6ZSk7CisJc2ItPnNfZmxhZ3MgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2ZsYWdzKTsKKwlzYi0+c19tbXBfdXBkYXRlX2ludGVydmFsID0gZXh0MmZzX3N3YWIxNihzYi0+c19tbXBfdXBkYXRlX2ludGVydmFsKTsKKwlzYi0+c19tbXBfYmxvY2sgPSBleHQyZnNfc3dhYjY0KHNiLT5zX21tcF9ibG9jayk7CisJc2ItPnNfa2J5dGVzX3dyaXR0ZW4gPSBleHQyZnNfc3dhYjY0KHNiLT5zX2tieXRlc193cml0dGVuKTsKKwlzYi0+c19zbmFwc2hvdF9pbnVtID0gZXh0MmZzX3N3YWIzMihzYi0+c19zbmFwc2hvdF9pbnVtKTsKKwlzYi0+c19zbmFwc2hvdF9pZCA9IGV4dDJmc19zd2FiMzIoc2ItPnNfc25hcHNob3RfaWQpOworCXNiLT5zX3NuYXBzaG90X3JfYmxvY2tzX2NvdW50ID0KKwkJZXh0MmZzX3N3YWI2NChzYi0+c19zbmFwc2hvdF9yX2Jsb2Nrc19jb3VudCk7CisJc2ItPnNfc25hcHNob3RfbGlzdCA9IGV4dDJmc19zd2FiMzIoc2ItPnNfc25hcHNob3RfbGlzdCk7CisJc2ItPnNfdXNyX3F1b3RhX2ludW0gPSBleHQyZnNfc3dhYjMyKHNiLT5zX3Vzcl9xdW90YV9pbnVtKTsKKwlzYi0+c19ncnBfcXVvdGFfaW51bSA9IGV4dDJmc19zd2FiMzIoc2ItPnNfZ3JwX3F1b3RhX2ludW0pOworCXNiLT5zX292ZXJoZWFkX2Jsb2NrcyA9IGV4dDJmc19zd2FiMzIoc2ItPnNfb3ZlcmhlYWRfYmxvY2tzKTsKKwlzYi0+c19jaGVja3N1bSA9IGV4dDJmc19zd2FiMzIoc2ItPnNfY2hlY2tzdW0pOworCisJZm9yIChpPTA7IGkgPCA0OyBpKyspCisJCXNiLT5zX2hhc2hfc2VlZFtpXSA9IGV4dDJmc19zd2FiMzIoc2ItPnNfaGFzaF9zZWVkW2ldKTsKKworCS8qIGlmIGpvdXJuYWwgYmFja3VwIGlzIGZvciBhIHZhbGlkIGV4dGVudC1iYXNlZCBqb3VybmFsLi4uICovCisJaWYgKGV4dDJmc19leHRlbnRfaGVhZGVyX3ZlcmlmeShzYi0+c19qbmxfYmxvY2tzLAorCQkJCQlzaXplb2Yoc2ItPnNfam5sX2Jsb2NrcykpID09IDApIHsKKwkJLyogLi4uIHN3YXAgb25seSB0aGUgam91cm5hbCBpX3NpemUgYW5kIGlfc2l6ZV9oaWdoLAorCQkgKiBhbmQgdGhlIGV4dGVudCBkYXRhIGlzIG5vdCBzd2FwcGVkIG9uIHJlYWQgKi8KKwkJaSA9IDE1OworCX0gZWxzZSB7CisJCS8qIGRpcmVjdC9pbmRpcmVjdCBqb3VybmFsOiBzd2FwIGl0IGFsbCAqLworCQlpID0gMDsKKwl9CisJZm9yICg7IGkgPCAxNzsgaSsrKQorCQlzYi0+c19qbmxfYmxvY2tzW2ldID0gZXh0MmZzX3N3YWIzMihzYi0+c19qbmxfYmxvY2tzW2ldKTsKKwlzYi0+c19iYWNrdXBfYmdzWzBdID0gZXh0MmZzX3N3YWIzMihzYi0+c19iYWNrdXBfYmdzWzBdKTsKKwlzYi0+c19iYWNrdXBfYmdzWzFdID0gZXh0MmZzX3N3YWIzMihzYi0+c19iYWNrdXBfYmdzWzFdKTsKK30KKwordm9pZCBleHQyZnNfc3dhcF9ncm91cF9kZXNjMihleHQyX2ZpbHN5cyBmcywgc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqZ2RwKQoreworCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcDQgPSAoc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqKWdkcDsKKworCS8qIERvIHRoZSAzMi1iaXQgcGFydHMgZmlyc3QgKi8KKwlnZHAtPmJnX2Jsb2NrX2JpdG1hcCA9IGV4dDJmc19zd2FiMzIoZ2RwLT5iZ19ibG9ja19iaXRtYXApOworCWdkcC0+YmdfaW5vZGVfYml0bWFwID0gZXh0MmZzX3N3YWIzMihnZHAtPmJnX2lub2RlX2JpdG1hcCk7CisJZ2RwLT5iZ19pbm9kZV90YWJsZSA9IGV4dDJmc19zd2FiMzIoZ2RwLT5iZ19pbm9kZV90YWJsZSk7CisJZ2RwLT5iZ19mcmVlX2Jsb2Nrc19jb3VudCA9IGV4dDJmc19zd2FiMTYoZ2RwLT5iZ19mcmVlX2Jsb2Nrc19jb3VudCk7CisJZ2RwLT5iZ19mcmVlX2lub2Rlc19jb3VudCA9IGV4dDJmc19zd2FiMTYoZ2RwLT5iZ19mcmVlX2lub2Rlc19jb3VudCk7CisJZ2RwLT5iZ191c2VkX2RpcnNfY291bnQgPSBleHQyZnNfc3dhYjE2KGdkcC0+YmdfdXNlZF9kaXJzX2NvdW50KTsKKwlnZHAtPmJnX2ZsYWdzID0gZXh0MmZzX3N3YWIxNihnZHAtPmJnX2ZsYWdzKTsKKwlnZHAtPmJnX2V4Y2x1ZGVfYml0bWFwX2xvID0gZXh0MmZzX3N3YWIzMihnZHAtPmJnX2V4Y2x1ZGVfYml0bWFwX2xvKTsKKwlnZHAtPmJnX2Jsb2NrX2JpdG1hcF9jc3VtX2xvID0KKwkJZXh0MmZzX3N3YWIxNihnZHAtPmJnX2Jsb2NrX2JpdG1hcF9jc3VtX2xvKTsKKwlnZHAtPmJnX2lub2RlX2JpdG1hcF9jc3VtX2xvID0KKwkJZXh0MmZzX3N3YWIxNihnZHAtPmJnX2lub2RlX2JpdG1hcF9jc3VtX2xvKTsKKwlnZHAtPmJnX2l0YWJsZV91bnVzZWQgPSBleHQyZnNfc3dhYjE2KGdkcC0+YmdfaXRhYmxlX3VudXNlZCk7CisJZ2RwLT5iZ19jaGVja3N1bSA9IGV4dDJmc19zd2FiMTYoZ2RwLT5iZ19jaGVja3N1bSk7CisJLyogSWYgd2UncmUgMzItYml0LCB3ZSdyZSBkb25lICovCisJaWYgKGZzID09IE5VTEwgfHwgRVhUMl9ERVNDX1NJWkUoZnMtPnN1cGVyKSA8IEVYVDJfTUlOX0RFU0NfU0laRV82NEJJVCkKKwkJcmV0dXJuOworCisJLyogU3dhcCB0aGUgNjQtYml0IHBhcnRzICovCisJZ2RwNC0+YmdfYmxvY2tfYml0bWFwX2hpID0gZXh0MmZzX3N3YWIzMihnZHA0LT5iZ19ibG9ja19iaXRtYXBfaGkpOworCWdkcDQtPmJnX2lub2RlX2JpdG1hcF9oaSA9IGV4dDJmc19zd2FiMzIoZ2RwNC0+YmdfaW5vZGVfYml0bWFwX2hpKTsKKwlnZHA0LT5iZ19pbm9kZV90YWJsZV9oaSA9IGV4dDJmc19zd2FiMzIoZ2RwNC0+YmdfaW5vZGVfdGFibGVfaGkpOworCWdkcDQtPmJnX2ZyZWVfYmxvY2tzX2NvdW50X2hpID0KKwkJZXh0MmZzX3N3YWIxNihnZHA0LT5iZ19mcmVlX2Jsb2Nrc19jb3VudF9oaSk7CisJZ2RwNC0+YmdfZnJlZV9pbm9kZXNfY291bnRfaGkgPQorCQlleHQyZnNfc3dhYjE2KGdkcDQtPmJnX2ZyZWVfaW5vZGVzX2NvdW50X2hpKTsKKwlnZHA0LT5iZ191c2VkX2RpcnNfY291bnRfaGkgPQorCQlleHQyZnNfc3dhYjE2KGdkcDQtPmJnX3VzZWRfZGlyc19jb3VudF9oaSk7CisJZ2RwNC0+YmdfaXRhYmxlX3VudXNlZF9oaSA9IGV4dDJmc19zd2FiMTYoZ2RwNC0+YmdfaXRhYmxlX3VudXNlZF9oaSk7CisJZ2RwNC0+YmdfZXhjbHVkZV9iaXRtYXBfaGkgPSBleHQyZnNfc3dhYjE2KGdkcDQtPmJnX2V4Y2x1ZGVfYml0bWFwX2hpKTsKKwlnZHA0LT5iZ19ibG9ja19iaXRtYXBfY3N1bV9oaSA9CisJCWV4dDJmc19zd2FiMTYoZ2RwNC0+YmdfYmxvY2tfYml0bWFwX2NzdW1faGkpOworCWdkcDQtPmJnX2lub2RlX2JpdG1hcF9jc3VtX2hpID0KKwkJZXh0MmZzX3N3YWIxNihnZHA0LT5iZ19pbm9kZV9iaXRtYXBfY3N1bV9oaSk7Cit9CisKK3ZvaWQgZXh0MmZzX3N3YXBfZ3JvdXBfZGVzYyhzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjICpnZHApCit7CisJZXh0MmZzX3N3YXBfZ3JvdXBfZGVzYzIoMCwgZ2RwKTsKK30KKworCit2b2lkIGV4dDJmc19zd2FwX2V4dF9hdHRyX2hlYWRlcihzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9oZWFkZXIgKnRvX2hlYWRlciwKKwkJCQkgc3RydWN0IGV4dDJfZXh0X2F0dHJfaGVhZGVyICpmcm9tX2hlYWRlcikKK3sKKwlpbnQgbjsKKworCXRvX2hlYWRlci0+aF9tYWdpYyAgICA9IGV4dDJmc19zd2FiMzIoZnJvbV9oZWFkZXItPmhfbWFnaWMpOworCXRvX2hlYWRlci0+aF9ibG9ja3MgICA9IGV4dDJmc19zd2FiMzIoZnJvbV9oZWFkZXItPmhfYmxvY2tzKTsKKwl0b19oZWFkZXItPmhfcmVmY291bnQgPSBleHQyZnNfc3dhYjMyKGZyb21faGVhZGVyLT5oX3JlZmNvdW50KTsKKwl0b19oZWFkZXItPmhfaGFzaCAgICAgPSBleHQyZnNfc3dhYjMyKGZyb21faGVhZGVyLT5oX2hhc2gpOworCWZvciAobiA9IDA7IG4gPCA0OyBuKyspCisJCXRvX2hlYWRlci0+aF9yZXNlcnZlZFtuXSA9CisJCQlleHQyZnNfc3dhYjMyKGZyb21faGVhZGVyLT5oX3Jlc2VydmVkW25dKTsKK30KKwordm9pZCBleHQyZnNfc3dhcF9leHRfYXR0cl9lbnRyeShzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9lbnRyeSAqdG9fZW50cnksCisJCQkJc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkgKmZyb21fZW50cnkpCit7CisJdG9fZW50cnktPmVfdmFsdWVfb2ZmcyAgPSBleHQyZnNfc3dhYjE2KGZyb21fZW50cnktPmVfdmFsdWVfb2Zmcyk7CisJdG9fZW50cnktPmVfdmFsdWVfYmxvY2sgPSBleHQyZnNfc3dhYjMyKGZyb21fZW50cnktPmVfdmFsdWVfYmxvY2spOworCXRvX2VudHJ5LT5lX3ZhbHVlX3NpemUgID0gZXh0MmZzX3N3YWIzMihmcm9tX2VudHJ5LT5lX3ZhbHVlX3NpemUpOworCXRvX2VudHJ5LT5lX2hhc2gJPSBleHQyZnNfc3dhYjMyKGZyb21fZW50cnktPmVfaGFzaCk7Cit9CisKK3ZvaWQgZXh0MmZzX3N3YXBfZXh0X2F0dHIoY2hhciAqdG8sIGNoYXIgKmZyb20sIGludCBidWZzaXplLCBpbnQgaGFzX2hlYWRlcikKK3sKKwlzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9oZWFkZXIgKmZyb21faGVhZGVyID0KKwkJKHN0cnVjdCBleHQyX2V4dF9hdHRyX2hlYWRlciAqKWZyb207CisJc3RydWN0IGV4dDJfZXh0X2F0dHJfaGVhZGVyICp0b19oZWFkZXIgPQorCQkoc3RydWN0IGV4dDJfZXh0X2F0dHJfaGVhZGVyICopdG87CisJc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkgKmZyb21fZW50cnksICp0b19lbnRyeTsKKwljaGFyICpmcm9tX2VuZCA9IChjaGFyICopZnJvbV9oZWFkZXIgKyBidWZzaXplOworCisJaWYgKHRvX2hlYWRlciAhPSBmcm9tX2hlYWRlcikKKwkJbWVtY3B5KHRvX2hlYWRlciwgZnJvbV9oZWFkZXIsIGJ1ZnNpemUpOworCisJaWYgKGhhc19oZWFkZXIpIHsKKwkJZXh0MmZzX3N3YXBfZXh0X2F0dHJfaGVhZGVyKHRvX2hlYWRlciwgZnJvbV9oZWFkZXIpOworCisJCWZyb21fZW50cnkgPSAoc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkgKikoZnJvbV9oZWFkZXIrMSk7CisJCXRvX2VudHJ5ICAgPSAoc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkgKikodG9faGVhZGVyKzEpOworCX0gZWxzZSB7CisJCWZyb21fZW50cnkgPSAoc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkgKilmcm9tX2hlYWRlcjsKKwkJdG9fZW50cnkgICA9IChzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9lbnRyeSAqKXRvX2hlYWRlcjsKKwl9CisKKwl3aGlsZSAoKGNoYXIgKilmcm9tX2VudHJ5IDwgZnJvbV9lbmQgJiYgKihfX3UzMiAqKWZyb21fZW50cnkpIHsKKwkJZXh0MmZzX3N3YXBfZXh0X2F0dHJfZW50cnkodG9fZW50cnksIGZyb21fZW50cnkpOworCQlmcm9tX2VudHJ5ID0gRVhUMl9FWFRfQVRUUl9ORVhUKGZyb21fZW50cnkpOworCQl0b19lbnRyeSAgID0gRVhUMl9FWFRfQVRUUl9ORVhUKHRvX2VudHJ5KTsKKwl9Cit9CisKK3ZvaWQgZXh0MmZzX3N3YXBfaW5vZGVfZnVsbChleHQyX2ZpbHN5cyBmcywgc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgKnQsCisJCQkgICAgc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgKmYsIGludCBob3N0b3JkZXIsCisJCQkgICAgaW50IGJ1ZnNpemUpCit7CisJdW5zaWduZWQgaSwgaGFzX2RhdGFfYmxvY2tzLCBleHRyYV9pc2l6ZSwgYXR0cl9tYWdpYzsKKwlpbnQgaGFzX2V4dGVudHMgPSAwOworCWludCBpc2xuayA9IDA7CisJX191MzIgKmVhZiwgKmVhdDsKKworCWlmIChob3N0b3JkZXIgJiYgTElOVVhfU19JU0xOSyhmLT5pX21vZGUpKQorCQlpc2xuayA9IDE7CisJdC0+aV9tb2RlID0gZXh0MmZzX3N3YWIxNihmLT5pX21vZGUpOworCWlmICghaG9zdG9yZGVyICYmIExJTlVYX1NfSVNMTksodC0+aV9tb2RlKSkKKwkJaXNsbmsgPSAxOworCXQtPmlfdWlkID0gZXh0MmZzX3N3YWIxNihmLT5pX3VpZCk7CisJdC0+aV9zaXplID0gZXh0MmZzX3N3YWIzMihmLT5pX3NpemUpOworCXQtPmlfYXRpbWUgPSBleHQyZnNfc3dhYjMyKGYtPmlfYXRpbWUpOworCXQtPmlfY3RpbWUgPSBleHQyZnNfc3dhYjMyKGYtPmlfY3RpbWUpOworCXQtPmlfbXRpbWUgPSBleHQyZnNfc3dhYjMyKGYtPmlfbXRpbWUpOworCXQtPmlfZHRpbWUgPSBleHQyZnNfc3dhYjMyKGYtPmlfZHRpbWUpOworCXQtPmlfZ2lkID0gZXh0MmZzX3N3YWIxNihmLT5pX2dpZCk7CisJdC0+aV9saW5rc19jb3VudCA9IGV4dDJmc19zd2FiMTYoZi0+aV9saW5rc19jb3VudCk7CisJdC0+aV9maWxlX2FjbCA9IGV4dDJmc19zd2FiMzIoZi0+aV9maWxlX2FjbCk7CisJaWYgKGhvc3RvcmRlcikKKwkJaGFzX2RhdGFfYmxvY2tzID0gZXh0MmZzX2lub2RlX2RhdGFfYmxvY2tzKGZzLAorCQkJCQkgICAoc3RydWN0IGV4dDJfaW5vZGUgKikgZik7CisJdC0+aV9ibG9ja3MgPSBleHQyZnNfc3dhYjMyKGYtPmlfYmxvY2tzKTsKKwlpZiAoIWhvc3RvcmRlcikKKwkJaGFzX2RhdGFfYmxvY2tzID0gZXh0MmZzX2lub2RlX2RhdGFfYmxvY2tzKGZzLAorCQkJCQkgICAoc3RydWN0IGV4dDJfaW5vZGUgKikgdCk7CisJaWYgKGhvc3RvcmRlciAmJiAoZi0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkpCisJCWhhc19leHRlbnRzID0gMTsKKwl0LT5pX2ZsYWdzID0gZXh0MmZzX3N3YWIzMihmLT5pX2ZsYWdzKTsKKwlpZiAoIWhvc3RvcmRlciAmJiAodC0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkpCisJCWhhc19leHRlbnRzID0gMTsKKwl0LT5pX2Rpcl9hY2wgPSBleHQyZnNfc3dhYjMyKGYtPmlfZGlyX2FjbCk7CisJLyogZXh0ZW50IGRhdGEgYXJlIHN3YXBwZWQgb24gYWNjZXNzLCBub3QgaGVyZSAqLworCWlmICghaGFzX2V4dGVudHMgJiYgKCFpc2xuayB8fCBoYXNfZGF0YV9ibG9ja3MpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBFWFQyX05fQkxPQ0tTOyBpKyspCisJCQl0LT5pX2Jsb2NrW2ldID0gZXh0MmZzX3N3YWIzMihmLT5pX2Jsb2NrW2ldKTsKKwl9IGVsc2UgaWYgKHQgIT0gZikgeworCQlmb3IgKGkgPSAwOyBpIDwgRVhUMl9OX0JMT0NLUzsgaSsrKQorCQkJdC0+aV9ibG9ja1tpXSA9IGYtPmlfYmxvY2tbaV07CisJfQorCXQtPmlfZ2VuZXJhdGlvbiA9IGV4dDJmc19zd2FiMzIoZi0+aV9nZW5lcmF0aW9uKTsKKwl0LT5pX2ZhZGRyID0gZXh0MmZzX3N3YWIzMihmLT5pX2ZhZGRyKTsKKworCXN3aXRjaCAoZnMtPnN1cGVyLT5zX2NyZWF0b3Jfb3MpIHsKKwljYXNlIEVYVDJfT1NfTElOVVg6CisJCXQtPm9zZDEubGludXgxLmxfaV92ZXJzaW9uID0KKwkJCWV4dDJmc19zd2FiMzIoZi0+b3NkMS5saW51eDEubF9pX3ZlcnNpb24pOworCQl0LT5vc2QyLmxpbnV4Mi5sX2lfYmxvY2tzX2hpID0KKwkJCWV4dDJmc19zd2FiMTYoZi0+b3NkMi5saW51eDIubF9pX2Jsb2Nrc19oaSk7CisJCXQtPm9zZDIubGludXgyLmxfaV9maWxlX2FjbF9oaWdoID0KKwkJCWV4dDJmc19zd2FiMTYoZi0+b3NkMi5saW51eDIubF9pX2ZpbGVfYWNsX2hpZ2gpOworCQl0LT5vc2QyLmxpbnV4Mi5sX2lfdWlkX2hpZ2ggPQorCQkgIGV4dDJmc19zd2FiMTYgKGYtPm9zZDIubGludXgyLmxfaV91aWRfaGlnaCk7CisJCXQtPm9zZDIubGludXgyLmxfaV9naWRfaGlnaCA9CisJCSAgZXh0MmZzX3N3YWIxNiAoZi0+b3NkMi5saW51eDIubF9pX2dpZF9oaWdoKTsKKwkJdC0+b3NkMi5saW51eDIubF9pX2NoZWNrc3VtX2xvID0KKwkJCWV4dDJmc19zd2FiMTYoZi0+b3NkMi5saW51eDIubF9pX2NoZWNrc3VtX2xvKTsKKwkJYnJlYWs7CisJY2FzZSBFWFQyX09TX0hVUkQ6CisJCXQtPm9zZDEuaHVyZDEuaF9pX3RyYW5zbGF0b3IgPQorCQkgIGV4dDJmc19zd2FiMzIgKGYtPm9zZDEuaHVyZDEuaF9pX3RyYW5zbGF0b3IpOworCQl0LT5vc2QyLmh1cmQyLmhfaV9mcmFnID0gZi0+b3NkMi5odXJkMi5oX2lfZnJhZzsKKwkJdC0+b3NkMi5odXJkMi5oX2lfZnNpemUgPSBmLT5vc2QyLmh1cmQyLmhfaV9mc2l6ZTsKKwkJdC0+b3NkMi5odXJkMi5oX2lfbW9kZV9oaWdoID0KKwkJICBleHQyZnNfc3dhYjE2IChmLT5vc2QyLmh1cmQyLmhfaV9tb2RlX2hpZ2gpOworCQl0LT5vc2QyLmh1cmQyLmhfaV91aWRfaGlnaCA9CisJCSAgZXh0MmZzX3N3YWIxNiAoZi0+b3NkMi5odXJkMi5oX2lfdWlkX2hpZ2gpOworCQl0LT5vc2QyLmh1cmQyLmhfaV9naWRfaGlnaCA9CisJCSAgZXh0MmZzX3N3YWIxNiAoZi0+b3NkMi5odXJkMi5oX2lfZ2lkX2hpZ2gpOworCQl0LT5vc2QyLmh1cmQyLmhfaV9hdXRob3IgPQorCQkgIGV4dDJmc19zd2FiMzIgKGYtPm9zZDIuaHVyZDIuaF9pX2F1dGhvcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChidWZzaXplIDwgKGludCkgKHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkgKyBzaXplb2YoX191MTYpKSkKKwkJcmV0dXJuOyAvKiBubyBpX2V4dHJhX2lzaXplIGZpZWxkICovCisKKwlpZiAoaG9zdG9yZGVyKQorCQlleHRyYV9pc2l6ZSA9IGYtPmlfZXh0cmFfaXNpemU7CisJdC0+aV9leHRyYV9pc2l6ZSA9IGV4dDJmc19zd2FiMTYoZi0+aV9leHRyYV9pc2l6ZSk7CisJaWYgKCFob3N0b3JkZXIpCisJCWV4dHJhX2lzaXplID0gdC0+aV9leHRyYV9pc2l6ZTsKKwlpZiAoZXh0cmFfaXNpemUgPiBFWFQyX0lOT0RFX1NJWkUoZnMtPnN1cGVyKSAtCisJCQkJc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSkgeworCQkvKiB0aGlzIGlzIGVycm9yIGNhc2U6IGlfZXh0cmFfc2l6ZSBpcyB0b28gbGFyZ2UgKi8KKwkJcmV0dXJuOworCX0KKworCWlmIChleHRyYV9pc2l6ZSA+PSA0KQorCQl0LT5pX2NoZWNrc3VtX2hpID0gZXh0MmZzX3N3YWIxNihmLT5pX2NoZWNrc3VtX2hpKTsKKwlpZiAoZXh0cmFfaXNpemUgPj0gOCkKKwkJdC0+aV9jdGltZV9leHRyYSA9IGV4dDJmc19zd2FiMzIoZi0+aV9jdGltZV9leHRyYSk7CisJaWYgKGV4dHJhX2lzaXplID49IDEyKQorCQl0LT5pX210aW1lX2V4dHJhID0gZXh0MmZzX3N3YWIzMihmLT5pX210aW1lX2V4dHJhKTsKKwlpZiAoZXh0cmFfaXNpemUgPj0gMTYpCisJCXQtPmlfYXRpbWVfZXh0cmEgPSBleHQyZnNfc3dhYjMyKGYtPmlfYXRpbWVfZXh0cmEpOworCWlmIChleHRyYV9pc2l6ZSA+PSAyMCkKKwkJdC0+aV9jcnRpbWUgPSBleHQyZnNfc3dhYjMyKGYtPmlfY3J0aW1lKTsKKwlpZiAoZXh0cmFfaXNpemUgPj0gMjQpCisJCXQtPmlfY3J0aW1lX2V4dHJhID0gZXh0MmZzX3N3YWIzMihmLT5pX2NydGltZV9leHRyYSk7CisJaWYgKGV4dHJhX2lzaXplID49IDI4KQorCQl0LT5pX3ZlcnNpb25faGkgPSBleHQyZnNfc3dhYjMyKGYtPmlfdmVyc2lvbl9oaSk7CisKKwlpID0gc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSArIGV4dHJhX2lzaXplICsgc2l6ZW9mKF9fdTMyKTsKKwlpZiAoYnVmc2l6ZSA8IChpbnQpIGkpCisJCXJldHVybjsgLyogbm8gc3BhY2UgZm9yIEVBIG1hZ2ljICovCisKKwllYWYgPSAoX191MzIgKikgKCgoY2hhciAqKSBmKSArIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkgKworCQkJCQlleHRyYV9pc2l6ZSk7CisKKwlhdHRyX21hZ2ljID0gKmVhZjsKKwlpZiAoIWhvc3RvcmRlcikKKwkJYXR0cl9tYWdpYyA9IGV4dDJmc19zd2FiMzIoYXR0cl9tYWdpYyk7CisKKwlpZiAoYXR0cl9tYWdpYyAhPSBFWFQyX0VYVF9BVFRSX01BR0lDKQorCQlyZXR1cm47IC8qIGl0IHNlZW1zIG5vIG1hZ2ljIGhlcmUgKi8KKworCWVhdCA9IChfX3UzMiAqKSAoKChjaGFyICopIHQpICsgc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSArCisJCQkJCWV4dHJhX2lzaXplKTsKKwkqZWF0ID0gZXh0MmZzX3N3YWIzMigqZWFmKTsKKworCS8qIGNvbnZlcnQgRUEocykgKi8KKwlleHQyZnNfc3dhcF9leHRfYXR0cigoY2hhciAqKSAoZWF0ICsgMSksIChjaGFyICopIChlYWYgKyAxKSwKKwkJCSAgICAgYnVmc2l6ZSAtIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkgLQorCQkJICAgICBleHRyYV9pc2l6ZSAtIHNpemVvZihfX3UzMiksIDApOworCit9CisKK3ZvaWQgZXh0MmZzX3N3YXBfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBleHQyX2lub2RlICp0LAorCQkgICAgICAgc3RydWN0IGV4dDJfaW5vZGUgKmYsIGludCBob3N0b3JkZXIpCit7CisJZXh0MmZzX3N3YXBfaW5vZGVfZnVsbChmcywgKHN0cnVjdCBleHQyX2lub2RlX2xhcmdlICopIHQsCisJCQkJKHN0cnVjdCBleHQyX2lub2RlX2xhcmdlICopIGYsIGhvc3RvcmRlciwKKwkJCQlzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKK30KKwordm9pZCBleHQyZnNfc3dhcF9tbXAoc3RydWN0IG1tcF9zdHJ1Y3QgKm1tcCkKK3sKKwltbXAtPm1tcF9tYWdpYyA9IGV4dDJmc19zd2FiMzIobW1wLT5tbXBfbWFnaWMpOworCW1tcC0+bW1wX3NlcSA9IGV4dDJmc19zd2FiMzIobW1wLT5tbXBfc2VxKTsKKwltbXAtPm1tcF90aW1lID0gZXh0MmZzX3N3YWI2NChtbXAtPm1tcF90aW1lKTsKKwltbXAtPm1tcF9jaGVja19pbnRlcnZhbCA9IGV4dDJmc19zd2FiMTYobW1wLT5tbXBfY2hlY2tfaW50ZXJ2YWwpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvc3ltbGluay5jIGIvbGliL2V4dDJmcy9zeW1saW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0ODVhNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvc3ltbGluay5jCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogc3ltbGluay5jIC0tLSBtYWtlIGEgc3ltbGluayBpbiB0aGUgZmlsZXN5c3RlbSwgYmFzZWQgb24gbWtkaXIuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCitlcnJjb2RlX3QgZXh0MmZzX3N5bWxpbmsoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgcGFyZW50LCBleHQyX2lub190IGlubywKKwkJCSBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0YXJnZXQpCit7CisJZXJyY29kZV90CQlyZXR2YWw7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJZXh0Ml9pbm9fdAkJc2NyYXRjaF9pbm87CisJYmxrNjRfdAkJCWJsazsKKwlpbnQJCQlmYXN0bGluazsKKwl1bnNpZ25lZCBpbnQJCXRhcmdldF9sZW47CisJY2hhcgkJCSpibG9ja19idWYgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCS8qIFRoZSBMaW51eCBrZXJuZWwgZG9lc24ndCBhbGxvdyBmb3IgbGlua3MgbG9uZ2VyIHRoYW4gYSBibG9jayAqLworCXRhcmdldF9sZW4gPSBzdHJsZW4odGFyZ2V0KTsKKwlpZiAodGFyZ2V0X2xlbiA+IGZzLT5ibG9ja3NpemUpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSBhIGRhdGEgYmxvY2sgZm9yIHNsb3cgbGlua3MKKwkgKi8KKwlmYXN0bGluayA9ICh0YXJnZXRfbGVuIDwgc2l6ZW9mKGlub2RlLmlfYmxvY2spKTsKKwlpZiAoIWZhc3RsaW5rKSB7CisJCXJldHZhbCA9IGV4dDJmc19uZXdfYmxvY2syKGZzLCAwLCAwLCAmYmxrKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSwgJmJsb2NrX2J1Zik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSBhbiBpbm9kZSwgaWYgbmVjZXNzYXJ5CisJICovCisJaWYgKCFpbm8pIHsKKwkJcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShmcywgcGFyZW50LCBMSU5VWF9TX0lGTE5LIHwgMDc1NSwKKwkJCQkJICAwLCAmaW5vKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKgorCSAqIENyZWF0ZSB0aGUgaW5vZGUgc3RydWN0dXJlLi4uLgorCSAqLworCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpOworCWlub2RlLmlfbW9kZSA9IExJTlVYX1NfSUZMTksgfCAwNzc3OworCWlub2RlLmlfdWlkID0gaW5vZGUuaV9naWQgPSAwOworCWV4dDJmc19pYmxrX3NldChmcywgJmlub2RlLCBmYXN0bGluayA/IDAgOiAxKTsKKwlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMTsKKwlleHQyZnNfaW5vZGVfc2l6ZV9zZXQoZnMsICZpbm9kZSwgdGFyZ2V0X2xlbik7CisJLyogVGhlIHRpbWUgZmllbGRzIGFyZSBzZXQgYnkgZXh0MmZzX3dyaXRlX25ld19pbm9kZSgpICovCisKKwlpZiAoZmFzdGxpbmspIHsKKwkJLyogRmFzdCBzeW1saW5rcywgdGFyZ2V0IHN0b3JlZCBpbiBpbm9kZSAqLworCQlzdHJjcHkoKGNoYXIgKikmaW5vZGUuaV9ibG9jaywgdGFyZ2V0KTsKKwl9IGVsc2UgeworCQkvKiBTbG93IHN5bWxpbmtzLCB0YXJnZXQgc3RvcmVkIGluIHRoZSBmaXJzdCBibG9jayAqLworCQltZW1zZXQoYmxvY2tfYnVmLCAwLCBmcy0+YmxvY2tzaXplKTsKKwkJc3RybmNweShibG9ja19idWYsIHRhcmdldCwgZnMtPmJsb2Nrc2l6ZSk7CisJCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCSAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUykgeworCQkJLyoKKwkJCSAqIFRoZSBleHRlbnQgYm1hcCBpcyBzZXR1cCBhZnRlciB0aGUgaW5vZGUgYW5kIGJsb2NrCisJCQkgKiBoYXZlIGJlZW4gd3JpdHRlbiBvdXQgYmVsb3cuCisJCQkgKi8KKwkJCWlub2RlLmlfZmxhZ3MgfD0gRVhUNF9FWFRFTlRTX0ZMOworCQl9CisJfQorCisJLyoKKwkgKiBXcml0ZSBvdXQgdGhlIGlub2RlIGFuZCBpbm9kZSBkYXRhIGJsb2NrLiAgVGhlIGlub2RlIGdlbmVyYXRpb24KKwkgKiBudW1iZXIgaXMgYXNzaWduZWQgYnkgd3JpdGVfbmV3X2lub2RlLCB3aGljaCBtZWFucyB0aGF0IHRoZQorCSAqIG9wZXJhdGlvbnMgdXNpbmcgaW5vIG11c3QgY29tZSBhZnRlciBpdC4KKwkgKi8KKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfbmV3X2lub2RlKGZzLCBpbm8sICZpbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJaWYgKCFmYXN0bGluaykgeworCQlyZXR2YWwgPSBleHQyZnNfYm1hcDIoZnMsIGlubywgJmlub2RlLCBOVUxMLCBCTUFQX1NFVCwgMCwgTlVMTCwKKwkJCQkgICAgICAmYmxrKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKworCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgYmxrLCAxLCBibG9ja19idWYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogTGluayB0aGUgc3ltbGluayBpbnRvIHRoZSBmaWxlc3lzdGVtIGhpZXJhcmNoeQorCSAqLworCWlmIChuYW1lKSB7CisJCXJldHZhbCA9IGV4dDJmc19sb29rdXAoZnMsIHBhcmVudCwgbmFtZSwgc3RybGVuKG5hbWUpLCAwLAorCQkJCSAgICAgICAmc2NyYXRjaF9pbm8pOworCQlpZiAoIXJldHZhbCkgeworCQkJcmV0dmFsID0gRVhUMl9FVF9GSUxFX0VYSVNUUzsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlpZiAocmV0dmFsICE9IEVYVDJfRVRfRklMRV9OT1RfRk9VTkQpCisJCQlnb3RvIGNsZWFudXA7CisJCXJldHZhbCA9IGV4dDJmc19saW5rKGZzLCBwYXJlbnQsIG5hbWUsIGlubywgRVhUMl9GVF9TWU1MSU5LKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSBhY2NvdW50aW5nLi4uLgorCSAqLworCWlmICghZmFzdGxpbmspCisJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIGJsaywgKzEpOworCWV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoZnMsIGlubywgKzEsIDApOworCitjbGVhbnVwOgorCWlmIChibG9ja19idWYpCisJCWV4dDJmc19mcmVlX21lbSgmYmxvY2tfYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy90ZGIuYyBiL2xpYi9leHQyZnMvdGRiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlMzBlZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvdGRiLmMKQEAgLTAsMCArMSw0MTQwIEBACisvKgorVVJMOiBzdm46Ly9zdm5hbm9uLnNhbWJhLm9yZy9zYW1iYS9icmFuY2hlcy9TQU1CQV80XzAvc291cmNlL2xpYi90ZGIvY29tbW9uCitSZXY6IDIzNTkwCitMYXN0IENoYW5nZWQgRGF0ZTogMjAwNy0wNi0yMiAxMzozNjoxMCAtMDQwMCAoRnJpLCAyMiBKdW4gMjAwNykKKyovCisgLyoKKyAgIHRyaXZpYWwgZGF0YWJhc2UgbGlicmFyeSAtIHN0YW5kYWxvbmUgdmVyc2lvbgorCisgICBDb3B5cmlnaHQgKEMpIEFuZHJldyBUcmlkZ2VsbCAgICAgICAgICAgICAgMTk5OS0yMDA1CisgICBDb3B5cmlnaHQgKEMpIEplcmVteSBBbGxpc29uICAgICAgICAgICAgICAgMjAwMC0yMDA2CisgICBDb3B5cmlnaHQgKEMpIFBhdWwgYFJ1c3R5JyBSdXNzZWxsICAgICAgICAgMjAwMAorCisgICAgICoqIE5PVEUhIFRoZSBmb2xsb3dpbmcgTEdQTCBsaWNlbnNlIGFwcGxpZXMgdG8gdGhlIHRkYgorICAgICAqKiBsaWJyYXJ5LiBUaGlzIGRvZXMgTk9UIGltcGx5IHRoYXQgYWxsIG9mIFNhbWJhIGlzIHJlbGVhc2VkCisgICAgICoqIHVuZGVyIHRoZSBMR1BMCisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2lmZGVmIENPTkZJR19TVEFORF9BTE9ORQorI2RlZmluZSBIQVZFX01NQVAKKyNkZWZpbmUgSEFWRV9TVFJEVVAKKyNkZWZpbmUgSEFWRV9TWVNfTU1BTl9ICisjZGVmaW5lIEhBVkVfVVRJTUVfSAorI2RlZmluZSBIQVZFX1VUSU1FCisjZW5kaWYKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+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+VERCX0NMRUFSX0lGX0ZJUlNUOworCQl9CisKKwkJaWYgKHRkYl9yZW9wZW4odGRiKSAhPSAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy90ZGIuaCBiL2xpYi9leHQyZnMvdGRiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMyZWYwZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvdGRiLmgKQEAgLTAsMCArMSwyMTMgQEAKKyNpZm5kZWYgX19UREJfSF9fCisjZGVmaW5lIF9fVERCX0hfXworCisvKgorICAgVW5peCBTTUIvQ0lGUyBpbXBsZW1lbnRhdGlvbi4KKworICAgdHJpdmlhbCBkYXRhYmFzZSBsaWJyYXJ5CisKKyAgIENvcHlyaWdodCAoQykgQW5kcmV3IFRyaWRnZWxsIDE5OTktMjAwNAorCisgICAgICoqIE5PVEUhIFRoZSBmb2xsb3dpbmcgTEdQTCBsaWNlbnNlIGFwcGxpZXMgdG8gdGhlIHRkYgorICAgICAqKiBsaWJyYXJ5LiBUaGlzIGRvZXMgTk9UIGltcGx5IHRoYXQgYWxsIG9mIFNhbWJhIGlzIHJlbGVhc2VkCisgICAgICoqIHVuZGVyIHRoZSBMR1BMCisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisvKiBmbGFncyB0byB0ZGJfc3RvcmUoKSAqLworI2RlZmluZSBUREJfUkVQTEFDRSAxCisjZGVmaW5lIFREQl9JTlNFUlQgMgorI2RlZmluZSBUREJfTU9ESUZZIDMKKworLyogZmxhZ3MgZm9yIHRkYl9vcGVuKCkgKi8KKyNkZWZpbmUgVERCX0RFRkFVTFQgMCAvKiBqdXN0IGEgcmVhZGFiaWxpdHkgcGxhY2UgaG9sZGVyICovCisjZGVmaW5lIFREQl9DTEVBUl9JRl9GSVJTVCAxCisjZGVmaW5lIFREQl9JTlRFUk5BTCAyIC8qIGRvbid0IHN0b3JlIG9uIGRpc2sgKi8KKyNkZWZpbmUgVERCX05PTE9DSyAgIDQgLyogZG9uJ3QgZG8gYW55IGxvY2tpbmcgKi8KKyNkZWZpbmUgVERCX05PTU1BUCAgIDggLyogZG9uJ3QgdXNlIG1tYXAgKi8KKyNkZWZpbmUgVERCX0NPTlZFUlQgMTYgLyogY29udmVydCBlbmRpYW4gKGludGVybmFsIHVzZSkgKi8KKyNkZWZpbmUgVERCX0JJR0VORElBTiAzMiAvKiBoZWFkZXIgaXMgYmlnLWVuZGlhbiAoaW50ZXJuYWwgdXNlKSAqLworI2RlZmluZSBUREJfTk9TWU5DICAgNjQgLyogZG9uJ3QgdXNlIHN5bmNocm9ub3VzIHRyYW5zYWN0aW9ucyAqLworI2RlZmluZSBUREJfU0VRTlVNICAgMTI4IC8qIG1haW50YWluIGEgc2VxdWVuY2UgbnVtYmVyICovCisKKyNkZWZpbmUgVERCX0VSUkNPREUoY29kZSwgcmV0KSAoKHRkYi0+ZWNvZGUgPSAoY29kZSkpLCByZXQpCisKKy8qIGVycm9yIGNvZGVzICovCitlbnVtIFREQl9FUlJPUiB7VERCX1NVQ0NFU1M9MCwgVERCX0VSUl9DT1JSVVBULCBUREJfRVJSX0lPLCBUREJfRVJSX0xPQ0ssCisJCVREQl9FUlJfT09NLCBUREJfRVJSX0VYSVNUUywgVERCX0VSUl9OT0xPQ0ssIFREQl9FUlJfTE9DS19USU1FT1VULAorCQlUREJfRVJSX05PRVhJU1QsIFREQl9FUlJfRUlOVkFMLCBUREJfRVJSX1JET05MWX07CisKKy8qIGRlYnVnZ2luZyB1c2VzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGxldmVscyAqLworZW51bSB0ZGJfZGVidWdfbGV2ZWwge1REQl9ERUJVR19GQVRBTCA9IDAsIFREQl9ERUJVR19FUlJPUiwKKwkJICAgICAgVERCX0RFQlVHX1dBUk5JTkcsIFREQl9ERUJVR19UUkFDRX07CisKK3R5cGVkZWYgc3RydWN0IFREQl9EQVRBIHsKKwl1bnNpZ25lZCBjaGFyICpkcHRyOworCXNpemVfdCBkc2l6ZTsKK30gVERCX0RBVEE7CisKKyNpZm5kZWYgUFJJTlRGX0FUVFJJQlVURQorI2lmIChfX0dOVUNfXyA+PSAzKQorLyoqIFVzZSBnY2MgYXR0cmlidXRlIHRvIGNoZWNrIHByaW50ZiBmbnMuICBhMSBpcyB0aGUgMS1iYXNlZCBpbmRleCBvZgorICogdGhlIHBhcmFtZXRlciBjb250YWluaW5nIHRoZSBmb3JtYXQsIGFuZCBhMiB0aGUgaW5kZXggb2YgdGhlIGZpcnN0CisgKiBhcmd1bWVudC4gTm90ZSB0aGF0IHNvbWUgZ2NjIDIueCB2ZXJzaW9ucyBkb24ndCBoYW5kbGUgdGhpcworICogcHJvcGVybHkgKiovCisjZGVmaW5lIFBSSU5URl9BVFRSSUJVVEUoYTEsIGEyKSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChfX3ByaW50Zl9fLCBhMSwgYTIpKSkKKyNlbHNlCisjZGVmaW5lIFBSSU5URl9BVFRSSUJVVEUoYTEsIGEyKQorI2VuZGlmCisjZW5kaWYKKworLyogZXh0MmZzIHRkYiByZW5hbWVzICovCisjZGVmaW5lIHRkYl9vcGVuIGV4dDJmc190ZGJfb3BlbgorI2RlZmluZSB0ZGJfb3Blbl9leCBleHQyZnNfdGRiX29wZW5fZXgKKyNkZWZpbmUgdGRiX3NldF9tYXhfZGVhZCBleHQyZnNfdGRiX3NldF9tYXhfZGVhZAorI2RlZmluZSB0ZGJfcmVvcGVuIGV4dDJmc190ZGJfcmVvcGVuCisjZGVmaW5lIHRkYl9yZW9wZW5fYWxsIGV4dDJmc190ZGJfcmVvcGVuX2FsbAorI2RlZmluZSB0ZGJfc2V0X2xvZ2dpbmdfZnVuY3Rpb24gZXh0MmZzX3RkYl9zZXRfbG9nZ2luZ19mdW5jdGlvbgorI2RlZmluZSB0ZGJfZXJyb3IgZXh0MmZzX3RkYl9lcnJvcgorI2RlZmluZSB0ZGJfZXJyb3JzdHIgZXh0MmZzX3RkYl9lcnJvcnN0cgorI2RlZmluZSB0ZGJfZmV0Y2ggZXh0MmZzX3RkYl9mZXRjaAorI2RlZmluZSB0ZGJfcGFyc2VfcmVjb3JkIGV4dDJmc190ZGJfcGFyc2VfcmVjb3JkCisjZGVmaW5lIHRkYl9kZWxldGUgZXh0MmZzX3RkYl9kZWxldGUKKyNkZWZpbmUgdGRiX3N0b3JlIGV4dDJmc190ZGJfc3RvcmUKKyNkZWZpbmUgdGRiX2FwcGVuZCBleHQyZnNfdGRiX2FwcGVuZAorI2RlZmluZSB0ZGJfY2xvc2UgZXh0MmZzX3RkYl9jbG9zZQorI2RlZmluZSB0ZGJfZmlyc3RrZXkgZXh0MmZzX3RkYl9maXJzdGtleQorI2RlZmluZSB0ZGJfbmV4dGtleSBleHQyZnNfdGRiX25leHRrZXkKKyNkZWZpbmUgdGRiX3RyYXZlcnNlIGV4dDJmc190ZGJfdHJhdmVyc2UKKyNkZWZpbmUgdGRiX3RyYXZlcnNlX3JlYWQgZXh0MmZzX3RkYl90cmF2ZXJzZV9yZWFkCisjZGVmaW5lIHRkYl9leGlzdHMgZXh0MmZzX3RkYl9leGlzdHMKKyNkZWZpbmUgdGRiX2xvY2thbGwgZXh0MmZzX3RkYl9sb2NrYWxsCisjZGVmaW5lIHRkYl91bmxvY2thbGwgZXh0MmZzX3RkYl91bmxvY2thbGwKKyNkZWZpbmUgdGRiX2xvY2thbGxfcmVhZCBleHQyZnNfdGRiX2xvY2thbGxfcmVhZAorI2RlZmluZSB0ZGJfdW5sb2NrYWxsX3JlYWQgZXh0MmZzX3RkYl91bmxvY2thbGxfcmVhZAorI2RlZmluZSB0ZGJfbmFtZSBleHQyZnNfdGRiX25hbWUKKyNkZWZpbmUgdGRiX2ZkIGV4dDJmc190ZGJfZmQKKyNkZWZpbmUgdGRiX2xvZ19mbiBleHQyZnNfdGRiX2xvZ19mbgorI2RlZmluZSB0ZGJfZ2V0X2xvZ2dpbmdfcHJpdmF0ZSBleHQyZnNfdGRiX2dldF9sb2dnaW5nX3ByaXZhdGUKKyNkZWZpbmUgdGRiX3RyYW5zYWN0aW9uX3N0YXJ0IGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fc3RhcnQKKyNkZWZpbmUgdGRiX3RyYW5zYWN0aW9uX2NvbW1pdCBleHQyZnNfdGRiX3RyYW5zYWN0aW9uX2NvbW1pdAorI2RlZmluZSB0ZGJfdHJhbnNhY3Rpb25fY2FuY2VsIGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fY2FuY2VsCisjZGVmaW5lIHRkYl90cmFuc2FjdGlvbl9yZWNvdmVyIGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fcmVjb3ZlcgorI2RlZmluZSB0ZGJfZ2V0X3NlcW51bSBleHQyZnNfdGRiX2dldF9zZXFudW0KKyNkZWZpbmUgdGRiX2hhc2hfc2l6ZSBleHQyZnNfdGRiX2hhc2hfc2l6ZQorI2RlZmluZSB0ZGJfbWFwX3NpemUgZXh0MmZzX3RkYl9tYXBfc2l6ZQorI2RlZmluZSB0ZGJfZ2V0X2ZsYWdzIGV4dDJmc190ZGJfZ2V0X2ZsYWdzCisjZGVmaW5lIHRkYl9jaGFpbmxvY2sgZXh0MmZzX3RkYl9jaGFpbmxvY2sKKyNkZWZpbmUgdGRiX2NoYWludW5sb2NrIGV4dDJmc190ZGJfY2hhaW51bmxvY2sKKyNkZWZpbmUgdGRiX2NoYWlubG9ja19yZWFkIGV4dDJmc190ZGJfY2hhaW5sb2NrX3JlYWQKKyNkZWZpbmUgdGRiX2NoYWludW5sb2NrX3JlYWQgZXh0MmZzX3RkYl9jaGFpbnVubG9ja19yZWFkCisjZGVmaW5lIHRkYl9kdW1wX2FsbCBleHQyZnNfdGRiX2R1bXBfYWxsCisjZGVmaW5lIHRkYl9wcmludGZyZWVsaXN0IGV4dDJmc190ZGJfcHJpbnRmcmVlbGlzdAorI2RlZmluZSB0ZGJfdmFsaWRhdGVfZnJlZWxpc3QgZXh0MmZzX3RkYl92YWxpZGF0ZV9mcmVlbGlzdAorI2RlZmluZSB0ZGJfY2hhaW5sb2NrX21hcmsgZXh0MmZzX3RkYl9jaGFpbmxvY2tfbWFyaworI2RlZmluZSB0ZGJfY2hhaW5sb2NrX25vbmJsb2NrIGV4dDJmc190ZGJfY2hhaW5sb2NrX25vbmJsb2NrCisjZGVmaW5lIHRkYl9jaGFpbmxvY2tfdW5tYXJrIGV4dDJmc190ZGJfY2hhaW5sb2NrX3VubWFyaworI2RlZmluZSB0ZGJfZW5hYmxlX3NlcW51bSBleHQyZnNfdGRiX2VuYWJsZV9zZXFudW0KKyNkZWZpbmUgdGRiX2luY3JlbWVudF9zZXFudW1fbm9uYmxvY2sgZXh0MmZzX3RkYl9pbmNyZW1lbnRfc2VxbnVtX25vbmJsb2NrCisjZGVmaW5lIHRkYl9sb2NrX25vbmJsb2NrIGV4dDJmc190ZGJfbG9ja19ub25ibG9jaworI2RlZmluZSB0ZGJfbG9ja2FsbF9tYXJrIGV4dDJmc190ZGJfbG9ja2FsbF9tYXJrCisjZGVmaW5lIHRkYl9sb2NrYWxsX25vbmJsb2NrIGV4dDJmc190ZGJfbG9ja2FsbF9ub25ibG9jaworI2RlZmluZSB0ZGJfbG9ja2FsbF9yZWFkX25vbmJsb2NrIGV4dDJmc190ZGJfbG9ja2FsbF9yZWFkX25vbmJsb2NrCisjZGVmaW5lIHRkYl9sb2NrYWxsX3VubWFyayBleHQyZnNfdGRiX2xvY2thbGxfdW5tYXJrCisKKy8qIHRoaXMgaXMgdGhlIGNvbnRleHQgc3RydWN0dXJlIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSBhIGRiIG9wZW4gKi8KK3R5cGVkZWYgc3RydWN0IHRkYl9jb250ZXh0IFREQl9DT05URVhUOworCit0eXBlZGVmIGludCAoKnRkYl90cmF2ZXJzZV9mdW5jKShzdHJ1Y3QgdGRiX2NvbnRleHQgKiwgVERCX0RBVEEsIFREQl9EQVRBLCB2b2lkICopOwordHlwZWRlZiB2b2lkICgqdGRiX2xvZ19mdW5jKShzdHJ1Y3QgdGRiX2NvbnRleHQgKiwgZW51bSB0ZGJfZGVidWdfbGV2ZWwsIGNvbnN0IGNoYXIgKiwgLi4uKSBQUklOVEZfQVRUUklCVVRFKDMsIDQpOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgKCp0ZGJfaGFzaF9mdW5jKShUREJfREFUQSAqa2V5KTsKKworc3RydWN0IHRkYl9sb2dnaW5nX2NvbnRleHQgeworICAgICAgICB0ZGJfbG9nX2Z1bmMgbG9nX2ZuOworICAgICAgICB2b2lkICpsb2dfcHJpdmF0ZTsKK307CisKK3N0cnVjdCB0ZGJfY29udGV4dCAqdGRiX29wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IGhhc2hfc2l6ZSwgaW50IHRkYl9mbGFncywKKwkJICAgICAgaW50IG9wZW5fZmxhZ3MsIG1vZGVfdCBtb2RlKTsKK3N0cnVjdCB0ZGJfY29udGV4dCAqdGRiX29wZW5fZXgoY29uc3QgY2hhciAqbmFtZSwgaW50IGhhc2hfc2l6ZSwgaW50IHRkYl9mbGFncywKKwkJCSBpbnQgb3Blbl9mbGFncywgbW9kZV90IG1vZGUsCisJCQkgY29uc3Qgc3RydWN0IHRkYl9sb2dnaW5nX2NvbnRleHQgKmxvZ19jdHgsCisJCQkgdGRiX2hhc2hfZnVuYyBoYXNoX2ZuKTsKK3ZvaWQgdGRiX3NldF9tYXhfZGVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgaW50IG1heF9kZWFkKTsKKworaW50IHRkYl9yZW9wZW4oc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl9yZW9wZW5fYWxsKGludCBwYXJlbnRfbG9uZ2xpdmVkKTsKK3ZvaWQgdGRiX3NldF9sb2dnaW5nX2Z1bmN0aW9uKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBjb25zdCBzdHJ1Y3QgdGRiX2xvZ2dpbmdfY29udGV4dCAqbG9nX2N0eCk7CitlbnVtIFREQl9FUlJPUiB0ZGJfZXJyb3Ioc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworY29uc3QgY2hhciAqdGRiX2Vycm9yc3RyKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK1REQl9EQVRBIHRkYl9mZXRjaChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5KTsKK2ludCB0ZGJfcGFyc2VfcmVjb3JkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXksCisJCSAgICAgaW50ICgqcGFyc2VyKShUREJfREFUQSBrZXksIFREQl9EQVRBIGRhdGEsCisJCQkJICAgdm9pZCAqcHJpdmF0ZV9kYXRhKSwKKwkJICAgICB2b2lkICpwcml2YXRlX2RhdGEpOworaW50IHRkYl9kZWxldGUoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSk7CitpbnQgdGRiX3N0b3JlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXksIFREQl9EQVRBIGRidWYsIGludCBmbGFnKTsKK2ludCB0ZGJfYXBwZW5kKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXksIFREQl9EQVRBIG5ld19kYnVmKTsKK2ludCB0ZGJfY2xvc2Uoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworVERCX0RBVEEgdGRiX2ZpcnN0a2V5KHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK1REQl9EQVRBIHRkYl9uZXh0a2V5KHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXkpOworaW50IHRkYl90cmF2ZXJzZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX3RyYXZlcnNlX2Z1bmMgZm4sIHZvaWQgKik7CitpbnQgdGRiX3RyYXZlcnNlX3JlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl90cmF2ZXJzZV9mdW5jIGZuLCB2b2lkICopOworaW50IHRkYl9leGlzdHMoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSk7CitpbnQgdGRiX2xvY2thbGwoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl9sb2NrYWxsX25vbmJsb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfdW5sb2NrYWxsKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfbG9ja2FsbF9yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfbG9ja2FsbF9yZWFkX25vbmJsb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfdW5sb2NrYWxsX3JlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl9sb2NrYWxsX21hcmsoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl9sb2NrYWxsX3VubWFyayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7Citjb25zdCBjaGFyICp0ZGJfbmFtZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7CitpbnQgdGRiX2ZkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK3RkYl9sb2dfZnVuYyB0ZGJfbG9nX2ZuKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK3ZvaWQgKnRkYl9nZXRfbG9nZ2luZ19wcml2YXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfdHJhbnNhY3Rpb25fc3RhcnQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl90cmFuc2FjdGlvbl9jb21taXQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl90cmFuc2FjdGlvbl9jYW5jZWwoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl90cmFuc2FjdGlvbl9yZWNvdmVyKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfZ2V0X3NlcW51bShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7CitpbnQgdGRiX2hhc2hfc2l6ZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7CitzaXplX3QgdGRiX21hcF9zaXplKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfZ2V0X2ZsYWdzKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK3ZvaWQgdGRiX2VuYWJsZV9zZXFudW0oc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOwordm9pZCB0ZGJfaW5jcmVtZW50X3NlcW51bV9ub25ibG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7CisKKy8qIExvdyBsZXZlbCBsb2NraW5nIGZ1bmN0aW9uczogdXNlIHdpdGggY2FyZSAqLworaW50IHRkYl9jaGFpbmxvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSk7CitpbnQgdGRiX2NoYWlubG9ja19ub25ibG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5KTsKK2ludCB0ZGJfY2hhaW51bmxvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSk7CitpbnQgdGRiX2NoYWlubG9ja19yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXkpOworaW50IHRkYl9jaGFpbnVubG9ja19yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXkpOworaW50IHRkYl9jaGFpbmxvY2tfbWFyayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5KTsKK2ludCB0ZGJfY2hhaW5sb2NrX3VubWFyayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5KTsKKworLyogRGVidWcgZnVuY3Rpb25zLiBOb3QgdXNlZCBpbiBwcm9kdWN0aW9uLiAqLwordm9pZCB0ZGJfZHVtcF9hbGwoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl9wcmludGZyZWVsaXN0KHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfdmFsaWRhdGVfZnJlZWxpc3Qoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIGludCAqcG51bV9lbnRyaWVzKTsKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiB0ZGIuaCAqLwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy90ZGIvYnVpbGQtdGRiIGIvbGliL2V4dDJmcy90ZGIvYnVpbGQtdGRiCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFjYzE4ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL3RkYi9idWlsZC10ZGIKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgZmlsZSBjcmVhdGVzIGEgc3RhbmQtYWxvbmUgVERCIGJhc2VkIG9uIGEgc2V0IG9mIHNvdXJjZXMgZnJvbSAKKyMgU2FtYmEKKworI0JBU0VfRElSPS91c3IvcHJvamVjdHMvc2FtYmEvc2FtYmEtNC4wLjB0cDQvc291cmNlL2xpYi90ZGIKK0JBU0VfRElSPS91c3IvcHJvamVjdHMvc2FtYmEvdGRiCisKK3JtIC1yZiAucGMKKworRklMRVM9ImVycm9yLmMgbG9jay5jIGlvLmMgdHJhbnNhY3Rpb24uYyBmcmVlbGlzdC5jIFwKKwlmcmVlbGlzdGNoZWNrLmMgdHJhdmVyc2UuYyBkdW1wLmMgdGRiLmMgb3Blbi5jIgorCisoY2QgJEJBU0VfRElSL2NvbW1vbjsgc3ZuIGluZm8gKSA+IC5zdm5pbmZvCitlY2hvICIvKiIgPiB0ZGIuYworZ3JlcCBeVVJMIC5zdm5pbmZvID4+IHRkYi5jCitncmVwICJeTGFzdCBDaGFuZ2VkIFJldiIgLnN2bmluZm8gfCBzZWQgLWUgJ3MvTGFzdCBDaGFuZ2VkIC8vJyA+PiB0ZGIuYworZ3JlcCAiXkxhc3QgQ2hhbmdlZCBEYXRlIiAuc3ZuaW5mbyA+PiB0ZGIuYworZWNobyAiKi8iID4+IHRkYi5jCisKK2NhdCAkQkFTRV9ESVIvY29tbW9uL3RkYl9wcml2YXRlLmggPj4gdGRiLmMKK2ZvciBpIGluICRGSUxFUzsgZG8KKwlpZiBbIGB0YWlsIC1uIDEgdGRiLmMgfCB3YyAtY2AgLWd0IDEgXTsgdGhlbgorCQlwcmludGYgIlxuIiA+PiB0ZGIuYworCWZpCisJZWNobyAiLyogZmlsZTogJGkgKi8iID4+IHRkYi5jCisJc2VkIC1lICcxLC8jaW5jbHVkZSAidGRiX3ByaXZhdGUuaCIvZCcgPCAkQkFTRV9ESVIvY29tbW9uLyRpID4+IHRkYi5jCitkb25lCisKK2NwICRCQVNFX0RJUi9pbmNsdWRlL3RkYi5oIC4KK2NwICRCQVNFX0RJUi90b29scy90ZGJ0b29sLmMgLgorCitxdWlsdCBwdXNoIC1hCisKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvdGRiL3BhdGNoZXMvY29weXJpZ2h0IGIvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy9jb3B5cmlnaHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlkMWQ4NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvdGRiL3BhdGNoZXMvY29weXJpZ2h0CkBAIC0wLDAgKzEsMjAgQEAKK0luZGV4OiB0ZGJzYS90ZGIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRkYnNhLm9yaWcvdGRiLmMKKysrKyB0ZGJzYS90ZGIuYworQEAgLTQsMTEgKzQsMTEgQEAgUmV2OiAyMzM3MQorIExhc3QgQ2hhbmdlZCBEYXRlOiAyMDA3LTA2LTA2IDIwOjE0OjA2IC0wNDAwIChXZWQsIDA2IEp1biAyMDA3KQorICovCisgIC8qIAorLSAgIFVuaXggU01CL0NJRlMgaW1wbGVtZW50YXRpb24uCisrICAgdHJpdmlhbCBkYXRhYmFzZSBsaWJyYXJ5IC0gc3RhbmRhbG9uZSB2ZXJzaW9uCisgCistICAgdHJpdmlhbCBkYXRhYmFzZSBsaWJyYXJ5IC0gcHJpdmF0ZSBpbmNsdWRlcworLQorLSAgIENvcHlyaWdodCAoQykgQW5kcmV3IFRyaWRnZWxsICAgICAgICAgICAgICAyMDA1CisrICAgQ29weXJpZ2h0IChDKSBBbmRyZXcgVHJpZGdlbGwgICAgICAgICAgICAgIDE5OTktMjAwNQorKyAgIENvcHlyaWdodCAoQykgSmVyZW15IEFsbGlzb24gICAgICAgICAgICAgICAyMDAwLTIwMDYKKysgICBDb3B5cmlnaHQgKEMpIFBhdWwgYFJ1c3R5JyBSdXNzZWxsICAgICAgICAgMjAwMAorICAgIAorICAgICAgKiogTk9URSEgVGhlIGZvbGxvd2luZyBMR1BMIGxpY2Vuc2UgYXBwbGllcyB0byB0aGUgdGRiCisgICAgICAqKiBsaWJyYXJ5LiBUaGlzIGRvZXMgTk9UIGltcGx5IHRoYXQgYWxsIG9mIFNhbWJhIGlzIHJlbGVhc2VkCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL3RkYi9wYXRjaGVzL2V4dDJ0ZGItcmVuYW1lIGIvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy9leHQydGRiLXJlbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWJmMDg1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy9leHQydGRiLXJlbmFtZQpAQCAtMCwwICsxLDY1IEBACitJbmRleDogdGRiL3RkYi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGRiLm9yaWcvdGRiLmgKKysrKyB0ZGIvdGRiLmgKK0BAIC03Niw2ICs3Niw2MCBAQCB0eXBlZGVmIHN0cnVjdCBUREJfREFUQSB7CisgI2VuZGlmCisgI2VuZGlmCisgCisrLyogZXh0MmZzIHRkYiByZW5hbWVzICovCisrI2RlZmluZSB0ZGJfb3BlbiBleHQyZnNfdGRiX29wZW4KKysjZGVmaW5lIHRkYl9vcGVuX2V4IGV4dDJmc190ZGJfb3Blbl9leAorKyNkZWZpbmUgdGRiX3NldF9tYXhfZGVhZCBleHQyZnNfdGRiX3NldF9tYXhfZGVhZAorKyNkZWZpbmUgdGRiX3Jlb3BlbiBleHQyZnNfdGRiX3Jlb3BlbgorKyNkZWZpbmUgdGRiX3Jlb3Blbl9hbGwgZXh0MmZzX3RkYl9yZW9wZW5fYWxsCisrI2RlZmluZSB0ZGJfc2V0X2xvZ2dpbmdfZnVuY3Rpb24gZXh0MmZzX3RkYl9zZXRfbG9nZ2luZ19mdW5jdGlvbgorKyNkZWZpbmUgdGRiX2Vycm9yIGV4dDJmc190ZGJfZXJyb3IKKysjZGVmaW5lIHRkYl9lcnJvcnN0ciBleHQyZnNfdGRiX2Vycm9yc3RyCisrI2RlZmluZSB0ZGJfZmV0Y2ggZXh0MmZzX3RkYl9mZXRjaAorKyNkZWZpbmUgdGRiX3BhcnNlX3JlY29yZCBleHQyZnNfdGRiX3BhcnNlX3JlY29yZAorKyNkZWZpbmUgdGRiX2RlbGV0ZSBleHQyZnNfdGRiX2RlbGV0ZQorKyNkZWZpbmUgdGRiX3N0b3JlIGV4dDJmc190ZGJfc3RvcmUKKysjZGVmaW5lIHRkYl9hcHBlbmQgZXh0MmZzX3RkYl9hcHBlbmQKKysjZGVmaW5lIHRkYl9jbG9zZSBleHQyZnNfdGRiX2Nsb3NlCisrI2RlZmluZSB0ZGJfZmlyc3RrZXkgZXh0MmZzX3RkYl9maXJzdGtleQorKyNkZWZpbmUgdGRiX25leHRrZXkgZXh0MmZzX3RkYl9uZXh0a2V5CisrI2RlZmluZSB0ZGJfdHJhdmVyc2UgZXh0MmZzX3RkYl90cmF2ZXJzZQorKyNkZWZpbmUgdGRiX3RyYXZlcnNlX3JlYWQgZXh0MmZzX3RkYl90cmF2ZXJzZV9yZWFkCisrI2RlZmluZSB0ZGJfZXhpc3RzIGV4dDJmc190ZGJfZXhpc3RzCisrI2RlZmluZSB0ZGJfbG9ja2FsbCBleHQyZnNfdGRiX2xvY2thbGwKKysjZGVmaW5lIHRkYl91bmxvY2thbGwgZXh0MmZzX3RkYl91bmxvY2thbGwKKysjZGVmaW5lIHRkYl9sb2NrYWxsX3JlYWQgZXh0MmZzX3RkYl9sb2NrYWxsX3JlYWQKKysjZGVmaW5lIHRkYl91bmxvY2thbGxfcmVhZCBleHQyZnNfdGRiX3VubG9ja2FsbF9yZWFkCisrI2RlZmluZSB0ZGJfbmFtZSBleHQyZnNfdGRiX25hbWUKKysjZGVmaW5lIHRkYl9mZCBleHQyZnNfdGRiX2ZkCisrI2RlZmluZSB0ZGJfbG9nX2ZuIGV4dDJmc190ZGJfbG9nX2ZuCisrI2RlZmluZSB0ZGJfZ2V0X2xvZ2dpbmdfcHJpdmF0ZSBleHQyZnNfdGRiX2dldF9sb2dnaW5nX3ByaXZhdGUKKysjZGVmaW5lIHRkYl90cmFuc2FjdGlvbl9zdGFydCBleHQyZnNfdGRiX3RyYW5zYWN0aW9uX3N0YXJ0CisrI2RlZmluZSB0ZGJfdHJhbnNhY3Rpb25fY29tbWl0IGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fY29tbWl0CisrI2RlZmluZSB0ZGJfdHJhbnNhY3Rpb25fY2FuY2VsIGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fY2FuY2VsCisrI2RlZmluZSB0ZGJfdHJhbnNhY3Rpb25fcmVjb3ZlciBleHQyZnNfdGRiX3RyYW5zYWN0aW9uX3JlY292ZXIKKysjZGVmaW5lIHRkYl9nZXRfc2VxbnVtIGV4dDJmc190ZGJfZ2V0X3NlcW51bQorKyNkZWZpbmUgdGRiX2hhc2hfc2l6ZSBleHQyZnNfdGRiX2hhc2hfc2l6ZQorKyNkZWZpbmUgdGRiX21hcF9zaXplIGV4dDJmc190ZGJfbWFwX3NpemUKKysjZGVmaW5lIHRkYl9nZXRfZmxhZ3MgZXh0MmZzX3RkYl9nZXRfZmxhZ3MKKysjZGVmaW5lIHRkYl9jaGFpbmxvY2sgZXh0MmZzX3RkYl9jaGFpbmxvY2sKKysjZGVmaW5lIHRkYl9jaGFpbnVubG9jayBleHQyZnNfdGRiX2NoYWludW5sb2NrCisrI2RlZmluZSB0ZGJfY2hhaW5sb2NrX3JlYWQgZXh0MmZzX3RkYl9jaGFpbmxvY2tfcmVhZAorKyNkZWZpbmUgdGRiX2NoYWludW5sb2NrX3JlYWQgZXh0MmZzX3RkYl9jaGFpbnVubG9ja19yZWFkCisrI2RlZmluZSB0ZGJfZHVtcF9hbGwgZXh0MmZzX3RkYl9kdW1wX2FsbAorKyNkZWZpbmUgdGRiX3ByaW50ZnJlZWxpc3QgZXh0MmZzX3RkYl9wcmludGZyZWVsaXN0CisrI2RlZmluZSB0ZGJfdmFsaWRhdGVfZnJlZWxpc3QgZXh0MmZzX3RkYl92YWxpZGF0ZV9mcmVlbGlzdAorKyNkZWZpbmUgdGRiX2NoYWlubG9ja19tYXJrIGV4dDJmc190ZGJfY2hhaW5sb2NrX21hcmsKKysjZGVmaW5lIHRkYl9jaGFpbmxvY2tfbm9uYmxvY2sgZXh0MmZzX3RkYl9jaGFpbmxvY2tfbm9uYmxvY2sKKysjZGVmaW5lIHRkYl9jaGFpbmxvY2tfdW5tYXJrIGV4dDJmc190ZGJfY2hhaW5sb2NrX3VubWFyaworKyNkZWZpbmUgdGRiX2VuYWJsZV9zZXFudW0gZXh0MmZzX3RkYl9lbmFibGVfc2VxbnVtCisrI2RlZmluZSB0ZGJfaW5jcmVtZW50X3NlcW51bV9ub25ibG9jayBleHQyZnNfdGRiX2luY3JlbWVudF9zZXFudW1fbm9uYmxvY2sKKysjZGVmaW5lIHRkYl9sb2NrX25vbmJsb2NrIGV4dDJmc190ZGJfbG9ja19ub25ibG9jaworKyNkZWZpbmUgdGRiX2xvY2thbGxfbWFyayBleHQyZnNfdGRiX2xvY2thbGxfbWFyaworKyNkZWZpbmUgdGRiX2xvY2thbGxfbm9uYmxvY2sgZXh0MmZzX3RkYl9sb2NrYWxsX25vbmJsb2NrCisrI2RlZmluZSB0ZGJfbG9ja2FsbF9yZWFkX25vbmJsb2NrIGV4dDJmc190ZGJfbG9ja2FsbF9yZWFkX25vbmJsb2NrCisrI2RlZmluZSB0ZGJfbG9ja2FsbF91bm1hcmsgZXh0MmZzX3RkYl9sb2NrYWxsX3VubWFyaworKworIC8qIHRoaXMgaXMgdGhlIGNvbnRleHQgc3RydWN0dXJlIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSBhIGRiIG9wZW4gKi8KKyB0eXBlZGVmIHN0cnVjdCB0ZGJfY29udGV4dCBUREJfQ09OVEVYVDsKKyAKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvdGRiL3BhdGNoZXMvcmVwbGFjZS1pbmNsdWRlcyBiL2xpYi9leHQyZnMvdGRiL3BhdGNoZXMvcmVwbGFjZS1pbmNsdWRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWQwZDU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy9yZXBsYWNlLWluY2x1ZGVzCkBAIC0wLDAgKzEsOTIgQEAKK0luZGV4OiB0ZGIvdGRiLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0ZGIub3JpZy90ZGIuYworKysrIHRkYi90ZGIuYworQEAgLTI5LDExICsyOSw4MiBAQCBMYXN0IENoYW5nZWQgRGF0ZTogMjAwNy0wNi0yMiAxMzozNjoxMCAtCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisgCistI2luY2x1ZGUgInJlcGxhY2UuaCIKKy0jaW5jbHVkZSAic3lzdGVtL2ZpbGVzeXMuaCIKKy0jaW5jbHVkZSAic3lzdGVtL3RpbWUuaCIKKy0jaW5jbHVkZSAic3lzdGVtL3NobWVtLmgiCistI2luY2x1ZGUgInN5c3RlbS9zZWxlY3QuaCIKKysjaWZkZWYgQ09ORklHX1NUQU5EX0FMT05FCisrI2RlZmluZSBIQVZFX01NQVAKKysjZGVmaW5lIEhBVkVfU1RSRFVQCisrI2RlZmluZSBIQVZFX1NZU19NTUFOX0gKKysjZGVmaW5lIEhBVkVfVVRJTUVfSAorKyNkZWZpbmUgSEFWRV9VVElNRQorKyNlbmRpZgorKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA1MDAKKysKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPHN5cy90aW1lLmg+CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDx0aW1lLmg+CisrI2lmZGVmIEhBVkVfVVRJTUVfSAorKyNpbmNsdWRlIDx1dGltZS5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDxzeXMvZmlsZS5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorKworKyNpZmRlZiBIQVZFX1NZU19NTUFOX0gKKysjaW5jbHVkZSA8c3lzL21tYW4uaD4KKysjZW5kaWYKKysKKysjaWZuZGVmIE1BUF9GSUxFCisrI2RlZmluZSBNQVBfRklMRSAwCisrI2VuZGlmCisrCisrI2lmbmRlZiBNQVBfRkFJTEVECisrI2RlZmluZSBNQVBfRkFJTEVEICgodm9pZCAqKS0xKQorKyNlbmRpZgorKworKyNpZm5kZWYgSEFWRV9TVFJEVVAKKysjZGVmaW5lIHN0cmR1cCByZXBfc3RyZHVwCisrc3RhdGljIGNoYXIgKnJlcF9zdHJkdXAoY29uc3QgY2hhciAqcykKKyt7CisrCWNoYXIgKnJldDsKKysJaW50IGxlbmd0aDsKKysJaWYgKCFzKQorKwkJcmV0dXJuIE5VTEw7CisrCisrCWlmICghbGVuZ3RoKQorKwkJbGVuZ3RoID0gc3RybGVuKHMpOworKworKwlyZXQgPSBtYWxsb2MobGVuZ3RoICsgMSk7CisrCWlmIChyZXQpIHsKKysJCXN0cm5jcHkocmV0LCBzLCBsZW5ndGgpOworKwkJcmV0W2xlbmd0aF0gPSAnXDAnOworKwl9CisrCXJldHVybiByZXQ7CisrfQorKyNlbmRpZgorKworKyNpZm5kZWYgUFJJTlRGX0FUVFJJQlVURQorKyNpZiAoX19HTlVDX18gPj0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDEgKQorKy8qKiBVc2UgZ2NjIGF0dHJpYnV0ZSB0byBjaGVjayBwcmludGYgZm5zLiAgYTEgaXMgdGhlIDEtYmFzZWQgaW5kZXggb2YKKysgKiB0aGUgcGFyYW1ldGVyIGNvbnRhaW5pbmcgdGhlIGZvcm1hdCwgYW5kIGEyIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QKKysgKiBhcmd1bWVudC4gTm90ZSB0aGF0IHNvbWUgZ2NjIDIueCB2ZXJzaW9ucyBkb24ndCBoYW5kbGUgdGhpcworKyAqIHByb3Blcmx5ICoqLworKyNkZWZpbmUgUFJJTlRGX0FUVFJJQlVURShhMSwgYTIpIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKF9fcHJpbnRmX18sIGExLCBhMikpKQorKyNlbHNlCisrI2RlZmluZSBQUklOVEZfQVRUUklCVVRFKGExLCBhMikKKysjZW5kaWYKKysjZW5kaWYKKysKKyt0eXBlZGVmIGludCBib29sOworKworICNpbmNsdWRlICJ0ZGIuaCIKKyAKKyAjaWZuZGVmIHUzMgpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy9zZXJpZXMgYi9saWIvZXh0MmZzL3RkYi9wYXRjaGVzL3NlcmllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjJiOTIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy9zZXJpZXMKQEAgLTAsMCArMSw2IEBACitjb3B5cmlnaHQKK3JlcGxhY2UtaW5jbHVkZXMKK3N0YXRpYy1wcm90b3R5cGVzCitzdGF0aWMtZnVuY3Rpb25zCit0ZGJ0b29sLWluY2x1ZGVzCitleHQydGRiLXJlbmFtZQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy9zdGF0aWMtZnVuY3Rpb25zIGIvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy9zdGF0aWMtZnVuY3Rpb25zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMGZiZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL3RkYi9wYXRjaGVzL3N0YXRpYy1mdW5jdGlvbnMKQEAgLTAsMCArMSwxMyBAQAorSW5kZXg6IHRkYnNhL3RkYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGRic2Eub3JpZy90ZGIuYworKysrIHRkYnNhL3RkYi5jCitAQCAtMjI1NCw3ICsyMjU0LDcgQEAgaW50IHRkYl90cmFuc2FjdGlvbl9yZWNvdmVyKHN0cnVjdCB0ZGJfYworIC8qIGZpbGU6IGZyZWVsaXN0LmMgKi8KKyAKKyAvKiByZWFkIGEgZnJlZWxpc3QgcmVjb3JkIGFuZCBjaGVjayBmb3Igc2ltcGxlIGVycm9ycyAqLworLWludCB0ZGJfcmVjX2ZyZWVfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZiwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpCisrc3RhdGljIGludCB0ZGJfcmVjX2ZyZWVfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZiwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpCisgeworIAlpZiAodGRiLT5tZXRob2RzLT50ZGJfcmVhZCh0ZGIsIG9mZiwgcmVjLCBzaXplb2YoKnJlYyksRE9DT05WKCkpID09IC0xKQorIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy9zdGF0aWMtcHJvdG90eXBlcyBiL2xpYi9leHQyZnMvdGRiL3BhdGNoZXMvc3RhdGljLXByb3RvdHlwZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4YWY2MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvdGRiL3BhdGNoZXMvc3RhdGljLXByb3RvdHlwZXMKQEAgLTAsMCArMSw3MiBAQAorSW5kZXg6IHRkYnNhL3RkYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGRic2Eub3JpZy90ZGIuYworKysrIHRkYnNhL3RkYi5jCitAQCAtMjUxLDM5ICsyNTEsMzkgQEAgc3RydWN0IHRkYl9jb250ZXh0IHsKKyAvKgorICAgaW50ZXJuYWwgcHJvdG90eXBlcworICovCistaW50IHRkYl9tdW5tYXAoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworLXZvaWQgdGRiX21tYXAoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworLWludCB0ZGJfbG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgaW50IGxpc3QsIGludCBsdHlwZSk7CistaW50IHRkYl91bmxvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIGludCBsaXN0LCBpbnQgbHR5cGUpOworLWludCB0ZGJfYnJsb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCBpbnQgcndfdHlwZSwgaW50IGxja190eXBlLCBpbnQgcHJvYmUsIHNpemVfdCBsZW4pOworLWludCB0ZGJfdHJhbnNhY3Rpb25fbG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgaW50IGx0eXBlKTsKKy1pbnQgdGRiX3RyYW5zYWN0aW9uX3VubG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7CistaW50IHRkYl9icmxvY2tfdXBncmFkZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc2l6ZV90IGxlbik7CistaW50IHRkYl93cml0ZV9sb2NrX3JlY29yZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZik7CistaW50IHRkYl93cml0ZV91bmxvY2tfcmVjb3JkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2ZmKTsKKy1pbnQgdGRiX29mc19yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfb2ZmX3QgKmQpOworLWludCB0ZGJfb2ZzX3dyaXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfb2ZmX3QgKmQpOworLXZvaWQgKnRkYl9jb252ZXJ0KHZvaWQgKmJ1ZiwgdTMyIHNpemUpOworLWludCB0ZGJfZnJlZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpOworLXRkYl9vZmZfdCB0ZGJfYWxsb2NhdGUoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9sZW5fdCBsZW5ndGgsIHN0cnVjdCBsaXN0X3N0cnVjdCAqcmVjKTsKKy1pbnQgdGRiX29mc19yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfb2ZmX3QgKmQpOworLWludCB0ZGJfb2ZzX3dyaXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfb2ZmX3QgKmQpOworLWludCB0ZGJfbG9ja19yZWNvcmQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmYpOworLWludCB0ZGJfdW5sb2NrX3JlY29yZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZik7CistaW50IHRkYl9yZWNfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpOworLWludCB0ZGJfcmVjX3dyaXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCBzdHJ1Y3QgbGlzdF9zdHJ1Y3QgKnJlYyk7CistaW50IHRkYl9kb19kZWxldGUoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCByZWNfcHRyLCBzdHJ1Y3QgbGlzdF9zdHJ1Y3QgKnJlYyk7CistdW5zaWduZWQgY2hhciAqdGRiX2FsbG9jX3JlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmZzZXQsIHRkYl9sZW5fdCBsZW4pOworLWludCB0ZGJfcGFyc2VfZGF0YShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5LAorK3N0YXRpYyBpbnQgdGRiX211bm1hcChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7Cisrc3RhdGljIHZvaWQgdGRiX21tYXAoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworK3N0YXRpYyBpbnQgdGRiX2xvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIGludCBsaXN0LCBpbnQgbHR5cGUpOworK3N0YXRpYyBpbnQgdGRiX3VubG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgaW50IGxpc3QsIGludCBsdHlwZSk7Cisrc3RhdGljIGludCB0ZGJfYnJsb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCBpbnQgcndfdHlwZSwgaW50IGxja190eXBlLCBpbnQgcHJvYmUsIHNpemVfdCBsZW4pOworK3N0YXRpYyBpbnQgdGRiX3RyYW5zYWN0aW9uX2xvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIGludCBsdHlwZSk7Cisrc3RhdGljIGludCB0ZGJfdHJhbnNhY3Rpb25fdW5sb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKKytzdGF0aWMgaW50IHRkYl9icmxvY2tfdXBncmFkZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc2l6ZV90IGxlbik7Cisrc3RhdGljIGludCB0ZGJfd3JpdGVfbG9ja19yZWNvcmQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmYpOworK3N0YXRpYyBpbnQgdGRiX3dyaXRlX3VubG9ja19yZWNvcmQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmYpOworK3N0YXRpYyBpbnQgdGRiX29mc19yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfb2ZmX3QgKmQpOworK3N0YXRpYyBpbnQgdGRiX29mc193cml0ZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgdGRiX29mZl90ICpkKTsKKytzdGF0aWMgdm9pZCAqdGRiX2NvbnZlcnQodm9pZCAqYnVmLCB1MzIgc2l6ZSk7Cisrc3RhdGljIGludCB0ZGJfZnJlZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpOworK3N0YXRpYyB0ZGJfb2ZmX3QgdGRiX2FsbG9jYXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfbGVuX3QgbGVuZ3RoLCBzdHJ1Y3QgbGlzdF9zdHJ1Y3QgKnJlYyk7Cisrc3RhdGljIGludCB0ZGJfb2ZzX3JlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmZzZXQsIHRkYl9vZmZfdCAqZCk7Cisrc3RhdGljIGludCB0ZGJfb2ZzX3dyaXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfb2ZmX3QgKmQpOworK3N0YXRpYyBpbnQgdGRiX2xvY2tfcmVjb3JkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2ZmKTsKKytzdGF0aWMgaW50IHRkYl91bmxvY2tfcmVjb3JkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2ZmKTsKKytzdGF0aWMgaW50IHRkYl9yZWNfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpOworK3N0YXRpYyBpbnQgdGRiX3JlY193cml0ZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpOworK3N0YXRpYyBpbnQgdGRiX2RvX2RlbGV0ZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IHJlY19wdHIsIHN0cnVjdCBsaXN0X3N0cnVjdCAqcmVjKTsKKytzdGF0aWMgdW5zaWduZWQgY2hhciAqdGRiX2FsbG9jX3JlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmZzZXQsIHRkYl9sZW5fdCBsZW4pOworK3N0YXRpYyBpbnQgdGRiX3BhcnNlX2RhdGEoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSwKKyAJCSAgIHRkYl9vZmZfdCBvZmZzZXQsIHRkYl9sZW5fdCBsZW4sCisgCQkgICBpbnQgKCpwYXJzZXIpKFREQl9EQVRBIGtleSwgVERCX0RBVEEgZGF0YSwKKyAJCQkJIHZvaWQgKnByaXZhdGVfZGF0YSksCisgCQkgICB2b2lkICpwcml2YXRlX2RhdGEpOworLXRkYl9vZmZfdCB0ZGJfZmluZF9sb2NrX2hhc2goc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSwgdTMyIGhhc2gsIGludCBsb2NrdHlwZSwKKytzdGF0aWMgdGRiX29mZl90IHRkYl9maW5kX2xvY2tfaGFzaChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5LCB1MzIgaGFzaCwgaW50IGxvY2t0eXBlLAorIAkJCSAgIHN0cnVjdCBsaXN0X3N0cnVjdCAqcmVjKTsKKy12b2lkIHRkYl9pb19pbml0KHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKKy1pbnQgdGRiX2V4cGFuZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IHNpemUpOworLWludCB0ZGJfcmVjX2ZyZWVfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZiwKKytzdGF0aWMgdm9pZCB0ZGJfaW9faW5pdChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7Cisrc3RhdGljIGludCB0ZGJfZXhwYW5kKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgc2l6ZSk7Cisrc3RhdGljIGludCB0ZGJfcmVjX2ZyZWVfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZiwKKyAJCSAgICAgIHN0cnVjdCBsaXN0X3N0cnVjdCAqcmVjKTsKKyAKKyAKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvdGRiL3BhdGNoZXMvdGRidG9vbC1pbmNsdWRlcyBiL2xpYi9leHQyZnMvdGRiL3BhdGNoZXMvdGRidG9vbC1pbmNsdWRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDc2Yzc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy90ZGJ0b29sLWluY2x1ZGVzCkBAIC0wLDAgKzEsMzAgQEAKK0luZGV4OiB0ZGJzYS90ZGJ0b29sLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0ZGJzYS5vcmlnL3RkYnRvb2wuYworKysrIHRkYnNhL3RkYnRvb2wuYworQEAgLTIxLDEwICsyMSwyMSBAQAorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisgCistI2luY2x1ZGUgInJlcGxhY2UuaCIKKy0jaW5jbHVkZSAic3lzdGVtL2xvY2FsZS5oIgorLSNpbmNsdWRlICJzeXN0ZW0vdGltZS5oIgorLSNpbmNsdWRlICJzeXN0ZW0vZmlsZXN5cy5oIgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDx0aW1lLmg+CisrI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPHN5cy90aW1lLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHNpZ25hbC5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysKKyAjaW5jbHVkZSAidGRiLmgiCisgCisgc3RhdGljIGludCBkb19jb21tYW5kKHZvaWQpOwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy90ZGJ0b29sLmMgYi9saWIvZXh0MmZzL3RkYnRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWFjMGM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy90ZGJ0b29sLmMKQEAgLTAsMCArMSw2MjEgQEAKKy8qCisgICBVbml4IFNNQi9DSUZTIGltcGxlbWVudGF0aW9uLgorICAgU2FtYmEgZGF0YWJhc2UgZnVuY3Rpb25zCisgICBDb3B5cmlnaHQgKEMpIEFuZHJldyBUcmlkZ2VsbCAgICAgICAgICAgICAgMTk5OS0yMDAwCisgICBDb3B5cmlnaHQgKEMpIFBhdWwgYFJ1c3R5JyBSdXNzZWxsCQkgICAyMDAwCisgICBDb3B5cmlnaHQgKEMpIEplcmVteSBBbGxpc29uCQkJICAgMjAwMAorICAgQ29weXJpZ2h0IChDKSBBbmRyZXcgRXNoICAgICAgICAgICAgICAgICAgICAgICAgMjAwMQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlICJ0ZGIuaCIKKworc3RhdGljIGludCBkb19jb21tYW5kKHZvaWQpOworY29uc3QgY2hhciAqY21kbmFtZTsKK2NoYXIgKmFyZzEsICphcmcyOworc2l6ZV90IGFyZzFsZW4sIGFyZzJsZW47CitpbnQgYkl0ZXJhdGUgPSAwOworY2hhciAqbGluZTsKK1REQl9EQVRBIGl0ZXJhdGVfa2J1ZjsKK2NoYXIgY21kbGluZVsxMDI0XTsKKworZW51bSBjb21tYW5kcyB7CisJQ01EX0NSRUFURV9UREIsCisJQ01EX09QRU5fVERCLAorCUNNRF9FUkFTRSwKKwlDTURfRFVNUCwKKwlDTURfSU5TRVJULAorCUNNRF9NT1ZFLAorCUNNRF9TVE9SRSwKKwlDTURfU0hPVywKKwlDTURfS0VZUywKKwlDTURfSEVYS0VZUywKKwlDTURfREVMRVRFLAorCUNNRF9MSVNUX0hBU0hfRlJFRSwKKwlDTURfTElTVF9GUkVFLAorCUNNRF9JTkZPLAorCUNNRF9GSVJTVCwKKwlDTURfTkVYVCwKKwlDTURfU1lTVEVNLAorCUNNRF9RVUlULAorCUNNRF9IRUxQCit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwllbnVtIGNvbW1hbmRzIGNtZDsKK30gQ09NTUFORF9UQUJMRTsKKworQ09NTUFORF9UQUJMRSBjbWRfdGFibGVbXSA9IHsKKwl7ImNyZWF0ZSIsCUNNRF9DUkVBVEVfVERCfSwKKwl7Im9wZW4iLAlDTURfT1BFTl9UREJ9LAorCXsiZXJhc2UiLAlDTURfRVJBU0V9LAorCXsiZHVtcCIsCUNNRF9EVU1QfSwKKwl7Imluc2VydCIsCUNNRF9JTlNFUlR9LAorCXsibW92ZSIsCUNNRF9NT1ZFfSwKKwl7InN0b3JlIiwJQ01EX1NUT1JFfSwKKwl7InNob3ciLAlDTURfU0hPV30sCisJeyJrZXlzIiwJQ01EX0tFWVN9LAorCXsiaGV4a2V5cyIsCUNNRF9IRVhLRVlTfSwKKwl7ImRlbGV0ZSIsCUNNRF9ERUxFVEV9LAorCXsibGlzdCIsCUNNRF9MSVNUX0hBU0hfRlJFRX0sCisJeyJmcmVlIiwJQ01EX0xJU1RfRlJFRX0sCisJeyJpbmZvIiwJQ01EX0lORk99LAorCXsiZmlyc3QiLAlDTURfRklSU1R9LAorCXsiMSIsCQlDTURfRklSU1R9LAorCXsibmV4dCIsCUNNRF9ORVhUfSwKKwl7Im4iLAkJQ01EX05FWFR9LAorCXsicXVpdCIsCUNNRF9RVUlUfSwKKwl7InEiLAkJQ01EX1FVSVR9LAorCXsiISIsCQlDTURfU1lTVEVNfSwKKwl7TlVMTCwJCUNNRF9IRUxQfQorfTsKKworLyogYSB0ZGIgdG9vbCBmb3IgbWFuaXB1bGF0aW5nIGEgdGRiIGRhdGFiYXNlICovCisKK3N0YXRpYyBUREJfQ09OVEVYVCAqdGRiOworCitzdGF0aWMgaW50IHByaW50X3JlYyhUREJfQ09OVEVYVCAqdGhlX3RkYiwgVERCX0RBVEEga2V5LCBUREJfREFUQSBkYnVmLCB2b2lkICpzdGF0ZSk7CitzdGF0aWMgaW50IHByaW50X2tleShUREJfQ09OVEVYVCAqdGhlX3RkYiwgVERCX0RBVEEga2V5LCBUREJfREFUQSBkYnVmLCB2b2lkICpzdGF0ZSk7CitzdGF0aWMgaW50IHByaW50X2hleGtleShUREJfQ09OVEVYVCAqdGhlX3RkYiwgVERCX0RBVEEga2V5LCBUREJfREFUQSBkYnVmLCB2b2lkICpzdGF0ZSk7CisKK3N0YXRpYyB2b2lkIHByaW50X2FzYyhjb25zdCBjaGFyICpidWYsaW50IGxlbikKK3sKKwlpbnQgaTsKKworCS8qIFdlJ3JlIHByb2JhYmx5IHByaW50aW5nIEFTQ0lJIHN0cmluZ3Mgc28gZG9uJ3QgdHJ5IHRvIGRpc3BsYXkKKwkgICB0aGUgdHJhaWxpbmcgTlVMTCBjaGFyYWN0ZXIuICovCisKKwlpZiAoYnVmW2xlbiAtIDFdID09IDApCisJICAgICAgICBsZW4tLTsKKworCWZvciAoaT0wO2k8bGVuO2krKykKKwkJcHJpbnRmKCIlYyIsaXNwcmludChidWZbaV0pP2J1ZltpXTonLicpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9kYXRhKGNvbnN0IGNoYXIgKmJ1ZixpbnQgbGVuKQoreworCWludCBpPTA7CisJaWYgKGxlbjw9MCkgcmV0dXJuOworCXByaW50ZigiWyUwM1hdICIsaSk7CisJZm9yIChpPTA7aTxsZW47KSB7CisJCXByaW50ZigiJTAyWCAiLChpbnQpYnVmW2ldKTsKKwkJaSsrOworCQlpZiAoaSU4ID09IDApIHByaW50ZigiICIpOworCQlpZiAoaSUxNiA9PSAwKSB7CisJCQlwcmludF9hc2MoJmJ1ZltpLTE2XSw4KTsgcHJpbnRmKCIgIik7CisJCQlwcmludF9hc2MoJmJ1ZltpLThdLDgpOyBwcmludGYoIlxuIik7CisJCQlpZiAoaTxsZW4pIHByaW50ZigiWyUwM1hdICIsaSk7CisJCX0KKwl9CisJaWYgKGklMTYpIHsKKwkJaW50IG47CisKKwkJbiA9IDE2IC0gKGklMTYpOworCQlwcmludGYoIiAiKTsKKwkJaWYgKG4+OCkgcHJpbnRmKCIgIik7CisJCXdoaWxlIChuLS0pIHByaW50ZigiICAgIik7CisKKwkJbiA9IGklMTY7CisJCWlmIChuID4gOCkgbiA9IDg7CisJCXByaW50X2FzYygmYnVmW2ktKGklMTYpXSxuKTsgcHJpbnRmKCIgIik7CisJCW4gPSAoaSUxNikgLSBuOworCQlpZiAobj4wKSBwcmludF9hc2MoJmJ1ZltpLW5dLG4pOworCQlwcmludGYoIlxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBoZWxwKHZvaWQpCit7CisJcHJpbnRmKCJcbiIKKyJ0ZGJ0b29sOiBcbiIKKyIgIGNyZWF0ZSAgICBkYm5hbWUgICAgIDogY3JlYXRlIGEgZGF0YWJhc2VcbiIKKyIgIG9wZW4gICAgICBkYm5hbWUgICAgIDogb3BlbiBhbiBleGlzdGluZyBkYXRhYmFzZVxuIgorIiAgZXJhc2UgICAgICAgICAgICAgICAgOiBlcmFzZSB0aGUgZGF0YWJhc2VcbiIKKyIgIGR1bXAgICAgICAgICAgICAgICAgIDogZHVtcCB0aGUgZGF0YWJhc2UgYXMgc3RyaW5nc1xuIgorIiAga2V5cyAgICAgICAgICAgICAgICAgOiBkdW1wIHRoZSBkYXRhYmFzZSBrZXlzIGFzIHN0cmluZ3NcbiIKKyIgIGhleGtleXMgICAgICAgICAgICAgIDogZHVtcCB0aGUgZGF0YWJhc2Uga2V5cyBhcyBoZXggdmFsdWVzXG4iCisiICBpbmZvICAgICAgICAgICAgICAgICA6IHByaW50IHN1bW1hcnkgaW5mbyBhYm91dCB0aGUgZGF0YWJhc2VcbiIKKyIgIGluc2VydCAgICBrZXkgIGRhdGEgIDogaW5zZXJ0IGEgcmVjb3JkXG4iCisiICBtb3ZlICAgICAga2V5ICBmaWxlICA6IG1vdmUgYSByZWNvcmQgdG8gYSBkZXN0aW5hdGlvbiB0ZGJcbiIKKyIgIHN0b3JlICAgICBrZXkgIGRhdGEgIDogc3RvcmUgYSByZWNvcmQgKHJlcGxhY2UpXG4iCisiICBzaG93ICAgICAga2V5ICAgICAgICA6IHNob3cgYSByZWNvcmQgYnkga2V5XG4iCisiICBkZWxldGUgICAga2V5ICAgICAgICA6IGRlbGV0ZSBhIHJlY29yZCBieSBrZXlcbiIKKyIgIGxpc3QgICAgICAgICAgICAgICAgIDogcHJpbnQgdGhlIGRhdGFiYXNlIGhhc2ggdGFibGUgYW5kIGZyZWVsaXN0XG4iCisiICBmcmVlICAgICAgICAgICAgICAgICA6IHByaW50IHRoZSBkYXRhYmFzZSBmcmVlbGlzdFxuIgorIiAgISBjb21tYW5kICAgICAgICAgICAgOiBleGVjdXRlIHN5c3RlbSBjb21tYW5kXG4iCisiICAxIHwgZmlyc3QgICAgICAgICAgICA6IHByaW50IHRoZSBmaXJzdCByZWNvcmRcbiIKKyIgIG4gfCBuZXh0ICAgICAgICAgICAgIDogcHJpbnQgdGhlIG5leHQgcmVjb3JkXG4iCisiICBxIHwgcXVpdCAgICAgICAgICAgICA6IHRlcm1pbmF0ZVxuIgorIiAgXFxuICAgICAgICAgICAgICAgICAgIDogcmVwZWF0ICduZXh0JyBjb21tYW5kXG4iCisiXG4iKTsKK30KKworc3RhdGljIHZvaWQgdGVycm9yKGNvbnN0IGNoYXIgKndoeSkKK3sKKwlwcmludGYoIiVzXG4iLCB3aHkpOworfQorCitzdGF0aWMgdm9pZCBjcmVhdGVfdGRiKGNvbnN0IGNoYXIgKnRkYm5hbWUpCit7CisJaWYgKHRkYikgdGRiX2Nsb3NlKHRkYik7CisJdGRiID0gdGRiX29wZW4odGRibmFtZSwgMCwgVERCX0NMRUFSX0lGX0ZJUlNULAorCQkgICAgICAgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2MDApOworCWlmICghdGRiKSB7CisJCXByaW50ZigiQ291bGQgbm90IGNyZWF0ZSAlczogJXNcbiIsIHRkYm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBvcGVuX3RkYihjb25zdCBjaGFyICp0ZGJuYW1lKQoreworCWlmICh0ZGIpIHRkYl9jbG9zZSh0ZGIpOworCXRkYiA9IHRkYl9vcGVuKHRkYm5hbWUsIDAsIDAsIE9fUkRXUiwgMDYwMCk7CisJaWYgKCF0ZGIpIHsKKwkJcHJpbnRmKCJDb3VsZCBub3Qgb3BlbiAlczogJXNcbiIsIHRkYm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfdGRiKGNoYXIgKmtleW5hbWUsIHNpemVfdCBrZXlsZW4sIGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhbGVuKQoreworCVREQl9EQVRBIGtleSwgZGJ1ZjsKKworCWlmICgoa2V5bmFtZSA9PSBOVUxMKSB8fCAoa2V5bGVuID09IDApKSB7CisJCXRlcnJvcigibmVlZCBrZXkiKTsKKwkJcmV0dXJuOworCX0KKworCWtleS5kcHRyID0gKHVuc2lnbmVkIGNoYXIgKilrZXluYW1lOworCWtleS5kc2l6ZSA9IGtleWxlbjsKKwlkYnVmLmRwdHIgPSAodW5zaWduZWQgY2hhciAqKWRhdGE7CisJZGJ1Zi5kc2l6ZSA9IGRhdGFsZW47CisKKwlpZiAodGRiX3N0b3JlKHRkYiwga2V5LCBkYnVmLCBUREJfSU5TRVJUKSA9PSAtMSkgeworCQl0ZXJyb3IoImluc2VydCBmYWlsZWQiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0b3JlX3RkYihjaGFyICprZXluYW1lLCBzaXplX3Qga2V5bGVuLCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YWxlbikKK3sKKwlUREJfREFUQSBrZXksIGRidWY7CisKKwlpZiAoKGtleW5hbWUgPT0gTlVMTCkgfHwgKGtleWxlbiA9PSAwKSkgeworCQl0ZXJyb3IoIm5lZWQga2V5Iik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKGRhdGEgPT0gTlVMTCkgfHwgKGRhdGFsZW4gPT0gMCkpIHsKKwkJdGVycm9yKCJuZWVkIGRhdGEiKTsKKwkJcmV0dXJuOworCX0KKworCWtleS5kcHRyID0gKHVuc2lnbmVkIGNoYXIgKilrZXluYW1lOworCWtleS5kc2l6ZSA9IGtleWxlbjsKKwlkYnVmLmRwdHIgPSAodW5zaWduZWQgY2hhciAqKWRhdGE7CisJZGJ1Zi5kc2l6ZSA9IGRhdGFsZW47CisKKwlwcmludGYoIlN0b3Jpbmcga2V5OlxuIik7CisJcHJpbnRfcmVjKHRkYiwga2V5LCBkYnVmLCBOVUxMKTsKKworCWlmICh0ZGJfc3RvcmUodGRiLCBrZXksIGRidWYsIFREQl9SRVBMQUNFKSA9PSAtMSkgeworCQl0ZXJyb3IoInN0b3JlIGZhaWxlZCIpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd190ZGIoY2hhciAqa2V5bmFtZSwgc2l6ZV90IGtleWxlbikKK3sKKwlUREJfREFUQSBrZXksIGRidWY7CisKKwlpZiAoKGtleW5hbWUgPT0gTlVMTCkgfHwgKGtleWxlbiA9PSAwKSkgeworCQl0ZXJyb3IoIm5lZWQga2V5Iik7CisJCXJldHVybjsKKwl9CisKKwlrZXkuZHB0ciA9ICh1bnNpZ25lZCBjaGFyICopa2V5bmFtZTsKKwlrZXkuZHNpemUgPSBrZXlsZW47CisKKwlkYnVmID0gdGRiX2ZldGNoKHRkYiwga2V5KTsKKwlpZiAoIWRidWYuZHB0cikgeworCSAgICB0ZXJyb3IoImZldGNoIGZhaWxlZCIpOworCSAgICByZXR1cm47CisJfQorCisJcHJpbnRfcmVjKHRkYiwga2V5LCBkYnVmLCBOVUxMKTsKKworCWZyZWUoIGRidWYuZHB0ciApOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfdGRiKGNoYXIgKmtleW5hbWUsIHNpemVfdCBrZXlsZW4pCit7CisJVERCX0RBVEEga2V5OworCisJaWYgKChrZXluYW1lID09IE5VTEwpIHx8IChrZXlsZW4gPT0gMCkpIHsKKwkJdGVycm9yKCJuZWVkIGtleSIpOworCQlyZXR1cm47CisJfQorCisJa2V5LmRwdHIgPSAodW5zaWduZWQgY2hhciAqKWtleW5hbWU7CisJa2V5LmRzaXplID0ga2V5bGVuOworCisJaWYgKHRkYl9kZWxldGUodGRiLCBrZXkpICE9IDApIHsKKwkJdGVycm9yKCJkZWxldGUgZmFpbGVkIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBtb3ZlX3JlYyhjaGFyICprZXluYW1lLCBzaXplX3Qga2V5bGVuLCBjaGFyKiB0ZGJuYW1lKQoreworCVREQl9EQVRBIGtleSwgZGJ1ZjsKKwlUREJfQ09OVEVYVCAqZHN0X3RkYjsKKworCWlmICgoa2V5bmFtZSA9PSBOVUxMKSB8fCAoa2V5bGVuID09IDApKSB7CisJCXRlcnJvcigibmVlZCBrZXkiKTsKKwkJcmV0dXJuOworCX0KKworCWlmICggIXRkYm5hbWUgKSB7CisJCXRlcnJvcigibmVlZCBkZXN0aW5hdGlvbiB0ZGIgbmFtZSIpOworCQlyZXR1cm47CisJfQorCisJa2V5LmRwdHIgPSAodW5zaWduZWQgY2hhciAqKWtleW5hbWU7CisJa2V5LmRzaXplID0ga2V5bGVuOworCisJZGJ1ZiA9IHRkYl9mZXRjaCh0ZGIsIGtleSk7CisJaWYgKCFkYnVmLmRwdHIpIHsKKwkJdGVycm9yKCJmZXRjaCBmYWlsZWQiKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50X3JlYyh0ZGIsIGtleSwgZGJ1ZiwgTlVMTCk7CisKKwlkc3RfdGRiID0gdGRiX29wZW4odGRibmFtZSwgMCwgMCwgT19SRFdSLCAwNjAwKTsKKwlpZiAoICFkc3RfdGRiICkgeworCQl0ZXJyb3IoInVuYWJsZSB0byBvcGVuIGRlc3RpbmF0aW9uIHRkYiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKCB0ZGJfc3RvcmUoIGRzdF90ZGIsIGtleSwgZGJ1ZiwgVERCX1JFUExBQ0UgKSA9PSAtMSApIHsKKwkJdGVycm9yKCJmYWlsZWQgdG8gbW92ZSByZWNvcmQiKTsKKwl9CisJZWxzZQorCQlwcmludGYoInJlY29yZCBtb3ZlZFxuIik7CisKKwl0ZGJfY2xvc2UoIGRzdF90ZGIgKTsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBwcmludF9yZWMoVERCX0NPTlRFWFQgKnRoZV90ZGIsIFREQl9EQVRBIGtleSwgVERCX0RBVEEgZGJ1Ziwgdm9pZCAqc3RhdGUpCit7CisJcHJpbnRmKCJcbmtleSAlZCBieXRlc1xuIiwgKGludClrZXkuZHNpemUpOworCXByaW50X2FzYygoY29uc3QgY2hhciAqKWtleS5kcHRyLCBrZXkuZHNpemUpOworCXByaW50ZigiXG5kYXRhICVkIGJ5dGVzXG4iLCAoaW50KWRidWYuZHNpemUpOworCXByaW50X2RhdGEoKGNvbnN0IGNoYXIgKilkYnVmLmRwdHIsIGRidWYuZHNpemUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByaW50X2tleShUREJfQ09OVEVYVCAqdGhlX3RkYiwgVERCX0RBVEEga2V5LCBUREJfREFUQSBkYnVmLCB2b2lkICpzdGF0ZSkKK3sKKwlwcmludGYoImtleSAlZCBieXRlczogIiwgKGludClrZXkuZHNpemUpOworCXByaW50X2FzYygoY29uc3QgY2hhciAqKWtleS5kcHRyLCBrZXkuZHNpemUpOworCXByaW50ZigiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcmludF9oZXhrZXkoVERCX0NPTlRFWFQgKnRoZV90ZGIsIFREQl9EQVRBIGtleSwgVERCX0RBVEEgZGJ1Ziwgdm9pZCAqc3RhdGUpCit7CisJcHJpbnRmKCJrZXkgJWQgYnl0ZXNcbiIsIChpbnQpa2V5LmRzaXplKTsKKwlwcmludF9kYXRhKChjb25zdCBjaGFyICopa2V5LmRwdHIsIGtleS5kc2l6ZSk7CisJcHJpbnRmKCJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvdGFsX2J5dGVzOworCitzdGF0aWMgaW50IHRyYXZlcnNlX2ZuKFREQl9DT05URVhUICp0aGVfdGRiLCBUREJfREFUQSBrZXksIFREQl9EQVRBIGRidWYsIHZvaWQgKnN0YXRlKQoreworCXRvdGFsX2J5dGVzICs9IGRidWYuZHNpemU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGluZm9fdGRiKHZvaWQpCit7CisJaW50IGNvdW50OworCXRvdGFsX2J5dGVzID0gMDsKKwlpZiAoKGNvdW50ID0gdGRiX3RyYXZlcnNlKHRkYiwgdHJhdmVyc2VfZm4sIE5VTEwpKSA9PSAtMSkKKwkJcHJpbnRmKCJFcnJvciA9ICVzXG4iLCB0ZGJfZXJyb3JzdHIodGRiKSk7CisJZWxzZQorCQlwcmludGYoIiVkIHJlY29yZHMgdG90YWxsaW5nICVkIGJ5dGVzXG4iLCBjb3VudCwgdG90YWxfYnl0ZXMpOworfQorCitzdGF0aWMgY2hhciAqdGRiX2dldGxpbmUoY29uc3QgY2hhciAqcHJvbXB0KQoreworCXN0YXRpYyBjaGFyIHRoaXNsaW5lWzEwMjRdOworCWNoYXIgKnA7CisJZnB1dHMocHJvbXB0LCBzdGRvdXQpOworCXRoaXNsaW5lWzBdID0gMDsKKwlwID0gZmdldHModGhpc2xpbmUsIHNpemVvZih0aGlzbGluZSktMSwgc3RkaW4pOworCWlmIChwKSBwID0gc3RyY2hyKHAsICdcbicpOworCWlmIChwKSAqcCA9IDA7CisJcmV0dXJuIHA/dGhpc2xpbmU6TlVMTDsKK30KKworc3RhdGljIGludCBkb19kZWxldGVfZm4oVERCX0NPTlRFWFQgKnRoZV90ZGIsIFREQl9EQVRBIGtleSwgVERCX0RBVEEgZGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0YXRlKQoreworICAgIHJldHVybiB0ZGJfZGVsZXRlKHRoZV90ZGIsIGtleSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpcnN0X3JlY29yZChUREJfQ09OVEVYVCAqdGhlX3RkYiwgVERCX0RBVEEgKnBrZXkpCit7CisJVERCX0RBVEEgZGJ1ZjsKKwkqcGtleSA9IHRkYl9maXJzdGtleSh0aGVfdGRiKTsKKworCWRidWYgPSB0ZGJfZmV0Y2godGhlX3RkYiwgKnBrZXkpOworCWlmICghZGJ1Zi5kcHRyKSB0ZXJyb3IoImZldGNoIGZhaWxlZCIpOworCWVsc2UgeworCQlwcmludF9yZWModGhlX3RkYiwgKnBrZXksIGRidWYsIE5VTEwpOworCX0KK30KKworc3RhdGljIHZvaWQgbmV4dF9yZWNvcmQoVERCX0NPTlRFWFQgKnRoZV90ZGIsIFREQl9EQVRBICpwa2V5KQoreworCVREQl9EQVRBIGRidWY7CisJKnBrZXkgPSB0ZGJfbmV4dGtleSh0aGVfdGRiLCAqcGtleSk7CisKKwlkYnVmID0gdGRiX2ZldGNoKHRoZV90ZGIsICpwa2V5KTsKKwlpZiAoIWRidWYuZHB0cikKKwkJdGVycm9yKCJmZXRjaCBmYWlsZWQiKTsKKwllbHNlCisJCXByaW50X3JlYyh0aGVfdGRiLCAqcGtleSwgZGJ1ZiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgZG9fY29tbWFuZCh2b2lkKQoreworCUNPTU1BTkRfVEFCTEUgKmN0cCA9IGNtZF90YWJsZTsKKwllbnVtIGNvbW1hbmRzIG15Y21kID0gQ01EX0hFTFA7CisJaW50IGNtZF9sZW47CisKKwlpZiAoY21kbmFtZSAmJiBzdHJsZW4oY21kbmFtZSkgPT0gMCkgeworCSAgICBteWNtZCA9IENNRF9ORVhUOworCX0gZWxzZSB7CisJICAgIHdoaWxlIChjdHAtPm5hbWUpIHsKKwkJY21kX2xlbiA9IHN0cmxlbihjdHAtPm5hbWUpOworCQlpZiAoc3RybmNtcChjdHAtPm5hbWUsY21kbmFtZSxjbWRfbGVuKSA9PSAwKSB7CisJCQlteWNtZCA9IGN0cC0+Y21kOworCQkJYnJlYWs7CisJCX0KKwkJY3RwKys7CisJICAgIH0KKwl9CisKKwlzd2l0Y2ggKG15Y21kKSB7CisJY2FzZSBDTURfQ1JFQVRFX1REQjoKKyAgICAgICAgICAgIGJJdGVyYXRlID0gMDsKKyAgICAgICAgICAgIGNyZWF0ZV90ZGIoYXJnMSk7CisJICAgIHJldHVybiAwOworCWNhc2UgQ01EX09QRU5fVERCOgorICAgICAgICAgICAgYkl0ZXJhdGUgPSAwOworICAgICAgICAgICAgb3Blbl90ZGIoYXJnMSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKwljYXNlIENNRF9TWVNURU06CisJICAgIC8qIFNoZWxsIGNvbW1hbmQgKi8KKwkgICAgc3lzdGVtKGFyZzEpOworCSAgICByZXR1cm4gMDsKKwljYXNlIENNRF9RVUlUOgorCSAgICByZXR1cm4gMTsKKwlkZWZhdWx0OgorCSAgICAvKiBhbGwgdGhlIHJlc3QgcmVxdWlyZSBhIG9wZW4gZGF0YWJhc2UgKi8KKwkgICAgaWYgKCF0ZGIpIHsKKwkJYkl0ZXJhdGUgPSAwOworCQl0ZXJyb3IoImRhdGFiYXNlIG5vdCBvcGVuIik7CisJCWhlbHAoKTsKKwkJcmV0dXJuIDA7CisJICAgIH0KKwkgICAgc3dpdGNoIChteWNtZCkgeworCSAgICBjYXNlIENNRF9FUkFTRToKKwkJYkl0ZXJhdGUgPSAwOworCQl0ZGJfdHJhdmVyc2UodGRiLCBkb19kZWxldGVfZm4sIE5VTEwpOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfRFVNUDoKKwkJYkl0ZXJhdGUgPSAwOworCQl0ZGJfdHJhdmVyc2UodGRiLCBwcmludF9yZWMsIE5VTEwpOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfSU5TRVJUOgorCQliSXRlcmF0ZSA9IDA7CisJCWluc2VydF90ZGIoYXJnMSwgYXJnMWxlbixhcmcyLGFyZzJsZW4pOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfTU9WRToKKwkJYkl0ZXJhdGUgPSAwOworCQltb3ZlX3JlYyhhcmcxLGFyZzFsZW4sYXJnMik7CisJCXJldHVybiAwOworCSAgICBjYXNlIENNRF9TVE9SRToKKwkJYkl0ZXJhdGUgPSAwOworCQlzdG9yZV90ZGIoYXJnMSxhcmcxbGVuLGFyZzIsYXJnMmxlbik7CisJCXJldHVybiAwOworCSAgICBjYXNlIENNRF9TSE9XOgorCQliSXRlcmF0ZSA9IDA7CisJCXNob3dfdGRiKGFyZzEsIGFyZzFsZW4pOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfS0VZUzoKKwkJdGRiX3RyYXZlcnNlKHRkYiwgcHJpbnRfa2V5LCBOVUxMKTsKKwkJcmV0dXJuIDA7CisJICAgIGNhc2UgQ01EX0hFWEtFWVM6CisJCXRkYl90cmF2ZXJzZSh0ZGIsIHByaW50X2hleGtleSwgTlVMTCk7CisJCXJldHVybiAwOworCSAgICBjYXNlIENNRF9ERUxFVEU6CisJCWJJdGVyYXRlID0gMDsKKwkJZGVsZXRlX3RkYihhcmcxLGFyZzFsZW4pOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfTElTVF9IQVNIX0ZSRUU6CisJCXRkYl9kdW1wX2FsbCh0ZGIpOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfTElTVF9GUkVFOgorCQl0ZGJfcHJpbnRmcmVlbGlzdCh0ZGIpOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfSU5GTzoKKwkJaW5mb190ZGIoKTsKKwkJcmV0dXJuIDA7CisJICAgIGNhc2UgQ01EX0ZJUlNUOgorCQliSXRlcmF0ZSA9IDE7CisJCWZpcnN0X3JlY29yZCh0ZGIsICZpdGVyYXRlX2tidWYpOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfTkVYVDoKKwkgICAgICAgaWYgKGJJdGVyYXRlKQorCQkgIG5leHRfcmVjb3JkKHRkYiwgJml0ZXJhdGVfa2J1Zik7CisJCXJldHVybiAwOworCSAgICBjYXNlIENNRF9IRUxQOgorCQloZWxwKCk7CisJCXJldHVybiAwOworICAgICAgICAgICAgY2FzZSBDTURfQ1JFQVRFX1REQjoKKyAgICAgICAgICAgIGNhc2UgQ01EX09QRU5fVERCOgorICAgICAgICAgICAgY2FzZSBDTURfU1lTVEVNOgorICAgICAgICAgICAgY2FzZSBDTURfUVVJVDoKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIHVuaGFuZGxlZCBjb21tYW5kcy4gIGNhc2VzIGluY2x1ZGVkIGhlcmUgdG8gYXZvaWQgY29tcGlsZXIKKyAgICAgICAgICAgICAgICAgKiB3YXJuaW5ncy4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKwkgICAgfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqY29udmVydF9zdHJpbmcoY2hhciAqaW5zdHJpbmcsIHNpemVfdCAqc2l6ZXApCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IDA7CisgICAgY2hhciAqb3V0cCwgKmlucDsKKyAgICBjaGFyIHRlbXBbM107CisKKworICAgIG91dHAgPSBpbnAgPSBpbnN0cmluZzsKKworICAgIHdoaWxlICgqaW5wKSB7CisJaWYgKCppbnAgPT0gJ1xcJykgeworCSAgICBpbnArKzsKKwkgICAgaWYgKCppbnAgJiYgc3RyY2hyKCIwMTIzNDU2Nzg5YWJjZGVmQUJDREVGIiwoaW50KSppbnApKSB7CisJCXRlbXBbMF0gPSAqaW5wKys7CisJCXRlbXBbMV0gPSAnXDAnOworCQlpZiAoKmlucCAmJiBzdHJjaHIoIjAxMjM0NTY3ODlhYmNkZWZBQkNERUYiLChpbnQpKmlucCkpIHsKKwkJICAgIHRlbXBbMV0gPSAqaW5wKys7CisJCSAgICB0ZW1wWzJdID0gJ1wwJzsKKwkJfQorCQkqb3V0cCsrID0gKGNoYXIpc3RydG9sKChjb25zdCBjaGFyICopdGVtcCxOVUxMLDE2KTsKKwkgICAgfSBlbHNlIHsKKwkJKm91dHArKyA9ICppbnArKzsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgICpvdXRwKysgPSAqaW5wKys7CisJfQorCWxlbmd0aCsrOworICAgIH0KKyAgICAqc2l6ZXAgPSBsZW5ndGg7CisgICAgcmV0dXJuIGluc3RyaW5nOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGNtZG5hbWUgPSAiIjsKKyAgICBhcmcxID0gTlVMTDsKKyAgICBhcmcxbGVuID0gMDsKKyAgICBhcmcyID0gTlVMTDsKKyAgICBhcmcybGVuID0gMDsKKworICAgIGlmIChhcmd2WzFdKSB7CisJY21kbmFtZSA9ICJvcGVuIjsKKwlhcmcxID0gYXJndlsxXTsKKyAgICAgICAgZG9fY29tbWFuZCgpOworCWNtZG5hbWUgPSAgIiI7CisJYXJnMSA9IE5VTEw7CisgICAgfQorCisgICAgc3dpdGNoIChhcmdjKSB7CisJY2FzZSAxOgorCWNhc2UgMjoKKwkgICAgLyogSW50ZXJhY3RpdmUgbW9kZSAqLworCSAgICB3aGlsZSAoKGNtZG5hbWUgPSB0ZGJfZ2V0bGluZSgidGRiPiAiKSkpIHsKKwkJYXJnMiA9IGFyZzEgPSBOVUxMOworCQlpZiAoKGFyZzEgPSBzdHJjaHIoKGNvbnN0IGNoYXIgKiljbWRuYW1lLCcgJykpICE9IE5VTEwpIHsKKwkJICAgIGFyZzErKzsKKwkJICAgIGFyZzIgPSBhcmcxOworCQkgICAgd2hpbGUgKCphcmcyKSB7CisJCQlpZiAoKmFyZzIgPT0gJyAnKSB7CisJCQkgICAgKmFyZzIrKyA9ICdcMCc7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQlpZiAoKCphcmcyKysgPT0gJ1xcJykgJiYgKCphcmcyID09ICcgJykpIHsKKwkJCSAgICBhcmcyKys7CisJCQl9CisJCSAgICB9CisJCX0KKwkJaWYgKGFyZzEpIGFyZzEgPSBjb252ZXJ0X3N0cmluZyhhcmcxLCZhcmcxbGVuKTsKKwkJaWYgKGFyZzIpIGFyZzIgPSBjb252ZXJ0X3N0cmluZyhhcmcyLCZhcmcybGVuKTsKKwkJaWYgKGRvX2NvbW1hbmQoKSkgYnJlYWs7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSA1OgorCSAgICBhcmcyID0gY29udmVydF9zdHJpbmcoYXJndls0XSwmYXJnMmxlbik7CisJY2FzZSA0OgorCSAgICBhcmcxID0gY29udmVydF9zdHJpbmcoYXJndlszXSwmYXJnMWxlbik7CisJY2FzZSAzOgorCSAgICBjbWRuYW1lID0gYXJndlsyXTsKKwlkZWZhdWx0OgorCSAgICBkb19jb21tYW5kKCk7CisJICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICh0ZGIpIHRkYl9jbG9zZSh0ZGIpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL3Rlc3RfaW8uYyBiL2xpYi9leHQyZnMvdGVzdF9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMGQwMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL3Rlc3RfaW8uYwpAQCAtMCwwICsxLDUwNiBAQAorLyoKKyAqIHRlc3RfaW8uYyAtLS0gVGhpcyBpcyB0aGUgVGVzdCBJL08gaW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BSQ1RMX0gKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNlbHNlCisjZGVmaW5lIFBSX0dFVF9EVU1QQUJMRSAzCisjZW5kaWYKKyNpZiAoIWRlZmluZWQoSEFWRV9QUkNUTCkgJiYgZGVmaW5lZChsaW51eCkpCisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisvKgorICogRm9yIGNoZWNraW5nIHN0cnVjdHVyZSBtYWdpYyBudW1iZXJzLi4uCisgKi8KKworI2RlZmluZSBFWFQyX0NIRUNLX01BR0lDKHN0cnVjdCwgY29kZSkgXAorCSAgaWYgKChzdHJ1Y3QpLT5tYWdpYyAhPSAoY29kZSkpIHJldHVybiAoY29kZSkKKworc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhIHsKKwlpbnQJbWFnaWM7CisJaW9fY2hhbm5lbCByZWFsOworCWludCBmbGFnczsKKwlGSUxFICpvdXRmaWxlOworCXVuc2lnbmVkIGxvbmcgYmxvY2s7CisJaW50IHJlYWRfYWJvcnRfY291bnQsIHdyaXRlX2Fib3J0X2NvdW50OworCXZvaWQgKCpyZWFkX2JsaykodW5zaWduZWQgbG9uZyBibG9jaywgaW50IGNvdW50LCBlcnJjb2RlX3QgZXJyKTsKKwl2b2lkICgqd3JpdGVfYmxrKSh1bnNpZ25lZCBsb25nIGJsb2NrLCBpbnQgY291bnQsIGVycmNvZGVfdCBlcnIpOworCXZvaWQgKCpzZXRfYmxrc2l6ZSkoaW50IGJsa3NpemUsIGVycmNvZGVfdCBlcnIpOworCXZvaWQgKCp3cml0ZV9ieXRlKSh1bnNpZ25lZCBsb25nIGJsb2NrLCBpbnQgY291bnQsIGVycmNvZGVfdCBlcnIpOworCXZvaWQgKCpyZWFkX2JsazY0KSh1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssIGludCBjb3VudCwgZXJyY29kZV90IGVycik7CisJdm9pZCAoKndyaXRlX2JsazY0KSh1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssIGludCBjb3VudCwgZXJyY29kZV90IGVycik7Cit9OworCisvKgorICogVGhlc2UgZ2xvYmFsIHZhcmlhYmxlIGNhbiBiZSBzZXQgYnkgdGhlIHRlc3QgcHJvZ3JhbSBhcworICogbmVjZXNzYXJ5ICpiZWZvcmUqIGNhbGxpbmcgdGVzdF9vcGVuCisgKi8KK2lvX21hbmFnZXIgdGVzdF9pb19iYWNraW5nX21hbmFnZXIgPSAwOwordm9pZCAoKnRlc3RfaW9fY2JfcmVhZF9ibGspCisJKHVuc2lnbmVkIGxvbmcgYmxvY2ssIGludCBjb3VudCwgZXJyY29kZV90IGVycikgPSAwOwordm9pZCAoKnRlc3RfaW9fY2Jfd3JpdGVfYmxrKQorCSh1bnNpZ25lZCBsb25nIGJsb2NrLCBpbnQgY291bnQsIGVycmNvZGVfdCBlcnIpID0gMDsKK3ZvaWQgKCp0ZXN0X2lvX2NiX3JlYWRfYmxrNjQpCisJKHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywgaW50IGNvdW50LCBlcnJjb2RlX3QgZXJyKSA9IDA7Cit2b2lkICgqdGVzdF9pb19jYl93cml0ZV9ibGs2NCkKKwkodW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLCBpbnQgY291bnQsIGVycmNvZGVfdCBlcnIpID0gMDsKK3ZvaWQgKCp0ZXN0X2lvX2NiX3NldF9ibGtzaXplKQorCShpbnQgYmxrc2l6ZSwgZXJyY29kZV90IGVycikgPSAwOwordm9pZCAoKnRlc3RfaW9fY2Jfd3JpdGVfYnl0ZSkKKwkodW5zaWduZWQgbG9uZyBibG9jaywgaW50IGNvdW50LCBlcnJjb2RlX3QgZXJyKSA9IDA7CisKKy8qCisgKiBUZXN0IGZsYWdzCisgKi8KKyNkZWZpbmUgVEVTVF9GTEFHX1JFQUQJCQkweDAxCisjZGVmaW5lIFRFU1RfRkxBR19XUklURQkJCTB4MDIKKyNkZWZpbmUgVEVTVF9GTEFHX1NFVF9CTEtTSVpFCQkweDA0CisjZGVmaW5lIFRFU1RfRkxBR19GTFVTSAkJCTB4MDgKKyNkZWZpbmUgVEVTVF9GTEFHX0RVTVAJCQkweDEwCisjZGVmaW5lIFRFU1RfRkxBR19TRVRfT1BUSU9OCQkweDIwCisjZGVmaW5lIFRFU1RfRkxBR19ESVNDQVJECQkweDQwCisKK3N0YXRpYyB2b2lkIHRlc3RfZHVtcF9ibG9jayhpb19jaGFubmVsIGNoYW5uZWwsCisJCQkgICAgc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICpkYXRhLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgYmxvY2ssIGNvbnN0IHZvaWQgKmJ1ZikKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjcDsKKwlGSUxFICpmID0gZGF0YS0+b3V0ZmlsZTsKKwlpbnQJaTsKKwl1bnNpZ25lZCBsb25nCWNrc3VtID0gMDsKKworCWZvciAoaT0wLCBjcCA9IGJ1ZjsgaSA8IGNoYW5uZWwtPmJsb2NrX3NpemU7IGkrKywgY3ArKykgeworCQlja3N1bSArPSAqY3A7CisJfQorCWZwcmludGYoZiwgIkNvbnRlbnRzIG9mIGJsb2NrICVsdSwgY2hlY2tzdW0gJTA4bHU6IFxuIiwgYmxvY2ssIGNrc3VtKTsKKwlmb3IgKGk9MCwgY3AgPSBidWY7IGkgPCBjaGFubmVsLT5ibG9ja19zaXplOyBpKyssIGNwKyspIHsKKwkJaWYgKChpICUgMTYpID09IDApCisJCQlmcHJpbnRmKGYsICIlMDR4OiAiLCBpKTsKKwkJZnByaW50ZihmLCAiJTAyeCVjIiwgKmNwLCAoKGkgJSAxNikgPT0gMTUpID8gJ1xuJyA6ICcgJyk7CisJfQorfQorCisvKgorICogRmx1c2ggZGF0YSBidWZmZXJzIHRvIGRpc2suCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgdGVzdF9mbHVzaChpb19jaGFubmVsIGNoYW5uZWwpCit7CisJc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhCSpkYXRhOworCWVycmNvZGVfdAkJCXJldHZhbCA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKiljaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX1RFU1RfSU9fQ0hBTk5FTCk7CisKKwlpZiAoZGF0YS0+cmVhbCkKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9mbHVzaChkYXRhLT5yZWFsKTsKKworCWlmIChkYXRhLT5mbGFncyAmIFRFU1RfRkxBR19GTFVTSCkKKwkJZnByaW50ZihkYXRhLT5vdXRmaWxlLCAiVGVzdF9pbzogZmx1c2goKSByZXR1cm5lZCAlc1xuIiwKKwkJCXJldHZhbCA/IGVycm9yX21lc3NhZ2UocmV0dmFsKSA6ICJPSyIpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgdGVzdF9hYm9ydChpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgYmxvY2spCit7CisJc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICpkYXRhOworCUZJTEUgKmY7CisKKwlkYXRhID0gKHN0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJZiA9IGRhdGEtPm91dGZpbGU7CisJdGVzdF9mbHVzaChjaGFubmVsKTsKKworCWZwcmludGYoZiwgIkFib3J0aW5nIGR1ZSB0byBJL08gdG8gYmxvY2sgJWx1XG4iLCBibG9jayk7CisJZmZsdXNoKGYpOworCWFib3J0KCk7Cit9CisKK3N0YXRpYyBjaGFyICpzYWZlX2dldGVudihjb25zdCBjaGFyICphcmcpCit7CisJaWYgKChnZXR1aWQoKSAhPSBnZXRldWlkKCkpIHx8IChnZXRnaWQoKSAhPSBnZXRlZ2lkKCkpKQorCQlyZXR1cm4gTlVMTDsKKyNpZiBIQVZFX1BSQ1RMCisJaWYgKHByY3RsKFBSX0dFVF9EVU1QQUJMRSwgMCwgMCwgMCwgMCkgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisjZWxzZQorI2lmIChkZWZpbmVkKGxpbnV4KSAmJiBkZWZpbmVkKFNZU19wcmN0bCkpCisJaWYgKHN5c2NhbGwoU1lTX3ByY3RsLCBQUl9HRVRfRFVNUEFCTEUsIDAsIDAsIDAsIDApID09IDApCisJCXJldHVybiBOVUxMOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9TRUNVUkVfR0VURU5WKQorCXJldHVybiBzZWN1cmVfZ2V0ZW52KGFyZyk7CisjZWxpZiBkZWZpbmVkKEhBVkVfX19TRUNVUkVfR0VURU5WKQorCXJldHVybiBfX3NlY3VyZV9nZXRlbnYoYXJnKTsKKyNlbHNlCisJcmV0dXJuIGdldGVudihhcmcpOworI2VuZGlmCit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdGVzdF9vcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywgaW9fY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlpb19jaGFubmVsCWlvID0gTlVMTDsKKwlzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKmRhdGEgPSBOVUxMOworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJKnZhbHVlOworCisJaWYgKG5hbWUgPT0gMCkKKwkJcmV0dXJuIEVYVDJfRVRfQkFEX0RFVklDRV9OQU1FOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3Qgc3RydWN0X2lvX2NoYW5uZWwpLCAmaW8pOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKwltZW1zZXQoaW8sIDAsIHNpemVvZihzdHJ1Y3Qgc3RydWN0X2lvX2NoYW5uZWwpKTsKKwlpby0+bWFnaWMgPSBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUw7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSksICZkYXRhKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisJaW8tPm1hbmFnZXIgPSB0ZXN0X2lvX21hbmFnZXI7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc3RybGVuKG5hbWUpKzEsICZpby0+bmFtZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJc3RyY3B5KGlvLT5uYW1lLCBuYW1lKTsKKwlpby0+cHJpdmF0ZV9kYXRhID0gZGF0YTsKKwlpby0+YmxvY2tfc2l6ZSA9IDEwMjQ7CisJaW8tPnJlYWRfZXJyb3IgPSAwOworCWlvLT53cml0ZV9lcnJvciA9IDA7CisJaW8tPnJlZmNvdW50ID0gMTsKKworCW1lbXNldChkYXRhLCAwLCBzaXplb2Yoc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhKSk7CisJZGF0YS0+bWFnaWMgPSBFWFQyX0VUX01BR0lDX1RFU1RfSU9fQ0hBTk5FTDsKKwlpZiAodGVzdF9pb19iYWNraW5nX21hbmFnZXIpIHsKKwkJcmV0dmFsID0gdGVzdF9pb19iYWNraW5nX21hbmFnZXItPm9wZW4obmFtZSwgZmxhZ3MsCisJCQkJCQkgICAgICAgJmRhdGEtPnJlYWwpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworCX0gZWxzZSB7CisJCWRhdGEtPnJlYWwgPSAwOworCX0KKwlkYXRhLT5yZWFkX2JsayA9CXRlc3RfaW9fY2JfcmVhZF9ibGs7CisJZGF0YS0+d3JpdGVfYmxrID0JdGVzdF9pb19jYl93cml0ZV9ibGs7CisJZGF0YS0+c2V0X2Jsa3NpemUgPQl0ZXN0X2lvX2NiX3NldF9ibGtzaXplOworCWRhdGEtPndyaXRlX2J5dGUgPQl0ZXN0X2lvX2NiX3dyaXRlX2J5dGU7CisJZGF0YS0+cmVhZF9ibGs2NCA9CXRlc3RfaW9fY2JfcmVhZF9ibGs2NDsKKwlkYXRhLT53cml0ZV9ibGs2NCA9CXRlc3RfaW9fY2Jfd3JpdGVfYmxrNjQ7CisKKwlkYXRhLT5vdXRmaWxlID0gTlVMTDsKKwlpZiAoKHZhbHVlID0gc2FmZV9nZXRlbnYoIlRFU1RfSU9fTE9HRklMRSIpKSAhPSBOVUxMKQorCQlkYXRhLT5vdXRmaWxlID0gZm9wZW4odmFsdWUsICJ3Iik7CisJaWYgKCFkYXRhLT5vdXRmaWxlKQorCQlkYXRhLT5vdXRmaWxlID0gc3RkZXJyOworCisJZGF0YS0+ZmxhZ3MgPSAwOworCWlmICgodmFsdWUgPSBzYWZlX2dldGVudigiVEVTVF9JT19GTEFHUyIpKSAhPSBOVUxMKQorCQlkYXRhLT5mbGFncyA9IHN0cnRvdWwodmFsdWUsIE5VTEwsIDApOworCisJZGF0YS0+YmxvY2sgPSAwOworCWlmICgodmFsdWUgPSBzYWZlX2dldGVudigiVEVTVF9JT19CTE9DSyIpKSAhPSBOVUxMKQorCQlkYXRhLT5ibG9jayA9IHN0cnRvdWwodmFsdWUsIE5VTEwsIDApOworCisJZGF0YS0+cmVhZF9hYm9ydF9jb3VudCA9IDA7CisJaWYgKCh2YWx1ZSA9IHNhZmVfZ2V0ZW52KCJURVNUX0lPX1JFQURfQUJPUlQiKSkgIT0gTlVMTCkKKwkJZGF0YS0+cmVhZF9hYm9ydF9jb3VudCA9IHN0cnRvdWwodmFsdWUsIE5VTEwsIDApOworCisJZGF0YS0+d3JpdGVfYWJvcnRfY291bnQgPSAwOworCWlmICgodmFsdWUgPSBzYWZlX2dldGVudigiVEVTVF9JT19XUklURV9BQk9SVCIpKSAhPSBOVUxMKQorCQlkYXRhLT53cml0ZV9hYm9ydF9jb3VudCA9IHN0cnRvdWwodmFsdWUsIE5VTEwsIDApOworCisJaWYgKGRhdGEtPnJlYWwpCisJCWlvLT5hbGlnbiA9IGRhdGEtPnJlYWwtPmFsaWduOworCisJKmNoYW5uZWwgPSBpbzsKKwlyZXR1cm4gMDsKKworY2xlYW51cDoKKwlpZiAoaW8pCisJCWV4dDJmc19mcmVlX21lbSgmaW8pOworCWlmIChkYXRhKQorCQlleHQyZnNfZnJlZV9tZW0oJmRhdGEpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdGVzdF9jbG9zZShpb19jaGFubmVsIGNoYW5uZWwpCit7CisJc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVEVTVF9JT19DSEFOTkVMKTsKKworCWlmICgtLWNoYW5uZWwtPnJlZmNvdW50ID4gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGF0YS0+cmVhbCkKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9jbG9zZShkYXRhLT5yZWFsKTsKKworCWlmIChkYXRhLT5vdXRmaWxlICYmIGRhdGEtPm91dGZpbGUgIT0gc3RkZXJyKQorCQlmY2xvc2UoZGF0YS0+b3V0ZmlsZSk7CisKKwlleHQyZnNfZnJlZV9tZW0oJmNoYW5uZWwtPnByaXZhdGVfZGF0YSk7CisJaWYgKGNoYW5uZWwtPm5hbWUpCisJCWV4dDJmc19mcmVlX21lbSgmY2hhbm5lbC0+bmFtZSk7CisJZXh0MmZzX2ZyZWVfbWVtKCZjaGFubmVsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHRlc3Rfc2V0X2Jsa3NpemUoaW9fY2hhbm5lbCBjaGFubmVsLCBpbnQgYmxrc2l6ZSkKK3sKKwlzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKmRhdGE7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19URVNUX0lPX0NIQU5ORUwpOworCisJaWYgKGRhdGEtPnJlYWwpIHsKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9zZXRfYmxrc2l6ZShkYXRhLT5yZWFsLCBibGtzaXplKTsKKwkJY2hhbm5lbC0+YWxpZ24gPSBkYXRhLT5yZWFsLT5hbGlnbjsKKwl9CisJaWYgKGRhdGEtPnNldF9ibGtzaXplKQorCQlkYXRhLT5zZXRfYmxrc2l6ZShibGtzaXplLCByZXR2YWwpOworCWlmIChkYXRhLT5mbGFncyAmIFRFU1RfRkxBR19TRVRfQkxLU0laRSkKKwkJZnByaW50ZihkYXRhLT5vdXRmaWxlLAorCQkJIlRlc3RfaW86IHNldF9ibGtzaXplKCVkKSByZXR1cm5lZCAlc1xuIiwKKwkJCWJsa3NpemUsIHJldHZhbCA/IGVycm9yX21lc3NhZ2UocmV0dmFsKSA6ICJPSyIpOworCWNoYW5uZWwtPmJsb2NrX3NpemUgPSBibGtzaXplOworCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIGVycmNvZGVfdCB0ZXN0X3JlYWRfYmxrKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBibG9jaywKKwkJCSAgICAgICBpbnQgY291bnQsIHZvaWQgKmJ1ZikKK3sKKwlzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKmRhdGE7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19URVNUX0lPX0NIQU5ORUwpOworCisJaWYgKGRhdGEtPnJlYWwpCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGsoZGF0YS0+cmVhbCwgYmxvY2ssIGNvdW50LCBidWYpOworCWlmIChkYXRhLT5yZWFkX2JsaykKKwkJZGF0YS0+cmVhZF9ibGsoYmxvY2ssIGNvdW50LCByZXR2YWwpOworCWlmIChkYXRhLT5mbGFncyAmIFRFU1RfRkxBR19SRUFEKQorCQlmcHJpbnRmKGRhdGEtPm91dGZpbGUsCisJCQkiVGVzdF9pbzogcmVhZF9ibGsoJWx1LCAlZCkgcmV0dXJuZWQgJXNcbiIsCisJCQlibG9jaywgY291bnQsIHJldHZhbCA/IGVycm9yX21lc3NhZ2UocmV0dmFsKSA6ICJPSyIpOworCWlmIChkYXRhLT5ibG9jayAmJiBkYXRhLT5ibG9jayA9PSBibG9jaykgeworCQlpZiAoZGF0YS0+ZmxhZ3MgJiBURVNUX0ZMQUdfRFVNUCkKKwkJCXRlc3RfZHVtcF9ibG9jayhjaGFubmVsLCBkYXRhLCBibG9jaywgYnVmKTsKKwkJaWYgKC0tZGF0YS0+cmVhZF9hYm9ydF9jb3VudCA9PSAwKQorCQkJdGVzdF9hYm9ydChjaGFubmVsLCBibG9jayk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdGVzdF93cml0ZV9ibGsoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJICAgICAgIGludCBjb3VudCwgY29uc3Qgdm9pZCAqYnVmKQoreworCXN0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSAqZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlkYXRhID0gKHN0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX1RFU1RfSU9fQ0hBTk5FTCk7CisKKwlpZiAoZGF0YS0+cmVhbCkKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGsoZGF0YS0+cmVhbCwgYmxvY2ssIGNvdW50LCBidWYpOworCWlmIChkYXRhLT53cml0ZV9ibGspCisJCWRhdGEtPndyaXRlX2JsayhibG9jaywgY291bnQsIHJldHZhbCk7CisJaWYgKGRhdGEtPmZsYWdzICYgVEVTVF9GTEFHX1dSSVRFKQorCQlmcHJpbnRmKGRhdGEtPm91dGZpbGUsCisJCQkiVGVzdF9pbzogd3JpdGVfYmxrKCVsdSwgJWQpIHJldHVybmVkICVzXG4iLAorCQkJYmxvY2ssIGNvdW50LCByZXR2YWwgPyBlcnJvcl9tZXNzYWdlKHJldHZhbCkgOiAiT0siKTsKKwlpZiAoZGF0YS0+YmxvY2sgJiYgZGF0YS0+YmxvY2sgPT0gYmxvY2spIHsKKwkJaWYgKGRhdGEtPmZsYWdzICYgVEVTVF9GTEFHX0RVTVApCisJCQl0ZXN0X2R1bXBfYmxvY2soY2hhbm5lbCwgZGF0YSwgYmxvY2ssIGJ1Zik7CisJCWlmICgtLWRhdGEtPndyaXRlX2Fib3J0X2NvdW50ID09IDApCisJCQl0ZXN0X2Fib3J0KGNoYW5uZWwsIGJsb2NrKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCB0ZXN0X3JlYWRfYmxrNjQoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssCisJCQkgICAgICAgaW50IGNvdW50LCB2b2lkICpidWYpCit7CisJc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVEVTVF9JT19DSEFOTkVMKTsKKworCWlmIChkYXRhLT5yZWFsKQorCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZGF0YS0+cmVhbCwgYmxvY2ssIGNvdW50LCBidWYpOworCWlmIChkYXRhLT5yZWFkX2JsazY0KQorCQlkYXRhLT5yZWFkX2JsazY0KGJsb2NrLCBjb3VudCwgcmV0dmFsKTsKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBURVNUX0ZMQUdfUkVBRCkKKwkJZnByaW50ZihkYXRhLT5vdXRmaWxlLAorCQkJIlRlc3RfaW86IHJlYWRfYmxrNjQoJWxsdSwgJWQpIHJldHVybmVkICVzXG4iLAorCQkJYmxvY2ssIGNvdW50LCByZXR2YWwgPyBlcnJvcl9tZXNzYWdlKHJldHZhbCkgOiAiT0siKTsKKwlpZiAoZGF0YS0+YmxvY2sgJiYgZGF0YS0+YmxvY2sgPT0gYmxvY2spIHsKKwkJaWYgKGRhdGEtPmZsYWdzICYgVEVTVF9GTEFHX0RVTVApCisJCQl0ZXN0X2R1bXBfYmxvY2soY2hhbm5lbCwgZGF0YSwgYmxvY2ssIGJ1Zik7CisJCWlmICgtLWRhdGEtPnJlYWRfYWJvcnRfY291bnQgPT0gMCkKKwkJCXRlc3RfYWJvcnQoY2hhbm5lbCwgYmxvY2spOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHRlc3Rfd3JpdGVfYmxrNjQoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssCisJCQkgICAgICAgaW50IGNvdW50LCBjb25zdCB2b2lkICpidWYpCit7CisJc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVEVTVF9JT19DSEFOTkVMKTsKKworCWlmIChkYXRhLT5yZWFsKQorCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGRhdGEtPnJlYWwsIGJsb2NrLCBjb3VudCwgYnVmKTsKKwlpZiAoZGF0YS0+d3JpdGVfYmxrNjQpCisJCWRhdGEtPndyaXRlX2JsazY0KGJsb2NrLCBjb3VudCwgcmV0dmFsKTsKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBURVNUX0ZMQUdfV1JJVEUpCisJCWZwcmludGYoZGF0YS0+b3V0ZmlsZSwKKwkJCSJUZXN0X2lvOiB3cml0ZV9ibGs2NCglbGx1LCAlZCkgcmV0dXJuZWQgJXNcbiIsCisJCQlibG9jaywgY291bnQsIHJldHZhbCA/IGVycm9yX21lc3NhZ2UocmV0dmFsKSA6ICJPSyIpOworCWlmIChkYXRhLT5ibG9jayAmJiBkYXRhLT5ibG9jayA9PSBibG9jaykgeworCQlpZiAoZGF0YS0+ZmxhZ3MgJiBURVNUX0ZMQUdfRFVNUCkKKwkJCXRlc3RfZHVtcF9ibG9jayhjaGFubmVsLCBkYXRhLCBibG9jaywgYnVmKTsKKwkJaWYgKC0tZGF0YS0+d3JpdGVfYWJvcnRfY291bnQgPT0gMCkKKwkJCXRlc3RfYWJvcnQoY2hhbm5lbCwgYmxvY2spOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHRlc3Rfd3JpdGVfYnl0ZShpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJICAgICAgIGludCBjb3VudCwgY29uc3Qgdm9pZCAqYnVmKQoreworCXN0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSAqZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlkYXRhID0gKHN0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX1RFU1RfSU9fQ0hBTk5FTCk7CisKKwlpZiAoZGF0YS0+cmVhbCAmJiBkYXRhLT5yZWFsLT5tYW5hZ2VyLT53cml0ZV9ieXRlKQorCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2J5dGUoZGF0YS0+cmVhbCwgb2Zmc2V0LCBjb3VudCwgYnVmKTsKKwlpZiAoZGF0YS0+d3JpdGVfYnl0ZSkKKwkJZGF0YS0+d3JpdGVfYnl0ZShvZmZzZXQsIGNvdW50LCByZXR2YWwpOworCWlmIChkYXRhLT5mbGFncyAmIFRFU1RfRkxBR19XUklURSkKKwkJZnByaW50ZihkYXRhLT5vdXRmaWxlLAorCQkJIlRlc3RfaW86IHdyaXRlX2J5dGUoJWx1LCAlZCkgcmV0dXJuZWQgJXNcbiIsCisJCQlvZmZzZXQsIGNvdW50LCByZXR2YWwgPyBlcnJvcl9tZXNzYWdlKHJldHZhbCkgOiAiT0siKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHRlc3Rfc2V0X29wdGlvbihpb19jaGFubmVsIGNoYW5uZWwsIGNvbnN0IGNoYXIgKm9wdGlvbiwKKwkJCQkgY29uc3QgY2hhciAqYXJnKQoreworCXN0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSAqZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlkYXRhID0gKHN0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX1RFU1RfSU9fQ0hBTk5FTCk7CisKKworCWlmIChkYXRhLT5mbGFncyAmIFRFU1RfRkxBR19TRVRfT1BUSU9OKQorCQlmcHJpbnRmKGRhdGEtPm91dGZpbGUsICJUZXN0X2lvOiBzZXRfb3B0aW9uKCVzLCAlcykgIiwKKwkJCW9wdGlvbiwgYXJnKTsKKwlpZiAoZGF0YS0+cmVhbCAmJiBkYXRhLT5yZWFsLT5tYW5hZ2VyLT5zZXRfb3B0aW9uKSB7CisJCXJldHZhbCA9IChkYXRhLT5yZWFsLT5tYW5hZ2VyLT5zZXRfb3B0aW9uKShkYXRhLT5yZWFsLAorCQkJCQkJCSAgIG9wdGlvbiwgYXJnKTsKKwkJaWYgKGRhdGEtPmZsYWdzICYgVEVTVF9GTEFHX1NFVF9PUFRJT04pCisJCQlmcHJpbnRmKGRhdGEtPm91dGZpbGUsICJyZXR1cm5lZCAlc1xuIiwKKwkJCQlyZXR2YWwgPyBlcnJvcl9tZXNzYWdlKHJldHZhbCkgOiAiT0siKTsKKwl9IGVsc2UgeworCQlpZiAoZGF0YS0+ZmxhZ3MgJiBURVNUX0ZMQUdfU0VUX09QVElPTikKKwkJCWZwcmludGYoZGF0YS0+b3V0ZmlsZSwgIm5vdCBpbXBsZW1lbnRlZFxuIik7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdGVzdF9nZXRfc3RhdHMoaW9fY2hhbm5lbCBjaGFubmVsLCBpb19zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVEVTVF9JT19DSEFOTkVMKTsKKworCWlmIChkYXRhLT5yZWFsICYmIGRhdGEtPnJlYWwtPm1hbmFnZXItPmdldF9zdGF0cykgeworCQlyZXR2YWwgPSAoZGF0YS0+cmVhbC0+bWFuYWdlci0+Z2V0X3N0YXRzKShkYXRhLT5yZWFsLCBzdGF0cyk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdGVzdF9kaXNjYXJkKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGNvdW50KQoreworCXN0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSAqZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlkYXRhID0gKHN0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX1RFU1RfSU9fQ0hBTk5FTCk7CisKKwlpZiAoZGF0YS0+cmVhbCkKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9kaXNjYXJkKGRhdGEtPnJlYWwsIGJsb2NrLCBjb3VudCk7CisJaWYgKGRhdGEtPmZsYWdzICYgVEVTVF9GTEFHX0RJU0NBUkQpCisJCWZwcmludGYoZGF0YS0+b3V0ZmlsZSwKKwkJCSJUZXN0X2lvOiBkaXNjYXJkKCVsbHUsICVsbHUpIHJldHVybmVkICVzXG4iLAorCQkJYmxvY2ssIGNvdW50LCByZXR2YWwgPyBlcnJvcl9tZXNzYWdlKHJldHZhbCkgOiAiT0siKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3RydWN0IHN0cnVjdF9pb19tYW5hZ2VyIHN0cnVjdF90ZXN0X21hbmFnZXIgPSB7CisJLm1hZ2ljCQk9IEVYVDJfRVRfTUFHSUNfSU9fTUFOQUdFUiwKKwkubmFtZQkJPSAiVGVzdCBJL08gTWFuYWdlciIsCisJLm9wZW4JCT0gdGVzdF9vcGVuLAorCS5jbG9zZQkJPSB0ZXN0X2Nsb3NlLAorCS5zZXRfYmxrc2l6ZQk9IHRlc3Rfc2V0X2Jsa3NpemUsCisJLnJlYWRfYmxrCT0gdGVzdF9yZWFkX2JsaywKKwkud3JpdGVfYmxrCT0gdGVzdF93cml0ZV9ibGssCisJLmZsdXNoCQk9IHRlc3RfZmx1c2gsCisJLndyaXRlX2J5dGUJPSB0ZXN0X3dyaXRlX2J5dGUsCisJLnNldF9vcHRpb24JPSB0ZXN0X3NldF9vcHRpb24sCisJLmdldF9zdGF0cwk9IHRlc3RfZ2V0X3N0YXRzLAorCS5yZWFkX2JsazY0CT0gdGVzdF9yZWFkX2JsazY0LAorCS53cml0ZV9ibGs2NAk9IHRlc3Rfd3JpdGVfYmxrNjQsCisJLmRpc2NhcmQJPSB0ZXN0X2Rpc2NhcmQsCit9OworCitpb19tYW5hZ2VyIHRlc3RfaW9fbWFuYWdlciA9ICZzdHJ1Y3RfdGVzdF9tYW5hZ2VyOwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy90c3RfYmFkYmxvY2tzLmMgYi9saWIvZXh0MmZzL3RzdF9iYWRibG9ja3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjM5ZWYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy90c3RfYmFkYmxvY2tzLmMKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiBUaGlzIHRlc3RpbmcgcHJvZ3JhbSBtYWtlcyBzdXJlIHRoZSBiYWRibG9ja3MgaW1wbGVtZW50YXRpb24gd29ya3MuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworI2RlZmluZSBBRERfQkxLCTB4MDAwMQorI2RlZmluZSBERUxfQkxLCTB4MDAwMgorCitibGtfdCB0ZXN0MVtdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMCB9OworYmxrX3QgdGVzdDJbXSA9IHsgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAzLCAyLCAxIH07CitibGtfdCB0ZXN0M1tdID0geyAzLCAxLCA0LCA1LCA5LCAyLCA3LCAxMCwgNSwgNiwgMTAsIDgsIDAgfTsKK2Jsa190IHRlc3Q0W10gPSB7IDIwLCA1MCwgMTIsIDE3LCAxMywgMiwgNjYsIDIzLCA1NiwgMCB9OworYmxrX3QgdGVzdDRhW10gPSB7CisgCTIwLCAxLAorCTUwLCAxLAorCTMsIDAsCisJMTcsIDEsCisJMTgsIDAsCisJMTYsIDAsCisJMTEsIDAsCisJMTIsIDEsCisJMTMsIDEsCisJMTQsIDAsCisJODAsIDAsCisJNDUsIDAsCisJNjYsIDEsCisJMCB9OworYmxrX3QgdGVzdDVbXSA9IHsgMzEsIDIwLCAxNywgNTEsIDIzLCAxLCA1NiwgNTcsIDAgfTsKK2Jsa190IHRlc3Q1YVtdID0geworCTUwLCBBRERfQkxLLAorCTUxLCBERUxfQkxLLAorCTU3LCBERUxfQkxLLAorCTY2LCBBRERfQkxLLAorCTMxLCBERUxfQkxLLAorCTEyLCBBRERfQkxLLAorCTIsIEFERF9CTEssCisJMTMsIEFERF9CTEssCisJMSwgREVMX0JMSywKKwkwCisJfTsKKworCitzdGF0aWMgaW50IHRlc3RfZmFpbCA9IDA7CitzdGF0aWMgaW50IHRlc3RfZXhwZWN0ZWRfZmFpbCA9IDA7CisKK3N0YXRpYyBlcnJjb2RlX3QgY3JlYXRlX3Rlc3RfbGlzdChibGtfdCAqdmVjLCBiYWRibG9ja3NfbGlzdCAqcmV0KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJYmFkYmxvY2tzX2xpc3QJYmI7CisJaW50CQlpOworCisJcmV0dmFsID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2NyZWF0ZSgmYmIsIDUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiY3JlYXRlX3Rlc3RfbGlzdCIsIHJldHZhbCwgIndoaWxlIGNyZWF0aW5nIGxpc3QiKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJZm9yIChpPTA7IHZlY1tpXTsgaSsrKSB7CisJCXJldHZhbCA9IGV4dDJmc19iYWRibG9ja3NfbGlzdF9hZGQoYmIsIHZlY1tpXSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoImNyZWF0ZV90ZXN0X2xpc3QiLCByZXR2YWwsCisJCQkJIndoaWxlIGFkZGluZyB0ZXN0IHZlY3RvciAlZCIsIGkpOworCQkJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2ZyZWUoYmIpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCX0KKwkqcmV0ID0gYmI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2xpc3QoYmFkYmxvY2tzX2xpc3QgYmIsIGludCB2ZXJpZnkpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwliYWRibG9ja3NfaXRlcmF0ZQlpdGVyOworCWJsa190CQkJYmxrOworCWludAkJCWksIG9rOworCisJcmV0dmFsID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfYmVnaW4oYmIsICZpdGVyKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoInByaW50X2xpc3QiLCByZXR2YWwsICJ3aGlsZSBzZXR0aW5nIHVwIGl0ZXJhdG9yIik7CisJCXJldHVybjsKKwl9CisJb2sgPSBpID0gMTsKKwl3aGlsZSAoZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGUoaXRlciwgJmJsaykpIHsKKwkJcHJpbnRmKCIldSAiLCBibGspOworCQlpZiAoaSsrICE9IGJsaykKKwkJCW9rID0gMDsKKwl9CisJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfZW5kKGl0ZXIpOworCWlmICh2ZXJpZnkpIHsKKwkJaWYgKG9rKQorCQkJcHJpbnRmKCItLS0gT0siKTsKKwkJZWxzZSB7CisJCQlwcmludGYoIi0tLSBOT1QgT0siKTsKKwkJCXRlc3RfZmFpbCsrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB2YWxpZGF0ZV90ZXN0X3NlcShiYWRibG9ja3NfbGlzdCBiYiwgYmxrX3QgKnZlYykKK3sKKwlpbnQJaSwgbWF0Y2gsIG9rOworCisJZm9yIChpID0gMDsgdmVjW2ldOyBpICs9IDIpIHsKKwkJbWF0Y2ggPSBleHQyZnNfYmFkYmxvY2tzX2xpc3RfdGVzdChiYiwgdmVjW2ldKTsKKwkJaWYgKG1hdGNoID09IHZlY1tpKzFdKQorCQkJb2sgPSAxOworCQllbHNlIHsKKwkJCW9rID0gMDsKKwkJCXRlc3RfZmFpbCsrOworCQl9CisJCXByaW50ZigiXHRibG9jayAldSBpcyAlcyAtLS0gJXNcbiIsIHZlY1tpXSwKKwkJICAgICAgIG1hdGNoID8gInByZXNlbnQiIDogImFic2VudCIsCisJCSAgICAgICBvayA/ICJPSyIgOiAiTk9UIE9LIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBkb190ZXN0X3NlcShiYWRibG9ja3NfbGlzdCBiYiwgYmxrX3QgKnZlYykKK3sKKwlpbnQJaSwgbWF0Y2g7CisKKwlmb3IgKGkgPSAwOyB2ZWNbaV07IGkgKz0gMikgeworCQlzd2l0Y2ggKHZlY1tpKzFdKSB7CisJCWNhc2UgQUREX0JMSzoKKwkJCWV4dDJmc19iYWRibG9ja3NfbGlzdF9hZGQoYmIsIHZlY1tpXSk7CisJCQltYXRjaCA9IGV4dDJmc19iYWRibG9ja3NfbGlzdF90ZXN0KGJiLCB2ZWNbaV0pOworCQkJcHJpbnRmKCJBZGRpbmcgYmxvY2sgJXUgLS0tIG5vdyAlc1xuIiwgdmVjW2ldLAorCQkJICAgICAgIG1hdGNoID8gInByZXNlbnQiIDogImFic2VudCIpOworCQkJaWYgKCFtYXRjaCkgeworCQkJCXByaW50ZigiRkFJTFVSRSFcbiIpOworCQkJCXRlc3RfZmFpbCsrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgREVMX0JMSzoKKwkJCWV4dDJmc19iYWRibG9ja3NfbGlzdF9kZWwoYmIsIHZlY1tpXSk7CisJCQltYXRjaCA9IGV4dDJmc19iYWRibG9ja3NfbGlzdF90ZXN0KGJiLCB2ZWNbaV0pOworCQkJcHJpbnRmKCJSZW1vdmluZyBibG9jayAldSAtLS0gbm93ICVzXG4iLCB2ZWNbaV0sCisJCQkgICAgICAgZXh0MmZzX2JhZGJsb2Nrc19saXN0X3Rlc3QoYmIsIHZlY1tpXSkgPworCQkJICAgICAgICJwcmVzZW50IiA6ICJhYnNlbnQiKTsKKwkJCWlmIChtYXRjaCkgeworCQkJCXByaW50ZigiRkFJTFVSRSFcbiIpOworCQkJCXRlc3RfZmFpbCsrOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKworaW50IGZpbGVfdGVzdChiYWRibG9ja3NfbGlzdCBiYikKK3sKKwliYWRibG9ja3NfbGlzdCBuZXdfYmIgPSAwOworCWVycmNvZGVfdAlyZXR2YWw7CisJRklMRQkqZjsKKworCWYgPSB0bXBmaWxlKCk7CisJaWYgKCFmKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyB0ZW1wIGZpbGU6ICVzXG4iLAorCQkJZXJyb3JfbWVzc2FnZShlcnJubykpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2JiX0ZJTEUoYmIsIDAsIGYpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZmlsZV90ZXN0IiwgcmV0dmFsLCAid2hpbGUgd3JpdGluZyBiYWQgYmxvY2tzIik7CisJCXJldHVybiAxOworCX0KKworCXJld2luZChmKTsKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9iYl9GSUxFMigwLCBmLCAmbmV3X2JiLCAwLCAwKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImZpbGVfdGVzdCIsIHJldHZhbCwgIndoaWxlIHJlYWRpbmcgYmFkIGJsb2NrcyIpOworCQlyZXR1cm4gMTsKKwl9CisJZmNsb3NlKGYpOworCisJaWYgKGV4dDJmc19iYWRibG9ja3NfZXF1YWwoYmIsIG5ld19iYikpIHsKKwkJcHJpbnRmKCJCbG9jayBiaXRtYXAgbWF0Y2hlZCBhZnRlciByZWFkaW5nIGFuZCB3cml0aW5nLlxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJCbG9jayBiaXRtYXAgTk9UIG1hdGNoZWQuXG4iKTsKKwkJdGVzdF9mYWlsKys7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbnZhbGlkX3Byb2MoZXh0Ml9maWxzeXMgZnMsIGJsa190IGJsaykKK3sKKwlpZiAoYmxrID09IDM0NTAwKSB7CisJCXByaW50ZigiRXhwZWN0ZWQgaW52YWxpZCBibG9ja1xuIik7CisJCXRlc3RfZXhwZWN0ZWRfZmFpbCsrOworCX0gZWxzZSB7CisJCXByaW50ZigiSW52YWxpZCBibG9jayAjOiAldVxuIiwgYmxrKTsKKwkJdGVzdF9mYWlsKys7CisJfQorfQorCitpbnQgZmlsZV90ZXN0X2ludmFsaWQoYmFkYmxvY2tzX2xpc3QgYmIpCit7CisJYmFkYmxvY2tzX2xpc3QgbmV3X2JiID0gMDsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfZmlsc3lzIAlmczsKKwlGSUxFCSpmOworCisJZnMgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJ1Y3RfZXh0Ml9maWxzeXMpKTsKKwltZW1zZXQoZnMsIDAsIHNpemVvZihzdHJ1Y3Qgc3RydWN0X2V4dDJfZmlsc3lzKSk7CisJZnMtPm1hZ2ljID0gRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTOworCWZzLT5zdXBlciA9IG1hbGxvYyhTVVBFUkJMT0NLX1NJWkUpOworCW1lbXNldChmcy0+c3VwZXIsIDAsIFNVUEVSQkxPQ0tfU0laRSk7CisJZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2sgPSAxOworCWV4dDJmc19ibG9ja3NfY291bnRfc2V0KGZzLT5zdXBlciwgMTAwKTsKKworCWYgPSB0bXBmaWxlKCk7CisJaWYgKCFmKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyB0ZW1wIGZpbGU6ICVzXG4iLAorCQkJZXJyb3JfbWVzc2FnZShlcnJubykpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2JiX0ZJTEUoYmIsIDAsIGYpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZmlsZV90ZXN0IiwgcmV0dmFsLCAid2hpbGUgd3JpdGluZyBiYWQgYmxvY2tzIik7CisJCXJldHVybiAxOworCX0KKwlmcHJpbnRmKGYsICIzNDUwMFxuIik7CisKKwlyZXdpbmQoZik7CisJdGVzdF9leHBlY3RlZF9mYWlsID0gMDsKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9iYl9GSUxFKGZzLCBmLCAmbmV3X2JiLCBpbnZhbGlkX3Byb2MpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZmlsZV90ZXN0IiwgcmV0dmFsLCAid2hpbGUgcmVhZGluZyBiYWQgYmxvY2tzIik7CisJCXJldHVybiAxOworCX0KKwlmY2xvc2UoZik7CisJaWYgKCF0ZXN0X2V4cGVjdGVkX2ZhaWwpIHsKKwkJcHJpbnRmKCJFeHBlY3RlZCB0ZXN0IGZhaWx1cmUgZGlkbid0IGhhcHBlbiFcbiIpOworCQl0ZXN0X2ZhaWwrKzsKKwl9CisKKworCWlmIChleHQyZnNfYmFkYmxvY2tzX2VxdWFsKGJiLCBuZXdfYmIpKSB7CisJCXByaW50ZigiQmxvY2sgYml0bWFwIG1hdGNoZWQgYWZ0ZXIgcmVhZGluZyBhbmQgd3JpdGluZy5cbiIpOworCX0gZWxzZSB7CisJCXByaW50ZigiQmxvY2sgYml0bWFwIE5PVCBtYXRjaGVkLlxuIik7CisJCXRlc3RfZmFpbCsrOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWJhZGJsb2Nrc19saXN0IGJiMSwgYmIyLCBiYjMsIGJiNCwgYmI1OworCWludAllcXVhbDsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJYWRkX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKworCWJiMSA9IGJiMiA9IGJiMyA9IGJiNCA9IGJiNSA9IDA7CisKKwlwcmludGYoInRlc3QxOiAiKTsKKwlyZXR2YWwgPSBjcmVhdGVfdGVzdF9saXN0KHRlc3QxLCAmYmIxKTsKKwlpZiAocmV0dmFsID09IDApCisJCXByaW50X2xpc3QoYmIxLCAxKTsKKwlwcmludGYoIlxuIik7CisKKwlwcmludGYoInRlc3QyOiAiKTsKKwlyZXR2YWwgPSBjcmVhdGVfdGVzdF9saXN0KHRlc3QyLCAmYmIyKTsKKwlpZiAocmV0dmFsID09IDApCisJCXByaW50X2xpc3QoYmIyLCAxKTsKKwlwcmludGYoIlxuIik7CisKKwlwcmludGYoInRlc3QzOiAiKTsKKwlyZXR2YWwgPSBjcmVhdGVfdGVzdF9saXN0KHRlc3QzLCAmYmIzKTsKKwlpZiAocmV0dmFsID09IDApCisJCXByaW50X2xpc3QoYmIzLCAxKTsKKwlwcmludGYoIlxuIik7CisKKwlwcmludGYoInRlc3Q0OiAiKTsKKwlyZXR2YWwgPSBjcmVhdGVfdGVzdF9saXN0KHRlc3Q0LCAmYmI0KTsKKwlpZiAocmV0dmFsID09IDApIHsKKwkJcHJpbnRfbGlzdChiYjQsIDApOworCQlwcmludGYoIlxuIik7CisJCXZhbGlkYXRlX3Rlc3Rfc2VxKGJiNCwgdGVzdDRhKTsKKwl9CisJcHJpbnRmKCJcbiIpOworCisJcHJpbnRmKCJ0ZXN0NTogIik7CisJcmV0dmFsID0gY3JlYXRlX3Rlc3RfbGlzdCh0ZXN0NSwgJmJiNSk7CisJaWYgKHJldHZhbCA9PSAwKSB7CisJCXByaW50X2xpc3QoYmI1LCAwKTsKKwkJcHJpbnRmKCJcbiIpOworCQlkb190ZXN0X3NlcShiYjUsIHRlc3Q1YSk7CisJCXByaW50ZigiQWZ0ZXIgdGVzdDUgc2VxdWVuY2U6ICIpOworCQlwcmludF9saXN0KGJiNSwgMCk7CisJCXByaW50ZigiXG4iKTsKKwl9CisJcHJpbnRmKCJcbiIpOworCisJaWYgKGJiMSAmJiBiYjIgJiYgYmIzICYmIGJiNCAmJiBiYjUpIHsKKwkJcHJpbnRmKCJDb21wYXJpc29uIHRlc3RzOlxuIik7CisJCWVxdWFsID0gZXh0MmZzX2JhZGJsb2Nrc19lcXVhbChiYjEsIGJiMik7CisJCXByaW50ZigiYmIxIGFuZCBiYjIgYXJlICVzZXF1YWwuXG4iLCBlcXVhbCA/ICIiIDogIk5PVCAiKTsKKwkJaWYgKGVxdWFsKQorCQkJdGVzdF9mYWlsKys7CisKKwkJZXF1YWwgPSBleHQyZnNfYmFkYmxvY2tzX2VxdWFsKGJiMSwgYmIzKTsKKwkJcHJpbnRmKCJiYjEgYW5kIGJiMyBhcmUgJXNlcXVhbC5cbiIsIGVxdWFsID8gIiIgOiAiTk9UICIpOworCQlpZiAoIWVxdWFsKQorCQkJdGVzdF9mYWlsKys7CisKKwkJZXF1YWwgPSBleHQyZnNfYmFkYmxvY2tzX2VxdWFsKGJiMSwgYmI0KTsKKwkJcHJpbnRmKCJiYjEgYW5kIGJiNCBhcmUgJXNlcXVhbC5cbiIsIGVxdWFsID8gIiIgOiAiTk9UICIpOworCQlpZiAoZXF1YWwpCisJCQl0ZXN0X2ZhaWwrKzsKKworCQllcXVhbCA9IGV4dDJmc19iYWRibG9ja3NfZXF1YWwoYmI0LCBiYjUpOworCQlwcmludGYoImJiNCBhbmQgYmI1IGFyZSAlc2VxdWFsLlxuIiwgZXF1YWwgPyAiIiA6ICJOT1QgIik7CisJCWlmICghZXF1YWwpCisJCQl0ZXN0X2ZhaWwrKzsKKwkJcHJpbnRmKCJcbiIpOworCX0KKworCWZpbGVfdGVzdChiYjQpOworCisJZmlsZV90ZXN0X2ludmFsaWQoYmI0KTsKKworCWlmICh0ZXN0X2ZhaWwgPT0gMCkKKwkJcHJpbnRmKCJleHQyZnMgbGlicmFyeSBiYWRibG9ja3MgdGVzdHMgY2hlY2tzIG91dCBPSyFcbiIpOworCisJaWYgKGJiMSkKKwkJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2ZyZWUoYmIxKTsKKwlpZiAoYmIyKQorCQlleHQyZnNfYmFkYmxvY2tzX2xpc3RfZnJlZShiYjIpOworCWlmIChiYjMpCisJCWV4dDJmc19iYWRibG9ja3NfbGlzdF9mcmVlKGJiMyk7CisJaWYgKGJiNCkKKwkJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2ZyZWUoYmI0KTsKKworCXJldHVybiB0ZXN0X2ZhaWw7CisKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvdHN0X2JpdG1hcHMuYyBiL2xpYi9leHQyZnMvdHN0X2JpdG1hcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzRmYjdhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy90c3RfYml0bWFwcy5jCkBAIC0wLDAgKzEsNzE0IEBACisvKgorICogdHN0X2JpdG1hcHMuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlICJzcy9zcy5oIgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorI2luY2x1ZGUgImV4dDJmc1AuaCIKKworZXh0ZXJuIHNzX3JlcXVlc3RfdGFibGUgdHN0X2JpdG1hcHNfY21kczsKKworc3RhdGljIGNoYXIgc3Vic3lzdGVtX25hbWVbXSA9ICJ0c3RfYml0bWFwcyI7CitzdGF0aWMgY2hhciB2ZXJzaW9uW10gPSAiMS4wIjsKKworZXh0Ml9maWxzeXMJdGVzdF9mczsKK2ludAkJZXhpdF9zdGF0dXMgPSAwOworCitzdGF0aWMgaW50IHNvdXJjZV9maWxlKGNvbnN0IGNoYXIgKmNtZF9maWxlLCBpbnQgc2NpX2lkeCkKK3sKKwlGSUxFCQkqZjsKKwljaGFyCQlidWZbMjU2XTsKKwljaGFyCQkqY3A7CisJaW50CQlyZXR2YWw7CisJaW50IAkJbm9lY2hvOworCisJaWYgKHN0cmNtcChjbWRfZmlsZSwgIi0iKSA9PSAwKQorCQlmID0gc3RkaW47CisJZWxzZSB7CisJCWYgPSBmb3BlbihjbWRfZmlsZSwgInIiKTsKKwkJaWYgKCFmKSB7CisJCQlwZXJyb3IoY21kX2ZpbGUpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlmZmx1c2goc3Rkb3V0KTsKKwlmZmx1c2goc3RkZXJyKTsKKwlzZXRidWYoc3Rkb3V0LCBOVUxMKTsKKwlzZXRidWYoc3RkZXJyLCBOVUxMKTsKKwl3aGlsZSAoIWZlb2YoZikpIHsKKwkJaWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpID09IE5VTEwpCisJCQlicmVhazsKKwkJaWYgKGJ1ZlswXSA9PSAnIycpCisJCQljb250aW51ZTsKKwkJbm9lY2hvID0gMDsKKwkJaWYgKGJ1ZlswXSA9PSAnLScpIHsKKwkJCW5vZWNobyA9IDE7CisJCQlidWZbMF0gPSAnICc7CisJCX0KKwkJY3AgPSBzdHJjaHIoYnVmLCAnXG4nKTsKKwkJaWYgKGNwKQorCQkJKmNwID0gMDsKKwkJY3AgPSBzdHJjaHIoYnVmLCAnXHInKTsKKwkJaWYgKGNwKQorCQkJKmNwID0gMDsKKwkJaWYgKCFub2VjaG8pCisJCQlwcmludGYoIiVzOiAlc1xuIiwgc3Vic3lzdGVtX25hbWUsIGJ1Zik7CisJCXJldHZhbCA9IHNzX2V4ZWN1dGVfbGluZShzY2lfaWR4LCBidWYpOworCQlpZiAocmV0dmFsKSB7CisJCQlzc19wZXJyb3Ioc2NpX2lkeCwgcmV0dmFsLCBidWYpOworCQkJZXhpdF9zdGF0dXMrKzsKKwkJfQorCX0KKwlyZXR1cm4gZXhpdF9zdGF0dXM7Cit9CisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVzZXRzIHRoZSBsaWJjIGdldG9wdCgpIGZ1bmN0aW9uLCB3aGljaCBrZWVwcworICogaW50ZXJuYWwgc3RhdGUuICBCYWQgZGVzaWduISAgU3R1cGlkIGxpYmMgQVBJIGRlc2lnbmVycyEgIE5vCisgKiBiaXNjdWl0IQorICoKKyAqIEJTRC1kZXJpdmVkIGdldG9wdCgpIGZ1bmN0aW9ucyByZXF1aXJlIHRoYXQgb3B0aW5kIGJlIHJlc2V0IHRvIDEgaW4KKyAqIG9yZGVyIHRvIHJlc2V0IGdldG9wdCgpIHN0YXRlLiAgVGhpcyB1c2VkIHRvIGJlIGdlbmVyYWxseSBhY2NlcHRlZAorICogd2F5IG9mIHJlc2V0dGluZyBnZXRvcHQoKS4gIEhvd2V2ZXIsIGdsaWJjJ3MgZ2V0b3B0KCkKKyAqIGhhcyBhZGRpdGlvbmFsIGdldG9wdCgpIHN0YXRlIGJleW9uZCBvcHRpbmQsIGFuZCByZXF1aXJlcyB0aGF0CisgKiBvcHRpbmQgYmUgc2V0IHplcm8gdG8gcmVzZXQgaXRzIHN0YXRlLiAgU28gdGhlIHVuZm9ydHVuYXRlIHN0YXRlIG9mCisgKiBhZmZhaXJzIGlzIHRoYXQgQlNELWRlcml2ZWQgdmVyc2lvbnMgb2YgZ2V0b3B0KCkgbWlzYmVoYXZlIGlmCisgKiBvcHRpbmQgaXMgc2V0IHRvIDAgaW4gb3JkZXIgdG8gcmVzZXQgZ2V0b3B0KCksIGFuZCBnbGliYydzIGdldG9wdCgpCisgKiB3aWxsIGNvcmUgZHVtcCBpZiBvcHRpbmQgaXMgc2V0IDEgaW4gb3JkZXIgdG8gcmVzZXQgZ2V0b3B0KCkuCisgKgorICogTW9yZSBtb2Rlcm4gdmVyc2lvbnMgb2YgQlNEIHJlcXVpcmUgdGhhdCBvcHRyZXNldCBiZSBzZXQgdG8gMSBpbgorICogb3JkZXIgdG8gcmVzZXQgZ2V0b3B0KCkuICAgU2lnaC4gIFN0YW5kYXJkcywgYW55b25lPworICoKKyAqIFdlIGhpZGUgdGhlIGhhaXIgaGVyZS4KKyAqLwordm9pZCByZXNldF9nZXRvcHQodm9pZCkKK3sKKyNpZiBkZWZpbmVkKF9fR0xJQkNfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pCisJb3B0aW5kID0gMDsKKyNlbHNlCisJb3B0aW5kID0gMTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfT1BUUkVTRVQKKwlvcHRyZXNldCA9IDE7CQkvKiBNYWtlcyBCU0QgZ2V0b3B0IGhhcHB5ICovCisjZW5kaWYKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcsIHByaW50aW5nCisgKiBhbiBlcnJvciBtZXNzYWdlIGlmIGl0IGZhaWxzLCBhbmQgcmV0dXJuaW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBpbiBlcnIuCisgKi8KK3Vuc2lnbmVkIGxvbmcgcGFyc2VfdWxvbmcoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpjbWQsCisJCQkgIGNvbnN0IGNoYXIgKmRlc2NyLCBpbnQgKmVycikKK3sKKwljaGFyCQkqdG1wOworCXVuc2lnbmVkIGxvbmcJcmV0OworCisJcmV0ID0gc3RydG91bChzdHIsICZ0bXAsIDApOworCWlmICgqdG1wID09IDApIHsKKwkJaWYgKGVycikKKwkJCSplcnIgPSAwOworCQlyZXR1cm4gcmV0OworCX0KKwljb21fZXJyKGNtZCwgMCwgIkJhZCAlcyAtICVzIiwgZGVzY3IsIHN0cik7CisJaWYgKGVycikKKwkJKmVyciA9IDE7CisJZWxzZQorCQlleGl0KDEpOworCXJldHVybiAwOworfQorCisKK2ludCBjaGVja19mc19vcGVuKGNoYXIgKm5hbWUpCit7CisJaWYgKCF0ZXN0X2ZzKSB7CisJCWNvbV9lcnIobmFtZSwgMCwgIkZpbGVzeXN0ZW0gbm90IG9wZW4iKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9maWxlc3lzdGVtKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgIHVuc2lnbmVkIGludCBibG9ja3MsIHVuc2lnbmVkIGludCBpbm9kZXMsCisJCQkgICAgIHVuc2lnbmVkIGludCB0eXBlLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgcGFyYW07CisJZXJyY29kZV90IHJldHZhbDsKKworCW1lbXNldCgmcGFyYW0sIDAsIHNpemVvZihwYXJhbSkpOworCWV4dDJmc19ibG9ja3NfY291bnRfc2V0KCZwYXJhbSwgYmxvY2tzKTsKKwlwYXJhbS5zX2lub2Rlc19jb3VudCA9IGlub2RlczsKKworCXJldHZhbCA9IGV4dDJmc19pbml0aWFsaXplKCJ0ZXN0IGZzIiwgZmxhZ3MsICZwYXJhbSwKKwkJCQkgICB0ZXN0X2lvX21hbmFnZXIsICZ0ZXN0X2ZzKTsKKworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihuYW1lLCByZXR2YWwsICJ3aGlsZSBpbml0aWFsaXppbmcgZmlsZXN5c3RlbSIpOworCQlyZXR1cm47CisJfQorCXRlc3RfZnMtPmRlZmF1bHRfYml0bWFwX3R5cGUgPSB0eXBlOworCWV4dDJmc19mcmVlX2Jsb2NrX2JpdG1hcCh0ZXN0X2ZzLT5ibG9ja19tYXApOworCXRlc3RfZnMtPmJsb2NrX21hcCA9IDA7CisJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKHRlc3RfZnMtPmlub2RlX21hcCk7CisJdGVzdF9mcy0+aW5vZGVfbWFwID0gMDsKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfYmxvY2tfYml0bWFwKHRlc3RfZnMsICJibG9jayBiaXRtYXAiLAorCQkJCQkgICAgICAmdGVzdF9mcy0+YmxvY2tfbWFwKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIobmFtZSwgcmV0dmFsLCAid2hpbGUgYWxsb2NhdGluZyBibG9jayBiaXRtYXAiKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAodGVzdF9mcywgImlub2RlIGJpdG1hcCIsCisJCQkJCSAgICAgICZ0ZXN0X2ZzLT5pbm9kZV9tYXApOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihuYW1lLCByZXR2YWwsICJ3aGlsZSBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCIpOworCQlnb3RvIGVycm91dDsKKwl9CisJcmV0dXJuOworCitlcnJvdXQ6CisJZXh0MmZzX2Nsb3NlX2ZyZWUoJnRlc3RfZnMpOworfQorCit2b2lkIHNldHVwX2NtZChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CQljLCBlcnI7CisJdW5zaWduZWQgaW50CWJsb2NrcyA9IDEyODsKKwl1bnNpZ25lZCBpbnQJaW5vZGVzID0gMDsKKwl1bnNpZ25lZCBpbnQJdHlwZSA9IEVYVDJGU19CTUFQNjRfQklUQVJSQVk7CisJaW50CQlmbGFncyA9IEVYVDJfRkxBR182NEJJVFM7CisKKwlpZiAodGVzdF9mcykKKwkJZXh0MmZzX2Nsb3NlX2ZyZWUoJnRlc3RfZnMpOworCisJcmVzZXRfZ2V0b3B0KCk7CisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJiOmk6bHQ6IikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYic6CisJCQlibG9ja3MgPSBwYXJzZV91bG9uZyhvcHRhcmcsIGFyZ3ZbMF0sCisJCQkJCSAgICAgIm51bWJlciBvZiBibG9ja3MiLCAmZXJyKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuOworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJaW5vZGVzID0gcGFyc2VfdWxvbmcob3B0YXJnLCBhcmd2WzBdLAorCQkJCQkgICAgICJudW1iZXIgb2YgYmxvY2tzIiwgJmVycik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybjsKKwkJCWJyZWFrOworCQljYXNlICdsJzoJLyogTGVnYWN5IGJpdG1hcHMgKi8KKwkJCWZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCXR5cGUgPSBwYXJzZV91bG9uZyhvcHRhcmcsIGFyZ3ZbMF0sCisJCQkJCSAgICJiaXRtYXAgYmFja2VuZCB0eXBlIiwgJmVycik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZnByaW50ZihzdGRlcnIsICIlczogdXNhZ2U6IHNldHVwIFstYiBibG9ja3NdICIKKwkJCQkiWy1pIGlub2Rlc10gWy10IHR5cGVdXG4iLCBhcmd2WzBdKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlzZXR1cF9maWxlc3lzdGVtKGFyZ3ZbMF0sIGJsb2NrcywgaW5vZGVzLCB0eXBlLCBmbGFncyk7Cit9CisKK3ZvaWQgY2xvc2VfY21kKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJZXh0MmZzX2Nsb3NlX2ZyZWUoJnRlc3RfZnMpOworfQorCisKK3ZvaWQgZHVtcF9iaXRtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXAsIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgbnVtKQoreworCXVuc2lnbmVkIGNoYXIJKmJ1ZjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJaSwgbGVuID0gKG51bSAtIHN0YXJ0ICsgNykgLyA4OworCisJYnVmID0gbWFsbG9jKGxlbik7CisJaWYgKCFidWYpIHsKKwkJY29tX2VycigiZHVtcF9iaXRtYXAiLCAwLCAiY291bGRuJ3QgYWxsb2NhdGUgYnVmZmVyIik7CisJCXJldHVybjsKKwl9CisJbWVtc2V0KGJ1ZiwgMCwgbGVuKTsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2dlbmVyaWNfYm1hcF9yYW5nZShibWFwLCAoX191NjQpIHN0YXJ0LCBudW0sIGJ1Zik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJkdW1wX2JpdG1hcCIsIHJldHZhbCwgCisJCQkid2hpbGUgY2FsbGluZyBleHQyZnNfZ2VuZXJpY19ibWFwX3JhbmdlIik7CisJCWZyZWUoYnVmKTsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGk9MDsgaSA8IGxlbjsgaSsrKQorCQlwcmludGYoIiUwMngiLCBidWZbaV0pOworCXByaW50ZigiXG4iKTsKKwlwcmludGYoImJpdHMgc2V0OiAldVxuIiwgZXh0MmZzX2JpdGNvdW50KGJ1ZiwgbGVuKSk7CisJZnJlZShidWYpOworfQorCit2b2lkIGR1bXBfaW5vZGVfYml0bWFwX2NtZChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCXByaW50ZigiaW5vZGUgYml0bWFwOiAiKTsKKwlkdW1wX2JpdG1hcCh0ZXN0X2ZzLT5pbm9kZV9tYXAsIDEsIHRlc3RfZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCk7Cit9CisJCit2b2lkIGR1bXBfYmxvY2tfYml0bWFwX2NtZChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCXByaW50ZigiYmxvY2sgYml0bWFwOiAiKTsKKwlkdW1wX2JpdG1hcCh0ZXN0X2ZzLT5ibG9ja19tYXAsIHRlc3RfZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2ssCisJCSAgICB0ZXN0X2ZzLT5zdXBlci0+c19ibG9ja3NfY291bnQpOworfQorCQordm9pZCBkb19zZXRiKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdW5zaWduZWQgaW50IGJsb2NrLCBudW07CisJaW50IGVycjsKKwlpbnQgdGVzdF9yZXN1bHQsIG9wX3Jlc3VsdDsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyAhPSAyICYmIGFyZ2MgIT0gMykgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogc2V0YiA8YmxvY2s+IFtudW1dIik7CisJCXJldHVybjsKKwl9CisKKwlibG9jayA9IHBhcnNlX3Vsb25nKGFyZ3ZbMV0sIGFyZ3ZbMF0sICJibG9jayIsICZlcnIpOworCWlmIChlcnIpCisJCXJldHVybjsKKworCWlmIChhcmdjID09IDMpIHsKKwkJbnVtID0gcGFyc2VfdWxvbmcoYXJndlsyXSwgYXJndlswXSwgIm51bSIsICZlcnIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuOworCisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIodGVzdF9mcy0+YmxvY2tfbWFwLAorCQkJCQkJYmxvY2ssIG51bSk7CisJCXByaW50ZigiTWFya2luZyBibG9ja3MgJXUgdG8gJXVcbiIsIGJsb2NrLCBibG9jayArIG51bSAtIDEpOworCQlyZXR1cm47CisJfQorCisJdGVzdF9yZXN1bHQgPSBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKHRlc3RfZnMtPmJsb2NrX21hcCwgYmxvY2spOworCW9wX3Jlc3VsdCA9IGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIodGVzdF9mcy0+YmxvY2tfbWFwLCBibG9jayk7CisJcHJpbnRmKCJTZXR0aW5nIGJsb2NrICV1LCB3YXMgJXMgYmVmb3JlXG4iLCBibG9jaywgb3BfcmVzdWx0ID8KKwkgICAgICAgInNldCIgOiAiY2xlYXIiKTsKKwlpZiAoIXRlc3RfcmVzdWx0ICE9ICFvcF9yZXN1bHQpCisJCWNvbV9lcnIoYXJndlswXSwgMCwgIipFUlJPUiogdGVzdF9yZXN1bHQgZGlmZmVyZW50ISAoJWQsICVkKSIsCisJCQl0ZXN0X3Jlc3VsdCwgb3BfcmVzdWx0KTsKK30KKwordm9pZCBkb19jbGVhcmIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bnNpZ25lZCBpbnQgYmxvY2ssIG51bTsKKwlpbnQgZXJyOworCWludCB0ZXN0X3Jlc3VsdCwgb3BfcmVzdWx0OworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCWlmIChhcmdjICE9IDIgJiYgYXJnYyAhPSAzKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgIlVzYWdlOiBjbGVhcmIgPGJsb2NrPiBbbnVtXSIpOworCQlyZXR1cm47CisJfQorCisJYmxvY2sgPSBwYXJzZV91bG9uZyhhcmd2WzFdLCBhcmd2WzBdLCAiYmxvY2siLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA9PSAzKSB7CisJCW51bSA9IHBhcnNlX3Vsb25nKGFyZ3ZbMl0sIGFyZ3ZbMF0sICJudW0iLCAmZXJyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybjsKKworCQlleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIodGVzdF9mcy0+YmxvY2tfbWFwLAorCQkJCQkJYmxvY2ssIG51bSk7CisJCXByaW50ZigiQ2xlYXJpbmcgYmxvY2tzICV1IHRvICV1XG4iLCBibG9jaywgYmxvY2sgKyBudW0gLSAxKTsKKwkJcmV0dXJuOworCX0KKworCXRlc3RfcmVzdWx0ID0gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMih0ZXN0X2ZzLT5ibG9ja19tYXAsIGJsb2NrKTsKKwlvcF9yZXN1bHQgPSBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcDIodGVzdF9mcy0+YmxvY2tfbWFwLCBibG9jayk7CisJcHJpbnRmKCJDbGVhcmluZyBibG9jayAldSwgd2FzICVzIGJlZm9yZVxuIiwgYmxvY2ssIG9wX3Jlc3VsdCA/CisJICAgICAgICJzZXQiIDogImNsZWFyIik7CisJaWYgKCF0ZXN0X3Jlc3VsdCAhPSAhb3BfcmVzdWx0KQorCQljb21fZXJyKGFyZ3ZbMF0sIDAsICIqRVJST1IqIHRlc3RfcmVzdWx0IGRpZmZlcmVudCEgKCVkLCAlZCkiLAorCQkJdGVzdF9yZXN1bHQsIG9wX3Jlc3VsdCk7Cit9CisKK3ZvaWQgZG9fdGVzdGIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bnNpZ25lZCBpbnQgYmxvY2ssIG51bTsKKwlpbnQgZXJyOworCWludCB0ZXN0X3Jlc3VsdDsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyAhPSAyICYmIGFyZ2MgIT0gMykgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogdGVzdGIgPGJsb2NrPiBbbnVtXSIpOworCQlyZXR1cm47CisJfQorCisJYmxvY2sgPSBwYXJzZV91bG9uZyhhcmd2WzFdLCBhcmd2WzBdLCAiYmxvY2siLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA9PSAzKSB7CisJCW51bSA9IHBhcnNlX3Vsb25nKGFyZ3ZbMl0sIGFyZ3ZbMF0sICJudW0iLCAmZXJyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybjsKKworCQl0ZXN0X3Jlc3VsdCA9CisJCQlleHQyZnNfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2UyKHRlc3RfZnMtPmJsb2NrX21hcCwKKwkJCQkJCQlibG9jaywgbnVtKTsKKwkJcHJpbnRmKCJCbG9ja3MgJXUgdG8gJXUgYXJlICVzYWxsIGNsZWFyLlxuIiwKKwkJICAgICAgIGJsb2NrLCBibG9jayArIG51bSAtIDEsIHRlc3RfcmVzdWx0ID8gIiIgOiAiTk9UICIpOworCQlyZXR1cm47CisJfQorCisJdGVzdF9yZXN1bHQgPSBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKHRlc3RfZnMtPmJsb2NrX21hcCwgYmxvY2spOworCXByaW50ZigiQmxvY2sgJXUgaXMgJXNcbiIsIGJsb2NrLCB0ZXN0X3Jlc3VsdCA/ICJzZXQiIDogImNsZWFyIik7Cit9CisKK3ZvaWQgZG9fZmZ6YihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXVuc2lnbmVkIGludCBzdGFydCwgZW5kOworCWludCBlcnI7CisJZXJyY29kZV90IHJldHZhbDsKKwlibGs2NF90IG91dDsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyAhPSAzICYmIGFyZ2MgIT0gMykgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogZmZ6YiA8c3RhcnQ+IDxlbmQ+Iik7CisJCXJldHVybjsKKwl9CisKKwlzdGFydCA9IHBhcnNlX3Vsb25nKGFyZ3ZbMV0sIGFyZ3ZbMF0sICJzdGFydCIsICZlcnIpOworCWlmIChlcnIpCisJCXJldHVybjsKKworCWVuZCA9IHBhcnNlX3Vsb25nKGFyZ3ZbMl0sIGFyZ3ZbMF0sICJlbmQiLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfZmluZF9maXJzdF96ZXJvX2Jsb2NrX2JpdG1hcDIodGVzdF9mcy0+YmxvY2tfbWFwLAorCQkJCQkJICAgICAgc3RhcnQsIGVuZCwgJm91dCk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGYoImV4dDJmc19maW5kX2ZpcnN0X3plcm9fYmxvY2tfYml0bWFwMigpIHJldHVybmVkICVzXG4iLAorCQkgICAgICAgZXJyb3JfbWVzc2FnZShyZXR2YWwpKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGYoIkZpcnN0IHVubWFya2VkIGJsb2NrIGlzICVsbHVcbiIsIG91dCk7Cit9CisKK3ZvaWQgZG9fZmZzYihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXVuc2lnbmVkIGludCBzdGFydCwgZW5kOworCWludCBlcnI7CisJZXJyY29kZV90IHJldHZhbDsKKwlibGs2NF90IG91dDsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyAhPSAzICYmIGFyZ2MgIT0gMykgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogZmZzYiA8c3RhcnQ+IDxlbmQ+Iik7CisJCXJldHVybjsKKwl9CisKKwlzdGFydCA9IHBhcnNlX3Vsb25nKGFyZ3ZbMV0sIGFyZ3ZbMF0sICJzdGFydCIsICZlcnIpOworCWlmIChlcnIpCisJCXJldHVybjsKKworCWVuZCA9IHBhcnNlX3Vsb25nKGFyZ3ZbMl0sIGFyZ3ZbMF0sICJlbmQiLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfZmluZF9maXJzdF9zZXRfYmxvY2tfYml0bWFwMih0ZXN0X2ZzLT5ibG9ja19tYXAsCisJCQkJCQkgICAgICBzdGFydCwgZW5kLCAmb3V0KTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ZigiZXh0MmZzX2ZpbmRfZmlyc3Rfc2V0X2Jsb2NrX2JpdG1hcDIoKSByZXR1cm5lZCAlc1xuIiwKKwkJICAgICAgIGVycm9yX21lc3NhZ2UocmV0dmFsKSk7CisJCXJldHVybjsKKwl9CisJcHJpbnRmKCJGaXJzdCBtYXJrZWQgYmxvY2sgaXMgJWxsdVxuIiwgb3V0KTsKK30KKworCit2b2lkIGRvX3plcm9iKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCXByaW50ZigiQ2xlYXJpbmcgYmxvY2sgYml0bWFwLlxuIik7CisJZXh0MmZzX2NsZWFyX2Jsb2NrX2JpdG1hcCh0ZXN0X2ZzLT5ibG9ja19tYXApOworfQorCit2b2lkIGRvX3NldGkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bnNpZ25lZCBpbnQgaW5vZGU7CisJaW50IGVycjsKKwlpbnQgdGVzdF9yZXN1bHQsIG9wX3Jlc3VsdDsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyAhPSAyKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgIlVzYWdlOiBzZXRpIDxpbm9kZT4iKTsKKwkJcmV0dXJuOworCX0KKworCWlub2RlID0gcGFyc2VfdWxvbmcoYXJndlsxXSwgYXJndlswXSwgImlub2RlIiwgJmVycik7CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJdGVzdF9yZXN1bHQgPSBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKHRlc3RfZnMtPmlub2RlX21hcCwgaW5vZGUpOworCW9wX3Jlc3VsdCA9IGV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIodGVzdF9mcy0+aW5vZGVfbWFwLCBpbm9kZSk7CisJcHJpbnRmKCJTZXR0aW5nIGlub2RlICV1LCB3YXMgJXMgYmVmb3JlXG4iLCBpbm9kZSwgb3BfcmVzdWx0ID8KKwkgICAgICAgInNldCIgOiAiY2xlYXIiKTsKKwlpZiAoIXRlc3RfcmVzdWx0ICE9ICFvcF9yZXN1bHQpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiKkVSUk9SKiB0ZXN0X3Jlc3VsdCBkaWZmZXJlbnQhICglZCwgJWQpIiwKKwkJCXRlc3RfcmVzdWx0LCBvcF9yZXN1bHQpOworCQlleGl0X3N0YXR1cysrOworCX0KK30KKwordm9pZCBkb19jbGVhcmkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bnNpZ25lZCBpbnQgaW5vZGU7CisJaW50IGVycjsKKwlpbnQgdGVzdF9yZXN1bHQsIG9wX3Jlc3VsdDsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyAhPSAyKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgIlVzYWdlOiBjbGVhcmIgPGlub2RlPiIpOworCQlyZXR1cm47CisJfQorCisJaW5vZGUgPSBwYXJzZV91bG9uZyhhcmd2WzFdLCBhcmd2WzBdLCAiaW5vZGUiLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwl0ZXN0X3Jlc3VsdCA9IGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIodGVzdF9mcy0+aW5vZGVfbWFwLCBpbm9kZSk7CisJb3BfcmVzdWx0ID0gZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAyKHRlc3RfZnMtPmlub2RlX21hcCwgaW5vZGUpOworCXByaW50ZigiQ2xlYXJpbmcgaW5vZGUgJXUsIHdhcyAlcyBiZWZvcmVcbiIsIGlub2RlLCBvcF9yZXN1bHQgPworCSAgICAgICAic2V0IiA6ICJjbGVhciIpOworCWlmICghdGVzdF9yZXN1bHQgIT0gIW9wX3Jlc3VsdCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICIqRVJST1IqIHRlc3RfcmVzdWx0IGRpZmZlcmVudCEgKCVkLCAlZCkiLAorCQkJdGVzdF9yZXN1bHQsIG9wX3Jlc3VsdCk7CisJCWV4aXRfc3RhdHVzKys7CisJfQorfQorCit2b2lkIGRvX3Rlc3RpKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdW5zaWduZWQgaW50IGlub2RlOworCWludCBlcnI7CisJaW50IHRlc3RfcmVzdWx0OworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCWlmIChhcmdjICE9IDIpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiVXNhZ2U6IHRlc3RiIDxpbm9kZT4iKTsKKwkJcmV0dXJuOworCX0KKworCWlub2RlID0gcGFyc2VfdWxvbmcoYXJndlsxXSwgYXJndlswXSwgImlub2RlIiwgJmVycik7CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJdGVzdF9yZXN1bHQgPSBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKHRlc3RfZnMtPmlub2RlX21hcCwgaW5vZGUpOworCXByaW50ZigiSW5vZGUgJXUgaXMgJXNcbiIsIGlub2RlLCB0ZXN0X3Jlc3VsdCA/ICJzZXQiIDogImNsZWFyIik7Cit9CisKK3ZvaWQgZG9fZmZ6aShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXVuc2lnbmVkIGludCBzdGFydCwgZW5kOworCWludCBlcnI7CisJZXJyY29kZV90IHJldHZhbDsKKwlleHQyX2lub190IG91dDsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyAhPSAzICYmIGFyZ2MgIT0gMykgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogZmZ6aSA8c3RhcnQ+IDxlbmQ+Iik7CisJCXJldHVybjsKKwl9CisKKwlzdGFydCA9IHBhcnNlX3Vsb25nKGFyZ3ZbMV0sIGFyZ3ZbMF0sICJzdGFydCIsICZlcnIpOworCWlmIChlcnIpCisJCXJldHVybjsKKworCWVuZCA9IHBhcnNlX3Vsb25nKGFyZ3ZbMl0sIGFyZ3ZbMF0sICJlbmQiLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfZmluZF9maXJzdF96ZXJvX2lub2RlX2JpdG1hcDIodGVzdF9mcy0+aW5vZGVfbWFwLAorCQkJCQkJICAgICAgc3RhcnQsIGVuZCwgJm91dCk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGYoImV4dDJmc19maW5kX2ZpcnN0X3plcm9faW5vZGVfYml0bWFwMigpIHJldHVybmVkICVzXG4iLAorCQkgICAgICAgZXJyb3JfbWVzc2FnZShyZXR2YWwpKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGYoIkZpcnN0IHVubWFya2VkIGlub2RlIGlzICV1XG4iLCBvdXQpOworfQorCit2b2lkIGRvX2Zmc2koaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhcnQsIGVuZDsKKwlpbnQgZXJyOworCWVycmNvZGVfdCByZXR2YWw7CisJZXh0Ml9pbm9fdCBvdXQ7CisKKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaWYgKGFyZ2MgIT0gMyAmJiBhcmdjICE9IDMpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiVXNhZ2U6IGZmc2kgPHN0YXJ0PiA8ZW5kPiIpOworCQlyZXR1cm47CisJfQorCisJc3RhcnQgPSBwYXJzZV91bG9uZyhhcmd2WzFdLCBhcmd2WzBdLCAic3RhcnQiLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwllbmQgPSBwYXJzZV91bG9uZyhhcmd2WzJdLCBhcmd2WzBdLCAiZW5kIiwgJmVycik7CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2ZpbmRfZmlyc3Rfc2V0X2lub2RlX2JpdG1hcDIodGVzdF9mcy0+aW5vZGVfbWFwLAorCQkJCQkJICAgICBzdGFydCwgZW5kLCAmb3V0KTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ZigiZXh0MmZzX2ZpbmRfZmlyc3Rfc2V0X2lub2RlX2JpdG1hcDIoKSByZXR1cm5lZCAlc1xuIiwKKwkJICAgICAgIGVycm9yX21lc3NhZ2UocmV0dmFsKSk7CisJCXJldHVybjsKKwl9CisJcHJpbnRmKCJGaXJzdCBtYXJrZWQgaW5vZGUgaXMgJXVcbiIsIG91dCk7Cit9CisKK3ZvaWQgZG9femVyb2koaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJcHJpbnRmKCJDbGVhcmluZyBpbm9kZSBiaXRtYXAuXG4iKTsKKwlleHQyZnNfY2xlYXJfaW5vZGVfYml0bWFwKHRlc3RfZnMtPmlub2RlX21hcCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBpbnQJYmxvY2tzID0gMTI4OworCXVuc2lnbmVkIGludAlpbm9kZXMgPSAwOworCXVuc2lnbmVkIGludAl0eXBlID0gRVhUMkZTX0JNQVA2NF9CSVRBUlJBWTsKKwlpbnQJCWMsIGVyciwgY29kZTsKKwljaGFyCQkqcmVxdWVzdCA9IChjaGFyICopTlVMTDsKKwljaGFyCQkqY21kX2ZpbGUgPSAwOworCWludAkJc2NpX2lkeDsKKwlpbnQJCWZsYWdzID0gRVhUMl9GTEFHXzY0QklUUzsKKworCWFkZF9lcnJvcl90YWJsZSgmZXRfc3NfZXJyb3JfdGFibGUpOworCWFkZF9lcnJvcl90YWJsZSgmZXRfZXh0Ml9lcnJvcl90YWJsZSk7CisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiYjppOmx0OlI6ZjoiKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdiJzoKKwkJCWJsb2NrcyA9IHBhcnNlX3Vsb25nKG9wdGFyZywgYXJndlswXSwKKwkJCQkJICAgICAibnVtYmVyIG9mIGJsb2NrcyIsICZlcnIpOworCQkJaWYgKGVycikKKwkJCQlleGl0KDEpOworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJaW5vZGVzID0gcGFyc2VfdWxvbmcob3B0YXJnLCBhcmd2WzBdLAorCQkJCQkgICAgICJudW1iZXIgb2YgYmxvY2tzIiwgJmVycik7CisJCQlpZiAoZXJyKQorCQkJCWV4aXQoMSk7CisJCQlicmVhazsKKwkJY2FzZSAnbCc6CS8qIExlZ2FjeSBiaXRtYXBzICovCisJCQlmbGFncyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAndCc6CisJCQl0eXBlID0gcGFyc2VfdWxvbmcob3B0YXJnLCBhcmd2WzBdLAorCQkJCQkgICAiYml0bWFwIGJhY2tlbmQgdHlwZSIsICZlcnIpOworCQkJaWYgKGVycikKKwkJCQlleGl0KDEpOworCQkJYnJlYWs7CisJCWNhc2UgJ1InOgorCQkJcmVxdWVzdCA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWNtZF9maWxlID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogJXMgWy1SIHJlcXVlc3RdICIKKwkJCQkiWy1mIGNtZF9maWxlXSIsIHN1YnN5c3RlbV9uYW1lKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlzY2lfaWR4ID0gc3NfY3JlYXRlX2ludm9jYXRpb24oc3Vic3lzdGVtX25hbWUsIHZlcnNpb24sCisJCQkJICAgICAgIChjaGFyICopTlVMTCwgJnRzdF9iaXRtYXBzX2NtZHMsICZjb2RlKTsKKwlpZiAoY29kZSkgeworCQlzc19wZXJyb3Ioc2NpX2lkeCwgY29kZSwgImNyZWF0aW5nIGludm9jYXRpb24iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwkodm9pZCkgc3NfYWRkX3JlcXVlc3RfdGFibGUgKHNjaV9pZHgsICZzc19zdGRfcmVxdWVzdHMsIDEsICZjb2RlKTsKKwlpZiAoY29kZSkgeworCQlzc19wZXJyb3Ioc2NpX2lkeCwgY29kZSwgImFkZGluZyBzdGFuZGFyZCByZXF1ZXN0cyIpOworCQlleGl0ICgxKTsKKwl9CisKKwlwcmludGYoIiVzICVzLiAgVHlwZSAnPycgZm9yIGEgbGlzdCBvZiBjb21tYW5kcy5cblxuIiwKKwkgICAgICAgc3Vic3lzdGVtX25hbWUsIHZlcnNpb24pOworCisJc2V0dXBfZmlsZXN5c3RlbShhcmd2WzBdLCBibG9ja3MsIGlub2RlcywgdHlwZSwgZmxhZ3MpOworCisJaWYgKHJlcXVlc3QpIHsKKwkJY29kZSA9IHNzX2V4ZWN1dGVfbGluZShzY2lfaWR4LCByZXF1ZXN0KTsKKwkJaWYgKGNvZGUpIHsKKwkJCXNzX3BlcnJvcihzY2lfaWR4LCBjb2RlLCByZXF1ZXN0KTsKKwkJCWV4aXRfc3RhdHVzKys7CisJCX0KKwl9IGVsc2UgaWYgKGNtZF9maWxlKSB7CisJCWV4aXRfc3RhdHVzID0gc291cmNlX2ZpbGUoY21kX2ZpbGUsIHNjaV9pZHgpOworCX0gZWxzZSB7CisJCXNzX2xpc3RlbihzY2lfaWR4KTsKKwl9CisKKwlleGl0KGV4aXRfc3RhdHVzKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy90c3RfYml0bWFwc19jbWQuY3QgYi9saWIvZXh0MmZzL3RzdF9iaXRtYXBzX2NtZC5jdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2I3ZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy90c3RfYml0bWFwc19jbWQuY3QKQEAgLTAsMCArMSw1MSBAQAorY29tbWFuZF90YWJsZSB0c3RfYml0bWFwc19jbWRzOworCityZXF1ZXN0IHNldHVwX2NtZCwgIlNldHVwIGZpbGUgc3lzdGVtIiwKKwlzZXR1cDsKKworcmVxdWVzdCBjbG9zZV9jbWQsICJDbG9zZSBmaWxlIHN5c3RlbSIsCisJY2xvc2U7CisKK3JlcXVlc3QgZHVtcF9pbm9kZV9iaXRtYXBfY21kLCAiRHVtcCB0aGUgaW5vZGUgYml0bWFwIiwKKwlkdW1wX2lub2RlX2JpdG1hcCwgZHVtcF9pYjsKKworcmVxdWVzdCBkdW1wX2Jsb2NrX2JpdG1hcF9jbWQsICJEdW1wIHRoZSBibG9jayBiaXRtYXAiLAorCWR1bXBfYmxvY2tfYml0bWFwLCBkdW1wX2JiOworCityZXF1ZXN0IGRvX3NldGIsICJTZXQgYmxvY2siLAorCXNldF9ibG9jaywgc2V0YjsKKworcmVxdWVzdCBkb19jbGVhcmIsICJDbGVhciBibG9jayIsCisJY2xlYXJfYmxvY2ssIGNsZWFyYjsKKworcmVxdWVzdCBkb190ZXN0YiwgIlRlc3QgYmxvY2siLAorCXRlc3RfYmxvY2ssIHRlc3RiOworCityZXF1ZXN0IGRvX2ZmemIsICJGaW5kIGZpcnN0IHplcm8gYmxvY2siLAorCWZpbmRfZmlyc3RfemVyb19ibG9jaywgZmZ6YjsKKworcmVxdWVzdCBkb19mZnNiLCAiRmluZCBmaXJzdCBzZXQgYmxvY2siLAorCWZpbmRfZmlyc3Rfc2V0X2Jsb2NrLCBmZnNiOworCityZXF1ZXN0IGRvX3plcm9iLCAiQ2xlYXIgYmxvY2sgYml0bWFwIiwKKwljbGVhcl9ibG9ja19iaXRtYXAsIHplcm9iOworCityZXF1ZXN0IGRvX3NldGksICJTZXQgaW5vZGUiLAorCXNldF9pbm9kZSwgc2V0aTsKKworcmVxdWVzdCBkb19jbGVhcmksICJDbGVhciBpbm9kZSIsCisJY2xlYXJfaW5vZGUsIGNsZWFyaTsKKworcmVxdWVzdCBkb190ZXN0aSwgIlRlc3QgaW5vZGUiLAorCXRlc3RfaW5vZGUsIHRlc3RpOworCityZXF1ZXN0IGRvX2ZmemksICJGaW5kIGZpcnN0IHplcm8gaW5vZGUiLAorCWZpbmRfZmlyc3RfemVyb19pbm9kZSwgZmZ6aTsKKworcmVxdWVzdCBkb19mZnNpLCAiRmluZCBmaXJzdCBzZXQgaW5vZGUiLAorCWZpbmRfZmlyc3Rfc2V0X2lub2RlLCBmZnNpOworCityZXF1ZXN0IGRvX3plcm9pLCAiQ2xlYXIgaW5vZGUgYml0bWFwIiwKKwljbGVhcl9pbm9kZV9iaXRtYXAsIHplcm9pOworCitlbmQ7CmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL3RzdF9iaXRtYXBzX2NtZHMgYi9saWIvZXh0MmZzL3RzdF9iaXRtYXBzX2NtZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5MjU5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvdHN0X2JpdG1hcHNfY21kcwpAQCAtMCwwICsxLDE0OCBAQAorc2V0YiAxMgorc2V0YiAxMgorY2xlYXJiIDEyCitjbGVhcmIgMTIKK3NldGIgMTIKK3NldGIgMTQKK3NldGIgMTYKK3Rlc3RiIDEzCit0ZXN0YiAxNQordGVzdGIgMTIKK3Rlc3RiIDE0CitzZXRiIDEzCitzZXRiIDE1Cit0ZXN0YiAxMgordGVzdGIgMTEKK3Rlc3RiIDE1Cit0ZXN0YiAxNgorZHVtcF9iYgorZmZ6YiAxMSAxNgorZmZ6YiAxMiAxNgorZmZ6YiAxMiAyMAorZmZzYiAwIDEyNworZmZzYiAxIDEyOAorZmZzYiAxIDEyNworZmZzYiAxIDEwCitmZnNiIDEgMTEKK2Zmc2IgMTIgMTIKK2Zmc2IgMTMgMTIKK2Zmc2IgMTIgMTUKK2NsZWFyYiAxMworZmZ6YiAxMiAyMAorZmZzYiAxMyAxOAorc2V0YiAxMworY2xlYXJiIDEyIDcKK3Rlc3RiIDEyIDcKK3NldGIgMTUKK3Rlc3RiIDEyIDcKK2NsZWFyYiAxNQordGVzdGIgMTIgNworc2V0YiAxMiA3CitkdW1wX2JiCitzZXRpIDIKK3NldGkgNQorc2V0aSA0CitzZXRpIDMKK3NldGkgNAorc2V0aSA1Cit0ZXN0aSA2Cit0ZXN0aSAxCitkdW1wX2liCitmZnppIDEgNgorZmZ6aSAyIDUKK2ZmemkgMiA2CitmZnNpIDAgMzEKK2Zmc2kgMSAzMworZmZzaSAxIDMyCitmZnNpIDIgMzIKK2Zmc2kgNiAzMgorY2xlYXJpIDQKK2ZmemkgMiA2CitmZnNpIDQgMzIKK2Zmc2kgNSAzMgoremVyb2kKK3Rlc3RpIDUKK3NldGkgNQorc2V0aSA1CitjbGVhcmkgNQorY2xlYXJpIDUKK3Rlc3RpIDE3Cit0ZXN0aSA2Cit0ZXN0aSA0CitjbGVhcmIgNyAxMgorZHVtcF9iYgorc2V0YiAxCitkdW1wX2JiCitzZXRiIDIKK2R1bXBfYmIKK3NldGIgMworZHVtcF9iYgorc2V0YiA0CitkdW1wX2JiCitzZXRiIDUKK2R1bXBfYmIKK3NldGIgNgorZHVtcF9iYgorc2V0YiA3CitkdW1wX2JiCitzZXRiIDgKK2R1bXBfYmIKK3NldGIgMTAKK3NldGIgMTIKK3NldGIgMTQKK3NldGIgMTcKK3NldGIgMTkKK3NldGIgMjQKK3NldGIgMjYKK3NldGIgMjcKK3NldGIgMzAKK3NldGIgMzEKK3NldGIgMzIKK3NldGIgMzUKK3NldGIgMzkKK3NldGIgNDAKK3NldGIgNDQKK3NldGIgNDYKK3NldGIgNDcKK3NldGIgNDkKK3NldGIgNTEKK3NldGIgNTIKK2NsZWFyYiAyCitjbGVhcmIgMworY2xlYXJiIDcKK2R1bXBfYmIKK2Zmc2IgMTQgMTI3CitmZnNiIDE1IDEyNworZmZzYiAzNiAxMjcKK2Zmc2IgMzIgMTI3CitmZnNiIDUyIDEyNworZmZzYiA1MyAxMjcKK2Zmc2IgNDYgMTI3CitmZnNiIDQ1IDEyNworZmZzYiA0MSAxMjcKK2Zmc2IgMjAgMTI3CitmZnNiIDEgMTI3CitmZnNiIDIgMTI3CitmZnNiIDMgMTI3CitmZnNiIDQgMTI3CitmZnNiIDUgMTI3CitmZnNiIDYgMTI3CitmZnNiIDcgMTI3CitmZnNiIDggMTI3CitmZnpiIDEgMTI3CitmZnpiIDIgMTI3CitmZnpiIDMgMTI3CitmZnpiIDQgMTI3CitmZnpiIDUgMTI3CitmZnpiIDYgMTI3CitmZnpiIDcgMTI3CitmZnpiIDggMTI3CitmZnpiIDQ1IDEyNworZmZ6YiA0NiAxMjcKK2ZmemIgNDcgMTI3CitmZnpiIDQ4IDEyNworZmZ6YiA0OSAxMjcKK2ZmemIgNTAgMTI3CitmZnpiIDUxIDEyNworcXVpdAorCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL3RzdF9iaXRtYXBzX2V4cCBiL2xpYi9leHQyZnMvdHN0X2JpdG1hcHNfZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMjI2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL3RzdF9iaXRtYXBzX2V4cApAQCAtMCwwICsxLDMwOSBAQAordHN0X2JpdG1hcHMgMS4wLiAgVHlwZSAnPycgZm9yIGEgbGlzdCBvZiBjb21tYW5kcy4KKwordHN0X2JpdG1hcHM6IHNldGIgMTIKK1NldHRpbmcgYmxvY2sgMTIsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDEyCitTZXR0aW5nIGJsb2NrIDEyLCB3YXMgc2V0IGJlZm9yZQordHN0X2JpdG1hcHM6IGNsZWFyYiAxMgorQ2xlYXJpbmcgYmxvY2sgMTIsIHdhcyBzZXQgYmVmb3JlCit0c3RfYml0bWFwczogY2xlYXJiIDEyCitDbGVhcmluZyBibG9jayAxMiwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgMTIKK1NldHRpbmcgYmxvY2sgMTIsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDE0CitTZXR0aW5nIGJsb2NrIDE0LCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0YiAxNgorU2V0dGluZyBibG9jayAxNiwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHRlc3RiIDEzCitCbG9jayAxMyBpcyBjbGVhcgordHN0X2JpdG1hcHM6IHRlc3RiIDE1CitCbG9jayAxNSBpcyBjbGVhcgordHN0X2JpdG1hcHM6IHRlc3RiIDEyCitCbG9jayAxMiBpcyBzZXQKK3RzdF9iaXRtYXBzOiB0ZXN0YiAxNAorQmxvY2sgMTQgaXMgc2V0Cit0c3RfYml0bWFwczogc2V0YiAxMworU2V0dGluZyBibG9jayAxMywgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgMTUKK1NldHRpbmcgYmxvY2sgMTUsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiB0ZXN0YiAxMgorQmxvY2sgMTIgaXMgc2V0Cit0c3RfYml0bWFwczogdGVzdGIgMTEKK0Jsb2NrIDExIGlzIGNsZWFyCit0c3RfYml0bWFwczogdGVzdGIgMTUKK0Jsb2NrIDE1IGlzIHNldAordHN0X2JpdG1hcHM6IHRlc3RiIDE2CitCbG9jayAxNiBpcyBzZXQKK3RzdF9iaXRtYXBzOiBkdW1wX2JiCitibG9jayBiaXRtYXA6IDAwZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitiaXRzIHNldDogNQordHN0X2JpdG1hcHM6IGZmemIgMTEgMTYKK0ZpcnN0IHVubWFya2VkIGJsb2NrIGlzIDExCit0c3RfYml0bWFwczogZmZ6YiAxMiAxNgorZXh0MmZzX2ZpbmRfZmlyc3RfemVyb19ibG9ja19iaXRtYXAyKCkgcmV0dXJuZWQgTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQordHN0X2JpdG1hcHM6IGZmemIgMTIgMjAKK0ZpcnN0IHVubWFya2VkIGJsb2NrIGlzIDE3Cit0c3RfYml0bWFwczogZmZzYiAwIDEyNworZXh0MmZzX2ZpbmRfZmlyc3Rfc2V0X2Jsb2NrX2JpdG1hcDIoKSByZXR1cm5lZCBJbnZhbGlkIGFyZ3VtZW50Cit0c3RfYml0bWFwczogZmZzYiAxIDEyOAorZXh0MmZzX2ZpbmRfZmlyc3Rfc2V0X2Jsb2NrX2JpdG1hcDIoKSByZXR1cm5lZCBJbnZhbGlkIGFyZ3VtZW50Cit0c3RfYml0bWFwczogZmZzYiAxIDEyNworRmlyc3QgbWFya2VkIGJsb2NrIGlzIDEyCit0c3RfYml0bWFwczogZmZzYiAxIDEwCitleHQyZnNfZmluZF9maXJzdF9zZXRfYmxvY2tfYml0bWFwMigpIHJldHVybmVkIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK3RzdF9iaXRtYXBzOiBmZnNiIDEgMTEKK2V4dDJmc19maW5kX2ZpcnN0X3NldF9ibG9ja19iaXRtYXAyKCkgcmV0dXJuZWQgTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQordHN0X2JpdG1hcHM6IGZmc2IgMTIgMTIKK0ZpcnN0IG1hcmtlZCBibG9jayBpcyAxMgordHN0X2JpdG1hcHM6IGZmc2IgMTMgMTIKK2V4dDJmc19maW5kX2ZpcnN0X3NldF9ibG9ja19iaXRtYXAyKCkgcmV0dXJuZWQgSW52YWxpZCBhcmd1bWVudAordHN0X2JpdG1hcHM6IGZmc2IgMTIgMTUKK0ZpcnN0IG1hcmtlZCBibG9jayBpcyAxMgordHN0X2JpdG1hcHM6IGNsZWFyYiAxMworQ2xlYXJpbmcgYmxvY2sgMTMsIHdhcyBzZXQgYmVmb3JlCit0c3RfYml0bWFwczogZmZ6YiAxMiAyMAorRmlyc3QgdW5tYXJrZWQgYmxvY2sgaXMgMTMKK3RzdF9iaXRtYXBzOiBmZnNiIDEzIDE4CitGaXJzdCBtYXJrZWQgYmxvY2sgaXMgMTQKK3RzdF9iaXRtYXBzOiBzZXRiIDEzCitTZXR0aW5nIGJsb2NrIDEzLCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogY2xlYXJiIDEyIDcKK0NsZWFyaW5nIGJsb2NrcyAxMiB0byAxOAordHN0X2JpdG1hcHM6IHRlc3RiIDEyIDcKK0Jsb2NrcyAxMiB0byAxOCBhcmUgYWxsIGNsZWFyLgordHN0X2JpdG1hcHM6IHNldGIgMTUKK1NldHRpbmcgYmxvY2sgMTUsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiB0ZXN0YiAxMiA3CitCbG9ja3MgMTIgdG8gMTggYXJlIE5PVCBhbGwgY2xlYXIuCit0c3RfYml0bWFwczogY2xlYXJiIDE1CitDbGVhcmluZyBibG9jayAxNSwgd2FzIHNldCBiZWZvcmUKK3RzdF9iaXRtYXBzOiB0ZXN0YiAxMiA3CitCbG9ja3MgMTIgdG8gMTggYXJlIGFsbCBjbGVhci4KK3RzdF9iaXRtYXBzOiBzZXRiIDEyIDcKK01hcmtpbmcgYmxvY2tzIDEyIHRvIDE4Cit0c3RfYml0bWFwczogZHVtcF9iYgorYmxvY2sgYml0bWFwOiAwMGY4MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorYml0cyBzZXQ6IDcKK3RzdF9iaXRtYXBzOiBzZXRpIDIKK1NldHRpbmcgaW5vZGUgMiwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGkgNQorU2V0dGluZyBpbm9kZSA1LCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0aSA0CitTZXR0aW5nIGlub2RlIDQsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRpIDMKK1NldHRpbmcgaW5vZGUgMywgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGkgNAorU2V0dGluZyBpbm9kZSA0LCB3YXMgc2V0IGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGkgNQorU2V0dGluZyBpbm9kZSA1LCB3YXMgc2V0IGJlZm9yZQordHN0X2JpdG1hcHM6IHRlc3RpIDYKK0lub2RlIDYgaXMgY2xlYXIKK3RzdF9iaXRtYXBzOiB0ZXN0aSAxCitJbm9kZSAxIGlzIGNsZWFyCit0c3RfYml0bWFwczogZHVtcF9pYgoraW5vZGUgYml0bWFwOiAxZTAwMDAwMAorYml0cyBzZXQ6IDQKK3RzdF9iaXRtYXBzOiBmZnppIDEgNgorRmlyc3QgdW5tYXJrZWQgaW5vZGUgaXMgMQordHN0X2JpdG1hcHM6IGZmemkgMiA1CitleHQyZnNfZmluZF9maXJzdF96ZXJvX2lub2RlX2JpdG1hcDIoKSByZXR1cm5lZCBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Cit0c3RfYml0bWFwczogZmZ6aSAyIDYKK0ZpcnN0IHVubWFya2VkIGlub2RlIGlzIDYKK3RzdF9iaXRtYXBzOiBmZnNpIDAgMzEKK2V4dDJmc19maW5kX2ZpcnN0X3NldF9pbm9kZV9iaXRtYXAyKCkgcmV0dXJuZWQgSW52YWxpZCBhcmd1bWVudAordHN0X2JpdG1hcHM6IGZmc2kgMSAzMworZXh0MmZzX2ZpbmRfZmlyc3Rfc2V0X2lub2RlX2JpdG1hcDIoKSByZXR1cm5lZCBJbnZhbGlkIGFyZ3VtZW50Cit0c3RfYml0bWFwczogZmZzaSAxIDMyCitGaXJzdCBtYXJrZWQgaW5vZGUgaXMgMgordHN0X2JpdG1hcHM6IGZmc2kgMiAzMgorRmlyc3QgbWFya2VkIGlub2RlIGlzIDIKK3RzdF9iaXRtYXBzOiBmZnNpIDYgMzIKK2V4dDJmc19maW5kX2ZpcnN0X3NldF9pbm9kZV9iaXRtYXAyKCkgcmV0dXJuZWQgTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQordHN0X2JpdG1hcHM6IGNsZWFyaSA0CitDbGVhcmluZyBpbm9kZSA0LCB3YXMgc2V0IGJlZm9yZQordHN0X2JpdG1hcHM6IGZmemkgMiA2CitGaXJzdCB1bm1hcmtlZCBpbm9kZSBpcyA0Cit0c3RfYml0bWFwczogZmZzaSA0IDMyCitGaXJzdCBtYXJrZWQgaW5vZGUgaXMgNQordHN0X2JpdG1hcHM6IGZmc2kgNSAzMgorRmlyc3QgbWFya2VkIGlub2RlIGlzIDUKK3RzdF9iaXRtYXBzOiB6ZXJvaQorQ2xlYXJpbmcgaW5vZGUgYml0bWFwLgordHN0X2JpdG1hcHM6IHRlc3RpIDUKK0lub2RlIDUgaXMgY2xlYXIKK3RzdF9iaXRtYXBzOiBzZXRpIDUKK1NldHRpbmcgaW5vZGUgNSwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGkgNQorU2V0dGluZyBpbm9kZSA1LCB3YXMgc2V0IGJlZm9yZQordHN0X2JpdG1hcHM6IGNsZWFyaSA1CitDbGVhcmluZyBpbm9kZSA1LCB3YXMgc2V0IGJlZm9yZQordHN0X2JpdG1hcHM6IGNsZWFyaSA1CitDbGVhcmluZyBpbm9kZSA1LCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogdGVzdGkgMTcKK0lub2RlIDE3IGlzIGNsZWFyCit0c3RfYml0bWFwczogdGVzdGkgNgorSW5vZGUgNiBpcyBjbGVhcgordHN0X2JpdG1hcHM6IHRlc3RpIDQKK0lub2RlIDQgaXMgY2xlYXIKK3RzdF9iaXRtYXBzOiBjbGVhcmIgNyAxMgorQ2xlYXJpbmcgYmxvY2tzIDcgdG8gMTgKK3RzdF9iaXRtYXBzOiBkdW1wX2JiCitibG9jayBiaXRtYXA6IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitiaXRzIHNldDogMAordHN0X2JpdG1hcHM6IHNldGIgMQorU2V0dGluZyBibG9jayAxLCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogZHVtcF9iYgorYmxvY2sgYml0bWFwOiAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorYml0cyBzZXQ6IDEKK3RzdF9iaXRtYXBzOiBzZXRiIDIKK1NldHRpbmcgYmxvY2sgMiwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IGR1bXBfYmIKK2Jsb2NrIGJpdG1hcDogMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2JpdHMgc2V0OiAyCit0c3RfYml0bWFwczogc2V0YiAzCitTZXR0aW5nIGJsb2NrIDMsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBkdW1wX2JiCitibG9jayBiaXRtYXA6IDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitiaXRzIHNldDogMwordHN0X2JpdG1hcHM6IHNldGIgNAorU2V0dGluZyBibG9jayA0LCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogZHVtcF9iYgorYmxvY2sgYml0bWFwOiAwZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorYml0cyBzZXQ6IDQKK3RzdF9iaXRtYXBzOiBzZXRiIDUKK1NldHRpbmcgYmxvY2sgNSwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IGR1bXBfYmIKK2Jsb2NrIGJpdG1hcDogMWYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2JpdHMgc2V0OiA1Cit0c3RfYml0bWFwczogc2V0YiA2CitTZXR0aW5nIGJsb2NrIDYsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBkdW1wX2JiCitibG9jayBiaXRtYXA6IDNmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitiaXRzIHNldDogNgordHN0X2JpdG1hcHM6IHNldGIgNworU2V0dGluZyBibG9jayA3LCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogZHVtcF9iYgorYmxvY2sgYml0bWFwOiA3ZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorYml0cyBzZXQ6IDcKK3RzdF9iaXRtYXBzOiBzZXRiIDgKK1NldHRpbmcgYmxvY2sgOCwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IGR1bXBfYmIKK2Jsb2NrIGJpdG1hcDogZmYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2JpdHMgc2V0OiA4Cit0c3RfYml0bWFwczogc2V0YiAxMAorU2V0dGluZyBibG9jayAxMCwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgMTIKK1NldHRpbmcgYmxvY2sgMTIsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDE0CitTZXR0aW5nIGJsb2NrIDE0LCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0YiAxNworU2V0dGluZyBibG9jayAxNywgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgMTkKK1NldHRpbmcgYmxvY2sgMTksIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDI0CitTZXR0aW5nIGJsb2NrIDI0LCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0YiAyNgorU2V0dGluZyBibG9jayAyNiwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgMjcKK1NldHRpbmcgYmxvY2sgMjcsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDMwCitTZXR0aW5nIGJsb2NrIDMwLCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0YiAzMQorU2V0dGluZyBibG9jayAzMSwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgMzIKK1NldHRpbmcgYmxvY2sgMzIsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDM1CitTZXR0aW5nIGJsb2NrIDM1LCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0YiAzOQorU2V0dGluZyBibG9jayAzOSwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgNDAKK1NldHRpbmcgYmxvY2sgNDAsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDQ0CitTZXR0aW5nIGJsb2NrIDQ0LCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0YiA0NgorU2V0dGluZyBibG9jayA0Niwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgNDcKK1NldHRpbmcgYmxvY2sgNDcsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDQ5CitTZXR0aW5nIGJsb2NrIDQ5LCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0YiA1MQorU2V0dGluZyBibG9jayA1MSwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgNTIKK1NldHRpbmcgYmxvY2sgNTIsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBjbGVhcmIgMgorQ2xlYXJpbmcgYmxvY2sgMiwgd2FzIHNldCBiZWZvcmUKK3RzdF9iaXRtYXBzOiBjbGVhcmIgMworQ2xlYXJpbmcgYmxvY2sgMywgd2FzIHNldCBiZWZvcmUKK3RzdF9iaXRtYXBzOiBjbGVhcmIgNworQ2xlYXJpbmcgYmxvY2sgNywgd2FzIHNldCBiZWZvcmUKK3RzdF9iaXRtYXBzOiBkdW1wX2JiCitibG9jayBiaXRtYXA6IGI5MmE4NWU2YzQ2ODBkMDAwMDAwMDAwMDAwMDAwMDAwCitiaXRzIHNldDogMjUKK3RzdF9iaXRtYXBzOiBmZnNiIDE0IDEyNworRmlyc3QgbWFya2VkIGJsb2NrIGlzIDE0Cit0c3RfYml0bWFwczogZmZzYiAxNSAxMjcKK0ZpcnN0IG1hcmtlZCBibG9jayBpcyAxNwordHN0X2JpdG1hcHM6IGZmc2IgMzYgMTI3CitGaXJzdCBtYXJrZWQgYmxvY2sgaXMgMzkKK3RzdF9iaXRtYXBzOiBmZnNiIDMyIDEyNworRmlyc3QgbWFya2VkIGJsb2NrIGlzIDMyCit0c3RfYml0bWFwczogZmZzYiA1MiAxMjcKK0ZpcnN0IG1hcmtlZCBibG9jayBpcyA1MgordHN0X2JpdG1hcHM6IGZmc2IgNTMgMTI3CitleHQyZnNfZmluZF9maXJzdF9zZXRfYmxvY2tfYml0bWFwMigpIHJldHVybmVkIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK3RzdF9iaXRtYXBzOiBmZnNiIDQ2IDEyNworRmlyc3QgbWFya2VkIGJsb2NrIGlzIDQ2Cit0c3RfYml0bWFwczogZmZzYiA0NSAxMjcKK0ZpcnN0IG1hcmtlZCBibG9jayBpcyA0NgordHN0X2JpdG1hcHM6IGZmc2IgNDEgMTI3CitGaXJzdCBtYXJrZWQgYmxvY2sgaXMgNDQKK3RzdF9iaXRtYXBzOiBmZnNiIDIwIDEyNworRmlyc3QgbWFya2VkIGJsb2NrIGlzIDI0Cit0c3RfYml0bWFwczogZmZzYiAxIDEyNworRmlyc3QgbWFya2VkIGJsb2NrIGlzIDEKK3RzdF9iaXRtYXBzOiBmZnNiIDIgMTI3CitGaXJzdCBtYXJrZWQgYmxvY2sgaXMgNAordHN0X2JpdG1hcHM6IGZmc2IgMyAxMjcKK0ZpcnN0IG1hcmtlZCBibG9jayBpcyA0Cit0c3RfYml0bWFwczogZmZzYiA0IDEyNworRmlyc3QgbWFya2VkIGJsb2NrIGlzIDQKK3RzdF9iaXRtYXBzOiBmZnNiIDUgMTI3CitGaXJzdCBtYXJrZWQgYmxvY2sgaXMgNQordHN0X2JpdG1hcHM6IGZmc2IgNiAxMjcKK0ZpcnN0IG1hcmtlZCBibG9jayBpcyA2Cit0c3RfYml0bWFwczogZmZzYiA3IDEyNworRmlyc3QgbWFya2VkIGJsb2NrIGlzIDgKK3RzdF9iaXRtYXBzOiBmZnNiIDggMTI3CitGaXJzdCBtYXJrZWQgYmxvY2sgaXMgOAordHN0X2JpdG1hcHM6IGZmemIgMSAxMjcKK0ZpcnN0IHVubWFya2VkIGJsb2NrIGlzIDIKK3RzdF9iaXRtYXBzOiBmZnpiIDIgMTI3CitGaXJzdCB1bm1hcmtlZCBibG9jayBpcyAyCit0c3RfYml0bWFwczogZmZ6YiAzIDEyNworRmlyc3QgdW5tYXJrZWQgYmxvY2sgaXMgMwordHN0X2JpdG1hcHM6IGZmemIgNCAxMjcKK0ZpcnN0IHVubWFya2VkIGJsb2NrIGlzIDcKK3RzdF9iaXRtYXBzOiBmZnpiIDUgMTI3CitGaXJzdCB1bm1hcmtlZCBibG9jayBpcyA3Cit0c3RfYml0bWFwczogZmZ6YiA2IDEyNworRmlyc3QgdW5tYXJrZWQgYmxvY2sgaXMgNwordHN0X2JpdG1hcHM6IGZmemIgNyAxMjcKK0ZpcnN0IHVubWFya2VkIGJsb2NrIGlzIDcKK3RzdF9iaXRtYXBzOiBmZnpiIDggMTI3CitGaXJzdCB1bm1hcmtlZCBibG9jayBpcyA5Cit0c3RfYml0bWFwczogZmZ6YiA0NSAxMjcKK0ZpcnN0IHVubWFya2VkIGJsb2NrIGlzIDQ1Cit0c3RfYml0bWFwczogZmZ6YiA0NiAxMjcKK0ZpcnN0IHVubWFya2VkIGJsb2NrIGlzIDQ4Cit0c3RfYml0bWFwczogZmZ6YiA0NyAxMjcKK0ZpcnN0IHVubWFya2VkIGJsb2NrIGlzIDQ4Cit0c3RfYml0bWFwczogZmZ6YiA0OCAxMjcKK0ZpcnN0IHVubWFya2VkIGJsb2NrIGlzIDQ4Cit0c3RfYml0bWFwczogZmZ6YiA0OSAxMjcKK0ZpcnN0IHVubWFya2VkIGJsb2NrIGlzIDUwCit0c3RfYml0bWFwczogZmZ6YiA1MCAxMjcKK0ZpcnN0IHVubWFya2VkIGJsb2NrIGlzIDUwCit0c3RfYml0bWFwczogZmZ6YiA1MSAxMjcKK0ZpcnN0IHVubWFya2VkIGJsb2NrIGlzIDUzCit0c3RfYml0bWFwczogcXVpdAordHN0X2JpdG1hcHM6IApkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy90c3RfYml0b3BzLmMgYi9saWIvZXh0MmZzL3RzdF9iaXRvcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDcxNDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy90c3RfYml0b3BzLmMKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgKiBUaGlzIHRlc3RpbmcgcHJvZ3JhbSBtYWtlcyBzdXJlIHRoZSBiaXRvcHMgZnVuY3Rpb25zIHdvcmsKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKK3Vuc2lnbmVkIGNoYXIgYml0YXJyYXlbXSA9IHsKKwkweDgwLCAweEYwLCAweDQwLCAweDQwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MTAsIDB4MjAsIDB4MDAsIDB4MDAKKwl9OworCitpbnQgYml0c19saXN0W10gPSB7CisJNywgMTIsIDEzLCAxNCwxNSwgMjIsIDMwLCA2OCwgNzcsIC0xLAorfTsKKworI2RlZmluZSBCSUdfVEVTVF9CSVQgICAoKCh1bnNpZ25lZCkgMSA8PCAzMSkgKyA0MikKKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CWksIGosIHNpemU7CisJdW5zaWduZWQgY2hhciB0ZXN0YXJyYXlbMTJdOworCXVuc2lnbmVkIGNoYXIgKmJpZ2FycmF5OworCisJc2l6ZSA9IHNpemVvZihiaXRhcnJheSkqODsKKyNpZiAwCisJaSA9IGV4dDJmc19maW5kX2ZpcnN0X2JpdF9zZXQoYml0YXJyYXksIHNpemUpOworCXdoaWxlIChpIDwgc2l6ZSkgeworCQlwcmludGYoIkJpdCBzZXQ6ICVkXG4iLCBpKTsKKwkJaSA9IGV4dDJmc19maW5kX25leHRfYml0X3NldChiaXRhcnJheSwgc2l6ZSwgaSsxKTsKKwl9CisjZW5kaWYKKworCS8qIFRlc3QgdGVzdF9iaXQgKi8KKwlmb3IgKGk9MCxqPTA7IGkgPCBzaXplOyBpKyspIHsKKwkJaWYgKGV4dDJmc190ZXN0X2JpdChpLCBiaXRhcnJheSkpIHsKKwkJCWlmIChiaXRzX2xpc3Rbal0gPT0gaSkgeworCQkJCWorKzsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRmKCJCaXQgJWQgc2V0LCBub3QgZXhwZWN0ZWRcbiIsIGkpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYml0c19saXN0W2pdID09IGkpIHsKKwkJCQlwcmludGYoIkV4cGVjdGVkIGJpdCAlZCB0byBiZSBjbGVhci5cbiIsIGkpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCX0KKwl9CisJcHJpbnRmKCJleHQyZnNfdGVzdF9iaXQgYXBwZWFycyB0byBiZSBjb3JyZWN0XG4iKTsKKworCS8qIFRlc3QgZXh0MmZzX3NldF9iaXQgKi8KKwltZW1zZXQodGVzdGFycmF5LCAwLCBzaXplb2YodGVzdGFycmF5KSk7CisJZm9yIChpPTA7IGJpdHNfbGlzdFtpXSA+IDA7IGkrKykgeworCQlleHQyZnNfc2V0X2JpdChiaXRzX2xpc3RbaV0sIHRlc3RhcnJheSk7CisJfQorCWlmIChtZW1jbXAodGVzdGFycmF5LCBiaXRhcnJheSwgc2l6ZW9mKHRlc3RhcnJheSkpID09IDApIHsKKwkJcHJpbnRmKCJleHQyZnNfc2V0X2JpdCB0ZXN0IHN1Y2NlZWRlZC5cbiIpOworCX0gZWxzZSB7CisJCXByaW50ZigiZXh0MmZzX3NldF9iaXQgdGVzdCBmYWlsZWQuXG4iKTsKKwkJZm9yIChpPTA7IGkgPCBzaXplb2YodGVzdGFycmF5KTsgaSsrKSB7CisJCQlwcmludGYoIiUwMnggIiwgdGVzdGFycmF5W2ldKTsKKwkJfQorCQlwcmludGYoIlxuIik7CisJCWV4aXQoMSk7CisJfQorCWZvciAoaT0wOyBiaXRzX2xpc3RbaV0gPiAwOyBpKyspIHsKKwkJZXh0MmZzX2NsZWFyX2JpdChiaXRzX2xpc3RbaV0sIHRlc3RhcnJheSk7CisJfQorCWZvciAoaT0wOyBpIDwgc2l6ZW9mKHRlc3RhcnJheSk7IGkrKykgeworCQlpZiAodGVzdGFycmF5W2ldKSB7CisJCQlwcmludGYoImV4dDJmc19jbGVhcl9iaXQgZmFpbGVkLCAiCisJCQkgICAgICAgInRlc3RhcnJheVslZF0gaXMgJWRcbiIsIGksIHRlc3RhcnJheVtpXSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCXByaW50ZigiZXh0MmZzX2NsZWFyX2JpdCB0ZXN0IHN1Y2NlZWQuXG4iKTsKKworCisJLyogRG8gYmlnYXJyYXkgdGVzdCAqLworCWJpZ2FycmF5ID0gbWFsbG9jKDEgPDwgMjkpOworCWlmICghYmlnYXJyYXkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2NyYXRjaCBtZW1vcnkhXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKKyAgICAgICAgYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdID0gMDsKKworCWV4dDJmc19zZXRfYml0KEJJR19URVNUX0JJVCwgYmlnYXJyYXkpOworCXByaW50ZigiYmlnIGJpdCBudW1iZXIgKCV1KSB0ZXN0OiAlZCwgZXhwZWN0ZWQgJWRcbiIsIEJJR19URVNUX0JJVCwKKwkgICAgICAgYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdLCAoMSA8PCAoQklHX1RFU1RfQklUICYgNykpKTsKKwlpZiAoYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdICE9ICgxIDw8IChCSUdfVEVTVF9CSVQgJiA3KSkpCisJCWV4aXQoMSk7CisKKwlleHQyZnNfY2xlYXJfYml0KEJJR19URVNUX0JJVCwgYmlnYXJyYXkpOworCisJcHJpbnRmKCJiaWcgYml0IG51bWJlciAoJXUpIHRlc3Q6ICVkLCBleHBlY3RlZCAwXG4iLCBCSUdfVEVTVF9CSVQsCisJICAgICAgIGJpZ2FycmF5W0JJR19URVNUX0JJVCA+PiAzXSk7CisJaWYgKGJpZ2FycmF5W0JJR19URVNUX0JJVCA+PiAzXSAhPSAwKQorCQlleGl0KDEpOworCisJcHJpbnRmKCJleHQyZnNfc2V0X2JpdCBiaWdfdGVzdCBzdWNjZXNzZnVsXG4iKTsKKworCisJLyogTm93IHRlc3QgZXh0MmZzX2Zhc3Rfc2V0X2JpdCAqLworCW1lbXNldCh0ZXN0YXJyYXksIDAsIHNpemVvZih0ZXN0YXJyYXkpKTsKKwlmb3IgKGk9MDsgYml0c19saXN0W2ldID4gMDsgaSsrKSB7CisJCWV4dDJmc19mYXN0X3NldF9iaXQoYml0c19saXN0W2ldLCB0ZXN0YXJyYXkpOworCX0KKwlpZiAobWVtY21wKHRlc3RhcnJheSwgYml0YXJyYXksIHNpemVvZih0ZXN0YXJyYXkpKSA9PSAwKSB7CisJCXByaW50ZigiZXh0MmZzX2Zhc3Rfc2V0X2JpdCB0ZXN0IHN1Y2NlZWRlZC5cbiIpOworCX0gZWxzZSB7CisJCXByaW50ZigiZXh0MmZzX2Zhc3Rfc2V0X2JpdCB0ZXN0IGZhaWxlZC5cbiIpOworCQlmb3IgKGk9MDsgaSA8IHNpemVvZih0ZXN0YXJyYXkpOyBpKyspIHsKKwkJCXByaW50ZigiJTAyeCAiLCB0ZXN0YXJyYXlbaV0pOworCQl9CisJCXByaW50ZigiXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisJZm9yIChpPTA7IGJpdHNfbGlzdFtpXSA+IDA7IGkrKykgeworCQlleHQyZnNfY2xlYXJfYml0KGJpdHNfbGlzdFtpXSwgdGVzdGFycmF5KTsKKwl9CisJZm9yIChpPTA7IGkgPCBzaXplb2YodGVzdGFycmF5KTsgaSsrKSB7CisJCWlmICh0ZXN0YXJyYXlbaV0pIHsKKwkJCXByaW50ZigiZXh0MmZzX2NsZWFyX2JpdCBmYWlsZWQsICIKKwkJCSAgICAgICAidGVzdGFycmF5WyVkXSBpcyAlZFxuIiwgaSwgdGVzdGFycmF5W2ldKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJcHJpbnRmKCJleHQyZnNfY2xlYXJfYml0IHRlc3Qgc3VjY2VlZC5cbiIpOworCisKKyAgICAgICAgYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdID0gMDsKKworCWV4dDJmc19mYXN0X3NldF9iaXQoQklHX1RFU1RfQklULCBiaWdhcnJheSk7CisJcHJpbnRmKCJiaWcgYml0IG51bWJlciAoJXUpIHRlc3Q6ICVkLCBleHBlY3RlZCAlZFxuIiwgQklHX1RFU1RfQklULAorCSAgICAgICBiaWdhcnJheVtCSUdfVEVTVF9CSVQgPj4gM10sICgxIDw8IChCSUdfVEVTVF9CSVQgJiA3KSkpOworCWlmIChiaWdhcnJheVtCSUdfVEVTVF9CSVQgPj4gM10gIT0gKDEgPDwgKEJJR19URVNUX0JJVCAmIDcpKSkKKwkJZXhpdCgxKTsKKworCWV4dDJmc19mYXN0X2NsZWFyX2JpdChCSUdfVEVTVF9CSVQsIGJpZ2FycmF5KTsKKworCXByaW50ZigiYmlnIGJpdCBudW1iZXIgKCV1KSB0ZXN0OiAlZCwgZXhwZWN0ZWQgMFxuIiwgQklHX1RFU1RfQklULAorCSAgICAgICBiaWdhcnJheVtCSUdfVEVTVF9CSVQgPj4gM10pOworCWlmIChiaWdhcnJheVtCSUdfVEVTVF9CSVQgPj4gM10gIT0gMCkKKwkJZXhpdCgxKTsKKworCXByaW50ZigiZXh0MmZzX2Zhc3Rfc2V0X2JpdCBiaWdfdGVzdCBzdWNjZXNzZnVsXG4iKTsKKworCS8qIFJlcGVhdCBmb3JlZ29pbmcgdGVzdHMgZm9yIDY0LWJpdCBiaXRvcHMgKi8KKworCS8qIFRlc3QgdGVzdF9iaXQgKi8KKwlmb3IgKGk9MCxqPTA7IGkgPCBzaXplOyBpKyspIHsKKwkJaWYgKGV4dDJmc190ZXN0X2JpdDY0KGksIGJpdGFycmF5KSkgeworCQkJaWYgKGJpdHNfbGlzdFtqXSA9PSBpKSB7CisJCQkJaisrOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGYoIjY0LWJpdDogQml0ICVkIHNldCwgbm90IGV4cGVjdGVkXG4iLAorCQkJCSAgICAgICBpKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGJpdHNfbGlzdFtqXSA9PSBpKSB7CisJCQkJcHJpbnRmKCI2NC1iaXQ6ICIKKwkJCQkgICAgICAgIkV4cGVjdGVkIGJpdCAlZCB0byBiZSBjbGVhci5cbiIsIGkpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCX0KKwl9CisJcHJpbnRmKCI2NC1iaXQ6IGV4dDJmc190ZXN0X2JpdCBhcHBlYXJzIHRvIGJlIGNvcnJlY3RcbiIpOworCisJLyogVGVzdCBleHQyZnNfc2V0X2JpdCAqLworCW1lbXNldCh0ZXN0YXJyYXksIDAsIHNpemVvZih0ZXN0YXJyYXkpKTsKKwlmb3IgKGk9MDsgYml0c19saXN0W2ldID4gMDsgaSsrKSB7CisJCWV4dDJmc19zZXRfYml0NjQoYml0c19saXN0W2ldLCB0ZXN0YXJyYXkpOworCX0KKwlpZiAobWVtY21wKHRlc3RhcnJheSwgYml0YXJyYXksIHNpemVvZih0ZXN0YXJyYXkpKSA9PSAwKSB7CisJCXByaW50ZigiNjQtYml0OiBleHQyZnNfc2V0X2JpdCB0ZXN0IHN1Y2NlZWRlZC5cbiIpOworCX0gZWxzZSB7CisJCXByaW50ZigiNjQtYml0OiBleHQyZnNfc2V0X2JpdCB0ZXN0IGZhaWxlZC5cbiIpOworCQlmb3IgKGk9MDsgaSA8IHNpemVvZih0ZXN0YXJyYXkpOyBpKyspIHsKKwkJCXByaW50ZigiJTAyeCAiLCB0ZXN0YXJyYXlbaV0pOworCQl9CisJCXByaW50ZigiXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisJZm9yIChpPTA7IGJpdHNfbGlzdFtpXSA+IDA7IGkrKykgeworCQlleHQyZnNfY2xlYXJfYml0NjQoYml0c19saXN0W2ldLCB0ZXN0YXJyYXkpOworCX0KKwlmb3IgKGk9MDsgaSA8IHNpemVvZih0ZXN0YXJyYXkpOyBpKyspIHsKKwkJaWYgKHRlc3RhcnJheVtpXSkgeworCQkJcHJpbnRmKCI2NC1iaXQ6IGV4dDJmc19jbGVhcl9iaXQgZmFpbGVkLCAiCisJCQkgICAgICAgInRlc3RhcnJheVslZF0gaXMgJWRcbiIsIGksIHRlc3RhcnJheVtpXSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCXByaW50ZigiNjQtYml0OiBleHQyZnNfY2xlYXJfYml0IHRlc3Qgc3VjY2VlZC5cbiIpOworCisJLyogRG8gYmlnYXJyYXkgdGVzdCAqLworCWJpZ2FycmF5ID0gbWFsbG9jKDEgPDwgMjkpOworCWlmICghYmlnYXJyYXkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2NyYXRjaCBtZW1vcnkhXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKKyAgICAgICAgYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdID0gMDsKKworCWV4dDJmc19zZXRfYml0NjQoQklHX1RFU1RfQklULCBiaWdhcnJheSk7CisJcHJpbnRmKCI2NC1iaXQ6IGJpZyBiaXQgbnVtYmVyICgldSkgdGVzdDogJWQsIGV4cGVjdGVkICVkXG4iLAorCSAgICAgICBCSUdfVEVTVF9CSVQsIGJpZ2FycmF5W0JJR19URVNUX0JJVCA+PiAzXSwKKwkgICAgICAgKDEgPDwgKEJJR19URVNUX0JJVCAmIDcpKSk7CisJaWYgKGJpZ2FycmF5W0JJR19URVNUX0JJVCA+PiAzXSAhPSAoMSA8PCAoQklHX1RFU1RfQklUICYgNykpKQorCQlleGl0KDEpOworCisJZXh0MmZzX2NsZWFyX2JpdDY0KEJJR19URVNUX0JJVCwgYmlnYXJyYXkpOworCisJcHJpbnRmKCI2NC1iaXQ6IGJpZyBiaXQgbnVtYmVyICgldSkgdGVzdDogJWQsIGV4cGVjdGVkIDBcbiIsCisJICAgICAgIEJJR19URVNUX0JJVCwKKwkgICAgICAgYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdKTsKKwlpZiAoYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdICE9IDApCisJCWV4aXQoMSk7CisKKwlwcmludGYoIjY0LWJpdDogZXh0MmZzX3NldF9iaXQgYmlnX3Rlc3Qgc3VjY2Vzc2Z1bFxuIik7CisKKwkvKiBOb3cgdGVzdCBleHQyZnNfZmFzdF9zZXRfYml0ICovCisJbWVtc2V0KHRlc3RhcnJheSwgMCwgc2l6ZW9mKHRlc3RhcnJheSkpOworCWZvciAoaT0wOyBiaXRzX2xpc3RbaV0gPiAwOyBpKyspIHsKKwkJZXh0MmZzX2Zhc3Rfc2V0X2JpdDY0KGJpdHNfbGlzdFtpXSwgdGVzdGFycmF5KTsKKwl9CisJaWYgKG1lbWNtcCh0ZXN0YXJyYXksIGJpdGFycmF5LCBzaXplb2YodGVzdGFycmF5KSkgPT0gMCkgeworCQlwcmludGYoIjY0LWJpdDogZXh0MmZzX2Zhc3Rfc2V0X2JpdCB0ZXN0IHN1Y2NlZWRlZC5cbiIpOworCX0gZWxzZSB7CisJCXByaW50ZigiNjQtYml0OiBleHQyZnNfZmFzdF9zZXRfYml0IHRlc3QgZmFpbGVkLlxuIik7CisJCWZvciAoaT0wOyBpIDwgc2l6ZW9mKHRlc3RhcnJheSk7IGkrKykgeworCQkJcHJpbnRmKCIlMDJ4ICIsIHRlc3RhcnJheVtpXSk7CisJCX0KKwkJcHJpbnRmKCJcbiIpOworCQlleGl0KDEpOworCX0KKwlmb3IgKGk9MDsgYml0c19saXN0W2ldID4gMDsgaSsrKSB7CisJCWV4dDJmc19jbGVhcl9iaXQ2NChiaXRzX2xpc3RbaV0sIHRlc3RhcnJheSk7CisJfQorCWZvciAoaT0wOyBpIDwgc2l6ZW9mKHRlc3RhcnJheSk7IGkrKykgeworCQlpZiAodGVzdGFycmF5W2ldKSB7CisJCQlwcmludGYoIjY0LWJpdDogZXh0MmZzX2NsZWFyX2JpdCBmYWlsZWQsICIKKwkJCSAgICAgICAidGVzdGFycmF5WyVkXSBpcyAlZFxuIiwgaSwgdGVzdGFycmF5W2ldKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJcHJpbnRmKCI2NC1iaXQ6IGV4dDJmc19jbGVhcl9iaXQgdGVzdCBzdWNjZWVkLlxuIik7CisKKyAgICAgICAgYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdID0gMDsKKworCWV4dDJmc19mYXN0X3NldF9iaXQ2NChCSUdfVEVTVF9CSVQsIGJpZ2FycmF5KTsKKwlwcmludGYoIjY0LWJpdDogYmlnIGJpdCBudW1iZXIgKCV1KSB0ZXN0OiAlZCwgZXhwZWN0ZWQgJWRcbiIsCisJICAgICAgIEJJR19URVNUX0JJVCwgYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdLAorCSAgICAgICAoMSA8PCAoQklHX1RFU1RfQklUICYgNykpKTsKKwlpZiAoYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdICE9ICgxIDw8IChCSUdfVEVTVF9CSVQgJiA3KSkpCisJCWV4aXQoMSk7CisKKwlleHQyZnNfZmFzdF9jbGVhcl9iaXQ2NChCSUdfVEVTVF9CSVQsIGJpZ2FycmF5KTsKKworCXByaW50ZigiNjQtYml0OiBiaWcgYml0IG51bWJlciAoJXUpIHRlc3Q6ICVkLCBleHBlY3RlZCAwXG4iLAorCSAgICAgICBCSUdfVEVTVF9CSVQsIGJpZ2FycmF5W0JJR19URVNUX0JJVCA+PiAzXSk7CisJaWYgKGJpZ2FycmF5W0JJR19URVNUX0JJVCA+PiAzXSAhPSAwKQorCQlleGl0KDEpOworCisJcHJpbnRmKCI2NC1iaXQ6IGV4dDJmc19mYXN0X3NldF9iaXQgYmlnX3Rlc3Qgc3VjY2Vzc2Z1bFxuIik7CisKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy90c3RfYnl0ZXN3YXAuYyBiL2xpYi9leHQyZnMvdHN0X2J5dGVzd2FwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUwMGNhZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvdHN0X2J5dGVzd2FwLmMKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIFRoaXMgdGVzdGluZyBwcm9ncmFtIG1ha2VzIHN1cmUgdGhlIGJ5dGVzd2FwIGZ1bmN0aW9ucyB3b3JrCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworX191MTYgdGVzdDFbXSA9IHsKKwkweDAwMDEsIDB4MDEwMCwKKwkweDEyMzQsIDB4MzQxMiwKKwkweGZmMDAsIDB4MDBmZiwKKwkweDQwMDAsIDB4MDA0MCwKKwkweGZlZmYsIDB4ZmZmZSwKKwkweDAwMDAsIDB4MDAwMAorCX07CisKK19fdTMyIHRlc3QyW10gPSB7CisJMHgwMDAwMDAwMSwgMHgwMTAwMDAwMCwKKwkweDgwMDAwMDAwLCAweDAwMDAwMDgwLAorCTB4MTIzNDU2NzgsIDB4Nzg1NjM0MTIsCisJMHhmZmZmMDAwMCwgMHgwMDAwZmZmZiwKKwkweDAwZmYwMDAwLCAweDAwMDBmZjAwLAorCTB4ZmYwMDAwMDAsIDB4MDAwMDAwZmYsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMAorCX07CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQJaTsKKwlpbnQJZXJyb3JzID0gMDsKKworCXByaW50ZigiVGVzdGluZyBleHQyZnNfc3dhYjE2XG4iKTsKKwlpPTA7CisJZG8geworCQlwcmludGYoInN3YWIxNigweCUwNHgpID0gMHglMDR4XG4iLCB0ZXN0MVtpXSwKKwkJICAgICAgIGV4dDJmc19zd2FiMTYodGVzdDFbaV0pKTsKKwkJaWYgKGV4dDJmc19zd2FiMTYodGVzdDFbaV0pICE9IHRlc3QxW2krMV0pIHsKKwkJCXByaW50ZigiRXJyb3IhISEgICAlMDR4ICE9ICUwNHhcbiIsCisJCQkgICAgICAgZXh0MmZzX3N3YWIxNih0ZXN0MVtpXSksIHRlc3QxW2krMV0pOworCQkJZXJyb3JzKys7CisJCX0KKwkJaWYgKGV4dDJmc19zd2FiMTYodGVzdDFbaSsxXSkgIT0gdGVzdDFbaV0pIHsKKwkJCXByaW50ZigiRXJyb3IhISEgICAlMDR4ICE9ICUwNHhcbiIsCisJCQkgICAgICAgZXh0MmZzX3N3YWIxNih0ZXN0MVtpKzFdKSwgdGVzdDFbaV0pOworCQkJZXJyb3JzKys7CisJCX0KKwkJaSArPSAyOworCX0gd2hpbGUgKHRlc3QxW2ldICE9IDApOworCisJcHJpbnRmKCJUZXN0aW5nIGV4dDJmc19zd2FiMzJcbiIpOworCWkgPSAwOworCWRvIHsKKwkJcHJpbnRmKCJzd2FiMzIoMHglMDh4KSA9IDB4JTA4eFxuIiwgdGVzdDJbaV0sCisJCSAgICAgICBleHQyZnNfc3dhYjMyKHRlc3QyW2ldKSk7CisJCWlmIChleHQyZnNfc3dhYjMyKHRlc3QyW2ldKSAhPSB0ZXN0MltpKzFdKSB7CisJCQlwcmludGYoIkVycm9yISEhICAgJTA0eCAhPSAlMDR4XG4iLAorCQkJICAgICAgIGV4dDJmc19zd2FiMzIodGVzdDJbaV0pLCB0ZXN0MltpKzFdKTsKKwkJCWVycm9ycysrOworCQl9CisJCWlmIChleHQyZnNfc3dhYjMyKHRlc3QyW2krMV0pICE9IHRlc3QyW2ldKSB7CisJCQlwcmludGYoIkVycm9yISEhICAgJTA0eCAhPSAlMDR4XG4iLAorCQkJICAgICAgIGV4dDJmc19zd2FiMzIodGVzdDJbaSsxXSksIHRlc3QyW2ldKTsKKwkJCWVycm9ycysrOworCQl9CisJCWkgKz0gMjsKKwl9IHdoaWxlICh0ZXN0MltpXSAhPSAwKTsKKworCWlmICghZXJyb3JzKQorCQlwcmludGYoIk5vIGVycm9ycyBmb3VuZCBpbiB0aGUgYnl0ZXN3YXAgaW1wbGVtZW50YXRpb24hXG4iKTsKKworCXJldHVybiBlcnJvcnM7Cit9CmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL3RzdF9jbWRzLmN0IGIvbGliL2V4dDJmcy90c3RfY21kcy5jdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWE4NTk0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy90c3RfY21kcy5jdApAQCAtMCwwICsxLDYgQEAKK2NvbW1hbmRfdGFibGUgbGliZXh0MmZzX2NtZHM7CisKK3JlcXVlc3QgZG9fYmxvY2tfaXRlcmF0ZSwgImJsb2NrX2l0ZXJhdGUiLAorCWJsb2NrX2l0ZXJhdGU7CisKK2VuZDsKZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvdHN0X2ZzX3N0cnVjdC5jIGIvbGliL2V4dDJmcy90c3RfZnNfc3RydWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0NGRmMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvdHN0X2ZzX3N0cnVjdC5jCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBUaGlzIHRlc3RpbmcgcHJvZ3JhbSBjaGVja3MgdGhlIG9mZnNldCBvZiB0aGUgZXh0Ml9maWxzeXMgc3RydWN0dXJlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgImV4dDJmcy5oIgorCitzdHJ1Y3Qgc3RydWN0X2V4dDJfZmlsc3lzIGZzOworCisjaWZuZGVmIG9mZnNldG9mCisjZGVmaW5lIG9mZnNldG9mKHR5cGUsIG1lbWJlcikgIF9fYnVpbHRpbl9vZmZzZXRvZiAodHlwZSwgbWVtYmVyKQorI2VuZGlmCisjZGVmaW5lIGNoZWNrX2ZpZWxkKHgpIGN1cl9vZmZzZXQgPSBkb19maWVsZCgjeCwgc2l6ZW9mKGZzLngpLAkJXAorCQkJCQlvZmZzZXRvZihzdHJ1Y3Qgc3RydWN0X2V4dDJfZmlsc3lzLCB4KSwgXAorCQkJCQljdXJfb2Zmc2V0KQorCitzdGF0aWMgaW50IGRvX2ZpZWxkKGNvbnN0IGNoYXIgKmZpZWxkLCBzaXplX3Qgc2l6ZSwgaW50IG9mZnNldCwgaW50IGN1cl9vZmZzZXQpCit7CisJaWYgKG9mZnNldCAhPSBjdXJfb2Zmc2V0KSB7CisJCXByaW50ZigiXHQocGFkZGluZyAlZCBieXRlcz8pXG4iLCBvZmZzZXQgLSBjdXJfb2Zmc2V0KTsKKwl9CisJcHJpbnRmKCIlOGQgJS0zMHMgJTN1XG4iLCBvZmZzZXQsIGZpZWxkLCAodW5zaWduZWQpIHNpemUpOworCXJldHVybiBvZmZzZXQgKyBzaXplOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisjaWYgKF9fR05VQ19fID49IDQpCisJaW50IGN1cl9vZmZzZXQgPSAwOworCisJcHJpbnRmKCIlOHMgJS0zMHMgJTNzXG4iLCAib2Zmc2V0IiwgImZpZWxkIiwgInNpemUiKTsKKwljaGVja19maWVsZChtYWdpYyk7CisJY2hlY2tfZmllbGQoaW8pOworCWNoZWNrX2ZpZWxkKGZsYWdzKTsKKwljaGVja19maWVsZChkZXZpY2VfbmFtZSk7CisJY2hlY2tfZmllbGQoc3VwZXIpOworCWNoZWNrX2ZpZWxkKGJsb2Nrc2l6ZSk7CisJY2hlY2tfZmllbGQoZnJhZ3NpemUpOworCWNoZWNrX2ZpZWxkKGdyb3VwX2Rlc2NfY291bnQpOworCWNoZWNrX2ZpZWxkKGRlc2NfYmxvY2tzKTsKKwljaGVja19maWVsZChncm91cF9kZXNjKTsKKwljaGVja19maWVsZChpbm9kZV9ibG9ja3NfcGVyX2dyb3VwKTsKKwljaGVja19maWVsZChpbm9kZV9tYXApOworCWNoZWNrX2ZpZWxkKGJsb2NrX21hcCk7CisJY2hlY2tfZmllbGQoZ2V0X2Jsb2Nrcyk7CisJY2hlY2tfZmllbGQoY2hlY2tfZGlyZWN0b3J5KTsKKwljaGVja19maWVsZCh3cml0ZV9iaXRtYXBzKTsKKwljaGVja19maWVsZChyZWFkX2lub2RlKTsKKwljaGVja19maWVsZCh3cml0ZV9pbm9kZSk7CisJY2hlY2tfZmllbGQoYmFkYmxvY2tzKTsKKwljaGVja19maWVsZChkYmxpc3QpOworCWNoZWNrX2ZpZWxkKHN0cmlkZSk7CisJY2hlY2tfZmllbGQob3JpZ19zdXBlcik7CisJY2hlY2tfZmllbGQoaW1hZ2VfaGVhZGVyKTsKKwljaGVja19maWVsZCh1bWFzayk7CisJY2hlY2tfZmllbGQobm93KTsKKwljaGVja19maWVsZChjbHVzdGVyX3JhdGlvX2JpdHMpOworCWNoZWNrX2ZpZWxkKHJlc2VydmVkKTsKKwljaGVja19maWVsZChwcml2X2RhdGEpOworCWNoZWNrX2ZpZWxkKGljYWNoZSk7CisJY2hlY2tfZmllbGQoaW1hZ2VfaW8pOworCWNoZWNrX2ZpZWxkKGdldF9hbGxvY19ibG9jayk7CisJY2hlY2tfZmllbGQoYmxvY2tfYWxsb2Nfc3RhdHMpOworCWNoZWNrX2ZpZWxkKG1tcF9idWYpOworCWNoZWNrX2ZpZWxkKG1tcF9jbXApOworCWNoZWNrX2ZpZWxkKG1tcF9mZCk7CisJY2hlY2tfZmllbGQobW1wX2xhc3Rfd3JpdHRlbik7CisJcHJpbnRmKCJFbmRpbmcgb2Zmc2V0IGlzICVkXG5cbiIsIGN1cl9vZmZzZXQpOworI2VuZGlmCisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvdHN0X2dldHNlY3RzaXplLmMgYi9saWIvZXh0MmZzL3RzdF9nZXRzZWN0c2l6ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjIzNGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL3RzdF9nZXRzZWN0c2l6ZS5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiB0c3RfZ2V0c2l6ZS5jIC0tLSB0aGlzIGZ1bmN0aW9uIHRlc3RzIHRoZSBnZXRzaXplIGZ1bmN0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludAlsc2VjdHNpemUsIHBzZWN0c2l6ZTsKKwlpbnQJcmV0dmFsOworCisJaWYgKGFyZ2MgPCAyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIGRldmljZVxuIiwgYXJndlswXSk7CisJCWV4aXQoMSk7CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2dldF9kZXZpY2Vfc2VjdHNpemUoYXJndlsxXSwgJmxzZWN0c2l6ZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwKKwkJCSJ3aGlsZSBjYWxsaW5nIGV4dDJmc19nZXRfZGV2aWNlX3NlY3RzaXplIik7CisJCWV4aXQoMSk7CisJfQorCXJldHZhbCA9IGV4dDJmc19nZXRfZGV2aWNlX3BoeXNfc2VjdHNpemUoYXJndlsxXSwgJnBzZWN0c2l6ZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwKKwkJCSJ3aGlsZSBjYWxsaW5nIGV4dDJmc19nZXRfZGV2aWNlX3BoeXNfc2VjdHNpemUiKTsKKwkJZXhpdCgxKTsKKwl9CisJcHJpbnRmKCJEZXZpY2UgJXMgaGFzIGxvZ2ljYWwvcGh5c2ljYWwgc2VjdG9yIHNpemUgb2YgJWQvJWQuXG4iLAorCSAgICAgICBhcmd2WzFdLCBsc2VjdHNpemUsIHBzZWN0c2l6ZSk7CisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvdHN0X2dldHNpemUuYyBiL2xpYi9leHQyZnMvdHN0X2dldHNpemUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWMyZWExCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy90c3RfZ2V0c2l6ZS5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiB0c3RfZ2V0c2l6ZS5jIC0tLSB0aGlzIGZ1bmN0aW9uIHRlc3RzIHRoZSBnZXRzaXplIGZ1bmN0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWJsa190CQlibG9ja3M7CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyBkZXZpY2VcbiIsIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKwlhZGRfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworCXJldHZhbCA9IGV4dDJmc19nZXRfZGV2aWNlX3NpemUoYXJndlsxXSwgMTAyNCwgJmJsb2Nrcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGdldHRpbmcgZGV2aWNlIHNpemUiKTsKKwkJZXhpdCgxKTsKKwl9CisJcHJpbnRmKCIlcyBpcyBkZXZpY2UgaGFzICV1IGJsb2Nrcy5cbiIsIGFyZ3ZbMV0sIGJsb2Nrcyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL3RzdF9pbm9kZV9zaXplLmMgYi9saWIvZXh0MmZzL3RzdF9pbm9kZV9zaXplLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwZWM5OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvdHN0X2lub2RlX3NpemUuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogVGhpcyB0ZXN0aW5nIHByb2dyYW0gbWFrZXMgc3VyZSB0aGUgZXh0Ml9pbm9kZSBzdHJ1Y3R1cmUgaXMgMTAyNCBieXRlcyBsb25nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKworc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgaW5vZGU7CisKKyNpZm5kZWYgb2Zmc2V0b2YKKyNkZWZpbmUgb2Zmc2V0b2YodHlwZSwgbWVtYmVyKSAgX19idWlsdGluX29mZnNldG9mKHR5cGUsIG1lbWJlcikKKyNlbmRpZgorCisjZGVmaW5lIGNoZWNrX2ZpZWxkKHgsIHMpIGN1cl9vZmZzZXQgPSBkb19maWVsZCgjeCwgcywgc2l6ZW9mKGlub2RlLngpLAkgICAgICAgXAorCQkJCQlvZmZzZXRvZihzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSwgeCksICBcCisJCQkJCWN1cl9vZmZzZXQpCisKK3N0YXRpYyBpbnQgZG9fZmllbGQoY29uc3QgY2hhciAqZmllbGQsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIGN1cl9zaXplLAorCQkgICAgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjdXJfb2Zmc2V0KQoreworCWlmIChzaXplICE9IGN1cl9zaXplKSB7CisJCXByaW50ZigiZXJyb3I6ICVzIHNpemUgJXUgc2hvdWxkIGJlICV1XG4iLAorCQkgICAgICAgZmllbGQsIGN1cl9zaXplLCBzaXplKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKG9mZnNldCAhPSBjdXJfb2Zmc2V0KSB7CisJCXByaW50ZigiZXJyb3I6ICVzIG9mZnNldCAldSBzaG91bGQgYmUgJXVcbiIsCisJCSAgICAgICBmaWVsZCwgY3VyX29mZnNldCwgb2Zmc2V0KTsKKwkJZXhpdCgxKTsKKwl9CisJcHJpbnRmKCIlOGQgJS0zMHMgJTN1XG4iLCBvZmZzZXQsIGZpZWxkLCAodW5zaWduZWQpIHNpemUpOworCXJldHVybiBvZmZzZXQgKyBzaXplOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisjaWYgKF9fR05VQ19fID49IDQpCisJaW50IGN1cl9vZmZzZXQgPSAwOworCisJcHJpbnRmKCIlOHMgJS0zMHMgJTNzXG4iLCAib2Zmc2V0IiwgImZpZWxkIiwgInNpemUiKTsKKwljaGVja19maWVsZChpX21vZGUsIDIpOworCWNoZWNrX2ZpZWxkKGlfdWlkLCAyKTsKKwljaGVja19maWVsZChpX3NpemUsIDQpOworCWNoZWNrX2ZpZWxkKGlfYXRpbWUsIDQpOworCWNoZWNrX2ZpZWxkKGlfY3RpbWUsIDQpOworCWNoZWNrX2ZpZWxkKGlfbXRpbWUsIDQpOworCWNoZWNrX2ZpZWxkKGlfZHRpbWUsIDQpOworCWNoZWNrX2ZpZWxkKGlfZ2lkLCAyKTsKKwljaGVja19maWVsZChpX2xpbmtzX2NvdW50LCAyKTsKKwljaGVja19maWVsZChpX2Jsb2NrcywgNCk7CisJY2hlY2tfZmllbGQoaV9mbGFncywgNCk7CisJY2hlY2tfZmllbGQob3NkMS5saW51eDEubF9pX3ZlcnNpb24sIDQpOworCWNoZWNrX2ZpZWxkKGlfYmxvY2ssIDE1ICogNCk7CisJY2hlY2tfZmllbGQoaV9nZW5lcmF0aW9uLCA0KTsKKwljaGVja19maWVsZChpX2ZpbGVfYWNsLCA0KTsKKwljaGVja19maWVsZChpX3NpemVfaGlnaCwgNCk7CisJY2hlY2tfZmllbGQoaV9mYWRkciwgNCk7CisJY2hlY2tfZmllbGQob3NkMi5saW51eDIubF9pX2Jsb2Nrc19oaSwgMik7CisJY2hlY2tfZmllbGQob3NkMi5saW51eDIubF9pX2ZpbGVfYWNsX2hpZ2gsIDIpOworCWNoZWNrX2ZpZWxkKG9zZDIubGludXgyLmxfaV91aWRfaGlnaCwgMik7CisJY2hlY2tfZmllbGQob3NkMi5saW51eDIubF9pX2dpZF9oaWdoLCAyKTsKKwljaGVja19maWVsZChvc2QyLmxpbnV4Mi5sX2lfY2hlY2tzdW1fbG8sIDIpOworCWNoZWNrX2ZpZWxkKG9zZDIubGludXgyLmxfaV9yZXNlcnZlZCwgMik7CisJZG9fZmllbGQoIlNtYWxsIGlub2RlIGVuZCIsIDAsIDAsIGN1cl9vZmZzZXQsIDEyOCk7CisJY2hlY2tfZmllbGQoaV9leHRyYV9pc2l6ZSwgMik7CisJY2hlY2tfZmllbGQoaV9jaGVja3N1bV9oaSwgMik7CisJY2hlY2tfZmllbGQoaV9jdGltZV9leHRyYSwgNCk7CisJY2hlY2tfZmllbGQoaV9tdGltZV9leHRyYSwgNCk7CisJY2hlY2tfZmllbGQoaV9hdGltZV9leHRyYSwgNCk7CisJY2hlY2tfZmllbGQoaV9jcnRpbWUsIDQpOworCWNoZWNrX2ZpZWxkKGlfY3J0aW1lX2V4dHJhLCA0KTsKKwljaGVja19maWVsZChpX3ZlcnNpb25faGksIDQpOworCS8qIFRoaXMgc2l6ZSB3aWxsIGNoYW5nZSBhcyBuZXcgZmllbGRzIGFyZSBhZGRlZCAqLworCWRvX2ZpZWxkKCJMYXJnZSBpbm9kZSBlbmQiLCAwLCAwLCBjdXJfb2Zmc2V0LCBzaXplb2YoaW5vZGUpKTsKKyNlbmRpZgorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy90c3RfaXNjYW4uYyBiL2xpYi9leHQyZnMvdHN0X2lzY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBiZmJlYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvdHN0X2lzY2FuLmMKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiB0c3RfaW5vZGUuYyAtLS0gdGhpcyBmdW5jdGlvbiB0ZXN0cyB0aGUgaW5vZGUgc2NhbiBmdW5jdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKK2JsazY0X3QgdGVzdF92ZWNbXSA9IHsgOCwgMTIsIDI0LCAzNCwgNDMsIDQ0LCAxMDAsIDAgfTsKKworZXh0Ml9maWxzeXMJdGVzdF9mczsKK2V4dDJmc19ibG9ja19iaXRtYXAgYmFkX2Jsb2NrX21hcCwgdG91Y2hlZF9tYXA7CitleHQyZnNfaW5vZGVfYml0bWFwIGJhZF9pbm9kZV9tYXA7CitiYWRibG9ja3NfbGlzdAl0ZXN0X2JhZGJsb2NrczsKKworaW50IGZpcnN0X25vX2NvbW1hID0gMTsKK2ludCBmYWlsZWQgPSAwOworCitzdGF0aWMgdm9pZCBpc2Nhbl90ZXN0X3JlYWRfYmxrNjQodW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLCBpbnQgY291bnQsIGVycmNvZGVfdCBlcnIpCit7CisJaW50CWk7CisKKwlpZiAoZmlyc3Rfbm9fY29tbWEpCisJCWZpcnN0X25vX2NvbW1hID0gMDsKKwllbHNlCisJCXByaW50ZigiLCAiKTsKKworCWlmIChjb3VudCA+IDEpCisJCXByaW50ZigiJWxsdS0lbGx1IiwgYmxvY2ssIGJsb2NrK2NvdW50LTEpOworCWVsc2UKKwkJcHJpbnRmKCIlbGx1IiwgYmxvY2spOworCisJZm9yIChpPTA7IGkgPCBjb3VudDsgaSsrLCBibG9jaysrKSB7CisJCWlmIChleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKHRvdWNoZWRfbWFwLCBibG9jaykpIHsKKwkJCXByaW50ZigiXG5EdXBsaWNhdGUgYmxvY2s/IT8gLS0tICVsbHVcbiIsIGJsb2NrKTsKKwkJCWZhaWxlZCsrOworCQkJZmlyc3Rfbm9fY29tbWEgPSAxOworCQl9CisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIodG91Y2hlZF9tYXAsIGJsb2NrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlzY2FuX3Rlc3RfcmVhZF9ibGsodW5zaWduZWQgbG9uZyBibG9jaywgaW50IGNvdW50LCBlcnJjb2RlX3QgZXJyKQoreworCWlzY2FuX3Rlc3RfcmVhZF9ibGs2NChibG9jaywgY291bnQsIGVycik7Cit9CisKKy8qCisgKiBTZXR1cCB0aGUgdmFyaWFibGVzIGZvciBkb2luZyB0aGUgaW5vZGUgc2NhbiB0ZXN0LgorICovCitzdGF0aWMgdm9pZCBzZXR1cCh2b2lkKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJaW50CQlpOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHBhcmFtOworCisJaW5pdGlhbGl6ZV9leHQyX2Vycm9yX3RhYmxlKCk7CisKKwltZW1zZXQoJnBhcmFtLCAwLCBzaXplb2YocGFyYW0pKTsKKwlleHQyZnNfYmxvY2tzX2NvdW50X3NldCgmcGFyYW0sIDEyMDAwKTsKKworCisJdGVzdF9pb19jYl9yZWFkX2JsayA9IGlzY2FuX3Rlc3RfcmVhZF9ibGs7CisJdGVzdF9pb19jYl9yZWFkX2JsazY0ID0gaXNjYW5fdGVzdF9yZWFkX2JsazY0OworCisJcmV0dmFsID0gZXh0MmZzX2luaXRpYWxpemUoInRlc3QgZnMiLCBFWFQyX0ZMQUdfNjRCSVRTLCAmcGFyYW0sCisJCQkJICAgdGVzdF9pb19tYW5hZ2VyLCAmdGVzdF9mcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJzZXR1cCIsIHJldHZhbCwKKwkJCSJXaGlsZSBpbml0aWFsaXppbmcgZmlsZXN5c3RlbSIpOworCQlleGl0KDEpOworCX0KKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfdGFibGVzKHRlc3RfZnMpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycigic2V0dXAiLCByZXR2YWwsCisJCQkiV2hpbGUgYWxsb2NhdGluZyB0YWJsZXMgZm9yIHRlc3QgZmlsZXN5c3RlbSIpOworCQlleGl0KDEpOworCX0KKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfYmxvY2tfYml0bWFwKHRlc3RfZnMsICJiYWQgYmxvY2sgbWFwIiwKKwkJCQkJICAgICAgJmJhZF9ibG9ja19tYXApOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycigic2V0dXAiLCByZXR2YWwsCisJCQkiV2hpbGUgYWxsb2NhdGluZyBiYWRfYmxvY2sgYml0bWFwIik7CisJCWV4aXQoMSk7CisJfQorCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9ibG9ja19iaXRtYXAodGVzdF9mcywgInRvdWNoZWQgbWFwIiwKKwkJCQkJICAgICAgJnRvdWNoZWRfbWFwKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoInNldHVwIiwgcmV0dmFsLAorCQkJIldoaWxlIGFsbG9jYXRpbmcgdG91Y2hlZCBibG9jayBiaXRtYXAiKTsKKwkJZXhpdCgxKTsKKwl9CisJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2lub2RlX2JpdG1hcCh0ZXN0X2ZzLCAiYmFkIGlub2RlIG1hcCIsCisJCQkJCSAgICAgICZiYWRfaW5vZGVfbWFwKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoInNldHVwIiwgcmV0dmFsLAorCQkJIldoaWxlIGFsbG9jYXRpbmcgYmFkIGlub2RlIGJpdG1hcCIpOworCQlleGl0KDEpOworCX0KKworCXJldHZhbCA9IGV4dDJmc19iYWRibG9ja3NfbGlzdF9jcmVhdGUoJnRlc3RfYmFkYmxvY2tzLCA1KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoInNldHVwIiwgcmV0dmFsLCAid2hpbGUgY3JlYXRpbmcgYmFkYmxvY2tzIGxpc3QiKTsKKwkJZXhpdCgxKTsKKwl9CisJZm9yIChpPTA7IHRlc3RfdmVjW2ldOyBpKyspIHsKKwkJcmV0dmFsID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2FkZCh0ZXN0X2JhZGJsb2NrcywgdGVzdF92ZWNbaV0pOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKCJzZXR1cCIsIHJldHZhbCwKKwkJCQkid2hpbGUgYWRkaW5nIHRlc3QgdmVjdG9yICVkIiwgaSk7CisJCQlleGl0KDEpOworCQl9CisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoYmFkX2Jsb2NrX21hcCwgdGVzdF92ZWNbaV0pOworCX0KKwl0ZXN0X2ZzLT5iYWRibG9ja3MgPSB0ZXN0X2JhZGJsb2NrczsKK30KKworLyoKKyAqIEl0ZXJhdGUgdXNpbmcgaW5vZGVfc2NhbgorICovCitzdGF0aWMgdm9pZCBpdGVyYXRlKHZvaWQpCit7CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisJZXh0Ml9pbm9kZV9zY2FuCXNjYW47CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2lub190CWlubzsKKworCXJldHZhbCA9IGV4dDJmc19vcGVuX2lub2RlX3NjYW4odGVzdF9mcywgOCwgJnNjYW4pOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiaXRlcmF0ZSIsIHJldHZhbCwgIldoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIpOworCQlleGl0KDEpOworCX0KKwlwcmludGYoIlJlYWRpbmcgYmxvY2tzOiAiKTsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X25leHRfaW5vZGUoc2NhbiwgJmlubywgJmlub2RlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoIml0ZXJhdGUiLCByZXR2YWwsICJ3aGlsZSByZWFkaW5nIGZpcnN0IGlub2RlIik7CisJCWV4aXQoMSk7CisJfQorCXdoaWxlIChpbm8pIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9uZXh0X2lub2RlKHNjYW4sICZpbm8sICZpbm9kZSk7CisJCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9CQURfQkxPQ0tfSU5fSU5PREVfVEFCTEUpIHsKKwkJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoYmFkX2lub2RlX21hcCwgaW5vKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoIml0ZXJhdGUiLCByZXR2YWwsCisJCQkJIndoaWxlIGdldHRpbmcgbmV4dCBpbm9kZSIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlwcmludGYoIlxuIik7CisJZXh0MmZzX2Nsb3NlX2lub2RlX3NjYW4oc2Nhbik7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhlIHRvdWNoZWQgbWFwCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX21hcCh2b2lkKQoreworCWludAlpLCBqLCBmaXJzdD0xOworCWJsazY0X3QJYmxrOworCisJZm9yIChpPTA7IHRlc3RfdmVjW2ldOyBpKyspIHsKKwkJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIodG91Y2hlZF9tYXAsIHRlc3RfdmVjW2ldKSkgeworCQkJcHJpbnRmKCJCYWQgYmxvY2sgd2FzIHRvdWNoZWQgLS0tICVsbHVcbiIsIHRlc3RfdmVjW2ldKTsKKwkJCWZhaWxlZCsrOworCQkJZmlyc3Rfbm9fY29tbWEgPSAxOworCQl9CisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIodG91Y2hlZF9tYXAsIHRlc3RfdmVjW2ldKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IHRlc3RfZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlmb3IgKGo9MCwgYmxrID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyh0ZXN0X2ZzLCBpKTsKKwkJICAgICBqIDwgdGVzdF9mcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKwkJICAgICBqKyssIGJsaysrKSB7CisJCQlpZiAoIWV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIodG91Y2hlZF9tYXAsIGJsaykgJiYKKwkJCSAgICAhZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihiYWRfYmxvY2tfbWFwLCBibGspKSB7CisJCQkJcHJpbnRmKCJNaXNzaW5nIGJsb2NrIC0tLSAlbGx1XG4iLCBibGspOworCQkJCWZhaWxlZCsrOworCQkJfQorCQl9CisJfQorCXByaW50ZigiQmFkIGlub2RlczogIik7CisJZm9yIChpPTE7IGkgPD0gdGVzdF9mcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50OyBpKyspIHsKKwkJaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoYmFkX2lub2RlX21hcCwgaSkpIHsKKwkJCWlmIChmaXJzdCkKKwkJCQlmaXJzdCA9IDA7CisJCQllbHNlCisJCQkJcHJpbnRmKCIsICIpOworCQkJcHJpbnRmKCIldSIsIGkpOworCQl9CisJfQorCXByaW50ZigiXG4iKTsKK30KKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc2V0dXAoKTsKKwlpdGVyYXRlKCk7CisJY2hlY2tfbWFwKCk7CisJaWYgKCFmYWlsZWQpCisJCXByaW50ZigiSW5vZGUgc2NhbiB0ZXN0ZWQgT0shXG4iKTsKKwlyZXR1cm4gZmFpbGVkOworfQorCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL3RzdF9saWJleHQyZnMuYyBiL2xpYi9leHQyZnMvdHN0X2xpYmV4dDJmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MGJmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL3RzdF9saWJleHQyZnMuYwpAQCAtMCwwICsxLDcwIEBACisvKgorICogdHN0X2xpYmV4dDJmcy5jCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnNQLmgiCisKKyNpbmNsdWRlICJzcy9zcy5oIgorI2luY2x1ZGUgImRlYnVnZnMuaCIKKworLyoKKyAqIEhvb2sgaW4gbmV3IGNvbW1hbmRzIGludG8gZGVidWdmcworICogT3ZlcnJpZGUgZGVidWdmcydzIHByb21wdAorICovCitjb25zdCBjaGFyICpkZWJ1Z19wcm9nX25hbWUgPSAidHN0X2xpYmV4dDJmcyI7CitleHRlcm4gc3NfcmVxdWVzdF90YWJsZSBsaWJleHQyZnNfY21kczsKK3NzX3JlcXVlc3RfdGFibGUgKmV4dHJhX2NtZHMgPSAmbGliZXh0MmZzX2NtZHM7CisKK3N0YXRpYyBpbnQgcHJpbnRfYmxvY2tzX3Byb2MoZXh0Ml9maWxzeXMgZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICBibGs2NF90ICpibG9ja25yLCBlMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJCSAgICAgYmxrNjRfdCByZWZfYmxvY2ssIGludCByZWZfb2Zmc2V0LAorCQkJICAgICB2b2lkICpwcml2YXRlIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlwcmludGYoIiU2bGxkICU4bGx1ICglZCAlbGx1KVxuIiwgKGxvbmcgbG9uZykgYmxvY2tjbnQsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKmJsb2NrbnIsIHJlZl9vZmZzZXQsIHJlZl9ibG9jayk7CisJcmV0dXJuIDA7Cit9CisKKwordm9pZCBkb19ibG9ja19pdGVyYXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyCSp1c2FnZSA9ICJibG9ja19pdGVyYXRlIDxmaWxlPiA8ZmxhZ3MiOworCWV4dDJfaW5vX3QJaW5vOworCWludAkJZXJyID0gMDsKKwlpbnQJCWZsYWdzID0gMDsKKworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDIsIDMsIGFyZ3ZbMF0sIHVzYWdlLCAwKSkKKwkJcmV0dXJuOworCisJaW5vID0gc3RyaW5nX3RvX2lub2RlKGFyZ3ZbMV0pOworCWlmICghaW5vKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA+IDIpIHsKKwkJZmxhZ3MgPSBwYXJzZV91bG9uZyhhcmd2WzJdLCBhcmd2WzBdLCAiZmxhZ3MiLCAmZXJyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybjsKKwl9CisJZmxhZ3MgfD0gQkxPQ0tfRkxBR19SRUFEX09OTFk7CisKKwlleHQyZnNfYmxvY2tfaXRlcmF0ZTMoY3VycmVudF9mcywgaW5vLCBmbGFncywgTlVMTCwKKwkJCSAgICAgIHByaW50X2Jsb2Nrc19wcm9jLCBOVUxMKTsKKwlwdXRjKCdcbicsIHN0ZG91dCk7Cit9CmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL3RzdF9zdXBlcl9zaXplLmMgYi9saWIvZXh0MmZzL3RzdF9zdXBlcl9zaXplLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjljZWM4YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvdHN0X3N1cGVyX3NpemUuYwpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIFRoaXMgdGVzdGluZyBwcm9ncmFtIG1ha2VzIHN1cmUgc3VwZXJibG9jayBzaXplIGlzIDEwMjQgYnl0ZXMgbG9uZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisKKyNkZWZpbmUgc2Jfc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sKKyNkZWZpbmUgc2Jfc3RydWN0X25hbWUgImV4dDJfc3VwZXJfYmxvY2siCisKK3N0cnVjdCBzYl9zdHJ1Y3Qgc2I7CisKKyNpZm5kZWYgb2Zmc2V0b2YKKyNkZWZpbmUgb2Zmc2V0b2YodHlwZSwgbWVtYmVyKSAgX19idWlsdGluX29mZnNldG9mICh0eXBlLCBtZW1iZXIpCisjZW5kaWYKKworI2RlZmluZSBjaGVja19maWVsZCh4LCBzKSBjdXJfb2Zmc2V0ID0gZG9fZmllbGQoI3gsIHMsIHNpemVvZihzYi54KSwJICAgICAgIFwKKwkJCQkJCW9mZnNldG9mKHN0cnVjdCBzYl9zdHJ1Y3QsIHgpLCBcCisJCQkJCQljdXJfb2Zmc2V0KQorCitzdGF0aWMgaW50IGRvX2ZpZWxkKGNvbnN0IGNoYXIgKmZpZWxkLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBjdXJfc2l6ZSwKKwkJICAgIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY3VyX29mZnNldCkKK3sKKwlpZiAoc2l6ZSAhPSBjdXJfc2l6ZSkgeworCQlwcmludGYoImVycm9yOiAlcyBzaXplICV1IHNob3VsZCBiZSAldVxuIiwKKwkJICAgICAgIGZpZWxkLCBjdXJfc2l6ZSwgc2l6ZSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChvZmZzZXQgIT0gY3VyX29mZnNldCkgeworCQlwcmludGYoImVycm9yOiAlcyBvZmZzZXQgJXUgc2hvdWxkIGJlICV1XG4iLAorCQkgICAgICAgZmllbGQsIGN1cl9vZmZzZXQsIG9mZnNldCk7CisJCWV4aXQoMSk7CisJfQorCXByaW50ZigiJThkICUtMzBzICUzdVxuIiwgb2Zmc2V0LCBmaWVsZCwgc2l6ZSk7CisJcmV0dXJuIG9mZnNldCArIHNpemU7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyNpZiAoX19HTlVDX18gPj0gNCkKKwlpbnQgY3VyX29mZnNldCA9IDA7CisKKwlwcmludGYoIiU4cyAlLTMwcyAlM3NcbiIsICJvZmZzZXQiLCAiZmllbGQiLCAic2l6ZSIpOworCWNoZWNrX2ZpZWxkKHNfaW5vZGVzX2NvdW50LCA0KTsKKwljaGVja19maWVsZChzX2Jsb2Nrc19jb3VudCwgNCk7CisJY2hlY2tfZmllbGQoc19yX2Jsb2Nrc19jb3VudCwgNCk7CisJY2hlY2tfZmllbGQoc19mcmVlX2Jsb2Nrc19jb3VudCwgNCk7CisJY2hlY2tfZmllbGQoc19mcmVlX2lub2Rlc19jb3VudCwgNCk7CisJY2hlY2tfZmllbGQoc19maXJzdF9kYXRhX2Jsb2NrLCA0KTsKKwljaGVja19maWVsZChzX2xvZ19ibG9ja19zaXplLCA0KTsKKwljaGVja19maWVsZChzX2xvZ19jbHVzdGVyX3NpemUsIDQpOworCWNoZWNrX2ZpZWxkKHNfYmxvY2tzX3Blcl9ncm91cCwgNCk7CisJY2hlY2tfZmllbGQoc19jbHVzdGVyc19wZXJfZ3JvdXAsIDQpOworCWNoZWNrX2ZpZWxkKHNfaW5vZGVzX3Blcl9ncm91cCwgNCk7CisJY2hlY2tfZmllbGQoc19tdGltZSwgNCk7CisJY2hlY2tfZmllbGQoc193dGltZSwgNCk7CisJY2hlY2tfZmllbGQoc19tbnRfY291bnQsIDIpOworCWNoZWNrX2ZpZWxkKHNfbWF4X21udF9jb3VudCwgMik7CisJY2hlY2tfZmllbGQoc19tYWdpYywgMik7CisJY2hlY2tfZmllbGQoc19zdGF0ZSwgMik7CisJY2hlY2tfZmllbGQoc19lcnJvcnMsIDIpOworCWNoZWNrX2ZpZWxkKHNfbWlub3JfcmV2X2xldmVsLCAyKTsKKwljaGVja19maWVsZChzX2xhc3RjaGVjaywgNCk7CisJY2hlY2tfZmllbGQoc19jaGVja2ludGVydmFsLCA0KTsKKwljaGVja19maWVsZChzX2NyZWF0b3Jfb3MsIDQpOworCWNoZWNrX2ZpZWxkKHNfcmV2X2xldmVsLCA0KTsKKwljaGVja19maWVsZChzX2RlZl9yZXN1aWQsIDIpOworCWNoZWNrX2ZpZWxkKHNfZGVmX3Jlc2dpZCwgMik7CisJY2hlY2tfZmllbGQoc19maXJzdF9pbm8sIDQpOworCWNoZWNrX2ZpZWxkKHNfaW5vZGVfc2l6ZSwgMik7CisJY2hlY2tfZmllbGQoc19ibG9ja19ncm91cF9uciwgMik7CisJY2hlY2tfZmllbGQoc19mZWF0dXJlX2NvbXBhdCwgNCk7CisJY2hlY2tfZmllbGQoc19mZWF0dXJlX2luY29tcGF0LCA0KTsKKwljaGVja19maWVsZChzX2ZlYXR1cmVfcm9fY29tcGF0LCA0KTsKKwljaGVja19maWVsZChzX3V1aWQsIDE2KTsKKwljaGVja19maWVsZChzX3ZvbHVtZV9uYW1lLCAxNik7CisJY2hlY2tfZmllbGQoc19sYXN0X21vdW50ZWQsIDY0KTsKKwljaGVja19maWVsZChzX2FsZ29yaXRobV91c2FnZV9iaXRtYXAsIDQpOworCWNoZWNrX2ZpZWxkKHNfcHJlYWxsb2NfYmxvY2tzLCAxKTsKKwljaGVja19maWVsZChzX3ByZWFsbG9jX2Rpcl9ibG9ja3MsIDEpOworCWNoZWNrX2ZpZWxkKHNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcywgMik7CisJY2hlY2tfZmllbGQoc19qb3VybmFsX3V1aWQsIDE2KTsKKwljaGVja19maWVsZChzX2pvdXJuYWxfaW51bSwgNCk7CisJY2hlY2tfZmllbGQoc19qb3VybmFsX2RldiwgNCk7CisJY2hlY2tfZmllbGQoc19sYXN0X29ycGhhbiwgNCk7CisJY2hlY2tfZmllbGQoc19oYXNoX3NlZWQsIDQgKiA0KTsKKwljaGVja19maWVsZChzX2RlZl9oYXNoX3ZlcnNpb24sIDEpOworCWNoZWNrX2ZpZWxkKHNfam5sX2JhY2t1cF90eXBlLCAxKTsKKwljaGVja19maWVsZChzX2Rlc2Nfc2l6ZSwgMik7CisJY2hlY2tfZmllbGQoc19kZWZhdWx0X21vdW50X29wdHMsIDQpOworCWNoZWNrX2ZpZWxkKHNfZmlyc3RfbWV0YV9iZywgNCk7CisJY2hlY2tfZmllbGQoc19ta2ZzX3RpbWUsIDQpOworCWNoZWNrX2ZpZWxkKHNfam5sX2Jsb2NrcywgMTcgKiA0KTsKKwljaGVja19maWVsZChzX2Jsb2Nrc19jb3VudF9oaSwgNCk7CisJY2hlY2tfZmllbGQoc19yX2Jsb2Nrc19jb3VudF9oaSwgNCk7CisJY2hlY2tfZmllbGQoc19mcmVlX2Jsb2Nrc19oaSwgNCk7CisJY2hlY2tfZmllbGQoc19taW5fZXh0cmFfaXNpemUsIDIpOworCWNoZWNrX2ZpZWxkKHNfd2FudF9leHRyYV9pc2l6ZSwgMik7CisJY2hlY2tfZmllbGQoc19mbGFncywgNCk7CisJY2hlY2tfZmllbGQoc19yYWlkX3N0cmlkZSwgMik7CisJY2hlY2tfZmllbGQoc19tbXBfdXBkYXRlX2ludGVydmFsLCAyKTsKKwljaGVja19maWVsZChzX21tcF9ibG9jaywgOCk7CisJY2hlY2tfZmllbGQoc19yYWlkX3N0cmlwZV93aWR0aCwgNCk7CisJY2hlY2tfZmllbGQoc19sb2dfZ3JvdXBzX3Blcl9mbGV4LCAxKTsKKwljaGVja19maWVsZChzX3Jlc2VydmVkX2NoYXJfcGFkLCAxKTsKKwljaGVja19maWVsZChzX3Jlc2VydmVkX3BhZCwgMik7CisJY2hlY2tfZmllbGQoc19rYnl0ZXNfd3JpdHRlbiwgOCk7CisJY2hlY2tfZmllbGQoc19zbmFwc2hvdF9pbnVtLCA0KTsKKwljaGVja19maWVsZChzX3NuYXBzaG90X2lkLCA0KTsKKwljaGVja19maWVsZChzX3NuYXBzaG90X3JfYmxvY2tzX2NvdW50LCA4KTsKKwljaGVja19maWVsZChzX3NuYXBzaG90X2xpc3QsIDQpOworCWNoZWNrX2ZpZWxkKHNfZXJyb3JfY291bnQsIDQpOworCWNoZWNrX2ZpZWxkKHNfZmlyc3RfZXJyb3JfdGltZSwgNCk7CisJY2hlY2tfZmllbGQoc19maXJzdF9lcnJvcl9pbm8sIDQpOworCWNoZWNrX2ZpZWxkKHNfZmlyc3RfZXJyb3JfYmxvY2ssIDgpOworCWNoZWNrX2ZpZWxkKHNfZmlyc3RfZXJyb3JfZnVuYywgMzIpOworCWNoZWNrX2ZpZWxkKHNfZmlyc3RfZXJyb3JfbGluZSwgNCk7CisJY2hlY2tfZmllbGQoc19sYXN0X2Vycm9yX3RpbWUsIDQpOworCWNoZWNrX2ZpZWxkKHNfbGFzdF9lcnJvcl9pbm8sIDQpOworCWNoZWNrX2ZpZWxkKHNfbGFzdF9lcnJvcl9saW5lLCA0KTsKKwljaGVja19maWVsZChzX2xhc3RfZXJyb3JfYmxvY2ssIDgpOworCWNoZWNrX2ZpZWxkKHNfbGFzdF9lcnJvcl9mdW5jLCAzMik7CisJY2hlY2tfZmllbGQoc19tb3VudF9vcHRzLCA2NCk7CisJY2hlY2tfZmllbGQoc191c3JfcXVvdGFfaW51bSwgNCk7CisJY2hlY2tfZmllbGQoc19ncnBfcXVvdGFfaW51bSwgNCk7CisJY2hlY2tfZmllbGQoc19vdmVyaGVhZF9ibG9ja3MsIDQpOworCWNoZWNrX2ZpZWxkKHNfYmFja3VwX2JncywgOCk7CisJY2hlY2tfZmllbGQoc19yZXNlcnZlZCwgMTA2ICogNCk7CisJY2hlY2tfZmllbGQoc19jaGVja3N1bSwgNCk7CisJZG9fZmllbGQoIlN1cGVyYmxvY2sgZW5kIiwgMCwgMCwgY3VyX29mZnNldCwgMTAyNCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvdHN0X3R5cGVzLmMgYi9saWIvZXh0MmZzL3RzdF90eXBlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDExMjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL3RzdF90eXBlcy5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBUaGlzIHRlc3RpbmcgcHJvZ3JhbSBtYWtlcyBzdXJlIHRoZSBleHQyX3R5cGVzIGhlYWRlciBmaWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImV4dDJmcy9leHQyX3R5cGVzLmgiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpZiAoc2l6ZW9mKF9fdTgpICE9IDEpIHsKKwkJcHJpbnRmKCJTaXplb2YoX191OCkgaXMgJWQgc2hvdWxkIGJlIDFcbiIsCisJCSAgICAgICAoaW50KXNpemVvZihfX3U4KSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChzaXplb2YoX19zOCkgIT0gMSkgeworCQlwcmludGYoIlNpemVvZihfczgpIGlzICVkIHNob3VsZCBiZSAxXG4iLAorCQkgICAgICAgKGludClzaXplb2YoX19zOCkpOworCQlleGl0KDEpOworCX0KKwlpZiAoc2l6ZW9mKF9fdTE2KSAhPSAyKSB7CisJCXByaW50ZigiU2l6ZW9mKF9fdTE2KSBpcyAlZCBzaG91bGQgYmUgMlxuIiwKKwkJICAgICAgIChpbnQpc2l6ZW9mKF9fdTE2KSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChzaXplb2YoX19zMTYpICE9IDIpIHsKKwkJcHJpbnRmKCJTaXplb2YoX19zMTYpIGlzICVkIHNob3VsZCBiZSAyXG4iLAorCQkgICAgICAgKGludClzaXplb2YoX19zMTYpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHNpemVvZihfX3UzMikgIT0gNCkgeworCQlwcmludGYoIlNpemVvZihfX3UzMikgaXMgJWQgc2hvdWxkIGJlIDRcbiIsCisJCSAgICAgICAoaW50KXNpemVvZihfX3UzMikpOworCQlleGl0KDEpOworCX0KKwlpZiAoc2l6ZW9mKF9fczMyKSAhPSA0KSB7CisJCXByaW50ZigiU2l6ZW9mKF9fczMyKSBpcyAlZCBzaG91bGQgYmUgNFxuIiwKKwkJICAgICAgIChpbnQpc2l6ZW9mKF9fczMyKSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChzaXplb2YoX191NjQpICE9IDgpIHsKKwkJcHJpbnRmKCJTaXplb2YoX191NjQpIGlzICVkIHNob3VsZCBiZSA4XG4iLAorCQkgICAgICAgKGludClzaXplb2YoX191NjQpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHNpemVvZihfX3M2NCkgIT0gOCkgeworCQlwcmludGYoIlNpemVvZihfX3M2NCkgaXMgJWQgc2hvdWxkIGJlIDhcbiIsCisJCSAgICAgICAoaW50KXNpemVvZihfX3M2NCkpOworCQlleGl0KDEpOworCX0KKwlwcmludGYoIlRoZSBleHQyX3R5cGVzLmggdHlwZXMgYXJlIGNvcnJlY3QuXG4iKTsKKwlleGl0KDApOworfQorCmRpZmYgLS1naXQgYS9saWIvZXh0MmZzL3VuZG9faW8uYyBiL2xpYi9leHQyZnMvdW5kb19pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YmViMDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXh0MmZzL3VuZG9faW8uYwpAQCAtMCwwICsxLDYwNiBAQAorLyoKKyAqIHVuZG9faW8uYyAtLS0gVGhpcyBpcyB0aGUgdW5kbyBpbyBtYW5hZ2VyIHRoYXQgY29waWVzIHRoZSBvbGQgZGF0YSB0aGF0CisgKiBjb3BpZXMgdGhlIG9sZCBkYXRhIGJlaW5nIG92ZXJ3cml0dGVuIGludG8gYSB0ZGIgZGF0YWJhc2UKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uLCAyMDA3CisgKiBBdXRob3IgQW5lZXNoIEt1bWFyIEsuViA8YW5lZXNoLmt1bWFyQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgX19saW51eF9fCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19SRVNPVVJDRV9ICisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInRkYi5oIgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgQVRUUih4KSBfX2F0dHJpYnV0ZV9fKHgpCisjZWxzZQorI2RlZmluZSBBVFRSKHgpCisjZW5kaWYKKworLyoKKyAqIEZvciBjaGVja2luZyBzdHJ1Y3R1cmUgbWFnaWMgbnVtYmVycy4uLgorICovCisKKyNkZWZpbmUgRVhUMl9DSEVDS19NQUdJQyhzdHJ1Y3QsIGNvZGUpIFwKKwkgIGlmICgoc3RydWN0KS0+bWFnaWMgIT0gKGNvZGUpKSByZXR1cm4gKGNvZGUpCisKK3N0cnVjdCB1bmRvX3ByaXZhdGVfZGF0YSB7CisJaW50CW1hZ2ljOworCVREQl9DT05URVhUICp0ZGI7CisJY2hhciAqdGRiX2ZpbGU7CisKKwkvKiBUaGUgYmFja2luZyBpbyBjaGFubmVsICovCisJaW9fY2hhbm5lbCByZWFsOworCisJaW50IHRkYl9kYXRhX3NpemU7CisJaW50IHRkYl93cml0dGVuOworCisJLyogdG8gc3VwcG9ydCBvZmZzZXQgaW4gdW5peCBJL08gbWFuYWdlciAqLworCWV4dDJfbG9mZl90IG9mZnNldDsKK307CisKK3N0YXRpYyBpb19tYW5hZ2VyIHVuZG9faW9fYmFja2luZ19tYW5hZ2VyOworc3RhdGljIGNoYXIgKnRkYl9maWxlOworc3RhdGljIGludCBhY3R1YWxfc2l6ZTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgbXRpbWVfa2V5W10gPSAiZmlsZXN5c3RlbSBNVElNRSI7CitzdGF0aWMgdW5zaWduZWQgY2hhciBibGtzaXplX2tleVtdID0gImZpbGVzeXN0ZW0gQkxLU0laRSI7CitzdGF0aWMgdW5zaWduZWQgY2hhciB1dWlkX2tleVtdID0gImZpbGVzeXN0ZW0gVVVJRCI7CisKK2VycmNvZGVfdCBzZXRfdW5kb19pb19iYWNraW5nX21hbmFnZXIoaW9fbWFuYWdlciBtYW5hZ2VyKQoreworCS8qCisJICogV2UgbWF5IHdhbnQgdG8gZG8gc29tZSB2YWxpZGF0aW9uIGxhdGVyCisJICovCisJdW5kb19pb19iYWNraW5nX21hbmFnZXIgPSBtYW5hZ2VyOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3Qgc2V0X3VuZG9faW9fYmFja3VwX2ZpbGUoY2hhciAqZmlsZV9uYW1lKQoreworCXRkYl9maWxlID0gc3RyZHVwKGZpbGVfbmFtZSk7CisKKwlpZiAodGRiX2ZpbGUgPT0gTlVMTCkgeworCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3Qgd3JpdGVfZmlsZV9zeXN0ZW1faWRlbnRpdHkoaW9fY2hhbm5lbCB1bmRvX2NoYW5uZWwsCisJCQkJCQkJVERCX0NPTlRFWFQgKnRkYikKK3sKKwllcnJjb2RlX3QgcmV0dmFsOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHN1cGVyOworCVREQl9EQVRBIHRkYl9rZXksIHRkYl9kYXRhOworCXN0cnVjdCB1bmRvX3ByaXZhdGVfZGF0YSAqZGF0YTsKKwlpb19jaGFubmVsIGNoYW5uZWw7CisJaW50IGJsb2NrX3NpemUgOworCisJZGF0YSA9IChzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEgKikgdW5kb19jaGFubmVsLT5wcml2YXRlX2RhdGE7CisJY2hhbm5lbCA9IGRhdGEtPnJlYWw7CisJYmxvY2tfc2l6ZSA9IGNoYW5uZWwtPmJsb2NrX3NpemU7CisKKwlpb19jaGFubmVsX3NldF9ibGtzaXplKGNoYW5uZWwsIFNVUEVSQkxPQ0tfT0ZGU0VUKTsKKwlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoY2hhbm5lbCwgMSwgLVNVUEVSQkxPQ0tfU0laRSwgJnN1cGVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9vdXQ7CisKKwkvKiBXcml0ZSB0byB0ZGIgZmlsZSBpbiB0aGUgZmlsZSBzeXN0ZW0gYnl0ZSBvcmRlciAqLworCXRkYl9rZXkuZHB0ciA9IG10aW1lX2tleTsKKwl0ZGJfa2V5LmRzaXplID0gc2l6ZW9mKG10aW1lX2tleSk7CisJdGRiX2RhdGEuZHB0ciA9ICh1bnNpZ25lZCBjaGFyICopICYoc3VwZXIuc19tdGltZSk7CisJdGRiX2RhdGEuZHNpemUgPSBzaXplb2Yoc3VwZXIuc19tdGltZSk7CisKKwlyZXR2YWwgPSB0ZGJfc3RvcmUodGRiLCB0ZGJfa2V5LCB0ZGJfZGF0YSwgVERCX0lOU0VSVCk7CisJaWYgKHJldHZhbCA9PSAtMSkgeworCQlyZXR2YWwgPSBFWFQyX0VUX1REQl9TVUNDRVNTICsgdGRiX2Vycm9yKHRkYik7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwl0ZGJfa2V5LmRwdHIgPSB1dWlkX2tleTsKKwl0ZGJfa2V5LmRzaXplID0gc2l6ZW9mKHV1aWRfa2V5KTsKKwl0ZGJfZGF0YS5kcHRyID0gKHVuc2lnbmVkIGNoYXIgKikmKHN1cGVyLnNfdXVpZCk7CisJdGRiX2RhdGEuZHNpemUgPSBzaXplb2Yoc3VwZXIuc191dWlkKTsKKworCXJldHZhbCA9IHRkYl9zdG9yZSh0ZGIsIHRkYl9rZXksIHRkYl9kYXRhLCBUREJfSU5TRVJUKTsKKwlpZiAocmV0dmFsID09IC0xKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfVERCX1NVQ0NFU1MgKyB0ZGJfZXJyb3IodGRiKTsKKwl9CisKK2Vycl9vdXQ6CisJaW9fY2hhbm5lbF9zZXRfYmxrc2l6ZShjaGFubmVsLCBibG9ja19zaXplKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHdyaXRlX2Jsb2NrX3NpemUoVERCX0NPTlRFWFQgKnRkYiwgaW50IGJsb2NrX3NpemUpCit7CisJZXJyY29kZV90IHJldHZhbDsKKwlUREJfREFUQSB0ZGJfa2V5LCB0ZGJfZGF0YTsKKworCXRkYl9rZXkuZHB0ciA9IGJsa3NpemVfa2V5OworCXRkYl9rZXkuZHNpemUgPSBzaXplb2YoYmxrc2l6ZV9rZXkpOworCXRkYl9kYXRhLmRwdHIgPSAodW5zaWduZWQgY2hhciAqKSYoYmxvY2tfc2l6ZSk7CisJdGRiX2RhdGEuZHNpemUgPSBzaXplb2YoYmxvY2tfc2l6ZSk7CisKKwlyZXR2YWwgPSB0ZGJfc3RvcmUodGRiLCB0ZGJfa2V5LCB0ZGJfZGF0YSwgVERCX0lOU0VSVCk7CisJaWYgKHJldHZhbCA9PSAtMSkgeworCQlyZXR2YWwgPSBFWFQyX0VUX1REQl9TVUNDRVNTICsgdGRiX2Vycm9yKHRkYik7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCB1bmRvX3dyaXRlX3RkYihpb19jaGFubmVsIGNoYW5uZWwsCisJCQkJdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLCBpbnQgY291bnQpCisKK3sKKwlpbnQgc2l6ZSwgc3o7CisJdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrX251bSwgYmFja2luZ19ibGtfbnVtOworCWVycmNvZGVfdCByZXR2YWwgPSAwOworCWV4dDJfbG9mZl90IG9mZnNldDsKKwlzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEgKmRhdGE7CisJVERCX0RBVEEgdGRiX2tleSwgdGRiX2RhdGE7CisJdW5zaWduZWQgY2hhciAqcmVhZF9wdHI7CisJdW5zaWduZWQgbG9uZyBsb25nIGVuZF9ibG9jazsKKworCWRhdGEgPSAoc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKworCWlmIChkYXRhLT50ZGIgPT0gTlVMTCkgeworCQkvKgorCQkgKiBUcmFuc2FjdGlvbiBkYXRhYmFzZSBub3QgaW5pdGlhbGl6ZWQKKwkJICovCisJCXJldHVybiAwOworCX0KKworCWlmIChjb3VudCA9PSAxKQorCQlzaXplID0gY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKwllbHNlIHsKKwkJaWYgKGNvdW50IDwgMCkKKwkJCXNpemUgPSAtY291bnQ7CisJCWVsc2UKKwkJCXNpemUgPSBjb3VudCAqIGNoYW5uZWwtPmJsb2NrX3NpemU7CisJfQorCS8qCisJICogRGF0YSBpcyBzdG9yZWQgaW4gdGRiIGRhdGFiYXNlIGFzIGJsb2NrcyBvZiB0ZGJfZGF0YV9zaXplIHNpemUKKwkgKiBUaGlzIGhlbHBzIGluIGVmZmljaWVudCBsb29rdXAgZnVydGhlci4KKwkgKgorCSAqIFdlIGRpdmlkZSB0aGUgZGlzayB0byBibG9ja3Mgb2YgdGRiX2RhdGFfc2l6ZS4KKwkgKi8KKwlvZmZzZXQgPSAoYmxvY2sgKiBjaGFubmVsLT5ibG9ja19zaXplKSArIGRhdGEtPm9mZnNldCA7CisJYmxvY2tfbnVtID0gb2Zmc2V0IC8gZGF0YS0+dGRiX2RhdGFfc2l6ZTsKKwllbmRfYmxvY2sgPSAob2Zmc2V0ICsgc2l6ZSkgLyBkYXRhLT50ZGJfZGF0YV9zaXplOworCisJdGRiX3RyYW5zYWN0aW9uX3N0YXJ0KGRhdGEtPnRkYik7CisJd2hpbGUgKGJsb2NrX251bSA8PSBlbmRfYmxvY2sgKSB7CisKKwkJdGRiX2tleS5kcHRyID0gKHVuc2lnbmVkIGNoYXIgKikmYmxvY2tfbnVtOworCQl0ZGJfa2V5LmRzaXplID0gc2l6ZW9mKGJsb2NrX251bSk7CisJCS8qCisJCSAqIENoZWNrIGlmIHdlIGhhdmUgdGhlIHJlY29yZCBhbHJlYWR5CisJCSAqLworCQlpZiAodGRiX2V4aXN0cyhkYXRhLT50ZGIsIHRkYl9rZXkpKSB7CisJCQkvKiBUcnkgdGhlIG5leHQgYmxvY2sgKi8KKwkJCWJsb2NrX251bSsrOworCQkJY29udGludWU7CisJCX0KKwkJLyoKKwkJICogUmVhZCBvbmUgYmxvY2sgdXNpbmcgdGhlIGJhY2tpbmcgSS9PIG1hbmFnZXIKKwkJICogVGhlIGJhY2tpbmcgSS9PIG1hbmFnZXIgYmxvY2sgc2l6ZSBtYXkgYmUKKwkJICogZGlmZmVyZW50IGZyb20gdGhlIHRkYl9kYXRhX3NpemUuCisJCSAqIEFsc28gd2UgbmVlZCB0byByZWNhbGN1YXRlIHRoZSBibG9jayBudW1iZXIgd2l0aCByZXNwZWN0CisJCSAqIHRvIHRoZSBiYWNraW5nIEkvTyBtYW5hZ2VyLgorCQkgKi8KKwkJb2Zmc2V0ID0gYmxvY2tfbnVtICogZGF0YS0+dGRiX2RhdGFfc2l6ZTsKKwkJYmFja2luZ19ibGtfbnVtID0gKG9mZnNldCAtIGRhdGEtPm9mZnNldCkgLyBjaGFubmVsLT5ibG9ja19zaXplOworCisJCWNvdW50ID0gZGF0YS0+dGRiX2RhdGFfc2l6ZSArCisJCQkJKChvZmZzZXQgLSBkYXRhLT5vZmZzZXQpICUgY2hhbm5lbC0+YmxvY2tfc2l6ZSk7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGNvdW50LCAmcmVhZF9wdHIpOworCQlpZiAocmV0dmFsKSB7CisJCQl0ZGJfdHJhbnNhY3Rpb25fY2FuY2VsKGRhdGEtPnRkYik7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisKKwkJbWVtc2V0KHJlYWRfcHRyLCAwLCBjb3VudCk7CisJCWFjdHVhbF9zaXplID0gMDsKKwkJaWYgKChjb3VudCAlIGNoYW5uZWwtPmJsb2NrX3NpemUpID09IDApCisJCQlzeiA9IGNvdW50IC8gY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKwkJZWxzZQorCQkJc3ogPSAtY291bnQ7CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChkYXRhLT5yZWFsLCBiYWNraW5nX2Jsa19udW0sCisJCQkJCSAgICAgc3osIHJlYWRfcHRyKTsKKwkJaWYgKHJldHZhbCkgeworCQkJaWYgKHJldHZhbCAhPSBFWFQyX0VUX1NIT1JUX1JFQUQpIHsKKwkJCQlmcmVlKHJlYWRfcHRyKTsKKwkJCQl0ZGJfdHJhbnNhY3Rpb25fY2FuY2VsKGRhdGEtPnRkYik7CisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCX0KKwkJCS8qCisJCQkgKiBzaG9ydCByZWFkIHNvIHVwZGF0ZSB0aGUgcmVjb3JkIHNpemUKKwkJCSAqIGFjY29yZGluZ2x5CisJCQkgKi8KKwkJCXRkYl9kYXRhLmRzaXplID0gYWN0dWFsX3NpemU7CisJCX0gZWxzZSB7CisJCQl0ZGJfZGF0YS5kc2l6ZSA9IGRhdGEtPnRkYl9kYXRhX3NpemU7CisJCX0KKwkJdGRiX2RhdGEuZHB0ciA9IHJlYWRfcHRyICsKKwkJCQkoKG9mZnNldCAtIGRhdGEtPm9mZnNldCkgJSBjaGFubmVsLT5ibG9ja19zaXplKTsKKyNpZmRlZiBERUJVRworCQlwcmludGYoIlByaW50aW5nIHdpdGgga2V5ICVsbGQgZGF0YSAleCBhbmQgc2l6ZSAlZFxuIiwKKwkJICAgICAgIGJsb2NrX251bSwKKwkJICAgICAgIHRkYl9kYXRhLmRwdHIsCisJCSAgICAgICB0ZGJfZGF0YS5kc2l6ZSk7CisjZW5kaWYKKwkJaWYgKCFkYXRhLT50ZGJfd3JpdHRlbikgeworCQkJZGF0YS0+dGRiX3dyaXR0ZW4gPSAxOworCQkJLyogV3JpdGUgdGhlIGJsb2Nrc2l6ZSB0byB0ZGIgZmlsZSAqLworCQkJcmV0dmFsID0gd3JpdGVfYmxvY2tfc2l6ZShkYXRhLT50ZGIsCisJCQkJCQkgIGRhdGEtPnRkYl9kYXRhX3NpemUpOworCQkJaWYgKHJldHZhbCkgeworCQkJCXRkYl90cmFuc2FjdGlvbl9jYW5jZWwoZGF0YS0+dGRiKTsKKwkJCQlyZXR2YWwgPSBFWFQyX0VUX1REQl9FUlJfSU87CisJCQkJZnJlZShyZWFkX3B0cik7CisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCX0KKwkJfQorCQlyZXR2YWwgPSB0ZGJfc3RvcmUoZGF0YS0+dGRiLCB0ZGJfa2V5LCB0ZGJfZGF0YSwgVERCX0lOU0VSVCk7CisJCWlmIChyZXR2YWwgPT0gLTEpIHsKKwkJCS8qCisJCQkgKiBUREJfRVJSX0VYSVNUUyBjYW5ub3QgaGFwcGVuIGJlY2F1c2Ugd2UKKwkJCSAqIGhhdmUgYWxyZWFkeSB2ZXJpZmllZCBpdCBkb2Vzbid0IGV4aXN0CisJCQkgKi8KKwkJCXRkYl90cmFuc2FjdGlvbl9jYW5jZWwoZGF0YS0+dGRiKTsKKwkJCXJldHZhbCA9IEVYVDJfRVRfVERCX0VSUl9JTzsKKwkJCWZyZWUocmVhZF9wdHIpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlmcmVlKHJlYWRfcHRyKTsKKwkJLyogTmV4dCBibG9jayAqLworCQlibG9ja19udW0rKzsKKwl9CisJdGRiX3RyYW5zYWN0aW9uX2NvbW1pdChkYXRhLT50ZGIpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCB1bmRvX2lvX3JlYWRfZXJyb3IoaW9fY2hhbm5lbCBjaGFubmVsIEFUVFIoKHVudXNlZCkpLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGJsb2NrIEFUVFIoKHVudXNlZCkpLAorCQkJCSAgICBpbnQgY291bnQgQVRUUigodW51c2VkKSksCisJCQkJICAgIHZvaWQgKmRhdGEgQVRUUigodW51c2VkKSksCisJCQkJICAgIHNpemVfdCBzaXplIEFUVFIoKHVudXNlZCkpLAorCQkJCSAgICBpbnQgYWN0dWFsLAorCQkJCSAgICBlcnJjb2RlX3QgZXJyb3IgQVRUUigodW51c2VkKSkpCit7CisJYWN0dWFsX3NpemUgPSBhY3R1YWw7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCB1bmRvX2Vycl9oYW5kbGVyX2luaXQoaW9fY2hhbm5lbCBjaGFubmVsKQoreworCWNoYW5uZWwtPnJlYWRfZXJyb3IgPSB1bmRvX2lvX3JlYWRfZXJyb3I7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdW5kb19vcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywgaW9fY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlpb19jaGFubmVsCWlvID0gTlVMTDsKKwlzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEgKmRhdGEgPSBOVUxMOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAobmFtZSA9PSAwKQorCQlyZXR1cm4gRVhUMl9FVF9CQURfREVWSUNFX05BTUU7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBzdHJ1Y3RfaW9fY2hhbm5lbCksICZpbyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCW1lbXNldChpbywgMCwgc2l6ZW9mKHN0cnVjdCBzdHJ1Y3RfaW9fY2hhbm5lbCkpOworCWlvLT5tYWdpYyA9IEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTDsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhKSwgJmRhdGEpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKworCWlvLT5tYW5hZ2VyID0gdW5kb19pb19tYW5hZ2VyOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHN0cmxlbihuYW1lKSsxLCAmaW8tPm5hbWUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKworCXN0cmNweShpby0+bmFtZSwgbmFtZSk7CisJaW8tPnByaXZhdGVfZGF0YSA9IGRhdGE7CisJaW8tPmJsb2NrX3NpemUgPSAxMDI0OworCWlvLT5yZWFkX2Vycm9yID0gMDsKKwlpby0+d3JpdGVfZXJyb3IgPSAwOworCWlvLT5yZWZjb3VudCA9IDE7CisKKwltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCB1bmRvX3ByaXZhdGVfZGF0YSkpOworCWRhdGEtPm1hZ2ljID0gRVhUMl9FVF9NQUdJQ19VTklYX0lPX0NIQU5ORUw7CisKKwlpZiAodW5kb19pb19iYWNraW5nX21hbmFnZXIpIHsKKwkJcmV0dmFsID0gdW5kb19pb19iYWNraW5nX21hbmFnZXItPm9wZW4obmFtZSwgZmxhZ3MsCisJCQkJCQkgICAgICAgJmRhdGEtPnJlYWwpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworCX0gZWxzZSB7CisJCWRhdGEtPnJlYWwgPSAwOworCX0KKworCS8qIHNldHVwIHRoZSB0ZGIgZmlsZSAqLworCWRhdGEtPnRkYiA9IHRkYl9vcGVuKHRkYl9maWxlLCAwLCBUREJfQ0xFQVJfSUZfRklSU1QsCisJCQkgICAgIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19FWENMLCAwNjAwKTsKKwlpZiAoIWRhdGEtPnRkYikgeworCQlyZXR2YWwgPSBlcnJubzsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogc2V0dXAgZXJyIGhhbmRsZXIgZm9yIHJlYWQgc28gdGhhdCB3ZSBrbm93CisJICogd2hlbiB0aGUgYmFja2luZyBtYW5hZ2VyIGZhaWxzIGRvIHNob3J0IHJlYWQKKwkgKi8KKwlpZiAoZGF0YS0+cmVhbCkKKwkJdW5kb19lcnJfaGFuZGxlcl9pbml0KGRhdGEtPnJlYWwpOworCisJKmNoYW5uZWwgPSBpbzsKKwlyZXR1cm4gMDsKKworY2xlYW51cDoKKwlpZiAoZGF0YSAmJiBkYXRhLT5yZWFsKQorCQlpb19jaGFubmVsX2Nsb3NlKGRhdGEtPnJlYWwpOworCWlmIChkYXRhKQorCQlleHQyZnNfZnJlZV9tZW0oJmRhdGEpOworCWlmIChpbykKKwkJZXh0MmZzX2ZyZWVfbWVtKCZpbyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCB1bmRvX2Nsb3NlKGlvX2NoYW5uZWwgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEgKmRhdGE7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19VTklYX0lPX0NIQU5ORUwpOworCisJaWYgKC0tY2hhbm5lbC0+cmVmY291bnQgPiAwKQorCQlyZXR1cm4gMDsKKwkvKiBCZWZvcmUgY2xvc2luZyB3cml0ZSB0aGUgZmlsZSBzeXN0ZW0gaWRlbnRpdHkgKi8KKwlyZXR2YWwgPSB3cml0ZV9maWxlX3N5c3RlbV9pZGVudGl0eShjaGFubmVsLCBkYXRhLT50ZGIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJaWYgKGRhdGEtPnJlYWwpCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfY2xvc2UoZGF0YS0+cmVhbCk7CisJaWYgKGRhdGEtPnRkYikKKwkJdGRiX2Nsb3NlKGRhdGEtPnRkYik7CisJZXh0MmZzX2ZyZWVfbWVtKCZjaGFubmVsLT5wcml2YXRlX2RhdGEpOworCWlmIChjaGFubmVsLT5uYW1lKQorCQlleHQyZnNfZnJlZV9tZW0oJmNoYW5uZWwtPm5hbWUpOworCWV4dDJmc19mcmVlX21lbSgmY2hhbm5lbCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHVuZG9fc2V0X2Jsa3NpemUoaW9fY2hhbm5lbCBjaGFubmVsLCBpbnQgYmxrc2l6ZSkKK3sKKwlzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEgKmRhdGE7CisJZXJyY29kZV90CQlyZXR2YWwgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworCWlmIChkYXRhLT5yZWFsKQorCQlyZXR2YWwgPSBpb19jaGFubmVsX3NldF9ibGtzaXplKGRhdGEtPnJlYWwsIGJsa3NpemUpOworCS8qCisJICogU2V0IHRoZSBibG9jayBzaXplIHVzZWQgZm9yIHRkYgorCSAqLworCWlmICghZGF0YS0+dGRiX2RhdGFfc2l6ZSkgeworCQlkYXRhLT50ZGJfZGF0YV9zaXplID0gYmxrc2l6ZTsKKwl9CisJY2hhbm5lbC0+YmxvY2tfc2l6ZSA9IGJsa3NpemU7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCB1bmRvX3JlYWRfYmxrNjQoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssCisJCQkgICAgICAgaW50IGNvdW50LCB2b2lkICpidWYpCit7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisJc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhICpkYXRhOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworCWlmIChkYXRhLT5yZWFsKQorCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZGF0YS0+cmVhbCwgYmxvY2ssIGNvdW50LCBidWYpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCB1bmRvX3JlYWRfYmxrKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBibG9jaywKKwkJCSAgICAgICBpbnQgY291bnQsIHZvaWQgKmJ1ZikKK3sKKwlyZXR1cm4gdW5kb19yZWFkX2JsazY0KGNoYW5uZWwsIGJsb2NrLCBjb3VudCwgYnVmKTsKK30KKworc3RhdGljIGVycmNvZGVfdCB1bmRvX3dyaXRlX2JsazY0KGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJCWludCBjb3VudCwgY29uc3Qgdm9pZCAqYnVmKQoreworCXN0cnVjdCB1bmRvX3ByaXZhdGVfZGF0YSAqZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlkYXRhID0gKHN0cnVjdCB1bmRvX3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX1VOSVhfSU9fQ0hBTk5FTCk7CisJLyoKKwkgKiBGaXJzdCB3cml0ZSB0aGUgZXhpc3RpbmcgY29udGVudCBpbnRvIGRhdGFiYXNlCisJICovCisJcmV0dmFsID0gdW5kb193cml0ZV90ZGIoY2hhbm5lbCwgYmxvY2ssIGNvdW50KTsKKwlpZiAocmV0dmFsKQorCQkgcmV0dXJuIHJldHZhbDsKKwlpZiAoZGF0YS0+cmVhbCkKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChkYXRhLT5yZWFsLCBibG9jaywgY291bnQsIGJ1Zik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHVuZG9fd3JpdGVfYmxrKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBibG9jaywKKwkJCQlpbnQgY291bnQsIGNvbnN0IHZvaWQgKmJ1ZikKK3sKKwlyZXR1cm4gdW5kb193cml0ZV9ibGs2NChjaGFubmVsLCBibG9jaywgY291bnQsIGJ1Zik7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdW5kb193cml0ZV9ieXRlKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJIGludCBzaXplLCBjb25zdCB2b2lkICpidWYpCit7CisJc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCWV4dDJfbG9mZl90CWxvY2F0aW9uOworCXVuc2lnbmVkIGxvbmcgYmxrX251bSwgY291bnQ7OworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworCWxvY2F0aW9uID0gb2Zmc2V0ICsgZGF0YS0+b2Zmc2V0OworCWJsa19udW0gPSBsb2NhdGlvbi9jaGFubmVsLT5ibG9ja19zaXplOworCS8qCisJICogdGhlIHNpemUgc3BlY2lmaWVkIG1heSBzcHJlYWQgYWNyb3NzIG11bHRpcGxlIGJsb2NrcworCSAqIGFsc28gbWFrZSBzdXJlIHdlIGFjY291bnQgZm9yIHRoZSBmYWN0IHRoYXQgYmxvY2sgc3RhcnQKKwkgKiBvZmZzZXQgZm9yIHRkYiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgYmFja2luZyBJL08gbWFuYWdlcgorCSAqIGR1ZSB0byBwb3NzaWJsZSBkaWZmZXJlbnQgYmxvY2sgc2l6ZQorCSAqLworCWNvdW50ID0gKHNpemUgKyAobG9jYXRpb24gJSBjaGFubmVsLT5ibG9ja19zaXplKSArCisJCQljaGFubmVsLT5ibG9ja19zaXplICAtMSkvY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKwlyZXR2YWwgPSB1bmRvX3dyaXRlX3RkYihjaGFubmVsLCBibGtfbnVtLCBjb3VudCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlpZiAoZGF0YS0+cmVhbCAmJiBkYXRhLT5yZWFsLT5tYW5hZ2VyLT53cml0ZV9ieXRlKQorCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2J5dGUoZGF0YS0+cmVhbCwgb2Zmc2V0LCBzaXplLCBidWYpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIEZsdXNoIGRhdGEgYnVmZmVycyB0byBkaXNrLgorICovCitzdGF0aWMgZXJyY29kZV90IHVuZG9fZmx1c2goaW9fY2hhbm5lbCBjaGFubmVsKQoreworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCXN0cnVjdCB1bmRvX3ByaXZhdGVfZGF0YSAqZGF0YTsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlkYXRhID0gKHN0cnVjdCB1bmRvX3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX1VOSVhfSU9fQ0hBTk5FTCk7CisKKwlpZiAoZGF0YS0+cmVhbCkKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9mbHVzaChkYXRhLT5yZWFsKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdW5kb19zZXRfb3B0aW9uKGlvX2NoYW5uZWwgY2hhbm5lbCwgY29uc3QgY2hhciAqb3B0aW9uLAorCQkJCSBjb25zdCBjaGFyICphcmcpCit7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisJc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhICpkYXRhOworCXVuc2lnbmVkIGxvbmcgdG1wOworCWNoYXIgKmVuZDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlkYXRhID0gKHN0cnVjdCB1bmRvX3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX1VOSVhfSU9fQ0hBTk5FTCk7CisKKwlpZiAoIXN0cmNtcChvcHRpb24sICJ0ZGJfZGF0YV9zaXplIikpIHsKKwkJaWYgKCFhcmcpCisJCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCisJCXRtcCA9IHN0cnRvdWwoYXJnLCAmZW5kLCAwKTsKKwkJaWYgKCplbmQpCisJCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCQlpZiAoIWRhdGEtPnRkYl9kYXRhX3NpemUgfHwgIWRhdGEtPnRkYl93cml0dGVuKSB7CisJCQlkYXRhLT50ZGJfZGF0YV9zaXplID0gdG1wOworCQl9CisJCXJldHVybiAwOworCX0KKwkvKgorCSAqIE5lZWQgdG8gc3VwcG9ydCBvZmZzZXQgb3B0aW9uIHRvIHdvcmsgd2l0aAorCSAqIFVuaXggSS9PIG1hbmFnZXIKKwkgKi8KKwlpZiAoZGF0YS0+cmVhbCAmJiBkYXRhLT5yZWFsLT5tYW5hZ2VyLT5zZXRfb3B0aW9uKSB7CisJCXJldHZhbCA9IGRhdGEtPnJlYWwtPm1hbmFnZXItPnNldF9vcHRpb24oZGF0YS0+cmVhbCwKKwkJCQkJCQlvcHRpb24sIGFyZyk7CisJfQorCWlmICghcmV0dmFsICYmICFzdHJjbXAob3B0aW9uLCAib2Zmc2V0IikpIHsKKwkJaWYgKCFhcmcpCisJCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCisJCXRtcCA9IHN0cnRvdWwoYXJnLCAmZW5kLCAwKTsKKwkJaWYgKCplbmQpCisJCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCQlkYXRhLT5vZmZzZXQgPSB0bXA7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdW5kb19nZXRfc3RhdHMoaW9fY2hhbm5lbCBjaGFubmVsLCBpb19zdGF0cyAqc3RhdHMpCit7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisJc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhICpkYXRhOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworCWlmIChkYXRhLT5yZWFsKQorCQlyZXR2YWwgPSAoZGF0YS0+cmVhbC0+bWFuYWdlci0+Z2V0X3N0YXRzKShkYXRhLT5yZWFsLCBzdGF0cyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3RydWN0IHN0cnVjdF9pb19tYW5hZ2VyIHN0cnVjdF91bmRvX21hbmFnZXIgPSB7CisJLm1hZ2ljCQk9IEVYVDJfRVRfTUFHSUNfSU9fTUFOQUdFUiwKKwkubmFtZQkJPSAiVW5kbyBJL08gTWFuYWdlciIsCisJLm9wZW4JCT0gdW5kb19vcGVuLAorCS5jbG9zZQkJPSB1bmRvX2Nsb3NlLAorCS5zZXRfYmxrc2l6ZQk9IHVuZG9fc2V0X2Jsa3NpemUsCisJLnJlYWRfYmxrCT0gdW5kb19yZWFkX2JsaywKKwkud3JpdGVfYmxrCT0gdW5kb193cml0ZV9ibGssCisJLmZsdXNoCQk9IHVuZG9fZmx1c2gsCisJLndyaXRlX2J5dGUJPSB1bmRvX3dyaXRlX2J5dGUsCisJLnNldF9vcHRpb24JPSB1bmRvX3NldF9vcHRpb24sCisJLmdldF9zdGF0cwk9IHVuZG9fZ2V0X3N0YXRzLAorCS5yZWFkX2JsazY0CT0gdW5kb19yZWFkX2JsazY0LAorCS53cml0ZV9ibGs2NAk9IHVuZG9fd3JpdGVfYmxrNjQsCit9OworCitpb19tYW5hZ2VyIHVuZG9faW9fbWFuYWdlciA9ICZzdHJ1Y3RfdW5kb19tYW5hZ2VyOwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy91bml4X2lvLmMgYi9saWIvZXh0MmZzL3VuaXhfaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2YyMmUzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dDJmcy91bml4X2lvLmMKQEAgLTAsMCArMSw5ODcgQEAKKy8qCisgKiB1bml4X2lvLmMgLS0tIFRoaXMgaXMgdGhlIFVuaXggKHdlbGwsIHJlYWxseSBQT1NJWCkgaW1wbGVtZW50YXRpb24KKyAqCW9mIHRoZSBJL08gbWFuYWdlci4KKyAqCisgKiBJbXBsZW1lbnRzIGEgb25lLWJsb2NrIHdyaXRlLXRocm91Z2ggY2FjaGUuCisgKgorICogSW5jbHVkZXMgc3VwcG9ydCBmb3IgV2luZG93cyBOVCBzdXBwb3J0IHVuZGVyIEN5Z3dpbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisgKgkyMDAyIGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNlbmRpZgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgX19saW51eF9fCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19SRVNPVVJDRV9ICisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjZW5kaWYKKyNpZiBIQVZFX0xJTlVYX0ZBTExPQ19ICisjaW5jbHVkZSA8bGludXgvZmFsbG9jLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9JTykgJiYgIWRlZmluZWQoQkxLUk9HRVQpCisjZGVmaW5lIEJMS1JPR0VUICAgX0lPKDB4MTIsIDk0KSAvKiBHZXQgcmVhZC1vbmx5IHN0YXR1cyAoMCA9IHJlYWRfd3JpdGUpLiAgKi8KKyNlbmRpZgorCisjdW5kZWYgQUxJR05fREVCVUcKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworLyoKKyAqIEZvciBjaGVja2luZyBzdHJ1Y3R1cmUgbWFnaWMgbnVtYmVycy4uLgorICovCisKKyNkZWZpbmUgRVhUMl9DSEVDS19NQUdJQyhzdHJ1Y3QsIGNvZGUpIFwKKwkgIGlmICgoc3RydWN0KS0+bWFnaWMgIT0gKGNvZGUpKSByZXR1cm4gKGNvZGUpCisKK3N0cnVjdCB1bml4X2NhY2hlIHsKKwljaGFyCQkJKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGxvbmcJYmxvY2s7CisJaW50CQkJYWNjZXNzX3RpbWU7CisJdW5zaWduZWQJCWRpcnR5OjE7CisJdW5zaWduZWQJCWluX3VzZToxOworfTsKKworI2RlZmluZSBDQUNIRV9TSVpFIDgKKyNkZWZpbmUgV1JJVEVfRElSRUNUX1NJWkUgNAkvKiBNdXN0IGJlIHNtYWxsZXIgdGhhbiBDQUNIRV9TSVpFICovCisjZGVmaW5lIFJFQURfRElSRUNUX1NJWkUgNAkvKiBTaG91bGQgYmUgc21hbGxlciB0aGFuIENBQ0hFX1NJWkUgKi8KKworc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhIHsKKwlpbnQJbWFnaWM7CisJaW50CWRldjsKKwlpbnQJZmxhZ3M7CisJaW50CWFsaWduOworCWludAlhY2Nlc3NfdGltZTsKKwlleHQyX2xvZmZfdCBvZmZzZXQ7CisJc3RydWN0IHVuaXhfY2FjaGUgY2FjaGVbQ0FDSEVfU0laRV07CisJdm9pZAkqYm91bmNlOworCXN0cnVjdCBzdHJ1Y3RfaW9fc3RhdHMgaW9fc3RhdHM7Cit9OworCisjZGVmaW5lIElTX0FMSUdORUQobiwgYWxpZ24pICgoKCh1bnNpZ25lZCBsb25nKSBuKSAmIFwKKwkJCSAgICAgICAoKHVuc2lnbmVkIGxvbmcpICgoYWxpZ24pLTEpKSkgPT0gMCkKKworc3RhdGljIGVycmNvZGVfdCB1bml4X2dldF9zdGF0cyhpb19jaGFubmVsIGNoYW5uZWwsIGlvX3N0YXRzICpzdGF0cykKK3sKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKworCXN0cnVjdCB1bml4X3ByaXZhdGVfZGF0YSAqZGF0YTsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlkYXRhID0gKHN0cnVjdCB1bml4X3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX1VOSVhfSU9fQ0hBTk5FTCk7CisKKwlpZiAoc3RhdHMpCisJCSpzdGF0cyA9ICZkYXRhLT5pb19zdGF0czsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBIZXJlIGFyZSB0aGUgcmF3IEkvTyBmdW5jdGlvbnMKKyAqLworc3RhdGljIGVycmNvZGVfdCByYXdfcmVhZF9ibGsoaW9fY2hhbm5lbCBjaGFubmVsLAorCQkJICAgICAgc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICpkYXRhLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJICAgICAgaW50IGNvdW50LCB2b2lkICpidWZ2KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJc3NpemVfdAkJc2l6ZTsKKwlleHQyX2xvZmZfdAlsb2NhdGlvbjsKKwlpbnQJCWFjdHVhbCA9IDA7CisJdW5zaWduZWQgY2hhcgkqYnVmID0gYnVmdjsKKworCXNpemUgPSAoY291bnQgPCAwKSA/IC1jb3VudCA6IGNvdW50ICogY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKwlkYXRhLT5pb19zdGF0cy5ieXRlc19yZWFkICs9IHNpemU7CisJbG9jYXRpb24gPSAoKGV4dDJfbG9mZl90KSBibG9jayAqIGNoYW5uZWwtPmJsb2NrX3NpemUpICsgZGF0YS0+b2Zmc2V0OworCisjaWZkZWYgSEFWRV9QUkVBRDY0CisJLyogVHJ5IGFuIGFsaWduZWQgcHJlYWQgKi8KKwlpZiAoKGNoYW5uZWwtPmFsaWduID09IDApIHx8CisJICAgIChJU19BTElHTkVEKGJ1ZiwgY2hhbm5lbC0+YWxpZ24pICYmCisJICAgICBJU19BTElHTkVEKHNpemUsIGNoYW5uZWwtPmFsaWduKSkpIHsKKwkJYWN0dWFsID0gcHJlYWQ2NChkYXRhLT5kZXYsIGJ1Ziwgc2l6ZSwgbG9jYXRpb24pOworCQlpZiAoYWN0dWFsID09IHNpemUpCisJCQlyZXR1cm4gMDsKKwl9CisjZWxpZiBIQVZFX1BSRUFECisJLyogVHJ5IGFuIGFsaWduZWQgcHJlYWQgKi8KKwlpZiAoKHNpemVvZihvZmZfdCkgPj0gc2l6ZW9mKGV4dDJfbG9mZl90KSkgJiYKKwkgICAgKChjaGFubmVsLT5hbGlnbiA9PSAwKSB8fAorCSAgICAgKElTX0FMSUdORUQoYnVmLCBjaGFubmVsLT5hbGlnbikgJiYKKwkgICAgICBJU19BTElHTkVEKHNpemUsIGNoYW5uZWwtPmFsaWduKSkpKSB7CisJCWFjdHVhbCA9IHByZWFkKGRhdGEtPmRldiwgYnVmLCBzaXplLCBsb2NhdGlvbik7CisJCWlmIChhY3R1YWwgPT0gc2l6ZSkKKwkJCXJldHVybiAwOworCX0KKyNlbmRpZiAvKiBIQVZFX1BSRUFEICovCisKKwlpZiAoZXh0MmZzX2xsc2VlayhkYXRhLT5kZXYsIGxvY2F0aW9uLCBTRUVLX1NFVCkgIT0gbG9jYXRpb24pIHsKKwkJcmV0dmFsID0gZXJybm8gPyBlcnJubyA6IEVYVDJfRVRfTExTRUVLX0ZBSUxFRDsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCWlmICgoY2hhbm5lbC0+YWxpZ24gPT0gMCkgfHwKKwkgICAgKElTX0FMSUdORUQoYnVmLCBjaGFubmVsLT5hbGlnbikgJiYKKwkgICAgIElTX0FMSUdORUQoc2l6ZSwgY2hhbm5lbC0+YWxpZ24pKSkgeworCQlhY3R1YWwgPSByZWFkKGRhdGEtPmRldiwgYnVmLCBzaXplKTsKKwkJaWYgKGFjdHVhbCAhPSBzaXplKSB7CisJCXNob3J0X3JlYWQ6CisJCQlpZiAoYWN0dWFsIDwgMCkKKwkJCQlhY3R1YWwgPSAwOworCQkJcmV0dmFsID0gRVhUMl9FVF9TSE9SVF9SRUFEOworCQkJZ290byBlcnJvcl9vdXQ7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisjaWZkZWYgQUxJR05fREVCVUcKKwlwcmludGYoInJhd19yZWFkX2JsazogT19ESVJFQ1QgZmFsbGJhY2s6ICVwICVsdVxuIiwgYnVmLAorCSAgICAgICAodW5zaWduZWQgbG9uZykgc2l6ZSk7CisjZW5kaWYKKworCS8qCisJICogVGhlIGJ1ZmZlciBvciBzaXplIHdoaWNoIHdlJ3JlIHRyeWluZyB0byByZWFkIGlzbid0IGFsaWduZWQKKwkgKiB0byB0aGUgT19ESVJFQ1QgcnVsZXMsIHNvIHdlIG5lZWQgdG8gZG8gdGhpcyB0aGUgaGFyZCB3YXkuLi4KKwkgKi8KKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJYWN0dWFsID0gcmVhZChkYXRhLT5kZXYsIGRhdGEtPmJvdW5jZSwgY2hhbm5lbC0+YmxvY2tfc2l6ZSk7CisJCWlmIChhY3R1YWwgIT0gY2hhbm5lbC0+YmxvY2tfc2l6ZSkKKwkJCWdvdG8gc2hvcnRfcmVhZDsKKwkJYWN0dWFsID0gc2l6ZTsKKwkJaWYgKHNpemUgPiBjaGFubmVsLT5ibG9ja19zaXplKQorCQkJYWN0dWFsID0gY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKwkJbWVtY3B5KGJ1ZiwgZGF0YS0+Ym91bmNlLCBhY3R1YWwpOworCQlzaXplIC09IGFjdHVhbDsKKwkJYnVmICs9IGFjdHVhbDsKKwl9CisJcmV0dXJuIDA7CisKK2Vycm9yX291dDoKKwltZW1zZXQoKGNoYXIgKikgYnVmK2FjdHVhbCwgMCwgc2l6ZS1hY3R1YWwpOworCWlmIChjaGFubmVsLT5yZWFkX2Vycm9yKQorCQlyZXR2YWwgPSAoY2hhbm5lbC0+cmVhZF9lcnJvcikoY2hhbm5lbCwgYmxvY2ssIGNvdW50LCBidWYsCisJCQkJCSAgICAgICBzaXplLCBhY3R1YWwsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCByYXdfd3JpdGVfYmxrKGlvX2NoYW5uZWwgY2hhbm5lbCwKKwkJCSAgICAgICBzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKmRhdGEsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJICAgICAgIGludCBjb3VudCwgY29uc3Qgdm9pZCAqYnVmdikKK3sKKwlzc2l6ZV90CQlzaXplOworCWV4dDJfbG9mZl90CWxvY2F0aW9uOworCWludAkJYWN0dWFsID0gMDsKKwllcnJjb2RlX3QJcmV0dmFsOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGJ1ZnY7CisKKwlpZiAoY291bnQgPT0gMSkKKwkJc2l6ZSA9IGNoYW5uZWwtPmJsb2NrX3NpemU7CisJZWxzZSB7CisJCWlmIChjb3VudCA8IDApCisJCQlzaXplID0gLWNvdW50OworCQllbHNlCisJCQlzaXplID0gY291bnQgKiBjaGFubmVsLT5ibG9ja19zaXplOworCX0KKwlkYXRhLT5pb19zdGF0cy5ieXRlc193cml0dGVuICs9IHNpemU7CisKKwlsb2NhdGlvbiA9ICgoZXh0Ml9sb2ZmX3QpIGJsb2NrICogY2hhbm5lbC0+YmxvY2tfc2l6ZSkgKyBkYXRhLT5vZmZzZXQ7CisKKyNpZmRlZiBIQVZFX1BXUklURTY0CisJLyogVHJ5IGFuIGFsaWduZWQgcHdyaXRlICovCisJaWYgKChjaGFubmVsLT5hbGlnbiA9PSAwKSB8fAorCSAgICAoSVNfQUxJR05FRChidWYsIGNoYW5uZWwtPmFsaWduKSAmJgorCSAgICAgSVNfQUxJR05FRChzaXplLCBjaGFubmVsLT5hbGlnbikpKSB7CisJCWFjdHVhbCA9IHB3cml0ZTY0KGRhdGEtPmRldiwgYnVmLCBzaXplLCBsb2NhdGlvbik7CisJCWlmIChhY3R1YWwgPT0gc2l6ZSkKKwkJCXJldHVybiAwOworCX0KKyNlbGlmIEhBVkVfUFdSSVRFCisJLyogVHJ5IGFuIGFsaWduZWQgcHdyaXRlICovCisJaWYgKChzaXplb2Yob2ZmX3QpID49IHNpemVvZihleHQyX2xvZmZfdCkpICYmCisJICAgICgoY2hhbm5lbC0+YWxpZ24gPT0gMCkgfHwKKwkgICAgIChJU19BTElHTkVEKGJ1ZiwgY2hhbm5lbC0+YWxpZ24pICYmCisJICAgICAgSVNfQUxJR05FRChzaXplLCBjaGFubmVsLT5hbGlnbikpKSkgeworCQlhY3R1YWwgPSBwd3JpdGUoZGF0YS0+ZGV2LCBidWYsIHNpemUsIGxvY2F0aW9uKTsKKwkJaWYgKGFjdHVhbCA9PSBzaXplKQorCQkJcmV0dXJuIDA7CisJfQorI2VuZGlmIC8qIEhBVkVfUFdSSVRFICovCisKKwlpZiAoZXh0MmZzX2xsc2VlayhkYXRhLT5kZXYsIGxvY2F0aW9uLCBTRUVLX1NFVCkgIT0gbG9jYXRpb24pIHsKKwkJcmV0dmFsID0gZXJybm8gPyBlcnJubyA6IEVYVDJfRVRfTExTRUVLX0ZBSUxFRDsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJaWYgKChjaGFubmVsLT5hbGlnbiA9PSAwKSB8fAorCSAgICAoSVNfQUxJR05FRChidWYsIGNoYW5uZWwtPmFsaWduKSAmJgorCSAgICAgSVNfQUxJR05FRChzaXplLCBjaGFubmVsLT5hbGlnbikpKSB7CisJCWFjdHVhbCA9IHdyaXRlKGRhdGEtPmRldiwgYnVmLCBzaXplKTsKKwkJaWYgKGFjdHVhbCAhPSBzaXplKSB7CisJCXNob3J0X3dyaXRlOgorCQkJcmV0dmFsID0gRVhUMl9FVF9TSE9SVF9XUklURTsKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQl9CisJCXJldHVybiAwOworCX0KKworI2lmZGVmIEFMSUdOX0RFQlVHCisJcHJpbnRmKCJyYXdfd3JpdGVfYmxrOiBPX0RJUkVDVCBmYWxsYmFjazogJXAgJWx1XG4iLCBidWYsCisJICAgICAgICh1bnNpZ25lZCBsb25nKSBzaXplKTsKKyNlbmRpZgorCS8qCisJICogVGhlIGJ1ZmZlciBvciBzaXplIHdoaWNoIHdlJ3JlIHRyeWluZyB0byB3cml0ZSBpc24ndCBhbGlnbmVkCisJICogdG8gdGhlIE9fRElSRUNUIHJ1bGVzLCBzbyB3ZSBuZWVkIHRvIGRvIHRoaXMgdGhlIGhhcmQgd2F5Li4uCisJICovCisJd2hpbGUgKHNpemUgPiAwKSB7CisJCWlmIChzaXplIDwgY2hhbm5lbC0+YmxvY2tfc2l6ZSkgeworCQkJYWN0dWFsID0gcmVhZChkYXRhLT5kZXYsIGRhdGEtPmJvdW5jZSwKKwkJCQkgICAgICBjaGFubmVsLT5ibG9ja19zaXplKTsKKwkJCWlmIChhY3R1YWwgIT0gY2hhbm5lbC0+YmxvY2tfc2l6ZSkgeworCQkJCXJldHZhbCA9IEVYVDJfRVRfU0hPUlRfUkVBRDsKKwkJCQlnb3RvIGVycm9yX291dDsKKwkJCX0KKwkJfQorCQlhY3R1YWwgPSBzaXplOworCQlpZiAoc2l6ZSA+IGNoYW5uZWwtPmJsb2NrX3NpemUpCisJCQlhY3R1YWwgPSBjaGFubmVsLT5ibG9ja19zaXplOworCQltZW1jcHkoZGF0YS0+Ym91bmNlLCBidWYsIGFjdHVhbCk7CisJCWFjdHVhbCA9IHdyaXRlKGRhdGEtPmRldiwgZGF0YS0+Ym91bmNlLCBjaGFubmVsLT5ibG9ja19zaXplKTsKKwkJaWYgKGFjdHVhbCAhPSBjaGFubmVsLT5ibG9ja19zaXplKQorCQkJZ290byBzaG9ydF93cml0ZTsKKwkJc2l6ZSAtPSBhY3R1YWw7CisJCWJ1ZiArPSBhY3R1YWw7CisJfQorCXJldHVybiAwOworCitlcnJvcl9vdXQ6CisJaWYgKGNoYW5uZWwtPndyaXRlX2Vycm9yKQorCQlyZXR2YWwgPSAoY2hhbm5lbC0+d3JpdGVfZXJyb3IpKGNoYW5uZWwsIGJsb2NrLCBjb3VudCwgYnVmLAorCQkJCQkJc2l6ZSwgYWN0dWFsLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyoKKyAqIEhlcmUgd2UgaW1wbGVtZW50IHRoZSBjYWNoZSBmdW5jdGlvbnMKKyAqLworCisvKiBBbGxvY2F0ZSB0aGUgY2FjaGUgYnVmZmVycyAqLworc3RhdGljIGVycmNvZGVfdCBhbGxvY19jYWNoZShpb19jaGFubmVsIGNoYW5uZWwsCisJCQkgICAgIHN0cnVjdCB1bml4X3ByaXZhdGVfZGF0YSAqZGF0YSkKK3sKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlzdHJ1Y3QgdW5peF9jYWNoZQkqY2FjaGU7CisJaW50CQkJaTsKKworCWRhdGEtPmFjY2Vzc190aW1lID0gMDsKKwlmb3IgKGk9MCwgY2FjaGUgPSBkYXRhLT5jYWNoZTsgaSA8IENBQ0hFX1NJWkU7IGkrKywgY2FjaGUrKykgeworCQljYWNoZS0+YmxvY2sgPSAwOworCQljYWNoZS0+YWNjZXNzX3RpbWUgPSAwOworCQljYWNoZS0+ZGlydHkgPSAwOworCQljYWNoZS0+aW5fdXNlID0gMDsKKwkJaWYgKGNhY2hlLT5idWYpCisJCQlleHQyZnNfZnJlZV9tZW0oJmNhY2hlLT5idWYpOworCQlyZXR2YWwgPSBpb19jaGFubmVsX2FsbG9jX2J1ZihjaGFubmVsLCAwLCAmY2FjaGUtPmJ1Zik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwlpZiAoY2hhbm5lbC0+YWxpZ24pIHsKKwkJaWYgKGRhdGEtPmJvdW5jZSkKKwkJCWV4dDJmc19mcmVlX21lbSgmZGF0YS0+Ym91bmNlKTsKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9hbGxvY19idWYoY2hhbm5lbCwgMCwgJmRhdGEtPmJvdW5jZSk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKKy8qIEZyZWUgdGhlIGNhY2hlIGJ1ZmZlcnMgKi8KK3N0YXRpYyB2b2lkIGZyZWVfY2FjaGUoc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICpkYXRhKQoreworCXN0cnVjdCB1bml4X2NhY2hlCSpjYWNoZTsKKwlpbnQJCQlpOworCisJZGF0YS0+YWNjZXNzX3RpbWUgPSAwOworCWZvciAoaT0wLCBjYWNoZSA9IGRhdGEtPmNhY2hlOyBpIDwgQ0FDSEVfU0laRTsgaSsrLCBjYWNoZSsrKSB7CisJCWNhY2hlLT5ibG9jayA9IDA7CisJCWNhY2hlLT5hY2Nlc3NfdGltZSA9IDA7CisJCWNhY2hlLT5kaXJ0eSA9IDA7CisJCWNhY2hlLT5pbl91c2UgPSAwOworCQlpZiAoY2FjaGUtPmJ1ZikKKwkJCWV4dDJmc19mcmVlX21lbSgmY2FjaGUtPmJ1Zik7CisJfQorCWlmIChkYXRhLT5ib3VuY2UpCisJCWV4dDJmc19mcmVlX21lbSgmZGF0YS0+Ym91bmNlKTsKK30KKworI2lmbmRlZiBOT19JT19DQUNIRQorLyoKKyAqIFRyeSB0byBmaW5kIGEgYmxvY2sgaW4gdGhlIGNhY2hlLiAgSWYgdGhlIGJsb2NrIGlzIG5vdCBmb3VuZCwgYW5kCisgKiBlbGRlc3QgaXMgYSBub24temVybyBwb2ludGVyLCB0aGVuIGZpbGwgaW4gZWxkZXN0IHdpdGggdGhlIGNhY2hlCisgKiBlbnRyeSB0byB0aGF0IHNob3VsZCBiZSByZXVzZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdW5peF9jYWNoZSAqZmluZF9jYWNoZWRfYmxvY2soc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICpkYXRhLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJCQkgICAgc3RydWN0IHVuaXhfY2FjaGUgKiplbGRlc3QpCit7CisJc3RydWN0IHVuaXhfY2FjaGUJKmNhY2hlLCAqdW51c2VkX2NhY2hlLCAqb2xkZXN0X2NhY2hlOworCWludAkJCWk7CisKKwl1bnVzZWRfY2FjaGUgPSBvbGRlc3RfY2FjaGUgPSAwOworCWZvciAoaT0wLCBjYWNoZSA9IGRhdGEtPmNhY2hlOyBpIDwgQ0FDSEVfU0laRTsgaSsrLCBjYWNoZSsrKSB7CisJCWlmICghY2FjaGUtPmluX3VzZSkgeworCQkJaWYgKCF1bnVzZWRfY2FjaGUpCisJCQkJdW51c2VkX2NhY2hlID0gY2FjaGU7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY2FjaGUtPmJsb2NrID09IGJsb2NrKSB7CisJCQljYWNoZS0+YWNjZXNzX3RpbWUgPSArK2RhdGEtPmFjY2Vzc190aW1lOworCQkJcmV0dXJuIGNhY2hlOworCQl9CisJCWlmICghb2xkZXN0X2NhY2hlIHx8CisJCSAgICAoY2FjaGUtPmFjY2Vzc190aW1lIDwgb2xkZXN0X2NhY2hlLT5hY2Nlc3NfdGltZSkpCisJCQlvbGRlc3RfY2FjaGUgPSBjYWNoZTsKKwl9CisJaWYgKGVsZGVzdCkKKwkJKmVsZGVzdCA9ICh1bnVzZWRfY2FjaGUpID8gdW51c2VkX2NhY2hlIDogb2xkZXN0X2NhY2hlOworCXJldHVybiAwOworfQorCisvKgorICogUmV1c2UgYSBwYXJ0aWN1bGFyIGNhY2hlIGVudHJ5IGZvciBhbm90aGVyIGJsb2NrLgorICovCitzdGF0aWMgdm9pZCByZXVzZV9jYWNoZShpb19jaGFubmVsIGNoYW5uZWwsIHN0cnVjdCB1bml4X3ByaXZhdGVfZGF0YSAqZGF0YSwKKwkJIHN0cnVjdCB1bml4X2NhY2hlICpjYWNoZSwgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrKQoreworCWlmIChjYWNoZS0+ZGlydHkgJiYgY2FjaGUtPmluX3VzZSkKKwkJcmF3X3dyaXRlX2JsayhjaGFubmVsLCBkYXRhLCBjYWNoZS0+YmxvY2ssIDEsIGNhY2hlLT5idWYpOworCisJY2FjaGUtPmluX3VzZSA9IDE7CisJY2FjaGUtPmRpcnR5ID0gMDsKKwljYWNoZS0+YmxvY2sgPSBibG9jazsKKwljYWNoZS0+YWNjZXNzX3RpbWUgPSArK2RhdGEtPmFjY2Vzc190aW1lOworfQorCisvKgorICogRmx1c2ggYWxsIG9mIHRoZSBibG9ja3MgaW4gdGhlIGNhY2hlCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgZmx1c2hfY2FjaGVkX2Jsb2Nrcyhpb19jaGFubmVsIGNoYW5uZWwsCisJCQkJICAgICBzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKmRhdGEsCisJCQkJICAgICBpbnQgaW52YWxpZGF0ZSkKKworeworCXN0cnVjdCB1bml4X2NhY2hlCSpjYWNoZTsKKwllcnJjb2RlX3QJCXJldHZhbCwgcmV0dmFsMjsKKwlpbnQJCQlpOworCisJcmV0dmFsMiA9IDA7CisJZm9yIChpPTAsIGNhY2hlID0gZGF0YS0+Y2FjaGU7IGkgPCBDQUNIRV9TSVpFOyBpKyssIGNhY2hlKyspIHsKKwkJaWYgKCFjYWNoZS0+aW5fdXNlKQorCQkJY29udGludWU7CisKKwkJaWYgKGludmFsaWRhdGUpCisJCQljYWNoZS0+aW5fdXNlID0gMDsKKworCQlpZiAoIWNhY2hlLT5kaXJ0eSkKKwkJCWNvbnRpbnVlOworCisJCXJldHZhbCA9IHJhd193cml0ZV9ibGsoY2hhbm5lbCwgZGF0YSwKKwkJCQkgICAgICAgY2FjaGUtPmJsb2NrLCAxLCBjYWNoZS0+YnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHZhbDIgPSByZXR2YWw7CisJCWVsc2UKKwkJCWNhY2hlLT5kaXJ0eSA9IDA7CisJfQorCXJldHVybiByZXR2YWwyOworfQorI2VuZGlmIC8qIE5PX0lPX0NBQ0hFICovCisKKyNpZmRlZiBfX2xpbnV4X18KKyNpZm5kZWYgQkxLRElTQ0FSRFpFUk9FUworI2RlZmluZSBCTEtESVNDQVJEWkVST0VTIF9JTygweDEyLDEyNCkKKyNlbmRpZgorI2VuZGlmCisKK2ludCBleHQyZnNfb3Blbl9maWxlKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlKQoreworCWlmIChtb2RlKQorI2lmIGRlZmluZWQoSEFWRV9PUEVONjQpICYmICFkZWZpbmVkKF9fT1NYX0FWQUlMQUJMRV9CVVRfREVQUkVDQVRFRCkKKwkJcmV0dXJuIG9wZW42NChwYXRobmFtZSwgZmxhZ3MsIG1vZGUpOworCWVsc2UKKwkJcmV0dXJuIG9wZW42NChwYXRobmFtZSwgZmxhZ3MpOworI2Vsc2UKKwkJcmV0dXJuIG9wZW4ocGF0aG5hbWUsIGZsYWdzLCBtb2RlKTsKKwllbHNlCisJCXJldHVybiBvcGVuKHBhdGhuYW1lLCBmbGFncyk7CisjZW5kaWYKK30KKworaW50IGV4dDJmc19zdGF0KGNvbnN0IGNoYXIgKnBhdGgsIGV4dDJmc19zdHJ1Y3Rfc3RhdCAqYnVmKQoreworI2lmIGRlZmluZWQoSEFWRV9GU1RBVDY0KSAmJiAhZGVmaW5lZChfX09TWF9BVkFJTEFCTEVfQlVUX0RFUFJFQ0FURUQpCisJcmV0dXJuIHN0YXQ2NChwYXRoLCBidWYpOworI2Vsc2UKKwlyZXR1cm4gc3RhdChwYXRoLCBidWYpOworI2VuZGlmCit9CisKK2ludCBleHQyZnNfZnN0YXQoaW50IGZkLCBleHQyZnNfc3RydWN0X3N0YXQgKmJ1ZikKK3sKKyNpZiBkZWZpbmVkKEhBVkVfRlNUQVQ2NCkgJiYgIWRlZmluZWQoX19PU1hfQVZBSUxBQkxFX0JVVF9ERVBSRUNBVEVEKQorCXJldHVybiBmc3RhdDY0KGZkLCBidWYpOworI2Vsc2UKKwlyZXR1cm4gZnN0YXQoZmQsIGJ1Zik7CisjZW5kaWYKK30KKworc3RhdGljIGVycmNvZGVfdCB1bml4X29wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLCBpb19jaGFubmVsICpjaGFubmVsKQoreworCWlvX2NoYW5uZWwJaW8gPSBOVUxMOworCXN0cnVjdCB1bml4X3ByaXZhdGVfZGF0YSAqZGF0YSA9IE5VTEw7CisJZXJyY29kZV90CXJldHZhbDsKKwlpbnQJCW9wZW5fZmxhZ3M7CisJaW50CQlmX25vY2FjaGUgPSAwOworCWV4dDJmc19zdHJ1Y3Rfc3RhdCBzdDsKKyNpZmRlZiBfX2xpbnV4X18KKwlzdHJ1Y3QJCXV0c25hbWUgdXQ7CisjZW5kaWYKKworCWlmIChuYW1lID09IDApCisJCXJldHVybiBFWFQyX0VUX0JBRF9ERVZJQ0VfTkFNRTsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IHN0cnVjdF9pb19jaGFubmVsKSwgJmlvKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisJbWVtc2V0KGlvLCAwLCBzaXplb2Yoc3RydWN0IHN0cnVjdF9pb19jaGFubmVsKSk7CisJaW8tPm1hZ2ljID0gRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEpLCAmZGF0YSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJaW8tPm1hbmFnZXIgPSB1bml4X2lvX21hbmFnZXI7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc3RybGVuKG5hbWUpKzEsICZpby0+bmFtZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJc3RyY3B5KGlvLT5uYW1lLCBuYW1lKTsKKwlpby0+cHJpdmF0ZV9kYXRhID0gZGF0YTsKKwlpby0+YmxvY2tfc2l6ZSA9IDEwMjQ7CisJaW8tPnJlYWRfZXJyb3IgPSAwOworCWlvLT53cml0ZV9lcnJvciA9IDA7CisJaW8tPnJlZmNvdW50ID0gMTsKKworCW1lbXNldChkYXRhLCAwLCBzaXplb2Yoc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhKSk7CisJZGF0YS0+bWFnaWMgPSBFWFQyX0VUX01BR0lDX1VOSVhfSU9fQ0hBTk5FTDsKKwlkYXRhLT5pb19zdGF0cy5udW1fZmllbGRzID0gMjsKKwlkYXRhLT5kZXYgPSAtMTsKKworCW9wZW5fZmxhZ3MgPSAoZmxhZ3MgJiBJT19GTEFHX1JXKSA/IE9fUkRXUiA6IE9fUkRPTkxZOworCWlmIChmbGFncyAmIElPX0ZMQUdfRVhDTFVTSVZFKQorCQlvcGVuX2ZsYWdzIHw9IE9fRVhDTDsKKyNpZiBkZWZpbmVkKE9fRElSRUNUKQorCWlmIChmbGFncyAmIElPX0ZMQUdfRElSRUNUX0lPKSB7CisJCW9wZW5fZmxhZ3MgfD0gT19ESVJFQ1Q7CisJCWlvLT5hbGlnbiA9IGV4dDJmc19nZXRfZGlvX2FsaWdubWVudChkYXRhLT5kZXYpOworCX0KKyNlbGlmIGRlZmluZWQoRl9OT0NBQ0hFKQorCWlmIChmbGFncyAmIElPX0ZMQUdfRElSRUNUX0lPKSB7CisJCWZfbm9jYWNoZSA9IEZfTk9DQUNIRTsKKwkJaW8tPmFsaWduID0gNDA5NjsKKwl9CisjZW5kaWYKKwlkYXRhLT5mbGFncyA9IGZsYWdzOworCisJZGF0YS0+ZGV2ID0gZXh0MmZzX29wZW5fZmlsZShpby0+bmFtZSwgb3Blbl9mbGFncywgMCk7CisJaWYgKGRhdGEtPmRldiA8IDApIHsKKwkJcmV0dmFsID0gZXJybm87CisJCWdvdG8gY2xlYW51cDsKKwl9CisJaWYgKGZfbm9jYWNoZSkgeworCQlpZiAoZmNudGwoZGF0YS0+ZGV2LCBmX25vY2FjaGUsIDEpIDwgMCkgeworCQkJcmV0dmFsID0gZXJybm87CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHRoZSBkZXZpY2UgaXMgcmVhbGx5IGEgYmxvY2sgZGV2aWNlLCB0aGVuIHNldCB0aGUKKwkgKiBhcHByb3ByaWF0ZSBmbGFnLCBvdGhlcndpc2Ugd2UgY2FuIHNldCBESVNDQVJEX1pFUk9FUyBmbGFnCisJICogYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8gdXNlIHB1bmNoIGhvbGUgaW5zdGVhZCBvZiBkaXNjYXJkCisJICogYW5kIGlmIGl0IHN1Y2NlZWQsIHN1YnNlcXVlbnQgcmVhZCBmcm9tIHNwYXJzZSBhcmVhIHJldHVybnMKKwkgKiB6ZXJvLgorCSAqLworCWlmIChleHQyZnNfc3RhdChpby0+bmFtZSwgJnN0KSA9PSAwKSB7CisJCWlmIChTX0lTQkxLKHN0LnN0X21vZGUpKQorCQkJaW8tPmZsYWdzIHw9IENIQU5ORUxfRkxBR1NfQkxPQ0tfREVWSUNFOworCQllbHNlCisJCQlpby0+ZmxhZ3MgfD0gQ0hBTk5FTF9GTEFHU19ESVNDQVJEX1pFUk9FUzsKKwl9CisKKyNpZmRlZiBCTEtESVNDQVJEWkVST0VTCisJeworCQlpbnQgemVyb2VzID0gMDsKKwkJaWYgKGlvY3RsKGRhdGEtPmRldiwgQkxLRElTQ0FSRFpFUk9FUywgJnplcm9lcykgPT0gMCAmJgorCQkgICAgemVyb2VzKQorCQkJaW8tPmZsYWdzIHw9IENIQU5ORUxfRkxBR1NfRElTQ0FSRF9aRVJPRVM7CisJfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX2tlcm5lbF9fKQorCS8qCisJICogU29tZSBvcGVyYXRpbmcgc3lzdGVtcyByZXF1aXJlIHRoYXQgdGhlIGJ1ZmZlcnMgYmUgYWxpZ25lZCwKKwkgKiByZWdhcmRsZXNzIG9mIE9fRElSRUNUCisJICovCisJaWYgKCFpby0+YWxpZ24pCisJCWlvLT5hbGlnbiA9IDUxMjsKKyNlbmRpZgorCisKKwlpZiAoKHJldHZhbCA9IGFsbG9jX2NhY2hlKGlvLCBkYXRhKSkpCisJCWdvdG8gY2xlYW51cDsKKworI2lmZGVmIEJMS1JPR0VUCisJaWYgKGZsYWdzICYgSU9fRkxBR19SVykgeworCQlpbnQgZXJyb3I7CisJCWludCByZWFkb25seSA9IDA7CisKKwkJLyogSXMgdGhlIGJsb2NrIGRldmljZSBhY3R1YWxseSB3cml0YWJsZT8gKi8KKwkJZXJyb3IgPSBpb2N0bChkYXRhLT5kZXYsIEJMS1JPR0VULCAmcmVhZG9ubHkpOworCQlpZiAoIWVycm9yICYmIHJlYWRvbmx5KSB7CisJCQlyZXR2YWwgPSBFUEVSTTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0KKyNlbmRpZgorCisjaWZkZWYgX19saW51eF9fCisjdW5kZWYgUkxJTV9JTkZJTklUWQorI2lmIChkZWZpbmVkKF9fYWxwaGFfXykgfHwgKChkZWZpbmVkKF9fc3BhcmNfXykgfHwgZGVmaW5lZChfX21pcHNfXykpICYmIChTSVpFT0ZfTE9ORyA9PSA0KSkpCisjZGVmaW5lIFJMSU1fSU5GSU5JVFkJKCh1bnNpZ25lZCBsb25nKSh+MFVMPj4xKSkKKyNlbHNlCisjZGVmaW5lIFJMSU1fSU5GSU5JVFkgICh+MFVMKQorI2VuZGlmCisJLyoKKwkgKiBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiAyLjQuMTAtMi40LjE4IGtlcm5lbHMgd2hlcmUgd3JpdGVzIHRvCisJICogYmxvY2sgZGV2aWNlcyBhcmUgd3JvbmdseSBnZXR0aW5nIGhpdCBieSB0aGUgZmlsZXNpemUKKwkgKiBsaW1pdC4gIFRoaXMgd29ya2Fyb3VuZCBpc24ndCBwZXJmZWN0LCBzaW5jZSBpdCB3b24ndCB3b3JrCisJICogaWYgZ2xpYmMgd2Fzbid0IGJ1aWx0IGFnYWluc3QgMi4yIGhlYWRlciBmaWxlcy4gIChTaWdoLikKKwkgKgorCSAqLworCWlmICgoZmxhZ3MgJiBJT19GTEFHX1JXKSAmJgorCSAgICAodW5hbWUoJnV0KSA9PSAwKSAmJgorCSAgICAoKHV0LnJlbGVhc2VbMF0gPT0gJzInKSAmJiAodXQucmVsZWFzZVsxXSA9PSAnLicpICYmCisJICAgICAodXQucmVsZWFzZVsyXSA9PSAnNCcpICYmICh1dC5yZWxlYXNlWzNdID09ICcuJykgJiYKKwkgICAgICh1dC5yZWxlYXNlWzRdID09ICcxJykgJiYgKHV0LnJlbGVhc2VbNV0gPj0gJzAnKSAmJgorCSAgICAgKHV0LnJlbGVhc2VbNV0gPCAnOCcpKSAmJgorCSAgICAoZXh0MmZzX3N0YXQoaW8tPm5hbWUsICZzdCkgPT0gMCkgJiYKKwkgICAgKFNfSVNCTEsoc3Quc3RfbW9kZSkpKSB7CisJCXN0cnVjdCBybGltaXQJcmxpbTsKKworCQlybGltLnJsaW1fY3VyID0gcmxpbS5ybGltX21heCA9ICh1bnNpZ25lZCBsb25nKSBSTElNX0lORklOSVRZOworCQlzZXRybGltaXQoUkxJTUlUX0ZTSVpFLCAmcmxpbSk7CisJCWdldHJsaW1pdChSTElNSVRfRlNJWkUsICZybGltKTsKKwkJaWYgKCgodW5zaWduZWQgbG9uZykgcmxpbS5ybGltX2N1cikgPAorCQkgICAgKCh1bnNpZ25lZCBsb25nKSBybGltLnJsaW1fbWF4KSkgeworCQkJcmxpbS5ybGltX2N1ciA9IHJsaW0ucmxpbV9tYXg7CisJCQlzZXRybGltaXQoUkxJTUlUX0ZTSVpFLCAmcmxpbSk7CisJCX0KKwl9CisjZW5kaWYKKwkqY2hhbm5lbCA9IGlvOworCXJldHVybiAwOworCitjbGVhbnVwOgorCWlmIChkYXRhKSB7CisJCWlmIChkYXRhLT5kZXYgPj0gMCkKKwkJCWNsb3NlKGRhdGEtPmRldik7CisJCWZyZWVfY2FjaGUoZGF0YSk7CisJCWV4dDJmc19mcmVlX21lbSgmZGF0YSk7CisJfQorCWlmIChpbykgeworCQlpZiAoaW8tPm5hbWUpIHsKKwkJCWV4dDJmc19mcmVlX21lbSgmaW8tPm5hbWUpOworCQl9CisJCWV4dDJmc19mcmVlX21lbSgmaW8pOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHVuaXhfY2xvc2UoaW9fY2hhbm5lbCBjaGFubmVsKQoreworCXN0cnVjdCB1bml4X3ByaXZhdGVfZGF0YSAqZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlkYXRhID0gKHN0cnVjdCB1bml4X3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX1VOSVhfSU9fQ0hBTk5FTCk7CisKKwlpZiAoLS1jaGFubmVsLT5yZWZjb3VudCA+IDApCisJCXJldHVybiAwOworCisjaWZuZGVmIE5PX0lPX0NBQ0hFCisJcmV0dmFsID0gZmx1c2hfY2FjaGVkX2Jsb2NrcyhjaGFubmVsLCBkYXRhLCAwKTsKKyNlbmRpZgorCisJaWYgKGNsb3NlKGRhdGEtPmRldikgPCAwKQorCQlyZXR2YWwgPSBlcnJubzsKKwlmcmVlX2NhY2hlKGRhdGEpOworCisJZXh0MmZzX2ZyZWVfbWVtKCZjaGFubmVsLT5wcml2YXRlX2RhdGEpOworCWlmIChjaGFubmVsLT5uYW1lKQorCQlleHQyZnNfZnJlZV9tZW0oJmNoYW5uZWwtPm5hbWUpOworCWV4dDJmc19mcmVlX21lbSgmY2hhbm5lbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCB1bml4X3NldF9ibGtzaXplKGlvX2NoYW5uZWwgY2hhbm5lbCwgaW50IGJsa3NpemUpCit7CisJc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdAkJcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworCWlmIChjaGFubmVsLT5ibG9ja19zaXplICE9IGJsa3NpemUpIHsKKyNpZm5kZWYgTk9fSU9fQ0FDSEUKKwkJaWYgKChyZXR2YWwgPSBmbHVzaF9jYWNoZWRfYmxvY2tzKGNoYW5uZWwsIGRhdGEsIDApKSkKKwkJCXJldHVybiByZXR2YWw7CisjZW5kaWYKKworCQljaGFubmVsLT5ibG9ja19zaXplID0gYmxrc2l6ZTsKKwkJZnJlZV9jYWNoZShkYXRhKTsKKwkJaWYgKChyZXR2YWwgPSBhbGxvY19jYWNoZShjaGFubmVsLCBkYXRhKSkpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgZXJyY29kZV90IHVuaXhfcmVhZF9ibGs2NChpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCSAgICAgICBpbnQgY291bnQsIHZvaWQgKmJ1ZikKK3sKKwlzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKmRhdGE7CisJc3RydWN0IHVuaXhfY2FjaGUgKmNhY2hlLCAqcmV1c2VbUkVBRF9ESVJFQ1RfU0laRV07CisJZXJyY29kZV90CXJldHZhbDsKKwljaGFyCQkqY3A7CisJaW50CQlpLCBqOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworI2lmZGVmIE5PX0lPX0NBQ0hFCisJcmV0dXJuIHJhd19yZWFkX2JsayhjaGFubmVsLCBkYXRhLCBibG9jaywgY291bnQsIGJ1Zik7CisjZWxzZQorCS8qCisJICogSWYgd2UncmUgZG9pbmcgYW4gb2RkLXNpemVkIHJlYWQgb3IgYSB2ZXJ5IGxhcmdlIHJlYWQsCisJICogZmx1c2ggb3V0IHRoZSBjYWNoZSBhbmQgdGhlbiBkbyBhIGRpcmVjdCByZWFkLgorCSAqLworCWlmIChjb3VudCA8IDAgfHwgY291bnQgPiBXUklURV9ESVJFQ1RfU0laRSkgeworCQlpZiAoKHJldHZhbCA9IGZsdXNoX2NhY2hlZF9ibG9ja3MoY2hhbm5lbCwgZGF0YSwgMCkpKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJcmV0dXJuIHJhd19yZWFkX2JsayhjaGFubmVsLCBkYXRhLCBibG9jaywgY291bnQsIGJ1Zik7CisJfQorCisJY3AgPSBidWY7CisJd2hpbGUgKGNvdW50ID4gMCkgeworCQkvKiBJZiBpdCdzIGluIHRoZSBjYWNoZSwgdXNlIGl0ISAqLworCQlpZiAoKGNhY2hlID0gZmluZF9jYWNoZWRfYmxvY2soZGF0YSwgYmxvY2ssICZyZXVzZVswXSkpKSB7CisjaWZkZWYgREVCVUcKKwkJCXByaW50ZigiVXNpbmcgY2FjaGVkIGJsb2NrICVsdVxuIiwgYmxvY2spOworI2VuZGlmCisJCQltZW1jcHkoY3AsIGNhY2hlLT5idWYsIGNoYW5uZWwtPmJsb2NrX3NpemUpOworCQkJY291bnQtLTsKKwkJCWJsb2NrKys7CisJCQljcCArPSBjaGFubmVsLT5ibG9ja19zaXplOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGNvdW50ID09IDEpIHsKKwkJCS8qCisJCQkgKiBTcGVjaWFsIGNhc2Ugd2hlcmUgd2UgcmVhZCBkaXJlY3RseSBpbnRvIHRoZQorCQkJICogY2FjaGUgYnVmZmVyOyBpbXBvcnRhbnQgaW4gdGhlIE9fRElSRUNUIGNhc2UKKwkJCSAqLworCQkJY2FjaGUgPSByZXVzZVswXTsKKwkJCXJldXNlX2NhY2hlKGNoYW5uZWwsIGRhdGEsIGNhY2hlLCBibG9jayk7CisJCQlpZiAoKHJldHZhbCA9IHJhd19yZWFkX2JsayhjaGFubmVsLCBkYXRhLCBibG9jaywgMSwKKwkJCQkJCSAgIGNhY2hlLT5idWYpKSkgeworCQkJCWNhY2hlLT5pbl91c2UgPSAwOworCQkJCXJldHVybiByZXR2YWw7CisJCQl9CisJCQltZW1jcHkoY3AsIGNhY2hlLT5idWYsIGNoYW5uZWwtPmJsb2NrX3NpemUpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKgorCQkgKiBGaW5kIHRoZSBudW1iZXIgb2YgdW5jYWNoZWQgYmxvY2tzIHNvIHdlIGNhbiBkbyBhCisJCSAqIHNpbmdsZSByZWFkIHJlcXVlc3QKKwkJICovCisJCWZvciAoaT0xOyBpIDwgY291bnQ7IGkrKykKKwkJCWlmIChmaW5kX2NhY2hlZF9ibG9jayhkYXRhLCBibG9jaytpLCAmcmV1c2VbaV0pKQorCQkJCWJyZWFrOworI2lmZGVmIERFQlVHCisJCXByaW50ZigiUmVhZGluZyAlZCBibG9ja3Mgc3RhcnRpbmcgYXQgJWx1XG4iLCBpLCBibG9jayk7CisjZW5kaWYKKwkJaWYgKChyZXR2YWwgPSByYXdfcmVhZF9ibGsoY2hhbm5lbCwgZGF0YSwgYmxvY2ssIGksIGNwKSkpCisJCQlyZXR1cm4gcmV0dmFsOworCisJCS8qIFNhdmUgdGhlIHJlc3VsdHMgaW4gdGhlIGNhY2hlICovCisJCWZvciAoaj0wOyBqIDwgaTsgaisrKSB7CisJCQljb3VudC0tOworCQkJY2FjaGUgPSByZXVzZVtqXTsKKwkJCXJldXNlX2NhY2hlKGNoYW5uZWwsIGRhdGEsIGNhY2hlLCBibG9jaysrKTsKKwkJCW1lbWNweShjYWNoZS0+YnVmLCBjcCwgY2hhbm5lbC0+YmxvY2tfc2l6ZSk7CisJCQljcCArPSBjaGFubmVsLT5ibG9ja19zaXplOworCQl9CisJfQorCXJldHVybiAwOworI2VuZGlmIC8qIE5PX0lPX0NBQ0hFICovCit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdW5peF9yZWFkX2Jsayhpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisJCQkgICAgICAgaW50IGNvdW50LCB2b2lkICpidWYpCit7CisJcmV0dXJuIHVuaXhfcmVhZF9ibGs2NChjaGFubmVsLCBibG9jaywgY291bnQsIGJ1Zik7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdW5peF93cml0ZV9ibGs2NChpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCQlpbnQgY291bnQsIGNvbnN0IHZvaWQgKmJ1ZikKK3sKKwlzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKmRhdGE7CisJc3RydWN0IHVuaXhfY2FjaGUgKmNhY2hlLCAqcmV1c2U7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisJY29uc3QgY2hhcgkqY3A7CisJaW50CQl3cml0ZXRocm91Z2g7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19VTklYX0lPX0NIQU5ORUwpOworCisjaWZkZWYgTk9fSU9fQ0FDSEUKKwlyZXR1cm4gcmF3X3dyaXRlX2JsayhjaGFubmVsLCBkYXRhLCBibG9jaywgY291bnQsIGJ1Zik7CisjZWxzZQorCS8qCisJICogSWYgd2UncmUgZG9pbmcgYW4gb2RkLXNpemVkIHdyaXRlIG9yIGEgdmVyeSBsYXJnZSB3cml0ZSwKKwkgKiBmbHVzaCBvdXQgdGhlIGNhY2hlIGNvbXBsZXRlbHkgYW5kIHRoZW4gZG8gYSBkaXJlY3Qgd3JpdGUuCisJICovCisJaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+IFdSSVRFX0RJUkVDVF9TSVpFKSB7CisJCWlmICgocmV0dmFsID0gZmx1c2hfY2FjaGVkX2Jsb2NrcyhjaGFubmVsLCBkYXRhLCAxKSkpCisJCQlyZXR1cm4gcmV0dmFsOworCQlyZXR1cm4gcmF3X3dyaXRlX2JsayhjaGFubmVsLCBkYXRhLCBibG9jaywgY291bnQsIGJ1Zik7CisJfQorCisJLyoKKwkgKiBGb3IgYSBtb2RlcmF0ZS1zaXplZCBtdWx0aS1ibG9jayB3cml0ZSwgZmlyc3QgZm9yY2UgYSB3cml0ZQorCSAqIGlmIHdlJ3JlIGluIHdyaXRlLXRocm91Z2ggY2FjaGUgbW9kZSwgYW5kIHRoZW4gZmlsbCB0aGUKKwkgKiBjYWNoZSB3aXRoIHRoZSBibG9ja3MuCisJICovCisJd3JpdGV0aHJvdWdoID0gY2hhbm5lbC0+ZmxhZ3MgJiBDSEFOTkVMX0ZMQUdTX1dSSVRFVEhST1VHSDsKKwlpZiAod3JpdGV0aHJvdWdoKQorCQlyZXR2YWwgPSByYXdfd3JpdGVfYmxrKGNoYW5uZWwsIGRhdGEsIGJsb2NrLCBjb3VudCwgYnVmKTsKKworCWNwID0gYnVmOworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJY2FjaGUgPSBmaW5kX2NhY2hlZF9ibG9jayhkYXRhLCBibG9jaywgJnJldXNlKTsKKwkJaWYgKCFjYWNoZSkgeworCQkJY2FjaGUgPSByZXVzZTsKKwkJCXJldXNlX2NhY2hlKGNoYW5uZWwsIGRhdGEsIGNhY2hlLCBibG9jayk7CisJCX0KKwkJaWYgKGNhY2hlLT5idWYgIT0gY3ApCisJCQltZW1jcHkoY2FjaGUtPmJ1ZiwgY3AsIGNoYW5uZWwtPmJsb2NrX3NpemUpOworCQljYWNoZS0+ZGlydHkgPSAhd3JpdGV0aHJvdWdoOworCQljb3VudC0tOworCQlibG9jaysrOworCQljcCArPSBjaGFubmVsLT5ibG9ja19zaXplOworCX0KKwlyZXR1cm4gcmV0dmFsOworI2VuZGlmIC8qIE5PX0lPX0NBQ0hFICovCit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdW5peF93cml0ZV9ibGsoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJCWludCBjb3VudCwgY29uc3Qgdm9pZCAqYnVmKQoreworCXJldHVybiB1bml4X3dyaXRlX2JsazY0KGNoYW5uZWwsIGJsb2NrLCBjb3VudCwgYnVmKTsKK30KKworc3RhdGljIGVycmNvZGVfdCB1bml4X3dyaXRlX2J5dGUoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgaW50IHNpemUsIGNvbnN0IHZvaWQgKmJ1ZikKK3sKKwlzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKmRhdGE7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisJc3NpemVfdAkJYWN0dWFsOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworCWlmIChjaGFubmVsLT5hbGlnbiAhPSAwKSB7CisjaWZkZWYgQUxJR05fREVCVUcKKwkJcHJpbnRmKCJ1bml4X3dyaXRlX2J5dGU6IE9fRElSRUNUIGZhbGxiYWNrXG4iKTsKKyNlbmRpZgorCQlyZXR1cm4gRVhUMl9FVF9VTklNUExFTUVOVEVEOworCX0KKworI2lmbmRlZiBOT19JT19DQUNIRQorCS8qCisJICogRmx1c2ggb3V0IHRoZSBjYWNoZSBjb21wbGV0ZWx5CisJICovCisJaWYgKChyZXR2YWwgPSBmbHVzaF9jYWNoZWRfYmxvY2tzKGNoYW5uZWwsIGRhdGEsIDEpKSkKKwkJcmV0dXJuIHJldHZhbDsKKyNlbmRpZgorCisJaWYgKGxzZWVrKGRhdGEtPmRldiwgb2Zmc2V0ICsgZGF0YS0+b2Zmc2V0LCBTRUVLX1NFVCkgPCAwKQorCQlyZXR1cm4gZXJybm87CisKKwlhY3R1YWwgPSB3cml0ZShkYXRhLT5kZXYsIGJ1Ziwgc2l6ZSk7CisJaWYgKGFjdHVhbCAhPSBzaXplKQorCQlyZXR1cm4gRVhUMl9FVF9TSE9SVF9XUklURTsKKworCXJldHVybiAwOworfQorCisvKgorICogRmx1c2ggZGF0YSBidWZmZXJzIHRvIGRpc2suCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgdW5peF9mbHVzaChpb19jaGFubmVsIGNoYW5uZWwpCit7CisJc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdCByZXR2YWwgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworI2lmbmRlZiBOT19JT19DQUNIRQorCXJldHZhbCA9IGZsdXNoX2NhY2hlZF9ibG9ja3MoY2hhbm5lbCwgZGF0YSwgMCk7CisjZW5kaWYKKwlmc3luYyhkYXRhLT5kZXYpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdW5peF9zZXRfb3B0aW9uKGlvX2NoYW5uZWwgY2hhbm5lbCwgY29uc3QgY2hhciAqb3B0aW9uLAorCQkJCSBjb25zdCBjaGFyICphcmcpCit7CisJc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICpkYXRhOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CisJY2hhciAqZW5kOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworCWlmICghc3RyY21wKG9wdGlvbiwgIm9mZnNldCIpKSB7CisJCWlmICghYXJnKQorCQkJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKworCQl0bXAgPSBzdHJ0b3VsbChhcmcsICZlbmQsIDApOworCQlpZiAoKmVuZCkKKwkJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJCWRhdGEtPm9mZnNldCA9IHRtcDsKKwkJaWYgKGRhdGEtPm9mZnNldCA8IDApCisJCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKK30KKworI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiAhZGVmaW5lZChCTEtESVNDQVJEKQorI2RlZmluZSBCTEtESVNDQVJECQlfSU8oMHgxMiwxMTkpCisjZW5kaWYKKworc3RhdGljIGVycmNvZGVfdCB1bml4X2Rpc2NhcmQoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgY291bnQpCit7CisJc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICpkYXRhOworCWludAkJcmV0OworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworCWlmIChjaGFubmVsLT5mbGFncyAmIENIQU5ORUxfRkxBR1NfQkxPQ0tfREVWSUNFKSB7CisjaWZkZWYgQkxLRElTQ0FSRAorCQlfX3U2NCByYW5nZVsyXTsKKworCQlyYW5nZVswXSA9IChfX3U2NCkoYmxvY2spICogY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKwkJcmFuZ2VbMV0gPSAoX191NjQpKGNvdW50KSAqIGNoYW5uZWwtPmJsb2NrX3NpemU7CisKKwkJcmV0ID0gaW9jdGwoZGF0YS0+ZGV2LCBCTEtESVNDQVJELCAmcmFuZ2UpOworI2Vsc2UKKwkJZ290byB1bmltcGxlbWVudGVkOworI2VuZGlmCisJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKEhBVkVfRkFMTE9DQVRFKSAmJiBkZWZpbmVkKEZBTExPQ19GTF9QVU5DSF9IT0xFKQorCQkvKgorCQkgKiBJZiB3ZSBhcmUgbm90IG9uIGJsb2NrIGRldmljZSwgdHJ5IHRvIHVzZSBwdW5jaCBob2xlCisJCSAqIHRvIHJlY2xhaW0gZnJlZSBzcGFjZS4KKwkJICovCisJCXJldCA9IGZhbGxvY2F0ZShkYXRhLT5kZXYsCisJCQkJRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLAorCQkJCShvZmZfdCkoYmxvY2spICogY2hhbm5lbC0+YmxvY2tfc2l6ZSwKKwkJCQkob2ZmX3QpKGNvdW50KSAqIGNoYW5uZWwtPmJsb2NrX3NpemUpOworI2Vsc2UKKwkJZ290byB1bmltcGxlbWVudGVkOworI2VuZGlmCisJfQorCWlmIChyZXQgPCAwKSB7CisJCWlmIChlcnJubyA9PSBFT1BOT1RTVVBQKQorCQkJZ290byB1bmltcGxlbWVudGVkOworCQlyZXR1cm4gZXJybm87CisJfQorCXJldHVybiAwOwordW5pbXBsZW1lbnRlZDoKKwlyZXR1cm4gRVhUMl9FVF9VTklNUExFTUVOVEVEOworfQorCitzdGF0aWMgc3RydWN0IHN0cnVjdF9pb19tYW5hZ2VyIHN0cnVjdF91bml4X21hbmFnZXIgPSB7CisJLm1hZ2ljCQk9IEVYVDJfRVRfTUFHSUNfSU9fTUFOQUdFUiwKKwkubmFtZQkJPSAiVW5peCBJL08gTWFuYWdlciIsCisJLm9wZW4JCT0gdW5peF9vcGVuLAorCS5jbG9zZQkJPSB1bml4X2Nsb3NlLAorCS5zZXRfYmxrc2l6ZQk9IHVuaXhfc2V0X2Jsa3NpemUsCisJLnJlYWRfYmxrCT0gdW5peF9yZWFkX2JsaywKKwkud3JpdGVfYmxrCT0gdW5peF93cml0ZV9ibGssCisJLmZsdXNoCQk9IHVuaXhfZmx1c2gsCisJLndyaXRlX2J5dGUJPSB1bml4X3dyaXRlX2J5dGUsCisJLnNldF9vcHRpb24JPSB1bml4X3NldF9vcHRpb24sCisJLmdldF9zdGF0cwk9IHVuaXhfZ2V0X3N0YXRzLAorCS5yZWFkX2JsazY0CT0gdW5peF9yZWFkX2JsazY0LAorCS53cml0ZV9ibGs2NAk9IHVuaXhfd3JpdGVfYmxrNjQsCisJLmRpc2NhcmQJPSB1bml4X2Rpc2NhcmQsCit9OworCitpb19tYW5hZ2VyIHVuaXhfaW9fbWFuYWdlciA9ICZzdHJ1Y3RfdW5peF9tYW5hZ2VyOwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy91bmxpbmsuYyBiL2xpYi9leHQyZnMvdW5saW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJkMzFjYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvdW5saW5rLmMKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiB1bmxpbmsuYyAtLS0gZGVsZXRlIGxpbmtzIGluIGEgZXh0MmZzIGRpcmVjdG9yeQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKK3N0cnVjdCBsaW5rX3N0cnVjdCAgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJaW50CQluYW1lbGVuOworCWV4dDJfaW5vX3QJaW5vZGU7CisJaW50CQlmbGFnczsKKwlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKnByZXY7CisJaW50CQlkb25lOworfTsKKworI2lmZGVmIF9fVFVSQk9DX18KKyAjcHJhZ21hIGFyZ3N1c2VkCisjZW5kaWYKK3N0YXRpYyBpbnQgdW5saW5rX3Byb2Moc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCSAgICAgaW50CW9mZnNldCwKKwkJICAgICBpbnQJYmxvY2tzaXplIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICBjaGFyCSpidWYgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgIHZvaWQJKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgbGlua19zdHJ1Y3QgKmxzID0gKHN0cnVjdCBsaW5rX3N0cnVjdCAqKSBwcml2X2RhdGE7CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpwcmV2OworCisJcHJldiA9IGxzLT5wcmV2OworCWxzLT5wcmV2ID0gZGlyZW50OworCisJaWYgKGxzLT5uYW1lKSB7CisJCWlmICgoZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpICE9IGxzLT5uYW1lbGVuKQorCQkJcmV0dXJuIDA7CisJCWlmIChzdHJuY21wKGxzLT5uYW1lLCBkaXJlbnQtPm5hbWUsIGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSkKKwkJCXJldHVybiAwOworCX0KKwlpZiAobHMtPmlub2RlKSB7CisJCWlmIChkaXJlbnQtPmlub2RlICE9IGxzLT5pbm9kZSkKKwkJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWlmICghZGlyZW50LT5pbm9kZSkKKwkJCXJldHVybiAwOworCX0KKworCWlmIChvZmZzZXQpCisJCXByZXYtPnJlY19sZW4gKz0gZGlyZW50LT5yZWNfbGVuOworCWVsc2UKKwkJZGlyZW50LT5pbm9kZSA9IDA7CisJbHMtPmRvbmUrKzsKKwlyZXR1cm4gRElSRU5UX0FCT1JUfERJUkVOVF9DSEFOR0VEOworfQorCisjaWZkZWYgX19UVVJCT0NfXworICNwcmFnbWEgYXJnc3VzZWQKKyNlbmRpZgorZXJyY29kZV90IGV4dDJmc191bmxpbmsoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgZGlyLAorCQkJY29uc3QgY2hhciAqbmFtZSwgZXh0Ml9pbm9fdCBpbm8sCisJCQlpbnQgZmxhZ3MgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJc3RydWN0IGxpbmtfc3RydWN0IGxzOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmICghbmFtZSAmJiAhaW5vKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCisJaWYgKCEoZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSkKKwkJcmV0dXJuIEVYVDJfRVRfUk9fRklMU1lTOworCisJbHMubmFtZSA9IG5hbWU7CisJbHMubmFtZWxlbiA9IG5hbWUgPyBzdHJsZW4obmFtZSkgOiAwOworCWxzLmlub2RlID0gaW5vOworCWxzLmZsYWdzID0gMDsKKwlscy5kb25lID0gMDsKKwlscy5wcmV2ID0gMDsKKworCXJldHZhbCA9IGV4dDJmc19kaXJfaXRlcmF0ZShmcywgZGlyLCBESVJFTlRfRkxBR19JTkNMVURFX0VNUFRZLAorCQkJCSAgICAwLCB1bmxpbmtfcHJvYywgJmxzKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIChscy5kb25lKSA/IDAgOiBFWFQyX0VUX0RJUl9OT19TUEFDRTsKK30KKwpkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy92YWxpZF9ibGsuYyBiL2xpYi9leHQyZnMvdmFsaWRfYmxrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1ZTM2ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvdmFsaWRfYmxrLmMKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIHZhbGlkX2Jsay5jIC0tLSBkb2VzIHRoZSBpbm9kZSBoYXZlIHZhbGlkIGJsb2Nrcz8KKyAqCisgKiBDb3B5cmlnaHQgMTk5NyBieSBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMSBpZiB0aGUgaW5vZGUncyBibG9jayBlbnRyaWVzIGFjdHVhbGx5CisgKiBjb250YWluIGJsb2NrIGVudHJpZXMuCisgKi8KK2ludCBleHQyZnNfaW5vZGVfaGFzX3ZhbGlkX2Jsb2NrczIoZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSkKK3sKKwkvKgorCSAqIE9ubHkgZGlyZWN0b3JpZXMsIHJlZ3VsYXIgZmlsZXMsIGFuZCBzb21lIHN5bWJvbGljIGxpbmtzCisJICogaGF2ZSB2YWxpZCBibG9jayBlbnRyaWVzLgorCSAqLworCWlmICghTElOVVhfU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJiAhTElOVVhfU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJgorCSAgICAhTElOVVhfU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIHRoZSBzeW1ib2xpYyBsaW5rIGlzIGEgImZhc3Qgc3ltbGluayIsIHRoZW4gdGhlIHN5bWxpbmsKKwkgKiB0YXJnZXQgaXMgc3RvcmVkIGluIHRoZSBibG9jayBlbnRyaWVzLgorCSAqLworCWlmIChMSU5VWF9TX0lTTE5LIChpbm9kZS0+aV9tb2RlKSkgeworCQlpZiAoZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCBpbm9kZSkgPT0gMCkgeworCQkJLyogV2l0aCBubyBFQSBibG9jaywgd2UgY2FuIHJlbHkgb24gaV9ibG9ja3MgKi8KKwkJCWlmIChpbm9kZS0+aV9ibG9ja3MgPT0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCS8qIFdpdGggYW4gRUEgYmxvY2ssIGxpZmUgZ2V0cyBtb3JlIHRyaWNreSAqLworCQkJaWYgKGlub2RlLT5pX3NpemUgPj0gRVhUMl9OX0JMT0NLUyo0KQorCQkJCXJldHVybiAxOyAvKiBkZWZpbml0ZWx5IHVzaW5nIGlfYmxvY2tbXSAqLworCQkJaWYgKGlub2RlLT5pX3NpemUgPiA0ICYmIGlub2RlLT5pX2Jsb2NrWzFdID09IDApCisJCQkJcmV0dXJuIDE7IC8qIGRlZmluaXRlbHkgdXNpbmcgaV9ibG9ja1tdICovCisJCQlyZXR1cm4gMDsgLyogUHJvYmFibHkgYSBmYXN0IHN5bWxpbmsgKi8KKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKworaW50IGV4dDJmc19pbm9kZV9oYXNfdmFsaWRfYmxvY2tzKHN0cnVjdCBleHQyX2lub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyKE5VTEwsIGlub2RlKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvdmVyc2lvbi5jIGIvbGliL2V4dDJmcy92ZXJzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhjOGFjZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvdmVyc2lvbi5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiB2ZXJzaW9uLmMgLS0tIFJldHVybiB0aGUgdmVyc2lvbiBvZiB0aGUgZXh0MiBsaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisjaW5jbHVkZSAiLi4vLi4vdmVyc2lvbi5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqbGliX3ZlcnNpb24gPSBFMkZTUFJPR1NfVkVSU0lPTjsKK3N0YXRpYyBjb25zdCBjaGFyICpsaWJfZGF0ZSA9IEUyRlNQUk9HU19EQVRFOworCitpbnQgZXh0MmZzX3BhcnNlX3ZlcnNpb25fc3RyaW5nKGNvbnN0IGNoYXIgKnZlcl9zdHJpbmcpCit7CisJY29uc3QgY2hhciAqY3A7CisJaW50IHZlcnNpb24gPSAwLCBkb3RfY291bnQgPSAwOworCisJZm9yIChjcCA9IHZlcl9zdHJpbmc7ICpjcDsgY3ArKykgeworCQlpZiAoKmNwID09ICcuJykgeworCQkJaWYgKGRvdF9jb3VudCsrKQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmICghaXNkaWdpdCgqY3ApKQorCQkJYnJlYWs7CisJCXZlcnNpb24gPSAodmVyc2lvbiAqIDEwKSArICgqY3AgLSAnMCcpOworCX0KKwlyZXR1cm4gdmVyc2lvbjsKK30KKworCitpbnQgZXh0MmZzX2dldF9saWJyYXJ5X3ZlcnNpb24oY29uc3QgY2hhciAqKnZlcl9zdHJpbmcsCisJCQkgICAgICAgY29uc3QgY2hhciAqKmRhdGVfc3RyaW5nKQoreworCWlmICh2ZXJfc3RyaW5nKQorCQkqdmVyX3N0cmluZyA9IGxpYl92ZXJzaW9uOworCWlmIChkYXRlX3N0cmluZykKKwkJKmRhdGVfc3RyaW5nID0gbGliX2RhdGU7CisKKwlyZXR1cm4gZXh0MmZzX3BhcnNlX3ZlcnNpb25fc3RyaW5nKGxpYl92ZXJzaW9uKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvd3JpdGVfYmJfZmlsZS5jIGIvbGliL2V4dDJmcy93cml0ZV9iYl9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgzNDM0MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHQyZnMvd3JpdGVfYmJfZmlsZS5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiB3cml0ZV9iYl9maWxlLmMgLS0tIHdyaXRlIGEgbGlzdCBvZiBiYWQgYmxvY2tzIHRvIGEgRklMRSAqCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworZXJyY29kZV90IGV4dDJmc193cml0ZV9iYl9GSUxFKGV4dDJfYmFkYmxvY2tzX2xpc3QgYmJfbGlzdCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICAgIEZJTEUgKmYpCit7CisJYmFkYmxvY2tzX2l0ZXJhdGUJYmJfaXRlcjsKKwlibGtfdAkJCWJsazsKKwllcnJjb2RlX3QJCXJldHZhbDsKKworCXJldHZhbCA9IGV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlX2JlZ2luKGJiX2xpc3QsICZiYl9pdGVyKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJd2hpbGUgKGV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlKGJiX2l0ZXIsICZibGspKSB7CisJCWZwcmludGYoZiwgIiV1XG4iLCBibGspOworCX0KKwlleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9lbmQoYmJfaXRlcik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvZnBvcGVuLmMgYi9saWIvZnBvcGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhZjIwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9mcG9wZW4uYwpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIGZwb3Blbi5jIC0tLSB1bmxpa2UgdGhlIGxpYmMgcG9wZW4sIGl0IGRpcmVjdGx5IGV4ZWN1dGVzIHRoZQorICogY29tbWFuZCBpbnN0ZWFkIG9mIGNhbGwgb3V0IHRvIHRoZSBzaGVsbC4KKyAqCisgKiBDb3B5cmlnaHQgVGhlb2RvcmUgVHMnbywgMTk5Ni0xOTk5LgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlIHRoaXMgZmlsZSBpcyBncmFudGVkIGZvciBhbnkgcHVycG9zZXMsIGFzIGxvbmcgYXMKKyAqIHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBrZXB0IGludGFjdCBhbmQgdGhlIGF1dGhvciBpcyBub3QgaGVsZAorICogbGlhYmxlIGZvciBhbnkgZGFtYWdlcyByZXN1bHRpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgcHJvZ3JhbS4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorICogV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogVVNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjZGVmaW5lIE1BWF9BUkdWIDI1NgorCitleHRlcm4gRklMRSAqZnBvcGVuKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqbW9kZSk7CisKK0ZJTEUgKmZwb3Blbihjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJY2hhcgkqYXJndltNQVhfQVJHVl07CisJaW50CWkgPSAwOworCWNoYXIJKmJ1ZiwgKnByb2cgPSAwOworCWNoYXIJKnA7CisJaW50CWRvX3N0ZGluLCBkb19zdGRlcnIgPSAwOworCWludAlmZHNbMl07CisJcGlkX3QJcGlkOworCisJaWYgKCFtb2RlKSB7CisJCWVycm5vID0gRUZBVUxUOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlzd2l0Y2ggKCptb2RlKSB7CisJY2FzZSAncic6CisJCWRvX3N0ZGluID0gMDsKKwkJYnJlYWs7CisJY2FzZSAndyc6CisJCWRvX3N0ZGluID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiBOVUxMOworCX0KKwlzd2l0Y2ggKCoobW9kZSsxKSkgeworCWNhc2UgJyYnOgorCQlkb19zdGRlcnIgPSAxOworCX0KKworCS8qCisJICogQ3JlYXRlIHRoZSBhcmd2IHZlY3Rvci4uLi4KKwkgKi8KKwlidWYgPSBtYWxsb2Moc3RybGVuKGNtZCkrMSk7CisJaWYgKCFidWYpCisJCXJldHVybiBOVUxMOworCXN0cmNweShidWYsIGNtZCk7CisJcCA9IGJ1ZjsKKwl3aGlsZSAocCAmJiAqcCkgeworCQlpZiAoaXNzcGFjZSgqcCkpIHsKKwkJCXArKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChpID09IDApCisJCQlwcm9nID0gcDsKKwkJYXJndltpKytdID0gcDsKKwkJcCA9IHN0cmNocihwLCAnICcpOworCQlpZiAocCkKKwkJCSpwKysgPSAwOworCX0KKworCWFyZ3ZbaV0gPSAwOworCisJLyoKKwkgKiBHZXQgdGhlIHBpcGUKKwkgKi8KKwlpZiAocGlwZShmZHMpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBGb3JrIGFuZCBleGVjdXRlIHRoZSBjb3JyZWN0IHByb2dyYW0uICovCisJaWYgKChwaWQgPSBmb3JrKCkpIDwgMCkgeworCQlwZXJyb3IoImZvcmsiKTsKKwkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIGlmIChwaWQgPT0gMCkgeworCQlpZiAoZG9fc3RkaW4pIHsKKwkJCWNsb3NlKGZkc1sxXSk7CisJCQlkdXAyKGZkc1swXSwgMCk7CisJCX0gZWxzZSB7CisJCQljbG9zZShmZHNbMF0pOworCQkJZHVwMihmZHNbMV0sIDEpOworCQkJaWYgKGRvX3N0ZGVycikKKwkJCQlkdXAyKGZkc1sxXSwgMik7CisJCX0KKwkJKHZvaWQpIGV4ZWN2cChwcm9nLCBhcmd2KTsKKwkJcGVycm9yKHByb2cpOworCQlleGl0KDEpOworCX0KKwlyZXR1cm4gZmRvcGVuKGRvX3N0ZGluID8gZmRzWzFdIDogZmRzWzBdLCBtb2RlKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGliL3F1b3RhL01ha2VmaWxlLmluIGIvbGliL3F1b3RhL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDQyZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcXVvdGEvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxMzEgQEAKKyMgTWFrZWZpbGUgZm9yIHRoZSBRVU9UQSBsaWJyYXJ5CisjCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACit0b3BfYnVpbGRkaXIgPSAuLi8uLgorbXlfZGlyID0gbGliL3F1b3RhCitJTlNUQUxMID0gQElOU1RBTExACisKK0BNQ09ORklHQAorCithbGw6OgorCitPQkpTPQkJbWtxdW90YS5vIHF1b3RhaW8ubyBxdW90YWlvX3YyLm8gcXVvdGFpb190cmVlLm8gZGljdC5vCisKK1NSQ1M9CQkkKHNyY2RpcikvbWtxdW90YS5jIFwKKwkJJChzcmNkaXIpL3F1b3RhaW8uYyBcCisJCSQoc3JjZGlyKS9xdW90YWlvX3RyZWUuYyBcCisJCSQoc3JjZGlyKS9xdW90YWlvX3YyLmMgXAorCQkkKHNyY2RpcikvLi4vLi4vZTJmc2NrL2RpY3QuYworCitMSUJSQVJZPSBsaWJxdW90YQorTElCRElSPSBxdW90YQorCisjRUxGX1ZFUlNJT04gPSAxLjAKKyNFTEZfU09fVkVSU0lPTiA9IDEKKyNFTEZfSU1BR0UgPSBsaWJxdW90YQorI0VMRl9NWURJUiA9IHF1b3RhCisjRUxGX0lOU1RBTExfRElSID0gJChyb290X2xpYmRpcikKKyNFTEZfT1RIRVJfTElCUyA9IC1sZXh0MmZzCisKKyNCU0RMSUJfVkVSU0lPTiA9IDEuMAorI0JTRExJQl9JTUFHRSA9IGxpYnF1b3RhCisjQlNETElCX01ZRElSID0gcXVvdGEKKyNCU0RMSUJfSU5TVEFMTF9ESVIgPSAkKHJvb3RfbGliZGlyKQorCitATUFLRUZJTEVfTElCUkFSWUAKKyNNQUtFRklMRV9FTEYjCisjTUFLRUZJTEVfQlNETElCIworQE1BS0VGSUxFX1BST0ZJTEVACisKKy5jLm86CisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCSQoUSkgJChDSEVDS19DTUQpICQoQUxMX0NGTEFHUykgJDwKK0BQUk9GSUxFX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1nIC1wZyAtbyBwcm9maWxlZC8kKi5vIC1jICQ8CisjRUxGX0NNVCMJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1mUElDIC1vIGVsZnNoYXJlZC8kKi5vIC1jICQ8CisjQlNETElCX0NNVCMJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpICQoQlNETElCX1BJQ19GTEFHKSAtbyBwaWMvJCoubyAtYyAkPAorCitkaWN0Lm86CisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgLWMgJChBTExfQ0ZMQUdTKSAkKHRvcF9zcmNkaXIpL2UyZnNjay9kaWN0LmMgLW8gJEAKK0BQUk9GSUxFX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1nIC1wZyAtbyBwcm9maWxlZC9kaWN0Lm8gLWMgXAorQFBST0ZJTEVfQ01UQAkkKHRvcF9zcmNkaXIpL2UyZnNjay9kaWN0LmMKKyNFTEZfQ01UIwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWZQSUMgLW8gZWxmc2hhcmVkLyQqLm8gLWMgXAorI0VMRl9DTVQjCSQodG9wX3NyY2RpcikvZTJmc2NrL2RpY3QuYworI0JTRExJQl9DTVQjCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAkKEJTRExJQl9QSUNfRkxBRykgLW8gcGljLyQqLm8gLWMgXAorI0JTRExJQl9DTVQjCSQodG9wX3NyY2RpcikvZTJmc2NrL2RpY3QuYworCitpbnN0YWxsZGlyczo6CisKK2luc3RhbGw6OiBhbGwKKwordW5pbnN0YWxsOjoKKworY2xlYW46OgorCSQoUk0pIC1mIFwjKiAqLnMgKi5vICouYSAqfiAqLmJhayBjb3JlIHByb2ZpbGVkLyoKKwkkKFJNKSAtZiAuLi9saWJxdW90YS5hIC4uL2xpYnF1b3RhX3AuYSAkKFNNQU5QQUdFUykKKworI2NoZWNrOjogdHN0X3V1aWQKKyMJTERfTElCUkFSWV9QQVRIPSQoTElCKSBEWUxEX0xJQlJBUllfUEFUSD0kKExJQikgLi90c3RfdXVpZAorCittb3N0bHljbGVhbjo6IGNsZWFuCitkaXN0Y2xlYW46OiBjbGVhbgorCSQoUk0pIC1mIC5kZXBlbmQgTWFrZWZpbGUgXAorCQkkKHNyY2RpcikvVEFHUyAkKHNyY2RpcikvTWFrZWZpbGUuaW4ub2xkCisKKyMKKyMgSGFjayB0byBwYXJhbGxlbCBtYWtlcyByZWNvZ25pemUgZGVwZW5kZW5jaWVzIGNvcnJlY3RseS4KKyMKKy4uLy4uL2xpYi9saWJxdW90YS5hOiBsaWJxdW90YS5hCisuLi8uLi9saWIvbGlicXVvdGEuc286IGltYWdlCisuLi8uLi9saWIvbGlicXVvdGEuZHlsaWI6IGltYWdlCisKKyQoT0JKUyk6CisKKyMgKysrIERlcGVuZGVuY3kgbGluZSBlYXRlciArKysKKyMgCisjIE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb2xsb3cuICBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc2VjdGlvbiBpbgorIyB0aGUgTWFrZWZpbGUuaW4gZmlsZQorIworbWtxdW90YS5vOiAkKHNyY2RpcikvbWtxdW90YS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmggJChzcmNkaXIpL3F1b3RhaW8uaCAkKHNyY2RpcikvZHFibGtfdjIuaCBcCisgJChzcmNkaXIpL3F1b3RhaW9fdHJlZS5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmggXAorICQoc3JjZGlyKS9xdW90YWlvX3YyLmggJChzcmNkaXIpL2NvbW1vbi5oCitxdW90YWlvLm86ICQoc3JjZGlyKS9xdW90YWlvLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9jb21tb24uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9xdW90YWlvLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvZHFibGtfdjIuaCAkKHNyY2RpcikvcXVvdGFpb190cmVlLmggXAorICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmgKK3F1b3RhaW9fdHJlZS5vOiAkKHNyY2RpcikvcXVvdGFpb190cmVlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9jb21tb24uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9xdW90YWlvX3RyZWUuaCBcCisgJChzcmNkaXIpL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmgKK3F1b3RhaW9fdjIubzogJChzcmNkaXIpL3F1b3RhaW9fdjIuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2NvbW1vbi5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL3F1b3RhaW9fdjIuaCBcCisgJChzcmNkaXIpL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9kcWJsa192Mi5oICQoc3JjZGlyKS9xdW90YWlvX3RyZWUuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorZGljdC5vOiAkKHNyY2RpcikvLi4vLi4vZTJmc2NrL2RpY3QuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpLy4uLy4uL2UyZnNjay9kaWN0LmgKZGlmZiAtLWdpdCBhL2xpYi9xdW90YS9jb21tb24uaCBiL2xpYi9xdW90YS9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWFkNzlmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3F1b3RhL2NvbW1vbi5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKgorICoJVmFyaW91cyB0aGluZ3MgY29tbW9uIGZvciBhbGwgdXRpbGl0aWVzCisgKgorICovCisKKyNpZm5kZWYgX19RVU9UQV9DT01NT05fSF9fCisjZGVmaW5lIF9fUVVPVEFfQ09NTU9OX0hfXworCisjaWYgRVhUMl9GTEFUX0lOQ0xVREVTCisjaW5jbHVkZSAiZTJfdHlwZXMuaCIKKyNlbHNlCisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJfdHlwZXMuaD4KKyNlbmRpZiAvKiBFWFQyX0ZMQVRfSU5DTFVERVMgKi8KKworLyogI2RlZmluZSBERUJVR19RVU9UQSAxICovCisKKyNpZm5kZWYgX19hdHRyaWJ1dGVfXworIyBpZiAhZGVmaW5lZCBfX0dOVUNfXyB8fCBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA4KSB8fCBfX1NUUklDVF9BTlNJX18KKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKHgpCisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBsb2dfZXJyKGZvcm1hdCwgYXJnIC4uLikJCQkJCVwKKwlmcHJpbnRmKHN0ZGVyciwgIltFUlJPUl0gJXM6JWQ6JXM6OiAiIGZvcm1hdCAiXG4iLAkJXAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCAjIyBhcmcpCisKKyNpZmRlZiBERUJVR19RVU9UQQorIyBkZWZpbmUgbG9nX2RlYnVnKGZvcm1hdCwgYXJnIC4uLikJCQkJCVwKKwlmcHJpbnRmKHN0ZGVyciwgIltERUJVR10gJXM6JWQ6JXM6OiAiIGZvcm1hdCAiXG4iLAkJXAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCAjIyBhcmcpCisjZWxzZQorIyBkZWZpbmUgbG9nX2RlYnVnKGZvcm1hdCwgLi4uKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1FVT1RBX0NPTU1PTl9IX18gKi8KZGlmZiAtLWdpdCBhL2xpYi9xdW90YS9kcWJsa192Mi5oIGIvbGliL3F1b3RhL2RxYmxrX3YyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyNTEyYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9xdW90YS9kcWJsa192Mi5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBIZWFkZXIgZmlsZSBmb3IgZGlzayBmb3JtYXQgb2YgbmV3IHF1b3RhZmlsZSBmb3JtYXQKKyAqCisgKiBKYW4gS2FyYSA8amFja0BzdXNlLmN6PiAtIHNwb25zb3JlZCBieSBTdVNFIENSCisgKi8KKworI2lmbmRlZiBfX1FVT1RBX0RRQkxLX1YyX0hfXworI2RlZmluZSBfX1FVT1RBX0RRQkxLX1YyX0hfXworCisjaW5jbHVkZSAicXVvdGFpb190cmVlLmgiCisKKy8qIFN0cnVjdHVyZSBmb3IgZm9ybWF0IHNwZWNpZmljIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgdjJfbWVtX2RxaW5mbyB7CisJc3RydWN0IHF0cmVlX21lbV9kcWluZm8gZHFpX3F0cmVlOworCXVuc2lnbmVkIGludCBkcWlfZmxhZ3M7CQkvKiBGbGFncyBzZXQgaW4gcXVvdGFmaWxlICovCisJdW5zaWduZWQgaW50IGRxaV91c2VkX2VudHJpZXM7CS8qIE51bWJlciBvZiBlbnRyaWVzIGluIGZpbGUgLQorCQkJCQkgICB1cGRhdGVkIGJ5IHNjYW5fZHF1b3RzICovCisJdW5zaWduZWQgaW50IGRxaV9kYXRhX2Jsb2NrczsJLyogTnVtYmVyIG9mIGRhdGEgYmxvY2tzIGluIGZpbGUgLQorCQkJCQkgICB1cGRhdGVkIGJ5IHNjYW5fZHF1b3RzICovCit9OworCitzdHJ1Y3QgdjJfbWVtX2RxYmxrIHsKKwlsb25nIGxvbmcgZHFiX29mZjsJLyogT2Zmc2V0IG9mIGRxdW90IGluIGZpbGUgKi8KK307CisKK3N0cnVjdCBxdW90YWZpbGVfb3BzOwkJLyogV2lsbCBiZSBkZWZpbmVkIGxhdGVyIGluIHF1b3RhaW8uaCAqLworCisvKiBPcGVyYXRpb25zIGFib3ZlIHRoaXMgZm9ybWF0ICovCitleHRlcm4gc3RydWN0IHF1b3RhZmlsZV9vcHMgcXVvdGFmaWxlX29wc18yOworCisjZW5kaWYgIC8qIF9fUVVPVEFfRFFCTEtfVjJfSF9fICovCmRpZmYgLS1naXQgYS9saWIvcXVvdGEvbWtxdW90YS5jIGIvbGliL3F1b3RhL21rcXVvdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWNlMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3F1b3RhL21rcXVvdGEuYwpAQCAtMCwwICsxLDYzMCBAQAorLyoKKyAqIG1rcXVvdGEuYyAtLS0gY3JlYXRlIHF1b3RhIGZpbGVzIGZvciBhIGZpbGVzeXN0ZW0KKyAqCisgKiBBZGl0eWEgS2FsaSA8YWRpdHlha2FsaUBnb29nbGUuY29tPgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKyNpbmNsdWRlICJlMnAvZTJwLmgiCisKKyNpbmNsdWRlICJxdW90YWlvLmgiCisjaW5jbHVkZSAicXVvdGFpb192Mi5oIgorI2luY2x1ZGUgInF1b3RhaW9fdHJlZS5oIgorI2luY2x1ZGUgImNvbW1vbi5oIgorCisvKiBOZWVkZWQgZm9yIGFyY2hpdGVjdHVyZXMgd2hlcmUgc2l6ZW9mKGludCkgIT0gc2l6ZW9mKHZvaWQgKikgKi8KKyNkZWZpbmUgVUlOVF9UT19WT0lEUFRSKHZhbCkgICgodm9pZCAqKShpbnRwdHJfdCkodmFsKSkKKyNkZWZpbmUgVk9JRFBUUl9UT19VSU5UKHB0cikgICgodW5zaWduZWQgaW50KShpbnRwdHJfdCkocHRyKSkKKworI2lmIERFQlVHX1FVT1RBCitzdGF0aWMgdm9pZCBwcmludF9pbm9kZShzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpCit7CisJaWYgKCFpbm9kZSkKKwkJcmV0dXJuOworCisJZnByaW50ZihzdGRlcnIsICIgIGlfbW9kZSA9ICVkXG4iLCBpbm9kZS0+aV9tb2RlKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgaV91aWQgPSAlZFxuIiwgaW5vZGUtPmlfdWlkKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgaV9zaXplID0gJWRcbiIsIGlub2RlLT5pX3NpemUpOworCWZwcmludGYoc3RkZXJyLCAiICBpX2F0aW1lID0gJWRcbiIsIGlub2RlLT5pX2F0aW1lKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgaV9jdGltZSA9ICVkXG4iLCBpbm9kZS0+aV9jdGltZSk7CisJZnByaW50ZihzdGRlcnIsICIgIGlfbXRpbWUgPSAlZFxuIiwgaW5vZGUtPmlfbXRpbWUpOworCWZwcmludGYoc3RkZXJyLCAiICBpX2R0aW1lID0gJWRcbiIsIGlub2RlLT5pX2R0aW1lKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgaV9naWQgPSAlZFxuIiwgaW5vZGUtPmlfZ2lkKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgaV9saW5rc19jb3VudCA9ICVkXG4iLCBpbm9kZS0+aV9saW5rc19jb3VudCk7CisJZnByaW50ZihzdGRlcnIsICIgIGlfYmxvY2tzID0gJWRcbiIsIGlub2RlLT5pX2Jsb2Nrcyk7CisJZnByaW50ZihzdGRlcnIsICIgIGlfZmxhZ3MgPSAlZFxuIiwgaW5vZGUtPmlfZmxhZ3MpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBwcmludF9kcXVvdChjb25zdCBjaGFyICpkZXNjLCBzdHJ1Y3QgZHF1b3QgKmRxKQoreworCWlmIChkZXNjKQorCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAiLCBkZXNjKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiV1ICVsbGQ6JWxsZDolbGxkICVsbGQ6JWxsZDolbGxkXG4iLAorCQlkcS0+ZHFfaWQsIGRxLT5kcV9kcWIuZHFiX2N1cnNwYWNlLAorCQlkcS0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0LCBkcS0+ZHFfZHFiLmRxYl9iaGFyZGxpbWl0LAorCQlkcS0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMsCisJCWRxLT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQsIGRxLT5kcV9kcWIuZHFiX2loYXJkbGltaXQpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIHByaW50X2RxdW90KGNvbnN0IGNoYXIgKmRlc2MsIHN0cnVjdCBkcXVvdCAqZHEpCit7Cit9CisjZW5kaWYKKworLyoKKyAqIFJldHVybnMgMCBpZiBub3QgYWJsZSB0byBmaW5kIHRoZSBxdW90YSBmaWxlLCBvdGhlcndpc2UgcmV0dXJucyBpdHMKKyAqIGlub2RlIG51bWJlci4KKyAqLworaW50IHF1b3RhX2ZpbGVfZXhpc3RzKGV4dDJfZmlsc3lzIGZzLCBpbnQgcXR5cGUsIGludCBmbXQpCit7CisJY2hhciBxZl9uYW1lWzI1Nl07CisJZXJyY29kZV90IHJldDsKKwlleHQyX2lub190IGlubzsKKworCWlmIChxdHlwZSA+PSBNQVhRVU9UQVMpCisJCXJldHVybiAtRUlOVkFMOworCisJcXVvdGFfZ2V0X3FmX25hbWUocXR5cGUsIFFGTVRfVkZTX1YxLCBxZl9uYW1lKTsKKworCXJldCA9IGV4dDJmc19sb29rdXAoZnMsIEVYVDJfUk9PVF9JTk8sIHFmX25hbWUsIHN0cmxlbihxZl9uYW1lKSwgMCwKKwkJCSAgICAmaW5vKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gMDsKKworCXJldHVybiBpbm87Cit9CisKKy8qCisgKiBTZXQgdGhlIHZhbHVlIGZvciByZXNlcnZlZCBxdW90YSBpbm9kZSBudW1iZXIgZmllbGQgaW4gc3VwZXJibG9jay4KKyAqLwordm9pZCBxdW90YV9zZXRfc2JfaW51bShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sIGludCBxdHlwZSkKK3sKKwlleHQyX2lub190ICppbnVtcDsKKworCWludW1wID0gKHF0eXBlID09IFVTUlFVT1RBKSA/ICZmcy0+c3VwZXItPnNfdXNyX3F1b3RhX2ludW0gOgorCQkmZnMtPnN1cGVyLT5zX2dycF9xdW90YV9pbnVtOworCisJbG9nX2RlYnVnKCJzZXR0aW5nIHF1b3RhIGlubyBpbiBzdXBlcmJsb2NrOiBpbm89JXUsIHR5cGU9JWQiLCBpbm8sCisJCSBxdHlwZSk7CisJKmludW1wID0gaW5vOworCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKK30KKworZXJyY29kZV90IHF1b3RhX3JlbW92ZV9pbm9kZShleHQyX2ZpbHN5cyBmcywgaW50IHF0eXBlKQoreworCWV4dDJfaW5vX3QgcWZfaW5vOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9iaXRtYXBzKGZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWxvZ19lcnIoIkNvdWxkbid0IHJlYWQgYml0bWFwczogJXMiLCBlcnJvcl9tZXNzYWdlKHJldHZhbCkpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlxZl9pbm8gPSAocXR5cGUgPT0gVVNSUVVPVEEpID8gZnMtPnN1cGVyLT5zX3Vzcl9xdW90YV9pbnVtIDoKKwkJZnMtPnN1cGVyLT5zX2dycF9xdW90YV9pbnVtOworCXF1b3RhX3NldF9zYl9pbnVtKGZzLCAwLCBxdHlwZSk7CisJLyogVHJ1bmNhdGUgdGhlIGlub2RlIG9ubHkgaWYgaXRzIGEgcmVzZXJ2ZWQgb25lLiAqLworCWlmIChxZl9pbm8gPCBFWFQyX0ZJUlNUX0lOT0RFKGZzLT5zdXBlcikpCisJCXF1b3RhX2lub2RlX3RydW5jYXRlKGZzLCBxZl9pbm8pOworCisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX1NVUEVSX09OTFk7CisJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2JpdG1hcHMoZnMpOworCWlmIChyZXR2YWwpIHsKKwkJbG9nX2VycigiQ291bGRuJ3Qgd3JpdGUgYml0bWFwczogJXMiLCBlcnJvcl9tZXNzYWdlKHJldHZhbCkpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfZHF1b3RzKGRpY3RfdCAqZGljdCwgc3RydWN0IHF1b3RhX2hhbmRsZSAqcWgpCit7CisJZG5vZGVfdAkJKm47CisJc3RydWN0IGRxdW90CSpkcTsKKworCWZvciAobiA9IGRpY3RfZmlyc3QoZGljdCk7IG47IG4gPSBkaWN0X25leHQoZGljdCwgbikpIHsKKwkJZHEgPSBkbm9kZV9nZXQobik7CisJCWlmIChkcSkgeworCQkJcHJpbnRfZHF1b3QoIndyaXRlIiwgZHEpOworCQkJZHEtPmRxX2ggPSBxaDsKKwkJCXVwZGF0ZV9ncmFjZV90aW1lcyhkcSk7CisJCQlxaC0+cWhfb3BzLT5jb21taXRfZHF1b3QoZHEpOworCQl9CisJfQorfQorCitlcnJjb2RlX3QgcXVvdGFfd3JpdGVfaW5vZGUocXVvdGFfY3R4X3QgcWN0eCwgaW50IHF0eXBlKQoreworCWludAkJcmV0dmFsID0gMCwgaTsKKwlkaWN0X3QJCSpkaWN0OworCWV4dDJfZmlsc3lzCWZzOworCXN0cnVjdCBxdW90YV9oYW5kbGUgKmggPSBOVUxMOworCWludAkJZm10ID0gUUZNVF9WRlNfVjE7CisKKwlpZiAoIXFjdHgpCisJCXJldHVybiAwOworCisJZnMgPSBxY3R4LT5mczsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IHF1b3RhX2hhbmRsZSksICZoKTsKKwlpZiAocmV0dmFsKSB7CisJCWxvZ19lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBxdW90YSBoYW5kbGU6ICVzIiwKKwkJCWVycm9yX21lc3NhZ2UocmV0dmFsKSk7CisJCWdvdG8gb3V0OworCX0KKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2JpdG1hcHMoZnMpOworCWlmIChyZXR2YWwpIHsKKwkJbG9nX2VycigiQ291bGRuJ3QgcmVhZCBiaXRtYXBzOiAlcyIsIGVycm9yX21lc3NhZ2UocmV0dmFsKSk7CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNQVhRVU9UQVM7IGkrKykgeworCQlpZiAoKHF0eXBlICE9IC0xKSAmJiAoaSAhPSBxdHlwZSkpCisJCQljb250aW51ZTsKKworCQlkaWN0ID0gcWN0eC0+cXVvdGFfZGljdFtpXTsKKwkJaWYgKCFkaWN0KQorCQkJY29udGludWU7CisKKwkJcmV0dmFsID0gcXVvdGFfZmlsZV9jcmVhdGUoaCwgZnMsIGksIGZtdCk7CisJCWlmIChyZXR2YWwgPCAwKSB7CisJCQlsb2dfZXJyKCJDYW5ub3QgaW5pdGlhbGl6ZSBpbyBvbiBxdW90YWZpbGUiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJd3JpdGVfZHF1b3RzKGRpY3QsIGgpOworCQlyZXR2YWwgPSBxdW90YV9maWxlX2Nsb3NlKHFjdHgsIGgpOworCQlpZiAocmV0dmFsIDwgMCkgeworCQkJbG9nX2VycigiQ2Fubm90IGZpbmlzaCBJTyBvbiBuZXcgcXVvdGFmaWxlOiAlcyIsCisJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJCWlmIChoLT5xaF9xZi5lMl9maWxlKQorCQkJCWV4dDJmc19maWxlX2Nsb3NlKGgtPnFoX3FmLmUyX2ZpbGUpOworCQkJcXVvdGFfaW5vZGVfdHJ1bmNhdGUoZnMsIGgtPnFoX3FmLmlubyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFNldCBxdW90YSBpbm9kZSBudW1iZXJzIGluIHN1cGVyYmxvY2suICovCisJCXF1b3RhX3NldF9zYl9pbnVtKGZzLCBoLT5xaF9xZi5pbm8sIGkpOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCWV4dDJmc19tYXJrX2JiX2RpcnR5KGZzKTsKKwkJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfU1VQRVJfT05MWTsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfYml0bWFwcyhmcyk7CisJaWYgKHJldHZhbCkgeworCQlsb2dfZXJyKCJDb3VsZG4ndCB3cml0ZSBiaXRtYXBzOiAlcyIsIGVycm9yX21lc3NhZ2UocmV0dmFsKSk7CisJCWdvdG8gb3V0OworCX0KK291dDoKKwlpZiAoaCkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZoKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgY29tcHV0aW5nIHF1b3RhIGluIG1lbW9yeS4gICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZGljdF91aW50X2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCXVuc2lnbmVkIGludAljLCBkOworCisJYyA9IFZPSURQVFJfVE9fVUlOVChhKTsKKwlkID0gVk9JRFBUUl9UT19VSU5UKGIpOworCisJaWYgKGMgPT0gZCkKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoYyA+IGQpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIHFpZF90IGdldF9xaWQoc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBpbnQgcXR5cGUpCit7CisJaWYgKHF0eXBlID09IFVTUlFVT1RBKQorCQlyZXR1cm4gaW5vZGVfdWlkKCppbm9kZSk7CisJcmV0dXJuIGlub2RlX2dpZCgqaW5vZGUpOworfQorCitzdGF0aWMgdm9pZCBxdW90YV9kbm9kZV9mcmVlKGRub2RlX3QgKm5vZGUsCisJCQkgICAgIHZvaWQgKmNvbnRleHQgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCXZvaWQgKnB0ciA9IG5vZGUgPyBkbm9kZV9nZXQobm9kZSkgOiAwOworCisJZXh0MmZzX2ZyZWVfbWVtKCZwdHIpOworCWZyZWUobm9kZSk7Cit9CisKKy8qCisgKiBTZXQgdXAgdGhlIHF1b3RhIHRyYWNraW5nIGRhdGEgc3RydWN0dXJlcy4KKyAqLworZXJyY29kZV90IHF1b3RhX2luaXRfY29udGV4dChxdW90YV9jdHhfdCAqcWN0eCwgZXh0Ml9maWxzeXMgZnMsIGludCBxdHlwZSkKK3sKKwllcnJjb2RlX3QgZXJyOworCWRpY3RfdAkqZGljdDsKKwlxdW90YV9jdHhfdCBjdHg7CisJaW50CWk7CisKKwllcnIgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IHF1b3RhX2N0eCksICZjdHgpOworCWlmIChlcnIpIHsKKwkJbG9nX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIHF1b3RhIGNvbnRleHQiKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwltZW1zZXQoY3R4LCAwLCBzaXplb2Yoc3RydWN0IHF1b3RhX2N0eCkpOworCWZvciAoaSA9IDA7IGkgPCBNQVhRVU9UQVM7IGkrKykgeworCQljdHgtPnF1b3RhX2ZpbGVbaV0gPSBOVUxMOworCQlpZiAoKHF0eXBlICE9IC0xKSAmJiAoaSAhPSBxdHlwZSkpCisJCQljb250aW51ZTsKKwkJZXJyID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKGRpY3RfdCksICZkaWN0KTsKKwkJaWYgKGVycikgeworCQkJbG9nX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIGRpY3Rpb25hcnkiKTsKKwkJCXF1b3RhX3JlbGVhc2VfY29udGV4dCgmY3R4KTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJY3R4LT5xdW90YV9kaWN0W2ldID0gZGljdDsKKwkJZGljdF9pbml0KGRpY3QsIERJQ1RDT1VOVF9UX01BWCwgZGljdF91aW50X2NtcCk7CisJCWRpY3Rfc2V0X2FsbG9jYXRvcihkaWN0LCBOVUxMLCBxdW90YV9kbm9kZV9mcmVlLCBOVUxMKTsKKwl9CisKKwljdHgtPmZzID0gZnM7CisJKnFjdHggPSBjdHg7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcXVvdGFfcmVsZWFzZV9jb250ZXh0KHF1b3RhX2N0eF90ICpxY3R4KQoreworCWVycmNvZGVfdCBlcnI7CisJZGljdF90CSpkaWN0OworCWludAlpOworCXF1b3RhX2N0eF90IGN0eDsKKworCWlmICghcWN0eCkKKwkJcmV0dXJuOworCisJY3R4ID0gKnFjdHg7CisJZm9yIChpID0gMDsgaSA8IE1BWFFVT1RBUzsgaSsrKSB7CisJCWRpY3QgPSBjdHgtPnF1b3RhX2RpY3RbaV07CisJCWN0eC0+cXVvdGFfZGljdFtpXSA9IDA7CisJCWlmIChkaWN0KSB7CisJCQlkaWN0X2ZyZWVfbm9kZXMoZGljdCk7CisJCQlmcmVlKGRpY3QpOworCQl9CisJCWlmIChjdHgtPnF1b3RhX2ZpbGVbaV0pIHsKKwkJCWVyciA9IHF1b3RhX2ZpbGVfY2xvc2UoY3R4LCBjdHgtPnF1b3RhX2ZpbGVbaV0pOworCQkJaWYgKGVycikgeworCQkJCWxvZ19lcnIoIkNhbm5vdCBjbG9zZSBxdW90YWZpbGU6ICVzIiwKKwkJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlleHQyZnNfZnJlZV9tZW0oJmN0eC0+cXVvdGFfZmlsZVtpXSk7CisJCQl9CisJCX0KKwl9CisJKnFjdHggPSBOVUxMOworCWZyZWUoY3R4KTsKK30KKworc3RhdGljIHN0cnVjdCBkcXVvdCAqZ2V0X2RxKGRpY3RfdCAqZGljdCwgX191MzIga2V5KQoreworCXN0cnVjdCBkcXVvdAkqZHE7CisJZG5vZGVfdAkJKm47CisKKwluID0gZGljdF9sb29rdXAoZGljdCwgVUlOVF9UT19WT0lEUFRSKGtleSkpOworCWlmIChuKQorCQlkcSA9IGRub2RlX2dldChuKTsKKwllbHNlIHsKKwkJaWYgKGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgZHF1b3QpLCAmZHEpKSB7CisJCQlsb2dfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgZHF1b3QiKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCW1lbXNldChkcSwgMCwgc2l6ZW9mKHN0cnVjdCBkcXVvdCkpOworCQlkaWN0X2FsbG9jX2luc2VydChkaWN0LCBVSU5UX1RPX1ZPSURQVFIoa2V5KSwgZHEpOworCQlkcS0+ZHFfaWQgPSBrZXk7CisJfQorCXJldHVybiBkcTsKK30KKworCisvKgorICogQ2FsbGVkIHRvIHVwZGF0ZSB0aGUgYmxvY2tzIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIGlub2RlCisgKi8KK3ZvaWQgcXVvdGFfZGF0YV9hZGQocXVvdGFfY3R4X3QgcWN0eCwgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBleHQyX2lub190IGlubywKKwkJICAgIHFzaXplX3Qgc3BhY2UpCit7CisJc3RydWN0IGRxdW90CSpkcTsKKwlkaWN0X3QJCSpkaWN0OworCWludAkJaTsKKworCWlmICghcWN0eCkKKwkJcmV0dXJuOworCisJbG9nX2RlYnVnKCJBRERfREFUQTogSW5vZGU6ICV1LCBVSUQvR0lEOiAldS8ldSwgc3BhY2U6ICVsZCIsIGlubywKKwkJCWlub2RlX3VpZCgqaW5vZGUpLAorCQkJaW5vZGVfZ2lkKCppbm9kZSksIHNwYWNlKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYUVVPVEFTOyBpKyspIHsKKwkJZGljdCA9IHFjdHgtPnF1b3RhX2RpY3RbaV07CisJCWlmIChkaWN0KSB7CisJCQlkcSA9IGdldF9kcShkaWN0LCBnZXRfcWlkKGlub2RlLCBpKSk7CisJCQlpZiAoZHEpCisJCQkJZHEtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgKz0gc3BhY2U7CisJCX0KKwl9Cit9CisKKy8qCisgKiBDYWxsZWQgdG8gcmVtb3ZlIHNvbWUgYmxvY2tzIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIGlub2RlCisgKi8KK3ZvaWQgcXVvdGFfZGF0YV9zdWIocXVvdGFfY3R4X3QgcWN0eCwgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBleHQyX2lub190IGlubywKKwkJICAgIHFzaXplX3Qgc3BhY2UpCit7CisJc3RydWN0IGRxdW90CSpkcTsKKwlkaWN0X3QJCSpkaWN0OworCWludAkJaTsKKworCWlmICghcWN0eCkKKwkJcmV0dXJuOworCisJbG9nX2RlYnVnKCJTVUJfREFUQTogSW5vZGU6ICV1LCBVSUQvR0lEOiAldS8ldSwgc3BhY2U6ICVsZCIsIGlubywKKwkJCWlub2RlX3VpZCgqaW5vZGUpLAorCQkJaW5vZGVfZ2lkKCppbm9kZSksIHNwYWNlKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYUVVPVEFTOyBpKyspIHsKKwkJZGljdCA9IHFjdHgtPnF1b3RhX2RpY3RbaV07CisJCWlmIChkaWN0KSB7CisJCQlkcSA9IGdldF9kcShkaWN0LCBnZXRfcWlkKGlub2RlLCBpKSk7CisJCQlkcS0+ZHFfZHFiLmRxYl9jdXJzcGFjZSAtPSBzcGFjZTsKKwkJfQorCX0KK30KKworLyoKKyAqIENhbGxlZCB0byBjb3VudCB0aGUgZmlsZXMgdXNlZCBieSBhbiBpbm9kZSdzIHVzZXIvZ3JvdXAKKyAqLwordm9pZCBxdW90YV9kYXRhX2lub2RlcyhxdW90YV9jdHhfdCBxY3R4LCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCSAgICAgICBleHQyX2lub190IGlubywgaW50IGFkanVzdCkKK3sKKwlzdHJ1Y3QgZHF1b3QJKmRxOworCWRpY3RfdAkJKmRpY3Q7CisJaW50CQlpOworCisJaWYgKCFxY3R4KQorCQlyZXR1cm47CisKKwlsb2dfZGVidWcoIkFESl9JTk9ERTogSW5vZGU6ICV1LCBVSUQvR0lEOiAldS8ldSwgYWRqdXN0OiAlZCIsIGlubywKKwkJCWlub2RlX3VpZCgqaW5vZGUpLAorCQkJaW5vZGVfZ2lkKCppbm9kZSksIGFkanVzdCk7CisJZm9yIChpID0gMDsgaSA8IE1BWFFVT1RBUzsgaSsrKSB7CisJCWRpY3QgPSBxY3R4LT5xdW90YV9kaWN0W2ldOworCQlpZiAoZGljdCkgeworCQkJZHEgPSBnZXRfZHEoZGljdCwgZ2V0X3FpZChpbm9kZSwgaSkpOworCQkJZHEtPmRxX2RxYi5kcWJfY3VyaW5vZGVzICs9IGFkanVzdDsKKwkJfQorCX0KK30KKworZXJyY29kZV90IHF1b3RhX2NvbXB1dGVfdXNhZ2UocXVvdGFfY3R4X3QgcWN0eCkKK3sKKwlleHQyX2ZpbHN5cyBmczsKKwlleHQyX2lub190IGlubzsKKwllcnJjb2RlX3QgcmV0OworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCXFzaXplX3Qgc3BhY2U7CisJZXh0Ml9pbm9kZV9zY2FuIHNjYW47CisKKwlpZiAoIXFjdHgpCisJCXJldHVybiAwOworCisJZnMgPSBxY3R4LT5mczsKKwlyZXQgPSBleHQyZnNfb3Blbl9pbm9kZV9zY2FuKGZzLCAwLCAmc2Nhbik7CisJaWYgKHJldCkgeworCQlsb2dfZXJyKCJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4uIHJldD0lbGQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXdoaWxlICgxKSB7CisJCXJldCA9IGV4dDJmc19nZXRfbmV4dF9pbm9kZShzY2FuLCAmaW5vLCAmaW5vZGUpOworCQlpZiAocmV0KSB7CisJCQlsb2dfZXJyKCJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUuIHJldD0lbGQiLCByZXQpOworCQkJZXh0MmZzX2Nsb3NlX2lub2RlX3NjYW4oc2Nhbik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWlmIChpbm8gPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoaW5vZGUuaV9saW5rc19jb3VudCAmJgorCQkgICAgKGlubyA9PSBFWFQyX1JPT1RfSU5PIHx8CisJCSAgICAgaW5vID49IEVYVDJfRklSU1RfSU5PREUoZnMtPnN1cGVyKSkpIHsKKwkJCXNwYWNlID0gZXh0MmZzX2lub2RlX2lfYmxvY2tzKGZzLCAmaW5vZGUpIDw8IDk7CisJCQlxdW90YV9kYXRhX2FkZChxY3R4LCAmaW5vZGUsIGlubywgc3BhY2UpOworCQkJcXVvdGFfZGF0YV9pbm9kZXMocWN0eCwgJmlub2RlLCBpbm8sICsxKTsKKwkJfQorCX0KKworCWV4dDJmc19jbG9zZV9pbm9kZV9zY2FuKHNjYW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzY2FuX2RxdW90c19kYXRhIHsKKwlkaWN0X3QJCSpxdW90YV9kaWN0OworCWludCAgICAgICAgICAgICB1cGRhdGVfbGltaXRzOyAvKiB1cGRhdGUgbGltaXRzIGZyb20gZGlzayAqLworCWludAkJdXBkYXRlX3VzYWdlOworCWludAkJdXNhZ2VfaXNfaW5jb25zaXN0ZW50OworfTsKKworc3RhdGljIGludCBzY2FuX2RxdW90c19jYWxsYmFjayhzdHJ1Y3QgZHF1b3QgKmRxdW90LCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzY2FuX2RxdW90c19kYXRhICpzY2FuX2RhdGEgPSBjYl9kYXRhOworCWRpY3RfdCAqcXVvdGFfZGljdCA9IHNjYW5fZGF0YS0+cXVvdGFfZGljdDsKKwlzdHJ1Y3QgZHF1b3QgKmRxOworCisJZHEgPSBnZXRfZHEocXVvdGFfZGljdCwgZHF1b3QtPmRxX2lkKTsKKwlkcS0+ZHFfaWQgPSBkcXVvdC0+ZHFfaWQ7CisJZHEtPmRxX2ZsYWdzIHw9IERRRl9TRUVOOworCisJcHJpbnRfZHF1b3QoIm1lbSIsIGRxKTsKKwlwcmludF9kcXVvdCgiZHNrIiwgZHF1b3QpOworCisJLyogQ2hlY2sgaWYgdGhlcmUgaXMgaW5jb25zaXN0YW5jeS4gKi8KKwlpZiAoZHEtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgIT0gZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgfHwKKwkgICAgZHEtPmRxX2RxYi5kcWJfY3VyaW5vZGVzICE9IGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcykgeworCQlzY2FuX2RhdGEtPnVzYWdlX2lzX2luY29uc2lzdGVudCA9IDE7CisJCWZwcmludGYoc3RkZXJyLCAiW1FVT1RBIFdBUk5JTkddIFVzYWdlIGluY29uc2lzdGVudCBmb3IgSUQgJWQ6IgorCQkJImFjdHVhbCAoJWxsdSwgJWxsdSkgIT0gZXhwZWN0ZWQgKCVsbHUsICVsbHUpXG4iLAorCQkJZHEtPmRxX2lkLCAobG9uZyBsb25nKWRxLT5kcV9kcWIuZHFiX2N1cnNwYWNlLAorCQkJKGxvbmcgbG9uZylkcS0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMsCisJCQkobG9uZyBsb25nKWRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlLAorCQkJKGxvbmcgbG9uZylkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMpOworCX0KKworCWlmIChzY2FuX2RhdGEtPnVwZGF0ZV9saW1pdHMpIHsKKwkJZHEtPmRxX2RxYi5kcWJfaWhhcmRsaW1pdCA9IGRxdW90LT5kcV9kcWIuZHFiX2loYXJkbGltaXQ7CisJCWRxLT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQgPSBkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0OworCQlkcS0+ZHFfZHFiLmRxYl9iaGFyZGxpbWl0ID0gZHF1b3QtPmRxX2RxYi5kcWJfYmhhcmRsaW1pdDsKKwkJZHEtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCA9IGRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQ7CisJfQorCisJaWYgKHNjYW5fZGF0YS0+dXBkYXRlX3VzYWdlKSB7CisJCWRxLT5kcV9kcWIuZHFiX2N1cnNwYWNlID0gZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2U7CisJCWRxLT5kcV9kcWIuZHFiX2N1cmlub2RlcyA9IGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlczsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgYWxsIGRxdW90cyBmcm9tIHF1b3RhIGZpbGUgaW50byBtZW1vcnkKKyAqLworc3RhdGljIGVycmNvZGVfdCBxdW90YV9yZWFkX2FsbF9kcXVvdHMoc3RydWN0IHF1b3RhX2hhbmRsZSAqcWgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90YV9jdHhfdCBxY3R4LCBpbnQgdXBkYXRlX2xpbWl0cykKK3sKKwlzdHJ1Y3Qgc2Nhbl9kcXVvdHNfZGF0YSBzY2FuX2RhdGE7CisKKwlzY2FuX2RhdGEucXVvdGFfZGljdCA9IHFjdHgtPnF1b3RhX2RpY3RbcWgtPnFoX3R5cGVdOworCXNjYW5fZGF0YS51cGRhdGVfbGltaXRzID0gdXBkYXRlX2xpbWl0czsKKwlzY2FuX2RhdGEudXBkYXRlX3VzYWdlID0gMDsKKworCXJldHVybiBxaC0+cWhfb3BzLT5zY2FuX2RxdW90cyhxaCwgc2Nhbl9kcXVvdHNfY2FsbGJhY2ssICZzY2FuX2RhdGEpOworfQorCisvKgorICogV3JpdGUgYWxsIG1lbW9yeSBkcXVvdHMgaW50byBxdW90YSBmaWxlCisgKi8KKyNpZiAwIC8qIGN1cnJlbnRseSB1bnVzZWQsIGJ1dCBtYXkgYmUgdXNlZnVsIGluIHRoZSBmdXR1cmU/ICovCitzdGF0aWMgZXJyY29kZV90IHF1b3RhX3dyaXRlX2FsbF9kcXVvdHMoc3RydWN0IHF1b3RhX2hhbmRsZSAqcWgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGFfY3R4X3QgcWN0eCkKK3sKKwllcnJjb2RlX3QgZXJyOworCisJZXJyID0gZXh0MmZzX3JlYWRfYml0bWFwcyhxY3R4LT5mcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwl3cml0ZV9kcXVvdHMocWN0eC0+cXVvdGFfZGljdFtxaC0+cWhfdHlwZV0sIHFoKTsKKwlleHQyZnNfbWFya19iYl9kaXJ0eShxY3R4LT5mcyk7CisJcWN0eC0+ZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfU1VQRVJfT05MWTsKKwlleHQyZnNfd3JpdGVfYml0bWFwcyhxY3R4LT5mcyk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoKKyAqIFVwZGF0ZXMgdGhlIGluLW1lbW9yeSBxdW90YSBsaW1pdHMgZnJvbSB0aGUgZ2l2ZW4gcXVvdGEgaW5vZGUuCisgKi8KK2VycmNvZGVfdCBxdW90YV91cGRhdGVfbGltaXRzKHF1b3RhX2N0eF90IHFjdHgsIGV4dDJfaW5vX3QgcWZfaW5vLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgcXVvdGFfaGFuZGxlICpxaDsKKwllcnJjb2RlX3QgZXJyOworCisJaWYgKCFxY3R4KQorCQlyZXR1cm4gMDsKKworCWVyciA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgcXVvdGFfaGFuZGxlKSwgJnFoKTsKKwlpZiAoZXJyKSB7CisJCWxvZ19lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBxdW90YSBoYW5kbGUiKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBxdW90YV9maWxlX29wZW4ocWN0eCwgcWgsIHFmX2lubywgdHlwZSwgLTEsIDApOworCWlmIChlcnIpIHsKKwkJbG9nX2VycigiT3BlbiBxdW90YSBmaWxlIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKKwlxdW90YV9yZWFkX2FsbF9kcXVvdHMocWgsIHFjdHgsIDEpOworCisJZXJyID0gcXVvdGFfZmlsZV9jbG9zZShxY3R4LCBxaCk7CisJaWYgKGVycikgeworCQlsb2dfZXJyKCJDYW5ub3QgZmluaXNoIElPIG9uIG5ldyBxdW90YWZpbGU6ICVzIiwKKwkJCXN0cmVycm9yKGVycm5vKSk7CisJCWlmIChxaC0+cWhfcWYuZTJfZmlsZSkKKwkJCWV4dDJmc19maWxlX2Nsb3NlKHFoLT5xaF9xZi5lMl9maWxlKTsKKwl9CitvdXQ6CisJZXh0MmZzX2ZyZWVfbWVtKCZxaCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIENvbXBhcmVzIHRoZSBtZWFzdXJlZCBxdW90YSBpbiBxY3R4LT5xdW90YV9kaWN0IHdpdGggdGhhdCBpbiB0aGUgcXVvdGEgaW5vZGUKKyAqIG9uIGRpc2sgYW5kIHVwZGF0ZXMgdGhlIGxpbWl0cyBpbiBxY3R4LT5xdW90YV9kaWN0LiAndXNhZ2VfaW5jb25zaXN0ZW50JyBpcworICogc2V0IHRvIDEgaWYgdGhlIHN1cHBsaWVkIGFuZCBvbi1kaXNrIHF1b3RhIHVzYWdlIHZhbHVlcyBhcmUgbm90IGlkZW50aWNhbC4KKyAqLworZXJyY29kZV90IHF1b3RhX2NvbXBhcmVfYW5kX3VwZGF0ZShxdW90YV9jdHhfdCBxY3R4LCBpbnQgcXR5cGUsCisJCQkJICAgaW50ICp1c2FnZV9pbmNvbnNpc3RlbnQpCit7CisJc3RydWN0IHF1b3RhX2hhbmRsZSBxaDsKKwlzdHJ1Y3Qgc2Nhbl9kcXVvdHNfZGF0YSBzY2FuX2RhdGE7CisJc3RydWN0IGRxdW90ICpkcTsKKwlkbm9kZV90ICpuOworCWRpY3RfdCAqZGljdCA9IHFjdHgtPnF1b3RhX2RpY3RbcXR5cGVdOworCWVycmNvZGVfdCBlcnIgPSAwOworCisJaWYgKCFkaWN0KQorCQlnb3RvIG91dDsKKworCWVyciA9IHF1b3RhX2ZpbGVfb3BlbihxY3R4LCAmcWgsIDAsIHF0eXBlLCAtMSwgMCk7CisJaWYgKGVycikgeworCQlsb2dfZXJyKCJPcGVuIHF1b3RhIGZpbGUgZmFpbGVkIik7CisJCWdvdG8gb3V0OworCX0KKworCXNjYW5fZGF0YS5xdW90YV9kaWN0ID0gcWN0eC0+cXVvdGFfZGljdFtxdHlwZV07CisJc2Nhbl9kYXRhLnVwZGF0ZV9saW1pdHMgPSAxOworCXNjYW5fZGF0YS51cGRhdGVfdXNhZ2UgPSAwOworCXNjYW5fZGF0YS51c2FnZV9pc19pbmNvbnNpc3RlbnQgPSAwOworCWVyciA9IHFoLnFoX29wcy0+c2Nhbl9kcXVvdHMoJnFoLCBzY2FuX2RxdW90c19jYWxsYmFjaywgJnNjYW5fZGF0YSk7CisJaWYgKGVycikgeworCQlsb2dfZXJyKCJFcnJvciBzY2FubmluZyBkcXVvdHMiKTsKKwkJZ290byBvdXRfY2xvc2VfcWg7CisJfQorCisJZm9yIChuID0gZGljdF9maXJzdChkaWN0KTsgbjsgbiA9IGRpY3RfbmV4dChkaWN0LCBuKSkgeworCQlkcSA9IGRub2RlX2dldChuKTsKKwkJaWYgKCFkcSkKKwkJCWNvbnRpbnVlOworCQlpZiAoKGRxLT5kcV9mbGFncyAmIERRRl9TRUVOKSA9PSAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIltRVU9UQSBXQVJOSU5HXSAiCisJCQkJIk1pc3NpbmcgcXVvdGEgZW50cnkgSUQgJWRcbiIsIGRxLT5kcV9pZCk7CisJCQlzY2FuX2RhdGEudXNhZ2VfaXNfaW5jb25zaXN0ZW50ID0gMTsKKwkJfQorCX0KKwkqdXNhZ2VfaW5jb25zaXN0ZW50ID0gc2Nhbl9kYXRhLnVzYWdlX2lzX2luY29uc2lzdGVudDsKKworb3V0X2Nsb3NlX3FoOgorCWVyciA9IHF1b3RhX2ZpbGVfY2xvc2UocWN0eCwgJnFoKTsKKwlpZiAoZXJyKSB7CisJCWxvZ19lcnIoIkNhbm5vdCBjbG9zZSBxdW90YWZpbGU6ICVzIiwgZXJyb3JfbWVzc2FnZShlcnJubykpOworCQlpZiAocWgucWhfcWYuZTJfZmlsZSkKKwkJCWV4dDJmc19maWxlX2Nsb3NlKHFoLnFoX3FmLmUyX2ZpbGUpOworCX0KK291dDoKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvbGliL3F1b3RhL3F1b3RhaW8uYyBiL2xpYi9xdW90YS9xdW90YWlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVmY2NhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9xdW90YS9xdW90YWlvLmMKQEAgLTAsMCArMSw0MjIgQEAKKy8qKiBxdW90YWlvLmMKKyAqCisgKiBHZW5lcmljIElPIG9wZXJhdGlvbnMgb24gcXVvdGFmaWxlcworICogSmFuIEthcmEgPGphY2tAc3VzZS5jej4gLSBzcG9uc29yZWQgYnkgU3VTRSBDUgorICogQWRpdHlhIEthbGkgPGFkaXR5YWthbGlAZ29vZ2xlLmNvbT4gLSBQb3J0ZWQgdG8gZTJmc3Byb2dzCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvZmlsZS5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicXVvdGFpby5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGV4dGVuc2lvbnNbTUFYUVVPVEFTXSA9IHsidXNlciIsICJncm91cCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBiYXNlbmFtZXNbXSA9IHsKKwkiIiwJCS8qIHVuZGVmaW5lZCAqLworCSJxdW90YSIsCS8qIFFGTVRfVkZTX09MRCAqLworCSJhcXVvdGEiLAkvKiBRRk1UX1ZGU19WMCAqLworCSIiLAkJLyogUUZNVF9PQ0ZTMiAqLworCSJhcXVvdGEiCS8qIFFGTVRfVkZTX1YxICovCit9OworCisvKiBIZWFkZXIgaW4gYWxsIG5ld2VyIHF1b3RhZmlsZXMgKi8KK3N0cnVjdCBkaXNrX2RxaGVhZGVyIHsKKwlfX3UzMiBkcWhfbWFnaWM7CisJX191MzIgZHFoX3ZlcnNpb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoqCisgKiBDb252ZXJ0IHR5cGUgb2YgcXVvdGEgdG8gd3JpdHRlbiByZXByZXNlbnRhdGlvbgorICovCitjb25zdCBjaGFyICp0eXBlMm5hbWUoaW50IHR5cGUpCit7CisJcmV0dXJuIGV4dGVuc2lvbnNbdHlwZV07Cit9CisKKy8qKgorICogQ3JlYXRlcyBhIHF1b3RhIGZpbGUgbmFtZSBmb3IgZ2l2ZW4gdHlwZSBhbmQgZm9ybWF0LgorICovCitjb25zdCBjaGFyICpxdW90YV9nZXRfcWZfbmFtZShpbnQgdHlwZSwgaW50IGZtdCwgY2hhciAqYnVmKQoreworCWlmICghYnVmKQorCQlyZXR1cm4gTlVMTDsKKwlzbnByaW50ZihidWYsIFFVT1RBX05BTUVfTEVOLCAiJXMuJXMiLAorCQkgYmFzZW5hbWVzW2ZtdF0sIGV4dGVuc2lvbnNbdHlwZV0pOworCisJcmV0dXJuIGJ1ZjsKK30KKworY29uc3QgY2hhciAqcXVvdGFfZ2V0X3FmX3BhdGgoY29uc3QgY2hhciAqbW50cHQsIGludCBxdHlwZSwgaW50IGZtdCwKKwkJCSAgICAgIGNoYXIgKnBhdGhfYnVmLCBzaXplX3QgcGF0aF9idWZfc2l6ZSkKK3sKKwljaGFyIHFmX25hbWVbUVVPVEFfTkFNRV9MRU5dOworCisJaWYgKCFtbnRwdCB8fCAhcGF0aF9idWYgfHwgIXBhdGhfYnVmX3NpemUpCisJCXJldHVybiBOVUxMOworCisJc3RybmNweShwYXRoX2J1ZiwgbW50cHQsIHBhdGhfYnVmX3NpemUpOworCXN0cm5jYXQocGF0aF9idWYsICIvIiwgMSk7CisJc3RybmNhdChwYXRoX2J1ZiwgcXVvdGFfZ2V0X3FmX25hbWUocXR5cGUsIGZtdCwgcWZfbmFtZSksCisJCXBhdGhfYnVmX3NpemUgLSBzdHJsZW4ocGF0aF9idWYpKTsKKworCXJldHVybiBwYXRoX2J1ZjsKK30KKworLyoKKyAqIFNldCBncmFjZSB0aW1lIGlmIG5lZWRlZAorICovCit2b2lkIHVwZGF0ZV9ncmFjZV90aW1lcyhzdHJ1Y3QgZHF1b3QgKnEpCit7CisJdGltZV90IG5vdzsKKworCXRpbWUoJm5vdyk7CisJaWYgKHEtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCAmJiB0b3FiKHEtPmRxX2RxYi5kcWJfY3Vyc3BhY2UpID4KKwkJCXEtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCkgeworCQlpZiAoIXEtPmRxX2RxYi5kcWJfYnRpbWUpCisJCQlxLT5kcV9kcWIuZHFiX2J0aW1lID0KKwkJCQlub3cgKyBxLT5kcV9oLT5xaF9pbmZvLmRxaV9iZ3JhY2U7CisJfSBlbHNlIHsKKwkJcS0+ZHFfZHFiLmRxYl9idGltZSA9IDA7CisJfQorCisJaWYgKHEtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCAmJiBxLT5kcV9kcWIuZHFiX2N1cmlub2RlcyA+CisJCQlxLT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQpIHsKKwkJaWYgKCFxLT5kcV9kcWIuZHFiX2l0aW1lKQorCQkJCXEtPmRxX2RxYi5kcWJfaXRpbWUgPQorCQkJCQlub3cgKyBxLT5kcV9oLT5xaF9pbmZvLmRxaV9pZ3JhY2U7CisJfSBlbHNlIHsKKwkJcS0+ZHFfZHFiLmRxYl9pdGltZSA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IGNvbXB1dGVfbnVtX2Jsb2Nrc19wcm9jKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90ICpibG9ja25yLAorCQkJICAgICAgIGUyX2Jsa2NudF90IGJsb2NrY250IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICAgaW50IHJlZl9vZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICAgIHZvaWQgKnByaXZhdGUpCit7CisJYmxrNjRfdCAqbnVtX2Jsb2NrcyA9IHByaXZhdGU7CisKKwkqbnVtX2Jsb2NrcyArPSAxOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgcXVvdGFfaW5vZGVfdHJ1bmNhdGUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vKQoreworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCWVycmNvZGVfdCBlcnI7CisKKwlpZiAoKGVyciA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBpbm8sICZpbm9kZSkpKQorCQlyZXR1cm4gZXJyOworCisJaWYgKChpbm8gPT0gRVhUNF9VU1JfUVVPVEFfSU5PKSB8fCAoaW5vID09IEVYVDRfR1JQX1FVT1RBX0lOTykpIHsKKwkJaW5vZGUuaV9kdGltZSA9IGZzLT5ub3cgPyBmcy0+bm93IDogdGltZSgwKTsKKwkJaWYgKCFleHQyZnNfaW5vZGVfaGFzX3ZhbGlkX2Jsb2NrczIoZnMsICZpbm9kZSkpCisJCQlyZXR1cm4gMDsKKwkJZXJyID0gZXh0MmZzX3B1bmNoKGZzLCBpbm8sICZpbm9kZSwgTlVMTCwgMCwgfjBVTEwpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfU1VQRVJfT05MWTsKKwkJbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSk7CisJfSBlbHNlIHsKKwkJaW5vZGUuaV9mbGFncyAmPSB+RVhUMl9JTU1VVEFCTEVfRkw7CisJfQorCWVyciA9IGV4dDJmc193cml0ZV9pbm9kZShmcywgaW5vLCAmaW5vZGUpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBleHQyX29mZjY0X3QgY29tcHV0ZV9pbm9kZV9zaXplKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubykKK3sKKwlibGs2NF90IG51bV9ibG9ja3MgPSAwOworCisJZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBpbm8sCisJCQkgICAgICBCTE9DS19GTEFHX1JFQURfT05MWSwKKwkJCSAgICAgIE5VTEwsCisJCQkgICAgICBjb21wdXRlX251bV9ibG9ja3NfcHJvYywKKwkJCSAgICAgICZudW1fYmxvY2tzKTsKKwlyZXR1cm4gbnVtX2Jsb2NrcyAqIGZzLT5ibG9ja3NpemU7Cit9CisKKy8qIEZ1bmN0aW9ucyB0byByZWFkL3dyaXRlIHF1b3RhIGZpbGUuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHF1b3RhX3dyaXRlX25vbW91bnQoc3RydWN0IHF1b3RhX2ZpbGUgKnFmLAorCQkJCQlleHQyX2xvZmZfdCBvZmZzZXQsCisJCQkJCXZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IHNpemUpCit7CisJZXh0Ml9maWxlX3QJZTJfZmlsZSA9IHFmLT5lMl9maWxlOworCXVuc2lnbmVkIGludAlieXRlc193cml0dGVuID0gMDsKKwllcnJjb2RlX3QJZXJyOworCisJZXJyID0gZXh0MmZzX2ZpbGVfbGxzZWVrKGUyX2ZpbGUsIG9mZnNldCwgRVhUMl9TRUVLX1NFVCwgTlVMTCk7CisJaWYgKGVycikgeworCQlsb2dfZXJyKCJleHQyZnNfZmlsZV9sbHNlZWsgZmFpbGVkOiAlbGQiLCBlcnIpOworCQlyZXR1cm4gMDsKKwl9CisKKwllcnIgPSBleHQyZnNfZmlsZV93cml0ZShlMl9maWxlLCBidWYsIHNpemUsICZieXRlc193cml0dGVuKTsKKwlpZiAoZXJyKSB7CisJCWxvZ19lcnIoImV4dDJmc19maWxlX3dyaXRlIGZhaWxlZDogJWxkIiwgZXJyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQ29ycmVjdCBpbm9kZS5pX3NpemUgaXMgc2V0IGluIGVuZF9pby4gKi8KKwlyZXR1cm4gYnl0ZXNfd3JpdHRlbjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBxdW90YV9yZWFkX25vbW91bnQoc3RydWN0IHF1b3RhX2ZpbGUgKnFmLAorCQkJCSAgICAgICBleHQyX2xvZmZfdCBvZmZzZXQsCisJCQkJICAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IHNpemUpCit7CisJZXh0Ml9maWxlX3QJZTJfZmlsZSA9IHFmLT5lMl9maWxlOworCXVuc2lnbmVkIGludAlieXRlc19yZWFkID0gMDsKKwllcnJjb2RlX3QJZXJyOworCisJZXJyID0gZXh0MmZzX2ZpbGVfbGxzZWVrKGUyX2ZpbGUsIG9mZnNldCwgRVhUMl9TRUVLX1NFVCwgTlVMTCk7CisJaWYgKGVycikgeworCQlsb2dfZXJyKCJleHQyZnNfZmlsZV9sbHNlZWsgZmFpbGVkOiAlbGQiLCBlcnIpOworCQlyZXR1cm4gMDsKKwl9CisKKwllcnIgPSBleHQyZnNfZmlsZV9yZWFkKGUyX2ZpbGUsIGJ1Ziwgc2l6ZSwgJmJ5dGVzX3JlYWQpOworCWlmIChlcnIpIHsKKwkJbG9nX2VycigiZXh0MmZzX2ZpbGVfcmVhZCBmYWlsZWQ6ICVsZCIsIGVycik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBieXRlc19yZWFkOworfQorCisvKgorICogRGV0ZWN0IHF1b3RhIGZvcm1hdCBhbmQgaW5pdGlhbGl6ZSBxdW90YSBJTworICovCitlcnJjb2RlX3QgcXVvdGFfZmlsZV9vcGVuKHF1b3RhX2N0eF90IHFjdHgsIHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsCisJCQkgIGV4dDJfaW5vX3QgcWZfaW5vLCBpbnQgdHlwZSwgaW50IGZtdCwgaW50IGZsYWdzKQoreworCWV4dDJfZmlsc3lzIGZzID0gcWN0eC0+ZnM7CisJZXh0Ml9maWxlX3QgZTJfZmlsZTsKKwllcnJjb2RlX3QgZXJyOworCWludCBhbGxvY2F0ZWRfaGFuZGxlID0gMDsKKworCWlmICh0eXBlID49IE1BWFFVT1RBUykKKwkJcmV0dXJuIEVJTlZBTDsKKworCWlmIChmbXQgPT0gLTEpCisJCWZtdCA9IFFGTVRfVkZTX1YxOworCisJZXJyID0gZXh0MmZzX3JlYWRfYml0bWFwcyhmcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChxZl9pbm8gPT0gMCkgeworCQlpZiAodHlwZSA9PSBVU1JRVU9UQSkKKwkJCXFmX2lubyA9IGZzLT5zdXBlci0+c191c3JfcXVvdGFfaW51bTsKKwkJZWxzZQorCQkJcWZfaW5vID0gZnMtPnN1cGVyLT5zX2dycF9xdW90YV9pbnVtOworCX0KKworCWxvZ19kZWJ1ZygiT3BlbmluZyBxdW90YSBpbm89JWx1LCB0eXBlPSVkIiwgcWZfaW5vLCB0eXBlKTsKKwllcnIgPSBleHQyZnNfZmlsZV9vcGVuKGZzLCBxZl9pbm8sIGZsYWdzLCAmZTJfZmlsZSk7CisJaWYgKGVycikgeworCQlsb2dfZXJyKCJleHQyZnNfZmlsZV9vcGVuIGZhaWxlZDogJXMiLCBlcnJvcl9tZXNzYWdlKGVycikpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmICghaCkgeworCQlpZiAocWN0eC0+cXVvdGFfZmlsZVt0eXBlXSkgeworCQkJaCA9IHFjdHgtPnF1b3RhX2ZpbGVbdHlwZV07CisJCQlpZiAoKChmbGFncyAmIEVYVDJfRklMRV9XUklURSkgPT0gMCkgfHwKKwkJCSAgICAoaC0+cWhfZmlsZV9mbGFncyAmIEVYVDJfRklMRV9XUklURSkpCisJCQkJcmV0dXJuIDA7CisJCQkodm9pZCkgcXVvdGFfZmlsZV9jbG9zZShxY3R4LCBoKTsKKwkJfQorCQllcnIgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IHF1b3RhX2hhbmRsZSksICZoKTsKKwkJaWYgKGVycikgeworCQkJbG9nX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIHF1b3RhIGhhbmRsZSIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlhbGxvY2F0ZWRfaGFuZGxlID0gMTsKKwl9CisKKwloLT5xaF9xZi5lMl9maWxlID0gZTJfZmlsZTsKKwloLT5xaF9xZi5mcyA9IGZzOworCWgtPnFoX3FmLmlubyA9IHFmX2lubzsKKwloLT5lMmZzX3dyaXRlID0gcXVvdGFfd3JpdGVfbm9tb3VudDsKKwloLT5lMmZzX3JlYWQgPSBxdW90YV9yZWFkX25vbW91bnQ7CisJaC0+cWhfZmlsZV9mbGFncyA9IGZsYWdzOworCWgtPnFoX2lvX2ZsYWdzID0gMDsKKwloLT5xaF90eXBlID0gdHlwZTsKKwloLT5xaF9mbXQgPSBmbXQ7CisJbWVtc2V0KCZoLT5xaF9pbmZvLCAwLCBzaXplb2YoaC0+cWhfaW5mbykpOworCWgtPnFoX29wcyA9ICZxdW90YWZpbGVfb3BzXzI7CisKKwlpZiAoaC0+cWhfb3BzLT5jaGVja19maWxlICYmCisJICAgIChoLT5xaF9vcHMtPmNoZWNrX2ZpbGUoaCwgdHlwZSwgZm10KSA9PSAwKSkgeworCQlsb2dfZXJyKCJxaF9vcHMtPmNoZWNrX2ZpbGUgZmFpbGVkIik7CisJCWdvdG8gZXJyb3V0OworCX0KKworCWlmIChoLT5xaF9vcHMtPmluaXRfaW8gJiYgKGgtPnFoX29wcy0+aW5pdF9pbyhoKSA8IDApKSB7CisJCWxvZ19lcnIoInFoX29wcy0+aW5pdF9pbyBmYWlsZWQiKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCWlmIChhbGxvY2F0ZWRfaGFuZGxlKQorCQlxY3R4LT5xdW90YV9maWxlW3R5cGVdID0gaDsKKworCXJldHVybiAwOworZXJyb3V0OgorCWV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworCWlmIChhbGxvY2F0ZWRfaGFuZGxlKQorCQlleHQyZnNfZnJlZV9tZW0oJmgpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGVycmNvZGVfdCBxdW90YV9pbm9kZV9pbml0X25ldyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8pCit7CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisJZXJyY29kZV90IGVyciA9IDA7CisKKwllcnIgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgaW5vLCAmaW5vZGUpOworCWlmIChlcnIpIHsKKwkJbG9nX2VycigiZXgyZnNfcmVhZF9pbm9kZSBmYWlsZWQiKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoRVhUMl9JX1NJWkUoJmlub2RlKSkKKwkJcXVvdGFfaW5vZGVfdHJ1bmNhdGUoZnMsIGlubyk7CisKKwltZW1zZXQoJmlub2RlLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwlleHQyZnNfaWJsa19zZXQoZnMsICZpbm9kZSwgMCk7CisJaW5vZGUuaV9hdGltZSA9IGlub2RlLmlfbXRpbWUgPQorCQlpbm9kZS5pX2N0aW1lID0gZnMtPm5vdyA/IGZzLT5ub3cgOiB0aW1lKDApOworCWlub2RlLmlfbGlua3NfY291bnQgPSAxOworCWlub2RlLmlfbW9kZSA9IExJTlVYX1NfSUZSRUcgfCAwNjAwOworCWlub2RlLmlfZmxhZ3MgfD0gRVhUMl9JTU1VVEFCTEVfRkw7CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkJCUVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKQorCQlpbm9kZS5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKworCWVyciA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZnMsIGlubywgJmlub2RlKTsKKwlpZiAoZXJyKSB7CisJCWxvZ19lcnIoImV4dDJmc193cml0ZV9uZXdfaW5vZGUgZmFpbGVkOiAlbGQiLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ3JlYXRlIG5ldyBxdW90YWZpbGUgb2Ygc3BlY2lmaWVkIGZvcm1hdCBvbiBnaXZlbiBmaWxlc3lzdGVtCisgKi8KK2VycmNvZGVfdCBxdW90YV9maWxlX2NyZWF0ZShzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCBleHQyX2ZpbHN5cyBmcywgaW50IHR5cGUsIGludCBmbXQpCit7CisJZXh0Ml9maWxlX3QgZTJfZmlsZTsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgcWZfaW51bTsKKworCWlmIChmbXQgPT0gLTEpCisJCWZtdCA9IFFGTVRfVkZTX1YxOworCisJaC0+cWhfcWYuZnMgPSBmczsKKwlpZiAodHlwZSA9PSBVU1JRVU9UQSkKKwkJcWZfaW51bSA9IEVYVDRfVVNSX1FVT1RBX0lOTzsKKwllbHNlIGlmICh0eXBlID09IEdSUFFVT1RBKQorCQlxZl9pbnVtID0gRVhUNF9HUlBfUVVPVEFfSU5POworCWVsc2UKKwkJcmV0dXJuIC0xOworCisJZXJyID0gZXh0MmZzX3JlYWRfYml0bWFwcyhmcyk7CisJaWYgKGVycikKKwkJZ290byBvdXRfZXJyOworCisJZXJyID0gcXVvdGFfaW5vZGVfaW5pdF9uZXcoZnMsIHFmX2ludW0pOworCWlmIChlcnIpIHsKKwkJbG9nX2VycigiaW5pdF9uZXdfcXVvdGFfaW5vZGUgZmFpbGVkIik7CisJCWdvdG8gb3V0X2VycjsKKwl9CisJaC0+cWhfcWYuaW5vID0gcWZfaW51bTsKKwloLT5xaF9maWxlX2ZsYWdzID0gRVhUMl9GSUxFX1dSSVRFIHwgRVhUMl9GSUxFX0NSRUFURTsKKwloLT5lMmZzX3dyaXRlID0gcXVvdGFfd3JpdGVfbm9tb3VudDsKKwloLT5lMmZzX3JlYWQgPSBxdW90YV9yZWFkX25vbW91bnQ7CisKKwlsb2dfZGVidWcoIkNyZWF0aW5nIHF1b3RhIGlubz0lbHUsIHR5cGU9JWQiLCBxZl9pbnVtLCB0eXBlKTsKKwllcnIgPSBleHQyZnNfZmlsZV9vcGVuKGZzLCBxZl9pbnVtLCBoLT5xaF9maWxlX2ZsYWdzLCAmZTJfZmlsZSk7CisJaWYgKGVycikgeworCQlsb2dfZXJyKCJleHQyZnNfZmlsZV9vcGVuIGZhaWxlZDogJWQiLCBlcnIpOworCQlnb3RvIG91dF9lcnI7CisJfQorCWgtPnFoX3FmLmUyX2ZpbGUgPSBlMl9maWxlOworCisJaC0+cWhfaW9fZmxhZ3MgPSAwOworCWgtPnFoX3R5cGUgPSB0eXBlOworCWgtPnFoX2ZtdCA9IGZtdDsKKwltZW1zZXQoJmgtPnFoX2luZm8sIDAsIHNpemVvZihoLT5xaF9pbmZvKSk7CisJaC0+cWhfb3BzID0gJnF1b3RhZmlsZV9vcHNfMjsKKworCWlmIChoLT5xaF9vcHMtPm5ld19pbyAmJiAoaC0+cWhfb3BzLT5uZXdfaW8oaCkgPCAwKSkgeworCQlsb2dfZXJyKCJxaF9vcHMtPm5ld19pbyBmYWlsZWQiKTsKKwkJZ290byBvdXRfZXJyMTsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2VycjE6CisJZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CitvdXRfZXJyOgorCisJaWYgKHFmX2ludW0pCisJCXF1b3RhX2lub2RlX3RydW5jYXRlKGZzLCBxZl9pbnVtKTsKKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIENsb3NlIHF1b3RhZmlsZSBhbmQgcmVsZWFzZSBoYW5kbGUKKyAqLworZXJyY29kZV90IHF1b3RhX2ZpbGVfY2xvc2UocXVvdGFfY3R4X3QgcWN0eCwgc3RydWN0IHF1b3RhX2hhbmRsZSAqaCkKK3sKKwlpZiAoaC0+cWhfaW9fZmxhZ3MgJiBJT0ZMX0lORk9ESVJUWSkgeworCQlpZiAoaC0+cWhfb3BzLT53cml0ZV9pbmZvICYmIGgtPnFoX29wcy0+d3JpdGVfaW5mbyhoKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWgtPnFoX2lvX2ZsYWdzICY9IH5JT0ZMX0lORk9ESVJUWTsKKwl9CisKKwlpZiAoaC0+cWhfb3BzLT5lbmRfaW8gJiYgaC0+cWhfb3BzLT5lbmRfaW8oaCkgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKGgtPnFoX3FmLmUyX2ZpbGUpIHsKKwkJX191NjQgbmV3X3NpemUsIHNpemU7CisKKwkJbmV3X3NpemUgPSBjb21wdXRlX2lub2RlX3NpemUoaC0+cWhfcWYuZnMsIGgtPnFoX3FmLmlubyk7CisJCWV4dDJmc19maWxlX2ZsdXNoKGgtPnFoX3FmLmUyX2ZpbGUpOworCQlpZiAoZXh0MmZzX2ZpbGVfZ2V0X2xzaXplKGgtPnFoX3FmLmUyX2ZpbGUsICZzaXplKSkKKwkJCW5ld19zaXplID0gMDsKKwkJaWYgKHNpemUgIT0gbmV3X3NpemUpCisJCQlleHQyZnNfZmlsZV9zZXRfc2l6ZTIoaC0+cWhfcWYuZTJfZmlsZSwgbmV3X3NpemUpOworCQlleHQyZnNfZmlsZV9jbG9zZShoLT5xaF9xZi5lMl9maWxlKTsKKwl9CisJaWYgKHFjdHgtPnF1b3RhX2ZpbGVbaC0+cWhfdHlwZV0gPT0gaCkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZxY3R4LT5xdW90YV9maWxlW2gtPnFoX3R5cGVdKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENyZWF0ZSBlbXB0eSBxdW90YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGRxdW90ICpnZXRfZW1wdHlfZHF1b3Qodm9pZCkKK3sKKwlzdHJ1Y3QgZHF1b3QgKmRxdW90OworCisJaWYgKGV4dDJmc19nZXRfbWVtemVybyhzaXplb2Yoc3RydWN0IGRxdW90KSwgJmRxdW90KSkgeworCQlsb2dfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZHF1b3QiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZHF1b3QtPmRxX2lkID0gLTE7CisJcmV0dXJuIGRxdW90OworfQpkaWZmIC0tZ2l0IGEvbGliL3F1b3RhL3F1b3RhaW8uaCBiL2xpYi9xdW90YS9xdW90YWlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NhNzgzMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9xdW90YS9xdW90YWlvLmgKQEAgLTAsMCArMSwyMjUgQEAKKy8qKiBxdW90YWlvLmgKKyAqCisgKiBJbnRlcmZhY2UgdG8gdGhlIHF1b3RhIGxpYnJhcnkuCisgKgorICogVGhlIHF1b3RhIGxpYnJhcnkgcHJvdmlkZXMgaW50ZXJmYWNlIGZvciBjcmVhdGluZyBhbmQgdXBkYXRpbmcgdGhlIHF1b3RhCisgKiBmaWxlcyBhbmQgdGhlIGV4dDQgc3VwZXJibG9jayBmaWVsZHMuIEl0IHN1cHBvcnRzIHRoZSBuZXcgVkZTX1YxIHF1b3RhCisgKiBmb3JtYXQuIFRoZSBxdW90YSBsaWJyYXJ5IGFsc28gcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2VlcGluZyB0cmFjayBvZiBxdW90YXMKKyAqIGluIG1lbW9yeS4KKyAqIFRoZSB0eXBpY2FsIHdheSB0byB1c2UgdGhlIHF1b3RhIGxpYnJhcnkgaXMgYXMgZm9sbG93czoKKyAqIHsKKyAqCXF1b3RhX2N0eF90IHFjdHg7CisgKgorICoJcXVvdGFfaW5pdF9jb250ZXh0KCZxY3R4LCBmcywgLTEpOworICoJeworICoJCXF1b3RhX2NvbXB1dGVfdXNhZ2UocWN0eCwgLTEpOworICoJCUFORC9PUgorICoJCXF1b3RhX2RhdGFfYWRkL3F1b3RhX2RhdGFfc3ViL3F1b3RhX2RhdGFfaW5vZGVzKCk7CisgKgl9CisgKglxdW90YV93cml0ZV9pbm9kZShxY3R4LCBVU1JRVU9UQSk7CisgKglxdW90YV93cml0ZV9pbm9kZShxY3R4LCBHUlBRVU9UQSk7CisgKglxdW90YV9yZWxlYXNlX2NvbnRleHQoJnFjdHgpOworICogfQorICoKKyAqIFRoaXMgaW5pdGlhbCB2ZXJzaW9uIGRvZXMgbm90IHN1cHBvcnQgcmVhZGluZyB0aGUgcXVvdGEgZmlsZXMuIFRoaXMgc3VwcG9ydAorICogd2lsbCBiZSBhZGRlZCBpbiBuZWFyIGZ1dHVyZS4KKyAqCisgKiBBZGl0eWEgS2FsaSA8YWRpdHlha2FsaUBnb29nbGUuY29tPgorICogSGVhZGVyIG9mIElPIG9wZXJhdGlvbnMgZm9yIHF1b3RhIHV0aWxpdGllcworICoKKyAqIEphbiBLYXJhIDxqYWNrQHN1c2UuY3o+CisgKi8KKworI2lmbmRlZiBHVUFSRF9RVU9UQUlPX0gKKyNkZWZpbmUgR1VBUkRfUVVPVEFJT19ICisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisjaW5jbHVkZSAiZHFibGtfdjIuaCIKKyNpbmNsdWRlICIuLi9lMmZzY2svZGljdC5oIgorCit0eXBlZGVmIGludDY0X3QgcXNpemVfdDsJLyogVHlwZSBpbiB3aGljaCB3ZSBzdG9yZSBzaXplIGxpbWl0YXRpb25zICovCisKKyNkZWZpbmUgTUFYUVVPVEFTIDIKKyNkZWZpbmUgVVNSUVVPVEEgMAorI2RlZmluZSBHUlBRVU9UQSAxCisKK3R5cGVkZWYgc3RydWN0IHF1b3RhX2N0eCAqcXVvdGFfY3R4X3Q7CisKK3N0cnVjdCBxdW90YV9jdHggeworCWV4dDJfZmlsc3lzCWZzOworCWRpY3RfdAkJKnF1b3RhX2RpY3RbTUFYUVVPVEFTXTsKKwlzdHJ1Y3QgcXVvdGFfaGFuZGxlICpxdW90YV9maWxlW01BWFFVT1RBU107Cit9OworCisvKgorICogRGVmaW5pdGlvbnMgb2YgbWFnaWNzIGFuZCB2ZXJzaW9ucyBvZiBjdXJyZW50IHF1b3RhIGZpbGVzCisgKi8KKyNkZWZpbmUgSU5JVFFNQUdJQ1Mge1wKKwkweGQ5YzAxZjExLAkvKiBVU1JRVU9UQSAqL1wKKwkweGQ5YzAxOTI3CS8qIEdSUFFVT1RBICovXAorfQorCisvKiBTaXplIG9mIGJsb2NrcyBpbiB3aGljaCBhcmUgY291bnRlZCBzaXplIGxpbWl0cyBpbiBnZW5lcmljIHV0aWxpdHkgcGFydHMgKi8KKyNkZWZpbmUgUVVPVEFCTE9DS19CSVRTIDEwCisjZGVmaW5lIFFVT1RBQkxPQ0tfU0laRSAoMSA8PCBRVU9UQUJMT0NLX0JJVFMpCisjZGVmaW5lIHRvcWIoeCkgKCgoeCkgKyBRVU9UQUJMT0NLX1NJWkUgLSAxKSA+PiBRVU9UQUJMT0NLX0JJVFMpCisKKy8qIFF1b3RhIGZvcm1hdCB0eXBlIElEcyAqLworI2RlZmluZQlRRk1UX1ZGU19PTEQgMQorI2RlZmluZQlRRk1UX1ZGU19WMCAyCisjZGVmaW5lCVFGTVRfVkZTX1YxIDQKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGRlZmluZSB0aGUgZGVmYXVsdCBhbW91bnQgb2YgdGltZSBnaXZlbiBhIHVzZXIKKyAqIGJlZm9yZSB0aGUgc29mdCBsaW1pdHMgYXJlIHRyZWF0ZWQgYXMgaGFyZCBsaW1pdHMgKHVzdWFsbHkgcmVzdWx0aW5nCisgKiBpbiBhbiBhbGxvY2F0aW9uIGZhaWx1cmUpLiBUaGUgdGltZXIgaXMgc3RhcnRlZCB3aGVuIHRoZSB1c2VyIGNyb3NzZXMKKyAqIHRoZWlyIHNvZnQgbGltaXQsIGl0IGlzIHJlc2V0IHdoZW4gdGhleSBnbyBiZWxvdyB0aGVpciBzb2Z0IGxpbWl0LgorICovCisjZGVmaW5lIE1BWF9JUV9USU1FICA2MDQ4MDAJLyogKDcqMjQqNjAqNjApIDEgd2VlayAqLworI2RlZmluZSBNQVhfRFFfVElNRSAgNjA0ODAwCS8qICg3KjI0KjYwKjYwKSAxIHdlZWsgKi8KKworI2RlZmluZSBJT0ZMX0lORk9ESVJUWQkweDAxCS8qIERpZCBpbmZvIGNoYW5nZT8gKi8KKworc3RydWN0IHF1b3RhZmlsZV9vcHM7CisKKy8qIEdlbmVyaWMgaW5mb3JtYXRpb24gYWJvdXQgcXVvdGFmaWxlICovCitzdHJ1Y3QgdXRpbF9kcWluZm8geworCXRpbWVfdCBkcWlfYmdyYWNlOwkvKiBCbG9jayBncmFjZSB0aW1lIGZvciBnaXZlbiBxdW90YWZpbGUgKi8KKwl0aW1lX3QgZHFpX2lncmFjZTsJLyogSW5vZGUgZ3JhY2UgdGltZSBmb3IgZ2l2ZW4gcXVvdGFmaWxlICovCisJdW5pb24geworCQlzdHJ1Y3QgdjJfbWVtX2RxaW5mbyB2Ml9tZHFpOworCX0gdTsJCQkvKiBGb3JtYXQgc3BlY2lmaWMgaW5mbyBhYm91dCBxdW90YWZpbGUgKi8KK307CisKK3N0cnVjdCBxdW90YV9maWxlIHsKKwlleHQyX2ZpbHN5cyBmczsKKwlleHQyX2lub190IGlubzsKKwlleHQyX2ZpbGVfdCBlMl9maWxlOworfTsKKworLyogU3RydWN0dXJlIGZvciBvbmUgb3BlbmVkIHF1b3RhIGZpbGUgKi8KK3N0cnVjdCBxdW90YV9oYW5kbGUgeworCWludCBxaF90eXBlOwkJLyogVHlwZSBvZiBxdW90YWZpbGUgKi8KKwlpbnQgcWhfZm10OwkJLyogUXVvdGFmaWxlIGZvcm1hdCAqLworCWludCBxaF9maWxlX2ZsYWdzOworCWludCBxaF9pb19mbGFnczsJLyogSU8gZmxhZ3MgZm9yIGZpbGUgKi8KKwlzdHJ1Y3QgcXVvdGFfZmlsZSBxaF9xZjsKKwl1bnNpZ25lZCBpbnQgKCplMmZzX3JlYWQpKHN0cnVjdCBxdW90YV9maWxlICpxZiwgZXh0Ml9sb2ZmX3Qgb2Zmc2V0LAorCQkJIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IHNpemUpOworCXVuc2lnbmVkIGludCAoKmUyZnNfd3JpdGUpKHN0cnVjdCBxdW90YV9maWxlICpxZiwgZXh0Ml9sb2ZmX3Qgb2Zmc2V0LAorCQkJICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBzaXplKTsKKwlzdHJ1Y3QgcXVvdGFmaWxlX29wcyAqcWhfb3BzOwkvKiBPcGVyYXRpb25zIG9uIHF1b3RhZmlsZSAqLworCXN0cnVjdCB1dGlsX2RxaW5mbyBxaF9pbmZvOwkvKiBHZW5lcmljIHF1b3RhZmlsZSBpbmZvICovCit9OworCisvKiBVdGlsaXR5IHF1b3RhIGJsb2NrICovCitzdHJ1Y3QgdXRpbF9kcWJsayB7CisJcXNpemVfdCBkcWJfaWhhcmRsaW1pdDsKKwlxc2l6ZV90IGRxYl9pc29mdGxpbWl0OworCXFzaXplX3QgZHFiX2N1cmlub2RlczsKKwlxc2l6ZV90IGRxYl9iaGFyZGxpbWl0OworCXFzaXplX3QgZHFiX2Jzb2Z0bGltaXQ7CisJcXNpemVfdCBkcWJfY3Vyc3BhY2U7CisJdGltZV90IGRxYl9idGltZTsKKwl0aW1lX3QgZHFiX2l0aW1lOworCXVuaW9uIHsKKwkJc3RydWN0IHYyX21lbV9kcWJsayB2Ml9tZHFiOworCX0gdTsJCQkvKiBGb3JtYXQgc3BlY2lmaWMgZHF1b3QgaW5mb3JtYXRpb24gKi8KK307CisKKy8qIFN0cnVjdHVyZSBmb3Igb25lIGxvYWRlZCBxdW90YSAqLworc3RydWN0IGRxdW90IHsKKwlzdHJ1Y3QgZHF1b3QgKmRxX25leHQ7CS8qIFBvaW50ZXIgdG8gbmV4dCBkcXVvdCBpbiB0aGUgbGlzdCAqLworCXFpZF90IGRxX2lkOwkJLyogSUQgZHF1b3QgYmVsb25ncyB0byAqLworCWludCBkcV9mbGFnczsJCS8qIFNvbWUgZmxhZ3MgZm9yIHV0aWxzICovCisJc3RydWN0IHF1b3RhX2hhbmRsZSAqZHFfaDsJLyogSGFuZGxlIG9mIHF1b3RhZmlsZSBmb3IgdGhpcyBkcXVvdCAqLworCXN0cnVjdCB1dGlsX2RxYmxrIGRxX2RxYjsJLyogUGFyc2VkIGRhdGEgb2YgZHF1b3QgKi8KK307CisKKyNkZWZpbmUgRFFGX1NFRU4JMHgwMDAxCisKKy8qIFN0cnVjdHVyZSBvZiBxdW90YWZpbGUgb3BlcmF0aW9ucyAqLworc3RydWN0IHF1b3RhZmlsZV9vcHMgeworCS8qIENoZWNrIHdoZXRoZXIgcXVvdGFmaWxlIGlzIGluIG91ciBmb3JtYXQgKi8KKwlpbnQgKCpjaGVja19maWxlKSAoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgaW50IHR5cGUsIGludCBmbXQpOworCS8qIE9wZW4gcXVvdGFmaWxlICovCisJaW50ICgqaW5pdF9pbykgKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgpOworCS8qIENyZWF0ZSBuZXcgcXVvdGFmaWxlICovCisJaW50ICgqbmV3X2lvKSAoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCk7CisJLyogV3JpdGUgYWxsIGNoYW5nZXMgYW5kIGNsb3NlIHF1b3RhZmlsZSAqLworCWludCAoKmVuZF9pbykgKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgpOworCS8qIFdyaXRlIGluZm8gYWJvdXQgcXVvdGFmaWxlICovCisJaW50ICgqd3JpdGVfaW5mbykgKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgpOworCS8qIFJlYWQgZHF1b3QgaW50byBtZW1vcnkgKi8KKwlzdHJ1Y3QgZHF1b3QgKigqcmVhZF9kcXVvdCkgKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIHFpZF90IGlkKTsKKwkvKiBXcml0ZSBnaXZlbiBkcXVvdCB0byBkaXNrICovCisJaW50ICgqY29tbWl0X2RxdW90KSAoc3RydWN0IGRxdW90ICpkcXVvdCk7CisJLyogU2NhbiBxdW90YWZpbGUgYW5kIGNhbGwgY2FsbGJhY2sgb24gZXZlcnkgc3RydWN0dXJlICovCisJaW50ICgqc2Nhbl9kcXVvdHMpIChzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLAorCQkJICAgIGludCAoKnByb2Nlc3NfZHF1b3QpIChzdHJ1Y3QgZHF1b3QgKmRxdW90LAorCQkJCQkJICB2b2lkICpkYXRhKSwKKwkJCSAgICB2b2lkICpkYXRhKTsKKwkvKiBGdW5jdGlvbiB0byBwcmludCBmb3JtYXQgc3BlY2lmaWMgZmlsZSBpbmZvcm1hdGlvbiAqLworCWludCAoKnJlcG9ydCkgKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIGludCB2ZXJib3NlKTsKK307CisKKy8qIFRoaXMgbWlnaHQgZ28gaW50byBhIHNwZWNpYWwgaGVhZGVyIGZpbGUgYnV0IHRoYXQgc291bmRzIGEgYml0IHNpbGx5Li4uICovCitleHRlcm4gc3RydWN0IHF1b3RhZmlsZV9vcHMgcXVvdGFmaWxlX29wc19tZXRhOworCisvKiBPcGVuIGV4aXN0aW5nIHF1b3RhZmlsZSBvZiBnaXZlbiB0eXBlIChhbmQgdmVyaWZ5IGl0cyBmb3JtYXQpIG9uIGdpdmVuCisgKiBmaWxlc3lzdGVtLiAqLworZXJyY29kZV90IHF1b3RhX2ZpbGVfb3BlbihxdW90YV9jdHhfdCBxY3R4LCBzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLAorCQkJICBleHQyX2lub190IHFmX2lubywgaW50IHR5cGUsIGludCBmbXQsIGludCBmbGFncyk7CisKKworLyogQ3JlYXRlIG5ldyBxdW90YWZpbGUgb2Ygc3BlY2lmaWVkIGZvcm1hdCBvbiBnaXZlbiBmaWxlc3lzdGVtICovCitlcnJjb2RlX3QgcXVvdGFfZmlsZV9jcmVhdGUoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgZXh0Ml9maWxzeXMgZnMsCisJCQkgICAgaW50IHR5cGUsIGludCBmbXQpOworCisvKiBDbG9zZSBxdW90YWZpbGUgKi8KK2VycmNvZGVfdCBxdW90YV9maWxlX2Nsb3NlKHF1b3RhX2N0eF90IHFjdHgsIHN0cnVjdCBxdW90YV9oYW5kbGUgKmgpOworCisvKiBHZXQgZW1wdHkgcXVvdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgZHF1b3QgKmdldF9lbXB0eV9kcXVvdCh2b2lkKTsKKworZXJyY29kZV90IHF1b3RhX2lub2RlX3RydW5jYXRlKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubyk7CisKK2NvbnN0IGNoYXIgKnR5cGUybmFtZShpbnQgdHlwZSk7CisKK3ZvaWQgdXBkYXRlX2dyYWNlX3RpbWVzKHN0cnVjdCBkcXVvdCAqcSk7CisKKy8qIHNpemUgZm9yIHRoZSBidWZmZXIgcmV0dXJuZWQgYnkgcXVvdGFfZ2V0X3FmX25hbWUoKTsgbXVzdCBiZSBncmVhdGVyCisgICB0aGFuIG1heGxlbiBvZiBleHRlbnNpb25zW10gYW5kIGZtdG5hbWVzW10gKHBsdXMgMikgZm91bmQgaW4gcXVvdGFpby5jICovCisjZGVmaW5lIFFVT1RBX05BTUVfTEVOIDE2CisKK2NvbnN0IGNoYXIgKnF1b3RhX2dldF9xZl9uYW1lKGludCB0eXBlLCBpbnQgZm10LCBjaGFyICpidWYpOworY29uc3QgY2hhciAqcXVvdGFfZ2V0X3FmX3BhdGgoY29uc3QgY2hhciAqbW50cHQsIGludCBxdHlwZSwgaW50IGZtdCwKKwkJCSAgICAgIGNoYXIgKnBhdGhfYnVmLCBzaXplX3QgcGF0aF9idWZfc2l6ZSk7CisKKy8qIEluIG1rcXVvdGEuYyAqLworZXJyY29kZV90IHF1b3RhX2luaXRfY29udGV4dChxdW90YV9jdHhfdCAqcWN0eCwgZXh0Ml9maWxzeXMgZnMsIGludCBxdHlwZSk7Cit2b2lkIHF1b3RhX2RhdGFfaW5vZGVzKHF1b3RhX2N0eF90IHFjdHgsIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwgZXh0Ml9pbm9fdCBpbm8sCisJCWludCBhZGp1c3QpOwordm9pZCBxdW90YV9kYXRhX2FkZChxdW90YV9jdHhfdCBxY3R4LCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIGV4dDJfaW5vX3QgaW5vLAorCQlxc2l6ZV90IHNwYWNlKTsKK3ZvaWQgcXVvdGFfZGF0YV9zdWIocXVvdGFfY3R4X3QgcWN0eCwgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBleHQyX2lub190IGlubywKKwkJcXNpemVfdCBzcGFjZSk7CitlcnJjb2RlX3QgcXVvdGFfd3JpdGVfaW5vZGUocXVvdGFfY3R4X3QgcWN0eCwgaW50IHF0eXBlKTsKK2VycmNvZGVfdCBxdW90YV91cGRhdGVfbGltaXRzKHF1b3RhX2N0eF90IHFjdHgsIGV4dDJfaW5vX3QgcWZfaW5vLCBpbnQgdHlwZSk7CitlcnJjb2RlX3QgcXVvdGFfY29tcHV0ZV91c2FnZShxdW90YV9jdHhfdCBxY3R4KTsKK3ZvaWQgcXVvdGFfcmVsZWFzZV9jb250ZXh0KHF1b3RhX2N0eF90ICpxY3R4KTsKKworZXJyY29kZV90IHF1b3RhX3JlbW92ZV9pbm9kZShleHQyX2ZpbHN5cyBmcywgaW50IHF0eXBlKTsKK2ludCBxdW90YV9maWxlX2V4aXN0cyhleHQyX2ZpbHN5cyBmcywgaW50IHF0eXBlLCBpbnQgZm10KTsKK3ZvaWQgcXVvdGFfc2V0X3NiX2ludW0oZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLCBpbnQgcXR5cGUpOworZXJyY29kZV90IHF1b3RhX2NvbXBhcmVfYW5kX3VwZGF0ZShxdW90YV9jdHhfdCBxY3R4LCBpbnQgcXR5cGUsCisJCQkJICAgaW50ICp1c2FnZV9pbmNvbnNpc3RlbnQpOworCisKKworI2VuZGlmIC8qIEdVQVJEX1FVT1RBSU9fSCAqLwpkaWZmIC0tZ2l0IGEvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5jIGIvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkN2E5YWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcXVvdGEvcXVvdGFpb190cmVlLmMKQEAgLTAsMCArMSw2NjIgQEAKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBuZXcgcXVvdGFmaWxlIGZvcm1hdAorICoKKyAqIEphbiBLYXJhIDxqYWNrQHN1c2UuY3o+IC0gc3BvbnNvcmVkIGJ5IFN1U0UgQ1IKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicXVvdGFpb190cmVlLmgiCisjaW5jbHVkZSAicXVvdGFpby5oIgorCit0eXBlZGVmIGNoYXIgKmRxYnVmX3Q7CisKKyNkZWZpbmUgZnJlZWRxYnVmKGJ1ZikJCWV4dDJmc19mcmVlX21lbSgmYnVmKQorCitzdGF0aWMgaW5saW5lIGRxYnVmX3QgZ2V0ZHFidWYodm9pZCkKK3sKKwlkcWJ1Zl90IGJ1ZjsKKwlpZiAoZXh0MmZzX2dldF9tZW16ZXJvKFFUX0JMS1NJWkUsICZidWYpKSB7CisJCWxvZ19lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBkcWJ1ZiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gYnVmOworfQorCisvKiBJcyBnaXZlbiBkcXVvdCBlbXB0eT8gKi8KK2ludCBxdHJlZV9lbnRyeV91bnVzZWQoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIGNoYXIgKmRpc2spCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+ZHFpX2VudHJ5X3NpemU7IGkrKykKKwkJaWYgKGRpc2tbaV0pCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworaW50IHF0cmVlX2Rxc3RyX2luX2JsayhzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gKFFUX0JMS1NJWkUgLSBzaXplb2Yoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlcikpIC8KKwkJaW5mby0+ZHFpX2VudHJ5X3NpemU7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2luZGV4KHFpZF90IGlkLCBpbnQgZGVwdGgpCit7CisJcmV0dXJuIChpZCA+PiAoKFFUX1RSRUVERVBUSCAtIGRlcHRoIC0gMSkgKiA4KSkgJiAweGZmOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya19xdW90YWZpbGVfaW5mb19kaXJ0eShzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoKQoreworCWgtPnFoX2lvX2ZsYWdzIHw9IElPRkxfSU5GT0RJUlRZOworfQorCisvKiBSZWFkIGdpdmVuIGJsb2NrICovCitzdGF0aWMgdm9pZCByZWFkX2JsayhzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCB1bnNpZ25lZCBpbnQgYmxrLCBkcWJ1Zl90IGJ1ZikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gaC0+ZTJmc19yZWFkKCZoLT5xaF9xZiwgYmxrIDw8IFFUX0JMS1NJWkVfQklUUywgYnVmLAorCQkJUVRfQkxLU0laRSk7CisJaWYgKGVyciA8IDApCisJCWxvZ19lcnIoIkNhbm5vdCByZWFkIGJsb2NrICV1OiAlcyIsIGJsaywgc3RyZXJyb3IoZXJybm8pKTsKKwllbHNlIGlmIChlcnIgIT0gUVRfQkxLU0laRSkKKwkJbWVtc2V0KGJ1ZiArIGVyciwgMCwgUVRfQkxLU0laRSAtIGVycik7Cit9CisKKy8qIFdyaXRlIGJsb2NrICovCitzdGF0aWMgaW50IHdyaXRlX2JsayhzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCB1bnNpZ25lZCBpbnQgYmxrLCBkcWJ1Zl90IGJ1ZikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gaC0+ZTJmc193cml0ZSgmaC0+cWhfcWYsIGJsayA8PCBRVF9CTEtTSVpFX0JJVFMsIGJ1ZiwKKwkJCVFUX0JMS1NJWkUpOworCWlmIChlcnIgPCAwICYmIGVycm5vICE9IEVOT1NQQykKKwkJbG9nX2VycigiQ2Fubm90IHdyaXRlIGJsb2NrICgldSk6ICVzIiwgYmxrLCBzdHJlcnJvcihlcnJubykpOworCWlmIChlcnIgIT0gUVRfQkxLU0laRSkKKwkJcmV0dXJuIC1FTk9TUEM7CisJcmV0dXJuIDA7Cit9CisKKy8qIEdldCBmcmVlIGJsb2NrIGluIGZpbGUgKGVpdGhlciBmcm9tIGZyZWUgbGlzdCBvciBjcmVhdGUgbmV3IG9uZSkgKi8KK3N0YXRpYyBpbnQgZ2V0X2ZyZWVfZHFibGsoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCkKK3sKKwlkcWJ1Zl90IGJ1ZiA9IGdldGRxYnVmKCk7CisJc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGggPSAoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKWJ1ZjsKKwlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbyA9ICZoLT5xaF9pbmZvLnUudjJfbWRxaS5kcWlfcXRyZWU7CisJaW50IGJsazsKKworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChpbmZvLT5kcWlfZnJlZV9ibGspIHsKKwkJYmxrID0gaW5mby0+ZHFpX2ZyZWVfYmxrOworCQlyZWFkX2JsayhoLCBibGssIGJ1Zik7CisJCWluZm8tPmRxaV9mcmVlX2JsayA9IGV4dDJmc19sZTMyX3RvX2NwdShkaC0+ZHFkaF9uZXh0X2ZyZWUpOworCX0gZWxzZSB7CisJCW1lbXNldChidWYsIDAsIFFUX0JMS1NJWkUpOworCQkvKiBBc3N1cmUgYmxvY2sgYWxsb2NhdGlvbi4uLiAqLworCQlpZiAod3JpdGVfYmxrKGgsIGluZm8tPmRxaV9ibG9ja3MsIGJ1ZikgPCAwKSB7CisJCQlmcmVlZHFidWYoYnVmKTsKKwkJCWxvZ19lcnIoIkNhbm5vdCBhbGxvY2F0ZSBuZXcgcXVvdGEgYmxvY2sgIgorCQkJCSIob3V0IG9mIGRpc2sgc3BhY2UpLiIpOworCQkJcmV0dXJuIC1FTk9TUEM7CisJCX0KKwkJYmxrID0gaW5mby0+ZHFpX2Jsb2NrcysrOworCX0KKwltYXJrX3F1b3RhZmlsZV9pbmZvX2RpcnR5KGgpOworCWZyZWVkcWJ1ZihidWYpOworCXJldHVybiBibGs7Cit9CisKKy8qIFB1dCBnaXZlbiBibG9jayB0byBmcmVlIGxpc3QgKi8KK3N0YXRpYyB2b2lkIHB1dF9mcmVlX2RxYmxrKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIGRxYnVmX3QgYnVmLAorCQkJICAgdW5zaWduZWQgaW50IGJsaykKK3sKKwlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOworCXN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvID0gJmgtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZTsKKworCWRoLT5kcWRoX25leHRfZnJlZSA9IGV4dDJmc19jcHVfdG9fbGUzMihpbmZvLT5kcWlfZnJlZV9ibGspOworCWRoLT5kcWRoX3ByZXZfZnJlZSA9IGV4dDJmc19jcHVfdG9fbGUzMigwKTsKKwlkaC0+ZHFkaF9lbnRyaWVzID0gZXh0MmZzX2NwdV90b19sZTE2KDApOworCWluZm8tPmRxaV9mcmVlX2JsayA9IGJsazsKKwltYXJrX3F1b3RhZmlsZV9pbmZvX2RpcnR5KGgpOworCXdyaXRlX2JsayhoLCBibGssIGJ1Zik7Cit9CisKKy8qIFJlbW92ZSBnaXZlbiBibG9jayBmcm9tIHRoZSBsaXN0IG9mIGJsb2NrcyB3aXRoIGZyZWUgZW50cmllcyAqLworc3RhdGljIHZvaWQgcmVtb3ZlX2ZyZWVfZHFlbnRyeShzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCBkcWJ1Zl90IGJ1ZiwKKwkJCQl1bnNpZ25lZCBpbnQgYmxrKQoreworCWRxYnVmX3QgdG1wYnVmID0gZ2V0ZHFidWYoKTsKKwlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOworCXVuc2lnbmVkIGludCBuZXh0YmxrID0gZXh0MmZzX2xlMzJfdG9fY3B1KGRoLT5kcWRoX25leHRfZnJlZSksIHByZXZibGsgPQorCisJCWV4dDJmc19sZTMyX3RvX2NwdShkaC0+ZHFkaF9wcmV2X2ZyZWUpOworCisJaWYgKCF0bXBidWYpCisJCXJldHVybjsKKworCWlmIChuZXh0YmxrKSB7CisJCXJlYWRfYmxrKGgsIG5leHRibGssIHRtcGJ1Zik7CisJCSgoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKXRtcGJ1ZiktPmRxZGhfcHJldl9mcmVlID0KKwkJCQlkaC0+ZHFkaF9wcmV2X2ZyZWU7CisJCXdyaXRlX2JsayhoLCBuZXh0YmxrLCB0bXBidWYpOworCX0KKwlpZiAocHJldmJsaykgeworCQlyZWFkX2JsayhoLCBwcmV2YmxrLCB0bXBidWYpOworCQkoKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKil0bXBidWYpLT5kcWRoX25leHRfZnJlZSA9CisJCQkJZGgtPmRxZGhfbmV4dF9mcmVlOworCQl3cml0ZV9ibGsoaCwgcHJldmJsaywgdG1wYnVmKTsKKwl9IGVsc2UgeworCQloLT5xaF9pbmZvLnUudjJfbWRxaS5kcWlfcXRyZWUuZHFpX2ZyZWVfZW50cnkgPSBuZXh0YmxrOworCQltYXJrX3F1b3RhZmlsZV9pbmZvX2RpcnR5KGgpOworCX0KKwlmcmVlZHFidWYodG1wYnVmKTsKKwlkaC0+ZHFkaF9uZXh0X2ZyZWUgPSBkaC0+ZHFkaF9wcmV2X2ZyZWUgPSBleHQyZnNfY3B1X3RvX2xlMzIoMCk7CisJd3JpdGVfYmxrKGgsIGJsaywgYnVmKTsJLyogTm8gbWF0dGVyIHdoZXRoZXIgd3JpdGUgc3VjY2VlZHMKKwkJCQkgKiBibG9jayBpcyBvdXQgb2YgbGlzdCAqLworfQorCisvKiBJbnNlcnQgZ2l2ZW4gYmxvY2sgdG8gdGhlIGJlZ2lubmluZyBvZiBsaXN0IHdpdGggZnJlZSBlbnRyaWVzICovCitzdGF0aWMgdm9pZCBpbnNlcnRfZnJlZV9kcWVudHJ5KHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIGRxYnVmX3QgYnVmLAorCQkJCXVuc2lnbmVkIGludCBibGspCit7CisJZHFidWZfdCB0bXBidWYgPSBnZXRkcWJ1ZigpOworCXN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKmRoID0gKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKilidWY7CisJc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8gPSAmaC0+cWhfaW5mby51LnYyX21kcWkuZHFpX3F0cmVlOworCisJaWYgKCF0bXBidWYpCisJCXJldHVybjsKKworCWRoLT5kcWRoX25leHRfZnJlZSA9IGV4dDJmc19jcHVfdG9fbGUzMihpbmZvLT5kcWlfZnJlZV9lbnRyeSk7CisJZGgtPmRxZGhfcHJldl9mcmVlID0gZXh0MmZzX2NwdV90b19sZTMyKDApOworCXdyaXRlX2JsayhoLCBibGssIGJ1Zik7CisJaWYgKGluZm8tPmRxaV9mcmVlX2VudHJ5KSB7CisJCXJlYWRfYmxrKGgsIGluZm8tPmRxaV9mcmVlX2VudHJ5LCB0bXBidWYpOworCQkoKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKil0bXBidWYpLT5kcWRoX3ByZXZfZnJlZSA9CisJCQkJZXh0MmZzX2NwdV90b19sZTMyKGJsayk7CisJCXdyaXRlX2JsayhoLCBpbmZvLT5kcWlfZnJlZV9lbnRyeSwgdG1wYnVmKTsKKwl9CisJZnJlZWRxYnVmKHRtcGJ1Zik7CisJaW5mby0+ZHFpX2ZyZWVfZW50cnkgPSBibGs7CisJbWFya19xdW90YWZpbGVfaW5mb19kaXJ0eShoKTsKK30KKworLyogRmluZCBzcGFjZSBmb3IgZHF1b3QgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9mcmVlX2RxZW50cnkoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwKKwkJCQkgICAgICBzdHJ1Y3QgZHF1b3QgKmRxdW90LCBpbnQgKmVycikKK3sKKwlpbnQgYmxrLCBpOworCXN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKmRoOworCXN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvID0gJmgtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZTsKKwljaGFyICpkZHF1b3Q7CisJZHFidWZfdCBidWY7CisKKwkqZXJyID0gMDsKKwlidWYgPSBnZXRkcWJ1ZigpOworCWlmICghYnVmKSB7CisJCSplcnIgPSAtRU5PTUVNOworCQlyZXR1cm4gMDsKKwl9CisKKwlkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOworCWlmIChpbmZvLT5kcWlfZnJlZV9lbnRyeSkgeworCQlibGsgPSBpbmZvLT5kcWlfZnJlZV9lbnRyeTsKKwkJcmVhZF9ibGsoaCwgYmxrLCBidWYpOworCX0gZWxzZSB7CisJCWJsayA9IGdldF9mcmVlX2RxYmxrKGgpOworCQlpZiAoYmxrIDwgMCkgeworCQkJZnJlZWRxYnVmKGJ1Zik7CisJCQkqZXJyID0gYmxrOworCQkJcmV0dXJuIDA7CisJCX0KKwkJbWVtc2V0KGJ1ZiwgMCwgUVRfQkxLU0laRSk7CisJCWluZm8tPmRxaV9mcmVlX2VudHJ5ID0gYmxrOworCQltYXJrX3F1b3RhZmlsZV9pbmZvX2RpcnR5KGgpOworCX0KKworCS8qIEJsb2NrIHdpbGwgYmUgZnVsbD8gKi8KKwlpZiAoZXh0MmZzX2xlMTZfdG9fY3B1KGRoLT5kcWRoX2VudHJpZXMpICsgMSA+PQorCSAgICBxdHJlZV9kcXN0cl9pbl9ibGsoaW5mbykpCisJCXJlbW92ZV9mcmVlX2RxZW50cnkoaCwgYnVmLCBibGspOworCisJZGgtPmRxZGhfZW50cmllcyA9CisJCWV4dDJmc19jcHVfdG9fbGUxNihleHQyZnNfbGUxNl90b19jcHUoZGgtPmRxZGhfZW50cmllcykgKyAxKTsKKwkvKiBGaW5kIGZyZWUgc3RydWN0dXJlIGluIGJsb2NrICovCisJZGRxdW90ID0gYnVmICsgc2l6ZW9mKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIpOworCWZvciAoaSA9IDA7CisJICAgICBpIDwgcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pICYmICFxdHJlZV9lbnRyeV91bnVzZWQoaW5mbywgZGRxdW90KTsKKwkgICAgIGkrKykKKwkJZGRxdW90ICs9IGluZm8tPmRxaV9lbnRyeV9zaXplOworCisJaWYgKGkgPT0gcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pKQorCQlsb2dfZXJyKCJmaW5kX2ZyZWVfZHFlbnRyeSgpOiBEYXRhIGJsb2NrIGZ1bGwgdW5leHBlY3RlZGx5LiIpOworCisJd3JpdGVfYmxrKGgsIGJsaywgYnVmKTsKKwlkcXVvdC0+ZHFfZHFiLnUudjJfbWRxYi5kcWJfb2ZmID0KKwkJKGJsayA8PCBRVF9CTEtTSVpFX0JJVFMpICsgc2l6ZW9mKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIpICsKKwkJaSAqIGluZm8tPmRxaV9lbnRyeV9zaXplOworCWZyZWVkcWJ1ZihidWYpOworCXJldHVybiBibGs7Cit9CisKKy8qIEluc2VydCByZWZlcmVuY2UgdG8gc3RydWN0dXJlIGludG8gdGhlIHRyaWUgKi8KK3N0YXRpYyBpbnQgZG9faW5zZXJ0X3RyZWUoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgc3RydWN0IGRxdW90ICpkcXVvdCwKKwkJCSAgdW5zaWduZWQgaW50ICogdHJlZWJsaywgaW50IGRlcHRoKQoreworCWRxYnVmX3QgYnVmOworCWludCBuZXdzb24gPSAwLCBuZXdhY3QgPSAwOworCV9fdTMyICpyZWY7CisJdW5zaWduZWQgaW50IG5ld2JsazsKKwlpbnQgcmV0ID0gMDsKKworCWxvZ19kZWJ1ZygiaW5zZXJ0aW5nIGluIHRyZWU6IHRyZWVibGs9JXUsIGRlcHRoPSVkIiwgKnRyZWVibGssIGRlcHRoKTsKKwlidWYgPSBnZXRkcWJ1ZigpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICghKnRyZWVibGspIHsKKwkJcmV0ID0gZ2V0X2ZyZWVfZHFibGsoaCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfYnVmOworCQkqdHJlZWJsayA9IHJldDsKKwkJbWVtc2V0KGJ1ZiwgMCwgUVRfQkxLU0laRSk7CisJCW5ld2FjdCA9IDE7CisJfSBlbHNlIHsKKwkJcmVhZF9ibGsoaCwgKnRyZWVibGssIGJ1Zik7CisJfQorCisJcmVmID0gKF9fdTMyICopIGJ1ZjsKKwluZXdibGsgPSBleHQyZnNfbGUzMl90b19jcHUocmVmW2dldF9pbmRleChkcXVvdC0+ZHFfaWQsIGRlcHRoKV0pOworCWlmICghbmV3YmxrKQorCQluZXdzb24gPSAxOworCWlmIChkZXB0aCA9PSBRVF9UUkVFREVQVEggLSAxKSB7CisJCWlmIChuZXdibGspCisJCQlsb2dfZXJyKCJJbnNlcnRpbmcgYWxyZWFkeSBwcmVzZW50IHF1b3RhIGVudHJ5ICIKKwkJCQkiKGJsb2NrICV1KS4iLAorCQkJCXJlZltnZXRfaW5kZXgoZHF1b3QtPmRxX2lkLCBkZXB0aCldKTsKKwkJbmV3YmxrID0gZmluZF9mcmVlX2RxZW50cnkoaCwgZHF1b3QsICZyZXQpOworCX0gZWxzZSB7CisJCXJldCA9IGRvX2luc2VydF90cmVlKGgsIGRxdW90LCAmbmV3YmxrLCBkZXB0aCArIDEpOworCX0KKworCWlmIChuZXdzb24gJiYgcmV0ID49IDApIHsKKwkJcmVmW2dldF9pbmRleChkcXVvdC0+ZHFfaWQsIGRlcHRoKV0gPQorCQkJZXh0MmZzX2NwdV90b19sZTMyKG5ld2Jsayk7CisJCXdyaXRlX2JsayhoLCAqdHJlZWJsaywgYnVmKTsKKwl9IGVsc2UgaWYgKG5ld2FjdCAmJiByZXQgPCAwKSB7CisJCXB1dF9mcmVlX2RxYmxrKGgsIGJ1ZiwgKnRyZWVibGspOworCX0KKworb3V0X2J1ZjoKKwlmcmVlZHFidWYoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBXcmFwcGVyIGZvciBpbnNlcnRpbmcgcXVvdGEgc3RydWN0dXJlIGludG8gdHJlZSAqLworc3RhdGljIHZvaWQgZHFfaW5zZXJ0X3RyZWUoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wID0gUVRfVFJFRU9GRjsKKworCWlmIChkb19pbnNlcnRfdHJlZShoLCBkcXVvdCwgJnRtcCwgMCkgPCAwKQorCQlsb2dfZXJyKCJDYW5ub3Qgd3JpdGUgcXVvdGEgKGlkICV1KTogJXMiLAorCQkJKHVuc2lnbmVkIGludCkgZHF1b3QtPmRxX2lkLCBzdHJlcnJvcihlcnJubykpOworfQorCisvKiBXcml0ZSBkcXVvdCB0byBmaWxlICovCit2b2lkIHF0cmVlX3dyaXRlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJc3NpemVfdCByZXQ7CisJY2hhciAqZGRxdW90OworCXN0cnVjdCBxdW90YV9oYW5kbGUgKmggPSBkcXVvdC0+ZHFfaDsKKwlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbyA9CisJCQkmZHF1b3QtPmRxX2gtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZTsKKwlsb2dfZGVidWcoIndyaXRpbmcgZGRxdW90IDE6IG9mZj0lbGx1LCBpbmZvLT5kcWlfZW50cnlfc2l6ZT0ldSIsCisJCQlkcXVvdC0+ZHFfZHFiLnUudjJfbWRxYi5kcWJfb2ZmLAorCQkJaW5mby0+ZHFpX2VudHJ5X3NpemUpOworCXJldCA9IGV4dDJmc19nZXRfbWVtKGluZm8tPmRxaV9lbnRyeV9zaXplLCAmZGRxdW90KTsKKwlpZiAocmV0KSB7CisJCWVycm5vID0gRU5PTUVNOworCQlsb2dfZXJyKCJRdW90YSB3cml0ZSBmYWlsZWQgKGlkICV1KTogJXMiLAorCQkJKHVuc2lnbmVkIGludClkcXVvdC0+ZHFfaWQsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybjsKKwl9CisJbWVtc2V0KGRkcXVvdCwgMCwgaW5mby0+ZHFpX2VudHJ5X3NpemUpOworCisJaWYgKCFkcXVvdC0+ZHFfZHFiLnUudjJfbWRxYi5kcWJfb2ZmKQorCQlkcV9pbnNlcnRfdHJlZShkcXVvdC0+ZHFfaCwgZHF1b3QpOworCWluZm8tPmRxaV9vcHMtPm1lbTJkaXNrX2RxYmxrKGRkcXVvdCwgZHF1b3QpOworCWxvZ19kZWJ1Zygid3JpdGluZyBkZHF1b3QgMjogb2ZmPSVsbHUsIGluZm8tPmRxaV9lbnRyeV9zaXplPSV1IiwKKwkJCWRxdW90LT5kcV9kcWIudS52Ml9tZHFiLmRxYl9vZmYsCisJCQlpbmZvLT5kcWlfZW50cnlfc2l6ZSk7CisJcmV0ID0gaC0+ZTJmc193cml0ZSgmaC0+cWhfcWYsIGRxdW90LT5kcV9kcWIudS52Ml9tZHFiLmRxYl9vZmYsIGRkcXVvdCwKKwkJCWluZm8tPmRxaV9lbnRyeV9zaXplKTsKKworCWlmIChyZXQgIT0gaW5mby0+ZHFpX2VudHJ5X3NpemUpIHsKKwkJaWYgKHJldCA+IDApCisJCQllcnJubyA9IEVOT1NQQzsKKwkJbG9nX2VycigiUXVvdGEgd3JpdGUgZmFpbGVkIChpZCAldSk6ICVzIiwKKwkJCSh1bnNpZ25lZCBpbnQpZHF1b3QtPmRxX2lkLCBzdHJlcnJvcihlcnJubykpOworCX0KKwlleHQyZnNfZnJlZV9tZW0oJmRkcXVvdCk7Cit9CisKKy8qIEZyZWUgZHF1b3QgZW50cnkgaW4gZGF0YSBibG9jayAqLworc3RhdGljIHZvaWQgZnJlZV9kcWVudHJ5KHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIHN0cnVjdCBkcXVvdCAqZHF1b3QsCisJCQkgdW5zaWduZWQgaW50IGJsaykKK3sKKwlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaDsKKwlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbyA9ICZoLT5xaF9pbmZvLnUudjJfbWRxaS5kcWlfcXRyZWU7CisJZHFidWZfdCBidWYgPSBnZXRkcWJ1ZigpOworCisJaWYgKCFidWYpCisJCXJldHVybjsKKworCWlmIChkcXVvdC0+ZHFfZHFiLnUudjJfbWRxYi5kcWJfb2ZmID4+IFFUX0JMS1NJWkVfQklUUyAhPSBibGspCisJCWxvZ19lcnIoIlF1b3RhIHN0cnVjdHVyZSBoYXMgb2Zmc2V0IHRvIG90aGVyIGJsb2NrICgldSkgIgorCQkJInRoYW4gaXQgc2hvdWxkICgldSkuIiwgYmxrLAorCQkJICAodW5zaWduZWQgaW50KSAoZHF1b3QtPmRxX2RxYi51LnYyX21kcWIuZHFiX29mZiA+PgorCQkJCSAgUVRfQkxLU0laRV9CSVRTKSk7CisKKwlyZWFkX2JsayhoLCBibGssIGJ1Zik7CisJZGggPSAoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKWJ1ZjsKKwlkaC0+ZHFkaF9lbnRyaWVzID0KKwkJZXh0MmZzX2NwdV90b19sZTE2KGV4dDJmc19sZTE2X3RvX2NwdShkaC0+ZHFkaF9lbnRyaWVzKSAtIDEpOworCisJaWYgKCFleHQyZnNfbGUxNl90b19jcHUoZGgtPmRxZGhfZW50cmllcykpIHsJLyogQmxvY2sgZ290IGZyZWU/ICovCisJCXJlbW92ZV9mcmVlX2RxZW50cnkoaCwgYnVmLCBibGspOworCQlwdXRfZnJlZV9kcWJsayhoLCBidWYsIGJsayk7CisJfSBlbHNlIHsKKwkJbWVtc2V0KGJ1ZiArIChkcXVvdC0+ZHFfZHFiLnUudjJfbWRxYi5kcWJfb2ZmICYKKwkJCSAgICAgICgoMSA8PCBRVF9CTEtTSVpFX0JJVFMpIC0gMSkpLAorCQkgICAgICAgMCwgaW5mby0+ZHFpX2VudHJ5X3NpemUpOworCisJCS8qIEZpcnN0IGZyZWUgZW50cnk/ICovCisJCWlmIChleHQyZnNfbGUxNl90b19jcHUoZGgtPmRxZGhfZW50cmllcykgPT0KKwkJCQlxdHJlZV9kcXN0cl9pbl9ibGsoaW5mbykgLSAxKQorCQkJLyogVGhpcyB3aWxsIGFsc28gd3JpdGUgZGF0YSBibG9jayAqLworCQkJaW5zZXJ0X2ZyZWVfZHFlbnRyeShoLCBidWYsIGJsayk7CisJCWVsc2UKKwkJCXdyaXRlX2JsayhoLCBibGssIGJ1Zik7CisJfQorCWRxdW90LT5kcV9kcWIudS52Ml9tZHFiLmRxYl9vZmYgPSAwOworCWZyZWVkcWJ1ZihidWYpOworfQorCisvKiBSZW1vdmUgcmVmZXJlbmNlIHRvIGRxdW90IGZyb20gdHJlZSAqLworc3RhdGljIHZvaWQgcmVtb3ZlX3RyZWUoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgc3RydWN0IGRxdW90ICpkcXVvdCwKKwkJCXVuc2lnbmVkIGludCAqIGJsaywgaW50IGRlcHRoKQoreworCWRxYnVmX3QgYnVmID0gZ2V0ZHFidWYoKTsKKwl1bnNpZ25lZCBpbnQgbmV3YmxrOworCV9fdTMyICpyZWYgPSAoX191MzIgKikgYnVmOworCisJaWYgKCFidWYpCisJCXJldHVybjsKKworCXJlYWRfYmxrKGgsICpibGssIGJ1Zik7CisJbmV3YmxrID0gZXh0MmZzX2xlMzJfdG9fY3B1KHJlZltnZXRfaW5kZXgoZHF1b3QtPmRxX2lkLCBkZXB0aCldKTsKKwlpZiAoZGVwdGggPT0gUVRfVFJFRURFUFRIIC0gMSkgeworCQlmcmVlX2RxZW50cnkoaCwgZHF1b3QsIG5ld2Jsayk7CisJCW5ld2JsayA9IDA7CisJfSBlbHNlIHsKKwkJcmVtb3ZlX3RyZWUoaCwgZHF1b3QsICZuZXdibGssIGRlcHRoICsgMSk7CisJfQorCisJaWYgKCFuZXdibGspIHsKKwkJaW50IGk7CisKKwkJcmVmW2dldF9pbmRleChkcXVvdC0+ZHFfaWQsIGRlcHRoKV0gPSBleHQyZnNfY3B1X3RvX2xlMzIoMCk7CisKKwkJLyogQmxvY2sgZ290IGVtcHR5PyAqLworCQlmb3IgKGkgPSAwOyBpIDwgUVRfQkxLU0laRSAmJiAhYnVmW2ldOyBpKyspOworCisJCS8qIERvbid0IHB1dCB0aGUgcm9vdCBibG9jayBpbnRvIHRoZSBmcmVlIGJsb2NrIGxpc3QgKi8KKwkJaWYgKGkgPT0gUVRfQkxLU0laRSAmJiAqYmxrICE9IFFUX1RSRUVPRkYpIHsKKwkJCXB1dF9mcmVlX2RxYmxrKGgsIGJ1ZiwgKmJsayk7CisJCQkqYmxrID0gMDsKKwkJfSBlbHNlIHsKKwkJCXdyaXRlX2JsayhoLCAqYmxrLCBidWYpOworCQl9CisJfQorCWZyZWVkcWJ1ZihidWYpOworfQorCisvKiBEZWxldGUgZHF1b3QgZnJvbSB0cmVlICovCit2b2lkIHF0cmVlX2RlbGV0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXVuc2lnbmVkIGludCB0bXAgPSBRVF9UUkVFT0ZGOworCisJaWYgKCFkcXVvdC0+ZHFfZHFiLnUudjJfbWRxYi5kcWJfb2ZmKQkvKiBFdmVuIG5vdCBhbGxvY2F0ZWQ/ICovCisJCXJldHVybjsKKwlyZW1vdmVfdHJlZShkcXVvdC0+ZHFfaCwgZHF1b3QsICZ0bXAsIDApOworfQorCisvKiBGaW5kIGVudHJ5IGluIGJsb2NrICovCitzdGF0aWMgZXh0Ml9sb2ZmX3QgZmluZF9ibG9ja19kcWVudHJ5KHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsCisJCQkJICAgICAgc3RydWN0IGRxdW90ICpkcXVvdCwgdW5zaWduZWQgaW50IGJsaykKK3sKKwlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbyA9ICZoLT5xaF9pbmZvLnUudjJfbWRxaS5kcWlfcXRyZWU7CisJZHFidWZfdCBidWYgPSBnZXRkcWJ1ZigpOworCWludCBpOworCWNoYXIgKmRkcXVvdCA9IGJ1ZiArIHNpemVvZihzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyKTsKKworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlYWRfYmxrKGgsIGJsaywgYnVmKTsKKwlmb3IgKGkgPSAwOworCSAgICAgaSA8IHF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKSAmJiAhaW5mby0+ZHFpX29wcy0+aXNfaWQoZGRxdW90LCBkcXVvdCk7CisJICAgICBpKyspCisJCWRkcXVvdCArPSBpbmZvLT5kcWlfZW50cnlfc2l6ZTsKKworCWlmIChpID09IHF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKSkKKwkJbG9nX2VycigiUXVvdGEgZm9yIGlkICV1IHJlZmVyZW5jZWQgYnV0IG5vdCBwcmVzZW50LiIsCisJCQlkcXVvdC0+ZHFfaWQpOworCWZyZWVkcWJ1ZihidWYpOworCXJldHVybiAoYmxrIDw8IFFUX0JMS1NJWkVfQklUUykgKyBzaXplb2Yoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlcikgKworCQlpICogaW5mby0+ZHFpX2VudHJ5X3NpemU7Cit9CisKKy8qIEZpbmQgZW50cnkgZm9yIGdpdmVuIGlkIGluIHRoZSB0cmVlICovCitzdGF0aWMgZXh0Ml9sb2ZmX3QgZmluZF90cmVlX2RxZW50cnkoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwKKwkJCQkgICAgIHN0cnVjdCBkcXVvdCAqZHF1b3QsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgYmxrLCBpbnQgZGVwdGgpCit7CisJZHFidWZfdCBidWYgPSBnZXRkcWJ1ZigpOworCWV4dDJfbG9mZl90IHJldCA9IDA7CisJX191MzIgKnJlZiA9IChfX3UzMiAqKSBidWY7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZWFkX2JsayhoLCBibGssIGJ1Zik7CisJcmV0ID0gMDsKKwlibGsgPSBleHQyZnNfbGUzMl90b19jcHUocmVmW2dldF9pbmRleChkcXVvdC0+ZHFfaWQsIGRlcHRoKV0pOworCWlmICghYmxrKQkvKiBObyByZWZlcmVuY2U/ICovCisJCWdvdG8gb3V0X2J1ZjsKKwlpZiAoZGVwdGggPCBRVF9UUkVFREVQVEggLSAxKQorCQlyZXQgPSBmaW5kX3RyZWVfZHFlbnRyeShoLCBkcXVvdCwgYmxrLCBkZXB0aCArIDEpOworCWVsc2UKKwkJcmV0ID0gZmluZF9ibG9ja19kcWVudHJ5KGgsIGRxdW90LCBibGspOworb3V0X2J1ZjoKKwlmcmVlZHFidWYoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBGaW5kIGVudHJ5IGZvciBnaXZlbiBpZCBpbiB0aGUgdHJlZSAtIHdyYXBwZXIgZnVuY3Rpb24gKi8KK3N0YXRpYyBpbmxpbmUgZXh0Ml9sb2ZmX3QgZmluZF9kcWVudHJ5KHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsCisJCQkJICAgICAgIHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJcmV0dXJuIGZpbmRfdHJlZV9kcWVudHJ5KGgsIGRxdW90LCBRVF9UUkVFT0ZGLCAwKTsKK30KKworLyoKKyAqICBSZWFkIGRxdW90IGZyb20gZGlzay4KKyAqLworc3RydWN0IGRxdW90ICpxdHJlZV9yZWFkX2RxdW90KHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIHFpZF90IGlkKQoreworCXN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvID0gJmgtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZTsKKwlleHQyX2xvZmZfdCBvZmZzZXQ7CisJc3NpemVfdCByZXQ7CisJY2hhciAqZGRxdW90OworCXN0cnVjdCBkcXVvdCAqZHF1b3QgPSBnZXRfZW1wdHlfZHF1b3QoKTsKKworCWlmICghZHF1b3QpCisJCXJldHVybiBOVUxMOworCWlmIChleHQyZnNfZ2V0X21lbShpbmZvLT5kcWlfZW50cnlfc2l6ZSwgJmRkcXVvdCkpIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZkcXVvdCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWRxdW90LT5kcV9pZCA9IGlkOworCWRxdW90LT5kcV9oID0gaDsKKwlkcXVvdC0+ZHFfZHFiLnUudjJfbWRxYi5kcWJfb2ZmID0gMDsKKwltZW1zZXQoJmRxdW90LT5kcV9kcWIsIDAsIHNpemVvZihzdHJ1Y3QgdXRpbF9kcWJsaykpOworCisJb2Zmc2V0ID0gZmluZF9kcWVudHJ5KGgsIGRxdW90KTsKKwlpZiAob2Zmc2V0ID4gMCkgeworCQlkcXVvdC0+ZHFfZHFiLnUudjJfbWRxYi5kcWJfb2ZmID0gb2Zmc2V0OworCQlyZXQgPSBoLT5lMmZzX3JlYWQoJmgtPnFoX3FmLCBvZmZzZXQsIGRkcXVvdCwKKwkJCWluZm8tPmRxaV9lbnRyeV9zaXplKTsKKwkJaWYgKHJldCAhPSBpbmZvLT5kcWlfZW50cnlfc2l6ZSkgeworCQkJaWYgKHJldCA+IDApCisJCQkJZXJybm8gPSBFSU87CisJCQlsb2dfZXJyKCJDYW5ub3QgcmVhZCBxdW90YSBzdHJ1Y3R1cmUgZm9yIGlkICV1OiAlcyIsCisJCQkJZHF1b3QtPmRxX2lkLCBzdHJlcnJvcihlcnJubykpOworCQl9CisJCWluZm8tPmRxaV9vcHMtPmRpc2sybWVtX2RxYmxrKGRxdW90LCBkZHF1b3QpOworCX0KKwlleHQyZnNfZnJlZV9tZW0oJmRkcXVvdCk7CisJcmV0dXJuIGRxdW90OworfQorCisvKgorICogU2NhbiBhbGwgZHF1b3RzIGluIGZpbGUgYW5kIGNhbGwgY2FsbGJhY2sgb24gZWFjaAorICovCisjZGVmaW5lIHNldF9iaXQoYm1wLCBpbmQpICgoYm1wKVsoaW5kKSA+PiAzXSB8PSAoMSA8PCAoKGluZCkgJiA3KSkpCisjZGVmaW5lIGdldF9iaXQoYm1wLCBpbmQpICgoYm1wKVsoaW5kKSA+PiAzXSAmICgxIDw8ICgoaW5kKSAmIDcpKSkKKworc3RhdGljIGludCByZXBvcnRfYmxvY2soc3RydWN0IGRxdW90ICpkcXVvdCwgdW5zaWduZWQgaW50IGJsaywgY2hhciAqYml0bWFwLAorCQkJaW50ICgqcHJvY2Vzc19kcXVvdCkgKHN0cnVjdCBkcXVvdCAqLCB2b2lkICopLAorCQkJdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbyA9CisJCQkmZHF1b3QtPmRxX2gtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZTsKKwlkcWJ1Zl90IGJ1ZiA9IGdldGRxYnVmKCk7CisJc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGg7CisJY2hhciAqZGRhdGE7CisJaW50IGVudHJpZXMsIGk7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDA7CisKKwlzZXRfYml0KGJpdG1hcCwgYmxrKTsKKwlyZWFkX2JsayhkcXVvdC0+ZHFfaCwgYmxrLCBidWYpOworCWRoID0gKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKilidWY7CisJZGRhdGEgPSBidWYgKyBzaXplb2Yoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlcik7CisJZW50cmllcyA9IGV4dDJmc19sZTE2X3RvX2NwdShkaC0+ZHFkaF9lbnRyaWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pOworCQkJaSsrLCBkZGF0YSArPSBpbmZvLT5kcWlfZW50cnlfc2l6ZSkKKwkJaWYgKCFxdHJlZV9lbnRyeV91bnVzZWQoaW5mbywgZGRhdGEpKSB7CisJCQlkcXVvdC0+ZHFfZHFiLnUudjJfbWRxYi5kcWJfb2ZmID0KKwkJCQkoYmxrIDw8IFFUX0JMS1NJWkVfQklUUykgKworCQkJCXNpemVvZihzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyKSArCisJCQkJaSAqIGluZm8tPmRxaV9lbnRyeV9zaXplOworCQkJaW5mby0+ZHFpX29wcy0+ZGlzazJtZW1fZHFibGsoZHF1b3QsIGRkYXRhKTsKKwkJCWlmIChwcm9jZXNzX2RxdW90KGRxdW90LCBkYXRhKSA8IDApCisJCQkJYnJlYWs7CisJCX0KKwlmcmVlZHFidWYoYnVmKTsKKwlyZXR1cm4gZW50cmllczsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfcmVmZXJlbmNlKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIHVuc2lnbmVkIGludCBibGspCit7CisJaWYgKGJsayA+PSBoLT5xaF9pbmZvLnUudjJfbWRxaS5kcWlfcXRyZWUuZHFpX2Jsb2NrcykKKwkJbG9nX2VycigiSWxsZWdhbCByZWZlcmVuY2UgKCV1ID49ICV1KSBpbiAlcyBxdW90YSBmaWxlLiAiCisJCQkiUXVvdGEgZmlsZSBpcyBwcm9iYWJseSBjb3JydXB0ZWQuXG4iCisJCQkiUGxlYXNlIHJ1biBlMmZzY2sgKDgpIHRvIGZpeCBpdC4iLAorCQkJYmxrLAorCQkJaC0+cWhfaW5mby51LnYyX21kcWkuZHFpX3F0cmVlLmRxaV9ibG9ja3MsCisJCQl0eXBlMm5hbWUoaC0+cWhfdHlwZSkpOworfQorCitzdGF0aWMgaW50IHJlcG9ydF90cmVlKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHVuc2lnbmVkIGludCBibGssIGludCBkZXB0aCwKKwkJICAgICAgIGNoYXIgKmJpdG1hcCwKKwkJICAgICAgIGludCAoKnByb2Nlc3NfZHF1b3QpIChzdHJ1Y3QgZHF1b3QgKiwgdm9pZCAqKSwKKwkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJaW50IGVudHJpZXMgPSAwLCBpOworCWRxYnVmX3QgYnVmID0gZ2V0ZHFidWYoKTsKKwlfX3UzMiAqcmVmID0gKF9fdTMyICopIGJ1ZjsKKworCWlmICghYnVmKQorCQlyZXR1cm4gMDsKKworCXJlYWRfYmxrKGRxdW90LT5kcV9oLCBibGssIGJ1Zik7CisJaWYgKGRlcHRoID09IFFUX1RSRUVERVBUSCAtIDEpIHsKKwkJZm9yIChpID0gMDsgaSA8IFFUX0JMS1NJWkUgPj4gMjsgaSsrKSB7CisJCQlibGsgPSBleHQyZnNfbGUzMl90b19jcHUocmVmW2ldKTsKKwkJCWNoZWNrX3JlZmVyZW5jZShkcXVvdC0+ZHFfaCwgYmxrKTsKKwkJCWlmIChibGsgJiYgIWdldF9iaXQoYml0bWFwLCBibGspKQorCQkJCWVudHJpZXMgKz0gcmVwb3J0X2Jsb2NrKGRxdW90LCBibGssIGJpdG1hcCwKKwkJCQkJCQlwcm9jZXNzX2RxdW90LCBkYXRhKTsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBRVF9CTEtTSVpFID4+IDI7IGkrKykgeworCQkJYmxrID0gZXh0MmZzX2xlMzJfdG9fY3B1KHJlZltpXSk7CisJCQlpZiAoYmxrKSB7CisJCQkJY2hlY2tfcmVmZXJlbmNlKGRxdW90LT5kcV9oLCBibGspOworCQkJCWVudHJpZXMgKz0gcmVwb3J0X3RyZWUoZHF1b3QsIGJsaywgZGVwdGggKyAxLAorCQkJCQkJICAgICAgIGJpdG1hcCwgcHJvY2Vzc19kcXVvdCwKKwkJCQkJCSAgICAgICBkYXRhKTsKKwkJCX0KKwkJfQorCX0KKwlmcmVlZHFidWYoYnVmKTsKKwlyZXR1cm4gZW50cmllczsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX3NldF9iaXRzKGNoYXIgKmJtcCwgaW50IGJsb2NrcykKK3sKKwl1bnNpZ25lZCBpbnQgaSwgdXNlZCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmxvY2tzOyBpKyspCisJCWlmIChnZXRfYml0KGJtcCwgaSkpCisJCQl1c2VkKys7CisJcmV0dXJuIHVzZWQ7Cit9CisKK2ludCBxdHJlZV9zY2FuX2RxdW90cyhzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLAorCQkgICAgICBpbnQgKCpwcm9jZXNzX2RxdW90KSAoc3RydWN0IGRxdW90ICosIHZvaWQgKiksCisJCSAgICAgIHZvaWQgKmRhdGEpCit7CisJY2hhciAqYml0bWFwOworCXN0cnVjdCB2Ml9tZW1fZHFpbmZvICp2MmluZm8gPSAmaC0+cWhfaW5mby51LnYyX21kcWk7CisJc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8gPSAmdjJpbmZvLT5kcWlfcXRyZWU7CisJc3RydWN0IGRxdW90ICpkcXVvdCA9IGdldF9lbXB0eV9kcXVvdCgpOworCisJaWYgKCFkcXVvdCkKKwkJcmV0dXJuIC0xOworCisJZHF1b3QtPmRxX2ggPSBoOworCWlmIChleHQyZnNfZ2V0X21lbXplcm8oKGluZm8tPmRxaV9ibG9ja3MgKyA3KSA+PiAzLCAmYml0bWFwKSkgeworCQlleHQyZnNfZnJlZV9tZW0oJmRxdW90KTsKKwkJcmV0dXJuIC0xOworCX0KKwl2MmluZm8tPmRxaV91c2VkX2VudHJpZXMgPSByZXBvcnRfdHJlZShkcXVvdCwgUVRfVFJFRU9GRiwgMCwgYml0bWFwLAorCQkJCQkgICAgICAgcHJvY2Vzc19kcXVvdCwgZGF0YSk7CisJdjJpbmZvLT5kcWlfZGF0YV9ibG9ja3MgPSBmaW5kX3NldF9iaXRzKGJpdG1hcCwgaW5mby0+ZHFpX2Jsb2Nrcyk7CisJZXh0MmZzX2ZyZWVfbWVtKCZiaXRtYXApOworCWV4dDJmc19mcmVlX21lbSgmZHF1b3QpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIGIvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMzRlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcXVvdGEvcXVvdGFpb190cmVlLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIERlZmluaXRpb25zIG9mIHN0cnVjdHVyZXMgZm9yIHZmc3YwIHF1b3RhIGZvcm1hdAorICovCisKKyNpZm5kZWYgX0xJTlVYX1FVT1RBX1RSRUVfSAorI2RlZmluZSBfTElOVVhfUVVPVEFfVFJFRV9ICisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKwordHlwZWRlZiBfX3UzMiBxaWRfdDsgICAgICAgIC8qIFR5cGUgaW4gd2hpY2ggd2Ugc3RvcmUgaWRzIGluIG1lbW9yeSAqLworCisjZGVmaW5lIFFUX1RSRUVPRkYJMQkvKiBPZmZzZXQgb2YgdHJlZSBpbiBmaWxlIGluIGJsb2NrcyAqLworI2RlZmluZSBRVF9UUkVFREVQVEgJNAkvKiBEZXB0aCBvZiBxdW90YSB0cmVlICovCisjZGVmaW5lIFFUX0JMS1NJWkVfQklUUwkxMAorI2RlZmluZSBRVF9CTEtTSVpFICgxIDw8IFFUX0JMS1NJWkVfQklUUykJLyogU2l6ZSBvZiBibG9jayB3aXRoIHF1b3RhCisJCQkJCQkgKiBzdHJ1Y3R1cmVzICovCisKKy8qCisgKiAgU3RydWN0dXJlIG9mIGhlYWRlciBvZiBibG9jayB3aXRoIHF1b3RhIHN0cnVjdHVyZXMuIEl0IGlzIHBhZGRlZCB0byAxNiBieXRlcworICogIHNvIHRoZXJlIHdpbGwgYmUgc3BhY2UgZm9yIGV4YWN0bHkgMjEgcXVvdGEtZW50cmllcyBpbiBhIGJsb2NrCisgKi8KK3N0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgeworCV9fdTMyIGRxZGhfbmV4dF9mcmVlOwkvKiBOdW1iZXIgb2YgbmV4dCBibG9jayB3aXRoIGZyZWUKKwkJCQkJICogZW50cnkgKi8KKwlfX3UzMiBkcWRoX3ByZXZfZnJlZTsgLyogTnVtYmVyIG9mIHByZXZpb3VzIGJsb2NrIHdpdGggZnJlZQorCQkJCSAgICogZW50cnkgKi8KKwlfX3UxNiBkcWRoX2VudHJpZXM7IC8qIE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIGJsb2NrICovCisJX191MTYgZHFkaF9wYWQxOworCV9fdTMyIGRxZGhfcGFkMjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgZHF1b3Q7CitzdHJ1Y3QgcXVvdGFfaGFuZGxlOworCisvKiBPcGVyYXRpb25zICovCitzdHJ1Y3QgcXRyZWVfZm10X29wZXJhdGlvbnMgeworCS8qIENvbnZlcnQgZ2l2ZW4gZW50cnkgZnJvbSBpbiBtZW1vcnkgZm9ybWF0IHRvIGRpc2sgb25lICovCisJdm9pZCAoKm1lbTJkaXNrX2RxYmxrKSh2b2lkICpkaXNrLCBzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKKwkvKiBDb252ZXJ0IGdpdmVuIGVudHJ5IGZyb20gZGlzayBmb3JtYXQgdG8gaW4gbWVtb3J5IG9uZSAqLworCXZvaWQgKCpkaXNrMm1lbV9kcWJsaykoc3RydWN0IGRxdW90ICpkcXVvdCwgdm9pZCAqZGlzayk7CisJLyogSXMgdGhpcyBzdHJ1Y3R1cmUgZm9yIGdpdmVuIGlkPyAqLworCWludCAoKmlzX2lkKSh2b2lkICpkaXNrLCBzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKK307CisKKy8qIElubWVtb3J5IGNvcHkgb2YgdmVyc2lvbiBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworc3RydWN0IHF0cmVlX21lbV9kcWluZm8geworCXVuc2lnbmVkIGludCBkcWlfYmxvY2tzOwkvKiAjIG9mIGJsb2NrcyBpbiBxdW90YSBmaWxlICovCisJdW5zaWduZWQgaW50IGRxaV9mcmVlX2JsazsJLyogRmlyc3QgYmxvY2sgaW4gbGlzdCBvZiBmcmVlIGJsb2NrcyAqLworCXVuc2lnbmVkIGludCBkcWlfZnJlZV9lbnRyeTsJLyogRmlyc3QgYmxvY2sgd2l0aCBmcmVlIGVudHJ5ICovCisJdW5zaWduZWQgaW50IGRxaV9lbnRyeV9zaXplOwkvKiBTaXplIG9mIHF1b3RhIGVudHJ5IGluIHF1b3RhIGZpbGUgKi8KKwlzdHJ1Y3QgcXRyZWVfZm10X29wZXJhdGlvbnMgKmRxaV9vcHM7CS8qIE9wZXJhdGlvbnMgZm9yIGVudHJ5CisJCQkJCQkgKiBtYW5pcHVsYXRpb24gKi8KK307CisKK3ZvaWQgcXRyZWVfd3JpdGVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7CitzdHJ1Y3QgZHF1b3QgKnF0cmVlX3JlYWRfZHF1b3Qoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgcWlkX3QgaWQpOwordm9pZCBxdHJlZV9kZWxldGVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7CitpbnQgcXRyZWVfZW50cnlfdW51c2VkKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBjaGFyICpkaXNrKTsKK2ludCBxdHJlZV9zY2FuX2RxdW90cyhzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLAorCQlpbnQgKCpwcm9jZXNzX2RxdW90KSAoc3RydWN0IGRxdW90ICosIHZvaWQgKiksIHZvaWQgKmRhdGEpOworCitpbnQgcXRyZWVfZHFzdHJfaW5fYmxrKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvKTsKKworI2VuZGlmIC8qIF9MSU5VWF9RVU9UQUlPX1RSRUVfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL3F1b3RhL3F1b3RhaW9fdjIuYyBiL2xpYi9xdW90YS9xdW90YWlvX3YyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiZjI5YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9xdW90YS9xdW90YWlvX3YyLmMKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBuZXcgcXVvdGFmaWxlIGZvcm1hdAorICoKKyAqIEphbiBLYXJhIDxqYWNrQHN1c2UuY3o+IC0gc3BvbnNvcmVkIGJ5IFN1U0UgQ1IKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicXVvdGFpb192Mi5oIgorI2luY2x1ZGUgImRxYmxrX3YyLmgiCisjaW5jbHVkZSAicXVvdGFpby5oIgorI2luY2x1ZGUgInF1b3RhaW9fdHJlZS5oIgorCitzdGF0aWMgaW50IHYyX2NoZWNrX2ZpbGUoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgaW50IHR5cGUsIGludCBmbXQpOworc3RhdGljIGludCB2Ml9pbml0X2lvKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgpOworc3RhdGljIGludCB2Ml9uZXdfaW8oc3RydWN0IHF1b3RhX2hhbmRsZSAqaCk7CitzdGF0aWMgaW50IHYyX3dyaXRlX2luZm8oc3RydWN0IHF1b3RhX2hhbmRsZSAqaCk7CitzdGF0aWMgc3RydWN0IGRxdW90ICp2Ml9yZWFkX2RxdW90KHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIHFpZF90IGlkKTsKK3N0YXRpYyBpbnQgdjJfY29tbWl0X2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpOworc3RhdGljIGludCB2Ml9zY2FuX2RxdW90cyhzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLAorCQkJICBpbnQgKCpwcm9jZXNzX2RxdW90KSAoc3RydWN0IGRxdW90ICpkcXVvdCwKKwkJCQkJCXZvaWQgKmRhdGEpLAorCQkJICB2b2lkICpkYXRhKTsKK3N0YXRpYyBpbnQgdjJfcmVwb3J0KHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIGludCB2ZXJib3NlKTsKKworc3RydWN0IHF1b3RhZmlsZV9vcHMgcXVvdGFmaWxlX29wc18yID0geworCS5jaGVja19maWxlCT0gdjJfY2hlY2tfZmlsZSwKKwkuaW5pdF9pbyAJPSB2Ml9pbml0X2lvLAorCS5uZXdfaW8gCT0gdjJfbmV3X2lvLAorCS53cml0ZV9pbmZvCT0gdjJfd3JpdGVfaW5mbywKKwkucmVhZF9kcXVvdAk9IHYyX3JlYWRfZHF1b3QsCisJLmNvbW1pdF9kcXVvdAk9IHYyX2NvbW1pdF9kcXVvdCwKKwkuc2Nhbl9kcXVvdHMJPSB2Ml9zY2FuX2RxdW90cywKKwkucmVwb3J0CQk9IHYyX3JlcG9ydCwKK307CisKKy8qCisgKiBDb3B5IGRxdW90IGZyb20gZGlzayB0byBtZW1vcnkKKyAqLworc3RhdGljIHZvaWQgdjJyMV9kaXNrMm1lbWRxYmxrKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHZvaWQgKmRwKQoreworCXN0cnVjdCB1dGlsX2RxYmxrICptID0gJmRxdW90LT5kcV9kcWI7CisJc3RydWN0IHYycjFfZGlza19kcWJsayAqZCA9IGRwLCBlbXB0eTsKKworCWRxdW90LT5kcV9pZCA9IGV4dDJmc19sZTMyX3RvX2NwdShkLT5kcWJfaWQpOworCW0tPmRxYl9paGFyZGxpbWl0ID0gZXh0MmZzX2xlNjRfdG9fY3B1KGQtPmRxYl9paGFyZGxpbWl0KTsKKwltLT5kcWJfaXNvZnRsaW1pdCA9IGV4dDJmc19sZTY0X3RvX2NwdShkLT5kcWJfaXNvZnRsaW1pdCk7CisJbS0+ZHFiX2JoYXJkbGltaXQgPSBleHQyZnNfbGU2NF90b19jcHUoZC0+ZHFiX2JoYXJkbGltaXQpOworCW0tPmRxYl9ic29mdGxpbWl0ID0gZXh0MmZzX2xlNjRfdG9fY3B1KGQtPmRxYl9ic29mdGxpbWl0KTsKKwltLT5kcWJfY3VyaW5vZGVzID0gZXh0MmZzX2xlNjRfdG9fY3B1KGQtPmRxYl9jdXJpbm9kZXMpOworCW0tPmRxYl9jdXJzcGFjZSA9IGV4dDJmc19sZTY0X3RvX2NwdShkLT5kcWJfY3Vyc3BhY2UpOworCW0tPmRxYl9pdGltZSA9IGV4dDJmc19sZTY0X3RvX2NwdShkLT5kcWJfaXRpbWUpOworCW0tPmRxYl9idGltZSA9IGV4dDJmc19sZTY0X3RvX2NwdShkLT5kcWJfYnRpbWUpOworCisJbWVtc2V0KCZlbXB0eSwgMCwgc2l6ZW9mKHN0cnVjdCB2MnIxX2Rpc2tfZHFibGspKTsKKwllbXB0eS5kcWJfaXRpbWUgPSBleHQyZnNfY3B1X3RvX2xlNjQoMSk7CisJaWYgKCFtZW1jbXAoJmVtcHR5LCBkcCwgc2l6ZW9mKHN0cnVjdCB2MnIxX2Rpc2tfZHFibGspKSkKKwkJbS0+ZHFiX2l0aW1lID0gMDsKK30KKworLyoKKyAqIENvcHkgZHF1b3QgZnJvbSBtZW1vcnkgdG8gZGlzaworICovCitzdGF0aWMgdm9pZCB2MnIxX21lbTJkaXNrZHFibGsodm9pZCAqZHAsIHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJc3RydWN0IHV0aWxfZHFibGsgKm0gPSAmZHF1b3QtPmRxX2RxYjsKKwlzdHJ1Y3QgdjJyMV9kaXNrX2RxYmxrICpkID0gZHA7CisKKwlkLT5kcWJfaWhhcmRsaW1pdCA9IGV4dDJmc19jcHVfdG9fbGU2NChtLT5kcWJfaWhhcmRsaW1pdCk7CisJZC0+ZHFiX2lzb2Z0bGltaXQgPSBleHQyZnNfY3B1X3RvX2xlNjQobS0+ZHFiX2lzb2Z0bGltaXQpOworCWQtPmRxYl9iaGFyZGxpbWl0ID0gZXh0MmZzX2NwdV90b19sZTY0KG0tPmRxYl9iaGFyZGxpbWl0KTsKKwlkLT5kcWJfYnNvZnRsaW1pdCA9IGV4dDJmc19jcHVfdG9fbGU2NChtLT5kcWJfYnNvZnRsaW1pdCk7CisJZC0+ZHFiX2N1cmlub2RlcyA9IGV4dDJmc19jcHVfdG9fbGU2NChtLT5kcWJfY3VyaW5vZGVzKTsKKwlkLT5kcWJfY3Vyc3BhY2UgPSBleHQyZnNfY3B1X3RvX2xlNjQobS0+ZHFiX2N1cnNwYWNlKTsKKwlkLT5kcWJfaXRpbWUgPSBleHQyZnNfY3B1X3RvX2xlNjQobS0+ZHFiX2l0aW1lKTsKKwlkLT5kcWJfYnRpbWUgPSBleHQyZnNfY3B1X3RvX2xlNjQobS0+ZHFiX2J0aW1lKTsKKwlkLT5kcWJfaWQgPSBleHQyZnNfY3B1X3RvX2xlMzIoZHF1b3QtPmRxX2lkKTsKKwlpZiAocXRyZWVfZW50cnlfdW51c2VkKCZkcXVvdC0+ZHFfaC0+cWhfaW5mby51LnYyX21kcWkuZHFpX3F0cmVlLCBkcCkpCisJCWQtPmRxYl9pdGltZSA9IGV4dDJmc19jcHVfdG9fbGU2NCgxKTsKK30KKworc3RhdGljIGludCB2MnIxX2lzX2lkKHZvaWQgKmRwLCBzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXN0cnVjdCB2MnIxX2Rpc2tfZHFibGsgKmQgPSBkcDsKKwlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbyA9CisJCQkmZHF1b3QtPmRxX2gtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZTsKKworCWlmIChxdHJlZV9lbnRyeV91bnVzZWQoaW5mbywgZHApKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gZXh0MmZzX2xlMzJfdG9fY3B1KGQtPmRxYl9pZCkgPT0gZHF1b3QtPmRxX2lkOworfQorCitzdGF0aWMgc3RydWN0IHF0cmVlX2ZtdF9vcGVyYXRpb25zIHYycjFfZm10X29wcyA9IHsKKwkubWVtMmRpc2tfZHFibGsgPSB2MnIxX21lbTJkaXNrZHFibGssCisJLmRpc2sybWVtX2RxYmxrID0gdjJyMV9kaXNrMm1lbWRxYmxrLAorCS5pc19pZCA9IHYycjFfaXNfaWQsCit9OworCisvKgorICogQ29weSBkcWluZm8gZnJvbSBkaXNrIHRvIG1lbW9yeQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdjJfZGlzazJtZW1kcWluZm8oc3RydWN0IHV0aWxfZHFpbmZvICptLAorCQkJCSAgICAgc3RydWN0IHYyX2Rpc2tfZHFpbmZvICpkKQoreworCW0tPmRxaV9iZ3JhY2UgPSBleHQyZnNfbGUzMl90b19jcHUoZC0+ZHFpX2JncmFjZSk7CisJbS0+ZHFpX2lncmFjZSA9IGV4dDJmc19sZTMyX3RvX2NwdShkLT5kcWlfaWdyYWNlKTsKKwltLT51LnYyX21kcWkuZHFpX2ZsYWdzID0gZXh0MmZzX2xlMzJfdG9fY3B1KGQtPmRxaV9mbGFncykgJiBWMl9EUUZfTUFTSzsKKwltLT51LnYyX21kcWkuZHFpX3F0cmVlLmRxaV9ibG9ja3MgPSBleHQyZnNfbGUzMl90b19jcHUoZC0+ZHFpX2Jsb2Nrcyk7CisJbS0+dS52Ml9tZHFpLmRxaV9xdHJlZS5kcWlfZnJlZV9ibGsgPQorCQlleHQyZnNfbGUzMl90b19jcHUoZC0+ZHFpX2ZyZWVfYmxrKTsKKwltLT51LnYyX21kcWkuZHFpX3F0cmVlLmRxaV9mcmVlX2VudHJ5ID0KKwkJCQlleHQyZnNfbGUzMl90b19jcHUoZC0+ZHFpX2ZyZWVfZW50cnkpOworfQorCisvKgorICogQ29weSBkcWluZm8gZnJvbSBtZW1vcnkgdG8gZGlzaworICovCitzdGF0aWMgaW5saW5lIHZvaWQgdjJfbWVtMmRpc2tkcWluZm8oc3RydWN0IHYyX2Rpc2tfZHFpbmZvICpkLAorCQkJCSAgICAgc3RydWN0IHV0aWxfZHFpbmZvICptKQoreworCWQtPmRxaV9iZ3JhY2UgPSBleHQyZnNfY3B1X3RvX2xlMzIobS0+ZHFpX2JncmFjZSk7CisJZC0+ZHFpX2lncmFjZSA9IGV4dDJmc19jcHVfdG9fbGUzMihtLT5kcWlfaWdyYWNlKTsKKwlkLT5kcWlfZmxhZ3MgPSBleHQyZnNfY3B1X3RvX2xlMzIobS0+dS52Ml9tZHFpLmRxaV9mbGFncyAmIFYyX0RRRl9NQVNLKTsKKwlkLT5kcWlfYmxvY2tzID0gZXh0MmZzX2NwdV90b19sZTMyKG0tPnUudjJfbWRxaS5kcWlfcXRyZWUuZHFpX2Jsb2Nrcyk7CisJZC0+ZHFpX2ZyZWVfYmxrID0KKwkJZXh0MmZzX2NwdV90b19sZTMyKG0tPnUudjJfbWRxaS5kcWlfcXRyZWUuZHFpX2ZyZWVfYmxrKTsKKwlkLT5kcWlfZnJlZV9lbnRyeSA9CisJCWV4dDJmc19jcHVfdG9fbGUzMihtLT51LnYyX21kcWkuZHFpX3F0cmVlLmRxaV9mcmVlX2VudHJ5KTsKK30KKworc3RhdGljIGludCB2Ml9yZWFkX2hlYWRlcihzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCBzdHJ1Y3QgdjJfZGlza19kcWhlYWRlciAqZHFoKQoreworCWlmIChoLT5lMmZzX3JlYWQoJmgtPnFoX3FmLCAwLCBkcWgsIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWhlYWRlcikpICE9CisJCQlzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKgorICogQ2hlY2sgd2hldGhlciBnaXZlbiBxdW90YSBmaWxlIGlzIGluIG91ciBmb3JtYXQKKyAqLworc3RhdGljIGludCB2Ml9jaGVja19maWxlKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIGludCB0eXBlLCBpbnQgZm10KQoreworCXN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyIGRxaDsKKwlpbnQgZmlsZV9tYWdpY3NbXSA9IElOSVRRTUFHSUNTOworCisJaWYgKGZtdCAhPSBRRk1UX1ZGU19WMSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXYyX3JlYWRfaGVhZGVyKGgsICZkcWgpKQorCQlyZXR1cm4gMDsKKworCWlmIChleHQyZnNfbGUzMl90b19jcHUoZHFoLmRxaF9tYWdpYykgIT0gZmlsZV9tYWdpY3NbdHlwZV0pIHsKKwkJaWYgKGV4dDJmc19iZTMyX3RvX2NwdShkcWguZHFoX21hZ2ljKSA9PSBmaWxlX21hZ2ljc1t0eXBlXSkKKwkJCWxvZ19lcnIoIllvdXIgcXVvdGEgZmlsZSBpcyBzdG9yZWQgaW4gd3JvbmcgZW5kaWFuaXR5Iik7CisJCXJldHVybiAwOworCX0KKwlpZiAoVjJfVkVSU0lPTiAhPSBleHQyZnNfbGUzMl90b19jcHUoZHFoLmRxaF92ZXJzaW9uKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBPcGVuIHF1b3RhZmlsZQorICovCitzdGF0aWMgaW50IHYyX2luaXRfaW8oc3RydWN0IHF1b3RhX2hhbmRsZSAqaCkKK3sKKwlzdHJ1Y3QgdjJfZGlza19kcWluZm8gZGRxaW5mbzsKKworCWgtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZS5kcWlfZW50cnlfc2l6ZSA9CisJCXNpemVvZihzdHJ1Y3QgdjJyMV9kaXNrX2RxYmxrKTsKKwloLT5xaF9pbmZvLnUudjJfbWRxaS5kcWlfcXRyZWUuZHFpX29wcyA9ICZ2MnIxX2ZtdF9vcHM7CisKKwkvKiBSZWFkIGluZm9ybWF0aW9uIGFib3V0IHF1b3RhZmlsZSAqLworCWlmIChoLT5lMmZzX3JlYWQoJmgtPnFoX3FmLCBWMl9EUUlORk9PRkYsICZkZHFpbmZvLAorCQkJIHNpemVvZihkZHFpbmZvKSkgIT0gc2l6ZW9mKGRkcWluZm8pKQorCQlyZXR1cm4gLTE7CisJdjJfZGlzazJtZW1kcWluZm8oJmgtPnFoX2luZm8sICZkZHFpbmZvKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEluaXRpYWxpemUgbmV3IHF1b3RhZmlsZQorICovCitzdGF0aWMgaW50IHYyX25ld19pbyhzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoKQoreworCWludCBmaWxlX21hZ2ljc1tdID0gSU5JVFFNQUdJQ1M7CisJc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIgZGRxaGVhZGVyOworCXN0cnVjdCB2Ml9kaXNrX2RxaW5mbyBkZHFpbmZvOworCisJaWYgKGgtPnFoX2ZtdCAhPSBRRk1UX1ZGU19WMSkKKwkJcmV0dXJuIC0xOworCisJLyogV3JpdGUgYmFzaWMgcXVvdGEgaGVhZGVyICovCisJZGRxaGVhZGVyLmRxaF9tYWdpYyA9IGV4dDJmc19jcHVfdG9fbGUzMihmaWxlX21hZ2ljc1toLT5xaF90eXBlXSk7CisJZGRxaGVhZGVyLmRxaF92ZXJzaW9uID0gZXh0MmZzX2NwdV90b19sZTMyKFYyX1ZFUlNJT04pOworCWlmIChoLT5lMmZzX3dyaXRlKCZoLT5xaF9xZiwgMCwgJmRkcWhlYWRlciwgc2l6ZW9mKGRkcWhlYWRlcikpICE9CisJCQlzaXplb2YoZGRxaGVhZGVyKSkKKwkJcmV0dXJuIC0xOworCisJLyogV3JpdGUgaW5mb3JtYXRpb24gYWJvdXQgcXVvdGFmaWxlICovCisJaC0+cWhfaW5mby5kcWlfYmdyYWNlID0gTUFYX0RRX1RJTUU7CisJaC0+cWhfaW5mby5kcWlfaWdyYWNlID0gTUFYX0lRX1RJTUU7CisJaC0+cWhfaW5mby51LnYyX21kcWkuZHFpX2ZsYWdzID0gMDsKKwloLT5xaF9pbmZvLnUudjJfbWRxaS5kcWlfcXRyZWUuZHFpX2Jsb2NrcyA9IFFUX1RSRUVPRkYgKyAxOworCWgtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZS5kcWlfZnJlZV9ibGsgPSAwOworCWgtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZS5kcWlfZnJlZV9lbnRyeSA9IDA7CisJaC0+cWhfaW5mby51LnYyX21kcWkuZHFpX3F0cmVlLmRxaV9lbnRyeV9zaXplID0KKwkJCQlzaXplb2Yoc3RydWN0IHYycjFfZGlza19kcWJsayk7CisJaC0+cWhfaW5mby51LnYyX21kcWkuZHFpX3F0cmVlLmRxaV9vcHMgPSAmdjJyMV9mbXRfb3BzOworCXYyX21lbTJkaXNrZHFpbmZvKCZkZHFpbmZvLCAmaC0+cWhfaW5mbyk7CisJaWYgKGgtPmUyZnNfd3JpdGUoJmgtPnFoX3FmLCBWMl9EUUlORk9PRkYsICZkZHFpbmZvLAorCQkJICBzaXplb2YoZGRxaW5mbykpICE9CisJICAgIHNpemVvZihkZHFpbmZvKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXcml0ZSBpbmZvcm1hdGlvbiAoZ3JhY2UgdGltZXMgdG8gZmlsZSkKKyAqLworc3RhdGljIGludCB2Ml93cml0ZV9pbmZvKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgpCit7CisJc3RydWN0IHYyX2Rpc2tfZHFpbmZvIGRkcWluZm87CisKKwl2Ml9tZW0yZGlza2RxaW5mbygmZGRxaW5mbywgJmgtPnFoX2luZm8pOworCWlmIChoLT5lMmZzX3dyaXRlKCZoLT5xaF9xZiwgVjJfRFFJTkZPT0ZGLCAmZGRxaW5mbywgc2l6ZW9mKGRkcWluZm8pKSAhPQorCQkJc2l6ZW9mKGRkcWluZm8pKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgZHF1b3QgZnJvbSBkaXNrCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZHF1b3QgKnYyX3JlYWRfZHF1b3Qoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgcWlkX3QgaWQpCit7CisJcmV0dXJuIHF0cmVlX3JlYWRfZHF1b3QoaCwgaWQpOworfQorCisvKgorICogQ29tbWl0IGNoYW5nZXMgb2YgZHF1b3QgdG8gZGlzayAtIGl0IG1pZ2h0IGFsc28gbWVhbiBkZWxldGluZyBpdCB3aGVuIHF1b3RhCisgKiBiZWNhbWUgZmFrZSBvbmUgYW5kIHVzZXIgaGFzIG5vIGJsb2Nrcy4KKyAqIFVzZXIgY2FuIHByb2Nlc3MgdXNlICdlcnJubycgdG8gZGV0ZWN0IGVycnN0ci4KKyAqLworc3RhdGljIGludCB2Ml9jb21taXRfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlzdHJ1Y3QgdXRpbF9kcWJsayAqYiA9ICZkcXVvdC0+ZHFfZHFiOworCisJaWYgKCFiLT5kcWJfY3Vyc3BhY2UgJiYgIWItPmRxYl9jdXJpbm9kZXMgJiYgIWItPmRxYl9ic29mdGxpbWl0ICYmCisJICAgICFiLT5kcWJfaXNvZnRsaW1pdCAmJiAhYi0+ZHFiX2JoYXJkbGltaXQgJiYgIWItPmRxYl9paGFyZGxpbWl0KQorCQlxdHJlZV9kZWxldGVfZHF1b3QoZHF1b3QpOworCWVsc2UKKwkJcXRyZWVfd3JpdGVfZHF1b3QoZHF1b3QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHYyX3NjYW5fZHF1b3RzKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsCisJCQkgIGludCAoKnByb2Nlc3NfZHF1b3QpIChzdHJ1Y3QgZHF1b3QgKiwgdm9pZCAqKSwKKwkJCSAgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gcXRyZWVfc2Nhbl9kcXVvdHMoaCwgcHJvY2Vzc19kcXVvdCwgZGF0YSk7Cit9CisKKy8qIFJlcG9ydCBpbmZvcm1hdGlvbiBhYm91dCBxdW90YWZpbGUuCisgKiBUT0RPOiBOb3QgdXNlZCByaWdodCBub3csIGJ1dCB3ZSBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhpcyB3aGVuIHdlIGFkZAorICogc3VwcG9ydCB0byBkZWJ1Z2ZzIHRvIHJlYWQgcXVvdGEgZmlsZXMuCisgKi8KK3N0YXRpYyBpbnQgdjJfcmVwb3J0KHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIGludCB2ZXJib3NlKQoreworCWxvZ19lcnIoIk5vdCBJbXBsZW1lbnRlZC4iKTsKKwlyZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9saWIvcXVvdGEvcXVvdGFpb192Mi5oIGIvbGliL3F1b3RhL3F1b3RhaW9fdjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDZjNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3F1b3RhL3F1b3RhaW9fdjIuaApAQCAtMCwwICsxLDU0IEBACisvKgorICoKKyAqCUhlYWRlciBmaWxlIGZvciBkaXNrIGZvcm1hdCBvZiBuZXcgcXVvdGFmaWxlIGZvcm1hdAorICoKKyAqLworCisjaWZuZGVmIEdVQVJEX1FVT1RBSU9fVjJfSAorI2RlZmluZSBHVUFSRF9RVU9UQUlPX1YyX0gKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgInF1b3RhaW8uaCIKKworLyogT2Zmc2V0IG9mIGluZm8gaGVhZGVyIGluIGZpbGUgKi8KKyNkZWZpbmUgVjJfRFFJTkZPT0ZGCQlzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIpCisvKiBTdXBwb3J0ZWQgdmVyc2lvbiBvZiBxdW90YS10cmVlIGZvcm1hdCAqLworI2RlZmluZSBWMl9WRVJTSU9OIDEKKworc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIgeworCV9fdTMyIGRxaF9tYWdpYzsJLyogTWFnaWMgbnVtYmVyIGlkZW50aWZ5aW5nIGZpbGUgKi8KKwlfX3UzMiBkcWhfdmVyc2lvbjsJLyogRmlsZSB2ZXJzaW9uICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogRmxhZ3MgZm9yIHZlcnNpb24gc3BlY2lmaWMgZmlsZXMgKi8KKyNkZWZpbmUgVjJfRFFGX01BU0sgIDB4MDAwMAkvKiBNYXNrIGZvciBhbGwgdmFsaWQgb25kaXNrIGZsYWdzICovCisKKy8qIEhlYWRlciB3aXRoIHR5cGUgYW5kIHZlcnNpb24gc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCB2Ml9kaXNrX2RxaW5mbyB7CisJX191MzIgZHFpX2JncmFjZTsJLyogVGltZSBiZWZvcmUgYmxvY2sgc29mdCBsaW1pdCBiZWNvbWVzCisJCQkJICogaGFyZCBsaW1pdCAqLworCV9fdTMyIGRxaV9pZ3JhY2U7CS8qIFRpbWUgYmVmb3JlIGlub2RlIHNvZnQgbGltaXQgYmVjb21lcworCQkJCSAqIGhhcmQgbGltaXQgKi8KKwlfX3UzMiBkcWlfZmxhZ3M7CS8qIEZsYWdzIGZvciBxdW90YWZpbGUgKERRRl8qKSAqLworCV9fdTMyIGRxaV9ibG9ja3M7CS8qIE51bWJlciBvZiBibG9ja3MgaW4gZmlsZSAqLworCV9fdTMyIGRxaV9mcmVlX2JsazsJLyogTnVtYmVyIG9mIGZpcnN0IGZyZWUgYmxvY2sgaW4gdGhlIGxpc3QgKi8KKwlfX3UzMiBkcWlfZnJlZV9lbnRyeTsJLyogTnVtYmVyIG9mIGJsb2NrIHdpdGggYXQgbGVhc3Qgb25lCisJCQkJCSAqIGZyZWUgZW50cnkgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgdjJyMV9kaXNrX2RxYmxrIHsKKwlfX3UzMiBkcWJfaWQ7CS8qIGlkIHRoaXMgcXVvdGEgYXBwbGllcyB0byAqLworCV9fdTMyIGRxYl9wYWQ7CisJX191NjQgZHFiX2loYXJkbGltaXQ7CS8qIGFic29sdXRlIGxpbWl0IG9uIGFsbG9jYXRlZCBpbm9kZXMgKi8KKwlfX3U2NCBkcWJfaXNvZnRsaW1pdDsJLyogcHJlZmVycmVkIGlub2RlIGxpbWl0ICovCisJX191NjQgZHFiX2N1cmlub2RlczsJLyogY3VycmVudCAjIGFsbG9jYXRlZCBpbm9kZXMgKi8KKwlfX3U2NCBkcWJfYmhhcmRsaW1pdDsJLyogYWJzb2x1dGUgbGltaXQgb24gZGlzayBzcGFjZQorCQkJCQkgKiAoaW4gUVVPVEFCTE9DS19TSVpFKSAqLworCV9fdTY0IGRxYl9ic29mdGxpbWl0OwkvKiBwcmVmZXJyZWQgbGltaXQgb24gZGlzayBzcGFjZQorCQkJCQkgKiAoaW4gUVVPVEFCTE9DS19TSVpFKSAqLworCV9fdTY0IGRxYl9jdXJzcGFjZTsJLyogY3VycmVudCBzcGFjZSBvY2N1cGllZCAoaW4gYnl0ZXMpICovCisJX191NjQgZHFiX2J0aW1lOwkvKiB0aW1lIGxpbWl0IGZvciBleGNlc3NpdmUgZGlzayB1c2UgKi8KKwlfX3U2NCBkcWJfaXRpbWU7CS8qIHRpbWUgbGltaXQgZm9yIGV4Y2Vzc2l2ZSBpbm9kZSB1c2UgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9zcy9NYWtlZmlsZS5pbiBiL2xpYi9zcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTIwZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3NzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjMxIEBACisjCisjIE1ha2VmaWxlIGZvciBsaWIvc3MKKyMKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3RvcF9idWlsZGRpciA9IC4uLy4uCitteV9kaXIgPSBsaWIvc3MKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0RMT1BFTl9MSUIgPSBARExPUEVOX0xJQkAKKworQE1DT05GSUdACisKK0xJQlJBUlk9IGxpYnNzCitMSUJESVI9IHNzCisKK0VMRl9WRVJTSU9OID0gMi4wCitFTEZfU09fVkVSU0lPTiA9IDIKK0VMRl9JTUFHRSA9IGxpYnNzCitFTEZfTVlESVIgPSBzcworRUxGX0lOU1RBTExfRElSID0gJChyb290X2xpYmRpcikKK0VMRl9PVEhFUl9MSUJTID0gLWxjb21fZXJyICQoRExPUEVOX0xJQikKKworQlNETElCX1ZFUlNJT04gPSAxLjAKK0JTRExJQl9JTUFHRSA9IGxpYnNzCitCU0RMSUJfTVlESVIgPSBzcworQlNETElCX0lOU1RBTExfRElSID0gJChyb290X2xpYmRpcikKKworVEFHUz1ldGFncworQ09NUElMRV9FVD0uLi9ldC9jb21waWxlX2V0IC0tYnVpbGQtdHJlZQorTUtfQ01EUz1fU1NfRElSX09WRVJSSURFPS4gLi9ta19jbWRzCisKKy5jLm86CisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPAorCSQoUSkgJChDSEVDS19DTUQpICQoQUxMX0NGTEFHUykgJDwKK0BQUk9GSUxFX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1nIC1wZyAtbyBwcm9maWxlZC8kKi5vIC1jICQ8CitARUxGX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1EU0hBUkVEX0VMRl9MSUIgLWZQSUMgLW8gZWxmc2hhcmVkLyQqLm8gLWMgJDwKK0BCU0RMSUJfQ01UQAkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgJChCU0RMSUJfUElDX0ZMQUcpIC1vIHBpYy8kKi5vIC1jICQ8CisKKyMgZm9yIHRoZSBsaWJyYXJ5CisKKyMgd2l0aCBzc19lcnIubyBmaXJzdCwgc3NfZXJyLmggc2hvdWxkIGdldCByZWJ1aWx0IGZpcnN0IHRvby4gIHNob3VsZCBub3QKKyMgYmUgcmVseWluZyBvbiB0aGlzLCB0aG91Z2guCitPQkpTPQlzc19lcnIubyBcCisJc3RkX3Jxcy5vIFwKKwlpbnZvY2F0aW9uLm8gaGVscC5vIFwKKwlleGVjdXRlX2NtZC5vIGxpc3Rlbi5vIHBhcnNlLm8gZXJyb3IubyBwcm9tcHQubyBcCisJcmVxdWVzdF90YmwubyBsaXN0X3Jxcy5vIHBhZ2VyLm8gcmVxdWVzdHMubyBcCisJZGF0YS5vIGdldF9yZWFkbGluZS5vCisKK1NSQ1M9CSQoc3JjZGlyKS9pbnZvY2F0aW9uLmMgJChzcmNkaXIpL2hlbHAuYyBcCisJJChzcmNkaXIpL2V4ZWN1dGVfY21kLmMgJChzcmNkaXIpL2xpc3Rlbi5jICQoc3JjZGlyKS9wYXJzZS5jIFwKKwkkKHNyY2RpcikvZXJyb3IuYyAkKHNyY2RpcikvcHJvbXB0LmMgJChzcmNkaXIpL3JlcXVlc3RfdGJsLmMgXAorCSQoc3JjZGlyKS9saXN0X3Jxcy5jICQoc3JjZGlyKS9wYWdlci5jICQoc3JjZGlyKS9yZXF1ZXN0cy5jIFwKKwkkKHNyY2RpcikvZGF0YS5jICQoc3JjZGlyKS9nZXRfcmVhZGxpbmUuYworCithbGw6OiBta19jbWRzCisKK0BNQUtFRklMRV9MSUJSQVJZQAorQE1BS0VGSUxFX0VMRkAKK0BNQUtFRklMRV9CU0RMSUJACitATUFLRUZJTEVfUFJPRklMRUAKKworQ09ERT0gJChTUkNTKSAkKE1LQ01EU0ZJTEVTKQorCitNS0NNRFNPQkpTPQlta19jbWRzLm8gdXRpbHMubyBvcHRpb25zLm8gY3QudGFiLm8gY21kX3RibC5sZXgubworCitNS0NNRFNGSUxFUz0JbWtfY21kcy5jIHV0aWxzLmMgb3B0aW9ucy5jIGN0LnkgY21kX3RibC5sZXgubAorCitNS0NNRFNDU1JDUz0JbWtfY21kcy5jIHV0aWxzLmMgb3B0aW9ucy5jIGN0LnRhYi5jIGNtZF90YmwubGV4LmMKKworCitIRklMRVM9CXNzLmggc3NfaW50ZXJuYWwuaAorU0hBUkVfRklMRVM9IGN0X2MuYXdrIGN0X2Muc2VkCisKK0lOU1RBTExfSEZJTEVTPQlzcy5oIAorCisjIGZvciAndGFncycgYW5kIGRlcGVuZGVuY2llcworCitDRklMRVM9CSQoU1JDUykgJChNS0NNRFNDU1JDUykgdGVzdF9zcy5jCisKKyMgZm9yIGJ1aWxkaW5nIGFyY2hpdmVzCisKK0ZJTEVTPQkkKFNSQ1MpICQoTUtDTURTRklMRVMpICQoSEZJTEVTKSBcCisJc3NfZXJyLmV0IHN0ZF9ycXMuY3QgTWFrZWZpbGUgXAorCXRlc3Rfc3MuYyBzcyAKKworYWxsOjoJbGlic3MuYSBzcy5wYyAjIGxpYnNzX3AuYSBsaW50CisKK3N0ZF9ycXMuYzogc3RkX3Jxcy5jdCBta19jbWRzCisJJChFKSAiCU1LX0NNRFMgJEAiCisJJChRKSBESVI9JChzcmNkaXIpICQoTUtfQ01EUykgJChzcmNkaXIpL3N0ZF9ycXMuY3QKKworc3RkX3Jxcy5vOiBzc19lcnIuaAorCit0ZXN0X2NtZC5jOiB0ZXN0X2NtZC5jdCBta19jbWRzCisJJChFKSAiCU1LX0NNRFMgJEAiCisJJChRKSBESVI9JChzcmNkaXIpICQoTUtfQ01EUykgJChzcmNkaXIpL3Rlc3RfY21kLmN0CisKK3NzX2Vyci5jIHNzX2Vyci5oOiBzc19lcnIuZXQKKwkkKEUpICIJQ09NUElMRV9FVCBzc19lcnIuZXQiCisJJChRKSAkKENPTVBJTEVfRVQpICQoc3JjZGlyKS9zc19lcnIuZXQKKworY3QudGFiLmMgY3QudGFiLmg6IGN0LnkKKwkkKFJNKSAtZiBjdC50YWIuKiB5LioKKwkkKFlBQ0MpIC1kICQoc3JjZGlyKS9jdC55CisJJChNVikgLWYgeS50YWIuYyBjdC50YWIuYworCSQoTVYpIC1mIHkudGFiLmggY3QudGFiLmgKKworI2xpYnNzLm86CSQoT0JKUykKKyMJJChMRCkgLXIgLXMgLW8gJEAgJChPQkpTKQorIwkkKENITU9EKSAteCAkQAorCitta19jbWRzOiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvbWtfY21kcy5zaC5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURSkgJChzcmNkaXIpL21rX2NtZHMuc2guaW4gbWtfY21kcworCSQoUSkgJChDSE1PRCkgK3ggbWtfY21kcworCitzcy5wYzogJChzcmNkaXIpL3NzLnBjLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJJChFKSAiCUNPTkZJRy5TVEFUVVMgJEAiCisJJChRKSBjZCAkKHRvcF9idWlsZGRpcik7IENPTkZJR19GSUxFUz1saWIvc3Mvc3MucGMgLi9jb25maWcuc3RhdHVzCisKK2luc3RhbGxkaXJzOjoKKwkkKEUpICIJTUtJTlNUQUxMRElSUyAkKGxpYmRpcikgJChpbmNsdWRlZGlyKS9zcyAkKGRhdGFkaXIpL3NzICQoYmluZGlyKSIKKwkkKFEpICQoTUtJTlNUQUxMRElSUykgJChERVNURElSKSQobGliZGlyKSBcCisJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpL3NzICQoREVTVERJUikkKGRhdGFkaXIpL3NzIFwKKwkJJChERVNURElSKSQoYmluZGlyKSAkKERFU1RESVIpJChwa2djb25maWdkaXIpCisKK2luc3RhbGw6OiBsaWJzcy5hICQoSU5TVEFMTF9IRklMRVMpIGluc3RhbGxkaXJzIHNzX2Vyci5oIG1rX2NtZHMgc3MucGMKKwkkKEUpICIJSU5TVEFMTF9EQVRBICQoREVTVERJUikkKGxpYmRpcikvbGlic3MuYSIKKwkkKFEpICQoSU5TVEFMTF9EQVRBKSBsaWJzcy5hICQoREVTVERJUikkKGxpYmRpcikvbGlic3MuYQorCS0kKFEpICQoUkFOTElCKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYnNzLmEKKwkkKFEpICQoQ0hNT0QpICQoTElCTU9ERSkgJChERVNURElSKSQobGliZGlyKS9saWJzcy5hCisJJChRKSAkKFJNKSAtZiAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9zcy8qCisJJChRKSBmb3IgaSBpbiAkKElOU1RBTExfSEZJTEVTKTsgZG8gXAorCQllY2hvICIJSU5TVEFMTF9EQVRBICQoREVTVERJUikkKGluY2x1ZGVkaXIpL3NzLyQkaSI7IFwKKwkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGkgJChERVNURElSKSQoaW5jbHVkZWRpcikvc3MvJCRpOyBcCisJZG9uZQorCSQoRSkgIglJTlNUQUxMX0RBVEEgJChpbmNsdWRlZGlyKS9zcy9zc19lcnIuaCIKKwkkKFEpICQoSU5TVEFMTF9EQVRBKSBzc19lcnIuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9zcy9zc19lcnIuaAorCSQoUSkgZm9yIGkgaW4gJChTSEFSRV9GSUxFUyk7IGRvIFwKKwkJZWNobyAiCUlOU1RBTExfREFUQSAkKERFU1RESVIpJChkYXRhZGlyKS9zcy8kJGkiOyBcCisJCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRpICQoREVTVERJUikkKGRhdGFkaXIpL3NzLyQkaTsgXAorCWRvbmUKKwkkKEUpICIJSU5TVEFMTCAkKGJpbmRpcikvbWtfY21kcyIKKwkkKFEpICQoSU5TVEFMTCkgbWtfY21kcyAkKERFU1RESVIpJChiaW5kaXIpL21rX2NtZHMKKwkkKEUpICIJSU5TVEFMTF9EQVRBICQobWFuMWRpcikvbWtfY21kcy4xIgorCSQoUSkgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9ta19jbWRzLjEgJChERVNURElSKSQobWFuMWRpcikvbWtfY21kcy4xCisJJChFKSAiCUlOU1RBTExfREFUQSAkKHBrZ2NvbmZpZ2Rpcikvc3MucGMiCisJJChRKSAkKElOU1RBTExfREFUQSkgc3MucGMgJChERVNURElSKSQocGtnY29uZmlnZGlyKS9zcy5wYworCit1bmluc3RhbGw6OgorCSQoUk0pIC1mICQoREVTVERJUikkKGxpYmRpcikvbGlic3MuYSAkKERFU1RESVIpJChiaW5kaXIpL21rX2NtZHMgXAorCQkkKERFU1RESVIpJChwa2djb25maWdkaXIpL3NzLnBjIFwKKwkJJChERVNURElSKSQobWFuMWRpcikvbWtfY21kcy4xIAorCSQoUk0pIC1yZiAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9zcyAkKERFU1RESVIpJChkYXRhZGlyKS9zcworCit0ZXN0X3NzOiB0ZXN0X3NzLm8gdGVzdF9jbWQubyAkKERFUExJQlNTKSAkKERFUExJQkNPTV9FUlIpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gJEAgdGVzdF9zcy5vIHRlc3RfY21kLm8gJChBTExfQ0ZMQUdTKSAkKEFMTF9MREZMQUdTKSBcCisJCSQoTElCU1MpICQoTElCQ09NX0VSUikgJChTWVNMSUJTKQorCitjaGVjazo6IGFsbCB0ZXN0X3NzCisJJChFKSAiCVJVTiBURVNUIHRlc3Rfc3MiCisJLUAoJChURVNURU5WKSAuL3Rlc3Rfc3MgLWYgJChzcmNkaXIpL3Rlc3Rfc2NyaXB0ID4gdGVzdF9vdXQgMj4mMTsgZXhpdCAwKQorCSQoUSkgaWYgZGlmZiB0ZXN0X291dCAkKHNyY2RpcikvdGVzdF9zY3JpcHRfZXhwZWN0ZWQgPiB0ZXN0LmRpZmY7IHRoZW4gXAorCQl0cnVlIDsgZWxzZSBlY2hvICJSZWdyZXNzaW9uIHRlc3QgZm9yIHNzIGxpYnJhcnkgZmFpbGVkISI7IGV4aXQgMSA7IGZpCisKK2NsZWFuOjoKKwkkKFJNKSAtZiAuLi9saWJzcy5hIGxpYnNzLmEgbWtfY21kcyBzc19lcnIuaCBzc19lcnIuYyBzdGRfcnFzLmMgXAorCQl0c3RfY21kcy5jIHRlc3Rfc3MgdGVzdF9vdXQgdGVzdC5kaWZmICoubyAqfiBcIyogKi5iYWsgY29yZSBcCisJCXRlc3RfY21kLmMKKworbW9zdGx5Y2xlYW46OiBjbGVhbgorZGlzdGNsZWFuOjogY2xlYW4KKwkkKFJNKSAtZiAuZGVwZW5kIE1ha2VmaWxlIHNzLnBjIFwKKwkJJChzcmNkaXIpL1RBR1MgJChzcmNkaXIpL01ha2VmaWxlLmluLm9sZAorCisjCisjIEhhY2sgdG8gcGFyYWxsZWwgbWFrZXMgcmVjb2duaXplIGRlcGVuZGVuY2llcyBjb3JyZWN0bHkuCisjCiskKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oOiBzc19lcnIuaAorCiskKE9CSlMpOiBzdWJkaXJzCisKKyMgKysrIERlcGVuZGVuY3kgbGluZSBlYXRlciArKysKKyMgCisjIE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb2xsb3cuICBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc2VjdGlvbiBpbgorIyB0aGUgTWFrZWZpbGUuaW4gZmlsZQorIworaW52b2NhdGlvbi5vOiAkKHNyY2RpcikvaW52b2NhdGlvbi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2Rpcikvc3NfaW50ZXJuYWwuaCAkKHNyY2Rpcikvc3MuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmgKK2hlbHAubzogJChzcmNkaXIpL2hlbHAuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL3NzX2ludGVybmFsLmggJChzcmNkaXIpL3NzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oCitleGVjdXRlX2NtZC5vOiAkKHNyY2RpcikvZXhlY3V0ZV9jbWQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL3NzX2ludGVybmFsLmggJChzcmNkaXIpL3NzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oCitsaXN0ZW4ubzogJChzcmNkaXIpL2xpc3Rlbi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2Rpcikvc3NfaW50ZXJuYWwuaCAkKHNyY2Rpcikvc3MuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmgKK3BhcnNlLm86ICQoc3JjZGlyKS9wYXJzZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2Rpcikvc3NfaW50ZXJuYWwuaCAkKHNyY2Rpcikvc3MuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmgKK2Vycm9yLm86ICQoc3JjZGlyKS9lcnJvci5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9zc19pbnRlcm5hbC5oICQoc3JjZGlyKS9zcy5oICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmgKK3Byb21wdC5vOiAkKHNyY2RpcikvcHJvbXB0LmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9zc19pbnRlcm5hbC5oICQoc3JjZGlyKS9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaAorcmVxdWVzdF90YmwubzogJChzcmNkaXIpL3JlcXVlc3RfdGJsLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9zc19pbnRlcm5hbC5oICQoc3JjZGlyKS9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaAorbGlzdF9ycXMubzogJChzcmNkaXIpL2xpc3RfcnFzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9zc19pbnRlcm5hbC5oICQoc3JjZGlyKS9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaAorcGFnZXIubzogJChzcmNkaXIpL3BhZ2VyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9zc19pbnRlcm5hbC5oICQoc3JjZGlyKS9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaAorcmVxdWVzdHMubzogJChzcmNkaXIpL3JlcXVlc3RzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9zc19pbnRlcm5hbC5oICQoc3JjZGlyKS9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaAorZGF0YS5vOiAkKHNyY2RpcikvZGF0YS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2Rpcikvc3NfaW50ZXJuYWwuaCAkKHNyY2Rpcikvc3MuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmgKK2dldF9yZWFkbGluZS5vOiAkKHNyY2RpcikvZ2V0X3JlYWRsaW5lLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9zc19pbnRlcm5hbC5oICQoc3JjZGlyKS9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaApkaWZmIC0tZ2l0IGEvbGliL3NzL2N0X2MuYXdrIGIvbGliL3NzL2N0X2MuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NDI0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3MvY3RfYy5hd2sKQEAgLTAsMCArMSw3NSBAQAorL15jb21tYW5kX3RhYmxlIC8geworCWNtZHRibCA9ICQyOworCXByaW50ZiAiLyogJXMuYyAtIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gJXMuY3QgKi9cbiIsIFwKKwkJcm9vdG5hbWUsIHJvb3RuYW1lID4gb3V0ZmlsZQorCXByaW50ICIjaW5jbHVkZSA8c3Mvc3MuaD4iID4gb3V0ZmlsZQorCXByaW50ICIiID5vdXRmaWxlCit9CisJCisvXkJPUiQvIHsKKwljbWRudW0rKworCW9wdGlvbnMgPSAwCisJY21kdGFiID0gIiIKKwlwcmludGYgInN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3Qgc3N1JTA1ZFtdID0ge1xuIiwgY21kbnVtID4gb3V0ZmlsZQorfQorCisvXnN1Yi8geworCXN1YnIgPSBzdWJzdHIoJDAsIDYsIGxlbmd0aCgkMCktNSkKK30KKworL15obHAvIHsKKwloZWxwID0gc3Vic3RyKCQwLCA2LCBsZW5ndGgoJDApLTUpCit9CisKKy9eY21kLyB7CisJY21kID0gc3Vic3RyKCQwLCA2LCBsZW5ndGgoJDApLTUpCisJcHJpbnRmICIlc1wiJXNcIixcbiIsIGNtZHRhYiwgY21kID4gb3V0ZmlsZQorCWNtZHRhYiA9ICIgICAgIgorfQorCisvXm9wdC8geworCW9wdCA9IHN1YnN0cigkMCwgNiwgbGVuZ3RoKCQwKS01KQorCWlmIChvcHQgPT0gImRvbnRfbGlzdCIpIHsKKwkJb3B0aW9ucyArPSAxCisJfQorCWlmIChvcHQgPT0gImRvbnRfc3VtbWFyaXplIikgeworCQlvcHRpb25zICs9IDIKKwl9Cit9CisKKy9eRU9SLyB7CisJcHJpbnQgIiAgICAoY2hhciBjb25zdCAqKTAiID4gb3V0ZmlsZQorCXByaW50ICJ9OyIgPiBvdXRmaWxlIAorCXByaW50ZiAiZXh0ZXJuIHZvaWQgJXMgX19TU19QUk9UTztcbiIsIHN1YnIgPiBvdXRmaWxlCisJIyBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBnYXdrIDMuMC41CisJYXdrX2J1ZyA9IGNtZG51bQorCXN1YnJfdGFiW2F3a19idWddID0gc3VicgorCW9wdGlvbnNfdGFiW2F3a19idWddID0gb3B0aW9ucworCWhlbHBfdGFiW2F3a19idWddID0gaGVscAorfQorCisvXlswLTldLyB7CisJbGluZW51bSA9ICQxOworfQorCisvXkVSUk9SLyB7CisJZXJyb3IgPSBzdWJzdHIoJDAsIDgsIGxlbmd0aCgkMCktNykKKwlwcmludGYgIkVycm9yIGluIGxpbmUgJWQ6ICVzXG4iLCBsaW5lbnVtLCBlcnJvcgorCXByaW50ICIjX19FUlJPUl9JTl9GSUxFX18iID4gb3V0ZmlsZQorfQorCitFTkQgeworCXByaW50ZiAic3RhdGljIHNzX3JlcXVlc3RfZW50cnkgc3N1JTA1ZFtdID0ge1xuIiwgY21kbnVtKzEgPiBvdXRmaWxlCisJZm9yIChpPTE7IGkgPD0gY21kbnVtOyBpKyspIHsKKwkJcHJpbnRmICIgICAgeyBzc3UlMDVkLFxuIiwgaSA+IG91dGZpbGUKKwkJcHJpbnRmICIgICAgICAlcyxcbiIsIHN1YnJfdGFiW2ldID4gb3V0ZmlsZQorCQlwcmludGYgIiAgICAgIFwiJXNcIixcbiIsIGhlbHBfdGFiW2ldID4gb3V0ZmlsZQorCQlwcmludGYgIiAgICAgICVkIH0sXG4iLCBvcHRpb25zX3RhYltpXSA+IG91dGZpbGUKKwl9CisJcHJpbnQgIiAgICB7IDAsIDAsIDAsIDAgfSIgPiBvdXRmaWxlCisJcHJpbnQgIn07IiA+IG91dGZpbGUKKwlwcmludCAiIiA+IG91dGZpbGUKKwlwcmludGYgInNzX3JlcXVlc3RfdGFibGUgJXMgPSB7IDIsIHNzdSUwNWQgfTtcbiIsIFwKKwkJY21kdGJsLCBjbWRudW0rMSA+IG91dGZpbGUKK30KKwpkaWZmIC0tZ2l0IGEvbGliL3NzL2N0X2Muc2VkIGIvbGliL3NzL2N0X2Muc2VkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNjQ1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3MvY3RfYy5zZWQKQEAgLTAsMCArMSwxNjAgQEAKKyMKKyMgVGhpcyBzY3JpcHQgcGFyc2VzIGEgY29tbWFuZF90YWJsZSBmaWxlIGludG8gc29tZXRoaW5nIHdoaWNoIGlzIGEgYml0IAorIyBlYXNpZXIgZm9yIGFuIGF3ayBzY3JpcHQgdG8gdW5kZXJzdGFuZC4KKyMKKyMgSW5wdXQgc3ludGF4OiBhIC5jdCBmaWxlCisjCisjIE91dHB1dCBzeW50YXg6CisjIChmb3IgdGhlIGNvbW1hbmRfdGFibGUgbGluZSkKKyMJY29tbWFuZF90YWJsZSAgPGNvbW1hbmRfdGFibGU+CisjCisjKGZvciBlYWNoIHJlcXVlc3QgZGVmaW5pdGlvbikKKyMJQk9SCisjCXN1YjogPHN1YnJvdXRpbmUgbmFtZT4KKyMJaGxwOiA8aGVscCB0ZXh0PgorIwljbWQ6IDxjb21tYW5kPgorIwlvcHQ6IDxvcHRpb24+CisjCUVPUgorIyAodGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgJ2NtZCcgb3IgJ29wdCcgbGluZQorIworIyBBIG51bWJlciBzZW50IHRvIHRoZSBvdXRwdXQgcmVwcmVzZW50cyBhIHBhcnNlIGVycm9yIC0tLSBpdCB3aWxsIGJlIAorIyBmb2xsb3dlZCBieSB0aGUgbmV4dCBsaW5lIHdoaWNoIHdpbGwgaGF2ZSB0aGUgZm9ybToKKyMJRVJST1I6IDxlcnJvciB0ZXh0PgorIworIyBUaGUgZGVzaWduIG9mIHRoaXMgb3V0cHV0IHN5bnRheCBpcyBzdWNoIHRoYXQgaXQgc2hvdWxkIGJlIGVhc3kgZm9yCisjIGFuIGF3ayBzY3JpcHQgdG8gcGFyc2UuCisKKyMKKyMgVGhlIGZpcnN0IHNlY3Rpb24gb2YgdGhpcyBzY3JpcHQgaXMganVzdCB0byBjYW5ub2ljYWxpemUgdGhlIGZpbGUuICAKKyMgSXQgcmVtb3ZlcyBjb21tZW50cywgYW5kIHB1dHMgZWFjaCBjb21tYW5kX3RhYmxlIHJlcXVlc3Qgb250byBhIHNpbmdsZQorIyBsaW5lCisjCis6RklSU1QKK3kvCS8gLworcy9eICovLworcy8jLiokLy8KKy87ICokLyF7CitOCit5LwkvIC8KK3MvXG4gKi8gLworYkZJUlNUCit9CitzLywgKi8sIC9nCisjCisjIE5vdyB3ZSB0YWtlIGNhcmUgb2Ygc29tZSBzeW50YXRpYyBzdWdhci4uLi4uCisjCisvXnVuaW1wbGVtZW50ZWQvIHsKKwlzL151bmltcGxlbWVudGVkIFtBLVphLXpfMC05XSovcmVxdWVzdCBzc191bmltcGxlbWVudGVkLworCXMvOy8sIChkb250X2xpc3QsIGRvbnRfc3VtbWFyaXplKTsvCit9CisvXnVua25vd24vIHsKKwlzL151bmtub3duIC9yZXF1ZXN0IHNzX3Vua25vd24sICIiLCAvCit9CisjCisjIERpc3BhdGNoIGJhc2VkIG9uIHRoZSBrZXl3b3JkLi4uLiAgaWxsZWdhbCBrZXl3b3JkcyBhcmUgcHJlZml4ZWQgYnkgRVJST1I6CisjIGFuZCBhcmUgaGFuZGxlZCBieSB0aGUgYXdrIHNjcmlwdC4KKyMKKy9eY29tbWFuZF90YWJsZSAvYkNNRAorL15yZXF1ZXN0IC9iUkVRVUVTVAorL15lbmQ7L2JFTkQKK3MvIC4qLy8KK3MvXi9FUlJPUjogdW5rbm93biBrZXl3b3JkOiAvCis9CitiCisjCisjIEhhbmRsZSB0aGUgY29tbWFuZF90YWJsZSBrZXl3b3JkCisjCis6Q01ECitzLzskLy8KK3AKK2QKK2IKKyMKKyMgSGFuZGxlIHRoZSByZXF1ZXN0IGtleXdvcmQgLS0tIHRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBzZWQgc2NyaXB0LgorIyAKKzpSRVFVRVNUCitzL15yZXF1ZXN0ICovLworaAoraVwKK0JPUgorIyBGaXJzdCwgcGFyc2Ugb3V0IHRoZSBzdWJyb3V0aW5lIG5hbWUKK3MvXi9zdWI6IC8KK3MvLC4qLy8KK3AKKyMgTmV4dCwgcGFyc2Ugb3V0IHRoZSBoZWxwIG1lc3NhZ2UsIGJlaW5nIGNhcmVmdWwgdG8gaGFuZGxlIGEgcXVvdGVkIHN0cmluZworZworcy9eW14sXSosICovLworaAorL14iLyB7CisJcy9eIi8vCisJcy8iLiovLworCXgKKwlzL14iW14iXSoiLCAqLy8KKwl4CisJYiBFTUlUSExQCit9CitzL1teYS16QS1aMC05XS4qLy8KK3gKK3MvW2EtekEtWjAtOV0qLCAqLy8KK3gKKzpFTUlUSExQCitzL14vaGxwOiAvCitwCisjIE5leHQgdGFrZSBjYXJlIG9mIHRoZSBjb21tYW5kIG5hbWVzCis6Q01ETElTVAorZworL14oL2IgT1BUSU9OUworL147L2IgRU9SCisvXiIvIHsKKwlzL14iLy8KKwlzLyIuKi8vCisJeAorCXMvXiJbXiJdKiIvLworCXMvLCAqLy8KKwl4CisJYiBFTUlUUkVRCit9CitzL1teQS1aYS16XzAtOV0uKi8vCit4CitzL1tBLVphLXpfMC05XSovLworcy8sICovLworeAorOkVNSVRSRVEKK3MvXi9jbWQ6IC8KK3AKK2IgQ01ETElTVAorIworIyBIZXJlIHdlIHBhcnNlIHRoZSBsaXN0IG9mIG9wdGlvbnMuCisjCis6IE9QVElPTlMKK2cKK3MvXigvLworaAorOiBPUFRMSVNUCisvXikvIGIgRU9SCisvXlteQS1aYS16XzAtOV0vIHsKKwk9CisJY1wKK0VSUk9SOiBwYXJzZSBlcnJvciBpbiBvcHRpb25zIGxpc3QKK30KK3MvW15BLVphLXpfMC05XS4qLy8KK3gKK3MvW0EtWmEtel8wLTldKi8vCitzLywgKi8vCit4CitzL14vb3B0OiAvCitwCitnCitiIE9QVExJU1QKKzogRU9SCitjXAorRU9SXAorCitkCitiCisjCisjIEhhbmRsZSB0aGUgZW5kIGtleXdvcmQgLS0tIGl0J3MgYmFzaWNhbGx5IGlnbm9yZWQuCisjCis6RU5ECitkCitiCmRpZmYgLS1naXQgYS9saWIvc3MvZGF0YS5jIGIvbGliL3NzL2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGQxYjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3NzL2RhdGEuYwpAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IDE5ODcsIDE5ODgsIDE5ODkgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neQorICogKFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZCkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICogTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJzc19pbnRlcm5hbC5oIgorCitzdGF0aWMgY29uc3QgY2hhciBjb3B5cmlnaHRbXSA9CisgICAgIkNvcHlyaWdodCAxOTg3LCAxOTg4LCAxOTg5IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5IjsKKworc3NfZGF0YSAqKl9zc190YWJsZSA9IChzc19kYXRhICoqKU5VTEw7CitjaGFyICpfc3NfcGFnZXJfbmFtZSA9IChjaGFyICopTlVMTDsKZGlmZiAtLWdpdCBhL2xpYi9zcy9lcnJvci5jIGIvbGliL3NzL2Vycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzNDVhOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcy9lcnJvci5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCwgMTk4OSBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nCisgKiBCb2FyZAorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlCisgKiBNLkkuVC4gUy5JLlAuQi4gbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorICogZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiZXQvY29tX2Vyci5oIgorI2luY2x1ZGUgInNzX2ludGVybmFsLmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworY2hhciAqc3NfbmFtZShpbnQgc2NpX2lkeCkKK3sKKyAgICByZWdpc3RlciBjaGFyICpyZXRfdmFsOworICAgIHJlZ2lzdGVyIHNzX2RhdGEgKmluZm9wOworCisgICAgaW5mb3AgPSBzc19pbmZvKHNjaV9pZHgpOworICAgIGlmIChpbmZvcC0+Y3VycmVudF9yZXF1ZXN0ID09IChjaGFyIGNvbnN0ICopTlVMTCkgeworCXJldF92YWwgPSBtYWxsb2MoKHVuc2lnbmVkKQorCQkJIChzdHJsZW4oaW5mb3AtPnN1YnN5c3RlbV9uYW1lKSsxKQorCQkJICogc2l6ZW9mKGNoYXIpKTsKKwlpZiAocmV0X3ZhbCA9PSAoY2hhciAqKU5VTEwpCisJICAgIHJldHVybigoY2hhciAqKU5VTEwpOworCXN0cmNweShyZXRfdmFsLCBpbmZvcC0+c3Vic3lzdGVtX25hbWUpOworCXJldHVybihyZXRfdmFsKTsKKyAgICB9CisgICAgZWxzZSB7CisJcmVnaXN0ZXIgY2hhciAqY3A7CisJcmVnaXN0ZXIgY2hhciBjb25zdCAqY3AxOworCXJldF92YWwgPSBtYWxsb2MoKHVuc2lnbmVkKXNpemVvZihjaGFyKSAqCisJCQkgKHN0cmxlbihpbmZvcC0+c3Vic3lzdGVtX25hbWUpKworCQkJICBzdHJsZW4oaW5mb3AtPmN1cnJlbnRfcmVxdWVzdCkrCisJCQkgIDQpKTsKKwljcCA9IHJldF92YWw7CisJY3AxID0gaW5mb3AtPnN1YnN5c3RlbV9uYW1lOworCXdoaWxlICgqY3AxKQorCSAgICAqY3ArKyA9ICpjcDErKzsKKwkqY3ArKyA9ICcgJzsKKwkqY3ArKyA9ICcoJzsKKwljcDEgPSBpbmZvcC0+Y3VycmVudF9yZXF1ZXN0OworCXdoaWxlICgqY3AxKQorCSAgICAqY3ArKyA9ICpjcDErKzsKKwkqY3ArKyA9ICcpJzsKKwkqY3AgPSAnXDAnOworCXJldHVybihyZXRfdmFsKTsKKyAgICB9Cit9CisKK3ZvaWQgc3NfZXJyb3IgKGludCBzY2lfaWR4LCBsb25nIGNvZGUsIGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKK3sKKyAgICByZWdpc3RlciBjaGFyICp3aG9hbWk7CisgICAgdmFfbGlzdCBwdmFyOworCisgICAgdmFfc3RhcnQgKHB2YXIsIGZtdCk7CisgICAgd2hvYW1pID0gc3NfbmFtZSAoc2NpX2lkeCk7CisgICAgY29tX2Vycl92YSAod2hvYW1pLCBjb2RlLCBmbXQsIHB2YXIpOworICAgIGZyZWUgKHdob2FtaSk7CisgICAgdmFfZW5kKHB2YXIpOworfQorCit2b2lkIHNzX3BlcnJvcihpbnQgc2NpX2lkeCwgbG9uZyBjb2RlLCBjaGFyIGNvbnN0ICptc2cpIC8qIGZvciBjb21wYXRpYmlsaXR5ICovCit7CisgICAgc3NfZXJyb3IgKHNjaV9pZHgsIGNvZGUsICIlcyIsIG1zZyk7Cit9CmRpZmYgLS1naXQgYS9saWIvc3MvZXhlY3V0ZV9jbWQuYyBiL2xpYi9zcy9leGVjdXRlX2NtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NDNhNDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3MvZXhlY3V0ZV9jbWQuYwpAQCAtMCwwICsxLDIyOSBAQAorLyoKKyAqIENvcHlyaWdodCAxOTg3LCAxOTg4LCAxOTg5IGJ5IE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICogTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgSEFTX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2Vsc2UKK2V4dGVybiBpbnQgZXJybm87CisjZW5kaWYKKyNpbmNsdWRlICJzc19pbnRlcm5hbC5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3N0YXRpYyBpbnQgY2hlY2tfcmVxdWVzdF90YWJsZSBQUk9UT1RZUEUoKHNzX3JlcXVlc3RfdGFibGUgKnJxdGJsLCBpbnQgYXJnYywKKwkJCQkJICBjaGFyICphcmd2W10sIGludCBzY2lfaWR4KSk7CitzdGF0aWMgaW50IHJlYWxseV9leGVjdXRlX2NvbW1hbmQgUFJPVE9UWVBFKChpbnQgc2NpX2lkeCwgaW50IGFyZ2MsCisJCQkJCSAgICAgY2hhciAqKmFyZ3ZbXSkpOworCisvKgorICogZ2V0X3JlcXVlc3QodGJsLCBpZHgpCisgKgorICogRnVuY3Rpb246CisgKiAgICAgIEdldHMgdGhlIGlkeCd0aCByZXF1ZXN0IGZyb20gdGhlIHJlcXVlc3QgdGFibGUgcG9pbnRlZCB0bworICogICAgICBieSB0YmwuCisgKiBBcmd1bWVudHM6CisgKiAgICAgIHRibCAoc3NfcmVxdWVzdF90YWJsZSAqKQorICogICAgICAgICAgICAgIHBvaW50ZXIgdG8gcmVxdWVzdCB0YWJsZQorICogICAgICBpZHggKGludCkKKyAqICAgICAgICAgICAgICBpbmRleCBpbnRvIHRhYmxlCisgKiBSZXR1cm5zOgorICogICAgICAoc3NfcmVxdWVzdF9lbnRyeSAqKQorICogICAgICAgICAgICAgIHBvaW50ZXIgdG8gcmVxdWVzdCB0YWJsZSBlbnRyeQorICogTm90ZXM6CisgKiAgICAgIEhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgbWFjcm8uCisgKi8KKworI2lmZGVmIF9fU0FCRVJfXworLyogc2lnaC4gIHNhYmVyIHdvbid0IGRlYWwgd2l0aCBwb2ludGVyLXRvLWNvbnN0LXN0cnVjdCAqLworc3RhdGljIHN0cnVjdCBfc3NfcmVxdWVzdF9lbnRyeSAqIGdldF9yZXF1ZXN0ICh0YmwsIGlkeCkKKyAgICBzc19yZXF1ZXN0X3RhYmxlICogdGJsOworICAgIGludCBpZHg7Cit7CisgICAgc3RydWN0IF9zc19yZXF1ZXN0X3RhYmxlICp0YmwxID0gKHN0cnVjdCBfc3NfcmVxdWVzdF90YWJsZSAqKSB0Ymw7CisgICAgc3RydWN0IF9zc19yZXF1ZXN0X2VudHJ5ICplID0gKHN0cnVjdCBfc3NfcmVxdWVzdF9lbnRyeSAqKSB0YmwxLT5yZXF1ZXN0czsKKyAgICByZXR1cm4gZSArIGlkeDsKK30KKyNlbHNlCisjZGVmaW5lIGdldF9yZXF1ZXN0KHRibCxpZHgpICAgICgodGJsKSAtPiByZXF1ZXN0cyArIChpZHgpKQorI2VuZGlmCisKKy8qCisgKiBjaGVja19yZXF1ZXN0X3RhYmxlKHJxdGJsLCBhcmdjLCBhcmd2LCBzY2lfaWR4KQorICoKKyAqIEZ1bmN0aW9uOgorICogICAgICBJZiB0aGUgY29tbWFuZCBzdHJpbmcgaW4gYXJndlswXSBpcyBpbiB0aGUgcmVxdWVzdCB0YWJsZSwgZXhlY3V0ZQorICogICAgICB0aGUgY29tbWFuZHMgYW5kIHJldHVybiBlcnJvciBjb2RlIDAuICBPdGhlcndpc2UsIHJldHVybiBlcnJvcgorICogICAgICBjb2RlIHNzX2V0X2NvbW1hbmRfbm90X2ZvdW5kLgorICogQXJndW1lbnRzOgorICogICAgICBycXRibCAoc3NfcmVxdWVzdF90YWJsZSAqKQorICogICAgICAgICAgICAgIHBvaW50ZXIgdG8gcmVxdWVzdCB0YWJsZQorICogICAgICBhcmdjIChpbnQpCisgKiAgICAgICAgICAgICAgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFyZ3ZbXQorICogICAgICBhcmd2IChjaGFyICpbXSkKKyAqICAgICAgICAgICAgICBhcmd1bWVudCBzdHJpbmcgYXJyYXkKKyAqICAgICAgc2NpX2lkeCAoaW50KQorICogICAgICAgICAgICAgIHNzLWludGVybmFsIGluZGV4IGZvciBzdWJzeXN0ZW0gY29udHJvbCBpbmZvIHN0cnVjdHVyZQorICogUmV0dXJuczoKKyAqICAgICAgKGludCkKKyAqICAgICAgICAgICAgICB6ZXJvIGlmIGNvbW1hbmQgZm91bmQsIHNzX2V0X2NvbW1hbmRfbm90X2ZvdW5kIG90aGVyd2lzZQorICogTm90ZXM6CisgKi8KKworc3RhdGljIGludCBjaGVja19yZXF1ZXN0X3RhYmxlKHJlZ2lzdGVyIHNzX3JlcXVlc3RfdGFibGUgKnJxdGJsLCBpbnQgYXJnYywKKwkJCSAgICAgICBjaGFyICphcmd2W10sIGludCBzY2lfaWR4KQoreworI2lmZGVmIF9fU0FCRVJfXworICAgIHN0cnVjdCBfc3NfcmVxdWVzdF9lbnRyeSAqcmVxdWVzdDsKKyNlbHNlCisgICAgcmVnaXN0ZXIgc3NfcmVxdWVzdF9lbnRyeSAqcmVxdWVzdDsKKyNlbmRpZgorICAgIHJlZ2lzdGVyIHNzX2RhdGEgKmluZm87CisgICAgcmVnaXN0ZXIgY2hhciBjb25zdCAqIGNvbnN0ICogbmFtZTsKKyAgICBjaGFyICpzdHJpbmcgPSBhcmd2WzBdOworICAgIGludCBpOworCisgICAgaW5mbyA9IHNzX2luZm8oc2NpX2lkeCk7CisgICAgaW5mby0+YXJnYyA9IGFyZ2M7CisgICAgaW5mby0+YXJndiA9IGFyZ3Y7CisgICAgZm9yIChpID0gMDsgKHJlcXVlc3QgPSBnZXRfcmVxdWVzdChycXRibCwgaSkpLT5jb21tYW5kX25hbWVzOyBpKyspIHsKKwlmb3IgKG5hbWUgPSByZXF1ZXN0LT5jb21tYW5kX25hbWVzOyAqbmFtZTsgbmFtZSsrKQorCSAgICBpZiAoIXN0cmNtcCgqbmFtZSwgc3RyaW5nKSkgeworCQlpbmZvLT5jdXJyZW50X3JlcXVlc3QgPSByZXF1ZXN0LT5jb21tYW5kX25hbWVzWzBdOworCQkocmVxdWVzdC0+ZnVuY3Rpb24pKGFyZ2MsIChjb25zdCBjaGFyICpjb25zdCAqKSBhcmd2LAorCQkJCSAgICBzY2lfaWR4LGluZm8tPmluZm9fcHRyKTsKKwkJaW5mby0+Y3VycmVudF9yZXF1ZXN0ID0gKGNoYXIgKilOVUxMOworCQlyZXR1cm4oMCk7CisJICAgIH0KKyAgICB9CisgICAgcmV0dXJuKFNTX0VUX0NPTU1BTkRfTk9UX0ZPVU5EKTsKK30KKworLyoKKyAqIHJlYWxseV9leGVjdXRlX2NvbW1hbmQoc2NpX2lkeCwgYXJnYywgYXJndikKKyAqCisgKiBGdW5jdGlvbjoKKyAqICAgICAgRmlsbHMgaW4gdGhlIGFyZ2MsIGFyZ3YgdmFsdWVzIGluIHRoZSBzdWJzeXN0ZW0gZW50cnkgYW5kCisgKiAgICAgIGNhbGwgdGhlIGFwcHJvcHJpYXRlIHJvdXRpbmUuCisgKiBBcmd1bWVudHM6CisgKiAgICAgIHNjaV9pZHggKGludCkKKyAqICAgICAgICAgICAgICBzcy1pbnRlcm5hbCBpbmRleCBmb3Igc3Vic3lzdGVtIGNvbnRyb2wgaW5mbyBzdHJ1Y3R1cmUKKyAqICAgICAgYXJnYyAoaW50KQorICogICAgICAgICAgICAgIG51bWJlciBvZiBhcmd1bWVudHMgaW4gYXJndW1lbnQgbGlzdAorICogICAgICBhcmd2IChjaGFyICoqW10pCisgKiAgICAgICAgICAgICAgcG9pbnRlciB0byBwYXJzZWQgYXJndW1lbnQgbGlzdCAobWF5IGJlIHJlYWxsb2NhdGVkCisgKiAgICAgICAgICAgICAgb24gYWJicmV2IGV4cGFuc2lvbikKKyAqCisgKiBSZXR1cm5zOgorICogICAgICAoaW50KQorICogICAgICAgICAgICAgIFplcm8gaWYgc3VjY2Vzc2Z1bCwgc3NfZXRfY29tbWFuZF9ub3RfZm91bmQgb3RoZXJ3aXNlLgorICogTm90ZXM6CisgKi8KKworc3RhdGljIGludCByZWFsbHlfZXhlY3V0ZV9jb21tYW5kKGludCBzY2lfaWR4LCBpbnQgYXJnYywgY2hhciAqKmFyZ3ZbXSkKK3sKKyAgICByZWdpc3RlciBzc19yZXF1ZXN0X3RhYmxlICoqcnF0Ymw7CisgICAgcmVnaXN0ZXIgc3NfZGF0YSAqaW5mbzsKKworICAgIGluZm8gPSBzc19pbmZvKHNjaV9pZHgpOworCisgICAgZm9yIChycXRibCA9IGluZm8tPnJxdF90YWJsZXM7ICpycXRibDsgcnF0YmwrKykgeworICAgICAgICBpZiAoY2hlY2tfcmVxdWVzdF90YWJsZSAoKnJxdGJsLCBhcmdjLCAqYXJndiwgc2NpX2lkeCkgPT0gMCkKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICB9CisgICAgcmV0dXJuKFNTX0VUX0NPTU1BTkRfTk9UX0ZPVU5EKTsKK30KKworLyoKKyAqIHNzX2V4ZWN1dGVfY29tbWFuZChzY2lfaWR4LCBhcmd2KQorICoKKyAqIEZ1bmN0aW9uOgorICoJRXhlY3V0ZXMgYSBwYXJzZWQgY29tbWFuZCBsaXN0IHdpdGhpbiB0aGUgc3Vic3lzdGVtLgorICogQXJndW1lbnRzOgorICoJc2NpX2lkeCAoaW50KQorICoJCXNzLWludGVybmFsIGluZGV4IGZvciBzdWJzeXN0ZW0gY29udHJvbCBpbmZvIHN0cnVjdHVyZQorICoJYXJndiAoY2hhciAqW10pCisgKgkJcGFyc2VkIGFyZ3VtZW50IGxpc3QKKyAqIFJldHVybnM6CisgKgkoaW50KQorICoJCVplcm8gaWYgc3VjY2Vzc2Z1bCwgc3NfZXRfY29tbWFuZF9ub3RfZm91bmQgb3RoZXJ3aXNlLgorICogTm90ZXM6CisgKi8KKworaW50IHNzX2V4ZWN1dGVfY29tbWFuZChpbnQgc2NpX2lkeCwgcmVnaXN0ZXIgY2hhciAqYXJndltdKQoreworCXJlZ2lzdGVyIGludCBpLCBhcmdjOworCWNoYXIgKiphcmdwOworCisJYXJnYyA9IDA7CisJZm9yIChhcmdwID0gYXJndjsgKmFyZ3A7IGFyZ3ArKykKKwkJYXJnYysrOworCWFyZ3AgPSAoY2hhciAqKiltYWxsb2MoKGFyZ2MrMSkqc2l6ZW9mKGNoYXIgKikpOworCWZvciAoaSA9IDA7IGkgPD0gYXJnYzsgaSsrKQorCQlhcmdwW2ldID0gYXJndltpXTsKKwlpID0gcmVhbGx5X2V4ZWN1dGVfY29tbWFuZChzY2lfaWR4LCBhcmdjLCAmYXJncCk7CisJZnJlZShhcmdwKTsKKwlyZXR1cm4oaSk7Cit9CisKKy8qCisgKiBzc19leGVjdXRlX2xpbmUoc2NpX2lkeCwgbGluZV9wdHIpCisgKgorICogRnVuY3Rpb246CisgKiAgICAgIFBhcnNlcyBhbmQgZXhlY3V0ZXMgYSBjb21tYW5kIGxpbmUgd2l0aGluIGEgc3Vic3lzdGVtLgorICogQXJndW1lbnRzOgorICogICAgICBzY2lfaWR4IChpbnQpCisgKiAgICAgICAgICAgICAgc3MtaW50ZXJuYWwgaW5kZXggZm9yIHN1YnN5c3RlbSBjb250cm9sIGluZm8gc3RydWN0dXJlCisgKiAgICAgIGxpbmVfcHRyIChjaGFyICopCisgKiAgICAgICAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIGxpbmUgdG8gYmUgcGFyc2VkLgorICogUmV0dXJuczoKKyAqICAgICAgKGludCkKKyAqICAgICAgCUVycm9yIGNvZGUuCisgKiBOb3RlczoKKyAqLworCitpbnQgc3NfZXhlY3V0ZV9saW5lKGludCBzY2lfaWR4LCBjaGFyICpsaW5lX3B0cikKK3sKKyAgICBjaGFyICoqYXJndjsKKyAgICBpbnQgYXJnYywgcmV0OworCisgICAgLyogZmx1c2ggbGVhZGluZyB3aGl0ZXNwYWNlICovCisgICAgd2hpbGUgKGxpbmVfcHRyWzBdID09ICcgJyB8fCBsaW5lX3B0clswXSA9PSAnXHQnKQorICAgICAgICBsaW5lX3B0cisrOworCisgICAgLyogY2hlY2sgaWYgaXQgc2hvdWxkIGJlIHNlbnQgdG8gb3BlcmF0aW5nIHN5c3RlbSBmb3IgZXhlY3V0aW9uICovCisgICAgaWYgKCpsaW5lX3B0ciA9PSAnIScpIHsKKyAgICAgICAgaWYgKHNzX2luZm8oc2NpX2lkeCktPmZsYWdzLmVzY2FwZV9kaXNhYmxlZCkKKyAgICAgICAgICAgIHJldHVybiBTU19FVF9FU0NBUEVfRElTQUJMRUQ7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbGluZV9wdHIrKzsKKyAgICAgICAgICAgIHJldHVybiAoc3lzdGVtKGxpbmVfcHRyKSA8IDApID8gZXJybm8gOiAwOworICAgICAgICB9CisgICAgfQorCisgICAgLyogcGFyc2UgaXQgKi8KKyAgICBhcmd2ID0gc3NfcGFyc2Uoc2NpX2lkeCwgbGluZV9wdHIsICZhcmdjKTsKKyAgICBpZiAoYXJnYyA9PSAwKSB7CisJZnJlZShhcmd2KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogbG9vayBpdCB1cCBpbiB0aGUgcmVxdWVzdCB0YWJsZXMsIGV4ZWN1dGUgaWYgZm91bmQgKi8KKyAgICByZXQgPSByZWFsbHlfZXhlY3V0ZV9jb21tYW5kIChzY2lfaWR4LCBhcmdjLCAmYXJndik7CisKKyAgICBmcmVlKGFyZ3YpOworCisgICAgcmV0dXJuKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWIvc3MvZ2V0X3JlYWRsaW5lLmMgYi9saWIvc3MvZ2V0X3JlYWRsaW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRhODVmMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcy9nZXRfcmVhZGxpbmUuYwpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDMgYnkgTUlUIFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZAorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlCisgKiBNLkkuVC4gUy5JLlAuQi4gbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorICogZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZmRlZiBIQVNfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2luY2x1ZGUgInNzX2ludGVybmFsLmgiCisjZGVmaW5lCXNpemUJc2l6ZW9mKHNzX2RhdGEgKikKKyNpZmRlZiBIQVZFX0RMT1BFTgorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKworc3RhdGljIHZvaWQgc3NfcmVsZWFzZV9yZWFkbGluZShzc19kYXRhICppbmZvKQoreworI2lmZGVmIEhBVkVfRExPUEVOCisJaWYgKCFpbmZvLT5yZWFkbGluZV9oYW5kbGUpCisJCXJldHVybjsKKworCWluZm8tPnJlYWRsaW5lID0gMDsKKwlpbmZvLT5hZGRfaGlzdG9yeSA9IDA7CisJaW5mby0+cmVkaXNwbGF5ID0gMDsKKwlpbmZvLT5ybF9jb21wbGV0aW9uX21hdGNoZXMgPSAwOworCWRsY2xvc2UoaW5mby0+cmVhZGxpbmVfaGFuZGxlKTsKKwlpbmZvLT5yZWFkbGluZV9oYW5kbGUgPSAwOworI2VuZGlmCit9CisKKy8qIExpYnJhcmllcyB3ZSB3aWxsIHRyeSB0byB1c2UgZm9yIHJlYWRsaW5lL2VkaXRsaW5lIGZ1bmN0aW9uYWxpdHkgKi8KKyNkZWZpbmUgREVGQVVMVF9MSUJQQVRIICJsaWJyZWFkbGluZS5zby42OmxpYnJlYWRsaW5lLnNvLjU6bGlicmVhZGxpbmUuc28uNDpsaWJyZWFkbGluZS5zbzpsaWJlZGl0LnNvLjI6bGliZWRpdC5zbzpsaWJlZGl0bGluZS5zby4wOmxpYmVkaXRsaW5lLnNvIgorCit2b2lkIHNzX2dldF9yZWFkbGluZShpbnQgc2NpX2lkeCkKK3sKKyNpZmRlZiBIQVZFX0RMT1BFTgorCXZvaWQJKmhhbmRsZSA9IE5VTEw7CisJc3NfZGF0YSAqaW5mbyA9IHNzX2luZm8oc2NpX2lkeCk7CisJY29uc3QgY2hhciAqKnQsICpsaWJwYXRoID0gMDsKKwljaGFyCSp0bXAsICpjcCwgKm5leHQ7CisJY2hhciAqKigqKmNvbXBsZXRpb25fZnVuYykoY29uc3QgY2hhciAqLCBpbnQsIGludCk7CisKKwlpZiAoaW5mby0+cmVhZGxpbmVfaGFuZGxlKQorCQlyZXR1cm47CisKKwlsaWJwYXRoID0gc3Nfc2FmZV9nZXRlbnYoIlNTX1JFQURMSU5FX1BBVEgiKTsKKwlpZiAoIWxpYnBhdGgpCisJCWxpYnBhdGggPSBERUZBVUxUX0xJQlBBVEg7CisJaWYgKCpsaWJwYXRoID09IDAgfHwgIXN0cmNtcChsaWJwYXRoLCAibm9uZSIpKQorCQlyZXR1cm47CisKKwl0bXAgPSBtYWxsb2Moc3RybGVuKGxpYnBhdGgpKzEpOworCWlmICghdG1wKQorCQlyZXR1cm47CisJc3RyY3B5KHRtcCwgbGlicGF0aCk7CisJZm9yIChjcCA9IHRtcDsgY3A7IGNwID0gbmV4dCkgeworCQluZXh0ID0gc3RyY2hyKGNwLCAnOicpOworCQlpZiAobmV4dCkKKwkJCSpuZXh0KysgPSAwOworCQlpZiAoKmNwID09IDApCisJCQljb250aW51ZTsKKwkJaWYgKChoYW5kbGUgPSBkbG9wZW4oY3AsIFJUTERfTk9XKSkpIHsKKwkJCS8qIHByaW50ZigiVXNpbmcgJXMgZm9yIHJlYWRsaW5lIGxpYnJhcnlcbiIsIGNwKTsgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCWZyZWUodG1wKTsKKwlpZiAoIWhhbmRsZSkKKwkJcmV0dXJuOworCisJaW5mby0+cmVhZGxpbmVfaGFuZGxlID0gaGFuZGxlOworCWluZm8tPnJlYWRsaW5lID0gKGNoYXIgKigqKShjb25zdCBjaGFyICopKQorCQlkbHN5bShoYW5kbGUsICJyZWFkbGluZSIpOworCWluZm8tPmFkZF9oaXN0b3J5ID0gKHZvaWQgKCopKGNvbnN0IGNoYXIgKikpCisJCWRsc3ltKGhhbmRsZSwgImFkZF9oaXN0b3J5Iik7CisJaW5mby0+cmVkaXNwbGF5ID0gKHZvaWQgKCopKHZvaWQpKQorCQlkbHN5bShoYW5kbGUsICJybF9mb3JjZWRfdXBkYXRlX2Rpc3BsYXkiKTsKKwlpbmZvLT5ybF9jb21wbGV0aW9uX21hdGNoZXMgPSAoY2hhciAqKigqKShjb25zdCBjaGFyICosCisJCQkJICAgIGNoYXIgKigqKShjb25zdCBjaGFyICosIGludCkpKQorCQlkbHN5bShoYW5kbGUsICJybF9jb21wbGV0aW9uX21hdGNoZXMiKTsKKwlpZiAoKHQgPSBkbHN5bShoYW5kbGUsICJybF9yZWFkbGluZV9uYW1lIikpICE9IE5VTEwpCisJCSp0ID0gaW5mby0+c3Vic3lzdGVtX25hbWU7CisJaWYgKChjb21wbGV0aW9uX2Z1bmMgPQorCSAgICAgZGxzeW0oaGFuZGxlLCAicmxfYXR0ZW1wdGVkX2NvbXBsZXRpb25fZnVuY3Rpb24iKSkgIT0gTlVMTCkKKwkJKmNvbXBsZXRpb25fZnVuYyA9IHNzX3JsX2NvbXBsZXRpb247CisJaW5mby0+cmVhZGxpbmVfc2h1dGRvd24gPSBzc19yZWxlYXNlX3JlYWRsaW5lOworI2VuZGlmCit9CisKKwpkaWZmIC0tZ2l0IGEvbGliL3NzL2hlbHAuYyBiL2xpYi9zcy9oZWxwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIwNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcy9oZWxwLmMKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZWxzZQorZXh0ZXJuIGludCBlcnJubzsKKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KKyNpZmRlZiBORUVEX1NZU19GQ05UTF9ICisvKiBqdXN0IGZvciBPXyogKi8KKyNpbmNsdWRlIDxzeXMvZmNudGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1dBSVRfSAorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjZW5kaWYKKyNpbmNsdWRlICJzc19pbnRlcm5hbC5oIgorCit2b2lkIHNzX2hlbHAoaW50IGFyZ2MsIGNoYXIgY29uc3QgKiBjb25zdCAqYXJndiwgaW50IHNjaV9pZHgsIHBvaW50ZXIgaW5mb19wdHIpCit7CisgICAgY2hhciAqYnVmZmVyOworICAgIGNoYXIgY29uc3QgKnJlcXVlc3RfbmFtZTsKKyAgICBpbnQgY29kZTsKKyAgICBpbnQgZmQsIGNoaWxkOworICAgIHJlZ2lzdGVyIGludCBpZHg7CisgICAgcmVnaXN0ZXIgc3NfZGF0YSAqaW5mbzsKKworICAgIHJlcXVlc3RfbmFtZSA9IHNzX2N1cnJlbnRfcmVxdWVzdChzY2lfaWR4LCAmY29kZSk7CisgICAgaWYgKGNvZGUgIT0gMCkgeworCXNzX3BlcnJvcihzY2lfaWR4LCBjb2RlLCAiIik7CisJcmV0dXJuOwkJLyogbm8gc3NfYWJvcnRfbGluZSwgaWYgaW52YWxpZCBpbnZvY2F0aW9uICovCisgICAgfQorICAgIGlmIChhcmdjID09IDEpIHsKKwlzc19saXN0X3JlcXVlc3RzKGFyZ2MsIGFyZ3YsIHNjaV9pZHgsIGluZm9fcHRyKTsKKwlyZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKGFyZ2MgIT0gMikgeworCS8qIHNob3VsZCBkbyBzb21ldGhpbmcgYmV0dGVyIHRoYW4gdGhpcyAqLworCWJ1ZmZlciA9IG1hbGxvYyg4MCsyKnN0cmxlbihyZXF1ZXN0X25hbWUpKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlzc19wZXJyb3Ioc2NpX2lkeCwgMCwKKwkJCSAgImNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwcmludCB1c2FnZSBtZXNzYWdlIik7CisJCXJldHVybjsKKwl9CisJc3ByaW50ZihidWZmZXIsICJ1c2FnZTpcblx0JXMgW3RvcGljfGNvbW1hbmRdXG5vclx0JXNcbiIsCisJCXJlcXVlc3RfbmFtZSwgcmVxdWVzdF9uYW1lKTsKKwlzc19wZXJyb3Ioc2NpX2lkeCwgMCwgYnVmZmVyKTsKKwlmcmVlKGJ1ZmZlcik7CisJcmV0dXJuOworICAgIH0KKyAgICBpbmZvID0gc3NfaW5mbyhzY2lfaWR4KTsKKyAgICBpZiAoaW5mby0+aW5mb19kaXJzID09IChjaGFyICoqKU5VTEwpIHsKKwlzc19wZXJyb3Ioc2NpX2lkeCwgU1NfRVRfTk9fSU5GT19ESVIsIChjaGFyICopTlVMTCk7CisJcmV0dXJuOworICAgIH0KKyAgICBpZiAoaW5mby0+aW5mb19kaXJzWzBdID09IChjaGFyICopTlVMTCkgeworCXNzX3BlcnJvcihzY2lfaWR4LCBTU19FVF9OT19JTkZPX0RJUiwgKGNoYXIgKilOVUxMKTsKKwlyZXR1cm47CisgICAgfQorICAgIGZvciAoZmQgPSAtMSwgaWR4ID0gMDsgaW5mby0+aW5mb19kaXJzW2lkeF0gIT0gKGNoYXIgKilOVUxMOyBpZHgrKykgeworICAgICAgICBidWZmZXIgPSBtYWxsb2Moc3RybGVuIChpbmZvLT5pbmZvX2RpcnNbaWR4XSkgKyAxICsKKwkJCXN0cmxlbiAoYXJndlsxXSkgKyA2KTsKKwlpZiAoIWJ1ZmZlcikgeworCSAgICBzc19wZXJyb3Ioc2NpX2lkeCwgMCwKKwkJICAgICAgImNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgaGVscCBmaWxlbmFtZSIpOworCSAgICByZXR1cm47CisJfQorCSh2b2lkKSBzdHJjcHkoYnVmZmVyLCBpbmZvLT5pbmZvX2RpcnNbaWR4XSk7CisJKHZvaWQpIHN0cmNhdChidWZmZXIsICIvIik7CisJKHZvaWQpIHN0cmNhdChidWZmZXIsIGFyZ3ZbMV0pOworCSh2b2lkKSBzdHJjYXQoYnVmZmVyLCAiLmluZm8iKTsKKwlmZCA9IG9wZW4oYnVmZmVyLCBPX1JET05MWSk7CisJZnJlZShidWZmZXIpOworCWlmIChmZCA+PSAwKQorCSAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGZkIDwgMCkgeworI2RlZmluZSBNU0cgIk5vIGluZm8gZm91bmQgZm9yICIKKyAgICAgICAgY2hhciAqYnVmID0gbWFsbG9jKHN0cmxlbiAoTVNHKSArIHN0cmxlbiAoYXJndlsxXSkgKyAxKTsKKwlzdHJjcHkoYnVmLCBNU0cpOworCXN0cmNhdChidWYsIGFyZ3ZbMV0pOworCXNzX3BlcnJvcihzY2lfaWR4LCAwLCBidWYpOworCWZyZWUoYnVmKTsKKwlyZXR1cm47CisgICAgfQorICAgIHN3aXRjaCAoY2hpbGQgPSBmb3JrKCkpIHsKKyAgICBjYXNlIC0xOgorCXNzX3BlcnJvcihzY2lfaWR4LCBlcnJubywgIkNhbid0IGZvcmsgZm9yIHBhZ2VyIik7CisJKHZvaWQpIGNsb3NlKGZkKTsKKwlyZXR1cm47CisgICAgY2FzZSAwOgorCSh2b2lkKSBkdXAyKGZkLCAwKTsgLyogcHV0IGZpbGUgb24gc3RkaW4gKi8KKwlzc19wYWdlX3N0ZGluKCk7CisgICAgZGVmYXVsdDoKKwkodm9pZCkgY2xvc2UoZmQpOyAvKiB3aGF0IGNhbiB3ZSBkbyBpZiBpdCBmYWlscz8gKi8KKwl3aGlsZSAod2FpdChOVUxMKSAhPSBjaGlsZCkgeworCSAgICAvKiBkbyBub3RoaW5nIGlmIHdyb25nIHBpZCAqLworCX07CisgICAgfQorfQorCisjaWZuZGVmIEhBVkVfRElSRU5UX0gKKyNpbmNsdWRlIDxzeXMvZGlyLmg+CisjZWxzZQorI2luY2x1ZGUgPGRpcmVudC5oPgorI2VuZGlmCisKK3ZvaWQgc3NfYWRkX2luZm9fZGlyKGludCBzY2lfaWR4LCBjaGFyICppbmZvX2RpciwgaW50ICpjb2RlX3B0cikKK3sKKyAgICByZWdpc3RlciBzc19kYXRhICppbmZvOworICAgIERJUiAqZDsKKyAgICBpbnQgbl9kaXJzOworICAgIHJlZ2lzdGVyIGNoYXIgKipkaXJzOworCisgICAgaW5mbyA9IHNzX2luZm8oc2NpX2lkeCk7CisgICAgaWYgKGluZm9fZGlyID09IE5VTEwgfHwgKmluZm9fZGlyID09ICdcMCcpIHsKKwkqY29kZV9wdHIgPSBTU19FVF9OT19JTkZPX0RJUjsKKwlyZXR1cm47CisgICAgfQorICAgIGlmICgoZCA9IG9wZW5kaXIoaW5mb19kaXIpKSA9PSAoRElSICopTlVMTCkgeworCSpjb2RlX3B0ciA9IGVycm5vOworCXJldHVybjsKKyAgICB9CisgICAgY2xvc2VkaXIoZCk7CisgICAgZGlycyA9IGluZm8tPmluZm9fZGlyczsKKyAgICBmb3IgKG5fZGlycyA9IDA7IGRpcnNbbl9kaXJzXSAhPSAoY2hhciAqKU5VTEw7IG5fZGlycysrKQorCTsJCS8qIGdldCBudW1iZXIgb2Ygbm9uLU5VTEwgZGlyIGVudHJpZXMgKi8KKyAgICBkaXJzID0gKGNoYXIgKiopcmVhbGxvYygoY2hhciAqKWRpcnMsCisJCQkgICAgKHVuc2lnbmVkKShuX2RpcnMgKyAyKSpzaXplb2YoY2hhciAqKSk7CisgICAgaWYgKGRpcnMgPT0gKGNoYXIgKiopTlVMTCkgeworCWluZm8tPmluZm9fZGlycyA9IChjaGFyICoqKU5VTEw7CisJKmNvZGVfcHRyID0gZXJybm87CisJcmV0dXJuOworICAgIH0KKyAgICBpbmZvLT5pbmZvX2RpcnMgPSBkaXJzOworICAgIGRpcnNbbl9kaXJzICsgMV0gPSAoY2hhciAqKU5VTEw7CisgICAgZGlyc1tuX2RpcnNdID0gbWFsbG9jKCh1bnNpZ25lZClzdHJsZW4oaW5mb19kaXIpKzEpOworICAgIHN0cmNweShkaXJzW25fZGlyc10sIGluZm9fZGlyKTsKKyAgICAqY29kZV9wdHIgPSAwOworfQorCit2b2lkIHNzX2RlbGV0ZV9pbmZvX2RpcihpbnQgc2NpX2lkeCwgY2hhciAqaW5mb19kaXIsIGludCAqY29kZV9wdHIpCit7CisgICAgcmVnaXN0ZXIgY2hhciAqKmlfZDsKKyAgICByZWdpc3RlciBjaGFyICoqaW5mb19kaXJzOworCisgICAgaW5mb19kaXJzID0gc3NfaW5mbyhzY2lfaWR4KS0+aW5mb19kaXJzOworICAgIGZvciAoaV9kID0gaW5mb19kaXJzOyAqaV9kOyBpX2QrKykgeworCWlmICghc3RyY21wKCppX2QsIGluZm9fZGlyKSkgeworCSAgICB3aGlsZSAoKmlfZCkgeworCQkqaV9kID0gKihpX2QrMSk7CisJCWlfZCsrOworCSAgICB9CisJICAgICpjb2RlX3B0ciA9IDA7CisJICAgIHJldHVybjsKKwl9CisgICAgfQorICAgICpjb2RlX3B0ciA9IFNTX0VUX05PX0lORk9fRElSOworfQpkaWZmIC0tZ2l0IGEvbGliL3NzL2ludm9jYXRpb24uYyBiL2xpYi9zcy9pbnZvY2F0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3ZTdhMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcy9pbnZvY2F0aW9uLmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmZGVmIEhBU19TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSAic3NfaW50ZXJuYWwuaCIKKyNkZWZpbmUJc2l6ZQlzaXplb2Yoc3NfZGF0YSAqKQorI2lmZGVmIEhBVkVfRExPUEVOCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorI2luY2x1ZGUgPGVycm5vLmg+CisKK2ludCBzc19jcmVhdGVfaW52b2NhdGlvbihjb25zdCBjaGFyICpzdWJzeXN0ZW1fbmFtZSwgY29uc3QgY2hhciAqdmVyc2lvbl9zdHJpbmcsCisJCQkgdm9pZCAqaW5mb19wdHIsIHNzX3JlcXVlc3RfdGFibGUgKnJlcXVlc3RfdGFibGVfcHRyLAorCQkJIGludCAqY29kZV9wdHIpCit7CisJcmVnaXN0ZXIgaW50IHNjaV9pZHg7CisJcmVnaXN0ZXIgc3NfZGF0YSAqbmV3X3RhYmxlOworCXJlZ2lzdGVyIHNzX2RhdGEgKip0YWJsZTsKKworCSpjb2RlX3B0ciA9IDA7CisJdGFibGUgPSBfc3NfdGFibGU7CisJbmV3X3RhYmxlID0gKHNzX2RhdGEgKikgbWFsbG9jKHNpemVvZihzc19kYXRhKSk7CisKKwlpZiAodGFibGUgPT0gKHNzX2RhdGEgKiopIE5VTEwpIHsKKwkJdGFibGUgPSAoc3NfZGF0YSAqKikgbWFsbG9jKDIgKiBzaXplKTsKKwkJdGFibGVbMF0gPSB0YWJsZVsxXSA9IChzc19kYXRhICopTlVMTDsKKwl9CisJaW5pdGlhbGl6ZV9zc19lcnJvcl90YWJsZSAoKTsKKworCWZvciAoc2NpX2lkeCA9IDE7IHRhYmxlW3NjaV9pZHhdICE9IChzc19kYXRhICopTlVMTDsgc2NpX2lkeCsrKQorCQk7CisJdGFibGUgPSAoc3NfZGF0YSAqKikgcmVhbGxvYygoY2hhciAqKXRhYmxlLAorCQkJCSAgICAgKCh1bnNpZ25lZClzY2lfaWR4KzIpKnNpemUpOworCWlmICh0YWJsZSA9PSBOVUxMKSB7CisJCSpjb2RlX3B0ciA9IEVOT01FTTsKKwkJZnJlZShuZXdfdGFibGUpOworCQlyZXR1cm4gMDsKKwl9CisJdGFibGVbc2NpX2lkeCsxXSA9IChzc19kYXRhICopIE5VTEw7CisJdGFibGVbc2NpX2lkeF0gPSBuZXdfdGFibGU7CisKKwluZXdfdGFibGUtPnN1YnN5c3RlbV9uYW1lID0gc3Vic3lzdGVtX25hbWU7CisJbmV3X3RhYmxlLT5zdWJzeXN0ZW1fdmVyc2lvbiA9IHZlcnNpb25fc3RyaW5nOworCW5ld190YWJsZS0+YXJndiA9IChjaGFyICoqKU5VTEw7CisJbmV3X3RhYmxlLT5jdXJyZW50X3JlcXVlc3QgPSAoY2hhciAqKU5VTEw7CisJbmV3X3RhYmxlLT5pbmZvX2RpcnMgPSAoY2hhciAqKiltYWxsb2Moc2l6ZW9mKGNoYXIgKikpOworCSpuZXdfdGFibGUtPmluZm9fZGlycyA9IChjaGFyICopTlVMTDsKKwluZXdfdGFibGUtPmluZm9fcHRyID0gaW5mb19wdHI7CisJbmV3X3RhYmxlLT5wcm9tcHQgPSBtYWxsb2MoKHVuc2lnbmVkKXN0cmxlbihzdWJzeXN0ZW1fbmFtZSkrNCk7CisJc3RyY3B5KG5ld190YWJsZS0+cHJvbXB0LCBzdWJzeXN0ZW1fbmFtZSk7CisJc3RyY2F0KG5ld190YWJsZS0+cHJvbXB0LCAiOiAgIik7CisjaWZkZWYgc2lsbHkKKwluZXdfdGFibGUtPmFiYnJldl9pbmZvID0gc3NfYWJicmV2X2luaXRpYWxpemUoIi9ldGMvcGFzc3dkIiwgY29kZV9wdHIpOworI2Vsc2UKKwluZXdfdGFibGUtPmFiYnJldl9pbmZvID0gTlVMTDsKKyNlbmRpZgorCW5ld190YWJsZS0+ZmxhZ3MuZXNjYXBlX2Rpc2FibGVkID0gMDsKKwluZXdfdGFibGUtPmZsYWdzLmFiYnJldnNfZGlzYWJsZWQgPSAwOworCW5ld190YWJsZS0+cnF0X3RhYmxlcyA9CisJCShzc19yZXF1ZXN0X3RhYmxlICoqKSBjYWxsb2MoMiwgc2l6ZW9mKHNzX3JlcXVlc3RfdGFibGUgKikpOworCSoobmV3X3RhYmxlLT5ycXRfdGFibGVzKSA9IHJlcXVlc3RfdGFibGVfcHRyOworCSoobmV3X3RhYmxlLT5ycXRfdGFibGVzKzEpID0gKHNzX3JlcXVlc3RfdGFibGUgKikgTlVMTDsKKworCW5ld190YWJsZS0+cmVhZGxpbmVfaGFuZGxlID0gMDsKKwluZXdfdGFibGUtPnJlYWRsaW5lX3NodXRkb3duID0gMDsKKwluZXdfdGFibGUtPnJlYWRsaW5lID0gMDsKKwluZXdfdGFibGUtPmFkZF9oaXN0b3J5ID0gMDsKKwluZXdfdGFibGUtPnJlZGlzcGxheSA9IDA7CisJbmV3X3RhYmxlLT5ybF9jb21wbGV0aW9uX21hdGNoZXMgPSAwOworCV9zc190YWJsZSA9IHRhYmxlOworI2lmIGRlZmluZWQoSEFWRV9ETE9QRU4pICYmIGRlZmluZWQoU0hBUkVEX0VMRl9MSUIpCisJc3NfZ2V0X3JlYWRsaW5lKHNjaV9pZHgpOworI2VuZGlmCisJcmV0dXJuKHNjaV9pZHgpOworfQorCit2b2lkCitzc19kZWxldGVfaW52b2NhdGlvbihpbnQgc2NpX2lkeCkKK3sKKwlyZWdpc3RlciBzc19kYXRhICp0OworCWludCBpZ25vcmVkX2NvZGU7CisKKwl0ID0gc3NfaW5mbyhzY2lfaWR4KTsKKwlmcmVlKHQtPnByb21wdCk7CisJZnJlZSh0LT5ycXRfdGFibGVzKTsKKwl3aGlsZSh0LT5pbmZvX2RpcnNbMF0gIT0gKGNoYXIgKilOVUxMKQorCQlzc19kZWxldGVfaW5mb19kaXIoc2NpX2lkeCwgdC0+aW5mb19kaXJzWzBdLCAmaWdub3JlZF9jb2RlKTsKKwlmcmVlKHQtPmluZm9fZGlycyk7CisjaWYgZGVmaW5lZChIQVZFX0RMT1BFTikgJiYgZGVmaW5lZChTSEFSRURfRUxGX0xJQikKKwlpZiAodC0+cmVhZGxpbmVfc2h1dGRvd24pCisJCSgqdC0+cmVhZGxpbmVfc2h1dGRvd24pKHQpOworI2VuZGlmCisJZnJlZSh0KTsKK30KZGlmZiAtLWdpdCBhL2xpYi9zcy9saXN0X3Jxcy5jIGIvbGliL3NzL2xpc3RfcnFzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxYTM4MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcy9saXN0X3Jxcy5jCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzc19pbnRlcm5hbC5oIgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisKK3R5cGVkZWYgdm9pZCBzaWdyZXRfdDsKKwordm9pZCBzc19saXN0X3JlcXVlc3RzKGludCBhcmdjIF9fU1NfQVRUUigodW51c2VkKSksCisJCSAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqYXJndiBfX1NTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICBpbnQgc2NpX2lkeCwgdm9pZCAqaW5mb3AgX19TU19BVFRSKCh1bnVzZWQpKSkKK3sKKyAgICBzc19yZXF1ZXN0X2VudHJ5ICplbnRyeTsKKyAgICBjaGFyIGNvbnN0ICogY29uc3QgKm5hbWU7CisgICAgaW50IGksIHNwYWNpbmc7CisgICAgc3NfcmVxdWVzdF90YWJsZSAqKnRhYmxlOworCisgICAgRklMRSAqb3V0cHV0OworICAgIGludCBmZDsKKyAgICBzaWdzZXRfdCBvbWFzaywgaWdtYXNrOworICAgIHNpZ3JldF90ICgqZnVuYykoaW50KTsKKyNpZm5kZWYgTk9fRk9SSworICAgIGludCB3YWl0YjsKKyNlbmRpZgorCisgICAgc2lnZW1wdHlzZXQoJmlnbWFzayk7CisgICAgc2lnYWRkc2V0KCZpZ21hc2ssIFNJR0lOVCk7CisgICAgc2lncHJvY21hc2soU0lHX0JMT0NLLCAmaWdtYXNrLCAmb21hc2spOworICAgIGZ1bmMgPSBzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKKyAgICBmZCA9IHNzX3BhZ2VyX2NyZWF0ZSgpOworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgcGVycm9yKCJzc19wYWdlcl9jcmVhdGUiKTsKKyAgICAgICAgKHZvaWQpIHNpZ25hbChTSUdJTlQsIGZ1bmMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG91dHB1dCA9IGZkb3BlbihmZCwgInciKTsKKyAgICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9tYXNrLCAoc2lnc2V0X3QgKikgMCk7CisKKyAgICBmcHJpbnRmIChvdXRwdXQsICJBdmFpbGFibGUgJXMgcmVxdWVzdHM6XG5cbiIsCisJICAgICBzc19pbmZvIChzY2lfaWR4KSAtPiBzdWJzeXN0ZW1fbmFtZSk7CisKKyAgICBmb3IgKHRhYmxlID0gc3NfaW5mbyhzY2lfaWR4KS0+cnF0X3RhYmxlczsgKnRhYmxlOyB0YWJsZSsrKSB7CisgICAgICAgIGVudHJ5ID0gKCp0YWJsZSktPnJlcXVlc3RzOworICAgICAgICBmb3IgKDsgZW50cnktPmNvbW1hbmRfbmFtZXM7IGVudHJ5KyspIHsKKyAgICAgICAgICAgIHNwYWNpbmcgPSAtMjsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+ZmxhZ3MgJiBTU19PUFRfRE9OVF9MSVNUKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChuYW1lID0gZW50cnktPmNvbW1hbmRfbmFtZXM7ICpuYW1lOyBuYW1lKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKCpuYW1lKTsKKyAgICAgICAgICAgICAgICBmcHV0cygqbmFtZSwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICBzcGFjaW5nICs9IGxlbiArIDI7CisgICAgICAgICAgICAgICAgaWYgKG5hbWVbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgZnB1dHMoIiwgIiwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3BhY2luZyA+IDIzKSB7CisgICAgICAgICAgICAgICAgZnB1dGMoJ1xuJywgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICBzcGFjaW5nID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNSAtIHNwYWNpbmc7IGkrKykKKyAgICAgICAgICAgICAgICBmcHV0YygnICcsIG91dHB1dCk7CisgICAgICAgICAgICBmcHV0cyhlbnRyeS0+aW5mb19zdHJpbmcsIG91dHB1dCk7CisgICAgICAgICAgICBmcHV0YygnXG4nLCBvdXRwdXQpOworICAgICAgICB9CisgICAgfQorICAgIGZjbG9zZShvdXRwdXQpOworI2lmbmRlZiBOT19GT1JLCisgICAgd2FpdCgmd2FpdGIpOworI2VuZGlmCisgICAgKHZvaWQpIHNpZ25hbChTSUdJTlQsIGZ1bmMpOworfQpkaWZmIC0tZ2l0IGEvbGliL3NzL2xpc3Rlbi5jIGIvbGliL3NzL2xpc3Rlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NzhjM2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3MvbGlzdGVuLmMKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBMaXN0ZW5lciBsb29wIGZvciBzdWJzeXN0ZW0gbGlicmFyeSBsaWJzcy5hLgorICoKKyAqCSRIZWFkZXIkCisgKgkkTG9ja2VyJAorICoKKyAqIENvcHlyaWdodCAxOTg3LCAxOTg4IGJ5IE1JVCBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICogTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAic3NfaW50ZXJuYWwuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCit0eXBlZGVmIHZvaWQgc2lncmV0X3Q7CisKK3N0YXRpYyBzc19kYXRhICpjdXJyZW50X2luZm87CitzdGF0aWMgam1wX2J1ZiBsaXN0ZW5fam1wYjsKK3N0YXRpYyBzaWdyZXRfdCAoKnNpZ19jb250KShpbnQpOworCitzdGF0aWMgc2lncmV0X3QgcHJpbnRfcHJvbXB0KGludCBzaWcgX19TU19BVFRSKCh1bnVzZWQpKSkKK3sKKyAgICBpZiAoY3VycmVudF9pbmZvLT5yZWRpc3BsYXkpCisJICAgICgqY3VycmVudF9pbmZvLT5yZWRpc3BsYXkpKCk7CisgICAgZWxzZSB7CisJICAgICh2b2lkKSBmcHV0cyhjdXJyZW50X2luZm8tPnByb21wdCwgc3Rkb3V0KTsKKwkgICAgKHZvaWQpIGZmbHVzaChzdGRvdXQpOworICAgIH0KK30KKworc3RhdGljIHNpZ3JldF90IGxpc3Rlbl9pbnRfaGFuZGxlcihpbnQgc2lnIF9fU1NfQVRUUigodW51c2VkKSkpCit7CisgICAgcHV0YygnXG4nLCBzdGRvdXQpOworICAgIHNpZ25hbChTSUdJTlQsIGxpc3Rlbl9pbnRfaGFuZGxlcik7CisgICAgbG9uZ2ptcChsaXN0ZW5fam1wYiwgMSk7Cit9CisKK2ludCBzc19saXN0ZW4gKGludCBzY2lfaWR4KQoreworICAgIGNoYXIgKmNwOworICAgIHNzX2RhdGEgKmluZm87CisgICAgc2lncmV0X3QgKCpzaWdfaW50KShpbnQpLCAoKm9sZF9zaWdfY29udCkoaW50KTsKKyAgICBjaGFyIGlucHV0W0JVRlNJWl07CisgICAgc2lnc2V0X3Qgb21hc2ssIGlnbWFzazsKKyAgICBpbnQgY29kZTsKKyAgICBqbXBfYnVmIG9sZF9qbXBiOworICAgIHNzX2RhdGEgKm9sZF9pbmZvID0gY3VycmVudF9pbmZvOworICAgIGNoYXIgKmxpbmU7CisKKyAgICBjdXJyZW50X2luZm8gPSBpbmZvID0gc3NfaW5mbyhzY2lfaWR4KTsKKyAgICBzaWdfY29udCA9IChzaWdyZXRfdCAoKikoaW50KSkgMDsKKyAgICBpbmZvLT5hYm9ydCA9IDA7CisgICAgc2lnZW1wdHlzZXQoJmlnbWFzayk7CisgICAgc2lnYWRkc2V0KCZpZ21hc2ssIFNJR0lOVCk7CisgICAgc2lncHJvY21hc2soU0lHX0JMT0NLLCAmaWdtYXNrLCAmb21hc2spOworICAgIG1lbWNweShvbGRfam1wYiwgbGlzdGVuX2ptcGIsIHNpemVvZihqbXBfYnVmKSk7CisgICAgc2lnX2ludCA9IHNpZ25hbChTSUdJTlQsIGxpc3Rlbl9pbnRfaGFuZGxlcik7CisgICAgc2V0am1wKGxpc3Rlbl9qbXBiKTsKKyAgICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9tYXNrLCAoc2lnc2V0X3QgKikgMCk7CisKKyAgICB3aGlsZSghaW5mby0+YWJvcnQpIHsKKwlvbGRfc2lnX2NvbnQgPSBzaWdfY29udDsKKwlzaWdfY29udCA9IHNpZ25hbChTSUdDT05ULCBwcmludF9wcm9tcHQpOworCWlmIChzaWdfY29udCA9PSBwcmludF9wcm9tcHQpCisJICAgIHNpZ19jb250ID0gb2xkX3NpZ19jb250OworCWlmIChpbmZvLT5yZWFkbGluZSkgeworCQlsaW5lID0gKCppbmZvLT5yZWFkbGluZSkoY3VycmVudF9pbmZvLT5wcm9tcHQpOworCX0gZWxzZSB7CisJCXByaW50X3Byb21wdCgwKTsKKwkJaWYgKGZnZXRzKGlucHV0LCBCVUZTSVosIHN0ZGluKSA9PSBpbnB1dCkKKwkJCWxpbmUgPSBpbnB1dDsKKwkJZWxzZQorCQkJbGluZSA9IE5VTEw7CisKKwkJaW5wdXRbQlVGU0laLTFdID0gMDsKKwl9CisJaWYgKGxpbmUgPT0gTlVMTCkgeworCQljb2RlID0gU1NfRVRfRU9GOworCQkodm9pZCkgc2lnbmFsKFNJR0NPTlQsIHNpZ19jb250KTsKKwkJZ290byBlZ3Jlc3M7CisJfQorCisJY3AgPSBzdHJjaHIobGluZSwgJ1xuJyk7CisJaWYgKGNwKSB7CisJICAgICpjcCA9ICdcMCc7CisJICAgIGlmIChjcCA9PSBsaW5lKQorCQljb250aW51ZTsKKwl9CisJKHZvaWQpIHNpZ25hbChTSUdDT05ULCBzaWdfY29udCk7CisJaWYgKGluZm8tPmFkZF9oaXN0b3J5KQorCQkoKmluZm8tPmFkZF9oaXN0b3J5KShsaW5lKTsKKworCWNvZGUgPSBzc19leGVjdXRlX2xpbmUgKHNjaV9pZHgsIGxpbmUpOworCWlmIChjb2RlID09IFNTX0VUX0NPTU1BTkRfTk9UX0ZPVU5EKSB7CisJICAgIHJlZ2lzdGVyIGNoYXIgKmMgPSBsaW5lOworCSAgICB3aGlsZSAoKmMgPT0gJyAnIHx8ICpjID09ICdcdCcpCisJCWMrKzsKKwkgICAgY3AgPSBzdHJjaHIgKGMsICcgJyk7CisJICAgIGlmIChjcCkKKwkJKmNwID0gJ1wwJzsKKwkgICAgY3AgPSBzdHJjaHIgKGMsICdcdCcpOworCSAgICBpZiAoY3ApCisJCSpjcCA9ICdcMCc7CisJICAgIHNzX2Vycm9yIChzY2lfaWR4LCAwLAorCQkgICAgIlVua25vd24gcmVxdWVzdCBcIiVzXCIuICBUeXBlIFwiP1wiIGZvciBhIHJlcXVlc3QgbGlzdC4iLAorCQkgICAgICAgYyk7CisJfQorCWlmIChpbmZvLT5yZWFkbGluZSkKKwkJZnJlZShsaW5lKTsKKyAgICB9CisgICAgY29kZSA9IDA7CitlZ3Jlc3M6CisgICAgKHZvaWQpIHNpZ25hbChTSUdJTlQsIHNpZ19pbnQpOworICAgIG1lbWNweShsaXN0ZW5fam1wYiwgb2xkX2ptcGIsIHNpemVvZihqbXBfYnVmKSk7CisgICAgY3VycmVudF9pbmZvID0gb2xkX2luZm87CisgICAgcmV0dXJuIGNvZGU7Cit9CisKK3ZvaWQgc3NfYWJvcnRfc3Vic3lzdGVtKGludCBzY2lfaWR4LCBpbnQgY29kZSkKK3sKKyAgICBzc19pbmZvKHNjaV9pZHgpLT5hYm9ydCA9IDE7CisgICAgc3NfaW5mbyhzY2lfaWR4KS0+ZXhpdF9zdGF0dXMgPSBjb2RlOworCit9CisKK3ZvaWQgc3NfcXVpdChpbnQgYXJnYyBfX1NTX0FUVFIoKHVudXNlZCkpLAorCSAgICAgY29uc3QgY2hhciAqIGNvbnN0ICphcmd2IF9fU1NfQVRUUigodW51c2VkKSksCisJICAgICBpbnQgc2NpX2lkeCwgcG9pbnRlciBpbmZvcCBfX1NTX0FUVFIoKHVudXNlZCkpKQoreworICAgIHNzX2Fib3J0X3N1YnN5c3RlbShzY2lfaWR4LCAwKTsKK30KKworI2lmZGVmIEhBVkVfRExPUEVOCisjZGVmaW5lIGdldF9yZXF1ZXN0KHRibCxpZHgpICAgICgodGJsKSAtPiByZXF1ZXN0cyArIChpZHgpKQorCitzdGF0aWMgY2hhciAqY21kX2dlbmVyYXRvcihjb25zdCBjaGFyICp0ZXh0LCBpbnQgc3RhdGUpCit7CisJc3RhdGljIGludAlsZW47CisJc3RhdGljIHNzX3JlcXVlc3RfdGFibGUgKipycXRibDsKKwlzdGF0aWMgaW50CWN1cnJfcnF0OworCXN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgKiBuYW1lOworCXNzX3JlcXVlc3RfZW50cnkgKnJlcXVlc3Q7CisJY2hhcgkJKnJldDsKKworCWlmIChzdGF0ZSA9PSAwKSB7CisJCWxlbiA9IHN0cmxlbih0ZXh0KTsKKwkJcnF0YmwgPSBjdXJyZW50X2luZm8tPnJxdF90YWJsZXM7CisJCWlmICghcnF0YmwgfHwgISpycXRibCkKKwkJCXJldHVybiAwOworCQljdXJyX3JxdCA9IDA7CisJCW5hbWUgPSAwOworCX0KKworCXdoaWxlICgxKSB7CisJCWlmICghbmFtZSB8fCAhKm5hbWUpIHsKKwkJCXJlcXVlc3QgPSBnZXRfcmVxdWVzdCgqcnF0YmwsIGN1cnJfcnF0KyspOworCQkJbmFtZSA9IHJlcXVlc3QtPmNvbW1hbmRfbmFtZXM7CisJCQlpZiAoIW5hbWUpIHsKKwkJCQlycXRibCsrOworCQkJCWlmICgqcnF0YmwpIHsKKwkJCQkJY3Vycl9ycXQgPSAwOworCQkJCQljb250aW51ZTsKKwkJCQl9IGVsc2UKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKHN0cm5jbXAoKm5hbWUsIHRleHQsIGxlbikgPT0gMCkgeworCQkJcmV0ID0gbWFsbG9jKHN0cmxlbigqbmFtZSkrMSk7CisJCQlpZiAocmV0KQorCQkJCXN0cmNweShyZXQsICpuYW1lKTsKKwkJCW5hbWUrKzsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJbmFtZSsrOworCX0KKworCXJldHVybiAwOworfQorCitjaGFyICoqc3NfcmxfY29tcGxldGlvbihjb25zdCBjaGFyICp0ZXh0LCBpbnQgc3RhcnQsCisJCQlpbnQgZW5kIF9fU1NfQVRUUigodW51c2VkKSkpCit7CisJaWYgKChzdGFydCA9PSAwKSAmJiBjdXJyZW50X2luZm8tPnJsX2NvbXBsZXRpb25fbWF0Y2hlcykKKwkJcmV0dXJuICgqY3VycmVudF9pbmZvLT5ybF9jb21wbGV0aW9uX21hdGNoZXMpCisJCQkodGV4dCwgY21kX2dlbmVyYXRvcik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliL3NzL21pdC1zaXBiLWNvcHlyaWdodC5oIGIvbGliL3NzL21pdC1zaXBiLWNvcHlyaWdodC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmY2ZjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3MvbWl0LXNpcGItY29weXJpZ2h0LmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKworQ29weXJpZ2h0IDE5ODcgYnkgdGhlIFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZAorCW9mIHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKK2FuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzCitoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZQorYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kCit0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sCithbmQgdGhhdCB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZQordXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24KK29mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCitNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQKK3RoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzCitwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorCisqLworCmRpZmYgLS1naXQgYS9saWIvc3MvbWtfY21kcy4xIGIvbGliL3NzL21rX2NtZHMuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTZlNDgzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3NzL21rX2NtZHMuMQpAQCAtMCwwICsxLDU5IEBACisuXCIgQ29weXJpZ2h0IChjKSAyMDAzIFRoZW9kb3JlIFRzJ28KKy5cIgorLlRIIE1LX0NNRFMgMSAiMjAwMyIgRTJGU1BST0dTCisuU0ggTkFNRQorbWtfY21kcyBcLSBlcnJvciB0YWJsZSBjb21waWxlcgorLlNIIFNZTk9QU0lTCisuQiBta19jbWRzCitmaWxlCisuU0ggREVTQ1JJUFRJT04KKy5CIE1rX2NtZHMKK2NvbnZlcnRzIGEgdGFibGUgbGlzdGluZyBjb21tYW5kIG5hbWVzIGFuZCBhc3NvY2lhdGVkIGhlbHAgbWVzc2FnZXMKK2ludG8gYSBDIHNvdXJjZSBmaWxlIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCB0aGUKKy5JUiBzcyAoMykKK2xpYnJhcnkuCisKK1RoZSBzb3VyY2UgZmlsZSBuYW1lIG11c3QgZW5kIHdpdGggYSBzdWZmaXggb2YgYGAuY3QnJzsgdGhlIGZpbGUKK2NvbnNpc3RzIG9mIGEgZGVjbGFyYXRpb24gc3VwcGx5aW5nIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIHRhYmxlOgorCisuQiBjb21tYW5kX3RhYmxlCisuSSBuYW1lCisKK2ZvbGxvd2VkIGJ5IGVudHJpZXMgb2YgdGhlIGZvcm06CisKK1sKKy5CIHJlcXVlc3QKK3wKKy5CIHVuaW1wbGVtZW50ZWQKK10gCisuSSBuYW1lLAorIgorLkkgc3RyaW5nCisiWywgYWJicmV2XS4uLjsKKworYW5kIGEgZmluYWwKKworLkIgZW5kCisKK3RvIGluZGljYXRlIHRoZSBlbmQgb2YgdGhlIHRhYmxlLgorCitBIEMgc291cmNlIGZpbGUgaXMgZ2VuZXJhdGVkIHdoaWNoIHNob3VsZCBiZSBjb21waWxlZCBhbmQgbGlua2VkCit3aXRoIHRoZSBvYmplY3QgZmlsZXMgdXNlIHRoZSBzcyBsaWJyYXJ5LiAgIAorCitBIGBgIycnIGluIHRoZSBzb3VyY2UgZmlsZSBpcyB0cmVhdGVkIGFzIGEgY29tbWVudCBjaGFyYWN0ZXIsIGFuZCBhbGwKK3JlbWFpbmluZyB0ZXh0IHRvIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBsaW5lIHdpbGwgYmUgaWdub3JlZC4KKworLlNIIEJVR1MKKworU2luY2UgdGhlIG9yaWdpbmFsCisuQiBta19jbWRzCit1c2VzIGEgdmVyeSBzaW1wbGUgcGFyc2VyIGJhc2VkIG9uCisuSVIgeWFjYyAoMSksIAorYW5kIHRoaXMgY3VycmVudCB2ZXJzaW9uIG9mIAorLkIgbWtfY21kcwordXNlcyBhbiBhd2svc2VkIGNvbWJpbmF0aW9uIG9mIHNjcmlwdHMsIAoraXRzIGVycm9yIHJlY292ZXJ5IGxlYXZlcyBtdWNoIHRvIGJlIGRlc2lyZWQuCisKKy5TSCAiU0VFIEFMU08iCitzcyAoMykKKwpkaWZmIC0tZ2l0IGEvbGliL3NzL21rX2NtZHMuc2guaW4gYi9saWIvc3MvbWtfY21kcy5zaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODk3NmE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3NzL21rX2NtZHMuc2guaW4KQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisjCisjCisKK2RhdGFyb290ZGlyPUBkYXRhcm9vdGRpckAKK0RJUj0iJHtESVItQGRhdGFkaXJAL3NzfSIKK1NTX0RJUj0iQFNTX0RJUkAiCitBV0s9QEFXS0AKK1NFRD1AU0VEQAorCitmb3IgYXNfdmFyIGluIFwKKyAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKKyAgTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIFwKKyAgTENfVEVMRVBIT05FIExDX1RJTUUKK2RvCisgIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCisgICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCisgIGVsc2UKKyAgICAkYXNfdW5zZXQgJGFzX3ZhcgorICBmaQorZG9uZQorCitpZiB0ZXN0ICJ4JDEiID0geCA7IHRoZW4KKyAgICBlY2hvICJVc2FnZTogbWtfY21kcyBmaWxlIgorICAgIGV4aXQgMQorZmkKKworaWYgdGVzdCAtbiAiJF9TU19ESVJfT1ZFUlJJREUiIDsgdGhlbgorICAgIERJUj0iJF9TU19ESVJfT1ZFUlJJREUiOworZmkKKworaWYgdGVzdCAhIC1mICRESVIvY3RfYy5zZWQgfHwgdGVzdCAhIC1mICRESVIvY3RfYy5hd2sgOyB0aGVuCisgICAgRElSPSIkU1NfRElSIgorIyAgICBlY2hvICJGYWxsaW5nIGJhY2sgdG8gJERJUi4uLiIKKyAgICBpZiB0ZXN0ICEgLWYgIiRESVIvY3RfYy5zZWQiIHx8IHRlc3QgISAtZiAiJERJUi9jdF9jLmF3ayIgOyB0aGVuCisJZWNobyAibWtfY21kczogQ291bGRuJ3QgZmluZCBta19jbWRzJ3MgdGVtcGxhdGUgZmlsZXMuIgorCWV4aXQgMQorICAgIGZpCitmaQorCitGSUxFPSIkMSIKK1JPT1Q9YGVjaG8gJDEgfCBzZWQgLWUgcy8uY3QkLy9gCitCQVNFPWBiYXNlbmFtZSAiJFJPT1QiYAorVE1QPSJjdCQkLmMiCisKK2lmIHRlc3QgISAtZiAiJEZJTEUiIDsgdGhlbgorICAgIGVjaG8gIm1rX2NtZHM6ICRGSUxFOiBGaWxlIG5vdCBmb3VuZCIKKyAgICBleGl0IDE7CitmaQorCiske1NFRH0gLWYgIiR7RElSfS9jdF9jLnNlZCIgICIke0ZJTEV9IiBcCisJfCAke0FXS30gLWYgIiR7RElSfS9jdF9jLmF3ayIgInJvb3RuYW1lPSR7Uk9PVH0iICJvdXRmaWxlPSR7VE1QfSIgLQorCitpZiBncmVwICJeI19fRVJST1JfSU5fRklMRSIgIiR7VE1QfSIgPiAvZGV2L251bGw7IHRoZW4KKwlybSAiJHtUTVB9IgorCWV4aXQgMQorZWxzZQorCXJtIC1mICIke0JBU0V9LmMiCisJbXYgLWYgIiR7VE1QfSIgIiR7QkFTRX0uYyIKKwljaG1vZCBhLXcgIiR7QkFTRX0uYyIKKwlleGl0IDAKK2ZpCmRpZmYgLS1naXQgYS9saWIvc3MvcGFnZXIuYyBiL2xpYi9zcy9wYWdlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Yjg4OTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3MvcGFnZXIuYwpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIFBhZ2VyOiBSb3V0aW5lcyB0byBjcmVhdGUgYSAibW9yZSIgcnVubmluZyBvdXQgb2YgYSBwYXJ0aWN1bGFyIGZpbGUKKyAqIGRlc2NyaXB0b3IuCisgKgorICogQ29weXJpZ2h0IDE5ODcsIDE5ODggYnkgTUlUIFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZAorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlCisgKiBNLkkuVC4gUy5JLlAuQi4gbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorICogZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2Vsc2UKK2V4dGVybiBpbnQgZXJybm87CisjZW5kaWYKKworI2luY2x1ZGUgInNzX2ludGVybmFsLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvZmlsZS5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2lmZGVmIEhBVkVfU1lTX1BSQ1RMX0gKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNlbHNlCisjZGVmaW5lIFBSX0dFVF9EVU1QQUJMRSAzCisjZW5kaWYKKyNpZiAoIWRlZmluZWQoSEFWRV9QUkNUTCkgJiYgZGVmaW5lZChsaW51eCkpCisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNlbmRpZgorCitzdGF0aWMgY2hhciBNT1JFW10gPSAibW9yZSI7CitleHRlcm4gY2hhciAqZ2V0ZW52IFBST1RPVFlQRSgoY29uc3QgY2hhciAqKSk7CisKK2NoYXIgKnNzX3NhZmVfZ2V0ZW52KGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpZiAoKGdldHVpZCgpICE9IGdldGV1aWQoKSkgfHwgKGdldGdpZCgpICE9IGdldGVnaWQoKSkpCisJCXJldHVybiBOVUxMOworI2lmIEhBVkVfUFJDVEwKKwlpZiAocHJjdGwoUFJfR0VUX0RVTVBBQkxFLCAwLCAwLCAwLCAwKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKyNlbHNlCisjaWYgKGRlZmluZWQobGludXgpICYmIGRlZmluZWQoU1lTX3ByY3RsKSkKKwlpZiAoc3lzY2FsbChTWVNfcHJjdGwsIFBSX0dFVF9EVU1QQUJMRSwgMCwgMCwgMCwgMCkgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX1NFQ1VSRV9HRVRFTlYpCisJcmV0dXJuIHNlY3VyZV9nZXRlbnYoYXJnKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fX1NFQ1VSRV9HRVRFTlYpCisJcmV0dXJuIF9fc2VjdXJlX2dldGVudihhcmcpOworI2Vsc2UKKwlyZXR1cm4gZ2V0ZW52KGFyZyk7CisjZW5kaWYKK30KKworLyoKKyAqIHRoaXMgbmVlZHMgYSAqbG90KiBvZiB3b3JrLi4uLgorICoKKyAqIHJ1biBpbiBzYW1lIHByb2Nlc3MKKyAqIGhhbmRsZSBTSUdJTlQgc2Vuc2libHkKKyAqIGFsbG93IGZpbmVyIGNvbnRyb2wgLS0gcHV0LXBhZ2UtYnJlYWstaGVyZQorICovCisKKyNpZm5kZWYgTk9fRk9SSworaW50IHNzX3BhZ2VyX2NyZWF0ZSh2b2lkKQoreworCWludCBmaWxlZGVzWzJdOworCisJaWYgKHBpcGUoZmlsZWRlcykgIT0gMCkKKwkJcmV0dXJuKC0xKTsKKworCXN3aXRjaChmb3JrKCkpIHsKKwljYXNlIC0xOgorCQlyZXR1cm4oLTEpOworCWNhc2UgMDoKKwkJLyoKKwkJICogQ2hpbGQ7IGR1cCByZWFkIGhhbGYgdG8gMCwgY2xvc2UgYWxsIGJ1dCAwLCAxLCBhbmQgMgorCQkgKi8KKwkJaWYgKGR1cDIoZmlsZWRlc1swXSwgMCkgPT0gLTEpCisJCQlleGl0KDEpOworCQlzc19wYWdlX3N0ZGluKCk7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogUGFyZW50OiAgY2xvc2UgInJlYWQiIHNpZGUgb2YgcGlwZSwgcmV0dXJuCisJCSAqICJ3cml0ZSIgc2lkZS4KKwkJICovCisJCSh2b2lkKSBjbG9zZShmaWxlZGVzWzBdKTsKKwkJcmV0dXJuKGZpbGVkZXNbMV0pOworCX0KK30KKyNlbHNlIC8qIGRvbid0IGZvcmsgKi8KK2ludCBzc19wYWdlcl9jcmVhdGUoKQoreworICAgIGludCBmZDsKKyAgICBmZCA9IG9wZW4oIi9kZXYvdHR5IiwgT19XUk9OTFksIDApOworICAgIHJldHVybiBmZDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHdyaXRlX2FsbChpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXNzaXplX3QgcmV0OworCWludCBjID0gMDsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJcmV0ID0gd3JpdGUoZmQsIGJ1ZiwgY291bnQpOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKChlcnJubyA9PSBFQUdBSU4pIHx8IChlcnJubyA9PSBFSU5UUikpCisJCQkJY29udGludWU7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJY291bnQgLT0gcmV0OworCQlidWYgKz0gcmV0OworCQljICs9IHJldDsKKwl9CisJcmV0dXJuIGM7Cit9CisKK3ZvaWQgc3NfcGFnZV9zdGRpbih2b2lkKQoreworCWludCBpOworCXNpZ3NldF90IG1hc2s7CisKKwlmb3IgKGkgPSAzOyBpIDwgMzI7IGkrKykKKwkJKHZvaWQpIGNsb3NlKGkpOworCSh2b2lkKSBzaWduYWwoU0lHSU5ULCBTSUdfREZMKTsKKwlzaWdwcm9jbWFzayhTSUdfQkxPQ0ssIDAsICZtYXNrKTsKKwlzaWdkZWxzZXQoJm1hc2ssIFNJR0lOVCk7CisJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZtYXNrLCAwKTsKKwlpZiAoX3NzX3BhZ2VyX25hbWUgPT0gKGNoYXIgKilOVUxMKSB7CisJCWlmICgoX3NzX3BhZ2VyX25hbWUgPSBzc19zYWZlX2dldGVudigiUEFHRVIiKSkgPT0gKGNoYXIgKilOVUxMKQorCQkJX3NzX3BhZ2VyX25hbWUgPSBNT1JFOworCX0KKwkodm9pZCkgZXhlY2xwKF9zc19wYWdlcl9uYW1lLCBfc3NfcGFnZXJfbmFtZSwgKGNoYXIgKikgTlVMTCk7CisJeworCQkvKiBtaW5pbWFsIHJlY292ZXJ5IGlmIHBhZ2VyIHByb2dyYW0gaXNuJ3QgZm91bmQgKi8KKwkJY2hhciBidWZbODBdOworCQlyZWdpc3RlciBpbnQgbjsKKwkJd2hpbGUgKChuID0gcmVhZCgwLCBidWYsIDgwKSkgPiAwKQorCQkJd3JpdGVfYWxsKDEsIGJ1Ziwgbik7CisJfQorCWV4aXQoZXJybm8pOworfQpkaWZmIC0tZ2l0IGEvbGliL3NzL3BhcnNlLmMgYi9saWIvc3MvcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzZjNjc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3NzL3BhcnNlLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmZGVmIEhBU19TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAic3NfaW50ZXJuYWwuaCIKKworZW51bSBwYXJzZV9tb2RlIHsgV0hJVEVTUEFDRSwgVE9LRU4sIFFVT1RFRF9TVFJJTkcgfTsKKworLyoKKyAqIHBhcnNlKGxpbmVfcHRyLCBhcmdjX3B0cikKKyAqCisgKiBGdW5jdGlvbjoKKyAqICAgICAgUGFyc2VzIGxpbmUsIGRpdmlkaW5nIGF0IHdoaXRlc3BhY2UsIGludG8gdG9rZW5zLCByZXR1cm5zCisgKiAgICAgIHRoZSAiYXJnYyIgYW5kICJhcmd2IiB2YWx1ZXMuCisgKiBBcmd1bWVudHM6CisgKiAgICAgIGxpbmVfcHRyIChjaGFyICopCisgKiAgICAgICAgICAgICAgUG9pbnRlciB0byB0ZXh0IHN0cmluZyB0byBiZSBwYXJzZWQuCisgKiAgICAgIGFyZ2NfcHRyIChpbnQgKikKKyAqICAgICAgICAgICAgICBXaGVyZSB0byBwdXQgdGhlICJhcmdjIiAobnVtYmVyIG9mIHRva2VucykgdmFsdWUuCisgKiBSZXR1cm5zOgorICogICAgICBhcmd2IChjaGFyICoqKQorICogICAgICAgICAgICAgIFNlcmllcyBvZiBwb2ludGVycyB0byBwYXJzZWQgdG9rZW5zLgorICovCisKKyNkZWZpbmUgTkVXX0FSR1Yob2xkLG4pIChjaGFyICoqKXJlYWxsb2MoKGNoYXIgKilvbGQsXAorCQkJCQkgKHVuc2lnbmVkKShuKzIpKnNpemVvZihjaGFyKikpCisKK2NoYXIgKipzc19wYXJzZShpbnQgc2NpX2lkeCwgcmVnaXN0ZXIgY2hhciAqbGluZV9wdHIsIGludCAqYXJnY19wdHIpCit7CisgICAgcmVnaXN0ZXIgY2hhciAqKmFyZ3YsICoqbmV3X2FyZ3YsICpjcDsKKyAgICByZWdpc3RlciBpbnQgYXJnYzsKKyAgICByZWdpc3RlciBlbnVtIHBhcnNlX21vZGUgcGFyc2VfbW9kZTsKKworICAgIGFyZ3YgPSAoY2hhciAqKikgbWFsbG9jIChzaXplb2YoY2hhciAqKSk7CisgICAgaWYgKGFyZ3YgPT0gKGNoYXIgKiopTlVMTCkgeworCXNzX2Vycm9yKHNjaV9pZHgsIGVycm5vLCAiQ2FuJ3QgYWxsb2NhdGUgc3RvcmFnZSIpOworCSphcmdjX3B0ciA9IDA7CisJcmV0dXJuKGFyZ3YpOworICAgIH0KKyAgICAqYXJndiA9IChjaGFyICopTlVMTDsKKworICAgIGFyZ2MgPSAwOworCisgICAgcGFyc2VfbW9kZSA9IFdISVRFU1BBQ0U7CS8qIGZsdXNoaW5nIHdoaXRlc3BhY2UgKi8KKyAgICBjcCA9IGxpbmVfcHRyOwkJLyogY3AgaXMgZm9yIG91dHB1dCAqLworICAgIHdoaWxlICgxKSB7CisjaWZkZWYgREVCVUcKKwl7CisJICAgIHByaW50ZiAoImNoYXJhY3RlciBgJWMnLCBtb2RlICVkXG4iLCAqbGluZV9wdHIsIHBhcnNlX21vZGUpOworCX0KKyNlbmRpZgorCXdoaWxlIChwYXJzZV9tb2RlID09IFdISVRFU1BBQ0UpIHsKKwkgICAgaWYgKCpsaW5lX3B0ciA9PSAnXDAnKQorCQlnb3RvIGVuZF9vZl9saW5lOworCSAgICBpZiAoKmxpbmVfcHRyID09ICcgJyB8fCAqbGluZV9wdHIgPT0gJ1x0JykgeworCQlsaW5lX3B0cisrOworCQljb250aW51ZTsKKwkgICAgfQorCSAgICBpZiAoKmxpbmVfcHRyID09ICciJykgeworCQkvKiBnbyB0byBxdW90ZWQtc3RyaW5nIG1vZGUgKi8KKwkJcGFyc2VfbW9kZSA9IFFVT1RFRF9TVFJJTkc7CisJCWNwID0gbGluZV9wdHIrKzsKKwkJbmV3X2FyZ3YgPSBORVdfQVJHViAoYXJndiwgYXJnYyk7CisJCWlmIChuZXdfYXJndiA9PSBOVUxMKSB7CisJCQlmcmVlKGFyZ3YpOworCQkJKmFyZ2NfcHRyID0gMDsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWFyZ3YgPSBuZXdfYXJndjsKKwkJYXJndlthcmdjKytdID0gY3A7CisJCWFyZ3ZbYXJnY10gPSBOVUxMOworCSAgICB9CisJICAgIGVsc2UgeworCQkvKiByYW5kb20tdG9rZW4gbW9kZSAqLworCQlwYXJzZV9tb2RlID0gVE9LRU47CisJCWNwID0gbGluZV9wdHI7CisJCW5ld19hcmd2ID0gTkVXX0FSR1YgKGFyZ3YsIGFyZ2MpOworCQlpZiAobmV3X2FyZ3YgPT0gTlVMTCkgeworCQkJZnJlZShhcmd2KTsKKwkJCSphcmdjX3B0ciA9IDA7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlhcmd2ID0gbmV3X2FyZ3Y7CisJCWFyZ3ZbYXJnYysrXSA9IGxpbmVfcHRyOworCQlhcmd2W2FyZ2NdID0gTlVMTDsKKwkgICAgfQorCX0KKwl3aGlsZSAocGFyc2VfbW9kZSA9PSBUT0tFTikgeworCSAgICBpZiAoKmxpbmVfcHRyID09ICdcMCcpIHsKKwkJKmNwKysgPSAnXDAnOworCQlnb3RvIGVuZF9vZl9saW5lOworCSAgICB9CisJICAgIGVsc2UgaWYgKCpsaW5lX3B0ciA9PSAnICcgfHwgKmxpbmVfcHRyID09ICdcdCcpIHsKKwkJKmNwKysgPSAnXDAnOworCQlsaW5lX3B0cisrOworCQlwYXJzZV9tb2RlID0gV0hJVEVTUEFDRTsKKwkgICAgfQorCSAgICBlbHNlIGlmICgqbGluZV9wdHIgPT0gJyInKSB7CisJCWxpbmVfcHRyKys7CisJCXBhcnNlX21vZGUgPSBRVU9URURfU1RSSU5HOworCSAgICB9CisJICAgIGVsc2UgeworCQkqY3ArKyA9ICpsaW5lX3B0cisrOworCSAgICB9CisJfQorCXdoaWxlIChwYXJzZV9tb2RlID09IFFVT1RFRF9TVFJJTkcpIHsKKwkgICAgaWYgKCpsaW5lX3B0ciA9PSAnXDAnKSB7CisJCXNzX2Vycm9yIChzY2lfaWR4LCAwLAorCQkJICAiVW5iYWxhbmNlZCBxdW90ZXMgaW4gY29tbWFuZCBsaW5lIik7CisJCWZyZWUgKGFyZ3YpOworCQkqYXJnY19wdHIgPSAwOworCQlyZXR1cm4gTlVMTDsKKwkgICAgfQorCSAgICBlbHNlIGlmICgqbGluZV9wdHIgPT0gJyInKSB7CisJCWlmICgqKytsaW5lX3B0ciA9PSAnIicpIHsKKwkJICAgICpjcCsrID0gJyInOworCQkgICAgbGluZV9wdHIrKzsKKwkJfQorCQllbHNlIHsKKwkJICAgIHBhcnNlX21vZGUgPSBUT0tFTjsKKwkJfQorCSAgICB9CisJICAgIGVsc2UgeworCQkqY3ArKyA9ICpsaW5lX3B0cisrOworCSAgICB9CisJfQorICAgIH0KK2VuZF9vZl9saW5lOgorICAgICphcmdjX3B0ciA9IGFyZ2M7CisjaWZkZWYgREVCVUcKKyAgICB7CisJaW50IGk7CisJcHJpbnRmICgiYXJnYyA9ICVkXG4iLCBhcmdjKTsKKwlmb3IgKGkgPSAwOyBpIDw9IGFyZ2M7IGkrKykKKwkgICAgcHJpbnRmICgiXHRhcmd2WyUyZF0gPSBgJXMnXG4iLCBpLAorCQkgICAgYXJndltpXSA/IGFyZ3ZbaV0gOiAiPE5VTEw+Iik7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuKGFyZ3YpOworfQpkaWZmIC0tZ2l0IGEvbGliL3NzL3Byb21wdC5jIGIvbGliL3NzL3Byb21wdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NmMyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3MvcHJvbXB0LmMKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIHByb21wdC5jOiBSb3V0aW5lcyBmb3IgcmV0cmlldmluZyBhbmQgc2V0dGluZyBhIHByb21wdC4KKyAqCisgKiAkSGVhZGVyJAorICogJExvY2tlciQKKyAqCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAic3NfaW50ZXJuYWwuaCIKKwordm9pZCBzc19zZXRfcHJvbXB0KGludCBzY2lfaWR4LCBjaGFyICpuZXdfcHJvbXB0KQoreworICAgICBzc19pbmZvKHNjaV9pZHgpLT5wcm9tcHQgPSBuZXdfcHJvbXB0OworfQorCitjaGFyICpzc19nZXRfcHJvbXB0KGludCBzY2lfaWR4KQoreworICAgICByZXR1cm4oc3NfaW5mbyhzY2lfaWR4KS0+cHJvbXB0KTsKK30KZGlmZiAtLWdpdCBhL2xpYi9zcy9yZXF1ZXN0X3RibC5jIGIvbGliL3NzL3JlcXVlc3RfdGJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1Y2IyOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcy9yZXF1ZXN0X3RibC5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInNzX2ludGVybmFsLmgiCisKKyNkZWZpbmUgc3NydCBzc19yZXF1ZXN0X3RhYmxlCS8qIGZvciBzb21lIHJlYWRhYmxlIGNvZGUuLi4gKi8KKwordm9pZCBzc19hZGRfcmVxdWVzdF90YWJsZShpbnQgc2NpX2lkeCwgc3NydCAqcnF0YmxfcHRyLCBpbnQgcG9zaXRpb24sIGludCAqY29kZV9wdHIpCit7CisJcmVnaXN0ZXIgc3NfZGF0YSAqaW5mbzsKKwlyZWdpc3RlciBpbnQgaSwgc2l6ZTsKKwlzc3J0ICoqdDsKKworCWluZm8gPSBzc19pbmZvKHNjaV9pZHgpOworCWZvciAoc2l6ZT0wOyBpbmZvLT5ycXRfdGFibGVzW3NpemVdICE9IChzc3J0ICopTlVMTDsgc2l6ZSsrKQorCQk7CisJLyogc2l6ZSA9PSBDIHN1YnNjcmlwdCBvZiBOVUxMID09ICNlbGVtZW50cyAqLworCXNpemUgKz0gMjsJCS8qIG5ldyBlbGVtZW50LCBhbmQgTlVMTCAqLworCXQgPSAoc3NydCAqKilyZWFsbG9jKGluZm8tPnJxdF90YWJsZXMsICh1bnNpZ25lZClzaXplKnNpemVvZihzc3J0ICopKTsKKwlpZiAodCA9PSAoc3NydCAqKilOVUxMKSB7CisJCSpjb2RlX3B0ciA9IGVycm5vOworCQlyZXR1cm47CisJfQorCWluZm8tPnJxdF90YWJsZXMgPSB0OworCWlmIChwb3NpdGlvbiA+IHNpemUgLSAyKQorCQlwb3NpdGlvbiA9IHNpemUgLSAyOworCisJaWYgKHNpemUgPiAxKQorCQlmb3IgKGkgPSBzaXplIC0gMjsgaSA+PSBwb3NpdGlvbjsgaS0tKQorCQkJaW5mby0+cnF0X3RhYmxlc1tpKzFdID0gaW5mby0+cnF0X3RhYmxlc1tpXTsKKworCWluZm8tPnJxdF90YWJsZXNbcG9zaXRpb25dID0gcnF0YmxfcHRyOworCWluZm8tPnJxdF90YWJsZXNbc2l6ZS0xXSA9IChzc3J0ICopTlVMTDsKKwkqY29kZV9wdHIgPSAwOworfQorCit2b2lkIHNzX2RlbGV0ZV9yZXF1ZXN0X3RhYmxlKGludCBzY2lfaWR4LCBzc3J0ICpycXRibF9wdHIsIGludCAqY29kZV9wdHIpCit7CisgICAgIHJlZ2lzdGVyIHNzX2RhdGEgKmluZm87CisgICAgIHJlZ2lzdGVyIHNzcnQgKipydDEsICoqcnQyOworCisgICAgICpjb2RlX3B0ciA9IFNTX0VUX1RBQkxFX05PVF9GT1VORDsKKyAgICAgaW5mbyA9IHNzX2luZm8oc2NpX2lkeCk7CisgICAgIHJ0MSA9IGluZm8tPnJxdF90YWJsZXM7CisgICAgIGZvciAocnQyID0gcnQxOyAqcnQxOyBydDErKykgeworCSAgaWYgKCpydDEgIT0gcnF0YmxfcHRyKSB7CisJICAgICAgICpydDIrKyA9ICpydDE7CisJICAgICAgICpjb2RlX3B0ciA9IDA7CisJICB9CisgICAgIH0KKyAgICAgKnJ0MiA9IChzc3J0ICopTlVMTDsKKyAgICAgcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvbGliL3NzL3JlcXVlc3RzLmMgYi9saWIvc3MvcmVxdWVzdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2NlNWQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3NzL3JlcXVlc3RzLmMKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIFZhcmlvdXMgbWlub3Igcm91dGluZXMuLi4KKyAqCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCwgMTk4OSBieSBNSVQKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICogTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJzc19pbnRlcm5hbC5oIgorCisjZGVmaW5lCURFQ0xBUkUobmFtZSkgdm9pZCBuYW1lKGludCBhcmdjLGNvbnN0IGNoYXIgKiBjb25zdCAqYXJndiwgXAorCQkJCWludCBzY2lfaWR4LCB2b2lkICppbmZvcCkKKworLyoKKyAqIHNzX3NlbGZfaWRlbnRpZnkgLS0gYXNzaWduZWQgYnkgZGVmYXVsdCB0byB0aGUgIi4iIHJlcXVlc3QKKyAqLwordm9pZCBzc19zZWxmX2lkZW50aWZ5KGludCBhcmdjIF9fU1NfQVRUUigodW51c2VkKSksCisJCSAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqYXJndiBfX1NTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICBpbnQgc2NpX2lkeCwgdm9pZCAqaW5mb3AgX19TU19BVFRSKCh1bnVzZWQpKSkKK3sKKyAgICAgcmVnaXN0ZXIgc3NfZGF0YSAqaW5mbyA9IHNzX2luZm8oc2NpX2lkeCk7CisgICAgIHByaW50ZigiJXMgdmVyc2lvbiAlc1xuIiwgaW5mby0+c3Vic3lzdGVtX25hbWUsCisJICAgIGluZm8tPnN1YnN5c3RlbV92ZXJzaW9uKTsKK30KKworLyoKKyAqIHNzX3N1YnN5c3RlbV9uYW1lIC0tIHByaW50IG5hbWUgb2Ygc3Vic3lzdGVtCisgKi8KK3ZvaWQgc3Nfc3Vic3lzdGVtX25hbWUoaW50IGFyZ2MgX19TU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqYXJndiBfX1NTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICAgaW50IHNjaV9pZHgsCisJCSAgICAgICB2b2lkICppbmZvcCBfX1NTX0FUVFIoKHVudXNlZCkpKQoreworICAgICBwcmludGYoIiVzXG4iLCBzc19pbmZvKHNjaV9pZHgpLT5zdWJzeXN0ZW1fbmFtZSk7Cit9CisKKy8qCisgKiBzc19zdWJzeXN0ZW1fdmVyc2lvbiAtLSBwcmludCB2ZXJzaW9uIG9mIHN1YnN5c3RlbQorICovCit2b2lkIHNzX3N1YnN5c3RlbV92ZXJzaW9uKGludCBhcmdjIF9fU1NfQVRUUigodW51c2VkKSksCisJCQkgIGNvbnN0IGNoYXIgKiBjb25zdCAqYXJndiBfX1NTX0FUVFIoKHVudXNlZCkpLAorCQkJICBpbnQgc2NpX2lkeCwKKwkJCSAgdm9pZCAqaW5mb3AgX19TU19BVFRSKCh1bnVzZWQpKSkKK3sKKyAgICAgcHJpbnRmKCIlc1xuIiwgc3NfaW5mbyhzY2lfaWR4KS0+c3Vic3lzdGVtX3ZlcnNpb24pOworfQorCisvKgorICogc3NfdW5pbXBsZW1lbnRlZCAtLSByb3V0aW5lIG5vdCBpbXBsZW1lbnRlZCAoc2hvdWxkIGJlCisgKiBzZXQgdXAgYXMgKGRvbnRfbGlzdCxkb250X3N1bW1hcml6ZSkpCisgKi8KK3ZvaWQgc3NfdW5pbXBsZW1lbnRlZChpbnQgYXJnYyBfX1NTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICBjb25zdCBjaGFyICogY29uc3QgKmFyZ3YgX19TU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgaW50IHNjaV9pZHgsIHZvaWQgKmluZm9wIF9fU1NfQVRUUigodW51c2VkKSkpCit7CisgICAgIHNzX3BlcnJvcihzY2lfaWR4LCBTU19FVF9VTklNUExFTUVOVEVELCAiIik7Cit9CmRpZmYgLS1naXQgYS9saWIvc3Mvc3MuaCBiL2xpYi9zcy9zcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMzNmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3Mvc3MuaApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IDE5ODcsIDE5ODggYnkgTUlUIFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZAorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlCisgKiBNLkkuVC4gUy5JLlAuQi4gbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorICogZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIFRoaXMgcXVvdGUgaXMganVzdCB0b28gZ29vZCB0byBub3QgcGFzcyBvbjoKKyAqCisgKiAJIkJUVywgSSB3b3VsZCBoYXZlIHJlamVjdGVkIHRoZSBuYW1lIFN0b3J5IFNlcnZlciBiZWNhdXNlIGl0cworICogCWluaXRpYWxzIGFyZSBTUywgdGhlIG5hbWUgb2YgdGhlIHNlY3JldCBwb2xpY2UgaW4gTmF6aQorICogCUdlcm1hbnksIHByb2JhYmx5IHRoZSBtb3N0IGRlc3Bpc2VkIHBhaXIgb2YgbGV0dGVycyBpbiB3ZXN0ZXJuCisgKiAJY3VsdHVyZS4iICAtLS0gaHR0cDovL3NjcmlwdGluZ25ld3NhcmNoaXZlLnVzZXJsYW5kLmNvbS8xOTk5LzEyLzEzCisgKgorICogTGV0IG5vIG9uZSBzYXkgcG9saXRpY2FsIGNvcnJlY3RuZXNzIGlzbid0IGRlYWQuLi4uCisgKi8KKworI2lmbmRlZiBfc3NfaAorI2RlZmluZSBfc3NfaCBfX0ZJTEVfXworCisjaW5jbHVkZSA8c3Mvc3NfZXJyLmg+CisKKyNkZWZpbmUgX19TU19DT05TVCBjb25zdAorI2RlZmluZSBfX1NTX1BST1RPIChpbnQsIGNvbnN0IGNoYXIgKiBjb25zdCAqLCBpbnQsIHZvaWQgKikKKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9fU1NfQVRUUih4KSBfX2F0dHJpYnV0ZV9fKHgpCisjZWxzZQorI2RlZmluZSBfX1NTX0FUVFIoeCkKKyNlbmRpZgorCisKK3R5cGVkZWYgX19TU19DT05TVCBzdHJ1Y3QgX3NzX3JlcXVlc3RfZW50cnkgeworICAgIF9fU1NfQ09OU1QgY2hhciAqIF9fU1NfQ09OU1QgKmNvbW1hbmRfbmFtZXM7IC8qIHdoYXRldmVyICovCisgICAgdm9pZCAoKiBfX1NTX0NPTlNUIGZ1bmN0aW9uKSBfX1NTX1BST1RPOyAvKiBmb28gKi8KKyAgICBfX1NTX0NPTlNUIGNoYXIgKiBfX1NTX0NPTlNUIGluZm9fc3RyaW5nOwkvKiBOVUxMICovCisgICAgaW50IGZsYWdzOwkJCS8qIDAgKi8KK30gc3NfcmVxdWVzdF9lbnRyeTsKKwordHlwZWRlZiBfX1NTX0NPTlNUIHN0cnVjdCBfc3NfcmVxdWVzdF90YWJsZSB7CisgICAgaW50IHZlcnNpb247CisgICAgc3NfcmVxdWVzdF9lbnRyeSAqcmVxdWVzdHM7Cit9IHNzX3JlcXVlc3RfdGFibGU7CisKKyNkZWZpbmUgU1NfUlFUX1RCTF9WMgkyCisKK3R5cGVkZWYgc3RydWN0IF9zc19ycF9vcHRpb25zIHsJLyogREVGQVVMVCBWQUxVRVMgKi8KKyAgICBpbnQgdmVyc2lvbjsJCS8qIFNTX1JQX1YxICovCisgICAgdm9pZCAoKnVua25vd24pIF9fU1NfUFJPVE87CS8qIGNhbGwgZm9yIHVua25vd24gY29tbWFuZCAqLworICAgIGludCBhbGxvd19zdXNwZW5kOworICAgIGludCBjYXRjaF9pbnQ7Cit9IHNzX3JwX29wdGlvbnM7CisKKyNkZWZpbmUgU1NfUlBfVjEgMQorCisjZGVmaW5lIFNTX09QVF9ET05UX0xJU1QJMHgwMDAxCisjZGVmaW5lIFNTX09QVF9ET05UX1NVTU1BUklaRQkweDAwMDIKKwordm9pZCBzc19oZWxwIF9fU1NfUFJPVE87CisjaWYgMAorY2hhciAqc3NfY3VycmVudF9yZXF1ZXN0KCk7CS8qIFRoaXMgaXMgYWN0dWFsbHkgYSBtYWNybyAqLworI2VuZGlmCisKK2NoYXIgKnNzX25hbWUoaW50IHNjaV9pZHgpOwordm9pZCBzc19lcnJvciAoaW50LCBsb25nLCBjaGFyIGNvbnN0ICosIC4uLikKKwlfX1NTX0FUVFIoKGZvcm1hdChwcmludGYsIDMsIDQpKSk7Cit2b2lkIHNzX3BlcnJvciAoaW50LCBsb25nLCBjaGFyIGNvbnN0ICopOworCitpbnQgc3NfY3JlYXRlX2ludm9jYXRpb24oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHZvaWQgKiwKKwkJCSBzc19yZXF1ZXN0X3RhYmxlICosIGludCAqKTsKK3ZvaWQgc3NfZGVsZXRlX2ludm9jYXRpb24oaW50KTsKK2ludCBzc19saXN0ZW4oaW50KTsKK2ludCBzc19leGVjdXRlX2xpbmUoaW50LCBjaGFyICopOwordm9pZCBzc19hZGRfcmVxdWVzdF90YWJsZShpbnQsIHNzX3JlcXVlc3RfdGFibGUgKiwgaW50LCBpbnQgKik7Cit2b2lkIHNzX2RlbGV0ZV9yZXF1ZXN0X3RhYmxlKGludCwgc3NfcmVxdWVzdF90YWJsZSAqLCBpbnQgKik7Cit2b2lkIHNzX2Fib3J0X3N1YnN5c3RlbShpbnQgc2NpX2lkeCwgaW50IGNvZGUpOwordm9pZCBzc19xdWl0KGludCBhcmdjLCBjb25zdCBjaGFyICogY29uc3QgKmFyZ3YsIGludCBzY2lfaWR4LCB2b2lkICppbmZvcCk7Cit2b2lkIHNzX3NlbGZfaWRlbnRpZnkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBjb25zdCAqYXJndiwgaW50IHNjaV9pZHgsIHZvaWQgKmluZm9wKTsKK3ZvaWQgc3Nfc3Vic3lzdGVtX25hbWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBjb25zdCAqYXJndiwKKwkJICAgICAgIGludCBzY2lfaWR4LCB2b2lkICppbmZvcCk7Cit2b2lkIHNzX3N1YnN5c3RlbV92ZXJzaW9uKGludCBhcmdjLCBjb25zdCBjaGFyICogY29uc3QgKmFyZ3YsCisJCQkgIGludCBzY2lfaWR4LCB2b2lkICppbmZvcCk7Cit2b2lkIHNzX3VuaW1wbGVtZW50ZWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBjb25zdCAqYXJndiwKKwkJICAgICAgaW50IHNjaV9pZHgsIHZvaWQgKmluZm9wKTsKK3ZvaWQgc3Nfc2V0X3Byb21wdChpbnQgc2NpX2lkeCwgY2hhciAqbmV3X3Byb21wdCk7CitjaGFyICpzc19nZXRfcHJvbXB0KGludCBzY2lfaWR4KTsKK3ZvaWQgc3NfZ2V0X3JlYWRsaW5lKGludCBzY2lfaWR4KTsKK2NoYXIgKnNzX3NhZmVfZ2V0ZW52KGNvbnN0IGNoYXIgKmFyZyk7CisKK2V4dGVybiBzc19yZXF1ZXN0X3RhYmxlIHNzX3N0ZF9yZXF1ZXN0czsKKyNlbmRpZiAvKiBfc3NfaCAqLwpkaWZmIC0tZ2l0IGEvbGliL3NzL3NzLnBjLmluIGIvbGliL3NzL3NzLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOWVjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3Mvc3MucGMuaW4KQEAgLTAsMCArMSwxMiBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisKK05hbWU6IHNzCitEZXNjcmlwdGlvbjogU3Vic3lzdGVtIGNvbW1hbmQgcGFyc2luZyBsaWJyYXJ5CitWZXJzaW9uOiBARTJGU1BST0dTX1ZFUlNJT05ACitSZXF1aXJlcy5wcml2YXRlOiBjb21fZXJyCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9zcyAtSSR7aW5jbHVkZWRpcn0KK0xpYnM6IC1MJHtsaWJkaXJ9IC1sc3MKK0xpYnMucHJpdmF0ZTogQERMT1BFTl9MSUJACmRpZmYgLS1naXQgYS9saWIvc3Mvc3NfZXJyLmV0IGIvbGliL3NzL3NzX2Vyci5ldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGU5ZGZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3NzL3NzX2Vyci5ldApAQCAtMCwwICsxLDM5IEBACisJZXJyb3JfdGFibGUgc3MKKworZWMJU1NfRVRfU1VCU1lTVEVNX0FCT1JURUQsCisJIlN1YnN5c3RlbSBhYm9ydGVkIgorCitlYwlTU19FVF9WRVJTSU9OX01JU01BVENILAorCSJWZXJzaW9uIG1pc21hdGNoIgorCitlYwlTU19FVF9OVUxMX0lOViwKKwkiTm8gY3VycmVudCBpbnZvY2F0aW9uIgorCitlYwlTU19FVF9OT19JTkZPX0RJUiwKKwkiTm8gaW5mbyBkaXJlY3RvcnkiCisKK2VjCVNTX0VUX0NPTU1BTkRfTk9UX0ZPVU5ELAorCSJDb21tYW5kIG5vdCBmb3VuZCIKKworZWMJU1NfRVRfTElORV9BQk9SVEVELAorCSJDb21tYW5kIGxpbmUgYWJvcnRlZCIKKworZWMJU1NfRVRfRU9GLAorCSJFbmQtb2YtZmlsZSByZWFjaGVkIgorCitlYwlTU19FVF9QRVJNSVNTSU9OX0RFTklFRCwKKwkiUGVybWlzc2lvbiBkZW5pZWQiCisKK2VjCVNTX0VUX1RBQkxFX05PVF9GT1VORCwKKwkiUmVxdWVzdCB0YWJsZSBub3QgZm91bmQiCisKK2VjCVNTX0VUX05PX0hFTFBfRklMRSwKKwkiTm8gaW5mbyBhdmFpbGFibGUiCisKK2VjCVNTX0VUX0VTQ0FQRV9ESVNBQkxFRCwKKwkiU2hlbGwgZXNjYXBlcyBhcmUgZGlzYWJsZWQiCisKK2VjCVNTX0VUX1VOSU1QTEVNRU5URUQsCisJIlNvcnJ5LCB0aGlzIHJlcXVlc3QgaXMgbm90IHlldCBpbXBsZW1lbnRlZCIKKworCWVuZApkaWZmIC0tZ2l0IGEvbGliL3NzL3NzX2ludGVybmFsLmggYi9saWIvc3Mvc3NfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWE2YmU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3NzL3NzX2ludGVybmFsLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2lmbmRlZiBfc3Nfc3NfaW50ZXJuYWxfaAorI2RlZmluZSBfc3Nfc3NfaW50ZXJuYWxfaCBfX0ZJTEVfXworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgUFJPVE9UWVBFKHApIHAKK3R5cGVkZWYgdm9pZCAqIHBvaW50ZXI7CisKKyNpbmNsdWRlICJzcy5oIgorCit0eXBlZGVmIGNoYXIgQk9PTDsKKwordHlwZWRlZiBzdHJ1Y3QgX3NzX2FiYnJldl9lbnRyeSB7CisgICAgY2hhciAqbmFtZTsJCQkvKiBhYmJyZXYgbmFtZSAqLworICAgIGNoYXIgKiphYmJyZXY7CQkvKiBuZXcgdG9rZW5zIHRvIGluc2VydCAqLworICAgIHVuc2lnbmVkIGludCBiZWdpbm5pbmdfb2ZfbGluZSA6IDE7Cit9IHNzX2FiYnJldl9lbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QgX3NzX2FiYnJldl9saXN0IHsKKyAgICBpbnQgbl9hYmJyZXZzOworICAgIHNzX2FiYnJldl9lbnRyeSAqZmlyc3RfYWJicmV2OworfSBzc19hYmJyZXZfbGlzdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworLyogICAgY2hhciAqcGF0aDsgKi8KKyAgICBzc19hYmJyZXZfbGlzdCBhYmJyZXZzWzEyN107Cit9IHNzX2FiYnJldl9pbmZvOworCit0eXBlZGVmIHN0cnVjdCBfc3NfZGF0YSB7CS8qIGluaXQgdmFsdWVzICovCisgICAgLyogdGhpcyBzdWJzeXN0ZW0gKi8KKyAgICBjb25zdCBjaGFyICpzdWJzeXN0ZW1fbmFtZTsKKyAgICBjb25zdCBjaGFyICpzdWJzeXN0ZW1fdmVyc2lvbjsKKyAgICAvKiBjdXJyZW50IHJlcXVlc3QgaW5mbyAqLworICAgIGludCBhcmdjOworICAgIGNoYXIgKiphcmd2OwkJLyogYXJnIGxpc3QgKi8KKyAgICBjaGFyIGNvbnN0ICpjdXJyZW50X3JlcXVlc3Q7IC8qIHByaW1hcnkgbmFtZSAqLworICAgIC8qIGluZm8gZGlyZWN0b3J5IGZvciAnaGVscCcgKi8KKyAgICBjaGFyICoqaW5mb19kaXJzOworICAgIC8qIHRvIGJlIGV4dHJhY3RlZCBieSBzdWJyb3V0aW5lcyAqLworICAgIHBvaW50ZXIgaW5mb19wdHI7CQkvKiAodm9pZCAqKSBOVUxMICovCisgICAgLyogZm9yIHNzX2xpc3RlbiBwcm9jZXNzaW5nICovCisgICAgY2hhciAqcHJvbXB0OworICAgIHNzX3JlcXVlc3RfdGFibGUgKipycXRfdGFibGVzOworICAgIHNzX2FiYnJldl9pbmZvICphYmJyZXZfaW5mbzsKKyAgICBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCAgZXNjYXBlX2Rpc2FibGVkIDogMSwKKwkJICAgICAgYWJicmV2c19kaXNhYmxlZCA6IDE7CisgICAgfSBmbGFnczsKKyAgICAvKgorICAgICAqIER5bmFtaWMgdXNhZ2Ugb2YgcmVhZGxpbmUgbGlicmFyeSBpZiBwcmVzZW50CisgICAgICovCisgICAgdm9pZCAqcmVhZGxpbmVfaGFuZGxlOworICAgIHZvaWQgKCpyZWFkbGluZV9zaHV0ZG93bikoc3RydWN0IF9zc19kYXRhICppbmZvKTsKKyAgICBjaGFyICooKnJlYWRsaW5lKShjb25zdCBjaGFyICopOworICAgIHZvaWQgKCphZGRfaGlzdG9yeSkoY29uc3QgY2hhciAqKTsKKyAgICB2b2lkICgqcmVkaXNwbGF5KSh2b2lkKTsKKyAgICBjaGFyICoqKCpybF9jb21wbGV0aW9uX21hdGNoZXMpKGNvbnN0IGNoYXIgKiwKKwkJCQkgICAgY2hhciAqKCpjb21wbGV0ZXIpKGNvbnN0IGNoYXIgKiwgaW50KSk7CisgICAgLyogdG8gZ2V0IG91dCAqLworICAgIGludCBhYm9ydDsJCQkvKiBleGl0IHN1YnN5c3RlbSAqLworICAgIGludCBleGl0X3N0YXR1czsKK30gc3NfZGF0YTsKKworI2RlZmluZSBDVVJSRU5UX1NTX1ZFUlNJT04gMQorCisjZGVmaW5lCXNzX2luZm8oc2NpX2lkeCkJKF9zc190YWJsZVtzY2lfaWR4XSkKKyNkZWZpbmUJc3NfY3VycmVudF9yZXF1ZXN0KHNjaV9pZHgsY29kZV9wdHIpCVwKKyAgICAgKCpjb2RlX3B0cj0wLHNzX2luZm8oc2NpX2lkeCktPmN1cnJlbnRfcmVxdWVzdCkKK3ZvaWQgc3NfYWRkX2luZm9fZGlyIChpbnQgc2NpX2lkeCwgY2hhciAqaW5mb19kaXIsIGludCAqY29kZV9wdHIpOwordm9pZCBzc19kZWxldGVfaW5mb19kaXIgKGludCBzY2lfaWR4LCBjaGFyICppbmZvX2RpciwgaW50ICpjb2RlX3B0cik7CitpbnQgc3NfZXhlY3V0ZV9saW5lKGludCBzY2lfaWR4LCBjaGFyICpsaW5lX3B0cik7CitjaGFyICoqc3NfcGFyc2UoaW50IHNjaV9pZHgsIGNoYXIgKmxpbmVfcHRyLCBpbnQgKmFyZ2NfcHRyKTsKK3NzX2FiYnJldl9pbmZvICpzc19hYmJyZXZfaW5pdGlhbGl6ZShjaGFyICosIGludCAqKTsKK3ZvaWQgc3NfcGFnZV9zdGRpbih2b2lkKTsKK3ZvaWQgc3NfbGlzdF9yZXF1ZXN0cyhpbnQsIGNoYXIgY29uc3QgKiBjb25zdCAqLCBpbnQsIHBvaW50ZXIpOworaW50IHNzX2V4ZWN1dGVfY29tbWFuZChpbnQgc2NpX2lkeCwgY2hhciAqYXJndltdKTsKK2ludCBzc19wYWdlcl9jcmVhdGUodm9pZCk7CitjaGFyICpzc19zYWZlX2dldGVudihjb25zdCBjaGFyICphcmcpOworY2hhciAqKnNzX3JsX2NvbXBsZXRpb24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKKworZXh0ZXJuIHNzX2RhdGEgKipfc3NfdGFibGU7CitleHRlcm4gY2hhciAqc3NfZXRfbXNnc1tdOworZXh0ZXJuIGNoYXIgKl9zc19wYWdlcl9uYW1lOworCisjaWZkZWYgVVNFX1NJR1BST0NNQVNLCisvKiBmYWtlIHNpZ21hc2ssIHNpZ2Jsb2NrLCBzaWdzZXRtYXNrICovCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZGVmaW5lIHNpZ21hc2soeCkgKDFMPDwoeCktMSkKKyNkZWZpbmUgc2lnc2V0bWFzayh4KSBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywmeCxOVUxMKQorc3RhdGljIGludCBfZmFrZV9zaWdzdG9yZTsKKyNkZWZpbmUgc2lnYmxvY2soeCkgKF9mYWtlX3NpZ3N0b3JlPXgsc2lncHJvY21hc2soU0lHX0JMT0NLLCZfZmFrZV9zaWdzdG9yZSwwKSkKKyNlbmRpZgorI2VuZGlmIC8qIF9zc19pbnRlcm5hbF9oICovCmRpZmYgLS1naXQgYS9saWIvc3Mvc3RkX3Jxcy5jdCBiL2xpYi9zcy9zdGRfcnFzLmN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMDI4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3Mvc3RkX3Jxcy5jdApAQCAtMCwwICsxLDQ2IEBACisJY29tbWFuZF90YWJsZQlzc19zdGRfcmVxdWVzdHM7CisKKwlyZXF1ZXN0CXNzX3NlbGZfaWRlbnRpZnksICJJZGVudGlmeSB0aGUgc3Vic3lzdGVtLiIsCisJCSIuIiwKKwkJKGRvbnRfbGlzdCwgZG9udF9zdW1tYXJpemUpOworCisJcmVxdWVzdAlzc19oZWxwLCAiRGlzcGxheSBpbmZvIG9uIGNvbW1hbmQgb3IgdG9waWMuIiwKKwkJaGVscDsKKworCXVuaW1wbGVtZW50ZWQKKwkJc3NfbGlzdF9oZWxwLAorCQkiTGlzdCB0b3BpY3MgZm9yIHdoaWNoIGhlbHAgaXMgYXZhaWxhYmxlLiIsCisJCWxpc3RfaGVscCwgbGg7CisKKwlyZXF1ZXN0CXNzX2xpc3RfcmVxdWVzdHMsICJMaXN0IGF2YWlsYWJsZSBjb21tYW5kcy4iLAorCQlsaXN0X3JlcXVlc3RzLCBsciwgIj8iOworCisJcmVxdWVzdAlzc19xdWl0LCAiTGVhdmUgdGhlIHN1YnN5c3RlbS4iLAorCQlxdWl0LCBxOworCisJdW5pbXBsZW1lbnRlZAorCQlzc19hYmJyZXYsCisJCSJFbmFibGUvZGlzYWJsZSBhYmJyZXZpYXRpb24gcHJvY2Vzc2luZyBvZiByZXF1ZXN0IGxpbmVzLiIsCisJCWFiYnJldiwgYWI7CisKKwl1bmltcGxlbWVudGVkCisJCXNzX2V4ZWN1dGUsCisJCSJFeGVjdXRlIGEgVU5JWCBjb21tYW5kIGxpbmUuIiwKKwkJZXhlY3V0ZSwgZTsKKworCXVuaW1wbGVtZW50ZWQKKwkJc3Nfc3VtbWFyaXplX3JlcXVlc3RzLAorCQkiUHJvZHVjZSBhIGxpc3Qgb2YgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCByZXF1ZXN0cy4iLAorCQkiPyI7CisJCQorCXJlcXVlc3QJc3Nfc3Vic3lzdGVtX25hbWUsCisJCSJSZXR1cm4gdGhlIG5hbWUgb2YgdGhpcyBzdWJzeXN0ZW0uIiwKKwkJc3Vic3lzdGVtX25hbWUsCisJCShkb250X2xpc3QpOworCisJcmVxdWVzdAlzc19zdWJzeXN0ZW1fdmVyc2lvbiwKKwkJIlJldHVybiB0aGUgdmVyc2lvbiBvZiB0aGlzIHN1YnN5c3RlbS4iLAorCQlzdWJzeXN0ZW1fdmVyc2lvbiwKKwkJKGRvbnRfbGlzdCk7CisKKwllbmQ7CmRpZmYgLS1naXQgYS9saWIvc3MvdGVzdF9jbWQuY3QgYi9saWIvc3MvdGVzdF9jbWQuY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0OWY3OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcy90ZXN0X2NtZC5jdApAQCAtMCwwICsxLDYgQEAKK2NvbW1hbmRfdGFibGUgdGVzdF9jbWRzOworCityZXF1ZXN0IHRlc3RfY21kLCAiVGVzdCBjb21tYW5kIiwKKwl0ZXN0X2NtZCwgdGVzdDsKKworZW5kOwpkaWZmIC0tZ2l0IGEvbGliL3NzL3Rlc3Rfc2NyaXB0IGIvbGliL3NzL3Rlc3Rfc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZjdmZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3MvdGVzdF9zY3JpcHQKQEAgLTAsMCArMSw4IEBACit0ZXN0Cit0ZXN0IGZvbyBiYXIgcXV1eAordGVzdCBiYXIgcXV1eAorcXV1eCBiYXIKK3F1dXgKK3Rlc3QgcXV1eAorcXVpdAordGVzdCBmb28gYmFyCmRpZmYgLS1naXQgYS9saWIvc3MvdGVzdF9zY3JpcHRfZXhwZWN0ZWQgYi9saWIvc3MvdGVzdF9zY3JpcHRfZXhwZWN0ZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzZjgyOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zcy90ZXN0X3NjcmlwdF9leHBlY3RlZApAQCAtMCwwICsxLDIyIEBACit0ZXN0X3NzIDEuMC4gIFR5cGUgJz8nIGZvciBhIGxpc3Qgb2YgY29tbWFuZHMuCisKK3Rlc3RfaWNvdW50OiB0ZXN0CitIZWxsbywgd29ybGQhCitBcmdzOiAKK3Rlc3RfaWNvdW50OiB0ZXN0IGZvbyBiYXIgcXV1eAorSGVsbG8sIHdvcmxkIQorQXJnczogJ2ZvbycsICdiYXInLCAncXV1eCcKK3Rlc3RfaWNvdW50OiB0ZXN0IGJhciBxdXV4CitIZWxsbywgd29ybGQhCitBcmdzOiAnYmFyJywgJ3F1dXgnCit0ZXN0X2ljb3VudDogcXV1eCBiYXIKK3Rlc3Rfc3M6IENvbW1hbmQgbm90IGZvdW5kIHF1dXgKK3Rlc3RfaWNvdW50OiBxdXV4Cit0ZXN0X3NzOiBDb21tYW5kIG5vdCBmb3VuZCBxdXV4Cit0ZXN0X2ljb3VudDogdGVzdCBxdXV4CitIZWxsbywgd29ybGQhCitBcmdzOiAncXV1eCcKK3Rlc3RfaWNvdW50OiBxdWl0Cit0ZXN0X2ljb3VudDogdGVzdCBmb28gYmFyCitIZWxsbywgd29ybGQhCitBcmdzOiAnZm9vJywgJ2JhcicKZGlmZiAtLWdpdCBhL2xpYi9zcy90ZXN0X3NzLmMgYi9saWIvc3MvdGVzdF9zcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzY2E5OWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3MvdGVzdF9zcy5jCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogdGVzdF9zcy5jCisgKgorICogQ29weXJpZ2h0IDE5ODcsIDE5ODggYnkgTUlUIFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZAorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlCisgKiBNLkkuVC4gUy5JLlAuQi4gbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorICogZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAic3MuaCIKKworZXh0ZXJuIHNzX3JlcXVlc3RfdGFibGUgdGVzdF9jbWRzOworCisjZGVmaW5lIFRSVUUgMQorI2RlZmluZSBGQUxTRSAwCisKK3N0YXRpYyBjaGFyIHN1YnN5c3RlbV9uYW1lW10gPSAidGVzdF9zcyI7CitzdGF0aWMgY2hhciB2ZXJzaW9uW10gPSAiMS4wIjsKKworc3RhdGljIGludCBzb3VyY2VfZmlsZShjb25zdCBjaGFyICpjbWRfZmlsZSwgaW50IHNjaV9pZHgpCit7CisJRklMRQkJKmY7CisJY2hhcgkJYnVmWzI1Nl07CisJY2hhcgkJKmNwOworCWludAkJZXhpdF9zdGF0dXMgPSAwOworCWludAkJcmV0dmFsOworCWludCAJCW5vZWNobzsKKworCWlmIChzdHJjbXAoY21kX2ZpbGUsICItIikgPT0gMCkKKwkJZiA9IHN0ZGluOworCWVsc2UgeworCQlmID0gZm9wZW4oY21kX2ZpbGUsICJyIik7CisJCWlmICghZikgeworCQkJcGVycm9yKGNtZF9maWxlKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJZmZsdXNoKHN0ZG91dCk7CisJZmZsdXNoKHN0ZGVycik7CisJc2V0YnVmKHN0ZG91dCwgTlVMTCk7CisJc2V0YnVmKHN0ZGVyciwgTlVMTCk7CisJd2hpbGUgKCFmZW9mKGYpKSB7CisJCWlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWlmIChidWZbMF0gPT0gJyMnKQorCQkJY29udGludWU7CisJCW5vZWNobyA9IDA7CisJCWlmIChidWZbMF0gPT0gJy0nKSB7CisJCQlub2VjaG8gPSAxOworCQkJYnVmWzBdID0gJyAnOworCQl9CisJCWNwID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7CisJCWlmIChjcCkKKwkJCSpjcCA9IDA7CisJCWNwID0gc3RyY2hyKGJ1ZiwgJ1xyJyk7CisJCWlmIChjcCkKKwkJCSpjcCA9IDA7CisJCWlmICghbm9lY2hvKQorCQkJcHJpbnRmKCJ0ZXN0X2ljb3VudDogJXNcbiIsIGJ1Zik7CisJCXJldHZhbCA9IHNzX2V4ZWN1dGVfbGluZShzY2lfaWR4LCBidWYpOworCQlpZiAocmV0dmFsKSB7CisJCQlzc19wZXJyb3Ioc2NpX2lkeCwgcmV0dmFsLCBidWYpOworCQkJZXhpdF9zdGF0dXMrKzsKKwkJfQorCX0KKwlyZXR1cm4gZXhpdF9zdGF0dXM7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgYywgY29kZTsKKwljaGFyICpyZXF1ZXN0ID0gKGNoYXIgKilOVUxMOworCWNoYXIJCSpjbWRfZmlsZSA9IDA7CisJaW50IHNjaV9pZHg7CisJaW50IGV4aXRfc3RhdHVzID0gMDsKKworCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIndSOmY6IikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnUic6CisJCQlyZXF1ZXN0ID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ2YnOgorCQkJY21kX2ZpbGUgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbV9lcnIoYXJndlswXSwgMCwgIlVzYWdlOiB0ZXN0X3NzIFstUiByZXF1ZXN0XSAiCisJCQkJIlstZiBjbWRfZmlsZV0iKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlzY2lfaWR4ID0gc3NfY3JlYXRlX2ludm9jYXRpb24oc3Vic3lzdGVtX25hbWUsIHZlcnNpb24sCisJCQkJICAgICAgIChjaGFyICopTlVMTCwgJnRlc3RfY21kcywgJmNvZGUpOworCWlmIChjb2RlKSB7CisJCXNzX3BlcnJvcihzY2lfaWR4LCBjb2RlLCAiY3JlYXRpbmcgaW52b2NhdGlvbiIpOworCQlleGl0KDEpOworCX0KKworCSh2b2lkKSBzc19hZGRfcmVxdWVzdF90YWJsZSAoc2NpX2lkeCwgJnNzX3N0ZF9yZXF1ZXN0cywgMSwgJmNvZGUpOworCWlmIChjb2RlKSB7CisJCXNzX3BlcnJvciAoc2NpX2lkeCwgY29kZSwgImFkZGluZyBzdGFuZGFyZCByZXF1ZXN0cyIpOworCQlleGl0ICgxKTsKKwl9CisKKwlwcmludGYoInRlc3Rfc3MgJXMuICBUeXBlICc/JyBmb3IgYSBsaXN0IG9mIGNvbW1hbmRzLlxuXG4iLAorCSAgICAgICB2ZXJzaW9uKTsKKworCWlmIChyZXF1ZXN0KSB7CisJCWNvZGUgPSBzc19leGVjdXRlX2xpbmUoc2NpX2lkeCwgcmVxdWVzdCk7CisJCWlmIChjb2RlKSB7CisJCQlzc19wZXJyb3Ioc2NpX2lkeCwgY29kZSwgcmVxdWVzdCk7CisJCQlleGl0X3N0YXR1cysrOworCQl9CisJfSBlbHNlIGlmIChjbWRfZmlsZSkgeworCQlleGl0X3N0YXR1cyA9IHNvdXJjZV9maWxlKGNtZF9maWxlLCBzY2lfaWR4KTsKKwl9IGVsc2UgeworCQlzc19saXN0ZW4oc2NpX2lkeCk7CisJfQorCisJZXhpdChleGl0X3N0YXR1cyk7Cit9CisKKwordm9pZCB0ZXN0X2NtZCAoYXJnYywgYXJndikKKyAgICBpbnQgYXJnYzsKKyAgICBjaGFyICoqYXJndjsKK3sKKyAgICBwcmludGYoIkhlbGxvLCB3b3JsZCFcbiIpOworICAgIHByaW50ZigiQXJnczogIik7CisgICAgd2hpbGUgKCsrYXJndiwgLS1hcmdjKSB7CisJcHJpbnRmKCInJXMnIiwgKmFyZ3YpOworCWlmIChhcmdjID4gMSkKKwkgICAgZnB1dHMoIiwgIiwgc3Rkb3V0KTsKKyAgICB9CisgICAgcHV0Y2hhciAoJ1xuJyk7Cit9CmRpZmYgLS1naXQgYS9saWIvdXVpZC9DT1BZSU5HIGIvbGliL3V1aWQvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjE3MDY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3V1aWQvQ09QWUlORwpAQCAtMCwwICsxLDI1IEBACitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKyAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKK1dBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKK1dISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCitPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKK0JVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKK1VTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0UuCmRpZmYgLS1naXQgYS9saWIvdXVpZC9NYWtlZmlsZS5pbiBiL2xpYi91dWlkL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Y2E0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdXVpZC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDIxMyBAQAorIyBNYWtlZmlsZSBmb3IgdGhlIFVVSUQgbGlicmFyeQorIworCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLi4vLi4KK215X2RpciA9IGxpYi91dWlkCitJTlNUQUxMID0gQElOU1RBTExACisKK0BNQ09ORklHQAorCithbGw6OiAKKworU01BTlBBR0VTPQl1dWlkLjMgdXVpZF9jbGVhci4zIHV1aWRfY29tcGFyZS4zIHV1aWRfY29weS4zIFwKKwkJdXVpZF9nZW5lcmF0ZS4zIHV1aWRfaXNfbnVsbC4zIHV1aWRfcGFyc2UuMyBcCisJCXV1aWRfdGltZS4zIHV1aWRfdW5wYXJzZS4zCisKK09CSlM9CQljbGVhci5vIFwKKwkJY29tcGFyZS5vIFwKKwkJY29weS5vIFwKKwkJZ2VuX3V1aWQubyBcCisJCWlzbnVsbC5vIFwKKwkJcGFjay5vIFwKKwkJcGFyc2UubyBcCisJCXVucGFjay5vIFwKKwkJdW5wYXJzZS5vIFwKKwkJdXVpZF90aW1lLm8KKworU1JDUz0JCSQoc3JjZGlyKS9jbGVhci5jIFwKKwkJJChzcmNkaXIpL2NvbXBhcmUuYyBcCisJCSQoc3JjZGlyKS9jb3B5LmMgXAorCQkkKHNyY2RpcikvZ2VuX3V1aWQuYyBcCisJCSQoc3JjZGlyKS9pc251bGwuYyBcCisJCSQoc3JjZGlyKS9wYWNrLmMgXAorCQkkKHNyY2RpcikvcGFyc2UuYyBcCisJCSQoc3JjZGlyKS91bnBhY2suYyBcCisJCSQoc3JjZGlyKS91bnBhcnNlLmMgXAorCQkkKHNyY2RpcikvdXVpZF90aW1lLmMKKworTElCUkFSWT0gbGlidXVpZAorTElCRElSPSB1dWlkCisKK0VMRl9WRVJTSU9OID0gMS4yCitFTEZfU09fVkVSU0lPTiA9IDEKK0VMRl9JTUFHRSA9IGxpYnV1aWQKK0VMRl9NWURJUiA9IHV1aWQKK0VMRl9JTlNUQUxMX0RJUiA9ICQocm9vdF9saWJkaXIpCitFTEZfT1RIRVJfTElCUyA9IAorCitCU0RMSUJfVkVSU0lPTiA9IDEuMQorQlNETElCX0lNQUdFID0gbGlidXVpZAorQlNETElCX01ZRElSID0gdXVpZAorQlNETElCX0lOU1RBTExfRElSID0gJChyb290X2xpYmRpcikKKworQE1BS0VGSUxFX0xJQlJBUllACitATUFLRUZJTEVfRUxGQAorQE1BS0VGSUxFX0JTRExJQkAKK0BNQUtFRklMRV9QUk9GSUxFQAorCisuYy5vOgorCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJDwgLW8gJEAKKwkkKFEpICQoQ0hFQ0tfQ01EKSAkKEFMTF9DRkxBR1MpICQ8CitAUFJPRklMRV9DTVRACSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtZyAtcGcgLW8gcHJvZmlsZWQvJCoubyAtYyAkPAorQEVMRl9DTVRACSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtZlBJQyAtbyBlbGZzaGFyZWQvJCoubyAtYyAkPAorQEJTRExJQl9DTVRACSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAkKEJTRExJQl9QSUNfRkxBRykgLW8gcGljLyQqLm8gLWMgJDwKKworYWxsOjogdHN0X3V1aWQgdXVpZF90aW1lICQoU01BTlBBR0VTKSB1dWlkLnBjCisKK3V1aWQuaDogJChzcmNkaXIpL3V1aWQuaC5pbgorCSQoRSkgIglDUCAkQCIKKwkkKFEpIGNwICQoc3JjZGlyKS91dWlkLmguaW4gdXVpZC5oCisKKyQodG9wX2J1aWxkZGlyKS9saWIvdXVpZC91dWlkX3R5cGVzLmg6ICQoc3JjZGlyKS91dWlkX3R5cGVzLmguaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwljZCAkKHRvcF9idWlsZGRpcik7IENPTkZJR19GSUxFUz0kKG15X2RpcikvdXVpZF90eXBlcy5oIC4vY29uZmlnLnN0YXR1cworCit0c3RfdXVpZC5vOiAkKHNyY2RpcikvdHN0X3V1aWQuYyB1dWlkLmgKKwkkKEUpICIJQ0MgJEAiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jICQoc3JjZGlyKS90c3RfdXVpZC5jIC1vIHRzdF91dWlkLm8KKwordHN0X3V1aWQ6IHRzdF91dWlkLm8gJChERVBTVEFUSUNfTElCVVVJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyB0c3RfdXVpZCB0c3RfdXVpZC5vICQoU1RBVElDX0xJQlVVSUQpCisKK3V1aWRfdGltZTogJChzcmNkaXIpL3V1aWRfdGltZS5jICQoREVQTElCVVVJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpICQoTERGTEFHUykgLURERUJVRyAtbyB1dWlkX3RpbWUgXAorCQkkKHNyY2RpcikvdXVpZF90aW1lLmMgJChMSUJVVUlEKQorCit1dWlkLjM6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS91dWlkLjMuaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvdXVpZC4zLmluIHV1aWQuMworCit1dWlkX2NsZWFyLjM6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS91dWlkX2NsZWFyLjMuaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvdXVpZF9jbGVhci4zLmluIHV1aWRfY2xlYXIuMworCit1dWlkX2NvbXBhcmUuMzogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL3V1aWRfY29tcGFyZS4zLmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL3V1aWRfY29tcGFyZS4zLmluIHV1aWRfY29tcGFyZS4zCisKK3V1aWRfY29weS4zOiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvdXVpZF9jb3B5LjMuaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvdXVpZF9jb3B5LjMuaW4gdXVpZF9jb3B5LjMKKwordXVpZF9nZW5lcmF0ZS4zOiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvdXVpZF9nZW5lcmF0ZS4zLmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL3V1aWRfZ2VuZXJhdGUuMy5pbiB1dWlkX2dlbmVyYXRlLjMKKwordXVpZF9pc19udWxsLjM6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS91dWlkX2lzX251bGwuMy5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS91dWlkX2lzX251bGwuMy5pbiB1dWlkX2lzX251bGwuMworCit1dWlkX3BhcnNlLjM6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS91dWlkX3BhcnNlLjMuaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvdXVpZF9wYXJzZS4zLmluIHV1aWRfcGFyc2UuMworCit1dWlkX3RpbWUuMzogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL3V1aWRfdGltZS4zLmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL3V1aWRfdGltZS4zLmluIHV1aWRfdGltZS4zCisKK3V1aWRfdW5wYXJzZS4zOiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvdXVpZF91bnBhcnNlLjMuaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvdXVpZF91bnBhcnNlLjMuaW4gdXVpZF91bnBhcnNlLjMKKwordXVpZC5wYzogJChzcmNkaXIpL3V1aWQucGMuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwkkKEUpICIJQ09ORklHLlNUQVRVUyAkQCIKKwkkKFEpIGNkICQodG9wX2J1aWxkZGlyKTsgQ09ORklHX0ZJTEVTPWxpYi91dWlkL3V1aWQucGMgLi9jb25maWcuc3RhdHVzCisKK2luc3RhbGxkaXJzOjoKKwkkKEUpICIJTUtJTlNUQUxMRElSUyAkKGxpYmRpcikgJChpbmNsdWRlZGlyKS91dWlkICQobWFuM2RpcikiCisJJChRKSAkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKGxpYmRpcikgIFwKKwkJJChERVNURElSKSQoaW5jbHVkZWRpcikvdXVpZCAkKERFU1RESVIpJChtYW4zZGlyKSBcCisJCSQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikKKworaW5zdGFsbDo6IGFsbCBpbnN0YWxsZGlycyAKKwkkKEUpICIJSU5TVEFMTF9EQVRBICQobGliZGlyKS9saWJ1dWlkLmEiCisJJChRKSAkKElOU1RBTExfREFUQSkgbGlidXVpZC5hICQoREVTVERJUikkKGxpYmRpcikvbGlidXVpZC5hCisJLSQoUSkgJChSQU5MSUIpICQoREVTVERJUikkKGxpYmRpcikvbGlidXVpZC5hCisJJChRKSAkKENITU9EKSAkKExJQk1PREUpICQoREVTVERJUikkKGxpYmRpcikvbGlidXVpZC5hCisJJChFKSAiCUlOU1RBTExfREFUQSAkKGluY2x1ZGVkaXIpL3V1aWQvdXVpZC5oIgorCSQoUSkgJChJTlNUQUxMX0RBVEEpIHV1aWQuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS91dWlkL3V1aWQuaAorCSQoUSkgZm9yIGkgaW4gJChTTUFOUEFHRVMpOyBkbyBcCisJCSQoUk0pIC1mICQoREVTVERJUikkKG1hbjNkaXIpLyQkaS5nejsgXAorCQllY2hvICIJSU5TVEFMTF9EQVRBICQobWFuM2RpcikvJCRpIjsgXAorCQkkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKG1hbjNkaXIpLyQkaTsgXAorCWRvbmUKKwkkKFEpICQoUk0pIC1mICQoREVTVERJUikkKG1hbjNkaXIpL3V1aWRfZ2VuZXJhdGVfcmFuZG9tLjMuZ3ogXAorCQkkKERFU1RESVIpJChtYW4zZGlyKS91dWlkX2dlbmVyYXRlX3RpbWUuMy5negorCSQoRSkgIglMSU5LICQobWFuM2RpcikvdXVpZF9nZW5lcmF0ZV9yYW5kb20uMyIKKwkkKFEpIChjZCAkKERFU1RESVIpJChtYW4zZGlyKTsgXAorCSAgICAkKExOKSAkKExJTktfSU5TVEFMTF9GTEFHUykgdXVpZF9nZW5lcmF0ZS4zIHV1aWRfZ2VuZXJhdGVfcmFuZG9tLjMpCisJJChFKSAiCUxJTksgJChtYW4zZGlyKS91dWlkX2dlbmVyYXRlX3RpbWUuMyIKKwkkKFEpIChjZCAkKERFU1RESVIpJChtYW4zZGlyKTsgXAorCSAgICAkKExOKSAkKExJTktfSU5TVEFMTF9GTEFHUykgdXVpZF9nZW5lcmF0ZS4zIHV1aWRfZ2VuZXJhdGVfdGltZS4zKQorCSQoRSkgIglJTlNUQUxMX0RBVEEgJChwa2djb25maWdkaXIpL3V1aWQucGMiCisJJChRKSAkKElOU1RBTExfREFUQSkgdXVpZC5wYyAkKERFU1RESVIpJChwa2djb25maWdkaXIpL3V1aWQucGMKKwordW5pbnN0YWxsOjoKKwkkKFJNKSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYnV1aWQuYSBcCisJCSQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikvdXVpZC5wYworCWZvciBpIGluICQoU01BTlBBR0VTKTsgZG8gXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW4zZGlyKS8kJGk7IFwKKwlkb25lCisJJChSTSkgLWYgJChERVNURElSKSQobWFuM2RpcikvdXVpZF9nZW5lcmF0ZV9yYW5kb20uMyAkKERFU1RESVIpJChtYW4zZGlyKS91dWlkX2dlbmVyYXRlX3RpbWUuMworCitjbGVhbjo6CisJJChSTSkgLWYgXCMqICoucyAqLm8gKi5hICp+ICouYmFrIGNvcmUgcHJvZmlsZWQvKiB1dWlkLmgKKwkkKFJNKSAtZiAuLi9saWJ1dWlkLmEgLi4vbGlidXVpZF9wLmEgdHN0X3V1aWQgdXVpZF90aW1lICQoU01BTlBBR0VTKQorCitjaGVjazo6IHRzdF91dWlkCisJTERfTElCUkFSWV9QQVRIPSQoTElCKSBEWUxEX0xJQlJBUllfUEFUSD0kKExJQikgLi90c3RfdXVpZAorCittb3N0bHljbGVhbjo6IGNsZWFuCitkaXN0Y2xlYW46OiBjbGVhbgorCSQoUk0pIC1mIC5kZXBlbmQgTWFrZWZpbGUgdXVpZC5wYyBcCisJCSQoc3JjZGlyKS9UQUdTICQoc3JjZGlyKS9NYWtlZmlsZS5pbi5vbGQKKworIworIyBIYWNrIHRvIHBhcmFsbGVsIG1ha2VzIHJlY29nbml6ZSBkZXBlbmRlbmNpZXMgY29ycmVjdGx5LgorIworLi4vLi4vbGliL2xpYnV1aWQuYTogbGlidXVpZC5hCisuLi8uLi9saWIvbGlidXVpZC5zbzogaW1hZ2UKKy4uLy4uL2xpYi9saWJ1dWlkLmR5bGliOiBpbWFnZQorCiskKE9CSlMpOiBzdWJkaXJzIHV1aWQuaAorCisjICsrKyBEZXBlbmRlbmN5IGxpbmUgZWF0ZXIgKysrCisjIAorIyBNYWtlZmlsZSBkZXBlbmRlbmNpZXMgZm9sbG93LiAgVGhpcyBtdXN0IGJlIHRoZSBsYXN0IHNlY3Rpb24gaW4KKyMgdGhlIE1ha2VmaWxlLmluIGZpbGUKKyMKK2NsZWFyLm86ICQoc3JjZGlyKS9jbGVhci5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvdXVpZFAuaAorY29tcGFyZS5vOiAkKHNyY2RpcikvY29tcGFyZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvdXVpZFAuaAorY29weS5vOiAkKHNyY2RpcikvY29weS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvdXVpZFAuaAorZ2VuX3V1aWQubzogJChzcmNkaXIpL2dlbl91dWlkLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS91dWlkUC5oICQoc3JjZGlyKS91dWlkZC5oCitpc251bGwubzogJChzcmNkaXIpL2lzbnVsbC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvdXVpZFAuaAorcGFjay5vOiAkKHNyY2RpcikvcGFjay5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvdXVpZFAuaAorcGFyc2UubzogJChzcmNkaXIpL3BhcnNlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS91dWlkUC5oCit1bnBhY2subzogJChzcmNkaXIpL3VucGFjay5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvdXVpZFAuaAordW5wYXJzZS5vOiAkKHNyY2RpcikvdW5wYXJzZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvdXVpZFAuaAordXVpZF90aW1lLm86ICQoc3JjZGlyKS91dWlkX3RpbWUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL3V1aWRQLmgKZGlmZiAtLWdpdCBhL2xpYi91dWlkL2NsZWFyLmMgYi9saWIvdXVpZC9jbGVhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNmY4ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdXVpZC9jbGVhci5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBjbGVhci5jIC0tIENsZWFyIGEgVVVJRAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKyAqICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorICogV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzdHJpbmcuaCIKKworI2luY2x1ZGUgInV1aWRQLmgiCisKK3ZvaWQgdXVpZF9jbGVhcih1dWlkX3QgdXUpCit7CisJbWVtc2V0KHV1LCAwLCAxNik7Cit9CisKZGlmZiAtLWdpdCBhL2xpYi91dWlkL2NvbXBhcmUuYyBiL2xpYi91dWlkL2NvbXBhcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWZjNTAzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3V1aWQvY29tcGFyZS5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBjb21wYXJlLmMgLS0tIGNvbXBhcmUgd2hldGhlciBvciBub3QgdHdvIFVVSUQncyBhcmUgdGhlIHNhbWUKKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIHR3byBVVUlEJ3MgYXJlIGRpZmZlcmVudCwgYW5kIDEgaWYgdGhleSBhcmUgdGhlIHNhbWUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisgKiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInV1aWRQLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgVVVDTVAodTEsdTIpIGlmICh1MSAhPSB1MikgcmV0dXJuKCh1MSA8IHUyKSA/IC0xIDogMSk7CisKK2ludCB1dWlkX2NvbXBhcmUoY29uc3QgdXVpZF90IHV1MSwgY29uc3QgdXVpZF90IHV1MikKK3sKKwlzdHJ1Y3QgdXVpZAl1dWlkMSwgdXVpZDI7CisKKwl1dWlkX3VucGFjayh1dTEsICZ1dWlkMSk7CisJdXVpZF91bnBhY2sodXUyLCAmdXVpZDIpOworCisJVVVDTVAodXVpZDEudGltZV9sb3csIHV1aWQyLnRpbWVfbG93KTsKKwlVVUNNUCh1dWlkMS50aW1lX21pZCwgdXVpZDIudGltZV9taWQpOworCVVVQ01QKHV1aWQxLnRpbWVfaGlfYW5kX3ZlcnNpb24sIHV1aWQyLnRpbWVfaGlfYW5kX3ZlcnNpb24pOworCVVVQ01QKHV1aWQxLmNsb2NrX3NlcSwgdXVpZDIuY2xvY2tfc2VxKTsKKwlyZXR1cm4gbWVtY21wKHV1aWQxLm5vZGUsIHV1aWQyLm5vZGUsIDYpOworfQorCmRpZmYgLS1naXQgYS9saWIvdXVpZC9jb25maWd1cmUuaW4gYi9saWIvdXVpZC9jb25maWd1cmUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY5NTA5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91dWlkL2NvbmZpZ3VyZS5pbgpAQCAtMCwwICsxLDEwIEBACitkbmwKK2RubCAgTm90IHVzZWQgbm93LCBmb3IgdGhlIGZ1dHVyZSB3aGVuIHV1aWQgaXMgc2VwYXJhdGVkIG91dCBpbnRvIGl0cyAKK2RubCBvd24gcGFja2FnZS4KK2RubAorQUNfSU5JVChnZW5fdXVpZC5jKQorQUNfUFJFUkVRKDIuMTIpCisKK0FDX0NIRUNLX0hFQURFUlMoc3RkbGliLmggdW5pc3RkLmggc3lzL3NvY2tpby5oIG5ldC9pZi5oIG5ldGluZXQvaW4uaCkKK0FDX0NIRUNLX0ZVTkNTKHNyYW5kb20pCitBQ19PVVRQVVQoTWFrZWZpbGUpCmRpZmYgLS1naXQgYS9saWIvdXVpZC9jb3B5LmMgYi9saWIvdXVpZC9jb3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlNmY1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91dWlkL2NvcHkuYwpAQCAtMCwwICsxLDQ2IEBACisvKgorICogY29weS5jIC0tLSBjb3B5IFVVSURzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisgKiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInV1aWRQLmgiCisKK3ZvaWQgdXVpZF9jb3B5KHV1aWRfdCBkc3QsIGNvbnN0IHV1aWRfdCBzcmMpCit7CisJdW5zaWduZWQgY2hhcgkJKmNwMTsKKwljb25zdCB1bnNpZ25lZCBjaGFyCSpjcDI7CisJaW50CQkJaTsKKworCWZvciAoaT0wLCBjcDEgPSBkc3QsIGNwMiA9IHNyYzsgaSA8IDE2OyBpKyspCisJCSpjcDErKyA9ICpjcDIrKzsKK30KZGlmZiAtLWdpdCBhL2xpYi91dWlkL2dlbl91dWlkLmMgYi9saWIvdXVpZC9nZW5fdXVpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYjQ1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdXVpZC9nZW5fdXVpZC5jCkBAIC0wLDAgKzEsNjc4IEBACisvKgorICogZ2VuX3V1aWQuYyAtLS0gZ2VuZXJhdGUgYSBEQ0UtY29tcGF0aWJsZSB1dWlkCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisgKiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqIEZvcmNlIGluY2x1c2lvbiBvZiBTVklEIHN0dWZmIHNpbmNlIHdlIG5lZWQgaXQgaWYgd2UncmUgY29tcGlsaW5nIGluCisgKiBnY2Mtd2FsbCB3YWxsIG1vZGUKKyAqLworI2RlZmluZSBfU1ZJRF9TT1VSQ0UKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWZkZWYgX1dJTjMyCisjZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA1MDAKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZGVmaW5lIFVVSUQgTVlVVUlECisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2lmZGVmIEhBVkVfU1lTX0ZJTEVfSAorI2luY2x1ZGUgPHN5cy9maWxlLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1VOX0gKKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tJT19ICisjaW5jbHVkZSA8c3lzL3NvY2tpby5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ETF9ICisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChIQVZFX1NZU19TWVNDQUxMX0gpCisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1JFU09VUkNFX0gKKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAidXVpZFAuaCIKKyNpbmNsdWRlICJ1dWlkZC5oIgorCisjaWZkZWYgSEFWRV9TUkFORE9NCisjZGVmaW5lIHNyYW5kKHgpIAlzcmFuZG9tKHgpCisjZGVmaW5lIHJhbmQoKSAJCXJhbmRvbSgpCisjZW5kaWYKKworI2lmZGVmIFRMUworI2RlZmluZSBUSFJFQURfTE9DQUwgc3RhdGljIFRMUworI2Vsc2UKKyNkZWZpbmUgVEhSRUFEX0xPQ0FMIHN0YXRpYworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChfX05SX2dldHRpZCkgJiYgZGVmaW5lZChIQVZFX0pSQU5ENDgpCisjZGVmaW5lIERPX0pSQU5EX01JWAorVEhSRUFEX0xPQ0FMIHVuc2lnbmVkIHNob3J0IGpyYW5kX3NlZWRbM107CisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorc3RhdGljIHZvaWQgZ2V0dGltZW9mZGF5IChzdHJ1Y3QgdGltZXZhbCAqdHYsIHZvaWQgKmR1bW15KQoreworCUZJTEVUSU1FCWZ0aW1lOworCXVpbnQ2NF90CW47CisKKwlHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSAoJmZ0aW1lKTsKKwluID0gKCgodWludDY0X3QpIGZ0aW1lLmR3SGlnaERhdGVUaW1lIDw8IDMyKQorCSAgICAgKyAodWludDY0X3QpIGZ0aW1lLmR3TG93RGF0ZVRpbWUpOworCWlmIChuKSB7CisJCW4gLz0gMTA7CisJCW4gLT0gKCgzNjkgKiAzNjUgKyA4OSkgKiAodWludDY0X3QpIDg2NDAwKSAqIDEwMDAwMDA7CisJfQorCisJdHYtPnR2X3NlYyA9IG4gLyAxMDAwMDAwOworCXR2LT50dl91c2VjID0gbiAlIDEwMDAwMDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0dWlkICh2b2lkKQoreworCXJldHVybiAxOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgZ2V0X3JhbmRvbV9mZCh2b2lkKQoreworCXN0cnVjdCB0aW1ldmFsCXR2OworCXN0YXRpYyBpbnQJZmQgPSAtMjsKKwlpbnQJCWk7CisKKwlpZiAoZmQgPT0gLTIpIHsKKwkJZ2V0dGltZW9mZGF5KCZ0diwgMCk7CisjaWZuZGVmIF9XSU4zMgorCQlmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKKwkJaWYgKGZkID09IC0xKQorCQkJZmQgPSBvcGVuKCIvZGV2L3JhbmRvbSIsIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7CisJCWlmIChmZCA+PSAwKSB7CisJCQlpID0gZmNudGwoZmQsIEZfR0VURkQpOworCQkJaWYgKGkgPj0gMCkKKwkJCQlmY250bChmZCwgRl9TRVRGRCwgaSB8IEZEX0NMT0VYRUMpOworCQl9CisjZW5kaWYKKwkJc3JhbmQoKGdldHBpZCgpIDw8IDE2KSBeIGdldHVpZCgpIF4gdHYudHZfc2VjIF4gdHYudHZfdXNlYyk7CisjaWZkZWYgRE9fSlJBTkRfTUlYCisJCWpyYW5kX3NlZWRbMF0gPSBnZXRwaWQoKSBeICh0di50dl9zZWMgJiAweEZGRkYpOworCQlqcmFuZF9zZWVkWzFdID0gZ2V0cHBpZCgpIF4gKHR2LnR2X3VzZWMgJiAweEZGRkYpOworCQlqcmFuZF9zZWVkWzJdID0gKHR2LnR2X3NlYyBeIHR2LnR2X3VzZWMpID4+IDE2OworI2VuZGlmCisJfQorCS8qIENyYW5rIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBhIGZldyB0aW1lcyAqLworCWdldHRpbWVvZmRheSgmdHYsIDApOworCWZvciAoaSA9ICh0di50dl9zZWMgXiB0di50dl91c2VjKSAmIDB4MUY7IGkgPiAwOyBpLS0pCisJCXJhbmQoKTsKKwlyZXR1cm4gZmQ7Cit9CisKKworLyoKKyAqIEdlbmVyYXRlIGEgc2VyaWVzIG9mIHJhbmRvbSBieXRlcy4gIFVzZSAvZGV2L3VyYW5kb20gaWYgcG9zc2libGUsCisgKiBhbmQgaWYgbm90LCB1c2Ugc3JhbmRvbS9yYW5kb20uCisgKi8KK3N0YXRpYyB2b2lkIGdldF9yYW5kb21fYnl0ZXModm9pZCAqYnVmLCBpbnQgbmJ5dGVzKQoreworCWludCBpLCBuID0gbmJ5dGVzLCBmZCA9IGdldF9yYW5kb21fZmQoKTsKKwlpbnQgbG9zZV9jb3VudGVyID0gMDsKKwl1bnNpZ25lZCBjaGFyICpjcCA9IGJ1ZjsKKworCWlmIChmZCA+PSAwKSB7CisJCXdoaWxlIChuID4gMCkgeworCQkJaSA9IHJlYWQoZmQsIGNwLCBuKTsKKwkJCWlmIChpIDw9IDApIHsKKwkJCQlpZiAobG9zZV9jb3VudGVyKysgPiAxNikKKwkJCQkJYnJlYWs7CisJCQkJY29udGludWU7CisJCQl9CisJCQluIC09IGk7CisJCQljcCArPSBpOworCQkJbG9zZV9jb3VudGVyID0gMDsKKwkJfQorCX0KKworCS8qCisJICogV2UgZG8gdGhpcyBhbGwgdGhlIHRpbWUsIGJ1dCB0aGlzIGlzIHRoZSBvbmx5IHNvdXJjZSBvZgorCSAqIHJhbmRvbW5lc3MgaWYgL2Rldi9yYW5kb20vdXJhbmRvbSBpcyBvdXQgdG8gbHVuY2guCisJICovCisJZm9yIChjcCA9IGJ1ZiwgaSA9IDA7IGkgPCBuYnl0ZXM7IGkrKykKKwkJKmNwKysgXj0gKHJhbmQoKSA+PiA3KSAmIDB4RkY7CisjaWZkZWYgRE9fSlJBTkRfTUlYCisJeworCQl1bnNpZ25lZCBzaG9ydCB0bXBfc2VlZFszXTsKKworCQltZW1jcHkodG1wX3NlZWQsIGpyYW5kX3NlZWQsIHNpemVvZih0bXBfc2VlZCkpOworCQlqcmFuZF9zZWVkWzJdID0ganJhbmRfc2VlZFsyXSBeIHN5c2NhbGwoX19OUl9nZXR0aWQpOworCQlmb3IgKGNwID0gYnVmLCBpID0gMDsgaSA8IG5ieXRlczsgaSsrKQorCQkJKmNwKysgXj0gKGpyYW5kNDgodG1wX3NlZWQpID4+IDcpICYgMHhGRjsKKwkJbWVtY3B5KGpyYW5kX3NlZWQsIHRtcF9zZWVkLAorCQkgICAgICAgc2l6ZW9mKGpyYW5kX3NlZWQpIC0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CisJfQorI2VuZGlmCisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBHZXQgdGhlIGV0aGVybmV0IGhhcmR3YXJlIGFkZHJlc3MsIGlmIHdlIGNhbiBmaW5kIGl0Li4uCisgKgorICogWFhYIGZvciBhIHdpbmRvd3MgdmVyc2lvbiwgcHJvYmFibHkgc2hvdWxkIHVzZSBHZXRBZGFwdGVyc0luZm86CisgKiBodHRwOi8vd3d3LmNvZGVndXJ1LmNvbS9jcHAvaS1uL25ldHdvcmsvbmV0d29ya2luZm9ybWF0aW9uL2FydGljbGUucGhwL2M1NDUxCisgKiBjb21tZW50aW5nIG91dCBnZXRfbm9kZV9pZCBqdXN0IHRvIGdldCBnZW5fdXVpZCB0byBjb21waWxlIHVuZGVyIHdpbmRvd3MKKyAqIGlzIG5vdCB0aGUgcmlnaHQgd2F5IHRvIGdvIQorICovCitzdGF0aWMgaW50IGdldF9ub2RlX2lkKHVuc2lnbmVkIGNoYXIgKm5vZGVfaWQpCit7CisjaWZkZWYgSEFWRV9ORVRfSUZfSAorCWludCAJCXNkOworCXN0cnVjdCBpZnJlcSAJaWZyLCAqaWZycDsKKwlzdHJ1Y3QgaWZjb25mIAlpZmM7CisJY2hhciBidWZbMTAyNF07CisJaW50CQluLCBpOworCXVuc2lnbmVkIGNoYXIgCSphOworI2lmZGVmIEhBVkVfTkVUX0lGX0RMX0gKKwlzdHJ1Y3Qgc29ja2FkZHJfZGwgKnNkbHA7CisjZW5kaWYKKworLyoKKyAqIEJTRCA0LjQgZGVmaW5lcyB0aGUgc2l6ZSBvZiBhbiBpZnJlcSB0byBiZQorICogbWF4KHNpemVvZihpZnJlcSksIHNpemVvZihpZnJlcS5pZnJfbmFtZSkraWZyZXEuaWZyX2FkZHIuc2FfbGVuCisgKiBIb3dldmVyLCB1bmRlciBlYXJsaWVyIHN5c3RlbXMsIHNhX2xlbiBpc24ndCBwcmVzZW50LCBzbyB0aGUgc2l6ZSBpcworICoganVzdCBzaXplb2Yoc3RydWN0IGlmcmVxKQorICovCisjaWZkZWYgSEFWRV9TQV9MRU4KKyNpZm5kZWYgbWF4CisjZGVmaW5lIG1heChhLGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisjZW5kaWYKKyNkZWZpbmUgaWZyZXFfc2l6ZShpKSBtYXgoc2l6ZW9mKHN0cnVjdCBpZnJlcSksXAorICAgICBzaXplb2YoKGkpLmlmcl9uYW1lKSsoaSkuaWZyX2FkZHIuc2FfbGVuKQorI2Vsc2UKKyNkZWZpbmUgaWZyZXFfc2l6ZShpKSBzaXplb2Yoc3RydWN0IGlmcmVxKQorI2VuZGlmIC8qIEhBVkVfU0FfTEVOKi8KKworCXNkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fSVApOworCWlmIChzZCA8IDApIHsKKwkJcmV0dXJuIC0xOworCX0KKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJaWZjLmlmY19sZW4gPSBzaXplb2YoYnVmKTsKKwlpZmMuaWZjX2J1ZiA9IGJ1ZjsKKwlpZiAoaW9jdGwgKHNkLCBTSU9DR0lGQ09ORiwgKGNoYXIgKikmaWZjKSA8IDApIHsKKwkJY2xvc2Uoc2QpOworCQlyZXR1cm4gLTE7CisJfQorCW4gPSBpZmMuaWZjX2xlbjsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSs9IGlmcmVxX3NpemUoKmlmcnApICkgeworCQlpZnJwID0gKHN0cnVjdCBpZnJlcSAqKSgoY2hhciAqKSBpZmMuaWZjX2J1ZitpKTsKKwkJc3RybmNweShpZnIuaWZyX25hbWUsIGlmcnAtPmlmcl9uYW1lLCBJRk5BTVNJWik7CisjaWZkZWYgU0lPQ0dJRkhXQUREUgorCQlpZiAoaW9jdGwoc2QsIFNJT0NHSUZIV0FERFIsICZpZnIpIDwgMCkKKwkJCWNvbnRpbnVlOworCQlhID0gKHVuc2lnbmVkIGNoYXIgKikgJmlmci5pZnJfaHdhZGRyLnNhX2RhdGE7CisjZWxzZQorI2lmZGVmIFNJT0NHRU5BRERSCisJCWlmIChpb2N0bChzZCwgU0lPQ0dFTkFERFIsICZpZnIpIDwgMCkKKwkJCWNvbnRpbnVlOworCQlhID0gKHVuc2lnbmVkIGNoYXIgKikgaWZyLmlmcl9lbmFkZHI7CisjZWxzZQorI2lmZGVmIEhBVkVfTkVUX0lGX0RMX0gKKwkJc2RscCA9IChzdHJ1Y3Qgc29ja2FkZHJfZGwgKikgJmlmcnAtPmlmcl9hZGRyOworCQlpZiAoKHNkbHAtPnNkbF9mYW1pbHkgIT0gQUZfTElOSykgfHwgKHNkbHAtPnNkbF9hbGVuICE9IDYpKQorCQkJY29udGludWU7CisJCWEgPSAodW5zaWduZWQgY2hhciAqKSAmc2RscC0+c2RsX2RhdGFbc2RscC0+c2RsX25sZW5dOworI2Vsc2UKKwkJLyoKKwkJICogWFhYIHdlIGRvbid0IGhhdmUgYSB3YXkgb2YgZ2V0dGluZyB0aGUgaGFyZHdhcmUKKwkJICogYWRkcmVzcworCQkgKi8KKwkJY2xvc2Uoc2QpOworCQlyZXR1cm4gMDsKKyNlbmRpZiAvKiBIQVZFX05FVF9JRl9ETF9IICovCisjZW5kaWYgLyogU0lPQ0dFTkFERFIgKi8KKyNlbmRpZiAvKiBTSU9DR0lGSFdBRERSICovCisJCWlmICghYVswXSAmJiAhYVsxXSAmJiAhYVsyXSAmJiAhYVszXSAmJiAhYVs0XSAmJiAhYVs1XSkKKwkJCWNvbnRpbnVlOworCQlpZiAobm9kZV9pZCkgeworCQkJbWVtY3B5KG5vZGVfaWQsIGEsIDYpOworCQkJY2xvc2Uoc2QpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJY2xvc2Uoc2QpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qIEFzc3VtZSB0aGF0IHRoZSBnZXR0aW1lb2ZkYXkoKSBoYXMgbWljcm9zZWNvbmQgZ3JhbnVsYXJpdHkgKi8KKyNkZWZpbmUgTUFYX0FESlVTVE1FTlQgMTAKKworc3RhdGljIGludCBnZXRfY2xvY2sodWludDMyX3QgKmNsb2NrX2hpZ2gsIHVpbnQzMl90ICpjbG9ja19sb3csCisJCSAgICAgdWludDE2X3QgKnJldF9jbG9ja19zZXEsIGludCAqbnVtKQoreworCVRIUkVBRF9MT0NBTCBpbnQJCWFkanVzdG1lbnQgPSAwOworCVRIUkVBRF9MT0NBTCBzdHJ1Y3QgdGltZXZhbAlsYXN0ID0gezAsIDB9OworCVRIUkVBRF9MT0NBTCBpbnQJCXN0YXRlX2ZkID0gLTI7CisJVEhSRUFEX0xPQ0FMIEZJTEUJCSpzdGF0ZV9mOworCVRIUkVBRF9MT0NBTCB1aW50MTZfdAkJY2xvY2tfc2VxOworCXN0cnVjdCB0aW1ldmFsIAkJCXR2OworCXN0cnVjdCBmbG9jawkJCWZsOworCXVpbnQ2NF90CQkJY2xvY2tfcmVnOworCW1vZGVfdAkJCQlzYXZlX3VtYXNrOworCWludAkJCQlsZW47CisKKwlpZiAoc3RhdGVfZmQgPT0gLTIpIHsKKwkJc2F2ZV91bWFzayA9IHVtYXNrKDApOworCQlzdGF0ZV9mZCA9IG9wZW4oIi92YXIvbGliL2xpYnV1aWQvY2xvY2sudHh0IiwKKwkJCQlPX1JEV1J8T19DUkVBVCwgMDY2MCk7CisJCSh2b2lkKSB1bWFzayhzYXZlX3VtYXNrKTsKKwkJaWYgKHN0YXRlX2ZkID49IDApIHsKKwkJCXN0YXRlX2YgPSBmZG9wZW4oc3RhdGVfZmQsICJyKyIpOworCQkJaWYgKCFzdGF0ZV9mKSB7CisJCQkJY2xvc2Uoc3RhdGVfZmQpOworCQkJCXN0YXRlX2ZkID0gLTE7CisJCQl9CisJCX0KKwl9CisJZmwubF90eXBlID0gRl9XUkxDSzsKKwlmbC5sX3doZW5jZSA9IFNFRUtfU0VUOworCWZsLmxfc3RhcnQgPSAwOworCWZsLmxfbGVuID0gMDsKKwlmbC5sX3BpZCA9IDA7CisJaWYgKHN0YXRlX2ZkID49IDApIHsKKwkJcmV3aW5kKHN0YXRlX2YpOworCQl3aGlsZSAoZmNudGwoc3RhdGVfZmQsIEZfU0VUTEtXLCAmZmwpIDwgMCkgeworCQkJaWYgKChlcnJubyA9PSBFQUdBSU4pIHx8IChlcnJubyA9PSBFSU5UUikpCisJCQkJY29udGludWU7CisJCQlmY2xvc2Uoc3RhdGVfZik7CisJCQlzdGF0ZV9mZCA9IC0xOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHN0YXRlX2ZkID49IDApIHsKKwkJdW5zaWduZWQgaW50IGNsOworCQl1bnNpZ25lZCBsb25nIHR2MSwgdHYyOworCQlpbnQgYTsKKworCQlpZiAoZnNjYW5mKHN0YXRlX2YsICJjbG9jazogJTA0eCB0djogJWx1ICVsdSBhZGo6ICVkXG4iLAorCQkJICAgJmNsLCAmdHYxLCAmdHYyLCAmYSkgPT0gNCkgeworCQkJY2xvY2tfc2VxID0gY2wgJiAweDNGRkY7CisJCQlsYXN0LnR2X3NlYyA9IHR2MTsKKwkJCWxhc3QudHZfdXNlYyA9IHR2MjsKKwkJCWFkanVzdG1lbnQgPSBhOworCQl9CisJfQorCisJaWYgKChsYXN0LnR2X3NlYyA9PSAwKSAmJiAobGFzdC50dl91c2VjID09IDApKSB7CisJCWdldF9yYW5kb21fYnl0ZXMoJmNsb2NrX3NlcSwgc2l6ZW9mKGNsb2NrX3NlcSkpOworCQljbG9ja19zZXEgJj0gMHgzRkZGOworCQlnZXR0aW1lb2ZkYXkoJmxhc3QsIDApOworCQlsYXN0LnR2X3NlYy0tOworCX0KKwordHJ5X2FnYWluOgorCWdldHRpbWVvZmRheSgmdHYsIDApOworCWlmICgodHYudHZfc2VjIDwgbGFzdC50dl9zZWMpIHx8CisJICAgICgodHYudHZfc2VjID09IGxhc3QudHZfc2VjKSAmJgorCSAgICAgKHR2LnR2X3VzZWMgPCBsYXN0LnR2X3VzZWMpKSkgeworCQljbG9ja19zZXEgPSAoY2xvY2tfc2VxKzEpICYgMHgzRkZGOworCQlhZGp1c3RtZW50ID0gMDsKKwkJbGFzdCA9IHR2OworCX0gZWxzZSBpZiAoKHR2LnR2X3NlYyA9PSBsYXN0LnR2X3NlYykgJiYKKwkgICAgKHR2LnR2X3VzZWMgPT0gbGFzdC50dl91c2VjKSkgeworCQlpZiAoYWRqdXN0bWVudCA+PSBNQVhfQURKVVNUTUVOVCkKKwkJCWdvdG8gdHJ5X2FnYWluOworCQlhZGp1c3RtZW50Kys7CisJfSBlbHNlIHsKKwkJYWRqdXN0bWVudCA9IDA7CisJCWxhc3QgPSB0djsKKwl9CisKKwljbG9ja19yZWcgPSB0di50dl91c2VjKjEwICsgYWRqdXN0bWVudDsKKwljbG9ja19yZWcgKz0gKCh1aW50NjRfdCkgdHYudHZfc2VjKSoxMDAwMDAwMDsKKwljbG9ja19yZWcgKz0gKCgodWludDY0X3QpIDB4MDFCMjFERDIpIDw8IDMyKSArIDB4MTM4MTQwMDA7CisKKwlpZiAobnVtICYmICgqbnVtID4gMSkpIHsKKwkJYWRqdXN0bWVudCArPSAqbnVtIC0gMTsKKwkJbGFzdC50dl91c2VjICs9IGFkanVzdG1lbnQgLyAxMDsKKwkJYWRqdXN0bWVudCA9IGFkanVzdG1lbnQgJSAxMDsKKwkJbGFzdC50dl9zZWMgKz0gbGFzdC50dl91c2VjIC8gMTAwMDAwMDsKKwkJbGFzdC50dl91c2VjID0gbGFzdC50dl91c2VjICUgMTAwMDAwMDsKKwl9CisKKwlpZiAoc3RhdGVfZmQgPiAwKSB7CisJCXJld2luZChzdGF0ZV9mKTsKKwkJbGVuID0gZnByaW50ZihzdGF0ZV9mLAorCQkJICAgICAgImNsb2NrOiAlMDR4IHR2OiAlMDE2bHUgJTA4bHUgYWRqOiAlMDhkXG4iLAorCQkJICAgICAgY2xvY2tfc2VxLCBsYXN0LnR2X3NlYywgKGxvbmcpbGFzdC50dl91c2VjLAorCQkJICAgICAgYWRqdXN0bWVudCk7CisJCWZmbHVzaChzdGF0ZV9mKTsKKwkJaWYgKGZ0cnVuY2F0ZShzdGF0ZV9mZCwgbGVuKSA8IDApIHsKKwkJCWZwcmludGYoc3RhdGVfZiwgIiAgICAgICAgICAgICAgICAgICBcbiIpOworCQkJZmZsdXNoKHN0YXRlX2YpOworCQl9CisJCXJld2luZChzdGF0ZV9mKTsKKwkJZmwubF90eXBlID0gRl9VTkxDSzsKKwkJaWYgKGZjbnRsKHN0YXRlX2ZkLCBGX1NFVExLLCAmZmwpIDwgMCkgeworCQkJZmNsb3NlKHN0YXRlX2YpOworCQkJc3RhdGVfZmQgPSAtMTsKKwkJfQorCX0KKworCSpjbG9ja19oaWdoID0gY2xvY2tfcmVnID4+IDMyOworCSpjbG9ja19sb3cgPSBjbG9ja19yZWc7CisJKnJldF9jbG9ja19zZXEgPSBjbG9ja19zZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfYWxsKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3NpemVfdCByZXQ7CisJc3NpemVfdCBjID0gMDsKKwlpbnQgdHJpZXMgPSAwOworCisJbWVtc2V0KGJ1ZiwgMCwgY291bnQpOworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJcmV0ID0gcmVhZChmZCwgYnVmLCBjb3VudCk7CisJCWlmIChyZXQgPD0gMCkgeworCQkJaWYgKChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIgfHwgcmV0ID09IDApICYmCisJCQkgICAgKHRyaWVzKysgPCA1KSkKKwkJCQljb250aW51ZTsKKwkJCXJldHVybiBjID8gYyA6IC0xOworCQl9CisJCWlmIChyZXQgPiAwKQorCQkJdHJpZXMgPSAwOworCQljb3VudCAtPSByZXQ7CisJCWJ1ZiArPSByZXQ7CisJCWMgKz0gcmV0OworCX0KKwlyZXR1cm4gYzsKK30KKworLyoKKyAqIENsb3NlIGFsbCBmaWxlIGRlc2NyaXB0b3JzCisgKi8KK3N0YXRpYyB2b2lkIGNsb3NlX2FsbF9mZHModm9pZCkKK3sKKwlpbnQgaSwgbWF4OworCisjaWYgZGVmaW5lZChIQVZFX1NZU0NPTkYpICYmIGRlZmluZWQoX1NDX09QRU5fTUFYKQorCW1heCA9IHN5c2NvbmYoX1NDX09QRU5fTUFYKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9HRVREVEFCTEVTSVpFKQorCW1heCA9IGdldGR0YWJsZXNpemUoKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRSTElNSVQpICYmIGRlZmluZWQoUkxJTUlUX05PRklMRSkKKwlzdHJ1Y3QgcmxpbWl0IHJsOworCisJZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZybCk7CisJbWF4ID0gcmwucmxpbV9jdXI7CisjZWxzZQorCW1heCA9IE9QRU5fTUFYOworI2VuZGlmCisKKwlmb3IgKGk9MDsgaSA8IG1heDsgaSsrKSB7CisJCWNsb3NlKGkpOworCQlpZiAoaSA8PSAyKQorCQkJb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKKwl9Cit9CisKKworLyoKKyAqIFRyeSB1c2luZyB0aGUgdXVpZGQgZGFlbW9uIHRvIGdlbmVyYXRlIHRoZSBVVUlECisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3V1aWRfdmlhX2RhZW1vbihpbnQgb3AsIHV1aWRfdCBvdXQsIGludCAqbnVtKQoreworI2lmIGRlZmluZWQoVVNFX1VVSUREKSAmJiBkZWZpbmVkKEhBVkVfU1lTX1VOX0gpCisJY2hhciBvcF9idWZbNjRdOworCWludCBvcF9sZW47CisJaW50IHM7CisJc3NpemVfdCByZXQ7CisJaW50MzJfdCByZXBseV9sZW4gPSAwLCBleHBlY3RlZCA9IDE2OworCXN0cnVjdCBzb2NrYWRkcl91biBzcnZfYWRkcjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlwaWRfdCBwaWQ7CisJc3RhdGljIGNvbnN0IGNoYXIgKnV1aWRkX3BhdGggPSBVVUlERF9QQVRIOworCXN0YXRpYyBpbnQgYWNjZXNzX3JldCA9IC0yOworCXN0YXRpYyBpbnQgc3RhcnRfYXR0ZW1wdHMgPSAwOworCisJaWYgKChzID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlzcnZfYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKwlzdHJjcHkoc3J2X2FkZHIuc3VuX3BhdGgsIFVVSUREX1NPQ0tFVF9QQVRIKTsKKworCWlmIChjb25uZWN0KHMsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikgJnNydl9hZGRyLAorCQkgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikpIDwgMCkgeworCQlpZiAoYWNjZXNzX3JldCA9PSAtMikKKwkJCWFjY2Vzc19yZXQgPSBhY2Nlc3ModXVpZGRfcGF0aCwgWF9PSyk7CisJCWlmIChhY2Nlc3NfcmV0ID09IDApCisJCQlhY2Nlc3NfcmV0ID0gc3RhdCh1dWlkZF9wYXRoLCAmc3QpOworCQlpZiAoYWNjZXNzX3JldCA9PSAwICYmIChzdC5zdF9tb2RlICYgKFNfSVNVSUQgfCBTX0lTR0lEKSkgPT0gMCkKKwkJCWFjY2Vzc19yZXQgPSBhY2Nlc3MoVVVJRERfRElSLCBXX09LKTsKKwkJaWYgKGFjY2Vzc19yZXQgPT0gMCAmJiBzdGFydF9hdHRlbXB0cysrIDwgNSkgeworCQkJaWYgKChwaWQgPSBmb3JrKCkpID09IDApIHsKKwkJCQljbG9zZV9hbGxfZmRzKCk7CisJCQkJZXhlY2wodXVpZGRfcGF0aCwgInV1aWRkIiwgIi1xVCIsICIzMDAiLAorCQkJCSAgICAgIChjaGFyICopIE5VTEwpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQkodm9pZCkgd2FpdHBpZChwaWQsIDAsIDApOworCQkJaWYgKGNvbm5lY3QocywgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSAmc3J2X2FkZHIsCisJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKSA8IDApCisJCQkJZ290byBmYWlsOworCQl9IGVsc2UKKwkJCWdvdG8gZmFpbDsKKwl9CisJb3BfYnVmWzBdID0gb3A7CisJb3BfbGVuID0gMTsKKwlpZiAob3AgPT0gVVVJRERfT1BfQlVMS19USU1FX1VVSUQpIHsKKwkJbWVtY3B5KG9wX2J1ZisxLCBudW0sIHNpemVvZigqbnVtKSk7CisJCW9wX2xlbiArPSBzaXplb2YoKm51bSk7CisJCWV4cGVjdGVkICs9IHNpemVvZigqbnVtKTsKKwl9CisKKwlyZXQgPSB3cml0ZShzLCBvcF9idWYsIG9wX2xlbik7CisJaWYgKHJldCA8IDEpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IHJlYWRfYWxsKHMsIChjaGFyICopICZyZXBseV9sZW4sIHNpemVvZihyZXBseV9sZW4pKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsOworCisJaWYgKHJlcGx5X2xlbiAhPSBleHBlY3RlZCkKKwkJZ290byBmYWlsOworCisJcmV0ID0gcmVhZF9hbGwocywgb3BfYnVmLCByZXBseV9sZW4pOworCisJaWYgKG9wID09IFVVSUREX09QX0JVTEtfVElNRV9VVUlEKQorCQltZW1jcHkob3BfYnVmKzE2LCBudW0sIHNpemVvZihpbnQpKTsKKworCW1lbWNweShvdXQsIG9wX2J1ZiwgMTYpOworCisJY2xvc2Uocyk7CisJcmV0dXJuICgocmV0ID09IGV4cGVjdGVkKSA/IDAgOiAtMSk7CisKK2ZhaWw6CisJY2xvc2Uocyk7CisjZW5kaWYKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgdXVpZF9fZ2VuZXJhdGVfdGltZSh1dWlkX3Qgb3V0LCBpbnQgKm51bSkKK3sKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBub2RlX2lkWzZdOworCXN0YXRpYyBpbnQgaGFzX2luaXQgPSAwOworCXN0cnVjdCB1dWlkIHV1OworCXVpbnQzMl90CWNsb2NrX21pZDsKKworCWlmICghaGFzX2luaXQpIHsKKwkJaWYgKGdldF9ub2RlX2lkKG5vZGVfaWQpIDw9IDApIHsKKwkJCWdldF9yYW5kb21fYnl0ZXMobm9kZV9pZCwgNik7CisJCQkvKgorCQkJICogU2V0IG11bHRpY2FzdCBiaXQsIHRvIHByZXZlbnQgY29uZmxpY3RzCisJCQkgKiB3aXRoIElFRUUgODAyIGFkZHJlc3NlcyBvYnRhaW5lZCBmcm9tCisJCQkgKiBuZXR3b3JrIGNhcmRzCisJCQkgKi8KKwkJCW5vZGVfaWRbMF0gfD0gMHgwMTsKKwkJfQorCQloYXNfaW5pdCA9IDE7CisJfQorCWdldF9jbG9jaygmY2xvY2tfbWlkLCAmdXUudGltZV9sb3csICZ1dS5jbG9ja19zZXEsIG51bSk7CisJdXUuY2xvY2tfc2VxIHw9IDB4ODAwMDsKKwl1dS50aW1lX21pZCA9ICh1aW50MTZfdCkgY2xvY2tfbWlkOworCXV1LnRpbWVfaGlfYW5kX3ZlcnNpb24gPSAoKGNsb2NrX21pZCA+PiAxNikgJiAweDBGRkYpIHwgMHgxMDAwOworCW1lbWNweSh1dS5ub2RlLCBub2RlX2lkLCA2KTsKKwl1dWlkX3BhY2soJnV1LCBvdXQpOworfQorCit2b2lkIHV1aWRfZ2VuZXJhdGVfdGltZSh1dWlkX3Qgb3V0KQoreworI2lmZGVmIFRMUworCVRIUkVBRF9MT0NBTCBpbnQJCW51bSA9IDA7CisJVEhSRUFEX0xPQ0FMIHN0cnVjdCB1dWlkCXV1OworCVRIUkVBRF9MT0NBTCB0aW1lX3QJCWxhc3RfdGltZSA9IDA7CisJdGltZV90CQkJCW5vdzsKKworCWlmIChudW0gPiAwKSB7CisJCW5vdyA9IHRpbWUoMCk7CisJCWlmIChub3cgPiBsYXN0X3RpbWUrMSkKKwkJCW51bSA9IDA7CisJfQorCWlmIChudW0gPD0gMCkgeworCQludW0gPSAxMDAwOworCQlpZiAoZ2V0X3V1aWRfdmlhX2RhZW1vbihVVUlERF9PUF9CVUxLX1RJTUVfVVVJRCwKKwkJCQkJb3V0LCAmbnVtKSA9PSAwKSB7CisJCQlsYXN0X3RpbWUgPSB0aW1lKDApOworCQkJdXVpZF91bnBhY2sob3V0LCAmdXUpOworCQkJbnVtLS07CisJCQlyZXR1cm47CisJCX0KKwkJbnVtID0gMDsKKwl9CisJaWYgKG51bSA+IDApIHsKKwkJdXUudGltZV9sb3crKzsKKwkJaWYgKHV1LnRpbWVfbG93ID09IDApIHsKKwkJCXV1LnRpbWVfbWlkKys7CisJCQlpZiAodXUudGltZV9taWQgPT0gMCkKKwkJCQl1dS50aW1lX2hpX2FuZF92ZXJzaW9uKys7CisJCX0KKwkJbnVtLS07CisJCXV1aWRfcGFjaygmdXUsIG91dCk7CisJCXJldHVybjsKKwl9CisjZWxzZQorCWlmIChnZXRfdXVpZF92aWFfZGFlbW9uKFVVSUREX09QX1RJTUVfVVVJRCwgb3V0LCAwKSA9PSAwKQorCQlyZXR1cm47CisjZW5kaWYKKworCXV1aWRfX2dlbmVyYXRlX3RpbWUob3V0LCAwKTsKK30KKworCit2b2lkIHV1aWRfX2dlbmVyYXRlX3JhbmRvbSh1dWlkX3Qgb3V0LCBpbnQgKm51bSkKK3sKKwl1dWlkX3QJYnVmOworCXN0cnVjdCB1dWlkIHV1OworCWludCBpLCBuOworCisJaWYgKCFudW0gfHwgISpudW0pCisJCW4gPSAxOworCWVsc2UKKwkJbiA9ICpudW07CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWdldF9yYW5kb21fYnl0ZXMoYnVmLCBzaXplb2YoYnVmKSk7CisJCXV1aWRfdW5wYWNrKGJ1ZiwgJnV1KTsKKworCQl1dS5jbG9ja19zZXEgPSAodXUuY2xvY2tfc2VxICYgMHgzRkZGKSB8IDB4ODAwMDsKKwkJdXUudGltZV9oaV9hbmRfdmVyc2lvbiA9ICh1dS50aW1lX2hpX2FuZF92ZXJzaW9uICYgMHgwRkZGKQorCQkJfCAweDQwMDA7CisJCXV1aWRfcGFjaygmdXUsIG91dCk7CisJCW91dCArPSBzaXplb2YodXVpZF90KTsKKwl9Cit9CisKK3ZvaWQgdXVpZF9nZW5lcmF0ZV9yYW5kb20odXVpZF90IG91dCkKK3sKKwlpbnQJbnVtID0gMTsKKwkvKiBObyByZWFsIHJlYXNvbiB0byB1c2UgdGhlIGRhZW1vbiBmb3IgcmFuZG9tIHV1aWQncyAtLSB5ZXQgKi8KKworCXV1aWRfX2dlbmVyYXRlX3JhbmRvbShvdXQsICZudW0pOworfQorCisKKy8qCisgKiBUaGlzIGlzIHRoZSBnZW5lcmljIGZyb250LWVuZCB0byB1dWlkX2dlbmVyYXRlX3JhbmRvbSBhbmQKKyAqIHV1aWRfZ2VuZXJhdGVfdGltZS4gIEl0IHVzZXMgdXVpZF9nZW5lcmF0ZV9yYW5kb20gb25seSBpZgorICogL2Rldi91cmFuZG9tIGlzIGF2YWlsYWJsZSwgc2luY2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGhhdmUKKyAqIGhpZ2gtcXVhbGl0eSByYW5kb21uZXNzLgorICovCit2b2lkIHV1aWRfZ2VuZXJhdGUodXVpZF90IG91dCkKK3sKKwlpZiAoZ2V0X3JhbmRvbV9mZCgpID49IDApCisJCXV1aWRfZ2VuZXJhdGVfcmFuZG9tKG91dCk7CisJZWxzZQorCQl1dWlkX2dlbmVyYXRlX3RpbWUob3V0KTsKK30KZGlmZiAtLWdpdCBhL2xpYi91dWlkL2dlbl91dWlkX250LmMgYi9saWIvdXVpZC9nZW5fdXVpZF9udC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YTQwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdXVpZC9nZW5fdXVpZF9udC5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBnZW5fdXVpZF9udC5jIC0tIFVzZSBOVCBhcGkgdG8gZ2VuZXJhdGUgdXVpZAorICoKKyAqIFdyaXR0ZW4gYnkgQW5kcmV5IFNoZWRlbCAoYW5kcmV5c0Bucy5jci5jeWNvLmNvbSkKKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ1dWlkUC5oIgorCisjcHJhZ21hIHdhcm5pbmcocHVzaCw0KQorCisjcHJhZ21hIGNvbW1lbnQobGliLCAibnRkbGwubGliIikKKworLy8KKy8vIEhlcmUgaXMgYSBuaWNlIGV4YW1wbGUgd2h5IGl0J3Mgbm90IGEgZ29vZCBpZGVhCisvLyB0byB1c2UgbmF0aXZlIEFQSSBpbiBvcmRpbmFyeSBhcHBsaWNhdGlvbnMuCisvLyBOdW1iZXIgb2YgcGFyYW1ldGVycyBpbiBmdW5jdGlvbiBiZWxvdyB3YXMgY2hhbmdlZCBmcm9tIDMgdG8gNAorLy8gZm9yIE5UNS4KKy8vCisvLworLy8gTlRTWVNBUEkKKy8vIE5UU1RBVFVTCisvLyBOVEFQSQorLy8gTnRBbGxvY2F0ZVV1aWRzKAorLy8gICAgIE9VVCBQVUxPTkcgcDEsCisvLyAgICAgT1VUIFBVTE9ORyBwMiwKKy8vICAgICBPVVQgUFVMT05HIHAzLAorLy8gICAgIE9VVCBQVUNIQVIgU2VlZCAvLyA2IGJ5dGVzCisvLyAgICk7CisvLworLy8KKwordW5zaWduZWQgbG9uZworX19zdGRjYWxsCitOdEFsbG9jYXRlVXVpZHMoCisgICB2b2lkKiBwMSwgIC8vIDggYnl0ZXMKKyAgIHZvaWQqIHAyLCAgLy8gNCBieXRlcworICAgdm9pZCogcDMgICAvLyA0IGJ5dGVzCisgICApOworCit0eXBlZGVmCit1bnNpZ25lZCBsb25nCisoX19zdGRjYWxsKgorTnRBbGxvY2F0ZVV1aWRzXzIwMDApKAorICAgdm9pZCogcDEsICAvLyA4IGJ5dGVzCisgICB2b2lkKiBwMiwgIC8vIDQgYnl0ZXMKKyAgIHZvaWQqIHAzLCAgLy8gNCBieXRlcworICAgdm9pZCogc2VlZCAvLyA2IGJ5dGVzCisgICApOworCisKKworLy8KKy8vIE5pY2UsIGJ1dCBpbnN0ZWFkIG9mIGluY2x1ZGluZyBudGRkay5oIG90IHdpbm50LmgKKy8vIEkgc2hvdWxkIGRlZmluZSBpdCBoZXJlIGJlY2F1c2UgdGhleSBNSVNTRUQgX19zdGRjYWxsIGluIHRob3NlIGhlYWRlcnMuCisvLworCitfX2RlY2xzcGVjKGRsbGltcG9ydCkKK3N0cnVjdCBfVEVCKgorX19zdGRjYWxsCitOdEN1cnJlbnRUZWIodm9pZCk7CisKKworLy8KKy8vIFRoZSBvbmx5IHdheSB0byBnZXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzeXN0ZW0gaXMgdG8gZXhhbWluZQorLy8gb25lIHN0b3JlZCBpbiBQRUIuIEJ1dCBpdCdzIHByZXR0eSBkYW5nZXJvdXNlIGJlY2F1c2UgdGhpcyB2YWx1ZSBjb3VsZAorLy8gYmUgYWx0ZXJlZCBpbiBpbWFnZSBoZWFkZXIuCisvLworCitzdGF0aWMKK2ludAorTnQ1KHZvaWQpCit7CisJLy9yZXR1cm4gTnRDdXR0ZW50VGViKCktPlBlYi0+T1NNYWpvclZlcnNpb24gPj0gNTsKKwlyZXR1cm4gKGludCkqKGludCopKChjaGFyKikoaW50KSgqKGludCopKChjaGFyKilOdEN1cnJlbnRUZWIoKSArIDB4MzApKSArIDB4QTQpID49IDU7Cit9CisKKworCisKK3ZvaWQgdXVpZF9nZW5lcmF0ZSh1dWlkX3Qgb3V0KQoreworCWlmKE50NSgpKQorCXsKKwkJdW5zaWduZWQgY2hhciBzZWVkWzZdOworCQkoKE50QWxsb2NhdGVVdWlkc18yMDAwKU50QWxsb2NhdGVVdWlkcykob3V0LCAoKGNoYXIqKW91dCkrOCwgKChjaGFyKilvdXQpKzEyLCAmc2VlZFswXSApOworCX0KKwllbHNlCisJeworCQlOdEFsbG9jYXRlVXVpZHMob3V0LCAoKGNoYXIqKW91dCkrOCwgKChjaGFyKilvdXQpKzEyKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWIvdXVpZC9pc251bGwuYyBiL2xpYi91dWlkL2lzbnVsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MGM5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdXVpZC9pc251bGwuYwpAQCAtMCwwICsxLDQ5IEBACisvKgorICogaXNudWxsLmMgLS0tIENoZWNrIHdoZXRoZXIgb3Igbm90IHRoZSBVVUlEIGlzIG51bGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKyAqIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidXVpZFAuaCIKKworLyogUmV0dXJucyAxIGlmIHRoZSB1dWlkIGlzIHRoZSBOVUxMIHV1aWQgKi8KK2ludCB1dWlkX2lzX251bGwoY29uc3QgdXVpZF90IHV1KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgCSpjcDsKKwlpbnQJCQlpOworCisJZm9yIChpPTAsIGNwID0gdXU7IGkgPCAxNjsgaSsrKQorCQlpZiAoKmNwKyspCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKwpkaWZmIC0tZ2l0IGEvbGliL3V1aWQvcGFjay5jIGIvbGliL3V1aWQvcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYjIxYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdXVpZC9wYWNrLmMKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIEludGVybmFsIHJvdXRpbmUgZm9yIHBhY2tpbmcgVVVJRCdzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisgKiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInV1aWRQLmgiCisKK3ZvaWQgdXVpZF9wYWNrKGNvbnN0IHN0cnVjdCB1dWlkICp1dSwgdXVpZF90IHB0cikKK3sKKwl1aW50MzJfdAl0bXA7CisJdW5zaWduZWQgY2hhcgkqb3V0ID0gcHRyOworCisJdG1wID0gdXUtPnRpbWVfbG93OworCW91dFszXSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisJdG1wID4+PSA4OworCW91dFsyXSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisJdG1wID4+PSA4OworCW91dFsxXSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisJdG1wID4+PSA4OworCW91dFswXSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisKKwl0bXAgPSB1dS0+dGltZV9taWQ7CisJb3V0WzVdID0gKHVuc2lnbmVkIGNoYXIpIHRtcDsKKwl0bXAgPj49IDg7CisJb3V0WzRdID0gKHVuc2lnbmVkIGNoYXIpIHRtcDsKKworCXRtcCA9IHV1LT50aW1lX2hpX2FuZF92ZXJzaW9uOworCW91dFs3XSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisJdG1wID4+PSA4OworCW91dFs2XSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisKKwl0bXAgPSB1dS0+Y2xvY2tfc2VxOworCW91dFs5XSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisJdG1wID4+PSA4OworCW91dFs4XSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisKKwltZW1jcHkob3V0KzEwLCB1dS0+bm9kZSwgNik7Cit9CisKZGlmZiAtLWdpdCBhL2xpYi91dWlkL3BhcnNlLmMgYi9saWIvdXVpZC9wYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMDg1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdXVpZC9wYXJzZS5jCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBwYXJzZS5jIC0tLSBVVUlEIHBhcnNpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKyAqIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAidXVpZFAuaCIKKworaW50IHV1aWRfcGFyc2UoY29uc3QgY2hhciAqaW4sIHV1aWRfdCB1dSkKK3sKKwlzdHJ1Y3QgdXVpZAl1dWlkOworCWludCAJCWk7CisJY29uc3QgY2hhcgkqY3A7CisJY2hhcgkJYnVmWzNdOworCisJaWYgKHN0cmxlbihpbikgIT0gMzYpCisJCXJldHVybiAtMTsKKwlmb3IgKGk9MCwgY3AgPSBpbjsgaSA8PSAzNjsgaSsrLGNwKyspIHsKKwkJaWYgKChpID09IDgpIHx8IChpID09IDEzKSB8fCAoaSA9PSAxOCkgfHwKKwkJICAgIChpID09IDIzKSkgeworCQkJaWYgKCpjcCA9PSAnLScpCisJCQkJY29udGludWU7CisJCQllbHNlCisJCQkJcmV0dXJuIC0xOworCQl9CisJCWlmIChpPT0gMzYpCisJCQlpZiAoKmNwID09IDApCisJCQkJY29udGludWU7CisJCWlmICghaXN4ZGlnaXQoKmNwKSkKKwkJCXJldHVybiAtMTsKKwl9CisJdXVpZC50aW1lX2xvdyA9IHN0cnRvdWwoaW4sIE5VTEwsIDE2KTsKKwl1dWlkLnRpbWVfbWlkID0gc3RydG91bChpbis5LCBOVUxMLCAxNik7CisJdXVpZC50aW1lX2hpX2FuZF92ZXJzaW9uID0gc3RydG91bChpbisxNCwgTlVMTCwgMTYpOworCXV1aWQuY2xvY2tfc2VxID0gc3RydG91bChpbisxOSwgTlVMTCwgMTYpOworCWNwID0gaW4rMjQ7CisJYnVmWzJdID0gMDsKKwlmb3IgKGk9MDsgaSA8IDY7IGkrKykgeworCQlidWZbMF0gPSAqY3ArKzsKKwkJYnVmWzFdID0gKmNwKys7CisJCXV1aWQubm9kZVtpXSA9IHN0cnRvdWwoYnVmLCBOVUxMLCAxNik7CisJfQorCisJdXVpZF9wYWNrKCZ1dWlkLCB1dSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvdXVpZC90c3RfdXVpZC5jIGIvbGliL3V1aWQvdHN0X3V1aWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGQ5MjhmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3V1aWQvdHN0X3V1aWQuYwpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIHRzdF91dWlkLmMgLS0tIHRlc3QgcHJvZ3JhbSBmcm9tIHRoZSBVVUlEIGxpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTggVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKyAqIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4MDUwMAorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNkZWZpbmUgVVVJRCBNWVVVSUQKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPHV1aWQvdXVpZC5oPgorCitzdGF0aWMgaW50IHRlc3RfdXVpZChjb25zdCBjaGFyICogdXVpZCwgaW50IGlzVmFsaWQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKiB2YWxpZFN0clsyXSA9IHsiaW52YWxpZCIsICJ2YWxpZCJ9OworCXV1aWRfdCB1dWlkQml0czsKKwlpbnQgcGFyc2VkT2s7CisKKwlwYXJzZWRPayA9IHV1aWRfcGFyc2UodXVpZCwgdXVpZEJpdHMpID09IDA7CisKKwlwcmludGYoIiVzIGlzICVzIiwgdXVpZCwgdmFsaWRTdHJbaXNWYWxpZF0pOworCWlmIChwYXJzZWRPayAhPSBpc1ZhbGlkKSB7CisJCXByaW50ZigiIGJ1dCB1dWlkX3BhcnNlIHNheXMgJXNcbiIsIHZhbGlkU3RyW3BhcnNlZE9rXSk7CisJCXJldHVybiAxOworCX0KKwlwcmludGYoIiwgT0tcbiIpOworCXJldHVybiAwOworfQorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgQVRUUih4KSBfX2F0dHJpYnV0ZV9fKHgpCisjZWxzZQorI2RlZmluZSBBVFRSKHgpCisjZW5kaWYKKworaW50CittYWluKGludCBhcmdjIEFUVFIoKHVudXNlZCkpICwgY2hhciAqKmFyZ3YgQVRUUigodW51c2VkKSkpCit7CisJdXVpZF90CQlidWYsIHRzdDsKKwljaGFyCQlzdHJbMTAwXTsKKwlzdHJ1Y3QgdGltZXZhbAl0djsKKwl0aW1lX3QJCXRpbWVfcmVnLCB0aW1lX2dlbjsKKwl1bnNpZ25lZCBjaGFyCSpjcDsKKwlpbnQgaTsKKwlpbnQgZmFpbGVkID0gMDsKKwlpbnQgdHlwZSwgdmFyaWFudDsKKworCXV1aWRfZ2VuZXJhdGUoYnVmKTsKKwl1dWlkX3VucGFyc2UoYnVmLCBzdHIpOworCXByaW50ZigiVVVJRCBnZW5lcmF0ZSA9ICVzXG4iLCBzdHIpOworCXByaW50ZigiVVVJRDogIik7CisJZm9yIChpPTAsIGNwID0gKHVuc2lnbmVkIGNoYXIgKikgJmJ1ZjsgaSA8IDE2OyBpKyspIHsKKwkJcHJpbnRmKCIlMDJ4IiwgKmNwKyspOworCX0KKwlwcmludGYoIlxuIik7CisJdHlwZSA9IHV1aWRfdHlwZShidWYpOyAJdmFyaWFudCA9IHV1aWRfdmFyaWFudChidWYpOworCXByaW50ZigiVVVJRCB0eXBlID0gJWQsIFVVSUQgdmFyaWFudCA9ICVkXG4iLCB0eXBlLCB2YXJpYW50KTsKKwlpZiAodmFyaWFudCAhPSBVVUlEX1ZBUklBTlRfRENFKSB7CisJCXByaW50ZigiSW5jb3JyZWN0IFVVSUQgVmFyaWFudDsgd2FzIGV4cGVjdGluZyBEQ0UhXG4iKTsKKwkJZmFpbGVkKys7CisJfQorCXByaW50ZigiXG4iKTsKKworCXV1aWRfZ2VuZXJhdGVfcmFuZG9tKGJ1Zik7CisJdXVpZF91bnBhcnNlKGJ1Ziwgc3RyKTsKKwlwcmludGYoIlVVSUQgcmFuZG9tIHN0cmluZyA9ICVzXG4iLCBzdHIpOworCXByaW50ZigiVVVJRDogIik7CisJZm9yIChpPTAsIGNwID0gKHVuc2lnbmVkIGNoYXIgKikgJmJ1ZjsgaSA8IDE2OyBpKyspIHsKKwkJcHJpbnRmKCIlMDJ4IiwgKmNwKyspOworCX0KKwlwcmludGYoIlxuIik7CisJdHlwZSA9IHV1aWRfdHlwZShidWYpOworCXZhcmlhbnQgPSB1dWlkX3ZhcmlhbnQoYnVmKTsKKwlwcmludGYoIlVVSUQgdHlwZSA9ICVkLCBVVUlEIHZhcmlhbnQgPSAlZFxuIiwgdHlwZSwgdmFyaWFudCk7CisJaWYgKHZhcmlhbnQgIT0gVVVJRF9WQVJJQU5UX0RDRSkgeworCQlwcmludGYoIkluY29ycmVjdCBVVUlEIFZhcmlhbnQ7IHdhcyBleHBlY3RpbmcgRENFIVxuIik7CisJCWZhaWxlZCsrOworCX0KKwlpZiAodHlwZSAhPSA0KSB7CisJCXByaW50ZigiSW5jb3JyZWN0IFVVSUQgdHlwZTsgd2FzIGV4cGVjdGluZyAiCisJCSAgICAgICAiNCAocmFuZG9tIHR5cGUpIVxuIik7CisJCWZhaWxlZCsrOworCX0KKwlwcmludGYoIlxuIik7CisKKwl0aW1lX2dlbiA9IHRpbWUoMCk7CisJdXVpZF9nZW5lcmF0ZV90aW1lKGJ1Zik7CisJdXVpZF91bnBhcnNlKGJ1Ziwgc3RyKTsKKwlwcmludGYoIlVVSUQgc3RyaW5nID0gJXNcbiIsIHN0cik7CisJcHJpbnRmKCJVVUlEIHRpbWU6ICIpOworCWZvciAoaT0wLCBjcCA9ICh1bnNpZ25lZCBjaGFyICopICZidWY7IGkgPCAxNjsgaSsrKSB7CisJCXByaW50ZigiJTAyeCIsICpjcCsrKTsKKwl9CisJcHJpbnRmKCJcbiIpOworCXR5cGUgPSB1dWlkX3R5cGUoYnVmKTsKKwl2YXJpYW50ID0gdXVpZF92YXJpYW50KGJ1Zik7CisJcHJpbnRmKCJVVUlEIHR5cGUgPSAlZCwgVVVJRCB2YXJpYW50ID0gJWRcbiIsIHR5cGUsIHZhcmlhbnQpOworCWlmICh2YXJpYW50ICE9IFVVSURfVkFSSUFOVF9EQ0UpIHsKKwkJcHJpbnRmKCJJbmNvcnJlY3QgVVVJRCBWYXJpYW50OyB3YXMgZXhwZWN0aW5nIERDRSFcbiIpOworCQlmYWlsZWQrKzsKKwl9CisJaWYgKHR5cGUgIT0gMSkgeworCQlwcmludGYoIkluY29ycmVjdCBVVUlEIHR5cGU7IHdhcyBleHBlY3RpbmcgIgorCQkgICAgICAgIjEgKHRpbWUtYmFzZWQgdHlwZSkhXFxuIik7CisJCWZhaWxlZCsrOworCX0KKworCXR2LnR2X3NlYyA9IDA7CisJdHYudHZfdXNlYyA9IDA7CisJdGltZV9yZWcgPSB1dWlkX3RpbWUoYnVmLCAmdHYpOworCXByaW50ZigiVVVJRCBnZW5lcmF0ZWQgYXQgJWx1IHJlcG9ydHMgJWx1ICglbGQuJWxkKVxuIiwKKwkgICAgICAgdGltZV9nZW4sIHRpbWVfcmVnLCB0di50dl9zZWMsIChsb25nKXR2LnR2X3VzZWMpOworCS8qIGFsbG93IDFzIG1hcmdpbiBpbiBjYXNlIG9mIHJvbGxvdmVyIGJldHdlZW4gc2FtcGxpbmcKKwkgKiB0aGUgY3VycmVudCB0aW1lIGFuZCB3aGVuIHRoZSBVVUlEIGlzIGdlbmVyYXRlZC4gKi8KKwlpZiAodGltZV9yZWcgPiB0aW1lX2dlbiArIDEpIHsKKwkJcHJpbnRmKCJVVUlEIHRpbWUgY29tcGFyaXNvbiBmYWlsZWQhXG4iKTsKKwkJZmFpbGVkKys7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJVVUlEIHRpbWUgY29tcGFyaXNvbiBzdWNjZWVkZWQuXG4iKTsKKwl9CisKKwlpZiAodXVpZF9wYXJzZShzdHIsIHRzdCkgPCAwKSB7CisJCXByaW50ZigiVVVJRCBwYXJzZSBmYWlsZWRcbiIpOworCQlmYWlsZWQrKzsKKwl9CisJaWYgKCF1dWlkX2NvbXBhcmUoYnVmLCB0c3QpKSB7CisJCXByaW50ZigiVVVJRCBwYXJzZSBhbmQgY29tcGFyZSBzdWNjZWVkZWQuXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGYoIlVVSUQgcGFyc2UgYW5kIGNvbXBhcmUgZmFpbGVkIVxuIik7CisJCWZhaWxlZCsrOworCX0KKwl1dWlkX2NsZWFyKHRzdCk7CisJaWYgKHV1aWRfaXNfbnVsbCh0c3QpKQorCQlwcmludGYoIlVVSUQgY2xlYXIgYW5kIGlzIG51bGwgc3VjY2VlZGVkLlxuIik7CisJZWxzZSB7CisJCXByaW50ZigiVVVJRCBjbGVhciBhbmQgaXMgbnVsbCBmYWlsZWQhXG4iKTsKKwkJZmFpbGVkKys7CisJfQorCXV1aWRfY29weShidWYsIHRzdCk7CisJaWYgKCF1dWlkX2NvbXBhcmUoYnVmLCB0c3QpKQorCQlwcmludGYoIlVVSUQgY29weSBhbmQgY29tcGFyZSBzdWNjZWVkZWQuXG4iKTsKKwllbHNlIHsKKwkJcHJpbnRmKCJVVUlEIGNvcHkgYW5kIGNvbXBhcmUgZmFpbGVkIVxuIik7CisJCWZhaWxlZCsrOworCX0KKworCWZhaWxlZCArPSB0ZXN0X3V1aWQoIjg0OTQ5Y2M1LTQ3MDEtNGE4NC04OTViLTM1NGM1ODRhOTgxYiIsIDEpOworCWZhaWxlZCArPSB0ZXN0X3V1aWQoIjg0OTQ5Q0M1LTQ3MDEtNEE4NC04OTVCLTM1NEM1ODRBOTgxQiIsIDEpOworCWZhaWxlZCArPSB0ZXN0X3V1aWQoIjg0OTQ5Y2M1LTQ3MDEtNGE4NC04OTViLTM1NGM1ODRhOTgxYmMiLCAwKTsKKwlmYWlsZWQgKz0gdGVzdF91dWlkKCI4NDk0OWNjNS00NzAxLTRhODQtODk1Yi0zNTRjNTg0YTk4MSIsIDApOworCWZhaWxlZCArPSB0ZXN0X3V1aWQoIjg0OTQ5Y2M1eDQ3MDEtNGE4NC04OTViLTM1NGM1ODRhOTgxYiIsIDApOworCWZhaWxlZCArPSB0ZXN0X3V1aWQoIjg0OTQ5Y2M1MDQ3MDEtNGE4NC04OTViLTM1NGM1ODRhOTgxYiIsIDApOworCWZhaWxlZCArPSB0ZXN0X3V1aWQoIjg0OTQ5Y2M1LTQ3MDEwNGE4NC04OTViLTM1NGM1ODRhOTgxYiIsIDApOworCWZhaWxlZCArPSB0ZXN0X3V1aWQoIjg0OTQ5Y2M1LTQ3MDEtNGE4NDA4OTViLTM1NGM1ODRhOTgxYiIsIDApOworCWZhaWxlZCArPSB0ZXN0X3V1aWQoIjg0OTQ5Y2M1LTQ3MDEtNGE4NC04OTViMDM1NGM1ODRhOTgxYiIsIDApOworCWZhaWxlZCArPSB0ZXN0X3V1aWQoImc0OTQ5Y2M1LTQ3MDEtNGE4NC04OTViLTM1NGM1ODRhOTgxYiIsIDApOworCWZhaWxlZCArPSB0ZXN0X3V1aWQoIjg0OTQ5Y2M1LTQ3MDEtNGE4NC04OTViLTM1NGM1ODRhOTgxZyIsIDApOworCisJaWYgKGZhaWxlZCkgeworCQlwcmludGYoIiVkIGZhaWx1cmVzLlxuIiwgZmFpbGVkKTsKKwkJZXhpdCgxKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvdXVpZC91bnBhY2suYyBiL2xpYi91dWlkL3VucGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjODA0M2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdXVpZC91bnBhY2suYwpAQCAtMCwwICsxLDY0IEBACisvKgorICogSW50ZXJuYWwgcm91dGluZSBmb3IgdW5wYWNraW5nIFVVSUQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKyAqIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAidXVpZFAuaCIKKwordm9pZCB1dWlkX3VucGFjayhjb25zdCB1dWlkX3QgaW4sIHN0cnVjdCB1dWlkICp1dSkKK3sKKwljb25zdCB1aW50OF90CSpwdHIgPSBpbjsKKwl1aW50MzJfdAkJdG1wOworCisJdG1wID0gKnB0cisrOworCXRtcCA9ICh0bXAgPDwgOCkgfCAqcHRyKys7CisJdG1wID0gKHRtcCA8PCA4KSB8ICpwdHIrKzsKKwl0bXAgPSAodG1wIDw8IDgpIHwgKnB0cisrOworCXV1LT50aW1lX2xvdyA9IHRtcDsKKworCXRtcCA9ICpwdHIrKzsKKwl0bXAgPSAodG1wIDw8IDgpIHwgKnB0cisrOworCXV1LT50aW1lX21pZCA9IHRtcDsKKworCXRtcCA9ICpwdHIrKzsKKwl0bXAgPSAodG1wIDw8IDgpIHwgKnB0cisrOworCXV1LT50aW1lX2hpX2FuZF92ZXJzaW9uID0gdG1wOworCisJdG1wID0gKnB0cisrOworCXRtcCA9ICh0bXAgPDwgOCkgfCAqcHRyKys7CisJdXUtPmNsb2NrX3NlcSA9IHRtcDsKKworCW1lbWNweSh1dS0+bm9kZSwgcHRyLCA2KTsKK30KKwpkaWZmIC0tZ2l0IGEvbGliL3V1aWQvdW5wYXJzZS5jIGIvbGliL3V1aWQvdW5wYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NTZhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdXVpZC91bnBhcnNlLmMKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIHVucGFyc2UuYyAtLSBjb252ZXJ0IGEgVVVJRCB0byBzdHJpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKyAqIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgInV1aWRQLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpmbXRfbG93ZXIgPQorCSIlMDh4LSUwNHgtJTA0eC0lMDJ4JTAyeC0lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngiOworCitzdGF0aWMgY29uc3QgY2hhciAqZm10X3VwcGVyID0KKwkiJTA4WC0lMDRYLSUwNFgtJTAyWCUwMlgtJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYIjsKKworI2lmZGVmIFVVSURfVU5QQVJTRV9ERUZBVUxUX1VQUEVSCisjZGVmaW5lIEZNVF9ERUZBVUxUIGZtdF91cHBlcgorI2Vsc2UKKyNkZWZpbmUgRk1UX0RFRkFVTFQgZm10X2xvd2VyCisjZW5kaWYKKworc3RhdGljIHZvaWQgdXVpZF91bnBhcnNlX3goY29uc3QgdXVpZF90IHV1LCBjaGFyICpvdXQsIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlzdHJ1Y3QgdXVpZCB1dWlkOworCisJdXVpZF91bnBhY2sodXUsICZ1dWlkKTsKKwlzcHJpbnRmKG91dCwgZm10LAorCQl1dWlkLnRpbWVfbG93LCB1dWlkLnRpbWVfbWlkLCB1dWlkLnRpbWVfaGlfYW5kX3ZlcnNpb24sCisJCXV1aWQuY2xvY2tfc2VxID4+IDgsIHV1aWQuY2xvY2tfc2VxICYgMHhGRiwKKwkJdXVpZC5ub2RlWzBdLCB1dWlkLm5vZGVbMV0sIHV1aWQubm9kZVsyXSwKKwkJdXVpZC5ub2RlWzNdLCB1dWlkLm5vZGVbNF0sIHV1aWQubm9kZVs1XSk7Cit9CisKK3ZvaWQgdXVpZF91bnBhcnNlX2xvd2VyKGNvbnN0IHV1aWRfdCB1dSwgY2hhciAqb3V0KQoreworCXV1aWRfdW5wYXJzZV94KHV1LCBvdXQsCWZtdF9sb3dlcik7Cit9CisKK3ZvaWQgdXVpZF91bnBhcnNlX3VwcGVyKGNvbnN0IHV1aWRfdCB1dSwgY2hhciAqb3V0KQoreworCXV1aWRfdW5wYXJzZV94KHV1LCBvdXQsCWZtdF91cHBlcik7Cit9CisKK3ZvaWQgdXVpZF91bnBhcnNlKGNvbnN0IHV1aWRfdCB1dSwgY2hhciAqb3V0KQoreworCXV1aWRfdW5wYXJzZV94KHV1LCBvdXQsIEZNVF9ERUZBVUxUKTsKK30KZGlmZiAtLWdpdCBhL2xpYi91dWlkL3V1aWQuMy5pbiBiL2xpYi91dWlkL3V1aWQuMy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODc2MGZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3V1aWQvdXVpZC4zLmluCkBAIC0wLDAgKzEsNjYgQEAKKy5cIiBDb3B5cmlnaHQgMTk5OSBBbmRyZWFzIERpbGdlciAoYWRpbGdlckBlbmVsLnVjYWxnYXJ5LmNhKQorLlwiCisuXCIgJUJlZ2luLUhlYWRlciUKKy5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5cIiBhcmUgbWV0OgorLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisuXCIgICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisuXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisuXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy5cIiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKy5cIiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisuXCIgICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorLlwiIAorLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKy5cIiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKy5cIiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisuXCIgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorLlwiIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisuXCIgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisuXCIgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorLlwiIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLlwiIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisuXCIgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKy5cIiBEQU1BR0UuCisuXCIgJUVuZC1IZWFkZXIlCisuXCIgCisuXCIgQ3JlYXRlZCAgV2VkIE1hciAxMCAxNzo0MjoxMiAxOTk5LCBBbmRyZWFzIERpbGdlcgorLlRIIFVVSUQgMyAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQordXVpZCBcLSBEQ0UgY29tcGF0aWJsZSBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciBsaWJyYXJ5CisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDx1dWlkL3V1aWQuaD4KKy5TSCBERVNDUklQVElPTgorVGhlIFVVSUQgbGlicmFyeSBpcyB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBpZGVudGlmaWVycyBmb3Igb2JqZWN0cyAKK3RoYXQgbWF5IGJlIGFjY2Vzc2libGUgYmV5b25kIHRoZSBsb2NhbCBzeXN0ZW0uICBUaGlzIGxpYnJhcnkKK2dlbmVyYXRlcyBVVUlEcyBjb21wYXRpYmxlIHdpdGggdGhvc2UgY3JlYXRlZCBieSB0aGUgT3BlbiBTb2Z0d2FyZQorRm91bmRhdGlvbiAoT1NGKSBEaXN0cmlidXRlZCBDb21wdXRpbmcgRW52aXJvbm1lbnQgKERDRSkgdXRpbGl0eSAKKy5CUiB1dWlkZ2VuIC4KKy5zcAorVGhlIFVVSURzIGdlbmVyYXRlZCBieSB0aGlzIGxpYnJhcnkgY2FuIGJlIHJlYXNvbmFibHkgZXhwZWN0ZWQgdG8gYmUKK3VuaXF1ZSB3aXRoaW4gYSBzeXN0ZW0sIGFuZCB1bmlxdWUgYWNyb3NzIGFsbCBzeXN0ZW1zLiAgVGhleSBjb3VsZAorYmUgdXNlZCwgZm9yIGluc3RhbmNlLCB0byBnZW5lcmF0ZSB1bmlxdWUgSFRUUCBjb29raWVzIGFjcm9zcyBtdWx0aXBsZQord2ViIHNlcnZlcnMgd2l0aG91dCBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHNlcnZlcnMsIGFuZCB3aXRob3V0IGZlYXIKK29mIGEgbmFtZSBjbGFzaC4KKy5TSCAiQ09ORk9STUlORyBUTyIKK09TRiBEQ0UgMS4xCisuU0ggQVVUSE9SCitUaGVvZG9yZSBZLiBUcydvCisuU0ggQVZBSUxBQklMSVRZCitUaGUgVVVJRCBsaWJyYXJ5IGlzIHBhcnQgb2YgdGhlIGUyZnNwcm9ncyBwYWNrYWdlIGFuZCBpcyBhdmFpbGFibGUgZnJvbQorLlVSIGh0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LworaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCisuVUUKKy5TSCAiU0VFIEFMU08iCisuQlIgdXVpZF9jbGVhciAoMyksCisuQlIgdXVpZF9jb21wYXJlICgzKSwKKy5CUiB1dWlkX2NvcHkgKDMpLAorLkJSIHV1aWRfZ2VuZXJhdGUgKDMpLAorLkJSIHV1aWRfaXNfbnVsbCAoMyksCisuQlIgdXVpZF9wYXJzZSAoMyksCisuQlIgdXVpZF90aW1lICgzKSwKKy5CUiB1dWlkX3VucGFyc2UgKDMpCmRpZmYgLS1naXQgYS9saWIvdXVpZC91dWlkLmguaW4gYi9saWIvdXVpZC91dWlkLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E4NDZkYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91dWlkL3V1aWQuaC5pbgpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIFB1YmxpYyBpbmNsdWRlIGZpbGUgZm9yIHRoZSBVVUlEIGxpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTggVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKyAqIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWZuZGVmIF9VVUlEX1VVSURfSAorI2RlZmluZSBfVVVJRF9VVUlEX0gKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8dGltZS5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdXVpZF90WzE2XTsKKworLyogVVVJRCBWYXJpYW50IGRlZmluaXRpb25zICovCisjZGVmaW5lIFVVSURfVkFSSUFOVF9OQ1MgCTAKKyNkZWZpbmUgVVVJRF9WQVJJQU5UX0RDRSAJMQorI2RlZmluZSBVVUlEX1ZBUklBTlRfTUlDUk9TT0ZUCTIKKyNkZWZpbmUgVVVJRF9WQVJJQU5UX09USEVSCTMKKworLyogVVVJRCBUeXBlIGRlZmluaXRpb25zICovCisjZGVmaW5lIFVVSURfVFlQRV9EQ0VfVElNRSAgIDEKKyNkZWZpbmUgVVVJRF9UWVBFX0RDRV9SQU5ET00gNAorCisvKiBBbGxvdyBVVUlEIGNvbnN0YW50cyB0byBiZSBkZWZpbmVkICovCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgVVVJRF9ERUZJTkUobmFtZSx1MCx1MSx1Mix1Myx1NCx1NSx1Nix1Nyx1OCx1OSx1MTAsdTExLHUxMix1MTMsdTE0LHUxNSkgXAorCXN0YXRpYyBjb25zdCB1dWlkX3QgbmFtZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkgPSB7dTAsdTEsdTIsdTMsdTQsdTUsdTYsdTcsdTgsdTksdTEwLHUxMSx1MTIsdTEzLHUxNCx1MTV9CisjZWxzZQorI2RlZmluZSBVVUlEX0RFRklORShuYW1lLHUwLHUxLHUyLHUzLHU0LHU1LHU2LHU3LHU4LHU5LHUxMCx1MTEsdTEyLHUxMyx1MTQsdTE1KSBcCisJc3RhdGljIGNvbnN0IHV1aWRfdCBuYW1lID0ge3UwLHUxLHUyLHUzLHU0LHU1LHU2LHU3LHU4LHU5LHUxMCx1MTEsdTEyLHUxMyx1MTQsdTE1fQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogY2xlYXIuYyAqLwordm9pZCB1dWlkX2NsZWFyKHV1aWRfdCB1dSk7CisKKy8qIGNvbXBhcmUuYyAqLworaW50IHV1aWRfY29tcGFyZShjb25zdCB1dWlkX3QgdXUxLCBjb25zdCB1dWlkX3QgdXUyKTsKKworLyogY29weS5jICovCit2b2lkIHV1aWRfY29weSh1dWlkX3QgZHN0LCBjb25zdCB1dWlkX3Qgc3JjKTsKKworLyogZ2VuX3V1aWQuYyAqLwordm9pZCB1dWlkX2dlbmVyYXRlKHV1aWRfdCBvdXQpOwordm9pZCB1dWlkX2dlbmVyYXRlX3JhbmRvbSh1dWlkX3Qgb3V0KTsKK3ZvaWQgdXVpZF9nZW5lcmF0ZV90aW1lKHV1aWRfdCBvdXQpOworCisvKiBpc251bGwuYyAqLworaW50IHV1aWRfaXNfbnVsbChjb25zdCB1dWlkX3QgdXUpOworCisvKiBwYXJzZS5jICovCitpbnQgdXVpZF9wYXJzZShjb25zdCBjaGFyICppbiwgdXVpZF90IHV1KTsKKworLyogdW5wYXJzZS5jICovCit2b2lkIHV1aWRfdW5wYXJzZShjb25zdCB1dWlkX3QgdXUsIGNoYXIgKm91dCk7Cit2b2lkIHV1aWRfdW5wYXJzZV9sb3dlcihjb25zdCB1dWlkX3QgdXUsIGNoYXIgKm91dCk7Cit2b2lkIHV1aWRfdW5wYXJzZV91cHBlcihjb25zdCB1dWlkX3QgdXUsIGNoYXIgKm91dCk7CisKKy8qIHV1aWRfdGltZS5jICovCit0aW1lX3QgdXVpZF90aW1lKGNvbnN0IHV1aWRfdCB1dSwgc3RydWN0IHRpbWV2YWwgKnJldF90dik7CitpbnQgdXVpZF90eXBlKGNvbnN0IHV1aWRfdCB1dSk7CitpbnQgdXVpZF92YXJpYW50KGNvbnN0IHV1aWRfdCB1dSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfVVVJRF9VVUlEX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi91dWlkL3V1aWQucGMuaW4gYi9saWIvdXVpZC91dWlkLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYTRlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdXVpZC91dWlkLnBjLmluCkBAIC0wLDAgKzEsMTEgQEAKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorbGliZGlyPUBsaWJkaXJACitpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorCitOYW1lOiB1dWlkCitEZXNjcmlwdGlvbjogVW5pdmVyc2FsbHkgdW5pcXVlIGlkIGxpYnJhcnkKK1ZlcnNpb246IEBFMkZTUFJPR1NfVkVSU0lPTkAKK1JlcXVpcmVzOiAKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9L3V1aWQgLUkke2luY2x1ZGVkaXJ9CitMaWJzOiAtTCR7bGliZGlyfSAtbHV1aWQKZGlmZiAtLWdpdCBhL2xpYi91dWlkL3V1aWRQLmggYi9saWIvdXVpZC91dWlkUC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OTdiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdXVpZC91dWlkUC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiB1dWlkLmggLS0gcHJpdmF0ZSBoZWFkZXIgZmlsZSBmb3IgdXVpZHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKyAqIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8dXVpZC91dWlkX3R5cGVzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPHV1aWQvdXVpZC5oPgorCisvKgorICogT2Zmc2V0IGJldHdlZW4gMTUtT2N0LTE1ODIgYW5kIDEtSmFuLTcwCisgKi8KKyNkZWZpbmUgVElNRV9PRkZTRVRfSElHSCAweDAxQjIxREQyCisjZGVmaW5lIFRJTUVfT0ZGU0VUX0xPVyAgMHgxMzgxNDAwMAorCitzdHJ1Y3QgdXVpZCB7CisJdWludDMyX3QJdGltZV9sb3c7CisJdWludDE2X3QJdGltZV9taWQ7CisJdWludDE2X3QJdGltZV9oaV9hbmRfdmVyc2lvbjsKKwl1aW50MTZfdAljbG9ja19zZXE7CisJdWludDhfdAlub2RlWzZdOworfTsKKworCisvKgorICogcHJvdG90eXBlcworICovCit2b2lkIHV1aWRfcGFjayhjb25zdCBzdHJ1Y3QgdXVpZCAqdXUsIHV1aWRfdCBwdHIpOwordm9pZCB1dWlkX3VucGFjayhjb25zdCB1dWlkX3QgaW4sIHN0cnVjdCB1dWlkICp1dSk7CmRpZmYgLS1naXQgYS9saWIvdXVpZC91dWlkX2NsZWFyLjMuaW4gYi9saWIvdXVpZC91dWlkX2NsZWFyLjMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJkMmJmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91dWlkL3V1aWRfY2xlYXIuMy5pbgpAQCAtMCwwICsxLDYwIEBACisuXCIgQ29weXJpZ2h0IDE5OTkgQW5kcmVhcyBEaWxnZXIgKGFkaWxnZXJAZW5lbC51Y2FsZ2FyeS5jYSkKKy5cIgorLlwiICVCZWdpbi1IZWFkZXIlCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisuXCIgYXJlIG1ldDoKKy5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorLlwiICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisuXCIgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisuXCIgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorLlwiICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy5cIiAKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisuXCIgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisuXCIgV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorLlwiIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKy5cIiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorLlwiIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorLlwiIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKy5cIiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy5cIiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorLlwiIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisuXCIgREFNQUdFLgorLlwiICVFbmQtSGVhZGVyJQorLlwiIAorLlwiIENyZWF0ZWQgIFdlZCBNYXIgMTAgMTc6NDI6MTIgMTk5OSwgQW5kcmVhcyBEaWxnZXIKKy5USCBVVUlEX0NMRUFSIDMgIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK3V1aWRfY2xlYXIgXC0gcmVzZXQgdmFsdWUgb2YgVVVJRCB2YXJpYWJsZSB0byB0aGUgTlVMTCB2YWx1ZQorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDx1dWlkL3V1aWQuaD4KKy5zcAorLkJJICJ2b2lkIHV1aWRfY2xlYXIodXVpZF90ICIgdXUgKTsKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIHV1aWRfY2xlYXIKK2Z1bmN0aW9uIHNldHMgdGhlIHZhbHVlIG9mIHRoZSBzdXBwbGllZCB1dWlkIHZhcmlhYmxlCisuSSB1dQordG8gdGhlIE5VTEwgdmFsdWUuCisuU0ggQVVUSE9SCitUaGVvZG9yZSBZLiBUcydvCisuU0ggQVZBSUxBQklMSVRZCisuVVIgaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8KKy5VRQorLlNIICJTRUUgQUxTTyIKKy5CUiB1dWlkICgzKSwKKy5CUiB1dWlkX2NvbXBhcmUgKDMpLAorLkJSIHV1aWRfY29weSAoMyksCisuQlIgdXVpZF9nZW5lcmF0ZSAoMyksCisuQlIgdXVpZF9pc19udWxsICgzKSwKKy5CUiB1dWlkX3BhcnNlICgzKSwKKy5CUiB1dWlkX3VucGFyc2UgKDMpCmRpZmYgLS1naXQgYS9saWIvdXVpZC91dWlkX2NvbXBhcmUuMy5pbiBiL2xpYi91dWlkL3V1aWRfY29tcGFyZS4zLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMzI5NjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdXVpZC91dWlkX2NvbXBhcmUuMy5pbgpAQCAtMCwwICsxLDY2IEBACisuXCIgQ29weXJpZ2h0IDE5OTkgQW5kcmVhcyBEaWxnZXIgKGFkaWxnZXJAZW5lbC51Y2FsZ2FyeS5jYSkKKy5cIgorLlwiICVCZWdpbi1IZWFkZXIlCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisuXCIgYXJlIG1ldDoKKy5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorLlwiICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisuXCIgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisuXCIgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorLlwiICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy5cIiAKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisuXCIgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisuXCIgV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorLlwiIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKy5cIiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorLlwiIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorLlwiIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKy5cIiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy5cIiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorLlwiIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisuXCIgREFNQUdFLgorLlwiICVFbmQtSGVhZGVyJQorLlwiIAorLlwiIENyZWF0ZWQgIFdlZCBNYXIgMTAgMTc6NDI6MTIgMTk5OSwgQW5kcmVhcyBEaWxnZXIKKy5USCBVVUlEX0NPTVBBUkUgMyAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQordXVpZF9jb21wYXJlIFwtIGNvbXBhcmUgd2hldGhlciB0d28gVVVJRHMgYXJlIHRoZSBzYW1lCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPHV1aWQvdXVpZC5oPgorLnNwCisuQkkgImludCB1dWlkX2NvbXBhcmUodXVpZF90ICIgdXUxICIsIHV1aWRfdCAiIHV1MikKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIHV1aWRfY29tcGFyZQorZnVuY3Rpb24gY29tcGFyZXMgdGhlIHR3byBzdXBwbGllZCB1dWlkIHZhcmlhYmxlcworLklSIHV1MSAiIGFuZCAiIHV1MgordG8gZWFjaCBvdGhlci4KKy5TSCBSRVRVUk4gVkFMVUUKK1JldHVybnMgYW4gaW50ZWdlciBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gemVybyBpZiAKKy5JIHV1MQoraXMgZm91bmQsICByZXNwZWN0aXZlbHksIHRvIGJlIGxleGlncmFwaGljYWxseSBsZXNzIHRoYW4sIGVxdWFsLCBvciAKK2dyZWF0ZXIgdGhhbiAKKy5JUiB1dTIgLgorLlNIIEFVVEhPUgorVGhlb2RvcmUgWS4gVHMnbworLlNIIEFWQUlMQUJJTElUWQorLlVSIGh0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LworaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCisuVUUKKy5TSCAiU0VFIEFMU08iCisuQlIgdXVpZCAoMyksCisuQlIgdXVpZF9jbGVhciAoMyksCisuQlIgdXVpZF9jb3B5ICgzKSwKKy5CUiB1dWlkX2dlbmVyYXRlICgzKSwKKy5CUiB1dWlkX2lzX251bGwgKDMpLAorLkJSIHV1aWRfcGFyc2UgKDMpLAorLkJSIHV1aWRfdW5wYXJzZSAoMykKZGlmZiAtLWdpdCBhL2xpYi91dWlkL3V1aWRfY29weS4zLmluIGIvbGliL3V1aWQvdXVpZF9jb3B5LjMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY1ZThjNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91dWlkL3V1aWRfY29weS4zLmluCkBAIC0wLDAgKzEsNjIgQEAKKy5cIiBDb3B5cmlnaHQgMTk5OSBBbmRyZWFzIERpbGdlciAoYWRpbGdlckBlbmVsLnVjYWxnYXJ5LmNhKQorLlwiCisuXCIgJUJlZ2luLUhlYWRlciUKKy5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5cIiBhcmUgbWV0OgorLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisuXCIgICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisuXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisuXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy5cIiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKy5cIiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisuXCIgICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorLlwiIAorLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKy5cIiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKy5cIiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisuXCIgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorLlwiIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisuXCIgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisuXCIgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorLlwiIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLlwiIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisuXCIgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKy5cIiBEQU1BR0UuCisuXCIgJUVuZC1IZWFkZXIlCisuXCIgCisuXCIgQ3JlYXRlZCAgV2VkIE1hciAxMCAxNzo0MjoxMiAxOTk5LCBBbmRyZWFzIERpbGdlcgorLlRIIFVVSURfQ09QWSAzICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCit1dWlkX2NvcHkgXC0gY29weSBhIFVVSUQgdmFsdWUKKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8dXVpZC91dWlkLmg+Cisuc3AKKy5CSSAidm9pZCB1dWlkX2NvcHkodXVpZF90ICIgZHN0ICIsIHV1aWRfdCAiIHNyYyk7CisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlCisuQiB1dWlkX2NvcHkKK2Z1bmN0aW9uIGNvcGllcyB0aGUgVVVJRCB2YXJpYWJsZQorLklSIHNyYyAiIHRvICIgZHN0IC4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBjb3BpZWQgVVVJRCBpcyByZXR1cm5lZCBpbiB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieQorLklSIGRzdCAuCisuU0ggQVVUSE9SCitUaGVvZG9yZSBZLiBUcydvCisuU0ggQVZBSUxBQklMSVRZCisuVVIgaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8KKy5VRQorLlNIICJTRUUgQUxTTyIKKy5CUiB1dWlkICgzKSwKKy5CUiB1dWlkX2NsZWFyICgzKSwKKy5CUiB1dWlkX2NvbXBhcmUgKDMpLAorLkJSIHV1aWRfZ2VuZXJhdGUgKDMpLAorLkJSIHV1aWRfaXNfbnVsbCAoMyksCisuQlIgdXVpZF9wYXJzZSAoMyksCisuQlIgdXVpZF91bnBhcnNlICgzKQpkaWZmIC0tZ2l0IGEvbGliL3V1aWQvdXVpZF9nZW5lcmF0ZS4zLmluIGIvbGliL3V1aWQvdXVpZF9nZW5lcmF0ZS4zLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OGUwNDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdXVpZC91dWlkX2dlbmVyYXRlLjMuaW4KQEAgLTAsMCArMSwxMDQgQEAKKy5cIiBDb3B5cmlnaHQgMTk5OSBBbmRyZWFzIERpbGdlciAoYWRpbGdlckBlbmVsLnVjYWxnYXJ5LmNhKQorLlwiCisuXCIgJUJlZ2luLUhlYWRlciUKKy5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5cIiBhcmUgbWV0OgorLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisuXCIgICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisuXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisuXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy5cIiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKy5cIiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisuXCIgICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorLlwiIAorLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKy5cIiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKy5cIiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisuXCIgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorLlwiIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisuXCIgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisuXCIgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorLlwiIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLlwiIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisuXCIgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKy5cIiBEQU1BR0UuCisuXCIgJUVuZC1IZWFkZXIlCisuXCIgCisuXCIgQ3JlYXRlZCAgV2VkIE1hciAxMCAxNzo0MjoxMiAxOTk5LCBBbmRyZWFzIERpbGdlcgorLlRIIFVVSURfR0VORVJBVEUgMyAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQordXVpZF9nZW5lcmF0ZSwgdXVpZF9nZW5lcmF0ZV9yYW5kb20sIHV1aWRfZ2VuZXJhdGVfdGltZSBcLSBjcmVhdGUgYSBuZXcgdW5pcXVlIFVVSUQgdmFsdWUKKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8dXVpZC91dWlkLmg+Cisuc3AKKy5CSSAidm9pZCB1dWlkX2dlbmVyYXRlKHV1aWRfdCAiIG91dCApOworLkJJICJ2b2lkIHV1aWRfZ2VuZXJhdGVfcmFuZG9tKHV1aWRfdCAiIG91dCApOworLkJJICJ2b2lkIHV1aWRfZ2VuZXJhdGVfdGltZSh1dWlkX3QgIiBvdXQgKTsKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIHV1aWRfZ2VuZXJhdGUKK2Z1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgdW5pdmVyc2FsbHkgdW5pcXVlIGlkZW50aWZpZXIgKFVVSUQpLiAgVGhlIHV1aWQgd2lsbAorYmUgZ2VuZXJhdGVkIGJhc2VkIG9uIGhpZ2gtcXVhbGl0eSByYW5kb21uZXNzIGZyb20gCisuSVIgL2Rldi91cmFuZG9tICwgCitpZiBhdmFpbGFibGUuICBJZiBpdCBpcyBub3QgYXZhaWxhYmxlLCB0aGVuIAorLkIgdXVpZF9nZW5lcmF0ZSAKK3dpbGwgdXNlIGFuIGFsdGVybmF0aXZlIGFsZ29yaXRobSB3aGljaCB1c2VzIHRoZSBjdXJyZW50IHRpbWUsIHRoZQorbG9jYWwgZXRoZXJuZXQgTUFDIGFkZHJlc3MgKGlmIGF2YWlsYWJsZSksIGFuZCByYW5kb20gZGF0YSBnZW5lcmF0ZWQKK3VzaW5nIGEgcHNldWRvLXJhbmRvbSBnZW5lcmF0b3IuCisuc3AKK1RoZSAKKy5CIHV1aWRfZ2VuZXJhdGVfcmFuZG9tCitmdW5jdGlvbiBmb3JjZXMgdGhlIHVzZSBvZiB0aGUgYWxsLXJhbmRvbSBVVUlEIGZvcm1hdCwgZXZlbiBpZgorYSBoaWdoLXF1YWxpdHkgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKGkuZS4sIAorLklSIC9kZXYvdXJhbmRvbSApCitpcyBub3QgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIGEgcHNldWRvLXJhbmRvbQorZ2VuZXJhdG9yIHdpbGwgYmUgc3Vic2l0dXRlZC4gIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGEgcHNldWRvLXJhbmRvbQorZ2VuZXJhdG9yIG1heSBjb21wcm9taXNlIHRoZSB1bmlxdWVuZXNzIG9mIFVVSUQncworZ2VuZXJhdGVkIGluIHRoaXMgZmFzaGlvbi4KKy5zcAorVGhlCisuQiB1dWlkX2dlbmVyYXRlX3RpbWUgCitmdW5jdGlvbiBmb3JjZXMgdGhlIHVzZSBvZiB0aGUgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtIHdoaWNoIHVzZXMgdGhlCitjdXJyZW50IHRpbWUgYW5kIHRoZSBsb2NhbCBldGhlcm5ldCBNQUMgYWRkcmVzcyAoaWYgYXZhaWxhYmxlKS4KK1RoaXMgYWxnb3JpdGhtIHVzZWQgdG8gYmUgdGhlIGRlZmF1bHQgb25lIHVzZWQgdG8gZ2VuZXJhdGUgVVVJRCwgYnV0CitiZWNhdXNlIG9mIHRoZSB1c2Ugb2YgdGhlIGV0aGVybmV0IE1BQyBhZGRyZXNzLCBpdCBjYW4gbGVhaworaW5mb3JtYXRpb24gYWJvdXQgd2hlbiBhbmQgd2hlcmUgdGhlIFVVSUQgd2FzIGdlbmVyYXRlZC4gIFRoaXMgY2FuIGNhdXNlCitwcml2YWN5IHByb2JsZW1zIGluIHNvbWUgYXBwbGljYXRpb25zLCBzbyB0aGUKKy5CIHV1aWRfZ2VuZXJhdGUKK2Z1bmN0aW9uIG9ubHkgdXNlcyB0aGlzIGFsZ29yaXRobSBpZiBhIGhpZ2gtcXVhbGl0eSBzb3VyY2Ugb2YKK3JhbmRvbW5lc3MgaXMgbm90IGF2YWlsYWJsZS4gIAorLnNwCitUaGUgVVVJRCBpcyAxNiBieXRlcyAoMTI4IGJpdHMpIGxvbmcsIHdoaWNoIGdpdmVzIGFwcHJveGltYXRlbHkgMy40eDEwXjM4Cit1bmlxdWUgdmFsdWVzICh0aGVyZSBhcmUgYXBwcm94aW1hdGVseSAxMF44MCBlbGVtbnRhcnkgcGFydGljbGVzIGluCit0aGUgdW5pdmVyc2UgYWNjb3JkaW5nIHRvIENhcmwgU2FnYW4ncworLklSIENvc21vcyApLgorVGhlIG5ldyBVVUlEIGNhbiByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgdW5pcXVlIGFtb25nIGFsbCBVVUlEcyBjcmVhdGVkCitvbiB0aGUgbG9jYWwgc3lzdGVtLCBhbmQgYW1vbmcgVVVJRHMgY3JlYXRlZCBvbiBvdGhlciBzeXN0ZW1zIGluIHRoZSBwYXN0CithbmQgaW4gdGhlIGZ1dHVyZS4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBuZXdseSBjcmVhdGVkIFVVSUQgaXMgcmV0dXJuZWQgaW4gdGhlIG1lbW9yeSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5CisuSVIgb3V0IC4KKy5TSCAiQ09ORk9STUlORyBUTyIKK09TRiBEQ0UgMS4xCisuU0ggQVVUSE9SCitUaGVvZG9yZSBZLiBUcydvCisuU0ggQVZBSUxBQklMSVRZCisuVVIgaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8KKy5VRQorLlNIICJTRUUgQUxTTyIKKy5CUiB1dWlkICgzKSwKKy5CUiB1dWlkZ2VuICgxKSwKKy5CUiB1dWlkX2NsZWFyICgzKSwKKy5CUiB1dWlkX2NvbXBhcmUgKDMpLAorLkJSIHV1aWRfY29weSAoMyksCisuQlIgdXVpZF9pc19udWxsICgzKSwKKy5CUiB1dWlkX3BhcnNlICgzKSwKKy5CUiB1dWlkX3RpbWUgKDMpLAorLkJSIHV1aWRfdW5wYXJzZSAoMykKZGlmZiAtLWdpdCBhL2xpYi91dWlkL3V1aWRfaXNfbnVsbC4zLmluIGIvbGliL3V1aWQvdXVpZF9pc19udWxsLjMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0Mjg4ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91dWlkL3V1aWRfaXNfbnVsbC4zLmluCkBAIC0wLDAgKzEsNjIgQEAKKy5cIiBDb3B5cmlnaHQgMTk5OSBBbmRyZWFzIERpbGdlciAoYWRpbGdlckBlbmVsLnVjYWxnYXJ5LmNhKQorLlwiCisuXCIgJUJlZ2luLUhlYWRlciUKKy5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5cIiBhcmUgbWV0OgorLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisuXCIgICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisuXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisuXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy5cIiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKy5cIiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisuXCIgICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorLlwiIAorLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKy5cIiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKy5cIiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisuXCIgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorLlwiIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisuXCIgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisuXCIgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorLlwiIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLlwiIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisuXCIgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKy5cIiBEQU1BR0UuCisuXCIgJUVuZC1IZWFkZXIlCisuXCIgCisuXCIgQ3JlYXRlZCAgV2VkIE1hciAxMCAxNzo0MjoxMiAxOTk5LCBBbmRyZWFzIERpbGdlcgorLlRIIFVVSURfSVNfTlVMTCAzICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCit1dWlkX2lzX251bGwgXC0gY29tcGFyZSB0aGUgdmFsdWUgb2YgdGhlIFVVSUQgdG8gdGhlIE5VTEwgdmFsdWUKKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8dXVpZC91dWlkLmg+Cisuc3AKKy5CSSAiaW50IHV1aWRfaXNfbnVsbCh1dWlkX3QgIiB1dSApOworLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgdXVpZF9pc19udWxsCitmdW5jdGlvbiBjb21wYXJlcyB0aGUgdmFsdWUgb2YgdGhlIHN1cHBsaWVkIFVVSUQgdmFyaWFibGUKKy5JIHV1Cit0byB0aGUgTlVMTCB2YWx1ZS4gIElmIHRoZSB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgTlVMTCBVVUlELCAxIGlzIHJldHVybmVkLAorb3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQuCisuU0ggQVVUSE9SCitUaGVvZG9yZSBZLiBUcydvCisuU0ggQVZBSUxBQklMSVRZCisuVVIgaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8KKy5VRQorLlNIICJTRUUgQUxTTyIKKy5CUiB1dWlkICgzKSwKKy5CUiB1dWlkX2NsZWFyICgzKSwKKy5CUiB1dWlkX2NvbXBhcmUgKDMpLAorLkJSIHV1aWRfY29weSAoMyksCisuQlIgdXVpZF9nZW5lcmF0ZSAoMyksCisuQlIgdXVpZF90aW1lICgzKSwKKy5CUiB1dWlkX3BhcnNlICgzKSwKKy5CUiB1dWlkX3VucGFyc2UgKDMpCmRpZmYgLS1naXQgYS9saWIvdXVpZC91dWlkX3BhcnNlLjMuaW4gYi9saWIvdXVpZC91dWlkX3BhcnNlLjMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg1YWNmYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91dWlkL3V1aWRfcGFyc2UuMy5pbgpAQCAtMCwwICsxLDcxIEBACisuXCIgQ29weXJpZ2h0IDE5OTkgQW5kcmVhcyBEaWxnZXIgKGFkaWxnZXJAZW5lbC51Y2FsZ2FyeS5jYSkKKy5cIgorLlwiICVCZWdpbi1IZWFkZXIlCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisuXCIgYXJlIG1ldDoKKy5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorLlwiICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisuXCIgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisuXCIgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorLlwiICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy5cIiAKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisuXCIgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisuXCIgV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorLlwiIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKy5cIiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorLlwiIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorLlwiIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKy5cIiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy5cIiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorLlwiIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisuXCIgREFNQUdFLgorLlwiICVFbmQtSGVhZGVyJQorLlwiIAorLlwiIENyZWF0ZWQgIFdlZCBNYXIgMTAgMTc6NDI6MTIgMTk5OSwgQW5kcmVhcyBEaWxnZXIKKy5USCBVVUlEX1BBUlNFIDMgIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK3V1aWRfcGFyc2UgXC0gY29udmVydCBhbiBpbnB1dCBVVUlEIHN0cmluZyBpbnRvIGJpbmFyeSByZXByZXNlbnRhdGlvbgorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDx1dWlkL3V1aWQuaD4KKy5zcAorLkJJICJpbnQgdXVpZF9wYXJzZSggY2hhciAqIiBpbiAiLCB1dWlkX3QgIiB1dSApOworLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgdXVpZF9wYXJzZQorZnVuY3Rpb24gY29udmVydHMgdGhlIFVVSUQgc3RyaW5nIGdpdmVuIGJ5CisuSSBpbgoraW50byB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uLiAgVGhlIGlucHV0IFVVSUQgaXMgYSBzdHJpbmcgb2YgdGhlIGZvcm0KKzFiNGUyOGJhXC0yZmExXC0xMWQyXC04ODNmXC1iOWE3NjFiZGUzZmIgKGluCisuQlIgcHJpbnRmICgzKQorZm9ybWF0ICIlMDh4XC0lMDR4XC0lMDR4XC0lMDR4XC0lMDEyeCIsIDM2IGJ5dGVzIHBsdXMgdGhlIHRyYWlsaW5nICdcXDAnKS4KKy5TSCBSRVRVUk4gVkFMVUUKK1Vwb24gc3VjY2Vzc2Z1bGx5IHBhcnNpbmcgdGhlIGlucHV0IHN0cmluZywgMCBpcyByZXR1cm5lZCwgYW5kIHRoZSBVVUlEIGlzCitzdG9yZWQgaW4gdGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkKKy5JUiB1dSAsCitvdGhlcndpc2UgXC0xIGlzIHJldHVybmVkLgorLlNIICJDT05GT1JNSU5HIFRPIgorT1NGIERDRSAxLjEKKy5TSCBBVVRIT1IKK1RoZW9kb3JlIFkuIFRzJ28KKy5TSCBBVkFJTEFCSUxJVFkKKy5VUiBodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8KK2h0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LworLlVFCisuU0ggIlNFRSBBTFNPIgorLkJSIHV1aWQgKDMpLAorLkJSIHV1aWRfY2xlYXIgKDMpLAorLkJSIHV1aWRfY29tcGFyZSAoMyksCisuQlIgdXVpZF9jb3B5ICgzKSwKKy5CUiB1dWlkX2dlbmVyYXRlICgzKSwKKy5CUiB1dWlkX2lzX251bGwgKDMpLAorLkJSIHV1aWRfdGltZSAoMyksCisuQlIgdXVpZF91bnBhcnNlICgzKQpkaWZmIC0tZ2l0IGEvbGliL3V1aWQvdXVpZF90aW1lLjMuaW4gYi9saWIvdXVpZC91dWlkX3RpbWUuMy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTRjNzAwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3V1aWQvdXVpZF90aW1lLjMuaW4KQEAgLTAsMCArMSw3NCBAQAorLlwiIENvcHlyaWdodCAxOTk5IEFuZHJlYXMgRGlsZ2VyIChhZGlsZ2VyQGVuZWwudWNhbGdhcnkuY2EpCisuXCIKKy5cIiAlQmVnaW4tSGVhZGVyJQorLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworLlwiIGFyZSBtZXQ6CisuXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKy5cIiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKy5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLlwiIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorLlwiICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKy5cIiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisuXCIgCisuXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKy5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworLlwiIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorLlwiIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKy5cIiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisuXCIgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKy5cIiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKy5cIiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisuXCIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisuXCIgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKy5cIiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorLlwiIERBTUFHRS4KKy5cIiAlRW5kLUhlYWRlciUKKy5cIiAKKy5cIiBDcmVhdGVkICBXZWQgTWFyIDEwIDE3OjQyOjEyIDE5OTksIEFuZHJlYXMgRGlsZ2VyCisuVEggVVVJRF9USU1FIDMgIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK3V1aWRfdGltZSBcLSBleHRyYWN0IHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBVVUlEIHdhcyBjcmVhdGVkCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPHV1aWQvdXVpZC5oPgorLnNwCisuQkkgInRpbWVfdCB1dWlkX3RpbWUodXVpZF90ICIgdXUgIiwgc3RydWN0IHRpbWV2YWwgKiIgcmV0X3R2ICkKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIHV1aWRfdGltZQorZnVuY3Rpb24gZXh0cmFjdHMgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHN1cHBsaWVkIHRpbWUtYmFzZWQgVVVJRAorLkkgdXUKK3dhcyBjcmVhdGVkLiAgTm90ZSB0aGF0IHRoZSBVVUlEIGNyZWF0aW9uIHRpbWUgaXMgb25seSBlbmNvZGVkIHdpdGhpbiAKK2NlcnRhaW4gdHlwZXMgb2YgVVVJRHMuICBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHJlYXNvbmFibHkgZXhwZWN0IHRvIAorZXh0cmFjdCB0aGUgY3JlYXRpb24gdGltZSBmb3IgVVVJRHMgY3JlYXRlZCB3aXRoIHRoZSAKKy5CUiB1dWlkX2dlbmVyYXRlX3RpbWUgKDMpCitmdW5jdGlvbi4gIEl0IG1heSBvciBtYXkgbm90IHdvcmsgd2l0aCBVVUlEcyBjcmVhdGVkIGJ5IG90aGVyIG1lY2hhbmlzbXMuCisuU0ggIlJFVFVSTiBWQUxVRVMiCitUaGUgdGltZSBhdCB3aGljaCB0aGUgVVVJRCB3YXMgY3JlYXRlZCwgaW4gc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDEsIDE5NzAgR01UCisodGhlIGVwb2NoKSwgaXMgcmV0dXJuZWQgKHNlZQorLkJSIHRpbWUgIigyKSkuIgorVGhlIHRpbWUgYXQgd2hpY2ggdGhlIFVVSUQgd2FzIGNyZWF0ZWQsIGluIHNlY29uZHMgYW5kIG1pY3Jvc2Vjb25kcyBzaW5jZQordGhlIGVwb2NoLCBpcyBhbHNvIHN0b3JlZCBpbiB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieQorLkkgcmV0X3R2Cisoc2VlCisuQlIgZ2V0dGltZW9mZGF5ICIoMikpLiIKKy5TSCBBVVRIT1IKK1RoZW9kb3JlIFkuIFRzJ28KKy5TSCBBVkFJTEFCSUxJVFkKKy5VUiBodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8KK2h0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LworLlVFCisuU0ggIlNFRSBBTFNPIgorLkJSIHV1aWQgKDMpLAorLkJSIHV1aWRfY2xlYXIgKDMpLAorLkJSIHV1aWRfY29tcGFyZSAoMyksCisuQlIgdXVpZF9jb3B5ICgzKSwKKy5CUiB1dWlkX2dlbmVyYXRlICgzKSwKKy5CUiB1dWlkX2lzX251bGwgKDMpLAorLkJSIHV1aWRfcGFyc2UgKDMpLAorLkJSIHV1aWRfdW5wYXJzZSAoMykKZGlmZiAtLWdpdCBhL2xpYi91dWlkL3V1aWRfdGltZS5jIGIvbGliL3V1aWQvdXVpZF90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmZDMzNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91dWlkL3V1aWRfdGltZS5jCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogdXVpZF90aW1lLmMgLS0tIEludGVycHJldCB0aGUgdGltZSBmaWVsZCBmcm9tIGEgdXVpZC4gIFRoaXMgcHJvZ3JhbQorICogCXZpb2xhdGVzIHRoZSBVVUlEIGFic3RyYWN0aW9uIGJhcnJpZXIgYnkgcmVhY2hpbmcgaW50byB0aGUgZ3V0cworICoJb2YgYSBVVUlEIGFuZCBpbnRlcnByZXRpbmcgaXQuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisgKiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWZkZWYgX1dJTjMyCisjZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA1MDAKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZGVmaW5lIFVVSUQgTVlVVUlECisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgInV1aWRQLmgiCisKK3RpbWVfdCB1dWlkX3RpbWUoY29uc3QgdXVpZF90IHV1LCBzdHJ1Y3QgdGltZXZhbCAqcmV0X3R2KQoreworCXN0cnVjdCB0aW1ldmFsCQl0djsKKwlzdHJ1Y3QgdXVpZAkJdXVpZDsKKwl1aW50MzJfdAkJaGlnaDsKKwl1aW50NjRfdAkJY2xvY2tfcmVnOworCisJdXVpZF91bnBhY2sodXUsICZ1dWlkKTsKKworCWhpZ2ggPSB1dWlkLnRpbWVfbWlkIHwgKCh1dWlkLnRpbWVfaGlfYW5kX3ZlcnNpb24gJiAweEZGRikgPDwgMTYpOworCWNsb2NrX3JlZyA9IHV1aWQudGltZV9sb3cgfCAoKHVpbnQ2NF90KSBoaWdoIDw8IDMyKTsKKworCWNsb2NrX3JlZyAtPSAoKCh1aW50NjRfdCkgMHgwMUIyMUREMikgPDwgMzIpICsgMHgxMzgxNDAwMDsKKwl0di50dl9zZWMgPSBjbG9ja19yZWcgLyAxMDAwMDAwMDsKKwl0di50dl91c2VjID0gKGNsb2NrX3JlZyAlIDEwMDAwMDAwKSAvIDEwOworCisJaWYgKHJldF90dikKKwkJKnJldF90diA9IHR2OworCisJcmV0dXJuIHR2LnR2X3NlYzsKK30KKworaW50IHV1aWRfdHlwZShjb25zdCB1dWlkX3QgdXUpCit7CisJc3RydWN0IHV1aWQJCXV1aWQ7CisKKwl1dWlkX3VucGFjayh1dSwgJnV1aWQpOworCXJldHVybiAoKHV1aWQudGltZV9oaV9hbmRfdmVyc2lvbiA+PiAxMikgJiAweEYpOworfQorCitpbnQgdXVpZF92YXJpYW50KGNvbnN0IHV1aWRfdCB1dSkKK3sKKwlzdHJ1Y3QgdXVpZAkJdXVpZDsKKwlpbnQJCQl2YXI7CisKKwl1dWlkX3VucGFjayh1dSwgJnV1aWQpOworCXZhciA9IHV1aWQuY2xvY2tfc2VxOworCisJaWYgKCh2YXIgJiAweDgwMDApID09IDApCisJCXJldHVybiBVVUlEX1ZBUklBTlRfTkNTOworCWlmICgodmFyICYgMHg0MDAwKSA9PSAwKQorCQlyZXR1cm4gVVVJRF9WQVJJQU5UX0RDRTsKKwlpZiAoKHZhciAmIDB4MjAwMCkgPT0gMCkKKwkJcmV0dXJuIFVVSURfVkFSSUFOVF9NSUNST1NPRlQ7CisJcmV0dXJuIFVVSURfVkFSSUFOVF9PVEhFUjsKK30KKworI2lmZGVmIERFQlVHCitzdGF0aWMgY29uc3QgY2hhciAqdmFyaWFudF9zdHJpbmcoaW50IHZhcmlhbnQpCit7CisJc3dpdGNoICh2YXJpYW50KSB7CisJY2FzZSBVVUlEX1ZBUklBTlRfTkNTOgorCQlyZXR1cm4gIk5DUyI7CisJY2FzZSBVVUlEX1ZBUklBTlRfRENFOgorCQlyZXR1cm4gIkRDRSI7CisJY2FzZSBVVUlEX1ZBUklBTlRfTUlDUk9TT0ZUOgorCQlyZXR1cm4gIk1pY3Jvc29mdCI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJPdGhlciI7CisJfQorfQorCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJdXVpZF90CQlidWY7CisJdGltZV90CQl0aW1lX3JlZzsKKwlzdHJ1Y3QgdGltZXZhbAl0djsKKwlpbnQJCXR5cGUsIHZhcmlhbnQ7CisKKwlpZiAoYXJnYyAhPSAyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIHV1aWRcbiIsIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKwlpZiAodXVpZF9wYXJzZShhcmd2WzFdLCBidWYpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBVVUlEOiAlc1xuIiwgYXJndlsxXSk7CisJCWV4aXQoMSk7CisJfQorCXZhcmlhbnQgPSB1dWlkX3ZhcmlhbnQoYnVmKTsKKwl0eXBlID0gdXVpZF90eXBlKGJ1Zik7CisJdGltZV9yZWcgPSB1dWlkX3RpbWUoYnVmLCAmdHYpOworCisJcHJpbnRmKCJVVUlEIHZhcmlhbnQgaXMgJWQgKCVzKVxuIiwgdmFyaWFudCwgdmFyaWFudF9zdHJpbmcodmFyaWFudCkpOworCWlmICh2YXJpYW50ICE9IFVVSURfVkFSSUFOVF9EQ0UpIHsKKwkJcHJpbnRmKCJXYXJuaW5nOiBUaGlzIHByb2dyYW0gb25seSBrbm93cyBob3cgdG8gaW50ZXJwcmV0ICIKKwkJICAgICAgICJEQ0UgVVVJRHMuXG5cdFRoZSByZXN0IG9mIHRoZSBvdXRwdXQgaXMgbGlrZWx5ICIKKwkJICAgICAgICJ0byBiZSBpbmNvcnJlY3QhIVxuIik7CisJfQorCXByaW50ZigiVVVJRCB0eXBlIGlzICVkIiwgdHlwZSk7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSAxOgorCQlwcmludGYoIiAodGltZSBiYXNlZClcbiIpOworCQlicmVhazsKKwljYXNlIDI6CisJCXByaW50ZigiIChEQ0UpXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwcmludGYoIiAobmFtZS1iYXNlZClcbiIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXByaW50ZigiIChyYW5kb20pXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJcbiIpOworCX0KKwlpZiAodHlwZSAhPSAxKSB7CisJCXByaW50ZigiV2FybmluZzogbm90IGEgdGltZS1iYXNlZCBVVUlELCBzbyBVVUlEIHRpbWUgIgorCQkgICAgICAgImRlY29kaW5nIHdpbGwgbGlrZWx5IG5vdCB3b3JrIVxuIik7CisJfQorCXByaW50ZigiVVVJRCB0aW1lIGlzOiAoJWxkLCAlbGQpOiAlc1xuIiwgdHYudHZfc2VjLCAobG9uZyl0di50dl91c2VjLAorCSAgICAgICBjdGltZSgmdGltZV9yZWcpKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvdXVpZC91dWlkX3R5cGVzLmguaW4gYi9saWIvdXVpZC91dWlkX3R5cGVzLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIxZmY0ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91dWlkL3V1aWRfdHlwZXMuaC5pbgpAQCAtMCwwICsxLDUwIEBACisvKiAKKyAqIElmIGxpbnV4L3R5cGVzLmggaXMgYWxyZWFkeSBiZWVuIGluY2x1ZGVkLCBhc3N1bWUgaXQgaGFzIGRlZmluZWQKKyAqIGV2ZXJ5dGhpbmcgd2UgbmVlZC4gIChjcm9zcyBmaW5nZXJzKSAgT3RoZXIgaGVhZGVyIGZpbGVzIG1heSBoYXZlIAorICogYWxzbyBkZWZpbmVkIHRoZSB0eXBlcyB0aGF0IHdlIG5lZWQuCisgKi8KKyNpZiAoIWRlZmluZWQoX1NURElOVF9IKSAmJiAhZGVmaW5lZChfVVVJRF9TVERJTlRfSCkpCisjZGVmaW5lIF9VVUlEX1NURElOVF9ICisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90OwordHlwZWRlZiBzaWduZWQgY2hhciBpbnQ4X3Q7CisKKyNpZiAoQFNJWkVPRl9JTlRAID09IDgpCit0eXBlZGVmIGludAkJaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXVpbnQ2NF90OworI2VsaWYgKEBTSVpFT0ZfTE9OR0AgPT0gOCkKK3R5cGVkZWYgbG9uZwkJaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwl1aW50NjRfdDsKKyNlbGlmIChAU0laRU9GX0xPTkdfTE9OR0AgPT0gOCkKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQordHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyAJaW50NjRfdDsKKyNlbHNlCit0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgCWludDY0X3Q7CisjZW5kaWYKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nCXVpbnQ2NF90OworI2VuZGlmCisKKyNpZiAoQFNJWkVPRl9JTlRAID09IDIpCit0eXBlZGVmCWludAkJaW50MTZfdDsKK3R5cGVkZWYJdW5zaWduZWQgaW50CXVpbnQxNl90OworI2VsaWYgKEBTSVpFT0ZfU0hPUlRAID09IDIpCit0eXBlZGVmCXNob3J0CQlpbnQxNl90OwordHlwZWRlZgl1bnNpZ25lZCBzaG9ydAl1aW50MTZfdDsKKyNlbHNlCisgID89PWVycm9yOiB1bmRlZmluZWQgMTYgYml0IHR5cGUKKyNlbmRpZgorCisjaWYgKEBTSVpFT0ZfSU5UQCA9PSA0KQordHlwZWRlZglpbnQJCWludDMyX3Q7Cit0eXBlZGVmCXVuc2lnbmVkIGludAl1aW50MzJfdDsKKyNlbGlmIChAU0laRU9GX0xPTkdAID09IDQpCit0eXBlZGVmCWxvbmcJCWludDMyX3Q7Cit0eXBlZGVmCXVuc2lnbmVkIGxvbmcJdWludDMyX3Q7CisjZWxpZiAoQFNJWkVPRl9TSE9SVEAgPT0gNCkKK3R5cGVkZWYJc2hvcnQJCWludDMyX3Q7Cit0eXBlZGVmCXVuc2lnbmVkIHNob3J0CXVpbnQzMl90OworI2Vsc2UKKyA/PT0gZXJyb3I6IHVuZGVmaW5lZCAzMiBiaXQgdHlwZQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3V1aWQvdXVpZF91bnBhcnNlLjMuaW4gYi9saWIvdXVpZC91dWlkX3VucGFyc2UuMy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTgzODQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3V1aWQvdXVpZF91bnBhcnNlLjMuaW4KQEAgLTAsMCArMSw3OSBAQAorLlwiIENvcHlyaWdodCAxOTk5IEFuZHJlYXMgRGlsZ2VyIChhZGlsZ2VyQGVuZWwudWNhbGdhcnkuY2EpCisuXCIKKy5cIiAlQmVnaW4tSGVhZGVyJQorLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworLlwiIGFyZSBtZXQ6CisuXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKy5cIiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKy5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLlwiIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorLlwiICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKy5cIiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisuXCIgCisuXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKy5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworLlwiIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorLlwiIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKy5cIiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisuXCIgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKy5cIiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKy5cIiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisuXCIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisuXCIgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKy5cIiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorLlwiIERBTUFHRS4KKy5cIiAlRW5kLUhlYWRlciUKKy5cIiAKKy5cIiBDcmVhdGVkICBXZWQgTWFyIDEwIDE3OjQyOjEyIDE5OTksIEFuZHJlYXMgRGlsZ2VyCisuVEggVVVJRF9VTlBBUlNFIDMgIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK3V1aWRfdW5wYXJzZSBcLSBjb252ZXJ0IGFuIFVVSUQgZnJvbSBiaW5hcnkgcmVwcmVzZW50YXRpb24gdG8gYSBzdHJpbmcKKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8dXVpZC91dWlkLmg+Cisuc3AKKy5CSSAidm9pZCB1dWlkX3VucGFyc2UodXVpZF90ICIgdXUgIiwgY2hhciAqIiBvdXQgKTsKKy5CSSAidm9pZCB1dWlkX3VucGFyc2VfdXBwZXIodXVpZF90ICIgdXUgIiwgY2hhciAqIiBvdXQgKTsKKy5CSSAidm9pZCB1dWlkX3VucGFyc2VfbG93ZXIodXVpZF90ICIgdXUgIiwgY2hhciAqIiBvdXQgKTsKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIHV1aWRfdW5wYXJzZQorZnVuY3Rpb24gY29udmVydHMgdGhlIHN1cHBsaWVkIFVVSUQKKy5JIHV1Citmcm9tIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gaW50byBhIDM2XC1ieXRlIHN0cmluZyAocGx1cyB0YWlsaW5nICdcXDAnKQorb2YgdGhlIGZvcm0gMWI0ZTI4YmFcLTJmYTFcLTExZDJcLTg4M2ZcLTAwMTZkM2NjYTQyNyBhbmQgc3RvcmVzIHRoaXMgCit2YWx1ZSBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkIHRvIGJ5CisuSVIgb3V0IC4gIAorVGhlIGNhc2Ugb2YgdGhlIGhleCBkaWdpdHMgcmV0dXJuZWQgYnkgCisuQiB1dWlkX3VucGFyc2UKK21heSBiZSB1cHBlciBvciBsb3dlciBjYXNlLCBhbmQgaXMKK2RlcGVuZGVudCBvbiB0aGUgc3lzdGVtLWRlcGVuZGVudCBsb2NhbCBkZWZhdWx0LiAgCisuUFAKK0lmIHRoZSBjYXNlIG9mIHRoZQoraGV4IGRpZ2l0cyBpcyBpbXBvcnRhbnQgdGhlbiB0aGUgZnVuY3Rpb25zCisuQiB1dWlkX3VucGFyc2VfdXBwZXIKK2FuZCAKKy5CIHV1aWRfdW5wYXJzZV9sb3dlcgorbWF5IGJlIHVzZWQuCisuU0ggIkNPTkZPUk1JTkcgVE8iCitPU0YgRENFIDEuMQorLlNIIEFVVEhPUgorVGhlb2RvcmUgWS4gVHMnbworLlNIIEFWQUlMQUJJTElUWQorLlVSIGh0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LworaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCisuVUUKKy5TSCAiU0VFIEFMU08iCisuQlIgdXVpZCAoMyksCisuQlIgdXVpZF9jbGVhciAoMyksCisuQlIgdXVpZF9jb21wYXJlICgzKSwKKy5CUiB1dWlkX2NvcHkgKDMpLAorLkJSIHV1aWRfZ2VuZXJhdGUgKDMpLAorLkJSIHV1aWRfdGltZSAoMyksCisuQlIgdXVpZF9pc19udWxsICgzKSwKKy5CUiB1dWlkX3BhcnNlICgzKQpkaWZmIC0tZ2l0IGEvbGliL3V1aWQvdXVpZGQuaCBiL2xpYi91dWlkL3V1aWRkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcxZjRiNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91dWlkL3V1aWRkLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIERlZmluaXRpb25zIHVzZWQgYnkgdGhlIHV1aWRkIGRhZW1vbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKyAqICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorICogV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpZm5kZWYgX1VVSURfVVVJRERfSAorI2RlZmluZSBfVVVJRF9VVUlERF9ICisKKyNkZWZpbmUgVVVJRERfRElSCQkiL3Zhci9saWIvbGlidXVpZCIKKyNkZWZpbmUgVVVJRERfU09DS0VUX1BBVEgJVVVJRERfRElSICIvcmVxdWVzdCIKKyNkZWZpbmUgVVVJRERfUElERklMRV9QQVRICVVVSUREX0RJUiAiL3V1aWRkLnBpZCIKKyNkZWZpbmUgVVVJRERfUEFUSAkJIi91c3Ivc2Jpbi91dWlkZCIKKworI2RlZmluZSBVVUlERF9PUF9HRVRQSUQJCQkwCisjZGVmaW5lIFVVSUREX09QX0dFVF9NQVhPUAkJMQorI2RlZmluZSBVVUlERF9PUF9USU1FX1VVSUQJCTIKKyNkZWZpbmUgVVVJRERfT1BfUkFORE9NX1VVSUQJCTMKKyNkZWZpbmUgVVVJRERfT1BfQlVMS19USU1FX1VVSUQJCTQKKyNkZWZpbmUgVVVJRERfT1BfQlVMS19SQU5ET01fVVVJRAk1CisjZGVmaW5lIFVVSUREX01BWF9PUAkJCVVVSUREX09QX0JVTEtfUkFORE9NX1VVSUQKKworZXh0ZXJuIHZvaWQgdXVpZF9fZ2VuZXJhdGVfdGltZSh1dWlkX3Qgb3V0LCBpbnQgKm51bSk7CitleHRlcm4gdm9pZCB1dWlkX19nZW5lcmF0ZV9yYW5kb20odXVpZF90IG91dCwgaW50ICpudW0pOworCisjZW5kaWYgLyogX1VVSURfVVVJRF9IICovCmRpZmYgLS1naXQgYS9taXNjL01ha2VmaWxlLmluIGIvbWlzYy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjAzZmI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDczOSBAQAorIworIyBTdGFuZGFyZCBlMmZzcHJvZ3MgcHJvbG9ndWUuLi4uCisjCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACit0b3BfYnVpbGRkaXIgPSAuLgorbXlfZGlyID0gbWlzYworSU5TVEFMTCA9IEBJTlNUQUxMQAorCitATUNPTkZJR0AKKworQERFRlJBR19DTVRAQExJTlVYX0NNVEBFNERFRlJBR19QUk9HPSBlNGRlZnJhZworQERFRlJBR19DTVRAQExJTlVYX0NNVEBFNERFRlJBR19NQU49IGU0ZGVmcmFnLjgKKworQElNQUdFUl9DTVRARTJJTUFHRV9QUk9HPSBlMmltYWdlCitASU1BR0VSX0NNVEBFMklNQUdFX01BTj0gZTJpbWFnZS44CisKK0BVVUlERF9DTVRAVVVJRERfUFJPRz0gdXVpZGQKK0BVVUlERF9DTVRAVVVJRERfTUFOPSB1dWlkZC44CitAVVVJRERfQ01UQFVVSUREX1BST0ZJTEVEPSB1dWlkZC5wcm9maWxlZAorCitAQkxLSURfQ01UQEJMS0lEX1BST0c9IGJsa2lkCitAQkxLSURfQ01UQEJMS0lEX01BTj0gYmxraWQuOAorCitAQkxLSURfQ01UQEZJTkRGU19MSU5LPSBmaW5kZnMKK0BCTEtJRF9DTVRARklOREZTX01BTj0gZmluZGZzLjgKKworU1BST0dTPQkJbWtlMmZzIGJhZGJsb2NrcyB0dW5lMmZzIGR1bXBlMmZzICQoQkxLSURfUFJPRykgbG9nc2F2ZSBcCisJCQkkKEUySU1BR0VfUFJPRykgQEZTQ0tfUFJPR0AgZTJ1bmRvCitVU1BST0dTPQlta2xvc3QrZm91bmQgZmlsZWZyYWcgZTJmcmVlZnJhZyAkKFVVSUREX1BST0cpICQoRTRERUZSQUdfUFJPRykKK1NNQU5QQUdFUz0JdHVuZTJmcy44IG1rbG9zdCtmb3VuZC44IG1rZTJmcy44IGR1bXBlMmZzLjggYmFkYmxvY2tzLjggXAorCQkJZTJsYWJlbC44ICQoRklOREZTX01BTikgJChCTEtJRF9NQU4pICQoRTJJTUFHRV9NQU4pIFwKKwkJCWxvZ3NhdmUuOCBmaWxlZnJhZy44IGUyZnJlZWZyYWcuOCBlMnVuZG8uOCBcCisJCQkkKFVVSUREX01BTikgJChFNERFRlJBR19NQU4pIEBGU0NLX01BTkAKK0ZNQU5QQUdFUz0JbWtlMmZzLmNvbmYuNSBleHQ0LjUKKworVVBST0dTPQkJY2hhdHRyIGxzYXR0ciBAVVVJRF9DTVRAIHV1aWRnZW4KK1VNQU5QQUdFUz0JY2hhdHRyLjEgbHNhdHRyLjEgQFVVSURfQ01UQCB1dWlkZ2VuLjEKKworTFBST0dTPQkJQEUySU5JVFJEX1BST0dACisKK1RVTkUyRlNfT0JKUz0JdHVuZTJmcy5vIHV0aWwubworTUtMUEZfT0JKUz0JbWtsb3N0K2ZvdW5kLm8KK01LRTJGU19PQkpTPQlta2UyZnMubyB1dGlsLm8gcHJvZmlsZS5vIHByb2ZfZXJyLm8gZGVmYXVsdF9wcm9maWxlLm8gXAorCQkJbWtfaHVnZWZpbGVzLm8KK0NIQVRUUl9PQkpTPQljaGF0dHIubworTFNBVFRSX09CSlM9CWxzYXR0ci5vCitVVUlER0VOX09CSlM9CXV1aWRnZW4ubworVVVJRERfT0JKUz0JdXVpZGQubworRFVNUEUyRlNfT0JKUz0JZHVtcGUyZnMubworQkFEQkxPQ0tTX09CSlM9CWJhZGJsb2Nrcy5vCitFMklNQUdFX09CSlM9CWUyaW1hZ2UubworRlNDS19PQkpTPQlmc2NrLm8gYmFzZV9kZXZpY2UubyBpc21vdW50ZWQubworQkxLSURfT0JKUz0JYmxraWQubworRklMRUZSQUdfT0JKUz0JZmlsZWZyYWcubworRTJVTkRPX09CSlM9ICBlMnVuZG8ubworRTRERUZSQUdfT0JKUz0JZTRkZWZyYWcubworRTJGUkVFRlJBR19PQkpTPSBlMmZyZWVmcmFnLm8KKworUFJPRklMRURfVFVORTJGU19PQkpTPQlwcm9maWxlZC90dW5lMmZzLm8gcHJvZmlsZWQvdXRpbC5vCitQUk9GSUxFRF9NS0xQRl9PQkpTPQlwcm9maWxlZC9ta2xvc3QrZm91bmQubworUFJPRklMRURfTUtFMkZTX09CSlM9CXByb2ZpbGVkL21rZTJmcy5vIHByb2ZpbGVkL3V0aWwubyBwcm9maWxlZC9wcm9maWxlLm8gXAorCQkJcHJvZmlsZWQvcHJvZl9lcnIubyBwcm9maWxlZC9kZWZhdWx0X3Byb2ZpbGUubyBcCisJCQlwcm9maWxlZC9ta19odWdlZmlsZXMubworUFJPRklMRURfQ0hBVFRSX09CSlM9CXByb2ZpbGVkL2NoYXR0ci5vCitQUk9GSUxFRF9MU0FUVFJfT0JKUz0JcHJvZmlsZWQvbHNhdHRyLm8KK1BST0ZJTEVEX1VVSURHRU5fT0JKUz0JcHJvZmlsZWQvdXVpZGdlbi5vCitQUk9GSUxFRF9VVUlERF9PQkpTPQlwcm9maWxlZC91dWlkZC5vCitQUk9GSUxFRF9EVU1QRTJGU19PQkpTPQlwcm9maWxlZC9kdW1wZTJmcy5vCitQUk9GSUxFRF9CQURCTE9DS1NfT0JKUz0JcHJvZmlsZWQvYmFkYmxvY2tzLm8KK1BST0ZJTEVEX0UySU1BR0VfT0JKUz0JcHJvZmlsZWQvZTJpbWFnZS5vCitQUk9GSUxFRF9GU0NLX09CSlM9CXByb2ZpbGVkL2ZzY2subyBwcm9maWxlZC9iYXNlX2RldmljZS5vIFwKKwkJCXByb2ZpbGVkL2lzbW91bnRlZC5vCitQUk9GSUxFRF9CTEtJRF9PQkpTPQlwcm9maWxlZC9ibGtpZC5vCitQUk9GSUxFRF9GSUxFRlJBR19PQkpTPQlwcm9maWxlZC9maWxlZnJhZy5vCitQUk9GSUxFRF9FMkZSRUVGUkFHX09CSlM9IHByb2ZpbGVkL2UyZnJlZWZyYWcubworUFJPRklMRURfRTJVTkRPX09CSlM9CXByb2ZpbGVkL2UydW5kby5vCitQUk9GSUxFRF9FNERFRlJBR19PQkpTPQlwcm9maWxlZC9lNGRlZnJhZy5vCisKK1NSQ1M9CSQoc3JjZGlyKS90dW5lMmZzLmMgJChzcmNkaXIpL21rbG9zdCtmb3VuZC5jICQoc3JjZGlyKS9ta2UyZnMuYyAkKHNyY2RpcikvbWtfaHVnZWZpbGVzLmMgXAorCQkkKHNyY2RpcikvY2hhdHRyLmMgJChzcmNkaXIpL2xzYXR0ci5jICQoc3JjZGlyKS9kdW1wZTJmcy5jIFwKKwkJJChzcmNkaXIpL2JhZGJsb2Nrcy5jICQoc3JjZGlyKS9mc2NrLmMgJChzcmNkaXIpL3V0aWwuYyBcCisJCSQoc3JjZGlyKS91dWlkZ2VuLmMgJChzcmNkaXIpL2Jsa2lkLmMgJChzcmNkaXIpL2xvZ3NhdmUuYyBcCisJCSQoc3JjZGlyKS9maWxlZnJhZy5jICQoc3JjZGlyKS9iYXNlX2RldmljZS5jIFwKKwkJJChzcmNkaXIpL2lzbW91bnRlZC5jICQoc3JjZGlyKS8uLi9lMmZzY2svcHJvZmlsZS5jIFwKKwkJJChzcmNkaXIpL2UydW5kby5jICQoc3JjZGlyKS9lMmZyZWVmcmFnLmMKKworTElCUz0gJChMSUJFWFQyRlMpICQoTElCQ09NX0VSUikKK0RFUExJQlM9ICQoTElCRVhUMkZTKSAkKERFUExJQkNPTV9FUlIpCitQUk9GSUxFRF9MSUJTPSAkKFBST0ZJTEVEX0xJQkVYVDJGUykgJChQUk9GSUxFRF9MSUJDT01fRVJSKQorUFJPRklMRURfREVQTElCUz0gJChQUk9GSUxFRF9MSUJFWFQyRlMpICQoREVQUFJPRklMRURfTElCQ09NX0VSUikKKworU1RBVElDX0xJQlM9ICQoU1RBVElDX0xJQkVYVDJGUykgJChTVEFUSUNfTElCQ09NX0VSUikKK1NUQVRJQ19ERVBMSUJTPSAkKFNUQVRJQ19MSUJFWFQyRlMpICQoREVQU1RBVElDX0xJQkNPTV9FUlIpIAorCitMSUJTX0UyUD0gJChMSUJFMlApICQoTElCQ09NX0VSUikgCitERVBMSUJTX0UyUD0gJChMSUJFMlApICQoREVQTElCQ09NX0VSUikgCisKK0NPTVBJTEVfRVQ9JCh0b3BfYnVpbGRkaXIpL2xpYi9ldC9jb21waWxlX2V0IC0tYnVpbGQtdHJlZQorCisuYy5vOgorCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpIC1jICQoQUxMX0NGTEFHUykgJDwgLW8gJEAKKwkkKFEpICQoQ0hFQ0tfQ01EKSAkKEFMTF9DRkxBR1MpICQ8CitAUFJPRklMRV9DTVRACSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtZyAtcGcgLW8gcHJvZmlsZWQvJCoubyAtYyAkPAorCithbGw6OiBwcm9maWxlZCAkKFNQUk9HUykgJChVUFJPR1MpICQoVVNQUk9HUykgJChTTUFOUEFHRVMpICQoVU1BTlBBR0VTKSBcCisJJChGTUFOUEFHRVMpICQoTFBST0dTKSAkKEU0REVGUkFHX1BST0cpCisKK0BQUk9GSUxFX0NNVEBhbGw6OiB0dW5lMmZzLnByb2ZpbGVkIGJsa2lkLnByb2ZpbGVkIGUyaW1hZ2UucHJvZmlsZWQgXAorCWUydW5kby5wcm9maWxlZCBta2UyZnMucHJvZmlsZWQgZHVtcGUyZnMucHJvZmlsZWQgZnNjay5wcm9maWxlZCBcCisJbG9nc2F2ZS5wcm9maWxlZCBmaWxlZnJhZy5wcm9maWxlZCB1dWlkZ2VuLnByb2ZpbGVkICQoVVVJRERfUFJPRklMRUQpIFwKKwllMmltYWdlLnByb2ZpbGVkIGU0ZGVmcmFnLnByb2ZpbGVkIGUyZnJlZWZyYWcucHJvZmlsZWQKKworcHJvZmlsZWQ6CitAUFJPRklMRV9DTVRACSQoRSkgIglNS0RJUiAkQCIKK0BQUk9GSUxFX0NNVEAJJChRKSBta2RpciBwcm9maWxlZAorCitwcm9mX2Vyci5jIHByb2ZfZXJyLmg6ICQoc3JjZGlyKS8uLi9lMmZzY2svcHJvZl9lcnIuZXQKKwkkKEUpICIJQ09NUElMRV9FVCBwcm9mX2Vyci5ldCIKKwkkKFEpICQoQ09NUElMRV9FVCkgJChzcmNkaXIpLy4uL2UyZnNjay9wcm9mX2Vyci5ldAorCitwcm9maWxlLmg6ICQodG9wX3NyY2RpcikvZTJmc2NrL3Byb2ZpbGUuaAorCSQoRSkgIglDUCAkPCIKKwkkKFEpIGNwICQ8ICRACisKK21rZTJmcy5jb25mOiAkKHNyY2RpcikvbWtlMmZzLmNvbmYuaW4KKwlpZiB0ZXN0IC1mICQoc3JjZGlyKS9ta2UyZnMuY29uZi5jdXN0b20uaW4gOyB0aGVuIFwKKwkJY3AgJChzcmNkaXIpL21rZTJmcy5jb25mLmN1c3RvbS5pbiBta2UyZnMuY29uZjsgXAorCWVsc2UgXAorCQljcCAkKHNyY2RpcikvbWtlMmZzLmNvbmYuaW4gbWtlMmZzLmNvbmY7IFwKKwlmaQorCitkZWZhdWx0X3Byb2ZpbGUuYzogbWtlMmZzLmNvbmYgJChzcmNkaXIpL3Byb2ZpbGUtdG8tYy5hd2sKKwkkKEUpICIJUFJPRklMRV9UT19DIG1rZTJmcy5jb25mIgorCSQoUSkgJChBV0spIC1mICQoc3JjZGlyKS9wcm9maWxlLXRvLWMuYXdrIDwgbWtlMmZzLmNvbmYgXAorCQk+ICBkZWZhdWx0X3Byb2ZpbGUuYworcHJvZmlsZS5vOgorCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpIC1jICQoQUxMX0NGTEFHUykgJChzcmNkaXIpLy4uL2UyZnNjay9wcm9maWxlLmMgLW8gJEAKK0BQUk9GSUxFX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1nIC1wZyAtbyBwcm9maWxlZC9wcm9maWxlLm8gLWMgXAorQFBST0ZJTEVfQ01UQAkkKHNyY2RpcikvLi4vZTJmc2NrL3Byb2ZpbGUuYworCitmaW5kc3VwZXI6IGZpbmRzdXBlci5vCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gZmluZHN1cGVyIGZpbmRzdXBlci5vICQoTElCUykgJChTWVNMSUJTKQorCitwYXJ0aW5mbzogcGFydGluZm8ubworCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIHBhcnRpbmZvIHBhcnRpbmZvLm8KKworZTJpbml0cmRfaGVscGVyOiBlMmluaXRyZF9oZWxwZXIubyAkKERFUExJQlMpICQoREVQTElCQkxLSUQpICQoTElCRVhUMkZTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIGUyaW5pdHJkX2hlbHBlciBlMmluaXRyZF9oZWxwZXIubyAkKExJQlMpIFwKKwkJJChMSUJCTEtJRCkgJChMSUJFWFQyRlMpICQoTElCSU5UTCkgJChTWVNMSUJTKQorCit0dW5lMmZzOiAkKFRVTkUyRlNfT0JKUykgJChERVBMSUJTKSAkKERFUExJQlNfRTJQKSAkKERFUExJQkJMS0lEKSBcCisJCSQoREVQTElCVVVJRCkgJChERVBMSUJRVU9UQSkgJChMSUJFWFQyRlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gdHVuZTJmcyAkKFRVTkUyRlNfT0JKUykgJChMSUJTKSBcCisJCSQoTElCQkxLSUQpICQoTElCVVVJRCkgJChMSUJRVU9UQSkgJChMSUJFWFQyRlMpICQoTElCU19FMlApIFwKKwkJJChMSUJJTlRMKSAkKFNZU0xJQlMpCisKK3R1bmUyZnMuc3RhdGljOiAkKFRVTkUyRlNfT0JKUykgJChTVEFUSUNfREVQTElCUykgJChTVEFUSUNfTElCRTJQKSAkKERFUFNUQVRJQ19MSUJCTEtJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKExERkxBR1NfU1RBVElDKSAtbyB0dW5lMmZzLnN0YXRpYyAkKFRVTkUyRlNfT0JKUykgXAorCQkkKFNUQVRJQ19MSUJTKSAkKFNUQVRJQ19MSUJCTEtJRCkgJChTVEFUSUNfTElCVVVJRCkgXAorCQkkKFNUQVRJQ19MSUJRVU9UQSkgJChTVEFUSUNfTElCRTJQKSAkKExJQklOVEwpICQoU1lTTElCUykKKwordHVuZTJmcy5wcm9maWxlZDogJChUVU5FMkZTX09CSlMpICQoUFJPRklMRURfREVQTElCUykgXAorCQkkKFBST0ZJTEVEX0UyUCkgJChERVBQUk9GSUxFRF9MSUJCTEtJRCkgJChERVBQUk9GSUxFRF9MSUJVVUlEKSBcCisJCSQoREVQUFJPRklMRURfTElCUVVPVEEpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLWcgLXBnIC1vIHR1bmUyZnMucHJvZmlsZWQgXAorCQkkKFBST0ZJTEVEX1RVTkUyRlNfT0JKUykgJChQUk9GSUxFRF9MSUJCTEtJRCkgXAorCQkkKFBST0ZJTEVEX0xJQlVVSUQpICQoUFJPRklMRURfTElCUVVPVEEpICQoUFJPRklMRURfTElCRTJQKSBcCisJCSQoTElCSU5UTCkgJChQUk9GSUxFRF9MSUJTKSAkKFNZU0xJQlMpCisKK2Jsa2lkOiAkKEJMS0lEX09CSlMpICQoREVQTElCQkxLSUQpICQoTElCRVhUMkZTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIGJsa2lkICQoQkxLSURfT0JKUykgJChMSUJCTEtJRCkgJChMSUJJTlRMKSBcCisJCSQoTElCRVhUMkZTKSAkKFNZU0xJQlMpCisKK2Jsa2lkLnN0YXRpYzogJChCTEtJRF9PQkpTKSAkKFNUQVRJQ19ERVBMSUJTKSAkKERFUFNUQVRJQ19MSUJCTEtJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyBibGtpZC5zdGF0aWMgJChCTEtJRF9PQkpTKSAkKFNUQVRJQ19MSUJTKSBcCisJCSQoU1RBVElDX0xJQkJMS0lEKSAkKExJQklOVEwpICQoU1lTTElCUykKKworYmxraWQucHJvZmlsZWQ6ICQoQkxLSURfT0JKUykgJChERVBQUk9GSUxFRF9MSUJCTEtJRCkgXAorCQkkKFBST0ZJTEVEX0xJQkVYVDJGUykKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtZyAtcGcgLW8gYmxraWQucHJvZmlsZWQgJChQUk9GSUxFRF9CTEtJRF9PQkpTKSBcCisJCSQoUFJPRklMRURfTElCQkxLSUQpICQoTElCSU5UTCkgJChQUk9GSUxFRF9MSUJFWFQyRlMpICQoU1lTTElCUykKKworZTJpbWFnZTogJChFMklNQUdFX09CSlMpICQoREVQTElCUykKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyBlMmltYWdlICQoRTJJTUFHRV9PQkpTKSAkKExJQlMpIFwKKwkJJChMSUJJTlRMKSAkKFNZU0xJQlMpCisKK2UyaW1hZ2UucHJvZmlsZWQ6ICQoRTJJTUFHRV9PQkpTKSAkKFBST0ZJTEVEX0RFUExJQlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLWcgLXBnIC1vIGUyaW1hZ2UucHJvZmlsZWQgXAorCQkkKFBST0ZJTEVEX0UySU1BR0VfT0JKUykgJChQUk9GSUxFRF9MSUJTKSAkKExJQklOVEwpICQoU1lTTElCUykKKworZTJ1bmRvOiAkKEUyVU5ET19PQkpTKSAkKERFUExJQlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gZTJ1bmRvICQoRTJVTkRPX09CSlMpICQoTElCUykgXAorCQkkKExJQklOVEwpICQoU1lTTElCUykKKworZTJ1bmRvLnByb2ZpbGVkOiAkKEUyVU5ET19PQkpTKSAkKFBST0ZJTEVEX0RFUExJQlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLWcgLXBnIC1vIGUydW5kby5wcm9maWxlZCBcCisJCSQoUFJPRklMRURfRTJVTkRPX09CSlMpICQoUFJPRklMRURfTElCUykgJChMSUJJTlRMKSAkKFNZU0xJQlMpCisKK2U0ZGVmcmFnOiAkKEU0REVGUkFHX09CSlMpICQoREVQTElCUykKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyBlNGRlZnJhZyAkKEU0REVGUkFHX09CSlMpICQoTElCUykgXAorCQkkKFNZU0xJQlMpCisKK2U0ZGVmcmFnLnByb2ZpbGVkOiAkKEU0REVGUkFHX09CSlMpICQoUFJPRklMRURfREVQTElCUykKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtZyAtcGcgLW8gZTRkZWZyYWcucHJvZmlsZWQgXAorCQkkKFBST0ZJTEVEX0U0REVGUkFHX09CSlMpICQoUFJPRklMRURfTElCUykgJChTWVNMSUJTKQorCitiYXNlX2RldmljZTogYmFzZV9kZXZpY2UuYworCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgJChBTExfTERGTEFHUykgJChzcmNkaXIpL2Jhc2VfZGV2aWNlLmMgXAorCQktRERFQlVHIC1vIGJhc2VfZGV2aWNlICQoU1lTTElCUykKKworY2hlY2s6OiBiYXNlX2RldmljZQorCS4vYmFzZV9kZXZpY2UgPCAkKHNyY2RpcikvYmFzZV9kZXZpY2UudHN0ID4gYmFzZV9kZXZpY2Uub3V0CisJY21wICQoc3JjZGlyKS9iYXNlX2RldmljZS50c3QgYmFzZV9kZXZpY2Uub3V0CisKK21rbG9zdCtmb3VuZDogJChNS0xQRl9PQkpTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIG1rbG9zdCtmb3VuZCAkKE1LTFBGX09CSlMpIFwKKwkJJChMSUJJTlRMKSAkKFNZU0xJQlMpCisKK21rZTJmczogJChNS0UyRlNfT0JKUykgJChERVBMSUJTKSAkKExJQkUyUCkgJChERVBMSUJCTEtJRCkgJChERVBMSUJVVUlEKSBcCisJCSQoREVQTElCUVVPVEEpICQoTElCRVhUMkZTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIG1rZTJmcyAkKE1LRTJGU19PQkpTKSAkKExJQlMpICQoTElCQkxLSUQpIFwKKwkJJChMSUJVVUlEKSAkKExJQlFVT1RBKSAkKExJQkVYVDJGUykgJChMSUJFMlApICQoTElCSU5UTCkgXAorCQkkKFNZU0xJQlMpCisKK21rZTJmcy5zdGF0aWM6ICQoTUtFMkZTX09CSlMpICQoU1RBVElDX0RFUExJQlMpICQoU1RBVElDX0xJQkUyUCkgJChERVBTVEFUSUNfTElCVVVJRCkgXAorCQkkKERFUFNUQVRJQ19MSUJRVU9UQSkgJChERVBTVEFUSUNfTElCQkxLSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLXN0YXRpYyAtbyBta2UyZnMuc3RhdGljICQoTUtFMkZTX09CSlMpIFwKKwkJJChTVEFUSUNfTElCUVVPVEEpICQoU1RBVElDX0xJQlMpICQoU1RBVElDX0xJQkUyUCkgXAorCQkkKFNUQVRJQ19MSUJCTEtJRCkgJChTVEFUSUNfTElCVVVJRCkgJChMSUJJTlRMKSAkKFNZU0xJQlMpCisKK21rZTJmcy5wcm9maWxlZDogJChNS0UyRlNfT0JKUykgJChQUk9GSUxFRF9ERVBMSUJTKSBcCisJJChQUk9GSUxFRF9MSUJFMlApICQoUFJPRklMRURfREVQTElCQkxLSUQpICQoUFJPRklMRURfREVQTElCVVVJRCkgXAorCSQoUFJPRklMRURfTElCUVVPVEEpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLWcgLXBnIC1vIG1rZTJmcy5wcm9maWxlZCBcCisJCSQoUFJPRklMRURfTUtFMkZTX09CSlMpICQoUFJPRklMRURfTElCQkxLSUQpIFwKKwkJJChQUk9GSUxFRF9MSUJVVUlEKSAkKFBST0ZJTEVEX0xJQlFVT1RBKSAkKFBST0ZJTEVEX0xJQkUyUCkgXAorCQkkKExJQklOVEwpICQoUFJPRklMRURfTElCUykgJChTWVNMSUJTKQorCitjaGF0dHI6ICQoQ0hBVFRSX09CSlMpICQoREVQTElCU19FMlApCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gY2hhdHRyICQoQ0hBVFRSX09CSlMpICQoTElCU19FMlApIFwKKwkJJChMSUJJTlRMKSAkKFNZU0xJQlMpCisKK2xzYXR0cjogJChMU0FUVFJfT0JKUykgJChERVBMSUJTX0UyUCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyBsc2F0dHIgJChMU0FUVFJfT0JKUykgJChMSUJTX0UyUCkgXAorCQkkKExJQklOVEwpICQoU1lTTElCUykKKwordXVpZGdlbjogJChVVUlER0VOX09CSlMpICQoREVQTElCVVVJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyB1dWlkZ2VuICQoVVVJREdFTl9PQkpTKSAkKExJQlVVSUQpIFwKKwkJJChMSUJJTlRMKSAkKFNZU0xJQlMpCisKK3V1aWRnZW4ucHJvZmlsZWQ6ICQoVVVJREdFTl9PQkpTKSAkKFBST0ZJTEVEX0RFUExJQlVVSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLWcgLXBnIC1vIHV1aWRnZW4ucHJvZmlsZWQgXAorCQkkKFBST0ZJTEVEX1VVSURHRU5fT0JKUykgJChQUk9GSUxFRF9MSUJVVUlEKSAkKExJQklOVEwpIFwKKwkJJChTWVNMSUJTKQorCit1dWlkZDogJChVVUlERF9PQkpTKSAkKERFUExJQlVVSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gdXVpZGQgJChVVUlERF9PQkpTKSAkKExJQlVVSUQpIFwKKwkJJChMSUJJTlRMKSAkKFNZU0xJQlMpCisKK3V1aWRkLnByb2ZpbGVkOiAkKFVVSUREX09CSlMpICQoUFJPRklMRURfREVQTElCVVVJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtZyAtcGcgLW8gdXVpZGQucHJvZmlsZWQgJChQUk9GSUxFRF9VVUlERF9PQkpTKSBcCisJCSQoUFJPRklMRURfTElCVVVJRCkgJChMSUJJTlRMKSAkKFNZU0xJQlMpCisKK2R1bXBlMmZzOiAkKERVTVBFMkZTX09CSlMpICQoREVQTElCUykgJChERVBMSUJTX0UyUCkgJChERVBMSUJVVUlEKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIGR1bXBlMmZzICQoRFVNUEUyRlNfT0JKUykgJChMSUJTKSBcCisJCSQoTElCU19FMlApICQoTElCVVVJRCkgJChMSUJJTlRMKSAkKFNZU0xJQlMpCisKK2R1bXBlMmZzLnByb2ZpbGVkOiAkKERVTVBFMkZTX09CSlMpICQoUFJPRklMRURfREVQTElCUykgXAorCQkkKFBST0ZJTEVEX0xJQkUyUCkgJChQUk9GSUxFRF9ERVBMSUJVVUlEKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1nIC1wZyAtbyBkdW1wZTJmcy5wcm9maWxlZCBcCisJCSQoUFJPRklMRURfRFVNUEUyRlNfT0JKUykgJChQUk9GSUxFRF9MSUJTKSBcCisJCSQoUFJPRklMRURfTElCRTJQKSAkKFBST0ZJTEVEX0xJQlVVSUQpICQoTElCSU5UTCkgJChTWVNMSUJTKQorCitmc2NrOiAkKEZTQ0tfT0JKUykgJChERVBMSUJCTEtJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyBmc2NrICQoRlNDS19PQkpTKSAkKExJQkJMS0lEKSBcCisJCSQoTElCSU5UTCkgJChTWVNMSUJTKQorCitmc2NrLnByb2ZpbGVkOiAkKEZTQ0tfT0JKUykgJChQUk9GSUxFRF9ERVBMSUJCTEtJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtZyAtcGcgLW8gZnNjay5wcm9maWxlZCAkKFBST0ZJTEVEX0ZTQ0tfT0JKUykgXAorCQkkKFBST0ZJTEVEX0xJQkJMS0lEKSAkKExJQklOVEwpICQoU1lTTElCUykKKworYmFkYmxvY2tzOiAkKEJBREJMT0NLU19PQkpTKSAkKERFUExJQlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gYmFkYmxvY2tzICQoQkFEQkxPQ0tTX09CSlMpICQoTElCUykgXAorCQkkKExJQklOVEwpICQoU1lTTElCUykKKworYmFkYmxvY2tzLnByb2ZpbGVkOiAkKEJBREJMT0NLU19PQkpTKSAkKFBST0ZJTEVEX0RFUExJQlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLWcgLXBnIC1vIGJhZGJsb2Nrcy5wcm9maWxlZCBcCisJCSQoUFJPRklMRURfQkFEQkxPQ0tTX09CSlMpICQoUFJPRklMRURfTElCUykgJChMSUJJTlRMKSBcCisJCSQoU1lTTElCUykKKworbG9nc2F2ZTogbG9nc2F2ZS5vCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gbG9nc2F2ZSBsb2dzYXZlLm8gJChTWVNMSUJTKQorCitsb2dzYXZlLnByb2ZpbGVkOiBsb2dzYXZlLm8KKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtZyAtcGcgLW8gbG9nc2F2ZS5wcm9maWxlZCBcCisJCXByb2ZpbGVkL2xvZ3NhdmUubyAkKFNZU0xJQlMpCisKK2UyZnJlZWZyYWc6ICQoRTJGUkVFRlJBR19PQkpTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIGUyZnJlZWZyYWcgJChFMkZSRUVGUkFHX09CSlMpIFwKKwkJJChMSUJTKSAkKFNZU0xJQlMpCisKK2UyZnJlZWZyYWcucHJvZmlsZWQ6ICQoRTJGUkVFRlJBR19PQkpTKSAkKFBST0ZJTEVEX0RFUExJQlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLWcgLXBnIC1vIGUyZnJlZWZyYWcucHJvZmlsZWQgXAorCQkkKFBST0ZJTEVEX0UyRlJFRUZSQUdfT0JKUykgJChQUk9GSUxFRF9MSUJTKSAkKFNZU0xJQlMpCisKK2ZpbGVmcmFnOiAkKEZJTEVGUkFHX09CSlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gZmlsZWZyYWcgJChGSUxFRlJBR19PQkpTKSAkKFNZU0xJQlMpCisKK2ZpbGVmcmFnLnByb2ZpbGVkOiAkKEZJTEVGUkFHX09CSlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLWcgLXBnIC1vIGZpbGVmcmFnLnByb2ZpbGVkIFwKKwkJJChQUk9GSUxFRF9GSUxFRlJBR19PQkpTKSAKKwordHN0X2lzbW91bnRlZDogJChzcmNkaXIpL2lzbW91bnRlZC5jICQoU1RBVElDX0xJQkVYVDJGUykgJChERVBMSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKENDKSAtbyB0c3RfaXNtb3VudGVkICQoc3JjZGlyKS9pc21vdW50ZWQuYyAtRERFQlVHICQoQUxMX0NGTEFHUykgXAorCQkkKExJQkNPTV9FUlIpICQoU1lTTElCUykKKwordHVuZTJmcy44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvdHVuZTJmcy44LmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL3R1bmUyZnMuOC5pbiB0dW5lMmZzLjgKKworbWtsb3N0K2ZvdW5kLjg6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9ta2xvc3QrZm91bmQuOC5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9ta2xvc3QrZm91bmQuOC5pbiBta2xvc3QrZm91bmQuOAorCitta2UyZnMuODogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL21rZTJmcy44LmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL21rZTJmcy44LmluIG1rZTJmcy44CisKK21rZTJmcy5jb25mLjU6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9ta2UyZnMuY29uZi41LmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL21rZTJmcy5jb25mLjUuaW4gbWtlMmZzLmNvbmYuNQorCitleHQ0LjU6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9leHQ0LjUuaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvJEAuaW4gJEAKKworZTJsYWJlbC44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvZTJsYWJlbC44LmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2UybGFiZWwuOC5pbiBlMmxhYmVsLjgKKworZTJ1bmRvLjg6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9lMnVuZG8uOC5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9lMnVuZG8uOC5pbiBlMnVuZG8uOAorCitmaW5kZnMuODogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL2ZpbmRmcy44LmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2ZpbmRmcy44LmluIGZpbmRmcy44CisKK2UyaW1hZ2UuODogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL2UyaW1hZ2UuOC5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9lMmltYWdlLjguaW4gZTJpbWFnZS44CisKK2U0ZGVmcmFnLjg6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9lNGRlZnJhZy44LmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2U0ZGVmcmFnLjguaW4gZTRkZWZyYWcuOAorCitkdW1wZTJmcy44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvZHVtcGUyZnMuOC5pbiAKKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvZHVtcGUyZnMuOC5pbiBkdW1wZTJmcy44CisKK2JhZGJsb2Nrcy44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvYmFkYmxvY2tzLjguaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvYmFkYmxvY2tzLjguaW4gYmFkYmxvY2tzLjgJCisKK2ZzY2suODogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL2ZzY2suOC5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9mc2NrLjguaW4gZnNjay44IAorCitibGtpZC44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvYmxraWQuOC5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9ibGtpZC44LmluIGJsa2lkLjgKKworbG9nc2F2ZS44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvbG9nc2F2ZS44LmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2xvZ3NhdmUuOC5pbiBsb2dzYXZlLjgKKwordXVpZGQuODogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL3V1aWRkLjguaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvdXVpZGQuOC5pbiB1dWlkZC44CisKK2NoYXR0ci4xOiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvY2hhdHRyLjEuaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvY2hhdHRyLjEuaW4gY2hhdHRyLjEgCisKK2xzYXR0ci4xOiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvbHNhdHRyLjEuaW4gCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2xzYXR0ci4xLmluIGxzYXR0ci4xIAorCit1dWlkZ2VuLjE6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS91dWlkZ2VuLjEuaW4gCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL3V1aWRnZW4uMS5pbiB1dWlkZ2VuLjEgCisKK2Jsa2lkLjE6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9ibGtpZC4xLmluIAorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9ibGtpZC4xLmluIGJsa2lkLjEgCisKK2UyZnJlZWZyYWcuODogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL2UyZnJlZWZyYWcuOC5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwlAJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2UyZnJlZWZyYWcuOC5pbiBlMmZyZWVmcmFnLjgKKworZmlsZWZyYWcuODogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL2ZpbGVmcmFnLjguaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvZmlsZWZyYWcuOC5pbiBmaWxlZnJhZy44CisKK2luc3RhbGxkaXJzOgorCSQoRSkgIglNS0lOU1RBTExESVJTICQoc2JpbmRpcikgJChyb290X3NiaW5kaXIpICQoYmluZGlyKSAkKG1hbjFkaXIpICQobWFuOGRpcikgJChsaWJkaXIpICQocm9vdF9zeXNjb25mZGlyKSIKKwkkKFEpICQoTUtJTlNUQUxMRElSUykgJChERVNURElSKSQoc2JpbmRpcikgXAorCQkkKERFU1RESVIpJChyb290X3NiaW5kaXIpICQoREVTVERJUikkKGJpbmRpcikgXAorCQkkKERFU1RESVIpJChtYW4xZGlyKSAkKERFU1RESVIpJChtYW44ZGlyKSBcCisJCSQoREVTVERJUikkKG1hbjFkaXIpICQoREVTVERJUikkKG1hbjVkaXIpIFwKKwkJJChERVNURElSKSQobGliZGlyKSAkKERFU1RESVIpLyQocm9vdF9zeXNjb25mZGlyKQorCitpbnN0YWxsOiBhbGwgJChTTUFOUEFHRVMpICQoVU1BTlBBR0VTKSBpbnN0YWxsZGlycworCSQoUSkgZm9yIGkgaW4gJChTUFJPR1MpOyBkbyBcCisJCSQoRVMpICIJSU5TVEFMTCAkKHJvb3Rfc2JpbmRpcikvJCRpIjsgXAorCQkkKElOU1RBTExfUFJPR1JBTSkgJCRpICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvJCRpOyBcCisJZG9uZQorCSQoUSkgZm9yIGkgaW4gJChVU1BST0dTKTsgZG8gXAorCQkkKEVTKSAiCUlOU1RBTEwgJChzYmluZGlyKS8kJGkiOyBcCisJCSQoSU5TVEFMTF9QUk9HUkFNKSAkJGkgJChERVNURElSKSQoc2JpbmRpcikvJCRpOyBcCisJZG9uZQorCSQoUSkgZm9yIGkgaW4gZXh0MiBleHQzIGV4dDQgZXh0NGRldjsgZG8gXAorCQkkKEVTKSAiCUxJTksgJChyb290X3NiaW5kaXIpL21rZnMuJCRpIjsgXAorCQkoY2QgJChERVNURElSKSQocm9vdF9zYmluZGlyKTsgXAorCQkJJChMTikgJChMSU5LX0lOU1RBTExfRkxBR1MpIG1rZTJmcyBta2ZzLiQkaSk7IFwKKwlkb25lCisJJChRKSAoY2QgJChERVNURElSKSQocm9vdF9zYmluZGlyKTsgXAorCQkkKExOKSAkKExJTktfSU5TVEFMTF9GTEFHUykgdHVuZTJmcyBlMmxhYmVsKQorCSQoUSkgaWYgdGVzdCAtbiAiJChGSU5ERlNfTElOSykiOyB0aGVuIFwKKwkJJChFUykgIglMSU5LICQocm9vdF9zYmluZGlyKS9maW5kZnMiOyBcCisJCShjZCAkKERFU1RESVIpJChyb290X3NiaW5kaXIpOyBcCisJCSQoTE4pICQoTElOS19JTlNUQUxMX0ZMQUdTKSB0dW5lMmZzICQoRklOREZTX0xJTkspKTsgXAorCWZpCisJJChRKSBmb3IgaSBpbiAkKFVQUk9HUyk7IGRvIFwKKwkJJChFUykgIglJTlNUQUxMICQoYmluZGlyKS8kJGkiOyBcCisJCSQoSU5TVEFMTF9QUk9HUkFNKSAkJGkgJChERVNURElSKSQoYmluZGlyKS8kJGk7IFwKKwlkb25lCisJJChRKSBmb3IgaSBpbiAkKExQUk9HUyk7IGRvIFwKKwkJJChFUykgIglJTlNUQUxMICQobGliZGlyKS8kJGkiOyBcCisJCSQoSU5TVEFMTF9QUk9HUkFNKSAkJGkgJChERVNURElSKSQobGliZGlyKS8kJGk7IFwKKwlkb25lCisJJChRKSBmb3IgaSBpbiAkKFNNQU5QQUdFUyk7IGRvIFwKKwkJZm9yIGogaW4gJChDT01QUkVTU19FWFQpOyBkbyBcCisJCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW44ZGlyKS8kJGkuJCRqOyBcCisJCWRvbmU7IFwKKwkJJChFUykgIglJTlNUQUxMX0RBVEEgJChtYW44ZGlyKS8kJGkiOyBcCisJCSQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQobWFuOGRpcikvJCRpOyBcCisJZG9uZQorCSQoUSkgJChSTSkgLWYgJChERVNURElSKSQobWFuOGRpcikvbWtmcy5leHQyLjguZ3ogXAorCQkkKERFU1RESVIpJChtYW44ZGlyKS9ta2ZzLmV4dDMuOC5negorCSQoUSkgZm9yIGkgaW4gZXh0MiBleHQzIGV4dDQgZXh0NGRldjsgZG8gXAorCQkkKEVTKSAiCUxJTksgbWtmcy4kJGkuOCI7IFwKKwkJKGNkICQoREVTVERJUikkKG1hbjhkaXIpOyBcCisJCQkkKExOKSAkKExJTktfSU5TVEFMTF9GTEFHUykgbWtlMmZzLjggbWtmcy4kJGkuOCk7IFwKKwlkb25lCisJJChRKSBmb3IgaSBpbiAkKFVNQU5QQUdFUyk7IGRvIFwKKwkJZm9yIGogaW4gJChDT01QUkVTU19FWFQpOyBkbyBcCisJCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW4xZGlyKS8kJGkuJCRqOyBcCisJCWRvbmU7IFwKKwkJJChFUykgIglJTlNUQUxMX0RBVEEgJChtYW4xZGlyKS8kJGkiOyBcCisJCSQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQobWFuMWRpcikvJCRpOyBcCisJZG9uZQorCSQoUSkgZm9yIGkgaW4gJChGTUFOUEFHRVMpOyBkbyBcCisJCWZvciBqIGluICQoQ09NUFJFU1NfRVhUKTsgZG8gXAorCQkJJChSTSkgLWYgJChERVNURElSKSQobWFuNWRpcikvJCRpLiQkajsgXAorCQlkb25lOyBcCisJCSQoRVMpICIJSU5TVEFMTF9EQVRBICQobWFuNWRpcikvJCRpIjsgXAorCQkkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKG1hbjVkaXIpLyQkaTsgXAorCWRvbmUKKwkkKFEpIGZvciBpIGluIGV4dDIgZXh0MzsgZG8gXAorCQkkKEVTKSAiCUxJTksgJCRpLjUiOyBcCisJCShjZCAkKERFU1RESVIpJChtYW41ZGlyKTsgXAorCQkJJChMTikgJChMSU5LX0lOU1RBTExfRkxBR1MpIGV4dDQuNSAkJGkuNSk7IFwKKwlkb25lCisJJChRKSBpZiB0ZXN0IC1mICQoREVTVERJUikkKHJvb3Rfc3lzY29uZmRpcikvbWtlMmZzLmNvbmY7IHRoZW4gXAorCQlpZiBjbXAgLXMgJChERVNURElSKSQocm9vdF9zeXNjb25mZGlyKS9ta2UyZnMuY29uZiBcCisJCQlta2UyZnMuY29uZjsgdGhlbiBcCisJCQl0cnVlOyBcCisJCWVsc2UgXAorCQkJaWYgZ3JlcCAtcSBleHQ0ZGV2ICQoREVTVERJUikkKHJvb3Rfc3lzY29uZmRpcikvbWtlMmZzLmNvbmYgOyB0aGVuIFwKKwkJCQkkKEVTKSAiCUlOU1RBTExfREFUQSAkKHJvb3Rfc3lzY29uZmRpcikvbWtlMmZzLmNvbmYuZTJmc3Byb2dzLW5ldyI7IFwKKwkJCQkkKElOU1RBTExfREFUQSkgbWtlMmZzLmNvbmYgXAorCQkJCQkkKERFU1RESVIpJChyb290X3N5c2NvbmZkaXIpL21rZTJmcy5jb25mLmUyZnNwcm9ncy1uZXc7IFwKKwkJCQllY2hvICJXYXJuaW5nOiBpbnN0YWxsaW5nIG1rZTJmcy5jb25mIGluICQoREVTVERJUikkKHJvb3Rfc3lzY29uZmRpcikvbWtlMmZzLmNvbmYuZTJmc3Byb2dzLW5ldyI7IFwKKwkJCQllY2hvICJDaGVjayB0byBzZWUgaWYgeW91IG5lZWQgdG8gdXBkYXRlIHlvdXIgJChyb290X3N5c2NvbmZkaXIpL21rZTJmcy5jb25mIjsgXAorCQkJZWxzZSBcCisJCQkJJChFUykgIglJTlNUQUxMX0RBVEEgJChyb290X3N5c2NvbmZkaXIpL21rZTJmcy5jb25mIjsgXAorCQkJCW12ICQoREVTVERJUikkKHJvb3Rfc3lzY29uZmRpcikvbWtlMmZzLmNvbmYgXAorCQkJCSAgICQoREVTVERJUikkKHJvb3Rfc3lzY29uZmRpcikvbWtlMmZzLmNvbmYuZTJmc3Byb2dzLW9sZDsgXAorCQkJCSQoSU5TVEFMTF9EQVRBKSBta2UyZnMuY29uZiBcCisJCQkJCSQoREVTVERJUikkKHJvb3Rfc3lzY29uZmRpcikvbWtlMmZzLmNvbmY7IFwKKwkJCQllY2hvICJZb3VyIG1rZTJmcy5jb25mIGlzIHRvbyBvbGQuICBCYWNraW5nIHVwIG9sZCB2ZXJzaW9uIGluIjsgXAorCQkJCWVjaG8gIiQoREVTVERJUikkKHJvb3Rfc3lzY29uZmRpcikvbWtlMmZzLmNvbmYuZTJmc3Byb2dzLW9sZC4gIFBsZWFzZSBjaGVjayB0byBzZWUiOyBcCisJCQkJZWNobyAiaWYgeW91IGhhdmUgYW55IGxvY2FsIGN1c3RvbWl6YXRpb25zIHRoYXQgeW91IHdpc2ggdG8gcHJlc2VydmUuIjsgXAorCQkJZmk7IFwKKwkJCWVjaG8gIiAiOyBcCisJCWZpOyBcCisJZWxzZSBcCisJCSQoRVMpICIJSU5TVEFMTF9EQVRBICQocm9vdF9zeXNjb25mZGlyKS9ta2UyZnMuY29uZiI7IFwKKwkJJChJTlNUQUxMX0RBVEEpIG1rZTJmcy5jb25mIFwKKwkJCSQoREVTVERJUikkKHJvb3Rfc3lzY29uZmRpcikvbWtlMmZzLmNvbmY7IFwKKwlmaQorCitpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCisJJChRKSBmb3IgaSBpbiAkKFNQUk9HUyk7IGRvIFwKKwkJJChFKSAiCVNUUklQICQocm9vdF9zYmluZGlyKS8kJGkiOyBcCisJCSQoU1RSSVApICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvJCRpOyBcCisJZG9uZQorCSQoUSkgZm9yIGkgaW4gJChVU1BST0dTKTsgZG8gXAorCQkkKEUpICIJU1RSSVAgJChzYmluZGlyKS8kJGkiOyBcCisJCSQoU1RSSVApICQoREVTVERJUikkKHNiaW5kaXIpLyQkaTsgXAorCWRvbmUKKwordW5pbnN0YWxsOgorCWZvciBpIGluICQoU1BST0dTKTsgZG8gXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChyb290X3NiaW5kaXIpLyQkaTsgXAorCWRvbmUKKwlmb3IgaSBpbiAkKFVTUFJPR1MpOyBkbyBcCisJCSQoUk0pIC1mICQoREVTVERJUikkKHNiaW5kaXIpLyQkaTsgXAorCWRvbmUKKwlmb3IgaSBpbiAkKExQUk9HUyk7IGRvIFwKKwkJJChSTSkgLWYgJChERVNURElSKSQobGliZGlyKS8kJGk7IFwKKwlkb25lCisJJChSTSkgLWYgJChERVNURElSKSQocm9vdF9zYmluZGlyKS9ta2ZzLmV4dDIgXAorCQkJJChERVNURElSKSQocm9vdF9zYmluZGlyKS9ta2ZzLmV4dDMgXAorCQkJJChERVNURElSKSQocm9vdF9zYmluZGlyKS9ta2ZzLmV4dDQgXAorCQkJJChERVNURElSKSQocm9vdF9zYmluZGlyKS9ta2ZzLmV4dDRkZXYKKwlmb3IgaSBpbiAkKFVQUk9HUyk7IGRvIFwKKwkJJChSTSkgLWYgJChERVNURElSKSQoYmluZGlyKS8kJGk7IFwKKwlkb25lCisJZm9yIGkgaW4gJChTTUFOUEFHRVMpOyBkbyBcCisJCSQoUk0pIC1mICQoREVTVERJUikkKG1hbjhkaXIpLyQkaTsgXAorCWRvbmUKKwkkKFJNKSAtZiAkKERFU1RESVIpJChtYW44ZGlyKS9ta2ZzLmV4dDIuOCBcCisJCSQoREVTVERJUikkKG1hbjhkaXIpL21rZnMuZXh0My44IFwKKwkJJChERVNURElSKSQobWFuOGRpcikvbWtmcy5leHQ0LjggXAorCQkkKERFU1RESVIpJChtYW44ZGlyKS9ta2ZzLmV4dDRkZXYuOCBcCisJCSQoREVTVERJUikkKG1hbjhkaXIpL2ZzY2suZXh0Mi44IFwKKwkJJChERVNURElSKSQobWFuOGRpcikvZnNjay5leHQzLjggXAorCQkkKERFU1RESVIpJChtYW44ZGlyKS9mc2NrLmV4dDQuOCBcCisJCSQoREVTVERJUikkKG1hbjhkaXIpL2ZzY2suZXh0NGRldi44CisKKwlmb3IgaSBpbiAkKFVNQU5QQUdFUyk7IGRvIFwKKwkJJChSTSkgLWYgJChERVNURElSKSQobWFuMWRpcikvJCRpOyBcCisJZG9uZQorCWZvciBpIGluICQoRklOREZTX0xJTkspIGUybGFiZWwgOyBkbyBcCisJCSQoUk0pIC1mICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvJCRpOyBcCisJZG9uZQorCWZvciBpIGluICQoRk1BTlBBR0VTKTsgZG8gXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW41ZGlyKS8kJGk7IFwKKwlkb25lCisJJChRKSBmb3IgaSBpbiBleHQyIGV4dDM7IGRvIFwKKwkJJChFUykgIglMSU5LICQkaS41IjsgXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW41ZGlyKS8kJGkuNTsgXAorCWRvbmUKKwlpZiBjbXAgLXMgbWtlMmZzLmNvbmYgJChERVNURElSKS8kKHJvb3Rfc3lzY29uZmRpcikvbWtlMmZzLmNvbmY7IHRoZW4gXAorCQkkKFJNKSAkKERFU1RESVIpLyQocm9vdF9zeXNjb25mZGlyKS9ta2UyZnMuY29uZjsgXAorCWZpCisKK2NsZWFuOjoKKwkkKFJNKSAtZiAkKFNQUk9HUykgJChVU1BST0dTKSAkKFVQUk9HUykgJChVTUFOUEFHRVMpICQoU01BTlBBR0VTKSBcCisJCSQoRk1BTlBBR0VTKSBwcm9maWxlLmggXAorCQliYXNlX2RldmljZSBiYXNlX2RldmljZS5vdXQgbWtlMmZzLnN0YXRpYyBmaWxlZnJhZyBlMmZyZWVmcmFnIFwKKwkJZTJpbml0cmRfaGVscGVyIHBhcnRpbmZvIHByb2ZfZXJyLltjaF0gZGVmYXVsdF9wcm9maWxlLmMgXAorCQl1dWlkZCBlMmltYWdlIHR1bmUyZnMuc3RhdGljIHRzdF9pc21vdW50ZWQgZnNjay5wcm9maWxlZCBcCisJCWJsa2lkLnByb2ZpbGVkIHR1bmUyZnMucHJvZmlsZWQgZTJpbWFnZS5wcm9maWxlZCBcCisJCWUydW5kby5wcm9maWxlZCBta2UyZnMucHJvZmlsZWQgZHVtcGUyZnMucHJvZmlsZWQgXAorCQlsb2dzYXZlLnByb2ZpbGVkIGZpbGVmcmFnLnByb2ZpbGVkIHV1aWRnZW4ucHJvZmlsZWQgXAorCQl1dWlkZC5wcm9maWxlZCBlMmltYWdlLnByb2ZpbGVkIG1rZTJmcy5jb25mIFwKKwkJcHJvZmlsZWQvKi5vIFwjKiAqLnMgKi5vICouYSAqfiBjb3JlIGdtb24ub3V0CisKK21vc3RseWNsZWFuOiBjbGVhbgorZGlzdGNsZWFuOiBjbGVhbgorCSQoUk0pIC1mIC5kZXBlbmQgTWFrZWZpbGUgJChzcmNkaXIpL1RBR1MgJChzcmNkaXIpL01ha2VmaWxlLmluLm9sZAorCisjICsrKyBEZXBlbmRlbmN5IGxpbmUgZWF0ZXIgKysrCisjIAorIyBNYWtlZmlsZSBkZXBlbmRlbmNpZXMgZm9sbG93LiAgVGhpcyBtdXN0IGJlIHRoZSBsYXN0IHNlY3Rpb24gaW4KKyMgdGhlIE1ha2VmaWxlLmluIGZpbGUKKyMKK3R1bmUyZnMubzogJChzcmNkaXIpL3R1bmUyZnMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oICQoc3JjZGlyKS9qZnNfdXNlci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWpiZC5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9qZnNfY29tcGF0LmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtbGlzdC5oICQoc3JjZGlyKS91dGlsLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oIFwKKyAkKHRvcF9zcmNkaXIpL3ZlcnNpb24uaCAkKHNyY2RpcikvbmxzLWVuYWJsZS5oCitta2xvc3QrZm91bmQubzogJChzcmNkaXIpL21rbG9zdCtmb3VuZC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJCh0b3Bfc3JjZGlyKS92ZXJzaW9uLmggXAorICQoc3JjZGlyKS9ubHMtZW5hYmxlLmgKK21rZTJmcy5vOiAkKHNyY2RpcikvbWtlMmZzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzUC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICQoc3JjZGlyKS91dGlsLmggcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS92ZXJzaW9uLmggXAorICQoc3JjZGlyKS9ubHMtZW5hYmxlLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oICQoc3JjZGlyKS9ta2UyZnMuaAorbWtfaHVnZWZpbGVzLm86ICQoc3JjZGlyKS9ta19odWdlZmlsZXMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnNQLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCBcCisgJChzcmNkaXIpL3V0aWwuaCBwcm9maWxlLmggcHJvZl9lcnIuaCAkKHNyY2RpcikvbmxzLWVuYWJsZS5oIFwKKyAkKHNyY2RpcikvbWtlMmZzLmgKK2NoYXR0ci5vOiAkKHNyY2RpcikvY2hhdHRyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCAkKHRvcF9zcmNkaXIpL3ZlcnNpb24uaCAkKHNyY2RpcikvbmxzLWVuYWJsZS5oCitsc2F0dHIubzogJChzcmNkaXIpL2xzYXR0ci5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmggJCh0b3Bfc3JjZGlyKS92ZXJzaW9uLmggJChzcmNkaXIpL25scy1lbmFibGUuaAorZHVtcGUyZnMubzogJChzcmNkaXIpL2R1bXBlMmZzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCAkKHNyY2RpcikvamZzX3VzZXIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2tlcm5lbC1qYmQuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvamZzX2NvbXBhdC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWxpc3QuaCAkKHRvcF9zcmNkaXIpL3ZlcnNpb24uaCBcCisgJChzcmNkaXIpL25scy1lbmFibGUuaAorYmFkYmxvY2tzLm86ICQoc3JjZGlyKS9iYWRibG9ja3MuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9ubHMtZW5hYmxlLmgKK2ZzY2subzogJChzcmNkaXIpL2ZzY2suYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS92ZXJzaW9uLmggXAorICQoc3JjZGlyKS9ubHMtZW5hYmxlLmggJChzcmNkaXIpL2ZzY2suaAordXRpbC5vOiAkKHNyY2RpcikvdXRpbC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9ubHMtZW5hYmxlLmggJChzcmNkaXIpL3V0aWwuaAordXVpZGdlbi5vOiAkKHNyY2RpcikvdXVpZGdlbi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvbmxzLWVuYWJsZS5oCitibGtpZC5vOiAkKHNyY2RpcikvYmxraWQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaAorbG9nc2F2ZS5vOiAkKHNyY2RpcikvbG9nc2F2ZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaAorZmlsZWZyYWcubzogJChzcmNkaXIpL2ZpbGVmcmFnLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9maWVtYXAuaAorYmFzZV9kZXZpY2UubzogJChzcmNkaXIpL2Jhc2VfZGV2aWNlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9mc2NrLmgKK2lzbW91bnRlZC5vOiAkKHNyY2RpcikvaXNtb3VudGVkLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9mc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaAorcHJvZmlsZS5vOiAkKHNyY2RpcikvLi4vZTJmc2NrL3Byb2ZpbGUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvLi4vZTJmc2NrL3Byb2ZpbGUuaCBwcm9mX2Vyci5oCitlMnVuZG8ubzogJChzcmNkaXIpL2UydW5kby5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvdGRiLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9ubHMtZW5hYmxlLmgKK2UyZnJlZWZyYWcubzogJChzcmNkaXIpL2UyZnJlZWZyYWcuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL2UyZnJlZWZyYWcuaApkaWZmIC0tZ2l0IGEvbWlzYy9iYWRibG9ja3MuOC5pbiBiL21pc2MvYmFkYmxvY2tzLjguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUwN2Y2MwotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvYmFkYmxvY2tzLjguaW4KQEAgLTAsMCArMSwyMzQgQEAKKy5cIiAtKi0gbnJvZmYgLSotCisuVEggQkFEQkxPQ0tTIDggIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2JhZGJsb2NrcyBcLSBzZWFyY2ggYSBkZXZpY2UgZm9yIGJhZCBibG9ja3MKKy5TSCBTWU5PUFNJUworLkIgYmFkYmxvY2tzCitbCisuQiBcLXN2d25mQlgKK10KK1sKKy5CIFwtYgorLkkgYmxvY2stc2l6ZQorXQorWworLkIgXC1jCisuSSBibG9ja3NfYXRfb25jZQorXQorWworLkIgXC1lCisuSSBtYXhfYmFkX2Jsb2NrcworXQorWworLkIgXC1kCisuSSByZWFkX2RlbGF5X2ZhY3RvcgorXQorWworLkIgXC1pCisuSSBpbnB1dF9maWxlCitdCitbCisuQiBcLW8KKy5JIG91dHB1dF9maWxlCitdCitbCisuQiBcLXAKKy5JIG51bV9wYXNzZXMKK10KK1sKKy5CIFwtdAorLkkgdGVzdF9wYXR0ZXJuCitdCisuSSBkZXZpY2UKK1sKKy5JIGxhc3QtYmxvY2sKK10gWworLkkgZmlyc3QtYmxvY2sgCitdCisuU0ggREVTQ1JJUFRJT04KKy5CIGJhZGJsb2NrcworaXMgdXNlZCB0byBzZWFyY2ggZm9yIGJhZCBibG9ja3Mgb24gYSBkZXZpY2UgKHVzdWFsbHkgYSBkaXNrIHBhcnRpdGlvbikuCisuSSBkZXZpY2UKK2lzIHRoZSBzcGVjaWFsIGZpbGUgY29ycmVzcG9uZGluZyB0byB0aGUgZGV2aWNlIChlLmcKKy5JUiAvZGV2L2hkYzEgKS4KKy5JIGxhc3QtYmxvY2sKK2lzIHRoZSBsYXN0IGJsb2NrIHRvIGJlIGNoZWNrZWQ7IGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGJsb2NrCitvbiB0aGUgZGV2aWNlIGlzIHVzZWQgYXMgYSBkZWZhdWx0LgorLkkgZmlyc3QtYmxvY2sKK2lzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciBzcGVjaWZ5aW5nIHRoZSBzdGFydGluZyBibG9jayBudW1iZXIKK2ZvciB0aGUgdGVzdCwgd2hpY2ggYWxsb3dzIHRoZSB0ZXN0aW5nIHRvIHN0YXJ0IGluIHRoZSBtaWRkbGUgb2YgdGhlCitkaXNrLiAgSWYgaXQgaXMgbm90IHNwZWNpZmllZCB0aGUgZmlyc3QgYmxvY2sgb24gdGhlIGRpc2sgaXMgdXNlZCBhcyBhIGRlZmF1bHQuCisuUFAKKy5CIEltcG9ydGFudCBub3RlOgorSWYgdGhlIG91dHB1dCBvZiAKKy5CIGJhZGJsb2NrcworaXMgZ29pbmcgdG8gYmUgZmVkIHRvIHRoZQorLkIgZTJmc2NrCitvciAKKy5CIG1rZTJmcworcHJvZ3JhbXMsIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBibG9jayBzaXplIGlzIHByb3Blcmx5IHNwZWNpZmllZCwKK3NpbmNlIHRoZSBibG9jayBudW1iZXJzIHdoaWNoIGFyZSBnZW5lcmF0ZWQgYXJlIHZlcnkgZGVwZW5kZW50IG9uIHRoZSAKK2Jsb2NrIHNpemUgaW4gdXNlIGJ5IHRoZSBmaWxlc3lzdGVtLiAgIAorRm9yIHRoaXMgcmVhc29uLCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0Cit1c2VycyAKKy5CIG5vdAorcnVuIAorLkIgYmFkYmxvY2tzIAorZGlyZWN0bHksIGJ1dCByYXRoZXIgdXNlIHRoZSAKKy5CIFwtYworb3B0aW9uIG9mIHRoZQorLkIgZTJmc2NrCithbmQgCisuQiBta2UyZnMKK3Byb2dyYW1zLgorLlNIIE9QVElPTlMKKy5UUAorLkJJIFwtYiAiIGJsb2NrLXNpemUiCitTcGVjaWZ5IHRoZSBzaXplIG9mIGJsb2NrcyBpbiBieXRlcy4gIFRoZSBkZWZhdWx0IGlzIDEwMjQuCisuVFAKKy5CSSBcLWMgIiBudW1iZXIgb2YgYmxvY2tzIgoraXMgdGhlIG51bWJlciBvZiBibG9ja3Mgd2hpY2ggYXJlIHRlc3RlZCBhdCBhIHRpbWUuICBUaGUgZGVmYXVsdCBpcyA2NC4KKy5UUAorLkJJIFwtZSAiIG1heCBiYWQgYmxvY2sgY291bnQiCitTcGVjaWZ5IGEgbWF4aW11bSBudW1iZXIgb2YgYmFkIGJsb2NrcyBiZWZvcmUgYWJvcnRpbmcgdGhlIHRlc3QuICBUaGUKK2RlZmF1bHQgaXMgMCwgbWVhbmluZyB0aGUgdGVzdCB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHRlc3QKK3JhbmdlIGlzIHJlYWNoZWQuCisuVFAKKy5CSSBcLWQgIiByZWFkIGRlbGF5IGZhY3RvciIKK1RoaXMgcGFyYW1ldGVyLCBpZiBwYXNzZWQgYW5kIG5vbi16ZXJvLCB3aWxsIGNhdXNlIGJhZCBibG9ja3MgdG8gc2xlZXAKK2JldHdlZW4gcmVhZHMgaWYgdGhlcmUgd2VyZSBubyBlcnJvcnMgZW5jb3VudGVyZWQgaW4gdGhlIHJlYWQKK29wZXJhdGlvbjsgdGhlIGRlbGF5IHdpbGwgYmUgY2FsY3VsYXRlZCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHRpbWUgaXQKK3Rvb2sgZm9yIHRoZSByZWFkIG9wZXJhdGlvbiB0byBiZSBwZXJmb3JtZWQuIEluIG90aGVyIHdvcmRzLCBhIHZhbHVlIG9mIAorMTAwIHdpbGwgY2F1c2UgZWFjaCByZWFkIHRvIGJlIGRlbGF5ZWQgYnkgdGhlIGFtb3VudCB0aGUgcHJldmlvdXMgcmVhZAordG9vaywgYW5kIGEgdmFsdWUgb2YgMjAwIGJ5IHR3aWNlIHRoZSBhbW91bnQuCisuVFAKKy5CIFwtZgorTm9ybWFsbHksIGJhZGJsb2NrcyB3aWxsIHJlZnVzZSB0byBkbyBhIHJlYWQvd3JpdGUgb3IgYSBub24tZGVzdHJ1Y3RpdmUKK3Rlc3Qgb24gYSBkZXZpY2Ugd2hpY2ggaXMgbW91bnRlZCwgc2luY2UgZWl0aGVyIGNhbiBjYXVzZSB0aGUgc3lzdGVtIHRvCitwb3RlbnRpYWxseSBjcmFzaCBhbmQvb3IgZGFtYWdlIHRoZSBmaWxlc3lzdGVtIGV2ZW4gaWYgaXQgaXMgbW91bnRlZAorcmVhZC1vbmx5LiAgVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUKKy5CIFwtZgorZmxhZywgYnV0IHNob3VsZCBhbG1vc3QgbmV2ZXIgYmUgdXNlZCAtLS0gaWYgeW91IHRoaW5rIHlvdSdyZSBzbWFydGVyCit0aGFuIHRoZSAKKy5CIGJhZGJsb2NrcworcHJvZ3JhbSwgeW91IGFsbW9zdCBjZXJ0YWlubHkgYXJlbid0LiAgVGhlIG9ubHkgdGltZSB3aGVuIHRoaXMgb3B0aW9uIAorbWlnaHQgYmUgc2FmZSB0byB1c2UgaXMgaWYgdGhlIC9ldGMvbXRhYiBmaWxlIGlzIGluY29ycmVjdCwgYW5kIHRoZSBkZXZpY2UKK3JlYWxseSBpc24ndCBtb3VudGVkLgorLlRQCisuQkkgXC1pICIgaW5wdXRfZmlsZSIKK1JlYWQgYSBsaXN0IG9mIGFscmVhZHkgZXhpc3Rpbmcga25vd24gYmFkIGJsb2Nrcy4KKy5CIEJhZGJsb2Nrcword2lsbCBza2lwIHRlc3RpbmcgdGhlc2UgYmxvY2tzIHNpbmNlIHRoZXkgYXJlIGtub3duIHRvIGJlIGJhZC4gIElmCisuSSBpbnB1dF9maWxlCitpcyBzcGVjaWZpZWQgYXMgIi0iLCB0aGUgbGlzdCB3aWxsIGJlIHJlYWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuCitCbG9ja3MgbGlzdGVkIGluIHRoaXMgbGlzdCB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgbGlzdCBvZgorLkkgbmV3CitiYWQgYmxvY2tzIHByb2R1Y2VkIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQgb3IgaW4gdGhlIG91dHB1dCBmaWxlLgorVGhlCisuQiBcLWIKK29wdGlvbiBvZgorLkJSIGR1bXBlMmZzICg4KQorY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIGxpc3Qgb2YgYmxvY2tzIGN1cnJlbnRseSBtYXJrZWQgYmFkIG9uCithbiBleGlzdGluZyBmaWxlc3lzdGVtLCBpbiBhIGZvcm1hdCBzdWl0YWJsZSBmb3IgdXNlIHdpdGggdGhpcyBvcHRpb24uCisuVFAKKy5CIFwtbgorVXNlIG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIG1vZGUuICBCeSBkZWZhdWx0IG9ubHkgYSBub24tZGVzdHJ1Y3RpdmUgCityZWFkLW9ubHkgdGVzdCBpcyBkb25lLiAgVGhpcyBvcHRpb24gbXVzdCBub3QgYmUgY29tYmluZWQgd2l0aCB0aGUgCisuQiBcLXcKK29wdGlvbiwgYXMgdGhleSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorLlRQCisuQkkgXC1vICIgb3V0cHV0X2ZpbGUiCitXcml0ZSB0aGUgbGlzdCBvZiBiYWQgYmxvY2tzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gIFdpdGhvdXQgdGhpcyBvcHRpb24sCisuQiBiYWRibG9ja3MKK2Rpc3BsYXlzIHRoZSBsaXN0IG9uIGl0cyBzdGFuZGFyZCBvdXRwdXQuICBUaGUgZm9ybWF0IG9mIHRoaXMgZmlsZSBpcyBzdWl0YWJsZQorZm9yIHVzZSBieSB0aGUKKy4KKy5CIFwtbAorb3B0aW9uIGluIAorLkJSIGUyZnNjayAoOCkKK29yCisuQlIgbWtlMmZzICg4KS4KKy5UUAorLkJJIFwtcCAiIG51bV9wYXNzZXMiCitSZXBlYXQgc2Nhbm5pbmcgdGhlIGRpc2sgdW50aWwgdGhlcmUgYXJlIG5vIG5ldyBibG9ja3MgZGlzY292ZXJlZCBpbgorbnVtX3Bhc3NlcyBjb25zZWN1dGl2ZSBzY2FucyBvZiB0aGUgZGlzay4KK0RlZmF1bHQgaXMgMCwgbWVhbmluZworLkIgYmFkYmxvY2tzCit3aWxsIGV4aXQgYWZ0ZXIgdGhlIGZpcnN0IHBhc3MuCisuVFAKKy5CIFwtcworU2hvdyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHNjYW4gYnkgd3JpdGluZyBvdXQgcm91Z2ggcGVyY2VudGFnZSBjb21wbGV0aW9uCitvZiB0aGUgY3VycmVudCBiYWRibG9ja3MgcGFzcyBvdmVyIHRoZSBkaXNrLiAgTm90ZSB0aGF0IGJhZGJsb2NrcyBtYXkgZG8KK211bHRpcGxlIHRlc3QgcGFzc2VzIG92ZXIgdGhlIGRpc2ssIGluIHBhcnRpY3VsYXIgaWYgdGhlCisuQiBcLXAKK29yCisuQiBcLXcKK29wdGlvbiBpcyByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuCisuVFAKKy5CSSBcLXQgIiB0ZXN0X3BhdHRlcm4iCitTcGVjaWZ5IGEgdGVzdCBwYXR0ZXJuIHRvIGJlIHJlYWQgKGFuZCB3cml0dGVuKSB0byBkaXNrIGJsb2Nrcy4gICBUaGUKKy5JIHRlc3RfcGF0dGVybgorbWF5IGVpdGhlciBiZSBhIG51bWVyaWMgdmFsdWUgYmV0d2VlbiAwIGFuZCBVTE9OR19NQVgtMSBpbmNsdXNpdmUsIG9yIHRoZSB3b3JkIAorInJhbmRvbSIsIHdoaWNoIHNwZWNpZmllcyB0aGF0IHRoZSBibG9jayBzaG91bGQgYmUgZmlsbGVkIHdpdGggYSByYW5kb20KK2JpdCBwYXR0ZXJuLgorRm9yIHJlYWQvd3JpdGUgKFxmQi13XGZSKSBhbmQgbm9uLWRlc3RydWN0aXZlIChcZkItblxmUikgbW9kZXMsCitvbmUgb3IgbW9yZSB0ZXN0IHBhdHRlcm5zIG1heSBiZSBzcGVjaWZpZWQgYnkgc3BlY2lmeWluZyB0aGUKKy5CIC10CitvcHRpb24gZm9yIGVhY2ggdGVzdCBwYXR0ZXJuIGRlc2lyZWQuICBGb3IKK3JlYWQtb25seSBtb2RlIG9ubHkgYSBzaW5nbGUgcGF0dGVybiBtYXkgYmUgc3BlY2lmaWVkIGFuZCBpdCBtYXkgbm90IGJlCisicmFuZG9tIi4gIFJlYWQtb25seSB0ZXN0aW5nIHdpdGggYSBwYXR0ZXJuIGFzc3VtZXMgdGhhdCB0aGUKK3NwZWNpZmllZCBwYXR0ZXJuIGhhcyBwcmV2aW91c2x5IGJlZW4gd3JpdHRlbiB0byB0aGUgZGlzayAtIGlmIG5vdCwgbGFyZ2UKK251bWJlcnMgb2YgYmxvY2tzIHdpbGwgZmFpbCB2ZXJpZmljYXRpb24uICAKK0lmIG11bHRpcGxlIHBhdHRlcm5zCithcmUgc3BlY2lmaWVkIHRoZW4gYWxsIGJsb2NrcyB3aWxsIGJlIHRlc3RlZCB3aXRoIG9uZSBwYXR0ZXJuIAorYmVmb3JlIHByb2NlZWRpbmcgdG8gdGhlIG5leHQgcGF0dGVybi4KKy5UUAorLkIgXC12CitWZXJib3NlIG1vZGUuICBXaWxsIHdyaXRlIHRoZSBudW1iZXIgb2YgcmVhZCBlcnJvcnMsIHdyaXRlIGVycm9ycyBhbmQgZGF0YS0KK2NvcnJ1cHRpb25zIHRvIHN0ZGVyci4KKy5UUAorLkIgXC13CitVc2Ugd3JpdGUtbW9kZSB0ZXN0LiBXaXRoIHRoaXMgb3B0aW9uLAorLkIgYmFkYmxvY2tzCitzY2FucyBmb3IgYmFkIGJsb2NrcyBieSB3cml0aW5nIHNvbWUgcGF0dGVybnMgKDB4YWEsIDB4NTUsIDB4ZmYsIDB4MDApIG9uCitldmVyeSBibG9jayBvZiB0aGUgZGV2aWNlLCByZWFkaW5nIGV2ZXJ5IGJsb2NrIGFuZCBjb21wYXJpbmcgdGhlIGNvbnRlbnRzLiAgCitUaGlzIG9wdGlvbiBtYXkgbm90IGJlIGNvbWJpbmVkIHdpdGggdGhlIAorLkIgXC1uIAorb3B0aW9uLCBhcyB0aGV5IGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisuVFAKKy5CIFwtQgorVXNlIGJ1ZmZlcmVkIEkvTyBhbmQgZG8gbm90IHVzZSBEaXJlY3QgSS9PLCBldmVuIGlmIGl0IGlzIGF2YWlsYWJsZS4KKy5UUAorLkIgXC1YCitJbnRlcm5hbCBmbGFnIG9ubHkgdG8gYmUgdXNlZCBieQorLkJSIGUyZnNjayAoOCkKK2FuZAorLkJSIG1rZTJmcyAoOCkuCitJdCBieXBhc3NlcyB0aGUgZXhjbHVzaXZlIG1vZGUgaW4tdXNlIGRldmljZSBzYWZldHkgY2hlY2suCisuU0ggV0FSTklORworTmV2ZXIgdXNlIHRoZQorLkIgXC13CitvcHRpb24gb24gYSBkZXZpY2UgY29udGFpbmluZyBhbiBleGlzdGluZyBmaWxlIHN5c3RlbS4KK1RoaXMgb3B0aW9uIGVyYXNlcyBkYXRhISAgSWYgeW91IHdhbnQgdG8gZG8gd3JpdGUtbW9kZSB0ZXN0aW5nIG9uCithbiBleGlzdGluZyBmaWxlIHN5c3RlbSwgdXNlIHRoZQorLkIgXC1uCitvcHRpb24gaW5zdGVhZC4gIEl0IGlzIHNsb3dlciwgYnV0IGl0IHdpbGwgcHJlc2VydmUgeW91ciBkYXRhLiAgCisuUFAKK1RoZQorLkIgXC1lCitvcHRpb24gd2lsbCBjYXVzZSBiYWRibG9ja3MgdG8gb3V0cHV0IGEgcG9zc2libHkgaW5jb21wbGV0ZSBsaXN0IG9mCitiYWQgYmxvY2tzLiBUaGVyZWZvcmUgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGl0IG9ubHkgd2hlbiBvbmUgd2FudHMKK3RvIGtub3cgaWYgdGhlcmUgYXJlIGFueSBiYWQgYmxvY2tzIGF0IGFsbCBvbiB0aGUgZGV2aWNlLCBhbmQgbm90IHdoZW4KK3RoZSBsaXN0IG9mIGJhZCBibG9ja3MgaXMgd2FudGVkLgorLlNIIEFVVEhPUgorLkIgYmFkYmxvY2tzCit3YXMgd3JpdHRlbiBieSBSZW15IENhcmQgPFJlbXkuQ2FyZEBsaW51eC5vcmc+LiAgQ3VycmVudCBtYWludGFpbmVyIGlzCitUaGVvZG9yZSBUcydvIDx0eXRzb0BhbHVtLm1pdC5lZHU+LiAgTm9uLWRlc3RydWN0aXZlIHJlYWQvd3JpdGUgdGVzdAoraW1wbGVtZW50ZWQgYnkgRGF2aWQgQmVhdHRpZSA8ZGJlYXR0aWVAc29mdGhvbWUubmV0Pi4KKy5TSCBBVkFJTEFCSUxJVFkKKy5CIGJhZGJsb2NrcworaXMgcGFydCBvZiB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgYW5kIGlzIGF2YWlsYWJsZSBmcm9tIAoraHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQuCisuU0ggU0VFIEFMU08KKy5CUiBlMmZzY2sgKDgpLAorLkJSIG1rZTJmcyAoOCkKZGlmZiAtLWdpdCBhL21pc2MvYmFkYmxvY2tzLmMgYi9taXNjL2JhZGJsb2Nrcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjhlZTAKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2JhZGJsb2Nrcy5jCkBAIC0wLDAgKzEsMTM0OCBAQAorLyoKKyAqIGJhZGJsb2Nrcy5jCQktIEJhZCBibG9ja3MgY2hlY2tlcgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiBDb3B5cmlnaHQgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSBieSBUaGVvZG9yZSBUcydvCisgKiBDb3B5cmlnaHQgMTk5OSBieSBEYXZpZCBCZWF0dGllCisgKgorICogVGhpcyBmaWxlIGlzIGJhc2VkIG9uIHRoZSBtaW5peCBmaWxlIHN5c3RlbSBwcm9ncmFtcyBmc2NrIGFuZCBta2ZzCisgKiB3cml0dGVuIGFuZCBjb3B5cmlnaHRlZCBieSBMaW51cyBUb3J2YWxkcyA8TGludXMuVG9ydmFsZHNAY3MuaGVsc2lua2kuZmk+CisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisvKgorICogSGlzdG9yeToKKyAqIDkzLzA1LzI2CS0gQ3JlYXRpb24gZnJvbSBlMmZzY2sKKyAqIDk0LzAyLzI3CS0gTWFkZSBhIHNlcGFyYXRlIGJhZCBibG9ja3MgY2hlY2tlcgorICogOTkvMDYvMzAuLi45OS8wNy8yNiAtIEFkZGVkIG5vbi1kZXN0cnVjdGl2ZSB3cml0ZS10ZXN0aW5nLAorICogICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZSBibG9ja3MtYXQtb25jZSBwYXJhbWV0ZXIsCisgKiAJCQkgbG9hZGluZyBvZiBiYWRibG9ja3MgbGlzdCB0byBhdm9pZCB0ZXN0aW5nCisgKiAJCQkgYmxvY2tzIGtub3duIHRvIGJlIGJhZCwgbXVsdGlwbGUgcGFzc2VzIHRvCisgKiAJCQkgbWFrZSBzdXJlIHRoYXQgbm8gbmV3IGJsb2NrcyBhcmUgYWRkZWQgdG8gdGhlCisgKiAJCQkgbGlzdC4gIChXb3JrIGRvbmUgYnkgRGF2aWQgQmVhdHRpZSkKKyAqLworCisjaWZuZGVmIF9HTlVfU09VUkNFCisjZGVmaW5lIF9HTlVfU09VUkNFIC8qIGZvciBPX0RJUkVDVCAqLworI2VuZGlmCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c2V0am1wLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9pby5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKworI2lmbmRlZiBPX0xBUkdFRklMRQorI2RlZmluZSBPX0xBUkdFRklMRSAwCisjZW5kaWYKKworLyogTWF4aW11bSBudW1iZXIgb2YgYmFkIGJsb2NrcyB3ZSBzdXBwb3J0ICovCisjZGVmaW5lIE1BWF9CQURfQkxPQ0tTIChJTlRfTUFYLzIpCisKK3N0YXRpYyBjb25zdCBjaGFyICogcHJvZ3JhbV9uYW1lID0gImJhZGJsb2NrcyI7CitzdGF0aWMgY29uc3QgY2hhciAqIGRvbmVfc3RyaW5nID0gTl8oImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iKTsKKworc3RhdGljIGludCB2X2ZsYWc7CQkJLyogdmVyYm9zZSAqLworc3RhdGljIGludCB3X2ZsYWc7CQkJLyogZG8gci93IHRlc3Q6IDA9bm8sIDE9eWVzLAorCQkJCQkgKiAyPW5vbi1kZXN0cnVjdGl2ZSAqLworc3RhdGljIGludCBzX2ZsYWc7CQkJLyogc2hvdyBwcm9ncmVzcyBvZiB0ZXN0ICovCitzdGF0aWMgaW50IGZvcmNlOwkJCS8qIGZvcmNlIGNoZWNrIG9mIG1vdW50ZWQgZGV2aWNlICovCitzdGF0aWMgaW50IHRfZmxhZzsJCQkvKiBudW1iZXIgb2YgdGVzdCBwYXR0ZXJucyAqLworc3RhdGljIGludCB0X21heDsJCQkvKiBhbGxvY2F0ZWQgdGVzdCBwYXR0ZXJucyAqLworc3RhdGljIHVuc2lnbmVkIGludCAqdF9wYXR0czsJCS8qIHRlc3QgcGF0dGVybnMgKi8KK3N0YXRpYyBpbnQgdXNlX2J1ZmZlcmVkX2lvOworc3RhdGljIGludCBleGNsdXNpdmVfb2s7CitzdGF0aWMgdW5zaWduZWQgaW50IG1heF9iYiA9IE1BWF9CQURfQkxPQ0tTOwkvKiBBYm9ydCB0ZXN0IGlmIG1vcmUgdGhhbiB0aGlzCisJCQkJCQkgKiBudW1iZXIgb2YgYmFkIGJsb2NrcyBoYXMgYmVlbgorCQkJCQkJICogZW5jb3VudGVyZWQgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZF9mbGFnOwkJLyogZGVsYXkgZmFjdG9yIGJldHdlZW4gcmVhZHMgKi8KK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0aW1lX3N0YXJ0OworCisjZGVmaW5lIFRfSU5DIDMyCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3lzX3BhZ2Vfc2l6ZSA9IDQwOTY7CisKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsIF8oCisiVXNhZ2U6ICVzIFstYiBibG9ja19zaXplXSBbLWkgaW5wdXRfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxvY2tzX2F0X29uY2VdIFstZCBkZWxheV9mYWN0b3JfYmV0d2Vlbl9yZWFkc10gWy1lIG1heF9iYWRfYmxvY2tzXVxuIgorIiAgICAgICBbLXAgbnVtX3Bhc3Nlc10gWy10IHRlc3RfcGF0dGVybiBbLXQgdGVzdF9wYXR0ZXJuIFsuLi5dXV1cbiIKKyIgICAgICAgZGV2aWNlIFtsYXN0X2Jsb2NrIFtmaXJzdF9ibG9ja11dXG4iKSwKKwkJIHByb2dyYW1fbmFtZSk7CisJZXhpdCAoMSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4Y2x1c2l2ZV91c2FnZSh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLAorCQlfKCIlczogVGhlIC1uIGFuZCAtdyBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuXG5cbiIpLAorCQlwcm9ncmFtX25hbWUpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyBibGtfdCBjdXJyZW50bHlfdGVzdGluZyA9IDA7CitzdGF0aWMgYmxrX3QgbnVtX2Jsb2NrcyA9IDA7CitzdGF0aWMgYmxrX3QgbnVtX3JlYWRfZXJyb3JzID0gMDsKK3N0YXRpYyBibGtfdCBudW1fd3JpdGVfZXJyb3JzID0gMDsKK3N0YXRpYyBibGtfdCBudW1fY29ycnVwdGlvbl9lcnJvcnMgPSAwOworc3RhdGljIGV4dDJfYmFkYmxvY2tzX2xpc3QgYmJfbGlzdCA9IE5VTEw7CitzdGF0aWMgRklMRSAqb3V0Oworc3RhdGljIGJsa190IG5leHRfYmFkID0gMDsKK3N0YXRpYyBleHQyX2JhZGJsb2Nrc19pdGVyYXRlIGJiX2l0ZXIgPSBOVUxMOworCitlbnVtIGVycm9yX3R5cGVzIHsgUkVBRF9FUlJPUiwgV1JJVEVfRVJST1IsIENPUlJVUFRJT05fRVJST1IgfTsKKworc3RhdGljIHZvaWQgKmFsbG9jYXRlX2J1ZmZlcihzaXplX3Qgc2l6ZSkKK3sKKwl2b2lkCSpyZXQgPSAwOworCisjaWZkZWYgSEFWRV9QT1NJWF9NRU1BTElHTgorCWlmIChwb3NpeF9tZW1hbGlnbigmcmV0LCBzeXNfcGFnZV9zaXplLCBzaXplKSA8IDApCisJCXJldCA9IDA7CisjZWxzZQorI2lmZGVmIEhBVkVfTUVNQUxJR04KKwlyZXQgPSBtZW1hbGlnbihzeXNfcGFnZV9zaXplLCBzaXplKTsKKyNlbHNlCisjaWZkZWYgSEFWRV9WQUxMT0MKKwlyZXQgPSB2YWxsb2Moc2l6ZSk7CisjZW5kaWYgLyogSEFWRV9WQUxMT0MgKi8KKyNlbmRpZiAvKiBIQVZFX01FTUFMSUdOICovCisjZW5kaWYgLyogSEFWRV9QT1NJWF9NRU1BTElHTiAqLworCisJaWYgKCFyZXQpCisJCXJldCA9IG1hbGxvYyhzaXplKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgcmVwb3J0cyBhIG5ldyBiYWQgYmxvY2suICBJZiB0aGUgYmFkIGJsb2NrIGhhcyBhbHJlYWR5CisgKiBiZWVuIHNlZW4gYmVmb3JlLCB0aGVuIGl0IHJldHVybnMgMDsgb3RoZXJ3aXNlIGl0IHJldHVybnMgMS4KKyAqLworc3RhdGljIGludCBiYl9vdXRwdXQgKGJsa190IGJhZCwgZW51bSBlcnJvcl90eXBlcyBlcnJvcl90eXBlKQoreworCWVycmNvZGVfdCBlcnJjb2RlOworCisJaWYgKGV4dDJmc19iYWRibG9ja3NfbGlzdF90ZXN0KGJiX2xpc3QsIGJhZCkpCisJCXJldHVybiAwOworCisJZnByaW50ZihvdXQsICIlbHVcbiIsICh1bnNpZ25lZCBsb25nKSBiYWQpOworCWZmbHVzaChvdXQpOworCisJZXJyY29kZSA9IGV4dDJmc19iYWRibG9ja3NfbGlzdF9hZGQgKGJiX2xpc3QsIGJhZCk7CisJaWYgKGVycmNvZGUpIHsKKwkJY29tX2VyciAocHJvZ3JhbV9uYW1lLCBlcnJjb2RlLCAiYWRkaW5nIHRvIGluLW1lbW9yeSBiYWQgYmxvY2sgbGlzdCIpOworCQlleGl0ICgxKTsKKwl9CisKKwkvKiBrbHVkZ2U6CisJICAgaW5jcmVtZW50IHRoZSBpdGVyYXRpb24gdGhyb3VnaCB0aGUgYmJfbGlzdCBpZgorCSAgIGFuIGVsZW1lbnQgd2FzIGp1c3QgYWRkZWQgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZXJhdGlvbgorCSAgIHBvc2l0aW9uLiAgVGhpcyBzaG91bGQgbm90IGNhdXNlIG5leHRfYmFkIHRvIGNoYW5nZS4gKi8KKwlpZiAoYmJfaXRlciAmJiBiYWQgPCBuZXh0X2JhZCkKKwkJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGUgKGJiX2l0ZXIsICZuZXh0X2JhZCk7CisKKwlpZiAoZXJyb3JfdHlwZSA9PSBSRUFEX0VSUk9SKSB7CisJICBudW1fcmVhZF9lcnJvcnMrKzsKKwl9IGVsc2UgaWYgKGVycm9yX3R5cGUgPT0gV1JJVEVfRVJST1IpIHsKKwkgIG51bV93cml0ZV9lcnJvcnMrKzsKKwl9IGVsc2UgaWYgKGVycm9yX3R5cGUgPT0gQ09SUlVQVElPTl9FUlJPUikgeworCSAgbnVtX2NvcnJ1cHRpb25fZXJyb3JzKys7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgY2hhciAqdGltZV9kaWZmX2Zvcm1hdChzdHJ1Y3QgdGltZXZhbCAqdHYxLAorCQkJICAgICAgc3RydWN0IHRpbWV2YWwgKnR2MiwgY2hhciAqYnVmKQoreworICAgICAgICB0aW1lX3QJZGlmZiA9ICh0djEtPnR2X3NlYyAtIHR2Mi0+dHZfc2VjKTsKKwlpbnQJaHIsbWluLHNlYzsKKworCXNlYyA9IGRpZmYgJSA2MDsKKwlkaWZmIC89IDYwOworCW1pbiA9IGRpZmYgJSA2MDsKKwlociA9IGRpZmYgLyA2MDsKKworCWlmIChocikKKwkJc3ByaW50ZihidWYsICIlZDolMDJkOiUwMmQiLCBociwgbWluLCBzZWMpOworCWVsc2UKKwkJc3ByaW50ZihidWYsICIlZDolMDJkIiwgbWluLCBzZWMpOworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyBmbG9hdCBjYWxjX3BlcmNlbnQodW5zaWduZWQgbG9uZyBjdXJyZW50LCB1bnNpZ25lZCBsb25nIHRvdGFsKSB7CisJZmxvYXQgcGVyY2VudCA9IDAuMDsKKwlpZiAodG90YWwgPD0gMCkKKwkJcmV0dXJuIHBlcmNlbnQ7CisJaWYgKGN1cnJlbnQgPj0gdG90YWwpIHsKKwkJcGVyY2VudCA9IDEwMC4wOworCX0gZWxzZSB7CisJCXBlcmNlbnQ9KDEwMC4wKihmbG9hdCljdXJyZW50LyhmbG9hdCl0b3RhbCk7CisJfQorCXJldHVybiBwZXJjZW50OworfQorCitzdGF0aWMgdm9pZCBwcmludF9zdGF0dXModm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lX2VuZDsKKwljaGFyIGRpZmZfYnVmWzMyXSwgbGluZV9idWZbMTI4XTsKKwlpbnQgbGVuOworCisJZ2V0dGltZW9mZGF5KCZ0aW1lX2VuZCwgMCk7CisJbGVuID0gc25wcmludGYobGluZV9idWYsIHNpemVvZihsaW5lX2J1ZiksIAorCQkgICAgICAgXygiJTYuMmYlJSBkb25lLCAlcyBlbGFwc2VkLiAiCisJCSAgICAgICAgICIoJWQvJWQvJWQgZXJyb3JzKSIpLAorCQkgICAgICAgY2FsY19wZXJjZW50KCh1bnNpZ25lZCBsb25nKSBjdXJyZW50bHlfdGVzdGluZywKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcpIG51bV9ibG9ja3MpLCAKKwkJICAgICAgIHRpbWVfZGlmZl9mb3JtYXQoJnRpbWVfZW5kLCAmdGltZV9zdGFydCwgZGlmZl9idWYpLAorCQkgICAgICAgbnVtX3JlYWRfZXJyb3JzLAorCQkgICAgICAgbnVtX3dyaXRlX2Vycm9ycywKKwkJICAgICAgIG51bV9jb3JydXB0aW9uX2Vycm9ycyk7CisjaWZkZWYgSEFWRV9NQlNUT1dDUworCWxlbiA9IG1ic3Rvd2NzKE5VTEwsIGxpbmVfYnVmLCBzaXplb2YobGluZV9idWYpKTsKKyNlbmRpZgorCWZwdXRzKGxpbmVfYnVmLCBzdGRlcnIpOworCW1lbXNldChsaW5lX2J1ZiwgJ1xiJywgbGVuKTsKKwlsaW5lX2J1ZltsZW5dID0gMDsKKwlmcHV0cyhsaW5lX2J1Ziwgc3RkZXJyKTsJCisJZmZsdXNoIChzdGRlcnIpOworfQorCitzdGF0aWMgdm9pZCBhbGFybV9pbnRyKGludCBhbG51bSBFWFQyRlNfQVRUUigodW51c2VkKSkpCit7CisJc2lnbmFsIChTSUdBTFJNLCBhbGFybV9pbnRyKTsKKwlhbGFybSgxKTsKKwlpZiAoIW51bV9ibG9ja3MpCisJCXJldHVybjsKKwlwcmludF9zdGF0dXMoKTsKK30KKworc3RhdGljIHZvaWQgKnRlcm1pbmF0ZV9hZGRyID0gTlVMTDsKKworc3RhdGljIHZvaWQgdGVybWluYXRlX2ludHIoaW50IHNpZ25vIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlmZmx1c2gob3V0KTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuXG5JbnRlcnJ1cHRlZCBhdCBibG9jayAlbGx1XG4iLCAKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZykgY3VycmVudGx5X3Rlc3RpbmcpOworCWZmbHVzaChzdGRlcnIpOworCWlmICh0ZXJtaW5hdGVfYWRkcikKKwkJbG9uZ2ptcCh0ZXJtaW5hdGVfYWRkciwxKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgdm9pZCBjYXB0dXJlX3Rlcm1pbmF0ZShqbXBfYnVmIHRlcm1fYWRkcikKK3sKKwl0ZXJtaW5hdGVfYWRkciA9IHRlcm1fYWRkcjsKKwlzaWduYWwgKFNJR0hVUCwgdGVybWluYXRlX2ludHIpOworCXNpZ25hbCAoU0lHSU5ULCB0ZXJtaW5hdGVfaW50cik7CisJc2lnbmFsIChTSUdQSVBFLCB0ZXJtaW5hdGVfaW50cik7CisJc2lnbmFsIChTSUdURVJNLCB0ZXJtaW5hdGVfaW50cik7CisJc2lnbmFsIChTSUdVU1IxLCB0ZXJtaW5hdGVfaW50cik7CisJc2lnbmFsIChTSUdVU1IyLCB0ZXJtaW5hdGVfaW50cik7Cit9CisKK3N0YXRpYyB2b2lkIHVuY2FwdHVyZV90ZXJtaW5hdGUodm9pZCkKK3sKKwl0ZXJtaW5hdGVfYWRkciA9IE5VTEw7CisJc2lnbmFsIChTSUdIVVAsIFNJR19ERkwpOworCXNpZ25hbCAoU0lHSU5ULCBTSUdfREZMKTsKKwlzaWduYWwgKFNJR1BJUEUsIFNJR19ERkwpOworCXNpZ25hbCAoU0lHVEVSTSwgU0lHX0RGTCk7CisJc2lnbmFsIChTSUdVU1IxLCBTSUdfREZMKTsKKwlzaWduYWwgKFNJR1VTUjIsIFNJR19ERkwpOworfQorCisvKiBMaW51eCByZXF1aXJlcyB0aGF0IE9fRElSRUNUIEkvT3MgYmUgNTEyLWJ5dGUgc2VjdG9yIGFsaWduZWQgKi8KKworI2RlZmluZSBPX0RJUkVDVF9TSVpFIDUxMgorCitzdGF0aWMgdm9pZCBzZXRfb19kaXJlY3QoaW50IGRldiwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCSBleHQyX2xvZmZfdCBvZmZzZXQpCit7CisjaWZkZWYgT19ESVJFQ1QKKwlzdGF0aWMgaW50IGN1cnJlbnRfT19ESVJFQ1Q7CS8qIEN1cnJlbnQgc3RhdHVzIG9mIE9fRElSRUNUIGZsYWcgKi8KKwlpbnQgbmV3X2ZsYWcgPSBPX0RJUkVDVDsKKwlpbnQgZmxhZzsKKworCWlmICgodXNlX2J1ZmZlcmVkX2lvICE9IDApIHx8CisJICAgICgoKHVuc2lnbmVkIGxvbmcpIGJ1ZmZlciAmIChzeXNfcGFnZV9zaXplIC0gMSkpICE9IDApIHx8CisJICAgICgoc2l6ZSAmIChzeXNfcGFnZV9zaXplIC0gMSkpICE9IDApIHx8CisJICAgICgob2Zmc2V0ICYgKE9fRElSRUNUX1NJWkUgLSAxKSkgIT0gMCkpCisJCW5ld19mbGFnID0gMDsKKworCWlmIChuZXdfZmxhZyAhPSBjdXJyZW50X09fRElSRUNUKSB7CisJICAgICAvKiBwcmludGYoIiVzIE9fRElSRUNUXG4iLCBuZXdfZmxhZyA/ICJTZXR0aW5nIiA6ICJDbGVhcmluZyIpOyAqLworCQlmbGFnID0gZmNudGwoZGV2LCBGX0dFVEZMKTsKKwkJaWYgKGZsYWcgPiAwKSB7CisJCQlmbGFnID0gKGZsYWcgJiB+T19ESVJFQ1QpIHwgbmV3X2ZsYWc7CisJCQlpZiAoZmNudGwoZGV2LCBGX1NFVEZMLCBmbGFnKSA8IDApCisJCQkJcGVycm9yKCJzZXRfb19kaXJlY3QiKTsKKwkJfQorCQljdXJyZW50X09fRElSRUNUID0gbmV3X2ZsYWc7CisJfQorI2VuZGlmCit9CisKKworc3RhdGljIHZvaWQgcGF0dGVybl9maWxsKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHBhdHRlcm4sCisJCQkgc2l6ZV90IG4pCit7CisJdW5zaWduZWQgaW50CWksIG5iOworCXVuc2lnbmVkIGNoYXIJYnBhdHRlcm5bc2l6ZW9mKHBhdHRlcm4pXSwgKnB0cjsKKworCWlmIChwYXR0ZXJuID09ICh1bnNpZ25lZCBpbnQpIH4wKSB7CisJCWZvciAocHRyID0gYnVmZmVyOyBwdHIgPCBidWZmZXIgKyBuOyBwdHIrKykgeworCQkJKCpwdHIpID0gcmFuZG9tKCkgJSAoMSA8PCAoOCAqIHNpemVvZihjaGFyKSkpOworCQl9CisJCWlmIChzX2ZsYWcgfCB2X2ZsYWcpCisJCQlmcHV0cyhfKCJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIpLCBzdGRlcnIpOworCX0gZWxzZSB7CisJCWJwYXR0ZXJuWzBdID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihicGF0dGVybik7IGkrKykgeworCQkJaWYgKHBhdHRlcm4gPT0gMCkKKwkJCQlicmVhazsKKwkJCWJwYXR0ZXJuW2ldID0gcGF0dGVybiAmIDB4RkY7CisJCQlwYXR0ZXJuID0gcGF0dGVybiA+PiA4OworCQl9CisJCW5iID0gaSA/IChpLTEpIDogMDsKKwkJZm9yIChwdHIgPSBidWZmZXIsIGkgPSBuYjsgcHRyIDwgYnVmZmVyICsgbjsgcHRyKyspIHsKKwkJCSpwdHIgPSBicGF0dGVybltpXTsKKwkJCWlmIChpID09IDApCisJCQkJaSA9IG5iOworCQkJZWxzZQorCQkJCWktLTsKKwkJfQorCQlpZiAoc19mbGFnIHwgdl9mbGFnKSB7CisJCQlmcHV0cyhfKCJUZXN0aW5nIHdpdGggcGF0dGVybiAweCIpLCBzdGRlcnIpOworCQkJZm9yIChpID0gMDsgaSA8PSBuYjsgaSsrKQorCQkJCWZwcmludGYoc3RkZXJyLCAiJTAyeCIsIGJ1ZmZlcltpXSk7CisJCQlmcHV0cygiOiAiLCBzdGRlcnIpOworCQl9CisJfQorfQorCisvKgorICogUGVyZm9ybSBhIHJlYWQgb2YgYSBzZXF1ZW5jZSBvZiBibG9ja3M7IHJldHVybiB0aGUgbnVtYmVyIG9mIGJsb2NrcworICogICAgc3VjY2Vzc2Z1bGx5IHNlcXVlbnRpYWxseSByZWFkLgorICovCitzdGF0aWMgaW50IGRvX3JlYWQgKGludCBkZXYsIHVuc2lnbmVkIGNoYXIgKiBidWZmZXIsIGludCB0cnksIGludCBibG9ja19zaXplLAorCQkgICAgYmxrX3QgY3VycmVudF9ibG9jaykKK3sKKwlsb25nIGdvdDsKKwlzdHJ1Y3QgdGltZXZhbCB0djEsIHR2MjsKKyNkZWZpbmUgTkFOT1NFQyAoMTAwMDAwMDAwMEwpCisjZGVmaW5lIE1JTElTRUMgKDEwMDBMKQorCisjaWYgMAorCXByaW50ZigiZG9fcmVhZDogYmxvY2sgJWQsIHRyeSAlZFxuIiwgY3VycmVudF9ibG9jaywgdHJ5KTsKKyNlbmRpZgorCXNldF9vX2RpcmVjdChkZXYsIGJ1ZmZlciwgdHJ5ICogYmxvY2tfc2l6ZSwKKwkJICAgICAoKGV4dDJfbG9mZl90KSBjdXJyZW50X2Jsb2NrKSAqIGJsb2NrX3NpemUpOworCisJaWYgKHZfZmxhZyA+IDEpCisJCXByaW50X3N0YXR1cygpOworCisJLyogU2VlayB0byB0aGUgY29ycmVjdCBsb2MuICovCisJaWYgKGV4dDJmc19sbHNlZWsgKGRldiwgKGV4dDJfbG9mZl90KSBjdXJyZW50X2Jsb2NrICogYmxvY2tfc2l6ZSwKKwkJCSBTRUVLX1NFVCkgIT0gKGV4dDJfbG9mZl90KSBjdXJyZW50X2Jsb2NrICogYmxvY2tfc2l6ZSkKKwkJY29tX2VyciAocHJvZ3JhbV9uYW1lLCBlcnJubywgIiVzIiwgXygiZHVyaW5nIHNlZWsiKSk7CisKKwkvKiBUcnkgdGhlIHJlYWQgKi8KKwlpZiAoZF9mbGFnKQorCQlnZXR0aW1lb2ZkYXkoJnR2MSwgTlVMTCk7CisJZ290ID0gcmVhZCAoZGV2LCBidWZmZXIsIHRyeSAqIGJsb2NrX3NpemUpOworCWlmIChkX2ZsYWcpCisJCWdldHRpbWVvZmRheSgmdHYyLCBOVUxMKTsKKwlpZiAoZ290IDwgMCkKKwkJZ290ID0gMDsKKwlpZiAoZ290ICYgNTExKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIiksIGdvdCk7CisJZ290IC89IGJsb2NrX3NpemU7CisJaWYgKGRfZmxhZyAmJiBnb3QgPT0gdHJ5KSB7CisjaWZkZWYgSEFWRV9OQU5PU0xFRVAKKwkJc3RydWN0IHRpbWVzcGVjIHRzOworCQl0cy50dl9zZWMgPSB0djIudHZfc2VjIC0gdHYxLnR2X3NlYzsKKwkJdHMudHZfbnNlYyA9ICh0djIudHZfdXNlYyAtIHR2MS50dl91c2VjKSAqIE1JTElTRUM7CisJCWlmICh0cy50dl9uc2VjIDwgMCkgeworCQkJdHMudHZfbnNlYyArPSBOQU5PU0VDOworCQkJdHMudHZfc2VjIC09IDE7CisJCX0KKwkJLyogaW5jcmVhc2UvZGVjcmVhc2UgdGhlIHNsZWVwIHRpbWUgYmFzZWQgb24gZF9mbGFnIHZhbHVlICovCisJCXRzLnR2X3NlYyA9IHRzLnR2X3NlYyAqIGRfZmxhZyAvIDEwMDsKKwkJdHMudHZfbnNlYyA9IHRzLnR2X25zZWMgKiBkX2ZsYWcgLyAxMDA7CisJCWlmICh0cy50dl9uc2VjID4gTkFOT1NFQykgeworCQkJdHMudHZfc2VjICs9IHRzLnR2X25zZWMgLyBOQU5PU0VDOworCQkJdHMudHZfbnNlYyAlPSBOQU5PU0VDOworCQl9CisJCWlmICh0cy50dl9zZWMgfHwgdHMudHZfbnNlYykKKwkJCW5hbm9zbGVlcCgmdHMsIE5VTEwpOworI2Vsc2UKKyNpZmRlZiBIQVZFX1VTTEVFUAorCQlzdHJ1Y3QgdGltZXZhbCB0djsKKwkJdHYudHZfc2VjID0gdHYyLnR2X3NlYyAtIHR2MS50dl9zZWM7CisJCXR2LnR2X3VzZWMgPSB0djIudHZfdXNlYyAtIHR2MS50dl91c2VjOworCQl0di50dl9zZWMgPSB0di50dl9zZWMgKiBkX2ZsYWcgLyAxMDA7CisJCXR2LnR2X3VzZWMgPSB0di50dl91c2VjICogZF9mbGFnIC8gMTAwOworCQlpZiAodHYudHZfdXNlYyA+IDEwMDAwMDApIHsKKwkJCXR2LnR2X3NlYyArPSB0di50dl91c2VjIC8gMTAwMDAwMDsKKwkJCXR2LnR2X3VzZWMgJT0gMTAwMDAwMDsKKwkJfQorCQlpZiAodHYudHZfc2VjKQorCQkJc2xlZXAodHYudHZfc2VjKTsKKwkJaWYgKHR2LnR2X3VzZWMpCisJCQl1c2xlZXAodHYudHZfdXNlYyk7CisjZW5kaWYKKyNlbmRpZgorCX0KKwlyZXR1cm4gZ290OworfQorCisvKgorICogUGVyZm9ybSBhIHdyaXRlIG9mIGEgc2VxdWVuY2Ugb2YgYmxvY2tzOyByZXR1cm4gdGhlIG51bWJlciBvZiBibG9ja3MKKyAqICAgIHN1Y2Nlc3NmdWxseSBzZXF1ZW50aWFsbHkgd3JpdHRlbi4KKyAqLworc3RhdGljIGludCBkb193cml0ZShpbnQgZGV2LCB1bnNpZ25lZCBjaGFyICogYnVmZmVyLCBpbnQgdHJ5LCBpbnQgYmxvY2tfc2l6ZSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgY3VycmVudF9ibG9jaykKK3sKKwlsb25nIGdvdDsKKworI2lmIDAKKwlwcmludGYoImRvX3dyaXRlOiBibG9jayAlbHUsIHRyeSAlZFxuIiwgY3VycmVudF9ibG9jaywgdHJ5KTsKKyNlbmRpZgorCXNldF9vX2RpcmVjdChkZXYsIGJ1ZmZlciwgdHJ5ICogYmxvY2tfc2l6ZSwKKwkJICAgICAoKGV4dDJfbG9mZl90KSBjdXJyZW50X2Jsb2NrKSAqIGJsb2NrX3NpemUpOworCisJaWYgKHZfZmxhZyA+IDEpCisJCXByaW50X3N0YXR1cygpOworCisJLyogU2VlayB0byB0aGUgY29ycmVjdCBsb2MuICovCisJaWYgKGV4dDJmc19sbHNlZWsgKGRldiwgKGV4dDJfbG9mZl90KSBjdXJyZW50X2Jsb2NrICogYmxvY2tfc2l6ZSwKKwkJCSBTRUVLX1NFVCkgIT0gKGV4dDJfbG9mZl90KSBjdXJyZW50X2Jsb2NrICogYmxvY2tfc2l6ZSkKKwkJY29tX2VyciAocHJvZ3JhbV9uYW1lLCBlcnJubywgIiVzIiwgXygiZHVyaW5nIHNlZWsiKSk7CisKKwkvKiBUcnkgdGhlIHdyaXRlICovCisJZ290ID0gd3JpdGUgKGRldiwgYnVmZmVyLCB0cnkgKiBibG9ja19zaXplKTsKKwlpZiAoZ290IDwgMCkKKwkJZ290ID0gMDsKKwlpZiAoZ290ICYgNTExKQorCQlmcHJpbnRmKHN0ZGVyciwgIldlaXJkIHZhbHVlICglbGQpIGluIGRvX3dyaXRlXG4iLCBnb3QpOworCWdvdCAvPSBibG9ja19zaXplOworCXJldHVybiBnb3Q7Cit9CisKK3N0YXRpYyBpbnQgaG9zdF9kZXY7CisKK3N0YXRpYyB2b2lkIGZsdXNoX2J1ZnModm9pZCkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCisjaWZkZWYgT19ESVJFQ1QKKwlpZiAoIXVzZV9idWZmZXJlZF9pbykKKwkJcmV0dXJuOworI2VuZGlmCisJcmV0dmFsID0gZXh0MmZzX3N5bmNfZGV2aWNlKGhvc3RfZGV2LCAxKTsKKwlpZiAocmV0dmFsKQorCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygiZHVyaW5nIGV4dDJmc19zeW5jX2RldmljZSIpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB0ZXN0X3JvIChpbnQgZGV2LCBibGtfdCBsYXN0X2Jsb2NrLAorCQkJICAgICBpbnQgYmxvY2tfc2l6ZSwgYmxrX3QgZmlyc3RfYmxvY2ssCisJCQkgICAgIHVuc2lnbmVkIGludCBibG9ja3NfYXRfb25jZSkKK3sKKwl1bnNpZ25lZCBjaGFyICogYmxrYnVmOworCWludCB0cnk7CisJaW50IGdvdDsKKwl1bnNpZ25lZCBpbnQgYmJfY291bnQgPSAwOworCWVycmNvZGVfdCBlcnJjb2RlOworCWJsa190IHJlY292ZXJfYmxvY2sgPSB+MDsKKworCS8qIHNldCB1cCBhYmVuZCBoYW5kbGVyICovCisJY2FwdHVyZV90ZXJtaW5hdGUoTlVMTCk7CisKKwllcnJjb2RlID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfYmVnaW4oYmJfbGlzdCwmYmJfaXRlcik7CisJaWYgKGVycmNvZGUpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIGVycmNvZGUsICIlcyIsCisJCQlfKCJ3aGlsZSBiZWdpbm5pbmcgYmFkIGJsb2NrIGxpc3QgaXRlcmF0aW9uIikpOworCQlleGl0ICgxKTsKKwl9CisJZG8geworCQlleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZSAoYmJfaXRlciwgJm5leHRfYmFkKTsKKwl9IHdoaWxlIChuZXh0X2JhZCAmJiBuZXh0X2JhZCA8IGZpcnN0X2Jsb2NrKTsKKworCWlmICh0X2ZsYWcpIHsKKwkJYmxrYnVmID0gYWxsb2NhdGVfYnVmZmVyKChibG9ja3NfYXRfb25jZSArIDEpICogYmxvY2tfc2l6ZSk7CisJfSBlbHNlIHsKKwkJYmxrYnVmID0gYWxsb2NhdGVfYnVmZmVyKGJsb2Nrc19hdF9vbmNlICogYmxvY2tfc2l6ZSk7CisJfQorCWlmICghYmxrYnVmKQorCXsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIEVOT01FTSwgIiVzIiwKKwkJCV8oIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVycyIpKTsKKwkJZXhpdCAoMSk7CisJfQorCWlmICh2X2ZsYWcpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIkNoZWNraW5nIGJsb2NrcyAlbHUgdG8gJWx1XG4iKSwKKwkJCSh1bnNpZ25lZCBsb25nKWZpcnN0X2Jsb2NrLAorCQkJKHVuc2lnbmVkIGxvbmcpbGFzdF9ibG9jayAtIDEpOworCX0KKwlpZiAodF9mbGFnKSB7CisJCWZwdXRzKF8oIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtb25seSBtb2RlXG4iKSwgc3RkZXJyKTsKKwkJcGF0dGVybl9maWxsKGJsa2J1ZiArIGJsb2Nrc19hdF9vbmNlICogYmxvY2tfc2l6ZSwKKwkJCSAgICAgdF9wYXR0c1swXSwgYmxvY2tfc2l6ZSk7CisJfQorCWZsdXNoX2J1ZnMoKTsKKwl0cnkgPSBibG9ja3NfYXRfb25jZTsKKwljdXJyZW50bHlfdGVzdGluZyA9IGZpcnN0X2Jsb2NrOworCW51bV9ibG9ja3MgPSBsYXN0X2Jsb2NrIC0gMTsKKwlpZiAoIXRfZmxhZyAmJiAoc19mbGFnIHx8IHZfZmxhZykpCisJCWZwdXRzKF8oIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChyZWFkLW9ubHkgdGVzdCk6ICIpLCBzdGRlcnIpOworCWlmIChzX2ZsYWcgJiYgdl9mbGFnIDw9IDEpCisJCWFsYXJtX2ludHIoU0lHQUxSTSk7CisJd2hpbGUgKGN1cnJlbnRseV90ZXN0aW5nIDwgbGFzdF9ibG9jaykKKwl7CisJCWlmIChiYl9jb3VudCA+PSBtYXhfYmIpIHsKKwkJCWlmIChzX2ZsYWcgfHwgdl9mbGFnKSB7CisJCQkJZnB1dHMoXygiVG9vIG1hbnkgYmFkIGJsb2NrcywgYWJvcnRpbmcgdGVzdFxuIiksIHN0ZGVycik7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlpZiAobmV4dF9iYWQpIHsKKwkJCWlmIChjdXJyZW50bHlfdGVzdGluZyA9PSBuZXh0X2JhZCkgeworCQkJCS8qIGZwcmludGYgKG91dCwgIiVsdVxuIiwgbmV4dGJhZCk7ICovCisJCQkJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGUgKGJiX2l0ZXIsICZuZXh0X2JhZCk7CisJCQkJY3VycmVudGx5X3Rlc3RpbmcrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWVsc2UgaWYgKGN1cnJlbnRseV90ZXN0aW5nICsgdHJ5ID4gbmV4dF9iYWQpCisJCQkJdHJ5ID0gbmV4dF9iYWQgLSBjdXJyZW50bHlfdGVzdGluZzsKKwkJfQorCQlpZiAoY3VycmVudGx5X3Rlc3RpbmcgKyB0cnkgPiBsYXN0X2Jsb2NrKQorCQkJdHJ5ID0gbGFzdF9ibG9jayAtIGN1cnJlbnRseV90ZXN0aW5nOworCQlnb3QgPSBkb19yZWFkIChkZXYsIGJsa2J1ZiwgdHJ5LCBibG9ja19zaXplLCBjdXJyZW50bHlfdGVzdGluZyk7CisJCWlmICh0X2ZsYWcpIHsKKwkJCS8qIHRlc3QgdGhlIGNvbXBhcmlzb24gYmV0d2VlbiBhbGwgdGhlCisJCQkgICBibG9ja3Mgc3VjY2Vzc2Z1bGx5IHJlYWQgICovCisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCBnb3Q7ICsraSkKKwkJCQlpZiAobWVtY21wIChibGtidWYraSpibG9ja19zaXplLAorCQkJCQkgICAgYmxrYnVmK2Jsb2Nrc19hdF9vbmNlKmJsb2NrX3NpemUsCisJCQkJCSAgICBibG9ja19zaXplKSkKKwkJCQkJYmJfY291bnQgKz0gYmJfb3V0cHV0KGN1cnJlbnRseV90ZXN0aW5nICsgaSwgQ09SUlVQVElPTl9FUlJPUik7CisJCX0KKwkJaWYgKGdvdCA9PSAwICYmIHRyeSA9PSAxKQorCQkJYmJfY291bnQgKz0gYmJfb3V0cHV0KGN1cnJlbnRseV90ZXN0aW5nKyssIFJFQURfRVJST1IpOworCQljdXJyZW50bHlfdGVzdGluZyArPSBnb3Q7CisJCWlmIChnb3QgIT0gdHJ5KSB7CisJCQl0cnkgPSAxOworCQkJaWYgKHJlY292ZXJfYmxvY2sgPT0gfjBVKQorCQkJCXJlY292ZXJfYmxvY2sgPSBjdXJyZW50bHlfdGVzdGluZyAtIGdvdCArCisJCQkJCWJsb2Nrc19hdF9vbmNlOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoY3VycmVudGx5X3Rlc3RpbmcgPT0gcmVjb3Zlcl9ibG9jaykgeworCQkJdHJ5ID0gYmxvY2tzX2F0X29uY2U7CisJCQlyZWNvdmVyX2Jsb2NrID0gfjA7CisJCX0KKwl9CisJbnVtX2Jsb2NrcyA9IDA7CisJYWxhcm0oMCk7CisJaWYgKHNfZmxhZyB8fCB2X2ZsYWcpCisJCWZwdXRzKF8oZG9uZV9zdHJpbmcpLCBzdGRlcnIpOworCisJZmZsdXNoIChzdGRlcnIpOworCWZyZWUgKGJsa2J1Zik7CisKKwlleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9lbmQoYmJfaXRlcik7CisKKwl1bmNhcHR1cmVfdGVybWluYXRlKCk7CisKKwlyZXR1cm4gYmJfY291bnQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGVzdF9ydyAoaW50IGRldiwgYmxrX3QgbGFzdF9ibG9jaywKKwkJCSAgICAgaW50IGJsb2NrX3NpemUsIGJsa190IGZpcnN0X2Jsb2NrLAorCQkJICAgICB1bnNpZ25lZCBpbnQgYmxvY2tzX2F0X29uY2UpCit7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyLCAqcmVhZF9idWZmZXI7CisJY29uc3QgdW5zaWduZWQgaW50IHBhdHRlcm5zW10gPSB7MHhhYSwgMHg1NSwgMHhmZiwgMHgwMH07CisJY29uc3QgdW5zaWduZWQgaW50ICpwYXR0ZXJuOworCWludCBpLCB0cnksIGdvdCwgbnJfcGF0dGVybiwgcGF0X2lkeDsKKwl1bnNpZ25lZCBpbnQgYmJfY291bnQgPSAwOworCWJsa190IHJlY292ZXJfYmxvY2sgPSB+MDsKKworCS8qIHNldCB1cCBhYmVuZCBoYW5kbGVyICovCisJY2FwdHVyZV90ZXJtaW5hdGUoTlVMTCk7CisKKwlidWZmZXIgPSBhbGxvY2F0ZV9idWZmZXIoMiAqIGJsb2Nrc19hdF9vbmNlICogYmxvY2tfc2l6ZSk7CisJcmVhZF9idWZmZXIgPSBidWZmZXIgKyBibG9ja3NfYXRfb25jZSAqIGJsb2NrX3NpemU7CisKKwlpZiAoIWJ1ZmZlcikgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgRU5PTUVNLCAiJXMiLAorCQkJXygid2hpbGUgYWxsb2NhdGluZyBidWZmZXJzIikpOworCQlleGl0ICgxKTsKKwl9CisKKwlmbHVzaF9idWZzKCk7CisKKwlpZiAodl9mbGFnKSB7CisJCWZwdXRzKF8oIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtd3JpdGUgbW9kZVxuIiksCisJCSAgICAgIHN0ZGVycik7CisJCWZwcmludGYoc3RkZXJyLCBfKCJGcm9tIGJsb2NrICVsdSB0byAlbHVcbiIpLAorCQkJKHVuc2lnbmVkIGxvbmcpIGZpcnN0X2Jsb2NrLAorCQkJKHVuc2lnbmVkIGxvbmcpIGxhc3RfYmxvY2sgLSAxKTsKKwl9CisJaWYgKHRfZmxhZykgeworCQlwYXR0ZXJuID0gdF9wYXR0czsKKwkJbnJfcGF0dGVybiA9IHRfZmxhZzsKKwl9IGVsc2UgeworCQlwYXR0ZXJuID0gcGF0dGVybnM7CisJCW5yX3BhdHRlcm4gPSBzaXplb2YocGF0dGVybnMpIC8gc2l6ZW9mKHBhdHRlcm5zWzBdKTsKKwl9CisJZm9yIChwYXRfaWR4ID0gMDsgcGF0X2lkeCA8IG5yX3BhdHRlcm47IHBhdF9pZHgrKykgeworCQlwYXR0ZXJuX2ZpbGwoYnVmZmVyLCBwYXR0ZXJuW3BhdF9pZHhdLAorCQkJICAgICBibG9ja3NfYXRfb25jZSAqIGJsb2NrX3NpemUpOworCQludW1fYmxvY2tzID0gbGFzdF9ibG9jayAtIDE7CisJCWN1cnJlbnRseV90ZXN0aW5nID0gZmlyc3RfYmxvY2s7CisJCWlmIChzX2ZsYWcgJiYgdl9mbGFnIDw9IDEpCisJCQlhbGFybV9pbnRyKFNJR0FMUk0pOworCisJCXRyeSA9IGJsb2Nrc19hdF9vbmNlOworCQl3aGlsZSAoY3VycmVudGx5X3Rlc3RpbmcgPCBsYXN0X2Jsb2NrKSB7CisJCQlpZiAoYmJfY291bnQgPj0gbWF4X2JiKSB7CisJCQkJaWYgKHNfZmxhZyB8fCB2X2ZsYWcpIHsKKwkJCQkJZnB1dHMoXygiVG9vIG1hbnkgYmFkIGJsb2NrcywgYWJvcnRpbmcgdGVzdFxuIiksIHN0ZGVycik7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGN1cnJlbnRseV90ZXN0aW5nICsgdHJ5ID4gbGFzdF9ibG9jaykKKwkJCQl0cnkgPSBsYXN0X2Jsb2NrIC0gY3VycmVudGx5X3Rlc3Rpbmc7CisJCQlnb3QgPSBkb193cml0ZShkZXYsIGJ1ZmZlciwgdHJ5LCBibG9ja19zaXplLAorCQkJCQljdXJyZW50bHlfdGVzdGluZyk7CisJCQlpZiAodl9mbGFnID4gMSkKKwkJCQlwcmludF9zdGF0dXMoKTsKKworCQkJaWYgKGdvdCA9PSAwICYmIHRyeSA9PSAxKQorCQkJCWJiX2NvdW50ICs9IGJiX291dHB1dChjdXJyZW50bHlfdGVzdGluZysrLCBXUklURV9FUlJPUik7CisJCQljdXJyZW50bHlfdGVzdGluZyArPSBnb3Q7CisJCQlpZiAoZ290ICE9IHRyeSkgeworCQkJCXRyeSA9IDE7CisJCQkJaWYgKHJlY292ZXJfYmxvY2sgPT0gfjBVKQorCQkJCQlyZWNvdmVyX2Jsb2NrID0gY3VycmVudGx5X3Rlc3RpbmcgLQorCQkJCQkJZ290ICsgYmxvY2tzX2F0X29uY2U7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKGN1cnJlbnRseV90ZXN0aW5nID09IHJlY292ZXJfYmxvY2spIHsKKwkJCQl0cnkgPSBibG9ja3NfYXRfb25jZTsKKwkJCQlyZWNvdmVyX2Jsb2NrID0gfjA7CisJCQl9CisJCX0KKworCQludW1fYmxvY2tzID0gMDsKKwkJYWxhcm0gKDApOworCQlpZiAoc19mbGFnIHwgdl9mbGFnKQorCQkJZnB1dHMoXyhkb25lX3N0cmluZyksIHN0ZGVycik7CisJCWZsdXNoX2J1ZnMoKTsKKwkJaWYgKHNfZmxhZyB8IHZfZmxhZykKKwkJCWZwdXRzKF8oIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIiksIHN0ZGVycik7CisJCW51bV9ibG9ja3MgPSBsYXN0X2Jsb2NrOworCQljdXJyZW50bHlfdGVzdGluZyA9IGZpcnN0X2Jsb2NrOworCQlpZiAoc19mbGFnICYmIHZfZmxhZyA8PSAxKQorCQkJYWxhcm1faW50cihTSUdBTFJNKTsKKworCQl0cnkgPSBibG9ja3NfYXRfb25jZTsKKwkJd2hpbGUgKGN1cnJlbnRseV90ZXN0aW5nIDwgbGFzdF9ibG9jaykgeworCQkJaWYgKGJiX2NvdW50ID49IG1heF9iYikgeworCQkJCWlmIChzX2ZsYWcgfHwgdl9mbGFnKSB7CisJCQkJCWZwdXRzKF8oIlRvbyBtYW55IGJhZCBibG9ja3MsIGFib3J0aW5nIHRlc3RcbiIpLCBzdGRlcnIpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChjdXJyZW50bHlfdGVzdGluZyArIHRyeSA+IGxhc3RfYmxvY2spCisJCQkJdHJ5ID0gbGFzdF9ibG9jayAtIGN1cnJlbnRseV90ZXN0aW5nOworCQkJZ290ID0gZG9fcmVhZCAoZGV2LCByZWFkX2J1ZmZlciwgdHJ5LCBibG9ja19zaXplLAorCQkJCSAgICAgICBjdXJyZW50bHlfdGVzdGluZyk7CisJCQlpZiAoZ290ID09IDAgJiYgdHJ5ID09IDEpCisJCQkJYmJfY291bnQgKz0gYmJfb3V0cHV0KGN1cnJlbnRseV90ZXN0aW5nKyssIFJFQURfRVJST1IpOworCQkJY3VycmVudGx5X3Rlc3RpbmcgKz0gZ290OworCQkJaWYgKGdvdCAhPSB0cnkpIHsKKwkJCQl0cnkgPSAxOworCQkJCWlmIChyZWNvdmVyX2Jsb2NrID09IH4wVSkKKwkJCQkJcmVjb3Zlcl9ibG9jayA9IGN1cnJlbnRseV90ZXN0aW5nIC0KKwkJCQkJCWdvdCArIGJsb2Nrc19hdF9vbmNlOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChjdXJyZW50bHlfdGVzdGluZyA9PSByZWNvdmVyX2Jsb2NrKSB7CisJCQkJdHJ5ID0gYmxvY2tzX2F0X29uY2U7CisJCQkJcmVjb3Zlcl9ibG9jayA9IH4wVTsKKwkJCX0KKwkJCWZvciAoaT0wOyBpIDwgZ290OyBpKyspIHsKKwkJCQlpZiAobWVtY21wKHJlYWRfYnVmZmVyICsgaSAqIGJsb2NrX3NpemUsCisJCQkJCSAgIGJ1ZmZlciArIGkgKiBibG9ja19zaXplLAorCQkJCQkgICBibG9ja19zaXplKSkKKwkJCQkJYmJfY291bnQgKz0gYmJfb3V0cHV0KGN1cnJlbnRseV90ZXN0aW5nK2ksIENPUlJVUFRJT05fRVJST1IpOworCQkJfQorCQkJaWYgKHZfZmxhZyA+IDEpCisJCQkJcHJpbnRfc3RhdHVzKCk7CisJCX0KKworCQludW1fYmxvY2tzID0gMDsKKwkJYWxhcm0gKDApOworCQlpZiAoc19mbGFnIHwgdl9mbGFnKQorCQkJZnB1dHMoXyhkb25lX3N0cmluZyksIHN0ZGVycik7CisJCWZsdXNoX2J1ZnMoKTsKKwl9CisJdW5jYXB0dXJlX3Rlcm1pbmF0ZSgpOworCWZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gYmJfY291bnQ7Cit9CisKK3N0cnVjdCBzYXZlZF9ibGtfcmVjb3JkIHsKKwlibGtfdAlibG9jazsKKwlpbnQJbnVtOworfTsKKworc3RhdGljIHVuc2lnbmVkIGludCB0ZXN0X25kIChpbnQgZGV2LCBibGtfdCBsYXN0X2Jsb2NrLAorCQkJICAgICBpbnQgYmxvY2tfc2l6ZSwgYmxrX3QgZmlyc3RfYmxvY2ssCisJCQkgICAgIHVuc2lnbmVkIGludCBibG9ja3NfYXRfb25jZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpibGtidWYsICpzYXZlX3B0ciwgKnRlc3RfcHRyLCAqcmVhZF9wdHI7CisJdW5zaWduZWQgY2hhciAqdGVzdF9iYXNlLCAqc2F2ZV9iYXNlLCAqcmVhZF9iYXNlOworCWludCB0cnksIGk7CisJY29uc3QgdW5zaWduZWQgaW50IHBhdHRlcm5zW10gPSB7IH4wIH07CisJY29uc3QgdW5zaWduZWQgaW50ICpwYXR0ZXJuOworCWludCBucl9wYXR0ZXJuLCBwYXRfaWR4OworCWludCBnb3QsIHVzZWQyLCB3cml0dGVuOworCWJsa190IHNhdmVfY3VycmVudGx5X3Rlc3Rpbmc7CisJc3RydWN0IHNhdmVkX2Jsa19yZWNvcmQgKnRlc3RfcmVjb3JkOworCS8qIFRoaXMgaXMgc3RhdGljIHRvIHByZXZlbnQgYmVpbmcgY2xvYmJlcmVkIGJ5IHRoZSBsb25nam1wICovCisJc3RhdGljIGludCBudW1fc2F2ZWQ7CisJam1wX2J1ZiB0ZXJtaW5hdGVfZW52OworCWVycmNvZGVfdCBlcnJjb2RlOworCXVuc2lnbmVkIGxvbmcgYnVmX3VzZWQ7CisJc3RhdGljIHVuc2lnbmVkIGludCBiYl9jb3VudDsKKwl1bnNpZ25lZCBpbnQgZ3JhbnVsYXJpdHkgPSBibG9ja3NfYXRfb25jZTsKKwlibGtfdCByZWNvdmVyX2Jsb2NrID0gfjBVOworCisJYmJfY291bnQgPSAwOworCWVycmNvZGUgPSBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9iZWdpbihiYl9saXN0LCZiYl9pdGVyKTsKKwlpZiAoZXJyY29kZSkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgZXJyY29kZSwgIiVzIiwKKwkJCV8oIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iKSk7CisJCWV4aXQgKDEpOworCX0KKwlkbyB7CisJCWV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlIChiYl9pdGVyLCAmbmV4dF9iYWQpOworCX0gd2hpbGUgKG5leHRfYmFkICYmIG5leHRfYmFkIDwgZmlyc3RfYmxvY2spOworCisJYmxrYnVmID0gYWxsb2NhdGVfYnVmZmVyKDMgKiBibG9ja3NfYXRfb25jZSAqIGJsb2NrX3NpemUpOworCXRlc3RfcmVjb3JkID0gbWFsbG9jKGJsb2Nrc19hdF9vbmNlICogc2l6ZW9mKHN0cnVjdCBzYXZlZF9ibGtfcmVjb3JkKSk7CisJaWYgKCFibGtidWYgfHwgIXRlc3RfcmVjb3JkKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBFTk9NRU0sICIlcyIsCisJCQlfKCJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlcnMiKSk7CisJCWV4aXQgKDEpOworCX0KKworCXNhdmVfYmFzZSA9IGJsa2J1ZjsKKwl0ZXN0X2Jhc2UgPSBibGtidWYgKyAoYmxvY2tzX2F0X29uY2UgKiBibG9ja19zaXplKTsKKwlyZWFkX2Jhc2UgPSBibGtidWYgKyAoMiAqIGJsb2Nrc19hdF9vbmNlICogYmxvY2tfc2l6ZSk7CisKKwludW1fc2F2ZWQgPSAwOworCisJZmx1c2hfYnVmcygpOworCWlmICh2X2ZsYWcpIHsKKwkgICAgZnB1dHMoXygiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgbW9kZVxuIiksIHN0ZGVycik7CisJICAgIGZwcmludGYgKHN0ZGVyciwgXygiRnJvbSBibG9jayAlbHUgdG8gJWx1XG4iKSwKKwkJICAgICAodW5zaWduZWQgbG9uZykgZmlyc3RfYmxvY2ssCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGxhc3RfYmxvY2sgLSAxKTsKKwl9CisJaWYgKHNfZmxhZyB8fCB2X2ZsYWcgPiAxKSB7CisJCWZwdXRzKF8oIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSB0ZXN0KVxuIiksIHN0ZGVycik7CisJfQorCWlmIChzZXRqbXAodGVybWluYXRlX2VudikpIHsKKwkJLyoKKwkJICogQWJub3JtYWwgdGVybWluYXRpb24gYnkgYSBzaWduYWwgaXMgaGFuZGxlZCBoZXJlLgorCQkgKi8KKwkJc2lnbmFsIChTSUdBTFJNLCBTSUdfSUdOKTsKKwkJZnB1dHMoXygiXG5JbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIiksIHN0ZGVycik7CisKKwkJc2F2ZV9wdHIgPSBzYXZlX2Jhc2U7CisJCWZvciAoaT0wOyBpIDwgbnVtX3NhdmVkOyBpKyspIHsKKwkJCWRvX3dyaXRlKGRldiwgc2F2ZV9wdHIsIHRlc3RfcmVjb3JkW2ldLm51bSwKKwkJCQkgYmxvY2tfc2l6ZSwgdGVzdF9yZWNvcmRbaV0uYmxvY2spOworCQkJc2F2ZV9wdHIgKz0gdGVzdF9yZWNvcmRbaV0ubnVtICogYmxvY2tfc2l6ZTsKKwkJfQorCQlmZmx1c2ggKG91dCk7CisJCWV4aXQoMSk7CisJfQorCisJLyogc2V0IHVwIGFiZW5kIGhhbmRsZXIgKi8KKwljYXB0dXJlX3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfZW52KTsKKworCWlmICh0X2ZsYWcpIHsKKwkJcGF0dGVybiA9IHRfcGF0dHM7CisJCW5yX3BhdHRlcm4gPSB0X2ZsYWc7CisJfSBlbHNlIHsKKwkJcGF0dGVybiA9IHBhdHRlcm5zOworCQlucl9wYXR0ZXJuID0gc2l6ZW9mKHBhdHRlcm5zKSAvIHNpemVvZihwYXR0ZXJuc1swXSk7CisJfQorCWZvciAocGF0X2lkeCA9IDA7IHBhdF9pZHggPCBucl9wYXR0ZXJuOyBwYXRfaWR4KyspIHsKKwkJcGF0dGVybl9maWxsKHRlc3RfYmFzZSwgcGF0dGVybltwYXRfaWR4XSwKKwkJCSAgICAgYmxvY2tzX2F0X29uY2UgKiBibG9ja19zaXplKTsKKworCQlidWZfdXNlZCA9IDA7CisJCWJiX2NvdW50ID0gMDsKKwkJc2F2ZV9wdHIgPSBzYXZlX2Jhc2U7CisJCXRlc3RfcHRyID0gdGVzdF9iYXNlOworCQljdXJyZW50bHlfdGVzdGluZyA9IGZpcnN0X2Jsb2NrOworCQludW1fYmxvY2tzID0gbGFzdF9ibG9jayAtIDE7CisJCWlmIChzX2ZsYWcgJiYgdl9mbGFnIDw9IDEpCisJCQlhbGFybV9pbnRyKFNJR0FMUk0pOworCisJCXdoaWxlIChjdXJyZW50bHlfdGVzdGluZyA8IGxhc3RfYmxvY2spIHsKKwkJCWlmIChiYl9jb3VudCA+PSBtYXhfYmIpIHsKKwkJCQlpZiAoc19mbGFnIHx8IHZfZmxhZykgeworCQkJCQlmcHV0cyhfKCJUb28gbWFueSBiYWQgYmxvY2tzLCBhYm9ydGluZyB0ZXN0XG4iKSwgc3RkZXJyKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCQlnb3QgPSB0cnkgPSBncmFudWxhcml0eSAtIGJ1Zl91c2VkOworCQkJaWYgKG5leHRfYmFkKSB7CisJCQkJaWYgKGN1cnJlbnRseV90ZXN0aW5nID09IG5leHRfYmFkKSB7CisJCQkJCS8qIGZwcmludGYgKG91dCwgIiVsdVxuIiwgbmV4dGJhZCk7ICovCisJCQkJCWV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlIChiYl9pdGVyLCAmbmV4dF9iYWQpOworCQkJCQljdXJyZW50bHlfdGVzdGluZysrOworCQkJCQlnb3RvIGNoZWNrX2Zvcl9tb3JlOworCQkJCX0KKwkJCQllbHNlIGlmIChjdXJyZW50bHlfdGVzdGluZyArIHRyeSA+IG5leHRfYmFkKQorCQkJCQl0cnkgPSBuZXh0X2JhZCAtIGN1cnJlbnRseV90ZXN0aW5nOworCQkJfQorCQkJaWYgKGN1cnJlbnRseV90ZXN0aW5nICsgdHJ5ID4gbGFzdF9ibG9jaykKKwkJCQl0cnkgPSBsYXN0X2Jsb2NrIC0gY3VycmVudGx5X3Rlc3Rpbmc7CisJCQlnb3QgPSBkb19yZWFkIChkZXYsIHNhdmVfcHRyLCB0cnksIGJsb2NrX3NpemUsCisJCQkJICAgICAgIGN1cnJlbnRseV90ZXN0aW5nKTsKKwkJCWlmIChnb3QgPT0gMCkgeworCQkJCWlmIChyZWNvdmVyX2Jsb2NrID09IH4wVSkKKwkJCQkJcmVjb3Zlcl9ibG9jayA9IGN1cnJlbnRseV90ZXN0aW5nICsKKwkJCQkJCWJsb2Nrc19hdF9vbmNlOworCQkJCWlmIChncmFudWxhcml0eSAhPSAxKSB7CisJCQkJCWdyYW51bGFyaXR5ID0gMTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCS8qIEZpcnN0IGJsb2NrIG11c3QgaGF2ZSBiZWVuIGJhZC4gKi8KKwkJCQliYl9jb3VudCArPSBiYl9vdXRwdXQoY3VycmVudGx5X3Rlc3RpbmcrKywgUkVBRF9FUlJPUik7CisJCQkJZ290byBjaGVja19mb3JfbW9yZTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIE5vdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBzYXZlZCB0aGlzIG11Y2ggZGF0YQorCQkJICogKmJlZm9yZSogd2Ugb3ZlcndyaXRlIGl0IHdpdGggdGVzdCBkYXRhCisJCQkgKi8KKwkJCXRlc3RfcmVjb3JkW251bV9zYXZlZF0uYmxvY2sgPSBjdXJyZW50bHlfdGVzdGluZzsKKwkJCXRlc3RfcmVjb3JkW251bV9zYXZlZF0ubnVtID0gZ290OworCQkJbnVtX3NhdmVkKys7CisKKwkJCS8qIFdyaXRlIHRoZSB0ZXN0IGRhdGEgKi8KKwkJCXdyaXR0ZW4gPSBkb193cml0ZSAoZGV2LCB0ZXN0X3B0ciwgZ290LCBibG9ja19zaXplLAorCQkJCQkgICAgY3VycmVudGx5X3Rlc3RpbmcpOworCQkJaWYgKHdyaXR0ZW4gIT0gZ290KQorCQkJCWNvbV9lcnIgKHByb2dyYW1fbmFtZSwgZXJybm8sCisJCQkJCSBfKCJkdXJpbmcgdGVzdCBkYXRhIHdyaXRlLCBibG9jayAlbHUiKSwKKwkJCQkJICh1bnNpZ25lZCBsb25nKSBjdXJyZW50bHlfdGVzdGluZyArCisJCQkJCSB3cml0dGVuKTsKKworCQkJYnVmX3VzZWQgKz0gZ290OworCQkJc2F2ZV9wdHIgKz0gZ290ICogYmxvY2tfc2l6ZTsKKwkJCXRlc3RfcHRyICs9IGdvdCAqIGJsb2NrX3NpemU7CisJCQljdXJyZW50bHlfdGVzdGluZyArPSBnb3Q7CisJCQlpZiAoZ290ICE9IHRyeSkgeworCQkJCXRyeSA9IDE7CisJCQkJaWYgKHJlY292ZXJfYmxvY2sgPT0gfjBVKQorCQkJCQlyZWNvdmVyX2Jsb2NrID0gY3VycmVudGx5X3Rlc3RpbmcgLQorCQkJCQkJZ290ICsgYmxvY2tzX2F0X29uY2U7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJY2hlY2tfZm9yX21vcmU6CisJCQkvKgorCQkJICogSWYgdGhlcmUncyByb29tIGZvciBtb3JlIGJsb2NrcyB0byBiZSB0ZXN0ZWQgdGhpcworCQkJICogYXJvdW5kLCBhbmQgd2UncmUgbm90IGRvbmUgeWV0IHRlc3RpbmcgdGhlIGRpc2ssIGdvCisJCQkgKiBiYWNrIGFuZCBnZXQgc29tZSBtb3JlIGJsb2Nrcy4KKwkJCSAqLworCQkJaWYgKChidWZfdXNlZCAhPSBncmFudWxhcml0eSkgJiYKKwkJCSAgICAoY3VycmVudGx5X3Rlc3RpbmcgPCBsYXN0X2Jsb2NrKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKGN1cnJlbnRseV90ZXN0aW5nID49IHJlY292ZXJfYmxvY2spIHsKKwkJCQlncmFudWxhcml0eSA9IGJsb2Nrc19hdF9vbmNlOworCQkJCXJlY292ZXJfYmxvY2sgPSB+MDsKKwkJCX0KKworCQkJZmx1c2hfYnVmcygpOworCQkJc2F2ZV9jdXJyZW50bHlfdGVzdGluZyA9IGN1cnJlbnRseV90ZXN0aW5nOworCisJCQkvKgorCQkJICogZm9yIGVhY2ggY29udGlndW91cyBibG9jayB0aGF0IHdlIHJlYWQgaW50byB0aGUKKwkJCSAqIGJ1ZmZlciAoYW5kIHdyb3RlIHRlc3QgZGF0YSBpbnRvIGFmdGVyd2FyZHMpLCByZWFkCisJCQkgKiBpdCBiYWNrIChsb29waW5nIGlmIG5lY2Vzc2FyeSwgdG8gZ2V0IHBhc3QgbmV3bHkKKwkJCSAqIGRpc2NvdmVyZWQgdW5yZWFkYWJsZSBibG9ja3MsIG9mIHdoaWNoIHRoZXJlIHNob3VsZAorCQkJICogYmUgbm9uZSwgYnV0IHdpdGggYSBoYXJkIGRyaXZlIHdoaWNoIGlzIHVucmVsaWFibGUsCisJCQkgKiBpdCBoYXMgaGFwcGVuZWQpLCBhbmQgY29tcGFyZSB3aXRoIHRoZSB0ZXN0IGRhdGEKKwkJCSAqIHRoYXQgd2FzIHdyaXR0ZW47IG91dHB1dCB0byB0aGUgYmFkIGJsb2NrIGxpc3QgaWYKKwkJCSAqIGl0IGRvZXNuJ3QgbWF0Y2guCisJCQkgKi8KKwkJCXVzZWQyID0gMDsKKwkJCXNhdmVfcHRyID0gc2F2ZV9iYXNlOworCQkJdGVzdF9wdHIgPSB0ZXN0X2Jhc2U7CisJCQlyZWFkX3B0ciA9IHJlYWRfYmFzZTsKKwkJCXRyeSA9IDA7CisKKwkJCXdoaWxlICgxKSB7CisJCQkJaWYgKHRyeSA9PSAwKSB7CisJCQkJCWlmICh1c2VkMiA+PSBudW1fc2F2ZWQpCisJCQkJCQlicmVhazsKKwkJCQkJY3VycmVudGx5X3Rlc3RpbmcgPSB0ZXN0X3JlY29yZFt1c2VkMl0uYmxvY2s7CisJCQkJCXRyeSA9IHRlc3RfcmVjb3JkW3VzZWQyXS5udW07CisJCQkJCXVzZWQyKys7CisJCQkJfQorCisJCQkJZ290ID0gZG9fcmVhZCAoZGV2LCByZWFkX3B0ciwgdHJ5LAorCQkJCQkgICAgICAgYmxvY2tfc2l6ZSwgY3VycmVudGx5X3Rlc3RpbmcpOworCisJCQkJLyogdGVzdCB0aGUgY29tcGFyaXNvbiBiZXR3ZWVuIGFsbCB0aGUKKwkJCQkgICBibG9ja3Mgc3VjY2Vzc2Z1bGx5IHJlYWQgICovCisJCQkJZm9yIChpID0gMDsgaSA8IGdvdDsgKytpKQorCQkJCQlpZiAobWVtY21wICh0ZXN0X3B0citpKmJsb2NrX3NpemUsCisJCQkJCQkgICAgcmVhZF9wdHIraSpibG9ja19zaXplLCBibG9ja19zaXplKSkKKwkJCQkJCWJiX2NvdW50ICs9IGJiX291dHB1dChjdXJyZW50bHlfdGVzdGluZyArIGksIENPUlJVUFRJT05fRVJST1IpOworCQkJCWlmIChnb3QgPCB0cnkpIHsKKwkJCQkJYmJfY291bnQgKz0gYmJfb3V0cHV0KGN1cnJlbnRseV90ZXN0aW5nICsgZ290LCBSRUFEX0VSUk9SKTsKKwkJCQkJZ290Kys7CisJCQkJfQorCisJCQkJLyogd3JpdGUgYmFjayBvcmlnaW5hbCBkYXRhICovCisJCQkJZG9fd3JpdGUgKGRldiwgc2F2ZV9wdHIsIGdvdCwKKwkJCQkJICBibG9ja19zaXplLCBjdXJyZW50bHlfdGVzdGluZyk7CisJCQkJc2F2ZV9wdHIgKz0gZ290ICogYmxvY2tfc2l6ZTsKKworCQkJCWN1cnJlbnRseV90ZXN0aW5nICs9IGdvdDsKKwkJCQl0ZXN0X3B0ciArPSBnb3QgKiBibG9ja19zaXplOworCQkJCXJlYWRfcHRyICs9IGdvdCAqIGJsb2NrX3NpemU7CisJCQkJdHJ5IC09IGdvdDsKKwkJCX0KKworCQkJLyogZW1wdHkgdGhlIGJ1ZmZlciBzbyBpdCBjYW4gYmUgcmV1c2VkICovCisJCQludW1fc2F2ZWQgPSAwOworCQkJYnVmX3VzZWQgPSAwOworCQkJc2F2ZV9wdHIgPSBzYXZlX2Jhc2U7CisJCQl0ZXN0X3B0ciA9IHRlc3RfYmFzZTsKKwkJCWN1cnJlbnRseV90ZXN0aW5nID0gc2F2ZV9jdXJyZW50bHlfdGVzdGluZzsKKwkJfQorCQludW1fYmxvY2tzID0gMDsKKwkJYWxhcm0oMCk7CisJCWlmIChzX2ZsYWcgfHwgdl9mbGFnID4gMSkKKwkJCWZwdXRzKF8oZG9uZV9zdHJpbmcpLCBzdGRlcnIpOworCisJCWZsdXNoX2J1ZnMoKTsKKwl9CisJdW5jYXB0dXJlX3Rlcm1pbmF0ZSgpOworCWZmbHVzaChzdGRlcnIpOworCWZyZWUoYmxrYnVmKTsKKwlmcmVlKHRlc3RfcmVjb3JkKTsKKworCWV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlX2VuZChiYl9pdGVyKTsKKworCXJldHVybiBiYl9jb3VudDsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfbW91bnQoY2hhciAqZGV2aWNlX25hbWUpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlpbnQJCW1vdW50X2ZsYWdzOworCisJcmV0dmFsID0gZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQoZGV2aWNlX25hbWUsICZtb3VudF9mbGFncyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfY2hlY2tfaWZfbW91bnQiLCByZXR2YWwsCisJCQlfKCJ3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuIiksCisJCQlkZXZpY2VfbmFtZSk7CisJCXJldHVybjsKKwl9CisJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCIlcyBpcyBtb3VudGVkOyAiKSwgZGV2aWNlX25hbWUpOworCQlpZiAoZm9yY2UpIHsKKwkJCWZwdXRzKF8oImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LiAgIgorCQkJCSJIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iKSwgc3RkZXJyKTsKKwkJCXJldHVybjsKKwkJfQorCWFib3J0X2JhZGJsb2NrczoKKwkJZnB1dHMoXygiaXQncyBub3Qgc2FmZSB0byBydW4gYmFkYmxvY2tzIVxuIiksIHN0ZGVycik7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKChtb3VudF9mbGFncyAmIEVYVDJfTUZfQlVTWSkgJiYgIWV4Y2x1c2l2ZV9vaykgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiJXMgaXMgYXBwYXJlbnRseSBpbiB1c2UgYnkgdGhlIHN5c3RlbTsgIiksCisJCQlkZXZpY2VfbmFtZSk7CisJCWlmIChmb3JjZSkKKwkJCWZwdXRzKF8oImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LlxuIiksIHN0ZGVycik7CisJCWVsc2UKKwkJCWdvdG8gYWJvcnRfYmFkYmxvY2tzOworCX0KKworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBzdHJpbmcgdG8gYW4gdW5zaWduZWQgbG9uZywgcHJpbnRpbmcKKyAqIGFuIGVycm9yIG1lc3NhZ2UgaWYgaXQgZmFpbHMsIGFuZCByZXR1cm5pbmcgc3VjY2VzcyBvciBmYWlsdXJlIGluIGVyci4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBwYXJzZV91aW50KGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZGVzY3IpCit7CisJY2hhcgkJKnRtcDsKKwl1bnNpZ25lZCBsb25nCXJldDsKKworCWVycm5vID0gMDsKKwlyZXQgPSBzdHJ0b3VsKHN0ciwgJnRtcCwgMCk7CisJaWYgKCp0bXAgfHwgZXJybm8gfHwgKHJldCA+IFVJTlRfTUFYKSB8fAorCSAgICAocmV0ID09IFVMT05HX01BWCAmJiBlcnJubyA9PSBFUkFOR0UpKSB7CisJCWNvbV9lcnIgKHByb2dyYW1fbmFtZSwgMCwgXygiaW52YWxpZCAlcyAtICVzIiksIGRlc2NyLCBzdHIpOworCQlleGl0ICgxKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCit7CisJaW50IGM7CisJY2hhciAqIGRldmljZV9uYW1lOworCWNoYXIgKiBob3N0X2RldmljZV9uYW1lID0gTlVMTDsKKwljaGFyICogaW5wdXRfZmlsZSA9IE5VTEw7CisJY2hhciAqIG91dHB1dF9maWxlID0gTlVMTDsKKwlGSUxFICogaW4gPSBOVUxMOworCWludCBibG9ja19zaXplID0gMTAyNDsKKwl1bnNpZ25lZCBpbnQgYmxvY2tzX2F0X29uY2UgPSA2NDsKKwlibGs2NF90IGxhc3RfYmxvY2ssIGZpcnN0X2Jsb2NrOworCWludCBudW1fcGFzc2VzID0gMDsKKwlpbnQgcGFzc2VzX2NsZWFuID0gMDsKKwlpbnQgZGV2OworCWVycmNvZGVfdCBlcnJjb2RlOworCXVuc2lnbmVkIGludCBwYXR0ZXJuOworCXVuc2lnbmVkIGludCAoKnRlc3RfZnVuYykoaW50LCBibGtfdCwKKwkJCQkgIGludCwgYmxrX3QsCisJCQkJICB1bnNpZ25lZCBpbnQpOworCWludCBvcGVuX2ZsYWc7CisJbG9uZyBzeXN2YWw7CisJYmxrNjRfdCBpbmJsazsKKworCXNldGJ1ZihzdGRvdXQsIE5VTEwpOworCXNldGJ1ZihzdGRlcnIsIE5VTEwpOworI2lmZGVmIEVOQUJMRV9OTFMKKwlzZXRsb2NhbGUoTENfTUVTU0FHRVMsICIiKTsKKwlzZXRsb2NhbGUoTENfQ1RZUEUsICIiKTsKKwliaW5kdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUsIExPQ0FMRURJUik7CisJdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUpOworCXNldF9jb21fZXJyX2dldHRleHQoZ2V0dGV4dCk7CisjZW5kaWYKKwlzcmFuZG9tKCh1bnNpZ25lZCBpbnQpdGltZShOVUxMKSk7ICAvKiBzaW1wbGUgcmFuZG9tbmVzcyBpcyBlbm91Z2ggKi8KKwl0ZXN0X2Z1bmMgPSB0ZXN0X3JvOworCisJLyogRGV0ZXJtaW5lIHRoZSBzeXN0ZW0gcGFnZSBzaXplIGlmIHBvc3NpYmxlICovCisjaWZkZWYgSEFWRV9TWVNDT05GCisjaWYgKCFkZWZpbmVkKF9TQ19QQUdFU0laRSkgJiYgZGVmaW5lZChfU0NfUEFHRV9TSVpFKSkKKyNkZWZpbmUgX1NDX1BBR0VTSVpFIF9TQ19QQUdFX1NJWkUKKyNlbmRpZgorI2lmZGVmIF9TQ19QQUdFU0laRQorCXN5c3ZhbCA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKwlpZiAoc3lzdmFsID4gMCkKKwkJc3lzX3BhZ2Vfc2l6ZSA9IHN5c3ZhbDsKKyNlbmRpZiAvKiBfU0NfUEFHRVNJWkUgKi8KKyNlbmRpZiAvKiBIQVZFX1NZU0NPTkYgKi8KKworCWlmIChhcmdjICYmICphcmd2KQorCQlwcm9ncmFtX25hbWUgPSAqYXJndjsKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJiOmQ6ZTpmaTpvOnN2d25jOnA6aDp0OkJYIikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYic6CisJCQlibG9ja19zaXplID0gcGFyc2VfdWludChvcHRhcmcsICJibG9jayBzaXplIik7CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlmb3JjZSsrOworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJaW5wdXRfZmlsZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdvJzoKKwkJCW91dHB1dF9maWxlID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJc19mbGFnID0gMTsKKwkJCWJyZWFrOworCQljYXNlICd2JzoKKwkJCXZfZmxhZysrOworCQkJYnJlYWs7CisJCWNhc2UgJ3cnOgorCQkJaWYgKHdfZmxhZykKKwkJCQlleGNsdXNpdmVfdXNhZ2UoKTsKKwkJCXRlc3RfZnVuYyA9IHRlc3Rfcnc7CisJCQl3X2ZsYWcgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJaWYgKHdfZmxhZykKKwkJCQlleGNsdXNpdmVfdXNhZ2UoKTsKKwkJCXRlc3RfZnVuYyA9IHRlc3RfbmQ7CisJCQl3X2ZsYWcgPSAyOworCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJYmxvY2tzX2F0X29uY2UgPSBwYXJzZV91aW50KG9wdGFyZywgImJsb2NrcyBhdCBvbmNlIik7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQltYXhfYmIgPSBwYXJzZV91aW50KG9wdGFyZywgIm1heCBiYWQgYmxvY2sgY291bnQiKTsKKwkJCWlmIChtYXhfYmIgPiBNQVhfQkFEX0JMT0NLUykgeworCQkJCWNvbV9lcnIgKHByb2dyYW1fbmFtZSwgMCwKKwkJCQkJIF8oIlRvbyBiaWcgbWF4IGJhZCBibG9ja3MgY291bnQgJXUgLSAiCisJCQkJCSAgICJtYXhpbXVtIGlzICV1IiksIG1heF9iYiwKKwkJCQkJICAgTUFYX0JBRF9CTE9DS1MpOworCQkJCWV4aXQgKDEpOworCQkJfQorCQkJLyogMCByZWFsbHkgbWVhbnMgdW5saW1pdGVkIGJ1dCB3ZSBjYW5ub3QgZG8gdGhhdCBtdWNoLi4uICovCisJCQlpZiAobWF4X2JiID09IDApCisJCQkJbWF4X2JiID0gTUFYX0JBRF9CTE9DS1M7CisJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQlkX2ZsYWcgPSBwYXJzZV91aW50KG9wdGFyZywgInJlYWQgZGVsYXkgZmFjdG9yIik7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQludW1fcGFzc2VzID0gcGFyc2VfdWludChvcHRhcmcsCisJCQkJCQkibnVtYmVyIG9mIGNsZWFuIHBhc3NlcyIpOworCQkJYnJlYWs7CisJCWNhc2UgJ2gnOgorCQkJaG9zdF9kZXZpY2VfbmFtZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCWlmICh0X2ZsYWcgKyAxID4gdF9tYXgpIHsKKwkJCQl1bnNpZ25lZCBpbnQgKnRfcGF0dHNfbmV3OworCisJCQkJdF9wYXR0c19uZXcgPSByZWFsbG9jKHRfcGF0dHMsIHNpemVvZihpbnQpICoKKwkJCQkJCSAgICAgICh0X21heCArIFRfSU5DKSk7CisJCQkJaWYgKCF0X3BhdHRzX25ldykgeworCQkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgRU5PTUVNLAorCQkJCQkJXygiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiCisJCQkJCQkgICJ0ZXN0X3BhdHRlcm4gLSAlcyIpLAorCQkJCQkJb3B0YXJnKTsKKwkJCQkJZXhpdCgxKTsKKwkJCQl9CisJCQkJdF9wYXR0cyA9IHRfcGF0dHNfbmV3OworCQkJCXRfbWF4ICs9IFRfSU5DOworCQkJfQorCQkJaWYgKCFzdHJjbXAob3B0YXJnLCAiciIpIHx8ICFzdHJjbXAob3B0YXJnLCJyYW5kb20iKSkgeworCQkJCXRfcGF0dHNbdF9mbGFnKytdID0gfjA7CisJCQl9IGVsc2UgeworCQkJCXBhdHRlcm4gPSBwYXJzZV91aW50KG9wdGFyZywgInRlc3QgcGF0dGVybiIpOworCQkJCWlmIChwYXR0ZXJuID09ICh1bnNpZ25lZCBpbnQpIH4wKQorCQkJCQlwYXR0ZXJuID0gMHhmZmZmOworCQkJCXRfcGF0dHNbdF9mbGFnKytdID0gcGF0dGVybjsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdCJzoKKwkJCXVzZV9idWZmZXJlZF9pbyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnWCc6CisJCQlleGNsdXNpdmVfb2srKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2UoKTsKKwkJfQorCX0KKwlpZiAoIXdfZmxhZykgeworCQlpZiAodF9mbGFnID4gMSkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQkJXygiTWF4aW11bSBvZiBvbmUgdGVzdF9wYXR0ZXJuIG1heSBiZSAiCisJCQkJICAic3BlY2lmaWVkIGluIHJlYWQtb25seSBtb2RlIikpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAodF9wYXR0cyAmJiAodF9wYXR0c1swXSA9PSAodW5zaWduZWQgaW50KSB+MCkpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCV8oIlJhbmRvbSB0ZXN0X3BhdHRlcm4gaXMgbm90IGFsbG93ZWQgIgorCQkJCSAgImluIHJlYWQtb25seSBtb2RlIikpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlpZiAob3B0aW5kID4gYXJnYyAtIDEpCisJCXVzYWdlKCk7CisJZGV2aWNlX25hbWUgPSBhcmd2W29wdGluZCsrXTsKKwlpZiAob3B0aW5kID4gYXJnYyAtIDEpIHsKKwkJZXJyY29kZSA9IGV4dDJmc19nZXRfZGV2aWNlX3NpemUyKGRldmljZV9uYW1lLAorCQkJCQkJIGJsb2NrX3NpemUsCisJCQkJCQkgJmxhc3RfYmxvY2spOworCQlpZiAoZXJyY29kZSA9PSBFWFQyX0VUX1VOSU1QTEVNRU5URUQpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCV8oIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91ICIKKwkJCQkgICJtdXN0IHNwZWNpZnlcbnRoZSBzaXplIG1hbnVhbGx5XG4iKSk7CisJCQlleGl0KDEpOworCQl9CisJCWlmIChlcnJjb2RlKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgZXJyY29kZSwgIiVzIiwKKwkJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIikpOworCQkJZXhpdCgxKTsKKwkJfQorCX0gZWxzZSB7CisJCWVycm5vID0gMDsKKwkJbGFzdF9ibG9jayA9IHBhcnNlX3VpbnQoYXJndltvcHRpbmRdLCBfKCJsYXN0IGJsb2NrIikpOworCQlsYXN0X2Jsb2NrKys7CisJCW9wdGluZCsrOworCX0KKwlpZiAob3B0aW5kIDw9IGFyZ2MtMSkgeworCQllcnJubyA9IDA7CisJCWZpcnN0X2Jsb2NrID0gcGFyc2VfdWludChhcmd2W29wdGluZF0sIF8oImZpcnN0IGJsb2NrIikpOworCX0gZWxzZSBmaXJzdF9ibG9jayA9IDA7CisJaWYgKGZpcnN0X2Jsb2NrID49IGxhc3RfYmxvY2spIHsKKwkgICAgY29tX2VyciAocHJvZ3JhbV9uYW1lLCAwLCBfKCJpbnZhbGlkIHN0YXJ0aW5nIGJsb2NrICglbGx1KTogbXVzdCBiZSBsZXNzIHRoYW4gJWxsdSIpLAorCQkgICAgIGZpcnN0X2Jsb2NrLCBsYXN0X2Jsb2NrKTsKKwkgICAgZXhpdCAoMSk7CisJfQorCS8qIGV4dDIgYmFkYmxvY2tzIGZpbGUgY2FuJ3QgaGFuZGxlIGxhcmdlIHZhbHVlcyAqLworCWlmIChsYXN0X2Jsb2NrID4+IDMyKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBFT1ZFUkZMT1csCisJCQlfKCJpbnZhbGlkIGVuZCBibG9jayAoJWxsdSk6IG11c3QgYmUgMzItYml0IHZhbHVlIiksCisJCQlsYXN0X2Jsb2NrKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHdfZmxhZykKKwkJY2hlY2tfbW91bnQoZGV2aWNlX25hbWUpOworCisJZ2V0dGltZW9mZGF5KCZ0aW1lX3N0YXJ0LCAwKTsKKwlvcGVuX2ZsYWcgPSBPX0xBUkdFRklMRSB8ICh3X2ZsYWcgPyBPX1JEV1IgOiBPX1JET05MWSk7CisJZGV2ID0gb3BlbiAoZGV2aWNlX25hbWUsIG9wZW5fZmxhZyk7CisJaWYgKGRldiA9PSAtMSkgeworCQljb21fZXJyIChwcm9ncmFtX25hbWUsIGVycm5vLCBfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLAorCQkJIGRldmljZV9uYW1lKTsKKwkJZXhpdCAoMSk7CisJfQorCWlmIChob3N0X2RldmljZV9uYW1lKSB7CisJCWhvc3RfZGV2ID0gb3BlbiAoaG9zdF9kZXZpY2VfbmFtZSwgb3Blbl9mbGFnKTsKKwkJaWYgKGhvc3RfZGV2ID09IC0xKSB7CisJCQljb21fZXJyIChwcm9ncmFtX25hbWUsIGVycm5vLAorCQkJCSBfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLAorCQkJCSBob3N0X2RldmljZV9uYW1lKTsKKwkJCWV4aXQgKDEpOworCQl9CisJfSBlbHNlCisJCWhvc3RfZGV2ID0gZGV2OworCWlmIChpbnB1dF9maWxlKSB7CisJCWlmIChzdHJjbXAgKGlucHV0X2ZpbGUsICItIikgPT0gMCkKKwkJCWluID0gc3RkaW47CisJCWVsc2UgeworCQkJaW4gPSBmb3BlbiAoaW5wdXRfZmlsZSwgInIiKTsKKwkJCWlmIChpbiA9PSBOVUxMKQorCQkJeworCQkJCWNvbV9lcnIgKHByb2dyYW1fbmFtZSwgZXJybm8sCisJCQkJCSBfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLAorCQkJCQkgaW5wdXRfZmlsZSk7CisJCQkJZXhpdCAoMSk7CisJCQl9CisJCX0KKwl9CisJaWYgKG91dHB1dF9maWxlICYmIHN0cmNtcCAob3V0cHV0X2ZpbGUsICItIikgIT0gMCkKKwl7CisJCW91dCA9IGZvcGVuIChvdXRwdXRfZmlsZSwgInciKTsKKwkJaWYgKG91dCA9PSBOVUxMKQorCQl7CisJCQljb21fZXJyIChwcm9ncmFtX25hbWUsIGVycm5vLAorCQkJCSBfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLAorCQkJCSBvdXRwdXRfZmlsZSk7CisJCQlleGl0ICgxKTsKKwkJfQorCX0KKwllbHNlCisJCW91dCA9IHN0ZG91dDsKKworCWVycmNvZGUgPSBleHQyZnNfYmFkYmxvY2tzX2xpc3RfY3JlYXRlKCZiYl9saXN0LDApOworCWlmIChlcnJjb2RlKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnJjb2RlLCAiJXMiLAorCQkJXygid2hpbGUgY3JlYXRpbmcgaW4tbWVtb3J5IGJhZCBibG9ja3MgbGlzdCIpKTsKKwkJZXhpdCAoMSk7CisJfQorCisJaWYgKGluKSB7CisJCWZvcig7OykgeworCQkJc3dpdGNoIChmc2NhbmYoaW4sICIlbGx1XG4iLCAmaW5ibGspKSB7CisJCQkJY2FzZSAwOgorCQkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCQkJCV8oImlucHV0IGZpbGUgLSBiYWQgZm9ybWF0IikpOworCQkJCQlleGl0ICgxKTsKKwkJCQljYXNlIEVPRjoKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJaWYgKGluYmxrID4+IDMyKSB7CisJCQkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwKKwkJCQkJCQlFT1ZFUkZMT1csICIlcyIsCisJCQkJCQlfKCJ3aGlsZSBhZGRpbmcgdG8gaW4tbWVtb3J5ICIKKwkJCQkJCSAgImJhZCBibG9jayBsaXN0IikpOworCQkJCQkJZXhpdCgxKTsKKwkJCQkJfQorCQkJCQluZXh0X2JhZCA9IGluYmxrOworCQkJCQllcnJjb2RlID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2FkZChiYl9saXN0LG5leHRfYmFkKTsKKwkJCQkJaWYgKGVycmNvZGUpIHsKKwkJCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnJjb2RlLAorCQkJCQkJCSIlcyIsCisJCQkJCQlfKCJ3aGlsZSBhZGRpbmcgdG8gaW4tbWVtb3J5ICIKKwkJCQkJCSAgImJhZCBibG9jayBsaXN0IikpOworCQkJCQkJZXhpdCAoMSk7CisJCQkJCX0KKwkJCQkJY29udGludWU7CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCWlmIChpbiAhPSBzdGRpbikKKwkJCWZjbG9zZSAoaW4pOworCX0KKworCWRvIHsKKwkJdW5zaWduZWQgaW50IGJiX2NvdW50OworCisJCWJiX2NvdW50ID0gdGVzdF9mdW5jKGRldiwgbGFzdF9ibG9jaywgYmxvY2tfc2l6ZSwKKwkJCQkgICAgIGZpcnN0X2Jsb2NrLCBibG9ja3NfYXRfb25jZSk7CisJCWlmIChiYl9jb3VudCkKKwkJCXBhc3Nlc19jbGVhbiA9IDA7CisJCWVsc2UKKwkJCSsrcGFzc2VzX2NsZWFuOworCisJCWlmICh2X2ZsYWcpCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIpLAorCQkJCWJiX2NvdW50LCBudW1fcmVhZF9lcnJvcnMsIG51bV93cml0ZV9lcnJvcnMsIG51bV9jb3JydXB0aW9uX2Vycm9ycyk7CisKKwl9IHdoaWxlIChwYXNzZXNfY2xlYW4gPCBudW1fcGFzc2VzKTsKKworCWNsb3NlIChkZXYpOworCWlmIChvdXQgIT0gc3Rkb3V0KQorCQlmY2xvc2UgKG91dCk7CisJZnJlZSh0X3BhdHRzKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL21pc2MvYmFzZV9kZXZpY2UuYyBiL21pc2MvYmFzZV9kZXZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmNlMTM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9iYXNlX2RldmljZS5jCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogYmFzZV9kZXZpY2UuYworICoKKyAqIFJldHVybiB0aGUgImJhc2UgZGV2aWNlIiBnaXZlbiBhIHBhcnRpY3VsYXIgZGV2aWNlOyB0aGlzIGlzIHVzZWQgdG8KKyAqIGFzc3VyZSB0aGF0IHdlIG9ubHkgZnNjayBvbmUgcGFydGl0aW9uIG9uIGEgcGFydGljdWxhciBkcml2ZSBhdCBhbnkKKyAqIG9uZSB0aW1lLiAgT3RoZXJ3aXNlLCB0aGUgZGlzayBoZWFkcyB3aWxsIGJlIHNlZWtpbmcgYWxsIG92ZXIgdGhlCisgKiBwbGFjZS4gIElmIHRoZSBiYXNlIGRldmljZSBjYW4gbm90IGJlIGRldGVybWluZWQsIHJldHVybiBOVUxMLgorICoKKyAqIFRoZSBiYXNlX2RldmljZSgpIGZ1bmN0aW9uIHJldHVybnMgYW4gYWxsb2NhdGVkIHN0cmluZyB3aGljaCBtdXN0CisgKiBiZSBmcmVlZC4KKyAqCisgKiBXcml0dGVuIGJ5IFRoZW9kb3JlIFRzJ28sIDx0eXRzb0BtaXQuZWR1PgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJmc2NrLmgiCisKKy8qCisgKiBSZXF1aXJlZCBmb3IgdGhlIHViZXItc2lsbHkgZGV2ZnMgL2Rldi9pZGUvaG9zdDEvYnVzMi90YXJnZXQzL2x1bjMKKyAqIHBhdGhhbWVzLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZGV2ZnNfaGllcltdID0geworCSJob3N0IiwgImJ1cyIsICJ0YXJnZXQiLCAibHVuIiwgMAorfTsKKworY2hhciAqYmFzZV9kZXZpY2UoY29uc3QgY2hhciAqZGV2aWNlKQoreworCWNoYXIgKnN0ciwgKmNwOworCWNvbnN0IGNoYXIgKipoaWVyLCAqZGlzazsKKwlpbnQgbGVuOworCisJc3RyID0gbWFsbG9jKHN0cmxlbihkZXZpY2UpKzEpOworCWlmICghc3RyKQorCQlyZXR1cm4gTlVMTDsKKwlzdHJjcHkoc3RyLCBkZXZpY2UpOworCWNwID0gc3RyOworCisJLyogU2tpcCBvdmVyIC9kZXYvOyBpZiBpdCdzIG5vdCBwcmVzZW50LCBnaXZlIHVwLiAqLworCWlmIChzdHJuY21wKGNwLCAiL2Rldi8iLCA1KSAhPSAwKQorCQlnb3RvIGVycm91dDsKKwljcCArPSA1OworCisJLyogU2tpcCBvdmVyIC9kZXYvZHNrLy4uLiAqLworCWlmIChzdHJuY21wKGNwLCAiZHNrLyIsIDQpID09IDApCisJCWNwICs9IDQ7CisKKwkvKgorCSAqIEZvciBtZCBkZXZpY2VzLCB3ZSB0cmVhdCB0aGVtIGFsbCBhcyBpZiB0aGV5IHdlcmUgYWxsCisJICogb24gb25lIGRpc2ssIHNpbmNlIHdlIGRvbid0IGtub3cgaG93IHRvIHBhcmFsbGVsaXplIHRoZW0uCisJICovCisJaWYgKGNwWzBdID09ICdtJyAmJiBjcFsxXSA9PSAnZCcpIHsKKwkJKihjcCsyKSA9IDA7CisJCXJldHVybiBzdHI7CisJfQorCisJLyogSGFuZGxlIERBQyA5NjAgZGV2aWNlcyAqLworCWlmIChzdHJuY21wKGNwLCAicmQvIiwgMykgPT0gMCkgeworCQljcCArPSAzOworCQlpZiAoY3BbMF0gIT0gJ2MnIHx8IGNwWzJdICE9ICdkJyB8fAorCQkgICAgIWlzZGlnaXQoY3BbMV0pIHx8ICFpc2RpZ2l0KGNwWzNdKSkKKwkJCWdvdG8gZXJyb3V0OworCQkqKGNwKzQpID0gMDsKKwkJcmV0dXJuIHN0cjsKKwl9CisKKwkvKiBOb3cgbGV0J3MgaGFuZGxlIC9kZXYvaGQqIGFuZCAvZGV2L3NkKiBkZXZpY2VzLi4uLiAqLworCWlmICgoY3BbMF0gPT0gJ2gnIHx8IGNwWzBdID09ICdzJykgJiYgKGNwWzFdID09ICdkJykpIHsKKwkJY3AgKz0gMjsKKwkJLyogSWYgdGhlcmUncyBhIHNpbmdsZSBudW1iZXIgYWZ0ZXIgL2Rldi9oZCwgc2tpcCBpdCAqLworCQlpZiAoaXNkaWdpdCgqY3ApKQorCQkJY3ArKzsKKwkJLyogV2hhdCBmb2xsb3dzIG11c3QgYmUgYW4gYWxwaGEgY2hhciwgb3IgZ2l2ZSB1cCAqLworCQlpZiAoIWlzYWxwaGEoKmNwKSkKKwkJCWdvdG8gZXJyb3V0OworCQkqKGNwICsgMSkgPSAwOworCQlyZXR1cm4gc3RyOworCX0KKworCS8qIE5vdyBsZXQncyBoYW5kbGUgZGV2ZnMgKHVnaCkgbmFtZXMgKi8KKwlsZW4gPSAwOworCWlmIChzdHJuY21wKGNwLCAiaWRlLyIsIDQpID09IDApCisJCWxlbiA9IDQ7CisJaWYgKHN0cm5jbXAoY3AsICJzY3NpLyIsIDUpID09IDApCisJCWxlbiA9IDU7CisJaWYgKGxlbikgeworCQljcCArPSBsZW47CisJCS8qCisJCSAqIE5vdyB3ZSBwcm9jZWVkIGRvd24gdGhlIGV4cGVjdGVkIGRldmZzIGhpZXJhcmNoeS4KKwkJICogaS5lLiwgLi4uL2hvc3QxL2J1czIvdGFyZ2V0My9sdW40Ly4uLgorCQkgKiBJZiB3ZSBkb24ndCBmaW5kIHRoZSBleHBlY3RlZCB0b2tlbiwgZm9sbG93ZWQgYnkKKwkJICogc29tZSBudW1iZXIgb2YgZGlnaXRzIGF0IGVhY2ggbGV2ZWwsIGFib3J0LgorCQkgKi8KKwkJZm9yIChoaWVyID0gZGV2ZnNfaGllcjsgKmhpZXI7IGhpZXIrKykgeworCQkJbGVuID0gc3RybGVuKCpoaWVyKTsKKwkJCWlmIChzdHJuY21wKGNwLCAqaGllciwgbGVuKSAhPSAwKQorCQkJCWdvdG8gZXJyb3V0OworCQkJY3AgKz0gbGVuOworCQkJd2hpbGUgKCpjcCAhPSAnLycgJiYgKmNwICE9IDApIHsKKwkJCQlpZiAoIWlzZGlnaXQoKmNwKSkKKwkJCQkJZ290byBlcnJvdXQ7CisJCQkJY3ArKzsKKwkJCX0KKwkJCWNwKys7CisJCX0KKwkJKihjcCAtIDEpID0gMDsKKwkJcmV0dXJuIHN0cjsKKwl9CisKKwkvKiBOb3cgaGFuZGxlIGRldmZzIC9kZXYvZGlzYyBvciAvZGV2L2Rpc2sgbmFtZXMgKi8KKwlkaXNrID0gMDsKKwlpZiAoc3RybmNtcChjcCwgImRpc2NzLyIsIDYpID09IDApCisJCWRpc2sgPSAiZGlzYyI7CisJZWxzZSBpZiAoc3RybmNtcChjcCwgImRpc2tzLyIsIDYpID09IDApCisJCWRpc2sgPSAiZGlzayI7CisJaWYgKGRpc2spIHsKKwkJY3AgKz0gNjsKKwkJaWYgKHN0cm5jbXAoY3AsIGRpc2ssIDQpICE9IDApCisJCQlnb3RvIGVycm91dDsKKwkJY3AgKz0gNDsKKwkJd2hpbGUgKCpjcCAhPSAnLycgJiYgKmNwICE9IDApIHsKKwkJCWlmICghaXNkaWdpdCgqY3ApKQorCQkJCWdvdG8gZXJyb3V0OworCQkJY3ArKzsKKwkJfQorCQkqY3AgPSAwOworCQlyZXR1cm4gc3RyOworCX0KKworZXJyb3V0OgorCWZyZWUoc3RyKTsKKwlyZXR1cm4gTlVMTDsKK30KKworI2lmZGVmIERFQlVHCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisJY29uc3QgY2hhciAqYmFzZTsKKwljaGFyICBidWZbMjU2XSwgKmNwOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWNwID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7CisJCWlmIChjcCkKKwkJCSpjcCA9IDA7CisJCWNwID0gc3RyY2hyKGJ1ZiwgJ1x0Jyk7CisJCWlmIChjcCkKKwkJCSpjcCA9IDA7CisJCWJhc2UgPSBiYXNlX2RldmljZShidWYpOworCQlwcmludGYoIiVzXHQlc1xuIiwgYnVmLCBiYXNlID8gYmFzZSA6ICJOT05FIik7CisJfQorCWV4aXQoMCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL21pc2MvYmFzZV9kZXZpY2UudHN0IGIvbWlzYy9iYXNlX2RldmljZS50c3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5YTU4ZAotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvYmFzZV9kZXZpY2UudHN0CkBAIC0wLDAgKzEsMTYgQEAKKy9kZXYvaGRhNwkvZGV2L2hkYQorL2Rldi9zZGExCS9kZXYvc2RhCisvZGV2L2hkYQkvZGV2L2hkYQorL2Rldi9zZGEJL2Rldi9zZGEKKy9kZXYvZHNrL2hkYTYJL2Rldi9kc2svaGRhCisvZGV2L2Rzay9zZGE1CS9kZXYvZHNrL3NkYQorL2Rldi9tZDQJL2Rldi9tZAorL2Rldi9tZC80CS9kZXYvbWQKKy9kZXYvaWRlL2hvc3QwL2J1czEvdGFyZ2V0Mi9sdW4zCS9kZXYvaWRlL2hvc3QwL2J1czEvdGFyZ2V0Mi9sdW4zCisvZGV2L2lkZS9ob3N0MC9idXMxL3RhcmdldDIvbHVuMy9wYXJ0MTAJL2Rldi9pZGUvaG9zdDAvYnVzMS90YXJnZXQyL2x1bjMKKy9kZXYvaWRlL2hvc3QwL2J1czEvdGFyZ2V0Mi9sdW4zLwkvZGV2L2lkZS9ob3N0MC9idXMxL3RhcmdldDIvbHVuMworL2Rldi9kaXNrcy9kaXNrMi9wYXJ0MgkvZGV2L2Rpc2tzL2Rpc2syCisvZGV2L2Rpc2tzL2Rpc2syLwkvZGV2L2Rpc2tzL2Rpc2syCisvZGV2L2Rpc2tzL2Rpc2syCS9kZXYvZGlza3MvZGlzazIKKy9kZXYvZGlzY3MvZGlzYzEvcGFydDEwCS9kZXYvZGlzY3MvZGlzYzEKKy9kZXYvZGlzY3MvZGlzYzEvCS9kZXYvZGlzY3MvZGlzYzEKZGlmZiAtLWdpdCBhL21pc2MvYmxraWQuOC5pbiBiL21pc2MvYmxraWQuOC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzQyNjg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9ibGtpZC44LmluCkBAIC0wLDAgKzEsMTY0IEBACisuXCIgQ29weXJpZ2h0IDIwMDAgQW5kcmVhcyBEaWxnZXIgKGFkaWxnZXJAdHVyYm9saW51eC5jb20pCisuXCIKKy5cIiBUaGlzIG1hbiBwYWdlIHdhcyBjcmVhdGVkIGZvciBibGtpZCBmcm9tIGUyZnNwcm9ncy0xLjI1LgorLlwiCisuXCIgVGhpcyBmaWxlIG1heSBiZSBjb3BpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisuXCIKKy5cIiBCYXNlZCBvbiB1dWlkZ2VuLCBNb24gU2VwIDE3IDEwOjQyOjEyIDIwMDAsIEFuZHJlYXMgRGlsZ2VyCisuVEggQkxLSUQgOCAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQorYmxraWQgXC0gY29tbWFuZFwtbGluZSB1dGlsaXR5IHRvIGxvY2F0ZS9wcmludCBibG9jayBkZXZpY2UgYXR0cmlidXRlcworLlNIIFNZTk9QU0lTCisuQiBibGtpZAorWworLkIgXC1naGxMdgorXQorWworWworLkIgXC1jCisuSSBjYWNoZWZpbGUKK10KKy5CIFwtdworLkkgd3JpdGVjYWNoZWZpbGUKK10KK1sKKy5CIFwtbworLkkgZm9ybWF0CitdCitbCisuQiBcLXMKKy5JIHRhZworXQorWworLkIgXC10CisuSVIgTkFNRSA9IHZhbHVlCitdCitbCisuSSBkZXZpY2UgLi4uCitdCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgYmxraWQKK3Byb2dyYW0gaXMgdGhlIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgdG8gd29ya2luZyB3aXRoCisuQlIgbGliYmxraWQgKDMpCitsaWJyYXJ5LiAgSXQgY2FuIGRldGVybWluZSB0aGUgdHlwZSBvZiBjb250ZW50IChlLmcuIGZpbGVzeXN0ZW0sIHN3YXApCithIGJsb2NrIGRldmljZSBob2xkcywgYW5kIGFsc28gYXR0cmlidXRlcyAodG9rZW5zLCBOQU1FPXZhbHVlIHBhaXJzKQorZnJvbSB0aGUgY29udGVudCBtZXRhZGF0YSAoZS5nLiBMQUJFTCBvciBVVUlEIGZpZWxkcykuCisuUFAKKy5CIGJsa2lkCitoYXMgdHdvIG1haW4gZm9ybXMgb2Ygb3BlcmF0aW9uOiBlaXRoZXIgc2VhcmNoaW5nIGZvciBhIGRldmljZSB3aXRoIGEKK3NwZWNpZmljIE5BTUU9dmFsdWUgcGFpciwgb3IgZGlzcGxheWluZyBOQU1FPXZhbHVlIHBhaXJzIGZvciBvbmUgb3IKK21vcmUgZGV2aWNlcy4KKy5TSCBPUFRJT05TCisuVFAKKy5CSSBcLWMgIiBjYWNoZWZpbGUiCitSZWFkIGZyb20KKy5JIGNhY2hlZmlsZQoraW5zdGVhZCBvZiByZWFkaW5nIGZyb20gdGhlIGRlZmF1bHQgY2FjaGUgZmlsZQorLklSIC9ldGMvYmxraWQudGFiIC4KK0lmIHlvdSB3YW50IHRvIHN0YXJ0IHdpdGggYSBjbGVhbiBjYWNoZSAoaS5lLiBkb24ndCByZXBvcnQgZGV2aWNlcyBwcmV2aW91c2x5CitzY2FubmVkIGJ1dCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGF0IHRoaXMgdGltZSksIHNwZWNpZnkKKy5JUiAvZGV2L251bGwgLgorLlRQCisuQiBcLWcKK1BlcmZvcm0gYSBnYXJiYWdlIGNvbGxlY3Rpb24gcGFzcyBvbiB0aGUgYmxraWQgY2FjaGUgdG8gcmVtb3ZlCitkZXZpY2VzIHdoaWNoIG5vIGxvbmdlciBleGlzdC4KKy5UUAorLkIgXC1oCitEaXNwbGF5IGEgdXNhZ2UgbWVzc2FnZSBhbmQgZXhpdC4KKy5UUAorLkIgXC1sCitMb29rIHVwIG9uZSBkZXZpY2UgdGhhdCBtYXRjaGVzIHRoZSBzZWFyY2ggcGFyYW1ldGVyIHNwZWNpZmllZCB1c2luZwordGhlCisuQiBcLXQKK29wdGlvbi4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBkZXZpY2VzIHRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCBzZWFyY2gKK3BhcmFtZXRlciwgdGhlbiB0aGUgZGV2aWNlIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgaXMgcmV0dXJuZWQsIGFuZC9vcgordGhlIGZpcnN0IGRldmljZSBmb3VuZCBhdCBhIGdpdmVuIHByaW9yaXR5LiAgRGV2aWNlIHR5cGVzIGluIG9yZGVyIG9mCitkZWNyZWFzaW5nIHByaW9yaXR5IGFyZSBEZXZpY2UgTWFwcGVyLCBFVk1TLCBMVk0sIE1ELCBhbmQgZmluYWxseSByZWd1bGFyCitibG9jayBkZXZpY2VzLiAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwKKy5CIGJsa2lkCit3aWxsIHByaW50IGFsbCBvZiB0aGUgZGV2aWNlcyB0aGF0IG1hdGNoIHRoZSBzZWFyY2ggcGFyYW1ldGVyLgorLlRQCisuQkkgXC1vICIgZm9ybWF0IgorRGlzcGxheQorLkJSIGJsa2lkICdzCitvdXRwdXQgdXNpbmcgdGhlIHNwZWNpZmllZCBmb3JtYXQuICBUaGUKKy5JIGZvcm1hdAorcGFyYW1ldGVyIG1heSBiZQorLkkgZnVsbAorKHRoZSBkZWZhdWx0KSwKKy5JIHZhbHVlCisob25seSBwcmludCB0aGUgdmFsdWUgb2YgdGhlIHRhZ3MpLAorLkkgbGlzdAorKHByaW50IHRoZSBkZXZpY2VzIGluIGEgdXNlci1mcmllbmRseSBmb3JtYXQpLAorb3IKKy5JIGRldmljZQorKG9ubHkgcHJpbnQgdGhlIGRldmljZSBuYW1lKS4KKy5UUAorLkIgXC1MCitQcmludCB0aGUgZGV2aWNlcyBpbiBhIHVzZXItZnJpZW5kbHkgbGlzdCBmb3JtYXQuICBUaGlzIGlzIHRoZQorZXF1aXZhbGVudCBvZiB1c2luZyB0aGUgb3B0aW9uIFxmQi1vIGxpc3RcZlIuCisuVFAKKy5CSSBcLXMgIiB0YWciCitGb3IgZWFjaCAoc3BlY2lmaWVkKSBkZXZpY2UsIHNob3cgb25seSB0aGUgdGFncyB0aGF0IG1hdGNoCisuSVIgdGFnIC4KK0l0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgbXVsdGlwbGUKKy5CIFwtcworb3B0aW9ucy4gIElmIG5vIHRhZyBpcyBzcGVjaWZpZWQsIHRoZW4gYWxsIHRva2VucyBhcmUgc2hvd24gZm9yIGFsbAorKHNwZWNpZmllZCkgZGV2aWNlcy4KK0luIG9yZGVyIHRvIGp1c3QgcmVmcmVzaCB0aGUgY2FjaGUgd2l0aG91dCBzaG93aW5nIGFueSB0b2tlbnMsIHVzZQorLkIgIi1zIG5vbmUiCit3aXRoIG5vIG90aGVyIG9wdGlvbnMuCisuVFAKKy5CSSBcLXQgIiBOQU1FIiA9ICJ2YWx1ZSIKK1NlYXJjaCBmb3IgYmxvY2sgZGV2aWNlcyB3aXRoIHRva2VucyBuYW1lZAorLkkgTkFNRQordGhhdCBoYXZlIHRoZSB2YWx1ZQorLklSIHZhbHVlICwKK2FuZCBkaXNwbGF5IGFueSBkZXZpY2VzIHdoaWNoIGFyZSBmb3VuZC4KK0NvbW1vbiB2YWx1ZXMgZm9yCisuSSBOQU1FCitpbmNsdWRlCisuQlIgVFlQRSAsCisuQlIgTEFCRUwgLAorYW5kCisuQlIgVVVJRCAuCitJZiB0aGVyZSBhcmUgbm8gZGV2aWNlcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYWxsIGJsb2NrIGRldmljZXMKK3dpbGwgYmUgc2VhcmNoZWQ7IG90aGVyd2lzZSBvbmx5IHRoZSBzcGVjaWZpZWQgZGV2aWNlcyBhcmUgc2VhcmNoZWQuCisuVFAKKy5CIFwtdgorRGlzcGxheSB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdC4KKy5UUAorLkJJIFwtdyAiIHdyaXRlY2FjaGVmaWxlIgorV3JpdGUgdGhlIGRldmljZSBjYWNoZSB0bworLkkgd3JpdGVjYWNoZWZpbGUKK2luc3RlYWQgb2Ygd3JpdGluZyBpdCB0byB0aGUgZGVmYXVsdCBjYWNoZSBmaWxlCisuSVIgL2V0Yy9ibGtpZC50YWIgLgorSWYgeW91IGRvbid0IHdhbnQgdG8gc2F2ZSB0aGUgY2FjaGUgdG8gdGhlIGRlZmF1bHQgZmlsZSwgc3BlY2lmeQorLklSIC9kZXYvbnVsbC4KK0lmIG5vdCBzcGVjaWZpZWQgaXQgd2lsbCBiZSB0aGUgc2FtZSBmaWxlIGFzIHRoYXQgZ2l2ZW4gYnkgdGhlCisuQiBcLWMKK29wdGlvbi4KKy5UUAorLkkgZGV2aWNlCitEaXNwbGF5IHRva2VucyBmcm9tIG9ubHkgdGhlIHNwZWNpZmllZCBkZXZpY2UuICBJdCBpcyBwb3NzaWJsZSB0bworZ2l2ZSBtdWx0aXBsZQorLkkgZGV2aWNlCitvcHRpb25zIG9uIHRoZSBjb21tYW5kIGxpbmUuICBJZiBub25lIGlzIGdpdmVuLCBhbGwgZGV2aWNlcyB3aGljaAorYXBwZWFyIGluCisuSSAvcHJvYy9wYXJ0aXRpb25zCithcmUgc2hvd24sIGlmIHRoZXkgYXJlIHJlY29nbml6ZWQuCisuU0ggIlJFVFVSTiBDT0RFIgorSWYgdGhlIHNwZWNpZmllZCB0b2tlbiB3YXMgZm91bmQsIG9yIGlmIGFueSB0YWdzIHdlcmUgc2hvd24gZnJvbSAoc3BlY2lmaWVkKQorZGV2aWNlcywgMCBpcyByZXR1cm5lZC4gIElmIHRoZSBzcGVjaWZpZWQgdG9rZW4gd2FzIG5vdCBmb3VuZCwgb3Igbm8KKyhzcGVjaWZpZWQpIGRldmljZXMgY291bGQgYmUgaWRlbnRpZmllZCwgYW4gZXhpdCBjb2RlIG9mIDIgaXMgcmV0dXJuZWQuCitGb3IgdXNhZ2Ugb3Igb3RoZXIgZXJyb3JzLCBhbiBleGl0IGNvZGUgb2YgNCBpcyByZXR1cm5lZC4KKy5TSCBBVVRIT1IKKy5CIGJsa2lkCit3YXMgd3JpdHRlbiBieSBBbmRyZWFzIERpbGdlciBmb3IgbGliYmxraWQuCisuU0ggQVZBSUxBQklMSVRZCisuQiBibGtpZAoraXMgcGFydCB0aGUgZTJmc3Byb2dzIHBhY2thZ2Ugc2luY2UgdmVyc2lvbiAxLjI2IGFuZCBpcyBhdmFpbGFibGUgZnJvbQoraHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQuCisuU0ggIlNFRSBBTFNPIgorLkJSIGxpYmJsa2lkICgzKQpkaWZmIC0tZ2l0IGEvbWlzYy9ibGtpZC5jIGIvbWlzYy9ibGtpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZmZmYWUKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2Jsa2lkLmMKQEAgLTAsMCArMSw0MzEgQEAKKy8qCisgKiBibGtpZC5jIC0gVXNlciBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGZvciBsaWJibGtpZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBBbmRyZWFzIERpbGdlcgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZkZWYgSEFWRV9URVJNSU9TX0gKKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1RFUk1JT19ICisjaW5jbHVkZSA8dGVybWlvLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGludCBnZXRvcHQoaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZyk7CitleHRlcm4gY2hhciAqb3B0YXJnOworZXh0ZXJuIGludCBvcHRpbmQ7CisjZW5kaWYKKworI2RlZmluZSBPVVRQVVRfVkFMVUVfT05MWQkweDAwMDEKKyNkZWZpbmUgT1VUUFVUX0RFVklDRV9PTkxZCTB4MDAwMgorI2RlZmluZSBPVVRQVVRfUFJFVFRZX0xJU1QJMHgwMDA0CisKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisjaW5jbHVkZSAiYmxraWQvYmxraWQuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lID0gImJsa2lkIjsKKworc3RhdGljIHZvaWQgcHJpbnRfdmVyc2lvbihGSUxFICpvdXQpCit7CisJZnByaW50ZihvdXQsICIlcyAlcyAoJXMpXG4iLCBwcm9nbmFtZSwgQkxLSURfVkVSU0lPTiwgQkxLSURfREFURSk7Cit9CisKK3N0YXRpYyB2b2lkIHVzYWdlKGludCBlcnJvcikKK3sKKwlGSUxFICpvdXQgPSBlcnJvciA/IHN0ZGVyciA6IHN0ZG91dDsKKworCXByaW50X3ZlcnNpb24ob3V0KTsKKwlmcHJpbnRmKG91dCwKKwkJInVzYWdlOlx0JXMgWy1jIDxmaWxlPl0gWy1naGxMdl0gWy1vIGZvcm1hdF0gIgorCQkiWy1zIDx0YWc+XSBbLXQgPHRva2VuPl1cbiAgICBbLXcgPGZpbGU+XSBbZGV2IC4uLl1cbiIKKwkJIlx0LWNcdGNhY2hlIGZpbGUgKGRlZmF1bHQ6IC9ldGMvYmxraWQudGFiLCAvZGV2L251bGwgPSBub25lKVxuIgorCQkiXHQtaFx0cHJpbnQgdGhpcyB1c2FnZSBtZXNzYWdlIGFuZCBleGl0XG4iCisJCSJcdC1nXHRnYXJiYWdlIGNvbGxlY3QgdGhlIGJsa2lkIGNhY2hlXG4iCisJCSJcdC1zXHRzaG93IHNwZWNpZmllZCB0YWcocykgKGRlZmF1bHQgc2hvdyBhbGwgdGFncylcbiIKKwkJIlx0LXRcdGZpbmQgZGV2aWNlIHdpdGggYSBzcGVjaWZpYyB0b2tlbiAoTkFNRT12YWx1ZSBwYWlyKVxuIgorCQkiXHQtbFx0bG9va3VwIHRoZSB0aGUgZmlyc3QgZGV2aWNlIHdpdGggYXJndW1lbnRzIHNwZWNpZmllZCBieSAtdFxuIgorCQkiXHQtdlx0cHJpbnQgdmVyc2lvbiBhbmQgZXhpdFxuIgorCQkiXHQtd1x0d3JpdGUgY2FjaGUgdG8gZGlmZmVyZW50IGZpbGUgKC9kZXYvbnVsbCA9IG5vIHdyaXRlKVxuIgorCQkiXHRkZXZcdHNwZWNpZnkgZGV2aWNlKHMpIHRvIHByb2JlIChkZWZhdWx0OiBhbGwgZGV2aWNlcylcbiIsCisJCXByb2duYW1lKTsKKwlleGl0KGVycm9yKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyAic2FmZSIgcHJpbnRpbmcuICBJdCB3aWxsIGNvbnZlcnQgbm9uLXByaW50YWJsZQorICogQVNDSUkgY2hhcmFjdGVycyB1c2luZyAnXicgYW5kIE0tIG5vdGF0aW9uLgorICovCitzdGF0aWMgdm9pZCBzYWZlX3ByaW50KGNvbnN0IGNoYXIgKmNwLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGNoYXIJY2g7CisKKwlpZiAobGVuIDwgMCkKKwkJbGVuID0gc3RybGVuKGNwKTsKKworCXdoaWxlIChsZW4tLSkgeworCQljaCA9ICpjcCsrOworCQlpZiAoY2ggPiAxMjgpIHsKKwkJCWZwdXRzKCJNLSIsIHN0ZG91dCk7CisJCQljaCAtPSAxMjg7CisJCX0KKwkJaWYgKChjaCA8IDMyKSB8fCAoY2ggPT0gMHg3ZikpIHsKKwkJCWZwdXRjKCdeJywgc3Rkb3V0KTsKKwkJCWNoIF49IDB4NDA7IC8qIF5ALCBeQSwgXkI7IF4/IGZvciBERUwgKi8KKwkJfQorCQlmcHV0YyhjaCwgc3Rkb3V0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3Rlcm1pbmFsX3dpZHRoKHZvaWQpCit7CisjaWZkZWYgVElPQ0dTSVpFCisJc3RydWN0IHR0eXNpemUJdF93aW47CisjZW5kaWYKKyNpZmRlZiBUSU9DR1dJTlNaCisJc3RydWN0IHdpbnNpemUJd193aW47CisjZW5kaWYKKyAgICAgICAgY29uc3QgY2hhcgkqY3A7CisJaW50IHdpZHRoID0gODA7CisKKyNpZmRlZiBUSU9DR1NJWkUKKwlpZiAoaW9jdGwgKDAsIFRJT0NHU0laRSwgJnRfd2luKSA9PSAwKSB7CisJCXdpZHRoID0gdF93aW4udHNfY29sczsKKwkJZ290byBnb3RfaXQ7CisJfQorI2VuZGlmCisjaWZkZWYgVElPQ0dXSU5TWgorCWlmIChpb2N0bCAoMCwgVElPQ0dXSU5TWiwgJndfd2luKSA9PSAwKSB7CisJCXdpZHRoID0gd193aW4ud3NfY29sOworCQlnb3RvIGdvdF9pdDsKKwl9CisjZW5kaWYKKyAgICAgICAgY3AgPSBnZXRlbnYoIkNPTFVNTlMiKTsKKwlpZiAoY3ApCisJCXdpZHRoID0gYXRvaShjcCk7Citnb3RfaXQ6CisJaWYgKHdpZHRoID4gNDA5NikKKwkJcmV0dXJuIDQwOTY7CS8qIHNhbml0eSBjaGVjayAqLworCXJldHVybiB3aWR0aDsKK30KKworc3RhdGljIGludCBwcmV0dHlfcHJpbnRfd29yZChjb25zdCBjaGFyICpzdHIsIGludCBtYXhfbGVuLAorCQkJICAgICBpbnQgbGVmdF9sZW4sIGludCBvdmVyZmxvd19ubCkKK3sKKwlpbnQgbGVuID0gc3RybGVuKHN0cikgKyBsZWZ0X2xlbjsKKwlpbnQgcmV0ID0gMDsKKworCWZwdXRzKHN0ciwgc3Rkb3V0KTsKKwlpZiAob3ZlcmZsb3dfbmwgJiYgbGVuID4gbWF4X2xlbikgeworCQlmcHV0YygnXG4nLCBzdGRvdXQpOworCQlsZW4gPSAwOworCX0gZWxzZSBpZiAobGVuID4gbWF4X2xlbikKKwkJcmV0ID0gbGVuIC0gbWF4X2xlbjsKKwlkbyB7CisJCWZwdXRjKCcgJywgc3Rkb3V0KTsKKwl9IHdoaWxlIChsZW4rKyA8IG1heF9sZW4pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHByZXR0eV9wcmludF9saW5lKGNvbnN0IGNoYXIgKmRldmljZSwgY29uc3QgY2hhciAqZnNfdHlwZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBjaGFyICptdHB0LAorCQkJICAgICAgY29uc3QgY2hhciAqdXVpZCkKK3sKKwlzdGF0aWMgaW50IGRldmljZV9sZW4gPSAxMCwgZnNfdHlwZV9sZW4gPSA3OworCXN0YXRpYyBpbnQgbGFiZWxfbGVuID0gOCwgbXRwdF9sZW4gPSAxNDsKKwlzdGF0aWMgaW50IHRlcm1fd2lkdGggPSAtMTsKKwlpbnQgbGVuLCB3OworCisJaWYgKHRlcm1fd2lkdGggPCAwKSB7CisJCXRlcm1fd2lkdGggPSBnZXRfdGVybWluYWxfd2lkdGgoKTsKKworCQlpZiAodGVybV93aWR0aCA+IDgwKSB7CisJCQl0ZXJtX3dpZHRoIC09IDgwOworCQkJdyA9IHRlcm1fd2lkdGggLyAxMDsKKwkJCWlmICh3ID4gOCkKKwkJCQl3ID0gODsKKwkJCXRlcm1fd2lkdGggLT0gMip3OworCQkJbGFiZWxfbGVuICs9IHc7CisJCQlmc190eXBlX2xlbiArPSB3OworCQkJdyA9IHRlcm1fd2lkdGgvMjsKKwkJCWRldmljZV9sZW4gKz0gdzsKKwkJCW10cHRfbGVuICs9dzsKKwkJfQorCX0KKworCWxlbiA9IHByZXR0eV9wcmludF93b3JkKGRldmljZSwgZGV2aWNlX2xlbiwgMCwgMSk7CisJbGVuID0gcHJldHR5X3ByaW50X3dvcmQoZnNfdHlwZSwgZnNfdHlwZV9sZW4sIGxlbiwgMCk7CisJbGVuID0gcHJldHR5X3ByaW50X3dvcmQobGFiZWwsIGxhYmVsX2xlbiwgbGVuLCAwKTsKKwlsZW4gPSBwcmV0dHlfcHJpbnRfd29yZChtdHB0LCBtdHB0X2xlbiwgbGVuLCAwKTsKKwlmcHV0cyh1dWlkLCBzdGRvdXQpOworCWZwdXRjKCdcbicsIHN0ZG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIHByZXR0eV9wcmludF9kZXYoYmxraWRfZGV2IGRldikKK3sKKwlibGtpZF90YWdfaXRlcmF0ZQlpdGVyOworCWNvbnN0IGNoYXIJCSp0eXBlLCAqdmFsdWUsICpkZXZuYW1lOworCWNvbnN0IGNoYXIJCSp1dWlkID0gIiIsICpmc190eXBlID0gIiIsICpsYWJlbCA9ICIiOworCWludAkJCWxlbiwgbW91bnRfZmxhZ3M7CisJY2hhcgkJCW10cHRbODBdOworCWVycmNvZGVfdAkJcmV0dmFsOworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXByZXR0eV9wcmludF9saW5lKCJkZXZpY2UiLCAiZnNfdHlwZSIsICJsYWJlbCIsCisJCQkJICAibW91bnQgcG9pbnQiLCAiVVVJRCIpOworCQlmb3IgKGxlbj1nZXRfdGVybWluYWxfd2lkdGgoKS0xOyBsZW4gPiAwOyBsZW4tLSkKKwkJCWZwdXRjKCctJywgc3Rkb3V0KTsKKwkJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKKwkJcmV0dXJuOworCX0KKworCWRldm5hbWUgPSBibGtpZF9kZXZfZGV2bmFtZShkZXYpOworCWlmIChhY2Nlc3MoZGV2bmFtZSwgRl9PSykpCisJCXJldHVybjsKKworCS8qIEdldCB0aGUgdXVpZCwgbGFiZWwsIHR5cGUgKi8KKwlpdGVyID0gYmxraWRfdGFnX2l0ZXJhdGVfYmVnaW4oZGV2KTsKKwl3aGlsZSAoYmxraWRfdGFnX25leHQoaXRlciwgJnR5cGUsICZ2YWx1ZSkgPT0gMCkgeworCQlpZiAoIXN0cmNtcCh0eXBlLCAiVVVJRCIpKQorCQkJdXVpZCA9IHZhbHVlOworCQlpZiAoIXN0cmNtcCh0eXBlLCAiVFlQRSIpKQorCQkJZnNfdHlwZSA9IHZhbHVlOworCQlpZiAoIXN0cmNtcCh0eXBlLCAiTEFCRUwiKSkKKwkJCWxhYmVsID0gdmFsdWU7CisJfQorCWJsa2lkX3RhZ19pdGVyYXRlX2VuZChpdGVyKTsKKworCS8qIEdldCB0aGUgbW91bnQgcG9pbnQgKi8KKwltdHB0WzBdID0gMDsKKwlyZXR2YWwgPSBleHQyZnNfY2hlY2tfbW91bnRfcG9pbnQoZGV2bmFtZSwgJm1vdW50X2ZsYWdzLAorCQkJCQkgIG10cHQsIHNpemVvZihtdHB0KSk7CisJaWYgKHJldHZhbCA9PSAwKSB7CisJCWlmIChtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkgeworCQkJaWYgKCFtdHB0WzBdKQorCQkJCXN0cmNweShtdHB0LCAiKG1vdW50ZWQsIG10cHQgdW5rbm93bikiKTsKKwkJfSBlbHNlIGlmIChtb3VudF9mbGFncyAmIEVYVDJfTUZfQlVTWSkKKwkJCXN0cmNweShtdHB0LCAiKGluIHVzZSkiKTsKKwkJZWxzZQorCQkJc3RyY3B5KG10cHQsICIobm90IG1vdW50ZWQpIik7CisJfQorCisJcHJldHR5X3ByaW50X2xpbmUoZGV2bmFtZSwgZnNfdHlwZSwgbGFiZWwsIG10cHQsIHV1aWQpOworfQorCitzdGF0aWMgdm9pZCBwcmludF90YWdzKGJsa2lkX2RldiBkZXYsIGNoYXIgKnNob3dbXSwgaW50IG51bXRhZywgaW50IG91dHB1dCkKK3sKKwlibGtpZF90YWdfaXRlcmF0ZQlpdGVyOworCWNvbnN0IGNoYXIJCSp0eXBlLCAqdmFsdWU7CisJaW50IAkJCWksIGZpcnN0ID0gMTsKKworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwlpZiAob3V0cHV0ICYgT1VUUFVUX1BSRVRUWV9MSVNUKSB7CisJCXByZXR0eV9wcmludF9kZXYoZGV2KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChvdXRwdXQgJiBPVVRQVVRfREVWSUNFX09OTFkpIHsKKwkJcHJpbnRmKCIlc1xuIiwgYmxraWRfZGV2X2Rldm5hbWUoZGV2KSk7CisJCXJldHVybjsKKwl9CisKKwlpdGVyID0gYmxraWRfdGFnX2l0ZXJhdGVfYmVnaW4oZGV2KTsKKwl3aGlsZSAoYmxraWRfdGFnX25leHQoaXRlciwgJnR5cGUsICZ2YWx1ZSkgPT0gMCkgeworCQlpZiAobnVtdGFnICYmIHNob3cpIHsKKwkJCWZvciAoaT0wOyBpIDwgbnVtdGFnOyBpKyspCisJCQkJaWYgKCFzdHJjbXAodHlwZSwgc2hvd1tpXSkpCisJCQkJCWJyZWFrOworCQkJaWYgKGkgPj0gbnVtdGFnKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmIChvdXRwdXQgJiBPVVRQVVRfVkFMVUVfT05MWSkgeworCQkJZnB1dHModmFsdWUsIHN0ZG91dCk7CisJCQlmcHV0YygnXG4nLCBzdGRvdXQpOworCQl9IGVsc2UgeworCQkJaWYgKGZpcnN0KSB7CisJCQkJcHJpbnRmKCIlczogIiwgYmxraWRfZGV2X2Rldm5hbWUoZGV2KSk7CisJCQkJZmlyc3QgPSAwOworCQkJfQorCQkJZnB1dHModHlwZSwgc3Rkb3V0KTsKKwkJCWZwdXRzKCI9XCIiLCBzdGRvdXQpOworCQkJc2FmZV9wcmludCh2YWx1ZSwgLTEpOworCQkJZnB1dHMoIlwiICIsIHN0ZG91dCk7CisJCX0KKwl9CisJYmxraWRfdGFnX2l0ZXJhdGVfZW5kKGl0ZXIpOworCisJaWYgKCFmaXJzdCAmJiAhKG91dHB1dCAmIE9VVFBVVF9WQUxVRV9PTkxZKSkKKwkJcHJpbnRmKCJcbiIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJYmxraWRfY2FjaGUgY2FjaGUgPSBOVUxMOworCWNoYXIgKmRldmljZXNbMTI4XSA9IHsgTlVMTCwgfTsKKwljaGFyICpzaG93WzEyOF0gPSB7IE5VTEwsIH07CisJY2hhciAqc2VhcmNoX3R5cGUgPSBOVUxMLCAqc2VhcmNoX3ZhbHVlID0gTlVMTDsKKwljaGFyICpyZWFkID0gTlVMTDsKKwljaGFyICp3cml0ZSA9IE5VTEw7CisJdW5zaWduZWQgaW50IG51bWRldiA9IDAsIG51bXRhZyA9IDA7CisJaW50IHZlcnNpb24gPSAwOworCWludCBlcnIgPSA0OworCXVuc2lnbmVkIGludCBpOworCWludCBvdXRwdXRfZm9ybWF0ID0gMDsKKwlpbnQgbG9va3VwID0gMCwgZ2MgPSAwOworCWludCBjOworCisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiYzpmOmdobExvOnM6dDp3OnYiKSkgIT0gRU9GKQorCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYyc6CisJCQlyZWFkID0gb3B0YXJnOworCQkJaWYgKCF3cml0ZSkKKwkJCQl3cml0ZSA9IHJlYWQ7CisJCQlicmVhazsKKwkJY2FzZSAnbCc6CisJCQlsb29rdXArKzsKKwkJCWJyZWFrOworCQljYXNlICdMJzoKKwkJCW91dHB1dF9mb3JtYXQgPSBPVVRQVVRfUFJFVFRZX0xJU1Q7CisJCQlicmVhazsKKwkJY2FzZSAnZyc6CisJCQlnYyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnbyc6CisJCQlpZiAoIXN0cmNtcChvcHRhcmcsICJ2YWx1ZSIpKQorCQkJCW91dHB1dF9mb3JtYXQgPSBPVVRQVVRfVkFMVUVfT05MWTsKKwkJCWVsc2UgaWYgKCFzdHJjbXAob3B0YXJnLCAiZGV2aWNlIikpCisJCQkJb3V0cHV0X2Zvcm1hdCA9IE9VVFBVVF9ERVZJQ0VfT05MWTsKKwkJCWVsc2UgaWYgKCFzdHJjbXAob3B0YXJnLCAibGlzdCIpKQorCQkJCW91dHB1dF9mb3JtYXQgPSBPVVRQVVRfUFJFVFRZX0xJU1Q7CisJCQllbHNlIGlmICghc3RyY21wKG9wdGFyZywgImZ1bGwiKSkKKwkJCQlvdXRwdXRfZm9ybWF0ID0gMDsKKwkJCWVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBvdXRwdXQgZm9ybWF0ICVzLiAiCisJCQkJCSJDaG9vc2UgZnJvbSB2YWx1ZSxcblx0IgorCQkJCQkiZGV2aWNlLCBsaXN0LCBvciBmdWxsXG4iLCBvcHRhcmcpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlpZiAobnVtdGFnID49IHNpemVvZihzaG93KSAvIHNpemVvZigqc2hvdykpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlRvbyBtYW55IHRhZ3Mgc3BlY2lmaWVkXG4iKTsKKwkJCQl1c2FnZShlcnIpOworCQkJfQorCQkJc2hvd1tudW10YWcrK10gPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAndCc6CisJCQlpZiAoc2VhcmNoX3R5cGUpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkNhbiBvbmx5IHNlYXJjaCBmb3IgIgorCQkJCQkJIm9uZSBOQU1FPXZhbHVlIHBhaXJcbiIpOworCQkJCXVzYWdlKGVycik7CisJCQl9CisJCQlpZiAoYmxraWRfcGFyc2VfdGFnX3N0cmluZyhvcHRhcmcsCisJCQkJCQkgICAmc2VhcmNoX3R5cGUsCisJCQkJCQkgICAmc2VhcmNoX3ZhbHVlKSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiLXQgbmVlZHMgTkFNRT12YWx1ZSBwYWlyXG4iKTsKKwkJCQl1c2FnZShlcnIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3YnOgorCQkJdmVyc2lvbiA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAndyc6CisJCQl3cml0ZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCWVyciA9IDA7CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQlkZWZhdWx0OgorCQkJdXNhZ2UoZXJyKTsKKwkJfQorCisJd2hpbGUgKG9wdGluZCA8IGFyZ2MpCisJCWRldmljZXNbbnVtZGV2KytdID0gYXJndltvcHRpbmQrK107CisKKwlpZiAodmVyc2lvbikgeworCQlwcmludF92ZXJzaW9uKHN0ZG91dCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoYmxraWRfZ2V0X2NhY2hlKCZjYWNoZSwgcmVhZCkgPCAwKQorCQlnb3RvIGV4aXQ7CisKKwllcnIgPSAyOworCWlmIChnYykgeworCQlibGtpZF9nY19jYWNoZShjYWNoZSk7CisJCWdvdG8gZXhpdDsKKwl9CisJaWYgKG91dHB1dF9mb3JtYXQgJiBPVVRQVVRfUFJFVFRZX0xJU1QpCisJCXByZXR0eV9wcmludF9kZXYoTlVMTCk7CisKKwlpZiAobG9va3VwKSB7CisJCWJsa2lkX2RldiBkZXY7CisKKwkJaWYgKCFzZWFyY2hfdHlwZSkgeworCQkJZnByaW50ZihzdGRlcnIsICJUaGUgbG9va3VwIG9wdGlvbiByZXF1aXJlcyBhICIKKwkJCQkic2VhcmNoIHR5cGUgc3BlY2lmaWVkIHVzaW5nIC10XG4iKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJLyogTG9hZCBhbnkgYWRkaXRpb25hbCBkZXZpY2VzIG5vdCBpbiB0aGUgY2FjaGUgKi8KKwkJZm9yIChpID0gMDsgaSA8IG51bWRldjsgaSsrKQorCQkJYmxraWRfZ2V0X2RldihjYWNoZSwgZGV2aWNlc1tpXSwgQkxLSURfREVWX05PUk1BTCk7CisKKwkJaWYgKChkZXYgPSBibGtpZF9maW5kX2Rldl93aXRoX3RhZyhjYWNoZSwgc2VhcmNoX3R5cGUsCisJCQkJCQkgICBzZWFyY2hfdmFsdWUpKSkgeworCQkJcHJpbnRfdGFncyhkZXYsIHNob3csIG51bXRhZywgb3V0cHV0X2Zvcm1hdCk7CisJCQllcnIgPSAwOworCQl9CisJLyogSWYgd2UgZGlkbid0IHNwZWNpZnkgYSBzaW5nbGUgZGV2aWNlLCBzaG93IGFsbCBhdmFpbGFibGUgZGV2aWNlcyAqLworCX0gZWxzZSBpZiAoIW51bWRldikgeworCQlibGtpZF9kZXZfaXRlcmF0ZQlpdGVyOworCQlibGtpZF9kZXYJCWRldjsKKworCQlibGtpZF9wcm9iZV9hbGwoY2FjaGUpOworCisJCWl0ZXIgPSBibGtpZF9kZXZfaXRlcmF0ZV9iZWdpbihjYWNoZSk7CisJCWJsa2lkX2Rldl9zZXRfc2VhcmNoKGl0ZXIsIHNlYXJjaF90eXBlLCBzZWFyY2hfdmFsdWUpOworCQl3aGlsZSAoYmxraWRfZGV2X25leHQoaXRlciwgJmRldikgPT0gMCkgeworCQkJZGV2ID0gYmxraWRfdmVyaWZ5KGNhY2hlLCBkZXYpOworCQkJaWYgKCFkZXYpCisJCQkJY29udGludWU7CisJCQlwcmludF90YWdzKGRldiwgc2hvdywgbnVtdGFnLCBvdXRwdXRfZm9ybWF0KTsKKwkJCWVyciA9IDA7CisJCX0KKwkJYmxraWRfZGV2X2l0ZXJhdGVfZW5kKGl0ZXIpOworCS8qIEFkZCBhbGwgc3BlY2lmaWVkIGRldmljZXMgdG8gY2FjaGUgKG9wdGlvbmFsbHkgZGlzcGxheSB0YWdzKSAqLworCX0gZWxzZSBmb3IgKGkgPSAwOyBpIDwgbnVtZGV2OyBpKyspIHsKKwkJYmxraWRfZGV2IGRldiA9IGJsa2lkX2dldF9kZXYoY2FjaGUsIGRldmljZXNbaV0sCisJCQkJCQkgIEJMS0lEX0RFVl9OT1JNQUwpOworCisJCWlmIChkZXYpIHsKKwkJCWlmIChzZWFyY2hfdHlwZSAmJgorCQkJICAgICFibGtpZF9kZXZfaGFzX3RhZyhkZXYsIHNlYXJjaF90eXBlLAorCQkJCQkgICAgICAgc2VhcmNoX3ZhbHVlKSkKKwkJCQljb250aW51ZTsKKwkJCXByaW50X3RhZ3MoZGV2LCBzaG93LCBudW10YWcsIG91dHB1dF9mb3JtYXQpOworCQkJZXJyID0gMDsKKwkJfQorCX0KKworZXhpdDoKKwlmcmVlKHNlYXJjaF90eXBlKTsKKwlmcmVlKHNlYXJjaF92YWx1ZSk7CisJYmxraWRfcHV0X2NhY2hlKGNhY2hlKTsKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvbWlzYy9jaGF0dHIuMS5pbiBiL21pc2MvY2hhdHRyLjEuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViM2VkOAotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvY2hhdHRyLjEuaW4KQEAgLTAsMCArMSwyMTIgQEAKKy5cIiAtKi0gbnJvZmYgLSotCisuVEggQ0hBVFRSIDEgIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2NoYXR0ciBcLSBjaGFuZ2UgZmlsZSBhdHRyaWJ1dGVzIG9uIGEgTGludXggZmlsZSBzeXN0ZW0KKy5TSCBTWU5PUFNJUworLkIgY2hhdHRyCitbCisuQiBcLVJWZgorXQorWworLkIgXC12CisuSSB2ZXJzaW9uCitdCitbCisuSSBtb2RlCitdCisuSSBmaWxlcy4uLgorLlNIIERFU0NSSVBUSU9OCisuQiBjaGF0dHIKK2NoYW5nZXMgdGhlIGZpbGUgYXR0cmlidXRlcyBvbiBhIExpbnV4IGZpbGUgc3lzdGVtLgorLlBQCitUaGUgZm9ybWF0IG9mIGEgc3ltYm9saWMgbW9kZSBpcyArLT1bYUFjQ2REZWlqc1N0VHVdLgorLlBQCitUaGUgb3BlcmF0b3IgJysnIGNhdXNlcyB0aGUgc2VsZWN0ZWQgYXR0cmlidXRlcyB0byBiZSBhZGRlZCB0byB0aGUKK2V4aXN0aW5nIGF0dHJpYnV0ZXMgb2YgdGhlIGZpbGVzOyAnLScgY2F1c2VzIHRoZW0gdG8gYmUgcmVtb3ZlZDsgYW5kICc9JworY2F1c2VzIHRoZW0gdG8gYmUgdGhlIG9ubHkgYXR0cmlidXRlcyB0aGF0IHRoZSBmaWxlcyBoYXZlLgorLlBQCitUaGUgbGV0dGVycyAnYUFjQ2REZWlqc1N0VHUnIHNlbGVjdCB0aGUgbmV3IGF0dHJpYnV0ZXMgZm9yIHRoZSBmaWxlczoKK2FwcGVuZCBvbmx5IChhKSwKK25vIGF0aW1lIHVwZGF0ZXMgKEEpLAorY29tcHJlc3NlZCAoYyksCitubyBjb3B5IG9uIHdyaXRlIChDKSwKK25vIGR1bXAgKGQpLAorc3luY2hyb25vdXMgZGlyZWN0b3J5IHVwZGF0ZXMgKEQpLAorZXh0ZW50IGZvcm1hdCAoZSksCitpbW11dGFibGUgKGkpLAorZGF0YSBqb3VybmFsbGluZyAoaiksCitzZWN1cmUgZGVsZXRpb24gKHMpLAorc3luY2hyb25vdXMgdXBkYXRlcyAoUyksCitubyB0YWlsLW1lcmdpbmcgKHQpLAordG9wIG9mIGRpcmVjdG9yeSBoaWVyYXJjaHkgKFQpLAorYW5kIHVuZGVsZXRhYmxlICh1KS4KKy5QUAorVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSByZWFkLW9ubHksIGFuZCBtYXkgYmUgbGlzdGVkIGJ5CisuQlIgbHNhdHRyICgxKQorYnV0IG5vdCBtb2RpZmllZCBieSBjaGF0dHI6Citjb21wcmVzc2lvbiBlcnJvciAoRSksCitodWdlIGZpbGUgKGgpLAoraW5kZXhlZCBkaXJlY3RvcnkgKEkpLAoraW5saW5lIGRhdGEgKE4pLAorY29tcHJlc3Npb24gcmF3IGFjY2VzcyAoWCksCithbmQgY29tcHJlc3NlZCBkaXJ0eSBmaWxlIChaKS4KKy5QUAorTm90IGFsbCBmbGFncyBhcmUgc3VwcG9ydGVkIG9yIHV0aWxpemVkIGJ5IGFsbCBmaWxlc3lzdGVtczsgcmVmZXIgdG8KK2ZpbGVzeXN0ZW0tc3BlY2lmaWMgbWFuIHBhZ2VzIHN1Y2ggYXMKKy5CUiBidHJmcyAoNSksCisuQlIgZXh0NCAoNSksCithbmQKKy5CUiB4ZnMgKDUpCitmb3IgbW9yZSBmaWxlc3lzdGVtLXNwZWNpZmljIGRldGFpbHMuCisuU0ggT1BUSU9OUworLlRQCisuQiBcLVIKK1JlY3Vyc2l2ZWx5IGNoYW5nZSBhdHRyaWJ1dGVzIG9mIGRpcmVjdG9yaWVzIGFuZCB0aGVpciBjb250ZW50cy4KKy5UUAorLkIgXC1WCitCZSB2ZXJib3NlIHdpdGggY2hhdHRyJ3Mgb3V0cHV0IGFuZCBwcmludCB0aGUgcHJvZ3JhbSB2ZXJzaW9uLgorLlRQCisuQiBcLWYKK1N1cHByZXNzIG1vc3QgZXJyb3IgbWVzc2FnZXMuCisuVFAKKy5CSSBcLXYgIiB2ZXJzaW9uIgorU2V0IHRoZSBmaWxlJ3MgdmVyc2lvbi9nZW5lcmF0aW9uIG51bWJlci4KKy5TSCBBVFRSSUJVVEVTCitBIGZpbGUgd2l0aCB0aGUgJ2EnIGF0dHJpYnV0ZSBzZXQgY2FuIG9ubHkgYmUgb3BlbiBpbiBhcHBlbmQgbW9kZSBmb3Igd3JpdGluZy4KK09ubHkgdGhlIHN1cGVydXNlciBvciBhIHByb2Nlc3MgcG9zc2Vzc2luZyB0aGUgQ0FQX0xJTlVYX0lNTVVUQUJMRQorY2FwYWJpbGl0eSBjYW4gc2V0IG9yIGNsZWFyIHRoaXMgYXR0cmlidXRlLgorLlBQCitXaGVuIGEgZmlsZSB3aXRoIHRoZSAnQScgYXR0cmlidXRlIHNldCBpcyBhY2Nlc3NlZCwgaXRzIGF0aW1lIHJlY29yZCBpcworbm90IG1vZGlmaWVkLiAgVGhpcyBhdm9pZHMgYSBjZXJ0YWluIGFtb3VudCBvZiBkaXNrIEkvTyBmb3IgbGFwdG9wCitzeXN0ZW1zLgorLlBQCitBIGZpbGUgd2l0aCB0aGUgJ2MnIGF0dHJpYnV0ZSBzZXQgaXMgYXV0b21hdGljYWxseSBjb21wcmVzc2VkIG9uIHRoZSBkaXNrCitieSB0aGUga2VybmVsLiAgQSByZWFkIGZyb20gdGhpcyBmaWxlIHJldHVybnMgdW5jb21wcmVzc2VkIGRhdGEuICBBIHdyaXRlIHRvCit0aGlzIGZpbGUgY29tcHJlc3NlcyBkYXRhIGJlZm9yZSBzdG9yaW5nIHRoZW0gb24gdGhlIGRpc2suICBOb3RlOiBwbGVhc2UKK21ha2Ugc3VyZSB0byByZWFkIHRoZSBidWdzIGFuZCBsaW1pdGF0aW9ucyBzZWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhpcworZG9jdW1lbnQuCisuUFAKK0EgZmlsZSB3aXRoIHRoZSAnQycgYXR0cmlidXRlIHNldCB3aWxsIG5vdCBiZSBzdWJqZWN0IHRvIGNvcHktb24td3JpdGUKK3VwZGF0ZXMuICBUaGlzIGZsYWcgaXMgb25seSBzdXBwb3J0ZWQgb24gZmlsZSBzeXN0ZW1zIHdoaWNoIHBlcmZvcm0KK2NvcHktb24td3JpdGUuICAoTm90ZTogRm9yIGJ0cmZzLCB0aGUgJ0MnIGZsYWcgc2hvdWxkIGJlCitzZXQgb24gbmV3IG9yIGVtcHR5IGZpbGVzLiAgSWYgaXQgaXMgc2V0IG9uIGEgZmlsZSB3aGljaCBhbHJlYWR5IGhhcworZGF0YSBibG9ja3MsIGl0IGlzIHVuZGVmaW5lZCB3aGVuIHRoZSBibG9ja3MgYXNzaWduZWQgdG8gdGhlIGZpbGUgd2lsbAorYmUgZnVsbHkgc3RhYmxlLiAgSWYgdGhlICdDJyBmbGFnIGlzIHNldCBvbiBhIGRpcmVjdG9yeSwgaXQgd2lsbCBoYXZlIG5vCitlZmZlY3Qgb24gdGhlIGRpcmVjdG9yeSwgYnV0IG5ldyBmaWxlcyBjcmVhdGVkIGluIHRoYXQgZGlyZWN0b3J5IHdpbGwKK3RoZSBOb19DT1cgYXR0cmlidXRlLikKKy5QUAorQSBmaWxlIHdpdGggdGhlICdkJyBhdHRyaWJ1dGUgc2V0IGlzIG5vdCBjYW5kaWRhdGUgZm9yIGJhY2t1cCB3aGVuIHRoZQorLkJSIGR1bXAgKDgpCitwcm9ncmFtIGlzIHJ1bi4KKy5QUAorV2hlbiBhIGRpcmVjdG9yeSB3aXRoIHRoZSAnRCcgYXR0cmlidXRlIHNldCBpcyBtb2RpZmllZCwKK3RoZSBjaGFuZ2VzIGFyZSB3cml0dGVuIHN5bmNocm9ub3VzbHkgb24gdGhlIGRpc2s7IHRoaXMgaXMgZXF1aXZhbGVudCB0bwordGhlICdkaXJzeW5jJyBtb3VudCBvcHRpb24gYXBwbGllZCB0byBhIHN1YnNldCBvZiB0aGUgZmlsZXMuCisuUFAKK1RoZSAnZScgYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSBmaWxlIGlzIHVzaW5nIGV4dGVudHMgZm9yIG1hcHBpbmcKK3RoZSBibG9ja3Mgb24gZGlzay4gIEl0IG1heSBub3QgYmUgcmVtb3ZlZCB1c2luZworLkJSIGNoYXR0ciAoMSkuCisuUFAKK1RoZSAnRScgYXR0cmlidXRlIGlzIHVzZWQgYnkgdGhlIGV4cGVyaW1lbnRhbCBjb21wcmVzc2lvbiBwYXRjaGVzIHRvCitpbmRpY2F0ZSB0aGF0IGEgY29tcHJlc3NlZCBmaWxlIGhhcyBhIGNvbXByZXNzaW9uIGVycm9yLiAgSXQgbWF5IG5vdCBiZQorc2V0IG9yIHJlc2V0IHVzaW5nCisuQlIgY2hhdHRyICgxKSwKK2FsdGhvdWdoIGl0IGNhbiBiZSBkaXNwbGF5ZWQgYnkKKy5CUiBsc2F0dHIgKDEpLgorLlBQCitUaGUgJ2gnIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIGZpbGUgaXMgc3RvcmluZyBpdHMgYmxvY2tzIGluIHVuaXRzIG9mIHRoZQorZmlsZXN5c3RlbSBibG9ja3NpemUgaW5zdGVhZCBvZiBpbiB1bml0cyBvZiBzZWN0b3JzLCBhbmQgbWVhbnMgdGhhdCB0aGUgZmlsZQoraXMgKG9yIGF0IG9uZSB0aW1lIHdhcykgbGFyZ2VyIHRoYW4gMlRCLiAgSXQgbWF5IG5vdCBiZSBzZXQgb3IgcmVzZXQgdXNpbmcKKy5CUiBjaGF0dHIgKDEpLAorYWx0aG91Z2ggaXQgY2FuIGJlIGRpc3BsYXllZCBieQorLkJSIGxzYXR0ciAoMSkuCisuUFAKK0EgZmlsZSB3aXRoIHRoZSAnaScgYXR0cmlidXRlIGNhbm5vdCBiZSBtb2RpZmllZDogaXQgY2Fubm90IGJlIGRlbGV0ZWQgb3IKK3JlbmFtZWQsIG5vIGxpbmsgY2FuIGJlIGNyZWF0ZWQgdG8gdGhpcyBmaWxlIGFuZCBubyBkYXRhIGNhbiBiZSB3cml0dGVuCit0byB0aGUgZmlsZS4gIE9ubHkgdGhlIHN1cGVydXNlciBvciBhIHByb2Nlc3MgcG9zc2Vzc2luZyB0aGUKK0NBUF9MSU5VWF9JTU1VVEFCTEUgY2FwYWJpbGl0eSBjYW4gc2V0IG9yIGNsZWFyIHRoaXMgYXR0cmlidXRlLgorLlBQCitUaGUgJ0knIGF0dHJpYnV0ZSBpcyB1c2VkIGJ5IHRoZSBodHJlZSBjb2RlIHRvIGluZGljYXRlIHRoYXQgYSBkaXJlY3RvcnkKK2lzIGJlaW5nIGluZGV4ZWQgdXNpbmcgaGFzaGVkIHRyZWVzLiAgSXQgbWF5IG5vdCBiZSBzZXQgb3IgcmVzZXQgdXNpbmcKKy5CUiBjaGF0dHIgKDEpLAorYWx0aG91Z2ggaXQgY2FuIGJlIGRpc3BsYXllZCBieQorLkJSIGxzYXR0ciAoMSkuCisuUFAKK0EgZmlsZSB3aXRoIHRoZSAnaicgYXR0cmlidXRlIGhhcyBhbGwgb2YgaXRzIGRhdGEgd3JpdHRlbiB0byB0aGUgZXh0Mworb3IgZXh0NCBqb3VybmFsIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIHRoZSBmaWxlIGl0c2VsZiwgaWYgdGhlIGZpbGVzeXN0ZW0KK2lzIG1vdW50ZWQgd2l0aCB0aGUgImRhdGE9b3JkZXJlZCIgb3IgImRhdGE9d3JpdGViYWNrIiBvcHRpb25zLiAgV2hlbiB0aGUKK2ZpbGVzeXN0ZW0gaXMgbW91bnRlZCB3aXRoIHRoZSAiZGF0YT1qb3VybmFsIiBvcHRpb24gYWxsIGZpbGUgZGF0YQoraXMgYWxyZWFkeSBqb3VybmFsbGVkIGFuZCB0aGlzIGF0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0LiAgT25seQordGhlIHN1cGVydXNlciBvciBhIHByb2Nlc3MgcG9zc2Vzc2luZyB0aGUgQ0FQX1NZU19SRVNPVVJDRQorY2FwYWJpbGl0eSBjYW4gc2V0IG9yIGNsZWFyIHRoaXMgYXR0cmlidXRlLgorLlBQCitBIGZpbGUgd2l0aCB0aGUgJ04nIGF0dHJpYnV0ZSBzZXQgaW5kaWNhdGVzIHRoYXQgdGhlIGZpbGUgaGFzIGRhdGEKK3N0b3JlZCBpbmxpbmUsIHdpdGhpbiB0aGUgaW5vZGUgaXRzZWxmLiBJdCBtYXkgbm90IGJlIHNldCBvciByZXNldCB1c2luZworLkJSIGNoYXR0ciAoMSksCithbHRob3VnaCBpdCBjYW4gYmUgZGlzcGxheWVkIGJ5CisuQlIgbHNhdHRyICgxKS4KKy5QUAorV2hlbiBhIGZpbGUgd2l0aCB0aGUgJ3MnIGF0dHJpYnV0ZSBzZXQgaXMgZGVsZXRlZCwgaXRzIGJsb2NrcyBhcmUgemVyb2VkCithbmQgd3JpdHRlbiBiYWNrIHRvIHRoZSBkaXNrLiAgTm90ZTogcGxlYXNlIG1ha2Ugc3VyZSB0byByZWFkIHRoZSBidWdzCithbmQgbGltaXRhdGlvbnMgc2VjdGlvbiBhdCB0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQuCisuUFAKK1doZW4gYSBmaWxlIHdpdGggdGhlICdTJyBhdHRyaWJ1dGUgc2V0IGlzIG1vZGlmaWVkLAordGhlIGNoYW5nZXMgYXJlIHdyaXR0ZW4gc3luY2hyb25vdXNseSBvbiB0aGUgZGlzazsgdGhpcyBpcyBlcXVpdmFsZW50IHRvCit0aGUgJ3N5bmMnIG1vdW50IG9wdGlvbiBhcHBsaWVkIHRvIGEgc3Vic2V0IG9mIHRoZSBmaWxlcy4KKy5QUAorQSBmaWxlIHdpdGggdGhlICd0JyBhdHRyaWJ1dGUgd2lsbCBub3QgaGF2ZSBhIHBhcnRpYWwgYmxvY2sgZnJhZ21lbnQgYXQKK3RoZSBlbmQgb2YgdGhlIGZpbGUgbWVyZ2VkIHdpdGggb3RoZXIgZmlsZXMgKGZvciB0aG9zZSBmaWxlc3lzdGVtcyB3aGljaAorc3VwcG9ydCB0YWlsLW1lcmdpbmcpLiAgVGhpcyBpcyBuZWNlc3NhcnkgZm9yIGFwcGxpY2F0aW9ucyBzdWNoIGFzIExJTE8KK3doaWNoIHJlYWQgdGhlIGZpbGVzeXN0ZW0gZGlyZWN0bHksIGFuZCB3aGljaCBkb24ndCB1bmRlcnN0YW5kIHRhaWwtbWVyZ2VkCitmaWxlcy4gIE5vdGU6IEFzIG9mIHRoaXMgd3JpdGluZywgdGhlIGV4dDIgb3IgZXh0MyBmaWxlc3lzdGVtcyBkbyBub3QKKyh5ZXQsIGV4Y2VwdCBpbiB2ZXJ5IGV4cGVyaW1lbnRhbCBwYXRjaGVzKSBzdXBwb3J0IHRhaWwtbWVyZ2luZy4KKy5QUAorQSBkaXJlY3Rvcnkgd2l0aCB0aGUgJ1QnIGF0dHJpYnV0ZSB3aWxsIGJlIGRlZW1lZCB0byBiZSB0aGUgdG9wIG9mCitkaXJlY3RvcnkgaGllcmFyY2hpZXMgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgT3Jsb3YgYmxvY2sgYWxsb2NhdG9yLgorVGhpcyBpcyBhIGhpbnQgdG8gdGhlIGJsb2NrIGFsbG9jYXRvciB1c2VkIGJ5IGV4dDMgYW5kIGV4dDQgdGhhdCB0aGUKK3N1YmRpcmVjdG9yaWVzIHVuZGVyIHRoaXMgZGlyZWN0b3J5IGFyZSBub3QgcmVsYXRlZCwgYW5kIHRodXMgc2hvdWxkIGJlCitzcHJlYWQgYXBhcnQgZm9yIGFsbG9jYXRpb24gcHVycG9zZXMuICAgRm9yIGV4YW1wbGUgaXQgaXMgYSB2ZXJ5IGdvb2QKK2lkZWEgdG8gc2V0IHRoZSAnVCcgYXR0cmlidXRlIG9uIHRoZSAvaG9tZSBkaXJlY3RvcnksIHNvIHRoYXQgL2hvbWUvam9obgorYW5kIC9ob21lL21hcnkgYXJlIHBsYWNlZCBpbnRvIHNlcGFyYXRlIGJsb2NrIGdyb3Vwcy4gIEZvciBkaXJlY3Rvcmllcword2hlcmUgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNldCwgdGhlIE9ybG92IGJsb2NrIGFsbG9jYXRvciB3aWxsIHRyeSB0bworZ3JvdXAgc3ViZGlyZWN0b3JpZXMgY2xvc2VyIHRvZ2V0aGVyIHdoZXJlIHBvc3NpYmxlLgorLlBQCitXaGVuIGEgZmlsZSB3aXRoIHRoZSAndScgYXR0cmlidXRlIHNldCBpcyBkZWxldGVkLCBpdHMgY29udGVudHMgYXJlCitzYXZlZC4gIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGFzayBmb3IgaXRzIHVuZGVsZXRpb24uICBOb3RlOiBwbGVhc2UKK21ha2Ugc3VyZSB0byByZWFkIHRoZSBidWdzIGFuZCBsaW1pdGF0aW9ucyBzZWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhpcworZG9jdW1lbnQuCisuUFAKK1RoZSAnWCcgYXR0cmlidXRlIGlzIHVzZWQgYnkgdGhlIGV4cGVyaW1lbnRhbCBjb21wcmVzc2lvbiBwYXRjaGVzIHRvCitpbmRpY2F0ZSB0aGF0IHRoZSByYXcgY29udGVudHMgb2YgYSBjb21wcmVzc2VkIGZpbGUgY2FuIGJlIGFjY2Vzc2VkCitkaXJlY3RseS4gIEl0IGN1cnJlbnRseSBtYXkgbm90IGJlIHNldCBvciByZXNldCB1c2luZworLkJSIGNoYXR0ciAoMSksCithbHRob3VnaCBpdCBjYW4gYmUgZGlzcGxheWVkIGJ5CisuQlIgbHNhdHRyICgxKS4KKy5QUAorVGhlICdaJyBhdHRyaWJ1dGUgaXMgdXNlZCBieSB0aGUgZXhwZXJpbWVudGFsIGNvbXByZXNzaW9uIHBhdGNoZXMgdG8KK2luZGljYXRlIGEgY29tcHJlc3NlZCBmaWxlIGlzIGRpcnR5LiAgSXQgbWF5IG5vdCBiZSBzZXQgb3IgcmVzZXQgdXNpbmcKKy5CUiBjaGF0dHIgKDEpLAorYWx0aG91Z2ggaXQgY2FuIGJlIGRpc3BsYXllZCBieQorLkJSIGxzYXR0ciAoMSkuCisuUFAKKy5TSCBBVVRIT1IKKy5CIGNoYXR0cgord2FzIHdyaXR0ZW4gYnkgUmVteSBDYXJkIDxSZW15LkNhcmRAbGludXgub3JnPi4gIEl0IGlzIGN1cnJlbnRseSBiZWluZworbWFpbnRhaW5lZCBieSBUaGVvZG9yZSBUcydvIDx0eXRzb0BhbHVtLm1pdC5lZHU+LgorLlNIIEJVR1MgQU5EIExJTUlUQVRJT05TCitUaGUgJ2MnLCAncycsICBhbmQgJ3UnIGF0dHJpYnV0ZXMgYXJlIG5vdCBob25vcmVkCitieSB0aGUgZXh0MiwgZXh0MywgYW5kIGV4dDQgZmlsZXN5c3RlbXMgYXMgaW1wbGVtZW50ZWQgaW4gdGhlIGN1cnJlbnQKK21haW5saW5lIExpbnV4IGtlcm5lbHMuCisuUFAKK1RoZSAnaicgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgYXMgZXh0MyBvciBleHQ0LgorLlBQCitUaGUgJ0QnIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCBvbiBMaW51eCBrZXJuZWwgMi41LjE5IGFuZCBsYXRlci4KKy5TSCBBVkFJTEFCSUxJVFkKKy5CIGNoYXR0cgoraXMgcGFydCBvZiB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgYW5kIGlzIGF2YWlsYWJsZSBmcm9tCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC4KKy5TSCBTRUUgQUxTTworLkJSIGxzYXR0ciAoMSksCisuQlIgYnRyZnMgKDUpLAorLkJSIGV4dDQgKDUpLAorLkJSIHhmcyAoNSkuCmRpZmYgLS1naXQgYS9taXNjL2NoYXR0ci5jIGIvbWlzYy9jaGF0dHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTMwMTA4Ci0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9jaGF0dHIuYwpAQCAtMCwwICsxLDMyNyBAQAorLyoKKyAqIGNoYXR0ci5jCQktIENoYW5nZSBmaWxlIGF0dHJpYnV0ZXMgb24gYW4gZXh0MiBmaWxlIHN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiBUaGlzIGZpbGUgY2FuIGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UKKyAqLworCisvKgorICogSGlzdG9yeToKKyAqIDkzLzEwLzMwCS0gQ3JlYXRpb24KKyAqIDkzLzExLzEzCS0gUmVwbGFjZSBzdGF0KCkgY2FsbHMgYnkgbHN0YXQoKSB0byBhdm9pZCBsb29wcworICogOTQvMDIvMjcJLSBJbnRlZ3JhdGVkIGluIFRlZCdzIGRpc3RyaWJ1dGlvbgorICogOTgvMTIvMjkJLSBJZ25vcmUgc3ltbGlua3Mgd2hlbiB3b3JraW5nIHJlY3Vyc2l2ZWx5IChHIE0gU2lwZSkKKyAqIDk4LzEyLzI5CS0gRGlzcGxheSB2ZXJzaW9uIGluZm8gb25seSB3aGVuIC1WIHNwZWNpZmllZCAoRyBNIFNpcGUpCisgKi8KKworI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIEVYVDJGU19BVFRSKHgpIF9fYXR0cmlidXRlX18oeCkKKyNlbHNlCisjZGVmaW5lIEVYVDJGU19BVFRSKHgpCisjZW5kaWYKKworI2lmbmRlZiBTX0lTTE5LCQkJLyogU28gd2UgY2FuIGNvbXBpbGUgZXZlbiB3aXRoIGdjYy13YXJuICovCisjIGlmZGVmIF9fU19JRkxOSworIyAgZGVmaW5lIFNfSVNMTksobW9kZSkJIF9fU19JU1RZUEUoKG1vZGUpLCBfX1NfSUZMTkspCisjIGVsc2UKKyMgIGRlZmluZSBTX0lTTE5LKG1vZGUpICAwCisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyNpbmNsdWRlICJlMnAvZTJwLmgiCisKKyNpbmNsdWRlICIuLi92ZXJzaW9uLmgiCisjaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIHByb2dyYW1fbmFtZSA9ICJjaGF0dHIiOworCitzdGF0aWMgaW50IGFkZDsKK3N0YXRpYyBpbnQgcmVtOworc3RhdGljIGludCBzZXQ7CitzdGF0aWMgaW50IHNldF92ZXJzaW9uOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyB2ZXJzaW9uOworCitzdGF0aWMgaW50IHJlY3Vyc2l2ZTsKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgc2lsZW50OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhZjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJmOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Y7CisKKyNpZmRlZiBfTEZTNjRfTEFSR0VGSUxFCisjZGVmaW5lIExTVEFUCQlsc3RhdDY0CisjZGVmaW5lIFNUUlVDVF9TVEFUCXN0cnVjdCBzdGF0NjQKKyNlbHNlCisjZGVmaW5lIExTVEFUCQlsc3RhdAorI2RlZmluZSBTVFJVQ1RfU1RBVAlzdHJ1Y3Qgc3RhdAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsCisJCV8oIlVzYWdlOiAlcyBbLVJWZl0gWy0rPWFBY0NkRGVpanNTdFR1XSBbLXYgdmVyc2lvbl0gZmlsZXMuLi5cbiIpLAorCQlwcm9ncmFtX25hbWUpOworCWV4aXQoMSk7Cit9CisKK3N0cnVjdCBmbGFnc19jaGFyIHsKKwl1bnNpZ25lZCBsb25nCWZsYWc7CisJY2hhciAJCW9wdGNoYXI7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZsYWdzX2NoYXIgZmxhZ3NfYXJyYXlbXSA9IHsKKwl7IEVYVDJfTk9BVElNRV9GTCwgJ0EnIH0sCisJeyBFWFQyX1NZTkNfRkwsICdTJyB9LAorCXsgRVhUMl9ESVJTWU5DX0ZMLCAnRCcgfSwKKwl7IEVYVDJfQVBQRU5EX0ZMLCAnYScgfSwKKwl7IEVYVDJfQ09NUFJfRkwsICdjJyB9LAorCXsgRVhUMl9OT0RVTVBfRkwsICdkJyB9LAorCXsgRVhUNF9FWFRFTlRTX0ZMLCAnZSd9LAorCXsgRVhUMl9JTU1VVEFCTEVfRkwsICdpJyB9LAorCXsgRVhUM19KT1VSTkFMX0RBVEFfRkwsICdqJyB9LAorCXsgRVhUMl9TRUNSTV9GTCwgJ3MnIH0sCisJeyBFWFQyX1VOUk1fRkwsICd1JyB9LAorCXsgRVhUMl9OT1RBSUxfRkwsICd0JyB9LAorCXsgRVhUMl9UT1BESVJfRkwsICdUJyB9LAorCXsgRlNfTk9DT1dfRkwsICdDJyB9LAorCXsgMCwgMCB9Cit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfZmxhZyhjaGFyIGMpCit7CisJY29uc3Qgc3RydWN0IGZsYWdzX2NoYXIgKmZwOworCisJZm9yIChmcCA9IGZsYWdzX2FycmF5OyBmcC0+ZmxhZyAhPSAwOyBmcCsrKSB7CisJCWlmIChmcC0+b3B0Y2hhciA9PSBjKQorCQkJcmV0dXJuIGZwLT5mbGFnOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGRlY29kZV9hcmcgKGludCAqIGksIGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCit7CisJY2hhciAqIHA7CisJY2hhciAqIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsOworCisJc3dpdGNoIChhcmd2WyppXVswXSkKKwl7CisJY2FzZSAnLSc6CisJCWZvciAocCA9ICZhcmd2WyppXVsxXTsgKnA7IHArKykgeworCQkJaWYgKCpwID09ICdSJykgeworCQkJCXJlY3Vyc2l2ZSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoKnAgPT0gJ1YnKSB7CisJCQkJdmVyYm9zZSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoKnAgPT0gJ2YnKSB7CisJCQkJc2lsZW50ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgqcCA9PSAndicpIHsKKwkJCQkoKmkpKys7CisJCQkJaWYgKCppID49IGFyZ2MpCisJCQkJCXVzYWdlICgpOworCQkJCXZlcnNpb24gPSBzdHJ0b2wgKGFyZ3ZbKmldLCAmdG1wLCAwKTsKKwkJCQlpZiAoKnRtcCkgeworCQkJCQljb21fZXJyIChwcm9ncmFtX25hbWUsIDAsCisJCQkJCQkgXygiYmFkIHZlcnNpb24gLSAlc1xuIiksCisJCQkJCQkgYXJndlsqaV0pOworCQkJCQl1c2FnZSAoKTsKKwkJCQl9CisJCQkJc2V0X3ZlcnNpb24gPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKChmbCA9IGdldF9mbGFnKCpwKSkgPT0gMCkKKwkJCQl1c2FnZSgpOworCQkJcmYgfD0gZmw7CisJCQlyZW0gPSAxOworCQl9CisJCWJyZWFrOworCWNhc2UgJysnOgorCQlhZGQgPSAxOworCQlmb3IgKHAgPSAmYXJndlsqaV1bMV07ICpwOyBwKyspIHsKKwkJCWlmICgoZmwgPSBnZXRfZmxhZygqcCkpID09IDApCisJCQkJdXNhZ2UoKTsKKwkJCWFmIHw9IGZsOworCQl9CisJCWJyZWFrOworCWNhc2UgJz0nOgorCQlzZXQgPSAxOworCQlmb3IgKHAgPSAmYXJndlsqaV1bMV07ICpwOyBwKyspIHsKKwkJCWlmICgoZmwgPSBnZXRfZmxhZygqcCkpID09IDApCisJCQkJdXNhZ2UoKTsKKwkJCXNmIHw9IGZsOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBFT0Y7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjaGF0dHJfZGlyX3Byb2MoY29uc3QgY2hhciAqLCBzdHJ1Y3QgZGlyZW50ICosIHZvaWQgKik7CisKK3N0YXRpYyBpbnQgY2hhbmdlX2F0dHJpYnV0ZXMoY29uc3QgY2hhciAqIG5hbWUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlTVFJVQ1RfU1RBVAlzdDsKKworCWlmIChMU1RBVCAobmFtZSwgJnN0KSA9PSAtMSkgeworCQlpZiAoIXNpbGVudCkKKwkJCWNvbV9lcnIgKHByb2dyYW1fbmFtZSwgZXJybm8sCisJCQkJIF8oIndoaWxlIHRyeWluZyB0byBzdGF0ICVzIiksIG5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGZnZXRmbGFncyhuYW1lLCAmZmxhZ3MpID09IC0xKSB7CisJCWlmICghc2lsZW50KQorCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIGVycm5vLAorCQkJCQlfKCJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIiksIG5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChzZXQpIHsKKwkJaWYgKHZlcmJvc2UpIHsKKwkJCXByaW50ZiAoXygiRmxhZ3Mgb2YgJXMgc2V0IGFzICIpLCBuYW1lKTsKKwkJCXByaW50X2ZsYWdzIChzdGRvdXQsIHNmLCAwKTsKKwkJCXByaW50ZiAoIlxuIik7CisJCX0KKwkJaWYgKGZzZXRmbGFncyAobmFtZSwgc2YpID09IC0xKQorCQkJcGVycm9yIChuYW1lKTsKKwl9IGVsc2UgeworCQlpZiAocmVtKQorCQkJZmxhZ3MgJj0gfnJmOworCQlpZiAoYWRkKQorCQkJZmxhZ3MgfD0gYWY7CisJCWlmICh2ZXJib3NlKSB7CisJCQlwcmludGYoXygiRmxhZ3Mgb2YgJXMgc2V0IGFzICIpLCBuYW1lKTsKKwkJCXByaW50X2ZsYWdzKHN0ZG91dCwgZmxhZ3MsIDApOworCQkJcHJpbnRmKCJcbiIpOworCQl9CisJCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCWZsYWdzICY9IH5FWFQyX0RJUlNZTkNfRkw7CisJCWlmIChmc2V0ZmxhZ3MobmFtZSwgZmxhZ3MpID09IC0xKSB7CisJCQlpZiAoIXNpbGVudCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnJubywKKwkJCQkJCV8oIndoaWxlIHNldHRpbmcgZmxhZ3Mgb24gJXMiKSwKKwkJCQkJCW5hbWUpOworCQkJfQorCQkJcmV0dXJuIC0xOworCQl9CisJfQorCWlmIChzZXRfdmVyc2lvbikgeworCQlpZiAodmVyYm9zZSkKKwkJCXByaW50ZiAoXygiVmVyc2lvbiBvZiAlcyBzZXQgYXMgJWx1XG4iKSwgbmFtZSwgdmVyc2lvbik7CisJCWlmIChmc2V0dmVyc2lvbiAobmFtZSwgdmVyc2lvbikgPT0gLTEpIHsKKwkJCWlmICghc2lsZW50KQorCQkJCWNvbV9lcnIgKHByb2dyYW1fbmFtZSwgZXJybm8sCisJCQkJCSBfKCJ3aGlsZSBzZXR0aW5nIHZlcnNpb24gb24gJXMiKSwKKwkJCQkJIG5hbWUpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCWlmIChTX0lTRElSKHN0LnN0X21vZGUpICYmIHJlY3Vyc2l2ZSkKKwkJcmV0dXJuIGl0ZXJhdGVfb25fZGlyIChuYW1lLCBjaGF0dHJfZGlyX3Byb2MsIE5VTEwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoYXR0cl9kaXJfcHJvYyAoY29uc3QgY2hhciAqIGRpcl9uYW1lLCBzdHJ1Y3QgZGlyZW50ICogZGUsCisJCQkgICAgdm9pZCAqIHByaXZhdGUgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWludCByZXQgPSAwOworCisJaWYgKHN0cmNtcCAoZGUtPmRfbmFtZSwgIi4iKSAmJiBzdHJjbXAgKGRlLT5kX25hbWUsICIuLiIpKSB7CisJICAgICAgICBjaGFyICpwYXRoOworCisJCXBhdGggPSBtYWxsb2Moc3RybGVuIChkaXJfbmFtZSkgKyAxICsgc3RybGVuIChkZS0+ZF9uYW1lKSArIDEpOworCQlpZiAoIXBhdGgpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorCQkJCV8oIkNvdWxkbid0IGFsbG9jYXRlIHBhdGggdmFyaWFibGUgIgorCQkJCSAgImluIGNoYXR0cl9kaXJfcHJvYyIpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlzcHJpbnRmKHBhdGgsICIlcy8lcyIsIGRpcl9uYW1lLCBkZS0+ZF9uYW1lKTsKKwkJcmV0ID0gY2hhbmdlX2F0dHJpYnV0ZXMocGF0aCk7CisJCWZyZWUocGF0aCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKiBhcmd2KQoreworCWludCBpLCBqOworCWludCBlbmRfYXJnID0gMDsKKwlpbnQgZXJyLCByZXR2YWwgPSAwOworCisjaWZkZWYgRU5BQkxFX05MUworCXNldGxvY2FsZShMQ19NRVNTQUdFUywgIiIpOworCXNldGxvY2FsZShMQ19DVFlQRSwgIiIpOworCWJpbmR0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSwgTE9DQUxFRElSKTsKKwl0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSk7CisJc2V0X2NvbV9lcnJfZ2V0dGV4dChnZXR0ZXh0KTsKKyNlbmRpZgorCWlmIChhcmdjICYmICphcmd2KQorCQlwcm9ncmFtX25hbWUgPSAqYXJndjsKKwlpID0gMTsKKwl3aGlsZSAoaSA8IGFyZ2MgJiYgIWVuZF9hcmcpIHsKKwkJLyogJy0tJyBhcmcgc2hvdWxkIGVuZCBvcHRpb24gcHJvY2Vzc2luZyAqLworCQlpZiAoc3RyY21wKGFyZ3ZbaV0sICItLSIpID09IDApIHsKKwkJCWkrKzsKKwkJCWVuZF9hcmcgPSAxOworCQl9IGVsc2UgaWYgKGRlY29kZV9hcmcgKCZpLCBhcmdjLCBhcmd2KSA9PSBFT0YpCisJCQllbmRfYXJnID0gMTsKKwkJZWxzZQorCQkJaSsrOworCX0KKwlpZiAoaSA+PSBhcmdjKQorCQl1c2FnZSAoKTsKKwlpZiAoc2V0ICYmIChhZGQgfHwgcmVtKSkgeworCQlmcHV0cyhfKCI9IGlzIGluY29tcGF0aWJsZSB3aXRoIC0gYW5kICtcbiIpLCBzdGRlcnIpOworCQlleGl0ICgxKTsKKwl9CisJaWYgKChyZiAmIGFmKSAhPSAwKSB7CisJCWZwdXRzKCJDYW4ndCBib3RoIHNldCBhbmQgdW5zZXQgc2FtZSBmbGFnLlxuIiwgc3RkZXJyKTsKKwkJZXhpdCAoMSk7CisJfQorCWlmICghKGFkZCB8fCByZW0gfHwgc2V0IHx8IHNldF92ZXJzaW9uKSkgeworCQlmcHV0cyhfKCJNdXN0IHVzZSAnLXYnLCA9LCAtIG9yICtcbiIpLCBzdGRlcnIpOworCQlleGl0ICgxKTsKKwl9CisJaWYgKHZlcmJvc2UpCisJCWZwcmludGYgKHN0ZGVyciwgImNoYXR0ciAlcyAoJXMpXG4iLAorCQkJIEUyRlNQUk9HU19WRVJTSU9OLCBFMkZTUFJPR1NfREFURSk7CisJZm9yIChqID0gaTsgaiA8IGFyZ2M7IGorKykgeworCQllcnIgPSBjaGFuZ2VfYXR0cmlidXRlcyAoYXJndltqXSk7CisJCWlmIChlcnIpCisJCQlyZXR2YWwgPSAxOworCX0KKwlleGl0KHJldHZhbCk7Cit9CmRpZmYgLS1naXQgYS9taXNjL2R1bXBlMmZzLjguaW4gYi9taXNjL2R1bXBlMmZzLjguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVmYWY5NAotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvZHVtcGUyZnMuOC5pbgpAQCAtMCwwICsxLDg3IEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAxOTkzLCAxOTk0LCAxOTk1IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiIAorLlRIIERVTVBFMkZTIDggIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2R1bXBlMmZzIFwtIGR1bXAgZXh0Mi9leHQzL2V4dDQgZmlsZXN5c3RlbSBpbmZvcm1hdGlvbgorLlNIIFNZTk9QU0lTCisuQiBkdW1wZTJmcworWworLkIgXC1iZmhpeFYKK10KK1sKKy5CIFwtbyBzdXBlcmJsb2NrPVxmSXN1cGVyYmxvY2sKK10KK1sKKy5CIFwtbyBibG9ja3NpemU9XGZJYmxvY2tzaXplCitdCisuSSBkZXZpY2UKKy5TSCBERVNDUklQVElPTgorLkIgZHVtcGUyZnMKK3ByaW50cyB0aGUgc3VwZXIgYmxvY2sgYW5kIGJsb2NrcyBncm91cCBpbmZvcm1hdGlvbiBmb3IgdGhlIGZpbGVzeXN0ZW0KK3ByZXNlbnQgb24KKy5JIGRldmljZS4KKy5QUAorLkIgTm90ZToKK1doZW4gdXNlZCB3aXRoIGEgbW91bnRlZCBmaWxlc3lzdGVtLCB0aGUgcHJpbnRlZAoraW5mb3JtYXRpb24gbWF5IGJlIG9sZCBvciBpbmNvbnNpc3RlbnQuCisuU0ggT1BUSU9OUworLlRQCisuQiBcLWIKK3ByaW50IHRoZSBibG9ja3Mgd2hpY2ggYXJlIHJlc2VydmVkIGFzIGJhZCBpbiB0aGUgZmlsZXN5c3RlbS4KKy5UUAorLkIgXC1vIHN1cGVyYmxvY2s9XGZJc3VwZXJibG9jawordXNlIHRoZSBibG9jaworLkkgc3VwZXJibG9jaword2hlbiBleGFtaW5pbmcgdGhlIGZpbGVzeXN0ZW0uCitUaGlzIG9wdGlvbiBpcyBub3QgdXN1YWxseSBuZWVkZWQgZXhjZXB0IGJ5IGEgZmlsZXN5c3RlbSB3aXphcmQgd2hvIAoraXMgZXhhbWluaW5nIHRoZSByZW1haW5zIG9mIGEgdmVyeSBiYWRseSBjb3JydXB0ZWQgZmlsZXN5c3RlbS4KKy5UUAorLkIgXC1vIGJsb2Nrc2l6ZT1cZklibG9ja3NpemUKK3VzZSBibG9ja3Mgb2YKKy5JIGJsb2Nrc2l6ZQorYnl0ZXMgd2hlbiBleGFtaW5pbmcgdGhlIGZpbGVzeXN0ZW0uCitUaGlzIG9wdGlvbiBpcyBub3QgdXN1YWxseSBuZWVkZWQgZXhjZXB0IGJ5IGEgZmlsZXN5c3RlbSB3aXphcmQgd2hvIAoraXMgZXhhbWluaW5nIHRoZSByZW1haW5zIG9mIGEgdmVyeSBiYWRseSBjb3JydXB0ZWQgZmlsZXN5c3RlbS4KKy5UUAorLkIgXC1mCitmb3JjZSBkdW1wZTJmcyB0byBkaXNwbGF5IGEgZmlsZXN5c3RlbSBldmVuIHRob3VnaCBpdCBtYXkgaGF2ZSBzb21lIAorZmlsZXN5c3RlbSBmZWF0dXJlIGZsYWdzIHdoaWNoIGR1bXBlMmZzIG1heSBub3QgdW5kZXJzdGFuZCAoYW5kIHdoaWNoCitjYW4gY2F1c2Ugc29tZSBvZiBkdW1wZTJmcydzIGRpc3BsYXkgdG8gYmUgc3VzcGVjdCkuCisuVFAgCisuQiBcLWgKK29ubHkgZGlzcGxheSB0aGUgc3VwZXJibG9jayBpbmZvcm1hdGlvbiBhbmQgbm90IGFueSBvZiB0aGUgYmxvY2sKK2dyb3VwIGRlc2NyaXB0b3IgZGV0YWlsIGluZm9ybWF0aW9uLgorLlRQCisuQiBcLWkKK2Rpc3BsYXkgdGhlIGZpbGVzeXN0ZW0gZGF0YSBmcm9tIGFuIGltYWdlIGZpbGUgY3JlYXRlZCBieSAKKy5CUiBlMmltYWdlICwKK3VzaW5nIAorLkkgZGV2aWNlCithcyB0aGUgcGF0aG5hbWUgdG8gdGhlIGltYWdlIGZpbGUuCisuVFAKKy5CIFwteAorcHJpbnQgdGhlIGRldGFpbGVkIGdyb3VwIGluZm9ybWF0aW9uIGJsb2NrIG51bWJlcnMgaW4gaGV4YWRlY2ltYWwgZm9ybWF0CisuVFAKKy5CIFwtVgorcHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyIG9mIAorLkIgZHVtcGUyZnMKK2FuZCBleGl0LgorLlNIIEJVR1MKK1lvdSBuZWVkIHRvIGtub3cgdGhlIHBoeXNpY2FsIGZpbGVzeXN0ZW0gc3RydWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlCitvdXRwdXQuCisuU0ggQVVUSE9SCisuQiBkdW1wZTJmcyAKK3dhcyB3cml0dGVuIGJ5IFJlbXkgQ2FyZCA8UmVteS5DYXJkQGxpbnV4Lm9yZz4uICBJdCBpcyBjdXJyZW50bHkgYmVpbmcKK21haW50YWluZWQgYnkgVGhlb2RvcmUgVHMnbyA8dHl0c29AYWx1bS5taXQuZWR1Pi4KKy5TSCBBVkFJTEFCSUxJVFkKKy5CIGR1bXBlMmZzCitpcyBwYXJ0IG9mIHRoZSBlMmZzcHJvZ3MgcGFja2FnZSBhbmQgaXMgYXZhaWxhYmxlIGZyb20gCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC4KKy5TSCBTRUUgQUxTTworLkJSIGUyZnNjayAoOCksCisuQlIgbWtlMmZzICg4KSwKKy5CUiB0dW5lMmZzICg4KS4KKy5CUiBleHQ0ICg1KQorCmRpZmYgLS1naXQgYS9taXNjL2R1bXBlMmZzLmMgYi9taXNjL2R1bXBlMmZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4NWQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvZHVtcGUyZnMuYwpAQCAtMCwwICsxLDY0MiBAQAorLyoKKyAqIGR1bXBlMmZzLmMJCS0gTGlzdCB0aGUgY29udHJvbCBzdHJ1Y3R1cmVzIG9mIGEgc2Vjb25kCisgKgkJCSAgZXh0ZW5kZWQgZmlsZXN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiBDb3B5cmlnaHQgMTk5NSwgMTk5NiwgMTk5NyBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqIEhpc3Rvcnk6CisgKiA5NC8wMS8wOQktIENyZWF0aW9uCisgKiA5NC8wMi8yNwktIFBvcnRlZCB0byB1c2UgdGhlIGV4dDJmcyBsaWJyYXJ5CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gY2hhciAqb3B0YXJnOworZXh0ZXJuIGludCBvcHRpbmQ7CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorI2luY2x1ZGUgImUycC9lMnAuaCIKKyNpbmNsdWRlICJqZnNfdXNlci5oIgorI2luY2x1ZGUgPHV1aWQvdXVpZC5oPgorCisjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKworI2RlZmluZSBpbl91c2UobSwgeCkJKGV4dDJmc190ZXN0X2JpdCAoKHgpLCAobSkpKQorCitzdGF0aWMgY29uc3QgY2hhciAqIHByb2dyYW1fbmFtZSA9ICJkdW1wZTJmcyI7CitzdGF0aWMgY2hhciAqIGRldmljZV9uYW1lID0gTlVMTDsKK3N0YXRpYyBpbnQgaGV4X2Zvcm1hdCA9IDA7CitzdGF0aWMgaW50IGJsb2NrczY0ID0gMDsKKworc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKK3sKKwlmcHJpbnRmIChzdGRlcnIsIF8oIlVzYWdlOiAlcyBbLWJmaGl4Vl0gWy1vIHN1cGVyYmxvY2s9PG51bT5dICIKKwkJICJbLW8gYmxvY2tzaXplPTxudW0+XSBkZXZpY2VcbiIpLCBwcm9ncmFtX25hbWUpOworCWV4aXQgKDEpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9udW1iZXIodW5zaWduZWQgbG9uZyBsb25nIG51bSkKK3sKKwlpZiAoaGV4X2Zvcm1hdCkgeworCQlpZiAoYmxvY2tzNjQpCisJCQlwcmludGYoIjB4JTA4bGx4IiwgbnVtKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIweCUwNGxseCIsIG51bSk7CisJfSBlbHNlCisJCXByaW50ZigiJWxsdSIsIG51bSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3JhbmdlKHVuc2lnbmVkIGxvbmcgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGxvbmcgYikKK3sKKwlpZiAoaGV4X2Zvcm1hdCkgeworCQlpZiAoYmxvY2tzNjQpCisJCQlwcmludGYoIjB4JTA4bGx4LTB4JTA4bGx4IiwgYSwgYik7CisJCWVsc2UKKwkJCXByaW50ZigiMHglMDRsbHgtMHglMDRsbHgiLCBhLCBiKTsKKwl9IGVsc2UKKwkJcHJpbnRmKCIlbGx1LSVsbHUiLCBhLCBiKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZnJlZSh1bnNpZ25lZCBsb25nIGdyb3VwLCBjaGFyICogYml0bWFwLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBudW0sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgcmF0aW8pCit7CisJaW50IHAgPSAwOworCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBsb25nIGo7CisKKwlvZmZzZXQgLz0gcmF0aW87CisJb2Zmc2V0ICs9IGdyb3VwICogbnVtOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwkJaWYgKCFpbl91c2UgKGJpdG1hcCwgaSkpCisJCXsKKwkJCWlmIChwKQorCQkJCXByaW50ZiAoIiwgIik7CisJCQlwcmludF9udW1iZXIoKGkgKyBvZmZzZXQpICogcmF0aW8pOworCQkJZm9yIChqID0gaTsgaiA8IG51bSAmJiAhaW5fdXNlIChiaXRtYXAsIGopOyBqKyspCisJCQkJOworCQkJaWYgKC0taiAhPSBpKSB7CisJCQkJZnB1dGMoJy0nLCBzdGRvdXQpOworCQkJCXByaW50X251bWJlcigoaiArIG9mZnNldCkgKiByYXRpbyk7CisJCQkJaSA9IGo7CisJCQl9CisJCQlwID0gMTsKKwkJfQorfQorCitzdGF0aWMgdm9pZCBwcmludF9iZ19vcHQoaW50IGJnX2ZsYWdzLCBpbnQgbWFzaywKKwkJCSAgY29uc3QgY2hhciAqc3RyLCBpbnQgKmZpcnN0KQoreworCWlmIChiZ19mbGFncyAmIG1hc2spIHsKKwkJaWYgKCpmaXJzdCkgeworCQkJZnB1dHMoIiBbIiwgc3Rkb3V0KTsKKwkJCSpmaXJzdCA9IDA7CisJCX0gZWxzZQorCQkJZnB1dHMoIiwgIiwgc3Rkb3V0KTsKKwkJZnB1dHMoc3RyLCBzdGRvdXQpOworCX0KK30KK3N0YXRpYyB2b2lkIHByaW50X2JnX29wdHMoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBpKQoreworCWludCBmaXJzdCA9IDEsIGJnX2ZsYWdzID0gMDsKKworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKQorCQliZ19mbGFncyA9IGV4dDJmc19iZ19mbGFncyhmcywgaSk7CisKKwlwcmludF9iZ19vcHQoYmdfZmxhZ3MsIEVYVDJfQkdfSU5PREVfVU5JTklULCAiSU5PREVfVU5JTklUIiwKKyAJCSAgICAgJmZpcnN0KTsKKwlwcmludF9iZ19vcHQoYmdfZmxhZ3MsIEVYVDJfQkdfQkxPQ0tfVU5JTklULCAiQkxPQ0tfVU5JTklUIiwKKyAJCSAgICAgJmZpcnN0KTsKKwlwcmludF9iZ19vcHQoYmdfZmxhZ3MsIEVYVDJfQkdfSU5PREVfWkVST0VELCAiSVRBQkxFX1pFUk9FRCIsCisgCQkgICAgICZmaXJzdCk7CisJaWYgKCFmaXJzdCkKKwkJZnB1dGMoJ10nLCBzdGRvdXQpOworCWZwdXRjKCdcbicsIHN0ZG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2JnX3JlbF9vZmZzZXQoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxvY2ssIGludCBpdGFibGUsCisJCQkJYmxrNjRfdCBmaXJzdF9ibG9jaywgYmxrNjRfdCBsYXN0X2Jsb2NrKQoreworCWlmICgoYmxvY2sgPj0gZmlyc3RfYmxvY2spICYmIChibG9jayA8PSBsYXN0X2Jsb2NrKSkgeworCQlpZiAoaXRhYmxlICYmIGJsb2NrID09IGZpcnN0X2Jsb2NrKQorCQkJcmV0dXJuOworCQlwcmludGYoIiAoKyV1KSIsICh1bnNpZ25lZCkoYmxvY2sgLSBmaXJzdF9ibG9jaykpOworCX0gZWxzZSBpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQkgICBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRykgeworCQlkZ3JwX3QgZmxleF9ncnAgPSBleHQyZnNfZ3JvdXBfb2ZfYmxrMihmcywgYmxvY2spOworCQlwcmludGYoIiAoYmcgIyV1ICsgJXUpIiwgZmxleF9ncnAsCisJCSAgICAgICAodW5zaWduZWQpKGJsb2NrLWV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZnMsZmxleF9ncnApKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBsaXN0X2Rlc2MgKGV4dDJfZmlsc3lzIGZzKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKwlibGs2NF90CWZpcnN0X2Jsb2NrLCBsYXN0X2Jsb2NrOworCWJsazY0X3QJc3VwZXJfYmxrLCBvbGRfZGVzY19ibGssIG5ld19kZXNjX2JsazsKKwljaGFyICpibG9ja19iaXRtYXA9TlVMTCwgKmlub2RlX2JpdG1hcD1OVUxMOworCWNvbnN0IGNoYXIgKnVuaXRzID0gXygiYmxvY2tzIik7CisJaW50IGlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAsIG9sZF9kZXNjX2Jsb2NrcywgcmVzZXJ2ZWRfZ2R0OworCWludAkJYmxvY2tfbmJ5dGVzLCBpbm9kZV9uYnl0ZXM7CisJaW50IGhhc19zdXBlcjsKKwlibGs2NF90CQlibGtfaXRyID0gRVhUMkZTX0IyQyhmcywgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCWV4dDJfaW5vX3QJaW5vX2l0ciA9IDE7CisJZXJyY29kZV90CXJldHZhbDsKKworCWlmIChFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpKQorCQl1bml0cyA9IF8oImNsdXN0ZXJzIik7CisKKwlibG9ja19uYnl0ZXMgPSBFWFQyX0NMVVNURVJTX1BFUl9HUk9VUChmcy0+c3VwZXIpIC8gODsKKwlpbm9kZV9uYnl0ZXMgPSBFWFQyX0lOT0RFU19QRVJfR1JPVVAoZnMtPnN1cGVyKSAvIDg7CisKKwlpZiAoZnMtPmJsb2NrX21hcCkKKwkJYmxvY2tfYml0bWFwID0gbWFsbG9jKGJsb2NrX25ieXRlcyk7CisJaWYgKGZzLT5pbm9kZV9tYXApCisJCWlub2RlX2JpdG1hcCA9IG1hbGxvYyhpbm9kZV9uYnl0ZXMpOworCisJaW5vZGVfYmxvY2tzX3Blcl9ncm91cCA9ICgoZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgKgorCQkJCSAgIEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpKSArCisJCQkJICBFWFQyX0JMT0NLX1NJWkUoZnMtPnN1cGVyKSAtIDEpIC8KKwkJCQkgRVhUMl9CTE9DS19TSVpFKGZzLT5zdXBlcik7CisJcmVzZXJ2ZWRfZ2R0ID0gZnMtPnN1cGVyLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3M7CisJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKKwlmaXJzdF9ibG9jayA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKwllbHNlCisJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5kZXNjX2Jsb2NrczsKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlmaXJzdF9ibG9jayA9IGV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZnMsIGkpOworCQlsYXN0X2Jsb2NrID0gZXh0MmZzX2dyb3VwX2xhc3RfYmxvY2syKGZzLCBpKTsKKworCQlleHQyZnNfc3VwZXJfYW5kX2JnZF9sb2MyKGZzLCBpLCAmc3VwZXJfYmxrLAorCQkJCQkgICZvbGRfZGVzY19ibGssICZuZXdfZGVzY19ibGssIDApOworCisJCXByaW50ZiAoXygiR3JvdXAgJWx1OiAoQmxvY2tzICIpLCBpKTsKKwkJcHJpbnRfcmFuZ2UoZmlyc3RfYmxvY2ssIGxhc3RfYmxvY2spOworCQlmcHV0cygiKSIsIHN0ZG91dCk7CisJCXByaW50X2JnX29wdHMoZnMsIGkpOworCQlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkgeworCQkJdW5zaWduZWQgY3N1bSA9IGV4dDJmc19iZ19jaGVja3N1bShmcywgaSk7CisJCQl1bnNpZ25lZCBleHBfY3N1bSA9IGV4dDJmc19ncm91cF9kZXNjX2NzdW0oZnMsIGkpOworCisJCQlwcmludGYoXygiICBDaGVja3N1bSAweCUwNHgiKSwgY3N1bSk7CisJCQlpZiAoY3N1bSAhPSBleHBfY3N1bSkKKwkJCQlwcmludGYoXygiIChFWFBFQ1RFRCAweCUwNHgpIiksIGV4cF9jc3VtKTsKKwkJCXByaW50ZihfKCIsIHVudXNlZCBpbm9kZXMgJXVcbiIpLAorCQkJICAgICAgIGV4dDJmc19iZ19pdGFibGVfdW51c2VkKGZzLCBpKSk7CisJCX0KKwkJaGFzX3N1cGVyID0gKChpPT0wKSB8fCBzdXBlcl9ibGspOworCQlpZiAoaGFzX3N1cGVyKSB7CisJCQlwcmludGYgKF8oIiAgJXMgc3VwZXJibG9jayBhdCAiKSwKKwkJCQlpID09IDAgPyBfKCJQcmltYXJ5IikgOiBfKCJCYWNrdXAiKSk7CisJCQlwcmludF9udW1iZXIoc3VwZXJfYmxrKTsKKwkJfQorCQlpZiAob2xkX2Rlc2NfYmxrKSB7CisJCQlwcmludGYoIiVzIiwgXygiLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAiKSk7CisJCQlwcmludF9yYW5nZShvbGRfZGVzY19ibGssCisJCQkJICAgIG9sZF9kZXNjX2JsayArIG9sZF9kZXNjX2Jsb2NrcyAtIDEpOworCQkJaWYgKHJlc2VydmVkX2dkdCkgeworCQkJCXByaW50ZigiJXMiLCBfKCJcbiAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAiKSk7CisJCQkJcHJpbnRfcmFuZ2Uob2xkX2Rlc2NfYmxrICsgb2xkX2Rlc2NfYmxvY2tzLAorCQkJCQkgICAgb2xkX2Rlc2NfYmxrICsgb2xkX2Rlc2NfYmxvY2tzICsKKwkJCQkJICAgIHJlc2VydmVkX2dkdCAtIDEpOworCQkJfQorCQl9IGVsc2UgaWYgKG5ld19kZXNjX2JsaykgeworCQkJZnB1dGMoaGFzX3N1cGVyID8gJywnIDogJyAnLCBzdGRvdXQpOworCQkJcHJpbnRmKCIlcyIsIF8oIiBHcm91cCBkZXNjcmlwdG9yIGF0ICIpKTsKKwkJCXByaW50X251bWJlcihuZXdfZGVzY19ibGspOworCQkJaGFzX3N1cGVyKys7CisJCX0KKwkJaWYgKGhhc19zdXBlcikKKwkJCWZwdXRjKCdcbicsIHN0ZG91dCk7CisJCWZwdXRzKF8oIiAgQmxvY2sgYml0bWFwIGF0ICIpLCBzdGRvdXQpOworCQlwcmludF9udW1iZXIoZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKTsKKwkJcHJpbnRfYmdfcmVsX29mZnNldChmcywgZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpLCAwLAorCQkJCSAgICBmaXJzdF9ibG9jaywgbGFzdF9ibG9jayk7CisJCWZwdXRzKF8oIiwgSW5vZGUgYml0bWFwIGF0ICIpLCBzdGRvdXQpOworCQlwcmludF9udW1iZXIoZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpKTsKKwkJcHJpbnRfYmdfcmVsX29mZnNldChmcywgZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpLCAwLAorCQkJCSAgICBmaXJzdF9ibG9jaywgbGFzdF9ibG9jayk7CisJCWZwdXRzKF8oIlxuICBJbm9kZSB0YWJsZSBhdCAiKSwgc3Rkb3V0KTsKKwkJcHJpbnRfcmFuZ2UoZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSksCisJCQkgICAgZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkgKworCQkJICAgIGlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAgLSAxKTsKKwkJcHJpbnRfYmdfcmVsX29mZnNldChmcywgZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSksIDEsCisJCQkJICAgIGZpcnN0X2Jsb2NrLCBsYXN0X2Jsb2NrKTsKKwkJcHJpbnRmIChfKCJcbiAgJXUgZnJlZSAlcywgJXUgZnJlZSBpbm9kZXMsICIKKwkJCSAgIiV1IGRpcmVjdG9yaWVzJXMiKSwKKwkJCWV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudChmcywgaSksIHVuaXRzLAorCQkJZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50KGZzLCBpKSwKKwkJCWV4dDJmc19iZ191c2VkX2RpcnNfY291bnQoZnMsIGkpLAorCQkJZXh0MmZzX2JnX2l0YWJsZV91bnVzZWQoZnMsIGkpID8gIiIgOiAiXG4iKTsKKwkJaWYgKGV4dDJmc19iZ19pdGFibGVfdW51c2VkKGZzLCBpKSkKKwkJCXByaW50ZiAoXygiLCAldSB1bnVzZWQgaW5vZGVzXG4iKSwKKwkJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZChmcywgaSkpOworCQlpZiAoYmxvY2tfYml0bWFwKSB7CisJCQlmcHV0cyhfKCIgIEZyZWUgYmxvY2tzOiAiKSwgc3Rkb3V0KTsKKwkJCXJldHZhbCA9IGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3JhbmdlMihmcy0+YmxvY2tfbWFwLAorCQkJCSBibGtfaXRyLCBibG9ja19uYnl0ZXMgPDwgMywgYmxvY2tfYml0bWFwKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJY29tX2VycigibGlzdF9kZXNjIiwgcmV0dmFsLAorCQkJCQkid2hpbGUgcmVhZGluZyBibG9jayBiaXRtYXAiKTsKKwkJCWVsc2UKKwkJCQlwcmludF9mcmVlKGksIGJsb2NrX2JpdG1hcCwKKwkJCQkJICAgZnMtPnN1cGVyLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCwKKwkJCQkJICAgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2ssCisJCQkJCSAgIEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKSk7CisJCQlmcHV0YygnXG4nLCBzdGRvdXQpOworCQkJYmxrX2l0ciArPSBmcy0+c3VwZXItPnNfY2x1c3RlcnNfcGVyX2dyb3VwOworCQl9CisJCWlmIChpbm9kZV9iaXRtYXApIHsKKwkJCWZwdXRzKF8oIiAgRnJlZSBpbm9kZXM6ICIpLCBzdGRvdXQpOworCQkJcmV0dmFsID0gZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfcmFuZ2UyKGZzLT5pbm9kZV9tYXAsCisJCQkJIGlub19pdHIsIGlub2RlX25ieXRlcyA8PCAzLCBpbm9kZV9iaXRtYXApOworCQkJaWYgKHJldHZhbCkKKwkJCQljb21fZXJyKCJsaXN0X2Rlc2MiLCByZXR2YWwsCisJCQkJCSJ3aGlsZSByZWFkaW5nIGlub2RlIGJpdG1hcCIpOworCQkJZWxzZQorCQkJCXByaW50X2ZyZWUoaSwgaW5vZGVfYml0bWFwLAorCQkJCQkgICBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCwKKwkJCQkJICAgMSwgMSk7CisJCQlmcHV0YygnXG4nLCBzdGRvdXQpOworCQkJaW5vX2l0ciArPSBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cDsKKwkJfQorCX0KKwlpZiAoYmxvY2tfYml0bWFwKQorCQlmcmVlKGJsb2NrX2JpdG1hcCk7CisJaWYgKGlub2RlX2JpdG1hcCkKKwkJZnJlZShpbm9kZV9iaXRtYXApOworfQorCitzdGF0aWMgdm9pZCBsaXN0X2JhZF9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsIGludCBkdW1wKQoreworCWJhZGJsb2Nrc19saXN0CQliYl9saXN0ID0gMDsKKwliYWRibG9ja3NfaXRlcmF0ZQliYl9pdGVyOworCWJsa190CQkJYmxrOworCWVycmNvZGVfdAkJcmV0dmFsOworCWNvbnN0IGNoYXIJCSpoZWFkZXIsICpmbXQ7CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9iYl9pbm9kZShmcywgJmJiX2xpc3QpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZXh0MmZzX3JlYWRfYmJfaW5vZGUiLCByZXR2YWwsIDApOworCQlyZXR1cm47CisJfQorCXJldHZhbCA9IGV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlX2JlZ2luKGJiX2xpc3QsICZiYl9pdGVyKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlX2JlZ2luIiwgcmV0dmFsLAorCQkJIiVzIiwgXygid2hpbGUgcHJpbnRpbmcgYmFkIGJsb2NrIGxpc3QiKSk7CisJCXJldHVybjsKKwl9CisJaWYgKGR1bXApIHsKKwkJaGVhZGVyID0gZm10ID0gIiV1XG4iOworCX0gZWxzZSB7CisJCWhlYWRlciA9ICBfKCJCYWQgYmxvY2tzOiAldSIpOworCQlmbXQgPSAiLCAldSI7CisJfQorCXdoaWxlIChleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZShiYl9pdGVyLCAmYmxrKSkgeworCQlwcmludGYoaGVhZGVyID8gaGVhZGVyIDogZm10LCBibGspOworCQloZWFkZXIgPSAwOworCX0KKwlleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9lbmQoYmJfaXRlcik7CisJaWYgKCFkdW1wKQorCQlmcHV0YygnXG4nLCBzdGRvdXQpOworCWV4dDJmc19iYWRibG9ja3NfbGlzdF9mcmVlKGJiX2xpc3QpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9pbmxpbmVfam91cm5hbF9pbmZvcm1hdGlvbihleHQyX2ZpbHN5cyBmcykKK3sKKwlqb3VybmFsX3N1cGVyYmxvY2tfdAkqanNiOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCWV4dDJfZmlsZV90CQlqb3VybmFsX2ZpbGU7CisJZXJyY29kZV90CQlyZXR2YWw7CisJaW5vX3QJCQlpbm8gPSBmcy0+c3VwZXItPnNfam91cm5hbF9pbnVtOworCWNoYXIJCQlidWZbMTAyNF07CisJX191MzIJCQkqbWFza19wdHIsIG1hc2ssIG07CisJaW50CQkJaSwgaiwgc2l6ZSwgcHJpbnRlZCA9IDA7CisKKwlpZiAoZnMtPmZsYWdzICYgRVhUMl9GTEFHX0lNQUdFX0ZJTEUpCisJCXJldHVybjsKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgaW5vLCAgJmlub2RlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgaW5vZGUiKSk7CisJCWV4aXQoMSk7CisJfQorCXJldHZhbCA9IGV4dDJmc19maWxlX29wZW4yKGZzLCBpbm8sICZpbm9kZSwgMCwgJmpvdXJuYWxfZmlsZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgb3BlbmluZyBqb3VybmFsIGlub2RlIikpOworCQlleGl0KDEpOworCX0KKwlyZXR2YWwgPSBleHQyZnNfZmlsZV9yZWFkKGpvdXJuYWxfZmlsZSwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyIGJsb2NrIikpOworCQlleGl0KDEpOworCX0KKwlleHQyZnNfZmlsZV9jbG9zZShqb3VybmFsX2ZpbGUpOworCWpzYiA9IChqb3VybmFsX3N1cGVyYmxvY2tfdCAqKSBidWY7CisJaWYgKGJlMzJfdG9fY3B1KGpzYi0+c19oZWFkZXIuaF9tYWdpYykgIT0gSkZTX01BR0lDX05VTUJFUikgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKwkJCV8oIkpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXIgaW52YWxpZCFcbiIpKTsKKwkJZXhpdCgxKTsKKwl9CisJcHJpbnRmKCIlcyIsIF8oIkpvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAiKSk7CisJZm9yIChpPTAsIG1hc2tfcHRyPSZqc2ItPnNfZmVhdHVyZV9jb21wYXQ7IGkgPDM7IGkrKyxtYXNrX3B0cisrKSB7CisJCW1hc2sgPSBiZTMyX3RvX2NwdSgqbWFza19wdHIpOworCQlmb3IgKGo9MCxtPTE7IGogPCAzMjsgaisrLCBtPDw9MSkgeworCQkJaWYgKG1hc2sgJiBtKSB7CisJCQkJcHJpbnRmKCIgJXMiLCBlMnBfanJubF9mZWF0dXJlMnN0cmluZyhpLCBtKSk7CisJCQkJcHJpbnRlZCsrOworCQkJfQorCQl9CisJfQorCWlmIChwcmludGVkID09IDApCisJCXByaW50ZigiIChub25lKSIpOworCXByaW50ZigiXG4iKTsKKwlmcHV0cyhfKCJKb3VybmFsIHNpemU6ICAgICAgICAgICAgICIpLCBzdGRvdXQpOworCWlmICgoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYKKwkgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSAmJgorCSAgICAoaW5vZGUuaV9mbGFncyAmIEVYVDRfSFVHRV9GSUxFX0ZMKSkKKwkJc2l6ZSA9IGlub2RlLmlfYmxvY2tzIC8gKGZzLT5ibG9ja3NpemUgLyAxMDI0KTsKKwllbHNlCisJCXNpemUgPSBpbm9kZS5pX2Jsb2NrcyA+PiAxOworCWlmIChzaXplIDwgODE5MikKKwkJcHJpbnRmKCIldWtcbiIsIHNpemUpOworCWVsc2UKKwkJcHJpbnRmKCIldU1cbiIsIHNpemUgPj4gMTApOworCXByaW50ZihfKCJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisJCSAiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKwkJICJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iKSwKKwkgICAgICAgKHVuc2lnbmVkIGludCludG9obChqc2ItPnNfbWF4bGVuKSwKKwkgICAgICAgKHVuc2lnbmVkIGludCludG9obChqc2ItPnNfc2VxdWVuY2UpLAorCSAgICAgICAodW5zaWduZWQgaW50KW50b2hsKGpzYi0+c19zdGFydCkpOworCWlmIChqc2ItPnNfZXJybm8gIT0gMCkKKwkJcHJpbnRmKF8oIkpvdXJuYWwgZXJybm86ICAgICAgICAgICAgJWRcbiIpLAorCQkgICAgICAgKGludCkgbnRvaGwoanNiLT5zX2Vycm5vKSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2pvdXJuYWxfaW5mb3JtYXRpb24oZXh0Ml9maWxzeXMgZnMpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwljaGFyCQlidWZbMTAyNF07CisJY2hhcgkJc3RyWzgwXTsKKwl1bnNpZ25lZCBpbnQJaTsKKwlqb3VybmFsX3N1cGVyYmxvY2tfdAkqanNiOworCisJLyogR2V0IHRoZSBqb3VybmFsIHN1cGVyYmxvY2sgKi8KKwlpZiAoKHJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW8sCisJCQkJCSAgICBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayArIDEsCisJCQkJCSAgICAtMTAyNCwgYnVmKSkpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrIikpOworCQlleGl0KDEpOworCX0KKwlqc2IgPSAoam91cm5hbF9zdXBlcmJsb2NrX3QgKikgYnVmOworCWlmICgoanNiLT5zX2hlYWRlci5oX21hZ2ljICE9ICh1bnNpZ25lZCkgbnRvaGwoSkZTX01BR0lDX05VTUJFUikpIHx8CisJICAgIChqc2ItPnNfaGVhZGVyLmhfYmxvY2t0eXBlICE9CisJICAgICAodW5zaWduZWQpIG50b2hsKEpGU19TVVBFUkJMT0NLX1YyKSkpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQlfKCJDb3VsZG4ndCBmaW5kIGpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXJzIikpOworCQlleGl0KDEpOworCX0KKworCXByaW50ZihfKCJcbkpvdXJuYWwgYmxvY2sgc2l6ZTogICAgICAgJXVcbiIKKwkJICJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisJCSAiSm91cm5hbCBmaXJzdCBibG9jazogICAgICAldVxuIgorCQkgIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisJCSAiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorCQkgIkpvdXJuYWwgbnVtYmVyIG9mIHVzZXJzOiAgJXVcbiIpLAorCSAgICAgICAodW5zaWduZWQgaW50KW50b2hsKGpzYi0+c19ibG9ja3NpemUpLCAgKHVuc2lnbmVkIGludCludG9obChqc2ItPnNfbWF4bGVuKSwKKwkgICAgICAgKHVuc2lnbmVkIGludCludG9obChqc2ItPnNfZmlyc3QpLCAodW5zaWduZWQgaW50KW50b2hsKGpzYi0+c19zZXF1ZW5jZSksCisJICAgICAgICh1bnNpZ25lZCBpbnQpbnRvaGwoanNiLT5zX3N0YXJ0KSwgKHVuc2lnbmVkIGludCludG9obChqc2ItPnNfbnJfdXNlcnMpKTsKKworCWZvciAoaT0wOyBpIDwgbnRvaGwoanNiLT5zX25yX3VzZXJzKTsgaSsrKSB7CisJCXV1aWRfdW5wYXJzZSgmanNiLT5zX3VzZXJzW2kqMTZdLCBzdHIpOworCQlwcmludGYoaSA/ICIgICAgICAgICAgICAgICAgICAgICAgICAgICVzXG4iCisJCSAgICAgICA6IF8oIkpvdXJuYWwgdXNlcnM6ICAgICAgICAgICAgJXNcbiIpLAorCQkgICAgICAgc3RyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2V4dGVuZGVkX29wdHMoY29uc3QgY2hhciAqb3B0cywgYmxrNjRfdCAqc3VwZXJibG9jaywKKwkJCQlpbnQgKmJsb2Nrc2l6ZSkKK3sKKwljaGFyCSpidWYsICp0b2tlbiwgKm5leHQsICpwLCAqYXJnLCAqYmFkb3B0ID0gMDsKKwlpbnQJbGVuOworCWludAlkb191c2FnZSA9IDA7CisKKwlsZW4gPSBzdHJsZW4ob3B0cyk7CisJYnVmID0gbWFsbG9jKGxlbisxKTsKKwlpZiAoIWJ1ZikgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKwkJCV8oIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBvcHRpb25zIVxuIikpOworCQlleGl0KDEpOworCX0KKwlzdHJjcHkoYnVmLCBvcHRzKTsKKwlmb3IgKHRva2VuID0gYnVmOyB0b2tlbiAmJiAqdG9rZW47IHRva2VuID0gbmV4dCkgeworCQlwID0gc3RyY2hyKHRva2VuLCAnLCcpOworCQluZXh0ID0gMDsKKwkJaWYgKHApIHsKKwkJCSpwID0gMDsKKwkJCW5leHQgPSBwKzE7CisJCX0KKwkJYXJnID0gc3RyY2hyKHRva2VuLCAnPScpOworCQlpZiAoYXJnKSB7CisJCQkqYXJnID0gMDsKKwkJCWFyZysrOworCQl9CisJCWlmIChzdHJjbXAodG9rZW4sICJzdXBlcmJsb2NrIikgPT0gMCB8fAorCQkgICAgc3RyY21wKHRva2VuLCAic2IiKSA9PSAwKSB7CisJCQlpZiAoIWFyZykgeworCQkJCWRvX3VzYWdlKys7CisJCQkJYmFkb3B0ID0gdG9rZW47CisJCQkJY29udGludWU7CisJCQl9CisJCQkqc3VwZXJibG9jayA9IHN0cnRvdWwoYXJnLCAmcCwgMCk7CisJCQlpZiAoKnApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJXygiSW52YWxpZCBzdXBlcmJsb2NrIHBhcmFtZXRlcjogJXNcbiIpLAorCQkJCQlhcmcpOworCQkJCWRvX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAiYmxvY2tzaXplIikgPT0gMCB8fAorCQkJICAgc3RyY21wKHRva2VuLCAiYnMiKSA9PSAwKSB7CisJCQlpZiAoIWFyZykgeworCQkJCWRvX3VzYWdlKys7CisJCQkJYmFkb3B0ID0gdG9rZW47CisJCQkJY29udGludWU7CisJCQl9CisJCQkqYmxvY2tzaXplID0gc3RydG91bChhcmcsICZwLCAwKTsKKwkJCWlmICgqcCkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCJJbnZhbGlkIGJsb2Nrc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iKSwKKwkJCQkJYXJnKTsKKwkJCQlkb191c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9IGVsc2UgeworCQkJZG9fdXNhZ2UrKzsKKwkJCWJhZG9wdCA9IHRva2VuOworCQl9CisJfQorCWlmIChkb191c2FnZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiXG5CYWQgZXh0ZW5kZWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcblxuIgorCQkJIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsICIKKwkJCSJhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKwkJCSJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG5cbiIKKwkJCSJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKwkJCSJcdHN1cGVyYmxvY2s9PHN1cGVyYmxvY2sgbnVtYmVyPlxuIgorCQkJIlx0YmxvY2tzaXplPTxibG9ja3NpemU+XG4iKSwKKwkJCWJhZG9wdCA/IGJhZG9wdCA6ICIiKTsKKwkJZnJlZShidWYpOworCQlleGl0KDEpOworCX0KKwlmcmVlKGJ1Zik7Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKiBhcmd2KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJZXh0Ml9maWxzeXMJZnM7CisJaW50CQlwcmludF9iYWRibG9ja3MgPSAwOworCWJsazY0X3QJCXVzZV9zdXBlcmJsb2NrID0gMDsKKwlpbnQJCXVzZV9ibG9ja3NpemUgPSAwOworCWludAkJaW1hZ2VfZHVtcCA9IDA7CisJaW50CQlmb3JjZSA9IDA7CisJaW50CQlmbGFnczsKKwlpbnQJCWhlYWRlcl9vbmx5ID0gMDsKKwlpbnQJCWM7CisKKyNpZmRlZiBFTkFCTEVfTkxTCisJc2V0bG9jYWxlKExDX01FU1NBR0VTLCAiIik7CisJc2V0bG9jYWxlKExDX0NUWVBFLCAiIik7CisJYmluZHRleHRkb21haW4oTkxTX0NBVF9OQU1FLCBMT0NBTEVESVIpOworCXRleHRkb21haW4oTkxTX0NBVF9OQU1FKTsKKwlzZXRfY29tX2Vycl9nZXR0ZXh0KGdldHRleHQpOworI2VuZGlmCisJYWRkX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKwlmcHJpbnRmIChzdGRlcnIsICJkdW1wZTJmcyAlcyAoJXMpXG4iLCBFMkZTUFJPR1NfVkVSU0lPTiwKKwkJIEUyRlNQUk9HU19EQVRFKTsKKwlpZiAoYXJnYyAmJiAqYXJndikKKwkJcHJvZ3JhbV9uYW1lID0gKmFyZ3Y7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJiZmhpeFZvOiIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2InOgorCQkJcHJpbnRfYmFkYmxvY2tzKys7CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlmb3JjZSsrOworCQkJYnJlYWs7CisJCWNhc2UgJ2gnOgorCQkJaGVhZGVyX29ubHkrKzsKKwkJCWJyZWFrOworCQljYXNlICdpJzoKKwkJCWltYWdlX2R1bXArKzsKKwkJCWJyZWFrOworCQljYXNlICdvJzoKKwkJCXBhcnNlX2V4dGVuZGVkX29wdHMob3B0YXJnLCAmdXNlX3N1cGVyYmxvY2ssCisJCQkJCSAgICAmdXNlX2Jsb2Nrc2l6ZSk7CisJCQlicmVhazsKKwkJY2FzZSAnVic6CisJCQkvKiBQcmludCB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdCAqLworCQkJZnByaW50ZihzdGRlcnIsIF8oIlx0VXNpbmcgJXNcbiIpLAorCQkJCWVycm9yX21lc3NhZ2UoRVhUMl9FVF9CQVNFKSk7CisJCQlleGl0KDApOworCQljYXNlICd4JzoKKwkJCWhleF9mb3JtYXQrKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2UoKTsKKwkJfQorCX0KKwlpZiAob3B0aW5kICE9IGFyZ2MgLSAxKSB7CisJCXVzYWdlKCk7CisJCWV4aXQoMSk7CisJfQorCWRldmljZV9uYW1lID0gYXJndltvcHRpbmQrK107CisJZmxhZ3MgPSBFWFQyX0ZMQUdfSk9VUk5BTF9ERVZfT0sgfCBFWFQyX0ZMQUdfU09GVFNVUFBfRkVBVFVSRVMgfCBFWFQyX0ZMQUdfNjRCSVRTOworCWlmIChmb3JjZSkKKwkJZmxhZ3MgfD0gRVhUMl9GTEFHX0ZPUkNFOworCWlmIChpbWFnZV9kdW1wKQorCQlmbGFncyB8PSBFWFQyX0ZMQUdfSU1BR0VfRklMRTsKKworCWlmICh1c2Vfc3VwZXJibG9jayAmJiAhdXNlX2Jsb2Nrc2l6ZSkgeworCQlmb3IgKHVzZV9ibG9ja3NpemUgPSBFWFQyX01JTl9CTE9DS19TSVpFOworCQkgICAgIHVzZV9ibG9ja3NpemUgPD0gRVhUMl9NQVhfQkxPQ0tfU0laRTsKKwkJICAgICB1c2VfYmxvY2tzaXplICo9IDIpIHsKKwkJCXJldHZhbCA9IGV4dDJmc19vcGVuIChkZXZpY2VfbmFtZSwgZmxhZ3MsCisJCQkJCSAgICAgIHVzZV9zdXBlcmJsb2NrLAorCQkJCQkgICAgICB1c2VfYmxvY2tzaXplLCB1bml4X2lvX21hbmFnZXIsCisJCQkJCSAgICAgICZmcyk7CisJCQlpZiAoIXJldHZhbCkKKwkJCQlicmVhazsKKwkJfQorCX0gZWxzZQorCQlyZXR2YWwgPSBleHQyZnNfb3BlbiAoZGV2aWNlX25hbWUsIGZsYWdzLCB1c2Vfc3VwZXJibG9jaywKKwkJCQkgICAgICB1c2VfYmxvY2tzaXplLCB1bml4X2lvX21hbmFnZXIsICZmcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyIChwcm9ncmFtX25hbWUsIHJldHZhbCwgXygid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiKSwKKwkJCSBkZXZpY2VfbmFtZSk7CisJCXByaW50ZigiJXMiLCBfKCJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIpKTsKKwkJZXhpdCAoMSk7CisJfQorCWZzLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gRVhUMkZTX0JNQVA2NF9SQlRSRUU7CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKQorCQlibG9ja3M2NCA9IDE7CisJaWYgKHByaW50X2JhZGJsb2NrcykgeworCQlsaXN0X2JhZF9ibG9ja3MoZnMsIDEpOworCX0gZWxzZSB7CisJCWxpc3Rfc3VwZXIgKGZzLT5zdXBlcik7CisJCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCSAgICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVikgeworCQkJcHJpbnRfam91cm5hbF9pbmZvcm1hdGlvbihmcyk7CisJCQlleHQyZnNfY2xvc2VfZnJlZSgmZnMpOworCQkJZXhpdCgwKTsKKwkJfQorCQlpZiAoKGZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmCisJCSAgICAgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCkgJiYKKwkJICAgIChmcy0+c3VwZXItPnNfam91cm5hbF9pbnVtICE9IDApKQorCQkJcHJpbnRfaW5saW5lX2pvdXJuYWxfaW5mb3JtYXRpb24oZnMpOworCQlsaXN0X2JhZF9ibG9ja3MoZnMsIDApOworCQlpZiAoaGVhZGVyX29ubHkpIHsKKwkJCWV4dDJmc19jbG9zZV9mcmVlKCZmcyk7CisJCQlleGl0ICgwKTsKKwkJfQorCQlyZXR2YWwgPSBleHQyZnNfcmVhZF9iaXRtYXBzIChmcyk7CisJCWxpc3RfZGVzYyAoZnMpOworCQlpZiAocmV0dmFsKSB7CisJCQlwcmludGYoXygiXG4lczogJXM6IGVycm9yIHJlYWRpbmcgYml0bWFwczogJXNcbiIpLAorCQkJICAgICAgIHByb2dyYW1fbmFtZSwgZGV2aWNlX25hbWUsCisJCQkgICAgICAgZXJyb3JfbWVzc2FnZShyZXR2YWwpKTsKKwkJfQorCX0KKwlleHQyZnNfY2xvc2VfZnJlZSgmZnMpOworCXJlbW92ZV9lcnJvcl90YWJsZSgmZXRfZXh0Ml9lcnJvcl90YWJsZSk7CisJZXhpdCAoMCk7Cit9CmRpZmYgLS1naXQgYS9taXNjL2UyZnJlZWZyYWcuOC5pbiBiL21pc2MvZTJmcmVlZnJhZy44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NGJlNzQKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2UyZnJlZWZyYWcuOC5pbgpAQCAtMCwwICsxLDk2IEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlRIIEUyRlJFRUZSQUcgOCAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQorZTJmcmVlZnJhZyBcLSByZXBvcnQgZnJlZSBzcGFjZSBmcmFnbWVudGF0aW9uIGluZm9ybWF0aW9uCisuU0ggU1lOT1BTSVMKKy5CIGUyZnJlZWZyYWcKK1sKKy5CIFwtYyBjaHVua19rYgorXQorWworLkIgXC1oCitdCisuQiBmaWxlc3lzCisKKy5TSCBERVNDUklQVElPTgorLkIgZTJmcmVlZnJhZworaXMgdXNlZCB0byByZXBvcnQgZnJlZSBzcGFjZSBmcmFnbWVudGF0aW9uIG9uIGV4dDIvMy80IGZpbGUgc3lzdGVtcy4KKy5JIGZpbGVzeXMKK2lzIHRoZSBmaWxlc3lzdGVtIGRldmljZSBuYW1lIChlLmcuCisuSVIgL2Rldi9oZGMxICIsICIgL2Rldi9tZDAgKS4KK1RoZQorLkIgZTJmcmVlZnJhZworcHJvZ3JhbSB3aWxsIHNjYW4gdGhlIGJsb2NrIGJpdG1hcCBpbmZvcm1hdGlvbiB0byBjaGVjayBob3cgbWFueSBmcmVlIGJsb2NrcworYXJlIHByZXNlbnQgYXMgY29udGlndW91cyBhbmQgYWxpZ25lZCBmcmVlIHNwYWNlLiBUaGUgcGVyY2VudGFnZSBvZiBjb250aWd1b3VzCitmcmVlIGJsb2NrcyBvZiBzaXplIGFuZCBvZiBhbGlnbm1lbnQKKy5JUiBjaHVua19rYgoraXMgcmVwb3J0ZWQuICBJdCBhbHNvIGRpc3BsYXlzIHRoZSBtaW5pbXVtL21heGltdW0vYXZlcmFnZSBmcmVlIGNodW5rIHNpemUgaW4KK3RoZSBmaWxlc3lzdGVtLCBhbG9uZyB3aXRoIGEgaGlzdG9ncmFtIG9mIGFsbCBmcmVlIGNodW5rcy4gIFRoaXMgaW5mb3JtYXRpb24KK2NhbiBiZSB1c2VkIHRvIGdhdWdlIHRoZSBsZXZlbCBvZiBmcmVlIHNwYWNlIGZyYWdtZW50YXRpb24gaW4gdGhlIGZpbGVzeXN0ZW0uCisuU0ggT1BUSU9OUworLlRQCisuQkkgXC1jICIgY2h1bmtfa2IiCitJZiBhIGNodW5rIHNpemUgaXMgc3BlY2lmaWVkLCB0aGVuCisuQiBlMmZyZWVmcmFnCit3aWxsIHByaW50IGhvdyBtYW55IGZyZWUgY2h1bmtzIG9mIHNpemUKKy5JIGNodW5rX2tiCithcmUgYXZhaWxhYmxlIGluIHVuaXRzIG9mIGtpbG9ieXRlcyAoS2IpLiAgVGhlIGNodW5rIHNpemUgbXVzdCBiZSBhCitwb3dlciBvZiB0d28gYW5kIGJlIGxhcmdlciB0aGFuIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZS4KKy5UUAorLkJJIFwtaAorUHJpbnQgdGhlIHVzYWdlIG9mIHRoZSBwcm9ncmFtLgorLlNIIEVYQU1QTEUKKyMgZTJmcmVlZnJhZyAvZGV2L3Zncm9vdC9sdmhvbWUKKy5icgorRGV2aWNlOiAvZGV2L3Zncm9vdC9sdmhvbWUKKy5icgorQmxvY2tzaXplOiA0MDk2IGJ5dGVzCisuYnIKK1RvdGFsIGJsb2NrczogMTUwNDA4NQorLmJyCitGcmVlIGJsb2NrczogMjkyOTk1ICgxOS41JSkKKy5icgorCitNaW4uIGZyZWUgZXh0ZW50OiA0IEtCCisuYnIKK01heC4gZnJlZSBleHRlbnQ6IDI0MDA4IEtCCisuYnIKK0F2Zy4gZnJlZSBleHRlbnQ6IDI1MiBLQgorLmJyCisKK0hJU1RPR1JBTSBPRiBGUkVFIEVYVEVOVCBTSVpFUzoKKy5icgorRXh0ZW50IFNpemUgUmFuZ2UgOiAgIEZyZWUgZXh0ZW50cyAgIEZyZWUgQmxvY2tzICBQZXJjZW50CisuYnIKKyAgICA0Sy4uLiAgICA4Sy0gOiAgICAgICAgICAgNzA0ICAgICAgICAgICA3MDQgICAgIDAuMiUKKy5icgorICAgIDhLLi4uICAgMTZLLSA6ICAgICAgICAgICA4MTAgICAgICAgICAgMTk3OSAgICAgMC43JQorLmJyCisgICAxNksuLi4gICAzMkstIDogICAgICAgICAgIDg0MyAgICAgICAgICA0NDY3ICAgICAxLjUlCisuYnIKKyAgIDMySy4uLiAgIDY0Sy0gOiAgICAgICAgICAgNTc5ICAgICAgICAgIDYyNjMgICAgIDIuMSUKKy5icgorICAgNjRLLi4uICAxMjhLLSA6ICAgICAgICAgICA0OTMgICAgICAgICAxMTA2NyAgICAgMy44JQorLmJyCisgIDEyOEsuLi4gIDI1NkstIDogICAgICAgICAgIDM5NCAgICAgICAgIDE4MDk3ICAgICA2LjIlCisuYnIKKyAgMjU2Sy4uLiAgNTEySy0gOiAgICAgICAgICAgMjgxICAgICAgICAgMjU0NzcgICAgIDguNyUKKy5icgorICA1MTJLLi4uIDEwMjRLLSA6ICAgICAgICAgICAyNTMgICAgICAgICA0NDkxNCAgICAxNS4zJQorLmJyCisgICAgMU0uLi4gICAgMk0tIDogICAgICAgICAgIDE0MyAgICAgICAgIDUxODk3ICAgIDE3LjclCisuYnIKKyAgICAyTS4uLiAgICA0TS0gOiAgICAgICAgICAgIDczICAgICAgICAgNTA2ODMgICAgMTcuMyUKKy5icgorICAgIDRNLi4uICAgIDhNLSA6ICAgICAgICAgICAgMzcgICAgICAgICA1MjQxNyAgICAxNy45JQorLmJyCisgICAgOE0uLi4gICAxNk0tIDogICAgICAgICAgICAgNyAgICAgICAgIDE5MDI4ICAgICA2LjUlCisuYnIKKyAgIDE2TS4uLiAgIDMyTS0gOiAgICAgICAgICAgICAxICAgICAgICAgIDYwMDIgICAgIDIuMCUKKy5TSCBBVVRIT1IKK1RoaXMgdmVyc2lvbiBvZiBlMmZyZWVmcmFnIHdhcyB3cml0dGVuIGJ5IFJ1cGVzaCBUaGFrYXJlLCBhbmQgbW9kaWZpZWQgYnkKK0FuZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyQHN1bi5jb20+LCBhbmQgS2FscGFrIFNoYWguCisuU0ggU0VFIEFMU08KKy5JUiBkZWJ1Z2ZzICg4KSwKKy5JUiBkdW1wZTJmcyAoOCksCisuSVIgZTJmc2NrICg4KQpkaWZmIC0tZ2l0IGEvbWlzYy9lMmZyZWVmcmFnLmMgYi9taXNjL2UyZnJlZWZyYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGFjYjdlCi0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9lMmZyZWVmcmFnLmMKQEAgLTAsMCArMSwzMzcgQEAKKy8qCisgKiBlMmZyZWVmcmFnIC0gcmVwb3J0IGZpbGVzeXN0ZW0gZnJlZS1zcGFjZSBmcmFnbWVudGF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqCisgKiBBdXRob3I6IFJ1cGVzaCBUaGFrYXJlIDxydXBlc2hAc3VuLmNvbT4KKyAqICAgICAgICAgQW5kcmVhcyBEaWxnZXIgPGFkaWxnZXJAc3VuLmNvbT4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+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+aGlzdG9ncmFtLmZjX2Jsb2Nrc1tpXSAqIDEwMCAvCisJCQkJZnMtPnN1cGVyLT5zX2ZyZWVfYmxvY2tzX2NvdW50KTsKKwkJfQorCQlzdGFydCA9IGVuZDsKKwkJaWYgKHN0YXJ0ID09IDE8PDEwKSB7CisJCQlzdGFydCA9IDE7CisJCQl1bml0cyArPSAxMDsKKwkJCXVuaXRwKys7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBjbG9zZV9kZXZpY2UoY2hhciAqZGV2aWNlX25hbWUsIGV4dDJfZmlsc3lzIGZzKQoreworCWludCByZXR2YWwgPSBleHQyZnNfY2xvc2VfZnJlZSgmZnMpOworCisJaWYgKHJldHZhbCkKKwkJY29tX2VycihkZXZpY2VfbmFtZSwgcmV0dmFsLCAid2hpbGUgY2xvc2luZyB0aGUgZmlsZXN5c3RlbS5cbiIpOworfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0X2luZm8oZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBjaHVua19pbmZvICpjaHVua19pbmZvLCBGSUxFICpmKQoreworCXVuc2lnbmVkIGludCByZXR2YWwgPSAwOworCisJZnByaW50ZihmLCAiRGV2aWNlOiAlc1xuIiwgZnMtPmRldmljZV9uYW1lKTsKKwlmcHJpbnRmKGYsICJCbG9ja3NpemU6ICV1IGJ5dGVzXG4iLCBmcy0+YmxvY2tzaXplKTsKKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2Jsb2NrX2JpdG1hcChmcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGZzLT5kZXZpY2VfbmFtZSwgcmV0dmFsLCAid2hpbGUgcmVhZGluZyBibG9jayBiaXRtYXAiKTsKKwkJY2xvc2VfZGV2aWNlKGZzLT5kZXZpY2VfbmFtZSwgZnMpOworCQlleGl0KDEpOworCX0KKworCWluaXRfY2h1bmtfaW5mbyhmcywgY2h1bmtfaW5mbyk7CisKKwlyZXR2YWwgPSBnZXRfY2h1bmtfaW5mbyhmcywgY2h1bmtfaW5mbywgZik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGZzLT5kZXZpY2VfbmFtZSwgcmV0dmFsLCAid2hpbGUgY29sbGVjdGluZyBjaHVuayBpbmZvIik7CisgICAgICAgICAgICAgICAgY2xvc2VfZGV2aWNlKGZzLT5kZXZpY2VfbmFtZSwgZnMpOworCQlleGl0KDEpOworCX0KK30KKworI2lmbmRlZiBERUJVR0ZTCitzdGF0aWMgdm9pZCBvcGVuX2RldmljZShjaGFyICpkZXZpY2VfbmFtZSwgZXh0Ml9maWxzeXMgKmZzKQoreworCWludCByZXR2YWw7CisJaW50IGZsYWcgPSBFWFQyX0ZMQUdfRk9SQ0UgfCBFWFQyX0ZMQUdfNjRCSVRTOworCisJcmV0dmFsID0gZXh0MmZzX29wZW4oZGV2aWNlX25hbWUsIGZsYWcsIDAsIDAsIHVuaXhfaW9fbWFuYWdlciwgZnMpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihkZXZpY2VfbmFtZSwgcmV0dmFsLCAid2hpbGUgb3BlbmluZyBmaWxlc3lzdGVtIik7CisJCWV4aXQoMSk7CisJfQorCSgqZnMpLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gRVhUMkZTX0JNQVA2NF9SQlRSRUU7Cit9CisjZW5kaWYKKworI2lmZGVmIERFQlVHRlMKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisKK3ZvaWQgZG9fZnJlZWZyYWcoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorI2Vsc2UKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisjZW5kaWYKK3sKKwlzdHJ1Y3QgY2h1bmtfaW5mbyBjaHVua19pbmZvOworCWV4dDJfZmlsc3lzIGZzID0gTlVMTDsKKwljaGFyICpwcm9nbmFtZTsKKwljaGFyICplbmQ7CisJaW50IGM7CisKKyNpZmRlZiBERUJVR0ZTCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKwlyZXNldF9nZXRvcHQoKTsKKyNlbHNlCisJY2hhciAqZGV2aWNlX25hbWU7CisKKwlhZGRfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworI2VuZGlmCisJcHJvZ25hbWUgPSBhcmd2WzBdOworCW1lbXNldCgmY2h1bmtfaW5mbywgMCwgc2l6ZW9mKGNodW5rX2luZm8pKTsKKworCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiYzpoIikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYyc6CisJCQljaHVua19pbmZvLmNodW5rYnl0ZXMgPSBzdHJ0b3VsbChvcHRhcmcsICZlbmQsIDApOworCQkJaWYgKCplbmQgIT0gJ1wwJykgeworCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGJhZCBjaHVuayBzaXplICclcydcbiIsCisJCQkJCXByb2duYW1lLCBvcHRhcmcpOworCQkJCXVzYWdlKHByb2duYW1lKTsKKwkJCX0KKwkJCWlmIChjaHVua19pbmZvLmNodW5rYnl0ZXMgJgorCQkJICAgIChjaHVua19pbmZvLmNodW5rYnl0ZXMgLSAxKSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNodW5rIHNpemUgbXVzdCBiZSBhICIKKwkJCQkJInBvd2VyIG9mIDIuXG4iLCBhcmd2WzBdKTsKKwkJCQl1c2FnZShwcm9nbmFtZSk7CisJCQl9CisJCQljaHVua19pbmZvLmNodW5rYnl0ZXMgKj0gMTAyNDsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKHByb2duYW1lKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisjaWZuZGVmIERFQlVHRlMKKwlpZiAob3B0aW5kID09IGFyZ2MpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogbWlzc2luZyBkZXZpY2UgbmFtZS5cbiIsIHByb2duYW1lKTsKKwkJdXNhZ2UocHJvZ25hbWUpOworCX0KKworCWRldmljZV9uYW1lID0gYXJndltvcHRpbmRdOworCisJb3Blbl9kZXZpY2UoZGV2aWNlX25hbWUsICZmcyk7CisjZWxzZQorCWZzID0gY3VycmVudF9mczsKKyNlbmRpZgorCisJaWYgKGNodW5rX2luZm8uY2h1bmtieXRlcyAmJiAoY2h1bmtfaW5mby5jaHVua2J5dGVzIDwgZnMtPmJsb2Nrc2l6ZSkpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogY2h1bmtzaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsICIKKwkJCSJ0byBmaWxlc3lzdGVtIGJsb2Nrc2l6ZS5cbiIsIHByb2duYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisJY29sbGVjdF9pbmZvKGZzLCAmY2h1bmtfaW5mbywgc3Rkb3V0KTsKKyNpZm5kZWYgREVCVUdGUworCWNsb3NlX2RldmljZShkZXZpY2VfbmFtZSwgZnMpOworCisJcmV0dXJuIDA7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL21pc2MvZTJmcmVlZnJhZy5oIGIvbWlzYy9lMmZyZWVmcmFnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkMWVlZgotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvZTJmcmVlZnJhZy5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2RlZmluZSBERUZBVUxUX0NIVU5LU0laRSAoMTAyNCoxMDI0KQorCisjZGVmaW5lIE1BWF9ISVNUCTMyCitzdHJ1Y3QgZnJlZV9jaHVua19oaXN0b2dyYW0geworCXVuc2lnbmVkIGxvbmcgZmNfY2h1bmtzW01BWF9ISVNUXTsKKwl1bnNpZ25lZCBsb25nIGZjX2Jsb2Nrc1tNQVhfSElTVF07Cit9OworCitzdHJ1Y3QgY2h1bmtfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBjaHVua2J5dGVzOwkvKiBjaHVuayBzaXplIGluIGJ5dGVzICovCisJaW50IGNodW5rYml0czsJCQkvKiBjaHVuayBzaXplIGluIGJpdHMgKi8KKwl1bnNpZ25lZCBsb25nIGZyZWVfY2h1bmtzOwkvKiB0b3RhbCBmcmVlIGNodW5rcyBvZiBnaXZlbiBzaXplICovCisJdW5zaWduZWQgbG9uZyByZWFsX2ZyZWVfY2h1bmtzOyAvKiBmcmVlIGNodW5rcyBvZiBhbnkgc2l6ZSAqLworCWludCBibG9ja3NpemVfYml0czsJCS8qIGZzIGJsb2Nrc2l6ZSBpbiBiaXRzICovCisJaW50IGJsa3NfaW5fY2h1bms7CQkvKiBudW1iZXIgb2YgYmxvY2tzIGluIGEgY2h1bmsgKi8KKwl1bnNpZ25lZCBsb25nIG1pbiwgbWF4LCBhdmc7CS8qIGNodW5rIHNpemUgc3RhdHMgKi8KKwlzdHJ1Y3QgZnJlZV9jaHVua19oaXN0b2dyYW0gaGlzdG9ncmFtOyAvKiBoaXN0b2dyYW0gb2YgYWxsIGNodW5rIHNpemVzKi8KK307CmRpZmYgLS1naXQgYS9taXNjL2UyaW1hZ2UuOC5pbiBiL21pc2MvZTJpbWFnZS44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MDAyZDcKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2UyaW1hZ2UuOC5pbgpAQCAtMCwwICsxLDI4NSBAQAorLlwiIC0qLSBucm9mZiAtKi0KKy5cIiBDb3B5cmlnaHQgMjAwMSBieSBUaGVvZG9yZSBUcydvLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy5cIiBUaGlzIGZpbGUgbWF5IGJlIGNvcGllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKy5cIiAKKy5USCBFMklNQUdFIDggIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2UyaW1hZ2UgXC0gU2F2ZSBjcml0aWNhbCBleHQyL2V4dDMvZXh0NCBmaWxlc3lzdGVtIG1ldGFkYXRhIHRvIGEgZmlsZQorLlNIIFNZTk9QU0lTCisuQiBlMmltYWdlCitbCisuQiBcLXJ8UQorXQorWworLkIgXC1mcgorXQorLkkgZGV2aWNlCisuSSBpbWFnZS1maWxlCisuYnIKKy5CIGUyaW1hZ2UKKy5CIFwtSQorLkkgZGV2aWNlCisuSSBpbWFnZS1maWxlCisuYnIKKy5CIGUyaW1hZ2UKKy5CIFwtcmEKK1sKKy5CIFwtY2ZucAorXQorWworLkIgXC1vCisuSSBzcmNfb2Zmc2V0CitdCitbCisuQiBcLU8KKy5JIGRlc3Rfb2Zmc2V0CitdCisuSSBzcmNfZnMKK1sKKy5JIGRlc3RfZnMKK10KKy5TSCBERVNDUklQVElPTgorVGhlCisuQiBlMmltYWdlCitwcm9ncmFtIHdpbGwgc2F2ZSBjcml0aWNhbCBleHQyLCBleHQzLCBvciBleHQ0IGZpbGVzeXN0ZW0gbWV0YWRhdGEgbG9jYXRlZCBvbgorLkkgZGV2aWNlCit0byBhIGZpbGUgc3BlY2lmaWVkIGJ5CisuSVIgaW1hZ2UtZmlsZSAuCitUaGUgaW1hZ2UgZmlsZSBtYXkgYmUgZXhhbWluZWQgYnkKKy5CIGR1bXBlMmZzCithbmQKKy5CUiAgZGVidWdmcyAsCitieSB1c2luZyB0aGUKKy5CIFwtaQorb3B0aW9uIHRvIHRob3NlIHByb2dyYW1zLiAgVGhpcyBjYW4gYXNzaXN0IGFuIGV4cGVydCBpbgorcmVjb3ZlcmluZyBjYXRhc3Ryb3BoaWNhbGx5IGNvcnJ1cHRlZCBmaWxlc3lzdGVtcy4gIEluIHRoZSBmdXR1cmUsCitlMmZzY2sgd2lsbCBiZSBlbmhhbmNlZCB0byBiZSBhYmxlIHRvIHVzZSB0aGUgaW1hZ2UgZmlsZSB0byBoZWxwCityZWNvdmVyIGEgYmFkbHkgZGFtYWdlZCBmaWxlc3lzdGVtLgorLlBQCitXaGVuIHNhdmluZyBhbiBlMmltYWdlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIHVzaW5nIGVpdGhlciB0aGUKKy5CIFwtcgorb3IKKy5CIFwtUQorb3B0aW9ucywgdGhlIGZpbGVzeXN0ZW0gbXVzdCBiZSB1bm1vdW50ZWQgb3IgYmUgbW91bnRlZCByZWFkL29ubHksIGluIG9yZGVyCitmb3IgdGhlIGltYWdlIGZpbGUgdG8gYmUgaW4gYSBjb25zaXN0ZW50IHN0YXRlLiAgVGhpcyByZXF1aXJlbWVudCBjYW4gYmUKK292ZXJyaWRlbiB1c2luZyB0aGUKKy5CIFwtZgorb3B0aW9uLCBidXQgdGhlIHJlc3VsdGluZyBpbWFnZSBmaWxlIGlzIHZlcnkgbGlrZWx5IG5vdCBnb2luZyB0byBiZSB1c2VmdWwuCisuUFAKK0lmCisuSSBpbWFnZS1maWxlCitpcyBcLSwgdGhlbiB0aGUgb3V0cHV0IG9mCisuQiBlMmltYWdlCit3aWxsIGJlIHNlbnQgdG8gc3RhbmRhcmQgb3V0cHV0LCBzbyB0aGF0IHRoZSBvdXRwdXQgY2FuIGJlIHBpcGVkIHRvCithbm90aGVyIHByb2dyYW0sIHN1Y2ggYXMKKy5CUiBnemlwICgxKS4KKyhOb3RlIHRoYXQgdGhpcyBpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgd2hlbgorY3JlYXRpbmcgYSByYXcgaW1hZ2UgZmlsZSB1c2luZyB0aGUKKy5CIFwtcgorb3B0aW9uLCBzaW5jZSB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBhIG5vcm1hbCBpbWFnZSBmaWxlLCBvciBRQ09XMgoraW1hZ2UgY3VycmVudGx5CityZXF1aXJlcyByYW5kb20gYWNjZXNzIHRvIHRoZSBmaWxlLCB3aGljaCBjYW5ub3QgYmUgZG9uZSB1c2luZyBhCitwaXBlLiAgVGhpcyByZXN0cmljdGlvbiB3aWxsIGhvcGVmdWxseSBiZSBsaWZ0ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZgorLkJSIGUyaW1hZ2UgLikKKy5QUAorSXQgaXMgYSB2ZXJ5IGdvb2QgaWRlYSB0byBjcmVhdGUgaW1hZ2UgZmlsZXMgZm9yIGFsbCBvZgorZmlsZXN5c3RlbXMgb24gYSBzeXN0ZW0gYW5kIHNhdmUgdGhlIHBhcnRpdGlvbgorbGF5b3V0ICh3aGljaCBjYW4gYmUgZ2VuZXJhdGVkIHVzaW5nIHRoZQorLkIgZmRpc2sgXC1sCitjb21tYW5kKSBhdCByZWd1bGFyIGludGVydmFscyAtLS0gYXQgYm9vdCB0aW1lLCBhbmQvb3IgZXZlcnkgd2VlayBvciBzby4KK1RoZSBpbWFnZSBmaWxlIHNob3VsZCBiZSBzdG9yZWQgb24gc29tZSBmaWxlc3lzdGVtIG90aGVyIHRoYW4KK3RoZSBmaWxlc3lzdGVtIHdob3NlIGRhdGEgaXQgY29udGFpbnMsIHRvIGVuc3VyZSB0aGF0IHRoaXMgZGF0YSBpcworYWNjZXNzaWJsZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgZmlsZXN5c3RlbSBoYXMgYmVlbiBiYWRseSBkYW1hZ2VkLgorLlBQCitUbyBzYXZlIGRpc2sgc3BhY2UsCisuQiBlMmltYWdlCitjcmVhdGVzIHRoZSBpbWFnZSBmaWxlIGFzIGEgc3BhcnNlIGZpbGUsIG9yIGluIFFDT1cyIGZvcm1hdC4KK0hlbmNlLCBpZiB0aGUgc3BhcnNlIGltYWdlIGZpbGUKK25lZWRzIHRvIGJlIGNvcGllZCB0byBhbm90aGVyIGxvY2F0aW9uLCBpdCBzaG91bGQKK2VpdGhlciBiZSBjb21wcmVzc2VkIGZpcnN0IG9yIGNvcGllZCB1c2luZyB0aGUKKy5CIFwtXC1zcGFyc2U9YWx3YXlzCitvcHRpb24gdG8gdGhlIEdOVSB2ZXJzaW9uIG9mCisuQlIgY3AgLgorVGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgUUNPVzIgaW1hZ2UsIHdoaWNoIGlzIG5vdCBzcGFyc2UuCisuUFAKK1RoZSBzaXplIG9mIGFuIGV4dDIgaW1hZ2UgZmlsZSBkZXBlbmRzIHByaW1hcmlseSBvbiB0aGUgc2l6ZSBvZiB0aGUKK2ZpbGVzeXN0ZW1zIGFuZCBob3cgbWFueSBpbm9kZXMgYXJlIGluIHVzZS4gIEZvciBhIHR5cGljYWwgMTAgZ2lnYWJ5dGUKK2ZpbGVzeXN0ZW0sIHdpdGggMjAwLDAwMCBpbm9kZXMgaW4gdXNlIG91dCBvZiAxLjIgbWlsbGlvbiBpbm9kZXMsIHRoZQoraW1hZ2UgZmlsZSB3aWxsIGJlIGFwcHJveGltYXRlbHkgMzUgbWVnYWJ5dGVzOyBhIDQgZ2lnYWJ5dGUgZmlsZXN5c3RlbSB3aXRoCisxNSwwMDAgaW5vZGVzIGluIHVzZSBvdXQgb2YgNTUwLDAwMCBpbm9kZXMgd2lsbCByZXN1bHQgaW4gYSAzIG1lZ2FieXRlCitpbWFnZSBmaWxlLiAgSW1hZ2UgZmlsZXMgdGVuZCB0byBiZSBxdWl0ZQorY29tcHJlc3NpYmxlOyBhbiBpbWFnZSBmaWxlIHRha2luZyB1cCAzMiBtZWdhYnl0ZXMgb2Ygc3BhY2Ugb24KK2Rpc2sgd2lsbCBnZW5lcmFsbHkgY29tcHJlc3MgZG93biB0byAzIG9yIDQgbWVnYWJ5dGVzLgorLlBQCisuU0ggUkVTVE9SSU5HIEZJTEVTWVNURU0gTUVUQURBVEEgVVNJTkcgQU4gSU1BR0UgRklMRQorLlBQCitUaGUKKy5CIFwtSQorb3B0aW9uIHdpbGwgY2F1c2UgZTJpbWFnZSB0byBpbnN0YWxsIHRoZSBtZXRhZGF0YSBzdG9yZWQgaW4gdGhlIGltYWdlCitmaWxlIGJhY2sgdG8gdGhlIGRldmljZS4gIEl0IGNhbiBiZSB1c2VkIHRvIHJlc3RvcmUgdGhlIGZpbGVzeXN0ZW0gbWV0YWRhdGEKK2JhY2sgdG8gdGhlIGRldmljZSBpbiBlbWVyZ2VuY3kgc2l0dWF0aW9ucy4KKy5QUAorLkIgV0FSTklORyEhISEKK1RoZQorLkIgXC1JCitvcHRpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBhcyBhIGRlc3BlcmF0aW9uIG1lYXN1cmUgd2hlbiBvdGhlcgorYWx0ZXJuYXRpdmVzIGhhdmUgZmFpbGVkLiAgSWYgdGhlIGZpbGVzeXN0ZW0gaGFzIGNoYW5nZWQgc2luY2UgdGhlIGltYWdlCitmaWxlIHdhcyBjcmVhdGVkLCBkYXRhCisuQiB3aWxsCitiZSBsb3N0LiAgSW4gZ2VuZXJhbCwgeW91IHNob3VsZCBtYWtlIGEgZnVsbCBpbWFnZQorYmFja3VwIG9mIHRoZSBmaWxlc3lzdGVtIGZpcnN0LCBpbiBjYXNlIHlvdSB3aXNoIHRvIHRyeSBvdGhlciByZWNvdmVyeQorc3RyYXRlZ2llcyBhZnRlcndhcmRzLgorLlBQCisuU0ggUkFXIElNQUdFIEZJTEVTCitUaGUKKy5CIFwtcgorb3B0aW9uIHdpbGwgY3JlYXRlIGEgcmF3IGltYWdlIGZpbGUgaW5zdGVhZCBvZiBhIG5vcm1hbCBpbWFnZSBmaWxlLgorQSByYXcgaW1hZ2UgZmlsZSBkaWZmZXJzCitmcm9tIGEgbm9ybWFsIGltYWdlIGZpbGUgaW4gdHdvIHdheXMuICBGaXJzdCwgdGhlIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaXMKK3BsYWNlZCBpbiB0aGUgcHJvcGVyIHBvc2l0aW9uIHNvIHRoYXQgZTJmc2NrLCBkdW1wZTJmcywgZGVidWdmcywKK2V0Yy5cJiBjYW4gYmUgcnVuIGRpcmVjdGx5IG9uIHRoZSByYXcgaW1hZ2UgZmlsZS4gIEluIG9yZGVyIHRvIG1pbmltaXplCit0aGUgYW1vdW50IG9mIGRpc2sgc3BhY2UgY29uc3VtZWQgYnkgYSByYXcgaW1hZ2UgZmlsZSwgdGhlIGZpbGUgaXMKK2NyZWF0ZWQgYXMgYSBzcGFyc2UgZmlsZS4gIChCZXdhcmUgb2YgY29weWluZyBvcgorY29tcHJlc3NpbmcvZGVjb21wcmVzc2luZyB0aGlzIGZpbGUgd2l0aCB1dGlsaXRpZXMgdGhhdCBkb24ndCB1bmRlcnN0YW5kCitob3cgdG8gY3JlYXRlIHNwYXJzZSBmaWxlczsgdGhlIGZpbGUgd2lsbCBiZWNvbWUgYXMgbGFyZ2UgYXMgdGhlCitmaWxlc3lzdGVtIGl0c2VsZiEpICBTZWNvbmRseSwgdGhlIHJhdyBpbWFnZSBmaWxlIGFsc28gaW5jbHVkZXMgaW5kaXJlY3QKK2Jsb2NrcyBhbmQgZGlyZWN0b3J5IGJsb2Nrcywgd2hpY2ggdGhlIHN0YW5kYXJkIGltYWdlIGZpbGUgZG9lcyBub3QgaGF2ZSwKK2FsdGhvdWdoIHRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorLlBQCitSYXcgaW1hZ2UgZmlsZXMgYXJlIHNvbWV0aW1lcyB1c2VkIHdoZW4gc2VuZGluZyBmaWxlc3lzdGVtcyB0byB0aGUgbWFpbnRhaW5lcgorYXMgcGFydCBvZiBidWcgcmVwb3J0cyB0byBlMmZzcHJvZ3MuICBXaGVuIHVzZWQgaW4gdGhpcyBjYXBhY2l0eSwgdGhlCityZWNvbW1lbmRlZCBjb21tYW5kIGlzIGFzIGZvbGxvd3MgKHJlcGxhY2UgaGRhMSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkZXZpY2UpOgorLlBQCisuYnIKKwlcZkJlMmltYWdlIFwtciAvZGV2L2hkYTEgXC0gfCBiemlwMiA+IGhkYTEuZTJpLmJ6MlxmUgorLlBQCitUaGlzIHdpbGwgb25seSBzZW5kIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiwgd2l0aG91dCBhbnkgZGF0YSBibG9ja3MuCitIb3dldmVyLCB0aGUgZmlsZW5hbWVzIGluIHRoZSBkaXJlY3RvcnkgYmxvY2tzIGNhbiBzdGlsbCByZXZlYWwKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZXN5c3RlbSB0aGF0IHRoZSBidWcgcmVwb3J0ZXIKK21heSB3aXNoIHRvIGtlZXAgY29uZmlkZW50aWFsLiAgVG8gYWRkcmVzcyB0aGlzIGNvbmNlcm4sIHRoZQorLkIgXC1zCitvcHRpb24gY2FuIGJlIHNwZWNpZmllZC4gIFRoaXMgd2lsbCBjYXVzZQorLkIgZTJpbWFnZQordG8gc2NyYW1ibGUgZGlyZWN0b3J5IGVudHJpZXMgYW5kIHplcm8gb3V0IGFueSB1bnVzZWQgcG9ydGlvbnMKK29mIHRoZSBkaXJlY3RvcnkgYmxvY2tzIGJlZm9yZSB3cml0aW5nIHRoZSBpbWFnZSBmaWxlLiAgSG93ZXZlciwKK3RoZQorLkIgXC1zCitvcHRpb24gd2lsbCBwcmV2ZW50IGFuYWx5c2lzIG9mIHByb2JsZW1zIHJlbGF0ZWQgdG8gaGFzaC10cmVlIGluZGV4ZWQKK2RpcmVjdG9yaWVzLgorLlBQCitOb3RlIHRoYXQgdGhpcyB3aWxsIHdvcmsgZXZlbiBpZiB5b3Ugc3Vic3RpdHV0ZSAiL2Rldi9oZGExIiBmb3IgYW5vdGhlciByYXcKK2Rpc2sgaW1hZ2UsIG9yIFFDT1cyIGltYWdlIHByZXZpb3VzbHkgY3JlYXRlZCBieQorLkJSIGUyaW1hZ2UgLgorLlBQCisuU0ggUUNPVzIgSU1BR0UgRklMRVMKK1RoZQorLkIgXC1RCitvcHRpb24gd2lsbCBjcmVhdGUgYSBRQ09XMiBpbWFnZSBmaWxlIGluc3RlYWQgb2YgYSBub3JtYWwsIG9yIHJhdyBpbWFnZSBmaWxlLgorQSBRQ09XMiBpbWFnZSBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHRoZSByYXcgaW1hZ2UgZG9lcywgaG93ZXZlciB1bmxpa2UKK3RoZSByYXcgaW1hZ2UgaXQgaXMgbm90IHNwYXJzZS4gVGhlIFFDT1cyIGltYWdlIG1pbmltaXplIHRoZSBhbW91bnQgb2YgZGlzaworc3BhY2UgYnkgc3RvcmluZyBkYXRhIGluIHNwZWNpYWwgZm9ybWF0IHdpdGggcGFjayBkYXRhIGNsb3NlbHkgdG9nZXRoZXIsIGhlbmNlCithdm9pZGluZyBob2xlcyB3aGlsZSBzdGlsbCBtaW5pbWl6aW5nIHNpemUuCisuUFAKK0luIG9yZGVyIHRvIHNlbmQgZmlsZXN5c3RlbSB0byB0aGUgbWFpbnRhaW5lciBhcyBhIHBhcnQgb2YgYnVnIHJlcG9ydCB0bworZTJmc3Byb2dzLCB1c2UgZm9sbG93aW5nIGNvbW1hbmRzIChyZXBsYWNlIGhkYTEgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZGV2aWNlKToKKy5QUAorLmJyCitcCVxmQmUyaW1hZ2UgXC1RIC9kZXYvaGRhMSBoZGExLnFjb3cyXGZSCisuYnIKK1wJXGZCYnppcDIgLXogaGRhMS5xY293MlxmUgorLlBQCitUaGlzIHdpbGwgb25seSBzZW5kIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiwgd2l0aG91dCBhbnkgZGF0YSBibG9ja3MuCitIb3dldmVyLCB0aGUgZmlsZW5hbWVzIGluIHRoZSBkaXJlY3RvcnkgYmxvY2tzIGNhbiBzdGlsbCByZXZlYWwKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZXN5c3RlbSB0aGF0IHRoZSBidWcgcmVwb3J0ZXIKK21heSB3aXNoIHRvIGtlZXAgY29uZmlkZW50aWFsLiAgVG8gYWRkcmVzcyB0aGlzIGNvbmNlcm4sIHRoZQorLkIgXC1zCitvcHRpb24gY2FuIGJlIHNwZWNpZmllZC4gIFRoaXMgd2lsbCBjYXVzZQorLkIgZTJpbWFnZQordG8gc2NyYW1ibGUgZGlyZWN0b3J5IGVudHJpZXMgYW5kIHplcm8gb3V0IGFueSB1bnVzZWQgcG9ydGlvbnMKK29mIHRoZSBkaXJlY3RvcnkgYmxvY2tzIGJlZm9yZSB3cml0aW5nIHRoZSBpbWFnZSBmaWxlLiAgSG93ZXZlciwgdGhlCisuQiBcLXMKK29wdGlvbiB3aWxsIHByZXZlbnQgYW5hbHlzaXMgb2YgcHJvYmxlbXMgcmVsYXRlZCB0byBoYXNoLXRyZWUgaW5kZXhlZAorZGlyZWN0b3JpZXMuCisuUFAKK05vdGUgdGhhdCBRQ09XMiBpbWFnZSBjcmVhdGVkIGJ5CisuQiBlMmltYWdlCitpcyByZWd1bGFyIFFDT1cyIGltYWdlIGFuZCBjYW4gYmUgcHJvY2Vzc2VkIGJ5IHRvb2xzIGF3YXJlIG9mIFFDT1cyIGZvcm1hdAorc3VjaCBhcyBmb3IgZXhhbXBsZQorLkJSIHFlbXUtaW1nIC4KKy5QUAorWW91IGNhbiBjb252ZXJ0IGEgcWNvdzIgaW1hZ2UgaW50byBhIHJhdyBpbWFnZSB3aXRoOgorLlBQCisuYnIKK1wJXGZCZTJpbWFnZSBcLXIgaGRhMS5xY293MiBoZGExLnJhd1xmUgorLmJyCisuUFAKK1RoaXMgY2FuIGJlIHVzZWZ1bCB0byB3cml0ZSBhIHFjb3cyIGltYWdlIGNvbnRhaW5pbmcgYWxsIGRhdGEgdG8gYQorc3BhcnNlIGltYWdlIGZpbGUgd2hlcmUgaXQgY2FuIGJlIGxvb3AgbW91bnRlZCwgb3IgdG8gYSBkaXNrIHBhcnRpdGlvbi4KK05vdGUgdGhhdCB0aGlzIG1heSBub3Qgd29yayB3aXRoIHFjb3cyIGltYWdlcyBub3QgZ2VuZXJhdGVkIGJ5IGUyaW1hZ2UuCisuUFAKKy5TSCBJTkNMVURJTkcgREFUQQorTm9ybWFsbHkKKy5CIGUyaW1hZ2UKK29ubHkgaW5jbHVkZXMgZnMgbWV0YWRhdGEsIG5vdCByZWd1bGFyIGZpbGUgZGF0YS4gIFRoZQorLkIgXC1hCitvcHRpb24gY2FuIGJlIHNwZWNpZmllZCB0byBpbmNsdWRlIGFsbCBkYXRhLiAgVGhpcyB3aWxsCitnaXZlIGFuIGltYWdlIHRoYXQgaXMgc3VpdGFibGUgdG8gdXNlIHRvIGNsb25lIHRoZSBlbnRpcmUgRlMgb3IKK2ZvciBiYWNrdXAgcHVycG9zZXMuICBOb3RlIHRoYXQgdGhpcyBvcHRpb24gb25seSB3b3JrcyB3aXRoIHRoZQorcmF3IG9yIFFDT1cyIGZvcm1hdHMuICBUaGUKKy5CIFwtcAorc3dpdGNoIG1heSBiZSBnaXZlbiB0byBzaG93IHByb2dyZXNzLiAgSWYgdGhlIGZpbGUgc3lzdGVtIGlzIGJlaW5nCitjbG9uZWQgdG8gYSBmbGFzaC1iYXNlZCBzdG9yYWdlIGRldmljZSAod2hlcmUgcmVhZHMgYXJlIHZlcnkgZmFzdCBhbmQKK3doZXJlIGl0IGlzIGRlc2lyYWJsZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3cml0ZXMgdG8gcmVkdWNlIHdyaXRlIHdlYXIKK29uIHRoZSBkZXZpY2UpLCB0aGUKKy5CIFwtYworb3B0aW9uIHdoaWNoIGNhdXNlIGUyaW1hZ2UgdG8gdHJ5IHJlYWRpbmcgYSBibG9jayBmcm9tIHRoZSBkZXN0aW5hdGlvbgordG8gc2VlIGlmIGl0IGlzIGlkZW50aWNhbCB0byB0aGUgYmxvY2sgd2hpY2gKKy5CIGUyaW1hZ2UKK2lzIGFib3V0IHRvIGNvcHkuICBJZiB0aGUgYmxvY2sgaXMgYWxyZWFkeSB0aGUgc2FtZSwgdGhlIHdyaXRlIGNhbiBiZQorc2tpcHBlZC4gIFRoZQorLkIgXC1uCitvcHRpb24gd2lsbCBjYXVzZSBhbGwgb2YgdGhlIHdyaXRlcyB0byBiZSBuby1vcHMsIGFuZCBwcmludCB0aGUgYmxvY2tzCit0aGF0IHdvdWxkIGhhdmUgYmVlbiB3cml0dGVuLgorLlBQCisuU0ggT0ZGU0VUUworTm9ybWFsbHkgYSBmaWxlc3lzdGVtIHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcGFydGl0aW9uLCBhbmQKKy5CIGUyaW1hZ2UKK2lzIHJ1biBvbiB0aGUgcGFydGl0aW9uLiAgV2hlbiB3b3JraW5nIHdpdGggaW1hZ2UgZmlsZXMsIHlvdSBkb24ndAoraGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIHRoZSBwYXJ0aXRpb24gZGV2aWNlLCBzbyB5b3UgY2FuIHNwZWNpZnkKK3RoZSBvZmZzZXQgd2hlcmUgdGhlIGZpbGVzeXN0ZW0gc3RhcnRzIGRpcmVjdGx5IHdpdGggdGhlCisuQiBcLW8KK29wdGlvbi4gIFNpbWlsYXJseSB0aGUKKy5CIFwtTworb3B0aW9uIHNwZWNpZmllcyB0aGUgb2Zmc2V0IHRoYXQgc2hvdWxkIGJlIHNlZWtlZCB0byBpbiB0aGUgZGVzdGluYXRpb24KK2JlZm9yZSB3cml0aW5nIHRoZSBmaWxlc3lzdGVtLgorLlBQCitGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYQorLkIgZGQKK2ltYWdlIG9mIGEgd2hvbGUgaGFyZCBkcml2ZSB0aGF0IGNvbnRhaW5zIGFuIGV4dDIgZnMgaW4gYSBwYXJ0aXRpb24KK3N0YXJ0aW5nIGF0IDEgTWlCLCB5b3UgY2FuIGNsb25lIHRoYXQgZnMgd2l0aDoKKy5QUAorLmJyCitcCVxmQmUyaW1hZ2UgXC1hcm8gMTA0ODU3NiBpbWcgL2Rldi9zZGExXGZSCisuYnIKKy5QUAorT3IgeW91IGNhbiBjbG9uZSBhIGZzIGludG8gYW4gaW1hZ2UgZmlsZSwgbGVhdmluZyByb29tIGluIHRoZSBmaXJzdAorTWlCIGZvciBhIHBhcnRpdGlvbiB0YWJsZSB3aXRoOgorLlBQCisuYnIKK1wJXGZCZTJpbWFnZSAtYXJPIDEwNDg1NzYgL2Rldi9zZGExIGltZ1xmUgorLmJyCisuUFAKK0lmIHlvdSBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBvZmZzZXQsIGFuZCBvbmx5IG9uZSBmaWxlLCBhbiBpbi1wbGFjZQorbW92ZSB3aWxsIGJlIHBlcmZvcm1lZCwgYWxsb3dpbmcgeW91IHRvIHNhZmVseSBtb3ZlIHRoZSBmaWxlc3lzdGVtCitmcm9tIG9uZSBvZmZzZXQgdG8gYW5vdGhlci4KKy5TSCBBVVRIT1IKKy5CIGUyaW1hZ2UKK3dhcyB3cml0dGVuIGJ5IFRoZW9kb3JlIFRzJ28gKHR5dHNvQG1pdC5lZHUpLgorLlNIIEFWQUlMQUJJTElUWQorLkIgZTJpbWFnZQoraXMgcGFydCBvZiB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgYW5kIGlzIGF2YWlsYWJsZSBmcm9tCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC4KKy5TSCBTRUUgQUxTTworLkJSIGR1bXBlMmZzICg4KSwKKy5CUiBkZWJ1Z2ZzICg4KQorCmRpZmYgLS1naXQgYS9taXNjL2UyaW1hZ2UuYyBiL21pc2MvZTJpbWFnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZmUzZTgKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2UyaW1hZ2UuYwpAQCAtMCwwICsxLDE2NzcgQEAKKy8qCisgKiBlMmltYWdlLmMgLS0tIFByb2dyYW0gd2hpY2ggd3JpdGVzIGFuIGltYWdlIGZpbGUgYmFja2luZyB1cAorICogY3JpdGljYWwgbWV0YWRhdGEgZm9yIHRoZSBmaWxlc3lzdGVtLgorICoKKyAqIENvcHlyaWdodCAyMDAwLCAyMDAxIGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Z3JwLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisjaW5jbHVkZSAiZXQvY29tX2Vyci5oIgorI2luY2x1ZGUgInV1aWQvdXVpZC5oIgorI2luY2x1ZGUgImUycC9lMnAuaCIKKyNpbmNsdWRlICJleHQyZnMvZTJpbWFnZS5oIgorI2luY2x1ZGUgImV4dDJmcy9xY293Mi5oIgorCisjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKworI2RlZmluZSBRQ09XX09GTEFHX0NPUElFRCAgICAgKDFMTCA8PCA2MykKKyNkZWZpbmUgTk9fQkxLICgoYmxrNjRfdCkgLTEpCisKKy8qIEltYWdlIHR5cGVzICovCisjZGVmaW5lIEUySU1BR0VfUkFXCTEKKyNkZWZpbmUgRTJJTUFHRV9RQ09XMgkyCisKKy8qIEltYWdlIGZsYWdzICovCisjZGVmaW5lIEUySU1BR0VfSU5TVEFMTF9GTEFHCTEKKyNkZWZpbmUgRTJJTUFHRV9TQ1JBTUJMRV9GTEFHCTIKKyNkZWZpbmUgRTJJTUFHRV9JU19RQ09XMl9GTEFHCTQKKyNkZWZpbmUgRTJJTUFHRV9DSEVDS19aRVJPX0ZMQUcJOAorCitzdGF0aWMgY29uc3QgY2hhciAqIHByb2dyYW1fbmFtZSA9ICJlMmltYWdlIjsKK3N0YXRpYyBjaGFyICogZGV2aWNlX25hbWUgPSBOVUxMOworc3RhdGljIGNoYXIgYWxsX2RhdGE7CitzdGF0aWMgY2hhciBvdXRwdXRfaXNfYmxrOworc3RhdGljIGNoYXIgbm9wX2ZsYWc7CisvKiB3cml0aW5nIHRvIGJsayBkZXZpY2U6IGRvbid0IHNraXAgemVyb2VkIGJsb2NrcyAqLworc3RhdGljIGJsazY0X3Qgc291cmNlX29mZnNldCwgZGVzdF9vZmZzZXQ7CitzdGF0aWMgY2hhciBtb3ZlX21vZGU7CitzdGF0aWMgY2hhciBzaG93X3Byb2dyZXNzOworc3RhdGljIGNoYXIgKmNoZWNrX2J1ZjsKK3N0YXRpYyBpbnQgc2tpcHBlZF9ibG9ja3M7CisKK3N0YXRpYyBibGs2NF90IGFsaWduX29mZnNldChibGs2NF90IG9mZnNldCwgdW5zaWduZWQgaW50IG4pCit7CisJcmV0dXJuIChvZmZzZXQgKyBuIC0gMSkgJiB+KChibGs2NF90KSBuIC0gMSk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2JpdHNfZnJvbV9zaXplKHNpemVfdCBzaXplKQoreworCWludCByZXMgPSAwOworCisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIC0xOworCisJd2hpbGUgKHNpemUgIT0gMSkgeworCQkvKiBOb3QgYSBwb3dlciBvZiB0d28gKi8KKwkJaWYgKHNpemUgJiAxKQorCQkJcmV0dXJuIC0xOworCisJCXNpemUgPj49IDE7CisJCXJlcysrOworCX0KKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLCBfKCJVc2FnZTogJXMgWyAtcnxRIF0gWyAtZnIgXSBkZXZpY2UgaW1hZ2UtZmlsZVxuIiksCisJCXByb2dyYW1fbmFtZSk7CisJZnByaW50ZihzdGRlcnIsIF8oIiAgICAgICAlcyAtSSBkZXZpY2UgaW1hZ2UtZmlsZVxuIiksIHByb2dyYW1fbmFtZSk7CisJZnByaW50ZihzdGRlcnIsIF8oIiAgICAgICAlcyAtcmEgIFsgIC1jZm5wICBdIFsgLW8gc3JjX29mZnNldCBdICIKKwkJCSAgIlsgLU8gZGVzdF9vZmZzZXQgXSBzcmNfZnMgWyBkZXN0X2ZzIF1cbiIpLAorCQlwcm9ncmFtX25hbWUpOworCWV4aXQgKDEpOworfQorCitzdGF0aWMgZXh0Ml9sb2ZmX3Qgc2Vla19yZWxhdGl2ZShpbnQgZmQsIGludCBvZmZzZXQpCit7CisJZXh0Ml9sb2ZmX3QgcmV0ID0gZXh0MmZzX2xsc2VlayhmZCwgb2Zmc2V0LCBTRUVLX0NVUik7CisJaWYgKHJldCA8IDApIHsKKwkJcGVycm9yKCJzZWVrX3JlbGF0aXZlIik7CisJCWV4aXQoMSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBleHQyX2xvZmZfdCBzZWVrX3NldChpbnQgZmQsIGV4dDJfbG9mZl90IG9mZnNldCkKK3sKKwlleHQyX2xvZmZfdCByZXQgPSBleHQyZnNfbGxzZWVrKGZkLCBvZmZzZXQsIFNFRUtfU0VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlwZXJyb3IoInNlZWtfc2V0Iik7CisJCWV4aXQoMSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGJsb2NrIHdlIGFyZSBhYm91dCB0byB3cml0ZSBpcyBpZGVudGljYWwgdG8KKyAqIHdoYXQgaXMgYWxyZWFkeSBvbiB0aGUgZGlzay4KKyAqLworc3RhdGljIGludCBjaGVja19ibG9jayhpbnQgZmQsIHZvaWQgKmJ1Ziwgdm9pZCAqY2J1ZiwgaW50IGJsb2Nrc2l6ZSkKK3sKKwljaGFyICpjcCA9IGNidWY7CisJaW50IGNvdW50ID0gYmxvY2tzaXplLCByZXQ7CisKKwlpZiAoY2J1ZiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJcmV0ID0gcmVhZChmZCwgY3AsIGNvdW50KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXBlcnJvcigiY2hlY2tfYmxvY2siKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJY291bnQgLT0gcmV0OworCQljcCArPSByZXQ7CisJfQorCXJldCA9IG1lbWNtcChidWYsIGNidWYsIGJsb2Nrc2l6ZSk7CisJc2Vla19yZWxhdGl2ZShmZCwgLWJsb2Nrc2l6ZSk7CisJcmV0dXJuIChyZXQgPT0gMCkgPyAxIDogMDsKK30KKworc3RhdGljIHZvaWQgZ2VuZXJpY193cml0ZShpbnQgZmQsIHZvaWQgKmJ1ZiwgaW50IGJsb2Nrc2l6ZSwgYmxrNjRfdCBibG9jaykKK3sKKwlpbnQgY291bnQsIGZyZWVfYnVmID0gMDsKKwllcnJjb2RlX3QgZXJyOworCisJaWYgKCFibG9ja3NpemUpCisJCXJldHVybjsKKworCWlmICghYnVmKSB7CisJCWZyZWVfYnVmID0gMTsKKwkJZXJyID0gZXh0MmZzX2dldF9hcnJheXplcm8oMSwgYmxvY2tzaXplLCAmYnVmKTsKKwkJaWYgKGVycikgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIGVyciwgIiVzIiwKKwkJCQlfKCJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlciIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJaWYgKG5vcF9mbGFnKSB7CisJCXByaW50ZihfKCJXcml0aW5nIGJsb2NrICVsbHVcbiIpLCAodW5zaWduZWQgbG9uZyBsb25nKSBibG9jayk7CisJCWlmIChmZCAhPSAxKQorCQkJc2Vla19yZWxhdGl2ZShmZCwgYmxvY2tzaXplKTsKKwkJZ290byBmcmVlX2FuZF9yZXR1cm47CisJfQorCWNvdW50ID0gd3JpdGUoZmQsIGJ1ZiwgYmxvY2tzaXplKTsKKwlpZiAoY291bnQgIT0gYmxvY2tzaXplKSB7CisJCWlmIChjb3VudCA9PSAtMSkKKwkJCWVyciA9IGVycm5vOworCQllbHNlCisJCQllcnIgPSAwOworCisJCWlmIChibG9jaykKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnIsCisJCQkJXygiZXJyb3Igd3JpdGluZyBibG9jayAlbGx1IiksIGJsb2NrKTsKKwkJZWxzZQorCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIGVyciwgIiVzIiwKKwkJCQlfKCJlcnJvciBpbiBnZW5lcmljX3dyaXRlKCkiKSk7CisKKwkJZXhpdCgxKTsKKwl9CitmcmVlX2FuZF9yZXR1cm46CisJaWYgKGZyZWVfYnVmKQorCQlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2hlYWRlcihpbnQgZmQsIHZvaWQgKmhkciwgaW50IGhkcl9zaXplLCBpbnQgd3J0X3NpemUpCit7CisJY2hhciAqaGVhZGVyX2J1ZjsKKwlpbnQgcmV0OworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKGhkcl9zaXplID4gd3J0X3NpemUpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsCisJCQlfKCJFcnJvcjogaGVhZGVyIHNpemUgaXMgYmlnZ2VyIHRoYW4gd3J0X3NpemVcbiIpKTsKKwl9CisKKwlyZXQgPSBleHQyZnNfZ2V0X21lbSh3cnRfc2l6ZSwgJmhlYWRlcl9idWYpOworCWlmIChyZXQpIHsKKwkJZnB1dHMoXygiQ291bGRuJ3QgYWxsb2NhdGUgaGVhZGVyIGJ1ZmZlclxuIiksIHN0ZGVycik7CisJCWV4aXQoMSk7CisJfQorCisJc2Vla19zZXQoZmQsIDApOworCW1lbXNldChoZWFkZXJfYnVmLCAwLCB3cnRfc2l6ZSk7CisKKwlpZiAoaGRyKQorCQltZW1jcHkoaGVhZGVyX2J1ZiwgaGRyLCBoZHJfc2l6ZSk7CisKKwlnZW5lcmljX3dyaXRlKGZkLCBoZWFkZXJfYnVmLCB3cnRfc2l6ZSwgTk9fQkxLKTsKKworCWV4dDJmc19mcmVlX21lbSgmaGVhZGVyX2J1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2ltYWdlX2ZpbGUoZXh0Ml9maWxzeXMgZnMsIGludCBmZCkKK3sKKwlzdHJ1Y3QgZXh0Ml9pbWFnZV9oZHIJaGRyOworCXN0cnVjdCBzdGF0CQlzdDsKKwllcnJjb2RlX3QJCXJldHZhbDsKKworCXdyaXRlX2hlYWRlcihmZCwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBleHQyX2ltYWdlX2hkciksIGZzLT5ibG9ja3NpemUpOworCW1lbXNldCgmaGRyLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW1hZ2VfaGRyKSk7CisKKwloZHIub2Zmc2V0X3N1cGVyID0gc2Vla19yZWxhdGl2ZShmZCwgMCk7CisJcmV0dmFsID0gZXh0MmZzX2ltYWdlX3N1cGVyX3dyaXRlKGZzLCBmZCwgMCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgd3JpdGluZyBzdXBlcmJsb2NrIikpOworCQlleGl0KDEpOworCX0KKworCWhkci5vZmZzZXRfaW5vZGUgPSBzZWVrX3JlbGF0aXZlKGZkLCAwKTsKKwlyZXR2YWwgPSBleHQyZnNfaW1hZ2VfaW5vZGVfd3JpdGUoZnMsIGZkLAorCQkJCSAgKGZkICE9IDEpID8gSU1BR0VSX0ZMQUdfU1BBUlNFV1JJVEUgOiAwKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIikpOworCQlleGl0KDEpOworCX0KKworCWhkci5vZmZzZXRfYmxvY2ttYXAgPSBzZWVrX3JlbGF0aXZlKGZkLCAwKTsKKwlyZXR2YWwgPSBleHQyZnNfaW1hZ2VfYml0bWFwX3dyaXRlKGZzLCBmZCwgMCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgd3JpdGluZyBibG9jayBiaXRtYXAiKSk7CisJCWV4aXQoMSk7CisJfQorCisJaGRyLm9mZnNldF9pbm9kZW1hcCA9IHNlZWtfcmVsYXRpdmUoZmQsIDApOworCXJldHZhbCA9IGV4dDJmc19pbWFnZV9iaXRtYXBfd3JpdGUoZnMsIGZkLCBJTUFHRVJfRkxBR19JTk9ERU1BUCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgd3JpdGluZyBpbm9kZSBiaXRtYXAiKSk7CisJCWV4aXQoMSk7CisJfQorCisJaGRyLm1hZ2ljX251bWJlciA9IEVYVDJfRVRfTUFHSUNfRTJJTUFHRTsKKwlzdHJjcHkoaGRyLm1hZ2ljX2Rlc2NyaXB0b3IsICJFeHQyIEltYWdlIDEuMCIpOworCWdldGhvc3RuYW1lKGhkci5mc19ob3N0bmFtZSwgc2l6ZW9mKGhkci5mc19ob3N0bmFtZSkpOworCXN0cm5jcHkoaGRyLmZzX2RldmljZV9uYW1lLCBkZXZpY2VfbmFtZSwgc2l6ZW9mKGhkci5mc19kZXZpY2VfbmFtZSktMSk7CisJaGRyLmZzX2RldmljZV9uYW1lW3NpemVvZihoZHIuZnNfZGV2aWNlX25hbWUpIC0gMV0gPSAwOworCWhkci5mc19ibG9ja3NpemUgPSBmcy0+YmxvY2tzaXplOworCisJaWYgKHN0YXQoZGV2aWNlX25hbWUsICZzdCkgPT0gMCkKKwkJaGRyLmZzX2RldmljZSA9IHN0LnN0X3JkZXY7CisKKwlpZiAoZnN0YXQoZmQsICZzdCkgPT0gMCkgeworCQloZHIuaW1hZ2VfZGV2aWNlID0gc3Quc3RfZGV2OworCQloZHIuaW1hZ2VfaW5vZGUgPSBzdC5zdF9pbm87CisJfQorCW1lbWNweShoZHIuZnNfdXVpZCwgZnMtPnN1cGVyLT5zX3V1aWQsIHNpemVvZihoZHIuZnNfdXVpZCkpOworCisJaGRyLmltYWdlX3RpbWUgPSB0aW1lKDApOworCXdyaXRlX2hlYWRlcihmZCwgJmhkciwgc2l6ZW9mKHN0cnVjdCBleHQyX2ltYWdlX2hkciksIGZzLT5ibG9ja3NpemUpOworfQorCisvKgorICogVGhlc2Ugc2V0IG9mIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byB3cml0ZSBhIFJBVyBpbWFnZSBmaWxlLgorICovCitzdGF0aWMgZXh0MmZzX2Jsb2NrX2JpdG1hcCBtZXRhX2Jsb2NrX21hcDsKK3N0YXRpYyBleHQyZnNfYmxvY2tfYml0bWFwIHNjcmFtYmxlX2Jsb2NrX21hcDsJLyogRGlyZWN0b3J5IGJsb2NrcyB0byBiZSBzY3JhbWJsZWQgKi8KK3N0YXRpYyBibGs2NF90IG1ldGFfYmxvY2tzX2NvdW50OworCitzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgeworCWV4dDJfaW5vX3QJaW5vOworCWludAkJaXNfZGlyOworfTsKKworLyoKKyAqIFRoZXNlIHN1YnJvdXRpbmVzIHNob3J0IGNpcmN1aXRzIGV4dDJmc19nZXRfYmxvY2tzIGFuZAorICogZXh0MmZzX2NoZWNrX2RpcmVjdG9yeTsgd2UgdXNlIHRoZW0gc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSBpbm9kZQorICogc3RydWN0dXJlLCBzbyB0aGVyZSdzIG5vIHBvaW50IGluIGxldHRpbmcgdGhlIGV4dDJmcyBsaWJyYXJ5IHJlYWQKKyAqIHRoZSBpbm9kZSBhZ2Fpbi4KKyAqLworc3RhdGljIGlub190IHN0YXNoZWRfaW5vID0gMDsKK3N0YXRpYyBzdHJ1Y3QgZXh0Ml9pbm9kZSAqc3Rhc2hlZF9pbm9kZTsKKworc3RhdGljIGVycmNvZGVfdCBtZXRhX2dldF9ibG9ja3MoZXh0Ml9maWxzeXMgZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCSBleHQyX2lub190IGlubywKKwkJCQkgYmxrX3QgKmJsb2NrcykKK3sKKwlpbnQJaTsKKworCWlmICgoaW5vICE9IHN0YXNoZWRfaW5vKSB8fCAhc3Rhc2hlZF9pbm9kZSkKKwkJcmV0dXJuIEVYVDJfRVRfQ0FMTEJBQ0tfTk9USEFORExFRDsKKworCWZvciAoaT0wOyBpIDwgRVhUMl9OX0JMT0NLUzsgaSsrKQorCQlibG9ja3NbaV0gPSBzdGFzaGVkX2lub2RlLT5pX2Jsb2NrW2ldOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IG1ldGFfY2hlY2tfZGlyZWN0b3J5KGV4dDJfZmlsc3lzIGZzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQkgICAgICBleHQyX2lub190IGlubykKK3sKKwlpZiAoKGlubyAhPSBzdGFzaGVkX2lubykgfHwgIXN0YXNoZWRfaW5vZGUpCisJCXJldHVybiBFWFQyX0VUX0NBTExCQUNLX05PVEhBTkRMRUQ7CisKKwlpZiAoIUxJTlVYX1NfSVNESVIoc3Rhc2hlZF9pbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fRElSRUNUT1JZOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IG1ldGFfcmVhZF9pbm9kZShleHQyX2ZpbHN5cyBmcyBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJIGV4dDJfaW5vX3QgaW5vLAorCQkJCSBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpCit7CisJaWYgKChpbm8gIT0gc3Rhc2hlZF9pbm8pIHx8ICFzdGFzaGVkX2lub2RlKQorCQlyZXR1cm4gRVhUMl9FVF9DQUxMQkFDS19OT1RIQU5ETEVEOworCSppbm9kZSA9ICpzdGFzaGVkX2lub2RlOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2VfaW5vZGVfc2hvcnRjdXRzKGV4dDJfZmlsc3lzIGZzLCBpbnQgdXNlX3Nob3J0Y3V0cykKK3sKKwlpZiAodXNlX3Nob3J0Y3V0cykgeworCQlmcy0+Z2V0X2Jsb2NrcyA9IG1ldGFfZ2V0X2Jsb2NrczsKKwkJZnMtPmNoZWNrX2RpcmVjdG9yeSA9IG1ldGFfY2hlY2tfZGlyZWN0b3J5OworCQlmcy0+cmVhZF9pbm9kZSA9IG1ldGFfcmVhZF9pbm9kZTsKKwkJc3Rhc2hlZF9pbm8gPSAwOworCX0gZWxzZSB7CisJCWZzLT5nZXRfYmxvY2tzID0gMDsKKwkJZnMtPmNoZWNrX2RpcmVjdG9yeSA9IDA7CisJCWZzLT5yZWFkX2lub2RlID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19kaXJfYmxvY2soZXh0Ml9maWxzeXMgZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICBibGs2NF90ICpibG9ja19uciwKKwkJCSAgICAgZTJfYmxrY250X3QgYmxvY2tjbnQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgdm9pZCAqcHJpdl9kYXRhIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgKnA7CisKKwlwID0gKHN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCAqKSBwcml2X2RhdGE7CisKKwlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKG1ldGFfYmxvY2tfbWFwLCAqYmxvY2tfbnIpOworCW1ldGFfYmxvY2tzX2NvdW50Kys7CisJaWYgKHNjcmFtYmxlX2Jsb2NrX21hcCAmJiBwLT5pc19kaXIgJiYgYmxvY2tjbnQgPj0gMCkKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihzY3JhbWJsZV9ibG9ja19tYXAsICpibG9ja19ucik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19maWxlX2Jsb2NrKGV4dDJfZmlsc3lzIGZzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgIGJsazY0X3QgKmJsb2NrX25yLAorCQkJICAgICAgZTJfYmxrY250X3QgYmxvY2tjbnQsCisJCQkgICAgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICB2b2lkICpwcml2X2RhdGEgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWlmIChibG9ja2NudCA8IDAgfHwgYWxsX2RhdGEpIHsKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihtZXRhX2Jsb2NrX21hcCwgKmJsb2NrX25yKTsKKwkJbWV0YV9ibG9ja3NfY291bnQrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfdGFibGVfYmxvY2tzKGV4dDJfZmlsc3lzIGZzKQoreworCWJsazY0X3QJZmlyc3RfYmxvY2ssIGI7CisJdW5zaWduZWQgaW50CWksajsKKworCWZpcnN0X2Jsb2NrID0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2s7CisJLyoKKwkgKiBNYXJrIHByaW1hcnkgc3VwZXJibG9jaworCSAqLworCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIobWV0YV9ibG9ja19tYXAsIGZpcnN0X2Jsb2NrKTsKKwltZXRhX2Jsb2Nrc19jb3VudCsrOworCisJLyoKKwkgKiBNYXJrIHRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgZGVzY3JpcHRvcnMKKwkgKi8KKwlmb3IgKGogPSAwOyBqIDwgZnMtPmRlc2NfYmxvY2tzOyBqKyspIHsKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihtZXRhX2Jsb2NrX21hcCwKKwkJCSBleHQyZnNfZGVzY3JpcHRvcl9ibG9ja19sb2MyKGZzLCBmaXJzdF9ibG9jaywgaikpOworCX0KKwltZXRhX2Jsb2Nrc19jb3VudCArPSBmcy0+ZGVzY19ibG9ja3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQkvKgorCQkgKiBNYXJrIHRoZSBibG9ja3MgdXNlZCBmb3IgdGhlIGlub2RlIHRhYmxlCisJCSAqLworCQlpZiAoKG91dHB1dF9pc19ibGsgfHwKKwkJICAgICAhZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGksIEVYVDJfQkdfSU5PREVfVU5JTklUKSkgJiYKKwkJICAgIGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpKSB7CisJCQl1bnNpZ25lZCBpbnQgZW5kID0gKHVuc2lnbmVkKSBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKwkJCS8qIHNraXAgdW51c2VkIGJsb2NrcyAqLworCQkJaWYgKCFvdXRwdXRfaXNfYmxrICYmCisJCQkgICAgRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pKQorCQkJCWVuZCAtPSAoZXh0MmZzX2JnX2l0YWJsZV91bnVzZWQoZnMsIGkpIC8KKwkJCQkJRVhUMl9JTk9ERVNfUEVSX0JMT0NLKGZzLT5zdXBlcikpOworCQkJZm9yIChqID0gMCwgYiA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpOworCQkJICAgICBqIDwgZW5kOworCQkJICAgICBqKyssIGIrKykgeworCQkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIobWV0YV9ibG9ja19tYXAsIGIpOworCQkJCW1ldGFfYmxvY2tzX2NvdW50Kys7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBNYXJrIGJsb2NrIHVzZWQgZm9yIHRoZSBibG9jayBiaXRtYXAKKwkJICovCisJCWlmICghZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGksIEVYVDJfQkdfQkxPQ0tfVU5JTklUKSAmJgorCQkgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKSB7CisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKG1ldGFfYmxvY2tfbWFwLAorCQkJCSAgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKTsKKwkJCW1ldGFfYmxvY2tzX2NvdW50Kys7CisJCX0KKworCQkvKgorCQkgKiBNYXJrIGJsb2NrIHVzZWQgZm9yIHRoZSBpbm9kZSBiaXRtYXAKKwkJICovCisJCWlmICghZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGksIEVYVDJfQkdfSU5PREVfVU5JTklUKSAmJgorCQkgICAgZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpKSB7CisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKG1ldGFfYmxvY2tfbWFwLAorCQkJCSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSkpOworCQkJbWV0YV9ibG9ja3NfY291bnQrKzsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAxIGlmIHRoZSBzcGVjaWZpZWQgYmxvY2sgaXMgYWxsIHplcm9zCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfemVyb19ibG9jayhjaGFyICpidWYsIGludCBibG9ja3NpemUpCit7CisJY2hhcgkqY3AgPSBidWY7CisJaW50CWxlZnQgPSBibG9ja3NpemU7CisKKwlpZiAob3V0cHV0X2lzX2JsaykKKwkJcmV0dXJuIDA7CisJd2hpbGUgKGxlZnQgPiAwKSB7CisJCWlmICgqY3ArKykKKwkJCXJldHVybiAwOworCQlsZWZ0LS07CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5hbWVfaWRbMjU2XTsKKworI2RlZmluZSBFWFQ0X01BWF9SRUNfTEVOCQkoKDE8PDE2KS0xKQorCitzdGF0aWMgdm9pZCBzY3JhbWJsZV9kaXJfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxrLCBjaGFyICpidWYpCit7CisJY2hhciAqcCwgKmVuZCwgKmNwOworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICpkaXJlbnQ7CisJdW5zaWduZWQgaW50IHJlY19sZW47CisJaW50IGlkLCBsZW47CisKKwllbmQgPSBidWYgKyBmcy0+YmxvY2tzaXplOworCWZvciAocCA9IGJ1ZjsgcCA8IGVuZC04OyBwICs9IHJlY19sZW4pIHsKKwkJZGlyZW50ID0gKHN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICopIHA7CisJCXJlY19sZW4gPSBkaXJlbnQtPnJlY19sZW47CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJCXJlY19sZW4gPSBleHQyZnNfc3dhYjE2KHJlY19sZW4pOworI2VuZGlmCisJCWlmIChyZWNfbGVuID09IEVYVDRfTUFYX1JFQ19MRU4gfHwgcmVjX2xlbiA9PSAwKQorCQkJcmVjX2xlbiA9IGZzLT5ibG9ja3NpemU7CisJCWVsc2UgCisJCQlyZWNfbGVuID0gKHJlY19sZW4gJiA2NTUzMikgfCAoKHJlY19sZW4gJiAzKSA8PCAxNik7CisjaWYgMAorCQlwcmludGYoInJlY19sZW4gPSAlZCwgbmFtZV9sZW4gPSAlZFxuIiwgcmVjX2xlbiwgZGlyZW50LT5uYW1lX2xlbik7CisjZW5kaWYKKwkJaWYgKHJlY19sZW4gPCA4IHx8IChyZWNfbGVuICUgNCkgfHwKKwkJICAgIChwK3JlY19sZW4gPiBlbmQpKSB7CisJCQlwcmludGYoXygiQ29ycnVwdCBkaXJlY3RvcnkgYmxvY2sgJWxsdTogIgorCQkJCSAiYmFkIHJlY19sZW4gKCVkKVxuIiksCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmxrLCByZWNfbGVuKTsKKwkJCXJlY19sZW4gPSBlbmQgLSBwOworCQkJKHZvaWQpIGV4dDJmc19zZXRfcmVjX2xlbihmcywgcmVjX2xlbiwKKwkJCQkJKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSBkaXJlbnQpOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCQkJZGlyZW50LT5yZWNfbGVuID0gZXh0MmZzX3N3YWIxNihkaXJlbnQtPnJlY19sZW4pOworI2VuZGlmCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZGlyZW50LT5uYW1lX2xlbiArIDhVID4gcmVjX2xlbikgeworCQkJcHJpbnRmKF8oIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6ICIKKwkJCQkgImJhZCBuYW1lX2xlbiAoJWQpXG4iKSwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBibGssIGRpcmVudC0+bmFtZV9sZW4pOworCQkJZGlyZW50LT5uYW1lX2xlbiA9IHJlY19sZW4gLSA4OworCQkJY29udGludWU7CisJCX0KKwkJY3AgPSBwKzg7CisJCWxlbiA9IHJlY19sZW4gLSBkaXJlbnQtPm5hbWVfbGVuIC0gODsKKwkJaWYgKGxlbiA+IDApCisJCQltZW1zZXQoY3ArZGlyZW50LT5uYW1lX2xlbiwgMCwgbGVuKTsKKwkJaWYgKGRpcmVudC0+bmFtZV9sZW49PTEgJiYgY3BbMF0gPT0gJy4nKQorCQkJY29udGludWU7CisJCWlmIChkaXJlbnQtPm5hbWVfbGVuPT0yICYmIGNwWzBdID09ICcuJyAmJiBjcFsxXSA9PSAnLicpCisJCQljb250aW51ZTsKKworCQltZW1zZXQoY3AsICdBJywgZGlyZW50LT5uYW1lX2xlbik7CisJCWxlbiA9IGRpcmVudC0+bmFtZV9sZW47CisJCWlkID0gbmFtZV9pZFtsZW5dKys7CisJCXdoaWxlICgobGVuID4gMCkgJiYgKGlkID4gMCkpIHsKKwkJCSpjcCArPSBpZCAlIDI2OworCQkJaWQgPSBpZCAvIDI2OworCQkJY3ArKzsKKwkJCWxlbi0tOworCQl9CisJfQorfQorCitzdGF0aWMgY2hhciBnb3Rfc2lnaW50OworCitzdGF0aWMgdm9pZCBzaWdpbnRfaGFuZGxlcihpbnQgdW51c2VkIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlnb3Rfc2lnaW50ID0gMTsKKwlzaWduYWwgKFNJR0lOVCwgU0lHX0RGTCk7Cit9CisKKyNkZWZpbmUgY2FsY19wZXJjZW50KGEsIGIpICgoaW50KSAoKDEwMC4wICogKCgoZmxvYXQpIChhKSkgLyBcCisJCQkJCSAgICAgKChmbG9hdCkgKGIpKSkpICsgMC41KSkKKyNkZWZpbmUgY2FsY19yYXRlKHQsIGIsIGQpICgoKGZsb2F0KSh0KSAvICgoMTAyNCAqIDEwMjQpIC8gKGIpKSkgLyAoZCkpCisKK3N0YXRpYyBpbnQgcHJpbnRfcHJvZ3Jlc3MoYmxrNjRfdCBudW0sIGJsazY0X3QgdG90YWwpCit7CisJcmV0dXJuIGZwcmludGYoc3RkZXJyLCBfKCIlbGx1IC8gJWxsdSBibG9ja3MgKCVkJSUpIiksIG51bSwgdG90YWwsCisJCSAgICAgIGNhbGNfcGVyY2VudChudW0sIHRvdGFsKSk7Cit9CisKK3N0YXRpYyB2b2lkIG91dHB1dF9tZXRhX2RhdGFfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmQsIGludCBmbGFncykKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWJsazY0X3QJCWJsazsKKwljaGFyCQkqYnVmLCAqemVyb19idWY7CisJaW50CQlzcGFyc2UgPSAwOworCWJsazY0X3QJCXN0YXJ0ID0gMDsKKwlibGs2NF90CQlkaXN0YW5jZSA9IDA7CisJYmxrNjRfdAkJZW5kID0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCXRpbWVfdAkJbGFzdF91cGRhdGUgPSAwOworCXRpbWVfdAkJc3RhcnRfdGltZSA9IDA7CisJYmxrNjRfdAkJdG90YWxfd3JpdHRlbiA9IDA7CisJaW50CQlic2NvdW50ID0gMDsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZidWYpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVyIikpOworCQlleGl0KDEpOworCX0KKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbXplcm8oZnMtPmJsb2Nrc2l6ZSwgJnplcm9fYnVmKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlciIpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHNob3dfcHJvZ3Jlc3MpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIF8oIkNvcHlpbmcgIikpOworCQlic2NvdW50ID0gcHJpbnRfcHJvZ3Jlc3ModG90YWxfd3JpdHRlbiwgbWV0YV9ibG9ja3NfY291bnQpOworCQlmZmx1c2goc3RkZXJyKTsKKwkJbGFzdF91cGRhdGUgPSB0aW1lKE5VTEwpOworCQlzdGFydF90aW1lID0gdGltZShOVUxMKTsKKwl9CisJLyogd2hlbiBkb2luZyBhbiBpbiBwbGFjZSBtb3ZlIHRvIHRoZSByaWdodCwgeW91IGNhbid0IHN0YXJ0CisJICAgYXQgdGhlIGJlZ2lubmluZyBvciB5b3Ugd2lsbCBvdmVyd3JpdGUgZGF0YSwgc28gaW5zdGVhZAorCSAgIGRpdmlkZSB0aGUgZnMgdXAgaW50byBkaXN0YW5jZSBzaXplIGNodW5rcyBhbmQgd3JpdGUgdGhlbQorCSAgIGluIHJldmVyc2UuICovCisJaWYgKG1vdmVfbW9kZSAmJiBkZXN0X29mZnNldCA+IHNvdXJjZV9vZmZzZXQpIHsKKwkJZGlzdGFuY2UgPSAoZGVzdF9vZmZzZXQgLSBzb3VyY2Vfb2Zmc2V0KSAvIGZzLT5ibG9ja3NpemU7CisJCWlmIChkaXN0YW5jZSA8IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkKKwkJCXN0YXJ0ID0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpIC0gZGlzdGFuY2U7CisJfQorCWlmIChtb3ZlX21vZGUpCisJCXNpZ25hbCAoU0lHSU5ULCBzaWdpbnRfaGFuZGxlcik7Cittb3JlX2Jsb2NrczoKKwlpZiAoZGlzdGFuY2UpCisJCXNlZWtfc2V0KGZkLCAoc3RhcnQgKiBmcy0+YmxvY2tzaXplKSArIGRlc3Rfb2Zmc2V0KTsKKwlmb3IgKGJsayA9IHN0YXJ0OyBibGsgPCBlbmQ7IGJsaysrKSB7CisJCWlmIChnb3Rfc2lnaW50KSB7CisJCQlpZiAoZGlzdGFuY2UpIHsKKwkJCQkvKiBtb3ZpbmcgdG8gdGhlIHJpZ2h0ICovCisJCQkJaWYgKGRpc3RhbmNlID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKXx8CisJCQkJICAgIHN0YXJ0ID09IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtCisJCQkJCQlkaXN0YW5jZSkKKwkJCQkJa2lsbChnZXRwaWQoKSwgU0lHSU5UKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogbW92aW5nIHRvIHRoZSBsZWZ0ICovCisJCQkJaWYgKGJsayA8IChzb3VyY2Vfb2Zmc2V0IC0gZGVzdF9vZmZzZXQpIC8KKwkJCQkgICAgZnMtPmJsb2Nrc2l6ZSkKKwkJCQkJa2lsbChnZXRwaWQoKSwgU0lHSU5UKTsKKwkJCX0KKwkJCWlmIChzaG93X3Byb2dyZXNzKQorCQkJCWZwdXRjKCdccicsIHN0ZGVycik7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKwkJCQlfKCJTdG9wcGluZyBub3cgd2lsbCBkZXN0cm95IHRoZSBmaWxlc3lzdGVtLCAiCisJCQkJICJpbnRlcnJ1cHQgYWdhaW4gaWYgeW91IGFyZSBzdXJlXG4iKSk7CisJCQlpZiAoc2hvd19wcm9ncmVzcykgeworCQkJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBfKCJDb3B5aW5nICIpKTsKKwkJCQlic2NvdW50ID0gcHJpbnRfcHJvZ3Jlc3ModG90YWxfd3JpdHRlbiwKKwkJCQkJCQkgbWV0YV9ibG9ja3NfY291bnQpOworCQkJCWZmbHVzaChzdGRlcnIpOworCQkJfQorCisJCQlnb3Rfc2lnaW50ID0gMDsKKwkJfQorCQlpZiAoc2hvd19wcm9ncmVzcyAmJiBsYXN0X3VwZGF0ZSAhPSB0aW1lKE5VTEwpKSB7CisJCQl0aW1lX3QgZHVyYXRpb247CisJCQlsYXN0X3VwZGF0ZSA9IHRpbWUoTlVMTCk7CisJCQl3aGlsZSAoYnNjb3VudC0tKQorCQkJCWZwdXRjKCdcYicsIHN0ZGVycik7CisJCQlic2NvdW50ID0gcHJpbnRfcHJvZ3Jlc3ModG90YWxfd3JpdHRlbiwKKwkJCQkJCSBtZXRhX2Jsb2Nrc19jb3VudCk7CisJCQlkdXJhdGlvbiA9IHRpbWUoTlVMTCkgLSBzdGFydF90aW1lOworCQkJaWYgKGR1cmF0aW9uID4gNSAmJiB0b3RhbF93cml0dGVuKSB7CisJCQkJdGltZV90IGVzdCA9IChkdXJhdGlvbiAqIG1ldGFfYmxvY2tzX2NvdW50IC8KKwkJCQkJICAgICAgdG90YWxfd3JpdHRlbikgLSBkdXJhdGlvbjsKKwkJCQljaGFyIGJ1ZmZbMzBdOworCQkJCXN0cmZ0aW1lKGJ1ZmYsIDMwLCAiJVQiLCBnbXRpbWUoJmVzdCkpOworCQkJCWJzY291bnQgKz0KKwkJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQlfKCIgJXMgcmVtYWluaW5nIGF0ICUuMmYgTUIvcyIpLAorCQkJCQkJYnVmZiwgY2FsY19yYXRlKHRvdGFsX3dyaXR0ZW4sCisJCQkJCQkJCWZzLT5ibG9ja3NpemUsCisJCQkJCQkJCWR1cmF0aW9uKSk7CisJCQl9CisJCQlmZmx1c2ggKHN0ZGVycik7CisJCX0KKwkJaWYgKChibGsgPj0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spICYmCisJCSAgICBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKG1ldGFfYmxvY2tfbWFwLCBibGspKSB7CisJCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCBibGssIDEsIGJ1Zik7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwKKwkJCQkJXygiZXJyb3IgcmVhZGluZyBibG9jayAlbGx1IiksIGJsayk7CisJCQl9CisJCQl0b3RhbF93cml0dGVuKys7CisJCQlpZiAoc2NyYW1ibGVfYmxvY2tfbWFwICYmCisJCQkgICAgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihzY3JhbWJsZV9ibG9ja19tYXAsIGJsaykpCisJCQkJc2NyYW1ibGVfZGlyX2Jsb2NrKGZzLCBibGssIGJ1Zik7CisJCQlpZiAoKGZsYWdzICYgRTJJTUFHRV9DSEVDS19aRVJPX0ZMQUcpICYmCisJCQkgICAgY2hlY2tfemVyb19ibG9jayhidWYsIGZzLT5ibG9ja3NpemUpKQorCQkJCWdvdG8gc3BhcnNlX3dyaXRlOworCQkJaWYgKHNwYXJzZSkKKwkJCQlzZWVrX3JlbGF0aXZlKGZkLCBzcGFyc2UpOworCQkJc3BhcnNlID0gMDsKKwkJCWlmIChjaGVja19ibG9jayhmZCwgYnVmLCBjaGVja19idWYsIGZzLT5ibG9ja3NpemUpKSB7CisJCQkJc2Vla19yZWxhdGl2ZShmZCwgZnMtPmJsb2Nrc2l6ZSk7CisJCQkJc2tpcHBlZF9ibG9ja3MrKzsKKwkJCX0gZWxzZQorCQkJCWdlbmVyaWNfd3JpdGUoZmQsIGJ1ZiwgZnMtPmJsb2Nrc2l6ZSwgYmxrKTsKKwkJfSBlbHNlIHsKKwkJc3BhcnNlX3dyaXRlOgorCQkJaWYgKGZkID09IDEpIHsKKwkJCQlpZiAoIW5vcF9mbGFnKQorCQkJCQlnZW5lcmljX3dyaXRlKGZkLCB6ZXJvX2J1ZiwKKwkJCQkJCSAgICAgIGZzLT5ibG9ja3NpemUsIGJsayk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzcGFyc2UgKz0gZnMtPmJsb2Nrc2l6ZTsKKwkJCWlmIChzcGFyc2UgPiAxMDI0KjEwMjQpIHsKKwkJCQlzZWVrX3JlbGF0aXZlKGZkLCAxMDI0KjEwMjQpOworCQkJCXNwYXJzZSAtPSAxMDI0KjEwMjQ7CisJCQl9CisJCX0KKwl9CisJaWYgKGRpc3RhbmNlICYmIHN0YXJ0KSB7CisJCWlmIChzdGFydCA8IGRpc3RhbmNlKSB7CisJCQllbmQgPSBzdGFydDsKKwkJCXN0YXJ0ID0gMDsKKwkJfSBlbHNlIHsKKwkJCWVuZCAtPSBkaXN0YW5jZTsKKwkJCXN0YXJ0IC09IGRpc3RhbmNlOworCQkJaWYgKGVuZCA8IGRpc3RhbmNlKSB7CisJCQkJLyogcGFzdCBvdmVybGFwLCBkbyByZXN0IGluIG9uZSBnbyAqLworCQkJCWVuZCA9IHN0YXJ0OworCQkJCXN0YXJ0ID0gMDsKKwkJCX0KKwkJfQorCQlzcGFyc2UgPSAwOworCQlnb3RvIG1vcmVfYmxvY2tzOworCX0KKwlzaWduYWwgKFNJR0lOVCwgU0lHX0RGTCk7CisJaWYgKHNob3dfcHJvZ3Jlc3MpIHsKKwkJdGltZV90IGR1cmF0aW9uID0gdGltZShOVUxMKSAtIHN0YXJ0X3RpbWU7CisJCWNoYXIgYnVmZlszMF07CisJCWZwdXRjKCdccicsIHN0ZGVycik7CisJCXN0cmZ0aW1lKGJ1ZmYsIDMwLCAiJVQiLCBnbXRpbWUoJmR1cmF0aW9uKSk7CisJCWZwcmludGYoc3RkZXJyLCBfKCJDb3BpZWQgJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSBpbiAlcyAiKSwKKwkJCXRvdGFsX3dyaXR0ZW4sIG1ldGFfYmxvY2tzX2NvdW50LAorCQkJY2FsY19wZXJjZW50KHRvdGFsX3dyaXR0ZW4sIG1ldGFfYmxvY2tzX2NvdW50KSwgYnVmZik7CisJCWlmIChkdXJhdGlvbikKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJhdCAlLjJmIE1CL3MiKSwKKwkJCQljYWxjX3JhdGUodG90YWxfd3JpdHRlbiwgZnMtPmJsb2Nrc2l6ZSwgZHVyYXRpb24pKTsKKwkJZnB1dHMoIiAgICAgICBcbiIsIHN0ZGVycik7CisJfQorI2lmZGVmIEhBVkVfRlRSVU5DQVRFNjQKKwlpZiAoc3BhcnNlKSB7CisJCWV4dDJfbG9mZl90IG9mZnNldDsKKwkJaWYgKGRpc3RhbmNlKQorCQkJb2Zmc2V0ID0gc2Vla19zZXQoZmQsCisJCQkJCSAgZnMtPmJsb2Nrc2l6ZSAqIGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSArIGRlc3Rfb2Zmc2V0KTsKKwkJZWxzZQorCQkJb2Zmc2V0ID0gc2Vla19yZWxhdGl2ZShmZCwgc3BhcnNlKTsKKworCQlpZiAoZnRydW5jYXRlNjQoZmQsIG9mZnNldCkgPCAwKSB7CisJCQlzZWVrX3JlbGF0aXZlKGZkLCAtMSk7CisJCQlnZW5lcmljX3dyaXRlKGZkLCB6ZXJvX2J1ZiwgMSwgTk9fQkxLKTsKKwkJfQorCX0KKyNlbHNlCisJaWYgKHNwYXJzZSAmJiAhZGlzdGFuY2UpIHsKKwkJc2Vla19yZWxhdGl2ZShmZCwgc3BhcnNlLTEpOworCQlnZW5lcmljX3dyaXRlKGZkLCB6ZXJvX2J1ZiwgMSwgTk9fQkxLKTsKKwl9CisjZW5kaWYKKwlleHQyZnNfZnJlZV9tZW0oJnplcm9fYnVmKTsKKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfbDFfdGFibGUoc3RydWN0IGV4dDJfcWNvdzJfaW1hZ2UgKmltYWdlKQoreworCV9fdTY0ICpsMV90YWJsZTsKKwllcnJjb2RlX3QgcmV0OworCisJcmV0ID0gZXh0MmZzX2dldF9hcnJheXplcm8oaW1hZ2UtPmwxX3NpemUsIHNpemVvZihfX3U2NCksICZsMV90YWJsZSk7CisJaWYgKHJldCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0LCAiJXMiLAorCQkJXygid2hpbGUgYWxsb2NhdGluZyBsMSB0YWJsZSIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpbWFnZS0+bDFfdGFibGUgPSBsMV90YWJsZTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9sMl9jYWNoZShzdHJ1Y3QgZXh0Ml9xY293Ml9pbWFnZSAqaW1hZ2UpCit7CisJdW5zaWduZWQgaW50IGNvdW50LCBpOworCXN0cnVjdCBleHQyX3Fjb3cyX2wyX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgZXh0Ml9xY293Ml9sMl90YWJsZSAqdGFibGU7CisJZXJyY29kZV90IHJldDsKKworCXJldCA9IGV4dDJmc19nZXRfYXJyYXl6ZXJvKDEsIHNpemVvZihzdHJ1Y3QgZXh0Ml9xY293Ml9sMl9jYWNoZSksCisJCQkJICAgJmNhY2hlKTsKKwlpZiAocmV0KQorCQlnb3RvIGFsbG9jX2VycjsKKworCWNvdW50ID0gKGltYWdlLT5sMV9zaXplID4gTDJfQ0FDSEVfUFJFQUxMT0MpID8gTDJfQ0FDSEVfUFJFQUxMT0MgOgorCQkgaW1hZ2UtPmwxX3NpemU7CisKKwljYWNoZS0+Y291bnQgPSBjb3VudDsKKwljYWNoZS0+ZnJlZSA9IGNvdW50OworCWNhY2hlLT5uZXh0X29mZnNldCA9IGltYWdlLT5sMl9vZmZzZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlyZXQgPSBleHQyZnNfZ2V0X2FycmF5emVybygxLAorCQkJCXNpemVvZihzdHJ1Y3QgZXh0Ml9xY293Ml9sMl90YWJsZSksICZ0YWJsZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGFsbG9jX2VycjsKKworCQlyZXQgPSBleHQyZnNfZ2V0X2FycmF5emVybyhpbWFnZS0+bDJfc2l6ZSwKKwkJCQkJCSAgIHNpemVvZihfX3U2NCksICZ0YWJsZS0+ZGF0YSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGFsbG9jX2VycjsKKworCQl0YWJsZS0+bmV4dCA9IGNhY2hlLT5mcmVlX2hlYWQ7CisJCWNhY2hlLT5mcmVlX2hlYWQgPSB0YWJsZTsKKwl9CisKKwlpbWFnZS0+bDJfY2FjaGUgPSBjYWNoZTsKKwlyZXR1cm47CisKK2FsbG9jX2VycjoKKwljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0LCAiJXMiLCBfKCJ3aGlsZSBhbGxvY2F0aW5nIGwyIGNhY2hlIikpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyB2b2lkIHB1dF9sMl9jYWNoZShzdHJ1Y3QgZXh0Ml9xY293Ml9pbWFnZSAqaW1hZ2UpCit7CisJc3RydWN0IGV4dDJfcWNvdzJfbDJfY2FjaGUgKmNhY2hlID0gaW1hZ2UtPmwyX2NhY2hlOworCXN0cnVjdCBleHQyX3Fjb3cyX2wyX3RhYmxlICp0bXAsICp0YWJsZTsKKworCWlmICghY2FjaGUpCisJCXJldHVybjsKKworCXRhYmxlID0gY2FjaGUtPmZyZWVfaGVhZDsKKwljYWNoZS0+ZnJlZV9oZWFkID0gTlVMTDsKK2FnYWluOgorCXdoaWxlICh0YWJsZSkgeworCQl0bXAgPSB0YWJsZTsKKwkJdGFibGUgPSB0YWJsZS0+bmV4dDsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZ0bXAtPmRhdGEpOworCQlleHQyZnNfZnJlZV9tZW0oJnRtcCk7CisJfQorCisJaWYgKGNhY2hlLT5mcmVlICE9IGNhY2hlLT5jb3VudCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgXygiV2FybmluZzogVGhlcmUgYXJlIHN0aWxsIHRhYmxlcyBpbiAiCisJCQkJCSJ0aGUgY2FjaGUgd2hpbGUgcHV0dGluZyB0aGUgY2FjaGUsICIKKwkJCQkJImRhdGEgd2lsbCBiZSBsb3N0IHNvIHRoZSBpbWFnZSBtYXkgIgorCQkJCQkibm90IGJlIHZhbGlkLlxuIikpOworCQl0YWJsZSA9IGNhY2hlLT51c2VkX2hlYWQ7CisJCWNhY2hlLT51c2VkX2hlYWQgPSBOVUxMOworCQlnb3RvIGFnYWluOworCX0KKworCWV4dDJmc19mcmVlX21lbSgmY2FjaGUpOworfQorCitzdGF0aWMgaW50IGluaXRfcmVmY291bnQoc3RydWN0IGV4dDJfcWNvdzJfaW1hZ2UgKmltZywgYmxrNjRfdCB0YWJsZV9vZmZzZXQpCit7CisJc3RydWN0CWV4dDJfcWNvdzJfcmVmY291bnQJKnJlZjsKKwlibGs2NF90IHRhYmxlX2NsdXN0ZXJzOworCWVycmNvZGVfdCByZXQ7CisKKwlyZWYgPSAmKGltZy0+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+cmVmY291bnRfYmxvY2tfb2Zmc2V0KTsKKwlzZWVrX3NldChmZCwgcmVmLT5yZWZjb3VudF90YWJsZV9vZmZzZXQpOworCWdlbmVyaWNfd3JpdGUoZmQsIChjaGFyICopcmVmLT5yZWZjb3VudF90YWJsZSwKKwkJcmVmLT5yZWZjb3VudF90YWJsZV9jbHVzdGVycyA8PCBpbWctPmNsdXN0ZXJfYml0cywgTk9fQkxLKTsKKworCXNlZWtfc2V0KGZkLCByZWYtPnJlZmNvdW50X2Jsb2NrX29mZnNldCk7CisJZ2VuZXJpY193cml0ZShmZCwgKGNoYXIgKilyZWYtPnJlZmNvdW50X2Jsb2NrLCBpbWctPmNsdXN0ZXJfc2l6ZSwKKwkJICAgICAgTk9fQkxLKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb3V0cHV0X3Fjb3cyX21ldGFfZGF0YV9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsIGludCBmZCkKK3sKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlibGs2NF90CQkJYmxrLCBvZmZzZXQsIHNpemUsIGVuZDsKKwljaGFyCQkJKmJ1ZjsKKwlzdHJ1Y3QgZXh0Ml9xY293Ml9pbWFnZQkqaW1nOworCXVuc2lnbmVkIGludAkJaGVhZGVyX3NpemU7CisKKwkvKiBhbGxvY2F0ZSAgc3RydWN0IGV4dDJfcWNvdzJfaW1hZ2UgKi8KKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGV4dDJfcWNvdzJfaW1hZ2UpLCAmaW1nKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSBhbGxvY2F0aW5nIGV4dDJfcWNvdzJfaW1hZ2UiKSk7CisJCWV4aXQoMSk7CisJfQorCisJcmV0dmFsID0gaW5pdGlhbGl6ZV9xY293Ml9pbWFnZShmZCwgZnMsIGltZyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgaW5pdGlhbGl6aW5nIGV4dDJfcWNvdzJfaW1hZ2UiKSk7CisJCWV4aXQoMSk7CisJfQorCWhlYWRlcl9zaXplID0gYWxpZ25fb2Zmc2V0KHNpemVvZihzdHJ1Y3QgZXh0Ml9xY293Ml9oZHIpLAorCQkJCSAgIGltZy0+Y2x1c3Rlcl9zaXplKTsKKwl3cml0ZV9oZWFkZXIoZmQsIGltZy0+aGRyLCBzaXplb2Yoc3RydWN0IGV4dDJfcWNvdzJfaGRyKSwgaGVhZGVyX3NpemUpOworCisJLyogUmVmY291bnQgYWxsIHFjb3cyIHJlbGF0ZWQgbWV0YWRhdGEgdXAgdG8gcmVmY291bnRfYmxvY2tfb2Zmc2V0ICovCisJZW5kID0gaW1nLT5yZWZjb3VudC5yZWZjb3VudF9ibG9ja19vZmZzZXQ7CisJc2Vla19zZXQoZmQsIGVuZCk7CisJYmxrID0gZW5kICsgaW1nLT5jbHVzdGVyX3NpemU7CisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPD0gZW5kOyBvZmZzZXQgKz0gaW1nLT5jbHVzdGVyX3NpemUpIHsKKwkJaWYgKHVwZGF0ZV9yZWZjb3VudChmZCwgaW1nLCBvZmZzZXQsIGJsaykpIHsKKwkJCWJsayArPSBpbWctPmNsdXN0ZXJfc2l6ZTsKKwkJCS8qCisJCQkgKiBJZiB3ZSBjcmVhdGUgbmV3IHJlZmNvdW50IGJsb2NrLCB3ZSBuZWVkIHRvIHJlZmNvdW50CisJCQkgKiBpdCBhcyB3ZWxsLgorCQkJICovCisJCQllbmQgKz0gaW1nLT5jbHVzdGVyX3NpemU7CisJCX0KKwl9CisJc2Vla19zZXQoZmQsIG9mZnNldCk7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmYnVmKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlciIpKTsKKwkJZXhpdCgxKTsKKwl9CisJLyogV3JpdGUgcWNvdzIgZGF0YSBibG9ja3MgKi8KKwlmb3IgKGJsayA9IDA7IGJsayA8IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsgYmxrKyspIHsKKwkJaWYgKChibGsgPj0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spICYmCisJCSAgICBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKG1ldGFfYmxvY2tfbWFwLCBibGspKSB7CisJCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCBibGssIDEsIGJ1Zik7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwKKwkJCQkJXygiZXJyb3IgcmVhZGluZyBibG9jayAlbGx1IiksIGJsayk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc2NyYW1ibGVfYmxvY2tfbWFwICYmCisJCQkgICAgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihzY3JhbWJsZV9ibG9ja19tYXAsIGJsaykpCisJCQkJc2NyYW1ibGVfZGlyX2Jsb2NrKGZzLCBibGssIGJ1Zik7CisJCQlpZiAoY2hlY2tfemVyb19ibG9jayhidWYsIGZzLT5ibG9ja3NpemUpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAodXBkYXRlX3JlZmNvdW50KGZkLCBpbWcsIG9mZnNldCwgb2Zmc2V0KSkgeworCQkJCS8qIE1ha2Ugc3BhY2UgZm9yIGFub3RoZXIgcmVmY291bnQgYmxvY2sgKi8KKwkJCQlvZmZzZXQgKz0gaW1nLT5jbHVzdGVyX3NpemU7CisJCQkJc2Vla19zZXQoZmQsIG9mZnNldCk7CisJCQkJLyoKKwkJCQkgKiBXZSBoYXZlIGNyZWF0ZWQgdGhlIG5ldyByZWZjb3VudCBibG9jaywgdGhpcworCQkJCSAqIG1lYW5zIHRoYXQgd2UgbmVlZCB0byByZWZjb3VudCBpdCBhcyB3ZWxsLgorCQkJCSAqIFNvIHRoZSBwcmV2aW91cyB1cGRhdGVfcmVmY291bnQgcmVmY291bnRlZAorCQkJCSAqIHRoZSBibG9jayBpdHNlbGYgYW5kIG5vdyB3ZSBhcmUgZ29pbmcgdG8KKwkJCQkgKiBjcmVhdGUgcmVmY291bnQgZm9yIGRhdGEuIE5ldyByZWZjb3VudAorCQkJCSAqIGJsb2NrIHNob3VsZCBub3QgYmUgY3JlYXRlZCEKKwkJCQkgKi8KKwkJCQlpZiAodXBkYXRlX3JlZmNvdW50KGZkLCBpbWcsIG9mZnNldCwgb2Zmc2V0KSkgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKwkJCQkJCV8oIlByb2dyYW1taW5nIGVycm9yOiBtdWx0aXBsZSAiCisJCQkJCQkgICJzZXF1ZW50aWFsIHJlZmNvdW50IGJsb2NrcyAiCisJCQkJCQkgICJjcmVhdGVkIVxuIikpOworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCX0KKworCQkJZ2VuZXJpY193cml0ZShmZCwgYnVmLCBmcy0+YmxvY2tzaXplLCBibGspOworCisJCQlpZiAoYWRkX2wyX2l0ZW0oaW1nLCBibGssIG9mZnNldCwKKwkJCQkJb2Zmc2V0ICsgaW1nLT5jbHVzdGVyX3NpemUpKSB7CisJCQkJb2Zmc2V0ICs9IGltZy0+Y2x1c3Rlcl9zaXplOworCQkJCWlmICh1cGRhdGVfcmVmY291bnQoZmQsIGltZywgb2Zmc2V0LAorCQkJCQlvZmZzZXQgKyBpbWctPmNsdXN0ZXJfc2l6ZSkpIHsKKwkJCQkJb2Zmc2V0ICs9IGltZy0+Y2x1c3Rlcl9zaXplOworCQkJCQlpZiAodXBkYXRlX3JlZmNvdW50KGZkLCBpbWcsIG9mZnNldCwKKwkJCQkJCQkgICAgb2Zmc2V0KSkgeworCQkJCQkJZnByaW50ZihzdGRlcnIsICIlcyIsCisJCQlfKCJQcm9ncmFtbWluZyBlcnJvcjogbXVsdGlwbGUgc2VxdWVudGlhbCByZWZjb3VudCAiCisJCQkgICJibG9ja3MgY3JlYXRlZCFcbiIpKTsKKwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJCQl9CisJCQkJb2Zmc2V0ICs9IGltZy0+Y2x1c3Rlcl9zaXplOworCQkJCXNlZWtfc2V0KGZkLCBvZmZzZXQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlvZmZzZXQgKz0gaW1nLT5jbHVzdGVyX3NpemU7CisJCX0KKwl9CisJdXBkYXRlX3JlZmNvdW50KGZkLCBpbWcsIG9mZnNldCwgb2Zmc2V0KTsKKwlmbHVzaF9sMl9jYWNoZShpbWcpOworCXN5bmNfcmVmY291bnQoZmQsIGltZyk7CisKKwkvKiBXcml0ZSBsMV90YWJsZSovCisJc2Vla19zZXQoZmQsIGltZy0+bDFfb2Zmc2V0KTsKKwlzaXplID0gaW1nLT5sMV9zaXplICogc2l6ZW9mKF9fdTY0KTsKKwlnZW5lcmljX3dyaXRlKGZkLCAoY2hhciAqKWltZy0+bDFfdGFibGUsIHNpemUsIE5PX0JMSyk7CisKKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisJZnJlZV9xY293Ml9pbWFnZShpbWcpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9yYXdfaW1hZ2VfZmlsZShleHQyX2ZpbHN5cyBmcywgaW50IGZkLCBpbnQgdHlwZSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdAlwYjsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQkJaW5vZGU7CisJZXh0Ml9pbm9kZV9zY2FuCQkJc2NhbjsKKwlleHQyX2lub190CQkJaW5vOworCWVycmNvZGVfdAkJCXJldHZhbDsKKwljaGFyICoJCQkJYmxvY2tfYnVmOworCisJbWV0YV9ibG9ja3NfY291bnQgPSAwOworCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9ibG9ja19iaXRtYXAoZnMsIF8oImluLXVzZSBibG9jayBtYXAiKSwKKwkJCQkJICAgICAgJm1ldGFfYmxvY2tfbWFwKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBFMklNQUdFX1NDUkFNQkxFX0ZMQUcpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcChmcywgInNjcmFtYmxlIGJsb2NrIG1hcCIsCisJCQkJCQkgICAgICAmc2NyYW1ibGVfYmxvY2tfbWFwKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCQlfKCJ3aGlsZSBhbGxvY2F0aW5nIHNjcmFtYmxlIGJsb2NrIGJpdG1hcCIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwltYXJrX3RhYmxlX2Jsb2Nrcyhmcyk7CisJaWYgKHNob3dfcHJvZ3Jlc3MpCisJCXByaW50ZigiJXMiLCBfKCJTY2FubmluZyBpbm9kZXMuLi5cbiIpKTsKKworCXJldHZhbCA9IGV4dDJmc19vcGVuX2lub2RlX3NjYW4oZnMsIDAsICZzY2FuKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iKSk7CisJCWV4aXQoMSk7CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSAqIDMsICZibG9ja19idWYpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQlfKCJDYW4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIiKSk7CisJCWV4aXQoMSk7CisJfQorCisJdXNlX2lub2RlX3Nob3J0Y3V0cyhmcywgMSk7CisJc3Rhc2hlZF9pbm9kZSA9ICZpbm9kZTsKKwl3aGlsZSAoMSkgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X25leHRfaW5vZGUoc2NhbiwgJmlubywgJmlub2RlKTsKKwkJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0JBRF9CTE9DS19JTl9JTk9ERV9UQUJMRSkKKwkJCWNvbnRpbnVlOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJCV8oIndoaWxlIGdldHRpbmcgbmV4dCBpbm9kZSIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJaWYgKGlubyA9PSAwKQorCQkJYnJlYWs7CisJCWlmICghaW5vZGUuaV9saW5rc19jb3VudCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCAmaW5vZGUpKSB7CisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKG1ldGFfYmxvY2tfbWFwLAorCQkJCQlleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsICZpbm9kZSkpOworCQkJbWV0YV9ibG9ja3NfY291bnQrKzsKKwkJfQorCQlpZiAoIWV4dDJmc19pbm9kZV9oYXNfdmFsaWRfYmxvY2tzMihmcywgJmlub2RlKSkKKwkJCWNvbnRpbnVlOworCisJCXN0YXNoZWRfaW5vID0gaW5vOworCQlwYi5pbm8gPSBpbm87CisJCXBiLmlzX2RpciA9IExJTlVYX1NfSVNESVIoaW5vZGUuaV9tb2RlKTsKKwkJaWYgKExJTlVYX1NfSVNESVIoaW5vZGUuaV9tb2RlKSB8fAorCQkgICAgKExJTlVYX1NfSVNMTksoaW5vZGUuaV9tb2RlKSAmJgorCQkgICAgIGV4dDJmc19pbm9kZV9oYXNfdmFsaWRfYmxvY2tzMihmcywgJmlub2RlKSkgfHwKKwkJICAgIGlubyA9PSBmcy0+c3VwZXItPnNfam91cm5hbF9pbnVtKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIGlubywKKwkJCQkJQkxPQ0tfRkxBR19SRUFEX09OTFksIGJsb2NrX2J1ZiwKKwkJCQkJcHJvY2Vzc19kaXJfYmxvY2ssICZwYik7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwKKwkJCQkJXygid2hpbGUgaXRlcmF0aW5nIG92ZXIgaW5vZGUgJXUiKSwKKwkJCQkJaW5vKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKChpbm9kZS5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSB8fAorCQkJICAgIGlub2RlLmlfYmxvY2tbRVhUMl9JTkRfQkxPQ0tdIHx8CisJCQkgICAgaW5vZGUuaV9ibG9ja1tFWFQyX0RJTkRfQkxPQ0tdIHx8CisJCQkgICAgaW5vZGUuaV9ibG9ja1tFWFQyX1RJTkRfQkxPQ0tdIHx8IGFsbF9kYXRhKSB7CisJCQkJcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLAorCQkJCSAgICAgICBpbm8sIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLCBibG9ja19idWYsCisJCQkJICAgICAgIHByb2Nlc3NfZmlsZV9ibG9jaywgJnBiKTsKKwkJCQlpZiAocmV0dmFsKSB7CisJCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQkJCV8oIndoaWxlIGl0ZXJhdGluZyBvdmVyIGlub2RlICV1IiksIGlubyk7CisJCQkJCWV4aXQoMSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXVzZV9pbm9kZV9zaG9ydGN1dHMoZnMsIDApOworCisJaWYgKHR5cGUgJiBFMklNQUdFX1FDT1cyKQorCQlvdXRwdXRfcWNvdzJfbWV0YV9kYXRhX2Jsb2NrcyhmcywgZmQpOworCWVsc2UKKwkJb3V0cHV0X21ldGFfZGF0YV9ibG9ja3MoZnMsIGZkLCBmbGFncyk7CisKKwlleHQyZnNfZnJlZV9tZW0oJmJsb2NrX2J1Zik7CisJZXh0MmZzX2Nsb3NlX2lub2RlX3NjYW4oc2Nhbik7CisJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKG1ldGFfYmxvY2tfbWFwKTsKKwlpZiAodHlwZSAmIEUySU1BR0VfU0NSQU1CTEVfRkxBRykKKwkJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKHNjcmFtYmxlX2Jsb2NrX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIGluc3RhbGxfaW1hZ2UoY2hhciAqZGV2aWNlLCBjaGFyICppbWFnZV9mbiwgaW50IHR5cGUpCit7CisJZXJyY29kZV90IHJldHZhbDsKKwlleHQyX2ZpbHN5cyBmczsKKwlpbnQgb3Blbl9mbGFnID0gRVhUMl9GTEFHX0lNQUdFX0ZJTEUgfCBFWFQyX0ZMQUdfNjRCSVRTOworCWludCBmZCA9IDA7CisJaW9fbWFuYWdlcglpb19wdHI7CisJaW9fY2hhbm5lbAlpbzsKKworCWlmICh0eXBlKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJXygiUmF3IGFuZCBxY293MiBpbWFnZXMgY2Fubm90IGJlIGluc3RhbGxlZCIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfVEVTVElPX0RFQlVHCisJaWYgKGdldGVudigiVEVTVF9JT19GTEFHUyIpIHx8IGdldGVudigiVEVTVF9JT19CTE9DSyIpKSB7CisJCWlvX3B0ciA9IHRlc3RfaW9fbWFuYWdlcjsKKwkJdGVzdF9pb19iYWNraW5nX21hbmFnZXIgPSB1bml4X2lvX21hbmFnZXI7CisJfSBlbHNlCisjZW5kaWYKKwkJaW9fcHRyID0gdW5peF9pb19tYW5hZ2VyOworCisJcmV0dmFsID0gZXh0MmZzX29wZW4gKGltYWdlX2ZuLCBvcGVuX2ZsYWcsIDAsIDAsCisJCQkgICAgICBpb19wdHIsICZmcyk7CisgICAgICAgIGlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgXygid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiKSwKKwkJCWltYWdlX2ZuKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9iaXRtYXBzIChmcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLCBfKCJlcnJvciByZWFkaW5nIGJpdG1hcHMiKSk7CisJCWV4aXQoMSk7CisJfQorCisJZmQgPSBleHQyZnNfb3Blbl9maWxlKGltYWdlX2ZuLCBPX1JET05MWSwgMCk7CisJaWYgKGZkIDwgMCkgeworCQlwZXJyb3IoaW1hZ2VfZm4pOworCQlleGl0KDEpOworCX0KKworCXJldHZhbCA9IGlvX3B0ci0+b3BlbihkZXZpY2UsIElPX0ZMQUdfUlcsICZpbyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGRldmljZSwgMCwgIiVzIiwgXygid2hpbGUgb3BlbmluZyBkZXZpY2UgZmlsZSIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlleHQyZnNfcmV3cml0ZV90b19pbyhmcywgaW8pOworCisJc2Vla19zZXQoZmQsIGZzLT5pbWFnZV9oZWFkZXItPm9mZnNldF9pbm9kZSk7CisKKwlyZXR2YWwgPSBleHQyZnNfaW1hZ2VfaW5vZGVfcmVhZChmcywgZmQsIDApOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihpbWFnZV9mbiwgMCwgIiVzIiwKKwkJCV8oIndoaWxlIHJlc3RvcmluZyB0aGUgaW1hZ2UgdGFibGUiKSk7CisJCWV4aXQoMSk7CisJfQorCisJY2xvc2UoZmQpOworCWV4dDJmc19jbG9zZV9mcmVlKCZmcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXh0Ml9xY293Ml9oZHIgKmNoZWNrX3Fjb3cyX2ltYWdlKGludCAqZmQsIGNoYXIgKm5hbWUpCit7CisKKwkqZmQgPSBleHQyZnNfb3Blbl9maWxlKG5hbWUsIE9fUkRPTkxZLCAwNjAwKTsKKwlpZiAoKmZkIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gcWNvdzJfcmVhZF9oZWFkZXIoKmZkKTsKK30KKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCit7CisJaW50IGM7CisJZXJyY29kZV90IHJldHZhbDsKKwlleHQyX2ZpbHN5cyBmczsKKwljaGFyICppbWFnZV9mbiwgb2Zmc2V0X29wdFs2NF07CisJc3RydWN0IGV4dDJfcWNvdzJfaGRyICpoZWFkZXIgPSBOVUxMOworCWludCBvcGVuX2ZsYWcgPSBFWFQyX0ZMQUdfNjRCSVRTOworCWludCBpbWdfdHlwZSA9IDA7CisJaW50IGZsYWdzID0gMDsKKwlpbnQgbW91bnRfZmxhZ3MgPSAwOworCWludCBxY293Ml9mZCA9IDA7CisJaW50IGZkID0gMDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaWdub3JlX3J3X21vdW50ID0gMDsKKwlpbnQgY2hlY2sgPSAwOworCXN0cnVjdCBzdGF0IHN0OworCisjaWZkZWYgRU5BQkxFX05MUworCXNldGxvY2FsZShMQ19NRVNTQUdFUywgIiIpOworCXNldGxvY2FsZShMQ19DVFlQRSwgIiIpOworCWJpbmR0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSwgTE9DQUxFRElSKTsKKwl0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSk7CisJc2V0X2NvbV9lcnJfZ2V0dGV4dChnZXR0ZXh0KTsKKyNlbmRpZgorCWZwcmludGYgKHN0ZGVyciwgImUyaW1hZ2UgJXMgKCVzKVxuIiwgRTJGU1BST0dTX1ZFUlNJT04sCisJCSBFMkZTUFJPR1NfREFURSk7CisJaWYgKGFyZ2MgJiYgKmFyZ3YpCisJCXByb2dyYW1fbmFtZSA9ICphcmd2OworCWFkZF9lcnJvcl90YWJsZSgmZXRfZXh0Ml9lcnJvcl90YWJsZSk7CisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJucnNJUWFmbzpPOnBjIikpICE9IEVPRikKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ0knOgorCQkJZmxhZ3MgfD0gRTJJTUFHRV9JTlNUQUxMX0ZMQUc7CisJCQlicmVhazsKKwkJY2FzZSAnUSc6CisJCQlpZiAoaW1nX3R5cGUpCisJCQkJdXNhZ2UoKTsKKwkJCWltZ190eXBlIHw9IEUySU1BR0VfUUNPVzI7CisJCQlicmVhazsKKwkJY2FzZSAncic6CisJCQlpZiAoaW1nX3R5cGUpCisJCQkJdXNhZ2UoKTsKKwkJCWltZ190eXBlIHw9IEUySU1BR0VfUkFXOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJZmxhZ3MgfD0gRTJJTUFHRV9TQ1JBTUJMRV9GTEFHOworCQkJYnJlYWs7CisJCWNhc2UgJ2EnOgorCQkJYWxsX2RhdGEgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ2YnOgorCQkJaWdub3JlX3J3X21vdW50ID0gMTsKKwkJCWJyZWFrOworCQljYXNlICduJzoKKwkJCW5vcF9mbGFnID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdvJzoKKwkJCXNvdXJjZV9vZmZzZXQgPSBzdHJ0b3VsbChvcHRhcmcsIE5VTEwsIDApOworCQkJYnJlYWs7CisJCWNhc2UgJ08nOgorCQkJZGVzdF9vZmZzZXQgPSBzdHJ0b3VsbChvcHRhcmcsIE5VTEwsIDApOworCQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQkJc2hvd19wcm9ncmVzcyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnYyc6CisJCQljaGVjayA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKCk7CisJCX0KKwlpZiAob3B0aW5kID09IGFyZ2MgLSAxICYmCisJICAgIChzb3VyY2Vfb2Zmc2V0IHx8IGRlc3Rfb2Zmc2V0KSkKKwkJICAgIG1vdmVfbW9kZSA9IDE7CisJZWxzZSBpZiAob3B0aW5kICE9IGFyZ2MgLSAyICkKKwkJdXNhZ2UoKTsKKworCWlmIChhbGxfZGF0YSAmJiAhaW1nX3R5cGUpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsIF8oIi1hIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkICIKKwkJCQkJCSAid2l0aCByYXcgb3IgUUNPVzIgaW1hZ2VzLiIpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKChzb3VyY2Vfb2Zmc2V0IHx8IGRlc3Rfb2Zmc2V0KSAmJiBpbWdfdHlwZSAhPSBFMklNQUdFX1JBVykgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCV8oIk9mZnNldHMgYXJlIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIikpOworCQlleGl0KDEpOworCX0KKwlpZiAobW92ZV9tb2RlICYmIGltZ190eXBlICE9IEUySU1BR0VfUkFXKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJXygiTW92ZSBtb2RlIGlzIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIikpOworCQlleGl0KDEpOworCX0KKwlpZiAobW92ZV9tb2RlICYmICFhbGxfZGF0YSkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCV8oIk1vdmUgbW9kZSByZXF1aXJlcyBhbGwgZGF0YSBtb2RlLiIpKTsKKwkJZXhpdCgxKTsKKwl9CisJZGV2aWNlX25hbWUgPSBhcmd2W29wdGluZF07CisJaWYgKG1vdmVfbW9kZSkKKwkJaW1hZ2VfZm4gPSBkZXZpY2VfbmFtZTsKKwllbHNlIGltYWdlX2ZuID0gYXJndltvcHRpbmQrMV07CisKKwlyZXR2YWwgPSBleHQyZnNfY2hlY2tfaWZfbW91bnRlZChkZXZpY2VfbmFtZSwgJm1vdW50X2ZsYWdzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsIF8oImNoZWNraW5nIGlmIG1vdW50ZWQiKSk7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKGltZ190eXBlICYmICFpZ25vcmVfcndfbW91bnQgJiYKKwkgICAgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKSAmJgorCSAgICEobW91bnRfZmxhZ3MgJiBFWFQyX01GX1JFQURPTkxZKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgXygiXG5SdW5uaW5nIGUyaW1hZ2Ugb24gYSBSL1cgbW91bnRlZCAiCisJCQkiZmlsZXN5c3RlbSBjYW4gcmVzdWx0IGluIGFuXG4iCisJCQkiaW5jb25zaXN0ZW50IGltYWdlIHdoaWNoIHdpbGwgbm90IGJlIHVzZWZ1bCAiCisJCQkiZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiIKKwkJCSJVc2UgLWYgb3B0aW9uIGlmIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGF0LlxuIikpOworCQlleGl0KDEpOworCX0KKworCWlmIChmbGFncyAmIEUySU1BR0VfSU5TVEFMTF9GTEFHKSB7CisJCWluc3RhbGxfaW1hZ2UoZGV2aWNlX25hbWUsIGltYWdlX2ZuLCBpbWdfdHlwZSk7CisJCWV4aXQgKDApOworCX0KKworCWlmIChpbWdfdHlwZSAmIEUySU1BR0VfUkFXKSB7CisJCWhlYWRlciA9IGNoZWNrX3Fjb3cyX2ltYWdlKCZxY293Ml9mZCwgZGV2aWNlX25hbWUpOworCQlpZiAoaGVhZGVyKSB7CisJCQlmbGFncyB8PSBFMklNQUdFX0lTX1FDT1cyX0ZMQUc7CisJCQlnb3RvIHNraXBfZGV2aWNlOworCQl9CisJfQorCXNwcmludGYob2Zmc2V0X29wdCwgIm9mZnNldD0lbGx1Iiwgc291cmNlX29mZnNldCk7CisJcmV0dmFsID0gZXh0MmZzX29wZW4yKGRldmljZV9uYW1lLCBvZmZzZXRfb3B0LCBvcGVuX2ZsYWcsIDAsIDAsCisJCQkgICAgICB1bml4X2lvX21hbmFnZXIsICZmcyk7CisgICAgICAgIGlmIChyZXR2YWwpIHsKKwkJY29tX2VyciAocHJvZ3JhbV9uYW1lLCByZXR2YWwsIF8oIndoaWxlIHRyeWluZyB0byBvcGVuICVzIiksCisJCQkgZGV2aWNlX25hbWUpOworCQlmcHV0cyhfKCJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIpLCBzdGRvdXQpOworCQlleGl0KDEpOworCX0KKworc2tpcF9kZXZpY2U6CisJaWYgKHN0cmNtcChpbWFnZV9mbiwgIi0iKSA9PSAwKQorCQlmZCA9IDE7CisJZWxzZSB7CisJCWludCBvX2ZsYWdzID0gT19DUkVBVHxPX1JEV1I7CisKKwkJaWYgKGltZ190eXBlICE9IEUySU1BR0VfUkFXKQorCQkJb19mbGFncyB8PSBPX1RSVU5DOworCQlpZiAoYWNjZXNzKGltYWdlX2ZuLCBGX09LKSAhPSAwKQorCQkJZmxhZ3MgfD0gRTJJTUFHRV9DSEVDS19aRVJPX0ZMQUc7CisJCWZkID0gZXh0MmZzX29wZW5fZmlsZShpbWFnZV9mbiwgb19mbGFncywgMDYwMCk7CisJCWlmIChmZCA8IDApIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnJubywKKwkJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLCBpbWFnZV9mbik7CisJCQlleGl0KDEpOworCQl9CisJfQorCWlmIChkZXN0X29mZnNldCkKKwkJc2Vla19zZXQoZmQsIGRlc3Rfb2Zmc2V0KTsKKworCWlmICgoaW1nX3R5cGUgJiBFMklNQUdFX1FDT1cyKSAmJiAoZmQgPT0gMSkpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQlfKCJRQ09XMiBpbWFnZSBjYW4gbm90IGJlIHdyaXR0ZW4gdG8gdGhlIHN0ZG91dCFcbiIpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKGZkICE9IDEpIHsKKwkJaWYgKGZzdGF0KGZkLCAmc3QpKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCQlfKCJDYW4gbm90IHN0YXQgb3V0cHV0XG4iKSk7CisJCQlleGl0KDEpOworCQl9CisJCWlmIChTX0lTQkxLKHN0LnN0X21vZGUpKQorCQkJb3V0cHV0X2lzX2JsayA9IDE7CisJfQorCWlmIChmbGFncyAmIEUySU1BR0VfSVNfUUNPVzJfRkxBRykgeworCQlyZXQgPSBxY293Ml93cml0ZV9yYXdfaW1hZ2UocWNvdzJfZmQsIGZkLCBoZWFkZXIpOworCQlpZiAocmV0KSB7CisJCQlpZiAocmV0ID09IC1RQ09XX0NPTVBSRVNTRUQpCisJCQkJZnByaW50ZihzdGRlcnIsIF8oIkltYWdlICglcykgaXMgY29tcHJlc3NlZFxuIiksCisJCQkJCWltYWdlX2ZuKTsKKwkJCWlmIChyZXQgPT0gLVFDT1dfRU5DUllQVEVEKQorCQkJCWZwcmludGYoc3RkZXJyLCBfKCJJbWFnZSAoJXMpIGlzIGVuY3J5cHRlZFxuIiksCisJCQkJCWltYWdlX2ZuKTsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXQsCisJCQkJXygid2hpbGUgdHJ5aW5nIHRvIGNvbnZlcnQgcWNvdzIgaW1hZ2UiCisJCQkJICAiICglcykgaW50byByYXcgaW1hZ2UgKCVzKSIpLAorCQkJCWRldmljZV9uYW1lLCBpbWFnZV9mbik7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNoZWNrKSB7CisJCWlmIChpbWdfdHlwZSAhPSBFMklNQUdFX1JBVykgeworCQkJZnByaW50ZihzdGRlcnIsICIlcyIsIF8oIlRoZSAtYyBvcHRpb24gb25seSBzdXBwb3J0ZWQgIgorCQkJCQkJImluIHJhdyBtb2RlXG4iKSk7CisJCQlleGl0KDEpOworCQl9CisJCWlmIChmZCA9PSAxKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgXygiVGhlIC1jIG9wdGlvbiBub3Qgc3VwcG9ydGVkICIKKwkJCQkJCSJ3aGVuIHdyaXRpbmcgdG8gc3Rkb3V0XG4iKSk7CisJCQlleGl0KDEpOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZjaGVja19idWYpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJCV8oIndoaWxlIGFsbG9jYXRpbmcgY2hlY2tfYnVmIikpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlpZiAoc2hvd19wcm9ncmVzcyAmJiAoaW1nX3R5cGUgIT0gRTJJTUFHRV9SQVcpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorCQkJXygiVGhlIC1wIG9wdGlvbiBvbmx5IHN1cHBvcnRlZCBpbiByYXcgbW9kZVxuIikpOworCQlleGl0KDEpOworCX0KKwlpZiAoaW1nX3R5cGUpCisJCXdyaXRlX3Jhd19pbWFnZV9maWxlKGZzLCBmZCwgaW1nX3R5cGUsIGZsYWdzKTsKKwllbHNlCisJCXdyaXRlX2ltYWdlX2ZpbGUoZnMsIGZkKTsKKworCWV4dDJmc19jbG9zZV9mcmVlKCZmcyk7CisJaWYgKGNoZWNrKQorCQlwcmludGYoXygiJWQgYmxvY2tzIGFscmVhZHkgY29udGFpbmVkIHRoZSBkYXRhIHRvIGJlIGNvcGllZFxuIiksCisJCSAgICAgICBza2lwcGVkX2Jsb2Nrcyk7CisKK291dDoKKwlpZiAoaGVhZGVyKQorCQlmcmVlKGhlYWRlcik7CisJaWYgKHFjb3cyX2ZkKQorCQljbG9zZShxY293Ml9mZCk7CisJcmVtb3ZlX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbWlzYy9lMmluaXRyZF9oZWxwZXIuYyBiL21pc2MvZTJpbml0cmRfaGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1NzE2ZAotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvZTJpbml0cmRfaGVscGVyLmMKQEAgLTAsMCArMSwzOTcgQEAKKy8qCisgKiBlMmluaXRyZF9oZWxwZXIuYyAtIEdldCB0aGUgZmlsZXN5c3RlbSB0YWJsZQorICoKKyAqIENvcHlyaWdodCAyMDA0IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHV0aW1lLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBpbnQgb3B0aW5kOworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisjaW5jbHVkZSAiYmxraWQvYmxraWQuaCIKKworI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKyNpbmNsdWRlICJubHMtZW5hYmxlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogcHJvZ3JhbV9uYW1lID0gImUyaW5pdHJkX2hlbHBlciI7CitzdGF0aWMgY2hhciAqIGRldmljZV9uYW1lOworc3RhdGljIGludCBvcGVuX2ZsYWc7CitzdGF0aWMgaW50IHJvb3RfdHlwZTsKK3N0YXRpYyBibGtpZF9jYWNoZSBjYWNoZSA9IE5VTEw7CisKK3N0cnVjdCBtZW1fZmlsZSB7CisJY2hhcgkqYnVmOworCWludAlzaXplOworCWludAlwdHI7Cit9OworCitzdHJ1Y3QgZnNfaW5mbyB7CisJY2hhciAgKmRldmljZTsKKwljaGFyICAqbW91bnRwdDsKKwljaGFyICAqdHlwZTsKKwljaGFyICAqb3B0czsKKwlpbnQgICBmcmVxOworCWludCAgIHBhc3NubzsKKwlpbnQgICBmbGFnczsKKwlzdHJ1Y3QgZnNfaW5mbyAqbmV4dDsKK307CisKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsCisJCV8oIlVzYWdlOiAlcyAtciBkZXZpY2VcbiIpLCBwcm9ncmFtX25hbWUpOworCWV4aXQgKDEpOworfQorCitzdGF0aWMgZXJyY29kZV90IGdldF9maWxlKGV4dDJfZmlsc3lzIGZzLCBjb25zdCBjaGFyICogZmlsZW5hbWUsCisJCSAgIHN0cnVjdCBtZW1fZmlsZSAqcmV0X2ZpbGUpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwljaGFyIAkJKmJ1ZjsKKwlleHQyX2ZpbGVfdAllMl9maWxlID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQJZ290OworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCWV4dDJfaW5vX3QJaW5vOworCisJcmV0X2ZpbGUtPmJ1ZiA9IDA7CisJcmV0X2ZpbGUtPnNpemUgPSAwOworCXJldF9maWxlLT5wdHIgPSAwOworCisJcmV0dmFsID0gZXh0MmZzX25hbWVpKGZzLCBFWFQyX1JPT1RfSU5PLCBFWFQyX1JPT1RfSU5PLAorCQkJICAgICAgZmlsZW5hbWUsICZpbm8pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgaW5vLCAmaW5vZGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoaW5vZGUuaV9zaXplX2hpZ2ggfHwgKGlub2RlLmlfc2l6ZSA+IDY1NTM2KSkKKwkJcmV0dXJuIEVGQklHOworCisJYnVmID0gbWFsbG9jKGlub2RlLmlfc2l6ZSArIDEpOworCWlmICghYnVmKQorCQlyZXR1cm4gRU5PTUVNOworCW1lbXNldChidWYsIDAsIGlub2RlLmlfc2l6ZSsxKTsKKworCXJldHZhbCA9IGV4dDJmc19maWxlX29wZW4oZnMsIGlubywgMCwgJmUyX2ZpbGUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCisJcmV0dmFsID0gZXh0MmZzX2ZpbGVfcmVhZChlMl9maWxlLCBidWYsIGlub2RlLmlfc2l6ZSwgJmdvdCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlyZXR2YWwgPSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCXJldF9maWxlLT5idWYgPSBidWY7CisJcmV0X2ZpbGUtPnNpemUgPSAoaW50KSBnb3Q7CisJcmV0dXJuIDA7CisKK2Vycm91dDoKKwlmcmVlKGJ1Zik7CisJaWYgKGUyX2ZpbGUpCisJCWV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfbGluZShzdHJ1Y3QgbWVtX2ZpbGUgKmZpbGUpCit7CisJY2hhcgkqY3AsICpyZXQ7CisJaW50CXMgPSAwOworCisJY3AgPSBmaWxlLT5idWYgKyBmaWxlLT5wdHI7CisJd2hpbGUgKCpjcCAmJiAqY3AgIT0gJ1xuJykgeworCQljcCsrOworCQlzKys7CisJfQorCXJldCA9IG1hbGxvYyhzKzEpOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKwlyZXRbc109MDsKKwltZW1jcHkocmV0LCBmaWxlLT5idWYgKyBmaWxlLT5wdHIsIHMpOworCXdoaWxlICgqY3AgJiYgKCpjcCA9PSAnXG4nIHx8ICpjcCA9PSAnXHInKSkgeworCQljcCsrOworCQlzKys7CisJfQorCWZpbGUtPnB0ciArPSBzOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWVtX2ZpbGVfZW9mKHN0cnVjdCBtZW1fZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gKGZpbGUtPnB0ciA+PSBmaWxlLT5zaXplKTsKK30KKworLyoKKyAqIGZzdGFiIHBhcnNpbmcgY29kZQorICovCitzdGF0aWMgY2hhciAqc3RyaW5nX2NvcHkoY29uc3QgY2hhciAqcykKK3sKKwljaGFyCSpyZXQ7CisKKwlpZiAoIXMpCisJCXJldHVybiAwOworCXJldCA9IG1hbGxvYyhzdHJsZW4ocykrMSk7CisJaWYgKHJldCkKKwkJc3RyY3B5KHJldCwgcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNoYXIgKnNraXBfb3Zlcl9ibGFuayhjaGFyICpjcCkKK3sKKwl3aGlsZSAoKmNwICYmIGlzc3BhY2UoKmNwKSkKKwkJY3ArKzsKKwlyZXR1cm4gY3A7Cit9CisKK3N0YXRpYyBjaGFyICpza2lwX292ZXJfd29yZChjaGFyICpjcCkKK3sKKwl3aGlsZSAoKmNwICYmICFpc3NwYWNlKCpjcCkpCisJCWNwKys7CisJcmV0dXJuIGNwOworfQorCitzdGF0aWMgY2hhciAqcGFyc2Vfd29yZChjaGFyICoqYnVmKQoreworCWNoYXIgKndvcmQsICpuZXh0OworCisJd29yZCA9ICpidWY7CisJaWYgKCp3b3JkID09IDApCisJCXJldHVybiAwOworCisJd29yZCA9IHNraXBfb3Zlcl9ibGFuayh3b3JkKTsKKwluZXh0ID0gc2tpcF9vdmVyX3dvcmQod29yZCk7CisJaWYgKCpuZXh0KQorCQkqbmV4dCsrID0gMDsKKwkqYnVmID0gbmV4dDsKKwlyZXR1cm4gd29yZDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZXNjYXBlKGNoYXIgKndvcmQpCit7CisJY2hhcgkqcCwgKnE7CisJaW50CWFjLCBpOworCisJaWYgKCF3b3JkKQorCQlyZXR1cm47CisKKwlmb3IgKHAgPSB3b3JkLCBxID0gd29yZDsgKnA7IHArKywgcSsrKSB7CisJCSpxID0gKnA7CisJCWlmICgqcCAhPSAnXFwnKQorCQkJY29udGludWU7CisJCWlmICgqKytwID09IDApCisJCQlicmVhazsKKwkJaWYgKCpwID09ICd0JykgeworCQkJKnEgPSAnXHQnOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCpwID09ICduJykgeworCQkJKnEgPSAnXG4nOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFpc2RpZ2l0KCpwKSkgeworCQkJKnEgPSAqcDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWFjID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKywgcCsrKSB7CisJCQlpZiAoIWlzZGlnaXQoKnApKQorCQkJCWJyZWFrOworCQkJYWMgPSAoYWMgKiA4KSArICgqcCAtICcwJyk7CisJCX0KKwkJKnEgPSBhYzsKKwkJcC0tOworCX0KKwkqcSA9IDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZnN0YWJfbGluZShjaGFyICpsaW5lLCBzdHJ1Y3QgZnNfaW5mbyAqZnMpCit7CisJY2hhcgkqZGV2LCAqZGV2aWNlLCAqbW50cG50LCAqdHlwZSwgKm9wdHMsICpmcmVxLCAqcGFzc25vLCAqY3A7CisKKwlpZiAoKGNwID0gc3RyY2hyKGxpbmUsICcjJykpKQorCQkqY3AgPSAwOwkvKiBJZ25vcmUgZXZlcnl0aGluZyBhZnRlciB0aGUgY29tbWVudCBjaGFyICovCisJY3AgPSBsaW5lOworCisJZGV2aWNlID0gcGFyc2Vfd29yZCgmY3ApOworCW1udHBudCA9IHBhcnNlX3dvcmQoJmNwKTsKKwl0eXBlID0gcGFyc2Vfd29yZCgmY3ApOworCW9wdHMgPSBwYXJzZV93b3JkKCZjcCk7CisJZnJlcSA9IHBhcnNlX3dvcmQoJmNwKTsKKwlwYXNzbm8gPSBwYXJzZV93b3JkKCZjcCk7CisKKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuIC0xOwkvKiBBbGxvdyBibGFuayBsaW5lcyAqLworCisJaWYgKCFtbnRwbnQgfHwgIXR5cGUpCisJCXJldHVybiAtMTsKKworCXBhcnNlX2VzY2FwZShkZXZpY2UpOworCXBhcnNlX2VzY2FwZShtbnRwbnQpOworCXBhcnNlX2VzY2FwZSh0eXBlKTsKKwlwYXJzZV9lc2NhcGUob3B0cyk7CisJcGFyc2VfZXNjYXBlKGZyZXEpOworCXBhcnNlX2VzY2FwZShwYXNzbm8pOworCisJZGV2ID0gYmxraWRfZ2V0X2Rldm5hbWUoY2FjaGUsIGRldmljZSwgTlVMTCk7CisJaWYgKGRldikKKwkJZGV2aWNlID0gZGV2OworCisJaWYgKHN0cmNocih0eXBlLCAnLCcpKQorCQl0eXBlID0gMDsKKworCWZzLT5kZXZpY2UgPSBzdHJpbmdfY29weShkZXZpY2UpOworCWZzLT5tb3VudHB0ID0gc3RyaW5nX2NvcHkobW50cG50KTsKKwlmcy0+dHlwZSA9IHN0cmluZ19jb3B5KHR5cGUpOworCWZzLT5vcHRzID0gc3RyaW5nX2NvcHkob3B0cyA/IG9wdHMgOiAiIik7CisJZnMtPmZyZXEgPSBmcmVxID8gYXRvaShmcmVxKSA6IC0xOworCWZzLT5wYXNzbm8gPSBwYXNzbm8gPyBhdG9pKHBhc3NubykgOiAtMTsKKwlmcy0+ZmxhZ3MgPSAwOworCWZzLT5uZXh0ID0gTlVMTDsKKworCWZyZWUoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2ZzdGFiX2xpbmUoc3RydWN0IGZzX2luZm8gKmZzKQoreworCWlmIChmcy0+ZGV2aWNlKQorCQlmcy0+ZGV2aWNlID0gMDsKKwlpZiAoZnMtPm1vdW50cHQpCisJCWZzLT5tb3VudHB0ID0gMDsKKwlpZiAoZnMtPnR5cGUpCisJCWZzLT50eXBlID0gMDsKKwlpZiAoZnMtPm9wdHMpCisJCWZzLT5vcHRzID0gMDsKKwltZW1zZXQoZnMsIDAsIHNpemVvZihzdHJ1Y3QgZnNfaW5mbykpOworfQorCisKK3N0YXRpYyB2b2lkIFBSUyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGM7CisKKyNpZmRlZiBFTkFCTEVfTkxTCisJc2V0bG9jYWxlKExDX01FU1NBR0VTLCAiIik7CisJc2V0bG9jYWxlKExDX0NUWVBFLCAiIik7CisJYmluZHRleHRkb21haW4oTkxTX0NBVF9OQU1FLCBMT0NBTEVESVIpOworCXRleHRkb21haW4oTkxTX0NBVF9OQU1FKTsKKwlzZXRfY29tX2Vycl9nZXR0ZXh0KGdldHRleHQpOworI2VuZGlmCisKKwl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgInJ2IikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAncic6CisJCQlyb290X3R5cGUrKzsKKwkJCWJyZWFrOworCisJCWNhc2UgJ3YnOgorCQkJcHJpbnRmKCIlcyAlcyAoJXMpXG4iLCBwcm9ncmFtX25hbWUsCisJCQkgICAgICAgRTJGU1BST0dTX1ZFUlNJT04sIEUyRlNQUk9HU19EQVRFKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2UoKTsKKwkJfQorCX0KKwlpZiAob3B0aW5kIDwgYXJnYyAtIDEgfHwgb3B0aW5kID09IGFyZ2MpCisJCXVzYWdlKCk7CisJZGV2aWNlX25hbWUgPSBibGtpZF9nZXRfZGV2bmFtZShOVUxMLCBhcmd2W29wdGluZF0sIE5VTEwpOworCWlmICghZGV2aWNlX25hbWUpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsIF8oIlVuYWJsZSB0byByZXNvbHZlICclcyciKSwKKwkJCWFyZ3Zbb3B0aW5kXSk7CisJCWV4aXQoMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBnZXRfcm9vdF90eXBlKGV4dDJfZmlsc3lzIGZzKQoreworCWVycmNvZGVfdCByZXR2YWw7CisJc3RydWN0IG1lbV9maWxlIGZpbGU7CisJY2hhciAJCSpidWY7CisJc3RydWN0IGZzX2luZm8gZnNfaW5mbzsKKwlpbnQJCXJldDsKKworCXJldHZhbCA9IGdldF9maWxlKGZzLCAiL2V0Yy9mc3RhYiIsICZmaWxlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICJjb3VsZG4ndCBvcGVuIC9ldGMvZnN0YWIiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwl3aGlsZSAoIW1lbV9maWxlX2VvZigmZmlsZSkpIHsKKwkJYnVmID0gZ2V0X2xpbmUoJmZpbGUpOworCQlpZiAoIWJ1ZikKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IHBhcnNlX2ZzdGFiX2xpbmUoYnVmLCAmZnNfaW5mbyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBuZXh0X2xpbmU7CisKKwkJaWYgKCFzdHJjbXAoZnNfaW5mby5tb3VudHB0LCAiLyIpKQorCQkJcHJpbnRmKCIlc1xuIiwgZnNfaW5mby50eXBlKTsKKworCQlmcmVlX2ZzdGFiX2xpbmUoJmZzX2luZm8pOworCisJbmV4dF9saW5lOgorCQlmcmVlKGJ1Zik7CisJfQorfQorCisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKiBhcmd2KQoreworCWVycmNvZGVfdCByZXR2YWw7CisJZXh0Ml9maWxzeXMgZnM7CisJaW9fbWFuYWdlciBpb19wdHI7CisKKwlhZGRfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworCisJYmxraWRfZ2V0X2NhY2hlKCZjYWNoZSwgTlVMTCk7CisJUFJTKGFyZ2MsIGFyZ3YpOworCisjaWZkZWYgQ09ORklHX1RFU1RJT19ERUJVRworCWlmIChnZXRlbnYoIlRFU1RfSU9fRkxBR1MiKSB8fCBnZXRlbnYoIlRFU1RfSU9fQkxPQ0siKSkgeworCQlpb19wdHIgPSB0ZXN0X2lvX21hbmFnZXI7CisJCXRlc3RfaW9fYmFja2luZ19tYW5hZ2VyID0gdW5peF9pb19tYW5hZ2VyOworCX0gZWxzZQorI2VuZGlmCisJCWlvX3B0ciA9IHVuaXhfaW9fbWFuYWdlcjsKKwlyZXR2YWwgPSBleHQyZnNfb3BlbiAoZGV2aWNlX25hbWUsIG9wZW5fZmxhZywgMCwgMCwgaW9fcHRyLCAmZnMpOworICAgICAgICBpZiAocmV0dmFsKQorCQlleGl0KDEpOworCisJaWYgKHJvb3RfdHlwZSkKKwkJZ2V0X3Jvb3RfdHlwZShmcyk7CisKKwlyZW1vdmVfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworCXJldHVybiAoZXh0MmZzX2Nsb3NlIChmcykgPyAxIDogMCk7Cit9CmRpZmYgLS1naXQgYS9taXNjL2UybGFiZWwuOC5pbiBiL21pc2MvZTJsYWJlbC44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZjA4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2UybGFiZWwuOC5pbgpAQCAtMCwwICsxLDUzIEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAxOTkzLCAxOTk0LCAxOTk1IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiIAorLlRIIEUyTEFCRUwgOCAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQorZTJsYWJlbCBcLSBDaGFuZ2UgdGhlIGxhYmVsIG9uIGFuIGV4dDIvZXh0My9leHQ0IGZpbGVzeXN0ZW0KKy5TSCBTWU5PUFNJUworLkIgZTJsYWJlbAorLkkgZGV2aWNlCitbCisuSSBuZXctbGFiZWwKK10KKy5TSCBERVNDUklQVElPTgorLkIgZTJsYWJlbAord2lsbCBkaXNwbGF5IG9yIGNoYW5nZSB0aGUgZmlsZXN5c3RlbSBsYWJlbCBvbiB0aGUgZXh0MiwgZXh0Mywgb3IgZXh0NCAKK2ZpbGVzeXN0ZW0gbG9jYXRlZCBvbgorLkkgZGV2aWNlLiAgCisuUFAKK0lmIHRoZSBvcHRpb25hbCBhcmd1bWVudCAKKy5JIG5ldy1sYWJlbAoraXMgbm90IHByZXNlbnQsIAorLkIgZTJsYWJlbAord2lsbCBzaW1wbHkgZGlzcGxheSB0aGUgY3VycmVudCBmaWxlc3lzdGVtIGxhYmVsLgorLlBQCitJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQKKy5JIG5ldy1sYWJlbAoraXMgcHJlc2VudCwgdGhlbiAKKy5CIGUybGFiZWwKK3dpbGwgc2V0IHRoZSBmaWxlc3lzdGVtIGxhYmVsIHRvIGJlCisuSVIgbmV3LWxhYmVsIC4KK0V4dDIgZmlsZXN5c3RlbSBsYWJlbHMgY2FuIGJlIGF0IG1vc3QgMTYgY2hhcmFjdGVycyBsb25nOyBpZgorLkkgbmV3LWxhYmVsIAoraXMgbG9uZ2VyIHRoYW4gMTYgY2hhcmFjdGVycywgCisuQiBlMmxhYmVsCit3aWxsIHRydW5jYXRlIGl0IGFuZCBwcmludCBhIHdhcm5pbmcgbWVzc2FnZS4gIAorLlBQCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNldCB0aGUgZmlsZXN5c3RlbSBsYWJlbCB1c2luZyB0aGUKKy5CIFwtTAorb3B0aW9uIG9mIAorLkJSIHR1bmUyZnMgKDgpLgorLlBQCisuU0ggQVVUSE9SCisuQiBlMmxhYmVsIAord2FzIHdyaXR0ZW4gYnkgVGhlb2RvcmUgVHMnbyAodHl0c29AbWl0LmVkdSkuCisuU0ggQVZBSUxBQklMSVRZCisuQiBlMmxhYmVsCitpcyBwYXJ0IG9mIHRoZSBlMmZzcHJvZ3MgcGFja2FnZSBhbmQgaXMgYXZhaWxhYmxlIGZyb20gCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC4KKy5TSCBTRUUgQUxTTworLkJSIG1rZTJmcyAoOCksCisuQlIgdHVuZTJmcyAoOCkKKwpkaWZmIC0tZ2l0IGEvbWlzYy9lMmxhYmVsLmMgYi9taXNjL2UybGFiZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzg3YTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9lMmxhYmVsLmMKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBlMmxhYmVsLmMJCS0gUHJpbnQgb3IgY2hhbmdlIHRoZSB2b2x1bWUgbGFiZWwgb24gYW4gZXh0MiBmcworICoKKyAqIFdyaXR0ZW4gYnkgQW5kcmllcyBCcm91d2VyIChhZWJAY3dpLm5sKSwgOTcwNzE0CisgKgorICogQ29weXJpZ2h0IDE5OTcsIDE5OTggYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gY2hhciAqb3B0YXJnOworZXh0ZXJuIGludCBvcHRpbmQ7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorCisjZGVmaW5lIEVYVDJfU1VQRVJfTUFHSUMgMHhFRjUzCisKKyNkZWZpbmUgVk9MTkFNU1ogMTYKKworc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgeworCWNoYXIgIHNfZHVtbXkwWzU2XTsKKwl1bnNpZ25lZCBjaGFyICBzX21hZ2ljWzJdOworCWNoYXIgIHNfZHVtbXkxWzYyXTsKKwljaGFyICBzX3ZvbHVtZV9uYW1lW1ZPTE5BTVNaXTsKKwljaGFyICBzX2xhc3RfbW91bnRlZFs2NF07CisJY2hhciAgc19kdW1teTJbODI0XTsKK30gc2I7CisKK3N0YXRpYyBpbnQgb3Blbl9lMmZzIChjaGFyICpkZXYsIGludCBtb2RlKQoreworCWludCBmZDsKKworCWZkID0gb3BlbihkZXYsIG1vZGUpOworCWlmIChmZCA8IDApIHsKKwkgICAgIHBlcnJvcihkZXYpOworCSAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJlMmxhYmVsOiBjYW5ub3Qgb3BlbiAlc1xuIiksIGRldik7CisJICAgICBleGl0KDEpOworCX0KKwlpZiAobHNlZWsoZmQsIDEwMjQsIFNFRUtfU0VUKSAhPSAxMDI0KSB7CisJICAgICBwZXJyb3IoZGV2KTsKKwkgICAgIGZwcmludGYgKHN0ZGVyciwgXygiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9ja1xuIikpOworCSAgICAgZXhpdCgxKTsKKwl9CisJaWYgKHJlYWQoZmQsIChjaGFyICopICZzYiwgc2l6ZW9mKHNiKSkgIT0gc2l6ZW9mKHNiKSkgeworCSAgICAgcGVycm9yKGRldik7CisJICAgICBmcHJpbnRmIChzdGRlcnIsIF8oImUybGFiZWw6IGVycm9yIHJlYWRpbmcgc3VwZXJibG9ja1xuIikpOworCSAgICAgZXhpdCgxKTsKKwl9CisJaWYgKHNiLnNfbWFnaWNbMF0gKyAyNTYqc2Iuc19tYWdpY1sxXSAhPSBFWFQyX1NVUEVSX01BR0lDKSB7CisJICAgICBmcHJpbnRmIChzdGRlcnIsIF8oImUybGFiZWw6IG5vdCBhbiBleHQyIGZpbGVzeXN0ZW1cbiIpKTsKKwkgICAgIGV4aXQoMSk7CisJfQorCisJcmV0dXJuIGZkOworfQorCitzdGF0aWMgdm9pZCBwcmludF9sYWJlbCAoY2hhciAqZGV2KQoreworCWNoYXIgbGFiZWxbVk9MTkFNU1orMV07CisKKwlvcGVuX2UyZnMgKGRldiwgT19SRE9OTFkpOworCXN0cm5jcHkobGFiZWwsIHNiLnNfdm9sdW1lX25hbWUsIFZPTE5BTVNaKTsKKwlsYWJlbFtWT0xOQU1TWl0gPSAwOworCXByaW50ZigiJXNcbiIsIGxhYmVsKTsKK30KKworc3RhdGljIHZvaWQgY2hhbmdlX2xhYmVsIChjaGFyICpkZXYsIGNoYXIgKmxhYmVsKQoreworCWludCBmZDsKKworCWZkID0gb3Blbl9lMmZzKGRldiwgT19SRFdSKTsKKwltZW1zZXQoc2Iuc192b2x1bWVfbmFtZSwgMCwgVk9MTkFNU1opOworCXN0cm5jcHkoc2Iuc192b2x1bWVfbmFtZSwgbGFiZWwsIFZPTE5BTVNaKTsKKwlpZiAoc3RybGVuKGxhYmVsKSA+IFZPTE5BTVNaKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiV2FybmluZzogbGFiZWwgdG9vIGxvbmcsIHRydW5jYXRpbmcuXG4iKSk7CisJaWYgKGxzZWVrKGZkLCAxMDI0LCBTRUVLX1NFVCkgIT0gMTAyNCkgeworCSAgICAgcGVycm9yKGRldik7CisJICAgICBmcHJpbnRmIChzdGRlcnIsIF8oImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2sgYWdhaW5cbiIpKTsKKwkgICAgIGV4aXQoMSk7CisJfQorCWlmICh3cml0ZShmZCwgKGNoYXIgKikgJnNiLCBzaXplb2Yoc2IpKSAhPSBzaXplb2Yoc2IpKSB7CisJICAgICBwZXJyb3IoZGV2KTsKKwkgICAgIGZwcmludGYgKHN0ZGVyciwgXygiZTJsYWJlbDogZXJyb3Igd3JpdGluZyBzdXBlcmJsb2NrXG4iKSk7CisJICAgICBleGl0KDEpOworCX0KK30KKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCit7CisJaWYgKGFyZ2MgPT0gMikKKwkgICAgIHByaW50X2xhYmVsKGFyZ3ZbMV0pOworCWVsc2UgaWYgKGFyZ2MgPT0gMykKKwkgICAgIGNoYW5nZV9sYWJlbChhcmd2WzFdLCBhcmd2WzJdKTsKKwllbHNlIHsKKwkgICAgIGZwcmludGYoc3RkZXJyLCBfKCJVc2FnZTogZTJsYWJlbCBkZXZpY2UgW25ld2xhYmVsXVxuIikpOworCSAgICAgZXhpdCgxKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9taXNjL2UydW5kby44LmluIGIvbWlzYy9lMnVuZG8uOC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmYwNzk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9lMnVuZG8uOC5pbgpAQCAtMCwwICsxLDQ0IEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAyMDA4IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiCisuVEggRTJVTkRPIDggIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2UydW5kbyBcLSBSZXBsYXkgYW4gdW5kbyBsb2cgZm9yIGFuIGV4dDIvZXh0My9leHQ0IGZpbGVzeXN0ZW0KKy5TSCBTWU5PUFNJUworLkIgZTJ1bmRvCitbCisuQiBcLWYKK10KKy5JIHVuZG9fbG9nIGRldmljZQorLlNIIERFU0NSSVBUSU9OCisuQiBlMnVuZG8KK3dpbGwgcmVwbGF5IHRoZSB1bmRvIGxvZworLkkgdW5kb19sb2cKK2ZvciBhbiBleHQyL2V4dDMvZXh0NCBmaWxlc3lzdGVtIGZvdW5kIG9uCisuSVIgZGV2aWNlIC4KK1RoaXMgY2FuIGJlCit1c2VkIHRvIHVuZG8gYSBmYWlsZWQgb3BlcmF0aW9uIGJ5IGFuIGUyZnNwcm9ncyBwcm9ncmFtLgorLlNIIE9QVElPTlMKKy5UUAorLkIgXC1mCitOb3JtYWxseSwKKy5CIGUydW5kbword2lsbCBjaGVjayB0aGUgZmlsZXN5c3RlbSBVVUlEIGFuZCBsYXN0IG1vZGlmaWVkIHRpbWUgdG8gbWFrZSBzdXJlIHRoZQordW5kbyBsb2cgbWF0Y2hlcyB3aXRoIHRoZSBmaWxlc3lzdGVtIG9uIHRoZSBkZXZpY2UuICBJZiB0aGV5IGRvIG5vdAorbWF0Y2gsCisuQiBlMnVuZG8KK3dpbGwgcmVmdXNlIHRvIGFwcGx5IHRoZSB1bmRvIGxvZyBhcyBhIHNhZmV0eSBtZWNoYW5pc20uICBUaGUKKy5CIFwtZgorb3B0aW9uIGRpc2FibGVzIHRoaXMgc2FmZXR5IG1lY2hhbmlzbS4KKy5TSCBBVVRIT1IKKy5CIGUydW5kbword2FzIHdyaXR0ZW4gYnkgQW5lZXNoIEt1bWFyIEsuVi4gKGFuZWVzaC5rdW1hckBsaW51eC52bmV0LmlibS5jb20pCisuU0ggQVZBSUxBQklMSVRZCisuQiBlMnVuZG8KK2lzIHBhcnQgb2YgdGhlIGUyZnNwcm9ncyBwYWNrYWdlIGFuZCBpcyBhdmFpbGFibGUgZnJvbQoraHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQuCisuU0ggU0VFIEFMU08KKy5CUiBta2UyZnMgKDgpLAorLkJSIHR1bmUyZnMgKDgpCisKZGlmZiAtLWdpdCBhL21pc2MvZTJ1bmRvLmMgYi9taXNjL2UydW5kby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0M2MyNmYKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2UydW5kby5jCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogZTJ1bmRvLmMgLSBSZXBsYXkgYW4gdW5kbyBsb2cgb250byBhbiBleHQyLzMvNCBmaWxlc3lzdGVtCisgKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiwgMjAwNworICogQXV0aG9yIEFuZWVzaCBLdW1hciBLLlYgPGFuZWVzaC5rdW1hckBsaW51eC52bmV0LmlibS5jb20+CisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlICJleHQyZnMvdGRiLmgiCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgbXRpbWVfa2V5W10gPSAiZmlsZXN5c3RlbSBNVElNRSI7CitzdGF0aWMgdW5zaWduZWQgY2hhciB1dWlkX2tleVtdID0gImZpbGVzeXN0ZW0gVVVJRCI7CitzdGF0aWMgdW5zaWduZWQgY2hhciBibGtzaXplX2tleVtdID0gImZpbGVzeXN0ZW0gQkxLU0laRSI7CisKK3N0YXRpYyBjaGFyICpwcmdfbmFtZTsKKworc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwKKwkJXygiVXNhZ2U6ICVzIDx0cmFuc2FjdGlvbiBmaWxlPiA8ZmlsZXN5c3RlbT5cbiIpLCBwcmdfbmFtZSk7CisJZXhpdCgxKTsKK30KKworc3RhdGljIGludCBjaGVja19maWxlc3lzdGVtKFREQl9DT05URVhUICp0ZGIsIGlvX2NoYW5uZWwgY2hhbm5lbCkKK3sKKwlfX3UzMiAgIHNfbXRpbWU7CisJX191OCAgICBzX3V1aWRbMTZdOworCWVycmNvZGVfdCByZXR2YWw7CisJVERCX0RBVEEgdGRiX2tleSwgdGRiX2RhdGE7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgc3VwZXI7CisKKwlpb19jaGFubmVsX3NldF9ibGtzaXplKGNoYW5uZWwsIFNVUEVSQkxPQ0tfT0ZGU0VUKTsKKwlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoY2hhbm5lbCwgMSwgLVNVUEVSQkxPQ0tfU0laRSwgJnN1cGVyKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJnX25hbWUsIHJldHZhbCwKKwkJCSIlcyIsIF8oIkZhaWxlZCB0byByZWFkIHRoZSBmaWxlIHN5c3RlbSBkYXRhIFxuIikpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXRkYl9rZXkuZHB0ciA9IG10aW1lX2tleTsKKwl0ZGJfa2V5LmRzaXplID0gc2l6ZW9mKG10aW1lX2tleSk7CisJdGRiX2RhdGEgPSB0ZGJfZmV0Y2godGRiLCB0ZGJfa2V5KTsKKwlpZiAoIXRkYl9kYXRhLmRwdHIpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9UREJfU1VDQ0VTUyArIHRkYl9lcnJvcih0ZGIpOworCQljb21fZXJyKHByZ19uYW1lLCByZXR2YWwsCisJCQlfKCJGYWlsZWQgdGRiX2ZldGNoICVzXG4iKSwgdGRiX2Vycm9yc3RyKHRkYikpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXNfbXRpbWUgPSAqKF9fdTMyICopdGRiX2RhdGEuZHB0cjsKKwlpZiAoc3VwZXIuc19tdGltZSAhPSBzX210aW1lKSB7CisKKwkJY29tX2VycihwcmdfbmFtZSwgMCwKKwkJCV8oIlRoZSBmaWxlIHN5c3RlbSBNb3VudCB0aW1lIGRpZG4ndCBtYXRjaCAldVxuIiksCisJCQlzX210aW1lKTsKKworCQlyZXR1cm4gIC0xOworCX0KKworCisJdGRiX2tleS5kcHRyID0gdXVpZF9rZXk7CisJdGRiX2tleS5kc2l6ZSA9IHNpemVvZih1dWlkX2tleSk7CisJdGRiX2RhdGEgPSB0ZGJfZmV0Y2godGRiLCB0ZGJfa2V5KTsKKwlpZiAoIXRkYl9kYXRhLmRwdHIpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9UREJfU1VDQ0VTUyArIHRkYl9lcnJvcih0ZGIpOworCQljb21fZXJyKHByZ19uYW1lLCByZXR2YWwsCisJCQlfKCJGYWlsZWQgdGRiX2ZldGNoICVzXG4iKSwgdGRiX2Vycm9yc3RyKHRkYikpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwltZW1jcHkoc191dWlkLCB0ZGJfZGF0YS5kcHRyLCBzaXplb2Yoc191dWlkKSk7CisJaWYgKG1lbWNtcChzX3V1aWQsIHN1cGVyLnNfdXVpZCwgc2l6ZW9mKHNfdXVpZCkpKSB7CisJCWNvbV9lcnIocHJnX25hbWUsIDAsICIlcyIsCisJCQlfKCJUaGUgZmlsZSBzeXN0ZW0gVVVJRCBkaWRuJ3QgbWF0Y2ggXG4iKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfYmxrX3NpemUoVERCX0NPTlRFWFQgKnRkYiwgaW9fY2hhbm5lbCBjaGFubmVsKQoreworCWludCBibG9ja19zaXplOworCWVycmNvZGVfdCByZXR2YWw7CisJVERCX0RBVEEgdGRiX2tleSwgdGRiX2RhdGE7CisKKwl0ZGJfa2V5LmRwdHIgPSBibGtzaXplX2tleTsKKwl0ZGJfa2V5LmRzaXplID0gc2l6ZW9mKGJsa3NpemVfa2V5KTsKKwl0ZGJfZGF0YSA9IHRkYl9mZXRjaCh0ZGIsIHRkYl9rZXkpOworCWlmICghdGRiX2RhdGEuZHB0cikgeworCQlyZXR2YWwgPSBFWFQyX0VUX1REQl9TVUNDRVNTICsgdGRiX2Vycm9yKHRkYik7CisJCWNvbV9lcnIocHJnX25hbWUsIHJldHZhbCwKKwkJCV8oIkZhaWxlZCB0ZGJfZmV0Y2ggJXNcbiIpLCB0ZGJfZXJyb3JzdHIodGRiKSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJYmxvY2tfc2l6ZSA9ICooaW50ICopdGRiX2RhdGEuZHB0cjsKKyNpZmRlZiBERUJVRworCXByaW50ZigiQmxvY2sgc2l6ZSAlZFxuIiwgYmxvY2tfc2l6ZSk7CisjZW5kaWYKKwlpb19jaGFubmVsX3NldF9ibGtzaXplKGNoYW5uZWwsIGJsb2NrX3NpemUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IGMsZm9yY2UgPSAwOworCVREQl9DT05URVhUICp0ZGI7CisJVERCX0RBVEEga2V5LCBkYXRhOworCWlvX2NoYW5uZWwgY2hhbm5lbDsKKwllcnJjb2RlX3QgcmV0dmFsOworCWludCAgbW91bnRfZmxhZ3M7CisJYmxrNjRfdCAgYmxrX251bTsKKwljaGFyICpkZXZpY2VfbmFtZSwgKnRkYl9maWxlOworCWlvX21hbmFnZXIgbWFuYWdlciA9IHVuaXhfaW9fbWFuYWdlcjsKKworI2lmZGVmIEVOQUJMRV9OTFMKKwlzZXRsb2NhbGUoTENfTUVTU0FHRVMsICIiKTsKKwlzZXRsb2NhbGUoTENfQ1RZUEUsICIiKTsKKwliaW5kdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUsIExPQ0FMRURJUik7CisJdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUpOworCXNldF9jb21fZXJyX2dldHRleHQoZ2V0dGV4dCk7CisjZW5kaWYKKwlhZGRfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworCisJcHJnX25hbWUgPSBhcmd2WzBdOworCXdoaWxlKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJmIikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2UgJ2YnOgorCQkJCWZvcmNlID0gMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdXNhZ2UoKTsKKwkJfQorCX0KKworCWlmIChhcmdjICE9IG9wdGluZCArIDIpCisJCXVzYWdlKCk7CisKKwl0ZGJfZmlsZSA9IGFyZ3Zbb3B0aW5kXTsKKwlkZXZpY2VfbmFtZSA9IGFyZ3Zbb3B0aW5kKzFdOworCisJdGRiID0gdGRiX29wZW4odGRiX2ZpbGUsIDAsIDAsIE9fUkRPTkxZLCAwNjAwKTsKKworCWlmICghdGRiKSB7CisJCWNvbV9lcnIocHJnX25hbWUsIGVycm5vLAorCQkJCV8oIkZhaWxlZCB0ZGJfb3BlbiAlc1xuIiksIHRkYl9maWxlKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfY2hlY2tfaWZfbW91bnRlZChkZXZpY2VfbmFtZSwgJm1vdW50X2ZsYWdzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJnX25hbWUsIHJldHZhbCwgXygiRXJyb3Igd2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAiCisJCQkJIiVzIGlzIG1vdW50ZWQuXG4iKSwgZGV2aWNlX25hbWUpOworCQlleGl0KDEpOworCX0KKworCWlmIChtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkgeworCQljb21fZXJyKHByZ19uYW1lLCByZXR2YWwsICIlcyIsIF8oImUydW5kbyBzaG91bGQgb25seSBiZSBydW4gIgorCQkJCQkJIm9uIHVubW91bnRlZCBmaWxlIHN5c3RlbVxuIikpOworCQlleGl0KDEpOworCX0KKworCXJldHZhbCA9IG1hbmFnZXItPm9wZW4oZGV2aWNlX25hbWUsCisJCQkJSU9fRkxBR19FWENMVVNJVkUgfCBJT19GTEFHX1JXLCAgJmNoYW5uZWwpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihwcmdfbmFtZSwgcmV0dmFsLAorCQkJCV8oIkZhaWxlZCB0byBvcGVuICVzXG4iKSwgZGV2aWNlX25hbWUpOworCQlleGl0KDEpOworCX0KKworCWlmICghZm9yY2UgJiYgY2hlY2tfZmlsZXN5c3RlbSh0ZGIsIGNoYW5uZWwpKSB7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKHNldF9ibGtfc2l6ZSh0ZGIsIGNoYW5uZWwpKSB7CisJCWV4aXQoMSk7CisJfQorCisJZm9yIChrZXkgPSB0ZGJfZmlyc3RrZXkodGRiKTsga2V5LmRwdHI7IGtleSA9IHRkYl9uZXh0a2V5KHRkYiwga2V5KSkgeworCQlpZiAoIXN0cmNtcCgoY2hhciAqKSBrZXkuZHB0ciwgKGNoYXIgKikgbXRpbWVfa2V5KSB8fAorCQkgICAgIXN0cmNtcCgoY2hhciAqKSBrZXkuZHB0ciwgKGNoYXIgKikgdXVpZF9rZXkpIHx8CisJCSAgICAhc3RyY21wKChjaGFyICopIGtleS5kcHRyLCAoY2hhciAqKSBibGtzaXplX2tleSkpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZGF0YSA9IHRkYl9mZXRjaCh0ZGIsIGtleSk7CisJCWlmICghZGF0YS5kcHRyKSB7CisJCQljb21fZXJyKHByZ19uYW1lLCAwLAorCQkJCV8oIkZhaWxlZCB0ZGJfZmV0Y2ggJXNcbiIpLCB0ZGJfZXJyb3JzdHIodGRiKSk7CisJCQlleGl0KDEpOworCQl9CisJCWJsa19udW0gPSAqKGJsazY0X3QgKilrZXkuZHB0cjsKKwkJcHJpbnRmKF8oIlJlcGxheWVkIHRyYW5zYWN0aW9uIG9mIHNpemUgJXpkIGF0IGxvY2F0aW9uICVsbHVcbiIpLAorCQkJCQkJCWRhdGEuZHNpemUsIGJsa19udW0pOworCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGNoYW5uZWwsIGJsa19udW0sCisJCQkJCQktZGF0YS5kc2l6ZSwgZGF0YS5kcHRyKTsKKwkJaWYgKHJldHZhbCA9PSAtMSkgeworCQkJY29tX2VycihwcmdfbmFtZSwgcmV0dmFsLAorCQkJCQlfKCJGYWlsZWQgd3JpdGUgJXNcbiIpLAorCQkJCQlzdHJlcnJvcihlcnJubykpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlpb19jaGFubmVsX2Nsb3NlKGNoYW5uZWwpOworCXRkYl9jbG9zZSh0ZGIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9taXNjL2U0ZGVmcmFnLjguaW4gYi9taXNjL2U0ZGVmcmFnLjguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVlMWJjOQotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvZTRkZWZyYWcuOC5pbgpAQCAtMCwwICsxLDgwIEBACisuVEggRTRERUZSQUcgOCAiTWF5IDIwMDkiICJlNGRlZnJhZyB2ZXJzaW9uIDIuMCIKKy5TSCBOQU1FCitlNGRlZnJhZyBcLSBvbmxpbmUgZGVmcmFnbWVudGVyIGZvciBleHQ0IGZpbGVzeXN0ZW0KKy5TSCBTWU5PUFNJUworLkIgZTRkZWZyYWcKK1sKKy5CIFwtYworXQorWworLkIgXC12CitdCisuSSB0YXJnZXQKK1wmLi4uCisuU0ggREVTQ1JJUFRJT04KKy5CIGU0ZGVmcmFnCityZWR1Y2VzIGZyYWdtZW50YXRpb24gb2YgZXh0ZW50IGJhc2VkIGZpbGUuIFRoZSBmaWxlIHRhcmdldGVkIGJ5CisuQiBlNGRlZnJhZworaXMgY3JlYXRlZCBvbiBleHQ0IGZpbGVzeXN0ZW0gbWFkZSB3aXRoICItTyBleHRlbnQiIG9wdGlvbiAoc2VlCisuQlIgbWtlMmZzICg4KSkuCitUaGUgdGFyZ2V0ZWQgZmlsZSBnZXRzIG1vcmUgY29udGlndW91cyBibG9ja3MgYW5kIGltcHJvdmVzIHRoZSBmaWxlIGFjY2Vzcworc3BlZWQuCisuUFAKKy5JIHRhcmdldAoraXMgYSByZWd1bGFyIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIGRldmljZSB0aGF0IGlzIG1vdW50ZWQgYXMgZXh0NCBmaWxlc3lzdGVtLgorSWYKKy5JIHRhcmdldAoraXMgYSBkaXJlY3RvcnksCisuQiBlNGRlZnJhZworcmVkdWNlcyBmcmFnbWVudGF0aW9uIG9mIGFsbCBmaWxlcyBpbiBpdC4gSWYKKy5JIHRhcmdldAoraXMgYSBkZXZpY2UsCisuQiBlNGRlZnJhZworZ2V0cyB0aGUgbW91bnQgcG9pbnQgb2YgaXQgYW5kIHJlZHVjZXMgZnJhZ21lbnRhdGlvbiBvZiBhbGwgZmlsZXMgaW4gdGhpcyBtb3VudAorcG9pbnQuCisuU0ggT1BUSU9OUworLlRQCisuQiBcLWMKK0dldCBhIGN1cnJlbnQgZnJhZ21lbnRhdGlvbiBjb3VudCBhbmQgYW4gaWRlYWwgZnJhZ21lbnRhdGlvbiBjb3VudCwgYW5kCitjYWxjdWxhdGUgZnJhZ21lbnRhdGlvbiBzY29yZSBiYXNlZCBvbiB0aGVtLiBCeSBzZWVpbmcgdGhpcyBzY29yZSwgd2UgY2FuCitkZXRlcm1pbmUgd2hldGhlciB3ZSBzaG91bGQgZXhlY3V0ZQorLkIgZTRkZWZyYWcKK3RvCisuSVIgdGFyZ2V0IC4KK1doZW4gdXNlZCB3aXRoCisuQiBcLXYKK29wdGlvbiwgdGhlIGN1cnJlbnQgZnJhZ21lbnRhdGlvbiBjb3VudCBhbmQgdGhlIGlkZWFsIGZyYWdtZW50YXRpb24gY291bnQgYXJlCitwcmludGVkIGZvciBlYWNoIGZpbGUuCisuSVAKK0Fsc28gdGhpcyBvcHRpb24gb3V0cHV0cyB0aGUgYXZlcmFnZSBkYXRhIHNpemUgaW4gb25lIGV4dGVudC4gSWYgeW91IHNlZSBpdCwKK3lvdSdsbCBmaW5kIHRoZSBmaWxlIGhhcyBpZGVhbCBleHRlbnRzIG9yIG5vdC4gTm90ZSB0aGF0IHRoZSBtYXhpbXVtIGV4dGVudAorc2l6ZSBpcyAxMzEwNzJLQiBpbiBleHQ0IGZpbGVzeXN0ZW0gKGlmIGJsb2NrIHNpemUgaXMgNEtCKS4KKy5JUAorSWYgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLAorLkkgdGFyZ2V0CitpcyBuZXZlciBkZWZyYWdtZW50ZWQuCisuVFAKKy5CIFwtdgorUHJpbnQgZXJyb3IgbWVzc2FnZXMgYW5kIHRoZSBmcmFnbWVudGF0aW9uIGNvdW50IGJlZm9yZSBhbmQgYWZ0ZXIgZGVmcmFnIGZvcgorZWFjaCBmaWxlLgorLlNIIE5PVEVTCisuQiBlNGRlZnJhZworZG9lcyBub3Qgc3VwcG9ydCBzd2FwIGZpbGUsIGZpbGVzIGluIGxvc3QrZm91bmQgZGlyZWN0b3J5LCBhbmQgZmlsZXMgYWxsb2NhdGVkCitpbiBpbmRpcmVjdCBibG9ja3MuIFdoZW4KKy5JIHRhcmdldAoraXMgYSBkZXZpY2Ugb3IgYSBtb3VudCBwb2ludCwKKy5CIGU0ZGVmcmFnCitkb2Vzbid0IGRlZnJhZ21lbnQgZmlsZXMgaW4gbW91bnQgcG9pbnQgb2Ygb3RoZXIgZGV2aWNlLgorLlBQCitOb24tcHJpdmlsZWdlZCB1c2VycyBjYW4gZXhlY3V0ZQorLkIgZTRkZWZyYWcKK3RvIHRoZWlyIG93biBmaWxlLCBidXQgdGhlIHNjb3JlIGlzIG5vdCBwcmludGVkIGlmCisuQiBcLWMKK29wdGlvbiBpcyBzcGVjaWZpZWQuIFRoZXJlZm9yZSwgaXQgaXMgZGVzaXJhYmxlIHRvIGJlIGV4ZWN1dGVkIGJ5IHJvb3QgdXNlci4KKy5TSCBBVVRIT1IKK1dyaXR0ZW4gYnkgQWtpcmEgRnVqaXRhIDxhLWZ1aml0YUBycy5qcC5uZWMuY29tPiBhbmQgVGFrYXNoaSBTYXRvCis8dC1zYXRvQHlrLmpwLm5lYy5jb20+LgorLlNIIFNFRSBBTFNPCisuQlIgbWtlMmZzICg4KSwKKy5CUiBtb3VudCAoOCkuCisKZGlmZiAtLWdpdCBhL21pc2MvZTRkZWZyYWcuYyBiL21pc2MvZTRkZWZyYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGVhYzYwCi0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9lNGRlZnJhZy5jCkBAIC0wLDAgKzEsMjAzMiBAQAorLyoKKyAqIGU0ZGVmcmFnLmMgLSBleHQ0IGZpbGVzeXN0ZW0gZGVmcmFnbWVudGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5FQyBTb2Z0d2FyZSBUb2hva3UsIEx0ZC4KKyAqCisgKiBBdXRob3I6IEFraXJhIEZ1aml0YQk8YS1mdWppdGFAcnMuanAubmVjLmNvbT4KKyAqICAgICAgICAgVGFrYXNoaSBTYXRvCTx0LXNhdG9AeWsuanAubmVjLmNvbT4KKyAqLworCisjaWZuZGVmIF9MQVJHRUZJTEVfU09VUkNFCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisjZW5kaWYKKworI2lmbmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyNlbmRpZgorCisjaWZuZGVmIF9HTlVfU09VUkNFCisjZGVmaW5lIF9HTlVfU09VUkNFCisjZW5kaWYKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGZ0dy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1udGVudC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJfdHlwZXMuaD4KKyNpbmNsdWRlIDxleHQyZnMvZXh0MmZzLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2ZpZW1hcC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjaW5jbHVkZSA8c3lzL3Zmcy5oPgorCisvKiBBIHJlbGF0aXZlbHkgbmV3IGlvY3RsIGludGVyZmFjZSAuLi4gKi8KKyNpZm5kZWYgRVhUNF9JT0NfTU9WRV9FWFQKKyNkZWZpbmUgRVhUNF9JT0NfTU9WRV9FWFQgICAgICBfSU9XUignZicsIDE1LCBzdHJ1Y3QgbW92ZV9leHRlbnQpCisjZW5kaWYKKworLyogTWFjcm8gZnVuY3Rpb25zICovCisjZGVmaW5lIFBSSU5UX0VSUl9NU0cobXNnKQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCAobXNnKSkKKyNkZWZpbmUgSU5fRlRXX1BSSU5UX0VSUl9NU0cobXNnKQlcCisJZnByaW50ZihzdGRlcnIsICJcdCVzXHRcdFsgTkcgXVxuIiwgKG1zZykpCisjZGVmaW5lIFBSSU5UX0ZJTEVfTkFNRShmaWxlKQlmcHJpbnRmKHN0ZGVyciwgIiBcIiVzXCJcbiIsIChmaWxlKSkKKyNkZWZpbmUgUFJJTlRfRVJSX01TR19XSVRIX0VSUk5PKG1zZykJXAorCWZwcmludGYoc3RkZXJyLCAiXHQlczolc1x0WyBORyBdXG4iLCAobXNnKSwgc3RyZXJyb3IoZXJybm8pKQorI2RlZmluZSBTVEFUSVNUSUNfRVJSX01TRyhtc2cpCVwKKwlmcHJpbnRmKHN0ZGVyciwgIlx0JXNcbiIsIChtc2cpKQorI2RlZmluZSBTVEFUSVNUSUNfRVJSX01TR19XSVRIX0VSUk5PKG1zZykJXAorCWZwcmludGYoc3RkZXJyLCAiXHQlczolc1xuIiwgKG1zZyksIHN0cmVycm9yKGVycm5vKSkKKyNkZWZpbmUgbWluKHgsIHkpICgoKHgpID4gKHkpKSA/ICh5KSA6ICh4KSkKKyNkZWZpbmUgQ0FMQ19TQ09SRShyYXRpbykgXAorCSgocmF0aW8pID4gMTAgPyAoODAgKyAyMCAqIChyYXRpbykgLyAxMDApIDogKDggKiAocmF0aW8pKSkKKy8qIFdyYXAgdXAgdGhlIGZyZWUgZnVuY3Rpb24gKi8KKyNkZWZpbmUgRlJFRSh0bXApCQkJCVwKKwlkbyB7CQkJCQlcCisJCWlmICgodG1wKSAhPSBOVUxMKQkJXAorCQkJZnJlZSh0bXApOwkJXAorCX0gd2hpbGUgKDApCQkJCVwKKy8qIEluc2VydCBsaXN0MiBhZnRlciBsaXN0MSAqLworI2RlZmluZSBpbnNlcnQobGlzdDEsIGxpc3QyKQkJCVwKKwlkbyB7CQkJCQlcCisJCWxpc3QyLT5uZXh0ID0gbGlzdDEtPm5leHQ7CVwKKwkJbGlzdDEtPm5leHQtPnByZXYgPSBsaXN0MjsJXAorCQlsaXN0Mi0+cHJldiA9IGxpc3QxOwkJXAorCQlsaXN0MS0+bmV4dCA9IGxpc3QyOwkJXAorCX0gd2hpbGUgKDApCisKKy8qIFRvIGRlbGV0ZSB1bnVzZWQgd2FybmluZyAqLworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIEVYVDJGU19BVFRSKHgpIF9fYXR0cmlidXRlX18oeCkKKyNlbHNlCisjZGVmaW5lIEVYVDJGU19BVFRSKHgpCisjZW5kaWYKKworLyogVGhlIG1vZGUgb2YgZGVmcmFnICovCisjZGVmaW5lIERFVEFJTAkJCTB4MDEKKyNkZWZpbmUgU1RBVElTVElDCQkweDAyCisKKyNkZWZpbmUgREVWTkFNRQkJCTAKKyNkZWZpbmUgRElSTkFNRQkJCTEKKyNkZWZpbmUgRklMRU5BTUUJCTIKKworI2RlZmluZSBGVFdfT1BFTl9GRAkJMjAwMAorCisjZGVmaW5lIEZTX0VYVDQJCQkiZXh0NCIKKyNkZWZpbmUgUk9PVF9VSUQJCTAKKworI2RlZmluZSBCT1VORF9TQ09SRQkJNTUKKyNkZWZpbmUgU0hPV19GUkFHX0ZJTEVTCTUKKworLyogTWFnaWMgbnVtYmVyIGZvciBleHQ0ICovCisjZGVmaW5lIEVYVDRfU1VQRVJfTUFHSUMJMHhFRjUzCisKKy8qIERlZmluaXRpb24gb2YgZmxleF9iZyAqLworI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRwkJMHgwMjAwCisKKy8qIFRoZSBmb2xsb3dpbmcgbWFjcm8gaXMgdXNlZCBmb3IgaW9jdGwgRlNfSU9DX0ZJRU1BUAorICogRVhURU5UX01BWF9DT1VOVDoJdGhlIG1heGltdW0gbnVtYmVyIG9mIGV4dGVudHMgZm9yIGV4Y2hhbmdpbmcgYmV0d2VlbgorICoJCQlrZXJuZWwtc3BhY2UgYW5kIHVzZXItc3BhY2UgcGVyIGlvY3RsCisgKi8KKyNkZWZpbmUgRVhURU5UX01BWF9DT1VOVAk1MTIKKworLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIGVycm9yIG1lc3NhZ2UgKi8KKyNkZWZpbmUgTVNHX1VTQUdFCQlcCisiVXNhZ2UJOiBlNGRlZnJhZyBbLXZdIGZpbGUuLi58IGRpcmVjdG9yeS4uLnwgZGV2aWNlLi4uXG5cCisJOiBlNGRlZnJhZyAgLWMgIGZpbGUuLi58IGRpcmVjdG9yeS4uLnwgZGV2aWNlLi4uXG4iCisKKyNkZWZpbmUgTkdNU0dfRVhUNAkJIkZpbGVzeXN0ZW0gaXMgbm90IGV4dDQgZmlsZXN5c3RlbSIKKyNkZWZpbmUgTkdNU0dfRklMRV9FWFRFTlQJIkZhaWxlZCB0byBnZXQgZmlsZSBleHRlbnRzIgorI2RlZmluZSBOR01TR19GSUxFX0lORk8JCSJGYWlsZWQgdG8gZ2V0IGZpbGUgaW5mb3JtYXRpb24iCisjZGVmaW5lIE5HTVNHX0ZJTEVfT1BFTgkJIkZhaWxlZCB0byBvcGVuIgorI2RlZmluZSBOR01TR19GSUxFX1VOUkVHCSJGaWxlIGlzIG5vdCByZWd1bGFyIGZpbGUiCisjZGVmaW5lIE5HTVNHX0xPU1RfRk9VTkQJIkNhbiBub3QgcHJvY2VzcyBcImxvc3QrZm91bmRcIiIKKworLyogRGF0YSB0eXBlIGZvciBmaWxlc3lzdGVtLXdpZGUgYmxvY2tzIG51bWJlciAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgZXh0NF9mc2Jsa190OworCitzdHJ1Y3QgZmllbWFwX2V4dGVudF9kYXRhIHsKKwlfX3U2NCBsZW47CQkJLyogYmxvY2tzIGNvdW50ICovCisJX191NjQgbG9naWNhbDsJCS8qIHN0YXJ0IGxvZ2ljYWwgYmxvY2sgbnVtYmVyICovCisJZXh0NF9mc2Jsa190IHBoeXNpY2FsOwkJLyogc3RhcnQgcGh5c2ljYWwgYmxvY2sgbnVtYmVyICovCit9OworCitzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0IHsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0ICpwcmV2OworCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKm5leHQ7CisJc3RydWN0IGZpZW1hcF9leHRlbnRfZGF0YSBkYXRhOwkvKiBleHRlbnQgYmVsb25nIHRvIGZpbGUgKi8KK307CisKK3N0cnVjdCBmaWVtYXBfZXh0ZW50X2dyb3VwIHsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9ncm91cCAqcHJldjsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9ncm91cCAqbmV4dDsKKwlfX3U2NCBsZW47CS8qIGxlbmd0aCBvZiB0aGlzIGNvbnRpbnVvdXMgcmVnaW9uICovCisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqc3RhcnQ7CS8qIHN0YXJ0IGV4dCAqLworCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKmVuZDsJCS8qIGVuZCBleHQgKi8KK307CisKK3N0cnVjdCBtb3ZlX2V4dGVudCB7CisJX19zMzIgcmVzZXJ2ZWQ7CS8qIG9yaWdpbmFsIGZpbGUgZGVzY3JpcHRvciAqLworCV9fdTMyIGRvbm9yX2ZkOwkvKiBkb25vciBmaWxlIGRlc2NyaXB0b3IgKi8KKwlfX3U2NCBvcmlnX3N0YXJ0OwkvKiBsb2dpY2FsIHN0YXJ0IG9mZnNldCBpbiBibG9jayBmb3Igb3JpZyAqLworCV9fdTY0IGRvbm9yX3N0YXJ0OwkvKiBsb2dpY2FsIHN0YXJ0IG9mZnNldCBpbiBibG9jayBmb3IgZG9ub3IgKi8KKwlfX3U2NCBsZW47CS8qIGJsb2NrIGxlbmd0aCB0byBiZSBtb3ZlZCAqLworCV9fdTY0IG1vdmVkX2xlbjsJLyogbW92ZWQgYmxvY2sgbGVuZ3RoICovCit9OworCitzdHJ1Y3QgZnJhZ19zdGF0aXN0aWNfaW5vIHsKKwlpbnQgbm93X2NvdW50OwkvKiB0aGUgZmlsZSdzIGV4dGVudHMgY291bnQgb2YgYmVmb3JlIGRlZnJhZyAqLworCWludCBiZXN0X2NvdW50OyAvKiB0aGUgYmVzdCBmaWxlJ3MgZXh0ZW50cyBjb3VudCAqLworCV9fdTY0IHNpemVfcGVyX2V4dDsJLyogc2l6ZShLQikgcGVyIGV4dGVudCAqLworCWZsb2F0IHJhdGlvOwkvKiB0aGUgcmF0aW8gb2YgZnJhZ21lbnRhdGlvbiAqLworCWNoYXIgbXNnX2J1ZmZlcltQQVRIX01BWCArIDFdOwkvKiBwYXRobmFtZSBvZiB0aGUgZmlsZSAqLworfTsKKworc3RhdGljIGNoYXIJbG9zdF9mb3VuZF9kaXJbUEFUSF9NQVggKyAxXTsKK3N0YXRpYyBpbnQJYmxvY2tfc2l6ZTsKK3N0YXRpYyBpbnQJZXh0ZW50c19iZWZvcmVfZGVmcmFnOworc3RhdGljIGludAlleHRlbnRzX2FmdGVyX2RlZnJhZzsKK3N0YXRpYyBpbnQJbW9kZV9mbGFnOworc3RhdGljIHVuc2lnbmVkIGludAljdXJyZW50X3VpZDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJZGVmcmFnZWRfZmlsZV9jb3VudDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJZnJhZ19maWxlc19iZWZvcmVfZGVmcmFnOworc3RhdGljIHVuc2lnbmVkIGludAlmcmFnX2ZpbGVzX2FmdGVyX2RlZnJhZzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJcmVndWxhcl9jb3VudDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJc3VjY2VlZF9jbnQ7CitzdGF0aWMgdW5zaWduZWQgaW50CXRvdGFsX2NvdW50Oworc3RhdGljIF9fdTggbG9nX2dyb3Vwc19wZXJfZmxleDsKK3N0YXRpYyBfX3UzMiBibG9ja3NfcGVyX2dyb3VwOworc3RhdGljIF9fdTMyIGZlYXR1cmVfaW5jb21wYXQ7CitzdGF0aWMgZXh0NF9mc2Jsa190CWZpbGVzX2Jsb2NrX2NvdW50Oworc3RhdGljIHN0cnVjdCBmcmFnX3N0YXRpc3RpY19pbm8JZnJhZ19yYW5rW1NIT1dfRlJBR19GSUxFU107CisKKworLyoKKyAqIFdlIHByZWZlciBwb3NpeF9mYWR2aXNlNjQgd2hlbiBhdmFpbGFibGUsIGFzIGl0IGFsbG93cyA2NGJpdCBvZmZzZXQgb24KKyAqIDMyYml0IHN5c3RlbXMKKyAqLworI2lmIGRlZmluZWQoSEFWRV9QT1NJWF9GQURWSVNFNjQpCisjZGVmaW5lIHBvc2l4X2ZhZHZpc2UJcG9zaXhfZmFkdmlzZTY0CisjZWxpZiBkZWZpbmVkKEhBVkVfRkFEVklTRTY0KQorI2RlZmluZSBwb3NpeF9mYWR2aXNlCWZhZHZpc2U2NAorI2VsaWYgIWRlZmluZWQoSEFWRV9QT1NJWF9GQURWSVNFKQorI2Vycm9yIHBvc2l4X2ZhZHZpc2Ugbm90IGF2YWlsYWJsZSEKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfU1lOQ19GSUxFX1JBTkdFCisjZXJyb3Igc3luY19maWxlX3JhbmdlIG5vdCBhdmFpbGFibGUhCisjZW5kaWYgLyogISBIQVZFX1NZTkNfRklMRV9SQU5HRSAqLworCisjaWZuZGVmIEhBVkVfRkFMTE9DQVRFNjQKKyNlcnJvciBmYWxsb2NhdGU2NCBub3QgYXZhaWxhYmxlIQorI2VuZGlmIC8qICEgSEFWRV9GQUxMT0NBVEU2NCAqLworCisvKgorICogZ2V0X21vdW50X3BvaW50KCkgLQlHZXQgZGV2aWNlJ3MgbW91bnQgcG9pbnQuCisgKgorICogQGRldm5hbWU6CQl0aGUgZGV2aWNlJ3MgbmFtZS4KKyAqIEBtb3VudF9wb2ludDoJdGhlIG1vdW50IHBvaW50LgorICogQGRpcl9wYXRoX2xlbjoJdGhlIGxlbmd0aCBvZiBkaXJlY3RvcnkuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X21vdW50X3BvaW50KGNvbnN0IGNoYXIgKmRldm5hbWUsIGNoYXIgKm1vdW50X3BvaW50LAorCQkJCQkJCWludCBkaXJfcGF0aF9sZW4pCit7CisJLyogUmVmZXIgdG8gL2V0Yy9tdGFiICovCisJY29uc3QgY2hhcgkqbXRhYiA9IE1PVU5URUQ7CisJRklMRQkJKmZwID0gTlVMTDsKKwlzdHJ1Y3QgbW50ZW50CSptbnQgPSBOVUxMOworCXN0cnVjdCBzdGF0NjQJc2I7CisKKwlpZiAoc3RhdDY0KGRldm5hbWUsICZzYikgPCAwKSB7CisJCXBlcnJvcihOR01TR19GSUxFX0lORk8pOworCQlQUklOVF9GSUxFX05BTUUoZGV2bmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlmcCA9IHNldG1udGVudChtdGFiLCAiciIpOworCWlmIChmcCA9PSBOVUxMKSB7CisJCXBlcnJvcigiQ291bGRuJ3QgYWNjZXNzIC9ldGMvbXRhYiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJd2hpbGUgKChtbnQgPSBnZXRtbnRlbnQoZnApKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBzdGF0NjQgbXM7CisKKwkJLyoKKwkJICogVG8gaGFuZGxlIGRldmljZSBzeW1saW5rcywgd2Ugc2VlIGlmIHRoZQorCQkgKiBkZXZpY2UgbnVtYmVyIG1hdGNoZXMsIG5vdCB0aGUgbmFtZQorCQkgKi8KKwkJaWYgKHN0YXQ2NChtbnQtPm1udF9mc25hbWUsICZtcykgPCAwKQorCQkJY29udGludWU7CisJCWlmIChzYi5zdF9yZGV2ICE9IG1zLnN0X3JkZXYpCisJCQljb250aW51ZTsKKworCQllbmRtbnRlbnQoZnApOworCQlpZiAoc3RyY21wKG1udC0+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+Zm1fbWFwcGVkX2V4dGVudHMKKwkJCQkJPT0gRVhURU5UX01BWF9DT1VOVCAmJgorCQkhKGV4dF9idWZbRVhURU5UX01BWF9DT1VOVC0xXS5mZV9mbGFncworCQkJCQkmIEZJRU1BUF9FWFRFTlRfTEFTVCkpOworCisJRlJFRShmaWVtYXBfYnVmKTsKKwlyZXR1cm4gMDsKK291dDoKKwlGUkVFKGZpZW1hcF9idWYpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIGdldF9sb2dpY2FsX2NvdW50KCkgLQlHZXQgdGhlIGZpbGUgbG9naWNhbCBleHRlbnRzIGNvdW50LgorICoKKyAqIEBsb2dpY2FsX2xpc3RfaGVhZDoJdGhlIGhlYWQgb2YgdGhlIGxvZ2ljYWwgZXh0ZW50IGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2xvZ2ljYWxfY291bnQoc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqbG9naWNhbF9saXN0X2hlYWQpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqZXh0X2xpc3RfdG1wICA9IGxvZ2ljYWxfbGlzdF9oZWFkOworCisJZG8geworCQlyZXQrKzsKKwkJZXh0X2xpc3RfdG1wID0gZXh0X2xpc3RfdG1wLT5uZXh0OworCX0gd2hpbGUgKGV4dF9saXN0X3RtcCAhPSBsb2dpY2FsX2xpc3RfaGVhZCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZ2V0X3BoeXNpY2FsX2NvdW50KCkgLQlHZXQgdGhlIGZpbGUgcGh5c2ljYWwgZXh0ZW50cyBjb3VudC4KKyAqCisgKiBAcGh5c2ljYWxfbGlzdF9oZWFkOgl0aGUgaGVhZCBvZiB0aGUgcGh5c2ljYWwgZXh0ZW50IGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3BoeXNpY2FsX2NvdW50KHN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKnBoeXNpY2FsX2xpc3RfaGVhZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0ICpleHRfbGlzdF90bXAgPSBwaHlzaWNhbF9saXN0X2hlYWQ7CisKKwlkbyB7CisJCWlmICgoZXh0X2xpc3RfdG1wLT5kYXRhLnBoeXNpY2FsICsgZXh0X2xpc3RfdG1wLT5kYXRhLmxlbikKKwkJCQkhPSBleHRfbGlzdF90bXAtPm5leHQtPmRhdGEucGh5c2ljYWwgfHwKKwkJICAgIChleHRfbGlzdF90bXAtPmRhdGEubG9naWNhbCArIGV4dF9saXN0X3RtcC0+ZGF0YS5sZW4pCisJCQkJIT0gZXh0X2xpc3RfdG1wLT5uZXh0LT5kYXRhLmxvZ2ljYWwpIHsKKwkJCS8qIFRoaXMgZXh0ZW50IGFuZCBuZXh0IGV4dGVudCBhcmUgbm90IGNvbnRpbnVvdXMuICovCisJCQlyZXQrKzsKKwkJfQorCisJCWV4dF9saXN0X3RtcCA9IGV4dF9saXN0X3RtcC0+bmV4dDsKKwl9IHdoaWxlIChleHRfbGlzdF90bXAgIT0gcGh5c2ljYWxfbGlzdF9oZWFkKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBjaGFuZ2VfcGh5c2ljYWxfdG9fbG9naWNhbCgpIC0JQ2hhbmdlIGxpc3QgZnJvbSBwaHlzaWNhbCB0byBsb2dpY2FsLgorICoKKyAqIEBwaHlzaWNhbF9saXN0X2hlYWQ6CXRoZSBoZWFkIG9mIHBoeXNpY2FsIGV4dGVudCBsaXN0LgorICogQGxvZ2ljYWxfbGlzdF9oZWFkOgl0aGUgaGVhZCBvZiBsb2dpY2FsIGV4dGVudCBsaXN0LgorICovCitzdGF0aWMgaW50IGNoYW5nZV9waHlzaWNhbF90b19sb2dpY2FsKAorCQkJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqKnBoeXNpY2FsX2xpc3RfaGVhZCwKKwkJCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKipsb2dpY2FsX2xpc3RfaGVhZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKmV4dF9saXN0X3RtcCA9ICpwaHlzaWNhbF9saXN0X2hlYWQ7CisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqZXh0X2xpc3RfbmV4dCA9IGV4dF9saXN0X3RtcC0+bmV4dDsKKworCXdoaWxlICgxKSB7CisJCWlmIChleHRfbGlzdF90bXAgPT0gZXh0X2xpc3RfbmV4dCkgeworCQkJcmV0ID0gaW5zZXJ0X2V4dGVudF9ieV9sb2dpY2FsKAorCQkJCWxvZ2ljYWxfbGlzdF9oZWFkLCBleHRfbGlzdF90bXApOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC0xOworCisJCQkqcGh5c2ljYWxfbGlzdF9oZWFkID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisKKwkJZXh0X2xpc3RfdG1wLT5wcmV2LT5uZXh0ID0gZXh0X2xpc3RfdG1wLT5uZXh0OworCQlleHRfbGlzdF90bXAtPm5leHQtPnByZXYgPSBleHRfbGlzdF90bXAtPnByZXY7CisJCSpwaHlzaWNhbF9saXN0X2hlYWQgPSBleHRfbGlzdF9uZXh0OworCisJCXJldCA9IGluc2VydF9leHRlbnRfYnlfbG9naWNhbCgKKwkJCWxvZ2ljYWxfbGlzdF9oZWFkLCBleHRfbGlzdF90bXApOworCQlpZiAocmV0IDwgMCkgeworCQkJRlJFRShleHRfbGlzdF90bXApOworCQkJcmV0dXJuIC0xOworCQl9CisJCWV4dF9saXN0X3RtcCA9IGV4dF9saXN0X25leHQ7CisJCWV4dF9saXN0X25leHQgPSBleHRfbGlzdF9uZXh0LT5uZXh0OworCX0KKworCXJldHVybiAwOworfQorCisvKiBnZXRfZmlsZV9ibG9ja3MoKSAtICBHZXQgdG90YWwgZmlsZSBibG9ja3MuCisgKgorICogQGV4dF9saXN0X2hlYWQ6CXRoZSBleHRlbnQgbGlzdCBoZWFkIG9mIHRoZSB0YXJnZXQgZmlsZQorICovCitzdGF0aWMgZXh0NF9mc2Jsa190IGdldF9maWxlX2Jsb2NrcyhzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0ICpleHRfbGlzdF9oZWFkKQoreworCWV4dDRfZnNibGtfdCBibGtfY291bnQgPSAwOworCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKmV4dF9saXN0X3RtcCA9IGV4dF9saXN0X2hlYWQ7CisKKwlkbyB7CisJCWJsa19jb3VudCArPSBleHRfbGlzdF90bXAtPmRhdGEubGVuOworCQlleHRfbGlzdF90bXAgPSBleHRfbGlzdF90bXAtPm5leHQ7CisJfSB3aGlsZSAoZXh0X2xpc3RfdG1wICE9IGV4dF9saXN0X2hlYWQpOworCisJcmV0dXJuIGJsa19jb3VudDsKK30KKworLyoKKyAqIGZyZWVfZXh0KCkgLQkJRnJlZSB0aGUgZXh0ZW50IGxpc3QuCisgKgorICogQGV4dF9saXN0X2hlYWQ6CXRoZSBleHRlbnQgbGlzdCBoZWFkIG9mIHdoaWNoIHdpbGwgYmUgZnJlZS4KKyAqLworc3RhdGljIHZvaWQgZnJlZV9leHQoc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqZXh0X2xpc3RfaGVhZCkKK3sKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0CSpleHRfbGlzdF90bXAgPSBOVUxMOworCisJaWYgKGV4dF9saXN0X2hlYWQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJd2hpbGUgKGV4dF9saXN0X2hlYWQtPm5leHQgIT0gZXh0X2xpc3RfaGVhZCkgeworCQlleHRfbGlzdF90bXAgPSBleHRfbGlzdF9oZWFkOworCQlleHRfbGlzdF9oZWFkLT5wcmV2LT5uZXh0ID0gZXh0X2xpc3RfaGVhZC0+bmV4dDsKKwkJZXh0X2xpc3RfaGVhZC0+bmV4dC0+cHJldiA9IGV4dF9saXN0X2hlYWQtPnByZXY7CisJCWV4dF9saXN0X2hlYWQgPSBleHRfbGlzdF9oZWFkLT5uZXh0OworCQlmcmVlKGV4dF9saXN0X3RtcCk7CisJfQorCWZyZWUoZXh0X2xpc3RfaGVhZCk7Cit9CisKKy8qCisgKiBmcmVlX2V4dHNfZ3JvdXAoKSAtCQlGcmVlIHRoZSBleHRzX2dyb3VwLgorICoKKyAqIEAqZXh0X2dyb3VwX2hlYWQ6CXRoZSBleHRzX2dyb3VwIGxpc3QgaGVhZCB3aGljaCB3aWxsIGJlIGZyZWUuCisgKi8KK3N0YXRpYyB2b2lkIGZyZWVfZXh0c19ncm91cChzdHJ1Y3QgZmllbWFwX2V4dGVudF9ncm91cCAqZXh0X2dyb3VwX2hlYWQpCit7CisJc3RydWN0IGZpZW1hcF9leHRlbnRfZ3JvdXAJKmV4dF9ncm91cF90bXAgPSBOVUxMOworCisJaWYgKGV4dF9ncm91cF9oZWFkID09IE5VTEwpCisJCXJldHVybjsKKworCXdoaWxlIChleHRfZ3JvdXBfaGVhZC0+bmV4dCAhPSBleHRfZ3JvdXBfaGVhZCkgeworCQlleHRfZ3JvdXBfdG1wID0gZXh0X2dyb3VwX2hlYWQ7CisJCWV4dF9ncm91cF9oZWFkLT5wcmV2LT5uZXh0ID0gZXh0X2dyb3VwX2hlYWQtPm5leHQ7CisJCWV4dF9ncm91cF9oZWFkLT5uZXh0LT5wcmV2ID0gZXh0X2dyb3VwX2hlYWQtPnByZXY7CisJCWV4dF9ncm91cF9oZWFkID0gZXh0X2dyb3VwX2hlYWQtPm5leHQ7CisJCWZyZWUoZXh0X2dyb3VwX3RtcCk7CisJfQorCWZyZWUoZXh0X2dyb3VwX2hlYWQpOworfQorCisvKgorICogZ2V0X2Jlc3RfY291bnQoKSAtCUdldCB0aGUgZmlsZSBiZXN0IGV4dGVudHMgY291bnQuCisgKgorICogQGJsb2NrX2NvdW50OgkJdGhlIGZpbGUncyBwaHlzaWNhbCBibG9jayBjb3VudC4KKyAqLworc3RhdGljIGludCBnZXRfYmVzdF9jb3VudChleHQ0X2ZzYmxrX3QgYmxvY2tfY291bnQpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgZmxleF9iZ19udW07CisKKwkvKiBDYWxjdWF0ZSBiZXN0IGV4dGVudHMgY291bnQgKi8KKwlpZiAoZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHKSB7CisJCWZsZXhfYmdfbnVtID0gMSA8PCBsb2dfZ3JvdXBzX3Blcl9mbGV4OworCQlyZXQgPSAoKGJsb2NrX2NvdW50IC0gMSkgLworCQkJKChleHQ0X2ZzYmxrX3QpYmxvY2tzX3Blcl9ncm91cCAqCisJCQkJZmxleF9iZ19udW0pKSArIDE7CisJfSBlbHNlCisJCXJldCA9ICgoYmxvY2tfY291bnQgLSAxKSAvIGJsb2Nrc19wZXJfZ3JvdXApICsgMTsKKworCXJldHVybiByZXQ7Cit9CisKKworLyoKKyAqIGZpbGVfc3RhdGlzdGljKCkgLQlHZXQgc3RhdGlzdGljIGluZm8gb2YgdGhlIGZpbGUncyBmcmFnbWVudHMuCisgKgorICogQGZpbGU6CQl0aGUgZmlsZSdzIG5hbWUuCisgKiBAYnVmOgkJdGhlIHBvaW50ZXIgb2YgdGhlIHN0cnVjdCBzdGF0NjQuCisgKiBAZmxhZzoJCWZpbGUgdHlwZS4KKyAqIEBmdHdidWY6CQl0aGUgcG9pbnRlciBvZiBhIHN0cnVjdCBGVFcuCisgKi8KK3N0YXRpYyBpbnQgZmlsZV9zdGF0aXN0aWMoY29uc3QgY2hhciAqZmlsZSwgY29uc3Qgc3RydWN0IHN0YXQ2NCAqYnVmLAorCQkJaW50IGZsYWcgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJc3RydWN0IEZUVyAqZnR3YnVmIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlpbnQJZmQ7CisJaW50CXJldDsKKwlpbnQJbm93X2V4dF9jb3VudCwgYmVzdF9leHRfY291bnQgPSAwLCBwaHlzaWNhbF9leHRfY291bnQ7CisJaW50CWksIGo7CisJX191NjQJc2l6ZV9wZXJfZXh0ID0gMDsKKwlmbG9hdAlyYXRpbyA9IDAuMDsKKwlleHQ0X2ZzYmxrX3QJYmxrX2NvdW50ID0gMDsKKwljaGFyCW1zZ19idWZmZXJbUEFUSF9NQVggKyAyNF07CisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqcGh5c2ljYWxfbGlzdF9oZWFkID0gTlVMTDsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0ICpsb2dpY2FsX2xpc3RfaGVhZCA9IE5VTEw7CisKKwlkZWZyYWdlZF9maWxlX2NvdW50Kys7CisKKwlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCWlmICh0b3RhbF9jb3VudCA9PSAxICYmIHJlZ3VsYXJfY291bnQgPT0gMSkKKwkJCXByaW50ZigiPEZpbGU+XG4iKTsKKwkJZWxzZSB7CisJCQlwcmludGYoIlsldS8ldV0iLCBkZWZyYWdlZF9maWxlX2NvdW50LCB0b3RhbF9jb3VudCk7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJfQorCX0KKwlpZiAobG9zdF9mb3VuZF9kaXJbMF0gIT0gJ1wwJyAmJgorCSAgICAhbWVtY21wKGZpbGUsIGxvc3RfZm91bmRfZGlyLCBzdHJubGVuKGxvc3RfZm91bmRfZGlyLCBQQVRIX01BWCkpKSB7CisJCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJCVBSSU5UX0ZJTEVfTkFNRShmaWxlKTsKKwkJCVNUQVRJU1RJQ19FUlJfTVNHKE5HTVNHX0xPU1RfRk9VTkQpOworCQl9CisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIVNfSVNSRUcoYnVmLT5zdF9tb2RlKSkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlTVEFUSVNUSUNfRVJSX01TRyhOR01TR19GSUxFX1VOUkVHKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBBY2Nlc3MgYXV0aG9yaXR5ICovCisJaWYgKGN1cnJlbnRfdWlkICE9IFJPT1RfVUlEICYmCisJCWJ1Zi0+c3RfdWlkICE9IGN1cnJlbnRfdWlkKSB7CisJCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJCVBSSU5UX0ZJTEVfTkFNRShmaWxlKTsKKwkJCVNUQVRJU1RJQ19FUlJfTVNHKAorCQkJCSJGaWxlIGlzIG5vdCBjdXJyZW50IHVzZXIncyBmaWxlIgorCQkJCSIgb3IgY3VycmVudCB1c2VyIGlzIG5vdCByb290Iik7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJLyogRW1wdHkgZmlsZSAqLworCWlmIChidWYtPnN0X3NpemUgPT0gMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlTVEFUSVNUSUNfRVJSX01TRygiRmlsZSBzaXplIGlzIDAiKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBIYXMgbm8gYmxvY2tzICovCisJaWYgKGJ1Zi0+c3RfYmxvY2tzID09IDApIHsKKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJUFJJTlRfRklMRV9OQU1FKGZpbGUpOworCQkJU1RBVElTVElDX0VSUl9NU0coIkZpbGUgaGFzIG5vIGJsb2NrcyIpOworCQl9CisJCXJldHVybiAwOworCX0KKworCWZkID0gb3BlbjY0KGZpbGUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKSB7CisJCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJCVBSSU5UX0ZJTEVfTkFNRShmaWxlKTsKKwkJCVNUQVRJU1RJQ19FUlJfTVNHX1dJVEhfRVJSTk8oTkdNU0dfRklMRV9PUEVOKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBHZXQgZmlsZSdzIHBoeXNpY2FsIGV4dGVudHMgICovCisJcmV0ID0gZ2V0X2ZpbGVfZXh0ZW50cyhmZCwgJnBoeXNpY2FsX2xpc3RfaGVhZCk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJUFJJTlRfRklMRV9OQU1FKGZpbGUpOworCQkJU1RBVElTVElDX0VSUl9NU0dfV0lUSF9FUlJOTyhOR01TR19GSUxFX0VYVEVOVCk7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJLyogR2V0IHRoZSBjb3VudCBvZiBmaWxlJ3MgY29udGludW91cyBwaHlzaWNhbCByZWdpb24gKi8KKwlwaHlzaWNhbF9leHRfY291bnQgPSBnZXRfcGh5c2ljYWxfY291bnQocGh5c2ljYWxfbGlzdF9oZWFkKTsKKworCS8qIENoYW5nZSBsaXN0IGZyb20gcGh5c2ljYWwgdG8gbG9naWNhbCAqLworCXJldCA9IGNoYW5nZV9waHlzaWNhbF90b19sb2dpY2FsKCZwaHlzaWNhbF9saXN0X2hlYWQsCisJCQkJCQkJJmxvZ2ljYWxfbGlzdF9oZWFkKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlTVEFUSVNUSUNfRVJSX01TR19XSVRIX0VSUk5PKE5HTVNHX0ZJTEVfRVhURU5UKTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwkvKiBDb3VudCBmaWxlIGZyYWdtZW50cyBiZWZvcmUgZGVmcmFnICovCisJbm93X2V4dF9jb3VudCA9IGdldF9sb2dpY2FsX2NvdW50KGxvZ2ljYWxfbGlzdF9oZWFkKTsKKworCWlmIChjdXJyZW50X3VpZCA9PSBST09UX1VJRCkgeworCQkvKiBDYWxjdWxhdGUgdGhlIHNpemUgcGVyIGV4dGVudCAqLworCQlibGtfY291bnQgPSBnZXRfZmlsZV9ibG9ja3MobG9naWNhbF9saXN0X2hlYWQpOworCisJCWJlc3RfZXh0X2NvdW50ID0gZ2V0X2Jlc3RfY291bnQoYmxrX2NvdW50KTsKKworCQkvKiBlNGRlZnJhZyByb3VuZHMgc2l6ZV9wZXJfZXh0IHVwIHRvIGEgYmxvY2sgc2l6ZSBib3VuZGFyeSAqLworCQlzaXplX3Blcl9leHQgPSBibGtfY291bnQgKiAoYnVmLT5zdF9ibGtzaXplIC8gMTAyNCkgLworCQkJCQkJCW5vd19leHRfY291bnQ7CisKKwkJcmF0aW8gPSAoZmxvYXQpKHBoeXNpY2FsX2V4dF9jb3VudCAtIGJlc3RfZXh0X2NvdW50KSAqIDEwMCAvCisJCQkJCQkJYmxrX2NvdW50OworCisJCWV4dGVudHNfYmVmb3JlX2RlZnJhZyArPSBub3dfZXh0X2NvdW50OworCQlleHRlbnRzX2FmdGVyX2RlZnJhZyArPSBiZXN0X2V4dF9jb3VudDsKKwkJZmlsZXNfYmxvY2tfY291bnQgKz0gYmxrX2NvdW50OworCX0KKworCWlmICh0b3RhbF9jb3VudCA9PSAxICYmIHJlZ3VsYXJfY291bnQgPT0gMSkgeworCQkvKiBGaWxlIG9ubHkgKi8KKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJaW50IGNvdW50ID0gMDsKKwkJCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKmV4dF9saXN0X3RtcCA9CisJCQkJCQlsb2dpY2FsX2xpc3RfaGVhZDsKKworCQkJLyogUHJpbnQgZXh0ZW50cyBpbmZvICovCisJCQlkbyB7CisJCQkJY291bnQrKzsKKwkJCQlwcmludGYoIltleHQgJWRdOlx0c3RhcnQgJWxsdTpcdGxvZ2ljYWwgIgorCQkJCQkJIiVsbHU6XHRsZW4gJWxsdVxuIiwgY291bnQsCisJCQkJCQlleHRfbGlzdF90bXAtPmRhdGEucGh5c2ljYWwsCisJCQkJCQlleHRfbGlzdF90bXAtPmRhdGEubG9naWNhbCwKKwkJCQkJCWV4dF9saXN0X3RtcC0+ZGF0YS5sZW4pOworCQkJCWV4dF9saXN0X3RtcCA9IGV4dF9saXN0X3RtcC0+bmV4dDsKKwkJCX0gd2hpbGUgKGV4dF9saXN0X3RtcCAhPSBsb2dpY2FsX2xpc3RfaGVhZCk7CisKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiJS00MHMlMTBzLyUtMTBzJTlzXG4iLAorCQkJCQkiPEZpbGU+IiwgIm5vdyIsICJiZXN0IiwgInNpemUvZXh0Iik7CisJCQlpZiAoY3VycmVudF91aWQgPT0gUk9PVF9VSUQpIHsKKwkJCQlpZiAoc3RybGVuKGZpbGUpID4gNDApCisJCQkJCXByaW50ZigiJXNcbiU1MGQvJS0xMGQlNmxsdSBLQlxuIiwKKwkJCQkJCWZpbGUsIG5vd19leHRfY291bnQsCisJCQkJCQliZXN0X2V4dF9jb3VudCwgc2l6ZV9wZXJfZXh0KTsKKwkJCQllbHNlCisJCQkJCXByaW50ZigiJS00MHMlMTBkLyUtMTBkJTZsbHUgS0JcbiIsCisJCQkJCQlmaWxlLCBub3dfZXh0X2NvdW50LAorCQkJCQkJYmVzdF9leHRfY291bnQsIHNpemVfcGVyX2V4dCk7CisJCQl9IGVsc2UgeworCQkJCWlmIChzdHJsZW4oZmlsZSkgPiA0MCkKKwkJCQkJcHJpbnRmKCIlc1xuJTUwZC8lLTEwcyU3c1xuIiwKKwkJCQkJCQlmaWxlLCBub3dfZXh0X2NvdW50LAorCQkJCQkJCSItIiwgIi0iKTsKKwkJCQllbHNlCisJCQkJCXByaW50ZigiJS00MHMlMTBkLyUtMTBzJTdzXG4iLAorCQkJCQkJCWZpbGUsIG5vd19leHRfY291bnQsCisJCQkJCQkJIi0iLCAiLSIpOworCQkJfQorCQl9CisJCXN1Y2NlZWRfY250Kys7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJLyogUHJpbnQgc3RhdGlzdGljIGluZm8gKi8KKwkJc3ByaW50Zihtc2dfYnVmZmVyLCAiWyV1LyV1XSVzIiwKKwkJCQlkZWZyYWdlZF9maWxlX2NvdW50LCB0b3RhbF9jb3VudCwgZmlsZSk7CisJCWlmIChjdXJyZW50X3VpZCA9PSBST09UX1VJRCkgeworCQkJaWYgKHN0cmxlbihtc2dfYnVmZmVyKSA+IDQwKQorCQkJCXByaW50ZigiXDAzM1s3OTswSFwwMzNbSyVzXG4iCisJCQkJCQkiJTUwZC8lLTEwZCU2bGx1IEtCXG4iLAorCQkJCQkJbXNnX2J1ZmZlciwgbm93X2V4dF9jb3VudCwKKwkJCQkJCWJlc3RfZXh0X2NvdW50LCBzaXplX3Blcl9leHQpOworCQkJZWxzZQorCQkJCXByaW50ZigiXDAzM1s3OTswSFwwMzNbSyUtNDBzIgorCQkJCQkJIiUxMGQvJS0xMGQlNmxsdSBLQlxuIiwKKwkJCQkJCW1zZ19idWZmZXIsIG5vd19leHRfY291bnQsCisJCQkJCQliZXN0X2V4dF9jb3VudCwgc2l6ZV9wZXJfZXh0KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzdHJsZW4obXNnX2J1ZmZlcikgPiA0MCkKKwkJCQlwcmludGYoIlwwMzNbNzk7MEhcMDMzW0slc1xuJTUwZC8lLTEwcyU3c1xuIiwKKwkJCQkJCW1zZ19idWZmZXIsIG5vd19leHRfY291bnQsCisJCQkJCQkJIi0iLCAiLSIpOworCQkJZWxzZQorCQkJCXByaW50ZigiXDAzM1s3OTswSFwwMzNbSyUtNDBzJTEwZC8lLTEwcyU3c1xuIiwKKwkJCQkJCW1zZ19idWZmZXIsIG5vd19leHRfY291bnQsCisJCQkJCQkJIi0iLCAiLSIpOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IFNIT1dfRlJBR19GSUxFUzsgaSsrKSB7CisJCWlmIChyYXRpbyA+PSBmcmFnX3JhbmtbaV0ucmF0aW8pIHsKKwkJCWZvciAoaiA9IFNIT1dfRlJBR19GSUxFUyAtIDE7IGogPiBpOyBqLS0pIHsKKwkJCQltZW1zZXQoJmZyYWdfcmFua1tqXSwgMCwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBmcmFnX3N0YXRpc3RpY19pbm8pKTsKKwkJCQlzdHJuY3B5KGZyYWdfcmFua1tqXS5tc2dfYnVmZmVyLAorCQkJCQlmcmFnX3JhbmtbaiAtIDFdLm1zZ19idWZmZXIsCisJCQkJCXN0cm5sZW4oZnJhZ19yYW5rW2ogLSAxXS5tc2dfYnVmZmVyLAorCQkJCQlQQVRIX01BWCkpOworCQkJCWZyYWdfcmFua1tqXS5ub3dfY291bnQgPQorCQkJCQlmcmFnX3JhbmtbaiAtIDFdLm5vd19jb3VudDsKKwkJCQlmcmFnX3Jhbmtbal0uYmVzdF9jb3VudCA9CisJCQkJCWZyYWdfcmFua1tqIC0gMV0uYmVzdF9jb3VudDsKKwkJCQlmcmFnX3Jhbmtbal0uc2l6ZV9wZXJfZXh0ID0KKwkJCQkJZnJhZ19yYW5rW2ogLSAxXS5zaXplX3Blcl9leHQ7CisJCQkJZnJhZ19yYW5rW2pdLnJhdGlvID0KKwkJCQkJZnJhZ19yYW5rW2ogLSAxXS5yYXRpbzsKKwkJCX0KKwkJCW1lbXNldCgmZnJhZ19yYW5rW2ldLCAwLAorCQkJCQlzaXplb2Yoc3RydWN0IGZyYWdfc3RhdGlzdGljX2lubykpOworCQkJc3RybmNweShmcmFnX3JhbmtbaV0ubXNnX2J1ZmZlciwgZmlsZSwKKwkJCQkJCXN0cm5sZW4oZmlsZSwgUEFUSF9NQVgpKTsKKwkJCWZyYWdfcmFua1tpXS5ub3dfY291bnQgPSBub3dfZXh0X2NvdW50OworCQkJZnJhZ19yYW5rW2ldLmJlc3RfY291bnQgPSBiZXN0X2V4dF9jb3VudDsKKwkJCWZyYWdfcmFua1tpXS5zaXplX3Blcl9leHQgPSBzaXplX3Blcl9leHQ7CisJCQlmcmFnX3JhbmtbaV0ucmF0aW8gPSByYXRpbzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3VjY2VlZF9jbnQrKzsKKworb3V0OgorCWNsb3NlKGZkKTsKKwlmcmVlX2V4dChwaHlzaWNhbF9saXN0X2hlYWQpOworCWZyZWVfZXh0KGxvZ2ljYWxfbGlzdF9oZWFkKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHByaW50X3Byb2dyZXNzIC0JUHJpbnQgZGVmcmFnIHByb2dyZXNzCisgKgorICogQGZpbGU6CQlmaWxlIG5hbWUuCisgKiBAc3RhcnQ6CQlsb2dpY2FsIG9mZnNldCBmb3IgZGVmcmFnIHRhcmdldCBmaWxlCisgKiBAZmlsZV9zaXplOgkJZGVmcmFnIHRhcmdldCBmaWxlc2l6ZQorICovCitzdGF0aWMgdm9pZCBwcmludF9wcm9ncmVzcyhjb25zdCBjaGFyICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBmaWxlX3NpemUpCit7CisJaW50IHBlcmNlbnQgPSAoc3RhcnQgKiAxMDApIC8gZmlsZV9zaXplOworCXByaW50ZigiXDAzM1s3OTswSFwwMzNbS1sldS8ldV0lczpcdCUzZCUlIiwKKwkJZGVmcmFnZWRfZmlsZV9jb3VudCwgdG90YWxfY291bnQsIGZpbGUsIG1pbihwZXJjZW50LCAxMDApKTsKKwlmZmx1c2goc3Rkb3V0KTsKKworCXJldHVybjsKK30KKworLyoKKyAqIGNhbGxfZGVmcmFnKCkgLQlFeGVjdXRlIHRoZSBkZWZyYWcgcHJvZ3JhbS4KKyAqCisgKiBAZmQ6CQkJdGFyZ2V0IGZpbGUgZGVzY3JpcHRvci4KKyAqIEBkb25vcl9mZDoJCWRvbm9yIGZpbGUgZGVzY3JpcHRvci4KKyAqIEBmaWxlOgkJCXRhcmdldCBmaWxlIG5hbWUuCisgKiBAYnVmOgkJCXBvaW50ZXIgb2YgdGhlIHN0cnVjdCBzdGF0NjQuCisgKiBAZXh0X2xpc3RfaGVhZDoJaGVhZCBvZiB0aGUgZXh0ZW50IGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgY2FsbF9kZWZyYWcoaW50IGZkLCBpbnQgZG9ub3JfZmQsIGNvbnN0IGNoYXIgKmZpbGUsCisJY29uc3Qgc3RydWN0IHN0YXQ2NCAqYnVmLCBzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0ICpleHRfbGlzdF9oZWFkKQoreworCWxvZmZfdAlzdGFydCA9IDA7CisJdW5zaWduZWQgaW50CXBhZ2VfbnVtOworCXVuc2lnbmVkIGNoYXIJKnZlYyA9IE5VTEw7CisJaW50CWRlZnJhZ2VkX3JldCA9IDA7CisJaW50CXJldDsKKwlzdHJ1Y3QgbW92ZV9leHRlbnQJbW92ZV9kYXRhOworCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QJKmV4dF9saXN0X3RtcCA9IE5VTEw7CisKKwltZW1zZXQoJm1vdmVfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBtb3ZlX2V4dGVudCkpOworCW1vdmVfZGF0YS5kb25vcl9mZCA9IGRvbm9yX2ZkOworCisJLyogUHJpbnQgZGVmcmFnIHByb2dyZXNzICovCisJcHJpbnRfcHJvZ3Jlc3MoZmlsZSwgc3RhcnQsIGJ1Zi0+c3Rfc2l6ZSk7CisKKwlleHRfbGlzdF90bXAgPSBleHRfbGlzdF9oZWFkOworCWRvIHsKKwkJbW92ZV9kYXRhLm9yaWdfc3RhcnQgPSBleHRfbGlzdF90bXAtPmRhdGEubG9naWNhbDsKKwkJLyogTG9naWNhbCBvZmZzZXQgb2Ygb3JpZyBhbmQgZG9ub3Igc2hvdWxkIGJlIHNhbWUgKi8KKwkJbW92ZV9kYXRhLmRvbm9yX3N0YXJ0ID0gbW92ZV9kYXRhLm9yaWdfc3RhcnQ7CisJCW1vdmVfZGF0YS5sZW4gPSBleHRfbGlzdF90bXAtPmRhdGEubGVuOworCQltb3ZlX2RhdGEubW92ZWRfbGVuID0gMDsKKworCQlyZXQgPSBwYWdlX2luX2NvcmUoZmQsIG1vdmVfZGF0YSwgJnZlYywgJnBhZ2VfbnVtKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJCQlwcmludGYoIlxuIik7CisJCQkJUFJJTlRfRVJSX01TR19XSVRIX0VSUk5PKAorCQkJCQkJIkZhaWxlZCB0byBnZXQgZmlsZSBtYXAiKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRmKCJcdFsgTkcgXVxuIik7CisJCQl9CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQkvKiBFWFQ0X0lPQ19NT1ZFX0VYVCAqLworCQlkZWZyYWdlZF9yZXQgPQorCQkJaW9jdGwoZmQsIEVYVDRfSU9DX01PVkVfRVhULCAmbW92ZV9kYXRhKTsKKworCQkvKiBGcmVlIHBhZ2VzICovCisJCXJldCA9IGRlZnJhZ19mYWR2aXNlKGZkLCBtb3ZlX2RhdGEsIHZlYywgcGFnZV9udW0pOworCQlpZiAodmVjKSB7CisJCQlmcmVlKHZlYyk7CisJCQl2ZWMgPSBOVUxMOworCQl9CisJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQkJcHJpbnRmKCJcbiIpOworCQkJCVBSSU5UX0VSUl9NU0dfV0lUSF9FUlJOTygKKwkJCQkJIkZhaWxlZCB0byBmcmVlIHBhZ2UiKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRmKCJcdFsgTkcgXVxuIik7CisJCQl9CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoZGVmcmFnZWRfcmV0IDwgMCkgeworCQkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJCXByaW50ZigiXG4iKTsKKwkJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oCisJCQkJCSJGYWlsZWQgdG8gZGVmcmFnIHdpdGggIgorCQkJCQkiRVhUNF9JT0NfTU9WRV9FWFQgaW9jdGwiKTsKKwkJCQlpZiAoZXJybm8gPT0gRU5PVFRZKQorCQkJCQlwcmludGYoIlx0QXQgbGVhc3QgMi42LjMxLXJjMSBvZiAiCisJCQkJCQkidmFuaWxsYSBrZXJuZWwgaXMgcmVxdWlyZWRcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGYoIlx0WyBORyBdXG4iKTsKKwkJCX0KKwkJCXJldHVybiAtMTsKKwkJfQorCQkvKiBBZGp1c3QgbG9naWNhbCBvZmZzZXQgZm9yIG5leHQgaW9jdGwgKi8KKwkJbW92ZV9kYXRhLm9yaWdfc3RhcnQgKz0gbW92ZV9kYXRhLm1vdmVkX2xlbjsKKwkJbW92ZV9kYXRhLmRvbm9yX3N0YXJ0ID0gbW92ZV9kYXRhLm9yaWdfc3RhcnQ7CisKKwkJc3RhcnQgPSBtb3ZlX2RhdGEub3JpZ19zdGFydCAqIGJ1Zi0+c3RfYmxrc2l6ZTsKKworCQkvKiBQcmludCBkZWZyYWcgcHJvZ3Jlc3MgKi8KKwkJcHJpbnRfcHJvZ3Jlc3MoZmlsZSwgc3RhcnQsIGJ1Zi0+c3Rfc2l6ZSk7CisKKwkJLyogRW5kIG9mIGZpbGUgKi8KKwkJaWYgKHN0YXJ0ID49IGJ1Zi0+c3Rfc2l6ZSkKKwkJCWJyZWFrOworCisJCWV4dF9saXN0X3RtcCA9IGV4dF9saXN0X3RtcC0+bmV4dDsKKwl9IHdoaWxlIChleHRfbGlzdF90bXAgIT0gZXh0X2xpc3RfaGVhZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGZpbGVfZGVmcmFnKCkgLQkJQ2hlY2sgZmlsZSBhdHRyaWJ1dGVzIGFuZCBjYWxsIGlvY3RsIHRvIGRlZnJhZy4KKyAqCisgKiBAZmlsZToJCXRoZSBmaWxlJ3MgbmFtZS4KKyAqIEBidWY6CQl0aGUgcG9pbnRlciBvZiB0aGUgc3RydWN0IHN0YXQ2NC4KKyAqIEBmbGFnOgkJZmlsZSB0eXBlLgorICogQGZ0d2J1ZjoJCXRoZSBwb2ludGVyIG9mIGEgc3RydWN0IEZUVy4KKyAqLworc3RhdGljIGludCBmaWxlX2RlZnJhZyhjb25zdCBjaGFyICpmaWxlLCBjb25zdCBzdHJ1Y3Qgc3RhdDY0ICpidWYsCisJCQlpbnQgZmxhZyBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQlzdHJ1Y3QgRlRXICpmdHdidWYgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWludAlmZDsKKwlpbnQJZG9ub3JfZmQgPSAtMTsKKwlpbnQJcmV0OworCWludAliZXN0OworCWludAlmaWxlX2ZyYWdzX3N0YXJ0LCBmaWxlX2ZyYWdzX2VuZDsKKwlpbnQJb3JpZ19waHlzaWNhbF9jbnQsIGRvbm9yX3BoeXNpY2FsX2NudCA9IDA7CisJY2hhcgl0bXBfaW5vZGVfbmFtZVtQQVRIX01BWCArIDhdOworCWV4dDRfZnNibGtfdAkJCWJsa19jb3VudCA9IDA7CisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdAkqb3JpZ19saXN0X3BoeXNpY2FsID0gTlVMTDsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0CSpvcmlnX2xpc3RfbG9naWNhbCA9IE5VTEw7CisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdAkqZG9ub3JfbGlzdF9waHlzaWNhbCA9IE5VTEw7CisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdAkqZG9ub3JfbGlzdF9sb2dpY2FsID0gTlVMTDsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9ncm91cAkqb3JpZ19ncm91cF9oZWFkID0gTlVMTDsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9ncm91cAkqb3JpZ19ncm91cF90bXAgPSBOVUxMOworCisJZGVmcmFnZWRfZmlsZV9jb3VudCsrOworCisJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQlwcmludGYoIlsldS8ldV0iLCBkZWZyYWdlZF9maWxlX2NvdW50LCB0b3RhbF9jb3VudCk7CisJCWZmbHVzaChzdGRvdXQpOworCX0KKworCWlmIChsb3N0X2ZvdW5kX2RpclswXSAhPSAnXDAnICYmCisJICAgICFtZW1jbXAoZmlsZSwgbG9zdF9mb3VuZF9kaXIsIHN0cm5sZW4obG9zdF9mb3VuZF9kaXIsIFBBVEhfTUFYKSkpIHsKKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJUFJJTlRfRklMRV9OQU1FKGZpbGUpOworCQkJSU5fRlRXX1BSSU5UX0VSUl9NU0coTkdNU0dfTE9TVF9GT1VORCk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFTX0lTUkVHKGJ1Zi0+c3RfbW9kZSkpIHsKKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJUFJJTlRfRklMRV9OQU1FKGZpbGUpOworCQkJSU5fRlRXX1BSSU5UX0VSUl9NU0coTkdNU0dfRklMRV9VTlJFRyk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJLyogRW1wdHkgZmlsZSAqLworCWlmIChidWYtPnN0X3NpemUgPT0gMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlJTl9GVFdfUFJJTlRfRVJSX01TRygiRmlsZSBzaXplIGlzIDAiKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBIYXMgbm8gYmxvY2tzICovCisJaWYgKGJ1Zi0+c3RfYmxvY2tzID09IDApIHsKKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJUFJJTlRfRklMRV9OQU1FKGZpbGUpOworCQkJU1RBVElTVElDX0VSUl9NU0coIkZpbGUgaGFzIG5vIGJsb2NrcyIpOworCQl9CisJCXJldHVybiAwOworCX0KKworCWZkID0gb3BlbjY0KGZpbGUsIE9fUkRXUik7CisJaWYgKGZkIDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oTkdNU0dfRklMRV9PUEVOKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBHZXQgZmlsZSdzIGV4dGVudHMgKi8KKwlyZXQgPSBnZXRfZmlsZV9leHRlbnRzKGZkLCAmb3JpZ19saXN0X3BoeXNpY2FsKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oTkdNU0dfRklMRV9FWFRFTlQpOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCS8qIEdldCB0aGUgY291bnQgb2YgZmlsZSdzIGNvbnRpbnVvdXMgcGh5c2ljYWwgcmVnaW9uICovCisJb3JpZ19waHlzaWNhbF9jbnQgPSBnZXRfcGh5c2ljYWxfY291bnQob3JpZ19saXN0X3BoeXNpY2FsKTsKKworCS8qIENoYW5nZSBsaXN0IGZyb20gcGh5c2ljYWwgdG8gbG9naWNhbCAqLworCXJldCA9IGNoYW5nZV9waHlzaWNhbF90b19sb2dpY2FsKCZvcmlnX2xpc3RfcGh5c2ljYWwsCisJCQkJCQkJJm9yaWdfbGlzdF9sb2dpY2FsKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oTkdNU0dfRklMRV9FWFRFTlQpOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCS8qIENvdW50IGZpbGUgZnJhZ21lbnRzIGJlZm9yZSBkZWZyYWcgKi8KKwlmaWxlX2ZyYWdzX3N0YXJ0ID0gZ2V0X2xvZ2ljYWxfY291bnQob3JpZ19saXN0X2xvZ2ljYWwpOworCisJYmxrX2NvdW50ID0gZ2V0X2ZpbGVfYmxvY2tzKG9yaWdfbGlzdF9sb2dpY2FsKTsKKwlpZiAoZmlsZV9jaGVjayhmZCwgYnVmLCBmaWxlLCBmaWxlX2ZyYWdzX3N0YXJ0LCBibGtfY291bnQpIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZnN5bmMoZmQpIDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oIkZhaWxlZCB0byBzeW5jKGZzeW5jKSIpOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjdXJyZW50X3VpZCA9PSBST09UX1VJRCkKKwkJYmVzdCA9IGdldF9iZXN0X2NvdW50KGJsa19jb3VudCk7CisJZWxzZQorCQliZXN0ID0gMTsKKworCWlmIChmaWxlX2ZyYWdzX3N0YXJ0IDw9IGJlc3QpCisJCWdvdG8gY2hlY2tfaW1wcm92ZW1lbnQ7CisKKwkvKiBDb21iaW5lIGV4dGVudHMgdG8gZ3JvdXAgKi8KKwlyZXQgPSBqb2luX2V4dGVudHMob3JpZ19saXN0X2xvZ2ljYWwsICZvcmlnX2dyb3VwX2hlYWQpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJCVBSSU5UX0ZJTEVfTkFNRShmaWxlKTsKKwkJCVBSSU5UX0VSUl9NU0dfV0lUSF9FUlJOTyhOR01TR19GSUxFX0VYVEVOVCk7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJLyogQ3JlYXRlIGRvbm9yIGlub2RlICovCisJbWVtc2V0KHRtcF9pbm9kZV9uYW1lLCAwLCBQQVRIX01BWCArIDgpOworCXNwcmludGYodG1wX2lub2RlX25hbWUsICIlLipzLmRlZnJhZyIsCisJCQkJKGludClzdHJubGVuKGZpbGUsIFBBVEhfTUFYKSwgZmlsZSk7CisJZG9ub3JfZmQgPSBvcGVuNjQodG1wX2lub2RlX25hbWUsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgU19JUlVTUik7CisJaWYgKGRvbm9yX2ZkIDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlpZiAoZXJybm8gPT0gRUVYSVNUKQorCQkJCVBSSU5UX0VSUl9NU0dfV0lUSF9FUlJOTygKKwkJCQkiRmlsZSBpcyBiZWluZyBkZWZyYWdlZCBieSBvdGhlciBwcm9ncmFtIik7CisJCQllbHNlCisJCQkJUFJJTlRfRVJSX01TR19XSVRIX0VSUk5PKE5HTVNHX0ZJTEVfT1BFTik7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJLyogVW5saW5rIGRvbm9yIGlub2RlICovCisJcmV0ID0gdW5saW5rKHRtcF9pbm9kZV9uYW1lKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oIkZhaWxlZCB0byB1bmxpbmsiKTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZG9ub3IgaW5vZGUgKi8KKwlvcmlnX2dyb3VwX3RtcCA9IG9yaWdfZ3JvdXBfaGVhZDsKKwlkbyB7CisJCXJldCA9IGZhbGxvY2F0ZTY0KGRvbm9yX2ZkLCAwLAorCQkgIChsb2ZmX3Qpb3JpZ19ncm91cF90bXAtPnN0YXJ0LT5kYXRhLmxvZ2ljYWwgKiBibG9ja19zaXplLAorCQkgIChsb2ZmX3Qpb3JpZ19ncm91cF90bXAtPmxlbiAqIGJsb2NrX3NpemUpOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJCVBSSU5UX0ZJTEVfTkFNRShmaWxlKTsKKwkJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oIkZhaWxlZCB0byBmYWxsb2NhdGUiKTsKKwkJCX0KKwkJCWdvdG8gb3V0OworCQl9CisKKwkJb3JpZ19ncm91cF90bXAgPSBvcmlnX2dyb3VwX3RtcC0+bmV4dDsKKwl9IHdoaWxlIChvcmlnX2dyb3VwX3RtcCAhPSBvcmlnX2dyb3VwX2hlYWQpOworCisJLyogR2V0IGRvbm9yIGlub2RlJ3MgZXh0ZW50cyAqLworCXJldCA9IGdldF9maWxlX2V4dGVudHMoZG9ub3JfZmQsICZkb25vcl9saXN0X3BoeXNpY2FsKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oTkdNU0dfRklMRV9FWFRFTlQpOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCS8qIENhbGN1YXRlIGRvbm9yIGlub2RlJ3MgY29udGludW91cyBwaHlzaWNhbCByZWdpb24gKi8KKwlkb25vcl9waHlzaWNhbF9jbnQgPSBnZXRfcGh5c2ljYWxfY291bnQoZG9ub3JfbGlzdF9waHlzaWNhbCk7CisKKwkvKiBDaGFuZ2UgZG9ub3IgZXh0ZW50IGxpc3QgZnJvbSBwaHlzaWNhbCB0byBsb2dpY2FsICovCisJcmV0ID0gY2hhbmdlX3BoeXNpY2FsX3RvX2xvZ2ljYWwoJmRvbm9yX2xpc3RfcGh5c2ljYWwsCisJCQkJCQkJJmRvbm9yX2xpc3RfbG9naWNhbCk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJUFJJTlRfRklMRV9OQU1FKGZpbGUpOworCQkJUFJJTlRfRVJSX01TR19XSVRIX0VSUk5PKE5HTVNHX0ZJTEVfRVhURU5UKTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKK2NoZWNrX2ltcHJvdmVtZW50OgorCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJaWYgKGZpbGVfZnJhZ3Nfc3RhcnQgIT0gMSkKKwkJCWZyYWdfZmlsZXNfYmVmb3JlX2RlZnJhZysrOworCisJCWV4dGVudHNfYmVmb3JlX2RlZnJhZyArPSBmaWxlX2ZyYWdzX3N0YXJ0OworCX0KKworCWlmIChmaWxlX2ZyYWdzX3N0YXJ0IDw9IGJlc3QgfHwKKwkJCW9yaWdfcGh5c2ljYWxfY250IDw9IGRvbm9yX3BoeXNpY2FsX2NudCkgeworCQlwcmludGYoIlwwMzNbNzk7MEhcMDMzW0tbJXUvJXVdJXM6XHQlM2QlJSIsCisJCQlkZWZyYWdlZF9maWxlX2NvdW50LCB0b3RhbF9jb3VudCwgZmlsZSwgMTAwKTsKKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkKKwkJCXByaW50ZigiICBleHRlbnRzOiAlZCAtPiAlZCIsCisJCQkJZmlsZV9mcmFnc19zdGFydCwgZmlsZV9mcmFnc19zdGFydCk7CisKKwkJcHJpbnRmKCJcdFsgT0sgXVxuIik7CisJCXN1Y2NlZWRfY250Kys7CisKKwkJaWYgKGZpbGVfZnJhZ3Nfc3RhcnQgIT0gMSkKKwkJCWZyYWdfZmlsZXNfYWZ0ZXJfZGVmcmFnKys7CisKKwkJZXh0ZW50c19hZnRlcl9kZWZyYWcgKz0gZmlsZV9mcmFnc19zdGFydDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRGVmcmFnIHRoZSBmaWxlICovCisJcmV0ID0gY2FsbF9kZWZyYWcoZmQsIGRvbm9yX2ZkLCBmaWxlLCBidWYsIGRvbm9yX2xpc3RfbG9naWNhbCk7CisKKwkvKiBDb3VudCBmaWxlIGZyYWdtZW50cyBhZnRlciBkZWZyYWcgYW5kIHByaW50IGV4dGVudHMgaW5mbyAqLworCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJZmlsZV9mcmFnc19lbmQgPSBmaWxlX2ZyYWdfY291bnQoZmQpOworCQlpZiAoZmlsZV9mcmFnc19lbmQgPCAwKSB7CisJCQlwcmludGYoIlxuIik7CisJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oTkdNU0dfRklMRV9JTkZPKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGZpbGVfZnJhZ3NfZW5kICE9IDEpCisJCQlmcmFnX2ZpbGVzX2FmdGVyX2RlZnJhZysrOworCisJCWV4dGVudHNfYWZ0ZXJfZGVmcmFnICs9IGZpbGVfZnJhZ3NfZW5kOworCisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJcHJpbnRmKCIgIGV4dGVudHM6ICVkIC0+ICVkIiwKKwkJCWZpbGVfZnJhZ3Nfc3RhcnQsIGZpbGVfZnJhZ3NfZW5kKTsKKwkJZmZsdXNoKHN0ZG91dCk7CisJfQorCisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcHJpbnRmKCJcdFsgT0sgXVxuIik7CisJZmZsdXNoKHN0ZG91dCk7CisJc3VjY2VlZF9jbnQrKzsKKworb3V0OgorCWNsb3NlKGZkKTsKKwlpZiAoZG9ub3JfZmQgIT0gLTEpCisJCWNsb3NlKGRvbm9yX2ZkKTsKKwlmcmVlX2V4dChvcmlnX2xpc3RfcGh5c2ljYWwpOworCWZyZWVfZXh0KG9yaWdfbGlzdF9sb2dpY2FsKTsKKwlmcmVlX2V4dChkb25vcl9saXN0X3BoeXNpY2FsKTsKKwlmcmVlX2V4dHNfZ3JvdXAob3JpZ19ncm91cF9oZWFkKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG1haW4oKSAtCQlFeHQ0IG9ubGluZSBkZWZyYWcuCisgKgorICogQGFyZ2M6CQl0aGUgbnVtYmVyIG9mIHBhcmFtZXRlci4KKyAqIEBhcmd2W106CQl0aGUgcG9pbnRlciBhcnJheSBvZiBwYXJhbWV0ZXIuCisgKi8KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50CW9wdDsKKwlpbnQJaSwgaiwgcmV0ID0gMDsKKwlpbnQJZmxhZ3MgPSBGVFdfUEhZUyB8IEZUV19NT1VOVDsKKwlpbnQJYXJnX3R5cGUgPSAtMTsKKwlpbnQJc3VjY2Vzc19mbGFnID0gMDsKKwljaGFyCWRpcl9uYW1lW1BBVEhfTUFYICsgMV07CisJY2hhcglkZXZfbmFtZVtQQVRIX01BWCArIDFdOworCXN0cnVjdCBzdGF0NjQJYnVmOworCWV4dDJfZmlsc3lzIGZzID0gTlVMTDsKKworCS8qIFBhcnNlIGFyZ3VtZW50cyAqLworCWlmIChhcmdjID09IDEpCisJCWdvdG8gb3V0OworCisJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgInZjIikpICE9IEVPRikgeworCQlzd2l0Y2ggKG9wdCkgeworCQljYXNlICd2JzoKKwkJCW1vZGVfZmxhZyB8PSBERVRBSUw7CisJCQlicmVhazsKKwkJY2FzZSAnYyc6CisJCQltb2RlX2ZsYWcgfD0gU1RBVElTVElDOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChhcmdjID09IG9wdGluZCkKKwkJZ290byBvdXQ7CisKKwljdXJyZW50X3VpZCA9IGdldHVpZCgpOworCisJLyogTWFpbiBwcm9jZXNzICovCisJZm9yIChpID0gb3B0aW5kOyBpIDwgYXJnYzsgaSsrKSB7CisJCXN1Y2NlZWRfY250ID0gMDsKKwkJcmVndWxhcl9jb3VudCA9IDA7CisJCXRvdGFsX2NvdW50ID0gMDsKKwkJZnJhZ19maWxlc19iZWZvcmVfZGVmcmFnID0gMDsKKwkJZnJhZ19maWxlc19hZnRlcl9kZWZyYWcgPSAwOworCQlleHRlbnRzX2JlZm9yZV9kZWZyYWcgPSAwOworCQlleHRlbnRzX2FmdGVyX2RlZnJhZyA9IDA7CisJCWRlZnJhZ2VkX2ZpbGVfY291bnQgPSAwOworCQlmaWxlc19ibG9ja19jb3VudCA9IDA7CisJCWJsb2Nrc19wZXJfZ3JvdXAgPSAwOworCQlmZWF0dXJlX2luY29tcGF0ID0gMDsKKwkJbG9nX2dyb3Vwc19wZXJfZmxleCA9IDA7CisKKwkJbWVtc2V0KGRpcl9uYW1lLCAwLCBQQVRIX01BWCArIDEpOworCQltZW1zZXQoZGV2X25hbWUsIDAsIFBBVEhfTUFYICsgMSk7CisJCW1lbXNldChsb3N0X2ZvdW5kX2RpciwgMCwgUEFUSF9NQVggKyAxKTsKKwkJbWVtc2V0KGZyYWdfcmFuaywgMCwKKwkJCXNpemVvZihzdHJ1Y3QgZnJhZ19zdGF0aXN0aWNfaW5vKSAqIFNIT1dfRlJBR19GSUxFUyk7CisKKwkJaWYgKChtb2RlX2ZsYWcgJiBTVEFUSVNUSUMpICYmIGkgPiBvcHRpbmQpCisJCQlwcmludGYoIlxuIik7CisKKyNpZiBCWVRFX09SREVSICE9IEJJR19FTkRJQU4gJiYgQllURV9PUkRFUiAhPSBMSVRUTEVfRU5ESUFOCisJCVBSSU5UX0VSUl9NU0coIkVuZGlhbidzIHR5cGUgaXMgbm90IGJpZy9saXR0bGUgZW5kaWFuIik7CisJCVBSSU5UX0ZJTEVfTkFNRShhcmd2W2ldKTsKKwkJY29udGludWU7CisjZW5kaWYKKworCQlpZiAobHN0YXQ2NChhcmd2W2ldLCAmYnVmKSA8IDApIHsKKwkJCXBlcnJvcihOR01TR19GSUxFX0lORk8pOworCQkJUFJJTlRfRklMRV9OQU1FKGFyZ3ZbaV0pOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBIYW5kbGUgaS5lLiBsdm0gZGV2aWNlIHN5bWxpbmtzICovCisJCWlmIChTX0lTTE5LKGJ1Zi5zdF9tb2RlKSkgeworCQkJc3RydWN0IHN0YXQ2NAlidWYyOworCisJCQlpZiAoc3RhdDY0KGFyZ3ZbaV0sICZidWYyKSA9PSAwICYmCisJCQkgICAgU19JU0JMSyhidWYyLnN0X21vZGUpKQorCQkJCWJ1ZiA9IGJ1ZjI7CisJCX0KKworCQlpZiAoU19JU0JMSyhidWYuc3RfbW9kZSkpIHsKKwkJCS8qIEJsb2NrIGRldmljZSAqLworCQkJc3RybmNweShkZXZfbmFtZSwgYXJndltpXSwgc3Rybmxlbihhcmd2W2ldLCBQQVRIX01BWCkpOworCQkJaWYgKGdldF9tb3VudF9wb2ludChhcmd2W2ldLCBkaXJfbmFtZSwgUEFUSF9NQVgpIDwgMCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChsc3RhdDY0KGRpcl9uYW1lLCAmYnVmKSA8IDApIHsKKwkJCQlwZXJyb3IoTkdNU0dfRklMRV9JTkZPKTsKKwkJCQlQUklOVF9GSUxFX05BTUUoYXJndltpXSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlhcmdfdHlwZSA9IERFVk5BTUU7CisJCQlpZiAoIShtb2RlX2ZsYWcgJiBTVEFUSVNUSUMpKQorCQkJCXByaW50ZigiZXh0NCBkZWZyYWdtZW50YXRpb24gZm9yIGRldmljZSglcylcbiIsCisJCQkJCWFyZ3ZbaV0pOworCQl9IGVsc2UgaWYgKFNfSVNESVIoYnVmLnN0X21vZGUpKSB7CisJCQkvKiBEaXJlY3RvcnkgKi8KKwkJCWlmIChhY2Nlc3MoYXJndltpXSwgUl9PSykgPCAwKSB7CisJCQkJcGVycm9yKGFyZ3ZbaV0pOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYXJnX3R5cGUgPSBESVJOQU1FOworCQkJc3RybmNweShkaXJfbmFtZSwgYXJndltpXSwgc3Rybmxlbihhcmd2W2ldLCBQQVRIX01BWCkpOworCQl9IGVsc2UgaWYgKFNfSVNSRUcoYnVmLnN0X21vZGUpKSB7CisJCQkvKiBSZWd1bGFyIGZpbGUgKi8KKwkJCWFyZ190eXBlID0gRklMRU5BTUU7CisJCX0gZWxzZSB7CisJCQkvKiBJcnJlZ3VsYXIgZmlsZSAqLworCQkJUFJJTlRfRVJSX01TRyhOR01TR19GSUxFX1VOUkVHKTsKKwkJCVBSSU5UX0ZJTEVfTkFNRShhcmd2W2ldKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2V0IGJsb2Nrc2l6ZSAqLworCQlibG9ja19zaXplID0gYnVmLnN0X2Jsa3NpemU7CisKKwkJLyogRm9yIGRldmljZSBjYXNlLAorCQkgKiBmaWxlc3lzdGVtIHR5cGUgY2hlY2tlZCBpbiBnZXRfbW91bnRfcG9pbnQoKQorCQkgKi8KKwkJaWYgKGFyZ190eXBlID09IEZJTEVOQU1FIHx8IGFyZ190eXBlID09IERJUk5BTUUpIHsKKwkJCWlmIChpc19leHQ0KGFyZ3ZbaV0sIGRldl9uYW1lKSA8IDApCisJCQkJY29udGludWU7CisJCQlpZiAocmVhbHBhdGgoYXJndltpXSwgZGlyX25hbWUpID09IE5VTEwpIHsKKwkJCQlwZXJyb3IoIkNvdWxkbid0IGdldCBmdWxsIHBhdGgiKTsKKwkJCQlQUklOVF9GSUxFX05BTUUoYXJndltpXSk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlpZiAoY3VycmVudF91aWQgPT0gUk9PVF9VSUQpIHsKKwkJCS8qIEdldCBzdXBlciBibG9jayBpbmZvICovCisJCQlyZXQgPSBleHQyZnNfb3BlbihkZXZfbmFtZSwgRVhUMl9GTEFHXzY0QklUUywgMCwKKwkJCQkJICBibG9ja19zaXplLCB1bml4X2lvX21hbmFnZXIsICZmcyk7CisJCQlpZiAocmV0KSB7CisJCQkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkKKwkJCQkJY29tX2Vycihhcmd2WzFdLCByZXQsCisJCQkJCQkid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZmlsZSBzeXN0ZW06ICVzIiwKKwkJCQkJCWRldl9uYW1lKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJYmxvY2tzX3Blcl9ncm91cCA9IGZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwOworCQkJZmVhdHVyZV9pbmNvbXBhdCA9IGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0OworCQkJbG9nX2dyb3Vwc19wZXJfZmxleCA9IGZzLT5zdXBlci0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4OworCisJCQlleHQyZnNfY2xvc2VfZnJlZSgmZnMpOworCQl9CisKKwkJc3dpdGNoIChhcmdfdHlwZSkgeworCQkJaW50IG1vdW50X2Rpcl9sZW4gPSAwOworCisJCWNhc2UgRElSTkFNRToKKwkJCWlmICghKG1vZGVfZmxhZyAmIFNUQVRJU1RJQykpCisJCQkJcHJpbnRmKCJleHQ0IGRlZnJhZ21lbnRhdGlvbiAiCisJCQkJCSJmb3IgZGlyZWN0b3J5KCVzKVxuIiwgYXJndltpXSk7CisKKwkJCW1vdW50X2Rpcl9sZW4gPSBzdHJubGVuKGxvc3RfZm91bmRfZGlyLCBQQVRIX01BWCk7CisKKwkJCXN0cm5jYXQobG9zdF9mb3VuZF9kaXIsICIvbG9zdCtmb3VuZCIsCisJCQkJUEFUSF9NQVggLSBzdHJubGVuKGxvc3RfZm91bmRfZGlyLCBQQVRIX01BWCkpOworCisJCQkvKiBOb3QgdGhlIGNhc2UoImU0ZGVmcmFnICBtb3VudF9waW9udF9kaXIiKSAqLworCQkJaWYgKGRpcl9uYW1lW21vdW50X2Rpcl9sZW5dICE9ICdcMCcpIHsKKwkJCQkvKgorCQkJCSAqICJlNGRlZnJhZyBtb3VudF9waW9udF9kaXIvbG9zdCtmb3VuZCIKKwkJCQkgKiBvciAiZTRkZWZyYWcgbW91bnRfcGlvbnRfZGlyL2xvc3QrZm91bmQvIgorCQkJCSAqLworCQkJCWlmIChzdHJuY21wKGxvc3RfZm91bmRfZGlyLCBkaXJfbmFtZSwKKwkJCQkJICAgIHN0cm5sZW4obG9zdF9mb3VuZF9kaXIsCisJCQkJCQkgICAgUEFUSF9NQVgpKSA9PSAwICYmCisJCQkJICAgIChkaXJfbmFtZVtzdHJubGVuKGxvc3RfZm91bmRfZGlyLAorCQkJCQkJICAgICAgUEFUSF9NQVgpXSA9PSAnXDAnIHx8CisJCQkJICAgICBkaXJfbmFtZVtzdHJubGVuKGxvc3RfZm91bmRfZGlyLAorCQkJCQkJICAgICAgUEFUSF9NQVgpXSA9PSAnLycpKSB7CisJCQkJCVBSSU5UX0VSUl9NU0coTkdNU0dfTE9TVF9GT1VORCk7CisJCQkJCVBSSU5UX0ZJTEVfTkFNRShhcmd2W2ldKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJLyogImU0ZGVmcmFnIG1vdW50X3Bpb250X2Rpci9lbHNlX2RpciIgKi8KKwkJCQltZW1zZXQobG9zdF9mb3VuZF9kaXIsIDAsIFBBVEhfTUFYICsgMSk7CisJCQl9CisJCWNhc2UgREVWTkFNRToKKwkJCWlmIChhcmdfdHlwZSA9PSBERVZOQU1FKSB7CisJCQkJc3RybmNweShsb3N0X2ZvdW5kX2RpciwgZGlyX25hbWUsCisJCQkJCXN0cm5sZW4oZGlyX25hbWUsIFBBVEhfTUFYKSk7CisJCQkJc3RybmNhdChsb3N0X2ZvdW5kX2RpciwgIi9sb3N0K2ZvdW5kLyIsCisJCQkJCVBBVEhfTUFYIC0gc3Rybmxlbihsb3N0X2ZvdW5kX2RpciwKKwkJCQkJCQkgICBQQVRIX01BWCkpOworCQkJfQorCisJCQluZnR3NjQoZGlyX25hbWUsIGNhbGNfZW50cnlfY291bnRzLCBGVFdfT1BFTl9GRCwgZmxhZ3MpOworCisJCQlpZiAobW9kZV9mbGFnICYgU1RBVElTVElDKSB7CisJCQkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkKKwkJCQkJcHJpbnRmKCIlLTQwcyUxMHMvJS0xMHMlOXNcbiIsCisJCQkJCSI8RmlsZT4iLCAibm93IiwgImJlc3QiLCAic2l6ZS9leHQiKTsKKworCQkJCWlmICghKG1vZGVfZmxhZyAmIERFVEFJTCkgJiYKKwkJCQkJCWN1cnJlbnRfdWlkICE9IFJPT1RfVUlEKSB7CisJCQkJCXByaW50ZigiIERvbmUuXG4iKTsKKwkJCQkJc3VjY2Vzc19mbGFnID0gMTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJbmZ0dzY0KGRpcl9uYW1lLCBmaWxlX3N0YXRpc3RpYywKKwkJCQkJCQlGVFdfT1BFTl9GRCwgZmxhZ3MpOworCisJCQkJaWYgKHN1Y2NlZWRfY250ICE9IDAgJiYKKwkJCQkJY3VycmVudF91aWQgPT0gUk9PVF9VSUQpIHsKKwkJCQkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkKKwkJCQkJCXByaW50ZigiXG4iKTsKKwkJCQkJcHJpbnRmKCIlLTQwcyUxMHMvJS0xMHMlOXNcbiIsCisJCQkJCQkiPEZyYWdtZW50ZWQgZmlsZXM+IiwgIm5vdyIsCisJCQkJCQkiYmVzdCIsICJzaXplL2V4dCIpOworCQkJCQlmb3IgKGogPSAwOyBqIDwgU0hPV19GUkFHX0ZJTEVTOyBqKyspIHsKKwkJCQkJCWlmIChzdHJsZW4oZnJhZ19yYW5rW2pdLgorCQkJCQkJCW1zZ19idWZmZXIpID4gMzcpIHsKKwkJCQkJCQlwcmludGYoIiVkLiAlc1xuJTUwZC8iCisJCQkJCQkJIiUtMTBkJTZsbHUgS0JcbiIsCisJCQkJCQkJaiArIDEsCisJCQkJCQkJZnJhZ19yYW5rW2pdLm1zZ19idWZmZXIsCisJCQkJCQkJZnJhZ19yYW5rW2pdLm5vd19jb3VudCwKKwkJCQkJCQlmcmFnX3Jhbmtbal0uYmVzdF9jb3VudCwKKwkJCQkJCQlmcmFnX3Jhbmtbal0uCisJCQkJCQkJCXNpemVfcGVyX2V4dCk7CisJCQkJCQl9IGVsc2UgaWYgKHN0cmxlbihmcmFnX3Jhbmtbal0uCisJCQkJCQkJbXNnX2J1ZmZlcikgPiAwKSB7CisJCQkJCQkJcHJpbnRmKCIlZC4gJS0zN3MlMTBkLyIKKwkJCQkJCQkiJS0xMGQlNmxsdSBLQlxuIiwKKwkJCQkJCQlqICsgMSwKKwkJCQkJCQlmcmFnX3Jhbmtbal0ubXNnX2J1ZmZlciwKKwkJCQkJCQlmcmFnX3Jhbmtbal0ubm93X2NvdW50LAorCQkJCQkJCWZyYWdfcmFua1tqXS5iZXN0X2NvdW50LAorCQkJCQkJCWZyYWdfcmFua1tqXS4KKwkJCQkJCQkJc2l6ZV9wZXJfZXh0KTsKKwkJCQkJCX0gZWxzZQorCQkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJLyogRmlsZSB0cmVlIHdhbGsgKi8KKwkJCW5mdHc2NChkaXJfbmFtZSwgZmlsZV9kZWZyYWcsIEZUV19PUEVOX0ZELCBmbGFncyk7CisJCQlwcmludGYoIlxuXHRTdWNjZXNzOlx0XHRcdFsgJXUvJXUgXVxuIiwgc3VjY2VlZF9jbnQsCisJCQkJdG90YWxfY291bnQpOworCQkJcHJpbnRmKCJcdEZhaWx1cmU6XHRcdFx0WyAldS8ldSBdXG4iLAorCQkJCXRvdGFsX2NvdW50IC0gc3VjY2VlZF9jbnQsIHRvdGFsX2NvdW50KTsKKwkJCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJCQlwcmludGYoIlx0VG90YWwgZXh0ZW50czpcdFx0XHQlNGQtPiVkXG4iLAorCQkJCQlleHRlbnRzX2JlZm9yZV9kZWZyYWcsCisJCQkJCWV4dGVudHNfYWZ0ZXJfZGVmcmFnKTsKKwkJCQlwcmludGYoIlx0RnJhZ21lbnRlZCBwZXJjZW50YWdlOlx0XHQiCisJCQkJCSIlM2xsdSUlLT4lbGx1JSVcbiIsCisJCQkJCSFyZWd1bGFyX2NvdW50ID8gMCA6CisJCQkJCSgodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCQlmcmFnX2ZpbGVzX2JlZm9yZV9kZWZyYWcgKiAxMDApIC8KKwkJCQkJcmVndWxhcl9jb3VudCwKKwkJCQkJIXJlZ3VsYXJfY291bnQgPyAwIDoKKwkJCQkJKCh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJCWZyYWdfZmlsZXNfYWZ0ZXJfZGVmcmFnICogMTAwKSAvCisJCQkJCXJlZ3VsYXJfY291bnQpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgRklMRU5BTUU6CisJCQl0b3RhbF9jb3VudCA9IDE7CisJCQlyZWd1bGFyX2NvdW50ID0gMTsKKwkJCXN0cm5jYXQobG9zdF9mb3VuZF9kaXIsICIvbG9zdCtmb3VuZC8iLAorCQkJCVBBVEhfTUFYIC0gc3Rybmxlbihsb3N0X2ZvdW5kX2RpciwKKwkJCQkJCSAgIFBBVEhfTUFYKSk7CisJCQlpZiAoc3RybmNtcChsb3N0X2ZvdW5kX2RpciwgZGlyX25hbWUsCisJCQkJICAgIHN0cm5sZW4obG9zdF9mb3VuZF9kaXIsCisJCQkJCSAgICBQQVRIX01BWCkpID09IDApIHsKKwkJCQlQUklOVF9FUlJfTVNHKE5HTVNHX0xPU1RfRk9VTkQpOworCQkJCVBSSU5UX0ZJTEVfTkFNRShhcmd2W2ldKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKG1vZGVfZmxhZyAmIFNUQVRJU1RJQykgeworCQkJCWZpbGVfc3RhdGlzdGljKGFyZ3ZbaV0sICZidWYsIEZUV19GLCBOVUxMKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZQorCQkJCXByaW50ZigiZXh0NCBkZWZyYWdtZW50YXRpb24gZm9yICVzXG4iLAorCQkJCQkJCQkgYXJndltpXSk7CisJCQkvKiBEZWZyYWcgc2luZ2xlIGZpbGUgcHJvY2VzcyAqLworCQkJZmlsZV9kZWZyYWcoYXJndltpXSwgJmJ1ZiwgRlRXX0YsIE5VTEwpOworCQkJaWYgKHN1Y2NlZWRfY250ICE9IDApCisJCQkJcHJpbnRmKCIgU3VjY2VzczpcdFx0XHRbMS8xXVxuIik7CisJCQllbHNlCisJCQkJcHJpbnRmKCIgU3VjY2VzczpcdFx0XHRbMC8xXVxuIik7CisKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHN1Y2NlZWRfY250ICE9IDApCisJCQlzdWNjZXNzX2ZsYWcgPSAxOworCQlpZiAobW9kZV9mbGFnICYgU1RBVElTVElDKSB7CisJCQlpZiAoY3VycmVudF91aWQgIT0gUk9PVF9VSUQpIHsKKwkJCQlwcmludGYoIiBEb25lLlxuIik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmICghc3VjY2VlZF9jbnQpIHsKKwkJCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKQorCQkJCQlwcmludGYoIlxuIik7CisKKwkJCQlpZiAoYXJnX3R5cGUgPT0gREVWTkFNRSkKKwkJCQkJcHJpbnRmKCIgSW4gdGhpcyBkZXZpY2UoJXMpLCAiCisJCQkJCSJub25lIGNhbiBiZSBkZWZyYWdtZW50ZWQuXG4iLCBhcmd2W2ldKTsKKwkJCQllbHNlIGlmIChhcmdfdHlwZSA9PSBESVJOQU1FKQorCQkJCQlwcmludGYoIiBJbiB0aGlzIGRpcmVjdG9yeSglcyksICIKKwkJCQkJIm5vbmUgY2FuIGJlIGRlZnJhZ21lbnRlZC5cbiIsIGFyZ3ZbaV0pOworCQkJCWVsc2UKKwkJCQkJcHJpbnRmKCIgVGhpcyBmaWxlKCVzKSAiCisJCQkJCSJjYW4ndCBiZSBkZWZyYWdtZW50ZWQuXG4iLCBhcmd2W2ldKTsKKwkJCX0gZWxzZSB7CisJCQkJZmxvYXQgZmlsZXNfcmF0aW8gPSAwLjA7CisJCQkJZmxvYXQgc2NvcmUgPSAwLjA7CisJCQkJX191NjQgc2l6ZV9wZXJfZXh0ID0gZmlsZXNfYmxvY2tfY291bnQgKgorCQkJCQkJKGJ1Zi5zdF9ibGtzaXplIC8gMTAyNCkgLworCQkJCQkJZXh0ZW50c19iZWZvcmVfZGVmcmFnOworCQkJCWZpbGVzX3JhdGlvID0gKGZsb2F0KShleHRlbnRzX2JlZm9yZV9kZWZyYWcgLQorCQkJCQkJZXh0ZW50c19hZnRlcl9kZWZyYWcpICoKKwkJCQkJCTEwMCAvIGZpbGVzX2Jsb2NrX2NvdW50OworCQkJCXNjb3JlID0gQ0FMQ19TQ09SRShmaWxlc19yYXRpbyk7CisJCQkJcHJpbnRmKCJcbiBUb3RhbC9iZXN0IGV4dGVudHNcdFx0XHRcdCVkLyVkXG4iCisJCQkJCSIgQXZlcmFnZSBzaXplIHBlciBleHRlbnQiCisJCQkJCSJcdFx0XHQlbGx1IEtCXG4iCisJCQkJCSIgRnJhZ21lbnRhdGlvbiBzY29yZVx0XHRcdFx0JS4wZlxuIiwKKwkJCQkJCWV4dGVudHNfYmVmb3JlX2RlZnJhZywKKwkJCQkJCWV4dGVudHNfYWZ0ZXJfZGVmcmFnLAorCQkJCQkJc2l6ZV9wZXJfZXh0LCBzY29yZSk7CisJCQkJcHJpbnRmKCIgWzAtMzAgbm8gcHJvYmxlbToiCisJCQkJCSIgMzEtNTUgYSBsaXR0bGUgYml0IGZyYWdtZW50ZWQ6IgorCQkJCQkiIDU2LSBuZWVkcyBkZWZyYWddXG4iKTsKKworCQkJCWlmIChhcmdfdHlwZSA9PSBERVZOQU1FKQorCQkJCQlwcmludGYoIiBUaGlzIGRldmljZSAoJXMpICIsIGFyZ3ZbaV0pOworCQkJCWVsc2UgaWYgKGFyZ190eXBlID09IERJUk5BTUUpCisJCQkJCXByaW50ZigiIFRoaXMgZGlyZWN0b3J5ICglcykgIiwKKwkJCQkJCQkJYXJndltpXSk7CisJCQkJZWxzZQorCQkJCQlwcmludGYoIiBUaGlzIGZpbGUgKCVzKSAiLCBhcmd2W2ldKTsKKworCQkJCWlmIChzY29yZSA+IEJPVU5EX1NDT1JFKQorCQkJCQlwcmludGYoIm5lZWRzIGRlZnJhZ21lbnRhdGlvbi5cbiIpOworCQkJCWVsc2UKKwkJCQkJcHJpbnRmKCJkb2VzIG5vdCBuZWVkICIKKwkJCQkJCQkiZGVmcmFnbWVudGF0aW9uLlxuIik7CisJCQl9CisJCQlwcmludGYoIiBEb25lLlxuIik7CisJCX0KKworCX0KKworCWlmIChzdWNjZXNzX2ZsYWcpCisJCXJldHVybiAwOworCisJZXhpdCgxKTsKKworb3V0OgorCXByaW50ZihNU0dfVVNBR0UpOworCWV4aXQoMSk7Cit9CisKZGlmZiAtLWdpdCBhL21pc2MvZXh0NC41LmluIGIvbWlzYy9leHQ0LjUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg2MmEzNAotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvZXh0NC41LmluCkBAIC0wLDAgKzEsNjUwIEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAxOTkzLCAxOTk0LCAxOTk1IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiCisuVEggRVhUNCA1ICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCitleHQyIFwtIHRoZSBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0KKy5icgorZXh0MiBcLSB0aGUgdGhpcmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0KKy5icgorZXh0NCBcLSB0aGUgZm91cnRoIGV4dGVuZGVkIGZpbGUgc3lzdGVtCisuU0ggREVTQ1JJUFRJT04KK1RoZSBzZWNvbmQsIHRoaXJkLCBhbmQgZm91cnRoIGV4dGVuZGVkIGZpbGUgc3lzdGVtcywgb3IgZXh0MiwgZXh0MywgYW5kCitleHQ0IGFzIHRoZXkgYXJlIGNvbW1vbmx5IGtub3duLCBhcmUgTGludXggZmlsZSBzeXN0ZW1zIHRoYXQgaGF2ZQoraGlzdG9yaWNhbGx5IGJlZW4gdGhlIGRlZmF1bHQgZmlsZSBzeXN0ZW0gZm9yIG1hbnkgTGludXggZGlzdHJpYnV0aW9ucy4KK1RoZXkgYXJlIGdlbmVyYWwgcHVycG9zZSBmaWxlIHN5c3RlbXMgdGhhdCBoYXZlIGJlZW4gZGVzaWduZWQgZm9yCitleHRlbnNpYmlsaXR5IGFuZCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gIEluIHBhcnRpY3VsYXIsIGZpbGUgc3lzdGVtcworcHJldmlvdXNseSBpbnRlbmRlZCBmb3IgdXNlIHdpdGggdGhlIGV4dDIgYW5kIGV4dDMgZmlsZSBzeXN0ZW1zIGNhbiBiZQorbW91bnRlZCB1c2luZyB0aGUgZXh0NCBmaWxlIHN5c3RlbSBkcml2ZXIsIGFuZCBpbmRlZWQgaW4gbWFueSBtb2Rlcm4KK0xpbnV4IGRpc3RyaWJ1dGlvbnMsIHRoZSBleHQ0IGZpbGUgc3lzdGVtIGRyaXZlciBoYXMgYmVlbiBjb25maWd1cmVkCitoYW5kbGUgbW91bnQgcmVxdWVzdHMgZm9yIGV4dDIgYW5kIGV4dDMgZmlsZSBzeXN0ZW1zLgorLlNIIEZJTEUgU1lTVEVNIEZFQVRVUkVTCitBIGZpbGUgc3lzdGVtIGZvcm1hdGVkIGZvciBleHQyLCBleHQzLCBvciBleHQ0IGNhbiBiZSBoYXZlIHNvbWUKK2NvbGxlY3Rpb24gb2YgdGhlIGZvbGxvdyBmaWxlIHN5c3RlbSBmZWF0dXJlIGZsYWdzIGVuYWJsZWQuICBTb21lIG9mCit0aGVzZSBmZWF0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBieSBhbGwgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBleHQyLAorZXh0MywgYW5kIGV4dDQgZmlsZSBzeXN0ZW0gZHJpdmVycywgZGVwZW5kaW5nIG9uIExpbnV4IGtlcm5lbCB2ZXJzaW9uIGluCit1c2UuICBPbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcywgc3VjaCBhcyB0aGUgR05VL0hVUkQgb3IgRnJlZUJTRCwgb25seQorYSB2ZXJ5IHJlc3RyaWN0aXZlIHNldCBvZiBmaWxlIHN5c3RlbSBmZWF0dXJlcyBtYXkgYmUgc3VwcG9ydGVkIGluIHRoZWlyCitpbXBsZW1lbnRhdGlvbnMgb2YgZXh0Mi4KKy5SUyAxLjJpCisuVFAKKy5CIDY0Yml0CisuYnIKK0VuYWJsZXMgdGhlIGZpbGUgc3lzdGVtIHRvIGJlIGxhcmdlciB0aGFuIDJeMzIgYmxvY2tzLiAgVGhpcyBmZWF0dXJlIGlzIHNldAorYXV0b21hdGljYWxseSwgYXMgbmVlZGVkLCBidXQgaXQgY2FuIGJlIHVzZWZ1bCB0byBzcGVjaWZ5IHRoaXMgZmVhdHVyZQorZXhwbGljaXRseSBpZiB0aGUgZmlsZSBzeXN0ZW0gbWlnaHQgbmVlZCB0byBiZSByZXNpemVkIGxhcmdlciB0aGFuIDJeMzIKK2Jsb2NrcywgZXZlbiBpZiBpdCB3YXMgc21hbGxlciB0aGFuIHRoYXQgdGhyZXNob2xkIHdoZW4gaXQgd2FzCitvcmlnaW5hbGx5IGNyZWF0ZWQuICBOb3RlIHRoYXQgc29tZSBvbGRlciBrZXJuZWxzIGFuZCBvbGRlciB2ZXJzaW9ucworb2YgZTJmc3Byb2dzIHdpbGwgbm90IHN1cHBvcnQgZmlsZSBzeXN0ZW1zIHdpdGggdGhpcyBleHQ0IGZlYXR1cmUgZW5hYmxlZC4KKy5UUAorLkIgYmlnYWxsb2MKKy5icgorVGhpcyBleHQ0IGZlYXR1cmUgZW5hYmxlcyBjbHVzdGVyZWQgYmxvY2sgYWxsb2NhdGlvbiwgc28gdGhhdCB0aGUgdW5pdCBvZgorYWxsb2NhdGlvbiBpcyBhIHBvd2VyIG9mIHR3byBudW1iZXIgb2YgYmxvY2tzLiAgVGhhdCBpcywgZWFjaCBiaXQgaW4gdGhlCit3aGF0IGhhZCB0cmFkaXRpb25hbGx5IGJlZW4ga25vd24gYXMgdGhlIGJsb2NrIGFsbG9jYXRpb24gYml0bWFwIG5vdworaW5kaWNhdGVzIHdoZXRoZXIgYSBjbHVzdGVyIGlzIGluIHVzZSBvciBub3QsIHdoZXJlIGEgY2x1c3RlciBpcyBieQorZGVmYXVsdCBjb21wb3NlZCBvZiAxNiBibG9ja3MuICBUaGlzIGZlYXR1cmUgY2FuIGRlY3JlYXNlIHRoZSB0aW1lCitzcGVudCBvbiBkb2luZyBibG9jayBhbGxvY2F0aW9uIGFuZCBicmluZ3Mgc21hbGxlciBmcmFnbWVudGF0aW9uLCBlc3BlY2lhbGx5Citmb3IgbGFyZ2UgZmlsZXMuICBUaGUgc2l6ZSBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZQorLkIgXC1DIG9wdGlvbi4KKy5JUAorLkIgV2FybmluZzoKK1RoZSBiaWdhbGxvYyBmZWF0dXJlIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50LCBhbmQgbWF5IG5vdCBiZSBmdWxseQorc3VwcG9ydGVkIHdpdGggeW91ciBrZXJuZWwgb3IgbWF5IGhhdmUgdmFyaW91cyBidWdzLiAgUGxlYXNlIHNlZSB0aGUgd2ViCitwYWdlIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQmlnYWxsb2MgZm9yIGRldGFpbHMuCitNYXkgY2xhc2ggd2l0aCBkZWxheWVkIGFsbG9jYXRpb24gKHNlZQorLkJSIG5vZGVsYWxsb2MgbW91bnQgb3B0aW9uKS4KKy5JUAorVGhpcyBmZWF0dXJlIHJlcXVpcmVzIHRoYXQgdGhlCisuQiBleHRlbnQKK2ZlYXR1cmVzIGJlIGVuYWJsZWQuCisuVFAKKy5CIGRpcl9pbmRleAorLmJyCitVc2UgaGFzaGVkIGItdHJlZXMgdG8gc3BlZWQgdXAgbmFtZSBsb29rdXBzIGluIGxhcmdlIGRpcmVjdG9yaWVzLiAgVGhpcworZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgZXh0MyBhbmQgZXh0NCBmaWxlIHN5c3RlbXMsIGFuZCBpcyBpZ25vcmVkIGJ5CitleHQyIGZpbGUgc3lzdGVtcy4KKy5UUAorLkIgZGlyX25saW5rCisuYnIKK1RoaXMgZXh0NCBmZWF0dXJlIGFsbG93cyBtb3JlIHRoYW4gNjUwMDAgc3ViZGlyZWN0b3JpZXMgcGVyIGRpcmVjdG9yeS4KKy5UUAorLkIgZXh0ZW50CisuYnIKK1RoaXMgZXh0NCBmZWF0dXJlIGFsbG93cyB0aGUgbWFwcGluZyBvZiBsb2dpY2FsIGJsb2NrIG51bWJlcnMgZm9yIGEKK3BhcnRpY3VsYXIgaW5vZGUgdG8gcGh5c2ljYWwgYmxvY2tzIG9uIHRoZSBzdG9yYWdlIGRldmljZSB0byBiZSBzdG9yZWQKK3VzaW5nIGFuIGV4dGVudCB0cmVlLCB3aGljaCBpcyBhIG1vcmUgZWZmaWNpZW50IGRhdGEgc3RydWN0dXJlIHRoYW4gdGhlCit0cmFkaXRpb25hbCBpbmRpcmVjdCBibG9jayBzY2hlbWUgdXNlZCBieSB0aGUgZXh0MiBhbmQgZXh0MyBmaWxlCitzeXN0ZW1zLiAgVGhlIHVzZSBvZiB0aGUgZXh0ZW50IHRyZWUgZGVjcmVhc2VzIG1ldGFkYXRhIGJsb2NrIG92ZXJoZWFkLAoraW1wcm92ZXMgZmlsZSBzeXN0ZW0gcGVyZm9ybWFuY2UsIGFuZCBkZWNyZWFzZXMgdGhlIG5lZWRlZCB0byBydW4KKy5CUiBlMmZzY2sgKDgpCitvbiB0aGUgZmlsZSBzeXN0ZW0uCisoTm90ZTogYm90aAorLkIgZXh0ZW50CithbmQKKy5CIGV4dGVudHMKK2FyZSBhY2NlcHRlZCBhcyB2YWxpZCBuYW1lcyBmb3IgdGhpcyBmZWF0dXJlIGZvcgoraGlzdG9yaWNhbC9iYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zLikKKy5UUAorLkIgZXh0cmFfaXNpemUKKy5icgorVGhpcyBleHQ0IGZlYXR1cmUgcmVzZXJ2ZXMgYSBzcGVjaWZpYyBhbW91bnQgb2Ygc3BhY2UgaW4gZWFjaCBpbm9kZSBmb3IKK2V4dGVuZGVkIG1ldGFkYXRhIHN1Y2ggYXMgbmFub3NlY29uZCB0aW1lc3RhbXBzIGFuZCBmaWxlIGNyZWF0aW9uIHRpbWUsCitldmVuIGlmIHRoZSBjdXJyZW50IGtlcm5lbCBkb2VzIG5vdCBjdXJyZW50IG5lZWQgdG8gcmVzZXJ2ZSB0aGlzIG11Y2gKK3NwYWNlLiAgV2l0aG91dCB0aGlzIGZlYXR1cmUsIHRoZSBrZXJuZWwgd2lsbCByZXNlcnZlIHRoZSBhbW91bnQgb2YKK3NwYWNlIGZvciBmZWF0dXJlcyBjdXJyZW50bHkgaXQgY3VycmVudGx5IG5lZWRzLCBhbmQgdGhlIHJlc3QgbWF5IGJlCitjb25zdW1lZCBieSBleHRlbmRlZCBhdHRyaWJ1dGVzLgorCitGb3IgdGhpcyBmZWF0dXJlIHRvIGJlIHVzZWZ1bCB0aGUgaW5vZGUgc2l6ZSBtdXN0IGJlIDI1NiBieXRlcyBpbiBzaXplCitvciBsYXJnZXIuCisuVFAKKy5CIGV4dF9hdHRyCisuYnIKK1RoaXMgZmVhdHVyZSBlbmFibGVzIHRoZSB1c2Ugb2YgZXh0ZW5kZWQgYXR0cmlidXRlcy4gIFRoaXMgZmVhdHVyZSBpcworc3VwcG9ydGVkIGJ5IGV4dDIsIGV4dDMsIGFuZCBleHQ0LgorLlRQCisuQiBmaWxldHlwZQorLmJyCitUaGlzIGZlYXR1cmUgZW5hYmxlcyB0aGUgc3RvcmFnZSBmaWxlIHR5cGUgaW5mb3JtYXRpb24gaW4gZGlyZWN0b3J5CitlbnRyaWVzLiAgVGhpcyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSBleHQyLCBleHQzLCBhbmQgZXh0NC4KKy5UUAorLkIgZmxleF9iZworLmJyCitUaGlzIGV4dDQgZmVhdHVyZSBhbGxvd3MgdGhlIHBlci1ibG9jayBncm91cCBtZXRhZGF0YSAoYWxsb2NhdGlvbgorYml0bWFwcworYW5kIGlub2RlIHRhYmxlcykKK3RvIGJlIHBsYWNlZCBhbnl3aGVyZSBvbiB0aGUgc3RvcmFnZSBtZWRpYS4gIEluIGFkZGl0aW9uLAorLkIgbWtlMmZzCit3aWxsIHBsYWNlIHRoZSBwZXItYmxvY2sgZ3JvdXAgbWV0YWRhdGEgdG9nZXRoZXIgc3RhcnRpbmcgYXQgdGhlIGZpcnN0CitibG9jayBncm91cCBvZiBlYWNoICJmbGV4X2JnIGdyb3VwIi4gICBUaGUgc2l6ZSBvZiB0aGUgZmxleF9iZyBncm91cAorY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUKKy5CIFwtRworb3B0aW9uLgorLlRQCisuQiBoYXNfam91cm5hbAorLmJyCitDcmVhdGUgYSBqb3VybmFsIHRvIGVuc3VyZSBmaWxlc3lzdGVtIGNvbnNpc3RlbmN5IGV2ZW4gYWNyb3NzIHVuY2xlYW4KK3NodXRkb3ducy4gIFNldHRpbmcgdGhlIGZpbGVzeXN0ZW0gZmVhdHVyZSBpcyBlcXVpdmFsZW50IHRvIHVzaW5nIHRoZQorLkIgXC1qCitvcHRpb24uICBUaGlzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IGV4dDMgYW5kIGV4dDQsIGFuZCBpZ25vcmVkIGJ5IHRoZQorZXh0MiBmaWxlIHN5c3RlbSBkcml2ZXIuCisuVFAKKy5CIGh1Z2VfZmlsZQorLmJyCitUaGlzIGV4dDQgZmVhdHVyZSBhbGxvd3MgZmlsZXMgdG8gYmUgbGFyZ2VyIHRoYW4gMiB0ZXJhYnl0ZXMgaW4gc2l6ZS4KKy5UUAorLkIgam91cm5hbF9kZXYKKy5icgorVGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgb24gdGhlIHN1cGVyYmxvY2sgZm91bmQgb24gYW4gZXh0ZXJuYWwgam91cm5hbAorZGV2aWNlLiAgVGhlIGJsb2NrIHNpemUgZm9yIHRoZSBleHRlcm5hbCBqb3VybmFsIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlCitmaWxlIHN5c3RlbSB3aGljaCB1c2VzIGl0LgorLklQCitUaGUgZXh0ZXJuYWwgam91cm5hbCBkZXZpY2UgY2FuIGJlIHVzZWQgYnkgYSBmaWxlIHN5c3RlbSBieSBzcGVjaWZ5aW5nCit0aGUKKy5CIFwtSgorLkJSIGRldmljZT0gPGV4dGVybmFsLWRldmljZT4KK29wdGlvbiB0bworLkJSIG1rZTJmcyAoOCkKK29yCisuQlIgdHVuZTJmcyg4KS4KKy5UUAorLkIgbGFyZ2VfZmlsZQorLmJyCitUaGlzIGZlYXR1cmUgZmxhZyBpcyBzZXQgYXV0b21hdGljYWxseSBieSBtb2Rlcm4ga2VybmVscyB3aGVuIGEgZmlsZQorbGFyZ2VyIHRoYW4gMiBnaWdhYnl0ZXMgaXMgY3JlYXRlZC4gIFZlcnkgb2xkIGtlcm5lbHMgY291bGQgbm90CitoYW5kbGUgbGFyZ2UgZmlsZXMsIHNvIHRoaXMgZmVhdHVyZSBmbGFnIHdhcyB1c2VkIHRvIHByb2hpYml0IHRob3NlCitrZXJuZWxzIGZyb20gbW91bnRpbmcgZmlsZSBzeXN0ZW1zIHRoYXQgdGhleSBjb3VsZCBub3QgdW5kZXJzdGFuZC4KKy5cIiAuVFAKKy5cIiAuQiBtZXRhZGF0YV9jc3VtCisuXCIgLmJyCisuXCIgVGhpcyBleHQ0IGZlYXR1cmUgZW5hYmxlcyBtZXRhZGF0YSBjaGVja3N1bW1pbmcuICBUaGlzIGZlYXR1cmUgc3RvcmVzCisuXCIgY2hlY2tzdW1zIGZvciBhbGwgb2YgdGhlIGZpbGVzeXN0ZW0gbWV0YWRhdGEgKHN1cGVyYmxvY2ssIGdyb3VwCisuXCIgZGVzY3JpcHRvciBibG9ja3MsIGlub2RlIGFuZCBibG9jayBiaXRtYXBzLCBkaXJlY3RvcmllcywgYW5kCisuXCIgZXh0ZW50IHRyZWUgYmxvY2tzKS4gIFRoZSBjaGVja3N1bSBhbGdvcml0aG0gdXNlZCBmb3IgdGhlIG1ldGFkYXRhCisuXCIgYmxvY2tzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgdXNlZCBmb3IgZ3JvdXAgZGVzY3JpcHRvcnMgd2l0aCB0aGUKKy5cIiAuQiB1bmluaXRfYmcKKy5cIiBmZWF0dXJlLCB0aGVzZSB0d28gZmVhdHVyZXMgYXJlIGluY29tcGF0aWJsZSBhbmQKKy5cIiAuQiBtZXRhZGF0YV9jc3VtCisuXCIgd2lsbCBiZSB1c2VkIHByZWZlcmVudGlhbGx5IGluc3RlYWQgb2YKKy5cIiAuQlIgdW5pbml0X2JnIC4KKy5cIiAuYnIKKy5cIiAuQiBGdXR1cmUgZmVhdHVyZSwgYXZhaWxhYmxlIGluIGUyZnNwcm9ncyAxLjQzLVdJUAorLlRQCisuQiBzcGFyc2Vfc3VwZXIyCisuYnIKK1RoaXMgZmVhdHVyZSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSB3aWxsIG9ubHkgYXQgbW9zdCB0d28gYmFja3VwCitzdXBlcmJsb2NrIGFuZCBibG9jayBncm91cCBkZXNjcmlwdG9ycy4gIFRoZSBibG9jayBncm91cHMgdXNlZCB0byBzdG9yZQordGhlIGJhY2t1cCBzdXBlcmJsb2NrIGFuZCBibG9ja2dyb3VwIGRlc2NyaXB0b3JzIGFyZSBzdG9yZWQgaW4gdGhlCitzdXBlcmJsb2NrLCBidXQgdHlwaWNhbGx5LCBvbmUgd2lsbCBiZSBsb2NhdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYmxvY2sKK2dyb3VwICMxLCBhbmQgb25lIGluIHRoZSBsYXN0IGJsb2NrIGdyb3VwIGluIHRoZSBmaWxlIHN5c3RlbS4gIFRoaXMgaXMKK2ZlYXR1cmUgaXMgZXNzZW50aWFsbHkgYSBtb3JlIGV4dHJlbWUgdmVyc2lvbiBvZiBzcGFyc2Vfc3VwZXIgYW5kIGlzCitkZXNpZ25lZCB0byBhbGxvdyB0aGUgYSBtdWNoIGxhcmdlciBwZXJjZW50YWdlIG9mIHRoZSBkaXNrIHRvIGhhdmUKK2NvbnRpZ3VvdXMgYmxvY2tzIGF2YWlsYWJsZSBmb3IgZGF0YSBmaWxlcy4KKy5UUAorLkIgbWV0YV9iZworLmJyCitUaGlzIGV4dDQgZmVhdHVyZSBhbGxvd3MgZmlsZSBzeXN0ZW1zIHRvIGJlIHJlc2l6ZWQgb24tbGluZSB3aXRob3V0IGV4cGxpY2l0bHkKK25lZWRpbmcgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgZ3Jvd3RoIGluIHRoZSBzaXplIG9mIHRoZSBibG9jayBncm91cAorZGVzY3JpcHRvcnMuICBUaGlzIHNjaGVtZSBpcyBhbHNvIHVzZWQgdG8gcmVzaXplIGZpbGUgc3lzdGVtcyB3aGljaCBhcmUKK2xhcmdlciB0aGFuIDJeMzIgYmxvY2tzLiAgSXQgaXMgbm90IHJlY29tbWVuZGVkIHRoYXQgdGhpcyBmZWF0dXJlIGJlIHNldAord2hlbiBhIGZpbGUgc3lzdGVtIGlzIGNyZWF0ZWQsIHNpbmNlIHRoaXMgYWx0ZXJuYXRlIG1ldGhvZCBvZiBzdG9yaW5nCit0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciB3aWxsIHNsb3cgZG93biB0aGUgdGltZSBuZWVkZWQgdG8gbW91bnQgdGhlCitmaWxlIHN5c3RlbSwgYW5kIG5ld2VyIGtlcm5lbHMgY2FuIGF1dG9tYXRpY2FsbHkgc2V0IHRoaXMgZmVhdHVyZSBhcworbmVjZXNzYXJ5IHdoZW4gZG9pbmcgYW4gb25saW5lIHJlc2l6ZSBhbmQgbm8gbW9yZSByZXNlcnZlZCBzcGFjZSBpcworYXZhaWxhYmxlIGluIHRoZSByZXNpemUgaW5vZGUuCisuVFAKKy5CIG1tcAorLmJyCitUaGlzIGV4dDQgZmVhdHVyZSBwcm92aWRlcyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIChNTVApLiAgTU1QIGhlbHBzIHRvCitwcm90ZWN0IHRoZSBmaWxlc3lzdGVtIGZyb20gYmVpbmcgbXVsdGlwbHkgbW91bnRlZCBhbmQgaXMgdXNlZnVsIGluCitzaGFyZWQgc3RvcmFnZSBlbnZpcm9ubWVudHMuCitAUVVPVEFfTUFOX0NPTU1FTlRALlRQCitAUVVPVEFfTUFOX0NPTU1FTlRALkIgcXVvdGEKK0BRVU9UQV9NQU5fQ09NTUVOVEAuYnIKK0BRVU9UQV9NQU5fQ09NTUVOVEBDcmVhdGUgcXVvdGEgaW5vZGVzIChpbm9kZSAjMyBmb3IgdXNlcnF1b3RhIGFuZCBpbm9kZQorQFFVT1RBX01BTl9DT01NRU5UQCM0IGZvciBncm91cCBxdW90YSkgYW5kIHNldCB0aGVtIGluIHRoZSBzdXBlcmJsb2NrLgorQFFVT1RBX01BTl9DT01NRU5UQFdpdGggdGhpcyBmZWF0dXJlLCB0aGUgcXVvdGFzIHdpbGwgYmUgZW5hYmxlZAorQFFVT1RBX01BTl9DT01NRU5UQGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLgorQFFVT1RBX01BTl9DT01NRU5UQC5JUAorQFFVT1RBX01BTl9DT01NRU5UQENhdXNlcyB0aGUgcXVvdGEgZmlsZXMgKGkuZS4sIHVzZXIucXVvdGEgYW5kCitAUVVPVEFfTUFOX0NPTU1FTlRAZ3JvdXAucXVvdGEgd2hpY2ggZXhpc3RlZAorQFFVT1RBX01BTl9DT01NRU5UQGluIHRoZSBvbGRlciBxdW90YSBkZXNpZ24pIHRvIGJlIGhpZGRlbiBpbm9kZXMuCisuVFAKKy5CIHJlc2l6ZV9pbm9kZQorLmJyCitUaGlzIGZpbGUgc3lzdGVtIGZlYXR1cmUgaW5kaWNhdGVzIHRoYXQgc3BhY2UgaGFzIGJlZW4gcmVzZXJ2ZWQgc28KK3RoZSBibG9jayBncm91cCBkZXNjcmlwdG9yIHRhYmxlIGNhbiBiZSBleHRlbmRlZCBieSB0aGUgZmlsZSBzeXN0ZW0gaXMKK3Jlc2l6ZWQgd2hpbGUgdGhlIGZpbGUgc3lzdGVtIGlzIG1vdW50ZWQuICBUaGUgb25saW5lIHJlc2l6ZSBvcGVyYXRpb24KK2lzIGNhcnJpZWQgb3V0IGJ5IHRoZSBrZXJuZWwsIHRyaWdnZXJlZCwgYnkKKy5CUiByZXNpemUyZnMgKDgpLgorQnkgZGVmYXVsdAorLkIgbWtlMmZzCit3aWxsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBlbm91Z2ggc3BhY2Ugc28gdGhhdCB0aGUKK2ZpbGVzeXN0ZW0gbWF5IGdyb3cgdG8gMTAyNCB0aW1lcyBpdHMgaW5pdGlhbCBzaXplLiAgVGhpcyBjYW4gYmUgY2hhbmdlZAordXNpbmcgdGhlCisuQiByZXNpemUKK2V4dGVuZGVkIG9wdGlvbi4KKy5JUAorVGhpcyBmZWF0dXJlIHJlcXVpcmVzIHRoYXQgdGhlCisuQiBzcGFyc2Vfc3VwZXIKK2ZlYXR1cmUgYmUgZW5hYmxlZC4KKy5UUAorLkIgc3BhcnNlX3N1cGVyCisuYnIKK1RoaXMgZmlsZSBzeXN0ZW0gZmVhdHVyZSBpcyBzZXQgb24gYWxsIG1vZGVybiBleHQyLCBleHQzLCBhbmQgZXh0NCBmaWxlCitzeXN0ZW0uICBJdCBpbmRpY2F0ZXMgdGhhdCBiYWNrdXAgY29waWVzIG9mIHRoZSBzdXBlcmJsb2NrIGFuZCBibG9jaworZ3JvdXAgZGVzY3JpcHRvcnMgYmUgcHJlc2VudCBvbmx5IG9uIGEgZmV3IGJsb2NrIGdyb3VwcywgYW5kIG5vdCBhbGwgb2YKK3RoZW0uCisuVFAKKy5CIHVuaW5pdF9iZworLmJyCitUaGlzIGV4dDQgZmlsZSBzeXN0ZW0gZmVhdHVyZSBpbmRpY2F0ZXMgdGhhdCB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMKK3dpbGwgYmUgcHJvdGVjdGVkIHVzaW5nIGNoZWNrc3VtcywgbWFraW5nIGl0IHNhZmUgZm9yCisuQlIgbWtlMmZzICg4KQordG8gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gd2l0aG91dCBpbml0aWFsaXppbmcgYWxsIG9mIHRoZSBibG9jayBncm91cHMuCitUaGUga2VybmVsIHdpbGwga2VlcCBhIGhpZ2ggd2F0ZXJtYXJrIG9mIHVudXNlZCBpbm9kZXMsIGFuZCBpbml0aWFsaXplCitpbm9kZSB0YWJsZXMgYW5kIGJsb2NrIGxhemlseS4gIFRoaXMgZmVhdHVyZSBzcGVlZHMgdXAgdGhlIHRpbWUgdG8gY2hlY2sKK3RoZSBmaWxlIHN5c3RlbSB1c2luZworLkJSIGUyZnNjayAoOCksCithbmQgaXQgYWxzbyBzcGVlZHMgdXAgdGhlIHRpbWUgcmVxdWlyZWQgZm9yCisuQlIgbWtlMmZzICg4KQordG8gY3JlYXRlIHRoZSBmaWxlIHN5c3RlbS4KKy5SRQorLlNIIE1PVU5UIE9QVElPTlMKK1RoaXMgc2VjdGlvbiBkZXNjcmliZXMgbW91bnQgb3B0aW9ucyB3aGljaCBhcmUgc3BlY2lmaWMgdG8gZXh0MiwgZXh0MywKK2FuZCBleHQ0LiAgT3RoZXIgZ2VuZXJpYyBtb3VudCBvcHRpb25zIG1heSBiZSB1c2VkIGFzIHdlbGw7IHNlZQorLkJSIG1vdW50ICg4KQorZm9yIGRldGFpbHMuCisuU0ggIk1vdW50IG9wdGlvbnMgZm9yIGV4dDIiCitUaGUgYGV4dDInIGZpbGVzeXN0ZW0gaXMgdGhlIHN0YW5kYXJkIExpbnV4IGZpbGVzeXN0ZW0uCitTaW5jZSBMaW51eCAyLjUuNDYsIGZvciBtb3N0IG1vdW50IG9wdGlvbnMgdGhlIGRlZmF1bHQKK2lzIGRldGVybWluZWQgYnkgdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jay4gU2V0IHRoZW0gd2l0aAorLkJSIHR1bmUyZnMgKDgpLgorLlRQCisuQlIgYWNsIHwgbm9hY2wKK1N1cHBvcnQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKG9yIG5vdCkuCisuVFAKKy5CUiBic2RkZiB8IG1pbml4ZGYKK1NldCB0aGUgYmVoYXZpb3IgZm9yIHRoZQorLkkgc3RhdGZzCitzeXN0ZW0gY2FsbC4gVGhlCisuQiBtaW5peGRmCitiZWhhdmlvciBpcyB0byByZXR1cm4gaW4gdGhlCisuSSBmX2Jsb2NrcworZmllbGQgdGhlIHRvdGFsIG51bWJlciBvZiBibG9ja3Mgb2YgdGhlIGZpbGVzeXN0ZW0sIHdoaWxlIHRoZQorLkIgYnNkZGYKK2JlaGF2aW9yICh3aGljaCBpcyB0aGUgZGVmYXVsdCkgaXMgdG8gc3VidHJhY3QgdGhlIG92ZXJoZWFkIGJsb2NrcwordXNlZCBieSB0aGUgZXh0MiBmaWxlc3lzdGVtIGFuZCBub3QgYXZhaWxhYmxlIGZvciBmaWxlIHN0b3JhZ2UuIFRodXMKKy5zcCAxCislIG1vdW50IC9rIFwtbyBtaW5peGRmOyBkZiAvazsgdW1vdW50IC9rCisuVFMKK3RhYigjKTsKK2wyIGwyIHIyIGwyIGwyIGwKK2wgYyByIGMgYyBsLgorRmlsZXN5c3RlbSMxMDI0LWJsb2NrcyNVc2VkI0F2YWlsYWJsZSNDYXBhY2l0eSNNb3VudGVkIG9uCisvZGV2L3NkYTYjMjYzMDY1NSM4Njk1NCMyNDEyMTY5IzMlIy9rCisuVEUKKy5zcCAxCislIG1vdW50IC9rIFwtbyBic2RkZjsgZGYgL2s7IHVtb3VudCAvaworLlRTCit0YWIoIyk7CitsMiBsMiByMiBsMiBsMiBsCitsIGMgciBjIGMgbC4KK0ZpbGVzeXN0ZW0jMTAyNC1ibG9ja3MjVXNlZCNBdmFpbGFibGUjQ2FwYWNpdHkjTW91bnRlZCBvbgorL2Rldi9zZGE2IzI1NDM3MTQjMTMjMjQxMjE2OSMwJSMvaworLlRFCisuc3AgMQorKE5vdGUgdGhhdCB0aGlzIGV4YW1wbGUgc2hvd3MgdGhhdCBvbmUgY2FuIGFkZCBjb21tYW5kIGxpbmUgb3B0aW9ucwordG8gdGhlIG9wdGlvbnMgZ2l2ZW4gaW4KKy5JUiAvZXRjL2ZzdGFiIC4pCisuVFAKKy5CUiBjaGVjaz1ub25lICIgb3IgIiBub2NoZWNrCitObyBjaGVja2luZyBpcyBkb25lIGF0IG1vdW50IHRpbWUuIFRoaXMgaXMgdGhlIGRlZmF1bHQuIFRoaXMgaXMgZmFzdC4KK0l0IGlzIHdpc2UgdG8gaW52b2tlCisuQlIgZTJmc2NrICg4KQorZXZlcnkgbm93IGFuZCB0aGVuLCBlLmcuXCYgYXQgYm9vdCB0aW1lLiBUaGUgbm9uLWRlZmF1bHQgYmVoYXZpb3IgaXMgdW5zdXBwb3J0ZWQKKyhjaGVjaz1ub3JtYWwgYW5kIGNoZWNrPXN0cmljdCBvcHRpb25zIGhhdmUgYmVlbiByZW1vdmVkKS4gTm90ZSB0aGF0IHRoZXNlIG1vdW50IG9wdGlvbnMKK2Rvbid0IGhhdmUgdG8gYmUgc3VwcG9ydGVkIGlmIGV4dDQga2VybmVsIGRyaXZlciBpcyB1c2VkIGZvciBleHQyIGFuZCBleHQzIGZpbGVzeXN0ZW1zLgorLlRQCisuQiBkZWJ1ZworUHJpbnQgZGVidWdnaW5nIGluZm8gdXBvbiBlYWNoIChyZSltb3VudC4KKy5UUAorLkJSIGVycm9ycz0geyBjb250aW51ZSB8IHJlbW91bnQtcm8gfCBwYW5pYyB9CitEZWZpbmUgdGhlIGJlaGF2aW9yIHdoZW4gYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuCisoRWl0aGVyIGlnbm9yZSBlcnJvcnMgYW5kIGp1c3QgbWFyayB0aGUgZmlsZXN5c3RlbSBlcnJvbmVvdXMgYW5kIGNvbnRpbnVlLAorb3IgcmVtb3VudCB0aGUgZmlsZXN5c3RlbSByZWFkLW9ubHksIG9yIHBhbmljIGFuZCBoYWx0IHRoZSBzeXN0ZW0uKQorVGhlIGRlZmF1bHQgaXMgc2V0IGluIHRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2ssIGFuZCBjYW4gYmUKK2NoYW5nZWQgdXNpbmcKKy5CUiB0dW5lMmZzICg4KS4KKy5UUAorLkJSIGdycGlkIHwgYnNkZ3JvdXBzICIgYW5kICIgbm9ncnBpZCB8IHN5c3Zncm91cHMKK1RoZXNlIG9wdGlvbnMgZGVmaW5lIHdoYXQgZ3JvdXAgaWQgYSBuZXdseSBjcmVhdGVkIGZpbGUgZ2V0cy4KK1doZW4KKy5CIGdycGlkCitpcyBzZXQsIGl0IHRha2VzIHRoZSBncm91cCBpZCBvZiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGlzIGNyZWF0ZWQ7CitvdGhlcndpc2UgKHRoZSBkZWZhdWx0KSBpdCB0YWtlcyB0aGUgZnNnaWQgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcywgdW5sZXNzCit0aGUgZGlyZWN0b3J5IGhhcyB0aGUgc2V0Z2lkIGJpdCBzZXQsIGluIHdoaWNoIGNhc2UgaXQgdGFrZXMgdGhlIGdpZAorZnJvbSB0aGUgcGFyZW50IGRpcmVjdG9yeSwgYW5kIGFsc28gZ2V0cyB0aGUgc2V0Z2lkIGJpdCBzZXQKK2lmIGl0IGlzIGEgZGlyZWN0b3J5IGl0c2VsZi4KKy5UUAorLkJSIGdycHF1b3RhIHwgbm9xdW90YSB8IHF1b3RhIHwgdXNycXVvdGEKK1RoZSB1c3JxdW90YSAoc2FtZSBhcyBxdW90YSkgbW91bnQgb3B0aW9uIGVuYWJsZXMgdXNlciBxdW90YSBzdXBwb3J0IG9uIHRoZQorZmlsZXN5c3RlbS4gZ3JwcXVvdGEgZW5hYmxlcyBncm91cCBxdW90YXMgc3VwcG9ydC4gWW91IG5lZWQgdGhlIHF1b3RhIHV0aWxpdGllcwordG8gYWN0dWFsbHkgZW5hYmxlIGFuZCBtYW5hZ2UgdGhlIHF1b3RhIHN5c3RlbS4KKy5UUAorLkIgbm91aWQzMgorRGlzYWJsZXMgMzItYml0IFVJRHMgYW5kIEdJRHMuICBUaGlzIGlzIGZvciBpbnRlcm9wZXJhYmlsaXR5IHdpdGggb2xkZXIKK2tlcm5lbHMgd2hpY2ggb25seSBzdG9yZSBhbmQgZXhwZWN0IDE2LWJpdCB2YWx1ZXMuCisuVFAKKy5CUiBvbGRhbGxvYyAiIG9yICIgb3Jsb3YKK1VzZSBvbGQgYWxsb2NhdG9yIG9yIE9ybG92IGFsbG9jYXRvciBmb3IgbmV3IGlub2Rlcy4gT3Jsb3YgaXMgZGVmYXVsdC4KKy5UUAorXGZCcmVzZ2lkPVxmUFwsXGZJblxmUCBhbmQgXGZCcmVzdWlkPVxmUFwsXGZJblxmUAorVGhlIGV4dDIgZmlsZXN5c3RlbSByZXNlcnZlcyBhIGNlcnRhaW4gcGVyY2VudGFnZSBvZiB0aGUgYXZhaWxhYmxlCitzcGFjZSAoYnkgZGVmYXVsdCA1JSwgc2VlCisuQlIgbWtlMmZzICg4KQorYW5kCisuQlIgdHVuZTJmcyAoOCkpLgorVGhlc2Ugb3B0aW9ucyBkZXRlcm1pbmUgd2hvIGNhbiB1c2UgdGhlIHJlc2VydmVkIGJsb2Nrcy4KKyhSb3VnaGx5OiB3aG9ldmVyIGhhcyB0aGUgc3BlY2lmaWVkIHVpZCwgb3IgYmVsb25ncyB0byB0aGUgc3BlY2lmaWVkIGdyb3VwLikKKy5UUAorLkJJIHNiPSBuCitJbnN0ZWFkIG9mIGJsb2NrIDEsIHVzZSBibG9jaworLkkgbgorYXMgc3VwZXJibG9jay4gVGhpcyBjb3VsZCBiZSB1c2VmdWwgd2hlbiB0aGUgZmlsZXN5c3RlbSBoYXMgYmVlbiBkYW1hZ2VkLgorKEVhcmxpZXIsIGNvcGllcyBvZiB0aGUgc3VwZXJibG9jayB3b3VsZCBiZSBtYWRlIGV2ZXJ5IDgxOTIgYmxvY2tzOiBpbgorYmxvY2sgMSwgODE5MywgMTYzODUsIFwmLi4uXCYgKGFuZCBvbmUgZ290IHRob3VzYW5kcyBvZiBjb3BpZXMgb24KK2EgYmlnIGZpbGVzeXN0ZW0pLiBTaW5jZSB2ZXJzaW9uIDEuMDgsCisuQiBta2UyZnMKK2hhcyBhIFwtcyAoc3BhcnNlIHN1cGVyYmxvY2spIG9wdGlvbiB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBiYWNrdXAKK3N1cGVyYmxvY2tzLCBhbmQgc2luY2UgdmVyc2lvbiAxLjE1IHRoaXMgaXMgdGhlIGRlZmF1bHQuIE5vdGUKK3RoYXQgdGhpcyBtYXkgbWVhbiB0aGF0IGV4dDIgZmlsZXN5c3RlbXMgY3JlYXRlZCBieSBhIHJlY2VudAorLkIgbWtlMmZzCitjYW5ub3QgYmUgbW91bnRlZCByL3cgdW5kZXIgTGludXggMi4wLiouKQorVGhlIGJsb2NrIG51bWJlciBoZXJlIHVzZXMgMVwgayB1bml0cy4gVGh1cywgaWYgeW91IHdhbnQgdG8gdXNlIGxvZ2ljYWwKK2Jsb2NrIDMyNzY4IG9uIGEgZmlsZXN5c3RlbSB3aXRoIDRcIGsgYmxvY2tzLCB1c2UgInNiPTEzMTA3MiIuCisuVFAKKy5CUiB1c2VyX3hhdHRyIHwgbm91c2VyX3hhdHRyCitTdXBwb3J0ICJ1c2VyLiIgZXh0ZW5kZWQgYXR0cmlidXRlcyAob3Igbm90KS4KKworCisuU0ggIk1vdW50IG9wdGlvbnMgZm9yIGV4dDMiCitUaGUgZXh0MyBmaWxlc3lzdGVtIGlzIGEgdmVyc2lvbiBvZiB0aGUgZXh0MiBmaWxlc3lzdGVtIHdoaWNoIGhhcyBiZWVuCitlbmhhbmNlZCB3aXRoIGpvdXJuYWxpbmcuICBJdCBzdXBwb3J0cyB0aGUgc2FtZSBvcHRpb25zIGFzIGV4dDIgYXMKK3dlbGwgYXMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbnM6CisuVFAKKy5CIGpvdXJuYWw9dXBkYXRlCitVcGRhdGUgdGhlIGV4dDMgZmlsZXN5c3RlbSdzIGpvdXJuYWwgdG8gdGhlIGN1cnJlbnQgZm9ybWF0LgorLlRQCisuQiBqb3VybmFsPWludW0KK1doZW4gYSBqb3VybmFsIGFscmVhZHkgZXhpc3RzLCB0aGlzIG9wdGlvbiBpcyBpZ25vcmVkLiBPdGhlcndpc2UsIGl0CitzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aGUgaW5vZGUgd2hpY2ggd2lsbCByZXByZXNlbnQgdGhlIGV4dDMgZmlsZXN5c3RlbSdzCitqb3VybmFsIGZpbGU7IGV4dDMgd2lsbCBjcmVhdGUgYSBuZXcgam91cm5hbCwgb3ZlcndyaXRpbmcgdGhlIG9sZCBjb250ZW50cworb2YgdGhlIGZpbGUgd2hvc2UgaW5vZGUgbnVtYmVyIGlzCisuSVIgaW51bSAuCisuVFAKKy5CUiBqb3VybmFsX2Rldj1kZXZudW0gLyBqb3VybmFsX3BhdGg9cGF0aAorV2hlbiB0aGUgZXh0ZXJuYWwgam91cm5hbCBkZXZpY2UncyBtYWpvci9taW5vciBudW1iZXJzCitoYXZlIGNoYW5nZWQsIHRoZXNlIG9wdGlvbnMgYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeQordGhlIG5ldyBqb3VybmFsIGxvY2F0aW9uLiAgVGhlIGpvdXJuYWwgZGV2aWNlIGlzCitpZGVudGlmaWVkIGVpdGhlciB0aHJvdWdoIGl0cyBuZXcgbWFqb3IvbWlub3IgbnVtYmVycyBlbmNvZGVkCitpbiBkZXZudW0sIG9yIHZpYSBhIHBhdGggdG8gdGhlIGRldmljZS4KKy5UUAorLkJSIG5vcmVjb3ZlcnkgLyBub2xvYWQKK0Rvbid0IGxvYWQgdGhlIGpvdXJuYWwgb24gbW91bnRpbmcuICBOb3RlIHRoYXQKK2lmIHRoZSBmaWxlc3lzdGVtIHdhcyBub3QgdW5tb3VudGVkIGNsZWFubHksCitza2lwcGluZyB0aGUgam91cm5hbCByZXBsYXkgd2lsbCBsZWFkIHRvIHRoZQorZmlsZXN5c3RlbSBjb250YWluaW5nIGluY29uc2lzdGVuY2llcyB0aGF0IGNhbgorbGVhZCB0byBhbnkgbnVtYmVyIG9mIHByb2JsZW1zLgorLlRQCisuQlIgZGF0YT0geyBqb3VybmFsIHwgb3JkZXJlZCB8IHdyaXRlYmFjayB9CitTcGVjaWZpZXMgdGhlIGpvdXJuYWxpbmcgbW9kZSBmb3IgZmlsZSBkYXRhLiAgTWV0YWRhdGEgaXMgYWx3YXlzIGpvdXJuYWxlZC4KK1RvIHVzZSBtb2RlcyBvdGhlciB0aGFuCisuQiBvcmRlcmVkCitvbiB0aGUgcm9vdCBmaWxlc3lzdGVtLCBwYXNzIHRoZSBtb2RlIHRvIHRoZSBrZXJuZWwgYXMgYm9vdCBwYXJhbWV0ZXIsIGUuZy5cJgorLklSIHJvb3RmbGFncz1kYXRhPWpvdXJuYWwgLgorLlJTCisuVFAKKy5CIGpvdXJuYWwKK0FsbCBkYXRhIGlzIGNvbW1pdHRlZCBpbnRvIHRoZSBqb3VybmFsIHByaW9yIHRvIGJlaW5nIHdyaXR0ZW4gaW50byB0aGUKK21haW4gZmlsZXN5c3RlbS4KKy5UUAorLkIgb3JkZXJlZAorVGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlLiAgQWxsIGRhdGEgaXMgZm9yY2VkIGRpcmVjdGx5IG91dCB0byB0aGUgbWFpbiBmaWxlCitzeXN0ZW0gcHJpb3IgdG8gaXRzIG1ldGFkYXRhIGJlaW5nIGNvbW1pdHRlZCB0byB0aGUgam91cm5hbC4KKy5UUAorLkIgd3JpdGViYWNrCitEYXRhIG9yZGVyaW5nIGlzIG5vdCBwcmVzZXJ2ZWQgXChlbiBkYXRhIG1heSBiZSB3cml0dGVuIGludG8gdGhlIG1haW4KK2ZpbGVzeXN0ZW0gYWZ0ZXIgaXRzIG1ldGFkYXRhIGhhcyBiZWVuIGNvbW1pdHRlZCB0byB0aGUgam91cm5hbC4KK1RoaXMgaXMgcnVtb3VyZWQgdG8gYmUgdGhlIGhpZ2hlc3QtdGhyb3VnaHB1dCBvcHRpb24uICBJdCBndWFyYW50ZWVzCitpbnRlcm5hbCBmaWxlc3lzdGVtIGludGVncml0eSwgaG93ZXZlciBpdCBjYW4gYWxsb3cgb2xkIGRhdGEgdG8gYXBwZWFyCitpbiBmaWxlcyBhZnRlciBhIGNyYXNoIGFuZCBqb3VybmFsIHJlY292ZXJ5LgorLlJFCisuVFAKKy5CIGRhdGFfZXJyPWlnbm9yZQorSnVzdCBwcmludCBhbiBlcnJvciBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3VycyBpbiBhIGZpbGUgZGF0YSBidWZmZXIgaW4KK29yZGVyZWQgbW9kZS4KKy5UUAorLkIgZGF0YV9lcnI9YWJvcnQKK0Fib3J0IHRoZSBqb3VybmFsIGlmIGFuIGVycm9yIG9jY3VycyBpbiBhIGZpbGUgZGF0YSBidWZmZXIgaW4gb3JkZXJlZCBtb2RlLgorLlRQCisuQlIgYmFycmllcj0wICIgLyAiIGJhcnJpZXI9MSAiCitUaGlzIGRpc2FibGVzIC8gZW5hYmxlcyB0aGUgdXNlIG9mIHdyaXRlIGJhcnJpZXJzIGluIHRoZSBqYmQgY29kZS4gIGJhcnJpZXI9MAorZGlzYWJsZXMsIGJhcnJpZXI9MSBlbmFibGVzIChkZWZhdWx0KS4gVGhpcyBhbHNvIHJlcXVpcmVzIGFuIElPIHN0YWNrIHdoaWNoIGNhbgorc3VwcG9ydCBiYXJyaWVycywgYW5kIGlmIGpiZCBnZXRzIGFuIGVycm9yIG9uIGEgYmFycmllciB3cml0ZSwgaXQgd2lsbCBkaXNhYmxlCitiYXJyaWVycyBhZ2FpbiB3aXRoIGEgd2FybmluZy4gIFdyaXRlIGJhcnJpZXJzIGVuZm9yY2UgcHJvcGVyIG9uLWRpc2sgb3JkZXJpbmcKK29mIGpvdXJuYWwgY29tbWl0cywgbWFraW5nIHZvbGF0aWxlIGRpc2sgd3JpdGUgY2FjaGVzIHNhZmUgdG8gdXNlLCBhdCBzb21lCitwZXJmb3JtYW5jZSBwZW5hbHR5LiAgSWYgeW91ciBkaXNrcyBhcmUgYmF0dGVyeS1iYWNrZWQgaW4gb25lIHdheSBvciBhbm90aGVyLAorZGlzYWJsaW5nIGJhcnJpZXJzIG1heSBzYWZlbHkgaW1wcm92ZSBwZXJmb3JtYW5jZS4KKy5UUAorLkJJIGNvbW1pdD0gbnJzZWMKK1N5bmMgYWxsIGRhdGEgYW5kIG1ldGFkYXRhIGV2ZXJ5CisuSSBucnNlYworc2Vjb25kcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNSBzZWNvbmRzLiBaZXJvIG1lYW5zIGRlZmF1bHQuCisuVFAKKy5CIHVzZXJfeGF0dHIKK0VuYWJsZSBFeHRlbmRlZCBVc2VyIEF0dHJpYnV0ZXMuIFNlZSB0aGUKKy5CUiBhdHRyICg1KQorbWFudWFsIHBhZ2UuCisuVFAKKy5CIGFjbAorRW5hYmxlIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzLiBTZWUgdGhlCisuQlIgYWNsICg1KQorbWFudWFsIHBhZ2UuCisuVFAKKy5CUiB1c3JqcXVvdGE9YXF1b3RhLnVzZXIgfCBncnBqcXVvdGE9YXF1b3RhLmdyb3VwIHwganFmbXQ9dmZzdjAKK0FwYXJ0IGZyb20gdGhlIG9sZCBxdW90YSBzeXN0ZW0gKGFzIGluIGV4dDIsIGpxZm10PXZmc29sZCBha2EgdmVyc2lvbiAxIHF1b3RhKQorZXh0MyBhbHNvIHN1cHBvcnRzIGpvdXJuYWxlZCBxdW90YXMgKHZlcnNpb24gMiBxdW90YSkuIGpxZm10PXZmc3YwCitlbmFibGVzIGpvdXJuYWxlZCBxdW90YXMuIEZvciBqb3VybmFsZWQgcXVvdGFzIHRoZSBtb3VudCBvcHRpb25zCit1c3JqcXVvdGE9YXF1b3RhLnVzZXIgYW5kIGdycGpxdW90YT1hcXVvdGEuZ3JvdXAgYXJlIHJlcXVpcmVkIHRvIHRlbGwgdGhlCitxdW90YSBzeXN0ZW0gd2hpY2ggcXVvdGEgZGF0YWJhc2UgZmlsZXMgdG8gdXNlLiBKb3VybmFsZWQgcXVvdGFzIGhhdmUgdGhlCithZHZhbnRhZ2UgdGhhdCBldmVuIGFmdGVyIGEgY3Jhc2ggbm8gcXVvdGEgY2hlY2sgaXMgcmVxdWlyZWQuCisKKy5TSCAiTW91bnQgb3B0aW9ucyBmb3IgZXh0NCIKK1RoZSBleHQ0IGZpbGVzeXN0ZW0gaXMgYW4gYWR2YW5jZWQgbGV2ZWwgb2YgdGhlIGV4dDMgZmlsZXN5c3RlbSB3aGljaAoraW5jb3Jwb3JhdGVzIHNjYWxhYmlsaXR5IGFuZCByZWxpYWJpbGl0eSBlbmhhbmNlbWVudHMgZm9yIHN1cHBvcnRpbmcgbGFyZ2UKK2ZpbGVzeXN0ZW0uCisKK1RoZSBvcHRpb25zCisuQiBqb3VybmFsX2Rldiwgbm9yZWNvdmVyeSwgbm9sb2FkLCBkYXRhLCBjb21taXQsIG9ybG92LCBvbGRhbGxvYywgW25vXXVzZXJfeGF0dHIKKy5CIFtub11hY2wsIGJzZGRmLCBtaW5peGRmLCBkZWJ1ZywgZXJyb3JzLCBkYXRhX2VyciwgZ3JwaWQsIGJzZGdyb3Vwcywgbm9ncnBpZAorLkIgc3lzdmdyb3VwcywgcmVzZ2lkLCByZXN1aWQsIHNiLCBxdW90YSwgbm9xdW90YSwgZ3JwcXVvdGEsIHVzcnF1b3RhCisuQiB1c3JqcXVvdGEsIGdycGpxdW90YSBhbmQganFmbXQKK2FyZSBiYWNrd2FyZGx5IGNvbXBhdGlibGUgd2l0aCBleHQzIG9yIGV4dDIuCisuVFAKKy5CIGpvdXJuYWxfY2hlY2tzdW0KK0VuYWJsZSBjaGVja3N1bW1pbmcgb2YgdGhlIGpvdXJuYWwgdHJhbnNhY3Rpb25zLiAgVGhpcyB3aWxsIGFsbG93IHRoZSByZWNvdmVyeQorY29kZSBpbiBlMmZzY2sgYW5kIHRoZSBrZXJuZWwgdG8gZGV0ZWN0IGNvcnJ1cHRpb24gaW4gdGhlIGtlcm5lbC4gIEl0IGlzIGEKK2NvbXBhdGlibGUgY2hhbmdlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgb2xkZXIga2VybmVscy4KKy5UUAorLkIgam91cm5hbF9hc3luY19jb21taXQKK0NvbW1pdCBibG9jayBjYW4gYmUgd3JpdHRlbiB0byBkaXNrIHdpdGhvdXQgd2FpdGluZyBmb3IgZGVzY3JpcHRvciBibG9ja3MuIElmCitlbmFibGVkIG9sZGVyIGtlcm5lbHMgY2Fubm90IG1vdW50IHRoZSBkZXZpY2UuCitUaGlzIHdpbGwgZW5hYmxlICdqb3VybmFsX2NoZWNrc3VtJyBpbnRlcm5hbGx5LgorLlRQCisuQlIgYmFycmllcj0wICIgLyAiIGJhcnJpZXI9MSAiIC8gIiBiYXJyaWVyICIgLyAiIG5vYmFycmllcgorVGhlc2UgbW91bnQgb3B0aW9ucyBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcyBpbiBleHQzLiAgVGhlIG1vdW50IG9wdGlvbnMKKyJiYXJyaWVyIiBhbmQgIm5vYmFycmllciIgYXJlIGFkZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIGV4dDQgbW91bnQKK29wdGlvbnMuCisKK1RoZSBleHQ0IGZpbGVzeXN0ZW0gZW5hYmxlcyB3cml0ZSBiYXJyaWVycyBieSBkZWZhdWx0LgorLlRQCisuQkkgaW5vZGVfcmVhZGFoZWFkX2Jsa3M9IG4KK1RoaXMgdHVuaW5nIHBhcmFtZXRlciBjb250cm9scyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5vZGUgdGFibGUgYmxvY2tzIHRoYXQKK2V4dDQncyBpbm9kZSB0YWJsZSByZWFkYWhlYWQgYWxnb3JpdGhtIHdpbGwgcHJlLXJlYWQgaW50byB0aGUgYnVmZmVyIGNhY2hlLgorVGhlIHZhbHVlIG11c3QgYmUgYSBwb3dlciBvZiAyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAzMiBibG9ja3MuCisuVFAKKy5CSSBzdHJpcGU9IG4KK051bWJlciBvZiBmaWxlc3lzdGVtIGJsb2NrcyB0aGF0IG1iYWxsb2Mgd2lsbCB0cnkgdG8gdXNlIGZvciBhbGxvY2F0aW9uIHNpemUKK2FuZCBhbGlnbm1lbnQuIEZvciBSQUlENS82IHN5c3RlbXMgdGhpcyBzaG91bGQgYmUgdGhlIG51bWJlciBvZiBkYXRhIGRpc2tzICoKK1JBSUQgY2h1bmsgc2l6ZSBpbiBmaWxlc3lzdGVtIGJsb2Nrcy4KKy5UUAorLkIgZGVsYWxsb2MKK0RlZmVycmluZyBibG9jayBhbGxvY2F0aW9uIHVudGlsIHdyaXRlLW91dCB0aW1lLgorLlRQCisuQiBub2RlbGFsbG9jCitEaXNhYmxlIGRlbGF5ZWQgYWxsb2NhdGlvbi4gQmxvY2tzIGFyZSBhbGxvY2F0ZWQgd2hlbiBkYXRhIGlzIGNvcGllZCBmcm9tIHVzZXIKK3RvIHBhZ2UgY2FjaGUuCisuVFAKKy5CSSBtYXhfYmF0Y2hfdGltZT0gdXNlYworTWF4aW11bSBhbW91bnQgb2YgdGltZSBleHQ0IHNob3VsZCB3YWl0IGZvciBhZGRpdGlvbmFsIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyB0bworYmUgYmF0Y2ggdG9nZXRoZXIgd2l0aCBhIHN5bmNocm9ub3VzIHdyaXRlIG9wZXJhdGlvbi4gU2luY2UgYSBzeW5jaHJvbm91cword3JpdGUgb3BlcmF0aW9uIGlzIGdvaW5nIHRvIGZvcmNlIGEgY29tbWl0IGFuZCB0aGVuIGEgd2FpdCBmb3IgdGhlIEkvTworY29tcGxldGUsIGl0IGRvZXNuJ3QgY29zdCBtdWNoLCBhbmQgY2FuIGJlIGEgaHVnZSB0aHJvdWdocHV0IHdpbiwgd2Ugd2FpdCBmb3IgYQorc21hbGwgYW1vdW50IG9mIHRpbWUgdG8gc2VlIGlmIGFueSBvdGhlciB0cmFuc2FjdGlvbnMgY2FuIHBpZ2d5YmFjayBvbiB0aGUKK3N5bmNocm9ub3VzIHdyaXRlLiBUaGUgYWxnb3JpdGhtIHVzZWQgaXMgZGVzaWduZWQgdG8gYXV0b21hdGljYWxseSB0dW5lIGZvcgordGhlIHNwZWVkIG9mIHRoZSBkaXNrLCBieSBtZWFzdXJpbmcgdGhlIGFtb3VudCBvZiB0aW1lIChvbiBhdmVyYWdlKSB0aGF0IGl0Cit0YWtlcyB0byBmaW5pc2ggY29tbWl0dGluZyBhIHRyYW5zYWN0aW9uLiBDYWxsIHRoaXMgdGltZSB0aGUgImNvbW1pdCB0aW1lIi4KK0lmIHRoZSB0aW1lIHRoYXQgdGhlIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHJ1bm5pbmcgaXMgbGVzcyB0aGFuIHRoZSBjb21taXQgdGltZSwKK2V4dDQgd2lsbCB0cnkgc2xlZXBpbmcgZm9yIHRoZSBjb21taXQgdGltZSB0byBzZWUgaWYgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGpvaW4KK3RoZSB0cmFuc2FjdGlvbi4gVGhlIGNvbW1pdCB0aW1lIGlzIGNhcHBlZCBieSB0aGUgbWF4X2JhdGNoX3RpbWUsIHdoaWNoCitkZWZhdWx0cyB0byAxNTAwMFwgXFttY11zICgxNVwgbXMpLiBUaGlzIG9wdGltaXphdGlvbiBjYW4gYmUgdHVybmVkIG9mZiBlbnRpcmVseSBieQorc2V0dGluZyBtYXhfYmF0Y2hfdGltZSB0byAwLgorLlRQCisuQkkgbWluX2JhdGNoX3RpbWU9IHVzZWMKK1RoaXMgcGFyYW1ldGVyIHNldHMgdGhlIGNvbW1pdCB0aW1lIChhcyBkZXNjcmliZWQgYWJvdmUpIHRvIGJlIGF0IGxlYXN0CittaW5fYmF0Y2hfdGltZS4gSXQgZGVmYXVsdHMgdG8gemVybyBtaWNyb3NlY29uZHMuIEluY3JlYXNpbmcgdGhpcyBwYXJhbWV0ZXIKK21heSBpbXByb3ZlIHRoZSB0aHJvdWdocHV0IG9mIG11bHRpLXRocmVhZGVkLCBzeW5jaHJvbm91cyB3b3JrbG9hZHMgb24gdmVyeQorZmFzdCBkaXNrcywgYXQgdGhlIGNvc3Qgb2YgaW5jcmVhc2luZyBsYXRlbmN5LgorLlRQCisuQkkgam91cm5hbF9pb3ByaW89IHByaW8KK1RoZSBJL08gcHJpb3JpdHkgKGZyb20gMCB0byA3LCB3aGVyZSAwIGlzIHRoZSBoaWdoZXN0IHByaW9yaXR5KSB3aGljaCBzaG91bGQgYmUKK3VzZWQgZm9yIEkvTyBvcGVyYXRpb25zIHN1Ym1pdHRlZCBieSBram91cm5hbGQyIGR1cmluZyBhIGNvbW1pdCBvcGVyYXRpb24uCitUaGlzIGRlZmF1bHRzIHRvIDMsIHdoaWNoIGlzIGEgc2xpZ2h0bHkgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlIGRlZmF1bHQgSS9PCitwcmlvcml0eS4KKy5UUAorLkIgYWJvcnQKK1NpbXVsYXRlIHRoZSBlZmZlY3RzIG9mIGNhbGxpbmcgZXh0NF9hYm9ydCgpIGZvcgorZGVidWdnaW5nIHB1cnBvc2VzLiAgVGhpcyBpcyBub3JtYWxseSB1c2VkIHdoaWxlCityZW1vdW50aW5nIGEgZmlsZXN5c3RlbSB3aGljaCBpcyBhbHJlYWR5IG1vdW50ZWQuCisuVFAKKy5CUiBhdXRvX2RhX2FsbG9jIHwgbm9hdXRvX2RhX2FsbG9jCitNYW55IGJyb2tlbiBhcHBsaWNhdGlvbnMgZG9uJ3QgdXNlIGZzeW5jKCkgd2hlbgorcmVwbGFjaW5nIGV4aXN0aW5nIGZpbGVzIHZpYSBwYXR0ZXJucyBzdWNoIGFzCisKK2ZkID0gb3BlbigiZm9vLm5ldyIpL3dyaXRlKGZkLC4uLikvY2xvc2UoZmQpLyByZW5hbWUoImZvby5uZXciLCAiZm9vIikKKworb3Igd29yc2UgeWV0CisKK2ZkID0gb3BlbigiZm9vIiwgT19UUlVOQykvd3JpdGUoZmQsLi4uKS9jbG9zZShmZCkuCisKK0lmIGF1dG9fZGFfYWxsb2MgaXMgZW5hYmxlZCwgZXh0NCB3aWxsIGRldGVjdCB0aGUgcmVwbGFjZS12aWEtcmVuYW1lIGFuZAorcmVwbGFjZS12aWEtdHJ1bmNhdGUgcGF0dGVybnMgYW5kIGZvcmNlIHRoYXQgYW55IGRlbGF5ZWQgYWxsb2NhdGlvbiBibG9ja3MgYXJlCithbGxvY2F0ZWQgc3VjaCB0aGF0IGF0IHRoZSBuZXh0IGpvdXJuYWwgY29tbWl0LCBpbiB0aGUgZGVmYXVsdCBkYXRhPW9yZGVyZWQKK21vZGUsIHRoZSBkYXRhIGJsb2NrcyBvZiB0aGUgbmV3IGZpbGUgYXJlIGZvcmNlZCB0byBkaXNrIGJlZm9yZSB0aGUgcmVuYW1lKCkKK29wZXJhdGlvbiBpcyBjb21taXR0ZWQuICBUaGlzIHByb3ZpZGVzIHJvdWdobHkgdGhlIHNhbWUgbGV2ZWwgb2YgZ3VhcmFudGVlcyBhcworZXh0MywgYW5kIGF2b2lkcyB0aGUgInplcm8tbGVuZ3RoIiBwcm9ibGVtIHRoYXQgY2FuIGhhcHBlbiB3aGVuIGEgc3lzdGVtCitjcmFzaGVzIGJlZm9yZSB0aGUgZGVsYXllZCBhbGxvY2F0aW9uIGJsb2NrcyBhcmUgZm9yY2VkIHRvIGRpc2suCisuVFAKKy5CIG5vaW5pdF9pdGFibGUKK0RvIG5vdCBpbml0aWFsaXplIGFueSB1bmluaXRpYWxpemVkIGlub2RlIHRhYmxlIGJsb2NrcyBpbiB0aGUgYmFja2dyb3VuZC4gVGhpcworZmVhdHVyZSBtYXkgYmUgdXNlZCBieSBpbnN0YWxsYXRpb24gQ0QncyBzbyB0aGF0IHRoZSBpbnN0YWxsIHByb2Nlc3MgY2FuCitjb21wbGV0ZSBhcyBxdWlja2x5IGFzIHBvc3NpYmxlOyB0aGUgaW5vZGUgdGFibGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB3b3VsZAordGhlbiBiZSBkZWZlcnJlZCB1bnRpbCB0aGUgbmV4dCB0aW1lIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuCisuVFAKKy5CIGluaXRfaXRhYmxlPW4KK1RoZSBsYXp5IGl0YWJsZSBpbml0IGNvZGUgd2lsbCB3YWl0IG4gdGltZXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaXQgdG9vawordG8gemVybyBvdXQgdGhlIHByZXZpb3VzIGJsb2NrIGdyb3VwJ3MgaW5vZGUgdGFibGUuIFRoaXMgbWluaW1pemVzIHRoZSBpbXBhY3Qgb24KK3N5c3RlbSBwZXJmb3JtYW5jZSB3aGlsZSB0aGUgZmlsZXN5c3RlbSdzIGlub2RlIHRhYmxlIGlzIGJlaW5nIGluaXRpYWxpemVkLgorLlRQCisuQlIgZGlzY2FyZCAvIG5vZGlzY2FyZAorQ29udHJvbHMgd2hldGhlciBleHQ0IHNob3VsZCBpc3N1ZSBkaXNjYXJkL1RSSU0gY29tbWFuZHMgdG8gdGhlIHVuZGVybHlpbmcKK2Jsb2NrIGRldmljZSB3aGVuIGJsb2NrcyBhcmUgZnJlZWQuICBUaGlzIGlzIHVzZWZ1bCBmb3IgU1NEIGRldmljZXMgYW5kCitzcGFyc2UvdGhpbmx5LXByb3Zpc2lvbmVkIExVTnMsIGJ1dCBpdCBpcyBvZmYgYnkgZGVmYXVsdCB1bnRpbCBzdWZmaWNpZW50Cit0ZXN0aW5nIGhhcyBiZWVuIGRvbmUuCisuVFAKKy5CIG5vdWlkMzIKK0Rpc2FibGVzIDMyLWJpdCBVSURzIGFuZCBHSURzLiAgVGhpcyBpcyBmb3IKK2ludGVyb3BlcmFiaWxpdHkgIHdpdGggIG9sZGVyIGtlcm5lbHMgd2hpY2ggb25seQorc3RvcmUgYW5kIGV4cGVjdCAxNi1iaXQgdmFsdWVzLgorLlRQCisuQlIgYmxvY2tfdmFsaWRpdHkgLyBub2Jsb2NrX3ZhbGlkaXR5CitUaGlzIG9wdGlvbnMgYWxsb3dzIHRvIGVuYWJsZXMvZGlzYWJsZXMgdGhlIGluLWtlcm5lbCBmYWNpbGl0eSBmb3IgdHJhY2tpbmcKK2ZpbGVzeXN0ZW0gbWV0YWRhdGEgYmxvY2tzIHdpdGhpbiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgYWxsb3dzIG11bHRpLVxjCitibG9jayBhbGxvY2F0b3IgYW5kIG90aGVyIHJvdXRpbmVzIHRvIHF1aWNrbHkgbG9jYXRlIGV4dGVudHMgd2hpY2ggbWlnaHQKK292ZXJsYXAgd2l0aCBmaWxlc3lzdGVtIG1ldGFkYXRhIGJsb2Nrcy4gVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZworcHVycG9zZXMgYW5kIHNpbmNlIGl0IG5lZ2F0aXZlbHkgYWZmZWN0cyB0aGUgcGVyZm9ybWFuY2UsIGl0IGlzIG9mZiBieSBkZWZhdWx0LgorLlRQCisuQlIgZGlvcmVhZF9sb2NrIC8gZGlvcmVhZF9ub2xvY2sKK0NvbnRyb2xzIHdoZXRoZXIgb3Igbm90IGV4dDQgc2hvdWxkIHVzZSB0aGUgRElPIHJlYWQgbG9ja2luZy4gSWYgdGhlCitkaW9yZWFkX25vbG9jayBvcHRpb24gaXMgc3BlY2lmaWVkIGV4dDQgd2lsbCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGV4dGVudAorYmVmb3JlIGJ1ZmZlciB3cml0ZSBhbmQgY29udmVydCB0aGUgZXh0ZW50IHRvIGluaXRpYWxpemVkIGFmdGVyIElPIGNvbXBsZXRlcy4KK1RoaXMgYXBwcm9hY2ggYWxsb3dzIGV4dDQgY29kZSB0byBhdm9pZCB1c2luZyBpbm9kZSBtdXRleCwgd2hpY2ggaW1wcm92ZXMKK3NjYWxhYmlsaXR5IG9uIGhpZ2ggc3BlZWQgc3RvcmFnZXMuIEhvd2V2ZXIgdGhpcyBkb2VzIG5vdCB3b3JrIHdpdGggZGF0YQoram91cm5hbGluZyBhbmQgZGlvcmVhZF9ub2xvY2sgb3B0aW9uIHdpbGwgYmUgaWdub3JlZCB3aXRoIGtlcm5lbCB3YXJuaW5nLgorTm90ZSB0aGF0IGRpb3JlYWRfbm9sb2NrIGNvZGUgcGF0aCBpcyBvbmx5IHVzZWQgZm9yIGV4dGVudC1iYXNlZCBmaWxlcy4KK0JlY2F1c2Ugb2YgdGhlIHJlc3RyaWN0aW9ucyB0aGlzIG9wdGlvbnMgY29tcHJpc2VzIGl0IGlzIG9mZiBieSBkZWZhdWx0CisoZS5nLlwmIGRpb3JlYWRfbG9jaykuCisuVFAKKy5CIG1heF9kaXJfc2l6ZV9rYj1uCitUaGlzIGxpbWl0cyB0aGUgc2l6ZSBvZiB0aGUgZGlyZWN0b3JpZXMgc28gdGhhdCBhbnkgYXR0ZW1wdCB0byBleHBhbmQgdGhlbQorYmV5b25kIHRoZSBzcGVjaWZpZWQgbGltaXQgaW4ga2lsb2J5dGVzIHdpbGwgY2F1c2UgYW4gRU5PU1BDIGVycm9yLiBUaGlzIGlzCit1c2VmdWwgaW4gbWVtb3J5LWNvbnN0cmFpbmVkIGVudmlyb25tZW50cywgd2hlcmUgYSB2ZXJ5IGxhcmdlIGRpcmVjdG9yeSBjYW4KK2NhdXNlIHNldmVyZSBwZXJmb3JtYW5jZSBwcm9ibGVtcyBvciBldmVuIHByb3Zva2UgdGhlIE91dCBPZiBNZW1vcnkga2lsbGVyLiAoRm9yCitleGFtcGxlLCBpZiB0aGVyZSBpcyBvbmx5IDUxMlwgTUIgbWVtb3J5IGF2YWlsYWJsZSwgYSAxNzZcIE1CIGRpcmVjdG9yeSBtYXkKK3NlcmlvdXNseSBjcmFtcCB0aGUgc3lzdGVtJ3Mgc3R5bGUuKQorLlRQCisuQiBpX3ZlcnNpb24KK0VuYWJsZSA2NC1iaXQgaW5vZGUgdmVyc2lvbiBzdXBwb3J0LiBUaGlzIG9wdGlvbiBpcyBvZmYgYnkgZGVmYXVsdC4KKworLlNIIEZJTEUgQVRUUklCVVRFUworVGhlIGV4dDIsIGV4dDMsIGFuZCBleHQ0IGZpbGVzeXN0ZW1zIHN1cHBvcnQgc2V0dGluZyB0aGUgZm9sbG93aW5nIGZpbGUKK2F0dHJpYnV0ZXMgb24gTGludXggc3lzdGVtcyB1c2luZyB0aGUKKy5CUiBjaGF0dHIgKDEpCit1dGlsaXR5OgorLnNwCisuQlIgYSAiIC0gYXBwZW5kIG9ubHkiCisuc3AKKy5CUiBBICIgLSBubyBhdGltZSB1cGRhdGVzIgorLnNwCisuQlIgZCAiIC0gbm8gZHVtcCIKKy5zcAorLkJSIEQgIiAtIHN5bmNocm9ub3VzIGRpcmVjdG9yeSB1cGRhdGVzIgorLnNwCisuQlIgaSAiIC0gaW1tdXRhYmxlIgorLnNwCisuQlIgUyAiIC0gc3luY2hyb25vdXMgdXBkYXRlcyIKKy5zcAorLkJSIHUgIiAtIHVuZGVsZXRhYmxlIgorLnNwCitJbiBhZGRpdGlvbiwgdGhlIGV4dDMgYW5kIGV4dDQgZmlsZXN5c3RlbXMgc3VwcG9ydCB0aGUgZm9sbG93aW5nIGZsYWc6Cisuc3AKKy5CUiBqICIgLSBkYXRhIGpvdXJuYWxpbmciCisuc3AKK0ZpbmFsbHksIHRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGZsYWc6Cisuc3AKKy5CUiBlICIgLSBleHRlbnRzIGZvcm1hdCIKKy5zcAorRm9yIGRlc2NyaXB0aW9ucyBvZiB0aGVzZSBhdHRyaWJ1dGUgZmxhZ3MsIHBsZWFzZSByZWZlciB0byB0aGUKKy5CUiBjaGF0dHIgKDEpCittYW4gcGFnZS4KKy5TSCBTRUUgQUxTTworLkJSIG1rZTJmcyAoOCksCisuQlIgbWtlMmZzLmNvbmYgKDUpLAorLkJSIGUyZnNjayAoOCksCisuQlIgZHVtcGUyZnMgKDgpLAorLkJSIHR1bmUyZnMgKDgpLAorLkJSIGRlYnVnZnMgKDgpLAorLkJSIG1vdW50ICg4KSwKKy5CUiBjaGF0dHIgKDEpCmRpZmYgLS1naXQgYS9taXNjL2ZpbGVmcmFnLjguaW4gYi9taXNjL2ZpbGVmcmFnLjguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZkN2IyNwotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvZmlsZWZyYWcuOC5pbgpAQCAtMCwwICsxLDYyIEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlRIIEZJTEVGUkFHIDggIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2ZpbGVmcmFnIFwtIHJlcG9ydCBvbiBmaWxlIGZyYWdtZW50YXRpb24KKy5TSCBTWU5PUFNJUworLkIgZmlsZWZyYWcKK1sKKy5CSSBcLWIgYmxvY2tzaXplCitdCitbCisuQiBcLUJla3N2eFgKK10KK1sKKy5JIGZpbGVzLi4uCitdCisuU0ggREVTQ1JJUFRJT04KKy5CIGZpbGVmcmFnCityZXBvcnRzIG9uIGhvdyBiYWRseSBmcmFnbWVudGVkIGEgcGFydGljdWxhciBmaWxlIG1pZ2h0IGJlLiAgSXQgbWFrZXMgCithbGxvd2FuY2VzIGZvciBpbmRpcmVjdCBibG9ja3MgZm9yIGV4dDIgYW5kIGV4dDMgZmlsZXN5c3RlbXMsIGJ1dCBjYW4gYmUKK3VzZWQgb24gZmlsZXMgZm9yIGFueSBmaWxlc3lzdGVtLgorLlBQCitUaGUgCisuQiBmaWxlZnJhZworcHJvZ3JhbSBpbml0aWFsbHkgYXR0ZW1wdHMgdG8gZ2V0IHRoZQorZXh0ZW50IGluZm9ybWF0aW9uIHVzaW5nIEZJRU1BUCBpb2N0bCB3aGljaCBpcyBtb3JlIGVmZmljaWVudCBhbmQgZmFzdGVyLgorSWYgRklFTUFQIGlzIG5vdCBzdXBwb3J0ZWQgdGhlbiBmaWxlZnJhZyB3aWxsIGZhbGwgYmFjayB0byB1c2luZyBGSUJNQVAuCisuU0ggT1BUSU9OUworLlRQCisuQiBcLUIKK0ZvcmNlIHRoZSB1c2Ugb2YgdGhlIG9sZGVyIEZJQk1BUCBpb2N0bCBpbnN0ZWFkIG9mIHRoZSBGSUVNQVAgaW9jdGwgZm9yCit0ZXN0aW5nIHB1cnBvc2VzLgorLlRQCisuQkkgXC1iIGJsb2Nrc2l6ZQorVXNlCisuSSBibG9ja3NpemUKK2luIGJ5dGVzIGZvciBvdXRwdXQgaW5zdGVhZCBvZiB0aGUgZmlsZXN5c3RlbSBibG9ja3NpemUuCitGb3IgY29tcGF0aWJpbGl0eSB3aXRoIGVhcmxpZXIgdmVyc2lvbnMgb2YKKy5CUiBmaWxlZnJhZyAsCitpZgorLkkgYmxvY2tzaXplCitpcyB1bnNwZWNpZmllZCBpdCBkZWZhdWx0cyB0byAxMDI0IGJ5dGVzLgorLlRQCisuQiBcLWUKK1ByaW50IG91dHB1dCBpbiBleHRlbnQgZm9ybWF0LCBldmVuIGZvciBibG9jay1tYXBwZWQgZmlsZXMuCisuVFAKKy5CSSBcLWsKK1VzZSAxMDI0XC1ieXRlIGJsb2Nrc2l6ZSBmb3Igb3V0cHV0IChpZGVudGljYWwgdG8gJ1wtYiAxMDI0JykuCisuVFAKKy5CIFwtcworU3luYyB0aGUgZmlsZSBiZWZvcmUgcmVxdWVzdGluZyB0aGUgbWFwcGluZy4KKy5UUAorLkIgXC12CitCZSB2ZXJib3NlIHdoZW4gY2hlY2tpbmcgZm9yIGZpbGUgZnJhZ21lbnRhdGlvbi4KKy5UUAorLkIgXC14CitEaXNwbGF5IG1hcHBpbmcgb2YgZXh0ZW5kZWQgYXR0cmlidXRlcy4KKy5UUAorLkIgXC1YCitEaXNwbGF5IGV4dGVudCBibG9jayBudW1iZXJzIGluIGhleGFkZWNpbWFsIGZvcm1hdC4KKy5TSCBBVVRIT1IKKy5CIGZpbGVmcmFnCit3YXMgd3JpdHRlbiBieSBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1Pi4KZGlmZiAtLWdpdCBhL21pc2MvZmlsZWZyYWcuYyBiL21pc2MvZmlsZWZyYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWE4Njg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9maWxlZnJhZy5jCkBAIC0wLDAgKzEsNTcyIEBACisvKgorICogZmlsZWZyYWcuYyAtLSByZXBvcnQgaWYgYSBwYXJ0aWN1bGFyIGZpbGUgaXMgZnJhZ21lbnRlZAorICoKKyAqIENvcHlyaWdodCAyMDAzIGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZuZGVmIF9fbGludXhfXworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2ludCBtYWluKHZvaWQpIHsKKwlmcHV0cygiVGhpcyBwcm9ncmFtIGlzIG9ubHkgc3VwcG9ydGVkIG9uIExpbnV4IVxuIiwgc3RkZXJyKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisjZWxzZQorI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3Zmcy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZkLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJmcy5oPgorI2luY2x1ZGUgPGV4dDJmcy9leHQyX3R5cGVzLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2ZpZW1hcC5oPgorCitpbnQgdmVyYm9zZSA9IDA7CitpbnQgYmxvY2tzaXplOwkJLyogVXNlIHNwZWNpZmllZCBibG9ja3NpemUgKGRlZmF1bHQgMWtCKSAqLworaW50IHN5bmNfZmlsZSA9IDA7CS8qIGZzeW5jIGZpbGUgYmVmb3JlIGdldHRpbmcgdGhlIG1hcHBpbmcgKi8KK2ludCB4YXR0cl9tYXAgPSAwOwkvKiBnZXQgeGF0dHIgbWFwcGluZyAqLworaW50IGZvcmNlX2JtYXA7CS8qIGZvcmNlIHVzZSBvZiBGSUJNQVAgaW5zdGVhZCBvZiBGSUVNQVAgKi8KK2ludCBmb3JjZV9leHRlbnQ7CS8qIHByaW50IG91dHB1dCBpbiBleHRlbnQgZm9ybWF0IGFsd2F5cyAqLworaW50IGxvZ2ljYWxfd2lkdGggPSA4OworaW50IHBoeXNpY2FsX3dpZHRoID0gMTA7Citjb25zdCBjaGFyICpleHRfZm10ID0gIiU0ZDogJSpsbHUuLiUqbGx1OiAlKmxsdS4uJSpsbHU6ICU2bGx1OiAlc1xuIjsKK2NvbnN0IGNoYXIgKmhleF9mbXQgPSAiJTRkOiAlKmxseC4uJSpsbHg6ICUqbGx4Li4lKmxseDogJTZsbHg6ICVzXG4iOworCisjZGVmaW5lIEZJTEVGUkFHX0ZJRU1BUF9GTEFHU19DT01QQVQgKEZJRU1BUF9GTEFHX1NZTkMgfCBGSUVNQVBfRkxBR19YQVRUUikKKworI2RlZmluZSBGSUJNQVAJCV9JTygweDAwLCAxKQkvKiBibWFwIGFjY2VzcyAqLworI2RlZmluZSBGSUdFVEJTWglfSU8oMHgwMCwgMikJLyogZ2V0IHRoZSBibG9jayBzaXplIHVzZWQgZm9yIGJtYXAgKi8KKworI2RlZmluZSBMVVNUUkVfU1VQRVJfTUFHSUMgMHgwQkQwMEJEMAorCisjZGVmaW5lCUVYVDRfRVhURU5UU19GTAkJCTB4MDAwODAwMDAgLyogSW5vZGUgdXNlcyBleHRlbnRzICovCisjZGVmaW5lCUVYVDNfSU9DX0dFVEZMQUdTCQlfSU9SKCdmJywgMSwgbG9uZykKKworc3RhdGljIGludCBpbnRfbG9nMihpbnQgYXJnKQoreworCWludCAgICAgbCA9IDA7CisKKwlhcmcgPj49IDE7CisJd2hpbGUgKGFyZykgeworCQlsKys7CisJCWFyZyA+Pj0gMTsKKwl9CisJcmV0dXJuIGw7Cit9CisKK3N0YXRpYyBpbnQgaW50X2xvZzEwKHVuc2lnbmVkIGxvbmcgbG9uZyBhcmcpCit7CisJaW50ICAgICBsID0gMDsKKworCWFyZyA9IGFyZyAvIDEwOworCXdoaWxlIChhcmcpIHsKKwkJbCsrOworCQlhcmcgPSBhcmcgLyAxMDsKKwl9CisJcmV0dXJuIGw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGl2X2NlaWwodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQoreworCWlmICghYSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICgoYSAtIDEpIC8gYikgKyAxOworfQorCitzdGF0aWMgaW50IGdldF9ibWFwKGludCBmZCwgdW5zaWduZWQgbG9uZyBibG9jaywgdW5zaWduZWQgbG9uZyAqcGh5X2JsaykKK3sKKwlpbnQJcmV0OworCXVuc2lnbmVkIGludCBiOworCisJYiA9IGJsb2NrOworCXJldCA9IGlvY3RsKGZkLCBGSUJNQVAsICZiKTsgLyogRklCTUFQIHRha2VzIHBvaW50ZXIgdG8gaW50ZWdlciAqLworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLWVycm5vOworCSpwaHlfYmxrID0gYjsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2V4dGVudF9oZWFkZXIodm9pZCkKK3sKKwlwcmludGYoIiBleHQ6ICUqcyAlKnMgbGVuZ3RoOiAlKnMgZmxhZ3M6XG4iLAorCSAgICAgICBsb2dpY2FsX3dpZHRoICogMiArIDMsCisJICAgICAgICJsb2dpY2FsX29mZnNldDoiLAorCSAgICAgICBwaHlzaWNhbF93aWR0aCAqIDIgKyAzLCAicGh5c2ljYWxfb2Zmc2V0OiIsCisJICAgICAgIHBoeXNpY2FsX3dpZHRoICsgMSwKKwkgICAgICAgImV4cGVjdGVkOiIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9mbGFnKF9fdTMyICpmbGFncywgX191MzIgbWFzaywgY2hhciAqYnVmLCBjb25zdCBjaGFyICpuYW1lKQoreworCWlmICgoKmZsYWdzICYgbWFzaykgPT0gMCkKKwkJcmV0dXJuOworCisJc3RyY2F0KGJ1ZiwgbmFtZSk7CisJKmZsYWdzICY9IH5tYXNrOworfQorCitzdGF0aWMgdm9pZCBwcmludF9leHRlbnRfaW5mbyhzdHJ1Y3QgZmllbWFwX2V4dGVudCAqZm1fZXh0ZW50LCBpbnQgY3VyX2V4LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGV4cGVjdGVkLCBpbnQgYmxrX3NoaWZ0LAorCQkJICAgICAgZXh0MmZzX3N0cnVjdF9zdGF0ICpzdCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgcGh5c2ljYWxfYmxrOworCXVuc2lnbmVkIGxvbmcgbG9uZyBsb2dpY2FsX2JsazsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZXh0X2xlbjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZXh0X2Jsa3M7CisJX191MzIgZmVfZmxhZ3MsIG1hc2s7CisJY2hhciBmbGFnc1syNTZdID0gIiI7CisKKwkvKiBGb3IgaW5saW5lIGRhdGEgYWxsIG9mZnNldHMgc2hvdWxkIGJlIGluIGJ5dGVzLCBub3QgYmxvY2tzICovCisJaWYgKGZtX2V4dGVudC0+ZmVfZmxhZ3MgJiBGSUVNQVBfRVhURU5UX0RBVEFfSU5MSU5FKQorCQlibGtfc2hpZnQgPSAwOworCisJZXh0X2xlbiA9IGZtX2V4dGVudC0+ZmVfbGVuZ3RoID4+IGJsa19zaGlmdDsKKwlleHRfYmxrcyA9IChmbV9leHRlbnQtPmZlX2xlbmd0aCAtIDEpID4+IGJsa19zaGlmdDsKKwlsb2dpY2FsX2JsayA9IGZtX2V4dGVudC0+ZmVfbG9naWNhbCA+PiBibGtfc2hpZnQ7CisJaWYgKGZtX2V4dGVudC0+ZmVfZmxhZ3MgJiBGSUVNQVBfRVhURU5UX1VOS05PV04pIHsKKwkJcGh5c2ljYWxfYmxrID0gMDsKKwl9IGVsc2UgeworCQlwaHlzaWNhbF9ibGsgPSBmbV9leHRlbnQtPmZlX3BoeXNpY2FsID4+IGJsa19zaGlmdDsKKwl9CisKKwlpZiAoZXhwZWN0ZWQpCisJCXNwcmludGYoZmxhZ3MsIGV4dF9mbXQgPT0gaGV4X2ZtdCA/ICIlKmxseDogIiA6ICIlKmxsdTogIiwKKwkJCXBoeXNpY2FsX3dpZHRoLCBleHBlY3RlZCA+PiBibGtfc2hpZnQpOworCWVsc2UKKwkJc3ByaW50ZihmbGFncywgIiUuKnMgICIsIHBoeXNpY2FsX3dpZHRoLCAiICAgICAgICAgICAgICAgICAgICIpOworCisJZmVfZmxhZ3MgPSBmbV9leHRlbnQtPmZlX2ZsYWdzOworCXByaW50X2ZsYWcoJmZlX2ZsYWdzLCBGSUVNQVBfRVhURU5UX0xBU1QsIGZsYWdzLCAibGFzdCwiKTsKKwlwcmludF9mbGFnKCZmZV9mbGFncywgRklFTUFQX0VYVEVOVF9VTktOT1dOLCBmbGFncywgInVua25vd25fbG9jLCIpOworCXByaW50X2ZsYWcoJmZlX2ZsYWdzLCBGSUVNQVBfRVhURU5UX0RFTEFMTE9DLCBmbGFncywgImRlbGFsbG9jLCIpOworCXByaW50X2ZsYWcoJmZlX2ZsYWdzLCBGSUVNQVBfRVhURU5UX0VOQ09ERUQsIGZsYWdzLCAiZW5jb2RlZCwiKTsKKwlwcmludF9mbGFnKCZmZV9mbGFncywgRklFTUFQX0VYVEVOVF9EQVRBX0VOQ1JZUFRFRCwgZmxhZ3MsImVuY3J5cHRlZCwiKTsKKwlwcmludF9mbGFnKCZmZV9mbGFncywgRklFTUFQX0VYVEVOVF9OT1RfQUxJR05FRCwgZmxhZ3MsICJub3RfYWxpZ25lZCwiKTsKKwlwcmludF9mbGFnKCZmZV9mbGFncywgRklFTUFQX0VYVEVOVF9EQVRBX0lOTElORSwgZmxhZ3MsICJpbmxpbmUsIik7CisJcHJpbnRfZmxhZygmZmVfZmxhZ3MsIEZJRU1BUF9FWFRFTlRfREFUQV9UQUlMLCBmbGFncywgInRhaWxfcGFja2VkLCIpOworCXByaW50X2ZsYWcoJmZlX2ZsYWdzLCBGSUVNQVBfRVhURU5UX1VOV1JJVFRFTiwgZmxhZ3MsICJ1bndyaXR0ZW4sIik7CisJcHJpbnRfZmxhZygmZmVfZmxhZ3MsIEZJRU1BUF9FWFRFTlRfTUVSR0VELCBmbGFncywgIm1lcmdlZCwiKTsKKwlwcmludF9mbGFnKCZmZV9mbGFncywgRklFTUFQX0VYVEVOVF9TSEFSRUQsIGZsYWdzLCAic2hhcmVkLCIpOworCS8qIHByaW50IGFueSB1bmtub3duIGZsYWdzIGFzIGhleCB2YWx1ZXMgKi8KKwlmb3IgKG1hc2sgPSAxOyBmZV9mbGFncyAhPSAwICYmIG1hc2sgIT0gMDsgbWFzayA8PD0gMSkgeworCQljaGFyIGhleFs2XTsKKworCQlpZiAoKGZlX2ZsYWdzICYgbWFzaykgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlzcHJpbnRmKGhleCwgIiUjMDR4LCIsIG1hc2spOworCQlwcmludF9mbGFnKCZmZV9mbGFncywgbWFzaywgZmxhZ3MsIGhleCk7CisJfQorCisJaWYgKGZtX2V4dGVudC0+ZmVfbG9naWNhbCArIGZtX2V4dGVudC0+ZmVfbGVuZ3RoID49IHN0LT5zdF9zaXplKQorCQlzdHJjYXQoZmxhZ3MsICJlb2YsIik7CisKKwkvKiBSZW1vdmUgdHJhaWxpbmcgY29tbWEsIGlmIGFueSAqLworCWlmIChmbGFnc1swXSAhPSAnXDAnKQorCQlmbGFnc1tzdHJubGVuKGZsYWdzLCBzaXplb2YoZmxhZ3MpKSAtIDFdID0gJ1wwJzsKKworCXByaW50ZihleHRfZm10LCBjdXJfZXgsIGxvZ2ljYWxfd2lkdGgsIGxvZ2ljYWxfYmxrLAorCSAgICAgICBsb2dpY2FsX3dpZHRoLCBsb2dpY2FsX2JsayArIGV4dF9ibGtzLAorCSAgICAgICBwaHlzaWNhbF93aWR0aCwgcGh5c2ljYWxfYmxrLAorCSAgICAgICBwaHlzaWNhbF93aWR0aCwgcGh5c2ljYWxfYmxrICsgZXh0X2Jsa3MsCisJICAgICAgIGV4dF9sZW4sIGZsYWdzKTsKK30KKworc3RhdGljIGludCBmaWxlZnJhZ19maWVtYXAoaW50IGZkLCBpbnQgYmxrX3NoaWZ0LCBpbnQgKm51bV9leHRlbnRzLAorCQkJICAgZXh0MmZzX3N0cnVjdF9zdGF0ICpzdCkKK3sKKwljaGFyIGJ1ZlsxNjM4NF07CisJc3RydWN0IGZpZW1hcCAqZmllbWFwID0gKHN0cnVjdCBmaWVtYXAgKilidWY7CisJc3RydWN0IGZpZW1hcF9leHRlbnQgKmZtX2V4dCA9ICZmaWVtYXAtPmZtX2V4dGVudHNbMF07CisJaW50IGNvdW50ID0gKHNpemVvZihidWYpIC0gc2l6ZW9mKCpmaWVtYXApKSAvCisJCQlzaXplb2Yoc3RydWN0IGZpZW1hcF9leHRlbnQpOworCXVuc2lnbmVkIGxvbmcgbG9uZyBleHBlY3RlZCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGZpZW1hcF9oZWFkZXJfcHJpbnRlZCA9IDA7CisJaW50IHRvdF9leHRlbnRzID0gMCwgbiA9IDA7CisJaW50IGxhc3QgPSAwOworCWludCByYzsKKworCW1lbXNldChmaWVtYXAsIDAsIHNpemVvZihzdHJ1Y3QgZmllbWFwKSk7CisKKwlpZiAoc3luY19maWxlKQorCQlmbGFncyB8PSBGSUVNQVBfRkxBR19TWU5DOworCisJaWYgKHhhdHRyX21hcCkKKwkJZmxhZ3MgfD0gRklFTUFQX0ZMQUdfWEFUVFI7CisKKwlkbyB7CisJCWZpZW1hcC0+Zm1fbGVuZ3RoID0gfjBVTEw7CisJCWZpZW1hcC0+Zm1fZmxhZ3MgPSBmbGFnczsKKwkJZmllbWFwLT5mbV9leHRlbnRfY291bnQgPSBjb3VudDsKKwkJcmMgPSBpb2N0bChmZCwgRlNfSU9DX0ZJRU1BUCwgKHVuc2lnbmVkIGxvbmcpIGZpZW1hcCk7CisJCWlmIChyYyA8IDApIHsKKwkJCXN0YXRpYyBpbnQgZmllbWFwX2luY29tcGF0X3ByaW50ZWQ7CisKKwkJCXJjID0gLWVycm5vOworCQkJaWYgKHJjID09IC1FQkFEUiAmJiAhZmllbWFwX2luY29tcGF0X3ByaW50ZWQpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkZJRU1BUCBmYWlsZWQgd2l0aCB1bmtub3duICIKKwkJCQkJCSJmbGFncyAleFxuIiwKKwkJCQkgICAgICAgZmllbWFwLT5mbV9mbGFncyk7CisJCQkJZmllbWFwX2luY29tcGF0X3ByaW50ZWQgPSAxOworCQkJfQorCQkJcmV0dXJuIHJjOworCQl9CisKKwkJLyogSWYgMCBleHRlbnRzIGFyZSByZXR1cm5lZCwgdGhlbiBtb3JlIGlvY3RscyBhcmUgbm90IG5lZWRlZCAqLworCQlpZiAoZmllbWFwLT5mbV9tYXBwZWRfZXh0ZW50cyA9PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKHZlcmJvc2UgJiYgIWZpZW1hcF9oZWFkZXJfcHJpbnRlZCkgeworCQkJcHJpbnRfZXh0ZW50X2hlYWRlcigpOworCQkJZmllbWFwX2hlYWRlcl9wcmludGVkID0gMTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBmaWVtYXAtPmZtX21hcHBlZF9leHRlbnRzOyBpKyspIHsKKwkJCWlmIChmbV9leHRbaV0uZmVfbG9naWNhbCAhPSAwICYmCisJCQkgICAgZm1fZXh0W2ldLmZlX3BoeXNpY2FsICE9IGV4cGVjdGVkKSB7CisJCQkJdG90X2V4dGVudHMrKzsKKwkJCX0gZWxzZSB7CisJCQkJZXhwZWN0ZWQgPSAwOworCQkJCWlmICghdG90X2V4dGVudHMpCisJCQkJCXRvdF9leHRlbnRzID0gMTsKKwkJCX0KKwkJCWlmICh2ZXJib3NlKQorCQkJCXByaW50X2V4dGVudF9pbmZvKCZmbV9leHRbaV0sIG4sIGV4cGVjdGVkLAorCQkJCQkJICBibGtfc2hpZnQsIHN0KTsKKworCQkJZXhwZWN0ZWQgPSBmbV9leHRbaV0uZmVfcGh5c2ljYWwgKyBmbV9leHRbaV0uZmVfbGVuZ3RoOworCQkJaWYgKGZtX2V4dFtpXS5mZV9mbGFncyAmIEZJRU1BUF9FWFRFTlRfTEFTVCkKKwkJCQlsYXN0ID0gMTsKKwkJCW4rKzsKKwkJfQorCisJCWZpZW1hcC0+Zm1fc3RhcnQgPSAoZm1fZXh0W2kgLSAxXS5mZV9sb2dpY2FsICsKKwkJCQkgICAgZm1fZXh0W2kgLSAxXS5mZV9sZW5ndGgpOworCX0gd2hpbGUgKGxhc3QgPT0gMCk7CisKKwkqbnVtX2V4dGVudHMgPSB0b3RfZXh0ZW50czsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIEVYVDJfRElSRUNUCTEyCisKK3N0YXRpYyBpbnQgZmlsZWZyYWdfZmlibWFwKGludCBmZCwgaW50IGJsa19zaGlmdCwgaW50ICpudW1fZXh0ZW50cywKKwkJCSAgIGV4dDJmc19zdHJ1Y3Rfc3RhdCAqc3QsCisJCQkgICB1bnNpZ25lZCBsb25nIG51bWJsb2NrcywgaW50IGlzX2V4dDIpCit7CisJc3RydWN0IGZpZW1hcF9leHRlbnQJZm1fZXh0OworCXVuc2lnbmVkIGxvbmcJCWksIGxhc3RfYmxvY2s7CisJdW5zaWduZWQgbG9uZyBsb25nCWxvZ2ljYWw7CisJCQkJLyogQmxvY2tzIHBlciBpbmRpcmVjdCBibG9jayAqLworCWNvbnN0IGxvbmcJCWJwaWIgPSBzdC0+c3RfYmxrc2l6ZSAvIDQ7CisJaW50CQkJY291bnQ7CisKKwlpZiAoZm9yY2VfZXh0ZW50KSB7CisJCW1lbXNldCgmZm1fZXh0LCAwLCBzaXplb2YoZm1fZXh0KSk7CisJCWZtX2V4dC5mZV9mbGFncyA9IEZJRU1BUF9FWFRFTlRfTUVSR0VEOworCX0KKworCWlmIChzeW5jX2ZpbGUpCisJCWZzeW5jKGZkKTsKKworCWZvciAoaSA9IDAsIGxvZ2ljYWwgPSAwLCAqbnVtX2V4dGVudHMgPSAwLCBjb3VudCA9IGxhc3RfYmxvY2sgPSAwOworCSAgICAgaSA8IG51bWJsb2NrczsKKwkgICAgIGkrKywgbG9naWNhbCArPSBzdC0+c3RfYmxrc2l6ZSkgeworCQl1bnNpZ25lZCBsb25nIGJsb2NrID0gMDsKKwkJaW50IHJjOworCisJCWlmIChpc19leHQyICYmIGxhc3RfYmxvY2spIHsKKwkJCWlmICgoKGkgLSBFWFQyX0RJUkVDVCkgJSBicGliKSA9PSAwKQorCQkJCWxhc3RfYmxvY2srKzsKKwkJCWlmICgoKGkgLSBFWFQyX0RJUkVDVCAtIGJwaWIpICUgKGJwaWIgKiBicGliKSkgPT0gMCkKKwkJCQlsYXN0X2Jsb2NrKys7CisJCQlpZiAoKChpIC0gRVhUMl9ESVJFQ1QgLSBicGliIC0gYnBpYiAqIGJwaWIpICUKKwkJCSAgICAgKCgodW5zaWduZWQgbG9uZyBsb25nKWJwaWIpICogYnBpYiAqIGJwaWIpKSA9PSAwKQorCQkJCWxhc3RfYmxvY2srKzsKKwkJfQorCQlyYyA9IGdldF9ibWFwKGZkLCBpLCAmYmxvY2spOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCQlpZiAoYmxvY2sgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoKm51bV9leHRlbnRzID09IDApIHsKKwkJCSgqbnVtX2V4dGVudHMpKys7CisJCQlpZiAoZm9yY2VfZXh0ZW50KSB7CisJCQkJcHJpbnRfZXh0ZW50X2hlYWRlcigpOworCQkJCWZtX2V4dC5mZV9waHlzaWNhbCA9IGJsb2NrICogc3QtPnN0X2Jsa3NpemU7CisJCQl9CisJCX0KKwkJY291bnQrKzsKKwkJaWYgKGZvcmNlX2V4dGVudCAmJiBsYXN0X2Jsb2NrICE9IDAgJiYKKwkJICAgIChibG9jayAhPSBsYXN0X2Jsb2NrICsgMSB8fAorCQkgICAgIGZtX2V4dC5mZV9sb2dpY2FsICsgZm1fZXh0LmZlX2xlbmd0aCAhPSBsb2dpY2FsKSkgeworCQkJcHJpbnRfZXh0ZW50X2luZm8oJmZtX2V4dCwgKm51bV9leHRlbnRzIC0gMSwKKwkJCQkJICAobGFzdF9ibG9jayArIDEpICogc3QtPnN0X2Jsa3NpemUsCisJCQkJCSAgYmxrX3NoaWZ0LCBzdCk7CisJCQlmbV9leHQuZmVfbGVuZ3RoID0gMDsKKwkJCSgqbnVtX2V4dGVudHMpKys7CisJCX0gZWxzZSBpZiAobGFzdF9ibG9jayAmJiAoYmxvY2sgIT0gbGFzdF9ibG9jayArIDEpKSB7CisJCQlpZiAodmVyYm9zZSkKKwkJCQlwcmludGYoIkRpc2NvbnRpbnVpdHk6IEJsb2NrICVsZCBpcyBhdCAlbHUgKHdhcyAiCisJCQkJICAgICAgICIlbHUpXG4iLCBpLCBibG9jaywgbGFzdF9ibG9jayArIDEpOworCQkJZm1fZXh0LmZlX2xlbmd0aCA9IDA7CisJCQkoKm51bV9leHRlbnRzKSsrOworCQl9CisJCWZtX2V4dC5mZV9sb2dpY2FsID0gbG9naWNhbDsKKwkJZm1fZXh0LmZlX3BoeXNpY2FsID0gYmxvY2sgKiBzdC0+c3RfYmxrc2l6ZTsKKwkJZm1fZXh0LmZlX2xlbmd0aCArPSBzdC0+c3RfYmxrc2l6ZTsKKwkJbGFzdF9ibG9jayA9IGJsb2NrOworCX0KKworCWlmIChmb3JjZV9leHRlbnQpCisJCXByaW50X2V4dGVudF9pbmZvKCZmbV9leHQsICpudW1fZXh0ZW50cyAtIDEsCisJCQkJICBsYXN0X2Jsb2NrICogc3QtPnN0X2Jsa3NpemUsIGJsa19zaGlmdCwgc3QpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGZyYWdfcmVwb3J0KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RhdGZzIGZzaW5mbzsKKwlzdGF0aWMgdW5zaWduZWQgaW50IGJsa3NpemU7CisJZXh0MmZzX3N0cnVjdF9zdGF0IHN0OworCWludAkJYmxrX3NoaWZ0OworCWxvbmcJCWZkOworCXVuc2lnbmVkIGxvbmcgbG9uZwludW1ibG9ja3M7CisJaW50CQlkYXRhX2Jsb2Nrc19wZXJfY3lsID0gMTsKKwlpbnQJCW51bV9leHRlbnRzID0gMSwgZXhwZWN0ZWQgPSB+MDsKKwlpbnQJCWlzX2V4dDIgPSAwOworCXN0YXRpYyBkZXZfdAlsYXN0X2RldmljZTsKKwlpbnQJCXdpZHRoOworCWludAkJcmMgPSAwOworCisjaWYgZGVmaW5lZChIQVZFX09QRU42NCkgJiYgIWRlZmluZWQoX19PU1hfQVZBSUxBQkxFX0JVVF9ERVBSRUNBVEVEKQorCWZkID0gb3BlbjY0KGZpbGVuYW1lLCBPX1JET05MWSk7CisjZWxzZQorCWZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworI2VuZGlmCisJaWYgKGZkIDwgMCkgeworCQlyYyA9IC1lcnJubzsKKwkJcGVycm9yKCJvcGVuIik7CisJCXJldHVybiByYzsKKwl9CisKKyNpZiBkZWZpbmVkKEhBVkVfRlNUQVQ2NCkgJiYgIWRlZmluZWQoX19PU1hfQVZBSUxBQkxFX0JVVF9ERVBSRUNBVEVEKQorCWlmIChmc3RhdDY0KGZkLCAmc3QpIDwgMCkgeworI2Vsc2UKKwlpZiAoZnN0YXQoZmQsICZzdCkgPCAwKSB7CisjZW5kaWYKKwkJcmMgPSAtZXJybm87CisJCXBlcnJvcigic3RhdCIpOworCQlnb3RvIG91dF9jbG9zZTsKKwl9CisKKwlpZiAobGFzdF9kZXZpY2UgIT0gc3Quc3RfZGV2KSB7CisJCWlmIChmc3RhdGZzKGZkLCAmZnNpbmZvKSA8IDApIHsKKwkJCXJjID0gLWVycm5vOworCQkJcGVycm9yKCJmc3RhdGZzIik7CisJCQlnb3RvIG91dF9jbG9zZTsKKwkJfQorCQlpZiAoaW9jdGwoZmQsIEZJR0VUQlNaLCAmYmxrc2l6ZSkgPCAwKQorCQkJYmxrc2l6ZSA9IGZzaW5mby5mX2JzaXplOworCQlpZiAodmVyYm9zZSkKKwkJCXByaW50ZigiRmlsZXN5c3RlbSB0eXBlIGlzOiAlbHhcbiIsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpZnNpbmZvLmZfdHlwZSk7CisJfQorCXN0LnN0X2Jsa3NpemUgPSBibGtzaXplOworCWlmIChmc2luZm8uZl90eXBlID09IDB4ZWY1MSB8fCBmc2luZm8uZl90eXBlID09IDB4ZWY1MiB8fAorCSAgICBmc2luZm8uZl90eXBlID09IDB4ZWY1MykgeworCQl1bnNpZ25lZCBpbnQJZmxhZ3M7CisKKwkJaWYgKGlvY3RsKGZkLCBFWFQzX0lPQ19HRVRGTEFHUywgJmZsYWdzKSA9PSAwICYmCisJCSAgICAhKGZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSkKKwkJCWlzX2V4dDIgPSAxOworCX0KKworCWlmIChpc19leHQyKSB7CisJCWxvbmcgY3lsZ3JvdXBzID0gZGl2X2NlaWwoZnNpbmZvLmZfYmxvY2tzLCBibGtzaXplICogOCk7CisKKwkJaWYgKHZlcmJvc2UgJiYgbGFzdF9kZXZpY2UgIT0gc3Quc3RfZGV2KQorCQkJcHJpbnRmKCJGaWxlc3lzdGVtIGN5bGluZGVyIGdyb3VwcyBhcHByb3hpbWF0ZWx5ICVsZFxuIiwKKwkJCSAgICAgICBjeWxncm91cHMpOworCisJCWRhdGFfYmxvY2tzX3Blcl9jeWwgPSBibGtzaXplICogOCAtCisJCQkJCShmc2luZm8uZl9maWxlcyAvIDggLyBjeWxncm91cHMpIC0gMzsKKwl9CisJbGFzdF9kZXZpY2UgPSBzdC5zdF9kZXY7CisKKwl3aWR0aCA9IGludF9sb2cxMChmc2luZm8uZl9ibG9ja3MpOworCWlmICh3aWR0aCA+IHBoeXNpY2FsX3dpZHRoKQorCQlwaHlzaWNhbF93aWR0aCA9IHdpZHRoOworCisJbnVtYmxvY2tzID0gKHN0LnN0X3NpemUgKyBibGtzaXplIC0gMSkgLyBibGtzaXplOworCWlmIChibG9ja3NpemUgIT0gMCkKKwkJYmxrX3NoaWZ0ID0gaW50X2xvZzIoYmxvY2tzaXplKTsKKwllbHNlCisJCWJsa19zaGlmdCA9IGludF9sb2cyKGJsa3NpemUpOworCisJd2lkdGggPSBpbnRfbG9nMTAobnVtYmxvY2tzKTsKKwlpZiAod2lkdGggPiBsb2dpY2FsX3dpZHRoKQorCQlsb2dpY2FsX3dpZHRoID0gd2lkdGg7CisJaWYgKHZlcmJvc2UpCisJCXByaW50ZigiRmlsZSBzaXplIG9mICVzIGlzICVsbHUgKCVsbHUgYmxvY2slcyBvZiAlZCBieXRlcylcbiIsCisJCSAgICAgICBmaWxlbmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdC5zdF9zaXplLAorCQkgICAgICAgbnVtYmxvY2tzICogYmxrc2l6ZSA+PiBibGtfc2hpZnQsCisJCSAgICAgICBudW1ibG9ja3MgPT0gMSA/ICIiIDogInMiLCAxIDw8IGJsa19zaGlmdCk7CisKKwlpZiAoIWZvcmNlX2JtYXApIHsKKwkJcmMgPSBmaWxlZnJhZ19maWVtYXAoZmQsIGJsa19zaGlmdCwgJm51bV9leHRlbnRzLCAmc3QpOworCQlleHBlY3RlZCA9IDA7CisJfQorCisJaWYgKGZvcmNlX2JtYXAgfHwgcmMgPCAwKSB7IC8qIEZJRU1BUCBmYWlsZWQsIHRyeSBGSUJNQVAgaW5zdGVhZCAqLworCQlleHBlY3RlZCA9IGZpbGVmcmFnX2ZpYm1hcChmZCwgYmxrX3NoaWZ0LCAmbnVtX2V4dGVudHMsCisJCQkJCSAgICZzdCwgbnVtYmxvY2tzLCBpc19leHQyKTsKKwkJaWYgKGV4cGVjdGVkIDwgMCkgeworCQkJaWYgKGV4cGVjdGVkID09IC1FSU5WQUwgfHwgZXhwZWN0ZWQgPT0gLUVOT1RUWSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IEZJQk1BUCB1bnN1cHBvcnRlZFxuIiwKKwkJCQkJZmlsZW5hbWUpOworCQkJfSBlbHNlIGlmIChleHBlY3RlZCA9PSAtRVBFUk0pIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIiVzOiBGSUJNQVAgcmVxdWlyZXMgcm9vdCBwcml2aWxlZ2VzXG4iLAorCQkJCQlmaWxlbmFtZSk7CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IEZJQk1BUCBlcnJvcjogJXMiLAorCQkJCQlmaWxlbmFtZSwgc3RyZXJyb3IoZXhwZWN0ZWQpKTsKKwkJCX0KKwkJCXJjID0gZXhwZWN0ZWQ7CisJCQlnb3RvIG91dF9jbG9zZTsKKwkJfSBlbHNlIHsKKwkJCXJjID0gMDsKKwkJfQorCQlleHBlY3RlZCA9IGV4cGVjdGVkIC8gZGF0YV9ibG9ja3NfcGVyX2N5bCArIDE7CisJfQorCisJaWYgKG51bV9leHRlbnRzID09IDEpCisJCXByaW50ZigiJXM6IDEgZXh0ZW50IGZvdW5kIiwgZmlsZW5hbWUpOworCWVsc2UKKwkJcHJpbnRmKCIlczogJWQgZXh0ZW50cyBmb3VuZCIsIGZpbGVuYW1lLCBudW1fZXh0ZW50cyk7CisJLyogY291bnQsIGFuZCB0aHVzIGV4cGVjdGVkLCBvbmx5IHNldCBmb3IgaW5kaXJlY3QgRklCTUFQJ2QgZmlsZXMgKi8KKwlpZiAoaXNfZXh0MiAmJiBleHBlY3RlZCAmJiBleHBlY3RlZCA8IG51bV9leHRlbnRzKQorCQlwcmludGYoIiwgcGVyZmVjdGlvbiB3b3VsZCBiZSAlZCBleHRlbnQlc1xuIiwgZXhwZWN0ZWQsCisJCQkoZXhwZWN0ZWQgPiAxKSA/ICJzIiA6ICIiKTsKKwllbHNlCisJCWZwdXRjKCdcbicsIHN0ZG91dCk7CitvdXRfY2xvc2U6CisJY2xvc2UoZmQpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBbLWJ7YmxvY2tzaXplfV0gWy1CZWtsc3Z4WF0gZmlsZSAuLi5cbiIsCisJCXByb2duYW1lKTsKKwlleGl0KDEpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqYXJndikKK3sKKwljaGFyICoqY3BwOworCWludCByYyA9IDAsIGM7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgIkJiOjpla3N2eFgiKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdCJzoKKwkJCWZvcmNlX2JtYXArKzsKKwkJCWJyZWFrOworCQljYXNlICdiJzoKKwkJCWlmIChvcHRhcmcpIHsKKwkJCQljaGFyICplbmQ7CisJCQkJYmxvY2tzaXplID0gc3RydG91bChvcHRhcmcsICZlbmQsIDApOworCQkJCWlmIChlbmQpIHsKKwkJCQkJc3dpdGNoIChlbmRbMF0pIHsKKwkJCQkJY2FzZSAnZyc6CisJCQkJCWNhc2UgJ0cnOgorCQkJCQkJYmxvY2tzaXplICo9IDEwMjQ7CisJCQkJCQkvKiBubyBicmVhayAqLworCQkJCQljYXNlICdtJzoKKwkJCQkJY2FzZSAnTSc6CisJCQkJCQlibG9ja3NpemUgKj0gMTAyNDsKKwkJCQkJCS8qIG5vIGJyZWFrICovCisJCQkJCWNhc2UgJ2snOgorCQkJCQljYXNlICdLJzoKKwkJCQkJCWJsb2Nrc2l6ZSAqPSAxMDI0OworCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7IC8qIEFsbG93IC1iIHdpdGhvdXQgYXJndW1lbnQgZm9yIGNvbXBhdC4gUmVtb3ZlCisJCQkJICAqIHRoaXMgZXZlbnR1YWxseSBzbyAiLWIge2Jsb2Nrc2l6ZX0iIHdvcmtzICovCisJCQkJZnByaW50ZihzdGRlcnIsICIlczogLWIgbmVlZHMgYSBibG9ja3NpemUgIgorCQkJCQkib3B0aW9uLCBhc3N1bWluZyAxMDI0LWJ5dGUgYmxvY2tzLlxuIiwKKwkJCQkJYXJndlswXSk7CisJCQkJYmxvY2tzaXplID0gMTAyNDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdlJzoKKwkJCWZvcmNlX2V4dGVudCsrOworCQkJaWYgKCF2ZXJib3NlKQorCQkJCXZlcmJvc2UrKzsKKwkJCWJyZWFrOworCQljYXNlICdrJzoKKwkJCWJsb2Nrc2l6ZSA9IDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlzeW5jX2ZpbGUrKzsKKwkJCWJyZWFrOworCQljYXNlICd2JzoKKwkJCXZlcmJvc2UrKzsKKwkJCWJyZWFrOworCQljYXNlICd4JzoKKwkJCXhhdHRyX21hcCsrOworCQkJYnJlYWs7CisJCWNhc2UgJ1gnOgorCQkJZXh0X2ZtdCA9IGhleF9mbXQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKGFyZ3ZbMF0pOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAob3B0aW5kID09IGFyZ2MpCisJCXVzYWdlKGFyZ3ZbMF0pOworCisJZm9yIChjcHAgPSBhcmd2ICsgb3B0aW5kOyAqY3BwICE9ICdcMCc7IGNwcCsrKSB7CisJCWludCByYzIgPSBmcmFnX3JlcG9ydCgqY3BwKTsKKworCQlpZiAocmMyIDwgMCAmJiByYyA9PSAwKQorCQkJcmMgPSByYzI7CisJfQorCisJcmV0dXJuIC1yYzsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWlzYy9maW5kZnMuOC5pbiBiL21pc2MvZmluZGZzLjguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0Y2JjNwotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvZmluZGZzLjguaW4KQEAgLTAsMCArMSwzMyBAQAorLlwiIC0qLSBucm9mZiAtKi0KKy5cIiBDb3B5cmlnaHQgMTk5MywgMTk5NCwgMTk5NSBieSBUaGVvZG9yZSBUcydvLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy5cIiBUaGlzIGZpbGUgbWF5IGJlIGNvcGllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKy5cIiAKKy5USCBGSU5ERlMgOCAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQorZmluZGZzIFwtIEZpbmQgYSBmaWxlc3lzdGVtIGJ5IGxhYmVsIG9yIFVVSUQKKy5TSCBTWU5PUFNJUworLkIgZmluZGZzIAorLkJJIExBQkVMPSBsYWJlbAorLnNwCisuQiBmaW5kZnMKKy5CSSBVVUlEPSB1dWlkCisuU0ggREVTQ1JJUFRJT04KKy5CIGZpbmRmcword2lsbCBzZWFyY2ggdGhlIGRpc2tzIGluIHRoZSBzeXN0ZW0gbG9va2luZyBmb3IgYSBmaWxlc3lzdGVtIHdoaWNoIGhhcyAKK2EgbGFiZWwgbWF0Y2hpbmcKKy5JIGxhYmVsCitvciBhIFVVSUQgZXF1YWwgdG8gCisuSVIgdXVpZCAuCitJZiB0aGUgZmlsZXN5c3RlbSBpcyBmb3VuZCwgdGhlIGRldmljZSBuYW1lIGZvciB0aGUgZmlsZXN5c3RlbSB3aWxsCitiZSBwcmludGVkIG9uIHN0ZG91dC4KKy5QUAorLlNIIEFVVEhPUgorLkIgZmluZGZzIAord2FzIHdyaXR0ZW4gYnkgVGhlb2RvcmUgVHMnbyAodHl0c29AbWl0LmVkdSkuCisuU0ggQVZBSUxBQklMSVRZCisuQiBmaW5kZnMKK2lzIHBhcnQgb2YgdGhlIGUyZnNwcm9ncyBwYWNrYWdlIGFuZCBpcyBhdmFpbGFibGUgZnJvbSAKK2h0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LgorLlNIIFNFRSBBTFNPCisuQlIgZnNjayAoOCkKKwpkaWZmIC0tZ2l0IGEvbWlzYy9maW5kc3VwZXIuYyBiL21pc2MvZmluZHN1cGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI5MTMwYgotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvZmluZHN1cGVyLmMKQEAgLTAsMCArMSwyNjUgQEAKKy8qCisgKiBmaW5kc3VwZXIgLS0tIHF1aWNrIGhhY2tlZCB1cCBwcm9ncmFtIHRvIGZpbmQgZXh0MiBzdXBlcmJsb2Nrcy4KKyAqCisgKiBUaGlzIGlzIGEgaGFjaywgYW5kIHJlYWxseSBzaG91bGRuJ3QgYmUgaW5zdGFsbGVkIGFueXdoZXJlLiAgSWYgeW91CisgKiBuZWVkIGEgcHJvZ3JhbSB3aGljaCBkb2VzIHRoaXMgc29ydCBvZiBmdW5jdGlvbmFsaXR5LCBwbGVhc2UgdHJ5CisgKiB1c2luZyBncGFydCBwcm9ncmFtLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAxOTk4LTIwMDAsIFRoZW9kb3JlIFRzJ28uCisgKgorICogV2VsbCwgaGVyZSdzIG15IGxpbnV4IHZlcnNpb24gb2YgZmluZHN1cGVyLgorICogSSdtIHN1cmUgeW91IGNvdWxkYSBkb25lIGl0IGZhc3Rlci4gIDopCisgKiBJTUhPIHRoZXJlIGlzbid0IGFzIG11Y2ggaW50ZXJlc3RpbmcgZGF0YSB0byBwcmludCBpbiB0aGUKKyAqIGxpbnV4IHN1cGVyYmxvY2sgYXMgdGhlcmUgaXMgaW4gdGhlIFN1bk9TIHN1cGVyYmxvY2stLWRpc2sgZ2VvbWV0cnkgaXMKKyAqIG5vdCB0aGVyZS4uLmFuZCBsaW51eCBzZWVtcyB0byB1cGRhdGUgdGhlIGRhdGVzIGluIGFsbCB0aGUgc3VwZXJibG9ja3MuCisgKiBTdW5PUyBkb2Vzbid0IGV2ZXIgdG91Y2ggdGhlIGJhY2t1cCBzdXBlcmJsb2NrcyBhZnRlciB0aGUgZnMgaXMgY3JlYXRlZCwKKyAqIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBzbyB0aGUgZGF0ZSBpcyBtb3JlIGludGVyZXN0aW5nIElNSE8gYW5kIGNlcnRhaW5seQorICogbWFya3Mgd2hpY2ggc3VwZXJibG9ja3MgYXJlIGJhY2t1cCBvbmVzLgorICoKKyAqIEkgd2FudGVkIHRvIGFkZCBtc2RvcyBzdXBwb3J0LCBidXQgSSBjb3VsZG4ndCBtYWtlIGhlYWRzIG9yIHRhaWxzCisgKiBvZiB0aGUga2VybmVsIGluY2x1ZGUgZmlsZXMgdG8gZmluZCBhbnl0aGluZyBJIGNvdWxkIGxvb2sgZm9yIGluIG1zZG9zLgorICoKKyAqIFJlYWRpbmcgZXZlcnkgYmxvY2sgb2YgYSBTdW4gcGFydGl0aW9uIGlzIGZhaXJseSBxdWljay4gIERvaW5nIHRoZQorICogc2FtZSB1bmRlciBsaW51eCAoc2xvd2VyIGhhcmR3YXJlIEkgc3VwcG9zZSkganVzdCBpc24ndCB0aGUgc2FtZS4KKyAqIEl0IG1pZ2h0IGJlIG1vcmUgdXNlZnVsIHRvIGRlZmF1bHQgdG8gcmVhZGluZyB0aGUgZmlyc3QgKHNlY29uZD8pIGJsb2NrCisgKiBvbiBlYWNoIGN5bDsgaG93ZXZlciwgaWYgdGhlIGRpc2sgZ2VvbWV0cnkgaXMgd3JvbmcsIHRoaXMgaXMgdXNlbGVzcy4KKyAqIEJ1dCB5YSBjb3VsZCBzdGlsbCBnZXQgdGhlIGN5bCBzaXplIHRvIHByaW50IHRoZSBudW1iZXJzIGFzIGN5bHMgaW5zdGVhZAorICogb2YgYmxvY2tzLi4uCisgKgorICogcnVuIHRoaXMgYXMgKGZvciBleGFtcGxlKQorICogICBmaW5kc3VwZXIgL2Rldi9oZGEKKyAqICAgZmluZHN1cGVyIC9kZXYvaGRhIDQzNzc2MCAxMDI0ICAgKG15IGRpc2sgaGFzIGN5bHMgb2YgODU1KjUxMikKKyAqCisgKiBJIHN1cHBvc2UgdGhlIG5leHQgc3RlcCBpcyB0byBmaWdndXJlIG91dCBhIHdheSB0byBkZXRlcm1pbmUgaWYKKyAqIHRoZSBibG9jayBmb3VuZCBpcyB0aGUgZmlyc3Qgc3VwZXJibG9jayBzb21laG93LCBhbmQgaWYgc28sIGJ1aWxkCisgKiBhIHBhcnRpdGlvbiB0YWJsZSBmcm9tIHRoZSBzdXBlcmJsb2NrcyBmb3VuZC4uLiBidXQgdGhpcyBpcyBzdGlsbAorICogdXNlZnVsIGFzIGlzLgorICoKKyAqCQlTdGV2ZQorICogc3NkQG5ldmV0cy5vYXUub3JnCisgKiBzc2RAbWFlLmVuZ3IudWNmLmVkdQorICoKKyAqIEFkZGl0aW9uYWwgbm90ZXMgYnkgQW5kcmVhcyBEaWxnZXIgPGFkaWxnZXJAdHVyYm9saW51eC5jb20+OgorICogLSBmaXhlZCB0byBzdXBwb3J0ID4gMkcgZGV2aWNlcyBieSB1c2luZyBsc2VlazY0CisgKiAtIGFkZCByZWxpYWJpbGl0eSBjaGVja2luZyBmb3IgdGhlIHN1cGVyYmxvY2sgdG8gYXZvaWQgcmFuZG9tIGdhcmJhZ2UKKyAqIC0gYWRkIGFkYXB0aXZlIHByb2dyZXNzIG1ldGVyCisgKgorICogSXQgX3Nob3VsZF8gYWxzbyBoYW5kbGUgc2lnbmFscyBhbmQgdGVsbCB5b3UgdGhlIGVuZGluZyBibG9jaywgc28KKyAqIHRoYXQgeW91IGNhbiByZXN1bWUgYXQgYSBsYXRlciB0aW1lLCBidXQgaXQgZG9lc24ndCB5ZXQuLi4KKyAqCisgKiBOb3RlIHRoYXQgZ3BhcnQgZG9lcyBub3QgYXBwZWFyIHRvIGZpbmQgYWxsIHN1cGVyYmxvY2tzIHRoYXQgYXJlbid0IGFsaWduZWQKKyAqIHdpdGggdGhlIHN0YXJ0IG9mIGEgcG9zc2libGUgcGFydGl0aW9uLCBzbyBpdCBpcyBub3QgdXNlZnVsIGluIHN5c3RlbXMKKyAqIHdpdGggTFZNIG9yIHNpbWlsYXIgc2V0dXBzIHdoaWNoIGRvbid0IHVzZSBmYXQgcGFydGl0aW9uIGFsaWdubWVudC4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKy8qCisgKiBEb2N1bWVudGF0aW9uIGFkZGVuZHVtIGFkZGVkIGJ5IEFuZHJlYXMgZHdndWVzdEB3aW4udHVlLm5sL2FlYkBjd2kubmwKKyAqCisgKiBUaGUgcHJvZ3JhbSBmaW5kc3VwZXIgaXMgYSB1dGlsaXR5IHRoYXQgc2NhbnMgYSBkaXNrIGFuZCBmaW5kcworICogY29waWVzIG9mIGV4dDIgc3VwZXJibG9ja3MgKGJ5IGNoZWNraW5nIGZvciB0aGUgZXh0MiBzaWduYXR1cmUpLgorICoKKyAqIEZvciBlYWNoIHN1cGVyYmxvY2sgZm91bmQsIGl0IHByaW50cyB0aGUgb2Zmc2V0IGluIGJ5dGVzLCB0aGUKKyAqIG9mZnNldCBpbiAxMDI0LWJ5dGUgYmxvY2tzLCB0aGUgc2l6ZSBvZiB0aGUgZXh0MiBwYXJ0aXRpb24gaW4gZnMKKyAqIGJsb2NrcywgdGhlIGZpbGVzeXN0ZW0gYmxvY2tzaXplIChpbiBieXRlcyksIHRoZSBibG9jayBncm91cCBudW1iZXIKKyAqIChhbHdheXMgMCBmb3Igb2xkZXIgZXh0MiBzeXN0ZW1zKSwgYW5kIGEgdGltZXN0YW1wIChzX210aW1lKS4KKyAqCisgKiBUaGlzIHByb2dyYW0gY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgcGFydGl0aW9ucyB0aGF0IGhhdmUgYmVlbgorICogbG9zdC4gIFRoZSBzdXBlcmJsb2NrIGZvciBibG9jayBncm91cCAwIGlzIGZvdW5kIDEgYmxvY2sgKDIKKyAqIHNlY3RvcnMpIGFmdGVyIHRoZSBwYXJ0aXRpb24gc3RhcnQuCisgKgorICogRm9yIG5ldyBzeXN0ZW1zIHRoYXQgaGF2ZSBhIGJsb2NrIGdyb3VwIG51bWJlciBpbiB0aGUgc3VwZXJibG9jayBpdAorICogaXMgaW1tZWRpYXRlbHkgY2xlYXIgd2hpY2ggc3VwZXJibG9jayBpcyB0aGUgZmlyc3Qgb2YgYSBwYXJ0aXRpb24uCisgKiBGb3Igb2xkIHN5c3RlbXMgd2hlcmUgbm8gZ3JvdXAgbnVtYmVycyBhcmUgZ2l2ZW4sIHRoZSBmaXJzdAorICogc3VwZXJibG9jayBjYW4gYmUgcmVjb2duaXNlZCBieSB0aGUgdGltZXN0YW1wOiBhbGwgc3VwZXJibG9jaworICogY29waWVzIGhhdmUgdGhlIGNyZWF0aW9uIHRpbWUgaW4gc19tdGltZSwgZXhjZXB0IHRoZSBmaXJzdCwgd2hpY2gKKyAqIGhhcyB0aGUgbGFzdCB0aW1lIGUyZnNjayBvciB0dW5lMmZzIHdyb3RlIHRvIHRoZSBmaWxlc3lzdGVtLgorICoKKyAqLworCisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKyNpbmNsdWRlICJubHMtZW5hYmxlLmgiCisKKyN1bmRlZiBERUJVRworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgV0hZKGZtdCwgYXJnLi4uKSB7IHByaW50ZigiXHIlTGQ6ICIgZm10LCBzaywgIyNhcmcpIDsgY29udGludWU7IH0KKyNlbHNlCisjZGVmaW5lIFdIWShmbXQsIGFyZy4uLikgeyBjb250aW51ZTsgfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsCisJCV8oIlVzYWdlOiAgZmluZHN1cGVyIGRldmljZSBbc2tpcGJ5dGVzIFtzdGFydGtiXV1cbiIpKTsKKwlleGl0KDEpOworfQorCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IHNraXByYXRlPTUxMjsJCS8qIG9uZSBzZWN0b3IgKi8KKwlsb2ZmX3Qgc2s9MCwgc2tsPTA7CisJaW50IGZkOworCWNoYXIgKnM7CisJdGltZV90IHRtLCBsYXN0ID0gdGltZSgwKTsKKwlsb2ZmX3QgaW50ZXJ2YWwgPSAxMDI0ICogMTAyNDsKKwlpbnQgYywgcHJpbnRfam5sX2NvcGllcyA9IDA7CisJY29uc3QgY2hhciAqIGRldmljZV9uYW1lOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIGV4dDI7CisJLyogaW50ZXJlc3RpbmcgZmllbGRzOiBFWFQyX1NVUEVSX01BR0lDCisJICogICAgICBzX2Jsb2Nrc19jb3VudCBzX2xvZ19ibG9ja19zaXplIHNfbXRpbWUgc19tYWdpYyBzX2xhc3RjaGVjayAqLworCisjaWZkZWYgRU5BQkxFX05MUworCXNldGxvY2FsZShMQ19NRVNTQUdFUywgIiIpOworCXNldGxvY2FsZShMQ19DVFlQRSwgIiIpOworCWJpbmR0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSwgTE9DQUxFRElSKTsKKwl0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSk7CisJc2V0X2NvbV9lcnJfZ2V0dGV4dChnZXR0ZXh0KTsKKyNlbmRpZgorCisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiaiIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2onOgorCQkJcHJpbnRfam5sX2NvcGllcysrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl1c2FnZSgpOworCQl9CisJfQorCisJaWYgKG9wdGluZCA9PSBhcmdjKQorCQl1c2FnZSgpOworCisJZGV2aWNlX25hbWUgPSBhcmd2W29wdGluZCsrXTsKKworCWlmIChvcHRpbmQgPCBhcmdjKSB7CisJCXNraXByYXRlID0gc3RydG9sKGFyZ3Zbb3B0aW5kXSwgJnMsIDApOworCQlpZiAocyA9PSBhcmd2W29wdGluZF0pIHsKKwkJCWZwcmludGYoc3RkZXJyLF8oInNraXBieXRlcyBzaG91bGQgYmUgYSBudW1iZXIsIG5vdCAlc1xuIiksIHMpOworCQkJZXhpdCgxKTsKKwkJfQorCQlvcHRpbmQrKzsKKwl9CisJaWYgKHNraXByYXRlICYgMHgxZmYpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQlfKCJza2lwYnl0ZXMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBzZWN0b3Igc2l6ZVxuIikpOworCQlleGl0KDIpOworCX0KKwlpZiAob3B0aW5kIDwgYXJnYykgeworCQlzayA9IHNrbCA9IHN0cnRvbGwoYXJndltvcHRpbmRdLCAmcywgMCkgPDwgMTA7CisJCWlmIChzID09IGFyZ3Zbb3B0aW5kXSkgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJXygic3RhcnRrYiBzaG91bGQgYmUgYSBudW1iZXIsIG5vdCAlc1xuIiksIHMpOworCQkJZXhpdCgxKTsKKwkJfQorCQlvcHRpbmQrKzsKKwl9CisJaWYgKHNrIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygic3RhcnRrYiBzaG91bGQgYmUgcG9zaXRpdmUsIG5vdCAlbGx1XG4iKSxzayk7CisJCWV4aXQoMSk7CisJfQorCisJZmQgPSBvcGVuKGRldmljZV9uYW1lLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQlwZXJyb3IoZGV2aWNlX25hbWUpOworCQlleGl0KDEpOworCX0KKworCS8qIE5vdywgZ28gbG9va2luZyBmb3IgdGhlIHN1cGVyYmxvY2shICovCisJcHJpbnRmKF8oInN0YXJ0aW5nIGF0ICVsbHUsIHdpdGggJXUgYnl0ZSBpbmNyZW1lbnRzXG4iKSwgc2ssIHNraXByYXRlKTsKKwlpZiAocHJpbnRfam5sX2NvcGllcykKKwkJcHJpbnRmKF8oIlsqXSBwcm9iYWJseSBzdXBlcmJsb2NrIHdyaXR0ZW4gaW4gdGhlIGV4dDMgIgorCQkJICJqb3VybmFsIHN1cGVyYmxvY2ssXG5cdHNvIHN0YXJ0L2VuZC9ncnAgd3JvbmdcbiIpKTsKKwlwcmludGYoXygiYnl0ZV9vZmZzZXQgIGJ5dGVfc3RhcnQgICAgIGJ5dGVfZW5kICBmc19ibG9ja3MgYmxrc3ogIGdycCAgbGFzdF9tb3VudF90aW1lICAgICAgICAgICBzYl91dWlkIGxhYmVsXG4iKSk7CisJZm9yICg7IGxzZWVrNjQoZmQsIHNrLCBTRUVLX1NFVCkgIT0gLTEgJiYKKwkgICAgICAgcmVhZChmZCwgJmV4dDIsIDUxMikgPT0gNTEyOyBzayArPSBza2lwcmF0ZSkgeworCQlzdGF0aWMgdW5zaWduZWQgY2hhciBsYXN0X3V1aWRbMTZdID0gImJsYWgiOworCQl1bnNpZ25lZCBsb25nIGxvbmcgYnNpemUsIGdycHNpemU7CisJCWludCBqbmxfY29weSwgc2Jfb2Zmc2V0OworCisJCWlmIChzayAmJiAhKHNrICYgKGludGVydmFsIC0gMSkpKSB7CisJCQl0aW1lX3Qgbm93LCBkaWZmOworCisJCQlub3cgPSB0aW1lKDApOworCQkJZGlmZiA9IG5vdyAtIGxhc3Q7CisKKwkJCWlmIChkaWZmID4gMCkgeworCQkJCXMgPSBjdGltZSgmbm93KTsKKwkJCQlzWzI0XSA9IDA7CisJCQkJcHJpbnRmKCJcciUxMUx1OiAlOEx1a0IvcyBAICVzIiwgc2ssCisJCQkJICAgICAgICgoKHNrIC0gc2tsKSkgLyBkaWZmKSA+PiAxMCwgcyk7CisJCQkJZmZsdXNoKHN0ZG91dCk7CisJCQl9CisJCQlpZiAoZGlmZiA8IDUpCisJCQkJaW50ZXJ2YWwgPDw9IDE7CisJCQllbHNlIGlmIChkaWZmID4gMjApCisJCQkJaW50ZXJ2YWwgPj49IDE7CisJCQlsYXN0ID0gbm93OworCQkJc2tsID0gc2s7CisJCX0KKwkJaWYgKGV4dDIuc19tYWdpYyAhPSBFWFQyX1NVUEVSX01BR0lDKQorCQkJY29udGludWU7CisJCWlmIChleHQyLnNfbG9nX2Jsb2NrX3NpemUgPiA2KQorCQkJV0hZKCJsb2cgYmxvY2sgc2l6ZSA+IDYgKCV1KVxuIiwgZXh0Mi5zX2xvZ19ibG9ja19zaXplKTsKKwkJaWYgKGV4dDJmc19yX2Jsb2Nrc19jb3VudCgmZXh0MikgPiBleHQyZnNfYmxvY2tzX2NvdW50KCZleHQyKSkKKwkJCVdIWSgicl9ibG9ja3NfY291bnQgPiBibG9ja3NfY291bnQgKCV1ID4gJXUpXG4iLAorCQkJICAgIGV4dDJmc19yX2Jsb2Nrc19jb3VudCgmZXh0MiksCisJCQkgICAgZXh0MmZzX2Jsb2Nrc19jb3VudCgmZXh0MikpOworCQlpZiAoZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50KCZleHQyKSA+IGV4dDJmc19ibG9ja3NfY291bnQoJmV4dDIpKQorCQkJV0hZKCJmcmVlX2Jsb2Nrc19jb3VudCA+IGJsb2Nrc19jb3VudFxuICgldSA+ICV1KVxuIiwKKwkJCSAgICBleHQyZnNfZnJlZV9ibG9ja3NfY291bnQoJmV4dDIpLAorCQkJICAgIGV4dDJmc19ibG9ja3NfY291bnQoJmV4dDIpKTsKKwkJaWYgKGV4dDIuc19mcmVlX2lub2Rlc19jb3VudCA+IGV4dDIuc19pbm9kZXNfY291bnQpCisJCQlXSFkoImZyZWVfaW5vZGVzX2NvdW50ID4gaW5vZGVzX2NvdW50ICgldSA+ICV1KVxuIiwKKwkJCSAgICBleHQyLnNfZnJlZV9pbm9kZXNfY291bnQsIGV4dDIuc19pbm9kZXNfY291bnQpOworCisJCXRtID0gZXh0Mi5zX210aW1lOworCQlzID0gY3RpbWUoJnRtKTsKKwkJc1syNF0gPSAwOworCQlic2l6ZSA9IDEgPDwgKGV4dDIuc19sb2dfYmxvY2tfc2l6ZSArIDEwKTsKKwkJZ3Jwc2l6ZSA9IGJzaXplICogZXh0Mi5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCWlmIChtZW1jbXAoZXh0Mi5zX3V1aWQsIGxhc3RfdXVpZCwgc2l6ZW9mKGxhc3RfdXVpZCkpID09IDAgJiYKKwkJICAgIGV4dDIuc19yZXZfbGV2ZWwgPiAwICYmIGV4dDIuc19ibG9ja19ncm91cF9uciA9PSAwKSB7CisJCQlqbmxfY29weSA9IDE7CisJCX0gZWxzZSB7CisJCQlqbmxfY29weSA9IDA7CisJCQltZW1jcHkobGFzdF91dWlkLCBleHQyLnNfdXVpZCwgc2l6ZW9mKGxhc3RfdXVpZCkpOworCQl9CisJCWlmIChleHQyLnNfYmxvY2tfZ3JvdXBfbnIgPT0gMCB8fCBic2l6ZSA9PSAxMDI0KQorCQkJc2Jfb2Zmc2V0ID0gMTAyNDsKKwkJZWxzZQorCQkJc2Jfb2Zmc2V0ID0gMDsKKwkJaWYgKGpubF9jb3B5ICYmICFwcmludF9qbmxfY29waWVzKQorCQkJY29udGludWU7CisJCXByaW50ZigiXHIlMTFMdSAlMTFMdSVzICUxMUx1JXMgJTl1ICU1THUgJTR1JXMgJXMgJTAyeCUwMnglMDJ4JTAyeCAlc1xuIiwKKwkJICAgICAgIHNrLCBzayAtIGV4dDIuc19ibG9ja19ncm91cF9uciAqIGdycHNpemUgLSBzYl9vZmZzZXQsCisJCSAgICAgICBqbmxfY29weSA/ICIqIjoiICIsCisJCSAgICAgICBzayArIGV4dDJmc19ibG9ja3NfY291bnQoJmV4dDIpICogYnNpemUgLQorCQkgICAgICAgICAgICBleHQyLnNfYmxvY2tfZ3JvdXBfbnIgKiBncnBzaXplIC0gc2Jfb2Zmc2V0LAorCQkgICAgICAgam5sX2NvcHkgPyAiKiIgOiAiICIsIGV4dDJmc19ibG9ja3NfY291bnQoJmV4dDIpLCBic2l6ZSwKKwkJICAgICAgIGV4dDIuc19ibG9ja19ncm91cF9uciwgam5sX2NvcHkgPyAiKiIgOiAiICIsIHMsCisJCSAgICAgICBleHQyLnNfdXVpZFswXSwgZXh0Mi5zX3V1aWRbMV0sCisJCSAgICAgICBleHQyLnNfdXVpZFsyXSwgZXh0Mi5zX3V1aWRbM10sIGV4dDIuc192b2x1bWVfbmFtZSk7CisJfQorCXByaW50ZihfKCJcbiUxMUx1OiBmaW5pc2hlZCB3aXRoIGVycm5vICVkXG4iKSwgc2ssIGVycm5vKTsKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gZXJybm87Cit9CmRpZmYgLS1naXQgYS9taXNjL2ZzY2suOC5pbiBiL21pc2MvZnNjay44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZmQ4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2ZzY2suOC5pbgpAQCAtMCwwICsxLDQxNCBAQAorLlwiIC0qLSBucm9mZiAtKi0KKy5cIiBDb3B5cmlnaHQgMTk5MywgMTk5NCwgMTk5NSBieSBUaGVvZG9yZSBUcydvLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy5cIiBUaGlzIGZpbGUgbWF5IGJlIGNvcGllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKy5cIiAKKy5USCBGU0NLIDggIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2ZzY2sgXC0gY2hlY2sgYW5kIHJlcGFpciBhIExpbnV4IGZpbGUgc3lzdGVtCisuU0ggU1lOT1BTSVMKKy5CIGZzY2sKK1sKKy5CIFwtc0FWUlRNTlAKK10KK1sKKy5CIFwtQworWworLkkgZmQKK10KK10KK1sKKy5CIFwtdAorLkkgZnN0eXBlCitdIAorLkkgW2ZpbGVzeXMgLi4uIF0KK1tcLVwtXSBbCisuQiBmcy1zcGVjaWZpYy1vcHRpb25zCitdCisuU0ggREVTQ1JJUFRJT04KKy5CIGZzY2sKK2lzIHVzZWQgdG8gY2hlY2sgYW5kIG9wdGlvbmFsbHkgcmVwYWlyIG9uZSBvciBtb3JlIExpbnV4IGZpbGUgc3lzdGVtcy4gIAorLkkgZmlsZXN5cworY2FuIGJlIGEgZGV2aWNlIG5hbWUgKGUuZy4KKy5JUiAvZGV2L2hkYzEgIiwgIiAvZGV2L3NkYjIgKSwKK2EgbW91bnQgcG9pbnQgKGUuZy4KKy5JUiAvICIsICIgL3VzciAiLCAiIC9ob21lICksCitvciBhbiBleHQyIGxhYmVsIG9yIFVVSUQgc3BlY2lmaWVyIChlLmcuCitVVUlEPTg4NjhhYmY2LTg4YzUtNGE4My05OGI4LWJmYzI0MDU3ZjdiZCBvciBMQUJFTD1yb290KS4gIAorTm9ybWFsbHksIHRoZSAKKy5CIGZzY2sgCitwcm9ncmFtIHdpbGwgdHJ5IHRvIGhhbmRsZSBmaWxlc3lzdGVtcyBvbiBkaWZmZXJlbnQgcGh5c2ljYWwgZGlzayBkcml2ZXMgCitpbiBwYXJhbGxlbCB0byByZWR1Y2UgdGhlIHRvdGFsIGFtb3VudCBvZiB0aW1lIG5lZWRlZCB0byBjaGVjayBhbGwgb2YgdGhlCitmaWxlc3lzdGVtcy4KKy5QUAorSWYgbm8gZmlsZXN5c3RlbXMgYXJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgdGhlIAorLkIgXC1BIAorb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIAorLkIgZnNjaword2lsbCBkZWZhdWx0IHRvIGNoZWNraW5nIGZpbGVzeXN0ZW1zIGluCisuQiAvZXRjL2ZzdGFiCitzZXJpYWxseS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgCisuQiBcLUFzCitvcHRpb25zLgorLlBQCitUaGUgZXhpdCBjb2RlIHJldHVybmVkIGJ5CisuQiBmc2NrCitpcyB0aGUgc3VtIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKy5icgorXAkwXAlcLVwgTm8gZXJyb3JzCisuYnIKK1wJMVwJXC1cIEZpbGUgc3lzdGVtIGVycm9ycyBjb3JyZWN0ZWQKKy5icgorXAkyXAlcLVwgU3lzdGVtIHNob3VsZCBiZSByZWJvb3RlZAorLmJyCitcCTRcCVwtXCBGaWxlIHN5c3RlbSBlcnJvcnMgbGVmdCB1bmNvcnJlY3RlZAorLmJyCitcCThcCVwtXCBPcGVyYXRpb25hbCBlcnJvcgorLmJyCitcCTE2XAlcLVwgVXNhZ2Ugb3Igc3ludGF4IGVycm9yCisuYnIKK1wJMzJcCVwtXCBGc2NrIGNhbmNlbGVkIGJ5IHVzZXIgcmVxdWVzdAorLmJyCitcCTEyOFwJXC1cIFNoYXJlZCBsaWJyYXJ5IGVycm9yCisuYnIKK1RoZSBleGl0IGNvZGUgcmV0dXJuZWQgd2hlbiBtdWx0aXBsZSBmaWxlIHN5c3RlbXMgYXJlIGNoZWNrZWQgCitpcyB0aGUgYml0LXdpc2UgT1Igb2YgdGhlIGV4aXQgY29kZXMgZm9yIGVhY2gKK2ZpbGUgc3lzdGVtIHRoYXQgaXMgY2hlY2tlZC4KKy5QUAorSW4gYWN0dWFsaXR5LAorLkIgZnNjaworaXMgc2ltcGx5IGEgZnJvbnQtZW5kIGZvciB0aGUgdmFyaW91cyBmaWxlIHN5c3RlbSBjaGVja2VycworKFxmQmZzY2tcZlIuXGZJZnN0eXBlXGZSKSBhdmFpbGFibGUgdW5kZXIgTGludXguICBUaGUgZmlsZQorc3lzdGVtLXNwZWNpZmljIGNoZWNrZXIgaXMgc2VhcmNoZWQgZm9yIGluCisuSSAvc2JpbgorZmlyc3QsIHRoZW4gaW4KKy5JIC9ldGMvZnMKK2FuZAorLklSIC9ldGMgLAorYW5kIGZpbmFsbHkgaW4gdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiB0aGUgUEFUSCBlbnZpcm9ubWVudAordmFyaWFibGUuICBQbGVhc2Ugc2VlIHRoZSBmaWxlIHN5c3RlbS1zcGVjaWZpYyBjaGVja2VyIG1hbnVhbCBwYWdlcyBmb3IKK2Z1cnRoZXIgZGV0YWlscy4KKy5TSCBPUFRJT05TCisuVFAKKy5CIFwtcworU2VyaWFsaXplIAorLkIgZnNjayAKK29wZXJhdGlvbnMuICBUaGlzIGlzIGEgZ29vZCBpZGVhIGlmIHlvdSBhcmUgY2hlY2tpbmcgbXVsdGlwbGUKK2ZpbGVzeXN0ZW1zIGFuZCB0aGUgY2hlY2tlcnMgYXJlIGluIGFuIGludGVyYWN0aXZlIG1vZGUuICAoTm90ZToKKy5CUiBlMmZzY2sgKDgpCitydW5zIGluIGFuIGludGVyYWN0aXZlIG1vZGUgYnkgZGVmYXVsdC4gIFRvIG1ha2UgCisuQlIgZTJmc2NrICg4KQorcnVuIGluIGEgbm9uLWludGVyYWN0aXZlIG1vZGUsIHlvdSBtdXN0IGVpdGhlciBzcGVjaWZ5IHRoZQorLkIgXC1wCitvcgorLkIgXC1hCitvcHRpb24sIGlmIHlvdSB3aXNoIGZvciBlcnJvcnMgdG8gYmUgY29ycmVjdGVkIGF1dG9tYXRpY2FsbHksIG9yIHRoZSAKKy5CIFwtbgorb3B0aW9uIGlmIHlvdSBkbyBub3QuKQorLlRQCisuQkkgXC10ICIgZnNsaXN0IgorU3BlY2lmaWVzIHRoZSB0eXBlKHMpIG9mIGZpbGUgc3lzdGVtIHRvIGJlIGNoZWNrZWQuICBXaGVuIHRoZQorLkIgXC1BIAorZmxhZyBpcyBzcGVjaWZpZWQsIG9ubHkgZmlsZXN5c3RlbXMgdGhhdCBtYXRjaCAKKy5JIGZzbGlzdAorYXJlIGNoZWNrZWQuICBUaGUKKy5JIGZzbGlzdAorcGFyYW1ldGVyIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXN5c3RlbXMgYW5kIG9wdGlvbnMKK3NwZWNpZmllcnMuICBBbGwgb2YgdGhlIGZpbGVzeXN0ZW1zIGluIHRoaXMgY29tbWEtc2VwYXJhdGVkIGxpc3QgbWF5IGJlCitwcmVmaXhlZCBieSBhIG5lZ2F0aW9uIG9wZXJhdG9yIAorLlJCICcgbm8gJworb3IgCisuUkIgJyAhICcsCit3aGljaCByZXF1ZXN0cyB0aGF0IG9ubHkgdGhvc2UgZmlsZXN5c3RlbXMgbm90IGxpc3RlZCBpbgorLkkgZnNsaXN0Cit3aWxsIGJlIGNoZWNrZWQuICBJZiBhbGwgb2YgdGhlIGZpbGVzeXN0ZW1zIGluIAorLkkgZnNsaXN0CithcmUgbm90IHByZWZpeGVkIGJ5IGEgbmVnYXRpb24gb3BlcmF0b3IsIHRoZW4gb25seSB0aG9zZSBmaWxlc3lzdGVtcworbGlzdGVkCitpbgorLkkgZnNsaXN0Cit3aWxsIGJlIGNoZWNrZWQuCisuc3AKK09wdGlvbnMgc3BlY2lmaWVycyBtYXkgYmUgaW5jbHVkZWQgaW4gdGhlIGNvbW1hLXNlcGFyYXRlZAorLklSIGZzbGlzdCAuCitUaGV5IG11c3QgaGF2ZSB0aGUgZm9ybWF0IAorLkJJIG9wdHM9IGZzLW9wdGlvblxmUi4KK0lmIGFuIG9wdGlvbnMgc3BlY2lmaWVyIGlzIHByZXNlbnQsIHRoZW4gb25seSBmaWxlc3lzdGVtcyB3aGljaCBjb250YWluCisuSSBmcy1vcHRpb24KK2luIHRoZWlyIG1vdW50IG9wdGlvbnMgZmllbGQgb2YgCisuQiAvZXRjL2ZzdGFiCit3aWxsIGJlIGNoZWNrZWQuICBJZiB0aGUgb3B0aW9ucyBzcGVjaWZpZXIgaXMgcHJlZml4ZWQgYnkgYSBuZWdhdGlvbgorb3BlcmF0b3IsIHRoZW4gb25seSAKK3Rob3NlIGZpbGVzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUKKy5JIGZzLW9wdGlvbgoraW4gdGhlaXIgbW91bnQgb3B0aW9ucyBmaWVsZCBvZgorLkIgL2V0Yy9mc3RhYiAKK3dpbGwgYmUgY2hlY2tlZC4KKy5zcAorRm9yIGV4YW1wbGUsIGlmCisuQiBvcHRzPXJvCithcHBlYXJzIGluCisuSVIgZnNsaXN0ICwKK3RoZW4gb25seSBmaWxlc3lzdGVtcyBsaXN0ZWQgaW4KKy5CIC9ldGMvZnN0YWIgCit3aXRoIHRoZQorLkIgcm8KK29wdGlvbiB3aWxsIGJlIGNoZWNrZWQuCisuc3AKK0ZvciBjb21wYXRpYmlsaXR5IHdpdGggTWFuZHJha2UgZGlzdHJpYnV0aW9ucyB3aG9zZSBib290IHNjcmlwdHMKK2RlcGVuZCB1cG9uIGFuIHVuYXV0aG9yaXplZCBVSSBjaGFuZ2UgdG8gdGhlCisuQiBmc2NrCitwcm9ncmFtLCBpZiBhIGZpbGVzeXN0ZW0gdHlwZSBvZgorLkIgbG9vcAoraXMgZm91bmQgaW4KKy5JUiBmc2xpc3QgLAoraXQgaXMgdHJlYXRlZCBhcyBpZgorLkIgb3B0cz1sb29wCit3ZXJlIHNwZWNpZmllZCBhcyBhbiBhcmd1bWVudCB0byB0aGUKKy5CIFwtdAorb3B0aW9uLgorLnNwCitOb3JtYWxseSwgdGhlIGZpbGVzeXN0ZW0gdHlwZSBpcyBkZWR1Y2VkIGJ5IHNlYXJjaGluZyBmb3IKKy5JIGZpbGVzeXMKK2luIHRoZSAKKy5JIC9ldGMvZnN0YWIgCitmaWxlIGFuZCB1c2luZyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeS4KK0lmIHRoZSB0eXBlIGNhbiBub3QgYmUgZGVkdWNlZCwgYW5kIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgZmlsZXN5c3RlbSAKK2dpdmVuIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSAKKy5CIFwtdCAKK29wdGlvbiwgCisuQiBmc2NrCit3aWxsIHVzZSB0aGUgc3BlY2lmaWVkIGZpbGVzeXN0ZW0gdHlwZS4gIElmIHRoaXMgdHlwZSBpcyBub3QKK2F2YWlsYWJsZSwgdGhlbiB0aGUgZGVmYXVsdCBmaWxlIHN5c3RlbSB0eXBlIChjdXJyZW50bHkgZXh0MikgaXMgdXNlZC4gCisuVFAKKy5CIFwtQQorV2FsayB0aHJvdWdoIHRoZQorLkkgL2V0Yy9mc3RhYgorZmlsZSBhbmQgdHJ5IHRvIGNoZWNrIGFsbCBmaWxlIHN5c3RlbXMgaW4gb25lIHJ1bi4gIFRoaXMgb3B0aW9uIGlzCit0eXBpY2FsbHkgdXNlZCBmcm9tIHRoZQorLkkgL2V0Yy9yYworc3lzdGVtIGluaXRpYWxpemF0aW9uIGZpbGUsIGluc3RlYWQgb2YgbXVsdGlwbGUgY29tbWFuZHMgZm9yIGNoZWNraW5nCithIHNpbmdsZSBmaWxlIHN5c3RlbS4KKy5zcAorVGhlIHJvb3QgZmlsZXN5c3RlbSB3aWxsIGJlIGNoZWNrZWQgZmlyc3QgdW5sZXNzIHRoZQorLkIgXC1QCitvcHRpb24gaXMgc3BlY2lmaWVkIChzZWUgYmVsb3cpLiAgQWZ0ZXIgdGhhdCwgCitmaWxlc3lzdGVtcyB3aWxsIGJlIGNoZWNrZWQgaW4gdGhlIG9yZGVyIHNwZWNpZmllZCBieSB0aGUgCisuSSBmc19wYXNzbm8gCisodGhlIHNpeHRoKSBmaWVsZCBpbiB0aGUgCisuSSAvZXRjL2ZzdGFiCitmaWxlLiAgCitGaWxlc3lzdGVtcyB3aXRoIGEgCisuSSBmc19wYXNzbm8KK3ZhbHVlIG9mIDAgYXJlIHNraXBwZWQgYW5kIGFyZSBub3QgY2hlY2tlZCBhdCBhbGwuICBGaWxlc3lzdGVtcyB3aXRoIGEKKy5JIGZzX3Bhc3NubwordmFsdWUgb2YgZ3JlYXRlciB0aGFuIHplcm8gd2lsbCBiZSBjaGVja2VkIGluIG9yZGVyLCAKK3dpdGggZmlsZXN5c3RlbXMgd2l0aCB0aGUgbG93ZXN0CisuSSBmc19wYXNzbm8gCitudW1iZXIgYmVpbmcgY2hlY2tlZCBmaXJzdC4KK0lmIHRoZXJlIGFyZSBtdWx0aXBsZSBmaWxlc3lzdGVtcyB3aXRoIHRoZSBzYW1lIHBhc3MgbnVtYmVyLCAKK2ZzY2sgd2lsbCBhdHRlbXB0IHRvIGNoZWNrIHRoZW0gaW4gcGFyYWxsZWwsIGFsdGhvdWdoIGl0IHdpbGwgYXZvaWQgcnVubmluZyAKK211bHRpcGxlIGZpbGVzeXN0ZW0gY2hlY2tzIG9uIHRoZSBzYW1lIHBoeXNpY2FsIGRpc2suICAKKy5zcAorSGVuY2UsIGEgdmVyeSBjb21tb24gY29uZmlndXJhdGlvbiBpbiAKKy5JIC9ldGMvZnN0YWIKK2ZpbGVzIGlzIHRvIHNldCB0aGUgcm9vdCBmaWxlc3lzdGVtIHRvIGhhdmUgYSAKKy5JIGZzX3Bhc3NubwordmFsdWUgb2YgMQorYW5kIHRvIHNldCBhbGwgb3RoZXIgZmlsZXN5c3RlbXMgdG8gaGF2ZSBhCisuSSBmc19wYXNzbm8KK3ZhbHVlIG9mIDIuICBUaGlzIHdpbGwgYWxsb3cKKy5CIGZzY2sKK3RvIGF1dG9tYXRpY2FsbHkgcnVuIGZpbGVzeXN0ZW0gY2hlY2tlcnMgaW4gcGFyYWxsZWwgaWYgaXQgaXMgYWR2YW50YWdlb3VzCit0byBkbyBzby4gIFN5c3RlbSBhZG1pbmlzdHJhdG9ycyBtaWdodCBjaG9vc2UKK25vdCB0byB1c2UgdGhpcyBjb25maWd1cmF0aW9uIGlmIHRoZXkgbmVlZCB0byBhdm9pZCBtdWx0aXBsZSBmaWxlc3lzdGVtCitjaGVja3MgcnVubmluZyBpbiBwYXJhbGxlbCBmb3Igc29tZSByZWFzb24gLS0tIGZvciBleGFtcGxlLCBpZiB0aGUKK21hY2hpbmUgaW4gcXVlc3Rpb24gaXMgc2hvcnQgb24gbWVtb3J5IHNvIHRoYXQKK2V4Y2Vzc2l2ZSBwYWdpbmcgaXMgYSBjb25jZXJuLgorLlRQCisuQiBcLUNcZlIgWyBcZkkgImZkIiBcZlIgXQorRGlzcGxheSBjb21wbGV0aW9uL3Byb2dyZXNzIGJhcnMgZm9yIHRob3NlIGZpbGVzeXN0ZW0gY2hlY2tlcnMgKGN1cnJlbnRseSAKK29ubHkgZm9yIGV4dDIgYW5kIGV4dDMpIHdoaWNoIHN1cHBvcnQgdGhlbS4gICBGc2NrIHdpbGwgbWFuYWdlIHRoZQorZmlsZXN5c3RlbSBjaGVja2VycyBzbyB0aGF0IG9ubHkgb25lIG9mIHRoZW0gd2lsbCBkaXNwbGF5ICAKK2EgcHJvZ3Jlc3MgYmFyIGF0IGEgdGltZS4gIEdVSSBmcm9udC1lbmRzIG1heSBzcGVjaWZ5IGEgZmlsZSBkZXNjcmlwdG9yCisuSVIgZmQgLAoraW4gd2hpY2ggY2FzZSB0aGUgcHJvZ3Jlc3MgYmFyIGluZm9ybWF0aW9uIHdpbGwgYmUgc2VudCB0byB0aGF0IGZpbGUgZGVzY3JpcHRvci4KKy5UUAorLkIgXC1NCitEbyBub3QgY2hlY2sgbW91bnRlZCBmaWxlc3lzdGVtcyBhbmQgcmV0dXJuIGFuIGV4aXQgY29kZSBvZiAwCitmb3IgbW91bnRlZCBmaWxlc3lzdGVtcy4KKy5UUAorLkIgXC1OCitEb24ndCBleGVjdXRlLCBqdXN0IHNob3cgd2hhdCB3b3VsZCBiZSBkb25lLgorLlRQCisuQiBcLVAKK1doZW4gdGhlIAorLkIgXC1BCitmbGFnIGlzIHNldCwgY2hlY2sgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbiBwYXJhbGxlbCB3aXRoIHRoZSBvdGhlciBmaWxlc3lzdGVtcy4KK1RoaXMgaXMgbm90IHRoZSBzYWZlc3QgdGhpbmcgaW4gdGhlIHdvcmxkIHRvIGRvLAorc2luY2UgaWYgdGhlIHJvb3QgZmlsZXN5c3RlbSBpcyBpbiBkb3VidCB0aGluZ3MgbGlrZSB0aGUgCisuQlIgZTJmc2NrICg4KSAKK2V4ZWN1dGFibGUgbWlnaHQgYmUgY29ycnVwdGVkISAgVGhpcyBvcHRpb24gaXMgbWFpbmx5IHByb3ZpZGVkCitmb3IgdGhvc2Ugc3lzYWRtaW5zIHdobyBkb24ndCB3YW50IHRvIHJlcGFydGl0aW9uIHRoZSByb290CitmaWxlc3lzdGVtIHRvIGJlIHNtYWxsIGFuZCBjb21wYWN0ICh3aGljaCBpcyByZWFsbHkgdGhlIHJpZ2h0IHNvbHV0aW9uKS4KKy5UUAorLkIgXC1SCitXaGVuIGNoZWNraW5nIGFsbCBmaWxlIHN5c3RlbXMgd2l0aCB0aGUKKy5CIFwtQQorZmxhZywgc2tpcCB0aGUgcm9vdCBmaWxlIHN5c3RlbSAoaW4gY2FzZSBpdCdzIGFscmVhZHkgbW91bnRlZCByZWFkLXdyaXRlKS4KKy5UUAorLkIgXC1UCitEb24ndCBzaG93IHRoZSB0aXRsZSBvbiBzdGFydHVwLgorLlRQCisuQiBcLVYKK1Byb2R1Y2UgdmVyYm9zZSBvdXRwdXQsIGluY2x1ZGluZyBhbGwgZmlsZSBzeXN0ZW0tc3BlY2lmaWMgY29tbWFuZHMKK3RoYXQgYXJlIGV4ZWN1dGVkLgorLlRQCisuQiBmcy1zcGVjaWZpYy1vcHRpb25zCitPcHRpb25zIHdoaWNoIGFyZSBub3QgdW5kZXJzdG9vZCBieSAKKy5CIGZzY2sgCithcmUgcGFzc2VkIHRvIHRoZSBmaWxlc3lzdGVtLXNwZWNpZmljIGNoZWNrZXIuICBUaGVzZSBhcmd1bWVudHMKKy5CIG11c3QKK25vdCB0YWtlIGFyZ3VtZW50cywgYXMgdGhlcmUgaXMgbm8KK3dheSBmb3IgCisuQiBmc2NrCit0byBiZSBhYmxlIHRvIHByb3Blcmx5IGd1ZXNzIHdoaWNoIGFyZ3VtZW50cyB0YWtlIG9wdGlvbnMgYW5kIHdoaWNoCitkb24ndC4KKy5JUAorT3B0aW9ucyBhbmQgYXJndW1lbnRzIHdoaWNoIGZvbGxvdyB0aGUKKy5CIFwtXC0KK2FyZSB0cmVhdGVkIGFzIGZpbGUgc3lzdGVtLXNwZWNpZmljIG9wdGlvbnMgdG8gYmUgcGFzc2VkIHRvIHRoZQorZmlsZSBzeXN0ZW0tc3BlY2lmaWMgY2hlY2tlci4KKy5JUAorUGxlYXNlIG5vdGUgdGhhdCBmc2NrIGlzIG5vdAorZGVzaWduZWQgdG8gcGFzcyBhcmJpdHJhcmlseSBjb21wbGljYXRlZCBvcHRpb25zIHRvIGZpbGVzeXN0ZW0tc3BlY2lmaWMKK2NoZWNrZXJzLiAgSWYgeW91J3JlIGRvaW5nIHNvbWV0aGluZyBjb21wbGljYXRlZCwgcGxlYXNlIGp1c3QKK2V4ZWN1dGUgdGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgY2hlY2tlciBkaXJlY3RseS4gIElmIHlvdSBwYXNzIAorLkIgZnNjaworc29tZSBob3JyaWJseSBjb21wbGljYXRlZCBvcHRpb24gYW5kIGFyZ3VtZW50cywgYW5kIGl0IGRvZXNuJ3QgZG8KK3doYXQgeW91IGV4cGVjdCwgCisuQiBkb24ndCBib3RoZXIgcmVwb3J0aW5nIGl0IGFzIGEgYnVnLgorWW91J3JlIGFsbW9zdCBjZXJ0YWlubHkgZG9pbmcgc29tZXRoaW5nIHRoYXQgeW91IHNob3VsZG4ndCBiZSBkb2luZword2l0aCAKKy5CUiBmc2NrLgorLlBQCitPcHRpb25zIHRvIGRpZmZlcmVudCBmaWxlc3lzdGVtLXNwZWNpZmljIGZzY2sncyBhcmUgbm90IHN0YW5kYXJkaXplZC4KK0lmIGluIGRvdWJ0LCBwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2VzIG9mIHRoZSBmaWxlc3lzdGVtLXNwZWNpZmljCitjaGVja2VyLiAgQWx0aG91Z2ggbm90IGd1YXJhbnRlZWQsIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgc3VwcG9ydGVkCitieSBtb3N0IGZpbGUgc3lzdGVtIGNoZWNrZXJzOgorLlRQCisuQiBcLWEKK0F1dG9tYXRpY2FsbHkgcmVwYWlyIHRoZSBmaWxlIHN5c3RlbSB3aXRob3V0IGFueSBxdWVzdGlvbnMgKHVzZQordGhpcyBvcHRpb24gd2l0aCBjYXV0aW9uKS4gIE5vdGUgdGhhdCAKKy5CUiBlMmZzY2sgKDgpCitzdXBwb3J0cyAKKy5CIFwtYQorZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG9ubHkuICBUaGlzIG9wdGlvbiBpcyBtYXBwZWQgdG8gCisuQlIgZTJmc2NrICdzCisuQiBcLXAKK29wdGlvbiB3aGljaCBpcyBzYWZlIHRvIHVzZSwgdW5saWtlIHRoZSAKKy5CIFwtYSAKK29wdGlvbiB0aGF0IHNvbWUgZmlsZSBzeXN0ZW0gY2hlY2tlcnMgc3VwcG9ydC4KKy5UUAorLkIgXC1uCitGb3Igc29tZSBmaWxlc3lzdGVtLXNwZWNpZmljIGNoZWNrZXJzLCB0aGUgCisuQiBcLW4KK29wdGlvbiB3aWxsIGNhdXNlIHRoZSBmcy1zcGVjaWZpYyBmc2NrIHRvIGF2b2lkIGF0dGVtcHRpbmcgdG8gcmVwYWlyIGFueSAKK3Byb2JsZW1zLCBidXQgc2ltcGx5IHJlcG9ydCBzdWNoIHByb2JsZW1zIHRvIHN0ZG91dC4gIFRoaXMgaXMgaG93ZXZlcgorbm90IHRydWUgZm9yIGFsbCBmaWxlc3lzdGVtLXNwZWNpZmljIGNoZWNrZXJzLiAgSW4gcGFydGljdWxhciwgCisuQlIgZnNjay5yZWlzZXJmcyAoOCkKK3dpbGwgbm90IHJlcG9ydCBhbnkgY29ycnVwdGlvbiBpZiBnaXZlbiB0aGlzIG9wdGlvbi4KKy5CUiBmc2NrLm1pbml4ICg4KQorZG9lcyBub3Qgc3VwcG9ydCB0aGUgCisuQiBcLW4gCitvcHRpb24gYXQgYWxsLgorLlRQCisuQiBcLXIKK0ludGVyYWN0aXZlbHkgcmVwYWlyIHRoZSBmaWxlc3lzdGVtIChhc2sgZm9yIGNvbmZpcm1hdGlvbnMpLiAgTm90ZTogSXQKK2lzIGdlbmVyYWxseSBhIGJhZCBpZGVhIHRvIHVzZSB0aGlzIG9wdGlvbiBpZiBtdWx0aXBsZSBmc2NrJ3MgYXJlIGJlaW5nCitydW4gaW4gcGFyYWxsZWwuICBBbHNvIG5vdGUgdGhhdCB0aGlzIGlzIAorLkJSIGUyZnNjayAncworZGVmYXVsdCBiZWhhdmlvcjsgaXQgc3VwcG9ydHMgdGhpcyBvcHRpb24gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CityZWFzb25zIG9ubHkuCisuVFAKKy5CIFwteQorRm9yIHNvbWUgZmlsZXN5c3RlbS1zcGVjaWZpYyBjaGVja2VycywgdGhlIAorLkIgXC15IAorb3B0aW9uIHdpbGwgY2F1c2UgdGhlIGZzLXNwZWNpZmljIGZzY2sgdG8gYWx3YXlzIGF0dGVtcHQgdG8gZml4IGFueQorZGV0ZWN0ZWQgZmlsZXN5c3RlbSBjb3JydXB0aW9uIGF1dG9tYXRpY2FsbHkuICBTb21ldGltZXMgYW4gZXhwZXJ0IG1heQorYmUgYWJsZSB0byBkbyBiZXR0ZXIgZHJpdmluZyB0aGUgZnNjayBtYW51YWxseS4gIE5vdGUgdGhhdCAKKy5CIG5vdAorYWxsIGZpbGVzeXN0ZW0tc3BlY2lmaWMgY2hlY2tlcnMgaW1wbGVtZW50IHRoaXMgb3B0aW9uLiAgSW4gcGFydGljdWxhciAKKy5CUiBmc2NrLm1pbml4ICg4KQorYW5kCisuQlIgZnNjay5jcmFtZnMgKDgpCitkb2VzIG5vdCBzdXBwb3J0IHRoZQorLkIgLXkKK29wdGlvbiBhcyBvZiB0aGlzIHdyaXRpbmcuCisuU0ggQVVUSE9SCitUaGVvZG9yZSBUcydvICh0eXRzb0BtaXQuZWR1KQorLlNIIEZJTEVTCisuSVIgL2V0Yy9mc3RhYiAuCisuU0ggRU5WSVJPTk1FTlQgVkFSSUFCTEVTCitUaGUKKy5CIGZzY2sKK3Byb2dyYW0ncyBiZWhhdmlvciBpcyBhZmZlY3RlZCBieSB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlczoKKy5UUAorLkIgRlNDS19GT1JDRV9BTExfUEFSQUxMRUwKK0lmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCAKKy5CIGZzY2sKK3dpbGwgYXR0ZW1wdCB0byBydW4gYWxsIG9mIHRoZSBzcGVjaWZpZWQgZmlsZXN5c3RlbXMgaW4gcGFyYWxsZWwsCityZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGZpbGVzeXN0ZW1zIGFwcGVhciB0byBiZSBvbiB0aGUgc2FtZQorZGV2aWNlLiAgKFRoaXMgaXMgdXNlZnVsIGZvciBSQUlEIHN5c3RlbXMgb3IgaGlnaC1lbmQgc3RvcmFnZSBzeXN0ZW1zCitzdWNoIGFzIHRob3NlIHNvbGQgYnkgY29tcGFuaWVzIHN1Y2ggYXMgSUJNIG9yIEVNQy4pCisuVFAKKy5CIEZTQ0tfTUFYX0lOU1QKK1RoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBsaW1pdCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmlsZSBzeXN0ZW0KK2NoZWNrZXJzIHRoYXQgY2FuIGJlIHJ1bm5pbmcgYXQgb25lIHRpbWUuICBUaGlzIGFsbG93cyBjb25maWd1cmF0aW9ucword2hpY2ggaGF2ZSBhIGxhcmdlIG51bWJlciBvZiBkaXNrcyB0byBhdm9pZCAKKy5CIGZzY2sKK3N0YXJ0aW5nIHRvbyBtYW55IGZpbGUgc3lzdGVtIGNoZWNrZXJzIGF0IG9uY2UsIHdoaWNoIG1pZ2h0IG92ZXJsb2FkCitDUFUgYW5kIG1lbW9yeSByZXNvdXJjZXMgYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW0uICBJZiB0aGlzIHZhbHVlIGlzCit6ZXJvLCB0aGVuIGFuIHVubGltaXRlZCBudW1iZXIgb2YgcHJvY2Vzc2VzIGNhbiBiZSBzcGF3bmVkLiAgVGhpcyBpcworY3VycmVudGx5IHRoZSBkZWZhdWx0LCBidXQgZnV0dXJlIHZlcnNpb25zIG9mCisuQiBmc2NrCittYXkgYXR0ZW1wdCB0byBhdXRvbWF0aWNhbGx5IGRldGVybWluZSBob3cgbWFueSBmaWxlIHN5c3RlbSBjaGVja3MgY2FuCitiZSBydW4gYmFzZWQgb24gZ2F0aGVyaW5nIGFjY291bnRpbmcgZGF0YSBmcm9tIHRoZSBvcGVyYXRpbmcgc3lzdGVtLgorLlRQCisuQiBQQVRICitUaGUgCisuQiBQQVRICitlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1c2VkIHRvIGZpbmQgZmlsZSBzeXN0ZW0gY2hlY2tlcnMuICBBIHNldCBvZgorc3lzdGVtIGRpcmVjdG9yaWVzIGFyZSBzZWFyY2hlZCBmaXJzdDogCisuQlIgL3NiaW4gLAorLkJSIC9zYmluL2ZzLmQgLAorLkJSICAvc2Jpbi9mcyAsCisuQlIgL2V0Yy9mcyAsCithbmQgCisuQlIgL2V0YyAuCitUaGVuIHRoZSBzZXQgb2YgZGlyZWN0b3JpZXMgZm91bmQgaW4gdGhlCisuQiBQQVRICitlbnZpcm9ubWVudCBhcmUgc2VhcmNoZWQuCisuVFAKKy5CIEZTVEFCX0ZJTEUKK1RoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgYWxsb3dzIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciAKK3RvIG92ZXJyaWRlIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBvZiB0aGUgCisuQiAvZXRjL2ZzdGFiCitmaWxlLiAgSXQgaXMgYWxzbyB1c2VmdWwgZm9yIGRldmVsb3BlcnMgd2hvIGFyZSB0ZXN0aW5nCisuQlIgZnNjayAuCisuU0ggU0VFIEFMU08KKy5CUiBmc3RhYiAoNSksCisuQlIgbWtmcyAoOCksCisuQlIgZnNjay5leHQyICg4KQorb3IKKy5CUiBmc2NrLmV4dDMgKDgpCitvcgorLkJSIGUyZnNjayAoOCksCisuQlIgY3JhbWZzY2sgKDgpLAorLkJSIGZzY2subWluaXggKDgpLAorLkJSIGZzY2subXNkb3MgKDgpLAorLkJSIGZzY2suamZzICg4KSwKKy5CUiBmc2NrLm5mcyAoOCksCisuQlIgZnNjay52ZmF0ICg4KSwKKy5CUiBmc2NrLnhmcyAoOCksCisuQlIgZnNjay54aWFmcyAoOCksCisuQlIgcmVpc2VyZnNjayAoOCkuCmRpZmYgLS1naXQgYS9taXNjL2ZzY2suYyBiL21pc2MvZnNjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNmFhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2ZzY2suYwpAQCAtMCwwICsxLDEzNDMgQEAKKy8qCisgKiBwZnNjayAtLS0gQSBnZW5lcmljLCBwYXJhbGxlbGl6aW5nIGZyb250LWVuZCBmb3IgdGhlIGZzY2sgcHJvZ3JhbS4KKyAqIEl0IHdpbGwgYXV0b21hdGljYWxseSB0cnkgdG8gcnVuIGZzY2sgcHJvZ3JhbXMgaW4gcGFyYWxsZWwgaWYgdGhlCisgKiBkZXZpY2VzIGFyZSBvbiBzZXBhcmF0ZSBzcGluZGxlcy4gIEl0IGlzIGJhc2VkIG9uIHRoZSBzYW1lIGlkZWFzIGFzCisgKiB0aGUgZ2VuZXJpYyBmcm9udCBlbmQgZm9yIGZzY2sgYnkgRGF2aWQgRW5nZWwgYW5kIEZyZWQgdmFuIEtlbXBlbiwKKyAqIGJ1dCBpdCBoYXMgYmVlbiBjb21wbGV0ZWx5IHJld3JpdHRlbiBmcm9tIHNjcmF0Y2ggdG8gc3VwcG9ydAorICogcGFyYWxsZWwgZXhlY3V0aW9uLgorICoKKyAqIFdyaXR0ZW4gYnkgVGhlb2RvcmUgVHMnbywgPHR5dHNvQG1pdC5lZHU+CisgKgorICogTWlxdWVsIHZhbiBTbW9vcmVuYnVyZyAobWlxdWVsc0Bkcmlua2VsLm93Lm9yZykgMjAtT2N0LTE5OTQ6CisgKiAgIG8gQ2hhbmdlZCAtdCBmc3R5cGUgdG8gYmVoYXZlIGxpa2Ugd2l0aCBtb3VudCB3aGVuIC1BIChhbGwgZmlsZQorICogICAgIHN5c3RlbXMpIG9yIC1NIChsaWtlIG1vdW50KSBpcyBzcGVjaWZpZWQuCisgKiAgIG8gZnNjayBsb29rcyBpZiBpdCBjYW4gZmluZCB0aGUgZnNjay50eXBlIHByb2dyYW0gdG8gZGVjaWRlCisgKiAgICAgaWYgaXQgc2hvdWxkIGlnbm9yZSB0aGUgZnMgdHlwZS4gVGhpcyB3YXkgbW9yZSBmc2NrIHByb2dyYW1zCisgKiAgICAgY2FuIGJlIGFkZGVkIHdpdGhvdXQgY2hhbmdpbmcgdGhpcyBmcm9udC1lbmQuCisgKiAgIG8gLVIgZmxhZyBza2lwIHJvb3QgZmlsZSBzeXN0ZW0uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorICogCTIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgYnkgIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNjAwIC8qIGZvciBpbmNsdXNpb24gb2Ygc2FfaGFuZGxlciBpbiBTb2xhcmlzICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaWYgSEFWRV9QQVRIU19ICisjaW5jbHVkZSA8cGF0aHMuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpZiBIQVZFX01BTExPQ19ICisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NJR05BTF9ICisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKyNpbmNsdWRlICJubHMtZW5hYmxlLmgiCisjaW5jbHVkZSAiZnNjay5oIgorI2luY2x1ZGUgImJsa2lkL2Jsa2lkLmgiCisKKyNpZm5kZWYgX1BBVEhfTU5UVEFCCisjZGVmaW5lCV9QQVRIX01OVFRBQgkiL2V0Yy9mc3RhYiIKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqaWdub3JlZF90eXBlc1tdID0geworCSJpZ25vcmUiLAorCSJpc285NjYwIiwKKwkibmZzIiwKKwkicHJvYyIsCisJInN3IiwKKwkic3dhcCIsCisJInRtcGZzIiwKKwkiZGV2cHRzIiwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcmVhbGx5X3dhbnRlZFtdID0geworCSJtaW5peCIsCisJImV4dDIiLAorCSJleHQzIiwKKwkiZXh0NCIsCisJImV4dDRkZXYiLAorCSJqZnMiLAorCSJyZWlzZXJmcyIsCisJInhpYWZzIiwKKwkieGZzIiwKKwlOVUxMCit9OworCisjZGVmaW5lIEJBU0VfTUQgIi9kZXYvbWQiCisKKy8qCisgKiBHbG9iYWwgdmFyaWFibGVzIGZvciBvcHRpb25zCisgKi8KK3N0YXRpYyBjaGFyICpkZXZpY2VzW01BWF9ERVZJQ0VTXTsKK3N0YXRpYyBjaGFyICphcmdzW01BWF9BUkdTXTsKK3N0YXRpYyBpbnQgbnVtX2RldmljZXMsIG51bV9hcmdzOworCitzdGF0aWMgaW50IHZlcmJvc2UgPSAwOworc3RhdGljIGludCBkb2FsbCA9IDA7CitzdGF0aWMgaW50IG5vZXhlY3V0ZSA9IDA7CitzdGF0aWMgaW50IHNlcmlhbGl6ZSA9IDA7CitzdGF0aWMgaW50IHNraXBfcm9vdCA9IDA7CitzdGF0aWMgaW50IGlnbm9yZV9tb3VudGVkID0gMDsKK3N0YXRpYyBpbnQgbm90aXRsZSA9IDA7CitzdGF0aWMgaW50IHBhcmFsbGVsX3Jvb3QgPSAwOworc3RhdGljIGludCBwcm9ncmVzcyA9IDA7CitzdGF0aWMgaW50IHByb2dyZXNzX2ZkID0gMDsKK3N0YXRpYyBpbnQgZm9yY2VfYWxsX3BhcmFsbGVsID0gMDsKK3N0YXRpYyBpbnQgbnVtX3J1bm5pbmcgPSAwOworc3RhdGljIGludCBtYXhfcnVubmluZyA9IDA7CitzdGF0aWMgdm9sYXRpbGUgaW50IGNhbmNlbF9yZXF1ZXN0ZWQgPSAwOworc3RhdGljIGludCBraWxsX3NlbnQgPSAwOworc3RhdGljIGNoYXIgKnByb2duYW1lOworc3RhdGljIGNoYXIgKmZzdHlwZSA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGZzX2luZm8gKmZpbGVzeXNfaW5mbyA9IE5VTEwsICpmaWxlc3lzX2xhc3QgPSBOVUxMOworc3RhdGljIHN0cnVjdCBmc2NrX2luc3RhbmNlICppbnN0YW5jZV9saXN0Oworc3RhdGljIGNvbnN0IGNoYXIgKmZzY2tfcHJlZml4X3BhdGggPSAiL3NiaW46L3NiaW4vZnMuZDovc2Jpbi9mczovZXRjL2ZzOi9ldGMiOworc3RhdGljIGNoYXIgKmZzY2tfcGF0aCA9IDA7CitzdGF0aWMgYmxraWRfY2FjaGUgY2FjaGUgPSBOVUxMOworCitzdGF0aWMgY2hhciAqc3RyaW5nX2NvcHkoY29uc3QgY2hhciAqcykKK3sKKwljaGFyCSpyZXQ7CisKKwlpZiAoIXMpCisJCXJldHVybiAwOworCXJldCA9IG1hbGxvYyhzdHJsZW4ocykrMSk7CisJaWYgKHJldCkKKwkJc3RyY3B5KHJldCwgcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzdHJpbmdfdG9faW50KGNvbnN0IGNoYXIgKnMpCit7CisJbG9uZyBsOworCWNoYXIgKnA7CisKKwlsID0gc3RydG9sKHMsICZwLCAwKTsKKwlpZiAoKnAgfHwgbCA9PSBMT05HX01JTiB8fCBsID09IExPTkdfTUFYIHx8IGwgPCAwIHx8IGwgPiBJTlRfTUFYKQorCQlyZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1cm4gKGludCkgbDsKK30KKworc3RhdGljIGludCBpZ25vcmUoc3RydWN0IGZzX2luZm8gKik7CisKK3N0YXRpYyBjaGFyICpza2lwX292ZXJfYmxhbmsoY2hhciAqY3ApCit7CisJd2hpbGUgKCpjcCAmJiBpc3NwYWNlKCpjcCkpCisJCWNwKys7CisJcmV0dXJuIGNwOworfQorCitzdGF0aWMgY2hhciAqc2tpcF9vdmVyX3dvcmQoY2hhciAqY3ApCit7CisJd2hpbGUgKCpjcCAmJiAhaXNzcGFjZSgqY3ApKQorCQljcCsrOworCXJldHVybiBjcDsKK30KKworc3RhdGljIHZvaWQgc3RyaXBfbGluZShjaGFyICpsaW5lKQoreworCWNoYXIJKnA7CisKKwl3aGlsZSAoKmxpbmUpIHsKKwkJcCA9IGxpbmUgKyBzdHJsZW4obGluZSkgLSAxOworCQlpZiAoKCpwID09ICdcbicpIHx8ICgqcCA9PSAnXHInKSkKKwkJCSpwID0gMDsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgY2hhciAqcGFyc2Vfd29yZChjaGFyICoqYnVmKQoreworCWNoYXIgKndvcmQsICpuZXh0OworCisJd29yZCA9ICpidWY7CisJaWYgKCp3b3JkID09IDApCisJCXJldHVybiAwOworCisJd29yZCA9IHNraXBfb3Zlcl9ibGFuayh3b3JkKTsKKwluZXh0ID0gc2tpcF9vdmVyX3dvcmQod29yZCk7CisJaWYgKCpuZXh0KQorCQkqbmV4dCsrID0gMDsKKwkqYnVmID0gbmV4dDsKKwlyZXR1cm4gd29yZDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZXNjYXBlKGNoYXIgKndvcmQpCit7CisJY2hhcgkqcCwgKnE7CisJaW50CWFjLCBpOworCisJaWYgKCF3b3JkKQorCQlyZXR1cm47CisKKwlmb3IgKHAgPSB3b3JkLCBxID0gd29yZDsgKnA7IHArKywgcSsrKSB7CisJCSpxID0gKnA7CisJCWlmICgqcCAhPSAnXFwnKQorCQkJY29udGludWU7CisJCWlmICgqKytwID09IDApCisJCQlicmVhazsKKwkJaWYgKCpwID09ICd0JykgeworCQkJKnEgPSAnXHQnOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCpwID09ICduJykgeworCQkJKnEgPSAnXG4nOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFpc2RpZ2l0KCpwKSkgeworCQkJKnEgPSAqcDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWFjID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKywgcCsrKSB7CisJCQlpZiAoIWlzZGlnaXQoKnApKQorCQkJCWJyZWFrOworCQkJYWMgPSAoYWMgKiA4KSArICgqcCAtICcwJyk7CisJCX0KKwkJKnEgPSBhYzsKKwkJcC0tOworCX0KKwkqcSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfaW5zdGFuY2Uoc3RydWN0IGZzY2tfaW5zdGFuY2UgKmkpCit7CisJZnJlZShpLT5wcm9nKTsKKwlmcmVlKGktPmRldmljZSk7CisJZnJlZShpLT5iYXNlX2RldmljZSk7CisJZnJlZShpKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnNfaW5mbyAqY3JlYXRlX2ZzX2RldmljZShjb25zdCBjaGFyICpkZXZpY2UsIGNvbnN0IGNoYXIgKm1udHBudCwKKwkJCQkJY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqb3B0cywKKwkJCQkJaW50IGZyZXEsIGludCBwYXNzbm8pCit7CisJc3RydWN0IGZzX2luZm8gKmZzOworCisJaWYgKCEoZnMgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBmc19pbmZvKSkpKQorCQlyZXR1cm4gTlVMTDsKKworCWZzLT5kZXZpY2UgPSBzdHJpbmdfY29weShkZXZpY2UpOworCWZzLT5tb3VudHB0ID0gc3RyaW5nX2NvcHkobW50cG50KTsKKwlmcy0+dHlwZSA9IHN0cmluZ19jb3B5KHR5cGUpOworCWZzLT5vcHRzID0gc3RyaW5nX2NvcHkob3B0cyA/IG9wdHMgOiAiIik7CisJZnMtPmZyZXEgPSBmcmVxOworCWZzLT5wYXNzbm8gPSBwYXNzbm87CisJZnMtPmZsYWdzID0gMDsKKwlmcy0+bmV4dCA9IE5VTEw7CisKKwlpZiAoIWZpbGVzeXNfaW5mbykKKwkJZmlsZXN5c19pbmZvID0gZnM7CisJZWxzZQorCQlmaWxlc3lzX2xhc3QtPm5leHQgPSBmczsKKwlmaWxlc3lzX2xhc3QgPSBmczsKKworCXJldHVybiBmczsKK30KKworCisKK3N0YXRpYyBpbnQgcGFyc2VfZnN0YWJfbGluZShjaGFyICpsaW5lLCBzdHJ1Y3QgZnNfaW5mbyAqKnJldF9mcykKK3sKKwljaGFyCSpkZXYsICpkZXZpY2UsICptbnRwbnQsICp0eXBlLCAqb3B0cywgKmZyZXEsICpwYXNzbm8sICpjcDsKKwlzdHJ1Y3QgZnNfaW5mbyAqZnM7CisKKwkqcmV0X2ZzID0gMDsKKwlzdHJpcF9saW5lKGxpbmUpOworCWNwID0gbGluZTsKKworCWRldmljZSA9IHBhcnNlX3dvcmQoJmNwKTsKKwlpZiAoIWRldmljZSB8fCAqZGV2aWNlID09ICcjJykKKwkJcmV0dXJuIDA7CS8qIElnbm9yZSBibGFuayBsaW5lcyBhbmQgY29tbWVudHMgKi8KKwltbnRwbnQgPSBwYXJzZV93b3JkKCZjcCk7CisJdHlwZSA9IHBhcnNlX3dvcmQoJmNwKTsKKwlvcHRzID0gcGFyc2Vfd29yZCgmY3ApOworCWZyZXEgPSBwYXJzZV93b3JkKCZjcCk7CisJcGFzc25vID0gcGFyc2Vfd29yZCgmY3ApOworCisJaWYgKCFtbnRwbnQgfHwgIXR5cGUpCisJCXJldHVybiAtMTsKKworCXBhcnNlX2VzY2FwZShkZXZpY2UpOworCXBhcnNlX2VzY2FwZShtbnRwbnQpOworCXBhcnNlX2VzY2FwZSh0eXBlKTsKKwlwYXJzZV9lc2NhcGUob3B0cyk7CisJcGFyc2VfZXNjYXBlKGZyZXEpOworCXBhcnNlX2VzY2FwZShwYXNzbm8pOworCisJZGV2ID0gYmxraWRfZ2V0X2Rldm5hbWUoY2FjaGUsIGRldmljZSwgTlVMTCk7CisJaWYgKGRldikKKwkJZGV2aWNlID0gZGV2OworCisJaWYgKHN0cmNocih0eXBlLCAnLCcpKQorCQl0eXBlID0gMDsKKworCWZzID0gY3JlYXRlX2ZzX2RldmljZShkZXZpY2UsIG1udHBudCwgdHlwZSA/IHR5cGUgOiAiYXV0byIsIG9wdHMsCisJCQkgICAgICBmcmVxID8gYXRvaShmcmVxKSA6IC0xLAorCQkJICAgICAgcGFzc25vID8gYXRvaShwYXNzbm8pIDogLTEpOworCWZyZWUoZGV2KTsKKworCWlmICghZnMpCisJCXJldHVybiAtMTsKKwkqcmV0X2ZzID0gZnM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGludGVycHJldF90eXBlKHN0cnVjdCBmc19pbmZvICpmcykKK3sKKwljaGFyCSp0OworCisJaWYgKHN0cmNtcChmcy0+dHlwZSwgImF1dG8iKSAhPSAwKQorCQlyZXR1cm47CisJdCA9IGJsa2lkX2dldF90YWdfdmFsdWUoY2FjaGUsICJUWVBFIiwgZnMtPmRldmljZSk7CisJaWYgKHQpIHsKKwkJZnJlZShmcy0+dHlwZSk7CisJCWZzLT50eXBlID0gdDsKKwl9Cit9CisKKy8qCisgKiBMb2FkIHRoZSBmaWxlc3lzdGVtIGRhdGFiYXNlIGZyb20gL2V0Yy9mc3RhYgorICovCitzdGF0aWMgdm9pZCBsb2FkX2ZzX2luZm8oY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJRklMRQkqZjsKKwljaGFyCWJ1ZlsxMDI0XTsKKwlpbnQJbGluZW5vID0gMDsKKwlpbnQJb2xkX2ZzdGFiID0gMTsKKwlzdHJ1Y3QgZnNfaW5mbyAqZnM7CisKKwlpZiAoKGYgPSBmb3BlbihmaWxlbmFtZSwgInIiKSkgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiV0FSTklORzogY291bGRuJ3Qgb3BlbiAlczogJXNcbiIpLAorCQkJZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybjsKKwl9CisJd2hpbGUgKCFmZW9mKGYpKSB7CisJCWxpbmVubysrOworCQlpZiAoIWZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKQorCQkJYnJlYWs7CisJCWJ1ZltzaXplb2YoYnVmKS0xXSA9IDA7CisJCWlmIChwYXJzZV9mc3RhYl9saW5lKGJ1ZiwgJmZzKSA8IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJXQVJOSU5HOiBiYWQgZm9ybWF0ICIKKwkJCQkib24gbGluZSAlZCBvZiAlc1xuIiksIGxpbmVubywgZmlsZW5hbWUpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFmcykKKwkJCWNvbnRpbnVlOworCQlpZiAoZnMtPnBhc3NubyA8IDApCisJCQlmcy0+cGFzc25vID0gMDsKKwkJZWxzZQorCQkJb2xkX2ZzdGFiID0gMDsKKwl9CisKKwlmY2xvc2UoZik7CisKKwlpZiAob2xkX2ZzdGFiICYmIGZpbGVzeXNfaW5mbykgeworCQlmcHV0cygiXDAwN1wwMDdcMDA3Iiwgc3RkZXJyKTsKKwkJZnB1dHMoXygKKwkJIldBUk5JTkc6IFlvdXIgL2V0Yy9mc3RhYiBkb2VzIG5vdCBjb250YWluIHRoZSBmc2NrIHBhc3Nub1xuIgorCQkiCWZpZWxkLiAgSSB3aWxsIGtsdWRnZSBhcm91bmQgdGhpbmdzIGZvciB5b3UsIGJ1dCB5b3VcbiIKKwkJIglzaG91bGQgZml4IHlvdXIgL2V0Yy9mc3RhYiBmaWxlIGFzIHNvb24gYXMgeW91IGNhbi5cblxuIiksIHN0ZGVycik7CisKKwkJZm9yIChmcyA9IGZpbGVzeXNfaW5mbzsgZnM7IGZzID0gZnMtPm5leHQpIHsKKwkJCWZzLT5wYXNzbm8gPSAxOworCQl9CisJfQorfQorCisvKiBMb29rdXAgZmlsZXN5cyBpbiAvZXRjL2ZzdGFiIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkuICovCitzdGF0aWMgc3RydWN0IGZzX2luZm8gKmxvb2t1cChjaGFyICpmaWxlc3lzKQoreworCXN0cnVjdCBmc19pbmZvICpmczsKKworCS8qIE5vIGZpbGVzeXMgbmFtZSBnaXZlbi4gKi8KKwlpZiAoZmlsZXN5cyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoZnMgPSBmaWxlc3lzX2luZm87IGZzOyBmcyA9IGZzLT5uZXh0KSB7CisJCWlmICghc3RyY21wKGZpbGVzeXMsIGZzLT5kZXZpY2UpIHx8CisJCSAgICAoZnMtPm1vdW50cHQgJiYgIXN0cmNtcChmaWxlc3lzLCBmcy0+bW91bnRwdCkpKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGZzOworfQorCisvKiBGaW5kIGZzY2sgcHJvZ3JhbSBmb3IgYSBnaXZlbiBmcyB0eXBlLiAqLworc3RhdGljIGNoYXIgKmZpbmRfZnNjayhjaGFyICp0eXBlKQoreworICBjaGFyICpzOworICBjb25zdCBjaGFyICp0cGw7CisgIHN0YXRpYyBjaGFyIHByb2dbMjU2XTsKKyAgY2hhciAqcCA9IHN0cmluZ19jb3B5KGZzY2tfcGF0aCk7CisgIHN0cnVjdCBzdGF0IHN0OworCisgIC8qIEFyZSB3ZSBsb29raW5nIGZvciBhIHByb2dyYW0gb3IganVzdCBhIHR5cGU/ICovCisgIHRwbCA9IChzdHJuY21wKHR5cGUsICJmc2NrLiIsIDUpID8gIiVzL2ZzY2suJXMiIDogIiVzLyVzIik7CisKKyAgZm9yKHMgPSBzdHJ0b2socCwgIjoiKTsgczsgcyA9IHN0cnRvayhOVUxMLCAiOiIpKSB7CisJc3ByaW50Zihwcm9nLCB0cGwsIHMsIHR5cGUpOworCWlmIChzdGF0KHByb2csICZzdCkgPT0gMCkgYnJlYWs7CisgIH0KKyAgZnJlZShwKTsKKyAgcmV0dXJuKHMgPyBwcm9nIDogTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgcHJvZ3Jlc3NfYWN0aXZlKE5PQVJHUykKK3sKKwlzdHJ1Y3QgZnNja19pbnN0YW5jZSAqaW5zdDsKKworCWZvciAoaW5zdCA9IGluc3RhbmNlX2xpc3Q7IGluc3Q7IGluc3QgPSBpbnN0LT5uZXh0KSB7CisJCWlmIChpbnN0LT5mbGFncyAmIEZMQUdfRE9ORSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaW5zdC0+ZmxhZ3MgJiBGTEFHX1BST0dSRVNTKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogRXhlY3V0ZSBhIHBhcnRpY3VsYXIgZnNjayBwcm9ncmFtLCBhbmQgbGluayBpdCBpbnRvIHRoZSBsaXN0IG9mCisgKiBjaGlsZCBwcm9jZXNzZXMgd2UgYXJlIHdhaXRpbmcgZm9yLgorICovCitzdGF0aWMgaW50IGV4ZWN1dGUoY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqZGV2aWNlLCBjb25zdCBjaGFyICptbnRwdCwKKwkJICAgaW50IGludGVyYWN0aXZlKQoreworCWNoYXIgKnMsICphcmd2WzgwXSwgcHJvZ1s4MF07CisJaW50ICBhcmdjLCBpOworCXN0cnVjdCBmc2NrX2luc3RhbmNlICppbnN0LCAqcDsKKwlwaWRfdAlwaWQ7CisKKwlpbnN0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZnNja19pbnN0YW5jZSkpOworCWlmICghaW5zdCkKKwkJcmV0dXJuIEVOT01FTTsKKwltZW1zZXQoaW5zdCwgMCwgc2l6ZW9mKHN0cnVjdCBmc2NrX2luc3RhbmNlKSk7CisKKwlzcHJpbnRmKHByb2csICJmc2NrLiVzIiwgdHlwZSk7CisJYXJndlswXSA9IHN0cmluZ19jb3B5KHByb2cpOworCWFyZ2MgPSAxOworCisJZm9yIChpPTA7IGkgPG51bV9hcmdzOyBpKyspCisJCWFyZ3ZbYXJnYysrXSA9IHN0cmluZ19jb3B5KGFyZ3NbaV0pOworCisJaWYgKHByb2dyZXNzKSB7CisJCWlmICgoc3RyY21wKHR5cGUsICJleHQyIikgPT0gMCkgfHwKKwkJICAgIChzdHJjbXAodHlwZSwgImV4dDMiKSA9PSAwKSB8fAorCQkgICAgKHN0cmNtcCh0eXBlLCAiZXh0NCIpID09IDApIHx8CisJCSAgICAoc3RyY21wKHR5cGUsICJleHQ0ZGV2IikgPT0gMCkpIHsKKwkJCWNoYXIgdG1wWzgwXTsKKworCQkJdG1wWzBdID0gMDsKKwkJCWlmICghcHJvZ3Jlc3NfYWN0aXZlKCkpIHsKKwkJCQlzbnByaW50Zih0bXAsIDgwLCAiLUMlZCIsIHByb2dyZXNzX2ZkKTsKKwkJCQlpbnN0LT5mbGFncyB8PSBGTEFHX1BST0dSRVNTOworCQkJfSBlbHNlIGlmIChwcm9ncmVzc19mZCkKKwkJCQlzbnByaW50Zih0bXAsIDgwLCAiLUMlZCIsIHByb2dyZXNzX2ZkICogLTEpOworCQkJaWYgKHRtcFswXSkKKwkJCQlhcmd2W2FyZ2MrK10gPSBzdHJpbmdfY29weSh0bXApOworCQl9CisJfQorCisJYXJndlthcmdjKytdID0gc3RyaW5nX2NvcHkoZGV2aWNlKTsKKwlhcmd2W2FyZ2NdID0gMDsKKworCXMgPSBmaW5kX2ZzY2socHJvZyk7CisJaWYgKHMgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiZnNjazogJXM6IG5vdCBmb3VuZFxuIiksIHByb2cpOworCQlmcmVlKGluc3QpOworCQlyZXR1cm4gRU5PRU5UOworCX0KKworCWlmICh2ZXJib3NlIHx8IG5vZXhlY3V0ZSkgeworCQlwcmludGYoIlslcyAoJWQpIC0tICVzXSAiLCBzLCBudW1fcnVubmluZywKKwkJICAgICAgIG1udHB0ID8gbW50cHQgOiBkZXZpY2UpOworCQlmb3IgKGk9MDsgaSA8IGFyZ2M7IGkrKykKKwkJCXByaW50ZigiJXMgIiwgYXJndltpXSk7CisJCXByaW50ZigiXG4iKTsKKwl9CisKKwkvKiBGb3JrIGFuZCBleGVjdXRlIHRoZSBjb3JyZWN0IHByb2dyYW0uICovCisJaWYgKG5vZXhlY3V0ZSkKKwkJcGlkID0gLTE7CisJZWxzZSBpZiAoKHBpZCA9IGZvcmsoKSkgPCAwKSB7CisJCXBlcnJvcigiZm9yayIpOworCQlmcmVlKGluc3QpOworCQlyZXR1cm4gZXJybm87CisJfSBlbHNlIGlmIChwaWQgPT0gMCkgeworCQlpZiAoIWludGVyYWN0aXZlKQorCQkJY2xvc2UoMCk7CisJCSh2b2lkKSBleGVjdihzLCBhcmd2KTsKKwkJcGVycm9yKGFyZ3ZbMF0pOworCQlmcmVlKGluc3QpOworCQlleGl0KEVYSVRfRVJST1IpOworCX0KKworCWZvciAoaT0wOyBpIDwgYXJnYzsgaSsrKQorCQlmcmVlKGFyZ3ZbaV0pOworCisJaW5zdC0+cGlkID0gcGlkOworCWluc3QtPnByb2cgPSBzdHJpbmdfY29weShwcm9nKTsKKwlpbnN0LT50eXBlID0gc3RyaW5nX2NvcHkodHlwZSk7CisJaW5zdC0+ZGV2aWNlID0gc3RyaW5nX2NvcHkoZGV2aWNlKTsKKwlpbnN0LT5iYXNlX2RldmljZSA9IGJhc2VfZGV2aWNlKGRldmljZSk7CisJaW5zdC0+c3RhcnRfdGltZSA9IHRpbWUoMCk7CisJaW5zdC0+bmV4dCA9IE5VTEw7CisKKwkvKgorCSAqIEZpbmQgdGhlIGVuZCBvZiB0aGUgbGlzdCwgc28gd2UgYWRkIHRoZSBpbnN0YW5jZSBvbiBhdCB0aGUgZW5kLgorCSAqLworCWZvciAocCA9IGluc3RhbmNlX2xpc3Q7IHAgJiYgcC0+bmV4dDsgcCA9IHAtPm5leHQpOworCisJaWYgKHApCisJCXAtPm5leHQgPSBpbnN0OworCWVsc2UKKwkJaW5zdGFuY2VfbGlzdCA9IGluc3Q7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNlbmQgYSBzaWduYWwgdG8gYWxsIG91dHN0YW5kaW5nIGZzY2sgY2hpbGQgcHJvY2Vzc2VzCisgKi8KK3N0YXRpYyBpbnQga2lsbF9hbGwoaW50IHNpZ251bSkKK3sKKwlzdHJ1Y3QgZnNja19pbnN0YW5jZSAqaW5zdDsKKwlpbnQJbiA9IDA7CisKKwlmb3IgKGluc3QgPSBpbnN0YW5jZV9saXN0OyBpbnN0OyBpbnN0ID0gaW5zdC0+bmV4dCkgeworCQlpZiAoaW5zdC0+ZmxhZ3MgJiBGTEFHX0RPTkUpCisJCQljb250aW51ZTsKKwkJa2lsbChpbnN0LT5waWQsIHNpZ251bSk7CisJCW4rKzsKKwl9CisJcmV0dXJuIG47Cit9CisKKy8qCisgKiBXYWl0IGZvciBvbmUgY2hpbGQgcHJvY2VzcyB0byBleGl0OyB3aGVuIGl0IGRvZXMsIHVubGluayBpdCBmcm9tCisgKiB0aGUgbGlzdCBvZiBleGVjdXRpbmcgY2hpbGQgcHJvY2Vzc2VzLCBhbmQgcmV0dXJuIGl0LgorICovCitzdGF0aWMgc3RydWN0IGZzY2tfaW5zdGFuY2UgKndhaXRfb25lKGludCBmbGFncykKK3sKKwlpbnQJc3RhdHVzOworCWludAlzaWc7CisJc3RydWN0IGZzY2tfaW5zdGFuY2UgKmluc3QsICppbnN0MiwgKnByZXY7CisJcGlkX3QJcGlkOworCisJaWYgKCFpbnN0YW5jZV9saXN0KQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChub2V4ZWN1dGUpIHsKKwkJaW5zdCA9IGluc3RhbmNlX2xpc3Q7CisJCXByZXYgPSAwOworI2lmZGVmIFJBTkRPTV9ERUJVRworCQl3aGlsZSAoaW5zdC0+bmV4dCAmJiAocmFuZG9tKCkgJiAxKSkgeworCQkJcHJldiA9IGluc3Q7CisJCQlpbnN0ID0gaW5zdC0+bmV4dDsKKwkJfQorI2VuZGlmCisJCWluc3QtPmV4aXRfc3RhdHVzID0gMDsKKwkJZ290byByZXRfaW5zdDsKKwl9CisKKwkvKgorCSAqIGdjYyAtV2FsbCBmYWlscyBzYXZpbmcgdGhyb3cgYWdhaW5zdCBzdHVwaWRpdHkKKwkgKiAoaW5zdCBhbmQgcHJldiBhcmUgdGhvdWdodCB0byBiZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcykKKwkgKi8KKwlpbnN0ID0gcHJldiA9IE5VTEw7CisKKwlkbyB7CisJCXBpZCA9IHdhaXRwaWQoLTEsICZzdGF0dXMsIGZsYWdzKTsKKwkJaWYgKGNhbmNlbF9yZXF1ZXN0ZWQgJiYgIWtpbGxfc2VudCkgeworCQkJa2lsbF9hbGwoU0lHVEVSTSk7CisJCQlraWxsX3NlbnQrKzsKKwkJfQorCQlpZiAoKHBpZCA9PSAwKSAmJiAoZmxhZ3MgJiBXTk9IQU5HKSkKKwkJCXJldHVybiBOVUxMOworCQlpZiAocGlkIDwgMCkgeworCQkJaWYgKChlcnJubyA9PSBFSU5UUikgfHwgKGVycm5vID09IEVBR0FJTikpCisJCQkJY29udGludWU7CisJCQlpZiAoZXJybm8gPT0gRUNISUxEKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIiVzOiB3YWl0OiBObyBtb3JlIGNoaWxkIHByb2Nlc3M/IT9cbiIpLAorCQkJCQlwcm9nbmFtZSk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlwZXJyb3IoIndhaXQiKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWZvciAocHJldiA9IDAsIGluc3QgPSBpbnN0YW5jZV9saXN0OworCQkgICAgIGluc3Q7CisJCSAgICAgcHJldiA9IGluc3QsIGluc3QgPSBpbnN0LT5uZXh0KSB7CisJCQlpZiAoaW5zdC0+cGlkID09IHBpZCkKKwkJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKCFpbnN0KTsKKworCWlmIChXSUZFWElURUQoc3RhdHVzKSkKKwkJc3RhdHVzID0gV0VYSVRTVEFUVVMoc3RhdHVzKTsKKwllbHNlIGlmIChXSUZTSUdOQUxFRChzdGF0dXMpKSB7CisJCXNpZyA9IFdURVJNU0lHKHN0YXR1cyk7CisJCWlmIChzaWcgPT0gU0lHSU5UKSB7CisJCQlzdGF0dXMgPSBFWElUX1VOQ09SUkVDVEVEOworCQl9IGVsc2UgeworCQkJcHJpbnRmKF8oIldhcm5pbmcuLi4gJXMgZm9yIGRldmljZSAlcyBleGl0ZWQgIgorCQkJICAgICAgICJ3aXRoIHNpZ25hbCAlZC5cbiIpLAorCQkJICAgICAgIGluc3QtPnByb2csIGluc3QtPmRldmljZSwgc2lnKTsKKwkJCXN0YXR1cyA9IEVYSVRfRVJST1I7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGYoXygiJXMgJXM6IHN0YXR1cyBpcyAleCwgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIpLAorCQkgICAgICAgaW5zdC0+cHJvZywgaW5zdC0+ZGV2aWNlLCBzdGF0dXMpOworCQlzdGF0dXMgPSBFWElUX0VSUk9SOworCX0KKwlpbnN0LT5leGl0X3N0YXR1cyA9IHN0YXR1czsKKwlpbnN0LT5mbGFncyB8PSBGTEFHX0RPTkU7CisJaWYgKHByb2dyZXNzICYmIChpbnN0LT5mbGFncyAmIEZMQUdfUFJPR1JFU1MpICYmCisJICAgICFwcm9ncmVzc19hY3RpdmUoKSkgeworCQlmb3IgKGluc3QyID0gaW5zdGFuY2VfbGlzdDsgaW5zdDI7IGluc3QyID0gaW5zdDItPm5leHQpIHsKKwkJCWlmIChpbnN0Mi0+ZmxhZ3MgJiBGTEFHX0RPTkUpCisJCQkJY29udGludWU7CisJCQlpZiAoc3RyY21wKGluc3QyLT50eXBlLCAiZXh0MiIpICYmCisJCQkgICAgc3RyY21wKGluc3QyLT50eXBlLCAiZXh0MyIpICYmCisJCQkgICAgc3RyY21wKGluc3QyLT50eXBlLCAiZXh0NCIpICYmCisJCQkgICAgc3RyY21wKGluc3QyLT50eXBlLCAiZXh0NGRldiIpKQorCQkJCWNvbnRpbnVlOworCQkJLyoKKwkJCSAqIElmIHdlJ3ZlIGp1c3Qgc3RhcnRlZCB0aGUgZnNjaywgd2FpdCBhIHRpbnkKKwkJCSAqIGJpdCBiZWZvcmUgc2VuZGluZyB0aGUga2lsbCwgdG8gZ2l2ZSBpdAorCQkJICogdGltZSB0byBzZXQgdXAgdGhlIHNpZ25hbCBoYW5kbGVyCisJCQkgKi8KKwkJCWlmIChpbnN0Mi0+c3RhcnRfdGltZSA8IHRpbWUoMCkrMikgeworCQkJCWlmIChmb3JrKCkgPT0gMCkgeworCQkJCQlzbGVlcCgxKTsKKwkJCQkJa2lsbChpbnN0Mi0+cGlkLCBTSUdVU1IxKTsKKwkJCQkJZXhpdCgwKTsKKwkJCQl9CisJCQl9IGVsc2UKKwkJCQlraWxsKGluc3QyLT5waWQsIFNJR1VTUjEpOworCQkJaW5zdDItPmZsYWdzIHw9IEZMQUdfUFJPR1JFU1M7CisJCQlicmVhazsKKwkJfQorCX0KK3JldF9pbnN0OgorCWlmIChwcmV2KQorCQlwcmV2LT5uZXh0ID0gaW5zdC0+bmV4dDsKKwllbHNlCisJCWluc3RhbmNlX2xpc3QgPSBpbnN0LT5uZXh0OworCWlmICh2ZXJib3NlID4gMSkKKwkJcHJpbnRmKF8oIkZpbmlzaGVkIHdpdGggJXMgKGV4aXQgc3RhdHVzICVkKVxuIiksCisJCSAgICAgICBpbnN0LT5kZXZpY2UsIGluc3QtPmV4aXRfc3RhdHVzKTsKKwludW1fcnVubmluZy0tOworCXJldHVybiBpbnN0OworfQorCisjZGVmaW5lIEZMQUdfV0FJVF9BTEwJCTAKKyNkZWZpbmUgRkxBR19XQUlUX0FUTEVBU1RfT05FCTEKKy8qCisgKiBXYWl0IHVudGlsIGFsbCBleGVjdXRpbmcgY2hpbGQgcHJvY2Vzc2VzIGhhdmUgZXhpdGVkOyByZXR1cm4gdGhlCisgKiBsb2dpY2FsIE9SIG9mIGFsbCBvZiB0aGVpciBleGl0IGNvZGUgdmFsdWVzLgorICovCitzdGF0aWMgaW50IHdhaXRfbWFueShpbnQgZmxhZ3MpCit7CisJc3RydWN0IGZzY2tfaW5zdGFuY2UgKmluc3Q7CisJaW50CWdsb2JhbF9zdGF0dXMgPSAwOworCWludAl3YWl0X2ZsYWdzID0gMDsKKworCXdoaWxlICgoaW5zdCA9IHdhaXRfb25lKHdhaXRfZmxhZ3MpKSkgeworCQlnbG9iYWxfc3RhdHVzIHw9IGluc3QtPmV4aXRfc3RhdHVzOworCQlmcmVlX2luc3RhbmNlKGluc3QpOworI2lmZGVmIFJBTkRPTV9ERUJVRworCQlpZiAobm9leGVjdXRlICYmIChmbGFncyAmIFdOT0hBTkcpICYmICEocmFuZG9tKCkgJSAzKSkKKwkJCWJyZWFrOworI2VuZGlmCisJCWlmIChmbGFncyAmIEZMQUdfV0FJVF9BVExFQVNUX09ORSkKKwkJCXdhaXRfZmxhZ3MgPSBXTk9IQU5HOworCX0KKwlyZXR1cm4gZ2xvYmFsX3N0YXR1czsKK30KKworLyoKKyAqIFJ1biB0aGUgZnNjayBwcm9ncmFtIG9uIGEgcGFydGljdWxhciBkZXZpY2UKKyAqCisgKiBJZiB0aGUgdHlwZSBpcyBzcGVjaWZpZWQgdXNpbmcgLXQsIGFuZCBpdCBpc24ndCBwcmVmaXhlZCB3aXRoICJubyIKKyAqIChhcyBpbiAibm9leHQyIikgYW5kIG9ubHkgb25lIGZpbGVzeXN0ZW0gdHlwZSBpcyBzcGVjaWZpZWQsIHRoZW4KKyAqIHVzZSB0aGF0IHR5cGUgcmVnYXJkbGVzcyBvZiB3aGF0IGlzIHNwZWNpZmllZCBpbiAvZXRjL2ZzdGFiLgorICoKKyAqIElmIHRoZSB0eXBlIGlzbid0IHNwZWNpZmllZCBieSB0aGUgdXNlciwgdGhlbiB1c2UgZWl0aGVyIHRoZSB0eXBlCisgKiBzcGVjaWZpZWQgaW4gL2V0Yy9mc3RhYiwgb3IgREVGQVVMVF9GU1RZUEUuCisgKi8KK3N0YXRpYyB2b2lkIGZzY2tfZGV2aWNlKHN0cnVjdCBmc19pbmZvICpmcywgaW50IGludGVyYWN0aXZlKQoreworCWNvbnN0IGNoYXIgKnR5cGU7CisJaW50IHJldHZhbDsKKworCWludGVycHJldF90eXBlKGZzKTsKKworCWlmIChzdHJjbXAoZnMtPnR5cGUsICJhdXRvIikgIT0gMCkKKwkJdHlwZSA9IGZzLT50eXBlOworCWVsc2UgaWYgKGZzdHlwZSAmJiBzdHJuY21wKGZzdHlwZSwgIm5vIiwgMikgJiYKKwkgICAgc3RybmNtcChmc3R5cGUsICJvcHRzPSIsIDUpICYmIHN0cm5jbXAoZnN0eXBlLCAibG9vcCIsIDQpICYmCisJICAgICFzdHJjaHIoZnN0eXBlLCAnLCcpKQorCQl0eXBlID0gZnN0eXBlOworCWVsc2UKKwkJdHlwZSA9IERFRkFVTFRfRlNUWVBFOworCisJbnVtX3J1bm5pbmcrKzsKKwlyZXR2YWwgPSBleGVjdXRlKHR5cGUsIGZzLT5kZXZpY2UsIGZzLT5tb3VudHB0LCBpbnRlcmFjdGl2ZSk7CisJaWYgKHJldHZhbCkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiJXM6IEVycm9yICVkIHdoaWxlIGV4ZWN1dGluZyBmc2NrLiVzICIKKwkJCSJmb3IgJXNcbiIpLCBwcm9nbmFtZSwgcmV0dmFsLCB0eXBlLCBmcy0+ZGV2aWNlKTsKKwkJbnVtX3J1bm5pbmctLTsKKwl9Cit9CisKKworLyoKKyAqIERlYWwgd2l0aCB0aGUgZnNjayAtdCBhcmd1bWVudC4KKyAqLworc3RhdGljIHN0cnVjdCBmc190eXBlX2NvbXBpbGUgeworCWNoYXIgKipsaXN0OworCWludCAqdHlwZTsKKwlpbnQgIG5lZ2F0ZTsKK30gZnNfdHlwZV9jb21waWxlZDsKKworI2RlZmluZSBGU19UWVBFX05PUk1BTAkwCisjZGVmaW5lIEZTX1RZUEVfT1BUCTEKKyNkZWZpbmUgRlNfVFlQRV9ORUdPUFQJMgorCitzdGF0aWMgY29uc3QgY2hhciAqZnNfdHlwZV9zeW50YXhfZXJyb3IgPQorTl8oIkVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGUgZmlsZXN5c3RlbSB0eXBlcyBwYXNzZWQgdG8gLXQgbXVzdCBiZSBwcmVmaXhlZFxuIgorICAgIndpdGggJ25vJyBvciAnIScuXG4iKTsKKworc3RhdGljIHZvaWQgY29tcGlsZV9mc190eXBlKGNoYXIgKmZzX3R5cGUsIHN0cnVjdCBmc190eXBlX2NvbXBpbGUgKmNtcCkKK3sKKwljaGFyIAkqY3AsICpsaXN0LCAqczsKKwlpbnQJbnVtID0gMjsKKwlpbnQJbmVnYXRlLCBmaXJzdF9uZWdhdGUgPSAxOworCisJaWYgKGZzX3R5cGUpIHsKKwkJZm9yIChjcD1mc190eXBlOyAqY3A7IGNwKyspIHsKKwkJCWlmICgqY3AgPT0gJywnKQorCQkJCW51bSsrOworCQl9CisJfQorCisJY21wLT5saXN0ID0gbWFsbG9jKG51bSAqIHNpemVvZihjaGFyICopKTsKKwljbXAtPnR5cGUgPSBtYWxsb2MobnVtICogc2l6ZW9mKGludCkpOworCWlmICghY21wLT5saXN0IHx8ICFjbXAtPnR5cGUpIHsKKwkJZnB1dHMoXygiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBmaWxlc3lzdGVtIHR5cGVzXG4iKSwKKwkJICAgICAgc3RkZXJyKTsKKwkJZXhpdChFWElUX0VSUk9SKTsKKwl9CisJbWVtc2V0KGNtcC0+bGlzdCwgMCwgbnVtICogc2l6ZW9mKGNoYXIgKikpOworCW1lbXNldChjbXAtPnR5cGUsIDAsIG51bSAqIHNpemVvZihpbnQpKTsKKwljbXAtPm5lZ2F0ZSA9IDA7CisKKwlpZiAoIWZzX3R5cGUpCisJCXJldHVybjsKKworCWxpc3QgPSBzdHJpbmdfY29weShmc190eXBlKTsKKwludW0gPSAwOworCXMgPSBzdHJ0b2sobGlzdCwgIiwiKTsKKwl3aGlsZShzKSB7CisJCW5lZ2F0ZSA9IDA7CisJCWlmIChzdHJuY21wKHMsICJubyIsIDIpID09IDApIHsKKwkJCXMgKz0gMjsKKwkJCW5lZ2F0ZSA9IDE7CisJCX0gZWxzZSBpZiAoKnMgPT0gJyEnKSB7CisJCQlzKys7CisJCQluZWdhdGUgPSAxOworCQl9CisJCWlmIChzdHJjbXAocywgImxvb3AiKSA9PSAwKQorCQkJLyogbG9vcCBpcyByZWFsbHkgc2hvcnQtaGFuZCBmb3Igb3B0cz1sb29wICovCisJCQlnb3RvIGxvb3Bfc3BlY2lhbF9jYXNlOworCQllbHNlIGlmIChzdHJuY21wKHMsICJvcHRzPSIsIDUpID09IDApIHsKKwkJCXMgKz0gNTsKKwkJbG9vcF9zcGVjaWFsX2Nhc2U6CisJCQljbXAtPnR5cGVbbnVtXSA9IG5lZ2F0ZSA/IEZTX1RZUEVfTkVHT1BUIDogRlNfVFlQRV9PUFQ7CisJCX0gZWxzZSB7CisJCQlpZiAoZmlyc3RfbmVnYXRlKSB7CisJCQkJY21wLT5uZWdhdGUgPSBuZWdhdGU7CisJCQkJZmlyc3RfbmVnYXRlID0gMDsKKwkJCX0KKwkJCWlmICgobmVnYXRlICYmICFjbXAtPm5lZ2F0ZSkgfHwKKwkJCSAgICAoIW5lZ2F0ZSAmJiBjbXAtPm5lZ2F0ZSkpIHsKKwkJCQlmcHV0cyhfKGZzX3R5cGVfc3ludGF4X2Vycm9yKSwgc3RkZXJyKTsKKwkJCQlleGl0KEVYSVRfVVNBR0UpOworCQkJfQorCQl9CisjaWYgMAorCQlwcmludGYoIkFkZGluZyAlcyB0byBsaXN0ICh0eXBlICVkKS5cbiIsIHMsIGNtcC0+dHlwZVtudW1dKTsKKyNlbmRpZgorCSAgICAgICAgY21wLT5saXN0W251bSsrXSA9IHN0cmluZ19jb3B5KHMpOworCQlzID0gc3RydG9rKE5VTEwsICIsIik7CisJfQorCWZyZWUobGlzdCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiBhIHBhcnRpY3VsYXIgb3B0aW9uIGFwcGVhcnMgaW4gYQorICogY29tbWEtZGVsaW1pdGVkIG9wdGlvbnMgbGlzdAorICovCitzdGF0aWMgaW50IG9wdF9pbl9saXN0KGNvbnN0IGNoYXIgKm9wdCwgY2hhciAqb3B0bGlzdCkKK3sKKwljaGFyCSpsaXN0LCAqczsKKworCWlmICghb3B0bGlzdCkKKwkJcmV0dXJuIDA7CisJbGlzdCA9IHN0cmluZ19jb3B5KG9wdGxpc3QpOworCisJcyA9IHN0cnRvayhsaXN0LCAiLCIpOworCXdoaWxlKHMpIHsKKwkJaWYgKHN0cmNtcChzLCBvcHQpID09IDApIHsKKwkJCWZyZWUobGlzdCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlzID0gc3RydG9rKE5VTEwsICIsIik7CisJfQorICAgICAgICBmcmVlKGxpc3QpOworCXJldHVybiAwOworfQorCisvKiBTZWUgaWYgdGhlIGZpbGVzeXN0ZW0gbWF0Y2hlcyB0aGUgY3JpdGVyaWEgZ2l2ZW4gYnkgdGhlIC10IG9wdGlvbiAqLworc3RhdGljIGludCBmc19tYXRjaChzdHJ1Y3QgZnNfaW5mbyAqZnMsIHN0cnVjdCBmc190eXBlX2NvbXBpbGUgKmNtcCkKK3sKKwlpbnQgbiwgcmV0ID0gMCwgY2hlY2tlZF90eXBlID0gMDsKKwljaGFyICpjcDsKKworCWlmIChjbXAtPmxpc3QgPT0gMCB8fCBjbXAtPmxpc3RbMF0gPT0gMCkKKwkJcmV0dXJuIDE7CisKKwlmb3IgKG49MDsgKGNwID0gY21wLT5saXN0W25dKTsgbisrKSB7CisJCXN3aXRjaCAoY21wLT50eXBlW25dKSB7CisJCWNhc2UgRlNfVFlQRV9OT1JNQUw6CisJCQljaGVja2VkX3R5cGUrKzsKKwkJCWlmIChzdHJjbXAoY3AsIGZzLT50eXBlKSA9PSAwKSB7CisJCQkJcmV0ID0gMTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEZTX1RZUEVfTkVHT1BUOgorCQkJaWYgKG9wdF9pbl9saXN0KGNwLCBmcy0+b3B0cykpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJY2FzZSBGU19UWVBFX09QVDoKKwkJCWlmICghb3B0X2luX2xpc3QoY3AsIGZzLT5vcHRzKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChjaGVja2VkX3R5cGUgPT0gMCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIChjbXAtPm5lZ2F0ZSA/ICFyZXQgOiByZXQpOworfQorCisvKiBDaGVjayBpZiB3ZSBzaG91bGQgaWdub3JlIHRoaXMgZmlsZXN5c3RlbS4gKi8KK3N0YXRpYyBpbnQgaWdub3JlKHN0cnVjdCBmc19pbmZvICpmcykKK3sKKwljb25zdCBjaGFyICoqaXA7CisJaW50IHdhbnRlZCA9IDA7CisKKwkvKgorCSAqIElmIHRoZSBwYXNzIG51bWJlciBpcyAwLCBpZ25vcmUgaXQuCisJICovCisJaWYgKGZzLT5wYXNzbm8gPT0gMCkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBiaW5kIG1vdW50LCBpZ25vcmUgaXQuCisJICovCisJaWYgKG9wdF9pbl9saXN0KCJiaW5kIiwgZnMtPm9wdHMpKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJXygiJXM6IHNraXBwaW5nIGJhZCBsaW5lIGluIC9ldGMvZnN0YWI6IGJpbmQgbW91bnQgd2l0aCBub256ZXJvIGZzY2sgcGFzcyBudW1iZXJcbiIpLAorCQkJZnMtPm1vdW50cHQpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpbnRlcnByZXRfdHlwZShmcyk7CisKKwkvKgorCSAqIElmIGEgc3BlY2lmaWMgZnN0eXBlIGlzIHNwZWNpZmllZCwgYW5kIGl0IGRvZXNuJ3QgbWF0Y2gsCisJICogaWdub3JlIGl0LgorCSAqLworCWlmICghZnNfbWF0Y2goZnMsICZmc190eXBlX2NvbXBpbGVkKSkgcmV0dXJuIDE7CisKKwkvKiBBcmUgd2UgaWdub3JpbmcgdGhpcyB0eXBlPyAqLworCWZvcihpcCA9IGlnbm9yZWRfdHlwZXM7ICppcDsgaXArKykKKwkJaWYgKHN0cmNtcChmcy0+dHlwZSwgKmlwKSA9PSAwKSByZXR1cm4gMTsKKworCS8qIERvIHdlIHJlYWxseSByZWFsbHkgd2FudCB0byBjaGVjayB0aGlzIGZzPyAqLworCWZvcihpcCA9IHJlYWxseV93YW50ZWQ7ICppcDsgaXArKykKKwkJaWYgKHN0cmNtcChmcy0+dHlwZSwgKmlwKSA9PSAwKSB7CisJCQl3YW50ZWQgPSAxOworCQkJYnJlYWs7CisJCX0KKworCS8qIFNlZSBpZiB0aGUgPGZzY2suZnM+IHByb2dyYW0gaXMgYXZhaWxhYmxlLiAqLworCWlmIChmaW5kX2ZzY2soZnMtPnR5cGUpID09IE5VTEwpIHsKKwkJaWYgKHdhbnRlZCkKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJmc2NrOiBjYW5ub3QgY2hlY2sgJXM6IGZzY2suJXMgbm90IGZvdW5kXG4iKSwKKwkJCQlmcy0+ZGV2aWNlLCBmcy0+dHlwZSk7CisJCXJldHVybiAxOworCX0KKworCS8qIFdlIGNhbiBhbmQgd2FudCB0byBjaGVjayB0aGlzIGZpbGUgc3lzdGVtIHR5cGUuICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXR1cm5zIFRSVUUgaWYgYSBwYXJ0aXRpb24gb24gdGhlIHNhbWUgZGlzayBpcyBhbHJlYWR5IGJlaW5nCisgKiBjaGVja2VkLgorICovCitzdGF0aWMgaW50IGRldmljZV9hbHJlYWR5X2FjdGl2ZShjaGFyICpkZXZpY2UpCit7CisJc3RydWN0IGZzY2tfaW5zdGFuY2UgKmluc3Q7CisJY2hhciAqYmFzZTsKKworCWlmIChmb3JjZV9hbGxfcGFyYWxsZWwpCisJCXJldHVybiAwOworCisjaWZkZWYgQkFTRV9NRAorCS8qIERvbid0IGNoZWNrIGEgc29mdCByYWlkIGRpc2sgd2l0aCBhbnkgb3RoZXIgZGlzayAqLworCWlmIChpbnN0YW5jZV9saXN0ICYmCisJICAgICghc3RybmNtcChpbnN0YW5jZV9saXN0LT5kZXZpY2UsIEJBU0VfTUQsIHNpemVvZihCQVNFX01EKS0xKSB8fAorCSAgICAgIXN0cm5jbXAoZGV2aWNlLCBCQVNFX01ELCBzaXplb2YoQkFTRV9NRCktMSkpKQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCisJYmFzZSA9IGJhc2VfZGV2aWNlKGRldmljZSk7CisJLyoKKwkgKiBJZiB3ZSBkb24ndCBrbm93IHRoZSBiYXNlIGRldmljZSwgYXNzdW1lIHRoYXQgdGhlIGRldmljZSBpcworCSAqIGFscmVhZHkgYWN0aXZlIGlmIHRoZXJlIGFyZSBhbnkgZnNjayBpbnN0YW5jZXMgcnVubmluZy4KKwkgKi8KKwlpZiAoIWJhc2UpCisJCXJldHVybiAoaW5zdGFuY2VfbGlzdCAhPSAwKTsKKwlmb3IgKGluc3QgPSBpbnN0YW5jZV9saXN0OyBpbnN0OyBpbnN0ID0gaW5zdC0+bmV4dCkgeworCQlpZiAoIWluc3QtPmJhc2VfZGV2aWNlIHx8ICFzdHJjbXAoYmFzZSwgaW5zdC0+YmFzZV9kZXZpY2UpKSB7CisJCQlmcmVlKGJhc2UpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJZnJlZShiYXNlKTsKKwlyZXR1cm4gMDsKK30KKworLyogQ2hlY2sgYWxsIGZpbGUgc3lzdGVtcywgdXNpbmcgdGhlIC9ldGMvZnN0YWIgdGFibGUuICovCitzdGF0aWMgaW50IGNoZWNrX2FsbChOT0FSR1MpCit7CisJc3RydWN0IGZzX2luZm8gKmZzID0gTlVMTDsKKwlpbnQgc3RhdHVzID0gRVhJVF9PSzsKKwlpbnQgbm90X2RvbmVfeWV0ID0gMTsKKwlpbnQgcGFzc25vID0gMTsKKwlpbnQgcGFzc19kb25lOworCisJaWYgKHZlcmJvc2UpCisJCWZwdXRzKF8oIkNoZWNraW5nIGFsbCBmaWxlIHN5c3RlbXMuXG4iKSwgc3Rkb3V0KTsKKworCS8qCisJICogRG8gYW4gaW5pdGlhbCBzY2FuIG92ZXIgdGhlIGZpbGVzeXN0ZW07IG1hcmsgZmlsZXN5c3RlbXMKKwkgKiB3aGljaCBzaG91bGQgYmUgaWdub3JlZCBhcyBkb25lLCBhbmQgcmVzb2x2ZSBhbnkgImF1dG8iCisJICogZmlsZXN5c3RlbSB0eXBlcyAoZG9uZSBhcyBhIHNpZGUtZWZmZWN0IG9mIGNhbGxpbmcgaWdub3JlKCkpLgorCSAqLworCWZvciAoZnMgPSBmaWxlc3lzX2luZm87IGZzOyBmcyA9IGZzLT5uZXh0KSB7CisJCWlmIChpZ25vcmUoZnMpKQorCQkJZnMtPmZsYWdzIHw9IEZMQUdfRE9ORTsKKwl9CisKKwkvKgorCSAqIEZpbmQgYW5kIGNoZWNrIHRoZSByb290IGZpbGVzeXN0ZW0uCisJICovCisJaWYgKCFwYXJhbGxlbF9yb290KSB7CisJCWZvciAoZnMgPSBmaWxlc3lzX2luZm87IGZzOyBmcyA9IGZzLT5uZXh0KSB7CisJCQlpZiAoIXN0cmNtcChmcy0+bW91bnRwdCwgIi8iKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoZnMpIHsKKwkJCWlmICghc2tpcF9yb290ICYmICFpZ25vcmUoZnMpICYmCisJCQkgICAgIShpZ25vcmVfbW91bnRlZCAmJiBpc19tb3VudGVkKGZzLT5kZXZpY2UpKSkgeworCQkJCWZzY2tfZGV2aWNlKGZzLCAxKTsKKwkJCQlzdGF0dXMgfD0gd2FpdF9tYW55KEZMQUdfV0FJVF9BTEwpOworCQkJCWlmIChzdGF0dXMgPiBFWElUX05PTkRFU1RSVUNUKQorCQkJCQlyZXR1cm4gc3RhdHVzOworCQkJfQorCQkJZnMtPmZsYWdzIHw9IEZMQUdfRE9ORTsKKwkJfQorCX0KKwkvKgorCSAqIFRoaXMgaXMgZm9yIHRoZSBib25lLWhlYWRlZCB1c2VyIHdobyBlbnRlcnMgdGhlIHJvb3QKKwkgKiBmaWxlc3lzdGVtIHR3aWNlLiAgU2tpcCByb290IHdpbGwgc2tlcCBhbGwgcm9vdCBlbnRyaWVzLgorCSAqLworCWlmIChza2lwX3Jvb3QpCisJCWZvciAoZnMgPSBmaWxlc3lzX2luZm87IGZzOyBmcyA9IGZzLT5uZXh0KQorCQkJaWYgKCFzdHJjbXAoZnMtPm1vdW50cHQsICIvIikpCisJCQkJZnMtPmZsYWdzIHw9IEZMQUdfRE9ORTsKKworCXdoaWxlIChub3RfZG9uZV95ZXQpIHsKKwkJbm90X2RvbmVfeWV0ID0gMDsKKwkJcGFzc19kb25lID0gMTsKKworCQlmb3IgKGZzID0gZmlsZXN5c19pbmZvOyBmczsgZnMgPSBmcy0+bmV4dCkgeworCQkJaWYgKGNhbmNlbF9yZXF1ZXN0ZWQpCisJCQkJYnJlYWs7CisJCQlpZiAoZnMtPmZsYWdzICYgRkxBR19ET05FKQorCQkJCWNvbnRpbnVlOworCQkJLyoKKwkJCSAqIElmIHRoZSBmaWxlc3lzdGVtJ3MgcGFzcyBudW1iZXIgaXMgaGlnaGVyCisJCQkgKiB0aGFuIHRoZSBjdXJyZW50IHBhc3MgbnVtYmVyLCB0aGVuIHdlIGRvbid0CisJCQkgKiBkbyBpdCB5ZXQuCisJCQkgKi8KKwkJCWlmIChmcy0+cGFzc25vID4gcGFzc25vKSB7CisJCQkJbm90X2RvbmVfeWV0Kys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoaWdub3JlX21vdW50ZWQgJiYgaXNfbW91bnRlZChmcy0+ZGV2aWNlKSkgeworCQkJCWZzLT5mbGFncyB8PSBGTEFHX0RPTkU7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKgorCQkJICogSWYgYSBmaWxlc3lzdGVtIG9uIGEgcGFydGljdWxhciBkZXZpY2UgaGFzCisJCQkgKiBhbHJlYWR5IGJlZW4gc3Bhd25lZCwgdGhlbiB3ZSBuZWVkIHRvIGRlZmVyCisJCQkgKiB0aGlzIHRvIGFub3RoZXIgcGFzcy4KKwkJCSAqLworCQkJaWYgKGRldmljZV9hbHJlYWR5X2FjdGl2ZShmcy0+ZGV2aWNlKSkgeworCQkJCXBhc3NfZG9uZSA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKgorCQkJICogU3Bhd24gb2ZmIHRoZSBmc2NrIHByb2Nlc3MKKwkJCSAqLworCQkJZnNja19kZXZpY2UoZnMsIHNlcmlhbGl6ZSk7CisJCQlmcy0+ZmxhZ3MgfD0gRkxBR19ET05FOworCisJCQkvKgorCQkJICogT25seSBkbyBvbmUgZmlsZXN5c3RlbSBhdCBhIHRpbWUsIG9yIGlmIHdlCisJCQkgKiBoYXZlIGEgbGltaXQgb24gdGhlIG51bWJlciBvZiBmc2NrJ3MgZXh0YW50CisJCQkgKiBhdCBvbmUgdGltZSwgYXBwbHkgdGhhdCBsaW1pdC4KKwkJCSAqLworCQkJaWYgKHNlcmlhbGl6ZSB8fAorCQkJICAgIChtYXhfcnVubmluZyAmJiAobnVtX3J1bm5pbmcgPj0gbWF4X3J1bm5pbmcpKSkgeworCQkJCXBhc3NfZG9uZSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGNhbmNlbF9yZXF1ZXN0ZWQpCisJCQlicmVhazsKKwkJaWYgKHZlcmJvc2UgPiAxKQorCQkJcHJpbnRmKF8oIi0td2FpdGluZy0tIChwYXNzICVkKVxuIiksIHBhc3Nubyk7CisJCXN0YXR1cyB8PSB3YWl0X21hbnkocGFzc19kb25lID8gRkxBR19XQUlUX0FMTCA6CisJCQkJICAgIEZMQUdfV0FJVF9BVExFQVNUX09ORSk7CisJCWlmIChwYXNzX2RvbmUpIHsKKwkJCWlmICh2ZXJib3NlID4gMSkKKwkJCQlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCQkJcGFzc25vKys7CisJCX0gZWxzZQorCQkJbm90X2RvbmVfeWV0Kys7CisJfQorCWlmIChjYW5jZWxfcmVxdWVzdGVkICYmICFraWxsX3NlbnQpIHsKKwkJa2lsbF9hbGwoU0lHVEVSTSk7CisJCWtpbGxfc2VudCsrOworCX0KKwlzdGF0dXMgfD0gd2FpdF9tYW55KEZMQUdfV0FJVF9BVExFQVNUX09ORSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgdXNhZ2UoTk9BUkdTKQoreworCWZwdXRzKF8oIlVzYWdlOiBmc2NrIFstQU1OUFJUVl0gWyAtQyBbIGZkIF0gXSBbLXQgZnN0eXBlXSBbZnMtb3B0aW9uc10gW2ZpbGVzeXMgLi4uXVxuIiksIHN0ZGVycik7CisJZXhpdChFWElUX1VTQUdFKTsKK30KKworI2lmZGVmIEhBVkVfU0lHTkFMX0gKK3N0YXRpYyB2b2lkIHNpZ25hbF9jYW5jZWwoaW50IHNpZyBGU0NLX0FUVFIoKHVudXNlZCkpKQoreworCWNhbmNlbF9yZXF1ZXN0ZWQrKzsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBQUlMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQJaSwgajsKKwljaGFyCSphcmcsICpkZXYsICp0bXAgPSAwOworCWNoYXIJb3B0aW9uc1sxMjhdOworCWludAlvcHQgPSAwOworCWludCAgICAgb3B0c19mb3JfZnNjayA9IDA7CisjaWZkZWYgSEFWRV9TSUdOQUxfSAorCXN0cnVjdCBzaWdhY3Rpb24Jc2E7CisKKwkvKgorCSAqIFNldCB1cCBzaWduYWwgYWN0aW9uCisJICovCisJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHN0cnVjdCBzaWdhY3Rpb24pKTsKKwlzYS5zYV9oYW5kbGVyID0gc2lnbmFsX2NhbmNlbDsKKwlzaWdhY3Rpb24oU0lHSU5ULCAmc2EsIDApOworCXNpZ2FjdGlvbihTSUdURVJNLCAmc2EsIDApOworI2VuZGlmCisKKwludW1fZGV2aWNlcyA9IDA7CisJbnVtX2FyZ3MgPSAwOworCWluc3RhbmNlX2xpc3QgPSAwOworCisJcHJvZ25hbWUgPSBhcmd2WzBdOworCisJZm9yIChpPTE7IGkgPCBhcmdjOyBpKyspIHsKKwkJYXJnID0gYXJndltpXTsKKwkJaWYgKCFhcmcpCisJCQljb250aW51ZTsKKwkJaWYgKChhcmdbMF0gPT0gJy8nICYmICFvcHRzX2Zvcl9mc2NrKSB8fCBzdHJjaHIoYXJnLCAnPScpKSB7CisJCQlpZiAobnVtX2RldmljZXMgPj0gTUFYX0RFVklDRVMpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgXygiJXM6IHRvbyBtYW55IGRldmljZXNcbiIpLAorCQkJCQlwcm9nbmFtZSk7CisJCQkJZXhpdChFWElUX0VSUk9SKTsKKwkJCX0KKwkJCWRldiA9IGJsa2lkX2dldF9kZXZuYW1lKGNhY2hlLCBhcmcsIE5VTEwpOworCQkJaWYgKCFkZXYgJiYgc3RyY2hyKGFyZywgJz0nKSkgeworCQkJCS8qCisJCQkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIGZhaWxlZCBiZWNhdXNlCisJCQkJICogL3Byb2MvcGFydGl0aW9ucyBpc24ndCBmb3VuZC4KKwkJCQkgKi8KKwkJCQlpZiAoYWNjZXNzKCIvcHJvYy9wYXJ0aXRpb25zIiwgUl9PSykgPCAwKSB7CisJCQkJCWZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgb3BlbiAvcHJvYy9wYXJ0aXRpb25zOiAlc1xuIiwKKwkJCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCQkJCWZwcmludGYoc3RkZXJyLCAiSXMgL3Byb2MgbW91bnRlZD9cbiIpOworCQkJCQlleGl0KEVYSVRfRVJST1IpOworCQkJCX0KKwkJCQkvKgorCQkJCSAqIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGJlY2F1c2UKKwkJCQkgKiB3ZSdyZSBub3QgcnVubmluZyBhcyByb290CisJCQkJICovCisJCQkJaWYgKGdldGV1aWQoKSkKKwkJCQkJZnByaW50ZihzdGRlcnIsCisJCSJNdXN0IGJlIHJvb3QgdG8gc2NhbiBmb3IgbWF0Y2hpbmcgZmlsZXN5c3RlbXM6ICVzXG4iLCBhcmcpOworCQkJCWVsc2UKKwkJCQkJZnByaW50ZihzdGRlcnIsCisJCSJDb3VsZG4ndCBmaW5kIG1hdGNoaW5nIGZpbGVzeXN0ZW06ICVzXG4iLCBhcmcpOworCQkJCWV4aXQoRVhJVF9FUlJPUik7CisJCQl9CisJCQlkZXZpY2VzW251bV9kZXZpY2VzKytdID0gZGV2ID8gZGV2IDogc3RyaW5nX2NvcHkoYXJnKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChhcmdbMF0gIT0gJy0nIHx8IG9wdHNfZm9yX2ZzY2spIHsKKwkJCWlmIChudW1fYXJncyA+PSBNQVhfQVJHUykgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCIlczogdG9vIG1hbnkgYXJndW1lbnRzXG4iKSwKKwkJCQkJcHJvZ25hbWUpOworCQkJCWV4aXQoRVhJVF9FUlJPUik7CisJCQl9CisJCQlhcmdzW251bV9hcmdzKytdID0gc3RyaW5nX2NvcHkoYXJnKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWZvciAoaj0xOyBhcmdbal07IGorKykgeworCQkJaWYgKG9wdHNfZm9yX2ZzY2spIHsKKwkJCQlvcHRpb25zWysrb3B0XSA9IGFyZ1tqXTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXN3aXRjaCAoYXJnW2pdKSB7CisJCQljYXNlICdBJzoKKwkJCQlkb2FsbCsrOworCQkJCWJyZWFrOworCQkJY2FzZSAnQyc6CisJCQkJcHJvZ3Jlc3MrKzsKKwkJCQlpZiAoYXJnW2orMV0pIHsKKwkJCQkJcHJvZ3Jlc3NfZmQgPSBzdHJpbmdfdG9faW50KGFyZytqKzEpOworCQkJCQlpZiAocHJvZ3Jlc3NfZmQgPCAwKQorCQkJCQkJcHJvZ3Jlc3NfZmQgPSAwOworCQkJCQllbHNlCisJCQkJCQlnb3RvIG5leHRfYXJnOworCQkJCX0gZWxzZSBpZiAoKGkrMSkgPCBhcmdjICYmCisJCQkJCSAgICFzdHJuY21wKGFyZ3ZbaSsxXSwgIi0iLCAxKSA9PSAwKSB7CisJCQkJCXByb2dyZXNzX2ZkID0gc3RyaW5nX3RvX2ludChhcmd2W2ldKTsKKwkJCQkJaWYgKHByb2dyZXNzX2ZkIDwgMCkKKwkJCQkJCXByb2dyZXNzX2ZkID0gMDsKKwkJCQkJZWxzZSB7CisJCQkJCQkrK2k7CisJCQkJCQlnb3RvIG5leHRfYXJnOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAnVic6CisJCQkJdmVyYm9zZSsrOworCQkJCWJyZWFrOworCQkJY2FzZSAnTic6CisJCQkJbm9leGVjdXRlKys7CisJCQkJYnJlYWs7CisJCQljYXNlICdSJzoKKwkJCQlza2lwX3Jvb3QrKzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1QnOgorCQkJCW5vdGl0bGUrKzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ00nOgorCQkJCWlnbm9yZV9tb3VudGVkKys7CisJCQkJYnJlYWs7CisJCQljYXNlICdQJzoKKwkJCQlwYXJhbGxlbF9yb290Kys7CisJCQkJYnJlYWs7CisJCQljYXNlICdzJzoKKwkJCQlzZXJpYWxpemUrKzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3QnOgorCQkJCXRtcCA9IDA7CisJCQkJaWYgKGZzdHlwZSkKKwkJCQkJdXNhZ2UoKTsKKwkJCQlpZiAoYXJnW2orMV0pCisJCQkJCXRtcCA9IGFyZytqKzE7CisJCQkJZWxzZSBpZiAoKGkrMSkgPCBhcmdjKQorCQkJCQl0bXAgPSBhcmd2WysraV07CisJCQkJZWxzZQorCQkJCQl1c2FnZSgpOworCQkJCWZzdHlwZSA9IHN0cmluZ19jb3B5KHRtcCk7CisJCQkJY29tcGlsZV9mc190eXBlKGZzdHlwZSwgJmZzX3R5cGVfY29tcGlsZWQpOworCQkJCWdvdG8gbmV4dF9hcmc7CisJCQljYXNlICctJzoKKwkJCQlvcHRzX2Zvcl9mc2NrKys7CisJCQkJYnJlYWs7CisJCQljYXNlICc/JzoKKwkJCQl1c2FnZSgpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlvcHRpb25zWysrb3B0XSA9IGFyZ1tqXTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCW5leHRfYXJnOgorCQlpZiAob3B0KSB7CisJCQlvcHRpb25zWzBdID0gJy0nOworCQkJb3B0aW9uc1srK29wdF0gPSAnXDAnOworCQkJaWYgKG51bV9hcmdzID49IE1BWF9BUkdTKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIiVzOiB0b28gbWFueSBhcmd1bWVudHNcbiIpLAorCQkJCQlwcm9nbmFtZSk7CisJCQkJZXhpdChFWElUX0VSUk9SKTsKKwkJCX0KKwkJCWFyZ3NbbnVtX2FyZ3MrK10gPSBzdHJpbmdfY29weShvcHRpb25zKTsKKwkJCW9wdCA9IDA7CisJCX0KKwl9CisJaWYgKGdldGVudigiRlNDS19GT1JDRV9BTExfUEFSQUxMRUwiKSkKKwkJZm9yY2VfYWxsX3BhcmFsbGVsKys7CisJaWYgKCh0bXAgPSBnZXRlbnYoIkZTQ0tfTUFYX0lOU1QiKSkpCisJICAgIG1heF9ydW5uaW5nID0gYXRvaSh0bXApOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCBpLCBzdGF0dXMgPSAwOworCWludCBpbnRlcmFjdGl2ZSA9IDA7CisJY2hhciAqb2xkcGF0aCA9IGdldGVudigiUEFUSCIpOworCWNvbnN0IGNoYXIgKmZzdGFiOworCXN0cnVjdCBmc19pbmZvICpmczsKKworCXNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIEJVRlNJWik7CisJc2V0dmJ1ZihzdGRlcnIsIE5VTEwsIF9JT05CRiwgQlVGU0laKTsKKworI2lmZGVmIEVOQUJMRV9OTFMKKwlzZXRsb2NhbGUoTENfTUVTU0FHRVMsICIiKTsKKwlzZXRsb2NhbGUoTENfQ1RZUEUsICIiKTsKKwliaW5kdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUsIExPQ0FMRURJUik7CisJdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUpOworI2VuZGlmCisJYmxraWRfZ2V0X2NhY2hlKCZjYWNoZSwgTlVMTCk7CisJUFJTKGFyZ2MsIGFyZ3YpOworCisJaWYgKCFub3RpdGxlKQorCQlwcmludGYoImZzY2sgJXMgKCVzKVxuIiwgRTJGU1BST0dTX1ZFUlNJT04sIEUyRlNQUk9HU19EQVRFKTsKKworCWZzdGFiID0gZ2V0ZW52KCJGU1RBQl9GSUxFIik7CisJaWYgKCFmc3RhYikKKwkJZnN0YWIgPSBfUEFUSF9NTlRUQUI7CisJbG9hZF9mc19pbmZvKGZzdGFiKTsKKworCS8qIFVwZGF0ZSBvdXIgc2VhcmNoIHBhdGggdG8gaW5jbHVkZSB1bmNvbW1vbiBkaXJlY3Rvcmllcy4gKi8KKwlpZiAob2xkcGF0aCkgeworCQlmc2NrX3BhdGggPSBtYWxsb2MgKHN0cmxlbiAoZnNja19wcmVmaXhfcGF0aCkgKyAxICsKKwkJCQkgICAgc3RybGVuIChvbGRwYXRoKSArIDEpOworCQlpZiAoIWZzY2tfcGF0aCkgeworCQkJZnByaW50ZihzdGRlcnIsICIlczogVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZnNja19wYXRoXG4iLCBwcm9nbmFtZSk7CisJCQlleGl0KEVYSVRfRVJST1IpOworCQl9CisJCXN0cmNweSAoZnNja19wYXRoLCBmc2NrX3ByZWZpeF9wYXRoKTsKKwkJc3RyY2F0IChmc2NrX3BhdGgsICI6Iik7CisJCXN0cmNhdCAoZnNja19wYXRoLCBvbGRwYXRoKTsKKwl9IGVsc2UgeworCQlmc2NrX3BhdGggPSBzdHJpbmdfY29weShmc2NrX3ByZWZpeF9wYXRoKTsKKwl9CisKKwlpZiAoKG51bV9kZXZpY2VzID09IDEpIHx8IChzZXJpYWxpemUpKQorCQlpbnRlcmFjdGl2ZSA9IDE7CisKKwkvKiBJZiAtQSB3YXMgc3BlY2lmaWVkICgiY2hlY2sgYWxsIiksIGRvIHRoYXQhICovCisJaWYgKGRvYWxsKQorCQlyZXR1cm4gY2hlY2tfYWxsKCk7CisKKwlpZiAobnVtX2RldmljZXMgPT0gMCkgeworCQlzZXJpYWxpemUrKzsKKwkJaW50ZXJhY3RpdmUrKzsKKwkJcmV0dXJuIGNoZWNrX2FsbCgpOworCX0KKwlmb3IgKGkgPSAwIDsgaSA8IG51bV9kZXZpY2VzOyBpKyspIHsKKwkJaWYgKGNhbmNlbF9yZXF1ZXN0ZWQpIHsKKwkJCWlmICgha2lsbF9zZW50KSB7CisJCQkJa2lsbF9hbGwoU0lHVEVSTSk7CisJCQkJa2lsbF9zZW50Kys7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlmcyA9IGxvb2t1cChkZXZpY2VzW2ldKTsKKwkJaWYgKCFmcykgeworCQkJZnMgPSBjcmVhdGVfZnNfZGV2aWNlKGRldmljZXNbaV0sIDAsICJhdXRvIiwKKwkJCQkJICAgICAgMCwgLTEsIC0xKTsKKwkJCWlmICghZnMpCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKGlnbm9yZV9tb3VudGVkICYmIGlzX21vdW50ZWQoZnMtPmRldmljZSkpCisJCQljb250aW51ZTsKKwkJZnNja19kZXZpY2UoZnMsIGludGVyYWN0aXZlKTsKKwkJaWYgKHNlcmlhbGl6ZSB8fAorCQkgICAgKG1heF9ydW5uaW5nICYmIChudW1fcnVubmluZyA+PSBtYXhfcnVubmluZykpKSB7CisJCQlzdHJ1Y3QgZnNja19pbnN0YW5jZSAqaW5zdDsKKworCQkJaW5zdCA9IHdhaXRfb25lKDApOworCQkJaWYgKGluc3QpIHsKKwkJCQlzdGF0dXMgfD0gaW5zdC0+ZXhpdF9zdGF0dXM7CisJCQkJZnJlZV9pbnN0YW5jZShpbnN0KTsKKwkJCX0KKwkJCWlmICh2ZXJib3NlID4gMSkKKwkJCQlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCQl9CisJfQorCXN0YXR1cyB8PSB3YWl0X21hbnkoRkxBR19XQUlUX0FMTCk7CisJZnJlZShmc2NrX3BhdGgpOworCWJsa2lkX3B1dF9jYWNoZShjYWNoZSk7CisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL21pc2MvZnNjay5oIGIvbWlzYy9mc2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwZjcwZQotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvZnNjay5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBmc2NrLmgKKyAqLworCisjaW5jbHVkZSA8dGltZS5oPgorCisjaWZkZWYgX19TVERDX18KKyNkZWZpbmUgTk9BUkdTIHZvaWQKKyNlbHNlCisjZGVmaW5lIE5PQVJHUworI2RlZmluZSBjb25zdAorI2VuZGlmCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBGU0NLX0FUVFIoeCkgX19hdHRyaWJ1dGVfXyh4KQorI2Vsc2UKKyNkZWZpbmUgRlNDS19BVFRSKHgpCisjZW5kaWYKKworCisjaWZuZGVmIERFRkFVTFRfRlNUWVBFCisjZGVmaW5lIERFRkFVTFRfRlNUWVBFCSJleHQyIgorI2VuZGlmCisKKyNkZWZpbmUgTUFYX0RFVklDRVMgMzIKKyNkZWZpbmUgTUFYX0FSR1MgMzIKKworI2RlZmluZSBFWElUX09LICAgICAgICAgIDAKKyNkZWZpbmUgRVhJVF9OT05ERVNUUlVDVCAxCisjZGVmaW5lIEVYSVRfREVTVFJVQ1QgICAgMgorI2RlZmluZSBFWElUX1VOQ09SUkVDVEVEIDQKKyNkZWZpbmUgRVhJVF9FUlJPUiAgICAgICA4CisjZGVmaW5lIEVYSVRfVVNBR0UgICAgICAgMTYKKyNkZWZpbmUgRVhJVF9MSUJSQVJZICAgICAxMjgKKworLyoKKyAqIEludGVybmFsIHN0cnVjdHVyZSBmb3IgbW91bnQgdGFiZWwgZW50cmllcy4KKyAqLworCitzdHJ1Y3QgZnNfaW5mbyB7CisJY2hhciAgKmRldmljZTsKKwljaGFyICAqbW91bnRwdDsKKwljaGFyICAqdHlwZTsKKwljaGFyICAqb3B0czsKKwlpbnQgICBmcmVxOworCWludCAgIHBhc3NubzsKKwlpbnQgICBmbGFnczsKKwlzdHJ1Y3QgZnNfaW5mbyAqbmV4dDsKK307CisKKyNkZWZpbmUgRkxBR19ET05FIDEKKyNkZWZpbmUgRkxBR19QUk9HUkVTUyAyCisKKy8qCisgKiBTdHJ1Y3R1cmUgdG8gYWxsb3cgZXhpdCBjb2RlcyB0byBiZSBzdG9yZWQKKyAqLworc3RydWN0IGZzY2tfaW5zdGFuY2UgeworCWludAlwaWQ7CisJaW50CWZsYWdzOworCWludAlleGl0X3N0YXR1czsKKwl0aW1lX3QJc3RhcnRfdGltZTsKKwljaGFyICoJcHJvZzsKKwljaGFyICoJdHlwZTsKKwljaGFyICoJZGV2aWNlOworCWNoYXIgKgliYXNlX2RldmljZTsKKwlzdHJ1Y3QgZnNja19pbnN0YW5jZSAqbmV4dDsKK307CisKK2V4dGVybiBjaGFyICpiYXNlX2RldmljZShjb25zdCBjaGFyICpkZXZpY2UpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmlkZW50aWZ5X2ZzKGNvbnN0IGNoYXIgKmZzX25hbWUsIGNvbnN0IGNoYXIgKmZzX3R5cGVzKTsKKworLyogaXNtb3VudGVkLmggKi8KK2V4dGVybiBpbnQgaXNfbW91bnRlZChjb25zdCBjaGFyICpmaWxlKTsKZGlmZiAtLWdpdCBhL21pc2MvaXNtb3VudGVkLmMgYi9taXNjL2lzbW91bnRlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYTBlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2lzbW91bnRlZC5jCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogaXNtb3VudGVkLmMgLS0tIENoZWNrIHRvIHNlZSBpZiB0aGUgZmlsZXN5c3RlbSB3YXMgbW91bnRlZAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwxOTk2LDE5OTcsMTk5OCwxOTk5LDIwMDAsMjAwOCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaWZkZWYgSEFWRV9MSU5VWF9GRF9ICisjaW5jbHVkZSA8bGludXgvZmQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTU5URU5UX0gKKyNpbmNsdWRlIDxtbnRlbnQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgImZzY2suaCIKKworLyoKKyAqIGV4dDJmc19jaGVja19pZl9tb3VudGVkIGZsYWdzCisgKi8KKyNkZWZpbmUgTUZfTU9VTlRFRAkJMQorCisjaW5jbHVkZSAiZXQvY29tX2Vyci5oIgorCisjaWZkZWYgSEFWRV9TRVRNTlRFTlQKK3N0YXRpYyBjaGFyICpza2lwX292ZXJfYmxhbmsoY2hhciAqY3ApCit7CisJd2hpbGUgKCpjcCAmJiBpc3NwYWNlKCpjcCkpCisJCWNwKys7CisJcmV0dXJuIGNwOworfQorCitzdGF0aWMgY2hhciAqc2tpcF9vdmVyX3dvcmQoY2hhciAqY3ApCit7CisJd2hpbGUgKCpjcCAmJiAhaXNzcGFjZSgqY3ApKQorCQljcCsrOworCXJldHVybiBjcDsKK30KKworc3RhdGljIGNoYXIgKnBhcnNlX3dvcmQoY2hhciAqKmJ1ZikKK3sKKwljaGFyICp3b3JkLCAqbmV4dDsKKworCXdvcmQgPSAqYnVmOworCWlmICgqd29yZCA9PSAwKQorCQlyZXR1cm4gMDsKKworCXdvcmQgPSBza2lwX292ZXJfYmxhbmsod29yZCk7CisJbmV4dCA9IHNraXBfb3Zlcl93b3JkKHdvcmQpOworCWlmICgqbmV4dCkKKwkJKm5leHQrKyA9IDA7CisJKmJ1ZiA9IG5leHQ7CisJcmV0dXJuIHdvcmQ7Cit9CisjZW5kaWYKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBjaGVja3MgYSBmaWxlIGluIC9ldGMvbXRhYiBmb3JtYXQgdG8gc2VlIGlmIGEKKyAqIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4gIFJldHVybnMgYW4gZXJyb3IgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdAorICogb3IgY2FuJ3QgYmUgb3BlbmVkLgorICovCitzdGF0aWMgZXJyY29kZV90IGNoZWNrX21udGVudF9maWxlKGNvbnN0IGNoYXIgKm10YWJfZmlsZSwgY29uc3QgY2hhciAqZmlsZSwKKwkJCQkgICBpbnQgKm1vdW50X2ZsYWdzKQoreworI2lmZGVmIEhBVkVfU0VUTU5URU5UCisJc3RydWN0IHN0YXQJc3RfYnVmOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCWRldl90CQlmaWxlX2Rldj0wLCBmaWxlX3JkZXY9MDsKKwlpbm9fdAkJZmlsZV9pbm89MDsKKwlGSUxFIAkJKmY7CisJY2hhcgkJYnVmWzEwMjRdLCAqZGV2aWNlID0gMCwgKm1udF9kaXIgPSAwLCAqY3A7CisKKwkqbW91bnRfZmxhZ3MgPSAwOworCWlmICgoZiA9IHNldG1udGVudCAobXRhYl9maWxlLCAiciIpKSA9PSBOVUxMKQorCQlyZXR1cm4gZXJybm87CisJaWYgKHN0YXQoZmlsZSwgJnN0X2J1ZikgPT0gMCkgeworCQlpZiAoU19JU0JMSyhzdF9idWYuc3RfbW9kZSkpIHsKKyNpZm5kZWYgX19HTlVfXyAvKiBUaGUgR05VIGh1cmQgaXMgYnJva2VuIHdpdGggcmVzcGVjdCB0byBzdGF0IGRldmljZXMgKi8KKwkJCWZpbGVfcmRldiA9IHN0X2J1Zi5zdF9yZGV2OworI2VuZGlmCS8qIF9fR05VX18gKi8KKwkJfSBlbHNlIHsKKwkJCWZpbGVfZGV2ID0gc3RfYnVmLnN0X2RldjsKKwkJCWZpbGVfaW5vID0gc3RfYnVmLnN0X2lubzsKKwkJfQorCX0KKwl3aGlsZSAoMSkgeworCQlpZiAoIWZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKSB7CisJCQlkZXZpY2UgPSBtbnRfZGlyID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWJ1ZltzaXplb2YoYnVmKS0xXSA9IDA7CisKKwkJY3AgPSBidWY7CisJCWRldmljZSA9IHBhcnNlX3dvcmQoJmNwKTsKKwkJaWYgKCFkZXZpY2UgfHwgKmRldmljZSA9PSAnIycpCisJCQlyZXR1cm4gMDsJLyogSWdub3JlIGJsYW5rIGxpbmVzIGFuZCBjb21tZW50cyAqLworCQltbnRfZGlyID0gcGFyc2Vfd29yZCgmY3ApOworCisJCWlmIChkZXZpY2VbMF0gIT0gJy8nKQorCQkJY29udGludWU7CisKKwkJaWYgKHN0cmNtcChmaWxlLCBkZXZpY2UpID09IDApCisJCQlicmVhazsKKwkJaWYgKHN0YXQoZGV2aWNlLCAmc3RfYnVmKSA9PSAwKSB7CisJCQlpZiAoU19JU0JMSyhzdF9idWYuc3RfbW9kZSkpIHsKKyNpZm5kZWYgX19HTlVfXworCQkJCWlmIChmaWxlX3JkZXYgJiYgKGZpbGVfcmRldiA9PSBzdF9idWYuc3RfcmRldikpCisJCQkJCWJyZWFrOworI2VuZGlmCS8qIF9fR05VX18gKi8KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGZpbGVfZGV2ICYmICgoZmlsZV9kZXYgPT0gc3RfYnVmLnN0X2RldikgJiYKKwkJCQkJCSAoZmlsZV9pbm8gPT0gc3RfYnVmLnN0X2lubykpKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmIChtbnRfZGlyID09IDApIHsKKyNpZm5kZWYgX19HTlVfXyAvKiBUaGUgR05VIGh1cmQgaXMgYnJva2VuIHdpdGggcmVzcGVjdCB0byBzdGF0IGRldmljZXMgKi8KKwkJLyoKKwkJICogRG8gYW4gZXh0cmEgY2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIHJvb3QgZGV2aWNlLiAgV2UKKwkJICogY2FuJ3QgdHJ1c3QgL2V0Yy9tdGFiLCBhbmQgL3Byb2MvbW91bnRzIHdpbGwgb25seSBsaXN0CisJCSAqIC9kZXYvcm9vdCBmb3IgdGhlIHJvb3QgZmlsZXN5c3RlbS4gIEFyZ2guICBJbnN0ZWFkIHdlCisJCSAqIGNoZWNrIGlmIHRoZSBnaXZlbiBkZXZpY2UgaGFzIHRoZSBzYW1lIG1ham9yL21pbm9yIG51bWJlcgorCQkgKiBhcyB0aGUgZGV2aWNlIHRoYXQgdGhlIHJvb3QgZGlyZWN0b3J5IGlzIG9uLgorCQkgKi8KKwkJaWYgKGZpbGVfcmRldiAmJiAoc3RhdCgiLyIsICZzdF9idWYpID09IDApICYmCisJCSAgICAoc3RfYnVmLnN0X2RldiA9PSBmaWxlX3JkZXYpKQorCQkJKm1vdW50X2ZsYWdzID0gTUZfTU9VTlRFRDsKKyNlbmRpZgkvKiBfX0dOVV9fICovCisJCWdvdG8gZXJyb3V0OworCX0KKyNpZm5kZWYgX19HTlVfXyAvKiBUaGUgR05VIGh1cmQgaXMgZGVmaWNpZW50OyB3aGF0IGVsc2UgaXMgbmV3PyAqLworCS8qIFZhbGlkYXRlIHRoZSBlbnRyeSBpbiBjYXNlIC9ldGMvbXRhYiBpcyBvdXQgb2YgZGF0ZSAqLworCS8qCisJICogV2UgbmVlZCB0byBiZSBwYXJhbm9pZCwgYmVjYXVzZSBzb21lIGJyb2tlbiBkaXN0cmlidXRpb25zCisJICogKHJlYWQ6IFNsYWNrd2FyZSkgZG9uJ3QgaW5pdGlhbGl6ZSAvZXRjL210YWIgYmVmb3JlIGNoZWNraW5nCisJICogYWxsIG9mIHRoZSBub24tcm9vdCBmaWxlc3lzdGVtcyBvbiB0aGUgZGlzay4KKwkgKi8KKwlpZiAoc3RhdChtbnRfZGlyLCAmc3RfYnVmKSA8IDApIHsKKwkJcmV0dmFsID0gZXJybm87CisJCWlmIChyZXR2YWwgPT0gRU5PRU5UKSB7CisjaWZkZWYgREVCVUcKKwkJCXByaW50ZigiQm9ndXMgZW50cnkgaW4gJXMhICAoJXMgZG9lcyBub3QgZXhpc3QpXG4iLAorCQkJICAgICAgIG10YWJfZmlsZSwgbW50X2Rpcik7CisjZW5kaWYgLyogREVCVUcgKi8KKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJZ290byBlcnJvdXQ7CisJfQorCWlmIChmaWxlX3JkZXYgJiYgKHN0X2J1Zi5zdF9kZXYgIT0gZmlsZV9yZGV2KSkgeworI2lmZGVmIERFQlVHCisJCXByaW50ZigiQm9ndXMgZW50cnkgaW4gJXMhICAoJXMgbm90IG1vdW50ZWQgb24gJXMpXG4iLAorCQkgICAgICAgbXRhYl9maWxlLCBmaWxlLCBtbnRfZGlyKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCQlnb3RvIGVycm91dDsKKwl9CisjZW5kaWYgLyogX19HTlVfXyAqLworCSptb3VudF9mbGFncyA9IE1GX01PVU5URUQ7CisKKwlyZXR2YWwgPSAwOworZXJyb3V0OgorCWVuZG1udGVudCAoZik7CisJcmV0dXJuIHJldHZhbDsKKyNlbHNlIC8qICFIQVZFX1NFVE1OVEVOVCAqLworCXJldHVybiAwOworI2VuZGlmIC8qIEhBVkVfTU5URU5UX0ggKi8KK30KKworaW50IGlzX21vdW50ZWQoY29uc3QgY2hhciAqZmlsZSkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJbW91bnRfZmxhZ3MgPSAwOworCisjaWZkZWYgX19saW51eF9fCisJcmV0dmFsID0gY2hlY2tfbW50ZW50X2ZpbGUoIi9wcm9jL21vdW50cyIsIGZpbGUsICZtb3VudF9mbGFncyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIDA7CisJaWYgKG1vdW50X2ZsYWdzKQorCQlyZXR1cm4gMTsKKyNlbmRpZiAvKiBfX2xpbnV4X18gKi8KKwlyZXR2YWwgPSBjaGVja19tbnRlbnRfZmlsZSgiL2V0Yy9tdGFiIiwgZmlsZSwgJm1vdW50X2ZsYWdzKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKG1vdW50X2ZsYWdzKTsKK30KKworI2lmZGVmIERFQlVHCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaWYgKGFyZ2MgPCAyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIGRldmljZVxuIiwgYXJndlswXSk7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKGlzX21vdW50ZWQoYXJndlsxXSkpCisJCXByaW50ZigiXHQlcyBpcyBtb3VudGVkLlxuIiwgYXJndlsxXSk7CisJZXhpdCgwKTsKK30KKyNlbmRpZiAvKiBERUJVRyAqLwpkaWZmIC0tZ2l0IGEvbWlzYy9qZnNfdXNlci5oIGIvbWlzYy9qZnNfdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNzBjZDUKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2pmc191c2VyLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9KRlNfVVNFUl9ICisjZGVmaW5lIF9KRlNfVVNFUl9ICisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQga2Rldl90OworCisjaW5jbHVkZSA8ZXh0MmZzL2tlcm5lbC1qYmQuaD4KKworI2VuZGlmIC8qIF9KRlNfVVNFUl9IICovCmRpZmYgLS1naXQgYS9taXNjL2xvZ3NhdmUuOC5pbiBiL21pc2MvbG9nc2F2ZS44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZmJlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2xvZ3NhdmUuOC5pbgpAQCAtMCwwICsxLDYxIEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAyMDAzIGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiIAorLlRIIExPR1NBVkUgOCAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQorbG9nc2F2ZSBcLSBzYXZlIHRoZSBvdXRwdXQgb2YgYSBjb21tYW5kIGluIGEgbG9nZmlsZQorLlNIIFNZTk9QU0lTCisuQiBsb2dzYXZlCitbCisuQiBcLWFzdgorXQorLkkgbG9nZmlsZSBjbWRfcHJvZyBbIC4uLiBdCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgbG9nc2F2ZQorcHJvZ3JhbSB3aWxsIGV4ZWN1dGUKKy5JIGNtZF9wcm9nIAord2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50KHMpLCBhbmQgc2F2ZSBhIGNvcHkgb2YgaXRzIG91dHB1dCB0bworLklSIGxvZ2ZpbGUgLgorSWYgdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5IGZvcgorLkkgbG9nZmlsZQorZG9lcyBub3QgZXhpc3QsIAorLkIgbG9nc2F2ZQord2lsbCBhY2N1bXVsYXRlIHRoZSBvdXRwdXQgaW4gbWVtb3J5IHVudGlsIGl0IGNhbiBiZSB3cml0dGVuIG91dC4KK0EgY29weSBvZiB0aGUgb3V0cHV0IHdpbGwgYWxzbyBiZSB3cml0dGVuIHRvIHN0YW5kYXJkIG91dHB1dC4KKy5QUAorSWYgCisuSSBjbWRfcHJvZworaXMgYSBzaW5nbGUgaHlwaGVuICgnLScpLCB0aGVuIGluc3RlYWQgb2YgZXhlY3V0aW5nIGEgcHJvZ3JhbSwKKy5CIGxvZ3NhdmUKK3dpbGwgdGFrZSBpdHMgaW5wdXQgZnJvbSBzdGFuZGFyZCBpbnB1dCBhbmQgc2F2ZSBpdCBpbgorLkkgbG9nZmlsZQorLlBQCisuQiBsb2dzYXZlCitpcyB1c2VmdWwgZm9yIHNhdmluZyB0aGUgb3V0cHV0IG9mIGluaXRpYWwgYm9vdCBzY3JpcHRzIAordW50aWwgdGhlIC92YXIgcGFydGl0aW9uIGlzIG1vdW50ZWQsIHNvIHRoZSBvdXRwdXQgY2FuIGJlIHdyaXR0ZW4gdG8gCisvdmFyL2xvZy4KKy5TSCBPUFRJT05TCisuVFAKKy5CIFwtYQorVGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUgb3V0cHV0IHRvIGJlIGFwcGVuZGVkIHRvIAorLklSIGxvZ2ZpbGUgLAoraW5zdGVhZCBvZiByZXBsYWNpbmcgaXRzIGN1cnJlbnQgY29udGVudHMuCisuVFAKKy5CIFwtcworVGhpcyBvcHRpb24gd2lsbCBjYXVzZSAKKy5CIGxvZ3NhdmUKK3RvIHNraXAgd3JpdGluZyB0byB0aGUgbG9nIGZpbGUgdGV4dCB3aGljaCBpcyBicmFja2V0ZWQgd2l0aCBhIGNvbnRyb2wtQSAKKyhBU0NJSSAwMDEgb3IgU3RhcnQgb2YgSGVhZGVyKSBhbmQgY29udHJvbC1CIChBU0NJSSAwMDIgb3IgU3RhcnQgb2YKK1RleHQpLiAgVGhpcyBhbGxvd3MgcHJvZ3Jlc3MgYmFyIGluZm9ybWF0aW9uIHRvIGJlIHZpc2libGUgdG8gdGhlIHVzZXIKK29uIHRoZSBjb25zb2xlLCB3aGlsZSBub3QgYmVpbmcgd3JpdHRlbiB0byB0aGUgbG9nIGZpbGUuCisuVFAKKy5CIFwtdgorVGhpcyBvcHRpb24gd2lsbCBtYWtlCisuQiBsb2dzYXZlCit0byBiZSBtb3JlIHZlcmJvc2UgaW4gaXRzIG91dHB1dCB0byB0aGUgdXNlci4KKy5TSCBBVVRIT1IKK1RoZW9kb3JlIFRzJ28gKHR5dHNvQG1pdC5lZHUpCisuU0ggU0VFIEFMU08KKy5CUiBmc2NrICg4KQpkaWZmIC0tZ2l0IGEvbWlzYy9sb2dzYXZlLmMgYi9taXNjL2xvZ3NhdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmNjNDJhCi0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9sb2dzYXZlLmMKQEAgLTAsMCArMSwzMzQgQEAKKy8qCisgKiBsb2dzYXZlLmMgLS0tIEEgcHJvZ3JhbSB3aGljaCBzYXZlcyB0aGUgb3V0cHV0IG9mIGEgcHJvZ3JhbSB1bnRpbAorICoJL3Zhci9sb2cgaXMgbW91bnRlZC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAgLyogZm9yIGluY2x1c2lvbiBvZiBzYV9oYW5kbGVyIGluIFNvbGFyaXMgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmZGVmIEhBVkVfU0lHTkFMX0gKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gY2hhciAqb3B0YXJnOworZXh0ZXJuIGludCBvcHRpbmQ7CisjZW5kaWYKKworc3RhdGljIGludAlvdXRmZCA9IC0xOworc3RhdGljIGludAlvdXRidWZzaXplID0gMDsKK3N0YXRpYyB2b2lkCSpvdXRidWYgPSAwOworc3RhdGljIGludAl2ZXJib3NlID0gMDsKK3N0YXRpYyBpbnQJZG9fc2tpcCA9IDA7CitzdGF0aWMgaW50CXNraXBfbW9kZSA9IDA7CitzdGF0aWMgcGlkX3QJY2hpbGRfcGlkID0gLTE7CisKK3N0YXRpYyB2b2lkIHVzYWdlKGNoYXIgKnByb2duYW1lKQoreworCXByaW50ZigiVXNhZ2U6ICVzIFstYXN2XSBsb2dmaWxlIHByb2dyYW1cbiIsIHByb2duYW1lKTsKKwlleGl0KDEpOworfQorCisjZGVmaW5lIFNFTkRfTE9HCTB4MDEKKyNkZWZpbmUgU0VORF9DT05TT0xFCTB4MDIKKyNkZWZpbmUgU0VORF9CT1RICTB4MDMKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGlmIHdyaXRlIHJldHVybnMgYQorICogcGFydGlhbCB3cml0ZSwgb3IgYW4gRUdBSU4vRUlOVFIgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfYWxsKGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3NpemVfdCByZXQ7CisJaW50IGMgPSAwOworCisJd2hpbGUgKGNvdW50ID4gMCkgeworCQlyZXQgPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAoKGVycm5vID09IEVBR0FJTikgfHwgKGVycm5vID09IEVJTlRSKSkKKwkJCQljb250aW51ZTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQljb3VudCAtPSByZXQ7CisJCWJ1ZiArPSByZXQ7CisJCWMgKz0gcmV0OworCX0KKwlyZXR1cm4gYzsKK30KKworc3RhdGljIHZvaWQgc2VuZF9vdXRwdXQoY29uc3QgY2hhciAqYnVmZmVyLCBpbnQgYywgaW50IGZsYWcpCit7CisJY29uc3QgY2hhcgkqY3A7CisJY2hhcgkJKm47CisJaW50CQljbnQsIGQsIGRlbDsKKworCWlmIChjID09IDApCisJCWMgPSBzdHJsZW4oYnVmZmVyKTsKKworCWlmIChmbGFnICYgU0VORF9DT05TT0xFKSB7CisJCWNudCA9IGM7CisJCWNwID0gYnVmZmVyOworCQl3aGlsZSAoY250KSB7CisJCQlkZWwgPSAwOworCQkJZm9yIChkPTA7IGQgPCBjbnQ7IGQrKykgeworCQkJCWlmIChza2lwX21vZGUgJiYKKwkJCQkgICAgKGNwW2RdID09ICdcMDAxJyB8fCBjcFtkXSA9PSAnXDAwMicpKSB7CisJCQkJCWRlbCA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCXdyaXRlX2FsbCgxLCBjcCwgZCk7CisJCQlpZiAoZGVsKQorCQkJCWQrKzsKKwkJCWNudCAtPSBkOworCQkJY3AgKz0gZDsKKwkJfQorCX0KKwlpZiAoIShmbGFnICYgU0VORF9MT0cpKQorCQlyZXR1cm47CisJaWYgKG91dGZkID4gMCkKKwkJd3JpdGVfYWxsKG91dGZkLCBidWZmZXIsIGMpOworCWVsc2UgeworCQluID0gcmVhbGxvYyhvdXRidWYsIG91dGJ1ZnNpemUgKyBjKTsKKwkJaWYgKG4pIHsKKwkJCW91dGJ1ZiA9IG47CisJCQltZW1jcHkoKChjaGFyICopb3V0YnVmKStvdXRidWZzaXplLCBidWZmZXIsIGMpOworCQkJb3V0YnVmc2l6ZSArPSBjOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGRvX3JlYWQoaW50IGZkKQoreworCWludAljOworCWNoYXIJYnVmZmVyWzQwOTZdLCAqY3AsICpzZXA7CisKKwljID0gcmVhZChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKS0xKTsKKwlpZiAoYyA8PSAwKQorCQlyZXR1cm4gYzsKKwlpZiAoZG9fc2tpcCkgeworCQlzZW5kX291dHB1dChidWZmZXIsIGMsIFNFTkRfQ09OU09MRSk7CisJCWJ1ZmZlcltjXSA9IDA7CisJCWNwID0gYnVmZmVyOworCQl3aGlsZSAoKmNwKSB7CisJCQlpZiAoc2tpcF9tb2RlKSB7CisJCQkJY3AgPSBzdHJjaHIoY3AsICdcMDAyJyk7CisJCQkJaWYgKCFjcCkKKwkJCQkJcmV0dXJuIDA7CisJCQkJY3ArKzsKKwkJCQlza2lwX21vZGUgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc2VwID0gc3RyY2hyKGNwLCAnXDAwMScpOworCQkJaWYgKHNlcCkKKwkJCQkqc2VwID0gMDsKKwkJCXNlbmRfb3V0cHV0KGNwLCAwLCBTRU5EX0xPRyk7CisJCQlpZiAoc2VwKSB7CisJCQkJY3AgPSBzZXAgKyAxOworCQkJCXNraXBfbW9kZSA9IDE7CisJCQl9IGVsc2UKKwkJCQlicmVhazsKKwkJfQorCX0gZWxzZQorCQlzZW5kX291dHB1dChidWZmZXIsIGMsIFNFTkRfQk9USCk7CisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyB2b2lkIHNpZ25hbF90ZXJtKGludCBzaWcpCit7CisJaWYgKGNoaWxkX3BpZCA+IDApCisJCWtpbGwoY2hpbGRfcGlkLCBzaWcpOworfQorCitzdGF0aWMgaW50IHJ1bl9wcm9ncmFtKGNoYXIgKiphcmd2KQoreworCWludAlmZHNbMl07CisJaW50CXN0YXR1cywgcmMsIHBpZDsKKwljaGFyCWJ1ZmZlcls4MF07CisjaWZkZWYgSEFWRV9TSUdOQUxfSAorCXN0cnVjdCBzaWdhY3Rpb24Jc2E7CisjZW5kaWYKKworCWlmIChwaXBlKGZkcykgPCAwKSB7CisJCXBlcnJvcigicGlwZSIpOworCQlleGl0KDEpOworCX0KKworI2lmZGVmIEhBVkVfU0lHTkFMX0gKKwltZW1zZXQoJnNhLCAwLCBzaXplb2Yoc3RydWN0IHNpZ2FjdGlvbikpOworCXNhLnNhX2hhbmRsZXIgPSBzaWduYWxfdGVybTsKKwlzaWdhY3Rpb24oU0lHSU5ULCAmc2EsIDApOworCXNpZ2FjdGlvbihTSUdURVJNLCAmc2EsIDApOworI2lmZGVmIFNBX1JFU1RBUlQKKwlzYS5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7CisjZW5kaWYKKyNlbmRpZgorCisJcGlkID0gZm9yaygpOworCWlmIChwaWQgPCAwKSB7CisJCXBlcnJvcigidmZvcmsiKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHBpZCA9PSAwKSB7CisJCWR1cDIoZmRzWzFdLDEpOwkJLyogZmRzWzFdIHJlcGxhY2VzIHN0ZG91dCAqLworCQlkdXAyKGZkc1sxXSwyKTsgIAkvKiBmZHNbMV0gcmVwbGFjZXMgc3RkZXJyICovCisJCWNsb3NlKGZkc1swXSk7CS8qIGRvbid0IG5lZWQgdGhpcyBoZXJlICovCisJCWNsb3NlKGZkc1sxXSk7CisKKwkJZXhlY3ZwKGFyZ3ZbMF0sIGFyZ3YpOworCQlwZXJyb3IoYXJndlswXSk7CisJCWV4aXQoMSk7CisJfQorCWNoaWxkX3BpZCA9IHBpZDsKKwljbG9zZShmZHNbMV0pOworCisJd2hpbGUgKCEod2FpdHBpZChwaWQsICZzdGF0dXMsIFdOT0hBTkcgKSkpIHsKKwkJZG9fcmVhZChmZHNbMF0pOworCX0KKwljaGlsZF9waWQgPSAtMTsKKwlkb19yZWFkKGZkc1swXSk7CisJY2xvc2UoZmRzWzBdKTsKKworCWlmICggV0lGRVhJVEVEKHN0YXR1cykgKSB7CisJCXJjID0gV0VYSVRTVEFUVVMoc3RhdHVzKTsKKwkJaWYgKHJjKSB7CisJCQlzZW5kX291dHB1dChhcmd2WzBdLCAwLCBTRU5EX0JPVEgpOworCQkJc3ByaW50ZihidWZmZXIsICIgZXhpdGVkIHdpdGggc3RhdHVzIGNvZGUgJWRcbiIsIHJjKTsKKwkJCXNlbmRfb3V0cHV0KGJ1ZmZlciwgMCwgU0VORF9CT1RIKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChXSUZTSUdOQUxFRChzdGF0dXMpKSB7CisJCQlzZW5kX291dHB1dChhcmd2WzBdLCAwLCBTRU5EX0JPVEgpOworCQkJc3ByaW50ZihidWZmZXIsICJkaWVkIHdpdGggc2lnbmFsICVkXG4iLAorCQkJCVdURVJNU0lHKHN0YXR1cykpOworCQkJc2VuZF9vdXRwdXQoYnVmZmVyLCAwLCBTRU5EX0JPVEgpOworCQkJcmMgPSAxOworCQl9CisJCXJjID0gMDsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGNvcHlfZnJvbV9zdGRpbih2b2lkKQoreworCWludAljLCBiYWRfcmVhZCA9IDA7CisKKwl3aGlsZSAoMSkgeworCQljID0gZG9fcmVhZCgwKTsKKwkJaWYgKChjID09IDAgKSB8fAorCQkgICAgKChjIDwgMCkgJiYgKChlcnJubyA9PSBFQUdBSU4pIHx8IChlcnJubyA9PSBFSU5UUikpKSkgeworCQkJaWYgKGJhZF9yZWFkKysgPiAzKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgPCAwKSB7CisJCQlwZXJyb3IoInJlYWQiKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJYmFkX3JlYWQgPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKworCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQJYywgcGlkLCByYzsKKwljaGFyCSpvdXRmbiwgKipjcHA7CisJaW50CW9wZW5mbGFncyA9IE9fQ1JFQVR8T19XUk9OTFl8T19UUlVOQzsKKwlpbnQJc2VuZF9mbGFnID0gU0VORF9MT0c7CisJaW50CWRvX3N0ZGluOworCXRpbWVfdAl0OworCisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICIrYXN2IikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYSc6CisJCQlvcGVuZmxhZ3MgJj0gfk9fVFJVTkM7CisJCQlvcGVuZmxhZ3MgfD0gT19BUFBFTkQ7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlkb19za2lwID0gMTsKKwkJCWJyZWFrOworCQljYXNlICd2JzoKKwkJCXZlcmJvc2UrKzsKKwkJCXNlbmRfZmxhZyB8PSBTRU5EX0NPTlNPTEU7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAob3B0aW5kID09IGFyZ2MgfHwgb3B0aW5kKzEgPT0gYXJnYykKKwkJdXNhZ2UoYXJndlswXSk7CisJb3V0Zm4gPSBhcmd2W29wdGluZF07CisJb3B0aW5kKys7CisJYXJndiArPSBvcHRpbmQ7CisJYXJnYyAtPSBvcHRpbmQ7CisKKwlvdXRmZCA9IG9wZW4ob3V0Zm4sIG9wZW5mbGFncywgMDY0NCk7CisJZG9fc3RkaW4gPSAhc3RyY21wKGFyZ3ZbMF0sICItIik7CisKKwlzZW5kX291dHB1dCgiTG9nIG9mICIsIDAsIHNlbmRfZmxhZyk7CisJaWYgKGRvX3N0ZGluKQorCQlzZW5kX291dHB1dCgic3RkaW4iLCAwLCBzZW5kX2ZsYWcpOworCWVsc2UgeworCQlmb3IgKGNwcCA9IGFyZ3Y7ICpjcHA7IGNwcCsrKSB7CisJCQlzZW5kX291dHB1dCgqY3BwLCAwLCBzZW5kX2ZsYWcpOworCQkJc2VuZF9vdXRwdXQoIiAiLCAwLCBzZW5kX2ZsYWcpOworCQl9CisJfQorCXNlbmRfb3V0cHV0KCJcbiIsIDAsIHNlbmRfZmxhZyk7CisJdCA9IHRpbWUoMCk7CisJc2VuZF9vdXRwdXQoY3RpbWUoJnQpLCAwLCBzZW5kX2ZsYWcpOworCXNlbmRfb3V0cHV0KCJcbiIsIDAsIHNlbmRfZmxhZyk7CisKKwlpZiAoZG9fc3RkaW4pCisJCXJjID0gY29weV9mcm9tX3N0ZGluKCk7CisJZWxzZQorCQlyYyA9IHJ1bl9wcm9ncmFtKGFyZ3YpOworCisJc2VuZF9vdXRwdXQoIlxuIiwgMCwgc2VuZF9mbGFnKTsKKwl0ID0gdGltZSgwKTsKKwlzZW5kX291dHB1dChjdGltZSgmdCksIDAsIHNlbmRfZmxhZyk7CisJc2VuZF9vdXRwdXQoIi0tLS0tLS0tLS0tLS0tLS1cbiIsIDAsIHNlbmRfZmxhZyk7CisKKwlpZiAob3V0YnVmKSB7CisJCXBpZCA9IGZvcmsoKTsKKwkJaWYgKHBpZCA8IDApIHsKKwkJCXBlcnJvcigiZm9yayIpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAocGlkKSB7CisJCQlpZiAodmVyYm9zZSkKKwkJCQlwcmludGYoIkJhY2tncm91bmRpbmcgdG8gc2F2ZSAlcyBsYXRlclxuIiwKKwkJCQkgICAgICAgb3V0Zm4pOworCQkJZXhpdChyYyk7CisJCX0KKwkJc2V0c2lkKCk7CS8qIFRvIGF2b2lkIGdldHRpbmcga2lsbGVkIGJ5IGluaXQgKi8KKwkJd2hpbGUgKG91dGZkIDwgMCkgeworCQkJb3V0ZmQgPSBvcGVuKG91dGZuLCBvcGVuZmxhZ3MsIDA2NDQpOworCQkJc2xlZXAoMSk7CisJCX0KKwkJd3JpdGVfYWxsKG91dGZkLCBvdXRidWYsIG91dGJ1ZnNpemUpOworCQlmcmVlKG91dGJ1Zik7CisJfQorCWlmIChvdXRmZCA+PSAwKQorCQljbG9zZShvdXRmZCk7CisKKwlleGl0KHJjKTsKK30KZGlmZiAtLWdpdCBhL21pc2MvbHNhdHRyLjEuaW4gYi9taXNjL2xzYXR0ci4xLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3OThhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2xzYXR0ci4xLmluCkBAIC0wLDAgKzEsNDUgQEAKKy5cIiAtKi0gbnJvZmYgLSotCisuVEggTFNBVFRSIDEgIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2xzYXR0ciBcLSBsaXN0IGZpbGUgYXR0cmlidXRlcyBvbiBhIExpbnV4IHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbQorLlNIIFNZTk9QU0lTCisuQiBsc2F0dHIKK1sKKy5CIFwtUlZhZHYKK10KK1sKKy5JIGZpbGVzLi4uCitdCisuU0ggREVTQ1JJUFRJT04KKy5CIGxzYXR0cgorbGlzdHMgdGhlIGZpbGUgYXR0cmlidXRlcyBvbiBhIHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbS4gIFNlZQorLkJSIGNoYXR0ciAoMSkKK2ZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBhdHRyaWJ1dGVzIGFuZCB3aGF0IHRoZXkgbWVhbi4KKy5TSCBPUFRJT05TCisuVFAKKy5CIFwtUgorUmVjdXJzaXZlbHkgbGlzdCBhdHRyaWJ1dGVzIG9mIGRpcmVjdG9yaWVzIGFuZCB0aGVpciBjb250ZW50cy4KKy5UUAorLkIgXC1WCitEaXNwbGF5IHRoZSBwcm9ncmFtIHZlcnNpb24uCisuVFAKKy5CIFwtYQorTGlzdCBhbGwgZmlsZXMgaW4gZGlyZWN0b3JpZXMsIGluY2x1ZGluZyBmaWxlcyB0aGF0IHN0YXJ0IHdpdGggYC4nLgorLlRQCisuQiBcLWQKK0xpc3QgZGlyZWN0b3JpZXMgbGlrZSBvdGhlciBmaWxlcywgcmF0aGVyIHRoYW4gbGlzdGluZyB0aGVpciBjb250ZW50cy4KKy5UUAorLkIgXC12CitMaXN0IHRoZSBmaWxlJ3MgdmVyc2lvbi9nZW5lcmF0aW9uIG51bWJlci4KKy5TSCBBVVRIT1IKKy5CIGxzYXR0cgord2FzIHdyaXR0ZW4gYnkgUmVteSBDYXJkIDxSZW15LkNhcmRAbGludXgub3JnPi4gIEl0IGlzIGN1cnJlbnRseSBiZWluZworbWFpbnRhaW5lZCBieSBUaGVvZG9yZSBUcydvIDx0eXRzb0BhbHVtLm1pdC5lZHU+LgorLlNIIEJVR1MKK1RoZXJlIGFyZSBub25lIDotKS4KKy5TSCBBVkFJTEFCSUxJVFkKKy5CIGxzYXR0cgoraXMgcGFydCBvZiB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgYW5kIGlzIGF2YWlsYWJsZSBmcm9tCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC4KKy5TSCBTRUUgQUxTTworLkJSIGNoYXR0ciAoMSkKZGlmZiAtLWdpdCBhL21pc2MvbHNhdHRyLmMgYi9taXNjL2xzYXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZTU5NjkKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL2xzYXR0ci5jCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogbHNhdHRyLmMJCS0gTGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYW4gZXh0MiBmaWxlIHN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiBUaGlzIGZpbGUgY2FuIGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UKKyAqLworCisvKgorICogSGlzdG9yeToKKyAqIDkzLzEwLzMwCS0gQ3JlYXRpb24KKyAqIDkzLzExLzEzCS0gUmVwbGFjZSBzdGF0KCkgY2FsbHMgYnkgbHN0YXQoKSB0byBhdm9pZCBsb29wcworICogOTQvMDIvMjcJLSBJbnRlZ3JhdGVkIGluIFRlZCdzIGRpc3RyaWJ1dGlvbgorICogOTgvMTIvMjkJLSBEaXNwbGF5IHZlcnNpb24gaW5mbyBvbmx5IHdoZW4gLVYgc3BlY2lmaWVkIChHIE0gU2lwZSkKKyAqLworCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gaW50IG9wdGluZDsKK2V4dGVybiBjaGFyICpvcHRhcmc7CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyNpbmNsdWRlICJlMnAvZTJwLmgiCisKKyNpbmNsdWRlICIuLi92ZXJzaW9uLmgiCisjaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgRVhUMkZTX0FUVFIoeCkgX19hdHRyaWJ1dGVfXyh4KQorI2Vsc2UKKyNkZWZpbmUgRVhUMkZTX0FUVFIoeCkKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqIHByb2dyYW1fbmFtZSA9ICJsc2F0dHIiOworCitzdGF0aWMgaW50IGFsbDsKK3N0YXRpYyBpbnQgZGlyc19vcHQ7CitzdGF0aWMgdW5zaWduZWQgcGZfb3B0aW9uczsKK3N0YXRpYyBpbnQgcmVjdXJzaXZlOworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCBnZW5lcmF0aW9uX29wdDsKKworI2lmZGVmIF9MRlM2NF9MQVJHRUZJTEUKKyNkZWZpbmUgTFNUQVQJCWxzdGF0NjQKKyNkZWZpbmUgU1RSVUNUX1NUQVQJc3RydWN0IHN0YXQ2NAorI2Vsc2UKKyNkZWZpbmUgTFNUQVQJCWxzdGF0CisjZGVmaW5lIFNUUlVDVF9TVEFUCXN0cnVjdCBzdGF0CisjZW5kaWYKKworc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgXygiVXNhZ2U6ICVzIFstUlZhZGx2XSBbZmlsZXMuLi5dXG4iKSwgcHJvZ3JhbV9uYW1lKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgaW50IGxpc3RfYXR0cmlidXRlcyAoY29uc3QgY2hhciAqIG5hbWUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGdlbmVyYXRpb247CisKKwlpZiAoZmdldGZsYWdzIChuYW1lLCAmZmxhZ3MpID09IC0xKSB7CisJCWNvbV9lcnIgKHByb2dyYW1fbmFtZSwgZXJybm8sIF8oIldoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiKSwKKwkJCSBuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoZ2VuZXJhdGlvbl9vcHQpIHsKKwkJaWYgKGZnZXR2ZXJzaW9uIChuYW1lLCAmZ2VuZXJhdGlvbikgPT0gLTEpIHsKKwkJCWNvbV9lcnIgKHByb2dyYW1fbmFtZSwgZXJybm8sCisJCQkJIF8oIldoaWxlIHJlYWRpbmcgdmVyc2lvbiBvbiAlcyIpLAorCQkJCSBuYW1lKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlwcmludGYgKCIlNWx1ICIsIGdlbmVyYXRpb24pOworCX0KKwlpZiAocGZfb3B0aW9ucyAmIFBGT1BUX0xPTkcpIHsKKwkJcHJpbnRmKCIlLTI4cyAiLCBuYW1lKTsKKwkJcHJpbnRfZmxhZ3Moc3Rkb3V0LCBmbGFncywgcGZfb3B0aW9ucyk7CisJCWZwdXRjKCdcbicsIHN0ZG91dCk7CisJfSBlbHNlIHsKKwkJcHJpbnRfZmxhZ3Moc3Rkb3V0LCBmbGFncywgcGZfb3B0aW9ucyk7CisJCXByaW50ZigiICVzXG4iLCBuYW1lKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbHNhdHRyX2Rpcl9wcm9jIChjb25zdCBjaGFyICosIHN0cnVjdCBkaXJlbnQgKiwgdm9pZCAqKTsKKworc3RhdGljIGludCBsc2F0dHJfYXJncyAoY29uc3QgY2hhciAqIG5hbWUpCit7CisJU1RSVUNUX1NUQVQJc3Q7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoTFNUQVQgKG5hbWUsICZzdCkgPT0gLTEpIHsKKwkJY29tX2VyciAocHJvZ3JhbV9uYW1lLCBlcnJubywgXygid2hpbGUgdHJ5aW5nIHRvIHN0YXQgJXMiKSwKKwkJCSBuYW1lKTsKKwkJcmV0dmFsID0gLTE7CisJfSBlbHNlIHsKKwkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkgJiYgIWRpcnNfb3B0KQorCQkJcmV0dmFsID0gaXRlcmF0ZV9vbl9kaXIgKG5hbWUsIGxzYXR0cl9kaXJfcHJvYywgTlVMTCk7CisJCWVsc2UKKwkJCXJldHZhbCA9IGxpc3RfYXR0cmlidXRlcyAobmFtZSk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgbHNhdHRyX2Rpcl9wcm9jIChjb25zdCBjaGFyICogZGlyX25hbWUsIHN0cnVjdCBkaXJlbnQgKiBkZSwKKwkJCSAgICB2b2lkICogcHJpdmF0ZSBFWFQyRlNfQVRUUigodW51c2VkKSkpCit7CisJU1RSVUNUX1NUQVQJc3Q7CisJY2hhciAqcGF0aDsKKwlpbnQgZGlyX2xlbiA9IHN0cmxlbihkaXJfbmFtZSk7CisKKwlwYXRoID0gbWFsbG9jKGRpcl9sZW4gKyBzdHJsZW4gKGRlLT5kX25hbWUpICsgMik7CisKKwlpZiAoZGlyX2xlbiAmJiBkaXJfbmFtZVtkaXJfbGVuLTFdID09ICcvJykKKwkJc3ByaW50ZiAocGF0aCwgIiVzJXMiLCBkaXJfbmFtZSwgZGUtPmRfbmFtZSk7CisJZWxzZQorCQlzcHJpbnRmIChwYXRoLCAiJXMvJXMiLCBkaXJfbmFtZSwgZGUtPmRfbmFtZSk7CisJaWYgKExTVEFUIChwYXRoLCAmc3QpID09IC0xKQorCQlwZXJyb3IgKHBhdGgpOworCWVsc2UgeworCQlpZiAoZGUtPmRfbmFtZVswXSAhPSAnLicgfHwgYWxsKSB7CisJCQlsaXN0X2F0dHJpYnV0ZXMgKHBhdGgpOworCQkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkgJiYgcmVjdXJzaXZlICYmCisJCQkgICAgc3RyY21wKGRlLT5kX25hbWUsICIuIikgJiYKKwkJCSAgICBzdHJjbXAoZGUtPmRfbmFtZSwgIi4uIikpIHsKKwkJCQlwcmludGYgKCJcbiVzOlxuIiwgcGF0aCk7CisJCQkJaXRlcmF0ZV9vbl9kaXIgKHBhdGgsIGxzYXR0cl9kaXJfcHJvYywgTlVMTCk7CisJCQkJcHJpbnRmICgiXG4iKTsKKwkJCX0KKwkJfQorCX0KKwlmcmVlKHBhdGgpOworCXJldHVybiAwOworfQorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiogYXJndikKK3sKKwlpbnQgYzsKKwlpbnQgaTsKKwlpbnQgZXJyLCByZXR2YWwgPSAwOworCisjaWZkZWYgRU5BQkxFX05MUworCXNldGxvY2FsZShMQ19NRVNTQUdFUywgIiIpOworCXNldGxvY2FsZShMQ19DVFlQRSwgIiIpOworCWJpbmR0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSwgTE9DQUxFRElSKTsKKwl0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSk7CisJc2V0X2NvbV9lcnJfZ2V0dGV4dChnZXR0ZXh0KTsKKyNlbmRpZgorCWlmIChhcmdjICYmICphcmd2KQorCQlwcm9ncmFtX25hbWUgPSAqYXJndjsKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJSVmFkbHYiKSkgIT0gRU9GKQorCQlzd2l0Y2ggKGMpCisJCXsKKwkJCWNhc2UgJ1InOgorCQkJCXJlY3Vyc2l2ZSA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlICdWJzoKKwkJCQl2ZXJib3NlID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2EnOgorCQkJCWFsbCA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlICdkJzoKKwkJCQlkaXJzX29wdCA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlICdsJzoKKwkJCQlwZl9vcHRpb25zID0gUEZPUFRfTE9ORzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3YnOgorCQkJCWdlbmVyYXRpb25fb3B0ID0gMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdXNhZ2UoKTsKKwkJfQorCisJaWYgKHZlcmJvc2UpCisJCWZwcmludGYgKHN0ZGVyciwgImxzYXR0ciAlcyAoJXMpXG4iLAorCQkJIEUyRlNQUk9HU19WRVJTSU9OLCBFMkZTUFJPR1NfREFURSk7CisJaWYgKG9wdGluZCA+IGFyZ2MgLSAxKSB7CisJCWlmIChsc2F0dHJfYXJncyAoIi4iKSA9PSAtMSkKKwkJCXJldHZhbCA9IDE7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gb3B0aW5kOyBpIDwgYXJnYzsgaSsrKSB7CisJCQllcnIgPSBsc2F0dHJfYXJncyAoYXJndltpXSk7CisJCQlpZiAoZXJyKQorCQkJCXJldHZhbCA9IDE7CisJCX0KKwl9CisJZXhpdChyZXR2YWwpOworfQpkaWZmIC0tZ2l0IGEvbWlzYy9ta19odWdlZmlsZXMuYyBiL21pc2MvbWtfaHVnZWZpbGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY1NmE3OQotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvbWtfaHVnZWZpbGVzLmMKQEAgLTAsMCArMSw1ODcgQEAKKy8qCisgKiBta19odWdlZmlsZXMuYyAtLSBjcmVhdGUgaHVnZSBmaWxlcworICovCisKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAgLyogZm9yIGluY2x1c2lvbiBvZiBQQVRIX01BWCBpbiBTb2xhcmlzICovCisjZGVmaW5lIF9CU0RfU09VUkNFCSAgLyogZm9yIG1ha2VkZXYoKSBhbmQgbWFqb3IoKSAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBfX2xpbnV4X18KKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGJsa2lkL2Jsa2lkLmg+CisKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyZnNQLmgiCisjaW5jbHVkZSAiZXQvY29tX2Vyci5oIgorI2luY2x1ZGUgInV1aWQvdXVpZC5oIgorI2luY2x1ZGUgImUycC9lMnAuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgInByb2ZpbGUuaCIKKyNpbmNsdWRlICJwcm9mX2Vyci5oIgorI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKyNpbmNsdWRlICJta2UyZnMuaCIKKworc3RhdGljIGludCB1aWQ7CitzdGF0aWMgaW50IGdpZDsKK3N0YXRpYyBibGs2NF90IG51bV9ibG9ja3M7CitzdGF0aWMgYmxrNjRfdCBudW1fc2xhY2s7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBudW1fZmlsZXM7CitzdGF0aWMgYmxrNjRfdCBnb2FsOworc3RhdGljIGNoYXIgKmZuX3ByZWZpeDsKK3N0YXRpYyBpbnQgaWR4X2RpZ2l0czsKK3N0YXRpYyBjaGFyICpmbl9idWY7CitzdGF0aWMgY2hhciAqZm5fbnVtYnVmOworaW50IHplcm9faHVnZWZpbGUgPSAxOworCisjZGVmaW5lIFNZU0ZTX1BBVEhfTEVOIDI1NgordHlwZWRlZiBjaGFyIHN5c2ZzX3BhdGhfdFtTWVNGU19QQVRIX0xFTl07CisKKyNpZm5kZWYgSEFWRV9TTlBSSU5URgorLyoKKyAqIFdlIGFyZSB2ZXJ5IGNhcmVmdWwgdG8gYXZvaWQgbmVlZGluZyB0byB3b3JyeSBhYm91dCBidWZmZXIKKyAqIG92ZXJmbG93cywgc28gd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gdXNlIHNucHJpbnRmKCkgZXhjZXB0IGFzIGFuCisgKiBhZGRpdGlvbmFsIHNhZmV0eSBjaGVjay4gIFNvIGlmIHNucHJpbnRmKCkgaXMgbm90IHByZXNlbnQsIGl0J3MKKyAqIHNhZmUgdG8gZmFsbCBiYWNrIHRvIHZzcHJpbnRmKCkuICBUaGlzIHByb3ZpZGVzIHBvcnRhYmlsaXR5IHNpbmNlCisgKiB2c3ByaW50ZigpIGlzIGd1YXJhbnRlZWQgYnkgQzg5LCB3aGlsZSBzbnByaW50ZigpIGlzIG9ubHkKKyAqIGd1YXJhbnRlZWQgYnkgQzk5IC0tLSB3aGljaCBmb3IgZXhhbXBsZSwgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8KKyAqIGhhcyAqc3RpbGwqIG5vdCBib3RoZXJlZCB0byBpbXBsZW1lbnQuICA6LS8gIChOb3QgdGhhdCBJIGV4cGVjdAorICogbWtlMmZzIHRvIGJlIHBvcnRlZCB0byBNUyBWaXN1YWwgU3R1ZGlvIGFueSB0aW1lIHNvb24sIGJ1dAorICogbGliZXh0MmZzICpkb2VzKiBnZXQgYnVpbHQgb24gTWljcm9zb2Z0IHBsYXRmb3JtcywgYW5kIHdlIG1pZ2h0CisgKiB3YW50IHRvIG1vdmUgdGhpcyBpbnRvIGxpYmV4dDJmcyBzb21lIGRheS4pCisgKi8KK3N0YXRpYyBpbnQgbXlfc25wcmludGYoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdAlhcDsKKwlpbnQgcmV0OworCisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJcmV0ID0gdnNwcmludGYoc3RyLCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgc25wcmludGYgbXlfc25wcmludGYKKyNlbmRpZgorCisvKgorICogRmFsbCBiYWNrIHRvIExpbnV4J3MgZGVmaW5pdGlvbnMgb2YgbWFrZWRldiBhbmQgbWFqb3IgYXJlIG5lZWRlZC4KKyAqIFRoZSBzZWFyY2hfc3lzZnNfYmxvY2soKSBmdW5jdGlvbiBpcyBoaWdobHkgdW5saWtlbHkgdG8gd29yayBvbgorICogbm9uLUxpbnV4IHN5c3RlbXMgYW55d2F5LgorICovCisjaWZuZGVmIG1ha2VkZXYKKyNkZWZpbmUgbWFrZWRldihtYWosIG1pbikgKCgobWFqKSA8PCA4KSArIChtaW4pKQorI2VuZGlmCisKK3N0YXRpYyBjaGFyICpzZWFyY2hfc3lzZnNfYmxvY2soZGV2X3QgZGV2bm8sIHN5c2ZzX3BhdGhfdCByZXRfcGF0aCkKK3sKKwlzdHJ1Y3QgZGlyZW50CSpkZSwgKnBfZGU7CisJRElSCQkqZGlyID0gTlVMTCwgKnBfZGlyID0gTlVMTDsKKwlGSUxFCQkqZjsKKwlzeXNmc19wYXRoX3QJcGF0aCwgcF9wYXRoOworCXVuc2lnbmVkIGludAltYWpvciwgbWlub3I7CisJY2hhcgkJKnJldCA9IHJldF9wYXRoOworCisJcmV0X3BhdGhbMF0gPSAwOworCWlmICgoZGlyID0gb3BlbmRpcigiL3N5cy9ibG9jayIpKSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCWlmICghc3RyY21wKGRlLT5kX25hbWUsICIuIikgfHwgIXN0cmNtcChkZS0+ZF9uYW1lLCAiLi4iKSB8fAorCQkgICAgc3RybGVuKGRlLT5kX25hbWUpID4gc2l6ZW9mKHBhdGgpLTMyKQorCQkJY29udGludWU7CisJCXNucHJpbnRmKHBhdGgsIFNZU0ZTX1BBVEhfTEVOLAorCQkJICIvc3lzL2Jsb2NrLyVzL2RldiIsIGRlLT5kX25hbWUpOworCQlmID0gZm9wZW4ocGF0aCwgInIiKTsKKwkJaWYgKGYgJiYKKwkJICAgIChmc2NhbmYoZiwgIiV1OiV1IiwgJm1ham9yLCAmbWlub3IpID09IDIpKSB7CisJCQlmY2xvc2UoZik7IGYgPSBOVUxMOworCQkJaWYgKG1ha2VkZXYobWFqb3IsIG1pbm9yKSA9PSBkZXZubykgeworCQkJCXNucHJpbnRmKHJldF9wYXRoLCBTWVNGU19QQVRIX0xFTiwKKwkJCQkJICIvc3lzL2Jsb2NrLyVzIiwgZGUtPmRfbmFtZSk7CisJCQkJZ290byBzdWNjZXNzOworCQkJfQorI2lmZGVmIG1ham9yCisJCQlpZiAobWFqb3IoZGV2bm8pICE9IG1ham9yKQorCQkJCWNvbnRpbnVlOworI2VuZGlmCisJCX0KKwkJaWYgKGYpCisJCQlmY2xvc2UoZik7CisKKwkJc25wcmludGYocGF0aCwgU1lTRlNfUEFUSF9MRU4sICIvc3lzL2Jsb2NrLyVzIiwgZGUtPmRfbmFtZSk7CisKKwkJaWYgKHBfZGlyKQorCQkJY2xvc2VkaXIocF9kaXIpOworCQlpZiAoKHBfZGlyID0gb3BlbmRpcihwYXRoKSkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQl3aGlsZSAoKHBfZGUgPSByZWFkZGlyKHBfZGlyKSkgIT0gTlVMTCkgeworCQkJaWYgKCFzdHJjbXAocF9kZS0+ZF9uYW1lLCAiLiIpIHx8CisJCQkgICAgIXN0cmNtcChwX2RlLT5kX25hbWUsICIuLiIpIHx8CisJCQkgICAgKHN0cmxlbihwX2RlLT5kX25hbWUpID4KKwkJCSAgICAgU1lTRlNfUEFUSF9MRU4gLSBzdHJsZW4ocGF0aCkgLSAzMikpCisJCQkJY29udGludWU7CisJCQlzbnByaW50ZihwX3BhdGgsIFNZU0ZTX1BBVEhfTEVOLCAiJXMvJXMvZGV2IiwKKwkJCQkgcGF0aCwgcF9kZS0+ZF9uYW1lKTsKKworCQkJZiA9IGZvcGVuKHBfcGF0aCwgInIiKTsKKwkJCWlmIChmICYmCisJCQkgICAgKGZzY2FuZihmLCAiJXU6JXUiLCAmbWFqb3IsICZtaW5vcikgPT0gMikgJiYKKwkJCSAgICAoKChtYWpvciA8PCA4KSArIG1pbm9yKSA9PSBkZXZubykpIHsKKwkJCQlmY2xvc2UoZik7CisJCQkJc25wcmludGYocmV0X3BhdGgsIFNZU0ZTX1BBVEhfTEVOLCAiJXMvJXMiLAorCQkJCQkgcGF0aCwgcF9kZS0+ZF9uYW1lKTsKKwkJCQlnb3RvIHN1Y2Nlc3M7CisJCQl9CisJCQlpZiAoZikKKwkJCQlmY2xvc2UoZik7CisJCX0KKwl9CisJcmV0ID0gTlVMTDsKK3N1Y2Nlc3M6CisJaWYgKGRpcikKKwkJY2xvc2VkaXIoZGlyKTsKKwlpZiAocF9kaXIpCisJCWNsb3NlZGlyKHBfZGlyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgYmxrNjRfdCBnZXRfcGFydGl0aW9uX3N0YXJ0KGNvbnN0IGNoYXIgKmRldmljZV9uYW1lKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydDsKKwlzeXNmc19wYXRoX3QJcGF0aDsKKwlzdHJ1Y3Qgc3RhdAlzdDsKKwlGSUxFCQkqZjsKKwljaGFyCQkqY3A7CisJaW50CQluOworCisJaWYgKChzdGF0KGRldmljZV9uYW1lLCAmc3QpIDwgMCkgfHwgIVNfSVNCTEsoc3Quc3RfbW9kZSkpCisJCXJldHVybiAwOworCisJY3AgPSBzZWFyY2hfc3lzZnNfYmxvY2soc3Quc3RfcmRldiwgcGF0aCk7CisJaWYgKCFjcCkKKwkJcmV0dXJuIDA7CisJaWYgKHN0cmxlbihwYXRoKSA+IFNZU0ZTX1BBVEhfTEVOIC0gc2l6ZW9mKCIvc3RhcnQiKSkKKwkJcmV0dXJuIDA7CisJc3RyY2F0KHBhdGgsICIvc3RhcnQiKTsKKwlmID0gZm9wZW4ocGF0aCwgInIiKTsKKwlpZiAoIWYpCisJCXJldHVybiAwOworCW4gPSBmc2NhbmYoZiwgIiVsbHUiLCAmc3RhcnQpOworCWZjbG9zZShmKTsKKwlyZXR1cm4gKG4gPT0gMSkgPyBzdGFydCA6IDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgY3JlYXRlX2RpcmVjdG9yeShleHQyX2ZpbHN5cyBmcywgY2hhciAqZGlyLAorCQkJCSAgZXh0Ml9pbm9fdCAqcmV0X2lubykKKworeworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCWV4dDJfaW5vX3QJCWlubyA9IEVYVDJfUk9PVF9JTk87CisJZXh0Ml9pbm9fdAkJbmV3ZGlyOworCWVycmNvZGVfdAkJcmV0dmFsID0gMDsKKwljaGFyCQkJKmZuLCAqY3AsICpuZXh0OworCisJZm4gPSBtYWxsb2Moc3RybGVuKGRpcikgKyAxKTsKKwlpZiAoZm4gPT0gTlVMTCkKKwkJcmV0dXJuIEVOT01FTTsKKworCXN0cmNweShmbiwgZGlyKTsKKwljcCA9IGZuOworCXdoaWxlKDEpIHsKKwkJbmV4dCA9IHN0cmNocihjcCwgJy8nKTsKKwkJaWYgKG5leHQpCisJCQkqbmV4dCsrID0gMDsKKwkJaWYgKCpjcCkgeworCQkJcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShmcywgaW5vLCBMSU5VWF9TX0lGRElSLAorCQkJCQkJICBOVUxMLCAmbmV3ZGlyKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisKKwkJCXJldHZhbCA9IGV4dDJmc19ta2RpcihmcywgaW5vLCBuZXdkaXIsIGNwKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisKKwkJCWlubyA9IG5ld2RpcjsKKwkJCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBpbm8sICZpbm9kZSk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZXJyb3V0OworCisJCQlpbm9kZS5pX3VpZCA9IHVpZCAmIDB4RkZGRjsKKwkJCWV4dDJmc19zZXRfaV91aWRfaGlnaChpbm9kZSwgKHVpZCA+PiAxNikgJiAweGZmZmYpOworCQkJaW5vZGUuaV9naWQgPSBnaWQgJiAweEZGRkY7CisJCQlleHQyZnNfc2V0X2lfZ2lkX2hpZ2goaW5vZGUsIChnaWQgPj4gMTYpICYgMHhmZmZmKTsKKwkJCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZShmcywgaW5vLCAmaW5vZGUpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycm91dDsKKwkJfQorCQlpZiAobmV4dCA9PSBOVUxMIHx8ICpuZXh0ID09ICdcMCcpCisJCQlicmVhazsKKwkJY3AgPSBuZXh0OworCX0KK2Vycm91dDoKKwlmcmVlKGZuKTsKKwlpZiAocmV0dmFsID09IDApCisJCSpyZXRfaW5vID0gaW5vOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgbWtfaHVnZWZpbGUoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgbnVtLAorCQkJICAgICBleHQyX2lub190IGRpciwgdW5zaWduZWQgbG9uZyBpZHgsIGV4dDJfaW5vX3QgKmlubykKKworeworCWVycmNvZGVfdAkJcmV0dmFsOworCWJsazY0X3QJCQlsYmxrLCBiZW5kID0gMDsKKwlfX3U2NAkJCXNpemU7CisJYmxrNjRfdAkJCWxlZnQ7CisJYmxrNjRfdAkJCWNvdW50ID0gMDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKwlleHQyX2V4dGVudF9oYW5kbGVfdAloYW5kbGU7CisKKwlyZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGZzLCAwLCBMSU5VWF9TX0lGUkVHLCBOVUxMLCBpbm8pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwltZW1zZXQoJmlub2RlLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwlpbm9kZS5pX21vZGUgPSBMSU5VWF9TX0lGUkVHIHwgKDA2NjYgJiB+ZnMtPnVtYXNrKTsKKwlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMTsKKwlpbm9kZS5pX3VpZCA9IHVpZCAmIDB4RkZGRjsKKwlleHQyZnNfc2V0X2lfdWlkX2hpZ2goaW5vZGUsICh1aWQgPj4gMTYpICYgMHhmZmZmKTsKKwlpbm9kZS5pX2dpZCA9IGdpZCAmIDB4RkZGRjsKKwlleHQyZnNfc2V0X2lfZ2lkX2hpZ2goaW5vZGUsIChnaWQgPj4gMTYpICYgMHhmZmZmKTsKKworCXJldHZhbCA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZnMsICppbm8sICZpbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoZnMsICppbm8sICsxLCAwKTsKKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfb3BlbjIoZnMsICppbm8sICZpbm9kZSwgJmhhbmRsZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWxibGsgPSAwOworCWxlZnQgPSBudW0gPyBudW0gOiAxOworCXdoaWxlIChsZWZ0KSB7CisJCWJsazY0X3QgcGJsaywgZW5kOworCQlibGs2NF90IG4gPSBsZWZ0OworCisJCXJldHZhbCA9ICBleHQyZnNfZmluZF9maXJzdF96ZXJvX2Jsb2NrX2JpdG1hcDIoZnMtPmJsb2NrX21hcCwKKwkJCWdvYWwsIGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtIDEsICZlbmQpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJCWdvYWwgPSBlbmQ7CisKKwkJcmV0dmFsID0gIGV4dDJmc19maW5kX2ZpcnN0X3NldF9ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsIGdvYWwsCisJCQkgICAgICAgZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpIC0gMSwgJmJlbmQpOworCQlpZiAocmV0dmFsID09IEVOT0VOVCkgeworCQkJYmVuZCA9IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsKKwkJCWlmIChudW0gPT0gMCkKKwkJCQlsZWZ0ID0gMDsKKwkJfQorCQlpZiAoIW51bSB8fCBiZW5kIC0gZ29hbCA8IGxlZnQpCisJCQluID0gYmVuZCAtIGdvYWw7CisJCXBibGsgPSBnb2FsOworCQlpZiAobnVtKQorCQkJbGVmdCAtPSBuOworCQlnb2FsICs9IG47CisJCWNvdW50ICs9IG47CisJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0c19yYW5nZShmcywgcGJsaywgbiwgKzEpOworCisJCWlmICh6ZXJvX2h1Z2VmaWxlKSB7CisJCQlibGs2NF90IHJldF9ibGs7CisJCQlyZXR2YWwgPSBleHQyZnNfemVyb19ibG9ja3MyKGZzLCBwYmxrLCBuLAorCQkJCQkJICAgICAmcmV0X2JsaywgTlVMTCk7CisKKwkJCWlmIChyZXR2YWwpCisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwKKwkJCQkJXygid2hpbGUgemVyb2luZyBibG9jayAlbGx1ICIKKwkJCQkJICAiZm9yIGh1Z2VmaWxlIiksIHJldF9ibGspOworCQl9CisKKwkJd2hpbGUgKG4pIHsKKwkJCWJsazY0X3QgbCA9IG47CisJCQlzdHJ1Y3QgZXh0MmZzX2V4dGVudCBuZXdleHRlbnQ7CisKKwkJCWlmIChsID4gRVhUX0lOSVRfTUFYX0xFTikKKwkJCQlsID0gRVhUX0lOSVRfTUFYX0xFTjsKKworCQkJbmV3ZXh0ZW50LmVfbGVuID0gbDsKKwkJCW5ld2V4dGVudC5lX3BibGsgPSBwYmxrOworCQkJbmV3ZXh0ZW50LmVfbGJsayA9IGxibGs7CisJCQluZXdleHRlbnQuZV9mbGFncyA9IDA7CisKKwkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfaW5zZXJ0KGhhbmRsZSwKKwkJCQkJRVhUMl9FWFRFTlRfSU5TRVJUX0FGVEVSLCAmbmV3ZXh0ZW50KTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCXBibGsgKz0gbDsKKwkJCWxibGsgKz0gbDsKKwkJCW4gLT0gbDsKKwkJfQorCX0KKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCAqaW5vLCAmaW5vZGUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCisJcmV0dmFsID0gZXh0MmZzX2libGtfYWRkX2Jsb2NrcyhmcywgJmlub2RlLAorCQkJCQljb3VudCAvIEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJc2l6ZSA9IChfX3U2NCkgY291bnQgKiBmcy0+YmxvY2tzaXplOworCXJldHZhbCA9IGV4dDJmc19pbm9kZV9zaXplX3NldChmcywgJmlub2RlLCBzaXplKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCXJldHZhbCA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZnMsICppbm8sICZpbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlpZiAoaWR4X2RpZ2l0cykKKwkJc3ByaW50Zihmbl9udW1idWYsICIlMCpsdSIsIGlkeF9kaWdpdHMsIGlkeCk7CisJZWxzZSBpZiAobnVtX2ZpbGVzID4gMSkKKwkJc3ByaW50Zihmbl9udW1idWYsICIlbHUiLCBpZHgpOworCityZXRyeToKKwlyZXR2YWwgPSBleHQyZnNfbGluayhmcywgZGlyLCBmbl9idWYsICppbm8sIEVYVDJfRlRfUkVHX0ZJTEUpOworCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9ESVJfTk9fU1BBQ0UpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoZnMsIGRpcik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwkJZ290byByZXRyeTsKKwl9CisKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworZXJyb3V0OgorCWlmIChoYW5kbGUpCisJCWV4dDJmc19leHRlbnRfZnJlZShoYW5kbGUpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGJsazY0X3QgY2FsY19vdmVyaGVhZChleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBudW0pCit7CisJYmxrNjRfdCBlX2Jsb2NrcywgZV9ibG9ja3MyLCBlX2Jsb2NrczMsIGVfYmxvY2tzNDsKKwlpbnQgZXh0ZW50c19wZXJfYmxvY2s7CisJaW50IGV4dGVudHMgPSAobnVtICsgRVhUX0lOSVRfTUFYX0xFTiAtIDEpIC8gRVhUX0lOSVRfTUFYX0xFTjsKKworCWlmIChleHRlbnRzIDw9IDQpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBUaGlzIGNhbGN1bGF0aW9uIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHdlIGFyZSBpbmVmZmljaWVudAorCSAqIGluIGhvdyBoYW5kbGUgZXh0ZW50IHNwbGl0cyB3aGVuIGFwcGVuZGluZyB0byB0aGUgZW5kIG9mCisJICogdGhlIGV4dGVudCB0cmVlLiAgU2lnaC4gIFdlIHNob3VsZCBmaXggdGhpcyBzbyB0aGF0IHdlIGNhbgorCSAqIGFjdHVhbGx5IHN0b3JlIDM0MCBleHRlbnRzIHBlciA0ayBibG9jaywgaW5zdGVhZCBvZiBvbmx5IDE3MC4KKwkgKi8KKwlleHRlbnRzX3Blcl9ibG9jayA9ICgoZnMtPmJsb2Nrc2l6ZSAtCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlcikpIC8KKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudCkpOworCWV4dGVudHNfcGVyX2Jsb2NrID0gKGV4dGVudHNfcGVyX2Jsb2NrLyAyKSAtIDE7CisKKwllX2Jsb2NrcyA9IChleHRlbnRzICsgZXh0ZW50c19wZXJfYmxvY2sgLSAxKSAvIGV4dGVudHNfcGVyX2Jsb2NrOworCWVfYmxvY2tzMiA9IChlX2Jsb2NrcyArIGV4dGVudHNfcGVyX2Jsb2NrIC0gMSkgLyBleHRlbnRzX3Blcl9ibG9jazsKKwllX2Jsb2NrczMgPSAoZV9ibG9ja3MyICsgZXh0ZW50c19wZXJfYmxvY2sgLSAxKSAvIGV4dGVudHNfcGVyX2Jsb2NrOworCWVfYmxvY2tzNCA9IChlX2Jsb2NrczMgKyBleHRlbnRzX3Blcl9ibG9jayAtIDEpIC8gZXh0ZW50c19wZXJfYmxvY2s7CisJcmV0dXJuIGVfYmxvY2tzICsgZV9ibG9ja3MyICsgZV9ibG9ja3MzICsgZV9ibG9ja3M0OworfQorCisvKgorICogRmluZCB0aGUgcGxhY2Ugd2hlcmUgd2Ugc2hvdWxkIHN0YXJ0IGFsbG9jYXRpbmcgYmxvY2tzIGZvciB0aGUgaHVnZQorICogZmlsZXMuICBMZWF2ZSA8c2xhY2s+IGZyZWUgYmxvY2tzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUKKyAqIHN5c3RlbSBmb3IgdGhpbmdzIGxpa2UgbWV0YWRhdGEgYmxvY2tzLgorICovCitzdGF0aWMgYmxrNjRfdCBnZXRfc3RhcnRfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsazY0X3Qgc2xhY2spCit7CisJZXJyY29kZV90IHJldHZhbDsKKwlibGs2NF90IGJsayA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrLCBuZXh0OworCWJsazY0X3QgbGFzdF9ibGsgPSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLSAxOworCisJd2hpbGUgKHNsYWNrKSB7CisJCXJldHZhbCA9IGV4dDJmc19maW5kX2ZpcnN0X3plcm9fYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLAorCQkJCQkJYmxrLCBsYXN0X2JsaywgJmJsayk7CisJCWlmIChyZXR2YWwpCisJCQlicmVhazsKKworCQlyZXR2YWwgPSBleHQyZnNfZmluZF9maXJzdF9zZXRfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLAorCQkJCQkJYmxrLCBsYXN0X2JsaywgJm5leHQpOworCQlpZiAocmV0dmFsKQorCQkJbmV4dCA9IGxhc3RfYmxrOworCisJCWlmIChuZXh0IC0gYmxrID4gc2xhY2spIHsKKwkJCWJsayArPSBzbGFjazsKKwkJCWJyZWFrOworCQl9CisKKwkJc2xhY2sgLT0gKG5leHQgLSBibGspOworCQlibGsgPSBuZXh0OworCX0KKwlyZXR1cm4gYmxrOworfQorCitzdGF0aWMgYmxrNjRfdCByb3VuZF91cF9hbGlnbihibGs2NF90IGIsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkgICAgICBibGs2NF90IHBhcnRfb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgbTsKKworCWlmIChhbGlnbiA9PSAwKQorCQlyZXR1cm4gYjsKKwlwYXJ0X29mZnNldCA9IHBhcnRfb2Zmc2V0ICUgYWxpZ247CisJbSA9IChiICsgcGFydF9vZmZzZXQpICUgYWxpZ247CisJaWYgKG0pCisJCWIgKz0gYWxpZ24gLSBtOworCXJldHVybiBiOworfQorCitlcnJjb2RlX3QgbWtfaHVnZWZpbGVzKGV4dDJfZmlsc3lzIGZzLCBjb25zdCBjaGFyICpkZXZpY2VfbmFtZSkKK3sKKwl1bnNpZ25lZCBsb25nCWk7CisJZXh0Ml9pbm9fdAlkaXI7CisJZXJyY29kZV90CXJldHZhbDsKKwlibGs2NF90CQlmc19ibG9ja3MsIHBhcnRfb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBsb25nCWFsaWduOworCWludAkJZCwgZHNpemU7CisJY2hhcgkJKnQ7CisKKwlpZiAoIWdldF9ib29sX2Zyb21fcHJvZmlsZShmc190eXBlcywgIm1ha2VfaHVnZWZpbGVzIiwgMCkpCisJCXJldHVybiAwOworCisJdWlkID0gZ2V0X2ludF9mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsICJodWdlZmlsZXNfdWlkIiwgMCk7CisJZ2lkID0gZ2V0X2ludF9mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsICJodWdlZmlsZXNfZ2lkIiwgMCk7CisJZnMtPnVtYXNrID0gZ2V0X2ludF9mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsICJodWdlZmlsZXNfdW1hc2siLCAwNzcpOworCW51bV9maWxlcyA9IGdldF9pbnRfZnJvbV9wcm9maWxlKGZzX3R5cGVzLCAibnVtX2h1Z2VmaWxlcyIsIDApOworCXQgPSBnZXRfc3RyaW5nX2Zyb21fcHJvZmlsZShmc190eXBlcywgImh1Z2VmaWxlc19zbGFjayIsICIxTSIpOworCW51bV9zbGFjayA9IHBhcnNlX251bV9ibG9ja3MyKHQsIGZzLT5zdXBlci0+c19sb2dfYmxvY2tfc2l6ZSk7CisJZnJlZSh0KTsKKwl0ID0gZ2V0X3N0cmluZ19mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsICJodWdlZmlsZXNfc2l6ZSIsICIwIik7CisJbnVtX2Jsb2NrcyA9IHBhcnNlX251bV9ibG9ja3MyKHQsIGZzLT5zdXBlci0+c19sb2dfYmxvY2tfc2l6ZSk7CisJZnJlZSh0KTsKKwl0ID0gZ2V0X3N0cmluZ19mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsICJodWdlZmlsZXNfYWxpZ24iLCAiMCIpOworCWFsaWduID0gcGFyc2VfbnVtX2Jsb2NrczIodCwgZnMtPnN1cGVyLT5zX2xvZ19ibG9ja19zaXplKTsKKwlmcmVlKHQpOworCWlmIChnZXRfYm9vbF9mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsICJodWdlZmlsZXNfYWxpZ25fZGlzayIsIDApKSB7CisJCXBhcnRfb2Zmc2V0ID0gZ2V0X3BhcnRpdGlvbl9zdGFydChkZXZpY2VfbmFtZSkgLworCQkJKGZzLT5ibG9ja3NpemUgLyA1MTIpOworCQlpZiAocGFydF9vZmZzZXQgJSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCV8oIlBhcnRpdGlvbiBvZmZzZXQgb2YgJWxsdSAoJXVrKSBibG9ja3MgIgorCQkJCSAgIm5vdCBjb21wYXRpYmxlIHdpdGggY2x1c3RlciBzaXplICV1LlxuIiksCisJCQkJcGFydF9vZmZzZXQsIGZzLT5ibG9ja3NpemUsCisJCQkJRVhUMl9DTFVTVEVSX1NJWkUoZnMtPnN1cGVyKSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCW51bV9ibG9ja3MgPSByb3VuZF91cF9hbGlnbihudW1fYmxvY2tzLCBhbGlnbiwgMCk7CisJemVyb19odWdlZmlsZSA9IGdldF9ib29sX2Zyb21fcHJvZmlsZShmc190eXBlcywgInplcm9faHVnZWZpbGVzIiwKKwkJCQkJICAgICAgemVyb19odWdlZmlsZSk7CisKKwl0ID0gZ2V0X3N0cmluZ19mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsICJodWdlZmlsZXNfZGlyIiwgIi8iKTsKKwlyZXR2YWwgPSBjcmVhdGVfZGlyZWN0b3J5KGZzLCB0LCAmZGlyKTsKKwlmcmVlKHQpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlmbl9wcmVmaXggPSBnZXRfc3RyaW5nX2Zyb21fcHJvZmlsZShmc190eXBlcywgImh1Z2VmaWxlc19uYW1lIiwKKwkJCQkJICAgICJodWdlZmlsZSIpOworCWlkeF9kaWdpdHMgPSBnZXRfaW50X2Zyb21fcHJvZmlsZShmc190eXBlcywgImh1Z2VmaWxlc19kaWdpdHMiLCA1KTsKKwlkID0gaW50X2xvZzEwKG51bV9maWxlcykgKyAxOworCWlmIChpZHhfZGlnaXRzID4gZCkKKwkJZCA9IGlkeF9kaWdpdHM7CisJZHNpemUgPSBzdHJsZW4oZm5fcHJlZml4KSArIGQgKyAxNjsKKwlmbl9idWYgPSBtYWxsb2MoZHNpemUpOworCWlmICghZm5fYnVmKSB7CisJCWZyZWUoZm5fcHJlZml4KTsKKwkJcmV0dXJuIEVOT01FTTsKKwl9CisJc3RyY3B5KGZuX2J1ZiwgZm5fcHJlZml4KTsKKwlmbl9udW1idWYgPSBmbl9idWYgKyBzdHJsZW4oZm5fcHJlZml4KTsKKwlmcmVlKGZuX3ByZWZpeCk7CisKKwlmc19ibG9ja3MgPSBleHQyZnNfZnJlZV9ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsKKwlpZiAoZnNfYmxvY2tzIDwgbnVtX3NsYWNrICsgYWxpZ24pCisJCXJldHVybiBFTk9NRU07CisJZnNfYmxvY2tzIC09IG51bV9zbGFjayArIGFsaWduOworCWlmIChudW1fYmxvY2tzICYmIG51bV9ibG9ja3MgPiBmc19ibG9ja3MpCisJCXJldHVybiBFTk9NRU07CisJaWYgKG51bV9ibG9ja3MgPT0gMCAmJiBudW1fZmlsZXMgPT0gMCkKKwkJbnVtX2ZpbGVzID0gMTsKKworCWlmIChudW1fZmlsZXMgPT0gMCAmJiBudW1fYmxvY2tzKSB7CisJCW51bV9maWxlcyA9IGZzX2Jsb2NrcyAvIG51bV9ibG9ja3M7CisJCWZzX2Jsb2NrcyAtPSAobnVtX2ZpbGVzIC8gMTYpICsgMTsKKwkJZnNfYmxvY2tzIC09IGNhbGNfb3ZlcmhlYWQoZnMsIG51bV9ibG9ja3MpICogbnVtX2ZpbGVzOworCQludW1fZmlsZXMgPSBmc19ibG9ja3MgLyBudW1fYmxvY2tzOworCX0KKworCWlmIChudW1fYmxvY2tzID09IDAgJiYgbnVtX2ZpbGVzID4gMSkgeworCQludW1fYmxvY2tzID0gZnNfYmxvY2tzIC8gbnVtX2ZpbGVzOworCQlmc19ibG9ja3MgLT0gKG51bV9maWxlcyAvIDE2KSArIDE7CisJCWZzX2Jsb2NrcyAtPSBjYWxjX292ZXJoZWFkKGZzLCBudW1fYmxvY2tzKSAqIG51bV9maWxlczsKKwkJbnVtX2Jsb2NrcyA9IGZzX2Jsb2NrcyAvIG51bV9maWxlczsKKwl9CisKKwludW1fc2xhY2sgKz0gY2FsY19vdmVyaGVhZChmcywgbnVtX2Jsb2NrcykgKiBudW1fZmlsZXM7CisJbnVtX3NsYWNrICs9IChudW1fZmlsZXMgLyAxNikgKyAxOyAvKiBzcGFjZSBmb3IgZGlyIGVudHJpZXMgKi8KKwlnb2FsID0gZ2V0X3N0YXJ0X2Jsb2NrKGZzLCBudW1fc2xhY2spOworCWdvYWwgPSByb3VuZF91cF9hbGlnbihnb2FsLCBhbGlnbiwgcGFydF9vZmZzZXQpOworCisJaWYgKChudW1fYmxvY2tzID8gbnVtX2Jsb2NrcyA6IGZzX2Jsb2NrcykgPgorCSAgICAoMHg4MDAwMDAwMFVMIC8gZnMtPmJsb2Nrc2l6ZSkpCisJCWZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCB8PQorCQkJRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFOworCisJaWYgKCFxdWlldCkgeworCQlpZiAoemVyb19odWdlZmlsZSAmJiB2ZXJib3NlKQorCQkJcHJpbnRmKCIlcyIsIF8oIkh1Z2UgZmlsZXMgd2lsbCBiZSB6ZXJvJ2VkXG4iKSk7CisJCXByaW50ZihfKCJDcmVhdGluZyAlbHUgaHVnZSBmaWxlKHMpICIpLCBudW1fZmlsZXMpOworCQlpZiAobnVtX2Jsb2NrcykKKwkJCXByaW50ZihfKCJ3aXRoICVsbHUgYmxvY2tzIGVhY2giKSwgbnVtX2Jsb2Nrcyk7CisJCWZwdXRzKCI6ICIsIHN0ZG91dCk7CisJfQorCWZvciAoaT0wOyBpIDwgbnVtX2ZpbGVzOyBpKyspIHsKKwkJZXh0Ml9pbm9fdCBpbm87CisKKwkJcmV0dmFsID0gbWtfaHVnZWZpbGUoZnMsIG51bV9ibG9ja3MsIGRpciwgaSwgJmlubyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQkJXygid2hpbGUgY3JlYXRpbmcgaHVnZSBmaWxlICVsdSIpLCBpKTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJfQorCWlmICghcXVpZXQpCisJCWZwdXRzKF8oImRvbmVcbiIpLCBzdGRvdXQpOworCitlcnJvdXQ6CisJZnJlZShmbl9idWYpOworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9taXNjL21rZTJmcy1odXJkLmNvbmYgYi9taXNjL21rZTJmcy1odXJkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwNTI3ZAotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvbWtlMmZzLWh1cmQuY29uZgpAQCAtMCwwICsxLDQyIEBACitbZGVmYXVsdHNdCisJYmFzZV9mZWF0dXJlcyA9IHNwYXJzZV9zdXBlcixmaWxldHlwZSxyZXNpemVfaW5vZGUsZGlyX2luZGV4LGV4dF9hdHRyCisJZGVmYXVsdF9tbnRvcHRzID0gYWNsLHVzZXJfeGF0dHIKKwllbmFibGVfcGVyaW9kaWNfZnNjayA9IDAKKwlibG9ja3NpemUgPSA0MDk2CisJaW5vZGVfc2l6ZSA9IDEyOAorCWlub2RlX3JhdGlvID0gMTYzODQKKworW2ZzX3R5cGVzXQorCWV4dDMgPSB7CisJCWZlYXR1cmVzID0gaGFzX2pvdXJuYWwKKwl9CisJZXh0NCA9IHsKKwkJZmVhdHVyZXMgPSBoYXNfam91cm5hbCxleHRlbnQsaHVnZV9maWxlLGZsZXhfYmcsdW5pbml0X2JnLGRpcl9ubGluayxleHRyYV9pc2l6ZQorCQlhdXRvXzY0LWJpdF9zdXBwb3J0ID0gMQorCQlpbm9kZV9zaXplID0gMjU2CisJfQorCXNtYWxsID0geworCQlpbm9kZV9yYXRpbyA9IDQwOTYKKwl9CisJZmxvcHB5ID0geworCQlpbm9kZV9yYXRpbyA9IDgxOTIKKwl9CisJYmlnID0geworCQlpbm9kZV9yYXRpbyA9IDMyNzY4CisJfQorCWh1Z2UgPSB7CisJCWlub2RlX3JhdGlvID0gNjU1MzYKKwl9CisJbmV3cyA9IHsKKwkJaW5vZGVfcmF0aW8gPSA0MDk2CisJfQorCWxhcmdlZmlsZSA9IHsKKwkJaW5vZGVfcmF0aW8gPSAxMDQ4NTc2CisJfQorCWxhcmdlZmlsZTQgPSB7CisJCWlub2RlX3JhdGlvID0gNDE5NDMwNAorCX0KKwlodXJkID0geworCSAgICAgYmxvY2tzaXplID0gNDA5NgorCSAgICAgaW5vZGVfc2l6ZSA9IDEyOAorCX0KZGlmZiAtLWdpdCBhL21pc2MvbWtlMmZzLjguaW4gYi9taXNjL21rZTJmcy44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMDJlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL21rZTJmcy44LmluCkBAIC0wLDAgKzEsNzU2IEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAxOTkzLCAxOTk0LCAxOTk1IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiCisuVEggTUtFMkZTIDggIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK21rZTJmcyBcLSBjcmVhdGUgYW4gZXh0Mi9leHQzL2V4dDQgZmlsZXN5c3RlbQorLlNIIFNZTk9QU0lTCisuQiBta2UyZnMKK1sKKy5CIFwtYworfAorLkIgXC1sCisuSSBmaWxlbmFtZQorXQorWworLkIgXC1iCisuSSBibG9jay1zaXplCitdCitbCisuQiBcLUQKK10KK1sKKy5CIFwtZgorLkkgZnJhZ21lbnQtc2l6ZQorXQorWworLkIgXC1nCisuSSBibG9ja3MtcGVyLWdyb3VwCitdCitbCisuQiBcLUcKKy5JIG51bWJlci1vZi1ncm91cHMKK10KK1sKKy5CIFwtaQorLkkgYnl0ZXMtcGVyLWlub2RlCitdCitbCisuQiBcLUkKKy5JIGlub2RlLXNpemUKK10KK1sKKy5CIFwtagorXQorWworLkIgXC1KCisuSSBqb3VybmFsLW9wdGlvbnMKK10KK1sKKy5CIFwtTgorLkkgbnVtYmVyLW9mLWlub2RlcworXQorWworLkIgXC1uCitdCitbCisuQiBcLW0KKy5JIHJlc2VydmVkLWJsb2Nrcy1wZXJjZW50YWdlCitdCitbCisuQiBcLW8KKy5JIGNyZWF0b3Itb3MKK10KK1sKKy5CIFwtTworW15dXGZJZmVhdHVyZVxmUlssLi4uXQorXQorWworLkIgXC1xCitdCitbCisuQiBcLXIKKy5JIGZzLXJldmlzaW9uLWxldmVsCitdCitbCisuQiBcLUUKKy5JIGV4dGVuZGVkLW9wdGlvbnMKK10KK1sKKy5CIFwtdgorXQorWworLkIgXC1GCitdCitbCisuQiBcLUwKKy5JIHZvbHVtZS1sYWJlbAorXQorWworLkIgXC1NCisuSSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5CitdCitbCisuQiBcLVMKK10KK1sKKy5CIFwtdAorLkkgZnMtdHlwZQorXQorWworLkIgXC1UCisuSSB1c2FnZS10eXBlCitdCitbCisuQiBcLVUKKy5JIFVVSUQKK10KK1sKKy5CIFwtVgorXQorLkkgZGV2aWNlCitbCisuSSBmcy1zaXplCitdCitASkRFVkAuc3AKK0BKREVWQC5CICJta2UyZnMgXC1PIGpvdXJuYWxfZGV2IgorQEpERVZAWworQEpERVZALkIgXC1iCitASkRFVkAuSSBibG9jay1zaXplCitASkRFVkBdCisuXCIgTm8gZXh0ZXJuYWwtam91cm5hbCBzcGVjaWZpYyBqb3VybmFsIG9wdGlvbnMgeWV0IChzaXplIGlzIGlnbm9yZWQpCisuXCIgQEpERVZAWworLlwiIEBKREVWQC5CIFwtSgorLlwiIEBKREVWQC5JIGpvdXJuYWwtb3B0aW9ucworLlwiIEBKREVWQF0KK0BKREVWQFsKK0BKREVWQC5CIFwtTAorQEpERVZALkkgdm9sdW1lLWxhYmVsCitASkRFVkBdCitASkRFVkBbCitASkRFVkAuQiBcLW4KK0BKREVWQF0KK0BKREVWQFsKK0BKREVWQC5CIFwtcQorQEpERVZAXQorQEpERVZAWworQEpERVZALkIgXC12CitASkRFVkBdCitASkRFVkAuSSBleHRlcm5hbC1qb3VybmFsCitASkRFVkBbCitASkRFVkAuSSBmcy1zaXplCitASkRFVkBdCisuU0ggREVTQ1JJUFRJT04KKy5CIG1rZTJmcworaXMgdXNlZCB0byBjcmVhdGUgYW4gZXh0MiwgZXh0Mywgb3IgZXh0NCBmaWxlc3lzdGVtLCB1c3VhbGx5IGluIGEgZGlzaworcGFydGl0aW9uIChvciBmaWxlKSBuYW1lZCBieQorLklSIGRldmljZSAuCisuUFAKK1RoZSBmaWxlIHN5c3RlbSBzaXplIGlzIHNwZWNpZmllZCBieQorLklSIGZzLXNpemUgLgorSWYKKy5JIGZzLXNpemUKK2RvZXMgbm90IGhhdmUgYSBzdWZmaXgsIGl0IGlzIGludGVycHJldGVkIGFzIHBvd2VyLW9mLXR3byBraWxvYnl0ZXMsCit1bmxlc3MgdGhlCisuQiBcLWIKKy5JIGJsb2Nrc2l6ZQorb3B0aW9uIGlzIHNwZWNpZmllZCwgaW4gd2hpY2ggY2FzZQorLkkgZnMtc2l6ZQoraXMgaW50ZXJwcmV0ZWQgYXMgdGhlIG51bWJlciBvZgorLkkgYmxvY2tzaXplCitibG9ja3MuICAgSWYgdGhlIGZzLXNpemUgaXMgc3VmZml4ZWQgYnkgJ2snLCAnbScsICdnJywgJ3QnCisoZWl0aGVyIHVwcGVyLWNhc2Ugb3IgbG93ZXItY2FzZSksIHRoZW4gaXQgaXMgaW50ZXJwcmV0ZWQgaW4KK3Bvd2VyLW9mLXR3byBraWxvYnl0ZXMsIG1lZ2FieXRlcywgZ2lnYWJ5dGVzLCB0ZXJhYnl0ZXMsIGV0Yy4KK0lmCisuSSBmcy1zaXplCitpcyBvbWl0dGVkLAorLkIgbWtlMmZzCit3aWxsIGNyZWF0ZSB0aGUgZmlsZSBzeXN0ZW0gYmFzZWQgb24gdGhlIGRldmljZSBzaXplLgorLlBQCitJZgorLkIgbWtlMmZzCitpcyBydW4gYXMKKy5CIG1rZnMuWFhYCisoaS5lLiwKKy5CUiBta2ZzLmV4dDIgLAorLkJSIG1rZnMuZXh0MyAsCitvcgorLkJSIG1rZnMuZXh0NCApCit0aGUgb3B0aW9uCisuQiBcLXQKKy5JIFhYWAoraXMgaW1wbGllZDsgc28KKy5CIG1rZnMuZXh0Mword2lsbCBjcmVhdGUgYSBmaWxlIHN5c3RlbSBmb3IgdXNlIHdpdGggZXh0MywKKy5CIG1rZnMuZXh0NAord2lsbCBjcmVhdGUgYSBmaWxlIHN5c3RlbSBmb3IgdXNlIHdpdGggZXh0NCwgYW5kIHNvIG9uLgorLlBQCitUaGUgZGVmYXVsdHMgb2YgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGZpbGVzeXN0ZW0sIGlmIG5vdAorb3ZlcnJpZGRlbiBieSB0aGUgb3B0aW9ucyBsaXN0ZWQgYmVsb3csIGFyZSBjb250cm9sbGVkIGJ5IHRoZQorLkIgL2V0Yy9ta2UyZnMuY29uZgorY29uZmlndXJhdGlvbiBmaWxlLiAgU2VlIHRoZQorLkJSIG1rZTJmcy5jb25mICg1KQorbWFudWFsIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KKy5TSCBPUFRJT05TCisuVFAKKy5CSSBcLWIgIiBibG9jay1zaXplIgorU3BlY2lmeSB0aGUgc2l6ZSBvZiBibG9ja3MgaW4gYnl0ZXMuICBWYWxpZCBibG9jay1zaXplIHZhbHVlcyBhcmUgMTAyNCwKKzIwNDggYW5kIDQwOTYgYnl0ZXMgcGVyIGJsb2NrLiAgSWYgb21pdHRlZCwKK2Jsb2NrLXNpemUgaXMgaGV1cmlzdGljYWxseSBkZXRlcm1pbmVkIGJ5IHRoZSBmaWxlc3lzdGVtIHNpemUgYW5kCit0aGUgZXhwZWN0ZWQgdXNhZ2Ugb2YgdGhlIGZpbGVzeXN0ZW0gKHNlZSB0aGUKKy5CIFwtVAorb3B0aW9uKS4gIElmCisuSSBibG9jay1zaXplCitpcyBwcmVjZWRlZCBieSBhIG5lZ2F0aXZlIHNpZ24gKCctJyksIHRoZW4KKy5CIG1rZTJmcword2lsbCB1c2UgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgdGhlCithcHByb3ByaWF0ZSBibG9jayBzaXplLCB3aXRoIHRoZSBjb25zdHJhaW50IHRoYXQgdGhlIGJsb2NrIHNpemUgd2lsbCBiZQorYXQgbGVhc3QKKy5JIGJsb2NrLXNpemUKK2J5dGVzLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGNlcnRhaW4gaGFyZHdhcmUgZGV2aWNlcyB3aGljaCByZXF1aXJlIHRoYXQKK3RoZSBibG9ja3NpemUgYmUgYSBtdWx0aXBsZSBvZiAyay4KKy5UUAorLkIgXC1jCitDaGVjayB0aGUgZGV2aWNlIGZvciBiYWQgYmxvY2tzIGJlZm9yZSBjcmVhdGluZyB0aGUgZmlsZSBzeXN0ZW0uICBJZgordGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkIHR3aWNlLCB0aGVuIGEgc2xvd2VyIHJlYWQtd3JpdGUKK3Rlc3QgaXMgdXNlZCBpbnN0ZWFkIG9mIGEgZmFzdCByZWFkLW9ubHkgdGVzdC4KKy5UUAorLkIgXC1DICIgY2x1c3Rlci1zaXplIgorU3BlY2lmeSB0aGUgc2l6ZSBvZiBjbHVzdGVyIGluIGJ5dGVzIGZvciBmaWxlc3lzdGVtcyB1c2luZyB0aGUgYmlnYWxsb2MKK2ZlYXR1cmUuICBWYWxpZCBjbHVzdGVyLXNpemUgdmFsdWVzIGFyZSBmcm9tIDIwNDggdG8gMjU2TSBieXRlcyBwZXIKK2NsdXN0ZXIuICBUaGlzIGNhbiBvbmx5IGJlIHNwZWNpZmllZCBpZiB0aGUgYmlnYWxsb2MgZmVhdHVyZSBpcworZW5hYmxlZC4gIChTZWUgdGhlCisuQiBleHQ0ICg1KQorbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscyBhYm91dCBiaWdhbGxvYy4pICAgVGhlIGRlZmF1bHQgY2x1c3RlciBzaXplIGlmCitiaWdhbGxvYyBpcyBlbmFibGVkIGlzIDE2IHRpbWVzIHRoZSBibG9jayBzaXplLgorLlRQCisuQiBcLUQKK1VzZSBkaXJlY3QgSS9PIHdoZW4gd3JpdGluZyB0byB0aGUgZGlzay4gIFRoaXMgYXZvaWRzIG1rZTJmcyBkaXJ0eWluZyBhCitsb3Qgb2YgYnVmZmVyIGNhY2hlIG1lbW9yeSwgd2hpY2ggbWF5IGltcGFjdCBvdGhlciBhcHBsaWNhdGlvbnMgcnVubmluZworb24gYSBidXN5IHNlcnZlci4gIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgbWtlMmZzIHRvIHJ1biBtdWNoIG1vcmUKK3Nsb3dseSwgaG93ZXZlciwgc28gdGhlcmUgaXMgYSB0cmFkZW9mZiB0byB1c2luZyBkaXJlY3QgSS9PLgorLlRQCisuQkkgXC1FICIgZXh0ZW5kZWQtb3B0aW9ucyIKK1NldCBleHRlbmRlZCBvcHRpb25zIGZvciB0aGUgZmlsZXN5c3RlbS4gIEV4dGVuZGVkIG9wdGlvbnMgYXJlIGNvbW1hCitzZXBhcmF0ZWQsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB1c2luZyB0aGUgZXF1YWxzICgnPScpIHNpZ24uICBUaGUKKy5CIFwtRQorb3B0aW9uIHVzZWQgdG8gYmUKKy5CIFwtUgoraW4gZWFybGllciB2ZXJzaW9ucyBvZgorLkJSIG1rZTJmcyAuCitUaGUKKy5CIFwtUgorb3B0aW9uIGlzIHN0aWxsIGFjY2VwdGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYnV0IGlzIGRlcHJlY2F0ZWQuCitUaGUgZm9sbG93aW5nIGV4dGVuZGVkIG9wdGlvbnMgYXJlIHN1cHBvcnRlZDoKKy5SUyAxLjJpCisuVFAKKy5CSSBtbXBfdXBkYXRlX2ludGVydmFsPSBpbnRlcnZhbAorQWRqdXN0IHRoZSBpbml0aWFsIE1NUCB1cGRhdGUgaW50ZXJ2YWwgdG8KKy5JIGludGVydmFsCitzZWNvbmRzLiAgU3BlY2lmeWluZyBhbgorLkkgaW50ZXJ2YWwKK29mIDAgbWVhbnMgdG8gdXNlIHRoZSBkZWZhdWx0IGludGVydmFsLiAgVGhlIHNwZWNpZmllZCBpbnRlcnZhbCBtdXN0CitiZSBsZXNzIHRoYW4gMzAwIHNlY29uZHMuICBSZXF1aXJlcyB0aGF0IHRoZQorLkIgbW1wCitmZWF0dXJlIGJlIGVuYWJsZWQuCisuVFAKKy5CSSBzdHJpZGU9IHN0cmlkZS1zaXplCitDb25maWd1cmUgdGhlIGZpbGVzeXN0ZW0gZm9yIGEgUkFJRCBhcnJheSB3aXRoCisuSSBzdHJpZGUtc2l6ZQorZmlsZXN5c3RlbSBibG9ja3MuIFRoaXMgaXMgdGhlIG51bWJlciBvZiBibG9ja3MgcmVhZCBvciB3cml0dGVuIHRvIGRpc2sKK2JlZm9yZSBtb3ZpbmcgdG8gdGhlIG5leHQgZGlzaywgd2hpY2ggaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIHRoZQorLkkgY2h1bmsgc2l6ZS4KK1RoaXMgbW9zdGx5IGFmZmVjdHMgcGxhY2VtZW50IG9mIGZpbGVzeXN0ZW0gbWV0YWRhdGEgbGlrZSBiaXRtYXBzIGF0CisuQiBta2UyZnMKK3RpbWUgdG8gYXZvaWQgcGxhY2luZyB0aGVtIG9uIGEgc2luZ2xlIGRpc2ssIHdoaWNoIGNhbiBodXJ0IHBlcmZvcm1hbmNlLgorSXQgbWF5IGFsc28gYmUgdXNlZCBieSB0aGUgYmxvY2sgYWxsb2NhdG9yLgorLlRQCisuQkkgc3RyaXBlX3dpZHRoPSBzdHJpcGUtd2lkdGgKK0NvbmZpZ3VyZSB0aGUgZmlsZXN5c3RlbSBmb3IgYSBSQUlEIGFycmF5IHdpdGgKKy5JIHN0cmlwZS13aWR0aAorZmlsZXN5c3RlbSBibG9ja3MgcGVyIHN0cmlwZS4gVGhpcyBpcyB0eXBpY2FsbHkgc3RyaWRlLXNpemUgKiBOLCB3aGVyZQorTiBpcyB0aGUgbnVtYmVyIG9mIGRhdGEtYmVhcmluZyBkaXNrcyBpbiB0aGUgUkFJRCAoZS5nLiBmb3IgUkFJRCA1IHRoZXJlIGlzIG9uZQorcGFyaXR5IGRpc2ssIHNvIE4gd2lsbCBiZSB0aGUgbnVtYmVyIG9mIGRpc2tzIGluIHRoZSBhcnJheSBtaW51cyAxKS4KK1RoaXMgYWxsb3dzIHRoZSBibG9jayBhbGxvY2F0b3IgdG8gcHJldmVudCByZWFkLW1vZGlmeS13cml0ZSBvZiB0aGUKK3Bhcml0eSBpbiBhIFJBSUQgc3RyaXBlIGlmIHBvc3NpYmxlIHdoZW4gdGhlIGRhdGEgaXMgd3JpdHRlbi4KKy5UUAorLkJJIG9mZnNldD0gb2Zmc2V0CitDcmVhdGUgdGhlIGZpbGVzeXN0ZW0gYXQgYW4gb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGV2aWNlIG9yCitmaWxlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4gY3JlYXRpbmcgZGlzayBpbWFnZXMgZm9yIHZpcnR1YWwgbWFjaGluZXMuCisuVFAKKy5CSSByZXNpemU9IG1heC1vbmxpbmUtcmVzaXplCitSZXNlcnZlIGVub3VnaCBzcGFjZSBzbyB0aGF0IHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9yIHRhYmxlIGNhbiBncm93Cit0byBzdXBwb3J0IGEgZmlsZXN5c3RlbSB0aGF0IGhhcworLkkgbWF4LW9ubGluZS1yZXNpemUKK2Jsb2Nrcy4KKy5UUAorLkIgbGF6eV9pdGFibGVfaW5pdFxmUltcZkI9IFxmSTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxmUl0KK0lmIGVuYWJsZWQgYW5kIHRoZSB1bmluaXRfYmcgZmVhdHVyZSBpcyBlbmFibGVkLCB0aGUgaW5vZGUgdGFibGUgd2lsbAorbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5CisuQlIgbWtlMmZzIC4KK1RoaXMgc3BlZWRzIHVwIGZpbGVzeXN0ZW0KK2luaXRpYWxpemF0aW9uIG5vdGljZWFibHksIGJ1dCBpdCByZXF1aXJlcyB0aGUga2VybmVsIHRvIGZpbmlzaAoraW5pdGlhbGl6aW5nIHRoZSBmaWxlc3lzdGVtIGluIHRoZSBiYWNrZ3JvdW5kIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMKK2ZpcnN0IG1vdW50ZWQuICBJZiB0aGUgb3B0aW9uIHZhbHVlIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIDEgdG8KK2VuYWJsZSBsYXp5IGlub2RlIHRhYmxlIHplcm9pbmcuCisuVFAKKy5CIGxhenlfam91cm5hbF9pbml0XGZSW1xmQj0gXGZJPDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XGZSXQorSWYgZW5hYmxlZCwgdGhlIGpvdXJuYWwgaW5vZGUgd2lsbCBub3QgYmUgZnVsbHkgemVyb2VkIG91dCBieQorLkJSIG1rZTJmcyAuCitUaGlzIHNwZWVkcyB1cCBmaWxlc3lzdGVtIGluaXRpYWxpemF0aW9uIG5vdGljZWFibHksIGJ1dCBjYXJyaWVzIHNvbWUKK3NtYWxsIHJpc2sgaWYgdGhlIHN5c3RlbSBjcmFzaGVzIGJlZm9yZSB0aGUgam91cm5hbCBoYXMgYmVlbiBvdmVyd3JpdHRlbgorZW50aXJlbHkgb25lIHRpbWUuICBJZiB0aGUgb3B0aW9uIHZhbHVlIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIDEgdG8KK2VuYWJsZSBsYXp5IGpvdXJuYWwgaW5vZGUgemVyb2luZy4KKy5UUAorLkJJIG51bV9iYWNrdXBfc2I9IDwwfDF8Mj4KK0lmIHRoZQorLkIgc3BhcnNlX3N1cGVyMgorZmlsZSBzeXN0ZW0gZmVhdHVyZSBpcyBlbmFibGVkIHRoaXMgb3B0aW9uIGNvbnRyb2xzIHdoZXRoZXIgdGhlcmUgd2lsbAorYmUgMCwgMSwgb3IgMiBiYWNrdXAgc3VwZXJibG9ja3MgY3JlYXRlZCBpbiB0aGUgZmlsZSBzeXN0ZW0uCisuVFAKKy5CIHBhY2tlZF9tZXRhX2Jsb2Nrc1xmUltcZkI9IFxmSTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxmUl0KK1BsYWNlIHRoZSBhbGxvY2F0aW9uIGJpdG1hcHMgYW5kIHRoZSBpbm9kZSB0YWJsZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorZGlzay4gIFRoaXMgb3B0aW9uIHJlcXVpcmVzIHRoYXQgdGhlIGZsZXhfYmcgZmlsZSBzeXN0ZW0gZmVhdHVyZSB0byBiZQorZW5hYmxlZCBpbiBvcmRlciBmb3IgaXQgdG8gaGF2ZSBlZmZlY3QsIGFuZCB3aWxsIGFsc28gY3JlYXRlIHRoZSBqb3VybmFsCithdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIHN5c3RlbS4gIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3IgZmxhc2gKK2RldmljZXMgdGhhdCB1c2UgU0xDIGZsYXNoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRpc2suCitJdCBhbHNvIG1heGltaXplcyB0aGUgcmFuZ2Ugb2YgY29udGlndW91cyBkYXRhIGJsb2Nrcywgd2hpY2gKK2NhbiBiZSB1c2VmdWwgZm9yIGNlcnRhaW4gc3BlY2lhbGl6ZWQgdXNlIGNhc2VzLCBzdWNoIGFzIHN1cHBvcnRlZAorU2hpbmdsZWQgRHJpdmVzLgorLlRQCisuQkkgcm9vdF9vd25lciBbPXVpZDpnaWRdCitTcGVjaWZ5IHRoZSBudW1lcmljIHVzZXIgYW5kIGdyb3VwIElEIG9mIHRoZSByb290IGRpcmVjdG9yeS4gIElmIG5vIFVJRDpHSUQKK2lzIHNwZWNpZmllZCwgdXNlIHRoZSB1c2VyIGFuZCBncm91cCBJRCBvZiB0aGUgdXNlciBydW5uaW5nIFxmQm1rZTJmc1xmUi4KK0luIFxmQm1rZTJmc1xmUiAxLjQyIGFuZCBlYXJsaWVyIHRoZSBVSUQgYW5kIEdJRCBvZiB0aGUgcm9vdCBkaXJlY3Rvcnkgd2VyZQorc2V0IGJ5IGRlZmF1bHQgdG8gdGhlIFVJRCBhbmQgR0lEIG9mIHRoZSB1c2VyIHJ1bm5pbmcgdGhlIG1rZTJmcyBjb21tYW5kLgorVGhlIFxmQnJvb3Rfb3duZXI9XGZSIG9wdGlvbiBhbGxvd3MgZXhwbGljaXRseSBzcGVjaWZ5aW5nIHRoZXNlIHZhbHVlcywKK2FuZCBhdm9pZCBzaWRlLWVmZmVjdHMgZm9yIHVzZXJzIHRoYXQgZG8gbm90IGV4cGVjdCB0aGUgY29udGVudHMgb2YgdGhlCitmaWxlc3lzdGVtIHRvIGNoYW5nZSBiYXNlZCBvbiB0aGUgdXNlciBydW5uaW5nIFxmQm1rZTJmc1xmUi4KKy5UUAorLkIgdGVzdF9mcworU2V0IGEgZmxhZyBpbiB0aGUgZmlsZXN5c3RlbSBzdXBlcmJsb2NrIGluZGljYXRpbmcgdGhhdCBpdCBtYXkgYmUKK21vdW50ZWQgdXNpbmcgZXhwZXJpbWVudGFsIGtlcm5lbCBjb2RlLCBzdWNoIGFzIHRoZSBleHQ0ZGV2IGZpbGVzeXN0ZW0uCisuVFAKKy5CSSBkaXNjYXJkCitBdHRlbXB0IHRvIGRpc2NhcmQgYmxvY2tzIGF0IG1rZnMgdGltZSAoZGlzY2FyZGluZyBibG9ja3MgaW5pdGlhbGx5IGlzIHVzZWZ1bAorb24gc29saWQgc3RhdGUgZGV2aWNlcyBhbmQgc3BhcnNlIC8gdGhpbi1wcm92aXNpb25lZCBzdG9yYWdlKS4gV2hlbiB0aGUgZGV2aWNlCithZHZlcnRpc2VzIHRoYXQgZGlzY2FyZCBhbHNvIHplcm9lcyBkYXRhIChhbnkgc3Vic2VxdWVudCByZWFkIGFmdGVyIHRoZSBkaXNjYXJkCithbmQgYmVmb3JlIHdyaXRlIHJldHVybnMgemVybyksIHRoZW4gbWFyayBhbGwgbm90LXlldC16ZXJvZWQgaW5vZGUgdGFibGVzIGFzCit6ZXJvZWQuIFRoaXMgc2lnbmlmaWNhbnRseSBzcGVlZHMgdXAgZmlsZXN5c3RlbSBpbml0aWFsaXphdGlvbi4gVGhpcyBpcyBzZXQKK2FzIGRlZmF1bHQuCisuVFAKKy5CSSBub2Rpc2NhcmQKK0RvIG5vdCBhdHRlbXB0IHRvIGRpc2NhcmQgYmxvY2tzIGF0IG1rZnMgdGltZS4KK0BRVU9UQV9NQU5fQ09NTUVOVEAuVFAKK0BRVU9UQV9NQU5fQ09NTUVOVEAuQkkgcXVvdGF0eXBlCitAUVVPVEFfTUFOX0NPTU1FTlRAU3BlY2lmeSB3aGljaCBxdW90YSB0eXBlICgndXNyJyBvciAnZ3JwJykgaXMgdG8gYmUKK0BRVU9UQV9NQU5fQ09NTUVOVEBpbml0aWFsaXplZC4gVGhpcyBvcHRpb24gaGFzIGVmZmVjdCBvbmx5IGlmIHRoZQorQFFVT1RBX01BTl9DT01NRU5UQC5CIHF1b3RhCitAUVVPVEFfTUFOX0NPTU1FTlRAZmVhdHVyZSBpcyBzZXQuIFdpdGhvdXQgdGhpcyBleHRlbmRlZCBvcHRpb24sIHRoZSBkZWZhdWx0CitAUVVPVEFfTUFOX0NPTU1FTlRAYmVoYXZpb3IgaXMgdG8gaW5pdGlhbGl6ZSBib3RoIHVzZXIgYW5kIGdyb3VwIHF1b3Rhcy4KKy5SRQorLlRQCisuQkkgXC1mICIgZnJhZ21lbnQtc2l6ZSIKK1NwZWNpZnkgdGhlIHNpemUgb2YgZnJhZ21lbnRzIGluIGJ5dGVzLgorLlRQCisuQiBcLUYKK0ZvcmNlCisuQiBta2UyZnMKK3RvIGNyZWF0ZSBhIGZpbGVzeXN0ZW0sIGV2ZW4gaWYgdGhlIHNwZWNpZmllZCBkZXZpY2UgaXMgbm90IGEgcGFydGl0aW9uCitvbiBhIGJsb2NrIHNwZWNpYWwgZGV2aWNlLCBvciBpZiBvdGhlciBwYXJhbWV0ZXJzIGRvIG5vdCBtYWtlIHNlbnNlLgorSW4gb3JkZXIgdG8gZm9yY2UKKy5CIG1rZTJmcwordG8gY3JlYXRlIGEgZmlsZXN5c3RlbSBldmVuIGlmIHRoZSBmaWxlc3lzdGVtIGFwcGVhcnMgdG8gYmUgaW4gdXNlCitvciBpcyBtb3VudGVkIChhIHRydWx5IGRhbmdlcm91cyB0aGluZyB0byBkbyksIHRoaXMgb3B0aW9uIG11c3QgYmUKK3NwZWNpZmllZCB0d2ljZS4KKy5UUAorLkJJIFwtZyAiIGJsb2Nrcy1wZXItZ3JvdXAiCitTcGVjaWZ5IHRoZSBudW1iZXIgb2YgYmxvY2tzIGluIGEgYmxvY2sgZ3JvdXAuICBUaGVyZSBpcyBnZW5lcmFsbHkgbm8KK3JlYXNvbiBmb3IgdGhlIHVzZXIgdG8gZXZlciBzZXQgdGhpcyBwYXJhbWV0ZXIsIGFzIHRoZSBkZWZhdWx0IGlzIG9wdGltYWwKK2ZvciB0aGUgZmlsZXN5c3RlbS4gIChGb3IgYWRtaW5pc3RyYXRvcnMgd2hvIGFyZSBjcmVhdGluZworZmlsZXN5c3RlbXMgb24gUkFJRCBhcnJheXMsIGl0IGlzIHByZWZlcmFibGUgdG8gdXNlIHRoZQorLkkgc3RyaWRlCitSQUlEIHBhcmFtZXRlciBhcyBwYXJ0IG9mIHRoZQorLkIgXC1FCitvcHRpb24gcmF0aGVyIHRoYW4gbWFuaXB1bGF0aW5nIHRoZSBudW1iZXIgb2YgYmxvY2tzIHBlciBncm91cC4pCitUaGlzIG9wdGlvbiBpcyBnZW5lcmFsbHkgdXNlZCBieSBkZXZlbG9wZXJzIHdobworYXJlIGRldmVsb3BpbmcgdGVzdCBjYXNlcy4KKy5JUAorSWYgdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgZW5hYmxlZCwgdGhlCisuQiBcLWcKK29wdGlvbiB3aWxsIHNwZWNpZnkgdGhlIG51bWJlciBvZiBjbHVzdGVycyBpbiBhIGJsb2NrIGdyb3VwLgorLlRQCisuQkkgXC1HICIgbnVtYmVyLW9mLWdyb3VwcyIKK1NwZWNpZnkgdGhlIG51bWJlciBvZiBibG9jayBncm91cHMgdGhhdCB3aWxsIGJlIHBhY2tlZCB0b2dldGhlciB0bworY3JlYXRlIGEgbGFyZ2VyIHZpcnR1YWwgYmxvY2sgZ3JvdXAgKG9yICJmbGV4X2JnIGdyb3VwIikgaW4gYW4KK2V4dDQgZmlsZXN5c3RlbS4gIFRoaXMgaW1wcm92ZXMgbWV0YS1kYXRhIGxvY2FsaXR5IGFuZCBwZXJmb3JtYW5jZQorb24gbWV0YS1kYXRhIGhlYXZ5IHdvcmtsb2Fkcy4gIFRoZSBudW1iZXIgb2YgZ3JvdXBzIG11c3QgYmUgYSBwb3dlcgorb2YgMiBhbmQgbWF5IG9ubHkgYmUgc3BlY2lmaWVkIGlmIHRoZSAKKy5CIGZsZXhfYmcKK2ZpbGVzeXN0ZW0gZmVhdHVyZSBpcyBlbmFibGVkLgorLlRQCisuQkkgXC1pICIgYnl0ZXMtcGVyLWlub2RlIgorU3BlY2lmeSB0aGUgYnl0ZXMvaW5vZGUgcmF0aW8uCisuQiBta2UyZnMKK2NyZWF0ZXMgYW4gaW5vZGUgZm9yIGV2ZXJ5CisuSSBieXRlcy1wZXItaW5vZGUKK2J5dGVzIG9mIHNwYWNlIG9uIHRoZSBkaXNrLiAgVGhlIGxhcmdlciB0aGUKKy5JIGJ5dGVzLXBlci1pbm9kZQorcmF0aW8sIHRoZSBmZXdlciBpbm9kZXMgd2lsbCBiZSBjcmVhdGVkLiAgVGhpcyB2YWx1ZSBnZW5lcmFsbHkgc2hvdWxkbid0CitiZSBzbWFsbGVyIHRoYW4gdGhlIGJsb2Nrc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbSwgc2luY2UgaW4gdGhhdCBjYXNlIG1vcmUKK2lub2RlcyB3b3VsZCBiZSBtYWRlIHRoYW4gY2FuIGV2ZXIgYmUgdXNlZC4gIEJlIHdhcm5lZCB0aGF0IGl0IGlzIG5vdAorcG9zc2libGUgdG8gY2hhbmdlIHRoaXMgcmF0aW8gb24gYSBmaWxlc3lzdGVtIGFmdGVyIGl0IGlzIGNyZWF0ZWQsIHNvIGJlCitjYXJlZnVsIGRlY2lkaW5nIHRoZSBjb3JyZWN0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlci4gIE5vdGUgdGhhdCByZXNpemluZworYSBmaWxlc3lzdGVtIGNoYW5nZXMgdGhlIG51bWVyIG9mIGlub2RlcyB0byBtYWludGFpbiB0aGlzIHJhdGlvLgorLlRQCisuQkkgXC1JICIgaW5vZGUtc2l6ZSIKK1NwZWNpZnkgdGhlIHNpemUgb2YgZWFjaCBpbm9kZSBpbiBieXRlcy4KK1RoZQorLkkgaW5vZGUtc2l6ZQordmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mIDIgbGFyZ2VyIG9yIGVxdWFsIHRvIDEyOC4gIFRoZSBsYXJnZXIgdGhlCisuSSBpbm9kZS1zaXplCit0aGUgbW9yZSBzcGFjZSB0aGUgaW5vZGUgdGFibGUgd2lsbCBjb25zdW1lLCBhbmQgdGhpcyByZWR1Y2VzIHRoZSB1c2FibGUKK3NwYWNlIGluIHRoZSBmaWxlc3lzdGVtIGFuZCBjYW4gYWxzbyBuZWdhdGl2ZWx5IGltcGFjdCBwZXJmb3JtYW5jZS4KK0l0IGlzIG5vdAorcG9zc2libGUgdG8gY2hhbmdlIHRoaXMgdmFsdWUgYWZ0ZXIgdGhlIGZpbGVzeXN0ZW0gaXMgY3JlYXRlZC4KKy5JUAorSW4ga2VybmVscyBhZnRlciAyLjYuMTAgYW5kIHNvbWUKK2VhcmxpZXIgdmVuZG9yIGtlcm5lbHMgaXQgaXMgcG9zc2libGUgdG8gdXRpbGl6ZSBpbm9kZXMgbGFyZ2VyIHRoYW4KKzEyOCBieXRlcyB0byBzdG9yZQorZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgaW1wcm92ZWQgcGVyZm9ybWFuY2UuCitFeHRlbmRlZCBhdHRyaWJ1dGVzCitzdG9yZWQgaW4gbGFyZ2UgaW5vZGVzIGFyZSBub3QgdmlzaWJsZSB3aXRoIG9sZGVyIGtlcm5lbHMsIGFuZCBzdWNoCitmaWxlc3lzdGVtcyB3aWxsIG5vdCBiZSBtb3VudGFibGUgd2l0aCAyLjQga2VybmVscyBhdCBhbGwuICAKKy5JUAorVGhlIGRlZmF1bHQgaW5vZGUgc2l6ZSBpcyBjb250cm9sbGVkIGJ5IHRoZQorLkJSIG1rZTJmcy5jb25mICg1KQorZmlsZS4gIEluIHRoZQorLkIgbWtlMmZzLmNvbmYKK2ZpbGUgc2hpcHBlZCB3aXRoIGUyZnNwcm9ncywgdGhlIGRlZmF1bHQgaW5vZGUgc2l6ZSBpcyAyNTYgYnl0ZXMgZm9yCittb3N0IGZpbGUgc3lzdGVtcywgZXhjZXB0IGZvciBzbWFsbCBmaWxlIHN5c3RlbXMgd2hlcmUgdGhlIGlub2RlIHNpemUKK3dpbGwgYmUgMTI4IGJ5dGVzLgorLlRQCisuQiBcLWoKK0NyZWF0ZSB0aGUgZmlsZXN5c3RlbSB3aXRoIGFuIGV4dDMgam91cm5hbC4gIElmIHRoZQorLkIgXC1KCitvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgam91cm5hbCBwYXJhbWV0ZXJzIHdpbGwgYmUgdXNlZCB0bworY3JlYXRlIGFuIGFwcHJvcHJpYXRlbHkgc2l6ZWQgam91cm5hbCAoZ2l2ZW4gdGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW0pCitzdG9yZWQgd2l0aGluIHRoZSBmaWxlc3lzdGVtLiAgTm90ZSB0aGF0IHlvdSBtdXN0IGJlIHVzaW5nIGEga2VybmVsCit3aGljaCBoYXMgZXh0MyBzdXBwb3J0IGluIG9yZGVyIHRvIGFjdHVhbGx5IG1ha2UgdXNlIG9mIHRoZSBqb3VybmFsLgorLlRQCisuQkkgXC1KICIgam91cm5hbC1vcHRpb25zIgorQ3JlYXRlIHRoZSBleHQzIGpvdXJuYWwgdXNpbmcgb3B0aW9ucyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZS4KK0pvdXJuYWwgb3B0aW9ucyBhcmUgY29tbWEKK3NlcGFyYXRlZCwgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHVzaW5nIHRoZSBlcXVhbHMgKCc9JykgIHNpZ24uCitUaGUgZm9sbG93aW5nIGpvdXJuYWwgb3B0aW9ucyBhcmUgc3VwcG9ydGVkOgorLlJTIDEuMmkKKy5UUAorLkJJIHNpemU9IGpvdXJuYWwtc2l6ZQorQ3JlYXRlIGFuIGludGVybmFsIGpvdXJuYWwgKGkuZS4sIHN0b3JlZCBpbnNpZGUgdGhlIGZpbGVzeXN0ZW0pIG9mIHNpemUKKy5JIGpvdXJuYWwtc2l6ZQorbWVnYWJ5dGVzLgorVGhlIHNpemUgb2YgdGhlIGpvdXJuYWwgbXVzdCBiZSBhdCBsZWFzdCAxMDI0IGZpbGVzeXN0ZW0gYmxvY2tzCisoaS5lLiwgMU1CIGlmIHVzaW5nIDFrIGJsb2NrcywgNE1CIGlmIHVzaW5nIDRrIGJsb2NrcywgZXRjLikKK2FuZCBtYXkgYmUgbm8gbW9yZSB0aGFuIDEwLDI0MCwwMDAgZmlsZXN5c3RlbSBibG9ja3Mgb3IgaGFsZiB0aGUgdG90YWwKK2ZpbGUgc3lzdGVtIHNpemUgKHdoaWNoZXZlciBpcyBzbWFsbGVyKQorLlRQCisuQkkgbG9jYXRpb24gPWpvdXJuYWwtbG9jYXRpb24KK1NwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBqb3VybmFsLiAgVGhlIGFyZ3VtZW50CisuSSBqb3VybmFsLWxvY2F0aW9uCitjYW4gZWl0aGVyIGJlIHNwZWNpZmllZCBhcyBhIGJsb2NrIG51bWJlciwgb3IgaWYgdGhlIG51bWJlciBoYXMgYSB1bml0cworc3VmZml4IChlLmcuLCAnTScsICdHJywgZXRjLikgaW50ZXJwcmV0IGl0IGFzIHRoZSBvZmZzZXQgZnJvbSB0aGUKK2JlZ2lubmluZyBvZiB0aGUgZmlsZSBzeXN0ZW0uCitASkRFVkAuVFAKK0BKREVWQC5CSSBkZXZpY2U9IGV4dGVybmFsLWpvdXJuYWwKK0BKREVWQEF0dGFjaCB0aGUgZmlsZXN5c3RlbSB0byB0aGUgam91cm5hbCBibG9jayBkZXZpY2UgbG9jYXRlZCBvbgorQEpERVZALklSIGV4dGVybmFsLWpvdXJuYWwgLgorQEpERVZAVGhlIGV4dGVybmFsCitASkRFVkBqb3VybmFsIG11c3QgYWxyZWFkeSBoYXZlIGJlZW4gY3JlYXRlZCB1c2luZyB0aGUgY29tbWFuZAorQEpERVZALklQCitASkRFVkAuQiBta2UyZnMgLU8gam91cm5hbF9kZXYKK0BKREVWQC5JIGV4dGVybmFsLWpvdXJuYWwKK0BKREVWQC5JUAorQEpERVZATm90ZSB0aGF0CitASkRFVkAuSSBleHRlcm5hbC1qb3VybmFsCitASkRFVkBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIHdpdGggdGhlCitASkRFVkBzYW1lIGJsb2NrIHNpemUgYXMgdGhlIG5ldyBmaWxlc3lzdGVtLgorQEpERVZASW4gYWRkaXRpb24sIHdoaWxlIHRoZXJlIGlzIHN1cHBvcnQgZm9yIGF0dGFjaGluZworQEpERVZAbXVsdGlwbGUgZmlsZXN5c3RlbXMgdG8gYSBzaW5nbGUgZXh0ZXJuYWwgam91cm5hbCwKK0BKREVWQHRoZSBMaW51eCBrZXJuZWwgYW5kCitASkRFVkAuQlIgZTJmc2NrICg4KQorQEpERVZAZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0IHNoYXJlZCBleHRlcm5hbCBqb3VybmFscyB5ZXQuCitASkRFVkAuSVAKK0BKREVWQEluc3RlYWQgb2Ygc3BlY2lmeWluZyBhIGRldmljZSBuYW1lIGRpcmVjdGx5LAorQEpERVZALkkgZXh0ZXJuYWwtam91cm5hbAorQEpERVZAY2FuIGFsc28gYmUgc3BlY2lmaWVkIGJ5IGVpdGhlcgorQEpERVZALkJJIExBQkVMPSBsYWJlbAorQEpERVZAb3IKK0BKREVWQC5CSSBVVUlEPSBVVUlECitASkRFVkB0byBsb2NhdGUgdGhlIGV4dGVybmFsIGpvdXJuYWwgYnkgZWl0aGVyIHRoZSB2b2x1bWUgbGFiZWwgb3IgVVVJRAorQEpERVZAc3RvcmVkIGluIHRoZSBleHQyIHN1cGVyYmxvY2sgYXQgdGhlIHN0YXJ0IG9mIHRoZSBqb3VybmFsLiAgVXNlCitASkRFVkAuQlIgZHVtcGUyZnMgKDgpCitASkRFVkB0byBkaXNwbGF5IGEgam91cm5hbCBkZXZpY2UncyB2b2x1bWUgbGFiZWwgYW5kIFVVSUQuICBTZWUgYWxzbyB0aGUKK0BKREVWQC5CIC1MCitASkRFVkBvcHRpb24gb2YKK0BKREVWQC5CUiB0dW5lMmZzICg4KS4KKy5SRQorQEpERVZALklQCitASkRFVkBPbmx5IG9uZSBvZiB0aGUKK0BKREVWQC5CUiBzaXplICIgb3IgIiBkZXZpY2UKK0BKREVWQG9wdGlvbnMgY2FuIGJlIGdpdmVuIGZvciBhIGZpbGVzeXN0ZW0uCisuVFAKKy5CSSBcLWwgIiBmaWxlbmFtZSIKK1JlYWQgdGhlIGJhZCBibG9ja3MgbGlzdCBmcm9tCisuSVIgZmlsZW5hbWUgLgorTm90ZSB0aGF0IHRoZSBibG9jayBudW1iZXJzIGluIHRoZSBiYWQgYmxvY2sgbGlzdCBtdXN0IGJlIGdlbmVyYXRlZAordXNpbmcgdGhlIHNhbWUgYmxvY2sgc2l6ZSBhcyB1c2VkIGJ5CisuQlIgbWtlMmZzIC4KK0FzIGEgcmVzdWx0LCB0aGUKKy5CIFwtYworb3B0aW9uIHRvCisuQiBta2UyZnMKK2lzIGEgbXVjaCBzaW1wbGVyIGFuZCBsZXNzIGVycm9yLXByb25lIG1ldGhvZCBvZiBjaGVja2luZyBhIGRpc2sgZm9yIGJhZAorYmxvY2tzIGJlZm9yZSBmb3JtYXR0aW5nIGl0LCBhcworLkIgbWtlMmZzCit3aWxsIGF1dG9tYXRpY2FsbHkgcGFzcyB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzIHRvIHRoZQorLkIgYmFkYmxvY2tzCitwcm9ncmFtLgorLlRQCisuQkkgXC1MICIgbmV3LXZvbHVtZS1sYWJlbCIKK1NldCB0aGUgdm9sdW1lIGxhYmVsIGZvciB0aGUgZmlsZXN5c3RlbSB0bworLklSIG5ldy12b2x1bWUtbGFiZWwgLgorVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZQordm9sdW1lIGxhYmVsIGlzIDE2IGJ5dGVzLgorLlRQCisuQkkgXC1tICIgcmVzZXJ2ZWQtYmxvY2tzLXBlcmNlbnRhZ2UiCitTcGVjaWZ5IHRoZSBwZXJjZW50YWdlIG9mIHRoZSBmaWxlc3lzdGVtIGJsb2NrcyByZXNlcnZlZCBmb3IKK3RoZSBzdXBlci11c2VyLiAgVGhpcyBhdm9pZHMgZnJhZ21lbnRhdGlvbiwgYW5kIGFsbG93cyByb290LW93bmVkCitkYWVtb25zLCBzdWNoIGFzCisuQlIgc3lzbG9nZCAoOCksCit0byBjb250aW51ZSB0byBmdW5jdGlvbiBjb3JyZWN0bHkgYWZ0ZXIgbm9uLXByaXZpbGVnZWQgcHJvY2Vzc2VzIGFyZQorcHJldmVudGVkIGZyb20gd3JpdGluZyB0byB0aGUgZmlsZXN5c3RlbS4gIFRoZSBkZWZhdWx0IHBlcmNlbnRhZ2UKK2lzIDUlLgorLlRQCisuQkkgXC1NICIgbGFzdC1tb3VudGVkLWRpcmVjdG9yeSIKK1NldCB0aGUgbGFzdCBtb3VudGVkIGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzeXN0ZW0uICBUaGlzIG1pZ2h0IGJlIHVzZWZ1bAorZm9yIHRoZSBzYWtlIG9mIHV0aWxpdGllcyB0aGF0IGtleSBvZmYgb2YgdGhlIGxhc3QgbW91bnRlZCBkaXJlY3RvcnkgdG8KK2RldGVybWluZSB3aGVyZSB0aGUgZmlsZXN5c3RlbSBzaG91bGQgYmUgbW91bnRlZC4KKy5UUAorLkIgXC1uCitDYXVzZXMKKy5CIG1rZTJmcwordG8gbm90IGFjdHVhbGx5IGNyZWF0ZSBhIGZpbGVzeXN0ZW0sIGJ1dCBkaXNwbGF5IHdoYXQgaXQKK3dvdWxkIGRvIGlmIGl0IHdlcmUgdG8gY3JlYXRlIGEgZmlsZXN5c3RlbS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8KK2RldGVybWluZSB0aGUgbG9jYXRpb24gb2YgdGhlIGJhY2t1cCBzdXBlcmJsb2NrcyBmb3IgYSBwYXJ0aWN1bGFyCitmaWxlc3lzdGVtLCBzbyBsb25nIGFzIHRoZQorLkIgbWtlMmZzCitwYXJhbWV0ZXJzIHRoYXQgd2VyZSBwYXNzZWQgd2hlbiB0aGUKK2ZpbGVzeXN0ZW0gd2FzIG9yaWdpbmFsbHkgY3JlYXRlZCBhcmUgdXNlZCBhZ2Fpbi4gIChXaXRoIHRoZQorLkIgXC1uCitvcHRpb24gYWRkZWQsIG9mIGNvdXJzZSEpCisuVFAKKy5CSSBcLU4gIiBudW1iZXItb2YtaW5vZGVzIgorT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGNhbGN1bGF0aW9uIG9mIHRoZSBudW1iZXIgb2YgaW5vZGVzIHRoYXQgc2hvdWxkIGJlCityZXNlcnZlZCBmb3IgdGhlIGZpbGVzeXN0ZW0gKHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgYmxvY2tzIGFuZAordGhlCisuSSBieXRlcy1wZXItaW5vZGUKK3JhdGlvKS4gIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlIG51bWJlcgorb2YgZGVzaXJlZCBpbm9kZXMgZGlyZWN0bHkuCisuVFAKKy5CSSBcLW8gIiBjcmVhdG9yLW9zIgorT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAiY3JlYXRvciBvcGVyYXRpbmcgc3lzdGVtIiBmaWVsZCBvZiB0aGUKK2ZpbGVzeXN0ZW0uICBUaGUgY3JlYXRvciBmaWVsZCBpcyBzZXQgYnkgZGVmYXVsdCB0byB0aGUgbmFtZSBvZiB0aGUgT1MgdGhlCisuQiBta2UyZnMKK2V4ZWN1dGFibGUgd2FzIGNvbXBpbGVkIGZvci4KKy5UUAorLkIgIlwtTyBcZlJbXl1cZklmZWF0dXJlXGZSWywuLi5dIgorQ3JlYXRlIGEgZmlsZXN5c3RlbSB3aXRoIHRoZSBnaXZlbiBmZWF0dXJlcyAoZmlsZXN5c3RlbSBvcHRpb25zKSwKK292ZXJyaWRpbmcgdGhlIGRlZmF1bHQgZmlsZXN5c3RlbSBvcHRpb25zLiAgVGhlIGZlYXR1cmVzIHRoYXQgYXJlCitlbmFibGVkIGJ5IGRlZmF1bHQgYXJlIHNwZWNpZmllZCBieSB0aGUKKy5JIGJhc2VfZmVhdHVyZXMKK3JlbGF0aW9uLCBlaXRoZXIgaW4gdGhlCisuSSBbZGVmYXVsdHNdCitzZWN0aW9uIGluIHRoZQorLkIgL2V0Yy9ta2UyZnMuY29uZgorY29uZmlndXJhdGlvbiBmaWxlLAorb3IgaW4gdGhlCisuSSBbZnNfdHlwZXNdCitzdWJzZWN0aW9ucyBmb3IgdGhlIHVzYWdlIHR5cGVzIGFzIHNwZWNpZmllZCBieSB0aGUKKy5CIFwtVAorb3B0aW9uLCBmdXJ0aGVyIG1vZGlmaWVkIGJ5IHRoZQorLkkgZmVhdHVyZXMKK3JlbGF0aW9uIGZvdW5kIGluIHRoZQorLkkgW2ZzX3R5cGVzXQorc3Vic2VjdGlvbnMgZm9yIHRoZSBmaWxlc3lzdGVtIGFuZCB1c2FnZSB0eXBlcy4gIFNlZSB0aGUKKy5CUiBta2UyZnMuY29uZiAoNSkKK21hbnVhbCBwYWdlIGZvciBtb3JlIGRldGFpbHMuCitUaGUgZmlsZXN5c3RlbSB0eXBlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBmb3VuZCBpbiB0aGUKKy5JIFtmc190eXBlc10KK3NlY3Rpb24gd2lsbCBvdmVycmlkZSB0aGUgZ2xvYmFsIGRlZmF1bHQgZm91bmQgaW4KKy5JUiBbZGVmYXVsdHNdIC4KKy5zcAorVGhlIGZpbGVzeXN0ZW0gZmVhdHVyZSBzZXQgd2lsbCBiZSBmdXJ0aGVyIGVkaXRlZAordXNpbmcgZWl0aGVyIHRoZSBmZWF0dXJlIHNldCBzcGVjaWZpZWQgYnkgdGhpcyBvcHRpb24sCitvciBpZiB0aGlzIG9wdGlvbiBpcyBub3QgZ2l2ZW4sIGJ5IHRoZQorLkkgZGVmYXVsdF9mZWF0dXJlcworcmVsYXRpb24gZm9yIHRoZSBmaWxlc3lzdGVtIHR5cGUgYmVpbmcgY3JlYXRlZCwgb3IgaW4gdGhlCisuSSBbZGVmYXVsdHNdCitzZWN0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisuc3AKK1RoZSBmaWxlc3lzdGVtIGZlYXR1cmUgc2V0IGlzIGNvbXByaXNlZCBvZiBhIGxpc3Qgb2YgZmVhdHVyZXMsIHNlcGFyYXRlZAorYnkgY29tbWFzLCB0aGF0IGFyZSB0byBiZSBlbmFibGVkLiAgVG8gZGlzYWJsZSBhIGZlYXR1cmUsIHNpbXBseQorcHJlZml4IHRoZSBmZWF0dXJlIG5hbWUgd2l0aCBhIGNhcmV0ICgnXicpIGNoYXJhY3Rlci4KK0ZlYXR1cmVzIHdpdGggZGVwZW5kZW5jaWVzIHdpbGwgbm90IGJlIHJlbW92ZWQgc3VjY2Vzc2Z1bGx5LgorVGhlIHBzZXVkby1maWxlc3lzdGVtIGZlYXR1cmUgIm5vbmUiIHdpbGwgY2xlYXIgYWxsIGZpbGVzeXN0ZW0gZmVhdHVyZXMuCisuVFAKK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmZWF0dXJlcyB3aGljaCBjYW4gYmUgc2V0LCBwbGVhc2Ugc2VlCit0aGUgbWFudWFsIHBhZ2UKKy5CUiBleHQ0ICg1KS4KKy5UUAorLkIgXC1xCitRdWlldCBleGVjdXRpb24uICBVc2VmdWwgaWYKKy5CIG1rZTJmcworaXMgcnVuIGluIGEgc2NyaXB0LgorLlRQCisuQkkgXC1yICIgcmV2aXNpb24iCitTZXQgdGhlIGZpbGVzeXN0ZW0gcmV2aXNpb24gZm9yIHRoZSBuZXcgZmlsZXN5c3RlbS4gIE5vdGUgdGhhdCAxLjIKK2tlcm5lbHMgb25seSBzdXBwb3J0IHJldmlzaW9uIDAgZmlsZXN5c3RlbXMuICBUaGUgZGVmYXVsdCBpcyB0bworY3JlYXRlIHJldmlzaW9uIDEgZmlsZXN5c3RlbXMuCisuVFAKKy5CIFwtUworV3JpdGUgc3VwZXJibG9jayBhbmQgZ3JvdXAgZGVzY3JpcHRvcnMgb25seS4gIFRoaXMgaXMgdXNlZnVsIGlmIGFsbCBvZgordGhlIHN1cGVyYmxvY2sgYW5kIGJhY2t1cCBzdXBlcmJsb2NrcyBhcmUgY29ycnVwdGVkLCBhbmQgYSBsYXN0LWRpdGNoCityZWNvdmVyeSBtZXRob2QgaXMgZGVzaXJlZC4gIEl0IGNhdXNlcworLkIgbWtlMmZzCit0byByZWluaXRpYWxpemUgdGhlCitzdXBlcmJsb2NrIGFuZCBncm91cCBkZXNjcmlwdG9ycywgd2hpbGUgbm90IHRvdWNoaW5nIHRoZSBpbm9kZSB0YWJsZQorYW5kIHRoZSBibG9jayBhbmQgaW5vZGUgYml0bWFwcy4gIFRoZQorLkIgZTJmc2NrCitwcm9ncmFtIHNob3VsZCBiZSBydW4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcyBvcHRpb24gaXMgdXNlZCwgYW5kIHRoZXJlCitpcyBubyBndWFyYW50ZWUgdGhhdCBhbnkgZGF0YSB3aWxsIGJlIHNhbHZhZ2VhYmxlLiAgSXQgaXMgY3JpdGljYWwgdG8KK3NwZWNpZnkgdGhlIGNvcnJlY3QgZmlsZXN5c3RlbSBibG9ja3NpemUgd2hlbiB1c2luZyB0aGlzIG9wdGlvbiwKK29yIHRoZXJlIGlzIG5vIGNoYW5jZSBvZiByZWNvdmVyeS4KKy5cIiAuVFAKKy5cIiAuQkkgXC10ICIgdGVzdCIKKy5cIiBDaGVjayB0aGUgZGV2aWNlIGZvciBiYWQgYmxvY2tzIGJlZm9yZSBjcmVhdGluZyB0aGUgZmlsZSBzeXN0ZW0KKy5cIiB1c2luZyB0aGUgc3BlY2lmaWVkIHRlc3QuCisuVFAKKy5CSSBcLXQgIiBmcy10eXBlIgorU3BlY2lmeSB0aGUgZmlsZXN5c3RlbSB0eXBlIChpLmUuLCBleHQyLCBleHQzLCBleHQ0LCBldGMuKSB0aGF0IGlzCit0byBiZSBjcmVhdGVkLgorSWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwKKy5CIG1rZTJmcword2lsbCBwaWNrIGEgZGVmYXVsdCBlaXRoZXIgdmlhIGhvdwordGhlIGNvbW1hbmQgd2FzIHJ1biAoZm9yIGV4YW1wbGUsIHVzaW5nIGEgbmFtZSBvZiB0aGUgZm9ybSBta2ZzLmV4dDIsCitta2ZzLmV4dDMsIGV0Yy4pIG9yIHZpYSBhIGRlZmF1bHQgYXMgZGVmaW5lZCBieSB0aGUKKy5CIC9ldGMvbWtlMmZzLmNvbmYKK2ZpbGUuICAgVGhpcyBvcHRpb24gY29udHJvbHMgd2hpY2ggZmlsZXN5c3RlbSBvcHRpb25zIGFyZSB1c2VkIGJ5CitkZWZhdWx0LCBiYXNlZCBvbiB0aGUKKy5CIGZzdHlwZXMKK2NvbmZpZ3VyYXRpb24gc3RhbnphIGluCisuQlIgL2V0Yy9ta2UyZnMuY29uZiAuCisuc3AKK0lmIHRoZQorLkIgXC1PCitvcHRpb24gaXMgdXNlZCB0byBleHBsaWNpdGx5IGFkZCBvciByZW1vdmUgZmlsZXN5c3RlbSBvcHRpb25zIHRoYXQKK3Nob3VsZCBiZSBzZXQgaW4gdGhlIG5ld2x5IGNyZWF0ZWQgZmlsZXN5c3RlbSwgdGhlCityZXN1bHRpbmcgZmlsZXN5c3RlbSBtYXkgbm90IGJlIHN1cHBvcnRlZCBieSB0aGUgcmVxdWVzdGVkCisuSVIgZnMtdHlwZSAuCisoZS5nLiwgIlxmQm1rZTJmcyBcLXQgZXh0MyBcLU8gZXh0ZW50IC9kZXYvc2RYWFxmUiIgd2lsbCBjcmVhdGUgYQorZmlsZXN5c3RlbSB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGV4dDMgaW1wbGVtZW50YXRpb24gYXMgZm91bmQgaW4KK3RoZSBMaW51eCBrZXJuZWw7IGFuZCAiXGZCbWtlMmZzIFwtdCBleHQzIFwtTyBeaGFzX2pvdXJuYWwgL2Rldi9oZFhYXGZSIgord2lsbCBjcmVhdGUgYSBmaWxlc3lzdGVtIHRoYXQgZG9lcyBub3QgaGF2ZSBhIGpvdXJuYWwgYW5kIGhlbmNlIHdpbGwgbm90CitiZSBzdXBwb3J0ZWQgYnkgdGhlIGV4dDMgZmlsZXN5c3RlbSBjb2RlIGluIHRoZSBMaW51eCBrZXJuZWwuKQorLlRQCisuQkkgXC1UICIgdXNhZ2UtdHlwZVssLi4uXSIKK1NwZWNpZnkgaG93IHRoZSBmaWxlc3lzdGVtIGlzIGdvaW5nIHRvIGJlIHVzZWQsIHNvIHRoYXQKKy5CIG1rZTJmcworY2FuIGNob29zZSBvcHRpbWFsIGZpbGVzeXN0ZW0gcGFyYW1ldGVycyBmb3IgdGhhdCB1c2UuICBUaGUgdXNhZ2UKK3R5cGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBhcmUgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlCisuQlIgL2V0Yy9ta2UyZnMuY29uZiAuCitUaGUgdXNlciBtYXkgc3BlY2lmeSBvbmUgb3IgbW9yZSB1c2FnZSB0eXBlcwordXNpbmcgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4KKy5zcAorSWYgdGhpcyBvcHRpb24gaXMgaXMgbm90IHNwZWNpZmllZCwKKy5CIG1rZTJmcword2lsbCBwaWNrIGEgc2luZ2xlIGRlZmF1bHQgdXNhZ2UgdHlwZSBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbSB0bworYmUgY3JlYXRlZC4gIElmIHRoZSBmaWxlc3lzdGVtIHNpemUgaXMgbGVzcyB0aGFuIDMgbWVnYWJ5dGVzLAorLkIgbWtlMmZzCit3aWxsIHVzZSB0aGUgZmlsZXN5c3RlbSB0eXBlCisuSVIgZmxvcHB5IC4KK0lmIHRoZSBmaWxlc3lzdGVtIHNpemUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDMgYnV0IGxlc3MgdGhhbgorNTEyIG1lZ2FieXRlcywKKy5CUiBta2UyZnMgKDgpCit3aWxsIHVzZSB0aGUgZmlsZXN5c3RlbSB0eXBlCisuSVIgc21hbGwgLgorSWYgdGhlIGZpbGVzeXN0ZW0gc2l6ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gNCB0ZXJhYnl0ZXMgYnV0IGxlc3MgdGhhbgorMTYgdGVyYWJ5dGVzLAorLkJSIG1rZTJmcyAoOCkKK3dpbGwgdXNlIHRoZSBmaWxlc3lzdGVtIHR5cGUKKy5JUiBiaWcgLgorSWYgdGhlIGZpbGVzeXN0ZW0gc2l6ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMTYgdGVyYWJ5dGVzLAorLkJSIG1rZTJmcyAoOCkKK3dpbGwgdXNlIHRoZSBmaWxlc3lzdGVtIHR5cGUKKy5JUiBodWdlIC4KK090aGVyd2lzZSwKKy5CUiBta2UyZnMgKDgpCit3aWxsIHVzZSB0aGUgZGVmYXVsdCBmaWxlc3lzdGVtIHR5cGUKKy5JUiBkZWZhdWx0IC4KKy5UUAorLkJJIFwtVSAiIFVVSUQiCitDcmVhdGUgdGhlIGZpbGVzeXN0ZW0gd2l0aCB0aGUgc3BlY2lmaWVkIFVVSUQuCisuVFAKKy5CIFwtdgorVmVyYm9zZSBleGVjdXRpb24uCisuVFAKKy5CIFwtVgorUHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyIG9mCisuQiBta2UyZnMKK2FuZCBleGl0LgorLlNIIEVOVklST05NRU5UCisuVFAKKy5CSSBNS0UyRlNfU1lOQworSWYgc2V0IHRvIG5vbi16ZXJvIGludGVnZXIgdmFsdWUsIGl0cyB2YWx1ZSBpcyB1c2VkIHRvIGRldGVybWluZSBob3cgb2Z0ZW4KKy5CUiBzeW5jICgyKQoraXMgY2FsbGVkIGR1cmluZyBpbm9kZSB0YWJsZSBpbml0aWFsaXphdGlvbi4KKy5UUAorLkJJIE1LRTJGU19DT05GSUcKK0RldGVybWluZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgKHNlZQorLkJSIG1rZTJmcy5jb25mICg1KSkuCisuVFAKKy5CSSBNS0UyRlNfRklSU1RfTUVUQV9CRworSWYgc2V0IHRvIG5vbi16ZXJvIGludGVnZXIgdmFsdWUsIGl0cyB2YWx1ZSBpcyB1c2VkIHRvIGRldGVybWluZSBmaXJzdCBtZXRhCitibG9jayBncm91cC4gVGhpcyBpcyBtb3N0bHkgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKy5UUAorLkJJIE1LRTJGU19ERVZJQ0VfU0VDVFNJWkUKK0lmIHNldCB0byBub24temVybyBpbnRlZ2VyIHZhbHVlLCBpdHMgdmFsdWUgaXMgdXNlZCB0byBkZXRlcm1pbmUgcGh5c2ljYWwKK3NlY3RvciBzaXplIG9mIHRoZQorLklSIGRldmljZSAuCisuVFAKKy5CSSBNS0UyRlNfU0tJUF9DSEVDS19NU0cKK0lmIHNldCwgZG8gbm90IHNob3cgdGhlIG1lc3NhZ2Ugb2YgZmlsZXN5c3RlbSBhdXRvbWF0aWMgY2hlY2sgY2F1c2VkIGJ5Cittb3VudCBjb3VudCBvciBjaGVjayBpbnRlcnZhbC4KKy5TSCBBVVRIT1IKK1RoaXMgdmVyc2lvbiBvZgorLkIgbWtlMmZzCitoYXMgYmVlbiB3cml0dGVuIGJ5IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+LgorLlNIIEJVR1MKKy5CIG1rZTJmcworYWNjZXB0cyB0aGUKKy5CIFwtZgorb3B0aW9uIGJ1dCBjdXJyZW50bHkgaWdub3JlcyBpdCBiZWNhdXNlIHRoZSBzZWNvbmQKK2V4dGVuZGVkIGZpbGUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnRzIHlldC4KKy5icgorVGhlcmUgbWF5IGJlIG90aGVyIG9uZXMuICBQbGVhc2UsIHJlcG9ydCB0aGVtIHRvIHRoZSBhdXRob3IuCisuU0ggQVZBSUxBQklMSVRZCisuQiBta2UyZnMKK2lzIHBhcnQgb2YgdGhlIGUyZnNwcm9ncyBwYWNrYWdlIGFuZCBpcyBhdmFpbGFibGUgZnJvbQoraHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQuCisuU0ggU0VFIEFMU08KKy5CUiBta2UyZnMuY29uZiAoNSksCisuQlIgYmFkYmxvY2tzICg4KSwKKy5CUiBkdW1wZTJmcyAoOCksCisuQlIgZTJmc2NrICg4KSwKKy5CUiB0dW5lMmZzICg4KSwKKy5CUiBleHQ0ICg1KQpkaWZmIC0tZ2l0IGEvbWlzYy9ta2UyZnMuYyBiL21pc2MvbWtlMmZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0ZTYyZQotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvbWtlMmZzLmMKQEAgLTAsMCArMSwyOTQ0IEBACisvKgorICogbWtlMmZzLmMgLSBNYWtlIGEgZXh0MmZzIGZpbGVzeXN0ZW0uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorICogCTIwMDMsIDIwMDQsIDIwMDUgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKy8qIFVzYWdlOiBta2UyZnMgW29wdGlvbnNdIGRldmljZQorICoKKyAqIFRoZSBkZXZpY2UgbWF5IGJlIGEgYmxvY2sgZGV2aWNlIG9yIGEgaW1hZ2Ugb2Ygb25lLCBidXQgdGhpcyBpc24ndAorICogZW5mb3JjZWQgKGJ1dCBpdCdzIG5vdCBtdWNoIGZ1biBvbiBhIGNoYXJhY3RlciBkZXZpY2UgOi0pLgorICovCisKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAgLyogZm9yIGluY2x1c2lvbiBvZiBQQVRIX01BWCBpbiBTb2xhcmlzICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIF9fbGludXhfXworI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZGVmaW5lIEtFUk5FTF9WRVJTSU9OKGEsYixjKSAoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQorI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGJsa2lkL2Jsa2lkLmg+CisKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyZnNQLmgiCisjaW5jbHVkZSAiZXQvY29tX2Vyci5oIgorI2luY2x1ZGUgInV1aWQvdXVpZC5oIgorI2luY2x1ZGUgImUycC9lMnAuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgInByb2ZpbGUuaCIKKyNpbmNsdWRlICJwcm9mX2Vyci5oIgorI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKyNpbmNsdWRlICJubHMtZW5hYmxlLmgiCisjaW5jbHVkZSAicXVvdGEvcXVvdGFpby5oIgorI2luY2x1ZGUgIm1rZTJmcy5oIgorCisjZGVmaW5lIFNUUklERV9MRU5HVEggOAorCisjZGVmaW5lIE1BWF8zMl9OVU0gKCgoKHVuc2lnbmVkIGxvbmcgbG9uZykgMSkgPDwgMzIpIC0gMSkKKworI2lmbmRlZiBfX3NwYXJjX18KKyNkZWZpbmUgWkFQX0JPT1RCTE9DSworI2VuZGlmCisKKyNkZWZpbmUgRElTQ0FSRF9TVEVQX01CCQkoMjA0OCkKKworZXh0ZXJuIGludCBpc2F0dHkoaW50KTsKK2V4dGVybiBGSUxFICpmcG9wZW4oY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICptb2RlKTsKKworY29uc3QgY2hhciAqIHByb2dyYW1fbmFtZSA9ICJta2UyZnMiOworc3RhdGljIGNvbnN0IGNoYXIgKiBkZXZpY2VfbmFtZSAvKiA9IE5VTEwgKi87CisKKy8qIENvbW1hbmQgbGluZSBvcHRpb25zICovCitzdGF0aWMgaW50CWNmbGFnOworaW50CXZlcmJvc2U7CitpbnQJcXVpZXQ7CitzdGF0aWMgaW50CXN1cGVyX29ubHk7CitzdGF0aWMgaW50CWRpc2NhcmQgPSAxOwkvKiBhdHRlbXB0IHRvIGRpc2NhcmQgZGV2aWNlIGJlZm9yZSBmcyBjcmVhdGlvbiAqLworc3RhdGljIGludAlkaXJlY3RfaW87CitzdGF0aWMgaW50CWZvcmNlOworc3RhdGljIGludAlub2FjdGlvbjsKK3N0YXRpYyBpbnQJbnVtX2JhY2t1cHMgPSAyOyAvKiBudW1iZXIgb2YgYmFja3VwIGJnJ3MgZm9yIHNwYXJzZV9zdXBlcjIgKi8KK3N0YXRpYyB1aWRfdAlyb290X3VpZDsKK3N0YXRpYyBnaWRfdAlyb290X2dpZDsKK2ludAlqb3VybmFsX3NpemU7CitpbnQJam91cm5hbF9mbGFnczsKK3N0YXRpYyBpbnQJbGF6eV9pdGFibGVfaW5pdDsKK3N0YXRpYyBpbnQJcGFja2VkX21ldGFfYmxvY2tzOworc3RhdGljIGNoYXIJKmJhZF9ibG9ja3NfZmlsZW5hbWUgPSBOVUxMOworc3RhdGljIF9fdTMyCWZzX3N0cmlkZTsKK3N0YXRpYyBpbnQJcXVvdGF0eXBlID0gLTE7ICAvKiBJbml0aWFsaXplIGJvdGggdXNlciBhbmQgZ3JvdXAgcXVvdGFzIGJ5IGRlZmF1bHQgKi8KK3N0YXRpYyBfX3U2NAlvZmZzZXQ7CitzdGF0aWMgYmxrNjRfdCBqb3VybmFsX2xvY2F0aW9uID0gfjBMTDsKK3N0YXRpYyBpbnQJcHJvY2VlZF9kZWxheSA9IC0xOworc3RhdGljIGJsazY0X3QJZGV2X3NpemU7CisKK3N0YXRpYyBzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayBmc19wYXJhbTsKK3N0YXRpYyBjaGFyICpmc191dWlkID0gTlVMTDsKK3N0YXRpYyBjaGFyICpjcmVhdG9yX29zOworc3RhdGljIGNoYXIgKnZvbHVtZV9sYWJlbDsKK3N0YXRpYyBjaGFyICptb3VudF9kaXI7CitjaGFyICpqb3VybmFsX2RldmljZTsKK3N0YXRpYyBpbnQgc3luY19rbHVkZ2U7CS8qIFNldCB1c2luZyB0aGUgTUtFMkZTX1NZTkMgZW52LiBvcHRpb24gKi8KK2NoYXIgKipmc190eXBlczsKKworc3RhdGljIHByb2ZpbGVfdAlwcm9maWxlOworCitzdGF0aWMgaW50IHN5c19wYWdlX3NpemUgPSA0MDk2OworCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLCBfKCJVc2FnZTogJXMgWy1jfC1sIGZpbGVuYW1lXSBbLWIgYmxvY2stc2l6ZV0gIgorCSJbLUMgY2x1c3Rlci1zaXplXVxuXHRbLWkgYnl0ZXMtcGVyLWlub2RlXSBbLUkgaW5vZGUtc2l6ZV0gIgorCSJbLUogam91cm5hbC1vcHRpb25zXVxuIgorCSJcdFstRyBmbGV4LWdyb3VwLXNpemVdIFstTiBudW1iZXItb2YtaW5vZGVzXVxuIgorCSJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisJIlx0Wy1nIGJsb2Nrcy1wZXItZ3JvdXBdIFstTCB2b2x1bWUtbGFiZWxdICIKKwkiWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG5cdFstTyBmZWF0dXJlWywuLi5dXSAiCisJIlstciBmcy1yZXZpc2lvbl0gWy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV1cbiIKKwkiXHRbLXQgZnMtdHlwZV0gWy1UIHVzYWdlLXR5cGUgXSBbLVUgVVVJRF0gIgorCSJbLWpucXZERktTVl0gZGV2aWNlIFtibG9ja3MtY291bnRdXG4iKSwKKwkJcHJvZ3JhbV9uYW1lKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgaW50IGludF9sb2cyKHVuc2lnbmVkIGxvbmcgbG9uZyBhcmcpCit7CisJaW50CWwgPSAwOworCisJYXJnID4+PSAxOworCXdoaWxlIChhcmcpIHsKKwkJbCsrOworCQlhcmcgPj49IDE7CisJfQorCXJldHVybiBsOworfQorCitpbnQgaW50X2xvZzEwKHVuc2lnbmVkIGxvbmcgbG9uZyBhcmcpCit7CisJaW50CWw7CisKKwlmb3IgKGw9MDsgYXJnIDsgbCsrKQorCQlhcmcgPSBhcmcgLyAxMDsKKwlyZXR1cm4gbDsKK30KKworI2lmZGVmIF9fbGludXhfXworc3RhdGljIGludCBwYXJzZV92ZXJzaW9uX251bWJlcihjb25zdCBjaGFyICpzKQoreworCWludAltYWpvciwgbWlub3IsIHJldjsKKwljaGFyCSplbmRwdHI7CisJY29uc3QgY2hhciAqY3AgPSBzOworCisJaWYgKCFzKQorCQlyZXR1cm4gMDsKKwltYWpvciA9IHN0cnRvbChjcCwgJmVuZHB0ciwgMTApOworCWlmIChjcCA9PSBlbmRwdHIgfHwgKmVuZHB0ciAhPSAnLicpCisJCXJldHVybiAwOworCWNwID0gZW5kcHRyICsgMTsKKwltaW5vciA9IHN0cnRvbChjcCwgJmVuZHB0ciwgMTApOworCWlmIChjcCA9PSBlbmRwdHIgfHwgKmVuZHB0ciAhPSAnLicpCisJCXJldHVybiAwOworCWNwID0gZW5kcHRyICsgMTsKKwlyZXYgPSBzdHJ0b2woY3AsICZlbmRwdHIsIDEwKTsKKwlpZiAoY3AgPT0gZW5kcHRyKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gS0VSTkVMX1ZFUlNJT04obWFqb3IsIG1pbm9yLCByZXYpOworfQorCitzdGF0aWMgaW50IGlzX2JlZm9yZV9saW51eF92ZXIodW5zaWduZWQgaW50IG1ham9yLCB1bnNpZ25lZCBpbnQgbWlub3IsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHJldikKK3sKKwlzdHJ1Y3QJCXV0c25hbWUgdXQ7CisJc3RhdGljIGludAlsaW51eF92ZXJzaW9uX2NvZGUgPSAtMTsKKworCWlmICh1bmFtZSgmdXQpKSB7CisJCXBlcnJvcigidW5hbWUiKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKGxpbnV4X3ZlcnNpb25fY29kZSA8IDApCisJCWxpbnV4X3ZlcnNpb25fY29kZSA9IHBhcnNlX3ZlcnNpb25fbnVtYmVyKHV0LnJlbGVhc2UpOworCWlmIChsaW51eF92ZXJzaW9uX2NvZGUgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbGludXhfdmVyc2lvbl9jb2RlIDwgS0VSTkVMX1ZFUlNJT04obWFqb3IsIG1pbm9yLCByZXYpOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgaXNfYmVmb3JlX2xpbnV4X3Zlcih1bnNpZ25lZCBpbnQgbWFqb3IsIHVuc2lnbmVkIGludCBtaW5vciwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmV2KQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHJlYWRfYmJfZmlsZSBhbmQgdGVzdF9kaXNrCisgKi8KK3N0YXRpYyB2b2lkIGludmFsaWRfYmxvY2soZXh0Ml9maWxzeXMgZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLCBibGtfdCBibGspCit7CisJZnByaW50ZihzdGRlcnIsIF8oIkJhZCBibG9jayAldSBvdXQgb2YgcmFuZ2U7IGlnbm9yZWQuXG4iKSwgYmxrKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBSZWFkcyB0aGUgYmFkIGJsb2NrcyBsaXN0IGZyb20gYSBmaWxlCisgKi8KK3N0YXRpYyB2b2lkIHJlYWRfYmJfZmlsZShleHQyX2ZpbHN5cyBmcywgYmFkYmxvY2tzX2xpc3QgKmJiX2xpc3QsCisJCQkgY29uc3QgY2hhciAqYmFkX2Jsb2Nrc19maWxlKQoreworCUZJTEUJCSpmOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlmID0gZm9wZW4oYmFkX2Jsb2Nrc19maWxlLCAiciIpOworCWlmICghZikgeworCQljb21fZXJyKCJyZWFkX2JhZF9ibG9ja3NfZmlsZSIsIGVycm5vLAorCQkJXygid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiKSwgYmFkX2Jsb2Nrc19maWxlKTsKKwkJZXhpdCgxKTsKKwl9CisJcmV0dmFsID0gZXh0MmZzX3JlYWRfYmJfRklMRShmcywgZiwgYmJfbGlzdCwgaW52YWxpZF9ibG9jayk7CisJZmNsb3NlIChmKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJmc19yZWFkX2JiX0ZJTEUiLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSByZWFkaW5nIGluIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIGZpbGUiKSk7CisJCWV4aXQoMSk7CisJfQorfQorCisvKgorICogUnVucyB0aGUgYmFkYmxvY2tzIHByb2dyYW0gdG8gdGVzdCB0aGUgZGlzaworICovCitzdGF0aWMgdm9pZCB0ZXN0X2Rpc2soZXh0Ml9maWxzeXMgZnMsIGJhZGJsb2Nrc19saXN0ICpiYl9saXN0KQoreworCUZJTEUJCSpmOworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJYnVmWzEwMjRdOworCisJc3ByaW50ZihidWYsICJiYWRibG9ja3MgLWIgJWQgLVggJXMlcyVzICVsbHUiLCBmcy0+YmxvY2tzaXplLAorCQlxdWlldCA/ICIiIDogIi1zICIsIChjZmxhZyA+IDEpID8gIi13ICIgOiAiIiwKKwkJZnMtPmRldmljZV9uYW1lLCBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlciktMSk7CisJaWYgKHZlcmJvc2UpCisJCXByaW50ZihfKCJSdW5uaW5nIGNvbW1hbmQ6ICVzXG4iKSwgYnVmKTsKKwlmID0gcG9wZW4oYnVmLCAiciIpOworCWlmICghZikgeworCQljb21fZXJyKCJwb3BlbiIsIGVycm5vLAorCQkJXygid2hpbGUgdHJ5aW5nIHRvIHJ1biAnJXMnIiksIGJ1Zik7CisJCWV4aXQoMSk7CisJfQorCXJldHZhbCA9IGV4dDJmc19yZWFkX2JiX0ZJTEUoZnMsIGYsIGJiX2xpc3QsIGludmFsaWRfYmxvY2spOworCXBjbG9zZShmKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJmc19yZWFkX2JiX0ZJTEUiLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSBwcm9jZXNzaW5nIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIHByb2dyYW0iKSk7CisJCWV4aXQoMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfYmFkX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywgYmFkYmxvY2tzX2xpc3QgYmJfbGlzdCkKK3sKKwlkZ3JwX3QJCQlpOworCWJsa190CQkJajsKKwl1bnNpZ25lZCAJCW11c3RfYmVfZ29vZDsKKwlibGtfdAkJCWJsazsKKwliYWRibG9ja3NfaXRlcmF0ZQliYl9pdGVyOworCWVycmNvZGVfdAkJcmV0dmFsOworCWJsa190CQkJZ3JvdXBfYmxvY2s7CisJaW50CQkJZ3JvdXA7CisJaW50CQkJZ3JvdXBfYmFkOworCisJaWYgKCFiYl9saXN0KQorCQlyZXR1cm47CisKKwkvKgorCSAqIFRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgYW5kIGdyb3VwIGRlc2NyaXB0b3JzICptdXN0KiBiZQorCSAqIGdvb2Q7IGlmIG5vdCwgYWJvcnQuCisJICovCisJbXVzdF9iZV9nb29kID0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2sgKyAxICsgZnMtPmRlc2NfYmxvY2tzOworCWZvciAoaSA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOyBpIDw9IG11c3RfYmVfZ29vZDsgaSsrKSB7CisJCWlmIChleHQyZnNfYmFkYmxvY2tzX2xpc3RfdGVzdChiYl9saXN0LCBpKSkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIkJsb2NrICVkIGluIHByaW1hcnkgIgorCQkJCSJzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3IgYXJlYSBiYWQuXG4iKSwgaSk7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiQmxvY2tzICV1IHRocm91Z2ggJXUgbXVzdCBiZSBnb29kICIKKwkJCQkiaW4gb3JkZXIgdG8gYnVpbGQgYSBmaWxlc3lzdGVtLlxuIiksCisJCQkJZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2ssIG11c3RfYmVfZ29vZCk7CisJCQlmcHV0cyhfKCJBYm9ydGluZy4uLi5cbiIpLCBzdGRlcnIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCS8qCisJICogU2VlIGlmIGFueSBvZiB0aGUgYmFkIGJsb2NrcyBhcmUgc2hvd2luZyB1cCBpbiB0aGUgYmFja3VwCisJICogc3VwZXJibG9ja3MgYW5kL29yIGdyb3VwIGRlc2NyaXB0b3JzLiAgSWYgc28sIGlzc3VlIGEKKwkgKiB3YXJuaW5nIGFuZCBhZGp1c3QgdGhlIGJsb2NrIGNvdW50cyBhcHByb3ByaWF0ZWx5LgorCSAqLworCWdyb3VwX2Jsb2NrID0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2sgKworCQlmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKworCWZvciAoaSA9IDE7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCWdyb3VwX2JhZCA9IDA7CisJCWZvciAoaj0wOyBqIDwgZnMtPmRlc2NfYmxvY2tzKzE7IGorKykgeworCQkJaWYgKGV4dDJmc19iYWRibG9ja3NfbGlzdF90ZXN0KGJiX2xpc3QsCisJCQkJCQkgICAgICAgZ3JvdXBfYmxvY2sgKyBqKSkgeworCQkJCWlmICghZ3JvdXBfYmFkKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwKK18oIldhcm5pbmc6IHRoZSBiYWNrdXAgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9ycyBhdCBibG9jayAldSBjb250YWluXG4iCisiCWJhZCBibG9ja3MuXG5cbiIpLAorCQkJCQkJZ3JvdXBfYmxvY2spOworCQkJCWdyb3VwX2JhZCsrOworCQkJCWdyb3VwID0gZXh0MmZzX2dyb3VwX29mX2JsazIoZnMsIGdyb3VwX2Jsb2NrK2opOworCQkJCWV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoZnMsIGdyb3VwLCBleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnQoZnMsIGdyb3VwKSArIDEpOworCQkJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBncm91cCk7CisJCQkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X2FkZChmcy0+c3VwZXIsIDEpOworCQkJfQorCQl9CisJCWdyb3VwX2Jsb2NrICs9IGZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwOworCX0KKworCS8qCisJICogTWFyayBhbGwgdGhlIGJhZCBibG9ja3MgYXMgdXNlZC4uLgorCSAqLworCXJldHZhbCA9IGV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlX2JlZ2luKGJiX2xpc3QsICZiYl9pdGVyKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlX2JlZ2luIiwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgbWFya2luZyBiYWQgYmxvY2tzIGFzIHVzZWQiKSk7CisJCWV4aXQoMSk7CisJfQorCXdoaWxlIChleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZShiYl9pdGVyLCAmYmxrKSkKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLCBFWFQyRlNfQjJDKGZzLCBibGspKTsKKwlleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9lbmQoYmJfaXRlcik7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgcGFja2VkX2FsbG9jYXRlX3RhYmxlcyhleHQyX2ZpbHN5cyBmcykKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWRncnBfdAkJaTsKKwlibGs2NF90CQlnb2FsID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCXJldHZhbCA9IGV4dDJmc19uZXdfYmxvY2syKGZzLCBnb2FsLCBOVUxMLCAmZ29hbCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBnb2FsLCArMSk7CisJCWV4dDJmc19ibG9ja19iaXRtYXBfbG9jX3NldChmcywgaSwgZ29hbCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCXJldHZhbCA9IGV4dDJmc19uZXdfYmxvY2syKGZzLCBnb2FsLCBOVUxMLCAmZ29hbCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBnb2FsLCArMSk7CisJCWV4dDJmc19pbm9kZV9iaXRtYXBfbG9jX3NldChmcywgaSwgZ29hbCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCWJsazY0X3QgZW5kID0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpIC0gMTsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9mcmVlX2Jsb2NrczIoZnMsIGdvYWwsIGVuZCwKKwkJCQkJCSBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCwKKwkJCQkJCSBmcy0+YmxvY2tfbWFwLCAmZ29hbCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHNfcmFuZ2UoZnMsIGdvYWwsCisJCQkJCSAgICAgICBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCwgKzEpOworCQlleHQyZnNfaW5vZGVfdGFibGVfbG9jX3NldChmcywgaSwgZ29hbCk7CisJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBpKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2lub2RlX3RhYmxlcyhleHQyX2ZpbHN5cyBmcywgaW50IGxhenlfZmxhZywgaW50IGl0YWJsZV96ZXJvZWQpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlibGs2NF90CQlibGs7CisJZGdycF90CQlpOworCWludAkJbnVtOworCXN0cnVjdCBleHQyZnNfbnVtZXJpY19wcm9ncmVzc19zdHJ1Y3QgcHJvZ3Jlc3M7CisKKwlleHQyZnNfbnVtZXJpY19wcm9ncmVzc19pbml0KGZzLCAmcHJvZ3Jlc3MsCisJCQkJICAgICBfKCJXcml0aW5nIGlub2RlIHRhYmxlczogIiksCisJCQkJICAgICBmcy0+Z3JvdXBfZGVzY19jb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlleHQyZnNfbnVtZXJpY19wcm9ncmVzc191cGRhdGUoZnMsICZwcm9ncmVzcywgaSk7CisKKwkJYmxrID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSk7CisJCW51bSA9IGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwOworCisJCWlmIChsYXp5X2ZsYWcpCisJCQludW0gPSBleHQyZnNfZGl2X2NlaWwoKGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwIC0KKwkJCQkJICAgICAgIGV4dDJmc19iZ19pdGFibGVfdW51c2VkKGZzLCBpKSkgKgorCQkJCQkgICAgICBFWFQyX0lOT0RFX1NJWkUoZnMtPnN1cGVyKSwKKwkJCQkJICAgICAgRVhUMl9CTE9DS19TSVpFKGZzLT5zdXBlcikpOworCQlpZiAoIWxhenlfZmxhZyB8fCBpdGFibGVfemVyb2VkKSB7CisJCQkvKiBUaGUga2VybmVsIGRvZXNuJ3QgbmVlZCB0byB6ZXJvIHRoZSBpdGFibGUgYmxvY2tzICovCisJCQlleHQyZnNfYmdfZmxhZ3Nfc2V0KGZzLCBpLCBFWFQyX0JHX0lOT0RFX1pFUk9FRCk7CisJCQlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgaSk7CisJCX0KKwkJcmV0dmFsID0gZXh0MmZzX3plcm9fYmxvY2tzMihmcywgYmxrLCBudW0sICZibGssICZudW0pOworCQlpZiAocmV0dmFsKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiXG5Db3VsZCBub3Qgd3JpdGUgJWQgIgorCQkJCSAgImJsb2NrcyBpbiBpbm9kZSB0YWJsZSBzdGFydGluZyBhdCAlbGx1OiAlc1xuIiksCisJCQkJbnVtLCBibGssIGVycm9yX21lc3NhZ2UocmV0dmFsKSk7CisJCQlleGl0KDEpOworCQl9CisJCWlmIChzeW5jX2tsdWRnZSkgeworCQkJaWYgKHN5bmNfa2x1ZGdlID09IDEpCisJCQkJc3luYygpOworCQkJZWxzZSBpZiAoKGkgJSBzeW5jX2tsdWRnZSkgPT0gMCkKKwkJCQlzeW5jKCk7CisJCX0KKwl9CisJZXh0MmZzX3plcm9fYmxvY2tzMigwLCAwLCAwLCAwLCAwKTsKKwlleHQyZnNfbnVtZXJpY19wcm9ncmVzc19jbG9zZShmcywgJnByb2dyZXNzLAorCQkJCSAgICAgIF8oImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9yb290X2RpcihleHQyX2ZpbHN5cyBmcykKK3sKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKworCXJldHZhbCA9IGV4dDJmc19ta2RpcihmcywgRVhUMl9ST09UX0lOTywgRVhUMl9ST09UX0lOTywgMCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfbWtkaXIiLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSBjcmVhdGluZyByb290IGRpciIpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHJvb3RfdWlkICE9IDAgfHwgcm9vdF9naWQgIT0gMCkgeworCQlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgRVhUMl9ST09UX0lOTywgJmlub2RlKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigiZXh0MmZzX3JlYWRfaW5vZGUiLCByZXR2YWwsICIlcyIsCisJCQkJXygid2hpbGUgcmVhZGluZyByb290IGlub2RlIikpOworCQkJZXhpdCgxKTsKKwkJfQorCisJCWlub2RlLmlfdWlkID0gcm9vdF91aWQ7CisJCWV4dDJmc19zZXRfaV91aWRfaGlnaChpbm9kZSwgcm9vdF91aWQgPj4gMTYpOworCQlpbm9kZS5pX2dpZCA9IHJvb3RfZ2lkOworCQlleHQyZnNfc2V0X2lfZ2lkX2hpZ2goaW5vZGUsIHJvb3RfZ2lkID4+IDE2KTsKKworCQlyZXR2YWwgPSBleHQyZnNfd3JpdGVfbmV3X2lub2RlKGZzLCBFWFQyX1JPT1RfSU5PLCAmaW5vZGUpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKCJleHQyZnNfd3JpdGVfaW5vZGUiLCByZXR2YWwsICIlcyIsCisJCQkJXygid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9sb3N0X2FuZF9mb3VuZChleHQyX2ZpbHN5cyBmcykKK3sKKwl1bnNpZ25lZCBpbnQJCWxwZl9zaXplID0gMDsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlleHQyX2lub190CQlpbm87CisJY29uc3QgY2hhcgkJKm5hbWUgPSAibG9zdCtmb3VuZCI7CisJaW50CQkJaTsKKworCWZzLT51bWFzayA9IDA3NzsKKwlyZXR2YWwgPSBleHQyZnNfbWtkaXIoZnMsIEVYVDJfUk9PVF9JTk8sIDAsIG5hbWUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZXh0MmZzX21rZGlyIiwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgY3JlYXRpbmcgL2xvc3QrZm91bmQiKSk7CisJCWV4aXQoMSk7CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2xvb2t1cChmcywgRVhUMl9ST09UX0lOTywgbmFtZSwgc3RybGVuKG5hbWUpLCAwLCAmaW5vKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJfbG9va3VwIiwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgbG9va2luZyB1cCAvbG9zdCtmb3VuZCIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlmb3IgKGk9MTsgaSA8IEVYVDJfTkRJUl9CTE9DS1M7IGkrKykgeworCQkvKiBFbnN1cmUgdGhhdCBsb3N0K2ZvdW5kIGlzIGF0IGxlYXN0IDIgYmxvY2tzLCBzbyB3ZSBhbHdheXMKKwkJICogdGVzdCBsYXJnZSBlbXB0eSBibG9ja3MgZm9yIGJpZy1ibG9jayBmaWxlc3lzdGVtcy4gICovCisJCWlmICgobHBmX3NpemUgKz0gZnMtPmJsb2Nrc2l6ZSkgPj0gMTYqMTAyNCAmJgorCQkgICAgbHBmX3NpemUgPj0gMiAqIGZzLT5ibG9ja3NpemUpCisJCQlicmVhazsKKwkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoZnMsIGlubyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoImV4dDJmc19leHBhbmRfZGlyIiwgcmV0dmFsLCAiJXMiLAorCQkJCV8oIndoaWxlIGV4cGFuZGluZyAvbG9zdCtmb3VuZCIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9iYWRfYmxvY2tfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIGJhZGJsb2Nrc19saXN0IGJiX2xpc3QpCit7CisJZXJyY29kZV90CXJldHZhbDsKKworCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoZnMtPmlub2RlX21hcCwgRVhUMl9CQURfSU5PKTsKKwlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGZzLCBFWFQyX0JBRF9JTk8sICsxLCAwKTsKKwlyZXR2YWwgPSBleHQyZnNfdXBkYXRlX2JiX2lub2RlKGZzLCBiYl9saXN0KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJmc191cGRhdGVfYmJfaW5vZGUiLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSBzZXR0aW5nIGJhZCBibG9jayBpbm9kZSIpKTsKKwkJZXhpdCgxKTsKKwl9CisKK30KKworc3RhdGljIHZvaWQgcmVzZXJ2ZV9pbm9kZXMoZXh0Ml9maWxzeXMgZnMpCit7CisJZXh0Ml9pbm9fdAlpOworCisJZm9yIChpID0gRVhUMl9ST09UX0lOTyArIDE7IGkgPCBFWFQyX0ZJUlNUX0lOT0RFKGZzLT5zdXBlcik7IGkrKykKKwkJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihmcywgaSwgKzEsIDApOworCWV4dDJmc19tYXJrX2liX2RpcnR5KGZzKTsKK30KKworI2RlZmluZSBCU0RfRElTS01BR0lDICAgKDB4ODI1NjQ1NTdVTCkgIC8qIFRoZSBkaXNrIG1hZ2ljIG51bWJlciAqLworI2RlZmluZSBCU0RfTUFHSUNESVNLICAgKDB4NTc0NTU2ODJVTCkgIC8qIFRoZSBkaXNrIG1hZ2ljIG51bWJlciByZXZlcnNlZCAqLworI2RlZmluZSBCU0RfTEFCRUxfT0ZGU0VUICAgICAgICA2NAorCitzdGF0aWMgdm9pZCB6YXBfc2VjdG9yKGV4dDJfZmlsc3lzIGZzLCBpbnQgc2VjdCwgaW50IG5zZWN0KQoreworCWNoYXIgKmJ1ZjsKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGludCAqbWFnaWM7CisKKwlidWYgPSBtYWxsb2MoNTEyKm5zZWN0KTsKKwlpZiAoIWJ1ZikgeworCQlwcmludGYoXygiT3V0IG9mIG1lbW9yeSBlcmFzaW5nIHNlY3RvcnMgJWQtJWRcbiIpLAorCQkgICAgICAgc2VjdCwgc2VjdCArIG5zZWN0IC0gMSk7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKHNlY3QgPT0gMCkgeworCQkvKiBDaGVjayBmb3IgYSBCU0QgZGlza2xhYmVsLCBhbmQgZG9uJ3QgZXJhc2UgaXQgaWYgc28gKi8KKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbywgMCwgLTUxMiwgYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCV8oIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrIDA6ICVzXG4iKSwKKwkJCQllcnJvcl9tZXNzYWdlKHJldHZhbCkpOworCQllbHNlIHsKKwkJCW1hZ2ljID0gKHVuc2lnbmVkIGludCAqKSAoYnVmICsgQlNEX0xBQkVMX09GRlNFVCk7CisJCQlpZiAoKCptYWdpYyA9PSBCU0RfRElTS01BR0lDKSB8fAorCQkJICAgICgqbWFnaWMgPT0gQlNEX01BR0lDRElTSykpCisJCQkJcmV0dXJuOworCQl9CisJfQorCisJbWVtc2V0KGJ1ZiwgMCwgNTEyKm5zZWN0KTsKKwlpb19jaGFubmVsX3NldF9ibGtzaXplKGZzLT5pbywgNTEyKTsKKwlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgc2VjdCwgLTUxMipuc2VjdCwgYnVmKTsKKwlpb19jaGFubmVsX3NldF9ibGtzaXplKGZzLT5pbywgZnMtPmJsb2Nrc2l6ZSk7CisJZnJlZShidWYpOworCWlmIChyZXR2YWwpCisJCWZwcmludGYoc3RkZXJyLCBfKCJXYXJuaW5nOiBjb3VsZCBub3QgZXJhc2Ugc2VjdG9yICVkOiAlc1xuIiksCisJCQlzZWN0LCBlcnJvcl9tZXNzYWdlKHJldHZhbCkpOworfQorCitzdGF0aWMgdm9pZCBjcmVhdGVfam91cm5hbF9kZXYoZXh0Ml9maWxzeXMgZnMpCit7CisJc3RydWN0IGV4dDJmc19udW1lcmljX3Byb2dyZXNzX3N0cnVjdCBwcm9ncmVzczsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwljaGFyCQkJKmJ1ZjsKKwlibGs2NF90CQkJYmxrLCBlcnJfYmxrOworCWludAkJCWMsIGNvdW50LCBlcnJfY291bnQ7CisKKwlyZXR2YWwgPSBleHQyZnNfY3JlYXRlX2pvdXJuYWxfc3VwZXJibG9jayhmcywKKwkJCQkgIGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSwgMCwgJmJ1Zik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJjcmVhdGVfam91cm5hbF9kZXYiLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSBpbml0aWFsaXppbmcgam91cm5hbCBzdXBlcmJsb2NrIikpOworCQlleGl0KDEpOworCX0KKworCWlmIChqb3VybmFsX2ZsYWdzICYgRVhUMl9NS0pPVVJOQUxfTEFaWUlOSVQpCisJCWdvdG8gd3JpdGVfc3VwZXJibG9jazsKKworCWV4dDJmc19udW1lcmljX3Byb2dyZXNzX2luaXQoZnMsICZwcm9ncmVzcywKKwkJCQkgICAgIF8oIlplcm9pbmcgam91cm5hbCBkZXZpY2U6ICIpLAorCQkJCSAgICAgZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKTsKKwlibGsgPSAwOworCWNvdW50ID0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJaWYgKGNvdW50ID4gMTAyNCkKKwkJCWMgPSAxMDI0OworCQllbHNlCisJCQljID0gY291bnQ7CisJCXJldHZhbCA9IGV4dDJmc196ZXJvX2Jsb2NrczIoZnMsIGJsaywgYywgJmVycl9ibGssICZlcnJfY291bnQpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKCJjcmVhdGVfam91cm5hbF9kZXYiLCByZXR2YWwsCisJCQkJXygid2hpbGUgemVyb2luZyBqb3VybmFsIGRldmljZSAiCisJCQkJICAiKGJsb2NrICVsbHUsIGNvdW50ICVkKSIpLAorCQkJCWVycl9ibGssIGVycl9jb3VudCk7CisJCQlleGl0KDEpOworCQl9CisJCWJsayArPSBjOworCQljb3VudCAtPSBjOworCQlleHQyZnNfbnVtZXJpY19wcm9ncmVzc191cGRhdGUoZnMsICZwcm9ncmVzcywgYmxrKTsKKwl9CisJZXh0MmZzX3plcm9fYmxvY2tzMigwLCAwLCAwLCAwLCAwKTsKKworCWV4dDJmc19udW1lcmljX3Byb2dyZXNzX2Nsb3NlKGZzLCAmcHJvZ3Jlc3MsIE5VTEwpOword3JpdGVfc3VwZXJibG9jazoKKwlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywKKwkJCQkJZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2srMSwKKwkJCQkJMSwgYnVmKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImNyZWF0ZV9qb3VybmFsX2RldiIsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIHdyaXRpbmcgam91cm5hbCBzdXBlcmJsb2NrIikpOworCQlleGl0KDEpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19zdGF0cyhleHQyX2ZpbHN5cyBmcykKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqcyA9IGZzLT5zdXBlcjsKKwljaGFyIAkJCWJ1Zls4MF07CisgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICpvczsKKwlibGs2NF90CQkJZ3JvdXBfYmxvY2s7CisJZGdycF90CQkJaTsKKwlpbnQJCQluZWVkLCBjb2xfbGVmdDsKKworCWlmICghdmVyYm9zZSkgeworCQlwcmludGYoXygiQ3JlYXRpbmcgZmlsZXN5c3RlbSB3aXRoICVsbHUgJWRrIGJsb2NrcyBhbmQgIgorCQkJICIldSBpbm9kZXNcbiIpLAorCQkgICAgICAgZXh0MmZzX2Jsb2Nrc19jb3VudChzKSwgZnMtPmJsb2Nrc2l6ZSA+PiAxMCwKKwkJICAgICAgIHMtPnNfaW5vZGVzX2NvdW50KTsKKwkJZ290byBza2lwX2RldGFpbHM7CisJfQorCisJaWYgKGV4dDJmc19ibG9ja3NfY291bnQoJmZzX3BhcmFtKSAhPSBleHQyZnNfYmxvY2tzX2NvdW50KHMpKQorCQlmcHJpbnRmKHN0ZGVyciwgXygid2FybmluZzogJWxsdSBibG9ja3MgdW51c2VkLlxuXG4iKSwKKwkJICAgICAgIGV4dDJmc19ibG9ja3NfY291bnQoJmZzX3BhcmFtKSAtIGV4dDJmc19ibG9ja3NfY291bnQocykpOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCXN0cm5jcHkoYnVmLCBzLT5zX3ZvbHVtZV9uYW1lLCBzaXplb2Yocy0+c192b2x1bWVfbmFtZSkpOworCXByaW50ZihfKCJGaWxlc3lzdGVtIGxhYmVsPSVzXG4iKSwgYnVmKTsKKwlvcyA9IGUycF9vczJzdHJpbmcoZnMtPnN1cGVyLT5zX2NyZWF0b3Jfb3MpOworCWlmIChvcykKKwkJcHJpbnRmKF8oIk9TIHR5cGU6ICVzXG4iKSwgb3MpOworCWZyZWUob3MpOworCXByaW50ZihfKCJCbG9jayBzaXplPSV1IChsb2c9JXUpXG4iKSwgZnMtPmJsb2Nrc2l6ZSwKKwkJcy0+c19sb2dfYmxvY2tfc2l6ZSk7CisJaWYgKEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9CSUdBTExPQykpCisJCXByaW50ZihfKCJDbHVzdGVyIHNpemU9JXUgKGxvZz0ldSlcbiIpLAorCQkgICAgICAgZnMtPmJsb2Nrc2l6ZSA8PCBmcy0+Y2x1c3Rlcl9yYXRpb19iaXRzLAorCQkgICAgICAgcy0+c19sb2dfY2x1c3Rlcl9zaXplKTsKKwllbHNlCisJCXByaW50ZihfKCJGcmFnbWVudCBzaXplPSV1IChsb2c9JXUpXG4iKSwgRVhUMl9DTFVTVEVSX1NJWkUocyksCisJCSAgICAgICBzLT5zX2xvZ19jbHVzdGVyX3NpemUpOworCXByaW50ZihfKCJTdHJpZGU9JXUgYmxvY2tzLCBTdHJpcGUgd2lkdGg9JXUgYmxvY2tzXG4iKSwKKwkgICAgICAgcy0+c19yYWlkX3N0cmlkZSwgcy0+c19yYWlkX3N0cmlwZV93aWR0aCk7CisJcHJpbnRmKF8oIiV1IGlub2RlcywgJWxsdSBibG9ja3NcbiIpLCBzLT5zX2lub2Rlc19jb3VudCwKKwkgICAgICAgZXh0MmZzX2Jsb2Nrc19jb3VudChzKSk7CisJcHJpbnRmKF8oIiVsbHUgYmxvY2tzICglMi4yZiUlKSByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIHVzZXJcbiIpLAorCQlleHQyZnNfcl9ibG9ja3NfY291bnQocyksCisJICAgICAgIDEwMC4wICogIGV4dDJmc19yX2Jsb2Nrc19jb3VudChzKSAvIGV4dDJmc19ibG9ja3NfY291bnQocykpOworCXByaW50ZihfKCJGaXJzdCBkYXRhIGJsb2NrPSV1XG4iKSwgcy0+c19maXJzdF9kYXRhX2Jsb2NrKTsKKwlpZiAocm9vdF91aWQgIT0gMCB8fCByb290X2dpZCAhPSAwKQorCQlwcmludGYoXygiUm9vdCBkaXJlY3Rvcnkgb3duZXI9JXU6JXVcbiIpLCByb290X3VpZCwgcm9vdF9naWQpOworCWlmIChzLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3MpCisJCXByaW50ZihfKCJNYXhpbXVtIGZpbGVzeXN0ZW0gYmxvY2tzPSVsdVxuIiksCisJCSAgICAgICAocy0+c19yZXNlcnZlZF9nZHRfYmxvY2tzICsgZnMtPmRlc2NfYmxvY2tzKSAqCisJCSAgICAgICBFWFQyX0RFU0NfUEVSX0JMT0NLKHMpICogcy0+c19ibG9ja3NfcGVyX2dyb3VwKTsKKwlpZiAoZnMtPmdyb3VwX2Rlc2NfY291bnQgPiAxKQorCQlwcmludGYoXygiJXUgYmxvY2sgZ3JvdXBzXG4iKSwgZnMtPmdyb3VwX2Rlc2NfY291bnQpOworCWVsc2UKKwkJcHJpbnRmKF8oIiV1IGJsb2NrIGdyb3VwXG4iKSwgZnMtPmdyb3VwX2Rlc2NfY291bnQpOworCWlmIChFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpKQorCQlwcmludGYoXygiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgY2x1c3RlcnMgcGVyIGdyb3VwXG4iKSwKKwkJICAgICAgIHMtPnNfYmxvY2tzX3Blcl9ncm91cCwgcy0+c19jbHVzdGVyc19wZXJfZ3JvdXApOworCWVsc2UKKwkJcHJpbnRmKF8oIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIpLAorCQkgICAgICAgcy0+c19ibG9ja3NfcGVyX2dyb3VwLCBzLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCk7CisJcHJpbnRmKF8oIiV1IGlub2RlcyBwZXIgZ3JvdXBcbiIpLCBzLT5zX2lub2Rlc19wZXJfZ3JvdXApOworCitza2lwX2RldGFpbHM6CisJaWYgKGZzLT5ncm91cF9kZXNjX2NvdW50ID09IDEpIHsKKwkJcHJpbnRmKCJcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFlMnBfaXNfbnVsbF91dWlkKHMtPnNfdXVpZCkpCisJCXByaW50ZihfKCJGaWxlc3lzdGVtIFVVSUQ6ICVzXG4iKSwgZTJwX3V1aWQyc3RyKHMtPnNfdXVpZCkpOworCXByaW50ZigiJXMiLCBfKCJTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogIikpOworCWdyb3VwX2Jsb2NrID0gcy0+c19maXJzdF9kYXRhX2Jsb2NrOworCWNvbF9sZWZ0ID0gMDsKKwlmb3IgKGkgPSAxOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlncm91cF9ibG9jayArPSBzLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCWlmICghZXh0MmZzX2JnX2hhc19zdXBlcihmcywgaSkpCisJCQljb250aW51ZTsKKwkJaWYgKGkgIT0gMSkKKwkJCXByaW50ZigiLCAiKTsKKwkJbmVlZCA9IGludF9sb2cxMChncm91cF9ibG9jaykgKyAyOworCQlpZiAobmVlZCA+IGNvbF9sZWZ0KSB7CisJCQlwcmludGYoIlxuXHQiKTsKKwkJCWNvbF9sZWZ0ID0gNzI7CisJCX0KKwkJY29sX2xlZnQgLT0gbmVlZDsKKwkJcHJpbnRmKCIlbGx1IiwgZ3JvdXBfYmxvY2spOworCX0KKwlwcmludGYoIlxuXG4iKTsKK30KKworLyoKKyAqIFNldCB0aGUgU19DUkVBVE9SX09TIGZpZWxkLiAgUmV0dXJuIHRydWUgaWYgT1MgaXMga25vd24sCisgKiBvdGhlcndpc2UsIDAuCisgKi8KK3N0YXRpYyBpbnQgc2V0X29zKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiwgY2hhciAqb3MpCit7CisJaWYgKGlzZGlnaXQgKCpvcykpCisJCXNiLT5zX2NyZWF0b3Jfb3MgPSBhdG9pIChvcyk7CisJZWxzZSBpZiAoc3RyY2FzZWNtcChvcywgImxpbnV4IikgPT0gMCkKKwkJc2ItPnNfY3JlYXRvcl9vcyA9IEVYVDJfT1NfTElOVVg7CisJZWxzZSBpZiAoc3RyY2FzZWNtcChvcywgIkdOVSIpID09IDAgfHwgc3RyY2FzZWNtcChvcywgImh1cmQiKSA9PSAwKQorCQlzYi0+c19jcmVhdG9yX29zID0gRVhUMl9PU19IVVJEOworCWVsc2UgaWYgKHN0cmNhc2VjbXAob3MsICJmcmVlYnNkIikgPT0gMCkKKwkJc2ItPnNfY3JlYXRvcl9vcyA9IEVYVDJfT1NfRlJFRUJTRDsKKwllbHNlIGlmIChzdHJjYXNlY21wKG9zLCAibGl0ZXMiKSA9PSAwKQorCQlzYi0+c19jcmVhdG9yX29zID0gRVhUMl9PU19MSVRFUzsKKwllbHNlCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisjZGVmaW5lIFBBVEhfU0VUICJQQVRIPS9zYmluIgorCitzdGF0aWMgdm9pZCBwYXJzZV9leHRlbmRlZF9vcHRzKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpwYXJhbSwKKwkJCQljb25zdCBjaGFyICpvcHRzKQoreworCWNoYXIJKmJ1ZiwgKnRva2VuLCAqbmV4dCwgKnAsICphcmcsICpiYWRvcHQgPSAwOworCWludAlsZW47CisJaW50CXJfdXNhZ2UgPSAwOworCisJbGVuID0gc3RybGVuKG9wdHMpOworCWJ1ZiA9IG1hbGxvYyhsZW4rMSk7CisJaWYgKCFidWYpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsCisJCQlfKCJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugb3B0aW9ucyFcbiIpKTsKKwkJZXhpdCgxKTsKKwl9CisJc3RyY3B5KGJ1Ziwgb3B0cyk7CisJZm9yICh0b2tlbiA9IGJ1ZjsgdG9rZW4gJiYgKnRva2VuOyB0b2tlbiA9IG5leHQpIHsKKwkJcCA9IHN0cmNocih0b2tlbiwgJywnKTsKKwkJbmV4dCA9IDA7CisJCWlmIChwKSB7CisJCQkqcCA9IDA7CisJCQluZXh0ID0gcCsxOworCQl9CisJCWFyZyA9IHN0cmNocih0b2tlbiwgJz0nKTsKKwkJaWYgKGFyZykgeworCQkJKmFyZyA9IDA7CisJCQlhcmcrKzsKKwkJfQorCQlpZiAoc3RyY21wKHRva2VuLCAiZGVzYy1zaXplIikgPT0gMCB8fAorCQkgICAgc3RyY21wKHRva2VuLCAiZGVzY19zaXplIikgPT0gMCkgeworCQkJaW50IGRlc2Nfc2l6ZTsKKworCQkJaWYgKCEoZnNfcGFyYW0uc19mZWF0dXJlX2luY29tcGF0ICYKKwkJCSAgICAgIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJXygiJXMgcmVxdWlyZXMgJy1PIDY0Yml0J1xuIiksIHRva2VuKTsKKwkJCQlyX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAocGFyYW0tPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyAhPSAwKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIiclcycgbXVzdCBiZSBiZWZvcmUgJ3Jlc2l6ZT0ldSdcbiIpLAorCQkJCQl0b2tlbiwgcGFyYW0tPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrcyk7CisJCQkJcl91c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFhcmcpIHsKKwkJCQlyX3VzYWdlKys7CisJCQkJYmFkb3B0ID0gdG9rZW47CisJCQkJY29udGludWU7CisJCQl9CisJCQlkZXNjX3NpemUgPSBzdHJ0b3VsKGFyZywgJnAsIDApOworCQkJaWYgKCpwIHx8IChkZXNjX3NpemUgJiAoZGVzY19zaXplIC0gMSkpKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIkludmFsaWQgZGVzY19zaXplOiAnJXMnXG4iKSwgYXJnKTsKKwkJCQlyX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlwYXJhbS0+c19kZXNjX3NpemUgPSBkZXNjX3NpemU7CisJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAib2Zmc2V0IikgPT0gMCkgeworCQkJaWYgKCFhcmcpIHsKKwkJCQlyX3VzYWdlKys7CisJCQkJYmFkb3B0ID0gdG9rZW47CisJCQkJY29udGludWU7CisJCQl9CisJCQlvZmZzZXQgPSBzdHJ0b3VsbChhcmcsICZwLCAwKTsKKwkJCWlmICgqcCkgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCJJbnZhbGlkIG9mZnNldDogJXNcbiIpLAorCQkJCQlhcmcpOworCQkJCXJfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJtbXBfdXBkYXRlX2ludGVydmFsIikgPT0gMCkgeworCQkJaWYgKCFhcmcpIHsKKwkJCQlyX3VzYWdlKys7CisJCQkJYmFkb3B0ID0gdG9rZW47CisJCQkJY29udGludWU7CisJCQl9CisJCQlwYXJhbS0+c19tbXBfdXBkYXRlX2ludGVydmFsID0gc3RydG91bChhcmcsICZwLCAwKTsKKwkJCWlmICgqcCkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCJJbnZhbGlkIG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iKSwKKwkJCQkJYXJnKTsKKwkJCQlyX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAibnVtX2JhY2t1cF9zYiIpID09IDApIHsKKwkJCWlmICghYXJnKSB7CisJCQkJcl91c2FnZSsrOworCQkJCWJhZG9wdCA9IHRva2VuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJbnVtX2JhY2t1cHMgPSBzdHJ0b3VsKGFyZywgJnAsIDApOworCQkJaWYgKCpwIHx8IG51bV9iYWNrdXBzID4gMikgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCJJbnZhbGlkICMgb2YgYmFja3VwICIKKwkJCQkJICAic3VwZXJibG9ja3M6ICVzXG4iKSwKKwkJCQkJYXJnKTsKKwkJCQlyX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAicGFja2VkX21ldGFfYmxvY2tzIikgPT0gMCkgeworCQkJaWYgKGFyZykKKwkJCQlwYWNrZWRfbWV0YV9ibG9ja3MgPSBzdHJ0b3VsKGFyZywgJnAsIDApOworCQkJZWxzZQorCQkJCXBhY2tlZF9tZXRhX2Jsb2NrcyA9IDE7CisJCQlpZiAocGFja2VkX21ldGFfYmxvY2tzKQorCQkJCWpvdXJuYWxfbG9jYXRpb24gPSAwOworCQl9IGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgInN0cmlkZSIpID09IDApIHsKKwkJCWlmICghYXJnKSB7CisJCQkJcl91c2FnZSsrOworCQkJCWJhZG9wdCA9IHRva2VuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcGFyYW0tPnNfcmFpZF9zdHJpZGUgPSBzdHJ0b3VsKGFyZywgJnAsIDApOworCQkJaWYgKCpwKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIkludmFsaWQgc3RyaWRlIHBhcmFtZXRlcjogJXNcbiIpLAorCQkJCQlhcmcpOworCQkJCXJfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJzdHJpcGUtd2lkdGgiKSA9PSAwIHx8CisJCQkgICBzdHJjbXAodG9rZW4sICJzdHJpcGVfd2lkdGgiKSA9PSAwKSB7CisJCQlpZiAoIWFyZykgeworCQkJCXJfdXNhZ2UrKzsKKwkJCQliYWRvcHQgPSB0b2tlbjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXBhcmFtLT5zX3JhaWRfc3RyaXBlX3dpZHRoID0gc3RydG91bChhcmcsICZwLCAwKTsKKwkJCWlmICgqcCkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCJJbnZhbGlkIHN0cmlwZS13aWR0aCBwYXJhbWV0ZXI6ICVzXG4iKSwKKwkJCQkJYXJnKTsKKwkJCQlyX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgInJlc2l6ZSIpKSB7CisJCQlibGs2NF90IHJlc2l6ZTsKKwkJCXVuc2lnbmVkIGxvbmcgYnBnLCByc3ZfZ3JvdXBzOworCQkJdW5zaWduZWQgbG9uZyBncm91cF9kZXNjX2NvdW50LCBkZXNjX2Jsb2NrczsKKwkJCXVuc2lnbmVkIGludCBnZHBiLCBibG9ja3NpemU7CisJCQlpbnQgcnN2X2dkYjsKKworCQkJaWYgKCFhcmcpIHsKKwkJCQlyX3VzYWdlKys7CisJCQkJYmFkb3B0ID0gdG9rZW47CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXJlc2l6ZSA9IHBhcnNlX251bV9ibG9ja3MyKGFyZywKKwkJCQkJCSAgIHBhcmFtLT5zX2xvZ19ibG9ja19zaXplKTsKKworCQkJaWYgKHJlc2l6ZSA9PSAwKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIkludmFsaWQgcmVzaXplIHBhcmFtZXRlcjogJXNcbiIpLAorCQkJCQlhcmcpOworCQkJCXJfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChyZXNpemUgPD0gZXh0MmZzX2Jsb2Nrc19jb3VudChwYXJhbSkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKwkJCQkJXygiVGhlIHJlc2l6ZSBtYXhpbXVtIG11c3QgYmUgZ3JlYXRlciAiCisJCQkJCSAgInRoYW4gdGhlIGZpbGVzeXN0ZW0gc2l6ZS5cbiIpKTsKKwkJCQlyX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWJsb2Nrc2l6ZSA9IEVYVDJfQkxPQ0tfU0laRShwYXJhbSk7CisJCQlicGcgPSBwYXJhbS0+c19ibG9ja3NfcGVyX2dyb3VwOworCQkJaWYgKCFicGcpCisJCQkJYnBnID0gYmxvY2tzaXplICogODsKKwkJCWdkcGIgPSBFWFQyX0RFU0NfUEVSX0JMT0NLKHBhcmFtKTsKKwkJCWdyb3VwX2Rlc2NfY291bnQgPSAoX191MzIpIGV4dDJmc19kaXY2NF9jZWlsKAorCQkJCWV4dDJmc19ibG9ja3NfY291bnQocGFyYW0pLCBicGcpOworCQkJZGVzY19ibG9ja3MgPSAoZ3JvdXBfZGVzY19jb3VudCArCisJCQkJICAgICAgIGdkcGIgLSAxKSAvIGdkcGI7CisJCQlyc3ZfZ3JvdXBzID0gZXh0MmZzX2RpdjY0X2NlaWwocmVzaXplLCBicGcpOworCQkJcnN2X2dkYiA9IGV4dDJmc19kaXZfY2VpbChyc3ZfZ3JvdXBzLCBnZHBiKSAtCisJCQkJZGVzY19ibG9ja3M7CisJCQlpZiAocnN2X2dkYiA+IChpbnQpIEVYVDJfQUREUl9QRVJfQkxPQ0socGFyYW0pKQorCQkJCXJzdl9nZGIgPSBFWFQyX0FERFJfUEVSX0JMT0NLKHBhcmFtKTsKKworCQkJaWYgKHJzdl9nZGIgPiAwKSB7CisJCQkJaWYgKHBhcmFtLT5zX3Jldl9sZXZlbCA9PSBFWFQyX0dPT0RfT0xEX1JFVikgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKwlfKCJPbi1saW5lIHJlc2l6aW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iKSk7CisJCQkJCWZyZWUoYnVmKTsKKwkJCQkJZXhpdCgxKTsKKwkJCQl9CisJCQkJcGFyYW0tPnNfZmVhdHVyZV9jb21wYXQgfD0KKwkJCQkJRVhUMl9GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREU7CisKKwkJCQlwYXJhbS0+c19yZXNlcnZlZF9nZHRfYmxvY2tzID0gcnN2X2dkYjsKKwkJCX0KKwkJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAidGVzdF9mcyIpKSB7CisJCQlwYXJhbS0+c19mbGFncyB8PSBFWFQyX0ZMQUdTX1RFU1RfRklMRVNZUzsKKwkJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAibGF6eV9pdGFibGVfaW5pdCIpKSB7CisJCQlpZiAoYXJnKQorCQkJCWxhenlfaXRhYmxlX2luaXQgPSBzdHJ0b3VsKGFyZywgJnAsIDApOworCQkJZWxzZQorCQkJCWxhenlfaXRhYmxlX2luaXQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJsYXp5X2pvdXJuYWxfaW5pdCIpKSB7CisJCQlpZiAoYXJnKQorCQkJCWpvdXJuYWxfZmxhZ3MgfD0gc3RydG91bChhcmcsICZwLCAwKSA/CisJCQkJCQlFWFQyX01LSk9VUk5BTF9MQVpZSU5JVCA6IDA7CisJCQllbHNlCisJCQkJam91cm5hbF9mbGFncyB8PSBFWFQyX01LSk9VUk5BTF9MQVpZSU5JVDsKKwkJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAicm9vdF9vd25lciIpKSB7CisJCQlpZiAoYXJnKSB7CisJCQkJcm9vdF91aWQgPSBzdHJ0b3VsKGFyZywgJnAsIDApOworCQkJCWlmICgqcCAhPSAnOicpIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQlfKCJJbnZhbGlkIHJvb3Rfb3duZXI6ICclcydcbiIpLAorCQkJCQkJYXJnKTsKKwkJCQkJcl91c2FnZSsrOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJcCsrOworCQkJCXJvb3RfZ2lkID0gc3RydG91bChwLCAmcCwgMCk7CisJCQkJaWYgKCpwKSB7CisJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJXygiSW52YWxpZCByb290X293bmVyOiAnJXMnXG4iKSwKKwkJCQkJCWFyZyk7CisJCQkJCXJfdXNhZ2UrKzsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlyb290X3VpZCA9IGdldHVpZCgpOworCQkJCXJvb3RfZ2lkID0gZ2V0Z2lkKCk7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgImRpc2NhcmQiKSkgeworCQkJZGlzY2FyZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgIm5vZGlzY2FyZCIpKSB7CisJCQlkaXNjYXJkID0gMDsKKwkJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAicXVvdGF0eXBlIikpIHsKKwkJCWlmICghYXJnKSB7CisJCQkJcl91c2FnZSsrOworCQkJCWJhZG9wdCA9IHRva2VuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJuY21wKGFyZywgInVzciIsIDMpKSB7CisJCQkJcXVvdGF0eXBlID0gMDsKKwkJCX0gZWxzZSBpZiAoIXN0cm5jbXAoYXJnLCAiZ3JwIiwgMykpIHsKKwkJCQlxdW90YXR5cGUgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJXygiSW52YWxpZCBxdW90YXR5cGUgcGFyYW1ldGVyOiAlc1xuIiksCisJCQkJCWFyZyk7CisJCQkJcl91c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9IGVsc2UgeworCQkJcl91c2FnZSsrOworCQkJYmFkb3B0ID0gdG9rZW47CisJCX0KKwl9CisJaWYgKHJfdXNhZ2UpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIlxuQmFkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG5cbiIKKwkJCSJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCAiCisJCQkiYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisJCQkiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuXG4iCisJCQkiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisJCQkiXHRtbXBfdXBkYXRlX2ludGVydmFsPTxpbnRlcnZhbD5cbiIKKwkJCSJcdG51bV9iYWNrdXBfc2I9PDB8MXwyPlxuIgorCQkJIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGRhdGEgY2h1bmsgaW4gYmxvY2tzPlxuIgorCQkJIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqIGRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorCQkJIlx0b2Zmc2V0PTxvZmZzZXQgdG8gY3JlYXRlIHRoZSBmaWxlIHN5c3RlbT5cbiIKKwkJCSJcdHJlc2l6ZT08cmVzaXplIG1heGltdW0gc2l6ZSBpbiBibG9ja3M+XG4iCisJCQkiXHRwYWNrZWRfbWV0YV9ibG9ja3M9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisJCQkiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorCQkJIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisJCQkiXHRyb290X3VpZD08dWlkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorCQkJIlx0cm9vdF9naWQ9PGdpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKwkJCSJcdHRlc3RfZnNcbiIKKwkJCSJcdGRpc2NhcmRcbiIKKwkJCSJcdG5vZGlzY2FyZFxuIgorCQkJIlx0cXVvdGF0eXBlPTx1c3IgT1IgZ3JwPlxuXG4iKSwKKwkJCWJhZG9wdCA/IGJhZG9wdCA6ICIiKTsKKwkJZnJlZShidWYpOworCQlleGl0KDEpOworCX0KKwlpZiAocGFyYW0tPnNfcmFpZF9zdHJpZGUgJiYKKwkgICAgKHBhcmFtLT5zX3JhaWRfc3RyaXBlX3dpZHRoICUgcGFyYW0tPnNfcmFpZF9zdHJpZGUpICE9IDApCisJCWZwcmludGYoc3RkZXJyLCBfKCJcbldhcm5pbmc6IFJBSUQgc3RyaXBlLXdpZHRoICV1IG5vdCBhbiBldmVuICIKKwkJCQkgICJtdWx0aXBsZSBvZiBzdHJpZGUgJXUuXG5cbiIpLAorCQkJcGFyYW0tPnNfcmFpZF9zdHJpcGVfd2lkdGgsIHBhcmFtLT5zX3JhaWRfc3RyaWRlKTsKKworCWZyZWUoYnVmKTsKK30KKworc3RhdGljIF9fdTMyIG9rX2ZlYXR1cmVzWzNdID0geworCS8qIENvbXBhdCAqLworCUVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwgfAorCQlFWFQyX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERSB8CisJCUVYVDJfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYIHwKKwkJRVhUMl9GRUFUVVJFX0NPTVBBVF9FWFRfQVRUUiB8CisJCUVYVDRfRkVBVFVSRV9DT01QQVRfU1BBUlNFX1NVUEVSMiwKKwkvKiBJbmNvbXBhdCAqLworCUVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRXwKKwkJRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFN8CisJCUVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVnwKKwkJRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkd8CisJCUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHfAorCQlFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTU1QIHwKKwkJRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklULAorCS8qIFIvTyBjb21wYXQgKi8KKwlFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEV8CisJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFfAorCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0RJUl9OTElOS3wKKwkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9FWFRSQV9JU0laRXwKKwkJRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVJ8CisJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU18CisJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0N8CisjaWZkZWYgQ09ORklHX1FVT1RBCisJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfUVVPVEF8CisjZW5kaWYKKwkJMAorfTsKKworCitzdGF0aWMgdm9pZCBzeW50YXhfZXJyX3JlcG9ydChjb25zdCBjaGFyICpmaWxlbmFtZSwgbG9uZyBlcnIsIGludCBsaW5lX251bSkKK3sKKwlmcHJpbnRmKHN0ZGVyciwKKwkJXygiU3ludGF4IGVycm9yIGluIG1rZTJmcyBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuXHQlc1xuIiksCisJCWZpbGVuYW1lLCBsaW5lX251bSwgZXJyb3JfbWVzc2FnZShlcnIpKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY29uZmlnX2ZuW10gPSB7IFJPT1RfU1lTQ09ORkRJUiAiL21rZTJmcy5jb25mIiwgMCB9OworCitzdGF0aWMgdm9pZCBlZGl0X2ZlYXR1cmUoY29uc3QgY2hhciAqc3RyLCBfX3UzMiAqY29tcGF0X2FycmF5KQoreworCWlmICghc3RyKQorCQlyZXR1cm47CisKKwlpZiAoZTJwX2VkaXRfZmVhdHVyZShzdHIsIGNvbXBhdF9hcnJheSwgb2tfZmVhdHVyZXMpKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJJbnZhbGlkIGZpbGVzeXN0ZW0gb3B0aW9uIHNldDogJXNcbiIpLAorCQkJc3RyKTsKKwkJZXhpdCgxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGVkaXRfbW50b3B0cyhjb25zdCBjaGFyICpzdHIsIF9fdTMyICptbnRvcHRzKQoreworCWlmICghc3RyKQorCQlyZXR1cm47CisKKwlpZiAoZTJwX2VkaXRfbW50b3B0cyhzdHIsIG1udG9wdHMsIH4wKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiSW52YWxpZCBtb3VudCBvcHRpb24gc2V0OiAlc1xuIiksCisJCQlzdHIpOworCQlleGl0KDEpOworCX0KK30KKworc3RydWN0IHN0cl9saXN0IHsKKwljaGFyICoqbGlzdDsKKwlpbnQgbnVtOworCWludCBtYXg7Cit9OworCitzdGF0aWMgZXJyY29kZV90IGluaXRfbGlzdChzdHJ1Y3Qgc3RyX2xpc3QgKnNsKQoreworCXNsLT5udW0gPSAwOworCXNsLT5tYXggPSAwOworCXNsLT5saXN0ID0gbWFsbG9jKChzbC0+bWF4KzEpICogc2l6ZW9mKGNoYXIgKikpOworCWlmICghc2wtPmxpc3QpCisJCXJldHVybiBFTk9NRU07CisJc2wtPmxpc3RbMF0gPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IHB1c2hfc3RyaW5nKHN0cnVjdCBzdHJfbGlzdCAqc2wsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwljaGFyICoqbmV3X2xpc3Q7CisKKwlpZiAoc2wtPm51bSA+PSBzbC0+bWF4KSB7CisJCXNsLT5tYXggKz0gMjsKKwkJbmV3X2xpc3QgPSByZWFsbG9jKHNsLT5saXN0LCAoc2wtPm1heCsxKSAqIHNpemVvZihjaGFyICopKTsKKwkJaWYgKCFuZXdfbGlzdCkKKwkJCXJldHVybiBFTk9NRU07CisJCXNsLT5saXN0ID0gbmV3X2xpc3Q7CisJfQorCXNsLT5saXN0W3NsLT5udW1dID0gbWFsbG9jKHN0cmxlbihzdHIpKzEpOworCWlmIChzbC0+bGlzdFtzbC0+bnVtXSA9PSAwKQorCQlyZXR1cm4gRU5PTUVNOworCXN0cmNweShzbC0+bGlzdFtzbC0+bnVtXSwgc3RyKTsKKwlzbC0+bnVtKys7CisJc2wtPmxpc3Rbc2wtPm51bV0gPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcmludF9zdHJfbGlzdChjaGFyICoqbGlzdCkKK3sKKwljaGFyICoqY3BwOworCisJZm9yIChjcHAgPSBsaXN0OyAqY3BwOyBjcHArKykgeworCQlwcmludGYoIiclcyciLCAqY3BwKTsKKwkJaWYgKGNwcFsxXSkKKwkJCWZwdXRzKCIsICIsIHN0ZG91dCk7CisJfQorCWZwdXRjKCdcbicsIHN0ZG91dCk7Cit9CisKKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgcHJvZmlsZSBoYXMgdGhlIGdpdmVuIHN1YnNlY3Rpb24KKyAqLworc3RhdGljIGludCBwcm9maWxlX2hhc19zdWJzZWN0aW9uKHByb2ZpbGVfdCBwcm9mLCBjb25zdCBjaGFyICpzZWN0aW9uLAorCQkJCSAgY29uc3QgY2hhciAqc3Vic2VjdGlvbikKK3sKKwl2b2lkCQkJKnN0YXRlOworCWNvbnN0IGNoYXIJCSpuYW1lc1s0XTsKKwljaGFyCQkJKm5hbWU7CisJaW50CQkJcmV0ID0gMDsKKworCW5hbWVzWzBdID0gc2VjdGlvbjsKKwluYW1lc1sxXSA9IHN1YnNlY3Rpb247CisJbmFtZXNbMl0gPSAwOworCisJaWYgKHByb2ZpbGVfaXRlcmF0b3JfY3JlYXRlKHByb2YsIG5hbWVzLAorCQkJCSAgICBQUk9GSUxFX0lURVJfTElTVF9TRUNUSU9OIHwKKwkJCQkgICAgUFJPRklMRV9JVEVSX1JFTEFUSU9OU19PTkxZLCAmc3RhdGUpKQorCQlyZXR1cm4gMDsKKworCWlmICgocHJvZmlsZV9pdGVyYXRvcigmc3RhdGUsICZuYW1lLCAwKSA9PSAwKSAmJiBuYW1lKSB7CisJCWZyZWUobmFtZSk7CisJCXJldCA9IDE7CisJfQorCisJcHJvZmlsZV9pdGVyYXRvcl9mcmVlKCZzdGF0ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNoYXIgKipwYXJzZV9mc190eXBlKGNvbnN0IGNoYXIgKmZzX3R5cGUsCisJCQkgICAgY29uc3QgY2hhciAqdXNhZ2VfdHlwZXMsCisJCQkgICAgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiLAorCQkJICAgIGJsazY0X3QgZnNfYmxvY2tzX2NvdW50LAorCQkJICAgIGNoYXIgKnByb2duYW1lKQoreworCWNvbnN0IGNoYXIJKmV4dF90eXBlID0gMDsKKwljaGFyCQkqcGFyc2Vfc3RyOworCWNoYXIJCSpwcm9maWxlX3R5cGUgPSAwOworCWNoYXIJCSpjcCwgKnQ7CisJY29uc3QgY2hhcgkqc2l6ZV90eXBlOworCXN0cnVjdCBzdHJfbGlzdAlsaXN0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBtZWc7CisJaW50CQlpc19odXJkID0gMDsKKworCWlmIChpbml0X2xpc3QoJmxpc3QpKQorCQlyZXR1cm4gMDsKKworCWlmIChjcmVhdG9yX29zICYmICghc3RyY2FzZWNtcChjcmVhdG9yX29zLCAiR05VIikgfHwKKwkJCSAgICFzdHJjYXNlY21wKGNyZWF0b3Jfb3MsICJodXJkIikpKQorCQlpc19odXJkID0gMTsKKworCWlmIChmc190eXBlKQorCQlleHRfdHlwZSA9IGZzX3R5cGU7CisJZWxzZSBpZiAoaXNfaHVyZCkKKwkJZXh0X3R5cGUgPSAiZXh0MiI7CisJZWxzZSBpZiAoIXN0cmNtcChwcm9ncmFtX25hbWUsICJta2UzZnMiKSkKKwkJZXh0X3R5cGUgPSAiZXh0MyI7CisJZWxzZSBpZiAoIXN0cmNtcChwcm9ncmFtX25hbWUsICJta2U0ZnMiKSkKKwkJZXh0X3R5cGUgPSAiZXh0NCI7CisJZWxzZSBpZiAocHJvZ25hbWUpIHsKKwkJZXh0X3R5cGUgPSBzdHJyY2hyKHByb2duYW1lLCAnLycpOworCQlpZiAoZXh0X3R5cGUpCisJCQlleHRfdHlwZSsrOworCQllbHNlCisJCQlleHRfdHlwZSA9IHByb2duYW1lOworCisJCWlmICghc3RybmNtcChleHRfdHlwZSwgIm1rZnMuIiwgNSkpIHsKKwkJCWV4dF90eXBlICs9IDU7CisJCQlpZiAoZXh0X3R5cGVbMF0gPT0gMCkKKwkJCQlleHRfdHlwZSA9IDA7CisJCX0gZWxzZQorCQkJZXh0X3R5cGUgPSAwOworCX0KKworCWlmICghZXh0X3R5cGUpIHsKKwkJcHJvZmlsZV9nZXRfc3RyaW5nKHByb2ZpbGUsICJkZWZhdWx0cyIsICJmc190eXBlIiwgMCwKKwkJCQkgICAiZXh0MiIsICZwcm9maWxlX3R5cGUpOworCQlleHRfdHlwZSA9IHByb2ZpbGVfdHlwZTsKKwkJaWYgKCFzdHJjbXAoZXh0X3R5cGUsICJleHQyIikgJiYgKGpvdXJuYWxfc2l6ZSAhPSAwKSkKKwkJCWV4dF90eXBlID0gImV4dDMiOworCX0KKworCisJaWYgKCFwcm9maWxlX2hhc19zdWJzZWN0aW9uKHByb2ZpbGUsICJmc190eXBlcyIsIGV4dF90eXBlKSAmJgorCSAgICBzdHJjbXAoZXh0X3R5cGUsICJleHQyIikpIHsKKwkJcHJpbnRmKF8oIlxuWW91ciBta2UyZnMuY29uZiBmaWxlIGRvZXMgbm90IGRlZmluZSB0aGUgIgorCQkJICIlcyBmaWxlc3lzdGVtIHR5cGUuXG4iKSwgZXh0X3R5cGUpOworCQlpZiAoIXN0cmNtcChleHRfdHlwZSwgImV4dDMiKSB8fCAhc3RyY21wKGV4dF90eXBlLCAiZXh0NCIpIHx8CisJCSAgICAhc3RyY21wKGV4dF90eXBlLCAiZXh0NGRldiIpKSB7CisJCQlwcmludGYoIiVzIiwgXygiWW91IHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBhbiAiCisJCQkJICAgICAgICJ1cGRhdGVkIG1rZTJmcy5jb25mIGZpbGUuXG5cbiIpKTsKKwkJfQorCQlpZiAoIWZvcmNlKSB7CisJCQlwcmludGYoIiVzIiwgXygiQWJvcnRpbmcuLi5cbiIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwltZWcgPSAoMTAyNCAqIDEwMjQpIC8gRVhUMl9CTE9DS19TSVpFKHNiKTsKKwlpZiAoZnNfYmxvY2tzX2NvdW50IDwgMyAqIG1lZykKKwkJc2l6ZV90eXBlID0gImZsb3BweSI7CisJZWxzZSBpZiAoZnNfYmxvY2tzX2NvdW50IDwgNTEyICogbWVnKQorCQlzaXplX3R5cGUgPSAic21hbGwiOworCWVsc2UgaWYgKGZzX2Jsb2Nrc19jb3VudCA8IDQgKiAxMDI0ICogMTAyNCAqIG1lZykKKwkJc2l6ZV90eXBlID0gImRlZmF1bHQiOworCWVsc2UgaWYgKGZzX2Jsb2Nrc19jb3VudCA8IDE2ICogMTAyNCAqIDEwMjQgKiBtZWcpCisJCXNpemVfdHlwZSA9ICJiaWciOworCWVsc2UKKwkJc2l6ZV90eXBlID0gImh1Z2UiOworCisJaWYgKCF1c2FnZV90eXBlcykKKwkJdXNhZ2VfdHlwZXMgPSBzaXplX3R5cGU7CisKKwlwYXJzZV9zdHIgPSBtYWxsb2Moc3RybGVuKHVzYWdlX3R5cGVzKSsxKTsKKwlpZiAoIXBhcnNlX3N0cikgeworCQlmcmVlKHByb2ZpbGVfdHlwZSk7CisJCWZyZWUobGlzdC5saXN0KTsKKwkJcmV0dXJuIDA7CisJfQorCXN0cmNweShwYXJzZV9zdHIsIHVzYWdlX3R5cGVzKTsKKworCWlmIChleHRfdHlwZSkKKwkJcHVzaF9zdHJpbmcoJmxpc3QsIGV4dF90eXBlKTsKKwljcCA9IHBhcnNlX3N0cjsKKwl3aGlsZSAoMSkgeworCQl0ID0gc3RyY2hyKGNwLCAnLCcpOworCQlpZiAodCkKKwkJCSp0ID0gJ1wwJzsKKworCQlpZiAoKmNwKSB7CisJCQlpZiAocHJvZmlsZV9oYXNfc3Vic2VjdGlvbihwcm9maWxlLCAiZnNfdHlwZXMiLCBjcCkpCisJCQkJcHVzaF9zdHJpbmcoJmxpc3QsIGNwKTsKKwkJCWVsc2UgaWYgKHN0cmNtcChjcCwgImRlZmF1bHQiKSAhPSAwKQorCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCJcbldhcm5pbmc6IHRoZSBmc190eXBlICVzIGlzIG5vdCAiCisJCQkJCSAgImRlZmluZWQgaW4gbWtlMmZzLmNvbmZcblxuIiksCisJCQkJCWNwKTsKKwkJfQorCQlpZiAodCkKKwkJCWNwID0gdCsxOworCQllbHNlCisJCQlicmVhazsKKwl9CisJZnJlZShwYXJzZV9zdHIpOworCWZyZWUocHJvZmlsZV90eXBlKTsKKwlpZiAoaXNfaHVyZCkKKwkJcHVzaF9zdHJpbmcoJmxpc3QsICJodXJkIik7CisJcmV0dXJuIChsaXN0Lmxpc3QpOworfQorCitjaGFyICpnZXRfc3RyaW5nX2Zyb21fcHJvZmlsZShjaGFyICoqdHlwZXMsIGNvbnN0IGNoYXIgKm9wdCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmRlZl92YWwpCit7CisJY2hhciAqcmV0ID0gMDsKKwlpbnQgaTsKKworCWZvciAoaT0wOyB0eXBlc1tpXTsgaSsrKTsKKwlmb3IgKGktPTE7IGkgPj0wIDsgaS0tKSB7CisJCXByb2ZpbGVfZ2V0X3N0cmluZyhwcm9maWxlLCAiZnNfdHlwZXMiLCB0eXBlc1tpXSwKKwkJCQkgICBvcHQsIDAsICZyZXQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJcHJvZmlsZV9nZXRfc3RyaW5nKHByb2ZpbGUsICJkZWZhdWx0cyIsIG9wdCwgMCwgZGVmX3ZhbCwgJnJldCk7CisJcmV0dXJuIChyZXQpOworfQorCitpbnQgZ2V0X2ludF9mcm9tX3Byb2ZpbGUoY2hhciAqKnR5cGVzLCBjb25zdCBjaGFyICpvcHQsIGludCBkZWZfdmFsKQoreworCWludCByZXQ7CisJY2hhciAqKmNwcDsKKworCXByb2ZpbGVfZ2V0X2ludGVnZXIocHJvZmlsZSwgImRlZmF1bHRzIiwgb3B0LCAwLCBkZWZfdmFsLCAmcmV0KTsKKwlmb3IgKGNwcCA9IHR5cGVzOyAqY3BwOyBjcHArKykKKwkJcHJvZmlsZV9nZXRfaW50ZWdlcihwcm9maWxlLCAiZnNfdHlwZXMiLCAqY3BwLCBvcHQsIHJldCwgJnJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludF9mcm9tX3Byb2ZpbGUoY2hhciAqKnR5cGVzLCBjb25zdCBjaGFyICpvcHQsCisJCQkJCXVuc2lnbmVkIGludCBkZWZfdmFsKQoreworCXVuc2lnbmVkIGludCByZXQ7CisJY2hhciAqKmNwcDsKKworCXByb2ZpbGVfZ2V0X3VpbnQocHJvZmlsZSwgImRlZmF1bHRzIiwgb3B0LCAwLCBkZWZfdmFsLCAmcmV0KTsKKwlmb3IgKGNwcCA9IHR5cGVzOyAqY3BwOyBjcHArKykKKwkJcHJvZmlsZV9nZXRfdWludChwcm9maWxlLCAiZnNfdHlwZXMiLCAqY3BwLCBvcHQsIHJldCwgJnJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGRvdWJsZSBnZXRfZG91YmxlX2Zyb21fcHJvZmlsZShjaGFyICoqdHlwZXMsIGNvbnN0IGNoYXIgKm9wdCwKKwkJCQkgICAgICBkb3VibGUgZGVmX3ZhbCkKK3sKKwlkb3VibGUgcmV0OworCWNoYXIgKipjcHA7CisKKwlwcm9maWxlX2dldF9kb3VibGUocHJvZmlsZSwgImRlZmF1bHRzIiwgb3B0LCAwLCBkZWZfdmFsLCAmcmV0KTsKKwlmb3IgKGNwcCA9IHR5cGVzOyAqY3BwOyBjcHArKykKKwkJcHJvZmlsZV9nZXRfZG91YmxlKHByb2ZpbGUsICJmc190eXBlcyIsICpjcHAsIG9wdCwgcmV0LCAmcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZ2V0X2Jvb2xfZnJvbV9wcm9maWxlKGNoYXIgKip0eXBlcywgY29uc3QgY2hhciAqb3B0LCBpbnQgZGVmX3ZhbCkKK3sKKwlpbnQgcmV0OworCWNoYXIgKipjcHA7CisKKwlwcm9maWxlX2dldF9ib29sZWFuKHByb2ZpbGUsICJkZWZhdWx0cyIsIG9wdCwgMCwgZGVmX3ZhbCwgJnJldCk7CisJZm9yIChjcHAgPSB0eXBlczsgKmNwcDsgY3BwKyspCisJCXByb2ZpbGVfZ2V0X2Jvb2xlYW4ocHJvZmlsZSwgImZzX3R5cGVzIiwgKmNwcCwgb3B0LCByZXQsICZyZXQpOworCXJldHVybiByZXQ7Cit9CisKK2V4dGVybiBjb25zdCBjaGFyICpta2UyZnNfZGVmYXVsdF9wcm9maWxlOworc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfZmlsZXNbXSA9IHsgIjxkZWZhdWx0PiIsIDAgfTsKKworI2lmZGVmIEhBVkVfQkxLSURfUFJPQkVfR0VUX1RPUE9MT0dZCisvKgorICogU2V0cyB0aGUgZ2VvbWV0cnkgb2YgYSBkZXZpY2UgKHN0cmlwZS9zdHJpZGUpLCBhbmQgcmV0dXJucyB0aGUKKyAqIGRldmljZSdzIGFsaWdubWVudCBvZmZzZXQsIGlmIGFueSwgb3IgYSBuZWdhdGl2ZSBlcnJvci4KKyAqLworc3RhdGljIGludCBnZXRfZGV2aWNlX2dlb21ldHJ5KGNvbnN0IGNoYXIgKmZpbGUsCisJCQkgICAgICAgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmZzX3BhcmFtLAorCQkJICAgICAgIGludCBwc2VjdG9yX3NpemUpCit7CisJaW50IHJjID0gLTE7CisJaW50IGJsb2Nrc2l6ZTsKKwlibGtpZF9wcm9iZSBwcjsKKwlibGtpZF90b3BvbG9neSB0cDsKKwl1bnNpZ25lZCBsb25nIG1pbl9pbzsKKwl1bnNpZ25lZCBsb25nIG9wdF9pbzsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCisJLyogTm90aGluZyB0byBkbyBmb3IgYSByZWd1bGFyIGZpbGUgKi8KKwlpZiAoIXN0YXQoZmlsZSwgJnN0YXRidWYpICYmIFNfSVNSRUcoc3RhdGJ1Zi5zdF9tb2RlKSkKKwkJcmV0dXJuIDA7CisKKwlwciA9IGJsa2lkX25ld19wcm9iZV9mcm9tX2ZpbGVuYW1lKGZpbGUpOworCWlmICghcHIpCisJCWdvdG8gb3V0OworCisJdHAgPSBibGtpZF9wcm9iZV9nZXRfdG9wb2xvZ3kocHIpOworCWlmICghdHApCisJCWdvdG8gb3V0OworCisJbWluX2lvID0gYmxraWRfdG9wb2xvZ3lfZ2V0X21pbmltdW1faW9fc2l6ZSh0cCk7CisJb3B0X2lvID0gYmxraWRfdG9wb2xvZ3lfZ2V0X29wdGltYWxfaW9fc2l6ZSh0cCk7CisJYmxvY2tzaXplID0gRVhUMl9CTE9DS19TSVpFKGZzX3BhcmFtKTsKKwlpZiAoKG1pbl9pbyA9PSAwKSAmJiAocHNlY3Rvcl9zaXplID4gYmxvY2tzaXplKSkKKwkJbWluX2lvID0gcHNlY3Rvcl9zaXplOworCWlmICgob3B0X2lvID09IDApICYmIG1pbl9pbykKKwkJb3B0X2lvID0gbWluX2lvOworCWlmICgob3B0X2lvID09IDApICYmIChwc2VjdG9yX3NpemUgPiBibG9ja3NpemUpKQorCQlvcHRfaW8gPSBwc2VjdG9yX3NpemU7CisKKwkvKiBzZXR0aW5nIHN0cmlwZS9zdHJpZGUgdG8gYmxvY2tzaXplIGlzIHBvaW50bGVzcyAqLworCWlmIChtaW5faW8gPiBibG9ja3NpemUpCisJCWZzX3BhcmFtLT5zX3JhaWRfc3RyaWRlID0gbWluX2lvIC8gYmxvY2tzaXplOworCWlmIChvcHRfaW8gPiBibG9ja3NpemUpCisJCWZzX3BhcmFtLT5zX3JhaWRfc3RyaXBlX3dpZHRoID0gb3B0X2lvIC8gYmxvY2tzaXplOworCisJcmMgPSBibGtpZF90b3BvbG9neV9nZXRfYWxpZ25tZW50X29mZnNldCh0cCk7CitvdXQ6CisJYmxraWRfZnJlZV9wcm9iZShwcik7CisJcmV0dXJuIHJjOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIFBSUyhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludAkJYiwgYywgZmxhZ3M7CisJaW50CQljbHVzdGVyX3NpemUgPSAwOworCWNoYXIgCQkqdG1wLCAqKmNwcDsKKwlpbnQJCWJsb2Nrc2l6ZSA9IDA7CisJaW50CQlpbm9kZV9yYXRpbyA9IDA7CisJaW50CQlpbm9kZV9zaXplID0gMDsKKwl1bnNpZ25lZCBsb25nCWZsZXhfYmdfc2l6ZSA9IDA7CisJZG91YmxlCQlyZXNlcnZlZF9yYXRpbyA9IC0xLjA7CisJaW50CQlsc2VjdG9yX3NpemUgPSAwLCBwc2VjdG9yX3NpemUgPSAwOworCWludAkJc2hvd192ZXJzaW9uX29ubHkgPSAwLCBpc19kZXZpY2UgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBudW1faW5vZGVzID0gMDsgLyogdW5zaWduZWQgbG9uZyBsb25nIHRvIGNhdGNoIHRvby1sYXJnZSBpbnB1dCAqLworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhciAqCQlvbGRwYXRoID0gZ2V0ZW52KCJQQVRIIik7CisJY2hhciAqCQlleHRlbmRlZF9vcHRzID0gMDsKKwljaGFyICoJCWZzX3R5cGUgPSAwOworCWNoYXIgKgkJdXNhZ2VfdHlwZXMgPSAwOworCS8qCisJICogTk9URTogQSBmZXcgd29yZHMgYWJvdXQgZnNfYmxvY2tzX2NvdW50IGFuZCBibG9ja3NpemU6CisJICoKKwkgKiBJbml0aWFsbHksIGJsb2Nrc2l6ZSBpcyBzZXQgdG8gemVybywgd2hpY2ggaW1wbGllcyAxMDI0LgorCSAqIElmIC1iIGlzIHNwZWNpZmllZCwgYmxvY2tzaXplIGlzIHVwZGF0ZWQgdG8gdGhlIHVzZXIncyB2YWx1ZS4KKwkgKgorCSAqIE5leHQsIHRoZSBkZXZpY2Ugc2l6ZSBvciB0aGUgdXNlcidzICJibG9ja3MiIGNvbW1hbmQgbGluZSBhcmd1bWVudAorCSAqIGlzIHVzZWQgdG8gc2V0IGZzX2Jsb2Nrc19jb3VudDsgdGhlIHVuaXRzIGFyZSBibG9ja3NpemUuCisJICoKKwkgKiBMYXRlciwgaWYgYmxvY2tzaXplIGhhc24ndCBiZWVuIHNldCBhbmQgdGhlIHByb2ZpbGUgc3BlY2lmaWVzIGEKKwkgKiBibG9ja3NpemUsIHRoZW4gYmxvY2tzaXplIGlzIHVwZGF0ZWQgYW5kIGZzX2Jsb2Nrc19jb3VudCBpcyBzY2FsZWQKKwkgKiBhcHByb3ByaWF0ZWx5LiAgTm90ZSB0aGUgY2hhbmdlIGluIHVuaXRzIQorCSAqCisJICogRmluYWxseSwgd2UgY29tcGxhaW4gYWJvdXQgZnNfYmxvY2tzX2NvdW50ID4gMl4zMiBvbiBhIG5vbi02NGJpdCBmcy4KKwkgKi8KKwlibGs2NF90CQlmc19ibG9ja3NfY291bnQgPSAwOworCWxvbmcJCXN5c3ZhbDsKKwlpbnQJCXNfb3B0ID0gLTEsIHJfb3B0ID0gLTE7CisJY2hhcgkJKmZzX2ZlYXR1cmVzID0gMDsKKwlpbnQJCXVzZV9ic2l6ZTsKKwljaGFyCQkqbmV3cGF0aDsKKwlpbnQJCXBhdGhsZW4gPSBzaXplb2YoUEFUSF9TRVQpICsgMTsKKworCWlmIChvbGRwYXRoKQorCQlwYXRobGVuICs9IHN0cmxlbihvbGRwYXRoKTsKKwluZXdwYXRoID0gbWFsbG9jKHBhdGhsZW4pOworCWlmICghbmV3cGF0aCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKwkJCV8oIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IFBBVEguXG4iKSk7CisJCWV4aXQoMSk7CisJfQorCXN0cmNweShuZXdwYXRoLCBQQVRIX1NFVCk7CisKKwkvKiBVcGRhdGUgb3VyIFBBVEggdG8gaW5jbHVkZSAvc2JpbiAgKi8KKwlpZiAob2xkcGF0aCkgeworCQlzdHJjYXQgKG5ld3BhdGgsICI6Iik7CisJCXN0cmNhdCAobmV3cGF0aCwgb2xkcGF0aCk7CisJfQorCXB1dGVudiAobmV3cGF0aCk7CisKKwl0bXAgPSBnZXRlbnYoIk1LRTJGU19TWU5DIik7CisJaWYgKHRtcCkKKwkJc3luY19rbHVkZ2UgPSBhdG9pKHRtcCk7CisKKwkvKiBEZXRlcm1pbmUgdGhlIHN5c3RlbSBwYWdlIHNpemUgaWYgcG9zc2libGUgKi8KKyNpZmRlZiBIQVZFX1NZU0NPTkYKKyNpZiAoIWRlZmluZWQoX1NDX1BBR0VTSVpFKSAmJiBkZWZpbmVkKF9TQ19QQUdFX1NJWkUpKQorI2RlZmluZSBfU0NfUEFHRVNJWkUgX1NDX1BBR0VfU0laRQorI2VuZGlmCisjaWZkZWYgX1NDX1BBR0VTSVpFCisJc3lzdmFsID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOworCWlmIChzeXN2YWwgPiAwKQorCQlzeXNfcGFnZV9zaXplID0gc3lzdmFsOworI2VuZGlmIC8qIF9TQ19QQUdFU0laRSAqLworI2VuZGlmIC8qIEhBVkVfU1lTQ09ORiAqLworCisJaWYgKCh0bXAgPSBnZXRlbnYoIk1LRTJGU19DT05GSUciKSkgIT0gTlVMTCkKKwkJY29uZmlnX2ZuWzBdID0gdG1wOworCXByb2ZpbGVfc2V0X3N5bnRheF9lcnJfY2Ioc3ludGF4X2Vycl9yZXBvcnQpOworCXJldHZhbCA9IHByb2ZpbGVfaW5pdChjb25maWdfZm4sICZwcm9maWxlKTsKKwlpZiAocmV0dmFsID09IEVOT0VOVCkgeworCQlyZXR2YWwgPSBwcm9maWxlX2luaXQoZGVmYXVsdF9maWxlcywgJnByb2ZpbGUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBwcm9maWxlX2Vycm9yOworCQlyZXR2YWwgPSBwcm9maWxlX3NldF9kZWZhdWx0KHByb2ZpbGUsIG1rZTJmc19kZWZhdWx0X3Byb2ZpbGUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBwcm9maWxlX2Vycm9yOworCX0gZWxzZSBpZiAocmV0dmFsKSB7Citwcm9maWxlX2Vycm9yOgorCQlmcHJpbnRmKHN0ZGVyciwgXygiQ291bGRuJ3QgaW5pdCBwcm9maWxlIHN1Y2Nlc3NmdWxseSIKKwkJCQkgICIgKGVycm9yOiAlbGQpLlxuIiksIHJldHZhbCk7CisJCWV4aXQoMSk7CisJfQorCisJc2V0YnVmKHN0ZG91dCwgTlVMTCk7CisJc2V0YnVmKHN0ZGVyciwgTlVMTCk7CisJYWRkX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKwlhZGRfZXJyb3JfdGFibGUoJmV0X3Byb2ZfZXJyb3JfdGFibGUpOworCW1lbXNldCgmZnNfcGFyYW0sIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jaykpOworCWZzX3BhcmFtLnNfcmV2X2xldmVsID0gMTsgIC8qIENyZWF0ZSByZXZpc2lvbiAxIGZpbGVzeXN0ZW1zIG5vdyAqLworCisJaWYgKGlzX2JlZm9yZV9saW51eF92ZXIoMiwgMiwgMCkpCisJCWZzX3BhcmFtLnNfcmV2X2xldmVsID0gMDsKKworCWlmIChhcmdjICYmICphcmd2KSB7CisJCXByb2dyYW1fbmFtZSA9IGdldF9wcm9nbmFtZSgqYXJndik7CisKKwkJLyogSWYgY2FsbGVkIGFzIG1rZnMuZXh0MywgY3JlYXRlIGEgam91cm5hbCBpbm9kZSAqLworCQlpZiAoIXN0cmNtcChwcm9ncmFtX25hbWUsICJta2ZzLmV4dDMiKSB8fAorCQkgICAgIXN0cmNtcChwcm9ncmFtX25hbWUsICJta2UzZnMiKSkKKwkJCWpvdXJuYWxfc2l6ZSA9IC0xOworCX0KKworCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwKKwkJICAgICJiOmNnOmk6amw6bTpubzpxcjpzOnQ6dkM6REU6Rkc6STpKOktMOk06TjpPOlI6U1Q6VTpWIikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYic6CisJCQlibG9ja3NpemUgPSBwYXJzZV9udW1fYmxvY2tzMihvcHRhcmcsIC0xKTsKKwkJCWIgPSAoYmxvY2tzaXplID4gMCkgPyBibG9ja3NpemUgOiAtYmxvY2tzaXplOworCQkJaWYgKGIgPCBFWFQyX01JTl9CTE9DS19TSVpFIHx8CisJCQkgICAgYiA+IEVYVDJfTUFYX0JMT0NLX1NJWkUpIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQkJXygiaW52YWxpZCBibG9jayBzaXplIC0gJXMiKSwgb3B0YXJnKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJaWYgKGJsb2Nrc2l6ZSA+IDQwOTYpCisJCQkJZnByaW50ZihzdGRlcnIsIF8oIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgIgorCQkJCQkJICAidXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIpLAorCQkJCQlibG9ja3NpemUpOworCQkJaWYgKGJsb2Nrc2l6ZSA+IDApCisJCQkJZnNfcGFyYW0uc19sb2dfYmxvY2tfc2l6ZSA9CisJCQkJCWludF9sb2cyKGJsb2Nrc2l6ZSA+PgorCQkJCQkJIEVYVDJfTUlOX0JMT0NLX0xPR19TSVpFKTsKKwkJCWJyZWFrOworCQljYXNlICdjJzoJLyogQ2hlY2sgZm9yIGJhZCBibG9ja3MgKi8KKwkJCWNmbGFnKys7CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCQljbHVzdGVyX3NpemUgPSBwYXJzZV9udW1fYmxvY2tzMihvcHRhcmcsIC0xKTsKKwkJCWlmIChjbHVzdGVyX3NpemUgPD0gRVhUMl9NSU5fQ0xVU1RFUl9TSVpFIHx8CisJCQkgICAgY2x1c3Rlcl9zaXplID4gRVhUMl9NQVhfQ0xVU1RFUl9TSVpFKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJCV8oImludmFsaWQgY2x1c3RlciBzaXplIC0gJXMiKSwKKwkJCQkJb3B0YXJnKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ0QnOgorCQkJZGlyZWN0X2lvID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdSJzoKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCV8oIictUicgaXMgZGVwcmVjYXRlZCwgdXNlICctRScgaW5zdGVhZCIpKTsKKwkJCS8qIGZhbGx0aHJvdWdoICovCisJCWNhc2UgJ0UnOgorCQkJZXh0ZW5kZWRfb3B0cyA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdGJzoKKwkJCWZvcmNlKys7CisJCQlicmVhazsKKwkJY2FzZSAnZyc6CisJCQlmc19wYXJhbS5zX2Jsb2Nrc19wZXJfZ3JvdXAgPSBzdHJ0b3VsKG9wdGFyZywgJnRtcCwgMCk7CisJCQlpZiAoKnRtcCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCV8oIklsbGVnYWwgbnVtYmVyIGZvciBibG9ja3MgcGVyIGdyb3VwIikpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlpZiAoKGZzX3BhcmFtLnNfYmxvY2tzX3Blcl9ncm91cCAlIDgpICE9IDApIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCQlfKCJibG9ja3MgcGVyIGdyb3VwIG11c3QgYmUgbXVsdGlwbGUgb2YgOCIpKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ0cnOgorCQkJZmxleF9iZ19zaXplID0gc3RydG91bChvcHRhcmcsICZ0bXAsIDApOworCQkJaWYgKCp0bXApIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCQkJXygiSWxsZWdhbCBudW1iZXIgZm9yIGZsZXhfYmcgc2l6ZSIpKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJaWYgKGZsZXhfYmdfc2l6ZSA8IDEgfHwKKwkJCSAgICAoZmxleF9iZ19zaXplICYgKGZsZXhfYmdfc2l6ZS0xKSkgIT0gMCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCQlfKCJmbGV4X2JnIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIiKSk7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCWlmIChmbGV4X2JnX3NpemUgPiBNQVhfMzJfTlVNKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJXygiZmxleF9iZyBzaXplICglbHUpIG11c3QgYmUgbGVzcyB0aGFuIgorCQkJCSIgb3IgZXF1YWwgdG8gMl4zMSIpLCBmbGV4X2JnX3NpemUpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQlpbm9kZV9yYXRpbyA9IHN0cnRvdWwob3B0YXJnLCAmdG1wLCAwKTsKKwkJCWlmIChpbm9kZV9yYXRpbyA8IEVYVDJfTUlOX0JMT0NLX1NJWkUgfHwKKwkJCSAgICBpbm9kZV9yYXRpbyA+IEVYVDJfTUFYX0JMT0NLX1NJWkUgKiAxMDI0IHx8CisJCQkgICAgKnRtcCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJpbnZhbGlkIGlub2RlIHJhdGlvICVzIChtaW4gJWQvbWF4ICVkKSIpLAorCQkJCQlvcHRhcmcsIEVYVDJfTUlOX0JMT0NLX1NJWkUsCisJCQkJCUVYVDJfTUFYX0JMT0NLX1NJWkUgKiAxMDI0KTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ0knOgorCQkJaW5vZGVfc2l6ZSA9IHN0cnRvdWwob3B0YXJnLCAmdG1wLCAwKTsKKwkJCWlmICgqdG1wKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJCV8oImludmFsaWQgaW5vZGUgc2l6ZSAtICVzIiksIG9wdGFyZyk7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdqJzoKKwkJCWlmICgham91cm5hbF9zaXplKQorCQkJCWpvdXJuYWxfc2l6ZSA9IC0xOworCQkJYnJlYWs7CisJCWNhc2UgJ0onOgorCQkJcGFyc2Vfam91cm5hbF9vcHRzKG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAnSyc6CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKwkJCQlfKCJXYXJuaW5nOiAtSyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgIgorCQkJCSAgInNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLiBVc2UgIgorCQkJCSAgIlwnLUUgbm9kaXNjYXJkXCcgZXh0ZW5kZWQgb3B0aW9uICIKKwkJCQkgICJpbnN0ZWFkIVxuIikpOworCQkJZGlzY2FyZCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAnbCc6CisJCQliYWRfYmxvY2tzX2ZpbGVuYW1lID0gcmVhbGxvYyhiYWRfYmxvY2tzX2ZpbGVuYW1lLAorCQkJCQkJICAgICAgc3RybGVuKG9wdGFyZykgKyAxKTsKKwkJCWlmICghYmFkX2Jsb2Nrc19maWxlbmFtZSkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBFTk9NRU0sICIlcyIsCisJCQkJCV8oImluIG1hbGxvYyBmb3IgYmFkX2Jsb2Nrc19maWxlbmFtZSIpKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJc3RyY3B5KGJhZF9ibG9ja3NfZmlsZW5hbWUsIG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAnTCc6CisJCQl2b2x1bWVfbGFiZWwgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlyZXNlcnZlZF9yYXRpbyA9IHN0cnRvZChvcHRhcmcsICZ0bXApOworCQkJaWYgKCAqdG1wIHx8IHJlc2VydmVkX3JhdGlvID4gNTAgfHwKKwkJCSAgICAgcmVzZXJ2ZWRfcmF0aW8gPCAwKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJCV8oImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlcyIpLAorCQkJCQlvcHRhcmcpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnTSc6CisJCQltb3VudF9kaXIgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAnbic6CisJCQlub2FjdGlvbisrOworCQkJYnJlYWs7CisJCWNhc2UgJ04nOgorCQkJbnVtX2lub2RlcyA9IHN0cnRvdWwob3B0YXJnLCAmdG1wLCAwKTsKKwkJCWlmICgqdG1wKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJCV8oImJhZCBudW0gaW5vZGVzIC0gJXMiKSwgb3B0YXJnKTsKKwkJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdvJzoKKwkJCWNyZWF0b3Jfb3MgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAnTyc6CisJCQlmc19mZWF0dXJlcyA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdxJzoKKwkJCXF1aWV0ID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdyJzoKKwkJCXJfb3B0ID0gc3RydG91bChvcHRhcmcsICZ0bXAsIDApOworCQkJaWYgKCp0bXApIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQkJXygiYmFkIHJldmlzaW9uIGxldmVsIC0gJXMiKSwgb3B0YXJnKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJaWYgKHJfb3B0ID4gRVhUMl9NQVhfU1VQUF9SRVYpIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgRVhUMl9FVF9SRVZfVE9PX0hJR0gsCisJCQkJCV8oIndoaWxlIHRyeWluZyB0byBjcmVhdGUgcmV2aXNpb24gJWQiKSwgcl9vcHQpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlmc19wYXJhbS5zX3Jldl9sZXZlbCA9IHJfb3B0OworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgkvKiBkZXByZWNhdGVkICovCisJCQlzX29wdCA9IGF0b2kob3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdTJzoKKwkJCXN1cGVyX29ubHkgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ3QnOgorCQkJaWYgKGZzX3R5cGUpIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCQkgICAgXygiVGhlIC10IG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiKSk7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCWZzX3R5cGUgPSBzdHJkdXAob3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdUJzoKKwkJCWlmICh1c2FnZV90eXBlcykgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCSAgICBfKCJUaGUgLVQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIpKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJdXNhZ2VfdHlwZXMgPSBzdHJkdXAob3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdVJzoKKwkJCWZzX3V1aWQgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAndic6CisJCQl2ZXJib3NlID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCS8qIFByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBleGl0ICovCisJCQlzaG93X3ZlcnNpb25fb25seSsrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl1c2FnZSgpOworCQl9CisJfQorCWlmICgob3B0aW5kID09IGFyZ2MpICYmICFzaG93X3ZlcnNpb25fb25seSkKKwkJdXNhZ2UoKTsKKwlkZXZpY2VfbmFtZSA9IGFyZ3Zbb3B0aW5kKytdOworCisJaWYgKCFxdWlldCB8fCBzaG93X3ZlcnNpb25fb25seSkKKwkJZnByaW50ZiAoc3RkZXJyLCAibWtlMmZzICVzICglcylcbiIsIEUyRlNQUk9HU19WRVJTSU9OLAorCQkJIEUyRlNQUk9HU19EQVRFKTsKKworCWlmIChzaG93X3ZlcnNpb25fb25seSkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiXHRVc2luZyAlc1xuIiksCisJCQllcnJvcl9tZXNzYWdlKEVYVDJfRVRfQkFTRSkpOworCQlleGl0KDApOworCX0KKworCS8qCisJICogSWYgdGhlcmUncyBubyBibG9ja3NpemUgc3BlY2lmaWVkIGFuZCB0aGVyZSBpcyBhIGpvdXJuYWwKKwkgKiBkZXZpY2UsIHVzZSBpdCB0byBmaWd1cmUgb3V0IHRoZSBibG9ja3NpemUKKwkgKi8KKwlpZiAoYmxvY2tzaXplIDw9IDAgJiYgam91cm5hbF9kZXZpY2UpIHsKKwkJZXh0Ml9maWxzeXMJamZzOworCQlpb19tYW5hZ2VyCWlvX3B0cjsKKworI2lmZGVmIENPTkZJR19URVNUSU9fREVCVUcKKwkJaWYgKGdldGVudigiVEVTVF9JT19GTEFHUyIpIHx8IGdldGVudigiVEVTVF9JT19CTE9DSyIpKSB7CisJCQlpb19wdHIgPSB0ZXN0X2lvX21hbmFnZXI7CisJCQl0ZXN0X2lvX2JhY2tpbmdfbWFuYWdlciA9IHVuaXhfaW9fbWFuYWdlcjsKKwkJfSBlbHNlCisjZW5kaWYKKwkJCWlvX3B0ciA9IHVuaXhfaW9fbWFuYWdlcjsKKwkJcmV0dmFsID0gZXh0MmZzX29wZW4oam91cm5hbF9kZXZpY2UsCisJCQkJICAgICBFWFQyX0ZMQUdfSk9VUk5BTF9ERVZfT0ssIDAsCisJCQkJICAgICAwLCBpb19wdHIsICZqZnMpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLAorCQkJCV8oIndoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgZGV2aWNlICVzXG4iKSwKKwkJCQlqb3VybmFsX2RldmljZSk7CisJCQlleGl0KDEpOworCQl9CisJCWlmICgoYmxvY2tzaXplIDwgMCkgJiYgKGpmcy0+YmxvY2tzaXplIDwgKHVuc2lnbmVkKSAoLWJsb2Nrc2l6ZSkpKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQlfKCJKb3VybmFsIGRldiBibG9ja3NpemUgKCVkKSBzbWFsbGVyIHRoYW4gIgorCQkJCSAgIm1pbmltdW0gYmxvY2tzaXplICVkXG4iKSwgamZzLT5ibG9ja3NpemUsCisJCQkJLWJsb2Nrc2l6ZSk7CisJCQlleGl0KDEpOworCQl9CisJCWJsb2Nrc2l6ZSA9IGpmcy0+YmxvY2tzaXplOworCQlwcmludGYoXygiVXNpbmcgam91cm5hbCBkZXZpY2UncyBibG9ja3NpemU6ICVkXG4iKSwgYmxvY2tzaXplKTsKKwkJZnNfcGFyYW0uc19sb2dfYmxvY2tfc2l6ZSA9CisJCQlpbnRfbG9nMihibG9ja3NpemUgPj4gRVhUMl9NSU5fQkxPQ0tfTE9HX1NJWkUpOworCQlleHQyZnNfY2xvc2VfZnJlZSgmamZzKTsKKwl9CisKKwlpZiAob3B0aW5kIDwgYXJnYykgeworCQlmc19ibG9ja3NfY291bnQgPSBwYXJzZV9udW1fYmxvY2tzMihhcmd2W29wdGluZCsrXSwKKwkJCQkJCSAgIGZzX3BhcmFtLnNfbG9nX2Jsb2NrX3NpemUpOworCQlpZiAoIWZzX2Jsb2Nrc19jb3VudCkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJXygiaW52YWxpZCBibG9ja3MgJyVzJyBvbiBkZXZpY2UgJyVzJyIpLAorCQkJCWFyZ3Zbb3B0aW5kIC0gMV0sIGRldmljZV9uYW1lKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJaWYgKG9wdGluZCA8IGFyZ2MpCisJCXVzYWdlKCk7CisKKwlwcm9maWxlX2dldF9pbnRlZ2VyKHByb2ZpbGUsICJvcHRpb25zIiwgInByb2NlZWRfZGVsYXkiLCAwLCAwLAorCQkJICAgICZwcm9jZWVkX2RlbGF5KTsKKworCS8qIFRoZSBpc2F0dHkoKSB0ZXN0IGlzIHNvIHdlIGRvbid0IGJyZWFrIGV4aXN0aW5nIHNjcmlwdHMgKi8KKwlmbGFncyA9IENSRUFURV9GSUxFOworCWlmIChpc2F0dHkoMCkgJiYgaXNhdHR5KDEpKQorCQlmbGFncyB8PSBDSEVDS19GU19FWElTVDsKKwlpZiAoIXF1aWV0KQorCQlmbGFncyB8PSBWRVJCT1NFX0NSRUFURTsKKwlpZiAoZnNfYmxvY2tzX2NvdW50ID09IDApCisJCWZsYWdzIHw9IE5PX1NJWkU7CisJaWYgKCFjaGVja19wbGF1c2liaWxpdHkoZGV2aWNlX25hbWUsIGZsYWdzLCAmaXNfZGV2aWNlKSAmJiAhZm9yY2UpCisJCXByb2NlZWRfcXVlc3Rpb24ocHJvY2VlZF9kZWxheSk7CisKKwljaGVja19tb3VudChkZXZpY2VfbmFtZSwgZm9yY2UsIF8oImZpbGVzeXN0ZW0iKSk7CisKKwkvKiBEZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIGRldmljZSAoaWYgcG9zc2libGUpICovCisJaWYgKG5vYWN0aW9uICYmIGZzX2Jsb2Nrc19jb3VudCkgeworCQlkZXZfc2l6ZSA9IGZzX2Jsb2Nrc19jb3VudDsKKwkJcmV0dmFsID0gMDsKKwl9IGVsc2UKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZTIoZGV2aWNlX25hbWUsCisJCQkJCQkgRVhUMl9CTE9DS19TSVpFKCZmc19wYXJhbSksCisJCQkJCQkgJmRldl9zaXplKTsKKworCWlmIChyZXR2YWwgJiYgKHJldHZhbCAhPSBFWFQyX0VUX1VOSU1QTEVNRU5URUQpKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gc2l6ZSIpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKCFmc19ibG9ja3NfY291bnQpIHsKKwkJaWYgKHJldHZhbCA9PSBFWFQyX0VUX1VOSU1QTEVNRU5URUQpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCV8oIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91ICIKKwkJCQkibXVzdCBzcGVjaWZ5XG50aGUgc2l6ZSBvZiB0aGUgIgorCQkJCSJmaWxlc3lzdGVtXG4iKSk7CisJCQlleGl0KDEpOworCQl9IGVsc2UgeworCQkJaWYgKGRldl9zaXplID09IDApIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCQlfKCJEZXZpY2Ugc2l6ZSByZXBvcnRlZCB0byBiZSB6ZXJvLiAgIgorCQkJCSAgIkludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3Jcblx0IgorCQkJCSAgInBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkICIKKwkJCQkgICJhZnRlciBydW5uaW5nIGZkaXNrLCBkdWUgdG9cblx0IgorCQkJCSAgImEgbW9kaWZpZWQgcGFydGl0aW9uIGJlaW5nIGJ1c3kgIgorCQkJCSAgImFuZCBpbiB1c2UuICBZb3UgbWF5IG5lZWQgdG8gcmVib290XG5cdCIKKwkJCQkgICJ0byByZS1yZWFkIHlvdXIgcGFydGl0aW9uIHRhYmxlLlxuIgorCQkJCSAgKSk7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCWZzX2Jsb2Nrc19jb3VudCA9IGRldl9zaXplOworCQkJaWYgKHN5c19wYWdlX3NpemUgPiBFWFQyX0JMT0NLX1NJWkUoJmZzX3BhcmFtKSkKKwkJCQlmc19ibG9ja3NfY291bnQgJj0gfigoYmxrNjRfdCkgKChzeXNfcGFnZV9zaXplIC8KKwkJCQkJICAgICBFWFQyX0JMT0NLX1NJWkUoJmZzX3BhcmFtKSktMSkpOworCQl9CisJfSBlbHNlIGlmICghZm9yY2UgJiYgaXNfZGV2aWNlICYmIChmc19ibG9ja3NfY291bnQgPiBkZXZfc2l6ZSkpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQlfKCJGaWxlc3lzdGVtIGxhcmdlciB0aGFuIGFwcGFyZW50IGRldmljZSBzaXplLiIpKTsKKwkJcHJvY2VlZF9xdWVzdGlvbihwcm9jZWVkX2RlbGF5KTsKKwl9CisKKwlpZiAoIWZzX3R5cGUpCisJCXByb2ZpbGVfZ2V0X3N0cmluZyhwcm9maWxlLCAiZGV2aWNlcyIsIGRldmljZV9uYW1lLAorCQkJCSAgICJmc190eXBlIiwgMCwgJmZzX3R5cGUpOworCWlmICghdXNhZ2VfdHlwZXMpCisJCXByb2ZpbGVfZ2V0X3N0cmluZyhwcm9maWxlLCAiZGV2aWNlcyIsIGRldmljZV9uYW1lLAorCQkJCSAgICJ1c2FnZV90eXBlcyIsIDAsICZ1c2FnZV90eXBlcyk7CisKKwkvKgorCSAqIFdlIGhhdmUgdGhlIGZpbGUgc3lzdGVtIChvciBkZXZpY2UpIHNpemUsIHNvIHdlIGNhbiBub3cKKwkgKiBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGZpbGUgc3lzdGVtIHR5cGVzIHNvIHRoZSBmcyBjYW4KKwkgKiBiZSBhcHByb3ByaWF0ZWx5IGNvbmZpZ3VyZWQuCisJICovCisJZnNfdHlwZXMgPSBwYXJzZV9mc190eXBlKGZzX3R5cGUsIHVzYWdlX3R5cGVzLCAmZnNfcGFyYW0sCisJCQkJIGZzX2Jsb2Nrc19jb3VudCA/IGZzX2Jsb2Nrc19jb3VudCA6IGRldl9zaXplLAorCQkJCSBhcmd2WzBdKTsKKwlpZiAoIWZzX3R5cGVzKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBfKCJGYWlsZWQgdG8gcGFyc2UgZnMgdHlwZXMgbGlzdFxuIikpOworCQlleGl0KDEpOworCX0KKworCS8qIEZpZ3VyZSBvdXQgd2hhdCBmZWF0dXJlcyBzaG91bGQgYmUgZW5hYmxlZCAqLworCisJdG1wID0gTlVMTDsKKwlpZiAoZnNfcGFyYW0uc19yZXZfbGV2ZWwgIT0gRVhUMl9HT09EX09MRF9SRVYpIHsKKwkJdG1wID0gZ2V0X3N0cmluZ19mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsICJiYXNlX2ZlYXR1cmVzIiwKKwkJICAgICAgInNwYXJzZV9zdXBlcixsYXJnZV9maWxlLGZpbGV0eXBlLHJlc2l6ZV9pbm9kZSxkaXJfaW5kZXgiKTsKKwkJZWRpdF9mZWF0dXJlKHRtcCwgJmZzX3BhcmFtLnNfZmVhdHVyZV9jb21wYXQpOworCQlmcmVlKHRtcCk7CisKKwkJLyogQW5kIHdoaWNoIG1vdW50IG9wdGlvbnMgYXMgd2VsbCAqLworCQl0bXAgPSBnZXRfc3RyaW5nX2Zyb21fcHJvZmlsZShmc190eXBlcywgImRlZmF1bHRfbW50b3B0cyIsCisJCQkJCSAgICAgICJhY2wsdXNlcl94YXR0ciIpOworCQllZGl0X21udG9wdHModG1wLCAmZnNfcGFyYW0uc19kZWZhdWx0X21vdW50X29wdHMpOworCQlpZiAodG1wKQorCQkJZnJlZSh0bXApOworCisJCWZvciAoY3BwID0gZnNfdHlwZXM7ICpjcHA7IGNwcCsrKSB7CisJCQl0bXAgPSBOVUxMOworCQkJcHJvZmlsZV9nZXRfc3RyaW5nKHByb2ZpbGUsICJmc190eXBlcyIsICpjcHAsCisJCQkJCSAgICJmZWF0dXJlcyIsICIiLCAmdG1wKTsKKwkJCWlmICh0bXAgJiYgKnRtcCkKKwkJCQllZGl0X2ZlYXR1cmUodG1wLCAmZnNfcGFyYW0uc19mZWF0dXJlX2NvbXBhdCk7CisJCQlpZiAodG1wKQorCQkJCWZyZWUodG1wKTsKKwkJfQorCQl0bXAgPSBnZXRfc3RyaW5nX2Zyb21fcHJvZmlsZShmc190eXBlcywgImRlZmF1bHRfZmVhdHVyZXMiLAorCQkJCQkgICAgICAiIik7CisJfQorCWVkaXRfZmVhdHVyZShmc19mZWF0dXJlcyA/IGZzX2ZlYXR1cmVzIDogdG1wLAorCQkgICAgICZmc19wYXJhbS5zX2ZlYXR1cmVfY29tcGF0KTsKKwlpZiAodG1wKQorCQlmcmVlKHRtcCk7CisKKwkvKiBHZXQgdGhlIGhhcmR3YXJlIHNlY3RvciBzaXplcywgaWYgYXZhaWxhYmxlICovCisJcmV0dmFsID0gZXh0MmZzX2dldF9kZXZpY2Vfc2VjdHNpemUoZGV2aWNlX25hbWUsICZsc2VjdG9yX3NpemUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgaGFyZHdhcmUgc2VjdG9yIHNpemUiKSk7CisJCWV4aXQoMSk7CisJfQorCXJldHZhbCA9IGV4dDJmc19nZXRfZGV2aWNlX3BoeXNfc2VjdHNpemUoZGV2aWNlX25hbWUsICZwc2VjdG9yX3NpemUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgcGh5c2ljYWwgc2VjdG9yIHNpemUiKSk7CisJCWV4aXQoMSk7CisJfQorCisJdG1wID0gZ2V0ZW52KCJNS0UyRlNfREVWSUNFX1NFQ1RTSVpFIik7CisJaWYgKHRtcCAhPSBOVUxMKQorCQlsc2VjdG9yX3NpemUgPSBhdG9pKHRtcCk7CisJdG1wID0gZ2V0ZW52KCJNS0UyRlNfREVWSUNFX1BIWVNfU0VDVFNJWkUiKTsKKwlpZiAodG1wICE9IE5VTEwpCisJCXBzZWN0b3Jfc2l6ZSA9IGF0b2kodG1wKTsKKworCS8qIE9sZGVyIGtlcm5lbHMgbWF5IG5vdCBoYXZlIHBoeXNpY2FsL2xvZ2ljYWwgZGlzdGluY3Rpb24gKi8KKwlpZiAoIXBzZWN0b3Jfc2l6ZSkKKwkJcHNlY3Rvcl9zaXplID0gbHNlY3Rvcl9zaXplOworCisJaWYgKGJsb2Nrc2l6ZSA8PSAwKSB7CisJCXVzZV9ic2l6ZSA9IGdldF9pbnRfZnJvbV9wcm9maWxlKGZzX3R5cGVzLCAiYmxvY2tzaXplIiwgNDA5Nik7CisKKwkJaWYgKHVzZV9ic2l6ZSA9PSAtMSkgeworCQkJdXNlX2JzaXplID0gc3lzX3BhZ2Vfc2l6ZTsKKwkJCWlmIChpc19iZWZvcmVfbGludXhfdmVyKDIsIDYsIDApICYmIHVzZV9ic2l6ZSA+IDQwOTYpCisJCQkJdXNlX2JzaXplID0gNDA5NjsKKwkJfQorCQlpZiAobHNlY3Rvcl9zaXplICYmIHVzZV9ic2l6ZSA8IGxzZWN0b3Jfc2l6ZSkKKwkJCXVzZV9ic2l6ZSA9IGxzZWN0b3Jfc2l6ZTsKKwkJaWYgKChibG9ja3NpemUgPCAwKSAmJiAodXNlX2JzaXplIDwgKC1ibG9ja3NpemUpKSkKKwkJCXVzZV9ic2l6ZSA9IC1ibG9ja3NpemU7CisJCWJsb2Nrc2l6ZSA9IHVzZV9ic2l6ZTsKKwkJZnNfYmxvY2tzX2NvdW50IC89IChibG9ja3NpemUgLyAxMDI0KTsKKwl9IGVsc2UgeworCQlpZiAoYmxvY2tzaXplIDwgbHNlY3Rvcl9zaXplKSB7CQkJLyogSW1wb3NzaWJsZSAqLworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIEVJTlZBTCwgIiVzIiwKKwkJCQlfKCJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsICIKKwkJCQkgICJmb3IgZGV2aWNlXG4iKSk7CisJCQlleGl0KDEpOworCQl9IGVsc2UgaWYgKChibG9ja3NpemUgPCBwc2VjdG9yX3NpemUpICYmCisJCQkgICAocHNlY3Rvcl9zaXplIDw9IHN5c19wYWdlX3NpemUpKSB7CS8qIFN1Ym9wdGltYWwgKi8KKwkJCWZwcmludGYoc3RkZXJyLCBfKCJXYXJuaW5nOiBzcGVjaWZpZWQgYmxvY2tzaXplICVkIGlzICIKKwkJCQkibGVzcyB0aGFuIGRldmljZSBwaHlzaWNhbCBzZWN0b3JzaXplICVkXG4iKSwKKwkJCQlibG9ja3NpemUsIHBzZWN0b3Jfc2l6ZSk7CisJCX0KKwl9CisKKwlmc19wYXJhbS5zX2xvZ19ibG9ja19zaXplID0KKwkJaW50X2xvZzIoYmxvY2tzaXplID4+IEVYVDJfTUlOX0JMT0NLX0xPR19TSVpFKTsKKworCS8qCisJICogV2Ugbm93IG5lZWQgdG8gZG8gYSBzYW5pdHkgY2hlY2sgb2YgZnNfYmxvY2tzX2NvdW50IGZvcgorCSAqIDMyLWJpdCB2cyA2NC1iaXQgYmxvY2sgbnVtYmVyIHN1cHBvcnQuCisJICovCisJaWYgKChmc19ibG9ja3NfY291bnQgPiBNQVhfMzJfTlVNKSAmJgorCSAgICAoZnNfcGFyYW0uc19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKSkKKwkJZnNfcGFyYW0uc19mZWF0dXJlX2NvbXBhdCAmPSB+RVhUMl9GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREU7CisJaWYgKChmc19ibG9ja3NfY291bnQgPiBNQVhfMzJfTlVNKSAmJgorCSAgICAhKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkgJiYKKwkgICAgZ2V0X2Jvb2xfZnJvbV9wcm9maWxlKGZzX3R5cGVzLCAiYXV0b182NC1iaXRfc3VwcG9ydCIsIDApKSB7CisJCWZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCB8PSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQ7CisJCWZzX3BhcmFtLnNfZmVhdHVyZV9jb21wYXQgJj0gfkVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFOworCX0KKwlpZiAoKGZzX2Jsb2Nrc19jb3VudCA+IE1BWF8zMl9OVU0pICYmCisJICAgICEoZnNfcGFyYW0uc19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiJXM6IFNpemUgb2YgZGV2aWNlICgweCVsbHggYmxvY2tzKSAlcyAiCisJCQkJICAidG9vIGJpZyB0byBiZSBleHByZXNzZWRcblx0IgorCQkJCSAgImluIDMyIGJpdHMgdXNpbmcgYSBibG9ja3NpemUgb2YgJWQuXG4iKSwKKwkJCXByb2dyYW1fbmFtZSwgZnNfYmxvY2tzX2NvdW50LCBkZXZpY2VfbmFtZSwKKwkJCUVYVDJfQkxPQ0tfU0laRSgmZnNfcGFyYW0pKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlleHQyZnNfYmxvY2tzX2NvdW50X3NldCgmZnNfcGFyYW0sIGZzX2Jsb2Nrc19jb3VudCk7CisKKwlpZiAoZnNfcGFyYW0uc19mZWF0dXJlX2luY29tcGF0ICYgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0pPVVJOQUxfREVWKSB7CisJCWZzX3R5cGVzWzBdID0gc3RyZHVwKCJqb3VybmFsIik7CisJCWZzX3R5cGVzWzFdID0gMDsKKwl9CisKKwlpZiAodmVyYm9zZSkgeworCQlmcHV0cyhfKCJmc190eXBlcyBmb3IgbWtlMmZzLmNvbmYgcmVzb2x1dGlvbjogIiksIHN0ZG91dCk7CisJCXByaW50X3N0cl9saXN0KGZzX3R5cGVzKTsKKwl9CisKKwlpZiAocl9vcHQgPT0gRVhUMl9HT09EX09MRF9SRVYgJiYKKwkgICAgKGZzX3BhcmFtLnNfZmVhdHVyZV9jb21wYXQgfHwgZnNfcGFyYW0uc19mZWF0dXJlX2luY29tcGF0IHx8CisJICAgICBmc19wYXJhbS5zX2ZlYXR1cmVfcm9fY29tcGF0KSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgXygiRmlsZXN5c3RlbSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkICIKKwkJCQkJIndpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIikpOworCQlleGl0KDEpOworCX0KKworCWlmIChzX29wdCA+IDApIHsKKwkJaWYgKHJfb3B0ID09IEVYVDJfR09PRF9PTERfUkVWKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKwkJCQlfKCJTcGFyc2Ugc3VwZXJibG9ja3Mgbm90IHN1cHBvcnRlZCAiCisJCQkJICAid2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iKSk7CisJCQlleGl0KDEpOworCQl9CisJCWZzX3BhcmFtLnNfZmVhdHVyZV9yb19jb21wYXQgfD0KKwkJCUVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSOworCX0gZWxzZSBpZiAoc19vcHQgPT0gMCkKKwkJZnNfcGFyYW0uc19mZWF0dXJlX3JvX2NvbXBhdCAmPQorCQkJfkVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSOworCisJaWYgKGpvdXJuYWxfc2l6ZSAhPSAwKSB7CisJCWlmIChyX29wdCA9PSBFWFQyX0dPT0RfT0xEX1JFVikgeworCQkJZnByaW50ZihzdGRlcnIsICIlcyIsIF8oIkpvdXJuYWxzIG5vdCBzdXBwb3J0ZWQgd2l0aCAiCisJCQkJCQkicmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIikpOworCQkJZXhpdCgxKTsKKwkJfQorCQlmc19wYXJhbS5zX2ZlYXR1cmVfY29tcGF0IHw9CisJCQlFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMOworCX0KKworCS8qIEdldCByZXNlcnZlZF9yYXRpbyBmcm9tIHByb2ZpbGUgaWYgbm90IHNwZWNpZmllZCBvbiBjbWQgbGluZS4gKi8KKwlpZiAocmVzZXJ2ZWRfcmF0aW8gPCAwLjApIHsKKwkJcmVzZXJ2ZWRfcmF0aW8gPSBnZXRfZG91YmxlX2Zyb21fcHJvZmlsZSgKKwkJCQkJZnNfdHlwZXMsICJyZXNlcnZlZF9yYXRpbyIsIDUuMCk7CisJCWlmIChyZXNlcnZlZF9yYXRpbyA+IDUwIHx8IHJlc2VydmVkX3JhdGlvIDwgMCkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJXygiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVsZiIpLAorCQkJCXJlc2VydmVkX3JhdGlvKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlpZiAoZnNfcGFyYW0uc19mZWF0dXJlX2luY29tcGF0ICYKKwkgICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0pPVVJOQUxfREVWKSB7CisJCXJlc2VydmVkX3JhdGlvID0gMDsKKwkJZnNfcGFyYW0uc19mZWF0dXJlX2luY29tcGF0ID0gRVhUM19GRUFUVVJFX0lOQ09NUEFUX0pPVVJOQUxfREVWOworCQlmc19wYXJhbS5zX2ZlYXR1cmVfY29tcGF0ID0gMDsKKwkJZnNfcGFyYW0uc19mZWF0dXJlX3JvX2NvbXBhdCA9IDA7CisgCX0KKworCS8qIENoZWNrIHRoZSB1c2VyJ3MgbWtmcyBvcHRpb25zIGZvciA2NGJpdCAqLworCWlmICgoZnNfcGFyYW0uc19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKSAmJgorCSAgICAhKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKSkgeworCQlwcmludGYoIiVzIiwgXygiRXh0ZW50cyBNVVNUIGJlIGVuYWJsZWQgZm9yIGEgNjQtYml0ICIKKwkJCSAgICAgICAiZmlsZXN5c3RlbS4gIFBhc3MgLU8gZXh0ZW50cyB0byByZWN0aWZ5LlxuIikpOworCQlleGl0KDEpOworCX0KKworCS8qIFNldCBmaXJzdCBtZXRhIGJsb2NrZ3JvdXAgdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlICovCisJLyogKHRoaXMgaXMgbW9zdGx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMpICovCisJaWYgKChmc19wYXJhbS5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgJiYKKwkgICAgKCh0bXAgPSBnZXRlbnYoIk1LRTJGU19GSVJTVF9NRVRBX0JHIikpKSkKKwkJZnNfcGFyYW0uc19maXJzdF9tZXRhX2JnID0gYXRvaSh0bXApOworCWlmIChmc19wYXJhbS5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9CSUdBTExPQykgeworCQlpZiAoIWNsdXN0ZXJfc2l6ZSkKKwkJCWNsdXN0ZXJfc2l6ZSA9IGdldF9pbnRfZnJvbV9wcm9maWxlKGZzX3R5cGVzLAorCQkJCQkJCSAgICAiY2x1c3Rlcl9zaXplIiwKKwkJCQkJCQkgICAgYmxvY2tzaXplKjE2KTsKKwkJZnNfcGFyYW0uc19sb2dfY2x1c3Rlcl9zaXplID0KKwkJCWludF9sb2cyKGNsdXN0ZXJfc2l6ZSA+PiBFWFQyX01JTl9DTFVTVEVSX0xPR19TSVpFKTsKKwkJaWYgKGZzX3BhcmFtLnNfbG9nX2NsdXN0ZXJfc2l6ZSAmJgorCQkgICAgZnNfcGFyYW0uc19sb2dfY2x1c3Rlcl9zaXplIDwgZnNfcGFyYW0uc19sb2dfYmxvY2tfc2l6ZSkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQkJXygiVGhlIGNsdXN0ZXIgc2l6ZSBtYXkgbm90IGJlICIKKwkJCQkgICJzbWFsbGVyIHRoYW4gdGhlIGJsb2NrIHNpemUuXG4iKSk7CisJCQlleGl0KDEpOworCQl9CisJfSBlbHNlIGlmIChjbHVzdGVyX3NpemUpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQlfKCJzcGVjaWZ5aW5nIGEgY2x1c3RlciBzaXplIHJlcXVpcmVzIHRoZSAiCisJCQkgICJiaWdhbGxvYyBmZWF0dXJlIikpOworCQlleGl0KDEpOworCX0gZWxzZQorCQlmc19wYXJhbS5zX2xvZ19jbHVzdGVyX3NpemUgPSBmc19wYXJhbS5zX2xvZ19ibG9ja19zaXplOworCisJaWYgKGlub2RlX3JhdGlvID09IDApIHsKKwkJaW5vZGVfcmF0aW8gPSBnZXRfaW50X2Zyb21fcHJvZmlsZShmc190eXBlcywgImlub2RlX3JhdGlvIiwKKwkJCQkJCSAgIDgxOTIpOworCQlpZiAoaW5vZGVfcmF0aW8gPCBibG9ja3NpemUpCisJCQlpbm9kZV9yYXRpbyA9IGJsb2Nrc2l6ZTsKKwkJaWYgKGlub2RlX3JhdGlvIDwgRVhUMl9DTFVTVEVSX1NJWkUoJmZzX3BhcmFtKSkKKwkJCWlub2RlX3JhdGlvID0gRVhUMl9DTFVTVEVSX1NJWkUoJmZzX3BhcmFtKTsKKwl9CisKKyNpZmRlZiBIQVZFX0JMS0lEX1BST0JFX0dFVF9UT1BPTE9HWQorCXJldHZhbCA9IGdldF9kZXZpY2VfZ2VvbWV0cnkoZGV2aWNlX25hbWUsICZmc19wYXJhbSwgcHNlY3Rvcl9zaXplKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCV8oIndhcm5pbmc6IFVuYWJsZSB0byBnZXQgZGV2aWNlIGdlb21ldHJ5IGZvciAlc1xuIiksCisJCQlkZXZpY2VfbmFtZSk7CisJfSBlbHNlIGlmIChyZXR2YWwpIHsKKwkJcHJpbnRmKF8oIiVzIGFsaWdubWVudCBpcyBvZmZzZXQgYnkgJWx1IGJ5dGVzLlxuIiksCisJCSAgICAgICBkZXZpY2VfbmFtZSwgcmV0dmFsKTsKKwkJcHJpbnRmKF8oIlRoaXMgbWF5IHJlc3VsdCBpbiB2ZXJ5IHBvb3IgcGVyZm9ybWFuY2UsICIKKwkJCSAgIihyZSktcGFydGl0aW9uaW5nIHN1Z2dlc3RlZC5cbiIpKTsKKwl9CisjZW5kaWYKKworCW51bV9iYWNrdXBzID0gZ2V0X2ludF9mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsICJudW1fYmFja3VwX3NiIiwgMik7CisKKwlibG9ja3NpemUgPSBFWFQyX0JMT0NLX1NJWkUoJmZzX3BhcmFtKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBzX2Rlc2Nfc2l6ZSBzbyB0aGF0IHRoZSBwYXJzZV9leHRlbmRlZF9vcHRzKCkKKwkgKiBjYW4gY29ycmVjdGx5IGhhbmRsZSAiLUUgcmVzaXplPU5OTiIgaWYgdGhlIDY0LWJpdCBvcHRpb24KKwkgKiBpcyBzZXQuCisJICovCisJaWYgKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkKKwkJZnNfcGFyYW0uc19kZXNjX3NpemUgPSBFWFQyX01JTl9ERVNDX1NJWkVfNjRCSVQ7CisKKwkvKiBUaGlzIGNoZWNrIHNob3VsZCBoYXBwZW4gYmV5b25kIHRoZSBsYXN0IGFzc2lnbm1lbnQgdG8gYmxvY2tzaXplICovCisJaWYgKGJsb2Nrc2l6ZSA+IHN5c19wYWdlX3NpemUpIHsKKwkJaWYgKCFmb3JjZSkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJXygiJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpIiksCisJCQkJYmxvY2tzaXplLCBzeXNfcGFnZV9zaXplKTsKKwkJCXByb2NlZWRfcXVlc3Rpb24ocHJvY2VlZF9kZWxheSk7CisJCX0KKwkJZnByaW50ZihzdGRlcnIsIF8oIldhcm5pbmc6ICVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAiCisJCQkJICAiKG1heCAlZCksIGZvcmNlZCB0byBjb250aW51ZVxuIiksCisJCQlibG9ja3NpemUsIHN5c19wYWdlX3NpemUpOworCX0KKworCS8qCisJICogT24gbmV3ZXIga2VybmVscyB3ZSBkbyBoYXZlIGxhenlfaXRhYmxlX2luaXQgc3VwcG9ydC4gU28gcGljayB0aGUKKwkgKiByaWdodCBkZWZhdWx0IGluIGNhc2UgZXh0NCBtb2R1bGUgaXMgbm90IGxvYWRlZC4KKwkgKi8KKwlpZiAoaXNfYmVmb3JlX2xpbnV4X3ZlcigyLCA2LCAzNykpCisJCWxhenlfaXRhYmxlX2luaXQgPSAwOworCWVsc2UKKwkJbGF6eV9pdGFibGVfaW5pdCA9IDE7CisKKwlpZiAoYWNjZXNzKCIvc3lzL2ZzL2V4dDQvZmVhdHVyZXMvbGF6eV9pdGFibGVfaW5pdCIsIFJfT0spID09IDApCisJCWxhenlfaXRhYmxlX2luaXQgPSAxOworCisJbGF6eV9pdGFibGVfaW5pdCA9IGdldF9ib29sX2Zyb21fcHJvZmlsZShmc190eXBlcywKKwkJCQkJCSAibGF6eV9pdGFibGVfaW5pdCIsCisJCQkJCQkgbGF6eV9pdGFibGVfaW5pdCk7CisJZGlzY2FyZCA9IGdldF9ib29sX2Zyb21fcHJvZmlsZShmc190eXBlcywgImRpc2NhcmQiICwgZGlzY2FyZCk7CisJam91cm5hbF9mbGFncyB8PSBnZXRfYm9vbF9mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsCisJCQkJCSAgICAgICAibGF6eV9qb3VybmFsX2luaXQiLCAwKSA/CisJCQkJCSAgICAgICBFWFQyX01LSk9VUk5BTF9MQVpZSU5JVCA6IDA7CisJam91cm5hbF9mbGFncyB8PSBFWFQyX01LSk9VUk5BTF9OT19NTlRfQ0hFQ0s7CisKKwlpZiAoIWpvdXJuYWxfbG9jYXRpb25fc3RyaW5nKQorCQlqb3VybmFsX2xvY2F0aW9uX3N0cmluZyA9IGdldF9zdHJpbmdfZnJvbV9wcm9maWxlKGZzX3R5cGVzLAorCQkJCQkJImpvdXJuYWxfbG9jYXRpb24iLCAiIik7CisJaWYgKChqb3VybmFsX2xvY2F0aW9uID09IH4wVUxMKSAmJiBqb3VybmFsX2xvY2F0aW9uX3N0cmluZyAmJgorCSAgICAqam91cm5hbF9sb2NhdGlvbl9zdHJpbmcpCisJCWpvdXJuYWxfbG9jYXRpb24gPSBwYXJzZV9udW1fYmxvY2tzMihqb3VybmFsX2xvY2F0aW9uX3N0cmluZywKKwkJCQkJCWZzX3BhcmFtLnNfbG9nX2Jsb2NrX3NpemUpOworCWZyZWUoam91cm5hbF9sb2NhdGlvbl9zdHJpbmcpOworCisJcGFja2VkX21ldGFfYmxvY2tzID0gZ2V0X2Jvb2xfZnJvbV9wcm9maWxlKGZzX3R5cGVzLAorCQkJCQkJICAgInBhY2tlZF9tZXRhX2Jsb2NrcyIsIDApOworCWlmIChwYWNrZWRfbWV0YV9ibG9ja3MpCisJCWpvdXJuYWxfbG9jYXRpb24gPSAwOworCisJLyogR2V0IG9wdGlvbnMgZnJvbSBwcm9maWxlICovCisJZm9yIChjcHAgPSBmc190eXBlczsgKmNwcDsgY3BwKyspIHsKKwkJdG1wID0gTlVMTDsKKwkJcHJvZmlsZV9nZXRfc3RyaW5nKHByb2ZpbGUsICJmc190eXBlcyIsICpjcHAsICJvcHRpb25zIiwgIiIsICZ0bXApOworCQkJaWYgKHRtcCAmJiAqdG1wKQorCQkJCXBhcnNlX2V4dGVuZGVkX29wdHMoJmZzX3BhcmFtLCB0bXApOworCQkJZnJlZSh0bXApOworCX0KKworCWlmIChleHRlbmRlZF9vcHRzKQorCQlwYXJzZV9leHRlbmRlZF9vcHRzKCZmc19wYXJhbSwgZXh0ZW5kZWRfb3B0cyk7CisKKwkvKiBDYW4ndCBzdXBwb3J0IGJpZ2FsbG9jIGZlYXR1cmUgd2l0aG91dCBleHRlbnRzIGZlYXR1cmUgKi8KKwlpZiAoKGZzX3BhcmFtLnNfZmVhdHVyZV9yb19jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0JJR0FMTE9DKSAmJgorCSAgICAhKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKSkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCV8oIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0ICIKKwkJCSAgImV4dGVudHMgZmVhdHVyZSIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKSAmJgorCSAgICAoZnNfcGFyYW0uc19mZWF0dXJlX2NvbXBhdCAmIEVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgXygiVGhlIHJlc2l6ZV9pbm9kZSBhbmQgbWV0YV9iZyAiCisJCQkJCSJmZWF0dXJlcyBhcmUgbm90IGNvbXBhdGlibGUuXG4iCisJCQkJCSJUaGV5IGNhbiBub3QgYmUgYm90aCBlbmFibGVkICIKKwkJCQkJInNpbXVsdGFuZW91c2x5LlxuIikpOworCQlleGl0KDEpOworCX0KKworCWlmICghcXVpZXQgJiYKKwkgICAgKGZzX3BhcmFtLnNfZmVhdHVyZV9yb19jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0JJR0FMTE9DKSkKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIF8oIlxuV2FybmluZzogdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgIgorCQkJCSAgInN0aWxsIHVuZGVyIGRldmVsb3BtZW50XG4iCisJCQkJICAiU2VlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvIgorCQkJCSAgImluZGV4LnBocC9CaWdhbGxvYyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuXG4iKSk7CisKKwkvKiBTaW5jZSBzcGFyc2Vfc3VwZXIgaXMgdGhlIGRlZmF1bHQsIHdlIHdvdWxkIG9ubHkgaGF2ZSBhIHByb2JsZW0KKwkgKiBoZXJlIGlmIGl0IHdhcyBleHBsaWNpdGx5IGRpc2FibGVkLgorCSAqLworCWlmICgoZnNfcGFyYW0uc19mZWF0dXJlX2NvbXBhdCAmIEVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFKSAmJgorCSAgICAhKGZzX3BhcmFtLnNfZmVhdHVyZV9yb19jb21wYXQmRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVIpKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJXygicmVzZXJ2ZWQgb25saW5lIHJlc2l6ZSBibG9ja3Mgbm90IHN1cHBvcnRlZCAiCisJCQkgICJvbiBub24tc3BhcnNlIGZpbGVzeXN0ZW0iKSk7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKGZzX3BhcmFtLnNfYmxvY2tzX3Blcl9ncm91cCkgeworCQlpZiAoZnNfcGFyYW0uc19ibG9ja3NfcGVyX2dyb3VwIDwgMjU2IHx8CisJCSAgICBmc19wYXJhbS5zX2Jsb2Nrc19wZXJfZ3JvdXAgPiA4ICogKHVuc2lnbmVkKSBibG9ja3NpemUpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCV8oImJsb2NrcyBwZXIgZ3JvdXAgY291bnQgb3V0IG9mIHJhbmdlIikpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCS8qCisJICogSWYgdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgZW5hYmxlZCwgdGhlbiB0aGUgLWcgb3B0aW9uIHdpbGwKKwkgKiBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY2x1c3RlcnMgcGVyIGdyb3VwLgorCSAqLworCWlmIChmc19wYXJhbS5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9CSUdBTExPQykgeworCQlmc19wYXJhbS5zX2NsdXN0ZXJzX3Blcl9ncm91cCA9IGZzX3BhcmFtLnNfYmxvY2tzX3Blcl9ncm91cDsKKwkJZnNfcGFyYW0uc19ibG9ja3NfcGVyX2dyb3VwID0gMDsKKwl9CisKKwlpZiAoaW5vZGVfc2l6ZSA9PSAwKQorCQlpbm9kZV9zaXplID0gZ2V0X2ludF9mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsICJpbm9kZV9zaXplIiwgMCk7CisJaWYgKCFmbGV4X2JnX3NpemUgJiYgKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCQkgICAgICBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRykpCisJCWZsZXhfYmdfc2l6ZSA9IGdldF91aW50X2Zyb21fcHJvZmlsZShmc190eXBlcywKKwkJCQkJCSAgICAgImZsZXhfYmdfc2l6ZSIsIDE2KTsKKwlpZiAoZmxleF9iZ19zaXplKSB7CisJCWlmICghKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCSAgICAgIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHKSkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQkJXygiRmxleF9iZyBmZWF0dXJlIG5vdCBlbmFibGVkLCBzbyAiCisJCQkJICAiZmxleF9iZyBzaXplIG1heSBub3QgYmUgc3BlY2lmaWVkIikpOworCQkJZXhpdCgxKTsKKwkJfQorCQlmc19wYXJhbS5zX2xvZ19ncm91cHNfcGVyX2ZsZXggPSBpbnRfbG9nMihmbGV4X2JnX3NpemUpOworCX0KKworCWlmIChpbm9kZV9zaXplICYmIGZzX3BhcmFtLnNfcmV2X2xldmVsID49IEVYVDJfRFlOQU1JQ19SRVYpIHsKKwkJaWYgKGlub2RlX3NpemUgPCBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgfHwKKwkJICAgIGlub2RlX3NpemUgPiBFWFQyX0JMT0NLX1NJWkUoJmZzX3BhcmFtKSB8fAorCQkgICAgaW5vZGVfc2l6ZSAmIChpbm9kZV9zaXplIC0gMSkpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCV8oImludmFsaWQgaW5vZGUgc2l6ZSAlZCAobWluICVkL21heCAlZCkiKSwKKwkJCQlpbm9kZV9zaXplLCBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUsCisJCQkJYmxvY2tzaXplKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJZnNfcGFyYW0uc19pbm9kZV9zaXplID0gaW5vZGVfc2l6ZTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgbnVtYmVyIG9mIGlub2RlcyBzcGVjaWZpZWQgd2lsbCBmaXQgaW4gMzIgYml0cyAqLworCWlmIChudW1faW5vZGVzID09IDApIHsKKwkJdW5zaWduZWQgbG9uZyBsb25nIG47CisJCW4gPSBleHQyZnNfYmxvY2tzX2NvdW50KCZmc19wYXJhbSkgKiBibG9ja3NpemUgLyBpbm9kZV9yYXRpbzsKKwkJaWYgKG4gPiBNQVhfMzJfTlVNKSB7CisJCQlpZiAoZnNfcGFyYW0uc19mZWF0dXJlX2luY29tcGF0ICYKKwkJCSAgICBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpCisJCQkJbnVtX2lub2RlcyA9IE1BWF8zMl9OVU07CisJCQllbHNlIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQkJXygidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgcmFpc2UgIgorCQkJCQkgICJpbm9kZSByYXRpbz8iKSwgbik7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAobnVtX2lub2RlcyA+IE1BWF8zMl9OVU0pIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQlfKCJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCBzcGVjaWZ5IDwgMl4zMiBpbm9kZXMiKSwKKwkJCSAgbnVtX2lub2Rlcyk7CisJCWV4aXQoMSk7CisJfQorCS8qCisJICogQ2FsY3VsYXRlIG51bWJlciBvZiBpbm9kZXMgYmFzZWQgb24gdGhlIGlub2RlIHJhdGlvCisJICovCisJZnNfcGFyYW0uc19pbm9kZXNfY291bnQgPSBudW1faW5vZGVzID8gbnVtX2lub2RlcyA6CisJCShleHQyZnNfYmxvY2tzX2NvdW50KCZmc19wYXJhbSkgKiBibG9ja3NpemUpIC8gaW5vZGVfcmF0aW87CisKKwlpZiAoKCgodW5zaWduZWQgbG9uZyBsb25nKWZzX3BhcmFtLnNfaW5vZGVzX2NvdW50KSAqCisJICAgICAoaW5vZGVfc2l6ZSA/IGlub2RlX3NpemUgOiBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUpKSA+PQorCSAgICAoKGV4dDJmc19ibG9ja3NfY291bnQoJmZzX3BhcmFtKSkgKgorCSAgICAgRVhUMl9CTE9DS19TSVpFKCZmc19wYXJhbSkpKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCBfKCJpbm9kZV9zaXplICgldSkgKiBpbm9kZXNfY291bnQgIgorCQkJCQkgICIoJXUpIHRvbyBiaWcgZm9yIGFcblx0IgorCQkJCQkgICJmaWxlc3lzdGVtIHdpdGggJWxsdSBibG9ja3MsICIKKwkJCQkJICAic3BlY2lmeSBoaWdoZXIgaW5vZGVfcmF0aW8gKC1pKVxuXHQiCisJCQkJCSAgIm9yIGxvd2VyIGlub2RlIGNvdW50ICgtTikuXG4iKSwKKwkJCWlub2RlX3NpemUgPyBpbm9kZV9zaXplIDogRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFLAorCQkJZnNfcGFyYW0uc19pbm9kZXNfY291bnQsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSBleHQyZnNfYmxvY2tzX2NvdW50KCZmc19wYXJhbSkpOworCQlleGl0KDEpOworCX0KKworCS8qCisJICogQ2FsY3VsYXRlIG51bWJlciBvZiBibG9ja3MgdG8gcmVzZXJ2ZQorCSAqLworCWV4dDJmc19yX2Jsb2Nrc19jb3VudF9zZXQoJmZzX3BhcmFtLCByZXNlcnZlZF9yYXRpbyAqCisJCQkJICBleHQyZnNfYmxvY2tzX2NvdW50KCZmc19wYXJhbSkgLyAxMDAuMCk7CisKKwlpZiAoZnNfcGFyYW0uc19mZWF0dXJlX2NvbXBhdCAmIEVYVDRfRkVBVFVSRV9DT01QQVRfU1BBUlNFX1NVUEVSMikgeworCQlpZiAobnVtX2JhY2t1cHMgPj0gMSkKKwkJCWZzX3BhcmFtLnNfYmFja3VwX2Jnc1swXSA9IDE7CisJCWlmIChudW1fYmFja3VwcyA+PSAyKQorCQkJZnNfcGFyYW0uc19iYWNrdXBfYmdzWzFdID0gfjA7CisJfQorCisJZnJlZShmc190eXBlKTsKKwlmcmVlKHVzYWdlX3R5cGVzKTsKK30KKworc3RhdGljIGludCBzaG91bGRfZG9fdW5kbyhjb25zdCBjaGFyICpuYW1lKQoreworCWVycmNvZGVfdCByZXR2YWw7CisJaW9fY2hhbm5lbCBjaGFubmVsOworCV9fdTE2CXNfbWFnaWM7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgc3VwZXI7CisJaW9fbWFuYWdlciBtYW5hZ2VyID0gdW5peF9pb19tYW5hZ2VyOworCWludCBjc3VtX2ZsYWcsIGZvcmNlX3VuZG87CisKKwljc3VtX2ZsYWcgPSBFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRSgmZnNfcGFyYW0sCisJCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKTsKKwlmb3JjZV91bmRvID0gZ2V0X2ludF9mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsICJmb3JjZV91bmRvIiwgMCk7CisJaWYgKCFmb3JjZV91bmRvICYmICghY3N1bV9mbGFnIHx8ICFsYXp5X2l0YWJsZV9pbml0KSkKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBtYW5hZ2VyLT5vcGVuKG5hbWUsIElPX0ZMQUdfRVhDTFVTSVZFLCAgJmNoYW5uZWwpOworCWlmIChyZXR2YWwpIHsKKwkJLyoKKwkJICogV2UgZG9uJ3QgaGFuZGxlIGVycm9yIGNhc2VzIGluc3RlYWQgd2UKKwkJICogZGVjbGFyZSB0aGF0IHRoZSBmaWxlIHN5c3RlbSBkb2Vzbid0IGV4aXN0CisJCSAqIGFuZCBsZXQgdGhlIHJlc3Qgb2YgbWtlMmZzIHRha2UgY2FyZSBvZgorCQkgKiBlcnJvcgorCQkgKi8KKwkJcmV0dmFsID0gMDsKKwkJZ290byBvcGVuX2Vycl9vdXQ7CisJfQorCisJaW9fY2hhbm5lbF9zZXRfYmxrc2l6ZShjaGFubmVsLCBTVVBFUkJMT0NLX09GRlNFVCk7CisJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGNoYW5uZWwsIDEsIC1TVVBFUkJMT0NLX1NJWkUsICZzdXBlcik7CisJaWYgKHJldHZhbCkgeworCQlyZXR2YWwgPSAwOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisjaWYgZGVmaW5lZChXT1JEU19CSUdFTkRJQU4pCisJc19tYWdpYyA9IGV4dDJmc19zd2FiMTYoc3VwZXIuc19tYWdpYyk7CisjZWxzZQorCXNfbWFnaWMgPSBzdXBlci5zX21hZ2ljOworI2VuZGlmCisKKwlpZiAoc19tYWdpYyA9PSBFWFQyX1NVUEVSX01BR0lDKQorCQlyZXR2YWwgPSAxOworCitlcnJfb3V0OgorCWlvX2NoYW5uZWxfY2xvc2UoY2hhbm5lbCk7CisKK29wZW5fZXJyX291dDoKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgbWtlMmZzX3NldHVwX3RkYihjb25zdCBjaGFyICpuYW1lLCBpb19tYW5hZ2VyICppb19wdHIpCit7CisJZXJyY29kZV90IHJldHZhbCA9IEVOT01FTTsKKwljaGFyICp0ZGJfZGlyID0gTlVMTCwgKnRkYl9maWxlID0gTlVMTDsKKwljaGFyICpkZXZfbmFtZSwgKnRtcF9uYW1lOworCWludCBmcmVlX3RkYl9kaXIgPSAwOworCisJLyoKKwkgKiBDb25maWd1cmF0aW9uIHZpYSBhIGNvbmYgZmlsZSB3b3VsZCBiZQorCSAqIG5pY2UKKwkgKi8KKwl0ZGJfZGlyID0gZ2V0ZW52KCJFMkZTUFJPR1NfVU5ET19ESVIiKTsKKwlpZiAoIXRkYl9kaXIpIHsKKwkJcHJvZmlsZV9nZXRfc3RyaW5nKHByb2ZpbGUsICJkZWZhdWx0cyIsCisJCQkJICAgInVuZG9fZGlyIiwgMCwgIi92YXIvbGliL2UyZnNwcm9ncyIsCisJCQkJICAgJnRkYl9kaXIpOworCQlmcmVlX3RkYl9kaXIgPSAxOworCX0KKworCWlmICghc3RyY21wKHRkYl9kaXIsICJub25lIikgfHwgKHRkYl9kaXJbMF0gPT0gMCkgfHwKKwkgICAgYWNjZXNzKHRkYl9kaXIsIFdfT0spKSB7CisJCWlmIChmcmVlX3RkYl9kaXIpCisJCQlmcmVlKHRkYl9kaXIpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0bXBfbmFtZSA9IHN0cmR1cChuYW1lKTsKKwlpZiAoIXRtcF9uYW1lKQorCQlnb3RvIGVycm91dDsKKwlkZXZfbmFtZSA9IGJhc2VuYW1lKHRtcF9uYW1lKTsKKwl0ZGJfZmlsZSA9IG1hbGxvYyhzdHJsZW4odGRiX2RpcikgKyA4ICsgc3RybGVuKGRldl9uYW1lKSArIDcgKyAxKTsKKwlpZiAoIXRkYl9maWxlKSB7CisJCWZyZWUodG1wX25hbWUpOworCQlnb3RvIGVycm91dDsKKwl9CisJc3ByaW50Zih0ZGJfZmlsZSwgIiVzL21rZTJmcy0lcy5lMnVuZG8iLCB0ZGJfZGlyLCBkZXZfbmFtZSk7CisJZnJlZSh0bXBfbmFtZSk7CisKKwlpZiAoKHVubGluayh0ZGJfZmlsZSkgPCAwKSAmJiAoZXJybm8gIT0gRU5PRU5UKSkgeworCQlyZXR2YWwgPSBlcnJubzsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJc2V0X3VuZG9faW9fYmFja2luZ19tYW5hZ2VyKCppb19wdHIpOworCSppb19wdHIgPSB1bmRvX2lvX21hbmFnZXI7CisJcmV0dmFsID0gc2V0X3VuZG9faW9fYmFja3VwX2ZpbGUodGRiX2ZpbGUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCXByaW50ZihfKCJPdmVyd3JpdGluZyBleGlzdGluZyBmaWxlc3lzdGVtOyB0aGlzIGNhbiBiZSB1bmRvbmUgIgorCQkgInVzaW5nIHRoZSBjb21tYW5kOlxuIgorCQkgIiAgICBlMnVuZG8gJXMgJXNcblxuIiksIHRkYl9maWxlLCBuYW1lKTsKKworCWlmIChmcmVlX3RkYl9kaXIpCisJCWZyZWUodGRiX2Rpcik7CisJZnJlZSh0ZGJfZmlsZSk7CisJcmV0dXJuIDA7CisKK2Vycm91dDoKKwlpZiAoZnJlZV90ZGJfZGlyKQorCQlmcmVlKHRkYl9kaXIpOworCWZyZWUodGRiX2ZpbGUpOworCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCV8oIndoaWxlIHRyeWluZyB0byBzZXR1cCB1bmRvIGZpbGVcbiIpKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG1rZTJmc19kaXNjYXJkX2RldmljZShleHQyX2ZpbHN5cyBmcykKK3sKKwlzdHJ1Y3QgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3Nfc3RydWN0IHByb2dyZXNzOworCWJsazY0X3QgYmxvY2tzID0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCWJsazY0X3QgY291bnQgPSBESVNDQVJEX1NURVBfTUI7CisJYmxrNjRfdCBjdXI7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKgorCSAqIExldCdzIHRyeSBpZiBkaXNjYXJkIHJlYWxseSB3b3JrcyBvbiB0aGUgZGV2aWNlLCBzbworCSAqIHdlIGRvIG5vdCBwcmludCBudW1lcmljIHByb2dyZXNzIHJlc3VsdGluZyBpbiBmYWlsdXJlCisJICogYWZ0ZXJ3YXJkcy4KKwkgKi8KKwlyZXR2YWwgPSBpb19jaGFubmVsX2Rpc2NhcmQoZnMtPmlvLCAwLCBmcy0+YmxvY2tzaXplKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWN1ciA9IGZzLT5ibG9ja3NpemU7CisKKwljb3VudCAqPSAoMTAyNCAqIDEwMjQpOworCWNvdW50IC89IGZzLT5ibG9ja3NpemU7CisKKwlleHQyZnNfbnVtZXJpY19wcm9ncmVzc19pbml0KGZzLCAmcHJvZ3Jlc3MsCisJCQkJICAgICBfKCJEaXNjYXJkaW5nIGRldmljZSBibG9ja3M6ICIpLAorCQkJCSAgICAgYmxvY2tzKTsKKwl3aGlsZSAoY3VyIDwgYmxvY2tzKSB7CisJCWV4dDJmc19udW1lcmljX3Byb2dyZXNzX3VwZGF0ZShmcywgJnByb2dyZXNzLCBjdXIpOworCisJCWlmIChjdXIgKyBjb3VudCA+IGJsb2NrcykKKwkJCWNvdW50ID0gYmxvY2tzIC0gY3VyOworCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfZGlzY2FyZChmcy0+aW8sIGN1ciwgY291bnQpOworCQlpZiAocmV0dmFsKQorCQkJYnJlYWs7CisJCWN1ciArPSBjb3VudDsKKwl9CisKKwlpZiAocmV0dmFsKSB7CisJCWV4dDJmc19udW1lcmljX3Byb2dyZXNzX2Nsb3NlKGZzLCAmcHJvZ3Jlc3MsCisJCQkJICAgICAgXygiZmFpbGVkIC0gIikpOworCQlpZiAoIXF1aWV0KQorCQkJcHJpbnRmKCIlc1xuIixlcnJvcl9tZXNzYWdlKHJldHZhbCkpOworCX0gZWxzZQorCQlleHQyZnNfbnVtZXJpY19wcm9ncmVzc19jbG9zZShmcywgJnByb2dyZXNzLAorCQkJCSAgICAgIF8oImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iKSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBmaXhfY2x1c3Rlcl9iZ19jb3VudHMoZXh0Ml9maWxzeXMgZnMpCit7CisJYmxrNjRfdAkJYmxvY2ssIG51bV9ibG9ja3MsIGxhc3RfYmxvY2ssIG5leHQ7CisJYmxrNjRfdAkJdG90X2ZyZWUgPSAwOworCWVycmNvZGVfdAlyZXR2YWw7CisJZGdycF90CQlncm91cCA9IDA7CisJaW50CQlncnBfZnJlZSA9IDA7CisKKwludW1fYmxvY2tzID0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCWxhc3RfYmxvY2sgPSBleHQyZnNfZ3JvdXBfbGFzdF9ibG9jazIoZnMsIGdyb3VwKTsKKwlibG9jayA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCXdoaWxlIChibG9jayA8IG51bV9ibG9ja3MpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2ZpbmRfZmlyc3RfemVyb19ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsCisJCQkJCQlibG9jaywgbGFzdF9ibG9jaywgJm5leHQpOworCQlpZiAocmV0dmFsID09IDApCisJCQlibG9jayA9IG5leHQ7CisJCWVsc2UgeworCQkJYmxvY2sgPSBsYXN0X2Jsb2NrICsgMTsKKwkJCWdvdG8gbmV4dF9iZzsKKwkJfQorCisJCXJldHZhbCA9IGV4dDJmc19maW5kX2ZpcnN0X3NldF9ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsCisJCQkJCQlibG9jaywgbGFzdF9ibG9jaywgJm5leHQpOworCQlpZiAocmV0dmFsKQorCQkJbmV4dCA9IGxhc3RfYmxvY2sgKyAxOworCQlncnBfZnJlZSArPSBFWFQyRlNfTlVNX0IyQyhmcywgbmV4dCAtIGJsb2NrKTsKKwkJdG90X2ZyZWUgKz0gbmV4dCAtIGJsb2NrOworCQlibG9jayA9IG5leHQ7CisKKwkJaWYgKGJsb2NrID4gbGFzdF9ibG9jaykgeworCQluZXh0X2JnOgorCQkJZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcywgZ3JvdXAsIGdycF9mcmVlKTsKKwkJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBncm91cCk7CisJCQlncnBfZnJlZSA9IDA7CisJCQlncm91cCsrOworCQkJbGFzdF9ibG9jayA9IGV4dDJmc19ncm91cF9sYXN0X2Jsb2NrMihmcywgZ3JvdXApOworCQl9CisJfQorCWV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoZnMtPnN1cGVyLCB0b3RfZnJlZSk7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX3F1b3RhX2lub2RlcyhleHQyX2ZpbHN5cyBmcykKK3sKKwlxdW90YV9jdHhfdCBxY3R4OworCisJcXVvdGFfaW5pdF9jb250ZXh0KCZxY3R4LCBmcywgLTEpOworCXF1b3RhX2NvbXB1dGVfdXNhZ2UocWN0eCk7CisJcXVvdGFfd3JpdGVfaW5vZGUocWN0eCwgcXVvdGF0eXBlKTsKKwlxdW90YV9yZWxlYXNlX2NvbnRleHQoJnFjdHgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCWV4dDJfZmlsc3lzCWZzOworCWJhZGJsb2Nrc19saXN0CWJiX2xpc3QgPSAwOworCXVuc2lnbmVkIGludAlqb3VybmFsX2Jsb2NrcyA9IDA7CisJdW5zaWduZWQgaW50CWksIGNoZWNraW50ZXJ2YWw7CisJaW50CQltYXhfbW50X2NvdW50OworCWludAkJdmFsLCBoYXNoX2FsZzsKKwlpbnQJCWZsYWdzOworCWludAkJb2xkX2JpdG1hcHM7CisJaW9fbWFuYWdlcglpb19wdHI7CisJY2hhcgkJb3B0X3N0cmluZ1s0MF07CisJY2hhcgkJKmhhc2hfYWxnX3N0cjsKKwlpbnQJCWl0YWJsZV96ZXJvZWQgPSAwOworCisjaWZkZWYgRU5BQkxFX05MUworCXNldGxvY2FsZShMQ19NRVNTQUdFUywgIiIpOworCXNldGxvY2FsZShMQ19DVFlQRSwgIiIpOworCWJpbmR0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSwgTE9DQUxFRElSKTsKKwl0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSk7CisJc2V0X2NvbV9lcnJfZ2V0dGV4dChnZXR0ZXh0KTsKKyNlbmRpZgorCVBSUyhhcmdjLCBhcmd2KTsKKworI2lmZGVmIENPTkZJR19URVNUSU9fREVCVUcKKwlpZiAoZ2V0ZW52KCJURVNUX0lPX0ZMQUdTIikgfHwgZ2V0ZW52KCJURVNUX0lPX0JMT0NLIikpIHsKKwkJaW9fcHRyID0gdGVzdF9pb19tYW5hZ2VyOworCQl0ZXN0X2lvX2JhY2tpbmdfbWFuYWdlciA9IHVuaXhfaW9fbWFuYWdlcjsKKwl9IGVsc2UKKyNlbmRpZgorCQlpb19wdHIgPSB1bml4X2lvX21hbmFnZXI7CisKKwlpZiAoc2hvdWxkX2RvX3VuZG8oZGV2aWNlX25hbWUpKSB7CisJCXJldHZhbCA9IG1rZTJmc19zZXR1cF90ZGIoZGV2aWNlX25hbWUsICZpb19wdHIpOworCQlpZiAocmV0dmFsKQorCQkJZXhpdCgxKTsKKwl9CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIHN1cGVyYmxvY2suLi4uCisJICovCisJZmxhZ3MgPSBFWFQyX0ZMQUdfRVhDTFVTSVZFOworCWlmIChkaXJlY3RfaW8pCisJCWZsYWdzIHw9IEVYVDJfRkxBR19ESVJFQ1RfSU87CisJcHJvZmlsZV9nZXRfYm9vbGVhbihwcm9maWxlLCAib3B0aW9ucyIsICJvbGRfYml0bWFwcyIsIDAsIDAsCisJCQkgICAgJm9sZF9iaXRtYXBzKTsKKwlpZiAoIW9sZF9iaXRtYXBzKQorCQlmbGFncyB8PSBFWFQyX0ZMQUdfNjRCSVRTOworCS8qCisJICogQnkgZGVmYXVsdCwgd2UgcHJpbnQgaG93IG1hbnkgaW5vZGUgdGFibGVzIG9yIGJsb2NrIGdyb3VwcworCSAqIG9yIHdoYXRldmVyIHdlJ3ZlIHdyaXR0ZW4gc28gZmFyLiAgVGhlIHF1aWV0IGZsYWcgZGlzYWJsZXMKKwkgKiB0aGlzLCBhbG9uZyB3aXRoIGEgbG90IG9mIG90aGVyIG91dHB1dC4KKwkgKi8KKwlpZiAoIXF1aWV0KQorCQlmbGFncyB8PSBFWFQyX0ZMQUdfUFJJTlRfUFJPR1JFU1M7CisJcmV0dmFsID0gZXh0MmZzX2luaXRpYWxpemUoZGV2aWNlX25hbWUsIGZsYWdzLCAmZnNfcGFyYW0sIGlvX3B0ciwgJmZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoZGV2aWNlX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIHNldHRpbmcgdXAgc3VwZXJibG9jayIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwkvKiBDYWxjdWxhdGUgam91cm5hbCBibG9ja3MgKi8KKwlpZiAoIWpvdXJuYWxfZGV2aWNlICYmICgoam91cm5hbF9zaXplKSB8fAorCQkoZnNfcGFyYW0uc19mZWF0dXJlX2NvbXBhdCAmCisJCSBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMKSkpCisJCWpvdXJuYWxfYmxvY2tzID0gZmlndXJlX2pvdXJuYWxfc2l6ZShqb3VybmFsX3NpemUsIGZzKTsKKworCS8qIENhbid0IHVuZG8gZGlzY2FyZCAuLi4gKi8KKwlpZiAoIW5vYWN0aW9uICYmIGRpc2NhcmQgJiYgZGV2X3NpemUgJiYgKGlvX3B0ciAhPSB1bmRvX2lvX21hbmFnZXIpKSB7CisJCXJldHZhbCA9IG1rZTJmc19kaXNjYXJkX2RldmljZShmcyk7CisJCWlmICghcmV0dmFsICYmIGlvX2NoYW5uZWxfZGlzY2FyZF96ZXJvZXNfZGF0YShmcy0+aW8pKSB7CisJCQlpZiAodmVyYm9zZSkKKwkJCQlwcmludGYoIiVzIiwKKwkJCQkgICAgICAgXygiRGlzY2FyZCBzdWNjZWVkZWQgYW5kIHdpbGwgcmV0dXJuICIKKwkJCQkJICIwcyAtIHNraXBwaW5nIGlub2RlIHRhYmxlIHdpcGVcbiIpKTsKKwkJCWxhenlfaXRhYmxlX2luaXQgPSAxOworCQkJaXRhYmxlX3plcm9lZCA9IDE7CisJCQl6ZXJvX2h1Z2VmaWxlID0gMDsKKwkJfQorCX0KKworCXNwcmludGYob3B0X3N0cmluZywgInRkYl9kYXRhX3NpemU9JWQiLCBmcy0+YmxvY2tzaXplIDw9IDQwOTYgPworCQkzMjc2OCA6IGZzLT5ibG9ja3NpemUgKiA4KTsKKwlpb19jaGFubmVsX3NldF9vcHRpb25zKGZzLT5pbywgb3B0X3N0cmluZyk7CisJaWYgKG9mZnNldCkgeworCQlzcHJpbnRmKG9wdF9zdHJpbmcsICJvZmZzZXQ9JWxsdSIsIG9mZnNldCk7CisJCWlvX2NoYW5uZWxfc2V0X29wdGlvbnMoZnMtPmlvLCBvcHRfc3RyaW5nKTsKKwl9CisKKwlpZiAoZnNfcGFyYW0uc19mbGFncyAmIEVYVDJfRkxBR1NfVEVTVF9GSUxFU1lTKQorCQlmcy0+c3VwZXItPnNfZmxhZ3MgfD0gRVhUMl9GTEFHU19URVNUX0ZJTEVTWVM7CisKKwlpZiAoKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJICAgICAoRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFN8RVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcpKSB8fAorCSAgICAoZnNfcGFyYW0uc19mZWF0dXJlX3JvX2NvbXBhdCAmCisJICAgICAoRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEV8RVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTXwKKwkgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0RJUl9OTElOS3wKKwkgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0VYVFJBX0lTSVpFKSkpCisJCWZzLT5zdXBlci0+c19rYnl0ZXNfd3JpdHRlbiA9IDE7CisKKwkvKgorCSAqIFdpcGUgb3V0IHRoZSBvbGQgb24tZGlzayBzdXBlcmJsb2NrCisJICovCisJaWYgKCFub2FjdGlvbikKKwkJemFwX3NlY3RvcihmcywgMiwgNik7CisKKwkvKgorCSAqIFBhcnNlIG9yIGdlbmVyYXRlIGEgVVVJRCBmb3IgdGhlIGZpbGVzeXN0ZW0KKwkgKi8KKwlpZiAoZnNfdXVpZCkgeworCQlpZiAodXVpZF9wYXJzZShmc191dWlkLCBmcy0+c3VwZXItPnNfdXVpZCkgIT0wKSB7CisJCQljb21fZXJyKGRldmljZV9uYW1lLCAwLCAiY291bGQgbm90IHBhcnNlIFVVSUQ6ICVzXG4iLAorCQkJCWZzX3V1aWQpOworCQkJZXhpdCgxKTsKKwkJfQorCX0gZWxzZQorCQl1dWlkX2dlbmVyYXRlKGZzLT5zdXBlci0+c191dWlkKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgZGlyZWN0b3J5IGluZGV4IHZhcmlhYmxlcworCSAqLworCWhhc2hfYWxnX3N0ciA9IGdldF9zdHJpbmdfZnJvbV9wcm9maWxlKGZzX3R5cGVzLCAiaGFzaF9hbGciLAorCQkJCQkgICAgICAgImhhbGZfbWQ0Iik7CisJaGFzaF9hbGcgPSBlMnBfc3RyaW5nMmhhc2goaGFzaF9hbGdfc3RyKTsKKwlmcmVlKGhhc2hfYWxnX3N0cik7CisJZnMtPnN1cGVyLT5zX2RlZl9oYXNoX3ZlcnNpb24gPSAoaGFzaF9hbGcgPj0gMCkgPyBoYXNoX2FsZyA6CisJCUVYVDJfSEFTSF9IQUxGX01ENDsKKwl1dWlkX2dlbmVyYXRlKCh1bnNpZ25lZCBjaGFyICopIGZzLT5zdXBlci0+c19oYXNoX3NlZWQpOworCisJLyoKKwkgKiBQZXJpb2RpYyBjaGVja3MgY2FuIGJlIGVuYWJsZWQvZGlzYWJsZWQgdmlhIGNvbmZpZyBmaWxlLgorCSAqIE5vdGUgd2Ugb3ZlcnJpZGUgdGhlIGtlcm5lbCBpbmNsdWRlIGZpbGUncyBpZGVhIG9mIHdoYXQgdGhlIGRlZmF1bHQKKwkgKiBjaGVjayBpbnRlcnZhbCAobmV2ZXIpIHNob3VsZCBiZS4gIEl0J3MgYSBnb29kIGlkZWEgdG8gY2hlY2sgYXQKKwkgKiBsZWFzdCAqb2NjYXNpb25hbGx5Kiwgc3BlY2lhbGx5IHNpbmNlIHNlcnZlcnMgd2lsbCBuZXZlciByYXJlbHkgZ2V0CisJICogdG8gcmVib290LCBzaW5jZSBMaW51eCBpcyBzbyByb2J1c3QgdGhlc2UgZGF5cy4gIDotKQorCSAqCisJICogMTgwIGRheXMgKHNpeCBtb250aHMpIHNlZW1zIGxpa2UgYSBnb29kIHZhbHVlLgorCSAqLworI2lmZGVmIEVYVDJfREZMX0NIRUNLSU5URVJWQUwKKyN1bmRlZiBFWFQyX0RGTF9DSEVDS0lOVEVSVkFMCisjZW5kaWYKKyNkZWZpbmUgRVhUMl9ERkxfQ0hFQ0tJTlRFUlZBTCAoODY0MDBMICogMTgwTCkKKworCWlmIChnZXRfYm9vbF9mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsICJlbmFibGVfcGVyaW9kaWNfZnNjayIsIDApKSB7CisJCWZzLT5zdXBlci0+c19jaGVja2ludGVydmFsID0gRVhUMl9ERkxfQ0hFQ0tJTlRFUlZBTDsKKwkJZnMtPnN1cGVyLT5zX21heF9tbnRfY291bnQgPSBFWFQyX0RGTF9NQVhfTU5UX0NPVU5UOworCQkvKgorCQkgKiBBZGQgImppdHRlciIgdG8gdGhlIHN1cGVyYmxvY2sncyBjaGVjayBpbnRlcnZhbCBzbyB0aGF0IHdlCisJCSAqIGRvbid0IGNoZWNrIGFsbCB0aGUgZmlsZXN5c3RlbXMgYXQgdGhlIHNhbWUgdGltZS4gIFdlIHVzZSBhCisJCSAqIGtsdWRneSBoYWNrIG9mIHVzaW5nIHRoZSBVVUlEIHRvIGRlcml2ZSBhIHJhbmRvbSBqaXR0ZXIgdmFsdWUKKwkJICovCisJCWZvciAoaSA9IDAsIHZhbCA9IDAgOyBpIDwgc2l6ZW9mKGZzLT5zdXBlci0+c191dWlkKTsgaSsrKQorCQkJdmFsICs9IGZzLT5zdXBlci0+c191dWlkW2ldOworCQlmcy0+c3VwZXItPnNfbWF4X21udF9jb3VudCArPSB2YWwgJSBFWFQyX0RGTF9NQVhfTU5UX0NPVU5UOworCX0gZWxzZQorCQlmcy0+c3VwZXItPnNfbWF4X21udF9jb3VudCA9IC0xOworCisJLyoKKwkgKiBPdmVycmlkZSB0aGUgY3JlYXRvciBPUywgaWYgYXBwbGljYWJsZQorCSAqLworCWlmIChjcmVhdG9yX29zICYmICFzZXRfb3MoZnMtPnN1cGVyLCBjcmVhdG9yX29zKSkgeworCQljb21fZXJyIChwcm9ncmFtX25hbWUsIDAsIF8oInVua25vd24gb3MgLSAlcyIpLCBjcmVhdG9yX29zKTsKKwkJZXhpdCgxKTsKKwl9CisKKwkvKgorCSAqIEZvciB0aGUgSHVyZCwgd2Ugd2lsbCB0dXJuIG9mZiBmaWxldHlwZSBzaW5jZSBpdCBkb2Vzbid0CisJICogc3VwcG9ydCBpdC4KKwkgKi8KKwlpZiAoZnMtPnN1cGVyLT5zX2NyZWF0b3Jfb3MgPT0gRVhUMl9PU19IVVJEKQorCQlmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmPQorCQkJfkVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRTsKKworCS8qCisJICogU2V0IHRoZSB2b2x1bWUgbGFiZWwuLi4KKwkgKi8KKwlpZiAodm9sdW1lX2xhYmVsKSB7CisJCW1lbXNldChmcy0+c3VwZXItPnNfdm9sdW1lX25hbWUsIDAsCisJCSAgICAgICBzaXplb2YoZnMtPnN1cGVyLT5zX3ZvbHVtZV9uYW1lKSk7CisJCXN0cm5jcHkoZnMtPnN1cGVyLT5zX3ZvbHVtZV9uYW1lLCB2b2x1bWVfbGFiZWwsCisJCQlzaXplb2YoZnMtPnN1cGVyLT5zX3ZvbHVtZV9uYW1lKSk7CisJfQorCisJLyoKKwkgKiBTZXQgdGhlIGxhc3QgbW91bnQgZGlyZWN0b3J5CisJICovCisJaWYgKG1vdW50X2RpcikgeworCQltZW1zZXQoZnMtPnN1cGVyLT5zX2xhc3RfbW91bnRlZCwgMCwKKwkJICAgICAgIHNpemVvZihmcy0+c3VwZXItPnNfbGFzdF9tb3VudGVkKSk7CisJCXN0cm5jcHkoZnMtPnN1cGVyLT5zX2xhc3RfbW91bnRlZCwgbW91bnRfZGlyLAorCQkJc2l6ZW9mKGZzLT5zdXBlci0+c19sYXN0X21vdW50ZWQpKTsKKwl9CisKKwlpZiAoIXF1aWV0IHx8IG5vYWN0aW9uKQorCQlzaG93X3N0YXRzKGZzKTsKKworCWlmIChub2FjdGlvbikKKwkJZXhpdCgwKTsKKworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVikgeworCQljcmVhdGVfam91cm5hbF9kZXYoZnMpOworCQlleGl0KGV4dDJmc19jbG9zZV9mcmVlKCZmcykgPyAxIDogMCk7CisJfQorCisJaWYgKGJhZF9ibG9ja3NfZmlsZW5hbWUpCisJCXJlYWRfYmJfZmlsZShmcywgJmJiX2xpc3QsIGJhZF9ibG9ja3NfZmlsZW5hbWUpOworCWlmIChjZmxhZykKKwkJdGVzdF9kaXNrKGZzLCAmYmJfbGlzdCk7CisJaGFuZGxlX2JhZF9ibG9ja3MoZnMsIGJiX2xpc3QpOworCisJZnMtPnN0cmlkZSA9IGZzX3N0cmlkZSA9IGZzLT5zdXBlci0+c19yYWlkX3N0cmlkZTsKKwlpZiAoIXF1aWV0KQorCQlwcmludGYoIiVzIiwgXygiQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICIpKTsKKwlpZiAoKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcpICYmCisJICAgIHBhY2tlZF9tZXRhX2Jsb2NrcykKKwkJcmV0dmFsID0gcGFja2VkX2FsbG9jYXRlX3RhYmxlcyhmcyk7CisJZWxzZQorCQlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfdGFibGVzKGZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gYWxsb2NhdGUgZmlsZXN5c3RlbSB0YWJsZXMiKSk7CisJCWV4aXQoMSk7CisJfQorCWlmICghcXVpZXQpCisJCXByaW50ZigiJXMiLCBfKCJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIikpOworCisJcmV0dmFsID0gZXh0MmZzX2NvbnZlcnRfc3ViY2x1c3Rlcl9iaXRtYXAoZnMsICZmcy0+YmxvY2tfbWFwKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJcblx0d2hpbGUgY29udmVydGluZyBzdWJjbHVzdGVyIGJpdG1hcCIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoc3VwZXJfb25seSkgeworCQlmcy0+c3VwZXItPnNfc3RhdGUgfD0gRVhUMl9FUlJPUl9GUzsKKwkJZnMtPmZsYWdzICY9IH4oRVhUMl9GTEFHX0lCX0RJUlRZfEVYVDJfRkxBR19CQl9ESVJUWSk7CisJCS8qIAorCQkgKiBUaGUgY29tbWFuZCAibWtlMmZzIC1TIiBpcyB1c2VkIHRvIHJlY292ZXIKKwkJICogY29ycnVwdGVkIGZpbGUgc3lzdGVtcywgc28gZG8gbm90IG1hcmsgYW55IG9mIHRoZQorCQkgKiBpbm9kZXMgYXMgdW51c2VkOyB3ZSB3YW50IGUyZnNjayB0byBjb25zaWRlciBhbGwKKwkJICogaW5vZGVzIGFzIHBvdGVudGlhbGx5IGNvbnRhaW5pbmcgcmVjb3ZlcmFibGUgZGF0YS4KKwkJICovCisJCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCQkgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkgeworCQkJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspCisJCQkJZXh0MmZzX2JnX2l0YWJsZV91bnVzZWRfc2V0KGZzLCBpLCAwKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHJzdiBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvICg2NGtCIGlzIE1EIFJBSUQgc2IgYWxpZ25tZW50KSAqLworCQlibGs2NF90IHJzdiA9IDY1NTM2IC8gZnMtPmJsb2Nrc2l6ZTsKKwkJYmxrNjRfdCBibG9ja3MgPSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcik7CisJCWJsazY0X3Qgc3RhcnQ7CisJCWJsazY0X3QgcmV0X2JsazsKKworI2lmZGVmIFpBUF9CT09UQkxPQ0sKKwkJemFwX3NlY3RvcihmcywgMCwgMik7CisjZW5kaWYKKworCQkvKgorCQkgKiBXaXBlIG91dCBhbnkgb2xkIE1EIFJBSUQgKG9yIG90aGVyKSBtZXRhZGF0YSBhdCB0aGUgZW5kCisJCSAqIG9mIHRoZSBkZXZpY2UuICBUaGlzIHdpbGwgYWxzbyB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNlIGlzCisJCSAqIGFzIGxhcmdlIGFzIHdlIHRoaW5rLiAgQmUgY2FyZWZ1bCB3aXRoIHZlcnkgc21hbGwgZGV2aWNlcy4KKwkJICovCisJCXN0YXJ0ID0gKGJsb2NrcyAmIH4ocnN2IC0gMSkpOworCQlpZiAoc3RhcnQgPiByc3YpCisJCQlzdGFydCAtPSByc3Y7CisJCWlmIChzdGFydCA+IDApCisJCQlyZXR2YWwgPSBleHQyZnNfemVyb19ibG9ja3MyKGZzLCBzdGFydCwgYmxvY2tzIC0gc3RhcnQsCisJCQkJCQkgICAgJnJldF9ibGssIE5VTEwpOworCisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQkJXygid2hpbGUgemVyb2luZyBibG9jayAlbGx1IGF0IGVuZCBvZiBmaWxlc3lzdGVtIiksCisJCQkJcmV0X2Jsayk7CisJCX0KKwkJd3JpdGVfaW5vZGVfdGFibGVzKGZzLCBsYXp5X2l0YWJsZV9pbml0LCBpdGFibGVfemVyb2VkKTsKKwkJY3JlYXRlX3Jvb3RfZGlyKGZzKTsKKwkJY3JlYXRlX2xvc3RfYW5kX2ZvdW5kKGZzKTsKKwkJcmVzZXJ2ZV9pbm9kZXMoZnMpOworCQljcmVhdGVfYmFkX2Jsb2NrX2lub2RlKGZzLCBiYl9saXN0KTsKKwkJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmCisJCSAgICBFWFQyX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERSkgeworCQkJcmV0dmFsID0gZXh0MmZzX2NyZWF0ZV9yZXNpemVfaW5vZGUoZnMpOworCQkJaWYgKHJldHZhbCkgeworCQkJCWNvbV9lcnIoImV4dDJmc19jcmVhdGVfcmVzaXplX2lub2RlIiwgcmV0dmFsLAorCQkJCQkiJXMiLAorCQkJCV8oIndoaWxlIHJlc2VydmluZyBibG9ja3MgZm9yIG9ubGluZSByZXNpemUiKSk7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChqb3VybmFsX2RldmljZSkgeworCQlleHQyX2ZpbHN5cwlqZnM7CisKKwkJaWYgKCFjaGVja19wbGF1c2liaWxpdHkoam91cm5hbF9kZXZpY2UsIENIRUNLX0JMT0NLX0RFViwKKwkJCQkJTlVMTCkgJiYgIWZvcmNlKQorCQkJcHJvY2VlZF9xdWVzdGlvbihwcm9jZWVkX2RlbGF5KTsKKwkJY2hlY2tfbW91bnQoam91cm5hbF9kZXZpY2UsIGZvcmNlLCBfKCJqb3VybmFsIikpOworCisJCXJldHZhbCA9IGV4dDJmc19vcGVuKGpvdXJuYWxfZGV2aWNlLCBFWFQyX0ZMQUdfUld8CisJCQkJICAgICBFWFQyX0ZMQUdfSk9VUk5BTF9ERVZfT0ssIDAsCisJCQkJICAgICBmcy0+YmxvY2tzaXplLCB1bml4X2lvX21hbmFnZXIsICZqZnMpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLAorCQkJCV8oIndoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgZGV2aWNlICVzXG4iKSwKKwkJCQlqb3VybmFsX2RldmljZSk7CisJCQlleGl0KDEpOworCQl9CisJCWlmICghcXVpZXQpIHsKKwkJCXByaW50ZihfKCJBZGRpbmcgam91cm5hbCB0byBkZXZpY2UgJXM6ICIpLAorCQkJICAgICAgIGpvdXJuYWxfZGV2aWNlKTsKKwkJCWZmbHVzaChzdGRvdXQpOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19hZGRfam91cm5hbF9kZXZpY2UoZnMsIGpmcyk7CisJCWlmKHJldHZhbCkgeworCQkJY29tX2VyciAocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQkJIF8oIlxuXHR3aGlsZSB0cnlpbmcgdG8gYWRkIGpvdXJuYWwgdG8gZGV2aWNlICVzIiksCisJCQkJIGpvdXJuYWxfZGV2aWNlKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJaWYgKCFxdWlldCkKKwkJCXByaW50ZigiJXMiLCBfKCJkb25lXG4iKSk7CisJCWV4dDJmc19jbG9zZV9mcmVlKCZqZnMpOworCQlmcmVlKGpvdXJuYWxfZGV2aWNlKTsKKwl9IGVsc2UgaWYgKChqb3VybmFsX3NpemUpIHx8CisJCSAgIChmc19wYXJhbS5zX2ZlYXR1cmVfY29tcGF0ICYKKwkJICAgIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwpKSB7CisJCWlmIChzdXBlcl9vbmx5KSB7CisJCQlwcmludGYoIiVzIiwgXygiU2tpcHBpbmcgam91cm5hbCBjcmVhdGlvbiBpbiBzdXBlci1vbmx5IG1vZGVcbiIpKTsKKwkJCWZzLT5zdXBlci0+c19qb3VybmFsX2ludW0gPSBFWFQyX0pPVVJOQUxfSU5POworCQkJZ290byBub19qb3VybmFsOworCQl9CisKKwkJaWYgKCFqb3VybmFsX2Jsb2NrcykgeworCQkJZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICY9CisJCQkJfkVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUw7CisJCQlnb3RvIG5vX2pvdXJuYWw7CisJCX0KKwkJaWYgKCFxdWlldCkgeworCQkJcHJpbnRmKF8oIkNyZWF0aW5nIGpvdXJuYWwgKCV1IGJsb2Nrcyk6ICIpLAorCQkJICAgICAgIGpvdXJuYWxfYmxvY2tzKTsKKwkJCWZmbHVzaChzdGRvdXQpOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19hZGRfam91cm5hbF9pbm9kZTIoZnMsIGpvdXJuYWxfYmxvY2tzLAorCQkJCQkJICAgam91cm5hbF9sb2NhdGlvbiwKKwkJCQkJCSAgIGpvdXJuYWxfZmxhZ3MpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJCV8oIlxuXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwiKSk7CisJCQlleGl0KDEpOworCQl9CisJCWlmICghcXVpZXQpCisJCQlwcmludGYoIiVzIiwgXygiZG9uZVxuIikpOworCX0KK25vX2pvdXJuYWw6CisJaWYgKCFzdXBlcl9vbmx5ICYmCisJICAgIGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01NUCkgeworCQlyZXR2YWwgPSBleHQyZnNfbW1wX2luaXQoZnMpOworCQlpZiAocmV0dmFsKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKwkJCQlfKCJcbkVycm9yIHdoaWxlIGVuYWJsaW5nIG11bHRpcGxlICIKKwkJCQkgICJtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIikpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAoIXF1aWV0KQorCQkJcHJpbnRmKF8oIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaXMgZW5hYmxlZCAiCisJCQkJICJ3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZCBzZWNvbmRzLlxuIiksCisJCQkgICAgICAgZnMtPnN1cGVyLT5zX21tcF91cGRhdGVfaW50ZXJ2YWwpOworCX0KKworCWlmIChFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRSgmZnNfcGFyYW0sCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpKQorCQlmaXhfY2x1c3Rlcl9iZ19jb3VudHMoZnMpOworCWlmIChFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRSgmZnNfcGFyYW0sCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfUVVPVEEpKQorCQljcmVhdGVfcXVvdGFfaW5vZGVzKGZzKTsKKworCXJldHZhbCA9IG1rX2h1Z2VmaWxlcyhmcywgZGV2aWNlX25hbWUpOworCWlmIChyZXR2YWwpCisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICJ3aGlsZSBjcmVhdGluZyBodWdlIGZpbGVzIik7CisKKwlpZiAoIXF1aWV0KQorCQlwcmludGYoIiVzIiwgXygiV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgIgorCQkgICAgICAgImZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogIikpOworCWNoZWNraW50ZXJ2YWwgPSBmcy0+c3VwZXItPnNfY2hlY2tpbnRlcnZhbDsKKwltYXhfbW50X2NvdW50ID0gZnMtPnN1cGVyLT5zX21heF9tbnRfY291bnQ7CisJcmV0dmFsID0gZXh0MmZzX2Nsb3NlX2ZyZWUoJmZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorCQkJXygiXG5XYXJuaW5nLCBoYWQgdHJvdWJsZSB3cml0aW5nIG91dCBzdXBlcmJsb2Nrcy4iKSk7CisJfSBlbHNlIGlmICghcXVpZXQpIHsKKwkJcHJpbnRmKCIlcyIsIF8oImRvbmVcblxuIikpOworCQlpZiAoIWdldGVudigiTUtFMkZTX1NLSVBfQ0hFQ0tfTVNHIikpCisJCQlwcmludF9jaGVja19tZXNzYWdlKG1heF9tbnRfY291bnQsIGNoZWNraW50ZXJ2YWwpOworCX0KKworCXJlbW92ZV9lcnJvcl90YWJsZSgmZXRfZXh0Ml9lcnJvcl90YWJsZSk7CisJcmVtb3ZlX2Vycm9yX3RhYmxlKCZldF9wcm9mX2Vycm9yX3RhYmxlKTsKKwlwcm9maWxlX3JlbGVhc2UocHJvZmlsZSk7CisJZm9yIChpPTA7IGZzX3R5cGVzW2ldOyBpKyspCisJCWZyZWUoZnNfdHlwZXNbaV0pOworCWZyZWUoZnNfdHlwZXMpOworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9taXNjL21rZTJmcy5jb25mLjUuaW4gYi9taXNjL21rZTJmcy5jb25mLjUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0NThhYwotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvbWtlMmZzLmNvbmYuNS5pbgpAQCAtMCwwICsxLDUzMCBAQAorLlwiIC0qLSBucm9mZiAtKi0KKy5cIiBDb3B5cmlnaHQgMjAwNiBieSBUaGVvZG9yZSBUcydvLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy5cIiBUaGlzIGZpbGUgbWF5IGJlIGNvcGllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKy5cIiAKKy5USCBta2UyZnMuY29uZiA1ICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCitta2UyZnMuY29uZiBcLSBDb25maWd1cmF0aW9uIGZpbGUgZm9yIG1rZTJmcworLlNIIERFU0NSSVBUSU9OCisuSSBta2UyZnMuY29uZgoraXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgCisuQlIgbWtlMmZzICg4KS4gIAorSXQgY29udHJvbHMgdGhlIGRlZmF1bHQgcGFyYW1ldGVycyB1c2VkIGJ5IAorLkJSIG1rZTJmcyAoOCkKK3doZW4gaXQgaXMgY3JlYXRpbmcgZXh0MiwgZXh0Mywgb3IgZXh0NCBmaWxlc3lzdGVtcy4KKy5QUAorVGhlCisuSSBta2UyZnMuY29uZgorZmlsZSB1c2VzIGFuIElOSS1zdHlsZSBmb3JtYXQuICBTdGFuemFzLCBvciB0b3AtbGV2ZWwgc2VjdGlvbnMsIGFyZSAKK2RlbGltaXRlZCBieSBzcXVhcmUgYnJhY2VzOiBbIF0uICBXaXRoaW4gZWFjaCBzZWN0aW9uLCBlYWNoIGxpbmUgCitkZWZpbmVzIGEgcmVsYXRpb24sIHdoaWNoIGFzc2lnbnMgdGFncyB0byB2YWx1ZXMsIG9yIHRvIGEgc3Vic2VjdGlvbiwKK3doaWNoIGNvbnRhaW5zIGZ1cnRoZXIgcmVsYXRpb25zIG9yIHN1YnNlY3Rpb25zLiAgIAorLlwiIFRhZ3MgY2FuIGJlIGFzc2lnbmVkIG11bHRpcGxlIHZhbHVlcworQW4gZXhhbXBsZSBvZiB0aGUgSU5JLXN0eWxlIGZvcm1hdCB1c2VkIGJ5IHRoaXMgY29uZmlndXJhdGlvbiBmaWxlIAorZm9sbG93cyBiZWxvdzoKKy5QCisJW3NlY3Rpb24xXQorLmJyCisJCXRhZzEgPSB2YWx1ZV9hCisuYnIKKwkJdGFnMSA9IHZhbHVlX2IKKy5icgorCQl0YWcyID0gdmFsdWVfYworLlAKKwlbc2VjdGlvbiAyXQorLmJyCisJCXRhZzMgPSB7CisuYnIKKwkJCXN1YnRhZzEgPSBzdWJ0YWdfdmFsdWVfYQorLmJyCisJCQlzdWJ0YWcxID0gc3VidGFnX3ZhbHVlX2IKKy5icgorCQkJc3VidGFnMiA9IHN1YnRhZ192YWx1ZV9jCisuYnIKKwkJfQorLmJyCisJCXRhZzEgPSB2YWx1ZV9kCisuYnIKKwkJdGFnMiA9IHZhbHVlX2UKKy5icgorCX0KKy5QCitDb21tZW50cyBhcmUgZGVsaW1pdGVkIGJ5IGEgc2VtaWNvbG9uICgnOycpIG9yIGEgaGFzaCAoJyMnKSBjaGFyYWN0ZXIgCithdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb21tZW50LCBhbmQgYXJlIHRlcm1pbmF0ZWQgYnkgdGhlIGVuZCBvZiAKK2xpbmUgY2hhcmFjdGVyLgorLlAKK1RhZ3MgYW5kIHZhbHVlcyBtdXN0IGJlIHF1b3RlZCB1c2luZyBkb3VibGUgcXVvdGVzIGlmIHRoZXkgY29udGFpbgorc3BhY2VzLiAgV2l0aGluIGEgcXVvdGVkIHN0cmluZywgdGhlIHN0YW5kYXJkIGJhY2tzbGFzaCBpbnRlcnByZXRhdGlvbnMgCithcHBseTogIlxlbiIgKGZvciB0aGUgbmV3bGluZSBjaGFyYWN0ZXIpLCAKKyJcZXQiIChmb3IgdGhlIHRhYiBjaGFyYWN0ZXIpLCAiXGViIiAoZm9yIHRoZSBiYWNrc3BhY2UgY2hhcmFjdGVyKSwgCithbmQgIlxlXGUiIChmb3IgdGhlIGJhY2tzbGFzaCBjaGFyYWN0ZXIpLgorLlAKK1NvbWUgcmVsYXRpb25zIGV4cGVjdCBhIGJvb2xlYW4gdmFsdWUuICBUaGUgcGFyc2VyIGlzIHF1aXRlIGxpYmVyYWwgb24KK3JlY29nbml6aW5nIGBgeWVzJycsICdgeScnLCBgYHRydWUnJywgYGB0JycsIGBgMScnLCBgYG9uJycsIGV0Yy4gYXMgYQorYm9vbGVhbiB0cnVlIHZhbHVlLCBhbmQgYGBubycnLCBgYG4nJywgYGBmYWxzZScnLCBgYG5pbCcnLCBgYDAnJywKK2Bgb2ZmJycgYXMgYSBib29sZWFuIGZhbHNlIHZhbHVlLgorLlAKK1RoZSBmb2xsb3dpbmcgc3RhbnphcyBhcmUgdXNlZCBpbiB0aGUgCisuSSBta2UyZnMuY29uZgorZmlsZS4gIFRoZXkgd2lsbCBiZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gZnV0dXJlIHNlY3Rpb25zIG9mIHRoaXMKK2RvY3VtZW50LgorLlRQCisuSSBbb3B0aW9uc10KK0NvbnRhaW5zIHJlbGF0aW9ucyB3aGljaCBpbmZsdWVuY2UgaG93IG1rZTJmcyBiZWhhdmVzLgorLlRQCisuSSBbZGVmYXVsdHNdCitDb250YWlucyByZWxhdGlvbnMgd2hpY2ggZGVmaW5lIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMKK3VzZWQgYnkKKy5CUiBta2UyZnMgKDgpLgorSW4gZ2VuZXJhbCwgdGhlc2UgZGVmYXVsdHMgbWF5IGJlIG92ZXJyaWRkZW4gYnkgYSBkZWZpbml0aW9uIGluIHRoZQorLkIgZnNfdHlwZXMKK3N0YW56YSwgb3IgYnkgYW4gY29tbWFuZC1saW5lIG9wdGlvbiBwcm92aWRlZCBieSB0aGUgdXNlci4KKy5UUCAKKy5JIFtmc190eXBlc10KK0NvbnRhaW5zIHJlbGF0aW9ucyB3aGljaCBkZWZpbmUgZGVmYXVsdHMgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3Igc3BlY2lmaWMKK2ZpbGVzeXN0ZW0gdHlwZXMuICBUaGUgZmlsZXN5c3RlbSB0eXBlIGNhbiBiZSBzcGVjaWZpZWQgZXhwbGljaXRseSB1c2luZwordGhlIAorLkIgLVQKK29wdGlvbiB0bworLkJSIG1rZTJmcyAoOCkuCisuU0ggVEhFIFtvcHRpb25zXSBTVEFOWkEKK1RoZSBmb2xsb3dpbmcgcmVsYXRpb25zIGFyZSBkZWZpbmVkIGluIHRoZQorLkkgW29wdGlvbnNdCitzdGFuemEuCisuVFAKKy5JIHByb2NlZWRfZGVsYXkKK0lmIHRoaXMgcmVsYXRpb24gaXMgc2V0IHRvIGEgcG9zaXRpdmUgaW50ZWdlciwgdGhlbiBpZiBta2UyZnMgd2lsbAorcHJvY2VlZCBhZnRlciB3YWl0aW5nCisuSSBwcm9jZWVkX2RlbGF5CitzZWNvbmRzLCBhZnRlciBhc2tpbmcgdGhlIHVzZXIgZm9yIHBlcm1pc3Npb24gdG8gcHJvY2VlZCwgZXZlbiBpZiB0aGUKK3VzZXIgaGFzIG5vdCBhbnN3ZXJlZCB0aGUgcXVlc3Rpb24uICBEZWZhdWx0cyB0byAwLCB3aGljaCBtZWFucyB0byB3YWl0Cit1bnRpbCB0aGUgdXNlciBhbnN3ZXJzIHRoZSBxdWVzdGlvbiBvbmUgd2F5IG9yIGFub3RoZXIuCisuU0ggVEhFIFtkZWZhdWx0c10gU1RBTlpBCitUaGUgZm9sbG93aW5nIHJlbGF0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUgCisuSSBbZGVmYXVsdHNdCitzdGFuemEuCisuVFAKKy5JIGJhc2VfZmVhdHVyZXMKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBmaWxlc3lzdGVtcyBmZWF0dXJlcyB3aGljaCBhcmUgZW5hYmxlZCBpbgorbmV3bHkgY3JlYXRlZCBmaWxlc3lzdGVtcy4gIEl0IG1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZQorLkkgYmFzZV9mZWF0dXJlcworcmVsYXRpb24gZm91bmQgaW4gdGhlIGZpbGVzeXN0ZW0gb3IgdXNhZ2UgdHlwZSBzdWJzZWN0aW9uIG9mCit0aGUKKy5JIFtmc190eXBlc10gCitzdGFuemEuCisuVFAKKy5JIGRlZmF1bHRfZmVhdHVyZXMKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIGEgc2V0IG9mIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIG9yCityZW1vdmVkIHRvIHRoZSBmZWF0dXJlcyBsaXN0ZWQgaW4gdGhlCisuSSBiYXNlX2ZlYXR1cmVzCityZWxhdGlvbi4gIEl0IG1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZSBmaWxlc3lzdGVtLXNwZWNpZmljIAorLkkgZGVmYXVsdF9mZWF0dXJlcworaW4gdGhlIGZpbGVzeXN0ZW0gb3IgdXNhZ2UgdHlwZSBzdWJzZWN0aW9uIG9mCisuSVIgW2ZzX3R5cGVzXSAsCithbmQgYnkgdGhlIAorLkIgLU8KK2NvbW1hbmQtbGluZSBvcHRpb24KK3RvIAorLkJSIG1rZTJmcyAoOCkuCisuVFAKKy5JIGVuYWJsZV9wZXJpb2RpY19mc2NrCitUaGlzIGJvb2xlYW4gcmVsYXRpb24gc3BlY2lmaWVzIHdoZXRoZXIgcGVyaW9kaWMgZmlsZXN5c3RlbSBjaGVja3Mgc2hvdWxkIGJlCitlbmZvcmNlZCBhdCBib290IHRpbWUuICBJZiBzZXQgdG8gdHJ1ZSwgY2hlY2tzIHdpbGwgYmUgZm9yY2VkIGV2ZXJ5CisxODAgZGF5cywgb3IgYWZ0ZXIgYSByYW5kb20gbnVtYmVyIG9mIG1vdW50cy4gIFRoZXNlIHZhbHVlcyBtYXkKK2JlIGNoYW5nZWQgbGF0ZXIgdmlhIHRoZQorLkIgLWkKK2FuZAorLkIgLWMKK2NvbW1hbmQtbGluZSBvcHRpb25zIHRvCisuQlIgdHVuZTJmcyAoOCkuCisuVFAKKy5JIGZvcmNlX3VuZG8KK1RoaXMgYm9vbGVhbiByZWxhdGlvbiwgaWYgc2V0IHRvIGEgdmFsdWUgb2YgdHJ1ZSwgZm9yY2VzCisuQiBta2UyZnMKK3RvIGFsd2F5cyB0cnkgdG8gY3JlYXRlIGFuIHVuZG8gZmlsZSwgZXZlbiBpZiB0aGUgdW5kbyBmaWxlIG1pZ2h0IGJlCitodWdlIGFuZCBpdCBtaWdodCBleHRlbmQgdGhlIHRpbWUgdG8gY3JlYXRlIHRoZSBmaWxlc3lzdGVtIGltYWdlCitiZWNhdXNlIHRoZSBpbm9kZSB0YWJsZSBpc24ndCBiZWluZyBpbml0aWFsaXplZCBsYXppbHkuCisuVFAKKy5JIGZzX3R5cGUKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGZpbGVzeXN0ZW0gdHlwZSBpZiB0aGUgdXNlciBkb2VzIG5vdAorc3BlY2lmeSBpdCB2aWEgdGhlCisuQiBcLXQKK29wdGlvbiwgb3IgaWYKKy5CIG1rZTJmcworaXMgbm90IHN0YXJ0ZWQgdXNpbmcgYSBwcm9ncmFtIG5hbWUgb2YgdGhlIGZvcm0KKy5CSSBta2ZzLiBmcy10eXBlXGZSLgorSWYgYm90aCB0aGUgdXNlciBhbmQgdGhlCisuQiBta2UyZnMuY29uZgorZmlsZSBkb2VzIG5vdCBzcGVjaWZ5IGEgZGVmYXVsdCBmaWxlc3lzdGVtIHR5cGUsIG1rZTJmcyB3aWxsIHVzZSBhCitkZWZhdWx0IGZpbGVzeXN0ZW0gdHlwZSBvZgorLklSIGV4dDMKK2lmIGEgam91cm5hbCB3YXMgcmVxdWVzdGVkIHZpYSBhIGNvbW1hbmQtbGluZSBvcHRpb24sIG9yCisuSSBleHQyCitpZiBub3QuCisuVFAKKy5JIGJsb2Nrc2l6ZQorVGhpcyByZWxhdGlvbiBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgYmxvY2tzaXplIGlmIHRoZSB1c2VyIGRvZXMgbm90CitzcGVjaWZ5IGEgYmxvY2tzaXplIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCB0aGUgZmlsZXN5c3RlbS10eXBlCitzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZG9lcyBub3Qgc3BlY2lmeSBhIGJsb2Nrc2l6ZS4KKy5UUAorLkkgaGFzaF9hbGcKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHVzZWQgZm9yIHRoZQorbmV3IGZpbGVzeXN0ZW1zIHdpdGggaGFzaGVkIGItdHJlZSBkaXJlY3Rvcmllcy4gIFZhbGlkIGFsZ29yaXRobXMKK2FjY2VwdGVkIGFyZToKKy5JUiBsZWdhY3kgLAorLklSIGhhbGZfbWQ0ICwKK2FuZAorLklSIHRlYSAuCisuVFAKKy5JIGlub2RlX3JhdGlvCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBpbm9kZSByYXRpbyBpZiB0aGUgdXNlciBkb2VzIG5vdAorc3BlY2lmeSBvbmUgb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIHRoZSBmaWxlc3lzdGVtLXR5cGUKK3NwZWNpZmljIHNlY3Rpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBkb2VzIG5vdCBzcGVjaWZ5IGEgZGVmYXVsdAoraW5vZGUgcmF0aW8uCisuVFAKKy5JIGlub2RlX3NpemUKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGlub2RlIHNpemUgaWYgdGhlIHVzZXIgZG9lcyBub3QKK3NwZWNpZnkgb25lIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCB0aGUgZmlsZXN5c3RlbS10eXBlCitzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZG9lcyBub3Qgc3BlY2lmeSBhIGRlZmF1bHQKK2lub2RlIHNpemUuCisuVFAKKy5JIHJlc2VydmVkX3JhdGlvCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBwZXJjZW50YWdlIG9mIGZpbGVzeXN0ZW0gYmxvY2tzCityZXNlcnZlZCBmb3IgdGhlIHN1cGVyLXVzZXIsIGlmIHRoZSB1c2VyIGRvZXMgbm90CitzcGVjaWZ5IG9uZSBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgdGhlIGZpbGVzeXN0ZW0tdHlwZQorc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGRvZXMgbm90IHNwZWNpZnkgYSBkZWZhdWx0CityZXNlcnZlZCByYXRpby4gVGhpcyB2YWx1ZSBjYW4gYmUgYSBmbG9hdGluZyBwb2ludCBudW1iZXIuCisuVFAKKy5JIHVuZG9fZGlyCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSB1bmRvIGZpbGUgc2hvdWxkIGJlCitzdG9yZWQuICBJdCBjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgdGhlCisuQiBFMkZTUFJPR1NfVU5ET19ESVIKK2Vudmlyb25tZW50IHZhcmlhYmxlLiAgSWYgdGhlIGRpcmVjdG9yeSBsb2NhdGlvbiBpcyBzZXQgdG8gdGhlIHZhbHVlCisuSVIgbm9uZSAsCisuQiBta2UyZnMKK3dpbGwgbm90IGNyZWF0ZSBhbiB1bmRvIGZpbGUuCisuU0ggVEhFIFtmc190eXBlc10gU1RBTlpBCitFYWNoIHRhZyBpbiB0aGUKKy5JIFtmc190eXBlc10gCitzdGFuemEgbmFtZXMgYSBmaWxlc3lzdGVtIHR5cGUgb3IgdXNhZ2UgdHlwZSB3aGljaCBjYW4gYmUgc3BlY2lmaWVkIHZpYSB0aGUKKy5CIFwtdAorb3IKKy5CIFwtVAorb3B0aW9ucyB0bworLkJSIG1rZTJmcyAoOCksCityZXNwZWN0aXZlbHkuCisuUAorVGhlCisuQiBta2UyZnMKK3Byb2dyYW0gY29uc3RydWN0cyBhIGxpc3Qgb2YgZnNfdHlwZXMgYnkgY29uY2F0ZW5hdGluZyB0aGUgZmlsZXN5c3RlbQordHlwZSAoaS5lLiwgZXh0MiwgZXh0MywgZXRjLikgd2l0aCB0aGUgdXNhZ2UgdHlwZSBsaXN0LiAgRm9yIG1vc3QKK2NvbmZpZ3VyYXRpb24gb3B0aW9ucywKKy5CIG1rZTJmcword2lsbCBsb29rIGZvciBhIHN1YnNlY3Rpb24gaW4gdGhlCisuSSBbZnNfdHlwZXNdCitzdGFuemEgY29ycmVzcG9uZGluZyB3aXRoIGVhY2ggZW50cnkgaW4gdGhlIGNvbnN0cnVjdGVkIGxpc3QsIHdpdGggbGF0ZXIKK2VudHJpZXMgb3ZlcnJpZGluZyBlYXJsaWVyIGZpbGVzeXN0ZW0gb3IgdXNhZ2UgdHlwZXMuCitGb3IKK2V4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcKKy5CIG1rZTJmcy5jb25mCitmcmFnbWVudDoKKy5QCitbZGVmYXVsdHNdCisuYnIKKwliYXNlX2ZlYXR1cmVzID0gc3BhcnNlX3N1cGVyLGZpbGV0eXBlLHJlc2l6ZV9pbm9kZSxkaXJfaW5kZXgKKy5icgorCWJsb2Nrc2l6ZSA9IDQwOTYKKy5icgorCWlub2RlX3NpemUgPSAyNTYKKy5icgorCWlub2RlX3JhdGlvID0gMTYzODQKKy5icgorCisuYnIKK1tmc190eXBlc10KKy5icgorCWV4dDMgPSB7CisuYnIKKwkJZmVhdHVyZXMgPSBoYXNfam91cm5hbAorLmJyCisJfQorLmJyCisJZXh0NCA9IHsKKy5icgorCQlmZWF0dXJlcyA9IGV4dGVudHMsZmxleF9iZworLmJyCisJCWlub2RlX3NpemUgPSAyNTYKKy5icgorCX0KKy5icgorCXNtYWxsID0geworLmJyCisJCWJsb2Nrc2l6ZSA9IDEwMjQKKy5icgorCQlpbm9kZV9yYXRpbyA9IDQwOTYKKy5icgorCX0KKy5icgorCWZsb3BweSA9IHsKKy5icgorCQlmZWF0dXJlcyA9IF5yZXNpemVfaW5vZGUKKy5icgorCQlibG9ja3NpemUgPSAxMDI0CisuYnIKKwkJaW5vZGVfc2l6ZSA9IDEyOAorLmJyCisJfQorLlAKK0lmIG1rZTJmcyBzdGFydGVkIHdpdGggYSBwcm9ncmFtIG5hbWUgb2YKKy5CUiBta2UyZnMuZXh0NCAsCit0aGVuIHRoZSBmaWxlc3lzdGVtIHR5cGUgb2YgZXh0NCB3aWxsIGJlIHVzZWQuICBJZiB0aGUgZmlsZXN5c3RlbSBpcworc21hbGxlciB0aGFuIDMgbWVnYWJ5dGVzLCBhbmQgbm8gdXNhZ2UgdHlwZSBpcyBzcGVjaWZpZWQsIHRoZW4KKy5CIG1rZTJmcword2lsbCB1c2UgYSBkZWZhdWx0Cit1c2FnZSB0eXBlIG9mCisuSVIgZmxvcHB5IC4KK1RoaXMgcmVzdWx0cyBpbiBhbiBmc190eXBlcyBsaXN0IG9mICJleHQ0LCBmbG9wcHkiLiAgIEJvdGggdGhlIGV4dDQKK3N1YnNlY3Rpb24gYW5kIHRoZSBmbG9wcHkgc3Vic2VjdGlvbiBkZWZpbmUgYW4KKy5JIGlub2RlX3NpemUKK3JlbGF0aW9uLCBidXQgc2luY2UgdGhlIGxhdGVyIGVudHJpZXMgaW4gdGhlIGZzX3R5cGVzIGxpc3Qgc3VwZXJzZWRlCitlYXJsaWVyIG9uZXMsIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBmb3IgZnNfdHlwZXMuZmxvcHB5Lmlub2RlX3NpemUKK3dpbGwgYmUgdXNlZCwgc28gdGhlIGZpbGVzeXN0ZW0gIHdpbGwgaGF2ZSBhbiBpbm9kZSBzaXplIG9mIDEyOC4KKy5QCitUaGUgZXhjZXB0aW9uIHRvIHRoaXMgcmVzb2x1dGlvbiBpcyB0aGUKKy5JIGZlYXR1cmVzCit0YWcsIHdoaWNoIGlzIHNwZWNpZmllcyBhIHNldCBvZiBjaGFuZ2VzIHRvIHRoZSBmZWF0dXJlcyB1c2VkIGJ5IHRoZQorZmlsZXN5c3RlbSwgYW5kIHdoaWNoIGlzIGN1bXVsYXRpdmUuICBTbyBpbiB0aGUgYWJvdmUgZXhhbXBsZSwgZmlyc3QKK3RoZSBjb25maWd1cmF0aW9uIHJlbGF0aW9uIGRlZmF1bHRzLmJhc2VfZmVhdHVyZXMgd291bGQgZW5hYmxlIGFuCitpbml0aWFsIGZlYXR1cmUgc2V0IHdpdGggdGhlIHNwYXJzZV9zdXBlciwgZmlsZXR5cGUsIHJlc2l6ZV9pbm9kZSwgYW5kCitkaXJfaW5kZXggZmVhdHVyZXMgZW5hYmxlZC4gIFRoZW4gY29uZmlndXJhdGlvbiByZWxhdGlvbgorZnNfdHlwZXMuZXh0NC5mZWF0dXJlcyB3b3VsZCBlbmFibGUgdGhlIGV4dGVudHMgYW5kIGZsZXhfYmcKK2ZlYXR1cmVzLCBhbmQgZmluYWxseSB0aGUgY29uZmlndXJhdGlvbiByZWxhdGlvbgorZnNfdHlwZXMuZmxvcHB5LmZlYXR1cmVzIHdvdWxkIHJlbW92ZQordGhlIHJlc2l6ZV9pbm9kZSBmZWF0dXJlLCByZXN1bHRpbmcgaW4gYSBmaWxlc3lzdGVtIGZlYXR1cmUgc2V0Citjb25zaXN0aW5nIG9mIHRoZSBzcGFyc2Vfc3VwZXIsIGZpbGV0eXBlLCByZXNpemVfaW5vZGUsIGRpcl9pbmRleCwKK2V4dGVudHNfYW5kIGZsZXhfYmcgZmVhdHVyZXMuCisuUAorRm9yIGVhY2ggZmlsZXN5c3RlbSB0eXBlLCB0aGUgZm9sbG93aW5nIHRhZ3MgbWF5IGJlIHVzZWQgaW4gdGhhdCAKK2ZzX3R5cGUncyBzdWJzZWN0aW9uOgorLlRQCisuSSBiYXNlX2ZlYXR1cmVzCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgZmVhdHVyZXMgd2hpY2ggYXJlIGluaXRpYWxseSBlbmFibGVkIGZvciB0aGlzCitmaWxlc3lzdGVtIHR5cGUuICBPbmx5IG9uZQorLkkgYmFzZV9mZWF0dXJlcword2lsbCBiZSB1c2VkLCBzbyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZW50cmllcyBpbiB0aGUgZnNfdHlwZXMgbGlzdAord2hvc2Ugc3Vic2VjdGlvbnMgZGVmaW5lIHRoZQorLkkgYmFzZV9mZWF0dXJlcworcmVsYXRpb24sIG9ubHkgdGhlIGxhc3Qgd2lsbCBiZSB1c2VkIGJ5CisuQlIgbWtlMmZzICg4KS4KKy5UUAorLkkgZmVhdHVyZXMKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZmVhdHVyZXMgZWRpdAorcmVxdWVzdHMgd2hpY2ggbW9kaWZ5IHRoZSBmZWF0dXJlIHNldAordXNlZCBieSB0aGUgbmV3bHkgY29uc3RydWN0ZWQgZmlsZXN5c3RlbS4gIFRoZSBzeW50YXggaXMgdGhlIHNhbWUgYXMgdGhlCisuQiAtTworY29tbWFuZC1saW5lIG9wdGlvbiB0bworLkJSIG1rZTJmcyAoOCk7Cit0aGF0IGlzLCBhIGZlYXR1cmUgY2FuIGJlIHByZWZpeGVkIGJ5IGEgY2FyZXQgKCdeJykgc3ltYm9sIHRvIGRpc2FibGUKK2EgbmFtZWQgZmVhdHVyZS4gIEVhY2gKKy5JIGZlYXR1cmUKK3JlbGF0aW9uIHNwZWNpZmllZCBpbiB0aGUgZnNfdHlwZXMgbGlzdCB3aWxsIGJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyCitmb3VuZCBpbiB0aGUgZnNfdHlwZXMgbGlzdC4KKy5UUAorLkkgZGVmYXVsdF9mZWF0dXJlcworVGhpcyByZWxhdGlvbiBzcGVjaWZpZXMgc2V0IG9mIGZlYXR1cmVzIHdoaWNoIHNob3VsZCBiZSBlbmFibGVkIG9yIAorZGlzYWJsZWQgYWZ0ZXIgYXBwbHlpbmcgdGhlIGZlYXR1cmVzIGxpc3RlZCBpbiB0aGUKKy5JIGJhc2VfZmVhdHVyZXMKK2FuZAorLkkgZmVhdHVyZXMKK3JlbGF0aW9ucy4gIEl0IG1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZQorLkIgLU8KK2NvbW1hbmQtbGluZSBvcHRpb24gdG8KKy5CUiBta2UyZnMgKDgpLgorLlRQCisuSSBhdXRvXzY0LWJpdF9zdXBwb3J0CitUaGlzIHJlbGF0aW9uIGlzIGEgYm9vbGVhbiB3aGljaCBzcGVjaWZpZXMgd2hldGhlcgorLkJSIG1rZTJmcyAoOCkKK3Nob3VsZCBhdXRvbWF0aWNhbGx5IGFkZCB0aGUgNjRiaXQgZmVhdHVyZSBpZiB0aGUgbnVtYmVyIG9mIGJsb2NrcyBmb3IKK3RoZSBmaWxlIHN5c3RlbSByZXF1aXJlcyB0aGlzIGZlYXR1cmUgdG8gYmUgZW5hYmxlZC4gIFRoZSByZXNpemVfaW5vZGUKK2ZlYXR1cmUgaXMgYWxzbyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIHNpbmNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCA2NC1iaXQKK2Jsb2NrIG51bWJlcnMuCisuVFAKKy5JIGRlZmF1bHRfbW50b3B0cworVGhpcyByZWxhdGlvbiBzcGVjaWZpZXMgdGhlIHNldCBvZiBtb3VudCBvcHRpb25zIHdoaWNoIHNob3VsZCBiZSBlbmFibGVkCitieSBkZWZhdWx0LiAgVGhlc2UgbWF5IGJlIGNoYW5nZWQgYXQgYSBsYXRlciB0aW1lIHdpdGggdGhlCisuQiAtbworY29tbWFuZC1saW5lIG9wdGlvbiB0bworLkJSIHR1bmUyZnMgKDgpLgorLlRQCisuSSBibG9ja3NpemUKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGJsb2Nrc2l6ZSBpZiB0aGUgdXNlciBkb2VzIG5vdAorc3BlY2lmeSBhIGJsb2Nrc2l6ZSBvbiB0aGUgY29tbWFuZCBsaW5lLgorLlRQCisuSSBsYXp5X2l0YWJsZV9pbml0CitUaGlzIGJvb2xlYW4gcmVsYXRpb24gc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGlub2RlIHRhYmxlIHNob3VsZCAKK2JlIGxhemlseSBpbml0aWFsaXplZC4gIEl0IG9ubHkgaGFzIG1lYW5pbmcgaWYgdGhlIHVuaW5pdF9iZyBmZWF0dXJlIGlzCitlbmFibGVkLiAgSWYgbGF6eV9pdGFibGVfaW5pdCBpcyB0cnVlIGFuZCB0aGUgdW5pbml0X2JnIGZlYXR1cmUgaXMKK2VuYWJsZWQsICB0aGUgaW5vZGUgdGFibGUgd2lsbAorbm90IGZ1bGx5IGluaXRpYWxpemVkIGJ5IAorLkJSIG1rZTJmcyAoOCkuCitUaGlzIHNwZWVkcyB1cCBmaWxlc3lzdGVtCitpbml0aWFsaXphdGlvbiBub3RpY2VhYmx5LCBidXQgaXQgcmVxdWlyZXMgdGhlIGtlcm5lbCB0byBmaW5pc2gKK2luaXRpYWxpemluZyB0aGUgZmlsZXN5c3RlbSBpbiB0aGUgYmFja2dyb3VuZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzCitmaXJzdCBtb3VudGVkLgorLlRQCisuSSBqb3VybmFsX2xvY2F0aW9uCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIGpvdXJuYWwuCisuVFAKKy5JIG51bV9iYWNrdXBfc2IKK1RoaXMgcmVsYXRpb24gaW5kaWNhdGVzIHdoZXRoZXIgZmlsZSBzeXN0ZW1zIHdpdGggdGhlCisuQiBzcGFyc2Vfc3VwZXIyCitmZWF0dXJlIGVuYWJsZWQgc2hvdWxkIGJlIGNyZWF0ZWQgd2l0aCAwLCAxLCBvciAyIGJhY2t1cCBzdXBlcmJsb2Nrcy4KKy5UUAorLkkgcGFja2VkX21ldGFfYmxvY2tzCitUaGlzIGJvb2xlYW4gcmVsYXRpb24gc3BlY2lmZXMgd2hldGhlciB0aGUgYWxsb2NhdGlvbiBiaXRtYXBzLCBpbm9kZQordGFibGUsIGFuZCBqb3VybmFsIHNob3VsZCBiZSBsb2NhdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgc3lzdGVtLgorLlRQCisuSSBpbm9kZV9yYXRpbworVGhpcyByZWxhdGlvbiBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgaW5vZGUgcmF0aW8gaWYgdGhlIHVzZXIgZG9lcyBub3QKK3NwZWNpZnkgb25lIG9uIHRoZSBjb21tYW5kIGxpbmUuCisuVFAKKy5JIGlub2RlX3NpemUKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGlub2RlIHNpemUgaWYgdGhlIHVzZXIgZG9lcyBub3QKK3NwZWNpZnkgb25lIG9uIHRoZSBjb21tYW5kIGxpbmUuCisuVFAKKy5JIHJlc2VydmVkX3JhdGlvCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBwZXJjZW50YWdlIG9mIGZpbGVzeXN0ZW0gYmxvY2tzCityZXNlcnZlZCBmb3IgdGhlIHN1cGVyLXVzZXIsIGlmIHRoZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgb25lIG9uIHRoZSBjb21tYW5kCitsaW5lLgorLlRQCisuSSBoYXNoX2FsZworVGhpcyByZWxhdGlvbiBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gdXNlZCBmb3IgdGhlCituZXcgZmlsZXN5c3RlbXMgd2l0aCBoYXNoZWQgYi10cmVlIGRpcmVjdG9yaWVzLiAgVmFsaWQgYWxnb3JpdGhtcworYWNjZXB0ZWQgYXJlOgorLklSIGxlZ2FjeSAsCisuSVIgaGFsZl9tZDQgLAorYW5kCisuSVIgdGVhIC4KKy5UUAorLkkgZmxleF9iZ19zaXplCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJsb2NrIGdyb3VwcyB0aGF0IHdpbGwgYmUgcGFja2VkCit0b2dldGhlciB0byBjcmVhdGUgb25lIGxhcmdlIHZpcnR1YWwgYmxvY2sgZ3JvdXAgb24gYW4gZXh0NCBmaWxlc3lzdGVtLgorVGhpcyBpbXByb3ZlcyBtZXRhLWRhdGEgbG9jYWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9uIG1ldGEtZGF0YSBoZWF2eQord29ya2xvYWRzLiAgVGhlIG51bWJlciBvZiBncm91cHMgbXVzdCBiZSBhIHBvd2VyIG9mIDIgYW5kIG1heSBvbmx5IGJlCitzcGVjaWZpZWQgaWYgdGhlIGZsZXhfYmcgZmlsZXN5c3RlbSBmZWF0dXJlIGlzIGVuYWJsZWQuCisuVFAKKy5JIG9wdGlvbnMKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIGFkZGl0aW9uYWwgZXh0ZW5kZWQgb3B0aW9ucyB3aGljaCBzaG91bGQgYmUKK3RyZWF0ZWQgYnkKKy5CUiBta2UyZnMgKDgpCithcyBpZiB0aGV5IHdlcmUgcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudCBvZiB0aGUKKy5CIC1FCitvcHRpb24uICBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBleHRlbmRlZCBvcHRpb25zIHVzZWQKK2J5CisuQlIgbWtlMmZzICg4KQorb24gYSBwZXItZmlsZXN5c3RlbSB0eXBlIGJhc2lzLgorLlRQCisuSSBkaXNjYXJkCitUaGlzIGJvb2xlYW4gcmVsYXRpb24gc3BlY2lmaWVzIHdoZXRoZXIgdGhlCisuQlIgbWtlMmZzICg4KQorc2hvdWxkIGF0dGVtcHQgdG8gZGlzY2FyZCBkZXZpY2UgcHJpb3IgdG8gZmlsZXN5c3RlbSBjcmVhdGlvbi4KKy5UUAorLkkgY2x1c3Rlcl9zaXplCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBjbHVzdGVyIHNpemUgaWYgdGhlIGJpZ2FsbG9jIGZpbGUKK3N5c3RlbSBmZWF0dXJlIGlzIGVuYWJsZWQuICBJdCBjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgdGhlCisuQiBcLUMKK2NvbW1hbmQgbGluZSBvcHRpb24gdG8KKy5CUiBta2UyZnMgKDgpCisuVFAKKy5JIG1ha2VfaHVnZWZpbGVzCitUaGlzIGJvb2xlYW4gcmVsYXRpb24gZW5hYmxlcyB0aGUgY3JlYXRpb24gb2YgcHJlLWFsbG9jYXRlZCBmaWxlcyBhcworcGFydCBvZiBmb3JtYXR0aW5nIHRoZSBmaWxlIHN5c3RlbS4KKy5UUAorLkkgaHVnZWZpbGVzX3VpZAorVGhpcyByZWxhdGlvbiBjb250cm9scyB0aGUgdXNlciBvd25lcnNoaXAgZm9yIGFsbCBvZiB0aGUgZmlsZXMgYW5kCitkaXJlY3RvcmllcyBjcmVhdGVkIGJ5IHRoZQorLkkgbWFrZV9odWdlZmlsZXMKK2ZlYXR1cmUuCisuVFAKKy5JIGh1Z2VmaWxlc19naWQKK1RoaXMgcmVsYXRpb24gY29udHJvbHMgdGhlIGdyb3VwIG93bmVyc2hpcCBmb3IgYWxsIG9mIHRoZSBmaWxlcyBhbmQKK2RpcmVjdG9yaWVzIGNyZWF0ZWQgYnkgdGhlCisuSSBtYWtlX2h1Z2VmaWxlcworZmVhdHVyZS4KKy5UUAorLkkgaHVnZWZpbGVzX3VtYXNrCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgdW1hc2sgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBmaWxlcyBhbmQKK2RpcmVjdG9yaWVzIGJ5IHRoZQorLkkgbWFrZV9odWdlZmlsZXMKK2ZlYXR1cmUuCisuVFAKKy5JIG51bV9odWdlZmlsZXMKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgaHVnZSBmaWxlcyB0byBiZSBjcmVhdGVkLiAgSWYgdGhpcworcmVsYXRpb24gaXMgbm90IHNwZWNpZmllZCwgb3IgaXMgc2V0IHRvIHplcm8sIGFuZCB0aGUKKy5JIGh1Z2VmaWxlc19zaXplCityZWxhdGlvbiBpcyBub24temVybywgdGhlbgorLkkgbWFrZV9odWdlZmlsZXMKK3dpbGwgY3JlYXRlIGFzIG1hbnkgaHVnZSBmaWxlcyBhcyBjYW4gZml0IHRvIGZpbGwgdGhlIGVudGlyZSBmaWxlIHN5c3RlbS4KKy5UUAorLkkgaHVnZWZpbGVzX3NsYWNrCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyBob3cgbXVjaCBzcGFjZSBzaG91bGQgYmUgcmVzZXJ2ZWQgZm9yIG90aGVyCitmaWxlcy4KKy5UUAorLkkgaHVnZWZpbGVzX3NpemUKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRoZSBodWdlIGZpbGVzLiAgSWYgdGhpcyByZWxhdGlvbiBpcworbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXMgdG8gZmlsbCB0aGUgZW50aXJlIGZpbGUgc3lzdGVtLgorLlRQCisuSSBodWdlZmlsZXNfYWxpZ24KK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBhbGlnbm1lbnQgZm9yIHRoZSBzdGFydCBibG9jayBvZiB0aGUgaHVnZQorZmlsZXMuICBJdCBhbHNvIGZvcmNlcyB0aGUgc2l6ZSBvZiBodWdlIGZpbGVzIHRvIGJlIGEgbXVsdGlwbGUgb2YgdGhlCityZXF1ZXN0ZWQgYWxpZ25tZW50LiAgSWYgdGhpcyByZWxhdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCBubyBhbGlnbm1lbnQKK3JlcXVpcmVtZW50IHdpbGwgYmUgaW1wb3NlZCBvbiB0aGUgaHVnZSBmaWxlcy4KKy5UUAorLkkgaHVnZWZpbGVzX2FsaWduX2Rpc2sKK1RoaWUgcmVsYXRpb25zIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBhbGlnbm1lbnQgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZQorYmVnaW5uaW5nIG9mIHRoZSBoYXJkIGRyaXZlIChhc3N1bWluZyB0aGF0IHRoZSBzdGFydGluZyBvZmZzZXQgb2YgdGhlCitwYXJ0aXRpb24gaXMgYXZhaWxhYmxlIHRvIG1rZTJmcykuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZSwgd2hpY2gKK2lmIHdpbGwgY2F1c2UgaHVnZWZpbGUgYWxpZ25tZW50IHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlCitmaWxlIHN5c3RlbS4KKy5UUAorLkkgaHVnZWZpbGVzX25hbWUKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBiYXNlIGZpbGUgbmFtZSBmb3IgdGhlIGh1Z2UgZmlsZXMuCisuVFAKKy5JIGh1Z2VmaWxlc19kaWdpdHMKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSAoemVyby1wYWRkZWQpIHdpZHRoIG9mIHRoZSBmaWVsZCBmb3IgdGhlCitodWdlIGZpbGUgbnVtYmVyLgorLlRQCisuSSB6ZXJvX2h1Z2VmaWxlcworVGhpcyBib29sZWFuIHJlbGF0aW9uIHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB6ZXJvIGJsb2NrcyB3aWxsIGJlCit3cml0dGVuIHRvIHRoZSBodWdlZmlsZXMgd2hpbGUKKy5CUiBta2UyZnMoOCkKK2lzIGNyZWF0aW5nIHRoZW0uICBCeSBkZWZhdWx0LCB6ZXJvIGJsb2NrcyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGh1Z2UKK2ZpbGVzIHRvIGF2b2lkIHN0YWxlIGRhdGEgZnJvbSBiZWluZyBtYWRlIGF2YWlsYWJsZSB0byBwb3RlbnRpYWxseQordW50cnVzdGVkIHVzZXIgcHJvZ3JhbXMsIHVubGVzcyB0aGUgZGV2aWNlIHN1cHBvcnRzIGEgZGlzY2FyZC90cmltCitvcGVyYXRpb24gd2hpY2ggd2lsbCB0YWtlIGNhcmUgb2YgemVyb2luZyB0aGUgZGV2aWNlIGJsb2Nrcy4gIEJ5CisuSSB6ZXJvX2h1Z2VmaWxlcwordG8gZmFsc2UsIHRoaXMgc3RlcCB3aWxsIGFsd2F5cyBiZSBza2lwcGVkLCB3aGljaCBjYW4gYmUgdXNlZnVsIGlmIGl0IGlzCitrbm93biB0aGF0IHRoZSBkaXNrIGhhcyBiZWVuIHByZXZpb3VzbHkgZXJhc2VkLCBvciBpZiB0aGUgdXNlciBwcm9ncmFtcwordGhhdCB3aWxsIGhhdmUgYWNjZXNzIHRvIHRoZSBodWdlIGZpbGVzIGFyZSB0cnVzdGVkIHRvIG5vdCByZXZlYWwgc3RhbGUKK2RhdGEuCisuU0ggVEhFIFtkZXZpY2VzXSBTVEFOWkEKK0VhY2ggdGFnIGluIHRoZQorLkkgW2RldmljZXNdIAorc3RhbnphIG5hbWVzIGRldmljZSBuYW1lIHNvIHRoYXQgcGVyLWRldmljZSBkZWZhdWx0cyBjYW4gYmUgc3BlY2lmaWVkLgorLlRQCisuSSBmc190eXBlCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBwYXJhbWV0ZXIgZm9yIHRoZQorLkIgXC10CitvcHRpb24sIGlmIHRoaXMgb3B0aW9uIGlzbid0IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorLlRQCisuSSB1c2FnZV90eXBlcworVGhpcyByZWxhdGlvbiBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgcGFyYW1ldGVyIGZvciB0aGUKKy5CIFwtVAorb3B0aW9uLCBpZiB0aGlzIG9wdGlvbiBpc24ndCBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKy5TSCBGSUxFUworLlRQCisuSSAvZXRjL21rZTJmcy5jb25mCitUaGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciAKKy5CUiBta2UyZnMgKDgpLgorLlNIIFNFRSBBTFNPCisuQlIgbWtlMmZzICg4KQpkaWZmIC0tZ2l0IGEvbWlzYy9ta2UyZnMuY29uZi5pbiBiL21pc2MvbWtlMmZzLmNvbmYuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdmNTljYwotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvbWtlMmZzLmNvbmYuaW4KQEAgLTAsMCArMSw1MyBAQAorW2RlZmF1bHRzXQorCWJhc2VfZmVhdHVyZXMgPSBzcGFyc2Vfc3VwZXIsbGFyZ2VfZmlsZSxmaWxldHlwZSxyZXNpemVfaW5vZGUsZGlyX2luZGV4LGV4dF9hdHRyCisJZGVmYXVsdF9tbnRvcHRzID0gYWNsLHVzZXJfeGF0dHIKKwllbmFibGVfcGVyaW9kaWNfZnNjayA9IDAKKwlibG9ja3NpemUgPSA0MDk2CisJaW5vZGVfc2l6ZSA9IDI1NgorCWlub2RlX3JhdGlvID0gMTYzODQKKworW2ZzX3R5cGVzXQorCWV4dDMgPSB7CisJCWZlYXR1cmVzID0gaGFzX2pvdXJuYWwKKwl9CisJZXh0NCA9IHsKKwkJZmVhdHVyZXMgPSBoYXNfam91cm5hbCxleHRlbnQsaHVnZV9maWxlLGZsZXhfYmcsdW5pbml0X2JnLGRpcl9ubGluayxleHRyYV9pc2l6ZQorCQlhdXRvXzY0LWJpdF9zdXBwb3J0ID0gMQorCQlpbm9kZV9zaXplID0gMjU2CisJfQorCWV4dDRkZXYgPSB7CisJCWZlYXR1cmVzID0gaGFzX2pvdXJuYWwsZXh0ZW50LGh1Z2VfZmlsZSxmbGV4X2JnLHVuaW5pdF9iZyxkaXJfbmxpbmssZXh0cmFfaXNpemUKKwkJaW5vZGVfc2l6ZSA9IDI1NgorCQlvcHRpb25zID0gdGVzdF9mcz0xCisJfQorCXNtYWxsID0geworCQlibG9ja3NpemUgPSAxMDI0CisJCWlub2RlX3NpemUgPSAxMjgKKwkJaW5vZGVfcmF0aW8gPSA0MDk2CisJfQorCWZsb3BweSA9IHsKKwkJYmxvY2tzaXplID0gMTAyNAorCQlpbm9kZV9zaXplID0gMTI4CisJCWlub2RlX3JhdGlvID0gODE5MgorCX0KKwliaWcgPSB7CisJCWlub2RlX3JhdGlvID0gMzI3NjgKKwl9CisJaHVnZSA9IHsKKwkJaW5vZGVfcmF0aW8gPSA2NTUzNgorCX0KKwluZXdzID0geworCQlpbm9kZV9yYXRpbyA9IDQwOTYKKwl9CisJbGFyZ2VmaWxlID0geworCQlpbm9kZV9yYXRpbyA9IDEwNDg1NzYKKwkJYmxvY2tzaXplID0gLTEKKwl9CisJbGFyZ2VmaWxlNCA9IHsKKwkJaW5vZGVfcmF0aW8gPSA0MTk0MzA0CisJCWJsb2Nrc2l6ZSA9IC0xCisJfQorCWh1cmQgPSB7CisJICAgICBibG9ja3NpemUgPSA0MDk2CisJICAgICBpbm9kZV9zaXplID0gMTI4CisJfQpkaWZmIC0tZ2l0IGEvbWlzYy9ta2UyZnMuaCBiL21pc2MvbWtlMmZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U3MmNiMwotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvbWtlMmZzLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIG1rZTJmcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorICogCTIwMDMsIDIwMDQsIDIwMDUgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKy8qIG1rZTJmcy5jICovCitleHRlcm4gY29uc3QgY2hhciAqIHByb2dyYW1fbmFtZTsKK2V4dGVybiBpbnQJcXVpZXQ7CitleHRlcm4gaW50CXZlcmJvc2U7CitleHRlcm4gaW50CXplcm9faHVnZWZpbGU7CitleHRlcm4gY2hhciAqKmZzX3R5cGVzOworCitleHRlcm4gY2hhciAqZ2V0X3N0cmluZ19mcm9tX3Byb2ZpbGUoY2hhciAqKnR5cGVzLCBjb25zdCBjaGFyICpvcHQsCisJCQkJICAgICBjb25zdCBjaGFyICpkZWZfdmFsKTsKK2V4dGVybiBpbnQgZ2V0X2ludF9mcm9tX3Byb2ZpbGUoY2hhciAqKnR5cGVzLCBjb25zdCBjaGFyICpvcHQsIGludCBkZWZfdmFsKTsKK2V4dGVybiBpbnQgZ2V0X2Jvb2xfZnJvbV9wcm9maWxlKGNoYXIgKip0eXBlcywgY29uc3QgY2hhciAqb3B0LCBpbnQgZGVmX3ZhbCk7CitleHRlcm4gaW50IGludF9sb2cxMCh1bnNpZ25lZCBsb25nIGxvbmcgYXJnKTsKKworLyogbWtfaHVnZWZpbGVzLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgbWtfaHVnZWZpbGVzKGV4dDJfZmlsc3lzIGZzLCBjb25zdCBjaGFyICpkZXZpY2VfbmFtZSk7CisKKworCmRpZmYgLS1naXQgYS9taXNjL21rbG9zdCtmb3VuZC44LmluIGIvbWlzYy9ta2xvc3QrZm91bmQuOC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTI3NDBjCi0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9ta2xvc3QrZm91bmQuOC5pbgpAQCAtMCwwICsxLDQzIEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAxOTkzLCAxOTk0LCAxOTk1IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiIAorLlRIIE1LTE9TVCtGT1VORCA4ICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCitta2xvc3QrZm91bmQgXC0gY3JlYXRlIGEgbG9zdCtmb3VuZCBkaXJlY3Rvcnkgb24gYSBtb3VudGVkIExpbnV4CitzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0KKy5TSCBTWU5PUFNJUworLkIgbWtsb3N0K2ZvdW5kCisuU0ggREVTQ1JJUFRJT04KKy5CIG1rbG9zdCtmb3VuZAoraXMgdXNlZCB0byBjcmVhdGUgYQorLkkgbG9zdCtmb3VuZAorZGlyZWN0b3J5IGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9uIGEgTGludXggc2Vjb25kIGV4dGVuZGVkCitmaWxlIHN5c3RlbS4gIFRoZXJlIGlzIG5vcm1hbGx5IGEKKy5JIGxvc3QrZm91bmQKK2RpcmVjdG9yeSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgZWFjaCBmaWxlc3lzdGVtLgorLlBQCisuQiBta2xvc3QrZm91bmQKK3ByZS1hbGxvY2F0ZXMgZGlzayBibG9ja3MgdG8gdGhlCisuSSBsb3N0K2ZvdW5kCitkaXJlY3Rvcnkgc28gdGhhdCB3aGVuCisuQlIgZTJmc2NrICg4KQoraXMgYmVpbmcgcnVuIHRvIHJlY292ZXIgYSBmaWxlc3lzdGVtLCBpdCBkb2VzIG5vdCBuZWVkIHRvIGFsbG9jYXRlIGJsb2NrcyBpbgordGhlIGZpbGVzeXN0ZW0gdG8gc3RvcmUgYSBsYXJnZSBudW1iZXIgb2YgdW5saW5rZWQgZmlsZXMuICBUaGlzIGVuc3VyZXMgdGhhdAorLkIgZTJmc2NrCit3aWxsIG5vdCBoYXZlIHRvIGFsbG9jYXRlIGRhdGEgYmxvY2tzIGluIHRoZSBmaWxlc3lzdGVtIGR1cmluZyByZWNvdmVyeS4KKy5TSCBPUFRJT05TCitUaGVyZSBhcmUgbm9uZS4KKy5TSCBBVVRIT1IKKy5CIG1rbG9zdCtmb3VuZAoraGFzIGJlZW4gd3JpdHRlbiBieSBSZW15IENhcmQgPFJlbXkuQ2FyZEBsaW51eC5vcmc+LiAgSXQgaXMgY3VycmVudGx5IGJlaW5nCittYWludGFpbmVkIGJ5IFRoZW9kb3JlIFRzJ28gPHR5dHNvQGFsdW0ubWl0LmVkdT4uCisuU0ggQlVHUworVGhlcmUgYXJlIG5vbmUgOi0pCisuU0ggQVZBSUxBQklMSVRZCisuQiBta2xvc3QrZm91bmQKK2lzIHBhcnQgb2YgdGhlIGUyZnNwcm9ncyBwYWNrYWdlIGFuZCBpcyBhdmFpbGFibGUgZnJvbSAKK2h0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LgorLlNIIFNFRSBBTFNPCisuQlIgZTJmc2NrICg4KSwKKy5CUiBta2UyZnMgKDgpCmRpZmYgLS1naXQgYS9taXNjL21rbG9zdCtmb3VuZC5jIGIvbWlzYy9ta2xvc3QrZm91bmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzRlODI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9ta2xvc3QrZm91bmQuYwpAQCAtMCwwICsxLDg3IEBACisvKgorICogbWtsb3N0K2ZvdW5kLmMJLSBDcmVhdGVzIGEgZGlyZWN0b3J5IGxvc3QrZm91bmQgb24gYSBtb3VudGVkIHNlY29uZAorICoJCQkgIGV4dGVuZGVkIGZpbGUgc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzICBSZW15IENhcmQgPGNhcmRAbWFzaS5pYnAuZnI+CisgKgorICogVGhpcyBmaWxlIGNhbiBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlCisgKi8KKworLyoKKyAqIEhpc3Rvcnk6CisgKiA5My8wNC8yMgktIENyZWF0aW9uCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKyNpbmNsdWRlICJubHMtZW5hYmxlLmgiCisKKyNkZWZpbmUgTFBGICJsb3N0K2ZvdW5kIgorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiogYXJndikKK3sKKwljaGFyIG5hbWUgW0VYVDJfTkFNRV9MRU5dOworCWNoYXIgcGF0aCBbc2l6ZW9mIChMUEYpICsgMSArIDI1Nl07CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IGksIGo7CisJaW50IGQ7CisKKyNpZmRlZiBFTkFCTEVfTkxTCisJc2V0bG9jYWxlKExDX01FU1NBR0VTLCAiIik7CisJc2V0bG9jYWxlKExDX0NUWVBFLCAiIik7CisJYmluZHRleHRkb21haW4oTkxTX0NBVF9OQU1FLCBMT0NBTEVESVIpOworCXRleHRkb21haW4oTkxTX0NBVF9OQU1FKTsKKyNlbmRpZgorCWZwcmludGYgKHN0ZGVyciwgIm1rbG9zdCtmb3VuZCAlcyAoJXMpXG4iLCBFMkZTUFJPR1NfVkVSU0lPTiwKKwkJIEUyRlNQUk9HU19EQVRFKTsKKwlpZiAoYXJnYyAhPSAxKSB7CisJCSh2b2lkKWFyZ3Y7IC8qIGF2b2lkIHVudXNlZCBhcmd1bWVudCB3YXJuaW5nICovCisJCWZwcmludGYgKHN0ZGVyciwgIiVzIiwgXygiVXNhZ2U6IG1rbG9zdCtmb3VuZFxuIikpOworCQlleGl0KDEpOworCX0KKwlpZiAobWtkaXIgKExQRiwgMDcwMCkgPT0gLTEpIHsKKwkJcGVycm9yICgibWtkaXIiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpID0gMDsKKwltZW1zZXQgKG5hbWUsICd4JywgMjQ2KTsKKwlkbyB7CisJCXNwcmludGYgKG5hbWUgKyAyNDYsICIlMDhkIiwgaSk7CisJCXN0cmNweSAocGF0aCwgTFBGKTsKKwkJc3RyY2F0IChwYXRoLCAiLyIpOworCQlzdHJjYXQgKHBhdGgsIG5hbWUpOworCQlpZiAoKGQgPSBjcmVhdCAocGF0aCwgMDY0NCkpID09IC0xKSB7CisJCQlwZXJyb3IgKCJjcmVhdCIpOworCQkJZXhpdCAoMSk7CisJCX0KKwkJaSsrOworCQljbG9zZSAoZCk7CisJCWlmIChzdGF0IChMUEYsICZzdCkgPT0gLTEpIHsKKwkJCXBlcnJvciAoInN0YXQiKTsKKwkJCWV4aXQgKDEpOworCQl9CisJfSB3aGlsZSAoc3Quc3Rfc2l6ZSA8PSAoRVhUMl9ORElSX0JMT0NLUyAtIDEpICogc3Quc3RfYmxrc2l6ZSk7CisJZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworCQlzcHJpbnRmIChuYW1lICsgMjQ2LCAiJTA4ZCIsIGopOworCQlzdHJjcHkgKHBhdGgsIExQRik7CisJCXN0cmNhdCAocGF0aCwgIi8iKTsKKwkJc3RyY2F0IChwYXRoLCBuYW1lKTsKKwkJaWYgKHVubGluayAocGF0aCkgPT0gLTEpIHsKKwkJCXBlcnJvciAoInVubGluayIpOworCQkJZXhpdCAoMSk7CisJCX0KKwl9CisJZXhpdCAoMCk7Cit9CmRpZmYgLS1naXQgYS9taXNjL25scy1lbmFibGUuaCBiL21pc2MvbmxzLWVuYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MWRjYzEKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL25scy1lbmFibGUuaApAQCAtMCwwICsxLDIxIEBACisjaWZkZWYgRU5BQkxFX05MUworI2luY2x1ZGUgPGxpYmludGwuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNkZWZpbmUgXyhhKSAoZ2V0dGV4dCAoYSkpCisjaWZkZWYgZ2V0dGV4dF9ub29wCisjZGVmaW5lIE5fKGEpIGdldHRleHRfbm9vcCAoYSkKKyNlbHNlCisjZGVmaW5lIE5fKGEpIChhKQorI2VuZGlmCisjZGVmaW5lIFBfKHNpbmd1bGFyLCBwbHVyYWwsIG4pIChuZ2V0dGV4dCAoc2luZ3VsYXIsIHBsdXJhbCwgbikpCisjaWZuZGVmIE5MU19DQVRfTkFNRQorI2RlZmluZSBOTFNfQ0FUX05BTUUgImUyZnNwcm9ncyIKKyNlbmRpZgorI2lmbmRlZiBMT0NBTEVESVIKKyNkZWZpbmUgTE9DQUxFRElSICIvdXNyL3NoYXJlL2xvY2FsZSIKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgXyhhKSAoYSkKKyNkZWZpbmUgTl8oYSkgYQorI2RlZmluZSBQXyhzaW5ndWxhciwgcGx1cmFsLCBuKSAoKG4pID09IDEgPyAoc2luZ3VsYXIpIDogKHBsdXJhbCkpCisjZW5kaWYKZGlmZiAtLWdpdCBhL21pc2MvcGFydGluZm8uYyBiL21pc2MvcGFydGluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDYxZTgwCi0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9wYXJ0aW5mby5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBwYXJ0aW5mby5jCisgKgorICogT3JpZ2luYWxseSB3cml0dGVuIGJ5IEFsYWluIEtuYWZmLCA8YWxrbmFmZkBpbm5ldC5sdT4uCisgKgorICogQ2xlYW5lZCB1cCBieSBUaGVvZG9yZSBUcydvLCA8dHl0c29AbWl0LmVkdT4uCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKworI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9JTykgJiYgIWRlZmluZWQoQkxLR0VUU0laRSkKKyNkZWZpbmUgQkxLR0VUU0laRSBfSU8oMHgxMiw5NikJLyogcmV0dXJuIGRldmljZSBzaXplICovCisjZW5kaWYKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBoZF9nZW9tZXRyeSBsb2M7CisJaW50IGZkLCBpOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworI2lmZGVmIEVOQUJMRV9OTFMKKwlzZXRsb2NhbGUoTENfTUVTU0FHRVMsICIiKTsKKwlzZXRsb2NhbGUoTENfQ1RZUEUsICIiKTsKKwliaW5kdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUsIExPQ0FMRURJUik7CisJdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUpOworCXNldF9jb21fZXJyX2dldHRleHQoZ2V0dGV4dCk7CisjZW5kaWYKKwlpZiAoYXJnYyA9PSAxKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJVc2FnZTogICVzIGRldmljZS4uLlxuXG5QcmludHMgb3V0IHRoZSAiCisJCQkicGFydGl0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGdpdmVuIGRldmljZS5cbiIKKwkJCSJGb3IgZXhhbXBsZTogJXMgL2Rldi9oZGFcblxuIiksIGFyZ3ZbMF0sIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKworCWZvciAoaT0xOyBpIDwgYXJnYzsgaSsrKSB7CisJCWZkID0gb3Blbihhcmd2W2ldLCBPX1JET05MWSk7CisKKwkJaWYgKGZkIDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIkNhbm5vdCBvcGVuICVzOiAlcyIpLAorCQkJCWFyZ3ZbaV0sIHN0cmVycm9yKGVycm5vKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChpb2N0bChmZCwgSERJT19HRVRHRU8sICZsb2MpIDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIkNhbm5vdCBnZXQgZ2VvbWV0cnkgb2YgJXM6ICVzIiksCisJCQkJYXJndltpXSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWNsb3NlKGZkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKworCQlpZiAoaW9jdGwoZmQsIEJMS0dFVFNJWkUsICZzaXplKSA8IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJDYW5ub3QgZ2V0IHNpemUgb2YgJXM6ICVzIiksCisJCQkJYXJndltpXSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWNsb3NlKGZkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHJpbnRmKF8oIiVzOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIHN0YXJ0PSU4ZCBzaXplPSU4bHUgZW5kPSU4ZFxuIiksCisJCSAgICAgICBhcmd2W2ldLAorCQkgICAgICAgbG9jLmhlYWRzLCAoaW50KWxvYy5zZWN0b3JzLCBsb2MuY3lsaW5kZXJzLAorCQkgICAgICAgKGludClsb2Muc3RhcnQsIHNpemUsIChpbnQpIGxvYy5zdGFydCArIHNpemUgLTEpOworCQljbG9zZShmZCk7CisJfQorCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9taXNjL3Byb2ZpbGUtdG8tYy5hd2sgYi9taXNjL3Byb2ZpbGUtdG8tYy5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2NGVmZAotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvcHJvZmlsZS10by1jLmF3awpAQCAtMCwwICsxLDEyIEBACisjIS9iaW4vYXdrCitCRUdJTiB7CisgIHByaW50ZigiY29uc3QgY2hhciAqbWtlMmZzX2RlZmF1bHRfcHJvZmlsZSA9IFxuIik7Cit9CisKK3sKKyAgcHJpbnRmKCIgIFwiJXNcXG5cIlxuIiwgJDApOworfQorCitFTkQgeworICBwcmludGYoIjtcbiIsIHN0cikKK30KZGlmZiAtLWdpdCBhL21pc2MvdHVuZTJmcy44LmluIGIvbWlzYy90dW5lMmZzLjguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUwZDQ3NQotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvdHVuZTJmcy44LmluCkBAIC0wLDAgKzEsNzA2IEBACisuXCIgUmV2aXNpb24gMS4wIDkzLzA2LzMgMjM6MDAgIGNoaworLlwiIEluaXRpYWwgcmV2aXNpb24KKy5cIgorLlwiCisuVEggVFVORTJGUyA4ICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCit0dW5lMmZzIFwtIGFkanVzdCB0dW5hYmxlIGZpbGVzeXN0ZW0gcGFyYW1ldGVycyBvbiBleHQyL2V4dDMvZXh0NCBmaWxlc3lzdGVtcworLlNIIFNZTk9QU0lTCisuQiB0dW5lMmZzCitbCisuQiBcLWwKK10KK1sKKy5CIFwtYworLkkgbWF4LW1vdW50LWNvdW50cworXQorWworLkIgXC1lCisuSSBlcnJvcnMtYmVoYXZpb3IKK10KK1sKKy5CIFwtZgorXQorWworLkIgXC1pCisuSSBpbnRlcnZhbC1iZXR3ZWVuLWNoZWNrcworXQorWworLkIgXC1qCitdCitbCisuQiBcLUoKKy5JIGpvdXJuYWwtb3B0aW9ucworXQorWworLkIgXC1tCisuSSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZQorXQorWworLkIgXC1vCisuUkkgW15dbW91bnQtb3B0aW9ucyBbLC4uLl0KK10KK1sKKy5CIFwtcgorLkkgcmVzZXJ2ZWQtYmxvY2tzLWNvdW50CitdCitbCisuQiBcLXMKKy5JIHNwYXJzZS1zdXBlci1mbGFnCitdCitbCisuQiBcLXUKKy5JIHVzZXIKK10KK1sKKy5CIFwtZworLkkgZ3JvdXAKK10KK1sKKy5CIFwtQworLkkgbW91bnQtY291bnQKK10KK1sKKy5CIFwtRQorLkkgZXh0ZW5kZWQtb3B0aW9ucworXQorWworLkIgXC1MCisuSSB2b2x1bWUtbmFtZQorXQorWworLkIgXC1NCisuSSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5CitdCitbCisuQiBcLU8gCisuUkkgW15dIGZlYXR1cmUgWywuLi5dCitdCitbCisuQiBcLVEKKy5JIHF1b3RhLW9wdGlvbnMKK10KK1sKKy5CIFwtVAorLkkgdGltZS1sYXN0LWNoZWNrZWQKK10KK1sKKy5CIFwtVQorLkkgVVVJRAorXQorZGV2aWNlCisuU0ggREVTQ1JJUFRJT04KKy5CSSB0dW5lMmZzCithbGxvd3MgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHRvIGFkanVzdCB2YXJpb3VzIHR1bmFibGUgZmlsZXN5c3RlbSAKK3BhcmFtZXRlcnMgb24gTGludXggZXh0MiwgZXh0Mywgb3IgZXh0NCBmaWxlc3lzdGVtcy4gIFRoZSBjdXJyZW50IHZhbHVlcyAKK29mIHRoZXNlIG9wdGlvbnMgY2FuIGJlIGRpc3BsYXllZCBieSB1c2luZyB0aGUKKy5CIC1sCitvcHRpb24gdG8KKy5CUiB0dW5lMmZzICg4KQorcHJvZ3JhbSwgb3IgYnkgdXNpbmcgdGhlCisuQlIgZHVtcGUyZnMgKDgpCitwcm9ncmFtLgorLlBQCitUaGUKKy5JIGRldmljZQorc3BlY2lmaWVyIGNhbiBlaXRoZXIgYmUgYSBmaWxlbmFtZSAoaS5lLiwgL2Rldi9zZGExKSwgb3IgYSBMQUJFTCBvciBVVUlECitzcGVjaWZpZXI6ICJcZkJMQUJFTD1cZkl2b2x1bWUtbmFtZVxmUiIgb3IgIlxmQlVVSUQ9XGZJdXVpZFxmUiIuICAoaS5lLiwKK0xBQkVMPWhvbWUgb3IgVVVJRD1lNDA0ODZjNi04NGQ1LTRmMmYtYjk5Yy0wMzIyODE3OTljOWQpLgorLlNIIE9QVElPTlMKKy5UUAorLkJJIFwtYyAiIG1heC1tb3VudC1jb3VudHMiCitBZGp1c3QgdGhlIG51bWJlciBvZiBtb3VudHMgYWZ0ZXIgd2hpY2ggdGhlIGZpbGVzeXN0ZW0gd2lsbCBiZSBjaGVja2VkIGJ5IAorLkJSIGUyZnNjayAoOCkuICAKK0lmCisuSSBtYXgtbW91bnQtY291bnRzCitpcyAwIG9yIFwtMSwgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIHdpbGwgYmUgZGlzcmVnYXJkZWQgCitieQorLkJSIGUyZnNjayAoOCkKK2FuZCB0aGUga2VybmVsLgorLnNwCitTdGFnZ2VyaW5nIHRoZSBtb3VudC1jb3VudHMgYXQgd2hpY2ggZmlsZXN5c3RlbXMgYXJlIGZvcmNpYmx5CitjaGVja2VkIHdpbGwgYXZvaWQgYWxsIGZpbGVzeXN0ZW1zIGJlaW5nIGNoZWNrZWQgYXQgb25lIHRpbWUKK3doZW4gdXNpbmcgam91cm5hbGVkIGZpbGVzeXN0ZW1zLgorLnNwCitZb3Ugc2hvdWxkIHN0cm9uZ2x5IGNvbnNpZGVyIHRoZSBjb25zZXF1ZW5jZXMgb2YgZGlzYWJsaW5nCittb3VudC1jb3VudC1kZXBlbmRlbnQgY2hlY2tpbmcgZW50aXJlbHkuICBCYWQgZGlzayBkcml2ZXMsIGNhYmxlcywKK21lbW9yeSwgYW5kIGtlcm5lbCBidWdzIGNvdWxkIGFsbCBjb3JydXB0IGEgZmlsZXN5c3RlbSB3aXRob3V0CittYXJraW5nIHRoZSBmaWxlc3lzdGVtIGRpcnR5IG9yIGluIGVycm9yLiAgSWYgeW91IGFyZSB1c2luZworam91cm5hbGluZyBvbiB5b3VyIGZpbGVzeXN0ZW0sIHlvdXIgZmlsZXN5c3RlbSB3aWxsCisuQiBuZXZlcgorYmUgbWFya2VkIGRpcnR5LCBzbyBpdCB3aWxsIG5vdCBub3JtYWxseSBiZSBjaGVja2VkLiAgQQorZmlsZXN5c3RlbSBlcnJvciBkZXRlY3RlZCBieSB0aGUga2VybmVsIHdpbGwgc3RpbGwgZm9yY2UKK2FuIGZzY2sgb24gdGhlIG5leHQgcmVib290LCBidXQgaXQgbWF5IGFscmVhZHkgYmUgdG9vIGxhdGUKK3RvIHByZXZlbnQgZGF0YSBsb3NzIGF0IHRoYXQgcG9pbnQuCisuc3AKK1NlZSBhbHNvIHRoZQorLkIgXC1pCitvcHRpb24gZm9yIHRpbWUtZGVwZW5kZW50IGNoZWNraW5nLgorLlRQCisuQkkgXC1DICIgbW91bnQtY291bnQiCitTZXQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgZmlsZXN5c3RlbSBoYXMgYmVlbiBtb3VudGVkLgorSWYgc2V0IHRvIGEgZ3JlYXRlciB2YWx1ZSB0aGFuIHRoZSBtYXgtbW91bnQtY291bnRzIHBhcmFtZXRlcgorc2V0IGJ5IHRoZSAKKy5CIFwtYworb3B0aW9uLAorLkJSIGUyZnNjayAoOCkgCit3aWxsIGNoZWNrIHRoZSBmaWxlc3lzdGVtIGF0IHRoZSBuZXh0IHJlYm9vdC4KKy5UUAorLkJJIFwtZSAiIGVycm9yLWJlaGF2aW9yIgorQ2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUga2VybmVsIGNvZGUgd2hlbiBlcnJvcnMgYXJlIGRldGVjdGVkLgorSW4gYWxsIGNhc2VzLCBhIGZpbGVzeXN0ZW0gZXJyb3Igd2lsbCBjYXVzZQorLkJSIGUyZnNjayAoOCkKK3RvIGNoZWNrIHRoZSBmaWxlc3lzdGVtIG9uIHRoZSBuZXh0IGJvb3QuCisuSSBlcnJvci1iZWhhdmlvcgorY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlJTIDEuMmkKKy5UUCAxLjJpCisuQiBjb250aW51ZQorQ29udGludWUgbm9ybWFsIGV4ZWN1dGlvbi4KKy5UUAorLkIgcmVtb3VudC1ybworUmVtb3VudCBmaWxlc3lzdGVtIHJlYWQtb25seS4KKy5UUAorLkIgcGFuaWMKK0NhdXNlIGEga2VybmVsIHBhbmljLgorLlJFCisuVFAKKy5CSSBcLUUgIiBleHRlbmRlZC1vcHRpb25zIgorU2V0IGV4dGVuZGVkIG9wdGlvbnMgZm9yIHRoZSBmaWxlc3lzdGVtLiAgRXh0ZW5kZWQgb3B0aW9ucyBhcmUgY29tbWEKK3NlcGFyYXRlZCwgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHVzaW5nIHRoZSBlcXVhbHMgKCc9Jykgc2lnbi4KK1RoZSBmb2xsb3dpbmcgZXh0ZW5kZWQgb3B0aW9ucyBhcmUgc3VwcG9ydGVkOgorLlJTIDEuMmkKKy5UUAorLkIgY2xlYXJfbW1wCitSZXNldCB0aGUgTU1QIGJsb2NrIChpZiBhbnkpIGJhY2sgdG8gdGhlIGNsZWFuIHN0YXRlLiAgVXNlIG9ubHkgaWYKK2Fic29sdXRlbHkgY2VydGFpbiB0aGUgZGV2aWNlIGlzIG5vdCBjdXJyZW50bHkgbW91bnRlZCBvciBiZWluZworZnNja2VkLCBvciBtYWpvciBmaWxlc3lzdGVtIGNvcnJ1cHRpb24gY2FuIHJlc3VsdC4gIE5lZWRzICctZicuCisuVFAKKy5CSSBtbXBfdXBkYXRlX2ludGVydmFsPSBpbnRlcnZhbAorQWRqdXN0IHRoZSBpbml0aWFsIE1NUCB1cGRhdGUgaW50ZXJ2YWwgdG8KKy5JIGludGVydmFsCitzZWNvbmRzLiAgU3BlY2lmeWluZyBhbgorLkkgaW50ZXJ2YWwKK29mIDAgbWVhbnMgdG8gdXNlIHRoZSBkZWZhdWx0IGludGVydmFsLiAgVGhlIHNwZWNpZmllZCBpbnRlcnZhbCBtdXN0CitiZSBsZXNzIHRoYW4gMzAwIHNlY29uZHMuICBSZXF1aXJlcyB0aGF0IHRoZQorLkIgbW1wCitmZWF0dXJlIGJlIGVuYWJsZWQuCisuVFAKKy5CSSBzdHJpZGU9IHN0cmlkZS1zaXplCitDb25maWd1cmUgdGhlIGZpbGVzeXN0ZW0gZm9yIGEgUkFJRCBhcnJheSB3aXRoCisuSSBzdHJpZGUtc2l6ZQorZmlsZXN5c3RlbSBibG9ja3MuIFRoaXMgaXMgdGhlIG51bWJlciBvZiBibG9ja3MgcmVhZCBvciB3cml0dGVuIHRvIGRpc2sKK2JlZm9yZSBtb3ZpbmcgdG8gbmV4dCBkaXNrLiBUaGlzIG1vc3RseSBhZmZlY3RzIHBsYWNlbWVudCBvZiBmaWxlc3lzdGVtCittZXRhZGF0YSBsaWtlIGJpdG1hcHMgYXQKKy5CUiBta2UyZnMgKDIpCit0aW1lIHRvIGF2b2lkIHBsYWNpbmcgdGhlbSBvbiBhIHNpbmdsZSBkaXNrLCB3aGljaCBjYW4gaHVydCB0aGUgcGVyZm9ybWFuY2UuCitJdCBtYXkgYWxzbyBiZSB1c2VkIGJ5IGJsb2NrIGFsbG9jYXRvci4KKy5UUAorLkJJIHN0cmlwZV93aWR0aD0gc3RyaXBlLXdpZHRoCitDb25maWd1cmUgdGhlIGZpbGVzeXN0ZW0gZm9yIGEgUkFJRCBhcnJheSB3aXRoCisuSSBzdHJpcGUtd2lkdGgKK2ZpbGVzeXN0ZW0gYmxvY2tzIHBlciBzdHJpcGUuIFRoaXMgaXMgdHlwaWNhbGx5IGJlIHN0cmlkZS1zaXplICogTiwgd2hlcmUKK04gaXMgdGhlIG51bWJlciBvZiBkYXRhIGRpc2tzIGluIHRoZSBSQUlEIChlLmcuIFJBSUQgNSBOKzEsIFJBSUQgNiBOKzIpLgorVGhpcyBhbGxvd3MgdGhlIGJsb2NrIGFsbG9jYXRvciB0byBwcmV2ZW50IHJlYWQtbW9kaWZ5LXdyaXRlIG9mIHRoZQorcGFyaXR5IGluIGEgUkFJRCBzdHJpcGUgaWYgcG9zc2libGUgd2hlbiB0aGUgZGF0YSBpcyB3cml0dGVuLgorLlRQCisuQkkgaGFzaF9hbGc9IGhhc2gtYWxnCitTZXQgdGhlIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gdXNlZCBmb3IgZmlsZXN5c3RlbXMgd2l0aCBoYXNoZWQgYi10cmVlCitkaXJlY3Rvcmllcy4gIFZhbGlkIGFsZ29yaXRobXMgYWNjZXB0ZWQgYXJlOgorLklSIGxlZ2FjeSAsCisuSVIgaGFsZl9tZDQgLAorYW5kCisuSVIgdGVhIC4KKy5UUAorLkJJIG1vdW50X29wdHM9IG1vdW50X29wdGlvbl9zdHJpbmcKK1NldCBhIHNldCBvZiBkZWZhdWx0IG1vdW50IG9wdGlvbnMgd2hpY2ggd2lsbCBiZSB1c2VkIHdoZW4gdGhlIGZpbGUKK3N5c3RlbSBpcyBtb3VudGVkLiAgVW5saWtlIHRoZSBiaXRtYXNrLWJhc2VkIGRlZmF1bHQgbW91bnQgb3B0aW9ucyB3aGljaAorY2FuIGJlIHNwZWNpZmllZCB3aXRoIHRoZQorLkIgLW8KK29wdGlvbiwKKy5JIG1vdW50X29wdGlvbl9zdHJpbmcKK2lzIGFuIGFyYml0cmFyeSBzdHJpbmcgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIDYzIGJ5dGVzLCB3aGljaCBpcworc3RvcmVkIGluIHRoZSBzdXBlcmJsb2NrLgorLklQCitUaGUgZXh0NCBmaWxlIHN5c3RlbSBkcml2ZXIgd2lsbCBmaXJzdCBhcHBseQordGhlIGJpdG1hc2stYmFzZWQgZGVmYXVsdCBvcHRpb25zLCBhbmQgdGhlbiBwYXJzZSB0aGUKKy5JUiBtb3VudF9vcHRpb25fc3RyaW5nICwKK2JlZm9yZSBwYXJzaW5nIHRoZSBtb3VudCBvcHRpb25zIHBhc3NlZCBmcm9tIHRoZQorLkJSIG1vdW50ICg4KQorcHJvZ3JhbS4KKy5JUAorVGhpcyBzdXBlcmJsb2NrIHNldHRpbmcgaXMgb25seSBob25vcmVkIGluIDIuNi4zNSsga2VybmVsczsKK2FuZCBub3QgYXQgYWxsIGJ5IHRoZSBleHQyIGFuZCBleHQzIGZpbGUgc3lzdGVtIGRyaXZlcnMuCisuVFAKKy5CIHRlc3RfZnMKK1NldCBhIGZsYWcgaW4gdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jayBpbmRpY2F0aW5nIHRoYXQgaXQgbWF5IGJlCittb3VudGVkIHVzaW5nIGV4cGVyaW1lbnRhbCBrZXJuZWwgY29kZSwgc3VjaCBhcyB0aGUgZXh0NGRldiBmaWxlc3lzdGVtLgorLlRQCisuQiBedGVzdF9mcworQ2xlYXIgdGhlIHRlc3RfZnMgZmxhZywgaW5kaWNhdGluZyB0aGUgZmlsZXN5c3RlbSBzaG91bGQgb25seSBiZSBtb3VudGVkCit1c2luZyBwcm9kdWN0aW9uLWxldmVsIGZpbGVzeXN0ZW0gY29kZS4KKy5SRQorLlRQCisuQiBcLWYKK0ZvcmNlIHRoZSB0dW5lMmZzIG9wZXJhdGlvbiB0byBjb21wbGV0ZSBldmVuIGluIHRoZSBmYWNlIG9mIGVycm9ycy4gIFRoaXMgCitvcHRpb24gaXMgdXNlZnVsIHdoZW4gcmVtb3ZpbmcgdGhlIAorLkIgaGFzX2pvdXJuYWwKK2ZpbGVzeXN0ZW0gZmVhdHVyZSBmcm9tIGEgZmlsZXN5c3RlbSB3aGljaCBoYXMgCithbiBleHRlcm5hbCBqb3VybmFsIChvciBpcyBjb3JydXB0ZWQKK3N1Y2ggdGhhdCBpdCBhcHBlYXJzIHRvIGhhdmUgYW4gZXh0ZXJuYWwgam91cm5hbCksIGJ1dCB0aGF0IAorZXh0ZXJuYWwgam91cm5hbCBpcyBub3QgYXZhaWxhYmxlLiAgIElmIHRoZSBmaWxlc3lzdGVtIGFwcGVhcnMgdG8gcmVxdWlyZQoram91cm5hbCByZXBsYXksIHRoZQorLkIgXC1mCitmbGFnIG11c3QgYmUgc3BlY2lmaWVkIHR3aWNlIHRvIHByb2NlZWQuCisuc3AKKy5CIFdBUk5JTkc6CitSZW1vdmluZyBhbiBleHRlcm5hbCBqb3VybmFsIGZyb20gYSBmaWxlc3lzdGVtIHdoaWNoIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQKK3dpdGhvdXQgZmlyc3QgcmVwbGF5aW5nIHRoZSBleHRlcm5hbCBqb3VybmFsIGNhbiByZXN1bHQgaW4KK3NldmVyZSBkYXRhIGxvc3MgYW5kIGZpbGVzeXN0ZW0gY29ycnVwdGlvbi4KKy5UUAorLkJJIFwtZyAiIGdyb3VwIgorU2V0IHRoZSBncm91cCB3aGljaCBjYW4gdXNlIHRoZSByZXNlcnZlZCBmaWxlc3lzdGVtIGJsb2Nrcy4KK1RoZSAKKy5JIGdyb3VwCitwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtZXJpY2FsIGdpZCBvciBhIGdyb3VwIG5hbWUuICBJZiBhIGdyb3VwIG5hbWUgaXMgZ2l2ZW4sCitpdCBpcyBjb252ZXJ0ZWQgdG8gYSBudW1lcmljYWwgZ2lkIGJlZm9yZSBpdCBpcyBzdG9yZWQgaW4gdGhlIHN1cGVyYmxvY2suCisuVFAKKy5CIFwtaSAiIFxmSWludGVydmFsLWJldHdlZW4tY2hlY2tzXGZSW1xmQmRcZlJ8XGZCbVxmUnxcZkJ3XGZSXSIKK0FkanVzdCB0aGUgbWF4aW1hbCB0aW1lIGJldHdlZW4gdHdvIGZpbGVzeXN0ZW0gY2hlY2tzLiAKK05vIHN1ZmZpeCBvcgorLkIgZAord2lsbCBpbnRlcnByZXQgdGhlIG51bWJlcgorLkkgaW50ZXJ2YWwtYmV0d2Vlbi1jaGVja3MKK2FzIGRheXMsCisuQiBtCithcyBtb250aHMsIGFuZAorLkIgdworYXMgd2Vla3MuICBBIHZhbHVlIG9mIHplcm8gd2lsbCBkaXNhYmxlIHRoZSB0aW1lLWRlcGVuZGVudCBjaGVja2luZy4KKy5zcAorSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCBlaXRoZXIKKy5CIFwtYworKG1vdW50LWNvdW50LWRlcGVuZGVudCkgb3IKKy5CIFwtaQorKHRpbWUtZGVwZW5kZW50KSBjaGVja2luZyBiZSBlbmFibGVkIHRvIGZvcmNlIHBlcmlvZGljIGZ1bGwKKy5CUiBlMmZzY2sgKDgpCitjaGVja2luZyBvZiB0aGUgZmlsZXN5c3RlbS4gIEZhaWx1cmUgdG8gZG8gc28gbWF5IGxlYWQgdG8gZmlsZXN5c3RlbQorY29ycnVwdGlvbiAoZHVlIHRvIGJhZCBkaXNrcywgY2FibGVzLCBtZW1vcnksIG9yIGtlcm5lbCBidWdzKSBnb2luZwordW5ub3RpY2VkLCB1bHRpbWF0ZWx5IHJlc3VsdGluZyBpbiBkYXRhIGxvc3Mgb3IgY29ycnVwdGlvbi4KKy5UUAorLkIgXC1qCitBZGQgYW4gZXh0MyBqb3VybmFsIHRvIHRoZSBmaWxlc3lzdGVtLiAgSWYgdGhlIAorLkIgXC1KCitvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgam91cm5hbCBwYXJhbWV0ZXJzIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUKK2FuIGFwcHJvcHJpYXRlbHkgc2l6ZWQgam91cm5hbCAoZ2l2ZW4gdGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW0pIAorc3RvcmVkIHdpdGhpbiB0aGUgZmlsZXN5c3RlbS4gIE5vdGUgdGhhdCB5b3UgbXVzdCBiZSB1c2luZyBhIGtlcm5lbAord2hpY2ggaGFzIGV4dDMgc3VwcG9ydCBpbiBvcmRlciB0byBhY3R1YWxseSBtYWtlIHVzZSBvZiB0aGUgam91cm5hbC4KKy5JUAorSWYgdGhpcyBvcHRpb24gaXMgdXNlZCB0byBjcmVhdGUgYSBqb3VybmFsIG9uIGEgbW91bnRlZCBmaWxlc3lzdGVtLCBhbgoraW1tdXRhYmxlIGZpbGUsCisuQlIgLmpvdXJuYWwgLAord2lsbCBiZSBjcmVhdGVkIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBmaWxlc3lzdGVtLCBhcyBpdCBpcwordGhlIG9ubHkgc2FmZSB3YXkgdG8gY3JlYXRlIHRoZSBqb3VybmFsIGlub2RlIHdoaWxlIHRoZSBmaWxlc3lzdGVtIGlzCittb3VudGVkLiAgV2hpbGUgdGhlIGV4dDMgam91cm5hbCBpcyB2aXNpYmxlLCBpdCBpcyBub3Qgc2FmZSB0bworZGVsZXRlIGl0LCBvciBtb2RpZnkgaXQgd2hpbGUgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZDsgZm9yIHRoaXMKK3JlYXNvbiB0aGUgZmlsZSBpcyBtYXJrZWQgaW1tdXRhYmxlLgorV2hpbGUgY2hlY2tpbmcgdW5tb3VudGVkIGZpbGVzeXN0ZW1zLCAKKy5CUiBlMmZzY2sgKDgpCit3aWxsIGF1dG9tYXRpY2FsbHkgbW92ZSAKKy5CIC5qb3VybmFsCitmaWxlcyB0byB0aGUgaW52aXNpYmxlLCByZXNlcnZlZCBqb3VybmFsIGlub2RlLiAgRm9yIGFsbCBmaWxlc3lzdGVtcworZXhjZXB0IGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtLCAgdGhpcyBzaG91bGQgaGFwcGVuIGF1dG9tYXRpY2FsbHkgYW5kCituYXR1cmFsbHkgZHVyaW5nIHRoZSBuZXh0IHJlYm9vdCBjeWNsZS4gIFNpbmNlIHRoZSByb290IGZpbGVzeXN0ZW0gaXMKK21vdW50ZWQgcmVhZC1vbmx5LAorLkJSIGUyZnNjayAoOCkKK211c3QgYmUgcnVuIGZyb20gYSByZXNjdWUgZmxvcHB5IGluIG9yZGVyIHRvIGVmZmVjdCB0aGlzIHRyYW5zaXRpb24uCisuSVAKK09uIHNvbWUgZGlzdHJpYnV0aW9ucywgc3VjaCBhcyBEZWJpYW4sIGlmIGFuIGluaXRpYWwgcmFtZGlzayBpcyB1c2VkLAordGhlIGluaXRyZCBzY3JpcHRzIHdpbGwgYXV0b21hdGljYWxseSBjb252ZXJ0IGFuIGV4dDIgcm9vdCBmaWxlc3lzdGVtCit0byBleHQzIGlmIHRoZSAgCisuQlIgL2V0Yy9mc3RhYgorZmlsZSBzcGVjaWZpZXMgdGhlIGV4dDMgZmlsZXN5c3RlbSBmb3IgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbiBvcmRlciB0bworYXZvaWQgcmVxdWlyaW5nIHRoZSB1c2Ugb2YgYSByZXNjdWUgZmxvcHB5IHRvIGFkZCBhbiBleHQzIGpvdXJuYWwgdG8KK3RoZSByb290IGZpbGVzeXN0ZW0uCisuVFAKKy5CUiBcLUogIiBqb3VybmFsLW9wdGlvbnMiCitPdmVycmlkZSB0aGUgZGVmYXVsdCBleHQzIGpvdXJuYWwgcGFyYW1ldGVycy4gSm91cm5hbCBvcHRpb25zIGFyZSBjb21tYQorc2VwYXJhdGVkLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgdXNpbmcgdGhlIGVxdWFscyAoJz0nKSAgc2lnbi4KK1RoZSBmb2xsb3dpbmcgam91cm5hbCBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisuUlMgMS4yaQorLlRQCisuQkkgc2l6ZT0gam91cm5hbC1zaXplCitDcmVhdGUgYSBqb3VybmFsIHN0b3JlZCBpbiB0aGUgZmlsZXN5c3RlbSBvZiBzaXplCisuSSBqb3VybmFsLXNpemUKK21lZ2FieXRlcy4gICBUaGUgc2l6ZSBvZiB0aGUgam91cm5hbCBtdXN0IGJlIGF0IGxlYXN0IDEwMjQgZmlsZXN5c3RlbSBibG9ja3MKKyhpLmUuLCAxTUIgaWYgdXNpbmcgMWsgYmxvY2tzLCA0TUIgaWYgdXNpbmcgNGsgYmxvY2tzLCBldGMuKQorYW5kIG1heSBiZSBubyBtb3JlIHRoYW4gMTAyLDQwMCBmaWxlc3lzdGVtIGJsb2Nrcy4KK1RoZXJlIG11c3QgYmUgZW5vdWdoIGZyZWUgc3BhY2UgaW4gdGhlIGZpbGVzeXN0ZW0gdG8gY3JlYXRlIGEgam91cm5hbCBvZgordGhhdCBzaXplLgorLlRQCisuQkkgbG9jYXRpb24gPWpvdXJuYWwtbG9jYXRpb24KK1NwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBqb3VybmFsLiAgVGhlIGFyZ3VtZW50CisuSSBqb3VybmFsLWxvY2F0aW9uCitjYW4gZWl0aGVyIGJlIHNwZWNpZmllZCBhcyBhIGJsb2NrIG51bWJlciwgb3IgaWYgdGhlIG51bWJlciBoYXMgYSB1bml0cworc3VmZml4IChlLmcuLCAnTScsICdHJywgZXRjLikgaW50ZXJwcmV0IGl0IGFzIHRoZSBvZmZzZXQgZnJvbSB0aGUKK2JlZ2lubmluZyBvZiB0aGUgZmlsZSBzeXN0ZW0uCitASkRFVkAuVFAKK0BKREVWQC5CSSBkZXZpY2U9IGV4dGVybmFsLWpvdXJuYWwKK0BKREVWQEF0dGFjaCB0aGUgZmlsZXN5c3RlbSB0byB0aGUgam91cm5hbCBibG9jayBkZXZpY2UgbG9jYXRlZCBvbgorQEpERVZALklSIGV4dGVybmFsLWpvdXJuYWwgLgorQEpERVZAVGhlIGV4dGVybmFsIAorQEpERVZAam91cm5hbCBtdXN0IGhhdmUgYmVlbiBhbHJlYWR5IGNyZWF0ZWQgdXNpbmcgdGhlIGNvbW1hbmQKK0BKREVWQC5JUAorQEpERVZALkIgbWtlMmZzIC1PIGpvdXJuYWxfZGV2IAorQEpERVZALkkgZXh0ZXJuYWwtam91cm5hbAorQEpERVZALklQCitASkRFVkBOb3RlIHRoYXQKK0BKREVWQC5JIGV4dGVybmFsLWpvdXJuYWwKK0BKREVWQG11c3QgYmUgZm9ybWF0dGVkIHdpdGggdGhlIHNhbWUgYmxvY2sKK0BKREVWQHNpemUgYXMgZmlsZXN5c3RlbXMgd2hpY2ggd2lsbCBiZSB1c2luZyBpdC4KK0BKREVWQEluIGFkZGl0aW9uLCB3aGlsZSB0aGVyZSBpcyBzdXBwb3J0IGZvciBhdHRhY2hpbmcKK0BKREVWQG11bHRpcGxlIGZpbGVzeXN0ZW1zIHRvIGEgc2luZ2xlIGV4dGVybmFsIGpvdXJuYWwsCitASkRFVkB0aGUgTGludXgga2VybmVsIGFuZCAKK0BKREVWQC5CUiBlMmZzY2sgKDgpCitASkRFVkBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgc2hhcmVkIGV4dGVybmFsIGpvdXJuYWxzIHlldC4KK0BKREVWQC5JUAorQEpERVZASW5zdGVhZCBvZiBzcGVjaWZ5aW5nIGEgZGV2aWNlIG5hbWUgZGlyZWN0bHksCitASkRFVkAuSSBleHRlcm5hbC1qb3VybmFsCitASkRFVkBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgYnkgZWl0aGVyCitASkRFVkAuQkkgTEFCRUw9IGxhYmVsCitASkRFVkBvcgorQEpERVZALkJJIFVVSUQ9IFVVSUQKK0BKREVWQHRvIGxvY2F0ZSB0aGUgZXh0ZXJuYWwgam91cm5hbCBieSBlaXRoZXIgdGhlIHZvbHVtZSBsYWJlbCBvciBVVUlECitASkRFVkBzdG9yZWQgaW4gdGhlIGV4dDIgc3VwZXJibG9jayBhdCB0aGUgc3RhcnQgb2YgdGhlIGpvdXJuYWwuICBVc2UKK0BKREVWQC5CUiBkdW1wZTJmcyAoOCkKK0BKREVWQHRvIGRpc3BsYXkgYSBqb3VybmFsIGRldmljZSdzIHZvbHVtZSBsYWJlbCBhbmQgVVVJRC4gIFNlZSBhbHNvIHRoZQorQEpERVZALkIgLUwKK0BKREVWQG9wdGlvbiBvZgorQEpERVZALkJSIHR1bmUyZnMgKDgpLgorLlJFCitASkRFVkAuSVAKK0BKREVWQE9ubHkgb25lIG9mIHRoZQorQEpERVZALkJSIHNpemUgIiBvciAiIGRldmljZQorQEpERVZAb3B0aW9ucyBjYW4gYmUgZ2l2ZW4gZm9yIGEgZmlsZXN5c3RlbS4KKy5UUAorLkIgXC1sCitMaXN0IHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZXN5c3RlbSBzdXBlcmJsb2NrLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQKK3ZhbHVlcyBvZiB0aGUgcGFyYW1ldGVycyB0aGF0IGNhbiBiZSBzZXQgdmlhIHRoaXMgcHJvZ3JhbS4KKy5UUAorLkJJIFwtTCAiIHZvbHVtZS1sYWJlbCIKK1NldCB0aGUgdm9sdW1lIGxhYmVsIG9mIHRoZSBmaWxlc3lzdGVtLiAgCitFeHQyIGZpbGVzeXN0ZW0gbGFiZWxzIGNhbiBiZSBhdCBtb3N0IDE2IGNoYXJhY3RlcnMgbG9uZzsgaWYKKy5JIHZvbHVtZS1sYWJlbCAKK2lzIGxvbmdlciB0aGFuIDE2IGNoYXJhY3RlcnMsIAorLkIgdHVuZTJmcword2lsbCB0cnVuY2F0ZSBpdCBhbmQgcHJpbnQgYSB3YXJuaW5nLiAgVGhlIHZvbHVtZSBsYWJlbCBjYW4gYmUgdXNlZAorYnkKKy5CUiBtb3VudCAoOCksCisuQlIgZnNjayAoOCksCithbmQKKy5CUiAvZXRjL2ZzdGFiICg1KQorKGFuZCBwb3NzaWJseSBvdGhlcnMpIGJ5IHNwZWNpZnlpbmcKKy5CSSBMQUJFTD0gdm9sdW1lX2xhYmVsCitpbnN0ZWFkIG9mIGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UgbmFtZSBsaWtlCisuQlIgL2Rldi9oZGE1IC4KKy5UUAorLkJJIFwtbSAiIHJlc2VydmVkLWJsb2Nrcy1wZXJjZW50YWdlIgorU2V0IHRoZSBwZXJjZW50YWdlIG9mIHRoZSBmaWxlc3lzdGVtIHdoaWNoIG1heSBvbmx5IGJlIGFsbG9jYXRlZAorYnkgcHJpdmlsZWdlZCBwcm9jZXNzZXMuICAgUmVzZXJ2aW5nIHNvbWUgbnVtYmVyIG9mIGZpbGVzeXN0ZW0gYmxvY2tzIAorZm9yIHVzZSBieSBwcml2aWxlZ2VkIHByb2Nlc3NlcyBpcyBkb25lIAordG8gYXZvaWQgZmlsZXN5c3RlbSBmcmFnbWVudGF0aW9uLCBhbmQgdG8gYWxsb3cgc3lzdGVtCitkYWVtb25zLCBzdWNoIGFzIAorLkJSIHN5c2xvZ2QgKDgpLAordG8gY29udGludWUgdG8gZnVuY3Rpb24gY29ycmVjdGx5IGFmdGVyIG5vbi1wcml2aWxlZ2VkIHByb2Nlc3NlcyBhcmUgCitwcmV2ZW50ZWQgZnJvbSB3cml0aW5nIHRvIHRoZSBmaWxlc3lzdGVtLiAgTm9ybWFsbHksIHRoZSBkZWZhdWx0IHBlcmNlbnRhZ2UgCitvZiByZXNlcnZlZCBibG9ja3MgaXMgNSUuCisuVFAKKy5CSSBcLU0gIiBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5IgorU2V0IHRoZSBsYXN0LW1vdW50ZWQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZXN5c3RlbS4KKy5UUAorLkJSIFwtbyAiIFteXVxmSW1vdW50LW9wdGlvblxmUlssLi4uXSIKK1NldCBvciBjbGVhciB0aGUgaW5kaWNhdGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucyBpbiB0aGUgZmlsZXN5c3RlbS4KK0RlZmF1bHQgbW91bnQgb3B0aW9ucyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBtb3VudCBvcHRpb25zIHNwZWNpZmllZCAKK2VpdGhlciBpbiAKKy5CUiAvZXRjL2ZzdGFiICg1KQorb3Igb24gdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8KKy5CUiBtb3VudCAoOCkuICAgCitPbGRlciBrZXJuZWxzIG1heSBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmU7IGluIHBhcnRpY3VsYXIsCitrZXJuZWxzIHdoaWNoIHByZWRhdGUgMi40LjIwIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBpZ25vcmUgdGhlCitkZWZhdWx0IG1vdW50IG9wdGlvbnMgZmllbGQgaW4gdGhlIHN1cGVyYmxvY2suCisuSVAKK01vcmUgdGhhbiBvbmUgbW91bnQgb3B0aW9uIGNhbiBiZSBjbGVhcmVkIG9yIHNldCBieSBzZXBhcmF0aW5nCitmZWF0dXJlcyB3aXRoIGNvbW1hcy4gIE1vdW50IG9wdGlvbnMgcHJlZml4ZWQgd2l0aCBhIAorY2FyZXQgY2hhcmFjdGVyICgnXicpIHdpbGwgYmUgY2xlYXJlZCBpbiB0aGUgZmlsZXN5c3RlbSdzIHN1cGVyYmxvY2s7IAorbW91bnQgb3B0aW9ucyB3aXRob3V0IGEgcHJlZml4IGNoYXJhY3RlciBvciBwcmVmaXhlZCB3aXRoIGEgcGx1cyAKK2NoYXJhY3RlciAoJysnKSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBmaWxlc3lzdGVtLgorLklQCitUaGUgZm9sbG93aW5nIG1vdW50IG9wdGlvbnMgY2FuIGJlIHNldCBvciBjbGVhcmVkIHVzaW5nCisuQlIgdHVuZTJmcyA6CisuUlMgMS4yaQorLlRQCisuQiBkZWJ1ZworRW5hYmxlIGRlYnVnZ2luZyBjb2RlIGZvciB0aGlzIGZpbGVzeXN0ZW0uCisuVFAKKy5CIGJzZGdyb3VwcworRW11bGF0ZSBCU0QgYmVoYXZpb3Igd2hlbiBjcmVhdGluZyBuZXcgZmlsZXM6IHRoZXkgd2lsbCB0YWtlIHRoZSBncm91cC1pZAorb2YgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGV5IHdlcmUgY3JlYXRlZC4gIFRoZSBzdGFuZGFyZCBTeXN0ZW0gViBiZWhhdmlvcgoraXMgdGhlIGRlZmF1bHQsIHdoZXJlIG5ld2x5IGNyZWF0ZWQgZmlsZXMgdGFrZSBvbiB0aGUgZnNnaWQgb2YgdGhlIGN1cnJlbnQKK3Byb2Nlc3MsIHVubGVzcyB0aGUgZGlyZWN0b3J5IGhhcyB0aGUgc2V0Z2lkIGJpdCBzZXQsIGluIHdoaWNoIGNhc2UgaXQgdGFrZXMgCit0aGUgZ2lkIGZyb20gdGhlIHBhcmVudCBkaXJlY3RvcnksIGFuZCBhbHNvIGdldHMgdGhlIHNldGdpZCBiaXQgc2V0IGlmIGl0IGlzIAorYSBkaXJlY3RvcnkgaXRzZWxmLgorLlRQCisuQiB1c2VyX3hhdHRyCitFbmFibGUgdXNlci1zcGVjaWZpZWQgZXh0ZW5kZWQgYXR0cmlidXRlcy4KKy5UUAorLkIgYWNsCitFbmFibGUgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMuCisuVFAKKy5CIHVpZDE2CitEaXNhYmxlcyAzMi1iaXQgVUlEcyBhbmQgR0lEcy4gIFRoaXMgaXMgZm9yIGludGVyb3BlcmFiaWxpdHkgd2l0aAorb2xkZXIga2VybmVscyB3aGljaCBvbmx5IHN0b3JlIGFuZCBleHBlY3QgMTYtYml0IHZhbHVlcy4KKy5UUAorLkIgam91cm5hbF9kYXRhCitXaGVuIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgd2l0aCBqb3VybmFsbGluZyBlbmFibGVkLCBhbGwgZGF0YQorKG5vdCBqdXN0IG1ldGFkYXRhKSBpcyBjb21taXR0ZWQgaW50byB0aGUgam91cm5hbCBwcmlvciB0byBiZWluZyB3cml0dGVuCitpbnRvIHRoZSBtYWluIGZpbGVzeXN0ZW0uCisuVFAKKy5CIGpvdXJuYWxfZGF0YV9vcmRlcmVkCitXaGVuIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgd2l0aCBqb3VybmFsbGluZyBlbmFibGVkLCBhbGwgZGF0YSBpcyBmb3JjZWQKK2RpcmVjdGx5IG91dCB0byB0aGUgbWFpbiBmaWxlIHN5c3RlbSBwcmlvciB0byBpdHMgbWV0YWRhdGEgYmVpbmcgY29tbWl0dGVkIAordG8gdGhlIGpvdXJuYWwuCisuVFAKKy5CIGpvdXJuYWxfZGF0YV93cml0ZWJhY2sKK1doZW4gdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCB3aXRoIGpvdXJuYWxsaW5nIGVuYWJsZWQsIGRhdGEgbWF5IGJlCit3cml0dGVuIGludG8gdGhlIG1haW4gZmlsZXN5c3RlbSBhZnRlciBpdHMgbWV0YWRhdGEgaGFzIGJlZW4gY29tbWl0dGVkCit0byB0aGUgam91cm5hbC4gIFRoaXMgbWF5IGluY3JlYXNlIHRocm91Z2hwdXQsIGhvd2V2ZXIsIGl0IG1heSBhbGxvdyBvbGQKK2RhdGEgdG8gYXBwZWFyIGluIGZpbGVzIGFmdGVyIGEgY3Jhc2ggYW5kIGpvdXJuYWwgcmVjb3ZlcnkuCisuVFAKKy5CIG5vYmFycmllcgorVGhlIGZpbGUgc3lzdGVtIHdpbGwgYmUgbW91bnRlZCB3aXRoIGJhcnJpZXIgb3BlcmF0aW9ucyBpbiB0aGUgam91cm5hbAorZGlzYWJsZWQuICAoVGhpcyBvcHRpb24gaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBleHQ0IGZpbGUKK3N5c3RlbSBkcml2ZXIgaW4gMi42LjM1KyBrZXJuZWxzLikKKy5UUAorLkIgYmxvY2tfdmFsaWRpdHkKK1RoZSBmaWxlIHN5c3RlbSB3aWxsIGJlIG1vdW50ZWQgd2l0aCB0aGUgYmxvY2tfdmFsaWRpdHkgb3B0aW9uIGVuYWJsZWQsCit3aGljaCBjYXVzZXMgZXh0cmEgY2hlY2tzIHRvIGJlIHBlcmZvcm1lZCBhZnRlciByZWFkaW5nIG9yIHdyaXRpbmcgZnJvbQordGhlIGZpbGUgc3lzdGVtLiAgVGhpcyBwcmV2ZW50cyBjb3JydXB0ZWQgbWV0YWRhdGEgYmxvY2tzIGZyb20gY2F1c2luZworZmlsZSBzeXN0ZW0gZGFtYWdlIGJ5IG92ZXJ3cml0aW5nIHBhcnRzIG9mIHRoZSBpbm9kZSB0YWJsZSBvciBibG9jaworZ3JvdXAgZGVzY3JpcHRvcnMuICBUaGlzIGNvbWVzIGF0IHRoZSBjb3N0IG9mIGluY3JlYXNlZCBtZW1vcnkgYW5kIENQVQorb3ZlcmhlYWQsIHNvIGl0IGlzIGVuYWJsZWQgb25seSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiAgKFRoaXMgb3B0aW9uIGlzCitjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgYnkgdGhlIGV4dDQgZmlsZSBzeXN0ZW0gZHJpdmVyIGluIDIuNi4zNSsKK2tlcm5lbHMuKQorLlRQCisuQiBkaXNjYXJkCitUaGUgZmlsZSBzeXN0ZW0gd2lsbCBiZSBtb3VudGVkIHdpdGggdGhlIGRpc2NhcmQgbW91bnQgb3B0aW9uLiAgVGhpcyB3aWxsCitjYXVzZSB0aGUgZmlsZSBzeXN0ZW0gZHJpdmVyIHRvIGF0dGVtcHQgdG8gdXNlIHRoZSB0cmltL2Rpc2NhcmQgZmVhdHVyZQorb2Ygc29tZSBzdG9yYWdlIGRldmljZXMgKHN1Y2ggYXMgU1NEJ3MgYW5kIHRoaW4tcHJvdmlzaW9uZWQgZHJpdmVzCithdmFpbGFibGUgaW4gc29tZSBlbnRlcnByaXNlIHN0b3JhZ2UgYXJyYXlzKSB0byBpbmZvcm0gdGhlIHN0b3JhZ2UKK2RldmljZSB0aGF0IGJsb2NrcyBiZWxvbmdpbmcgdG8gZGVsZXRlZCBmaWxlcyBjYW4gYmUgcmV1c2VkIGZvciBvdGhlcgorcHVycG9zZXMuICAoVGhpcyBvcHRpb24gaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBleHQ0IGZpbGUKK3N5c3RlbSBkcml2ZXIgaW4gMi42LjM1KyBrZXJuZWxzLikKKy5UUAorLkIgbm9kZWxhbGxvYworVGhlIGZpbGUgc3lzdGVtIHdpbGwgYmUgbW91bnRlZCB3aXRoIHRoZSBub2RlbGFsbG9jIG1vdW50IG9wdGlvbi4gIFRoaXMKK3dpbGwgZGlzYWJsZSB0aGUgZGVsYXllZCBhbGxvY2F0aW9uIGZlYXR1cmUuICAoVGhpcyBvcHRpb24gaXMgY3VycmVudGx5Citvbmx5IHN1cHBvcnRlZCBieSB0aGUgZXh0NCBmaWxlIHN5c3RlbSBkcml2ZXIgaW4gMi42LjM1KyBrZXJuZWxzLikKKy5SRQorLlRQCisuQlIgXC1PICIgW15dXGZJZmVhdHVyZVxmUlssLi4uXSIKK1NldCBvciBjbGVhciB0aGUgaW5kaWNhdGVkIGZpbGVzeXN0ZW0gZmVhdHVyZXMgKG9wdGlvbnMpIGluIHRoZSBmaWxlc3lzdGVtLgorTW9yZSB0aGFuIG9uZSBmaWxlc3lzdGVtIGZlYXR1cmUgY2FuIGJlIGNsZWFyZWQgb3Igc2V0IGJ5IHNlcGFyYXRpbmcKK2ZlYXR1cmVzIHdpdGggY29tbWFzLiAgRmlsZXN5c3RlbSBmZWF0dXJlcyBwcmVmaXhlZCB3aXRoIGEgCitjYXJldCBjaGFyYWN0ZXIgKCdeJykgd2lsbCBiZSBjbGVhcmVkIGluIHRoZSBmaWxlc3lzdGVtJ3Mgc3VwZXJibG9jazsgCitmaWxlc3lzdGVtIGZlYXR1cmVzIHdpdGhvdXQgYSBwcmVmaXggY2hhcmFjdGVyIG9yIHByZWZpeGVkIHdpdGggYSBwbHVzIAorY2hhcmFjdGVyICgnKycpIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGZpbGVzeXN0ZW0uICBGb3IgYSBkZXRhaWxlZAorZGVzY3JpcHRpb24gb2YgdGhlIGZpbGUgc3lzdGVtIGZlYXR1cmVzLCBwbGVhc2Ugc2VlIHRoZSBtYW4gcGFnZQorLkJSIGV4dDQgKDUpLgorLklQCitUaGUgZm9sbG93aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZXMgY2FuIGJlIHNldCBvciBjbGVhcmVkIHVzaW5nCisuQlIgdHVuZTJmcyA6CisuUlMgMS4yaQorLlRQCisuQiBkaXJfaW5kZXgKK1VzZSBoYXNoZWQgYi10cmVlcyB0byBzcGVlZCB1cCBsb29rdXBzIGZvciBsYXJnZSBkaXJlY3Rvcmllcy4KKy5UUAorLkIgZGlyX25saW5rCitBbGxvdyBtb3JlIHRoYW4gNjUwMDAgc3ViZGlyZWN0b3JpZXMgcGVyIGRpcmVjdG9yeS4KKy5UUAorLkIgZXh0ZW50CitFbmFibGUgdGhlIHVzZSBvZiBleHRlbnQgdHJlZXMgdG8gc3RvcmUgdGhlIGxvY2F0aW9uIG9mIGRhdGEgYmxvY2tzIGluIGlub2Rlcy4KKy5UUAorLkIgZXh0cmFfaXNpemUKK0VuYWJsZSB0aGUgZXh0ZW5kZWQgaW5vZGUgZmllbGRzIHVzZWQgYnkgZXh0NC4KKy5UUAorLkIgZmlsZXR5cGUKK1N0b3JlIGZpbGUgdHlwZSBpbmZvcm1hdGlvbiBpbiBkaXJlY3RvcnkgZW50cmllcy4KKy5UUAorLkIgZmxleF9iZworQWxsb3cgYml0bWFwcyBhbmQgaW5vZGUgdGFibGVzIGZvciBhIGJsb2NrIGdyb3VwIHRvIGJlIHBsYWNlZAorYW55d2hlcmUgb24gdGhlIHN0b3JhZ2UgbWVkaWEuICBcZkJUdW5lMmZzXGZSIHdpbGwgbm90IHJlb3JnYW5pemUKK3RoZSBsb2NhdGlvbiBvZiB0aGUgaW5vZGUgdGFibGVzIGFuZCBhbGxvY2F0aW9uIGJpdG1hcHMsIGFzCisuQlIgbWtlMmZzICg4KQord2lsbCBkbyB3aGVuIGl0IGNyZWF0ZXMgYSBmcmVzaGx5IGZvcm1hdHRlZCBmaWxlIHN5c3RlbSB3aXRoCisuQiBmbGV4X2JnCitlbmFibGVkLgorLlRQCisuQiBoYXNfam91cm5hbAorVXNlIGEgam91cm5hbCB0byBlbnN1cmUgZmlsZXN5c3RlbSBjb25zaXN0ZW5jeSBldmVuIGFjcm9zcyB1bmNsZWFuIHNodXRkb3ducy4KK1NldHRpbmcgdGhlIGZpbGVzeXN0ZW0gZmVhdHVyZSBpcyBlcXVpdmFsZW50IHRvIHVzaW5nIHRoZSAKKy5CIFwtagorb3B0aW9uLgorLlRQCisuQiBodWdlX2ZpbGUKK1N1cHBvcnQgZmlsZXMgbGFyZ2VyIHRoYW4gMiB0ZXJhYnl0ZXMgaW4gc2l6ZS4KKy5UUAorLkIgbGFyZ2VfZmlsZQorRmlsZXN5c3RlbSBjYW4gY29udGFpbiBmaWxlcyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gMkdCLgorLlRQCisuQiByZXNpemVfaW5vZGUKK1Jlc2VydmUgc3BhY2Ugc28gdGhlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgdGFibGUgbWF5IGdyb3cgaW4gdGhlCitmdXR1cmUuCisuQiBUdW5lMmZzIAorb25seSBzdXBwb3J0cyBjbGVhcmluZyB0aGlzIGZpbGVzeXN0ZW0gZmVhdHVyZS4KKy5UUAorLkIgbW1wCitFbmFibGUgb3IgZGlzYWJsZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIChNTVApIGZlYXR1cmUuCitAUVVPVEFfTUFOX0NPTU1FTlRALlRQCitAUVVPVEFfTUFOX0NPTU1FTlRALkIgcXVvdGEKK0BRVU9UQV9NQU5fQ09NTUVOVEBFbmFibGUgaW50ZXJuYWwgZmlsZSBzeXN0ZW0gcXVvdGEgaW5vZGVzLgorLlRQCisuQiBzcGFyc2Vfc3VwZXIKK0xpbWl0IHRoZSBudW1iZXIgb2YgYmFja3VwIHN1cGVyYmxvY2tzIHRvIHNhdmUgc3BhY2Ugb24gbGFyZ2UgZmlsZXN5c3RlbXMuCisuVFAKKy5CIHVuaW5pdF9iZworQWxsb3cgdGhlIGtlcm5lbCB0byBpbml0aWFsaXplIGJpdG1hcHMgYW5kIGlub2RlIHRhYmxlcyBsYXppbHksIGFuZCB0bwora2VlcCBhIGhpZ2ggd2F0ZXJtYXJrIGZvciB0aGUgdW51c2VkIGlub2RlcyBpbiBhIGZpbGVzeXN0ZW0sIHRvIHJlZHVjZQorLkJSIGUyZnNjayAoOCkKK3RpbWUuICBUaGlzIGZpcnN0IGUyZnNjayBydW4gYWZ0ZXIgZW5hYmxpbmcgdGhpcyBmZWF0dXJlIHdpbGwgdGFrZSB0aGUKK2Z1bGwgdGltZSwgYnV0IHN1YnNlcXVlbnQgZTJmc2NrIHJ1bnMgd2lsbCB0YWtlIG9ubHkgYSBmcmFjdGlvbiBvZiB0aGUKK29yaWdpbmFsIHRpbWUsIGRlcGVuZGluZyBvbiBob3cgZnVsbCB0aGUgZmlsZSBzeXN0ZW0gaXMuCisuUkUKKy5JUAorQWZ0ZXIgc2V0dGluZyBvciBjbGVhcmluZyAKKy5CUiBzcGFyc2Vfc3VwZXIgLAorLkJSIHVuaW5pdF9iZyAsCisuQlIgZmlsZXR5cGUgLAorb3IKKy5CIHJlc2l6ZV9pbm9kZQorZmlsZXN5c3RlbSBmZWF0dXJlcywKKy5CUiBlMmZzY2sgKDgpCittdXN0IGJlIHJ1biBvbiB0aGUgZmlsZXN5c3RlbSB0byByZXR1cm4gdGhlIGZpbGVzeXN0ZW0gdG8gYSBjb25zaXN0ZW50IHN0YXRlLgorLkIgVHVuZTJmcword2lsbCBwcmludCBhIG1lc3NhZ2UgcmVxdWVzdGluZyB0aGF0IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4KKy5CUiBlMmZzY2sgKDgpCitpZiBuZWNlc3NhcnkuICBBZnRlciBzZXR0aW5nIHRoZSAKKy5CIGRpcl9pbmRleAorZmVhdHVyZSwgCisuQiBlMmZzY2sgLUQKK2NhbiBiZSBydW4gdG8gY29udmVydCBleGlzdGluZyBkaXJlY3RvcmllcyB0byB0aGUgaGFzaGVkIEItdHJlZSBmb3JtYXQuCitFbmFibGluZyBjZXJ0YWluIGZpbGVzeXN0ZW0gZmVhdHVyZXMgbWF5IHByZXZlbnQgdGhlIGZpbGVzeXN0ZW0gZnJvbSBiZWluZworbW91bnRlZCBieSBrZXJuZWxzIHdoaWNoIGRvIG5vdCBzdXBwb3J0IHRob3NlIGZlYXR1cmVzLiAgSW4gcGFydGljdWxhciwgdGhlCisuQlIgdW5pbml0X2JnCithbmQKKy5CUiBmbGV4X2JnCitmZWF0dXJlcyBhcmUgb25seSBzdXBwb3J0ZWQgYnkgdGhlIGV4dDQgZmlsZXN5c3RlbS4KKy5UUAorLkJJIFwtcCAiIG1tcF9jaGVja19pbnRlcnZhbCIKK1NldCB0aGUgZGVzaXJlZCBNTVAgY2hlY2sgaW50ZXJ2YWwgaW4gc2Vjb25kcy4gSXQgaXMgNSBzZWNvbmRzIGJ5IGRlZmF1bHQuCisuVFAKKy5CSSBcLXIgIiByZXNlcnZlZC1ibG9ja3MtY291bnQiCitTZXQgdGhlIG51bWJlciBvZiByZXNlcnZlZCBmaWxlc3lzdGVtIGJsb2Nrcy4KKy5UUAorLkJJIFwtUSAiIHF1b3RhLW9wdGlvbnMiCitTZXRzICdxdW90YScgZmVhdHVyZSBvbiB0aGUgc3VwZXJibG9jayBhbmQgd29ya3Mgb24gdGhlIHF1b3RhIGZpbGVzIGZvciB0aGUKK2dpdmVuIHF1b3RhIHR5cGUuIFF1b3RhIG9wdGlvbnMgY291bGQgYmUgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZzoKKy5SUyAxLjJpCisuVFAKKy5CUiBbXl11c3JxdW90YQorU2V0cy9jbGVhcnMgdXNlciBxdW90YSBpbm9kZSBpbiB0aGUgc3VwZXJibG9jay4KKy5UUAorLkJSIFteXWdycHF1b3RhCitTZXRzL2NsZWFycyBncm91cCBxdW90YSBpbm9kZSBpbiB0aGUgc3VwZXJibG9jay4KKy5SRQorLlRQCisuQkkgXC1UICIgdGltZS1sYXN0LWNoZWNrZWQiCitTZXQgdGhlIHRpbWUgdGhlIGZpbGVzeXN0ZW0gd2FzIGxhc3QgY2hlY2tlZCB1c2luZworLkJSICBlMmZzY2sgLgorVGhlIHRpbWUgaXMgaW50ZXJwcmV0ZWQgdXNpbmcgdGhlIGN1cnJlbnQgKGxvY2FsKSB0aW1lem9uZS4KK1RoaXMgY2FuIGJlIHVzZWZ1bCBpbiBzY3JpcHRzIHdoaWNoIHVzZSBhIExvZ2ljYWwgVm9sdW1lIE1hbmFnZXIgdG8gbWFrZQorYSBjb25zaXN0ZW50IHNuYXBzaG90IG9mIGEgZmlsZXN5c3RlbSwgYW5kIHRoZW4gY2hlY2sgdGhlIGZpbGVzeXN0ZW0gCitkdXJpbmcgb2ZmIGhvdXJzIHRvIG1ha2Ugc3VyZSBpdCBoYXNuJ3QgYmVlbiBjb3JydXB0ZWQgZHVlIHRvIAoraGFyZHdhcmUgcHJvYmxlbXMsIGV0Yy4gIElmIHRoZSBmaWxlc3lzdGVtIHdhcyBjbGVhbiwgdGhlbiB0aGlzIG9wdGlvbiBjYW4gCitiZSB1c2VkIHRvIHNldCB0aGUgbGFzdCBjaGVja2VkIHRpbWUgb24gdGhlIG9yaWdpbmFsIGZpbGVzeXN0ZW0uICBUaGUgZm9ybWF0IAorb2YgCisuSSB0aW1lLWxhc3QtY2hlY2tlZAoraXMgdGhlIGludGVybmF0aW9uYWwgZGF0ZSBmb3JtYXQsIHdpdGggYW4gb3B0aW9uYWwgdGltZSBzcGVjaWZpZXIsIGkuZS4KK1lZWVlNTUREW0hIW01NW1NTXV1dLiAgIFRoZSBrZXl3b3JkIAorLkIgbm93CitpcyBhbHNvIGFjY2VwdGVkLCBpbiB3aGljaCBjYXNlIHRoZSBsYXN0IGNoZWNrZWQgdGltZSB3aWxsIGJlIHNldCB0byB0aGUgCitjdXJyZW50IHRpbWUuCisuVFAKKy5CSSBcLXUgIiB1c2VyIgorU2V0IHRoZSB1c2VyIHdobyBjYW4gdXNlIHRoZSByZXNlcnZlZCBmaWxlc3lzdGVtIGJsb2Nrcy4KKy5JIHVzZXIKK2NhbiBiZSBhIG51bWVyaWNhbCB1aWQgb3IgYSB1c2VyIG5hbWUuICBJZiBhIHVzZXIgbmFtZSBpcyBnaXZlbiwgaXQgCitpcyBjb252ZXJ0ZWQgdG8gYSBudW1lcmljYWwgdWlkIGJlZm9yZSBpdCBpcyBzdG9yZWQgaW4gdGhlIHN1cGVyYmxvY2suCisuVFAKKy5CSSBcLVUgIiBVVUlEIgorU2V0IHRoZSB1bml2ZXJzYWxseSB1bmlxdWUgaWRlbnRpZmllciAoVVVJRCkgb2YgdGhlIGZpbGVzeXN0ZW0gdG8KKy5JUiBVVUlEIC4KK1RoZSBmb3JtYXQgb2YgdGhlIFVVSUQgaXMgYSBzZXJpZXMgb2YgaGV4IGRpZ2l0cyBzZXBhcmF0ZWQgYnkgaHlwaGVucywgCitsaWtlIHRoaXM6IAorImMxYjlkNWEyLWYxNjItMTFjZi05ZWNlLTAwMjBhZmM3NmYxNiIuICAKK1RoZSAKKy5JIFVVSUQKK3BhcmFtZXRlciBtYXkgYWxzbyBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5SUyAxLjJpCisuVFAKKy5JIGNsZWFyCitjbGVhciB0aGUgZmlsZXN5c3RlbSBVVUlECisuVFAKKy5JIHJhbmRvbQorZ2VuZXJhdGUgYSBuZXcgcmFuZG9tbHktZ2VuZXJhdGVkIFVVSUQKKy5UUAorLkkgdGltZQorZ2VuZXJhdGUgYSBuZXcgdGltZS1iYXNlZCBVVUlECisuUkUKKy5JUAorVGhlIFVVSUQgbWF5IGJlIHVzZWQgYnkKKy5CUiBtb3VudCAoOCksCisuQlIgZnNjayAoOCksCithbmQKKy5CUiAvZXRjL2ZzdGFiICg1KQorKGFuZCBwb3NzaWJseSBvdGhlcnMpIGJ5IHNwZWNpZnlpbmcKKy5CSSBVVUlEPSB1dWlkCitpbnN0ZWFkIG9mIGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UgbmFtZSBsaWtlCisuQlIgL2Rldi9oZGExIC4KKy5JUAorU2VlCisuQlIgdXVpZGdlbiAoOCkKK2ZvciBtb3JlIGluZm9ybWF0aW9uLgorSWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBoYXZlIGEgZ29vZCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBzdWNoIGFzCisuSSAvZGV2L3JhbmRvbQorb3IKKy5JUiAvZGV2L3VyYW5kb20gLAorLkIgdHVuZTJmcword2lsbCBhdXRvbWF0aWNhbGx5IHVzZSBhIHRpbWUtYmFzZWQgVVVJRCBpbnN0ZWFkIG9mIGEgcmFuZG9tbHktZ2VuZXJhdGVkIFVVSUQuCisuU0ggQlVHUworV2UgaGF2ZW4ndCBmb3VuZCBhbnkgYnVncyB5ZXQuICBUaGF0IGRvZXNuJ3QgbWVhbiB0aGVyZSBhcmVuJ3QgYW55Li4uCisuU0ggQVVUSE9SCisuQiB0dW5lMmZzIAord2FzIHdyaXR0ZW4gYnkgUmVteSBDYXJkIDxSZW15LkNhcmRAbGludXgub3JnPi4gIEl0IGlzIGN1cnJlbnRseSBiZWluZworbWFpbnRhaW5lZCBieSBUaGVvZG9yZSBUcydvIDx0eXRzb0BhbHVtLm1pdC5lZHU+LgorLkIgdHVuZTJmcwordXNlcyB0aGUgZXh0MmZzIGxpYnJhcnkgd3JpdHRlbiBieSBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1Pi4KK1RoaXMgbWFudWFsIHBhZ2Ugd2FzIHdyaXR0ZW4gYnkgQ2hyaXN0aWFuIEt1aHR6IDxjaGtAZGF0YS1oaC5IYW5zZS5ERT4uCitUaW1lLWRlcGVuZGVudCBjaGVja2luZyB3YXMgYWRkZWQgYnkgVXdlIE9oc2UgPHV3ZUB0aXJrYS5ndW4uZGU+LgorLlNIIEFWQUlMQUJJTElUWQorLkIgdHVuZTJmcworaXMgcGFydCBvZiB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgYW5kIGlzIGF2YWlsYWJsZSBmcm9tIAoraHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQuCisuU0ggU0VFIEFMU08KKy5CUiBkZWJ1Z2ZzICg4KSwKKy5CUiBkdW1wZTJmcyAoOCksCisuQlIgZTJmc2NrICg4KSwKKy5CUiBta2UyZnMgKDgpLAorLkJSIGV4dDQgKDUpCmRpZmYgLS1naXQgYS9taXNjL3R1bmUyZnMuYyBiL21pc2MvdHVuZTJmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMDc4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL3R1bmUyZnMuYwpAQCAtMCwwICsxLDI0MTkgQEAKKy8qCisgKiB0dW5lMmZzLmMgLSBDaGFuZ2UgdGhlIGZpbGUgc3lzdGVtIHBhcmFtZXRlcnMgb24gYW4gZXh0MiBmaWxlIHN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiBDb3B5cmlnaHQgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqIEhpc3Rvcnk6CisgKiA5My8wNi8wMQktIENyZWF0aW9uCisgKiA5My8xMC8zMQktIEFkZGVkIHRoZSAtYyBvcHRpb24gdG8gY2hhbmdlIHRoZSBtYXhpbWFsIG1vdW50IGNvdW50cworICogOTMvMTIvMTQJLSBBZGRlZCAtbCBmbGFnIHRvIGxpc3QgY29udGVudHMgb2Ygc3VwZXJibG9jaworICogICAgICAgICAgICAgICAgTS5KLkUuIE1vbCAobWFyY2VsQGR1dGVjYS5ldC50dWRlbGZ0Lm5sKQorICogICAgICAgICAgICAgICAgRi5XLiB0ZW4gV29sZGUgKGZyYW5reUBkdXRlY2EuZXQudHVkZWxmdC5ubCkKKyAqIDkzLzEyLzI5CS0gQWRkZWQgdGhlIC1lIG9wdGlvbiB0byBjaGFuZ2UgZXJyb3JzIGJlaGF2aW9yCisgKiA5NC8wMi8yNwktIFBvcnRlZCB0byB1c2UgdGhlIGV4dDJmcyBsaWJyYXJ5CisgKiA5NC8wMy8wNgktIEFkZGVkIHRoZSBjaGVja3MgaW50ZXJ2YWwgZnJvbSBVd2UgT2hzZSAodXdlQHRpcmthLmd1bi5kZSkKKyAqLworCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNjAwIC8qIGZvciBpbmNsdXNpb24gb2Ygc3RycHRpbWUoKSAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Z3JwLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CS8qIGZvciBzdHJjYXNlY21wKCkgKi8KKyNlbHNlCisjZGVmaW5lIF9CU0RfU09VUkNFCS8qIGZvciBpbmNsdXNpb24gb2Ygc3RyY2FzZWNtcCgpIHZpYSA8c3RyaW5nLmg+ICovCisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bGliZ2VuLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKyNpbmNsdWRlICJldC9jb21fZXJyLmgiCisjaW5jbHVkZSAidXVpZC91dWlkLmgiCisjaW5jbHVkZSAiZTJwL2UycC5oIgorI2luY2x1ZGUgImpmc191c2VyLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImJsa2lkL2Jsa2lkLmgiCisjaW5jbHVkZSAicXVvdGEvcXVvdGFpby5oIgorCisjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKworI2RlZmluZSBRT1BUX0VOQUJMRQkoMSkKKyNkZWZpbmUgUU9QVF9ESVNBQkxFCSgtMSkKKworZXh0ZXJuIGludCBhc2tfeW4oY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZGVmKTsKKworY29uc3QgY2hhciAqcHJvZ3JhbV9uYW1lID0gInR1bmUyZnMiOworY2hhciAqZGV2aWNlX25hbWU7CitjaGFyICpuZXdfbGFiZWwsICpuZXdfbGFzdF9tb3VudGVkLCAqbmV3X1VVSUQ7CitjaGFyICppb19vcHRpb25zOworc3RhdGljIGludCBjX2ZsYWcsIENfZmxhZywgZV9mbGFnLCBmX2ZsYWcsIGdfZmxhZywgaV9mbGFnLCBsX2ZsYWcsIExfZmxhZzsKK3N0YXRpYyBpbnQgbV9mbGFnLCBNX2ZsYWcsIFFfZmxhZywgcl9mbGFnLCBzX2ZsYWcgPSAtMSwgdV9mbGFnLCBVX2ZsYWcsIFRfZmxhZzsKK3N0YXRpYyBpbnQgSV9mbGFnOworc3RhdGljIGludCBjbGVhcl9tbXA7CitzdGF0aWMgdGltZV90IGxhc3RfY2hlY2tfdGltZTsKK3N0YXRpYyBpbnQgcHJpbnRfbGFiZWw7CitzdGF0aWMgaW50IG1heF9tb3VudF9jb3VudCwgbW91bnRfY291bnQsIG1vdW50X2ZsYWdzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWw7CitzdGF0aWMgYmxrNjRfdCByZXNlcnZlZF9ibG9ja3M7CitzdGF0aWMgZG91YmxlIHJlc2VydmVkX3JhdGlvOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZ2lkLCByZXN1aWQ7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXJyb3JzOworc3RhdGljIGludCBvcGVuX2ZsYWc7CitzdGF0aWMgY2hhciAqZmVhdHVyZXNfY21kOworc3RhdGljIGNoYXIgKm1udG9wdHNfY21kOworc3RhdGljIGludCBzdHJpZGUsIHN0cmlwZV93aWR0aDsKK3N0YXRpYyBpbnQgc3RyaWRlX3NldCwgc3RyaXBlX3dpZHRoX3NldDsKK3N0YXRpYyBjaGFyICpleHRlbmRlZF9jbWQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZXdfaW5vZGVfc2l6ZTsKK3N0YXRpYyBjaGFyICpleHRfbW91bnRfb3B0czsKK3N0YXRpYyBpbnQgdXNycXVvdGEsIGdycHF1b3RhOworCitpbnQgam91cm5hbF9zaXplLCBqb3VybmFsX2ZsYWdzOworY2hhciAqam91cm5hbF9kZXZpY2U7CitzdGF0aWMgYmxrNjRfdCBqb3VybmFsX2xvY2F0aW9uID0gfjBMTDsKKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgYmxrX21vdmVfbGlzdDsKKworc3RydWN0IGJsa19tb3ZlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJYmxrNjRfdCBvbGRfbG9jOworCWJsazY0X3QgbmV3X2xvYzsKK307CisKKworc3RhdGljIGNvbnN0IGNoYXIgKnBsZWFzZV9mc2NrID0gTl8oIlBsZWFzZSBydW4gZTJmc2NrIG9uIHRoZSBmaWxlc3lzdGVtLlxuIik7CisKKyNpZmRlZiBDT05GSUdfQlVJTERfRklOREZTCit2b2lkIGRvX2ZpbmRmcyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworI2VuZGlmCisKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsCisJCV8oIlVzYWdlOiAlcyBbLWMgbWF4X21vdW50c19jb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gIgorCQkgICJbLWcgZ3JvdXBdXG4iCisJCSAgIlx0Wy1pIGludGVydmFsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbF9vcHRpb25zXSBbLWxdXG4iCisJCSAgIlx0Wy1tIHJlc2VydmVkX2Jsb2Nrc19wZXJjZW50XSAiCisJCSAgIlstbyBbXl1tb3VudF9vcHRpb25zWywuLi5dXSBbLXAgbW1wX3VwZGF0ZV9pbnRlcnZhbF1cbiIKKwkJICAiXHRbLXIgcmVzZXJ2ZWRfYmxvY2tzX2NvdW50XSBbLXUgdXNlcl0gWy1DIG1vdW50X2NvdW50XSAiCisJCSAgIlstTCB2b2x1bWVfbGFiZWxdXG4iCisJCSAgIlx0Wy1NIGxhc3RfbW91bnRlZF9kaXJdIFstTyBbXl1mZWF0dXJlWywuLi5dXVxuIgorI2lmZGVmIENPTkZJR19RVU9UQQorCQkgICJcdFstUSBxdW90YV9vcHRpb25zXVxuIgorI2VuZGlmCisJCSAgIlx0Wy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV0gWy1UIGxhc3RfY2hlY2tfdGltZV0gIgorCQkgICJbLVUgVVVJRF1cblx0WyAtSSBuZXdfaW5vZGVfc2l6ZSBdIGRldmljZVxuIiksIHByb2dyYW1fbmFtZSk7CisJZXhpdCgxKTsKK30KKworc3RhdGljIF9fdTMyIG9rX2ZlYXR1cmVzWzNdID0geworCS8qIENvbXBhdCAqLworCUVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwgfAorCQlFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWCwKKwkvKiBJbmNvbXBhdCAqLworCUVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRSB8CisJCUVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTIHwKKwkJRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcgfAorCQlFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTU1QLAorCS8qIFIvTyBjb21wYXQgKi8KKwlFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEUgfAorCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRXwKKwkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9ESVJfTkxJTkt8CisJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfRVhUUkFfSVNJWkV8CisJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0gfAorI2lmZGVmIENPTkZJR19RVU9UQQorCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBIHwKKyNlbmRpZgorCQlFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUgorfTsKKworc3RhdGljIF9fdTMyIGNsZWFyX29rX2ZlYXR1cmVzWzNdID0geworCS8qIENvbXBhdCAqLworCUVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwgfAorCQlFWFQyX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERSB8CisJCUVYVDJfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYLAorCS8qIEluY29tcGF0ICovCisJRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFIHwKKwkJRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcgfAorCQlFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTU1QLAorCS8qIFIvTyBjb21wYXQgKi8KKwlFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEUgfAorCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRXwKKwkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9ESVJfTkxJTkt8CisJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfRVhUUkFfSVNJWkV8CisjaWZkZWYgQ09ORklHX1FVT1RBCisJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfUVVPVEEgfAorI2VuZGlmCisJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0KK307CisKKy8qKgorICogVHJ5IHRvIGdldCBqb3VybmFsIHN1cGVyIGJsb2NrIGlmIGFueQorICovCitzdGF0aWMgaW50IGdldF9qb3VybmFsX3NiKGV4dDJfZmlsc3lzIGpmcywgY2hhciBidWZbU1VQRVJCTE9DS19TSVpFXSkKK3sKKwlpbnQgcmV0dmFsOworCWludCBzdGFydDsKKwlqb3VybmFsX3N1cGVyYmxvY2tfdCAqanNiOworCisJaWYgKCEoamZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkgICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0pPVVJOQUxfREVWKSkgeworCQlyZXR1cm4gRVhUMl9FVF9VTlNVUFBfRkVBVFVSRTsKKwl9CisKKwkvKiBHZXQgdGhlIGpvdXJuYWwgc3VwZXJibG9jayAqLworCWlmICgocmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGpmcy0+aW8sCisJICAgIGV4dDJmc19qb3VybmFsX3NiX3N0YXJ0KGpmcy0+YmxvY2tzaXplKSwgLVNVUEVSQkxPQ0tfU0laRSwgYnVmKSkpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJXygid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2siKSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJanNiID0gKGpvdXJuYWxfc3VwZXJibG9ja190ICopIGJ1ZjsKKwlpZiAoKGpzYi0+c19oZWFkZXIuaF9tYWdpYyAhPSAodW5zaWduZWQpbnRvaGwoSkZTX01BR0lDX05VTUJFUikpIHx8CisJICAgIChqc2ItPnNfaGVhZGVyLmhfYmxvY2t0eXBlICE9ICh1bnNpZ25lZCludG9obChKRlNfU1VQRVJCTE9DS19WMikpKSB7CisJCWZwdXRzKF8oIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQhXG4iKSwgc3RkZXJyKTsKKwkJcmV0dXJuIEVYVDJfRVRfQkFEX01BR0lDOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgX191OCAqam91cm5hbF91c2VyKF9fdTggdXVpZFtVVUlEX1NJWkVdLCBfX3U4IHNfdXNlcnNbSkZTX1VTRVJTX1NJWkVdLAorCQkJICBpbnQgbnJfdXNlcnMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG5yX3VzZXJzOyBpKyspIHsKKwkJaWYgKG1lbWNtcCh1dWlkLCAmc191c2Vyc1tpICogVVVJRF9TSVpFXSwgVVVJRF9TSVpFKSA9PSAwKQorCQkJcmV0dXJuICZzX3VzZXJzW2kgKiBVVUlEX1NJWkVdOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogUmVtb3ZlIGFuIGV4dGVybmFsIGpvdXJuYWwgZnJvbSB0aGUgZmlsZXN5c3RlbQorICovCitzdGF0aWMgaW50IHJlbW92ZV9qb3VybmFsX2RldmljZShleHQyX2ZpbHN5cyBmcykKK3sKKwljaGFyCQkqam91cm5hbF9wYXRoOworCWV4dDJfZmlsc3lzCWpmczsKKwljaGFyCQlidWZbU1VQRVJCTE9DS19TSVpFXTsKKwlqb3VybmFsX3N1cGVyYmxvY2tfdAkqanNiOworCWludAkJaSwgbnJfdXNlcnM7CisJZXJyY29kZV90CXJldHZhbDsKKwlpbnQJCWNvbW1pdF9yZW1vdmVfam91cm5hbCA9IDA7CisJaW9fbWFuYWdlcglpb19wdHI7CisKKwlpZiAoZl9mbGFnKQorCQljb21taXRfcmVtb3ZlX2pvdXJuYWwgPSAxOyAvKiBmb3JjZSByZW1vdmFsIGV2ZW4gaWYgZXJyb3IgKi8KKworCXV1aWRfdW5wYXJzZShmcy0+c3VwZXItPnNfam91cm5hbF91dWlkLCBidWYpOworCWpvdXJuYWxfcGF0aCA9IGJsa2lkX2dldF9kZXZuYW1lKE5VTEwsICJVVUlEIiwgYnVmKTsKKworCWlmICgham91cm5hbF9wYXRoKSB7CisJCWpvdXJuYWxfcGF0aCA9CisJCQlleHQyZnNfZmluZF9ibG9ja19kZXZpY2UoZnMtPnN1cGVyLT5zX2pvdXJuYWxfZGV2KTsKKwkJaWYgKCFqb3VybmFsX3BhdGgpCisJCQlnb3RvIG5vX3ZhbGlkX2pvdXJuYWw7CisJfQorCisjaWZkZWYgQ09ORklHX1RFU1RJT19ERUJVRworCWlmIChnZXRlbnYoIlRFU1RfSU9fRkxBR1MiKSB8fCBnZXRlbnYoIlRFU1RfSU9fQkxPQ0siKSkgeworCQlpb19wdHIgPSB0ZXN0X2lvX21hbmFnZXI7CisJCXRlc3RfaW9fYmFja2luZ19tYW5hZ2VyID0gdW5peF9pb19tYW5hZ2VyOworCX0gZWxzZQorI2VuZGlmCisJCWlvX3B0ciA9IHVuaXhfaW9fbWFuYWdlcjsKKwlyZXR2YWwgPSBleHQyZnNfb3Blbihqb3VybmFsX3BhdGgsIEVYVDJfRkxBR19SV3wKKwkJCSAgICAgRVhUMl9GTEFHX0pPVVJOQUxfREVWX09LLCAwLAorCQkJICAgICBmcy0+YmxvY2tzaXplLCBpb19wdHIsICZqZnMpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIHRyeWluZyB0byBvcGVuIGV4dGVybmFsIGpvdXJuYWwiKSk7CisJCWdvdG8gbm9fdmFsaWRfam91cm5hbDsKKwl9CisKKwlpZiAoKHJldHZhbCA9IGdldF9qb3VybmFsX3NiKGpmcywgYnVmKSkpIHsKKwkJaWYgKHJldHZhbCA9PSBFWFQyX0VUX1VOU1VQUF9GRUFUVVJFKQorCQkJZnByaW50ZihzdGRlcnIsIF8oIiVzIGlzIG5vdCBhIGpvdXJuYWwgZGV2aWNlLlxuIiksCisJCQkJam91cm5hbF9wYXRoKTsKKwkJZ290byBub192YWxpZF9qb3VybmFsOworCX0KKworCWpzYiA9IChqb3VybmFsX3N1cGVyYmxvY2tfdCAqKSBidWY7CisJLyogRmluZCB0aGUgZmlsZXN5c3RlbSBVVUlEICovCisJbnJfdXNlcnMgPSBudG9obChqc2ItPnNfbnJfdXNlcnMpOworCisJaWYgKCFqb3VybmFsX3VzZXIoZnMtPnN1cGVyLT5zX3V1aWQsIGpzYi0+c191c2VycywgbnJfdXNlcnMpKSB7CisJCWZwdXRzKF8oIkZpbGVzeXN0ZW0ncyBVVUlEIG5vdCBmb3VuZCBvbiBqb3VybmFsIGRldmljZS5cbiIpLAorCQkgICAgICBzdGRlcnIpOworCQljb21taXRfcmVtb3ZlX2pvdXJuYWwgPSAxOworCQlnb3RvIG5vX3ZhbGlkX2pvdXJuYWw7CisJfQorCW5yX3VzZXJzLS07CisJZm9yIChpID0gMDsgaSA8IG5yX3VzZXJzOyBpKyspCisJCW1lbWNweSgmanNiLT5zX3VzZXJzW2kgKiAxNl0sICZqc2ItPnNfdXNlcnNbKGkgKyAxKSAqIDE2XSwgMTYpOworCWpzYi0+c19ucl91c2VycyA9IGh0b25sKG5yX3VzZXJzKTsKKworCS8qIFdyaXRlIGJhY2sgdGhlIGpvdXJuYWwgc3VwZXJibG9jayAqLworCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoamZzLT5pbywKKwkJCQkJZXh0MmZzX2pvdXJuYWxfc2Jfc3RhcnQoZnMtPmJsb2Nrc2l6ZSksCisJCQkJCS1TVVBFUkJMT0NLX1NJWkUsIGJ1Zik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLAorCQkJIndoaWxlIHdyaXRpbmcgam91cm5hbCBzdXBlcmJsb2NrLiIpOworCQlnb3RvIG5vX3ZhbGlkX2pvdXJuYWw7CisJfQorCisJY29tbWl0X3JlbW92ZV9qb3VybmFsID0gMTsKKworbm9fdmFsaWRfam91cm5hbDoKKwlpZiAoY29tbWl0X3JlbW92ZV9qb3VybmFsID09IDApIHsKKwkJZnB1dHMoXygiQ2Fubm90IGxvY2F0ZSBqb3VybmFsIGRldmljZS4gSXQgd2FzIE5PVCByZW1vdmVkXG4iCisJCQkiVXNlIC1mIG9wdGlvbiB0byByZW1vdmUgbWlzc2luZyBqb3VybmFsIGRldmljZS5cbiIpLAorCQkgICAgICBzdGRlcnIpOworCQlyZXR1cm4gMTsKKwl9CisJZnMtPnN1cGVyLT5zX2pvdXJuYWxfZGV2ID0gMDsKKwltZW1zZXQoZnMtPnN1cGVyLT5zX2pubF9ibG9ja3MsIDAsIHNpemVvZihmcy0+c3VwZXItPnNfam5sX2Jsb2NrcykpOworCXV1aWRfY2xlYXIoZnMtPnN1cGVyLT5zX2pvdXJuYWxfdXVpZCk7CisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCWZwdXRzKF8oIkpvdXJuYWwgcmVtb3ZlZFxuIiksIHN0ZG91dCk7CisJZnJlZShqb3VybmFsX3BhdGgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgcmVtb3ZlX2pvdXJuYWxfaW5vZGUgKi8KK3N0YXRpYyBpbnQgcmVsZWFzZV9ibG9ja3NfcHJvYyhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCAqYmxvY2tuciwKKwkJCSAgICAgICBlMl9ibGtjbnRfdCBibG9ja2NudCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICAgYmxrNjRfdCByZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICAgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgICB2b2lkICpwcml2YXRlIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlibGs2NF90CWJsb2NrOworCWludAlncm91cDsKKworCWJsb2NrID0gKmJsb2NrbnI7CisJZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsIGJsb2NrKTsKKwlncm91cCA9IGV4dDJmc19ncm91cF9vZl9ibGsyKGZzLCBibG9jayk7CisJZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcywgZ3JvdXAsIGV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudChmcywgZ3JvdXApICsgMSk7CisJZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV9zZXQoZnMsIGdyb3VwKTsKKwlleHQyZnNfZnJlZV9ibG9ja3NfY291bnRfYWRkKGZzLT5zdXBlciwgRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbW92ZSB0aGUgam91cm5hbCBpbm9kZSBmcm9tIHRoZSBmaWxlc3lzdGVtCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgcmVtb3ZlX2pvdXJuYWxfaW5vZGUoZXh0Ml9maWxzeXMgZnMpCit7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJZXJyY29kZV90CQlyZXR2YWw7CisJaW5vX3QJCQlpbm8gPSBmcy0+c3VwZXItPnNfam91cm5hbF9pbnVtOworCisJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIGlubywgICZpbm9kZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgcmVhZGluZyBqb3VybmFsIGlub2RlIikpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlpZiAoaW5vID09IEVYVDJfSk9VUk5BTF9JTk8pIHsKKwkJcmV0dmFsID0gZXh0MmZzX3JlYWRfYml0bWFwcyhmcyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQkJXygid2hpbGUgcmVhZGluZyBiaXRtYXBzIikpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlyZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIGlubywKKwkJCQkJICAgICAgIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLCBOVUxMLAorCQkJCQkgICAgICAgcmVsZWFzZV9ibG9ja3NfcHJvYywgTlVMTCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQkJXygid2hpbGUgY2xlYXJpbmcgam91cm5hbCBpbm9kZSIpKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKGlub2RlKSk7CisJCWV4dDJmc19tYXJrX2JiX2RpcnR5KGZzKTsKKwkJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfU1VQRVJfT05MWTsKKwl9IGVsc2UKKwkJaW5vZGUuaV9mbGFncyAmPSB+RVhUMl9JTU1VVEFCTEVfRkw7CisJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGZzLCBpbm8sICZpbm9kZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIikpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlmcy0+c3VwZXItPnNfam91cm5hbF9pbnVtID0gMDsKKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgZGVmYXVsdCBtb3VudCBvcHRpb25zCisgKi8KK3N0YXRpYyBpbnQgdXBkYXRlX21udG9wdHMoZXh0Ml9maWxzeXMgZnMsIGNoYXIgKm1udG9wdHMpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiID0gZnMtPnN1cGVyOworCisJaWYgKGUycF9lZGl0X21udG9wdHMobW50b3B0cywgJnNiLT5zX2RlZmF1bHRfbW91bnRfb3B0cywgfjApKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJJbnZhbGlkIG1vdW50IG9wdGlvbiBzZXQ6ICVzXG4iKSwKKwkJCW1udG9wdHMpOworCQlyZXR1cm4gMTsKKwl9CisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfZnNja19uZWVkZWQoZXh0Ml9maWxzeXMgZnMpCit7CisJaWYgKGZzLT5zdXBlci0+c19zdGF0ZSAmIEVYVDJfVkFMSURfRlMpCisJCXJldHVybiAwOworCXByaW50ZigiXG4lc1xuIiwgXyhwbGVhc2VfZnNjaykpOworCWlmIChtb3VudF9mbGFncyAmIEVYVDJfTUZfUkVBRE9OTFkpCisJCXByaW50ZigiJXMiLCBfKCIoYW5kIHJlYm9vdCBhZnRlcndhcmRzISlcbiIpKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcmVxdWVzdF9mc2NrX2FmdGVyd2FyZHMoZXh0Ml9maWxzeXMgZnMpCit7CisJc3RhdGljIGludCByZXF1ZXN0ZWQgPSAwOworCisJaWYgKHJlcXVlc3RlZCsrKQorCQlyZXR1cm47CisJZnMtPnN1cGVyLT5zX3N0YXRlICY9IH5FWFQyX1ZBTElEX0ZTOworCXByaW50ZigiXG4lc1xuIiwgXyhwbGVhc2VfZnNjaykpOworCWlmIChtb3VudF9mbGFncyAmIEVYVDJfTUZfUkVBRE9OTFkpCisJCXByaW50ZigiJXMiLCBfKCIoYW5kIHJlYm9vdCBhZnRlcndhcmRzISlcbiIpKTsKK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgZmVhdHVyZSBzZXQgYXMgcHJvdmlkZWQgYnkgdGhlIHVzZXIuCisgKi8KK3N0YXRpYyBpbnQgdXBkYXRlX2ZlYXR1cmVfc2V0KGV4dDJfZmlsc3lzIGZzLCBjaGFyICpmZWF0dXJlcykKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IgPSBmcy0+c3VwZXI7CisJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqZ2Q7CisJX191MzIJCW9sZF9mZWF0dXJlc1szXTsKKwlkZ3JwX3QJCWk7CisJaW50CQl0eXBlX2VycjsKKwl1bnNpZ25lZCBpbnQJbWFza19lcnI7CisKKyNkZWZpbmUgRkVBVFVSRV9PTih0eXBlLCBtYXNrKSAoIShvbGRfZmVhdHVyZXNbKHR5cGUpXSAmIChtYXNrKSkgJiYgXAorCQkJCSgoJnNiLT5zX2ZlYXR1cmVfY29tcGF0KVsodHlwZSldICYgKG1hc2spKSkKKyNkZWZpbmUgRkVBVFVSRV9PRkYodHlwZSwgbWFzaykgKChvbGRfZmVhdHVyZXNbKHR5cGUpXSAmIChtYXNrKSkgJiYgXAorCQkJCSAhKCgmc2ItPnNfZmVhdHVyZV9jb21wYXQpWyh0eXBlKV0gJiAobWFzaykpKQorI2RlZmluZSBGRUFUVVJFX0NIQU5HRUQodHlwZSwgbWFzaykgKChtYXNrKSAmIFwKKwkJICAgICAob2xkX2ZlYXR1cmVzWyh0eXBlKV0gXiAoJnNiLT5zX2ZlYXR1cmVfY29tcGF0KVsodHlwZSldKSkKKworCW9sZF9mZWF0dXJlc1tFMlBfRkVBVFVSRV9DT01QQVRdID0gc2ItPnNfZmVhdHVyZV9jb21wYXQ7CisJb2xkX2ZlYXR1cmVzW0UyUF9GRUFUVVJFX0lOQ09NUEFUXSA9IHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQ7CisJb2xkX2ZlYXR1cmVzW0UyUF9GRUFUVVJFX1JPX0lOQ09NUEFUXSA9IHNiLT5zX2ZlYXR1cmVfcm9fY29tcGF0OworCisJaWYgKGUycF9lZGl0X2ZlYXR1cmUyKGZlYXR1cmVzLCAmc2ItPnNfZmVhdHVyZV9jb21wYXQsCisJCQkgICAgICBva19mZWF0dXJlcywgY2xlYXJfb2tfZmVhdHVyZXMsCisJCQkgICAgICAmdHlwZV9lcnIsICZtYXNrX2VycikpIHsKKwkJaWYgKCFtYXNrX2VycikKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCV8oIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIiksCisJCQkJZmVhdHVyZXMpOworCQllbHNlIGlmICh0eXBlX2VyciAmIEUyUF9GRUFUVVJFX05FR0FURV9GTEFHKQorCQkJZnByaW50ZihzdGRlcnIsIF8oIkNsZWFyaW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnICIKKwkJCQkJICAibm90IHN1cHBvcnRlZC5cbiIpLAorCQkJCWUycF9mZWF0dXJlMnN0cmluZyh0eXBlX2VyciAmCisJCQkJCQkgICBFMlBfRkVBVFVSRV9UWVBFX01BU0ssCisJCQkJCQkgICBtYXNrX2VycikpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiU2V0dGluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyAiCisJCQkJCSAgIm5vdCBzdXBwb3J0ZWQuXG4iKSwKKwkJCQllMnBfZmVhdHVyZTJzdHJpbmcodHlwZV9lcnIsIG1hc2tfZXJyKSk7CisJCXJldHVybiAxOworCX0KKworCWlmIChGRUFUVVJFX09GRihFMlBfRkVBVFVSRV9DT01QQVQsIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwpKSB7CisJCWlmICgobW91bnRfZmxhZ3MgJiBFWFQyX01GX01PVU5URUQpICYmCisJCSAgICAhKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9SRUFET05MWSkpIHsKKwkJCWZwdXRzKF8oIlRoZSBoYXNfam91cm5hbCBmZWF0dXJlIG1heSBvbmx5IGJlICIKKwkJCQkiY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisJCQkJInVubW91bnRlZCBvciBtb3VudGVkICIKKwkJCQkicmVhZC1vbmx5LlxuIiksIHN0ZGVycik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoKHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQkgICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVIpICYmCisJCSAgICBmX2ZsYWcgPCAyKSB7CisJCQlmcHV0cyhfKCJUaGUgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQuICAiCisJCQkJIlBsZWFzZSBydW4gZTJmc2NrIGJlZm9yZSBjbGVhcmluZ1xuIgorCQkJCSJ0aGUgaGFzX2pvdXJuYWwgZmxhZy5cbiIpLCBzdGRlcnIpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKHNiLT5zX2pvdXJuYWxfaW51bSkgeworCQkJaWYgKHJlbW92ZV9qb3VybmFsX2lub2RlKGZzKSkKKwkJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoc2ItPnNfam91cm5hbF9kZXYpIHsKKwkJCWlmIChyZW1vdmVfam91cm5hbF9kZXZpY2UoZnMpKQorCQkJCXJldHVybiAxOworCQl9CisJfQorCisJaWYgKEZFQVRVUkVfT04oRTJQX0ZFQVRVUkVfUk9fSU5DT01QQVQsCisJCUVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSKSkgeworCQlpZiAoc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCQlFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgeworCQkJZnB1dHMoXygiU2V0dGluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJ3NwYXJzZV9zdXBlcicgIgorCQkJCSJub3Qgc3VwcG9ydGVkXG5mb3IgZmlsZXN5c3RlbXMgd2l0aCAiCisJCQkJInRoZSBtZXRhX2JnIGZlYXR1cmUgZW5hYmxlZC5cbiIpLAorCQkJCXN0ZGVycik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWlmIChGRUFUVVJFX09OKEUyUF9GRUFUVVJFX0lOQ09NUEFULCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTU1QKSkgeworCQlpbnQgZXJyb3I7CisKKwkJaWYgKChtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkgfHwKKwkJICAgIChtb3VudF9mbGFncyAmIEVYVDJfTUZfUkVBRE9OTFkpKSB7CisJCQlmcHV0cyhfKCJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbid0XG4iCisJCQkJImJlIHNldCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIG9yXG4iCisJCQkJInJlYWQtb25seS5cbiIpLCBzdGRlcnIpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQllcnJvciA9IGV4dDJmc19tbXBfaW5pdChmcyk7CisJCWlmIChlcnJvcikgeworCQkJZnB1dHMoXygiXG5FcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCAiCisJCQkJInByb3RlY3Rpb24gZmVhdHVyZS4iKSwgc3RkZXJyKTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJLyoKKwkJICogV2Ugd2FudCB0byB1cGRhdGUgZ3JvdXAgZGVzYyB3aXRoIHRoZSBuZXcgZnJlZSBibG9ja3MgY291bnQKKwkJICovCisJCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX1NVUEVSX09OTFk7CisKKwkJcHJpbnRmKF8oIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCAiCisJCQkgIndpdGggdXBkYXRlIGludGVydmFsICVkcy5cbiIpLAorCQkgICAgICAgc2ItPnNfbW1wX3VwZGF0ZV9pbnRlcnZhbCk7CisJfQorCisJaWYgKEZFQVRVUkVfT0ZGKEUyUF9GRUFUVVJFX0lOQ09NUEFULCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTU1QKSkgeworCQlpbnQgZXJyb3I7CisKKwkJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9SRUFET05MWSkgeworCQkJZnB1dHMoXygiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW5ub3RcbiIKKwkJCQkiYmUgZGlzYWJsZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmVhZG9ubHkuXG4iKSwKKwkJCQlzdGRlcnIpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQllcnJvciA9IGV4dDJmc19yZWFkX2JpdG1hcHMoZnMpOworCQlpZiAoZXJyb3IpIHsKKwkJCWZwdXRzKF8oIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIiksIHN0ZGVycik7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWVycm9yID0gZXh0MmZzX21tcF9yZWFkKGZzLCBzYi0+c19tbXBfYmxvY2ssIE5VTEwpOworCQlpZiAoZXJyb3IpIHsKKwkJCXN0cnVjdCBtbXBfc3RydWN0ICptbXBfY21wID0gZnMtPm1tcF9jbXA7CisKKwkJCWlmIChlcnJvciA9PSBFWFQyX0VUX01NUF9NQUdJQ19JTlZBTElEKQorCQkJCXByaW50ZihfKCJNYWdpYyBudW1iZXIgaW4gTU1QIGJsb2NrIGRvZXMgbm90ICIKKwkJCQkJICJtYXRjaC4gZXhwZWN0ZWQ6ICV4LCBhY3R1YWw6ICV4XG4iKSwKKwkJCQkJIEVYVDRfTU1QX01BR0lDLCBtbXBfY21wLT5tbXBfbWFnaWMpOworCQkJZWxzZQorCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnJvciwgIiVzIiwKKwkJCQkJXygid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIikpOworCQkJZ290byBtbXBfZXJyb3I7CisJCX0KKworCQkvKiBXZSBuZWVkIHRvIGZvcmNlIG91dCB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgYXMgd2VsbCAqLworCQlmcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19TVVBFUl9PTkxZOworCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBzYi0+c19tbXBfYmxvY2ssIC0xKTsKK21tcF9lcnJvcjoKKwkJc2ItPnNfbW1wX2Jsb2NrID0gMDsKKwkJc2ItPnNfbW1wX3VwZGF0ZV9pbnRlcnZhbCA9IDA7CisJfQorCisJaWYgKEZFQVRVUkVfT04oRTJQX0ZFQVRVUkVfQ09NUEFULCBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMKSkgeworCQkvKgorCQkgKiBJZiBhZGRpbmcgYSBqb3VybmFsIGZsYWcsIGxldCB0aGUgY3JlYXRlIGpvdXJuYWwKKwkJICogY29kZSBiZWxvdyBoYW5kbGUgc2V0dGluZyB0aGUgZmxhZyBhbmQgY3JlYXRpbmcgdGhlCisJCSAqIGpvdXJuYWwuICBXZSBzdXBwbHkgYSBkZWZhdWx0IHNpemUgaWYgbmVjZXNzYXJ5LgorCQkgKi8KKwkJaWYgKCFqb3VybmFsX3NpemUpCisJCQlqb3VybmFsX3NpemUgPSAtMTsKKwkJc2ItPnNfZmVhdHVyZV9jb21wYXQgJj0gfkVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUw7CisJfQorCisJaWYgKEZFQVRVUkVfT04oRTJQX0ZFQVRVUkVfQ09NUEFULCBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWCkpIHsKKwkJaWYgKCFzYi0+c19kZWZfaGFzaF92ZXJzaW9uKQorCQkJc2ItPnNfZGVmX2hhc2hfdmVyc2lvbiA9IEVYVDJfSEFTSF9IQUxGX01ENDsKKwkJaWYgKHV1aWRfaXNfbnVsbCgodW5zaWduZWQgY2hhciAqKSBzYi0+c19oYXNoX3NlZWQpKQorCQkJdXVpZF9nZW5lcmF0ZSgodW5zaWduZWQgY2hhciAqKSBzYi0+c19oYXNoX3NlZWQpOworCX0KKworCWlmIChGRUFUVVJFX09GRihFMlBfRkVBVFVSRV9JTkNPTVBBVCwgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcpKSB7CisJCWlmIChleHQyZnNfY2hlY2tfZGVzYyhmcykpIHsKKwkJCWZwdXRzKF8oIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgIgorCQkJCSJjYXVzZSB0aGUgdGhlIGZpbGVzeXN0ZW0gdG8gYmVcbiIKKwkJCQkiaW5jb25zaXN0ZW50LlxuIiksIHN0ZGVycik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWlmIChGRUFUVVJFX09GRihFMlBfRkVBVFVSRV9ST19JTkNPTVBBVCwKKwkJCSAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSkpIHsKKwkJaWYgKChtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkgJiYKKwkJICAgICEobW91bnRfZmxhZ3MgJiBFWFQyX01GX1JFQURPTkxZKSkgeworCQkJZnB1dHMoXygiVGhlIGh1Z2VfZmlsZSBmZWF0dXJlIG1heSBvbmx5IGJlICIKKwkJCQkiY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisJCQkJInVubW91bnRlZCBvciBtb3VudGVkICIKKwkJCQkicmVhZC1vbmx5LlxuIiksIHN0ZGVycik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWlmIChGRUFUVVJFX09OKEUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULAorCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkpIHsKKwkJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJCWdkID0gZXh0MmZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBpKTsKKwkJCWdkLT5iZ19pdGFibGVfdW51c2VkID0gMDsKKwkJCWdkLT5iZ19mbGFncyA9IEVYVDJfQkdfSU5PREVfWkVST0VEOworCQkJZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV9zZXQoZnMsIGkpOworCQl9CisJCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX1NVUEVSX09OTFk7CisJfQorCisJaWYgKEZFQVRVUkVfT0ZGKEUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULAorCQkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkpIHsKKwkJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJCWdkID0gZXh0MmZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBpKTsKKwkJCWlmICgoZ2QtPmJnX2ZsYWdzICYgRVhUMl9CR19JTk9ERV9aRVJPRUQpID09IDApIHsKKwkJCQkvKiAKKwkJCQkgKiBYWFggd2hhdCB3ZSByZWFsbHkgc2hvdWxkIGRvIGlzIHphcAorCQkJCSAqIHVuaW5pdGlhbGl6ZWQgaW5vZGUgdGFibGVzIGluc3RlYWQuCisJCQkJICovCisJCQkJcmVxdWVzdF9mc2NrX2FmdGVyd2FyZHMoZnMpOworCQkJCWJyZWFrOworCQkJfQorCQkJZ2QtPmJnX2l0YWJsZV91bnVzZWQgPSAwOworCQkJZ2QtPmJnX2ZsYWdzID0gMDsKKwkJCWdkLT5iZ19jaGVja3N1bSA9IDA7CisJCX0KKwkJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfU1VQRVJfT05MWTsKKwl9CisKKwlpZiAoRkVBVFVSRV9PTihFMlBfRkVBVFVSRV9ST19JTkNPTVBBVCwKKwkJCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBKSkgeworCQkvKgorCQkgKiBTZXQgdGhlIFFfZmxhZyBoZXJlIGFuZCBoYW5kbGUgdGhlIHF1b3RhIG9wdGlvbnMgaW4gdGhlIGNvZGUKKwkJICogYmVsb3cuCisJCSAqLworCQlpZiAoIVFfZmxhZykgeworCQkJUV9mbGFnID0gMTsKKwkJCS8qIEVuYWJsZSBib3RoIHVzZXIgcXVvdGEgYW5kIGdyb3VwIHF1b3RhIGJ5IGRlZmF1bHQgKi8KKwkJCXVzcnF1b3RhID0gUU9QVF9FTkFCTEU7CisJCQlncnBxdW90YSA9IFFPUFRfRU5BQkxFOworCQl9CisJCXNiLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICY9IH5FWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBOworCX0KKworCWlmIChGRUFUVVJFX09GRihFMlBfRkVBVFVSRV9ST19JTkNPTVBBVCwKKwkJCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBKSkgeworCQkvKgorCQkgKiBTZXQgdGhlIFFfZmxhZyBoZXJlIGFuZCBoYW5kbGUgdGhlIHF1b3RhIG9wdGlvbnMgaW4gdGhlIGNvZGUKKwkJICogYmVsb3cuCisJCSAqLworCQlpZiAoUV9mbGFnKQorCQkJZnB1dHMoXygiXG5XYXJuaW5nOiAnXnF1b3RhJyBvcHRpb24gb3ZlcnJpZGVzICctUSciCisJCQkJImFyZ3VtZW50cy5cbiIpLCBzdGRlcnIpOworCQlRX2ZsYWcgPSAxOworCQkvKiBEaXNhYmxlIGJvdGggdXNlciBxdW90YSBhbmQgZ3JvdXAgcXVvdGEgYnkgZGVmYXVsdCAqLworCQl1c3JxdW90YSA9IFFPUFRfRElTQUJMRTsKKwkJZ3JwcXVvdGEgPSBRT1BUX0RJU0FCTEU7CisJfQorCisJaWYgKHNiLT5zX3Jldl9sZXZlbCA9PSBFWFQyX0dPT0RfT0xEX1JFViAmJgorCSAgICAoc2ItPnNfZmVhdHVyZV9jb21wYXQgfHwgc2ItPnNfZmVhdHVyZV9yb19jb21wYXQgfHwKKwkgICAgIHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQpKQorCQlleHQyZnNfdXBkYXRlX2R5bmFtaWNfcmV2KGZzKTsKKworCWlmIChGRUFUVVJFX0NIQU5HRUQoRTJQX0ZFQVRVUkVfUk9fSU5DT01QQVQsCisJCQkgICAgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVIpIHx8CisJICAgIEZFQVRVUkVfT0ZGKEUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULAorCQkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpIHx8CisJICAgIEZFQVRVUkVfQ0hBTkdFRChFMlBfRkVBVFVSRV9JTkNPTVBBVCwKKwkJCSAgICBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUpIHx8CisJICAgIEZFQVRVUkVfQ0hBTkdFRChFMlBfRkVBVFVSRV9DT01QQVQsCisJCQkgICAgRVhUMl9GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREUpIHx8CisJICAgIEZFQVRVUkVfT0ZGKEUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULAorCQkJRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFKSkKKwkJcmVxdWVzdF9mc2NrX2FmdGVyd2FyZHMoZnMpOworCisJaWYgKChvbGRfZmVhdHVyZXNbRTJQX0ZFQVRVUkVfQ09NUEFUXSAhPSBzYi0+c19mZWF0dXJlX2NvbXBhdCkgfHwKKwkgICAgKG9sZF9mZWF0dXJlc1tFMlBfRkVBVFVSRV9JTkNPTVBBVF0gIT0gc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCkgfHwKKwkgICAgKG9sZF9mZWF0dXJlc1tFMlBfRkVBVFVSRV9ST19JTkNPTVBBVF0gIT0gc2ItPnNfZmVhdHVyZV9yb19jb21wYXQpKQorCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFkZCBhIGpvdXJuYWwgdG8gdGhlIGZpbGVzeXN0ZW0uCisgKi8KK3N0YXRpYyBpbnQgYWRkX2pvdXJuYWwoZXh0Ml9maWxzeXMgZnMpCit7CisJdW5zaWduZWQgbG9uZyBqb3VybmFsX2Jsb2NrczsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfZmlsc3lzCWpmczsKKwlpb19tYW5hZ2VyCWlvX3B0cjsKKworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJgorCSAgICBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMKSB7CisJCWZwdXRzKF8oIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIGEgam91cm5hbC5cbiIpLCBzdGRlcnIpOworCQlnb3RvIGVycjsKKwl9CisJaWYgKGpvdXJuYWxfZGV2aWNlKSB7CisJCWlmICghY2hlY2tfcGxhdXNpYmlsaXR5KGpvdXJuYWxfZGV2aWNlLCBDSEVDS19CTE9DS19ERVYsCisJCQkJCU5VTEwpKQorCQkJcHJvY2VlZF9xdWVzdGlvbigtMSk7CisJCWNoZWNrX21vdW50KGpvdXJuYWxfZGV2aWNlLCAwLCBfKCJqb3VybmFsIikpOworI2lmZGVmIENPTkZJR19URVNUSU9fREVCVUcKKwkJaWYgKGdldGVudigiVEVTVF9JT19GTEFHUyIpIHx8IGdldGVudigiVEVTVF9JT19CTE9DSyIpKSB7CisJCQlpb19wdHIgPSB0ZXN0X2lvX21hbmFnZXI7CisJCQl0ZXN0X2lvX2JhY2tpbmdfbWFuYWdlciA9IHVuaXhfaW9fbWFuYWdlcjsKKwkJfSBlbHNlCisjZW5kaWYKKwkJCWlvX3B0ciA9IHVuaXhfaW9fbWFuYWdlcjsKKwkJcmV0dmFsID0gZXh0MmZzX29wZW4oam91cm5hbF9kZXZpY2UsIEVYVDJfRkxBR19SV3wKKwkJCQkgICAgIEVYVDJfRkxBR19KT1VSTkFMX0RFVl9PSywgMCwKKwkJCQkgICAgIGZzLT5ibG9ja3NpemUsIGlvX3B0ciwgJmpmcyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQkJXygiXG5cdHdoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgb24gJXNcbiIpLAorCQkJCWpvdXJuYWxfZGV2aWNlKTsKKwkJCWdvdG8gZXJyOworCQl9CisJCXByaW50ZihfKCJDcmVhdGluZyBqb3VybmFsIG9uIGRldmljZSAlczogIiksCisJCSAgICAgICBqb3VybmFsX2RldmljZSk7CisJCWZmbHVzaChzdGRvdXQpOworCisJCXJldHZhbCA9IGV4dDJmc19hZGRfam91cm5hbF9kZXZpY2UoZnMsIGpmcyk7CisJCWV4dDJmc19jbG9zZV9mcmVlKCZqZnMpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLAorCQkJCV8oIndoaWxlIGFkZGluZyBmaWxlc3lzdGVtIHRvIGpvdXJuYWwgb24gJXMiKSwKKwkJCQlqb3VybmFsX2RldmljZSk7CisJCQlnb3RvIGVycjsKKwkJfQorCQlmcHV0cyhfKCJkb25lXG4iKSwgc3Rkb3V0KTsKKwl9IGVsc2UgaWYgKGpvdXJuYWxfc2l6ZSkgeworCQlmcHV0cyhfKCJDcmVhdGluZyBqb3VybmFsIGlub2RlOiAiKSwgc3Rkb3V0KTsKKwkJZmZsdXNoKHN0ZG91dCk7CisJCWpvdXJuYWxfYmxvY2tzID0gZmlndXJlX2pvdXJuYWxfc2l6ZShqb3VybmFsX3NpemUsIGZzKTsKKworCQlpZiAoam91cm5hbF9sb2NhdGlvbl9zdHJpbmcpCisJCQlqb3VybmFsX2xvY2F0aW9uID0KKwkJCQlwYXJzZV9udW1fYmxvY2tzMihqb3VybmFsX2xvY2F0aW9uX3N0cmluZywKKwkJCQkJCSAgZnMtPnN1cGVyLT5zX2xvZ19ibG9ja19zaXplKTsKKwkJcmV0dmFsID0gZXh0MmZzX2FkZF9qb3VybmFsX2lub2RlMihmcywgam91cm5hbF9ibG9ja3MsCisJCQkJCQkgICBqb3VybmFsX2xvY2F0aW9uLAorCQkJCQkJICAgam91cm5hbF9mbGFncyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQkJXygiXG5cdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCBmaWxlIikpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfSBlbHNlCisJCQlmcHV0cyhfKCJkb25lXG4iKSwgc3Rkb3V0KTsKKwkJLyoKKwkJICogSWYgdGhlIGZpbGVzeXN0ZW0gd2Fzbid0IG1vdW50ZWQsIHdlIG5lZWQgdG8gZm9yY2UKKwkJICogdGhlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIG91dC4KKwkJICovCisJCWlmICgobW91bnRfZmxhZ3MgJiBFWFQyX01GX01PVU5URUQpID09IDApCisJCQlmcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19TVVBFUl9PTkxZOworCX0KKwlwcmludF9jaGVja19tZXNzYWdlKGZzLT5zdXBlci0+c19tYXhfbW50X2NvdW50LAorCQkJICAgIGZzLT5zdXBlci0+c19jaGVja2ludGVydmFsKTsKKwlyZXR1cm4gMDsKKworZXJyOgorCWZyZWUoam91cm5hbF9kZXZpY2UpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcXVvdGFfb3B0aW9ucyhleHQyX2ZpbHN5cyBmcykKK3sKKwlxdW90YV9jdHhfdCBxY3R4OworCWV4dDJfaW5vX3QgcWZfaW5vOworCisJaWYgKCF1c3JxdW90YSAmJiAhZ3JwcXVvdGEpCisJCS8qIE5vdGhpbmcgdG8gZG8uICovCisJCXJldHVybjsKKworCXF1b3RhX2luaXRfY29udGV4dCgmcWN0eCwgZnMsIC0xKTsKKworCWlmICh1c3JxdW90YSA9PSBRT1BUX0VOQUJMRSB8fCBncnBxdW90YSA9PSBRT1BUX0VOQUJMRSkKKwkJcXVvdGFfY29tcHV0ZV91c2FnZShxY3R4KTsKKworCWlmICh1c3JxdW90YSA9PSBRT1BUX0VOQUJMRSAmJiAhZnMtPnN1cGVyLT5zX3Vzcl9xdW90YV9pbnVtKSB7CisJCWlmICgocWZfaW5vID0gcXVvdGFfZmlsZV9leGlzdHMoZnMsIFVTUlFVT1RBLAorCQkJCQkJUUZNVF9WRlNfVjEpKSA+IDApCisJCQlxdW90YV91cGRhdGVfbGltaXRzKHFjdHgsIHFmX2lubywgVVNSUVVPVEEpOworCQlxdW90YV93cml0ZV9pbm9kZShxY3R4LCBVU1JRVU9UQSk7CisJfSBlbHNlIGlmICh1c3JxdW90YSA9PSBRT1BUX0RJU0FCTEUpIHsKKwkJcXVvdGFfcmVtb3ZlX2lub2RlKGZzLCBVU1JRVU9UQSk7CisJfQorCisJaWYgKGdycHF1b3RhID09IFFPUFRfRU5BQkxFICYmICFmcy0+c3VwZXItPnNfZ3JwX3F1b3RhX2ludW0pIHsKKwkJaWYgKChxZl9pbm8gPSBxdW90YV9maWxlX2V4aXN0cyhmcywgR1JQUVVPVEEsCisJCQkJCQlRRk1UX1ZGU19WMSkpID4gMCkKKwkJCXF1b3RhX3VwZGF0ZV9saW1pdHMocWN0eCwgcWZfaW5vLCBHUlBRVU9UQSk7CisJCXF1b3RhX3dyaXRlX2lub2RlKHFjdHgsIEdSUFFVT1RBKTsKKwl9IGVsc2UgaWYgKGdycHF1b3RhID09IFFPUFRfRElTQUJMRSkgeworCQlxdW90YV9yZW1vdmVfaW5vZGUoZnMsIEdSUFFVT1RBKTsKKwl9CisKKwlxdW90YV9yZWxlYXNlX2NvbnRleHQoJnFjdHgpOworCisJaWYgKCh1c3JxdW90YSA9PSBRT1BUX0VOQUJMRSkgfHwgKGdycHF1b3RhID09IFFPUFRfRU5BQkxFKSkgeworCQlmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgfD0gRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9RVU9UQTsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCX0gZWxzZSBpZiAoIWZzLT5zdXBlci0+c191c3JfcXVvdGFfaW51bSAmJgorCQkgICAhZnMtPnN1cGVyLT5zX2dycF9xdW90YV9pbnVtKSB7CisJCWZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmPSB+RVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9RVU9UQTsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCX0KKworCXJldHVybjsKK30KKworI2lmZGVmIENPTkZJR19RVU9UQQorc3RhdGljIHZvaWQgcGFyc2VfcXVvdGFfb3B0cyhjb25zdCBjaGFyICpvcHRzKQoreworCWNoYXIJKmJ1ZiwgKnRva2VuLCAqbmV4dCwgKnA7CisJaW50CWxlbjsKKworCWxlbiA9IHN0cmxlbihvcHRzKTsKKwlidWYgPSBtYWxsb2MobGVuKzEpOworCWlmICghYnVmKSB7CisJCWZwdXRzKF8oIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBxdW90YSAiCisJCQkib3B0aW9ucyFcbiIpLCBzdGRlcnIpOworCQlleGl0KDEpOworCX0KKwlzdHJjcHkoYnVmLCBvcHRzKTsKKwlmb3IgKHRva2VuID0gYnVmOyB0b2tlbiAmJiAqdG9rZW47IHRva2VuID0gbmV4dCkgeworCQlwID0gc3RyY2hyKHRva2VuLCAnLCcpOworCQluZXh0ID0gMDsKKwkJaWYgKHApIHsKKwkJCSpwID0gMDsKKwkJCW5leHQgPSBwKzE7CisJCX0KKworCQlpZiAoc3RyY21wKHRva2VuLCAidXNycXVvdGEiKSA9PSAwKSB7CisJCQl1c3JxdW90YSA9IFFPUFRfRU5BQkxFOworCQl9IGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgIl51c3JxdW90YSIpID09IDApIHsKKwkJCXVzcnF1b3RhID0gUU9QVF9ESVNBQkxFOworCQl9IGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgImdycHF1b3RhIikgPT0gMCkgeworCQkJZ3JwcXVvdGEgPSBRT1BUX0VOQUJMRTsKKwkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJeZ3JwcXVvdGEiKSA9PSAwKSB7CisJCQlncnBxdW90YSA9IFFPUFRfRElTQUJMRTsKKwkJfSBlbHNlIHsKKwkJCWZwdXRzKF8oIlxuQmFkIHF1b3RhIG9wdGlvbnMgc3BlY2lmaWVkLlxuXG4iCisJCQkJIkZvbGxvd2luZyB2YWxpZCBxdW90YSBvcHRpb25zIGFyZSBhdmFpbGFibGUgIgorCQkJCSIocGFzcyBieSBzZXBhcmF0aW5nIHdpdGggY29tbWEpOlxuIgorCQkJCSJcdFteXXVzcnF1b3RhXG4iCisJCQkJIlx0W15dZ3JwcXVvdGFcbiIKKwkJCQkiXG5cbiIpLCBzdGRlcnIpOworCQkJZnJlZShidWYpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlmcmVlKGJ1Zik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgcGFyc2VfZTJsYWJlbF9vcHRpb25zKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCit7CisJaWYgKChhcmdjIDwgMikgfHwgKGFyZ2MgPiAzKSkgeworCQlmcHV0cyhfKCJVc2FnZTogZTJsYWJlbCBkZXZpY2UgW25ld2xhYmVsXVxuIiksIHN0ZGVycik7CisJCWV4aXQoMSk7CisJfQorCWlvX29wdGlvbnMgPSBzdHJjaHIoYXJndlsxXSwgJz8nKTsKKwlpZiAoaW9fb3B0aW9ucykKKwkJKmlvX29wdGlvbnMrKyA9IDA7CisJZGV2aWNlX25hbWUgPSBibGtpZF9nZXRfZGV2bmFtZShOVUxMLCBhcmd2WzFdLCBOVUxMKTsKKwlpZiAoIWRldmljZV9uYW1lKSB7CisJCWNvbV9lcnIoImUybGFiZWwiLCAwLCBfKCJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIiksCisJCQlhcmd2WzFdKTsKKwkJZXhpdCgxKTsKKwl9CisJb3Blbl9mbGFnID0gRVhUMl9GTEFHX0pPVVJOQUxfREVWX09LOworCWlmIChhcmdjID09IDMpIHsKKwkJb3Blbl9mbGFnIHw9IEVYVDJfRkxBR19SVzsKKwkJTF9mbGFnID0gMTsKKwkJbmV3X2xhYmVsID0gYXJndlsyXTsKKwl9IGVsc2UKKwkJcHJpbnRfbGFiZWwrKzsKK30KKworc3RhdGljIHRpbWVfdCBwYXJzZV90aW1lKGNoYXIgKnN0cikKK3sKKwlzdHJ1Y3QJdG0JdHM7CisKKwlpZiAoc3RyY21wKHN0ciwgIm5vdyIpID09IDApIHsKKwkJcmV0dXJuICh0aW1lKDApKTsKKwl9CisJbWVtc2V0KCZ0cywgMCwgc2l6ZW9mKHRzKSk7CisjaWZkZWYgSEFWRV9TVFJQVElNRQorCXN0cnB0aW1lKHN0ciwgIiVZJW0lZCVIJU0lUyIsICZ0cyk7CisjZWxzZQorCXNzY2FuZihzdHIsICIlNGQlMmQlMmQlMmQlMmQlMmQiLCAmdHMudG1feWVhciwgJnRzLnRtX21vbiwKKwkgICAgICAgJnRzLnRtX21kYXksICZ0cy50bV9ob3VyLCAmdHMudG1fbWluLCAmdHMudG1fc2VjKTsKKwl0cy50bV95ZWFyIC09IDE5MDA7CisJdHMudG1fbW9uIC09IDE7CisJaWYgKHRzLnRtX3llYXIgPCAwIHx8IHRzLnRtX21vbiA8IDAgfHwgdHMudG1fbW9uID4gMTEgfHwKKwkgICAgdHMudG1fbWRheSA8IDAgfHwgdHMudG1fbWRheSA+IDMxIHx8IHRzLnRtX2hvdXIgPiAyMyB8fAorCSAgICB0cy50bV9taW4gPiA1OSB8fCB0cy50bV9zZWMgPiA2MSkKKwkJdHMudG1fbWRheSA9IDA7CisjZW5kaWYKKwlpZiAodHMudG1fbWRheSA9PSAwKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJXygiQ291bGRuJ3QgcGFyc2UgZGF0ZS90aW1lIHNwZWNpZmllcjogJXMiKSwKKwkJCXN0cik7CisJCXVzYWdlKCk7CisJfQorCXRzLnRtX2lzZHN0ID0gLTE7CisJcmV0dXJuIChta3RpbWUoJnRzKSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3R1bmUyZnNfb3B0aW9ucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGM7CisJY2hhciAqdG1wOworCXN0cnVjdCBncm91cCAqZ3I7CisJc3RydWN0IHBhc3N3ZCAqcHc7CisJY2hhciBvcHRzdHJpbmdbMTAwXSA9ICJjOmU6Zmc6aTpqbG06bzpyOnM6dTpDOkU6STpKOkw6TTpPOlQ6VToiOworCisjaWZkZWYgQ09ORklHX1FVT1RBCisJc3RyY2F0KG9wdHN0cmluZywgIlE6Iik7CisjZW5kaWYKKwlvcGVuX2ZsYWcgPSAwOworCisJcHJpbnRmKCJ0dW5lMmZzICVzICglcylcbiIsIEUyRlNQUk9HU19WRVJTSU9OLCBFMkZTUFJPR1NfREFURSk7CisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIG9wdHN0cmluZykpICE9IEVPRikKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2MnOgorCQkJbWF4X21vdW50X2NvdW50ID0gc3RydG9sKG9wdGFyZywgJnRtcCwgMCk7CisJCQlpZiAoKnRtcCB8fCBtYXhfbW91bnRfY291bnQgPiAxNjAwMCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJiYWQgbW91bnRzIGNvdW50IC0gJXMiKSwKKwkJCQkJb3B0YXJnKTsKKwkJCQl1c2FnZSgpOworCQkJfQorCQkJaWYgKG1heF9tb3VudF9jb3VudCA9PSAwKQorCQkJCW1heF9tb3VudF9jb3VudCA9IC0xOworCQkJY19mbGFnID0gMTsKKwkJCW9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVzsKKwkJCWJyZWFrOworCQljYXNlICdDJzoKKwkJCW1vdW50X2NvdW50ID0gc3RydG91bChvcHRhcmcsICZ0bXAsIDApOworCQkJaWYgKCp0bXAgfHwgbW91bnRfY291bnQgPiAxNjAwMCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJiYWQgbW91bnRzIGNvdW50IC0gJXMiKSwKKwkJCQkJb3B0YXJnKTsKKwkJCQl1c2FnZSgpOworCQkJfQorCQkJQ19mbGFnID0gMTsKKwkJCW9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVzsKKwkJCWJyZWFrOworCQljYXNlICdlJzoKKwkJCWlmIChzdHJjbXAob3B0YXJnLCAiY29udGludWUiKSA9PSAwKQorCQkJCWVycm9ycyA9IEVYVDJfRVJST1JTX0NPTlRJTlVFOworCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgInJlbW91bnQtcm8iKSA9PSAwKQorCQkJCWVycm9ycyA9IEVYVDJfRVJST1JTX1JPOworCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgInBhbmljIikgPT0gMCkKKwkJCQllcnJvcnMgPSBFWFQyX0VSUk9SU19QQU5JQzsKKwkJCWVsc2UgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJiYWQgZXJyb3IgYmVoYXZpb3IgLSAlcyIpLAorCQkJCQlvcHRhcmcpOworCQkJCXVzYWdlKCk7CisJCQl9CisJCQllX2ZsYWcgPSAxOworCQkJb3Blbl9mbGFnID0gRVhUMl9GTEFHX1JXOworCQkJYnJlYWs7CisJCWNhc2UgJ0UnOgorCQkJZXh0ZW5kZWRfY21kID0gb3B0YXJnOworCQkJb3Blbl9mbGFnIHw9IEVYVDJfRkxBR19SVzsKKwkJCWJyZWFrOworCQljYXNlICdmJzogLyogRm9yY2UgKi8KKwkJCWZfZmxhZysrOworCQkJYnJlYWs7CisJCWNhc2UgJ2cnOgorCQkJcmVzZ2lkID0gc3RydG91bChvcHRhcmcsICZ0bXAsIDApOworCQkJaWYgKCp0bXApIHsKKwkJCQlnciA9IGdldGdybmFtKG9wdGFyZyk7CisJCQkJaWYgKGdyID09IE5VTEwpCisJCQkJCXRtcCA9IG9wdGFyZzsKKwkJCQllbHNlIHsKKwkJCQkJcmVzZ2lkID0gZ3ItPmdyX2dpZDsKKwkJCQkJKnRtcCA9IDA7CisJCQkJfQorCQkJfQorCQkJaWYgKCp0bXApIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQkJXygiYmFkIGdpZC9ncm91cCBuYW1lIC0gJXMiKSwKKwkJCQkJb3B0YXJnKTsKKwkJCQl1c2FnZSgpOworCQkJfQorCQkJZ19mbGFnID0gMTsKKwkJCW9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVzsKKwkJCWJyZWFrOworCQljYXNlICdpJzoKKwkJCWludGVydmFsID0gc3RydG91bChvcHRhcmcsICZ0bXAsIDApOworCQkJc3dpdGNoICgqdG1wKSB7CisJCQljYXNlICdzJzoKKwkJCQl0bXArKzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1wwJzoKKwkJCWNhc2UgJ2QnOgorCQkJY2FzZSAnRCc6IC8qIGRheXMgKi8KKwkJCQlpbnRlcnZhbCAqPSA4NjQwMDsKKwkJCQlpZiAoKnRtcCAhPSAnXDAnKQorCQkJCQl0bXArKzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ20nOgorCQkJY2FzZSAnTSc6IC8qIG1vbnRocyEgKi8KKwkJCQlpbnRlcnZhbCAqPSA4NjQwMCAqIDMwOworCQkJCXRtcCsrOworCQkJCWJyZWFrOworCQkJY2FzZSAndyc6CisJCQljYXNlICdXJzogLyogd2Vla3MgKi8KKwkJCQlpbnRlcnZhbCAqPSA4NjQwMCAqIDc7CisJCQkJdG1wKys7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoKnRtcCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJiYWQgaW50ZXJ2YWwgLSAlcyIpLCBvcHRhcmcpOworCQkJCXVzYWdlKCk7CisJCQl9CisJCQlpX2ZsYWcgPSAxOworCQkJb3Blbl9mbGFnID0gRVhUMl9GTEFHX1JXOworCQkJYnJlYWs7CisJCWNhc2UgJ2onOgorCQkJaWYgKCFqb3VybmFsX3NpemUpCisJCQkJam91cm5hbF9zaXplID0gLTE7CisJCQlvcGVuX2ZsYWcgPSBFWFQyX0ZMQUdfUlc7CisJCQlicmVhazsKKwkJY2FzZSAnSic6CisJCQlwYXJzZV9qb3VybmFsX29wdHMob3B0YXJnKTsKKwkJCW9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVzsKKwkJCWJyZWFrOworCQljYXNlICdsJzoKKwkJCWxfZmxhZyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnTCc6CisJCQluZXdfbGFiZWwgPSBvcHRhcmc7CisJCQlMX2ZsYWcgPSAxOworCQkJb3Blbl9mbGFnIHw9IEVYVDJfRkxBR19SVyB8CisJCQkJRVhUMl9GTEFHX0pPVVJOQUxfREVWX09LOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJcmVzZXJ2ZWRfcmF0aW8gPSBzdHJ0b2Qob3B0YXJnLCAmdG1wKTsKKwkJCWlmICgqdG1wIHx8IHJlc2VydmVkX3JhdGlvID4gNTAgfHwKKwkJCSAgICByZXNlcnZlZF9yYXRpbyA8IDApIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQkJXygiYmFkIHJlc2VydmVkIGJsb2NrIHJhdGlvIC0gJXMiKSwKKwkJCQkJb3B0YXJnKTsKKwkJCQl1c2FnZSgpOworCQkJfQorCQkJbV9mbGFnID0gMTsKKwkJCW9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVzsKKwkJCWJyZWFrOworCQljYXNlICdNJzoKKwkJCW5ld19sYXN0X21vdW50ZWQgPSBvcHRhcmc7CisJCQlNX2ZsYWcgPSAxOworCQkJb3Blbl9mbGFnID0gRVhUMl9GTEFHX1JXOworCQkJYnJlYWs7CisJCWNhc2UgJ28nOgorCQkJaWYgKG1udG9wdHNfY21kKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQkJCV8oIi1vIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIikpOworCQkJCXVzYWdlKCk7CisJCQl9CisJCQltbnRvcHRzX2NtZCA9IG9wdGFyZzsKKwkJCW9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVzsKKwkJCWJyZWFrOworCQljYXNlICdPJzoKKwkJCWlmIChmZWF0dXJlc19jbWQpIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCQkJXygiLU8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiKSk7CisJCQkJdXNhZ2UoKTsKKwkJCX0KKwkJCWZlYXR1cmVzX2NtZCA9IG9wdGFyZzsKKwkJCW9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVzsKKwkJCWJyZWFrOworI2lmZGVmIENPTkZJR19RVU9UQQorCQljYXNlICdRJzoKKwkJCVFfZmxhZyA9IDE7CisJCQlwYXJzZV9xdW90YV9vcHRzKG9wdGFyZyk7CisJCQlvcGVuX2ZsYWcgPSBFWFQyX0ZMQUdfUlc7CisJCQlicmVhazsKKyNlbmRpZgorCQljYXNlICdyJzoKKwkJCXJlc2VydmVkX2Jsb2NrcyA9IHN0cnRvdWwob3B0YXJnLCAmdG1wLCAwKTsKKwkJCWlmICgqdG1wKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJCV8oImJhZCByZXNlcnZlZCBibG9ja3MgY291bnQgLSAlcyIpLAorCQkJCQlvcHRhcmcpOworCQkJCXVzYWdlKCk7CisJCQl9CisJCQlyX2ZsYWcgPSAxOworCQkJb3Blbl9mbGFnID0gRVhUMl9GTEFHX1JXOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOiAvKiBEZXByZWNhdGVkICovCisJCQlzX2ZsYWcgPSBhdG9pKG9wdGFyZyk7CisJCQlvcGVuX2ZsYWcgPSBFWFQyX0ZMQUdfUlc7CisJCQlicmVhazsKKwkJY2FzZSAnVCc6CisJCQlUX2ZsYWcgPSAxOworCQkJbGFzdF9jaGVja190aW1lID0gcGFyc2VfdGltZShvcHRhcmcpOworCQkJb3Blbl9mbGFnID0gRVhUMl9GTEFHX1JXOworCQkJYnJlYWs7CisJCWNhc2UgJ3UnOgorCQkJCXJlc3VpZCA9IHN0cnRvdWwob3B0YXJnLCAmdG1wLCAwKTsKKwkJCQlpZiAoKnRtcCkgeworCQkJCQlwdyA9IGdldHB3bmFtKG9wdGFyZyk7CisJCQkJCWlmIChwdyA9PSBOVUxMKQorCQkJCQkJdG1wID0gb3B0YXJnOworCQkJCQllbHNlIHsKKwkJCQkJCXJlc3VpZCA9IHB3LT5wd191aWQ7CisJCQkJCQkqdG1wID0gMDsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoKnRtcCkgeworCQkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQkJCV8oImJhZCB1aWQvdXNlciBuYW1lIC0gJXMiKSwKKwkJCQkJCW9wdGFyZyk7CisJCQkJCXVzYWdlKCk7CisJCQkJfQorCQkJCXVfZmxhZyA9IDE7CisJCQkJb3Blbl9mbGFnID0gRVhUMl9GTEFHX1JXOworCQkJCWJyZWFrOworCQljYXNlICdVJzoKKwkJCW5ld19VVUlEID0gb3B0YXJnOworCQkJVV9mbGFnID0gMTsKKwkJCW9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVyB8CisJCQkJRVhUMl9GTEFHX0pPVVJOQUxfREVWX09LOworCQkJYnJlYWs7CisJCWNhc2UgJ0knOgorCQkJbmV3X2lub2RlX3NpemUgPSBzdHJ0b3VsKG9wdGFyZywgJnRtcCwgMCk7CisJCQlpZiAoKnRtcCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJiYWQgaW5vZGUgc2l6ZSAtICVzIiksCisJCQkJCW9wdGFyZyk7CisJCQkJdXNhZ2UoKTsKKwkJCX0KKwkJCWlmICghKChuZXdfaW5vZGVfc2l6ZSAmCisJCQkgICAgICAgKG5ld19pbm9kZV9zaXplIC0gMSkpID09IDApKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJCV8oIklub2RlIHNpemUgbXVzdCBiZSBhICIKKwkJCQkJICAicG93ZXIgb2YgdHdvLSAlcyIpLAorCQkJCQlvcHRhcmcpOworCQkJCXVzYWdlKCk7CisJCQl9CisJCQlvcGVuX2ZsYWcgPSBFWFQyX0ZMQUdfUlc7CisJCQlJX2ZsYWcgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl1c2FnZSgpOworCQl9CisJaWYgKG9wdGluZCA8IGFyZ2MgLSAxIHx8IG9wdGluZCA9PSBhcmdjKQorCQl1c2FnZSgpOworCWlmICghb3Blbl9mbGFnICYmICFsX2ZsYWcpCisJCXVzYWdlKCk7CisJaW9fb3B0aW9ucyA9IHN0cmNocihhcmd2W29wdGluZF0sICc/Jyk7CisJaWYgKGlvX29wdGlvbnMpCisJCSppb19vcHRpb25zKysgPSAwOworCWRldmljZV9uYW1lID0gYmxraWRfZ2V0X2Rldm5hbWUoTlVMTCwgYXJndltvcHRpbmRdLCBOVUxMKTsKKwlpZiAoIWRldmljZV9uYW1lKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCBfKCJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIiksCisJCQlhcmd2W29wdGluZF0pOworCQlleGl0KDEpOworCX0KK30KKworI2lmZGVmIENPTkZJR19CVUlMRF9GSU5ERlMKK3ZvaWQgZG9fZmluZGZzKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljaGFyCSpkZXY7CisKKwlpZiAoKGFyZ2MgIT0gMikgfHwKKwkgICAgKHN0cm5jbXAoYXJndlsxXSwgIkxBQkVMPSIsIDYpICYmIHN0cm5jbXAoYXJndlsxXSwgIlVVSUQ9IiwgNSkpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IGZpbmRmcyBMQUJFTD08bGFiZWw+fFVVSUQ9PHV1aWQ+XG4iKTsKKwkJZXhpdCgyKTsKKwl9CisJZGV2ID0gYmxraWRfZ2V0X2Rldm5hbWUoTlVMTCwgYXJndlsxXSwgTlVMTCk7CisJaWYgKCFkZXYpIHsKKwkJY29tX2VycigiZmluZGZzIiwgMCwgXygiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIpLAorCQkJYXJndlsxXSk7CisJCWV4aXQoMSk7CisJfQorCXB1dHMoZGV2KTsKKwlleGl0KDApOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgcGFyc2VfZXh0ZW5kZWRfb3B0cyhleHQyX2ZpbHN5cyBmcywgY29uc3QgY2hhciAqb3B0cykKK3sKKwljaGFyCSpidWYsICp0b2tlbiwgKm5leHQsICpwLCAqYXJnOworCWludAlsZW4sIGhhc2hfYWxnOworCWludAlyX3VzYWdlID0gMDsKKworCWxlbiA9IHN0cmxlbihvcHRzKTsKKwlidWYgPSBtYWxsb2MobGVuKzEpOworCWlmICghYnVmKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorCQkJXygiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIG9wdGlvbnMhXG4iKSk7CisJCXJldHVybiAxOworCX0KKwlzdHJjcHkoYnVmLCBvcHRzKTsKKwlmb3IgKHRva2VuID0gYnVmOyB0b2tlbiAmJiAqdG9rZW47IHRva2VuID0gbmV4dCkgeworCQlwID0gc3RyY2hyKHRva2VuLCAnLCcpOworCQluZXh0ID0gMDsKKwkJaWYgKHApIHsKKwkJCSpwID0gMDsKKwkJCW5leHQgPSBwKzE7CisJCX0KKwkJYXJnID0gc3RyY2hyKHRva2VuLCAnPScpOworCQlpZiAoYXJnKSB7CisJCQkqYXJnID0gMDsKKwkJCWFyZysrOworCQl9CisJCWlmIChzdHJjbXAodG9rZW4sICJjbGVhci1tbXAiKSA9PSAwIHx8CisJCSAgICBzdHJjbXAodG9rZW4sICJjbGVhcl9tbXAiKSA9PSAwKSB7CisJCQljbGVhcl9tbXAgPSAxOworCQl9IGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgIm1tcF91cGRhdGVfaW50ZXJ2YWwiKSA9PSAwKSB7CisJCQl1bnNpZ25lZCBsb25nIGludHY7CisJCQlpZiAoIWFyZykgeworCQkJCXJfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWludHYgPSBzdHJ0b3VsKGFyZywgJnAsIDApOworCQkJaWYgKCpwKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIkludmFsaWQgbW1wX3VwZGF0ZV9pbnRlcnZhbDogJXNcbiIpLAorCQkJCQlhcmcpOworCQkJCXJfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChpbnR2ID09IDApIHsKKwkJCQlpbnR2ID0gRVhUNF9NTVBfVVBEQVRFX0lOVEVSVkFMOworCQkJfSBlbHNlIGlmIChpbnR2ID4gRVhUNF9NTVBfTUFYX1VQREFURV9JTlRFUlZBTCkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCJtbXBfdXBkYXRlX2ludGVydmFsIHRvbyBiaWc6ICVsdVxuIiksCisJCQkJCWludHYpOworCQkJCXJfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXByaW50ZihQXygiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSAiCisJCQkJICAiaW50ZXJ2YWwgdG8gJWx1IHNlY29uZFxuIiwKKwkJCQkgICJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlICIKKwkJCQkgICJpbnRlcnZhbCB0byAlbHUgc2Vjb25kc1xuIiwgaW50diksCisJCQkgICAgICAgaW50dik7CisJCQlmcy0+c3VwZXItPnNfbW1wX3VwZGF0ZV9pbnRlcnZhbCA9IGludHY7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgInRlc3RfZnMiKSkgeworCQkJZnMtPnN1cGVyLT5zX2ZsYWdzIHw9IEVYVDJfRkxBR1NfVEVTVF9GSUxFU1lTOworCQkJcHJpbnRmKCJTZXR0aW5nIHRlc3QgZmlsZXN5c3RlbSBmbGFnXG4iKTsKKwkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAiXnRlc3RfZnMiKSkgeworCQkJZnMtPnN1cGVyLT5zX2ZsYWdzICY9IH5FWFQyX0ZMQUdTX1RFU1RfRklMRVNZUzsKKwkJCXByaW50ZigiQ2xlYXJpbmcgdGVzdCBmaWxlc3lzdGVtIGZsYWdcbiIpOworCQkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQl9IGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgInN0cmlkZSIpID09IDApIHsKKwkJCWlmICghYXJnKSB7CisJCQkJcl91c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3RyaWRlID0gc3RydG91bChhcmcsICZwLCAwKTsKKwkJCWlmICgqcCkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCJJbnZhbGlkIFJBSUQgc3RyaWRlOiAlc1xuIiksCisJCQkJCWFyZyk7CisJCQkJcl91c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3RyaWRlX3NldCA9IDE7CisJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAic3RyaXBlLXdpZHRoIikgPT0gMCB8fAorCQkJICAgc3RyY21wKHRva2VuLCAic3RyaXBlX3dpZHRoIikgPT0gMCkgeworCQkJaWYgKCFhcmcpIHsKKwkJCQlyX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzdHJpcGVfd2lkdGggPSBzdHJ0b3VsKGFyZywgJnAsIDApOworCQkJaWYgKCpwKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIkludmFsaWQgUkFJRCBzdHJpcGUtd2lkdGg6ICVzXG4iKSwKKwkJCQkJYXJnKTsKKwkJCQlyX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzdHJpcGVfd2lkdGhfc2V0ID0gMTsKKwkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJoYXNoX2FsZyIpID09IDAgfHwKKwkJCSAgIHN0cmNtcCh0b2tlbiwgImhhc2gtYWxnIikgPT0gMCkgeworCQkJaWYgKCFhcmcpIHsKKwkJCQlyX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQloYXNoX2FsZyA9IGUycF9zdHJpbmcyaGFzaChhcmcpOworCQkJaWYgKGhhc2hfYWxnIDwgMCkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCJJbnZhbGlkIGhhc2ggYWxnb3JpdGhtOiAlc1xuIiksCisJCQkJCWFyZyk7CisJCQkJcl91c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZnMtPnN1cGVyLT5zX2RlZl9oYXNoX3ZlcnNpb24gPSBoYXNoX2FsZzsKKwkJCXByaW50ZihfKCJTZXR0aW5nIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gIgorCQkJCSAidG8gJXMgKCVkKVxuIiksCisJCQkgICAgICAgYXJnLCBoYXNoX2FsZyk7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgIm1vdW50X29wdHMiKSkgeworCQkJaWYgKCFhcmcpIHsKKwkJCQlyX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc3RybGVuKGFyZykgPj0gc2l6ZW9mKGZzLT5zdXBlci0+c19tb3VudF9vcHRzKSkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkiRXh0ZW5kZWQgbW91bnQgb3B0aW9ucyB0b28gbG9uZ1xuIik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlleHRfbW91bnRfb3B0cyA9IHN0cmR1cChhcmcpOworCQl9IGVsc2UKKwkJCXJfdXNhZ2UrKzsKKwl9CisJaWYgKHJfdXNhZ2UpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIF8oIlxuQmFkIG9wdGlvbnMgc3BlY2lmaWVkLlxuXG4iCisJCQkiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgIgorCQkJImFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorCQkJIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cblxuIgorCQkJIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorCQkJIlx0Y2xlYXJfbW1wXG4iCisJCQkiXHRoYXNoX2FsZz08aGFzaCBhbGdvcml0aG0+XG4iCisJCQkiXHRtb3VudF9vcHRzPTxleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnM+XG4iCisJCQkiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgY2h1bmsgc2l6ZSBpbiBibG9ja3M+XG4iCisJCQkiXHRzdHJpcGVfd2lkdGg9PFJBSUQgc3RyaWRlKmRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorCQkJIlx0dGVzdF9mc1xuIgorCQkJIlx0XnRlc3RfZnNcbiIpKTsKKwkJZnJlZShidWYpOworCQlyZXR1cm4gMTsKKwl9CisJZnJlZShidWYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGaWxsIGluIHRoZSBibG9jayBiaXRtYXAgYm1hcCB3aXRoIHRoZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlCisgKiBibG9ja3MgdG8gYmUgbW92ZWQKKyAqLworc3RhdGljIGludCBnZXRfbW92ZV9iaXRtYXBzKGV4dDJfZmlsc3lzIGZzLCBpbnQgbmV3X2lub19ibGtzX3Blcl9ncnAsCisJCQkgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwKQoreworCWRncnBfdCBpOworCWludCByZXR2YWw7CisJZXh0Ml9iYWRibG9ja3NfbGlzdCBiYl9saXN0ID0gMDsKKwlibGs2NF90IGosIG5lZWRlZF9ibG9ja3MgPSAwOworCWJsazY0X3Qgc3RhcnRfYmxrLCBlbmRfYmxrOworCisJcmV0dmFsID0gZXh0MmZzX3JlYWRfYmJfaW5vZGUoZnMsICZiYl9saXN0KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJc3RhcnRfYmxrID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkgKworCQkJCQlmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKworCQllbmRfYmxrID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkgKworCQkJCQluZXdfaW5vX2Jsa3NfcGVyX2dycDsKKworCQlmb3IgKGogPSBzdGFydF9ibGs7IGogPCBlbmRfYmxrOyBqKyspIHsKKwkJCWlmIChleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsIGopKSB7CisJCQkJLyoKKwkJCQkgKiBJRiB0aGUgYmxvY2sgaXMgYSBiYWQgYmxvY2sgd2UgZmFpbAorCQkJCSAqLworCQkJCWlmIChleHQyZnNfYmFkYmxvY2tzX2xpc3RfdGVzdChiYl9saXN0LCBqKSkgeworCQkJCQlleHQyZnNfYmFkYmxvY2tzX2xpc3RfZnJlZShiYl9saXN0KTsKKwkJCQkJcmV0dXJuIEVOT1NQQzsKKwkJCQl9CisKKwkJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGJtYXAsIGopOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIFdlIGFyZSBnb2luZyB0byB1c2UgdGhpcyBibG9jayBmb3IKKwkJCQkgKiBpbm9kZSB0YWJsZS4gU28gbWFyayB0aGVtIHVzZWQuCisJCQkJICovCisJCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLCBqKTsKKwkJCX0KKwkJfQorCQluZWVkZWRfYmxvY2tzICs9IGVuZF9ibGsgLSBzdGFydF9ibGs7CisJfQorCisJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2ZyZWUoYmJfbGlzdCk7CisJaWYgKG5lZWRlZF9ibG9ja3MgPiBleHQyZnNfZnJlZV9ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkKKwkJcmV0dXJuIEVOT1NQQzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV4dDJmc19pc19tZXRhX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90IGJsaykKK3sKKwlkZ3JwX3QgZ3JvdXA7CisJZ3JvdXAgPSBleHQyZnNfZ3JvdXBfb2ZfYmxrMihmcywgYmxrKTsKKwlpZiAoZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGdyb3VwKSA9PSBibGspCisJCXJldHVybiAxOworCWlmIChleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgZ3JvdXApID09IGJsaykKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXh0MmZzX2lzX2Jsb2NrX2luX2dyb3VwKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsIGJsazY0X3QgYmxrKQoreworCWJsazY0X3Qgc3RhcnRfYmxrLCBlbmRfYmxrOworCXN0YXJ0X2JsayA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrICsKKwkJCUVYVDJfR1JPVVBTX1RPX0JMT0NLUyhmcy0+c3VwZXIsIGdyb3VwKTsKKwkvKgorCSAqIFdlIGNhbm5vdCBnZXQgbmV3IGJsb2NrIGJleW9uZCBlbmRfYmxrIGZvciBmb3IgdGhlIGxhc3QgYmxvY2sgZ3JvdXAKKwkgKiBzbyB3ZSBjYW4gY2hlY2sgd2l0aCBFWFQyX0JMT0NLU19QRVJfR1JPVVAgZXZlbiBmb3IgbGFzdCBibG9jayBncm91cAorCSAqLworCWVuZF9ibGsgICA9IHN0YXJ0X2JsayArIEVYVDJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c3VwZXIpOworCWlmIChibGsgPj0gc3RhcnRfYmxrICYmIGJsayA8PSBlbmRfYmxrKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtb3ZlX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBleHQyZnNfYmxvY2tfYml0bWFwIGJtYXApCit7CisKKwljaGFyICpidWY7CisJZGdycF90IGdyb3VwID0gMDsKKwllcnJjb2RlX3QgcmV0dmFsOworCWludCBtZXRhX2RhdGEgPSAwOworCWJsazY0X3QgYmxrLCBuZXdfYmxrLCBnb2FsOworCXN0cnVjdCBibGtfbW92ZSAqYm12OworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSwgJmJ1Zik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWZvciAobmV3X2JsayA9IGJsayA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCSAgICAgYmxrIDwgZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOyBibGsrKykgeworCQlpZiAoIWV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoYm1hcCwgYmxrKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChleHQyZnNfaXNfbWV0YV9ibG9jayhmcywgYmxrKSkgeworCQkJLyoKKwkJCSAqIElmIHRoZSBibG9jayBpcyBtYXBwaW5nIGEgZnMgbWV0YSBkYXRhIGJsb2NrCisJCQkgKiBsaWtlIGdyb3VwIGRlc2MvYmxvY2sgYml0bWFwL2lub2RlIGJpdG1hcC4gV2UKKwkJCSAqIHNob3VsZCBmaW5kIGEgYmxvY2sgaW4gdGhlIHNhbWUgZ3JvdXAgYW5kIGZpeAorCQkJICogdGhlIHJlc3BlY3RpdmUgZnMgbWV0YWRhdGEgcG9pbnRlcnMuIE90aGVyd2lzZQorCQkJICogZmFpbAorCQkJICovCisJCQlncm91cCA9IGV4dDJmc19ncm91cF9vZl9ibGsyKGZzLCBibGspOworCQkJZ29hbCA9IGV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZnMsIGdyb3VwKTsKKwkJCW1ldGFfZGF0YSA9IDE7CisKKwkJfSBlbHNlIHsKKwkJCWdvYWwgPSBuZXdfYmxrOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19uZXdfYmxvY2syKGZzLCBnb2FsLCBOVUxMLCAmbmV3X2Jsayk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJLyogbmV3IGZzIG1ldGEgZGF0YSBibG9jayBzaG91bGQgYmUgaW4gdGhlIHNhbWUgZ3JvdXAgKi8KKwkJaWYgKG1ldGFfZGF0YSAmJiAhZXh0MmZzX2lzX2Jsb2NrX2luX2dyb3VwKGZzLCBncm91cCwgbmV3X2JsaykpIHsKKwkJCXJldHZhbCA9IEVOT1NQQzsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCisJCS8qIE1hcmsgdGhpcyBibG9jayBhcyBhbGxvY2F0ZWQgKi8KKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLCBuZXdfYmxrKTsKKworCQkvKiBBZGQgaXQgdG8gYmxvY2sgbW92ZSBsaXN0ICovCisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgYmxrX21vdmUpLCAmYm12KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyX291dDsKKworCQlibXYtPm9sZF9sb2MgPSBibGs7CisJCWJtdi0+bmV3X2xvYyA9IG5ld19ibGs7CisKKwkJbGlzdF9hZGQoJihibXYtPmxpc3QpLCAmYmxrX21vdmVfbGlzdCk7CisKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbywgYmxrLCAxLCBidWYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJfb3V0OworCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBuZXdfYmxrLCAxLCBidWYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJfb3V0OworCX0KKworZXJyX291dDoKKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGJsazY0X3QgdHJhbnNsYXRlX2Jsb2NrKGJsazY0X3QgYmxrKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworCXN0cnVjdCBibGtfbW92ZSAqYm12OworCisJbGlzdF9mb3JfZWFjaChlbnRyeSwgJmJsa19tb3ZlX2xpc3QpIHsKKwkJYm12ID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IGJsa19tb3ZlLCBsaXN0KTsKKwkJaWYgKGJtdi0+b2xkX2xvYyA9PSBibGspCisJCQlyZXR1cm4gYm12LT5uZXdfbG9jOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfYmxvY2soZXh0Ml9maWxzeXMgZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJIGJsazY0X3QgKmJsb2NrX25yLAorCQkJIGUyX2Jsa2NudF90IGJsb2NrY250IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgaW50IHJlZl9vZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlibGs2NF90IG5ld19ibGs7CisJZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwID0gKGV4dDJmc19ibG9ja19iaXRtYXApIHByaXZfZGF0YTsKKworCWlmICghZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihibWFwLCAqYmxvY2tfbnIpKQorCQlyZXR1cm4gMDsKKwluZXdfYmxrID0gdHJhbnNsYXRlX2Jsb2NrKCpibG9ja19ucik7CisJaWYgKG5ld19ibGspIHsKKwkJKmJsb2NrX25yID0gbmV3X2JsazsKKwkJLyoKKwkJICogVGhpcyB3aWxsIGZvcmNlIHRoZSBleHQyZnNfd3JpdGVfaW5vZGUgaW4gdGhlIGl0ZXJhdG9yCisJCSAqLworCQlyZXQgfD0gQkxPQ0tfQ0hBTkdFRDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlub2RlX3NjYW5fYW5kX2ZpeChleHQyX2ZpbHN5cyBmcywgZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwKQoreworCWVycmNvZGVfdCByZXR2YWwgPSAwOworCWV4dDJfaW5vX3QgaW5vOworCWJsazY0X3QgYmxrOworCWNoYXIgKmJsb2NrX2J1ZiA9IDA7CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisJZXh0Ml9pbm9kZV9zY2FuCXNjYW4gPSBOVUxMOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSAqIDMsICZibG9ja19idWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfb3Blbl9pbm9kZV9zY2FuKGZzLCAwLCAmc2Nhbik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfb3V0OworCisJd2hpbGUgKDEpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9uZXh0X2lub2RlKHNjYW4sICZpbm8sICZpbm9kZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJaWYgKCFpbm8pCisJCQlicmVhazsKKworCQlpZiAoaW5vZGUuaV9saW5rc19jb3VudCA9PSAwKQorCQkJY29udGludWU7IC8qIGlub2RlIG5vdCBpbiB1c2UgKi8KKworCQkvKiBGSVhNRSEhCisJCSAqIElmIHdlIGVuZCB1cCBtb2RpZnlpbmcgdGhlIGpvdXJuYWwgaW5vZGUKKwkJICogdGhlIHNiLT5zX2pubF9ibG9ja3Mgd2lsbCBkaWZmZXIuIEJ1dCBhCisJCSAqIHN1YnNlcXVlbnQgZTJmc2NrIGZpeGVzIHRoYXQuCisJCSAqIERvIHdlIG5lZWQgdG8gZml4IHRoaXMgPz8KKwkJICovCisKKwkJaWYgKGV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgJmlub2RlKSAmJgorCQkgICAgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihibWFwLAorCQkJCQlleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsICZpbm9kZSkpKSB7CisJCQlibGsgPSB0cmFuc2xhdGVfYmxvY2soZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLAorCQkJCQkJCQkgICAgJmlub2RlKSk7CisJCQlpZiAoIWJsaykKKwkJCQljb250aW51ZTsKKworCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrX3NldChmcywgJmlub2RlLCBibGspOworCisJCQkvKgorCQkJICogV3JpdGUgdGhlIGlub2RlIHRvIGRpc2sgc28gdGhhdCBpbm9kZSB0YWJsZQorCQkJICogcmVzaXppbmcgY2FuIHdvcmsKKwkJCSAqLworCQkJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGZzLCBpbm8sICZpbm9kZSk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZXJyX291dDsKKwkJfQorCisJCWlmICghZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyKGZzLCAmaW5vZGUpKQorCQkJY29udGludWU7CisKKwkJcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBpbm8sIDAsIGJsb2NrX2J1ZiwKKwkJCQkJICAgICAgIHByb2Nlc3NfYmxvY2ssIGJtYXApOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJfb3V0OworCisJfQorCitlcnJfb3V0OgorCWV4dDJmc19mcmVlX21lbSgmYmxvY2tfYnVmKTsKKwlleHQyZnNfY2xvc2VfaW5vZGVfc2NhbihzY2FuKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBXZSBuZWVkIHRvIHNjYW4gZm9yIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIHRoYXQgbWF5IG5lZWQgdG8gYmUKKyAqIG1vdmVkLiAgVGhpcyBjYW4gdGFrZSBwbGFjZSBpZiB0aGUgZmlsZXN5c3RlbSB3YXMgZm9ybWF0dGVkIGZvcgorICogUkFJRCBhcnJheXMgdXNpbmcgdGhlIG1rZTJmcydzIGV4dGVuZGVkIG9wdGlvbiAic3RyaWRlIi4KKyAqLworc3RhdGljIGludCBncm91cF9kZXNjX3NjYW5fYW5kX2ZpeChleHQyX2ZpbHN5cyBmcywgZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwKQoreworCWRncnBfdCBpOworCWJsazY0X3QgYmxrLCBuZXdfYmxrOworCisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJYmxrID0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpOworCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihibWFwLCBibGspKSB7CisJCQluZXdfYmxrID0gdHJhbnNsYXRlX2Jsb2NrKGJsayk7CisJCQlpZiAoIW5ld19ibGspCisJCQkJY29udGludWU7CisJCQlleHQyZnNfYmxvY2tfYml0bWFwX2xvY19zZXQoZnMsIGksIG5ld19ibGspOworCQl9CisKKwkJYmxrID0gZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpOworCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihibWFwLCBibGspKSB7CisJCQluZXdfYmxrID0gdHJhbnNsYXRlX2Jsb2NrKGJsayk7CisJCQlpZiAoIW5ld19ibGspCisJCQkJY29udGludWU7CisJCQlleHQyZnNfaW5vZGVfYml0bWFwX2xvY19zZXQoZnMsIGksIG5ld19ibGspOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV4cGFuZF9pbm9kZV90YWJsZShleHQyX2ZpbHN5cyBmcywgdW5zaWduZWQgbG9uZyBuZXdfaW5vX3NpemUpCit7CisJZGdycF90IGk7CisJYmxrNjRfdCBibGs7CisJZXJyY29kZV90IHJldHZhbDsKKwlpbnQgbmV3X2lub19ibGtzX3Blcl9ncnA7CisJdW5zaWduZWQgaW50IGo7CisJY2hhciAqb2xkX2l0YWJsZSA9IE5VTEwsICpuZXdfaXRhYmxlID0gTlVMTDsKKwljaGFyICp0bXBfb2xkX2l0YWJsZSA9IE5VTEwsICp0bXBfbmV3X2l0YWJsZSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBvbGRfaW5vX3NpemU7CisJaW50IG9sZF9pdGFibGVfc2l6ZSwgbmV3X2l0YWJsZV9zaXplOworCisJb2xkX2l0YWJsZV9zaXplID0gZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAgKiBmcy0+YmxvY2tzaXplOworCW9sZF9pbm9fc2l6ZSA9IEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpOworCisJbmV3X2lub19ibGtzX3Blcl9ncnAgPSBleHQyZnNfZGl2X2NlaWwoCisJCQkJCUVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpICoKKwkJCQkJbmV3X2lub19zaXplLAorCQkJCQlmcy0+YmxvY2tzaXplKTsKKworCW5ld19pdGFibGVfc2l6ZSA9IG5ld19pbm9fYmxrc19wZXJfZ3JwICogZnMtPmJsb2Nrc2l6ZTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKG9sZF9pdGFibGVfc2l6ZSwgJm9sZF9pdGFibGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShuZXdfaXRhYmxlX3NpemUsICZuZXdfaXRhYmxlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9vdXQ7CisKKwl0bXBfb2xkX2l0YWJsZSA9IG9sZF9pdGFibGU7CisJdG1wX25ld19pdGFibGUgPSBuZXdfaXRhYmxlOworCisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJYmxrID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSk7CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW8sIGJsaywKKwkJCQlmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCwgb2xkX2l0YWJsZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJZm9yIChqID0gMDsgaiA8IEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpOyBqKyspIHsKKwkJCW1lbWNweShuZXdfaXRhYmxlLCBvbGRfaXRhYmxlLCBvbGRfaW5vX3NpemUpOworCisJCQltZW1zZXQobmV3X2l0YWJsZStvbGRfaW5vX3NpemUsIDAsCisJCQkJCW5ld19pbm9fc2l6ZSAtIG9sZF9pbm9fc2l6ZSk7CisKKwkJCW5ld19pdGFibGUgKz0gbmV3X2lub19zaXplOworCQkJb2xkX2l0YWJsZSArPSBvbGRfaW5vX3NpemU7CisJCX0KKworCQkvKiByZXNldCB0aGUgcG9pbnRlciAqLworCQlvbGRfaXRhYmxlID0gdG1wX29sZF9pdGFibGU7CisJCW5ld19pdGFibGUgPSB0bXBfbmV3X2l0YWJsZTsKKworCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgYmxrLAorCQkJCQluZXdfaW5vX2Jsa3NfcGVyX2dycCwgbmV3X2l0YWJsZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycl9vdXQ7CisJfQorCisJLyogVXBkYXRlIHRoZSBtZXRhIGRhdGEgKi8KKwlmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCA9IG5ld19pbm9fYmxrc19wZXJfZ3JwOworCWZzLT5zdXBlci0+c19pbm9kZV9zaXplID0gbmV3X2lub19zaXplOworCitlcnJfb3V0OgorCWlmIChvbGRfaXRhYmxlKQorCQlleHQyZnNfZnJlZV9tZW0oJm9sZF9pdGFibGUpOworCisJaWYgKG5ld19pdGFibGUpCisJCWV4dDJmc19mcmVlX21lbSgmbmV3X2l0YWJsZSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IGV4dDJmc19jYWxjdWxhdGVfc3VtbWFyeV9zdGF0cyhleHQyX2ZpbHN5cyBmcykKK3sKKwlibGs2NF90CQlibGs7CisJZXh0Ml9pbm9fdAlpbm87CisJdW5zaWduZWQgaW50CWdyb3VwID0gMDsKKwl1bnNpZ25lZCBpbnQJY291bnQgPSAwOworCWludAkJdG90YWxfZnJlZSA9IDA7CisJaW50CQlncm91cF9mcmVlID0gMDsKKworCS8qCisJICogRmlyc3QgY2FsY3VsYXRlIHRoZSBibG9jayBzdGF0aXN0aWNzCisJICovCisJZm9yIChibGsgPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwkgICAgIGJsayA8IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsgYmxrKyspIHsKKwkJaWYgKCFleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcDIoZnMtPmJsb2NrX21hcCwgYmxrKSkgeworCQkJZ3JvdXBfZnJlZSsrOworCQkJdG90YWxfZnJlZSsrOworCQl9CisJCWNvdW50Kys7CisJCWlmICgoY291bnQgPT0gZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXApIHx8CisJCSAgICAoYmxrID09IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKS0xKSkgeworCQkJZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcywgZ3JvdXArKywKKwkJCQkJCQlncm91cF9mcmVlKTsKKwkJCWNvdW50ID0gMDsKKwkJCWdyb3VwX2ZyZWUgPSAwOworCQl9CisJfQorCXRvdGFsX2ZyZWUgPSBFWFQyRlNfQzJCKGZzLCB0b3RhbF9mcmVlKTsKKwlleHQyZnNfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLT5zdXBlciwgdG90YWxfZnJlZSk7CisKKwkvKgorCSAqIE5leHQsIGNhbGN1bGF0ZSB0aGUgaW5vZGUgc3RhdGlzdGljcworCSAqLworCWdyb3VwX2ZyZWUgPSAwOworCXRvdGFsX2ZyZWUgPSAwOworCWNvdW50ID0gMDsKKwlncm91cCA9IDA7CisKKwkvKiBQcm90ZWN0IGxvb3AgZnJvbSB3cmFwLWFyb3VuZCBpZiBzX2lub2Rlc19jb3VudCBtYXhlZCAqLworCWZvciAoaW5vID0gMTsgaW5vIDw9IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQgJiYgaW5vID4gMDsgaW5vKyspIHsKKwkJaWYgKCFleHQyZnNfZmFzdF90ZXN0X2lub2RlX2JpdG1hcDIoZnMtPmlub2RlX21hcCwgaW5vKSkgeworCQkJZ3JvdXBfZnJlZSsrOworCQkJdG90YWxfZnJlZSsrOworCQl9CisJCWNvdW50Kys7CisJCWlmICgoY291bnQgPT0gZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXApIHx8CisJCSAgICAoaW5vID09IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQpKSB7CisJCQlleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnRfc2V0KGZzLCBncm91cCsrLAorCQkJCQkJCWdyb3VwX2ZyZWUpOworCQkJY291bnQgPSAwOworCQkJZ3JvdXBfZnJlZSA9IDA7CisJCX0KKwl9CisJZnMtPnN1cGVyLT5zX2ZyZWVfaW5vZGVzX2NvdW50ID0gdG90YWxfZnJlZTsKKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgcG5leHQsIGhlYWQpIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dCwgcG5leHQgPSBwb3MtPm5leHQ7IHBvcyAhPSAoaGVhZCk7IFwKKwkgICAgIHBvcyA9IHBuZXh0LCBwbmV4dCA9IHBvcy0+bmV4dCkKKworc3RhdGljIHZvaWQgZnJlZV9ibGtfbW92ZV9saXN0KHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnksICp0bXA7CisJc3RydWN0IGJsa19tb3ZlICpibXY7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIHRtcCwgJmJsa19tb3ZlX2xpc3QpIHsKKwkJYm12ID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IGJsa19tb3ZlLCBsaXN0KTsKKwkJbGlzdF9kZWwoZW50cnkpOworCQlleHQyZnNfZnJlZV9tZW0oJmJtdik7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCByZXNpemVfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIHVuc2lnbmVkIGxvbmcgbmV3X3NpemUpCit7CisJZXJyY29kZV90IHJldHZhbDsKKwlpbnQgbmV3X2lub19ibGtzX3Blcl9ncnA7CisJZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwOworCisJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGVfYml0bWFwKGZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWZwdXRzKF8oIkZhaWxlZCB0byByZWFkIGlub2RlIGJpdG1hcFxuIiksIHN0ZGVycik7CisJCXJldHVybiByZXR2YWw7CisJfQorCXJldHZhbCA9IGV4dDJmc19yZWFkX2Jsb2NrX2JpdG1hcChmcyk7CisJaWYgKHJldHZhbCkgeworCQlmcHV0cyhfKCJGYWlsZWQgdG8gcmVhZCBibG9jayBiaXRtYXBcbiIpLCBzdGRlcnIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlJTklUX0xJU1RfSEVBRCgmYmxrX21vdmVfbGlzdCk7CisKKworCW5ld19pbm9fYmxrc19wZXJfZ3JwID0gZXh0MmZzX2Rpdl9jZWlsKAorCQkJCQlFWFQyX0lOT0RFU19QRVJfR1JPVVAoZnMtPnN1cGVyKSoKKwkJCQkJbmV3X3NpemUsCisJCQkJCWZzLT5ibG9ja3NpemUpOworCisJLyogV2UgbWF5IGNoYW5nZSB0aGUgZmlsZSBzeXN0ZW0uCisJICogTWFyayB0aGUgZmlsZSBzeXN0ZW0gYXMgaW52YWxpZCBzbyB0aGF0CisJICogdGhlIHVzZXIgaXMgcHJvbXB0ZWQgdG8gcnVuIGZzY2suCisJICovCisJZnMtPnN1cGVyLT5zX3N0YXRlICY9IH5FWFQyX1ZBTElEX0ZTOworCisJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcChmcywgXygiYmxvY2tzIHRvIGJlIG1vdmVkIiksCisJCQkJCQkmYm1hcCk7CisJaWYgKHJldHZhbCkgeworCQlmcHV0cyhfKCJGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2sgYml0bWFwIHdoZW4gIgorCQkJCSJpbmNyZWFzaW5nIGlub2RlIHNpemVcbiIpLCBzdGRlcnIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlyZXR2YWwgPSBnZXRfbW92ZV9iaXRtYXBzKGZzLCBuZXdfaW5vX2Jsa3NfcGVyX2dycCwgYm1hcCk7CisJaWYgKHJldHZhbCkgeworCQlmcHV0cyhfKCJOb3QgZW5vdWdoIHNwYWNlIHRvIGluY3JlYXNlIGlub2RlIHNpemUgXG4iKSwgc3RkZXJyKTsKKwkJZ290byBlcnJfb3V0OworCX0KKwlyZXR2YWwgPSBtb3ZlX2Jsb2NrKGZzLCBibWFwKTsKKwlpZiAocmV0dmFsKSB7CisJCWZwdXRzKF8oIkZhaWxlZCB0byByZWxvY2F0ZSBibG9ja3MgZHVyaW5nIGlub2RlIHJlc2l6ZSBcbiIpLAorCQkgICAgICBzdGRlcnIpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCXJldHZhbCA9IGlub2RlX3NjYW5fYW5kX2ZpeChmcywgYm1hcCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfb3V0X3VuZG87CisKKwlyZXR2YWwgPSBncm91cF9kZXNjX3NjYW5fYW5kX2ZpeChmcywgYm1hcCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfb3V0X3VuZG87CisKKwlyZXR2YWwgPSBleHBhbmRfaW5vZGVfdGFibGUoZnMsIG5ld19zaXplKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9vdXRfdW5kbzsKKworCWV4dDJmc19jYWxjdWxhdGVfc3VtbWFyeV9zdGF0cyhmcyk7CisKKwlmcy0+c3VwZXItPnNfc3RhdGUgfD0gRVhUMl9WQUxJRF9GUzsKKwkvKiBtYXJrIHN1cGVyIGJsb2NrIGFuZCBibG9jayBiaXRtYXAgYXMgZGlydHkgKi8KKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJZXh0MmZzX21hcmtfYmJfZGlydHkoZnMpOworCitlcnJfb3V0OgorCWZyZWVfYmxrX21vdmVfbGlzdCgpOworCWV4dDJmc19mcmVlX2Jsb2NrX2JpdG1hcChibWFwKTsKKworCXJldHVybiByZXR2YWw7CisKK2Vycl9vdXRfdW5kbzoKKwlmcmVlX2Jsa19tb3ZlX2xpc3QoKTsKKwlleHQyZnNfZnJlZV9ibG9ja19iaXRtYXAoYm1hcCk7CisJZnB1dHMoXygiRXJyb3IgaW4gcmVzaXppbmcgdGhlIGlub2RlIHNpemUuXG4iCisJCQkiUnVuIGUydW5kbyB0byB1bmRvIHRoZSAiCisJCQkiZmlsZSBzeXN0ZW0gY2hhbmdlcy4gXG4iKSwgc3RkZXJyKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdHVuZTJmc19zZXR1cF90ZGIoY29uc3QgY2hhciAqbmFtZSwgaW9fbWFuYWdlciAqaW9fcHRyKQoreworCWVycmNvZGVfdCByZXR2YWwgPSAwOworCWNvbnN0IGNoYXIgKnRkYl9kaXI7CisJY2hhciAqdGRiX2ZpbGU7CisJY2hhciAqZGV2X25hbWUsICp0bXBfbmFtZTsKKworI2lmIDAgLyogRklYTUUhISAqLworCS8qCisJICogQ29uZmlndXJhdGlvbiB2aWEgYSBjb25mIGZpbGUgd291bGQgYmUKKwkgKiBuaWNlCisJICovCisJcHJvZmlsZV9nZXRfc3RyaW5nKHByb2ZpbGUsICJzY3JhdGNoX2ZpbGVzIiwKKwkJCQkJImRpcmVjdG9yeSIsIDAsIDAsCisJCQkJCSZ0ZGJfZGlyKTsKKyNlbmRpZgorCXRtcF9uYW1lID0gc3RyZHVwKG5hbWUpOworCWlmICghdG1wX25hbWUpIHsKKwlhbGxvY19mbl9mYWlsOgorCQljb21fZXJyKHByb2dyYW1fbmFtZSwgRU5PTUVNLCAiJXMiLAorCQkJXygiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZGIgZmlsZW5hbWVcbiIpKTsKKwkJcmV0dXJuIEVOT01FTTsKKwl9CisJZGV2X25hbWUgPSBiYXNlbmFtZSh0bXBfbmFtZSk7CisKKwl0ZGJfZGlyID0gZ2V0ZW52KCJFMkZTUFJPR1NfVU5ET19ESVIiKTsKKwlpZiAoIXRkYl9kaXIpCisJCXRkYl9kaXIgPSAiL3Zhci9saWIvZTJmc3Byb2dzIjsKKworCWlmICghc3RyY21wKHRkYl9kaXIsICJub25lIikgfHwgKHRkYl9kaXJbMF0gPT0gMCkgfHwKKwkgICAgYWNjZXNzKHRkYl9kaXIsIFdfT0spKQorCQlyZXR1cm4gMDsKKworCXRkYl9maWxlID0gbWFsbG9jKHN0cmxlbih0ZGJfZGlyKSArIDkgKyBzdHJsZW4oZGV2X25hbWUpICsgNyArIDEpOworCWlmICghdGRiX2ZpbGUpCisJCWdvdG8gYWxsb2NfZm5fZmFpbDsKKwlzcHJpbnRmKHRkYl9maWxlLCAiJXMvdHVuZTJmcy0lcy5lMnVuZG8iLCB0ZGJfZGlyLCBkZXZfbmFtZSk7CisKKwlpZiAoKHVubGluayh0ZGJfZmlsZSkgPCAwKSAmJiAoZXJybm8gIT0gRU5PRU5UKSkgeworCQlyZXR2YWwgPSBlcnJubzsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwKKwkJCV8oIndoaWxlIHRyeWluZyB0byBkZWxldGUgJXMiKSwgdGRiX2ZpbGUpOworCQlmcmVlKHRkYl9maWxlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlzZXRfdW5kb19pb19iYWNraW5nX21hbmFnZXIoKmlvX3B0cik7CisJKmlvX3B0ciA9IHVuZG9faW9fbWFuYWdlcjsKKwlzZXRfdW5kb19pb19iYWNrdXBfZmlsZSh0ZGJfZmlsZSk7CisJcHJpbnRmKF8oIlRvIHVuZG8gdGhlIHR1bmUyZnMgb3BlcmF0aW9uIHBsZWFzZSBydW4gIgorCQkgInRoZSBjb21tYW5kXG4gICAgZTJ1bmRvICVzICVzXG5cbiIpLAorCQkgdGRiX2ZpbGUsIG5hbWUpOworCWZyZWUodGRiX2ZpbGUpOworCWZyZWUodG1wX25hbWUpOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludAorZnNfdXBkYXRlX2pvdXJuYWxfdXNlcihzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IsIF9fdTggb2xkX3V1aWRbVVVJRF9TSVpFXSkKK3sKKwlpbnQgcmV0dmFsLCBucl91c2Vycywgc3RhcnQ7CisJam91cm5hbF9zdXBlcmJsb2NrX3QgKmpzYjsKKwlleHQyX2ZpbHN5cyBqZnM7CisJX191OCAqal91dWlkOworCWNoYXIgKmpvdXJuYWxfcGF0aDsKKwljaGFyIHV1aWRbVVVJRF9TVFJfU0laRV07CisJY2hhciBidWZbU1VQRVJCTE9DS19TSVpFXTsKKworCWlmICghKHNiLT5zX2ZlYXR1cmVfY29tcGF0ICYgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCkgfHwKKwkJdXVpZF9pc19udWxsKHNiLT5zX2pvdXJuYWxfdXVpZCkpCisJCXJldHVybiAwOworCisJdXVpZF91bnBhcnNlKHNiLT5zX2pvdXJuYWxfdXVpZCwgdXVpZCk7CisJam91cm5hbF9wYXRoID0gYmxraWRfZ2V0X2Rldm5hbWUoTlVMTCwgIlVVSUQiLCB1dWlkKTsKKwlpZiAoIWpvdXJuYWxfcGF0aCkKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBleHQyZnNfb3BlbjIoam91cm5hbF9wYXRoLCBpb19vcHRpb25zLAorCQkJICAgICAgRVhUMl9GTEFHX0pPVVJOQUxfREVWX09LIHwgRVhUMl9GTEFHX1JXLAorCQkJICAgICAgMCwgMCwgdW5peF9pb19tYW5hZ2VyLCAmamZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLAorCQkJam91cm5hbF9wYXRoKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyZXR2YWwgPSBnZXRfam91cm5hbF9zYihqZnMsIGJ1Zik7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9VTlNVUFBfRkVBVFVSRSkKKwkJCWZwcmludGYoc3RkZXJyLCBfKCIlcyBpcyBub3QgYSBqb3VybmFsIGRldmljZS5cbiIpLAorCQkJCWpvdXJuYWxfcGF0aCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJanNiID0gKGpvdXJuYWxfc3VwZXJibG9ja190ICopIGJ1ZjsKKwkvKiBGaW5kIHRoZSBmaWxlc3lzdGVtIFVVSUQgKi8KKwlucl91c2VycyA9IG50b2hsKGpzYi0+c19ucl91c2Vycyk7CisKKwlqX3V1aWQgPSBqb3VybmFsX3VzZXIob2xkX3V1aWQsIGpzYi0+c191c2VycywgbnJfdXNlcnMpOworCWlmIChqX3V1aWQgPT0gTlVMTCkgeworCQlmcHV0cyhfKCJGaWxlc3lzdGVtJ3MgVVVJRCBub3QgZm91bmQgb24gam91cm5hbCBkZXZpY2UuXG4iKSwKKwkJICAgICAgc3RkZXJyKTsKKwkJcmV0dXJuIEVYVDJfRVRfTE9BRF9FWFRfSk9VUk5BTDsKKwl9CisKKwltZW1jcHkoal91dWlkLCBzYi0+c191dWlkLCBVVUlEX1NJWkUpOworCisJc3RhcnQgPSBleHQyZnNfam91cm5hbF9zYl9zdGFydChqZnMtPmJsb2Nrc2l6ZSk7CisJLyogV3JpdGUgYmFjayB0aGUgam91cm5hbCBzdXBlcmJsb2NrICovCisJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChqZnMtPmlvLCBzdGFydCwgLVNVUEVSQkxPQ0tfU0laRSwgYnVmKTsKKwlpZiAocmV0dmFsICE9IDApIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwKKwkJCSJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgc3VwZXJibG9jay4iKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlleHQyZnNfY2xvc2UoamZzKTsKKworCXJldHVybiAwOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXJyY29kZV90IHJldHZhbDsKKwlleHQyX2ZpbHN5cyBmczsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2I7CisJaW9fbWFuYWdlciBpb19wdHIsIGlvX3B0cl9vcmlnID0gTlVMTDsKKwlpbnQgcmMgPSAwOworCisjaWZkZWYgRU5BQkxFX05MUworCXNldGxvY2FsZShMQ19NRVNTQUdFUywgIiIpOworCXNldGxvY2FsZShMQ19DVFlQRSwgIiIpOworCWJpbmR0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSwgTE9DQUxFRElSKTsKKwl0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSk7CisJc2V0X2NvbV9lcnJfZ2V0dGV4dChnZXR0ZXh0KTsKKyNlbmRpZgorCWlmIChhcmdjICYmICphcmd2KQorCQlwcm9ncmFtX25hbWUgPSAqYXJndjsKKwlhZGRfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworCisjaWZkZWYgQ09ORklHX0JVSUxEX0ZJTkRGUworCWlmIChzdHJjbXAoZ2V0X3Byb2duYW1lKGFyZ3ZbMF0pLCAiZmluZGZzIikgPT0gMCkKKwkJZG9fZmluZGZzKGFyZ2MsIGFyZ3YpOworI2VuZGlmCisJaWYgKHN0cmNtcChnZXRfcHJvZ25hbWUoYXJndlswXSksICJlMmxhYmVsIikgPT0gMCkKKwkJcGFyc2VfZTJsYWJlbF9vcHRpb25zKGFyZ2MsIGFyZ3YpOworCWVsc2UKKwkJcGFyc2VfdHVuZTJmc19vcHRpb25zKGFyZ2MsIGFyZ3YpOworCisjaWZkZWYgQ09ORklHX1RFU1RJT19ERUJVRworCWlmIChnZXRlbnYoIlRFU1RfSU9fRkxBR1MiKSB8fCBnZXRlbnYoIlRFU1RfSU9fREVCVUciKSkgeworCQlpb19wdHIgPSB0ZXN0X2lvX21hbmFnZXI7CisJCXRlc3RfaW9fYmFja2luZ19tYW5hZ2VyID0gdW5peF9pb19tYW5hZ2VyOworCX0gZWxzZQorI2VuZGlmCisJCWlvX3B0ciA9IHVuaXhfaW9fbWFuYWdlcjsKKworcmV0cnlfb3BlbjoKKwlpZiAoKG9wZW5fZmxhZyAmIEVYVDJfRkxBR19SVykgPT0gMCB8fCBmX2ZsYWcpCisJCW9wZW5fZmxhZyB8PSBFWFQyX0ZMQUdfU0tJUF9NTVA7CisKKwlvcGVuX2ZsYWcgfD0gRVhUMl9GTEFHXzY0QklUUzsKKworCS8qIGtlZXAgdGhlIGZpbGVzeXN0ZW0gc3RydWN0IGFyb3VuZCB0byBkdW1wIE1NUCBkYXRhICovCisJb3Blbl9mbGFnIHw9IEVYVDJfRkxBR19OT0ZSRUVfT05fRVJST1I7CisKKwlyZXR2YWwgPSBleHQyZnNfb3BlbjIoZGV2aWNlX25hbWUsIGlvX29wdGlvbnMsIG9wZW5fZmxhZywKKwkJCSAgICAgIDAsIDAsIGlvX3B0ciwgJmZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLAorCQkJZGV2aWNlX25hbWUpOworCQlpZiAocmV0dmFsID09IEVYVDJfRVRfTU1QX0ZTQ0tfT04gfHwKKwkJICAgIHJldHZhbCA9PSBFWFQyX0VUX01NUF9VTktOT1dOX1NFUSkKKwkJCWR1bXBfbW1wX21zZyhmcy0+bW1wX2J1ZiwKKwkJCQkgICAgIF8oIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSAiCisJCQkJICAgICAgICJpcyBub3QgaW4gdXNlIG9uIGFueSBub2RlLCBydW46XG4iCisJCQkJICAgICAgICIndHVuZTJmcyAtZiAtRSBjbGVhcl9tbXAge2RldmljZX0nXG4iKSk7CisJCWVsc2UgaWYgKHJldHZhbCA9PSBFWFQyX0VUX01NUF9GQUlMRUQpCisJCQlkdW1wX21tcF9tc2coZnMtPm1tcF9idWYsIE5VTEwpOworCQllbHNlIGlmIChyZXR2YWwgPT0gRVhUMl9FVF9NTVBfTUFHSUNfSU5WQUxJRCkKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCV8oIk1NUCBibG9jayBtYWdpYyBpcyBiYWQuIFRyeSB0byBmaXggaXQgYnkgIgorCQkJCSAgInJ1bm5pbmc6XG4nZTJmc2NrIC1mICVzJ1xuIiksIGRldmljZV9uYW1lKTsKKwkJZWxzZSBpZiAocmV0dmFsICE9IEVYVDJfRVRfTU1QX0ZBSUxFRCkKKwkJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorCQkJICAgICBfKCJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIpKTsKKworCQlleHQyZnNfZnJlZShmcyk7CisJCWV4aXQoMSk7CisJfQorCWZzLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gRVhUMkZTX0JNQVA2NF9SQlRSRUU7CisKKwlpZiAoSV9mbGFnICYmICFpb19wdHJfb3JpZykgeworCQkvKgorCQkgKiBDaGVjayB0aGUgaW5vZGUgc2l6ZSBpcyByaWdodCBzbyB3ZSBjYW4gaXNzdWUgYW4KKwkJICogZXJyb3IgbWVzc2FnZSBhbmQgYmFpbCBiZWZvcmUgc2V0dGluZyB1cCB0aGUgdGRiCisJCSAqIGZpbGUuCisJCSAqLworCQlpZiAobmV3X2lub2RlX3NpemUgPT0gRVhUMl9JTk9ERV9TSVpFKGZzLT5zdXBlcikpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJUaGUgaW5vZGUgc2l6ZSBpcyBhbHJlYWR5ICVsdVxuIiksCisJCQkJbmV3X2lub2RlX3NpemUpOworCQkJcmMgPSAxOworCQkJZ290byBjbG9zZWZzOworCQl9CisJCWlmIChuZXdfaW5vZGVfc2l6ZSA8IEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKwkJCQlfKCJTaHJpbmtpbmcgaW5vZGUgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkXG4iKSk7CisJCQlyYyA9IDE7CisJCQlnb3RvIGNsb3NlZnM7CisJCX0KKwkJaWYgKG5ld19pbm9kZV9zaXplID4gZnMtPmJsb2Nrc2l6ZSkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIkludmFsaWQgaW5vZGUgc2l6ZSAlbHUgKG1heCAlZClcbiIpLAorCQkJCW5ld19pbm9kZV9zaXplLCBmcy0+YmxvY2tzaXplKTsKKwkJCXJjID0gMTsKKwkJCWdvdG8gY2xvc2VmczsKKwkJfQorCisJCS8qCisJCSAqIElmIGlub2RlIHJlc2l6ZSBpcyByZXF1ZXN0ZWQgdXNlIHRoZQorCQkgKiBVbmRvIEkvTyBtYW5hZ2VyCisJCSAqLworCQlpb19wdHJfb3JpZyA9IGlvX3B0cjsKKwkJcmV0dmFsID0gdHVuZTJmc19zZXR1cF90ZGIoZGV2aWNlX25hbWUsICZpb19wdHIpOworCQlpZiAocmV0dmFsKSB7CisJCQlyYyA9IDE7CisJCQlnb3RvIGNsb3NlZnM7CisJCX0KKwkJaWYgKGlvX3B0ciAhPSBpb19wdHJfb3JpZykgeworCQkJZXh0MmZzX2Nsb3NlX2ZyZWUoJmZzKTsKKwkJCWdvdG8gcmV0cnlfb3BlbjsKKwkJfQorCX0KKworCXNiID0gZnMtPnN1cGVyOworCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX01BU1RFUl9TQl9PTkxZOworCisJaWYgKHByaW50X2xhYmVsKSB7CisJCS8qIEZvciBlMmxhYmVsIGVtdWxhdGlvbiAqLworCQlwcmludGYoIiUuKnNcbiIsIChpbnQpIHNpemVvZihzYi0+c192b2x1bWVfbmFtZSksCisJCSAgICAgICBzYi0+c192b2x1bWVfbmFtZSk7CisJCXJlbW92ZV9lcnJvcl90YWJsZSgmZXRfZXh0Ml9lcnJvcl90YWJsZSk7CisJCWdvdG8gY2xvc2VmczsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfY2hlY2tfaWZfbW91bnRlZChkZXZpY2VfbmFtZSwgJm1vdW50X2ZsYWdzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJmc19jaGVja19pZl9tb3VudCIsIHJldHZhbCwKKwkJCV8oIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iKSwKKwkJCWRldmljZV9uYW1lKTsKKwkJcmMgPSAxOworCQlnb3RvIGNsb3NlZnM7CisJfQorCS8qIE5vcm1hbGx5IHdlIG9ubHkgbmVlZCB0byB3cml0ZSBvdXQgdGhlIHN1cGVyYmxvY2sgKi8KKwlmcy0+ZmxhZ3MgfD0gRVhUMl9GTEFHX1NVUEVSX09OTFk7CisKKwlpZiAoY19mbGFnKSB7CisJCXNiLT5zX21heF9tbnRfY291bnQgPSBtYXhfbW91bnRfY291bnQ7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJcHJpbnRmKF8oIlNldHRpbmcgbWF4aW1hbCBtb3VudCBjb3VudCB0byAlZFxuIiksCisJCSAgICAgICBtYXhfbW91bnRfY291bnQpOworCX0KKwlpZiAoQ19mbGFnKSB7CisJCXNiLT5zX21udF9jb3VudCA9IG1vdW50X2NvdW50OworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCXByaW50ZihfKCJTZXR0aW5nIGN1cnJlbnQgbW91bnQgY291bnQgdG8gJWRcbiIpLCBtb3VudF9jb3VudCk7CisJfQorCWlmIChlX2ZsYWcpIHsKKwkJc2ItPnNfZXJyb3JzID0gZXJyb3JzOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCXByaW50ZihfKCJTZXR0aW5nIGVycm9yIGJlaGF2aW9yIHRvICVkXG4iKSwgZXJyb3JzKTsKKwl9CisJaWYgKGdfZmxhZykgeworCQlzYi0+c19kZWZfcmVzZ2lkID0gcmVzZ2lkOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCXByaW50ZihfKCJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBnaWQgdG8gJWx1XG4iKSwgcmVzZ2lkKTsKKwl9CisJaWYgKGlfZmxhZykgeworCQlpZiAoKHVuc2lnbmVkIGxvbmcgbG9uZylpbnRlcnZhbCA+PSAoMVVMTCA8PCAzMikpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCV8oImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiKSwKKwkJCQlpbnRlcnZhbCk7CisJCQlyYyA9IDE7CisJCQlnb3RvIGNsb3NlZnM7CisJCX0KKwkJc2ItPnNfY2hlY2tpbnRlcnZhbCA9IGludGVydmFsOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCXByaW50ZihfKCJTZXR0aW5nIGludGVydmFsIGJldHdlZW4gY2hlY2tzIHRvICVsdSBzZWNvbmRzXG4iKSwKKwkJICAgICAgIGludGVydmFsKTsKKwl9CisJaWYgKG1fZmxhZykgeworCQlleHQyZnNfcl9ibG9ja3NfY291bnRfc2V0KHNiLCByZXNlcnZlZF9yYXRpbyAqCisJCQkJCSAgZXh0MmZzX2Jsb2Nrc19jb3VudChzYikgLyAxMDAuMCk7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJcHJpbnRmIChfKCJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50YWdlIHRvICVnJSUgKCVsbHUgYmxvY2tzKVxuIiksCisJCQlyZXNlcnZlZF9yYXRpbywgZXh0MmZzX3JfYmxvY2tzX2NvdW50KHNiKSk7CisJfQorCWlmIChyX2ZsYWcpIHsKKwkJaWYgKHJlc2VydmVkX2Jsb2NrcyA+IGV4dDJmc19ibG9ja3NfY291bnQoc2IpLzIpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCV8oInJlc2VydmVkIGJsb2NrcyBjb3VudCBpcyB0b28gYmlnICglbGx1KSIpLAorCQkJCXJlc2VydmVkX2Jsb2Nrcyk7CisJCQlyYyA9IDE7CisJCQlnb3RvIGNsb3NlZnM7CisJCX0KKwkJZXh0MmZzX3JfYmxvY2tzX2NvdW50X3NldChzYiwgcmVzZXJ2ZWRfYmxvY2tzKTsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQlwcmludGYoXygiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgY291bnQgdG8gJWxsdVxuIiksCisJCSAgICAgICByZXNlcnZlZF9ibG9ja3MpOworCX0KKwlpZiAoc19mbGFnID09IDEpIHsKKwkJaWYgKHNiLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYKKwkJICAgIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSKSB7CisJCQlmcHV0cyhfKCJcblRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSAiCisJCQkJInN1cGVyYmxvY2tzLlxuIiksIHN0ZGVycik7CisJCX0gZWxzZSBpZiAoc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCQlFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgeworCQkJZnB1dHMoXygiXG5TZXR0aW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCAiCisJCQkJInN1cHBvcnRlZFxuZm9yIGZpbGVzeXN0ZW1zIHdpdGggIgorCQkJCSJ0aGUgbWV0YV9iZyBmZWF0dXJlIGVuYWJsZWQuXG4iKSwKKwkJCQlzdGRlcnIpOworCQkJcmMgPSAxOworCQkJZ290byBjbG9zZWZzOworCQl9IGVsc2UgeworCQkJc2ItPnNfZmVhdHVyZV9yb19jb21wYXQgfD0KKwkJCQlFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUjsKKwkJCXNiLT5zX3N0YXRlICY9IH5FWFQyX1ZBTElEX0ZTOworCQkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQkJcHJpbnRmKF8oIlxuU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBzZXQuICAlcyIpLAorCQkJICAgICAgIF8ocGxlYXNlX2ZzY2spKTsKKwkJfQorCX0KKwlpZiAoc19mbGFnID09IDApIHsKKwkJZnB1dHMoXygiXG5DbGVhcmluZyB0aGUgc3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBub3Qgc3VwcG9ydGVkLlxuIiksCisJCSAgICAgIHN0ZGVycik7CisJCXJjID0gMTsKKwkJZ290byBjbG9zZWZzOworCX0KKwlpZiAoVF9mbGFnKSB7CisJCXNiLT5zX2xhc3RjaGVjayA9IGxhc3RfY2hlY2tfdGltZTsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQlwcmludGYoXygiU2V0dGluZyB0aW1lIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRvICVzXG4iKSwKKwkJICAgICAgIGN0aW1lKCZsYXN0X2NoZWNrX3RpbWUpKTsKKwl9CisJaWYgKHVfZmxhZykgeworCQlzYi0+c19kZWZfcmVzdWlkID0gcmVzdWlkOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCXByaW50ZihfKCJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyB1aWQgdG8gJWx1XG4iKSwgcmVzdWlkKTsKKwl9CisJaWYgKExfZmxhZykgeworCQlpZiAoc3RybGVuKG5ld19sYWJlbCkgPiBzaXplb2Yoc2ItPnNfdm9sdW1lX25hbWUpKQorCQkJZnB1dHMoXygiV2FybmluZzogbGFiZWwgdG9vIGxvbmcsIHRydW5jYXRpbmcuXG4iKSwKKwkJCSAgICAgIHN0ZGVycik7CisJCW1lbXNldChzYi0+c192b2x1bWVfbmFtZSwgMCwgc2l6ZW9mKHNiLT5zX3ZvbHVtZV9uYW1lKSk7CisJCXN0cm5jcHkoc2ItPnNfdm9sdW1lX25hbWUsIG5ld19sYWJlbCwKKwkJCXNpemVvZihzYi0+c192b2x1bWVfbmFtZSkpOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJfQorCWlmIChNX2ZsYWcpIHsKKwkJbWVtc2V0KHNiLT5zX2xhc3RfbW91bnRlZCwgMCwgc2l6ZW9mKHNiLT5zX2xhc3RfbW91bnRlZCkpOworCQlzdHJuY3B5KHNiLT5zX2xhc3RfbW91bnRlZCwgbmV3X2xhc3RfbW91bnRlZCwKKwkJCXNpemVvZihzYi0+c19sYXN0X21vdW50ZWQpKTsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCX0KKwlpZiAobW50b3B0c19jbWQpIHsKKwkJcmMgPSB1cGRhdGVfbW50b3B0cyhmcywgbW50b3B0c19jbWQpOworCQlpZiAocmMpCisJCQlnb3RvIGNsb3NlZnM7CisJfQorCWlmIChmZWF0dXJlc19jbWQpIHsKKwkJcmMgPSB1cGRhdGVfZmVhdHVyZV9zZXQoZnMsIGZlYXR1cmVzX2NtZCk7CisJCWlmIChyYykKKwkJCWdvdG8gY2xvc2VmczsKKwl9CisJaWYgKGV4dGVuZGVkX2NtZCkgeworCQlyYyA9IHBhcnNlX2V4dGVuZGVkX29wdHMoZnMsIGV4dGVuZGVkX2NtZCk7CisJCWlmIChyYykKKwkJCWdvdG8gY2xvc2VmczsKKwkJaWYgKGNsZWFyX21tcCAmJiAhZl9mbGFnKSB7CisJCQlmcHV0cyhfKCJFcnJvciBpbiB1c2luZyBjbGVhcl9tbXAuICIKKwkJCQkiSXQgbXVzdCBiZSB1c2VkIHdpdGggLWZcbiIpLAorCQkJICAgICAgc3RkZXJyKTsKKwkJCWdvdG8gY2xvc2VmczsKKwkJfQorCX0KKwlpZiAoY2xlYXJfbW1wKSB7CisJCXJjID0gZXh0MmZzX21tcF9jbGVhcihmcyk7CisJCWdvdG8gY2xvc2VmczsKKwl9CisJaWYgKGpvdXJuYWxfc2l6ZSB8fCBqb3VybmFsX2RldmljZSkgeworCQlyYyA9IGFkZF9qb3VybmFsKGZzKTsKKwkJaWYgKHJjKQorCQkJZ290byBjbG9zZWZzOworCX0KKworCWlmIChRX2ZsYWcpIHsKKwkJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKSB7CisJCQlmcHV0cyhfKCJUaGUgcXVvdGEgZmVhdHVyZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gIgorCQkJCSJ0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iKSwgc3RkZXJyKTsKKwkJCXJjID0gMTsKKwkJCWdvdG8gY2xvc2VmczsKKwkJfQorCQloYW5kbGVfcXVvdGFfb3B0aW9ucyhmcyk7CisJfQorCisJaWYgKFVfZmxhZykgeworCQlpbnQgc2V0X2NzdW0gPSAwOworCQlkZ3JwX3QgaTsKKwkJY2hhciBidWZbU1VQRVJCTE9DS19TSVpFXTsKKwkJX191OCBvbGRfdXVpZFtVVUlEX1NJWkVdOworCisJCWlmIChzYi0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJCSAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSB7CisJCQkvKgorCQkJICogQ2hhbmdpbmcgdGhlIFVVSUQgcmVxdWlyZXMgcmV3cml0aW5nIGFsbCBtZXRhZGF0YSwKKwkJCSAqIHdoaWNoIGNhbiByYWNlIHdpdGggYSBtb3VudGVkIGZzLiAgRG9uJ3QgYWxsb3cgdGhhdC4KKwkJCSAqLworCQkJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKSB7CisJCQkJZnB1dHMoXygiVGhlIFVVSUQgbWF5IG9ubHkgYmUgIgorCQkJCQkiY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzICIKKwkJCQkJInVubW91bnRlZC5cbiIpLCBzdGRlcnIpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlpZiAoY2hlY2tfZnNja19uZWVkZWQoZnMpKQorCQkJCWV4aXQoMSk7CisKKwkJCS8qCisJCQkgKiBEZXRlcm1pbmUgaWYgdGhlIGJsb2NrIGdyb3VwIGNoZWNrc3VtcyBhcmUKKwkJCSAqIGNvcnJlY3Qgc28gd2Uga25vdyB3aGV0aGVyIG9yIG5vdCB0byBzZXQKKwkJCSAqIHRoZW0gbGF0ZXIgb24uCisJCQkgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKQorCQkJCWlmICghZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV92ZXJpZnkoZnMsIGkpKQorCQkJCQlicmVhazsKKwkJCWlmIChpID49IGZzLT5ncm91cF9kZXNjX2NvdW50KQorCQkJCXNldF9jc3VtID0gMTsKKwkJfQorCisJCW1lbWNweShvbGRfdXVpZCwgc2ItPnNfdXVpZCwgVVVJRF9TSVpFKTsKKwkJaWYgKChzdHJjYXNlY21wKG5ld19VVUlELCAibnVsbCIpID09IDApIHx8CisJCSAgICAoc3RyY2FzZWNtcChuZXdfVVVJRCwgImNsZWFyIikgPT0gMCkpIHsKKwkJCXV1aWRfY2xlYXIoc2ItPnNfdXVpZCk7CisJCX0gZWxzZSBpZiAoc3RyY2FzZWNtcChuZXdfVVVJRCwgInRpbWUiKSA9PSAwKSB7CisJCQl1dWlkX2dlbmVyYXRlX3RpbWUoc2ItPnNfdXVpZCk7CisJCX0gZWxzZSBpZiAoc3RyY2FzZWNtcChuZXdfVVVJRCwgInJhbmRvbSIpID09IDApIHsKKwkJCXV1aWRfZ2VuZXJhdGUoc2ItPnNfdXVpZCk7CisJCX0gZWxzZSBpZiAodXVpZF9wYXJzZShuZXdfVVVJRCwgc2ItPnNfdXVpZCkpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCV8oIkludmFsaWQgVVVJRCBmb3JtYXRcbiIpKTsKKwkJCXJjID0gMTsKKwkJCWdvdG8gY2xvc2VmczsKKwkJfQorCQlpZiAoc2V0X2NzdW0pIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKQorCQkJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBpKTsKKwkJCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX1NVUEVSX09OTFk7CisJCX0KKworCQkvKiBJZiB0aGlzIGlzIGEgam91cm5hbCBkZXYsIHdlIG5lZWQgdG8gY29weSBVVUlEIGludG8ganNiICovCisJCWlmICghKHJjID0gZ2V0X2pvdXJuYWxfc2IoZnMsIGJ1ZikpKSB7CisJCQlqb3VybmFsX3N1cGVyYmxvY2tfdCAqanNiOworCisJCQlqc2IgPSAoam91cm5hbF9zdXBlcmJsb2NrX3QgKikgYnVmOworCQkJZnB1dHMoXygiTmVlZCB0byB1cGRhdGUgam91cm5hbCBzdXBlcmJsb2NrLlxuIiksIHN0ZG91dCk7CisJCQltZW1jcHkoanNiLT5zX3V1aWQsIHNiLT5zX3V1aWQsIHNpemVvZihzYi0+c191dWlkKSk7CisKKwkJCS8qIFdyaXRlYmFjayB0aGUgam91cm5hbCBzdXBlcmJsb2NrICovCisJCQlpZiAoKHJjID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sCisJCQkJZXh0MmZzX2pvdXJuYWxfc2Jfc3RhcnQoZnMtPmJsb2Nrc2l6ZSksCisJCQkJCS1TVVBFUkJMT0NLX1NJWkUsIGJ1ZikpKQorCQkJCWdvdG8gY2xvc2VmczsKKwkJfSBlbHNlIGlmIChyYyAhPSBFWFQyX0VUX1VOU1VQUF9GRUFUVVJFKQorCQkJZ290byBjbG9zZWZzOworCQllbHNlIHsKKwkJCXJjID0gMDsgLyoqIFJlc2V0IHJjIHRvIGF2b2lkIGV4dDJmc19tbXBfc3RvcCgpICovCisKKwkJCWlmICgocmMgPSBmc191cGRhdGVfam91cm5hbF91c2VyKHNiLCBvbGRfdXVpZCkpKQorCQkJCWdvdG8gY2xvc2VmczsKKwkJfQorCisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwl9CisJaWYgKElfZmxhZykgeworCQlpZiAobW91bnRfZmxhZ3MgJiBFWFQyX01GX01PVU5URUQpIHsKKwkJCWZwdXRzKF8oIlRoZSBpbm9kZSBzaXplIG1heSBvbmx5IGJlICIKKwkJCQkiY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzICIKKwkJCQkidW5tb3VudGVkLlxuIiksIHN0ZGVycik7CisJCQlyYyA9IDE7CisJCQlnb3RvIGNsb3NlZnM7CisJCX0KKwkJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkJICAgIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHKSB7CisJCQlmcHV0cyhfKCJDaGFuZ2luZyB0aGUgaW5vZGUgc2l6ZSBub3Qgc3VwcG9ydGVkIGZvciAiCisJCQkJImZpbGVzeXN0ZW1zIHdpdGggdGhlIGZsZXhfYmdcbiIKKwkJCQkiZmVhdHVyZSBlbmFibGVkLlxuIiksCisJCQkgICAgICBzdGRlcnIpOworCQkJcmMgPSAxOworCQkJZ290byBjbG9zZWZzOworCQl9CisJCS8qCisJCSAqIFdlIHdhbnQgdG8gdXBkYXRlIGdyb3VwIGRlc2NyaXB0b3IgYWxzbworCQkgKiB3aXRoIHRoZSBuZXcgZnJlZSBpbm9kZSBjb3VudAorCQkgKi8KKwkJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfU1VQRVJfT05MWTsKKwkJaWYgKHJlc2l6ZV9pbm9kZShmcywgbmV3X2lub2RlX3NpemUpID09IDApIHsKKwkJCXByaW50ZihfKCJTZXR0aW5nIGlub2RlIHNpemUgJWx1XG4iKSwKKwkJCQkJCQluZXdfaW5vZGVfc2l6ZSk7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIiVzIiwgXygiRmFpbGVkIHRvIGNoYW5nZSBpbm9kZSBzaXplXG4iKSk7CisJCQlyYyA9IDE7CisJCQlnb3RvIGNsb3NlZnM7CisJCX0KKwl9CisKKwlpZiAobF9mbGFnKQorCQlsaXN0X3N1cGVyKHNiKTsKKwlpZiAoc3RyaWRlX3NldCkgeworCQlzYi0+c19yYWlkX3N0cmlkZSA9IHN0cmlkZTsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQlwcmludGYoXygiU2V0dGluZyBzdHJpZGUgc2l6ZSB0byAlZFxuIiksIHN0cmlkZSk7CisJfQorCWlmIChzdHJpcGVfd2lkdGhfc2V0KSB7CisJCXNiLT5zX3JhaWRfc3RyaXBlX3dpZHRoID0gc3RyaXBlX3dpZHRoOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCXByaW50ZihfKCJTZXR0aW5nIHN0cmlwZSB3aWR0aCB0byAlZFxuIiksIHN0cmlwZV93aWR0aCk7CisJfQorCWlmIChleHRfbW91bnRfb3B0cykgeworCQlzdHJuY3B5KChjaGFyICopKGZzLT5zdXBlci0+c19tb3VudF9vcHRzKSwgZXh0X21vdW50X29wdHMsCisJCQlzaXplb2YoZnMtPnN1cGVyLT5zX21vdW50X29wdHMpKTsKKwkJZnMtPnN1cGVyLT5zX21vdW50X29wdHNbc2l6ZW9mKGZzLT5zdXBlci0+c19tb3VudF9vcHRzKS0xXSA9IDA7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJcHJpbnRmKF8oIlNldHRpbmcgZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zIHRvICclcydcbiIpLAorCQkgICAgICAgZXh0X21vdW50X29wdHMpOworCQlmcmVlKGV4dF9tb3VudF9vcHRzKTsKKwl9CisJZnJlZShkZXZpY2VfbmFtZSk7CisJcmVtb3ZlX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKworY2xvc2VmczoKKwlpZiAocmMpIHsKKwkJZXh0MmZzX21tcF9zdG9wKGZzKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlyZXR1cm4gKGV4dDJmc19jbG9zZV9mcmVlKCZmcykgPyAxIDogMCk7Cit9CmRpZmYgLS1naXQgYS9taXNjL3V0aWwuYyBiL21pc2MvdXRpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OTg4MzAKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL3V0aWwuYwpAQCAtMCwwICsxLDQ4MSBAQAorLyoKKyAqIHV0aWwuYyAtLS0gaGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IHR1bmUyZnMgYW5kIG1rZTJmcworICoKKyAqIENvcHlyaWdodCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwIGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2V0am1wLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9MSU5VWF9NQUpPUl9ICisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJldC9jb21fZXJyLmgiCisjaW5jbHVkZSAiZTJwL2UycC5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKyNpbmNsdWRlICJibGtpZC9ibGtpZC5oIgorI2luY2x1ZGUgInV0aWwuaCIKKworY2hhciAqam91cm5hbF9sb2NhdGlvbl9zdHJpbmcgPSBOVUxMOworCisjaWZuZGVmIEhBVkVfU1RSQ0FTRUNNUAoraW50IHN0cmNhc2VjbXAgKGNoYXIgKnMxLCBjaGFyICpzMikKK3sKKwl3aGlsZSAoKnMxICYmICpzMikgeworCQlpbnQgY2gxID0gKnMxKyssIGNoMiA9ICpzMisrOworCQlpZiAoaXN1cHBlciAoY2gxKSkKKwkJCWNoMSA9IHRvbG93ZXIgKGNoMSk7CisJCWlmIChpc3VwcGVyIChjaDIpKQorCQkJY2gyID0gdG9sb3dlciAoY2gyKTsKKwkJaWYgKGNoMSAhPSBjaDIpCisJCQlyZXR1cm4gY2gxIC0gY2gyOworCX0KKwlyZXR1cm4gKnMxID8gMSA6ICpzMiA/IC0xIDogMDsKK30KKyNlbmRpZgorCisvKgorICogR2l2ZW4gYXJndlswXSwgcmV0dXJuIHRoZSBwcm9ncmFtIG5hbWUuCisgKi8KK2NoYXIgKmdldF9wcm9nbmFtZShjaGFyICphcmd2X3plcm8pCit7CisJY2hhcgkqY3A7CisKKwljcCA9IHN0cnJjaHIoYXJndl96ZXJvLCAnLycpOworCWlmICghY3AgKQorCQlyZXR1cm4gYXJndl96ZXJvOworCWVsc2UKKwkJcmV0dXJuIGNwKzE7Cit9CisKK3N0YXRpYyBqbXBfYnVmIGFsYXJtX2VudjsKKworc3RhdGljIHZvaWQgYWxhcm1fc2lnbmFsKGludCBzaWduYWwpCit7CisJbG9uZ2ptcChhbGFybV9lbnYsIDEpOworfQorCit2b2lkIHByb2NlZWRfcXVlc3Rpb24oaW50IGRlbGF5KQoreworCWNoYXIgYnVmWzI1Nl07CisJY29uc3QgY2hhciAqc2hvcnRfeWVzID0gXygieVkiKTsKKworCWZmbHVzaChzdGRvdXQpOworCWZmbHVzaChzdGRlcnIpOworCWlmIChkZWxheSA+IDApIHsKKwkJaWYgKHNldGptcChhbGFybV9lbnYpKSB7CisJCQlzaWduYWwoU0lHQUxSTSwgU0lHX0lHTik7CisJCQlwcmludGYoIiVzIiwgXygiPHByb2NlZWRpbmc+XG4iKSk7CisJCQlyZXR1cm47CisJCX0KKwkJc2lnbmFsKFNJR0FMUk0sIGFsYXJtX3NpZ25hbCk7CisJCXByaW50ZihfKCJQcm9jZWVkIGFueXdheSAob3Igd2FpdCAlZCBzZWNvbmRzKSA/ICh5LG4pICIpLAorCQkgICAgICAgZGVsYXkpOworCQlhbGFybShkZWxheSk7CisJfSBlbHNlCisJCWZwdXRzKF8oIlByb2NlZWQgYW55d2F5PyAoeSxuKSAiKSwgc3Rkb3V0KTsKKwlidWZbMF0gPSAwOworCWlmICghZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgc3RkaW4pIHx8CisJICAgIHN0cmNocihzaG9ydF95ZXMsIGJ1ZlswXSkgPT0gMCkgeworCQlwdXRjKCdcbicsIHN0ZG91dCk7CisJCWV4aXQoMSk7CisJfQorCXNpZ25hbChTSUdBTFJNLCBTSUdfSUdOKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZXh0Ml9pbmZvKGNvbnN0IGNoYXIgKmRldmljZSkKKworeworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrCSpzYjsKKwlleHQyX2ZpbHN5cwkJZnM7CisJZXJyY29kZV90CQlyZXR2YWw7CisJdGltZV90IAkJCXRtOworCWNoYXIJCQlidWZbODBdOworCisJcmV0dmFsID0gZXh0MmZzX29wZW4yKGRldmljZSwgMCwgRVhUMl9GTEFHXzY0QklUUywgMCwgMCwKKwkJCSAgICAgIHVuaXhfaW9fbWFuYWdlciwgJmZzKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm47CisJc2IgPSBmcy0+c3VwZXI7CisKKwlpZiAoc2ItPnNfbXRpbWUpIHsKKwkJdG0gPSBzYi0+c19tdGltZTsKKwkJaWYgKHNiLT5zX2xhc3RfbW91bnRlZFswXSkgeworCQkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCQkJc3RybmNweShidWYsIHNiLT5zX2xhc3RfbW91bnRlZCwKKwkJCQlzaXplb2Yoc2ItPnNfbGFzdF9tb3VudGVkKSk7CisJCQlwcmludGYoXygiXHRsYXN0IG1vdW50ZWQgb24gJXMgb24gJXMiKSwgYnVmLAorCQkJICAgICAgIGN0aW1lKCZ0bSkpOworCQl9IGVsc2UKKwkJCXByaW50ZihfKCJcdGxhc3QgbW91bnRlZCBvbiAlcyIpLCBjdGltZSgmdG0pKTsKKwl9IGVsc2UgaWYgKHNiLT5zX21rZnNfdGltZSkgeworCQl0bSA9IHNiLT5zX21rZnNfdGltZTsKKwkJcHJpbnRmKF8oIlx0Y3JlYXRlZCBvbiAlcyIpLCBjdGltZSgmdG0pKTsKKwl9IGVsc2UgaWYgKHNiLT5zX3d0aW1lKSB7CisJCXRtID0gc2ItPnNfd3RpbWU7CisJCXByaW50ZihfKCJcdGxhc3QgbW9kaWZpZWQgb24gJXMiKSwgY3RpbWUoJnRtKSk7CisJfQorCWV4dDJmc19jbG9zZV9mcmVlKCZmcyk7Cit9CisKKy8qCisgKiByZXR1cm4gMSBpZiB0aGVyZSBpcyBubyBwYXJ0aXRpb24gdGFibGUsIDAgaWYgYSBwYXJ0aXRpb24gdGFibGUgaXMKKyAqIGRldGVjdGVkLCBhbmQgLTEgb24gYW4gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfcGFydGl0aW9uX3RhYmxlKGNvbnN0IGNoYXIgKmRldmljZSkKK3sKKyNpZmRlZiBIQVZFX0JMS0lEX1BST0JFX0VOQUJMRV9QQVJUSVRJT05TCisJYmxraWRfcHJvYmUgcHI7CisJY29uc3QgY2hhciAqdmFsdWU7CisJaW50IHJldDsKKworCXByID0gYmxraWRfbmV3X3Byb2JlX2Zyb21fZmlsZW5hbWUoZGV2aWNlKTsKKwlpZiAoIXByKQorCQlyZXR1cm4gLTE7CisKKyAgICAgICAgcmV0ID0gYmxraWRfcHJvYmVfZW5hYmxlX3BhcnRpdGlvbnMocHIsIDEpOworICAgICAgICBpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvdXQ7CisKKwlyZXQgPSBibGtpZF9wcm9iZV9lbmFibGVfc3VwZXJibG9ja3MocHIsIDApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm91dDsKKworCXJldCA9IGJsa2lkX2RvX2Z1bGxwcm9iZShwcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3V0OworCisJcmV0ID0gYmxraWRfcHJvYmVfbG9va3VwX3ZhbHVlKHByLCAiUFRUWVBFIiwgJnZhbHVlLCBOVUxMKTsKKwlpZiAocmV0ID09IDApCisJCWZwcmludGYoc3RkZXJyLCBfKCJGb3VuZCBhICVzIHBhcnRpdGlvbiB0YWJsZSBpbiAlc1xuIiksCisJCQl2YWx1ZSwgZGV2aWNlKTsKKwllbHNlCisJCXJldCA9IDE7CisKK2Vycm91dDoKKwlibGtpZF9mcmVlX3Byb2JlKHByKTsKKwlyZXR1cm4gcmV0OworI2Vsc2UKKwlyZXR1cm4gLTE7CisjZW5kaWYKK30KKworLyoKKyAqIHJldHVybiAxIGlmIHRoZSBkZXZpY2UgbG9va3MgcGxhdXNpYmxlLCBjcmVhdGluZyB0aGUgZmlsZSBpZiBuZWNlc3NhcnkKKyAqLworaW50IGNoZWNrX3BsYXVzaWJpbGl0eShjb25zdCBjaGFyICpkZXZpY2UsIGludCBmbGFncywgaW50ICpyZXRfaXNfZGV2KQoreworCWludCBmZCwgcmV0LCBpc19kZXYgPSAwOworCWV4dDJmc19zdHJ1Y3Rfc3RhdCBzOworCWludCBmbCA9IE9fUkRPTkxZOworCWJsa2lkX2NhY2hlIGNhY2hlID0gTlVMTDsKKwljaGFyICpmc190eXBlID0gTlVMTDsKKwljaGFyICpmc19sYWJlbCA9IE5VTEw7CisKKwlmZCA9IGV4dDJmc19vcGVuX2ZpbGUoZGV2aWNlLCBmbCwgMDY2Nik7CisJaWYgKChmZCA8IDApICYmIChlcnJubyA9PSBFTk9FTlQpICYmIChmbGFncyAmIE5PX1NJWkUpKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJUaGUgZmlsZSAlcyBkb2VzIG5vdCBleGlzdCBhbmQgbm8gIgorCQkJCSAgInNpemUgd2FzIHNwZWNpZmllZC5cbiIpLCBkZXZpY2UpOworCQlleGl0KDEpOworCX0KKwlpZiAoKGZkIDwgMCkgJiYgKGVycm5vID09IEVOT0VOVCkgJiYgKGZsYWdzICYgQ1JFQVRFX0ZJTEUpKSB7CisJCWZsIHw9IE9fQ1JFQVQ7CisJCWZkID0gZXh0MmZzX29wZW5fZmlsZShkZXZpY2UsIGZsLCAwNjY2KTsKKwkJaWYgKGZkID49IDAgJiYgKGZsYWdzICYgVkVSQk9TRV9DUkVBVEUpKQorCQkJcHJpbnRmKF8oIkNyZWF0aW5nIHJlZ3VsYXIgZmlsZSAlc1xuIiksIGRldmljZSk7CisJfQorCWlmIChmZCA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIkNvdWxkIG5vdCBvcGVuICVzOiAlc1xuIiksCisJCQlkZXZpY2UsIGVycm9yX21lc3NhZ2UoZXJybm8pKTsKKwkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCWZwdXRzKF8oIlxuVGhlIGRldmljZSBhcHBhcmVudGx5IGRvZXMgbm90IGV4aXN0OyAiCisJCQkJImRpZCB5b3Ugc3BlY2lmeSBpdCBjb3JyZWN0bHk/XG4iKSwgc3RkZXJyKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoZXh0MmZzX2ZzdGF0KGZkLCAmcykgPCAwKSB7CisJCXBlcnJvcigic3RhdCIpOworCQlleGl0KDEpOworCX0KKwljbG9zZShmZCk7CisKKwlpZiAoU19JU0JMSyhzLnN0X21vZGUpKQorCQlpc19kZXYgPSAxOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX2tlcm5lbF9fKQorCS8qIE9uIEZyZWVCU0QsIGFsbCBkaXNrIGRldmljZXMgYXJlIGNoYXJhY3RlciBzcGVjaWFscyAqLworCWlmIChTX0lTQ0hSKHMuc3RfbW9kZSkpCisJCWlzX2RldiA9IDE7CisjZW5kaWYKKwlpZiAocmV0X2lzX2RldikKKwkJKnJldF9pc19kZXYgPSBpc19kZXY7CisKKwlpZiAoKGZsYWdzICYgQ0hFQ0tfQkxPQ0tfREVWKSAmJiAhaXNfZGV2KSB7CisJCXByaW50ZihfKCIlcyBpcyBub3QgYSBibG9jayBzcGVjaWFsIGRldmljZS5cbiIpLCBkZXZpY2UpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIE5vdGU6IHdlIHVzZSB0aGUgb2xkZXItc3R5bGUgYmxraWQgQVBJJ3MgaGVyZSBiZWNhdXNlIHdlCisJICogd2FudCBhcyBtdWNoIGZ1bmN0aW9uYWxpdHkgdG8gYmUgYXZhaWxhYmxlIHdoZW4gdXNpbmcgdGhlCisJICogaW50ZXJuYWwgYmxraWQgbGlicmFyeSwgd2hlbiBlMmZzcHJvZ3MgaXMgY29tcGlsZWQgZm9yCisJICogbm9uLUxpbnV4IHN5c3RlbXMgdGhhdCB3aWxsIHByb2JhYmx5IG5vdCBoYXZlIHRoZSBsaWJyYXJpZXMKKwkgKiBmcm9tIHV0aWwtbGludXggYXZhaWxhYmxlLiAgV2Ugb25seSB1c2UgdGhlIG5ld2VyCisJICogYmxraWQtcHJvYmUgaW50ZXJmYWNlcyB0byBhY2Nlc3MgZnVuY3Rpb25hbGl0eSBub3QKKwkgKiBhdmFpbGFibGUgaW4gdGhlIG9yaWdpbmFsIGJsa2lkIGxpYnJhcnkuCisJICovCisJaWYgKChmbGFncyAmIENIRUNLX0ZTX0VYSVNUKSAmJiBibGtpZF9nZXRfY2FjaGUoJmNhY2hlLCBOVUxMKSA+PSAwKSB7CisJCWZzX3R5cGUgPSBibGtpZF9nZXRfdGFnX3ZhbHVlKGNhY2hlLCAiVFlQRSIsIGRldmljZSk7CisJCWlmIChmc190eXBlKQorCQkJZnNfbGFiZWwgPSBibGtpZF9nZXRfdGFnX3ZhbHVlKGNhY2hlLCAiTEFCRUwiLCBkZXZpY2UpOworCQlibGtpZF9wdXRfY2FjaGUoY2FjaGUpOworCX0KKworCWlmIChmc190eXBlKSB7CisJCWlmIChmc19sYWJlbCkKKwkJCXByaW50ZihfKCIlcyBjb250YWlucyBhICVzIGZpbGUgc3lzdGVtICIKKwkJCQkgImxhYmVsbGVkICclcydcbiIpLCBkZXZpY2UsIGZzX3R5cGUsIGZzX2xhYmVsKTsKKwkJZWxzZQorCQkJcHJpbnRmKF8oIiVzIGNvbnRhaW5zIGEgJXMgZmlsZSBzeXN0ZW1cbiIpLCBkZXZpY2UsCisJCQkgICAgICAgZnNfdHlwZSk7CisJCWlmIChzdHJuY21wKGZzX3R5cGUsICJleHQiLCAzKSA9PSAwKQorCQkJcHJpbnRfZXh0Ml9pbmZvKGRldmljZSk7CisJCWZyZWUoZnNfdHlwZSk7CisJCWZyZWUoZnNfbGFiZWwpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSBjaGVja19wYXJ0aXRpb25fdGFibGUoZGV2aWNlKTsKKwlpZiAocmV0ID49IDApCisJCXJldHVybiByZXQ7CisKKyNpZmRlZiBIQVZFX0xJTlVYX01BSk9SX0gKKyNpZm5kZWYgTUFKT1IKKyNkZWZpbmUgTUFKT1IoZGV2KQkoKGRldik+PjgpCisjZGVmaW5lIE1JTk9SKGRldikJKChkZXYpICYgMHhmZikKKyNlbmRpZgorI2lmbmRlZiBTQ1NJX0JMS19NQUpPUgorI2lmZGVmIFNDU0lfRElTSzBfTUFKT1IKKyNpZmRlZiBTQ1NJX0RJU0s4X01BSk9SCisjZGVmaW5lIFNDU0lfRElTS19NQUpPUihNKSAoKE0pID09IFNDU0lfRElTSzBfTUFKT1IgfHwgXAorICAoKE0pID49IFNDU0lfRElTSzFfTUFKT1IgJiYgKE0pIDw9IFNDU0lfRElTSzdfTUFKT1IpIHx8IFwKKyAgKChNKSA+PSBTQ1NJX0RJU0s4X01BSk9SICYmIChNKSA8PSBTQ1NJX0RJU0sxNV9NQUpPUikpCisjZWxzZQorI2RlZmluZSBTQ1NJX0RJU0tfTUFKT1IoTSkgKChNKSA9PSBTQ1NJX0RJU0swX01BSk9SIHx8IFwKKyAgKChNKSA+PSBTQ1NJX0RJU0sxX01BSk9SICYmIChNKSA8PSBTQ1NJX0RJU0s3X01BSk9SKSkKKyNlbmRpZiAvKiBkZWZpbmVkKFNDU0lfRElTSzhfTUFKT1IpICovCisjZGVmaW5lIFNDU0lfQkxLX01BSk9SKE0pIChTQ1NJX0RJU0tfTUFKT1IoKE0pKSB8fCAoTSkgPT0gU0NTSV9DRFJPTV9NQUpPUikKKyNlbHNlCisjZGVmaW5lIFNDU0lfQkxLX01BSk9SKE0pICAoKE0pID09IFNDU0lfRElTS19NQUpPUiB8fCAoTSkgPT0gU0NTSV9DRFJPTV9NQUpPUikKKyNlbmRpZiAvKiBkZWZpbmVkKFNDU0lfRElTSzBfTUFKT1IpICovCisjZW5kaWYgLyogZGVmaW5lZChTQ1NJX0JMS19NQUpPUikgKi8KKwlpZiAoKChNQUpPUihzLnN0X3JkZXYpID09IEhEX01BSk9SICYmCisJICAgICAgTUlOT1Iocy5zdF9yZGV2KSU2NCA9PSAwKSB8fAorCSAgICAgKFNDU0lfQkxLX01BSk9SKE1BSk9SKHMuc3RfcmRldikpICYmCisJICAgICAgTUlOT1Iocy5zdF9yZGV2KSUxNiA9PSAwKSkpIHsKKwkJcHJpbnRmKF8oIiVzIGlzIGVudGlyZSBkZXZpY2UsIG5vdCBqdXN0IG9uZSBwYXJ0aXRpb24hXG4iKSwKKwkJICAgICAgIGRldmljZSk7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCXJldHVybiAxOworfQorCit2b2lkIGNoZWNrX21vdW50KGNvbnN0IGNoYXIgKmRldmljZSwgaW50IGZvcmNlLCBjb25zdCBjaGFyICp0eXBlKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJaW50CQltb3VudF9mbGFnczsKKworCXJldHZhbCA9IGV4dDJmc19jaGVja19pZl9tb3VudGVkKGRldmljZSwgJm1vdW50X2ZsYWdzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJmc19jaGVja19pZl9tb3VudCIsIHJldHZhbCwKKwkJCV8oIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iKSwKKwkJCWRldmljZSk7CisJCXJldHVybjsKKwl9CisJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCIlcyBpcyBtb3VudGVkOyAiKSwgZGV2aWNlKTsKKwkJaWYgKGZvcmNlID49IDIpIHsKKwkJCWZwdXRzKF8oIm1rZTJmcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgIgorCQkJCSJpbmNvcnJlY3QuXG4iKSwgc3RkZXJyKTsKKwkJCXJldHVybjsKKwkJfQorCWFib3J0X21rZTJmczoKKwkJZnByaW50ZihzdGRlcnIsIF8oIndpbGwgbm90IG1ha2UgYSAlcyBoZXJlIVxuIiksIHR5cGUpOworCQlleGl0KDEpOworCX0KKwlpZiAobW91bnRfZmxhZ3MgJiBFWFQyX01GX0JVU1kpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIiVzIGlzIGFwcGFyZW50bHkgaW4gdXNlIGJ5IHRoZSBzeXN0ZW07ICIpLAorCQkJZGV2aWNlKTsKKwkJaWYgKGZvcmNlID49IDIpIHsKKwkJCWZwdXRzKF8oIm1rZTJmcyBmb3JjZWQgYW55d2F5LlxuIiksIHN0ZGVycik7CisJCQlyZXR1cm47CisJCX0KKwkJZ290byBhYm9ydF9ta2UyZnM7CisJfQorfQorCit2b2lkIHBhcnNlX2pvdXJuYWxfb3B0cyhjb25zdCBjaGFyICpvcHRzKQoreworCWNoYXIJKmJ1ZiwgKnRva2VuLCAqbmV4dCwgKnAsICphcmc7CisJaW50CWxlbjsKKwlpbnQJam91cm5hbF91c2FnZSA9IDA7CisKKwlsZW4gPSBzdHJsZW4ob3B0cyk7CisJYnVmID0gbWFsbG9jKGxlbisxKTsKKwlpZiAoIWJ1ZikgeworCQlmcHV0cyhfKCJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugam91cm5hbCAiCisJCQkib3B0aW9ucyFcbiIpLCBzdGRlcnIpOworCQlleGl0KDEpOworCX0KKwlzdHJjcHkoYnVmLCBvcHRzKTsKKwlmb3IgKHRva2VuID0gYnVmOyB0b2tlbiAmJiAqdG9rZW47IHRva2VuID0gbmV4dCkgeworCQlwID0gc3RyY2hyKHRva2VuLCAnLCcpOworCQluZXh0ID0gMDsKKwkJaWYgKHApIHsKKwkJCSpwID0gMDsKKwkJCW5leHQgPSBwKzE7CisJCX0KKwkJYXJnID0gc3RyY2hyKHRva2VuLCAnPScpOworCQlpZiAoYXJnKSB7CisJCQkqYXJnID0gMDsKKwkJCWFyZysrOworCQl9CisjaWYgMAorCQlwcmludGYoIkpvdXJuYWwgb3B0aW9uPSVzLCBhcmd1bWVudD0lc1xuIiwgdG9rZW4sCisJCSAgICAgICBhcmcgPyBhcmcgOiAiTk9ORSIpOworI2VuZGlmCisJCWlmIChzdHJjbXAodG9rZW4sICJkZXZpY2UiKSA9PSAwKSB7CisJCQlqb3VybmFsX2RldmljZSA9IGJsa2lkX2dldF9kZXZuYW1lKE5VTEwsIGFyZywgTlVMTCk7CisJCQlpZiAoIWpvdXJuYWxfZGV2aWNlKSB7CisJCQkJaWYgKGFyZykKKwkJCQkJZnByaW50ZihzdGRlcnIsIF8oIlxuQ291bGQgbm90IGZpbmQgIgorCQkJCQkJImpvdXJuYWwgZGV2aWNlIG1hdGNoaW5nICVzXG4iKSwKKwkJCQkJCWFyZyk7CisJCQkJam91cm5hbF91c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9IGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgInNpemUiKSA9PSAwKSB7CisJCQlpZiAoIWFyZykgeworCQkJCWpvdXJuYWxfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWpvdXJuYWxfc2l6ZSA9IHN0cnRvdWwoYXJnLCAmcCwgMCk7CisJCQlpZiAoKnApCisJCQkJam91cm5hbF91c2FnZSsrOworCQl9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJsb2NhdGlvbiIpKSB7CisJCQlpZiAoIWFyZykgeworCQkJCWpvdXJuYWxfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWpvdXJuYWxfbG9jYXRpb25fc3RyaW5nID0gc3RyZHVwKGFyZyk7CisJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAidjFfc3VwZXJibG9jayIpID09IDApIHsKKwkJCWpvdXJuYWxfZmxhZ3MgfD0gRVhUMl9NS0pPVVJOQUxfVjFfU1VQRVI7CisJCQljb250aW51ZTsKKwkJfSBlbHNlCisJCQlqb3VybmFsX3VzYWdlKys7CisJfQorCWlmIChqb3VybmFsX3VzYWdlKSB7CisJCWZwdXRzKF8oIlxuQmFkIGpvdXJuYWwgb3B0aW9ucyBzcGVjaWZpZWQuXG5cbiIKKwkJCSJKb3VybmFsIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsICIKKwkJCSJhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKwkJCSJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG5cbiIKKwkJCSJWYWxpZCBqb3VybmFsIG9wdGlvbnMgYXJlOlxuIgorCQkJIlx0c2l6ZT08am91cm5hbCBzaXplIGluIG1lZ2FieXRlcz5cbiIKKwkJCSJcdGRldmljZT08am91cm5hbCBkZXZpY2U+XG4iCisJCQkiXHRsb2NhdGlvbj08am91cm5hbCBsb2NhdGlvbj5cblxuIgorCQkJIlRoZSBqb3VybmFsIHNpemUgbXVzdCBiZSBiZXR3ZWVuICIKKwkJCSIxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cblxuIiksIHN0ZGVycik7CisJCWZyZWUoYnVmKTsKKwkJZXhpdCgxKTsKKwl9CisJZnJlZShidWYpOworfQorCisvKgorICogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygam91cm5hbCBibG9ja3MgdG8gdXNlLCBlaXRoZXIgdmlhCisgKiB1c2VyLXNwZWNpZmllZCAjIG9mIG1lZ2FieXRlcywgb3IgdmlhIHNvbWUgaW50ZWxsaWdlbnRseSBzZWxlY3RlZAorICogZGVmYXVsdHMuCisgKgorICogRmluZCBhIHJlYXNvbmFibGUgam91cm5hbCBmaWxlIHNpemUgKGluIGJsb2NrcykgZ2l2ZW4gdGhlIG51bWJlciBvZiBibG9ja3MKKyAqIGluIHRoZSBmaWxlc3lzdGVtLiAgRm9yIHZlcnkgc21hbGwgZmlsZXN5c3RlbXMsIGl0IGlzIG5vdCByZWFzb25hYmxlIHRvCisgKiBoYXZlIGEgam91cm5hbCB0aGF0IGZpbGxzIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSBmaWxlc3lzdGVtLgorICovCit1bnNpZ25lZCBpbnQgZmlndXJlX2pvdXJuYWxfc2l6ZShpbnQgc2l6ZSwgZXh0Ml9maWxzeXMgZnMpCit7CisJaW50IGpfYmxvY2tzOworCisJal9ibG9ja3MgPSBleHQyZnNfZGVmYXVsdF9qb3VybmFsX3NpemUoZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKTsKKwlpZiAoal9ibG9ja3MgPCAwKSB7CisJCWZwdXRzKF8oIlxuRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIiksIHN0ZGVycik7CisJCXJldHVybiAwOworCX0KKworCWlmIChzaXplID4gMCkgeworCQlqX2Jsb2NrcyA9IHNpemUgKiAxMDI0IC8gKGZzLT5ibG9ja3NpemUJLyAxMDI0KTsKKwkJaWYgKGpfYmxvY2tzIDwgMTAyNCB8fCBqX2Jsb2NrcyA+IDEwMjQwMDAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiXG5UaGUgcmVxdWVzdGVkIGpvdXJuYWwgIgorCQkJCSJzaXplIGlzICVkIGJsb2NrczsgaXQgbXVzdCBiZVxuIgorCQkJCSJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gICIKKwkJCQkiQWJvcnRpbmcuXG4iKSwKKwkJCQlqX2Jsb2Nrcyk7CisJCQlleGl0KDEpOworCQl9CisJCWlmICgodW5zaWduZWQpIGpfYmxvY2tzID4gZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLyAyKSB7CisJCQlmcHV0cyhfKCJcbkpvdXJuYWwgc2l6ZSB0b28gYmlnIGZvciBmaWxlc3lzdGVtLlxuIiksCisJCQkgICAgICBzdGRlcnIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlyZXR1cm4gal9ibG9ja3M7Cit9CisKK3ZvaWQgcHJpbnRfY2hlY2tfbWVzc2FnZShpbnQgbW50LCB1bnNpZ25lZCBpbnQgY2hlY2spCit7CisJaWYgKG1udCA8IDApCisJCW1udCA9IDA7CisJaWYgKCFtbnQgJiYgIWNoZWNrKQorCQlyZXR1cm47CisJcHJpbnRmKF8oIlRoaXMgZmlsZXN5c3RlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgIgorCQkgImNoZWNrZWQgZXZlcnkgJWQgbW91bnRzIG9yXG4iCisJCSAiJWcgZGF5cywgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgIgorCQkgIlVzZSB0dW5lMmZzIC1jIG9yIC1pIHRvIG92ZXJyaWRlLlxuIiksCisJICAgICAgIG1udCwgKChkb3VibGUpIGNoZWNrKSAvICgzNjAwICogMjQpKTsKK30KKwordm9pZCBkdW1wX21tcF9tc2coc3RydWN0IG1tcF9zdHJ1Y3QgKm1tcCwgY29uc3QgY2hhciAqbXNnKQoreworCisJaWYgKG1zZykKKwkJcHJpbnRmKCJNTVAgY2hlY2sgZmFpbGVkOiAlc1xuIiwgbXNnKTsKKwlpZiAobW1wKSB7CisJCXRpbWVfdCB0ID0gbW1wLT5tbXBfdGltZTsKKworCQlwcmludGYoIk1NUCBlcnJvciBpbmZvOiBsYXN0IHVwZGF0ZTogJXMgbm9kZTogJXMgZGV2aWNlOiAlc1xuIiwKKwkJICAgICAgIGN0aW1lKCZ0KSwgbW1wLT5tbXBfbm9kZW5hbWUsIG1tcC0+bW1wX2JkZXZuYW1lKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9taXNjL3V0aWwuaCBiL21pc2MvdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzODI3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL3V0aWwuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogdXRpbC5oIC0tLSBoZWFkZXIgZmlsZSBkZWZpbmluZyBwcm90b3R5cGVzIGZvciBoZWxwZXIgZnVuY3Rpb25zCisgKiB1c2VkIGJ5IHR1bmUyZnMgYW5kIG1rZTJmcworICoKKyAqIENvcHlyaWdodCAyMDAwIGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCitleHRlcm4gaW50CSBqb3VybmFsX3NpemU7CitleHRlcm4gaW50CSBqb3VybmFsX2ZsYWdzOworZXh0ZXJuIGNoYXIJKmpvdXJuYWxfZGV2aWNlOworZXh0ZXJuIGNoYXIJKmpvdXJuYWxfbG9jYXRpb25fc3RyaW5nOworCisvKgorICogRmxhZ3MgZm9yIGNoZWNrX3BsYXVzaWJpbGl0eSgpCisgKi8KKyNkZWZpbmUgQ0hFQ0tfQkxPQ0tfREVWCTB4MDAwMQorI2RlZmluZSBDUkVBVEVfRklMRQkweDAwMDIKKyNkZWZpbmUgQ0hFQ0tfRlNfRVhJU1QJMHgwMDA0CisjZGVmaW5lIFZFUkJPU0VfQ1JFQVRFCTB4MDAwOAorI2RlZmluZSBOT19TSVpFCQkweDAwMTAKKworI2lmbmRlZiBIQVZFX1NUUkNBU0VDTVAKK2V4dGVybiBpbnQgc3RyY2FzZWNtcCAoY2hhciAqczEsIGNoYXIgKnMyKTsKKyNlbmRpZgorZXh0ZXJuIGNoYXIgKmdldF9wcm9nbmFtZShjaGFyICphcmd2X3plcm8pOworZXh0ZXJuIHZvaWQgcHJvY2VlZF9xdWVzdGlvbihpbnQgZGVsYXkpOworZXh0ZXJuIGludCBjaGVja19wbGF1c2liaWxpdHkoY29uc3QgY2hhciAqZGV2aWNlLCBpbnQgZmxhZ3MsCisJCQkgICAgICBpbnQgKnJldF9pc19kZXYpOworZXh0ZXJuIHZvaWQgcGFyc2Vfam91cm5hbF9vcHRzKGNvbnN0IGNoYXIgKm9wdHMpOworZXh0ZXJuIHZvaWQgY2hlY2tfbW91bnQoY29uc3QgY2hhciAqZGV2aWNlLCBpbnQgZm9yY2UsIGNvbnN0IGNoYXIgKnR5cGUpOworZXh0ZXJuIHVuc2lnbmVkIGludCBmaWd1cmVfam91cm5hbF9zaXplKGludCBzaXplLCBleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gdm9pZCBwcmludF9jaGVja19tZXNzYWdlKGludCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGR1bXBfbW1wX21zZyhzdHJ1Y3QgbW1wX3N0cnVjdCAqbW1wLCBjb25zdCBjaGFyICptc2cpOwpkaWZmIC0tZ2l0IGEvbWlzYy91dWlkZC44LmluIGIvbWlzYy91dWlkZC44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NWUzOTEKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL3V1aWRkLjguaW4KQEAgLTAsMCArMSw5NyBAQAorLlwiIC0qLSBucm9mZiAtKi0KKy5cIiBDb3B5cmlnaHQgMjAwNyBieSBUaGVvZG9yZSBUcydvLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy5cIiBUaGlzIGZpbGUgbWF5IGJlIGNvcGllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKy5cIgorLlRIIFVVSUREIDggIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK3V1aWRkIFwtIFVVSUQgZ2VuZXJhdGlvbiBkYWVtb24KKy5TSCBTWU5PUFNJUworLkIgdXVpZGQKK1sKKy5CIFwtZAorXQorWworLkIgXC1wCisuSSBwaWRmaWxlCitdCitbCisuQiBcLXMKKy5JIHNvY2tldHBhdGgKK10KK1sKKy5CIFwtVAorLkkgdGltZW91dAorXQorCisuQiB1dWlkZAorWworLkIgXC1yCit8CisuQiBcLXQKK10KK1sKKy5CIFwtbgorLkkgbnVtYmVyCitdCitbCisuQiBcLXMKKy5JIHNvY2tldHBhdGgKK10KKworLkIgdXVpZGQgXC1rCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgdXVpZGQKK2RhZW1vbiBpcyB1c2VkIGJ5IHRoZSBVVUlEIGxpYnJhcnkgdG8gZ2VuZXJhdGUKK3VuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVycyAoVVVJRHMpLCBlc3BlY2lhbGx5IHRpbWUtYmFzZWQgVVVJRCdzCitpbiBhIHNlY3VyZSBhbmQgZ3VhcmFudGVlZC11bmlxdWUgZmFzaGlvbiwgZXZlbiBpbiB0aGUgZmFjZSBvZiBsYXJnZQorbnVtYmVycyBvZiB0aHJlYWRzIHRyeWluZyB0byBncmFiIFVVSUQncyBydW5uaW5nIG9uIGRpZmZlcmVudCBDUFUncy4KKy5TSCBPUFRJT05TCisuVFAKKy5CIFwtZAorUnVuCisuQiB1dWlkZAoraW4gZGVidWdnaW5nIG1vZGUuICBUaGlzIHByZXZlbnRzIHV1aWRkIGZyb20gcnVubmluZyBhcyBhIGRhZW1vbi4KKy5UUAorLkIgXC1rCitJZiBhIGN1cnJlbnRseSB1dWlkZCBkYWVtb24gaXMgcnVubmluZywga2lsbCBpdC4KKy5UUAorLkJJIFwtbiAiIG51bWJlciIKK1doZW4gaXNzdWluZyBhIHRlc3QgcmVxdWVzdCB0byBhIHJ1bm5pbmcgdXVpZGQsIHJlcXVlc3QgYSBidWxrIHJlc3BvbnNlCitvZgorLkkgbnVtYmVyCitVVUlEJ3MuCisuVFAKKy5CSSBcLXAgICIgcGlkZmlsZSIKK1NwZWNpZnkgdGhlIHBhdGhuYW1lIHdoZXJlIHRoZSBwaWQgZmlsZSBzaG91bGQgYmUgd3JpdHRlbi4gIEJ5IGRlZmF1bHQsCit0aGUgcGlkIGZpbGUgaXMgd3JpdHRlbiB0byAvdmFyL2xpYi9saWJ1dWlkL3V1aWRkLnBpZC4KKy5UUAorLkJJIFwtcyAiIHNvY2tldHBhdGgiCitTcGVjaWZ5IHRoZSBwYXRobmFtZSB1c2VkIGZvciB0aGUgdW5peC1kb21haW4gc29ja2V0IHVzZWQgYnkgdXVpZGQuICBCeQorZGVmYXVsdCwgdGhlIHBhdGhuYW1lIHVzZWQgaXMgL3Zhci9saWIvbGlidXVpZC9yZXF1ZXN0LiAgVGhpcyBpcyBwcmltYXJpbHkKK2ZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIHNpbmNlIHRoZSBwYXRobmFtZSBpcyBoYXJkLWNvZGVkIGluIHRoZSBsaWJ1dWlkCitsaWJyYXJ5LgorLlRQCisuQiBcLXIKK1Rlc3QgdXVpZGQgYnkgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gYSBydW5uaW5nIHV1aWRkIGRhZW1vbiBhbmQKK3JlcXVlc3QgaXQgdG8gcmV0dXJuIGEgcmFuZG9tLWJhc2VkIFVVSUQuCisuVFAKKy5CIFwtdAorVGVzdCB1dWlkZCBieSB0cnlpbmcgdG8gY29ubmVjdCB0byBhIHJ1bm5pbmcgdXVpZGQgZGFlbW9uIGFuZAorcmVxdWVzdCBpdCB0byByZXR1cm4gYSB0aW1lLWJhc2VkIFVVSUQuCisuVFAKKy5CSSBcLVQgIiB0aW1lb3V0IgorU3BlY2lmeSBhIHRpbWVvdXQgZm9yIHV1aWRkLiAgSWYgc3BlY2lmaWVkLCB0aGVuIHV1aWRkIHdpbGwgZXhpdCBhZnRlcgorLkkgdGltZW91dAorc2Vjb25kcyBvZiBpbmFjdGl2aXR5LgorLlNIIEFVVEhPUgorVGhlCisuQiB1dWlkZAorZGFlbW9uICB3YXMgd3JpdHRlbiBieSBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1Pi4KKy5TSCBBVkFJTEFCSUxJVFkKKy5CIHV1aWRkCitpcyBwYXJ0IG9mIGxpYnV1aWQgZnJvbSB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgYW5kIGlzIGF2YWlsYWJsZSBmcm9tCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC4KKy5TSCAiU0VFIEFMU08iCisuQlIgbGlidXVpZCAoMyksCisuQlIgdXVpZGdlbiAoMSkKZGlmZiAtLWdpdCBhL21pc2MvdXVpZGQuYyBiL21pc2MvdXVpZGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmNhNmJlCi0tLSAvZGV2L251bGwKKysrIGIvbWlzYy91dWlkZC5jCkBAIC0wLDAgKzEsNjAwIEBACisvKgorICogdXVpZGQuYyAtLS0gVVVJRC1nZW5lcmF0aW9uIGRhZW1vbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyAgVGhlb2RvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2RlZmluZSBfR05VX1NPVVJDRSAvKiBmb3Igc2V0cmVzW3VnXWlkKCkgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBpbnQgZ2V0b3B0KGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcpOworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKK2V4dGVybiBpbnQgb3B0aW5kOworI2VuZGlmCisjaW5jbHVkZSAidXVpZC91dWlkLmgiCisjaW5jbHVkZSAidXVpZC91dWlkZC5oIgorI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBDT0RFX0FUVFIoeCkgX19hdHRyaWJ1dGVfXyh4KQorI2Vsc2UKKyNkZWZpbmUgQ09ERV9BVFRSKHgpCisjZW5kaWYKKworc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCit7CisJZnByaW50ZihzdGRlcnIsIF8oIlVzYWdlOiAlcyBbLWRdIFstcCBwaWRmaWxlXSBbLXMgc29ja2V0cGF0aF0gIgorCQkJICAiWy1UIHRpbWVvdXRdXG4iKSwgcHJvZ25hbWUpOworCWZwcmludGYoc3RkZXJyLCBfKCIgICAgICAgJXMgWy1yfHRdIFstbiBudW1dIFstcyBzb2NrZXRwYXRoXVxuIiksCisJCXByb2duYW1lKTsKKwlmcHJpbnRmKHN0ZGVyciwgXygiICAgICAgICVzIC1rXG4iKSwgcHJvZ25hbWUpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZShjb25zdCBjaGFyICptc2cpCit7CisJcGVycm9yKG1zZyk7CisJZXhpdCgxKTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2RhZW1vbih2b2lkKQoreworCXBpZF90IHBpZDsKKwl1aWRfdCBldWlkOworCisJcGlkID0gZm9yaygpOworCWlmIChwaWQgPT0gLTEpIHsKKwkJcGVycm9yKCJmb3JrIik7CisJCWV4aXQoMSk7CisJfSBlbHNlIGlmIChwaWQgIT0gMCkgeworCSAgICBleGl0KDApOworCX0KKworCWNsb3NlKDApOworCWNsb3NlKDEpOworCWNsb3NlKDIpOworCW9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7CisJb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKKwlvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpOworCisJaWYgKGNoZGlyKCIvIikpIHt9CS8qIFNpbGVuY2Ugd2Fybl91bnVzZWRfcmVzdWx0IHdhcm5pbmcgKi8KKwkodm9pZCkgc2V0c2lkKCk7CisJZXVpZCA9IGdldGV1aWQoKTsKKwlpZiAoc2V0cmV1aWQoZXVpZCwgZXVpZCkgPCAwKQorCQlkaWUoInNldHJldWlkIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfYWxsKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3NpemVfdCByZXQ7CisJc3NpemVfdCBjID0gMDsKKwlpbnQgdHJpZXMgPSAwOworCisJbWVtc2V0KGJ1ZiwgMCwgY291bnQpOworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJcmV0ID0gcmVhZChmZCwgYnVmLCBjb3VudCk7CisJCWlmIChyZXQgPD0gMCkgeworCQkJaWYgKChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIgfHwgcmV0ID09IDApICYmCisJCQkgICAgKHRyaWVzKysgPCA1KSkKKwkJCQljb250aW51ZTsKKwkJCXJldHVybiBjID8gYyA6IC0xOworCQl9CisJCWlmIChyZXQgPiAwKQorCQkJdHJpZXMgPSAwOworCQljb3VudCAtPSByZXQ7CisJCWJ1ZiArPSByZXQ7CisJCWMgKz0gcmV0OworCX0KKwlyZXR1cm4gYzsKK30KKworc3RhdGljIGludCB3cml0ZV9hbGwoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzc2l6ZV90IHJldDsKKwlpbnQgYyA9IDA7CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCXJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWlmICgoZXJybm8gPT0gRUFHQUlOKSB8fCAoZXJybm8gPT0gRUlOVFIpKQorCQkJCWNvbnRpbnVlOworCQkJcmV0dXJuIC0xOworCQl9CisJCWNvdW50IC09IHJldDsKKwkJYnVmICs9IHJldDsKKwkJYyArPSByZXQ7CisJfQorCXJldHVybiBjOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY2xlYW51cF9waWRmaWxlLCAqY2xlYW51cF9zb2NrZXQ7CisKK3N0YXRpYyB2b2lkIHRlcm1pbmF0ZV9pbnRyKGludCBzaWdubyBDT0RFX0FUVFIoKHVudXNlZCkpKQoreworCSh2b2lkKSB1bmxpbmsoY2xlYW51cF9waWRmaWxlKTsKKwlpZiAoY2xlYW51cF9zb2NrZXQpCisJCSh2b2lkKSB1bmxpbmsoY2xlYW51cF9zb2NrZXQpOworCWV4aXQoMCk7Cit9CisKK3N0YXRpYyBpbnQgY2FsbF9kYWVtb24oY29uc3QgY2hhciAqc29ja2V0X3BhdGgsIGludCBvcCwgY2hhciAqYnVmLAorCQkgICAgICAgaW50IGJ1ZmxlbiwgaW50ICpudW0sIGNvbnN0IGNoYXIgKiplcnJfY29udGV4dCkKK3sKKwljaGFyIG9wX2J1Zls4XTsKKwlpbnQgb3BfbGVuOworCWludCBzOworCXNzaXplX3QgcmV0OworCWludDMyX3QgcmVwbHlfbGVuID0gMDsKKwlzdHJ1Y3Qgc29ja2FkZHJfdW4gc3J2X2FkZHI7CisKKwlpZiAoKChvcCA9PSA0KSB8fCAob3AgPT0gNSkpICYmICFudW0pIHsKKwkJaWYgKGVycl9jb250ZXh0KQorCQkJKmVycl9jb250ZXh0ID0gXygiYmFkIGFyZ3VtZW50cyIpOworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICgocyA9IHNvY2tldChBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCkpIDwgMCkgeworCQlpZiAoZXJyX2NvbnRleHQpCisJCQkqZXJyX2NvbnRleHQgPSBfKCJzb2NrZXQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNydl9hZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworCXN0cm5jcHkoc3J2X2FkZHIuc3VuX3BhdGgsIHNvY2tldF9wYXRoLCBzaXplb2Yoc3J2X2FkZHIuc3VuX3BhdGgpKTsKKwlzcnZfYWRkci5zdW5fcGF0aFtzaXplb2Yoc3J2X2FkZHIuc3VuX3BhdGgpLTFdID0gJ1wwJzsKKworCWlmIChjb25uZWN0KHMsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikgJnNydl9hZGRyLAorCQkgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikpIDwgMCkgeworCQlpZiAoZXJyX2NvbnRleHQpCisJCQkqZXJyX2NvbnRleHQgPSBfKCJjb25uZWN0Iik7CisJCWNsb3NlKHMpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKG9wID09IDUpIHsKKwkJaWYgKCgqbnVtKSoxNiA+IGJ1Zmxlbi00KQorCQkJKm51bSA9IChidWZsZW4tNCkgLyAxNjsKKwl9CisJb3BfYnVmWzBdID0gb3A7CisJb3BfbGVuID0gMTsKKwlpZiAoKG9wID09IDQpIHx8IChvcCA9PSA1KSkgeworCQltZW1jcHkob3BfYnVmKzEsIG51bSwgc2l6ZW9mKGludCkpOworCQlvcF9sZW4gKz0gc2l6ZW9mKGludCk7CisJfQorCisJcmV0ID0gd3JpdGVfYWxsKHMsIG9wX2J1Ziwgb3BfbGVuKTsKKwlpZiAocmV0IDwgb3BfbGVuKSB7CisJCWlmIChlcnJfY29udGV4dCkKKwkJCSplcnJfY29udGV4dCA9IF8oIndyaXRlIik7CisJCWNsb3NlKHMpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0ID0gcmVhZF9hbGwocywgKGNoYXIgKikgJnJlcGx5X2xlbiwgc2l6ZW9mKHJlcGx5X2xlbikpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChlcnJfY29udGV4dCkKKwkJCSplcnJfY29udGV4dCA9IF8oInJlYWQgY291bnQiKTsKKwkJY2xvc2Uocyk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHJlcGx5X2xlbiA8IDAgfHwgcmVwbHlfbGVuID4gYnVmbGVuKSB7CisJCWlmIChlcnJfY29udGV4dCkKKwkJCSplcnJfY29udGV4dCA9IF8oImJhZCByZXNwb25zZSBsZW5ndGgiKTsKKwkJY2xvc2Uocyk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0ID0gcmVhZF9hbGwocywgKGNoYXIgKikgYnVmLCByZXBseV9sZW4pOworCisJaWYgKChyZXQgPiAwKSAmJiAob3AgPT0gNCkpIHsKKwkJaWYgKHJlcGx5X2xlbiA+PSAoaW50KSAoMTYrc2l6ZW9mKGludCkpKQorCQkJbWVtY3B5KGJ1ZisxNiwgbnVtLCBzaXplb2YoaW50KSk7CisJCWVsc2UKKwkJCSpudW0gPSAtMTsKKwl9CisJaWYgKChyZXQgPiAwKSAmJiAob3AgPT0gNSkpIHsKKwkJaWYgKCpudW0gPj0gKGludCkgc2l6ZW9mKGludCkpCisJCQltZW1jcHkoYnVmLCBudW0sIHNpemVvZihpbnQpKTsKKwkJZWxzZQorCQkJKm51bSA9IC0xOworCX0KKworCWNsb3NlKHMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2VydmVyX2xvb3AoY29uc3QgY2hhciAqc29ja2V0X3BhdGgsIGNvbnN0IGNoYXIgKnBpZGZpbGVfcGF0aCwKKwkJCWludCBkZWJ1ZywgaW50IHRpbWVvdXQsIGludCBxdWlldCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfdW4JbXlfYWRkciwgZnJvbV9hZGRyOworCXN0cnVjdCBmbG9jawkJZmw7CisJc29ja2xlbl90CQlmcm9tbGVuOworCWludDMyX3QJCQlyZXBseV9sZW4gPSAwOworCXV1aWRfdAkJCXV1OworCW1vZGVfdAkJCXNhdmVfdW1hc2s7CisJY2hhcgkJCXJlcGx5X2J1ZlsxMDI0XSwgKmNwOworCWNoYXIJCQlvcCwgc3RyW1VVSURfU1RSX1NJWkVdOworCWludAkJCWksIHMsIG5zLCBsZW4sIG51bTsKKwlpbnQJCQlmZF9waWRmaWxlLCByZXQ7CisKKwlmZF9waWRmaWxlID0gb3BlbihwaWRmaWxlX3BhdGgsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2NjQpOworCWlmIChmZF9waWRmaWxlIDwgMCkgeworCQlpZiAoIXF1aWV0KQorCQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb3Blbi9jcmVhdGUgJXM6ICVzXG4iLAorCQkJCXBpZGZpbGVfcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgxKTsKKwl9CisJY2xlYW51cF9waWRmaWxlID0gcGlkZmlsZV9wYXRoOworCWNsZWFudXBfc29ja2V0ID0gMDsKKwlzaWduYWwoU0lHQUxSTSwgdGVybWluYXRlX2ludHIpOworCWFsYXJtKDMwKTsKKyAJZmwubF90eXBlID0gRl9XUkxDSzsKKyAJZmwubF93aGVuY2UgPSBTRUVLX1NFVDsKKyAJZmwubF9zdGFydCA9IDA7CisgCWZsLmxfbGVuID0gMDsKKyAJZmwubF9waWQgPSAwOworIAl3aGlsZSAoZmNudGwoZmRfcGlkZmlsZSwgRl9TRVRMS1csICZmbCkgPCAwKSB7CisJCWlmICgoZXJybm8gPT0gRUFHQUlOKSB8fCAoZXJybm8gPT0gRUlOVFIpKQorCQkJY29udGludWU7CisJCWlmICghcXVpZXQpCisJCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBsb2NrICVzOiAlc1xuIiwKKwkJCQlwaWRmaWxlX3BhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCWV4aXQoMSk7CisJfQorCXJldCA9IGNhbGxfZGFlbW9uKHNvY2tldF9wYXRoLCAwLCByZXBseV9idWYsIHNpemVvZihyZXBseV9idWYpLCAwLCAwKTsKKwlpZiAocmV0ID4gMCkgeworCQlpZiAoIXF1aWV0KQorCQkJcHJpbnRmKF8oInV1aWRkIGRhZW1vbiBhbHJlYWR5IHJ1bm5pbmcgYXQgcGlkICVzXG4iKSwKKwkJCSAgICAgICByZXBseV9idWYpOworCQlleGl0KDEpOworCX0KKwlhbGFybSgwKTsKKworCWlmICgocyA9IHNvY2tldChBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCkpIDwgMCkgeworCQlpZiAoIXF1aWV0KQorCQkJZnByaW50ZihzdGRlcnIsIF8oIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSAiCisJCQkJCSAgInNvY2tldDogJXMiKSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgxKTsKKwl9CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgc29ja2V0IGlzbid0IHVzaW5nIGZkIG51bWJlcnMgMC0yIHRvIGF2b2lkIGl0CisJICogZ2V0dGluZyBjbG9zZWQgYnkgY3JlYXRlX2RhZW1vbigpCisJICovCisJd2hpbGUgKCFkZWJ1ZyAmJiBzIDw9IDIpIHsKKwkJcyA9IGR1cChzKTsKKwkJaWYgKHMgPCAwKSB7CisJCQlwZXJyb3IoImR1cCIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCS8qCisJICogQ3JlYXRlIHRoZSBhZGRyZXNzIHdlIHdpbGwgYmUgYmluZGluZyB0by4KKwkgKi8KKwlteV9hZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworCXN0cm5jcHkobXlfYWRkci5zdW5fcGF0aCwgc29ja2V0X3BhdGgsIHNpemVvZihteV9hZGRyLnN1bl9wYXRoKSk7CisJbXlfYWRkci5zdW5fcGF0aFtzaXplb2YobXlfYWRkci5zdW5fcGF0aCktMV0gPSAnXDAnOworCSh2b2lkKSB1bmxpbmsoc29ja2V0X3BhdGgpOworCXNhdmVfdW1hc2sgPSB1bWFzaygwKTsKKwlpZiAoYmluZChzLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopICZteV9hZGRyLAorCQkgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikpIDwgMCkgeworCQlpZiAoIXF1aWV0KQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJXygiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIpLAorCQkJCXNvY2tldF9wYXRoLCBzdHJlcnJvcihlcnJubykpOworCQlleGl0KDEpOworCX0KKwkodm9pZCkgdW1hc2soc2F2ZV91bWFzayk7CisKKwlpZiAobGlzdGVuKHMsIDUpIDwgMCkgeworCQlpZiAoIXF1aWV0KQorCQkJZnByaW50ZihzdGRlcnIsIF8oIkNvdWxkbid0IGxpc3RlbiBvbiB1bml4ICIKKwkJCQkJICAic29ja2V0ICVzOiAlc1xuIiksIHNvY2tldF9wYXRoLAorCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCWV4aXQoMSk7CisJfQorCisJY2xlYW51cF9zb2NrZXQgPSBzb2NrZXRfcGF0aDsKKwlpZiAoIWRlYnVnKQorCQljcmVhdGVfZGFlbW9uKCk7CisJc2lnbmFsKFNJR0hVUCwgdGVybWluYXRlX2ludHIpOworCXNpZ25hbChTSUdJTlQsIHRlcm1pbmF0ZV9pbnRyKTsKKwlzaWduYWwoU0lHVEVSTSwgdGVybWluYXRlX2ludHIpOworCXNpZ25hbChTSUdBTFJNLCB0ZXJtaW5hdGVfaW50cik7CisJc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOworCisJc3ByaW50ZihyZXBseV9idWYsICIlOGRcbiIsIGdldHBpZCgpKTsKKwlpZiAoZnRydW5jYXRlKGZkX3BpZGZpbGUsIDApKSB7fSAvKiBTaWxlbmNlIHdhcm5fdW51c2VkX3Jlc3VsdCAqLworCXdyaXRlX2FsbChmZF9waWRmaWxlLCByZXBseV9idWYsIHN0cmxlbihyZXBseV9idWYpKTsKKwlpZiAoZmRfcGlkZmlsZSA+IDEpCisJCWNsb3NlKGZkX3BpZGZpbGUpOyAvKiBVbmxvY2sgdGhlIHBpZCBmaWxlICovCisKKwl3aGlsZSAoMSkgeworCQlmcm9tbGVuID0gc2l6ZW9mKGZyb21fYWRkcik7CisJCWlmICh0aW1lb3V0ID4gMCkKKwkJCWFsYXJtKHRpbWVvdXQpOworCQlucyA9IGFjY2VwdChzLCAoc3RydWN0IHNvY2thZGRyICopICZmcm9tX2FkZHIsICZmcm9tbGVuKTsKKwkJYWxhcm0oMCk7CisJCWlmIChucyA8IDApIHsKKwkJCWlmICgoZXJybm8gPT0gRUFHQUlOKSB8fCAoZXJybm8gPT0gRUlOVFIpKQorCQkJCWNvbnRpbnVlOworCQkJcGVycm9yKCJhY2NlcHQiKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJbGVuID0gcmVhZChucywgJm9wLCAxKTsKKwkJaWYgKGxlbiAhPSAxKSB7CisJCQlpZiAobGVuIDwgMCkKKwkJCQlwZXJyb3IoInJlYWQiKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoXygiRXJyb3IgcmVhZGluZyBmcm9tIGNsaWVudCwgIgorCQkJCQkgImxlbiA9ICVkXG4iKSwgbGVuKTsKKwkJCWdvdG8gc2h1dGRvd25fc29ja2V0OworCQl9CisJCWlmICgob3AgPT0gNCkgfHwgKG9wID09IDUpKSB7CisJCQlpZiAocmVhZF9hbGwobnMsIChjaGFyICopICZudW0sIHNpemVvZihudW0pKSAhPSA0KQorCQkJCWdvdG8gc2h1dGRvd25fc29ja2V0OworCQkJaWYgKGRlYnVnKQorCQkJCXByaW50ZihfKCJvcGVyYXRpb24gJWQsIGluY29taW5nIG51bSA9ICVkXG4iKSwKKwkJCQkgICAgICAgb3AsIG51bSk7CisJCX0gZWxzZSBpZiAoZGVidWcpCisJCQlwcmludGYoIm9wZXJhdGlvbiAlZFxuIiwgb3ApOworCisJCXN3aXRjaChvcCkgeworCQljYXNlIFVVSUREX09QX0dFVFBJRDoKKwkJCXNwcmludGYocmVwbHlfYnVmLCAiJWQiLCBnZXRwaWQoKSk7CisJCQlyZXBseV9sZW4gPSBzdHJsZW4ocmVwbHlfYnVmKSsxOworCQkJYnJlYWs7CisJCWNhc2UgVVVJRERfT1BfR0VUX01BWE9QOgorCQkJc3ByaW50ZihyZXBseV9idWYsICIlZCIsIFVVSUREX01BWF9PUCk7CisJCQlyZXBseV9sZW4gPSBzdHJsZW4ocmVwbHlfYnVmKSsxOworCQkJYnJlYWs7CisJCWNhc2UgVVVJRERfT1BfVElNRV9VVUlEOgorCQkJbnVtID0gMTsKKwkJCXV1aWRfX2dlbmVyYXRlX3RpbWUodXUsICZudW0pOworCQkJaWYgKGRlYnVnKSB7CisJCQkJdXVpZF91bnBhcnNlKHV1LCBzdHIpOworCQkJCXByaW50ZihfKCJHZW5lcmF0ZWQgdGltZSBVVUlEOiAlc1xuIiksIHN0cik7CisJCQl9CisJCQltZW1jcHkocmVwbHlfYnVmLCB1dSwgc2l6ZW9mKHV1KSk7CisJCQlyZXBseV9sZW4gPSBzaXplb2YodXUpOworCQkJYnJlYWs7CisJCWNhc2UgVVVJRERfT1BfUkFORE9NX1VVSUQ6CisJCQludW0gPSAxOworCQkJdXVpZF9fZ2VuZXJhdGVfcmFuZG9tKHV1LCAmbnVtKTsKKwkJCWlmIChkZWJ1ZykgeworCQkJCXV1aWRfdW5wYXJzZSh1dSwgc3RyKTsKKwkJCQlwcmludGYoXygiR2VuZXJhdGVkIHJhbmRvbSBVVUlEOiAlc1xuIiksIHN0cik7CisJCQl9CisJCQltZW1jcHkocmVwbHlfYnVmLCB1dSwgc2l6ZW9mKHV1KSk7CisJCQlyZXBseV9sZW4gPSBzaXplb2YodXUpOworCQkJYnJlYWs7CisJCWNhc2UgVVVJRERfT1BfQlVMS19USU1FX1VVSUQ6CisJCQl1dWlkX19nZW5lcmF0ZV90aW1lKHV1LCAmbnVtKTsKKwkJCWlmIChkZWJ1ZykgeworCQkJCXV1aWRfdW5wYXJzZSh1dSwgc3RyKTsKKwkJCQlwcmludGYoUF8oIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kICIKKwkJCQkJICAic3Vic2VxdWVudCBVVUlEXG4iLAorCQkJCQkgICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCAlZCAiCisJCQkJCSAgInN1YnNlcXVlbnQgVVVJRHNcbiIsIG51bSksCisJCQkJICAgICAgIHN0ciwgbnVtKTsKKwkJCX0KKwkJCW1lbWNweShyZXBseV9idWYsIHV1LCBzaXplb2YodXUpKTsKKwkJCXJlcGx5X2xlbiA9IHNpemVvZih1dSk7CisJCQltZW1jcHkocmVwbHlfYnVmK3JlcGx5X2xlbiwgJm51bSwgc2l6ZW9mKG51bSkpOworCQkJcmVwbHlfbGVuICs9IHNpemVvZihudW0pOworCQkJYnJlYWs7CisJCWNhc2UgVVVJRERfT1BfQlVMS19SQU5ET01fVVVJRDoKKwkJCWlmIChudW0gPCAwKQorCQkJCW51bSA9IDE7CisJCQlpZiAobnVtID4gMTAwMCkKKwkJCQludW0gPSAxMDAwOworCQkJaWYgKG51bSoxNiA+IChpbnQpIChzaXplb2YocmVwbHlfYnVmKS1zaXplb2YobnVtKSkpCisJCQkJbnVtID0gKHNpemVvZihyZXBseV9idWYpLXNpemVvZihudW0pKSAvIDE2OworCQkJdXVpZF9fZ2VuZXJhdGVfcmFuZG9tKCh1bnNpZ25lZCBjaGFyICopIHJlcGx5X2J1ZiArCisJCQkJCSAgICAgIHNpemVvZihudW0pLCAmbnVtKTsKKwkJCWlmIChkZWJ1ZykgeworCQkJCXByaW50ZihfKCJHZW5lcmF0ZWQgJWQgVVVJRCdzOlxuIiksIG51bSk7CisJCQkJZm9yIChpPTAsIGNwPXJlcGx5X2J1ZitzaXplb2YobnVtKTsKKwkJCQkgICAgIGkgPCBudW07IGkrKywgY3ArPTE2KSB7CisJCQkJCXV1aWRfdW5wYXJzZSgodW5zaWduZWQgY2hhciAqKWNwLCBzdHIpOworCQkJCQlwcmludGYoIlx0JXNcbiIsIHN0cik7CisJCQkJfQorCQkJfQorCQkJcmVwbHlfbGVuID0gKG51bSoxNikgKyBzaXplb2YobnVtKTsKKwkJCW1lbWNweShyZXBseV9idWYsICZudW0sIHNpemVvZihudW0pKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKGRlYnVnKQorCQkJCXByaW50ZihfKCJJbnZhbGlkIG9wZXJhdGlvbiAlZFxuIiksIG9wKTsKKwkJCWdvdG8gc2h1dGRvd25fc29ja2V0OworCQl9CisJCXdyaXRlX2FsbChucywgKGNoYXIgKikgJnJlcGx5X2xlbiwgc2l6ZW9mKHJlcGx5X2xlbikpOworCQl3cml0ZV9hbGwobnMsIHJlcGx5X2J1ZiwgcmVwbHlfbGVuKTsKKwlzaHV0ZG93bl9zb2NrZXQ6CisJCWNsb3NlKG5zKTsKKwl9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyCSpzb2NrZXRfcGF0aCA9IFVVSUREX1NPQ0tFVF9QQVRIOworCWNvbnN0IGNoYXIJKnBpZGZpbGVfcGF0aCA9IFVVSUREX1BJREZJTEVfUEFUSDsKKwljb25zdCBjaGFyCSplcnJfY29udGV4dDsKKwljaGFyCQlidWZbMTAyNF0sICpjcDsKKwljaGFyICAgCQlzdHJbMzddLCAqdG1wOworCXV1aWRfdAkJdXU7CisJdWlkX3QJCXVpZDsKKwlnaWRfdCAJCWdpZDsKKwlpbnQJCWksIGMsIHJldDsKKwlpbnQJCWRlYnVnID0gMCwgZG9fdHlwZSA9IDAsIGRvX2tpbGwgPSAwLCBudW0gPSAwOworCWludAkJdGltZW91dCA9IDAsIHF1aWV0ID0gMCwgZHJvcF9wcml2cyA9IDA7CisKKyNpZmRlZiBFTkFCTEVfTkxTCisJc2V0bG9jYWxlKExDX01FU1NBR0VTLCAiIik7CisJc2V0bG9jYWxlKExDX0NUWVBFLCAiIik7CisJYmluZHRleHRkb21haW4oTkxTX0NBVF9OQU1FLCBMT0NBTEVESVIpOworCXRleHRkb21haW4oTkxTX0NBVF9OQU1FKTsKKyNlbmRpZgorCisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiZGtuOnFwOnM6dFQ6ciIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2QnOgorCQkJZGVidWcrKzsKKwkJCWRyb3BfcHJpdnMgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ2snOgorCQkJZG9fa2lsbCsrOworCQkJZHJvcF9wcml2cyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnbic6CisJCQludW0gPSBzdHJ0b2wob3B0YXJnLCAmdG1wLCAwKTsKKwkJCWlmICgobnVtIDwgMCkgfHwgKnRtcCkgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCJCYWQgbnVtYmVyOiAlc1xuIiksIG9wdGFyZyk7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdwJzoKKwkJCXBpZGZpbGVfcGF0aCA9IG9wdGFyZzsKKwkJCWRyb3BfcHJpdnMgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ3EnOgorCQkJcXVpZXQrKzsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCXNvY2tldF9wYXRoID0gb3B0YXJnOworCQkJZHJvcF9wcml2cyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAndCc6CisJCQlkb190eXBlID0gVVVJRERfT1BfVElNRV9VVUlEOworCQkJZHJvcF9wcml2cyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnVCc6CisJCQl0aW1lb3V0ID0gc3RydG9sKG9wdGFyZywgJnRtcCwgMCk7CisJCQlpZiAoKHRpbWVvdXQgPCAwKSB8fCAqdG1wKSB7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIkJhZCBudW1iZXI6ICVzXG4iKSwgb3B0YXJnKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3InOgorCQkJZG9fdHlwZSA9IFVVSUREX09QX1JBTkRPTV9VVUlEOworCQkJZHJvcF9wcml2cyA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKGFyZ3ZbMF0pOworCQl9CisJfQorCXVpZCA9IGdldHVpZCgpOworCWlmICh1aWQgJiYgZHJvcF9wcml2cykgeworCQlnaWQgPSBnZXRnaWQoKTsKKyNpZmRlZiBIQVZFX1NFVFJFU0dJRAorCQlpZiAoc2V0cmVzZ2lkKGdpZCwgZ2lkLCBnaWQpIDwgMCkKKwkJCWRpZSgic2V0cmVzZ2lkIik7CisjZWxzZQorCQlpZiAoc2V0cmVnaWQoZ2lkLCBnaWQpIDwgMCkKKwkJCWRpZSgic2V0cmVnaWQiKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TRVRSRVNVSUQKKwkJaWYgKHNldHJlc3VpZCh1aWQsIHVpZCwgdWlkKSA8IDApCisJCQlkaWUoInNldHJlc3VpZCIpOworI2Vsc2UKKwkJaWYgKHNldHJldWlkKHVpZCwgdWlkKSA8IDApCisJCQlkaWUoInNldHJldWlkIik7CisjZW5kaWYKKwl9CisJaWYgKG51bSAmJiBkb190eXBlKSB7CisJCXJldCA9IGNhbGxfZGFlbW9uKHNvY2tldF9wYXRoLCBkb190eXBlKzIsIGJ1ZiwKKwkJCQkgIHNpemVvZihidWYpLCAmbnVtLCAmZXJyX2NvbnRleHQpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRmKF8oIkVycm9yIGNhbGxpbmcgdXVpZGQgZGFlbW9uICglcyk6ICVzXG4iKSwKKwkJCSAgICAgICBlcnJfY29udGV4dCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJaWYgKGRvX3R5cGUgPT0gVVVJRERfT1BfVElNRV9VVUlEKSB7CisJCQlpZiAocmV0ICE9IHNpemVvZih1dSkgKyBzaXplb2YobnVtKSkKKwkJCQlnb3RvIHVuZXhwZWN0ZWRfc2l6ZTsKKworCQkJdXVpZF91bnBhcnNlKCh1bnNpZ25lZCBjaGFyICopIGJ1Ziwgc3RyKTsKKworCQkJcHJpbnRmKFBfKCIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iLAorCQkJCSAgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iLCBudW0pLAorCQkJICAgICAgIHN0ciwgbnVtKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiJXMiLCBfKCJMaXN0IG9mIFVVSUQnczpcbiIpKTsKKwkJCWNwID0gYnVmICsgNDsKKwkJCWlmIChyZXQgIT0gKGludCkgKHNpemVvZihudW0pICsgbnVtKnNpemVvZih1dSkpKQorCQkJCWdvdG8gdW5leHBlY3RlZF9zaXplOworCQkJZm9yIChpPTA7IGkgPCBudW07IGkrKywgY3ArPTE2KSB7CisJCQkJdXVpZF91bnBhcnNlKCh1bnNpZ25lZCBjaGFyICopIGNwLCBzdHIpOworCQkJCXByaW50ZigiXHQlc1xuIiwgc3RyKTsKKwkJCX0KKwkJfQorCQlleGl0KDApOworCX0KKwlpZiAoZG9fdHlwZSkgeworCQlyZXQgPSBjYWxsX2RhZW1vbihzb2NrZXRfcGF0aCwgZG9fdHlwZSwgKGNoYXIgKikgJnV1LAorCQkJCSAgc2l6ZW9mKHV1KSwgMCwgJmVycl9jb250ZXh0KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ZihfKCJFcnJvciBjYWxsaW5nIHV1aWRkIGRhZW1vbiAoJXMpOiAlc1xuIiksCisJCQkgICAgICAgZXJyX2NvbnRleHQsIHN0cmVycm9yKGVycm5vKSk7CisJCQlleGl0KDEpOworCQl9CisJCWlmIChyZXQgIT0gc2l6ZW9mKHV1KSkgeworCQl1bmV4cGVjdGVkX3NpemU6CisJCQlwcmludGYoXygiVW5leHBlY3RlZCByZXBseSBsZW5ndGggZnJvbSBzZXJ2ZXIgJWRcbiIpLAorCQkJICAgICAgIHJldCk7CisJCQlleGl0KDEpOworCQl9CisJCXV1aWRfdW5wYXJzZSh1dSwgc3RyKTsKKworCQlwcmludGYoIiVzXG4iLCBzdHIpOworCQlleGl0KDApOworCX0KKworCWlmIChkb19raWxsKSB7CisJCXJldCA9IGNhbGxfZGFlbW9uKHNvY2tldF9wYXRoLCAwLCBidWYsIHNpemVvZihidWYpLCAwLCAwKTsKKwkJaWYgKChyZXQgPiAwKSAmJiAoKGRvX2tpbGwgPSBhdG9pKChjaGFyICopIGJ1ZikpID4gMCkpIHsKKwkJCXJldCA9IGtpbGwoZG9fa2lsbCwgU0lHVEVSTSk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWlmICghcXVpZXQpCisJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJXygiQ291bGRuJ3Qga2lsbCB1dWlkZCBydW5uaW5nICIKKwkJCQkJCSAgImF0IHBpZCAlZDogJXNcbiIpLCBkb19raWxsLAorCQkJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJaWYgKCFxdWlldCkKKwkJCQlwcmludGYoXygiS2lsbGVkIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkXG4iKSwKKwkJCQkgICAgICAgZG9fa2lsbCk7CisJCX0KKwkJZXhpdCgwKTsKKwl9CisKKwlzZXJ2ZXJfbG9vcChzb2NrZXRfcGF0aCwgcGlkZmlsZV9wYXRoLCBkZWJ1ZywgdGltZW91dCwgcXVpZXQpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbWlzYy91dWlkZC5yYyBiL21pc2MvdXVpZGQucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1NjQ1YQotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvdXVpZGQucmMKQEAgLTAsMCArMSw1NSBAQAorIyEgL2Jpbi9zaCAtZQorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdXVpZGQKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICR0aW1lICRsb2NhbF9mcworIyBSZXF1aXJlZC1TdG9wOiAgICAgJHRpbWUgJGxvY2FsX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogdXVpZGQgZGFlbW9uCisjIERlc2NyaXB0aW9uOiAgICAgICBJbml0IHNjcmlwdCBmb3IgdGhlIHV1aWQgZ2VuZXJhdGlvbiBkYWVtb24KKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIEF1dGhvcjoJIlRoZW9kb3JlIFRzJ28iIDx0eXRzb0BtaXQuZWR1PgorIworc2V0IC1lCisKK1BBVEg9L2JpbjovdXNyL2Jpbjovc2JpbjovdXNyL3NiaW4KK0RBRU1PTj0vdXNyL3NiaW4vdXVpZGQKK1BJREZJTEU9L3Zhci9ydW4vdXVpZGQvdXVpZGQucGlkCisKK3Rlc3QgLXggJERBRU1PTiB8fCBleGl0IDAKKworLiAvbGliL2xzYi9pbml0LWZ1bmN0aW9ucworCitjYXNlICIkMSIgaW4KKyAgICBzdGFydCkKKwlsb2dfZGFlbW9uX21zZyAiU3RhcnRpbmcgdXVpZCBnZW5lcmF0b3IiICJ1dWlkZCIKKwlzdGFydF9kYWVtb24gLXAgJFBJREZJTEUgJERBRU1PTgorCWxvZ19lbmRfbXNnICQ/CisgICAgOzsKKyAgc3RvcCkKKwlsb2dfZGFlbW9uX21zZyAiU3RvcHBpbmcgdXVpZGQgZ2VuZXJhdG9yIiAidXVpZGQiCisJa2lsbHByb2MgLXAgJFBJREZJTEUgJERBRU1PTgorCWxvZ19lbmRfbXNnICQ/CisgICAgOzsKKyAgc3RhdHVzKQorCWlmIHBpZG9mcHJvYyAtcCAkUElERklMRSAkREFFTU9OID4mIC9kZXYvbnVsbCA7IHRoZW4KKwkgICAgZWNobyAiJERBRU1PTiBpcyBydW5uaW5nIjsKKwkgICAgZXhpdCAwOworCWVsc2UKKwkgICAgZWNobyAiJERBRU1PTiBpcyBOT1QgcnVubmluZyI7CisJICAgIGlmIHRlc3QgLWYgL3Zhci9ydW4vdXVpZGQucGlkOyB0aGVuIGV4aXQgMjsgZmkKKwkgICAgZXhpdCAzOworCWZpCisJOzsKKyAgZm9yY2UtcmVsb2FkfHJlc3RhcnQpCisgICAgJDAgc3RvcAorICAgICQwIHN0YXJ0CisgICAgOzsKKyAgKikKKyAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvdXVpZGQge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR9IgorICAgIGV4aXQgMQorICAgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWlzYy91dWlkZ2VuLjEuaW4gYi9taXNjL3V1aWRnZW4uMS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODVlODBkCi0tLSAvZGV2L251bGwKKysrIGIvbWlzYy91dWlkZ2VuLjEuaW4KQEAgLTAsMCArMSw2MyBAQAorLlwiIENvcHlyaWdodCAxOTk5IEFuZHJlYXMgRGlsZ2VyIChhZGlsZ2VyQGVuZWwudWNhbGdhcnkuY2EpCisuXCIKKy5cIiBUaGlzIG1hbiBwYWdlIHdhcyBjcmVhdGVkIGZvciBsaWJ1dWlkLnNvLjEuMSBmcm9tIGUyZnNwcm9ncy0xLjE0LgorLlwiIAorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiIAorLlwiIENyZWF0ZWQgIFdlZCBNYXIgMTAgMTc6NDI6MTIgMTk5OSwgQW5kcmVhcyBEaWxnZXIKKy5USCBVVUlER0VOIDEgIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK3V1aWRnZW4gXC0gY29tbWFuZFwtbGluZSB1dGlsaXR5IHRvIGNyZWF0ZSBhIG5ldyBVVUlEIHZhbHVlCisuU0ggU1lOT1BTSVMKKy5CIHV1aWRnZW4gCitbCisuQiBcLXIKK3wKKy5CIFwtdAorXQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIHV1aWRnZW4KK3Byb2dyYW0gY3JlYXRlcyAoYW5kIHByaW50cykgCithIG5ldyB1bml2ZXJzYWxseSB1bmlxdWUgaWRlbnRpZmllciAoVVVJRCkgdXNpbmcgdGhlCisuQlIgbGlidXVpZCAoMykKK2xpYnJhcnkuICBUaGUgbmV3IFVVSUQgY2FuIHJlYXNvbmFibHkgYmUgY29uc2lkZXJlZCB1bmlxdWUgYW1vbmcgCithbGwgVVVJRHMgY3JlYXRlZCBvbiB0aGUgbG9jYWwgc3lzdGVtLCAKK2FuZCBhbW9uZyBVVUlEcyBjcmVhdGVkIG9uIG90aGVyIHN5c3RlbXMgaW4gdGhlIHBhc3QKK2FuZCBpbiB0aGUgZnV0dXJlLgorLlBQCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIFVVSUQncyB3aGljaCAKKy5CIHV1aWRnZW4KK2NhbiBnZW5lcmF0ZTogdGltZS1iYXNlZCBVVUlEJ3MgYW5kIHJhbmRvbS1iYXNlZCBVVUlEJ3MuICBCeSAKK2RlZmF1bHQgCisuQiB1dWlkZ2VuCit3aWxsIGdlbmVyYXRlIGEgcmFuZG9tLWJhc2VkIFVVSUQgaWYgYSBoaWdoLXF1YWxpdHkgcmFuZG9tIG51bWJlcgorZ2VuZXJhdG9yIGlzIHByZXNlbnQuICBPdGhlcndpc2UsIGl0IHdpbGwgY2hvc2UgYSB0aW1lLWJhc2VkIFVVSUQuICBJdCAKK2lzIHBvc3NpYmxlIHRvIGZvcmNlIHRoZSBnZW5lcmF0aW9uIG9mIG9uZSBvZiB0aGVzZSB0d28gCitVVUlEIHR5cGVzIGJ5IHVzaW5nIHRoZQorLkIgXC1yCitvcgorLkIgXC10CitvcHRpb25zLgorLlNIIE9QVElPTlMKKy5UUAorLkIgXC1yCitHZW5lcmF0ZSBhIHJhbmRvbS1iYXNlZCBVVUlELiAgVGhpcyBtZXRob2QgY3JlYXRlcyBhIFVVSUQgY29uc2lzdGluZyBtb3N0bHkKK29mIHJhbmRvbSBiaXRzLiAgSXQgcmVxdWlyZXMgdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBoYXZlIGEgaGlnaAorcXVhbGl0eSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciwgc3VjaCBhcworLklSIC9kZXYvcmFuZG9tIC4KKy5UUAorLkIgXC10CitHZW5lcmF0ZSBhIHRpbWUtYmFzZWQgVVVJRC4gIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBVVUlEIGJhc2VkIG9uIHRoZSBzeXN0ZW0gCitjbG9jayBwbHVzIHRoZSBzeXN0ZW0ncyBldGhlcm5ldCBoYXJkd2FyZSBhZGRyZXNzLCBpZiBwcmVzZW50LgorLlNIICJDT05GT1JNSU5HIFRPIgorT1NGIERDRSAxLjEKKy5TSCBBVVRIT1IKKy5CIHV1aWRnZW4KK3dhcyB3cml0dGVuIGJ5IEFuZHJlYXMgRGlsZ2VyIGZvciBsaWJ1dWlkLgorLlNIIEFWQUlMQUJJTElUWQorLkIgdXVpZGdlbgoraXMgcGFydCBvZiBsaWJ1dWlkIGZyb20gdGhlIGUyZnNwcm9ncyBwYWNrYWdlIGFuZCBpcyBhdmFpbGFibGUgZnJvbQoraHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQuCisuU0ggIlNFRSBBTFNPIgorLkJSIGxpYnV1aWQgKDMpCmRpZmYgLS1naXQgYS9taXNjL3V1aWRnZW4uYyBiL21pc2MvdXVpZGdlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODFkMTkKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL3V1aWRnZW4uYwpAQCAtMCwwICsxLDgwIEBACisvKgorICogZ2VuX3V1aWQuYyAtLS0gZ2VuZXJhdGUgYSBEQ0UtY29tcGF0aWJsZSB1dWlkCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCBBbmRyZWFzIERpbGdlciBhbmQgVGhlb2RvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBpbnQgZ2V0b3B0KGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcpOworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKK2V4dGVybiBpbnQgb3B0aW5kOworI2VuZGlmCisjaW5jbHVkZSAidXVpZC91dWlkLmgiCisjaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorCisjZGVmaW5lIERPX1RZUEVfVElNRQkxCisjZGVmaW5lIERPX1RZUEVfUkFORE9NCTIKKworc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCit7CisJZnByaW50ZihzdGRlcnIsIF8oIlVzYWdlOiAlcyBbLXJdIFstdF1cbiIpLCBwcm9nbmFtZSk7CisJZXhpdCgxKTsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCAgICBjOworCWludCAgICBkb190eXBlID0gMDsKKwljaGFyICAgc3RyWzM3XTsKKwl1dWlkX3QgdXU7CisKKyNpZmRlZiBFTkFCTEVfTkxTCisJc2V0bG9jYWxlKExDX01FU1NBR0VTLCAiIik7CisJc2V0bG9jYWxlKExDX0NUWVBFLCAiIik7CisJYmluZHRleHRkb21haW4oTkxTX0NBVF9OQU1FLCBMT0NBTEVESVIpOworCXRleHRkb21haW4oTkxTX0NBVF9OQU1FKTsKKyNlbmRpZgorCisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAidHIiKSkgIT0gRU9GKQorCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAndCc6CisJCQlkb190eXBlID0gRE9fVFlQRV9USU1FOworCQkJYnJlYWs7CisJCWNhc2UgJ3InOgorCQkJZG9fdHlwZSA9IERPX1RZUEVfUkFORE9NOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl1c2FnZShhcmd2WzBdKTsKKwkJfQorCisJc3dpdGNoIChkb190eXBlKSB7CisJY2FzZSBET19UWVBFX1RJTUU6CisJCXV1aWRfZ2VuZXJhdGVfdGltZSh1dSk7CisJCWJyZWFrOworCWNhc2UgRE9fVFlQRV9SQU5ET006CisJCXV1aWRfZ2VuZXJhdGVfcmFuZG9tKHV1KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdXVpZF9nZW5lcmF0ZSh1dSk7CisJCWJyZWFrOworCX0KKworCXV1aWRfdW5wYXJzZSh1dSwgc3RyKTsKKworCXByaW50ZigiJXNcbiIsIHN0cik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3BvL0xJTkdVQVMgYi9wby9MSU5HVUFTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDljMjIKLS0tIC9kZXYvbnVsbAorKysgYi9wby9MSU5HVUFTCkBAIC0wLDAgKzEgQEAKK2NhIGNzIGRhIGRlIGVvIGVzIGZyIGlkIGl0IG5sIHBsIHN2IHRyIHVrIHZpIHpoX0NOCmRpZmYgLS1naXQgYS9wby9NYWtlZmlsZS5pbi5pbiBiL3BvL01ha2VmaWxlLmluLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZTJmMmEKLS0tIC9kZXYvbnVsbAorKysgYi9wby9NYWtlZmlsZS5pbi5pbgpAQCAtMCwwICsxLDM3NSBAQAorIyBNYWtlZmlsZSBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorIyBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgMjAwMC0yMDA0IGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PgorIworIyBUaGlzIGZpbGUgY2FuIGJlIGNvcGllZCBhbmQgdXNlZCBmcmVlbHkgd2l0aG91dCByZXN0cmljdGlvbnMuICBJdCBjYW4KKyMgYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKyMgZnVuY3Rpb25hbGl0eS4KKyMgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgR05VIGdldHRleHQgaXMgY292ZXJlZCBieSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIGlzICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorIworIyBPcmlnaW46IGdldHRleHQtMC4xNAorCitQQUNLQUdFID0gQFBBQ0tBR0VACitWRVJTSU9OID0gQFZFUlNJT05ACisKK1NIRUxMID0gL2Jpbi9zaAorQFNFVF9NQUtFQAorCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorCitwcmVmaXggPSBAcHJlZml4QAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2xvY2FsZWRpciA9ICQoZGF0YWRpcikvbG9jYWxlCitnZXR0ZXh0c3JjZGlyID0gJChkYXRhZGlyKS9nZXR0ZXh0L3BvCisKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJChNS0lOU1RBTExESVJTKQorCitHTVNHRk1UID0gQEdNU0dGTVRACitNU0dGTVQgPSBATVNHRk1UQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitNU0dNRVJHRSA9IG1zZ21lcmdlCitNU0dNRVJHRV9VUERBVEUgPSBATVNHTUVSR0VAIC0tdXBkYXRlCitNU0dJTklUID0gbXNnaW5pdAorTVNHQ09OViA9IG1zZ2NvbnYKK01TR0ZJTFRFUiA9IG1zZ2ZpbHRlcgorCitQT0ZJTEVTID0gQFBPRklMRVNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK1VQREFURVBPRklMRVMgPSBAVVBEQVRFUE9GSUxFU0AKK0RVTU1ZUE9GSUxFUyA9IEBEVU1NWVBPRklMRVNACitESVNURklMRVMuY29tbW9uID0gTWFrZWZpbGUuaW4uaW4gcmVtb3ZlLXBvdGNkYXRlLnNpbiBcCiskKERJU1RGSUxFUy5jb21tb24uZXh0cmExKSAkKERJU1RGSUxFUy5jb21tb24uZXh0cmEyKSAkKERJU1RGSUxFUy5jb21tb24uZXh0cmEzKQorRElTVEZJTEVTID0gJChESVNURklMRVMuY29tbW9uKSBNYWtldmFycyBQT1RGSUxFUy5pbiAkKERPTUFJTikucG90IHN0YW1wLXBvIFwKKyQoUE9GSUxFUykgJChHTU9GSUxFUykgXAorJChESVNURklMRVMuZXh0cmExKSAkKERJU1RGSUxFUy5leHRyYTIpICQoRElTVEZJTEVTLmV4dHJhMykKKworUE9URklMRVMgPSBcCisKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorCisjIE1ha2V2YXJzIGdldHMgaW5zZXJ0ZWQgaGVyZS4gKERvbid0IHJlbW92ZSB0aGlzIGxpbmUhKQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5wbyAuZ21vIC5tbyAuc2VkIC5zaW4gLm5vcCAucG8tY3JlYXRlIC5wby11cGRhdGUKKworLnBvLm1vOgorCSQoRSkgIiQoTVNHRk1UKSAtYyAtbyAkQCAkPCIKKwkkKFEpICQoTVNHRk1UKSAtYyAtbyB0LSRAICQ8ICYmIG12IHQtJEAgJEAKKworLnBvLmdtbzoKKwlAbGFuZz1gZWNobyAkKiB8IHNlZCAtZSAncywuKi8sLCdgOyBcCisJdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCisJZWNobyAiJCR7Y2RjbWR9cm0gLWYgJCR7bGFuZ30uZ21vICYmICQoR01TR0ZNVCkgLWMgLS1zdGF0aXN0aWNzIC1vICQke2xhbmd9LmdtbyAkJHtsYW5nfS5wbyI7IFwKKwljZCAkKHNyY2RpcikgJiYgcm0gLWYgJCR7bGFuZ30uZ21vICYmICQoR01TR0ZNVCkgLWMgLS1zdGF0aXN0aWNzIC1vIHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvICYmIG12IHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LmdtbworCisuc2luLnNlZDoKKwlzZWQgLWUgJy9eIy9kJyAkPCA+IHQtJEAKKwltdiB0LSRAICRACisKKworYWxsOiBhbGwtQFVTRV9OTFNACisKK2FsbC15ZXM6IEBNQUlOVEFJTkVSX0NNVEBzdGFtcC1wbworYWxsLW5vOgorCisjIHN0YW1wLXBvIGlzIGEgdGltZXN0YW1wIGRlbm90aW5nIHRoZSBsYXN0IHRpbWUgYXQgd2hpY2ggdGhlIENBVEFMT0dTIGhhdmUKKyMgYmVlbiBsb29zZWx5IHVwZGF0ZWQuIEl0cyBwdXJwb3NlIGlzIHRoYXQgd2hlbiBhIGRldmVsb3BlciBvciB0cmFuc2xhdG9yCisjIGNoZWNrcyBvdXQgdGhlIHBhY2thZ2UgdmlhIENWUywgYW5kIHRoZSAkKERPTUFJTikucG90IGZpbGUgaXMgbm90IGluIENWUywKKyMgIm1ha2UiIHdpbGwgdXBkYXRlIHRoZSAkKERPTUFJTikucG90IGFuZCB0aGUgJChDQVRBTE9HUyksIGJ1dCBzdWJzZXF1ZW50CisjIGludm9jYXRpb25zIG9mICJtYWtlIiB3aWxsIGRvIG5vdGhpbmcuIFRoaXMgdGltZXN0YW1wIHdvdWxkIG5vdCBiZSBuZWNlc3NhcnkKKyMgaWYgdXBkYXRpbmcgdGhlICQoQ0FUQUxPR1MpIHdvdWxkIGFsd2F5cyB0b3VjaCB0aGVtOyBob3dldmVyLCB0aGUgcnVsZSBmb3IKKyMgJChQT0ZJTEVTKSBoYXMgYmVlbiBkZXNpZ25lZCB0byBub3QgdG91Y2ggZmlsZXMgdGhhdCBkb24ndCBuZWVkIHRvIGJlCisjIGNoYW5nZWQuCitzdGFtcC1wbzogJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QKKwl0ZXN0IC16ICIkKEdNT0ZJTEVTKSIgfHwgJChNQUtFKSAkKEdNT0ZJTEVTKQorCUBlY2hvICJ0b3VjaCBzdGFtcC1wbyIKKwlAZWNobyB0aW1lc3RhbXAgPiBzdGFtcC1wb1QKKwlAbXYgc3RhbXAtcG9UIHN0YW1wLXBvCisKKyMgTm90ZTogVGFyZ2V0ICdhbGwnIG11c3Qgbm90IGRlcGVuZCBvbiB0YXJnZXQgJyQoRE9NQUlOKS5wb3QtdXBkYXRlJywKKyMgb3RoZXJ3aXNlIHBhY2thZ2VzIGxpa2UgR0NDIGNhbiBub3QgYmUgYnVpbHQgaWYgb25seSBwYXJ0cyBvZiB0aGUgc291cmNlCisjIGhhdmUgYmVlbiBkb3dubG9hZGVkLgorCisjIFRoaXMgdGFyZ2V0IHJlYnVpbGRzICQoRE9NQUlOKS5wb3Q7IGl0IGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24uCisjIE5vdGUgdGhhdCAkKERPTUFJTikucG90IGlzIG5vdCB0b3VjaGVkIGlmIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjaGFuZ2VkLgorJChET01BSU4pLnBvdC11cGRhdGU6ICQoc3JjZGlyKS9QT1RGSUxFUy5pbiByZW1vdmUtcG90Y2RhdGUuc2VkIFwKKwkkKHNyY2RpcikvYXQtZXhwYW5kLnBsCisJJChYR0VUVEVYVCkgLS1kZWZhdWx0LWRvbWFpbj0kKERPTUFJTikgLS1kaXJlY3Rvcnk9JCh0b3Bfc3JjZGlyKSBcCisJICAtLWRpcmVjdG9yeT0kKHRvcF9idWlsZGRpcikgXAorCSAgLS1hZGQtY29tbWVudHM9VFJBTlNMQVRPUlM6ICQoWEdFVFRFWFRfT1BUSU9OUykgXAorCSAgLS1maWxlcy1mcm9tPSQoc3JjZGlyKS9QT1RGSUxFUy5pbiBcCisJICAtLWNvcHlyaWdodC1ob2xkZXI9JyQoQ09QWVJJR0hUX0hPTERFUiknIFwKKwkgIC0tbXNnaWQtYnVncy1hZGRyZXNzPSckKE1TR0lEX0JVR1NfQUREUkVTUyknCisJcGVybCAkKHNyY2RpcikvYXQtZXhwYW5kLnBsIDwgJChET01BSU4pLnBvID4gJChET01BSU4pLnBvLm5ldworCW12ICQoRE9NQUlOKS5wbyAkKERPTUFJTikucG8uYmFrCisJbXYgJChET01BSU4pLnBvLm5ldyAkKERPTUFJTikucG8KKwl0ZXN0ICEgLWYgJChET01BSU4pLnBvIHx8IHsgXAorCSAgaWYgdGVzdCAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgdGhlbiBcCisJICAgIHNlZCAtZiByZW1vdmUtcG90Y2RhdGUuc2VkIDwgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgPiAkKERPTUFJTikuMXBvICYmIFwKKwkgICAgc2VkIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQgPCAkKERPTUFJTikucG8gPiAkKERPTUFJTikuMnBvICYmIFwKKwkgICAgaWYgY21wICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgICAgIHJtIC1mICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAkKERPTUFJTikucG87IFwKKwkgICAgZWxzZSBcCisJICAgICAgcm0gLWYgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90ICYmIFwKKwkgICAgICBtdiAkKERPTUFJTikucG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKKwkgICAgZmk7IFwKKwkgIGVsc2UgXAorCSAgICBtdiAkKERPTUFJTikucG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKKwkgIGZpOyBcCisJfQorCisjIFRoaXMgcnVsZSBoYXMgbm8gZGVwZW5kZW5jaWVzOiB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSAkKERPTUFJTikucG90IGF0CisjIGV2ZXJ5ICJtYWtlIiBpbnZvY2F0aW9uLCBvbmx5IGNyZWF0ZSBpdCB3aGVuIGl0IGlzIG1pc3NpbmcuCisjIE9ubHkgIm1ha2UgJChET01BSU4pLnBvdC11cGRhdGUiIG9yICJtYWtlIGRpc3QiIHdpbGwgZm9yY2UgYW4gdXBkYXRlLgorJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q6CisJJChNQUtFKSAkKERPTUFJTikucG90LXVwZGF0ZQorCisjIFRoaXMgdGFyZ2V0IHJlYnVpbGRzIGEgUE8gZmlsZSBpZiAkKERPTUFJTikucG90IGhhcyBjaGFuZ2VkLgorIyBOb3RlIHRoYXQgYSBQTyBmaWxlIGlzIG5vdCB0b3VjaGVkIGlmIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjaGFuZ2VkLgorJChQT0ZJTEVTKTogJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncywuKi8sLCcgLWUgJ3MvXC5wbyQkLy8nYDsgXAorCWlmIHRlc3QgLWYgIiQoc3JjZGlyKS8kJHtsYW5nfS5wbyI7IHRoZW4gXAorCSAgdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCisJICBlY2hvICIkJHtjZGNtZH0kKE1TR01FUkdFX1VQREFURSkgJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdCI7IFwKKwkgIGNkICQoc3JjZGlyKSAmJiAkKE1TR01FUkdFX1VQREFURSkgJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkJHtsYW5nfS5wby1jcmVhdGU7IFwKKwlmaQorCisKK2luc3RhbGw6IGluc3RhbGwtZXhlYyBpbnN0YWxsLWRhdGEKK2luc3RhbGwtZXhlYzoKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLUBVU0VfTkxTQAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKKwkgIGZvciBmaWxlIGluICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMudGVtcGxhdGU7IGRvIFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGZpbGUgXAorCQkJICAgICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCSAgZm9yIGZpbGUgaW4gTWFrZXZhcnM7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCitpbnN0YWxsLWRhdGEtbm86IGFsbAoraW5zdGFsbC1kYXRhLXllczogYWxsCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChkYXRhZGlyKQorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQkZGlyOyBcCisJICBpZiB0ZXN0IC1yICQkY2F0OyB0aGVuIHJlYWxjYXQ9JCRjYXQ7IGVsc2UgcmVhbGNhdD0kKHNyY2RpcikvJCRjYXQ7IGZpOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRyZWFsY2F0ICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW87IFwKKwkgIGVjaG8gImluc3RhbGxpbmcgJCRyZWFsY2F0IGFzICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW8iOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKKwkgICAgICBsbiAtcyAuLi9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW8gMj4vZGV2L251bGwgfHwgXAorCSAgICAgIGxuICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyAyPi9kZXYvbnVsbCB8fCBcCisJICAgICAgY3AgLXAgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICAgICAgZWNobyAiaW5zdGFsbGluZyAkJHJlYWxjYXQgbGluayBhcyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyI7IFwKKwkgICAgZmk7IFwKKwkgIGRvbmU7IFwKKwlkb25lCisKK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKworaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLWV4ZWMgaW5zdGFsbGRpcnMtZGF0YQoraW5zdGFsbGRpcnMtZXhlYzoKK2luc3RhbGxkaXJzLWRhdGE6IGluc3RhbGxkaXJzLWRhdGEtQFVTRV9OTFNACisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQoraW5zdGFsbGRpcnMtZGF0YS1ubzoKK2luc3RhbGxkaXJzLWRhdGEteWVzOgorCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoZGF0YWRpcikKKwlAY2F0YWxvZ3M9JyQoQ0FUQUxPR1MpJzsgXAorCWZvciBjYXQgaW4gJCRjYXRhbG9nczsgZG8gXAorCSAgY2F0PWBiYXNlbmFtZSAkJGNhdGA7IFwKKwkgIGxhbmc9YGVjaG8gJCRjYXQgfCBzZWQgLWUgJ3MvXC5nbW8kJC8vJ2A7IFwKKwkgIGRpcj0kKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTOyBcCisJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkJGRpcjsgXAorCSAgZm9yIGxjIGluICcnICQoRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMpOyBkbyBcCisJICAgIGlmIHRlc3QgLW4gIiQkbGMiOyB0aGVuIFwKKwkgICAgICBpZiAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyAyPi9kZXYvbnVsbCkgfCBncmVwICcgLT4gJyA+L2Rldi9udWxsOyB0aGVuIFwKKwkgICAgICAgIGxpbms9YGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgfCBzZWQgLWUgJ3MvXi4qIC0+IC8vJ2A7IFwKKwkgICAgICAgIG12ICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKKwkgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZCAmJiBcCisJICAgICAgICAgZm9yIGZpbGUgaW4gKjsgZG8gXAorCSAgICAgICAgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAorCSAgICAgICAgICAgICBsbiAtcyAuLi8kJGxpbmsvJCRmaWxlICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJCRmaWxlOyBcCisJICAgICAgICAgICBmaTsgXAorCSAgICAgICAgIGRvbmUpOyBcCisJICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgIGVsc2UgXAorCSAgICAgICAgaWYgdGVzdCAtZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyB0aGVuIFwKKwkgICAgICAgICAgOjsgXAorCSAgICAgICAgZWxzZSBcCisJICAgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgZmk7IFwKKwkgICAgICBmaTsgXAorCSAgICBmaTsgXAorCSAgZG9uZTsgXAorCWRvbmUKKworIyBEZWZpbmUgdGhpcyBhcyBlbXB0eSB1bnRpbCBJIGZvdW5kIGEgdXNlZnVsIGFwcGxpY2F0aW9uLgoraW5zdGFsbGNoZWNrOgorCit1bmluc3RhbGw6IHVuaW5zdGFsbC1leGVjIHVuaW5zdGFsbC1kYXRhCit1bmluc3RhbGwtZXhlYzoKK3VuaW5zdGFsbC1kYXRhOiB1bmluc3RhbGwtZGF0YS1AVVNFX05MU0AKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICBmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzLnRlbXBsYXRlOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQordW5pbnN0YWxsLWRhdGEtbm86Cit1bmluc3RhbGwtZGF0YS15ZXM6CisJY2F0YWxvZ3M9JyQoQ0FUQUxPR1MpJzsgXAorCWZvciBjYXQgaW4gJCRjYXRhbG9nczsgZG8gXAorCSAgY2F0PWBiYXNlbmFtZSAkJGNhdGA7IFwKKwkgIGxhbmc9YGVjaG8gJCRjYXQgfCBzZWQgLWUgJ3MvXC5nbW8kJC8vJ2A7IFwKKwkgIGZvciBsYyBpbiBMQ19NRVNTQUdFUyAkKEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTKTsgZG8gXAorCSAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbzsgXAorCSAgZG9uZTsgXAorCWRvbmUKKworY2hlY2s6IGFsbAorCitpbmZvIGR2aSBwcyBwZGYgaHRtbCB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgSUQ6CisKK21vc3RseWNsZWFuOgorCXJtIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQgCisJcm0gLWYgc3RhbXAtcG9UCisJcm0gLWYgY29yZSBjb3JlLiogJChET01BSU4pLnBvICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAqLm5ldy5wbworCXJtIC1mICQoRE9NQUlOKS5wby5iYWsKKwlybSAtZnIgKi5vCisKK2NvdmVyYWdlLnR4dDo6CisKK2NsZWFuOjogbW9zdGx5Y2xlYW4KKworZGlzdGNsZWFuOiBjbGVhbgorCXJtIC1mIE1ha2VmaWxlIE1ha2VmaWxlLmluIFBPVEZJTEVTICoubW8KKworbWFpbnRhaW5lci1jbGVhbjogZGlzdGNsZWFuCisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlOyIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJcm0gLWYgc3RhbXAtcG8gJChHTU9GSUxFUykKKworZGlzdGRpciA9ICQodG9wX2J1aWxkZGlyKS8kKFBBQ0tBR0UpLSQoVkVSU0lPTikvJChzdWJkaXIpCitkaXN0IGRpc3RkaXI6CisJJChNQUtFKSB1cGRhdGUtcG8KKwlAJChNQUtFKSBkaXN0MgorIyBUaGlzIGlzIGEgc2VwYXJhdGUgdGFyZ2V0IGJlY2F1c2UgJ3VwZGF0ZS1wbycgbXVzdCBiZSBleGVjdXRlZCBiZWZvcmUuCitkaXN0MjogJChESVNURklMRVMpCisJZGlzdHM9IiQoRElTVEZJTEVTKSI7IFwKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyBNYWtldmFycy50ZW1wbGF0ZSI7IFwKKwlmaTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpL0NoYW5nZUxvZzsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyBDaGFuZ2VMb2ciOyBcCisJZmk7IFwKKwlmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS9DaGFuZ2VMb2cuJCRpOyB0aGVuIFwKKwkgICAgZGlzdHM9IiQkZGlzdHMgQ2hhbmdlTG9nLiQkaSI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpL0xJTkdVQVM7IHRoZW4gZGlzdHM9IiQkZGlzdHMgTElOR1VBUyI7IGZpOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAorCSAgICBjcCAtcCAkJGZpbGUgJChkaXN0ZGlyKTsgXAorCSAgZWxzZSBcCisJICAgIGNwIC1wICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKTsgXAorCSAgZmk7IFwKKwlkb25lCisKK3VwZGF0ZS1wbzogTWFrZWZpbGUKKwkkKE1BS0UpICQoRE9NQUlOKS5wb3QtdXBkYXRlCisJdGVzdCAteiAiJChVUERBVEVQT0ZJTEVTKSIgfHwgJChNQUtFKSAkKFVQREFURVBPRklMRVMpCisJJChNQUtFKSB1cGRhdGUtZ21vCisKKyMgR2VuZXJhbCBydWxlIGZvciBjcmVhdGluZyBQTyBmaWxlcy4KKworLm5vcC5wby1jcmVhdGU6CisJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby1jcmVhdGUkJC8vJ2A7IFwKKwllY2hvICJGaWxlICQkbGFuZy5wbyBkb2VzIG5vdCBleGlzdC4gSWYgeW91IGFyZSBhIHRyYW5zbGF0b3IsIHlvdSBjYW4gY3JlYXRlIGl0IHRocm91Z2ggJ21zZ2luaXQnLiIgMT4mMjsgXAorCWV4aXQgMQorCisjIEdlbmVyYWwgcnVsZSBmb3IgdXBkYXRpbmcgUE8gZmlsZXMuCisKKy5ub3AucG8tdXBkYXRlOgorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzL1wucG8tdXBkYXRlJCQvLydgOyBcCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gUEFUSD1gcHdkYC8uLi9zcmM6JCRQQVRIOyBmaTsgXAorCXRtcGRpcj1gcHdkYDsgXAorCWVjaG8gIiQkbGFuZzoiOyBcCisJdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCisJZWNobyAiJCR7Y2RjbWR9JChNU0dNRVJHRSkgJCRsYW5nLnBvICQoRE9NQUlOKS5wb3QgLW8gJCRsYW5nLm5ldy5wbyI7IFwKKwljZCAkKHNyY2Rpcik7IFwKKwlpZiAkKE1TR01FUkdFKSAkJGxhbmcucG8gJChET01BSU4pLnBvdCAtbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyB0aGVuIFwKKwkgIGlmIGNtcCAkJGxhbmcucG8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJICBlbHNlIFwKKwkgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG87IHRoZW4gXAorCSAgICAgIDo7IFwKKwkgICAgZWxzZSBcCisJICAgICAgZWNobyAibXNnbWVyZ2UgZm9yICQkbGFuZy5wbyBmYWlsZWQ6IGNhbm5vdCBtb3ZlICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gdG8gJCRsYW5nLnBvIiAxPiYyOyBcCisJICAgICAgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCWVsc2UgXAorCSAgZWNobyAibXNnbWVyZ2UgZm9yICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCisJICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJZmkKKworJChEVU1NWVBPRklMRVMpOgorCit1cGRhdGUtZ21vOiBNYWtlZmlsZSAkKEdNT0ZJTEVTKQorCUA6CisKK01ha2VmaWxlOiBNYWtlZmlsZS5pbi5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyBAUE9NQUtFRklMRURFUFNACisJY2QgJCh0b3BfYnVpbGRkaXIpIFwKKwkgICYmIENPTkZJR19GSUxFUz0kKHN1YmRpcikvJEAuaW4gQ09ORklHX0hFQURFUlM9IFwKKwkgICAgICAgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisKK2ZvcmNlOgorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2Ugbm90IHRvIGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9wby9NYWtldmFycyBiL3BvL01ha2V2YXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZDlkMzAKLS0tIC9kZXYvbnVsbAorKysgYi9wby9NYWtldmFycwpAQCAtMCwwICsxLDQxIEBACisjIE1ha2VmaWxlIHZhcmlhYmxlcyBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorCisjIFVzdWFsbHkgdGhlIG1lc3NhZ2UgZG9tYWluIGlzIHRoZSBzYW1lIGFzIHRoZSBwYWNrYWdlIG5hbWUuCitET01BSU4gPSAkKFBBQ0tBR0UpCisKKyMgVGhlc2UgdHdvIHZhcmlhYmxlcyBkZXBlbmQgb24gdGhlIGxvY2F0aW9uIG9mIHRoaXMgZGlyZWN0b3J5Lgorc3ViZGlyID0gcG8KK3RvcF9idWlsZGRpciA9IC4uCisKKyMgVGhlc2Ugb3B0aW9ucyBnZXQgcGFzc2VkIHRvIHhnZXR0ZXh0LgorWEdFVFRFWFRfT1BUSU9OUyA9IC0ta2V5d29yZD1fIC0ta2V5d29yZD1OXyAtLWtleXdvcmQ9UF86MSwyCisKKyMgVGhpcyBpcyB0aGUgY29weXJpZ2h0IGhvbGRlciB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byB0aGUgaGVhZGVyIG9mIHRoZQorIyAkKERPTUFJTikucG90IGZpbGUuICBTZXQgdGhpcyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgc3Vycm91bmRpbmcKKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisjIHNvdXJjZXMsIGJlbG9uZyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgcGFja2FnZS4pICBUcmFuc2xhdG9ycyBhcmUKKyMgZXhwZWN0ZWQgdG8gdHJhbnNmZXIgdGhlIGNvcHlyaWdodCBmb3IgdGhlaXIgdHJhbnNsYXRpb25zIHRvIHRoaXMgcGVyc29uCisjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisjIHRoZSBwdWJsaWMgZG9tYWluOyBpbiB0aGlzIGNhc2UgdGhlIHRyYW5zbGF0b3JzIGFyZSBleHBlY3RlZCB0byBkaXNjbGFpbQorIyB0aGVpciBjb3B5cmlnaHQuCitDT1BZUklHSFRfSE9MREVSID0gVGhlb2RvcmUgVHMnJ28KKworIyBUaGlzIGlzIHRoZSBlbWFpbCBhZGRyZXNzIG9yIFVSTCB0byB3aGljaCB0aGUgdHJhbnNsYXRvcnMgc2hhbGwgcmVwb3J0CisjIGJ1Z3MgaW4gdGhlIHVudHJhbnNsYXRlZCBzdHJpbmdzOgorIyAtIFN0cmluZ3Mgd2hpY2ggYXJlIG5vdCBlbnRpcmUgc2VudGVuY2VzLCBzZWUgdGhlIG1haW50YWluZXIgZ3VpZGVsaW5lcworIyAgIGluIHRoZSBHTlUgZ2V0dGV4dCBkb2N1bWVudGF0aW9uLCBzZWN0aW9uICdQcmVwYXJpbmcgU3RyaW5ncycuCisjIC0gU3RyaW5ncyB3aGljaCB1c2UgdW5jbGVhciB0ZXJtcyBvciByZXF1aXJlIGFkZGl0aW9uYWwgY29udGV4dCB0byBiZQorIyAgIHVuZGVyc3Rvb2QuCisjIC0gU3RyaW5ncyB3aGljaCBtYWtlIGludmFsaWQgYXNzdW1wdGlvbnMgYWJvdXQgbm90YXRpb24gb2YgZGF0ZSwgdGltZSBvcgorIyAgIG1vbmV5LgorIyAtIFBsdXJhbGlzYXRpb24gcHJvYmxlbXMuCisjIC0gSW5jb3JyZWN0IEVuZ2xpc2ggc3BlbGxpbmcuCisjIC0gSW5jb3JyZWN0IGZvcm1hdHRpbmcuCisjIEl0IGNhbiBiZSB5b3VyIGVtYWlsIGFkZHJlc3MsIG9yIGEgbWFpbGluZyBsaXN0IGFkZHJlc3Mgd2hlcmUgdHJhbnNsYXRvcnMKKyMgY2FuIHdyaXRlIHRvIHdpdGhvdXQgYmVpbmcgc3Vic2NyaWJlZCwgb3IgdGhlIFVSTCBvZiBhIHdlYiBwYWdlIHRocm91Z2gKKyMgd2hpY2ggdGhlIHRyYW5zbGF0b3JzIGNhbiBjb250YWN0IHlvdS4KK01TR0lEX0JVR1NfQUREUkVTUyA9IHR5dHNvQGFsdW0ubWl0LmVkdQorCisjIFRoaXMgaXMgdGhlIGxpc3Qgb2YgbG9jYWxlIGNhdGVnb3JpZXMsIGJleW9uZCBMQ19NRVNTQUdFUywgZm9yIHdoaWNoIHRoZQorIyBtZXNzYWdlIGNhdGFsb2dzIHNoYWxsIGJlIHVzZWQuICBJdCBpcyB1c3VhbGx5IGVtcHR5LgorRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMgPQpkaWZmIC0tZ2l0IGEvcG8vUE9URklMRVMuaW4gYi9wby9QT1RGSUxFUy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjBkZjVhCi0tLSAvZGV2L251bGwKKysrIGIvcG8vUE9URklMRVMuaW4KQEAgLTAsMCArMSw0OSBAQAorZTJmc2NrL2JhZGJsb2Nrcy5jCitlMmZzY2svZGljdC5jCitlMmZzY2svZGlyaW5mby5jCitlMmZzY2svZHhfZGlyaW5mby5jCitlMmZzY2svZWhhbmRsZXIuYworZTJmc2NrL2VtcHR5ZGlyLmMKK2UyZnNjay9leHRlbmQuYworZTJmc2NrL2ZsdXNoYi5jCitlMmZzY2svaXNjYW4uYworZTJmc2NrL2pvdXJuYWwuYworZTJmc2NrL21lc3NhZ2UuYworZTJmc2NrL3Bhc3MxYi5jCitlMmZzY2svcGFzczEuYworZTJmc2NrL3Bhc3MyLmMKK2UyZnNjay9wYXNzMy5jCitlMmZzY2svcGFzczQuYworZTJmc2NrL3Bhc3M1LmMKK2UyZnNjay9wcm9ibGVtLmMKK2UyZnNjay9yZWNvdmVyeS5jCitlMmZzY2svcmVnaW9uLmMKK2UyZnNjay9zY2FudGVzdC5jCitlMmZzY2svc3VwZXIuYworZTJmc2NrL3VuaXguYworZTJmc2NrL3V0aWwuYworbWlzYy9iYWRibG9ja3MuYworbWlzYy9iYXNlX2RldmljZS5jCittaXNjL2Jsa2lkLmMKK21pc2MvY2hhdHRyLmMKK21pc2MvZHVtcGUyZnMuYworbWlzYy9lMmltYWdlLmMKK21pc2MvZTJsYWJlbC5jCittaXNjL2UydW5kby5jCittaXNjL2ZzY2suYworbWlzYy9sb2dzYXZlLmMKK21pc2MvbHNhdHRyLmMKK21pc2MvbWtlMmZzLmMKK21pc2MvbWtsb3N0K2ZvdW5kLmMKK21pc2MvcGFydGluZm8uYworbWlzYy90dW5lMmZzLmMKK21pc2MvdXRpbC5jCittaXNjL3V1aWRkLmMKK21pc2MvdXVpZGdlbi5jCityZXNpemUvZXh0ZW50LmMKK3Jlc2l6ZS9tYWluLmMKK3Jlc2l6ZS9vbmxpbmUuYworcmVzaXplL3Jlc2l6ZTJmcy5jCityZXNpemUvc2ltX3Byb2dyZXNzLmMKK2xpYi9leHQyZnMvZXh0Ml9lcnIuYworZTJmc2NrL3Byb2ZfZXJyLmMKZGlmZiAtLWdpdCBhL3BvL1J1bGVzLXF1b3QgYi9wby9SdWxlcy1xdW90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMmE5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9wby9SdWxlcy1xdW90CkBAIC0wLDAgKzEsNDcgQEAKKyMgU3BlY2lhbCBNYWtlZmlsZSBydWxlcyBmb3IgRW5nbGlzaCBtZXNzYWdlIGNhdGFsb2dzIHdpdGggcXVvdGF0aW9uIG1hcmtzLgorCitESVNURklMRVMuY29tbW9uLmV4dHJhMSA9IHF1b3Quc2VkIGJvbGRxdW90LnNlZCBlbkBxdW90LmhlYWRlciBlbkBib2xkcXVvdC5oZWFkZXIgaW5zZXJ0LWhlYWRlci5zaW4gUnVsZXMtcXVvdAorCisuU1VGRklYRVM6IC5pbnNlcnQtaGVhZGVyIC5wby11cGRhdGUtZW4KKworZW5AcXVvdC5wby1jcmVhdGU6CisJJChNQUtFKSBlbkBxdW90LnBvLXVwZGF0ZQorZW5AYm9sZHF1b3QucG8tY3JlYXRlOgorCSQoTUFLRSkgZW5AYm9sZHF1b3QucG8tdXBkYXRlCisKK2VuQHF1b3QucG8tdXBkYXRlOiBlbkBxdW90LnBvLXVwZGF0ZS1lbgorZW5AYm9sZHF1b3QucG8tdXBkYXRlOiBlbkBib2xkcXVvdC5wby11cGRhdGUtZW4KKworLmluc2VydC1oZWFkZXIucG8tdXBkYXRlLWVuOgorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzL1wucG8tdXBkYXRlLWVuJCQvLydgOyBcCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dCI7IHRoZW4gUEFUSD1gcHdkYC8uLi9zcmM6JCRQQVRIOyBHRVRURVhUTElCRElSPWBjZCAkKHRvcF9zcmNkaXIpL3NyYyAmJiBwd2RgOyBleHBvcnQgR0VUVEVYVExJQkRJUjsgZmk7IFwKKwl0bXBkaXI9YHB3ZGA7IFwKKwllY2hvICIkJGxhbmc6IjsgXAorCWxsPWBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy9ALiovLydgOyBcCisJTENfQUxMPUM7IGV4cG9ydCBMQ19BTEw7IFwKKwljZCAkKHNyY2Rpcik7IFwKKwlpZiAkKE1TR0lOSVQpIC1pICQoRE9NQUlOKS5wb3QgLS1uby10cmFuc2xhdG9yIC1sICQkbGwgLW8gLSAyPi9kZXYvbnVsbCB8IHNlZCAtZiAkJHRtcGRpci8kJGxhbmcuaW5zZXJ0LWhlYWRlciB8ICQoTVNHQ09OVikgLXQgVVRGLTggfCAkKE1TR0ZJTFRFUikgc2VkIC1mIGBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy8uKkAvLydgLnNlZCAyPi9kZXYvbnVsbCA+ICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IHRoZW4gXAorCSAgaWYgY21wICQkbGFuZy5wbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKwkgIGVsc2UgXAorCSAgICBpZiBtdiAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbzsgdGhlbiBcCisJICAgICAgOjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBlY2hvICJjcmVhdGlvbiBvZiAkJGxhbmcucG8gZmFpbGVkOiBjYW5ub3QgbW92ZSAkJHRtcGRpci8kJGxhbmcubmV3LnBvIHRvICQkbGFuZy5wbyIgMT4mMjsgXAorCSAgICAgIGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgZmk7IFwKKwllbHNlIFwKKwkgIGVjaG8gImNyZWF0aW9uIG9mICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCisJICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJZmkKKworZW5AcXVvdC5pbnNlcnQtaGVhZGVyOiBpbnNlcnQtaGVhZGVyLnNpbgorCXNlZCAtZSAnL14jL2QnIC1lICdzL0hFQURFUi9lbkBxdW90LmhlYWRlci9nJyAkKHNyY2RpcikvaW5zZXJ0LWhlYWRlci5zaW4gPiBlbkBxdW90Lmluc2VydC1oZWFkZXIKKworZW5AYm9sZHF1b3QuaW5zZXJ0LWhlYWRlcjogaW5zZXJ0LWhlYWRlci5zaW4KKwlzZWQgLWUgJy9eIy9kJyAtZSAncy9IRUFERVIvZW5AYm9sZHF1b3QuaGVhZGVyL2cnICQoc3JjZGlyKS9pbnNlcnQtaGVhZGVyLnNpbiA+IGVuQGJvbGRxdW90Lmluc2VydC1oZWFkZXIKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXF1b3QKK21vc3RseWNsZWFuLXF1b3Q6CisJcm0gLWYgKi5pbnNlcnQtaGVhZGVyCmRpZmYgLS1naXQgYS9wby9hdC1leHBhbmQucGwgYi9wby9hdC1leHBhbmQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMxYTc0NAotLS0gL2Rldi9udWxsCisrKyBiL3BvL2F0LWV4cGFuZC5wbApAQCAtMCwwICsxLDE1MSBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK215IEB0cmFuc2xhdG9yX2hlbHAgPSAoCisgIiMuIFRoZSBzdHJpbmdzIGluIGUyZnNjaydzIHByb2JsZW0uYyBjYW4gYmUgdmVyeSBoYXJkIHRvIHRyYW5zbGF0ZSxcbiIsCisgIiMuIHNpbmNlIHRoZSBzdHJpbmdzIGFyZSBleHBhbmRlZCBpbiB0d28gZGlmZmVyZW50IHdheXMuICBGaXJzdCBvZiBhbGwsXG4iLAorICIjLiB0aGVyZSBpcyBhbiBcQC1leHBhbnNpb24sIHdoZXJlIHN0cmluZ3MgbGlrZSBcIlxAaVwiIGFyZSBleHBhbmRlZCB0b1xuIiwKKyAiIy4gXCJpbm9kZVwiLCBhbmQgc28gb24uICBJbiBvcmRlciB0byBtYWtlIGl0IGVhc2llciBmb3IgdHJhbnNsYXRvcnMsIHRoZVxuIiwKKyAiIy4gZTJmc3Byb2dzIHBvIHRlbXBsYXRlIGZpbGUgaGFzIGJlZW4gZW5oYW5jZWQgd2l0aCBjb21tZW50cyB0aGF0IHNob3dcbiIsCisgIiMuIHRoZSBcQC1leHBhbnNpb24sIGZvciB0aGUgc3RyaW5ncyBpbiB0aGUgcHJvYmxlbS5jIGZpbGUuXG4iLAorICIjLlxuIiwKKyAiIy4gVHJhbnNsYXRvcnMgYXJlIGZyZWUgdG8gdXNlIHRoZSBcQC1leHBhbnNpb24gZmFjaWxpdHkgaWYgdGhleSBzb1xuIiwKKyAiIy4gY2hvb3NlLCBieSBwcm92aWRpbmcgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGluIGUyZnNjay9tZXNzYWdlLmMuXG4iLAorICIjLiBUaGVzZSB0cmFuc2xhdGlvbiBjYW4gY29tcGxldGVseSByZXBsYWNlIGFuIGV4cGFuc2lvbjsgZm9yIGV4YW1wbGUsXG4iLAorICIjLiBpZiBcImJibG9ja1wiICh3aGljaCBpbmRpY2F0ZWQgdGhhdCBcIlxAYlwiIHdvdWxkIGJlIGV4cGFuZGVkIHRvIFwiYmxvY2tcIilcbiIsCisgIiMuIGlzIHRyYW5zbGF0ZWQgYXMgXCJkZGF0ZW52ZXJsdXN0XCIsIHRoZW4gXCJcQGRcIiB3aWxsIGJlIGV4cGFuZGVkIHRvXG4iLAorICIjLiBcImRhdGVudmVybHVzdFwiLiAgQWx0ZXJuYXRpdmVseSwgdHJhbnNsYXRvcnMgY2FuIHNpbXBseSBub3QgdXNlIHRoZVxuIiwKKyAiIy4gXEAtZXhwYW5zaW9uIGZhY2lsaXR5IGF0IGFsbC5cbiIsCisgIiMuXG4iLAorICIjLiBUaGUgc2Vjb25kIGV4cGFuc2lvbiB3aGljaCBpcyBkb25lIGZvciBlMmZzY2sncyBwcm9ibGVtLmMgbWVzc2FnZXMgaXNcbiIsCisgIiMuIGEgZHluYW1pYyAlLWV4cGFuc2lvbiwgd2hpY2ggZXhwYW5kcyAlaSBhcyBhbiBpbm9kZSBudW1iZXIsIGFuZCBzb1xuIiwKKyAiIy4gb24uICBBIHRhYmxlIG9mIHRoZXNlIGV4cGFuc2lvbnMgY2FuIGJlIGZvdW5kIGJlbG93LiAgTm90ZSB0aGF0XG4iLAorICIjLiAlLWV4cHJlc3Npb25zIHRoYXQgYmVnaW4gd2l0aCBcIiVEXCIgYW5kIFwiJUlcIiBhcmUgdHdvLWNoYXJhY3RlclxuIiwKKyAiIy4gZXhwYW5zaW9uczsgc28gZm9yIGV4YW1wbGUsIFwiJUl1XCIgZXhwYW5kcyB0byB0aGUgaW5vZGUncyB1c2VyIGlkXG4iLAorICIjLiBvd25lcnNoaXAgZmllbGQgKGlub2RlLT5pX3VpZCkuICBBbHNvIHRoZSBcIiVCXCIgZXhwYW5zaW9uIGlzIHNwZWNpYWw6XG4iLAorICIjLiBpdCBjYW4gZXhwYW5kIHRvIGVpdGhlciB0aGUgc3RyaW5nIFwiaW5kaXJlY3QgYmxvY2tcIiAocG9zc2libHkgcHJlY2VkZWRcbiIsCisgIiMuIGJ5IHRoZSB3b3JkIFwiZG91YmxlXCIgb3IgXCJ0cmlwbGVcIiksIG9yIHRoZSBzdHJpbmcgXCJibG9jayAjXCIgaW1tZWRpYXRlbHlcbiIsCisgIiMuIGZvbGxvd2VkIGJ5IGFuIGludGVnZXIgaW5kaWNhdGluZyBhIGJsb2NrIHNlcXVlbmNlIG51bWJlci5cbiIsCisgIiMuICBcbiIsCisgIiMuCSViCTxibGs+CQkJYmxvY2sgbnVtYmVyXG4iLAorICIjLgklQglcImluZGlyZWN0IGJsb2NrXCIgfCBcImJsb2NrICNcIjxibGtjb3VudD4Jc3RyaW5nIHwgc3RyaW5nK2ludGVnZXJcbiIsCisgIiMuCSVjCTxibGsyPgkJCWJsb2NrIG51bWJlclxuIiwKKyAiIy4JJURpCTxkaXJlbnQ+IC0+IGlubwkJaW5vZGUgbnVtYmVyXG4iLAorICIjLgklRG4JPGRpcmVudD4gLT4gbmFtZQlzdHJpbmdcbiIsCisgIiMuCSVEcgk8ZGlyZW50PiAtPiByZWNfbGVuXG4iLAorICIjLgklRGwJPGRpcmVudD4gLT4gbmFtZV9sZW5cbiIsCisgIiMuCSVEdAk8ZGlyZW50PiAtPiBmaWxldHlwZVxuIiwKKyAiIy4JJWQJPGRpcj4gCQkJaW5vZGUgbnVtYmVyXG4iLAorICIjLgklZwk8Z3JvdXA+CQkJaW50ZWdlclxuIiwKKyAiIy4JJWkJPGlubz4JCQlpbm9kZSBudW1iZXJcbiIsCisgIiMuCSVJcwk8aW5vZGU+IC0+IGlfc2l6ZVxuIiwKKyAiIy4JJUlTCTxpbm9kZT4gLT4gaV9leHRyYV9pc2l6ZVxuIiwKKyAiIy4JJUliCTxpbm9kZT4gLT4gaV9ibG9ja3NcbiIsCisgIiMuCSVJbAk8aW5vZGU+IC0+IGlfbGlua3NfY291bnRcbiIsCisgIiMuCSVJbQk8aW5vZGU+IC0+IGlfbW9kZVxuIiwKKyAiIy4JJUlNCTxpbm9kZT4gLT4gaV9tdGltZVxuIiwKKyAiIy4JJUlGCTxpbm9kZT4gLT4gaV9mYWRkclxuIiwKKyAiIy4JJUlmCTxpbm9kZT4gLT4gaV9maWxlX2FjbFxuIiwKKyAiIy4JJUlkCTxpbm9kZT4gLT4gaV9kaXJfYWNsXG4iLAorICIjLgklSXUJPGlub2RlPiAtPiBpX3VpZFxuIiwKKyAiIy4JJUlnCTxpbm9kZT4gLT4gaV9naWRcbiIsCisgIiMuCSVJdAk8c3RyPgkJCWZpbGUgdHlwZVxuIiwKKyAiIy4JJWoJPGlubzI+CQkJaW5vZGUgbnVtYmVyXG4iLAorICIjLgklbQk8Y29tX2VyciBlcnJvciBtZXNzYWdlPlxuIiwKKyAiIy4JJU4JPG51bT5cbiIsCisgIiMuCSVwCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPlxuIiwKKyAiIy4JJVAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgPGRpcmVudD4tPmlubyB3aXRoIDxpbm8yPiBhc1xuIiwKKyAiIy4JCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LiAgKElmIGRpcmVudCBpcyBOVUxMXG4iLAorICIjLgkJCQl0aGVuIHJldHVybiB0aGUgcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8yPilcbiIsCisgIiMuCSVxCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8ZGlyPlxuIiwKKyAiIy4JJVEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+IHdpdGggPGRpcj4gYXNcbiIsCisgIiMuCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS5cbiIsCisgIiMuCSVzCTxzdHI+CQkJbWlzY2VsbGFuZW91cyBzdHJpbmdcbiIsCisgIiMuCSVTCQliYWNrdXAgc3VwZXJibG9ja1xuIiwKKyAiIy4JJVgJPG51bT4JaGV4YWRlY2ltYWwgZm9ybWF0XG4iLAorICIjLlxuIik7CisKK215ICRpc19wcm9ibGVtX2ZpbGUgPSAwOworbXkgJHNhdmVfbXNnOworbXkgJG1zZ19hY2N1bSA9ICIiOworbXkgJG1zZzsKK215ICRleHBhbmRlZCA9IDA7CitteSAkbGluZXMgPSAwOworCitzdWIgZG9fZXhwYW5kIHsKKyAgICAkbXNnID1+IHMvXEBhL2V4dGVuZGVkIGF0dHJpYnV0ZS9nOworICAgICRtc2cgPX4gcy9cQEEvZXJyb3IgYWxsb2NhdGluZy9nOworICAgICRtc2cgPX4gcy9cQGIvYmxvY2svZzsKKyAgICAkbXNnID1+IHMvXEBCL2JpdG1hcC9nOworICAgICRtc2cgPX4gcy9cQGMvY29tcHJlc3MvZzsKKyAgICAkbXNnID1+IHMvXEBDL2NvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2svZzsKKyAgICAkbXNnID1+IHMvXEBpL2lub2RlL2c7CisgICAgJG1zZyA9fiBzL1xASS9pbGxlZ2FsL2c7CisgICAgJG1zZyA9fiBzL1xAai9qb3VybmFsL2c7CisgICAgJG1zZyA9fiBzL1xARC9kZWxldGVkL2c7CisgICAgJG1zZyA9fiBzL1xAZC9kaXJlY3RvcnkvZzsKKyAgICAkbXNnID1+IHMvXEBlL2VudHJ5L2c7CisgICAgJG1zZyA9fiBzL1xARS9lbnRyeSAnJURuJyBpbiAlcCAoJWkpL2c7CisgICAgJG1zZyA9fiBzL1xAZi9maWxlc3lzdGVtL2c7CisgICAgJG1zZyA9fiBzL1xARi9mb3IgaW5vZGUgJWkgKCVRKSBpcy9nOworICAgICRtc2cgPX4gcy9cQGcvZ3JvdXAvZzsKKyAgICAkbXNnID1+IHMvXEBoL0hUUkVFIGRpcmVjdG9yeSBpbm9kZS9nOworICAgICRtc2cgPX4gcy9cQGwvbG9zdCtmb3VuZC9nOworICAgICRtc2cgPX4gcy9cQEwvaXMgYSBsaW5rL2c7CisgICAgJG1zZyA9fiBzL1xAbS9tdWx0aXBseS1jbGFpbWVkL2c7CisgICAgJG1zZyA9fiBzL1xAbi9pbnZhbGlkL2c7CisgICAgJG1zZyA9fiBzL1xAby9vcnBoYW5lZC9nOworICAgICRtc2cgPX4gcy9cQHAvcHJvYmxlbSBpbi9nOworICAgICRtc2cgPX4gcy9cQHEvcXVvdGEvZzsKKyAgICAkbXNnID1+IHMvXEByL3Jvb3QgaW5vZGUvZzsKKyAgICAkbXNnID1+IHMvXEBzL3Nob3VsZCBiZS9nOworICAgICRtc2cgPX4gcy9cQFMvc3VwZXJibG9jay9nOworICAgICRtc2cgPX4gcy9cQHUvdW5hdHRhY2hlZC9nOworICAgICRtc2cgPX4gcy9cQHYvZGV2aWNlL2c7CisgICAgJG1zZyA9fiBzL1xAeC9leHRlbnQvZzsKKyAgICAkbXNnID1+IHMvXEB6L3plcm8tbGVuZ3RoL2c7CisgICAgJG1zZyA9fiBzL1xAXEAvQC9nOworfQorCisKK3doaWxlICg8PikgeworICAgICRsaW5lcysrOworICAgIGlmICgkbGluZXMgPT0gNikgeworCXByaW50IEB0cmFuc2xhdG9yX2hlbHA7CisgICAgfQorICAgIGlmICgvXiM6IC8pCisgICAgeworCSRpc19wcm9ibGVtX2ZpbGUgPSAoL14jOiBlMmZzY2tcL3Byb2JsZW0vKSA/IDEgOiAwOworICAgIH0KKyAgICAkbXNnID0gIiI7CisgICAgaWYgKC9ebXNnaWQgLyAmJiAkaXNfcHJvYmxlbV9maWxlKSB7CisJKCRtc2cpID0gL15tc2dpZCAiKC4qKSIkLzsKKwkkc2F2ZV9tc2dpZCA9ICRfOworCWlmICgkbXNnID1+IC9cQC8pIHsKKwkgICAgJGV4cGFuZGVkKys7CisJfQorCSZkb19leHBhbmQoKTsKKwlpZiAoJG1zZyBuZSAiIikgeworCSAgICAkbXNnX2FjY3VtID0gJG1zZ19hY2N1bSAuICIjLiBcQC1leHBhbmRlZDogJG1zZ1xuIjsKKwl9CisJbmV4dDsKKyAgICB9CisgICAgaWYgKC9eIi8gJiYgJGlzX3Byb2JsZW1fZmlsZSkgeworCSgkbXNnKSA9IC9eIiguKikiJC87CisJJHNhdmVfbXNnaWQgPSAkc2F2ZV9tc2dpZCAuICRfOworCWlmICgkbXNnID1+IC9cQC8pIHsKKwkgICAgJGV4cGFuZGVkKys7CisJfQorCSZkb19leHBhbmQoKTsKKwkkbXNnX2FjY3VtID0gJG1zZ19hY2N1bSAuICIjLiBcQC1leHBhbmRlZDogJG1zZ1xuIjsKKwluZXh0OworICAgIH0KKyAgICBpZiAoL15tc2dzdHIgLyAmJiAkaXNfcHJvYmxlbV9maWxlKSB7CisJaWYgKCRleHBhbmRlZCkgeworCSAgICBwcmludCAkbXNnX2FjY3VtOworCX0KKwlwcmludCAkc2F2ZV9tc2dpZDsKKwkkbXNnX2FjY3VtID0gIiI7CisJJGV4cGFuZGVkID0gMDsKKyAgICB9CisgICAgcHJpbnQgJF87Cit9CmRpZmYgLS1naXQgYS9wby9ib2xkcXVvdC5zZWQgYi9wby9ib2xkcXVvdC5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5MzdhYQotLS0gL2Rldi9udWxsCisrKyBiL3BvL2JvbGRxdW90LnNlZApAQCAtMCwwICsxLDEwIEBACitzLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKK3MvYFwoW15gJ10qXCknL+KAmFwx4oCZL2cKK3MvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCitzLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCitzL14nXChbXmAnXSpcKScgL+KAmFwx4oCZIC9nCitzL+KAnOKAnS8iIi9nCitzL+KAnC/igJwbWzFtL2cKK3Mv4oCdLxtbMG3igJ0vZworcy/igJgv4oCYG1sxbS9nCitzL+KAmS8bWzBt4oCZL2cKZGlmZiAtLWdpdCBhL3BvL2NhLmdtbyBiL3BvL2NhLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODViMjYyCi0tLSAvZGV2L251bGwKKysrIGIvcG8vY2EuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2NhLnBvIGIvcG8vY2EucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhZWFiMwotLS0gL2Rldi9udWxsCisrKyBiL3BvL2NhLnBvCkBAIC0wLDAgKzEsNzIyMSBAQAorIyBUcmFuc2xhdGlvbiBvZiBlMmZzcHJvZ3MtMS40Mi4xMiB0byBDYXRhbGFuLgorIyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggVGhlb2RvcmUgVHNvIChtc2dpZHMpCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4KKyMgRGF2aWQgUGxhbmVsbGEgTW9sYXMgPGRhdmlkLnBsYW5lbGxhQGdtYWlsLmNvbT4sIDIwMDcsIDIwMDguCisjIMOAbmdlbCBNb21ww7MgPG1lY2F0eGlzQG1lY2F0eGlzLmNhdD4sIDIwMTQsIDIwMTUuCisjCisjLiBUaGUgc3RyaW5ncyBpbiBlMmZzY2sncyBwcm9ibGVtLmMgY2FuIGJlIHZlcnkgaGFyZCB0byB0cmFuc2xhdGUsCisjLiBzaW5jZSB0aGUgc3RyaW5ncyBhcmUgZXhwYW5kZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgRmlyc3Qgb2YgYWxsLAorIy4gdGhlcmUgaXMgYW4gQC1leHBhbnNpb24sIHdoZXJlIHN0cmluZ3MgbGlrZSAiQGkiIGFyZSBleHBhbmRlZCB0bworIy4gImlub2RlIiwgYW5kIHNvIG9uLiAgSW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRyYW5zbGF0b3JzLCB0aGUKKyMuIGUyZnNwcm9ncyBwbyB0ZW1wbGF0ZSBmaWxlIGhhcyBiZWVuIGVuaGFuY2VkIHdpdGggY29tbWVudHMgdGhhdCBzaG93CisjLiB0aGUgQC1leHBhbnNpb24sIGZvciB0aGUgc3RyaW5ncyBpbiB0aGUgcHJvYmxlbS5jIGZpbGUuCisjLgorIy4gVHJhbnNsYXRvcnMgYXJlIGZyZWUgdG8gdXNlIHRoZSBALWV4cGFuc2lvbiBmYWNpbGl0eSBpZiB0aGV5IHNvCisjLiBjaG9vc2UsIGJ5IHByb3ZpZGluZyB0cmFuc2xhdGlvbnMgZm9yIHN0cmluZ3MgaW4gZTJmc2NrL21lc3NhZ2UuYy4KKyMuIFRoZXNlIHRyYW5zbGF0aW9uIGNhbiBjb21wbGV0ZWx5IHJlcGxhY2UgYW4gZXhwYW5zaW9uOyBmb3IgZXhhbXBsZSwKKyMuIGlmICJiYmxvY2siICh3aGljaCBpbmRpY2F0ZWQgdGhhdCAiQGIiIHdvdWxkIGJlIGV4cGFuZGVkIHRvICJibG9jayIpCisjLiBpcyB0cmFuc2xhdGVkIGFzICJkZGF0ZW52ZXJsdXN0IiwgdGhlbiAiQGQiIHdpbGwgYmUgZXhwYW5kZWQgdG8KKyMuICJkYXRlbnZlcmx1c3QiLiAgQWx0ZXJuYXRpdmVseSwgdHJhbnNsYXRvcnMgY2FuIHNpbXBseSBub3QgdXNlIHRoZQorIy4gQC1leHBhbnNpb24gZmFjaWxpdHkgYXQgYWxsLgorIy4KKyMuIFRoZSBzZWNvbmQgZXhwYW5zaW9uIHdoaWNoIGlzIGRvbmUgZm9yIGUyZnNjaydzIHByb2JsZW0uYyBtZXNzYWdlcyBpcworIy4gYSBkeW5hbWljICUtZXhwYW5zaW9uLCB3aGljaCBleHBhbmRzICVpIGFzIGFuIGlub2RlIG51bWJlciwgYW5kIHNvCisjLiBvbi4gIEEgdGFibGUgb2YgdGhlc2UgZXhwYW5zaW9ucyBjYW4gYmUgZm91bmQgYmVsb3cuICBOb3RlIHRoYXQKKyMuICUtZXhwcmVzc2lvbnMgdGhhdCBiZWdpbiB3aXRoICIlRCIgYW5kICIlSSIgYXJlIHR3by1jaGFyYWN0ZXIKKyMuIGV4cGFuc2lvbnM7IHNvIGZvciBleGFtcGxlLCAiJUl1IiBleHBhbmRzIHRvIHRoZSBpbm9kZSdzIHVzZXIgaWQKKyMuIG93bmVyc2hpcCBmaWVsZCAoaW5vZGUtPmlfdWlkKS4gIEFsc28gdGhlICIlQiIgZXhwYW5zaW9uIGlzIHNwZWNpYWw6CisjLiBpdCBjYW4gZXhwYW5kIHRvIGVpdGhlciB0aGUgc3RyaW5nICJpbmRpcmVjdCBibG9jayIgKHBvc3NpYmx5IHByZWNlZGVkCisjLiBieSB0aGUgd29yZCAiZG91YmxlIiBvciAidHJpcGxlIiksIG9yIHRoZSBzdHJpbmcgImJsb2NrICMiIGltbWVkaWF0ZWx5CisjLiBmb2xsb3dlZCBieSBhbiBpbnRlZ2VyIGluZGljYXRpbmcgYSBibG9jayBzZXF1ZW5jZSBudW1iZXIuCisjLiAgCisjLiAJJWIJPGJsaz4JCQlibG9jayBudW1iZXIKKyMuIAklQgkiaW5kaXJlY3QgYmxvY2siIHwgImJsb2NrICMiPGJsa2NvdW50PglzdHJpbmcgfCBzdHJpbmcraW50ZWdlcgorIy4gCSVjCTxibGsyPgkJCWJsb2NrIG51bWJlcgorIy4gCSVEaQk8ZGlyZW50PiAtPiBpbm8JCWlub2RlIG51bWJlcgorIy4gCSVEbgk8ZGlyZW50PiAtPiBuYW1lCXN0cmluZworIy4gCSVEcgk8ZGlyZW50PiAtPiByZWNfbGVuCisjLiAJJURsCTxkaXJlbnQ+IC0+IG5hbWVfbGVuCisjLiAJJUR0CTxkaXJlbnQ+IC0+IGZpbGV0eXBlCisjLiAJJWQJPGRpcj4gCQkJaW5vZGUgbnVtYmVyCisjLiAJJWcJPGdyb3VwPgkJCWludGVnZXIKKyMuIAklaQk8aW5vPgkJCWlub2RlIG51bWJlcgorIy4gCSVJcwk8aW5vZGU+IC0+IGlfc2l6ZQorIy4gCSVJUwk8aW5vZGU+IC0+IGlfZXh0cmFfaXNpemUKKyMuIAklSWIJPGlub2RlPiAtPiBpX2Jsb2NrcworIy4gCSVJbAk8aW5vZGU+IC0+IGlfbGlua3NfY291bnQKKyMuIAklSW0JPGlub2RlPiAtPiBpX21vZGUKKyMuIAklSU0JPGlub2RlPiAtPiBpX210aW1lCisjLiAJJUlGCTxpbm9kZT4gLT4gaV9mYWRkcgorIy4gCSVJZgk8aW5vZGU+IC0+IGlfZmlsZV9hY2wKKyMuIAklSWQJPGlub2RlPiAtPiBpX2Rpcl9hY2wKKyMuIAklSXUJPGlub2RlPiAtPiBpX3VpZAorIy4gCSVJZwk8aW5vZGU+IC0+IGlfZ2lkCisjLiAJJUl0CTxzdHI+CQkJZmlsZSB0eXBlCisjLiAJJWoJPGlubzI+CQkJaW5vZGUgbnVtYmVyCisjLiAJJW0JPGNvbV9lcnIgZXJyb3IgbWVzc2FnZT4KKyMuIAklTgk8bnVtPgorIy4gCSVwCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPgorIy4gCSVQCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIDxkaXJlbnQ+LT5pbm8gd2l0aCA8aW5vMj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuICAoSWYgZGlyZW50IGlzIE5VTEwKKyMuIAkJCQl0aGVuIHJldHVybiB0aGUgcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8yPikKKyMuIAklcQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGRpcj4KKyMuIAklUQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4gd2l0aCA8ZGlyPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4KKyMuIAklcwk8c3RyPgkJCW1pc2NlbGxhbmVvdXMgc3RyaW5nCisjLiAJJVMJCWJhY2t1cCBzdXBlcmJsb2NrCisjLiAJJVgJPG51bT4JaGV4YWRlY2ltYWwgZm9ybWF0CisjLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZTJmc3Byb2dzIDEuNDIuMTItcHJlMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiB0eXRzb0BhbHVtLm1pdC5lZHVcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wNS0xNyAyMToyNi0wNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNS0wMy0xMyAyMTowMyswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiDDgG5nZWwgTW9tcMOzIDxtZWNhdHhpc0BtZWNhdHhpcy5jYXQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQ2F0YWxhbiA8Y2FAZG9kZHMubmV0PlxuIgorIkxhbmd1YWdlOiBjYVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtUG9lZGl0LUJvb2ttYXJrczogNDM0LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisiWC1HZW5lcmF0b3I6IEd0cmFuc2xhdG9yIDIuOTEuNlxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MjMgbWlzYy9ta2UyZnMuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrICV1IG91dCBvZiByYW5nZTsgaWdub3JlZC5cbiIKK21zZ3N0ciAiQmxvYyBlcnJvbmkgJXUgZm9yYSBkZWxzIGzDrW1pdHM7IHMnaWdub3JhcsOgLlxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NDYKK21zZ2lkICJ3aGlsZSBzYW5pdHkgY2hlY2tpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgImVuIGNvbXByb3ZhciBsJ2VzdGF0IGRlbCBub2RlLWkgZGUgYmxvY3MgZXJyb25pcyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjU4Cittc2dpZCAid2hpbGUgcmVhZGluZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAiZW4gbGxlZ2lyIGVsIG5vZGUtaSBkZSBibG9jcyBlcnJvbmlzIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NzIgZTJmc2NrL3NjYW50ZXN0LmM6MTA3IGUyZnNjay91bml4LmM6MTM0NQorIzogZTJmc2NrL3VuaXguYzoxNDM0IG1pc2MvYmFkYmxvY2tzLmM6MTI0MiBtaXNjL2JhZGJsb2Nrcy5jOjEyNTAKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI2NCBtaXNjL2JhZGJsb2Nrcy5jOjEyNzYgbWlzYy9kdW1wZTJmcy5jOjYwNAorIzogbWlzYy9lMmltYWdlLmM6MTM5NiBtaXNjL2UyaW1hZ2UuYzoxNTgwIG1pc2MvZTJpbWFnZS5jOjE1OTkKKyM6IG1pc2MvbWtlMmZzLmM6MjI3IG1pc2MvdHVuZTJmcy5jOjE5NTUgbWlzYy90dW5lMmZzLmM6MjA0NCByZXNpemUvbWFpbi5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIKK21zZ3N0ciAiZW4gaW50ZW50YXIgb2JyaXIgJXMiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgcG9wZW4gJyVzJyIKK21zZ3N0ciAiZW4gaW50ZW50YXIgcG9wZW4gZW4gwqslc8K7IgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6OTQgbWlzYy9ta2UyZnMuYzoyMzQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGluIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIGZpbGUiCittc2dzdHIgImVuIGxsZWdpciBsYSBsbGlzdGEgZGUgYmxvY3MgZXJyb25pcyBkZWwgZml0eGVyIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTA1Cittc2dpZCAid2hpbGUgdXBkYXRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICJlbiBhY3R1YWxpdHphciBlbCBub2RlLWkgZGUgYmxvY2sgZXJyb25pcyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBpbGxlZ2FsIGJsb2NrICV1IGZvdW5kIGluIGJhZCBibG9jayBpbm9kZS4gIENsZWFyZWQuXG4iCittc2dzdHIgIiIKKyJBdsOtczogcydoYSB0cm9iYXQgZWwgYmxvYyBubyB2w6BsaWQgJXUgZW4gZWwgbm9kZS1pIGRlIGJsb2NzIGVycm9uaXMuICBTJ2hhICIKKyJlc2JvcnJhdC5cbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgZWwgYmxvYyAlbHUgKCVzKSBtZW50cmUgJXMuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbGxlZ2lyIGVsIGJsb2MgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYxIGUyZnNjay9laGFuZGxlci5jOjExMAorbXNnaWQgIklnbm9yZSBlcnJvciIKK21zZ3N0ciAiSWdub3JhIGwnZXJyb3IiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYyCittc2dpZCAiRm9yY2UgcmV3cml0ZSIKK21zZ3N0ciAiRm9yw6dhIGxhIHJlc2NyaXB0dXJhIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBlc2NyaXVyZSBlbCBibG9jICVsdSAoJXMpIG1lbnRyZSAlcy4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZXNjcml1cmUgZWwgYmxvYyAlbHUgKCVzKS4gICIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NTcKK21zZ2lkICJlbXB0eSBkaXJibG9ja3MiCittc2dzdHIgImJsb2NzIGRlIGRpcmVjdG9yaSBidWl0cyIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NjIKK21zZ2lkICJlbXB0eSBkaXIgbWFwIgorbXNnc3RyICJtYXBhIGRlIGRpcmVjdG9yaSBidWl0IgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFbXB0eSBkaXJlY3RvcnkgYmxvY2sgJXUgKCMlZCkgaW4gaW5vZGUgJXVcbiIKK21zZ3N0ciAiRWwgYmxvYyBkZSBkaXJlY3RvcmkgJXUgKCMlZCkgZW4gZWwgbm9kZS1pICV1IMOpcyBidWl0XG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgZmlsZW5hbWUgbmJsb2NrcyBibG9ja3NpemVcbiIKK21zZ3N0ciAiJXM6ICVzIGZpdHhlciBuYmxvY3MgbWlkYWRlbGJsb2NcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIG9mIGJsb2NrcyFcbiIKK21zZ3N0ciAiTm9tYnJlIGRlIGJsb2NzIG5vIHbDoGxpZFxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIChzaXplPSVkKVxuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFzc2lnbmFyIGVsIGJsb2MgZGUgbWVtb3JpYSBpbnRlcm3DqGRpYSAobWlkYT0lZClcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBkaXNrXG4iCittc2dzdHIgIkZvcm1hIGQnw7pzOiAlcyBkaXNjXG4iCisKKyM6IGUyZnNjay9mbHVzaGIuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJCTEtGTFNCVUYgaW9jdGwgbm90IHN1cHBvcnRlZCEgIENhbid0IGZsdXNoIGJ1ZmZlcnMuXG4iCittc2dzdHIgIiIKKyJMJ2lvY3RsIEJMS0ZMU0JVRiBubyBlc3TDoCBpbXBsZW1lbnRhdC4gIE5vIGVzIHBvZGVuIGJ1aWRhciBsZXMgbWVtw7JyaWVzICIKKyJpbnRlcm3DqGRpZXMuXG4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLUZdIFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBkZXZpY2VcbiIKK21zZ3N0ciAiRm9ybWEgZCfDunM6ICVzIFstRl0gWy1JIGJsb2NzX2RlX21lbV9pbnRfZGVsX25vZGVfaV0gZGlzcG9zaXRpdVxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo4MSBlMmZzY2svdW5peC5jOjk3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIGZvciBmbHVzaGluZyIKK21zZ3N0ciAiZW4gb2JyaXIgJXMgcGVyIGEgYnVpZGFyLWxvIgorCisjOiBlMmZzY2svaXNjYW4uYzo4NiBlMmZzY2svdW5peC5jOjk3OCByZXNpemUvbWFpbi5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiCittc2dzdHIgImVuIGludGVudGFyIGJ1aWRhciAlcyIKKworIzogZTJmc2NrL2lzY2FuLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICclcyciCittc2dzdHIgImVuIGludGVudGFyIG9icmlyIMKrJXPCuyIKKworIzogZTJmc2NrL2lzY2FuLmM6MTE5IGUyZnNjay9zY2FudGVzdC5jOjExNCBtaXNjL2UyaW1hZ2UuYzoxMjkwCittc2dpZCAid2hpbGUgb3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJlbiBvYnJpciBsJ2VzY2FuZWlnIGRlIG5vZGVzLWkiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEyNyBtaXNjL2UyaW1hZ2UuYzoxMzA5Cittc2dpZCAid2hpbGUgZ2V0dGluZyBuZXh0IGlub2RlIgorbXNnc3RyICJlbiBvYnRlbmlyIGVsIG5vZGUtaSBzZWfDvGVudCIKKworIzogZTJmc2NrL2lzY2FuLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBzY2FubmVkLlxuIgorbXNnc3RyICIldSBub2Rlcy1pIGVzY2FuZWphdHMuXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTI0Cittc2dpZCAicmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAicydlc3TDoCBsbGVnaW50IGVsIHN1cGVyYmxvYyBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBubyB2YWxpZCBqb3VybmFsIHN1cGVyYmxvY2sgZm91bmRcbiIKK21zZ3N0ciAiJXM6IG5vIHMnaGEgdHJvYmF0IGNhcCBzdXBlcmJsb2MgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyB2w6BsaWRcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGpvdXJuYWwgdG9vIHNob3J0XG4iCittc2dzdHIgIiVzOiBlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgw6lzIG1hc3NhIGN1cnRcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHJlY292ZXJpbmcgam91cm5hbFxuIgorbXNnc3RyICIlczogcmVjdXBlcmFjacOzIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnNcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdvbid0IGRvIGpvdXJuYWwgcmVjb3Zlcnkgd2hpbGUgcmVhZC1vbmx5XG4iCittc2dzdHIgIiIKKyIlczogbm8gZXMgcmVjdXBlcmFyw6AgZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIG1lbnRyZSBzaWd1aSBkZSBub23DqXMgIgorImxlY3R1cmFcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlLW9wZW4gJXMiCittc2dzdHIgImVuIGludGVudGFyIHRvcm5hciBhIG9icmlyICVzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImFhdHJpYnV0IGFtcGxpYXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE0Cittc2dpZCAiQWVycm9yIGFsbG9jYXRpbmciCittc2dzdHIgIkFlcnJvciBlbiBsJ2Fzc2lnbmFjacOzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNQorbXNnaWQgImJibG9jayIKK21zZ3N0ciAiYmJsb2MiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE2Cittc2dpZCAiQmJpdG1hcCIKK21zZ3N0ciAiQm1hcGEgZGUgYml0cyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTcKK21zZ2lkICJjY29tcHJlc3MiCittc2dzdHIgImNjb21wcmVzc2nDsyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTgKK21zZ2lkICJDY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBAYiIKK21zZ3N0ciAiQ2VudHJhIGVuIGNvbmZsaWN0ZSBhbWIgYWxndW4gYWx0cmUgQGIgZGVsIHNpc3RlbWEgZGUgZml0eGVycyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTkKK21zZ2lkICJkZGlyZWN0b3J5IgorbXNnc3RyICJkZGlyZWN0b3JpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMAorbXNnaWQgIkRkZWxldGVkIgorbXNnc3RyICJEc3VwcmltaXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIxCittc2dpZCAiZWVudHJ5IgorbXNnc3RyICJlZW50cmFkYSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjIKK21zZ2lkICJFQGUgJyVEbicgaW4gJXAgKCVpKSIKK21zZ3N0ciAiRUBlIMKrJURuwrsgYSAlcCAoJWkpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMworbXNnaWQgImZmaWxlc3lzdGVtIgorbXNnc3RyICJmc2lzdGVtYSBkZSBmaXR4ZXJzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNAorbXNnaWQgIkZmb3IgQGkgJWkgKCVRKSBpcyIKK21zZ3N0ciAiRnBlciBhIGwnQGkgJWkgKCVRKSDDqXMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI1Cittc2dpZCAiZ2dyb3VwIgorbXNnc3RyICJnZ3J1cCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjYKK21zZ2lkICJoSFRSRUUgQGQgQGkiCittc2dzdHIgImhAaSBkZWwgQGQgSFRSRUUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI3Cittc2dpZCAiaWlub2RlIgorbXNnc3RyICJpbm9kZS1pIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOAorbXNnaWQgIklpbGxlZ2FsIgorbXNnc3RyICJJaWzCt2xlZ2FsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOQorbXNnaWQgImpqb3VybmFsIgorbXNnc3RyICJqcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMAorbXNnaWQgImxsb3N0K2ZvdW5kIgorbXNnc3RyICJsbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzEKK21zZ2lkICJMaXMgYSBsaW5rIgorbXNnc3RyICJMw6lzIHVuIGVubGxhw6ciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMyCittc2dpZCAibW11bHRpcGx5LWNsYWltZWQiCittc2dzdHIgIm1yZWNsYW1hdCBtw7psdGlwbGVtZW50IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMworbXNnaWQgIm5pbnZhbGlkIgorbXNnc3RyICJubm8gdsOgbGlkIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNAorbXNnaWQgIm9vcnBoYW5lZCIKK21zZ3N0ciAib29yZmUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM1Cittc2dpZCAicHByb2JsZW0gaW4iCittc2dzdHIgInBwcm9ibGVtYSBlbiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAickBpIGFycmVsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOAorbXNnaWQgInNzaG91bGQgYmUiCittc2dzdHIgInNoYXVyaWEgZGUgc2VyIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOQorbXNnaWQgIlNzdXBlckBiIgorbXNnc3RyICJTc3VwZXJAYiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDAKK21zZ2lkICJ1dW5hdHRhY2hlZCIKK21zZ3N0ciAidWRlc2Fjb2JsYXQocykiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQxCittc2dpZCAidmRldmljZSIKK21zZ3N0ciAidmRpc3Bvc2l0aXUiCisKKyMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHRlbnRfKGZpbGVfc3lzdGVtcykuIEhpIGhhIGxhIHViaWNhY2nDsyBiYXNhZGEgZW4gYmxvY3MgaSBsYSB1YmljYWNpw7MgYmFzYWRhIGVuIMKrZXh0ZW50c8K7IChkcG0pLgorIzogZTJmc2NrL21lc3NhZ2UuYzoxNDIKK21zZ2lkICJ4ZXh0ZW50IgorbXNnc3RyICJ4ZXh0ZW5zacOzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MworbXNnaWQgInp6ZXJvLWxlbmd0aCIKK21zZ3N0ciAiem1pZGEgemVybyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTQKK21zZ2lkICI8VGhlIE5VTEwgaW5vZGU+IgorbXNnc3RyICI8RWwgbm9kZS1pIE5VTEw+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NQorbXNnaWQgIjxUaGUgYmFkIGJsb2NrcyBpbm9kZT4iCittc2dzdHIgIjxFbCBub2RlLWkgZGUgYmxvY3MgZXJyb25pcz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU3Cittc2dpZCAiPFRoZSB1c2VyIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPExhIHF1b3RhIGRlIG5vZGUtaSBwZXIgbCd1c3Vhcmk+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OAorbXNnaWQgIjxUaGUgZ3JvdXAgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8TGEgcXVvdGEgZGUgbm9kZS1pIHBlciBhbCBncnVwPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTkKK21zZ2lkICI8VGhlIGJvb3QgbG9hZGVyIGlub2RlPiIKK21zZ3N0ciAiPEVsIG5vZGUtaSBkZWwgY2FycmVnYWRvcj4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICI8RWwgbm9kZS1pIGRlbCBkaXJlY3RvcmkgZGUgZGVzZmVyIGxlcyBzdXByZXNzaW9ucz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYxCittc2dpZCAiPFRoZSBncm91cCBkZXNjcmlwdG9yIGlub2RlPiIKK21zZ3N0ciAiPEVsIG5vZGUtaSBkZWwgZGVzY3JpcHRvciBkZSBncnVwPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjIKK21zZ2lkICI8VGhlIGpvdXJuYWwgaW5vZGU+IgorbXNnc3RyICI8RWwgbm9kZS1pIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnM+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MworbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSA5PiIKK21zZ3N0ciAiPE5vZGUtaSByZXNlcnZhdCA5PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjQKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgMTA+IgorbXNnc3RyICI8Tm9kZS1pIHJlc2VydmF0IDEwPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzQKK21zZ2lkICJyZWd1bGFyIGZpbGUiCittc2dzdHIgImZpdHhlciBub3JtYWwiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM2Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICJkaXJlY3RvcmkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM4Cittc2dpZCAiY2hhcmFjdGVyIGRldmljZSIKK21zZ3N0ciAiZGlzcG9zaXRpdSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDAKK21zZ2lkICJibG9jayBkZXZpY2UiCittc2dzdHIgImRpc3Bvc2l0aXUgZCdhY2PDqXMgcGVyIGJsb2MiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQyCittc2dpZCAibmFtZWQgcGlwZSIKK21zZ3N0ciAiY29uZHVjdGUgYW1iIG5vbSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDQKK21zZ2lkICJzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJlbmxsYcOnIHNpbWLDsmxpYyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDYgbWlzYy91dWlkZC5jOjE2MgorbXNnaWQgInNvY2tldCIKK21zZ3N0ciAic8OyY29sIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpbGUgdHlwZSB3aXRoIG1vZGUgMCVvIgorbXNnc3RyICJ0aXBzIGRlIGZpdHhlciBkZXNjb25lZ3V0IGFtYiBtb2RlIDAlbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjMKK21zZ2lkICJpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiYmxvYyBpbmRpcmVjdGUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI1Cittc2dpZCAiZG91YmxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJibG9jIGluZGlyZWN0ZSBkb2JsZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjcKK21zZ2lkICJ0cmlwbGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImJsb2MgaW5kaXJlY3RlIHRyaXBsZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjkKK21zZ2lkICJ0cmFuc2xhdG9yIGJsb2NrIgorbXNnc3RyICJibG9jIGRlbCB0cmFkdWN0b3IiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDMxCittc2dpZCAiYmxvY2sgIyIKK21zZ3N0ciAiYmxvYyAjIgorCisjOiBlMmZzY2svcGFzczFiLmM6MjIyCittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgZGUgbm9kZXMtaSByZWNsYW1hdCBtw7psdGlwbGVtZW50IgorCisjOiBlMmZzY2svcGFzczFiLmM6NjI1IGUyZnNjay9wYXNzMWIuYzo3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNhbid0IGZpbmQgZHVwX2JsayBmb3IgJWxsdVxuIgorbXNnc3RyICJlcnJvciBpbnRlcm46IG5vIHMnaGEgdHJvYmF0IGR1cF9ibGsgcGVyIGEgJWxsdVxuIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODUyCittc2dpZCAicmV0dXJuZWQgZnJvbSBjbG9uZV9maWxlX2Jsb2NrIgorbXNnc3RyICJzJ2hhIHRvcm5hdCBkZSBsYSBmdW5jacOzIGNsb25lX2ZpbGVfYmxvY2siCisKKyMgRklYTUUgKGRwbSkKKyM6IGUyZnNjay9wYXNzMWIuYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBibG9jayByZWNvcmQgZm9yICVsbHUiCittc2dzdHIgIiIKKyJlcnJvciBpbnRlcm46IG5vIHMnaGEgcG9ndXQgY2VyY2FyIGVsIHJlZ2lzdHJlIGRlIGJsb2MgZCdhdHJpYnV0cyBhbXBsaWF0cyAiCisiKEVBKSBwZXIgYSAlbGx1IgorCisjIEZJWE1FIChkcG0pCisjOiBlMmZzY2svcGFzczFiLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAiIgorImVycm9yIGludGVybjogbm8gcydoYSBwb2d1dCBjZXJjYXIgZWwgcmVnaXN0cmUgZGUgbm9kZS1pIGQnYXRyaWJ1dHMgYW1wbGlhdHMgIgorIihFQSkgcGVyIGEgJXUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjQ3NSBlMmZzY2svcGFzczIuYzo3ODIKK21zZ2lkICJyZWFkaW5nIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAicydlc3TDoCBsbGVnaW50IGVsIGJsb2MgZGUgZGlyZWN0b3JpIgorCisjOiBlMmZzY2svcGFzczEuYzo2MzQKK21zZ2lkICJpbi11c2UgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBhIGRlIG5vZGVzLWkgZW4gw7pzIgorCisjOiBlMmZzY2svcGFzczEuYzo2NDUKK21zZ2lkICJkaXJlY3RvcnkgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBhIGRlIG5vZGVzLWkgZGUgZGlyZWN0b3JpcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjU1Cittc2dpZCAicmVndWxhciBmaWxlIGlub2RlIG1hcCIKK21zZ3N0ciAibWFwYSBkZSBub2Rlcy1pIGRlIGZpdHhlcnMgbm9ybWFscyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjY0IG1pc2MvZTJpbWFnZS5jOjEyNjUKK21zZ2lkICJpbi11c2UgYmxvY2sgbWFwIgorbXNnc3RyICJtYXBhIGRlIGJsb2NzIGVuIMO6cyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzMwCittc2dpZCAib3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJzJ2VzdMOgIG9icmluZyBsJ2VzY2FuZWlnIGRlIG5vZGVzLWkiCisKKyM6IGUyZnNjay9wYXNzMS5jOjc2NAorbXNnaWQgImdldHRpbmcgbmV4dCBpbm9kZSBmcm9tIHNjYW4iCittc2dzdHIgInMnZXN0w6Agb2J0ZW5pbnQgZWwgbm9kZS1pIHNlZ8O8ZW50IGRlIGwnZXNjYW5laWciCisKKyM6IGUyZnNjay9wYXNzMS5jOjEyNzkKK21zZ2lkICJQYXNzIDEiCittc2dzdHIgIlBhcyAxIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzM2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgaW5kaXJlY3QgYmxvY2tzIG9mIGlub2RlICV1IgorbXNnc3RyICJzJ2VzdGFuIGxsZWdpbnQgZWxzIGJsb2NzIGluZGlyZWN0ZXMgZGVsIG5vZGUtaSAldSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM4NgorbXNnaWQgImJhZCBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgZGUgbm9kZXMtaSBtYWxtZXNvcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQwOQorbXNnaWQgImlub2RlIGluIGJhZCBibG9jayBtYXAiCittc2dzdHIgIm5vZGUtaSBlbiBlbCBtYXBhIGRlIG5vZGVzLWkgbWFsbWVzb3MiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MjkKK21zZ2lkICJpbWFnaWMgaW5vZGUgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0NTYKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGJsb2NrIG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoxNTY3Cittc2dpZCAiZXh0IGF0dHIgYmxvY2sgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTZsdSglYyk6IGV4cGVjdGluZyAlNmx1IGdvdCBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI4OTgKK21zZ2lkICJibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjkwNAorbXNnaWQgImlub2RlIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoyOTEwCittc2dpZCAiaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MyLmM6MjgzCittc2dpZCAiUGFzcyAyIgorbXNnc3RyICJQYXMgMiIKKworIzogZTJmc2NrL3Bhc3MyLmM6ODA2Cittc2dpZCAiQ2FuIG5vdCBjb250aW51ZS4iCittc2dzdHIgIk5vIGVzIHBvdCBjb250aW51YXIuIgorCisjOiBlMmZzY2svcGFzczMuYzo3NworbXNnaWQgImlub2RlIGRvbmUgYml0bWFwIgorbXNnc3RyICIiCisKKyMgRklYTUU6IMKrTWVtw7JyaWEgbcOgeGltYcK7PyAoZHBtKQorIzogZTJmc2NrL3Bhc3MzLmM6ODYKK21zZ2lkICJQZWFrIG1lbW9yeSIKK21zZ3N0ciAiUGljIGRlIG1lbcOycmlhIgorCisjOiBlMmZzY2svcGFzczMuYzoxNDgKK21zZ2lkICJQYXNzIDMiCittc2dzdHIgIlBhcyAzIgorCisjOiBlMmZzY2svcGFzczMuYzozNDAKK21zZ2lkICJpbm9kZSBsb29wIGRldGVjdGlvbiBiaXRtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3M0LmM6MTk2Cittc2dpZCAiUGFzcyA0IgorbXNnc3RyICJQYXMgNCIKKworIzogZTJmc2NrL3Bhc3M1LmM6NzQKK21zZ2lkICJQYXNzIDUiCittc2dzdHIgIlBhcyA1IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxCittc2dpZCAiKG5vIHByb21wdCkiCittc2dzdHIgIihzZW5zZSBwcmVndW50YSkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIKK21zZ2lkICJGaXgiCittc2dzdHIgIkFycmVnbGEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMKK21zZ2lkICJDbGVhciIKK21zZ3N0ciAiRXNib3JyYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NAorbXNnaWQgIlJlbG9jYXRlIgorbXNnc3RyICJSZXViaWNhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1Cittc2dpZCAiQWxsb2NhdGUiCittc2dzdHIgIkFzc2lnbmEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYKK21zZ2lkICJFeHBhbmQiCittc2dzdHIgIkV4cGFuZGVpeCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NworbXNnaWQgIkNvbm5lY3QgdG8gL2xvc3QrZm91bmQiCittc2dzdHIgIkNvbm5lY3RhIGFtYiAvbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OAorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAiQ3JlYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OQorbXNnaWQgIlNhbHZhZ2UiCittc2dzdHIgIlNhbHZhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwCittc2dpZCAiVHJ1bmNhdGUiCittc2dzdHIgIlRydW5jYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MQorbXNnaWQgIkNsZWFyIGlub2RlIgorbXNnc3RyICJFc2JvcnJhIGVsIG5vZGUtaSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MgorbXNnaWQgIkFib3J0IgorbXNnc3RyICJJbnRlcnJvbXAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMKK21zZ2lkICJTcGxpdCIKK21zZ3N0ciAiRGl2aWRlaXgiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiQ29udGludWEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUKK21zZ2lkICJDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyIKK21zZ3N0ciAiQ2xvbmEgZWxzIGJsb2NzIHJlY2xhbWF0cyBtw7psdGlwbGVtZW50IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2Cittc2dpZCAiRGVsZXRlIGZpbGUiCittc2dzdHIgIlN1cHJpbWVpeCBlbCBmaXR4ZXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiU3VwcmltZWl4IGVscyBtaXNzYXRnZXMiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjgKK21zZ2lkICJVbmxpbmsiCittc2dzdHIgIkRlc2bDqXMgbCdlbmxsYcOnIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5Cittc2dpZCAiQ2xlYXIgSFRyZWUgaW5kZXgiCittc2dzdHIgIkVzYm9ycmEgbCfDrW5kZXggSFRyZWUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAKK21zZ2lkICJSZWNyZWF0ZSIKK21zZ3N0ciAiVG9ybmEgYSBjcmVhciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OQorbXNnaWQgIihOT05FKSIKK21zZ3N0ciAiKENBUCkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAKK21zZ2lkICJGSVhFRCIKK21zZ3N0ciAiQVJSRUdMQVQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEKK21zZ2lkICJDTEVBUkVEIgorbXNnc3RyICJFU0JPUlJBVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MgorbXNnaWQgIlJFTE9DQVRFRCIKK21zZ3N0ciAiUkVVQklDQVQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMKK21zZ2lkICJBTExPQ0FURUQiCittc2dzdHIgIkFTU0lHTkFUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0Cittc2dpZCAiRVhQQU5ERUQiCittc2dzdHIgIkVYUEFORElUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIlJFQ09OTkVDVEFUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2Cittc2dpZCAiQ1JFQVRFRCIKK21zZ3N0ciAiQ1JFQVQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcKK21zZ2lkICJTQUxWQUdFRCIKK21zZ3N0ciAiU0FMVkFUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4Cittc2dpZCAiVFJVTkNBVEVEIgorbXNnc3RyICJUUlVOQ0FUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5Cittc2dpZCAiSU5PREUgQ0xFQVJFRCIKK21zZ3N0ciAiTk9ERS1JIEVTQk9SUkFUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwCittc2dpZCAiQUJPUlRFRCIKK21zZ3N0ciAiSU5URVJST01QVVQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEKK21zZ2lkICJTUExJVCIKK21zZ3N0ciAiRElWSURJVCIKKworIyBGSVhNRQorIzogZTJmc2NrL3Byb2JsZW0uYzo5MgorbXNnaWQgIkNPTlRJTlVJTkciCittc2dzdHIgIkNPTlRJTlVBVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MworbXNnaWQgIk1VTFRJUExZLUNMQUlNRUQgQkxPQ0tTIENMT05FRCIKK21zZ3N0ciAiQ0xPTkFUUyBFTFMgQkxPQ1MgUkVDTEFNQVRTIE3DmkxUSVBMRU1FTlQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQKK21zZ2lkICJGSUxFIERFTEVURUQiCittc2dzdHIgIkZJVFhFUiBTVVBSSU1JVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NQorbXNnaWQgIlNVUFBSRVNTRUQiCittc2dzdHIgIlNVUFJJTUlUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2Cittc2dpZCAiVU5MSU5LRUQiCittc2dzdHIgIkVOTExBw4cgREVTRkVUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3Cittc2dpZCAiSFRSRUUgSU5ERVggQ0xFQVJFRCIKK21zZ3N0ciAiw41OREVYIEhUUkVFIEVTQk9SUkFUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4Cittc2dpZCAiV0lMTCBSRUNSRUFURSIKK21zZ3N0ciAiRVMgVE9STkFSw4AgQSBDUkVBUiIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3Cittc2dpZCAiQGIgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiRWwgQGIgQEIgcGVyIGFsIEBnICVnIG5vIMOpcyBhIEBnLiAgKEBiICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTEKK21zZ2lkICJAaSBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJFbCBAaSBAQiBwZXIgYWwgQGcgJWcgbm8gw6lzIGEgQGcuICAoQGIgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIHRhYmxlIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2Cittc2dpZCAiIgorIkBpIHRhYmxlIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCisiV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbiIKK21zZ3N0ciAiIgorIkxhIHRhdWxhIGRlIG5vZGVzLWkgcGVyIGFsIEBnICVnIG5vIMOpcyBhbCBAZy4gKEBiICViKVxuIgorIkFWw41TOiBQT1NTSUJMRSBQw4hSRFVBIERFIERBREVTIEdSRVUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgc3VwZXJibG9jayBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIHZhbGlkIGV4dDIvZXh0My9leHQ0XG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0uICBJZiB0aGUgZGV2aWNlIGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0Mi9leHQzL2V4dDRcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIHN1cGVyYmxvY2tcbgorIy4gQC1leHBhbmRlZDogaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgc3VwZXJibG9jazpcbgorIy4gQC1leHBhbmRlZDogICAgIGUyZnNjayAtYiA4MTkzIDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6ICBvclxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iIDMyNzY4IDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgQFMgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSB2YWxpZCBleHQyL2V4dDMvZXh0NFxuIgorIkBmLiAgSWYgdGhlIEB2IGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0Mi9leHQzL2V4dDRcbiIKKyJAZiAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIEBTXG4iCisiaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgQFM6XG4iCisiICAgIGUyZnNjayAtYiA4MTkzIDxAdj5cbiIKKyIgb3JcbiIKKyIgICAgZTJmc2NrIC1iIDMyNzY4IDxAdj5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIEBTLCBvIGLDqSBubyBkZXNjcml1IHVuIEBmXG4iCisiZXh0Mi9leHQzL2V4dDQgY29ycmVjdGUuIFNpIGVsIEB2IMOpcyB2w6BsaWQgaSByZWFsbWVudCBjb250w6kgdW4gQGZcbiIKKyJleHQyL2V4dDMvZXh0NCAoaSBubyBwYXMgZCdpbnRlcmNhbnZpLCB1ZnMgbyBhbGd1biBhbHRyZSksIGxsYXZvcnMgZWwgQFNcbiIKKyJlc3TDoCBtYWxtw6hzLCBwZXIgbGEgcXVhbCBjb3NhIHBvZGV1IHByb3ZhciBkJ2V4ZWN1dGFyIGwnZTJmc2NrIGFtYlxuIgorInVuIEBTIGFsdGVybmF0aXU6XG4iCisiICAgIGUyZnNjayAtYiA4MTkzIDxAdj5cbiIKKyIgb1xuIgorIiAgICBlMmZzY2sgLWIgMzI3NjggPEB2PlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgZmlsZXN5c3RlbSBzaXplIChhY2NvcmRpbmcgdG8gdGhlIHN1cGVyYmxvY2spIGlzICViIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgZGV2aWNlIGlzICVjIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBFaXRoZXIgdGhlIHN1cGVyYmxvY2sgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMKK21zZ2lkICIiCisiVGhlIEBmIHNpemUgKGFjY29yZGluZyB0byB0aGUgQFMpIGlzICViIEBic1xuIgorIlRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBAdiBpcyAlYyBAYnNcbiIKKyJFaXRoZXIgdGhlIEBTIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKyJMYSBtaWRhIGRlbCBAZiAoc2Vnb25zIGVsIEBTKSDDqXMgZGUgJWIgQGJzXG4iCisiTGEgbWlkYSBmw61zaWNhIGRlbCBAdiDDqXMgZGUgJWMgQGJzXG4iCisiU2VndXJhbWVudCBlbCBAUyBvIGLDqSBsYSB0YXVsYSBkZSBwYXJ0aWNpb25zIGVzdGFuIG1hbG1lc29zLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2NrX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbgorIy4gQC1leHBhbmRlZDogVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuCisjLiBALWV4cGFuZGVkOiBmcm9tIHRoZSBibG9jayBzaXplLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MAorbXNnaWQgIiIKKyJAUyBAYl9zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4iCisiVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuIgorImZyb20gdGhlIEBiIHNpemUuXG4iCittc2dzdHIgIiIKKyJtaWRhX2RlbF9AYiBkZWwgQFMgPSAlYiwgbWlkYSBkZWxzIGZyYWdtZW50cyA9ICVjLlxuIgorIkFxdWVzdGEgdmVyc2nDsyBkZSBsJ2UyZnNjayBubyBmdW5jaW9uYSBhbWIgbWlkZXMgZGUgZnJhZ21lbnQgcXVlIG5vXG4iCisiY29pbmNpZGVpeGVuIGFtYiBsYSBtaWRhIGRlbCBAYi5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja3NfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDcKK21zZ2lkICJAUyBAYnNfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiQGJzX3Blcl9ncnVwIGRlbCBAUyA9ICViLCBoYXVyaWEgZCdoYXZlciBlc3RhdCAlY1xuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGZpcnN0X2RhdGFfYmxvY2sgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MgorbXNnaWQgIkBTIGZpcnN0X2RhdGFfQGIgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICJwcmltZXJfQGJfZGVfZGFkZXMgZGVsIEBTID0gJWIsIGhhdXJpYSBkJ2hhdmVyIGVzdGF0ICVjXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NworbXNnaWQgIiIKKyJAZiBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS5cbiIKKyJcbiIKK21zZ3N0ciAiRWwgQGYgbm8gdMOpIGNhcCBVVUlEOyBzZSBsaSduIGdlbmVyYXLDoCB1bi5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IGlmIHNldmVyYWwgaW5vZGUgb3IgYmxvY2sgYml0bWFwIGJsb2NrcyBvciBwYXJ0XG4iCisib2YgdGhlIGlub2RlIHRhYmxlIHJlcXVpcmUgcmVsb2NhdGlvbiwgeW91IG1heSB3aXNoIHRvIHRyeVxuIgorInJ1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiAlUycgb3B0aW9uIGZpcnN0LiAgVGhlIHByb2JsZW1cbiIKKyJtYXkgbGllIG9ubHkgd2l0aCB0aGUgcHJpbWFyeSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYW5kXG4iCisidGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQ29ycnVwdGlvbiBmb3VuZCBpbiBzdXBlcmJsb2NrLiAgKCVzID0gJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MQorbXNnaWQgIkNvcnJ1cHRpb24gZm91bmQgaW4gQFMuICAoJXMgPSAlTikuXG4iCittc2dzdHIgIkVsIEBTIGVzdMOgIG1hbG3DqHMuICglcyA9ICVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBAdjogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBkZXRlcm1pbmFyIGxhIG1pZGEgZGVsIEB2IGbDrXNpYzogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgY291bnQgaW4gc3VwZXJibG9jayBpcyAlaSwgc2hvdWxkIGJlICVqLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MQorbXNnaWQgIkBpIGNvdW50IGluIEBTIGlzICVpLCBAcyAlai5cbiIKK21zZ3N0ciAiRWwgbm9tYnJlIGRlIG5vZGVzLWkgZW4gZWwgQFMgw6lzICVpIChAcyAlaikuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg1Cittc2dpZCAiVGhlIEh1cmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZmlsZXR5cGUgZmVhdHVyZS5cbiIKK21zZ3N0ciAiRWwgSHVyZCBubyDDqXMgY29tcGF0aWJsZSBhbWIgbGEgZnVuY2lvbmFsaXRhdCBkZSB0aXB1cyBkZSBmaXR4ZXIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgJWkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoYXMgYW4gQG4gQGogKEBpICVpKS5cbiIKK21zZ3N0ciAiRWwgQFMgdMOpIHVuIEBqIEBuIChAaSAlaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIG11bHRpcGxlIGZpbGVzeXN0ZW0gdXNlcnMgKHVuc3VwcG9ydGVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTUKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgbXVsdGlwbGUgQGYgdXNlcnMgKHVuc3VwcG9ydGVkKS5cbiIKK21zZ3N0ciAiRWwgQGogZXh0ZXJuIHTDqSBtw7psdGlwbGVzIHVzdWFyaXMgZGVsIEBmIChubyBjb21wYXRpYmxlKS5cbiIKKworIy4gQC1leHBhbmRlZDogQ2FuJ3QgZmluZCBleHRlcm5hbCBqb3VybmFsXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjAwCittc2dpZCAiQ2FuJ3QgZmluZCBleHRlcm5hbCBAalxuIgorbXNnc3RyICJObyBzJ2hhIHRyb2JhdCBlbCBAaiBleHRlcm5cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgYmFkIHN1cGVyYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDUKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgYmFkIEBTXG4iCittc2dzdHIgIkVsIEBqIGV4dGVybiB0w6kgdW4gQFMgbWFsbcOoc1xuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmaWxlc3lzdGVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjEwCittc2dpZCAiRXh0ZXJuYWwgQGogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIEBmXG4iCittc2dzdHIgIkVsIEBqIGV4dGVybiBubyDDqXMgY29tcGF0aWJsZSBhbWIgYXF1ZXN0IEBmXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gam91cm5hbCBzdXBlcmJsb2NrIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgam91cm5hbCAKKyMuIEAtZXhwYW5kZWQ6IGZvcm1hdC5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjE1Cittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiAiCisiZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjIzCittc2dpZCAiQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiRWwgQFMgZGVsIEBqIGVzdMOgIG1hbG3DqHMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzX2pvdXJuYWwgZmxhZyBpcyBjbGVhciwgYnV0IGEgam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyOAorbXNnaWQgIkBTIGhhc19AaiBmbGFnIGlzIGNsZWFyLCBidXQgYSBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJFbCBzZW55YWxhZG9yIGhhc19AaiBkZWwgQFMgZXN0w6AgYnVpdCwgcGVyw7IgZWwgQGogdMOpIGRhZGVzLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzMworbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gQGogaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiIgorIkVsIEBTIHTDqSBlbCBzZW55YWxhZG9yIMKrbmVlZHNfcmVjb3ZlcnnCuyAocmVjdXBlcmFjacOzX25lY2Vzc8OgcmlhKSBhY3RpdmF0LCAiCisicGVyw7Igbm8gdMOpIGNhcCBAai5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgam91cm5hbCBoYXMgZGF0YS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMzgKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgQGogaGFzIGRhdGEuXG4iCittc2dzdHIgIkVsIHNlbnlhbGFkb3IgZGUgcmVjdXBlcmFjacOzIEBTIGVzdMOgIGJ1aXQsIHBlcsOyIGVsIEBqIHTDqSBkYWRlcy5cbiIKKworIy4gQC1leHBhbmRlZDogQ2xlYXIgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDMKK21zZ2lkICJDbGVhciBAaiIKK21zZ3N0ciAiRXNib3JyYSBlbCBAaiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBmaWxlc3lzdGVtLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0OCBlMmZzY2svcHJvYmxlbS5jOjcwNworbXNnaWQgIkBmIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIEBmLiAgIgorbXNnc3RyICIiCisiRWwgQGYgdMOpIGVscyBzZW55YWxhZG9ycyBkZSBmdW5jaW9uYWxpdGF0IChmZWF0dXJlKSBkZWZpbml0cywgcGVyw7Igw6lzIHVuIEBmICIKKyJkZSB2ZXJzacOzIDAuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVzIG9ycGhhbmVkIGlub2RlICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjUzCittc2dpZCAiJXMgQG8gQGkgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbiIKK21zZ3N0ciAiJXMgQGkgQG8gJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBtaWRhPSVJcylcbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1OAorbXNnaWQgIkBJICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIlMnaGEgdHJvYmF0ICVCIEBJICglYikgYSBsJ0BpIEBvICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjMKK21zZ2lkICJBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiUydoYSB0cm9iYXQgJUIgKCViKSBxdWUgamEgZXN0w6AgZXNib3JyYXQgYSBsJ0BpIEBvICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIG9ycGhhbmVkIGlub2RlICVpIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBvIEBpICVpIGluIEBTLlxuIgorbXNnc3RyICJAaSBAbyBASSAlaSBlbiBlbCBAUy5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBpbm9kZSAlaSBpbiBvcnBoYW5lZCBpbm9kZSBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJASSBAaSAlaSBpbiBAbyBAaSBsaXN0LlxuIgorbXNnc3RyICJAaSBAbyBASSAlaSBhIGxhIGxsaXN0YSBkZSBub2Rlcy1pIEBvcy5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3OAorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICIiCisiRWwgQFMgZGVsIEBqIHTDqSB1biBzZW55YWxhZG9yIGRlc2NvbmVndXQgZGUgZnVuY2lvbmFsaXRhdCBkZSBub23DqXMgbGVjdHVyYSAiCisiZGVmaW5pdC5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4MworbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICIiCisiRWwgQFMgZGVsIEBqIHTDqSB1biBzZW55YWxhZG9yIGRlc2NvbmVndXQgZGUgZnVuY2lvbmFsaXRhdCBubyBjb21wYXRpYmxlICIKKyJkZWZpbml0LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODgKK21zZ2lkICJAaiB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4iCittc2dzdHIgIkxhIHZlcnNpw7MgZGVsIEBqIG5vIGZ1bmNpb25hIGFtYiBhcXVlc3QgZTJmc2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBNb3Zpbmcgam91cm5hbCBmcm9tIC8lcyB0byBoaWRkZW4gaW5vZGUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTW92aW5nIEBqIGZyb20gLyVzIHRvIGhpZGRlbiBAaS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlMnZXN0w6AgdHJhc2xsYWRhbnQgZWwgQGogZGUgLyVzIGFsIEBpIG9jdWx0LlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBtb3Zpbmcgam91cm5hbDogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBtb3ZpbmcgQGo6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKyJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHRyYXNsbGFkYXIgZWwgQGo6ICVtXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZvdW5kIGludmFsaWQgVjIgam91cm5hbCBzdXBlcmJsb2NrIGZpZWxkcyAoZnJvbSBWMSBqb3VybmFsKS5cbgorIy4gQC1leHBhbmRlZDogQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgam91cm5hbCBzdXBlcmJsb2NrLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMwMworbXNnaWQgIiIKKyJGb3VuZCBAbiBWMiBAaiBAUyBmaWVsZHMgKGZyb20gVjEgQGopLlxuIgorIkNsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIEBqIEBTLi4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJTJ2hhbiB0cm9iYXQgY2FtcHMgZGUgQFMgZCd1biBAaiBkZSBWMiAoZW4gdW4gQGogZGUgVjEpLlxuIgorIlMnZXN0YW4gZXNib3JyYW50IGVscyBjYW1wcyBtw6lzIGVubGzDoCBkZWwgQFMgZGVsIEBqIGRlIFYxLi4uXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJ1biBqb3VybmFsIGFueXdheQorIzogZTJmc2NrL3Byb2JsZW0uYzozMDkKK21zZ2lkICJSdW4gQGogYW55d2F5IgorbXNnc3RyICJFeGVjdXRhIGVsIEBqIGRlIHRvdGVzIG1hbmVyZXMiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTQKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiIgorIkVsIHNlbnlhbGFkb3IgZGUgcmVjdXBlcmFjacOzIG5vIGVzdMOgIGRlZmluaXQgZW4gbGEgY8OycGlhIGRlbCBAUywgcGVyIGxhIHF1YWwgIgorImNvc2EgcydleGVjdXRhcsOgIGVsIEBqIGRlIHRvdGVzIG1hbmVyZXMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhY2tpbmcgdXAgam91cm5hbCBpbm9kZSBibG9jayBpbmZvcm1hdGlvbi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzE5Cittc2dpZCAiIgorIkJhY2tpbmcgdXAgQGogQGkgQGIgaW5mb3JtYXRpb24uXG4iCisiXG4iCittc2dzdHIgIiIKKyJTJ2VzdMOgIGZlbnQgdW5hIGPDsnBpYSBkZSBzZWd1cmV0YXQgZGUgbGEgaW5mb3JtYWNpw7MgZGVsIEBiIGRlIG5vZGVzLWkgZGVsICIKKyJAai5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9pbm9kZSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGlzICVOOyBzaG91bGQgYmUgemVyby4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMjQKK21zZ2lkICIiCisiQGYgZG9lcyBub3QgaGF2ZSByZXNpemVfQGkgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X0Bic1xuIgorImlzICVOOyBAcyB6ZXJvLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZV9pbm9kZSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgaW5vZGUgaXMgbm9uLXplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzMwCittc2dpZCAiUmVzaXplX0BpIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBAaSBpcyBub24temVyby4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgbm90IHZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzNQorbXNnaWQgIlJlc2l6ZSBAaSBub3QgdmFsaWQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0MAorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKyJMYSBkYXJyZXJhIGhvcmEgZGUgbXVudGF0Z2UgZGVsIEBTICgldCxcbiIKKyJcdGFyYSA9ICVUKSDDqXMgZW4gZWwgZnV0dXIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNDUKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisiTGEgZGFycmVyYSBob3JhIGQnZXNjcmlwdHVyYSBkZWwgQFMgKCV0LCBcbiIKKyJcdGFyYSA9ICVUKSDDqXMgZW4gZWwgZnV0dXIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBzaG91bGQgYmUgJVguICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgQHMgJVguICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNTQKK21zZ2lkICIiCisiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1OQorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2OQorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBMYXN0IGdyb3VwIGJsb2NrIGJpdG1hcCB1bmluaXRpYWxpemVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3NAorbXNnaWQgIkxhc3QgQGcgQGIgQEIgdW5pbml0aWFsaXplZC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHRyYW5zYWN0aW9uICVpIHdhcyBjb3JydXB0LCByZXBsYXkgd2FzIGFib3J0ZWQuXG4iCittc2dzdHIgIiIKKyJMYSB0cmFuc2FjY2nDsyBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zICVpIGVzdMOgIG1hbG1lc2EsIHNlIG4naGEgIgorImludGVycm9tcHV0IGxhIHJlcGV0aWNpw7NcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozODMKK21zZ2lkICJUaGUgdGVzdF9mcyBmbGFnIGlzIHNldCAoYW5kIGV4dDQgaXMgYXZhaWxhYmxlKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzg4Cittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAiCisic2V0KVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozOTQKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5ICIKKyJzZXQpXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDAwCittc2dpZCAiT25lIG9yIG1vcmUgQGIgQGcgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwNQorbXNnaWQgIlNldHRpbmcgZnJlZSBAaXMgY291bnQgdG8gJWogKHdhcyAlaSlcbiIKK21zZ3N0ciAiUydhbGxpYmVyYSBAaXMgY29udGEgZmlucyBhICVqIChhYmFucyBlcmEgJWkpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBibG9ja3MgY291bnQgdG8gJWMgKHdhcyAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTAKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIlMnYWxsaWJlcmEgQGJzIGNvbnRhIGZpbnMgYSAlYyAoYWJhbnMgZXJhICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBNYWtpbmcgcXVvdGEgaW5vZGUgJWkgKCVRKSBoaWRkZW4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDE1Cittc2dpZCAiTWFraW5nIEBxIEBpICVpICglUSkgaGlkZGVuLlxuIgorbXNnc3RyICJFcyBmYSBvY3VsdCBAcSBAaSAlaSAoJVEpLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjAKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAiCittc2dzdHIgIkBTIHTDqSB1biBibG9jIE1NUCBubyB2w6BsaWQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyNQorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfb3BlbjI6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayA2NGJpdCBmaWxlc3lzdGVtcyBuZWVkcyBleHRlbnRzIHRvIGFjY2VzcyB0aGUgd2hvbGUgZGlzay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDAKK21zZ2lkICJAUyA2NGJpdCBmaWxlc3lzdGVtcyBuZWVkcyBleHRlbnRzIHRvIGFjY2VzcyB0aGUgd2hvbGUgZGlzay4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NQorbXNnaWQgIkZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZy4gICglTiwgbWF4IHZhbHVlICVnKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NTIKK21zZ2lkICJQYXNzIDE6IENoZWNraW5nIEBpcywgQGJzLCBhbmQgc2l6ZXNcbiIKK21zZ3N0ciAiUGFzIDE6IGNvbXByb3ZhY2nDsyBkZSBub2Rlcy1pLCBAYnMgaSBtaWRlc1xuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NTYKK21zZ2lkICJAciBpcyBub3QgYSBAZC4gICIKK21zZ3N0ciAiZWwgQHIgbm8gw6lzIHVuIEBkLiAgIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjEKK21zZ2lkICJAciBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAiCittc2dzdHIgImVsIEByIHTDqSBlbCBkdGltZSBkZWZpbml0IChzZWd1cmFtZW50IGRlZ3V0IGEgdW4gbWtlMmZzIGFudGljKS4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2VydmVkIGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjYKK21zZ2lkICJSZXNlcnZlZCBAaSAlaSAoJVEpIGhhcyBAbiBtb2RlLiAgIgorbXNnc3RyICJFbCBAaSAlaSAoJVEpIHTDqSB1biBtb2RlIEBuLiAgIgorCisjIEZJWE1FIGR0aW1lIChkcG0pCisjLiBALWV4cGFuZGVkOiBkZWxldGVkIGlub2RlICVpIGhhcyB6ZXJvIGR0aW1lLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICJARCBAaSAlaSBoYXMgemVybyBkdGltZS4gICIKK21zZ3N0ciAiRWwgQGkgJWkgQEQgdMOpIHVuIGR0aW1lIHplcm8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAiCittc2dzdHIgIkVsIEBpICVpIHMnZXN0w6AgdXRpbGl0emFudCwgcGVyw7IgdMOpIGR0aW1lIGRlZmluaXQuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhIHplcm8tbGVuZ3RoIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgYSBAeiBAZC4gICIKK21zZ3N0ciAiRWwgQGkgJWkgw6lzIHVuIEBkIGRlIEB6LiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4NgorbXNnaWQgIkBnICVnJ3MgQGIgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTEKK21zZ2lkICJAZyAlZydzIEBpIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgdGFibGUgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTYKK21zZ2lkICJAZyAlZydzIEBpIHRhYmxlIGF0ICViIEBDLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwMQorbXNnaWQgIkBnICVnJ3MgQGIgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgKCViKSBpcyBiYWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA2Cittc2dpZCAiQGcgJWcncyBAaSBAQiAoJWIpIGlzIGJhZC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9zaXplIGlzICVJcywgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxMQorbXNnaWQgIkBpICVpLCBpX3NpemUgaXMgJUlzLCBAcyAlTi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9ibG9ja3MgaXMgJUliLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE2Cittc2dpZCAiQGkgJWksIGlfQGJzIGlzICVJYiwgQHMgJU4uICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyMQorbXNnaWQgIkBJICVCICglYikgaW4gQGkgJWkuICAiCittc2dzdHIgIiVCICglYikgQEkgYSBAaSAlaS4gICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBvdmVybGFwcyBmaWxlc3lzdGVtIG1ldGFkYXRhIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyNgorbXNnaWQgIiVCICglYikgb3ZlcmxhcHMgQGYgbWV0YWRhdGEgaW4gQGkgJWkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJFbCBAaSAlaSB0w6kgQGJzIG5vIHbDoGxpZHMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFRvbyBtYW55IGlsbGVnYWwgYmxvY2tzIGluIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzNgorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBpbGxlZ2FsIEBicyBpbiBAaSAlaS5cbiIKK21zZ3N0ciAiSGkgaGEgbWFzc2EgQGIgbm8gdsOgbGlkcyBhbCBAaSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGJhZCBibG9jayBpbm9kZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDEKK21zZ2lkICJASSAlQiAoJWIpIGluIGJhZCBAYiBAaS4gICIKK21zZ3N0ciAiJUIgKCViKSBASSBlbiBAYiBAaSBkb2xlbnRzLiAgIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQ2Cittc2dpZCAiQmFkIEBiIEBpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJFbCBAaSBkZSBAYiBlcnJvbmlzIHTDqSBAYnMgbm8gdsOgbGlkcy4gICIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIG9yIGJhZCBibG9jayBpbiB1c2UhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUxCittc2dpZCAiRHVwbGljYXRlIG9yIGJhZCBAYiBpbiB1c2UhXG4iCittc2dzdHIgIlMnZXN0w6AgdXRpbGl0emFudCBlbCBAYiBkdXBsaWNhdCBvIGVycm9uaVxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgJWIgdXNlZCBhcyBiYWQgYmxvY2sgaW5vZGUgaW5kaXJlY3QgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTU2Cittc2dpZCAiQmFkIEBiICViIHVzZWQgYXMgYmFkIEBiIEBpIGluZGlyZWN0IEBiLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuCisjLiBALWV4cGFuZGVkOiBzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpbiB0aGUgZmlsZXN5c3RlbS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjEKK21zZ2lkICIiCisiXG4iCisiVGhlIGJhZCBAYiBAaSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbiIKKyJzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuIgorImluIHRoZSBAZi5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogSWYgdGhlIGJsb2NrIGlzIHJlYWxseSBiYWQsIHRoZSBmaWxlc3lzdGVtIGNhbiBub3QgYmUgZml4ZWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTY4Cittc2dpZCAiIgorIlxuIgorIklmIHRoZSBAYiBpcyByZWFsbHkgYmFkLCB0aGUgQGYgY2FuIG5vdCBiZSBmaXhlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNpIGVsIEBiIGVzdMOgIHJlYWxtZW50IG1hbG3DqHMsIGVsIEBmIG5vIGVzIHBvZHLDoCByZXBhcmFyLlxuIgorCisjLiBALWV4cGFuZGVkOiBZb3UgY2FuIHJlbW92ZSB0aGlzIGJsb2NrIGZyb20gdGhlIGJhZCBibG9jayBsaXN0IGFuZCBob3BlXG4KKyMuIEAtZXhwYW5kZWQ6IHRoYXQgdGhlIGJsb2NrIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTczCittc2dpZCAiIgorIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKyJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogVGhlIHByaW1hcnkgc3VwZXJibG9jayAoJWIpIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzkKK21zZ2lkICJUaGUgcHJpbWFyeSBAUyAoJWIpIGlzIG9uIHRoZSBiYWQgQGIgbGlzdC5cbiIKK21zZ3N0ciAiRWwgQFMgcHJpbWFyeSAoJWIpIMOpcyBhIGxhIGxsaXN0YSBkZSBAYnMgZXJyb25pcy5cbiIKKworIy4gQC1leHBhbmRlZDogQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgZ3JvdXAgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTg0Cittc2dpZCAiQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgQGcgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBAYiBsaXN0XG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBzdXBlcmJsb2NrICglYikgaXMgYmFkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5MAorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgQFMgKCViKSBpcyBiYWQuXG4iCittc2dzdHIgIkF2w61zOiBlbCBAUyAoJWIpIGRlbCBncnVwICVzIMOpcyBlcnJvbmkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIGJsb2NrICglYikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTk1Cittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBAZyBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgQGIgKCViKS5cbiIKK21zZ3N0ciAiIgorIkF2w61zOiBsYSBjw7JwaWEgZGVscyBkZXNjcmlwdG9ycyBkZSBAZyBkZWwgZ3J1cCAlZyB0w6kgdW4gQGIgZXJyb25pICglYikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFByb2dyYW1taW5nIGVycm9yPyAgYmxvY2sgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9ibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDEKK21zZ2lkICJQcm9ncmFtbWluZyBlcnJvcj8gIEBiICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfQGIuXG4iCittc2dzdHIgIiIKKyJFcyBwcm9iYWJsZSBxdWUgcydoYWdpIHByb2R1w690IHVuIGVycm9yIGRlIHByb2dyYW1hY2nDszogZWwgQGIgIyViIGhhIGVzdGF0ICIKKyJyZWNsYW1hdCBzZW5zZSBtb3RpdSBhIHByb2Nlc3NfYmFkX0BiLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nICVOIGNvbnRpZ3VvdXMgYmxvY2socykgaW4gYmxvY2sgZ3JvdXAgJWcgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNworbXNnaWQgIkBBICVOIGNvbnRpZ3VvdXMgQGIocykgaW4gQGIgQGcgJWcgZm9yICVzOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBiIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuIgorbXNnc3RyICJAQSBkZSBsYSBtZW3DsnJpYSBpbnRlcm3DqGRpYSBkZWwgQGIgcGVyIGEgcmV1YmljYXIgJXNcbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTcKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuIgorbXNnc3RyICJTJ2VzdMOgIHJldWJpY2FudCAlZyBkZWwgQGcgJXMgZGUgJWIgYSAlYy4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIHRvICVjLi4uXG4iCittc2dzdHIgIlMnZXN0w6AgcmV1YmljYW50ICVnIGRlbCBAZyAlcyBhICVjLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrICViIG9mICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyNworbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIEBiICViIG9mICVzOiAlbVxuIgorbXNnc3RyICJBdsOtczogbm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgQGIgJWIgZGUgJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBibG9jayAlYiBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMyCittc2dpZCAiV2FybmluZzogY291bGQgbm90IHdyaXRlIEBiICViIGZvciAlczogJW1cbiIKK21zZ3N0ciAiQXbDrXM6IG5vIHMnaGEgcG9ndXQgZXNjcml1cmUgZWwgQGIgJWIgcGVyIGEgJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjM3IGUyZnNjay9wcm9ibGVtLmM6MTUwMQorbXNnaWQgIkBBIEBpIEBCICglTik6ICVtXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gQEEgZGVsIEBCIGRlbCBAaSAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0MgorbXNnaWQgIkBBIEBiIEBCICglTik6ICVtXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gQEEgZGVsIEBCIGRlbCBAYiAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGRpcmVjdG9yeSBibG9jayBhcnJheTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGQgQGIgYXJyYXk6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIEBpcyAoJWkpOiAlbVxuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVzY2FuZWphciBlbHMgbm9kZXMtaSAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBpdGVyYXIgYSB0cmF2w6lzIGRlbHMgQGJzIGRlbCBAaSAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGlub2RlIGNvdW50IGluZm9ybWF0aW9uIChpbm9kZT0laSwgY291bnQ9JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2NworbXNnaWQgIkVycm9yIHN0b3JpbmcgQGkgY291bnQgaW5mb3JtYXRpb24gKEBpPSVpLCBjb3VudD0lTik6ICVtXG4iCittc2dzdHIgIiIKKyJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGRlc2FyIGxhIGluZm9ybWFjacOzIGRlbCBub21icmUgZGUgbm9kZXMtaSAoQGk9JWksICIKKyJub21icmU9JU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGJsb2NrPSViLCBudW09JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3MgorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKK21zZ3N0ciAiIgorIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZGVzYXIgbGEgaW5mb3JtYWNpw7MgZGVsIEBiIGRlIEBkIChAaT0laSwgQGI9JWIsIG7Dum09IgorIiVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgZWwgQGkgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlICVpKSBoYXMgaW1tdXRhYmxlXG4KKyMuIEAtZXhwYW5kZWQ6IG9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoQGkgJWkpIGhhcyBpbW11dGFibGVcbiIKKyJvciBhcHBlbmQtb25seSBmbGFnIHNldC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgY29tcHJlc3Npb24gZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGNvbXByZXNzaW9uIHN1cHBvcnQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBAY2lvbiBmbGFnIHNldCBvbiBAZiB3aXRob3V0IEBjaW9uIHN1cHBvcnQuICAiCittc2dzdHIgIiIKKyJFbCBAaSAlaSB0w6kgZWwgc2VueWFsYWRvciBkZSBAYyBkZWZpbml0IGVuIHVuIEBmIHF1ZSBubyDDqXMgY29tcGF0aWJsZSBhbWIgbGEgIgorIkBjLiAgIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8pIGlub2RlICVpIGhhcyBub24temVybyBzaXplLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWFsIChAdi9zb2NrZXQvZmlmbykgQGkgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MTIKK21zZ2lkICJAaiBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiRWwgQGkgZGVsIEBqIG5vIHMndXRpbGl0emEsIHBlcsOyIGNvbnTDqSBkYWRlcy4gICIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxNworbXNnaWQgIkBqIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkVsIEBqIG5vIMOpcyB1biBmaXR4ZXIgbm9ybWFsLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgd2FzIHBhcnQgb2YgdGhlIEBvIEBpIGxpc3QuICAiCittc2dzdHIgIkVsIEBpICVpIMOpcyBwYXJ0IGRlIGxhIGxsaXN0YSBkZSBub2Rlcy1pIEBvcy4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGVzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjgKK21zZ2lkICJAaXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgIgorbXNnc3RyICIiCisiUydoYW4gdHJvYmF0IG5vZGVzLWkgcXVlIHPDs24gcGFydCBkJ3VuYSBsbGlzdGEgZW5sbGHDp2FkYSBkJ29yZmVzIG1hbG1lc2EuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMzCittc2dpZCAiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgZm9yIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjczOAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgZm9yIEBpICVpLiAgIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBlbCBAYiBkJ0BhIGRlbCBAaSAlaS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgYmFkIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDMKK21zZ2lkICJAaSAlaSBoYXMgYSBiYWQgQGEgQGIgJWIuICAiCittc2dzdHIgIkVsIEBpICVpIHTDqSB1biBAYiBkJ0BhICViIG1hbG3DqHMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQ4Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBlbCBAYiBkJ0BhICViICglbSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzUzCittc2dpZCAiQGEgQGIgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgQHMgJU4uICAiCittc2dzdHIgIkBhIEBiICViIHTDqSB1biBjb21wdGFkb3IgZGUgcmVmZXLDqG5jaWEgJXIsIEBzICVOLiAgIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc1OAorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBlc2NyaXVyZSBlbCBAYiBkJ0BhICViICglbSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgaF9ibG9ja3MgPiAxLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2MworbXNnaWQgIkBhIEBiICViIGhhcyBoX0BicyA+IDEuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzY4Cittc2dpZCAiQEEgQGEgQGIgJWIuICAiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gQEEgZGVsIEBiIGQnQGEgJWIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzczCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgIgorbXNnc3RyICJFbCBAYiBkJ0BhIGVzdMOgIG1hbG3DqHMgKGNvbMK3bGlzacOzIGVuIGwnYXNzaWduYWNpw7MpLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCBuYW1lKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzgKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiBuYW1lKS4gICIKK21zZ3N0ciAiRWwgQGIgZCdAYSBlc3TDoCBtYWxtw6hzIChub20gQG4pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCB2YWx1ZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzgzCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gdmFsdWUpLiAgIgorbXNnc3RyICJFbCBAYiBkJ0BhIGVzdMOgIG1hbG3DqHMgKHZhbG9yIEBuKS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgdG9vIGJpZy4gICIKK21zZ3N0ciAiRWwgQGkgJWkgw6lzIG1hc3NhIGdyYW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgY2F1c2VzIGRpcmVjdG9yeSB0byBiZSB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5MgorbXNnaWQgIiVCICglYikgY2F1c2VzIEBkIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIkVsICVCICglYikgZmEgcXVlIGVsIEBkIHNpZ3VpIG1hc3NhIGdyYW4uICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk3Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgZmlsZSB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICJFbCAlQiAoJWIpIGZhIHF1ZSBlbCBmaXR4ZXIgc2lndWkgbWFzc2EgZ3Jhbi4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MDIKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBzeW1saW5rIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIkVsICVCICglYikgZmEgcXVlIGwnZW5sbGHDpyBzaW1iw7JsaWMgc2lndWkgbWFzc2EgZ3Jhbi4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuIgorbXNnc3RyICIiCisiRWwgQGkgJWkgdMOpIGVsIHNlbnlhbGFkb3IgSU5ERVhfRkwgZGVmaW5pdCBlbiB1biBAZiBxdWUgbm8gw6lzIGNvbXBhdGJsZSBhbWIgIgorImwnaHRyZWUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIgorbXNnc3RyICJFbCBAaSAlaSB0w6kgZWwgc2VueWFsYWRvciBJTkRFWF9GTCBkZWZpbml0IHBlcsOyIG5vIMOpcyB1biBAZC5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIHJvb3Qgbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgaGFzIGFuIEBuIHJvb3Qgbm9kZS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIyCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzIKK21zZ2lkICJAaCAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgYW4gaW5kaXJlY3QgYmxvY2sgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gbWV0YWRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODM3Cittc2dpZCAiIgorIkJhZCBAYiBAaSBoYXMgYW4gaW5kaXJlY3QgQGIgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4iCisiQGYgbWV0YWRhdGEuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDgKK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkVsIEBpIHTDqSB1bmEgbWlkYSBhZGRpY2lvbmFsICglSVMpIHF1w6ggbm8gw6lzIHbDoGxpZGFcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUzCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkxhIGxsYXJnYWRhIGRlbCBub20gKCVOKSBkZSBsJ0BhIGRlbCBAaSAlaSBubyDDqXMgdsOgbGlkYVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1OAorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkVsIGRlc3BsYcOnYW1lbnQgZGVsIHZhbG9yICglTikgZGUgbCdAYSBkZWwgQGkgJWkgbm8gw6lzIHbDoGxpZFxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgYmxvY2sgKCVOKSB3aGljaCBpcyBpbnZhbGlkIChtdXN0IGJlIDApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYzCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgQGIgKCVOKSB3aGljaCBpcyBAbiAobXVzdCBiZSAwKVxuIgorbXNnc3RyICJFbCBAYiBkZWwgdmFsb3IgKCVOKSBkZSBsJ0BhIGRlbCBAaSAlaSBubyDDqXMgdsOgbGlkIChoYXVyaWEgZGUgc2VyIDApXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2OAorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJMYSBtaWRhIGRlbCB2YWxvciAoJU4pIGRlIGwnQGEgZGVsIEBpICVpIG5vIMOpcyB2w6BsaWRhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJMJ0BhIGRlbCBAaSAlaSB0w6kgdW4gcmVzdW0gKCVOKSBxdWUgbm8gw6lzIHbDoGxpZFxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODc4Cittc2dpZCAiQGkgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuIgorbXNnc3RyICJFbCBAaSAlaSDDqXMgdW4gJUl0LCBwZXLDsiBzZW1ibGEgc2VyIHVuIGRpcmVjdG9yaSBlbiByZWFsaXRhdC5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIGV4dGVudCB0cmVlIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgQHggdHJlZSBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgbCdhcmJyZSBkJ0B4IGFsIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIGlub2RlICVpXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4OAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIEBpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIGludmFsaWQgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTQKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIEBuIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBpbnZhbGlkIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTkKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBAbiBsZW4gJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKyJFbCBAaSAlaSB0w6kgZWwgc2VueWFsYWRvciBFWFRFTlRTX0ZMIGRlZmluaXQgZW4gdW4gQGYgcXVlIG5vIMOpcyBjb21wYXRpYmxlICIKKyJhbWIgbCdleHRlbnNpw7MuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBzdXBlcmJsb2NrIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBAUyBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyNAorbXNnaWQgIiIKKyJAaSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI4Cittc2dpZCAiQGkgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzMworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgQGIgQEI6ICVtXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgcXVhbiBlcyBjb252ZXJ0aWEgZWwgZ3J1cCBkZSBzZWN0b3JzIEBiIEBCOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzOAorbXNnaWQgIkBxIEBpIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkVsIEBpIGRlbCBAcSBubyDDqXMgdW4gZml0eGVyIG5vcm1hbC4gICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQzCittc2dpZCAiQHEgQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkVsIEBpIGRlbCBAcSBubyBzJ3V0aWxpdHphLCBwZXLDsiBjb250w6kgZGFkZXMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQ4Cittc2dpZCAiQHEgQGkgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gICIKK21zZ3N0ciAiRWwgQGkgZGVsIEBxIMOpcyB2aXNpYmxlIHBlciBhIGwndXN1YXJpLiAgIgorCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGxvb2tzIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUzCittc2dpZCAiVGhlIGJhZCBAYiBAaSBsb29rcyBAbi4gICIKK21zZ3N0ciAiRWwgQGkgZGVsIEBiIGRvbGVudCBzZW1ibGEgQG4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTgKK21zZ2lkICIiCisiQGkgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEludGVyaW9yIGV4dGVudCBub2RlIGxldmVsICVOIG9mIGlub2RlICVpOlxuCisjLiBALWV4cGFuZGVkOiBMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NjUKK21zZ2lkICIiCisiSW50ZXJpb3IgQHggbm9kZSBsZXZlbCAlTiBvZiBAaSAlaTpcbiIKKyJMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzEKK21zZ2lkICIiCisiQGkgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgYmxvY2sgJWIgc2hvdWxkIGJlIGF0IGJsb2NrICVjLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3NworbXNnaWQgIkBkIEBpICVpIEBiICViIHNob3VsZCBiZSBhdCBAYiAlYy4gICIKK21zZ3N0ciAiRWwgQGkgZGUgQGQgJWkgQGIgJWIgaGEgZGUgc2VyIGFsIEBiICVjLiAgIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGV4dGVudCBtYXJrZWQgdW5pbml0aWFsaXplZCBhdCBibG9jayAlYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGQgQGkgJWkgaGFzIEB4IG1hcmtlZCB1bmluaXRpYWxpemVkIGF0IEBiICVjLiAgIgorbXNnc3RyICJFbCBAaSBkZSBAZCAlaSB0w6kgdW4gQHggbWFyY2FyIGNvbSBhIG5vIGluaWNpYWxpdHphdCBhIEBiICVjLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBsb2dpY2FsIGJsb2NrICViIChwaHlzaWNhbCBibG9jayAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuCisjLiBALWV4cGFuZGVkOiBXaWxsIGZpeCBpbiBwYXNzIDFCLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4NworbXNnaWQgIiIKKyJAaSAlaSBsb2dpY2FsIEBiICViIChwaHlzaWNhbCBAYiAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuIgorIldpbGwgZml4IGluIHBhc3MgMUIuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBibG9ja3MgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIGlub2RlLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTk0Cittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBAYnMgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIEBpLi4uXG4iCisiUGFzcyAxQjogUmVzY2FubmluZyBmb3IgQG0gQGJzXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAlaToKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAbSBAYihzKSBpbiBAaSAlaToiCittc2dzdHIgIkBiKHMpIHJlY2xhbWF0KHMpIG3Dumx0aXBsZW1lbnQgZGVsIEBpICVpOiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVzY2FuZWphciBlbHMgbm9kZXMtaSAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoaW5vZGVfZHVwX21hcCk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAaSBAQiAoQGlfZHVwX21hcCk6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBpdGVyYXIgcGVscyBAYnMgYWwgQGkgJWkgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDMwIGUyZnNjay9wcm9ibGVtLmM6MTM0NQorbXNnaWQgIkVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgQGEgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiIgorIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gYWp1c3RhciBlbCBub21icmUgZGUgcmVmZXLDqG5jaWVzIGRlbCBAYiBkJ0BhICViIChAaSAiCisiJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDM1Cittc2dpZCAiUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIEBpcyB3aXRoIEBtIEBic1xuIgorbXNnc3RyICIiCisiUGFzIDFDOiBlc2NhbmVpZyBkZWxzIGRpcmVjdG9yaXMgZGVscyBub2Rlcy1pIGFtYiBAYnMgcmVjbGFtYXRzICIKKyJtw7psdGlwbGVtZW50XG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0MQorbXNnaWQgIlBhc3MgMUQ6IFJlY29uY2lsaW5nIEBtIEBic1xuIgorbXNnc3RyICJQYXMgMUQ6IGNvbmNpbGlhY2nDsyBkZWxzIEBicyByZWNsYW1hdHMgbcO6bHRpcGxlbWVudFxuIgorCisjLiBALWV4cGFuZGVkOiBGaWxlICVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSkgXG4KKyMuIEAtZXhwYW5kZWQ6ICAgaGFzICVyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0NgorbXNnaWQgIiIKKyJGaWxlICVRIChAaSAjJWksIG1vZCB0aW1lICVJTSkgXG4iCisiICBoYXMgJXIgQG0gQGIocyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4iCittc2dzdHIgIiIKKyJFbCBmaXR4ZXIgJVEgKEBpICMlaSwgaG9yYSBkZSBtb2QgJUlNKSBcbiIKKyIgIHTDqSAlciBAbSBAYihzKSBAbSwgY29tcGFydGl0cyBhbWIgJU4gZml0eGVyKHMpOlxuIgorCisjLiBALWV4cGFuZGVkOiBcdCVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDUyCittc2dpZCAiXHQlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pXG4iCittc2dzdHIgIlx0JVEgKEBpICMlaSwgaG9yYSBkZSBtb2RpZmljYWNpw7MgJUlNKVxuIgorCisjLiBALWV4cGFuZGVkOiBcdDxmaWxlc3lzdGVtIG1ldGFkYXRhPlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTcKK21zZ2lkICJcdDxAZiBtZXRhZGF0YT5cbiIKK21zZ3N0ciAiXHQ8bWV0YWRhZGVzIGRlbCBAZj5cbiIKKworIy4gQC1leHBhbmRlZDogKFRoZXJlIGFyZSAlTiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjIKK21zZ2lkICIiCisiKFRoZXJlIGFyZSAlTiBAaXMgY29udGFpbmluZyBAbSBAYnMuKVxuIgorIlxuIgorbXNnc3RyICIoSGkgaGEgJU4gbm9kZXMtaSBxdWUgY29udGVuZW4gQGJzIG3Dumx0aXBsZW1lbnQgcmVjbGFtYXRzLilcbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA2NworbXNnaWQgIiIKKyJAbSBAYnMgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkBicyByZWNsYW1hdHMgbcO6bHRpcGxlbWVudCBqYSByZWFzc2lnbmF0cyBvIGNsb25hdHMuXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjbG9uZSBmaWxlOiAlbVxuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNsb25hciBlbCBmaXR4ZXI6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwODYKK21zZ2lkICJQYXNzIDI6IENoZWNraW5nIEBkIHN0cnVjdHVyZVxuIgorbXNnc3RyICJQYXMgMjogY29tcHJvdmFjacOzIGRlIGwnZXN0cnVjdHVyYSBkZWwgQGRcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBpbm9kZSBudW1iZXIgZm9yICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJAbiBAaSBudW1iZXIgZm9yICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbnZhbGlkIGlub2RlICM6ICVEaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDk2Cittc2dpZCAiQEUgaGFzIEBuIEBpICM6ICVEaS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSAlRGkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwMQorbXNnaWQgIkBFIGhhcyBARC91bnVzZWQgQGkgJURpLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvICcuJyAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDYKK21zZ2lkICJARSBATCB0byAnLicgICIKK21zZ3N0ciAiTCdARSBATCBhIMKrLsK7IgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHBvaW50cyB0byBpbm9kZSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTEKK21zZ2lkICJARSBwb2ludHMgdG8gQGkgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBAYi5cbiIKK21zZ3N0ciAiTCdARSBhcHVudGEgYWwgQGkgKCVEaSkgdWJpY2F0IGVuIHVuIEBiIG1hbG3DqHMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIGRpcmVjdG9yeSAlUCAoJURpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE2Cittc2dpZCAiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iCittc2dzdHIgIkwnQEUgQEwgYWwgQGQgJVAgKCVEaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIHRoZSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjEKK21zZ2lkICJARSBATCB0byB0aGUgQHIuXG4iCittc2dzdHIgIkwnQEUgQEwgYWwgQHIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI2Cittc2dpZCAiQEUgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbiIKK21zZ3N0ciAiRWwgbm9tIGRlIGwnQEUgY29udMOpIGNhcsOgY3RlcnMgbm8gdsOgbGlkcy5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIk1hbmNhIGVsIMKrLsK7IGVuIGVsIEBpIGRlIEBkICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLi4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJNYW5jYSBlbCDCqy4uwrsgZW4gZWwgQGkgZGUgQGQgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpcnN0IGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApIHNob3VsZCBiZSAnLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQxCittc2dpZCAiRmlyc3QgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgKCVwKSBAcyAnLidcbiIKK21zZ3N0ciAiTGEgcHJpbWVyYSBAZSDCqyVEbsK7IChAaT0lRGkpIGVuIGVsIEBpIGRlIEBkICVpICglcCkgQHMgwqsuwrtcbiIKKworIy4gQC1leHBhbmRlZDogU2Vjb25kIGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSBzaG91bGQgYmUgJy4uJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDYKK21zZ2lkICJTZWNvbmQgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgQHMgJy4uJ1xuIgorbXNnc3RyICJMYSBzZWdvbmEgQGUgwqslRG7CuyAoQGk9JURpKSBlbiBlbCBAaSBkZSBAZCAlaSAoJXApIEBzIMKrLi7Cu1xuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZhZGRyIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJRiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1MQorbXNnaWQgImlfZmFkZHIgQEYgJUlGLCBAcyB6ZXJvLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlmLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTU2Cittc2dpZCAiaV9maWxlX2FjbCBARiAlSWYsIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaV9kaXJfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZCwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2MQorbXNnaWQgImlfZGlyX2FjbCBARiAlSWQsIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaV9mcmFnIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTY2Cittc2dpZCAiaV9mcmFnIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnNpemUgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzEKK21zZ2lkICJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZSAoJUltKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTc2Cittc2dpZCAiQGkgJWkgKCVRKSBoYXMgQG4gbW9kZSAoJUltKS5cbiIKK21zZ3N0ciAiRWwgQGkgJWkgKCVRKSB0w6kgdW4gbW9kZSBAbiAoJUltKS5cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBkaXJlY3RvcnkgY29ycnVwdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4MQorbXNnaWQgIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBAZCBjb3JydXB0ZWRcbiIKK21zZ3N0ciAiRWwgQGkgZGUgQGQgJWksICVCLCBkZXNwbGHDp2FtZW50ICVOOiBlbCBAZCBjb3Jyb21wdXRcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODYKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAiRWwgQGkgZGUgQGQgJWksICVCLCBkZXNwbGHDp2FtZW50ICVOOiBlbCBub20gZGUgZml0eGVyIMOpcyBtYXNzYSBsbGFyZ1xuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTEKK21zZ2lkICJAZCBAaSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAiCittc2dzdHIgIkVsIEBpIGRlIEBkICVpIHTDqSB1biAlQiBubyBhc3NpZ25hdC4gICIKKworIy4gQC1leHBhbmRlZDogJy4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiTCdAZSBkZSBAZCDCqy7CuyBlbiBlbCBAaSBkZSBAZCAlaSBubyBhY2FiYSBlbiBOVUxcbiIKKworIy4gQC1leHBhbmRlZDogJy4uJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIicuLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICJMJ0BlIGRlIEBkIMKrLi7CuyBlbiBlbCBAaSBkZSBAZCAlaSBubyBhY2FiYSBlbiBOVUxcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGNoYXJhY3RlciBkZXZpY2UuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwNgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgY2hhcmFjdGVyIEB2LlxuIgorbXNnc3RyICJFbCBAaSAlaSAoJVEpIMOpcyB1biBAdiBkZSBjYXLDoGN0ZXJzIEBJLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgYmxvY2sgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTEKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIEBiIEB2LlxuIgorbXNnc3RyICJFbCBAaSAlaSAoJVEpIMOpcyB1biBAdiBkZSBibG9jcyBASS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTYKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4nIEBlLlxuIgorbXNnc3RyICJMJ0BFIMOpcyB1biBkdXBsaWNhdCBkZSBsJ0BlIMKrLsK7XG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgZHVwbGljYXRlICcuLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyMQorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLi4nIEBlLlxuIgorbXNnc3RyICJMJ0BFIMOpcyB1biBkdXBsaWNhdCBkZSBsJ0BlIMKrLi7Cu1xuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjYgZTJmc2NrL3Byb2JsZW0uYzoxNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVybmFsIGVycm9yOiBjb3VsZG4ndCBmaW5kIGRpcl9pbmZvIGZvciAlaS5cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBpbnRlcm46IG5vIHMnaGEgdHJvYmF0IGRpcl9pbmZvIHBlciBhICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyByZWNfbGVuIG9mICVEciwgc2hvdWxkIGJlICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzEKK21zZ2lkICJARSBoYXMgcmVjX2xlbiBvZiAlRHIsIEBzICVOLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IHN0cnVjdHVyZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4iCittc2dzdHIgIkBBIGRlIGwnZXN0cnVjdHVyYSBpY291bnQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGl0ZXJhdGluZyBvdmVyIGRpcmVjdG9yeSBibG9ja3M6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpdGVyYXRpbmcgb3ZlciBAZCBAYnM6ICVtXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgZW4gaXRlcmFyIHBlbHMgQGJzIGRlIEBkOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDYKK21zZ2lkICJFcnJvciByZWFkaW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbGxlZ2lyIGVsIEBiIGRlIEBkICViIChAaSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1MQorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBlc2NyaXVyZSBlbCBAYiBkZSBAZCAlYiAoQGkgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2sgZm9yIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBuZXcgQGQgQGIgZm9yIEBpICVpICglcyk6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGVhbGxvY2F0aW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVhbGxvY2F0aW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGRlc2Fzc2lnbmFyIGVsIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBlIGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4iCittc2dzdHIgIkwnQGUgZGUgQGQgcGVyIGEgwqsuwrsgYSAlcCAoJWkpIMOpcyBncmFuLiBcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIEZJRk8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3MQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiRWwgQGkgJWkgKCVRKSDDqXMgdW5hIEZJRk8gbm8gdsOgbGlkYS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIHNvY2tldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc2Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBzb2NrZXQuXG4iCittc2dzdHIgIkVsIEBpICVpICglUSkgw6lzIHVuIHPDsmNvbCBASS5cbiIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmaWxldHlwZSBmb3IgZW50cnkgJyVEbicgaW4gJXAgKCVpKSB0byAlTi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjgxCittc2dpZCAiU2V0dGluZyBmaWxldHlwZSBmb3IgQEUgdG8gJU4uXG4iCittc2dzdHIgIlMnZXN0w6AgZXN0YWJsaW50IGVsIHRpcHVzIGRlIGZpdHhlciBwZXIgYSBsJ0BFIGEgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgc2hvdWxkIGJlICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjg2Cittc2dpZCAiQEUgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgQHMgJU4pLlxuIgorbXNnc3RyICJFbCB0aXB1cyBkZSBmaXR4ZXIgZGUgbCdARSDDqXMgaW5jb3JyZWN0ZSAow6lzICVEdCwgQHMgJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5MQorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIkVsIHRpcHVzIGRlIGZpdHhlciBkZSBsQEUgZXN0w6AgZGVmaW5pdC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSB6ZXJvLWxlbmd0aCBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTYKK21zZ2lkICJARSBoYXMgYSBAeiBuYW1lLlxuIgorbXNnc3RyICJFbCBub20gZGUgbCdARSDDqXMgZGUgQHouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFN5bWxpbmsgJVEgKGlub2RlICMlaSkgaXMgaW52YWxpZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzAxCittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiTCdlbmxsYcOnIHNpbWLDsmxpYyAlUSAoQGkgIyVpKSDDqXMgQG4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDYKK21zZ2lkICJAYSBAYiBARiBAbiAoJUlmKS5cbiIKK21zZ3N0ciAiRWwgQGIgZCdAYSBARiBAbiAoJUlmKS5cbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTEKK21zZ2lkICJAZiBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBAUy5cbiIKK21zZ3N0ciAiIgorIkVsIEBmIGNvbnTDqSBmaXR4ZXJzIGdyYW5zLCBwZXLDsiBsaSBtYW5jYSBlbCBzZW55YWxhZG9yIExBUkdFX0ZJTEUgYWwgQFMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTYKK21zZ2lkICJAcCBAaCAlZDogJUIgbm90IHJlZmVyZW5jZWRcbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBAcCBhbCBAaCAlZDogJUIgbm8gZXN0w6AgcmVmZXJlbmNpYXRcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzIxCittc2dpZCAiQHAgQGggJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBAcCBhbCBAaCAlZDogJUIgZXN0w6AgcmVmZXJlbmNpYXQgZHVlcyB2ZWdhZGVzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMyNgorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gQHAgZW4gZWwgQGggJWQ6ICVCIHTDqSB1biBtaW4gaGFzaCBkb2xlbnRcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMxCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMzYKK21zZ2lkICJAbiBAaCAlZCAoJXEpLiAgIgorbXNnc3RyICJlbCBAaCAlZCAoJXEpIMOpcyBAbi4gICIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKTogYmFkIGJsb2NrIG51bWJlciAlYi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQwCittc2dpZCAiQHAgQGggJWQgKCVxKTogYmFkIEBiIG51bWJlciAlYi5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogcm9vdCBub2RlIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBwIEBoICVkOiByb290IG5vZGUgaXMgQG5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgbGltaXQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTUKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGxpbWl0ICglTilcbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBAcCBhbCBAaCAlZDogJUIgdMOpIHVuIGzDrW1pdCAoJU4pIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBjb3VudCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gY291bnQgKCVOKVxuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIEBwIGFsIEBoICVkOiAlQiB0w6kgdW4gY29tcHRhZG9yICglTikgQG5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjUKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gQHAgYWwgQGggJWQ6ICVCIHTDqSB1bmEgdGF1bGEgZGUgaGFzaCBkZXNvcmRlbmFkYVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgZGVwdGggKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzAKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGRlcHRoICglTilcbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBAcCBhbCBAaCAlZDogJUIgdMOpIHVuYSBwcm9mdW5kaXRhdCAoJU4pIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzUKK21zZ2lkICJEdXBsaWNhdGUgQEUgZm91bmQuICAiCittc2dzdHIgIlMnaGEgdHJvYmF0IHVuYSBARSBkdXBsaWNhZGEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbgorIy4gQC1leHBhbmRlZDogUmVuYW1lIHRvICVzCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODAKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiIgorIkBFIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4iCisiUmVuYW1lIHRvICVzIgorbXNnc3RyICIiCisiTCdARSB0w6kgdW4gbm9tIGRlIGZpdHhlciBxdWUgbm8gw6lzIMO6bmljLlxuIgorIkxpIGhhdXLDrWV1IGRlIGNhbnZpYXIgZWwgbm9tIGEgJXMiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBmb3VuZC5cbgorIy4gQC1leHBhbmRlZDogXHRNYXJraW5nICVwICglaSkgdG8gYmUgcmVidWlsdC5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4NQorbXNnaWQgIiIKKyJEdXBsaWNhdGUgQGUgJyVEbicgZm91bmQuXG4iCisiXHRNYXJraW5nICVwICglaSkgdG8gYmUgcmVidWlsdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlMnaGEgdHJvYmF0IHVuYSBAZSDCqyVEbsK7LlxuIgorIlx0RXMgbWFyY2Fyw6AgJXAgKCVpKSBwZXIgYSDDqXNzZXIgcmVjb25zdHJ1w690LlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Jsb2Nrc19oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5MAorbXNnaWQgImlfYmxvY2tzX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFVuZXhwZWN0ZWQgYmxvY2sgaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5NQorbXNnaWQgIlVuZXhwZWN0ZWQgQGIgaW4gQGggJWQgKCVxKS5cbiIKK21zZ3N0ciAiTm8gcydlc3BlcmF2YSBlbCBAYiBhbCBAaCAlZCAoJXEpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGluIGdyb3VwICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTkKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBpbiBAZyAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGZvdW5kIGluIGdyb3VwICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDQKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBmb3VuZCBpbiBAZyAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDA5Cittc2dpZCAiaV9maWxlX2FjbF9oaSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDE2Cittc2dpZCAiUGFzcyAzOiBDaGVja2luZyBAZCBjb25uZWN0aXZpdHlcbiIKK21zZ3N0ciAiUGFzIDM6IGNvbXByb3ZhY2nDsyBkZSBsYSBjb25uZWN0aXZpdGF0IGRlbHMgQGRzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgbm90IGFsbG9jYXRlZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDIxCittc2dpZCAiQHIgbm90IGFsbG9jYXRlZC4gICIKK21zZ3N0ciAiRWwgQHIgbm8gZXN0w6AgYXNzaWduYXQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IE5vIHJvb20gaW4gbG9zdCtmb3VuZCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyNgorbXNnaWQgIk5vIHJvb20gaW4gQGwgQGQuICAiCittc2dzdHIgIk5vIGhpIGhhIHByb3UgZXNwYWkgZW4gZWwgQGQgQGwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIkBpIGRlIEBkICVpIGRlc2Nvbm5lY3RhdCAoJXApXG4iCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIG5vdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDM2Cittc2dpZCAiL0BsIG5vdCBmb3VuZC4gICIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgL0BsLiAgIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgc2hvdWxkIGJlICVxICglZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ0MQorbXNnaWQgIicuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBAcyAlcSAoJWQpLlxuIgorbXNnc3RyICLCqy4uwrsgYSAlUSAoJWkpIMOpcyAlUCAoJWopLCBAcyAlcSAoJWQpLlxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgb3Igbm9uLWV4aXN0ZW50IC9sb3N0K2ZvdW5kLiAgQ2Fubm90IHJlY29ubmVjdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQ2Cittc2dpZCAiQmFkIG9yIG5vbi1leGlzdGVudCAvQGwuICBDYW5ub3QgcmVjb25uZWN0LlxuIgorbXNnc3RyICJFbCBkaXJlY3RvcmkgL0BsIG5vIGV4aXN0ZWl4IG8gZXN0w6AgbWFsbcOocy4gIE5vIGVzIHBvdCByZWNvbm5lY3Rhci5cbiIKKworIy4gQC1leHBhbmRlZDogQ291bGQgbm90IGV4cGFuZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBleHBhbmQgL0BsOiAlbVxuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGV4cGFuZGlyIGVsIGRpcmVjdG9yaSAvQGw6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVjb25uZWN0ICVpOiAlbVxuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHJlY29ubmVjdGFyICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjZXJjYXIgZWwgZGlyZWN0b3JpIC9AbDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19ibG9jazogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfQGI6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgImV4dDJmc19uZXdfYmxvY2s6ICVtIGVuIGludGVudGFyIGNyZWFyIGVsIEBkIC9AbFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2lub2RlOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AaTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19pbm9kZTogJW0gZW4gaW50ZW50YXIgY3JlYXIgZWwgQGQgL0BsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X2Rpcl9AYjogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IEBkIEBiXG4iCittc2dzdHIgImV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSBlbiBjcmVhciBlbCBAYiBkZSBAZCBub3VcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazogJW0gd2hpbGUgd3JpdGluZyB0aGUgZGlyZWN0b3J5IGJsb2NrIGZvciAvbG9zdCtmb3VuZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gd2hpbGUgd3JpdGluZyB0aGUgQGQgQGIgZm9yIC9AbFxuIgorbXNnc3RyICJleHQyZnNfbmV3X2Rpcl9ibG9jazogJW0gZW4gY3JlYXIgZWwgQGIgZGUgQGQgbm91IHBlciBhIC9AbFxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBhZGp1c3RpbmcgaW5vZGUgY291bnQgb24gaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGFkanVzdGluZyBAaSBjb3VudCBvbiBAaSAlaVxuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGFqdXN0YXIgZWwgbm9tYnJlIGRlIG5vZGVzLWkgYWwgQGkgJWlcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgcmVwYXJhciBlbCBwYXJlIGRlbCBAaSAlaTogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgZGlyZWN0b3J5IGVudHJ5XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IEBkIEBlXG4iCisiXG4iCittc2dzdHIgIiIKKyJObyBzJ2hhIHBvZ3V0IHJlcGFyYXIgZWwgcGFyZSBkZWwgQGkgJWk6IG5vIHMnaGEgdHJvYmF0IGwnQGUgZGUgQGQgcGFyZVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNyZWFyIGVsIEBkIGFycmVsICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgL0BsIEBkICglcyk6ICVtXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gY3JlYXIgZWwgQGQgL0BsICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5OyBhYm9ydGluZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTE2Cittc2dpZCAiQHIgaXMgbm90IGEgQGQ7IGFib3J0aW5nLlxuIgorbXNnc3RyICJlbCBAciBubyDDqXMgdW4gQGQ7IHMnaW50ZXJyb21wcsOgLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIxCittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICJObyBlcyBwb3QgY29udGludWFyIHNlbnNlIHVuIEByLlxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBpcyBub3QgYSBkaXJlY3RvcnkgKGlubz0laSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIi9AbCBpcyBub3QgYSBAZCAoaW5vPSVpKVxuIgorbXNnc3RyICIvQGwgbm8gw6lzIHVuIEBkIChub2RlLWk9JWkpXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUzOAorbXNnaWQgIlBhc3MgM0E6IE9wdGltaXppbmcgZGlyZWN0b3JpZXNcbiIKK21zZ3N0ciAiUGFzIDNBOiBvcHRpbWl0emFjacOzIGRlbHMgZGlyZWN0b3Jpc1xuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkaXJzX3RvX2hhc2ggaXRlcmF0b3I6ICVtXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgY3JlYXIgbCdpdGVyYWRvciBkaXJzX3RvX2hhc2g6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0OAorbXNnaWQgIkZhaWxlZCB0byBvcHRpbWl6ZSBkaXJlY3RvcnkgJXEgKCVkKTogJW1cbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvcHRpbWl0emFyIGVsIGRpcmVjdG9yaSAlcSAoJWQpOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NTMKK21zZ2lkICJPcHRpbWl6aW5nIGRpcmVjdG9yaWVzOiAiCittc2dzdHIgIlMnZXN0YW4gb3B0aW1pdHphbnQgZWxzIGRpcmVjdG9yaXM6ICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcwCittc2dpZCAiUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzXG4iCittc2dzdHIgIlBhcyA0OiBjb21wcm92YWNpw7MgZGVscyBub21icmVzIGRlIHJlZmVyw6huY2llc1xuIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIHplcm8tbGVuZ3RoIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQHogQGkgJWkuICAiCittc2dzdHIgIkBpIGRlIEB6ICVpIEB1LiAgIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIGlub2RlICVpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAaSAlaVxuIgorbXNnc3RyICJAaSAlaSBAdVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSByZWYgY291bnQgaXMgJUlsLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4NQorbXNnaWQgIkBpICVpIHJlZiBjb3VudCBpcyAlSWwsIEBzICVOLiAgIgorbXNnc3RyICJlbCBub21icmUgZGUgcmVmZXLDqG5jaWVzIGRlbCBAaSAlcyDDqXMgJUlsLCBAcyAlTi4iCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4OQorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiQVbDjVM6IFMnSEEgUFJPRFXDj1QgVU4gRVJST1IgREUgUFJPR1JBTUFDScOTIEVOIEVMIEUyRlNDSyFcbiIKKyJcdE8gQsOJIEFMR1VOIENBUCBERSBQQVJEQUwgKE8gU0lHVUksIFRVKSBFU1TDgCBDT01QUk9WQU5UIFVOIFNJU1RFTUFcbiIKKyJcdERFIEZJVFhFUlMgTVVOVEFUIChFTiBWSVUpLlxuIgorImlub2RlX2xpbmtfaW5mb1slaV0gw6lzICVOLCBpbm9kZS5pX2xpbmtzX2NvdW50IMOpcyAlSWwuICBIYXVyaWVuIGRlICIKKyJjb2luY2lkaXIhXG4iCisKKyMgRklYTUUKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvblxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1OTkKK21zZ2lkICJQYXNzIDU6IENoZWNraW5nIEBnIHN1bW1hcnkgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiUGFzIDU6IGNvbXByb3ZhY2nDsyBkZWwgcmVzdW0gZGUgbGEgaW5mb3JtYWNpw7MgZGVsIEBnXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGlub2RlIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwNAorbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBpIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDkKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYxNAorbXNnaWQgIkBiIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYzNAorbXNnaWQgIkBpIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTQKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIiIKKyJFbCBub21icmUgZGUgbm9kZXMtaSBsbGl1cmVzIG5vIMOpcyBjb3JyZWN0ZSBwZXIgYWwgQGcgbsO6bS4gJWcgKCVpLCByZWNvbXB0ZT0iCisiJWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1OQorbXNnaWQgIkRpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiIgorIkVsIG5vbWJyZSBkZSBkaXJlY3RvcmlzIG5vIMOpcyBjb3JyZWN0ZSBwZXIgYWwgQGcgbsO6bS4gJWcgKCVpLCByZWNvbXB0ZT0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgaW5vZGVzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2NAorbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIkVsIG5vbWJyZSBkZSBub2Rlcy1pIGxsaXVyZXMgbm8gw6lzIGNvcnJlY3RlICglaSwgcmVjb21wdGU9JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2OQorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiIgorIkVsIG5vbWJyZSBkZSBAYnMgbGxpdXJlcyBubyDDqXMgY29ycmVjdGUgcGVyIGFsIEBnIG7Dum0uICVnICglaSwgcmVjb21wdGU9IgorIiVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjc0Cittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiRWwgbm9tYnJlIGRlIEBicyBsbGl1cmVzIG5vIMOpcyBjb3JyZWN0ZSAoJWksIHJlY29tcHRlPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogUFJPR1JBTU1JTkcgRVJST1I6IGZpbGVzeXN0ZW0gKCMlTikgYml0bWFwIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIGJpdG1hcCAKKyMuIEAtZXhwYW5kZWQ6IGVuZHBvaW50cyAoJWksICVqKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NzkKK21zZ2lkICIiCisiUFJPR1JBTU1JTkcgRVJST1I6IEBmICgjJU4pIEBCIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIEBCICIKKyJlbmRwb2ludHMgKCVpLCAlailcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2ODUKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogZnVkZ2luZyBlbmQgb2YgYml0bWFwICglTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGlub2RlIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGkgQEI6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBiIEBCOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGJsb2NrKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGIocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgaW5vZGUocykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAaShzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBSZWNyZWF0ZSBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MzIKK21zZ2lkICJSZWNyZWF0ZSBAaiIKK21zZ3N0ciAiVG9ybmEgYSBjcmVhciBlbCBAaiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzM3Cittc2dpZCAiVXBkYXRlIHF1b3RhIGluZm8gZm9yIHF1b3RhIHR5cGUgJU4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc2V0dGluZyBibG9jayBncm91cCBjaGVja3N1bSBpbmZvOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBAYiBAZyBjaGVja3N1bSBpbmZvOiAlbVxuIgorbXNnc3RyICIiCisiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBlc3RhYmxpciBsYSBpbmZvcm1hY2nDsyBkZSBzdW1hIGRlIHZlcmlmaWNhY2nDsyBkZWwgIgorIkBnIGRlIEBiOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBmaWxlIHN5c3RlbSBpbmZvOiAlbVxuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIHF1YW50IHMnZXNjcml2aWEgbGEgaW5mb3JtYWNpw7MgZGVsIHNpc3RlbWE6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBmbHVzaGluZyB3cml0ZXMgdG8gc3RvcmFnZSBkZXZpY2U6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaGFuZGxlZCBlcnJvciBjb2RlICgweCV4KSFcbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBhbWIgdW4gY29kaSBubyBnZXN0aW9uYXQgKDB4JXgpXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk5NiBlMmZzY2svcHJvYmxlbS5jOjIwMDAKK21zZ2lkICJJR05PUkVEIgorbXNnc3RyICJJR05PUkFUIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWQsIGVsYXBzZWQgdGltZTogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKK21zZ3N0ciAiTWVtw7JyaWEgdXRpbGl0emFkYTogJWQsIHRlbXBzIHRyYW5zY29ycmVndXQ6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNpemUgb2YgaW5vZGU9JWRcbiIKK21zZ3N0ciAibWlkYSBkZWwgbm9kZS1pPSVkXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjExOQorbXNnaWQgIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iCittc2dzdHIgImVuIGluaWNpYXIgbCdleHBsb3JhY2nDsyBkZWxzIG5vZGVzLWkiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjEzMAorbXNnaWQgIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iCittc2dzdHIgImVuIGZlciBsJ2V4cGxvcmFjacOzIGRlbHMgbm9kZXMtaSIKKworIzogZTJmc2NrL3N1cGVyLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZm9yIGlub2RlICVkIgorbXNnc3RyICJlbiBmZXIgbGEgY3JpZGEgYSBleHQyZnNfYmxvY2tfaXRlcmF0ZSBwZXIgYWwgbm9kZS1pICVkIgorCisjOiBlMmZzY2svc3VwZXIuYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MiBmb3IgaW5vZGUgJWQiCittc2dzdHIgImVuIGZlciBsYSBjcmlkYSBhIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyIHBlciBhbCBub2RlLWkgJWQiCisKKyM6IGUyZnNjay9zdXBlci5jOjI3NAorbXNnaWQgIlRydW5jYXRpbmciCittc2dzdHIgIlRydW5jYW1lbnQiCisKKyM6IGUyZnNjay9zdXBlci5jOjI3NQorbXNnaWQgIkNsZWFyaW5nIgorbXNnc3RyICJOZXRlamEiCisKKyM6IGUyZnNjay91bml4LmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisiRm9ybWEgZCfDunM6ICVzIFstcGFueXJjZGZ2dERGVl0gWy1iIHN1cGVyYmxvY10gWy1CIG1pZGFkZWJsb2NdXG4iCisiXHRcdFstSSBibG9jc19kZV9tZW1faW50ZXJtX2RlbF9ub2RlLWldIFstUCBwcm9jZXNzX2lub2RlX3NpemVdXG4iCisiXHRcdFstbHwtTCBmaXR4ZXJfZGVfYmxvY3NfZXJyb25pc10gWy1DIGZkXSBbLWogcmVnX2RlX3RyYW5zX2V4dGVybl1cbiIKKyJcdFx0Wy1FIG9wY2lvbnNfYW1wbGlhZGVzXSBkaXNwb3NpdGl1XG4iCisKKyM6IGUyZnNjay91bml4LmM6ODAKK21zZ2lkICIiCisiXG4iCisiRW1lcmdlbmN5IGhlbHA6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyByZXBhaXIgKG5vIHF1ZXN0aW9ucylcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTWFrZSBubyBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIEFzc3VtZSBcInllc1wiIHRvIGFsbCBxdWVzdGlvbnNcbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIGJhZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYWRibG9jayAiCisibGlzdFxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3JjZSBjaGVja2luZyBldmVuIGlmIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGNsZWFuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBanVkYSBkJ2VtZXJnw6huY2lhOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBSZXBhcmFjacOzIGF1dG9tw6B0aWNhIChzZW5zZSBwcmVndW50ZXMpXG4iCisiIC1uICAgICAgICAgICAgICAgICAgIE5vIGZhY2lzIGNhcCBjYW52aSBhbCBzaXN0ZW1hIGRlIGZpdHhlcnNcbiIKKyIgLXkgICAgICAgICAgICAgICAgICAgQXNzdW1laXggwqtzw63CuyBwZXIgYSB0b3RlcyBsZXMgcHJlZ3VudGVzXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIENvbXByb3ZhIHNpIGhpIGhhIGJsb2NzIGVycm9uaXMgaSBhZmVnZWl4LWxvcyBhIGxhICIKKyJsbGlzdGEgZGUgYmxvY3MgZXJyb25pc1xuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3LDp2EgbGEgY29tcHJvdmFjacOzIGVuY2FyYSBxdWUgZWwgc2lzdGVtYSBkZSBmaXR4ZXJzICIKKyJzJ2hhZ2kgbWFyY2F0IGNvbSBhIG5ldFxuIgorCisjOiBlMmZzY2svdW5peC5jOjg2Cittc2dpZCAiIgorIiAtdiAgICAgICAgICAgICAgICAgICBCZSB2ZXJib3NlXG4iCisiIC1iIHN1cGVyYmxvY2sgICAgICAgIFVzZSBhbHRlcm5hdGl2ZSBzdXBlcmJsb2NrXG4iCisiIC1CIGJsb2Nrc2l6ZSAgICAgICAgIEZvcmNlIGJsb2Nrc2l6ZSB3aGVuIGxvb2tpbmcgZm9yIHN1cGVyYmxvY2tcbiIKKyIgLWogZXh0ZXJuYWxfam91cm5hbCAgU2V0IGxvY2F0aW9uIG9mIHRoZSBleHRlcm5hbCBqb3VybmFsXG4iCisiIC1sIGJhZF9ibG9ja3NfZmlsZSAgIEFkZCB0byBiYWRibG9ja3MgbGlzdFxuIgorIiAtTCBiYWRfYmxvY2tzX2ZpbGUgICBTZXQgYmFkYmxvY2tzIGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXUvJXUgZmlsZXMgKCUwZC4lZCUlIG5vbi1jb250aWd1b3VzKSwgJWxsdS8lbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIlczogJXUvJXUgZml0eGVycyAoJTBkLiVkJSUgbm8gY29udGlndXMpLCAlbGx1LyVsbHUgYmxvY3NcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSBpbm9kZXMgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBmaWxlICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBmaWxlcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yeSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3JpZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIyBpbmQ6IGluZGlyZWN0LCBkaW5kOiBkb3VibGUgaW5kaXJlY3QsIHRpbmQ6IHRyaXBsZSBpbmRpcmVjdCAoZHBtKQorIzogZTJmc2NrL3VuaXguYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICAgICAgICMgb2YgaW5vZGVzIHdpdGggaW5kL2RpbmQvdGluZCBibG9ja3M6ICV1LyV1LyV1XG4iCittc2dzdHIgIiAgICAgbm9tYnJlIGRlIG5vZGVzLWkgYW1iIGJsb2NzIGluZC9kaW5kL3RpbmQ6ICV1LyV1LyV1XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc5Cittc2dpZCAiICAgICAgICAgICAgIEV4dGVudCBkZXB0aCBoaXN0b2dyYW06ICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJsbHUgYmxvY2sgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dpZF9wbHVyYWwgIiUxMmxsdSBibG9ja3MgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJhZCBibG9ja1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJhZCBibG9ja3NcbiIKK21zZ3N0clswXSAiJTEydSBibG9jIGRvbGVudFxuIgorbXNnc3RyWzFdICIlMTJ1IGJsb2NzIGRvbGVudHNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsYXJnZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGFyZ2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBmaXR4ZXIgZ3JhblxuIgorbXNnc3RyWzFdICIlMTJ1IGZpdHhlcnMgZ3JhbnNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiUxMnUgZml0eGVyIG5vcm1hbFxuIgorbXNnc3RyWzFdICIiCisiXG4iCisiJTEydSBmaXR4ZXJzIG5vcm1hbHNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBkaXJlY3RvcnlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBkaXJlY3Rvcmllc1xuIgorbXNnc3RyWzBdICIlMTJ1IGRpcmVjdG9yaVxuIgorbXNnc3RyWzFdICIlMTJ1IGRpcmVjdG9yaXNcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgZml0eGVyIGRlIGRpc3Bvc2l0aXUgb3JpZW50YXQgYSBjYXLDoGN0ZXJzXG4iCittc2dzdHJbMV0gIiUxMnUgZml0eGVycyBkZSBkaXNwb3NpdGl1IG9yaWVudGF0IGEgY2Fyw6BjdGVyc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgZml0eGVyIGRlIGRpc3Bvc2l0aXUgb3JpZW50YXQgYSBibG9jc1xuIgorbXNnc3RyWzFdICIlMTJ1IGZpdHhlcnMgZGUgZGlzcG9zaXRpdSBvcmllbnRhdCBhIGJsb2NzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlmb1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpZm9zXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxpbmtcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsaW5rc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzeW1ib2xpYyBsaW5rIgorbXNnaWRfcGx1cmFsICIlMTJ1IHN5bWJvbGljIGxpbmtzIgorbXNnc3RyWzBdICIlMTJ1IGVubGxhw6cgc2ltYsOybGljIgorbXNnc3RyWzFdICIlMTJ1IGVubGxhw6dvcyBzaW1iw7JsaWNzIgorCisjOiBlMmZzY2svdW5peC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgKCV1IGZhc3Qgc3ltYm9saWMgbGluaylcbiIKK21zZ2lkX3BsdXJhbCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmtzKVxuIgorbXNnc3RyWzBdICIgKCV1IGVubGxhw6cgc2ltYsOybGljIHLDoHBpZClcbiIKK21zZ3N0clsxXSAiICgldSBlbmxsYcOnb3Mgc2ltYsOybGljcyByw6BwaWRzKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHNvY2tldFxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IHNvY2tldHNcbiIKK21zZ3N0clswXSAiJTEydSBzw7Jjb2xcbiIKK21zZ3N0clsxXSAiJTEydSBzw7Jjb2xzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpbGVzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjIzMiBtaXNjL2JhZGJsb2Nrcy5jOjk5MyBtaXNjL3R1bmUyZnMuYzoyMTIyIG1pc2MvdXRpbC5jOjMxNgorIzogcmVzaXplL21haW4uYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLiIKK21zZ3N0ciAiZW4gZGV0ZXJtaW5hciBzaSAlcyBlc3TDoCBtdW50YXQuIgorCisjOiBlMmZzY2svdW5peC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiQXbDrXMhICAlcyBlc3TDoCBtdW50YXQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyBpbiB1c2UuXG4iCittc2dzdHIgIkF2w61zISAgJXMgcydlc3TDoCBmZW50IHNlcnZpci5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiJXMgZXN0w6AgbXVudGF0LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBpbiB1c2UuXG4iCittc2dzdHIgIiVzIHMnZXN0w6AgZmVudCBzZXJ2aXIuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY2Cittc2dpZCAiIgorIkNhbm5vdCBjb250aW51ZSwgYWJvcnRpbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJObyBlcyBwb3QgY29udGludWFyLCBzJ2ludGVycm9tcHLDoC5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjgKK21zZ2lkICIiCisiXG4iCisiXG4iCisiV0FSTklORyEhISAgVGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4gICBJZiB5b3UgY29udGludWUgeW91ICoqKldJTEwqKipcbiIKKyJjYXVzZSAqKipTRVZFUkUqKiogZmlsZXN5c3RlbSBkYW1hZ2UuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJBVsONUyEhISAgRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGVzdMOgIG11bnRhdC4gIFNpIGNvbnRpbnVldSAqKkNBVVNBUkVVKioqXG4iCisiZGFueXMgKioqR1JFVVMqKiogYWwgc2lzdGVtYSBkZSBmaXR4ZXJzLlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI3MworbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byBjb250aW51ZSIKK21zZ3N0ciAiRXN0ZXUgc2VndXIgcXVlIHZvbGV1IGNvbnRpbnVhcj8iCisKKyM6IGUyZnNjay91bml4LmM6Mjc1Cittc2dpZCAiY2hlY2sgYWJvcnRlZC5cbiIKK21zZ3N0ciAicydoYSBpbnRlcnJvbXB1dCBsYSBjb21wcm92YWNpw7MuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MzY4Cittc2dpZCAiIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMiCittc2dzdHIgIiBjb250w6kgdW4gc2lzdGVtYSBkZSBmaXR4ZXJzIGFtYiBlcnJvcnMiCisKKyM6IGUyZnNjay91bml4LmM6MzcwCittc2dpZCAiIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQiCittc2dzdHIgIiBubyBlcyB2YSBkZXNtdW50YXIgY29ycmVjdGFtZW50IgorCisjOiBlMmZzY2svdW5peC5jOjM3MgorbXNnaWQgIiBwcmltYXJ5IHN1cGVyYmxvY2sgZmVhdHVyZXMgZGlmZmVyZW50IGZyb20gYmFja3VwIgorbXNnc3RyICIiCisiIGxlcyBjYXJhY3RlcsOtc3RpcXVlcyBkZWwgc3VwZXJibG9jIHByaW1hcmkgc8OzbiBkaWZlcmVudHMgZGUgbGVzIGRlbCBkZSBsYSAiCisiY8OycGlhIGRlIHNlZ3VyZXRhdCIKKworIzogZTJmc2NrL3VuaXguYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBiZWVuIG1vdW50ZWQgJXUgdGltZXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgcydoYSBtdW50YXQgJXUgdmVnYWRlcyBzZW5zZSBoYXZlciBlc3RhdCBjb21wcm92YXQiCisKKyM6IGUyZnNjay91bml4LmM6MzgzCittc2dpZCAiIGhhcyBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0aW1lIGluIHRoZSBmdXR1cmUiCittc2dzdHIgIiIKKyJ0w6kgbGEgZGFycmVyYSBob3JhIGRlIGNvbXByb3ZhY2nDsyBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIMOpcyBlbiBlbCBmdXR1ciIKKworIzogZTJmc2NrL3VuaXguYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBnb25lICV1IGRheXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgbm8gcydoYSBjb21wcm92YXQgZGVzIGRlIGZhICV1IGRpZXMiCisKKyM6IGUyZnNjay91bml4LmM6Mzk4Cittc2dpZCAiLCBjaGVjayBmb3JjZWQuXG4iCittc2dzdHIgIiwgZXMgZm9yw6dhcsOgIGxhIGNvbXByb3ZhY2nDsy5cbiIKKworIzogZTJmc2NrL3VuaXguYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuLCAldS8ldSBmaWxlcywgJWxsdS8lbGx1IGJsb2NrcyIKK21zZ3N0ciAiJXM6IG5ldCwgJXUvJXUgZml0eGVycywgJWxsdS8lbGx1IGJsb2NzIgorCisjOiBlMmZzY2svdW5peC5jOjQ1MQorbXNnaWQgIiAoY2hlY2sgZGVmZXJyZWQ7IG9uIGJhdHRlcnkpIgorbXNnc3RyICIgKHMnaGEgYWpvcm5hdCBsYSBjb21wcm92YWNpw7M7IHMnZXN0w6AgdXRpbGl0emFudCBsYSBiYXRlcmlhKSIKKworIzogZTJmc2NrL3VuaXguYzo0NTQKK21zZ2lkICIgKGNoZWNrIGFmdGVyIG5leHQgbW91bnQpIgorbXNnc3RyICIgKGVzIGNvbXByb3ZhcsOgIGRlc3Byw6lzIGRlbCBtdW50YXRnZSBzZWfDvGVudCkiCisKKyM6IGUyZnNjay91bml4LmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoY2hlY2sgaW4gJWxkIG1vdW50cykiCittc2dzdHIgIiAoZXMgY29tcHJvdmFyw6AgZW4gJWxkIG11bnRhZGVzKSIKKworIzogZTJmc2NrL3VuaXguYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IENvdWxkbid0IG9wZW4gL2Rldi9udWxsICglcylcbiIKK21zZ3N0ciAiRVJST1I6IG5vIHMnaGEgcG9ndXQgb2JyaXIgL2Rldi9udWxsICglcylcbiIKKworIzogZTJmc2NrL3VuaXguYzo2NzUKK21zZ2lkICJJbnZhbGlkIEVBIHZlcnNpb24uXG4iCittc2dzdHIgIkxhIHZlcnNpw7MgZGVscyBhdHJpYnV0cyBhbXBsaWF0cyBubyDDqXMgdsOgbGlkYS5cbiIKKworIzogZTJmc2NrL3VuaXguYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBleHRlbmRlZCBvcHRpb246ICVzXG4iCittc2dzdHIgIkVzIGRlc2NvbmVpeCBsJ29wY2nDsyBhbXBsaWFkYTogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBlMmZzY2sgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKyJIaSBoYSB1biBlcnJvciBkZSBzaW50YXhpIGFsIGZpdHhlciBkZSBjb25maWd1cmFjacOzIGRlIGwnZTJmc2NrICglcywgbMOtbmlhICMiCisiJWQpXG4iCisiXHQlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiB2YWxpZGFyIGVsIGRlc2NyaXB0b3IgZGUgZml0eGVyICVkOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjgwMQorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4MTYKK21zZ2lkICJPbmx5IG9uZSBvZiB0aGUgb3B0aW9ucyAtcC8tYSwgLW4gb3IgLXkgbWF5IGJlIHNwZWNpZmllZC4iCittc2dzdHIgIiIKKyJOb23DqXMgZXMgcG90IGVzcGVjaWZpY2FyIHVuYSBkZSBsZXMgb3BjaW9ucyAtcC8tYSwgLW4gbyAteSBhIGxhIHZlZ2FkYS4iCisKKyM6IGUyZnNjay91bml4LmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSAtdCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorbXNnc3RyICJMJ29wY2nDsyAtdCBubyBlc3TDoCBpbXBsZW1lbnRhZGEgZW4gYXF1ZXN0YSB2ZXJzacOzIGRlIGwnZTJmc2NrLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjg2OCBlMmZzY2svdW5peC5jOjk0MiBtaXNjL3R1bmUyZnMuYzo4NzkgbWlzYy90dW5lMmZzLmM6MTE3NAorIzogbWlzYy90dW5lMmZzLmM6MTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHJlc29sZHJlIMKrJXPCuyIKKworIzogZTJmc2NrL3VuaXguYzo5MjEKK21zZ2lkICJUaGUgLW4gYW5kIC1EIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIkxlcyBvcGNpb25zIC1uIGkgLUQgbm8gc8OzbiBjb21wYXRpYmxlcy4iCisKKyM6IGUyZnNjay91bml4LmM6OTI2Cittc2dpZCAiVGhlIC1uIGFuZCAtYyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJMZXMgb3BjaW9ucyAtbiBpIC1jIG5vIHPDs24gY29tcGF0aWJsZXMiCisKKyM6IGUyZnNjay91bml4LmM6OTMxCittc2dpZCAiVGhlIC1uIGFuZCAtbC8tTCBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJMZXMgb3BjaW9ucyAtbiBpIC1sLy1MIG5vIHPDs24gY29tcGF0aWJsZXMuIgorCisjOiBlMmZzY2svdW5peC5jOjk4NQorbXNnaWQgIlRoZSAtYyBhbmQgdGhlIC1sLy1MIG9wdGlvbnMgbWF5IG5vdCBiZSBib3RoIHVzZWQgYXQgdGhlIHNhbWUgdGltZS5cbiIKK21zZ3N0ciAiTm8gZXMgcG9kZW4gdXRpbGl0emFyIGxlcyBvcGNpb25zIC1jIGkgLWwvLUwgYWwgbWF0ZWl4IHRlbXBzLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG5vdCBhbiBpbnRlZ2VyXG4iCisiXG4iCittc2dzdHIgIiIKKyJFMkZTQ0tfSkJEX0RFQlVHIMKrJXPCuyBubyDDqXMgdW4gZW50ZXJcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJbnZhbGlkIG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiTCdhcmd1bWVudCBubyBudW3DqHJpYyBkZSAtJWMgbm8gw6lzIHbDoGxpZCAowqslc8K7KVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBpbnRlcnZhbCBpcyAldSBzZWNvbmRzIGFuZCB0b3RhbCB3YWl0IHRpbWUgaXMgJXUgc2Vjb25kcy4gUGxlYXNlICIKKyJ3YWl0Li4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMTQ5IGUyZnNjay91bml4LmM6MTE1NAorbXNnaWQgIndoaWxlIGNoZWNraW5nIE1NUCBibG9jayIKK21zZ3N0ciAibWVudHJlIGVzIGNvbXByb3ZhdmEgZWwgYmxvYyBNTVAiCisKKyM6IGUyZnNjay91bml4LmM6MTE1NiBtaXNjL3R1bmUyZnMuYzoyMDQ5Cittc2dpZCAiIgorIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSBpcyBub3QgaW4gdXNlIG9uIGFueSBub2RlLCBydW46XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V9J1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTIwNworbXNnaWQgIkVycm9yOiBleHQyZnMgbGlicmFyeSB2ZXJzaW9uIG91dCBvZiBkYXRlIVxuIgorbXNnc3RyICJFcnJvcjogbGEgdmVyc2nDsyBkZSBsYSBiaWJsaW90ZWNhIGRlIGwnZXh0MmZzIMOpcyBtYXNzYSBhbnRpZ2EuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTIxNAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBpbml0aWFsaXplIHByb2dyYW0iCittc2dzdHIgImVuIGludGVudGFyIGluaWNpYWxpdHphciBlbCBwcm9ncmFtYSIKKworIzogZTJmc2NrL3VuaXguYzoxMjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXMsICVzXG4iCittc2dzdHIgIlx0Uyd1dGlsaXR6YSAlcywgJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjQ5Cittc2dpZCAibmVlZCB0ZXJtaW5hbCBmb3IgaW50ZXJhY3RpdmUgcmVwYWlycyIKK21zZ3N0ciAiY2FsIHVuIHRlcm1pbmFsIHBlciBhIGxlcyByZXBhcmFjaW9ucyBpbnRlcmFjdGl2ZXMiCisKKyM6IGUyZnNjay91bml4LmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi5cbiIKK21zZ3N0ciAiJXM6ICVzIHByb3ZhbnQgZWxzIGJsb2NzIGRlIGPDsnBpYSBkZSBzZWd1cmV0YXQuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzA1Cittc2dpZCAiU3VwZXJibG9jayBpbnZhbGlkLCIKK21zZ3N0ciAiU3VwZXJibG9jIG5vIHbDoGxpZCwiCisKKyM6IGUyZnNjay91bml4LmM6MTMwNgorbXNnaWQgIkdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIgorbXNnc3RyICJFbHMgZGVzY3JpcHRvcnMgZGUgZ3J1cCBubyBlc3RhbiBlbiBib24gZXN0YXQuLi4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgdXNpbmcgdGhlIGJhY2t1cCBibG9ja3MiCittc2dzdHIgIiVzOiAlcyBtZW50cmUgZXMgZmVpZW4gc2VydmlyIGVscyBibG9jcyBkZSBjw7JwaWEgZGUgc2VndXJldGF0IgorCisjOiBlMmZzY2svdW5peC5jOjEzMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGdvaW5nIGJhY2sgdG8gb3JpZ2luYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICIlczogbWVudHJlIGVzIHRvcm5hdmEgYWwgc3VwZXJibG9jIG9yaWdpbmFsXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM0OQorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSByZXZpc2lvbiBpcyBhcHBhcmVudGx5IHRvbyBoaWdoIGZvciB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorIihPciB0aGUgZmlsZXN5c3RlbSBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQpXG4iCisiXG4iCittc2dzdHIgIiIKKyJMYSB2ZXJzacOzIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgw6lzIG1hc3NhIHJlY2VudCBwZXIgYSBhcXVlc3RhIHZlcnNpw7MgZGUgIgorImwnZTJmc2NrLlxuIgorIihPIGLDqSBlbCBzdXBlcmJsb2MgZGVsIHNpc3RlbWEgZGUgZml0eGVycyBlc3TDoCBtYWxtw6hzKVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTYKK21zZ2lkICJDb3VsZCB0aGlzIGJlIGEgemVyby1sZW5ndGggcGFydGl0aW9uP1xuIgorbXNnc3RyICJQb3Qgc2VyIHF1ZSBhaXjDsiBzaWd1aSB1bmEgcGFydGljacOzIGRlIG1pZGEgemVybz9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBtdXN0IGhhdmUgJXMgYWNjZXNzIHRvIHRoZSBmaWxlc3lzdGVtIG9yIGJlIHJvb3RcbiIKK21zZ3N0ciAiIgorIkNhbCBxdWUgdGluZ3VldSBhY2PDqXMgZGUgJXMgYWwgc2lzdGVtYSBkZSBmaXR4ZXJzIG8gYsOpIHF1ZSBzaWd1ZXUgbCd1c3VhcmkgIgorInByaW1hcmlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY0Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICJQb3Qgc2VyIHF1ZSBubyBleGlzdGVpeGkgZWwgZGlzcG9zaXRpdSBvIGLDqSBxdWUgc2lndWkgZCdpbnRlcmNhbnZpP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNjYKK21zZ2lkICJGaWxlc3lzdGVtIG1vdW50ZWQgb3Igb3BlbmVkIGV4Y2x1c2l2ZWx5IGJ5IGFub3RoZXIgcHJvZ3JhbT9cbiIKK21zZ3N0ciAiIgorIlBvdCBzZXIgcXVlIGVsIHNpc3RlbWEgZGUgZml0eGVycyBsJ2hhZ2kgbXVudGF0IG8gb2JlcnQgdW4gYWx0cmUgcHJvZ3JhbWEgZGUgIgorIm1hbmVyYSBleGNsdXNpdmE/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM3MAorbXNnaWQgIlBvc3NpYmx5IG5vbi1leGlzdGVudCBkZXZpY2U/XG4iCittc2dzdHIgIlBvdCBzZXIgcXVlIG5vIGV4aXN0ZWl4aSBlbCBkaXNwb3NpdGl1P1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNzMKK21zZ2lkICIiCisiRGlzayB3cml0ZS1wcm90ZWN0ZWQ7IHVzZSB0aGUgLW4gb3B0aW9uIHRvIGRvIGEgcmVhZC1vbmx5XG4iCisiY2hlY2sgb2YgdGhlIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIkVsIGRpc2MgZXN0w6AgcHJvdGVnaXQgY29udHJhIGVzY3JpcHR1cmE7IHV0aWxpdHpldSBsJ29wY2nDs1xuIgorIi1uIHBlciBhIGZlciB1bmEgY29tcHJvdmFjacOzIGRlIG5vbcOpcy1sZWN0dXJhIGRlbCBkaXNwb3NpdGl1LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE0MzcKK21zZ2lkICJHZXQgYSBuZXdlciB2ZXJzaW9uIG9mIGUyZnNjayEiCittc2dzdHIgIkhhdXLDrWV1IGQnb2J0ZW5pciB1bmEgdmVyc2nDsyBtw6lzIHJlY2VudCBkZSBsJ2UyZnNjayIKKworIzogZTJmc2NrL3VuaXguYzoxNDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNoZWNraW5nIGV4dDMgam91cm5hbCBmb3IgJXMiCittc2dzdHIgImVuIGNvbXByb3ZhciBlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgcGVyIGEgJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTQ5MgorbXNnaWQgIiIKKyJXYXJuaW5nOiBza2lwcGluZyBqb3VybmFsIHJlY292ZXJ5IGJlY2F1c2UgZG9pbmcgYSByZWFkLW9ubHkgZmlsZXN5c3RlbSAiCisiY2hlY2suXG4iCittc2dzdHIgIiIKKyJBdsOtczogcydvbWV0IGxhIHJlY3VwZXJhY2nDsyBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIHBlcnF1w6ggcydlc3TDoCAiCisiY29tcHJvdmFudCBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgZW4gbW9kZSBkZSBub23DqXMtbGVjdHVyYS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTA0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgc3VwZXJibG9jayBmbGFncyBvbiAlc1xuIgorbXNnc3RyICJubyBzJ2hhbiBwb2d1dCBkZWZpbmlyIGVscyBzZW55YWxhZG9ycyBkZWwgc3VwZXJibG9jIGEgJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTExCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlY292ZXJpbmcgZXh0MyBqb3VybmFsIG9mICVzIgorbXNnc3RyICJlbiByZWN1cGVyYXIgZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIGV4dDMgZGUgJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTUzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKToiCittc2dzdHIgIiVzIHTDqSBmdW5jaW9uYWxpdGF0cyBubyBpbXBsZW1lbnRhZGVzOiIKKworIzogZTJmc2NrL3VuaXguYzoxNTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YXJuaW5nOiBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKK21zZ3N0ciAiJXM6IGF2w61zOiBsYSBjb21wYXRpYmlsaXRhdCBhbWIgbGEgY29tcHJlc3Npw7Mgw6lzIGV4cGVyaW1lbnRhbC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogZTJmc2NrIG5vdCBjb21waWxlZCB3aXRoIEhUUkVFIHN1cHBvcnQsXG4iCisiXHRidXQgZmlsZXN5c3RlbSAlcyBoYXMgSFRSRUUgZGlyZWN0b3JpZXMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSByZWFkaW5nIGJhZCBibG9ja3MgaW5vZGVcbiIKK21zZ3N0ciAiJXM6ICVzIGVuIGxsZWdpciBlbCBub2RlLWkgZGVscyBibG9jcyBlcnJvbmlzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxMAorbXNnaWQgIlRoaXMgZG9lc24ndCBib2RlIHdlbGwsIGJ1dCB3ZSdsbCB0cnkgdG8gZ28gb24uLi5cbiIKK21zZ3N0ciAiQWl4w7Igbm8gw6lzIHVuIGJvbiBwcmVzYWdpLCBwZXLDsiBzJ2ludGVudGFyw6AgY29udGludWFyLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICglZCBibG9ja3MpOiAiCittc2dzdHIgIkNyZWFjacOzIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgKCVkIGJsb2NzKTogIgorCisjOiBlMmZzY2svdW5peC5jOjE2NjIKK21zZ2lkICIgRG9uZS5cbiIKK21zZ3N0ciAiIEZldC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjY0Cittc2dpZCAiIgorIlxuIgorIioqKiBqb3VybmFsIGhhcyBiZWVuIHJlLWNyZWF0ZWQgLSBmaWxlc3lzdGVtIGlzIG5vdyBleHQzIGFnYWluICoqKlxuIgorbXNnc3RyICIiCisiXG4iCisiKioqIHMnaGEgdG9ybmF0IGEgY3JlYXIgZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIC0gZWwgc2lzdC4gZGUgZml0eGVycyAiCisidG9ybmEgYSBzZXIgZXh0MyAqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjg4Cittc2dpZCAiUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uXG4iCittc2dzdHIgIlMnZXN0w6AgdG9ybmFudCBhIGluaWNpYXIgbCdlMmZzY2sgZGVzIGRlbCBjb21lbsOnYW1lbnQuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjkyCittc2dpZCAid2hpbGUgcmVzZXR0aW5nIGNvbnRleHQiCittc2dzdHIgImVuIHJlaW5pY2lhciBlbCBjb250ZXh0IgorCisjOiBlMmZzY2svdW5peC5jOjE2OTkKK21zZ2lkICJhYm9ydGVkIgorbXNnc3RyICJzJ2hhIGludGVycm9tcHV0IgorCisjOiBlMmZzY2svdW5peC5jOjE3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGUyZnNjayBjYW5jZWxlZC5cbiIKK21zZ3N0ciAiJXM6IHMnaGEgY2FuY2VswrdsYXQgbCdlMmZzY2suXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc0MSBlMmZzY2svdXRpbC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKiogUydIQSBNT0RJRklDQVQgRUwgU0lTVEVNQSBERSBGSVRYRVJTICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiVzOiAqKioqKiBSRUlOSUNJRVUgRUwgTElOVVggKioqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzUzIGUyZnNjay91dGlsLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIFdBUk5JTkc6IEZpbGVzeXN0ZW0gc3RpbGwgaGFzIGVycm9ycyAqKioqKioqKioqXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBBVsONUzogZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGVuY2FyYSB0w6kgZXJyb3JzICoqKioqKioqKipcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoxOTAgbWlzYy91dGlsLmM6ODYKK21zZ2lkICJ5WSIKK21zZ3N0ciAic1MiCisKKyM6IGUyZnNjay91dGlsLmM6MTkxCittc2dpZCAibk4iCittc2dzdHIgIm5OIgorCisjOiBlMmZzY2svdXRpbC5jOjIwNQorbXNnaWQgIjx5PiIKK21zZ3N0ciAiPHM+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwNworbXNnaWQgIjxuPiIKK21zZ3N0ciAiPG4+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwOQorbXNnaWQgIiAoeS9uKSIKK21zZ3N0ciAiIChzL24pIgorCisjOiBlMmZzY2svdXRpbC5jOjIyMworbXNnaWQgImNhbmNlbGxlZCFcbiIKK21zZ3N0ciAicydoYSBjYW5jZWzCt2xhdFxuIgorCisjOiBlMmZzY2svdXRpbC5jOjIzOAorbXNnaWQgInllc1xuIgorbXNnc3RyICJzw61cbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNDAKK21zZ2lkICJub1xuIgorbXNnc3RyICJub1xuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IG5vXG4iCisiXG4iCittc2dzdHIgIiIKKyIlcz8gbm9cbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyB5ZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyBzw61cbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTgKK21zZ2lkICJ5ZXMiCittc2dzdHIgInPDrSIKKworIzogZTJmc2NrL3V0aWwuYzoyNTgKK21zZ2lkICJubyIKK21zZ3N0ciAibm8iCisKKyM6IGUyZnNjay91dGlsLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgImUyZnNja19yZWFkX2JpdG1hcHM6IGlsbGVnYWwgYml0bWFwIGJsb2NrKHMpIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjI3OAorbXNnaWQgInJlYWRpbmcgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gcmVhZCBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAiZW4gdG9ybmFyIGEgaW50ZW50YXIgbGEgbGVjdHVyYSBkZWxzIG1hcGVzIGRlIGJpdHMgcGVyIGEgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjk4Cittc2dpZCAid3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyIKK21zZ3N0ciAiZXNjcmlwdHVyYSBkZWxzIG1hcGVzIGRlIGJpdHMgZGUgYmxvYyBpIGRlIG5vZGUtaSIKKworIzogZTJmc2NrL3V0aWwuYzozMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAiZW4gdG9ybmFyIGEgZXNjcml1cmUgZWxzIG1hcGVzIGRlIGJpdHMgZGUgYmxvYyBpIGRlIG5vZGUtaSBwZXIgZGUgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyIlczogVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOyBSVU4gZnNjayBNQU5VQUxMWS5cbiIKKyJcdChpLmUuLCB3aXRob3V0IC1hIG9yIC1wIG9wdGlvbnMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyIlczogSU5DT05TSVNUw4hOQ0lBIElORVNQRVJBREE7IEVYRUNVVEVVIGZzY2sgTUFOVUFMTUVOVC5cbiIKKyJcdCjDqXMgYSBkaXIsIHNlbnNlIGxlcyBvcGNpb25zIC1hIG8gLXApXG4iCisKKyM6IGUyZnNjay91dGlsLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKK21zZ3N0ciAiTWVtw7JyaWEgdXRpbGl0emFkYTogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHUsICIKK21zZ3N0ciAiTWVtw7JyaWEgdXRpbGl0emFkYTogJWx1LCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWU6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCittc2dzdHIgInRlbXBzOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbGFwc2VkIHRpbWU6ICU2LjNmXG4iCittc2dzdHIgInRlbXBzIHRyYW5zY29ycmVndXQ6ICU2LjNmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDQ3IGUyZnNjay91dGlsLmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICJlbiBsbGVnaXIgZWwgbm9kZS1pICVsdSBhICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjQ3NSBlMmZzY2svdXRpbC5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAiZW4gZXNjcml1cmUgZWwgbm9kZS1pICVsdSBhICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjYzNworbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgemVyb2l6aW5nIGJ1ZmZlciIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjc4NQorbXNnaWQgIiIKKyJVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k6IHRoZSBmaWxlc3lzdGVtIGlzIGJlaW5nIG1vZGlmaWVkIHdoaWxlIGZzY2sgaXMgIgorInJ1bm5pbmcuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3MgorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgImZldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWIgYmxvY2tfc2l6ZV0gWy1pIGlucHV0X2ZpbGVdIFstbyBvdXRwdXRfZmlsZV0gWy1zdnduZl1cbiIKKyIgICAgICAgWy1jIGJsb2Nrc19hdF9vbmNlXSBbLWQgZGVsYXlfZmFjdG9yX2JldHdlZW5fcmVhZHNdIFstZSAiCisibWF4X2JhZF9ibG9ja3NdXG4iCisiICAgICAgIFstcCBudW1fcGFzc2VzXSBbLXQgdGVzdF9wYXR0ZXJuIFstdCB0ZXN0X3BhdHRlcm4gWy4uLl1dXVxuIgorIiAgICAgICBkZXZpY2UgW2xhc3RfYmxvY2sgW2ZpcnN0X2Jsb2NrXV1cbiIKK21zZ3N0ciAiIgorIkZvcm1hIGQnw7pzOiAlcyBbLWIgbWlkYV9kZWxfYmxvY10gWy1pIGZpdHhlcl9kJ2VudHJhZGFdIFstbyAiCisiZml0eGVyX2RlX3NvcnRpZGFdIFstc3Z3bmZdXG4iCisiICAgICAgIFstYyBibG9jc19hX2xhX3ZlZ2FkYV0gWy1kIGZhY3Rvcl9kZV9yZXRhcmRfZW50cmVfbGVjdHVyZXNdIFstZSAiCisiYmxvY3NfZXJyb25pc19tw6B4XVxuIgorIiAgICAgICBbLXAgbm9tYnJlX2RlX3Bhc3Nvc10gWy10IHBhdHLDs19kZV9wcm92YSBbLXQgcGF0csOzX2RlX3Byb3ZhIFsuLi5dXV1cbiIKKyIgICAgICAgZGlzcG9zaXRpdSBbZGFycmVyX2Jsb2MgW2Jsb2NfZCdpbmljaV1dXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogVGhlIC1uIGFuZCAtdyBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyIlczogbGVzIG9wY2lvbnMgLW4gaSAtdyBzw7NuIG11dHVhbG1lbnQgZXhjbHVzaXZlcy5cbiIKKyJcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTYuMmYlJSBkb25lLCAlcyBlbGFwc2VkLiAoJWQvJWQvJWQgZXJyb3JzKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjMyOAorbXNnaWQgIlRlc3Rpbmcgd2l0aCByYW5kb20gcGF0dGVybjogIgorbXNnc3RyICJDb21wcm92YWNpw7MgYW1iIHVuIHBhdHLDsyBhcmJpdHJhcmk6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNDYKK21zZ2lkICJUZXN0aW5nIHdpdGggcGF0dGVybiAweCIKK21zZ3N0ciAiQ29tcHJvdmFjacOzIGFtYiBlbCBwYXRyw7MgMHgiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Mzc4IG1pc2MvYmFkYmxvY2tzLmM6NDUxCittc2dpZCAiZHVyaW5nIHNlZWsiCittc2dzdHIgImR1cmFudCBsYSBjZXJjYSIKKworIzogbWlzYy9iYWRibG9ja3MuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIgorbXNnc3RyICJWYWxvciBlc3RyYW55ICglbGQpIGEgZG9fcmVhZFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ3NgorbXNnaWQgImR1cmluZyBleHQyZnNfc3luY19kZXZpY2UiCittc2dzdHIgImR1cmFudCBsJ2V4ZWN1Y2nDsyBkZSBleHQyZnNfc3luY19kZXZpY2UiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDk2IG1pc2MvYmFkYmxvY2tzLmM6NzU4Cittc2dpZCAid2hpbGUgYmVnaW5uaW5nIGJhZCBibG9jayBsaXN0IGl0ZXJhdGlvbiIKK21zZ3N0ciAiZW4gaW5pY2lhciBsYSBpdGVyYWNpw7MgcGVyIGxhIGxsaXN0YSBkZSBibG9jcyBlcnJvbmlzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxMSBtaXNjL2JhZGJsb2Nrcy5jOjYxMSBtaXNjL2JhZGJsb2Nrcy5jOjc2OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVycyIKK21zZ3N0ciAiZW4gYXNzaWduYXIgbGVzIG1lbcOycmllcyBpbnRlcm3DqGRpZXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGJsb2NrcyAlbHUgdG8gJWx1XG4iCittc2dzdHIgIkNvbXByb3ZhY2nDsyBkZWxzIGJsb2NzICVsdSBhICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyMAorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtb25seSBtb2RlXG4iCittc2dzdHIgIlMnZXN0w6AgY29tcHJvdmFudCBzaSBoaSBoYSBibG9jcyBlcnJvbmlzIGVuIG1vZGUgZGUgbm9tw6lzLWxlY3R1cmFcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjkKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAocmVhZC1vbmx5IHRlc3QpOiAiCittc2dzdHIgIlMnZXN0w6AgY29tcHJvdmFudCBzaSBoaSBoYSBibG9jcyBlcnJvbmlzIChwcm92YSBkZSBub23DqXMtbGVjdHVyYSk6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MzYgbWlzYy9iYWRibG9ja3MuYzo2NDMgbWlzYy9iYWRibG9ja3MuYzo2ODUKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODMyCittc2dpZCAiVG9vIG1hbnkgYmFkIGJsb2NrcywgYWJvcnRpbmcgdGVzdFxuIgorbXNnc3RyICJIaSBoYSBtYXNzYSBibG9jcyBlcnJvbmlzLCBzJ2ludGVycm9tcHLDoCBsYSBjb21wcm92YWNpw7NcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MTgKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiIgorIlMnZXN0w6AgY29tcHJvdmFudCBzaSBoaSBoYSBibG9jcyBlcnJvbmlzIGVuIG1vZGUgZGUgbGVjdHVyYS1lc2NyaXB0dXJhXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjIwIG1pc2MvYmFkYmxvY2tzLmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gYmxvY2sgJWx1IHRvICVsdVxuIgorbXNnc3RyICJEZWxzIGJsb2NzICVsdSBhICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY3NQorbXNnaWQgIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIgorbXNnc3RyICJMZWN0dXJhIGkgY29tcGFyYWNpw7M6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiBub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIiIKKyJTJ2VzdMOgIGNvbXByb3ZhbnQgc2kgaGkgaGEgYmxvY3MgZXJyb25pcyBlbiBtb2RlIGRlIGxlY3R1cmEtZXNjcmlwdHVyYSBubyAiCisiZGVzdHJ1Y3RpdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc4NworbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSB0ZXN0KVxuIgorbXNnc3RyICIiCisiUydlc3TDoCBjb21wcm92YW50IHNpIGhpIGhhIGJsb2NzIGVycm9uaXMgKHByb3ZhIGVuIG1vZGUgZGUgbGVjdHVyYS0iCisiZXNjcmlwdHVyYSBubyBkZXN0cnVjdGl1KVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc5NAorbXNnaWQgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIgorbXNnc3RyICIiCisiXG4iCisiUydoYSBpbnRlcmNlcHRhdCB1bmEgaW50ZXJydXBjacOzOyBzJ2luaWNpYXJhbiBsZXMgdGFzcXVlcyBkZSBuZXRlamFcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyaW5nIHRlc3QgZGF0YSB3cml0ZSwgYmxvY2sgJWx1IgorbXNnc3RyICJkdXJhbnQgbCdlc2NyaXB0dXJhIGRlIGxlcyBkYWRlcyBkZSBwcm92YSwgYmxvYyAlbHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTk4IG1pc2MvdXRpbC5jOjMyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBtb3VudGVkOyAiCittc2dzdHIgIiVzIGVzdMOgIG11bnRhdDsgIgorCisjIEZJWE1FOiBIb3BlIC0gZXNwZXJlbSA/IChkcG0pCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDAKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiIgorInMnaGEgZm9yw6dhdCBiYWRibG9ja3MgZGUgdG90ZXMgbWFuZXJlcy4gIFNlZ3VyYW1lbnQgL2V0Yy9tdGFiIHNpZ3VpICIKKyJpbmNvcnJlY3RlLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDUKK21zZ2lkICJpdCdzIG5vdCBzYWZlIHRvIHJ1biBiYWRibG9ja3MhXG4iCittc2dzdHIgImwnZXhlY3VjacOzIGRlIGJhZGJsb2NrcyBubyDDqXMgc2VndXJhIVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMTAgbWlzYy91dGlsLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGFwcGFyZW50bHkgaW4gdXNlIGJ5IHRoZSBzeXN0ZW07ICIKK21zZ3N0ciAiJXMgZXN0w6AgZXNzZW50IHV0aWxpdHphdCBwZWwgc2lzdGVtYTsgIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMTMKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAicydoYSBmb3LDp2F0IGJhZGJsb2NrcyBkZSB0b3RlcyBtYW5lcmVzLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyAtICVzIgorbXNnc3RyICIlcyBubyB2w6BsaWQgLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBiaWcgbWF4IGJhZCBibG9ja3MgY291bnQgJXUgLSBtYXhpbXVtIGlzICV1IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRlc3RfcGF0dGVybiAtICVzIgorbXNnc3RyICJubyBlcyBwb3QgYXNzaWduYXIgbWVtw7JyaWEgcGVyIGFsIHBhdHLDs19kZV9wcm92YSAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExODQKK21zZ2lkICJNYXhpbXVtIG9mIG9uZSB0ZXN0X3BhdHRlcm4gbWF5IGJlIHNwZWNpZmllZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiIgorIk5vbcOpcyBlcyBwb3QgZXNwZWNpZmljYXIgdW4gcGF0csOzX2RlX3Byb3ZhIGNvbSBhIG3DoHhpbSBlbiBtb2RlIGRlIG5vbcOpcy0iCisibGVjdHVyYSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTkwCittc2dpZCAiUmFuZG9tIHRlc3RfcGF0dGVybiBpcyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiIgorIk5vIGVzIHBvdCB1dGlsaXR6YXIgdW4gcGF0csOzX2RlX3Byb3ZhIGFyYml0cmFyaSBlbiBtb2RlIGRlIG5vbcOpcy1sZWN0dXJhIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMDQKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgbWFudWFsbHlcbiIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgZGV0ZXJtaW5hciBsYSBtaWRhIGRlbCBkaXNwb3NpdGl1O1xuIgorImwnaGF1cmV1IGQnZXNwZWNpZmljYXIgbWFudWFsbWVudFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMTAKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIgorbXNnc3RyICJlbiBpbnRlbnRhciBkZXRlcm1pbmFyIGxhIG1pZGEgZGVsIGRpc3Bvc2l0aXUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIxNQorbXNnaWQgImxhc3QgYmxvY2siCittc2dzdHIgIsO6bHRpbSBibG9jIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjEKK21zZ2lkICJmaXJzdCBibG9jayIKK21zZ3N0ciAicHJpbWVyIGJsb2MiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0aW5nIGJsb2NrICglbGx1KTogbXVzdCBiZSBsZXNzIHRoYW4gJWxsdSIKK21zZ3N0ciAiYmxvYyBkJ2luaWNpIG5vIHbDoGxpZCAoJWxsdSk6IGhhdXJpYSBkZSBzZXIgaW5mZXJpb3IgYSAlbGx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBlbmQgYmxvY2sgKCVsbHUpOiBtdXN0IGJlIDMyLWJpdCB2YWx1ZSIKK21zZ3N0ciAiYmxvYyBkZSBmaW5hbGl0emFjacOzIG5vIHbDoGxpZCAoJWxsdSk6IGhhIGRlIHNlciB1biB2YWxvciBkZSAzMiBiaXRzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyODcKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyBpbi1tZW1vcnkgYmFkIGJsb2NrcyBsaXN0IgorbXNnc3RyICJlbiBjcmVhciBsYSBsbGlzdGEgZGUgYmxvY3MgZXJyb25pcyBlbiBtZW3DsnJpYSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjk2Cittc2dpZCAiaW5wdXQgZmlsZSAtIGJhZCBmb3JtYXQiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzA0IG1pc2MvYmFkYmxvY2tzLmM6MTMxMworbXNnaWQgIndoaWxlIGFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgImVuIGFmZWdpciBhIGxhIGxsaXN0YSBkZSBibG9jcyBlcnJvbmlzIGVuIG1lbcOycmlhIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEzMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFzcyBjb21wbGV0ZWQsICV1IGJhZCBibG9ja3MgZm91bmQuICglZC8lZC8lZCBlcnJvcnMpXG4iCittc2dzdHIgIlBhcyBjb21wbGV0YXQuIFMnaGFuIHRyb2JhdCAldSBibG9jcyBlcnJvbmlzLiAoJWQvJWQvJWQgZXJyb3JzKVxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWZl0gWy0rPWFBY0NkRGVpanNTdFR1XSBbLXYgdmVyc2lvbl0gZmlsZXMuLi5cbiIKK21zZ3N0ciAiRm9ybWEgZCfDunM6ICVzIFstUlZmXSBbLSs9YUFjQ2REZWlqc1N0VHVdIFstdiB2ZXJzacOzXSBmaXR4ZXJzLi4uXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB2ZXJzaW9uIC0gJXNcbiIKK21zZ3N0ciAidmVyc2nDsyBubyB2w6BsaWRhIC0gJXNcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyMDEgbWlzYy9sc2F0dHIuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHN0YXQgJXMiCittc2dzdHIgImVuIGludGVudGFyIG1vc3RyYXIgbGEgaW5mb3JtYWNpw7MgZGUgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgImVuIGxsZWdpciBlbHMgc2VueWFsYWRvcnMgYSAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyMTMgbWlzYy9jaGF0dHIuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3Mgb2YgJXMgc2V0IGFzICIKK21zZ3N0ciAiUydoYW4gZXN0YWJsZXJ0IGVscyBzZW55YWxhZG9ycyBkZSAlcyBjb20gYSAiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgImVuIGVzdGFibGlyIGVscyBzZW55YWxhZG9ycyBhICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uIG9mICVzIHNldCBhcyAlbHVcbiIKK21zZ3N0ciAiUydoYSBlc3RhYmxlcnQgbGEgdmVyc2nDsyBkZSAlcyBhICVsdVxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgImVuIGVzdGFibGlyIGxhIHZlcnNpw7MgYSAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyNjcKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBwYXRoIHZhcmlhYmxlIGluIGNoYXR0cl9kaXJfcHJvYyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhc3NpZ25hciBsYSB2YXJpYWJsZSBkZWwgY2Ftw60gYSBjaGF0dHJfZGlyX3Byb2MiCisKKyM6IG1pc2MvY2hhdHRyLmM6MzA3Cittc2dpZCAiPSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtIGFuZCArXG4iCittc2dzdHIgIj0gbm8gw6lzIGNvbXBhdGlibGUgYW1iIC0gaSArXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MzE1Cittc2dpZCAiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iCittc2dzdHIgIkNhbCB1dGlsaXR6YXIgwqstdsK7LCA9LCAtIG8gK1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08bnVtPl0gWy1vIGJsb2Nrc2l6ZT08bnVtPl0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJGb3JtYSBkJ8O6czogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2M9PG51bT5dIFstbyBtaWRhZGVsYmxvYz08bnVtPl0gIgorImRpc3Bvc2l0aXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE1OQorbXNnaWQgImJsb2NrcyIKK21zZ3N0ciAiYmxvY3MiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNjkKK21zZ2lkICJjbHVzdGVycyIKK21zZ3N0ciAiZ3J1cHMgZGUgc2VjdG9ycyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJHcm91cCAlbHU6IChCbG9ja3MgIgorbXNnc3RyICJHcnVwICVsdTogKGJsb2NzICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIENoZWNrc3VtIDB4JTA0eCIKK21zZ3N0ciAiICBTdW1hIGRlIHZlcmlmaWNhY2nDsyAweCUwNHgiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChFWFBFQ1RFRCAweCUwNHgpIgorbXNnc3RyICIgKFMnRVNQRVJBVkEgMHglMDR4KSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICIsIHVudXNlZCBpbm9kZXMgJXVcbiIKK21zZ3N0ciAiLCAldSBub2Rlcy1pIG5vIHV0aWxpdHphdHNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICVzIHN1cGVyYmxvY2sgYXQgIgorbXNnc3RyICIgc3VwZXJibG9jICVzIGEgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE0Cittc2dpZCAiUHJpbWFyeSIKK21zZ3N0ciAiUHJpbWFyaSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNAorbXNnaWQgIkJhY2t1cCIKK21zZ3N0ciAiQ8OycGlhIGRlIHNlZ3VyZXRhdCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxOAorbXNnaWQgIiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgIgorbXNnc3RyICIsIGRlc2NyaXB0b3JzIGRlIGdydXAgYSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjIKK21zZ2lkICIiCisiXG4iCisiICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjI5Cittc2dpZCAiIEdyb3VwIGRlc2NyaXB0b3IgYXQgIgorbXNnc3RyICIgZGVzY3JpcHRvciBkZSBncnVwIGEgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM1Cittc2dpZCAiICBCbG9jayBiaXRtYXAgYXQgIgorbXNnc3RyICIgTWFwYSBkZSBiaXRzIGRlbCBibG9jIGEgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM5Cittc2dpZCAiLCBJbm9kZSBiaXRtYXAgYXQgIgorbXNnc3RyICIsIG1hcGEgZGUgYml0cyBkZWwgbm9kZS1pIGEgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQzCittc2dpZCAiIgorIlxuIgorIiAgSW5vZGUgdGFibGUgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICB0YXVsYSBkZSBub2Rlcy1pIGEgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgICV1IGZyZWUgJXMsICV1IGZyZWUgaW5vZGVzLCAldSBkaXJlY3RvcmllcyVzIgorbXNnc3RyICIiCisiXG4iCisiICAldSAlcyBsbGl1cmVzLCAldSBub2Rlcy1pIGxsaXVyZXMsICV1IGRpcmVjdG9yaXMlcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIsICV1IHVudXNlZCBpbm9kZXNcbiIKK21zZ3N0ciAiLCAldSBub2Rlcy1pIG5vIHV0aWxpdHphdHNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1OQorbXNnaWQgIiAgRnJlZSBibG9ja3M6ICIKK21zZ3N0ciAiICBCbG9jcyBsaXVyZXM6ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI3NAorbXNnaWQgIiAgRnJlZSBpbm9kZXM6ICIKK21zZ3N0ciAiICBOb2Rlcy1pIGxsaXVyZXM6ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxMAorbXNnaWQgIndoaWxlIHByaW50aW5nIGJhZCBibG9jayBsaXN0IgorbXNnc3RyICJlbiBpbXByaW1pciBsYSBsbGlzdGEgZGUgYmxvY3MgZXJyb25pcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2tzOiAldSIKK21zZ3N0ciAiQmxvY3MgZXJyb25pczogJXUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNDUgbWlzYy90dW5lMmZzLmM6MzQ3Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJlbiBsbGVnaXIgZWwgbm9kZS1pIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNTEKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgImVuIG9icmlyIGVsIG5vZGUtaSBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzU3Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyIGJsb2NrIgorbXNnc3RyICJlbiBsbGVnaXIgZWwgc3VwZXJibG9jIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjQKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVyIGludmFsaWQhXG4iCittc2dzdHIgIkVsIG51bWVybyBtw6BnaWMgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyBubyDDqXMgdsOgbGlkIVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzY3Cittc2dpZCAiSm91cm5hbCBmZWF0dXJlczogICAgICAgICIKK21zZ3N0ciAiRnVuY2lvbnMgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9uczogICAgICAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzgwCittc2dpZCAiSm91cm5hbCBzaXplOiAgICAgICAgICAgICAiCittc2dzdHIgIk1pZGEgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9uczogICAgICAgICAgICAgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorbXNnc3RyICIiCisiTGxhcmdhZGEgZGVsIHJlZy4gZGUgdHJhbnMuOiAgICAgICAgICAldVxuIgorIlNlccO8w6huY2lhIGRlbCByZWcuIGRlIHRyYW5zLjogICAgICAgICAweCUwOHhcbiIKKyJJbmljaSBkZWwgcmVnaXN0cmUgZGUgdHJhbnMuOiAgICAgICAgICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBlcnJubzogICAgICAgICAgICAlZFxuIgorbXNnc3RyICJOw7ptZXJvIGQnZXJyb3IgZGVsIHJlZ2kuIGRlIHRyYW5zLjogICAgICAgJWRcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQxNSBtaXNjL3R1bmUyZnMuYzoxOTYKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAiZW4gbGxlZ2lyIGVsIHN1cGVyYmxvYyBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDIzCittc2dpZCAiQ291bGRuJ3QgZmluZCBqb3VybmFsIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVycyIKK21zZ3N0ciAiIgorIk5vIHMnaGFuIHRyb2JhdCBlbHMgbsO6bWVyb3MgbcOgZ2ljcyBkZWwgc3VwZXJibG9jIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgYmxvY2sgc2l6ZTogICAgICAgJXVcbiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBmaXJzdCBibG9jazogICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgbnVtYmVyIG9mIHVzZXJzOiAgJXVcbiIKK21zZ3N0ciAiIgorIlxuIgorIk1pZGEgZGUgYmxvYyBkZWwgcmVnLiBkZSB0cmFucy46ICAgICAgJXVcbiIKKyJMbGFyZ2FkYSBkZWwgcmVnLiBkZSB0cmFucy46ICAgICAgICAgICV1XG4iCisiUHJpbWVyIGJsb2MgZGVsIHJlZy4gZGUgdHJhbnMuOiAgICAgICAldVxuIgorIlNlccO8w6huY2lhIGRlbCByZWcuIGRlIHRyYW5zLjogICAgICAgICAweCUwOHhcbiIKKyJJbmljaSBkZWwgcmVnaXN0cmUgZGUgdHJhbnMuOiAgICAgICAgICV1XG4iCisiTm9tYnJlIGQndXN1YXJpcyBkZWwgcmVnLiBkZSB0cmFucy46ICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdXNlcnM6ICAgICAgICAgICAgJXNcbiIKK21zZ3N0ciAiVXN1YXJpcyBkZWwgcmVnaXN0cmUgZGUgdHJhbnMuOiAgICAgICAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDU2IG1pc2MvbWtlMmZzLmM6NzQzIG1pc2MvdHVuZTJmcy5jOjEyMTEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugb3B0aW9ucyFcbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhc3NpZ25hciBtZW3DsnJpYSBwZXIgYSBhbmFsaXR6YXIgbGVzIG9wY2lvbnNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2sgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXLDoG1ldHJlIGRlbCBzdXBlcmJsb2Mgbm8gdsOgbGlkOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyw6BtZXRyZSBkZSBtaWRhIGRlIGJsb2Mgbm8gdsOgbGlkYTogJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjUwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIGV4dGVuZGVkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0c3VwZXJibG9jaz08c3VwZXJibG9jayBudW1iZXI+XG4iCisiXHRibG9ja3NpemU9PGJsb2Nrc2l6ZT5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTY4IG1pc2MvbWtlMmZzLmM6MTczNAorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzXG4iCittc2dzdHIgIlx0RW4gdXRpbGl0emFyICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo2MDYgbWlzYy9lMmltYWdlLmM6MTU4MiBtaXNjL3R1bmUyZnMuYzoyMDYwCisjOiByZXNpemUvbWFpbi5jOjMxOQorbXNnaWQgIkNvdWxkbid0IGZpbmQgdmFsaWQgZmlsZXN5c3RlbSBzdXBlcmJsb2NrLlxuIgorbXNnc3RyICJObyBzJ2hhIHRyb2JhdCB1biBzdXBlcmJsb2MgZGVsIHNpc3RlbWEgZGUgZml0eGVycyB2w6BsaWQuXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAlczogZXJyb3IgcmVhZGluZyBiaXRtYXBzOiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICVzOiBzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBlbHMgbWFwZXMgZGUgYml0czogJXNcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbIC1yfFEgXSBbIC1mciBdIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIkZvcm1hIGQnw7pzOiAlcyBbIC1yfFEgXSBbIC1mciBdIGRpc3Bvc2l0aXUgZml0eGVyLWltYXRnZVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIC1JIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIiAgICAgICAlcyAtSSBkaXNwb3NpdGl1IGZpdHhlci1pbWF0Z2VcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgJXMgLXJhICBbICAtY2ZucCAgXSBbIC1vIHNyY19vZmZzZXQgXSBbIC1PIGRlc3Rfb2Zmc2V0IF0gc3JjX2ZzICIKKyJbIGRlc3RfZnMgXVxuIgorbXNnc3RyICIiCisiICAgICAgICVzIC1yYSAgWyAgLWNmbnAgIF0gWyAtbyBkZXNwbGHDp19mb250IF0gWyAtTyBkZXNwbGHDp19kZXN0w60gXSBzZl9mb250ICIKKyJbIHNmX2Rlc3TDrSBdXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2OSBtaXNjL2UyaW1hZ2UuYzo1NzYgbWlzYy9lMmltYWdlLmM6NTgyCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTc4Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBidWZmZXIiCittc2dzdHIgImVuIGFzc2lnbmFyIGxhIG1lbcOycmlhIGludGVybcOoZGlhIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBibG9jayAlbGx1XG4iCittc2dzdHIgIlMnZXNjcml1IGVsIGJsb2MgJWxsdVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igd3JpdGluZyBibG9jayAlbGx1IgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVzY3JpdXJlIGVsIGJsb2MgJWxsdSIKKworIzogbWlzYy9lMmltYWdlLmM6MTkxCittc2dpZCAiZXJyb3IgaW4gZ2VuZXJpY193cml0ZSgpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjIwOAorbXNnaWQgIkVycm9yOiBoZWFkZXIgc2l6ZSBpcyBiaWdnZXIgdGhhbiB3cnRfc2l6ZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjIxMworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGhlYWRlciBidWZmZXJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNDEKK21zZ2lkICJ3aGlsZSB3cml0aW5nIHN1cGVyYmxvY2siCittc2dzdHIgImVuIGVzY3JpdXJlIGVsIHN1cGVyYmxvYyIKKworIzogbWlzYy9lMmltYWdlLmM6MjUwCittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiZW4gZXNjcml1cmUgbGEgdGF1bGEgZGUgbm9kZXMtaSIKKworIzogbWlzYy9lMmltYWdlLmM6MjU4Cittc2dpZCAid2hpbGUgd3JpdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgImVuIGVzY3JpdXJlIGVsIG1hcGEgZGUgYml0cyBkZWxzIGJsb2NzIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNjYKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiZW4gZXNjcml1cmUgZWwgbWFwYSBkZSBiaXRzIGRlbHMgbm9kZXMtaSIKKworIzogbWlzYy9lMmltYWdlLmM6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCByZWNfbGVuICglZClcbiIKK21zZ3N0ciAiIgorIkVsIGJsb2MgZGUgZGlyZWN0b3JpICVsbHUgZXN0w6AgY29ycm9tcHV0OiBsYSBsb25naXR1ZCBkZSByZWdpc3RyZSAiCisiwqtyZWNfbGVuwrsgKCVkKSDDqXMgaW5jb3JyZWN0YVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBkaXJlY3RvcnkgYmxvY2sgJWxsdTogYmFkIG5hbWVfbGVuICglZClcbiIKK21zZ3N0ciAiIgorIkVsIGJsb2MgZGUgZGlyZWN0b3JpICVsbHUgZXN0w6AgY29ycm9tcHV0OiBsYSBsb25naXR1ZCBkZWwgbm9tICIKKyLCq25hbWVfbGVuwrsgKCVkKSDDqXMgaW5jb3JyZWN0YVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSIKK21zZ3N0ciAiJWxsdSAvICVsbHUgYmxvY3MgKCVkJSUpIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1ODYgbWlzYy9lMmltYWdlLmM6NjI2Cittc2dpZCAiQ29weWluZyAiCittc2dzdHIgIlMnZXN0w6AgY29waWFudCAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjYyMworbXNnaWQgIiIKKyJTdG9wcGluZyBub3cgd2lsbCBkZXN0cm95IHRoZSBmaWxlc3lzdGVtLCBpbnRlcnJ1cHQgYWdhaW4gaWYgeW91IGFyZSBzdXJlXG4iCittc2dzdHIgIiIKKyJTaSBhdHVyZXUgYXJhIGVsIHByb2PDqXMgZGVzdHJ1aXJldSBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMsIGludGVycm9tcGV1IHVuICIKKyJhbHRyZSBjb3Agc2kgbidlc3RldSBzZWd1cnNcbiIKKworIzogbWlzYy9lMmltYWdlLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyByZW1haW5pbmcgYXQgJS4yZiBNQi9zIgorbXNnc3RyICIgcXVlZGVuICVzIGEgJS4yZiBNQi9zIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo2NjEgbWlzYy9lMmltYWdlLmM6MTE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIGJsb2NrICVsbHUiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbGxlZ2lyIGVsIGJsb2MgJWxsdSIKKworIzogbWlzYy9lMmltYWdlLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcGllZCAlbGx1IC8gJWxsdSBibG9ja3MgKCVkJSUpIGluICVzICIKK21zZ3N0ciAiUydoYW4gY29waWF0ICVsbHUgLyAlbGx1IGJsb2NzICglZCUlKSBlbiAlcyAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdCAlLjJmIE1CL3MiCittc2dzdHIgImEgJS4yZiBNQi9zIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3NTUKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGwxIHRhYmxlIgorbXNnc3RyICJlbiBhc3NpZ25hciBsYSB0YXVsYSBsMSIKKworIzogbWlzYy9lMmltYWdlLmM6ODAwCittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBsMiBjYWNoZSIKK21zZ3N0ciAiZW4gYXNzaWduYXIgbGEgbWVtw7JyaWEgY2F1IGwyIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo4MjMKK21zZ2lkICIiCisiV2FybmluZzogVGhlcmUgYXJlIHN0aWxsIHRhYmxlcyBpbiB0aGUgY2FjaGUgd2hpbGUgcHV0dGluZyB0aGUgY2FjaGUsIGRhdGEgIgorIndpbGwgYmUgbG9zdCBzbyB0aGUgaW1hZ2UgbWF5IG5vdCBiZSB2YWxpZC5cbiIKK21zZ3N0ciAiIgorIkF2w61zOiBlbmNhcmEgaGkgaGEgdGF1bGVzIGEgbGEgbWVtw7JyaWEgY2F1IGVuIGVsIG1vbWVudCBkZSBwb3Nhci1sYS4gRXMgIgorInBlcmRyYW4gZGFkZXMgaSBsYSBpbWF0Z2Ugbm8gc2Vyw6AgdsOgbGlkYS5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTE0NQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgZXh0Ml9xY293Ml9pbWFnZSIKK21zZ3N0ciAiZW4gYXNzaWduYXIgbGEgZXh0Ml9xY293Ml9pbWFnZSIKKworIzogbWlzYy9lMmltYWdlLmM6MTE1MgorbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBleHQyX3Fjb3cyX2ltYWdlIgorbXNnc3RyICJlbiBpbmljaWFsaXR6YXIgbGEgZXh0Ml9xY293Ml9pbWFnZSIKKworIzogbWlzYy9lMmltYWdlLmM6MTIxMSBtaXNjL2UyaW1hZ2UuYzoxMjI5Cittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I6IG11bHRpcGxlIHNlcXVlbnRpYWwgcmVmY291bnQgYmxvY2tzIGNyZWF0ZWQhXG4iCittc2dzdHIgIiIKKyJFcnJvciBkZSBwcm9ncmFtYWNpw7M6IHMnaGFuIGNyZWF0IG3Dumx0aXBsZXMgYmxvY3MgcmVmY291bnQgc2Vxw7xlbmNpYWxzIVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjY5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgImVuIGFzc2lnbmFyIGVsIG1hcGEgZGUgYml0cyBkZWxzIGJsb2NzIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjc4Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBzY3JhbWJsZSBibG9jayBiaXRtYXAiCittc2dzdHIgImVuIGFzc2lnbmFyIGVsIG1hcGEgZGUgYml0cyB4aWZyYXQgZGVscyBibG9jcyIKKworIzogbWlzYy9lMmltYWdlLmM6MTI4NQorbXNnaWQgIlNjYW5uaW5nIGlub2Rlcy4uLlxuIgorbXNnc3RyICJFc2NhbmVpZyBkZSBub2Rlcy1pLi4uXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyOTcKK21zZ2lkICJDYW4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIiCittc2dzdHIgIk5vIGVzIHBvdCBhc3NpZ25hciBsYSBtZW3DsnJpYSBpbnRlcm3DqGRpYSBkZSBibG9jcyIKKworIzogbWlzYy9lMmltYWdlLmM6MTMzNiBtaXNjL2UyaW1hZ2UuYzoxMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGl0ZXJhdGluZyBvdmVyIGlub2RlICV1IgorbXNnc3RyICJtZW50cmUgcydpdGVyYXZhIHNvYnJlIGVsIG5vZGUtaSAldSIKKworIzogbWlzYy9lMmltYWdlLmM6MTM4MQorbXNnaWQgIlJhdyBhbmQgcWNvdzIgaW1hZ2VzIGNhbm5vdCBiZSBpbnN0YWxsZWQiCittc2dzdHIgIk5vIGVzIHBvZGVuIGluc3RhbMK3bGFyIGxlcyBpbWF0Z2VzIHJhdyBpIFFDT1cyIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDAzCittc2dpZCAiZXJyb3IgcmVhZGluZyBiaXRtYXBzIgorbXNnc3RyICJlcnJvciBlbiBsbGVnaXIgZWxzIG1hcGVzIGRlIGJpdHMiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MTUKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGRldmljZSBmaWxlIgorbXNnc3RyICJlbiBvYnJpciBlbCBmaXR4ZXIgZGUgZGlzcG9zaXRpdXMiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MjYKK21zZ2lkICJ3aGlsZSByZXN0b3JpbmcgdGhlIGltYWdlIHRhYmxlIgorbXNnc3RyICJlbiByZXN0YXVyYXIgbGEgdGF1bGEgZCdpbWF0Z2VzIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTIzCittc2dpZCAiLWEgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCByYXcgb3IgUUNPVzIgaW1hZ2VzLiIKK21zZ3N0ciAibCdvcGNpw7MgLWEgbm9tw6lzIGVzIHBvdCBmZXIgc2VydmlyIGFtYiBpbWF0Z2VzIHJhdyBvIFFDT1cyLiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUyOQorbXNnaWQgIk9mZnNldHMgYXJlIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIgorbXNnc3RyICJFbHMgZGVzcGxhw6dhbWVudHMgbm9tw6lzIGVzIHBvZGVuIGZlciBzZXJ2aXIgZW4gaW1hdGdlcyByYXcuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTM0Cittc2dpZCAiTW92ZSBtb2RlIGlzIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIgorbXNnc3RyICJFbCBtb2RlIMKrTW91cmXCuyBub23DqXMgZXMgcG90IGZlciBzZXJ2aXIgZW4gaW1hdGdlcyByYXcuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTM5Cittc2dpZCAiTW92ZSBtb2RlIHJlcXVpcmVzIGFsbCBkYXRhIG1vZGUuIgorbXNnc3RyICJFbCBtb2RlIMKrTW91cmXCuyBuZWNlc3NpdGEgZWwgbW9kZSDCq3RvdGVzIGxlcyBkYWRlc8K7LiIKKworIzogbWlzYy9lMmltYWdlLmM6MTU0OQorbXNnaWQgImNoZWNraW5nIGlmIG1vdW50ZWQiCittc2dzdHIgImVzIGNvbXByb3ZhIHNpIGVzdMOgIG11bnRhdCIKKworIzogbWlzYy9lMmltYWdlLmM6MTU1NgorbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGUyaW1hZ2Ugb24gYSBSL1cgbW91bnRlZCBmaWxlc3lzdGVtIGNhbiByZXN1bHQgaW4gYW5cbiIKKyJpbmNvbnNpc3RlbnQgaW1hZ2Ugd2hpY2ggd2lsbCBub3QgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4iCisiVXNlIC1mIG9wdGlvbiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gdGhhdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkV4ZWN1dGFyIGUyaW1hZ2UgZW4gdW4gc2lzdGVtYSBkZSBmaXR4ZXJzIG11bnRhdCBjb20gYSBML0UgcG90IHJlc3VsdGFyXG4iCisiZW4gdW5hIGltYXRnZSBpbmNvbnNpc3RlbnQgcXVlIHBvdCBubyBzZXIgw7p0aWwgcGVyIGRlcHVyYXIuXG4iCisiRmV1IHNlcnZpciBsJ29wY2nDsyAtZiBzaSByZWFsbWVudCB2b2xldSBmZXItaG8uXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MDgKK21zZ2lkICJRQ09XMiBpbWFnZSBjYW4gbm90IGJlIHdyaXR0ZW4gdG8gdGhlIHN0ZG91dCFcbiIKK21zZ3N0ciAiTGEgaW1hdGdlIFFDT1cyIG5vIGVzIHBvdCBlc2NyaXVyZSBhIGxhIHNvcnRpZGEgZXN0w6BuZGFyZCAoc3Rkb3V0KSFcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYxNAorbXNnaWQgIkNhbiBub3Qgc3RhdCBvdXRwdXRcbiIKK21zZ3N0ciAiTm8gZXMgcG90IHZldXJlIGwnZXN0YXQgZGUgbGEgc29ydGlkYVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkltYWdlICglcykgaXMgY29tcHJlc3NlZFxuIgorbXNnc3RyICJMYSBpbWF0Z2UgKCVzKSBlc3TDoCBjb21wcmltaWRhXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW1hZ2UgKCVzKSBpcyBlbmNyeXB0ZWRcbiIKK21zZ3N0ciAiTGEgaW1hdGdlICglcykgZXN0w6AgeGlmcmFkYVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjb252ZXJ0IHFjb3cyIGltYWdlICglcykgaW50byByYXcgaW1hZ2UgKCVzKSIKK21zZ3N0ciAiZW4gcHJvdmFyIGRlIGNvbnZlcnRpciB1bmEgaW1hdGdlIFFDT1cyICglcykgZW4gdW5hIGltYXRnZSByYXcgKCVzKSIKKworIzogbWlzYy9lMmltYWdlLmM6MTYzOQorbXNnaWQgIlRoZSAtYyBvcHRpb24gb25seSBzdXBwb3J0ZWQgaW4gcmF3IG1vZGVcbiIKK21zZ3N0ciAiTCdvcGNpw7MgLWMgbm9tw6lzIGVzIHBvdCBmZXIgc2VydmlyIGVuIG1vZGUgcmF3XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NDQKK21zZ2lkICJUaGUgLWMgb3B0aW9uIG5vdCBzdXBwb3J0ZWQgd2hlbiB3cml0aW5nIHRvIHN0ZG91dFxuIgorbXNnc3RyICIiCisiTCdvcGNpw7MgLWMgbm8gZXMgcG90IGZlciBzZXJ2aXIgcXVhbiBzJ2VzY3JpdSBhIGxhIHNvcnRpZGEgZXN0w6BuZGFyZCAiCisiKHN0ZG91dClcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY1MQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgY2hlY2tfYnVmIgorbXNnc3RyICJlbiBhc3NpZ25hciBjaGVja19idWYiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NTcKK21zZ2lkICJUaGUgLXAgb3B0aW9uIG9ubHkgc3VwcG9ydGVkIGluIHJhdyBtb2RlXG4iCittc2dzdHIgIkwnb3BjacOzIC1wIG5vbcOpcyBlcyBwb3QgZmVyIHNlcnZpciBlbSBtb2RlIHJhd1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsb2NrcyBhbHJlYWR5IGNvbnRhaW5lZCB0aGUgZGF0YSB0byBiZSBjb3BpZWRcbiIKK21zZ3N0ciAiJWQgYmxvY3MgamEgY29udGVuZW4gbGVzIGRhZGVzIHF1ZSBjYWwgY29waWFyXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBvcGVuICVzXG4iCittc2dzdHIgImUybGFiZWw6IG5vIGVzIHBvdCBvYnJpciAlc1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IG5vIGVzIHBvdCBhbmFyIGFsIHN1cGVyYmxvY1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciByZWFkaW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogcydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgZWwgc3VwZXJibG9jXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IG5vdCBhbiBleHQyIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiZTJsYWJlbDogYXF1ZXN0IG5vIMOpcyB1biBzaXN0ZW1hIGRlIGZpdHhlcnMgZXh0MlxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo5NyBtaXNjL3R1bmUyZnMuYzoyMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGxhYmVsIHRvbyBsb25nLCB0cnVuY2F0aW5nLlxuIgorbXNnc3RyICJBdsOtczogbCdldGlxdWV0YSDDqXMgbWFzc2EgbGxhcmdhLCBlcyB0cnVuY2Fyw6AuXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrIGFnYWluXG4iCittc2dzdHIgImUybGFiZWw6IG5vIGVzIHBvdCB0b3JuYXIgYSBhbmFyIGFsIHN1cGVyYmxvY1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3Igd3JpdGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFibGU6IHMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZXNjcml1cmUgZWwgc3VwZXJibG9jXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjExNyBtaXNjL3R1bmUyZnMuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGUybGFiZWwgZGV2aWNlIFtuZXdsYWJlbF1cbiIKK21zZ3N0ciAiRm9ybWEgZCfDunM6IGUybGFiZWwgZGlzcG9zaXRpdSBbZXRpcXVldGFub3ZhXVxuIgorCisjOiBtaXNjL2UydW5kby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyA8dHJhbnNhY3Rpb24gZmlsZT4gPGZpbGVzeXN0ZW0+XG4iCittc2dzdHIgIkZvcm1hIGQnw7pzOiAlcyA8Zml0eGVyIGRlIHRyYW5zYWNjaW9ucz4gPHNpc3RlbWEgZGUgZml0eGVycz5cbiIKKworIzogbWlzYy9lMnVuZG8uYzo1MgorbXNnaWQgIkZhaWxlZCB0byByZWFkIHRoZSBmaWxlIHN5c3RlbSBkYXRhIFxuIgorbXNnc3RyICJObyBzJ2hhbiBwb2d1dCBsbGVnaXIgbGVzIGRhZGVzIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NjIgbWlzYy9lMnVuZG8uYzo4MyBtaXNjL2UydW5kby5jOjEwOCBtaXNjL2UydW5kby5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX2ZldGNoICVzXG4iCittc2dzdHIgIkhhIGZhbGxhdCBsYSB0ZGJfZmV0Y2ggJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIKK21zZ3N0ciAiTCdob3JhIGRlIG11bnRhdGdlIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgbm8gY29uY29yZGEgYW1iICV1XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6ODkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gVVVJRCBkaWRuJ3QgbWF0Y2ggXG4iCittc2dzdHIgIkwnVVVJRCBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIG5vIGNvbmNvcmRhIFxuIgorCisjOiBtaXNjL2UydW5kby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX29wZW4gJXNcbiIKK21zZ3N0ciAiSGEgZmFsbGF0IGxhIHRkYl9vcGVuICVzXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBkZXRlcm1pbmFyIHNpICVzIGVzdMOgIG11bnRhdC5cbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNzUKK21zZ2lkICJlMnVuZG8gc2hvdWxkIG9ubHkgYmUgcnVuIG9uIHVubW91bnRlZCBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICIiCisiZTJ1bmRvIG5vbcOpcyBzJ2hhdXJpYSBkJ2V4ZWN1dGFyIGVuIHVuIHNpc3RlbWEgZGUgZml0eGVycyBzZW5zZSBtdW50YXJcbiIKKworIzogbWlzYy9lMnVuZG8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXNcbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnJpciAlc1xuIgorCisjOiBtaXNjL2UydW5kby5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBsYXllZCB0cmFuc2FjdGlvbiBvZiBzaXplICV6ZCBhdCBsb2NhdGlvbiAlbGx1XG4iCittc2dzdHIgIiIKKyJTJ2hhIHRvcm5hdCBhIGR1ciBhIHRlcm1lIGxhIHRyYW5zYWNjacOzIGRlIG1pZGEgJXpkIGEgbGEgdWJpY2FjacOzICVsbHVcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHdyaXRlICVzXG4iCittc2dzdHIgIkhhIGZhbGxhdCBsJ2VzY3JpcHR1cmEgJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGNvdWxkbid0IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIkFWw41TOiBubyBzJ2hhIHBvZ3V0IG9icmlyICVzOiAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogYmFkIGZvcm1hdCBvbiBsaW5lICVkIG9mICVzXG4iCittc2dzdHIgIkFWw41TOiBmb3JtYXQgZXJyb25pIGEgbGEgbMOtbmlhICVkIGRlICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM3MAorbXNnaWQgIiIKKyJXQVJOSU5HOiBZb3VyIC9ldGMvZnN0YWIgZG9lcyBub3QgY29udGFpbiB0aGUgZnNjayBwYXNzbm9cbiIKKyJcdGZpZWxkLiAgSSB3aWxsIGtsdWRnZSBhcm91bmQgdGhpbmdzIGZvciB5b3UsIGJ1dCB5b3VcbiIKKyJcdHNob3VsZCBmaXggeW91ciAvZXRjL2ZzdGFiIGZpbGUgYXMgc29vbiBhcyB5b3UgY2FuLlxuIgorIlxuIgorbXNnc3RyICIiCisiQVbDjVM6IEVsIGZpdHhlciAvZXRjL2ZzdGFiIG5vIGNvbnTDqSBlbCBjYW1wIHBhc3NubyBkZSBsJ2ZzY2suXG4iCisiXHRTJ2ludGVudGFyw6AgYXJyZWdsYXItaG8gdGVtcG9yYWxtZW50LCBwZXLDsiBobyBoYXVyw61ldSBkZVxuIgorIlx0c29sdWNpb25hciBjb3JyZWdpbnQgZWwgZml0eGVyIC9ldGMvZnN0YWIgY29tIG3DqXMgYXZpYXQgbWlsbG9yLlxuIgorIlxuIgorCisjOiBtaXNjL2ZzY2suYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogJXM6IG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiAlczogbm8gcydoYSB0cm9iYXRcbiIKKworIzogbWlzYy9mc2NrLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YWl0OiBObyBtb3JlIGNoaWxkIHByb2Nlc3M/IT9cbiIKK21zZ3N0ciAiJXM6IHdhaXQ6IG5vIGhpIGhhIGNhcCBtw6lzIHByb2PDqXMgZmlsbCE/XG4iCisKKyM6IG1pc2MvZnNjay5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nLi4uICVzIGZvciBkZXZpY2UgJXMgZXhpdGVkIHdpdGggc2lnbmFsICVkLlxuIgorbXNnc3RyICJBdsOtcy4uLiAlcyBwZXIgYWwgZGlzcG9zaXRpdSAlcyBoYSBzb3J0aXQgYW1iIGVsIHNlbnlhbCAlZC5cbiIKKworIzogbWlzYy9mc2NrLmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzOiBzdGF0dXMgaXMgJXgsIHNob3VsZCBuZXZlciBoYXBwZW4uXG4iCittc2dzdHIgIiVzICVzOiBsJ2VzdGF0IMOpcyAleCwgY29zYSBxdWUgbm8gaGF1cmlhIGRlIHN1Y2NlaXIgbWFpLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluaXNoZWQgd2l0aCAlcyAoZXhpdCBzdGF0dXMgJWQpXG4iCittc2dzdHIgIlMnaGEgZmluYWxpdHphdCBhbWIgJXMgKGVzdGF0IGRlIHNvcnRpZGEgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiVzOiBzJ2hhIHByb2R1w690IGwnZXJyb3IgJWQgZW4gZXhlY3V0YXIgbCdmc2NrLiVzIHBlciBhICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjc0MgorbXNnaWQgIiIKKyJFaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlIGZpbGVzeXN0ZW0gdHlwZXMgcGFzc2VkIHRvIC10IG11c3QgYmUgcHJlZml4ZWRcbiIKKyJ3aXRoICdubycgb3IgJyEnLlxuIgorbXNnc3RyICIiCisiTyBiw6kgdG90cyBvIGNhcCBkZWxzIHNpc3RlbWVzIGRlIGZpdHhlcnMgcGFzc2F0cyBhIGwnb3BjacOzIC10IHMnaGFuIGRlICIKKyJwcmVmaXhhclxuIgorImFtYiDCq25vwrsgbyDCqyHCuy5cbiIKKworIzogbWlzYy9mc2NrLmM6NzYxCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBmaWxlc3lzdGVtIHR5cGVzXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYXNzaWduYXIgbWVtw7JyaWEgcGVyIGFsIHNpc3RlbWEgZGUgZml0eGVyc1xuIgorCisjOiBtaXNjL2ZzY2suYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBza2lwcGluZyBiYWQgbGluZSBpbiAvZXRjL2ZzdGFiOiBiaW5kIG1vdW50IHdpdGggbm9uemVybyBmc2NrIHBhc3MgIgorIm51bWJlclxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiBjYW5ub3QgY2hlY2sgJXM6IGZzY2suJXMgbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6IG5vIGVzIHBvdCBjb21wcm92YXIgJXM6IG5vIHMnaGEgdHJvYmF0IGVsIGZzY2suJXNcbiIKKworIzogbWlzYy9mc2NrLmM6OTY3Cittc2dpZCAiQ2hlY2tpbmcgYWxsIGZpbGUgc3lzdGVtcy5cbiIKK21zZ3N0ciAiUydlc3RhbiBjb21wcm92YW50IHRvdHMgZWxzIHNpc3RlbWVzIGRlIGZpdHhlcnMuXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS13YWl0aW5nLS0gKHBhc3MgJWQpXG4iCittc2dzdHIgIi0tZW4gZXNwZXJhLS0gKHBhcyAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6MTA3OAorbXNnaWQgIiIKKyJVc2FnZTogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGZzdHlwZV0gW2ZzLW9wdGlvbnNdIFtmaWxlc3lzIC4uLl1cbiIKK21zZ3N0ciAiIgorIkZvcm1hIGQnw7pzOiBmc2NrIFstQU1OUFJUVl0gWyAtQyBbIGZkIF0gXSBbLXQgdGlwdXNkZXNpc3RkZWZpdHhlcnNdIFtvcGNpb25zLSIKKyJkZWxzaXN0ZGVmaXR4ZXJzXSBbc2lzdGRlZml0eGVycyAuLi5dXG4iCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiJXM6IHMnaGFuIGVzcGVjaWZpY2F0IG1hc3NhIGRpc3Bvc2l0aXVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjExNTMgbWlzYy9mc2NrLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIiVzOiBzJ2hhbiBlc3BlY2lmaWNhdCBtYXNzYSBhcmd1bWVudHNcbiIKKworIzogbWlzYy9sc2F0dHIuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmFkbHZdIFtmaWxlcy4uLl1cbiIKK21zZ3N0ciAiRm9ybWEgZCfDunM6ICVzIFstUlZhZGx2XSBbZml0eGVycy4uLl1cbiIKKworIzogbWlzYy9sc2F0dHIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJFbiBsbGVnaXIgZWxzIHNlbnlhbGFkb3JzIGEgJXMiCisKKyM6IG1pc2MvbHNhdHRyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJFbiBsbGVnaXIgbGEgdmVyc2nDsyBhICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstY3wtbCBmaWxlbmFtZV0gWy1iIGJsb2NrLXNpemVdIFstQyBjbHVzdGVyLXNpemVdXG4iCisiXHRbLWkgYnl0ZXMtcGVyLWlub2RlXSBbLUkgaW5vZGUtc2l6ZV0gWy1KIGpvdXJuYWwtb3B0aW9uc11cbiIKKyJcdFstRyBmbGV4LWdyb3VwLXNpemVdIFstTiBudW1iZXItb2YtaW5vZGVzXVxuIgorIlx0Wy1tIHJlc2VydmVkLWJsb2Nrcy1wZXJjZW50YWdlXSBbLW8gY3JlYXRvci1vc11cbiIKKyJcdFstZyBibG9ja3MtcGVyLWdyb3VwXSBbLUwgdm9sdW1lLWxhYmVsXSBbLU0gbGFzdC1tb3VudGVkLWRpcmVjdG9yeV1cbiIKKyJcdFstTyBmZWF0dXJlWywuLi5dXSBbLXIgZnMtcmV2aXNpb25dIFstRSBleHRlbmRlZC1vcHRpb25bLC4uLl1dXG4iCisiXHRbLXQgZnMtdHlwZV0gWy1UIHVzYWdlLXR5cGUgXSBbLVUgVVVJRF0gWy1qbnF2REZLU1ZdIGRldmljZSBbYmxvY2tzLSIKKyJjb3VudF1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJSdW5uaW5nIGNvbW1hbmQ6ICVzXG4iCittc2dzdHIgIlMnZXN0w6AgZXhlY3V0YW50IGwnb3JkcmU6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBydW4gJyVzJyIKK21zZ3N0ciAiZW4gaW50ZW50YXIgZXhlY3V0YXIgwqslc8K7IgorCisjOiBtaXNjL21rZTJmcy5jOjI2MworbXNnaWQgIndoaWxlIHByb2Nlc3NpbmcgbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gcHJvZ3JhbSIKK21zZ3N0ciAiZW4gcHJvY2Vzc2FyIGxhIGxsaXN0YSBkZSBibG9jcyBlcnJvbmlzIGRlcyBkZWwgcHJvZ3JhbWEiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVkIGluIHByaW1hcnkgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9yIGFyZWEgYmFkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrcyAldSB0aHJvdWdoICV1IG11c3QgYmUgZ29vZCBpbiBvcmRlciB0byBidWlsZCBhIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJFbHMgYmxvY3MgJXUgZmlucyBhICV1IGhhbiBkJ8Opc3NlciBjb3JyZWN0ZXMgcGVyIGEgcG9kZXIgY3JlYXIgdW4gc2lzdGVtYSBkZSAiCisiZml0eGVycy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTUKK21zZ2lkICJBYm9ydGluZy4uLi5cbiIKK21zZ3N0ciAiUydlc3TDoCBpbnRlcnJvbXBlbnQuLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHRoZSBiYWNrdXAgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9ycyBhdCBibG9jayAldSBjb250YWluXG4iCisiXHRiYWQgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiQXbDrXM6IGVsIHN1cGVyYmxvYyBvIGRlc2NyaXB0b3JzIGRlIGdydXAgZGUgY8OycGlhIGRlIHNlZ3VyZXRhdCBhbCBibG9jICV1XG4iCisiXHRjb250ZW5lbiBibG9jcyBlcnJvbmlzLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjMzNAorbXNnaWQgIndoaWxlIG1hcmtpbmcgYmFkIGJsb2NrcyBhcyB1c2VkIgorbXNnc3RyICJlbiBtYXJjYXIgZWxzIGJsb2NzIGVycm9uaXMgY29tIGEgdXRpbGl0emF0cyIKKworIzogbWlzYy9ta2UyZnMuYzozODYKK21zZ2lkICJXcml0aW5nIGlub2RlIHRhYmxlczogIgorbXNnc3RyICJFc2NyaXB0dXJhIGRlIGxlcyB0YXVsZXMgZGUgbm9kZXMtaToiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3Qgd3JpdGUgJWQgYmxvY2tzIGluIGlub2RlIHRhYmxlIHN0YXJ0aW5nIGF0ICVsbHU6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJObyBzJ2hhbiBwb2d1dCBlc2NyaXVyZSAlZCBibG9jcyBhIGxhIHRhdWxhIGRlIG5vZGVzLWkgcXVlIGNvbWVuw6dhIGEgJWxsdTogIgorIiVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDIxIG1pc2MvbWtlMmZzLmM6MjQ3OSBtaXNjL21rZTJmcy5jOjI3NjQKK21zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorbXNnc3RyICJmZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDMyCittc2dpZCAid2hpbGUgY3JlYXRpbmcgcm9vdCBkaXIiCittc2dzdHIgImVuIGNyZWFyIGVsIGRpcmVjdG9yaSBhcnJlbCIKKworIzogbWlzYy9ta2UyZnMuYzo0MzkKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHJvb3QgaW5vZGUiCittc2dzdHIgImVuIGxsZWdpciBlbCBub2RlIGFycmVsIgorCisjOiBtaXNjL21rZTJmcy5jOjQ1MQorbXNnaWQgIndoaWxlIHNldHRpbmcgcm9vdCBpbm9kZSBvd25lcnNoaXAiCittc2dzdHIgImVuIGVzdGFibGlyIGxhIHByb3BpZXRhdCBkZWwgbm9kZS1pIGFycmVsIgorCisjOiBtaXNjL21rZTJmcy5jOjQ2OQorbXNnaWQgIndoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJlbiBjcmVhciAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0NzYKK21zZ2lkICJ3aGlsZSBsb29raW5nIHVwIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJlbiBjZXJjYXIgZWwgL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDg5Cittc2dpZCAid2hpbGUgZXhwYW5kaW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJlbiBleHBhbmRpciBlbCAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo1MDQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAiZW4gZXN0YWJsaXIgZWwgbm9kZS1pIGRlIGJsb2NzIGVycm9uaXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk91dCBvZiBtZW1vcnkgZXJhc2luZyBzZWN0b3JzICVkLSVkXG4iCittc2dzdHIgIlMnaGEgZXhoYXVyaXQgbGEgbWVtw7JyaWEgZW4gZXNib3JyYXIgZWxzIHNlY3RvcnMgJWQtJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgYmxvY2sgMDogJXNcbiIKK21zZ3N0ciAiQXbDrXM6IG5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIGJsb2MgMDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IGVyYXNlIHNlY3RvciAlZDogJXNcbiIKK21zZ3N0ciAiQXbDrXM6IG5vIHMnaGEgcG9ndXQgZXNib3JyYXIgZWwgc2VjdG9yICVkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU3MworbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgImVuIGluaWNpYWxpdHphciBlbCBzdXBlcmJsb2MgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyIKKworIzogbWlzYy9ta2UyZnMuYzo1ODEKK21zZ2lkICJaZXJvaW5nIGpvdXJuYWwgZGV2aWNlOiAiCittc2dzdHIgIlMnZXN0YW4gZXNjcml2aW50IHplcm9zIGFsIGRpc3Bvc2l0aXUgZGUgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zOiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBqb3VybmFsIGRldmljZSAoYmxvY2sgJWxsdSwgY291bnQgJWQpIgorbXNnc3RyICIiCisiZW4gZXNjcml1cmUgemVyb3MgYWwgZGlzcG9zaXRpdSBkZSByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgKGJsb2MgJWxsdSwgIgorInJlY29tcHRlICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzo2MTEKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAiZW4gZXNjcml1cmUgZWwgc3VwZXJibG9jIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGZpbGVzeXN0ZW0gd2l0aCAlbGx1ICVkayBibG9ja3MgYW5kICV1IGlub2Rlc1xuIgorbXNnc3RyICJTJ2VzdMOgIGNyZWFudCB1biBzaXN0ZW1hIGRlIGZpdHhlcnMgYW1iICVsbHUgJWRrIGJsb2NzIGkgJXUgbm9kZXMtaVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2FybmluZzogJWxsdSBibG9ja3MgdW51c2VkLlxuIgorIlxuIgorbXNnc3RyICIiCisiYXbDrXM6ICVsbHUgYmxvY3Mgbm8gdXRpbGl0emF0cy5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBsYWJlbD0lc1xuIgorbXNnc3RyICJFdGlxdWV0YSBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzPSVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIk9TIHR5cGU6ICVzXG4iCittc2dzdHIgIlRpcHVzIGRlIHNpc3RlbWEgb3BlcmF0aXU6ICVzXG4iCisKKyMgRklYTUU6IGxvZworIzogbWlzYy9ta2UyZnMuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJNaWRhIGRlbCBibG9jPSV1IChsb2c9JXUpXG4iCisKKyMgRklYTUU6IGxvZworIzogbWlzYy9ta2UyZnMuYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2x1c3RlciBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIk1pZGEgZGVsIGdydXAgZGUgc2VjdG9ycz0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGcmFnbWVudCBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIk1pZGEgZGVsIGZyYWdtZW50PSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0cmlkZT0ldSBibG9ja3MsIFN0cmlwZSB3aWR0aD0ldSBibG9ja3NcbiIKK21zZ3N0ciAiU3RyaWRlPSV1IGJsb2NzLCBhbXBsYWRhIGRlbCBTdHJpcGU9JXUgYmxvY3NcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzLCAlbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIldSBub2Rlcy1pLCAlbGx1IGJsb2NzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsbHUgYmxvY2tzICglMi4yZiUlKSByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIHVzZXJcbiIKK21zZ3N0ciAiJWxsdSBibG9jcyAoJTIuMmYlJSkgcmVzZXJ2YXRzIHBlciBhbCBzdXBlcnVzdWFyaVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCBkYXRhIGJsb2NrPSV1XG4iCittc2dzdHIgIkJsb2MgZGUgZGFkZXMgaW5pY2lhbD0ldVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJSb290IGRpcmVjdG9yeSBvd25lcj0ldToldVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9JWx1XG4iCittc2dzdHIgIk3DoHhpbSBkZSBibG9jcyBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzPSVsdVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cHNcbiIKK21zZ3N0ciAiJXUgZ3J1cHMgZGUgYmxvY3NcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgZ3J1cCBkZSBibG9jc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBjbHVzdGVycyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgYmxvY3MgcGVyIGdydXAsICV1IGdydXBzIGRlIHNlY3RvcnMgcGVyIGdydXBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgZnJhZ21lbnRzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBibG9jcyBwZXIgZ3J1cCwgJXUgZnJhZ21lbnRzIHBlciBncnVwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgbm9kZXMtaSBwZXIgZ3J1cFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIFVVSUQ6ICVzXG4iCittc2dzdHIgIlVVSUQgZGVsIHNpc3RlbWEgZGUgZml0eGVycz0lc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OQorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgIkPDsnBpZXMgZGUgc2VndXJldGF0IGRlbCBzdXBlcmJsb2MgZGVzYWRlcyBlbiBlbHMgYmxvY3M6ICIKKworIzogbWlzYy9ta2UyZnMuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgJy1PIDY0Yml0J1xuIgorbXNnc3RyICIlcyBuZWNlc3NpdGEgwqstTyA2NGJpdMK7XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbXVzdCBiZSBiZWZvcmUgJ3Jlc2l6ZT0ldSdcbiIKK21zZ3N0ciAiwqslc8K7IGhhIGQnYW5hciBhYmFucyBkZSDCq3Jlc2l6ZT0ldcK7XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Nzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZGVzY19zaXplOiAnJXMnXG4iCittc2dzdHIgIkVsIGRlc2Nfc2l6ZSBubyDDqXMgdsOgbGlkOiDCqyVzwrtcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvZmZzZXQ6ICVzXG4iCittc2dzdHIgIkVsIGRlc3BsYcOnYW1lbnQgbm8gw6lzIHbDoGxpZDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MTIgbWlzYy90dW5lMmZzLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCittc2dzdHIgIkwnbW1wX3VwZGF0ZV9pbnRlcnZhbCBubyDDqXMgdsOgbGlkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICMgb2YgYmFja3VwIHN1cGVyYmxvY2tzOiAlc1xuIgorbXNnc3RyICJFbCBub21icmUgZGUgc3VwZXJibG9jcyBkZSBsYSBjw7JwaWEgZGUgc2VndXJldGF0IG5vIMOpcyB2w6BsaWQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaWRlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiRWwgcGFyw6BtZXRyZSBkZSBzdHJpZGUgbm8gw6lzIHbDoGxpZDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpcGUtd2lkdGggcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJMJ2FtcGxhZGEgZGVsIHN0cmlwZSBubyDDqXMgdsOgbGlkYTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXNpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXLDoG1ldHJlIGRlIGNhbnZpIGRlIG1pZGEgbm8gdsOgbGlkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg5MworbXNnaWQgIlRoZSByZXNpemUgbWF4aW11bSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgZmlsZXN5c3RlbSBzaXplLlxuIgorbXNnc3RyICIiCisiRWwgbcOgeGltIGRlbCBjYW52aSBkZSBtaWRhIGhhIGRlIHNlciBtw6lzIGdyYW4gcXVlIGxhIG1pZGEgZGVsIHNpc3RlbWEgZGUgIgorImZpdHhlcnMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTE3Cittc2dpZCAiT24tbGluZSByZXNpemluZyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiRWwgY2FudmkgZGUgbWlkYSBlbiBsw61uaWEgbm8gw6lzIGNvbXBhdGlibGUgYW1iIHNpc3RlbWVzIGRlIGZpdHhlcnMgZGUgdmVyc2nDsyAiCisiMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjk0NCBtaXNjL21rZTJmcy5jOjk1MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJvb3Rfb3duZXI6ICclcydcbiIKK21zZ3N0ciAiRWwgcm9vdF9vd25lciBubyDDqXMgdsOgbGlkOiDCqyVzwrtcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBxdW90YXR5cGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJFbCBxdW90YXR5cGUgbm8gw6lzIHbDoGxpZDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdG1tcF91cGRhdGVfaW50ZXJ2YWw9PGludGVydmFsPlxuIgorIlx0bnVtX2JhY2t1cF9zYj08MHwxfDI+XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgZGF0YSBjaHVuayBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGUtd2lkdGg9PFJBSUQgc3RyaWRlICogZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHRvZmZzZXQ9PG9mZnNldCB0byBjcmVhdGUgdGhlIGZpbGUgc3lzdGVtPlxuIgorIlx0cmVzaXplPTxyZXNpemUgbWF4aW11bSBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHBhY2tlZF9tZXRhX2Jsb2Nrcz08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdGxhenlfaXRhYmxlX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRsYXp5X2pvdXJuYWxfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdHJvb3RfdWlkPTx1aWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisiXHRyb290X2dpZD08Z2lkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0dGVzdF9mc1xuIgorIlx0ZGlzY2FyZFxuIgorIlx0bm9kaXNjYXJkXG4iCisiXHRxdW90YXR5cGU9PHVzciBPUiBncnA+XG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTJ2hhIGVzcGVjaWZpY2F0IHVuYSBvIHbDoHJpZXMgb3BjaW9ucyBpbmNvcnJlY3RlczogJXNcbiIKKyJcbiIKKyJMZXMgb3BjaW9ucyBlc3Rlc2VzIHNlIHNlcGFyZW4gYW1iIGNvbWVzLCBpIGhhbiBkZSB0ZW5pciB1biBhcmd1bWVudFxuIgorIlx0cXVlIHMnZXN0YWJsZWl4IGFtYiBlbCBzaWduZSBpZ3VhbCAowqs9wrspLlxuIgorIlxuIgorIkxlcyBvcGNpb25zIGVzdGVzZXMgdsOgbGlkZXMgc29uOlxuIgorIlx0bW1wX3VwZGF0ZS0uaW50ZXJ2YWw9PGludGVydmFsPlxuIgorIlx0bnVtX2JhY2t1cF9zYj08MHwxfDI+XG4iCisiXHRzdHJpZGU9PHRyb3Nzb3MgZGUgZGFkZXMgcGVyIGRpc2MgUkFJRCBlbiBibG9jcz5cbiIKKyJcdHN0cmlkZS13aWR0aD08c3RyaWRlIGRlbCBSQUlEICogZGlzY3MgZGUgZGFkZXMgZW4gYmxvY3M+XG4iCisiXHRvZmZzZXQ9PGRlc3BsYcOnYW1lbnQgcGVyIGNyZWFyIGVsIHNpc3RlbWEgZGUgZml0eGVycz5cbiIKKyJcdHJlc2l6ZT08bWlkYSBtw6B4aW1hIGRlbCByZWRpbWVuc2lvbmF0IGVuIGJsb2NzPlxuIgorIlx0cGFja2VkX21ldGFfYmxvY3M9PDAgcGVyIGRlc2hhYmlsaXRhci1sbywgMSBwZXIgaGFiaWxpdGFyLWxvPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCBwZXIgZGVzaGFiaWxpdGFyLWxvLCAxIHBlciBoYWJpbGl0YXItbG8+XG4iCisiXHRsYXp5X2pvdXJuYWxfaW5pdD08MCBwZXIgZGVzaGFiaWxpdGFyLWxvLCAxIHBlciBoYWJpbGl0YXItbG8+XG4iCisiXHRyb290X3VpZD08aWQgZGVsIHVzdWFyaSBkZWwgZGlyZWN0b3JpIGFycmVsPlxuIgorIlx0cm9vdF9naWQ9PGlkIGRlbCBncnVwIGRlbCBkaXJlY3RvcmkgYXJyZWw+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXN1YXJpIG8gZ3J1cD5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiBSQUlEIHN0cmlwZS13aWR0aCAldSBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiBzdHJpZGUgJXUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBdsOtczogbCdhbXBsYWRhIGRlIGwnc3RyaXBlIGRlbCBSQUlEICV1IG5vIMOpcyB1biBtw7psdGlwbGUgc2VuYXIgZGUgbCdzdHJpZGUgIgorIiV1LlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBta2UyZnMgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKyJFcnJvciBkZSBzaW50YXhpIGVuIGVsIGZpdHhlciBkZSBjb25maWd1cmFjacOzIGRlbCBta2UyZnMgKCVzLCBsw61uaWEgbm8uICVkKVxuIgorIlx0JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDY4IG1pc2MvdHVuZTJmcy5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGZpbGVzeXN0ZW0gb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiUydoYSBkZWZpbml0IHVuYSBvcGNpw7MgZGVsIHNpc3RlbWEgZGUgZml0eGVycyBubyB2w6BsaWRhOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwODAgbWlzYy90dW5lMmZzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiUydoYSBlc3RhYmxlcnQgdW5hIG9wY2nDsyBkZSBtdW50YXRnZSBubyB2w6BsaWRhOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIllvdXIgbWtlMmZzLmNvbmYgZmlsZSBkb2VzIG5vdCBkZWZpbmUgdGhlICVzIGZpbGVzeXN0ZW0gdHlwZS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkVsIHZvc3RyZSBmaXR4ZXIgbWtlMmZzLmNvbmYgbm8gZGVmaW5laXggZWwgdGlwdXMgZGUgc2lzdGVtYSBkZSBmaXR4ZXJzICVzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjQKK21zZ2lkICIiCisiWW91IHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBhbiB1cGRhdGVkIG1rZTJmcy5jb25mIGZpbGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJTZWd1cmFtZW50IGNhbCBxdWUgaW5zdGFswrdsZXUgdW4gZml0eGVyIG1rZTJmcy5jb25mIGFjdHVhbGl0emF0LlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjgKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICJTJ2ludGVycm9tcC4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBmc190eXBlICVzIGlzIG5vdCBkZWZpbmVkIGluIG1rZTJmcy5jb25mXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBdmlzOiBlbCBmc190eXBlICVzIG5vIGVzdMOgIGRlZmluaXQgYSBsJ21rZTJmcy5jb25mXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ0OQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IFBBVEguXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYXNzaWduYXIgbWVtw7JyaWEgcGVyIGFsIG5vdSBDQU3DjS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGluaXQgcHJvZmlsZSBzdWNjZXNzZnVsbHkgKGVycm9yOiAlbGQpLlxuIgorbXNnc3RyICJFbCBwZXJmaWwgbm8gcydoYSBwb2d1dCBpbmljaWFsaXR6YXIgY29ycmVjdGFtZW50IChlcnJvcjogJWxkKS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTIzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2sgc2l6ZSAtICVzIgorbXNnc3RyICJtaWRhIGRlIGJsb2Mgbm8gdsOgbGlkYSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogYmxvY2tzaXplICVkIG5vdCB1c2FibGUgb24gbW9zdCBzeXN0ZW1zLlxuIgorbXNnc3RyICIiCisiQXbDrXM6IGxhIG1pZGEgZGUgYmxvYyAlZCBubyBlcyBwb3QgdXRpbGl0emFyIGEgbGEgbWFqb3JpYSBkZWxzIHNpc3RlbWVzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjbHVzdGVyIHNpemUgLSAlcyIKK21zZ3N0ciAibGEgbWlkYSBkZWwgZ3J1cCBkZSBzZWN0b3JzIG5vIMOpcyB2w6BsaWRhIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU1MworbXNnaWQgIictUicgaXMgZGVwcmVjYXRlZCwgdXNlICctRScgaW5zdGVhZCIKK21zZ3N0ciAiwqstUsK7IGphIG5vIGVzdMOgIHN1cG9ydGFkYSwgZmV1IHNlcnZpciDCqy1FwrsiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU2NQorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBibG9ja3MgcGVyIGdyb3VwIgorbXNnc3RyICJOb21icmUgbm8gdsOgbGlkIHBlciBhbHMgYmxvY3MgcGVyIGdydXAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU3MAorbXNnaWQgImJsb2NrcyBwZXIgZ3JvdXAgbXVzdCBiZSBtdWx0aXBsZSBvZiA4IgorbXNnc3RyICJlbCBub21icmUgZGUgYmxvY3MgcGVyIGdydXAgaGEgZGUgc2VyIG3Dumx0aXBsZSBkZSA4IgorCisjOiBtaXNjL21rZTJmcy5jOjE1NzgKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgZmxleF9iZyBzaXplIgorbXNnc3RyICJOw7ptZXJvIG5vIHbDoGxpZCBwZXIgYSBsYSBtaWRhIGRlIGZsZXhfYmciCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4NAorbXNnaWQgImZsZXhfYmcgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMiIKK21zZ3N0ciAibGEgbWlkYSBkZSBmbGV4X2JnIGhhIGRlIHNlciB1bmEgcG90w6huY2lhIGRlIDIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmbGV4X2JnIHNpemUgKCVsdSkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMl4zMSIKK21zZ3N0ciAibGEgbWlkYSBkZSBmbGV4X2JnICglbHUpIGhhIGRlIHNlciBtZW5vciBvIGlndWFsIGEgMl4zMSIKKworIzogbWlzYy9ta2UyZnMuYzoxNjAwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgcmF0aW8gJXMgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJyw6B0aW8gZGUgbm9kZXMtaSAlcyBubyB2w6BsaWRhIChtw61uICVkL23DoHggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgIm1pZGEgZGUgbm9kZS1pIGVycsOybmlhIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyMworbXNnaWQgIiIKKyJXYXJuaW5nOiAtSyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZSAnLUUgIgorIm5vZGlzY2FyZCcgZXh0ZW5kZWQgb3B0aW9uIGluc3RlYWQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjM0Cittc2dpZCAiaW4gbWFsbG9jIGZvciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgInBlcmNlbnRhdGdlIGRlIGJsb2NzIHJlc2VydmF0cyBubyB2w6BsaWQgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW0gaW5vZGVzIC0gJXMiCittc2dzdHIgIm5vbWJyZSBkZSBub2Rlcy1pIG5vIHbDoGxpZCAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uIGxldmVsIC0gJXMiCittc2dzdHIgIm5pdmVsbCBkZSB2ZXJzacOzIGVycm9uaSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSByZXZpc2lvbiAlZCIKK21zZ3N0ciAiZW4gcHJvdmFyIGRlIGNyZWFyIGxhIHZlcnNpw7MgJWQiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY5OAorbXNnaWQgIlRoZSAtdCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICJMJ29wY2nDsyAtdCBub23DqXMgZXMgcG90IGVzcGVjaWZpY2FyIHVuYSB2ZWdhZGEiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTcwNgorbXNnaWQgIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICJMJ29wY2nDsyAtVCBub23DqXMgZXMgcG90IGVzcGVjaWZpY2FyIHVuYSB2ZWdhZGEiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc1OSBtaXNjL21rZTJmcy5jOjI4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBkZXZpY2UgJXNcbiIKK21zZ3N0ciAiZW4gaW50ZW50YXIgb2JyaXIgZWwgZGlzcG9zaXRpdSBkZSByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZGV2IGJsb2Nrc2l6ZSAoJWQpIHNtYWxsZXIgdGhhbiBtaW5pbXVtIGJsb2Nrc2l6ZSAlZFxuIgorbXNnc3RyICIiCisiTGEgbWlkYSBkZSBibG9jIGRlbCBkaXNwb3NpdGl1IGRlIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyAoJWQpIMOpcyBtZW5vciBxdWUgIgorImxhIG1pZGEgbcOtbmltYSBkZSBibG9jICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBqb3VybmFsIGRldmljZSdzIGJsb2Nrc2l6ZTogJWRcbiIKK21zZ3N0ciAiIgorIk1pZGEgZGUgYmxvYyBkZWwgZGlzcG9zaXRpdSBkZSByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgYSB1dGlsaXR6YXI6ICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrcyAnJXMnIG9uIGRldmljZSAnJXMnIgorbXNnc3RyICJub21icmUgZGUgYmxvY3Mgwqslc8K7IG5vIHbDoGxpZCBhbCBkaXNwb3NpdGl1IMKrJXPCuyIKKworIzogbWlzYy9ta2UyZnMuYzoxODA0Cittc2dpZCAiZmlsZXN5c3RlbSIKK21zZ3N0ciAic2lzdGVtYSBkZSBmaXR4ZXJzIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MTcgcmVzaXplL21haW4uYzozOTUKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gc2l6ZSIKK21zZ3N0ciAiZW4gaW50ZW50YXIgZGV0ZXJtaW5hciBsYSBtaWRhIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgyMworbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbVxuIgorbXNnc3RyICIiCisiTm8gcydoYSBwb2d1dCBkZXRlcm1pbmFyIGxhIG1pZGEgZGVsIGRpc3Bvc2l0aXU7IGhhdSBkJ2VzcGVjaWZpY2FyXG4iCisibGEgbWlkYSBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgzMAorbXNnaWQgIiIKKyJEZXZpY2Ugc2l6ZSByZXBvcnRlZCB0byBiZSB6ZXJvLiAgSW52YWxpZCBwYXJ0aXRpb24gc3BlY2lmaWVkLCBvclxuIgorIlx0cGFydGl0aW9uIHRhYmxlIHdhc24ndCByZXJlYWQgYWZ0ZXIgcnVubmluZyBmZGlzaywgZHVlIHRvXG4iCisiXHRhIG1vZGlmaWVkIHBhcnRpdGlvbiBiZWluZyBidXN5IGFuZCBpbiB1c2UuICBZb3UgbWF5IG5lZWQgdG8gcmVib290XG4iCisiXHR0byByZS1yZWFkIHlvdXIgcGFydGl0aW9uIHRhYmxlLlxuIgorbXNnc3RyICIiCisiTGEgbWlkYSBkZWwgZGlzcG9zaXRpdSBzJ2hhIGxsZWdpdCBjb20gYSB6ZXJvLiBPIGLDqSBoZXUgZXNwZWNpZmljYXQgdW5hXG4iCisiXHRwYXJ0aWNpw7Mgbm8gdsOgbGlkYSwgbyBiw6kgbGEgdGF1bGEgZGUgcGFydGljaW9ucyBubyBzJ2hhIHRvcm5hdCBhIGxsZWdpclxuIgorIlx0ZGVzcHLDqXMgZCdleGVjdXRhciBsJ2ZkaXNrIGRlZ3V0IGEgdW5hIHBhcnRpY2nDsyBvY3VwYWRhIGkgZW4gw7pzLiBQb3RcbiIKKyJcdHNlciBxdWUgaMOgZ2l1IGRlIHJlaW5pY2lhciBwZXJxdcOoIGVzIHB1Z3VpIHRvcm5hciBhIGxsZWdpciBsYSB0YXVsYSBkZS5cbiIKKyJcdHBhcnRpY2lvbnMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg0NworbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICIiCisiTGEgbWlkYSBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIMOpcyBtw6lzIGdyYW4gcXVlIGxhIG1pZGEgYXBhcmVudCBkZWwgIgorImRpc3Bvc2l0aXUuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NjcKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZnMgdHlwZXMgbGlzdFxuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBsbGlzdGEgZGUgc2lzdGVtZXMgZGUgZml0eGVyc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MDgKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGhhcmR3YXJlIHNlY3RvciBzaXplIgorbXNnc3RyICJlbiBpbnRlbnRhciBkZXRlcm1pbmFyIGxhIG1pZGEgZGVsIHNlY3RvciBkZWwgbWFxdWluYXJpIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MTQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHBoeXNpY2FsIHNlY3RvciBzaXplIgorbXNnc3RyICJlbiBpbnRlbnRhciBkZXRlcm1pbmFyIGxhIG1pZGEgZsOtc2ljYSBkZWwgc2VjdG9yIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NDYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsIGZvciBkZXZpY2VcbiIKK21zZ3N0ciAiZW4gZXN0YWJsaXIgbGEgbWlkYSBkZWwgYmxvYy4gTWFzc2EgcGV0aXRhIHBlbCBkaXNwb3NpdGl1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogc3BlY2lmaWVkIGJsb2Nrc2l6ZSAlZCBpcyBsZXNzIHRoYW4gZGV2aWNlIHBoeXNpY2FsIHNlY3RvcnNpemUgJWRcbiIKK21zZ3N0ciAiIgorIkF2w61zOiBsYSBtaWRhIGRlbCBibG9jIGVzcGVjaWZpY2FkYSAlZCDDqXMgbcOpcyBwZXRpdGEgcXVlIGxhIG1pZGEgZsOtc2ljYSBkZWwgIgorInNlY3RvciBkZWwgZGlzcG9zaXRpdSAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBTaXplIG9mIGRldmljZSAoMHglbGx4IGJsb2NrcykgJXMgdG9vIGJpZyB0byBiZSBleHByZXNzZWRcbiIKKyJcdGluIDMyIGJpdHMgdXNpbmcgYSBibG9ja3NpemUgb2YgJWQuXG4iCittc2dzdHIgIiIKKyIlczogbGEgbWlkYSBkZWwgZGlzcG9zaXRpdSAoMHglbGx4IGJsb2NzKSAlcyDDqXMgbWFzc2EgZ3JhbiBwZXIgYSBleHByZXNzYXItIgorImxhIFxuIgorIlx0ZW4gMzIgYml0cy4gUyd1dGlsaXR6YXLDoCB1bmEgbWlkYSBkZSBibG9jIGRlICVkLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5OTEKK21zZ2lkICJmc190eXBlcyBmb3IgbWtlMmZzLmNvbmYgcmVzb2x1dGlvbjogIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk5OAorbXNnaWQgIkZpbGVzeXN0ZW0gZmVhdHVyZXMgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorIkxlcyBmdW5jaW9ucyBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIG5vIHPDs24gY29tcGF0aWJsZXMgYW1iIHNpc3RlbWVzIGRlICIKKyJmaXR4ZXJzIGFtYiB2ZXJzacOzIDBcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDA2Cittc2dpZCAiU3BhcnNlIHN1cGVyYmxvY2tzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKyJFbHMgc3VwZXJibG9jcyBkaXNwZXJzb3Mgbm8gc8OzbiBjb21wYXRpYmxlcyBhbWIgc2lzdGVtZXMgZGUgZml0eGVycyBhbWIgIgorInZlcnNpw7MgMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMTgKK21zZ2lkICJKb3VybmFscyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiRWxzIHJlZ2lzdHJlcyBkZSB0cmFuc2FjY2lvbnMgbm8gc8OzbiBjb21wYXRpYmxlcyBhbWIgc2lzdGVtZXMgZGUgZml0eGVycyBhbWIgIgorInZlcnNpw7MgMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVsZiIKK21zZ3N0ciAicGVyY2VudGF0Z2UgZGUgYmxvY3MgcmVzZXJ2YXRzIG5vIHbDoGxpZCAtICVsZiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDQ5Cittc2dpZCAiIgorIkV4dGVudHMgTVVTVCBiZSBlbmFibGVkIGZvciBhIDY0LWJpdCBmaWxlc3lzdGVtLiAgUGFzcyAtTyBleHRlbnRzIHRvICIKKyJyZWN0aWZ5LlxuIgorbXNnc3RyICIiCisiRXh0ZW50cyBIQSBkJ2VzdGFyIGhhYmlsaXRhdCBwZXIgc2lzdGVtZXMgZGUgZml0eGVycyBkZSA2NCBiaXRzLiAgSW5kaXF1ZXUgLSIKKyJPIGV4dGVudHMgcGVyIHJlY3RpZmljYXItaG8uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA2OQorbXNnaWQgIlRoZSBjbHVzdGVyIHNpemUgbWF5IG5vdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGJsb2NrIHNpemUuXG4iCittc2dzdHIgIiIKKyJMYSBtaWRhIGRlbCBncnVwIGRlIHNlY3RvcnMgbm8gaGF1cmlhIGRlIHNlciBtw6lzIHBldGl0YSBxdWUgbGEgbWlkYSBkZWwgIgorImJsb2MuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA3NQorbXNnaWQgInNwZWNpZnlpbmcgYSBjbHVzdGVyIHNpemUgcmVxdWlyZXMgdGhlIGJpZ2FsbG9jIGZlYXR1cmUiCittc2dzdHIgIiIKKyJMJ2VzcGVjaWZpY2FjacOzIGRlIGxhIG1pZGEgZGVsIGdydXAgZGUgc2VjdG9ycyBuZWNlc3NpdGEgbGEgZnVuY2nDsyBiaWdhbGxvYyIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFVuYWJsZSB0byBnZXQgZGV2aWNlIGdlb21ldHJ5IGZvciAlc1xuIgorbXNnc3RyICJhdsOtczogTm8gZXMgcG90IG9idGVuaXIgbGEgZ2VvbWV0cmlhIGRlbCBkaXNwb3NpdGl1IGRlICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbGlnbm1lbnQgaXMgb2Zmc2V0IGJ5ICVsdSBieXRlcy5cbiIKK21zZ3N0ciAiTCdhbGluZWFjacOzIGRlICVzIGVzdMOgIGRlc3BsYcOnYWRhICVsdSBieXRlcy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIG1heSByZXN1bHQgaW4gdmVyeSBwb29yIHBlcmZvcm1hbmNlLCAocmUpLXBhcnRpdGlvbmluZyBzdWdnZXN0ZWQuXG4iCittc2dzdHIgIiIKKyJBaXjDsiBwb3QgcmVzdWx0YXIgZW4gdW4gZnVuY2lvbmFtZW50IG1vbHQgcG9icmUuIEVzIHN1Z2dlcmVpeCAodG9ybmFyIGEpIGZlciAiCisibGVzIHBhcnRpY2lvbnMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCkiCittc2dzdHIgIkVscyBibG9jcyBkZSAlZC1ieXRlIHPDs24gbWFzc2EgZ3JhbnMgcGVsIHNpc3RlbWEgKG3DoHggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjIxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6ICVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAobWF4ICVkKSwgZm9yY2VkIHRvIGNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJBdsOtczogRWxzIGJsb2NzIGRlICVkLWJ5dGUgc8OzbiBtYXNzYSBncmFucyBwZWwgc2lzdGVtYSAobcOgeCAlZCksIGVzIGZvcsOnYSBhICIKKyJjb250aW51YXJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTgwCittc2dpZCAiQ2FuJ3Qgc3VwcG9ydCBiaWdhbGxvYyBmZWF0dXJlIHdpdGhvdXQgZXh0ZW50cyBmZWF0dXJlIgorbXNnc3RyICJObyBlcyBwb3QgZmVyIHNlcnZpciBsYSBmdW5jacOzIGJpZ2FsbG9jIHNlbnNlIGxhIGZ1bmNpw7MgZXh0ZW50cyIKKworIzogbWlzYy9ta2UyZnMuYzoyMTg3Cittc2dpZCAiIgorIlRoZSByZXNpemVfaW5vZGUgYW5kIG1ldGFfYmcgZmVhdHVyZXMgYXJlIG5vdCBjb21wYXRpYmxlLlxuIgorIlRoZXkgY2FuIG5vdCBiZSBib3RoIGVuYWJsZWQgc2ltdWx0YW5lb3VzbHkuXG4iCittc2dzdHIgIiIKKyJMZXMgZnVuY2lvbnMgcmVzaXplX2lub2RlIGkgbWV0YV9iZyBubyBzw7NuIGNvbXBhdGlibGVzLlxuIgorIk5vIGVzIHBvZGVuIGFjdGl2YXIgZGUgbWFuZXJhIHNpbXVsdMOgbmlhLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIxOTYKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiIKKyJTZWUgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQmlnYWxsb2MgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMDcKK21zZ2lkICJyZXNlcnZlZCBvbmxpbmUgcmVzaXplIGJsb2NrcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMTYKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIKK21zZ3N0ciAiZWwgbm9tYnJlIGRlIGJsb2NzIHBlciBncnVwIGVzdMOgIGZvcmEgZGUgbCdpbnRlcnZhbCBwZXJtw6hzIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNDAKK21zZ2lkICJGbGV4X2JnIGZlYXR1cmUgbm90IGVuYWJsZWQsIHNvIGZsZXhfYmcgc2l6ZSBtYXkgbm90IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorIkxhIGZ1bmNpw7MgZmxleF9iZyBubyBlc3TDoCBoYWJpbGl0YWRhLCBwZXIgbGEgcXVhbCBjb3NhIG5vIMOpcyBwZXJtw6hzICIKKyJlc3BlY2lmaWNhciBsYSBtaWRhIGRlIGZsZXhfYmciCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgJWQgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJtaWRhIGRlIG5vZGUtaSBubyB2w6BsaWRhICglZCkgKG3DrW4gJWQvbcOgeCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCByYWlzZSBpbm9kZSByYXRpbz8iCittc2dzdHIgImhpIGhhIG1hc3NhIG5vZGVzLWkgKCVsbHUpLCB2b2xldSBpbmNyZW1lbnRhci1uZSBsYSByw6B0aW8/IgorCisjOiBtaXNjL21rZTJmcy5jOjIyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgc3BlY2lmeSA8IDJeMzIgaW5vZGVzIgorbXNnc3RyICIiCisiaGkgaGEgbWFzc2Egbm9kZXMtaSAoJWxsdSksIGhhdXLDrWV1IGQnZXNwZWNpZmljYXItbmUgdW4gbm9tYnJlIG1lbm9yIGEgMl4zMiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbm9kZV9zaXplICgldSkgKiBpbm9kZXNfY291bnQgKCV1KSB0b28gYmlnIGZvciBhXG4iCisiXHRmaWxlc3lzdGVtIHdpdGggJWxsdSBibG9ja3MsIHNwZWNpZnkgaGlnaGVyIGlub2RlX3JhdGlvICgtaSlcbiIKKyJcdG9yIGxvd2VyIGlub2RlIGNvdW50ICgtTikuXG4iCittc2dzdHIgIiIKKyJFbCBwcm9kdWN0ZSBpbm9kZV9zaXplICgldSkgKiBpbm9kZXNfY291bnQgKCV1KSDDqXMgbWFzc2EgZ3JhbiBwZXIgYVxuIgorIlx0dW4gc2lzdGVtYSBkZSBmaXR4ZXJzIGFtYiAlbGx1IGJsb2NzLiBFc3BlY2lmaXF1ZXUgdW5hIGlub2RlX3JhdGlvICgtaSlcbiIKKyJcdG3DqXMgZ3JhbiBvIGLDqSB1biBub21icmUgbWVub3IgZGUgbm9kZXMtaSAoLU4pLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzeXN0ZW07IHRoaXMgY2FuIGJlIHVuZG9uZSB1c2luZyB0aGUgY29tbWFuZDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJTJ2VzdMOgIHNvYnJlZXNjcml2aW50IGVsIHNpc3RlbWEgZGUgZml0eGVycyBleGlzdGVudDsgbGEgcXVhbCBjb3NhIGVzIHBvdCAiCisiZGVzZmVyIHNpIGVzY3Jpdml1OlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDMyCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHNldHVwIHVuZG8gZmlsZVxuIgorbXNnc3RyICJlbiBwcm92YXIgZGUgY29uZmlndXJhciBlbCBmaXR4ZXIgZGUgZGVzZmVyXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ1OAorbXNnaWQgIkRpc2NhcmRpbmcgZGV2aWNlIGJsb2NrczogIgorbXNnc3RyICJFcyBkZXNjYXJ0ZW4gZWxzIGJsb2NzIGRlbCBkaXNwb3NpdGl1OiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ3NAorbXNnaWQgImZhaWxlZCAtICIKK21zZ3N0ciAiaGEgZmFsbGF0IC0gIgorCisjOiBtaXNjL21rZTJmcy5jOjI1OTYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHVwIHN1cGVyYmxvY2siCittc2dzdHIgImVuIGNvbmZpZ3VyYXIgZWwgc3VwZXJibG9jIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MTIKK21zZ2lkICJEaXNjYXJkIHN1Y2NlZWRlZCBhbmQgd2lsbCByZXR1cm4gMHMgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iCittc2dzdHIgIiIKKyJTJ2hhIGRlc2NhcnRhdCBjb3JyZWN0YW1lbnQgaSBlcyBwb3NhcmFuIDBzIC0gZXMgc2FsdGEgbGEgbmV0ZWphIGRlIGxhIHRhdWxhICIKKyJkZSBub2Rlcy1pXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9zIC0gJXMiCittc2dzdHIgInNpc3RlbWEgb3BlcmF0aXUgZGVzY29uZWd1dCAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjI3NTIKK21zZ2lkICJBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogIgorbXNnc3RyICJTJ2Fzc2lnbmVuIGxlcyB0YXVsZXMgZGUgZ3J1cDogIgorCisjOiBtaXNjL21rZTJmcy5jOjI3NjAKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gYWxsb2NhdGUgZmlsZXN5c3RlbSB0YWJsZXMiCittc2dzdHIgImVuIGludGVudGFyIGFzc2lnbmFyIGxlcyB0YXVsZXMgZGVsIHNpc3RlbWEgZGUgZml0eGVycyIKKworIzogbWlzYy9ta2UyZnMuYzoyNzY5Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgY29udmVydGluZyBzdWJjbHVzdGVyIGJpdG1hcCIKK21zZ3N0ciAiIgorIlxuIgorIlx0ZW4gY29udmVydGlyIGVsIG1hcGEgZGUgYml0cyBkZWwgc3ViZ3J1cCBkZSBzZWN0b3JzIgorCisjOiBtaXNjL21rZTJmcy5jOjI4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBibG9jayAlbGx1IGF0IGVuZCBvZiBmaWxlc3lzdGVtIgorbXNnc3RyICJlbiBlc2NyaXVyZSB6ZXJvcyBhbCBibG9jICVsbHUgYWwgZmluYWwgZGVsIHNpc3RlbWEgZGUgZml0eGVycyIKKworIzogbWlzYy9ta2UyZnMuYzoyODI2Cittc2dpZCAid2hpbGUgcmVzZXJ2aW5nIGJsb2NrcyBmb3Igb25saW5lIHJlc2l6ZSIKK21zZ3N0ciAiZW4gcmVzZXJ2YXIgYmxvY3MgcGVyIGFsIGNhbnZpIGRlIG1pZGEgZW4gbMOtbmlhIgorCisjOiBtaXNjL21rZTJmcy5jOjI4MzggbWlzYy90dW5lMmZzLmM6NzEyCittc2dpZCAiam91cm5hbCIKK21zZ3N0ciAicmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGpvdXJuYWwgdG8gZGV2aWNlICVzOiAiCittc2dzdHIgIkFkZGljacOzIGQndW4gcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIGFsIGRpc3Bvc2l0aXUgJXM6IgorCisjOiBtaXNjL21rZTJmcy5jOjI4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlx0ZW4gaW50ZW50YXIgYWZlZ2lyIHVuIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyBhbCBkaXNwb3NpdGl1ICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NjIgbWlzYy9ta2UyZnMuYzoyODkzIG1pc2MvdHVuZTJmcy5jOjc0MSBtaXNjL3R1bmUyZnMuYzo3NjAKK21zZ2lkICJkb25lXG4iCittc2dzdHIgImZldFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NjkKK21zZ2lkICJTa2lwcGluZyBqb3VybmFsIGNyZWF0aW9uIGluIHN1cGVyLW9ubHkgbW9kZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICgldSBibG9ja3MpOiAiCittc2dzdHIgIkNyZWFjacOzIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgKCV1IGJsb2NzKTogIgorCisjOiBtaXNjL21rZTJmcy5jOjI4ODkKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwiCittc2dzdHIgIiIKKyJcbiIKKyJcdGVuIGludGVudGFyIGNyZWFyIGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAxIG1pc2MvdHVuZTJmcy5jOjUxNgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWQgc2Vjb25kcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MjMKK21zZ2lkICJXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICIKK21zZ3N0ciAiIgorIkVzY3JpcHR1cmEgZGUgbGEgaW5mb3JtYWNpw7MgZGVscyBzdXBlcmJsb2NzIGkgZGUgY29tcHRhYmlsaXRhdCBkZWwgc2lzdGVtYSAiCisiZGUgZml0eGVyczoiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkzMAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nLCBoYWQgdHJvdWJsZSB3cml0aW5nIG91dCBzdXBlcmJsb2Nrcy4iCittc2dzdHIgIiIKKyJcbiIKKyJBdsOtczogaGkgaGEgaGFndXQgcHJvYmxlbWVzIGVuIGVzY3JpdXJlIGVscyBzdXBlcmJsb2NzLiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTMyCittc2dpZCAiIgorImRvbmVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImZldFxuIgorIlxuIgorCisjOiBtaXNjL21rbG9zdCtmb3VuZC5jOjUwCittc2dpZCAiVXNhZ2U6IG1rbG9zdCtmb3VuZFxuIgorbXNnc3RyICJGb3JtYSBkJ8O6czogbWtsb3N0K2ZvdW5kXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICAlcyBkZXZpY2UuLi5cbiIKKyJcbiIKKyJQcmludHMgb3V0IHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGVhY2ggZ2l2ZW4gZGV2aWNlLlxuIgorIkZvciBleGFtcGxlOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorbXNnc3RyICIiCisiRm9ybWEgZCfDunM6ICAlcyBkaXNwb3NpdGl1Li4uXG4iCisiXG4iCisiTW9zdHJhIGxhIGluZm9ybWFjacOzIGRlIHBhcnRpY2lvbmFtZW50IHBlciBhIGNhZGEgZGlzcG9zaXRpdSBlc3BlY2lmaWNhdC5cbiIKKyJQZXIgZXhlbXBsZTogJXMgL2Rldi9oZGFcbiIKKyJcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAiTm8gZXMgcG90IG9icmlyICVzOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgZ2VvbWV0cnkgb2YgJXM6ICVzIgorbXNnc3RyICJObyBlcyBwb3Qgb2J0ZW5pciBsYSBnZW9tZXRyaWEgZGUgJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBzaXplIG9mICVzOiAlcyIKK21zZ3N0ciAiTm8gZXMgcG90IG9idGVuaXIgbGEgbWlkYSBkZSAlczogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaD0lM2Qgcz0lM2QgYz0lNGQgICBzdGFydD0lOGQgc2l6ZT0lOGx1IGVuZD0lOGRcbiIKK21zZ3N0ciAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgaW5pY2k9JThkIG1pZGE9JThsdSBmaW5hbD0lOGRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEyCittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIkhhdXLDrWV1IGQnZXhlY3V0YXIgbCdlMmZzY2sgZW4gZWwgc2lzdGVtYSBkZSBmaXR4ZXJzLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWMgbWF4X21vdW50c19jb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdyb3VwXVxuIgorIlx0Wy1pIGludGVydmFsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbF9vcHRpb25zXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2ZWRfYmxvY2tzX3BlcmNlbnRdIFstbyBbXl1tb3VudF9vcHRpb25zWywuLi5dXSBbLXAgIgorIm1tcF91cGRhdGVfaW50ZXJ2YWxdXG4iCisiXHRbLXIgcmVzZXJ2ZWRfYmxvY2tzX2NvdW50XSBbLXUgdXNlcl0gWy1DIG1vdW50X2NvdW50XSBbLUwgdm9sdW1lX2xhYmVsXVxuIgorIlx0Wy1NIGxhc3RfbW91bnRlZF9kaXJdIFstTyBbXl1mZWF0dXJlWywuLi5dXVxuIgorIlx0Wy1RIHF1b3RhX29wdGlvbnNdXG4iCisiXHRbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXSBbLVQgbGFzdF9jaGVja190aW1lXSBbLVUgVVVJRF1cbiIKKyJcdFsgLUkgbmV3X2lub2RlX3NpemUgXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDMKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIVxuIgorbXNnc3RyICJObyBzJ2hhIHRyb2JhdCBlbCBzdXBlcmJsb2MgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9uc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjEKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJlbiBpbnRlbnRhciBvYnJpciBlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgZXh0ZXJuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjcgbWlzYy90dW5lMmZzLmM6MTk2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiJXMgbm8gw6lzIHVuIGRpc3Bvc2l0aXUgZGUgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNzcgbWlzYy90dW5lMmZzLmM6MTk3NAorbXNnaWQgIkZpbGVzeXN0ZW0ncyBVVUlEIG5vdCBmb3VuZCBvbiBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIk5vIHMnaGEgdHJvYmF0IGwnVVVJRCBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGVuIGVsIGRpc3Bvc2l0aXUgZGVsIHJlZ2lzdHJlICIKKyJkZSB0cmFuc2FjY2lvbnMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMwMQorbXNnaWQgIiIKKyJDYW5ub3QgbG9jYXRlIGpvdXJuYWwgZGV2aWNlLiBJdCB3YXMgTk9UIHJlbW92ZWRcbiIKKyJVc2UgLWYgb3B0aW9uIHRvIHJlbW92ZSBtaXNzaW5nIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMxMAorbXNnaWQgIkpvdXJuYWwgcmVtb3ZlZFxuIgorbXNnc3RyICJTJ2hhIHN1cHJpbWl0IGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9uc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNTQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgImVuIGxsZWdpciBlbHMgbWFwZXMgZGUgYml0cyIKKworIzogbWlzYy90dW5lMmZzLmM6MzYyCittc2dpZCAid2hpbGUgY2xlYXJpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAiZW4gbmV0ZWphciBlbCBub2RlLWkgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyIKKworIzogbWlzYy90dW5lMmZzLmM6MzczCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJlbiBlc2NyaXVyZSBhbCBub2RlLWkgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyIKKworIzogbWlzYy90dW5lMmZzLmM6NDA1IG1pc2MvdHVuZTJmcy5jOjQxOAorbXNnaWQgIihhbmQgcmVib290IGFmdGVyd2FyZHMhKVxuIgorbXNnc3RyICIoaSByZWluaWNpZXUgZGVzcHLDqXMpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisiTGEgZnVuY2nDsyBkZSBuZXRlamEgZGVsIHNpc3RlbWEgZGUgZml0eGVycyDCqyVzwrsgbm8gZXN0w6AgaW1wbGVtZW50YWRhLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisiTCdlc3RhYmxpbWVudCBkZSBsYSBmdW5jacOzIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgwqslc8K7IG5vIGVzdMOgICIKKyJpbXBsZW1lbnRhZGEuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ2NworbXNnaWQgIiIKKyJUaGUgaGFzX2pvdXJuYWwgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJMYSBmdW5jacOzIGhhc19qb3VybmFsIG5vbcOpcyBlcyBwb3QgZXNib3JyYXIgc2kgZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIG5vXG4iCisiZXN0w6AgbXVudGF0LCBvIGLDqSBlc3TDoCBtdW50YXQgZW4gbW9kZSBkZSBub23DqXMgbGVjdHVyYS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDc2Cittc2dpZCAiIgorIlRoZSBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldC4gIFBsZWFzZSBydW4gZTJmc2NrIGJlZm9yZSBjbGVhcmluZ1xuIgorInRoZSBoYXNfam91cm5hbCBmbGFnLlxuIgorbXNnc3RyICIiCisiRWwgc2VueWFsYWRvciBuZWVkc19yZWNvdmVyeSBlc3TDoCBlc3RhYmxlcnQuIEhhdXLDrWV1IGQnZXhlY3V0YXIgbCdlMmZzY2tcbiIKKyJhYmFucyBkZSBuZXRlamFyIGVsIHNlbnlhbGFkb3IgaGFzX2pvdXJuYWwuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ5NQorbXNnaWQgIiIKKyJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnc3BhcnNlX3N1cGVyJyBub3Qgc3VwcG9ydGVkXG4iCisiZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIG1ldGFfYmcgZmVhdHVyZSBlbmFibGVkLlxuIgorbXNnc3RyICIiCisiTCdlc3RhYmxpbWVudCBkZSBsYSBmdW5jacOzIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgwqtzcGFyc2Vfc3VwZXLCuyBubyBlc3TDoCAiCisiaW1wbGVtZW50YWRhXG4iCisicGVyIGFscyBzaXN0ZW1lcyBkZSBmaXR4ZXJzIGFtYiBsJ29wY2nDsyBtZXRhX2JnIGhhYmlsaXRhZGFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTA4Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2FuJ3RcbiIKKyJiZSBzZXQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBvclxuIgorInJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkwnb3BjacOzIGRlIHByb3RlY2Npw7MgY29udHJhIGVscyBtdW50YXRnZXMgbcO6bHRpcGxlcyBcbiIKKyJubyBlcyBwb3QgaGFiaWxpdGFyIHNpIGVsIHNpc3RlbWEgZGUgZml0eGVycyBlc3TDoCBtdW50YXRcbiIKKyJvIMOpcyBkZSBub23DqXMgbGVjdHVyYS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIiIKKyJTJ2hhIGhhYmlsaXRhdCBsYSBwcm90ZWNjacOzIGNvbnRyYSBtdW50YXRnZXMgbcO6bHRpcGxlcyBhbWIgdW4gaW50ZXJ2YWwgIgorImQnYWN0dWFsaXR6YWNpw7MgZGUgJWRzLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MzUKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW5ub3RcbiIKKyJiZSBkaXNhYmxlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyByZWFkb25seS5cbiIKK21zZ3N0ciAiIgorIkxhIHByb3RlY2Npw7MgY29udHJhIG11bnRhdGdlcyBtw7psdGlwbGVzIG5vIGVzIHBvdFxuIgorImRlc2hhYmlsaXRhciBzbyBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgw6lzIGRlIG5vbcOpcyBsZWN0dXJhLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1NDMKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIGJpdG1hcHNcbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlbiBsbGVnaXIgZWxzIG1hcGVzIGRlIGJpdHNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hZ2ljIG51bWJlciBpbiBNTVAgYmxvY2sgZG9lcyBub3QgbWF0Y2guIGV4cGVjdGVkOiAleCwgYWN0dWFsOiAleFxuIgorbXNnc3RyICIiCisiRWxzIG7Dum1lcmkgbcOgZ2ljIGRlbCBibG9jIE1NUCBubyBjb2luY2lkZWl4LiBTJ2VzcGVyYXZhOiAleCwgaSDDqXM6ICV4XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1NworbXNnaWQgIndoaWxlIHJlYWRpbmcgTU1QIGJsb2NrLiIKK21zZ3N0ciAiZW4gbGxlZ2lyIGVsIGJsb2MgTU1QLiIKKworIzogbWlzYy90dW5lMmZzLmM6NTg5Cittc2dpZCAiIgorIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgY2F1c2UgdGhlIHRoZSBmaWxlc3lzdGVtIHRvIGJlXG4iCisiaW5jb25zaXN0ZW50LlxuIgorbXNnc3RyICIiCisiVHJldXJlIGwnaW5kaWNhZG9yIGZsZXhfYmcgcG90IGZlciBxdWUgZXMgc2lzdGVtYSBkZSBmaXR4ZXJzXG4iCisibm8gc2lndWkgY29uc2lzdGVudC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjAwCittc2dpZCAiIgorIlRoZSBodWdlX2ZpbGUgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJMYSBmdW5jacOzIGh1Z2VfZmlsZSBub23DqXMgZXMgcG90IGVzYm9ycmFyIHNpIGVsIHNpc3RlbWEgZGUgZml0eGVycyBub1xuIgorImVzdMOgIG11bnRhdCwgbyBiw6kgZXN0w6AgbXVudGF0IGVuIG1vZGUgZGUgbm9tw6lzIGxlY3R1cmEuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY2MAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiAnXnF1b3RhJyBvcHRpb24gb3ZlcnJpZGVzICctUSdhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBdsOtczogTCdvcGNpw7MgwqtecXVvdGHCuyBzdWJzdGl0dWVpeCBlbHMgYXJndW1lbnRzIGRlIMKrLVHCuy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzA1Cittc2dpZCAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgYSBqb3VybmFsLlxuIgorbXNnc3RyICJFbCBzaXN0ZW1hIGRlIGZpdHhlcnMgamEgdMOpIHVuIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgb24gJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlx0ZW4gaW50ZW50YXIgb2JyaXIgZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIGEgJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgb24gZGV2aWNlICVzOiAiCittc2dzdHIgIkNyZWFjacOzIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgYWwgZGlzcG9zaXRpdSAlczoiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBhZGRpbmcgZmlsZXN5c3RlbSB0byBqb3VybmFsIG9uICVzIgorbXNnc3RyICJlbiBhZmVnaXIgdW4gc2lzdGVtYSBkZSBmaXR4ZXJzIGFsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyBhICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3NDMKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIGlub2RlOiAiCittc2dzdHIgIkNyZWFjacOzIGRlbCBub2RlLWkgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9uczoiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc1NworbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCBmaWxlIgorbXNnc3RyICIiCisiXG4iCisiXHRlbiBpbnRlbnRhciBjcmVhciBlbCBmaXR4ZXIgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyIKKworIzogbWlzYy90dW5lMmZzLmM6ODMyCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIHF1b3RhIG9wdGlvbnMhXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYXNzaWduYXIgbWVtw7JyaWEgcGVyIGEgYW5hbGl0emFyIGxlcyBvcGNpb25zIGRlIHF1b3RhIVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4NTQKK21zZ2lkICIiCisiXG4iCisiQmFkIHF1b3RhIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkZvbGxvd2luZyB2YWxpZCBxdW90YSBvcHRpb25zIGFyZSBhdmFpbGFibGUgKHBhc3MgYnkgc2VwYXJhdGluZyB3aXRoICIKKyJjb21tYSk6XG4iCisiXHRbXl11c3JxdW90YVxuIgorIlx0W15dZ3JwcXVvdGFcbiIKKyJcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkxlcyBvcGNpb25zIGRlIHF1b3RhIG5vIHMnaGFuIGVzcGVjaWZpY2F0IGNvcnJlY3RhbWVudC5cbiIKKyJcbiIKKyJIaSBoYSBkaXNwb25pYmxlcyBsZXMgc2Vnw7xlbnRzIG9wY2lvbnMgZGUgcXVvdGEgKHNlcGFyZXUtbGVzIGFtYiBjb21hKTpcbiIKKyJcdFteXXVzcnF1b3RhXG4iCisiXHRbXl1ncnBxdW90YVxuIgorIlxuIgorIlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcGFyc2UgZGF0ZS90aW1lIHNwZWNpZmllcjogJXMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGwnZXNwZWNpZmljYWRvciBkZSBkYXRhL2hvcmE6ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5NDIgbWlzYy90dW5lMmZzLmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtb3VudHMgY291bnQgLSAlcyIKK21zZ3N0ciAibm9tYnJlIGRlIG11bnRhdGdlcyBlcnJvbmkgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBlcnJvciBiZWhhdmlvciAtICVzIgorbXNnc3RyICJjb21wb3J0YW1lbnQgZCdlcnJvciBlcnJvbmkgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaWQvZ3JvdXAgbmFtZSAtICVzIgorbXNnc3RyICJub20gZGUgZ3J1cC9naWQgZXJyb25pIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGludGVydmFsIC0gJXMiCittc2dzdHIgImludGVydmFsIGVycm9uaSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9jayByYXRpbyAtICVzIgorbXNnc3RyICJyw6B0aW8gZGUgYmxvY3MgcmVzZXJ2YXRzIGVycsOybmlhIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNzUKK21zZ2lkICItbyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiLW8gbm9tw6lzIGVzIHBvdCBlc3BlY2lmaWNhciB1bmEgdmVnYWRhIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDg0Cittc2dpZCAiLU8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1PIG5vbcOpcyBlcyBwb3QgZXNwZWNpZmljYXIgdW5hIHZlZ2FkYSIKKworIzogbWlzYy90dW5lMmZzLmM6MTEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IC0gJXMiCittc2dzdHIgIm7Dum1lcm8gZGUgYmxvY3MgcmVzZXJ2YXRzIGVycm9uaSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB1aWQvdXNlciBuYW1lIC0gJXMiCittc2dzdHIgIm5vbSBkJ3VzdWFyaS91aWQgZXJyb25pIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAibWlkYSBkZWwgbm9kZS1pIGVycsOybmlhIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5vZGUgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLSAlcyIKK21zZ3N0ciAiTGEgbWlkYSBkZWwgbm9kZS1pIGhhIGRlIHNlciB1bmEgcG90w6huY2lhIGRlIDIgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtbXBfdXBkYXRlX2ludGVydmFsIHRvbyBiaWc6ICVsdVxuIgorbXNnc3RyICJMJ21tcF91cGRhdGVfaW50ZXJ2YWwgw6lzIG1hc3NhIGdyYW46ICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZFxuIgorbXNnaWRfcGx1cmFsICIiCisiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyWzBdICIiCisiUydlc3RhYmxlaXggbCdpbnRlcnZhbCBkJ2FjdHVhbGl0emFjacOzIGRlIGxhIHByb3RlY2Npw7MgY29udHJhIG11bnRhdGdlcyAiCisibcO6bHRpcGxlcyBhICVsdSBzZWdvblxuIgorbXNnc3RyWzFdICIiCisiUydlc3RhYmxlaXggbCdpbnRlcnZhbCBkJ2FjdHVhbGl0emFjacOzIGRlIGxhIHByb3RlY2Npw7MgY29udHJhIG11bnRhdGdlcyAiCisibcO6bHRpcGxlcyBhICVsdSBzZWdvbnNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaWRlOiAlc1xuIgorbXNnc3RyICJMJ3N0cmlkZSBkZWwgUkFJRCBubyDDqXMgdsOgbGlkOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpcGUtd2lkdGg6ICVzXG4iCittc2dzdHIgIkwnc3RyaXBlLXdpZHRoIGRlbCBSQUlEIG5vIMOpcyB2w6BsaWQ6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBoYXNoIGFsZ29yaXRobTogJXNcbiIKK21zZ3N0ciAiQWxnb3Jpc21lIGRlIHJlc3VtIG5vIHbDoGxpZDogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gdG8gJXMgKCVkKVxuIgorbXNnc3RyICJFc3RhYmxpbWVudCBkZSBsJ2FsZ29yaXNtZSBkZSByZXN1bSBwcmVkZXRlcm1pbmF0IGEgJXMgKCVkKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzMxCittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNoIGFsZ29yaXRobT5cbiIKKyJcdG1vdW50X29wdHM9PGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucz5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBjaHVuayBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZV93aWR0aD08UkFJRCBzdHJpZGUqZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3OTgKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBpbm9kZSBiaXRtYXBcbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBsbGVnaXQgZWwgbWFwYSBkZSBiaXRzIGRlbCBub2RlLWlcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgwMworbXNnaWQgIkZhaWxlZCB0byByZWFkIGJsb2NrIGJpdG1hcFxuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGxsZWdpdCBlbCBtYXBhIGRlIGJpdHMgZGVsIGJsb2NcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyMCByZXNpemUvcmVzaXplMmZzLmM6OTMxCittc2dpZCAiYmxvY2tzIHRvIGJlIG1vdmVkIgorbXNnc3RyICJibG9jcyBhIG1vdXJlIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODIzCittc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrIGJpdG1hcCB3aGVuIGluY3JlYXNpbmcgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICIiCisiTm8gcydoYSBwb2d1dCBhc3NpZ25hciBlbCBtYXBhIGRlIGJpdHMgZGVsIGJsb2MgZW4gZmVyIG3DqXMgZ3JhbiBlbCBub2RlLWlcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyOQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gaW5jcmVhc2UgaW5vZGUgc2l6ZSBcbiIKK21zZ3N0ciAiTm8gaGkgaGEgcHJvdSBlc3BhaSBwZXIgZmVyIG3DqXMgZ3JhbiBlbCBub2RlLWlcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgzNAorbXNnaWQgIkZhaWxlZCB0byByZWxvY2F0ZSBibG9ja3MgZHVyaW5nIGlub2RlIHJlc2l6ZSBcbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCByZXViaWNhciBlbHMgYmxvY3MgZW4gY2FudmlhciBsYSBtaWRhIGRlIG5vZGUtaVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODY2Cittc2dpZCAiIgorIkVycm9yIGluIHJlc2l6aW5nIHRoZSBpbm9kZSBzaXplLlxuIgorIlJ1biBlMnVuZG8gdG8gdW5kbyB0aGUgZmlsZSBzeXN0ZW0gY2hhbmdlcy4gXG4iCittc2dzdHIgIiIKKyJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNhbnZpYXIgbGEgbWlkYSBkZWwgbm9kZS1pLlxuIgorIkV4ZWN1dGV1IGwnZTJ1bmRvIHBlciBhIGRlc2ZlciBlbHMgY2FudmlzIGFsIHNpc3RlbWEgZGUgZml0eGVycy4gXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4OTMKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRkYiBmaWxlbmFtZVxuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFzc2lnbmFyIG1lbcOycmlhIHBlciBhbCBub20gZGVsIGZpdHhlciBkZWwgdGRiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRlbGV0ZSAlcyIKK21zZ3N0ciAiZW4gaW50ZW50YXIgc3VwcmltaXIgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIHVuZG8gdGhlIHR1bmUyZnMgb3BlcmF0aW9uIHBsZWFzZSBydW4gdGhlIGNvbW1hbmRcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJTaSB2b2xldSBkZXNmZXIgbGVzIG9wZXJhY2lvbnMgZGVsIHR1bmUyZnMgZXhlY3V0ZXUgbCdvcmRyZVxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGJsb2NrIG1hZ2ljIGlzIGJhZC4gVHJ5IHRvIGZpeCBpdCBieSBydW5uaW5nOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCittc2dzdHIgIiIKKyJFbCBibG9jIG3DoGdpYyBNTVAgZXN0w6AgbWFsYW1lbnQuIFByb3ZldSBkJ2FycmVnbGFyLWxvIGZlbnQgc2VydmlyOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGlub2RlIHNpemUgaXMgYWxyZWFkeSAlbHVcbiIKK21zZ3N0ciAiTGEgbWlkYSBkZWwgbm9kZS1pIGphIMOpcyAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA4MQorbXNnaWQgIlNocmlua2luZyBpbm9kZSBzaXplIGlzIG5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiTGEgcmVkdWNjacOzIGRlIGxhIG1pZGEgZGVsIG5vZGUtaSBubyBlc3TDoCBpbXBsZW1lbnRhZGFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlub2RlIHNpemUgJWx1IChtYXggJWQpXG4iCittc2dzdHIgIkxhIG1pZGEgZGVsIG5vZGUtaSBubyDDqXMgdsOgbGlkYSAlbHUgKG3DoHggJWQpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtYXhpbWFsIG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIkVzdGFibGltZW50IGRlbCBub21icmUgbcOgeGltIGRlIG11bnRhdGdlcyBhICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjdXJyZW50IG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIkVzdGFibGltZW50IGRlbCBub21icmUgZGUgbXVudGF0Z2VzIGFjdHVhbCBhICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBlcnJvciBiZWhhdmlvciB0byAlZFxuIgorbXNnc3RyICJFc3RhYmxpbWVudCBkZWwgY29tcG9ydGFtZW50IGQnZXJyb3IgYSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGdpZCB0byAlbHVcbiIKK21zZ3N0ciAiRXN0YWJsaW1lbnQgZGVsIEdJRCBkZWxzIGJsb2NzIHJlc2VydmF0cyBhICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgIkwnaW50ZXJ2YWwgZW50cmUgY29tcHJvdmFjaW9ucyDDqXMgbWFzc2EgZ3JhbiAoJWx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGludGVydmFsIGJldHdlZW4gY2hlY2tzIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHIgIkVzdGFibGltZW50IGRlIGwnaW50ZXJ2YWwgZW50cmUgY29tcHJvdmFjaW9ucyBhICVsdSBzZWdvbnNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50YWdlIHRvICVnJSUgKCVsbHUgYmxvY2tzKVxuIgorbXNnc3RyICJTJ2VzdGFibGVpeCBlbCBwZXJjZW50YXRnZSBkZSBibG9jcyByZXNlcnZhdHMgYSAlZyUlICglbGx1IGJsb2NzKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlc2VydmVkIGJsb2NrcyBjb3VudCBpcyB0b28gYmlnICglbGx1KSIKK21zZ3N0ciAiZWwgY29udGFkb3IgZGUgYmxvY3MgcmVzZXJ2YXRzIMOpcyBtYXNzYSBncmFuICglbGx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgIlMnZXN0YWJsZWl4IGVsIGNvbnRhZG9yIGRlIGJsb2NzIHJlc2VydmF0cyBhICVsbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4NworbXNnaWQgIiIKKyJcbiIKKyJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBzcGFyc2Ugc3VwZXJibG9ja3MuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFbCBzaXN0ZW1hIGRlIGZpdHhlcnMgamEgdMOpIHN1cGVyYmxvY3MgZGlzcGVyc29zLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTkxCittc2dpZCAiIgorIlxuIgorIlNldHRpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZFxuIgorImZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBtZXRhX2JnIGZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIHNldC4gICVzIgorbXNnc3RyICIiCisiXG4iCisiUydoYSBlc3RhYmxlcnQgZWwgc2VueWFsYWRvciBkZSBzdXBlcmJsb2MgZGlzcGVycy4gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDcKK21zZ2lkICIiCisiXG4iCisiQ2xlYXJpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkxhIG5ldGVqYSBkZWwgc2VueWFsYWRvciBkZSBzdXBlcmJsb2MgZGlzcGVycyBubyBlc3TDoCBpbXBsZW1lbnRhZGEuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB0aW1lIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRvICVzXG4iCittc2dzdHIgIkVzdGFibGltZW50IGRlIGxhIGRhcnJlcmEgY29tcHJvdmFjacOzIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgYSAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHVpZCB0byAlbHVcbiIKK21zZ3N0ciAiRXN0YWJsaW1lbnQgZGUgbCdVSUQgZGVscyBibG9jcyByZXNlcnZhdHMgYSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI1MworbXNnaWQgIkVycm9yIGluIHVzaW5nIGNsZWFyX21tcC4gSXQgbXVzdCBiZSB1c2VkIHdpdGggLWZcbiIKK21zZ3N0ciAiIgorIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZmVyIHNlcnZpciBjbGVhcl9tbXAuIFMnaGEgZGUgZmVyIHNlcnZpciBhbWIgLWZcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI3MQorbXNnaWQgIiIKKyJUaGUgcXVvdGEgZmVhdHVyZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiTGEgZnVuY2nDsyBxdW90YSBzJ2hhIGRlIGNhbnZpYXIgbm9tw6lzIHF1YW4gZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGVzdMOgICIKKyJkZXNtdW50YXQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyOTIKK21zZ2lkICJUaGUgVVVJRCBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiTCdVVUlEIHMnaGEgZGUgY2FudmlhciBub23DqXMgcXVhbiBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgZXN0w6AgZGVzbXVudGF0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzIyCittc2dpZCAiSW52YWxpZCBVVUlEIGZvcm1hdFxuIgorbXNnc3RyICJFbCBmb3JtYXQgZGUgbCdVVUlEIG5vIMOpcyB2w6BsaWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjMzNworbXNnaWQgIk5lZWQgdG8gdXBkYXRlIGpvdXJuYWwgc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiUydoYSBkJ2FjdHVhbGl0emFyIGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9uc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzU4Cittc2dpZCAiVGhlIGlub2RlIHNpemUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorIkxhIG1pZGEgZGVsIG5vZGUtaSBub23DqXMgZXMgcG90IGNhbnZpYXIgcXVhbiBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgZXN0w6AgIgorImRlc211bnRhdC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM2NgorbXNnaWQgIiIKKyJDaGFuZ2luZyB0aGUgaW5vZGUgc2l6ZSBub3Qgc3VwcG9ydGVkIGZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBmbGV4X2JnXG4iCisiZmVhdHVyZSBlbmFibGVkLlxuIgorbXNnc3RyICIiCisiTm8gZXN0w6AgaW1wbGVtZW50YXQgZWwgY2FudmkgZGUgbWlkYSBkZWwgbm9kZS1pIGVuIHNpc3RlbWVzIGRlIGZpdHhlcnNcbiIKKyJhbWIgbGEgZnVuY2nDsyBmbGV4X2JnIGhhYmlsaXRhZGEuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbm9kZSBzaXplICVsdVxuIgorbXNnc3RyICJTJ2VzdGFibGVpeCBsYSBtaWRhIGRlIG5vZGUtaSBhICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzgyCittc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBpbm9kZSBzaXplXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgY2FudmlhciBsYSBtaWRhIGRlbCBub2RlLWlcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlkZSBzaXplIHRvICVkXG4iCittc2dzdHIgIlMnZXN0YWJsZWl4IGxhIG1pZGEgZGUgbCdzdHJpZGUgYSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaXBlIHdpZHRoIHRvICVkXG4iCittc2dzdHIgIlMnZXN0YWJsZWl4IGwnYW1wbGFkYSBkZSBsJ3N0cmlkZSBhICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnMgdG8gJyVzJ1xuIgorbXNnc3RyICJTJ2VzdGFibGVpeCBsZXMgb3BjaW9ucyBlc3Rlc2VzIGRlIG11bnRhdGdlIHBlciBkZWZlY3RlIMKrJXPCu1xuIgorCisjOiBtaXNjL3V0aWwuYzo5MworbXNnaWQgIjxwcm9jZWVkaW5nPlxuIgorbXNnc3RyICI8Y29udGludWFyPlxuIgorCisjOiBtaXNjL3V0aWwuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICJQcm9jZWVkIGFueXdheSAob3Igd2FpdCAlZCBzZWNvbmRzKSA/ICh5LG4pICIKK21zZ3N0ciAiVm9sZXUgY29udGludWFyIGRlIHRvdGVzIG1hbmVyZXMgKG8gZXNwZXJhciAlZCBzZWdvbnMpID8gKHMsbikiCisKKyM6IG1pc2MvdXRpbC5jOjEwMQorbXNnaWQgIlByb2NlZWQgYW55d2F5PyAoeSxuKSAiCittc2dzdHIgIlZvbGV1IGNvbnRpbnVhciBkZSB0b3RlcyBtYW5lcmVzPyAocyxuKSIKKworIzogbWlzYy91dGlsLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0bGFzdCBtb3VudGVkIG9uICVzIG9uICVzIgorbXNnc3RyICJcdGwnw7psdGltIG11bnRhdGdlIHZhIHNlciAlcyBhICVzIgorCisjOiBtaXNjL3V0aWwuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vdW50ZWQgb24gJXMiCittc2dzdHIgIlx0bCfDumx0aW0gbXVudGF0Z2UgdmEgc2VyIGVsICVzIgorCisjOiBtaXNjL3V0aWwuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRjcmVhdGVkIG9uICVzIgorbXNnc3RyICJcdGNyZWF0IGVsICVzIgorCisjOiBtaXNjL3V0aWwuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vZGlmaWVkIG9uICVzIgorbXNnc3RyICJcdGxhIGRhcnJlcmEgbW9kaWZpY2FjacOzIMOpcyBkZWwgJXMiCisKKyM6IG1pc2MvdXRpbC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGb3VuZCBhICVzIHBhcnRpdGlvbiB0YWJsZSBpbiAlc1xuIgorbXNnc3RyICJTJ2hhIHRyb2JhdCB1bmEgdGF1bGEgZGUgcGFydGljaW9ucyAlcyBhICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSAlcyBkb2VzIG5vdCBleGlzdCBhbmQgbm8gc2l6ZSB3YXMgc3BlY2lmaWVkLlxuIgorbXNnc3RyICJFbCBmaXR4ZXIgJXMgbm8gZXhpc3RlaXggaSBubyBzJ2hhIGVzcGVjaWZpY2F0IGNhcCBtaWRhLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgcmVndWxhciBmaWxlICVzXG4iCittc2dzdHIgIkVzIGNyZWEgZWwgZml0eGVyIG5vcm1hbCAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIk5vIGVzIHBvdCBvYnJpciAlczogJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjE2Cittc2dpZCAiIgorIlxuIgorIlRoZSBkZXZpY2UgYXBwYXJlbnRseSBkb2VzIG5vdCBleGlzdDsgZGlkIHlvdSBzcGVjaWZ5IGl0IGNvcnJlY3RseT9cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNlbWJsYSBxdWUgZWwgZGlzcG9zaXRpdSBubyBleGlzdGVpeC4gQXNzZWd1cmV1LXZvcyBxdWUgbCdoZXUgZXNwZWNpZmljYXQgIgorImNvcnJlY3RhbWVudFxuIgorCisjOiBtaXNjL3V0aWwuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UuXG4iCittc2dzdHIgImVsICVzIG5vIMOpcyB1biBkaXNwb3NpdGl1IGVzcGVjaWFsIGRlIGJsb2NzLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbSBsYWJlbGxlZCAnJXMnXG4iCittc2dzdHIgIiVzIGNvbnTDqSB1biBzaXN0ZW1hIGRlIGZpdHhlcnMgJXMgZXRpcXVldGF0IMKrJXPCu1xuIgorCisjOiBtaXNjL3V0aWwuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICIlcyBjb250w6kgdW4gc2lzdGVtYSBkZSBmaXR4ZXJzICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBlbnRpcmUgZGV2aWNlLCBub3QganVzdCBvbmUgcGFydGl0aW9uIVxuIgorbXNnc3RyICIlcyDDqXMgZWwgZGlzcG9zaXRpdSBjb21wbGV0LCBubyBwYXMgbm9tw6lzIHVuYSBwYXJ0aWNpw7NcbiIKKworIzogbWlzYy91dGlsLmM6MzIzCittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIiIKKyJzJ2hhIGZvcsOnYXQgZWwgbWtlMmZzIGRlIHRvdGVzIG1hbmVyZXMuIEFtYiB1bmEgbWljYSBkZSBzb3J0IGVsIGZpdHhlciAvZXRjLyIKKyJtdGFiIMOpcyBpbmNvcnJlY3RlLlxuIgorCisjOiBtaXNjL3V0aWwuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgbWFrZSBhICVzIGhlcmUhXG4iCittc2dzdHIgIm5vIGVzIGZhcsOgIHVuICVzIGFxdcOtXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMzNQorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICJzJ2hhIGZvcsOnYXQgZWwgbWtlMmZzIGRlIHRvdGVzIG1hbmVyZXMuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjM1MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBqb3VybmFsIG9wdGlvbnMhXG4iCittc2dzdHIgIiIKKyJObyBzJ2hhIHBvZ3V0IGFzc2lnbmFyIG1lbcOycmlhIHBlciBhIGFuYWxpdHphciBsZXMgb3BjaW9ucyBkZWwgcmVnaXN0cmUgZGUgIgorInRyYW5zYWNjaW9uc1xuIgorCisjOiBtaXNjL3V0aWwuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCBmaW5kIGpvdXJuYWwgZGV2aWNlIG1hdGNoaW5nICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJObyBzJ2hhIHRyb2JhdCBjYXAgZGlzcG9zaXRpdSBkZSByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgcXVlIGNvaW5jaWRlaXhpICIKKyJhbWIgJXNcbiIKKworIzogbWlzYy91dGlsLmM6NDAzCittc2dpZCAiIgorIlxuIgorIkJhZCBqb3VybmFsIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkpvdXJuYWwgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGpvdXJuYWwgb3B0aW9ucyBhcmU6XG4iCisiXHRzaXplPTxqb3VybmFsIHNpemUgaW4gbWVnYWJ5dGVzPlxuIgorIlx0ZGV2aWNlPTxqb3VybmFsIGRldmljZT5cbiIKKyJcdGxvY2F0aW9uPTxqb3VybmFsIGxvY2F0aW9uPlxuIgorIlxuIgorIlRoZSBqb3VybmFsIHNpemUgbXVzdCBiZSBiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGZpbGVzeXN0ZW0gYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjQzNAorbXNnaWQgIiIKKyJcbiIKKyJGaWxlc3lzdGVtIHRvbyBzbWFsbCBmb3IgYSBqb3VybmFsXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFbCBzaXN0ZW1hIGRlIGZpdHhlcnMgw6lzIG1hc3NhIHBldGl0IHBlciBhIHVuIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9uc1xuIgorCisjOiBtaXNjL3V0aWwuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlRoZSByZXF1ZXN0ZWQgam91cm5hbCBzaXplIGlzICVkIGJsb2NrczsgaXQgbXVzdCBiZVxuIgorImJldHdlZW4gMTAyNCBhbmQgMTAyNDAwMDAgYmxvY2tzLiAgQWJvcnRpbmcuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6NDQ5Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgc2l6ZSB0b28gYmlnIGZvciBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiXG4iCisiTGEgbWlkYSBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIMOpcyBtYXNzYSBncmFuIHBlciBhbCBzaXN0ZW1hIGRlICIKKyJmaXR4ZXJzLlxuIgorCisjOiBtaXNjL3V0aWwuYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZXN5c3RlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hlY2tlZCBldmVyeSAlZCBtb3VudHMgb3JcbiIKKyIlZyBkYXlzLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuICBVc2UgdHVuZTJmcyAtYyBvciAtaSB0byBvdmVycmlkZS5cbiIKK21zZ3N0ciAiIgorIkFxdWVzdCBzaXN0ZW1hIGRlIGZpdHhlcnMgZXMgY29tcHJvdmFyw6AgYXV0b23DoHRpY2FtZW50IGNhZGEgJWQgbXVudGF0Z2VzXG4iCisibyBiw6kgY2FkYSAlZyBkaWVzLCBlbCBxdWUgcGFzc2kgcHJpbWVyLiAgRmV1IHNlcnZpciB0dW5lMmZzIC1jIG8gLXQgcGVyICIKKyJtb2RpZmljYXItaG8uXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0OQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1kXSBbLXAgcGlkZmlsZV0gWy1zIHNvY2tldHBhdGhdIFstVCB0aW1lb3V0XVxuIgorbXNnc3RyICJGb3JtYSBkJ8O6czogJXMgWy1kXSBbLXAgcGlkZml0eGVyXSBbLXMgY2Ftw61zw7Jjb2xdIFstVCB0ZW1wc23DoHhdXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgWy1yfHRdIFstbiBudW1dIFstcyBzb2NrZXRwYXRoXVxuIgorbXNnc3RyICIgICAgICAgJXMgWy1yfHRdIFstbiBuw7ptXSBbLXMgY2Ftw61zw7Jjb2xdXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiICAgICAgICVzIC1rXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoxNTUKK21zZ2lkICJiYWQgYXJndW1lbnRzIgorbXNnc3RyICJhcmd1bWVudHMgaW5jb3JyZWN0ZXMiCisKKyM6IG1pc2MvdXVpZGQuYzoxNzMKK21zZ2lkICJjb25uZWN0IgorbXNnc3RyICJjb25uZWN0YSIKKworIzogbWlzYy91dWlkZC5jOjE5MgorbXNnaWQgIndyaXRlIgorbXNnc3RyICJlc2NyaXUiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDAKK21zZ2lkICJyZWFkIGNvdW50IgorbXNnc3RyICJsbGVnZWl4IGVsIGNvbXB0YWRvciIKKworIzogbWlzYy91dWlkZC5jOjIwNgorbXNnaWQgImJhZCByZXNwb25zZSBsZW5ndGgiCittc2dzdHIgImxvbmdpdHVkIGRlIGxhIHJlc3Bvc3RhIGluY29ycmVjdGEiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXVpZGQgZGFlbW9uIGFscmVhZHkgcnVubmluZyBhdCBwaWQgJXNcbiIKK21zZ3N0ciAiZWwgZGltb25pIHV1aWRkIGphIHMnZXN0w6AgZXhlY3V0YW50IGFtYiBlbCBwaWQgJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgdW5peCBzdHJlYW0gc29ja2V0OiAlcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBjcmVhciBlbCBzw7Jjb2wgZGUgZmx1eCBkZSB1bml4OiAlcyIKKworIzogbWlzYy91dWlkZC5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBiaW5kIHVuaXggc29ja2V0ICVzOiAlc1xuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHZpbmN1bGFyIGVsIHPDsmNvbCAlcyBkZSB1bml4OiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxpc3RlbiBvbiB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBlc2NvbHRhciBhbCBzw7Jjb2wgZGUgdW5peCAlczogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGZyb20gY2xpZW50LCBsZW4gPSAlZFxuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBkZWwgY2xpZW50LCBsb25naXR1ZCA9ICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlcmF0aW9uICVkLCBpbmNvbWluZyBudW0gPSAlZFxuIgorbXNnc3RyICJvcGVyYWNpw7MgJWQsIG7Dum1lcm8gZW50cmFudCA9JWRcbiIKKworIzogbWlzYy91dWlkZC5jOjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEOiAlc1xuIgorbXNnc3RyICJTJ2hhIGdlbmVyYXQgZWwgVVVJRCBkZSB0ZW1wczogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgcmFuZG9tIFVVSUQ6ICVzXG4iCittc2dzdHIgIlMnaGEgZ2VuZXJhdCBlbCBVVUlEIGFsZWF0b3JpOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCAlZCBzdWJzZXF1ZW50IFVVSURzXG4iCittc2dzdHJbMF0gIlMnaGEgZ2VuZXJhdCBlbCBVVUlEIGRlIHRlbXBzICVzIGkgZWwgc3Vic2Vnw7xlbnQgVVVJRFxuIgorbXNnc3RyWzFdICJTJ2hhIGdlbmVyYXQgZWwgVVVJRCBkZSB0ZW1wcyAlcyBpIGVscyAlZCBzdWJzZWfDvGVudHMgVVVJRHNcbiIKKworIzogbWlzYy91dWlkZC5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgJWQgVVVJRCdzOlxuIgorbXNnc3RyICJTJ2hhIGdlbmVyYXQgJWQgVVVJRCdzOlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uICVkXG4iCittc2dzdHIgIkwnb3BlcmFjacOzICVkIG5vIMOpcyB2w6BsaWRhXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0NzcgbWlzYy91dWlkZC5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICJOw7ptZXJvIGluY29ycmVjdGU6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MzQgbWlzYy91dWlkZC5jOjU2MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjYWxsaW5nIHV1aWRkIGRhZW1vbiAoJXMpOiAlc1xuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNyaWRhciBlbCBkaW1vbmkgZGVsIHV1aWRkKCVzKTogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiVzIGkgZWwgc3Vic2Vnw7xlbnQgVVVJRFxuIgorbXNnc3RyWzFdICIlcyBpIGVscyBzdWJzZWfDvGVudHMgJWQgVVVJRHNcbiIKKworIzogbWlzYy91dWlkZC5jOjU0OAorbXNnaWQgIkxpc3Qgb2YgVVVJRCdzOlxuIgorbXNnc3RyICJMbGlzdGEgZGUgVVVJRCdzOlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgcmVwbHkgbGVuZ3RoIGZyb20gc2VydmVyICVkXG4iCittc2dzdHIgIkxvbmdpdHVkIGRlIHJlc3Bvc3RhIGluZXNwZXJhZGEgZGVzIGRlbCBzZXJ2aWRvciAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGtpbGwgdXVpZGQgcnVubmluZyBhdCBwaWQgJWQ6ICVzXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgbWF0YXIgZWwgdXVpZGQgcXVlIHMnZXhlY3V0YSBhbWIgZWwgcGlkICVkOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIktpbGxlZCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZFxuIgorbXNnc3RyICJTJ2hhIG1hdGF0IGVsIHV1aWRkIHF1ZSBzJ2V4ZWN1dGEgYW1iIGVsIHBpZCAlZFxuIgorCisjOiBtaXNjL3V1aWRnZW4uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1yXSBbLXRdXG4iCittc2dzdHIgIkZvcm1hIGQnw7pzOiAlcyBbLXJdIFstdF1cbiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMgorbXNnaWQgIiMgRXh0ZW50IGR1bXA6XG4iCittc2dzdHIgIiMgQm9sY2F0IGRlIGwnZXh0ZW5zacOzOlxuIgorCisjIEZJWE1FOiDCq1NvcnRlZMK7IChkcG0pCisjOiByZXNpemUvZXh0ZW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiNcdE51bT0lbGx1LCBTaXplPSVsbHUsIEN1cnNvcj0lbGx1LCBTb3J0ZWQ9JWxsdVxuIgorbXNnc3RyICIjXHROw7ptPSVsbHUsIE1pZGE9JWxsdSwgQ3Vyc29yPSVsbHUsIE9yZGVuYXQ9JWxsdVxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1kIGRlYnVnX2ZsYWdzXSBbLWZdIFstRl0gWy1NXSBbLVBdIFstcF0gZGV2aWNlIFtuZXdfc2l6ZV1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkZvcm1hIGQnw7pzOiAlcyBbLWQgc2VueWFsYWRvcnNfZGVfZGVwdXJhY2nDs10gWy1mXSBbLUZdIFstTV0gWy1QXSBbLXBdICIKKyJkaXNwb3NpdGl1IFttaWRhIG5vdmFdXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NjYKK21zZ2lkICJFeHRlbmRpbmcgdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJBbXBsaWFjacOzIGRlIGxhIHRhdWxhIGRlIG5vZGVzLWkiCisKKyM6IHJlc2l6ZS9tYWluLmM6NjkKK21zZ2lkICJSZWxvY2F0aW5nIGJsb2NrcyIKK21zZ3N0ciAiUmV1YmljYWNpw7MgZGVscyBibG9jcyIKKworIzogcmVzaXplL21haW4uYzo3MgorbXNnaWQgIlNjYW5uaW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJFc2NhbmVpZyBkZSBsYSB0YXVsYSBkZSBub2Rlcy1pIgorCisjOiByZXNpemUvbWFpbi5jOjc1Cittc2dpZCAiVXBkYXRpbmcgaW5vZGUgcmVmZXJlbmNlcyIKK21zZ3N0ciAiQWN0dWFsaXR6YWNpw7MgZGUgbGVzIHJlZmVyw6huY2llcyBkZWxzIG5vZGVzLWkiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzgKK21zZ2lkICJNb3ZpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIlRyYXNsbGF0IGRlIGxhIHRhdWxhIGRlIG5vZGVzLWkiCisKKyM6IHJlc2l6ZS9tYWluLmM6ODEKK21zZ2lkICJVbmtub3duIHBhc3M/IT8iCittc2dzdHIgIlBhcyBkZXNjb25lZ3V0IT8iCisKKyM6IHJlc2l6ZS9tYWluLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVnaW4gcGFzcyAlZCAobWF4ID0gJWx1KVxuIgorbXNnc3RyICJJbmljaSBkZWwgcGFzICVkIChtw6B4ID0gJWx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjE1NQorbXNnaWQgIiIKKyJcbiIKKyJSZXNpemluZyBiaWdhbGxvYyBmaWxlIHN5c3RlbXMgaGFzIG5vdCBiZWVuIGZ1bGx5IHRlc3RlZC4gIFByb2NlZWQgYXRcbiIKKyJ5b3VyIG93biByaXNrISAgVXNlIHRoZSBmb3JjZSBvcHRpb24gaWYgeW91IHdhbnQgdG8gZ28gYWhlYWQgYW55d2F5LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIG9wZW5pbmcgJXMiCittc2dzdHIgImVuIG9icmlyICVzIgorCisjOiByZXNpemUvbWFpbi5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIHN0YXQgaW5mb3JtYXRpb24gZm9yICVzIgorbXNnc3RyICJlb24gb2J0ZW5pciBsYSBpbmZvcm1hY2nDsyBkJ8Krc3RhdMK7IHBlciBhICVzIgorCisjOiByZXNpemUvbWFpbi5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1mICVzJyBmaXJzdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkV4ZWN1dGV1IMKrZTJmc2NrIC1mICVzwrsgcHJpbWVyLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RpbWF0ZWQgbWluaW11bSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtOiAlbGx1XG4iCittc2dzdHIgIk1pZGEgbcOtbmltYSBlc3RpbWFkYSBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzOiAlbGx1XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbmV3IHNpemU6ICVzXG4iCittc2dzdHIgIkxhIG1pZGEgbm92YSBubyDDqXMgdsOgbGlkYTogJXNcbiIKKworIzogcmVzaXplL21haW4uYzo0MjEKK21zZ2lkICJOZXcgc2l6ZSB0b28gbGFyZ2UgdG8gYmUgZXhwcmVzc2VkIGluIDMyIGJpdHNcbiIKK21zZ3N0ciAiTGEgbWlkYSBub3ZhIMOpcyBtYXNzYSBncmFuIHBlciBzZXIgZXhwcmVzc2FkYSBlbiAzMiBiaXRzXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5ldyBzaXplIHNtYWxsZXIgdGhhbiBtaW5pbXVtICglbGx1KVxuIgorbXNnc3RyICJMYSBtaWRhIG5vdmEgw6lzIGluZmVyaW9yIGFsIG3DrW5pbSAoJWxsdSlcbiIKKworIzogcmVzaXplL21haW4uYzo0MzUKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBsZW5ndGgiCittc2dzdHIgIkxhIGxvbmdpdHVkIGRlbCBzdHJpZGUgbm8gw6lzIHbDoGxpZGEiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29udGFpbmluZyBwYXJ0aXRpb24gKG9yIGRldmljZSkgaXMgb25seSAlbGx1ICglZGspIGJsb2Nrcy5cbiIKKyJZb3UgcmVxdWVzdGVkIGEgbmV3IHNpemUgb2YgJWxsdSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJMYSBwYXJ0aWNpw7MgKG8gZGlzcG9zaXRpdSkgY29udGVuaWRvcmEgdMOpIHVuYSBtaWRhIGRlIG5vbcOpcyAlbGx1ICglZGspICIKKyJibG9jcy5cbiIKKyJOJ2hldSByZXF1ZXJpdCB1bmEgbWlkYSBub3ZhIGRlICVsbHUgYmxvY3MuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBpcyBhbHJlYWR5ICVsbHUgKCVkaykgYmxvY2tzIGxvbmcuICBOb3RoaW5nIHRvIGRvIVxuIgorIlxuIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGphIHTDqSB1bmEgbGxhcmfDoHJpYSBkZSAlbGx1ICglZGspIGJsb2NzLiBObyBjYWwgZmVyICIKKyJyZXMhXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICIiCisiRXMgY2FudmlhIGxhIG1pZGEgZGVsIHNpc3RlbWEgZGUgZml0eGVycyBxdWUgaGkgaGEgYSAlcyBhICVsbHUgKCVkaykgYmxvY3MuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZXNpemUgJXMiCittc2dzdHIgImVuIGludGVudGFyIHJlZGltZW5zaW9uYXIgJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWZ5ICVzJyB0byBmaXggdGhlIGZpbGVzeXN0ZW1cbiIKKyJhZnRlciB0aGUgYWJvcnRlZCByZXNpemUgb3BlcmF0aW9uLlxuIgorbXNnc3RyICIiCisiRXhlY3V0ZXUgwqtlMmZzY2sgLWZ5ICVzwrsgcGVyIGFycmVnbGFyIGVsIHNpc3RlbWEgZGUgZml0eGVyc1xuIgorImRlc3Byw6lzIGQnaW50ZXJyb21wcmUgbGEgb3BlcmFjacOzIGRlIGNhbnZpIGRlIG1pZGEuXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBvbiAlcyBpcyBub3cgJWxsdSAoJWRrKSBibG9ja3MgbG9uZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkVsIHNpc3RlbWEgZGUgZml0eGVycyBhICVzIHTDqSBhcmEgdW5hIGxsYXJnw6ByaWEgZGUgJWxsdSAoJWRrKSBibG9jcy5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHRydW5jYXRlICVzIgorbXNnc3RyICJlbiBpbnRlbnRhciB0cnVuY2FyICVzIgorCisjOiByZXNpemUvb25saW5lLmM6ODIKK21zZ2lkICJrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXplIHdpdGggc3BhcnNlX3N1cGVyMiIKK21zZ3N0ciAiIgorIkVsIG51Y2xpIG5vIMOpcyBjb21wYXRpYmxlIGFtYiBlbCBjYW52aSBkZSBtaWRhIGVuIGzDrW5pYSBhbWIgc3BhcnNlX3N1cGVyMiIKKworIzogcmVzaXplL29ubGluZS5jOjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlczsgb24tbGluZSByZXNpemluZyByZXF1aXJlZFxuIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGEgJXMgZXN0w6AgbXVudGF0IGEgJXM7IGNhbCB1biBjYW52aSBkZSBtaWRhIGVuIGzDrW5pYVxuIgorCisjOiByZXNpemUvb25saW5lLmM6OTEKK21zZ2lkICJPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJMYSByZWR1Y2Npw7MgZGUgbWlkYSBlbiBsw61uaWEgbm8gZXN0w6AgaW1wbGVtZW50YWRhIgorCisjOiByZXNpemUvb25saW5lLmM6MTE2Cittc2dpZCAiRmlsZXN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIG5vIMOpcyBjb21wYXRpYmxlIGFtYiBlbCBjYW52aSBkZSBtaWRhIGVuIGzDrW5pYSIKKworIzogcmVzaXplL29ubGluZS5jOjEyNQorbXNnaWQgIk5vdCBlbm91Z2ggcmVzZXJ2ZWQgZ2R0IGJsb2NrcyBmb3IgcmVzaXppbmciCittc2dzdHIgIk5vIGhpIGhhIHByb3UgYmxvY3MgZ2R0IHJlc2VydmF0cyBwZXIgZmVyIGVsIGNhbnZpIGRlIG1pZGEiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMzIKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCByZXNpemluZyBhIGZpbGUgc3lzdGVtIHRoaXMgbGFyZ2UiCittc2dzdHIgIiIKKyJFbCBudWNsaSBubyDDqXMgY29tcGF0aWJsZSBhbWIgZWwgY2FudmkgZGUgbWlkYSBkJ3VuIHNpc3RlbWEgZGUgZml0eGVycyB0YW4gIgorImdyYW4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gbW91bnRwb2ludCAlcyIKK21zZ3N0ciAiZW4gaW50ZW50YXIgb2JyaXIgZWwgcHVudCBkZSBtdW50YXRnZSAlcyIKKworIzogcmVzaXplL29ubGluZS5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJPbGQgcmVzaXplIGludGVyZmFjZSByZXF1ZXN0ZWQuXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjE2NCByZXNpemUvb25saW5lLmM6MTgxCittc2dpZCAiUGVybWlzc2lvbiBkZW5pZWQgdG8gcmVzaXplIGZpbGVzeXN0ZW0iCittc2dzdHIgIlMnaGEgZGVuZWdhdCBlbCBwZXJtw61zIHBlciBhIGNhbnZpYXIgbGEgbWlkYSBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIgorCisjOiByZXNpemUvb25saW5lLmM6MTY3IHJlc2l6ZS9vbmxpbmUuYzoxODcKK21zZ2lkICJXaGlsZSBjaGVja2luZyBmb3Igb24tbGluZSByZXNpemluZyBzdXBwb3J0IgorbXNnc3RyICJFbiBjb21wcm92YXIgbGEgY29tcGF0aWJpbGl0YXQgYW1iIGVsIGNhbnZpIGRlIG1pZGEgZW4gbMOtbmlhIgorCisjOiByZXNpemUvb25saW5lLmM6MTg0Cittc2dpZCAiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICJFbCBudWNsaSBubyDDqXMgY29tcGF0aWJsZSBhbWIgZWwgY2FudmkgZGUgbWlkYSBlbiBsw61uaWEiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGVyZm9ybWluZyBhbiBvbi1saW5lIHJlc2l6ZSBvZiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiRXMgcmVhbGl0emEgdW4gY2FudmkgZGUgbWlkYSBlbiBsw61uaWEgZGUgJXMgYSAlbGx1ICglZGspIGJsb2NzLlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MjMzCittc2dpZCAiV2hpbGUgdHJ5aW5nIHRvIGV4dGVuZCB0aGUgbGFzdCBncm91cCIKK21zZ3N0ciAiRW4gaW50ZW50YXIgYW1wbGlhciBlbCBkYXJyZXIgZ3J1cCIKKworIzogcmVzaXplL29ubGluZS5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gYWRkIGdyb3VwICMlZCIKK21zZ3N0ciAiRW4gaW50ZW50YXIgYWZlZ2lyIGVsIGdydXAgIyVkIgorCisjOiByZXNpemUvb25saW5lLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXMsIGFuZCBvbi1saW5lIHJlc2l6aW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gIgorInRoaXMgc3lzdGVtLlxuIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGEgJXMgZXN0w6AgbXVudGF0IGEgJXMsIGkgYXF1ZXN0IHNpc3RlbWEgbm8gw6lzICIKKyJjb21wYXRpYmxlIGFtYiBlbCBjYW52aSBkZSBtaWRhIGVuIGzDrW5pYS5cbiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICJlbCBub21icmUgZGUgbm9kZXMtaSAoJWxsdSkgaGEgZGUgc2VyIG1lbm9yIHF1ZSAldSIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjY5MQorbXNnaWQgInJlc2VydmVkIGJsb2NrcyIKK21zZ3N0ciAiYmxvY3MgcmVzZXJ2YXRzIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6OTM2Cittc2dpZCAibWV0YS1kYXRhIGJsb2NrcyIKK21zZ3N0ciAiYmxvY3MgZGUgbWV0YWRhZGVzIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MTAzOSByZXNpemUvcmVzaXplMmZzLmM6MTgzNgorbXNnaWQgIm5ldyBtZXRhIGJsb2NrcyIKK21zZ3N0ciAibm91cyBibG9jcyBkZSBtZXRhZGFkZXMiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMDU2Cittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbiEgIE5vIHNiIGluIGxhc3Qgc3VwZXJfc3BhcnNlIGJnP1xuIgorbXNnc3RyICJObyBoYXVyaWEgZGUgcGFzc2FyIG1haSEgIE5vIGhpIGhhIHNiIGFsIGRhcnJlciBzdXBlcl9zcGFyc2UgYmc/XG4iCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMDYxCittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbiEgIFVuZXhwZWN0ZWQgb2xkX2Rlc2MgaW4gc3VwZXJfc3BhcnNlIGJnP1xuIgorbXNnc3RyICJObyBoYXVyaWEgZGUgcGFzc2FyIG1haSEgIG9sZF9kZXNjIGluZXNwZXJhdCBhbCBzdXBlcl9zcGFyc2UgYmc/XG4iCisKKyMgRklYTUU6IChkcG0pCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjEzOQorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW46IHJlc2l6ZSBpbm9kZSBjb3JydXB0IVxuIgorbXNnc3RyICJBaXjDsiBubyBoYXVyaWEgZGUgcGFzc2FyIG1haTogY2FudmkgZGUgbWlkYSBkZWwgbm9kZS1pIG1hbG1lc2FcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExCisjLCBmdXp6eQorbXNnaWQgIkVYVDJGUyBMaWJyYXJ5IHZlcnNpb24gMS40Mi4xMyIKK21zZ3N0ciAiVmVyc2nDsyAxLjQyLjEyIGRlIGxhIGxsaWJyZXJpYSBFWFQyRlMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0Ml9maWxzeXMgc3RydWN0dXJlIgorbXNnc3RyICJFbCBuw7ptZXJvIG3DoGdpYyDDqXMgaW5jb3JyZWN0ZSBwZXIgbCdlc3RydWN0dXJhIGQnZXh0Ml9maWxzeXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICJFbCBuw7ptZXJvIG3DoGdpYyDDqXMgaW5jb3JyZWN0ZSBwZXIgbCdlc3RydWN0dXJhIGRlIGJhZGJsb2Nrc19saXN0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19pdGVyYXRlIHN0cnVjdHVyZSIKK21zZ3N0ciAiRWwgbsO6bWVybyBtw6BnaWMgw6lzIGluY29ycmVjdGUgcGVyIGwnZXN0cnVjdHVyYSBkZSBiYWRibG9ja3NfaXRlcmF0ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9zY2FuIHN0cnVjdHVyZSIKK21zZ3N0ciAiRWwgbsO6bWVybyBtw6BnaWMgw6lzIGluY29ycmVjdGUgcGVyIGwnZXN0cnVjdHVyYSBkJ2lub2RlX3NjYW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkVsIG7Dum1lcm8gbcOgZ2ljIMOpcyBpbmNvcnJlY3RlIHBlciBsJ2VzdHJ1Y3R1cmEgZCdpb19jaGFubmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHVuaXggaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkVsIG7Dum1lcm8gbcOgZ2ljIMOpcyBpbmNvcnJlY3RlIHBlciBsJ2VzdHJ1Y3R1cmEgZCdpb19jaGFubmVsIGRlIHVuaXgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fbWFuYWdlciBzdHJ1Y3R1cmUiCittc2dzdHIgIkVsIG7Dum1lcm8gbcOgZ2ljIMOpcyBpbmNvcnJlY3RlIHBlciBsJ2VzdHJ1Y3R1cmEgZCdpb19tYW5hZ2VyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJsb2NrX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIkVsIG7Dum1lcm8gbcOgZ2ljIMOpcyBpbmNvcnJlY3RlIHBlciBsJ2VzdHJ1Y3R1cmEgZGUgYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIkVsIG7Dum1lcm8gbcOgZ2ljIMOpcyBpbmNvcnJlY3RlIHBlciBsJ2VzdHJ1Y3R1cmEgZCdpbm9kZV9iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZ2VuZXJpY19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICJFbCBuw7ptZXJvIG3DoGdpYyDDqXMgaW5jb3JyZWN0ZSBwZXIgbCdlc3RydWN0dXJhIGRlIGdlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHRlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKyJFbCBuw7ptZXJvIG3DoGdpYyDDqXMgaW5jb3JyZWN0ZSBwZXIgbCdlc3RydWN0dXJhIGRlIGwnaW9fY2hhbm5lbCBkZSBjb21wcm92YWNpw7MiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZGlyZWN0b3J5IGJsb2NrIGxpc3Qgc3RydWN0dXJlIgorbXNnc3RyICIiCisiRWwgbsO6bWVybyBtw6BnaWMgw6lzIGluY29ycmVjdGUgcGVyIGwnZXN0cnVjdHVyYSBkZSBsYSBsbGlzdGEgZGUgZGlyZWN0b3JpcyBkZSAiCisiYmxvY3MiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaWNvdW50IHN0cnVjdHVyZSIKK21zZ3N0ciAiRWwgbsO6bWVybyBtw6BnaWMgw6lzIGluY29ycmVjdGUgcGVyIGwnZXN0cnVjdHVyYSBkZSBsJ2ljb3VudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBQb3dlcnF1ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisiRWwgbsO6bWVybyBtw6BnaWMgw6lzIGluY29ycmVjdGUgcGVyIGwnZXN0cnVjdHVyYSBkZWwgUG93ZXJxdWVzdCBpb19jaGFubmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDIgZmlsZSBzdHJ1Y3R1cmUiCittc2dzdHIgIkVsIG7Dum1lcm8gbcOgZ2ljIMOpcyBpbmNvcnJlY3RlIHBlciBsJ2VzdHJ1Y3R1cmEgZGUgZml0eGVycyBkJ2V4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgRXh0MiBJbWFnZSBIZWFkZXIiCittc2dzdHIgIkVsIG7Dum1lcm8gbcOgZ2ljIMOpcyBpbmNvcnJlY3RlIHBlciBsJ0V4dDIgSW1hZ2UgSGVhZGVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisiRWwgbsO6bWVybyBtw6BnaWMgw6lzIGluY29ycmVjdGUgcGVyIGwnZXN0cnVjdHVyYSBkZSBsJ2lvX2NoYW5uZWwgZGVsIG5vZGUtaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBoYW5kbGUiCittc2dzdHIgIkVsIG7Dum1lcm8gbcOgZ2ljIMOpcyBpbmNvcnJlY3RlIHBlciBsYSBnZXN0acOzIGRlIGwnZXh0NCBlc3TDqHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyBudW1iZXIgaW4gc3VwZXItYmxvY2siCittc2dzdHIgIkVsIG7Dum1lcm8gbcOgZ2ljIGRlbCBzdXBlcmJsb2Mgw6lzIGluY29ycmVjdGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMQorbXNnaWQgIkZpbGVzeXN0ZW0gcmV2aXNpb24gdG9vIGhpZ2giCittc2dzdHIgIkxhIHZlcnNpw7MgZGVsIHNpc3RlbWEgZGUgZml0eGVycyDDqXMgbWFzc2EgYWx0YSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMyCittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSB0byBmaWxlc3lzdGVtIG9wZW5lZCByZWFkLW9ubHkiCittc2dzdHIgIiIKKyJTJ2ludGVudGEgZXNjcml1cmUgZW4gdW4gc2lzdGVtYSBkZSBmaXR4ZXJzIG9iZXJ0IGNvbSBhIG5vbcOpcyBkZSBsZWN0dXJhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzMKK21zZ2lkICJDYW4ndCByZWFkIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICJObyBlcyBwb2RlbiBsbGVnaXIgZWxzIGRlc2NyaXB0b3JzIGRlIGdydXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNAorbXNnaWQgIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICJObyBlcyBwb2RlbiBlc2NyaXVyZSBlbHMgZGVzY3JpcHRvcnMgZGUgZ3J1cCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM1Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiIgorIkVsIGRlc2NyaXB0b3IgZGUgZ3J1cHMgZXN0w6AgY29ycm9tcHV0OiBlbCBibG9jIHBlbCBibG9jIGRlIG1hcGEgZGUgYml0cyDDqXMgIgorImluY29ycmVjdGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNgorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKyJFbCBkZXNjcmlwdG9yIGRlIGdydXBzIGVzdMOgIGNvcnJvbXB1dDogZWwgYmxvYyBwZWwgbm9kZS1pIGRlbCBtYXBhIGRlIGJpdHMgIgorIsOpcyBpbmNvcnJlY3RlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzcKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKyJFbCBkZXNjcmlwdG9yIGRlIGdydXBzIGVzdMOgIGNvcnJvbXB1dDogbGEgdGF1bGEgYmxvYyBwZXIgbm9kZS1pIMOpcyBpbmNvcnJlY3RhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzgKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIk5vIGVzIHBvdCBlc2NyaXVyZSB1biBtYXBhIGRlIGJpdHMgZGUgbm9kZXMtaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM5Cittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIk5vIGVzIHBvdCBsbGVnaXIgdW4gbWFwYSBkZSBiaXRzIGRlIG5vZGVzLWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MAorbXNnaWQgIkNhbid0IHdyaXRlIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICJObyBlcyBwb3QgZXNjcml1cmUgdW4gbWFwYSBkZSBiaXRzIGRlIGJsb2NzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDEKK21zZ2lkICJDYW4ndCByZWFkIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICJObyBlcyBwb3QgbGxlZ2lyIHVuIG1hcGEgZGUgYml0cyBkZSBibG9jcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQyCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIk5vIGVzIHBvdCBlc2NyaXVyZSB1bmEgdGF1bGEgZGUgbm9kZXMtaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQzCittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiTm8gZXMgcG90IGxsZWdpciB1bmEgdGF1bGEgZGUgbm9kZXMtaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ0Cittc2dpZCAiQ2FuJ3QgcmVhZCBuZXh0IGlub2RlIgorbXNnc3RyICJObyBlcyBwb3QgbGxlZ2lyIGVsIHNlZ8O8ZW50IG5vZGUtaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ1Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5leHBlY3RlZCBibG9jayBzaXplIgorbXNnc3RyICJFbCBzaXN0ZW1hIGRlIGZpdHhlcnMgdMOpIHVuIGJsb2MgZGUgbWlkYSBpbmVzcGVyYWRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDYKK21zZ2lkICJFWFQyIGRpcmVjdG9yeSBjb3JydXB0ZWQiCittc2dzdHIgIkVsIGRpcmVjdG9yaSBkJ0VYVDIgZXN0w6AgY29ycm9tcHV0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDcKK21zZ2lkICJBdHRlbXB0IHRvIHJlYWQgYmxvY2sgZnJvbSBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHJlYWQiCittc2dzdHIgIiIKKyJMJ2ludGVudCBkZSBsbGVnaXIgdW4gYmxvYyBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGhhIHJlc3VsdGF0IGVuIHVuYSBsZWN0dXJhICIKKyJjdXJ0YSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ4Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBibG9jayB0byBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHdyaXRlIgorbXNnc3RyICIiCisiTCdpbnRlbnQgZCdlc2NyaXVyZSB1biBibG9jIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgaGEgcmVzdWx0YXQgZW4gdW5hICIKKyJlc2NyaXB0dXJhIGN1cnRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDkKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIHRoZSBkaXJlY3RvcnkiCittc2dzdHIgIk5vIHF1ZWRhIGVzcGFpIGxsaXVyZSBhbCBkaXJlY3RvcmkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MAorbXNnaWQgIklub2RlIGJpdG1hcCBub3QgbG9hZGVkIgorbXNnc3RyICJObyBzJ2hhIGNhcnJlZ2F0IGVsIG1hcGEgZGUgYml0cyBkZSBub2Rlcy1pIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKK21zZ2lkICJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiTm8gcydoYSBjYXJyZWdhdCBlbCBtYXBhIGRlIGJpdHMgZGUgYmxvY3MiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MgorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIgorbXNnc3RyICJFbCBuw7ptZXJvIGRlbCBub2RlLWkgbm8gw6lzIGNvcnJlY3RlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTMKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiRWwgbsO6bWVybyBkZSBibG9jIG5vIMOpcyBjb3JyZWN0ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3IgaW4gZXh0MmZzX2V4cGFuZF9kaXIiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGEgZXh0MmZzX2V4cGFuZF9kaXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gYnVpbGQgcHJvcG9zZWQgZmlsZXN5c3RlbSIKK21zZ3N0ciAiTm8gaGkgaGEgcHJvdSBlc3BhaSBwZXIgY29uc3RydWlyIGVsIHNpc3RlbWEgZGUgZml0eGVycyBwcm9wb3NhdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU2Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiUydoYSBpbmRpY2F0IHVuIG7Dum1lcm8gZGUgYmxvYyBpbmNvcnJlY3RlIGEgZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTcKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIlMnaGEgaW5kaWNhdCB1biBuw7ptZXJvIGRlIGJsb2MgaW5jb3JyZWN0ZSBhIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTgKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIgorbXNnc3RyICJTJ2hhIGluZGljYXQgdW4gbsO6bWVybyBkZSBibG9jIGluY29ycmVjdGUgYSBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIlMnaGEgaW5kaWNhdCB1biBuw7ptZXJvIGRlIG5vZGUtaSBpbmNvcnJlY3RlIGEgZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjAKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKyJTJ2hhIGluZGljYXQgdW4gbsO6bWVybyBkZSBub2RlLWkgaW5jb3JyZWN0ZSBhIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjEKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIgorbXNnc3RyICJTJ2hhIGluZGljYXQgdW4gbsO6bWVybyBkZSBub2RlLWkgaW5jb3JyZWN0ZSBhIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYyCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgYmxvY2sgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICIiCisiTCdpbnRlbnQgZGUgZmFsc2VqYXIgZWwgZmluYWwgZGVsIG1hcGEgZGUgYml0cyBkZSBibG9jcyBoYSBzdXBlcmF0IGVsIGZpbmFsICIKKyJyZWFsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjMKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBpbm9kZSBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIiIKKyJMJ2ludGVudCBkZSBmYWxzZWphciBlbCBmaW5hbCBkZWwgbWFwYSBkZSBiaXRzIGRlIG5vZGVzLWkgaGEgc3VwZXJhdCBlbCAiCisiZmluYWwgcmVhbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY0Cittc2dpZCAiSWxsZWdhbCBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiUydoYSB0cm9iYXQgdW4gYmxvYyBpbmRpcmVjdGUgaW5jb3JyZWN0ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY1Cittc2dpZCAiSWxsZWdhbCBkb3VibHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIlMnaGEgdHJvYmF0IHVuIGJsb2MgZG9ibGVtZW50IGluZGlyZWN0ZSBpbmNvcnJlY3RlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjYKK21zZ2lkICJJbGxlZ2FsIHRyaXBseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiUydoYSB0cm9iYXQgdW4gYmxvYyB0cmlwbGVtZW50IGluZGlyZWN0ZSBpbmNvcnJlY3RlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjcKK21zZ2lkICJCbG9jayBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIkVscyBtYXBlcyBkZSBiaXRzIGRlIGJsb2NzIG5vIHPDs24gaWd1YWxzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjgKK21zZ2lkICJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIkVscyBtYXBlcyBkZSBiaXRzIGRlIG5vZGVzLWkgbm8gc8OzbiBpZ3VhbHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OQorbXNnaWQgIklsbGVnYWwgb3IgbWFsZm9ybWVkIGRldmljZSBuYW1lIgorbXNnc3RyICJFbCBub20gZGVsIGRpc3Bvc2l0aXUgw6lzIGluY29ycmVjdGUgbyBlc3TDoCBtYWwgY29uc3RydcOvdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcwCittc2dpZCAiQSBibG9jayBncm91cCBpcyBtaXNzaW5nIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJIaSBoYSB1biBncnVwIGRlIGJsb2NzIGFsIHF1ZSBsaSBmYWx0YSB1bmEgdGF1bGEgZGUgbm9kZXMtaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcxCittc2dpZCAiVGhlIGV4dDIgc3VwZXJibG9jayBpcyBjb3JydXB0IgorbXNnc3RyICJFbCBzdXBlcmJsb2MgZCdleHQyIGVzdMOgIGNvcnJvbXB1dCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcyCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisiUydoYSBpbmRpY2F0IHVuIG7Dum1lcm8gZGUgYml0IGdlbsOocmljIGluY29ycmVjdGUgYSBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjczCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKyJTJ2hhIGluZGljYXQgdW4gbsO6bWVybyBkZSBiaXQgZ2Vuw6hyaWMgaW5jb3JyZWN0ZSBhICIKKyJleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzQKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKyJTJ2hhIGluZGljYXQgdW4gbsO6bWVybyBkZSBiaXQgZ2Vuw6hyaWMgaW5jb3JyZWN0ZSBhIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzUKK21zZ2lkICJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIlMnaGFuIHRyb2JhdCBtYXNzYSBlbmxsYcOnb3Mgc2ltYsOybGljcy4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NgorbXNnaWQgIlRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIG5vdCBoYW5kbGUgdGhpcyBjYXNlIgorbXNnc3RyICJMYSBmdW5jacOzIGRlIGNyaWRhIGRlIHJldG9ybiBubyBjb250ZW1wbGEgYXF1ZXN0IGNhcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc3Cittc2dpZCAiVGhlIGlub2RlIGlzIGZyb20gYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJFbCBub2RlLWkgY29ycmVzcG9uIGEgdW4gYmxvYyBpbmNvcnJlY3RlIGEgbGEgdGF1bGEgZGUgbm9kZXMtaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc4Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKSIKK21zZ3N0ciAiIgorIkhpIGhhIHVuYSBvIG3DqXMgZnVuY2lvbnMgcXVlIG5vIGVzdGFuIGltcGxlbWVudGFkZXMgcGVyIGFxdWVzdCBzaXN0ZW1hIGRlICIKKyJmaXR4ZXJzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzkKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCByZWFkLW9ubHkgZmVhdHVyZShzKSIKK21zZ3N0ciAiIgorIkhpIGhhIHVuYSBvIG3DqXMgZnVuY2lvbnMgbm9tw6lzIGRlIGxlY3R1cmEgcXVlIG5vIGVzdGFuIGltcGxlbWVudGFkZXMgcGVyICIKKyJhcXVlc3Qgc2lzdGVtYSBkZSBmaXR4ZXJzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODAKK21zZ2lkICJJTyBDaGFubmVsIGZhaWxlZCB0byBzZWVrIG9uIHJlYWQgb3Igd3JpdGUiCittc2dzdHIgIkVsIGNhbmFsIGRlIEUvUyBubyBoYSBwb2d1dCBjZXJjYXIgZW4gbGVjdHVyYSBvIGVzY3JpcHR1cmEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MQorbXNnaWQgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiTCdhc3NpZ25hY2nDsyBkZSBtZW3DsnJpYSBoYSBmYWxsYXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSIKK21zZ3N0ciAiUydoYSBpbmRpY2F0IHVuIGFyZ3VtZW50IGluY29ycmVjdGUgYSBsYSBsbGlicmVyaWEgZCdleHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODMKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgYmxvY2sgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFzc2lnbmFyIGJsb2NzIGFsIHNpc3RlbWEgZGUgZml0eGVycyBleHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODQKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgaW5vZGUgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFzc2lnbmFyIG5vZGVzLWkgYWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NQorbXNnaWQgIkV4dDIgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICJFbCBub2RlLWkgZGUgbCdleHQyIG5vIMOpcyB1biBkaXJlY3RvcmkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NgorbXNnaWQgIlRvbyBtYW55IHJlZmVyZW5jZXMgaW4gdGFibGUiCittc2dzdHIgIkxhIHRhdWxhIHTDqSBtYXNzYSByZWZlcsOobmNpZXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NworbXNnaWQgIkZpbGUgbm90IGZvdW5kIGJ5IGV4dDJfbG9va3VwIgorbXNnc3RyICJMJ2V4dDJfbG9va3VwIG5vIGhhIHRyb2JhdCBlbCBmaXR4ZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OAorbXNnaWQgIkZpbGUgb3BlbiByZWFkLW9ubHkiCittc2dzdHIgIkVsIGZpdHhlciBzJ2hhIG9iZXJ0IGNvbSBhIG5vbcOpcyBkZSBsZWN0dXJhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODkKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCittc2dzdHIgIk5vIHMnaGEgdHJvYmF0IGVsIGJsb2MgZGUgZGlyZWN0b3JpIGRlIGwnZXh0MiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkwCittc2dpZCAiRXh0MiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkVsIGRpcmVjdG9yaSBkZSBsJ2V4dDIgamEgZXhpc3RlaXgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MQorbXNnaWQgIlVuaW1wbGVtZW50ZWQgZXh0MiBsaWJyYXJ5IGZ1bmN0aW9uIgorbXNnc3RyICJMYSBmdW5jacOzIGRlIGxhIGxsaWJyZXJpYSBleHQyIG5vIGVzdMOgIGltcGxlbWVudGFkYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkyCittc2dpZCAiVXNlciBjYW5jZWwgcmVxdWVzdGVkIgorbXNnc3RyICJMJ3VzdWFyaSBoYSBkZW1hbmF0IGxhIGNhbmNlbMK3bGFjacOzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTMKK21zZ2lkICJFeHQyIGZpbGUgdG9vIGJpZyIKK21zZ3N0ciAiRWwgZml0eGVyIGRlIGwnZXh0MiDDqXMgbWFzc2EgZ3JhbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk0Cittc2dpZCAiU3VwcGxpZWQgam91cm5hbCBkZXZpY2Ugbm90IGEgYmxvY2sgZGV2aWNlIgorbXNnc3RyICJFbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgaW5kaWNhdCBubyDDqXMgdW4gZGlzcG9zaXRpdSBkZSBibG9jcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk1Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiRWwgc3VwZXJibG9jIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgbm8gcydoYSB0cm9iYXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NgorbXNnaWQgIkpvdXJuYWwgbXVzdCBiZSBhdCBsZWFzdCAxMDI0IGJsb2NrcyIKK21zZ3N0ciAiRWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIGhhIGRlIHRlbmlyIGNvbSBhIG3DrW5pbSAxMDI0IGJsb2NzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTcKK21zZ2lkICJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iCittc2dzdHIgIk5vIGVzIHBlcm1ldCBsJ8O6cyBkZSBsYSB2ZXJzacOzIGRlIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgZXh0ZXJuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTkKK21zZ2lkICJKb3VybmFsIG5vdCBmb3VuZCIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAwCittc2dpZCAiRGlyZWN0b3J5IGhhc2ggdW5zdXBwb3J0ZWQiCittc2dzdHIgIk5vIGVzIHBlcm1ldCBsJ8O6cyBkZWwgaGFzaCBkZSBkaXJlY3RvcmlzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAxCittc2dpZCAiSWxsZWdhbCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJFbCBuw7ptZXJvIGRlIGJsb2MgZGUgbCdhdHJpYnV0IGV4dMOpcyBubyDDqXMgY29ycmVjdGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDIKK21zZ2lkICJDYW5ub3QgY3JlYXRlIGZpbGVzeXN0ZW0gd2l0aCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGlub2RlcyIKK21zZ3N0ciAiTm8gZXMgcG90IGNyZWFyIGVsIHNpc3RlbWEgZGUgZml0eGVycyBhbWIgZWwgbm9tYnJlIGRlIG5vZGVzLWkgZGVtYW5hdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMworbXNnaWQgIkUyaW1hZ2Ugc25hcHNob3Qgbm90IGluIHVzZSIKK21zZ3N0ciAiTGEgaW5zdGFudMOgbmlhIGRlIGwnRTJpbWFnZSBubyBlcyBmYSBzZXJ2aXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDQKK21zZ2lkICJUb28gbWFueSByZXNlcnZlZCBncm91cCBkZXNjcmlwdG9yIGJsb2NrcyIKK21zZ3N0ciAiSGkgaGEgbWFzc2EgYmxvY3MgZGVzY3JpcHRvcnMgZGUgZ3J1cCByZXNlcnZhdHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDUKK21zZ2lkICJSZXNpemUgaW5vZGUgaXMgY29ycnVwdCIKK21zZ3N0ciAiRWwgY2FudmkgZGUgbWlkYSBkZWwgbm9kZS1pIGVzdMOgIGNvcnJvbXB1dCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNgorbXNnaWQgIlRyaWVkIHRvIHNldCBibG9jayBibWFwIHdpdGggbWlzc2luZyBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiIgorIlMnaGEgcHJvdmF0IGQnZXN0YWJsaXIgZWwgYm1hcCBkZWwgYmxvYyBhbWIgZWwgYmxvYyBpbmRpcmVjdGUgcXVlIGZhbHRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA3Cittc2dpZCAiVERCOiBTdWNjZXNzIgorbXNnc3RyICJUREI6IENvcnJlY3RlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA4Cittc2dpZCAiVERCOiBDb3JydXB0IGRhdGFiYXNlIgorbXNnc3RyICJUREI6IEJhc2UgZGUgZGFkZXMgY29ycm9tcHVkYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOQorbXNnaWQgIlREQjogSU8gRXJyb3IiCittc2dzdHIgIlREQjogRXJyb3IgZGUgRS9TIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEwCittc2dpZCAiVERCOiBMb2NraW5nIGVycm9yIgorbXNnc3RyICJUREI6IEVycm9yIGRlIGJsb3F1ZWlnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTExCittc2dpZCAiVERCOiBPdXQgb2YgbWVtb3J5IgorbXNnc3RyICJUREI6IFNlbnNlIG1lbcOycmlhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEyCittc2dpZCAiVERCOiBSZWNvcmQgZXhpc3RzIgorbXNnc3RyICJUREI6IEVsIHJlZ2lzdHJlIGphIGV4aXN0ZWl4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEzCittc2dpZCAiVERCOiBMb2NrIGV4aXN0cyBvbiBvdGhlciBrZXlzIgorbXNnc3RyICJUREI6IEVsIGJsb3F1ZWlnIGphIGV4aXN0ZWl4IGFtYiBhbHRyZXMgY2xhdXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTQKK21zZ2lkICJUREI6IEludmFsaWQgcGFyYW1ldGVyIgorbXNnc3RyICJUREI6IEVsIHBhcsOgbWV0cmUgbm8gw6lzIHZhbGlkIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE1Cittc2dpZCAiVERCOiBSZWNvcmQgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIlREQjogRWwgcmVnaXN0cmUgbm8gZXhpc3RlaXgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTYKK21zZ2lkICJUREI6IFdyaXRlIG5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIlREQjogTm8gZXMgcG90IGVzY3JpdXJlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE3Cittc2dpZCAiRXh0MmZzIGRpcmVjdG9yeSBibG9jayBsaXN0IGlzIGVtcHR5IgorbXNnc3RyICJMYSBsbGlzdGEgZGUgYmxvY3MgZGUgZGlyZWN0b3JpIGRlIGwnZXh0MmZzIGVzdMOgIGJ1aWRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE4Cittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgYSBibG9jayBtYXBwaW5nIHZpYSBhIHJlYWQtb25seSBibG9jayBpdGVyYXRvciIKK21zZ3N0ciAiIgorIlMnaW50ZW50YSBtb2RpZmljYXIgdW4gbWFwYXRnZSBkZSBibG9jcyBhIHRyYXbDqXMgZCd1biBpdGVyYWRvciBkZSBibG9jcyBkZSAiCisibm9tw6lzIGxlY3R1cmEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IHNhdmVkIHBhdGgiCittc2dzdHIgIkVsIG7Dum1lcm8gbcOgZ2ljIG5vIMOpcyBjb3JyZWN0ZSBwZWwgY2Ftw60gZCdleHQ0IGVzdMOocyBkZXNhdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGdlbmVyaWMgYml0bWFwIgorbXNnc3RyICJFbCBuw7ptZXJvIG3DoGdpYyBubyDDqXMgY29ycmVjdGUgcGVsIG1hcGEgZGUgYml0cyBkZSA2NCBiaXRzIGdlbsOocmljIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgYmxvY2sgYml0bWFwIgorbXNnc3RyICJFbCBuw7ptZXJvIG3DoGdpYyBubyDDqXMgY29ycmVjdGUgcGVsIG1hcGEgZGUgYml0cyBkZSBibG9jcyBkZSA2NCBiaXRzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgaW5vZGUgYml0bWFwIgorbXNnc3RyICJFbCBuw7ptZXJvIG3DoGdpYyBubyDDqXMgY29ycmVjdGUgcGVsIG1hcGEgZGUgYml0cyBkZSBub2Rlcy1pIGRlIDY0IGJpdHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzEzIgorbXNnc3RyICJFbCBuw7ptZXJvIG3DoGdpYyBubyDDqXMgY29ycmVjdGUgLS0tIFJFU0VSVkFUXzEzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNCIKK21zZ3N0ciAiRWwgbsO6bWVybyBtw6BnaWMgbm8gw6lzIGNvcnJlY3RlIC0tLSBSRVNFUlZBVF8xNCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTUiCittc2dzdHIgIkVsIG7Dum1lcm8gbcOgZ2ljIG5vIMOpcyBjb3JyZWN0ZSAtLS0gUkVTRVJWQVRfMTUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE2IgorbXNnc3RyICJFbCBuw7ptZXJvIG3DoGdpYyBubyDDqXMgY29ycmVjdGUgLS0tIFJFU0VSVkFUXzE2IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNyIKK21zZ3N0ciAiRWwgbsO6bWVybyBtw6BnaWMgbm8gw6lzIGNvcnJlY3RlIC0tLSBSRVNFUlZBVF8xNyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTgiCittc2dzdHIgIkVsIG7Dum1lcm8gbcOgZ2ljIG5vIMOpcyBjb3JyZWN0ZSAtLS0gUkVTRVJWQVRfMTgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE5IgorbXNnc3RyICJFbCBuw7ptZXJvIG3DoGdpYyBubyDDqXMgY29ycmVjdGUgLS0tIFJFU0VSVkFUXzE5IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMwCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaGVhZGVyIgorbXNnc3RyICJMYSBjYXDDp2FsZXJhIGVzdGVzYSBlc3TDoCBjb3Jyb21wdWRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMxCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaW5kZXgiCittc2dzdHIgIkwnw61uZGV4IGVzdMOocyBlc3TDoCBjb3Jyb21wdXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzIKK21zZ2lkICJDb3JydXB0IGV4dGVudCIKK21zZ3N0ciAiTCdlc3TDqHMgZXN0w6AgY29ycm9tcHV0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMzCittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiBleHRlbnQgbWFwIgorbXNnc3RyICJObyBxdWVkYSBlc3BhaSBsbGl1cmUgYWwgbWFwYSBlc3TDqHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzQKK21zZ2lkICJJbm9kZSBkb2VzIG5vdCB1c2UgZXh0ZW50cyIKK21zZ3N0ciAiRWwgbm9kZS1pIG5vIGZhIHNlcnZpciBlc3Rlc29zIgorCisjIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXh0ZW50XyhmaWxlX3N5c3RlbXMpLiBIaSBoYSBsYSB1YmljYWNpw7MgYmFzYWRhIGVuIGJsb2NzIGkgbGEgdWJpY2FjacOzIGJhc2FkYSBlbiDCq2V4dGVudHPCuyAoZHBtKS4KKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzUKK21zZ2lkICJObyAnbmV4dCcgZXh0ZW50IgorbXNnc3RyICJObyBoaSBoYSBsJ2VzdMOocyDCq3NlZ8O8ZW50wrsiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzYKK21zZ2lkICJObyAncHJldmlvdXMnIGV4dGVudCIKK21zZ3N0ciAiTm8gaGkgaGEgbCdlc3TDqHMgwqthbnRlcmlvcsK7IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM3Cittc2dpZCAiTm8gJ3VwJyBleHRlbnQiCittc2dzdHIgIk5vIGhpIGhhIGwnZXN0w6hzIMKrYW11bnTCuyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOAorbXNnaWQgIk5vICdkb3duJyBleHRlbnQiCittc2dzdHIgIk5vIGhpIGhhIGwnZXN0w6hzIMKrYXZhbGzCuyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOQorbXNnaWQgIk5vIGN1cnJlbnQgbm9kZSIKK21zZ3N0ciAiTm8gaGkgaGEgbm9kZSBhY3R1YWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDAKK21zZ2lkICJFeHQyZnMgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIk5vIGVzIHBlcm1ldCBsJ29wZXJhY2nDsyBFeHQyZnMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDEKK21zZ2lkICJObyByb29tIHRvIGluc2VydCBleHRlbnQgaW4gbm9kZSIKK21zZ3N0ciAiTm8gaGkgaGEgZXNwYWkgcGVyIGluc2VyaXIgbCdleHRlbnNpw7MgYWwgbm9kZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MgorbXNnaWQgIlNwbGl0dGluZyB3b3VsZCByZXN1bHQgaW4gZW1wdHkgbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQzCisjLCBmdXp6eQorbXNnaWQgIkV4dGVudCBub3QgZm91bmQiCittc2dzdHIgIk5vIHMnaGEgdHJvYmF0IC9AbC4gICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NAorbXNnaWQgIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGZvciBpbm9kZXMgY29udGFpbmluZyBleHRlbnRzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDUKK21zZ2lkICJFeHRlbnQgbGVuZ3RoIGlzIGludmFsaWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NgorbXNnaWQgIkkvTyBDaGFubmVsIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IGJsb2NrIG51bWJlcnMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NworbXNnaWQgIkNhbid0IGNoZWNrIGlmIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBkdWUgdG8gbWlzc2luZyBtdGFiIGZpbGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OAorbXNnaWQgIkZpbGVzeXN0ZW0gdG9vIGxhcmdlIHRvIHVzZSBsZWdhY3kgYml0bWFwcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ5Cittc2dpZCAiTU1QOiBpbnZhbGlkIG1hZ2ljIG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUwCittc2dpZCAiTU1QOiBkZXZpY2UgY3VycmVudGx5IGFjdGl2ZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUxCittc2dpZCAiTU1QOiBmc2NrIGJlaW5nIHJ1biIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUyCittc2dpZCAiTU1QOiBibG9jayBudW1iZXIgYmV5b25kIGZpbGVzeXN0ZW0gcmFuZ2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MworbXNnaWQgIk1NUDogdW5kZXJnb2luZyBhbiB1bmtub3duIG9wZXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU0Cittc2dpZCAiTU1QOiBmaWxlc3lzdGVtIHN0aWxsIGluIHVzZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU1Cittc2dpZCAiTU1QOiBvcGVuIHdpdGggT19ESVJFQ1QgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTYKKyMsIGZ1enp5Cittc2dpZCAiQmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBzaXplIGluY29ycmVjdCIKK21zZ3N0ciAiPEVsIG5vZGUtaSBkZWwgZGVzY3JpcHRvciBkZSBncnVwPiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NworbXNnaWQgIklub2RlIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGlub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTgKK21zZ2lkICJJbm9kZSBiaXRtYXAgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTkKK21zZ2lkICJFeHRlbnQgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZXh0ZW50IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjAKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgZG9lcyBub3QgaGF2ZSBzcGFjZSBmb3IgY2hlY2tzdW0iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MQorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MgorbXNnaWQgIkV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYzCisjLCBmdXp6eQorbXNnaWQgIlN1cGVyYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggc3VwZXJibG9jayIKK21zZ3N0ciAiQ8OycGllcyBkZSBzZWd1cmV0YXQgZGVsIHN1cGVyYmxvYyBkZXNhZGVzIGVuIGVscyBibG9jczogIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY0Cittc2dpZCAiVW5rbm93biBjaGVja3N1bSBhbGdvcml0aG0iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NQorbXNnaWQgIk1NUCBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBNTVAgYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NgorbXNnaWQgIkV4dDIgZmlsZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMQorbXNnaWQgIlByb2ZpbGUgdmVyc2lvbiAwLjAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTIKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9ub2RlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEzCisjLCBmdXp6eQorbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBub3QgZm91bmQiCittc2dzdHIgImVuIGNyZWFyIC9sb3N0K2ZvdW5kIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNAorIywgZnV6enkKK21zZ2lkICJQcm9maWxlIHJlbGF0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiZW4gY3JlYXIgL2xvc3QrZm91bmQiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE1Cittc2dpZCAiQXR0ZW1wdCB0byBhZGQgYSByZWxhdGlvbiB0byBub2RlIHdoaWNoIGlzIG5vdCBhIHNlY3Rpb24iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTYKK21zZ2lkICJBIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgaGFzIGEgbm9uLXplcm8gdmFsdWUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTcKK21zZ2lkICJCYWQgbGlua2VkIGxpc3QgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE4Cittc2dpZCAiQmFkIGdyb3VwIGxldmVsIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOQorbXNnaWQgIkJhZCBwYXJlbnQgcG9pbnRlciBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZSBpdGVyYXRvciIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMQorbXNnaWQgIkNhbid0IHNldCB2YWx1ZSBvbiBzZWN0aW9uIG5vZGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjMKK21zZ2lkICJBdHRlbXB0IHRvIG1vZGlmeSByZWFkLW9ubHkgcHJvZmlsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNAorbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgbm90IGF0IHRvcCBsZXZlbCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNQorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI2Cittc2dpZCAiU3ludGF4IGVycm9yIGluIHByb2ZpbGUgcmVsYXRpb24iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjcKK21zZ2lkICJFeHRyYSBjbG9zaW5nIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjgKK21zZ2lkICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyOQorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9zZWN0aW9uX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzEKK21zZ2lkICJJdGVyYXRpb24gdGhyb3VnaCBhbGwgdG9wIGxldmVsIHNlY3Rpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMgorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIHByb2ZpbGVfc2VjdGlvbiBvYmplY3QiCittc2dzdHIgIlMnaGEgZGVmaW5pdCB1bmEgb3BjacOzIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgbm8gdsOgbGlkYTogJXNcbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzMKK21zZ2lkICJObyBtb3JlIHNlY3Rpb25zIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM0Cittc2dpZCAiQmFkIG5hbWVzZXQgcGFzc2VkIHRvIHF1ZXJ5IHJvdXRpbmUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzUKK21zZ2lkICJObyBwcm9maWxlIGZpbGUgb3BlbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX2ZpbGVfdCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNworIywgZnV6enkKK21zZ2lkICJDb3VsZG4ndCBvcGVuIHByb2ZpbGUgZmlsZSIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBjbG9uYXIgZWwgZml0eGVyOiAlbVxuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOAorbXNnaWQgIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzkKK21zZ2lkICJJbnZhbGlkIGJvb2xlYW4gdmFsdWUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDAKK21zZ2lkICJJbnZhbGlkIGludGVnZXIgdmFsdWUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDEKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX2RhdGFfdCIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAiQ291bGQgbm90IHN0YXQgJXMgLS0tICVzXG4iCisjfiBtc2dzdHIgIk5vIHMnaGEgcG9ndXQgZmVyIGFsIGNyaWRhIHN0YXQgJXMgLS0lc1xuIgorCisjfiBtc2dpZCAiPFRoZSBBQ0wgaW5kZXggaW5vZGU+IgorI34gbXNnc3RyICI8RWwgbm9kZS1pIGRlIGwnw61uZGV4IGRlIGxlcyBBQ0w+IgorCisjfiBtc2dpZCAiPFRoZSBBQ0wgZGF0YSBpbm9kZT4iCisjfiBtc2dzdHIgIjxFbCBub2RlLWkgZGUgbGVzIGRhZGVzIGRlIGxlcyBBQ0w+IgorCisjfiBtc2dpZCAiQFMgZG9lc24ndCBoYXZlIGhhc19AaiBmbGFnLCBidXQgaGFzIGV4dDMgQGogJXMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJFbCBAUyBubyB0w6kgdW4gc2VueWFsYWRvciDCq2hhc19qb3VybmFswrsgKHTDqV9AaiksIHBlcsOyIHTDqSBlbCBAaiBleHQzICVzLlxuIgorCisjfiBtc2dpZCAiUmVjcmVhdGUgam91cm5hbCB0byBtYWtlIHRoZSBmaWxlc3lzdGVtIGV4dDMgYWdhaW4/XG4iCisjfiBtc2dzdHIgIiIKKyN+ICJWb2xldSB0b3JuYXIgYSBjcmVhciBlbCBqb3JuYWwgcGVyIGEgZmVyIHF1ZSBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgdG9ybmkgIgorI34gImEgc2VyIGV4dDM/XG4iCisKKyN+IG1zZ2lkICJDb3VsZG4ndCBkZXRlcm1pbmUgam91cm5hbCBzaXplIgorI34gbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGRldGVybWluYXIgbGEgbWlkYSBkZWwgcmVnaXN0cmUgZGUgY2FudmlzIgorCisjfiBtc2dpZCAiYmFkIGJsb2NrIHNpemUgLSAlcyIKKyN+IG1zZ3N0ciAibWlkYSBkZWwgYmxvYyBlcnJvbmkgLSAlcyIKKworI34gbXNnaWQgImludmFsaWQgZnJhZ21lbnQgc2l6ZSAtICVzIgorI34gbXNnc3RyICJtaWRhIGRlIGZyYWdtZW50IGludsOgbGlkYSAtICVzIgorCisjfiBtc2dpZCAiV2FybmluZzogZnJhZ21lbnRzIG5vdCBzdXBwb3J0ZWQuICBJZ25vcmluZyAtZiBvcHRpb25cbiIKKyN+IG1zZ3N0ciAiQXbDrXM6IGVscyBmcmFnbWVudHMgbm8gc8OzbiBjb21wYXRpYmxlcy4gUydpZ25vcmFyw6AgbCdvcGNpw7MgLWZcbiIKKworI34gbXNnaWQgIkpvdXJuYWwgTk9UIHJlbW92ZWRcbiIKKyN+IG1zZ3N0ciAiTk8gcydoYSBzdXByaW1pdCBlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnNcbiIKKworI34gbXNnaWQgIiNcdFx0ICV1IC0+ICV1ICglZClcbiIKKyN+IG1zZ3N0ciAiI1x0XHQgJXUgLT4gJXUgKCVkKVxuIgorCisjfiBtc2dpZCAiIgorI34gIiVzOiBUaGUgY29tYmluYXRpb24gb2YgZmxleF9iZyBhbmRcbiIKKyN+ICJcdCFyZXNpemVfaW5vZGUgZmVhdHVyZXMgaXMgbm90IHN1cHBvcnRlZCBieSByZXNpemUyZnMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIlczogbGEgY29tYmluYWNpw7MgZGUgbGVzIGZ1bmNpb25zIGZsZXhfYmcgaVxuIgorI34gIlx0IXJlc2l6ZV9pbm9kZSBubyDDqXMgY29tcGF0aWJsZSBhbWIgZWwgcmVzaXplMmZzLlxuIgorCisjfiBtc2dpZCAid2hpbGUgY2FsbGluZyBpdGVyYXRvciBmdW5jdGlvbiIKKyN+IG1zZ3N0ciAiZW4gZmVyIGxhIGNyaWRhIGEgbGEgZnVuY2nDsyBkJ2l0ZXJhY2nDsyIKKworI34gbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgaW5vZGUgYnVmZmVyIgorI34gbXNnc3RyICJlbiB1YmljYXIgbGEgbWVtw7JyaWEgaW50ZXJtw6hkaWEgcGVyIGFsIG5vZGUtaSIKKworI34gbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgdGFibGUgKGdyb3VwICVkKSIKKyN+IG1zZ3N0ciAiZW4gbGxlZ2lyIGxhIHRhdWxhIGRlbHMgbm9kZXMtaSAoZ3J1cCAlZCkiCisKKyN+IG1zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIChncm91cCAlZCkiCisjfiBtc2dzdHIgImVuIGVzY3JpdXJlIGxhIHRhdWxhIGRlbHMgbm9kZXMtaSAoZ3J1cCAlZCkiCisKKyN+IG1zZ2lkICIlczogRmlsZXN5c3RlbSBieXRlIG9yZGVyIGFscmVhZHkgbm9ybWFsaXplZC5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIiVzOiBsJ29yZHJlIGRlbHMgYnl0ZXMgZGVsIHNpc3RlbWEgZGUgZml0eGVycyBqYSBlc3TDoCBub3JtYWxpdHphdC5cbiIKKworI34gbXNnaWQgImludmFsaWQgc3RhcnRpbmcgYmxvY2sgLSAlcyIKKyN+IG1zZ3N0ciAiYmxvYyBkJ2luaWNpIG5vIHbDoGxpZCAtICVzIgpkaWZmIC0tZ2l0IGEvcG8vY3MuZ21vIGIvcG8vY3MuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ODVkMGYKLS0tIC9kZXYvbnVsbAorKysgYi9wby9jcy5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vY3MucG8gYi9wby9jcy5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjgyMTEyCi0tLSAvZGV2L251bGwKKysrIGIvcG8vY3MucG8KQEAgLTAsMCArMSw3NTc3IEBACisjIEN6ZWNoIHRyYW5zbGF0aW9uIG9mIGUyZnNwcm9ncworIyBDb3B5cmlnaHQgKEMpIDIwMDggVGhlb2RvcmUgVHNvIChtc2dpZHMpCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4KKyMgTWlsb3NsYXYgVHJtYWMgPG1pdHJAdm9sbnkuY3o+LCAyMDAzLgorIyBQZXRyIFBpc2FyIDxwZXRyLnBpc2FyQGF0bGFzLmN6PiwgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNC4KKyMKKyMuIFRoZSBzdHJpbmdzIGluIGUyZnNjaydzIHByb2JsZW0uYyBjYW4gYmUgdmVyeSBoYXJkIHRvIHRyYW5zbGF0ZSwKKyMuIHNpbmNlIHRoZSBzdHJpbmdzIGFyZSBleHBhbmRlZCBpbiB0d28gZGlmZmVyZW50IHdheXMuICBGaXJzdCBvZiBhbGwsCisjLiB0aGVyZSBpcyBhbiBALWV4cGFuc2lvbiwgd2hlcmUgc3RyaW5ncyBsaWtlICJAaSIgYXJlIGV4cGFuZGVkIHRvCisjLiAiaW5vZGUiLCBhbmQgc28gb24uICBJbiBvcmRlciB0byBtYWtlIGl0IGVhc2llciBmb3IgdHJhbnNsYXRvcnMsIHRoZQorIy4gZTJmc3Byb2dzIHBvIHRlbXBsYXRlIGZpbGUgaGFzIGJlZW4gZW5oYW5jZWQgd2l0aCBjb21tZW50cyB0aGF0IHNob3cKKyMuIHRoZSBALWV4cGFuc2lvbiwgZm9yIHRoZSBzdHJpbmdzIGluIHRoZSBwcm9ibGVtLmMgZmlsZS4KKyMuCisjLiBUcmFuc2xhdG9ycyBhcmUgZnJlZSB0byB1c2UgdGhlIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGlmIHRoZXkgc28KKyMuIGNob29zZSwgYnkgcHJvdmlkaW5nIHRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBpbiBlMmZzY2svbWVzc2FnZS5jLgorIy4gVGhlc2UgdHJhbnNsYXRpb24gY2FuIGNvbXBsZXRlbHkgcmVwbGFjZSBhbiBleHBhbnNpb247IGZvciBleGFtcGxlLAorIy4gaWYgImJibG9jayIgKHdoaWNoIGluZGljYXRlZCB0aGF0ICJAYiIgd291bGQgYmUgZXhwYW5kZWQgdG8gImJsb2NrIikKKyMuIGlzIHRyYW5zbGF0ZWQgYXMgImRkYXRlbnZlcmx1c3QiLCB0aGVuICJAZCIgd2lsbCBiZSBleHBhbmRlZCB0bworIy4gImRhdGVudmVybHVzdCIuICBBbHRlcm5hdGl2ZWx5LCB0cmFuc2xhdG9ycyBjYW4gc2ltcGx5IG5vdCB1c2UgdGhlCisjLiBALWV4cGFuc2lvbiBmYWNpbGl0eSBhdCBhbGwuCisjLgorIy4gVGhlIHNlY29uZCBleHBhbnNpb24gd2hpY2ggaXMgZG9uZSBmb3IgZTJmc2NrJ3MgcHJvYmxlbS5jIG1lc3NhZ2VzIGlzCisjLiBhIGR5bmFtaWMgJS1leHBhbnNpb24sIHdoaWNoIGV4cGFuZHMgJWkgYXMgYW4gaW5vZGUgbnVtYmVyLCBhbmQgc28KKyMuIG9uLiAgQSB0YWJsZSBvZiB0aGVzZSBleHBhbnNpb25zIGNhbiBiZSBmb3VuZCBiZWxvdy4gIE5vdGUgdGhhdAorIy4gJS1leHByZXNzaW9ucyB0aGF0IGJlZ2luIHdpdGggIiVEIiBhbmQgIiVJIiBhcmUgdHdvLWNoYXJhY3RlcgorIy4gZXhwYW5zaW9uczsgc28gZm9yIGV4YW1wbGUsICIlSXUiIGV4cGFuZHMgdG8gdGhlIGlub2RlJ3MgdXNlciBpZAorIy4gb3duZXJzaGlwIGZpZWxkIChpbm9kZS0+aV91aWQpLiAgQWxzbyB0aGUgIiVCIiBleHBhbnNpb24gaXMgc3BlY2lhbDoKKyMuIGl0IGNhbiBleHBhbmQgdG8gZWl0aGVyIHRoZSBzdHJpbmcgImluZGlyZWN0IGJsb2NrIiAocG9zc2libHkgcHJlY2VkZWQKKyMuIGJ5IHRoZSB3b3JkICJkb3VibGUiIG9yICJ0cmlwbGUiKSwgb3IgdGhlIHN0cmluZyAiYmxvY2sgIyIgaW1tZWRpYXRlbHkKKyMuIGZvbGxvd2VkIGJ5IGFuIGludGVnZXIgaW5kaWNhdGluZyBhIGJsb2NrIHNlcXVlbmNlIG51bWJlci4KKyMuICAKKyMuIAklYgk8YmxrPgkJCWJsb2NrIG51bWJlcgorIy4gCSVCCSJpbmRpcmVjdCBibG9jayIgfCAiYmxvY2sgIyI8YmxrY291bnQ+CXN0cmluZyB8IHN0cmluZytpbnRlZ2VyCisjLiAJJWMJPGJsazI+CQkJYmxvY2sgbnVtYmVyCisjLiAJJURpCTxkaXJlbnQ+IC0+IGlubwkJaW5vZGUgbnVtYmVyCisjLiAJJURuCTxkaXJlbnQ+IC0+IG5hbWUJc3RyaW5nCisjLiAJJURyCTxkaXJlbnQ+IC0+IHJlY19sZW4KKyMuIAklRGwJPGRpcmVudD4gLT4gbmFtZV9sZW4KKyMuIAklRHQJPGRpcmVudD4gLT4gZmlsZXR5cGUKKyMuIAklZAk8ZGlyPiAJCQlpbm9kZSBudW1iZXIKKyMuIAklZwk8Z3JvdXA+CQkJaW50ZWdlcgorIy4gCSVpCTxpbm8+CQkJaW5vZGUgbnVtYmVyCisjLiAJJUlzCTxpbm9kZT4gLT4gaV9zaXplCisjLiAJJUlTCTxpbm9kZT4gLT4gaV9leHRyYV9pc2l6ZQorIy4gCSVJYgk8aW5vZGU+IC0+IGlfYmxvY2tzCisjLiAJJUlsCTxpbm9kZT4gLT4gaV9saW5rc19jb3VudAorIy4gCSVJbQk8aW5vZGU+IC0+IGlfbW9kZQorIy4gCSVJTQk8aW5vZGU+IC0+IGlfbXRpbWUKKyMuIAklSUYJPGlub2RlPiAtPiBpX2ZhZGRyCisjLiAJJUlmCTxpbm9kZT4gLT4gaV9maWxlX2FjbAorIy4gCSVJZAk8aW5vZGU+IC0+IGlfZGlyX2FjbAorIy4gCSVJdQk8aW5vZGU+IC0+IGlfdWlkCisjLiAJJUlnCTxpbm9kZT4gLT4gaV9naWQKKyMuIAklSXQJPHN0cj4JCQlmaWxlIHR5cGUKKyMuIAklagk8aW5vMj4JCQlpbm9kZSBudW1iZXIKKyMuIAklbQk8Y29tX2VyciBlcnJvciBtZXNzYWdlPgorIy4gCSVOCTxudW0+CisjLiAJJXAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+CisjLiAJJVAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgPGRpcmVudD4tPmlubyB3aXRoIDxpbm8yPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4gIChJZiBkaXJlbnQgaXMgTlVMTAorIy4gCQkJCXRoZW4gcmV0dXJuIHRoZSBwYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubzI+KQorIy4gCSVxCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8ZGlyPgorIy4gCSVRCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPiB3aXRoIDxkaXI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LgorIy4gCSVzCTxzdHI+CQkJbWlzY2VsbGFuZW91cyBzdHJpbmcKKyMuIAklUwkJYmFja3VwIHN1cGVyYmxvY2sKKyMuIAklWAk8bnVtPgloZXhhZGVjaW1hbCBmb3JtYXQKKyMuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBlMmZzcHJvZ3MgMS40Mi4xMi1wcmUyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IHR5dHNvQGFsdW0ubWl0LmVkdVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDIxOjI2LTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE0LTA4LTI2IDIyOjA3KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFBldHIgUGlzYXIgPHBldHIucGlzYXJAYXRsYXMuY3o+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQ3plY2ggPHRyYW5zbGF0aW9uLXRlYW0tY3NAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBjc1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MzsgcGx1cmFsPShuPT0xKSA/IDAgOiAobj49MiAmJiBuPD00KSA/IDEgOiAyO1xuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MjMgbWlzYy9ta2UyZnMuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrICV1IG91dCBvZiByYW5nZTsgaWdub3JlZC5cbiIKK21zZ3N0ciAixaBwYXRuw70gYmxvayAldSBtaW1vIHJvenNhaDsgaWdub3JvdsOhbi5cbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjQ2Cittc2dpZCAid2hpbGUgc2FuaXR5IGNoZWNraW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICJwxZlpIGtvbnRyb2xlIHNwcsOhdm5vc3RpIGl1emx1IMWhcGF0bsO9Y2ggYmxva8WvIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NTgKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICJwxZlpIMSNdGVuw60gaXV6bHUgxaFwYXRuw71jaCBibG9rxa8iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo3MiBlMmZzY2svc2NhbnRlc3QuYzoxMDcgZTJmc2NrL3VuaXguYzoxMzQ1CisjOiBlMmZzY2svdW5peC5jOjE0MzQgbWlzYy9iYWRibG9ja3MuYzoxMjQyIG1pc2MvYmFkYmxvY2tzLmM6MTI1MAorIzogbWlzYy9iYWRibG9ja3MuYzoxMjY0IG1pc2MvYmFkYmxvY2tzLmM6MTI3NiBtaXNjL2R1bXBlMmZzLmM6NjA0CisjOiBtaXNjL2UyaW1hZ2UuYzoxMzk2IG1pc2MvZTJpbWFnZS5jOjE1ODAgbWlzYy9lMmltYWdlLmM6MTU5OQorIzogbWlzYy9ta2UyZnMuYzoyMjcgbWlzYy90dW5lMmZzLmM6MTk1NSBtaXNjL3R1bmUyZnMuYzoyMDQ0IHJlc2l6ZS9tYWluLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICVzIgorbXNnc3RyICJwxZlpIHBva3VzdSBvdGV2xZnDrXQgJXMiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgcG9wZW4gJyVzJyIKK21zZ3N0ciAicMWZaSBwb2t1c3UgcG9wZW4g4oCeJXPigJwiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo5NCBtaXNjL21rZTJmcy5jOjIzNAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW4gbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gZmlsZSIKK21zZ3N0ciAicMWZaSBuYcSNw610w6Fuw60gc2V6bmFtdSDFoXBhdG7DvWNoIGJsb2vFryB6ZSBzb3Vib3J1IgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTA1Cittc2dpZCAid2hpbGUgdXBkYXRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICJwxZlpIGFrdHVhbGl6YWNpIGl1emx1IMWhcGF0bsO9Y2ggYmxva8WvIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGlsbGVnYWwgYmxvY2sgJXUgZm91bmQgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ2xlYXJlZC5cbiIKK21zZ3N0ciAiIgorIlZhcm92w6Fuw606IHbCoGl1emx1IMWhcGF0bsO9Y2ggYmxva8WvIG5hbGV6ZW4gbmVwb3ZvbGVuw70gYmxvayAldS4gVnltYXrDoW4uXG4iCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIkNoeWJhIHDFmWkgxI10ZW7DrSBibG9rdSAlbHUgKCVzKSBixJtoZW0gJXMuICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiQ2h5YmEgcMWZaSDEjXRlbsOtIGJsb2t1ICVsdSAoJXMpLiAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYxIGUyZnNjay9laGFuZGxlci5jOjExMAorbXNnaWQgIklnbm9yZSBlcnJvciIKK21zZ3N0ciAiSWdub3JvdmF0IGNoeWJ1IgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MgorbXNnaWQgIkZvcmNlIHJld3JpdGUiCittc2dzdHIgIlZ5bnV0aXQgcMWZZXBzw6Fuw60iCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICJDaHliYSBwxZlpIHrDoXBpc3UgYmxva3UgJWx1ICglcykgcMWZaSAlcy4gIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiQ2h5YmEgcMWZaSB6w6FwaXN1IGJsb2t1ICVsdSAoJXMpLiAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJwcsOhemRuw6kgYmxva3kgYWRyZXPDocWZxa8iCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjYyCittc2dpZCAiZW1wdHkgZGlyIG1hcCIKK21zZ3N0ciAibWFwYSBwcsOhemRuw71jaCBhZHJlc8OhxZnFryIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZGlyZWN0b3J5IGJsb2NrICV1ICgjJWQpIGluIGlub2RlICV1XG4iCittc2dzdHIgIlByw6F6ZG7DvSBibG9rIGFkcmVzw6HFmWUgJXUgKCMlZCkgdsKgaXV6bHUgJXVcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBmaWxlbmFtZSBuYmxvY2tzIGJsb2Nrc2l6ZVxuIgorbXNnc3RyICIlczogJXMgbsOhemV2X3NvdWJvcnUgcF9ibG9rxa8gdmVsaWtvc3RfYmxva3VcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIG9mIGJsb2NrcyFcbiIKK21zZ3N0ciAiTmVwbGF0bsO9IHBvxI1ldCBibG9rxa8hXG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIgKHNpemU9JWQpXG4iCittc2dzdHIgIk5lbW9odSBhbG9rb3ZhdCB2eXJvdm7DoXZhY8OtIHBhbcSbxaUgYmxva3UgKHZlbGlrb3N0PSVkKVxuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIGRpc2tcbiIKK21zZ3N0ciAiUG91xb5pdMOtOiAlcyBkaXNrXG4iCisKKyM6IGUyZnNjay9mbHVzaGIuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJCTEtGTFNCVUYgaW9jdGwgbm90IHN1cHBvcnRlZCEgIENhbid0IGZsdXNoIGJ1ZmZlcnMuXG4iCittc2dzdHIgIiIKKyJpb2N0bCBCTEtGTFNCVUYgbmVwb2Rwb3JvdsOhbm8hIE5lbW9odSBzeW5jaHJvbml6b3ZhdCB2eXJvdm7DoXZhY8OtIHBhbcSbdGkuXG4iCisiXG4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLUZdIFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBkZXZpY2VcbiIKK21zZ3N0ciAiUG91xb5pdMOtOiAlcyBbLUZdIFstSSBibG9reV9pbm9kZV9idWZmZXLFr10gemHFmcOtemVuw61cbiIKKworIzogZTJmc2NrL2lzY2FuLmM6ODEgZTJmc2NrL3VuaXguYzo5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZmx1c2hpbmciCittc2dzdHIgInDFmWkgb3RldsOtcsOhbsOtICVzIHBybyBzeW5jaHJvbml6YWNpIgorCisjOiBlMmZzY2svaXNjYW4uYzo4NiBlMmZzY2svdW5peC5jOjk3OCByZXNpemUvbWFpbi5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiCittc2dzdHIgInDFmWkgcG9rdXN1IHN5bmNocm9uaXpvdmF0ICVzIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAicMWZaSBwb2t1c3Ugb3RldsWZw610IOKAniVz4oCcIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTkgZTJmc2NrL3NjYW50ZXN0LmM6MTE0IG1pc2MvZTJpbWFnZS5jOjEyOTAKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgInDFmWkgemFow6FqZW7DrSBwcsWvY2hvZHUgaXV6bHkiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEyNyBtaXNjL2UyaW1hZ2UuYzoxMzA5Cittc2dpZCAid2hpbGUgZ2V0dGluZyBuZXh0IGlub2RlIgorbXNnc3RyICJwxZlpIHrDrXNrw6F2w6Fuw60gZGFsxaHDrWhvIGl1emx1IgorCisjOiBlMmZzY2svaXNjYW4uYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHNjYW5uZWQuXG4iCittc2dzdHIgInByb3prb3Vtw6FubyAldSBpdXpsxa8uXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTI0Cittc2dpZCAicmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAixI10ZW7DrSBzdXBlcmJsb2t1IMW+dXJuw6FsdVxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiVzOiBuZW5hbGV6ZW4gcGxhdG7DvSBzdXBlcmJsb2sgxb51cm7DoWx1XG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBqb3VybmFsIHRvbyBzaG9ydFxuIgorbXNnc3RyICIlczogxb51cm7DoWwgcMWZw61sacWhIGtyw6F0a8O9XG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiByZWNvdmVyaW5nIGpvdXJuYWxcbiIKK21zZ3N0ciAiJXM6IG9ibm92dWplIHNlIMW+dXJuw6FsXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3b24ndCBkbyBqb3VybmFsIHJlY292ZXJ5IHdoaWxlIHJlYWQtb25seVxuIgorbXNnc3RyICIlczogdiByZcW+aW11IGplbiBwcm8gxI10ZW7DrSBzZSDFvnVybsOhbCBvYm5vdm92YXQgbmVidWRlXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICJwxZlpIHBva3VzdSB6bm92dSBvdGV2xZnDrXQgJXMiCisKKyMgVGhlc2Ugc2hvcnRjdXRzIGFyZSBhIG5pZ2h0bWFyZS4KKyM6IGUyZnNjay9tZXNzYWdlLmM6MTEzCittc2dpZCAiYWV4dGVuZGVkIGF0dHJpYnV0ZSIKK21zZ3N0ciAiYXJvesWhw63FmWVuw70gYXRyaWJ1dCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTQKK21zZ2lkICJBZXJyb3IgYWxsb2NhdGluZyIKK21zZ3N0ciAiQWNoeWJhIHDFmWkgYWxva2FjaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTUKK21zZ2lkICJiYmxvY2siCittc2dzdHIgImJibG9rIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNgorbXNnaWQgIkJiaXRtYXAiCittc2dzdHIgIkJiaXRtYXAiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE3Cittc2dpZCAiY2NvbXByZXNzIgorbXNnc3RyICJja29tcHJpbW92YXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE4Cittc2dpZCAiQ2NvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgQGIiCittc2dzdHIgIkNrb2xpZHVqZSBzIGppbsO9bSBibG9rZW0gc3lzdMOpbXUgc291Ym9yxa8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE5Cittc2dpZCAiZGRpcmVjdG9yeSIKK21zZ3N0ciAiZGFkcmVzw6HFmSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjAKK21zZ2lkICJEZGVsZXRlZCIKK21zZ3N0ciAiRG9kc3RyYW7Em24iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIxCittc2dpZCAiZWVudHJ5IgorbXNnc3RyICJlcG9sb8W+a2EiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIyCittc2dpZCAiRUBlICclRG4nIGluICVwICglaSkiCittc2dzdHIgIkVwb2xvxb5rYSDigJ4lRG7igJwgdiAlcCAoJWkpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMworbXNnaWQgImZmaWxlc3lzdGVtIgorbXNnc3RyICJmc3lzdMOpbSBzb3Vib3LFryIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjQKK21zZ2lkICJGZm9yIEBpICVpICglUSkgaXMiCittc2dzdHIgIkZwcm8gaW5vZGUgJWkgKCVRKSBqZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjUKK21zZ2lkICJnZ3JvdXAiCittc2dzdHIgImdza3VwaW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI2Cittc2dpZCAiaEhUUkVFIEBkIEBpIgorbXNnc3RyICJoaXV6ZWwgSFRSRUUgYWRyZXPDocWZZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjcKK21zZ2lkICJpaW5vZGUiCittc2dzdHIgImlpbm9kZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjgKK21zZ2lkICJJaWxsZWdhbCIKK21zZ3N0ciAiSW5lcG92b2xlbiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjkKK21zZ2lkICJqam91cm5hbCIKK21zZ3N0ciAiasW+dXJuw6FsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMAorbXNnaWQgImxsb3N0K2ZvdW5kIgorbXNnc3RyICJsbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzEKK21zZ2lkICJMaXMgYSBsaW5rIgorbXNnc3RyICJMamUgb2RrYXoiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMyCittc2dpZCAibW11bHRpcGx5LWNsYWltZWQiCittc2dzdHIgIm12w61jZSBrcsOhdCBhbG9rb3bDoW5vIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMworbXNnaWQgIm5pbnZhbGlkIgorbXNnc3RyICJubmVwbGF0bsO9IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNAorbXNnaWQgIm9vcnBoYW5lZCIKK21zZ3N0ciAib29zacWZZWwiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM1Cittc2dpZCAicHByb2JsZW0gaW4iCittc2dzdHIgInBwcm9ibMOpbSB2IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNgorbXNnaWQgInFxdW90YSIKK21zZ3N0ciAicWt2w7N0YSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAicmtvxZllbm92w70gaXV6ZWwiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM4Cittc2dpZCAic3Nob3VsZCBiZSIKK21zZ3N0ciAic23Em2xvIGJ5IGLDvXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM5Cittc2dpZCAiU3N1cGVyQGIiCittc2dzdHIgIlNzdXBlcmJsb2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQwCittc2dpZCAidXVuYXR0YWNoZWQiCittc2dzdHIgInVuZXDFmWlwb2plbiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDEKK21zZ2lkICJ2ZGV2aWNlIgorbXNnc3RyICJ2emHFmcOtemVuw60iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQyCittc2dpZCAieGV4dGVudCIKK21zZ3N0ciAieHJvenNhaCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDMKK21zZ2lkICJ6emVyby1sZW5ndGgiCittc2dzdHIgInpudWxvdsOpIGTDqWxreSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTQKK21zZ2lkICI8VGhlIE5VTEwgaW5vZGU+IgorbXNnc3RyICI8SXV6ZWwgTlVMTD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU1Cittc2dpZCAiPFRoZSBiYWQgYmxvY2tzIGlub2RlPiIKK21zZ3N0ciAiPEl1emVsIMWhcGF0bsO9Y2ggYmxva8WvPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTcKK21zZ2lkICI8VGhlIHVzZXIgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8SXV6ZWwga3bDs3R5IHXFvml2YXRlbMWvPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTgKK21zZ2lkICI8VGhlIGdyb3VwIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPEl1emVsIGt2w7N0eSBza3VwaW4+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OQorbXNnaWQgIjxUaGUgYm9vdCBsb2FkZXIgaW5vZGU+IgorbXNnc3RyICI8SXV6ZWwgemF2YWTEm8SNZSBzeXN0w6ltdT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICI8SXV6ZWwgYWRyZXPDocWZZSB1bmRlbGV0ZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYxCittc2dpZCAiPFRoZSBncm91cCBkZXNjcmlwdG9yIGlub2RlPiIKK21zZ3N0ciAiPEl1emVsIGRlc2tyaXB0b3J1IHNrdXBpbnk+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MgorbXNnaWQgIjxUaGUgam91cm5hbCBpbm9kZT4iCittc2dzdHIgIjxJdXplbCDFvnVybsOhbHU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MworbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSA5PiIKK21zZ3N0ciAiPFJlemVydm92YW7DvSBpdXplbCA5PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjQKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgMTA+IgorbXNnc3RyICI8UmV6ZXJ2b3ZhbsO9IGl1emVsIDEwPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzQKK21zZ2lkICJyZWd1bGFyIGZpbGUiCittc2dzdHIgIm9iecSNZWpuw70gc291Ym9yIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNgorbXNnaWQgImRpcmVjdG9yeSIKK21zZ3N0ciAiYWRyZXPDocWZIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzOAorbXNnaWQgImNoYXJhY3RlciBkZXZpY2UiCittc2dzdHIgInpuYWtvdsOpIHphxZnDrXplbsOtIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MAorbXNnaWQgImJsb2NrIGRldmljZSIKK21zZ3N0ciAiYmxva292w6kgemHFmcOtemVuw60iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQyCittc2dpZCAibmFtZWQgcGlwZSIKK21zZ3N0ciAicG9qbWVub3ZhbsOhIHJvdXJhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NAorbXNnaWQgInN5bWJvbGljIGxpbmsiCittc2dzdHIgInN5bWJvbGlja8O9IG9ka2F6IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NiBtaXNjL3V1aWRkLmM6MTYyCittc2dpZCAic29ja2V0IgorbXNnc3RyICJzb2tldCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWxlIHR5cGUgd2l0aCBtb2RlIDAlbyIKK21zZ3N0ciAibmV6bsOhbcO9IGRydWggc291Ym9ydSBvwqBtw7NkdSAwJW8iCisKKyMgRXhwYW5zaW9uIG9mICVCIGluIHNpbmd1bGFyIG5vbWluYXRpdgorIzogZTJmc2NrL21lc3NhZ2UuYzo0MjMKK21zZ2lkICJpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAibmVwxZnDrW3DvSBibG9rIgorCisjIEV4cGFuc2lvbiBvZiAlQiBpbiBzaW5ndWxhciBub21pbmF0aXYKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI1Cittc2dpZCAiZG91YmxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJkdm9qbsOhc29ibsSbIG5lcMWZw61tw70gYmxvayIKKworIyBFeHBhbnNpb24gb2YgJUIgaW4gc2luZ3VsYXIgbm9taW5hdGl2CisjOiBlMmZzY2svbWVzc2FnZS5jOjQyNworbXNnaWQgInRyaXBsZSBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAidHJvam7DoXNvYm7EmyBuZXDFmcOtbcO9IGJsb2siCisKKyMgRXhwYW5zaW9uIG9mICVCIGluIHNpbmd1bGFyIG5vbWluYXRpdgorIzogZTJmc2NrL21lc3NhZ2UuYzo0MjkKK21zZ2lkICJ0cmFuc2xhdG9yIGJsb2NrIgorbXNnc3RyICJwxZlla2xhZG92w70gYmxvayIKKworIyBFeHBhbnNpb24gb2YgJUIgaW4gc2luZ3VsYXIgbm9taW5hdGl2CisjOiBlMmZzY2svbWVzc2FnZS5jOjQzMQorbXNnaWQgImJsb2NrICMiCittc2dzdHIgImJsb2sgxI0uIgorCisjOiBlMmZzY2svcGFzczFiLmM6MjIyCittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgbsSba29saWtyw6F0IGFsb2tvdmFuw71jaCBpdXpsxa8iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo2MjUgZTJmc2NrL3Bhc3MxYi5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBkdXBfYmxrIGZvciAlbGx1XG4iCittc2dzdHIgInZuaXTFmW7DrSBjaHliYTogbmVtb2h1IG5hasOtdCBkdXBfYmxrIHBybyAlbGx1XG4iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NTIKK21zZ2lkICJyZXR1cm5lZCBmcm9tIGNsb25lX2ZpbGVfYmxvY2siCittc2dzdHIgInZyw6FjZW7DvSB6IGNsb25lX2ZpbGVfYmxvY2siCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBibG9jayByZWNvcmQgZm9yICVsbHUiCittc2dzdHIgIlZuaXTFmW7DrSBjaHliYTogbmVtb2h1IG5hasOtdCB6w6F6bmFtIEVBIGJsb2t1IHBybyAlbGx1IgorCisjOiBlMmZzY2svcGFzczFiLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAiVm5pdMWZbsOtIGNoeWJhOiBuZW1vaHUgbmFqw610IHrDoXpuYW0gRUEgaXV6bHUgcHJvICV1IgorCisjOiBlMmZzY2svcGFzczEuYzo0NzUgZTJmc2NrL3Bhc3MyLmM6NzgyCittc2dpZCAicmVhZGluZyBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgIsSNdGVuw60gYWRyZXPDocWZb3bDqWhvIGJsb2t1IgorCisjOiBlMmZzY2svcGFzczEuYzo2MzQKK21zZ2lkICJpbi11c2UgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBhIHBvdcW+w612YW7DvWNoIGl1emzFryIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjQ1Cittc2dpZCAiZGlyZWN0b3J5IGlub2RlIG1hcCIKK21zZ3N0ciAibWFwYSBpdXpsxa8gYWRyZXPDocWZxa8iCisKKyM6IGUyZnNjay9wYXNzMS5jOjY1NQorbXNnaWQgInJlZ3VsYXIgZmlsZSBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgaXV6bMWvIG9iecSNZWpuw71jaCBzb3Vib3LFryIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjY0IG1pc2MvZTJpbWFnZS5jOjEyNjUKK21zZ2lkICJpbi11c2UgYmxvY2sgbWFwIgorbXNnc3RyICJtYXBhIHBvdcW+w612YW7DvWNoIGJsb2vFryIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzMwCittc2dpZCAib3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJvdGV2w61yw6Fuw60gcHLFr3prdW11IGl1emzFryIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzY0Cittc2dpZCAiZ2V0dGluZyBuZXh0IGlub2RlIGZyb20gc2NhbiIKK21zZ3N0ciAiesOtc2vDoXbDoW7DrSBkYWzFocOtaG8gaXV6bHUgesKgcHLFr3prdW11IgorCisjOiBlMmZzY2svcGFzczEuYzoxMjc5Cittc2dpZCAiUGFzcyAxIgorbXNnc3RyICJQcsWvY2hvZCAxIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzM2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgaW5kaXJlY3QgYmxvY2tzIG9mIGlub2RlICV1IgorbXNnc3RyICLEjXR1IG5lcMWZw61tw6kgYmxva3kgaXV6bHUgJXUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzODYKK21zZ2lkICJiYWQgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBhIMWhcGF0bsO9Y2ggaXV6bMWvIgorCisjOiBlMmZzY2svcGFzczEuYzoxNDA5Cittc2dpZCAiaW5vZGUgaW4gYmFkIGJsb2NrIG1hcCIKK21zZ3N0ciAiaXV6ZWwgdiBtYXDEmyDFoXBhdG7DvWNoIGJsb2vFryIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQyOQorbXNnaWQgImltYWdpYyBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgaW1hZ2ljIGl1emzFryIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQ1NgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgYmxvY2sgbWFwIgorbXNnc3RyICJtYXBhIG7Em2tvbGlrcsOhdCBhbG9rb3ZhbsO9Y2ggYmxva8WvIgorCisjOiBlMmZzY2svcGFzczEuYzoxNTY3Cittc2dpZCAiZXh0IGF0dHIgYmxvY2sgbWFwIgorbXNnc3RyICJtYXBhIGJsb2vFryByb3rFocOtxZllbsO9Y2ggYXRyaWJ1dMWvIgorCisjOiBlMmZzY2svcGFzczEuYzoyNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiU2bHUoJWMpOiBleHBlY3RpbmcgJTZsdSBnb3QgcGh5cyAlNmx1IChibGtjbnQgJWxsZClcbiIKK21zZ3N0ciAiJTZsdSglYyk6IG/EjWVrw6F2w6FubyAlNmx1LCBvYmRyxb5lbm8gZnl6LiAlNmx1IChibG9rxa8gJWxsZClcbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6Mjg5OAorbXNnaWQgImJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiYml0bWFwYSBibG9rxa8iCisKKyM6IGUyZnNjay9wYXNzMS5jOjI5MDQKK21zZ2lkICJpbm9kZSBiaXRtYXAiCittc2dzdHIgImJpdG1hcGEgaXV6bMWvIgorCisjOiBlMmZzY2svcGFzczEuYzoyOTEwCittc2dpZCAiaW5vZGUgdGFibGUiCittc2dzdHIgInRhYnVsa2EgaXV6bMWvIgorCisjOiBlMmZzY2svcGFzczIuYzoyODMKK21zZ2lkICJQYXNzIDIiCittc2dzdHIgIlByxa9jaG9kIDIiCisKKyM6IGUyZnNjay9wYXNzMi5jOjgwNgorbXNnaWQgIkNhbiBub3QgY29udGludWUuIgorbXNnc3RyICJOZW1vaHUgcG9rcmHEjW92YXQuIgorCisjOiBlMmZzY2svcGFzczMuYzo3NworbXNnaWQgImlub2RlIGRvbmUgYml0bWFwIgorbXNnc3RyICJiaXRtYXBhIGhvdG92w71jaCBpdXpsxa8iCisKKyM6IGUyZnNjay9wYXNzMy5jOjg2Cittc2dpZCAiUGVhayBtZW1vcnkiCittc2dzdHIgIk1heGltdW0gcGFtxJt0aSIKKworIzogZTJmc2NrL3Bhc3MzLmM6MTQ4Cittc2dpZCAiUGFzcyAzIgorbXNnc3RyICJQcsWvY2hvZCAzIgorCisjOiBlMmZzY2svcGFzczMuYzozNDAKK21zZ2lkICJpbm9kZSBsb29wIGRldGVjdGlvbiBiaXRtYXAiCittc2dzdHIgImJpdG1hcGEgZGV0ZWtjZSBjeWtsxa8gaXV6bMWvIgorCisjOiBlMmZzY2svcGFzczQuYzoxOTYKK21zZ2lkICJQYXNzIDQiCittc2dzdHIgIlByxa9jaG9kIDQiCisKKyM6IGUyZnNjay9wYXNzNS5jOjc0Cittc2dpZCAiUGFzcyA1IgorbXNnc3RyICJQcsWvY2hvZCA1IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxCittc2dpZCAiKG5vIHByb21wdCkiCittc2dzdHIgIijFvsOhZG7DoSB2w716dmEpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyCittc2dpZCAiRml4IgorbXNnc3RyICJPcHJhdml0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzCittc2dpZCAiQ2xlYXIiCittc2dzdHIgIlZ5bWF6YXQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQKK21zZ2lkICJSZWxvY2F0ZSIKK21zZ3N0ciAiUMWZZW3DrXN0aXQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUKK21zZ2lkICJBbGxvY2F0ZSIKK21zZ3N0ciAiQWxva292YXQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYKK21zZ2lkICJFeHBhbmQiCittc2dzdHIgIlp2xJt0xaFpdCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NworbXNnaWQgIkNvbm5lY3QgdG8gL2xvc3QrZm91bmQiCittc2dzdHIgIlDFmWlwb2ppdCBkbyAvbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OAorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAiVnl0dm/FmWl0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5Cittc2dpZCAiU2FsdmFnZSIKK21zZ3N0ciAiWmFjaHLDoW5pdCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MAorbXNnaWQgIlRydW5jYXRlIgorbXNnc3RyICJVc2Vrbm91dCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MQorbXNnaWQgIkNsZWFyIGlub2RlIgorbXNnc3RyICJWecSNaXN0aXQgaXV6ZWwiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIKK21zZ2lkICJBYm9ydCIKK21zZ3N0ciAiUMWZZXJ1xaFpdCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MworbXNnaWQgIlNwbGl0IgorbXNnc3RyICJSb3pkxJtsaXQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiUG9rcmHEjW92YXQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUKK21zZ2lkICJDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyIKK21zZ3N0ciAiS2xvbm92YXQgdsOtY2Uga3LDoXQgYWxva292YW7DqSBibG9reSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NgorbXNnaWQgIkRlbGV0ZSBmaWxlIgorbXNnc3RyICJPZHN0cmFuaXQgc291Ym9yIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3Cittc2dpZCAiU3VwcHJlc3MgbWVzc2FnZXMiCittc2dzdHIgIlBvdGxhxI1pdCB6cHLDoXZ5IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4Cittc2dpZCAiVW5saW5rIgorbXNnc3RyICJPZHN0cmFuaXQgb2RrYXoiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkKK21zZ2lkICJDbGVhciBIVHJlZSBpbmRleCIKK21zZ3N0ciAiVnltYXphdCBpbmRleCBIVHJlZSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MAorbXNnaWQgIlJlY3JlYXRlIgorbXNnc3RyICJabm92dSB2eXR2b8WZaXQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzkKK21zZ2lkICIoTk9ORSkiCittc2dzdHIgIijFvcOBRE7DnSkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAKK21zZ2lkICJGSVhFRCIKK21zZ3N0ciAiT1BSQVZFTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEKK21zZ2lkICJDTEVBUkVEIgorbXNnc3RyICJWWU1BWsOBTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIKK21zZ2lkICJSRUxPQ0FURUQiCittc2dzdHIgIlDFmEVNw41TVMSaTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMKK21zZ2lkICJBTExPQ0FURUQiCittc2dzdHIgIkFMT0tPVsOBTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQKK21zZ2lkICJFWFBBTkRFRCIKK21zZ3N0ciAiWlbEmlTFoEVOTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NQorbXNnaWQgIlJFQ09OTkVDVEVEIgorbXNnc3RyICJQxZhJUE9KRU5PIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2Cittc2dpZCAiQ1JFQVRFRCIKK21zZ3N0ciAiVllUVk/FmEVOTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NworbXNnaWQgIlNBTFZBR0VEIgorbXNnc3RyICJaQUNIUsOBTsSaTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgKK21zZ2lkICJUUlVOQ0FURUQiCittc2dzdHIgIlVTRUtOVVRPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5Cittc2dpZCAiSU5PREUgQ0xFQVJFRCIKK21zZ3N0ciAiSU5PREUgVllNQVrDgU5BIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwCittc2dpZCAiQUJPUlRFRCIKK21zZ3N0ciAiUMWYRVJVxaBFTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEKK21zZ2lkICJTUExJVCIKK21zZ3N0ciAiUk9aRMSaTEVOTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MgorbXNnaWQgIkNPTlRJTlVJTkciCittc2dzdHIgIlBPS1JBxIxVSkkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMKK21zZ2lkICJNVUxUSVBMWS1DTEFJTUVEIEJMT0NLUyBDTE9ORUQiCittc2dzdHIgIlbDjUNFIEtSw4FUIEFMT0tPVkFOw4kgQkxPS1UgTkFLTE9OT1bDgU5ZIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0Cittc2dpZCAiRklMRSBERUxFVEVEIgorbXNnc3RyICJTT1VCT1IgT0RTVFJBTsSaTiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NQorbXNnaWQgIlNVUFBSRVNTRUQiCittc2dzdHIgIlBPVExBxIxFTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTYKK21zZ2lkICJVTkxJTktFRCIKK21zZ3N0ciAiT0RLQVogT0RTVFJBTsSaTiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NworbXNnaWQgIkhUUkVFIElOREVYIENMRUFSRUQiCittc2dzdHIgIklOREVYIEhUUkVFIFZZTUFaw4FOIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4Cittc2dpZCAiV0lMTCBSRUNSRUFURSIKK21zZ3N0ciAiQlVERSBaTk9WVSBWWVRWT8WYRU5PIgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDcKK21zZ2lkICJAYiBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJCaXRtYXBhIGJsb2vFryBwcm8gc2t1cGludSAlZyBuZW7DrSB2ZSBza3VwaW7Emy4gKGJsb2sgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMQorbXNnaWQgIkBpIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgIkJpdG1hcGEgaXV6bMWvIHBybyBza3VwaW51ICVnIG5lbsOtIHZlIHNrdXBpbsSbLiAoYmxvayAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgdGFibGUgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIy4gQC1leHBhbmRlZDogV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYKK21zZ2lkICIiCisiQGkgdGFibGUgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKKyJXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuIgorbXNnc3RyICIiCisiVGFidWxrYSBpdXpsxa8gcHJvIHNrdXBpbnUgJWcgbmVuw60gdmUgc2t1cGluxJsuIChibG9rICViKVxuIgorIlZBUk9Ww4FOw406IE1Pxb1Ow4EgVsOBxb1Ow4EgWlRSw4FUQSBEQVQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgc3VwZXJibG9jayBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIHZhbGlkIGV4dDIvZXh0My9leHQ0XG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0uICBJZiB0aGUgZGV2aWNlIGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0Mi9leHQzL2V4dDRcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIHN1cGVyYmxvY2tcbgorIy4gQC1leHBhbmRlZDogaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgc3VwZXJibG9jazpcbgorIy4gQC1leHBhbmRlZDogICAgIGUyZnNjayAtYiA4MTkzIDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6ICBvclxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iIDMyNzY4IDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgQFMgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSB2YWxpZCBleHQyL2V4dDMvZXh0NFxuIgorIkBmLiAgSWYgdGhlIEB2IGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0Mi9leHQzL2V4dDRcbiIKKyJAZiAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIEBTXG4iCisiaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgQFM6XG4iCisiICAgIGUyZnNjayAtYiA4MTkzIDxAdj5cbiIKKyIgb3JcbiIKKyIgICAgZTJmc2NrIC1iIDMyNzY4IDxAdj5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlN1cGVyYmxvayBuZW1vaGwgYsO9dCBuYcSNdGVuIG5lYm8gbmVwb3Bpc3VqZSBzcHLDoXZuw70gc3lzdMOpbSBzb3Vib3LFr1xuIgorImV4dDIvZXh0My9leHQ0LiBQb2t1ZCBqZSB6YcWZw616ZW7DrSBwbGF0bsOpIGEgb3ByYXZkdSBvYnNhaHVqZSBzeXN0w6ltXG4iCisic291Ym9yxa8gZXh0Mi9leHQzL2V4dDQgKGEgbmUgc3dhcCBuZWJvIFVGUyBuZWJvIG7Em2NvIGppbsOpaG8pLCBwYWsgamVcbiIKKyJzdXBlcmJsb2sgcG/FoWtvemVuIGEgbcWvxb5ldGUgemt1c2l0IHNwdXN0aXQgZTJmc2NrIHMgamluw71tIHN1cGVyYmxva2VtOlxuIgorIiAgICBlMmZzY2sgLWIgJVMgPHphxZnDrXplbsOtPlxuIgorIm5lYm9cbiIKKyIgICAgZTJmc2NrIC1iIDMyNzY4IDx6YcWZw616ZW7DrT5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIGZpbGVzeXN0ZW0gc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBzdXBlcmJsb2NrKSBpcyAlYiBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGRldmljZSBpcyAlYyBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogRWl0aGVyIHRoZSBzdXBlcmJsb2NrIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiVmVsaWtvc3Qgc3lzdMOpbXUgc291Ym9yxa8gKHBvZGxlIHN1cGVyYmxva3UpIGplICViIGJsb2vFr1xuIgorIkZ5emlja8OhIHZlbGlrb3N0IHphxZnDrXplbsOtIGplICVjIGJsb2vFr1xuIgorIkJ1xI8gc3VwZXJibG9rIG5lYm8gdGFidWxrYSBvZGTDrWzFryBqZSBwcmF2ZMSbcG9kb2JuxJsgcG/FoWtvemVuYSFcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja19zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4KKyMuIEAtZXhwYW5kZWQ6IFRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbgorIy4gQC1leHBhbmRlZDogZnJvbSB0aGUgYmxvY2sgc2l6ZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDAKK21zZ2lkICIiCisiQFMgQGJfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuIgorIlRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbiIKKyJmcm9tIHRoZSBAYiBzaXplLlxuIgorbXNnc3RyICIiCisiViBzdXBlcmJsb2t1IGJsb2NrX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbiIKKyJUYXRvIHZlcnplIGUyZnNjayBuZXBvZHBvcnVqZSB2ZWxpa29zdGkgZnJhZ21lbnTFryByxa96bsOpXG4iCisib2QgdmVsaWtvc3RpIGJsb2t1LlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2Nrc19wZXJfZ3JvdXAgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NworbXNnaWQgIkBTIEBic19wZXJfZ3JvdXAgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICJWIHN1cGVyYmxva3UgYmxvY2tzX3Blcl9ncm91cCA9ICViLCBtxJtsbyBieSBiw710ICVjXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgZmlyc3RfZGF0YV9ibG9jayA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUyCittc2dpZCAiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIlYgc3VwZXJibG9rdSBmaXJzdF9kYXRhX2Jsb2NrID0gJWIsIG3Em2xvIGJ5IGLDvXQgJWNcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3Cittc2dpZCAiIgorIkBmIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuIgorIlxuIgorbXNnc3RyICIiCisiU3lzdMOpbSBzb3Vib3LFryBuZW3Em2wgVVVJRDsgZ2VuZXJ1amkgamUuXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydFxuIgorIm9mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnlcbiIKKyJydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgJVMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtXG4iCisibWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZFxuIgorInRoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLlxuIgorIlxuIgorbXNnc3RyICIiCisiUG96bsOhbWthOiBQb2t1ZCBleGlzdHVqZSB2w61jZSBibG9rxa8gYml0bWFwIGl1emzFryBuZWJvIGJsb2vFryxcbiIKKyJrdGVyw6kgdnnFvmFkdWrDrSBwxZllbcOtc3TEm27DrSwgbmVibyBqZWRuYSDEjcOhc3QgdGFidWxreSBpdXpsxa8sXG4iCisia3RlcsOhIG11c8OtIGLDvXQgcMWZZXN1bnV0YSwgbW/Fvm7DoSBidWRldGUgcmFkxJtqaSBjaHTDrXQgbmVqZMWZw612ZVxuIgorInNwdXN0aXQgZTJmc2NrIHPCoHDFmWVww61uYcSNZW0g4oCeLWIgJVPigJwuIFByb2Jsw6ltIGplIG1vxb5uw6EgamVuXG4iCisidsKgcHJpbcOhcm7DrW0gZGVza3JpcHRvcnUgc2t1cGlueSBibG9rxa8gYSB6w6Fsb8W+bsOtIGRlc2tyaXB0b3J5XG4iCisic2t1cGlueSBibG9rxa8gbW9ob3UgYsO9dCB2wqBwb8WZw6Fka3UuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvcnJ1cHRpb24gZm91bmQgaW4gc3VwZXJibG9jay4gICglcyA9ICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzEKK21zZ2lkICJDb3JydXB0aW9uIGZvdW5kIGluIEBTLiAgKCVzID0gJU4pLlxuIgorbXNnc3RyICJWIHN1cGVyYmxva3UgbmFsZXplbm8gcG/FoWtvemVuw60uICglcyA9ICVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBAdjogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSB6amnFocWlb3bDoW7DrSB2ZWxpa29zdGkgZnl6aWNrw6lobyB6YcWZw616ZW7DrTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgY291bnQgaW4gc3VwZXJibG9jayBpcyAlaSwgc2hvdWxkIGJlICVqLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MQorbXNnaWQgIkBpIGNvdW50IGluIEBTIGlzICVpLCBAcyAlai5cbiIKK21zZ3N0ciAiUG/EjWV0IGl1emzFryB2IHN1cGVyYmxva3UgamUgJWksIG3Em2wgYnkgYsO9dCAlai5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODUKK21zZ2lkICJUaGUgSHVyZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmaWxldHlwZSBmZWF0dXJlLlxuIgorbXNnc3RyICJIdXJkIG5lcG9kcG9ydWplIHZsYXN0bm9zdCBmaWxldHlwZS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgYW4gaW52YWxpZCBqb3VybmFsIChpbm9kZSAlaSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhhcyBhbiBAbiBAaiAoQGkgJWkpLlxuIgorbXNnc3RyICJTdXBlcmJsb2sgbcOhIG5lcGxhdG7DvSDFvnVybsOhbCAoaXV6ZWwgJWkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBtdWx0aXBsZSBmaWxlc3lzdGVtIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk1Cittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIG11bHRpcGxlIEBmIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4iCittc2dzdHIgIkV4dGVybsOtIMW+dXJuw6FsIHBvdcW+w612w6EgdsOtY2Ugc3lzdMOpbcWvIHNvdWJvcsWvIChuZXBvZHBvcm92w6FubykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbid0IGZpbmQgZXh0ZXJuYWwgam91cm5hbFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwMAorbXNnaWQgIkNhbid0IGZpbmQgZXh0ZXJuYWwgQGpcbiIKK21zZ3N0ciAiTmVtb2h1IG5hbMOpenQgZXh0ZXJuw60gxb51cm7DoWxcbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgYmFkIHN1cGVyYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDUKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgYmFkIEBTXG4iCittc2dzdHIgIkV4dGVybsOtIMW+dXJuw6FsIG3DoSDFoXBhdG7DvSBzdXBlcmJsb2tcbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmlsZXN5c3RlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxMAorbXNnaWQgIkV4dGVybmFsIEBqIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBAZlxuIgorbXNnc3RyICJFeHRlcm7DrSDFvnVybsOhbCBuZXBvZHBvcnVqZSB0ZW50byBzeXN0w6ltIHNvdWJvcsWvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gam91cm5hbCBzdXBlcmJsb2NrIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgam91cm5hbCAKKyMuIEAtZXhwYW5kZWQ6IGZvcm1hdC5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjE1Cittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiAiCisiZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKyJTdXBlcmJsb2sgxb51cm7DoWx1IHN5c3TDqW11IHNvdWJvcsWvIGplIG5lem7DoW3DqWhvIHR5cHUgJU4gKG5lcG9kcG9yb3bDoW5vKS5cbiIKKyJKZSBwcmF2ZMSbcG9kb2Juw6ksIMW+ZSB2YcWhZSBrb3BpZSBlMmZzY2sgamUgc3RhcsOhIGEvbmVibyBuZXBvZHBvcnVqZSB0ZW50byAiCisiZm9ybcOhdCDFvnVybsOhbHUuXG4iCisiSmUgdGFrw6kgbW/Fvm7DqSwgxb5lIHN1cGVyYmxvayDFvnVybsOhbHUgamUgcG/FoWtvemVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjMKK21zZ2lkICJAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICJTdXBlcmJsb2sgxb51cm7DoWx1IGplIHBvxaFrb3plbi5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXNfam91cm5hbCBmbGFnIGlzIGNsZWFyLCBidXQgYSBqb3VybmFsIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjI4Cittc2dpZCAiQFMgaGFzX0BqIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIEBqIGlzIHByZXNlbnQuXG4iCittc2dzdHIgIiIKKyJQxZnDrXpuYWsgc3VwZXJibG9rdSBoYXNfam91cm5hbCAobcOhX8W+dXJuw6FsKSBuZW7DrSBuYXN0YXZlbiwgYXbFoWFrIMW+dXJuw6FsIGplICIKKyJwxZnDrXRvbWVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzMworbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gQGogaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiIgorIlN1cGVyYmxvayBtw6EgbmFzdGF2ZW4gcMWZw616bmFrIG5lZWRzX3JlY292ZXJ5IChwb3TFmWVidWplX29ibm92aXQpLCBhdsWhYWsgIgorIsW+w6FkbsO9IMW+dXJuw6FsIG5lZXhpc3R1amUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IGpvdXJuYWwgaGFzIGRhdGEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjM4Cittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IEBqIGhhcyBkYXRhLlxuIgorbXNnc3RyICIiCisiUMWZw616bmFrIHN1cGVyYmxva3UgbmVlZHNfcmVjb3ZlcnkgKHBvdMWZZWJ1amVfb2Jub3ZpdCkgbmVuw60gbmFzdGF2ZW4sIGF2xaFhayAiCisixb51cm7DoWwgb2JzYWh1amUgZGF0YS5cbiIKKworIy4gQC1leHBhbmRlZDogQ2xlYXIgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDMKK21zZ2lkICJDbGVhciBAaiIKK21zZ3N0ciAiVnltYXphdCDFvnVybsOhbCIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBmaWxlc3lzdGVtLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0OCBlMmZzY2svcHJvYmxlbS5jOjcwNworbXNnaWQgIkBmIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIEBmLiAgIgorbXNnc3RyICIiCisiU3lzdMOpbSBzb3Vib3LFryBtw6EgcMWZw616bmFrKHkpIHZsYXN0bm9zdMOtIG5hc3RhdmVueSwgYcSNa29saXYgc2UgamVkbsOhIG8gcmV2aXppICIKKyIwLiAiCisKKyMuIEAtZXhwYW5kZWQ6ICVzIG9ycGhhbmVkIGlub2RlICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjUzCittc2dpZCAiJXMgQG8gQGkgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbiIKK21zZ3N0ciAiJXMgb3NpxZllbMO9IGl1emVsICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBwcsOhdmE9JUltLCB2ZWxpa29zdD0lSXMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTgKK21zZ2lkICJASSAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICJOZXBsYXRuw70gJUIgKCViKSBuYWxlemVuIHYgb3NpxZllbMOpbSBpdXpsdSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYzCittc2dpZCAiQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIkppxb4gdnltYXphbsO9ICVCICglYikgbmFsZXplbiB2IG9zacWZZWzDqW0gaXV6bHUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgb3JwaGFuZWQgaW5vZGUgJWkgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEkgQG8gQGkgJWkgaW4gQFMuXG4iCittc2dzdHIgIlbCoHN1cGVyYmxva3UgbmVwbGF0bsO9IG9zacWZZWzDvSBpdXplbCAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBpbm9kZSAlaSBpbiBvcnBoYW5lZCBpbm9kZSBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJASSBAaSAlaSBpbiBAbyBAaSBsaXN0LlxuIgorbXNnc3RyICJOZXBsYXRuw70gaXV6ZWwgJWkgdiBzZXpuYW11IG9zacWZZWzDvWNoIGl1emzFry5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3OAorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICIiCisiU3VwZXJibG9rIMW+dXJuw6FsdSBtw6EgbmFzdGF2ZW4gcMWZw616bmFrIG5lem7DoW3DqSB2bGFzdG5vc3RpIOKAnmplbiBwcm8gxI10ZW7DreKAnC5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4MworbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICIiCisiU3VwZXJibG9rIMW+dXJuw6FsdSBtw6EgbmFzdGF2ZW4gcMWZw616bmFrIG5lem7DoW3DqSB2bGFzdG5vc3RpIOKAnm5la29tcGF0aWJpbG7DreKAnC5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjg4Cittc2dpZCAiQGogdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuIgorbXNnc3RyICJWZXJ6ZSDFvnVybsOhbHUgbmVwb2Rwb3JvdsOhbmEgdMOtbXRvIGUyZnNjay5cbiIKKworIy4gQC1leHBhbmRlZDogTW92aW5nIGpvdXJuYWwgZnJvbSAvJXMgdG8gaGlkZGVuIGlub2RlLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1vdmluZyBAaiBmcm9tIC8lcyB0byBoaWRkZW4gQGkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJQxZllc291dsOhbSDFvnVybsOhbCB6IC8lcyBkbyBza3J5dMOpaG8gaXV6bHUuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIG1vdmluZyBqb3VybmFsOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIG1vdmluZyBAajogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkNoeWJhIHDFmWkgcMWZZXN1bnUgxb51cm7DoWx1OiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBGb3VuZCBpbnZhbGlkIFYyIGpvdXJuYWwgc3VwZXJibG9jayBmaWVsZHMgKGZyb20gVjEgam91cm5hbCkuXG4KKyMuIEAtZXhwYW5kZWQ6IENsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIGpvdXJuYWwgc3VwZXJibG9jay4uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMDMKK21zZ2lkICIiCisiRm91bmQgQG4gVjIgQGogQFMgZmllbGRzIChmcm9tIFYxIEBqKS5cbiIKKyJDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBAaiBAUy4uLlxuIgorIlxuIgorbXNnc3RyICIiCisiTmFsZXplbmEgbmVwbGF0bsOhIHBvbGUgc3VwZXJibG9rdSDFvnVybsOhbHUgVjIgKHrCoMW+dXJuw6FsdSBWMSkuXG4iCisiTWHFvnUgcG9sZSB6YSBzdXBlcmJsb2tlbSDFvnVybsOhbHUgVjHigKZcbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogUnVuIGpvdXJuYWwgYW55d2F5CisjOiBlMmZzY2svcHJvYmxlbS5jOjMwOQorbXNnaWQgIlJ1biBAaiBhbnl3YXkiCittc2dzdHIgIlDFmWVzdG8gc3B1c3RpdCDFvnVybsOhbCIKKworIy4gQC1leHBhbmRlZDogUmVjb3ZlcnkgZmxhZyBub3Qgc2V0IGluIGJhY2t1cCBzdXBlcmJsb2NrLCBzbyBydW5uaW5nIGpvdXJuYWwgYW55d2F5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMxNAorbXNnaWQgIlJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgQFMsIHNvIHJ1bm5pbmcgQGogYW55d2F5LlxuIgorbXNnc3RyICIiCisiUMWZw616bmFrIG9ibm92ZW7DrSBuZW7DrSBuYXN0YXZlbiB2IHrDoWxvxb5uw61tIHN1cGVyYmxva3UsIHRha8W+ZSBwxZllc3RvIHNwb3XFoXTDrW0gIgorIsW+dXJuw6FsLlxuIgorCisjLiBALWV4cGFuZGVkOiBCYWNraW5nIHVwIGpvdXJuYWwgaW5vZGUgYmxvY2sgaW5mb3JtYXRpb24uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMxOQorbXNnaWQgIiIKKyJCYWNraW5nIHVwIEBqIEBpIEBiIGluZm9ybWF0aW9uLlxuIgorIlxuIgorbXNnc3RyICIiCisiWsOhbG9odWppIGluZm9ybWFjZSBvwqBibG9rdSBpdXpsxa8gxb51cm7DoWx1LlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgcmVzaXplX2lub2RlIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9ibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaXMgJU47IHNob3VsZCBiZSB6ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyNAorbXNnaWQgIiIKKyJAZiBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9AaSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisiaXMgJU47IEBzIHplcm8uICAiCittc2dzdHIgIiIKKyJTb3Vib3JvdsO9IHN5c3TDqW0gbmVtw6EgemFwbnV0IHDFmWVww61uYcSNIHJlc2l6ZV9pbm9kZSxcbiIKKyJhbGUgc19yZXNlcnZlZF9nZHRfYmxvY2tzIGplICVOLCBhxI1rb2xpdiBieSBtxJtsbyBiw710IG51bGEuIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemVfaW5vZGUgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIGlub2RlIGlzIG5vbi16ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzMAorbXNnaWQgIlJlc2l6ZV9AaSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgQGkgaXMgbm9uLXplcm8uICAiCittc2dzdHIgIlJlc2l6ZV9pbm9kZSBuZW7DrSB6YXBudXRvLCBhdsWhYWsgaXV6ZWwgcHJvIG3Em27Em27DrSB2ZWxpa29zdGkgbmVuw60gbnVsYS4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSBub3QgdmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzM1Cittc2dpZCAiUmVzaXplIEBpIG5vdCB2YWxpZC4gICIKK21zZ3N0ciAiSXV6ZWwgbmEgbcSbbsSbbsOtIHZlbGlrb3N0aSBuZW7DrSBwbGF0bsO9LiAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNDAKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisixIxhcyBwb3NsZWRuw61obyBwxZlpcG9qZW7DrSBzdXBlcmJsb2t1ICgldCxcbiIKKyJcdG55bsOtID0gJVQpIGxlxb7DrSB2wqBidWRvdWNub3N0aS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0NQorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKyLEjGFzIHBvc2xlZG7DrWhvIHrDoXBpc3Ugc3VwZXJibG9rdSAoJXQsXG4iCisiXHRueW7DrSA9ICVUKSBsZcW+w60gdsKgYnVkb3Vjbm9zdGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBzaG91bGQgYmUgJVguICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgQHMgJVguICAiCittc2dzdHIgIk7DoXBvdsSbZGEgc3VwZXJibG9rdSBwcm8gZXh0ZXJuw60gc3VwZXJibG9rIGJ5IG3Em2xhIGLDvXQgJVguICIKKworIy4gQC1leHBhbmRlZDogQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNTQKK21zZ2lkICIiCisiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRvIHNvdWJvcm92w6lobyBzeXN0w6ltdSBwxZlpZMOhdsOhbSBuw6Fwb3bEm2R1IHBybyBkaXJoYXNoLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1OQorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAiCittc2dzdHIgIktvbnRyb2xuw60gc291xI1ldCBkZXNrcmlwdG9ydSBza3VwaW55ICVnIGplICUwNHgsIG3Em2wgYnkgYsO9dCAlMDR5LiAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuIgorbXNnc3RyICIiCisiRGVza3JpcHRvciBza3VwaW55ICVnIG96bmHEjWVuIGpha28gbmVpbmljaWFsaXpvdmFuw70gYmV6IHNhZHkgdmxhc3Rub3N0w60uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNjkKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAiCittc2dzdHIgIkRlc2tyaXB0b3Igc2t1cGlueSAlZyBtw6EgbmVwbGF0bsO9IHBvxI1ldCBuZXBvdcW+aXTDvWNoIGJsb2vFryAlYi4gIgorCisjLiBALWV4cGFuZGVkOiBMYXN0IGdyb3VwIGJsb2NrIGJpdG1hcCB1bmluaXRpYWxpemVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3NAorbXNnaWQgIkxhc3QgQGcgQGIgQEIgdW5pbml0aWFsaXplZC4gICIKK21zZ3N0ciAiUG9zbGVkbsOtIGJpdG1hcGEgYmxva8WvIHNrdXBpbnkgbmVuw60gaW5pY2lhbGl6b3bDoW5hLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHRyYW5zYWN0aW9uICVpIHdhcyBjb3JydXB0LCByZXBsYXkgd2FzIGFib3J0ZWQuXG4iCittc2dzdHIgIlRyYW5zYWtjZSDFvnVybsOhbHUgJWkgYnlsYSBwb8Wha296ZW5hLCBwxZllaHLDoW7DrSBieWxvIHpydcWhZW5vLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4MworbXNnaWQgIlRoZSB0ZXN0X2ZzIGZsYWcgaXMgc2V0IChhbmQgZXh0NCBpcyBhdmFpbGFibGUpLiAgIgorbXNnc3RyICJQxZnDrXpuYWsgdGVzdF9mcyBqZSBuYXN0YXZlbiAoYSBleHQ0IGplIGRvc3R1cG7DvSkuICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4OAorIywgZnV6enkKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5ICIKKyJzZXQpXG4iCittc2dzdHIgIiIKKyLEjGFzIHBvc2xlZG7DrWhvIHDFmWlwb2plbsOtIHN1cGVyYmxva3UgbGXFvsOtIHbCoGJ1ZG91Y25vc3RpLlxuIgorIlx0KHJvemTDrWwgbWVuxaHDrSBuZcW+IGRlbiwgcHJhdmTEm3BvZG9ibsSbIGpzb3UgY2h5Ym7EmyBuYXN0YXZlbnkgaGFyZHdhcm92w6kgIgorImhvZGlueSAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzk0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldClcbiIKK21zZ3N0ciAiIgorIsSMYXMgcG9zbGVkbsOtaG8gesOhcGlzdSBzdXBlcmJsb2t1IGxlxb7DrSB2wqBidWRvdWNub3N0aS5cbiIKKyJcdChyb3pkw61sIG1lbsWhw60gbmXFviBkZW4sIHByYXZkxJtwb2RvYm7EmyBqc291IGNoeWJuxJsgbmFzdGF2ZW55IGhhcmR3YXJvdsOpICIKKyJob2RpbnkuICIKKworIy4gQC1leHBhbmRlZDogT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDAwCittc2dpZCAiT25lIG9yIG1vcmUgQGIgQGcgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAiCittc2dzdHIgIiIKKyJKZWRlbiBuZWJvIHbDrWNlIGtvbnRyb2xuw61jaCBzb3XEjXTFryBkZXNrcmlwdG9ydSBza3VwaW55IGJsb2vFryBqZSBjaHlibsO9Y2guICIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwNQorbXNnaWQgIlNldHRpbmcgZnJlZSBAaXMgY291bnQgdG8gJWogKHdhcyAlaSlcbiIKK21zZ3N0ciAiTmFzdGF2dWplIHNlIHBvxI1ldCB2b2xuw71jaCBpdXpsxa8gbmEgJWogKGJ5bCAlaSlcbiIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGJsb2NrcyBjb3VudCB0byAlYyAod2FzICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxMAorbXNnaWQgIlNldHRpbmcgZnJlZSBAYnMgY291bnQgdG8gJWMgKHdhcyAlYilcbiIKK21zZ3N0ciAiTmFzdGF2dWplIHNlIHBvxI1ldCB2b2xuw71jaCBibG9rxa8gbmEgJWMgKGJ5bCAlYilcbiIKKworIy4gQC1leHBhbmRlZDogTWFraW5nIHF1b3RhIGlub2RlICVpICglUSkgaGlkZGVuLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxNQorbXNnaWQgIk1ha2luZyBAcSBAaSAlaSAoJVEpIGhpZGRlbi5cbiIKK21zZ3N0ciAiSXV6ZWwga3bDs3R5ICVpICglUSkgc2Ugb3puYcSNdWplIGpha28gc2tyeXTDvS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDIwCittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgIgorbXNnc3RyICJTdXBlcmJsb2sgbcOhIMWhcGF0bsO9IGJsb2vCoE1NUC4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDI1Cittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgIgorbXNnc3RyICJTdXBlcmJsb2sgbcOhIG5lcGxhdG7DoSDEjcOtc2xhIE1NUC4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX29wZW4yOiAlbVxuIgorbXNnc3RyICJleHQyZnNfb3BlbjI6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDM1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19jaGVja19kZXNjOiAlbVxuIgorbXNnc3RyICJleHQyZnNfY2hlY2tfZGVzYzogJW1cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayA2NGJpdCBmaWxlc3lzdGVtcyBuZWVkcyBleHRlbnRzIHRvIGFjY2VzcyB0aGUgd2hvbGUgZGlzay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDAKK21zZ2lkICJAUyA2NGJpdCBmaWxlc3lzdGVtcyBuZWVkcyBleHRlbnRzIHRvIGFjY2VzcyB0aGUgd2hvbGUgZGlzay4gICIKK21zZ3N0ciAiIgorIlN1cGVyYmxvayA2NGJpdG92w71jaCBzb3Vib3JvdsO9Y2ggc3lzdMOpbcWvIHBvdMWZZWJ1amUgcm96c2FoeSwgYWJ5IGJ5bG8gbW/Fvm7DqSAiCisicMWZaXN0b3VwaXQgbmEgY2Vsw70gZGlzay4gIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NQorbXNnaWQgIkZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZy4gICglTiwgbWF4IHZhbHVlICVnKS4gICIKK21zZ3N0ciAiRmlyc3RfbWV0YV9iZyBqZSBwxZnDrWxpxaEgdmVsa8O9LiAoJU4sIG1heGltw6FsbsOtIGhvZG5vdGEgJWcpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1MgorbXNnaWQgIlBhc3MgMTogQ2hlY2tpbmcgQGlzLCBAYnMsIGFuZCBzaXplc1xuIgorbXNnc3RyICJQcsWvY2hvZCAxOiBLb250cm9sdWrDrSBzZSBpdXpseSwgYmxva3kgYSB2ZWxpa29zdGlcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDU2Cittc2dpZCAiQHIgaXMgbm90IGEgQGQuICAiCittc2dzdHIgIktvxZllbm92w70gaXV6ZWwgbmVuw60gYWRyZXPDocWZLiAiCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2MQorbXNnaWQgIkByIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gICIKK21zZ3N0ciAiS2/FmWVub3bDvSBpdXplbCBtw6EgbmFzdGF2ZW4gZHRpbWUgKG1vxb5uw6Ega3bFr2xpIHN0YXLDqW0gbWtlMmZzKS4gIgorCisjLiBALWV4cGFuZGVkOiBSZXNlcnZlZCBpbm9kZSAlaSAoJVEpIGhhcyBpbnZhbGlkIG1vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDY2Cittc2dpZCAiUmVzZXJ2ZWQgQGkgJWkgKCVRKSBoYXMgQG4gbW9kZS4gICIKK21zZ3N0ciAiUmV6ZXJ2b3ZhbsO9IGl1emVsICVpICglUSkgbcOhIMWhcGF0bsO9IG3Ds2QuICIKKworIy4gQC1leHBhbmRlZDogZGVsZXRlZCBpbm9kZSAlaSBoYXMgemVybyBkdGltZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEQgQGkgJWkgaGFzIHplcm8gZHRpbWUuICAiCittc2dzdHIgIk9kc3RyYW7Em27DvSBpdXplbCAlaSBtw6EgbnVsb3bDvSBkdGltZS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgIgorbXNnc3RyICJJdXplbCAlaSBzZSBwb3XFvsOtdsOhLCBhbGUgbcOhIG5hc3RhdmVuIGR0aW1lLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICJJdXplbCAlaSBqZSBhZHJlc8OhxZkgbnVsb3bDqSBkw6lsa3kuICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODYKK21zZ2lkICJAZyAlZydzIEBiIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICIiCisiQml0bWFwYSBibG9rxa8gc2t1cGlueSAlZyB2ICViIGtvbGlkdWplIHMgamluw71tIGJsb2tlbSBzeXN0w6ltdSBzb3Vib3LFry5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTEKK21zZ2lkICJAZyAlZydzIEBpIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICIiCisiQml0bWFwYSBpdXpsxa8gc2t1cGlueSAlZyB2ICViIGtvbGlkdWplIHMgamluw71tIGJsb2tlbSBzeXN0w6ltdSBzb3Vib3LFry5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSB0YWJsZSBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5NgorbXNnaWQgIkBnICVnJ3MgQGkgdGFibGUgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKyJUYWJ1bGthIGl1emzFryBza3VwaW55ICVnIHYgJWIga29saWR1amUgcyBqaW7DvW0gYmxva2VtIHN5c3TDqW11IHNvdWJvcsWvLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDEKK21zZ2lkICJAZyAlZydzIEBiIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJCaXRtYXBhIGJsb2vFryBza3VwaW55ICVnICglYikgamUgxaFwYXRuw6EuICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgKCViKSBpcyBiYWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA2Cittc2dpZCAiQGcgJWcncyBAaSBAQiAoJWIpIGlzIGJhZC4gICIKK21zZ3N0ciAiQml0bWFwYSBpdXpsxa8gc2t1cGlueSAlZyAoJWIpIGplIMWhcGF0bsOhLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX3NpemUgaXMgJUlzLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTExCittc2dpZCAiQGkgJWksIGlfc2l6ZSBpcyAlSXMsIEBzICVOLiAgIgorbXNnc3RyICJWwqBpdXpsdSAlaSBqZSBpX3NpemUgJUlzLCBtxJtsYSBieSBiw710ICVOLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX2Jsb2NrcyBpcyAlSWIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTYKK21zZ2lkICJAaSAlaSwgaV9AYnMgaXMgJUliLCBAcyAlTi4gICIKK21zZ3N0ciAiVsKgaXV6bHUgJWkgamUgaV9ibG9ja3MgJUliLCBtxJtsbyBieSBiw710ICVOLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBpbiBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MjEKK21zZ2lkICJASSAlQiAoJWIpIGluIEBpICVpLiAgIgorbXNnc3RyICJOZXBsYXRuw70gJUIgKCViKSB2wqBpdXpsdSAlaS4gIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIG92ZXJsYXBzIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI2Cittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiJUIgKCViKSBzZSBwxZlla3LDvXbDoSBzIG1ldGFkYXR5IHN5c3TDqW11IHNvdWJvcsWvIHbCoGl1emx1ICVpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiSXV6ZWwgJWkgbcOhIG5lcGxhdG7DvSBibG9rKHkpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFRvbyBtYW55IGlsbGVnYWwgYmxvY2tzIGluIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzNgorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBpbGxlZ2FsIEBicyBpbiBAaSAlaS5cbiIKK21zZ3N0ciAiUMWZw61sacWhIG1ub2hvIG5lcGxhdG7DvWNoIGJsb2vFryB2wqBpdXpsdSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGJhZCBibG9jayBpbm9kZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDEKK21zZ2lkICJASSAlQiAoJWIpIGluIGJhZCBAYiBAaS4gICIKK21zZ3N0ciAiTmVwbGF0bsO9ICVCICglYikgdsKgaXV6bHUgxaFwYXRuw71jaCBibG9rxa8uICIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0NgorbXNnaWQgIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiSXV6ZWwgxaFwYXRuw71jaCBibG9rxa8gbcOhIG5lcGxhdG7DvSBibG9rKHkpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBvciBiYWQgYmxvY2sgaW4gdXNlIVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1MQorbXNnaWQgIkR1cGxpY2F0ZSBvciBiYWQgQGIgaW4gdXNlIVxuIgorbXNnc3RyICJQb3XFvsOtdsOhIHNlIGR1cGxpa8OhdG7DrSBuZWJvIMWhcGF0bsO9IGJsb2shXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayAlYiB1c2VkIGFzIGJhZCBibG9jayBpbm9kZSBpbmRpcmVjdCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTYKK21zZ2lkICJCYWQgQGIgJWIgdXNlZCBhcyBiYWQgQGIgQGkgaW5kaXJlY3QgQGIuICAiCittc2dzdHIgIsWgcGF0bsO9IGJsb2sgJWIgcG91xb7DrXbDoW4gamFrbyBuZXDFmcOtbcO9IGJsb2sgxaFwYXRuw71jaCBibG9rxa8uICIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4KKyMuIEAtZXhwYW5kZWQ6IHNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGluIHRoZSBmaWxlc3lzdGVtLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2MQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgYmFkIEBiIEBpIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuIgorInNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4iCisiaW4gdGhlIEBmLlxuIgorbXNnc3RyICIiCisiXG4iCisiSXV6ZWwgxaFwYXRuw71jaCBibG9rxa8gc2UgcHJhdmTEm3BvZG9ibsSbIHBvxaFrb2RpbC4gWsWZZWptxJsgYnlzdGUgbcSbbGkgbnluw61cbiIKKyJ6YXN0YXZpdCBhIHZ5xaFldMWZaXQgc291Ym9yb3bDvSBzeXN0w6ltIG5hIMWhcGF0bsOpIGJsb2t5IHDFmcOta2F6ZW0g4oCeZTJmc2NrIC1j4oCcXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBJZiB0aGUgYmxvY2sgaXMgcmVhbGx5IGJhZCwgdGhlIGZpbGVzeXN0ZW0gY2FuIG5vdCBiZSBmaXhlZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjgKK21zZ2lkICIiCisiXG4iCisiSWYgdGhlIEBiIGlzIHJlYWxseSBiYWQsIHRoZSBAZiBjYW4gbm90IGJlIGZpeGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiSmUtbGkgYmxvayBvcHJhdmR1IMWhcGF0bsO9LCBuZW3Fr8W+ZSBiw710IHN5c3TDqW0gc291Ym9yxa8gb3ByYXZlbi5cbiIKKworIy4gQC1leHBhbmRlZDogWW91IGNhbiByZW1vdmUgdGhpcyBibG9jayBmcm9tIHRoZSBiYWQgYmxvY2sgbGlzdCBhbmQgaG9wZVxuCisjLiBALWV4cGFuZGVkOiB0aGF0IHRoZSBibG9jayBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3MworbXNnaWQgIiIKKyJZb3UgY2FuIHJlbW92ZSB0aGlzIEBiIGZyb20gdGhlIGJhZCBAYiBsaXN0IGFuZCBob3BlXG4iCisidGhhdCB0aGUgQGIgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLlxuIgorIlxuIgorbXNnc3RyICIiCisiTcWvxb5ldGUgdGVudG8gYmxvayB2eW1hemF0IHplIHNlem5hbXUgxaFwYXRuw71jaCBibG9rxa8gYSBkb3VmYXQsIMW+ZVxuIgorInRlbnRvIGJsb2sgamUgdmUgc2t1dGXEjW5vc3RpIHYgcG/FmcOhZGt1LiBBbGUgemEgbmljIG5lcnXEjcOtbWUuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgKCViKSBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTc5Cittc2dpZCAiVGhlIHByaW1hcnkgQFMgKCViKSBpcyBvbiB0aGUgYmFkIEBiIGxpc3QuXG4iCittc2dzdHIgIlByaW3DoXJuw60gc3VwZXJibG9rICglYikgamUgbmEgc2V6bmFtdSDFoXBhdG7DvWNoIGJsb2vFry5cbiIKKworIy4gQC1leHBhbmRlZDogQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgZ3JvdXAgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTg0Cittc2dpZCAiQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgQGcgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBAYiBsaXN0XG4iCittc2dzdHIgIiIKKyJCbG9rICViIHYgcHJpbcOhcm7DrWNoIGRlc2tyaXB0b3JlY2ggc2t1cGluIGplIG5hIHNlem5hbXUgxaFwYXRuw71jaCBibG9rxa9cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBzdXBlcmJsb2NrICglYikgaXMgYmFkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5MAorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgQFMgKCViKSBpcyBiYWQuXG4iCittc2dzdHIgIlZhcm92w6Fuw606IHN1cGVyYmxvayBza3VwaW55ICVnICglYikgamUgxaFwYXRuw70uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIGJsb2NrICglYikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTk1Cittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBAZyBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgQGIgKCViKS5cbiIKK21zZ3N0ciAiIgorIlZhcm92w6Fuw606IEtvcGllIGRlc2tyaXB0b3LFryBza3VwaW4gdmUgc2t1cGluxJsgJWcgbcOhIMWhcGF0bsO9IGJsb2sgKCViKS5cbiIKKworIy4gQC1leHBhbmRlZDogUHJvZ3JhbW1pbmcgZXJyb3I/ICBibG9jayAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX2Jsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwMQorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yPyAgQGIgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9AYi5cbiIKK21zZ3N0ciAiIgorIkNoeWJhIHDFmWkgcHJvZ3JhbW92w6Fuw60/IEJsb2sgIyViIGJlemTFr3ZvZG7EmyBwb3XFvml0IHYgcHJvY2Vzc19iYWRfYmxvY2tzLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nICVOIGNvbnRpZ3VvdXMgYmxvY2socykgaW4gYmxvY2sgZ3JvdXAgJWcgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNworbXNnaWQgIkBBICVOIGNvbnRpZ3VvdXMgQGIocykgaW4gQGIgQGcgJWcgZm9yICVzOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIGFsb2thY2kgJU4gc291dmlzbMO9Y2ggYmxva8WvIHZlIHNrdXBpbsSbIGJsb2vFryAlZyBwcm8gJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBiIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuIgorbXNnc3RyICJDaHliYSBwxZlpIGFsb2thY2kgdnlyb3Zuw6F2YWPDrSBwYW3Em3RpIGJsb2vFryBwcm8gcMWZZW3DrXN0xJtuw60gJXNcbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTcKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuIgorbXNnc3RyICJQxZllbcOtc8WldWppICVzIHNrdXBpbnkgJWcgeiAlYiBkbyAlY+KAplxuIgorCisjIEZJWE1FOiBuby1jLWZvcm1hdCBzbyB0aGF0IEkgY2FuIHJlb3JkZXIgaXQgcHJvcGVybHkKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgdG8gJWMuLi5cbiIKK21zZ3N0ciAiUMWZZW3DrXPFpXVqaSBza3VwaW55ICVnICVzIGRvICVj4oCmXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrICViIG9mICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyNworbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIEBiICViIG9mICVzOiAlbVxuIgorbXNnc3RyICJWYXJvdsOhbsOtOiBuZW1vaHUgbmHEjcOtc3QgYmxvayAlcyAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHdyaXRlIGJsb2NrICViIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzIKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICJWYXJvdsOhbsOtOiBuZW1vaHUgemFwc2F0IGJsb2sgJWIgcHJvICVzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzNyBlMmZzY2svcHJvYmxlbS5jOjE1MDEKK21zZ2lkICJAQSBAaSBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIGFsb2thY2kgYml0bWFweSBpdXpsxa8gKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDIKK21zZ2lkICJAQSBAYiBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIGFsb2thY2kgYml0bWFweSBibG9rxa8gKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgYWxva2FjaSBpbmZvcm1hY8OtIG9ka2F6xa8gaWNvdW50OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGRpcmVjdG9yeSBibG9jayBhcnJheTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGQgQGIgYXJyYXk6ICVtXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgYWxva2FjaSBwb2xlIGJsb2vFryBhZHJlc8OhxZllOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgemtvdW3DoW7DrSBpdXpsxa8gKCVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWk6ICVtXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgaXRlcmFjaSBwxZllcyBibG9reSB2wqBpdXpsdSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBpbm9kZSBjb3VudCBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGNvdW50PSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjcKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBpIGNvdW50IGluZm9ybWF0aW9uIChAaT0laSwgY291bnQ9JU4pOiAlbVxuIgorbXNnc3RyICIiCisiQ2h5YmEgcMWZaSB1a2zDoWTDoW7DrSBpbmZvcm1hY2UgbyDEjWV0bm9zdGkgaXV6bHUgKGl1emVsPSVpLCBwb8SNZXQ9JU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGJsb2NrPSViLCBudW09JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3MgorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKK21zZ3N0ciAiIgorIkNoeWJhIHDFmWkgdWtsw6Fkw6Fuw60gaW5mb3JtYWNlIG8gYmxva3UgYWRyZXPDocWZZSAoaXV6ZWw9JWksIGJsb2s9JWIsIMSNw61zPSVOKTogIgorIiVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgxI10ZW7DrSBpdXpsdSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gICIKK21zZ3N0ciAiSXV6ZWwgJWkgbcOhIG5hc3RhdmVuIHDFmcOtem5hayBpbWFnaWMuICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlICVpKSBoYXMgaW1tdXRhYmxlXG4KKyMuIEAtZXhwYW5kZWQ6IG9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoQGkgJWkpIGhhcyBpbW11dGFibGVcbiIKKyJvciBhcHBlbmQtb25seSBmbGFnIHNldC4gICIKK21zZ3N0ciAiIgorIlNwZWNpw6FsbsOtIHNvdWJvciAoemHFmcOtemVuw60vc29ja2V0L2ZpZm8vc3ltYm9saWNrw70gb2RrYXosIGl1emVsICVpKVxuIgorIm3DoSBuYXN0YXZlbiBwxZnDrXpuYWsgaW1tdXRhYmxlIG5lYm8gYXBwZW5kLW9ubHkuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGNvbXByZXNzaW9uIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBjb21wcmVzc2lvbiBzdXBwb3J0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgQGNpb24gZmxhZyBzZXQgb24gQGYgd2l0aG91dCBAY2lvbiBzdXBwb3J0LiAgIgorbXNnc3RyICIiCisiSXV6ZWwgJWkgbcOhIG5hc3RhdmVuIHDFmcOtem5hayBrb21wcmltYWNlIG5hIHN5c3TDqW11IHNvdWJvcsWvIGJleiBwb2Rwb3J5ICIKKyJrb21wcmltYWNlLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmbykgaW5vZGUgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvKSBAaSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gICIKK21zZ3N0ciAiU3BlY2nDoWxuw60gKHphxZnDrXplbsOtL3NvY2tldC9maWZvKSBpdXplbCAlaSBtw6EgbmVudWxvdm91IGTDqWxrdS4gIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxMgorbXNnaWQgIkBqIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJJdXplbCDFvnVybsOhbHUgc2UgbmVwb3XFvsOtdsOhLCBhbGUgb2JzYWh1amUgZGF0YS4gIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzE3Cittc2dpZCAiQGogaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAixb11cm7DoWwgbmVuw60gb2J5xI1lam7DvSBzb3Vib3IuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIHdhcyBwYXJ0IG9mIHRoZSBAbyBAaSBsaXN0LiAgIgorbXNnc3RyICJJdXplbCAlaSBieWwgc291xI3DoXN0w60gc2V6bmFtdSBvc2nFmWVsw71jaCBpdXpsxa8uICIKKworIy4gQC1leHBhbmRlZDogaW5vZGVzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjgKK21zZ2lkICJAaXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgIgorbXNnc3RyICIiCisiTmFsZXplbnkgaXV6bHksIGt0ZXLDqSBieWx5IHNvdcSNw6FzdMOtIHBvxaFrb3plbsOpaG8gc3Bvam92w6lobyBzZXpuYW11IG9zacWZZWzDvWNoLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMzCittc2dpZCAiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgYWxva2FjaSBzdHJ1a3R1cnkgcmVmY291bnQgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgZm9yIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjczOAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgZm9yIEBpICVpLiAgIgorbXNnc3RyICJDaHliYSBwxZlpIMSNdGVuw60gYmxva3Ugcm96xaHDrcWZZW7DvWNoIGF0cmlidXTFryAlYiBwcm8gaXV6ZWwgJWkuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgYmFkIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDMKK21zZ2lkICJAaSAlaSBoYXMgYSBiYWQgQGEgQGIgJWIuICAiCittc2dzdHIgIkl1emVsICVpIG3DoSDFoXBhdG7DvSBibG9rIHJvesWhw63FmWVuw71jaCBhdHJpYnV0xa8gJWIuICIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDgKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkNoeWJhIHDFmWkgxI10ZW7DrSBibG9rdSByb3rFocOtxZllbsO9Y2ggYXRyaWJ1dMWvICViICglbSkuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTMKK21zZ2lkICJAYSBAYiAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBAcyAlTi4gICIKK21zZ3N0ciAiQmxvayByb3rFocOtxZllbsO9Y2ggYXRyaWJ1dMWvICViIG3DoSBwb8SNZXQgb2RrYXrFryAlciwgbcSbbCBieSBiw710ICVOLiAgIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc1OAorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiQ2h5YmEgcMWZaSB6w6FwaXN1IGJsb2t1IHJvesWhw63FmWVuw71jaCBhdHJpYnV0xa8gJWIgKCVtKS4gIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIGhfYmxvY2tzID4gMS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjMKK21zZ2lkICJAYSBAYiAlYiBoYXMgaF9AYnMgPiAxLiAgIgorbXNnc3RyICJCbG9rIHJvesWhw63FmWVuw71jaCBhdHJpYnV0xa8gJWIgbcOhIGhfYmxvY2tzID4gMS4gIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjgKK21zZ2lkICJAQSBAYSBAYiAlYi4gICIKK21zZ3N0ciAiQ2h5YmEgcMWZaSBhbG9rYWNpIGJsb2t1IHJvesWhw63FmWVuw71jaCBhdHJpYnV0xa8gJWIuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzMKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAiCittc2dzdHIgIkJsb2sgcm96xaHDrcWZZW7DvWNoIGF0cmlidXTFryAlYiBqZSBwb8Wha296ZW4gKGtvbGl6ZSBhbG9rYWNlKS4gIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCBuYW1lKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzgKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiBuYW1lKS4gICIKK21zZ3N0ciAiQmxvayByb3rFocOtxZllbsO9Y2ggYXRyaWJ1dMWvICViIGplIHBvxaFrb3plbiAobmVwbGF0bsO9IG7DoXpldikuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgdmFsdWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4MworbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIHZhbHVlKS4gICIKK21zZ3N0ciAiQmxvayByb3rFocOtxZllbsO9Y2ggYXRyaWJ1dMWvICViIGplIHBvxaFrb3plbiAobmVwbGF0bsOhIGhvZG5vdGEpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIHRvbyBiaWcuICAiCittc2dzdHIgIkl1emVsICVpIGplIHDFmcOtbGnFoSB2ZWxrw6EuICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBjYXVzZXMgZGlyZWN0b3J5IHRvIGJlIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzkyCittc2dpZCAiJUIgKCViKSBjYXVzZXMgQGQgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiJUIgKCViKSB6cMWvc29idWplLCDFvmUgYWRyZXPDocWZIGplIHDFmcOtbGnFoSB2ZWxrw70uICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OTcKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBmaWxlIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikgenDFr3NvYnVqZSwgxb5lIHNvdWJvciBqZSBwxZnDrWxpxaEgdmVsa8O9LiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAyCittc2dpZCAiJUIgKCViKSBjYXVzZXMgc3ltbGluayB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIHpwxa9zb2J1amUsIMW+ZSBzeW1ib2xpY2vDvSBvZGtheiBqZSBwxZnDrWxpxaEgdmVsa8O9LiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbiIKK21zZ3N0ciAiIgorIkl1emVsICVpIG3DoSBuYXN0YXZlbiBwxZnDrXpuYWsgSU5ERVhfRkwgbmEgc3lzdMOpbXUgc291Ym9yxa8gYmV6IHBvZHBvcnkgaHRyZWUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIgorbXNnc3RyICJJdXplbCAlaSBtw6EgbmFzdGF2ZW4gcMWZw616bmFrIElOREVYX0ZMLCBhbGUgbmVuw60gYWRyZXPDocWZLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgcm9vdCBub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxNworIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSBoYXMgYW4gQG4gcm9vdCBub2RlLlxuIgorbXNnc3RyICJJdXplbCBIVFJFRSBhZHJlc8OhxZllICVpIG3DoSBuZXBsYXRuw70ga2/FmWVub3bDvSB1emVsLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIyCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIkl1emVsIEhUUkVFIGFkcmVzw6HFmWUgJWkgbcOhIG5lcG9kcG9yb3Zhbm91IHZlcnppIGhhc2hlICglTilcbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAiIgorIkl1emVsIEhUUkVFIGFkcmVzw6HFmWUgJWkgcG91xb7DrXbDoSBuZWtvbXBhdGliaWxuw60gcMWZw616bmFrIGtvxZllbm92w6lobyB1emx1ICIKKyJodHJlZS5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMyCittc2dpZCAiQGggJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbiIKK21zZ3N0ciAiIgorIkl1emVsIEhUUkVFIGFkcmVzw6HFmWUgJWkgbcOhIGhsb3Via3Ugc3Ryb211ICglTiksIGt0ZXLDoSBqZSBwxZnDrWxpxaEgdmVsa8OhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgYW4gaW5kaXJlY3QgYmxvY2sgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gbWV0YWRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODM3Cittc2dpZCAiIgorIkJhZCBAYiBAaSBoYXMgYW4gaW5kaXJlY3QgQGIgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4iCisiQGYgbWV0YWRhdGEuICAiCittc2dzdHIgIiIKKyJJdXplbCDFoXBhdG7DvWNoIGJsb2vFryBtw6EgbmVwxZnDrW3DvSBibG9rICglYiksIGt0ZXLDvSBqZSB2wqByb3pwb3J1IHPCoG1ldGFkYXR5XG4iCisic291Ym9yb3bDqWhvIHN5c3TDqW11LiAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSAocmUpY3JlYXRpb24gZmFpbGVkOiAlbS4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6ZSBAaSAocmUpY3JlYXRpb24gZmFpbGVkOiAlbS4iCittc2dzdHIgIihabm92dSkgdnl0dm/FmWVuw60gaXV6bHUgcHJvIHptxJtueSB2ZWxpa29zdGkgc2VsaGFsbzogJW0uIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDgKK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkl1emVsICVpIG3DoSB2ZWxpa29zdCBuYXbDrWMgKCVJUyksIGt0ZXLDoSBuZW7DrSBwbGF0bsOhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJSb3rFocOtxZllbsO9IGF0cmlidXQgdsKgaXV6bHUgJWkgbcOhIGTDqWxrdSBqbcOpbmEgKCVOKSwga3RlcsOhIG5lbsOtIHBsYXRuw6FcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTgKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICIiCisiUm96xaHDrcWZZW7DvSBhdHJpYnV0IHbCoGl1emx1ICVpIG3DoSBwb3ppY2kgaG9kbm90eSAoJU4pLCBrdGVyw6EgbmVuw60gcGxhdG7DoVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgYmxvY2sgKCVOKSB3aGljaCBpcyBpbnZhbGlkIChtdXN0IGJlIDApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYzCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgQGIgKCVOKSB3aGljaCBpcyBAbiAobXVzdCBiZSAwKVxuIgorbXNnc3RyICIiCisiUm96xaHDrcWZZW7DvSBhdHJpYnV0IHbCoGl1emx1ICVpIG3DoSBibG9rIGhvZG5vdCAoJU4pLCBrdGVyw70gbmVuw60gcGxhdG7DvSAobXVzw60gIgorImLDvXQgMClcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODY4Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiIKKyJSb3rFocOtxZllbsO9IGF0cmlidXQgdsKgaXV6bHUgJWkgbcOhIHZlbGlrb3N0IGhvZG5vdHkgKCVOKSwga3RlcsOhIG5lbsOtIHBsYXRuw6FcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODczCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIlJvesWhw63FmWVuw70gYXRyaWJ1dCB2wqBpdXpsdSAlaSBtw6EgaGFzaCAoJU4pLCBrdGVyw70gbmVuw60gcGxhdG7DvVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODc4Cittc2dpZCAiQGkgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuIgorbXNnc3RyICJJdXplbCAlaSBqZSAlSXQsIGFsZSB2ZSBza3V0ZcSNbm9zdGkgdnlwYWTDoSBuYSBhZHJlc8OhxZkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBleHRlbnQgdHJlZSBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIEB4IHRyZWUgaW4gQGkgJWk6ICVtXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgcHJvxI3DrXTDoW7DrSBzdHJvbXUgQHggdiBpdXpsdSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBpbm9kZSAlaVxuCisjLiBALWV4cGFuZGVkOiBcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODgKK21zZ2lkICIiCisiRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBAaSAlaVxuIgorIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuIgorbXNnc3RyICIiCisiUHLFr2Nob2Qgcm96c2FoeSBpdXpsdSAlaSBzZWxoYWxcbiIKKyJcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIGludmFsaWQgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTQKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIEBuIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJJdXplbCAlaSBtw6EgbmVwbGF0bsO9IHJvenNhaFxuIgorIlx0KGxvZ2lja8O9IGJsb2sgJWMsIG5lcGxhdG7DvSBmeXppY2vDvSBibG9rICViLCBkw6lsa2EgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgaW52YWxpZCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk5Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgQG4gbGVuICVOKVxuIgorbXNnc3RyICIiCisiSXV6ZWwgJWkgbcOhIG5lcGxhdG7DvSByb3pzYWhcbiIKKyJcdChsb2dpY2vDvSBibG9rICVjLCBmeXppY2vDvSBibG9rICViLCBuZXBsYXRuw6EgZMOpbGthICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbiIKK21zZ3N0ciAiIgorIkl1emVsICVpIG3DoSBuYXN0YXZlbiBwxZnDrXpuYWsgRVhURU5UU19GTCBuYSBzeXN0w6ltdSBzb3Vib3LFryBiZXogcG9kcG9yeSAiCisicm96c2Foxa8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBzdXBlcmJsb2NrIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBAUyBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuIgorbXNnc3RyICJJdXplbCAlaSByb3pzYWhvdsO9IGZvcm3DoXQsIGFsZSBzdXBlcmJsb2t1IGNoeWLDrSB2bGFzdG5vc3QgRVhURU5UU1xuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbiIKK21zZ3N0ciAiSXV6bHUgJWkgY2h5YsOtIEVYVEVOVF9GTCwgYWxlIGplIHbCoHJvenNhaG92w6ltIGZvcm3DoXR1XG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIKK21zZ3N0ciAiUnljaGzDvSBzeW1ib2xpY2vDvSBvZGtheiAlaSBuYSBuYXN0YXZlbm8gRVhURU5UX0ZMLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyNAorbXNnaWQgIiIKKyJAaSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiSXV6ZWwgJWkgbcOhIHpwxZllaMOhemVuw6kgcm96c2FoeVxuIgorIlx0KG5lcGxhdG7DvSBsb2dpY2vDvSBibG9rICVjLCBmeXppY2vDvSBibG9rICViLCBkw6lsa2EgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI4Cittc2dpZCAiQGkgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbiIKK21zZ3N0ciAiSXV6ZWwgJWkgbcOhIG5lcGxhdG7DvSB1emVsIHJvenNhaMWvIChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIEBiIEBCOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIHDFmWV2b2R1IGJpdG1hcHkgYmxva8WvIHN1YmNsdXN0ZXJ1OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzOAorbXNnaWQgIkBxIEBpIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkl1emVsIGt2w7N0eSBuZW7DrSBvYnnEjWVqbsO9IHNvdWJvci4gIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDMKK21zZ2lkICJAcSBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiSXV6ZWwga3bDs3R5IHNlIG5lcG91xb7DrXbDoSwgYWxlIG9ic2FodWplIGRhdGEuICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDgKK21zZ2lkICJAcSBAaSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgIgorbXNnc3RyICJJdXplbCBrdsOzdHkgamUgcHJvIHXFvml2YXRlbGUgdmlkaXRlbG7DvS4gIgorCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGxvb2tzIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUzCittc2dpZCAiVGhlIGJhZCBAYiBAaSBsb29rcyBAbi4gICIKK21zZ3N0ciAiSXV6ZWwgxaFwYXRuw71jaCBibG9rxa8gc2UgemTDoSBiw710IG5lcGxhdG7DvS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTU4Cittc2dpZCAiIgorIkBpICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYilcbiIKK21zZ3N0ciAiIgorIkl1emVsICVpIG3DoSByb3pzYWggb8KgbnVsb3bDqSBkw6lsY2VcbiIKKyJcdChuZXBsYXRuw70gbG9naWNrw70gYmxvayAlYywgZnl6aWNrw70gYmxvayAlYilcbiIKKworIyA/Pz8gV1RGCisjLiBALWV4cGFuZGVkOiBJbnRlcmlvciBleHRlbnQgbm9kZSBsZXZlbCAlTiBvZiBpbm9kZSAlaTpcbgorIy4gQC1leHBhbmRlZDogTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTY1Cittc2dpZCAiIgorIkludGVyaW9yIEB4IG5vZGUgbGV2ZWwgJU4gb2YgQGkgJWk6XG4iCisiTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAiCittc2dzdHIgIiIKKyLDmnJvdmXFiCB2bml0xZluw61jaCByb3pzYWhvdsO9IHV6bMWvICVOIGl1emx1ICVpOlxuIgorIkxvZ2lja8O9IHphxI3DoXRlayAlYiBuZW9kcG92w61kw6EgbG9naWNrw6ltdSB6YcSNw6F0a3UgJWMgbmEgZGFsxaHDrSDDunJvdm5pLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzEKK21zZ2lkICIiCisiQGkgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIkl1emVsICVpLCBrb25lYyByb3pzYWh1IHDFmWVrcmHEjXVqZSBwb3ZvbGVub3UgaG9kbm90dVxuIgorIlx0KGxvZ2lja8O9IGJsb2sgJWMsIGZ5emlja8O9IGJsb2sgJWIsIGTDqWxrYSAlTilcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGJsb2NrICViIHNob3VsZCBiZSBhdCBibG9jayAlYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzcKK21zZ2lkICJAZCBAaSAlaSBAYiAlYiBzaG91bGQgYmUgYXQgQGIgJWMuICAiCittc2dzdHIgIkl1emVsIGFkcmVzw6HFmWUgJWkgYmxvayAlYiBieSBtxJtsIGLDvXQgbmEgYmxva3UgJWMuICIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBleHRlbnQgbWFya2VkIHVuaW5pdGlhbGl6ZWQgYXQgYmxvY2sgJWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBpICVpIGhhcyBAeCBtYXJrZWQgdW5pbml0aWFsaXplZCBhdCBAYiAlYy4gICIKK21zZ3N0ciAiIgorIkl1emVsIGFkcmVzw6HFmWUgJWkgbcOhIG5hIGJsb2t1ICVjIHJvenNhaCBvem5hxI1lbsO9IGpha28gbmVpbmljaWFsaXpvdmFuw70uICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbG9naWNhbCBibG9jayAlYiAocGh5c2ljYWwgYmxvY2sgJWMpIHZpb2xhdGVzIGNsdXN0ZXIgYWxsb2NhdGlvbiBydWxlcy5cbgorIy4gQC1leHBhbmRlZDogV2lsbCBmaXggaW4gcGFzcyAxQi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5ODcKK21zZ2lkICIiCisiQGkgJWkgbG9naWNhbCBAYiAlYiAocGh5c2ljYWwgQGIgJWMpIHZpb2xhdGVzIGNsdXN0ZXIgYWxsb2NhdGlvbiBydWxlcy5cbiIKKyJXaWxsIGZpeCBpbiBwYXNzIDFCLlxuIgorbXNnc3RyICIiCisiSXV6ZWwgJWkgbG9naWNrw70gYmxvayAlYiAoZnl6aWNrw70gYmxvayAlYykgcG9ydcWhdWplIHByYXZpZGxhXG4iCisiYWxva2FjZSBjbHVzdGVydS4gQnVkZSBvcHJhdmVubyB2wqBwcsWvY2hvZHUgMUIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLlxuCisjLiBALWV4cGFuZGVkOiBQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk5NAorbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgQGJzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBAaS4uLlxuIgorIlBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIEBtIEBic1xuIgorbXNnc3RyICIiCisiXG4iCisiU3BvdcWhdMOtbSBkb2RhdGXEjW7DqSBwcsWvY2hvZHksIGFieWNoIHZ5xZllxaFpbCBibG9reSwga2Uga3RlcsO9bSBzZSBobMOhc8OtXG4iCisidsOtY2UgaXV6bMWv4oCmXG4iCisiUHLFr2Nob2QgMUI6IFpub3Z1IHZ5xaFldMWZdWppIHbDrWNlIGtyw6F0IGFsb2tvdmFuw6kgYmxva3lcbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAlaToKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAbSBAYihzKSBpbiBAaSAlaToiCittc2dzdHIgIlbDrWNlIGtyw6F0IGFsb2tvdmFuw70ow6kpIGJsb2soeSkgdsKgaXV6bHUgJWk6IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgemtvdW3DoW7DrSBpdXpsxa8gKCVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKGlub2RlX2R1cF9tYXApOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGkgQEIgKEBpX2R1cF9tYXApOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIGFsb2thY2kgYml0bWFweSBpdXpsxa8gKGlub2RlX2R1cF9tYXApOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIGl0ZXJhY2kgcMWZZXMgYmxva3kgdsKgaXV6bHUgJWkgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDMwIGUyZnNjay9wcm9ibGVtLmM6MTM0NQorbXNnaWQgIkVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgQGEgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiIgorIkNoeWJhIHDFmWkgw7pwcmF2xJsgcG/EjXR1IG9ka2F6xa8gYmxva3Ugcm96xaHDrcWZZW7DvWNoIGF0cmlidXTFryAlYiAoaXV6ZWwgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDM1Cittc2dpZCAiUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIEBpcyB3aXRoIEBtIEBic1xuIgorbXNnc3RyICJQcsWvY2hvZCAxQzogSGxlZMOhbsOtIGl1emzFryBzIGR1cGxpa292YW7DvW1pIGJsb2t5IHYgYWRyZXPDocWZw61jaC5cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDQxCittc2dpZCAiUGFzcyAxRDogUmVjb25jaWxpbmcgQG0gQGJzXG4iCittc2dzdHIgIlByxa9jaG9kIDFEOiBPcHJhdnVqaSBkdXBsaWvDoXRuw60gYmxva3lcbiIKKworIy4gQC1leHBhbmRlZDogRmlsZSAlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pIFxuCisjLiBALWV4cGFuZGVkOiAgIGhhcyAlciBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDYKK21zZ2lkICIiCisiRmlsZSAlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pIFxuIgorIiAgaGFzICVyIEBtIEBiKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuIgorbXNnc3RyICIiCisiU291Ym9yICVRIChpdXplbCAlaSwgxI1hcyB6bcSbbnkgJUlNKSBcbiIKKyIgIG3DoSAlciBkdXBsaWtvdmFuw70oY2gpIGJsb2soxa8pIHNkw61sZW7DvShjaCkgbWV6aSAlTiBzb3Vib3J5L3NvdWJvcmVtOlxuIgorCisjLiBALWV4cGFuZGVkOiBcdCVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDUyCittc2dpZCAiXHQlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pXG4iCittc2dzdHIgIiAgICAgICAgJVEgKGl1emVsICVpLCDEjWFzIHptxJtueSAlSU0pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1NworbXNnaWQgIlx0PEBmIG1ldGFkYXRhPlxuIgorbXNnc3RyICJcdDxtZXRhZGF0YSBzeXN0w6ltdSBzb3Vib3LFrz5cbiIKKworIy4gQC1leHBhbmRlZDogKFRoZXJlIGFyZSAlTiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjIKK21zZ2lkICIiCisiKFRoZXJlIGFyZSAlTiBAaXMgY29udGFpbmluZyBAbSBAYnMuKVxuIgorIlxuIgorbXNnc3RyICIiCisiKEV4aXN0dWplICVOIGl1emzFryBvYnNhaHVqw61jw61jaCB2w61jZSBrcsOhdCBhbG9rb3ZhbsOpIGJsb2t5LilcbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA2NworbXNnaWQgIiIKKyJAbSBAYnMgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkR1cGxpa8OhdG7DrSBibG9reSBqacW+IHDFmWnFmWF6ZW55IG5lYm8gbmFrbG9ub3bDoW55LlxuIgorIlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY2xvbmUgZmlsZTogJW1cbiIKK21zZ3N0ciAiTmVtb2h1IGtsb25vdmF0IHNvdWJvcjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4NgorbXNnaWQgIlBhc3MgMjogQ2hlY2tpbmcgQGQgc3RydWN0dXJlXG4iCittc2dzdHIgIlByxa9jaG9kIDI6IEtvbnRyb2x1amUgc2Ugc3RydWt0dXJhIGFkcmVzw6HFmcWvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgaW5vZGUgbnVtYmVyIGZvciAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG4gQGkgbnVtYmVyIGZvciAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIsWgcGF0bsOpIMSNw61zbG8gaXV6bHUgcHJvIOKAni7igJwgdiBpdXpsdSBhZHJlc8OhxZllICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbnZhbGlkIGlub2RlICM6ICVEaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDk2Cittc2dpZCAiQEUgaGFzIEBuIEBpICM6ICVEaS5cbiIKK21zZ3N0ciAiUG9sb8W+a2Eg4oCeJURu4oCcIHbCoCVwICglaSkgbcOhIMWhcGF0bsOpIMSNw61zbG8gaXV6bHU6ICVEaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgJURpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDEKK21zZ2lkICJARSBoYXMgQEQvdW51c2VkIEBpICVEaS4gICIKK21zZ3N0ciAiUG9sb8W+a2Eg4oCeJURu4oCcIHYgJXAgKCVpKSBtw6Egb2RzdHJhbsSbbsO9L25lcG91xb7DrXZhbsO9IGl1emVsICVEaS4gIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA2Cittc2dpZCAiQEUgQEwgdG8gJy4nICAiCittc2dzdHIgIlBvbG/FvmthIOKAniVEbuKAnCB2ICVwICglaSkgamUgb2RrYXogbmEg4oCeLuKAnCAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcG9pbnRzIHRvIGlub2RlICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExMQorbXNnaWQgIkBFIHBvaW50cyB0byBAaSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIEBiLlxuIgorbXNnc3RyICIiCisiUG9sb8W+a2Eg4oCeJURu4oCcIHYgJXAgKCVpKSB1a2F6dWplIG5hIGl1emVsICglRGkpIHVtw61zdMSbbsO9IHZlIMWhcGF0bsOpbSBibG9rdS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gZGlyZWN0b3J5ICVQICglRGkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTYKK21zZ2lkICJARSBATCB0byBAZCAlUCAoJURpKS5cbiIKK21zZ3N0ciAiUG9sb8W+a2Eg4oCeJURu4oCcIHYgJXAgKCVpKSBqZSBvZGtheiBuYSBhZHJlc8OhxZkgJVAgKCVEaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIHRoZSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjEKK21zZ2lkICJARSBATCB0byB0aGUgQHIuXG4iCittc2dzdHIgIlBvbG/FvmthIOKAniVEbuKAnCB2ICVwICglaSkgamUgb2RrYXogbmEga2/FmWVub3bDvSBpdXplbC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjYKK21zZ2lkICJARSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuIgorbXNnc3RyICJQb2xvxb5rYSDigJ4lRG7igJwgdiAlcCAoJWkpIG3DoSB2ZSBzdsOpbSBqbcOpbsSbIG5lcGxhdG7DqSB6bmFreS5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIkNoeWLDrSDigJ4u4oCcIHbCoGl1emx1IGFkcmVzw6HFmWUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4uJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIkNoeWLDrSDigJ4uLuKAnCB2wqBpdXpsdSBhZHJlc8OhxZllICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBGaXJzdCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKSBzaG91bGQgYmUgJy4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0MQorbXNnaWQgIkZpcnN0IEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpICglcCkgQHMgJy4nXG4iCittc2dzdHIgIiIKKyJQcnZuw60gcG9sb8W+a2Eg4oCeJURu4oCcIChpdXplbD0lRGkpIHbCoGl1emx1IGFkcmVzw6HFmWUgJWkgKCVwKSBieSBtxJtsYSBiw710IOKAni7igJxcbiIKKworIy4gQC1leHBhbmRlZDogU2Vjb25kIGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSBzaG91bGQgYmUgJy4uJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDYKK21zZ2lkICJTZWNvbmQgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgQHMgJy4uJ1xuIgorbXNnc3RyICJEcnVow6EgcG9sb8W+a2Eg4oCeJURu4oCcIChpdXplbD0lRGkpIHbCoGl1emx1IGFkcmVzw6HFmWUgJWkgYnkgbcSbbGEgYsO9dCDigJ4uLuKAnFxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZhZGRyIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJRiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1MQorbXNnaWQgImlfZmFkZHIgQEYgJUlGLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZhZGRyIHBybyBpdXplbCAlaSAoJVEpIGplICVJRiwgbcSbbGEgYnkgYsO9dCBudWxhLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1NgorbXNnaWQgImlfZmlsZV9hY2wgQEYgJUlmLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZpbGVfYWNsIHBybyBpdXplbCAlaSAoJVEpIGplICVJZiwgbcSbbG8gYnkgYsO9dCBudWxhLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Rpcl9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlkLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYxCittc2dpZCAiaV9kaXJfYWNsIEBGICVJZCwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9kaXJfYWNsIHBybyBpdXplbCAlaSAoJVEpIGplICVOLCBtxJtsbyBieSBiw710IG51bGEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnJhZyBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2NgorbXNnaWQgImlfZnJhZyBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mcmFnIHBybyBpdXplbCAlaSAoJVEpIGplICVOLCBtxJtsbyBieSBiw710IG51bGEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnNpemUgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzEKK21zZ2lkICJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZzaXplIHBybyBpdXplbCAlaSAoJVEpIGplICVOLCBtxJtsYSBieSBiw710IG51bGEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZSAoJUltKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTc2Cittc2dpZCAiQGkgJWkgKCVRKSBoYXMgQG4gbW9kZSAoJUltKS5cbiIKK21zZ3N0ciAiSXV6ZWwgJWkgKCVRKSBtw6EgxaFwYXRuw70gbcOzZCAoJUltKS5cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBkaXJlY3RvcnkgY29ycnVwdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4MQorbXNnaWQgIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBAZCBjb3JydXB0ZWRcbiIKK21zZ3N0ciAiSXV6ZWwgYWRyZXPDocWZZSAlaSwgJUIsIHBvc3VuICVOOiBhZHJlc8OhxZkgcG/FoWtvemVuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTg2Cittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4iCittc2dzdHIgIkl1emVsIGFkcmVzw6HFmWUgJWksIGJsb2sgJUIsIHBvemljZSAlTjogbsOhemV2IHNvdWJvcnUgcMWZw61sacWhIGRsb3Vow71cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiB1bmFsbG9jYXRlZCAlQi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTkxCittc2dpZCAiQGQgQGkgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgIgorbXNnc3RyICJJdXplbCBhZHJlc8OhxZllICVpIG3DoSBuZWFsb2tvdmFuw70gJUIuICIKKworIy4gQC1leHBhbmRlZDogJy4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiUG9sb8W+a2EgYWRyZXPDocWZZSDigJ4u4oCcIHbCoGl1emx1IGFkcmVzw6HFmWUgJWkgbmVuw60gdWtvbsSNZW5hIE5VTExcbiIKKworIy4gQC1leHBhbmRlZDogJy4uJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIicuLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICJQb2xvxb5rYSBhZHJlc8OhxZllIOKAni4u4oCcIHbCoGl1emx1IGFkcmVzw6HFmWUgJWkgbmVuw60gdWtvbsSNZW5hIE5VTExcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGNoYXJhY3RlciBkZXZpY2UuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwNgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgY2hhcmFjdGVyIEB2LlxuIgorbXNnc3RyICJJdXplbCAlaSAoJXEpIGplIG5lcGxhdG7DqSB6bmFrb3bDqSB6YcWZw616ZW7DrS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGJsb2NrIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjExCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBAYiBAdi5cbiIKK21zZ3N0ciAiSXV6ZWwgJWkgKCVRKSBqZSBuZXBsYXRuw6kgYmxva292w6kgemHFmcOtemVuw60uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgZHVwbGljYXRlICcuJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE2Cittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuJyBAZS5cbiIKK21zZ3N0ciAiUG9sb8W+a2Eg4oCeJURu4oCcIHYgJXAgKCVpKSBqZSBkdXBsaWvDoXRuw60gcG9sb8W+a2Eg4oCeLuKAnC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4uJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjIxCittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuLicgQGUuXG4iCittc2dzdHIgIlBvbG/FvmthIOKAniVEbuKAnCB2ICVwICglaSkgamUgZHVwbGlrw6F0bsOtIHBvbG/FvmthIOKAni4u4oCcLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjYgZTJmc2NrL3Byb2JsZW0uYzoxNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVybmFsIGVycm9yOiBjb3VsZG4ndCBmaW5kIGRpcl9pbmZvIGZvciAlaS5cbiIKK21zZ3N0ciAiSW50ZXJuw60gY2h5YmE6IG5lbW9odSBuYWrDrXQgZGlyX2luZm8gcHJvICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyByZWNfbGVuIG9mICVEciwgc2hvdWxkIGJlICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzEKK21zZ2lkICJARSBoYXMgcmVjX2xlbiBvZiAlRHIsIEBzICVOLlxuIgorbXNnc3RyICJQb2xvxb5rYSDigJ4lRG7igJwgdsKgJXAgKCVpKSBtw6EgcmVjX2xlbiAlRHIsIG3Em2xhIGJ5IGLDvXQgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IHN0cnVjdHVyZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgYWxva2FjaSBzdHJ1a3R1cnkgaWNvdW50OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcnkgYmxvY2tzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaXRlcmF0aW5nIG92ZXIgQGQgQGJzOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIGl0ZXJvdsOhbsOtIHDFmWVzIGJsb2t5IGFkcmVzw6HFmWU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0NgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSDEjXRlbsOtIGJsb2t1IGFkcmVzw6HFmWUgJWIgKGl1emVsICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjUxCittc2dpZCAiRXJyb3Igd3JpdGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIHrDoXBpc3UgYmxva3UgYWRyZXPDocWZZSAlYiAoaXV6ZWwgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2sgZm9yIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBuZXcgQGQgQGIgZm9yIEBpICVpICglcyk6ICVtXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgYWxva2FjaSBub3bDqWhvIGJsb2t1IGFkcmVzw6HFmWUgcHJvIGl1emVsICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRlYWxsb2NhdGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlYWxsb2NhdGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSBkZWFsb2thY2kgaXV6bHUgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBlbnRyeSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGQgQGUgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbiIKK21zZ3N0ciAiUG9sb8W+a2EgYWRyZXPDocWZZSBwcm8g4oCeLuKAnCB2wqAlcCAoJWkpIGplIHZlbGvDoS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIEZJRk8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3MQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiSXV6ZWwgJWkgKCVRKSBqZSBuZXBsYXRuw6EgRklGTy5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIHNvY2tldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc2Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBzb2NrZXQuXG4iCittc2dzdHIgIkl1emVsICVpICglUSkgamUgbmVwbGF0bsO9IHNvY2tldC5cbiIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmaWxldHlwZSBmb3IgZW50cnkgJyVEbicgaW4gJXAgKCVpKSB0byAlTi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjgxCittc2dpZCAiU2V0dGluZyBmaWxldHlwZSBmb3IgQEUgdG8gJU4uXG4iCittc2dzdHIgIk5hc3RhdnVqZSBzZSBmaWxldHlwZSBwcm8gcG9sb8W+a3Ug4oCeJURu4oCcIHYgJXAgKCVpKSBuYSAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBzaG91bGQgYmUgJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODYKK21zZ2lkICJARSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBAcyAlTikuXG4iCittc2dzdHIgIlBvbG/FvmthIOKAniVEbuKAnCB2wqAlcCAoJWkpIG3DoSBjaHlibsO9IGZpbGV0eXBlIChieWwgJUR0LCBtxJtsIGJ5IGLDvXQgJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5MQorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIlBvbG/FvmthIOKAniVEbuKAnCB2ICVwICglaSkgbcOhIG5hc3RhdmVuIGZpbGV0eXBlLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIHplcm8tbGVuZ3RoIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5NgorbXNnaWQgIkBFIGhhcyBhIEB6IG5hbWUuXG4iCittc2dzdHIgIlBvbG/FvmthIOKAniVEbuKAnCB2wqAlcCAoJWkpIG3DoSBuw6F6ZXYgbnVsb3bDqSBkw6lsa3kuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFN5bWxpbmsgJVEgKGlub2RlICMlaSkgaXMgaW52YWxpZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzAxCittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiU3ltYm9saWNrw70gb2RrYXogJVEgKGl1emVsICMlaSkgbmVuw60gcGxhdG7DvS5cbiIKKworIyBGSVhNRTogQEYgYWxyZWFkeSBlbmRzIHdpdGggJ2lzJworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGZvciBpbm9kZSAlaSAoJVEpIGlzIGludmFsaWQgKCVJZikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMwNgorbXNnaWQgIkBhIEBiIEBGIEBuICglSWYpLlxuIgorbXNnc3RyICJCbG9rIHJvesWhw63FmWVuw71jaCBhdHJpYnV0xa8gcHJvIGl1emVsICVpICglUSkgbmVuw60gcGxhdG7DvSAoJUlmKS5cbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTEKK21zZ2lkICJAZiBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBAUy5cbiIKK21zZ3N0ciAiIgorIlN5c3TDqW0gc291Ym9yxa8gb2JzYWh1amUgdmVsa8OpIHNvdWJvcnksIGFsZSB2IHN1cGVyYmxva3UgbmVtw6EgcMWZw616bmFrICIKKyJMQVJHRV9GSUxFLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgbm90IHJlZmVyZW5jZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzE2Cittc2dpZCAiQHAgQGggJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4iCittc2dzdHIgIlByb2Jsw6ltIHbCoGl1emx1IEhUUkVFIGFkcmVzw6HFmWUgJWQ6IG5hICVCIG5lZXhpc3R1amUgb2RrYXpcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzIxCittc2dpZCAiQHAgQGggJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbiIKK21zZ3N0ciAiUHJvYmzDqW0gdsKgaXV6bHUgSFRSRUUgYWRyZXPDocWZZSAlZDogbmEgJUIgdmVkb3UgZHZhIG9ka2F6eVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjYKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuIgorbXNnc3RyICJQcm9ibMOpbSB2wqBpdXpsdSBIVFJFRSBhZHJlc8OhxZllICVkOiAlQiBtw6EgxaFwYXRuw70gbWluIGhhc2hcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMxCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbiIKK21zZ3N0ciAiUHJvYmzDqW0gdsKgaXV6bHUgSFRSRUUgYWRyZXPDocWZZSAlZDogJUIgbcOhIMWhcGF0bsO9IG1heCBoYXNoXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzNgorbXNnaWQgIkBuIEBoICVkICglcSkuICAiCittc2dzdHIgIk5lcGxhdG7DvSBpdXplbCBIVFJFRSBhZHJlc8OhxZllICVkICglcSkuICIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKTogYmFkIGJsb2NrIG51bWJlciAlYi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQwCittc2dpZCAiQHAgQGggJWQgKCVxKTogYmFkIEBiIG51bWJlciAlYi5cbiIKK21zZ3N0ciAiUHJvYmzDqW0gdsKgaXV6bHUgSFRSRUUgYWRyZXPDocWZZSAlZCAoJXEpOiDFoXBhdG7DqSDEjcOtc2xvIGJsb2t1ICViLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogcm9vdCBub2RlIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBwIEBoICVkOiByb290IG5vZGUgaXMgQG5cbiIKK21zZ3N0ciAiUHJvYmzDqW0gdsKgaXV6bHUgSFRSRUUgYWRyZXPDocWZZSAlZDoga2/FmWVub3bDvSB1emVsIG5lbsOtIHBsYXRuw71cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGxpbWl0ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzU1Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBsaW1pdCAoJU4pXG4iCittc2dzdHIgIlByb2Jsw6ltIHbCoGl1emx1IEhUUkVFIGFkcmVzw6HFmWUgJWQ6ICVCIG3DoSDFoXBhdG7DvSBsaW1pdCAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBjb3VudCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gY291bnQgKCVOKVxuIgorbXNnc3RyICJQcm9ibMOpbSB2wqBpdXpsdSBIVFJFRSBhZHJlc8OhxZllICVkOiAlQiBtw6EgxaFwYXRuw70gcG/EjWV0ICglTilcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjUKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4iCittc2dzdHIgIlByb2Jsw6ltIHbCoGl1emx1IEhUUkVFIGFkcmVzw6HFmWUgJWQ6ICVCIG3DoSBuZXNldMWZw61kxJtub3UgaGFzaCB0YWJ1bGt1XG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBkZXB0aCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICJQcm9ibMOpbSB2wqBpdXpsdSBIVFJFRSBhZHJlc8OhxZllICVkOiAlQiBtw6EgxaFwYXRub3UgaGxvdWJrdSAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzUKK21zZ2lkICJEdXBsaWNhdGUgQEUgZm91bmQuICAiCittc2dzdHIgIk5hbGV6ZW5hIGR1cGxpa8OhdG7DrSBwb2xvxb5rYSDigJ4lRG7igJwgdiAlcCAoJWkpLiAiCisKKyMgRklYTUU6IG5vLWMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4KKyMuIEAtZXhwYW5kZWQ6IFJlbmFtZSB0byAlcworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgwCisjLCBuby1jLWZvcm1hdAorbXNnaWQgIiIKKyJARSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuIgorIlJlbmFtZSB0byAlcyIKK21zZ3N0ciAiIgorIlBvbG/FvmthIOKAniVEbuKAnCB2wqAlcCAoJWkpIG5lbcOhIGplZGluZcSNbsO9IG7DoXpldiBzb3Vib3J1LlxuIgorIlDFmWVqbWVub3ZhdCBuYSAlcyIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGZvdW5kLlxuCisjLiBALWV4cGFuZGVkOiBcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzg1Cittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisiTmFsZXplbmEgZHVwbGlrw6F0bsOtIHBvbG/FvmthIOKAniVEbuKAnC5cbiIKKyJcdE96bmHEjXVqaSAlcCAoJWkpIHBybyBwxZllc3RhdmJ1LlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Jsb2Nrc19oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5MAorbXNnaWQgImlfYmxvY2tzX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2Jsb2Nrc19oaSBwcm8gaXV6ZWwgJWkgKCVRKSBqZSAlTiwgbcSbbCBieSBiw710IG51bGEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFVuZXhwZWN0ZWQgYmxvY2sgaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5NQorbXNnaWQgIlVuZXhwZWN0ZWQgQGIgaW4gQGggJWQgKCVxKS5cbiIKK21zZ3N0ciAiTmVvxI1la8OhdmFuw70gYmxvayB2wqBpdXpsdSBIVFJFRSBhZHJlc8OhxZllICVkICglcSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgaW4gZ3JvdXAgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5OQorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGluIEBnICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuIgorbXNnc3RyICIiCisiUG9sb8W+a2Eg4oCeJURp4oCcIHbCoCVwICglaSkgb2RrYXp1amUgbmEgaXV6ZWwgJURpIHZlIHNrdXBpbsSbICVnLCBrZGUgamUgIgorIm5hc3RhdmVubyBfSU5PREVfVU5JTklULlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGZvdW5kIGluIGdyb3VwICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDQKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBmb3VuZCBpbiBAZyAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbiIKK21zZ3N0ciAiIgorIlBvbG/FvmthIOKAniVEbuKAnCB2wqAlcCAoJWkpIG9ka2F6dWplIG5hIGl1emVsICVEaSBuYWxlemVuw70gdmUgc2t1cGluxJsgJWcgb2JsYXN0aSAiCisibmVwb3XFvml0w71jaCBpdXpsxa8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2xfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDkKK21zZ2lkICJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZpbGVfYWNsX2hpIHBybyBpdXplbCAlaSAoJVEpIGplICVOLCBtxJtsbyBieSBiw710IG51bGEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MTYKK21zZ2lkICJQYXNzIDM6IENoZWNraW5nIEBkIGNvbm5lY3Rpdml0eVxuIgorbXNnc3RyICJQcsWvY2hvZCAzOiBLb250cm9sdWplIHNlIGRvc2HFvml0ZWxub3N0IGFkcmVzw6HFmcWvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgbm90IGFsbG9jYXRlZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDIxCittc2dpZCAiQHIgbm90IGFsbG9jYXRlZC4gICIKK21zZ3N0ciAiS2/FmWVub3bDvSBpdXplbCBuZWFsb2tvdsOhbi4gIgorCisjLiBALWV4cGFuZGVkOiBObyByb29tIGluIGxvc3QrZm91bmQgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjYKK21zZ2lkICJObyByb29tIGluIEBsIEBkLiAgIgorbXNnc3RyICJOZW7DrSBtw61zdG8gdiBhZHJlc8OhxZlpIGxvc3QrZm91bmQuICIKKworIy4gQC1leHBhbmRlZDogVW5jb25uZWN0ZWQgZGlyZWN0b3J5IGlub2RlICVpICglcClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuY29ubmVjdGVkIEBkIEBpICVpICglcClcbiIKK21zZ3N0ciAiTmVwxZlpcG9qZW7DvSBhZHJlc8OhxZlvdsO9IGl1emVsICVpICglcClcbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzYKK21zZ2lkICIvQGwgbm90IGZvdW5kLiAgIgorbXNnc3RyICIvbG9zdCtmb3VuZCBuZW5hbGV6ZW5vLiAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBzaG91bGQgYmUgJXEgKCVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQxCittc2dpZCAiJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIEBzICVxICglZCkuXG4iCittc2dzdHIgIuKAni4u4oCcIHYgJVEgKCVpKSBqZSAlUCAoJWopLCBtxJtsbyBieSBiw710ICVxICglZCkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBvciBub24tZXhpc3RlbnQgL2xvc3QrZm91bmQuICBDYW5ub3QgcmVjb25uZWN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDYKK21zZ2lkICJCYWQgb3Igbm9uLWV4aXN0ZW50IC9AbC4gIENhbm5vdCByZWNvbm5lY3QuXG4iCittc2dzdHIgIsWgcGF0bsOpIG5lYm8gbmVleGlzdHVqw61jw60gL2xvc3QrZm91bmQuIE5lbW9odSB6bm92dSBwxZlpcG9qaXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkIG5vdCBleHBhbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZXhwYW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiTmVtb2h1IHp2xJt0xaFpdCAvbG9zdCtmb3VuZDogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWNvbm5lY3QgJWk6ICVtXG4iCittc2dzdHIgIk5lbW9odSB6bm92dSBwxZlpcG9qaXQgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL0BsOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIHBva3VzdSBuYWrDrXQgL2xvc3QrZm91bmQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfYmxvY2s6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BiOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X2Jsb2NrOiAlbSBwxZlpIHBva3VzdSB2eXR2b8WZaXQgYWRyZXPDocWZIC9sb3N0K2ZvdW5kXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfaW5vZGU6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BpOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X2lub2RlOiAlbSBwxZlpIHBva3VzdSB2eXR2b8WZaXQgYWRyZXPDocWZIC9sb3N0K2ZvdW5kXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X2Rpcl9AYjogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IEBkIEBiXG4iCittc2dzdHIgIiIKKyJleHQyZnNfbmV3X2Rpcl9ibG9jazogJW0gcMWZaSBwb2t1c3Ugdnl0dsOhxZllbsOtIG5vdsOpaG8gYWRyZXPDocWZZSAvbG9zdCtmb3VuZFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBkaXJlY3RvcnkgYmxvY2sgZm9yIC9sb3N0K2ZvdW5kXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfd3JpdGVfZGlyX0BiOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBAZCBAYiBmb3IgL0BsXG4iCittc2dzdHIgImV4dDJmc193cml0ZV9kaXJfYmxvY2s6ICVtIHDFmWkgesOhcGlzdSBibG9rdSBhZHJlc8OhxZllIHBybyAvbG9zdCtmb3VuZFxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBhZGp1c3RpbmcgaW5vZGUgY291bnQgb24gaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGFkanVzdGluZyBAaSBjb3VudCBvbiBAaSAlaVxuIgorbXNnc3RyICJDaHliYSBwxZlpIMO6cHJhdsSbIMSNZXRub3N0aSBpdXpsdSB2wqBpdXpsdSAlaVxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiTmVtb2h1IG9wcmF2aXQgcm9kacSNZSBpdXpsdSAlaTogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgZGlyZWN0b3J5IGVudHJ5XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IEBkIEBlXG4iCisiXG4iCittc2dzdHIgIiIKKyJOZW1vaHUgb3ByYXZpdCByb2RpxI1lIGl1emx1ICVpOiBOZW1vaHUgbmFqw610IHBvbG/Fvmt1IHJvZGnEjW92c2vDqWhvIGFkcmVzw6HFmWVcbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgcm9vdCBkaXJlY3RvcnkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHJvb3QgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSB2eXR2w6HFmWVuw60ga2/FmWVub3bDqWhvIGFkcmVzw6HFmWUgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSB2eXR2w6HFmWVuw60gYWRyZXPDocWZZSAvbG9zdCtmb3VuZCAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeTsgYWJvcnRpbmcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxNgorbXNnaWQgIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIKK21zZ3N0ciAiS2/FmWVub3bDvSBpdXplbCBuZW7DrSBhZHJlc8OhxZk7IGtvbsSNw61tLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIxCittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICJOZW1vaHUgcG9rcmHEjW92YXQgYmV6IGtvxZllbm92w6lobyBpdXpsdS5cbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgaXMgbm90IGEgZGlyZWN0b3J5IChpbm89JWkpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUzMQorIywgYy1mb3JtYXQKK21zZ2lkICIvQGwgaXMgbm90IGEgQGQgKGlubz0laSlcbiIKK21zZ3N0ciAiL2xvc3QrZm91bmQgbmVuw60gYWRyZXPDocWZIChpbm89JWkpXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUzOAorbXNnaWQgIlBhc3MgM0E6IE9wdGltaXppbmcgZGlyZWN0b3JpZXNcbiIKK21zZ3N0ciAiUHLFr2Nob2QgM0E6IE9wdGltYWxpenVqaSBhZHJlc8OhxZllXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRpcnNfdG9faGFzaCBpdGVyYXRvcjogJW1cbiIKK21zZ3N0ciAiTmVtb2h1IHZ5dHZvxZlpdCBpdGVyw6F0b3IgZGlyc190b19oYXNoOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDgKK21zZ2lkICJGYWlsZWQgdG8gb3B0aW1pemUgZGlyZWN0b3J5ICVxICglZCk6ICVtXG4iCittc2dzdHIgIk5lbW9odSBvcHRpbWFsaXpvdmF0IGFkcmVzw6HFmSAlcSAoJWQpOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NTMKK21zZ2lkICJPcHRpbWl6aW5nIGRpcmVjdG9yaWVzOiAiCittc2dzdHIgIk9wdGltYWxpenVqaSBhZHJlc8OhxZllOiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3MAorbXNnaWQgIlBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50c1xuIgorbXNnc3RyICJQcsWvY2hvZCA0OiBLb250cm9sdWrDrSBzZSBwb8SNdHkgb2RrYXrFr1xuIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIHplcm8tbGVuZ3RoIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQHogQGkgJWkuICAiCittc2dzdHIgIk9zacWZZWzDvSBpdXplbCAlaSBzwqBudWxvdm91IGTDqWxrb3UuICIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQGkgJWlcbiIKK21zZ3N0ciAiT3NpxZllbMO9IGl1emVsICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg1Cittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgIlBvxI1ldCBvZGthesWvIG5hIGl1emVsICVpIGplICVJbCwgbcSbbCBieSBiw710ICVOLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4OQorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiVkFST1bDgU7DjTogQ0hZQkEgUMWYSSBQUk9HUkFNT1bDgU7DjSBFMkZTQ0shXG4iCisiXHRORUJPIE7EmktETyBOQVRWUkRMw50gKFZZKSBLT05UUk9MVUpFIFDFmElQT0pFTsOdIChQT1XFvcONVkFOw50pIFNZU1TDiU1cbiIKKyJcdFNPVUJPUsWuLlxuIgorImlub2RlX2xpbmtfaW5mb1slaV0gamUgJU4sIGlub2RlLmlfbGlua3NfY291bnQgamUgJUlsLiBNxJtseSBieSBiw710IHN0ZWpuw6khXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvblxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1OTkKK21zZ2lkICJQYXNzIDU6IENoZWNraW5nIEBnIHN1bW1hcnkgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiUHLFr2Nob2QgNTogS29udHJvbHVqw60gc2Ugc291aHJubsOpIGluZm9ybWFjZSBza3VwaW5cbiIKKworIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgaW5vZGUgYml0bWFwIGlzIG5vdCBzZXQuIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjA0Cittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGkgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICJWw71wbMWIIG5hIGtvbmNpIGJpdG1hcHkgaXV6bMWvIG5lbsOtIG5hc3RhdmVuYS4gIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDkKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIlbDvXBsxYggbmEga29uY2kgYml0bWFweSBibG9rxa8gbmVuw60gbmFzdGF2ZW5hLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MTQKK21zZ2lkICJAYiBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJSb3pkw61seSB2IGJpdG1hcMSbIGJsb2vFrzogIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjM0Cittc2dpZCAiQGkgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiUm96ZMOtbHkgdiBiaXRtYXDEmyBpdXpsxa86ICIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTQKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIlBvxI1ldCB2b2xuw71jaCBpdXpsxa8gdmUgc2t1cGluxJsgxI0u4oCvJWcgxaFwYXRuxJsgKCVpLCBzcG/EjXRlbm89JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1OQorbXNnaWQgIkRpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiUG/EjWV0IGFkcmVzw6HFmcWvIHZlIHNrdXBpbsSbIMSNLuKAryVnIMWhcGF0bsSbICglaSwgc3BvxI10ZW5vPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjY0Cittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiUG/EjWV0IHZvbG7DvWNoIGl1emzFryDFoXBhdG7EmyAoJWksIHNwb8SNdGVubz0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjY5Cittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJQb8SNZXQgdm9sbsO9Y2ggYmxva8WvIHZlIHNrdXBpbsSbIMSNLuKAryVnIMWhcGF0bsSbICglYiwgc3BvxI10ZW5vPSVjKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjc0Cittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiUG/EjWV0IHZvbG7DvWNoIGJsb2vFryDFoXBhdG7EmyAoJWIsIHNwb8SNdGVubz0lYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBST0dSQU1NSU5HIEVSUk9SOiBmaWxlc3lzdGVtICgjJU4pIGJpdG1hcCBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBiaXRtYXAgCisjLiBALWV4cGFuZGVkOiBlbmRwb2ludHMgKCVpLCAlailcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjc5Cittc2dpZCAiIgorIlBST0dSQU1NSU5HIEVSUk9SOiBAZiAoIyVOKSBAQiBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBAQiAiCisiZW5kcG9pbnRzICglaSwgJWopXG4iCittc2dzdHIgIiIKKyJDSFlCQSBQxZhJIFBST0dSQU1PVsOBTsONOiBocmFuaWNlICglYiwgJWMpIGJpdG1hcHkgc3lzdMOpbXUgc291Ym9yxa8gKCMlTikgIgorIm5lb2Rwb3bDrWRhasOtIHZ5cG/EjXRlbsO9bSBocmFuaWPDrW0gYml0bWFweSAoJWksICVqKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2ODUKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogZnVkZ2luZyBlbmQgb2YgYml0bWFwICglTilcbiIKK21zZ3N0ciAiSW50ZXJuw60gY2h5YmE6IHBva2HFvmVuw70ga29uZWMgYml0bWFweSAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgaW5vZGUgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAaSBAQjogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSBrb3DDrXJvdsOhbsOtIGRvIG7DoWhyYWRuw60gYml0bWFweSBpdXpsxa86ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAYiBAQjogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSBrb3DDrXJvdsOhbsOtIGRvIG7DoWhyYWRuw60gYml0bWFweSBibG9rxa86ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGJsb2NrKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGIocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4iCittc2dzdHIgIiIKKyJCbG9rKHkpIHNrdXBpbnkgJWcgamUvanNvdSBwb3XFvsOtdsOhbih5KSwgYWxlIHNrdXBpbmEgamUgb3puYcSNZW5hIGpha28gIgorIkJMT0NLX1VOSU5JVFxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBpbm9kZShzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBpKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuIgorbXNnc3RyICIiCisiSXV6ZWwvaXV6bHkgc2t1cGlueSAlZyBqZS9qc291IHBvdcW+w612w6FuKHkpLCBhbGUgc2t1cGluYSBqZSBvem5hxI1lbmEgamFrbyAiCisiSU5PREVfVU5JTklUXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlY3JlYXRlIGpvdXJuYWwKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTczMgorbXNnaWQgIlJlY3JlYXRlIEBqIgorbXNnc3RyICJabm92dSB2eXR2b8WZaXQgxb51cm7DoWwiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTczNworbXNnaWQgIlVwZGF0ZSBxdW90YSBpbmZvIGZvciBxdW90YSB0eXBlICVOIgorbXNnc3RyICJBa3R1YWxpem92YXQgw7pkYWplIG/CoGt2w7N0w6FjaCBwcm8gZHJ1aCBrdsOzdCAlTiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc2V0dGluZyBibG9jayBncm91cCBjaGVja3N1bSBpbmZvOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBAYiBAZyBjaGVja3N1bSBpbmZvOiAlbVxuIgorbXNnc3RyICIiCisiQ2h5YmEgcMWZaSBuYXN0YXZvdsOhbsOtIGluZm9ybWFjZSBvwqBrb250cm9sbsOtbSBzb3XEjXR1IHNrdXBpbnkgYmxva8WvOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBmaWxlIHN5c3RlbSBpbmZvOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIHrDoXBpc3Ugw7pkYWrFryBvwqBzb3Vib3JvdsOpbSBzeXN0w6ltdTogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGZsdXNoaW5nIHdyaXRlcyB0byBzdG9yYWdlIGRldmljZTogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSBzeW5jaHJvbml6YWNpIHrDoXBpc8WvIG5hIHphxZnDrXplbsOtIMO6bG/FvmnFoXTEmzogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaGFuZGxlZCBlcnJvciBjb2RlICgweCV4KSFcbiIKK21zZ3N0ciAiTmVvYnNsb3XFvmVuw70ga8OzZCBjaHlieSAoMHgleCkhXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk5NiBlMmZzY2svcHJvYmxlbS5jOjIwMDAKK21zZ2lkICJJR05PUkVEIgorbXNnc3RyICJJR05PUk9Ww4FOTyIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVkLCBlbGFwc2VkIHRpbWU6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCittc2dzdHIgIlBvdcW+aXTDoSBwYW3Em8WlOiAlZCwgc3Ryw6F2ZW7DvSDEjWFzOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzaXplIG9mIGlub2RlPSVkXG4iCittc2dzdHIgInZlbGlrb3N0IGl1emx1PSVkXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjExOQorbXNnaWQgIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iCittc2dzdHIgInDFmWkgc3BvdcWhdMSbbsOtIHByb2hsw61ka3kgaXV6bMWvIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMzAKK21zZ2lkICJ3aGlsZSBkb2luZyBpbm9kZSBzY2FuIgorbXNnc3RyICJwxZlpIHByb3bDoWTEm27DrSBwcm9obMOtZGt5IGl1emzFryIKKworIzogZTJmc2NrL3N1cGVyLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZm9yIGlub2RlICVkIgorbXNnc3RyICJwxZlpIHZvbMOhbsOtIGV4dDJmc19ibG9ja19pdGVyYXRlIHBybyBpdXplbCAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZm9yIGlub2RlICVkIgorbXNnc3RyICJwxZlpIHZvbMOhbsOtIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyIHBybyBpdXplbCAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6Mjc0Cittc2dpZCAiVHJ1bmNhdGluZyIKK21zZ3N0ciAiVXNla8OhdsOhbSIKKworIzogZTJmc2NrL3N1cGVyLmM6Mjc1Cittc2dpZCAiQ2xlYXJpbmciCittc2dzdHIgIk1hxb51IgorCisjOiBlMmZzY2svdW5peC5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1wYW55cmNkZnZ0REZWXSBbLWIgc3VwZXJibG9ja10gWy1CIGJsb2Nrc2l6ZV1cbiIKKyJcdFx0Wy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIFstUCBwcm9jZXNzX2lub2RlX3NpemVdXG4iCisiXHRcdFstbHwtTCBiYWRfYmxvY2tzX2ZpbGVdIFstQyBmZF0gWy1qIGV4dGVybmFsX2pvdXJuYWxdXG4iCisiXHRcdFstRSBleHRlbmRlZC1vcHRpb25zXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIlBvdcW+aXTDrTogJXMgWy1wYW55cmNkZnZ0REZWXSBbLWIgc3VwZXJibG9rXSBbLUIgdmVsaWtvc3RfYmxva3VdXG4iCisiXHRcdFstSSBibG9reV9pdXpsb3bDvWNoX2J1ZmZlcsWvXSBbLVAgdmVsaWtvc3RfenByYWNvdsOhdmFuw71jaF9pdXpsxa9dXG4iCisiXHRcdFstbHwtTCBzb3Vib3JfxaFwYXRuw71jaF9ibG9rxa9dIFstQyBmZF0gWy1qIGV4dGVybsOtX8W+dXJuw6FsXVxuIgorIlx0XHRbLUUgcm96xaHDrcWZZW7DqS1wxZllcMOtbmHEjWVdIHphxZnDrXplbsOtXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODAKK21zZ2lkICIiCisiXG4iCisiRW1lcmdlbmN5IGhlbHA6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyByZXBhaXIgKG5vIHF1ZXN0aW9ucylcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTWFrZSBubyBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIEFzc3VtZSBcInllc1wiIHRvIGFsbCBxdWVzdGlvbnNcbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIGJhZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYWRibG9jayAiCisibGlzdFxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3JjZSBjaGVja2luZyBldmVuIGlmIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGNsZWFuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOw6Fwb3bEm2RhIHYgbm91emk6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpY2vDoSBvcHJhdmEgKMW+w6FkbsOpIG90w6F6a3kpXG4iCisiIC1uICAgICAgICAgICAgICAgICAgIE5lcHJvdsOhZMSbdCDFvsOhZG7DqSB6bcSbbnkgc3lzdMOpbXUgc291Ym9yxa9cbiIKKyIgLXkgICAgICAgICAgICAgICAgICAgUMWZZWRwb2tsw6FkYXQg4oCeYW5v4oCcIHXCoHbFoWVjaCBvdMOhemVrXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIEhsZWRhdCDFoXBhdG7DqSBibG9reSBhIHDFmWlkYXQgamUgZG8gc2V6bmFtdSDFoXBhdG7DvWNoICIKKyJibG9rxa9cbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgVnludXRpdCBrb250cm9sdSwgaSBrZHnFviBqZSBzeXN0w6ltIHNvdWJvcsWvIG96bmHEjWVuICIKKyLEjWlzdMO9XG4iCisKKyM6IGUyZnNjay91bml4LmM6ODYKK21zZ2lkICIiCisiIC12ICAgICAgICAgICAgICAgICAgIEJlIHZlcmJvc2VcbiIKKyIgLWIgc3VwZXJibG9jayAgICAgICAgVXNlIGFsdGVybmF0aXZlIHN1cGVyYmxvY2tcbiIKKyIgLUIgYmxvY2tzaXplICAgICAgICAgRm9yY2UgYmxvY2tzaXplIHdoZW4gbG9va2luZyBmb3Igc3VwZXJibG9ja1xuIgorIiAtaiBleHRlcm5hbF9qb3VybmFsICBTZXQgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGpvdXJuYWxcbiIKKyIgLWwgYmFkX2Jsb2Nrc19maWxlICAgQWRkIHRvIGJhZGJsb2NrcyBsaXN0XG4iCisiIC1MIGJhZF9ibG9ja3NfZmlsZSAgIFNldCBiYWRibG9ja3MgbGlzdFxuIgorbXNnc3RyICIiCisiIC12ICAgICAgICAgICAgICAgICAgIELDvXQgcG9kcm9ibsO9XG4iCisiIC1iIHN1cGVyYmxvayAgICAgICAgIFBvdcW+w610IGFsdGVybmF0aXZuw60gc3VwZXJibG9rXG4iCisiIC1CIHZlbGlrb3N0X2Jsb2t1ICAgIFZudXRpdCB2ZWxpa29zdCBibG9rdSBwxZlpIGhsZWTDoW7DrSBzdXBlcmJsb2t1XG4iCisiIC1qIGV4dGVybsOtX8W+dXJuw6FsICAgIE5hc3Rhdml0IHVtw61zdMSbbsOtIGV4dGVybsOtaG8gxb51cm7DoWx1XG4iCisiIC1sIHNvdWJvcl/FoXBhdG7DvWNoX2Jsb2vFr1xuIgorIiAgICAgICAgICAgICAgICAgICAgICBQxZlpZGF0IGRvIHNlem5hbXUgxaFwYXRuw71jaCBibG9rxa9cbiIKKyIgLUwgc291Ym9yX8WhcGF0bsO9Y2hfYmxva8WvXG4iCisiICAgICAgICAgICAgICAgICAgICAgIE5hc3Rhdml0IHNlem5hbSDFoXBhdG7DvWNoIGJsb2vFr1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXUvJXUgZmlsZXMgKCUwZC4lZCUlIG5vbi1jb250aWd1b3VzKSwgJWxsdS8lbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIlczogJSd1LyUndSBzb3Vib3LFryAoJTBkLCVkICUlIG5lc291dmlzbMO9Y2gpLCAlJ2xsdS8lJ2xsdSBibG9rxa9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSBpbm9kZXMgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJTEydSBwb3XFvml0w70gaXV6ZWwgKCUyLjJm4oCvJSUgesKgJXUpXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IHBvdcW+aXTDqSBpdXpseSAoJTIuMmbigK8lJcKgesKgJXUpXG4iCittc2dzdHJbMl0gIiIKKyJcbiIKKyIlMTJ1IHBvdcW+aXTDvWNoIGl1emzFryAoJTIuMmbigK8lJSB6wqAldSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBmaWxlICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBmaWxlcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiUxMnUgbmVzb3V2aXNsw70gc291Ym9yICglMGQsJWTigK8lJSlcbiIKK21zZ3N0clsxXSAiJTEydSBuZXNvdXZpc2zDqSBzb3Vib3J5ICglMGQsJWTigK8lJSlcbiIKK21zZ3N0clsyXSAiJTEydSBuZXNvdXZpc2zDvWNoIHNvdWJvcsWvICglMGQsJWTigK8lJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcnkgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yaWVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiJTEydSBuZXNvdXZpc2zDvSBhZHJlc8OhxZkgKCUwZCwlZOKAryUlKVxuIgorbXNnc3RyWzFdICIlMTJ1IG5lc291dmlzbMOpIGFkcmVzw6HFmWUgKCUwZCwlZOKAryUlKVxuIgorbXNnc3RyWzJdICIlMTJ1IG5lc291dmlzbMO9Y2ggYWRyZXPDocWZxa8gKCUwZCwlZOKAryUlKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgICAgICAgIyBvZiBpbm9kZXMgd2l0aCBpbmQvZGluZC90aW5kIGJsb2NrczogJXUvJXUvJXVcbiIKK21zZ3N0ciAiICAgICAgICAgICAgIFBvxI1ldCBpdXpsxa8gc8KgaW5kL2RpbmQvdGluZCBibG9reTogJSd1LyUndS8lJ3VcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzkKK21zZ2lkICIgICAgICAgICAgICAgRXh0ZW50IGRlcHRoIGhpc3RvZ3JhbTogIgorbXNnc3RyICIgICAgICAgICAgICAgSGlzdG9ncmFtIGhsb3Via3kgcm96c2FodTogIgorCisjOiBlMmZzY2svdW5peC5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJsbHUgYmxvY2sgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dpZF9wbHVyYWwgIiUxMmxsdSBibG9ja3MgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dzdHJbMF0gIiUxMmxsdSBwb3XFvml0w70gYmxvayAoJTIuMmbigK8lJSB6wqAlbGx1KVxuIgorbXNnc3RyWzFdICIlMTJsbHUgcG91xb5pdMOpIGJsb2t5ICglMi4yZuKAryUlIHrCoCVsbHUpXG4iCittc2dzdHJbMl0gIiUxMmxsdSBwb3XFvml0w71jaCBibG9rxa8gKCUyLjJm4oCvJSUgesKgJWxsdSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBiYWQgYmxvY2tcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBiYWQgYmxvY2tzXG4iCittc2dzdHJbMF0gIiUxMnUgY2h5Ym7DvSBibG9rXG4iCittc2dzdHJbMV0gIiUxMnUgY2h5Ym7DqSBibG9reVxuIgorbXNnc3RyWzJdICIlMTJ1IGNoeWJuw71jaCBibG9rxa9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsYXJnZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGFyZ2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSB2ZWxrw70gc291Ym9yXG4iCittc2dzdHJbMV0gIiUxMnUgdmVsa8OpIHNvdWJvcnlcbiIKK21zZ3N0clsyXSAiJTEydSB2ZWxrw71jaCBzb3Vib3LFr1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlc1xuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJTEydSBvYnnEjWVqbsO9IHNvdWJvclxuIgorbXNnc3RyWzFdICIiCisiXG4iCisiJTEydSBvYnnEjWVqbsOpIHNvdWJvcnlcbiIKK21zZ3N0clsyXSAiIgorIlxuIgorIiUxMnUgb2J5xI1lam7DvWNoIHNvdWJvcsWvXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZGlyZWN0b3J5XG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZGlyZWN0b3JpZXNcbiIKK21zZ3N0clswXSAiJTEydSBhZHJlc8OhxZlcbiIKK21zZ3N0clsxXSAiJTEydSBhZHJlc8OhxZllXG4iCittc2dzdHJbMl0gIiUxMnUgYWRyZXPDocWZxa9cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgem5ha292w6kgemHFmcOtemVuw61cbiIKK21zZ3N0clsxXSAiJTEydSB6bmFrb3bDoSB6YcWZw616ZW7DrVxuIgorbXNnc3RyWzJdICIlMTJ1IHpuYWtvdsO9Y2ggemHFmcOtemVuw61cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBibG9jayBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IGJsb2tvdsOpIHphxZnDrXplbsOtXG4iCittc2dzdHJbMV0gIiUxMnUgYmxva292w6EgemHFmcOtemVuw61cbiIKK21zZ3N0clsyXSAiJTEydSBibG9rb3bDvWNoIHphxZnDrXplbsOtXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlmb1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpZm9zXG4iCittc2dzdHJbMF0gIiUxMnUgcm91cmFcbiIKK21zZ3N0clsxXSAiJTEydSByb3VyeVxuIgorbXNnc3RyWzJdICIlMTJ1IHJvdXJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsaW5rXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGlua3NcbiIKK21zZ3N0clswXSAiJTEydSBvZGthelxuIgorbXNnc3RyWzFdICIlMTJ1IG9ka2F6eVxuIgorbXNnc3RyWzJdICIlMTJ1IG9ka2F6xa9cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzeW1ib2xpYyBsaW5rIgorbXNnaWRfcGx1cmFsICIlMTJ1IHN5bWJvbGljIGxpbmtzIgorbXNnc3RyWzBdICIlMTJ1IHN5bWJvbGlja8O9IG9ka2F6IgorbXNnc3RyWzFdICIlMTJ1IHN5bWJvbGlja8OpIG9ka2F6eSIKK21zZ3N0clsyXSAiJTEydSBzeW1ib2xpY2vDvWNoIG9ka2F6xa8iCisKKyM6IGUyZnNjay91bml4LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rKVxuIgorbXNnaWRfcGx1cmFsICIgKCV1IGZhc3Qgc3ltYm9saWMgbGlua3MpXG4iCittc2dzdHJbMF0gIigldSByeWNobMO9IHN5bWJvbGlja8O9IG9ka2F6KVxuIgorbXNnc3RyWzFdICIoJXUgcnljaGzDqSBzeW1ib2xpY2vDqSBvZGthenkpXG4iCittc2dzdHJbMl0gIigldSByeWNobMO9Y2ggc3ltYm9saWNrw71jaCBvZGthesWvKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHNvY2tldFxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IHNvY2tldHNcbiIKK21zZ3N0clswXSAiJTEydSBzb2NrZXRcbiIKK21zZ3N0clsxXSAiJTEydSBzb2NrZXR5XG4iCittc2dzdHJbMl0gIiUxMnUgc29ja2V0xa9cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBzb3Vib3JcbiIKK21zZ3N0clsxXSAiJTEydSBzb3Vib3J5XG4iCittc2dzdHJbMl0gIiUxMnUgc291Ym9yxa9cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMzIgbWlzYy9iYWRibG9ja3MuYzo5OTMgbWlzYy90dW5lMmZzLmM6MjEyMiBtaXNjL3V0aWwuYzozMTYKKyM6IHJlc2l6ZS9tYWluLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iCittc2dzdHIgInDFmWkgemppxaHFpW92w6Fuw60sIGplc3RsaSBqZSAlcyBwxZlpcG9qZW4uIgorCisjOiBlMmZzY2svdW5peC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiUG96b3IhICVzIGplIHDFmWlwb2plbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZyEgICVzIGlzIGluIHVzZS5cbiIKK21zZ3N0ciAiUG96b3IhICVzIHNlIHBvdcW+w612w6EuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIiVzIGplIHDFmWlwb2plbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW4gdXNlLlxuIgorbXNnc3RyICIlcyBzZSBwb3XFvsOtdsOhLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2NgorbXNnaWQgIiIKKyJDYW5ub3QgY29udGludWUsIGFib3J0aW5nLlxuIgorIlxuIgorbXNnc3RyICIiCisiTmVtb2h1IHBva3JhxI1vdmF0LCBrb27EjcOtbS5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjgKK21zZ2lkICIiCisiXG4iCisiXG4iCisiV0FSTklORyEhISAgVGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4gICBJZiB5b3UgY29udGludWUgeW91ICoqKldJTEwqKipcbiIKKyJjYXVzZSAqKipTRVZFUkUqKiogZmlsZXN5c3RlbSBkYW1hZ2UuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJQT1pPUiEhISBTb3Vib3JvdsO9IHN5c3TDqW0gamUgcMWZaXBvamVuLiBCdWRldGUtbGkgcG9rcmHEjW92YXQsXG4iCisiKioqWlDFrlNPQsONVEUgVsOBxb1Ow4kqKiogcG/FoWtvemVuw60gc3lzdMOpbXUgc291Ym9yxa8uXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjczCittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIGNvbnRpbnVlIgorbXNnc3RyICJDaGNldGUgb3ByYXZkdSBwb2tyYcSNb3ZhdCIKKworIzogZTJmc2NrL3VuaXguYzoyNzUKK21zZ2lkICJjaGVjayBhYm9ydGVkLlxuIgorbXNnc3RyICJrb250cm9sYSBwxZllcnXFoWVuYS5cbiIKKworIzogZTJmc2NrL3VuaXguYzozNjgKK21zZ2lkICIgY29udGFpbnMgYSBmaWxlIHN5c3RlbSB3aXRoIGVycm9ycyIKK21zZ3N0ciAiIG9ic2FodWplIHN5c3TDqW0gc291Ym9yxa8gcyBjaHliYW1pIgorCisjOiBlMmZzY2svdW5peC5jOjM3MAorbXNnaWQgIiB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkIgorbXNnc3RyICIgbmVieWwgxI1pc3TEmyBvZHBvamVuIgorCisjOiBlMmZzY2svdW5peC5jOjM3MgorbXNnaWQgIiBwcmltYXJ5IHN1cGVyYmxvY2sgZmVhdHVyZXMgZGlmZmVyZW50IGZyb20gYmFja3VwIgorbXNnc3RyICIgdmxhc3Rub3N0aSBwcmltw6FybsOtaG8gc3VwZXJibG9rdSBzZSBsacWhw60gb2QgesOhbG/Fvm7DrWhvIgorCisjOiBlMmZzY2svdW5peC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGJlZW4gbW91bnRlZCAldSB0aW1lcyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiBieWwgcMWZaXBvamVuICV1a3LDoXQgYmV6IGtvbnRyb2x5IgorCisjOiBlMmZzY2svdW5peC5jOjM4MworbXNnaWQgIiBoYXMgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdGltZSBpbiB0aGUgZnV0dXJlIgorbXNnc3RyICIgbcOhIMSNYXMgcG9zbGVkbsOtIGtvbnRyb2x5IHN5c3TDqW11IHNvdWJvcsWvIHbCoGJ1ZG91Y25vc3RpIgorCisjOiBlMmZzY2svdW5peC5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGdvbmUgJXUgZGF5cyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiBuZWJ5bCBrb250cm9sb3bDoW4gJXUgZG7DrSIKKworIzogZTJmc2NrL3VuaXguYzozOTgKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiLCBrb250cm9sYSB2eW51Y2VuYS5cbiIKKworIzogZTJmc2NrL3VuaXguYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuLCAldS8ldSBmaWxlcywgJWxsdS8lbGx1IGJsb2NrcyIKK21zZ3N0ciAiJXM6IMSNaXN0w70sICUndS8lJ3Ugc291Ym9yxa8sICUnbGx1LyUnbGx1IGJsb2vFryIKKworIzogZTJmc2NrL3VuaXguYzo0NTEKK21zZ2lkICIgKGNoZWNrIGRlZmVycmVkOyBvbiBiYXR0ZXJ5KSIKK21zZ3N0ciAiIChrb250cm9sYSBvZGxvxb5lbmEsIGLEm8W+w61tIG5hwqBiYXRlcmlpKSIKKworIzogZTJmc2NrL3VuaXguYzo0NTQKK21zZ2lkICIgKGNoZWNrIGFmdGVyIG5leHQgbW91bnQpIgorbXNnc3RyICIgKGtvbnRyb2xhIHBvIHDFmcOtxaF0w61tIHDFmWlwb2plbsOtKSIKKworIzogZTJmc2NrL3VuaXguYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChjaGVjayBpbiAlbGQgbW91bnRzKSIKK21zZ3N0ciAiIChrb250cm9sYSB6YSAlbGQgcMWZaXBvamVuw60pIgorCisjOiBlMmZzY2svdW5peC5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogQ291bGRuJ3Qgb3BlbiAvZGV2L251bGwgKCVzKVxuIgorbXNnc3RyICJDSFlCQTogTmVtb2h1IG90ZXbFmcOtdCAvZGV2L251bGwgKCVzKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjY3NQorbXNnaWQgIkludmFsaWQgRUEgdmVyc2lvbi5cbiIKK21zZ3N0ciAiTmVwbGF0bsOhIHZlcnplIEVBLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGV4dGVuZGVkIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAiTmV6bsOhbcO9IHJvesWhw63FmWVuw70gcMWZZXDDrW5hxI06ICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6NzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gZTJmc2NrIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisiU3ludGFrdGlja8OhIGNoeWJhIHbCoGtvbmZpZ3VyYcSNbsOtbSBzb3Vib3J1IGUyZnNjayAoJXMsIMWZw6FkZWsgxI0uwqAlZClcbiIKKyJcdCVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6Nzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHZhbGlkYXRpbmcgZmlsZSBkZXNjcmlwdG9yICVkOiAlc1xuIgorbXNnc3RyICJDaHliYSBwxZlpIG92xJvFmW92w6Fuw60gcGxhdG5vc3RpIGRlc2tyaXB0b3J1IHNvdWJvcnUgJWQ6ICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODAxCittc2dpZCAiSW52YWxpZCBjb21wbGV0aW9uIGluZm9ybWF0aW9uIGZpbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAiTmVwbGF0bsO9IGRlc2tyaXB0b3Igc291Ym9yxa8gaW5mb3JtYWNlIG8gZG9rb27EjWVuw60iCisKKyM6IGUyZnNjay91bml4LmM6ODE2Cittc2dpZCAiT25seSBvbmUgb2YgdGhlIG9wdGlvbnMgLXAvLWEsIC1uIG9yIC15IG1heSBiZSBzcGVjaWZpZWQuIgorbXNnc3RyICJNxa/FvmUgYsO9dCB6YWTDoW4gamVuIGplZGVuIHrCoHDFmWVww61uYcSNxa8gLXAvLWEsIC1uIG5lYm8gLXkuIgorCisjOiBlMmZzY2svdW5peC5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgLXQgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKK21zZ3N0ciAiUMWZZXDDrW5hxI0gLXQgbmVuw60gdiB0w6l0byB2ZXJ6aSBlMmZzY2sgcG9kcG9yb3bDoW4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODY4IGUyZnNjay91bml4LmM6OTQyIG1pc2MvdHVuZTJmcy5jOjg3OSBtaXNjL3R1bmUyZnMuYzoxMTc0CisjOiBtaXNjL3R1bmUyZnMuYzoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZXNvbHZlICclcyciCittc2dzdHIgIk5lbHplIHZ5xZllxaFpdCDigJ4lc+KAnCIKKworIzogZTJmc2NrL3VuaXguYzo5MjEKK21zZ2lkICJUaGUgLW4gYW5kIC1EIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIlDFmWVww61uYcSNZSAtbiBhIC1EIHNlIHZ6w6FqZW1uxJsgdnlsdcSNdWrDrS4iCisKKyM6IGUyZnNjay91bml4LmM6OTI2Cittc2dpZCAiVGhlIC1uIGFuZCAtYyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJQxZllcMOtbmHEjWUgLW4gYSAtYyBzZSB2esOhamVtbsSbIHZ5bHXEjXVqw60uIgorCisjOiBlMmZzY2svdW5peC5jOjkzMQorbXNnaWQgIlRoZSAtbiBhbmQgLWwvLUwgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiUMWZZXDDrW5hxI1lIC1uIGEgLWwvLUwgc2UgdnrDoWplbW7EmyB2eWx1xI11asOtLiIKKworIzogZTJmc2NrL3VuaXguYzo5ODUKK21zZ2lkICJUaGUgLWMgYW5kIHRoZSAtbC8tTCBvcHRpb25zIG1heSBub3QgYmUgYm90aCB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuXG4iCittc2dzdHIgIlDFmWVww61uYcSNZSAtYyBhIC1sLy1MIG5lbW9ob3UgYsO9dCBwb3XFvml0eSB6w6Fyb3ZlxYguXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTAzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTJGU0NLX0pCRF9ERUJVRyBcIiVzXCIgbm90IGFuIGludGVnZXJcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkUyRlNDS19KQkRfREVCVUcg4oCeJXPigJwgbmVuw60gY2Vsw71tIMSNw61zbGVtXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTA0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSW52YWxpZCBub24tbnVtZXJpYyBhcmd1bWVudCB0byAtJWMgKFwiJXNcIilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5lcGxhdG7DvSBuZcSNw61zZWxuw70gYXJndW1lbnQgdcKgLSVjICjigJ4lc+KAnClcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNTVAgaW50ZXJ2YWwgaXMgJXUgc2Vjb25kcyBhbmQgdG90YWwgd2FpdCB0aW1lIGlzICV1IHNlY29uZHMuIFBsZWFzZSAiCisid2FpdC4uLlxuIgorbXNnc3RyICIiCisiSW50ZXJ2YWwgTU1QIGplICV1IHNla3VuZCBhIGNlbGtvdsOhIGRvYmEgxI1la8OhbsOtIGplICV1IHNla3VuZC4gUHJvc8OtbSAiCisib8Kgc3RycGVuw63igKZcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMTQ5IGUyZnNjay91bml4LmM6MTE1NAorbXNnaWQgIndoaWxlIGNoZWNraW5nIE1NUCBibG9jayIKK21zZ3N0ciAicMWZaSBrb250cm9sZSBibG9rdSBNTVAiCisKKyM6IGUyZnNjay91bml4LmM6MTE1NiBtaXNjL3R1bmUyZnMuYzoyMDQ5Cittc2dpZCAiIgorIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSBpcyBub3QgaW4gdXNlIG9uIGFueSBub2RlLCBydW46XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V9J1xuIgorbXNnc3RyICIiCisiSnN0ZS1saSBzaSBqaXN0aSwgxb5lIHNvdWJvcm92w70gc3lzdMOpbSBuZW7DrSBwb3XFvsOtdsOhbiBuYSDFvsOhZG7DqW0gdXpsdSwgIgorInNwdXPFpXRlOlxuIgorIuKAnnR1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIFpBxZjDjVpFTsON4oCcXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTIwNworbXNnaWQgIkVycm9yOiBleHQyZnMgbGlicmFyeSB2ZXJzaW9uIG91dCBvZiBkYXRlIVxuIgorbXNnc3RyICJDaHliYTogc3RhcsOhIHZlcnplIGtuaWhvdm55IGV4dDJmcyFcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjE0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGluaXRpYWxpemUgcHJvZ3JhbSIKK21zZ3N0ciAicMWZaSBwb2t1c3UgaW5pY2lhbGl6b3ZhdCBwcm9ncmFtIgorCisjOiBlMmZzY2svdW5peC5jOjEyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlcywgJXNcbiIKK21zZ3N0ciAiXHRQb3XFvsOtdsOhbSAlcywgJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjQ5Cittc2dpZCAibmVlZCB0ZXJtaW5hbCBmb3IgaW50ZXJhY3RpdmUgcmVwYWlycyIKK21zZ3N0ciAicHJvIGludGVyYWt0aXZuw60gb3ByYXZ5IHBvdMWZZWJ1amkgdGVybWluw6FsIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uXG4iCittc2dzdHIgIiVzOiAlcyB6a291xaHDrW0gesOhbG/Fvm7DrSBibG9reeKAplxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDUKK21zZ2lkICJTdXBlcmJsb2NrIGludmFsaWQsIgorbXNnc3RyICJOZXBsYXRuw70gc3VwZXJibG9rLCIKKworIzogZTJmc2NrL3VuaXguYzoxMzA2Cittc2dpZCAiR3JvdXAgZGVzY3JpcHRvcnMgbG9vayBiYWQuLi4iCittc2dzdHIgIkRlc2tyaXB0b3J5IHNrdXBpbiB2eXBhZGFqw60gxaFwYXRuxJvigKYiCisKKyM6IGUyZnNjay91bml4LmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgdXNpbmcgdGhlIGJhY2t1cCBibG9ja3MiCittc2dzdHIgIiVzOiAlcyBwxZlpIHBvdcW+aXTDrSB6w6Fsb8W+bsOtY2ggYmxva8WvIgorCisjOiBlMmZzY2svdW5peC5jOjEzMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGdvaW5nIGJhY2sgdG8gb3JpZ2luYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICIlczogbsOhdnJhdCBrwqBwxa92b2Ruw61tdSBzdXBlcmJsb2t1XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM0OQorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSByZXZpc2lvbiBpcyBhcHBhcmVudGx5IHRvbyBoaWdoIGZvciB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorIihPciB0aGUgZmlsZXN5c3RlbSBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQpXG4iCisiXG4iCittc2dzdHIgIiIKKyJSZXZpemUgc3lzdMOpbXUgc291Ym9yxa8gamUgesWZZWptxJsgcMWZw61sacWhIHZ5c29rw6EgcHJvIHR1dG8gdmVyemkgZTJmc2NrLlxuIgorIihOZWJvIGplIHN1cGVyYmxvayBzeXN0w6ltdSBzb3Vib3LFryBwb8Wha296ZW4pXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1NgorbXNnaWQgIkNvdWxkIHRoaXMgYmUgYSB6ZXJvLWxlbmd0aCBwYXJ0aXRpb24/XG4iCittc2dzdHIgIk1vaGwgYnkgdG90byBiw710IG9kZMOtbCBudWxvdsOpIGTDqWxreT9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBtdXN0IGhhdmUgJXMgYWNjZXNzIHRvIHRoZSBmaWxlc3lzdGVtIG9yIGJlIHJvb3RcbiIKK21zZ3N0ciAiTXVzw610ZSBtw610IHDFmcOtc3R1cCAlcyBrIHN5c3TDqW11IHNvdWJvcsWvIG5lYm8gYsO9dCByb290XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM2NAorbXNnaWQgIlBvc3NpYmx5IG5vbi1leGlzdGVudCBvciBzd2FwIGRldmljZT9cbiIKK21zZ3N0ciAiUHJhdmTEm3BvZG9ibsSbIG5lZXhpc3R1asOtY8OtIG5lYm8gb2RrbMOhZGFjw60gemHFmcOtemVuw60/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM2NgorbXNnaWQgIkZpbGVzeXN0ZW0gbW91bnRlZCBvciBvcGVuZWQgZXhjbHVzaXZlbHkgYnkgYW5vdGhlciBwcm9ncmFtP1xuIgorbXNnc3RyICJTeXN0w6ltIHNvdWJvcsWvIHDFmWlwb2plbiBuZWJvIG90ZXbFmWVuIHbDvWx1xI1uxJsgamluw71tIHByb2dyYW1lbT9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzcwCittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IGRldmljZT9cbiIKK21zZ3N0ciAiUHJhdmTEm3BvZG9ibsSbIG5lZXhpc3R1asOtY8OtIHphxZnDrXplbsOtP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNzMKK21zZ2lkICIiCisiRGlzayB3cml0ZS1wcm90ZWN0ZWQ7IHVzZSB0aGUgLW4gb3B0aW9uIHRvIGRvIGEgcmVhZC1vbmx5XG4iCisiY2hlY2sgb2YgdGhlIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIkRpc2sgY2hyw6FuxJtuIHByb3RpIHrDoXBpc3U7IHBvdcW+aWp0ZSBwxZllcMOtbmHEjSAtbiBwcm8gcHJvdmVkZW7DrVxuIgorImtvbnRyb2x5IHphxZnDrXplbsOtIGplbiBwcm8gxI10ZW7DrS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDM3Cittc2dpZCAiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIgorbXNnc3RyICJTZcW+ZcWIdGUgbm92xJtqxaHDrSB2ZXJ6aSBlMmZzY2shIgorCisjOiBlMmZzY2svdW5peC5jOjE0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgZXh0MyBqb3VybmFsIGZvciAlcyIKK21zZ3N0ciAicMWZaSBrb250cm9sZSDFvnVybsOhbHUgZXh0MyBwcm8gJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTQ5MgorbXNnaWQgIiIKKyJXYXJuaW5nOiBza2lwcGluZyBqb3VybmFsIHJlY292ZXJ5IGJlY2F1c2UgZG9pbmcgYSByZWFkLW9ubHkgZmlsZXN5c3RlbSAiCisiY2hlY2suXG4iCittc2dzdHIgIiIKKyJWYXJvdsOhbsOtOiBwxZllc2tha3VqaSBvYm5vdnUgxb51cm7DoWx1LCBwcm90b8W+ZSBwcm92w6Fkw61tIGtvbnRyb2x1IHN5c3TDqW11XG4iCisic291Ym9yxa8gamVuIHBybyDEjXRlbsOtLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBzdXBlcmJsb2NrIGZsYWdzIG9uICVzXG4iCittc2dzdHIgIm5lbW9odSBuYXN0YXZpdCBwxZnDrXpuYWt5IHN1cGVyYmxva3UgbmEgJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTExCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlY292ZXJpbmcgZXh0MyBqb3VybmFsIG9mICVzIgorbXNnc3RyICJwxZlpIG9ibm92xJsgxb51cm7DoWx1IGV4dDMgJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTUzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKToiCittc2dzdHIgIiVzIG3DoSBuZXBvZHBvcm92YW5vdSB2bGFzdG5vc3QoaSk6IgorCisjOiBlMmZzY2svdW5peC5jOjE1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhcm5pbmc6IGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorbXNnc3RyICIlczogcG96b3I6IHBvZHBvcmEga29tcHJlc2UgamUgZXhwZXJpbWVudMOhbG7DrS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogZTJmc2NrIG5vdCBjb21waWxlZCB3aXRoIEhUUkVFIHN1cHBvcnQsXG4iCisiXHRidXQgZmlsZXN5c3RlbSAlcyBoYXMgSFRSRUUgZGlyZWN0b3JpZXMuXG4iCittc2dzdHIgIiIKKyIlczogRTJmc2NrIG5lcMWZZWxvxb5lbiBzIHBvZHBvcm91IEhUUkVFLFxuIgorIlx0YWxlIHN5c3TDqW0gc291Ym9yxa8gJXMgbcOhIGFkcmVzw6HFmWUgSFRSRUUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgcmVhZGluZyBiYWQgYmxvY2tzIGlub2RlXG4iCittc2dzdHIgIiVzOiAlcyBwxZlpIMSNdGVuw60gaXV6bHUgxaFwYXRuw71jaCBibG9rxa9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjEwCittc2dpZCAiVGhpcyBkb2Vzbid0IGJvZGUgd2VsbCwgYnV0IHdlJ2xsIHRyeSB0byBnbyBvbi4uLlxuIgorbXNnc3RyICJUb3RvIG5ldnlwYWTDoSBkb2LFmWUsIGFsZSB6a3Vzw61tZSBwb2tyYcSNb3ZhdOKAplxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJWQgYmxvY2tzKTogIgorbXNnc3RyICJWeXR2w6HFmcOtIHNlIMW+dXJuw6FsICglZCBibG9rxa8pOiAiCisKKyM6IGUyZnNjay91bml4LmM6MTY2MgorbXNnaWQgIiBEb25lLlxuIgorbXNnc3RyICIgSG90b3ZvLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NjQKK21zZ2lkICIiCisiXG4iCisiKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqKiogxb51cm7DoWwgYnkgem5vdnUgdnl0dm/FmWVuwqDigJMgc291Ym9yb3bDvSBzeXN0w6ltIHNlIG9wxJt0IHN0YWwgZXh0MyAqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjg4Cittc2dpZCAiUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uXG4iCittc2dzdHIgIlNwb3XFoXTDrW0gZTJmc2NrIG9kIHphxI3DoXRrdeKAplxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2OTIKK21zZ2lkICJ3aGlsZSByZXNldHRpbmcgY29udGV4dCIKK21zZ3N0ciAicMWZaSBudWxvdsOhbsOtIGtvbnRleHR1IgorCisjOiBlMmZzY2svdW5peC5jOjE2OTkKK21zZ2lkICJhYm9ydGVkIgorbXNnc3RyICJwxZllcnXFoWVuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGUyZnNjayBjYW5jZWxlZC5cbiIKK21zZ3N0ciAiJXM6IGUyZnNjayBwxZllcnXFoWVuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NDEgZTJmc2NrL3V0aWwuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqIFNZU1TDiU0gU09VQk9Sxa4gQllMIFpNxJpOxJpOICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiVzOiAqKioqKiBaTk9WVSBaQVZFxI5URSBMSU5VWCAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NTMgZTJmc2NrL3V0aWwuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogV0FSTklORzogRmlsZXN5c3RlbSBzdGlsbCBoYXMgZXJyb3JzICoqKioqKioqKipcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIFZBUk9Ww4FOw406IFN5c3TDqW0gc291Ym9yxa8gbcOhIHN0w6FsZSBjaHlieSAqKioqKioqKioqXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MTkwIG1pc2MvdXRpbC5jOjg2Cittc2dpZCAieVkiCittc2dzdHIgImFBIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MQorbXNnaWQgIm5OIgorbXNnc3RyICJuTiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDUKK21zZ2lkICI8eT4iCittc2dzdHIgIjxhPiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDcKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDkKK21zZ2lkICIgKHkvbikiCittc2dzdHIgIiAoYS9uKSIKKworIzogZTJmc2NrL3V0aWwuYzoyMjMKK21zZ2lkICJjYW5jZWxsZWQhXG4iCittc2dzdHIgInDFmWVydcWhZW5vIVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjIzOAorbXNnaWQgInllc1xuIgorbXNnc3RyICJhbm9cbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNDAKK21zZ2lkICJub1xuIgorbXNnc3RyICJuZVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IG5vXG4iCisiXG4iCittc2dzdHIgIiIKKyIlcz8gbmVcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyB5ZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyBhbm9cbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTgKK21zZ2lkICJ5ZXMiCittc2dzdHIgImFubyIKKworIzogZTJmc2NrL3V0aWwuYzoyNTgKK21zZ2lkICJubyIKK21zZ3N0ciAibmUiCisKKyM6IGUyZnNjay91dGlsLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgImUyZnNja19yZWFkX2JpdG1hcHM6IGlsbGVnYWwgYml0bWFwIGJsb2NrKHMpIGZvciAlcyIKK21zZ3N0ciAiZTJmc2NrX3JlYWRfYml0bWFwczogbmVwbGF0bsO9IGJsb2soeSkgYml0bWFweSBwcm8gJXMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjc4Cittc2dpZCAicmVhZGluZyBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcyIKK21zZ3N0ciAixI10ZW7DrSBiaXRtYXAgaXV6bMWvIGEgYmxva8WvIgorCisjOiBlMmZzY2svdXRpbC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXRyeWluZyB0byByZWFkIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJwxZlpIG9wYWtvdmFuw6ltIHBva3VzdSBuYcSNw61zdCBiaXRtYXB5IHBybyAlcyIKKworIzogZTJmc2NrL3V0aWwuYzoyOTgKK21zZ2lkICJ3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIgorbXNnc3RyICJ6w6FwaXN1IGJpdG1hcCBibG9rxa8gYSBpdXpsxa8iCisKKyM6IGUyZnNjay91dGlsLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJld3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgInDFmWkgcMWZZXBpc3UgYml0bWFwIGJsb2vFryBhIGl1emzFryBwcm8gJXMiCisKKyM6IGUyZnNjay91dGlsLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyIlczogVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOyBSVU4gZnNjayBNQU5VQUxMWS5cbiIKKyJcdChpLmUuLCB3aXRob3V0IC1hIG9yIC1wIG9wdGlvbnMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyIlczogTkVPxIxFS8OBVkFOw4EgTkVLT05aSVNURU5DRTsgU1BVU8WkVEUgZnNjayBSVcSMTsSaLlxuIgorIlx0KHRqLiBiZXogcMWZZXDDrW5hxI3FryAtYSBuZWJvIC1wKVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCittc2dzdHIgIlBvdcW+aXTDoSBwYW3Em8WlOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKKworIzogZTJmc2NrL3V0aWwuYzo0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdSwgIgorbXNnc3RyICJQb3XFvml0w6EgcGFtxJvFpTogJWx1LCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWU6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCittc2dzdHIgIsSNYXM6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVsYXBzZWQgdGltZTogJTYuM2ZcbiIKK21zZ3N0ciAic3Ryw6F2ZW7DvSDEjWFzOiAlNi4zZlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjQ0NyBlMmZzY2svdXRpbC5jOjQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAicMWZaSDEjXRlbsOtIGl1emx1ICVsdSB2wqAlcyIKKworIzogZTJmc2NrL3V0aWwuYzo0NzUgZTJmc2NrL3V0aWwuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgInDFmWkgesOhcGlzdSBpdXpsdSAlbHUgdsKgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6NjM3Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyB6ZXJvaXppbmcgYnVmZmVyIgorbXNnc3RyICJQxZlpIGFsb2thY2kgbnVsb3ZhY8OtIHZ5cm92bsOhdmFjw60gcGFtxJt0aSIKKworIzogZTJmc2NrL3V0aWwuYzo3ODUKK21zZ2lkICIiCisiVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb2RpZmllZCB3aGlsZSBmc2NrIGlzICIKKyJydW5uaW5nLlxuIgorbXNnc3RyICIiCisiTkXEjEVLQU7DgSBORUtPTlpJU1RFTkNFOiBzb3Vib3JvdsO9IHN5c3TDqW0gamUgbcSbbsSbbiwgemF0w61tY28gZnNjayBixJvFvsOtLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjcyCittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiaG90b3ZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYiBibG9ja19zaXplXSBbLWkgaW5wdXRfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxvY2tzX2F0X29uY2VdIFstZCBkZWxheV9mYWN0b3JfYmV0d2Vlbl9yZWFkc10gWy1lICIKKyJtYXhfYmFkX2Jsb2Nrc11cbiIKKyIgICAgICAgWy1wIG51bV9wYXNzZXNdIFstdCB0ZXN0X3BhdHRlcm4gWy10IHRlc3RfcGF0dGVybiBbLi4uXV1dXG4iCisiICAgICAgIGRldmljZSBbbGFzdF9ibG9jayBbZmlyc3RfYmxvY2tdXVxuIgorbXNnc3RyICIiCisiUG91xb5pdMOtOiAlcyBbLWIgdmVsaWtvc3RfYmxva3VdIFstaSB2c3R1cG7DrV9zb3Vib3JdIFstbyB2w71zdHVwbsOtX3NvdWJvcl1cbiIKKyIgICBbLXN2d25mXSBbLWMgYmxva8WvX25hamVkbm91XSBbLWQgxI1pbml0ZWxfenBvxb5kxJtuw61fbWV6aV/EjXRlbsOtbWldXG4iCisiICAgWy1lIG1heF/FoXBhdG7DvWNoX2Jsb2vFr10gWy1wIHBvxI1ldF9wcsWvY2hvZMWvXVxuIgorIiAgIFstdCB6a3XFoWVibsOtX3Z6b3JlayBbLXQgemt1xaFlYm7DrV92em9yZWsgW+KApl1dXVxuIgorIiAgIHphxZnDrXplbsOtIFtwb3NsZWRuw61fYmxvayBbcHJ2bsOtX2Jsb2tdXVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSAtbiBhbmQgLXcgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIgorIlxuIgorbXNnc3RyICIiCisiJXM6IFDFmWVww61uYcSNZSDigJ4tbuKAnCBhIOKAni134oCcIHNlIHZ6w6FqZW1uxJsgdnlsdcSNdWrDrS5cbiIKKyJcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTYuMmYlJSBkb25lLCAlcyBlbGFwc2VkLiAoJWQvJWQvJWQgZXJyb3JzKSIKK21zZ3N0ciAiJTYuMmbigK8lJSBob3Rvdm8sICVzIHVwbHludWxvLiAoJWQvJWQvJWQgY2h5YikiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzI4Cittc2dpZCAiVGVzdGluZyB3aXRoIHJhbmRvbSBwYXR0ZXJuOiAiCittc2dzdHIgIlprb3XFocOtbSBzwqBuw6Fob2Ruw71tIHZ6b3JrZW06ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNDYKK21zZ2lkICJUZXN0aW5nIHdpdGggcGF0dGVybiAweCIKK21zZ3N0ciAiWmtvdcWhw61tIHNlIHZ6b3JrZW0gMHgiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Mzc4IG1pc2MvYmFkYmxvY2tzLmM6NDUxCittc2dpZCAiZHVyaW5nIHNlZWsiCittc2dzdHIgInDFmWkgcG9zdW51IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJXZWlyZCB2YWx1ZSAoJWxkKSBpbiBkb19yZWFkXG4iCittc2dzdHIgIkRpdm7DoSBob2Rub3RhICglbGQpIHYgZG9fcmVhZFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ3NgorbXNnaWQgImR1cmluZyBleHQyZnNfc3luY19kZXZpY2UiCittc2dzdHIgInDFmWkgZXh0MmZzX3N5bmNfZGV2aWNlIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ5NiBtaXNjL2JhZGJsb2Nrcy5jOjc1OAorbXNnaWQgIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iCittc2dzdHIgInDFmWkgemHEjcOhdGt1IGl0ZXJhY2UgdiBzZXpuYW11IMWhcGF0bsO9Y2ggYmxva8WvIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxMSBtaXNjL2JhZGJsb2Nrcy5jOjYxMSBtaXNjL2JhZGJsb2Nrcy5jOjc2OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVycyIKK21zZ3N0ciAicMWZaSBhbG9rYWNpIHZ5cm92bsOhdmFjw61jaCBwYW3Em3RpIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBibG9ja3MgJWx1IHRvICVsdVxuIgorbXNnc3RyICJPdsSbxZl1asOtIHNlIGJsb2t5ICVsdSBhxb4gJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTIwCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiSGxlZGFqw60gc2UgxaFwYXRuw6kgYmxva3kgdiByZcW+aW11IGplbiBwcm8gxI10ZW7DrVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyOQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChyZWFkLW9ubHkgdGVzdCk6ICIKK21zZ3N0ciAiSGxlZGFqw60gc2UgxaFwYXRuw6kgYmxva3kgKHRlc3QgamVuIHBybyDEjXRlbsOtKTogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUzNiBtaXNjL2JhZGJsb2Nrcy5jOjY0MyBtaXNjL2JhZGJsb2Nrcy5jOjY4NQorIzogbWlzYy9iYWRibG9ja3MuYzo4MzIKK21zZ2lkICJUb28gbWFueSBiYWQgYmxvY2tzLCBhYm9ydGluZyB0ZXN0XG4iCittc2dzdHIgIlDFmcOtbGnFoSBtbm9obyDFoXBhdG7DvWNoIGJsb2vFrywgcMWZZXJ1xaF1amkgdGVzdFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYxOAorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJIbGVkYWrDrSBzZSDFoXBhdG7DqSBibG9reSB2IHJlxb5pbXUgxI10ZW7DrSBpIHrDoXBpc1xuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYyMCBtaXNjL2JhZGJsb2Nrcy5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tIGJsb2NrICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiT2QgYmxva3UgJWx1IGRvICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY3NQorbXNnaWQgIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIgorbXNnc3RyICLEjHRlbsOtIGEgcG9yb3Zuw6Fuw606ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiBub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIkhsZWRhasOtIHNlIMWhcGF0bsOpIGJsb2t5IHYgbmVkZXN0cnVrdGl2bsOtbSByZcW+aW11IMSNdGVuw60gaSB6w6FwaXNcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODcKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAobm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgdGVzdClcbiIKK21zZ3N0ciAiSGxlZGFqw60gc2UgxaFwYXRuw6kgYmxva3kgKG5lZGVzdHJ1a3Rpdm7DrSB0ZXN0IMSNdGVuw60gaSB6w6FwaXN1KVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc5NAorbXNnaWQgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIgorbXNnc3RyICIiCisiXG4iCisiWmFjaHljZW5vIHDFmWVydcWhZW7DrSwgdWtsw616w60gc2VcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyaW5nIHRlc3QgZGF0YSB3cml0ZSwgYmxvY2sgJWx1IgorbXNnc3RyICJwxZlpIHRlc3RvdmFjw61tIHrDoXBpc3UgZGF0LCBibG9rICVsdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5OTggbWlzYy91dGlsLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQ7ICIKK21zZ3N0ciAiJXMgamUgcMWZaXBvamVuOyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwMAorbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICJiYWRibG9ja3MgcMWZZXN0byB2eW51Y2VuLiBEb3Vmw6FtLCDFvmUgL2V0Yy9tdGFiIGplIG5lc3Byw6F2bsO9LlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDUKK21zZ2lkICJpdCdzIG5vdCBzYWZlIHRvIHJ1biBiYWRibG9ja3MhXG4iCittc2dzdHIgIm5lbsOtIGJlenBlxI1uw6kgc3BvdcWhdMSbdCBiYWRibG9ja3MhXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAxMCBtaXNjL3V0aWwuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYXBwYXJlbnRseSBpbiB1c2UgYnkgdGhlIHN5c3RlbTsgIgorbXNnc3RyICIlcyBqZSB6amV2bsSbIHN5c3TDqW1lbSBwcsOhdsSbIHBvdcW+w612w6FuOyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAxMworbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICJiYWRibG9ja3MgcMWZZXN0byB2eW51Y2VuLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyAtICVzIgorbXNnc3RyICJuZXBsYXRuw70gJXPCoOKAkyAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBiaWcgbWF4IGJhZCBibG9ja3MgY291bnQgJXUgLSBtYXhpbXVtIGlzICV1IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRlc3RfcGF0dGVybiAtICVzIgorbXNnc3RyICJOZW1vaHUgYWxva292YXQgcGFtxJvFpSBwcm8gemt1xaFlYm7DrV92em9yZWvCoOKAkyAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTg0Cittc2dpZCAiTWF4aW11bSBvZiBvbmUgdGVzdF9wYXR0ZXJuIG1heSBiZSBzcGVjaWZpZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIlbCoHJlxb5pbXUgcG91aMOpaG8gxI10ZW7DrSBsemUgemFkYXQgbmVqdsO9xaFlIGplZGVuIHprdcWhZWJuw61fdnpvcmVrIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExOTAKK21zZ2lkICJSYW5kb20gdGVzdF9wYXR0ZXJuIGlzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJWwqByZcW+aW11IHBvdWjDqWhvIMSNdGVuw60gbmVuw60gbsOhaG9kbsO9IHprdcWhZWJuw61fdnpvcmVrIHDFmcOtcHVzdG7DvSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjA0Cittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG1hbnVhbGx5XG4iCittc2dzdHIgIiIKKyJOZW1vaHUgemppc3RpdCB2ZWxpa29zdCB6YcWZw616ZW7DrTsgbXVzw610ZSB2ZWxpa29zdFxuIgorInphZGF0IHJ1xI1uxJtcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjEwCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBkZXZpY2Ugc2l6ZSIKK21zZ3N0ciAicMWZaSBwb2t1c3Ugemppc3RpdCB2ZWxpa29zdCB6YcWZw616ZW7DrSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjE1Cittc2dpZCAibGFzdCBibG9jayIKK21zZ3N0ciAicG9zbGVkbsOtIGJsb2siCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIyMQorbXNnaWQgImZpcnN0IGJsb2NrIgorbXNnc3RyICJwcnZuw60gYmxvayIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnRpbmcgYmxvY2sgKCVsbHUpOiBtdXN0IGJlIGxlc3MgdGhhbiAlbGx1IgorbXNnc3RyICLFoXBhdG7DvSBwb8SNw6F0ZcSNbsOtIGJsb2sgKCVsbHUpOiBtdXPDrSBiw710IG1lbsWhw60gbmXFviAlbGx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBlbmQgYmxvY2sgKCVsbHUpOiBtdXN0IGJlIDMyLWJpdCB2YWx1ZSIKK21zZ3N0ciAixaFwYXRuw70ga29uY292w70gYmxvayAoJWxsdSk6IG11c8OtIHNlIGplZG5hdCBvwqAzMmJpdG92b3UgaG9kbm90dSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjg3Cittc2dpZCAid2hpbGUgY3JlYXRpbmcgaW4tbWVtb3J5IGJhZCBibG9ja3MgbGlzdCIKK21zZ3N0ciAicMWZaSB2eXR2w6HFmWVuw60gc2V6bmFtIMWhcGF0bsO9Y2ggYmxva8WvIHYgcGFtxJt0aSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjk2Cittc2dpZCAiaW5wdXQgZmlsZSAtIGJhZCBmb3JtYXQiCittc2dzdHIgInZzdHVwbsOtIHNvdWJvcsKg4oCTIGNoeWJuw70gZm9ybcOhdCIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzA0IG1pc2MvYmFkYmxvY2tzLmM6MTMxMworbXNnaWQgIndoaWxlIGFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgInDFmWkgcMWZaWTDoXbDoW7DrSBkbyBzZXpuYW11IMWhcGF0bsO9Y2ggYmxva8WvIHYgcGFtxJt0aSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhc3MgY29tcGxldGVkLCAldSBiYWQgYmxvY2tzIGZvdW5kLiAoJWQvJWQvJWQgZXJyb3JzKVxuIgorbXNnc3RyICJQcsWvY2hvZCBkb2tvbsSNZW4sIG5hbGV6ZW5vICV1IMWhcGF0bsO9Y2ggYmxva8WvICglZC8lZC8lZCBjaHliKS5cbiIKKworIzogbWlzYy9jaGF0dHIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmZdIFstKz1hQWNDZERlaWpzU3RUdV0gWy12IHZlcnNpb25dIGZpbGVzLi4uXG4iCittc2dzdHIgIlBvdcW+aXTDrTogJXMgWy1SVmZdIFstKz1hQWNDZERlaWpzU3RUdV0gWy12IHZlcnplXSBzb3Vib3J54oCmXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB2ZXJzaW9uIC0gJXNcbiIKK21zZ3N0ciAixaFwYXRuw6EgdmVyemXCoOKAkyAlc1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwMSBtaXNjL2xzYXR0ci5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc3RhdCAlcyIKK21zZ3N0ciAicMWZaSBwb2t1c3Ugc3RhdCAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAicMWZaSDEjXRlbsOtIHDFmcOtem5ha8WvICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIxMyBtaXNjL2NoYXR0ci5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncyBvZiAlcyBzZXQgYXMgIgorbXNnc3RyICJQxZnDrXpuYWt5ICVzIG5hc3RhdmVueSBuYSAiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgInDFmWkgbmFzdGF2b3bDoW7DrSBwxZnDrXpuYWvFryAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiBvZiAlcyBzZXQgYXMgJWx1XG4iCittc2dzdHIgIlZlcnplICVzIG5hc3RhdmVuYSBuYSAlbHVcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJwxZlpIG5hc3Rhdm92w6Fuw60gdmVyemUgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjY3Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgcGF0aCB2YXJpYWJsZSBpbiBjaGF0dHJfZGlyX3Byb2MiCittc2dzdHIgIk5lbW9odSBhbG9rb3ZhdCBwcm9txJtub3UgcGF0aCB2IGNoYXR0cl9kaXJfcHJvYyIKKworIzogbWlzYy9jaGF0dHIuYzozMDcKK21zZ2lkICI9IGlzIGluY29tcGF0aWJsZSB3aXRoIC0gYW5kICtcbiIKK21zZ3N0ciAiPSBqZSBuZXNsdcSNaXRlbG7DqSBzIC0gYSArXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MzE1Cittc2dpZCAiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iCittc2dzdHIgIk11c8OtdGUgcG91xb7DrXQgJy12JywgPSwgLSBuZWJvICtcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWJmaGl4Vl0gWy1vIHN1cGVyYmxvY2s9PG51bT5dIFstbyBibG9ja3NpemU9PG51bT5dIGRldmljZVxuIgorbXNnc3RyICJQb3XFvml0w606ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz1OXSBbLW8gYmxvY2tzaXplPU5dIHphxZnDrXplbsOtXG4iCisKKyMgVW5pdCBuYW1lIGFmdGVyIG51bWVyaWMgdmFsdWUKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNTkKK21zZ2lkICJibG9ja3MiCittc2dzdHIgImJsb2vFryIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE2OQorbXNnaWQgImNsdXN0ZXJzIgorbXNnc3RyICJjbHVzdGVyxa8iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiR3JvdXAgJWx1OiAoQmxvY2tzICIKK21zZ3N0ciAiU2t1cGluYSAlbHU6IChCbG9reSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDaGVja3N1bSAweCUwNHgiCittc2dzdHIgIiAgS29udHJvbG7DrSBzb3XEjWV0IDB4JTA0eCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKEVYUEVDVEVEIDB4JTA0eCkiCittc2dzdHIgIiAoT8SMRUvDgVbDgU5PIDB4JTA0eCkiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCB1bnVzZWQgaW5vZGVzICV1XG4iCittc2dzdHIgIiwgbmVwb3XFvml0w71jaCBpdXpsxa8gJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICVzIHN1cGVyYmxvY2sgYXQgIgorbXNnc3RyICIgICVzIHN1cGVyYmxvayB2ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNAorbXNnaWQgIlByaW1hcnkiCittc2dzdHIgIlByaW3DoXJuw60iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTQKK21zZ2lkICJCYWNrdXAiCittc2dzdHIgIlrDoWxvxb5uw60iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTgKK21zZ2lkICIsIEdyb3VwIGRlc2NyaXB0b3JzIGF0ICIKK21zZ3N0ciAiLCBEZXNrcmlwdG9yeSBza3VwaW4gdiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjIKK21zZ2lkICIiCisiXG4iCisiICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgUmV6ZXJ2b3ZhbsOpIEdEVCBibG9reSBuYSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjkKK21zZ2lkICIgR3JvdXAgZGVzY3JpcHRvciBhdCAiCittc2dzdHIgIiBEZXNrcmlwdG9yIHNrdXBpbnkgdiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzUKK21zZ2lkICIgIEJsb2NrIGJpdG1hcCBhdCAiCittc2dzdHIgIiAgQml0bWFwYSBibG9rxa8gdiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzkKK21zZ2lkICIsIElub2RlIGJpdG1hcCBhdCAiCittc2dzdHIgIiwgQml0bWFwYSBpdXpsxa8gdiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDMKK21zZ2lkICIiCisiXG4iCisiICBJbm9kZSB0YWJsZSBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgIFRhYnVsa2EgaXV6bMWvIHYgIgorCisjIFRoZSBzZWNvbmQgc3RyaW5nIGlzIGkxOG5lZCBgYmxvY2tzJyBvciBgY2x1c3RlcnMnCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgICV1IGZyZWUgJXMsICV1IGZyZWUgaW5vZGVzLCAldSBkaXJlY3RvcmllcyVzIgorbXNnc3RyICIiCisiXG4iCisiICAldSB2b2xuw71jaCAlcywgJXUgdm9sbsO9Y2ggaXV6bMWvLCAldSBhZHJlc8OhxZnFryVzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgJXUgdW51c2VkIGlub2Rlc1xuIgorbXNnc3RyICIsICV1IG5lcG91xb5pdMO9Y2ggaXV6bMWvXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTkKK21zZ2lkICIgIEZyZWUgYmxvY2tzOiAiCittc2dzdHIgIiAgVm9sbsOpIGJsb2t5OiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNzQKK21zZ2lkICIgIEZyZWUgaW5vZGVzOiAiCittc2dzdHIgIiAgVm9sbsOpIGl1emx5OiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMTAKK21zZ2lkICJ3aGlsZSBwcmludGluZyBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAicMWZaSB0aXNrdSBzZXpuYW11IMWhcGF0bsO9Y2ggYmxva8WvIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9ja3M6ICV1IgorbXNnc3RyICLFoHBhdG7DqSBibG9reTogJXUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNDUgbWlzYy90dW5lMmZzLmM6MzQ3Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJwxZlpIMSNdGVuw60gaXV6bHUgxb51cm7DoWx1IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzUxCittc2dpZCAid2hpbGUgb3BlbmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJwxZlpIG90ZXbDrXLDoW7DrSBpdXpsdSDFvnVybsOhbHUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNTcKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXIgYmxvY2siCittc2dzdHIgInDFmWkgxI10ZW7DrSBzdXBlcmJsb2t1IMW+dXJuw6FsdSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2NAorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXIgaW52YWxpZCFcbiIKK21zZ3N0ciAiTWFnaWNrw6kgxI3DrXNsbyBzdXBlcmJsb2t1IMW+dXJuw6FsdSBqZSDFoXBhdG7EmyFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2NworbXNnaWQgIkpvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAiCittc2dzdHIgIlZsYXN0bm9zdGkgxb51cm7DoWx1OiAgICAgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM4MAorbXNnaWQgIkpvdXJuYWwgc2l6ZTogICAgICAgICAgICAgIgorbXNnc3RyICJWZWxpa29zdCDFvnVybsOhbHU6ICAgICAgICAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCittc2dzdHIgIiIKKyJEw6lsa2Egxb51cm7DoWx1OiAgICAgICAgICAgICV1XG4iCisiU2VrdmVuY2Ugxb51cm7DoWx1OiAgICAgICAgIDB4JTA4eFxuIgorIlphxI3DoXRlayDFvnVybsOhbHU6ICAgICAgICAgICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBlcnJubzogICAgICAgICAgICAlZFxuIgorbXNnc3RyICJDaHlib3bDqSDEjcOtc2xvIMW+dXJuw6FsdTogICAgJWRcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQxNSBtaXNjL3R1bmUyZnMuYzoxOTYKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAicMWZaSDEjXRlbsOtIHN1cGVyYmxva3Ugxb51cm7DoWx1IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDIzCittc2dpZCAiQ291bGRuJ3QgZmluZCBqb3VybmFsIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVycyIKK21zZ3N0ciAiTmVtb2h1IG5hasOtdCBtYWdpY2vDoSDEjcOtc2xhIHN1cGVyYmxva3Ugxb51cm7DoWx1IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIGJsb2NrIHNpemU6ICAgICAgICV1XG4iCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgZmlyc3QgYmxvY2s6ICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIG51bWJlciBvZiB1c2VyczogICV1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJWZWxpa29zdCBibG9rdSDFvnVybsOhbHU6ICAgJXVcbiIKKyJEw6lsa2Egxb51cm7DoWx1OiAgICAgICAgICAgICV1XG4iCisiUHJ2bsOtIGJsb2sgxb51cm7DoWx1OiAgICAgICAldVxuIgorIlNla3ZlbmNlIMW+dXJuw6FsdTogICAgICAgICAweCUwOHhcbiIKKyJaYcSNw6F0ZWsgxb51cm7DoWx1OiAgICAgICAgICAldVxuIgorIlBvxI1ldCB1xb5pdmF0ZWzFryDFvnVybsOhbHU6ICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdXNlcnM6ICAgICAgICAgICAgJXNcbiIKK21zZ3N0ciAiVcW+aXZhdGVsw6kgxb51cm7DoWx1OiAgICAgICAgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ1NiBtaXNjL21rZTJmcy5jOjc0MyBtaXNjL3R1bmUyZnMuYzoxMjExCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIG9wdGlvbnMhXG4iCittc2dzdHIgIk5lbW9odSBhbG9rb3ZhdCBwYW3Em8WlIHBybyB6cHJhY292w6Fuw60gcMWZZXDDrW5hxI3FryFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2sgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJOZXBsYXRuw70gcGFyYW1ldHIgc3VwZXJibG9rOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiTmVwbGF0bsO9IHBhcmFtZXRyIGJsb2Nrc2l6ZSAodmVsaWtvc3RfYmxva3UpOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgZXh0ZW5kZWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdXBlcmJsb2NrPTxzdXBlcmJsb2NrIG51bWJlcj5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvY2tzaXplPlxuIgorbXNnc3RyICIiCisiXG4iCisiWmFkw6FuKHkpIMWhcGF0bsO9KMOpKSBwxZllcMOtbmHEjShlKTogJXNcbiIKKyJcbiIKKyJSb3rFocOtxZllbsOpIHDFmWVww61uYcSNZSBqc291IG9kZMSbbGVueSDEjcOhcmthbWkgYSBtb2hvdSBtw610IGFyZ3VtZW50LCBrdGVyw70gamVcbiIKKyJcdG9kZMSbbGVuIHpuYW3DqW5rZW0gcm92bsOhIHNlICjigJ494oCcKS5cbiIKKyJcbiIKKyJQbGF0bsOpIHJvesWhw63FmWVuw6kgcMWZZXDDrW5hxI1lIGpzb3U6XG4iCisiXHRzdXBlcmJsb2NrPTzEjcOtc2xvIHN1cGVyYmxva3U+XG4iCisiXHRibG9ja3NpemU9PHZlbGlrb3N0IGJsb2t1PlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTY4IG1pc2MvbWtlMmZzLmM6MTczNAorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzXG4iCittc2dzdHIgIlx0UG91xb7DrXbDoW0gJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYwNiBtaXNjL2UyaW1hZ2UuYzoxNTgyIG1pc2MvdHVuZTJmcy5jOjIwNjAKKyM6IHJlc2l6ZS9tYWluLmM6MzE5Cittc2dpZCAiQ291bGRuJ3QgZmluZCB2YWxpZCBmaWxlc3lzdGVtIHN1cGVyYmxvY2suXG4iCittc2dzdHIgIk5lbW9odSBuYWrDrXQgcGxhdG7DvSBzdXBlcmJsb2sgc3lzdMOpbXUgc291Ym9yxa8uXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAlczogZXJyb3IgcmVhZGluZyBiaXRtYXBzOiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICVzOiBjaHliYSBwxZlpIMSNdGVuw60gYml0bWFwOiAlc1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFsgLXJ8USBdIFsgLWZyIF0gZGV2aWNlIGltYWdlLWZpbGVcbiIKK21zZ3N0ciAiUG91xb5pdMOtOiAlcyBbLXJ8UV0gWy1mcl0gemHFmcOtemVuw60gc291Ym9yX3Nfb2JyYXplbVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIC1JIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIiAgICAgICAlcyAtSSB6YcWZw616ZW7DrSBzb3Vib3Jfc19vYnJhemVtXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICVzIC1yYSAgWyAgLWNmbnAgIF0gWyAtbyBzcmNfb2Zmc2V0IF0gWyAtTyBkZXN0X29mZnNldCBdIHNyY19mcyAiCisiWyBkZXN0X2ZzIF1cbiIKK21zZ3N0ciAiIgorIiAgICAgICAlcyAtcmEgWy1jZm5wXSBbLW8gcG96aWNlX3pkcm9qZV0gWyAtTyBwb3ppY2VfY8OtbGVdXG4iCisiICAgICAgICAgIHpkcm9qb3bDvV9zb3Vib3JvdsO9X3N5c3TDqW0gW2PDrWxvdsO9X3NvdWJvcm92w71fc3lzdMOpbV1cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY5IG1pc2MvZTJpbWFnZS5jOjU3NiBtaXNjL2UyaW1hZ2UuYzo1ODIKKyM6IG1pc2MvZTJpbWFnZS5jOjExNzgKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlciIKK21zZ3N0ciAicMWZaSBhbG9rYWNpIHZ5cm92bsOhdmFjw60gcGFtxJt0aSIKKworIzogbWlzYy9lMmltYWdlLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgYmxvY2sgJWxsdVxuIgorbXNnc3RyICJaYXBpc3VqZSBzZSBibG9rICVsbHVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHdyaXRpbmcgYmxvY2sgJWxsdSIKK21zZ3N0ciAiY2h5YmEgcMWZaSB6w6FwaXN1IGJsb2t1ICVsbHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE5MQorbXNnaWQgImVycm9yIGluIGdlbmVyaWNfd3JpdGUoKSIKK21zZ3N0ciAiY2h5YmEgdmUgZnVua2NpIGdlbmVyaWNfd3JpdGUoKSIKKworIzogbWlzYy9lMmltYWdlLmM6MjA4Cittc2dpZCAiRXJyb3I6IGhlYWRlciBzaXplIGlzIGJpZ2dlciB0aGFuIHdydF9zaXplXG4iCittc2dzdHIgIkNoeWJhOiBobGF2acSNa2EgamUgdsSbdMWhw60gbmXFviB3cnRfc2l6ZVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMTMKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBoZWFkZXIgYnVmZmVyXG4iCittc2dzdHIgIk5lbW9odSBhbG9rb3ZhdCB2eXJvdm7DoXZhY8OtIHBhbcSbxaUgaGxhdmnEjWt5XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI0MQorbXNnaWQgIndoaWxlIHdyaXRpbmcgc3VwZXJibG9jayIKK21zZ3N0ciAicMWZaSB6w6FwaXN1IHN1cGVyYmxva3UiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI1MAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgInDFmWkgesOhcGlzdSB0YWJ1bGt5IGl1emzFryIKKworIzogbWlzYy9lMmltYWdlLmM6MjU4Cittc2dpZCAid2hpbGUgd3JpdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgInDFmWkgesOhcGlzdSBiaXRtYXB5IGJsb2vFryIKKworIzogbWlzYy9lMmltYWdlLmM6MjY2Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSBiaXRtYXAiCittc2dzdHIgInDFmWkgesOhcGlzdSBiaXRtYXB5IGl1emzFryIKKworIzogbWlzYy9lMmltYWdlLmM6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCByZWNfbGVuICglZClcbiIKK21zZ3N0ciAiUG/FoWtvemVuw70gYmxvayBhZHJlc8OhxZllICVsbHU6IGNoeWJuw70gcmVjX2xlbiAoJWQpXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjUxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IGRpcmVjdG9yeSBibG9jayAlbGx1OiBiYWQgbmFtZV9sZW4gKCVkKVxuIgorbXNnc3RyICJQb8Wha296ZW7DvSBibG9rIGFkcmVzw6HFmWUgJWxsdTogY2h5Ym7DvSBuYW1lX2xlbiAoJWQpXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGx1IC8gJWxsdSBibG9ja3MgKCVkJSUpIgorbXNnc3RyICIlbGx1LyVsbHUgYmxva8WvICglZOKAryUlKSIKKworIzogbWlzYy9lMmltYWdlLmM6NTg2IG1pc2MvZTJpbWFnZS5jOjYyNgorbXNnaWQgIkNvcHlpbmcgIgorbXNnc3RyICJLb3DDrXJ1amUgc2UgIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo2MjMKK21zZ2lkICIiCisiU3RvcHBpbmcgbm93IHdpbGwgZGVzdHJveSB0aGUgZmlsZXN5c3RlbSwgaW50ZXJydXB0IGFnYWluIGlmIHlvdSBhcmUgc3VyZVxuIgorbXNnc3RyICIiCisiWmFzdGF2ZW7DrSBuYSB0b210byBtw61zdMSbIHpuacSNw60gc291Ym9yb3bDvSBzeXN0w6ltLiBKc3RlLWxpIHNpIGppc3RpLFxuIgorInZ5dm9sZWp0ZSBwxZllcnXFoWVuw60gem5vdnVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyByZW1haW5pbmcgYXQgJS4yZiBNQi9zIgorbXNnc3RyICIgJXMgemLDvXbDoSBwxZlpICUuMmbigK9NQi9zIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo2NjEgbWlzYy9lMmltYWdlLmM6MTE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIGJsb2NrICVsbHUiCittc2dzdHIgImNoeWJhIHDFmWkgxI10ZW7DrSBibG9rdSAlbGx1IgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29waWVkICVsbHUgLyAlbGx1IGJsb2NrcyAoJWQlJSkgaW4gJXMgIgorbXNnc3RyICJaa29ww61yb3bDoW5vICVsbHUvJWxsdSBibG9rxa8gKCVk4oCvJSUpIHbCoCVzICIKKworIzogbWlzYy9lMmltYWdlLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF0ICUuMmYgTUIvcyIKK21zZ3N0ciAicMWZaSAlLjJm4oCvTUIvcyIKKworIzogbWlzYy9lMmltYWdlLmM6NzU1Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBsMSB0YWJsZSIKK21zZ3N0ciAicMWZaSBhbG9rYWNpIHRhYnVsa3kgbDEiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjgwMAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgbDIgY2FjaGUiCittc2dzdHIgInDFmWkgYWxva2FjaSB2eXJvdm7DoXZhY8OtY2ggcGFtxJt0aSBkcnVow6kgw7pyb3ZuxJsiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjgyMworbXNnaWQgIiIKKyJXYXJuaW5nOiBUaGVyZSBhcmUgc3RpbGwgdGFibGVzIGluIHRoZSBjYWNoZSB3aGlsZSBwdXR0aW5nIHRoZSBjYWNoZSwgZGF0YSAiCisid2lsbCBiZSBsb3N0IHNvIHRoZSBpbWFnZSBtYXkgbm90IGJlIHZhbGlkLlxuIgorbXNnc3RyICIiCisiUG96b3I6IFbCoG9rYW3FvmlrdSB2a2zDoWTDoW7DrSB2eXJvdm7DoXZhY8OtIHBhbcSbdGkgc3TDoWxlIGpzb3UgdmUgdnlyb3Zuw6F2YWPDrSAiCisicGFtxJt0aSB0YWJ1bGt5LCBjb8W+IHZlZGUga2UgenRyw6F0xJsgZGF0IGEgb2JyYXogbW/Fvm7DoSBidWRlIHBvxaFrb3plbsO9LlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTQ1Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBleHQyX3Fjb3cyX2ltYWdlIgorbXNnc3RyICJwxZlpIGFsb2thY2kgZXh0Ml9xY293Ml9pbWFnZSIKKworIzogbWlzYy9lMmltYWdlLmM6MTE1MgorbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBleHQyX3Fjb3cyX2ltYWdlIgorbXNnc3RyICJwxZlpIGluaWNpYWxpemFjaSBleHQyX3Fjb3cyX2ltYWdlIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjExIG1pc2MvZTJpbWFnZS5jOjEyMjkKK21zZ2lkICJQcm9ncmFtbWluZyBlcnJvcjogbXVsdGlwbGUgc2VxdWVudGlhbCByZWZjb3VudCBibG9ja3MgY3JlYXRlZCFcbiIKK21zZ3N0ciAiQ2h5YmEgdsKgcHJvZ3JhbXU6IHZ5dHZvxZllbnkgbsOhc29ibsOpIGJsb2t5IHBvc2xvdXBuw71jaCBwb8SNdMWvIG9ka2F6xa8hXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyNjkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAicMWZaSBhbG9rYWNpIGJpdG1hcHkgYmxva8WvIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjc4Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBzY3JhbWJsZSBibG9jayBiaXRtYXAiCittc2dzdHIgInDFmWkgYWxva2FjaSBiaXRtYXB5IHphdGVtxYhvdmFjw61jaCBibG9rxa8iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyODUKK21zZ2lkICJTY2FubmluZyBpbm9kZXMuLi5cbiIKK21zZ3N0ciAiSGxlZGFqw60gc2UgaXV6bHnigKZcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTI5NworbXNnaWQgIkNhbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciIKK21zZ3N0ciAiTmVsemUgYWxva292YXQgdnlyb3Zuw6F2YWPDrSBwYW3Em8WlIGJsb2t1IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzM2IG1pc2MvZTJpbWFnZS5jOjEzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgaXRlcmF0aW5nIG92ZXIgaW5vZGUgJXUiCittc2dzdHIgInDFmWkgcHJvY2jDoXplbsOtIGl1emx1ICV1IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzgxCittc2dpZCAiUmF3IGFuZCBxY293MiBpbWFnZXMgY2Fubm90IGJlIGluc3RhbGxlZCIKK21zZ3N0ciAiT2J5xI1lam7DqSBhIFFDT1cyIG9icmF6eSBuZWx6ZSBuYWluc3RhbG92YXQiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MDMKK21zZ2lkICJlcnJvciByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgImNoeWJhIHDFmWkgxI10ZW7DrSBiaXRtYXAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MTUKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGRldmljZSBmaWxlIgorbXNnc3RyICJwxZlpIG90ZXbDrXLDoW7DrSBzb3Vib3J1IHphxZnDrXplbsOtIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDI2Cittc2dpZCAid2hpbGUgcmVzdG9yaW5nIHRoZSBpbWFnZSB0YWJsZSIKK21zZ3N0ciAicMWZaSBvYm5vdm92w6Fuw60gdGFidWxreSBvYnJhenUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MjMKK21zZ2lkICItYSBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHJhdyBvciBRQ09XMiBpbWFnZXMuIgorbXNnc3RyICJQxZllcMOtbmHEjSAtYSBsemUgcG91xb7DrXQgamVuIHPCoHMgb2J5xI1lam7DvW1pIG5lYm8gUUNPVzIgb2JyYXp5LiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUyOQorbXNnaWQgIk9mZnNldHMgYXJlIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIgorbXNnc3RyICJQb3ppY2UganNvdSBkb3ZvbGVueSBqZW4gdSBvYnnEjWVqbsO9Y2ggb2JyYXrFry4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MzQKK21zZ2lkICJNb3ZlIG1vZGUgaXMgb25seSBhbGxvd2VkIHdpdGggcmF3IGltYWdlcy4iCittc2dzdHIgIlJlxb5pbSBwxZllc3VudSBqZSBkb3ZvbGVuIGplbiB1wqBvYnnEjWVqbsO9Y2ggb2JyYXrFry4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MzkKK21zZ2lkICJNb3ZlIG1vZGUgcmVxdWlyZXMgYWxsIGRhdGEgbW9kZS4iCittc2dzdHIgIlJlxb5pbSBwxZllc3VudSB2ecW+YWR1amUgcmXFvmltIHbFoWVjaCBkYXQuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTQ5Cittc2dpZCAiY2hlY2tpbmcgaWYgbW91bnRlZCIKK21zZ3N0ciAia29udHJvbGEgbmEgcMWZaXBvamVuw60iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1NTYKK21zZ2lkICIiCisiXG4iCisiUnVubmluZyBlMmltYWdlIG9uIGEgUi9XIG1vdW50ZWQgZmlsZXN5c3RlbSBjYW4gcmVzdWx0IGluIGFuXG4iCisiaW5jb25zaXN0ZW50IGltYWdlIHdoaWNoIHdpbGwgbm90IGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuIgorIlVzZSAtZiBvcHRpb24gaWYgeW91IHJlYWxseSB3YW50IHRvIGRvIHRoYXQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQb3XFvml0w60gZTJpbWFnZSBuYSBzb3Vib3JvdsO9IHN5c3TDqW0gcMWZaXBvamVuw70gcHJvIHrDoXBpcyBtxa/FvmUgdsOpc3RcbiIKKyJrwqBuZWtvbnppc3RlbnRuw61tdSBvYnJhenUsIGt0ZXLDvSBzZSBuZWhvZMOtIG5hIGxhZMSbbsOtLlxuIgorIlBva3VkIHRhayBvcHJhdmR1IGNoY2V0ZSwgcG91xb5panRlIHDFmWVww61uYcSNIC1mLlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjA4Cittc2dpZCAiUUNPVzIgaW1hZ2UgY2FuIG5vdCBiZSB3cml0dGVuIHRvIHRoZSBzdGRvdXQhXG4iCittc2dzdHIgIlFDT1cyIG9icmF6IG5lbHplIHphcHNhdCBuYSBzdGFuZGFyZG7DrSB2w71zdHVwIVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjE0Cittc2dpZCAiQ2FuIG5vdCBzdGF0IG91dHB1dFxuIgorbXNnc3RyICJOZWx6ZSB6amlzdGl0IMO6ZGFqZSBvwqB2w71zdHVwdVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkltYWdlICglcykgaXMgY29tcHJlc3NlZFxuIgorbXNnc3RyICJPYnJheiAoJXMpIGplIGtvbXByaW1vdsOhbi5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbWFnZSAoJXMpIGlzIGVuY3J5cHRlZFxuIgorbXNnc3RyICJPYnJheiAoJXMpIGplIHphxaFpZnJvdsOhblxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjb252ZXJ0IHFjb3cyIGltYWdlICglcykgaW50byByYXcgaW1hZ2UgKCVzKSIKK21zZ3N0ciAicMWZaSBwb2t1c3UgcMWZZXbDqXN0IG9icmF6IHFjb3cyICglcykgZG8gYmluw6FybsOtIG9icmF6dSAoJXMpIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjM5Cittc2dpZCAiVGhlIC1jIG9wdGlvbiBvbmx5IHN1cHBvcnRlZCBpbiByYXcgbW9kZVxuIgorbXNnc3RyICJQxZllcMOtbmHEjSAtYyBqZSBwb2Rwb3JvdsOhbiBqZW4gdsKgb2J5xI1lam7DqW0gcmXFvmltdVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjQ0Cittc2dpZCAiVGhlIC1jIG9wdGlvbiBub3Qgc3VwcG9ydGVkIHdoZW4gd3JpdGluZyB0byBzdGRvdXRcbiIKK21zZ3N0ciAiUMWZZXDDrW5hxI0gLWMgbmVuw60gcMWZaSB6w6FwaXN1IG5hIHN0YW5kYXJkbsOtIHbDvXN0dXAgcG9kcG9yb3bDoW5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY1MQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgY2hlY2tfYnVmIgorbXNnc3RyICJwxZlpIGFsb2thY2kgY2hlY2tfYnVmIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjU3Cittc2dpZCAiVGhlIC1wIG9wdGlvbiBvbmx5IHN1cHBvcnRlZCBpbiByYXcgbW9kZVxuIgorbXNnc3RyICJQxZllcMOtbmHEjSAtcCBqZSBwb2Rwb3JvdsOhbiBqZW4gdsKgb2J5xI1lam7DqW0gcmXFvmltdVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsb2NrcyBhbHJlYWR5IGNvbnRhaW5lZCB0aGUgZGF0YSB0byBiZSBjb3BpZWRcbiIKK21zZ3N0ciAiJWQgYmxva8WvIGppxb4gb2JzYWh1amUgZGF0YSwga3RlcsOhIHNlIG3Em2xhIHprb3DDrXJvdmF0XG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBvcGVuICVzXG4iCittc2dzdHIgImUybGFiZWw6IG5lbW9odSBvdGV2xZnDrXQgJXNcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBuZW1vaHUgc2UgcG9zdW5vdXQgbmEgc3VwZXJibG9rXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHJlYWRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBjaHliYSBwxZlpIMSNdGVuw60gc3VwZXJibG9rdVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBub3QgYW4gZXh0MiBmaWxlc3lzdGVtXG4iCittc2dzdHIgImUybGFiZWw6IG5lbsOtIHN5c3TDqW0gc291Ym9yxa8gZXh0MlxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo5NyBtaXNjL3R1bmUyZnMuYzoyMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGxhYmVsIHRvbyBsb25nLCB0cnVuY2F0aW5nLlxuIgorbXNnc3RyICJWYXJvdsOhbsOtOiBqbWVub3ZrYSBwxZnDrWxpxaEgZGxvdWjDoSwgemtyYWN1amkuXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrIGFnYWluXG4iCittc2dzdHIgImUybGFiZWw6IG5lbW9odSBzZSB6YXNlIHBvc3Vub3V0IG5hIHN1cGVyYmxva1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3Igd3JpdGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGNoeWJhIHDFmWkgesOhcGlzdSBzdXBlcmJsb2t1XG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjExNyBtaXNjL3R1bmUyZnMuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGUybGFiZWwgZGV2aWNlIFtuZXdsYWJlbF1cbiIKK21zZ3N0ciAiUG91xb5pdMOtOiBlMmxhYmVsIHphxZnDrXplbsOtIFtub3bDoWptZW5vdmthXVxuIgorCisjOiBtaXNjL2UydW5kby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyA8dHJhbnNhY3Rpb24gZmlsZT4gPGZpbGVzeXN0ZW0+XG4iCittc2dzdHIgIlBvdcW+aXTDrTogJXMgPFRSQU5TQUvEjE7DjV9TT1VCT1I+IDxTT1VCT1JPVsOdX1NZU1TDiU0+XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NTIKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIKK21zZ3N0ciAiTmVtb2h1IG5hxI3DrXN0IGRhdGEgc291Ym9yb3bDqWhvIHN5c3TDqW11IFxuIgorCisjOiBtaXNjL2UydW5kby5jOjYyIG1pc2MvZTJ1bmRvLmM6ODMgbWlzYy9lMnVuZG8uYzoxMDggbWlzYy9lMnVuZG8uYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9mZXRjaCAlc1xuIgorbXNnc3RyICJ0ZGJfZmV0Y2ggJXMgc2VsaGFsb1xuIgorCisjOiBtaXNjL2UydW5kby5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBNb3VudCB0aW1lIGRpZG4ndCBtYXRjaCAldVxuIgorbXNnc3RyICLEjGFzIHDFmWlwb2plbsOtIHN5c3TDqW11IHNvdWJvcsWvIHNlIG5lc2hvZHVqZSBzwqAldVxuIgorCisjOiBtaXNjL2UydW5kby5jOjg5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIFVVSUQgZGlkbid0IG1hdGNoIFxuIgorbXNnc3RyICJVVUlEIHN5c3TDqW11IHNvdWJvcsWvIHNlIG5lc2hvZHVqZSBcbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9vcGVuICVzXG4iCittc2dzdHIgInRkYl9vcGVuICVzIHNlbGhhbG9cbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICJDaHliYSBwxZlpIHpqacWhxaVvdsOhbsOtLCBqZXN0bGkgamUgJXMgcMWZaXBvamVuLlxuIgorCisjOiBtaXNjL2UydW5kby5jOjE3NQorbXNnaWQgImUydW5kbyBzaG91bGQgb25seSBiZSBydW4gb24gdW5tb3VudGVkIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgImUydW5kbyBieSBtxJtsIGLDvXQgcG91xaF0xJtuIGplbiBuYSBuZXDFmWlwb2plbsOpbSBzeXN0w6ltdSBzb3Vib3LFr1xuIgorCisjOiBtaXNjL2UydW5kby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlc1xuIgorbXNnc3RyICJTZWxoYWxvIG90ZXbFmWVuw60gJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwbGF5ZWQgdHJhbnNhY3Rpb24gb2Ygc2l6ZSAlemQgYXQgbG9jYXRpb24gJWxsdVxuIgorbXNnc3RyICJQxZllaHJhbsOhIHRyYW5zYWtjZSBvwqB2ZWxpa29zdGkgJXpkIG5hIHBvemljaSAlbGx1XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB3cml0ZSAlc1xuIgorbXNnc3RyICJTZWxoYWwgesOhcGlzICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBjb3VsZG4ndCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJWQVJPVsOBTsONOiBuZW1vaHUgb3RldsWZw610ICVzOiAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogYmFkIGZvcm1hdCBvbiBsaW5lICVkIG9mICVzXG4iCittc2dzdHIgIlZBUk9Ww4FOw406IMWhcGF0bsO9IGZvcm3DoXQgbmEgxZnDoWRrdSAlZCAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNzAKK21zZ2lkICIiCisiV0FSTklORzogWW91ciAvZXRjL2ZzdGFiIGRvZXMgbm90IGNvbnRhaW4gdGhlIGZzY2sgcGFzc25vXG4iCisiXHRmaWVsZC4gIEkgd2lsbCBrbHVkZ2UgYXJvdW5kIHRoaW5ncyBmb3IgeW91LCBidXQgeW91XG4iCisiXHRzaG91bGQgZml4IHlvdXIgL2V0Yy9mc3RhYiBmaWxlIGFzIHNvb24gYXMgeW91IGNhbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBPWk9SOiBWw6HFoSAvZXRjL2ZzdGFiIG5lb2JzYWh1amUgcG9sZSBzwqBwb8WZYWTDrW0ga29udHJvbHkuXG4iCisiXHROeW7DrSBzZSBzwqB0w61tIGx6ZSB2eXBvxZnDoWRhdCwgYWxlIC9ldGMvZnN0YWIgYnlzdGUgbcSbbGlcbiIKKyJcdG9wcmF2aXQsIGphayBuZWpkxZnDrXZlIGJ1ZGV0ZSBtb2NpLlxuIgorIlxuIgorCisjOiBtaXNjL2ZzY2suYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogJXM6IG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiAlczogbmVuYWxlemVuXG4iCisKKyM6IG1pc2MvZnNjay5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FpdDogTm8gbW9yZSBjaGlsZCBwcm9jZXNzPyE/XG4iCittc2dzdHIgIiVzOiB3YWl0OiDFvcOhZG7DvSBkYWzFocOtIHN5bm92c2vDvSBwcm9jZXM/IT9cbiIKKworIzogbWlzYy9mc2NrLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmcuLi4gJXMgZm9yIGRldmljZSAlcyBleGl0ZWQgd2l0aCBzaWduYWwgJWQuXG4iCittc2dzdHIgIlZhcm92w6Fuw63igKYgJXMgcHJvIHphxZnDrXplbsOtICVzIHNrb27EjWlsIHNlIHNpZ27DoWxlbSAlZC5cbiIKKworIzogbWlzYy9mc2NrLmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzOiBzdGF0dXMgaXMgJXgsIHNob3VsZCBuZXZlciBoYXBwZW4uXG4iCittc2dzdHIgIiVzICVzOiBzdGF2IGplICV4LCBuZW3Em2xvIGJ5IHNlIG5pa2R5IHN0w6F0LlxuIgorCisjOiBtaXNjL2ZzY2suYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluaXNoZWQgd2l0aCAlcyAoZXhpdCBzdGF0dXMgJWQpXG4iCittc2dzdHIgIkRva29uxI1lbiBzICVzIChzdGF2IHVrb27EjWVuw60gJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiVzOiBDaHliYSAlZCBwxZlpIHNwb3XFoXTEm27DrSBmc2NrLiVzIHBybyAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzo3NDIKK21zZ2lkICIiCisiRWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSBmaWxlc3lzdGVtIHR5cGVzIHBhc3NlZCB0byAtdCBtdXN0IGJlIHByZWZpeGVkXG4iCisid2l0aCAnbm8nIG9yICchJy5cbiIKK21zZ3N0ciAiIgorIkJ1xI8gdsWhZWNobnkgbmVibyDFvsOhZG7DvSB0eXAgc3lzdMOpbXUgc291Ym9yxa8gcMWZZWRhbsO9IC10IG11c8OtIG3DrXQgcMWZZWRwb251XG4iCisi4oCebm/igJwgbmVibyDigJ4h4oCcLlxuIgorCisjOiBtaXNjL2ZzY2suYzo3NjEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGVzeXN0ZW0gdHlwZXNcbiIKK21zZ3N0ciAiTmVtb2h1IGFsb2tvdmF0IHBhbcSbxaUgcHJvIHR5cHkgc3lzdMOpbXUgc291Ym9yxa9cbiIKKworIzogbWlzYy9mc2NrLmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogc2tpcHBpbmcgYmFkIGxpbmUgaW4gL2V0Yy9mc3RhYjogYmluZCBtb3VudCB3aXRoIG5vbnplcm8gZnNjayBwYXNzICIKKyJudW1iZXJcbiIKK21zZ3N0ciAiIgorIiVzOiBwxZllc2tha3VqaSBjaHlibsO9IMWZw6FkZWsgdsKgL2V0Yy9mc3RhYjogcMWZaXBvamVuw60gdHlwdSBiaW5kIHPCoG5lbnVsb3bDvW1cbiIKKyJwb8WZYWTDrW0gcHLFr2Nob2R1IHNrcnplIGZzY2tcbiIKKworIzogbWlzYy9mc2NrLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6IGNhbm5vdCBjaGVjayAlczogZnNjay4lcyBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNjazogbmVtb2h1IHprb250cm9sb3ZhdCAlczogZnNjay4lcyBuZW5hbGV6ZW5cbiIKKworIzogbWlzYy9mc2NrLmM6OTY3Cittc2dpZCAiQ2hlY2tpbmcgYWxsIGZpbGUgc3lzdGVtcy5cbiIKK21zZ3N0ciAiS29udHJvbHVqw60gc2UgdsWhZWNobnkgc3lzdMOpbXkgc291Ym9yxa8uXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS13YWl0aW5nLS0gKHBhc3MgJWQpXG4iCittc2dzdHIgIi0txI1la8OhbS0tIChwcsWvY2hvZCAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6MTA3OAorbXNnaWQgIiIKKyJVc2FnZTogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGZzdHlwZV0gW2ZzLW9wdGlvbnNdIFtmaWxlc3lzIC4uLl1cbiIKK21zZ3N0ciAiIgorIlBvdcW+aXTDrTogZnNjayBbLUFNTlBSVFZdIFstQyBbZmRdXSBbLXQgdHlwc3NdIFtwxZllcMOtbmHEjWUtc3NdICIKKyJbc3lzdMOpbXNvdWJvcsWv4oCmXVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBkZXZpY2VzXG4iCittc2dzdHIgIiVzOiBwxZnDrWxpxaEgbW5vaG8gemHFmcOtemVuw61cbiIKKworIzogbWlzYy9mc2NrLmM6MTE1MyBtaXNjL2ZzY2suYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiJXM6IHDFmcOtbGnFoSBtbm9obyBhcmd1bWVudMWvXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZhZGx2XSBbZmlsZXMuLi5dXG4iCittc2dzdHIgIlBvdcW+aXTDrTogJXMgWy1SVmFkbHZdIFtzb3Vib3J54oCmXVxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIlDFmWkgxI10ZW7DrSBwxZnDrXpuYWvFryAlcyIKKworIzogbWlzYy9sc2F0dHIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIlDFmWkgxI10ZW7DrSB2ZXJ6ZSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSBbLUMgY2x1c3Rlci1zaXplXVxuIgorIlx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIGlub2RlLXNpemVdIFstSiBqb3VybmFsLW9wdGlvbnNdXG4iCisiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKyJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisiXHRbLWcgYmxvY2tzLXBlci1ncm91cF0gWy1MIHZvbHVtZS1sYWJlbF0gWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG4iCisiXHRbLU8gZmVhdHVyZVssLi4uXV0gWy1yIGZzLXJldmlzaW9uXSBbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXVxuIgorIlx0Wy10IGZzLXR5cGVdIFstVCB1c2FnZS10eXBlIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSBkZXZpY2UgW2Jsb2Nrcy0iCisiY291bnRdXG4iCittc2dzdHIgIiIKKyJQb3XFvml0w606ICVzIFstY3wtbCBuw6F6ZXZzb3Vib3J1XSBbLWIgdmVsaWtvc3QtYmxva3VdIFstQyB2ZWxrb3N0LWNsdXN0ZXJ1XVxuIgorIlx0Wy1pIGJhanTFry1uYS1pdXplbF0gWy1JIHZlbGlrb3N0LWl1emx1XSBbLUogcMWZZXDDrW5hxI1lLcW+dXJuw6FsdV1cbiIKKyJcdFstRyB2ZWxpa29zdCBtZXRhIHNrdXBpbnldIFstTiBwb8SNZXQtaXV6bMWvXVxuIgorIlx0Wy1tIHByb2NlbnRhLXJlemVydm92YW7DvWNoLWJsb2vFr10gWy1vIG9zLWF1dG9yYV1cbiIKKyJcdFstZyBibG9rxa8tdmUtc2t1cGluxJtdIFstTCBqbWVub3ZrYS1zdmF6a3VdXG4iCisiXHRbLU0gYWRyZXPDocWZLXBvc2xlZG7DrWhvLXDFmWlwb2plbsOtXSBbLU8gdmxhc3Rub3N0WyzigKZdXSBbLXIgcmV2aXplLXNzXVxuIgorIlx0Wy1FIHJvesWhw63FmWVuw70tcMWZZXDDrW5hxI1bLOKApl1dIFstdCBkcnVoLXNzXSBbLVQgenDFr3NvYi1wb3XFvml0w61dIFstVSBVVUlEXVxuIgorIlx0Wy1qbnF2REZLU1ZdIHphxZnDrXplbsOtIFtwb8SNZXQtYmxva8WvXVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJSdW5uaW5nIGNvbW1hbmQ6ICVzXG4iCittc2dzdHIgIlNwb3XFoXTDrW0gcMWZw61rYXo6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBydW4gJyVzJyIKK21zZ3N0ciAicMWZaSBwb2t1c3Ugc3B1c3RpdCDigJ4lc+KAnCIKKworIzogbWlzYy9ta2UyZnMuYzoyNjMKK21zZ2lkICJ3aGlsZSBwcm9jZXNzaW5nIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIHByb2dyYW0iCittc2dzdHIgInDFmWkgenByYWNvdsOhdsOhbsOtIHNlem5hbXUgxaFwYXRuw71jaCBibG9rxa8geiBwcm9ncmFtdSIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWQgaW4gcHJpbWFyeSBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3IgYXJlYSBiYWQuXG4iCittc2dzdHIgIkJsb2sgJWQgdiBvYmxhc3RpIHByaW3DoXJuw61obyBzdXBlcmJsb2t1L2Rlc2tyaXB0b3LFryBza3VwaW4gxaFwYXRuw70uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrcyAldSB0aHJvdWdoICV1IG11c3QgYmUgZ29vZCBpbiBvcmRlciB0byBidWlsZCBhIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIkJsb2t5ICV1IGHFviAldSBtdXPDrSBiw710IHBybyB2eXR2b8WZZW7DrSBzeXN0w6ltdSBzb3Vib3LFryB2IHBvxZnDoWRrdS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTUKK21zZ2lkICJBYm9ydGluZy4uLi5cbiIKK21zZ3N0ciAiS29uxI3DrW3igKZcbiIKKworIzogbWlzYy9ta2UyZnMuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHRoZSBiYWNrdXAgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9ycyBhdCBibG9jayAldSBjb250YWluXG4iCisiXHRiYWQgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiVmFyb3bDoW7DrTogesOhbG/Fvm7DrSBzdXBlcmJsb2svZGVza3JpcHRvcnkgc2t1cGluIHbCoGJsb2t1ICV1IG9ic2FodWrDrVxuIgorIlx0xaFwYXRuw6kgYmxva3kuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzM0Cittc2dpZCAid2hpbGUgbWFya2luZyBiYWQgYmxvY2tzIGFzIHVzZWQiCittc2dzdHIgInDFmWkgb3puYcSNb3bDoW7DrSDFoXBhdG7DvWNoIGJsb2vFryBqYWtvIHBvdcW+aXTDqSIKKworIzogbWlzYy9ta2UyZnMuYzozODYKK21zZ2lkICJXcml0aW5nIGlub2RlIHRhYmxlczogIgorbXNnc3RyICJaYXBpc3VqaSB0YWJ1bGt5IGl1emzFrzogIgorCisjOiBtaXNjL21rZTJmcy5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IHdyaXRlICVkIGJsb2NrcyBpbiBpbm9kZSB0YWJsZSBzdGFydGluZyBhdCAlbGx1OiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiTmVtb2h1IHphcHNhdCAlZCBibG9rxa8gZG8gdGFidWxreSBpdXpsxa8gcG/EjcOtbmFqZSAlbGx1OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjQyMSBtaXNjL21rZTJmcy5jOjI0NzkgbWlzYy9ta2UyZnMuYzoyNzY0Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiaG90b3ZvICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0MzIKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyByb290IGRpciIKK21zZ3N0ciAicMWZaSB2eXR2w6HFmWVuw60ga2/FmWVub3bDqWhvIGFkcmVzw6HFmWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDM5Cittc2dpZCAid2hpbGUgcmVhZGluZyByb290IGlub2RlIgorbXNnc3RyICJwxZlpIMSNdGVuw60ga2/FmWVub3bDqWhvIGl1emx1IgorCisjOiBtaXNjL21rZTJmcy5jOjQ1MQorbXNnaWQgIndoaWxlIHNldHRpbmcgcm9vdCBpbm9kZSBvd25lcnNoaXAiCittc2dzdHIgInDFmWkgbmFzdGF2b3bDoW7DrSB2bGFzdG5pY3R2w60ga2/FmWVub3bDqWhvIGl1emx1IgorCisjOiBtaXNjL21rZTJmcy5jOjQ2OQorbXNnaWQgIndoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJwxZlpIHZ5dHbDocWZZW7DrSAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0NzYKK21zZ2lkICJ3aGlsZSBsb29raW5nIHVwIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJwxZlpIHZ5aGxlZMOhdsOhbsOtIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQ4OQorbXNnaWQgIndoaWxlIGV4cGFuZGluZyAvbG9zdCtmb3VuZCIKK21zZ3N0ciAicMWZaSB6dsSbdMWhb3bDoW7DrSAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo1MDQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAicMWZaSBuYXN0YXZvdsOhbsOtIGl1emx1IMWhcGF0bsO9Y2ggYmxva8WvIgorCisjOiBtaXNjL21rZTJmcy5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJPdXQgb2YgbWVtb3J5IGVyYXNpbmcgc2VjdG9ycyAlZC0lZFxuIgorbXNnc3RyICJOZWRvc3RhdGVrIHBhbcSbdGkgcMWZaSBtYXrDoW7DrSBzZWt0b3LFryAlZC0lZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAwOiAlc1xuIgorbXNnc3RyICJWYXJvdsOhbsOtOiBuZW1vaHUgbmHEjcOtc3QgYmxvayAwOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgZXJhc2Ugc2VjdG9yICVkOiAlc1xuIgorbXNnc3RyICJWYXJvdsOhbsOtOiBuZW1vaHUgdnltYXphdCBzZWt0b3IgJWQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTczCittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAicMWZaSBpbmljaWFsaXphY2kgc3VwZXJibG9rdSDFvnVybsOhbHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgxCittc2dpZCAiWmVyb2luZyBqb3VybmFsIGRldmljZTogIgorbXNnc3RyICJOdWx1amkgemHFmcOtemVuw60gxb51cm7DoWx1OiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgam91cm5hbCBkZXZpY2UgKGJsb2NrICVsbHUsIGNvdW50ICVkKSIKK21zZ3N0ciAicMWZaSBudWxvdsOhbsOtIHphxZnDrXplbsOtIMW+dXJuw6FsdSAoYmxvayAlbGx1LCBwb8SNZXQgJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjYxMQorbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJwxZlpIHrDoXBpc3Ugc3VwZXJibG9rdSDFvnVybsOhbHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGZpbGVzeXN0ZW0gd2l0aCAlbGx1ICVkayBibG9ja3MgYW5kICV1IGlub2Rlc1xuIgorbXNnc3RyICJWeXR2w6HFmcOtIHNlIHN5c3TDqW0gc291Ym9yxa8gc8KgJSdsbHUgKCVkaykgYmxva3kgYSAlJ3UgdXpseVxuIgorCisjIFRPRE8gcGx1cmFsaXplCisjOiBtaXNjL21rZTJmcy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2FybmluZzogJWxsdSBibG9ja3MgdW51c2VkLlxuIgorIlxuIgorbXNnc3RyICIiCisicG96b3I6IG5lcG91xb5pdG8gJSdsbHUgYmxva8WvLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGxhYmVsPSVzXG4iCittc2dzdHIgIkptZW5vdmthIHN5c3TDqW11IHNvdWJvcsWvPSVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIk9TIHR5cGU6ICVzXG4iCittc2dzdHIgIlR5cCBPUzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJWZWxpa29zdCBibG9rdT0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDbHVzdGVyIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiVmVsaWtvc3QgY2x1c3RlcnU9JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJhZ21lbnQgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJWZWxpa29zdCBmcmFnbWVudHU9JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RyaWRlPSV1IGJsb2NrcywgU3RyaXBlIHdpZHRoPSV1IGJsb2Nrc1xuIgorbXNnc3RyICJLcm9rPSV1IGJsb2vFrywgxaDDrcWZa2EgcMOhc3U9JXUgYmxva8WvXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcywgJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXUgaXV6bMWvLCAlbGx1IGJsb2vFr1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGx1IGJsb2NrcyAoJTIuMmYlJSkgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlciB1c2VyXG4iCittc2dzdHIgIiVsbHUgYmxva8WvICglMi4yZuKAryUlKSByZXplcnZvdsOhbm8gcHJvIHN1cGVydcW+aXZhdGVsZVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCBkYXRhIGJsb2NrPSV1XG4iCittc2dzdHIgIlBydm7DrSBibG9rIGRhdD0ldVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJSb290IGRpcmVjdG9yeSBvd25lcj0ldToldVxuIgorbXNnc3RyICJWbGFzdG7DrWsga2/FmWVub3bDqWhvIGFkcmVzw6HFmWU9JXU6JXVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBmaWxlc3lzdGVtIGJsb2Nrcz0lbHVcbiIKK21zZ3N0ciAiTWF4aW11bSBibG9rxa8gdsKgc3lzdMOpbXUgc291Ym9yxa89JSdsdVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cHNcbiIKK21zZ3N0ciAiJXUgc2t1cGluIGJsb2vFr1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIldSBza3VwaW5hIGJsb2vFr1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBjbHVzdGVycyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgYmxva8WvIHZlIHNrdXBpbsSbLCAldSBjbHVzdGVyxa8gdmUgc2t1cGluxJtcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgZnJhZ21lbnRzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBibG9rxa8gdmUgc2t1cGluxJssICV1IGZyYWdtZW50xa8gdmUgc2t1cGluxJtcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBpdXpsxa8gdmUgc2t1cGluxJtcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBVVUlEOiAlc1xuIgorbXNnc3RyICJVVUlEIHN5c3TDqW11IHNvdWJvcsWvPSVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njg5Cittc2dpZCAiU3VwZXJibG9jayBiYWNrdXBzIHN0b3JlZCBvbiBibG9ja3M6ICIKK21zZ3N0ciAiWsOhbG9oeSBzdXBlcmJsb2t1IHVsb8W+ZW55IHYgYmxvY8OtY2g6ICIKKworIzogbWlzYy9ta2UyZnMuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgJy1PIDY0Yml0J1xuIgorbXNnc3RyICIlcyB2ecW+YWR1amUg4oCeLU8gNjRiaXTigJxcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtdXN0IGJlIGJlZm9yZSAncmVzaXplPSV1J1xuIgorbXNnc3RyICLigJ4lc+KAnCBtdXPDrSBiw710IHDFmWVkIOKAnnJlc2l6ZT0ldeKAnFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjc4NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRlc2Nfc2l6ZTogJyVzJ1xuIgorbXNnc3RyICJOZXBsYXRuw6EgZGVzY19zaXplOiDigJ4lc+KAnFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9mZnNldDogJXNcbiIKK21zZ3N0ciAiTmVwbGF0bsOhIHBvemljZTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MTIgbWlzYy90dW5lMmZzLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCittc2dzdHIgIk5lcGxhdG7DvSBpbnRlcnZhbF9ha3R1YWxpemFjZV9tbXA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgIyBvZiBiYWNrdXAgc3VwZXJibG9ja3M6ICVzXG4iCittc2dzdHIgIk5lcGxhdG7DvSBwb8SNZXQgesOhbG/Fvm7DrWNoIHN1cGVyYmxva8WvOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg0OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIk5lcGxhdG7DvSBwYXJhbWV0ciBrcm9rdSAoc3RyaWRlKTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpcGUtd2lkdGggcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJOZXBsYXRuw70gcGFyYW1ldHIgxaHDrcWZa2EtcMOhc3UgKHN0cmlwZS13aWR0aCk6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmVzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiTmVwbGF0bsO9IHBhcmFtZXRyIHptxJtueSB2ZWxpa29zdGk6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODkzCittc2dpZCAiVGhlIHJlc2l6ZSBtYXhpbXVtIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBmaWxlc3lzdGVtIHNpemUuXG4iCittc2dzdHIgIk1heGltdW0gem3Em255IHZlbGtvc3RpIG11c8OtIGLDvXQgdsSbdMWhw60gbmXFviB2ZWxpa29zdCBzeXN0w6ltdSBzb3Vib3LFry5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MTcKK21zZ2lkICJPbi1saW5lIHJlc2l6aW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIlJldml6ZSAwIHNvdWJvcm92w6lobyBzeXN0w6ltdSBuZXBvZHBvcnVqZSB6bcSbbnUgdmVsaWtvc3RpIHphIGLEm2h1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTQ0IG1pc2MvbWtlMmZzLmM6OTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcm9vdF9vd25lcjogJyVzJ1xuIgorbXNnc3RyICJOZXBsYXRuw70gdmxhc3Ruw61rIGtvxZllbnU6IOKAniVz4oCcXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcXVvdGF0eXBlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiTmVwbGF0bsO9IHBhcmFtZXRyIGRydWh1IGt2w7N0OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0bW1wX3VwZGF0ZV9pbnRlcnZhbD08aW50ZXJ2YWw+XG4iCisiXHRudW1fYmFja3VwX3NiPTwwfDF8Mj5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBkYXRhIGNodW5rIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUgKiBkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdG9mZnNldD08b2Zmc2V0IHRvIGNyZWF0ZSB0aGUgZmlsZSBzeXN0ZW0+XG4iCisiXHRyZXNpemU9PHJlc2l6ZSBtYXhpbXVtIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0cGFja2VkX21ldGFfYmxvY2tzPTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdGxhenlfam91cm5hbF9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0cm9vdF91aWQ9PHVpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHJvb3RfZ2lkPTxnaWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXNyIE9SIGdycD5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlphZMOhbih5KSDFoXBhdG7DvSjDqSkgcMWZZXDDrW5hxI0oZSk6ICVzXG4iCisiXG4iCisiUm96xaHDrcWZZW7DqSBwxZllcMOtbmHEjWUganNvdSBvZGTEm2xlbnkgxI3DoXJrYW1pIGEgbW9ob3UgbcOtdCBhcmd1bWVudCwga3RlcsO9IGplXG4iCisiXHRvZGTEm2xlbiB6bmFtw6lua2VtIHJvdm7DoSBzZSAo4oCePeKAnCkuXG4iCisiXG4iCisiUGxhdG7DqSByb3rFocOtxZllbsOpIHDFmWVww61uYcSNZSBqc291OlxuIgorIlx0bW1wX3VwZGF0ZV9pbnRlcnZhbD08YWt0dWFsaXphxI1uw60gaW50ZXJ2YWw+XG4iCisiXHRudW1fYmFja3VwX3NiPTxwb8SNZXQgesOhbG/Fvm7DrWNoIHN1cGVyYmxva8WvOiAwfDF8Mj5cbiIKKyJcdHN0cmlkZT08c2hsdWsgKGNodW5rKSBkYXQgbmEgamVkbm9tIHJhaWRvdsOpbSBkaXNrdSB2wqBibG9jw61jaD5cbiIKKyJcdHN0cmlwZS13aWR0aD08a3JvayAoc3RyaWRlKSBSQUlEdSAqIGRhdG92w71jaCBkaXNrxa8gdsKgYmxvY8OtY2g+XG4iCisiXHRvZmZzZXQ9PHBvemljZSwgbmEga3RlcsOpIHZ5dHZvxZlpdCBzb3Vib3JvdsO9IHN5c3TDqW0+XG4iCisiXHRyZXNpemU9PG1heGltw6FsbsOtIHZlbGlrb3N0IHptxJtueSB2ZWxpa29zdGkgdsKgYmxvY8OtY2g+XG4iCisiXHRwYWNrZWRfbWV0YV9ibG9ja3M9PHNiYWxlbsOpIG1ldGEgYmxva3k6IDAgemFrw6F6w6FubywgMSBwb3ZvbGVubz5cbiIKKyJcdGxhenlfaXRhYmxlX2luaXQ9PGzDrW7DoSBpbmljaWFsaXphY2UgaXRhYnVsa3k6IDAgemFrw6F6w6FubywgMSBwb3ZvbGVubz5cbiIKKyJcdGxhenlfam91cm5hbF9pbml0PTxsw61uw6EgaW5pY2lhbGl6YWNlIMW+dXJuw6FsdTogMCB6YWvDoXrDoW5vLCAxIHBvdm9sZW5vPlxuIgorIlx0cm9vdF91aWQ9PFVJRCBrb8WZZW5vdsOpaG8gYWRyZXPDocWZZT5cbiIKKyJcdHJvb3RfZ2lkPTxHSUQga2/FmWVub3bDqWhvIGFkcmVzw6HFmWU+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08ZHJ1aCBrdsOzdDogdXNyICh1xb5pdmF0ZWzDqSksIG5lYm8gZ3JwIChza3VwaW55KT5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiBSQUlEIHN0cmlwZS13aWR0aCAldSBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiBzdHJpZGUgJXUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWYXJvdsOhbsOtOiDFocOtxZlrYSBwcnVodSBSQUlEdSAldSBuZW7DrSBzdWTDvSBuw6Fzb2JlayBrcm9rdSAoc3RyaWRlKSAldS5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gbWtlMmZzIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisiQ2h5YmEgc3ludGF4ZSB2wqBrb25maWd1cmHEjW7DrW0gc291Ym9ydSBta2UyZnMgKCVzLCDFmcOhZGVrIMSNLsKgJWQpXG4iCisiXHQlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNjggbWlzYy90dW5lMmZzLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJOZXBsYXRuw70gc2FkYSBwxZllcMOtbmHEjcWvIHN5c3TDqW11IHNvdWJvcsWvOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwODAgbWlzYy90dW5lMmZzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiTmFzdGF2ZW4gbmVwbGF0bsO9IHDFmWVww61uYcSNIHDFmWlwb2plbsOtOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIllvdXIgbWtlMmZzLmNvbmYgZmlsZSBkb2VzIG5vdCBkZWZpbmUgdGhlICVzIGZpbGVzeXN0ZW0gdHlwZS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlbDocWhIHNvdWJvciBta2UyZnMuY29uZiBuZWRlZmludWplIGRydWggc291Ym9yb3bDqWhvIHN5c3TDqW11ICVzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjQKK21zZ2lkICIiCisiWW91IHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBhbiB1cGRhdGVkIG1rZTJmcy5jb25mIGZpbGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJQcmF2ZMSbcG9kb2JuxJsgcG90xZllYnVqZXRlIG5haW5zdGFsb3ZhdCBha3R1YWxpem92YW7DvSBzb3Vib3IgbWtlMmZzLmNvbmYuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyOAorbXNnaWQgIkFib3J0aW5nLi4uXG4iCittc2dzdHIgIlDFmWVydcWhdWplIHNl4oCmXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGZzX3R5cGUgJXMgaXMgbm90IGRlZmluZWQgaW4gbWtlMmZzLmNvbmZcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBvem9yOiBmc190eXBlIChkcnVoIFNTKSAlcyBuZW7DrSB2wqBta2UyZnMuY29uZiBkZWZpbm92w6FuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ0OQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IFBBVEguXG4iCittc2dzdHIgIk5lbW9odSBhbG9rb3ZhdCBwYW3Em8WlIHBybyBub3ZvdSBwcm9txJtubm91IFBBVEguXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IChlcnJvcjogJWxkKS5cbiIKK21zZ3N0ciAiUHJvZmlsIG5lYnlsbyBtb8W+bsOpIHNwcsOhdm7EmyBpbmljaWFsaXpvdmF0IChjaHliYTogJWxkKS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTIzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2sgc2l6ZSAtICVzIgorbXNnc3RyICLFoXBhdG7DoSB2ZWxpa29zdCBibG9rdcKg4oCTICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogYmxvY2tzaXplICVkIG5vdCB1c2FibGUgb24gbW9zdCBzeXN0ZW1zLlxuIgorbXNnc3RyICJWYXJvdsOhbsOtOiB2ZWxpa29zdCBibG9rdSAlZCBuZW7DrSBuYSB2xJt0xaFpbsSbIHN5c3TDqW3FryBwb3XFvml0ZWxuw6EuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNsdXN0ZXIgc2l6ZSAtICVzIgorbXNnc3RyICLFoXBhdG7DoSB2ZWxpa29zdCBjbHVzdGVydcKg4oCTICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NTMKK21zZ2lkICInLVInIGlzIGRlcHJlY2F0ZWQsIHVzZSAnLUUnIGluc3RlYWQiCittc2dzdHIgIlDFmWVww61uYcSNIOKAni1S4oCcIGplIHphc3RhcmFsw70sIHBvdcW+aWp0ZSBtw61zdG8gbsSbaiDigJ4tReKAnCIKKworIzogbWlzYy9ta2UyZnMuYzoxNTY1Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGJsb2NrcyBwZXIgZ3JvdXAiCittc2dzdHIgIk5lcGxhdG7DvSBwb8SNZXQgYmxva8WvIHZlIHNrdXBpbsSbIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NzAKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIG11c3QgYmUgbXVsdGlwbGUgb2YgOCIKK21zZ3N0ciAiYmxva3kgdmUgc2t1cGluxJsgbXVzw60gYsO9dCBuw6Fzb2JlayA4IgorCisjOiBtaXNjL21rZTJmcy5jOjE1NzgKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgZmxleF9iZyBzaXplIgorbXNnc3RyICJOZXBsYXRuw6kgxI3DrXNsbyBwcm8gdmVsaWtvc3QgZmxleF9iZyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg0Cittc2dpZCAiZmxleF9iZyBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyIgorbXNnc3RyICJWZWxpa29zdCBmbGV4X2JnIG11c8OtIGLDvXQgbW9jbmlub3UgMiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZsZXhfYmcgc2l6ZSAoJWx1KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyXjMxIgorbXNnc3RyICJWZWxpa29zdCBmbGV4X2JnICglbHUpIG11c8OtIG1lbsWhw60gbmVibyByb3ZuYSAyXjMxIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSByYXRpbyAlcyAobWluICVkL21heCAlZCkiCittc2dzdHIgIsWhcGF0bsO9IHBvZMOtbCBpdXpsxa8gJXMgKG1pbiAlZC9tYXggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgIsWhcGF0bsOhIHZlbGlrb3N0IGl1emx1wqDigJMgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyMworbXNnaWQgIiIKKyJXYXJuaW5nOiAtSyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZSAnLUUgIgorIm5vZGlzY2FyZCcgZXh0ZW5kZWQgb3B0aW9uIGluc3RlYWQhXG4iCittc2dzdHIgIiIKKyJQb3pvcjogUMWZZXDDrW5hxI0gLUsgamUgemFzdGFyYWzDvSBhIG5lbcSbbCBieSBzZSBqacW+IHBvdcW+w612YXQuIE3DrXN0byBuxJtqICIKKyJwb3XFvmlqdGUgcm96xaHDrcWZZW7DvSBwxZllcMOtbmHEjSDigJ4tRSBub2Rpc2NhcmTigJwhXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYzNAorbXNnaWQgImluIG1hbGxvYyBmb3IgYmFkX2Jsb2Nrc19maWxlbmFtZSIKK21zZ3N0ciAidiBtYWxsb2MgcHJvIGJhZF9ibG9ja3NfZmlsZW5hbWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgIsWhcGF0bsOpIHByb2NlbnRvIHJlemVydm92YW7DvWNoIGJsb2vFr8Kg4oCTICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bSBpbm9kZXMgLSAlcyIKK21zZ3N0ciAiY2h5Ym7DvSBwb8SNZXQgaXV6bMWvwqDigJMgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gbGV2ZWwgLSAlcyIKK21zZ3N0ciAixaFwYXRuw6kgxI3DrXNsbyByZXZpemXCoOKAkyAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjcmVhdGUgcmV2aXNpb24gJWQiCittc2dzdHIgInDFmWkgcG9rdXN1IHZ5dHZvxZlpdCByZXZpemkgJWQiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY5OAorbXNnaWQgIlRoZSAtdCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICJQxZllcMOtbmHEjSAtdCBsemUgcG91xb7DrXQgamVuIGplZG5vdSIKKworIzogbWlzYy9ta2UyZnMuYzoxNzA2Cittc2dpZCAiVGhlIC1UIG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIlDFmWVww61uYcSNIC1UIGx6ZSBwb3XFvsOtdCBqZW4gamVkbm91IgorCisjOiBtaXNjL21rZTJmcy5jOjE3NTkgbWlzYy9ta2UyZnMuYzoyODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgZGV2aWNlICVzXG4iCittc2dzdHIgInDFmWkgcG9rdXN1IG90ZXbFmcOtdCB6YcWZw616ZW7DrSDFvnVybsOhbHUgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZGV2IGJsb2Nrc2l6ZSAoJWQpIHNtYWxsZXIgdGhhbiBtaW5pbXVtIGJsb2Nrc2l6ZSAlZFxuIgorbXNnc3RyICIiCisiVmVsaWtvc3QgYmxva3UgemHFmcOtemVuw60gxb51cm7DoWx1ICglZCkgbWVuxaHDrSBuZcW+IG1pbmltw6FsbsOtIHZlbGlrb3N0IGJsb2t1ICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBqb3VybmFsIGRldmljZSdzIGJsb2Nrc2l6ZTogJWRcbiIKK21zZ3N0ciAiUG91xb5pamkgdmVsaWtvc3QgYmxva3Ugxb51cm7DoWxvdmFjw61obyB6YcWZw616ZW7DrTogJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2tzICclcycgb24gZGV2aWNlICclcyciCittc2dzdHIgIsWhcGF0bsOpIGJsb2t5wqDigJ4lc+KAnCBuYSB6YcWZw616ZW7DrSDigJ4lc+KAnCIKKworIzogbWlzYy9ta2UyZnMuYzoxODA0Cittc2dpZCAiZmlsZXN5c3RlbSIKK21zZ3N0ciAic3lzdMOpbSBzb3Vib3LFryIKKworIzogbWlzYy9ta2UyZnMuYzoxODE3IHJlc2l6ZS9tYWluLmM6Mzk1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBmaWxlc3lzdGVtIHNpemUiCittc2dzdHIgInDFmWkgcG9rdXN1IHpqaXN0aXQgdmVsaWtvc3Qgc3lzdMOpbXUgc291Ym9yxa8iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgyMworbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbVxuIgorbXNnc3RyICIiCisiTmVtb2h1IHpqaXN0aXQgdmVsaWtvc3QgemHFmcOtemVuw607IG11c8OtdGUgemFkYXRcbiIKKyJ2ZWxpa29zdCBzeXN0w6ltdSBzb3Vib3LFr1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MzAKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorIlZlbGlrb3N0IHphxZnDrXplbsOtIGplIHByw70gbnVsYS4gWmFkw6FuIG5lcGxhdG7DvSBvZGTDrWwgbmVibyBuZWJ5bGFcbiIKKyIgICAgICAgICB0YWJ1bGthIG9kZMOtbMWvIHBvIGZkaXNrIHpub3Z1IG5hxI10ZW5hLCBwcm90b8W+ZSB6bcSbbsSbbsO9XG4iCisiICAgICAgICAgb2Rkw61sIHNlIHBvdcW+w612w6EuIE1vxb5uw6EgYnVkZXRlIG11c2V0IHBybyBvcMSbdG92bsOpIG5hxI10ZW7DrVxuIgorIiAgICAgICAgIHN2w6kgdGFidWxreSBvZGTDrWzFryB6bm92dSB6YXbDqXN0IHN5c3TDqW0uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg0NworbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICJTeXN0w6ltIHNvdWJvcsWvIHbEm3TFocOtIG5lxb4gdmVsaWtvc3QgemHFmcOtemVuw60uIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NjcKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZnMgdHlwZXMgbGlzdFxuIgorbXNnc3RyICJTZXpuYW0gZHJ1aMWvIHNvdWJvcm92w71jaCBzeXN0w6ltdSBzZSBuZXpkYcWZaWxvIHJvemVicmF0XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkwOAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgaGFyZHdhcmUgc2VjdG9yIHNpemUiCittc2dzdHIgInDFmWkgcG9rdXN1IHpqaXN0aXQgdmVsaWtvc3QgaGFyZHdhcm92w6lobyBzZWt0b3J1IgorCisjOiBtaXNjL21rZTJmcy5jOjE5MTQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHBoeXNpY2FsIHNlY3RvciBzaXplIgorbXNnc3RyICJwxZlpIHBva3VzdSB1csSNaXQgdmVsaWtvc3QgZnl6aWNrw6lobyBzZWt0b3J1IgorCisjOiBtaXNjL21rZTJmcy5jOjE5NDYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsIGZvciBkZXZpY2VcbiIKK21zZ3N0ciAicMWZaSBuYXN0YXZvdsOhbsOtIHZlbGlrb3N0aSBibG9rdTsgcHJvIHphxZnDrXplbsOtIHDFmcOtbGnFoSBtYWzDoSBob2Rub3RhXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogc3BlY2lmaWVkIGJsb2Nrc2l6ZSAlZCBpcyBsZXNzIHRoYW4gZGV2aWNlIHBoeXNpY2FsIHNlY3RvcnNpemUgJWRcbiIKK21zZ3N0ciAiIgorIlBvem9yOiB6YWRhbsOhIHZlbGlrb3N0IGJsb2t1ICVkIGplIG1lbsWhw60gbmXFviB2ZWxpa29zdCBmeXppY2vDqWhvIHNla3RvcnUgJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogU2l6ZSBvZiBkZXZpY2UgKDB4JWxseCBibG9ja3MpICVzIHRvbyBiaWcgdG8gYmUgZXhwcmVzc2VkXG4iCisiXHRpbiAzMiBiaXRzIHVzaW5nIGEgYmxvY2tzaXplIG9mICVkLlxuIgorbXNnc3RyICIiCisiJXM6IFZlbGlrb3N0IHphxZnDrXplbsOtICgweCVsbHggYmxva8WvKSAlcyBqZSBwxZnDrWxpxaEgdmVsa8OhLCBhYnkgYnlsYVxuIgorInZ5asOhZMWZZW5hIHbCoDMyIGJpdGVjaCB6YSBwb3XFvml0w60gYmxva3Ugb8KgdmVsaWtvc3RpICVkLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5OTEKK21zZ2lkICJmc190eXBlcyBmb3IgbWtlMmZzLmNvbmYgcmVzb2x1dGlvbjogIgorbXNnc3RyICJmc190eXBlcyAoZHJ1aHkgU1MpIHBybyDFmWXFoWVuw60gdsKgbWtlMmZzLmNvbmY6ICIKKworIzogbWlzYy9ta2UyZnMuYzoxOTk4Cittc2dpZCAiRmlsZXN5c3RlbSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICJWbGFzdG5vc3RpIHN5c3TDqW11IHNvdWJvcsWvIG5lanNvdSB2wqByZXZpemkgMCBwb2Rwb3JvdsOhbnlcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDA2Cittc2dpZCAiU3BhcnNlIHN1cGVyYmxvY2tzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIsWYw61ka8OpIHN1cGVyYmxva3kgc3lzdMOpbXUgc291Ym9yxa8gbmVqc291IHbCoHJldml6aSAwIHBvZHBvcm92w6FueVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMTgKK21zZ2lkICJKb3VybmFscyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICJSZXZpemUgMCBzeXN0w6ltdSBzb3Vib3LFryDFvnVybsOhbHkgbmVwb2Rwb3J1amVcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDMyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlbGYiCittc2dzdHIgIsWhcGF0bsOpIHByb2NlbnRvIHJlemVydm92YW7DvWNoIGJsb2vFr8Kg4oCTICVsZiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDQ5Cittc2dpZCAiIgorIkV4dGVudHMgTVVTVCBiZSBlbmFibGVkIGZvciBhIDY0LWJpdCBmaWxlc3lzdGVtLiAgUGFzcyAtTyBleHRlbnRzIHRvICIKKyJyZWN0aWZ5LlxuIgorbXNnc3RyICIiCisiUm96c2FoeSBNVVPDjSBiw710IHXCoDY0Yml0b3bDvWNoIHNvdWJvcm92w71jaCBzeXN0w6ltxa8gemFwbnV0eS4gVG9obyBkb2PDrWzDrXRlXG4iCisiemFkw6Fuw61tIOKAni1PIGV4dGVudHPigJwuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA2OQorbXNnaWQgIlRoZSBjbHVzdGVyIHNpemUgbWF5IG5vdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGJsb2NrIHNpemUuXG4iCittc2dzdHIgIlZlbGlrb3N0IGNsdXN0ZXJ1IG5lbXVzw60gYsO9dCBtZW7FocOtIG5lxb4gdmVsaWtvc3QgYmxva3UuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA3NQorbXNnaWQgInNwZWNpZnlpbmcgYSBjbHVzdGVyIHNpemUgcmVxdWlyZXMgdGhlIGJpZ2FsbG9jIGZlYXR1cmUiCittc2dzdHIgImRlZmluaWNlIHZlbGlrb3N0aSBjbHVzdGVydSB2ecW+YWR1amUgdmxhc3Rub3N0IGJpZ2FsbG9jIgorCisjOiBtaXNjL21rZTJmcy5jOjIwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogVW5hYmxlIHRvIGdldCBkZXZpY2UgZ2VvbWV0cnkgZm9yICVzXG4iCittc2dzdHIgInZhcm92w6Fuw606IE5lbsOtIG1vxb5uw6kgemppc3RpdCBnZW9tZXRyaWkgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsaWdubWVudCBpcyBvZmZzZXQgYnkgJWx1IGJ5dGVzLlxuIgorbXNnc3RyICJaYXJvdm7DoW7DrSAlcyBwxZllZHN0YXZ1amUgcG9zdW4gb8KgJSdsdSBiYWp0xa8uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBtYXkgcmVzdWx0IGluIHZlcnkgcG9vciBwZXJmb3JtYW5jZSwgKHJlKS1wYXJ0aXRpb25pbmcgc3VnZ2VzdGVkLlxuIgorbXNnc3RyICIiCisiVG90byBtxa/FvmUgdsOpc3Qga8KgdmVsbWkgxaFwYXRuw6ltdSB2w71rb251LCBkb3BvcnXEjXVqZSBzZSAobm92w6kpIHZ5dHZvxZllbsOtICIKKyJvZGTDrWzFry5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAobWF4ICVkKSIKK21zZ3N0ciAiJWQtYmFqdG92w6kgYmxva3kgcMWZw61sacWhIHZlbGvDqSBwcm8gc3lzdMOpbSAobWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiAlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCksIGZvcmNlZCB0byBjb250aW51ZVxuIgorbXNnc3RyICIiCisiVmFyb3bDoW7DrTogJWQtYmFqdG92w6kgYmxva3kgcMWZw61sacWhIHZlbGvDqSBwcm8gc3lzdMOpbSAobWF4ICVkKSwgZG9udWNlbiAiCisicG9rcmHEjW92YXRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTgwCittc2dpZCAiQ2FuJ3Qgc3VwcG9ydCBiaWdhbGxvYyBmZWF0dXJlIHdpdGhvdXQgZXh0ZW50cyBmZWF0dXJlIgorbXNnc3RyICJWbGFzdG5vc3QgYmlnYWxsb2MgbmVsemUgYmV6IHZsYXN0bm9zdGkgcm96c2Foxa8gemFwbm91dCIKKworIzogbWlzYy9ta2UyZnMuYzoyMTg3Cittc2dpZCAiIgorIlRoZSByZXNpemVfaW5vZGUgYW5kIG1ldGFfYmcgZmVhdHVyZXMgYXJlIG5vdCBjb21wYXRpYmxlLlxuIgorIlRoZXkgY2FuIG5vdCBiZSBib3RoIGVuYWJsZWQgc2ltdWx0YW5lb3VzbHkuXG4iCittc2dzdHIgIiIKKyJWbGFzdG5vc3RpIHJlc2l6ZV9pbm9kZSBhIG1ldGFfYmcgbmVqc291IHNsdcSNaXRlbG7DqS5cbiIKKyJPYsSbIG5lbW9ob3UgYsO9dCB6YXBudXR5IHNvdcSNYXNuxJsuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE5NgorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgYmlnYWxsb2MgZmVhdHVyZSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuIgorIlNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiUG96b3I6IHZsYXN0bm9zdCBiaWdhbGxvYyBqZSBzdMOhbGUgdmUgdsO9dm9qaS5cbiIKKyJQb2Ryb2Jub3N0aSBuYWxlem5ldGUgbmEgPGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0JpZ2FsbG9jPi5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjA3Cittc2dpZCAicmVzZXJ2ZWQgb25saW5lIHJlc2l6ZSBibG9ja3Mgbm90IHN1cHBvcnRlZCBvbiBub24tc3BhcnNlIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKyJibG9reSB2eWhyYXplbsOpIHBybyB6bcSbbnUgdmVsaWtvc3RpIHphIGLEm2h1IG5lanNvdSBwb2Rwb3JvdsOhbnkgbmEgbmXFmcOtZGvDqW1cbiIKKyJcdHN5c3TDqW11IHNvdWJvcsWvIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMTYKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIKK21zZ3N0ciAicG/EjWV0IGJsb2vFryB2ZSBza3VwaW7EmyBtaW1vIHJvenNhaCIKKworIzogbWlzYy9ta2UyZnMuYzoyMjQwCittc2dpZCAiRmxleF9iZyBmZWF0dXJlIG5vdCBlbmFibGVkLCBzbyBmbGV4X2JnIHNpemUgbWF5IG5vdCBiZSBzcGVjaWZpZWQiCittc2dzdHIgIlZsYXN0bm9zdCBmbGV4X2JnIG5lbsOtIHBvdm9sZW5hLCB0YWvFvmUgamVqw60gdmVsaWtvc3QgbmVtxa/FvmUgYsO9dCB6YWTDoW5hIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplICVkIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAixaFwYXRuw6EgdmVsaWtvc3QgaXV6bHUgJWQgKG1pbiAlZC9tYXggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgcmFpc2UgaW5vZGUgcmF0aW8/IgorbXNnc3RyICJwxZnDrWxpxaEgbW5vaG8gaXV6bMWvICglJ2xsdSksIHp2w73FoWl0IHBvbcSbciBpdXpsxa8/IgorCisjOiBtaXNjL21rZTJmcy5jOjIyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgc3BlY2lmeSA8IDJeMzIgaW5vZGVzIgorbXNnc3RyICJwxZnDrWxpxaEgbW5vaG8gaXV6bMWvICglJ2xsdSksIHphZGVqdGUgPCAyXjMyIGl1emzFryIKKworIzogbWlzYy9ta2UyZnMuYzoyMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbm9kZV9zaXplICgldSkgKiBpbm9kZXNfY291bnQgKCV1KSB0b28gYmlnIGZvciBhXG4iCisiXHRmaWxlc3lzdGVtIHdpdGggJWxsdSBibG9ja3MsIHNwZWNpZnkgaGlnaGVyIGlub2RlX3JhdGlvICgtaSlcbiIKKyJcdG9yIGxvd2VyIGlub2RlIGNvdW50ICgtTikuXG4iCittc2dzdHIgIiIKKyJ2ZWxpa29zdF9pdXpsdSAoJXUpICogcG/EjWV0X2l1emzFryAoJXUpIGplIG1vYyBuYVxuIgorIlx0c3lzdMOpbSBzb3Vib3LFryBzICUnbGx1IGJsb2t5LCB6YWRlanRlIHZ5xaHFocOtIHBvbcSbcl9pdXpsdSAoLWkpXG4iCisiXHRuZWJvIHNuacW+dGUgcG/EjWV0IGl1emzFryAoLU4pLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzeXN0ZW07IHRoaXMgY2FuIGJlIHVuZG9uZSB1c2luZyB0aGUgY29tbWFuZDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJQxZllcGlzdWppIGV4aXN0dWrDrWPDrSBzeXN0w6ltIHNvdWJvcsWvLCB0b3RvIG3Fr8W+ZSBiw710IG9kxI1pbsSbbm8gcMWZw61rYXplbTpcbiIKKyIgICBlMnVuZG8gJXMgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDMyCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHNldHVwIHVuZG8gZmlsZVxuIgorbXNnc3RyICJwxZlpIHBva3VzdSBuYXN0YXZpdCBzb3Vib3IgcHJvIG9kdm9sw6Fuw60gem3Em25cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDU4Cittc2dpZCAiRGlzY2FyZGluZyBkZXZpY2UgYmxvY2tzOiAiCittc2dzdHIgIlphaGF6dWrDrSBzZSBibG9reSB6YcWZw616ZW7DrTogIgorCisjIENvbnRpbnVhdGlvbiBvZiAiQ2FsbGluZyBCTEtESVNDQVJEIGZyb20gJWxsdSB0byAlbGx1ICIKKyM6IG1pc2MvbWtlMmZzLmM6MjQ3NAorbXNnaWQgImZhaWxlZCAtICIKK21zZ3N0ciAic2VsaGFsb8Kg4oCTICIKKworIzogbWlzYy9ta2UyZnMuYzoyNTk2Cittc2dpZCAid2hpbGUgc2V0dGluZyB1cCBzdXBlcmJsb2NrIgorbXNnc3RyICJwxZlpIG5hc3Rhdm92w6Fuw60gc3VwZXJibG9rdSIKKworIzogbWlzYy9ta2UyZnMuYzoyNjEyCittc2dpZCAiRGlzY2FyZCBzdWNjZWVkZWQgYW5kIHdpbGwgcmV0dXJuIDBzIC0gc2tpcHBpbmcgaW5vZGUgdGFibGUgd2lwZVxuIgorbXNnc3RyICIiCisiU2thcnRvdsOhbsOtIChkaXNjYXJkKSB1c3DEm2xvIGEgYnVkZSB2csOhY2VubyAwc8Kg4oCTIHZ5bmVjaMOhIHNlIHbDvW1heiB0YWJ1bGt5ICIKKyJpdXpsxa9cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3MgLSAlcyIKK21zZ3N0ciAibmV6bsOhbcO9IG9zwqDigJMgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc1MgorbXNnaWQgIkFsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAiCittc2dzdHIgIkFsb2t1asOtIHNlIHRhYnVsa3kgc2t1cGluOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2MAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBhbGxvY2F0ZSBmaWxlc3lzdGVtIHRhYmxlcyIKK21zZ3N0ciAicMWZaSBwb2t1c3UgYWxva292YXQgdGFidWxreSBzeXN0w6ltdSBzb3Vib3LFryIKKworIzogbWlzYy9ta2UyZnMuYzoyNzY5Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgY29udmVydGluZyBzdWJjbHVzdGVyIGJpdG1hcCIKK21zZ3N0ciAiIgorIlxuIgorIlx0cMWZaSBwxZlldm9kdSBiaXRtYXB5IHN1YmNsdXN0ZXLFryIKKworIzogbWlzYy9ta2UyZnMuYzoyODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgYmxvY2sgJWxsdSBhdCBlbmQgb2YgZmlsZXN5c3RlbSIKK21zZ3N0ciAicMWZaSBudWxvdsOhbsOtIGJsb2t1ICVsbHUgbmEga29uY2kgc3lzdMOpbXUgc291Ym9yxa8iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgyNgorbXNnaWQgIndoaWxlIHJlc2VydmluZyBibG9ja3MgZm9yIG9ubGluZSByZXNpemUiCittc2dzdHIgInDFmWkgcmV6ZXJ2YWNpIGJsb2vFryBwcm8gem3Em251IHZlbGlrb3N0aSB6YSBixJtodSIKKworIzogbWlzYy9ta2UyZnMuYzoyODM4IG1pc2MvdHVuZTJmcy5jOjcxMgorbXNnaWQgImpvdXJuYWwiCittc2dzdHIgIsW+dXJuw6FsIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGpvdXJuYWwgdG8gZGV2aWNlICVzOiAiCittc2dzdHIgIlDFmWlkw6F2w6FtIMW+dXJuw6FsIGsgemHFmcOtemVuw60gJXM6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBhZGQgam91cm5hbCB0byBkZXZpY2UgJXMiCittc2dzdHIgIiIKKyJcbiIKKyJcdHDFmWkgcG9rdXN1IHDFmWlkYXQgxb51cm7DoWwgayB6YcWZw616ZW7DrSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyODYyIG1pc2MvbWtlMmZzLmM6Mjg5MyBtaXNjL3R1bmUyZnMuYzo3NDEgbWlzYy90dW5lMmZzLmM6NzYwCittc2dpZCAiZG9uZVxuIgorbXNnc3RyICJob3Rvdm9cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODY5Cittc2dpZCAiU2tpcHBpbmcgam91cm5hbCBjcmVhdGlvbiBpbiBzdXBlci1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiVsKgcmXFvmltdSBqZW4tc3VwZXJkYXRhIGJ1ZGUgdnluZWNow6FuYSB0dm9yYmEgxb51cm7DoWx1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICgldSBibG9ja3MpOiAiCittc2dzdHIgIlZ5dHbDocWZw60gc2Ugxb51cm7DoWwgKCUndSBibG9rxa8pOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg4OQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCIKK21zZ3N0ciAiIgorIlxuIgorIlx0cMWZaSBwb2t1c3Ugdnl0dm/FmWl0IMW+dXJuw6FsIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MDEgbWlzYy90dW5lMmZzLmM6NTE2Cittc2dpZCAiIgorIlxuIgorIkVycm9yIHdoaWxlIGVuYWJsaW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZS4iCittc2dzdHIgIiIKKyJcbiIKKyJDaHliYSBwxZlpIHphcMOtbsOhbsOtIG9jaHJhbnkgcHJvdGkgbsOhc29ibsOpbXUgcMWZaXBvamVuw60uIgorCisjIFRPRE86IFBsdXJhbGl6ZQorIzogbWlzYy9ta2UyZnMuYzoyOTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaXMgZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZCBzZWNvbmRzLlxuIgorbXNnc3RyICIiCisiT2NocmFuYSBwcm90aSBuw6Fzb2Juw6ltdSBwxZlpcG9qZW7DrSBqZSB6YXBudXRhIHPCoGFrdHVhbGl6YcSNbsOtbSBpbnRlcnZhbGVtICVkICIKKyJzZWt1bmQuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkyMworbXNnaWQgIldyaXRpbmcgc3VwZXJibG9ja3MgYW5kIGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogIgorbXNnc3RyICJaYXBpc3VqaSBzdXBlcmJsb2t5IGEgw7rEjXRvdmFjw60gaW5mb3JtYWNlIHN5c3TDqW11IHNvdWJvcsWvOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkzMAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nLCBoYWQgdHJvdWJsZSB3cml0aW5nIG91dCBzdXBlcmJsb2Nrcy4iCittc2dzdHIgIiIKKyJcbiIKKyJWYXJvdsOhbsOtLCBtxJtsIGpzZW0gcHJvYmzDqW15IHDFmWkgesOhcGlzdSBzdXBlcmJsb2vFry4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkzMgorbXNnaWQgIiIKKyJkb25lXG4iCisiXG4iCittc2dzdHIgIiIKKyJob3Rvdm9cbiIKKyJcbiIKKworIzogbWlzYy9ta2xvc3QrZm91bmQuYzo1MAorbXNnaWQgIlVzYWdlOiBta2xvc3QrZm91bmRcbiIKK21zZ3N0ciAiUG91xb5pdMOtOiBta2xvc3QrZm91bmRcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogICVzIGRldmljZS4uLlxuIgorIlxuIgorIlByaW50cyBvdXQgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBnaXZlbiBkZXZpY2UuXG4iCisiRm9yIGV4YW1wbGU6ICVzIC9kZXYvaGRhXG4iCisiXG4iCittc2dzdHIgIiIKKyJQb3XFvml0w606ICAlcyBaQcWYw41aRU7DjeKAplxuIgorIlxuIgorIlZ5cMOtxaFlIGluZm9ybWFjZSBvwqBvZGTDrWxlY2ggbmEga2HFvmTDqW0gemFkYW7DqW0gWkHFmMONWkVOw40uXG4iCisiTmEgcMWZw61rbGFkOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJOZWx6ZSBvdGV2xZnDrXQgJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBnZW9tZXRyeSBvZiAlczogJXMiCittc2dzdHIgIk5lbHplIHrDrXNrYXQgZ2VvbWV0cmlpICVzOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgc2l6ZSBvZiAlczogJXMiCittc2dzdHIgIk5lbHplIHrDrXNrYXQgdmVsaWtvc3QgJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iCittc2dzdHIgIiVzOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIHphxI3DoXRlaz0lOGQgdmVsaWtvc3Q9JThsdSBrb25lYz0lOGRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEyCittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIlNwdXPFpXRlIHByb3PDrW0gbmEgdG9tdG8gc3lzdMOpbXUgc291Ym9yxa8gZTJmc2NrLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWMgbWF4X21vdW50c19jb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdyb3VwXVxuIgorIlx0Wy1pIGludGVydmFsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbF9vcHRpb25zXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2ZWRfYmxvY2tzX3BlcmNlbnRdIFstbyBbXl1tb3VudF9vcHRpb25zWywuLi5dXSBbLXAgIgorIm1tcF91cGRhdGVfaW50ZXJ2YWxdXG4iCisiXHRbLXIgcmVzZXJ2ZWRfYmxvY2tzX2NvdW50XSBbLXUgdXNlcl0gWy1DIG1vdW50X2NvdW50XSBbLUwgdm9sdW1lX2xhYmVsXVxuIgorIlx0Wy1NIGxhc3RfbW91bnRlZF9kaXJdIFstTyBbXl1mZWF0dXJlWywuLi5dXVxuIgorIlx0Wy1RIHF1b3RhX29wdGlvbnNdXG4iCisiXHRbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXSBbLVQgbGFzdF9jaGVja190aW1lXSBbLVUgVVVJRF1cbiIKKyJcdFsgLUkgbmV3X2lub2RlX3NpemUgXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIlBvdcW+aXTDrTogJXMgWy1jIG1heF9wb8SNZXRfcMWZaXBvamVuw61dIFstZSBjaG92w6Fuw61fcMWZaV9jaHliw6FjaF1cbiIKKyJcdFstZyBza3VwaW5hXSBbLWkgaW50ZXJ2YWxbZHxtfHddXSBbLWpdIFstSiBwxZllcMOtbmHEjWVfxb51cm7DoWx1XSBbLWxdXG4iCisiXHRbLW0gcHJvY2VudG9fcmV6ZXJ2b3ZhbsO9Y2hfYmxva8WvXSBbLW8gW15dcMWZZXDDrW5hxI1lX3DFmWlwb2plbsOtWyzigKZdXVxuIgorIlx0Wy1wIGludGVydmFsX2FrdHVhbGl6YWNlX21tcF0gWy1yIHBvxI1ldF9yZXplcnZvdmFuw71jaF9ibG9rxa9dXG4iCisiXHRbLXUgdcW+aXZhdGVsXSBbLUMgcG/EjWV0X3DFmWlwb2plbsOtXSBbLUwgam1lbm92a2Ffc3Zhemt1XVxuIgorIlx0Wy1NIHBvc2xlZG7DrV9hZHJlc8OhxZlfcMWZaXBvamVuw61dIFstTyBbXl12bGFzdG5vc3RbLOKApl1dXG4iCisiXHRbLVEgcMWZZXDDrW5hxI1lX2t2w7N0XVxuIgorIlx0Wy1FIHJvesWhw63FmWVuw70tcMWZZXDDrW5hxI1bLOKApl1dIFstVCDEjWFzX3Bvc2xlZG7DrV9rb250cm9seV0gWy1VIFVVSURdXG4iCisiXHRbLUkgbm92w6FfdmVsaWtvc3RfaXV6bHVdIHphxZnDrXplbsOtXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMworbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQhXG4iCittc2dzdHIgIlN1cGVyYmxvayDFvnVybsOhbHUgbmVuYWxlemVuIVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjEKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJwxZlpIHBva3VzdSBvdGV2xZnDrXQgZXh0ZXJuw60gxb51cm7DoWwiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI2NyBtaXNjL3R1bmUyZnMuYzoxOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIlcyBuZW7DrSB6YcWZw616ZW7DrSDFvnVybsOhbHUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI3NyBtaXNjL3R1bmUyZnMuYzoxOTc0Cittc2dpZCAiRmlsZXN5c3RlbSdzIFVVSUQgbm90IGZvdW5kIG9uIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICJVVUlEIHN5c3TDqW11IHNvdWJvcsWvIG5lbmFsZXplbm8gbmEgemHFmcOtemVuw60gxb51cm7DoWx1LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMDEKK21zZ2lkICIiCisiQ2Fubm90IGxvY2F0ZSBqb3VybmFsIGRldmljZS4gSXQgd2FzIE5PVCByZW1vdmVkXG4iCisiVXNlIC1mIG9wdGlvbiB0byByZW1vdmUgbWlzc2luZyBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIlphxZnDrXplbsOtIMW+dXJuw6FsdSBuZWx6ZSBuYWzDqXp0LiBPZHN0cmFuxJtubyBORUJZTE8uXG4iCisiQ2h5YsSbasOtY8OtIHphxZnDrXplbsOtIMW+dXJuw6FsdSBsemUgb2RlYnJhdCBwxZllcMOtbmHEjWVtIC1mLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMTAKK21zZ2lkICJKb3VybmFsIHJlbW92ZWRcbiIKK21zZ3N0ciAixb11cm7DoWwgb2RzdHJhbsSbblxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNTQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgInDFmWkgxI10ZW7DrSBiaXRtYXAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM2MgorbXNnaWQgIndoaWxlIGNsZWFyaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInDFmWkgxI1pxaF0xJtuw60gaXV6bHUgxb51cm7DoWx1IgorCisjOiBtaXNjL3R1bmUyZnMuYzozNzMKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInDFmWkgesOhcGlzdSBpdXpsdSDFvnVybsOhbHUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQwNSBtaXNjL3R1bmUyZnMuYzo0MTgKK21zZ2lkICIoYW5kIHJlYm9vdCBhZnRlcndhcmRzISlcbiIKK21zZ3N0ciAiKGEgcG8gdMOpIHJlYm9vdHVqdGUhKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiT2RzdHJhbsSbbsOtIHZsYXN0bm9zdGkgc3lzdMOpbXUgc291Ym9yxa8g4oCeJXPigJwgbmVuw60gcG9kcG9yb3bDoW5vLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICJOYXN0YXZlbsOhIHZsYXN0bm9zdGkgc3lzdMOpbXUgc291Ym9yxa8g4oCeJXPigJwgbmVuw60gcG9kcG9yb3bDoW5vLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NjcKK21zZ2lkICIiCisiVGhlIGhhc19qb3VybmFsIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiUMWZw616bmFrIGhhc19qb3VybmFsIG3Fr8W+ZSBiw710IHZ5bWF6w6FuIGplbiwga2R5xb4gamUgc3lzdMOpbSBzb3Vib3LFr1xuIgorIm9kcG9qZW4gbmVibyBwxZlpcG9qZW4gamVuIHBybyDEjXRlbsOtLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NzYKK21zZ2lkICIiCisiVGhlIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LiAgUGxlYXNlIHJ1biBlMmZzY2sgYmVmb3JlIGNsZWFyaW5nXG4iCisidGhlIGhhc19qb3VybmFsIGZsYWcuXG4iCittc2dzdHIgIiIKKyJQxZnDrXpuYWsgbmVlZHNfcmVjb3ZlcnkgamUgbmFzdGF2ZW4uIFDFmWVkIHZ5bWF6w6Fuw61tIHDFmcOtem5ha3UgaGFzX2pvdXJuYWxcbiIKKyJwcm9zw61tIHNwdXPFpXRlIGUyZnNjay5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDk1Cittc2dpZCAiIgorIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICdzcGFyc2Vfc3VwZXInIG5vdCBzdXBwb3J0ZWRcbiIKKyJmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgbWV0YV9iZyBmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKyJOYSBzb3Vib3JvdsO9Y2ggc3lzdMOpbWVjaCBzZSB6YXBudXRvdSB2bGFzdG5vc3TDrSBtZXRhX2JnIG5lbsOtIG5hc3RhdmVuw61cbiIKKyJ2bGFzdG5vc3RpIOKAnnNwYXJzZV9zdXBlcuKAnCBwb2Rwb3JvdsOhbm8uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUwOAorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbid0XG4iCisiYmUgc2V0IGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgb3JcbiIKKyJyZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJPY2hyYW51IHDFmWVkIG7DoXNvYm7DvW0gcMWZaXBvamVuw61tIG5lbHplIG5hc3Rhdml0LFxuIgorInBva3VkIGplIHN5c3TDqW0gc291Ym9yxa8gcMWZaXBvamVuIG5lYm8gamUtbGkgamVuIHBybyDEjXRlbsOtLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkcy5cbiIKK21zZ3N0ciAiIgorIk9jaHJhbmEgcMWZZWQgbsOhc29ibsO9bSBwxZlpcG9qZW7DrW0gYnlsYSB6YXBudXRhIHPCoGludGVydmFsZW0gYWt0dWFsaXphY2UgIgorIiVk4oCvcy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTM1Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2Fubm90XG4iCisiYmUgZGlzYWJsZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmVhZG9ubHkuXG4iCittc2dzdHIgIiIKKyJPY2hyYW51IHDFmWVkIG7DoXNvYm7DvW0gcMWZaWplbsOtbSBuZWx6ZSB2eXBub3V0LFxuIgorImplLWxpIHNvdWJvcm92w70gc3lzdMOpbSBqZW4gcHJvIMSNdGVuw60uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU0MworbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICJDaHliYSBwxZlpIMSNdGVuw60gYml0bWFwXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1MgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWdpYyBudW1iZXIgaW4gTU1QIGJsb2NrIGRvZXMgbm90IG1hdGNoLiBleHBlY3RlZDogJXgsIGFjdHVhbDogJXhcbiIKK21zZ3N0ciAiIgorIk1hZ2lja8OpIMSNw61zbG8gdsKgYmxva3UgTU1QIHNlIG5lc2hvZHVqZS4gT8SNZWvDoXbDoW5vOiAleCwgc2t1dGXEjW5vc3Q6ICV4XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1NworbXNnaWQgIndoaWxlIHJlYWRpbmcgTU1QIGJsb2NrLiIKK21zZ3N0ciAicMWZaSDEjXRlbsOtIGJsb2t1IE1NUC4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU4OQorbXNnaWQgIiIKKyJDbGVhcmluZyB0aGUgZmxleF9iZyBmbGFnIHdvdWxkIGNhdXNlIHRoZSB0aGUgZmlsZXN5c3RlbSB0byBiZVxuIgorImluY29uc2lzdGVudC5cbiIKK21zZ3N0ciAiIgorIk9kc3RyYW7Em27DrSBwxZnDrXpuYWt1IGZsZXhfYmcgYnkgbW9obG8genDFr3NvYml0IG5la29uemlzdGVuY2kgc3lzdMOpbXVcbiIKKyJzb3Vib3LFry5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjAwCittc2dpZCAiIgorIlRoZSBodWdlX2ZpbGUgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJQxZnDrXpuYWsgaHVnZV9maWxlIG3Fr8W+ZSBiw710IHZ5bWF6w6FuIGplbiwga2R5xb4gamUgc3lzdMOpbSBzb3Vib3LFr1xuIgorIm9kcG9qZW4gbmVibyBwxZlpcG9qZW4gamVuIHBybyDEjXRlbsOtLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NjAKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogJ15xdW90YScgb3B0aW9uIG92ZXJyaWRlcyAnLVEnYXJndW1lbnRzLlxuIgorbXNnc3RyICIiCisiXG4iCisiUG96b3I6IHDFmWVww61uYcSNIOKAnl5xdW90YeKAnCBwxZllYmlqZSBhcmd1bWVudHkg4oCe4oCTUeKAnC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzA1Cittc2dpZCAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgYSBqb3VybmFsLlxuIgorbXNnc3RyICJTeXN0w6ltIHNvdWJvcsWvIGppxb4gxb51cm7DoWwgbcOhLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBvbiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiXHRwxZlpIHBva3VzdSBvdGV2xZnDrXQgxb51cm7DoWwgbmEgJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgb24gZGV2aWNlICVzOiAiCittc2dzdHIgIlZ5dHbDocWZw60gc2Ugxb51cm7DoWwgbmEgemHFmcOtemVuw60gJXM6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGFkZGluZyBmaWxlc3lzdGVtIHRvIGpvdXJuYWwgb24gJXMiCittc2dzdHIgInDFmWkgcMWZaWTDoXbDoW7DrSBzeXN0w6ltdSBzb3Vib3LFryBkbyDFvnVybsOhbHUgbmEgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc0MworbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgaW5vZGU6ICIKK21zZ3N0ciAiVnl0dsOhxZnDrSBzZSBpdXplbCDFvnVybsOhbHU6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NzU3Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiCittc2dzdHIgIiIKKyJcbiIKKyJcdHDFmWkgcG9rdXN1IHZ5dHZvxZlpdCBzb3Vib3Igxb51cm7DoWx1IgorCisjOiBtaXNjL3R1bmUyZnMuYzo4MzIKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2UgcXVvdGEgb3B0aW9ucyFcbiIKK21zZ3N0ciAiTmVtb2h1IGFsb2tvdmF0IHBhbcSbxaUgcHJvIHpwcmFjb3bDoW7DrSBwxZllcMOtbmHEjcWvIGt2w7N0eSFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6ODU0Cittc2dpZCAiIgorIlxuIgorIkJhZCBxdW90YSBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJGb2xsb3dpbmcgdmFsaWQgcXVvdGEgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIChwYXNzIGJ5IHNlcGFyYXRpbmcgd2l0aCAiCisiY29tbWEpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJaYWTDoW55IGNoeWJuw6kgcMWZZXDDrW5hxI1lIGt2w7N0eS5cbiIKKyJcbiIKKyJOw6FzbGVkdWrDrSBkb3N0dXBuw6kgcGxhdG7DqSBwxZllcMOtbmHEjWUga3bDs3R5IChvZGTEm2x1asOtIHNlIMSNw6Fya291KTpcbiIKKyJcdFteXXVzcnF1b3RhICAoa3bDs3R5IHXFvml2YXRlbMWvKVxuIgorIlx0W15dZ3JwcXVvdGEgIChrdsOzdHkgc2t1cGluKVxuIgorIlxuIgorIlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcGFyc2UgZGF0ZS90aW1lIHNwZWNpZmllcjogJXMiCittc2dzdHIgIk5lbW9odSB6cHJhY292YXQgdXLEjWVuw60gZGF0YS/EjWFzdTogJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk0MiBtaXNjL3R1bmUyZnMuYzo5NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1vdW50cyBjb3VudCAtICVzIgorbXNnc3RyICLFoXBhdG7DvSBwb8SNZXQgcMWZaXBvamVuw60gLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBlcnJvciBiZWhhdmlvciAtICVzIgorbXNnc3RyICLFoXBhdG7DqSBjaG92w6Fuw60gcMWZaSBjaHliw6FjaCAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpZC9ncm91cCBuYW1lIC0gJXMiCittc2dzdHIgIsWhcGF0bsOpIGdpZC9qbcOpbm8gc2t1cGlueSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbnRlcnZhbCAtICVzIgorbXNnc3RyICLFoHBhdG7DvSBpbnRlcnZhbCAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9jayByYXRpbyAtICVzIgorbXNnc3RyICLFoXBhdG7DvSBwb2TDrWwgcmV6ZXJ2b3ZhbsO9Y2ggYmxva8WvIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNzUKK21zZ2lkICItbyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiLW8gbcWvxb5lIGLDvXQgemFkw6FubyBqZW4gamVkbm91IgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDg0Cittc2dpZCAiLU8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1PIG3Fr8W+ZSBiw710IHphZMOhbm8gamVuIGplZG5vdSIKKworIzogbWlzYy90dW5lMmZzLmM6MTEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IC0gJXMiCittc2dzdHIgIsWhcGF0bsO9IHBvxI1ldCByZXplcnZvdmFuw71jaCBibG9rxa8gLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdWlkL3VzZXIgbmFtZSAtICVzIgorbXNnc3RyICLFoXBhdG7DqSB1aWQvam3DqW5vIHXFvml2YXRlbGUgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTE0NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICLFoXBhdG7DoSB2ZWxpa29zdCBpdXpsdcKg4oCTICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIklub2RlIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by0gJXMiCittc2dzdHIgIlZlbGlrb3N0IGl1emx1IG11c8OtIGLDvXQgbW9jbmluYSBkdm91wqDigJMgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibW1wX3VwZGF0ZV9pbnRlcnZhbCB0b28gYmlnOiAlbHVcbiIKK21zZ3N0ciAiaW50ZXJ2YWxfYWt0dWFsaXphY2VfbW1wIGplIHDFmcOtbGnFoSB2ZWxrw706ICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZFxuIgorbXNnaWRfcGx1cmFsICIiCisiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyWzBdICIiCisiTmFzdGF2dWplIHNlIGludGVydmFsIGFrdHVhbGl6YWNlIG9jaHJhbnkgcHJvdGkgbsOhc29ibsOpbXUgcMWZaXBvamVuw60gbmEgJSdsdSAiCisic2VrdW5kdVxuIgorbXNnc3RyWzFdICIiCisiTmFzdGF2dWplIHNlIGludGVydmFsIGFrdHVhbGl6YWNlIG9jaHJhbnkgcHJvdGkgbsOhc29ibsOpbXUgcMWZaXBvamVuw60gbmEgJSdsdSAiCisic2VrdW5keVxuIgorbXNnc3RyWzJdICIiCisiTmFzdGF2dWplIHNlIGludGVydmFsIGFrdHVhbGl6YWNlIG9jaHJhbnkgcHJvdGkgbsOhc29ibsOpbXUgcMWZaXBvamVuw60gbmEgJSdsdSAiCisic2VrdW5kXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlkZTogJXNcbiIKK21zZ3N0ciAiTmVwbGF0bsO9IGtyb2t1IChzdHJpZGUpIFJBSUR1OiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpcGUtd2lkdGg6ICVzXG4iCittc2dzdHIgIk5lcGxhdG7DoSDFocOtxZlrYSBwcnVodSBSQUlEdSAoc3RyaXBlLXdpZHRoKTogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGhhc2ggYWxnb3JpdGhtOiAlc1xuIgorbXNnc3RyICJOZXBsYXRuw70gaGFzaG92YWPDrSBhbGdvcml0bXVzOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSB0byAlcyAoJWQpXG4iCittc2dzdHIgIkltcGxpY2l0bsOtIGhhc2hvdmFjw60gYWxnb3JpdG11cyBzZSBuYXN0YXZ1amUgbmEgJXMgKCVkKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzMxCittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNoIGFsZ29yaXRobT5cbiIKKyJcdG1vdW50X29wdHM9PGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucz5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBjaHVuayBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZV93aWR0aD08UkFJRCBzdHJpZGUqZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorbXNnc3RyICIiCisiXG4iCisiWmFkw6FueSDFoXBhdG7DqSBwxZllcMOtbmHEjWUuXG4iCisiXG4iCisiUm96xaHDrcWZZW7DqSBwxZllcMOtbmHEjWUgc2Ugb2RkxJtsdWrDrSDEjcOhcmthbWkgYSBtb2hvdSBtw610IGFyZ3VtZW50LCBrdGVyw70gamVcbiIKKyJcdG9kZMSbbGVuIHpuYW3DqW5rZW0gcm92bsOhIHNlICjigJ494oCcKS5cbiIKKyJcbiIKKyJQbGF0bsOpIHJvesWhw63FmWVuw6kgcMWZZXDDrW5hxI1lIGpzb3U6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNob3ZhY8OtIGFsZ29yaXRtdXM+XG4iCisiXHRtb3VudF9vcHRzPTxyb3rFocOtxZllbsOpIHDFmWVww61uYcSNZSBpbXBsaWNpdG7DrSBwxZlpIHDFmWlwb2plbsOtPlxuIgorIlx0c3RyaWRlPTx2ZWxpa29zdCBzaGx1a3UgKGNodW5rKSBuYSBqZWRub20gcmFpZG92w6ltIGRpc2t1IHbCoGJsb2PDrWNoPlxuIgorIlx0c3RyaXBlX3dpZHRoPTxrcm9rIChzdHJpZGUpIFJBSUR1ICogZGF0b3bDvWNoIGRpc2vFryB2wqBibG9jw61jaD5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdF50ZXN0X2ZzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3OTgKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBpbm9kZSBiaXRtYXBcbiIKK21zZ3N0ciAixIx0ZW7DrSBiaXRtYXB5IGl1emzFryBzZWxoYWxvLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODAzCittc2dpZCAiRmFpbGVkIHRvIHJlYWQgYmxvY2sgYml0bWFwXG4iCittc2dzdHIgIsSMdGVuw60gYml0bWFweSBibG9rxa8gc2VsaGFsb1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODIwIHJlc2l6ZS9yZXNpemUyZnMuYzo5MzEKK21zZ2lkICJibG9ja3MgdG8gYmUgbW92ZWQiCittc2dzdHIgImJsb2t5IHBybyBwxZllc3VuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODIzCittc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrIGJpdG1hcCB3aGVuIGluY3JlYXNpbmcgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICJCxJtoZW0genbEm3TFoW92w6Fuw60gaXV6bHUgc2VsaGFsYSBhbG9rYWNlIGJpdG1hcHkgYmxva8WvXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjkKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGluY3JlYXNlIGlub2RlIHNpemUgXG4iCittc2dzdHIgIk5lZG9zdGF0ZWsgbcOtc3RhIHBybyB6dsSbdMWhZW7DrSBpdXpsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODM0Cittc2dpZCAiRmFpbGVkIHRvIHJlbG9jYXRlIGJsb2NrcyBkdXJpbmcgaW5vZGUgcmVzaXplIFxuIgorbXNnc3RyICJCxJtoZW0gem3Em255IHZlbGlrb3N0aSBpdXpsdSBzZWxoYWxhIHJlYWxva2FjZSBibG9rxa9cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTg2NgorbXNnaWQgIiIKKyJFcnJvciBpbiByZXNpemluZyB0aGUgaW5vZGUgc2l6ZS5cbiIKKyJSdW4gZTJ1bmRvIHRvIHVuZG8gdGhlIGZpbGUgc3lzdGVtIGNoYW5nZXMuIFxuIgorbXNnc3RyICIiCisiQ2h5YmEgcMWZaSBtxJtuxJtuw60gdmVsaWtvc3QgaXV6bHUuXG4iCisiU3B1c8WldGUgZTJ1bmRvLCBhYnlzdGUgdnLDoXRpbGkgem3Em255IHByb3ZlZGVuw6kgbmEgc3lzdMOpbXUgc291Ym9yxa8uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4OTMKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRkYiBmaWxlbmFtZVxuIgorbXNnc3RyICJOZW1vaHUgYWxva292YXQgcGFtxJvFpSBwcm8gbsOhemV2IHNvdWJvcnUgVERCXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRlbGV0ZSAlcyIKK21zZ3N0ciAicMWZaSBwb2t1c3Ugc21hemF0ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyB1bmRvIHRoZSB0dW5lMmZzIG9wZXJhdGlvbiBwbGVhc2UgcnVuIHRoZSBjb21tYW5kXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiWm3Em255IHpwxa9zb2JlbsOpIHR1bmUyZnMgbHplIHp2csOhdGl0IHTDrW10byBwxZnDrWthemVtXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNTVAgYmxvY2sgbWFnaWMgaXMgYmFkLiBUcnkgdG8gZml4IGl0IGJ5IHJ1bm5pbmc6XG4iCisiJ2UyZnNjayAtZiAlcydcbiIKK21zZ3N0ciAiIgorIk1hZ2lja8OpIMSNw61zbG8gYmxva3UgTU1QIGplIGNoeWJuw6kuIE3Fr8W+ZXRlIGplaiB6a3VzaXQgb3ByYXZpdCBwb21vY8OtOlxuIgorIuKAnmUyZnNjayAtZiAlc+KAnFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIGlzIGFscmVhZHkgJWx1XG4iCittc2dzdHIgIlZlbGlrb3N0IGl1emx1IGppxb4gamUgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwODEKK21zZ2lkICJTaHJpbmtpbmcgaW5vZGUgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIlptZW7FoW92w6Fuw60gdmVsaWtvc3RpIGl1emx1IG5lbsOtIHBvZHBvcm92w6Fub1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaW5vZGUgc2l6ZSAlbHUgKG1heCAlZClcbiIKK21zZ3N0ciAixaFwYXRuw6EgdmVsaWtvc3QgaXV6bHUgJWx1IChtYXggJWQpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtYXhpbWFsIG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIk5hc3RhdnVqZSBzZSBtYXhpbcOhbG7DrSBwb8SNZXQgcMWZaXBvamVuw60gbmEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGN1cnJlbnQgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiTmFzdGF2dWplIHNlIGFrdHXDoWxuw60gcG/EjWV0IHDFmWlwb2plbsOtIG5hICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBlcnJvciBiZWhhdmlvciB0byAlZFxuIgorbXNnc3RyICJOYXN0YXZ1amUgc2UgY2hvdsOhbsOtIHDFmWkgY2h5YsOhY2ggbmEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBnaWQgdG8gJWx1XG4iCittc2dzdHIgIk5hc3RhdnVqZSBzZSBHSUQgcmV6ZXJ2b3ZhbsO9Y2ggYmxva8WvIG5hICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgImludGVydmFsIG1lemkga29udHJvbGFtaSBqZSBwxZnDrWxpxaEgZGxvdWjDvSAoJSdsdSkiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyICJJbnRlcnZhbCBtZXppIGtvbnRyb2xhbWkgc2UgbmFzdGF2dWplIG5hICUnbHUgc2VrdW5kXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgcGVyY2VudGFnZSB0byAlZyUlICglbGx1IGJsb2NrcylcbiIKK21zZ3N0ciAiUHJvY2VudG8gcmV6ZXJ2b3ZhbsO9Y2ggYmxva8WvIHNlIG5hc3RhdnVqZSBuYSAlZ+KAryUlICglJ2xsdSBibG9rxa8pXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIGNvdW50IGlzIHRvbyBiaWcgKCVsbHUpIgorbXNnc3RyICJwb8SNZXQgcmV6ZXJ2b3ZhbsO9Y2ggYmxva8WvIGplIHDFmcOtbGnFoSB2ZWxrw70gKCUnbGx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgIlBvxI1ldCByZXplcnZvdmFuw71jaCBibG9rxa8gc2UgbmFzdGF2dWplIG5hICUnbGx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxODcKK21zZ2lkICIiCisiXG4iCisiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgc3BhcnNlIHN1cGVyYmxvY2tzLlxuIgorbXNnc3RyICIiCisiXG4iCisiU3lzdMOpbSBzb3Vib3LFryBqacW+IG3DoSDFmcOtZGvDqSBzdXBlcmJsb2t5LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTkxCittc2dpZCAiIgorIlxuIgorIlNldHRpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZFxuIgorImZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBtZXRhX2JnIGZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk5hIHNvdWJvcm92w71jaCBzeXN0w6ltZWNoIHNlIHphcG51dG91IHZsYXN0bm9zdMOtIG1ldGFfYmcgbmVuw60gbmFzdGF2ZW7DrVxuIgorInDFmcOtem5ha3UgxZnDrWRrw6lobyBzdXBlcmJsb2t1IHBvZHBvcm92w6Fuby5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBzZXQuICAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlDFmcOtem5hayDFmcOtZGvDvWNoIHN1cGVyYmxva8WvIG5hc3RhdmVuLiAgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDcKK21zZ2lkICIiCisiXG4iCisiQ2xlYXJpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk9kc3RyYW7Em27DrSBwxZnDrXpuYWt1IMWZw61ka8OpaG8gc3VwZXJibG9rdSBuZW7DrSBwb2Rwb3JvdsOhbm8uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB0aW1lIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRvICVzXG4iCittc2dzdHIgIk5hc3RhdnVqZSBzZSDEjWFzIHBvc2xlZG7DrSBrb250cm9seSBzeXN0w6ltdSBzb3Vib3LFryBuYSAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHVpZCB0byAlbHVcbiIKK21zZ3N0ciAiTmFzdGF2dWplIHNlIFVJRCByZXplcnZvdmFuw71jaCBibG9rxa8gbmEgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNTMKK21zZ2lkICJFcnJvciBpbiB1c2luZyBjbGVhcl9tbXAuIEl0IG11c3QgYmUgdXNlZCB3aXRoIC1mXG4iCittc2dzdHIgIkNoeWJuw6kgcG91xb5pdMOtIGNsZWFyX21tcC4gSmUgdMWZZWJhIGplaiBwb3XFvsOtdCBzwqAtZlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjcxCittc2dpZCAiIgorIlRoZSBxdW90YSBmZWF0dXJlIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIlZsYXN0bm9zdCBrdsOzdHkgc23DrSBiw710IHptxJtuxJtuYSwgamVuIGtkecW+IGplIHN5c3TDqW0gc291Ym9yxa8gb2Rwb2plbi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI5MgorbXNnaWQgIlRoZSBVVUlEIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIlVVSUQgc23DrSBiw710IHptxJtuxJtubywgamVuIGtkecW+IGplIHN5c3TDqW0gc291Ym9yxa8gb2Rwb2plbi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjMyMgorbXNnaWQgIkludmFsaWQgVVVJRCBmb3JtYXRcbiIKK21zZ3N0ciAiTmVwbGF0bsO9IGZvcm3DoXQgVVVJRFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzM3Cittc2dpZCAiTmVlZCB0byB1cGRhdGUgam91cm5hbCBzdXBlcmJsb2NrLlxuIgorbXNnc3RyICJKZSB0xZllYmEgYWt0dWFsaXpvdmF0IHN1cGVyYmxvayDFvnVybsOhbHUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNTgKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICJWZWxpa29zdCBpdXpsdSBzbcOtIGLDvXQgem3Em27Em25hLCBqZW4ga2R5xb4gamUgc3lzdMOpbSBzb3Vib3LFryBvZHBvamVuLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzY2Cittc2dpZCAiIgorIkNoYW5naW5nIHRoZSBpbm9kZSBzaXplIG5vdCBzdXBwb3J0ZWQgZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIGZsZXhfYmdcbiIKKyJmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKyJOYSBzb3Vib3JvdsO9Y2ggc3lzdMOpbWVjaCBzZSB6YXBudXRvdSB2bGFzdG5vc3TDrSBmbGV4X2JnIG5lbsOtIHptxJtuYSAiCisidmVsaWtvc3RpXG4iCisiaXV6bHUgcG9kcG9yb3bDoW5hLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW5vZGUgc2l6ZSAlbHVcbiIKK21zZ3N0ciAiVmVsaWtvc3QgaXV6bHUgc2UgbmFzdGF2dWplIG5hICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzgyCittc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBpbm9kZSBzaXplXG4iCittc2dzdHIgIlptxJtuYSB2ZWxpa29zdGkgaXV6bHUgc2VsaGFsYS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlkZSBzaXplIHRvICVkXG4iCittc2dzdHIgIlZlbGlrb3N0IGtyb2t1IChzdHJpZGUpIHNlIG5hc3RhdnVqZSBuYSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaXBlIHdpZHRoIHRvICVkXG4iCittc2dzdHIgIsWgw63FmWthIHBydWh1IChzdHJpcGUgd2lkdGgpIHNlIG5hc3RhdnVqZSBuYSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zIHRvICclcydcbiIKK21zZ3N0ciAiSW1wbGljaXRuw60gcm96xaHDrcWZZW7DqSBwxZllcMOtbmHEjWUgcMWZaSBwxZnDrXBvamVuw60gc2UgbmFzdGF2dWrDrSBuYSDigJ4lc+KAnFxuIgorCisjOiBtaXNjL3V0aWwuYzo5MworbXNnaWQgIjxwcm9jZWVkaW5nPlxuIgorbXNnc3RyICI8cG9rcmHEjXVqZSBzZT5cbiIKKworIyBUT0RPOiBQbHVyYWxpemUKKyM6IG1pc2MvdXRpbC5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlByb2NlZWQgYW55d2F5IChvciB3YWl0ICVkIHNlY29uZHMpID8gKHksbikgIgorbXNnc3RyICJQxZllc3RvIHBva3JhxI1vdmF0IChuZWJvIHBvxI1rYXQgJWQgc2VrdW5kKT8gKGEsbikgIgorCisjOiBtaXNjL3V0aWwuYzoxMDEKK21zZ2lkICJQcm9jZWVkIGFueXdheT8gKHksbikgIgorbXNnc3RyICJQxZllc3RvIHBva3JhxI1vdmF0PyAoYSxuKSAiCisKKyM6IG1pc2MvdXRpbC5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW91bnRlZCBvbiAlcyBvbiAlcyIKK21zZ3N0ciAiXHRuYXBvc2xlZHkgcMWZaXBvamVubyBkbyAlcyB2wqAlcyIKKworIzogbWlzYy91dGlsLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0bGFzdCBtb3VudGVkIG9uICVzIgorbXNnc3RyICJcdG5hcG9zbGVkeSBwxZlpcG9qZW5vIHbCoCVzIgorCisjOiBtaXNjL3V0aWwuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRjcmVhdGVkIG9uICVzIgorbXNnc3RyICJcdHZ5dHZvxZllbm8gdsKgJXMiCisKKyM6IG1pc2MvdXRpbC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW9kaWZpZWQgb24gJXMiCittc2dzdHIgIlx0bmFwb3NsZWR5IHptxJtuxJtubyB2wqAlcyIKKworIzogbWlzYy91dGlsLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvdW5kIGEgJXMgcGFydGl0aW9uIHRhYmxlIGluICVzXG4iCittc2dzdHIgIk5hbGV6ZW5hIHRhYnVsa2Egcm96ZMSbbGVuw60gZGlza3UgJXMgdsKgJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBmaWxlICVzIGRvZXMgbm90IGV4aXN0IGFuZCBubyBzaXplIHdhcyBzcGVjaWZpZWQuXG4iCittc2dzdHIgIlNvdWJvciAlcyBuZWV4aXN0dWplIGEgxb7DoWRuw6EgdmVsaWtvc3QgbmVieWxhIHphZMOhbmEuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyByZWd1bGFyIGZpbGUgJXNcbiIKK21zZ3N0ciAiVnl0dsOhxZnDrSBzZSBvYnnEjWVqbsO9IHNvdWJvciAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIk5lYnlsbyBtb8W+bsOpIG90ZXbFmcOtdCAlczogJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjE2Cittc2dpZCAiIgorIlxuIgorIlRoZSBkZXZpY2UgYXBwYXJlbnRseSBkb2VzIG5vdCBleGlzdDsgZGlkIHlvdSBzcGVjaWZ5IGl0IGNvcnJlY3RseT9cbiIKK21zZ3N0ciAiIgorIlxuIgorIlphxZnDrXplbsOtIHrFmWVqbcSbIG5lZXhpc3R1amU7IHphZGFsaSBqc3RlIGplIHNwcsOhdm7Emz9cbiIKKworIzogbWlzYy91dGlsLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGJsb2NrIHNwZWNpYWwgZGV2aWNlLlxuIgorbXNnc3RyICIlcyBuZW7DrSBzcGVjacOhbG7DrSBibG9rb3bDqSB6YcWZw616ZW7DrS5cbiIKKworIzogbWlzYy91dGlsLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGNvbnRhaW5zIGEgJXMgZmlsZSBzeXN0ZW0gbGFiZWxsZWQgJyVzJ1xuIgorbXNnc3RyICIlcyBvYnNhaHVqZSBzeXN0w6ltIHNvdWJvcsWvICVzIHNlIGptZW5vdmtvdSDigJ4lc+KAnFxuIgorCisjOiBtaXNjL3V0aWwuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICIlcyBvYnNhaHVqZSBzeXN0w6ltIHNvdWJvcsWvICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBlbnRpcmUgZGV2aWNlLCBub3QganVzdCBvbmUgcGFydGl0aW9uIVxuIgorbXNnc3RyICIlcyBqZSBjZWzDqSB6YcWZw616ZW7DrSwgbmUgamVuIGplZGVuIG9kZMOtbCFcbiIKKworIzogbWlzYy91dGlsLmM6MzIzCittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIm1rZTJmcyBwxZllc3RvIHZ5bnVjZW4uIERvdWbDoW0sIMW+ZSAvZXRjL210YWIgamUgbmVzcHLDoXZuw6EuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBtYWtlIGEgJXMgaGVyZSFcbiIKK21zZ3N0ciAibmVidWR1IHRhZHkgdnl0dsOhxZlldCAlcyFcbiIKKworIzogbWlzYy91dGlsLmM6MzM1Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgIm1rZTJmcyBzdGVqbsSbIHZ5bnVjZW4uXG4iCisKKyM6IG1pc2MvdXRpbC5jOjM1MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBqb3VybmFsIG9wdGlvbnMhXG4iCittc2dzdHIgIk5lbW9odSBhbG9rb3ZhdCBwYW3Em8WlIHBybyB6cHJhY292w6Fuw60gcMWZZXDDrW5hxI3FryDFvnVybsOhbHUhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IGZpbmQgam91cm5hbCBkZXZpY2UgbWF0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5lYnlsbyBtb8W+bsOpIG5hasOtdCDFvnVybsOhbG92YWPDrSB6YcWZw616ZW7DrSBvZHBvdsOtZGFqw61jw60gJXNcbiIKKworIzogbWlzYy91dGlsLmM6NDAzCittc2dpZCAiIgorIlxuIgorIkJhZCBqb3VybmFsIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkpvdXJuYWwgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGpvdXJuYWwgb3B0aW9ucyBhcmU6XG4iCisiXHRzaXplPTxqb3VybmFsIHNpemUgaW4gbWVnYWJ5dGVzPlxuIgorIlx0ZGV2aWNlPTxqb3VybmFsIGRldmljZT5cbiIKKyJcdGxvY2F0aW9uPTxqb3VybmFsIGxvY2F0aW9uPlxuIgorIlxuIgorIlRoZSBqb3VybmFsIHNpemUgbXVzdCBiZSBiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGZpbGVzeXN0ZW0gYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiWmFkw6FueSDFoXBhdG7DqSBwxZllcMOtbmHEjWUgxb51cm7DoWx1LlxuIgorIlxuIgorIlDFmWVww61uYcSNZSDFvnVybsOhbHUgc2Ugb2RkxJtsdWrDrSDEjcOhcmthbWkgYSBtb2hvdSBtw610IGFyZ3VtZW50LCBrdGVyw70gamVcbiIKKyJcdG9kZMSbbGVuIHpuYW3DqW5rZW0gcm92bsOhIHNlICjigJ494oCcKS5cbiIKKyJcbiIKKyJQbGF0bsOpIHDFmWVww61uYcSNZSDFvnVybsOhbHUganNvdTpcbiIKKyJcdHNpemU9PHZlbGlrb3N0IMW+dXJuw6FsdSB2wqBtZWdhYmFqdGVjaD5cbiIKKyJcdGRldmljZT08emHFmcOtemVuw60gxb51cm7DoWx1PlxuIgorIlx0bG9jYXRpb249PHVtw61zdMSbbsOtIMW+dXJuw6FsdT5cbiIKKyJcbiIKKyJWZWxpa29zdCDFvnVybsOhbHUgbXVzw60gYsO9dCBtZXppIDEwMjQgYSAxMDI0MDAwMCBibG9reSBzeXN0w6ltdSBzb3Vib3LFry5cbiIKKyJcbiIKKworIzogbWlzYy91dGlsLmM6NDM0Cittc2dpZCAiIgorIlxuIgorIkZpbGVzeXN0ZW0gdG9vIHNtYWxsIGZvciBhIGpvdXJuYWxcbiIKK21zZ3N0ciAiIgorIlxuIgorIlN5c3TDqW0gc291Ym9yxa8gcMWZw61sacWhIG1hbMO9IG5hIMW+dXJuw6FsXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVGhlIHJlcXVlc3RlZCBqb3VybmFsIHNpemUgaXMgJWQgYmxvY2tzOyBpdCBtdXN0IGJlXG4iCisiYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBibG9ja3MuICBBYm9ydGluZy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlBvxb5hZG92YW7DoSB2ZWxpa29zdCDFvnVybsOhbHUgamUgJSdkIGJsb2vFrzsgbXVzw60gYsO9dFxuIgorIm1lemkgMTAyNCBhIDEwMjQwMCBibG9reS4gS29uxI3DrW0uXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQ0OQorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIHNpemUgdG9vIGJpZyBmb3IgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlZlbGlrb3N0IMW+dXJuw6FsdSBwxZnDrWxpxaEgdmVsa8OhIHBybyBzeXN0w6ltIHNvdWJvcsWvLlxuIgorCisjOiBtaXNjL3V0aWwuYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZXN5c3RlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hlY2tlZCBldmVyeSAlZCBtb3VudHMgb3JcbiIKKyIlZyBkYXlzLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuICBVc2UgdHVuZTJmcyAtYyBvciAtaSB0byBvdmVycmlkZS5cbiIKK21zZ3N0ciAiIgorIlRlbnRvIHN5c3TDqW0gc291Ym9yxa8gYnVkZSBhdXRvbWF0aWNreSBrb250cm9sb3bDoW4ga2HFvmTDvWNoICVkIHDFmWlwb2plbsOtIG5lYm9cbiIKKyIlZyBkbsOtLCBwb2RsZSB0b2hvLCBjbyBuYXN0YW5lIGTFmcOtdmUuIFBybyB6bcSbbnUgcG91xb5panRlIHR1bmUyZnMgLWMgbmVibyAtIgorImkuXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0OQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1kXSBbLXAgcGlkZmlsZV0gWy1zIHNvY2tldHBhdGhdIFstVCB0aW1lb3V0XVxuIgorbXNnc3RyICJQb3XFvml0w606ICVzIFstZF0gWy1wIFNPVUJPUl9TX1BJRF0gWy1zIENFU1RBX0tfU09DS0VUVV0gWy1UIExIxa5UQV1cbiIKKworIzogbWlzYy91dWlkZC5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyBbLXJ8dF0gWy1uIG51bV0gWy1zIHNvY2tldHBhdGhdXG4iCittc2dzdHIgIiAgICAgICAlcyBbLXJ8dF0gWy1uIFBPxIxFVF0gWy1zIENFU1RBX0tfU09DS0VUVV1cbiIKKworIzogbWlzYy91dWlkZC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyAta1xuIgorbXNnc3RyICIgICAgICAgJXMgLWtcbiIKKworIzogbWlzYy91dWlkZC5jOjE1NQorbXNnaWQgImJhZCBhcmd1bWVudHMiCittc2dzdHIgImNoeWJuw6kgYXJndW1lbnR5IgorCisjOiBtaXNjL3V1aWRkLmM6MTczCittc2dpZCAiY29ubmVjdCIKK21zZ3N0ciAicMWZaXBvamVuw60iCisKKyM6IG1pc2MvdXVpZGQuYzoxOTIKK21zZ2lkICJ3cml0ZSIKK21zZ3N0ciAiesOhcGlzIgorCisjOiBtaXNjL3V1aWRkLmM6MjAwCittc2dpZCAicmVhZCBjb3VudCIKK21zZ3N0ciAixI10ZW7DrSBwb8SNdHUiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDYKK21zZ2lkICJiYWQgcmVzcG9uc2UgbGVuZ3RoIgorbXNnc3RyICJjaHlibsOhIGTDqWxrYSBvZHBvdsSbZGkiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXVpZGQgZGFlbW9uIGFscmVhZHkgcnVubmluZyBhdCBwaWQgJXNcbiIKK21zZ3N0ciAiZMOpbW9uIHV1aWRkIGppxb4gYsSbxb7DrSBqYWtvIFBJRCAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICJOZWJ5bG8gbW/Fvm7DqSB2eXR2b8WZaXQgdW5peG92w70gcHJvdWRvdsO9IHNvY2tldDogJXMiCisKKyM6IG1pc2MvdXVpZGQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiVW5peG92w70gc29ja2V0IG5lYnlsbyBtb8W+bsOpIHDFmWlsZXBpdCBrwqAlczogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsaXN0ZW4gb24gdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIk5hIHVuaXhvdsOpbSBzb2NrZXR1ICVzIG5lYnlsbyBtb8W+bsOpIHphxI3DrXQgcG9zbG91Y2hhdDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGZyb20gY2xpZW50LCBsZW4gPSAlZFxuIgorbXNnc3RyICJDaHliYSBwxZlpIMSNdGVuw60gesKga2xpZW50YSwgZMOpbGthID0gJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVyYXRpb24gJWQsIGluY29taW5nIG51bSA9ICVkXG4iCittc2dzdHIgIm9wZXJhY2UgJWQsIHDFmcOtY2hvesOtIHBvxI1ldCA9ICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRDogJXNcbiIKK21zZ3N0ciAiVnl0dm/FmWVubyDEjWFzb3bDqSBVVUlEOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCByYW5kb20gVVVJRDogJXNcbiIKK21zZ3N0ciAiVnl0dm/FmWVubyBuw6Fob2Ruw6kgVVVJRDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCBzdWJzZXF1ZW50IFVVSURcbiIKK21zZ2lkX3BsdXJhbCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgJWQgc3Vic2VxdWVudCBVVUlEc1xuIgorbXNnc3RyWzBdICJWeXR2b8WZZW5vIMSNYXNvdsOpIFVVSUQgJXMgYSAlZCBuw6FzbGVkdWrDrWPDrVxuIgorbXNnc3RyWzFdICJWeXR2b8WZZW5vIMSNYXNvdsOpIFVVSUQgJXMgYSAlZCBuw6FzbGVkdWrDrWPDrVxuIgorbXNnc3RyWzJdICJWeXR2b8WZZW5vIMSNYXNvdsOpIFVVSUQgJXMgYSAlZCBuw6FzbGVkdWrDrWPDrWNoXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkICVkIFVVSUQnczpcbiIKK21zZ3N0ciAiVnl0dm/FmWVubyAlZCBVVUlEOlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uICVkXG4iCittc2dzdHIgIk5lcGxhdG7DoSBvcGVyYWNlICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0NzcgbWlzYy91dWlkZC5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICJDaHlibsOpIMSNw61zbG86ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MzQgbWlzYy91dWlkZC5jOjU2MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjYWxsaW5nIHV1aWRkIGRhZW1vbiAoJXMpOiAlc1xuIgorbXNnc3RyICJDaHliYSBwxZlpIHZvbMOhbsOtIGTDqW1vbmEgdXVpZGQgKCVzKTogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiVzIGEgbsOhc2xlZHVqw61jw60gJWQgVVVJRFxuIgorbXNnc3RyWzFdICIlcyBhIG7DoXNsZWR1asOtY8OtICVkIFVVSURcbiIKK21zZ3N0clsyXSAiJXMgYSBuw6FzbGVkdWrDrWPDrWNoICVkIFVVSURcbiIKKworIzogbWlzYy91dWlkZC5jOjU0OAorbXNnaWQgIkxpc3Qgb2YgVVVJRCdzOlxuIgorbXNnc3RyICJTZXpuYW0gVVVJRDpcbiIKKworIzogbWlzYy91dWlkZC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHJlcGx5IGxlbmd0aCBmcm9tIHNlcnZlciAlZFxuIgorbXNnc3RyICJOZW/EjWVrw6F2YW7DoSBkw6lsa2Egb2Rwb3bEm2RpIHplIHNlcnZlcnUgJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBraWxsIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkOiAlc1xuIgorbXNnc3RyICJOZWJ5bG8gbW/Fvm7DqSB6YWLDrXQgdXVpZGQgc8KgUElEICVkOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIktpbGxlZCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZFxuIgorbXNnc3RyICJaYWJpdCB1dWlkZCBzwqBQSUQgJWRcbiIKKworIzogbWlzYy91dWlkZ2VuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstcl0gWy10XVxuIgorbXNnc3RyICJQb3XFvml0w606ICVzIFstcl0gWy10XVxuIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAyCittc2dpZCAiIyBFeHRlbnQgZHVtcDpcbiIKK21zZ3N0ciAiIyBWw71waXMgcm96c2FodTpcbiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIjXHROdW09JWxsdSwgU2l6ZT0lbGx1LCBDdXJzb3I9JWxsdSwgU29ydGVkPSVsbHVcbiIKK21zZ3N0ciAiI1x0xIzDrXM9JWxsdSwgVmVsaWtvc3Q9JWxsdSwgS3Vyem9yPSVsbHUsIFNlxZlhemVubz0lbGx1XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBkZXZpY2UgW25ld19zaXplXVxuIgorIlxuIgorbXNnc3RyICIiCisiUG91xb5pdMOtOiAlcyBbLWQgbGFkaWPDrV9wxZllcMOtbmHEjWVdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXVxuIgorIiAgICAgICAgIHphxZnDrXplbsOtIFtub3bDoV92ZWxpa29zdF1cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo2NgorbXNnaWQgIkV4dGVuZGluZyB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIlp2xJt0xaF1amkgdGFidWxrdSBpdXpsxa8iCisKKyM6IHJlc2l6ZS9tYWluLmM6NjkKK21zZ2lkICJSZWxvY2F0aW5nIGJsb2NrcyIKK21zZ3N0ciAiUMWZZXNvdXbDoW0gYmxva3kiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzIKK21zZ2lkICJTY2FubmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiUHJvY2jDoXrDrW0gdGFidWxrdSBpdXpsxa8iCisKKyM6IHJlc2l6ZS9tYWluLmM6NzUKK21zZ2lkICJVcGRhdGluZyBpbm9kZSByZWZlcmVuY2VzIgorbXNnc3RyICJBa3R1YWxpenVqaSBvZGthenkgbmEgaXV6bHkiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzgKK21zZ2lkICJNb3ZpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIlDFmWVzb3V2w6FtIHRhYnVsa3UgaXV6bMWvIgorCisjOiByZXNpemUvbWFpbi5jOjgxCittc2dpZCAiVW5rbm93biBwYXNzPyE/IgorbXNnc3RyICJOZXpuw6Ftw70gcHLFr2Nob2Q/IT8iCisKKyM6IHJlc2l6ZS9tYWluLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVnaW4gcGFzcyAlZCAobWF4ID0gJWx1KVxuIgorbXNnc3RyICJaYcSNw6F0ZWsgcHLFr2Nob2R1ICVkIChtYXggPSAlbHUpXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MTU1Cittc2dpZCAiIgorIlxuIgorIlJlc2l6aW5nIGJpZ2FsbG9jIGZpbGUgc3lzdGVtcyBoYXMgbm90IGJlZW4gZnVsbHkgdGVzdGVkLiAgUHJvY2VlZCBhdFxuIgorInlvdXIgb3duIHJpc2shICBVc2UgdGhlIGZvcmNlIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBnbyBhaGVhZCBhbnl3YXkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJabcSbbmEgdmVsaWtvc3RpIHNvdWJvcm92w6lobyBzeXN0w6ltdSBzwqB2bGFzdG5vc3TDrSBiaWdhbGxvYyBuZW7DrSBwbG7Em1xuIgorIm90ZXN0b3bDoW5hLiBQb2tyYcSNb3bDoW7DrSBqZW4gbmEgdmxhc3Ruw60gbmViZXpwZcSNw60hIFDFmWVqZXRlLWxpIHNpIHBva3JhxI1vdmF0LFxuIgorInBvdcW+aWp0ZSBwxZllcMOtbmHEjSB2eW51Y2Vuw60uXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIG9wZW5pbmcgJXMiCittc2dzdHIgInDFmWkgb3RldsOtcsOhbsOtICVzIgorCisjOiByZXNpemUvbWFpbi5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIHN0YXQgaW5mb3JtYXRpb24gZm9yICVzIgorbXNnc3RyICJwxZlpIHpqacWhxaVvdsOhbsOtIHN0YXQgaW5mb3JtYWPDrSBvICVzIgorCisjOiByZXNpemUvbWFpbi5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1mICVzJyBmaXJzdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlNwdXPFpXRlIHByb3PDrW0gbmVqZMWZw612ZSDigJ5lMmZzY2sgLWYgJXPigJwuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGltYXRlZCBtaW5pbXVtIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW06ICVsbHVcbiIKK21zZ3N0ciAiT2RoYWRvdmFuw6EgbWluaW3DoWxuw60gdmVsaWtvc3Qgc3lzdMOpbXUgc291Ym9yxa86ICVsbHVcbiIKKworIzogcmVzaXplL21haW4uYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBuZXcgc2l6ZTogJXNcbiIKK21zZ3N0ciAiQ2h5Ym7DoSBub3bDoSB2ZWxpa29zdDogJXNcbiIKKworIzogcmVzaXplL21haW4uYzo0MjEKK21zZ2lkICJOZXcgc2l6ZSB0b28gbGFyZ2UgdG8gYmUgZXhwcmVzc2VkIGluIDMyIGJpdHNcbiIKK21zZ3N0ciAiTm92w6EgdmVsaWtvc3QgamUgcMWZw61sacWhLCBhYnkgYnlsYSB2eWrDoWTFmWVuYSB2ZSAzMiBiaXRlY2hcbiIKKworIzogcmVzaXplL21haW4uYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV3IHNpemUgc21hbGxlciB0aGFuIG1pbmltdW0gKCVsbHUpXG4iCittc2dzdHIgIk5vdsOhIHZlbGlrb3N0IGplIG1lbsWhw60gbmXFviBtaW5pbXVtICglbGx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjQzNQorbXNnaWQgIkludmFsaWQgc3RyaWRlIGxlbmd0aCIKK21zZ3N0ciAiTmVwbGF0bsOhIGTDqWxrYSBrcm9rdSIKKworIzogcmVzaXplL21haW4uYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb250YWluaW5nIHBhcnRpdGlvbiAob3IgZGV2aWNlKSBpcyBvbmx5ICVsbHUgKCVkaykgYmxvY2tzLlxuIgorIllvdSByZXF1ZXN0ZWQgYSBuZXcgc2l6ZSBvZiAlbGx1IGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRvdMSNZW7DvSBvZGTDrWwgKG5lYm8gemHFmcOtemVuw60pIGplIGplbiAlJ2xsdSAoJWRrKSBibG9rxa8gdmVsa8OpLlxuIgorIlBvxb5hZG92YWxpIGpzdGUgbm92b3UgdmVsaWtvc3QgJSdsbHUgYmxva8WvLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gaXMgYWxyZWFkeSAlbGx1ICglZGspIGJsb2NrcyBsb25nLiAgTm90aGluZyB0byBkbyFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlNvdWJvcm92w70gc3lzdMOpbSBqacW+IGplIGRsb3Vow70gJSdsbHUgKCVkaykgYmxva8WvLiBOZW7DrSBjbyBkxJtsYXQhXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICJWZWxpa29zdCBzeXN0w6ltdSBzb3Vib3LFryAlcyBzZSBtxJtuw60gbmEgJSdsbHUgKCVkaykgYmxva8WvLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcmVzaXplICVzIgorbXNnc3RyICJwxZlpIHBva3VzdSB6bcSbbml0IHZlbGlrb3N0ICVzIgorCisjOiByZXNpemUvbWFpbi5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1meSAlcycgdG8gZml4IHRoZSBmaWxlc3lzdGVtXG4iCisiYWZ0ZXIgdGhlIGFib3J0ZWQgcmVzaXplIG9wZXJhdGlvbi5cbiIKK21zZ3N0ciAiIgorIlBvIHDFmWVydcWhZW7DqSB6bcSbbsSbIHZlbGlrb3N0aSwgcHJvc8OtbSwgb3ByYXZ0ZSBzb3Vib3JvdsO9IHN5c3TDqW0gcG9tb2PDrVxuIgorIuKAnmUyZnNjayAtZnkgJXPigJxcbiIKKworIzogcmVzaXplL21haW4uYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIG9uICVzIGlzIG5vdyAlbGx1ICglZGspIGJsb2NrcyBsb25nLlxuIgorIlxuIgorbXNnc3RyICIiCisiU3lzdMOpbSBzb3Vib3LFryBuYSAlcyBqZSBueW7DrSAlJ2xsdSAoJWRrKSBibG9rxa8gZGxvdWjDvS5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHRydW5jYXRlICVzIgorbXNnc3RyICJwxZlpIHBva3VzdSB6a3LDoXRpdCAlcyIKKworIzogcmVzaXplL29ubGluZS5jOjgyCittc2dpZCAia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6ZSB3aXRoIHNwYXJzZV9zdXBlcjIiCittc2dzdHIgImrDoWRybyBuZXBvZHBvcnVqZSB6bcSbbnUgdmVsaWtvc3QgemEgYsSbaHUgc2Ugc3BhcnNlX3N1cGVyMiIKKworIzogcmVzaXplL29ubGluZS5jOjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlczsgb24tbGluZSByZXNpemluZyByZXF1aXJlZFxuIgorbXNnc3RyICIiCisiU3lzdMOpbSBzb3Vib3LFryB2ICVzIGplIHDFmWlwb2plbiBkbyAlcyxcbiIKKyJwb8W+YWRvdsOhbmEgem3Em25hIHZlbGlrb3N0aSB6YSBixJtodS5cbiIKKworIzogcmVzaXplL29ubGluZS5jOjkxCittc2dpZCAiT24tbGluZSBzaHJpbmtpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiWm1lbsWhb3bDoW7DrSB6YSBixJtodSBuZW7DrSBwb2Rwb3JvdsOhbm8iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTYKK21zZ2lkICJGaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICJTeXN0w6ltIHNvdWJvcsWvIG5lcG9kcG9ydWplIHptxJtudSB2ZWxpa29zdGkgemEgYsSbaHUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMjUKK21zZ2lkICJOb3QgZW5vdWdoIHJlc2VydmVkIGdkdCBibG9ja3MgZm9yIHJlc2l6aW5nIgorbXNnc3RyICJOZWRvc3RhdGVrIHJlemVydm92YW7DvWNoIEdEVCBibG9rxa8gcHJvIHptxJtudSB2ZWxpa29zdGkgemEgYsSbaHUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMzIKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCByZXNpemluZyBhIGZpbGUgc3lzdGVtIHRoaXMgbGFyZ2UiCittc2dzdHIgIkrDoWRybyBuZXBvZHBvcnVqZSB6bcSbbnUgdmVsaWtvc3RpIHNvdWJvcm92w6lobyBzeXN0w6ltdSBuYSB0dXRvIHZlbGlrb3N0IgorCisjOiByZXNpemUvb25saW5lLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIG1vdW50cG9pbnQgJXMiCittc2dzdHIgInDFmWkgcG9rdXN1IG90ZXbFmcOtdCBwxZnDrXBvam7DvSBib2QgJXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2xkIHJlc2l6ZSBpbnRlcmZhY2UgcmVxdWVzdGVkLlxuIgorbXNnc3RyICJWecW+w6Fkw6FubyBzdGFyw6kgcm96aHJhbsOtIHBybyB6bcSbbnUgdmVsaWtvc3RpLlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MTY0IHJlc2l6ZS9vbmxpbmUuYzoxODEKK21zZ2lkICJQZXJtaXNzaW9uIGRlbmllZCB0byByZXNpemUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiUG92b2xlbsOtIGtlIHptxJtuxJsgdmVsaWtvc3RpIHN5c3TDqW11IHNvdWJvcsWvIHphbcOtdG51dG8iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNjcgcmVzaXplL29ubGluZS5jOjE4NworbXNnaWQgIldoaWxlIGNoZWNraW5nIGZvciBvbi1saW5lIHJlc2l6aW5nIHN1cHBvcnQiCittc2dzdHIgIlDFmWkgemppxaHFpW92w6Fuw60gcG9kcG9yeSB6bcSbbnkgdmVsaWtvc3RpIHphIGLEm2h1IgorCisjOiByZXNpemUvb25saW5lLmM6MTg0Cittc2dpZCAiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICJKw6Fkcm8gbmVwb2Rwb3J1amUgem3Em251IHZlbGlrb3N0IHphIGLEm2h1IgorCisjOiByZXNpemUvb25saW5lLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlBlcmZvcm1pbmcgYW4gb24tbGluZSByZXNpemUgb2YgJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIk3Em27DrSBzZSB2ZWxpa29zdGkgemEgYsSbaHUgJXMgbmEgJSdsbHUgKCVkaykgYmxva8WvLlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MjMzCittc2dpZCAiV2hpbGUgdHJ5aW5nIHRvIGV4dGVuZCB0aGUgbGFzdCBncm91cCIKK21zZ3N0ciAiUMWZaSBwb2t1c3Ugcm96xaHDrcWZaXQgcG9zbGVkbsOtIHNrdXBpbnUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgdHJ5aW5nIHRvIGFkZCBncm91cCAjJWQiCittc2dzdHIgIlDFmWkgcG9rdXN1IHDFmWlkYXQgc2t1cGludSDEjS7CoCVkIgorCisjOiByZXNpemUvb25saW5lLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXMsIGFuZCBvbi1saW5lIHJlc2l6aW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gIgorInRoaXMgc3lzdGVtLlxuIgorbXNnc3RyICIiCisiU3lzdMOpbSBzb3Vib3LFryB2wqAlcyBqZSBwxZlpcG9qZW4gZG8gJXMgYSB6bcSbbmEgdmVsaWtvc3QgemEgYsSbaHUgbmVuw60gbmEgdG9tdG8gIgorInN5c3TDqW11IHBvZHBvcm92w6FuYS5cbiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICJpdXpsxa8gKCUnbGx1KSBtdXPDrSBiw710IG3DqW7EmyBuZcW+ICUndSIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjY5MQorbXNnaWQgInJlc2VydmVkIGJsb2NrcyIKK21zZ3N0ciAicmV6ZXJ2b3ZhbsOpIGJsb2t5IgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6OTM2Cittc2dpZCAibWV0YS1kYXRhIGJsb2NrcyIKK21zZ3N0ciAiYmxva3kgbWV0YS1kYXQiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoxMDM5IHJlc2l6ZS9yZXNpemUyZnMuYzoxODM2Cittc2dpZCAibmV3IG1ldGEgYmxvY2tzIgorbXNnc3RyICJub3bDqSBtZXRhIGJsb2t5IgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjA1NgorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW4hICBObyBzYiBpbiBsYXN0IHN1cGVyX3NwYXJzZSBiZz9cbiIKK21zZ3N0ciAiIgorIlRvdG8gYnkgbmlrZHkgbmVtxJtsbyBzdMOhdCEgxb7DoWRuw70gc3VwZXJibG9rIHbCoHBvc2xlZG7DrW0gc3VwZXJfc3BhcnNlIGJnP1xuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjA2MQorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW4hICBVbmV4cGVjdGVkIG9sZF9kZXNjIGluIHN1cGVyX3NwYXJzZSBiZz9cbiIKK21zZ3N0ciAiIgorIlRvdG8gYnkgc2UgbmlrZHkgbmVtxJtsbyBzdMOhdCEgTmVvxI1la8OhdmFuw70gb2xkX2Rlc2MgdsKgc3VwZXJfc3BhcnNlIGJnP1xuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjEzOQorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW46IHJlc2l6ZSBpbm9kZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiVG90byBieSBzZSBuaWtkeSBuZW3Em2xvIHN0w6F0OiBpdXpseSBwcm8gem3Em251IHZlbGlrb3N0aSBqc291IHBvxaFrb3plbnkhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMQorIywgZnV6enkKK21zZ2lkICJFWFQyRlMgTGlicmFyeSB2ZXJzaW9uIDEuNDIuMTMiCittc2dzdHIgIktuaWhvdm5hIEVYVDJGUyB2ZXJ6ZSAxLjQyLjEyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDJfZmlsc3lzIHN0cnVjdHVyZSIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvIHBybyBzdHJ1a3R1cnUgZXh0Ml9maWxzeXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gcHJvIHN0cnVrdHVydSBiYWRibG9ja3NfbGlzdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBiYWRibG9ja3NfaXRlcmF0ZSBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gc3RydWt0dXJ1IGJhZGJsb2Nrc19pdGVyYXRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX3NjYW4gc3RydWN0dXJlIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gcHJvIHN0cnVrdHVydSBpbm9kZV9zY2FuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gcHJvIHN0cnVrdHVydSBpb19jaGFubmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHVuaXggaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gdW5peG92b3Ugc3RydWt0dXJ1IGlvX2NoYW5uZWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fbWFuYWdlciBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gc3RydWt0dXJ1IGlvX21hbmFnZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmxvY2tfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvIHBybyBzdHJ1a3R1cnUgYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gc3RydWt0dXJ1IGlub2RlX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBnZW5lcmljX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gc3RydWt0dXJ1IGdlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHRlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gc3RydWt0dXJ1IGlvX2NoYW5uZWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZGlyZWN0b3J5IGJsb2NrIGxpc3Qgc3RydWN0dXJlIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gcHJvIHN0cnVrdHVydSBzZXpuYW11IGJsb2vFryBhZHJlc8OhxZnFryIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpY291bnQgc3RydWN0dXJlIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gcHJvIHN0cnVrdHVydSBpY291bnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgUG93ZXJxdWVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvIHBybyBzdHJ1a3R1cnUgUG93ZXJxdWVzdCBpb19jaGFubmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDIgZmlsZSBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gZXh0MiBzdHJ1a3R1cnUgc291Ym9ydSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBFeHQyIEltYWdlIEhlYWRlciIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvIHBybyBobGF2acSNa3Ugb2JyYXp1IGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGUgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gc3RydWt0dXJ1IGlvX2NoYW5uZWwgaXV6bHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgaGFuZGxlIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gcHJvIHBvcGlzb3ZhxI0gcm96c2FodSBleHQ0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgbnVtYmVyIGluIHN1cGVyLWJsb2NrIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gdsKgc3VwZXJibG9rdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMxCittc2dpZCAiRmlsZXN5c3RlbSByZXZpc2lvbiB0b28gaGlnaCIKK21zZ3N0ciAiUmV2aXplIHN5c3TDqW11IHNvdWJvcsWvIGplIHDFmcOtbGnFoSB2eXNva8OhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzIKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHRvIGZpbGVzeXN0ZW0gb3BlbmVkIHJlYWQtb25seSIKK21zZ3N0ciAiUG9rdXMgemFwc2F0IGRvIHNvdWJvcm92w6lobyBzeXN0w6ltdSwga3RlcsO9IGplIGplbiBwcm8gxI10ZW7DrSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMzCittc2dpZCAiQ2FuJ3QgcmVhZCBncm91cCBkZXNjcmlwdG9ycyIKK21zZ3N0ciAiRGVza3JpcHRvcnkgc2t1cGluIG5lbHplIHDFmWXEjcOtc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNAorbXNnaWQgIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICJEZXNrcmlwdG9yeSBza3VwaW4gbmVsemUgemFwc2F0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzUKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgYmxvY2sgYml0bWFwIgorbXNnc3RyICJQb8Wha296ZW7DvSBkZXNrcmlwdG9yIHNrdXBpbnk6IGNoeWJuw70gYmxvayBwcm8gYml0bWFwdSBibG9rxa8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNgorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSBiaXRtYXAiCittc2dzdHIgIlBvxaFrb3plbsO9IGRlc2tyaXB0b3Igc2t1cGlueTogY2h5Ym7DvSBibG9rIHBybyBiaXRtYXB1IGl1emzFryIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM3Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIHRhYmxlIgorbXNnc3RyICJQb8Wha296ZW7DvSBkZXNrcmlwdG9yIHNrdXBpbnk6IGNoeWJuw70gYmxvayBwcm8gdGFidWxrdSBpdXpsxa8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOAorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiQml0bWFwdSBpdXpsxa8gbmVsemUgemFwc2F0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiQml0bWFwdSBpdXpsxa8gbmVsemUgcMWZZcSNw61zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQwCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYSBibG9jayBiaXRtYXAiCittc2dzdHIgIkJpdG1hcHUgYmxva8WvIG5lbHplIHphcHNhdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQxCittc2dpZCAiQ2FuJ3QgcmVhZCBhIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiQml0bWFwdSBibG9rxa8gbmVsemUgcMWZZcSNw61zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQyCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIlRhYnVsa3UgaXV6bMWvIG5lbHplIHphcHNhdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQzCittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiVGFidWxrdSBpdXpsxa8gbmVsemUgcMWZZcSNw61zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ0Cittc2dpZCAiQ2FuJ3QgcmVhZCBuZXh0IGlub2RlIgorbXNnc3RyICJOw6FzbGVkdWrDrWPDrSBpdXplbCBuZWx6ZSBwxZllxI3DrXN0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDUKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bmV4cGVjdGVkIGJsb2NrIHNpemUiCittc2dzdHIgIlN5c3TDqW0gc291Ym9yxa8gbcOhIG5lxI1la2Fub3UgdmVsaWtvc3QgYmxva3UiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NgorbXNnaWQgIkVYVDIgZGlyZWN0b3J5IGNvcnJ1cHRlZCIKK21zZ3N0ciAiQWRyZXPDocWZIGV4dDIgcG/FoWtvemVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDcKK21zZ2lkICJBdHRlbXB0IHRvIHJlYWQgYmxvY2sgZnJvbSBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHJlYWQiCittc2dzdHIgIlBva3VzIHDFmWXEjcOtc3QgYmxvayB6ZSBzeXN0w6ltdSBzb3Vib3LFryB2ecO6c3RpbCB2ZSB6a3LDoWNlbsOpIMSNdGVuw60iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgYmxvY2sgdG8gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCB3cml0ZSIKK21zZ3N0ciAiUG9rdXMgemFwc2F0IGJsb2sgZG8gc3lzdMOpbXUgc291Ym9yxa8gdnnDunN0aWwgdmUgemtyw6FjZW7DvSB6w6FwaXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OQorbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gdGhlIGRpcmVjdG9yeSIKK21zZ3N0ciAiVsKgYWRyZXPDocWZaSBuZW7DrSB2b2xuw6kgbcOtc3RvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTAKK21zZ2lkICJJbm9kZSBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiQml0bWFwYSBpdXpsxa8gbmVuw60gbmHEjXRlbmEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MQorbXNnaWQgIkJsb2NrIGJpdG1hcCBub3QgbG9hZGVkIgorbXNnc3RyICJCaXRtYXBhIGJsb2vFryBuZW7DrSBuYcSNdGVuYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUyCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIiCittc2dzdHIgIk5lcGxhdG7DqSDEjcOtc2xvIGl1emx1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTMKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiTmVwbGF0bsOpIMSNw61zbG8gYmxva3UiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NAorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIgorbXNnc3RyICJWbml0xZluw60gY2h5YmEgZXh0MmZzX2V4cGFuZF9kaXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gYnVpbGQgcHJvcG9zZWQgZmlsZXN5c3RlbSIKK21zZ3N0ciAiTmVkb3N0YXRlayBtw61zdGEgcHJvIHbDvXN0YXZidSBuYXZyxb5lbsOpIHNvdWJvcm92w6lobyBzeXN0w6ltdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU2Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiRG8gZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwIHDFmWVkw6FubyB6YWvDoXphbsOpIMSNw61zbG8gYmxva3UiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiRG8gZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAgcMWZZWTDoW5vIHpha8OhemFuw6kgxI3DrXNsbyBibG9rdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiRG8gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIHDFmWVkw6FubyB6YWvDoXphbsOpIMSNw61zbG8gYmxva3UiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIkRvIGV4dDJmc19tYXJrX2lub2RlX2JpdG1hcCBwxZllZMOhbm8gemFrw6F6YW7DqSDEjcOtc2xvIGl1emx1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjAKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIkRvIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwIHDFmWVkw6FubyB6YWvDoXphbsOpIMSNw61zbG8gaXV6bHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCittc2dzdHIgIkRvIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCBwxZllZMOhbm8gemFrw6F6YW7DqSDEjcOtc2xvIGl1emx1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjIKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBibG9jayBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIlBva3VzIHBvZHZyaG5vdXQga29uZWMgYml0bWFweSBibG9rxa8gemEgc2t1dGXEjW7DvSBrb25lYyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYzCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgaW5vZGUgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICJQb2t1cyBwb2R2cmhub3V0IGtvbmVjIGJpdG1hcHkgaXV6bMWvIHphIHNrdXRlxI1uw70ga29uZWMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NAorbXNnaWQgIklsbGVnYWwgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIk5hbGV6ZW4gemFrw6F6YW7DvSBuZXDFmcOtbcO9IGJsb2siCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NQorbXNnaWQgIklsbGVnYWwgZG91Ymx5IGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICJOYWxlemVuIHpha8OhemFuw70gZHZvam7DoXNvYm7EmyBuZXDFmcOtbcO9IGJsb2siCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NgorbXNnaWQgIklsbGVnYWwgdHJpcGx5IGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICJOYWxlemUgemFrw6F6YW7DvSB0cm9qbsOhc29ibsSbIG5lcMWZw61tw70gYmxvayIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY3Cittc2dpZCAiQmxvY2sgYml0bWFwcyBhcmUgbm90IHRoZSBzYW1lIgorbXNnc3RyICJCaXRtYXB5IGJsb2vFryBzZSBuZXNob2R1asOtIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjgKK21zZ2lkICJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIkJpdG1hcHUgaXV6bMWvIHNlIG5lc2hvZHVqw60iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OQorbXNnaWQgIklsbGVnYWwgb3IgbWFsZm9ybWVkIGRldmljZSBuYW1lIgorbXNnc3RyICJaYWvDoXphbsO9IG5lYm8gY2h5Ym7EmyB1dHZvxZllbsO9IG7DoXpldiB6YcWZw616ZW7DrSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcwCittc2dpZCAiQSBibG9jayBncm91cCBpcyBtaXNzaW5nIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJTa3VwaW5hIGJsb2vFryBwb3N0csOhZMOhIHRhYnVsa3UgaXV6bMWvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzEKK21zZ2lkICJUaGUgZXh0MiBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQiCittc2dzdHIgIlN1cGVyYmxvayBleHQyIGplIHBvxaFrb3plbsO9IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzIKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIkRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIHDFmWVkw6FubyB6YWvDoXphbsOpIMSNw61zbG8gb2JlY27DvWNoIGJpdMWvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzMKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiRG8gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCBwxZllZMOhbm8gemFrw6F6YW7DqSDEjcOtc2xvIG9iZWNuw71jaCBiaXTFryIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc0Cittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICJEbyBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCBwxZllZMOhbm8gemFrw6F6YW7DqSDEjcOtc2xvIG9iZWNuw71jaCBiaXTFryIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc1Cittc2dpZCAiVG9vIG1hbnkgc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQuIgorbXNnc3RyICJaYXpuYW1lbsOhbm8gcMWZw61sacWhIG1ub2hvIHN5bWJvbGlja8O9Y2ggb2RrYXrFryIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc2Cittc2dpZCAiVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB0aGlzIGNhc2UiCittc2dzdHIgIkZ1bmtjZSB6cMSbdG7DqWhvIHZvbMOhbsOtIHRlbnRvIHDFmcOtcGFkIG5ldW3DrSBvYnNsb3XFvml0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzcKK21zZ2lkICJUaGUgaW5vZGUgaXMgZnJvbSBhIGJhZCBibG9jayBpbiB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIkl1emVsIHBvY2jDoXrDrSB6wqBjaHlibsOpaG8gYmxva3UgdGFidWxreSBpdXpsxa8iCisKKyMgVE9ETzogUGx1cmFsaXplCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzgKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpIgorbXNnc3RyICJTb3Vib3JvdsO9IHN5c3TDqW0gbcOhIG5lcG9kcG9yb3Zhbm91KMOpKSB2bGFzdG5vc3QoaSkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIHJlYWQtb25seSBmZWF0dXJlKHMpIgorbXNnc3RyICJTb3Vib3JvdsO9IHN5c3TDqW0gbcOhIG5lcG9kcG9yb3ZhbsOpIHZsYXN0bm9zdGksIGt0ZXLDqSBsemUgamVuIMSNw61zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgwCittc2dpZCAiSU8gQ2hhbm5lbCBmYWlsZWQgdG8gc2VlayBvbiByZWFkIG9yIHdyaXRlIgorbXNnc3RyICJJL08gQ2hhbm5lbCBuZWRva8OhemFsIHDFmWVzdW5vdXQgcG96aWNpIHBybyDEjXRlbsOtIG5lYm8gesOhcGlzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODEKK21zZ2lkICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIkFsb2thY2UgcGFtxJt0aSBzZWxoYWxhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkiCittc2dzdHIgIkRvIGtuaWhvdm55IGV4dDIgcMWZZWTDoW4gbmVwbGF0bsO9IGFyZ3VtZW50IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODMKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgYmxvY2sgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJWwqBzb3Vib3JvdsOpbSBzeXN0w6ltdSBleHQyIG5lYnlsbyBtb8W+bsOpIGFsb2tvdmF0IGJsb2siCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NAorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbm9kZSBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIlbCoHNvdWJvcm92w6ltIHN5c3TDqW11IGV4dDIgbmVieWxvIG1vxb5uw6kgYWxva292YXQgaXV6ZWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NQorbXNnaWQgIkV4dDIgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICJJdXplbCBleHQyIG5lbsOtIGFkcmVzw6HFmWVtIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODYKK21zZ2lkICJUb28gbWFueSByZWZlcmVuY2VzIGluIHRhYmxlIgorbXNnc3RyICJQxZnDrWxpxaEgbW5vaG8gb2RrYXrFryBkbyB0YWJ1bGt5IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODcKK21zZ2lkICJGaWxlIG5vdCBmb3VuZCBieSBleHQyX2xvb2t1cCIKK21zZ3N0ciAiRnVua2NlIGV4dDJfbG9va3VwIHNvdWJvciBuZW5hbGV6bGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OAorbXNnaWQgIkZpbGUgb3BlbiByZWFkLW9ubHkiCittc2dzdHIgIlNvdWJvciBvdGV2xZllbiBqZW4gcHJvIMSNdGVuw60iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OQorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiQmxvayBhZHJlc8OhxZllIGV4dDIgbmVuYWxlemVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTAKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiQWRyZXPDocWZIGV4dDIgamnFviBleGlzdHVqZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkxCittc2dpZCAiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iCittc2dzdHIgIk5laW1wbGVtZW50b3ZhbsOhIGZ1bmtjZSBrbmlob3ZueSBleHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTIKK21zZ2lkICJVc2VyIGNhbmNlbCByZXF1ZXN0ZWQiCittc2dzdHIgIlXFvml2YXRlbCB6cnXFoWlsIHBvxb5hZGF2ZWsiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MworbXNnaWQgIkV4dDIgZmlsZSB0b28gYmlnIgorbXNnc3RyICJTb3Vib3IgZXh0MiBqZSBwxZnDrWxpxaEgdmVsa8O9IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTQKK21zZ2lkICJTdXBwbGllZCBqb3VybmFsIGRldmljZSBub3QgYSBibG9jayBkZXZpY2UiCittc2dzdHIgIkRvZGFuw6kgxb51cm7DoWxvdmFjw60gemHFmcOtemVuw60gbmVuw60gYmxva292w71tIHphxZnDrXplbsOtbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk1Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiU3VwZXJibG9rIMW+dXJuw6FsdSBuZW5hbGV6ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NgorbXNnaWQgIkpvdXJuYWwgbXVzdCBiZSBhdCBsZWFzdCAxMDI0IGJsb2NrcyIKK21zZ3N0ciAixb11cm7DoWwgbXVzw60gbcOtdCBhc3BvxYggMTAyNCBibG9rxa8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NworbXNnaWQgIlVuc3VwcG9ydGVkIGpvdXJuYWwgdmVyc2lvbiIKK21zZ3N0ciAiTmVwb2Rwb3JvdmFuw6EgdmVyemUgxb51cm7DoWx1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTgKK21zZ2lkICJFcnJvciBsb2FkaW5nIGV4dGVybmFsIGpvdXJuYWwiCittc2dzdHIgIkNoeWJhIHDFmWkgbmHEjcOtdMOhbsOtIGV4dGVybsOtaG8gxb51cm7DoWx1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTkKK21zZ2lkICJKb3VybmFsIG5vdCBmb3VuZCIKK21zZ3N0ciAixb11cm7DoWwgbmVuYWxlemVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAwCittc2dpZCAiRGlyZWN0b3J5IGhhc2ggdW5zdXBwb3J0ZWQiCittc2dzdHIgIkhhc2ggYWRyZXPDocWZxa8gbmVwb2Rwb3JvdsOhbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMQorbXNnaWQgIklsbGVnYWwgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiTmVwbGF0bsOpIMSNw61zbG8gYmxva3Ugcm96xaHDrcWZZW7DqWhvIGF0cmlidXR1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAyCittc2dpZCAiQ2Fubm90IGNyZWF0ZSBmaWxlc3lzdGVtIHdpdGggcmVxdWVzdGVkIG51bWJlciBvZiBpbm9kZXMiCittc2dzdHIgIlNvdWJvcm92w70gc3lzdMOpbSBuZWx6ZSB2eXR2b8WZaXQgc8KgcG/FvmFkb3ZhbsO9bSBwb8SNdGVtIGl1emzFryIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMworbXNnaWQgIkUyaW1hZ2Ugc25hcHNob3Qgbm90IGluIHVzZSIKK21zZ3N0ciAiU27DrW1layBlMmltYWdlIHNlIHByw6F2xJsgbmVwb3XFvsOtdsOhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA0Cittc2dpZCAiVG9vIG1hbnkgcmVzZXJ2ZWQgZ3JvdXAgZGVzY3JpcHRvciBibG9ja3MiCittc2dzdHIgIlDFmcOtbGnFoSBtbm9obyByZXplcnZvdmFuw71jaCBibG9rxa8gZGVza3JpcHRvcsWvIHNrdXBpbnkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDUKK21zZ2lkICJSZXNpemUgaW5vZGUgaXMgY29ycnVwdCIKK21zZ3N0ciAiSXV6ZWwgdXLEjWVuw70gcHJvIHptxJtudSB2ZWxpa29zdGkgamUgcG/FoWtvemVuw70iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDYKK21zZ2lkICJUcmllZCB0byBzZXQgYmxvY2sgYm1hcCB3aXRoIG1pc3NpbmcgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIkJ5bCBwb2t1cyBuYXN0YXZpdCBiaXRtYXB1IGJsb2vFryBzwqBjaHlixJtqw61jw61tIG5lcMWZw61tw71tIGJsb2tlbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNworbXNnaWQgIlREQjogU3VjY2VzcyIKK21zZ3N0ciAiVERCOiDDmnNwxJtjaCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOAorbXNnaWQgIlREQjogQ29ycnVwdCBkYXRhYmFzZSIKK21zZ3N0ciAiVERCOiBEYXRhYsOhemUgcG/FoWtvemVuYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOQorbXNnaWQgIlREQjogSU8gRXJyb3IiCittc2dzdHIgIlREQjogQ2h5YmEgdnN0dXB1L3bDvXN0dXB1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEwCittc2dpZCAiVERCOiBMb2NraW5nIGVycm9yIgorbXNnc3RyICJUREI6IENoeWJhIHphbXlrw6Fuw60iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTEKK21zZ2lkICJUREI6IE91dCBvZiBtZW1vcnkiCittc2dzdHIgIlREQjogTmVkb3N0YXRlayBwYW3Em3RpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEyCittc2dpZCAiVERCOiBSZWNvcmQgZXhpc3RzIgorbXNnc3RyICJUREI6IFrDoXpuYW0gZXhpc3R1amUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTMKK21zZ2lkICJUREI6IExvY2sgZXhpc3RzIG9uIG90aGVyIGtleXMiCittc2dzdHIgIlREQjogWsOhbWVrIGV4aXN0dWplIG5hIGppbsOpbSBrbMOtxI1pIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE0Cittc2dpZCAiVERCOiBJbnZhbGlkIHBhcmFtZXRlciIKK21zZ3N0ciAiVERCOiBOZXBsYXRuw70gcGFyYW1ldHIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTUKK21zZ2lkICJUREI6IFJlY29yZCBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiVERCOiBaw6F6bmFtIG5lZXhpc3R1amUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTYKK21zZ2lkICJUREI6IFdyaXRlIG5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIlREQjogWsOhcGlzIG5lbsOtIHBvdm9sZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTcKK21zZ2lkICJFeHQyZnMgZGlyZWN0b3J5IGJsb2NrIGxpc3QgaXMgZW1wdHkiCittc2dzdHIgIlNlem5hbSBibG9rxa8gYWRyZXPDocWZxa8gZXh0MiBqZSBwcsOhemRuw70iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTgKK21zZ2lkICJBdHRlbXB0IHRvIG1vZGlmeSBhIGJsb2NrIG1hcHBpbmcgdmlhIGEgcmVhZC1vbmx5IGJsb2NrIGl0ZXJhdG9yIgorbXNnc3RyICJQb2t1cyB6bcSbbml0IG1hcG92w6Fuw60gYmxva8WvIHDFmWVzIGJsb2tvdsO9IGl0ZXLDoXRvciB1csSNZW7DvSBqZW4gcHJvIMSNdGVuw60iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IHNhdmVkIHBhdGgiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gdWxvxb5lbm91IGNlc3R1IGV4dDQgcm96c2FodSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGdlbmVyaWMgYml0bWFwIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gcHJvIDY0Yml0b3ZvdSBvYmVjbm91IGJpdG1hcHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBibG9jayBiaXRtYXAiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gNjRiaXRvdm91IGJpdG1hcHUgYmxva8WvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgaW5vZGUgYml0bWFwIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gcHJvIDY0Yml0b3ZvdSBiaXRtYXB1IGl1emzFryIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTMiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsb8Kg4oCTIFJFU0VSVkVEXzEzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNCIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvwqDigJMgUkVTRVJWRURfMTQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE1IgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG/CoOKAkyBSRVNFUlZFRF8xNSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTYiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsb8Kg4oCTIFJFU0VSVkVEXzE2IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNyIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvwqDigJMgUkVTRVJWRURfMTciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE4IgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG/CoOKAkyBSRVNFUlZFRF8xOCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTkiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsb8Kg4oCTIFJFU0VSVkVEXzE5IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMwCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaGVhZGVyIgorbXNnc3RyICJQb8Wha296ZW7DoSBobGF2acSNa2Egcm96c2FodSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMQorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGluZGV4IgorbXNnc3RyICJQb8Wha296ZW7DvSBpbmRleCByb3pzYWh1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMyCittc2dpZCAiQ29ycnVwdCBleHRlbnQiCittc2dzdHIgIlBvxaFrb3plbsO9IHJvenNhaCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMworbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gZXh0ZW50IG1hcCIKK21zZ3N0ciAiVsKgbWFwxJsgcm96c2Foxa8gbmV6YsO9dsOhIHZvbG7DqSBtw61zdG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzQKK21zZ2lkICJJbm9kZSBkb2VzIG5vdCB1c2UgZXh0ZW50cyIKK21zZ3N0ciAiSXV6ZWwgbmVwb3XFvsOtdsOhIHJvenNhaHkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzUKK21zZ2lkICJObyAnbmV4dCcgZXh0ZW50IgorbXNnc3RyICLFvcOhZG7DvSDigJ5kYWzFocOt4oCcIHJvenNhaCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNgorbXNnaWQgIk5vICdwcmV2aW91cycgZXh0ZW50IgorbXNnc3RyICLFvcOhZG7DoSDigJ5wxZllZGNob3rDreKAnCByb3pzYWgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzcKK21zZ2lkICJObyAndXAnIGV4dGVudCIKK21zZ3N0ciAixb3DoWRuw70g4oCebmFkxZnDrXplbsO94oCcIHJvenNhaCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOAorbXNnaWQgIk5vICdkb3duJyBleHRlbnQiCittc2dzdHIgIsW9w6FkbsO9IOKAnnBvZMWZw616ZW7DveKAnCByb3pzYWgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzkKK21zZ2lkICJObyBjdXJyZW50IG5vZGUiCittc2dzdHIgIsW9w6FkbsO9IHNvdcSNYXNuw70gdXplbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MAorbXNnaWQgIkV4dDJmcyBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiT3BlcmFjZSBleHQyIG5lbsOtIHBvZHBvcm92w6FuYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICJOZW7DrSBtw61zdG8gcHJvIHZsb8W+ZW7DrSByb3pzYWh1IGRvIHV6bHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDIKK21zZ2lkICJTcGxpdHRpbmcgd291bGQgcmVzdWx0IGluIGVtcHR5IG5vZGUiCittc2dzdHIgIlJvemTEm2xlbsOtIGJ5IHZlZGxvIGvCoHByw6F6ZG7DqW11IHV6bHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDMKK21zZ2lkICJFeHRlbnQgbm90IGZvdW5kIgorbXNnc3RyICJSb3pzYWggbmVuYWxlemVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIk9wZXJhY2UgbmEgaXV6bGVjaCBvYnNhaHVqw61jw61jaCByb3pzYWh5IG5lbsOtIHBvZHBvcm92w6FuYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiRMOpbGthIHJvenNhaHUgbmVuw60gcGxhdG7DoSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NgorbXNnaWQgIkkvTyBDaGFubmVsIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IGJsb2NrIG51bWJlcnMiCittc2dzdHIgIkkvTyBDaGFubmVsIG5lcG9kcG9ydWplIDY0Yml0b3bDoSDEjcOtc2xhIGJsb2vFryIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NworbXNnaWQgIkNhbid0IGNoZWNrIGlmIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBkdWUgdG8gbWlzc2luZyBtdGFiIGZpbGUiCittc2dzdHIgIiIKKyJLdsWvbGkgY2h5YsSbasOtY8OtbXUgc291Ym9ydSBtdGFiIG5lbHplIHpqaXN0aXQsIHpkYS1saSBqZSBzeXN0w6ltIHNvdWJvcsWvICIKKyJwxZlpcG9qZW7DvSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OAorbXNnaWQgIkZpbGVzeXN0ZW0gdG9vIGxhcmdlIHRvIHVzZSBsZWdhY3kgYml0bWFwcyIKK21zZ3N0ciAiIgorIlNvdWJvcm92w70gc3lzdMOpbSBqZSBwxZnDrWxpxaEgdmVsa8O9IG5hIHRvLCBhYnkgc2UgcG91xb5pbHkgemFzdGFyYWzDqSBiaXRtYXB5IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ5Cittc2dpZCAiTU1QOiBpbnZhbGlkIG1hZ2ljIG51bWJlciIKK21zZ3N0ciAiTU1QOiBuZXBsYXRuw6kgbWFnaWNrw6kgxI3DrXNsbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MAorbXNnaWQgIk1NUDogZGV2aWNlIGN1cnJlbnRseSBhY3RpdmUiCittc2dzdHIgIk1NUDogemHFmcOtemVuw60gamUgcHLDoXbEmyBha3Rpdm7DrSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MQorbXNnaWQgIk1NUDogZnNjayBiZWluZyBydW4iCittc2dzdHIgIk1NUDogcHLDoXbEmyBixJvFvsOtIGtvbnRyb2xhIHNvdWJvcm92w6lobyBzeXN0w6ltdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MgorbXNnaWQgIk1NUDogYmxvY2sgbnVtYmVyIGJleW9uZCBmaWxlc3lzdGVtIHJhbmdlIgorbXNnc3RyICJNTVA6IMSNw61zbG8gYmxva3Ugc2UgbmFjaMOhesOtIHphIGhyYW5pY8OtIHN5c3TDqW11IHNvdWJvcsWvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICJNTVA6IHByw6F2xJsgcHJvYsOtaMOhIG5lem7DoW3DoSBvcGVyYWNlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU0Cittc2dpZCAiTU1QOiBmaWxlc3lzdGVtIHN0aWxsIGluIHVzZSIKK21zZ3N0ciAiTU1QOiBzeXN0w6ltdSBzb3Vib3LFryBzZSBzdMOhbGUgcG91xb7DrXbDoSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NQorbXNnaWQgIk1NUDogb3BlbiB3aXRoIE9fRElSRUNUIGZhaWxlZCIKK21zZ3N0ciAiTU1QOiBvdGV2xZllbsOtIHPCoE9fRElSRUNUIHNlbGhhbG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTYKK21zZ2lkICJCbG9jayBncm91cCBkZXNjcmlwdG9yIHNpemUgaW5jb3JyZWN0IgorbXNnc3RyICJOZXNwcsOhdm7DoSB2ZWxpa29zdCBkZXNrcmlwdG9ydSBza3VwaW55IGJsb2vFryIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NworbXNnaWQgIklub2RlIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGlub2RlIgorbXNnc3RyICJLb250cm9sbsOtIHNvdcSNZXQgaXV6bHUgbmVvZHBvdsOtZMOhIGl1emx1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU4Cittc2dpZCAiSW5vZGUgYml0bWFwIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGJpdG1hcCIKK21zZ3N0ciAiS29udHJvbG7DrSBzb3XEjWV0IGJpdG1hcHkgaXV6bMWvIG5lb2Rwb3bDrWTDoSBiaXRtYXDEmyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OQorbXNnaWQgIkV4dGVudCBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBleHRlbnQgYmxvY2siCittc2dzdHIgIktvbnRyb2xuw60gc291xI1ldCBibG9rdSByb3pzYWjFryBuZW9kcG92w61kw6EgYmxva3Ugcm96c2Foxa8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjAKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgZG9lcyBub3QgaGF2ZSBzcGFjZSBmb3IgY2hlY2tzdW0iCittc2dzdHIgIkJsb2sgYWRyZXPDocWZxa8gbmVtw6EgbcOtc3RvIHBybyBrb250cm9sbsOtIHNvdcSNZXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjEKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICJLb250cm9sbsOtIHNvdcSNZXQgYmxva3UgYWRyZXPDocWZxa8gbmVvZHBvdsOtZMOhIGJsb2t1IGFkcmVzw6HFmcWvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYyCittc2dpZCAiRXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGJsb2NrIgorbXNnc3RyICJLb250cm9sbsOtIHNvdcSNZXQgYmxva3Ugcm96xaHDrcWZZW7DvWNoIGF0cmlidXTFryBuZW9kcG92w61kw6EgYmxva3UiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjMKK21zZ2lkICJTdXBlcmJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIHN1cGVyYmxvY2siCittc2dzdHIgIktvbnRyb2xuw60gc291xI1ldCBzdXBlcmJsb2t1IG5lb2Rwb3bDrWTDoSBzdXBlcmJsb2t1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY0Cittc2dpZCAiVW5rbm93biBjaGVja3N1bSBhbGdvcml0aG0iCittc2dzdHIgIk5lem7DoW3DvSBhbGdvcml0bXVzIGtvbnRyb2xuw61obyBzb3XEjXR1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY1Cittc2dpZCAiTU1QIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIE1NUCBibG9jayIKK21zZ3N0ciAiS29udHJvbG7DrSBzb3XEjWV0IGJsb2t1IE1NUCBuZW9kcG92w61kw6EgYmxva3UgTU1QIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY2Cittc2dpZCAiRXh0MiBmaWxlIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJTb3Vib3IgZXh0MiBqacW+IGV4aXN0dWplIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMQorbXNnaWQgIlByb2ZpbGUgdmVyc2lvbiAwLjAiCittc2dzdHIgIlByb2ZpbCB2ZXJ6ZSAwLjAiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEyCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfbm9kZSIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvIHbCoHByb2ZpbGVfbm9kZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTMKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gbm90IGZvdW5kIgorbXNnc3RyICJTZWtjZSBzwqBwcm9maWxlbSBuZW5hbGV6ZW5hIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNAorbXNnaWQgIlByb2ZpbGUgcmVsYXRpb24gbm90IGZvdW5kIgorbXNnc3RyICJSZWxhY2UgcHJvZmlsdSBuZW5hbGV6ZW5hIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNQorbXNnaWQgIkF0dGVtcHQgdG8gYWRkIGEgcmVsYXRpb24gdG8gbm9kZSB3aGljaCBpcyBub3QgYSBzZWN0aW9uIgorbXNnc3RyICJQb2t1cyBwxZlpZGF0IHJlbGFjaSB1emx1LCBrdGVyw70gbmVuw60gc2VrY8OtIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNgorbXNnaWQgIkEgcHJvZmlsZSBzZWN0aW9uIGhlYWRlciBoYXMgYSBub24temVybyB2YWx1ZSIKK21zZ3N0ciAiSGxhdmnEjWthIHNla2NlIHByb2ZpbHUgbcOhIG5lbnVsb3ZvdSBob2Rub3R1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNworbXNnaWQgIkJhZCBsaW5rZWQgbGlzdCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIkNoeWJuw70gesWZZXTEm3plbsO9IHNlem5hbSB2ZSBzdHJ1a3R1xZllIHByb2ZpbHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE4Cittc2dpZCAiQmFkIGdyb3VwIGxldmVsIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiQ2h5Ym7DoSDDunJvdmXFiCBza3VwaW55IHZlIHN0cnVrdHXFmWUgcHJvZmlsdSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTkKK21zZ2lkICJCYWQgcGFyZW50IHBvaW50ZXIgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICJDaHlibsO9IHVrYXphdGVsIG5hIHJvZGnEjWUgdmUgc3RydWt0dcWZZSBwcm9maWx1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlIGl0ZXJhdG9yIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gdsKgaXRlcsOhdG9ydSBwcm9maWx1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMQorbXNnaWQgIkNhbid0IHNldCB2YWx1ZSBvbiBzZWN0aW9uIG5vZGUiCittc2dzdHIgIlV6bHUgc2VrY2UgbmVsemUgbmFzdGF2aXQgaG9kbm90dSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCittc2dzdHIgIkRvIGtuaWhvdm55IHByb2ZpbHUgcMWZZWTDoW4gbmVwbGF0bsO9IGFyZ3VtZW50IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMworbXNnaWQgIkF0dGVtcHQgdG8gbW9kaWZ5IHJlYWQtb25seSBwcm9maWxlIgorbXNnc3RyICJQb2t1cyB6bcSbbml0IHByb2ZpbCwga3RlcsO9IGplIGplbiBwcm8gxI10ZW7DrSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIkhsYXZpxI1rYSBzZWtjZSBwcm9maWx1IG5lbsOtIG5hIG5lanZ5xaHFocOtIMO6cm92bmkiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI1Cittc2dpZCAiU3ludGF4IGVycm9yIGluIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIiCittc2dzdHIgIkNoeWJhIHN5bnRheGUgdmUgaGxhdmnEjWNlIHNla2NlIHByb2ZpbHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI2Cittc2dpZCAiU3ludGF4IGVycm9yIGluIHByb2ZpbGUgcmVsYXRpb24iCittc2dzdHIgIkNoeWJhIHN5bnRheGUgdsKgcmVsYWNpIHByb2ZpbHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI3Cittc2dpZCAiRXh0cmEgY2xvc2luZyBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICJOYWRieXRlxI1uw6EgdXphdsOtcmFjw60gesOhdm9ya2EgdsKgcHJvZmlsdSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjgKK21zZ2lkICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiVsKgcHJvZmlsdSBjaHliw60gb3RldsOtcmFjw60gesOhdm9ya2EiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI5Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfdCIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvIHbCoHByb2ZpbGVfdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9zZWN0aW9uX3QiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyB2wqBwcm9maWxlX3NlY3Rpb25fdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzEKK21zZ2lkICJJdGVyYXRpb24gdGhyb3VnaCBhbGwgdG9wIGxldmVsIHNlY3Rpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiUHLFr2Nob2Qgc2tyemUgdsWhZWNobnkgdnJjaG9sb3bDqSBzZWtjZSBuZW7DrSBwb2Rwb3JvdsOhbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzIKK21zZ2lkICJJbnZhbGlkIHByb2ZpbGVfc2VjdGlvbiBvYmplY3QiCittc2dzdHIgIk5lcGxhdG7DvSBvYmpla3QgcHJvZmlsZV9zZWN0aW9uIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMworbXNnaWQgIk5vIG1vcmUgc2VjdGlvbnMiCittc2dzdHIgIsW9w6FkbsOpIGRhbMWhw60gc2VrY2UiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM0Cittc2dpZCAiQmFkIG5hbWVzZXQgcGFzc2VkIHRvIHF1ZXJ5IHJvdXRpbmUiCittc2dzdHIgIkRvIGRvdGF6b3ZhY8OtIHJ1dGlueSBwxZllZMOhbmEgY2h5Ym7DoSBtbm/FvmluYSBuw6F6dsWvIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNQorbXNnaWQgIk5vIHByb2ZpbGUgZmlsZSBvcGVuIgorbXNnc3RyICLFvcOhZG7DvSBzb3Vib3Igc8KgcHJvZmlsZW0ga8Kgb3RldsWZZW7DrSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzYKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyB2wqBwcm9maWxlX2ZpbGVfdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzcKK21zZ2lkICJDb3VsZG4ndCBvcGVuIHByb2ZpbGUgZmlsZSIKK21zZ3N0ciAiU291Ym9yIHPCoHByb2ZpbGVtIG5lYnlsbyBtb8W+bsOpIG90ZXbFmcOtdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzgKK21zZ2lkICJTZWN0aW9uIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJTZWtjZSBqacW+IGV4aXN0dWplIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOQorbXNnaWQgIkludmFsaWQgYm9vbGVhbiB2YWx1ZSIKK21zZ3N0ciAiTmVwbGF0bsOhIHByYXZkaXZvc3Ruw60gaG9kbm90YSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDAKK21zZ2lkICJJbnZhbGlkIGludGVnZXIgdmFsdWUiCittc2dzdHIgIk5lcGxhdG7DoSBjZWxvxI3DrXNlbG7DoSBob2Rub3RhIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzo0MQorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX2ZpbGVfZGF0YV90IgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gdiBwcm9maWxlX2ZpbGVfZGF0YV90IgorCisjfiBtc2dpZCAiIgorI34gIlxiXGJcYlxiXGJcYlxiXGJDb3BpZWQgJWxsdSAvICVsbHUgYmxvY2tzICglbGx1JSUpIGluICVzIGF0ICUuMmYgTUIvIgorI34gInMgICAgICAgXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcYlxiXGJcYlxiXGJcYlxiWmtvcMOtcm92w6FubyAlbGx1LyVsbHUgYmxva8WvICglbGx14oCvJSUpIGRvICVzIHDFmWkgJS4yZuKAr01CLyIKKyN+ICJzICAgICAgIFxuIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIldhcm5pbmc6IHRoZSBxdW90YSBmZWF0dXJlIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50XG4iCisjfiAiU2VlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL1F1b3RhIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJQb3pvcjogdmxhc3Rub3N0IGt2w7N0eSBqZSBzdMOhbGUgdmUgdsO9dm9qaS5cbiIKKyN+ICJQb2Ryb2Jub3N0aSBuYWxlem5ldGUgbmEgPGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL1F1b3RhPi5cbiIKKyN+ICJcbiIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICVzIC0tLSAlc1xuIgorI34gbXNnc3RyICJOZW1vaHUgc3RhdCAlcyAtLS0gJXNcbiIKKworI34gbXNnaWQgIkNsZWFyaW5nIGV4dGVudCBmbGFnIG5vdCBzdXBwb3J0ZWQgb24gJXMiCisjfiBtc2dzdHIgIk9kc3RyYW7Em27DrSBwxZnDrXpuYWt1IHJvenNhaHUgbmVuw60gbmEgJXMgcG9kcG9yb3bDoW5vIgorCisjfiBtc2dpZCAiIgorI34gIiVzOiBUaGUgY29tYmluYXRpb24gb2YgZmxleF9iZyBhbmRcbiIKKyN+ICJcdCFyZXNpemVfaW5vZGUgZmVhdHVyZXMgaXMgbm90IHN1cHBvcnRlZCBieSByZXNpemUyZnMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIlczogS29tYmluYWNlIHZsYXN0bm9zdMOtIGZsZXhfYmcgYVxuIgorI34gIlx0IXJlc2l6ZV9pbm9kZSBuZW7DrSBwb2Rwb3JvdsOhbmEgbsOhc3Ryb2plbSByZXNpemUyZnMuXG4iCisKKyN+IG1zZ2lkICJAZyAlZyBAYiBAQiB1bmluaXRpYWxpemVkIGJ1dCBAaSBAQiBpbiB1c2UuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJCaXRtYXBhIGJsb2vFryBza3VwaW55ICVnIG5laW5pY2lhbGl6b3bDoW5hLCBhxI1rb2xpdiBiaXRtYXBhIGl1emzFryBqZSAiCisjfiAicG91xb5pdGEuXG4iCisKKyN+IG1zZ2lkICJAaSAlaSBzaG91bGQgbm90IGhhdmUgRU9GQkxPQ0tTX0ZMIHNldCAoc2l6ZSAlSXMsIGxibGsgJXIpXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJJdXplbCAlaSBieSBuZW3Em2wgbcOtdCBuYXN0YXZlbm8gRU9GQkxPQ0tTX0ZMICh2ZWxpa29zdCAlSXMsIGxibGsgJXIpXG4iCisKKyN+IG1zZ2lkICJDb3VsZG4ndCBkZXRlcm1pbmUgam91cm5hbCBzaXplIgorI34gbXNnc3RyICJWZWxpa29zdCDFvnVybsOhbHUgbmVsemUgdXLEjWl0IgorCisjfiBtc2dpZCAiI1x0XHQgJWxsdSAtPiAlbGx1ICglbGx1KVxuIgorI34gbXNnc3RyICIjXHRcdCAlbGx1IC0+ICVsbHUgKCVsbHUpXG4iCisKKyMgVE9ETzogTWlzc2luZy4uLiBub3QgcHJlc2VudCBpcyBkdXBsaWNhdGUKKyN+IG1zZ2lkICJNaXNzaW5nIGluZGlyZWN0IGJsb2NrIG5vdCBwcmVzZW50IgorI34gbXNnc3RyICJOZXDFmcOtbcO9IGJsb2sgbmVuw60gcMWZw610b21lbiIKKworI34gbXNnaWQgIjxUaGUgQUNMIGluZGV4IGlub2RlPiIKKyN+IG1zZ3N0ciAiPEl1emVsIGluZGV4dSBBQ0w+IgorCisjfiBtc2dpZCAiPFRoZSBBQ0wgZGF0YSBpbm9kZT4iCisjfiBtc2dzdHIgIjxJdXplbCBkYXQgQUNMPiIKKworI34gbXNnaWQgInNob3J0IHdyaXRlIChvbmx5ICVkIGJ5dGVzKSBmb3Igd3JpdGluZyBpbWFnZSBoZWFkZXIiCisjfiBtc2dzdHIgImtyw6F0a8O9IHrDoXBpcyAoamVuICVkIGJhanTFrykgcMWZaSB6w6FwaXN1IGhsYXZpxI1reSBvYnJhenUiCisKKyN+IG1zZ2lkICJpbnZhbGlkIGZyYWdtZW50IHNpemUgLSAlcyIKKyN+IG1zZ3N0ciAixaFwYXRuw6EgdmVsaWtvc3QgZnJhZ21lbnR1wqDigJMgJXMiCisKKyN+IG1zZ2lkICJXYXJuaW5nOiBmcmFnbWVudHMgbm90IHN1cHBvcnRlZC4gIElnbm9yaW5nIC1mIG9wdGlvblxuIgorI34gbXNnc3RyICJWYXJvdsOhbsOtOiBmcmFnbWVudHkgbmVwb2Rwb3JvdsOhbnkuIElnbm9ydWppIHDFmWVww61uYcSNIC1mXG4iCisKKyMgQ2FsbGluZyBpcyBzdWJqZWN0CisjfiBtc2dpZCAiQ2FsbGluZyBCTEtESVNDQVJEIGZyb20gJWxsdSB0byAlbGx1ICIKKyN+IG1zZ3N0ciAiVm9sw6Fuw60gQkxLRElTQ0FSRCBvZCAlbGx1IGRvICVsbHUgIgorCisjIENvbnRpbnVhdGlvbiBvZiAiQ2FsbGluZyBCTEtESVNDQVJEIGZyb20gJWxsdSB0byAlbGx1ICIKKyN+IG1zZ2lkICJzdWNjZWVkZWQuXG4iCisjfiBtc2dzdHIgInVzcMSbbG8uXG4iCisKKyN+IG1zZ2lkICJKb3VybmFsIE5PVCByZW1vdmVkXG4iCisjfiBtc2dzdHIgIsW9dXJuw6FsIE5FT0RTVFJBTsSaTlxuIgorCisjfiBtc2dpZCAiQFMgZG9lc24ndCBoYXZlIGhhc19AaiBmbGFnLCBidXQgaGFzIGV4dDMgQGogJXMuXG4iCisjfiBtc2dzdHIgIlN1cGVyYmxvayBuZW3DoSBwxZnDrXpuYWsgaGFzX2pvdXJuYWwsIGFsZSBtw6Egxb51cm7DoWwgZXh0MyAlcy5cbiIKKworI34gbXNnaWQgIlJlY3JlYXRlIGpvdXJuYWwgdG8gbWFrZSB0aGUgZmlsZXN5c3RlbSBleHQzIGFnYWluP1xuIgorI34gbXNnc3RyICJabm92dSB2eXR2b8WZaXQgxb51cm7DoWwsIGFieSBzZSB6w61za2FsIHpwxJt0IHNvdWJvcm92w70gc3lzdMOpbSBleHQzP1xuIgorCisjfiBtc2dpZCAiYmFkIGJsb2NrIHNpemUgLSAlcyIKKyN+IG1zZ3N0ciAixaFwYXRuw6EgdmVsaWtvc3QgYmxva3XCoOKAkyAlcyIKKworI34gbXNnaWQgIndoaWxlIHJldHJ5aW5nIHRvIHdyaXRlIGJsb2NrIGJpdG1hcHMgZm9yICVzIgorI34gbXNnc3RyICJwxZlpIG9wYWtvdmFuw6ltIHBva3VzdSB6YXBzYXQgYml0bWFweSBibG9rxa8gcHJvICVzIgorCisjfiBtc2dpZCAiJXMgZmFpbGVkIGZvciAlczogJXNcbiIKKyN+IG1zZ3N0ciAiJXMgc2VsaGFsbyBwcm8gJXM6ICVzXG4iCisKKyMgVG90byBqZSBvcGVuKDIpIHBvdcW+aXTDvSBqYWtvIHRpdHVsZWsgY2h5Ym92w6lobyBobMOhxaFlbsOtCisjfiBtc2dpZCAib3BlbiIKKyN+IG1zZ3N0ciAib3RldsOtcsOhbsOtIgorCisjfiBtc2dpZCAiSERJT19HRVRHRU8gaW9jdGwiCisjfiBtc2dzdHIgImlvY3RsIEhESU9fR0VUR0VPIgorCisjfiBtc2dpZCAiQkxLR0VUU0laRSBpb2N0bCIKKyN+IG1zZ3N0ciAiaW9jdGwgQkxLR0VUU0laRSIKKworI34gbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBAbiAobXVzdCBiZSAwKVxuIgorI34gbXNnc3RyICIiCisjfiAiUm96xaHDrcWZZW7DvSBhdHJpYnV0IHbCoGl1emx1ICVpIG3DoSBoYXNoICglTiksIGt0ZXLDvSBuZW7DrSBwbGF0bsO9IChtdXPDrSBiw710ICIKKyN+ICIwKVxuIgorCisjfiBtc2dpZCAid2hpbGUgY2FsbGluZyBpdGVyYXRvciBmdW5jdGlvbiIKKyN+IG1zZ3N0ciAicMWZaSB2b2zDoW7DrSBmdW5rY2UgaXRlcsOhdG9ydSIKKworI34gbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgaW5vZGUgYnVmZmVyIgorI34gbXNnc3RyICJwxZlpIGFsb2thY2kgdnlyb3Zuw6F2YWPDrSBwYW3Em3RpIGlub2RlIgorCisjfiBtc2dpZCAid2hpbGUgcmVhZGluZyBpbm9kZSB0YWJsZSAoZ3JvdXAgJWQpIgorI34gbXNnc3RyICJwxZlpIMSNdGVuw60gdGFidWxreSBpbm9kZSAoc2t1cGluYSAlZCkiCisKKyN+IG1zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIChncm91cCAlZCkiCisjfiBtc2dzdHIgInDFmWkgesOhcGlzdSB0YWJ1bGt5IGlub2RlIChza3VwaW5hICVkKSIKKworI34gbXNnaWQgIlBhc3MgMDogRG9pbmcgYnl0ZS1zd2FwIG9mIGZpbGVzeXN0ZW1cbiIKKyN+IG1zZ3N0ciAiUHLFr2Nob2QgMDogUHJvdsOhZMOtbSBwxZllaG96ZW7DrSBiYWp0xa8gc3lzdMOpbXUgc291Ym9yxa9cbiIKKworI34gbXNnaWQgIiIKKyN+ICIlczogdGhlIGZpbGVzeXN0ZW0gbXVzdCBiZSBmcmVzaGx5IGNoZWNrZWQgdXNpbmcgZnNja1xuIgorI34gImFuZCBub3QgbW91bnRlZCBiZWZvcmUgdHJ5aW5nIHRvIGJ5dGUtc3dhcCBpdC5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIiVzOiBzeXN0w6ltIHNvdWJvcsWvIG11c8OtIGLDvXQgcMWZZWQgcG9rdXNlbSBwxZllaG9kaXQgYmFqdHlcbiIKKyN+ICLEjWVyc3R2xJsgb3Rlc3RvdsOhbiBwb21vY8OtIGZzY2sgYSBuZXNtw60gYsO9dCBwxZlpcG9qZW4uXG4iCisKKyN+IG1zZ2lkICJCeXRlIHN3YXAiCisjfiBtc2dzdHIgIlDFmWVob3plbsOtIGJhanTFryIKKworI34gbXNnaWQgIkJ5dGUtc3dhcHBpbmcgZmlsZXN5c3RlbXMgbm90IGNvbXBpbGVkIGluIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2tcbiIKKyN+IG1zZ3N0ciAiIgorI34gIlDFmWVob3plbsOtIGJhanTFryBzeXN0w6ltxa8gc291Ym9yxa8gbmVuw60gemFidWRvdsOhbm8gdiB0w6l0byB2ZXJ6aSBlMmZzY2tcbiIKKworI34gbXNnaWQgIkluY29tcGF0aWJsZSBvcHRpb25zIG5vdCBhbGxvd2VkIHdoZW4gYnl0ZS1zd2FwcGluZy5cbiIKKyN+IG1zZ3N0ciAiUMWZaSBwxZllaG96ZW7DrSBiYWp0xa8gbmVqc291IGRvdm9sZW55IG5la29tcGF0aWJpbG7DrSBwxZllcMOtbmHEjWUuXG4iCisKKyN+IG1zZ2lkICIlczogRmlsZXN5c3RlbSBieXRlIG9yZGVyIGFscmVhZHkgbm9ybWFsaXplZC5cbiIKKyN+IG1zZ3N0ciAiJXM6IFBvxZlhZMOtIGJhanTFryBzeXN0w6ltdSBzb3Vib3LFryBqacW+IG5vcm1hbGl6b3bDoW5vLlxuIgorCisjfiBtc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAtICVzIgorI34gbXNnc3RyICLFoXBhdG7DvSBwb8SNw6F0ZcSNbsOtIGJsb2vCoOKAkyAlcyIKKworI34gbXNnaWQgIk5vdGU6IFRoaXMgaXMgYSBieXRlLXN3YXBwZWQgZmlsZXN5c3RlbVxuIgorI34gbXNnc3RyICJQb3puw6Fta2E6IFRlbnRvIHN5c3TDqW0gc291Ym9yxa8gbcOhIHDFmWVob3plbsOpIGJhanR5XG4iCisKKyN+IG1zZ2lkICIiCisjfiAiRmlsZXN5c3RlbSB0b28gbGFyZ2UuICBObyBtb3JlIHRoYW4gMioqMzEtMSBibG9ja3NcbiIKKyN+ICJcdCAoOFRCIHVzaW5nIGEgYmxvY2tzaXplIG9mIDRrKSBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJTb3Vib3JvdsO9IHN5c3TDqW0gamUgcMWZw61sacWhIHZlbGvDvS4gVsKgc291xI1hc25vc3RpIG5lbsOtIHBvZHBvcm92w6FubyB2w61jZSAiCisjfiAiamFrXG4iCisjfiAiXHQyKiozMS0xIGJsb2vFryAoOOKAr1RCIHDFmWkgNGsgYmxvY8OtY2gpLiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJXYXJuaW5nOiBzb21lIDIuNCBrZXJuZWxzIGRvIG5vdCBzdXBwb3J0IGJsb2Nrc2l6ZXMgZ3JlYXRlciB0aGFuIDQwOTZcbiIKKyN+ICJcdHVzaW5nIGV4dDMuICBVc2UgLWIgNDA5NiBpZiB0aGlzIGlzIGFuIGlzc3VlIGZvciB5b3UuXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJWYXJvdsOhbsOtOiBuxJtrdGVyw6EgasOhZHJhIHrCoMWZYWR5IDIuNCBuZXBvZHBvcnVqw60gbmEgZXh0MyBibG9reSB2xJt0xaHDrSBuZcW+ICIKKyN+ICI0MDk2XG4iCisjfiAiXHRKZS1saSB0byB2w6HFoSBwxZnDrXBhZCwgcG91xb5panRlIOKAni1iIDQwOTbigJwuXG4iCisjfiAiXG4iCisKKyN+IG1zZ2lkICJXYXJuaW5nOiAlZC1ieXRlIGlub2RlcyBub3QgdXNhYmxlIG9uIG9sZGVyIHN5c3RlbXNcbiIKKyN+IG1zZ3N0ciAiVmFyb3bDoW7DrTogJWRiYWp0b3bDqSBpdXpseSBuZWpzb3UgbmEgc3RhcsWhw61jaCBzeXN0w6ltZWNoIHBvdcW+aXRlbG7DqVxuIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSBzdXBlcmJsb2NrcyBkaXNhYmxlZC5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIlN5c3TDqW0gc291Ym9yxa8gamnFviBtw6EgxZnDrWRrw6kgc3VwZXJibG9reSB6YWvDoXrDoW55LlxuIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIlNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgY2xlYXJlZC4gICVzIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiUMWZw616bmFrIMWZw61ka8O9Y2ggc3VwZXJibG9rxa8gdnltYXrDoW4uICAlcyIKKworI34gbXNnaWQgIkNsb25lIGR1cGxpY2F0ZS9iYWQgYmxvY2tzIgorI34gbXNnc3RyICJLbG9ub3ZhdCBkdXBsaWvDoXRuw60vxaFwYXRuw6kgYmxva3kiCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiVGhpcyBpbmNvbnNpc3RlbmN5IGNhbiBub3QgYmUgZml4ZWQgd2l0aCBlMmZzY2s7IHRvIGZpeCBpdCwgdXNlXG4iCisjfiAiZHVtcGUyZnMgLWIgdG8gZHVtcCBvdXQgdGhlIGJhZCBAYiBsaXN0IGFuZCBlMmZzY2sgLUwgZmlsZW5hbWVcbiIKKyN+ICJ0byByZWFkIGl0IGJhY2sgaW4gYWdhaW4uXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJUdXRvIG5la29uemlzdGVuY2kgbmVsemUgb3ByYXZpdCBwb21vY8OtIGUyZnNjazsgb3ByYXZ0ZSBqaSBwb3XFvml0w61tXG4iCisjfiAiZHVtcGUyZnMgLWIgcHJvIHbDvXBpcyBzZXpuYW11IMWhcGF0bsO9Y2ggYmxva8WvIGEgZTJmc2NrIC1MIGptw6lub3NvdWJvcnVcbiIKKyN+ICJwcm8gamVobyBvcMSbdG92bsOpIG5hxI10ZW7DrS5cbiIKKworI34gbXNnaWQgIkVycm9yIGFsbG9jYXRpbmcgQGEgQGIgJWIuICAiCisjfiBtc2dzdHIgIkNoeWJhIHDFmWkgYWxva2FjaSBibG9rdSByb3rFocOtxZllbsO9Y2ggYXRyaWJ1dMWvICViLiAiCisKKyN+IG1zZ2lkICIiCisjfiAiRHVwbGljYXRlIEBicyBmb3VuZC4uLiBpbnZva2luZyBkdXBsaWNhdGUgQGIgcGFzc2VzLlxuIgorI34gIlBhc3MgMUI6IFJlc2NhbiBmb3IgZHVwbGljYXRlL2JhZCBAYnNcbiIKKyN+IG1zZ3N0ciAiIgorI34gIk5hbGV6ZW55IGR1cGxpa8OhdG7DrSBibG9reeKApiBzcG91xaF0w61tIHByxa9jaG9keSBwcm8gZHVwbGlrw6F0bsOtIGJsb2t5LlxuIgorI34gIlByxa9jaG9kIDFCOiBPcMSbdG92bsOpIGhsZWTDoW7DrSBkdXBsaWtvdmFuw71jaC/FoXBhdG7DvWNoIGJsb2vFr1xuIgorCisjfiBtc2dpZCAiRHVwbGljYXRlL2JhZCBAYihzKSBpbiBAaSAlaToiCisjfiBtc2dzdHIgIkR1cGxpa292YW7DvS/FoXBhdG7DvSBibG9rKHkpIHYgaW5vZGUgJWk6IgorCisjfiBtc2dpZCAiRm9yY2libHkgY2xlYXJpbmcgSFRSRUUgZmxhZyBvbiBAaSAlZCAoJXEpLiAgKEJldGEgdGVzdCBjb2RlKVxuIgorI34gbXNnc3RyICIiCisjfiAiVnludWNlbsSbIG1hxb51IHDFmcOtem5hayBIVFJFRSB2IGlub2RlICVkICglcSkuIChLw7NkIHYgYmV0YSB0ZXN0b3bDoW7DrSlcbiIKKworI34gbXNnaWQgIiIKKyN+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+IG1zZ2lkICIlOGQgbGFyZ2UgZmlsZSVzXG4iCisjfiBtc2dzdHIgIiU4ZCB2ZWxrw71jaCBzb3Vib3LFryVzXG4iCmRpZmYgLS1naXQgYS9wby9kYS5nbW8gYi9wby9kYS5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NlNjUxYwotLS0gL2Rldi9udWxsCisrKyBiL3BvL2RhLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9kYS5wbyBiL3BvL2RhLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NmY5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9wby9kYS5wbwpAQCAtMCwwICsxLDY4MzIgQEAKKyMgRTJmc3Byb2dzIHRyYW5zbGF0aW9uIHRlbXBsYXRlIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAKKyMgICAgIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIKKyMgICAgIGJ5IFRoZW9kb3JlIFRzJ28KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGUyZnNwcm9ncyBwYWNrYWdlLgorIyBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PiwgMjAxMi4KKyMgSm9lIEhhbnNlbiA8am9lZGFsdG9uMkB5YWhvby5kaz4sIDIwMTIsIDIwMTQsIDIwMTUuCisjCisjLiBUaGUgc3RyaW5ncyBpbiBlMmZzY2sncyBwcm9ibGVtLmMgY2FuIGJlIHZlcnkgaGFyZCB0byB0cmFuc2xhdGUsCisjLiBzaW5jZSB0aGUgc3RyaW5ncyBhcmUgZXhwYW5kZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgRmlyc3Qgb2YgYWxsLAorIy4gdGhlcmUgaXMgYW4gQC1leHBhbnNpb24sIHdoZXJlIHN0cmluZ3MgbGlrZSAiQGkiIGFyZSBleHBhbmRlZCB0bworIy4gImlub2RlIiwgYW5kIHNvIG9uLiAgSW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRyYW5zbGF0b3JzLCB0aGUKKyMuIGUyZnNwcm9ncyBwbyB0ZW1wbGF0ZSBmaWxlIGhhcyBiZWVuIGVuaGFuY2VkIHdpdGggY29tbWVudHMgdGhhdCBzaG93CisjLiB0aGUgQC1leHBhbnNpb24sIGZvciB0aGUgc3RyaW5ncyBpbiB0aGUgcHJvYmxlbS5jIGZpbGUuCisjLgorIy4gVHJhbnNsYXRvcnMgYXJlIGZyZWUgdG8gdXNlIHRoZSBALWV4cGFuc2lvbiBmYWNpbGl0eSBpZiB0aGV5IHNvCisjLiBjaG9vc2UsIGJ5IHByb3ZpZGluZyB0cmFuc2xhdGlvbnMgZm9yIHN0cmluZ3MgaW4gZTJmc2NrL21lc3NhZ2UuYy4KKyMuIFRoZXNlIHRyYW5zbGF0aW9uIGNhbiBjb21wbGV0ZWx5IHJlcGxhY2UgYW4gZXhwYW5zaW9uOyBmb3IgZXhhbXBsZSwKKyMuIGlmICJiYmxvY2siICh3aGljaCBpbmRpY2F0ZWQgdGhhdCAiQGIiIHdvdWxkIGJlIGV4cGFuZGVkIHRvICJibG9jayIpCisjLiBpcyB0cmFuc2xhdGVkIGFzICJkZGF0ZW52ZXJsdXN0IiwgdGhlbiAiQGQiIHdpbGwgYmUgZXhwYW5kZWQgdG8KKyMuICJkYXRlbnZlcmx1c3QiLiAgQWx0ZXJuYXRpdmVseSwgdHJhbnNsYXRvcnMgY2FuIHNpbXBseSBub3QgdXNlIHRoZQorIy4gQC1leHBhbnNpb24gZmFjaWxpdHkgYXQgYWxsLgorIy4KKyMuIFRoZSBzZWNvbmQgZXhwYW5zaW9uIHdoaWNoIGlzIGRvbmUgZm9yIGUyZnNjaydzIHByb2JsZW0uYyBtZXNzYWdlcyBpcworIy4gYSBkeW5hbWljICUtZXhwYW5zaW9uLCB3aGljaCBleHBhbmRzICVpIGFzIGFuIGlub2RlIG51bWJlciwgYW5kIHNvCisjLiBvbi4gIEEgdGFibGUgb2YgdGhlc2UgZXhwYW5zaW9ucyBjYW4gYmUgZm91bmQgYmVsb3cuICBOb3RlIHRoYXQKKyMuICUtZXhwcmVzc2lvbnMgdGhhdCBiZWdpbiB3aXRoICIlRCIgYW5kICIlSSIgYXJlIHR3by1jaGFyYWN0ZXIKKyMuIGV4cGFuc2lvbnM7IHNvIGZvciBleGFtcGxlLCAiJUl1IiBleHBhbmRzIHRvIHRoZSBpbm9kZSdzIHVzZXIgaWQKKyMuIG93bmVyc2hpcCBmaWVsZCAoaW5vZGUtPmlfdWlkKS4gIEFsc28gdGhlICIlQiIgZXhwYW5zaW9uIGlzIHNwZWNpYWw6CisjLiBpdCBjYW4gZXhwYW5kIHRvIGVpdGhlciB0aGUgc3RyaW5nICJpbmRpcmVjdCBibG9jayIgKHBvc3NpYmx5IHByZWNlZGVkCisjLiBieSB0aGUgd29yZCAiZG91YmxlIiBvciAidHJpcGxlIiksIG9yIHRoZSBzdHJpbmcgImJsb2NrICMiIGltbWVkaWF0ZWx5CisjLiBmb2xsb3dlZCBieSBhbiBpbnRlZ2VyIGluZGljYXRpbmcgYSBibG9jayBzZXF1ZW5jZSBudW1iZXIuCisjLiAgCisjLiAJJWIJPGJsaz4JCQlibG9jayBudW1iZXIKKyMuIAklQgkiaW5kaXJlY3QgYmxvY2siIHwgImJsb2NrICMiPGJsa2NvdW50PglzdHJpbmcgfCBzdHJpbmcraW50ZWdlcgorIy4gCSVjCTxibGsyPgkJCWJsb2NrIG51bWJlcgorIy4gCSVEaQk8ZGlyZW50PiAtPiBpbm8JCWlub2RlIG51bWJlcgorIy4gCSVEbgk8ZGlyZW50PiAtPiBuYW1lCXN0cmluZworIy4gCSVEcgk8ZGlyZW50PiAtPiByZWNfbGVuCisjLiAJJURsCTxkaXJlbnQ+IC0+IG5hbWVfbGVuCisjLiAJJUR0CTxkaXJlbnQ+IC0+IGZpbGV0eXBlCisjLiAJJWQJPGRpcj4gCQkJaW5vZGUgbnVtYmVyCisjLiAJJWcJPGdyb3VwPgkJCWludGVnZXIKKyMuIAklaQk8aW5vPgkJCWlub2RlIG51bWJlcgorIy4gCSVJcwk8aW5vZGU+IC0+IGlfc2l6ZQorIy4gCSVJUwk8aW5vZGU+IC0+IGlfZXh0cmFfaXNpemUKKyMuIAklSWIJPGlub2RlPiAtPiBpX2Jsb2NrcworIy4gCSVJbAk8aW5vZGU+IC0+IGlfbGlua3NfY291bnQKKyMuIAklSW0JPGlub2RlPiAtPiBpX21vZGUKKyMuIAklSU0JPGlub2RlPiAtPiBpX210aW1lCisjLiAJJUlGCTxpbm9kZT4gLT4gaV9mYWRkcgorIy4gCSVJZgk8aW5vZGU+IC0+IGlfZmlsZV9hY2wKKyMuIAklSWQJPGlub2RlPiAtPiBpX2Rpcl9hY2wKKyMuIAklSXUJPGlub2RlPiAtPiBpX3VpZAorIy4gCSVJZwk8aW5vZGU+IC0+IGlfZ2lkCisjLiAJJUl0CTxzdHI+CQkJZmlsZSB0eXBlCisjLiAJJWoJPGlubzI+CQkJaW5vZGUgbnVtYmVyCisjLiAJJW0JPGNvbV9lcnIgZXJyb3IgbWVzc2FnZT4KKyMuIAklTgk8bnVtPgorIy4gCSVwCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPgorIy4gCSVQCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIDxkaXJlbnQ+LT5pbm8gd2l0aCA8aW5vMj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuICAoSWYgZGlyZW50IGlzIE5VTEwKKyMuIAkJCQl0aGVuIHJldHVybiB0aGUgcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8yPikKKyMuIAklcQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGRpcj4KKyMuIAklUQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4gd2l0aCA8ZGlyPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4KKyMuIAklcwk8c3RyPgkJCW1pc2NlbGxhbmVvdXMgc3RyaW5nCisjLiAJJVMJCWJhY2t1cCBzdXBlcmJsb2NrCisjLiAJJVgJPG51bT4JaGV4YWRlY2ltYWwgZm9ybWF0CisjLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZTJmc3Byb2dzIDEuNDIuMTItcHJlMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiB0eXRzb0BhbHVtLm1pdC5lZHVcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wNS0xNyAyMToyNi0wNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNS0wNS0xNCAyMjowMCswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBKb2UgSGFuc2VuIDxqb2VkYWx0b24yQHlhaG9vLmRrPlxuIgorIkxhbmd1YWdlLVRlYW06IERhbmlzaCA8ZGFuc2tAZGFuc2stZ3J1cHBlbi5kaz5cbiIKKyJMYW5ndWFnZTogZGFcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjIzIG1pc2MvbWtlMmZzLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9jayAldSBvdXQgb2YgcmFuZ2U7IGlnbm9yZWQuXG4iCittc2dzdHIgIlVneWxkaWcgYmxvayAldSB1ZGVuIGZvciBpbnRlcnZhbDsgaWdub3JlcmV0XG4iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo0NgorbXNnaWQgIndoaWxlIHNhbml0eSBjaGVja2luZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAidW5kZXIgdGlscmVnbmVsaWdoZWRza29udHJvbCBhZiBkZSB1Z3lsZGlnZSBibG9ra2VzIGlrbnVkZSIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjU4Cittc2dpZCAid2hpbGUgcmVhZGluZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAidW5kZXIgbMOmc25pbmcgYWYgZGUgdWd5bGRpZ2UgYmxva2tlcyBpa251ZGUiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo3MiBlMmZzY2svc2NhbnRlc3QuYzoxMDcgZTJmc2NrL3VuaXguYzoxMzQ1CisjOiBlMmZzY2svdW5peC5jOjE0MzQgbWlzYy9iYWRibG9ja3MuYzoxMjQyIG1pc2MvYmFkYmxvY2tzLmM6MTI1MAorIzogbWlzYy9iYWRibG9ja3MuYzoxMjY0IG1pc2MvYmFkYmxvY2tzLmM6MTI3NiBtaXNjL2R1bXBlMmZzLmM6NjA0CisjOiBtaXNjL2UyaW1hZ2UuYzoxMzk2IG1pc2MvZTJpbWFnZS5jOjE1ODAgbWlzYy9lMmltYWdlLmM6MTU5OQorIzogbWlzYy9ta2UyZnMuYzoyMjcgbWlzYy90dW5lMmZzLmM6MTk1NSBtaXNjL3R1bmUyZnMuYzoyMDQ0IHJlc2l6ZS9tYWluLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICVzIgorbXNnc3RyICJ1bmRlciDDpWJuaW5nIGFmICVzIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHBvcGVuICclcyciCittc2dzdHIgInVuZGVyIHBvcGVuIGFmIMK7JXPCqyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjk0IG1pc2MvbWtlMmZzLmM6MjM0Cittc2dpZCAid2hpbGUgcmVhZGluZyBpbiBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBmaWxlIgorbXNnc3RyICJ1bmRlciBsw6ZzbmluZyBpIGxpc3RlIG92ZXIgw7hkZWxhZ3RlIGJsb2trZSBmcmEgZmlsIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTA1Cittc2dpZCAid2hpbGUgdXBkYXRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICJ1bmRlciBvcGRhdGVyaW5nIGFmIMO4ZGVsYWd0IGJsb2staWtudWRlIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGlsbGVnYWwgYmxvY2sgJXUgZm91bmQgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ2xlYXJlZC5cbiIKK21zZ3N0ciAiQWR2YXJzZWw6IFVneWxkaWcgYmxvayAldSBmdW5kZXQgaSDDuGRlbGFndCBibG9rLWlrbnVkZS4gUnlkZGV0LlxuIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICJGZWpsIHZlZCBsw6ZzbmluZyBhZiBibG9rICVsdSAoJXMpIG1lbnMgJXMuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkZlamwgdmVkIGzDpnNuaW5nIGFmIGJsb2sgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYxIGUyZnNjay9laGFuZGxlci5jOjExMAorbXNnaWQgIklnbm9yZSBlcnJvciIKK21zZ3N0ciAiSWdub3JlciBmZWpsIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MgorbXNnaWQgIkZvcmNlIHJld3JpdGUiCittc2dzdHIgIkZyZW10dmluZyBnZW5za3Jpdm5pbmciCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICJGZWpsIHZlZCBza3Jpdm5pbmcgYWYgYmxvayAlbHUgKCVzKSBtZW5zICVzLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiRmVqbCB2ZWQgc2tyaXZuaW5nIGFmIGJsb2sgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJ0b21tZSBtYXBwZWJsb2trZSIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NjIKK21zZ2lkICJlbXB0eSBkaXIgbWFwIgorbXNnc3RyICJ0b210IG1hcHBla29ydCIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZGlyZWN0b3J5IGJsb2NrICV1ICgjJWQpIGluIGlub2RlICV1XG4iCittc2dzdHIgIlRvbSBtYXBwZWJsb2sgJXUgKCMlZCkgaSBpa251ZGUgJXVcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBmaWxlbmFtZSBuYmxvY2tzIGJsb2Nrc2l6ZVxuIgorbXNnc3RyICIlczogJXMgZmlsbmF2biBuYmxvY2tlcyBibG9rc3TDuHJyZWxzZVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgb2YgYmxvY2tzIVxuIgorbXNnc3RyICJVZ3lsZGlndCBhbnRhbCBibG9ra2UhXG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIgKHNpemU9JWQpXG4iCittc2dzdHIgIkt1bm5lIGlra2UgYWxsb2tlcmUgYmxva21lbGxlbWxhZ2VyIChzaXplPSVkKVxuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIGRpc2tcbiIKK21zZ3N0ciAiQnJ1ZzogJXMgZGlza1xuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQkxLRkxTQlVGIGlvY3RsIG5vdCBzdXBwb3J0ZWQhICBDYW4ndCBmbHVzaCBidWZmZXJzLlxuIgorbXNnc3RyICJCTEtGTFNCVUYgaW9jdGwgZXIgaWtrZSB1bmRlcnN0w7h0dGV0ISBLYW4gaWtrZSB0w7htbWUgbWVsbGVtbGFncmUuXG4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLUZdIFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBkZXZpY2VcbiIKK21zZ3N0ciAiQnJ1ZzogJXMgWy1GXSBbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gZW5oZWRcbiIKKworIzogZTJmc2NrL2lzY2FuLmM6ODEgZTJmc2NrL3VuaXguYzo5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZmx1c2hpbmciCittc2dzdHIgInVuZGVyIMOlYm5pbmcgYWYgJXMgZm9yIHTDuG1uaW5nIgorCisjOiBlMmZzY2svaXNjYW4uYzo4NiBlMmZzY2svdW5peC5jOjk3OCByZXNpemUvbWFpbi5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiCittc2dzdHIgInVuZGVyIGZvcnPDuGcgcMOlIGF0IHTDuG1tZSAlcyIKKworIzogZTJmc2NrL2lzY2FuLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICclcyciCittc2dzdHIgInVuZGVyIMOlYm5pbmcgYWYgwrslc8KrIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTkgZTJmc2NrL3NjYW50ZXN0LmM6MTE0IG1pc2MvZTJpbWFnZS5jOjEyOTAKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgInVuZGVyIMOlYmluZyBhZiBpa251ZGVza2FubmluZyIKKworIzogZTJmc2NrL2lzY2FuLmM6MTI3IG1pc2MvZTJpbWFnZS5jOjEzMDkKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUiCittc2dzdHIgInVuZGVyIGluZGhlbnRlbHNlIGFmIHRla3N0aWtudWRlIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHNjYW5uZWQuXG4iCittc2dzdHIgIiV1IGlrbnVkZXIgc2thbm5ldC5cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1MjQKK21zZ2lkICJyZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICJsw6ZzbmluZyBhZiBqb3VybmFsIHN1cGVyYmxva1xuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiVzOiBpbmdlbiBneWxkaWcgam91cm5hbCBzdXBlcmJsb2sgZnVuZGV0XG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBqb3VybmFsIHRvbyBzaG9ydFxuIgorbXNnc3RyICIlczogam91cm5hbCBmb3Iga29ydFxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcmVjb3ZlcmluZyBqb3VybmFsXG4iCittc2dzdHIgIiVzOiBnZW5za2FiZXIgam91cm5hbFxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogd29uJ3QgZG8gam91cm5hbCByZWNvdmVyeSB3aGlsZSByZWFkLW9ubHlcbiIKK21zZ3N0ciAiJXM6IHVkZsO4cmVyIGlra2Ugam91cm5hbGdlbmRhbm5lbHNlIG7DpXIgc2tyaXZlYmVza3l0dGV0XG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICJ1bmRlciBmb3Jzw7hnIHDDpSBhdCBnZW7DpWJuZSAlcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTMKK21zZ2lkICJhZXh0ZW5kZWQgYXR0cmlidXRlIgorbXNnc3RyICJhdWR2aWRldCBhdHRyaWJ1dCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTQKK21zZ2lkICJBZXJyb3IgYWxsb2NhdGluZyIKK21zZ3N0ciAiQWZlamxhbGxva2VyaW5nIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNQorbXNnaWQgImJibG9jayIKK21zZ3N0ciAiYmJsb2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE2Cittc2dpZCAiQmJpdG1hcCIKK21zZ3N0ciAiQmJpdG1hcCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTcKK21zZ2lkICJjY29tcHJlc3MiCittc2dzdHIgImNrb21wcmltZXIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE4Cittc2dpZCAiQ2NvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgQGIiCittc2dzdHIgIkNlciBpIGtvbmZsaWt0IG1lZCBub2dsZSBhbmRyZSBmaWxzeXN0ZW1ibG9ra2UiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE5Cittc2dpZCAiZGRpcmVjdG9yeSIKK21zZ3N0ciAiZG1hcHBlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMAorbXNnaWQgIkRkZWxldGVkIgorbXNnc3RyICJEc2xldHRldCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjEKK21zZ2lkICJlZW50cnkiCittc2dzdHIgImVwb3N0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMgorbXNnaWQgIkVAZSAnJURuJyBpbiAlcCAoJWkpIgorbXNnc3RyICJFQGUgwrslRG7CqyBpICVwICglaSkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIzCittc2dpZCAiZmZpbGVzeXN0ZW0iCittc2dzdHIgImZmaWxzeXN0ZW0iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI0Cittc2dpZCAiRmZvciBAaSAlaSAoJVEpIGlzIgorbXNnc3RyICJGZm9yIEBpICVpICglUSkgZXIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI1Cittc2dpZCAiZ2dyb3VwIgorbXNnc3RyICJnZ3J1cHBlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNgorbXNnaWQgImhIVFJFRSBAZCBAaSIKK21zZ3N0ciAiaEhUUkVFIEBkIEBpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNworbXNnaWQgImlpbm9kZSIKK21zZ3N0ciAiaWlrbnVkZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjgKK21zZ2lkICJJaWxsZWdhbCIKK21zZ3N0ciAiSWlsbGVnYWwiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI5Cittc2dpZCAiampvdXJuYWwiCittc2dzdHIgImpqb3VybmFsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMAorbXNnaWQgImxsb3N0K2ZvdW5kIgorbXNnc3RyICJsdGFidCtmdW5kZXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMxCittc2dpZCAiTGlzIGEgbGluayIKK21zZ3N0ciAiTGVyIGVuIGhlbnZpc25pbmciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMyCittc2dpZCAibW11bHRpcGx5LWNsYWltZWQiCittc2dzdHIgIm1tdWx0aXBsaWNlcmUta3LDpnZldCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzMKK21zZ2lkICJuaW52YWxpZCIKK21zZ3N0ciAibnVneWxkaWciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM0Cittc2dpZCAib29ycGhhbmVkIgorbXNnc3RyICJvZm9yw6ZsZHJlbMO4cyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzUKK21zZ2lkICJwcHJvYmxlbSBpbiIKK21zZ3N0ciAicHByb2JsZW0gaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgInFrdm90YSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAicnJvb3QgQGkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM4Cittc2dpZCAic3Nob3VsZCBiZSIKK21zZ3N0ciAic2LDuHIgdsOmcmUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM5Cittc2dpZCAiU3N1cGVyQGIiCittc2dzdHIgIlNzdXBlckBiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MAorbXNnaWQgInV1bmF0dGFjaGVkIgorbXNnc3RyICJ1aWtrZSBmb3JidW5kZXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQxCittc2dpZCAidmRldmljZSIKK21zZ3N0ciAidmVuaGVkIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MgorbXNnaWQgInhleHRlbnQiCittc2dzdHIgInh1ZHZpZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDMKK21zZ2lkICJ6emVyby1sZW5ndGgiCittc2dzdHIgInpudWwtbMOmbmdkZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTQKK21zZ2lkICI8VGhlIE5VTEwgaW5vZGU+IgorbXNnc3RyICI8TlVMTC1pa251ZGVuPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTUKK21zZ2lkICI8VGhlIGJhZCBibG9ja3MgaW5vZGU+IgorbXNnc3RyICI8RGUgdWd5bGRpZ2UgYmxva2tlcyBpa251ZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NworbXNnaWQgIjxUaGUgdXNlciBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxCcnVnZXJrdm90YWVucyBpa251ZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OAorbXNnaWQgIjxUaGUgZ3JvdXAgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8R3J1cHBla3ZvdGFlbnMgaWtudWRlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTkKK21zZ2lkICI8VGhlIGJvb3QgbG9hZGVyIGlub2RlPiIKK21zZ3N0ciAiPE9wc3RhcnRzaW5kbMOmc2VyZW5zIGlrbnVkZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICI8Rm9ydHJ5ZCBtYXBwZS1pa251ZGVuIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MQorbXNnaWQgIjxUaGUgZ3JvdXAgZGVzY3JpcHRvciBpbm9kZT4iCittc2dzdHIgIjxHcnVwcGViZXNrcml2ZXItaWtudWRlbj4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYyCittc2dpZCAiPFRoZSBqb3VybmFsIGlub2RlPiIKK21zZ3N0ciAiPEpvdXJuYWxlbnMgaWtudWRlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjMKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgOT4iCittc2dzdHIgIjxSZXNlcnZlcmV0IGlrbnVkZSA5PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjQKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgMTA+IgorbXNnc3RyICI8UmVzZXJ2ZXJldCBpa251ZGUgMTA+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNAorbXNnaWQgInJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAicmVndWzDpnIgZmlsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNgorbXNnaWQgImRpcmVjdG9yeSIKK21zZ3N0ciAibWFwcGUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM4Cittc2dpZCAiY2hhcmFjdGVyIGRldmljZSIKK21zZ3N0ciAidGVnbmVuaGVkIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MAorbXNnaWQgImJsb2NrIGRldmljZSIKK21zZ3N0ciAiYmxva2VuaGVkIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MgorbXNnaWQgIm5hbWVkIHBpcGUiCittc2dzdHIgIm5hdm5naXZldCBkYXRha2FuYWwiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ0Cittc2dpZCAic3ltYm9saWMgbGluayIKK21zZ3N0ciAic3ltYm9sc2sgaGVudmlzbmluZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDYgbWlzYy91dWlkZC5jOjE2MgorbXNnaWQgInNvY2tldCIKK21zZ3N0ciAic29ra2VsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpbGUgdHlwZSB3aXRoIG1vZGUgMCVvIgorbXNnc3RyICJ1a2VuZHQgZmlsdHlwZSBtZWQgdGlsc3RhbmQgMCVvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyMworbXNnaWQgImluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJpbmRpcmVrdGUgYmxvayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjUKK21zZ2lkICJkb3VibGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImRvYmJlbHQgaW5kaXJla3RlIGJsb2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI3Cittc2dpZCAidHJpcGxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJ0cmVkb2JiZWx0IGluZGlyZWt0ZSBibG9rIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyOQorbXNnaWQgInRyYW5zbGF0b3IgYmxvY2siCittc2dzdHIgIm92ZXJzw6Z0dHRlcmJsb2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDMxCittc2dpZCAiYmxvY2sgIyIKK21zZ3N0ciAiYmxvayAjIgorCisjOiBlMmZzY2svcGFzczFiLmM6MjIyCittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBpbm9kZSBtYXAiCittc2dzdHIgImZvcsO4ZyBow6Z2ZGVkZSBpa251ZGVrb3J0IgorCisjOiBlMmZzY2svcGFzczFiLmM6NjI1IGUyZnNjay9wYXNzMWIuYzo3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNhbid0IGZpbmQgZHVwX2JsayBmb3IgJWxsdVxuIgorbXNnc3RyICJpbnRlcm4gZmVqbDoga2FuIGlra2UgZmluZGUgZHVwX2JsayBmb3IgJWxsdVxuIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODUyCittc2dpZCAicmV0dXJuZWQgZnJvbSBjbG9uZV9maWxlX2Jsb2NrIgorbXNnc3RyICJyZXR1cm5lcmV0IGZyYSBjbG9uZV9maWxlX2Jsb2NrIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgYmxvY2sgcmVjb3JkIGZvciAlbGx1IgorbXNnc3RyICJpbnRlcm4gZmVqbDoga3VubmUgaWtrZSBzbMOlIEVBLWJsb2twb3N0IG9wIGZvciAlbGx1IgorCisjOiBlMmZzY2svcGFzczFiLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAiaW50ZXJuIGZlamw6IGt1bm5lIGlra2Ugc2zDpSBFQS1pa251ZGVwb3N0IG9wIGZvciAldSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NDc1IGUyZnNjay9wYXNzMi5jOjc4MgorbXNnaWQgInJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICJsw6ZzZXIgbWFwcGVibG9rIgorCisjOiBlMmZzY2svcGFzczEuYzo2MzQKK21zZ2lkICJpbi11c2UgaW5vZGUgbWFwIgorbXNnc3RyICJpIGJydWctaWtudWRla29ydCIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjQ1Cittc2dpZCAiZGlyZWN0b3J5IGlub2RlIG1hcCIKK21zZ3N0ciAibWFwcGUtaWtudWRla29ydCIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjU1Cittc2dpZCAicmVndWxhciBmaWxlIGlub2RlIG1hcCIKK21zZ3N0ciAicmVndWzDpnIgZmlsLWlrbnVkZWtvcnQiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY2NCBtaXNjL2UyaW1hZ2UuYzoxMjY1Cittc2dpZCAiaW4tdXNlIGJsb2NrIG1hcCIKK21zZ3N0ciAiaSBicnVnLWJsb2trb3J0IgorCisjOiBlMmZzY2svcGFzczEuYzo3MzAKK21zZ2lkICJvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgIsOlYm5lciBpa251ZGVza2FubmluZyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzY0Cittc2dpZCAiZ2V0dGluZyBuZXh0IGlub2RlIGZyb20gc2NhbiIKK21zZ3N0ciAiaGVudGVyIG7DpnN0ZSBpa251ZGUgZnJhIHNrYW5uaW5nIgorCisjOiBlMmZzY2svcGFzczEuYzoxMjc5Cittc2dpZCAiUGFzcyAxIgorbXNnc3RyICJHZW5uZW1sw7hiIDEiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBpbmRpcmVjdCBibG9ja3Mgb2YgaW5vZGUgJXUiCittc2dzdHIgImzDpnNlciBpbmRpcmVrdGUgYmxva2tlIGZvciBpa251ZGUgJXUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzODYKK21zZ2lkICJiYWQgaW5vZGUgbWFwIgorbXNnc3RyICJ1Z3lsZGlnIGlrbnVkZWtvcnQiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MDkKK21zZ2lkICJpbm9kZSBpbiBiYWQgYmxvY2sgbWFwIgorbXNnc3RyICJpa251ZGUgaSB1Z3lsZGlnIGJsb2trb3J0IgorCisjOiBlMmZzY2svcGFzczEuYzoxNDI5Cittc2dpZCAiaW1hZ2ljIGlub2RlIG1hcCIKK21zZ3N0ciAiaW1hZ2ljLWlrbnVkZWtvcnQiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0NTYKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGJsb2NrIG1hcCIKK21zZ3N0ciAiZm9yw7hnIGjDpnZkZXQgYmxva2tvcnQiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE1NjcKK21zZ2lkICJleHQgYXR0ciBibG9jayBtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlNmx1KCVjKTogZXhwZWN0aW5nICU2bHUgZ290IHBoeXMgJTZsdSAoYmxrY250ICVsbGQpXG4iCittc2dzdHIgIiU2bHUoJWMpOiBmb3J2ZW50ZXIgJTZsdSBmaWsgcGh5cyAlNmx1IChibGtjbnQgJWxsZClcbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6Mjg5OAorbXNnaWQgImJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiYmxvay1iaXRtYXAiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI5MDQKK21zZ2lkICJpbm9kZSBiaXRtYXAiCittc2dzdHIgImlrbnVkZS1iaXRtYXAiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI5MTAKK21zZ2lkICJpbm9kZSB0YWJsZSIKK21zZ3N0ciAiaWtudWRldGFiZWwiCisKKyM6IGUyZnNjay9wYXNzMi5jOjI4MworbXNnaWQgIlBhc3MgMiIKK21zZ3N0ciAiR2VubmVtbMO4YiAyIgorCisjOiBlMmZzY2svcGFzczIuYzo4MDYKK21zZ2lkICJDYW4gbm90IGNvbnRpbnVlLiIKK21zZ3N0ciAiS2FuIGlra2UgZm9ydHPDpnR0ZS4iCisKKyM6IGUyZnNjay9wYXNzMy5jOjc3Cittc2dpZCAiaW5vZGUgZG9uZSBiaXRtYXAiCittc2dzdHIgImlrbnVkZSBmw6ZyZGlnIGJpdG1hcCIKKworIzogZTJmc2NrL3Bhc3MzLmM6ODYKK21zZ2lkICJQZWFrIG1lbW9yeSIKK21zZ3N0ciAiVG9waHVrb21tZWxzZSIKKworIzogZTJmc2NrL3Bhc3MzLmM6MTQ4Cittc2dpZCAiUGFzcyAzIgorbXNnc3RyICJHZW5uZW1sw7hiIDMiCisKKyM6IGUyZnNjay9wYXNzMy5jOjM0MAorbXNnaWQgImlub2RlIGxvb3AgZGV0ZWN0aW9uIGJpdG1hcCIKK21zZ3N0ciAiaWtudWRlLWxvb3BkZXRla3Rpb25zYml0bWFwIgorCisjOiBlMmZzY2svcGFzczQuYzoxOTYKK21zZ2lkICJQYXNzIDQiCittc2dzdHIgIkdlbm5lbWzDuGIgNCIKKworIzogZTJmc2NrL3Bhc3M1LmM6NzQKK21zZ2lkICJQYXNzIDUiCittc2dzdHIgIkdlbm5lbWzDuGIgNSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MQorbXNnaWQgIihubyBwcm9tcHQpIgorbXNnc3RyICIoaW5nZW4gcHJvbXB0KSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MgorbXNnaWQgIkZpeCIKK21zZ3N0ciAiUmV0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzCittc2dpZCAiQ2xlYXIiCittc2dzdHIgIlJ5ZCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NAorbXNnaWQgIlJlbG9jYXRlIgorbXNnc3RyICJSZWFsbG9rZXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUKK21zZ2lkICJBbGxvY2F0ZSIKK21zZ3N0ciAiQWxsb2tlciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NgorbXNnaWQgIkV4cGFuZCIKK21zZ3N0ciAiVWR2aWQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTcKK21zZ2lkICJDb25uZWN0IHRvIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJGb3JiaW5kIHRpbCAvbWlzdGV0K2Z1bmRldCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OAorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAiT3ByZXQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkKK21zZ2lkICJTYWx2YWdlIgorbXNnc3RyICJSZWQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjAKK21zZ2lkICJUcnVuY2F0ZSIKK21zZ3N0ciAiQWZrb3J0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxCittc2dpZCAiQ2xlYXIgaW5vZGUiCittc2dzdHIgIlJ5ZCBpa251ZGUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIKK21zZ2lkICJBYm9ydCIKK21zZ3N0ciAiQWZicnlkIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzCittc2dpZCAiU3BsaXQiCittc2dzdHIgIk9wZGVsIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgIkZvcnRzw6Z0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1Cittc2dpZCAiQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MiCittc2dzdHIgIktsb24gYmxva2tlIGtyw6Z2ZXQgYWYgZmxlcmUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYKK21zZ2lkICJEZWxldGUgZmlsZSIKK21zZ3N0ciAiU2xldCBmaWwiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiVW5kZXJ0cnlrIGJlc2tlZGVyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4Cittc2dpZCAiVW5saW5rIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkKK21zZ2lkICJDbGVhciBIVHJlZSBpbmRleCIKK21zZ3N0ciAiUnlkIEhUcmVlLWluZGVrcyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MAorbXNnaWQgIlJlY3JlYXRlIgorbXNnc3RyICJHZW5za2FiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5Cittc2dpZCAiKE5PTkUpIgorbXNnc3RyICIoSU5HRU4pIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwCittc2dpZCAiRklYRUQiCittc2dzdHIgIlJFVFRFVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MQorbXNnaWQgIkNMRUFSRUQiCittc2dzdHIgIlJZRERFVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MgorbXNnaWQgIlJFTE9DQVRFRCIKK21zZ3N0ciAiUkVBTExPS0VSRVQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMKK21zZ2lkICJBTExPQ0FURUQiCittc2dzdHIgIkFMTE9LRVJFVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NAorbXNnaWQgIkVYUEFOREVEIgorbXNnc3RyICJVRFZJREVUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIkdFTkZPUkJVTkRFVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NgorbXNnaWQgIkNSRUFURUQiCittc2dzdHIgIk9QUkVUVEVUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3Cittc2dpZCAiU0FMVkFHRUQiCittc2dzdHIgIlJFRERFVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OAorbXNnaWQgIlRSVU5DQVRFRCIKK21zZ3N0ciAiQUZLT1JURVQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODkKK21zZ2lkICJJTk9ERSBDTEVBUkVEIgorbXNnc3RyICJJS05VREUgUllEREVUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwCittc2dpZCAiQUJPUlRFRCIKK21zZ3N0ciAiQUZCUlVEVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MQorbXNnaWQgIlNQTElUIgorbXNnc3RyICJPUERFTCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MgorbXNnaWQgIkNPTlRJTlVJTkciCittc2dzdHIgIkZPUlRTw4ZUVEVSIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzCittc2dpZCAiTVVMVElQTFktQ0xBSU1FRCBCTE9DS1MgQ0xPTkVEIgorbXNnc3RyICJCTE9LS0UgRUpFVCBBRiBGTEVSRSBLTE9ORVQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQKK21zZ2lkICJGSUxFIERFTEVURUQiCittc2dzdHIgIkZJTCBTTEVUVEVUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1Cittc2dpZCAiU1VQUFJFU1NFRCIKK21zZ3N0ciAiVU5ERVJUUllLVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NgorbXNnaWQgIlVOTElOS0VEIgorbXNnc3RyICJIRU5WSVNOSU5HIEZKRVJORVQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTcKK21zZ2lkICJIVFJFRSBJTkRFWCBDTEVBUkVEIgorbXNnc3RyICJIVFJFRS1JTkRFS1MgUllEREVUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4Cittc2dpZCAiV0lMTCBSRUNSRUFURSIKK21zZ3N0ciAiVklMIEdFTlNLQUJFIgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDcKK21zZ2lkICJAYiBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJibG9rYml0bWFwIGZvciBncnVwcGUgJWcgZXIgaWtrZSBpIGdydXBwZS4gKGJsb2sgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMQorbXNnaWQgIkBpIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgImlrbnVkZS1iaXRtYXAgZm9yIGdydXBwZSAlZyBlciBpa2tlIGkgZ3J1cHBlLiAoYmxvayAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgdGFibGUgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIy4gQC1leHBhbmRlZDogV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYKK21zZ2lkICIiCisiQGkgdGFibGUgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKKyJXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuIgorbXNnc3RyICIiCisiaWtudWRlLXRhYmVsIGZvciBncnVwcGUgJWcgZXIgaWtrZSBpIGdydXBwZS4gKGJsb2sgJWIpXG4iCisiQURWQVJTRUw6IEFMVk9STElHIERBVEFUQUIgS0FOIE9QU1TDhS5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBzdXBlcmJsb2NrIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgdmFsaWQgZXh0Mi9leHQzL2V4dDRcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbS4gIElmIHRoZSBkZXZpY2UgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyL2V4dDMvZXh0NFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgc3VwZXJibG9ja1xuCisjLiBALWV4cGFuZGVkOiBpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBzdXBlcmJsb2NrOlxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iIDgxOTMgPGRldmljZT5cbgorIy4gQC1leHBhbmRlZDogIG9yXG4KKyMuIEAtZXhwYW5kZWQ6ICAgICBlMmZzY2sgLWIgMzI3NjggPGRldmljZT5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyCittc2dpZCAiIgorIlxuIgorIlRoZSBAUyBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIHZhbGlkIGV4dDIvZXh0My9leHQ0XG4iCisiQGYuICBJZiB0aGUgQHYgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyL2V4dDMvZXh0NFxuIgorIkBmIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgQFNcbiIKKyJpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBAUzpcbiIKKyIgICAgZTJmc2NrIC1iIDgxOTMgPEB2PlxuIgorIiBvclxuIgorIiAgICBlMmZzY2sgLWIgMzI3NjggPEB2PlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiU3VwZXJibG9ra2VuIGt1bm5lIGlra2UgbMOmc2VzIGVsbGVyIGJlc2tyaXZlciBpa2tlIGV0IGd5bGRpZ3QgZXh0Mi9leHQzLyIKKyJleHQ0LVxuIgorImZpbHN5c3RlbS4gSHZpcyBlbmhlZGVuIGVyIGd5bGRpZyBvZyBkZW4gaW5kZWhvbGRlciBldCBleHQyL2V4dDMvZXh0NC0iCisiZmlsc3lzdGVtXG4iCisiKG9nIGlra2Ugc3dhcCBlbGxlciB1ZnMgZWxsZXIgbm9nZXQgYW5kZXQpLCBzw6UgZXIgc3VwZXJibG9ra2VuIGtvcnJ1cHQsXG4iCisib2cgZHUga2FuIGZvcnPDuGdlIGF0IGvDuHJlIGUyZnNjayBtZWQgZW4gYWx0ZXJuYXRpdiBzdXBlcmJsb2s6XG4iCisiICAgIGUyZnNjayAtYiA4MTkzIDxAdj5cbiIKKyIgZWxsZXJcbiIKKyIgICAgZTJmc2NrIC1iIDMyNzY4IDxAdj5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIGZpbGVzeXN0ZW0gc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBzdXBlcmJsb2NrKSBpcyAlYiBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGRldmljZSBpcyAlYyBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogRWl0aGVyIHRoZSBzdXBlcmJsb2NrIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiRmlsc3lzdGVtZXRzIHN0w7hycmVsc2UgKGrDpnZuZsO4ciBzdXBlcmJsb2trZW4pIGVyICViIGJsb2trZVxuIgorIkRlbiBmeXNpc2tlIHN0w7hycmVsc2UgZm9yIGVuaGVkZW4gZXIgJWMgYmxva2tlXG4iCisiU2FuZHN5bmxpZ3ZpcyBlciBlbnRlbiBzdXBlcmJsb2trZW4gZWxsZXIgcGFydGl0aW9uc3RhYmVsbGVuIMO4ZGVsYWd0IVxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2NrX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbgorIy4gQC1leHBhbmRlZDogVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuCisjLiBALWV4cGFuZGVkOiBmcm9tIHRoZSBibG9jayBzaXplLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MAorbXNnaWQgIiIKKyJAUyBAYl9zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4iCisiVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuIgorImZyb20gdGhlIEBiIHNpemUuXG4iCittc2dzdHIgIiIKKyJzdXBlcmJsb2sgYmxva19zdMO4cnJlbHNlID0gJWIsIGZyYWdzdHIuID0gJWMuXG4iCisiRGVubmUgdmVyc2lvbiBhZiBlMmZzY2sgdW5kZXJzdMO4dHRlciBpa2tlIGZyYWdtZW50c3TDuHJyZWxzZXIsIGRlciBlclxuIgorImZvcnNrZWxsaWdlIGZyYSBibG9rc3TDuHJyZWxzZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3Cittc2dpZCAiQFMgQGJzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIlN1cGVyYmxvayBibG9ra2VfcGVyX2dydXBwZSA9ICViLCBza3VsbGUgaGF2ZSB2w6ZyZXQgJWNcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBmaXJzdF9kYXRhX2Jsb2NrID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIKK21zZ2lkICJAUyBmaXJzdF9kYXRhX0BiID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBza3VsbGUgaGF2ZSB2w6ZyZXQgJWNcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3Cittc2dpZCAiIgorIkBmIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuIgorIlxuIgorbXNnc3RyICIiCisiQGYgaGF2ZGUgaWtrZSBlbiBVVUlEOyBvcHJldHRlIGVuLlxuIgorIlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogaWYgc2V2ZXJhbCBpbm9kZSBvciBibG9jayBiaXRtYXAgYmxvY2tzIG9yIHBhcnRcbiIKKyJvZiB0aGUgaW5vZGUgdGFibGUgcmVxdWlyZSByZWxvY2F0aW9uLCB5b3UgbWF5IHdpc2ggdG8gdHJ5XG4iCisicnVubmluZyBlMmZzY2sgd2l0aCB0aGUgJy1iICVTJyBvcHRpb24gZmlyc3QuICBUaGUgcHJvYmxlbVxuIgorIm1heSBsaWUgb25seSB3aXRoIHRoZSBwcmltYXJ5IGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLCBhbmRcbiIKKyJ0aGUgYmFja3VwIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIG1heSBiZSBPSy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkJlbcOmcms6IEh2aXMgZmxlcmUgaWtudWRlLSBlbGxlciBibG9rLWJpdG1hcGJsb2trZSBlbGxlciBkZWxlXG4iCisiYWYgaWtudWRlLXRhYmVsbGVuIGtyw6Z2ZXIgbnkgcGxhY2VyaW5nLCBzw6Uga2FuIGR1IHByw7h2ZSBhdFxuIgorImvDuHJlIGUyZnNjayBtZWQgdGlsdmFsZ2V0IMK7LWIgJVPCqyBmw7hyc3QuIFByb2JsZW1ldCBlciBtw6Vza2VcbiIKKyJrdW4gaSBkZW4gcHJtw6ZyZSBibG9rZ3J1cHBlcyBiZXNrcml2ZXJlLCBvZyBzaWtrZXJoZWRza29waWVuc1xuIgorImJsb2tncnVwcGViZXNrcml2ZXJlIGthbiB2w6ZyZSBvLmsuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvcnJ1cHRpb24gZm91bmQgaW4gc3VwZXJibG9jay4gICglcyA9ICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzEKK21zZ2lkICJDb3JydXB0aW9uIGZvdW5kIGluIEBTLiAgKCVzID0gJU4pLlxuIgorbXNnc3RyICJLb3JydXB0aW9uIGZ1bmRldCBpIEBTLiAoJXMgPSAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIGRldmljZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgQHY6ICVtXG4iCittc2dzdHIgIkZlamwgdW5kZXIgYmVzdGVtbWVsc2UgYWYgc3TDuHJyZWxzZW4gcMOlIGRlbiBmeXNpc2tlIEB2OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBjb3VudCBpbiBzdXBlcmJsb2NrIGlzICVpLCBzaG91bGQgYmUgJWouXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTgxCittc2dpZCAiQGkgY291bnQgaW4gQFMgaXMgJWksIEBzICVqLlxuIgorbXNnc3RyICJpa251ZGUtYW50YWwgaSBzdXBlcmJsb2sgZXIgJWksIHNrYWwgdsOmcmUgJWouXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg1Cittc2dpZCAiVGhlIEh1cmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZmlsZXR5cGUgZmVhdHVyZS5cbiIKK21zZ3N0ciAiSHVyZCdlbiB1bmRlcnN0w7h0dGVyIGlra2UgZmlsdHlwZWZ1bmt0aW9uZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgJWkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoYXMgYW4gQG4gQGogKEBpICVpKS5cbiIKK21zZ3N0ciAic3VwZXJibG9ra2VuIGhhciBlbiB1Z3lsZGlnIGpvdXJuYWwgKGlrbnVkZSAlaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIG11bHRpcGxlIGZpbGVzeXN0ZW0gdXNlcnMgKHVuc3VwcG9ydGVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTUKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgbXVsdGlwbGUgQGYgdXNlcnMgKHVuc3VwcG9ydGVkKS5cbiIKK21zZ3N0ciAiRWtzdGVybiBqb3VybmFsIGhhciBmbGVyZSBmaWxzeXN0ZW1icnVnZXJlIChpa2tlIHVuZGVyc3TDuHR0ZXQpLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW4ndCBmaW5kIGV4dGVybmFsIGpvdXJuYWxcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDAKK21zZ2lkICJDYW4ndCBmaW5kIGV4dGVybmFsIEBqXG4iCittc2dzdHIgIkthbiBpa2tlIGZpbmRlIEBqXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIGJhZCBzdXBlcmJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjA1Cittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIGJhZCBAU1xuIgorbXNnc3RyICJFa3N0ZXJuIEBqIGhhciB1Z3lsZGlnIEBTXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZpbGVzeXN0ZW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMTAKK21zZ2lkICJFeHRlcm5hbCBAaiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgQGZcbiIKK21zZ3N0ciAiRWtzdGVybiBAaiB1bmRlcnN0w7h0dGVyIGlra2UgZGV0dGUgQGZcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBqb3VybmFsIHN1cGVyYmxvY2sgaXMgdW5rbm93biB0eXBlICVOICh1bnN1cHBvcnRlZCkuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBqb3VybmFsIAorIy4gQC1leHBhbmRlZDogZm9ybWF0LlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMTUKK21zZ2lkICIiCisiQGYgQGogQFMgaXMgdW5rbm93biB0eXBlICVOICh1bnN1cHBvcnRlZCkuXG4iCisiSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIEBqICIKKyJmb3JtYXQuXG4iCisiSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjMKK21zZ2lkICJAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICJAaiBAUyBlciDDuGRlbGFndC5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXNfam91cm5hbCBmbGFnIGlzIGNsZWFyLCBidXQgYSBqb3VybmFsIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjI4Cittc2dpZCAiQFMgaGFzX0BqIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIEBqIGlzIHByZXNlbnQuXG4iCittc2dzdHIgInN1cGVyYmxva3MgaGFzX2pvdXJuYWwtZmxhZyBlciByeWRkZXQsIG1lbiBlbiBqb3VybmFsIGVyIHRpbCBzdGVkZS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIGpvdXJuYWwgaXMgcHJlc2VudC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMzMKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIEBqIGlzIHByZXNlbnQuXG4iCittc2dzdHIgIiIKKyJzdXBlcmJsb2tzIG5lZWRzX3JlY292ZXJ5LWZsYWcgZXIgYW5naXZldCwgbWVuIGluZ2VuIGpvdXJuYWwgZXIgdGlsIHN0ZWRlLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBqb3VybmFsIGhhcyBkYXRhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzOAorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBAaiBoYXMgZGF0YS5cbiIKK21zZ3N0ciAic3VwZXJibG9rcyBuZWVkc19yZWNvdmVyeS1mbGFnIGVyIHJ5ZGRldCwgbWVuIGpvdXJuYWwgaGFyIGRhdGEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENsZWFyIGpvdXJuYWwKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQzCittc2dpZCAiQ2xlYXIgQGoiCittc2dzdHIgIlJ5ZCBAaiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBmaWxlc3lzdGVtLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0OCBlMmZzY2svcHJvYmxlbS5jOjcwNworbXNnaWQgIkBmIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIEBmLiAgIgorbXNnc3RyICJmaWxzeXRlbSBoYXIgZnVua3Rpb25zZmxhZyBhbmdpdmV0LCBtZW4gZXIgZXQgcmV2aXNpb24gMC1maWxzeXN0ZW0uIgorCisjLiBALWV4cGFuZGVkOiAlcyBvcnBoYW5lZCBpbm9kZSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1MworbXNnaWQgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4iCittc2dzdHIgIiIKKyIlcyBmb3LDpmxkcmVsw7hzIGlrbnVkZSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgdGlsc3RhbmQ9JUltLCBzdMO4cnJlbHNlPSVJcylcbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1OAorbXNnaWQgIkBJICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgImlsbGVnYWwgJUIgKCViKSBmdW5kZXQgaSBmb3LDpmxkcmVsw7hzIGlrbnVkZSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYzCittc2dpZCAiQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIkFsbGVyZWRlIHJ5ZGRldCAlYiAoJWIpIGZ1bmRldCBpIGZvcsOmbGRyZWzDuHMgaWtudWRlICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIG9ycGhhbmVkIGlub2RlICVpIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBvIEBpICVpIGluIEBTLlxuIgorbXNnc3RyICJJbGxlZ2FsIGZvcsOmbGRlbMO4cyBpa251ZGUgJWkgaSBzdXBlcmJsb2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgaW5vZGUgJWkgaW4gb3JwaGFuZWQgaW5vZGUgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEkgQGkgJWkgaW4gQG8gQGkgbGlzdC5cbiIKK21zZ3N0ciAiSWxsZWdhbCBpa251ZGUgJWkgaSBmb3LDpmxkcmVsw7hzIGlrbnVkZWxpc3RlLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjc4Cittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIiIKKyJKb3VybmFsc3VwZXJibG9rIGhhciBldCB1a2VuZHQgc2tyaXZlYmVza3l0dGV0IGZ1bmt0aW9uc2ZsYWcgYW5naXZldC5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4MworbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICIiCisiSm91cm5hbHN1cGVyYmxvayBoYXIgZXQgdWtlbmR0IG9nIGlra2Uga29tcGF0aWJlbHQgZnVua3Rpb25zZmxhZyBhbmdpdmV0LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODgKK21zZ2lkICJAaiB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4iCittc2dzdHIgIkpvdXJuYWx2ZXJzaW9uIGVyIGlra2UgdW5kZXJzdMO4dHRldCBhZiBkZW5uZSBlMmZzY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1vdmluZyBqb3VybmFsIGZyb20gLyVzIHRvIGhpZGRlbiBpbm9kZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNb3ZpbmcgQGogZnJvbSAvJXMgdG8gaGlkZGVuIEBpLlxuIgorIlxuIgorbXNnc3RyICIiCisiRmx5dHRlciBAaiBmcmEgLyVzIHRpbCBza2p1bHQgQGkuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIG1vdmluZyBqb3VybmFsOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIG1vdmluZyBAajogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkZlamwgdW5kZXIgZmx5dG5pbmcgYWYgam91cm5hbDogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRm91bmQgaW52YWxpZCBWMiBqb3VybmFsIHN1cGVyYmxvY2sgZmllbGRzIChmcm9tIFYxIGpvdXJuYWwpLlxuCisjLiBALWV4cGFuZGVkOiBDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBqb3VybmFsIHN1cGVyYmxvY2suLi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzAzCittc2dpZCAiIgorIkZvdW5kIEBuIFYyIEBqIEBTIGZpZWxkcyAoZnJvbSBWMSBAaikuXG4iCisiQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgQGogQFMuLi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkZhbmR0IHVneWxkaWcgVjItam91cm5hbHN1cGVyYmxva2ZlbHRlciAoZnJhIFYxLWpvdXJuYWwpLlxuIgorIlJ5ZGRlciBmZWx0ZXIgZWZ0ZXIgVjEtam91cm5hbHN1cGVyYmxva2tlbiAuLi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogUnVuIGpvdXJuYWwgYW55d2F5CisjOiBlMmZzY2svcHJvYmxlbS5jOjMwOQorbXNnaWQgIlJ1biBAaiBhbnl3YXkiCittc2dzdHIgIkvDuHIgam91cm5hbCBhbGxpZ2V2ZWwiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTQKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiIgorIkdlbmRhbm5lbHNlc2ZsYWcgZXIgaWtrZSBhbmdpdmV0IGkgc2lra2VyaGVkc2tvcGllbiBzdXBlcmJsb2ssIHPDpSBrw7hyZXIgIgorImpvdXJuYWwgYWxsaWdldmVsLlxuIgorCisjLiBALWV4cGFuZGVkOiBCYWNraW5nIHVwIGpvdXJuYWwgaW5vZGUgYmxvY2sgaW5mb3JtYXRpb24uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMxOQorbXNnaWQgIiIKKyJCYWNraW5nIHVwIEBqIEBpIEBiIGluZm9ybWF0aW9uLlxuIgorIlxuIgorbXNnc3RyICJMYXZlciBzaWtrZXJoZWRza29waSBhZiBqb3VybmFsZW5zIGlrbnVkZS1ibG9raW5mb3JtYXRpb24uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSByZXNpemVfaW5vZGUgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpcyAlTjsgc2hvdWxkIGJlIHplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzI0Cittc2dpZCAiIgorIkBmIGRvZXMgbm90IGhhdmUgcmVzaXplX0BpIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9AYnNcbiIKKyJpcyAlTjsgQHMgemVyby4gICIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbWV0IGhhciBpa2tlIHJlc2l6ZV9pbm9kZSBha3RpdmVyZXQsIG1lbiBzX3Jlc2VydmVkX2dkdF9ibG9ja3NcbiIKKyJlciAlTjsgc2thbCB2w6ZyZSBudWwuIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemVfaW5vZGUgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIGlub2RlIGlzIG5vbi16ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzMAorbXNnaWQgIlJlc2l6ZV9AaSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgQGkgaXMgbm9uLXplcm8uICAiCittc2dzdHIgIlJlc2l6ZV9pbm9kZSBlciBpa2tlIGFrdGl2ZXJldCwgbWVuIHJlc2l6ZS1pa251ZGUgZXIgbm9uLXplcm8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSBub3QgdmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzM1Cittc2dpZCAiUmVzaXplIEBpIG5vdCB2YWxpZC4gICIKK21zZ3N0ciAiUmVzaXplLWlrbnVkZSBlciBpa2tlIGd5bGRpZy4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0MAorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKyJTdXBlcmJsb2tzIHNpZHN0ZSBtb250ZXJpbmdzdGlkc3B1bmt0ICgldCxcbiIKKyJcdG51ID0gJVQpIGVyIGkgZnJlbXRpZGVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ1Cittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgc2hvdWxkIGJlICVYLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIEBzICVYLiAgIgorbXNnc3RyICJTdXBlcmJsb2stZmlmIGZvciBla3N0ZXJuIHN1cGVyYmxvayBza2FsIHbDpnJlICVYLiIKKworIy4gQC1leHBhbmRlZDogQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNTQKK21zZ2lkICIiCisiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlRpbGbDuGplciBkaXJoYXNoLWZpZiB0aWwgZmlsc3lzdGVtZXQuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzU5Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gICIKK21zZ3N0ciAiR3J1cHBlYmVza3JpdmVyICVnJ3Mga29udHJvbHN1bSBlciAlMDR4LCBza2FsIHbDpnJlICUwNHkuICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4iCittc2dzdHIgIiIKKyJHcnVwcGViZXNrcml2ZXIgJWcgbWFya2VyZXQgc29tIGlra2UgaW5pdGlhbGlzZXJldCB1ZGVuIGZ1bmt0aW9uc3PDpnQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNjkKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAiCittc2dzdHIgImdydXBwZWJlc2tyaXZlciAlZyBoYXIgdWd5bGRpZyB1YnJ1Z3QgaWtudWRlYW50YWwgJWIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IExhc3QgZ3JvdXAgYmxvY2sgYml0bWFwIHVuaW5pdGlhbGl6ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzc0Cittc2dpZCAiTGFzdCBAZyBAYiBAQiB1bmluaXRpYWxpemVkLiAgIgorbXNnc3RyICJTaWRzdGUgZ3J1cHBlYmxva2JpdG1hcCBlciBpa2tlIGluaXRpYWxpc2VyZXQuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdHJhbnNhY3Rpb24gJWkgd2FzIGNvcnJ1cHQsIHJlcGxheSB3YXMgYWJvcnRlZC5cbiIKK21zZ3N0ciAiSm91cm5hbHRyYW5zYWt0aW9uICVpIHZhciDDuGRlbGFndCwgZ2VuYWZzcGlsbmluZyBibGV2IGFmYnJ1ZHQuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzgzCittc2dpZCAiVGhlIHRlc3RfZnMgZmxhZyBpcyBzZXQgKGFuZCBleHQ0IGlzIGF2YWlsYWJsZSkuICAiCittc2dzdHIgIkZsYWdldCB0ZXN0X2ZzIGVyIGFuZ2l2ZXQgKG9nIGV4dDIgZXIgdGlsZ8OmbmdlbGlnKS4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4OAorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldClcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzk0Cittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAiCisic2V0KVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IE9uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwMAorbXNnaWQgIk9uZSBvciBtb3JlIEBiIEBnIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgIgorbXNnc3RyICJFbiBlbGxlciBmbGVyZSBibG9rZ3J1cHBlYmVza3JpdmVyZXMga29udHJvbHN1bW1lciBlciB1Z3lsZGlnZS4gICIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwNQorbXNnaWQgIlNldHRpbmcgZnJlZSBAaXMgY291bnQgdG8gJWogKHdhcyAlaSlcbiIKK21zZ3N0ciAiQW5naXZlciBmcml0IGlrbnVkZWFudGFsIHRpbCAlaiAodmFyICVpKVxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgYmxvY2tzIGNvdW50IHRvICVjICh3YXMgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDEwCittc2dpZCAiU2V0dGluZyBmcmVlIEBicyBjb3VudCB0byAlYyAod2FzICViKVxuIgorbXNnc3RyICJBbmdpdmVyIGZyaXQgYmxva2FudGFsIHRpbCAlYyAodmFyICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBNYWtpbmcgcXVvdGEgaW5vZGUgJWkgKCVRKSBoaWRkZW4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDE1Cittc2dpZCAiTWFraW5nIEBxIEBpICVpICglUSkgaGlkZGVuLlxuIgorbXNnc3RyICJMYXZlciBrdm90YS1pa251ZGUgJWkgKCVRKSBza2p1bHQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyMAorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gICIKK21zZ3N0ciAiQFMgaGFyIHVneWxkaWcgTU1QLWJsb2suICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyNQorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gICIKK21zZ3N0ciAic3VwZXJibG9rIGhhciB1Z3lsZGlnIE1NUC1tYWdpLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfb3BlbjI6ICVtXG4iCittc2dzdHIgImV4dDJmc19vcGVuMjogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCittc2dzdHIgImV4dDJmc19jaGVja19kZXNjOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIDY0Yml0IGZpbGVzeXN0ZW1zIG5lZWRzIGV4dGVudHMgdG8gYWNjZXNzIHRoZSB3aG9sZSBkaXNrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0MAorbXNnaWQgIkBTIDY0Yml0IGZpbGVzeXN0ZW1zIG5lZWRzIGV4dGVudHMgdG8gYWNjZXNzIHRoZSB3aG9sZSBkaXNrLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQ1Cittc2dpZCAiRmlyc3RfbWV0YV9iZyBpcyB0b28gYmlnLiAgKCVOLCBtYXggdmFsdWUgJWcpLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1MgorbXNnaWQgIlBhc3MgMTogQ2hlY2tpbmcgQGlzLCBAYnMsIGFuZCBzaXplc1xuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1NgorbXNnaWQgIkByIGlzIG5vdCBhIEBkLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2MQorbXNnaWQgIkByIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBSZXNlcnZlZCBpbm9kZSAlaSAoJVEpIGhhcyBpbnZhbGlkIG1vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDY2Cittc2dpZCAiUmVzZXJ2ZWQgQGkgJWkgKCVRKSBoYXMgQG4gbW9kZS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBkZWxldGVkIGlub2RlICVpIGhhcyB6ZXJvIGR0aW1lLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICJARCBAaSAlaSBoYXMgemVybyBkdGltZS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDg2Cittc2dpZCAiQGcgJWcncyBAYiBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5MQorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSB0YWJsZSBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5NgorbXNnaWQgIkBnICVnJ3MgQGkgdGFibGUgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgKCViKSBpcyBiYWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTAxCittc2dpZCAiQGcgJWcncyBAYiBAQiAoJWIpIGlzIGJhZC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDYKK21zZ2lkICJAZyAlZydzIEBpIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX3NpemUgaXMgJUlzLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTExCittc2dpZCAiQGkgJWksIGlfc2l6ZSBpcyAlSXMsIEBzICVOLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX2Jsb2NrcyBpcyAlSWIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTYKK21zZ2lkICJAaSAlaSwgaV9AYnMgaXMgJUliLCBAcyAlTi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIxCittc2dpZCAiQEkgJUIgKCViKSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIG92ZXJsYXBzIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI2Cittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogVG9vIG1hbnkgaWxsZWdhbCBibG9ja3MgaW4gaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGlsbGVnYWwgQGJzIGluIEBpICVpLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBpbiBiYWQgYmxvY2sgaW5vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQxCittc2dpZCAiQEkgJUIgKCViKSBpbiBiYWQgQGIgQGkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0NgorbXNnaWQgIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrIGluIHVzZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTEKK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgJWIgdXNlZCBhcyBiYWQgYmxvY2sgaW5vZGUgaW5kaXJlY3QgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTU2Cittc2dpZCAiQmFkIEBiICViIHVzZWQgYXMgYmFkIEBiIEBpIGluZGlyZWN0IEBiLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuCisjLiBALWV4cGFuZGVkOiBzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpbiB0aGUgZmlsZXN5c3RlbS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjEKK21zZ2lkICIiCisiXG4iCisiVGhlIGJhZCBAYiBAaSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbiIKKyJzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuIgorImluIHRoZSBAZi5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogSWYgdGhlIGJsb2NrIGlzIHJlYWxseSBiYWQsIHRoZSBmaWxlc3lzdGVtIGNhbiBub3QgYmUgZml4ZWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTY4Cittc2dpZCAiIgorIlxuIgorIklmIHRoZSBAYiBpcyByZWFsbHkgYmFkLCB0aGUgQGYgY2FuIG5vdCBiZSBmaXhlZC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBZb3UgY2FuIHJlbW92ZSB0aGlzIGJsb2NrIGZyb20gdGhlIGJhZCBibG9jayBsaXN0IGFuZCBob3BlXG4KKyMuIEAtZXhwYW5kZWQ6IHRoYXQgdGhlIGJsb2NrIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTczCittc2dpZCAiIgorIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKyJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogVGhlIHByaW1hcnkgc3VwZXJibG9jayAoJWIpIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzkKK21zZ2lkICJUaGUgcHJpbWFyeSBAUyAoJWIpIGlzIG9uIHRoZSBiYWQgQGIgbGlzdC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBncm91cCBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3RcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODQKK21zZ2lkICJCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBAZyBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIEBiIGxpc3RcbiIKK21zZ3N0ciAiIgorIkJsb2sgJWIgaSBkZSBwcmltw6ZyZSBncnVwcGViZXNrcml2ZXJlIGVyIHDDpSBsaXN0ZW4gbWVkIHVneWxkaWdlIGJsb2trZVxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIHN1cGVyYmxvY2sgKCViKSBpcyBiYWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkwCittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBAUyAoJWIpIGlzIGJhZC5cbiIKK21zZ3N0ciAiQWR2YXJzZWw6IEdydXBwZSAlZ3Mgc3VwZXJibG9rICglYikgZXIgdWd5bGRpZy5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBncm91cCBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgYmxvY2sgKCViKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1OTUKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIEBnIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBAYiAoJWIpLlxuIgorbXNnc3RyICIiCisiQWR2YXJzZWw6IEdydXBwZSAlZ3Mga29waSBhZiBncnVwcGViZXNrcml2ZXJuZSBoYXIgZW4gdWd5bGRpZyBibG9rICglYikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFByb2dyYW1taW5nIGVycm9yPyAgYmxvY2sgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9ibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDEKK21zZ2lkICJQcm9ncmFtbWluZyBlcnJvcj8gIEBiICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfQGIuXG4iCittc2dzdHIgIiIKKyJQcm9ncmFtbWVyaW5nc2Zlamw/IGJsb2sgIyViIHJlc2VydmVyZXQgdWRlbiDDpXJzYWcgaSBwcm9jZXNzX2JhZF9ibG9jay5cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyAlTiBjb250aWd1b3VzIGJsb2NrKHMpIGluIGJsb2NrIGdyb3VwICVnIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDcKK21zZ2lkICJAQSAlTiBjb250aWd1b3VzIEBiKHMpIGluIEBiIEBnICVnIGZvciAlczogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAYiBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxNworbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyB0byAlYy4uLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrICViIG9mICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyNworbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIEBiICViIG9mICVzOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBibG9jayAlYiBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMyCittc2dpZCAiV2FybmluZzogY291bGQgbm90IHdyaXRlIEBiICViIGZvciAlczogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzNyBlMmZzY2svcHJvYmxlbS5jOjE1MDEKK21zZ2lkICJAQSBAaSBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQyCittc2dpZCAiQEEgQGIgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGRpcmVjdG9yeSBibG9jayBhcnJheTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGQgQGIgYXJyYXk6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIEBpcyAoJWkpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBjb3VudD0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjY3Cittc2dpZCAiRXJyb3Igc3RvcmluZyBAaSBjb3VudCBpbmZvcm1hdGlvbiAoQGk9JWksIGNvdW50PSVOKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGJsb2NrPSViLCBudW09JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3MgorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJEZXIgb3BzdG9kIGVuIGZlamwgdW5kZXIgbMOmc25pbmcgYWYgaWtudWRlICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgIgorbXNnc3RyICJpa251ZGUgJWkgaGFyIG1hZ2lzayBmbGFnIGFuZ2l2ZXQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChpbm9kZSAlaSkgaGFzIGltbXV0YWJsZVxuCisjLiBALWV4cGFuZGVkOiBvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKEBpICVpKSBoYXMgaW1tdXRhYmxlXG4iCisib3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAiCittc2dzdHIgIiIKKyJTcGVjaWVsIChlbmhlZC9zb2trZWwvZmlmby9zeW1ib2xza19oZW52aXNuaW5nKSBmaWwgKGlrbnVkZSAlaSkgaGFyICIKKyJ1Zm9yYW5kZXJsaWdcbiIKKyJlbGxlciB0aWxmw7hqLWt1biBmbGFnIGFuZ2l2ZXQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBjb21wcmVzc2lvbiBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgY29tcHJlc3Npb24gc3VwcG9ydC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEBjaW9uIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgQGNpb24gc3VwcG9ydC4gICIKK21zZ3N0ciAiIgorImlrbnVkZSAlaSBoYXIga29tcHJpbWVyaW5nc2ZsYWcgYW5naXZldCBww6UgZXQgZmlsc3lzdGVtIHVkZW4gIgorImtvbXByaW1lcmluZ3N1bmRlcnN0w7h0dGVsc2UuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmbykgaW5vZGUgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvKSBAaSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gICIKK21zZ3N0ciAiIgorIlNwZWNpZWwgKGVuaGVkL3Nva2tlbC9maWZvKSBpa251ZGUgJWkgaGFyIGVuIHN0w7hycmVsc2UgZm9yc2tlbGxpZyBmcmEgbnVsLiAgIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxMgorbXNnaWQgIkBqIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJqb3VybmFsLWlrbnVkZSBlciBpa2tlIGkgYnJ1ZywgbWVuIGluZGVob2xkZXIgZGF0YS4gICIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxNworbXNnaWQgIkBqIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgImpvdXJuYWwgZXIgaWtrZSBlbiBub3JtYWwgZmlsLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgd2FzIHBhcnQgb2YgdGhlIEBvIEBpIGxpc3QuICAiCittc2dzdHIgImlrbnVkZSAlaSB2YXIgZW4gZGVsIGFmIGRlbiBmb3LDpmxkcmVsw7hzZSBpa251ZGVsaXN0ZS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGVzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjgKK21zZ2lkICJAaXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgIgorbXNnc3RyICIiCisiaWtudWRlciBzb20gdmFyIGRlbCBhZiBlbiDDuGRlbGFndCBmb3LDpmxkZWzDuHMgbMOmbmtldCBsaXN0ZSBibGV2IGZ1bmRldC4gICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo3MzMKK21zZ2lkICJAQSByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbiIKK21zZ3N0ciAiZGVyIG9wc3RvZCBlbiBmZWpsIHVuZGVyIGFsbG9rZXJpbmcgYWYgcmVmY291bnQtc3RydWt0dXIgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgZm9yIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjczOAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgZm9yIEBpICVpLiAgIgorbXNnc3RyICIiCisiRGVyIG9wc3RvZCBlbiBmZWpsIHVuZGVyIGzDpnNuaW5nIGFmIHVkdmlkZXQgYXR0cmlidXRibG9rICViIGZvciBpa251ZGUgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQzCittc2dpZCAiQGkgJWkgaGFzIGEgYmFkIEBhIEBiICViLiAgIgorbXNnc3RyICJpa251ZGUgJWkgaGFyIGVuIHVneWxkaWcgdWR2aWRldCBhdHRyaWJ1dGJsb2sgJWIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQ4Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJEZXIgb3BzdG9kIGVuIGZlamwgdW5kZXIgbMOmc25pbmcgYWYgdWR2aWRldCBhdHRyaWJ1dGJsb2sgJWIgKCVtKS4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzUzCittc2dpZCAiQGEgQGIgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgQHMgJU4uICAiCittc2dzdHIgInVkdmlkZXQgYXR0cmlidXRibG9rICViIGhhciByZWZlcmVuY2VhbnRhbCAlciwgc2thbCB2w6ZyZSAlTi4gICIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTgKK21zZ2lkICJFcnJvciB3cml0aW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkRlciBvcHN0b2QgZW4gZmVqbCB1bmRlciBza3Jpdm5pbmcgYWYgdWR2aWRldCBhdHRyaWJ1dGJsb2sgJWIgKCVtKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyBoX2Jsb2NrcyA+IDEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzYzCittc2dpZCAiQGEgQGIgJWIgaGFzIGhfQGJzID4gMS4gICIKK21zZ3N0ciAidWR2aWRldCBhdHRyaWJ1dGJsb2sgJWIgaGFyIGhfYmxva2tlID4gMS4gICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzY4Cittc2dpZCAiQEEgQGEgQGIgJWIuICAiCittc2dzdHIgImRlciBvcHN0b2QgZW4gZmVqbCB1bmRlciBhbGxva2VyaW5nIGFmIHVkdmlkZXQgYXR0cmlidXRibG9rICViLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3MworbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gICIKK21zZ3N0ciAidWR2aWRldCBhdHRyaWJ1dGJsb2sgJWIgZXIgw7hkZWxhZ3QgKGFsbG9rZXJpbmdza29sbGlzaW9uKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgbmFtZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzc4Cittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gbmFtZSkuICAiCittc2dzdHIgInVkdmlkZXQgYXR0cmlidXRibG9rICViIGVyIMO4ZGVsYWd0ICh1Z3lsZGlndCBuYXZuKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgdmFsdWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4MworbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIHZhbHVlKS4gICIKK21zZ3N0ciAidWR2aWRldCBhdHRyaWJ1dGJsb2sgJWIgZXIgw7hkZWxhZ3QgKHVneWxkaWcgdsOmcmRpKS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgdG9vIGJpZy4gICIKK21zZ3N0ciAiaWtudWRlICVpIGVyIGZvciBzdG9yLiAgIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIGNhdXNlcyBkaXJlY3RvcnkgdG8gYmUgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3OTIKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBAZCB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIG1lZGbDuHJlciBhdCBtYXBwZSBlciBmb3Igc3Rvci4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk3Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgZmlsZSB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIG1lZGbDuHJlciBhdCBmaWwgZXIgZm9yIHN0b3IuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAyCittc2dpZCAiJUIgKCViKSBjYXVzZXMgc3ltbGluayB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIG1lZGbDuHJlciBhdCBzeW1ib2xzayBoZW52aXNuaW5nIGVyIGZvciBzdG9yLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKyJpa251ZGUgJWkgaGFyIGZsYWdldCBJTkRFWF9GTCBhbmdpdmV0IHDDpSBmaWxzeXN0ZW0gdWRlbiBodHJlZS0iCisidW5kZXJzdMO4dHRlbHNlLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIGRpcmVjdG9yeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IGJ1dCBpcyBub3QgYSBAZC5cbiIKK21zZ3N0ciAiaWtudWRlICVpIGhhciBmbGFnZXQgSU5ERVgtRkwgYW5naXZldCwgbWVuIGVyIGlra2UgZW4gbWFwcGUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCByb290IG5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIGhhcyBhbiBAbiByb290IG5vZGUuXG4iCittc2dzdHIgIkhUUkVFLW1hcHBlLWlrbnVkZSAlaSBoYXIgZW4gdWd5bGRpZyByb290LWtuZGUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjIKK21zZ2lkICJAaCAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbiIKK21zZ3N0ciAiSFRSRUUtbWFwcGUtaWtudWRlICVpIGhhciBlbiBpa2tlIHVuZGVyc3TDuHR0ZXQgaGFzaC12ZXJzaW9uICglTilcbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzIKK21zZ2lkICJAaCAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuIgorbXNnc3RyICJIVFJFRS1tYXBwZS1pa251ZGUgJWkgaGFyIGVuIHRyw6ZkeWJkZSAoJU4pIHNvbSBlciBmb3Igc3RvclxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGFuIGluZGlyZWN0IGJsb2NrICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIG1ldGFkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzNworbXNnaWQgIiIKKyJCYWQgQGIgQGkgaGFzIGFuIGluZGlyZWN0IEBiICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuIgorIkBmIG1ldGFkYXRhLiAgIgorbXNnc3RyICIiCisiVWd5bGRpZyBibG9rLWlrbnVkZSBoYXIgZW4gaW5kaXJla3RlIGJsb2sgKCViKSBzb20gZXIgaSBrb25mbGlrdCBtZWRcbiIKKyJmaWxzeXN0ZW1ldHMgbWV0YWRhdGEuIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemUgQGkgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uIgorbXNnc3RyICLDhm5kcmluZyBhZiBzdMO4cnJlbHNlIGZvciBpa251ZGUgKGdlbilza2FiZWxzZSBtaXNseWtrZWRlczogJW0uIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDgKK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgImlrbnVkZSAlaSBoYXIgZW4gZWtzdHJhIHN0w7hycmVsc2UgKCVJUykgc29tIGVyIHVneWxkaWdcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUzCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgInVkdmlkZXQgYXR0cmlidXQgaSBpa251ZGUgJWkgaGFyIGVuIG5hbWVsZW4gKCVOKSBzb20gZXIgdWd5bGRpZ1xuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1OAorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiIKKyJ1ZHZpZGV0IGF0dHJpYnV0IGkgaWtudWRlICVpIGhhciBlbiB2w6ZyZGlmb3Jza3lkbmluZyAoJU4pIHNvbSBlciB1Z3lsZGlnXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBibG9jayAoJU4pIHdoaWNoIGlzIGludmFsaWQgKG11c3QgYmUgMClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjMKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBAYiAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCittc2dzdHIgIiIKKyJ1ZHZpZGV0IGF0dHJpYnV0IGkgaWtudWRlICVpIGhhciBlbiB2w6ZyZGlibG9rICglTikgc29tIGVyIHVneWxkaWcgKHNrYWwgdsOmcmUgIgorIm8pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2OAorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICIiCisidWR2aWRldCBhdHRyaWJ1dCBpIGlrbnVkZSAlaSBoYXIgZW4gdsOmcmRpc3TDuHJyZWxzZSAoJU4pIHNvbSBlciB1Z3lsZGlnXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzgKK21zZ2lkICJAaSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4iCittc2dzdHIgImlrbnVkZSAlaSBlciBlbiAlSXQgbWVuIGxpZ25lciBlZ2VudGxpZyBlbiBtYXBwZS5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIGV4dGVudCB0cmVlIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgQHggdHJlZSBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIGlub2RlICVpXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4OAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIEBpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIGludmFsaWQgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTQKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIEBuIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBpbnZhbGlkIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTkKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBAbiBsZW4gJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IHN1cGVyYmxvY2sgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IEBTIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdCBzeW1saW5rICVpIGhhcyBFWFRFTlRfRkwgc2V0LiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI0Cittc2dpZCAiIgorIkBpICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjgKK21zZ2lkICJAaSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBAYiBAQjogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzOAorbXNnaWQgIkBxIEBpIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQzCittc2dpZCAiQHEgQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDgKK21zZ2lkICJAcSBAaSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgIgorbXNnc3RyICJJa251ZGVucyBrdm90YSBlciBzeW5saWcgZm9yIGJydWdlcmVuLiAgIgorCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGxvb2tzIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUzCittc2dpZCAiVGhlIGJhZCBAYiBAaSBsb29rcyBAbi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTU4Cittc2dpZCAiIgorIkBpICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBJbnRlcmlvciBleHRlbnQgbm9kZSBsZXZlbCAlTiBvZiBpbm9kZSAlaTpcbgorIy4gQC1leHBhbmRlZDogTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTY1Cittc2dpZCAiIgorIkludGVyaW9yIEB4IG5vZGUgbGV2ZWwgJU4gb2YgQGkgJWk6XG4iCisiTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTcxCittc2dpZCAiIgorIkBpICVpLCBlbmQgb2YgZXh0ZW50IGV4Y2VlZHMgYWxsb3dlZCB2YWx1ZVxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGJsb2NrICViIHNob3VsZCBiZSBhdCBibG9jayAlYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzcKK21zZ2lkICJAZCBAaSAlaSBAYiAlYiBzaG91bGQgYmUgYXQgQGIgJWMuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBleHRlbnQgbWFya2VkIHVuaW5pdGlhbGl6ZWQgYXQgYmxvY2sgJWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBpICVpIGhhcyBAeCBtYXJrZWQgdW5pbml0aWFsaXplZCBhdCBAYiAlYy4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBsb2dpY2FsIGJsb2NrICViIChwaHlzaWNhbCBibG9jayAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuCisjLiBALWV4cGFuZGVkOiBXaWxsIGZpeCBpbiBwYXNzIDFCLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4NworbXNnaWQgIiIKKyJAaSAlaSBsb2dpY2FsIEBiICViIChwaHlzaWNhbCBAYiAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuIgorIldpbGwgZml4IGluIHBhc3MgMUIuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBibG9ja3MgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIGlub2RlLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTk0Cittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBAYnMgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIEBpLi4uXG4iCisiUGFzcyAxQjogUmVzY2FubmluZyBmb3IgQG0gQGJzXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAlaToKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAbSBAYihzKSBpbiBAaSAlaToiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwIChpbm9kZV9kdXBfbWFwKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBpIEBCIChAaV9kdXBfbWFwKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzMCBlMmZzY2svcHJvYmxlbS5jOjEzNDUKK21zZ2lkICJFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIEBhIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzNQorbXNnaWQgIlBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBAaXMgd2l0aCBAbSBAYnNcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDEKK21zZ2lkICJQYXNzIDFEOiBSZWNvbmNpbGluZyBAbSBAYnNcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBGaWxlICVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSkgXG4KKyMuIEAtZXhwYW5kZWQ6ICAgaGFzICVyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0NgorbXNnaWQgIiIKKyJGaWxlICVRIChAaSAjJWksIG1vZCB0aW1lICVJTSkgXG4iCisiICBoYXMgJXIgQG0gQGIocyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1MgorbXNnaWQgIlx0JVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1NworbXNnaWQgIlx0PEBmIG1ldGFkYXRhPlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IChUaGVyZSBhcmUgJU4gaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDYyCittc2dpZCAiIgorIihUaGVyZSBhcmUgJU4gQGlzIGNvbnRhaW5pbmcgQG0gQGJzLilcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY3Cittc2dpZCAiIgorIkBtIEBicyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjbG9uZSBmaWxlOiAlbVxuIgorbXNnc3RyICJLdW5uZSBpa2tlIGtsb25lIGZpbDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4NgorbXNnaWQgIlBhc3MgMjogQ2hlY2tpbmcgQGQgc3RydWN0dXJlXG4iCittc2dzdHIgIkdlbm5lbWzDuGIgMjogS29udHJvbGxlcmVyIG1hcHBlc3RydWt0dXJcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBpbm9kZSBudW1iZXIgZm9yICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJAbiBAaSBudW1iZXIgZm9yICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAidWd5bGRpZyBpa251ZGVudW1tZXIgZm9yIMK7LsKrIGkgbWFwcGVpa251ZGUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGludmFsaWQgaW5vZGUgIzogJURpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTYKK21zZ2lkICJARSBoYXMgQG4gQGkgIzogJURpLlxuIgorbXNnc3RyICJwb3N0ZW4gwrslRG7CqyBpICVwICglaSkgaGFyIHVneWxkaWcgaWtudWRlICM6ICVEaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgJURpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDEKK21zZ2lkICJARSBoYXMgQEQvdW51c2VkIEBpICVEaS4gICIKK21zZ3N0ciAicG9zdGVuIMK7JURuwqsgaSAlcCAoJWkpIGhhciBzbGV0dGV0L3VicnVndCBpa251ZGUgJURpLiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gJy4nICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwNgorbXNnaWQgIkBFIEBMIHRvICcuJyAgIgorbXNnc3RyICJwb3N0ZW4gwrslRG7CqyBpICVwICglaSkgZXIgZW4gaGVudmlzbmluZyB0aWwgwrsuwqsiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcG9pbnRzIHRvIGlub2RlICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExMQorbXNnaWQgIkBFIHBvaW50cyB0byBAaSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIEBiLlxuIgorbXNnc3RyICIiCisicG9zdGVuIMK7JURuwqsgaSAlcCAoJWkpIHBlZ2VyIHDDpSBpa251ZGUgKCVEaSkgcGxhY2VyZXQgaSBlbiB1Z3lsZGlnIGJsb2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIGRpcmVjdG9yeSAlUCAoJURpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE2Cittc2dpZCAiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iCittc2dzdHIgInBvc3RlbiDCuyVEbsKrIGkgJXAgKCVpKSBlciBlbiBoZW52aXNuaW5nIHRpbCBtYXBwZW4gJVAgKCVEaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIHRoZSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjEKK21zZ2lkICJARSBATCB0byB0aGUgQHIuXG4iCittc2dzdHIgInBvc3RlbiDCuyVEbsKrIGkgJXAgKCVpKSBlciBlbiBoZW52aXNuaW5nIHRpbCByb290LWlrbnVkZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI2Cittc2dpZCAiQEUgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbiIKK21zZ3N0ciAicG9zdGVuIMK7JURuwqsgaSAlcCAoJWkpIGhhciBpbGxlZ2FsZSB0ZWduIGkgc2l0IG5hdm4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJNYW5nbGVyIMK7LsKrIGkgbWFwcGUtaWtudWRlICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLi4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJNYW5nbGVyIMK7Li7CqyBpIG1hcHBlLWlrbnVkZSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogRmlyc3QgZW50cnkgJyVEbicgKGlub2RlPSVEaSkgaW4gZGlyZWN0b3J5IGlub2RlICVpICglcCkgc2hvdWxkIGJlICcuJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDEKK21zZ2lkICJGaXJzdCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSAoJXApIEBzICcuJ1xuIgorbXNnc3RyICJGw7hyc3RlIHBvc3QgwrslRG7CqyAoaWtudWRlPSVEaSkgaSBtYXBwZS1pa251ZGUgJWkgKCVwKSBza2FsIHbDpnJlIMK7LsKrXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNlY29uZCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgc2hvdWxkIGJlICcuLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQ2Cittc2dpZCAiU2Vjb25kIEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpIEBzICcuLidcbiIKK21zZ3N0ciAiQW5kZW4gcG9zdCDCuyVEbsKrIChpa251ZGU9JURpKSBpIG1hcHBlLWlrbnVkZSAlaSBza2FsIHbDpnJlIMK7LsKrXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmFkZHIgZm9yIGlub2RlICVpICglUSkgaXMgJUlGLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTUxCittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmFkZHIgZm9yIGlrbnVkZSAlaSAoJVEpIGVyICVJRiwgc2thbCB2w6ZyZSBudWwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlmLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTU2Cittc2dpZCAiaV9maWxlX2FjbCBARiAlSWYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2wgZm9yIGlrbnVkZSAlaSAoJVEpIGVyICVJZiwgc2thbCB2w6ZyZSBudWwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZGlyX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWQsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjEKK21zZ2lkICJpX2Rpcl9hY2wgQEYgJUlkLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2Rpcl9hY2wgZm9yIGlrbnVkZSAlaSAoJVEpIGVyICVJZCwgc2thbCB2w6ZyZSBudWwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnJhZyBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2NgorbXNnaWQgImlfZnJhZyBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mcmFnIGZvciBpa251ZGUgJWkgKCVRKSBlciAlTiwgc2thbCB2w6ZyZSBudWwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnNpemUgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzEKK21zZ2lkICJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZzaXplIGZvciBpa251ZGUgJWkgKCVRKSBlciAlTiwgc2thbCB2w6ZyZSBudWwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZSAoJUltKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTc2Cittc2dpZCAiQGkgJWkgKCVRKSBoYXMgQG4gbW9kZSAoJUltKS5cbiIKK21zZ3N0ciAiaWtudWRlICVpICglUSkgaGFyIHVneWxkaWcgdGlsc3RhbmQgKCVJbSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZGlyZWN0b3J5IGNvcnJ1cHRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODEKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogQGQgY29ycnVwdGVkXG4iCittc2dzdHIgIm1hcHBlLWlrbnVkZSAlaSwgJUIsIGZvcnNreWRuaW5nICVOOiBtYXBwZSDDuGRlbGFndFxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4NgorbXNnaWQgIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuIgorbXNnc3RyICJtYXBwZS1pa251ZGUgJWksICVCLCBmb3Jza3lkbmluZyAlTjogZmlsbmF2biBlciBmb3IgbGFuZ3RcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiB1bmFsbG9jYXRlZCAlQi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTkxCittc2dpZCAiQGQgQGkgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgIgorbXNnc3RyICJtYXBwZS1pa251ZGUgJWkgaGFyIGVuIHVhbGxva2VyZXQgJUIuIgorCisjLiBALWV4cGFuZGVkOiAnLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5NgorIywgYy1mb3JtYXQKK21zZ2lkICInLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICLCuy7Cqy1tYXBwZXBvc3QgaSBtYXBwZS1pa251ZGUgJWkgZXIgaWtrZSBOVUwtYWZzbHV0dGV0XG4iCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICInLi4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiwrsuLsKrLW1hcHBlcG9zdCBpIG1hcHBlaWtudWRlICVpIGVyIGlra2UgTlVsLWFmc2x1dHRldFxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjA2Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBjaGFyYWN0ZXIgQHYuXG4iCittc2dzdHIgImlrbnVkZSAlaSAoJVEpIGVyIGVuIGlsbGVnYWwgdGVnbmVuaGVkLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgYmxvY2sgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTEKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIEBiIEB2LlxuIgorbXNnc3RyICJpa251ZGUgJWkgKCVRKSBlciBlbiBpbGxlZ2FsIGJsb2tlbmhlZC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTYKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4nIEBlLlxuIgorbXNnc3RyICJwb3N0ZW4gwrslRG7CqyBpICVwICglaSkgZXIgZW4gZHVwbGlrZXJldCDCuy7Cqy1wb3N0LlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLi4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjEKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4uJyBAZS5cbiIKK21zZ3N0ciAicG9zdGVuIMK7JURuwqsgaSAlcCAoJWkpIGVyIGVuIGR1cGxpZXJldCDCuy4uwqstcG9zdFxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjYgZTJmc2NrL3Byb2JsZW0uYzoxNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVybmFsIGVycm9yOiBjb3VsZG4ndCBmaW5kIGRpcl9pbmZvIGZvciAlaS5cbiIKK21zZ3N0ciAiSW50ZXJuIGZlamw6IGt1bm5lIGlra2UgZmluZGUgZGlyX2luZm8gZm9yICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyByZWNfbGVuIG9mICVEciwgc2hvdWxkIGJlICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzEKK21zZ2lkICJARSBoYXMgcmVjX2xlbiBvZiAlRHIsIEBzICVOLlxuIgorbXNnc3RyICJwb3N0ZW4gwrslRG7CqyBpICVwICglaSkgaGFyIHJlY19sZW4gZm9yICVEciwgc2thbCB2w6ZyZSAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IHN0cnVjdHVyZTogJW1cbiIKK21zZ3N0ciAiZGVyIG9wc3RvZCBlbiBmZWpsIHVuZGVyIGFsbG9rZXJpbmcgYWYgaWNvdW50LXN0cnVrdHVyOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcnkgYmxvY2tzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaXRlcmF0aW5nIG92ZXIgQGQgQGJzOiAlbVxuIgorbXNnc3RyICJEZXIgb3BzdG9kIGVuIGZlamwgdW5kZXIgZ2VubmVtbMO4YiBvdmVyIG1hcHBlYmxva2tlOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDYKK21zZ2lkICJFcnJvciByZWFkaW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkRlciBvcHN0b2QgZW4gZmVqbCB1bmRlciBsw6ZzbmluZyBhZiBtYXBwZWJsb2sgJWIgKGlrbnVkZSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1MQorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiRGVyIG9wc3RvZCBlbiBmZWpsIHVuZGVyIHNrcml2bmluZyBhZiBtYXBwZWJsb2sgJWIgKGlrbnVkZSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9jayBmb3IgaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIG5ldyBAZCBAYiBmb3IgQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiIgorIkRlciBvcHN0b2QgZW4gZmVqbCB1bmRlciBhbGxva2VyaW5nIGFmIG55IG1hcHBlYmxvayBmb3IgaWtudWRlICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRlYWxsb2NhdGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlYWxsb2NhdGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRGVyIG9wc3RvZCBlbiBmZWpsIHVuZGVyIGRlYWxsb2tlcmluZyBhZiBpa251ZGUgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBlbnRyeSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGQgQGUgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbiIKK21zZ3N0ciAibWFwcGVwb3N0IGZvciDCuy7CqyBpICVwICglaSkgZXIgc3Rvci5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIEZJRk8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3MQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiaWtudWRlICVpICglUSkgZXIgZW4gaWxsZWdhbCBGSUZPLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgc29ja2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNzYKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIHNvY2tldC5cbiIKK21zZ3N0ciAiaWtudWRlICVpICglUSkgZXIgZW4gaWxsZWdhbCBzb2trZWwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICclRG4nIGluICVwICglaSkgdG8gJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4MQorbXNnaWQgIlNldHRpbmcgZmlsZXR5cGUgZm9yIEBFIHRvICVOLlxuIgorbXNnc3RyICJBbmdpdmVyIGZpbHR5cGUgZm9yIHBvc3RlbiDCuyVEbsKrIGkgJXAgKCVpKSB0aWwgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgc2hvdWxkIGJlICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjg2Cittc2dpZCAiQEUgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgQHMgJU4pLlxuIgorbXNnc3RyICIiCisicG9zdGVuIMK7JURuwqsgaSAlcCAoJWkpIGhhciBlbiBmb3JrZXJ0IGZpbHR5cGUgKHZhciAlRHQsIHNrYWwgdsOmcmUgJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5MQorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgInBvc3RlbiDCuyVEbsKrIGkgJXAgKCVpKSBoYXIgZmlsdHlwZXPDpnQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgemVyby1sZW5ndGggbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjk2Cittc2dpZCAiQEUgaGFzIGEgQHogbmFtZS5cbiIKK21zZ3N0ciAicG9zdGVuIMK7JURuwqsgaSAlcCAoJWkpIGhhciBldCBudWxsw6ZuZ2RlIG5hdm4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFN5bWxpbmsgJVEgKGlub2RlICMlaSkgaXMgaW52YWxpZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzAxCittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiU3ltYm9sc2sgaGVudmlzbmluZyAlUSAoaWtudWRlICMlaSkgZXIgdWd5bGRpZy5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGZvciBpbm9kZSAlaSAoJVEpIGlzIGludmFsaWQgKCVJZikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMwNgorbXNnaWQgIkBhIEBiIEBGIEBuICglSWYpLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzExCittc2dpZCAiQGYgY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gQFMuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxNgorbXNnaWQgIkBwIEBoICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiByZWZlcmVuY2VkIHR3aWNlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMyMQorbXNnaWQgIkBwIEBoICVkOiAlQiByZWZlcmVuY2VkIHR3aWNlXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI2Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMzEKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzNgorbXNnaWQgIkBuIEBoICVkICglcSkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKTogYmFkIGJsb2NrIG51bWJlciAlYi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQwCittc2dpZCAiQHAgQGggJWQgKCVxKTogYmFkIEBiIG51bWJlciAlYi5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogcm9vdCBub2RlIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBwIEBoICVkOiByb290IG5vZGUgaXMgQG5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgbGltaXQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTUKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGxpbWl0ICglTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgY291bnQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjAKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGNvdW50ICglTilcbiIKK21zZ3N0ciAicHJvYmxlbSBpIEhUUkVFLW1hcHBlbnMgaWtudWRlICVkOiAlQiBoYXIgdWd5bGRpZ3QgYW50YWwgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2NQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbiIKK21zZ3N0ciAicHJvYmxlbSBpIEhUUkVFLWFtYXBwZW5zIGlrbnVkZSAlZDogJUIgaGFyIGVuIHVvcmRuZXQgaGFzaHRhYmVsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBkZXB0aCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzUKK21zZ2lkICJEdXBsaWNhdGUgQEUgZm91bmQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuCisjLiBALWV4cGFuZGVkOiBSZW5hbWUgdG8gJXMKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4MAorIywgbm8tYy1mb3JtYXQKK21zZ2lkICIiCisiQEUgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbiIKKyJSZW5hbWUgdG8gJXMiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGZvdW5kLlxuCisjLiBALWV4cGFuZGVkOiBcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzg1Cittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlfYmxvY2tzX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzkwCittc2dpZCAiaV9ibG9ja3NfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogVW5leHBlY3RlZCBibG9jayBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk1Cittc2dpZCAiVW5leHBlY3RlZCBAYiBpbiBAaCAlZCAoJXEpLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgaW4gZ3JvdXAgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5OQorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGluIEBnICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgZm91bmQgaW4gZ3JvdXAgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwNAorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGZvdW5kIGluIEBnICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2xfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDkKK21zZ2lkICJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MTYKK21zZ2lkICJQYXNzIDM6IENoZWNraW5nIEBkIGNvbm5lY3Rpdml0eVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgbm90IGFsbG9jYXRlZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDIxCittc2dpZCAiQHIgbm90IGFsbG9jYXRlZC4gICIKK21zZ3N0ciAiUm9vdC1pa251ZGUgZXIgaWtrZSBhbGxva2VyZXQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IE5vIHJvb20gaW4gbG9zdCtmb3VuZCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyNgorbXNnaWQgIk5vIHJvb20gaW4gQGwgQGQuICAiCittc2dzdHIgIkluZ2VuIHBsYWRzIGkgbWFwcGVuIGxvc3QrZm91bmQuIgorCisjLiBALWV4cGFuZGVkOiBVbmNvbm5lY3RlZCBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5jb25uZWN0ZWQgQGQgQGkgJWkgKCVwKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIG5vdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDM2Cittc2dpZCAiL0BsIG5vdCBmb3VuZC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgc2hvdWxkIGJlICVxICglZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ0MQorbXNnaWQgIicuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBAcyAlcSAoJWQpLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBvciBub24tZXhpc3RlbnQgL2xvc3QrZm91bmQuICBDYW5ub3QgcmVjb25uZWN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDYKK21zZ2lkICJCYWQgb3Igbm9uLWV4aXN0ZW50IC9AbC4gIENhbm5vdCByZWNvbm5lY3QuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQ291bGQgbm90IGV4cGFuZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBleHBhbmQgL0BsOiAlbVxuIgorbXNnc3RyICJLdW5uZSBpa2tlIHVkdmlkZSAvbG9zdCtmb3VuZDogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWNvbm5lY3QgJWk6ICVtXG4iCittc2dzdHIgIkt1bm5lIGlra2UgZ2VuZm9yYmluZGUgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL0BsOiAlbVxuIgorbXNnc3RyICJEZXIgb3BzdG9kIGVuIGZlaiB1bmRlciBmb3Jzw7hnZXQgcMOlIGF0IGZpbmRlIC9sb3N0K2ZvdW5kOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Jsb2NrOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AYjogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX255X2Jsb2s6ICVtIHVuZGVyIGZvcnPDuGcgcMOlIGF0IG9wcmV0dGUgbWFwcGVuIC9sb3N0K2ZvdW5kXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfaW5vZGU6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BpOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X2Rpcl9AYjogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IEBkIEBiXG4iCittc2dzdHIgImV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSB1bmRlciBvcHJldHRlbHNlIGFmIG55IG1hcHBlYmxva1xuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBkaXJlY3RvcnkgYmxvY2sgZm9yIC9sb3N0K2ZvdW5kXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfd3JpdGVfZGlyX0BiOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBAZCBAYiBmb3IgL0BsXG4iCittc2dzdHIgIiIKKyJleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSB1bmRlciBza3Jpdm5pbmcgYWYgbWFwcGVibG9ra2VuIGZvciAvbG9zdCtmb3VuZFxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBhZGp1c3RpbmcgaW5vZGUgY291bnQgb24gaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGFkanVzdGluZyBAaSBjb3VudCBvbiBAaSAlaVxuIgorbXNnc3RyICJGZWpsIHVuZGVyIGp1c3RlcmluZyBhZiBpa251ZGUtYW50YWwgcMOlIGlrbnVkZSAlaVxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkbid0IGZpeCBwYXJlbnQgb2YgaW5vZGUgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IGRpcmVjdG9yeSBlbnRyeVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBAZCBAZVxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNyZWF0aW5nIHJvb3QgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyByb290IEBkICglcyk6ICVtXG4iCittc2dzdHIgIkRlciBvcHN0b2QgZW4gZmVqbCB1bmRlciBvcHJldHRlIGFmIHJvZG1hcHBlICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgL0BsIEBkICglcyk6ICVtXG4iCittc2dzdHIgIkZlamwgdW5kZXIgb3ByZXR0ZWxzZSBhZiAvQGwgQGQgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3Rvcnk7IGFib3J0aW5nLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MTYKK21zZ2lkICJAciBpcyBub3QgYSBAZDsgYWJvcnRpbmcuXG4iCittc2dzdHIgIkByIGVyIGlra2UgZW4gQGQ7IGFmYnJ5ZGVyLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIxCittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICJLYW4gaWtrZSBmb3J0c8OmdHRlIHVkZW4gZW4gQHIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIGlzIG5vdCBhIGRpcmVjdG9yeSAoaW5vPSVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiL0BsIGlzIG5vdCBhIEBkIChpbm89JWkpXG4iCittc2dzdHIgIi9AbCBlciBpa2tlIGVuIEBkIChpbm89JWkpXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUzOAorbXNnaWQgIlBhc3MgM0E6IE9wdGltaXppbmcgZGlyZWN0b3JpZXNcbiIKK21zZ3N0ciAiR2VubmVtbMO4YiAzQTogT3B0aW1lcmVyIG1hcHBlclxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkaXJzX3RvX2hhc2ggaXRlcmF0b3I6ICVtXG4iCittc2dzdHIgIkt1bm5lIGlra2Ugb3ByZXR0ZSBkaXJzX3RvX2hhc2gtaXRlcmF0b3I6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0OAorbXNnaWQgIkZhaWxlZCB0byBvcHRpbWl6ZSBkaXJlY3RvcnkgJXEgKCVkKTogJW1cbiIKK21zZ3N0ciAiS3VubmUgaWtrZSBvcHRpbWVyZSBtYXBwZSAlcSAoJWQpOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NTMKK21zZ2lkICJPcHRpbWl6aW5nIGRpcmVjdG9yaWVzOiAiCittc2dzdHIgIk9wdGltZXJlciBtYXBwZXI6ICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcwCittc2dpZCAiUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzXG4iCittc2dzdHIgIkdlbm5lbWzDuGIgNDogS29udHJvbGxlcmVyIHJlZmVyZW5jZWFudGFsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgemVyby1sZW5ndGggaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAeiBAaSAlaS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIGlub2RlICVpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAaSAlaVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg1Cittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogV0FSTklORzogUFJPR1JBTU1JTkcgQlVHIElOIEUyRlNDSyFcbgorIy4gQC1leHBhbmRlZDogXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbgorIy4gQC1leHBhbmRlZDogaW5vZGVfbGlua19pbmZvWyVpXSBpcyAlTiwgaW5vZGUuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IHNob3VsZCBiZSB0aGUgc2FtZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg5Cittc2dpZCAiIgorIldBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4iCisiXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbiIKKyJAaV9saW5rX2luZm9bJWldIGlzICVOLCBAaS5pX2xpbmtzX2NvdW50IGlzICVJbC4gIFRoZXkgQHMgdGhlIHNhbWUhXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU5OQorbXNnaWQgIlBhc3MgNTogQ2hlY2tpbmcgQGcgc3VtbWFyeSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGlub2RlIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwNAorbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBpIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDkKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYxNAorbXNnaWQgIkBiIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYzNAorbXNnaWQgIkBpIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTQKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTkKK21zZ2lkICJEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjY0Cittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2OQorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NzQKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFBST0dSQU1NSU5HIEVSUk9SOiBmaWxlc3lzdGVtICgjJU4pIGJpdG1hcCBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBiaXRtYXAgCisjLiBALWV4cGFuZGVkOiBlbmRwb2ludHMgKCVpLCAlailcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjc5Cittc2dpZCAiIgorIlBST0dSQU1NSU5HIEVSUk9SOiBAZiAoIyVOKSBAQiBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBAQiAiCisiZW5kcG9pbnRzICglaSwgJWopXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjg1Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGZ1ZGdpbmcgZW5kIG9mIGJpdG1hcCAoJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBpbm9kZSBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBpIEBCOiAlbVxuIgorbXNnc3RyICJGZWpsIHVuZGVyIGtvcGllcmluZyBhZiBlcnN0YXRuaW5nc2lrbnVkZS1iaXRtYXA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAYiBAQjogJW1cbiIKK21zZ3N0ciAiRmVqbCB1bmRlciBrb3BpZXJpbmcgYWYgZXJzdGF0bmluZ3NibG9rLWJpdG1hcDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgYmxvY2socykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAYihzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbiIKK21zZ3N0ciAiZ3J1cHBlICVnIGJsb2trZSBpIGJydWcgbWVuIGdydXBwZXIgZXIgbWFya2VyZXQgQkxPQ0tfVU5JTklUXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGlub2RlKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGkocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4iCittc2dzdHIgImdydXBwZSAlZyBpa251ZGVyIGkgYnJ1ZyBtZW4gZ3J1cHBlIGVyIG1hcmtlcmV0IElOT0RFX1VOSU5JVFxuIgorCisjLiBALWV4cGFuZGVkOiBSZWNyZWF0ZSBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MzIKK21zZ2lkICJSZWNyZWF0ZSBAaiIKK21zZ3N0ciAiR2Vuc2thYiBqb3VybmFsIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MzcKK21zZ2lkICJVcGRhdGUgcXVvdGEgaW5mbyBmb3IgcXVvdGEgdHlwZSAlTiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzZXR0aW5nIGJsb2NrIGdyb3VwIGNoZWNrc3VtIGluZm86ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc0MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIEBiIEBnIGNoZWNrc3VtIGluZm86ICVtXG4iCittc2dzdHIgIkZlamwgdmVkIGFuZ2l2ZWxzZSBhZiBibG9rZ3J1cHBlbnMga29udHJvbHN1bXNpbmZvOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBmaWxlIHN5c3RlbSBpbmZvOiAlbVxuIgorbXNnc3RyICJGZWpsIHVuZGVyIHNrcml2bmluZyBhZiBmaWxzeXN0ZW1pbmZvOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZmx1c2hpbmcgd3JpdGVzIHRvIHN0b3JhZ2UgZGV2aWNlOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmhhbmRsZWQgZXJyb3IgY29kZSAoMHgleCkhXG4iCittc2dzdHIgIlVow6VuZHRlcmV0IGZlamxrb2RlIChveCV4KSFcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxOTk2IGUyZnNjay9wcm9ibGVtLmM6MjAwMAorbXNnaWQgIklHTk9SRUQiCittc2dzdHIgIklHTk9SRVJFVCIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVkLCBlbGFwc2VkIHRpbWU6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCittc2dzdHIgIkFudmVuZHQgaHVrb21tc2Vsc2U6ICVkLCBmb3Jsw7hiZXQgdGlkOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzaXplIG9mIGlub2RlPSVkXG4iCittc2dzdHIgInN0w7hycmVsc2UgcMOlIGlrbnVkZT0lZFxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMTkKK21zZ2lkICJ3aGlsZSBzdGFydGluZyBpbm9kZSBzY2FuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjEzMAorbXNnaWQgIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3N1cGVyLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZm9yIGlub2RlICVkIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9zdXBlci5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzQKK21zZ2lkICJUcnVuY2F0aW5nIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9zdXBlci5jOjI3NQorbXNnaWQgIkNsZWFyaW5nIgorbXNnc3RyICJSeWRkZXIiCisKKyM6IGUyZnNjay91bml4LmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6ODAKK21zZ2lkICIiCisiXG4iCisiRW1lcmdlbmN5IGhlbHA6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyByZXBhaXIgKG5vIHF1ZXN0aW9ucylcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTWFrZSBubyBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIEFzc3VtZSBcInllc1wiIHRvIGFsbCBxdWVzdGlvbnNcbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIGJhZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYWRibG9jayAiCisibGlzdFxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3JjZSBjaGVja2luZyBldmVuIGlmIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGNsZWFuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4NgorbXNnaWQgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgQmUgdmVyYm9zZVxuIgorIiAtYiBzdXBlcmJsb2NrICAgICAgICBVc2UgYWx0ZXJuYXRpdmUgc3VwZXJibG9ja1xuIgorIiAtQiBibG9ja3NpemUgICAgICAgICBGb3JjZSBibG9ja3NpemUgd2hlbiBsb29raW5nIGZvciBzdXBlcmJsb2NrXG4iCisiIC1qIGV4dGVybmFsX2pvdXJuYWwgIFNldCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbFxuIgorIiAtbCBiYWRfYmxvY2tzX2ZpbGUgICBBZGQgdG8gYmFkYmxvY2tzIGxpc3RcbiIKKyIgLUwgYmFkX2Jsb2Nrc19maWxlICAgU2V0IGJhZGJsb2NrcyBsaXN0XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICVsbHUvJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTEydSBpbm9kZSB1c2VkICglMi4yZiUlLCBvdXQgb2YgJXUpXG4iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyIlMTJ1IGlub2RlcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJXUpXG4iCittc2dzdHJbMF0gIiIKKyJcbiIKKyIlMTJ1IGlrbnVkZSBicnVndCAoJTIuMmYlJSwgdWQgYWYgJXUpXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IGlrbnVkZXIgYnJ1Z3QgKCUyLjJmJSUsIHVkIGFmICV1KVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGUgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3J5ICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcmllcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgICAgICAgIyBvZiBpbm9kZXMgd2l0aCBpbmQvZGluZC90aW5kIGJsb2NrczogJXUvJXUvJXVcbiIKK21zZ3N0ciAiICAgICAgICAgICAgICMgYWYgaWtudWRlciBtZWQgaW5kL2RpbmQvdGluZC1ibG9ra2U6ICV1LyV1LyV1XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc5Cittc2dpZCAiICAgICAgICAgICAgIEV4dGVudCBkZXB0aCBoaXN0b2dyYW06ICIKK21zZ3N0ciAiICAgICAgICAgICAgIFVkdmlkIGR5YmRlaGlzdG9ncmFtOiAiCisKKyM6IGUyZnNjay91bml4LmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMmxsdSBibG9jayB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEybGx1IGJsb2NrcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ3N0clswXSAiJTEybGx1IGJsb2sgYnJ1Z3QgKCUyLjJmJSUsIHVkIGFmICVsbHUpXG4iCittc2dzdHJbMV0gIiUxMmxsdSBibG9ra2UgYnJ1Z3QgKCUyLjJmJSUsIHVkIGFmICVsbHUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmFkIGJsb2NrXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmFkIGJsb2Nrc1xuIgorbXNnc3RyWzBdICIlMTJ1IHVneWxkaWcgYmxva1xuIgorbXNnc3RyWzFdICIlMTJ1IHVneWxkaWdlIGJsb2trZVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxhcmdlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsYXJnZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IHN0b3IgZmlsXG4iCittc2dzdHJbMV0gIiUxMnUgc3RvcmUgZmlsZXJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiUxMnUgbm9ybWFsIGZpbFxuIgorbXNnc3RyWzFdICIiCisiXG4iCisiJTEydSBub3JtYWxlIGZpbGVyXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZGlyZWN0b3J5XG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZGlyZWN0b3JpZXNcbiIKK21zZ3N0clswXSAiJTEydSBtYXBwZVxuIgorbXNnc3RyWzFdICIlMTJ1IG1hcHBlclxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSB0ZWduZW5oZWRzZmlsXG4iCittc2dzdHJbMV0gIiUxMnUgdGVnbmVuaGVkc2ZpbGVyXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBibG9jayBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBibG9rZW5oZWRzZmlsXG4iCittc2dzdHJbMV0gIiUxMnUgYmxva2VuaGVkc2ZpbGVyXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlmb1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpZm9zXG4iCittc2dzdHJbMF0gIiUxMnUgZmlmb1xuIgorbXNnc3RyWzFdICIlMTJ1IGZpZm8nZXJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsaW5rXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGlua3NcbiIKK21zZ3N0clswXSAiJTEydSBoZW52aXNuaW5nXG4iCittc2dzdHJbMV0gIiUxMnUgaGVudmlzbmluZ2VyXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgc3ltYm9saWMgbGluayIKK21zZ2lkX3BsdXJhbCAiJTEydSBzeW1ib2xpYyBsaW5rcyIKK21zZ3N0clswXSAiJTEydSBzeW1ib2xzayBoZW52aXNuaW5nIgorbXNnc3RyWzFdICIlMTJ1IHN5bWJvbHNrZSBoZW52aXNuaW5nZXIiCisKKyM6IGUyZnNjay91bml4LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rKVxuIgorbXNnaWRfcGx1cmFsICIgKCV1IGZhc3Qgc3ltYm9saWMgbGlua3MpXG4iCittc2dzdHJbMF0gIiAoJXUgaHVydGlnIHN5bWJvbHNrIGhlbnZpc25pbmcpXG4iCittc2dzdHJbMV0gIiAoJXUgaHVydGlnZSBzeW1ib2xza2UgaGVudmlzbmluZ2VyKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHNvY2tldFxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IHNvY2tldHNcbiIKK21zZ3N0clswXSAiJTEydSBzb2trZWxcbiIKK21zZ3N0clsxXSAiJTEydSBzb2tsZXJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBmaWxcbiIKK21zZ3N0clsxXSAiJTEydSBmaWxlclxuIgorCisjOiBlMmZzY2svdW5peC5jOjIzMiBtaXNjL2JhZGJsb2Nrcy5jOjk5MyBtaXNjL3R1bmUyZnMuYzoyMTIyIG1pc2MvdXRpbC5jOjMxNgorIzogcmVzaXplL21haW4uYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLiIKK21zZ3N0ciAidW5kZXIgYmVzdGVtbWVsc2UgYWYgaHZvcnZpZHQgJXMgZXIgbW9udGVyZXQuIgorCisjOiBlMmZzY2svdW5peC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiQWR2YXJzZWwhICVzIGVyIG1vbnRlcmV0LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgaW4gdXNlLlxuIgorbXNnc3RyICJBZHZhcnNlbCEgJXMgZXIgaSBicnVnLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICIlcyBlciBtb250ZXJldC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW4gdXNlLlxuIgorbXNnc3RyICIlcyBlciBpIGJydWcuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY2Cittc2dpZCAiIgorIkNhbm5vdCBjb250aW51ZSwgYWJvcnRpbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJLYW4gaWtrZSBmb3J0c8OmdHRlLCBhZmJyeWRlci5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjgKK21zZ2lkICIiCisiXG4iCisiXG4iCisiV0FSTklORyEhISAgVGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4gICBJZiB5b3UgY29udGludWUgeW91ICoqKldJTEwqKipcbiIKKyJjYXVzZSAqKipTRVZFUkUqKiogZmlsZXN5c3RlbSBkYW1hZ2UuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoyNzMKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gY29udGludWUiCittc2dzdHIgIsOYbnNrZXIgZHUgdmlya2VsaWcgYXQgZm9ydHPDpnR0ZSIKKworIzogZTJmc2NrL3VuaXguYzoyNzUKK21zZ2lkICJjaGVjayBhYm9ydGVkLlxuIgorbXNnc3RyICJrb250cm9sIGFmYnJ1ZHQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MzY4Cittc2dpZCAiIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMiCittc2dzdHIgIiBpbmRlaG9sZGVyIGV0IGZpbHN5dGVtIG1lZCBmZWpsIgorCisjOiBlMmZzY2svdW5peC5jOjM3MAorbXNnaWQgIiB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkIgorbXNnc3RyICIgdmFyIGlra2Ugb3JkZW5saWcgYWZtb250ZXJldCIKKworIzogZTJmc2NrL3VuaXguYzozNzIKK21zZ2lkICIgcHJpbWFyeSBzdXBlcmJsb2NrIGZlYXR1cmVzIGRpZmZlcmVudCBmcm9tIGJhY2t1cCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGJlZW4gbW91bnRlZCAldSB0aW1lcyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiBlciBibGV2ZXQgbW9udGVyZXQgJXUgZ2FuZ2UgdWRlbiBhdCBibGl2ZSBrb250cm9sbGVyZXQiCisKKyM6IGUyZnNjay91bml4LmM6MzgzCittc2dpZCAiIGhhcyBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0aW1lIGluIHRoZSBmdXR1cmUiCittc2dzdHIgIiBoYXIgZGF0b2VuIGZvciBzaWRzdGUga29udHJvbCBhZiBmaWxzeXN0ZW1ldCB1ZGUgaSBmcmVtdGlkZW4iCisKKyM6IGUyZnNjay91bml4LmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgZ29uZSAldSBkYXlzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIGVyIGlra2UgYmxldmV0IGtvbnRyb2xsZXJldCBpICV1IGRhZ2UiCisKKyM6IGUyZnNjay91bml4LmM6Mzk4Cittc2dpZCAiLCBjaGVjayBmb3JjZWQuXG4iCittc2dzdHIgIiwgdHZ1bmdlbiBrb250cm9sLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4sICV1LyV1IGZpbGVzLCAlbGx1LyVsbHUgYmxvY2tzIgorbXNnc3RyICIlczogcmVuLCAldS8ldSBmaWxlciwgJWxsdS8lbGx1IGJsb2trZSIKKworIzogZTJmc2NrL3VuaXguYzo0NTEKK21zZ2lkICIgKGNoZWNrIGRlZmVycmVkOyBvbiBiYXR0ZXJ5KSIKK21zZ3N0ciAiIChrb250cm9sIHVkc2t1ZHQ7IHDDpSBiYXR0ZXJpKSIKKworIzogZTJmc2NrL3VuaXguYzo0NTQKK21zZ2lkICIgKGNoZWNrIGFmdGVyIG5leHQgbW91bnQpIgorbXNnc3RyICIgKGtvbnRyb2wgZWZ0ZXIgbsOmc3RlIG1vbnRlcmluZykiCisKKyM6IGUyZnNjay91bml4LmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoY2hlY2sgaW4gJWxkIG1vdW50cykiCittc2dzdHIgIiAoa29udHJvbGxlciBvbSAlbGQgbW9udGVyaW5nZXIpIgorCisjOiBlMmZzY2svdW5peC5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogQ291bGRuJ3Qgb3BlbiAvZGV2L251bGwgKCVzKVxuIgorbXNnc3RyICJGRUpMOiBLdW5uZSBpa2tlIMOlYm5lIC9kZXYvbnVsbCAoJXMpXG4iCisKKyM6IGUyZnNjay91bml4LmM6Njc1Cittc2dpZCAiSW52YWxpZCBFQSB2ZXJzaW9uLlxuIgorbXNnc3RyICJVZ3lsZGlnIEVBLXZlcnNpb24uXG4iCisKKyM6IGUyZnNjay91bml4LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZXh0ZW5kZWQgb3B0aW9uOiAlc1xuIgorbXNnc3RyICJVa2VuZHQgdWR2aWRldCB0aWx2YWxnOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjcyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIGUyZnNjayBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIlN5bnRha3NmZWpsIGkgZTJmc2NrLWtvbmZpZ3VyYXRpb25zZmlsZW4gKCVzLCBsaW5qZSAjJWQpXG4iCisiXHQlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAiRGVyIG9wc3RvZCBlbiBmZWpsIHVuZGVyIHZhbGlkZXJpbmcgYWYgZmlsYmVza3JpdmVyICVkOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjgwMQorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgIlVneWxkaWcgZmlsYmVza3JpdmVyIGZvciBmdWxkZsO4cmVsc2VzaW5mb3JtYXRpb24iCisKKyM6IGUyZnNjay91bml4LmM6ODE2Cittc2dpZCAiT25seSBvbmUgb2YgdGhlIG9wdGlvbnMgLXAvLWEsIC1uIG9yIC15IG1heSBiZSBzcGVjaWZpZWQuIgorbXNnc3RyICJLdW4gZW4gYWYgdGlsdmFsZ2VuZSAtcC8tYSwgLW4gZWxsZXIgLXkgbcOlIGFuZ2l2ZXMuIgorCisjOiBlMmZzY2svdW5peC5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgLXQgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKK21zZ3N0ciAiVGlsdmFsZ2V0IC10IGVyIGlra2UgdW5kZXJzdMO4dHRldCBww6UgZGVubmUgdmVyc2lvbiBhZiBlMmZzY2suXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODY4IGUyZnNjay91bml4LmM6OTQyIG1pc2MvdHVuZTJmcy5jOjg3OSBtaXNjL3R1bmUyZnMuYzoxMTc0CisjOiBtaXNjL3R1bmUyZnMuYzoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZXNvbHZlICclcyciCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo5MjEKK21zZ2lkICJUaGUgLW4gYW5kIC1EIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIlRpbHZhbGdlbmUgLW4gb2cgLUQgZXIgaWtrZSBrb21wYXRpYmxlLiIKKworIzogZTJmc2NrL3VuaXguYzo5MjYKK21zZ2lkICJUaGUgLW4gYW5kIC1jIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIlRpbHZhbGdlbmUgLW4gb2cgLUQgZXIgaWtrZSBrb21wYXRpYmxlLiIKKworIzogZTJmc2NrL3VuaXguYzo5MzEKK21zZ2lkICJUaGUgLW4gYW5kIC1sLy1MIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIlRpbHZhbGdlbmUgLW4gb2cgLWwvLUwgZXIgaWtrZSBrb21wYXRpYmxlLiIKKworIzogZTJmc2NrL3VuaXguYzo5ODUKK21zZ2lkICJUaGUgLWMgYW5kIHRoZSAtbC8tTCBvcHRpb25zIG1heSBub3QgYmUgYm90aCB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuXG4iCittc2dzdHIgIlRpbHZhbGdlbmUgLWMgb2cgLWwvLUwgbcOlIGlra2UgYnJ1Z2VzIHDDpSBzYW1tZSB0aWQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTAzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTJGU0NLX0pCRF9ERUJVRyBcIiVzXCIgbm90IGFuIGludGVnZXJcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkUyRlNDS19KQkRfREVCVUcgwrslc8KrIGVyIGlra2UgZXQgaGVsdGFsXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTA0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSW52YWxpZCBub24tbnVtZXJpYyBhcmd1bWVudCB0byAtJWMgKFwiJXNcIilcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBpbnRlcnZhbCBpcyAldSBzZWNvbmRzIGFuZCB0b3RhbCB3YWl0IHRpbWUgaXMgJXUgc2Vjb25kcy4gUGxlYXNlICIKKyJ3YWl0Li4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMTQ5IGUyZnNjay91bml4LmM6MTE1NAorbXNnaWQgIndoaWxlIGNoZWNraW5nIE1NUCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjExNTYgbWlzYy90dW5lMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJJZiB5b3UgYXJlIHN1cmUgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IGluIHVzZSBvbiBhbnkgbm9kZSwgcnVuOlxuIgorIid0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfSdcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEyMDcKK21zZ2lkICJFcnJvcjogZXh0MmZzIGxpYnJhcnkgdmVyc2lvbiBvdXQgb2YgZGF0ZSFcbiIKK21zZ3N0ciAiRmVqbDogZXh0MmZzLWJpYmxpb3Rla3N2ZXJzaW9uZW4gZXIgZm9yw6ZsZGV0IVxuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMTQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gaW5pdGlhbGl6ZSBwcm9ncmFtIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTIzNworIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzLCAlc1xuIgorbXNnc3RyICJcdEJydWdlciAlcywgJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjQ5Cittc2dpZCAibmVlZCB0ZXJtaW5hbCBmb3IgaW50ZXJhY3RpdmUgcmVwYWlycyIKK21zZ3N0ciAia3LDpnZlciB0ZXJtaW5hbCBmb3IgaW50ZXJha3RpdmUgcmVwYXJhdGlvbmVyIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzA1Cittc2dpZCAiU3VwZXJibG9jayBpbnZhbGlkLCIKK21zZ3N0ciAiU3VwZXJibG9rIHVneWxkaWcsIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDYKK21zZ2lkICJHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiIKK21zZ3N0ciAiR3J1cHBlYmVza3JpdmVyZSBzZXIgdWd5bGRpZ2UgdWQgLi4uIgorCisjOiBlMmZzY2svdW5peC5jOjEzMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHVzaW5nIHRoZSBiYWNrdXAgYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZ29pbmcgYmFjayB0byBvcmlnaW5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiVzOiBnw6VyIHRpbGJhZ2UgdGlsIG9yaWdpbmFsIHN1cGVyYmxva1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNDkKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gcmV2aXNpb24gaXMgYXBwYXJlbnRseSB0b28gaGlnaCBmb3IgdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKKyIoT3IgdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jayBpcyBjb3JydXB0KVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTM1NgorbXNnaWQgIkNvdWxkIHRoaXMgYmUgYSB6ZXJvLWxlbmd0aCBwYXJ0aXRpb24/XG4iCittc2dzdHIgIkt1bm5lIGRldHRlIHbDpnJlIGVuIHBhcnRpdGlvbiBtZWQgbnVsbMOmbmdkZT9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBtdXN0IGhhdmUgJXMgYWNjZXNzIHRvIHRoZSBmaWxlc3lzdGVtIG9yIGJlIHJvb3RcbiIKK21zZ3N0ciAiRHUgc2thbCBoYXZlICVzLWFkZ2FuZyB0aWwgZmlsc3lzdGVtZXQgZWxsZXIgdsOmcmUgcm9vdFxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNjQKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgb3Igc3dhcCBkZXZpY2U/XG4iCittc2dzdHIgIk11bGlndmlzIGlra2Vla3Npc3RlcmVuZGUgZWxsZXIgc3dhcGVuaGVkP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNjYKK21zZ2lkICJGaWxlc3lzdGVtIG1vdW50ZWQgb3Igb3BlbmVkIGV4Y2x1c2l2ZWx5IGJ5IGFub3RoZXIgcHJvZ3JhbT9cbiIKK21zZ3N0ciAiRmlsc3lzdGVtIG1vbnRlcmV0IGVsbGVyIMOlYm5lcyBla3NrbHVzaXZ0IGFmIGV0IGFuZGV0IHByb2dyYW0/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM3MAorbXNnaWQgIlBvc3NpYmx5IG5vbi1leGlzdGVudCBkZXZpY2U/XG4iCittc2dzdHIgIk11bGlndmlzIGlra2Vla3Npc3RlcmVuZGUgZW5oZWQ/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM3MworbXNnaWQgIiIKKyJEaXNrIHdyaXRlLXByb3RlY3RlZDsgdXNlIHRoZSAtbiBvcHRpb24gdG8gZG8gYSByZWFkLW9ubHlcbiIKKyJjaGVjayBvZiB0aGUgZGV2aWNlLlxuIgorbXNnc3RyICIiCisiRGlzayBza3JpdmViZXNreXR0ZXQ7IGJydWcgdGlsdmFsZ2V0IC1uIGZvciBhdCB1ZGbDuHJlIGVuXG4iCisic2tyaXZlYmVza3l0dGV0IGtvbnRyb2wgYWYgZW5oZWRlbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDM3Cittc2dpZCAiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIgorbXNnc3RyICJIZW50IGVuIG55ZXJlIHZlcnNpb24gYWYgZTJmc2NrISIKKworIzogZTJmc2NrL3VuaXguYzoxNDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNoZWNraW5nIGV4dDMgam91cm5hbCBmb3IgJXMiCittc2dzdHIgInVuZGVyIGtvbnRyb2wgYWYgZXh0My1qb3VybmFsIGZvciAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNDkyCittc2dpZCAiIgorIldhcm5pbmc6IHNraXBwaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYmVjYXVzZSBkb2luZyBhIHJlYWQtb25seSBmaWxlc3lzdGVtICIKKyJjaGVjay5cbiIKK21zZ3N0ciAiIgorIkFkdmFyc2VsOiBVZGVsYWRlciBqb3VybmFsZ2VuZGFubmVsc2UgZGEgZGVyIGt1biB1ZGbDuHJlcyBlbiBza3JpdmViZXNreXR0ZXQgIgorImtvbnRyb2xcbiIKKyJhZiBmaWxzeXN0ZW1ldC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTA0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgc3VwZXJibG9jayBmbGFncyBvbiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWNvdmVyaW5nIGV4dDMgam91cm5hbCBvZiAlcyIKK21zZ3N0ciAidW5kZXIgZ2VuZGFubmVsc2UgYWYgZXh0My1qb3VybmFsIGZvciAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpOiIKK21zZ3N0ciAiJXMgaGFyIGZ1bmt0aW9uZXIgZGVyIGlra2UgZXIgdW5kZXJzdMO4dHRldDoiCisKKyM6IGUyZnNjay91bml4LmM6MTU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FybmluZzogY29tcHJlc3Npb24gc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogZTJmc2NrIG5vdCBjb21waWxlZCB3aXRoIEhUUkVFIHN1cHBvcnQsXG4iCisiXHRidXQgZmlsZXN5c3RlbSAlcyBoYXMgSFRSRUUgZGlyZWN0b3JpZXMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSByZWFkaW5nIGJhZCBibG9ja3MgaW5vZGVcbiIKK21zZ3N0ciAiJXM6ICVzIHVuZGVyIGzDpnNuaW5nIGFmIHVneWxkaWcgYmxvay1pa251ZGVcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjEwCittc2dpZCAiVGhpcyBkb2Vzbid0IGJvZGUgd2VsbCwgYnV0IHdlJ2xsIHRyeSB0byBnbyBvbi4uLlxuIgorbXNnc3RyICJEZXR0ZSB0eWRlciBpa2tlIGdvZHQsIG1lbiB2aSBmb3Jzw7hnZXIgYXQgZm9ydHPDpnR0ZSAuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCVkIGJsb2Nrcyk6ICIKK21zZ3N0ciAiT3ByZXR0ZXIgam91cm5hbCAoJWQgYmxva2tlKTogIgorCisjOiBlMmZzY2svdW5peC5jOjE2NjIKK21zZ2lkICIgRG9uZS5cbiIKK21zZ3N0ciAiIEbDpnJkaWcuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY2NAorbXNnaWQgIiIKKyJcbiIKKyIqKiogam91cm5hbCBoYXMgYmVlbiByZS1jcmVhdGVkIC0gZmlsZXN5c3RlbSBpcyBub3cgZXh0MyBhZ2FpbiAqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIioqKiBqb3VybmFsIGhhciBibGV2ZXQgZ2Vuc2thYnQgLSBmaWxzeXN0ZW0gZXIgbnUgZXh0MyBpZ2VuICoqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2ODgKK21zZ2lkICJSZXN0YXJ0aW5nIGUyZnNjayBmcm9tIHRoZSBiZWdpbm5pbmcuLi5cbiIKK21zZ3N0ciAiR2Vuc3RhcnRlciBlMmZzY2sgZnJhIGJlZ3luZGVsc2VuIC4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2OTIKK21zZ2lkICJ3aGlsZSByZXNldHRpbmcgY29udGV4dCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2OTkKK21zZ2lkICJhYm9ydGVkIgorbXNnc3RyICJhZmJydWR0IgorCisjOiBlMmZzY2svdW5peC5jOjE3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGUyZnNjayBjYW5jZWxlZC5cbiIKK21zZ3N0ciAiJXM6IGUyZnNjayBhZmJydWR0LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NDEgZTJmc2NrL3V0aWwuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqIEZJTFNZU1RFTUVUIEJMRVYgw4ZORFJFVCAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICoqKioqIFJFQk9PVCBMSU5VWCAqKioqKlxuIgorbXNnc3RyICIlczogKioqKiogR0VOU1RBUlQgTElOVVggKioqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzUzIGUyZnNjay91dGlsLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIFdBUk5JTkc6IEZpbGVzeXN0ZW0gc3RpbGwgaGFzIGVycm9ycyAqKioqKioqKioqXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBBRFZBUlNFTDogRmlsc3lzdGVtZXQgaGFyIHN0YWRpZyBmZWpsICoqKioqKioqKipcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoxOTAgbWlzYy91dGlsLmM6ODYKK21zZ2lkICJ5WSIKK21zZ3N0ciAiakoiCisKKyM6IGUyZnNjay91dGlsLmM6MTkxCittc2dpZCAibk4iCittc2dzdHIgIm5OIgorCisjOiBlMmZzY2svdXRpbC5jOjIwNQorbXNnaWQgIjx5PiIKK21zZ3N0ciAiPGo+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwNworbXNnaWQgIjxuPiIKK21zZ3N0ciAiPG4+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwOQorbXNnaWQgIiAoeS9uKSIKK21zZ3N0ciAiIChqL24pIgorCisjOiBlMmZzY2svdXRpbC5jOjIyMworbXNnaWQgImNhbmNlbGxlZCFcbiIKK21zZ3N0ciAiYWZicnVkdCFcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyMzgKK21zZ2lkICJ5ZXNcbiIKK21zZ3N0ciAiamFcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNDAKK21zZ2lkICJub1xuIgorbXNnc3RyICJuZWpcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyBub1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IG5lalxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IHllc1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IGphXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAieWVzIgorbXNnc3RyICJqYSIKKworIzogZTJmc2NrL3V0aWwuYzoyNTgKK21zZ2lkICJubyIKK21zZ3N0ciAibmVqIgorCisjOiBlMmZzY2svdXRpbC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBpbGxlZ2FsIGJpdG1hcCBibG9jayhzKSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyNzgKK21zZ2lkICJyZWFkaW5nIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJldHJ5aW5nIHRvIHJlYWQgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyOTgKK21zZ2lkICJ3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJld3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIiVzOiBVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k7IFJVTiBmc2NrIE1BTlVBTExZLlxuIgorIlx0KGkuZS4sIHdpdGhvdXQgLWEgb3IgLXAgb3B0aW9ucylcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCittc2dzdHIgIkh1a29tbWVsc2UgYnJ1Z3Q6ICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1LCAiCittc2dzdHIgIkh1a29tbWVsc2UgYnJ1Z3Q6ICVsdSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorbXNnc3RyICJ0aWQ6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVsYXBzZWQgdGltZTogJTYuM2ZcbiIKK21zZ3N0ciAiZm9ybMO4YmV0IHRpZDogJTYuM2ZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0NDcgZTJmc2NrL3V0aWwuYzo0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzo0NzUgZTJmc2NrL3V0aWwuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzo2MzcKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIHplcm9pemluZyBidWZmZXIiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzo3ODUKK21zZ2lkICIiCisiVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb2RpZmllZCB3aGlsZSBmc2NrIGlzICIKKyJydW5uaW5nLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NzIKK21zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorbXNnc3RyICJmw6ZyZGlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYiBibG9ja19zaXplXSBbLWkgaW5wdXRfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxvY2tzX2F0X29uY2VdIFstZCBkZWxheV9mYWN0b3JfYmV0d2Vlbl9yZWFkc10gWy1lICIKKyJtYXhfYmFkX2Jsb2Nrc11cbiIKKyIgICAgICAgWy1wIG51bV9wYXNzZXNdIFstdCB0ZXN0X3BhdHRlcm4gWy10IHRlc3RfcGF0dGVybiBbLi4uXV1dXG4iCisiICAgICAgIGRldmljZSBbbGFzdF9ibG9jayBbZmlyc3RfYmxvY2tdXVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogVGhlIC1uIGFuZCAtdyBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTYuMmYlJSBkb25lLCAlcyBlbGFwc2VkLiAoJWQvJWQvJWQgZXJyb3JzKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjMyOAorbXNnaWQgIlRlc3Rpbmcgd2l0aCByYW5kb20gcGF0dGVybjogIgorbXNnc3RyICJUZXN0IG1lZCB2aWxrw6VybGlndCBtw7huc3RlcjogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM0NgorbXNnaWQgIlRlc3Rpbmcgd2l0aCBwYXR0ZXJuIDB4IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Mzc4IG1pc2MvYmFkYmxvY2tzLmM6NDUxCittc2dpZCAiZHVyaW5nIHNlZWsiCittc2dzdHIgInVuZGVyIHPDuGduaW5nIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJXZWlyZCB2YWx1ZSAoJWxkKSBpbiBkb19yZWFkXG4iCittc2dzdHIgIk3DpnJrZWxpZyB2w6ZyZGkgKCVsZCkgaSBkb19yZWFkXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDc2Cittc2dpZCAiZHVyaW5nIGV4dDJmc19zeW5jX2RldmljZSIKK21zZ3N0ciAidW5kZXIgZXh0MmZzX3N5bmNfZGV2aWNlIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ5NiBtaXNjL2JhZGJsb2Nrcy5jOjc1OAorbXNnaWQgIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTEgbWlzYy9iYWRibG9ja3MuYzo2MTEgbWlzYy9iYWRibG9ja3MuYzo3NjkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlcnMiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgYmxvY2tzICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiS29udHJvbGxlciBibG9ra2UgJWx1IHRpbCAlbHVcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjAKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLW9ubHkgbW9kZVxuIgorbXNnc3RyICJLb250cm9sbGVyZXIgZm9yIHVneWxkaWdlIGJsb2trZSBpIHNrcml2ZWJlc2t5dHRldCB0aWxzdGFuZFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyOQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChyZWFkLW9ubHkgdGVzdCk6ICIKK21zZ3N0ciAiS29udHJvbGxlcmVyIGZvciB1Z3lsZGlnZSBibG9ra2UgKHNrcml2ZWJlc2t5dHRldCB0ZXN0KTogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUzNiBtaXNjL2JhZGJsb2Nrcy5jOjY0MyBtaXNjL2JhZGJsb2Nrcy5jOjY4NQorIzogbWlzYy9iYWRibG9ja3MuYzo4MzIKK21zZ2lkICJUb28gbWFueSBiYWQgYmxvY2tzLCBhYm9ydGluZyB0ZXN0XG4iCittc2dzdHIgIkZvciBtYW5nZSB1Z3lsZGlnZSBibG9ra2UsIGFmYnJ5ZGVyIHRlc3RcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MTgKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiS29udHJvbGxlcmVyIGZvciB1Z3lsZGlnZSBibG9ra2UgaSBsw6ZzLXNrcml2IHRpbHN0YW5kXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjIwIG1pc2MvYmFkYmxvY2tzLmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gYmxvY2sgJWx1IHRvICVsdVxuIgorbXNnc3RyICJGcmEgYmxvayAlbHUgdGlsICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY3NQorbXNnaWQgIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIgorbXNnc3RyICJMw6ZzZXIgb2cgc2FtbWVubGlnbmVyOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NzgxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJLb250cm9sbGVyIGZvciB1Z3lsZGlnZSBibG9ra2UgaSBpa2tlZGVzdHJ1a3RpdiBsw6ZzLXNrcml2IHRpbHN0YW5kXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzg3Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIHRlc3QpXG4iCittc2dzdHIgIktvbnRyb2xsZXIgZm9yIHVneWxkaWdlIGJsb2trZSAoaWtrZWRlc3RydWt0aXYgbMOmcy1za3JpdiB0ZXN0KVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc5NAorbXNnaWQgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmluZyB0ZXN0IGRhdGEgd3JpdGUsIGJsb2NrICVsdSIKK21zZ3N0ciAidW5kZXIgdGVzdGRhdGFza3Jpdm5pbmcsIGJsb2sgJWx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk5OCBtaXNjL3V0aWwuYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZDsgIgorbXNnc3RyICIlcyBlciBtb250ZXJldDsgIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDAKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDUKK21zZ2lkICJpdCdzIG5vdCBzYWZlIHRvIHJ1biBiYWRibG9ja3MhXG4iCittc2dzdHIgImRldCBlciBpa2tlIHNpa2tlcnQgYXQga8O4cmUgYmFkYmxvY2tzIVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMTAgbWlzYy91dGlsLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGFwcGFyZW50bHkgaW4gdXNlIGJ5IHRoZSBzeXN0ZW07ICIKK21zZ3N0ciAiJXMgZXIgw7hqZW5zeW5saWcgaSBicnVnIGFmIHN5c3RlbWV0OyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAxMworbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIC0gJXMiCittc2dzdHIgInVneWxkaWcgJXMgLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBiaWcgbWF4IGJhZCBibG9ja3MgY291bnQgJXUgLSBtYXhpbXVtIGlzICV1IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRlc3RfcGF0dGVybiAtICVzIgorbXNnc3RyICJrYW4gaWtrZSBhbGxva2VyZSBodWtvbW1lbHNlIGZvciB0ZXN0X3BhdHRlcm4gLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTg0Cittc2dpZCAiTWF4aW11bSBvZiBvbmUgdGVzdF9wYXR0ZXJuIG1heSBiZSBzcGVjaWZpZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIkt1biBlbiB0ZXN0X3BhdHRlcm4ga2FuIGFuZ2l2ZXMgaSBza3JpdmViZXNreXR0ZXQgdGlsc3RhbmQiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE5MAorbXNnaWQgIlJhbmRvbSB0ZXN0X3BhdHRlcm4gaXMgbm90IGFsbG93ZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIlZpbGvDpXJsaWcgdGVzdF9wYXR0ZXJuIGVyIGlra2UgdGlsbGFkdCBpIHNrcml2ZWJlc2t5dHRldCB0aWxzdGFuZCIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjA0Cittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG1hbnVhbGx5XG4iCittc2dzdHIgIiIKKyJLdW5uZSBpa2tlIGJlc3RlbW1lIGVuaGVkc3N0w7hycmVsc2U7IGR1IG3DpSBhbmdpdmVcbiIKKyJzdMO4cnJlbHNlbiBtYW51ZWx0XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIxMAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZGV2aWNlIHNpemUiCittc2dzdHIgInVuZGVyIGZvcnPDuGcgcMOlIGF0IGJlc3RlbW1lIGVuaGVkc3N0w7hycmVsc2UiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIxNQorbXNnaWQgImxhc3QgYmxvY2siCittc2dzdHIgInNpZHN0ZSBibG9rIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjEKK21zZ2lkICJmaXJzdCBibG9jayIKK21zZ3N0ciAiZsO4cnN0ZSBibG9rIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAoJWxsdSk6IG11c3QgYmUgbGVzcyB0aGFuICVsbHUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZW5kIGJsb2NrICglbGx1KTogbXVzdCBiZSAzMi1iaXQgdmFsdWUiCittc2dzdHIgInVneWxkaWcgc2x1dGJsb2sgKCVsbHUpOiBza2FsIHbDpnJlIGVuIDMyLWJpdCB2w6ZyZGkiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI4NworbXNnaWQgIndoaWxlIGNyZWF0aW5nIGluLW1lbW9yeSBiYWQgYmxvY2tzIGxpc3QiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjk2Cittc2dpZCAiaW5wdXQgZmlsZSAtIGJhZCBmb3JtYXQiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzA0IG1pc2MvYmFkYmxvY2tzLmM6MTMxMworbXNnaWQgIndoaWxlIGFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhc3MgY29tcGxldGVkLCAldSBiYWQgYmxvY2tzIGZvdW5kLiAoJWQvJWQvJWQgZXJyb3JzKVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZmXSBbLSs9YUFjQ2REZWlqc1N0VHVdIFstdiB2ZXJzaW9uXSBmaWxlcy4uLlxuIgorbXNnc3RyICJCcnVnOiAlcyBbLVJWZl0gWy0rPWFBY0NkRGVpanNTdFR1XSBbLXYgdmVyc2lvbl0gZmlsZXIgLi4uXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB2ZXJzaW9uIC0gJXNcbiIKK21zZ3N0ciAidWd5bGRpZyB2ZXJzaW9uIC0gJXNcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyMDEgbWlzYy9sc2F0dHIuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHN0YXQgJXMiCittc2dzdHIgInVuZGVyIGZvcnPDuGcgcMOlIGF0IGvDuHJlIHN0YXQgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9jaGF0dHIuYzoyMTMgbWlzYy9jaGF0dHIuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3Mgb2YgJXMgc2V0IGFzICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gb2YgJXMgc2V0IGFzICVsdVxuIgorbXNnc3RyICJWZXJzaW9uIGZvciAlcyBzYXQgc29tICVsdVxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9jaGF0dHIuYzoyNjcKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBwYXRoIHZhcmlhYmxlIGluIGNoYXR0cl9kaXJfcHJvYyIKK21zZ3N0ciAiS3VubmUgaWtrZSBhbGxva2VyZSBzdGl2YXJpYWJlbCBpIGNoYXR0cl9kaXJfcHJvYyIKKworIzogbWlzYy9jaGF0dHIuYzozMDcKK21zZ2lkICI9IGlzIGluY29tcGF0aWJsZSB3aXRoIC0gYW5kICtcbiIKK21zZ3N0ciAiPSBlciBpbmtvbXBhdGliZWwgbWVkIC0gb2cgK1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjMxNQorbXNnaWQgIk11c3QgdXNlICctdicsID0sIC0gb3IgK1xuIgorbXNnc3RyICJTa2FsIGJydWdlIMK7LXbCqywgPSwgLSBlbGxlciArXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2NrPTxudW0+XSBbLW8gYmxvY2tzaXplPTxudW0+XSBkZXZpY2VcbiIKK21zZ3N0ciAiQnJ1ZzogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2NrPTxudW0+XSBbLW8gYmxvY2tzaXplPTxudW0+XSBlbmhlZFxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTU5Cittc2dpZCAiYmxvY2tzIgorbXNnc3RyICJibG9ra2UiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNjkKK21zZ2lkICJjbHVzdGVycyIKK21zZ3N0ciAia2x5bmdlciIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJHcm91cCAlbHU6IChCbG9ja3MgIgorbXNnc3RyICJHcnVwcGUgJWx1OiAoQmxva2tlICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIENoZWNrc3VtIDB4JTA0eCIKK21zZ3N0ciAiICBLb250cm9sc3VtIDB4JTA0eCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKEVYUEVDVEVEIDB4JTA0eCkiCittc2dzdHIgIiAoRk9SVkVOVEVERSAweCUwNHgpIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgdW51c2VkIGlub2RlcyAldVxuIgorbXNnc3RyICIsIHVicnVndGUgaWtudWRlciAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgJXMgc3VwZXJibG9jayBhdCAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNAorbXNnaWQgIlByaW1hcnkiCittc2dzdHIgIlByaW3DpnIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTQKK21zZ2lkICJCYWNrdXAiCittc2dzdHIgIlNpa2tlcmhlZHNrb3BpIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE4Cittc2dpZCAiLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAiCittc2dzdHIgIiwgR3J1cHBlYmVza3JpdmVyZSBww6UgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjIyCittc2dpZCAiIgorIlxuIgorIiAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgIFJlc2VydmVyZXQgR0RULWJsb2trZSBww6UgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjI5Cittc2dpZCAiIEdyb3VwIGRlc2NyaXB0b3IgYXQgIgorbXNnc3RyICIgR3J1cHBlYmVza3JpdmVyZSBww6UgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM1Cittc2dpZCAiICBCbG9jayBiaXRtYXAgYXQgIgorbXNnc3RyICIgIEJsb2tiaXRtYXAgcMOlICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzOQorbXNnaWQgIiwgSW5vZGUgYml0bWFwIGF0ICIKK21zZ3N0ciAiLCBJa251ZGViaXRtYXAgcMOlICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0MworbXNnaWQgIiIKKyJcbiIKKyIgIElub2RlIHRhYmxlIGF0ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgICV1IGZyZWUgJXMsICV1IGZyZWUgaW5vZGVzLCAldSBkaXJlY3RvcmllcyVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAldSB1bnVzZWQgaW5vZGVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1OQorbXNnaWQgIiAgRnJlZSBibG9ja3M6ICIKK21zZ3N0ciAiICBGcmllIGJsb2trZTogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mjc0Cittc2dpZCAiICBGcmVlIGlub2RlczogIgorbXNnc3RyICIgIEZyaWUgaWtudWRlcjogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzEwCittc2dpZCAid2hpbGUgcHJpbnRpbmcgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2tzOiAldSIKK21zZ3N0ciAiVWd5bGRpZ2UgYmxva2tlOiAldSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM0NSBtaXNjL3R1bmUyZnMuYzozNDcKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1MQorbXNnaWQgIndoaWxlIG9wZW5pbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzU3Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyIGJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjQKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVyIGludmFsaWQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2NworbXNnaWQgIkpvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM4MAorbXNnaWQgIkpvdXJuYWwgc2l6ZTogICAgICAgICAgICAgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZXJybm86ICAgICAgICAgICAgJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDE1IG1pc2MvdHVuZTJmcy5jOjE5NgorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXJzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgYmxvY2sgc2l6ZTogICAgICAgJXVcbiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBmaXJzdCBibG9jazogICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgbnVtYmVyIG9mIHVzZXJzOiAgJXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdXNlcnM6ICAgICAgICAgICAgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDU2IG1pc2MvbWtlMmZzLmM6NzQzIG1pc2MvdHVuZTJmcy5jOjEyMTEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugb3B0aW9ucyFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jayBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJsb2Nrc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjUwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIGV4dGVuZGVkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0c3VwZXJibG9jaz08c3VwZXJibG9jayBudW1iZXI+XG4iCisiXHRibG9ja3NpemU9PGJsb2Nrc2l6ZT5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTY4IG1pc2MvbWtlMmZzLmM6MTczNAorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYwNiBtaXNjL2UyaW1hZ2UuYzoxNTgyIG1pc2MvdHVuZTJmcy5jOjIwNjAKKyM6IHJlc2l6ZS9tYWluLmM6MzE5Cittc2dpZCAiQ291bGRuJ3QgZmluZCB2YWxpZCBmaWxlc3lzdGVtIHN1cGVyYmxvY2suXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICVzOiBlcnJvciByZWFkaW5nIGJpdG1hcHM6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbIC1yfFEgXSBbIC1mciBdIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyAtSSBkZXZpY2UgaW1hZ2UtZmlsZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICVzIC1yYSAgWyAgLWNmbnAgIF0gWyAtbyBzcmNfb2Zmc2V0IF0gWyAtTyBkZXN0X29mZnNldCBdIHNyY19mcyAiCisiWyBkZXN0X2ZzIF1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjkgbWlzYy9lMmltYWdlLmM6NTc2IG1pc2MvZTJpbWFnZS5jOjU4MgorIzogbWlzYy9lMmltYWdlLmM6MTE3OAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVyIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiU2tyaXZlciBibG9rICVsbHVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHdyaXRpbmcgYmxvY2sgJWxsdSIKK21zZ3N0ciAiZmVqbCB2ZWQgc2tyaXZuaW5nIGFmIGJsb2sgJWxsdSIKKworIzogbWlzYy9lMmltYWdlLmM6MTkxCittc2dpZCAiZXJyb3IgaW4gZ2VuZXJpY193cml0ZSgpIgorbXNnc3RyICJmZWpsIGkgZ2VuZXJpY193cml0ZSgpIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMDgKK21zZ2lkICJFcnJvcjogaGVhZGVyIHNpemUgaXMgYmlnZ2VyIHRoYW4gd3J0X3NpemVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMTMKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBoZWFkZXIgYnVmZmVyXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MjQxCittc2dpZCAid2hpbGUgd3JpdGluZyBzdXBlcmJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI1MAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MjU4Cittc2dpZCAid2hpbGUgd3JpdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MjY2Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCByZWNfbGVuICglZClcbiIKK21zZ3N0ciAiw5hkZWxhZ3QgbWFwcGVibG9rICVsbHU6IHVneWxkaWcgcmVjX2xlbiAoJWQpXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjUxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IGRpcmVjdG9yeSBibG9jayAlbGx1OiBiYWQgbmFtZV9sZW4gKCVkKVxuIgorbXNnc3RyICLDmGRlbGFndCBtYXBwZWJsb2sgJWxsdTogdWd5ZGxpZyBuYW1lX2xlbiAoJWQpXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGx1IC8gJWxsdSBibG9ja3MgKCVkJSUpIgorbXNnc3RyICIlbGx1IC8gJWxsdSBibG9ra2UgKCVkJSUpIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1ODYgbWlzYy9lMmltYWdlLmM6NjI2Cittc2dpZCAiQ29weWluZyAiCittc2dzdHIgIktvcGllcmVyICIKKworIzogbWlzYy9lMmltYWdlLmM6NjIzCittc2dpZCAiIgorIlN0b3BwaW5nIG5vdyB3aWxsIGRlc3Ryb3kgdGhlIGZpbGVzeXN0ZW0sIGludGVycnVwdCBhZ2FpbiBpZiB5b3UgYXJlIHN1cmVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHJlbWFpbmluZyBhdCAlLjJmIE1CL3MiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6NjYxIG1pc2MvZTJpbWFnZS5jOjExODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBibG9jayAlbGx1IgorbXNnc3RyICJmZWpsIHZlZCBsw6ZzbmluZyBhZiBibG9rICVsbHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3BpZWQgJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSBpbiAlcyAiCittc2dzdHIgIktvcGllcmVkZSAlbGx1IC8gJWxsdSBibG9ra2UgKCVkJSUpIGkgJXMgIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXQgJS4yZiBNQi9zIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjc1NQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgbDEgdGFibGUiCittc2dzdHIgInVuZGVyIGFsbG9rZXJpbmcgYWYgbDEtdGFiZWwiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjgwMAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgbDIgY2FjaGUiCittc2dzdHIgInVuZGVyIGFsbG9rZXJpbmcgYWYgbDItY2FjaGUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjgyMworbXNnaWQgIiIKKyJXYXJuaW5nOiBUaGVyZSBhcmUgc3RpbGwgdGFibGVzIGluIHRoZSBjYWNoZSB3aGlsZSBwdXR0aW5nIHRoZSBjYWNoZSwgZGF0YSAiCisid2lsbCBiZSBsb3N0IHNvIHRoZSBpbWFnZSBtYXkgbm90IGJlIHZhbGlkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjExNDUKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGV4dDJfcWNvdzJfaW1hZ2UiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTE1MgorbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBleHQyX3Fjb3cyX2ltYWdlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyMTEgbWlzYy9lMmltYWdlLmM6MTIyOQorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yOiBtdWx0aXBsZSBzZXF1ZW50aWFsIHJlZmNvdW50IGJsb2NrcyBjcmVhdGVkIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyNjkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAidW5kZXIgYWxsb2tlcmluZyBhZiBibG9rYml0bWFwIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjc4Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBzY3JhbWJsZSBibG9jayBiaXRtYXAiCittc2dzdHIgInVuZGVyIGFsbG9rZXJpbmcgYWYgc2NyYW1ibGUgYmxva2JpdG1hcCIKKworIzogbWlzYy9lMmltYWdlLmM6MTI4NQorbXNnaWQgIlNjYW5uaW5nIGlub2Rlcy4uLlxuIgorbXNnc3RyICJTa2FubmVyIGlrbnVkZXIgLi4uXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyOTcKK21zZ2lkICJDYW4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIiCittc2dzdHIgIkthbiBpa2tlIGFsbG9rZXJlIGJsb2tidWZmZXIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzMzYgbWlzYy9lMmltYWdlLmM6MTM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBpdGVyYXRpbmcgb3ZlciBpbm9kZSAldSIKK21zZ3N0ciAidW5kZXIgZ2VubmVtbMO4YiBvdmVyIGlrbnVkZSAldSIKKworIzogbWlzYy9lMmltYWdlLmM6MTM4MQorbXNnaWQgIlJhdyBhbmQgcWNvdzIgaW1hZ2VzIGNhbm5vdCBiZSBpbnN0YWxsZWQiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTQwMworbXNnaWQgImVycm9yIHJlYWRpbmcgYml0bWFwcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDE1Cittc2dpZCAid2hpbGUgb3BlbmluZyBkZXZpY2UgZmlsZSIKK21zZ3N0ciAidW5kZXIgw6VibmluZyBhZiBlbmhlZHNmaWwiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MjYKK21zZ2lkICJ3aGlsZSByZXN0b3JpbmcgdGhlIGltYWdlIHRhYmxlIgorbXNnc3RyICJ1bmRlciBnZW5kYW5uZWxzZSBhZiBiaWxsZWR0YWJlbGxlbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUyMworbXNnaWQgIi1hIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIHdpdGggcmF3IG9yIFFDT1cyIGltYWdlcy4iCittc2dzdHIgIi1hIHRpbHZhbGcga2FuIGt1biBicnVnZXMgbWVkIHLDpSBlbGxlciBRQ09XMi1iaWxsZWRlci4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MjkKK21zZ2lkICJPZmZzZXRzIGFyZSBvbmx5IGFsbG93ZWQgd2l0aCByYXcgaW1hZ2VzLiIKK21zZ3N0ciAiRm9yc2t5ZG5pbmdlciBlciBrdW4gdGlsbGFkdGUgbWVkIHLDpSBiaWxsZWRlci4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MzQKK21zZ2lkICJNb3ZlIG1vZGUgaXMgb25seSBhbGxvd2VkIHdpdGggcmF3IGltYWdlcy4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUzOQorbXNnaWQgIk1vdmUgbW9kZSByZXF1aXJlcyBhbGwgZGF0YSBtb2RlLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTQ5Cittc2dpZCAiY2hlY2tpbmcgaWYgbW91bnRlZCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTU2Cittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgZTJpbWFnZSBvbiBhIFIvVyBtb3VudGVkIGZpbGVzeXN0ZW0gY2FuIHJlc3VsdCBpbiBhblxuIgorImluY29uc2lzdGVudCBpbWFnZSB3aGljaCB3aWxsIG5vdCBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiIKKyJVc2UgLWYgb3B0aW9uIGlmIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGF0LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MDgKK21zZ2lkICJRQ09XMiBpbWFnZSBjYW4gbm90IGJlIHdyaXR0ZW4gdG8gdGhlIHN0ZG91dCFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjE0Cittc2dpZCAiQ2FuIG5vdCBzdGF0IG91dHB1dFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW1hZ2UgKCVzKSBpcyBjb21wcmVzc2VkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbWFnZSAoJXMpIGlzIGVuY3J5cHRlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGNvbnZlcnQgcWNvdzIgaW1hZ2UgKCVzKSBpbnRvIHJhdyBpbWFnZSAoJXMpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MzkKK21zZ2lkICJUaGUgLWMgb3B0aW9uIG9ubHkgc3VwcG9ydGVkIGluIHJhdyBtb2RlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY0NAorbXNnaWQgIlRoZSAtYyBvcHRpb24gbm90IHN1cHBvcnRlZCB3aGVuIHdyaXRpbmcgdG8gc3Rkb3V0XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY1MQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgY2hlY2tfYnVmIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NTcKK21zZ2lkICJUaGUgLXAgb3B0aW9uIG9ubHkgc3VwcG9ydGVkIGluIHJhdyBtb2RlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY2NworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibG9ja3MgYWxyZWFkeSBjb250YWluZWQgdGhlIGRhdGEgdG8gYmUgY29waWVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmxhYmVsLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IG9wZW4gJXNcbiIKK21zZ3N0ciAiZTJsYWJlbDoga2FuIGlra2Ugw6VibmUgJXNcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9ja1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJsYWJlbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHJlYWRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJsYWJlbC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IG5vdCBhbiBleHQyIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiZTJsYWJlbDogaWtrZSBldCBleHQyLWZpbHN5c3RlbVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo5NyBtaXNjL3R1bmUyZnMuYzoyMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGxhYmVsIHRvbyBsb25nLCB0cnVuY2F0aW5nLlxuIgorbXNnc3RyICJBZHZhcnNlbDogZXRpa2V0IGVyIGZvciBsYW5nLCBhZmtvcnRlci5cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2sgYWdhaW5cbiIKK21zZ3N0ciAiZTJsYWJlbDoga2FuIGlra2Ugc8O4Z2UgdGlsIHN1cGVyYmxvayBpZ2VuXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciB3cml0aW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogZGVyIG9wc3RvZCBlbiBmZWpsIHVuZGVyIHNrcml2bmluZyBhZiBzdXBlcmJsb2tcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTE3IG1pc2MvdHVuZTJmcy5jOjg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogZTJsYWJlbCBkZXZpY2UgW25ld2xhYmVsXVxuIgorbXNnc3RyICJCcnVnOiBlMmxhYmVsIGVuaGVkIFtueWV0aWtldF1cbiIKKworIzogbWlzYy9lMnVuZG8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgPHRyYW5zYWN0aW9uIGZpbGU+IDxmaWxlc3lzdGVtPlxuIgorbXNnc3RyICJCcnVnOiAlcyA8dHJhbnNha3Rpb25zZmlsPjxmaWxzeXN0ZW0+XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NTIKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIKK21zZ3N0ciAiS3VubmUgaWtrZSBsw6ZzZSBmaWxzeXN0ZW1ldHMgZGF0YSBcbiIKKworIzogbWlzYy9lMnVuZG8uYzo2MiBtaXNjL2UydW5kby5jOjgzIG1pc2MvZTJ1bmRvLmM6MTA4IG1pc2MvZTJ1bmRvLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfZmV0Y2ggJXNcbiIKK21zZ3N0ciAiTWlzbHlra2VkZSB0ZGJfZmV0Y2ggJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIKK21zZ3N0ciAiRmlsc3lzdGVtZXRzIG1vbnRlcmluZ3N0aWRzcHVua3QgbWF0Y2hlZGUgaWtrZSAldVxuIgorCisjOiBtaXNjL2UydW5kby5jOjg5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIFVVSUQgZGlkbid0IG1hdGNoIFxuIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBVVUlEIG1hdGNoZWRlIGlra2UgXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfb3BlbiAlc1xuIgorbXNnc3RyICJNaXNseWtrZWRlIHRkYl9vcGVuICVzXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjE3NQorbXNnaWQgImUydW5kbyBzaG91bGQgb25seSBiZSBydW4gb24gdW5tb3VudGVkIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXNcbiIKK21zZ3N0ciAiS3VubmUgaWtrZSDDpWJuZSAlc1xuIgorCisjOiBtaXNjL2UydW5kby5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBsYXllZCB0cmFuc2FjdGlvbiBvZiBzaXplICV6ZCBhdCBsb2NhdGlvbiAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHdyaXRlICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGNvdWxkbid0IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIkFEVkFSU0VMOiBrdW5uZSBpa2tlIMOlYm5lICVzOiAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogYmFkIGZvcm1hdCBvbiBsaW5lICVkIG9mICVzXG4iCittc2dzdHIgIkFEVkFSU0VMOiB1Z3lsZGlndCBmb3JtYXQgcMOlIGxpbmplICVkIGFmICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM3MAorbXNnaWQgIiIKKyJXQVJOSU5HOiBZb3VyIC9ldGMvZnN0YWIgZG9lcyBub3QgY29udGFpbiB0aGUgZnNjayBwYXNzbm9cbiIKKyJcdGZpZWxkLiAgSSB3aWxsIGtsdWRnZSBhcm91bmQgdGhpbmdzIGZvciB5b3UsIGJ1dCB5b3VcbiIKKyJcdHNob3VsZCBmaXggeW91ciAvZXRjL2ZzdGFiIGZpbGUgYXMgc29vbiBhcyB5b3UgY2FuLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiAlczogbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6ICVzOiBpa2tlIGZ1bmRldFxuIgorCisjOiBtaXNjL2ZzY2suYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIgorbXNnc3RyICIlczogdmVudDogSWtrZSBmbGVyZSB1bmRlcnByb2Nlc3Nlcj8hP1xuIgorCisjOiBtaXNjL2ZzY2suYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZy4uLiAlcyBmb3IgZGV2aWNlICVzIGV4aXRlZCB3aXRoIHNpZ25hbCAlZC5cbiIKK21zZ3N0ciAiQWR2YXJzZWwgLi4uICVzIGZvciBlbmhlZCAlcyBhZnNsdXR0ZWRlcyBtZWQgc2lnbmFsICVkLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXM6IHN0YXR1cyBpcyAleCwgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluaXNoZWQgd2l0aCAlcyAoZXhpdCBzdGF0dXMgJWQpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6NzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBFcnJvciAlZCB3aGlsZSBleGVjdXRpbmcgZnNjay4lcyBmb3IgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzo3NDIKK21zZ2lkICIiCisiRWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSBmaWxlc3lzdGVtIHR5cGVzIHBhc3NlZCB0byAtdCBtdXN0IGJlIHByZWZpeGVkXG4iCisid2l0aCAnbm8nIG9yICchJy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzo3NjEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGVzeXN0ZW0gdHlwZXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBza2lwcGluZyBiYWQgbGluZSBpbiAvZXRjL2ZzdGFiOiBiaW5kIG1vdW50IHdpdGggbm9uemVybyBmc2NrIHBhc3MgIgorIm51bWJlclxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiBjYW5ub3QgY2hlY2sgJXM6IGZzY2suJXMgbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6IGthbiBpa2tlIGtvbnRyb2xsZXJlICVzOiBmc2NrLiVzIGJsZXYgaWtrZSBmdW5kZXRcbiIKKworIzogbWlzYy9mc2NrLmM6OTY3Cittc2dpZCAiQ2hlY2tpbmcgYWxsIGZpbGUgc3lzdGVtcy5cbiIKK21zZ3N0ciAiS29udHJvbGxlcmVyIGFsbGUgZmlsc3lzdGVtZXIuXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS13YWl0aW5nLS0gKHBhc3MgJWQpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6MTA3OAorbXNnaWQgIiIKKyJVc2FnZTogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGZzdHlwZV0gW2ZzLW9wdGlvbnNdIFtmaWxlc3lzIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBkZXZpY2VzXG4iCittc2dzdHIgIiVzOiBmb3IgbWFuZ2UgZW5oZWRlclxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTUzIG1pc2MvZnNjay5jOjEyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICIlczogZm9yIG1hbmdlIGFyZ3VtZW50ZXJcbiIKKworIzogbWlzYy9sc2F0dHIuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmFkbHZdIFtmaWxlcy4uLl1cbiIKK21zZ3N0ciAiQnJ1ZzogJXMgWy1SVmFkbHZdIFtmaWxlciAuLi5dXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2xzYXR0ci5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgdmVyc2lvbiBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstY3wtbCBmaWxlbmFtZV0gWy1iIGJsb2NrLXNpemVdIFstQyBjbHVzdGVyLXNpemVdXG4iCisiXHRbLWkgYnl0ZXMtcGVyLWlub2RlXSBbLUkgaW5vZGUtc2l6ZV0gWy1KIGpvdXJuYWwtb3B0aW9uc11cbiIKKyJcdFstRyBmbGV4LWdyb3VwLXNpemVdIFstTiBudW1iZXItb2YtaW5vZGVzXVxuIgorIlx0Wy1tIHJlc2VydmVkLWJsb2Nrcy1wZXJjZW50YWdlXSBbLW8gY3JlYXRvci1vc11cbiIKKyJcdFstZyBibG9ja3MtcGVyLWdyb3VwXSBbLUwgdm9sdW1lLWxhYmVsXSBbLU0gbGFzdC1tb3VudGVkLWRpcmVjdG9yeV1cbiIKKyJcdFstTyBmZWF0dXJlWywuLi5dXSBbLXIgZnMtcmV2aXNpb25dIFstRSBleHRlbmRlZC1vcHRpb25bLC4uLl1dXG4iCisiXHRbLXQgZnMtdHlwZV0gWy1UIHVzYWdlLXR5cGUgXSBbLVUgVVVJRF0gWy1qbnF2REZLU1ZdIGRldmljZSBbYmxvY2tzLSIKKyJjb3VudF1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJSdW5uaW5nIGNvbW1hbmQ6ICVzXG4iCittc2dzdHIgIkvDuHJlciBrb21tYW5kbzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJ1biAnJXMnIgorbXNnc3RyICJ1bmRlciBmb3Jzw7hnIHDDpSBhdCBrw7hyZSDCuyVzwqsiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYzCittc2dpZCAid2hpbGUgcHJvY2Vzc2luZyBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBwcm9ncmFtIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVkIGluIHByaW1hcnkgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9yIGFyZWEgYmFkLlxuIgorbXNnc3RyICJCbG9rICVkIGkgcHJpbcOmciBzdXBlcmJsb2svZ3J1cHBlYmVza3JpdmVyIG9tcsOlZGUgdWd5bGRpZy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2tzICV1IHRocm91Z2ggJXUgbXVzdCBiZSBnb29kIGluIG9yZGVyIHRvIGJ1aWxkIGEgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiQmxva2tlbmUgJXUgdGlsICV1IHNrYWwgdsOmcmUgaSBnb2Qgc3RhbmQgZm9yIGF0IGJ5Z2dlIGV0IGZpbHN5c3RlbS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTUKK21zZ2lkICJBYm9ydGluZy4uLi5cbiIKK21zZ3N0ciAiQWZicnlkZXIgLi4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB0aGUgYmFja3VwIHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvcnMgYXQgYmxvY2sgJXUgY29udGFpblxuIgorIlx0YmFkIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkFkdmFyc2VsOiBTaWtrZXJoZWRza29waWJlc2tyaXZlcm5lIGZvciBzdXBlcmJsb2svZ3J1cHBlIHZlZCBibG9rICV1XG4iCisiXHRpbmRlaG9sZGVyIHVneWxkaWdlIGJsb2trZS5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzozMzQKK21zZ2lkICJ3aGlsZSBtYXJraW5nIGJhZCBibG9ja3MgYXMgdXNlZCIKK21zZ3N0ciAibWVucyBtYXJrZXJlbmRlIHVneWxkaWdlIGJsb2trZSBzb20gYnJ1Z3QiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mzg2Cittc2dpZCAiV3JpdGluZyBpbm9kZSB0YWJsZXM6ICIKK21zZ3N0ciAiU2tyaXZlciBpa251ZGV0YWJlbGxlcjogIgorCisjOiBtaXNjL21rZTJmcy5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IHdyaXRlICVkIGJsb2NrcyBpbiBpbm9kZSB0YWJsZSBzdGFydGluZyBhdCAlbGx1OiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiS3VubmUgaWtrZSBza3JpdmUgJWQgYmxva2tlIGkgaWtudWRlLXRhYmVsIHN0YXJ0ZW5kZSB2ZWQgJWxsdTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0MjEgbWlzYy9ta2UyZnMuYzoyNDc5IG1pc2MvbWtlMmZzLmM6Mjc2NAorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgImbDpnJkaWcgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjQzMgorbXNnaWQgIndoaWxlIGNyZWF0aW5nIHJvb3QgZGlyIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDM5Cittc2dpZCAid2hpbGUgcmVhZGluZyByb290IGlub2RlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDUxCittc2dpZCAid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjQ2OQorbXNnaWQgIndoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDc2Cittc2dpZCAid2hpbGUgbG9va2luZyB1cCAvbG9zdCtmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjQ4OQorbXNnaWQgIndoaWxlIGV4cGFuZGluZyAvbG9zdCtmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjUwNAorbXNnaWQgIndoaWxlIHNldHRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk91dCBvZiBtZW1vcnkgZXJhc2luZyBzZWN0b3JzICVkLSVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgYmxvY2sgMDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgZXJhc2Ugc2VjdG9yICVkOiAlc1xuIgorbXNnc3RyICJBZHZhcnNlbDoga3VubmUgaWtrZSBzbGV0dGUgc2VrdG9yICVkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU3MworbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODEKK21zZ2lkICJaZXJvaW5nIGpvdXJuYWwgZGV2aWNlOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBqb3VybmFsIGRldmljZSAoYmxvY2sgJWxsdSwgY291bnQgJWQpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjExCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgZmlsZXN5c3RlbSB3aXRoICVsbHUgJWRrIGJsb2NrcyBhbmQgJXUgaW5vZGVzXG4iCittc2dzdHIgIk9wcmV0dGVyIGZpbHN5c3RlbSBtZWQgJWxsdSAlZGsgYmxva2tlIG9nICV1IGlrbnVkZXJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndhcm5pbmc6ICVsbHUgYmxvY2tzIHVudXNlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorImFkdmFyc2VsOiAlbGx1IHVicnVndGUgYmxva2tlLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGxhYmVsPSVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiT1MgdHlwZTogJXNcbiIKK21zZ3N0ciAiT1MtdHlwZTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJCbG9rc3TDuHJyZWxzZT0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDbHVzdGVyIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiS2x5bmdlc3TDuHJyZWxzZT0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGcmFnbWVudCBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIkZyYWdtZW50c3TDuHJyZWxzZSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0cmlkZT0ldSBibG9ja3MsIFN0cmlwZSB3aWR0aD0ldSBibG9ja3NcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjY1NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMsICVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiV1IGlrbnVkZXIsICVsbHUgYmxva2tlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsbHUgYmxvY2tzICglMi4yZiUlKSByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIHVzZXJcbiIKK21zZ3N0ciAiJWxsdSBibG9ra2UgKCUyLjJmJSUpIHJlc2VydmVyZXQgZm9yIHN1cGVyYnJ1Z2VyZW5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QgZGF0YSBibG9jaz0ldVxuIgorbXNnc3RyICJGw7hyc3RlIGRhdGFibG9rPSV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJvb3QgZGlyZWN0b3J5IG93bmVyPSV1OiV1XG4iCittc2dzdHIgIlJvZG1hcHBlZWplcj0ldToldVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGZpbGVzeXN0ZW0gYmxvY2tzPSVsdVxuIgorbXNnc3RyICJNYWtzaW11bSBmaWxzeXN0ZW1ibG9ra2U9JWx1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3Vwc1xuIgorbXNnc3RyICIldSBibG9rZ3J1cHBlclxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIldSBibG9rZ3J1cHBlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGNsdXN0ZXJzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBibG9ra2UgcGVyIGdydXBwZSwgJXUga2x5bmdlciBwZXIgZ3J1cHBlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgYmxva2tlIHBlciBncnVwcGUsICV1IGZyYWdtZW50ZXIgcGVyIGdydXBwZVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGlrbnVkZXIgcGVyIGdydXBwZVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIFVVSUQ6ICVzXG4iCittc2dzdHIgIkZpbHN5c3RlbSBVVUlEOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OQorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgJy1PIDY0Yml0J1xuIgorbXNnc3RyICIlcyBrcsOmdmVyIMK7LU8gNjRiaXTCq1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgYmVmb3JlICdyZXNpemU9JXUnXG4iCittc2dzdHIgIsK7JXPCqyBza2FsIGtvbW1lIGbDuHIgwrtyZXNpemU9JXXCq1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjc4NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRlc2Nfc2l6ZTogJyVzJ1xuIgorbXNnc3RyICJVZ3lsZGlnIGJlc2tyaXZlbHNlc3N0w7hycmVsc2U6IMK7JXPCq1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9mZnNldDogJXNcbiIKK21zZ3N0ciAidWd5bGRpZyBmb3Jza3lkbmluZzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MTIgbWlzYy90dW5lMmZzLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCittc2dzdHIgIlVneWxkaWcgbW1wX3VwZGF0ZV9pbnRlcnZhbDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAjIG9mIGJhY2t1cCBzdXBlcmJsb2NrczogJXNcbiIKK21zZ3N0ciAiVWd5bGRpZyAjIGZvciBzaWtrZXJoZWRza29waXN1cGVyYmxva2tlOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg0OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpcGUtd2lkdGggcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmVzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjg5MworbXNnaWQgIlRoZSByZXNpemUgbWF4aW11bSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgZmlsZXN5c3RlbSBzaXplLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6OTE3Cittc2dpZCAiT24tbGluZSByZXNpemluZyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6OTQ0IG1pc2MvbWtlMmZzLmM6OTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcm9vdF9vd25lcjogJyVzJ1xuIgorbXNnc3RyICJVZ3lsZGlnIHJvZF9lamVyOiDCuyVzwqtcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBxdW90YXR5cGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJVZ3lsZGlnIHF1b3RhdHlwZS1wYXJhbWV0ZXI6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRtbXBfdXBkYXRlX2ludGVydmFsPTxpbnRlcnZhbD5cbiIKKyJcdG51bV9iYWNrdXBfc2I9PDB8MXwyPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGRhdGEgY2h1bmsgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqIGRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0b2Zmc2V0PTxvZmZzZXQgdG8gY3JlYXRlIHRoZSBmaWxlIHN5c3RlbT5cbiIKKyJcdHJlc2l6ZT08cmVzaXplIG1heGltdW0gc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRwYWNrZWRfbWV0YV9ibG9ja3M9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRyb290X3VpZD08dWlkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0cm9vdF9naWQ9PGdpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdGRpc2NhcmRcbiIKKyJcdG5vZGlzY2FyZFxuIgorIlx0cXVvdGF0eXBlPTx1c3IgT1IgZ3JwPlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogUkFJRCBzdHJpcGUtd2lkdGggJXUgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2Ygc3RyaWRlICV1LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIG1rZTJmcyBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNjggbWlzYy90dW5lMmZzLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA4MCBtaXNjL3R1bmUyZnMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtb3VudCBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiWW91ciBta2UyZnMuY29uZiBmaWxlIGRvZXMgbm90IGRlZmluZSB0aGUgJXMgZmlsZXN5c3RlbSB0eXBlLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyNAorbXNnaWQgIiIKKyJZb3UgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGFuIHVwZGF0ZWQgbWtlMmZzLmNvbmYgZmlsZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjgKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICJBZmJyeWRlciAuLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgZnNfdHlwZSAlcyBpcyBub3QgZGVmaW5lZCBpbiBta2UyZnMuY29uZlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ0OQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IFBBVEguXG4iCittc2dzdHIgIkt1bm5lIGlra2UgYWxsb2tlcmUgaHVrb21tZWxzZSBmb3IgbnkgU1RJIChQQVRIKS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGluaXQgcHJvZmlsZSBzdWNjZXNzZnVsbHkgKGVycm9yOiAlbGQpLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUyMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrIHNpemUgLSAlcyIKK21zZ3N0ciAidWd5bGRpZyBibG9rc3TDuHJyZWxzZSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogYmxvY2tzaXplICVkIG5vdCB1c2FibGUgb24gbW9zdCBzeXN0ZW1zLlxuIgorbXNnc3RyICJBZHZhcnNlbDogYmxva3N0w7hycmVsc2UgJWQga2FuIGlra2UgYnJ1Z2VzIHDDpSBkZSBmbGVzdGUgc3lzdGVtZXIuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNsdXN0ZXIgc2l6ZSAtICVzIgorbXNnc3RyICJ1Z3lsZGlnIGtseW5nZXN0w7hycmVsc2UgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTUzCittc2dpZCAiJy1SJyBpcyBkZXByZWNhdGVkLCB1c2UgJy1FJyBpbnN0ZWFkIgorbXNnc3RyICLCuy1SwqsgZXIgZm9yw6ZsZGV0LCBicnVnIMK7LUXCqyBpIHN0ZWRldCBmb3IiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU2NQorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBibG9ja3MgcGVyIGdyb3VwIgorbXNnc3RyICJVbG92bGlndCBhbnRhbCBmb3IgYmxva2tlIHBlciBncnVwcGUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU3MAorbXNnaWQgImJsb2NrcyBwZXIgZ3JvdXAgbXVzdCBiZSBtdWx0aXBsZSBvZiA4IgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU3OAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBmbGV4X2JnIHNpemUiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg0Cittc2dpZCAiZmxleF9iZyBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmbGV4X2JnIHNpemUgKCVsdSkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMl4zMSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSByYXRpbyAlcyAobWluICVkL21heCAlZCkiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyMworbXNnaWQgIiIKKyJXYXJuaW5nOiAtSyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZSAnLUUgIgorIm5vZGlzY2FyZCcgZXh0ZW5kZWQgb3B0aW9uIGluc3RlYWQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjM0Cittc2dpZCAiaW4gbWFsbG9jIGZvciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW0gaW5vZGVzIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXZpc2lvbiBsZXZlbCAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIHJldmlzaW9uICVkIgorbXNnc3RyICJ1bmRlciBmb3Jzw7hnIHDDpSBhdCBvcHJldHRlIHJldmlzaW9uICVkIgorCisjOiBtaXNjL21rZTJmcy5jOjE2OTgKK21zZ2lkICJUaGUgLXQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiVGlsdmFsZ2V0IC10IGthbiBrdW4gYnJ1Z2VzIGVuIGdhbmciCisKKyM6IG1pc2MvbWtlMmZzLmM6MTcwNgorbXNnaWQgIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc1OSBtaXNjL21rZTJmcy5jOjI4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBkZXZpY2UgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBkZXYgYmxvY2tzaXplICglZCkgc21hbGxlciB0aGFuIG1pbmltdW0gYmxvY2tzaXplICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIGpvdXJuYWwgZGV2aWNlJ3MgYmxvY2tzaXplOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrcyAnJXMnIG9uIGRldmljZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgwNAorbXNnaWQgImZpbGVzeXN0ZW0iCittc2dzdHIgImZpbHN5c3RlbSIKKworIzogbWlzYy9ta2UyZnMuYzoxODE3IHJlc2l6ZS9tYWluLmM6Mzk1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBmaWxlc3lzdGVtIHNpemUiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxODIzCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxODMwCittc2dpZCAiIgorIkRldmljZSBzaXplIHJlcG9ydGVkIHRvIGJlIHplcm8uICBJbnZhbGlkIHBhcnRpdGlvbiBzcGVjaWZpZWQsIG9yXG4iCisiXHRwYXJ0aXRpb24gdGFibGUgd2Fzbid0IHJlcmVhZCBhZnRlciBydW5uaW5nIGZkaXNrLCBkdWUgdG9cbiIKKyJcdGEgbW9kaWZpZWQgcGFydGl0aW9uIGJlaW5nIGJ1c3kgYW5kIGluIHVzZS4gIFlvdSBtYXkgbmVlZCB0byByZWJvb3RcbiIKKyJcdHRvIHJlLXJlYWQgeW91ciBwYXJ0aXRpb24gdGFibGUuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxODQ3Cittc2dpZCAiRmlsZXN5c3RlbSBsYXJnZXIgdGhhbiBhcHBhcmVudCBkZXZpY2Ugc2l6ZS4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxODY3Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGZzIHR5cGVzIGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MDgKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGhhcmR3YXJlIHNlY3RvciBzaXplIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkxNAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgcGh5c2ljYWwgc2VjdG9yIHNpemUiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTQ2Cittc2dpZCAid2hpbGUgc2V0dGluZyBibG9ja3NpemU7IHRvbyBzbWFsbCBmb3IgZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzcGVjaWZpZWQgYmxvY2tzaXplICVkIGlzIGxlc3MgdGhhbiBkZXZpY2UgcGh5c2ljYWwgc2VjdG9yc2l6ZSAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFNpemUgb2YgZGV2aWNlICgweCVsbHggYmxvY2tzKSAlcyB0b28gYmlnIHRvIGJlIGV4cHJlc3NlZFxuIgorIlx0aW4gMzIgYml0cyB1c2luZyBhIGJsb2Nrc2l6ZSBvZiAlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5OTEKK21zZ2lkICJmc190eXBlcyBmb3IgbWtlMmZzLmNvbmYgcmVzb2x1dGlvbjogIgorbXNnc3RyICJmc190eXBlcyBmb3IgbWtlMmZzLmNvbmYtb3Bsw7hzbmluZzogIgorCisjOiBtaXNjL21rZTJmcy5jOjE5OTgKK21zZ2lkICJGaWxlc3lzdGVtIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIkZpbHN5c3RlbWZ1bmt0aW9uZXIgZXIgaWtrZSB1bmRlcnN0w7h0dGV0IG1lZCByZXZpc2lvbiAwLWZpbHN5c3RlbWVyXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAwNgorbXNnaWQgIlNwYXJzZSBzdXBlcmJsb2NrcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAxOAorbXNnaWQgIkpvdXJuYWxzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIkpvdXJuYWxlciBlciBpa2tlIHVuZGVyc3TDuHR0ZXQgbWVkIHJldmlzaW9uIDAtZmlsc3lzdGVtZXJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDMyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlbGYiCittc2dzdHIgInVneWxkaWcgcmVzZXJ2ZXJldCBibG9ra2Vwcm9jZW50IC0gJWxmIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNDkKK21zZ2lkICIiCisiRXh0ZW50cyBNVVNUIGJlIGVuYWJsZWQgZm9yIGEgNjQtYml0IGZpbGVzeXN0ZW0uICBQYXNzIC1PIGV4dGVudHMgdG8gIgorInJlY3RpZnkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDY5Cittc2dpZCAiVGhlIGNsdXN0ZXIgc2l6ZSBtYXkgbm90IGJlIHNtYWxsZXIgdGhhbiB0aGUgYmxvY2sgc2l6ZS5cbiIKK21zZ3N0ciAiS2x5bmdlc3TDuHJyZWxzZW4gbcOlIGlra2UgdsOmcmUgbWluZHJlIGVuZCBibG9rc3TDuHJyZWxzZW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA3NQorbXNnaWQgInNwZWNpZnlpbmcgYSBjbHVzdGVyIHNpemUgcmVxdWlyZXMgdGhlIGJpZ2FsbG9jIGZlYXR1cmUiCittc2dzdHIgImFuZ2l2ZWxzZSBhZiBlbiBrbHluZ2VzdMO4cnJlbHNlIGtyw6Z2ZXIgYmlnYWxsb2MtZnVua3Rpb25lbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFVuYWJsZSB0byBnZXQgZGV2aWNlIGdlb21ldHJ5IGZvciAlc1xuIgorbXNnc3RyICJhZHZhcnNlbDogS2FuIGlra2UgaW5kaGVudGUgZW5oZWRzZ2VvbWV0cmkgZm9yICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbGlnbm1lbnQgaXMgb2Zmc2V0IGJ5ICVsdSBieXRlcy5cbiIKK21zZ3N0ciAiJXMtanVzdGVyaW5nIGZvcnNreWRlcyBtZWQgJWx1IGJ5dGUuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBtYXkgcmVzdWx0IGluIHZlcnkgcG9vciBwZXJmb3JtYW5jZSwgKHJlKS1wYXJ0aXRpb25pbmcgc3VnZ2VzdGVkLlxuIgorbXNnc3RyICIiCisiRGV0dGUga2FuIG1lZGbDuHJlIG1lZ2V0IGTDpXJsaWcgeWRlbHNlLCAobnkpIHBhcnRpdGlvbmVyaW5nIGFuYmVmYWxlcy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAobWF4ICVkKSIKK21zZ3N0ciAiJWQtYnl0ZWJsb2trZSBlciBmb3Igc3RvcmUgZm9yIHN5c3RlbWV0IChtYWtzICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiAlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCksIGZvcmNlZCB0byBjb250aW51ZVxuIgorbXNnc3RyICIiCisiQWR2YXJzZWw6ICVkLWJ5dGVibG9ra2UgZXIgZm9yIHN0b3JlIGZvciBzeXN0ZW1ldCAobWFrcyAlZCksIHR2dW5nZXQgdGlsIGF0ICIKKyJmb3J0c8OmdHRlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE4MAorbXNnaWQgIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0IGV4dGVudHMgZmVhdHVyZSIKK21zZ3N0ciAiS2FuIGlra2UgdW5kZXJzdMO4dHRlIGJpZ2FsbG9jLWZ1bmt0b24gdWRlbiBleHRlbnRzLWZ1bmt0aW9uIgorCisjOiBtaXNjL21rZTJmcy5jOjIxODcKK21zZ2lkICIiCisiVGhlIHJlc2l6ZV9pbm9kZSBhbmQgbWV0YV9iZyBmZWF0dXJlcyBhcmUgbm90IGNvbXBhdGlibGUuXG4iCisiVGhleSBjYW4gbm90IGJlIGJvdGggZW5hYmxlZCBzaW11bHRhbmVvdXNseS5cbiIKK21zZ3N0ciAiIgorIkZ1bmt0aW9uZXJuZSByZXNpemVfaW5vZGUgb2cgbWV0YV9iZyBlciBpa2tlIGtvbXBhdGlibGUuXG4iCisiRGUga2FuIGlra2UgYmVnZ2UgdsOmcmUgYWt0aXZlcmV0IHDDpSBzYW1tZSB0aWRzcHVua3QuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE5NgorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgYmlnYWxsb2MgZmVhdHVyZSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuIgorIlNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQWR2YXJzZWw6IGZ1bmt0aW9uZW4gYmlnYWxsb2MgZXIgc3RhZGlnIHVuZGVyIHVkdmlrbGluZ1xuIgorIlNlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0JpZ2FsbG9jIGZvciB5ZGVybGlnZXJlICIKKyJpbmZvcm1hdGlvblxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMDcKK21zZ2lkICJyZXNlcnZlZCBvbmxpbmUgcmVzaXplIGJsb2NrcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorInJlc2VydmVyZWRlIG9ubGluZSDDpm5kcmluZ3NibG9ra2UgZXIgaWtrZSB1bmRlcnN0w7h0dGV0IHDDpSBpa2tlLXNwYXJzZSAiCisiZmlsc3lzdGVtIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMTYKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIKK21zZ3N0ciAiYmxva3MgcGVyIGdydXBwZS1hbnRhbCB1ZGVuIGZvciBpbnRlcnZhbCIKKworIzogbWlzYy9ta2UyZnMuYzoyMjQwCittc2dpZCAiRmxleF9iZyBmZWF0dXJlIG5vdCBlbmFibGVkLCBzbyBmbGV4X2JnIHNpemUgbWF5IG5vdCBiZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKyJGbGV4X2JnLWZ1bmt0aW9uIGVyIGlra2UgYWt0aXZlcmV0LCBzw6UgZmxleF9iZy1zdMO4cnJlbHNlIGthbiBpa2tlIGFuZ2l2ZXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgJWQgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJ1Z3lsZGlnIGlrbnVkZXN0w7hycmVsc2UgJWQgKG1pbiAlZC9tYWtzICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHJhaXNlIGlub2RlIHJhdGlvPyIKK21zZ3N0ciAiZm9yIG1hbmdlIGlrbnVkZXIgKCVsbHUpLCBow6Z2IGlrbnVkZWZvcmhvbGQ/IgorCisjOiBtaXNjL21rZTJmcy5jOjIyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgc3BlY2lmeSA8IDJeMzIgaW5vZGVzIgorbXNnc3RyICJmb3IgbWFuZ2UgaWtudWRlciAoJWxsdSksIHNwZWNpZmljZXIgPCAyXjMyIGlrbnVkZXIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5vZGVfc2l6ZSAoJXUpICogaW5vZGVzX2NvdW50ICgldSkgdG9vIGJpZyBmb3IgYVxuIgorIlx0ZmlsZXN5c3RlbSB3aXRoICVsbHUgYmxvY2tzLCBzcGVjaWZ5IGhpZ2hlciBpbm9kZV9yYXRpbyAoLWkpXG4iCisiXHRvciBsb3dlciBpbm9kZSBjb3VudCAoLU4pLlxuIgorbXNnc3RyICIiCisiaWtudWRlX3N0w7hycmVsc2UoJXUpICogaWtudWRlcl9hbnRhbCAoJXUpIGVyIGZvciBzdG9yIGZvciBldFxuIgorIlx0Zmlsc3lzdGVtIG1lZCAlbGx1IGJsb2trZSwgc3BlY2lmaWNlciBow7hqZXJlIGlrbnVkZV9mb3Job2xkICgtaSlcbiIKKyJcdGVsbGVyIGxhdmVyZSBpa251ZGVhbnRhbCAoLU4pLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzeXN0ZW07IHRoaXMgY2FuIGJlIHVuZG9uZSB1c2luZyB0aGUgY29tbWFuZDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJPdmVyc2tyaXZuaW5nIGFmIGVrc2lzdGVyZW5kZSBmaWxzeXN0ZW07IGRldHRlIGthbiBmb3J0cnlkZXMgdmlhICIKKyJrb21tYW5kb2VuOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDMyCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHNldHVwIHVuZG8gZmlsZVxuIgorbXNnc3RyICJ1bmRlciBmb3Jzw7hnIHDDpSBhdCBvcHPDpnR0ZSB1bmRvLWZpbGVuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ1OAorbXNnaWQgIkRpc2NhcmRpbmcgZGV2aWNlIGJsb2NrczogIgorbXNnc3RyICJGamVybmVyIGVuaGVkc2Jsb2trZTogIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NzQKK21zZ2lkICJmYWlsZWQgLSAiCittc2dzdHIgIm1pc2x5a2tlZGVzIC0gIgorCisjOiBtaXNjL21rZTJmcy5jOjI1OTYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHVwIHN1cGVyYmxvY2siCittc2dzdHIgInVuZGVyIG9wc8OmdG5pbmcgYWYgc3VwZXJibG9rIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MTIKK21zZ2lkICJEaXNjYXJkIHN1Y2NlZWRlZCBhbmQgd2lsbCByZXR1cm4gMHMgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iCittc2dzdHIgIiIKKyJGamVybmVsc2UgbHlra2VkZXMgb2cgdmlsIHJldHVybmVyZSAwcyAtIHVkZWxhZGVyIGlrbnVkZXRhYmVsZmplcm5lbHNlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9zIC0gJXMiCittc2dzdHIgInVrZW5kdCBvcyAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjI3NTIKK21zZ2lkICJBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogIgorbXNnc3RyICJBbGxva2VyZXIgZ3J1cHBldGFiZWxsZXI6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNzYwCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGFsbG9jYXRlIGZpbGVzeXN0ZW0gdGFibGVzIgorbXNnc3RyICJ1bmRlciBmb3Jzw7hnIHDDpSBhdCBhbGxva2VyZSBmaWxzeXN0ZW10YWJlbGxlciIKKworIzogbWlzYy9ta2UyZnMuYzoyNzY5Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgY29udmVydGluZyBzdWJjbHVzdGVyIGJpdG1hcCIKK21zZ3N0ciAiIgorIlxuIgorIlx0dW5kZXIga29udmVydGVyaW5nIGFmIHVuZGVya2x5bmdlLWJpdG1hcCIKKworIzogbWlzYy9ta2UyZnMuYzoyODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgYmxvY2sgJWxsdSBhdCBlbmQgb2YgZmlsZXN5c3RlbSIKK21zZ3N0ciAidW5kZXIgbnVsc3RpbGxpbmcgYWYgYmxvayAlbGx1IGkgc2x1dG5pbmdlbiBhZiBmaWxzeXN0ZW1ldCIKKworIzogbWlzYy9ta2UyZnMuYzoyODI2Cittc2dpZCAid2hpbGUgcmVzZXJ2aW5nIGJsb2NrcyBmb3Igb25saW5lIHJlc2l6ZSIKK21zZ3N0ciAidW5kZXIgcmVzZXJ2ZXJpbmcgYWYgYmxva2tlIGZvciBvbmxpbmUgw6ZuZHJpbmcgYWYgc3TDuHJyZWxzZSIKKworIzogbWlzYy9ta2UyZnMuYzoyODM4IG1pc2MvdHVuZTJmcy5jOjcxMgorbXNnaWQgImpvdXJuYWwiCittc2dzdHIgImpvdXJuYWwiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgam91cm5hbCB0byBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiVGlsZsO4amVyIGpvdXJuYWwgdGlsIGVuaGVkZW4gJXM6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBhZGQgam91cm5hbCB0byBkZXZpY2UgJXMiCittc2dzdHIgIiIKKyJcbiIKKyJcdHVuZGVyIGZvcnPDuGcgcMOlIGF0IHRpbGbDuGplIGpvdXJuYWwgdGlsIGVuaGVkZW4gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg2MiBtaXNjL21rZTJmcy5jOjI4OTMgbWlzYy90dW5lMmZzLmM6NzQxIG1pc2MvdHVuZTJmcy5jOjc2MAorbXNnaWQgImRvbmVcbiIKK21zZ3N0ciAiZsOmcmRpZ1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NjkKK21zZ2lkICJTa2lwcGluZyBqb3VybmFsIGNyZWF0aW9uIGluIHN1cGVyLW9ubHkgbW9kZVxuIgorbXNnc3RyICJVZGVsYWRlciBqb3VybmFsb3ByZXR0ZWxzZSBpIHN1cGVyLW9ubHktdGlsc3RhbmRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCV1IGJsb2Nrcyk6ICIKK21zZ3N0ciAiT3ByZXR0ZXIgam91cm5hbCAoJXUgYmxva2tlKTogIgorCisjOiBtaXNjL21rZTJmcy5jOjI4ODkKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwiCittc2dzdHIgIiIKKyJcbiIKKyJcdHVuZGVyIGZvcnPDuGcgcMOlIGF0IG9wcmV0dGUgam91cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAxIG1pc2MvdHVuZTJmcy5jOjUxNgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisiXG4iCisiRGVyIG9wc3RvZCBlbiBmZWpsIHVuZGVyIGFrdGl2ZXJpbmcgYWYgZnVua3Rpb25lbiBmb3IgZmxlcmUgIgorIm1vbnRlcmluZ3NiZXNreXR0ZWxzZXIuIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBpcyBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkIHNlY29uZHMuXG4iCittc2dzdHIgIiIKKyJGbGVyZSBtb250ZXJpbmdzYmVza3l0dGVsc2VyIGVyIGFrdGl2ZXJldCBtZWQgb3BkYXRlcmluZ3NpbnRlcnZhbCAlZCAiCisic2VrdW5kZXIuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkyMworbXNnaWQgIldyaXRpbmcgc3VwZXJibG9ja3MgYW5kIGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogIgorbXNnc3RyICJTa3JpdmVyIHN1cGVyYmxva2tlIG9nIGZpbHN5c3RlbWV0cyByZWdpc3RyZXJpbmdzaW5mb3JtYXRpb246ICIKKworIzogbWlzYy9ta2UyZnMuYzoyOTMwCittc2dpZCAiIgorIlxuIgorIldhcm5pbmcsIGhhZCB0cm91YmxlIHdyaXRpbmcgb3V0IHN1cGVyYmxvY2tzLiIKK21zZ3N0ciAiIgorIlxuIgorIkFkdmFyc2VsLCBoYXZkZSBwcm9ibGVtZXIgbWVkIGF0IHNrcml2ZSBzdXBlcmJsb2trZSB1ZC4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkzMgorbXNnaWQgIiIKKyJkb25lXG4iCisiXG4iCittc2dzdHIgIiIKKyJmw6ZyZGlnXG4iCisiXG4iCisKKyM6IG1pc2MvbWtsb3N0K2ZvdW5kLmM6NTAKK21zZ2lkICJVc2FnZTogbWtsb3N0K2ZvdW5kXG4iCittc2dzdHIgIkJydWc6IG1rbG9zdCtmb3VuZFxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAgJXMgZGV2aWNlLi4uXG4iCisiXG4iCisiUHJpbnRzIG91dCB0aGUgcGFydGl0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGdpdmVuIGRldmljZS5cbiIKKyJGb3IgZXhhbXBsZTogJXMgL2Rldi9oZGFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkJydWc6ICAlcyBlbmhlZC4uLlxuIgorIlxuIgorIlVkc2tyaXZlciBwYXJ0aXRpb25zaW5mb3JtYXRpb24gZm9yIGh2ZXIgZW5oZWQuXG4iCisiRm9yIGVrc2VtcGVsOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJLYW4gaWtrZSDDpWJuZSAlczogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGdlb21ldHJ5IG9mICVzOiAlcyIKK21zZ3N0ciAiS2FuIGlra2UgaW5kaGVudGUgZ2VvbWV0cmkgZm9yICVzOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgc2l6ZSBvZiAlczogJXMiCittc2dzdHIgIkthbiBpa2tlIGluZGhlbnRlIHN0w7hycmVsc2UgcMOlICVzOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIHN0YXJ0PSU4ZCBzaXplPSU4bHUgZW5kPSU4ZFxuIgorbXNnc3RyICIlczogaD0lM2Qgcz0lM2QgYz0lNGQgICBzdGFydD0lOGQgc3RyPSU4bHUgc2x1dD0lOGRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEyCittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIkvDuHIgdmVubGlnc3QgZTJmc2NrIHDDpSBmaWxzeXN0ZW1ldC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jIG1heF9tb3VudHNfY291bnRdIFstZSBlcnJvcnNfYmVoYXZpb3JdIFstZyBncm91cF1cbiIKKyJcdFstaSBpbnRlcnZhbFtkfG18d11dIFstal0gWy1KIGpvdXJuYWxfb3B0aW9uc10gWy1sXVxuIgorIlx0Wy1tIHJlc2VydmVkX2Jsb2Nrc19wZXJjZW50XSBbLW8gW15dbW91bnRfb3B0aW9uc1ssLi4uXV0gWy1wICIKKyJtbXBfdXBkYXRlX2ludGVydmFsXVxuIgorIlx0Wy1yIHJlc2VydmVkX2Jsb2Nrc19jb3VudF0gWy11IHVzZXJdIFstQyBtb3VudF9jb3VudF0gWy1MIHZvbHVtZV9sYWJlbF1cbiIKKyJcdFstTSBsYXN0X21vdW50ZWRfZGlyXSBbLU8gW15dZmVhdHVyZVssLi4uXV1cbiIKKyJcdFstUSBxdW90YV9vcHRpb25zXVxuIgorIlx0Wy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV0gWy1UIGxhc3RfY2hlY2tfdGltZV0gWy1VIFVVSURdXG4iCisiXHRbIC1JIG5ld19pbm9kZV9zaXplIF0gZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzCittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCFcbiIKK21zZ3N0ciAiSm91cm5hbHN1cGVyYmxvayBibGV2IGlra2UgZnVuZGV0IVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjEKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJ1bmRlciBmb3Jzw7hnIHDDpSBhdCDDpWJlbiBla3N0ZXJuIGpvdXJuYWwiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI2NyBtaXNjL3R1bmUyZnMuYzoxOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIlcyBlciBpa2tlIGVuIGpvdXJuYWxlbmhlZC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6Mjc3IG1pc2MvdHVuZTJmcy5jOjE5NzQKK21zZ2lkICJGaWxlc3lzdGVtJ3MgVVVJRCBub3QgZm91bmQgb24gam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIkZpbHN5c3RlbWV0cyBVVUlEIGJsZXYgaWtrZSBmdW5kZXQgcMOlIGpvdXJuYWxlbmhlZC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MzAxCittc2dpZCAiIgorIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJLYW4gaWtrZSBmaW5kZSBqb3VybmFsZW5oZWQuIERlbiBibGV2IElLS0UgZmplcm5ldFxuIgorIkJydWcgdGlsdmFsZ2V0IC1mIHRpbCBhdCBmamVybmUgbWFuZ2xlbmRlIGpvdXJuYWxlbmhlZC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MzEwCittc2dpZCAiSm91cm5hbCByZW1vdmVkXG4iCittc2dzdHIgIkpvdXJuYWwgZmplcm5ldFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNTQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgInVuZGVyIGzDpnNuaW5nIGFmIGJpdG1hcHMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM2MgorbXNnaWQgIndoaWxlIGNsZWFyaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInVuZGVyIHJ5ZG5pbmcgYWYgam91cm5hbGlrbnVkZSIKKworIzogbWlzYy90dW5lMmZzLmM6MzczCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJ1bmRlciBza3Jpdm5pbmcgYWYgam91cm5hbGlrbnVkZSIKKworIzogbWlzYy90dW5lMmZzLmM6NDA1IG1pc2MvdHVuZTJmcy5jOjQxOAorbXNnaWQgIihhbmQgcmVib290IGFmdGVyd2FyZHMhKVxuIgorbXNnc3RyICIob2cgZ2Vuc3RhcnQgZWZ0ZXJmw7hsZ2VuZGUhKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiRnVua3Rpb25lbiBmb3IgcnlkbmluZyBhZiBmaWxzeXN0ZW0gwrslc8KrIGVyIGlra2UgdW5kZXJzdMO4dHRldC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiRnVua3Rpb25lbiBmb3Igb3Bzw6Z0bmluZyBhZiBmaWxzeXN0ZW0gwrslc8KrIGVyIGlra2UgdW5kZXJzdMO4dHRldC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDY3Cittc2dpZCAiIgorIlRoZSBoYXNfam91cm5hbCBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkZ1bmt0aW9uZW4gaGFzX2pvdXJuYWwga2FuIGt1biByeWRkZXMsIG7DpXIgZmlsc3lzdGVtZXQgZXIgdW1vbnRlcmV0XG4iCisiZWxsZXIgbW9udGVyZXQgc29tIHNrcml2ZWJlc2t5dHRldC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDc2Cittc2dpZCAiIgorIlRoZSBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldC4gIFBsZWFzZSBydW4gZTJmc2NrIGJlZm9yZSBjbGVhcmluZ1xuIgorInRoZSBoYXNfam91cm5hbCBmbGFnLlxuIgorbXNnc3RyICIiCisiRmxhZ2V0IG5lZWRzX3JlY292ZXJ5IGVyIGFuZ2l2ZXQuIEvDuHIgdmVubGlnc3QgZTJmc2NrIGbDuHIgcnlkbmluZ1xuIgorImFmIGZsYWdldCBoYXNfam91cm5hbC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDk1Cittc2dpZCAiIgorIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICdzcGFyc2Vfc3VwZXInIG5vdCBzdXBwb3J0ZWRcbiIKKyJmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgbWV0YV9iZyBmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKyJBbmdpdmVsc2UgYWYgZmlsc3lzdGVtZnVua3Rpb25lbiDCu3NwYXJzZV9zdXBlcsKrIGVyIGlra2UgdW5kZXJzdMO4dHRldFxuIgorImZvciBmaWxzeXN0ZW1lciBtZWQgZnVua3Rpb25lbiBtZXRhX2JnIGFrdGl2ZXJldC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTA4Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2FuJ3RcbiIKKyJiZSBzZXQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBvclxuIgorInJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkZ1bmt0aW9uZW4gZm9yIGZsZXJlIG1vbnRlcmluZ3NiZXNreXR0ZWxzZXIga2FuXG4iCisiaWtrZSBhbmdpdmVzIGh2aXMgZmlsc3lzdGVtZXQgZXIgbW9udGVyZXQgZWxsZXJcbiIKKyJza3JpdmViZXNreXR0ZXQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGhhcyBiZWVuIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWRzLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUzNQorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbm5vdFxuIgorImJlIGRpc2FibGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIHJlYWRvbmx5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU0MworbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICJEZXIgb3BzdG9kIGVuIGZlamwgdW5kZXIgbMOmc25pbmcgYWYgYml0bWFwXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1MgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWdpYyBudW1iZXIgaW4gTU1QIGJsb2NrIGRvZXMgbm90IG1hdGNoLiBleHBlY3RlZDogJXgsIGFjdHVhbDogJXhcbiIKK21zZ3N0ciAiTWFnaXNrIG51bW1lciBpIE1NUC1ibG9rIG1hdGNoZXIgaWtrZS4gZm9ydmVudGVkZTogJXgsIGZha3Rpc2sgJXhcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTU3Cittc2dpZCAid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIgorbXNnc3RyICJ1bmRlciBsw6ZzbmluZyBhZiBNTVAtYmxvay4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU4OQorbXNnaWQgIiIKKyJDbGVhcmluZyB0aGUgZmxleF9iZyBmbGFnIHdvdWxkIGNhdXNlIHRoZSB0aGUgZmlsZXN5c3RlbSB0byBiZVxuIgorImluY29uc2lzdGVudC5cbiIKK21zZ3N0ciAiIgorIlJ5ZG5pbmcgYWYgZmxhZ2V0IGZsZXhfYmcgdmlsIG1lZGbDuHJlIGF0IGZpbHN5c3RlbWV0IGJsaXZlclxuIgorImlua29uc2lzdGVudC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjAwCittc2dpZCAiIgorIlRoZSBodWdlX2ZpbGUgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NjYwCittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6ICdecXVvdGEnIG9wdGlvbiBvdmVycmlkZXMgJy1RJ2FyZ3VtZW50cy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MDUKK21zZ2lkICJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBhIGpvdXJuYWwuXG4iCittc2dzdHIgIkZpbHN5c3RlbWV0IGhhciBhbGxlcmVkZSBlbiBqb3VybmFsLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBvbiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiXHR1bmRlciBmb3Jzw7hnIHDDpSBhdCDDpWJuZSBqb3VybmFsIHDDpSAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBvbiBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiT3ByZXR0ZXIgam91cm5hbCBww6UgZW5oZWQgJXM6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGFkZGluZyBmaWxlc3lzdGVtIHRvIGpvdXJuYWwgb24gJXMiCittc2dzdHIgInVuZGVyIHRpbGbDuGplbHNlIGFmIGZpbHN5c3RlbSB0aWwgam91cm5hbCBww6UgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc0MworbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgaW5vZGU6ICIKK21zZ3N0ciAiT3ByZXR0ZXIgam91cm5hbGlrbnVkZTogIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3NTcKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwgZmlsZSIKK21zZ3N0ciAiIgorIlxuIgorIlx0dW5kZXIgZm9yc8O4ZyBww6UgYXQgb3ByZXR0ZSBqb3VybmFsZmlsIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4MzIKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2UgcXVvdGEgb3B0aW9ucyFcbiIKK21zZ3N0ciAiS3VubmUgaWtrZSBhbGxva2VyZSBodWtvbW1lbHNlIHRpbCBhdCBmb3J0b2xrZSBrdm90YWluZHN0aWxsaW5nZXIhXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg1NAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgcXVvdGEgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRm9sbG93aW5nIHZhbGlkIHF1b3RhIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSAocGFzcyBieSBzZXBhcmF0aW5nIHdpdGggIgorImNvbW1hKTpcbiIKKyJcdFteXXVzcnF1b3RhXG4iCisiXHRbXl1ncnBxdW90YVxuIgorIlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBwYXJzZSBkYXRlL3RpbWUgc3BlY2lmaWVyOiAlcyIKK21zZ3N0ciAiS3VubmUgaWtrZSBmb3J0b2xrZSBkYXRvL3RpZHMtYW5naXZlcmVuOiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTQyIG1pc2MvdHVuZTJmcy5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbW91bnRzIGNvdW50IC0gJXMiCittc2dzdHIgInVneWxkaWd0IG1vbnRlcmluZ3NhbnRhbCAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGVycm9yIGJlaGF2aW9yIC0gJXMiCittc2dzdHIgInVneWxkaWcgZmVqbG9wZsO4cnNlbCAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpZC9ncm91cCBuYW1lIC0gJXMiCittc2dzdHIgInVneWxkaWcgZ2lkL2dydXBwZW5hdm4gLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW50ZXJ2YWwgLSAlcyIKK21zZ3N0ciAidWd5bGRpZyBpbnRlcnZhbCAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9jayByYXRpbyAtICVzIgorbXNnc3RyICJ1Z3lsZGlndCByZXNlcnZlcmV0IGJsb2tmb3Job2xkIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNzUKK21zZ2lkICItbyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiLW8ga2FuIGt1biBhbmdpdmVzIGVuIGdhbmciCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwODQKK21zZ2lkICItTyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiLU8ga2FuIGt1biBhbmdpdmVzIGVuIGdhbmciCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrcyBjb3VudCAtICVzIgorbXNnc3RyICJ1Z3lsZGlndCByZXNlcnZlcmV0IGJsb2thbnRhbCAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB1aWQvdXNlciBuYW1lIC0gJXMiCittc2dzdHIgInVneWxkaWcgdWlkL2JydWdlcm5hdm4gLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTE0NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICJ1Z3lsZGluZyBpa251ZGUtc3TDuHJyZWxzZSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIklub2RlIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by0gJXMiCittc2dzdHIgIklrbnVkZS1zdMO4cnJlbHNlIHNrYWwgdsOmcmUgZW4gcG90ZW5zIGFmIHRvIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibW1wX3VwZGF0ZV9pbnRlcnZhbCB0b28gYmlnOiAlbHVcbiIKK21zZ3N0ciAibW1wX3VwZGF0ZV9pbnRlcnZhbCBlciBmb3Igc3RvcnQ6ICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZFxuIgorbXNnaWRfcGx1cmFsICIiCisiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaWRlOiAlc1xuIgorbXNnc3RyICJVZ3lsZGlnIFJBSUQgc3RyaWRlOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpcGUtd2lkdGg6ICVzXG4iCittc2dzdHIgIlVneWxkaWcgUkFJRCBzdHJpcGUtYnJlZGRlOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaGFzaCBhbGdvcml0aG06ICVzXG4iCittc2dzdHIgIlVneWxkaWcgaGFzaGFsZ29yaXRtZTogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gdG8gJXMgKCVkKVxuIgorbXNnc3RyICJBbmdpdmVyIHN0YW5kYXJkaGFzaGFsZ29yaXRtZW4gdGlsICVzICglZClcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTMzMQorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0Y2xlYXJfbW1wXG4iCisiXHRoYXNoX2FsZz08aGFzaCBhbGdvcml0aG0+XG4iCisiXHRtb3VudF9vcHRzPTxleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnM+XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgY2h1bmsgc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGVfd2lkdGg9PFJBSUQgc3RyaWRlKmRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0XnRlc3RfZnNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzk4Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgaW5vZGUgYml0bWFwXG4iCittc2dzdHIgIkt1bm5lIGlra2UgbMOmc2UgaWtudWRlLWJpdG1hcFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODAzCittc2dpZCAiRmFpbGVkIHRvIHJlYWQgYmxvY2sgYml0bWFwXG4iCittc2dzdHIgIkt1bm5lIGlra2UgbMOmc2UgYmxvay1iaXRtYXBcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyMCByZXNpemUvcmVzaXplMmZzLmM6OTMxCittc2dpZCAiYmxvY2tzIHRvIGJlIG1vdmVkIgorbXNnc3RyICJibG9ra2UgZGVyIHNrYWwgZmx5dHRlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyMworbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSBibG9jayBiaXRtYXAgd2hlbiBpbmNyZWFzaW5nIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiS3VubmUgaWtrZSBhbGxva2VyZSBibG9rLWJpdG1hcCBkYSBpa251ZGVzdMO4cnJlbHNlbiBibGV2IMO4Z2V0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjkKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGluY3JlYXNlIGlub2RlIHNpemUgXG4iCittc2dzdHIgIklra2Ugbm9rIHBsYWRzIHRpbCBhdCDDuGdlIGlrbnVkZXN0w7hycmVsc2VuIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODM0Cittc2dpZCAiRmFpbGVkIHRvIHJlbG9jYXRlIGJsb2NrcyBkdXJpbmcgaW5vZGUgcmVzaXplIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NjYKK21zZ2lkICIiCisiRXJyb3IgaW4gcmVzaXppbmcgdGhlIGlub2RlIHNpemUuXG4iCisiUnVuIGUydW5kbyB0byB1bmRvIHRoZSBmaWxlIHN5c3RlbSBjaGFuZ2VzLiBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODkzCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZGIgZmlsZW5hbWVcbiIKK21zZ3N0ciAiS3VubmUgaWtrZSBhbGxva2VyZSBodWtvbW1lbHNlIGZvciB0ZGItZmlsbmF2blxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZWxldGUgJXMiCittc2dzdHIgInVuZGVyIGZvcnPDuGcgcMOlIGF0IHNsZXR0ZSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gdW5kbyB0aGUgdHVuZTJmcyBvcGVyYXRpb24gcGxlYXNlIHJ1biB0aGUgY29tbWFuZFxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNTVAgYmxvY2sgbWFnaWMgaXMgYmFkLiBUcnkgdG8gZml4IGl0IGJ5IHJ1bm5pbmc6XG4iCisiJ2UyZnNjayAtZiAlcydcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIGlzIGFscmVhZHkgJWx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA4MQorbXNnaWQgIlNocmlua2luZyBpbm9kZSBzaXplIGlzIG5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiRm9ybWluZHNrZWxzZSBhZiBpa251ZGVzdMO4cnJlbHNlIGVyIGlra2UgdW5kZXJzdMO4dHRldFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaW5vZGUgc2l6ZSAlbHUgKG1heCAlZClcbiIKK21zZ3N0ciAiVWd5bGRpZyBpa251ZGVzdMO4cnJlbHNlICVsdSAobWFrcyAlZClcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3VycmVudCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBlcnJvciBiZWhhdmlvciB0byAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgZ2lkIHRvICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgaXMgdG9vIGJpZyAoJWx1KSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnRhZ2UgdG8gJWclJSAoJWxsdSBibG9ja3MpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MgY291bnQgaXMgdG9vIGJpZyAoJWxsdSkiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4NworbXNnaWQgIiIKKyJcbiIKKyJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBzcGFyc2Ugc3VwZXJibG9ja3MuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE5MQorbXNnaWQgIiIKKyJcbiIKKyJTZXR0aW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCBzdXBwb3J0ZWRcbiIKKyJmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgbWV0YV9iZyBmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBzZXQuICAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjA3Cittc2dpZCAiIgorIlxuIgorIkNsZWFyaW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHRpbWUgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdG8gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHVpZCB0byAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjUzCittc2dpZCAiRXJyb3IgaW4gdXNpbmcgY2xlYXJfbW1wLiBJdCBtdXN0IGJlIHVzZWQgd2l0aCAtZlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNzEKK21zZ2lkICIiCisiVGhlIHF1b3RhIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjkyCittc2dpZCAiVGhlIFVVSUQgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzIyCittc2dpZCAiSW52YWxpZCBVVUlEIGZvcm1hdFxuIgorbXNnc3RyICJVZ3lsZGlndCBVVUlELWZvcm1hdFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzM3Cittc2dpZCAiTmVlZCB0byB1cGRhdGUgam91cm5hbCBzdXBlcmJsb2NrLlxuIgorbXNnc3RyICJTa2FsIG9wZGF0ZXJlIGpvdXJuYWxzdXBlcmJsb2suXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNTgKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNjYKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIGlub2RlIHNpemUgbm90IHN1cHBvcnRlZCBmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgZmxleF9iZ1xuIgorImZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW5vZGUgc2l6ZSAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzgyCittc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBpbm9kZSBzaXplXG4iCittc2dzdHIgIkt1bm5lIGlra2Ugw6ZuZHJlIGlrbnVkZXN0w7hycmVsc2VcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlkZSBzaXplIHRvICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlwZSB3aWR0aCB0byAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnMgdG8gJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjkzCittc2dpZCAiPHByb2NlZWRpbmc+XG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJvY2VlZCBhbnl3YXkgKG9yIHdhaXQgJWQgc2Vjb25kcykgPyAoeSxuKSAiCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MTAxCittc2dpZCAiUHJvY2VlZCBhbnl3YXk/ICh5LG4pICIKK21zZ3N0ciAiRm9ydHPDpnQgYWxsaWdldmVsPyAoaixuKSAiCisKKyM6IG1pc2MvdXRpbC5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW91bnRlZCBvbiAlcyBvbiAlcyIKK21zZ3N0ciAiXHRzaWRzdCBtb250ZXJldCBww6UgJXMgZGVuICVzIgorCisjOiBtaXNjL3V0aWwuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vdW50ZWQgb24gJXMiCittc2dzdHIgIlx0c2lkc3QgbW9udGVyZXQgcMOlICVzIgorCisjOiBtaXNjL3V0aWwuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRjcmVhdGVkIG9uICVzIgorbXNnc3RyICJcdG9wcmV0dGV0IGRlbiAlcyIKKworIzogbWlzYy91dGlsLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0bGFzdCBtb2RpZmllZCBvbiAlcyIKK21zZ3N0ciAiXHRzaWRzdCDDpm5kcmV0IGRlbiAlcyIKKworIzogbWlzYy91dGlsLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvdW5kIGEgJXMgcGFydGl0aW9uIHRhYmxlIGluICVzXG4iCittc2dzdHIgIkZhbmR0IGVuICVzLXBhcnRpdGlvbnN0YWJlbCBpICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSAlcyBkb2VzIG5vdCBleGlzdCBhbmQgbm8gc2l6ZSB3YXMgc3BlY2lmaWVkLlxuIgorbXNnc3RyICJGaWxlbiAlcyBmaW5kZXMgaWtrZSBvZyBpbmdlbiBzdMO4cnJlbHNlIGJsZXYgYW5naXZldC5cbiIKKworIzogbWlzYy91dGlsLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIHJlZ3VsYXIgZmlsZSAlc1xuIgorbXNnc3RyICJPcHJldHRlciBub3JtYWwgZmlsICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiS3VubmUgaWtrZSDDpWJuZSAlczogJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjE2Cittc2dpZCAiIgorIlxuIgorIlRoZSBkZXZpY2UgYXBwYXJlbnRseSBkb2VzIG5vdCBleGlzdDsgZGlkIHlvdSBzcGVjaWZ5IGl0IGNvcnJlY3RseT9cbiIKK21zZ3N0ciAiIgorIlxuIgorIkVuaGVkZW4gZmluZGVzIMOlYmVuYmFydCBpa2tlOyBzcGVjaWZpY2VyZWRlIGR1IGRlbiBrb3JyZWt0P1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGNvbnRhaW5zIGEgJXMgZmlsZSBzeXN0ZW0gbGFiZWxsZWQgJyVzJ1xuIgorbXNnc3RyICIlcyBpbmRlaG9sZGVyIGV0ICVzLWZpbHN5c3RlbSBtZWQgbmF2bmV0IMK7JXPCq1xuIgorCisjOiBtaXNjL3V0aWwuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICIlcyBpbmRlaG9sZGVyIGV0ICVzLWZpbHN5c3RlbVxuIgorCisjOiBtaXNjL3V0aWwuYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgZW50aXJlIGRldmljZSwgbm90IGp1c3Qgb25lIHBhcnRpdGlvbiFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzozMjMKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgbWFrZSBhICVzIGhlcmUhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MzM1Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MzUxCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIGpvdXJuYWwgb3B0aW9ucyFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCBmaW5kIGpvdXJuYWwgZGV2aWNlIG1hdGNoaW5nICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6NDAzCittc2dpZCAiIgorIlxuIgorIkJhZCBqb3VybmFsIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkpvdXJuYWwgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGpvdXJuYWwgb3B0aW9ucyBhcmU6XG4iCisiXHRzaXplPTxqb3VybmFsIHNpemUgaW4gbWVnYWJ5dGVzPlxuIgorIlx0ZGV2aWNlPTxqb3VybmFsIGRldmljZT5cbiIKKyJcdGxvY2F0aW9uPTxqb3VybmFsIGxvY2F0aW9uPlxuIgorIlxuIgorIlRoZSBqb3VybmFsIHNpemUgbXVzdCBiZSBiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGZpbGVzeXN0ZW0gYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjQzNAorbXNnaWQgIiIKKyJcbiIKKyJGaWxlc3lzdGVtIHRvbyBzbWFsbCBmb3IgYSBqb3VybmFsXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgcmVxdWVzdGVkIGpvdXJuYWwgc2l6ZSBpcyAlZCBibG9ja3M7IGl0IG11c3QgYmVcbiIKKyJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gIEFib3J0aW5nLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjQ0OQorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIHNpemUgdG9vIGJpZyBmb3IgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkpvdXJuYWxzdMO4cnJlbHNlIGVyIGZvciBzdG9yIGZvciBmaWxzeXN0ZW1ldC5cbiIKKworIzogbWlzYy91dGlsLmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGVzeXN0ZW0gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNoZWNrZWQgZXZlcnkgJWQgbW91bnRzIG9yXG4iCisiJWcgZGF5cywgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgVXNlIHR1bmUyZnMgLWMgb3IgLWkgdG8gb3ZlcnJpZGUuXG4iCittc2dzdHIgIiIKKyJEZXR0ZSBmaWxzeXN0ZW0gdmlsIGF1dG9tYXRpc2sgYmxpdmUga29udHJvbGxlcmV0IGVmdGVyIGh2ZXIgJWQgbW9udGVyaW5nXG4iCisiZWxsZXIgZWZ0ZXIgJWcgZGFnZS4gQnJ1ZyB0dW5lMmZzIC1jIGVsbGVyIC1pIGZvciBhdCBhbm51bGxlcmUuXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0OQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1kXSBbLXAgcGlkZmlsZV0gWy1zIHNvY2tldHBhdGhdIFstVCB0aW1lb3V0XVxuIgorbXNnc3RyICJCcnVnOiAlcyBbLWRdIFstcCBwaWQtZmlsXSBbLXMgc29ra2Vsc3RpXSBbLVQgdGlkc3VkbMO4Yl1cbiIKKworIzogbWlzYy91dWlkZC5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyBbLXJ8dF0gWy1uIG51bV0gWy1zIHNvY2tldHBhdGhdXG4iCittc2dzdHIgIiAgICAgICAlcyBbLXJ8dF0gWy1uIG51bV0gWy1zIHNva2tlbHN0aV1cbiIKKworIzogbWlzYy91dWlkZC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyAta1xuIgorbXNnc3RyICIgICAgICAgJXMgLWtcbiIKKworIzogbWlzYy91dWlkZC5jOjE1NQorbXNnaWQgImJhZCBhcmd1bWVudHMiCittc2dzdHIgInVneWxkaWdlIHBhcmFtZXRyZSIKKworIzogbWlzYy91dWlkZC5jOjE3MworbXNnaWQgImNvbm5lY3QiCittc2dzdHIgImZvcmJpbmQiCisKKyM6IG1pc2MvdXVpZGQuYzoxOTIKK21zZ2lkICJ3cml0ZSIKK21zZ3N0ciAic2tyaXYiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDAKK21zZ2lkICJyZWFkIGNvdW50IgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDYKK21zZ2lkICJiYWQgcmVzcG9uc2UgbGVuZ3RoIgorbXNnc3RyICJ1Z3lsZGlnIHN2YXJsw6ZuZ2RlIgorCisjOiBtaXNjL3V1aWRkLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInV1aWRkIGRhZW1vbiBhbHJlYWR5IHJ1bm5pbmcgYXQgcGlkICVzXG4iCittc2dzdHIgInV1aWRkLWTDpm1vbiBrw7hyZXIgYWxsZXJlZGUgcMOlIHBpZCAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICJLdW5uZSBpa2tlIG9wcmV0dGUgdW5peC1zdHLDuG1zb2trZWw6ICVzIgorCisjOiBtaXNjL3V1aWRkLmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGJpbmQgdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIkt1bm5lIGlra2UgYmluZGUgdW5peC1zb2trZWwgJXM6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbGlzdGVuIG9uIHVuaXggc29ja2V0ICVzOiAlc1xuIgorbXNnc3RyICJLdW5uZSBpa2tlIGx5dHRlIHDDpSB1bml4LXNva2tlbCAlczogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGZyb20gY2xpZW50LCBsZW4gPSAlZFxuIgorbXNnc3RyICJGZWpsIHZlZCBsw6ZzbmluZyBmcmEga2xpZW50LCBsZW4gPSAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZXJhdGlvbiAlZCwgaW5jb21pbmcgbnVtID0gJWRcbiIKK21zZ3N0ciAib3BlcmF0aW9uICVkLCBpbmRnw6VlbmRlIG51bSA9ICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRDogJXNcbiIKK21zZ3N0ciAiT3ByZXR0ZXQgdGlkcy1VVUlEOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCByYW5kb20gVVVJRDogJXNcbiIKK21zZ3N0ciAiT3ByZXR0ZXQgdmlsa8OlcmxpZyBVVUlEOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCAlZCBzdWJzZXF1ZW50IFVVSURzXG4iCittc2dzdHJbMF0gIk9wcmV0dGV0IHRpZHMgVVVJRCAlcyBvZyBlZnRlcmbDuGxnZW5kZSBVVUlEXG4iCittc2dzdHJbMV0gIk9wcmV0dGV0IHRpZHMgVVVJRCAlcyBvZyAlZCBlZnRlcmbDuGxnZW5kZSBVVUlEJ2VyXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkICVkIFVVSUQnczpcbiIKK21zZ3N0ciAiT3ByZXR0ZXQgJWQgVVVJRCdlcjpcbiIKKworIzogbWlzYy91dWlkZC5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiAlZFxuIgorbXNnc3RyICJVZ3lsZGlnIG9wZXJhdGlvbiAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDc3IG1pc2MvdXVpZGQuYzo0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlcjogJXNcbiIKK21zZ3N0ciAiVWd5bGRpZ3QgdGFsOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTM0IG1pc2MvdXVpZGQuYzo1NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2FsbGluZyB1dWlkZCBkYWVtb24gKCVzKTogJXNcbiIKK21zZ3N0ciAiRGVyIG9wc3RvZCBlbiBmZWpsIHZlZCBrYWxkIHRpbCB1dWlkZC1kw6Ztb24gKCVzKTogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiVzIG9nIGVmdGVyZsO4bGdlbmRlIFVVSURcbiIKK21zZ3N0clsxXSAiJXMgb2cgZWZ0ZXJmw7hsZ2VuZGUgJWQgVVVJRCdlclxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ4Cittc2dpZCAiTGlzdCBvZiBVVUlEJ3M6XG4iCittc2dzdHIgIkxpc3RlIG92ZXIgVVVJRCdlcjpcbiIKKworIzogbWlzYy91dWlkZC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHJlcGx5IGxlbmd0aCBmcm9tIHNlcnZlciAlZFxuIgorbXNnc3RyICJVdmVudGV0IHN2YXJsw6ZuZ2RlIGZyYSBzZXJ2ZXIgJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBraWxsIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkOiAlc1xuIgorbXNnc3RyICJLdW5uZSBpa2tlIGRyw6ZiZSB1dWlkZCBkZXIga8O4cmVyIHDDpSBwaWQgJWQ6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiS2lsbGVkIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkXG4iCittc2dzdHIgIkRyw6ZidGUgdXVpZGQgZGVyIGvDuHJlciBww6UgcGlkICVkXG4iCisKKyM6IG1pc2MvdXVpZGdlbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJdIFstdF1cbiIKK21zZ3N0ciAiQnJ1ZzogJXMgWy1yXSBbLXRdXG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDIKK21zZ2lkICIjIEV4dGVudCBkdW1wOlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstZCBkZWJ1Z19mbGFnc10gWy1mXSBbLUZdIFstTV0gWy1QXSBbLXBdIGRldmljZSBbbmV3X3NpemVdXG4iCisiXG4iCittc2dzdHIgIiIKKyJCcnVnOiAlcyBbLWQgZmVqbHPDuGduaW5nc2ZsYWddIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBlbmhlZCAiCisiW255X3N0w7hycmVsc2VdXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NjYKK21zZ2lkICJFeHRlbmRpbmcgdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJVZHZpZGVyIGlrbnVkZS10YWJlbGxlbiIKKworIzogcmVzaXplL21haW4uYzo2OQorbXNnaWQgIlJlbG9jYXRpbmcgYmxvY2tzIgorbXNnc3RyICJPbWFsbG9rZXJlciBibG9ra2UiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzIKK21zZ2lkICJTY2FubmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiU2thbm5lciBpa251ZGUtdGFiZWwiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzUKK21zZ2lkICJVcGRhdGluZyBpbm9kZSByZWZlcmVuY2VzIgorbXNnc3RyICJPcGRhdGVyZXIgaWtudWRlLXJlZmVyZW5jZXIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzgKK21zZ2lkICJNb3ZpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIkZseXR0ZXIgaWtudWRlLXRhYmVsIgorCisjOiByZXNpemUvbWFpbi5jOjgxCittc2dpZCAiVW5rbm93biBwYXNzPyE/IgorbXNnc3RyICJVa2VuZHQgZ2VubmVtbMO4Yj8hPyIKKworIzogcmVzaXplL21haW4uYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJCZWdpbiBwYXNzICVkIChtYXggPSAlbHUpXG4iCittc2dzdHIgIkJlZ3luZCBnZW5uZW1sw7hiICVkIChtYWtzLiA9ICVsdSlcbiIKKworIzogcmVzaXplL21haW4uYzoxNTUKK21zZ2lkICIiCisiXG4iCisiUmVzaXppbmcgYmlnYWxsb2MgZmlsZSBzeXN0ZW1zIGhhcyBub3QgYmVlbiBmdWxseSB0ZXN0ZWQuICBQcm9jZWVkIGF0XG4iCisieW91ciBvd24gcmlzayEgIFVzZSB0aGUgZm9yY2Ugb3B0aW9uIGlmIHlvdSB3YW50IHRvIGdvIGFoZWFkIGFueXdheS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIgorbXNnc3RyICJ1bmRlciDDpWJuaW5nIGFmICVzIgorCisjOiByZXNpemUvbWFpbi5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIHN0YXQgaW5mb3JtYXRpb24gZm9yICVzIgorbXNnc3RyICJ1bmRlciBpbmRoZW50ZWxzZSBhZiBzdGF0LWluZm9ybWF0aW9uIGZvciAlcyIKKworIzogcmVzaXplL21haW4uYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZiAlcycgZmlyc3QuXG4iCisiXG4iCittc2dzdHIgIiIKKyJrw7hyIHZlbmxpZ3N0IMK7ZTJmc2NrIC1mICVzwqsgZsO4cnN0LlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RpbWF0ZWQgbWluaW11bSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtOiAlbGx1XG4iCittc2dzdHIgIkVzdGltZXJldCBtaW5pbXVtc3N0w7hycmVsc2UgZm9yIGZpbHN5c3RlbWV0OiAlbGx1XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbmV3IHNpemU6ICVzXG4iCittc2dzdHIgIlVneWxkaWcgbnkgc3TDuHJyZWxzZTogJXNcbiIKKworIzogcmVzaXplL21haW4uYzo0MjEKK21zZ2lkICJOZXcgc2l6ZSB0b28gbGFyZ2UgdG8gYmUgZXhwcmVzc2VkIGluIDMyIGJpdHNcbiIKK21zZ3N0ciAiTnkgc3TDuHJyZWxzZSBmb3Igc3RvciB0aWwgYXQgYmxpdmUgdWR0cnlrIHRpIDMyLWJpdFxuIgorCisjOiByZXNpemUvbWFpbi5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJOZXcgc2l6ZSBzbWFsbGVyIHRoYW4gbWluaW11bSAoJWxsdSlcbiIKK21zZ3N0ciAiTnkgc3TDuHJyZWxzZSBlciBtaW5kcmUgZW5kIG1pbmltdW0gKCVsbHUpXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDM1Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgbGVuZ3RoIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29udGFpbmluZyBwYXJ0aXRpb24gKG9yIGRldmljZSkgaXMgb25seSAlbGx1ICglZGspIGJsb2Nrcy5cbiIKKyJZb3UgcmVxdWVzdGVkIGEgbmV3IHNpemUgb2YgJWxsdSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIGlzIGFscmVhZHkgJWxsdSAoJWRrKSBibG9ja3MgbG9uZy4gIE5vdGhpbmcgdG8gZG8hXG4iCisiXG4iCittc2dzdHIgIkZpbHN5c3RlbWV0IGVyIGFsbGVyZWRlICVsbHUgKCVkayggYmxva2tlIGxhbmd0LiBJbnRldCBhdCBnw7hyZSFcbiIKKworIzogcmVzaXplL21haW4uYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXppbmcgdGhlIGZpbGVzeXN0ZW0gb24gJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlc2l6ZSAlcyIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1meSAlcycgdG8gZml4IHRoZSBmaWxlc3lzdGVtXG4iCisiYWZ0ZXIgdGhlIGFib3J0ZWQgcmVzaXplIG9wZXJhdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gb24gJXMgaXMgbm93ICVsbHUgKCVkaykgYmxvY2tzIGxvbmcuXG4iCisiXG4iCittc2dzdHIgIkZpbHN5c3RlbWV0IHDDpSAlcyBlciBudSAlbGx1ICglZGspIGJsb2trZSBsYW5ndC5cbiIKKworIzogcmVzaXplL21haW4uYzo1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHRydW5jYXRlICVzIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4MgorbXNnaWQgImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemUgd2l0aCBzcGFyc2Vfc3VwZXIyIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4NworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXM7IG9uLWxpbmUgcmVzaXppbmcgcmVxdWlyZWRcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6OTEKK21zZ2lkICJPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTYKK21zZ2lkICJGaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMjUKK21zZ2lkICJOb3QgZW5vdWdoIHJlc2VydmVkIGdkdCBibG9ja3MgZm9yIHJlc2l6aW5nIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMzIKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCByZXNpemluZyBhIGZpbGUgc3lzdGVtIHRoaXMgbGFyZ2UiCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBtb3VudHBvaW50ICVzIgorbXNnc3RyICJ1bmRlciBmb3Jzw7hnIHDDpSBhdCDDpWJuZSBtb250ZXJpbmdzcHVua3QgJXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2xkIHJlc2l6ZSBpbnRlcmZhY2UgcmVxdWVzdGVkLlxuIgorbXNnc3RyICJEZXIgYmxldiBhbm1vZHQgb20gZ2FtbWVsIGdyw6Zuc2VmbGFkZSB0aWwgw6ZuZHJpbmcgYWYgc3TDuHJyZWxzZS5cbiIKKworIzogcmVzaXplL29ubGluZS5jOjE2NCByZXNpemUvb25saW5lLmM6MTgxCittc2dpZCAiUGVybWlzc2lvbiBkZW5pZWQgdG8gcmVzaXplIGZpbGVzeXN0ZW0iCittc2dzdHIgIlRpbGxhZGVsc2UgdGlsIGF0IMOmbmRyZSBmaWxzeXN0ZW1ldHMgc3TDuHJyZWxzZSBuw6ZndGV0IgorCisjOiByZXNpemUvb25saW5lLmM6MTY3IHJlc2l6ZS9vbmxpbmUuYzoxODcKK21zZ2lkICJXaGlsZSBjaGVja2luZyBmb3Igb24tbGluZSByZXNpemluZyBzdXBwb3J0IgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxODQKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICJQZXJmb3JtaW5nIGFuIG9uLWxpbmUgcmVzaXplIG9mICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMzMKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gZXh0ZW5kIHRoZSBsYXN0IGdyb3VwIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgdHJ5aW5nIHRvIGFkZCBncm91cCAjJWQiCittc2dzdHIgIlVuZGVyIGZvcnPDuGcgcMOlIGF0IHRpbGbDuGplIGdydXBwZSAjJWQiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlcywgYW5kIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IHN1cHBvcnRlZCBvbiAiCisidGhpcyBzeXN0ZW0uXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICJpa251ZGVyICglbGx1KSBza2FsIHbDpnJlIG1pbmRyZSBlbmQgJXUiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo2OTEKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MiCittc2dzdHIgInJlc2VydmVyZWRlIGJsb2trZSIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjkzNgorbXNnaWQgIm1ldGEtZGF0YSBibG9ja3MiCittc2dzdHIgIm1ldGFkYXRhYmxva2tlIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MTAzOSByZXNpemUvcmVzaXplMmZzLmM6MTgzNgorbXNnaWQgIm5ldyBtZXRhIGJsb2NrcyIKK21zZ3N0ciAibnllIG1ldGFibG9ra2UiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMDU2Cittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbiEgIE5vIHNiIGluIGxhc3Qgc3VwZXJfc3BhcnNlIGJnP1xuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMDYxCittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbiEgIFVuZXhwZWN0ZWQgb2xkX2Rlc2MgaW4gc3VwZXJfc3BhcnNlIGJnP1xuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMTM5Cittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbjogcmVzaXplIGlub2RlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExCittc2dpZCAiRVhUMkZTIExpYnJhcnkgdmVyc2lvbiAxLjQyLjEzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0Ml9maWxzeXMgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfc2NhbiBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHVuaXggaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19tYW5hZ2VyIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJsb2NrX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZ2VuZXJpY19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdGVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGRpcmVjdG9yeSBibG9jayBsaXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGljb3VudCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBQb3dlcnF1ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0MiBmaWxlIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIEV4dDIgSW1hZ2UgSGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGUgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBoYW5kbGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzEKK21zZ2lkICJGaWxlc3lzdGVtIHJldmlzaW9uIHRvbyBoaWdoIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMgorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgdG8gZmlsZXN5c3RlbSBvcGVuZWQgcmVhZC1vbmx5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMworbXNnaWQgIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIkthbiBpa2tlIGzDpnNlIGdydXBwZWJlc2tyaXZlcmUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNAorbXNnaWQgIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICJLYW4gaWtrZSBza3JpdmUgZ3J1cHBlYmVza3JpdmVyZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM1Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiw5hkZWxhZ3QgZ3J1cHBlYmVza3JpdmVyOiB1Z3lsZGlnIGJsb2sgZm9yIGJsb2tiaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNgorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSBiaXRtYXAiCittc2dzdHIgIsOYZGVsYWd0IGdydXBwZWJlc2tyaXZlcjogdWd5bGRpZyBibG9rIGZvciBpa251ZGUtYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzcKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgdGFibGUiCittc2dzdHIgIsOYZGVsYWd0IGdydXBwZS1iZXNrcml2ZXI6IHVneWxkaWcgYmxvayBmb3IgaWtudWRlLXRhYmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzgKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIkthbiBpa2tlIHNrcml2ZSBlbiBpa251ZGUtYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiS2FuIGlra2UgbMOmc2UgZW4gaWtudWRlLWJpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQwCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYSBibG9jayBiaXRtYXAiCittc2dzdHIgIkthbiBpa2tlIHNrcml2ZSBlbiBibG9rYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDEKK21zZ2lkICJDYW4ndCByZWFkIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICJLYW4gaWtrZSBsw6ZzZSBlbiBibG9rYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDIKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiS2FuIGlra2Ugc2tyaXZlIGVuIGlrbnVkZS10YWJlbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQzCittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiS2FuIGlra2UgbMOmc2UgZW4gaWtudWRlLXRhYmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDQKK21zZ2lkICJDYW4ndCByZWFkIG5leHQgaW5vZGUiCittc2dzdHIgIkthbiBpa2tlIGzDpnNlIG7DpnN0ZSBpa251ZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuZXhwZWN0ZWQgYmxvY2sgc2l6ZSIKK21zZ3N0ciAiRmlsc3lzdGVtIGhhciB1dmVudGV0IGJsb2tzdMO4cnJlbHNlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDYKK21zZ2lkICJFWFQyIGRpcmVjdG9yeSBjb3JydXB0ZWQiCittc2dzdHIgIkVYVDItbWFwcGUgw7hkZWxhZ3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NworbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCIKK21zZ3N0ciAiRm9yc8O4ZyBww6UgYXQgbMOmc2UgYmxvayBmcmEgZmlsc3lzdGVtIHJlc3VsdGVyZWRlIGkga29ydCBsw6ZzbmluZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ4Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBibG9jayB0byBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHdyaXRlIgorbXNnc3RyICJGb3Jzw7hnIHDDpSBhdCBza3JpdmUgYmxvayB0aWwgZmlsc3lzdGVtIHJlc3VsdGVyZWRlIGkga29ydCBza3Jpdm5pbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OQorbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gdGhlIGRpcmVjdG9yeSIKK21zZ3N0ciAiSW5nZW4gbGVkaWcgcGxhZHMgaSBtYXBwZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MAorbXNnaWQgIklub2RlIGJpdG1hcCBub3QgbG9hZGVkIgorbXNnc3RyICJJa251ZGUtYml0bWFwIGVyIGlra2UgaW5kbMOmc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MQorbXNnaWQgIkJsb2NrIGJpdG1hcCBub3QgbG9hZGVkIgorbXNnc3RyICJCbG9rLWJpdG1hcCBlciBpa2tlIGluZGzDpnN0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTIKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciIKK21zZ3N0ciAiVWd5bGRpZ3QgaWtudWRlLWFudGFsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTMKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiVWd5bGRpZ3QgYmxva2FudGFsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTQKK21zZ2lkICJJbnRlcm5hbCBlcnJvciBpbiBleHQyZnNfZXhwYW5kX2RpciIKK21zZ3N0ciAiSW50ZXJuIGZlamwgaSBleHQyZnNfZXhwYW5kX2RpciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU1Cittc2dpZCAiTm90IGVub3VnaCBzcGFjZSB0byBidWlsZCBwcm9wb3NlZCBmaWxlc3lzdGVtIgorbXNnc3RyICJJa2tlIG5vayBwbGFkcyB0aWwgYXQgYnlnZ2UgZm9yZXNsw6VldCBmaWxzeXN0ZW0iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NgorbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIlVneWxkaWd0IGJsb2thbnRhbCB2aWRlcmVzZW5kdCB0aWwgZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTcKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTkKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MAorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjEKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MgorbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGJsb2NrIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjMKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBpbm9kZSBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY0Cittc2dpZCAiSWxsZWdhbCBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKK21zZ2lkICJJbGxlZ2FsIGRvdWJseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjYKK21zZ2lkICJJbGxlZ2FsIHRyaXBseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjcKK21zZ2lkICJCbG9jayBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY4Cittc2dpZCAiSW5vZGUgYml0bWFwcyBhcmUgbm90IHRoZSBzYW1lIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OQorbXNnaWQgIklsbGVnYWwgb3IgbWFsZm9ybWVkIGRldmljZSBuYW1lIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MAorbXNnaWQgIkEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzEKK21zZ2lkICJUaGUgZXh0MiBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcyCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MworbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NAorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzUKK21zZ2lkICJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc2Cittc2dpZCAiVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB0aGlzIGNhc2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc3Cittc2dpZCAiVGhlIGlub2RlIGlzIGZyb20gYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OAorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocykiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc5Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgcmVhZC1vbmx5IGZlYXR1cmUocykiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgwCittc2dpZCAiSU8gQ2hhbm5lbCBmYWlsZWQgdG8gc2VlayBvbiByZWFkIG9yIHdyaXRlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MQorbXNnaWQgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgzCittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGJsb2NrIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODQKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgaW5vZGUgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NQorbXNnaWQgIkV4dDIgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICJFeHQyLWlrbnVkZSBlciBpa2tlIGVuIG1hcHBlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODYKK21zZ2lkICJUb28gbWFueSByZWZlcmVuY2VzIGluIHRhYmxlIgorbXNnc3RyICJGb3IgbWFuZ2UgcmVmZXJlbmNlciBpIHRhYmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODcKK21zZ2lkICJGaWxlIG5vdCBmb3VuZCBieSBleHQyX2xvb2t1cCIKK21zZ3N0ciAiRmlsIGlra2UgZnVuZGV0IGFmIGV4dDJfbG9vcHVwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODgKK21zZ2lkICJGaWxlIG9wZW4gcmVhZC1vbmx5IgorbXNnc3RyICJGaWwgw6VibiBlciBza3JpdmViZXNreXR0ZXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OQorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiRXh0Mi1tYXBwZWJsb2sgYmxldiBpa2tlIGZ1bmRldCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkwCittc2dpZCAiRXh0MiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkV4dDItbWFwcGUgZmluZGVzIGFsbGVyZWRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTEKK21zZ2lkICJVbmltcGxlbWVudGVkIGV4dDIgbGlicmFyeSBmdW5jdGlvbiIKK21zZ3N0ciAiRXh0Mi1iaWJsaW90ZWtzZnVua3Rpb24gZXIgaWtrZSBpbXBsZW1lbnRlcmV0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTIKK21zZ2lkICJVc2VyIGNhbmNlbCByZXF1ZXN0ZWQiCittc2dzdHIgIkRlciBibGV2IGFubW9kdCBvbSBicnVnZXJhZmJyeWRlbHNlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTMKK21zZ2lkICJFeHQyIGZpbGUgdG9vIGJpZyIKK21zZ3N0ciAiRXh0Mi1maWwgZXIgZm9yIHN0b3IiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NAorbXNnaWQgIlN1cHBsaWVkIGpvdXJuYWwgZGV2aWNlIG5vdCBhIGJsb2NrIGRldmljZSIKK21zZ3N0ciAiSW5kZWhvbGR0IGpvdXJuYWxlbmhlZCBlciBpa2tlIGVuIGJsb2tlbmhlZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk1Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiSm91cm5hbHN1cGVyYmxvayBibGV2IGlra2UgZnVuZGV0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTYKK21zZ2lkICJKb3VybmFsIG11c3QgYmUgYXQgbGVhc3QgMTAyNCBibG9ja3MiCittc2dzdHIgIkpvdXJuYWwgc2thbCB2w6ZyZSBww6UgbWluZHN0IDEwMjQgYmxva2tlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTcKK21zZ2lkICJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iCittc2dzdHIgIklra2UgdW5kZXJzdMO4dHRldCBqb3VybmFsdmVyc2lvbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJGZWpsIHVuZGVyIGluZGzDpnNuaW5nIGFmIGVrc3Rlcm4gam91cm5hbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk5Cittc2dpZCAiSm91cm5hbCBub3QgZm91bmQiCittc2dzdHIgIkpvdXJuYWwgYmxldiBpa2tlIGZ1bmRldCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMAorbXNnaWQgIkRpcmVjdG9yeSBoYXNoIHVuc3VwcG9ydGVkIgorbXNnc3RyICJNYXBwZWhhc2ggZXIgaWtrZSB1bmRlcnN0w7h0dGV0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAxCittc2dpZCAiSWxsZWdhbCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJJbGxlZ2FsIHVkdmlkZXQgYXR0cmlidXRibG9rYW50YWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDIKK21zZ2lkICJDYW5ub3QgY3JlYXRlIGZpbGVzeXN0ZW0gd2l0aCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGlub2RlcyIKK21zZ3N0ciAiS2FuIGlra2Ugb3ByZXR0ZSBmaWxzeXN0ZW0gbWVkIGRldCBhbm1vZHRlIGFudGFsIGlrbnVkZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDMKK21zZ2lkICJFMmltYWdlIHNuYXBzaG90IG5vdCBpbiB1c2UiCittc2dzdHIgIkUyaW1hZ2Utw7hqZWJsaWtzYmlsbGVkZSBlciBpa2tlIGkgYnJ1ZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNAorbXNnaWQgIlRvbyBtYW55IHJlc2VydmVkIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzIgorbXNnc3RyICJGb3IgbWFuZ2UgcmVzZXJ2ZXJlZGUgZ3J1cHBlYmVza3JpdmVyYmxva2tlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA1Cittc2dpZCAiUmVzaXplIGlub2RlIGlzIGNvcnJ1cHQiCittc2dzdHIgIsOGbmRyaW5nIGFmIHN0w7hycmVsc2UgZm9yIGlrbnVkZSBlciDDuGRlbGFndCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNgorbXNnaWQgIlRyaWVkIHRvIHNldCBibG9jayBibWFwIHdpdGggbWlzc2luZyBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiUHLDuHZlZGUgYXQgc8OmdHRlIGJsb2stYm1hcCBtZWQgbWFuZ2xlbmRlIGluZGlyZWt0ZSBibG9rIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA3Cittc2dpZCAiVERCOiBTdWNjZXNzIgorbXNnc3RyICJUREI6IFN1Y2NlcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOAorbXNnaWQgIlREQjogQ29ycnVwdCBkYXRhYmFzZSIKK21zZ3N0ciAiVERCOiDDmGRlbGFndCBkYXRhYmFzZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOQorbXNnaWQgIlREQjogSU8gRXJyb3IiCittc2dzdHIgIlREQjogSU8tZmVqbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMAorbXNnaWQgIlREQjogTG9ja2luZyBlcnJvciIKK21zZ3N0ciAiVERCOiBMw6VzZWZlamwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTEKK21zZ2lkICJUREI6IE91dCBvZiBtZW1vcnkiCittc2dzdHIgIlREQjogSWtrZSBub2sgaHVrb21tZWxzZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMgorbXNnaWQgIlREQjogUmVjb3JkIGV4aXN0cyIKK21zZ3N0ciAiVERCOiBQb3N0IGZpbmRlcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMworbXNnaWQgIlREQjogTG9jayBleGlzdHMgb24gb3RoZXIga2V5cyIKK21zZ3N0ciAiVERCOiBMw6VzIGZpbmRlcyBww6UgYW5kcmUgbsO4Z2xlciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNAorbXNnaWQgIlREQjogSW52YWxpZCBwYXJhbWV0ZXIiCittc2dzdHIgIlREQjogVWd5bGRpZyBwYXJhbWV0ZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTUKK21zZ2lkICJUREI6IFJlY29yZCBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiVERCOiBQb3N0IGZpbmRlcyBpa2tlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE2Cittc2dpZCAiVERCOiBXcml0ZSBub3QgcGVybWl0dGVkIgorbXNnc3RyICJUREI6IFNrcml2bmluZyBpa2tlIHRpbGxhZHQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTcKK21zZ2lkICJFeHQyZnMgZGlyZWN0b3J5IGJsb2NrIGxpc3QgaXMgZW1wdHkiCittc2dzdHIgIkV4dDJmcy1tYXBwZWJsb2tsaXN0ZSBlciB0b20iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTgKK21zZ2lkICJBdHRlbXB0IHRvIG1vZGlmeSBhIGJsb2NrIG1hcHBpbmcgdmlhIGEgcmVhZC1vbmx5IGJsb2NrIGl0ZXJhdG9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IHNhdmVkIHBhdGgiCittc2dzdHIgIkZvcmtlcnQgbWFnaS1hbnRhbCBmb3IgZXh0NC11ZHN0csOma25pbmdlbnMgZ2VtdGUgc3RpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgZ2VuZXJpYyBiaXRtYXAiCittc2dzdHIgIkZvcmtlcnQgbWFnaS1hbnRhbCBmb3IgNjQtYml0IGdlbmVyaXNrIGJpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgaW5vZGUgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzEzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE0IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE1IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE2IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE3IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE4IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzAKK21zZ2lkICJDb3JydXB0IGV4dGVudCBoZWFkZXIiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMQorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzIKK21zZ2lkICJDb3JydXB0IGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMzCittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiBleHRlbnQgbWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzQKK21zZ2lkICJJbm9kZSBkb2VzIG5vdCB1c2UgZXh0ZW50cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM1Cittc2dpZCAiTm8gJ25leHQnIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM2Cittc2dpZCAiTm8gJ3ByZXZpb3VzJyBleHRlbnQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNworbXNnaWQgIk5vICd1cCcgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzgKK21zZ2lkICJObyAnZG93bicgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzkKK21zZ2lkICJObyBjdXJyZW50IG5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MAorbXNnaWQgIkV4dDJmcyBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQxCittc2dpZCAiTm8gcm9vbSB0byBpbnNlcnQgZXh0ZW50IGluIG5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MgorbXNnaWQgIlNwbGl0dGluZyB3b3VsZCByZXN1bHQgaW4gZW1wdHkgbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQzCittc2dpZCAiRXh0ZW50IG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ2Cittc2dpZCAiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIKK21zZ3N0ciAiSS9PLWthbmFsIHVuZGVyc3TDuHR0ZXIgaWtrZSA2NC1iaXQgYmxva251bXJlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiIgorIkthbiBpa2tlIGtvbnRyb2xsZXJlIG9tIGZpbHN5dGVtIGVyIG1vbnRlcmV0IHDDpSBncnVuZCBhZiBlbiBtYW5nbGVuZGUgbXRhYi0iCisiZmlsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ4Cittc2dpZCAiRmlsZXN5c3RlbSB0b28gbGFyZ2UgdG8gdXNlIGxlZ2FjeSBiaXRtYXBzIgorbXNnc3RyICJGaWxzeXN0ZW0gZXIgZm9yIHN0b3J0IHRpbCBhdCBrdW5uZSBicnVnZSBmb3LDpmxkZWRlIGJpdG1hcCdlciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OQorbXNnaWQgIk1NUDogaW52YWxpZCBtYWdpYyBudW1iZXIiCittc2dzdHIgIk1NUDogdWd5bGRpZ3QgbWFnaS1hbnRhbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MAorbXNnaWQgIk1NUDogZGV2aWNlIGN1cnJlbnRseSBhY3RpdmUiCittc2dzdHIgIk1NUDogZW5oZWQgYWt0aXYgaSDDuGplYmxpa2tldCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MQorbXNnaWQgIk1NUDogZnNjayBiZWluZyBydW4iCittc2dzdHIgIk1NUDogZnNjayBrw7hyZXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTIKK21zZ2lkICJNTVA6IGJsb2NrIG51bWJlciBiZXlvbmQgZmlsZXN5c3RlbSByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICJNTVA6IHVuZGVyZ8OlciBlbiB1a2VuZHQgb3BlcmF0aW9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU0Cittc2dpZCAiTU1QOiBmaWxlc3lzdGVtIHN0aWxsIGluIHVzZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU1Cittc2dpZCAiTU1QOiBvcGVuIHdpdGggT19ESVJFQ1QgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTYKK21zZ2lkICJCbG9jayBncm91cCBkZXNjcmlwdG9yIHNpemUgaW5jb3JyZWN0IgorbXNnc3RyICJTdMO4cnJlbHNlIGZvciBibG9rZ3J1cHBlYmVza3JpdmVyIGVyIGlra2Uga29ycmVrdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NworbXNnaWQgIklub2RlIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGlub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTgKK21zZ2lkICJJbm9kZSBiaXRtYXAgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTkKK21zZ2lkICJFeHRlbnQgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZXh0ZW50IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjAKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgZG9lcyBub3QgaGF2ZSBzcGFjZSBmb3IgY2hlY2tzdW0iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MQorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MgorbXNnaWQgIkV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYzCittc2dpZCAiU3VwZXJibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBzdXBlcmJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjQKK21zZ2lkICJVbmtub3duIGNoZWNrc3VtIGFsZ29yaXRobSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY1Cittc2dpZCAiTU1QIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIE1NUCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY2Cittc2dpZCAiRXh0MiBmaWxlIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFeHQyLWZpbCBmaW5kZXMgYWxsZXJlZGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjExCittc2dpZCAiUHJvZmlsZSB2ZXJzaW9uIDAuMCIKK21zZ3N0ciAiUHJvZmlsIHZlcnNpb24gMC4wIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX25vZGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTMKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE0Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTUKK21zZ2lkICJBdHRlbXB0IHRvIGFkZCBhIHJlbGF0aW9uIHRvIG5vZGUgd2hpY2ggaXMgbm90IGEgc2VjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNgorbXNnaWQgIkEgcHJvZmlsZSBzZWN0aW9uIGhlYWRlciBoYXMgYSBub24temVybyB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNworbXNnaWQgIkJhZCBsaW5rZWQgbGlzdCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTgKK21zZ2lkICJCYWQgZ3JvdXAgbGV2ZWwgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE5Cittc2dpZCAiQmFkIHBhcmVudCBwb2ludGVyIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlIGl0ZXJhdG9yIgorbXNnc3RyICJVZ3lsZGlnIG1hZ2lzayB2w6ZyZGkgaSBwcm9maWxpdGVyYXRvciIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjEKK21zZ2lkICJDYW4ndCBzZXQgdmFsdWUgb24gc2VjdGlvbiBub2RlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gcHJvZmlsZSBsaWJyYXJ5IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIlByb2ZpbHMgc2VrdGlvbnN0ZWtzdGhvdmVkIGVyIGlra2UgcMOlIHRvcG5pdmVhdSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjUKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSBzZWN0aW9uIGhlYWRlciIKK21zZ3N0ciAiU3ludGFrc2ZlamwgaSBwcm9maWxzIHNla3Rpb25zdGVrc3Rob3ZlZCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjYKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSByZWxhdGlvbiIKK21zZ3N0ciAiU3ludGFrc2ZlamwgaSBwcm9maWxyZWxhdGlvbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjcKK21zZ2lkICJFeHRyYSBjbG9zaW5nIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIkVrc3RyYSBsdWtrZXBhcmVudGVzIGkgcHJvZmlsIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyOAorbXNnaWQgIk1pc3Npbmcgb3BlbiBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICJNYW5nbGVuZGUgw6ViZW4gcGFyZW50ZXMgaSBwcm9maWwiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI5Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfdCIKK21zZ3N0ciAiVWd5bGRpZyBtYWdpc2sgdsOmcmRpIGkgcHJvZmlsZV90IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3NlY3Rpb25fdCIKK21zZ3N0ciAiVWd5bGRpZyBtYWdpc2sgdsOmcmRpIGkgcHJvZmlsZV9zZWN0aW9uX3QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMxCittc2dpZCAiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkl0ZXJhdGlvbiB2aWEgYWxsZSB0b3BuaXZlYXVzZWt0aW9uZXIgZXIgaWtrZSB1bmRlcnN0w7h0dGV0IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMgorbXNnaWQgIkludmFsaWQgcHJvZmlsZV9zZWN0aW9uIG9iamVjdCIKK21zZ3N0ciAiVWd5bGRpZyBwcm9maWxlX3NlY3Rpb24tb2JqZWt0IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMworbXNnaWQgIk5vIG1vcmUgc2VjdGlvbnMiCittc2dzdHIgIklra2UgZmxlcmUgYWZzbml0IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNAorbXNnaWQgIkJhZCBuYW1lc2V0IHBhc3NlZCB0byBxdWVyeSByb3V0aW5lIgorbXNnc3RyICJVZ3lsZGlndCBuYXZuZXPDpnQgc2VuZHQgdGlsIGZvcmVzcMO4cmdzZWxzcnV0aW5lIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNQorbXNnaWQgIk5vIHByb2ZpbGUgZmlsZSBvcGVuIgorbXNnc3RyICJJbmdlbiBwcm9maWxmaWwgZXIgw6ViZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM2Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV90IgorbXNnc3RyICLDmGRlbGFndCBtYWdpc2sgdsOmcmRpIGkgcHJvZmlsZV9maWxlX3QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM3Cittc2dpZCAiQ291bGRuJ3Qgb3BlbiBwcm9maWxlIGZpbGUiCittc2dzdHIgIkt1bm5lIGlra2Ugw6VibmUgcHJvZmlsZmlsIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOAorbXNnaWQgIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIlNla3Rpb24gZmluZGVzIGFsbGVyZWRlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOQorbXNnaWQgIkludmFsaWQgYm9vbGVhbiB2YWx1ZSIKK21zZ3N0ciAiVWd5bGRpZyBib29sZXNrIHbDpnJkaSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDAKK21zZ2lkICJJbnZhbGlkIGludGVnZXIgdmFsdWUiCittc2dzdHIgIlVneWxkaWd0IGhlbHRhbCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDEKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX2RhdGFfdCIKK21zZ3N0ciAiw5hkZWxhZ3QgbWFnaXNrIHbDpnJkaSBpIHByb2ZpbGVfZmlsZV9kYXRhX3QiCmRpZmYgLS1naXQgYS9wby9kZS5nbW8gYi9wby9kZS5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY4YzAzMwotLS0gL2Rldi9udWxsCisrKyBiL3BvL2RlLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9kZS5wbyBiL3BvL2RlLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3M2Q2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9wby9kZS5wbwpAQCAtMCwwICsxLDc0MDAgQEAKKyMgR2VybWFuIHRyYW5zbGF0aW9uIG9mIGUyZnNwcm9ncworIyBDb3B5cmlnaHQgKEMpIDE5OTYgVGhlb2RvcmUgVHNvIChtc2dpZHMpCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4KKyMKKyMgT2xhZiBLbGVta2UgPG9sa2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwyMDAyLgorIyBNYXJjIExhbmdlciA8bWFyY0BtYXJjbGFuZ2VyLmRlPiwyMDAzLgorIyBQaGlsaXBwIFRob21hcyA8cHRoQHN1c2UuZGU+LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE0CisjCisjLiBUaGUgc3RyaW5ncyBpbiBlMmZzY2sncyBwcm9ibGVtLmMgY2FuIGJlIHZlcnkgaGFyZCB0byB0cmFuc2xhdGUsCisjLiBzaW5jZSB0aGUgc3RyaW5ncyBhcmUgZXhwYW5kZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgRmlyc3Qgb2YgYWxsLAorIy4gdGhlcmUgaXMgYW4gQC1leHBhbnNpb24sIHdoZXJlIHN0cmluZ3MgbGlrZSAiQGkiIGFyZSBleHBhbmRlZCB0bworIy4gImlub2RlIiwgYW5kIHNvIG9uLiAgSW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRyYW5zbGF0b3JzLCB0aGUKKyMuIGUyZnNwcm9ncyBwbyB0ZW1wbGF0ZSBmaWxlIGhhcyBiZWVuIGVuaGFuY2VkIHdpdGggY29tbWVudHMgdGhhdCBzaG93CisjLiB0aGUgQC1leHBhbnNpb24sIGZvciB0aGUgc3RyaW5ncyBpbiB0aGUgcHJvYmxlbS5jIGZpbGUuCisjLgorIy4gVHJhbnNsYXRvcnMgYXJlIGZyZWUgdG8gdXNlIHRoZSBALWV4cGFuc2lvbiBmYWNpbGl0eSBpZiB0aGV5IHNvCisjLiBjaG9vc2UsIGJ5IHByb3ZpZGluZyB0cmFuc2xhdGlvbnMgZm9yIHN0cmluZ3MgaW4gZTJmc2NrL21lc3NhZ2UuYy4KKyMuIFRoZXNlIHRyYW5zbGF0aW9uIGNhbiBjb21wbGV0ZWx5IHJlcGxhY2UgYW4gZXhwYW5zaW9uOyBmb3IgZXhhbXBsZSwKKyMuIGlmICJiYmxvY2siICh3aGljaCBpbmRpY2F0ZWQgdGhhdCAiQGIiIHdvdWxkIGJlIGV4cGFuZGVkIHRvICJibG9jayIpCisjLiBpcyB0cmFuc2xhdGVkIGFzICJkZGF0ZW52ZXJsdXN0IiwgdGhlbiAiQGQiIHdpbGwgYmUgZXhwYW5kZWQgdG8KKyMuICJkYXRlbnZlcmx1c3QiLiAgQWx0ZXJuYXRpdmVseSwgdHJhbnNsYXRvcnMgY2FuIHNpbXBseSBub3QgdXNlIHRoZQorIy4gQC1leHBhbnNpb24gZmFjaWxpdHkgYXQgYWxsLgorIy4KKyMuIFRoZSBzZWNvbmQgZXhwYW5zaW9uIHdoaWNoIGlzIGRvbmUgZm9yIGUyZnNjaydzIHByb2JsZW0uYyBtZXNzYWdlcyBpcworIy4gYSBkeW5hbWljICUtZXhwYW5zaW9uLCB3aGljaCBleHBhbmRzICVpIGFzIGFuIGlub2RlIG51bWJlciwgYW5kIHNvCisjLiBvbi4gIEEgdGFibGUgb2YgdGhlc2UgZXhwYW5zaW9ucyBjYW4gYmUgZm91bmQgYmVsb3cuICBOb3RlIHRoYXQKKyMuICUtZXhwcmVzc2lvbnMgdGhhdCBiZWdpbiB3aXRoICIlRCIgYW5kICIlSSIgYXJlIHR3by1jaGFyYWN0ZXIKKyMuIGV4cGFuc2lvbnM7IHNvIGZvciBleGFtcGxlLCAiJUl1IiBleHBhbmRzIHRvIHRoZSBpbm9kZSdzIHVzZXIgaWQKKyMuIG93bmVyc2hpcCBmaWVsZCAoaW5vZGUtPmlfdWlkKS4gIEFsc28gdGhlICIlQiIgZXhwYW5zaW9uIGlzIHNwZWNpYWw6CisjLiBpdCBjYW4gZXhwYW5kIHRvIGVpdGhlciB0aGUgc3RyaW5nICJpbmRpcmVjdCBibG9jayIgKHBvc3NpYmx5IHByZWNlZGVkCisjLiBieSB0aGUgd29yZCAiZG91YmxlIiBvciAidHJpcGxlIiksIG9yIHRoZSBzdHJpbmcgImJsb2NrICMiIGltbWVkaWF0ZWx5CisjLiBmb2xsb3dlZCBieSBhbiBpbnRlZ2VyIGluZGljYXRpbmcgYSBibG9jayBzZXF1ZW5jZSBudW1iZXIuCisjLiAgCisjLiAJJWIJPGJsaz4JCQlibG9jayBudW1iZXIKKyMuIAklQgkiaW5kaXJlY3QgYmxvY2siIHwgImJsb2NrICMiPGJsa2NvdW50PglzdHJpbmcgfCBzdHJpbmcraW50ZWdlcgorIy4gCSVjCTxibGsyPgkJCWJsb2NrIG51bWJlcgorIy4gCSVEaQk8ZGlyZW50PiAtPiBpbm8JCWlub2RlIG51bWJlcgorIy4gCSVEbgk8ZGlyZW50PiAtPiBuYW1lCXN0cmluZworIy4gCSVEcgk8ZGlyZW50PiAtPiByZWNfbGVuCisjLiAJJURsCTxkaXJlbnQ+IC0+IG5hbWVfbGVuCisjLiAJJUR0CTxkaXJlbnQ+IC0+IGZpbGV0eXBlCisjLiAJJWQJPGRpcj4gCQkJaW5vZGUgbnVtYmVyCisjLiAJJWcJPGdyb3VwPgkJCWludGVnZXIKKyMuIAklaQk8aW5vPgkJCWlub2RlIG51bWJlcgorIy4gCSVJcwk8aW5vZGU+IC0+IGlfc2l6ZQorIy4gCSVJUwk8aW5vZGU+IC0+IGlfZXh0cmFfaXNpemUKKyMuIAklSWIJPGlub2RlPiAtPiBpX2Jsb2NrcworIy4gCSVJbAk8aW5vZGU+IC0+IGlfbGlua3NfY291bnQKKyMuIAklSW0JPGlub2RlPiAtPiBpX21vZGUKKyMuIAklSU0JPGlub2RlPiAtPiBpX210aW1lCisjLiAJJUlGCTxpbm9kZT4gLT4gaV9mYWRkcgorIy4gCSVJZgk8aW5vZGU+IC0+IGlfZmlsZV9hY2wKKyMuIAklSWQJPGlub2RlPiAtPiBpX2Rpcl9hY2wKKyMuIAklSXUJPGlub2RlPiAtPiBpX3VpZAorIy4gCSVJZwk8aW5vZGU+IC0+IGlfZ2lkCisjLiAJJUl0CTxzdHI+CQkJZmlsZSB0eXBlCisjLiAJJWoJPGlubzI+CQkJaW5vZGUgbnVtYmVyCisjLiAJJW0JPGNvbV9lcnIgZXJyb3IgbWVzc2FnZT4KKyMuIAklTgk8bnVtPgorIy4gCSVwCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPgorIy4gCSVQCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIDxkaXJlbnQ+LT5pbm8gd2l0aCA8aW5vMj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuICAoSWYgZGlyZW50IGlzIE5VTEwKKyMuIAkJCQl0aGVuIHJldHVybiB0aGUgcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8yPikKKyMuIAklcQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGRpcj4KKyMuIAklUQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4gd2l0aCA8ZGlyPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4KKyMuIAklcwk8c3RyPgkJCW1pc2NlbGxhbmVvdXMgc3RyaW5nCisjLiAJJVMJCWJhY2t1cCBzdXBlcmJsb2NrCisjLiAJJVgJPG51bT4JaGV4YWRlY2ltYWwgZm9ybWF0CisjLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZTJmc3Byb2dzLTEuNDIuMTItcHJlMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiB0eXRzb0BhbHVtLm1pdC5lZHVcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wNS0xNyAyMToyNi0wNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNC0wOS0yNiAxMTo1MyswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBQaGlsaXBwIFRob21hcyA8cHRoQHN1c2UuZGU+XG4iCisiTGFuZ3VhZ2UtVGVhbTogR2VybWFuIDx0cmFuc2xhdGlvbi10ZWFtLWRlQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogZGVcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjIzIG1pc2MvbWtlMmZzLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9jayAldSBvdXQgb2YgcmFuZ2U7IGlnbm9yZWQuXG4iCittc2dzdHIgIuKAnkJhZCBibG9ja+KAnCAldSBhdcOfZXJoYWxiIGRlcyBnw7xsdGlnZW4gQmVyZWljaHM7IGlnbm9yaWVydC5cbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjQ2Cittc2dpZCAid2hpbGUgc2FuaXR5IGNoZWNraW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICJ3w6RocmVuZCBkZXIgbG9naXNjaGVuIFByw7xmdW5nIGRlcyDigJ5CYWQgQmxvY2vigJwtSW5vZGVzIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NTgKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICJ3w6RocmVuZCBkZXMgTGVzZW5zIGRlcyDigJ5CYWQgQmxvY2vigJwtSW5vZGVzIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NzIgZTJmc2NrL3NjYW50ZXN0LmM6MTA3IGUyZnNjay91bml4LmM6MTM0NQorIzogZTJmc2NrL3VuaXguYzoxNDM0IG1pc2MvYmFkYmxvY2tzLmM6MTI0MiBtaXNjL2JhZGJsb2Nrcy5jOjEyNTAKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI2NCBtaXNjL2JhZGJsb2Nrcy5jOjEyNzYgbWlzYy9kdW1wZTJmcy5jOjYwNAorIzogbWlzYy9lMmltYWdlLmM6MTM5NiBtaXNjL2UyaW1hZ2UuYzoxNTgwIG1pc2MvZTJpbWFnZS5jOjE1OTkKKyM6IG1pc2MvbWtlMmZzLmM6MjI3IG1pc2MvdHVuZTJmcy5jOjE5NTUgbWlzYy90dW5lMmZzLmM6MjA0NCByZXNpemUvbWFpbi5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIKK21zZ3N0ciAiYmVpbSBWZXJzdWNoLCAlcyB6dSDDtmZmbmVuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHBvcGVuICclcyciCittc2dzdHIgImJlaW0gVmVyc3VjaCwg4oCeJXPigJwgbWl0dGVscyDigJ5wb3BlbuKAnCB6dSDDtmZmbmVuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6OTQgbWlzYy9ta2UyZnMuYzoyMzQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGluIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIGZpbGUiCittc2dzdHIgImJlaW0gTGVzZW4gZGVyIOKAnkJhZCBCbG9ja+KAnC1MaXN0ZSBhdXMgZGVyIERhdGVpIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTA1Cittc2dpZCAid2hpbGUgdXBkYXRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICJiZWltIFVwZGF0ZW4gZGVzIOKAnkJhZCBCbG9ja+KAnC1Jbm9kZXMiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogaWxsZWdhbCBibG9jayAldSBmb3VuZCBpbiBiYWQgYmxvY2sgaW5vZGUuICBDbGVhcmVkLlxuIgorbXNnc3RyICIiCisiV2FybnVuZzogTmljaHQgenVsw6Rzc2lnZXIgQmxvY2sgJXUgaW0g4oCeQmFkIEJsb2Nrc+KAnC1Jbm9kZSBnZWZ1bmRlbiEgIgorIkJlcmVpbmlndC5cbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiTGVzZWZlaGxlciAtIEJsb2NrICVsdSAoJXMpIHfDpGhyZW5kICVzLiAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkxlc2VmZWhsZXIgLSBCbG9jayAlbHUgKCVzKS4gIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MSBlMmZzY2svZWhhbmRsZXIuYzoxMTAKK21zZ2lkICJJZ25vcmUgZXJyb3IiCittc2dzdHIgIkZlaGxlciBpZ25vcmllcmVuIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MgorbXNnaWQgIkZvcmNlIHJld3JpdGUiCittc2dzdHIgIlLDvGNrc2NocmVpYmVuIGVyendpbmdlbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIlNjaHJlaWJmZWhsZXIgLSBCbG9jayAlbHUgKCVzKSB3w6RocmVuZCAlcy4gIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiU2NocmVpYmZlaGxlciAtIEJsb2NrICVsdSAoJXMpLiAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJsZWVyZSBWZXJ6ZWljaG5pc2Jsw7Zja2UiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjYyCittc2dpZCAiZW1wdHkgZGlyIG1hcCIKK21zZ3N0ciAibGVlcmUgVmVyemVpY2huaXNsaXN0ZSIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZGlyZWN0b3J5IGJsb2NrICV1ICgjJWQpIGluIGlub2RlICV1XG4iCittc2dzdHIgImxlZXJlciBWZXJ6ZWljaG5pc2Jsb2NrICV1ICgjJWQpIGltIElub2RlICV1XG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgZmlsZW5hbWUgbmJsb2NrcyBibG9ja3NpemVcbiIKK21zZ3N0ciAiJXM6ICVzIERhdGVpbmFtZSBuYmxvY2tzIEJsb2NrZ3LDtsOfZVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgb2YgYmxvY2tzIVxuIgorbXNnc3RyICJCbG9ja2FuemFobCBuaWNodCB6dWzDpHNzaWchXG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIgKHNpemU9JWQpXG4iCittc2dzdHIgIkVzIGtvbm50ZSBrZWluIEJsb2NrcHVmZmVyIChHcsO2w59lPSVkKSByZXNlcnZpZXJ0IHdlcmRlblxuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIGRpc2tcbiIKK21zZ3N0ciAiQXVmcnVmOiAlcyBMYXVmd2Vya1xuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQkxLRkxTQlVGIGlvY3RsIG5vdCBzdXBwb3J0ZWQhICBDYW4ndCBmbHVzaCBidWZmZXJzLlxuIgorbXNnc3RyICJCTEtGTFNCVUYgaW9jdGwgbmljaHQgdW50ZXJzdMO8dHp0ISBQdWZmZXIga2FubiBuaWNodCBnZWxlZXJ0IHdlcmRlbi5cbiIKKworIzogZTJmc2NrL2lzY2FuLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIGRldmljZVxuIgorbXNnc3RyICJBdWZydWY6ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIEdlcsOkdFxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo4MSBlMmZzY2svdW5peC5jOjk3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIGZvciBmbHVzaGluZyIKK21zZ3N0ciAiYmVpbSDDlmZmbmVuIHZvbiAlcyBmw7xyIGRpZSBQdWZmZXItTGVlcnVuZyIKKworIzogZTJmc2NrL2lzY2FuLmM6ODYgZTJmc2NrL3VuaXguYzo5NzggcmVzaXplL21haW4uYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGZsdXNoICVzIgorbXNnc3RyICJ3w6RocmVuZCBkZXMgUsO8Y2tzY2hyZWliZXZlcnN1Y2hlcyBhdWYgJXMiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJiZWltIFZlcnN1Y2gsICVzIHp1IMO2ZmZuZW4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTI5MAorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAiYmVpbSBTdGFydCBkZXMgSW5vZGUtU2NhbnMiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEyNyBtaXNjL2UyaW1hZ2UuYzoxMzA5Cittc2dpZCAid2hpbGUgZ2V0dGluZyBuZXh0IGlub2RlIgorbXNnc3RyICJiZWltIExhZGVuIGRlcyBuw6RjaHN0ZW4gSW5vZGVzIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHNjYW5uZWQuXG4iCittc2dzdHIgIiV1IElub2RlcyB1bnRlcnN1Y2h0LlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjUyNAorbXNnaWQgInJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIkpvdXJuYWwtU3VwZXJibG9jayB3aXJkIGdlbGVzZW5cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vIHZhbGlkIGpvdXJuYWwgc3VwZXJibG9jayBmb3VuZFxuIgorbXNnc3RyICIlczoga2VpbmVuIGfDvGx0aWdlbiBKb3VybmFsLVN1cGVyYmxvY2sgZ2VmdW5kZW5cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGpvdXJuYWwgdG9vIHNob3J0XG4iCittc2dzdHIgIiVzOiBEYXMgSm91cm5hbCBpc3QgenUga3VyelxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcmVjb3ZlcmluZyBqb3VybmFsXG4iCittc2dzdHIgIiVzOiBKb3VybmFsIHdpcmQgd2llZGVyaGVyZ2VzdGVsbHRcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdvbid0IGRvIGpvdXJuYWwgcmVjb3Zlcnkgd2hpbGUgcmVhZC1vbmx5XG4iCittc2dzdHIgIiVzOiBEYXMgSm91cm5hbCBpc3QgbnVyIGxlc2JhciAtIEtlaW5lIFdpZWRlcmhlcnN0ZWxsdW5nXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICJiZWltIFZlcnN1Y2gsICVzIGVybmV1dCB6dSDDtmZmbmVuIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImFlcndlaXRlcnRlIEF0dHJpYnV0ZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTQKK21zZ2lkICJBZXJyb3IgYWxsb2NhdGluZyIKK21zZ3N0ciAiQUZlaGxlciBiZWltIFJlc2VydmllcmVuIHZvbiBQbGF0eiBmw7xyIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNQorbXNnaWQgImJibG9jayIKK21zZ3N0ciAiYkJsb2NrIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNgorbXNnaWQgIkJiaXRtYXAiCittc2dzdHIgIkJCaXRtYXAiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE3Cittc2dpZCAiY2NvbXByZXNzIgorbXNnc3RyICJja29tcHJpbWllcmVuIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICJDS29uZmxpa3RlIG1pdCBlaW5lbSBhbmRlcmVuIERhdGVpc3lzdGVtYmxvY2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE5Cittc2dpZCAiZGRpcmVjdG9yeSIKK21zZ3N0ciAiZFZlcnplaWNobmlzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMAorbXNnaWQgIkRkZWxldGVkIgorbXNnc3RyICJEZ2Vsw7ZzY2h0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMQorbXNnaWQgImVlbnRyeSIKK21zZ3N0ciAiZUVpbnRyYWciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIyCittc2dpZCAiRUBlICclRG4nIGluICVwICglaSkiCittc2dzdHIgIkVAZSDigJ4lRG7igJwgaW4gJXAgKCVpKSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjMKK21zZ2lkICJmZmlsZXN5c3RlbSIKK21zZ3N0ciAiZkRhdGVpc3lzdGVtIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNAorbXNnaWQgIkZmb3IgQGkgJWkgKCVRKSBpcyIKK21zZ3N0ciAiRmbDvHIgQGkgJWkgKCVRKSBpc3QiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI1Cittc2dpZCAiZ2dyb3VwIgorbXNnc3RyICJnR3J1cHBlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNgorbXNnaWQgImhIVFJFRSBAZCBAaSIKK21zZ3N0ciAiaEhUUkVFIEBkaW5vZGUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI3Cittc2dpZCAiaWlub2RlIgorbXNnc3RyICJpSW5vZGUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI4Cittc2dpZCAiSWlsbGVnYWwiCittc2dzdHIgIklpbGxlZ2FsKGVyKSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjkKK21zZ2lkICJqam91cm5hbCIKK21zZ3N0ciAiakpvdXJuYWwiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMwCittc2dpZCAibGxvc3QrZm91bmQiCittc2dzdHIgImxsb3N0K2ZvdW5kIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMQorbXNnaWQgIkxpcyBhIGxpbmsiCittc2dzdHIgIkxpc3QgZWluZSBWZXJrbsO8cGZ1bmciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMyCittc2dpZCAibW11bHRpcGx5LWNsYWltZWQiCittc2dzdHIgIm1tZWhyZmFjaCBiZWFuc3BydWNodCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzMKK21zZ2lkICJuaW52YWxpZCIKK21zZ3N0ciAibnVuZ8O8bHRpZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzQKK21zZ2lkICJvb3JwaGFuZWQiCittc2dzdHIgIm92ZXJ3YWlzdCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzUKK21zZ2lkICJwcHJvYmxlbSBpbiIKK21zZ3N0ciAicFByb2JsZW0gaW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM2Cittc2dpZCAicXF1b3RhIgorbXNnc3RyICJxUXVvdGEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM3Cittc2dpZCAicnJvb3QgQGkiCittc2dzdHIgInJSb290IEBpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOAorbXNnaWQgInNzaG91bGQgYmUiCittc2dzdHIgInNzb2xsdGUgc2VpbiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzkKK21zZ2lkICJTc3VwZXJAYiIKK21zZ3N0ciAiU1N1cGVyQGIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQwCittc2dpZCAidXVuYXR0YWNoZWQiCittc2dzdHIgInVuaWNodCB2ZXJidW5kZW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQxCittc2dpZCAidmRldmljZSIKK21zZ3N0ciAidkdlcsOkdCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDIKK21zZ2lkICJ4ZXh0ZW50IgorbXNnc3RyICJ4RXJ3ZWl0ZXJ1bmciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQzCittc2dpZCAienplcm8tbGVuZ3RoIgorbXNnc3RyICJ6bWl0IEzDpG5nZSBOdWxsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NAorbXNnaWQgIjxUaGUgTlVMTCBpbm9kZT4iCittc2dzdHIgIjxEZXIgTlVMTC1Jbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU1Cittc2dpZCAiPFRoZSBiYWQgYmxvY2tzIGlub2RlPiIKK21zZ3N0ciAiPERlciDigJ5CYWQgQmxvY2tz4oCcLUlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTcKK21zZ2lkICI8VGhlIHVzZXIgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8RGllIEJlbnV0emVycXVvdGEtSW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OAorbXNnaWQgIjxUaGUgZ3JvdXAgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8RGllIEdydXBwZW5xdW90YS1Jbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU5Cittc2dpZCAiPFRoZSBib290IGxvYWRlciBpbm9kZT4iCittc2dzdHIgIjxEZXIg4oCeYm9vdCBsb2FkZXLigJwtSW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MAorbXNnaWQgIjxUaGUgdW5kZWxldGUgZGlyZWN0b3J5IGlub2RlPiIKK21zZ3N0ciAiPERlciDigJ51bmRlbGV0ZSBkaXJlY3RvcnnigJwtSW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MQorbXNnaWQgIjxUaGUgZ3JvdXAgZGVzY3JpcHRvciBpbm9kZT4iCittc2dzdHIgIjxEZXMg4oCeZ3JvdXAgZGVzY3JpcHRvcuKAnC1Jbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYyCittc2dpZCAiPFRoZSBqb3VybmFsIGlub2RlPiIKK21zZ3N0ciAiPERlciBKb3VybmFsLUlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjMKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgOT4iCittc2dzdHIgIjxEZXIgcmVzZXJ2aWVydGUgSW5vZGUgOT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTY0Cittc2dpZCAiPFJlc2VydmVkIGlub2RlIDEwPiIKK21zZ3N0ciAiPERlciByZXNlcnZpZXJ0ZSBJbm9kZSAxMD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM0Cittc2dpZCAicmVndWxhciBmaWxlIgorbXNnc3RyICJyZWd1bMOkcmUgRGF0ZWkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM2Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICJWZXJ6ZWljaG5pcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzgKK21zZ2lkICJjaGFyYWN0ZXIgZGV2aWNlIgorbXNnc3RyICJ6ZWljaGVub3JpZW50aWVydGVzIEdlcsOkdCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDAKK21zZ2lkICJibG9jayBkZXZpY2UiCittc2dzdHIgImJsb2Nrb3JpZW50aWVydGVzIEdlcsOkdCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDIKK21zZ2lkICJuYW1lZCBwaXBlIgorbXNnc3RyICJuYW1lZCBwaXBlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NAorbXNnaWQgInN5bWJvbGljIGxpbmsiCittc2dzdHIgInN5bWJvbGlzY2hlIFZlcmtuw7xwZnVuZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDYgbWlzYy91dWlkZC5jOjE2MgorbXNnaWQgInNvY2tldCIKK21zZ3N0ciAiU29ja2V0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpbGUgdHlwZSB3aXRoIG1vZGUgMCVvIgorbXNnc3RyICJ1bmJla2FubnRlciBEYXRlaXR5cCBtaXQgTW9kdXMgMCVvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyMworbXNnaWQgImluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJpbmRpcmVrdGUgQmzDtmNrZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjUKK21zZ2lkICJkb3VibGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImRvcHBlbHQgaW5kaXJla3RlIEJsw7Zja2UiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI3Cittc2dpZCAidHJpcGxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJkcmVpZmFjaCBpbmRpcmVrdGUgQmzDtmNrZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjkKK21zZ2lkICJ0cmFuc2xhdG9yIGJsb2NrIgorbXNnc3RyICLDnGJlcnNldHplcmJsb2NrIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQzMQorbXNnaWQgImJsb2NrICMiCittc2dzdHIgIkJsb2NrIE5yLiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjIyMgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgaW5vZGUgbWFwIgorbXNnc3RyICJtZWhyZmFjaCBiZWFuc3BydWNodGUgSW5vZGUtTGlzdGUiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo2MjUgZTJmc2NrL3Bhc3MxYi5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBkdXBfYmxrIGZvciAlbGx1XG4iCittc2dzdHIgImludGVybmVyIEZlaGxlcjogZHVwX2JsayBmw7xyICVsbHUgd3VyZGUgbmljaHQgZ2VmdW5kZW5cbiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjg1MgorbXNnaWQgInJldHVybmVkIGZyb20gY2xvbmVfZmlsZV9ibG9jayIKK21zZ3N0ciAienVyw7xja2dlZ2ViZW4gdm9uIGNsb25lX2ZpbGVfYmxvY2siCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBibG9jayByZWNvcmQgZm9yICVsbHUiCittc2dzdHIgImludGVybmVyIEZlaGxlcjogRUEtQmxvY2tsaXN0ZSBmw7xyICVsbHUgd3VyZGUgbmljaHQgZ2VmdW5kZW4iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBpbm9kZSByZWNvcmQgZm9yICV1IgorbXNnc3RyICJJbnRlcm5lciBGZWhsZXI6IEVBLUlub2RlbGlzdGUgZsO8ciAldSB3dXJkZSBuaWNodCBnZWZ1bmRlbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6NDc1IGUyZnNjay9wYXNzMi5jOjc4MgorbXNnaWQgInJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICJWZXJ6ZWljaG5pc2Jsb2NrIHdpcmQgZ2VsZXNlbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjM0Cittc2dpZCAiaW4tdXNlIGlub2RlIG1hcCIKK21zZ3N0ciAi4oCeaW4tdXNlIGlub2Rl4oCcLUxpc3RlIgorCisjOiBlMmZzY2svcGFzczEuYzo2NDUKK21zZ2lkICJkaXJlY3RvcnkgaW5vZGUgbWFwIgorbXNnc3RyICLigJ5kaXJlY3RvcnkgaW5vZGXigJwtTGlzdGUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY1NQorbXNnaWQgInJlZ3VsYXIgZmlsZSBpbm9kZSBtYXAiCittc2dzdHIgIuKAnnJlZ3VsYXIgZmlsZSBpbm9kZeKAnC1MaXN0ZSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjY0IG1pc2MvZTJpbWFnZS5jOjEyNjUKK21zZ2lkICJpbi11c2UgYmxvY2sgbWFwIgorbXNnc3RyICLigJ5pbi11c2UgYmxvY2vigJwtTGlzdGUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjczMAorbXNnaWQgIm9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAiSW5vZGUtU2NhbiB3aXJkIGdlc3RhcnRldCIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzY0Cittc2dpZCAiZ2V0dGluZyBuZXh0IGlub2RlIGZyb20gc2NhbiIKK21zZ3N0ciAiYmVpbSBMZXNlbiBkZXMgbsOkY2hzdGVuIElub2RlcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI3OQorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAiRHVyY2hnYW5nIDEiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBpbmRpcmVjdCBibG9ja3Mgb2YgaW5vZGUgJXUiCittc2dzdHIgImluZGlyZWt0ZSBCbMO2Y2tlIHZvbiBJbm9kZSAldSB3ZXJkZW4gZ2VsZXNlbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM4NgorbXNnaWQgImJhZCBpbm9kZSBtYXAiCittc2dzdHIgImZlaGxlcmhhZnRlIElub2RlLUxpc3RlIgorCisjOiBlMmZzY2svcGFzczEuYzoxNDA5Cittc2dpZCAiaW5vZGUgaW4gYmFkIGJsb2NrIG1hcCIKK21zZ3N0ciAiSW5vZGUgaW4g4oCeQmFkIEJsb2Nrc+KAnC1MaXN0ZSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQyOQorbXNnaWQgImltYWdpYyBpbm9kZSBtYXAiCittc2dzdHIgImnigJ5tYWdpYyBpbm9kZeKAnC1MaXN0ZSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQ1NgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgYmxvY2sgbWFwIgorbXNnc3RyICJtZWhyZmFjaCByZWZlcmVuemllcnRlIEJsb2NrbGlzdGUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE1NjcKK21zZ2lkICJleHQgYXR0ciBibG9jayBtYXAiCittc2dzdHIgImV4dCBhdHRyIGJsb2NrIG1hcCIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlNmx1KCVjKTogZXhwZWN0aW5nICU2bHUgZ290IHBoeXMgJTZsdSAoYmxrY250ICVsbGQpXG4iCittc2dzdHIgIiU2bHUoJWMpOiBlcndhcnRldGUgJTZsdSBlcmhpZWx0IHBoeXMgJTZsdSAoQmxvY2thbnphaGwgJWxsZClcbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6Mjg5OAorbXNnaWQgImJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiQmxvY2stQml0bWFwIgorCisjOiBlMmZzY2svcGFzczEuYzoyOTA0Cittc2dpZCAiaW5vZGUgYml0bWFwIgorbXNnc3RyICJJbm9kZS1CaXRtYXAiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI5MTAKK21zZ2lkICJpbm9kZSB0YWJsZSIKK21zZ3N0ciAiSW5vZGUtVGFiZWxsZSIKKworIzogZTJmc2NrL3Bhc3MyLmM6MjgzCittc2dpZCAiUGFzcyAyIgorbXNnc3RyICJEdXJjaGdhbmcgMiIKKworIzogZTJmc2NrL3Bhc3MyLmM6ODA2Cittc2dpZCAiQ2FuIG5vdCBjb250aW51ZS4iCittc2dzdHIgIkRhcyBQcm9ncmFtbSBrYW5uIG5pY2h0IGZvcnRmYWhyZW4uIgorCisjOiBlMmZzY2svcGFzczMuYzo3NworbXNnaWQgImlub2RlIGRvbmUgYml0bWFwIgorbXNnc3RyICLigJ5pbm9kZSBkb25l4oCcLUJpdG1hcCIKKworIzogZTJmc2NrL3Bhc3MzLmM6ODYKK21zZ2lkICJQZWFrIG1lbW9yeSIKK21zZ3N0ciAiUGVhay1NZW1vcnkiCisKKyM6IGUyZnNjay9wYXNzMy5jOjE0OAorbXNnaWQgIlBhc3MgMyIKK21zZ3N0ciAiRHVyY2hnYW5nIDMiCisKKyM6IGUyZnNjay9wYXNzMy5jOjM0MAorbXNnaWQgImlub2RlIGxvb3AgZGV0ZWN0aW9uIGJpdG1hcCIKK21zZ3N0ciAi4oCeaW5vZGUgbG9vcCBkZXRlY3Rpb27igJwtQml0bWFwIgorCisjOiBlMmZzY2svcGFzczQuYzoxOTYKK21zZ2lkICJQYXNzIDQiCittc2dzdHIgIkR1cmNoZ2FuZyA0IgorCisjOiBlMmZzY2svcGFzczUuYzo3NAorbXNnaWQgIlBhc3MgNSIKK21zZ3N0ciAiRHVyY2hnYW5nIDUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTEKK21zZ2lkICIobm8gcHJvbXB0KSIKK21zZ3N0ciAiKG5pY2h0IGludGVyYWt0aXYpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyCittc2dpZCAiRml4IgorbXNnc3RyICJSZXBhcmllcmVuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzCittc2dpZCAiQ2xlYXIiCittc2dzdHIgIkJlcmVpbmlnZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQKK21zZ2lkICJSZWxvY2F0ZSIKK21zZ3N0ciAiWnVyw7xja3NldHplbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NQorbXNnaWQgIkFsbG9jYXRlIgorbXNnc3RyICJGcmVpZ2ViZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYKK21zZ2lkICJFeHBhbmQiCittc2dzdHIgIkVyd2VpdGVybiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NworbXNnaWQgIkNvbm5lY3QgdG8gL2xvc3QrZm91bmQiCittc2dzdHIgIk5hY2ggL2xvc3QrZm91bmQgdmVyYmluZGVuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJFcnN0ZWxsZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkKK21zZ2lkICJTYWx2YWdlIgorbXNnc3RyICJSZXR0ZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjAKK21zZ2lkICJUcnVuY2F0ZSIKK21zZ3N0ciAiVmVya8O8cnplbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MQorbXNnaWQgIkNsZWFyIGlub2RlIgorbXNnc3RyICJJbm9kZSBiZXJlaW5pZ2VuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyCittc2dpZCAiQWJvcnQiCittc2dzdHIgIkFiYnJlY2hlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MworbXNnaWQgIlNwbGl0IgorbXNnc3RyICJBdWZ0ZWlsZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiRm9ydHNldHplbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NQorbXNnaWQgIkNsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIgorbXNnc3RyICJNZWhyZmFjaCByZWZlcmVuemllcnRlIEJsw7Zja2Ugd2VyZGVuIGdla2xvbnQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYKK21zZ2lkICJEZWxldGUgZmlsZSIKK21zZ3N0ciAiRGF0ZWkgbMO2c2NoZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiQXVzZ2FiZW4gdW50ZXJkcsO8Y2tlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OAorbXNnaWQgIlVubGluayIKK21zZ3N0ciAiVHJlbm5lbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OQorbXNnaWQgIkNsZWFyIEhUcmVlIGluZGV4IgorbXNnc3RyICJEZXIgSFRyZWUtSW5kZXggd2lyZCBiZXJlaW5pZ3QiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAKK21zZ2lkICJSZWNyZWF0ZSIKK21zZ3N0ciAiWnVyw7xja3NldHplbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OQorbXNnaWQgIihOT05FKSIKK21zZ3N0ciAiKE5JQ0hUUykiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAKK21zZ2lkICJGSVhFRCIKK21zZ3N0ciAiUkVQQVJJRVJUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxCittc2dpZCAiQ0xFQVJFRCIKK21zZ3N0ciAiQkVSRUlOSUdUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyCittc2dpZCAiUkVMT0NBVEVEIgorbXNnc3RyICJaVVLDnENLR0VTRVRaVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MworbXNnaWQgIkFMTE9DQVRFRCIKK21zZ3N0ciAiRlJFSUdFR0VCRU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQKK21zZ2lkICJFWFBBTkRFRCIKK21zZ3N0ciAiRVJXRUlURVJUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIldJRURFUiBWRVJCVU5ERU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYKK21zZ2lkICJDUkVBVEVEIgorbXNnc3RyICJBTkdFTEVHVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NworbXNnaWQgIlNBTFZBR0VEIgorbXNnc3RyICJHRVJFVFRFVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OAorbXNnaWQgIlRSVU5DQVRFRCIKK21zZ3N0ciAiQUJHRVNDSE5JVFRFTiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OQorbXNnaWQgIklOT0RFIENMRUFSRUQiCittc2dzdHIgIklOT0RFIEJFUkVJTklHVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MAorbXNnaWQgIkFCT1JURUQiCittc2dzdHIgIkFCR0VCUk9DSEVOIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxCittc2dpZCAiU1BMSVQiCittc2dzdHIgIkFCR0VTUEFMVEVOIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyCittc2dpZCAiQ09OVElOVUlORyIKK21zZ3N0ciAiRVMgV0lSRCBGT1JUR0VGQUhSRU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMKK21zZ2lkICJNVUxUSVBMWS1DTEFJTUVEIEJMT0NLUyBDTE9ORUQiCittc2dzdHIgIk1FSFJGQUNIIFJFRkVSRU5aSUVSVEUgQkzDlkNLRSBXVVJERU4gR0VLTE9OVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NAorbXNnaWQgIkZJTEUgREVMRVRFRCIKK21zZ3N0ciAiREFURUkgV1VSREUgR0VMw5ZTQ0hUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1Cittc2dpZCAiU1VQUFJFU1NFRCIKK21zZ3N0ciAiVU5URVJEUsOcQ0tUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2Cittc2dpZCAiVU5MSU5LRUQiCittc2dzdHIgIkdFVFJFTk5UIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3Cittc2dpZCAiSFRSRUUgSU5ERVggQ0xFQVJFRCIKK21zZ3N0ciAiSFRSRUUtSU5ERVggQkVSRUlOSUdUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4Cittc2dpZCAiV0lMTCBSRUNSRUFURSIKK21zZ3N0ciAiV0lSRCBXSUVERVIgQVVGR0VCQVVUIgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDcKK21zZ2lkICJAYiBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJCbG9jay1CaXRtYXAgZsO8ciBHcnVwcGUgJWcgaXN0IG5pY2h0IGluIGRlciBHcnVwcGUuIChCbG9jayAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExCittc2dpZCAiQGkgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiSW5vZGUtQml0bWFwIGbDvHIgR3J1cHBlICVnIGlzdCBuaWNodCBpbiBkZXIgR3J1cHBlLiAoQmxvY2sgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIHRhYmxlIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2Cittc2dpZCAiIgorIkBpIHRhYmxlIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCisiV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbiIKK21zZ3N0ciAiIgorIklub2RlLVRhYmVsbGUgZsO8ciBHcnVwcGUgJWcgaXN0IG5pY2h0IGluIGRlciBHcnVwcGUuIChCbG9jayAlYilcbiIKKyJXQVJOVU5HOiBHUk9TU0VSIERBVEVOVkVSTFVTVCBJU1QgTcOWR0xJQ0guXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgc3VwZXJibG9jayBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIHZhbGlkIGV4dDIvZXh0My9leHQ0XG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0uICBJZiB0aGUgZGV2aWNlIGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0Mi9leHQzL2V4dDRcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIHN1cGVyYmxvY2tcbgorIy4gQC1leHBhbmRlZDogaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgc3VwZXJibG9jazpcbgorIy4gQC1leHBhbmRlZDogICAgIGUyZnNjayAtYiA4MTkzIDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6ICBvclxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iIDMyNzY4IDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgQFMgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSB2YWxpZCBleHQyL2V4dDMvZXh0NFxuIgorIkBmLiAgSWYgdGhlIEB2IGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0Mi9leHQzL2V4dDRcbiIKKyJAZiAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIEBTXG4iCisiaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgQFM6XG4iCisiICAgIGUyZnNjayAtYiA4MTkzIDxAdj5cbiIKKyIgb3JcbiIKKyIgICAgZTJmc2NrIC1iIDMyNzY4IDxAdj5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkRlciBTdXBlcmJsb2NrIGlzdCB1bmxlc2JhciBiencuIGJlc2NocmVpYnQga2VpbiBnw7xsdGlnZXMgZXh0Mi9leHQzL2V4dDQtXG4iCisiRGF0ZWlzeXN0ZW0uIFdlbm4gZGFzIEdlcsOkdCBnw7xsdGlnIGlzdCB1bmQgZWluIGV4dDIvZXh0My9leHQ0LVxuIgorIkRhdGVpc3lzdGVtIChrZWluIHN3YXAgb2RlciB1ZnMgdXN3LikgZW50aMOkbHQsIGRhbm4gaXN0IGRlciBTdXBlcmJsb2NrXG4iCisiYmVzY2jDpGRpZ3QsIHVuZCBTaWUga8O2bm50ZW4gdmVyc3VjaGVuLCBlMmZzY2sgbWl0IGVpbmVtIGFuZGVyZW4gU3VwZXJibG9ja1xuIgorInp1IHN0YXJ0ZW46XG4iCisiICAgIGUyZnNjayAtYiA4MTkzIDxAdj5cbiIKKyIgb2RlclxuIgorIiAgICBlMmZzY2sgLWIgMzI3NjggPEB2PlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgZmlsZXN5c3RlbSBzaXplIChhY2NvcmRpbmcgdG8gdGhlIHN1cGVyYmxvY2spIGlzICViIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgZGV2aWNlIGlzICVjIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBFaXRoZXIgdGhlIHN1cGVyYmxvY2sgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMKK21zZ2lkICIiCisiVGhlIEBmIHNpemUgKGFjY29yZGluZyB0byB0aGUgQFMpIGlzICViIEBic1xuIgorIlRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBAdiBpcyAlYyBAYnNcbiIKKyJFaXRoZXIgdGhlIEBTIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKyJEaWUgR3LDtsOfZSBkZXMgRGF0ZWlzeXN0ZW1zIChsYXV0IFN1cGVyYmxvY2spIGlzdCAlYiBCbMO2Y2tlLlxuIgorIkRpZSBwaHlzaWthbGlzY2hlIEdyw7bDn2UgZGVzIEdlcsOkdGVzIGlzdCAlYyBCbMO2Y2tlLlxuIgorIkVudHdlZGVyIGlzdCBkZXIgU3VwZXJibG9jayBvZGVyIGRpZSBQYXJ0aW9uc3RhYmVsbGUgYmVzY2jDpGRpZ3QhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuCisjLiBALWV4cGFuZGVkOiBUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4KKyMuIEAtZXhwYW5kZWQ6IGZyb20gdGhlIGJsb2NrIHNpemUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwCittc2dpZCAiIgorIkBTIEBiX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbiIKKyJUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4iCisiZnJvbSB0aGUgQGIgc2l6ZS5cbiIKK21zZ3N0ciAiIgorIkBTLUBiX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbiIKKyJEaWVzZSBWZXJzaW9uIHZvbiBlMmZzY2sgdW50ZXJzdMO8dHp0IGtlaW5lIHZvbiBCbG9ja2dyw7bDn2VuIHZlcnNjaGllZGVuZSAiCisiRnJhZ21lbnRncsO2w59lbi5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja3NfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDcKK21zZ2lkICJAUyBAYnNfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiQGJzX3Blcl9ncm91cCBpbSBAUyA9ICViLCBzb2xsdGUgJWMgc2VpblxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGZpcnN0X2RhdGFfYmxvY2sgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MgorbXNnaWQgIkBTIGZpcnN0X2RhdGFfQGIgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICJmaXJzdF9kYXRhX0BiIGltIEBTID0gJWIsIHNvbGx0ZSAlYyBzZWluXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NworbXNnaWQgIiIKKyJAZiBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRhcyBEYXRlaXN5c3RlbSBoYXQga2VpbmUgVVVJRDsgZXMgd2lyZCBlaW5lIGdlbmVyaWVydC5cbiIKKyJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IGlmIHNldmVyYWwgaW5vZGUgb3IgYmxvY2sgYml0bWFwIGJsb2NrcyBvciBwYXJ0XG4iCisib2YgdGhlIGlub2RlIHRhYmxlIHJlcXVpcmUgcmVsb2NhdGlvbiwgeW91IG1heSB3aXNoIHRvIHRyeVxuIgorInJ1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiAlUycgb3B0aW9uIGZpcnN0LiAgVGhlIHByb2JsZW1cbiIKKyJtYXkgbGllIG9ubHkgd2l0aCB0aGUgcHJpbWFyeSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYW5kXG4iCisidGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suXG4iCisiXG4iCittc2dzdHIgIiIKKyJIaW53ZWlzOiBXZW5uIG1laHJlcmUgSW5vZGVzIG9kZXIgQml0bWFwLUJsw7Zja2VcbiIKKyJuZXUgZ2VvcmRuZXQgd2VyZGVuIG3DvHNzZW4sIG9kZXIgZWluIFRlaWwgZGVyIElub2RlLVRhYmVsbGVcbiIKKyJ2ZXJzY2hvYmVuIHdlcmRlbiBtdXNzLCBrw7ZubnRlIGVzIGhlbGZlbiwgZTJmc2NrIGVyc3QgZWlubWFsXG4iCisibWl0IGRlciBPcHRpb24g4oCeLWIgJVPigJwgenUgc3RhcnRlbi4gRGFzIFByb2JsZW0ga8O2bm50ZVxuIgorImltIHByaW3DpHJlbiBCbG9ja2dydXBwZW5iZXplaWNobmVyIGxpZWdlbiB1bmQgc2VpbmVcbiIKKyJTaWNoZXJ1bmdza29waWUgaW4gT3JkbnVuZyBzZWluLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3JydXB0aW9uIGZvdW5kIGluIHN1cGVyYmxvY2suICAoJXMgPSAlTikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcxCittc2dpZCAiQ29ycnVwdGlvbiBmb3VuZCBpbiBAUy4gICglcyA9ICVOKS5cbiIKK21zZ3N0ciAiQmVzY2jDpGRpZ3VuZyBnZWZ1bmRlbiBpbSBTdXBlcmJsb2NrLiAoJXMgPSAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIGRldmljZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgQHY6ICVtXG4iCittc2dzdHIgIkZlaGxlciBiZWkgZGVyIEZlc3RzdGVsbHVuZyBkZXIgR3LDtsOfZSBkZXMgcGh5c2lzY2hlbiBHZXLDpHQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGNvdW50IGluIHN1cGVyYmxvY2sgaXMgJWksIHNob3VsZCBiZSAlai5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxODEKK21zZ2lkICJAaSBjb3VudCBpbiBAUyBpcyAlaSwgQHMgJWouXG4iCittc2dzdHIgIkBpLUFuemFobCBpbiBAUyBpc3QgJWksIHNvbGx0ZSAlaiBzZWluLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4NQorbXNnaWQgIlRoZSBIdXJkIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZlYXR1cmUuXG4iCittc2dzdHIgIkh1cmQgdW50ZXJzdMO8dHp0IGtlaW5lIERhdGVpdHlwZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgJWkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoYXMgYW4gQG4gQGogKEBpICVpKS5cbiIKK21zZ3N0ciAiRGVyIFN1cGVyYmxvY2sgaGF0IGVpbiBkZWZla3RlcyBKb3VybmFsIChJbm9kZSAlaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIG11bHRpcGxlIGZpbGVzeXN0ZW0gdXNlcnMgKHVuc3VwcG9ydGVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTUKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgbXVsdGlwbGUgQGYgdXNlcnMgKHVuc3VwcG9ydGVkKS5cbiIKK21zZ3N0ciAiIgorIkV4dGVybmVzIEpvdXJuYWwgaGF0IG1laHJlcmUgRGF0ZWlzeXN0ZW0tQmVudXR6ZXIgKG5pY2h0IHVudGVyc3TDvHR6dCkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbid0IGZpbmQgZXh0ZXJuYWwgam91cm5hbFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwMAorbXNnaWQgIkNhbid0IGZpbmQgZXh0ZXJuYWwgQGpcbiIKK21zZ3N0ciAiRXh0ZXJuZXMgSm91cm5hbCBrYW5uIG5pY2h0IGdlZnVuZGVuIHdlcmRlblxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBiYWQgc3VwZXJibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwNQorbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBiYWQgQFNcbiIKK21zZ3N0ciAiRXh0ZXJuZXMgSm91cm5hbCBoYXQgZWluZW4gdW5nw7xsdGlnZW4gU3VwZXJibG9ja1xuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmaWxlc3lzdGVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjEwCittc2dpZCAiRXh0ZXJuYWwgQGogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIEBmXG4iCittc2dzdHIgIkV4dGVybmVzIEpvdXJuYWwgdW50ZXJzdMO8dHp0IGRpZXNlcyBEYXRlaXN5c3RlbSBuaWNodFxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGpvdXJuYWwgc3VwZXJibG9jayBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGpvdXJuYWwgCisjLiBALWV4cGFuZGVkOiBmb3JtYXQuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGFsc28gcG9zc2libGUgdGhlIGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxNQorbXNnaWQgIiIKKyJAZiBAaiBAUyBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbiIKKyJJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgQGogIgorImZvcm1hdC5cbiIKKyJJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICIiCisiRGVyIFN1cGVyYmxvY2sgZGVzIERhdGVpc3lzdGVtLUpvdXJuYWxzIGhhdCBkZW4gdW5iZWthbm50ZW4gVHlwICVOIChuaWNodCAiCisidW50ZXJzdMO8dHp0KS5cbiIKKyJFcyBpc3QgbcO2Z2xpY2gsIGRhc3MgSWhyIGUyZnNjayDDpGx0ZXIgaXN0IHVuZC9vZGVyIGRpZXNlcyBKb3VybmFsLUZvcm1hdCAiCisibmljaHQgdW50ZXJzdMO8dHp0LlxuIgorIkVzIGlzdCBlYmVuc28gbcO2Z2xpY2gsIGRhc3MgZGVyIEpvb3JuYWwtU3VwZXJibG9jayBkZWZla3QgaXN0LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjMKK21zZ2lkICJAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICJEZXIgSm91cm5hbC1TdXBlcmJsb2NrIGlzdCBkZWZla3QuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzX2pvdXJuYWwgZmxhZyBpcyBjbGVhciwgYnV0IGEgam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyOAorbXNnaWQgIkBTIGhhc19AaiBmbGFnIGlzIGNsZWFyLCBidXQgYSBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICIiCisiRGVyIEJpdHNjaGFsdGVyIGhhc19qb3VybmFsIGltIFN1cGVyYmxvY2sgaXN0IG5pY2h0IGdlc2V0enQsIGFiZXIgZWluXG4iCisiSm91cm5hbCAlcyBpc3Qgdm9yaGFuZGVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzMworbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gQGogaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiIgorIkltIFN1cGVyYmxvY2sgaXN0IGRlciBCaXRzY2hhbHRlciDigJ5uZWVkc19yZWNvdmVyeeKAnCBnZXNldHp0LCBhYmVyIGVpbiAiCisiSm91cm5hbFxuIgorImlzdCBuaWNodCB2b3JoYW5kZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IGpvdXJuYWwgaGFzIGRhdGEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjM4Cittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IEBqIGhhcyBkYXRhLlxuIgorbXNnc3RyICIiCisiRGVyIEJpdHNjaGFsdGVyIOKAnm5lZWRzX3JlY292ZXJ54oCcIGltIFN1cGVyYmxvY2sgaXN0IG5pY2h0IGdlc2V0enQsIGFiZXIgZGFzXG4iCisiSm91cm5hbCBlbnRow6RsdCBEYXRlbi5cbiIKKworIy4gQC1leHBhbmRlZDogQ2xlYXIgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDMKK21zZ2lkICJDbGVhciBAaiIKK21zZ3N0ciAiSm91cm5hbCBiZXJlaW5pZ2VuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIGZpbGVzeXN0ZW0uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQ4IGUyZnNjay9wcm9ibGVtLmM6NzA3Cittc2dpZCAiQGYgaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgQGYuICAiCittc2dzdHIgIiIKKyJEYXMgRGF0ZWlzeXN0ZW0gaGF0IEVpZ2Vuc2NoYWZ0cy1CaXRzY2hhbHRlciBnZXNldHp0LCBpc3QgYWJlciBlaW5cbiIKKyJSZXZpc2lvbi0wLURhdGVpc3lzdGVtLiAgICIKKworIy4gQC1leHBhbmRlZDogJXMgb3JwaGFuZWQgaW5vZGUgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTMKK21zZ2lkICIlcyBAbyBAaSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuIgorbXNnc3RyICIlcyB2ZXJ3YWlzdGVyIElub2RlICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTgKK21zZ2lkICJASSAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICJVbnp1bMOkc3NpZ2VzICVCICglYikgaW4gdmVyd2Fpc3RlbiBJbm9kZSAlaSBnZWZ1bmRlbi5cbiIKKworIy4gQC1leHBhbmRlZDogQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYzCittc2dpZCAiQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIkJlcmVpdHMgYmVyZWluaWd0ZXIgJUIgKCViKSBpbSB2ZXJ3YWlzdGVuIElub2RlICVpIGdlZnVuZGVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIG9ycGhhbmVkIGlub2RlICVpIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBvIEBpICVpIGluIEBTLlxuIgorbXNnc3RyICJVbnp1bMOkc3NpZ2VyIHZlcndhaXN0ZXIgSW5vZGUgJWkgaW0gU3VwZXJibG9jay5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBpbm9kZSAlaSBpbiBvcnBoYW5lZCBpbm9kZSBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJASSBAaSAlaSBpbiBAbyBAaSBsaXN0LlxuIgorbXNnc3RyICJVbnp1bMOkc3NpZ2VyIElub2RlICVpIGluIGRlciBMaXN0ZSBkZXIgdmVyd2Fpc3RlbiBJbm9kZXMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzgKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiIgorIkRlciBKb3VybmFsLVN1cGVyYmxvY2sgaGF0IGVpbmVuIHVuYmVrYW5udGVuIE51ci1MZXNlbi1CaXRzY2hhbHRlciBnZXNldHp0LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjgzCittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIiIKKyJJbSBKb3VybmFsLVN1cGVyYmxvY2sgaXN0IGVpbiB1bmJla2FubnRlciBCaXRzY2hhbHRlciBmw7xyIGVpbmVcbiIKKyJpbmtvbXBhdGlibGUgRWlnZW5zY2hhZnQgZ2VzZXR6dC5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjg4Cittc2dpZCAiQGogdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuIgorbXNnc3RyICJEaWVzZSBKb3VybmFsLVZlcnNpb24gd2lyZCB2b24gZGllc2VtIGUyZnNjayBuaWNodCB1bnRlcnN0w7x0enQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1vdmluZyBqb3VybmFsIGZyb20gLyVzIHRvIGhpZGRlbiBpbm9kZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNb3ZpbmcgQGogZnJvbSAvJXMgdG8gaGlkZGVuIEBpLlxuIgorIlxuIgorbXNnc3RyICIiCisiSm91cm5hbCB3aXJkIHZvbiAvJXMgenVtIHZlcnN0ZWNrdGVuIElub2RlIHZlcnNjaG9iZW4uXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIG1vdmluZyBqb3VybmFsOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIG1vdmluZyBAajogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkZlaGxlciBiZWltIFZlcnNjaGllYmVuIGRlcyBKb3VybmFsczogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRm91bmQgaW52YWxpZCBWMiBqb3VybmFsIHN1cGVyYmxvY2sgZmllbGRzIChmcm9tIFYxIGpvdXJuYWwpLlxuCisjLiBALWV4cGFuZGVkOiBDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBqb3VybmFsIHN1cGVyYmxvY2suLi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzAzCittc2dpZCAiIgorIkZvdW5kIEBuIFYyIEBqIEBTIGZpZWxkcyAoZnJvbSBWMSBAaikuXG4iCisiQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgQGogQFMuLi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlVudm9sbHN0w6RuZGlnZSBWMi1Kb3VybmFsLVN1cGVyYmxvY2stRmVsZGVyICh2b20gVjEtSm91cm5hbCkgZ2VmdW5kZW4uXG4iCisiRGllIEZlbGRlciBuYWNoIGRlbSBWMS1Kb3VybmFsLVN1cGVyYmxvY2sgd2VyZGVuIGJlcmVpbmlndC4uLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBSdW4gam91cm5hbCBhbnl3YXkKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzA5Cittc2dpZCAiUnVuIEBqIGFueXdheSIKK21zZ3N0ciAiSm91cm5hbCB0cm90emRlbSBzdGFydGVuIgorCisjLiBALWV4cGFuZGVkOiBSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIHN1cGVyYmxvY2ssIHNvIHJ1bm5pbmcgam91cm5hbCBhbnl3YXkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzE0Cittc2dpZCAiUmVjb3ZlcnkgZmxhZyBub3Qgc2V0IGluIGJhY2t1cCBAUywgc28gcnVubmluZyBAaiBhbnl3YXkuXG4iCittc2dzdHIgIiIKKyJEZXIgQml0c2NoYWx0ZXIgZsO8ciBXaWVkZXJoZXJzdGVsbHVuZyBpc3QgaW0gU2ljaGVydW5ncy1TdXBlcmJsb2NrIG5pY2h0XG4iCisiZ2VzZXR6dCwgZGFzIEpvdXJuYWwgd2lyZCBkYWhlciB0cm90emRlbSBnZXN0YXJ0ZXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhY2tpbmcgdXAgam91cm5hbCBpbm9kZSBibG9jayBpbmZvcm1hdGlvbi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzE5Cittc2dpZCAiIgorIkJhY2tpbmcgdXAgQGogQGkgQGIgaW5mb3JtYXRpb24uXG4iCisiXG4iCittc2dzdHIgIiIKKyJEaWUgSW5mb3JtYXRpb25lbiBkZXMgSm91cm5hbC1Jbm9kZWJsb2NrcyB3ZXJkZW4gZ2VzaWNoZXJ0LlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgcmVzaXplX2lub2RlIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9ibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaXMgJU47IHNob3VsZCBiZSB6ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyNAorbXNnaWQgIiIKKyJAZiBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9AaSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisiaXMgJU47IEBzIHplcm8uICAiCittc2dzdHIgIiIKKyJGw7xyIEBmIGlzdCByZXNpemVfQGkgbmljaHQgZWluZ2VzY2hhbHRldCwgYWJlciBzX3Jlc2VydmVkX2dkdF9AYnNcbiIKKyJpc3QgJU47IEBzIE51bGwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZV9pbm9kZSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgaW5vZGUgaXMgbm9uLXplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzMwCittc2dpZCAiUmVzaXplX0BpIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBAaSBpcyBub24temVyby4gICIKK21zZ3N0ciAiIgorIlJlc2l6ZV9AaSBpc3QgbmljaHQgYWt0aXZpZXJ0LCBhYmVyIGRlciB6dSBtb2RpZml6aWVyZW5kZSBJbm9kZSBpc3QgbmljaHQtIgorIk51bGwuIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgbm90IHZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzNQorbXNnaWQgIlJlc2l6ZSBAaSBub3QgdmFsaWQuICAiCittc2dzdHIgIlJlc2l6ZS1Jbm9kZSBpc3QgdW5nw7xsdGlnLiAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQwCittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorIkRlciBaZWl0cHVua3QgZGVzIGxldHp0ZW4gRWluaMOkbmdlbnMgZGVzIFN1cGVyYmxvY2tzICgldCxcbiIKKyJcdGpldHp0ID0gJVQpIGxpZWd0IGluIGRlciBadWt1bmZ0LlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ1Cittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorIkRlciBaZWl0cHVua3QgZGVzIGxldHp0ZW4gU2NocmVpYmVucyBkZXMgU3VwZXJibG9ja3MgKCV0LFxuIgorIlx0amV0enQgPSAlVCkgbGllZ3QgaW4gZGVyIFp1a3VuZnQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBzaG91bGQgYmUgJVguICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgQHMgJVguICAiCittc2dzdHIgIlN1cGVyYmxvY2stSGlud2VpcyBmw7xyIGV4dGVybmVuIFN1cGVyYmxvY2sgc29sbHRlICVYIHNlaW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IEFkZGluZyBkaXJoYXNoIGhpbnQgdG8gZmlsZXN5c3RlbS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzU0Cittc2dpZCAiIgorIkFkZGluZyBkaXJoYXNoIGhpbnQgdG8gQGYuXG4iCisiXG4iCittc2dzdHIgIiIKKyJWZXJ6ZWljaG5pc2hhc2gtSGlud2VpcyB3aXJkIHp1bSBEYXRlaXN5c3RlbSBoaW56dWdlZsO8Z3QuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzU5Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gICIKK21zZ3N0ciAiIgorIkRpZSBQcsO8ZnN1bW1lIGRlcyBHcnVwcGVuZGVza3JpcHRvcnMgJWcgaXN0ICUwNHgsIHNpZSBzb2xsdGUgJTA0eSBzZWluLiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbiIKK21zZ3N0ciAiIgorIkdydXBwZW5kZXNrcmlwdG9yICVnIGlzdCBvaG5lIGVpbmUgZ2VzZXR6dGUgRWlnZW5zY2hhZnQuXG4iCisiYWxzIG5pY2h0IGluaXRpYWxpc2llcnQgZ2VrZW5uemVpY2huZXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNjkKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAiCittc2dzdHIgIiIKKyJHcnVwcGVuZGVza3JpcHRvciAlZyBoYXQgZWluZSB1bmfDvGx0aWdlIEFuemFobCB1bmdlbnV0enRlciBJbm9kZXMgdm9uICViLiAgIgorCisjLiBALWV4cGFuZGVkOiBMYXN0IGdyb3VwIGJsb2NrIGJpdG1hcCB1bmluaXRpYWxpemVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3NAorbXNnaWQgIkxhc3QgQGcgQGIgQEIgdW5pbml0aWFsaXplZC4gICIKK21zZ3N0ciAiRGllIGxldHp0ZSBHcnVwcGVuLUJsb2NrYml0bWFwIGlzdCBuaWNodCBpbml0aWFsaXNpZXJ0LiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHRyYW5zYWN0aW9uICVpIHdhcyBjb3JydXB0LCByZXBsYXkgd2FzIGFib3J0ZWQuXG4iCittc2dzdHIgIiIKKyJKb3VybmFsdHJhbnNha3Rpb24gJWkgd2FyIGJlc2Now6RkaWd0LCBkaWUgV2llZGVyaG9sdW5nIHd1cmRlIGFiZ2Vicm9jaGVuLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4MworbXNnaWQgIlRoZSB0ZXN0X2ZzIGZsYWcgaXMgc2V0IChhbmQgZXh0NCBpcyBhdmFpbGFibGUpLiAgIgorbXNnc3RyICJEaWUgS2VubnVuZyB0ZXN0X2ZzIHd1cmRlIGdlc2V0enQgKHVuZCBleHQ0IGlzdCB2ZXJmw7xnYmFyKS4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4OAorIywgZnV6enkKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5ICIKKyJzZXQpXG4iCittc2dzdHIgIiIKKyJEZXIgWmVpdHB1bmt0IGRlcyBsZXR6dGVuIEVpbmjDpG5nZW5zIGRlcyBTdXBlcmJsb2NrcyBsaWVndCBpbiBkZXIgWnVrdW5mdC5cbiIKKyJcdCh3ZW5pZ2VyIGFscyBlaW4gVGFnLCB3YWhyc2NoZWlubGljaCBhdWZncnVuZCBmYWxzY2ggZ2VzZXR6dGVyIEhhcmR3YXJlLSIKKyJVaHIpICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozOTQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAiCisic2V0KVxuIgorbXNnc3RyICIiCisiRGVyIFplaXRwdW5rdCBkZXMgbGV0enRlbiBTY2hyZWliZW5zIGRlcyBTdXBlcmJsb2NrcyBsaWVndCBpbiBkZXIgWnVrdW5mdC5cbiIKKyJcdCh3ZW5pZ2VyIGFscyBlaW4gVGFnLCB3YWhyc2NoZWlubGljaCBhdWZncnVuZCBmYWxzY2ggZ2VzZXR6dGVyIEhhcmR3YXJlLSIKKyJVaHIpICAiCisKKyMuIEAtZXhwYW5kZWQ6IE9uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwMAorbXNnaWQgIk9uZSBvciBtb3JlIEBiIEBnIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgIgorbXNnc3RyICJEaWUgUHLDvGZzdW1tZSBlaW5lcyBvZGVyIG1laHJlcmVyIEdydXBwZW5kZXNrcmlwdG9yZW4gaXN0IHVuZ8O8bHRpZy4gICIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwNQorbXNnaWQgIlNldHRpbmcgZnJlZSBAaXMgY291bnQgdG8gJWogKHdhcyAlaSlcbiIKK21zZ3N0ciAiRGllIEFuemFobCBkZXIgZnJlaWVuIElub2RlcyB3aXJkIGF1ZiAlaiBnZXNldHp0ICh3YXIgJWkpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBibG9ja3MgY291bnQgdG8gJWMgKHdhcyAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTAKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIkRpZSBBbnphaGwgZGVyIGZyZWllbiBCbMO2Y2tlIHdpcmQgYXVmICVjIGdlc2V0enQgKHdhciAlYilcbiIKKworIy4gQC1leHBhbmRlZDogTWFraW5nIHF1b3RhIGlub2RlICVpICglUSkgaGlkZGVuLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxNQorbXNnaWQgIk1ha2luZyBAcSBAaSAlaSAoJVEpIGhpZGRlbi5cbiIKK21zZ3N0ciAiUXVvdGEtSW5vZGUgJWkgKCVRKSB3aXJkIHZlcnN0ZWNrdC5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDIwCittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgIgorbXNnc3RyICJEZXIgU3VwZXJibG9jayBoYXQgZWluZW4gdW5nw7xsdGlnZW4gTU1QLUJsb2NrLiAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjUKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAiCittc2dzdHIgIkRlciBTdXBlcmJsb2NrIGJlc2l0enQgZWluZSBmYWxzY2hlIE1NUC1LZW5udW5nLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfb3BlbjI6ICVtXG4iCittc2dzdHIgImV4dDJmc19vcGVuMjogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCittc2dzdHIgImV4dDJmc19jaGVja19kZXNjOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIDY0Yml0IGZpbGVzeXN0ZW1zIG5lZWRzIGV4dGVudHMgdG8gYWNjZXNzIHRoZSB3aG9sZSBkaXNrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0MAorbXNnaWQgIkBTIDY0Yml0IGZpbGVzeXN0ZW1zIG5lZWRzIGV4dGVudHMgdG8gYWNjZXNzIHRoZSB3aG9sZSBkaXNrLiAgIgorbXNnc3RyICIiCisiU3VwZXJibG9jay02NEJpdC1EYXRlaXN5c3RlbWUgYnJhdWNoZW4gRXJ3ZWl0ZXJ1bmdlbiwgdW0gYXVmIGRpZSBnZXNhbXRlXG4iCisiUGxhdHRlIHp1Z3JlaWZlbiB6dSBrw7ZubmVuLiAgICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0NDUKK21zZ2lkICJGaXJzdF9tZXRhX2JnIGlzIHRvbyBiaWcuICAoJU4sIG1heCB2YWx1ZSAlZykuICAiCittc2dzdHIgIkZpcnN0X21ldGFfYmcgaXN0IHp1IGdyb8OfLiAoJU4sIG1heC4gV2VydCAlZykuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1MgorbXNnaWQgIlBhc3MgMTogQ2hlY2tpbmcgQGlzLCBAYnMsIGFuZCBzaXplc1xuIgorbXNnc3RyICJEdXJjaGdhbmcgMTogSW5vZGVzLCBCbMO2Y2tlIHVuZCBHcsO2w59lbiB3ZXJkZW4gZ2VwcsO8ZnRcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDU2Cittc2dpZCAiQHIgaXMgbm90IGEgQGQuICAiCittc2dzdHIgIlJvb3QtSW5vZGUgaXN0IGtlaW4gVmVyemVpY2huaXMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2MQorbXNnaWQgIkByIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gICIKK21zZ3N0ciAiIgorIkbDvHIgUm9vdC1Jbm9kZSBpc3QgZHRpbWUgZ2VzZXR6dCAodmllbGxlaWNodCBkdXJjaCBlaW4genUgYWx0ZXMgbWtlMmZzKS4gICIKKworIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2NgorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgIlJlc2VydmllcnRlciBJbm9kZSAlaSAoJVEpIGhhdCBlaW5lbiB1bmfDvGx0aWdlbiBNb2R1cy4gICIKKworIy4gQC1leHBhbmRlZDogZGVsZXRlZCBpbm9kZSAlaSBoYXMgemVybyBkdGltZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEQgQGkgJWkgaGFzIHplcm8gZHRpbWUuICAiCittc2dzdHIgImR0aW1lIGbDvHIgZ2Vsw7ZzY2h0ZW4gSW5vZGUgJWkgaXN0IE51bGwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAiCittc2dzdHIgIklub2RlICVpIGlzdCBpbiBCZW51dHp1bmcsIGFiZXIgaGF0IGR0aW1lIGdlc2V0enQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICJJbm9kZSAlaSBpc3QgZWluIFZlcnplaWNobmlzIG1pdCBMw6RuZ2UgTnVsbC4gICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODYKK21zZ2lkICJAZyAlZydzIEBiIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICIiCisiRGllIEJsb2NrYml0bWFwIGRlciBHcnVwcGUgJWcgYXVmICViIMO8YmVyc2NobmVpZGV0IHNpY2ggbWl0XG4iCisiZWluZW0gYW5kZXJlbiBEYXRlaXN5c3RlbWJsb2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5MQorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKyJEaWUgSW5vZGUtQml0bWFwIGRlciBHcnVwcGUgJWcgYmVpICViIMO8YmVyc2NobmVpZGV0IHNpY2ggbWl0XG4iCisiZWluZW0gYW5kZXJlbiBEYXRlaXN5c3RlbWJsb2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIHRhYmxlIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDk2Cittc2dpZCAiQGcgJWcncyBAaSB0YWJsZSBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiIgorIkRpZSBJbm9kZS1UYWJlbGxlIGRlciBHcnVwcGUgJWcgYmVpICViIMO8YmVyc2NobmVpZGV0IHNpY2ggbWl0XG4iCisiZWluZW0gYW5kZXJlbiBEYXRlaXN5c3RlbWJsb2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDEKK21zZ2lkICJAZyAlZydzIEBiIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJkaWUgQGItQEIgKCViKSB2b24gQGcgJWcgaXN0IHVuZ8O8bHRpZy4gICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgKCViKSBpcyBiYWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA2Cittc2dpZCAiQGcgJWcncyBAaSBAQiAoJWIpIGlzIGJhZC4gICIKK21zZ3N0ciAiRGllIElub2RlLUJpdG1hcCAoJWIpIGRlciBHcnVwcGUgJWcgaXN0IHVuZ8O8bHRpZy4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfc2l6ZSBpcyAlSXMsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTEKK21zZ2lkICJAaSAlaSwgaV9zaXplIGlzICVJcywgQHMgJU4uICAiCittc2dzdHIgIklub2RlICVpLCBpX3NpemUgaXN0ICVJcywgc29sbHRlICVOIHNlaW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX2Jsb2NrcyBpcyAlSWIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTYKK21zZ2lkICJAaSAlaSwgaV9AYnMgaXMgJUliLCBAcyAlTi4gICIKK21zZ3N0ciAiSW5vZGUgJWksIGlfQGJzIGlzdCAlSWIsIHNvbGx0ZSAlTiBzZWluLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIxCittc2dpZCAiQEkgJUIgKCViKSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiVW56dWzDpHNzaWdlciAlQiAoJWIpIGluIElub2RlICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIG92ZXJsYXBzIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI2Cittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiJUIgKCViKSDDvGJlcmxhcHB0IERhdGVpc3lzdGVtLU1ldGFkYXRlbiBpbiBAaSAlaS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJJbm9kZSAlaSBoYXQgdW56dWzDpHNzaWdlKG4pIEJsb2NrL0Jsw7Zja2UuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFRvbyBtYW55IGlsbGVnYWwgYmxvY2tzIGluIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzNgorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBpbGxlZ2FsIEBicyBpbiBAaSAlaS5cbiIKK21zZ3N0ciAiWnUgdmllbGUgdW56dWzDpHNzaWdlIEJsw7Zja2UgaW4gQGkgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBpbiBiYWQgYmxvY2sgaW5vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQxCittc2dpZCAiQEkgJUIgKCViKSBpbiBiYWQgQGIgQGkuICAiCittc2dzdHIgIlVuZ8O8bHRpZ2VyICVCICglYikgaW4g4oCeYmFkIGJsb2Nr4oCcLUlub2RlLiAgIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQ2Cittc2dpZCAiQmFkIEBiIEBpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICLigJ5CYWQgQmxvY2vigJwtSW5vZGUgaGF0IHVuenVsw6Rzc2lnZShuKSBCbG9jay9CbMO2Y2tlLiAgIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrIGluIHVzZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTEKK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiRG9wcGVsdGVyIG9kZXIgdW56dWzDpHNzaWdlciBCbG9jayBpbiBHZWJyYXVjaCFcbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrICViIHVzZWQgYXMgYmFkIGJsb2NrIGlub2RlIGluZGlyZWN0IGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1NgorbXNnaWQgIkJhZCBAYiAlYiB1c2VkIGFzIGJhZCBAYiBAaSBpbmRpcmVjdCBAYi4gICIKK21zZ3N0ciAiIgorIlVuZ8O8bHRpZ2VyIEJsb2NrICViIHdpcmQgYmVudXR6dCBhbHMgaW5kaXJla3RlciBCbG9jayBkZXMg4oCeQmFkIEJsb2Nr4oCcLSIKKyJJbm9kZXMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuCisjLiBALWV4cGFuZGVkOiBzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpbiB0aGUgZmlsZXN5c3RlbS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjEKK21zZ2lkICIiCisiXG4iCisiVGhlIGJhZCBAYiBAaSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbiIKKyJzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuIgorImluIHRoZSBAZi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkRlciDigJ5CYWQgQmxvY2vigJwtSW5vZGUgaXN0IHdhaHJzY2hlaW5saWNoIGJlc2Now6RkaWd0IHdvcmRlbi4gU2llIHNvbGx0ZW5cbiIKKyJudW4gaW5uZWhhbHRlbiB1bmQg4oCeZTJmc2NrIC1j4oCcIGF1c2bDvGhyZW4sIHVtIG5hY2ggZGVmZWt0ZW4gQmzDtmNrZW4gaW5cbiIKKyJkZW0gRGF0ZWlzeXN0ZW0genUgc3VjaGVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogSWYgdGhlIGJsb2NrIGlzIHJlYWxseSBiYWQsIHRoZSBmaWxlc3lzdGVtIGNhbiBub3QgYmUgZml4ZWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTY4Cittc2dpZCAiIgorIlxuIgorIklmIHRoZSBAYiBpcyByZWFsbHkgYmFkLCB0aGUgQGYgY2FuIG5vdCBiZSBmaXhlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIldlbm4gZGVyIEJsb2NrIHdpcmtsaWNoIGRlZmVrdCBpc3QsIGthbm4gZGFzIERhdGVpc3lzdGVtIG5pY2h0IHJlcGFyaWVydCAiCisid2VyZGVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBZb3UgY2FuIHJlbW92ZSB0aGlzIGJsb2NrIGZyb20gdGhlIGJhZCBibG9jayBsaXN0IGFuZCBob3BlXG4KKyMuIEAtZXhwYW5kZWQ6IHRoYXQgdGhlIGJsb2NrIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTczCittc2dpZCAiIgorIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKyJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJTaWUga8O2bm5lbiBkaWVzZW4gQmxvY2sgYXVzIGRlciBMaXN0ZSBkZXIgZGVmZWt0ZW4gQmzDtmNrZSBsw7ZzY2hlblxuIgorInVuZCBob2ZmZW4sIGRhcyBkaWVzZXIgd2lya2xpY2ggaW4gT3JkbnVuZyBpc3QsIGVzIGdpYnQgYWJlclxuIgorIktFSU5FIEdBUkFOVElFTi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIHByaW1hcnkgc3VwZXJibG9jayAoJWIpIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzkKK21zZ2lkICJUaGUgcHJpbWFyeSBAUyAoJWIpIGlzIG9uIHRoZSBiYWQgQGIgbGlzdC5cbiIKK21zZ3N0ciAiRGVyIHByaW3DpHJlIFN1cGVyYmxvY2sgKCViKSBpc3QgaW4gZGVyIExpc3RlIGRlciBkZWZla3RlbiBCbMO2Y2tlLlxuIgorCisjLiBALWV4cGFuZGVkOiBCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBncm91cCBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3RcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODQKK21zZ2lkICJCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBAZyBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIEBiIGxpc3RcbiIKK21zZ3N0ciAiIgorIkJsb2NrICViIGltIHByaW3DpHJlbiBHcnVwcGVuZGVza3JpcHRvciBpc3QgaW4gZGVyIExpc3RlIGRlciBkZWZla3RlbiBCbMO2Y2tlXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3Mgc3VwZXJibG9jayAoJWIpIGlzIGJhZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1OTAKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIEBTICglYikgaXMgYmFkLlxuIgorbXNnc3RyICJXYXJudW5nOiBkZXIgU3VwZXJibG9jayBkZXIgR3J1cHBlICVnICglYikgaXN0IGRlZmVrdC5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBncm91cCBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgYmxvY2sgKCViKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1OTUKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIEBnIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBAYiAoJWIpLlxuIgorbXNnc3RyICIiCisiV2FybnVuZzogZGllIEtvcGllIGRlcyBHcnVwcGVuZGVza3JpcHRvcnMgdm9uIEdydXBwZSAlZyBoYXQgZWluZW4gZGVmZWt0ZW4gIgorIkJsb2NrICglYikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFByb2dyYW1taW5nIGVycm9yPyAgYmxvY2sgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9ibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDEKK21zZ2lkICJQcm9ncmFtbWluZyBlcnJvcj8gIEBiICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfQGIuXG4iCittc2dzdHIgIiIKKyJQcm9ncmFtbWllcmZlaGxlcj8gIEJsb2NrICMlYiB3aXJkIG9obmUgR3J1bmQgaW4gcHJvY2Vzc19iYWRfQGIgdmVybGFuZ3QuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgJU4gY29udGlndW91cyBibG9jayhzKSBpbiBibG9jayBncm91cCAlZyBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjA3Cittc2dpZCAiQEEgJU4gY29udGlndW91cyBAYihzKSBpbiBAYiBAZyAlZyBmb3IgJXM6ICVtXG4iCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSBadXdlaXNlbiB2b24gJU4genVzYW1tZW5ow6RuZ2VuZW5kZShtL24pIEJsb2NrL0Jsw7Zja2VuIGluIGRlciBAYi0iCisiQGcgJWcgZsO8ciAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGIgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4iCittc2dzdHIgIkZlaGxlciBiZWltIFp1d2Vpc2VuIGVpbmVzIEJsb2NrcHVmZmVycyB6dW0gVmVyc2NoaWViZW4gdm9uICVzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjE3Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbiIKK21zZ3N0ciAiR3J1cHBlICVnJ3MgJXMgd2lyZCB2b24gJWIgbmFjaCAlYyB2ZXJzY2hvYmVuIC4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIHRvICVjLi4uXG4iCittc2dzdHIgIkdydXBwZSAlZydzICVzIHdpcmQgbmFjaCAlYyB2ZXJzY2hvYmVuIC4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAlYiBvZiAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjcKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBAYiAlYiBvZiAlczogJW1cbiIKK21zZ3N0ciAiV2FybnVuZzogQmxvY2sgJWIgdm9uICVzIGtvbm50ZSBuaWNodCBnZWxlc2VuIHdlcmRlbjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHdyaXRlIGJsb2NrICViIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzIKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICJXYXJudW5nOiBCbG9jayAlYiB2b24gJXMga29ubnRlIG5pY2h0IGdlc2NocmllYmVuIHdlcmRlbjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzcgZTJmc2NrL3Byb2JsZW0uYzoxNTAxCittc2dpZCAiQEEgQGkgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gWnV3ZWlzZW4gZGVyIElub2RlLUJpdG1hcCAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0MgorbXNnaWQgIkBBIEBiIEBCICglTik6ICVtXG4iCittc2dzdHIgIkZlaGxlciBiZWltIFp1d2Vpc2VuIGRlciBCbG9jay1CaXRtYXAgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4iCittc2dzdHIgIkZlaGxlciBiZWltIFp1d2Vpc2VuIGRlciDigJ5pY291bnQgbGluayBpbmZvcm1hdGlvbuKAnDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBkaXJlY3RvcnkgYmxvY2sgYXJyYXk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBkIEBiIGFycmF5OiAlbVxuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBadXdlaXNlbiBkZXMgVmVyemVpY2huaXMtQmxvY2stRmVsZGVzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgIkZlaGxlciB3w6RocmVuZCBkZXMgRHVyY2hzdWNoZW5zIGRlciBJbm9kZXMgKCVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWk6ICVtXG4iCittc2dzdHIgIkZlaGxlciBiZWltIEl0ZXJpZXJlbiDDvGJlciBkaWUgQmzDtmNrZSBpbiBJbm9kZSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBpbm9kZSBjb3VudCBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGNvdW50PSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjcKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBpIGNvdW50IGluZm9ybWF0aW9uIChAaT0laSwgY291bnQ9JU4pOiAlbVxuIgorbXNnc3RyICIiCisiRmVobGVyIGJlaW0gU3BlaWNoZXJuIGRlciBJbmZvcm1hdGlvbmVuIHp1ciBJbm9kZS1BbnphaGwgKElub2RlPSVpLCBBbnphaGw9IgorIiVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBkaXJlY3RvcnkgYmxvY2sgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBibG9jaz0lYiwgbnVtPSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzIKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBkIEBiIGluZm9ybWF0aW9uIChAaT0laSwgQGI9JWIsIG51bT0lTik6ICVtXG4iCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSBTcGVpY2hlcm4gZGVyIFZlcnplaWNobmlzLUJsb2NrLUluZm9ybWF0aW9uZW4gKElub2RlPSVpLCBCbG9jaz0iCisiJWIsIEFuemFobD0lTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIGRlcyBJbm9kZXMgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAiCittc2dzdHIgIklub2RlICVpIGhhdCBkZW4gSW1hZ2ljLUJpdHNjaGFsdGVyIGdlc2V0enQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChpbm9kZSAlaSkgaGFzIGltbXV0YWJsZVxuCisjLiBALWV4cGFuZGVkOiBvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKEBpICVpKSBoYXMgaW1tdXRhYmxlXG4iCisib3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAiCittc2dzdHIgIiIKKyJTcGV6aWVsbGUgR2Vyw6R0ZS0vU29ja2V0LS9GaWZvLS9TeW1saW5rLURhdGVpIChJbm9kZSAlaSkgaGF0IGRlbiBCaXRzY2hhbHRlciAiCisiZsO8clxuIgorInVudmVyw6RuZGVyYmFyIG9kZXIgTnVyLUFuaMOkbmdlbiBnZXNldHp0LiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgY29tcHJlc3Npb24gZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGNvbXByZXNzaW9uIHN1cHBvcnQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBAY2lvbiBmbGFnIHNldCBvbiBAZiB3aXRob3V0IEBjaW9uIHN1cHBvcnQuICAiCittc2dzdHIgIiIKKyJJbm9kZSAlaSBoYXQgZGVuIEtvbXByZXNzaW9ucy1CaXRzY2hhbHRlciBhdWYgZWluZW0gRGF0ZWlzeXN0ZW0gZ2VzZXR6dCxcbiIKKyJ3ZWxjaGVzIGRpZXMgbmljaHQgdW50ZXJzdMO8dHp0LiAgIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8pIGlub2RlICVpIGhhcyBub24temVybyBzaXplLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWFsIChAdi9zb2NrZXQvZmlmbykgQGkgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAiCittc2dzdHIgIlNwZXppZWxsZXIgR2Vyw6R0ZS0vU29ja2V0LS9GaWZvLUlub2RlICVpIGhhdCBkaWUgR3LDtsOfZSBOdWxsLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzEyCittc2dpZCAiQGogQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIklub2RlICVpIHdpcmQgbmljaHQgdmVyd2VuZGV0LCBhYmVyIGVudGjDpGx0IERhdGVuLiAgIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzE3Cittc2dpZCAiQGogaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiSm91cm5hbCBpc3Qga2VpbmUgcmVndWzDpHJlIERhdGVpLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgd2FzIHBhcnQgb2YgdGhlIEBvIEBpIGxpc3QuICAiCittc2dzdHIgIklub2RlICVpIHdhciBUZWlsIGRlciBMaXN0ZSB2ZXJ3YWlzdGVyIElub2Rlcy4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGVzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjgKK21zZ2lkICJAaXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgIgorbXNnc3RyICIiCisiSW5vZGVzIHd1cmRlbiBnZWZ1bmRlbiwgZGllIFRlaWwgZWluZXIgZGVmZWt0ZW4gdmVya2V0dGV0ZW4gTGlzdGUgdm9uXG4iCisidmVyd2Fpc3RlbiBJbm9kZXMgd2FyZW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMzCittc2dpZCAiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iCittc2dzdHIgIkZlaGxlciBiZWltIFp1d2Vpc2VuIGRlciByZWZjb3VudC1TdHJ1a3R1ciAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBmb3IgaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzM4Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiBmb3IgQGkgJWkuICAiCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSBMZXNlbiBkZXMgQmxvY2tzIGbDvHIgZXJ3ZWl0ZXJ0ZSBBdHRyaWJ1dGUgJWIgZsO8ciBJbm9kZSAlaS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgYmFkIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDMKK21zZ2lkICJAaSAlaSBoYXMgYSBiYWQgQGEgQGIgJWIuICAiCittc2dzdHIgIklub2RlICVpIGhhdCBlaW5lbiBkZWZla3RlbiBFcndlaXRlcnRlLUF0dHJpYnV0ZS1CbG9jayAlYi4gICIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDgKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIGRlcyBCbG9ja3MgZsO8ciBlcndlaXRlcnRlIEF0dHJpYnV0ZSAoJW0pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc1MworbXNnaWQgIkBhIEBiICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIEBzICVOLiAgIgorbXNnc3RyICIiCisiRGVyIFJlZmVyZW56esOkaGxlciBkZXMgQmxvY2tzIGbDvHIgZXJ3ZWl0ZXJ0ZSBBdHRyaWJ1dGUgJWIgaXN0ICVyLCByaWNodGlnICIKKyJ3w6RyZSAlTi4gICIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTgKK21zZ2lkICJFcnJvciB3cml0aW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXMgQmxvY2tzIGbDvHIgZXJ3ZWl0ZXJ0ZSBBdHRyaWJ1dGUgJWIgKCVtKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyBoX2Jsb2NrcyA+IDEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzYzCittc2dpZCAiQGEgQGIgJWIgaGFzIGhfQGJzID4gMS4gICIKK21zZ3N0ciAiRGVyIEJsb2NrIGbDvHIgZXJ3ZWl0ZXJ0ZSBBdHRyaWJ1dGUgJWIgaGF0IGhfYmxvY2tzID4gMS4gICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzY4Cittc2dpZCAiQEEgQGEgQGIgJWIuICAiCittc2dzdHIgIkZlaGxlciBiZWltIFp1d2Vpc2VuIGRlcyBCbG9ja3MgZsO8ciBlcndlaXRlcnRlIEF0dHJpYnV0ZSAlYi4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzMKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAiCittc2dzdHIgIiIKKyJEZXIgQmxvY2sgZsO8ciBlcndlaXRlcnRlIEF0dHJpYnV0ZSAlYiBpc3QgZGVmZWt0IChLb2xsaXNpb24gZGVyICIKKyJQbGF0emFuZm9yZGVydW5nZW4pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCBuYW1lKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzgKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiBuYW1lKS4gICIKK21zZ3N0ciAiRGVyIEJsb2NrIGbDvHIgZXJ3ZWl0ZXJ0ZSBBdHRyaWJ1dGUgJWIgaXN0IGRlZmVrdCAodW5nw7xsdGlnZXIgTmFtZSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChpbnZhbGlkIHZhbHVlKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3ODMKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiB2YWx1ZSkuICAiCittc2dzdHIgIkRlciBCbG9jayBmw7xyIGVyd2VpdGVydGUgQXR0cmlidXRlICViIGlzdCBkZWZla3QgKHVuZ8O8bHRpZ2VyIFdlcnQpLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyB0b28gYmlnLiAgIgorbXNnc3RyICJJbm9kZSAlaSBpc3QgenUgZ3Jvw58uICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgY2F1c2VzIGRpcmVjdG9yeSB0byBiZSB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5MgorbXNnaWQgIiVCICglYikgY2F1c2VzIEBkIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikgbWFjaHQgZGFzIFZlcnplaWNobmlzIHp1IGdyb8OfLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5NworbXNnaWQgIiVCICglYikgY2F1c2VzIGZpbGUgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiQmxvY2sgIyVCICglYikgbWFjaHQgZGllIERhdGVpIHp1IGdyb8OfLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwMgorbXNnaWQgIiVCICglYikgY2F1c2VzIHN5bWxpbmsgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiQmxvY2sgIyVCICglYikgbWFjaHQgZGVuIFN5bWxpbmsgenUgZ3Jvw58uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbiIKK21zZ3N0ciAiIgorIklub2RlICVpIGhhdCBJTkRFWF9GTCBGbGFnIGF1ZiBlaW5lbSBEYXRlaXN5c3RlbSBvaG5lIEhUUkVFLVVudGVyc3TDvHR6dW5nICIKKyJnZXNldHp0LlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIGRpcmVjdG9yeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IGJ1dCBpcyBub3QgYSBAZC5cbiIKK21zZ3N0ciAiIgorIklub2RlICVpIGhhdCBkZW4gSU5ERVhfRkwtQml0c2NoYWx0ZXIgZ2VzZXR6dCwgaXN0IGFiZXIga2VpbiBWZXJ6ZWljaG5pcy5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIHJvb3Qgbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgaGFzIGFuIEBuIHJvb3Qgbm9kZS5cbiIKK21zZ3N0ciAiIgorIkhUUkVFLVZlcnplaWNobmlzLUlub2RlICVpIGhhdCBlaW5lbiB1bnZvbGxzdMOkbmRpZ2VuIFd1cnplbGtub3RlbiAo4oCecm9vdCAiCisibm9kZeKAnCkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjIKK21zZ2lkICJAaCAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbiIKK21zZ3N0ciAiIgorIkhUUkVFLVZlcnplaWNobmlzLUlub2RlICVpIGhhdCBlaW5lIG5pY2h0IHVudGVyc3TDvHR6dGUgSGFzaC1WZXJzaW9uICglTilcbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAiIgorIkBoICVpIGJlbnV0enQgZWluZW4gbmljaHQgdW50ZXJzdMO8dHp0ZW4gQml0c2NoYWx0ZXIgZsO8ciBlaW5lbiBIdHJlZS0iCisiV3VyemVsa25vdGVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzIKK21zZ2lkICJAaCAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuIgorbXNnc3RyICJAaCAlaSBoYXQgZWluZSB6dSBncm/Dn2UgVmVyemVpY2huaXN0aWVmZSB2b24gKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGFuIGluZGlyZWN0IGJsb2NrICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIG1ldGFkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzNworbXNnaWQgIiIKKyJCYWQgQGIgQGkgaGFzIGFuIGluZGlyZWN0IEBiICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuIgorIkBmIG1ldGFkYXRhLiAgIgorbXNnc3RyICIiCisiRGVyIElub2RlIGbDvHIgZGVmZWt0ZSBCbMO2Y2tlIGhhdCBlaW5lbiBpbmRpcmVrdGVuIEJsb2NrICglYiksIGRlciBtaXRcbiIKKyJkZW4gRGF0ZWlzeXN0ZW0tTWV0YWRhdGVuIGluIEtvbmZsaWt0IHN0ZWh0LiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemUgQGkgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uIgorbXNnc3RyICJFcnpldWd1bmcgZGVzIFZlcmdyw7bDn2VydW5ncy1Jbm9kZXMgc2NoZWl0ZXJ0ZTogJW0uIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDgKK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIklub2RlICVpIGhhdCBlaW5lIHVuZ8O8bHRpZ2UgRXh0cmFncsO2w59lICglSVMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICIiCisiRWluIGVyd2VpdGVydGVzIEF0dHJpYnV0IGluIElub2RlICVpIGhhdCBlaW5lIHVuZ8O8bHRpZ2Ug4oCebmFtZWxlbuKAnCB2b24gJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODU4Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiIgorIkVpbiBlcndlaXRlcnRlcyBBdHRyaWJ1dCBpbiBJbm9kZSAlaSBoYXQgZWluZW4gdW5nw7xsdGlnZW4gV2VydGV2ZXJzYXR6IHZvbiAiCisiJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBibG9jayAoJU4pIHdoaWNoIGlzIGludmFsaWQgKG11c3QgYmUgMClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjMKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBAYiAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCittc2dzdHIgIiIKKyJFaW4gZXJ3ZWl0ZXJ0ZXMgQXR0cmlidXQgaW4gSW5vZGUgJWkgaGF0IGVpbmVuIHVuZ8O8bHRpZ2VuIFdlcnRlYmxvY2sgdm9uICVOICIKKyIobXVzcyAwIHNlaW4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjgKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiIgorIkVpbiBlcndlaXRlcnRlcyBBdHRyaWJ1dCBpbiBJbm9kZSAlaSBoYXQgZWluZSB1bmfDvGx0aWdlIFdlcnRlZ3LDtsOfZSB2b24gJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJFaW4gZXJ3ZWl0ZXJ0ZXMgQXR0cmlidXQgaW4gSW5vZGUgJWkgaGF0IGRlbiB1bmfDvGx0aWdlbiBIYXNoICVOLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODc4Cittc2dpZCAiQGkgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuIgorbXNnc3RyICIiCisiSW5vZGUgJWkgaXN0IGVpbiAlSXQsIGFiZXIgZXMgc2llaHQgc28gYXVzLCBhbHMgb2IgZXMgdGF0c8OkY2hsaWNoIGVpbiAiCisiVmVyemVpY2huaXMgaXN0LlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgZXh0ZW50IHRyZWUgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBAeCB0cmVlIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBJdGVyaWVyZW4gw7xiZXIgZGVuIEV4dGVudC1CYXVtIEB4IGluIElub2RlICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIGlub2RlICVpXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4OAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIEBpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCittc2dzdHIgIiIKKyJEYXMgSXRlcmllcmVuIGRlciBFcndlaXRlcnVuZ2VuIChFeHRlbnRzKSBpbiBJbm9kZSAlaSBzY2hlaXRlcnRlXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBpbnZhbGlkIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk0Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBAbiBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiSW5vZGUgJWkgaGF0IGVpbmUgQG5lIEVyd2VpdGVydW5nXG4iCisiXHQobG9naXNjaGVyIEJsb2NrICVjLCBAbiBwaHlzaXNjaGVyIEJsb2NrICViLCBMw6RuZ2UgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgaW52YWxpZCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk5Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgQG4gbGVuICVOKVxuIgorbXNnc3RyICIiCisiSW5vZGUgJWkgaGF0IGVpbmUgdW5nw7xsdGlnZSBFcndlaXRlcnVuZ1xuIgorIlx0KGxvZ2lzY2hlciBCbG9jayAlYywgcGh5c2lzY2hlciBCbG9jayAlYiwgdW56dWzDpHNzaWdlIEzDpG5nZSAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKyJJbm9kZSAlaSBoYXQgZGVuIEVYVEVOVFNfRkwtQml0c2NoYWx0ZXIgZ2VzZXR6dCwgb2J3b2hsIGRhcyBEYXRlaXN5c3RlbVxuIgorIkVyd2VpdGVydW5nZW4gbmljaHQgdW50ZXJzdMO8dHp0LlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgc3VwZXJibG9jayBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgQFMgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbiIKK21zZ3N0ciAiIgorIklub2RlICVpIGJlc2l0enQgZGFzIEVyd2VpdGVydW5nc2Zvcm1hdCwgYWJlciBkZW0gU3VwZXJibG9jayBmZWhsdCBkaWUgIgorIkVpZ2Vuc2NoYWZ0IEVYVEVOVFNcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4iCittc2dzdHIgIiIKKyJEZW0gSW5vZGUgJWkgZmVobHQgRVhURU5UX0ZMLCBlciBoYXQgYWJlciBkYXMgRm9ybWF0IGVpbmVyIEVyd2VpdGVydW5nXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIKK21zZ3N0ciAiSW4gc2NobmVsbGVtIFN5bWxpbmsgJWkgaXN0IEVYVEVOVF9GTCBnZXNldHp0LiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyNAorbXNnaWQgIiIKKyJAaSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiSW5vZGUgJWkgaGF0IHVucmVnZWxtw6TDn2lnZSBFcndlaXRlcnVuZ2VuXG4iCisiXHQodW5nw7xsdGlnZXIgbG9naXNjaGVyIEJsb2NrICVjLCBwaHlzaXNjaGVyIEJsb2NrICViLCBMw6RuZ2UgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI4Cittc2dpZCAiQGkgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbiIKK21zZ3N0ciAiSW5vZGUgJWkgaGF0IGVpbmVuIHVuZ8O8bHRpZ2VuIEVyd2VpdGVydW5ncy1Lbm90ZW4gKGJsayAlYiwgbGJsayAlYylcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIEBiIEBCOiAlbVxuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBVbXdhbmRlbG4gZGVyIFN1YmNsdXN0ZXItQmxvY2tiaXRtYXA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTM4Cittc2dpZCAiQHEgQGkgaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiRGVyIFF1b3RhLUlub2RlIGlzdCBrZWluZSByZWd1bMOkcmUgRGF0ZWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0MworbXNnaWQgIkBxIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJRdW90YS1Jbm9kZSB3aXJkIG5pY2h0IGJlbnV0enQsIGVudGjDpGx0IGFiZXIgRGF0ZW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQ4Cittc2dpZCAiQHEgQGkgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gICIKK21zZ3N0ciAiRGVyIFF1b3RhLUlub2RlIGlzdCBzaWNodGJhciBmw7xyIGRlbiBCZW51dHplci4gICIKKworIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBsb29rcyBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1MworbXNnaWQgIlRoZSBiYWQgQGIgQGkgbG9va3MgQG4uICAiCittc2dzdHIgIkRlciBJbm9kZSBmw7xyIGRlZmVrdGUgQmzDtmNrZSBzaWVodCB1bmfDvGx0aWcgYXVzLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTU4Cittc2dpZCAiIgorIkBpICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYilcbiIKK21zZ3N0ciAiIgorIklub2RlICVpIGhhdCBlaW5lIEVyd2VpdGVydHVuZyBkZXIgTMOkbmdlIE51bGxcbiIKKyJcdCh1bmfDvGx0aWdlciBsb2dpc2NoZXIgQmxvY2sgJWMsIHBoeXNpc2NoZXIgQmxvY2sgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEludGVyaW9yIGV4dGVudCBub2RlIGxldmVsICVOIG9mIGlub2RlICVpOlxuCisjLiBALWV4cGFuZGVkOiBMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NjUKK21zZ2lkICIiCisiSW50ZXJpb3IgQHggbm9kZSBsZXZlbCAlTiBvZiBAaSAlaTpcbiIKKyJMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gICIKK21zZ3N0ciAiIgorIkViZW5lICVOIGRlcyBpbnRlcm5lbiBFcndlaXRlcnVuZ3Nrbm90ZW5zIHZvbiBJbm9kZSAlaTpcbiIKKyJEZXIgbG9naXNjaGUgU3RhcnQgJWIgcGFzc3QgbmljaHQgenVtIGxvZ2lzY2hlbiBTdGFydCAlYyBhdWYgZGVyIG7DpGNoc3RlbiAiCisiRWJlbmUuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzEKK21zZ2lkICIiCisiQGkgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIklub2RlICVpLCBkYXMgRW5kZSBkZXIgRXJ3ZWl0ZXJ1bmcgaXN0IGF1w59lcmhhbGIgZGVzIGfDvGx0aWdlbiBCZXJlaWNoc1xuIgorIlx0KGxvZ2lzY2hlciBCbG9jayAlYywgcGh5c2lzY2hlciBCbG9jayAlYiwgTMOkbmdlICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgYmxvY2sgJWIgc2hvdWxkIGJlIGF0IGJsb2NrICVjLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3NworbXNnaWQgIkBkIEBpICVpIEBiICViIHNob3VsZCBiZSBhdCBAYiAlYy4gICIKK21zZ3N0ciAiVmVyemVpY2huaXNpbm9kZSAlaSBCbG9jayAlYiBzb2xsdGUgaW4gQmxvY2sgJWMgc2Vpbi4gICIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBleHRlbnQgbWFya2VkIHVuaW5pdGlhbGl6ZWQgYXQgYmxvY2sgJWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBpICVpIGhhcyBAeCBtYXJrZWQgdW5pbml0aWFsaXplZCBhdCBAYiAlYy4gICIKK21zZ3N0ciAiIgorIlZlcnplaWNobmlzLUlub2RlICVpIGhhdCBlaW5lIEVyd2VpdGVydW5nLCBkaWUgYWxzIG5pY2h0IGluaXRpYWxpc2llcnRcbiIKKyJnZWtlbm56ZWljaG5ldCBpc3QgaW4gQmxvY2sgJWMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGxvZ2ljYWwgYmxvY2sgJWIgKHBoeXNpY2FsIGJsb2NrICVjKSB2aW9sYXRlcyBjbHVzdGVyIGFsbG9jYXRpb24gcnVsZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFdpbGwgZml4IGluIHBhc3MgMUIuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTg3Cittc2dpZCAiIgorIkBpICVpIGxvZ2ljYWwgQGIgJWIgKHBoeXNpY2FsIEBiICVjKSB2aW9sYXRlcyBjbHVzdGVyIGFsbG9jYXRpb24gcnVsZXMuXG4iCisiV2lsbCBmaXggaW4gcGFzcyAxQi5cbiIKK21zZ3N0ciAiIgorIkRpZSBJbm9kZSAlaSwgbG9naXNjaGVyIEJsb2NrICViIChwaHlzaXNjaGVyIEJsb2NrICVjKSB2ZXJsZXR6dCBkaWUgUmVnZWxuICIKKyJ6dXJcYiAgQW5mb3JkZXJ1bmcgdm9uIENsdXN0ZXItU3BlaWNoZXIuXG4iCisiRGllcyB3aXJkIGluIER1cmNoZ2FuZyAxQiByZXBhcmllcnQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLlxuCisjLiBALWV4cGFuZGVkOiBQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk5NAorbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgQGJzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBAaS4uLlxuIgorIlBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIEBtIEBic1xuIgorbXNnc3RyICIiCisiXG4iCisiWnVzw6R0emxpY2hlIEzDpHVmZSB3ZXJkZW4gZHVyY2hnZWbDvGhydCwgdW0gZGllIHZvbiBtZWhyIGFscyBlaW5lbSBJbm9kZVxuIgorImJlYW5zcHJ1Y2h0ZW4gQmzDtmNrZSB6dSBrbMOkcmVuIC4uLlxuIgorIkR1cmNoZ2FuZyAxQjogU3VjaGUgbmFjaCBtZWhyZmFjaCBiZWFuc3BydWNodGVuIEJsw7Zja2VuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgJWk6CisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG0gQGIocykgaW4gQGkgJWk6IgorbXNnc3RyICJNZWhyZmFjaCBiZWFuc3BydWNodGUocikgQmxvY2svQmzDtmNrZSBpbiBJbm9kZSAlaToiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gUHLDvGZlbiBkZXIgSW5vZGVzICglaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwIChpbm9kZV9kdXBfbWFwKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBpIEBCIChAaV9kdXBfbWFwKTogJW1cbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gWnV3ZWlzZW4gZGVyIElub2RlLUJpdG1hcCAoaW5vZGVfZHVwX21hcCk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpICglcyk6ICVtXG4iCittc2dzdHIgIkZlaGxlciBiZWltIEl0ZXJpZXJlbiDDvGJlciBkaWUgQmzDtmNrZSBpbiBJbm9kZSAlaSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzAgZTJmc2NrL3Byb2JsZW0uYzoxMzQ1Cittc2dpZCAiRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBAYSBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICIiCisiRmVobGVyIGJlaSBkZXIgQW5wYXNzdW5nIGRlcyBSZWZlcmVuenrDpGhsZXJzIGRlcyBCbG9ja3MgZsO8ciBlcndlaXRlcnRlICIKKyJBdHRyaWJ1dGUgJWIgKElub2RlICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzNQorbXNnaWQgIlBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBAaXMgd2l0aCBAbSBAYnNcbiIKK21zZ3N0ciAiIgorIkR1cmNoZ2FuZyAxQzogVmVyemVpY2huaXNzZSB3ZXJkZW4gbmFjaCBJbm9kZXMgbWl0IG1laHJmYWNoIGJlbGVndGVuIEJsw7Zja2VuICIKKyJkdXJjaHN1Y2h0LlxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDEKK21zZ2lkICJQYXNzIDFEOiBSZWNvbmNpbGluZyBAbSBAYnNcbiIKK21zZ3N0ciAiRHVyY2hnYW5nIDFEOiBNZWhyZmFjaCBiZWxlZ3RlIEJsw7Zja2Ugd2VyZGVuIGFiZ2VnbGljaGVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBGaWxlICVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSkgXG4KKyMuIEAtZXhwYW5kZWQ6ICAgaGFzICVyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0NgorbXNnaWQgIiIKKyJGaWxlICVRIChAaSAjJWksIG1vZCB0aW1lICVJTSkgXG4iCisiICBoYXMgJXIgQG0gQGIocyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4iCittc2dzdHIgIiIKKyJEYXRlaSAlUSAoSW5vZGUgIyVpLCDDhG5kZXJ1bmdzemVpdCAlSU0pIFxuIgorIiAgaGF0ICVyIG1laHJmYWNoIGJlbGVndGUobikgQmxvY2svQmzDtmNrZSwgZ2VtZWluc2FtIGdlbnV0enQgbWl0ICVOICIKKyJEYXRlaShlbik6XG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0JVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTIKK21zZ2lkICJcdCVRIChAaSAjJWksIG1vZCB0aW1lICVJTSlcbiIKK21zZ3N0ciAiXHQlUSAoSW5vZGUgIyVpLCDDhG5kZXJ1bmdzemVpdCAlSU0pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1NworbXNnaWQgIlx0PEBmIG1ldGFkYXRhPlxuIgorbXNnc3RyICJcdDxAZi1NZXRhZGF0ZW4+XG4iCisKKyMuIEAtZXhwYW5kZWQ6IChUaGVyZSBhcmUgJU4gaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDYyCittc2dpZCAiIgorIihUaGVyZSBhcmUgJU4gQGlzIGNvbnRhaW5pbmcgQG0gQGJzLilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIihFcyBnaWJ0ICVOIElub2RlcywgZGllIG1laHJmYWNoIGJlbGVndGUgQmzDtmNrZSBlbnRoYWx0ZW4uKVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY3Cittc2dpZCAiIgorIkBtIEBicyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiTWVocmZhY2ggYmVsZWd0ZSBCbMO2Y2tlIHd1cmRlbiBiZXJlaXRzIG5ldSB6dWdlb3JkbmV0IGJ6dy4gZ2VrbG9udC5cbiIKKyJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNsb25lIGZpbGU6ICVtXG4iCittc2dzdHIgIkRhdGVpIGthbm4gbmljaHQgZ2VrbG9udCB3ZXJkZW46ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwODYKK21zZ2lkICJQYXNzIDI6IENoZWNraW5nIEBkIHN0cnVjdHVyZVxuIgorbXNnc3RyICJEdXJjaGdhbmcgMjogVmVyemVpY2huaXNzdHJ1a3R1ciB3aXJkIGdlcHLDvGZ0XG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgaW5vZGUgbnVtYmVyIGZvciAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG4gQGkgbnVtYmVyIGZvciAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIkZhbHNjaGUgSW5vZGUtTnVtbWVyIGbDvHIg4oCeLuKAnCBpbiBWZXJ6ZWljaG5pcy1Jbm9kZSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaW52YWxpZCBpbm9kZSAjOiAlRGkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5NgorbXNnaWQgIkBFIGhhcyBAbiBAaSAjOiAlRGkuXG4iCittc2dzdHIgIkVpbnRyYWcgaGF0IGZhbHNjaGUgSW5vZGUtTnVtbWVyOiAlRGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlICVEaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTAxCittc2dpZCAiQEUgaGFzIEBEL3VudXNlZCBAaSAlRGkuICAiCittc2dzdHIgIkVpbnRyYWcg4oCeJURu4oCcIGluICVwICglaSkgaGF0IGdlbMO2c2NodGVuL3VuYmVudXR6dGVuIElub2RlICVEaS4gICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gJy4nICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwNgorbXNnaWQgIkBFIEBMIHRvICcuJyAgIgorbXNnc3RyICJFaW50cmFnIOKAniVEbuKAnCBpbiAlcCAoJWkpIGlzdCBlaW4gTGluayBhdWYg4oCeLuKAnCAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHBvaW50cyB0byBpbm9kZSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTEKK21zZ2lkICJARSBwb2ludHMgdG8gQGkgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBAYi5cbiIKK21zZ3N0ciAiIgorIkVpbnRyYWcg4oCeJURu4oCcIGluICVwICglaSkgemVpZ3QgYXVmIGVpbmVuIElub2RlICglRGkpIGluIGVpbmVtIGRlZmVrdGVuICIKKyJCbG9jay5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gZGlyZWN0b3J5ICVQICglRGkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTYKK21zZ2lkICJARSBATCB0byBAZCAlUCAoJURpKS5cbiIKK21zZ3N0ciAiRWludHJhZyDigJ4lRG7igJwgaW4gJXAgKCVpKSBpc3QgZWluIExpbmsgYXVmIGRhcyBWZXJ6ZWljaG5pcyAlUCAoJURpKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gdGhlIHJvb3QgaW5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEyMQorbXNnaWQgIkBFIEBMIHRvIHRoZSBAci5cbiIKK21zZ3N0ciAiRWludHJhZyDigJ4lRG7igJwgaW4gJXAgKCVpKSBpc3QgZWluIExpbmsgYXVmIGRlbiBSb290LUlub2RlLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEyNgorbXNnaWQgIkBFIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4iCittc2dzdHIgIkVpbnRyYWcg4oCeJURu4oCcIGluICVwICglaSkgaGF0IGVpbiB1bnp1bMOkc3NpZ2VzIFplaWNoZW4gaW0gTmFtZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJGZWhsZW5kZSDigJ4u4oCcIGltIFZlcnplaWNobmlzLUlub2RlICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLi4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJGZWhsZW5kZXIgRWludHJhZyDigJ4uLuKAnCBpbSBWZXJ6ZWljaG5pcy1Jbm9kZSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogRmlyc3QgZW50cnkgJyVEbicgKGlub2RlPSVEaSkgaW4gZGlyZWN0b3J5IGlub2RlICVpICglcCkgc2hvdWxkIGJlICcuJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDEKK21zZ2lkICJGaXJzdCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSAoJXApIEBzICcuJ1xuIgorbXNnc3RyICIiCisiRGVyIGVyc3RlIEVpbnRyYWcg4oCeJURu4oCcIChJbm9kZT0lRGkpIGltIFZlcnplaWNobmlzLUlub2RlICVpICglcCkgc29sbHRlIOKAni7igJwgIgorInNlaW5cbiIKKworIy4gQC1leHBhbmRlZDogU2Vjb25kIGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSBzaG91bGQgYmUgJy4uJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDYKK21zZ2lkICJTZWNvbmQgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgQHMgJy4uJ1xuIgorbXNnc3RyICIiCisiRGVyIHp3ZWl0ZSBFaW50cmFnIOKAniVEbuKAnCAoSW5vZGU9JURpKSBpbSBWZXJ6ZWljaG5pcy1Jbm9kZSAlaSBzb2xsdGUg4oCeLi7igJwgIgorInNlaW5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mYWRkciBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSUYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTEKK21zZ2lkICJpX2ZhZGRyIEBGICVJRiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mYWRkciBmw7xyIElub2RlICVpICglUSkgaXN0ICVJRiwgc29sbHRlIE51bGwgc2Vpbi5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTYKK21zZ2lkICJpX2ZpbGVfYWNsIEBGICVJZiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9maWxlX2FjbCBmw7xyIElub2RlICVpICglUSkgaXN0ICVJZiwgc29sbHRlIE51bGwgc2Vpbi5cbiIKKworIy4gQC1leHBhbmRlZDogaV9kaXJfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZCwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2MQorbXNnaWQgImlfZGlyX2FjbCBARiAlSWQsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZGlyX2FjbCBmw7xyIElub2RlICVpICglUSkgaXN0ICVJZCwgc29sbHRlIE51bGwgc2Vpbi5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mcmFnIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTY2Cittc2dpZCAiaV9mcmFnIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZyYWcgZsO8ciBJbm9kZSAlaSAoJVEpIGlzdCAlTiwgc29sbHRlIE51bGwgc2Vpbi5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mc2l6ZSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE3MQorbXNnaWQgImlfZnNpemUgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfZnNpemUgZsO8ciBJbm9kZSAlaSAoJVEpIGlzdCAlTiwgQHMgbnVsbC5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlICglSW0pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzYKK21zZ2lkICJAaSAlaSAoJVEpIGhhcyBAbiBtb2RlICglSW0pLlxuIgorbXNnc3RyICJJbm9kZSAlaSAoJVEpIGhhdCBlaW5lbiB1bmfDvGx0aWdlbiBNb2R1cyAoJUltKS5cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBkaXJlY3RvcnkgY29ycnVwdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4MQorbXNnaWQgIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBAZCBjb3JydXB0ZWRcbiIKK21zZ3N0ciAiVmVyemVpY2huaXMtSW5vZGUgJWksICVCLCBPZmZzZXQgJU46IFZlcnplaWNobmlzIGRlZmVrdFxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4NgorbXNnaWQgIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuIgorbXNnc3RyICJWZXJ6ZWljaG5pcy1Jbm9kZSAlaSwgJUIsIE9mZnNldCAlTjogRGF0ZWluYW1lIHp1IGxhbmdcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiB1bmFsbG9jYXRlZCAlQi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTkxCittc2dpZCAiQGQgQGkgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgIgorbXNnc3RyICJWZXJ6ZWljaG5pcy1Jbm9kZSAlaSBoYXQgZWluZW4gbmljaHQgenVnZXdpZXNlbmVuICVCLiAgIgorCisjLiBALWV4cGFuZGVkOiAnLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5NgorIywgYy1mb3JtYXQKK21zZ2lkICInLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICIiCisiVmVyemVpY2huaXNlaW50cmFnIOKAni7igJwgaW0gVmVyemVpY2huaXMtSW5vZGUgJWkgaXN0IG5pY2h0IE5VTEwtdGVybWluaWVydFxuIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4uJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIiIKKyJWZXJ6ZWljaG5pc2VpbnRyYWcg4oCeLi7igJwgaW0gVmVyemVpY2huaXMtSW5vZGUgJWkgaXN0IG5pY2h0IE5VTEwtdGVybWluaWVydFxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjA2Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBjaGFyYWN0ZXIgQHYuXG4iCittc2dzdHIgIklub2RlICVpICglUSkgaXN0IGVpbiB1bmfDvGx0aWdlcyB6ZWljaGVub3JpZW50aWVydGVzIEdlcsOkdC5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGJsb2NrIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjExCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBAYiBAdi5cbiIKK21zZ3N0ciAiSW5vZGUgJWkgKCVRKSBpc3QgZWluIHVuZ8O8bHRpZ2VzIGJsb2Nrb3JpZW50aWVydGVzIEdlcsOkdC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTYKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4nIEBlLlxuIgorbXNnc3RyICJFaW50cmFnIOKAniVEbuKAnCBpbiAlcCAoJWkpIGlzdCBlaW4gZG9wcGVsdGVyIEVpbnRyYWcgZsO8ciDigJ4u4oCcLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLi4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjEKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4uJyBAZS5cbiIKK21zZ3N0ciAiRWludHJhZyDigJ4lRG7igJwgaW4gJXAgKCVpKSBpc3QgZWluIGRvcHBlbHRlciBFaW50cmFnIGbDvHIg4oCeLi7igJwuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNiBlMmZzY2svcHJvYmxlbS5jOjE1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICJJbnRlcm5lciBGZWhsZXI6IGRpcl9pbmZvIGbDvHIgJWkga2FubiBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIHJlY19sZW4gb2YgJURyLCBzaG91bGQgYmUgJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzMQorbXNnaWQgIkBFIGhhcyByZWNfbGVuIG9mICVEciwgQHMgJU4uXG4iCittc2dzdHIgIkVpbnRyYWcg4oCeJURu4oCcIGluICVwICglaSkgaGF0IGVpbmUgcmVjX2xlbiB2b24gJURyLCBzb2xsdGUgJU4gc2Vpbi5cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IHN0cnVjdHVyZTogJW1cbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gWnV3ZWlzZW4gZGVyIGljb3VudC1TdHJ1a3R1cjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgaXRlcmF0aW5nIG92ZXIgZGlyZWN0b3J5IGJsb2NrczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGl0ZXJhdGluZyBvdmVyIEBkIEBiczogJW1cbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRHVyY2hsYXVmZW4gZGVyIFZlcnplaWNobmlzYmzDtmNrZTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQ2Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiBkZXMgVmVyemVpY2huaXNibG9ja3MgJWIgKElub2RlICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjUxCittc2dpZCAiRXJyb3Igd3JpdGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVzIFZlcnplaWNobmlzYmxvY2tzICViIChJbm9kZSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9jayBmb3IgaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIG5ldyBAZCBAYiBmb3IgQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiIgorIkZlaGxlciBiZWltIFp1d2Vpc2VuIGVpbmVzIG5ldWVuIFZlcnplaWNobmlzYmxvY2tzIGbDvHIgSW5vZGUgJWkgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGVhbGxvY2F0aW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVhbGxvY2F0aW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJGZWhsZXIgYmVpIGRlciBGcmVpZ2FiZSB2b24gSW5vZGUgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBlbnRyeSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGQgQGUgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbiIKK21zZ3N0ciAiVmVyemVpY2huaXNlaW50cmFnIGbDvHIg4oCeLuKAnCBpbiAlcCAoJWkpIGlzdCBncm/Dny5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIEZJRk8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3MQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiSW5vZGUgJWkgKCVRKSBpc3QgZWluZSB1bmfDvGx0aWdlIEZJRk8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBzb2NrZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3NgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgc29ja2V0LlxuIgorbXNnc3RyICJJbm9kZSAlaSAoJVEpIGlzdCBlaW4gdW5nw7xsdGlnZXIgU29ja2V0LlxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHRvICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODEKK21zZ2lkICJTZXR0aW5nIGZpbGV0eXBlIGZvciBARSB0byAlTi5cbiIKK21zZ3N0ciAiRGF0ZWl0eXDDvCBmw7xyIEVpbnRyYWcg4oCeJURu4oCcIGluICVwICglaSkgd2lyZCBhdWYgJU4gZ2VzZXR6dC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBzaG91bGQgYmUgJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODYKK21zZ2lkICJARSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBAcyAlTikuXG4iCittc2dzdHIgIiIKKyJFaW50cmFnIOKAniVEbuKAnCBpbiAlcCAoJWkpIGhhdCBlaW5lbiBmYWxzY2hlbiBEYXRlaXR5cCAod2FyICVEdCwgc29sbHRlICVOICIKKyJzZWluKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZmlsZXR5cGUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTEKK21zZ2lkICJARSBoYXMgZmlsZXR5cGUgc2V0LlxuIgorbXNnc3RyICJFaW50cmFnIOKAniVEbuKAnCBpbiAlcCAoJWkpIGhhdCBEYXRlaXR5cCBnZXNldHp0LlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIHplcm8tbGVuZ3RoIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5NgorbXNnaWQgIkBFIGhhcyBhIEB6IG5hbWUuXG4iCittc2dzdHIgIkVpbnRyYWcg4oCeJURu4oCcIGluICVwICglaSkgaGF0IGVpbmVuIE5hbWVuIGRlciBMw6RuZ2UgTnVsbC5cbiIKKworIy4gQC1leHBhbmRlZDogU3ltbGluayAlUSAoaW5vZGUgIyVpKSBpcyBpbnZhbGlkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDEKK21zZ2lkICJTeW1saW5rICVRIChAaSAjJWkpIGlzIEBuLlxuIgorbXNnc3RyICJTeW1saW5rICVRIChJbm9kZSAjJWkpIGlzIGludmFsaWQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDYKK21zZ2lkICJAYSBAYiBARiBAbiAoJUlmKS5cbiIKK21zZ3N0ciAiRXJ3ZWl0ZXJ0ZS1BdHRyaWJ1dGUtQmxvY2sgZsO8ciBJbm9kZSAlaSAoJVEpIGlzdCB1bmfDvGx0aWcgKCVJZikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzExCittc2dpZCAiQGYgY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gQFMuXG4iCittc2dzdHIgIiIKKyJEYXRlaXN5c3RlbSBlbnRow6RsdCBncm/Dn2UgRGF0ZWllbiwgYWJlciBpbSBTdXBlcmJsb2NrIGlzdFxuIgorImRlciBCaXRzY2hhbHRlciBMQVJHRV9GSUxFIG5pY2h0IGdlc2V0enQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTYKK21zZ2lkICJAcCBAaCAlZDogJUIgbm90IHJlZmVyZW5jZWRcbiIKK21zZ3N0ciAiUHJvYmxlbSBpbSBIVFJFRS1WZXJ6ZWljaG5pcy1Jbm9kZSAlZDogJUIgaXN0IG5pY2h0IHJlZmVyZW56aWVydFxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjEKK21zZ2lkICJAcCBAaCAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuIgorbXNnc3RyICJQcm9ibGVtIGltIEhUUkVFLVZlcnplaWNobmlzLUlub2RlICVkOiAlQiBkb3BwZWx0IHJlZmVyZW56aWVydFxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjYKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuIgorbXNnc3RyICJQcm9ibGVtIGltIEhUUkVFLVZlcnplaWNobmlzLUlub2RlICVkOiAlQiBoYXQgdW5nw7xsdGlnZW4gTWluaW11bWhhc2hcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMxCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbiIKK21zZ3N0ciAiUHJvYmxlbSBpbSBIVFJFRS1WZXJ6ZWljaG5pcy1Jbm9kZSAlZDogJUIgaGF0IHVuZ8O8bHRpZ2VuIE1heGltYWxoYXNoXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzNgorbXNnaWQgIkBuIEBoICVkICglcSkuICAiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIEhUUkVFLVZlcnplaWNobmlzLUlub2RlICVkICglcSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSk6IGJhZCBibG9jayBudW1iZXIgJWIuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM0MAorbXNnaWQgIkBwIEBoICVkICglcSk6IGJhZCBAYiBudW1iZXIgJWIuXG4iCittc2dzdHIgIlByb2JsZW0gaW0gSFRSRUUtVmVyemVpY2huaXMtSW5vZGUgJWQgKCVxKTogZmFsc2NoZSBCbG9ja251bW1lciAlYi5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6IHJvb3Qgbm9kZSBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJAcCBAaCAlZDogcm9vdCBub2RlIGlzIEBuXG4iCittc2dzdHIgIlByb2JsZW0gaW0gSFRSRUUtVmVyemVpY2huaXMtSW5vZGUgJWQ6IFd1cnplbGtub3RlbiBpc3QgdW5nw7xsdGlnXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBsaW1pdCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1NQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gbGltaXQgKCVOKVxuIgorbXNnc3RyICIiCisiUHJvYmxlbSBpbSBIVFJFRS1WZXJ6ZWljaG5pcy1Jbm9kZSAlZDogJUIgaGF0IGVpbmUgdW5nw7xsdGlnZSBCZWdyZW56dW5nICIKKyIoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBjb3VudCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gY291bnQgKCVOKVxuIgorbXNnc3RyICIiCisiUHJvYmxlbSBpbSBIVFJFRS1WZXJ6ZWljaG5pcy1Jbm9kZSAlZDogJUIgaGF0IGVpbmVuIHVuZ8O8bHRpZ2VuIFrDpGhsZXJzdGFuZCAiCisiKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2NQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbiIKK21zZ3N0ciAiIgorIlByb2JsZW0gaW0gSFRSRUUtVmVyemVpY2huaXMtSW5vZGUgJWQ6ICVCIGhhdCBlaW5lIHVuc29ydGllcnRlIEhhc2h0YWJlbGxlXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBkZXB0aCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICIiCisiUHJvYmxlbSBpbSBIVFJFRS1WZXJ6ZWljaG5pcy1Jbm9kZSAlZDogJUIgaGF0IGVpbmUgdW5nw7xsdGlnZSBUaWVmZSAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzUKK21zZ2lkICJEdXBsaWNhdGUgQEUgZm91bmQuICAiCittc2dzdHIgIkRvcHBlbHRlciBFaW50cmFnIOKAniVEbuKAnCBpbiAlcCAoJWkpIGdlZnVuZGVuLiAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4KKyMuIEAtZXhwYW5kZWQ6IFJlbmFtZSB0byAlcworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgwCisjLCBuby1jLWZvcm1hdAorbXNnaWQgIiIKKyJARSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuIgorIlJlbmFtZSB0byAlcyIKK21zZ3N0ciAiIgorIkVpbnRyYWcg4oCeJURu4oCcIGluICVwICglaSkgaGF0IGtlaW5lbiBlaW5kZXV0aWdlbiBEYXRlaW5hbWVuLlxuIgorIldpcmQgaW4gJXMgdW1iZW5hbm50IgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgZm91bmQuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODUKK21zZ2lkICIiCisiRHVwbGljYXRlIEBlICclRG4nIGZvdW5kLlxuIgorIlx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJEb3BwZWx0ZXIgRWludHJhZyDigJ4lRG7igJwgZ2VmdW5kZW4uXG4iCisiXHQlcCAoJWkpIHdpcmQgZsO8ciBkaWUgTmV1ZXJzdGVsbHVuZyBtYXJraWVydC5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogaV9ibG9ja3NfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTAKK21zZ2lkICJpX2Jsb2Nrc19oaSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9ibG9ja3NfaGkgZsO8ciBJbm9kZSAlaSAoJVEpICVOLCBzb2xsdGUgTnVsbCBzZWluLlxuIgorCisjLiBALWV4cGFuZGVkOiBVbmV4cGVjdGVkIGJsb2NrIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTUKK21zZ2lkICJVbmV4cGVjdGVkIEBiIGluIEBoICVkICglcSkuXG4iCittc2dzdHIgIlVuZXJ3YXJ0ZXRlciBCbG9jayBpbSBIVFJFRS1WZXJ6ZWljaG5pcy1Jbm9kZSAlZCAoJXEpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGluIGdyb3VwICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTkKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBpbiBAZyAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbiIKK21zZ3N0ciAiIgorIkVpbnRyYWcg4oCeJURu4oCcIGluICVwICglaSkgdmVyd2Vpc3QgYXVmIElub2RlICVEaSBpbiBHcnVwcGUgJWcsIGbDvHIgZGllICIKKyJfSU5PREVfVU5JTklUIGdlc2V0enQgaXN0LlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGZvdW5kIGluIGdyb3VwICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDQKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBmb3VuZCBpbiBAZyAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbiIKK21zZ3N0ciAiIgorIkVpbnRyYWcg4oCeJURu4oCcIGluICVwICglaSkgdmVyd2Vpc3QgYXVmIElub2RlICVEaSwgZGVyIGltIEJlcmVpY2ggdW5nZW51dHp0ZXIgIgorIklub2Rlc1xuIgorInZvbiBHcnVwcGUgJWcgenUgZmluZGVuIGlzdC5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbF9oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwOQorbXNnaWQgImlfZmlsZV9hY2xfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2xfaGkgZsO8ciBJbm9kZSAlaSAoJVEpIGlzdCAlTiwgc29sbHRlIE51bGwgc2Vpbi5cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxNgorbXNnaWQgIlBhc3MgMzogQ2hlY2tpbmcgQGQgY29ubmVjdGl2aXR5XG4iCittc2dzdHIgIkR1cmNoZ2FuZyAzOiBWZXJ6ZWljaG5pc3Zlcmtuw7xwZnVuZ2VuIHdlcmRlbiBnZXByw7xmdFxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIG5vdCBhbGxvY2F0ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyMQorbXNnaWQgIkByIG5vdCBhbGxvY2F0ZWQuICAiCittc2dzdHIgIlJvb3QtSW5vZGUgbmljaHQgenVnZW9yZG5ldC4gIgorCisjLiBALWV4cGFuZGVkOiBObyByb29tIGluIGxvc3QrZm91bmQgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjYKK21zZ2lkICJObyByb29tIGluIEBsIEBkLiAgIgorbXNnc3RyICJLZWluIFBsYXR6IGltIFZlcnplaWNobmlzIOKAnmxvc3QrZm91bmTigJwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIk5pY2h0IHZlcmJ1bmRlbmVyIFZlcnplaWNobmlzLUlub2RlICVpICglcClcbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzYKK21zZ2lkICIvQGwgbm90IGZvdW5kLiAgIgorbXNnc3RyICIvbG9zdCtmb3VuZCBuaWNodCBnZWZ1bmRlbi4gICIKKworIy4gQC1leHBhbmRlZDogJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIHNob3VsZCBiZSAlcSAoJWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDEKK21zZ2lkICInLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKK21zZ3N0ciAi4oCeLi7igJwgaW4gJVEgKCVpKSBpc3QgJVAgKCVqKSwgc29sbHRlICVxICglZCkgc2Vpbi5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIG9yIG5vbi1leGlzdGVudCAvbG9zdCtmb3VuZC4gIENhbm5vdCByZWNvbm5lY3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ0NgorbXNnaWQgIkJhZCBvciBub24tZXhpc3RlbnQgL0BsLiAgQ2Fubm90IHJlY29ubmVjdC5cbiIKK21zZ3N0ciAiIgorIlZlcnplaWNobmlzIC9sb3N0K2ZvdW5kIGlzdCBmYWxzY2ggb2RlciBmZWhsdC4gV2llZGVydmVyYmluZGVuIG5pY2h0ICIKKyJtw7ZnbGljaC5cbiIKKworIy4gQC1leHBhbmRlZDogQ291bGQgbm90IGV4cGFuZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBleHBhbmQgL0BsOiAlbVxuIgorbXNnc3RyICJFcndlaXRlcm4gdm9uIC9sb3N0K2ZvdW5kIG5pY2h0IG3DtmdsaWNoOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlY29ubmVjdCAlaTogJW1cbiIKK21zZ3N0ciAiV2llZGVydmVyYmluZGVuIHZvbiAlaSBuaWNodCBtw7ZnbGljaDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvQGw6ICVtXG4iCittc2dzdHIgIkZlaGxlciB3w6RocmVuZCBkZXIgU3VjaGUgbmFjaCAvbG9zdCtmb3VuZDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19ibG9jazogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfQGI6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgIiIKKyJleHQyZnNfbmV3X0BiOiAlbSB3w6RocmVuZCBkZXMgVmVyc3VjaGVzLCBkYXMgVmVyemVpY2huaXMgL2xvc3QrZm91bmQgenUgIgorImVyemV1Z2VuLlxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2lub2RlOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AaTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiIgorImV4dDJmc19uZXdfQGk6ICVtIHfDpGhyZW5kIGRlcyBWZXJzdWNoZXMsIGRhcyBWZXJ6ZWljaG5pcyAvbG9zdCtmb3VuZCB6dSAiCisiZXJ6ZXVnZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X2Rpcl9AYjogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IEBkIEBiXG4iCittc2dzdHIgIiIKKyJleHQyZnNfbmV3X2Rpcl9AYjogJW0gd8OkaHJlbmQgZGVzIFZlcnN1Y2hlcywgZGFzIFZlcnplaWNobmlzIC9sb3N0K2ZvdW5kIHp1ICIKKyJlcnpldWdlbi5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazogJW0gd2hpbGUgd3JpdGluZyB0aGUgZGlyZWN0b3J5IGJsb2NrIGZvciAvbG9zdCtmb3VuZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gd2hpbGUgd3JpdGluZyB0aGUgQGQgQGIgZm9yIC9AbFxuIgorbXNnc3RyICIiCisiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gd8OkaHJlbmQgZGVzIFNjaHJlaWJlbnMgZGVzIFZlcnplaWNobmlzYmxvY2tzIGbDvHIgLyIKKyJsb3N0K2ZvdW5kXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGFkanVzdGluZyBpbm9kZSBjb3VudCBvbiBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgYWRqdXN0aW5nIEBpIGNvdW50IG9uIEBpICVpXG4iCittc2dzdHIgIkZlaGxlciB3w6RocmVuZCBkZXMgQW5wYXNzZW5zIGRlciBJbm9kZS1BbnphaGwgYXVmIElub2RlICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkbid0IGZpeCBwYXJlbnQgb2YgaW5vZGUgJWk6ICVtXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKyJFaWdlbnTDvG1lciB2b24gSW5vZGUgJWkga29ubnRlIG5pY2h0IHJlcGFyaWVydCB3ZXJkZW46ICVtXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkbid0IGZpeCBwYXJlbnQgb2YgaW5vZGUgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IGRpcmVjdG9yeSBlbnRyeVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBAZCBAZVxuIgorIlxuIgorbXNnc3RyICIiCisiRWlnZW50w7xtZXIgdm9uIElub2RlICVpIGtvbm50ZSBuaWNodCByZXBhcmllcnQgd2VyZGVuOiBcbiIKKyJWZXJ6ZWljaG5pc2VpbnRyYWcgZGVzIEVpZ2VudMO8bWVycyB3dXJkZSBuaWNodCBnZWZ1bmRlbi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgcm9vdCBkaXJlY3RvcnkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHJvb3QgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJ6ZXVnZW4gZGVzIFd1cnplbHZlcnplaWNobmlzc2VzICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgL0BsIEBkICglcyk6ICVtXG4iCittc2dzdHIgIkZlaGxlciBiZWltIEVyemV1Z2VuIGRlcyBWZXJ6ZWljaG5pc3NlcyAvbG9zdCtmb3VuZCAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeTsgYWJvcnRpbmcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxNgorbXNnaWQgIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIKK21zZ3N0ciAiRGVyIFd1cnplbC1Jbm9kZSBpc3Qga2VpbiBWZXJ6ZWljaG5pczsgQWJicnVjaC5cbiIKKworIy4gQC1leHBhbmRlZDogQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIHJvb3QgaW5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUyMQorbXNnaWQgIkNhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSBAci5cbiIKK21zZ3N0ciAiT2huZSBXdXJ6ZWwtSW5vZGUgaXN0IHdlaXRlcmVzIEFyYmVpdGVuIG5pY2h0IG3DtmdsaWNoLlxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBpcyBub3QgYSBkaXJlY3RvcnkgKGlubz0laSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIi9AbCBpcyBub3QgYSBAZCAoaW5vPSVpKVxuIgorbXNnc3RyICIvbG9zdCtmb3VuZCBpc3Qga2VpbiBWZXJ6ZWljaG5pcyAoaW5vPSVpKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzgKK21zZ2lkICJQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzXG4iCittc2dzdHIgIkR1cmNoZ2FuZyAzQTogVmVyemVpY2huaXNzZSB3ZXJkZW4gb3B0aW1pZXJ0XG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRpcnNfdG9faGFzaCBpdGVyYXRvcjogJW1cbiIKK21zZ3N0ciAiZGlyc190b19oYXNoIEl0ZXJhdG9yIGtvbm50ZSBuaWNodCBlcnpldWd0IHdlcmRlbjogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQ4Cittc2dpZCAiRmFpbGVkIHRvIG9wdGltaXplIGRpcmVjdG9yeSAlcSAoJWQpOiAlbVxuIgorbXNnc3RyICJWZXJ6ZWljaG5pcyAlcSAoJWQpIGtvbm50ZSBuaWNodCBvcHRpbWllcnQgd2VyZGVuOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NTMKK21zZ2lkICJPcHRpbWl6aW5nIGRpcmVjdG9yaWVzOiAiCittc2dzdHIgIlZlcnplaWNobmlzc2Ugd2VyZGVuIG9wdGltaWVydDogIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzAKK21zZ2lkICJQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHNcbiIKK21zZ3N0ciAiRHVyY2hnYW5nIDQ6IFJlZmVyZW56esOkaGxlciB3ZXJkZW4gw7xiZXJwcsO8ZnRcbiIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCB6ZXJvLWxlbmd0aCBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEB6IEBpICVpLiAgIgorbXNnc3RyICJOaWNodCB2ZXJidW5kZW5lciBJbm9kZSBkZXIgTMOkbmdlIE51bGwgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEBpICVpXG4iCittc2dzdHIgIk5pY2h0IHZlcmJ1bmRlbmVyIElub2RlICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg1Cittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgIkRlciBSZWZlcmVuenrDpGhsZXIgdm9uIElub2RlICVpIGlzdCAlSWwsIHNvbGx0ZSBhYmVyICVOIHNlaW4uICAiCisKKyMgU28gZXR3YXMgc29sbHRlIGluIGVpbmVyIGVybnN0enVuZWhtZW5kZW4gU29mdHdhcmUgbmljaHQgZXJzY2hlaW5lbiwKKyMgc2VsYnN0IHdlbm4gZXMgKGRlcmJlcikgSHVtb3IgaXN0LgorIy4gQC1leHBhbmRlZDogV0FSTklORzogUFJPR1JBTU1JTkcgQlVHIElOIEUyRlNDSyFcbgorIy4gQC1leHBhbmRlZDogXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbgorIy4gQC1leHBhbmRlZDogaW5vZGVfbGlua19pbmZvWyVpXSBpcyAlTiwgaW5vZGUuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IHNob3VsZCBiZSB0aGUgc2FtZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg5Cittc2dpZCAiIgorIldBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4iCisiXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbiIKKyJAaV9saW5rX2luZm9bJWldIGlzICVOLCBAaS5pX2xpbmtzX2NvdW50IGlzICVJbC4gIFRoZXkgQHMgdGhlIHNhbWUhXG4iCittc2dzdHIgIiIKKyJXQVJOVU5HOiBQUk9HUkFNTUlFUkZFSExFUiBJTiBFMkZTQ0shXG4iCisiXHRPREVSIEpFTUFORCBQUsOcRlQgRUlOIEVJTkdFSMOETkdURVMgKEFLVElWRVMpIERBVEVJU1lTVEVNLlxuIgorIkBpX2xpbmtfaW5mb1slaV0gaXN0ICVOLCBAaS5pX2xpbmtzX2NvdW50IGlzdCAlSWwuIFNpZSBzb2xsdGVuIGlkZW50aXNjaCAiCisic2VpbiFcbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU5OQorbXNnaWQgIlBhc3MgNTogQ2hlY2tpbmcgQGcgc3VtbWFyeSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICJEdXJjaGdhbmcgNTogWnVzYW1tZW5nZWZhc3N0ZSBHcnVwcGVuaW5mb3JtYXRpb24gd2lyZCBnZXByw7xmdFxuIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBpbm9kZSBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDQKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAaSBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIkF1ZmbDvGxsYnl0ZSBhbSBFbmRlIGRlciBJbm9kZS1CaXRtYXAgaXN0IG5pY2h0IGdlc2V0enQuICIKKworIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgYmxvY2sgYml0bWFwIGlzIG5vdCBzZXQuIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjA5Cittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGIgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICJBdWZmw7xsbGJ5dGUgYW0gRW5kZSBkZXIgSW5vZGUtQml0bWFwIGlzdCBuaWNodCBnZXNldHp0LiAiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MTQKK21zZ2lkICJAYiBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJVbnRlcnNjaGllZGUgaW4gZGVyIEJsb2NrLUJpdG1hcDogIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjM0Cittc2dpZCAiQGkgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiVW50ZXJzY2hpZWRlIGluIGRlciBJbm9kZS1CaXRtYXA6ICIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTQKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIkRpZSBBbnphaGwgZnJlaWVyIElub2RlcyBmw7xyIEdydXBwZSAjJWcgaXN0IGZhbHNjaCAoJWksIGdlesOkaGx0PSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTkKK21zZ2lkICJEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIiIKKyJEaWUgQW56YWhsIGRlciBWZXJ6ZWljaG5pc3NlIGbDvHIgR3J1cHBlICMlZyBpc3QgZmFsc2NoICglaSwgZ2V6w6RobHQ9JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjQKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICJEaWUgQW56YWhsIGZyZWllciBJbm9kZXMgaXN0IGZhbHNjaCAoJWksIGdlesOkaGx0PSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjkKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIkRpZSBBbnphaGwgZnJlaWVyIEJsw7Zja2UgaW4gR3J1cHBlICMlZyBpc3QgZmFsc2NoICglYiwgZ2V6w6RobHQ9JWMpLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NzQKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJEaWUgQW56YWhsIGZyZWllciBCbMO2Y2tlIGlzdCBmYWxzY2ggKCViLCBnZXrDpGhsdD0lYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBST0dSQU1NSU5HIEVSUk9SOiBmaWxlc3lzdGVtICgjJU4pIGJpdG1hcCBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBiaXRtYXAgCisjLiBALWV4cGFuZGVkOiBlbmRwb2ludHMgKCVpLCAlailcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjc5Cittc2dpZCAiIgorIlBST0dSQU1NSU5HIEVSUk9SOiBAZiAoIyVOKSBAQiBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBAQiAiCisiZW5kcG9pbnRzICglaSwgJWopXG4iCittc2dzdHIgIiIKKyJQUk9HUkFNTUlFUkZFSExFUjogRGF0ZWlzeXN0ZW0gKCMlTikgQml0bWFwLUVuZHB1bmt0ZSAoJWIsICVjKSBzdGltbWVuZW4gIgorIm5pY2h0XG4iCisibWl0IGRlbiBiZXJlY2huZXRlbiBCaXRtYXAtRW5kcHVua3RlbiAoJWksICVqKSDDvGJlcmVpblxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2ODUKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogZnVkZ2luZyBlbmQgb2YgYml0bWFwICglTilcbiIKK21zZ3N0ciAiSW50ZXJuZXIgRmVobGVyOiBkYXMgRW5kZSBkZXIgQml0bWFwICglTikgd2lyZCBlcnJhdGVuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgaW5vZGUgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAaSBAQjogJW1cbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gSGluZWlua29waWVyZW4gZGVyIElub2RlLUJpdG1hcDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBiIEBCOiAlbVxuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBIaW5laW5rb3BpZXJlbiBkZXIgRXJzYXR6LUJsb2NrYml0bWFwOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBibG9jayhzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBiKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuIgorbXNnc3RyICIiCisiQmzDtmNrZSB2b24gR3J1cHBlICVnIHNpbmQgaW4gQmVudXR6dW5nLCBvYndvaGwgZGllIEdydXBwZSBhbHMgQkxPQ0tfVU5JTklUICIKKyJtYXJraWVydCBpc3RcbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgaW5vZGUocykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAaShzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbiIKK21zZ3N0ciAiIgorIkRpZSBJbm9kZXMgZGVyIEdydXBwZSAlZyBzaW5kIGluIEJlbnV0enVuZywgb2J3b2hsIGRpZSBHcnVwcGUgYWxzICIKKyJJTk9ERV9VTklOSVQgbWFya2llcnQgaXN0XG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlY3JlYXRlIGpvdXJuYWwKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTczMgorbXNnaWQgIlJlY3JlYXRlIEBqIgorbXNnc3RyICJKb3VybmFsIHdpcmQgd2llZGVyaGVyZ2VzdGVsbHQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTczNworbXNnaWQgIlVwZGF0ZSBxdW90YSBpbmZvIGZvciBxdW90YSB0eXBlICVOIgorbXNnc3RyICJRdW90YS1JbmZvIGbDvHIgVHlwICVOIHdpcmQgYWt0dWFsaXNpZXJ0IgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzZXR0aW5nIGJsb2NrIGdyb3VwIGNoZWNrc3VtIGluZm86ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc0MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIEBiIEBnIGNoZWNrc3VtIGluZm86ICVtXG4iCittc2dzdHIgImJlaW0gU2V0emVuIGRlciBCbG9ja2dydXBwZW4tUHLDvGZzdW1tZW5pbmZvOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBmaWxlIHN5c3RlbSBpbmZvOiAlbVxuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiBkZSBEZXIgRGF0ZWlzeXN0ZW1pbmZvOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZmx1c2hpbmcgd3JpdGVzIHRvIHN0b3JhZ2UgZGV2aWNlOiAlbVxuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVyIGdlcHVmZmVydGVuIERhdGVuOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5oYW5kbGVkIGVycm9yIGNvZGUgKDB4JXgpIVxuIgorbXNnc3RyICJVbmJlbnV0enRlciBGZWhsZXJjb2RlICgweCV4KSFcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxOTk2IGUyZnNjay9wcm9ibGVtLmM6MjAwMAorbXNnaWQgIklHTk9SRUQiCittc2dzdHIgIklHTk9SSUVSVCIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVkLCBlbGFwc2VkIHRpbWU6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCittc2dzdHIgIkJlbnV0enRlciBTcGVpY2hlcjogJWQsIHZlcmdhbmdlbmRlIFplaXQ6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNpemUgb2YgaW5vZGU9JWRcbiIKK21zZ3N0ciAiR3LDtsOfZSBkZXMgSW5vZGVzPSVkXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjExOQorbXNnaWQgIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iCittc2dzdHIgImJlaW0gU3RhcnRlbiBkZXIgSW5vZGUtUHLDvGZ1bmciCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjEzMAorbXNnaWQgIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iCittc2dzdHIgInfDpGhyZW5kIGRlciBJbm9kZS1QcsO8ZnVuZyIKKworIzogZTJmc2NrL3N1cGVyLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZm9yIGlub2RlICVkIgorbXNnc3RyICJ3w6RocmVuZCBkZXMgQXVmcnVmcyB2b24gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZsO8ciBJbm9kZSAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZm9yIGlub2RlICVkIgorbXNnc3RyICJ3w6RocmVuZCBkZXMgQXVmcnVmcyB2b24gZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZsO8ciBJbm9kZSAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6Mjc0Cittc2dpZCAiVHJ1bmNhdGluZyIKK21zZ3N0ciAiV2lyZCBnZWvDvHJ6dCIKKworIzogZTJmc2NrL3N1cGVyLmM6Mjc1Cittc2dpZCAiQ2xlYXJpbmciCittc2dzdHIgIldpcmQgYmVyZWluaWd0IgorCisjOiBlMmZzY2svdW5peC5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1wYW55cmNkZnZ0REZWXSBbLWIgc3VwZXJibG9ja10gWy1CIGJsb2Nrc2l6ZV1cbiIKKyJcdFx0Wy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIFstUCBwcm9jZXNzX2lub2RlX3NpemVdXG4iCisiXHRcdFstbHwtTCBiYWRfYmxvY2tzX2ZpbGVdIFstQyBmZF0gWy1qIGV4dGVybmFsX2pvdXJuYWxdXG4iCisiXHRcdFstRSBleHRlbmRlZC1vcHRpb25zXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIkF1ZnJ1ZjogJXMgWy1wYW55cmNkZnZ0REZWXSBbLWIgU3VwZXJibG9ja10gWy1CIEJsb2NrZ3LDtsOfZV1cbiIKKyJcdFx0Wy1JIElub2RlX1B1ZmZlcl9CbMO2Y2tlXSBbLVAgUHJvemVzc19Jbm9kZWdyw7bDn2VdXG4iCisiXHRcdFstbHwtTCBCYWRfQmxvY2tzX0RhdGVpXSBbLUMgRGF0ZWlkZXNrcmlwdG9yXSBbLWogZXh0ZXJuZXNfSm91cm5hbF1cbiIKKyJcdFx0Wy1FIGVyd2VpdGVydGVfT3B0aW9uZW5dIEdlcsOkdFxuIgorCisjOiBlMmZzY2svdW5peC5jOjgwCittc2dpZCAiIgorIlxuIgorIkVtZXJnZW5jeSBoZWxwOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgcmVwYWlyIChubyBxdWVzdGlvbnMpXG4iCisiIC1uICAgICAgICAgICAgICAgICAgIE1ha2Ugbm8gY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbVxuIgorIiAteSAgICAgICAgICAgICAgICAgICBBc3N1bWUgXCJ5ZXNcIiB0byBhbGwgcXVlc3Rpb25zXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBiYWQgYmxvY2tzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmFkYmxvY2sgIgorImxpc3RcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBjbGVhblxuIgorbXNnc3RyICIiCisiXG4iCisiTm90ZmFsbGhpbGZlOlxuIgorIiAtcCAgICAgICAgYXV0b21hdGlzY2hlIFJlcGFyYXR1ciAoa2VpbmUgRnJhZ2VuKVxuIgorIiAtbiAgICAgICAga2VpbmUgVmVyw6RuZGVydW5nZW4gYW0gRGF0ZWlzeXN0ZW0gdm9ybmVobWVuXG4iCisiIC15ICAgICAgICBBbGxlIEZyYWdlbiBtaXQg4oCeSmHigJ0gYmVuYXR3b3J0ZW5cbiIKKyIgLWMgICAgICAgIE5hY2ggZGVmZWt0ZW4gQmzDtmNrZW4gc3VjaGVuIHVuZCBkaWVzZSB6dXJcbiIKKyIgICAgICAgICAgICAgTGlzdGUgZGVyIGRlZmVrdGVuIEJsw7Zja2UgaGluenVmw7xnZW5cbiIKKyIgLWYgICAgICAgIERpZSDDnGJlcnByw7xmdW5nIGVyendpbmdlbiwgYXVjaCB3ZW5uIGFsbGVzIGkuTy4gZXJzY2hlaW50XG4iCisKKyM6IGUyZnNjay91bml4LmM6ODYKK21zZ2lkICIiCisiIC12ICAgICAgICAgICAgICAgICAgIEJlIHZlcmJvc2VcbiIKKyIgLWIgc3VwZXJibG9jayAgICAgICAgVXNlIGFsdGVybmF0aXZlIHN1cGVyYmxvY2tcbiIKKyIgLUIgYmxvY2tzaXplICAgICAgICAgRm9yY2UgYmxvY2tzaXplIHdoZW4gbG9va2luZyBmb3Igc3VwZXJibG9ja1xuIgorIiAtaiBleHRlcm5hbF9qb3VybmFsICBTZXQgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGpvdXJuYWxcbiIKKyIgLWwgYmFkX2Jsb2Nrc19maWxlICAgQWRkIHRvIGJhZGJsb2NrcyBsaXN0XG4iCisiIC1MIGJhZF9ibG9ja3NfZmlsZSAgIFNldCBiYWRibG9ja3MgbGlzdFxuIgorbXNnc3RyICIiCisiIC12ICAgICAgICAgICAgICAgICAgIEF1c2bDvGhybGljaGUgQXVzZ2FiZW5cbiIKKyIgLWIgU3VwZXJibG9jayAgICAgICAgU3VwZXJibG9ja2tvcGllIHZlcndlbmRlblxuIgorIiAtQiBCbG9ja2dyw7bDn2UgICAgICAgIEJsb2NrZ3LDtsOfZSBiZWltIFN1Y2hlbiBkZXMgU3VwZXJibG9ja3MgZXJ6d2luZ2VuXG4iCisiIC1qIGV4dGVybmVzLUpvdXJuYWwgIEFuZ2FiZSBkZXMgU3BlaWNoZXJvcnRlcyBkZXMgZXh0ZXJuZW4gSm91bmFsc1xuIgorIiAtbCBiYWRfYmxvY2tzX2ZpbGUgICBadXIgTGlzdGUgZGVyIGRlZmVrdGVuIEJsw7Zja2UgaGluenVmw7xnZW5cbiIKKyIgLUwgYmFkX2Jsb2Nrc19maWxlICAgTGlzdGUgZGVyIGRlZmVrdGVuIEJsw7Zja2UgZGVmaW5pZXJlblxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXUvJXUgZmlsZXMgKCUwZC4lZCUlIG5vbi1jb250aWd1b3VzKSwgJWxsdS8lbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIlczogJXUvJXUgRGF0ZWllbiAoJTBkLiVkJSUgbmljaHQgenVzYW1tZW5ow6RuZ2VuZCksICVsbHUvJWxsdSBCbMO2Y2tlXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlMTJ1IGlub2RlIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgaW5vZGVzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiUxMnUgSW5vZGUgaXN0IGluIEJlbnV0enVuZyAoJTIuMmYlJSB2b24gJXUpXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IElub2RlcyBzaW5kIGluIEJlbnV0enVuZyAoJTIuMmYlJSB2b24gJXUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIlMTJ1IG5pY2h0IHp1c2FtbWVuaMOkbmdlbmRlIERhdGVpICglMGQuJWQlJSlcbiIKK21zZ3N0clsxXSAiJTEydSBuaWNodCB6dXNhbW1lbmjDpG5nZW5kZSBEYXRlaWVuICglMGQuJWQlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcnkgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yaWVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiJTEydSBuaWNodCB6dXNhbW1lbmjDpG5nZW5kZXMgVmVyemVpY2huaXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzFdICIlMTJ1IG5pY2h0IHp1c2FtbWVuaMOkbmdlbmRlIFZlcnplaWNobmlzc2UgKCUwZC4lZCUlKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgICAgICAgIyBvZiBpbm9kZXMgd2l0aCBpbmQvZGluZC90aW5kIGJsb2NrczogJXUvJXUvJXVcbiIKK21zZ3N0ciAiICAgICAgICAgICAgICMgdm9uIElub2RlcyBtaXQgaW5kL2RpbmQvdGluZCBCbMO2Y2tlbjogJXUvJXUvJXVcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzkKK21zZ2lkICIgICAgICAgICAgICAgRXh0ZW50IGRlcHRoIGhpc3RvZ3JhbTogIgorbXNnc3RyICIgICAgICAgICAgICAgSGlzdG9ncmFtbSBkZXIgVGllZmUgdm9uIEVyd2VpdGVydW5nZW46ICIKKworIzogZTJmc2NrL3VuaXguYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEybGx1IGJsb2NrIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnaWRfcGx1cmFsICIlMTJsbHUgYmxvY2tzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnc3RyWzBdICIlMTJsbHUgQmxvY2sgd2lyZCBiZW51dHp0ICglMi4yZiUlIHZvbiAlbGx1KVxuIgorbXNnc3RyWzFdICIlMTJsbHUgQmzDtmNrZSB3ZXJkZW4gYmVudXR6dCAoJTIuMmYlJSB2b24gJWxsdSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBiYWQgYmxvY2tcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBiYWQgYmxvY2tzXG4iCittc2dzdHJbMF0gIiUxMnUgZGVmZWt0ZXIgQmxvY2tcbiIKK21zZ3N0clsxXSAiJTEydSBkZWZla3RlIEJsw7Zja2VcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsYXJnZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGFyZ2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBncm/Dn2UgRGF0ZWlcbiIKK21zZ3N0clsxXSAiJTEydSBncm/Dn2UgRGF0ZWllblxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlc1xuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJTEydSByZWd1bMOkcmUgRGF0ZWlcbiIKK21zZ3N0clsxXSAiIgorIlxuIgorIiUxMnUgcmVndWzDpHJlIERhdGVpZW5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBkaXJlY3RvcnlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBkaXJlY3Rvcmllc1xuIgorbXNnc3RyWzBdICIlMTJ1IFZlcnplaWNobmlzXG4iCittc2dzdHJbMV0gIiUxMnUgVmVyemVpY2huaXNzZVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSB6ZWljaGVub3JpZW50aWVydGUgR2Vyw6R0ZWRhdGVpXG4iCittc2dzdHJbMV0gIiUxMnUgemVpY2hlbm9yaWVudGllcnRlIEdlcsOkdGVkYXRlaWVuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBibG9jayBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBCbG9ja2dlcsOkdGVkYXRlaVxuIgorbXNnc3RyWzFdICIlMTJ1IEJsb2NrZ2Vyw6R0ZWRhdGVpZW5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWZvXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlmb3NcbiIKK21zZ3N0clswXSAiJTEydSBGaWZvXG4iCittc2dzdHJbMV0gIiUxMnUgRmlmb3NcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsaW5rXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGlua3NcbiIKK21zZ3N0clswXSAiJTEydSBWZXJrbsO8cGZ1bmdcbiIKK21zZ3N0clsxXSAiJTEydSBWZXJrbsO8cGZ1bmdlblxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHN5bWJvbGljIGxpbmsiCittc2dpZF9wbHVyYWwgIiUxMnUgc3ltYm9saWMgbGlua3MiCittc2dzdHJbMF0gIiUxMnUgc3ltYm9saXNjaGUgVmVya27DvHBmdW5nIgorbXNnc3RyWzFdICIlMTJ1IHN5bWJvbGlzY2hlIFZlcmtuw7xwZnVuZ2VuIgorCisjOiBlMmZzY2svdW5peC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgKCV1IGZhc3Qgc3ltYm9saWMgbGluaylcbiIKK21zZ2lkX3BsdXJhbCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmtzKVxuIgorbXNnc3RyWzBdICIgKCV1IHNjaG5lbGxlIHN5bWJvbGlzY2hlIFZlcmtuw7xwZnVuZylcbiIKK21zZ3N0clsxXSAiICgldSBzY2huZWxsZSBzeW1ib2xpc2NoZSBWZXJrbsO8cGZ1bmdlbilcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzb2NrZXRcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBzb2NrZXRzXG4iCittc2dzdHJbMF0gIiUxMnUgU29ja2V0XG4iCittc2dzdHJbMV0gIiUxMnUgU29ja2V0c1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IERhdGVpXG4iCittc2dzdHJbMV0gIiUxMnUgRGF0ZWllblxuIgorCisjOiBlMmZzY2svdW5peC5jOjIzMiBtaXNjL2JhZGJsb2Nrcy5jOjk5MyBtaXNjL3R1bmUyZnMuYzoyMTIyIG1pc2MvdXRpbC5jOjMxNgorIzogcmVzaXplL21haW4uYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLiIKK21zZ3N0ciAiYmVpIGRlciBQcsO8ZnVuZywgb2IgJXMgZWluZ2Vow6RuZ3QgaXN0LiIKKworIzogZTJmc2NrL3VuaXguYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZyEgICVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIldhcm51bmchICVzIGlzdCBlaW5nZWjDpG5ndC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZyEgICVzIGlzIGluIHVzZS5cbiIKK21zZ3N0ciAiV2FybnVuZyEgJXMgd2lyZCB2ZXJ3ZW5kZXQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIiVzIGlzdCBlaW5nZWjDpG5ndC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW4gdXNlLlxuIgorbXNnc3RyICIlcyB3aXJkIHZlcndlbmRldC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjYKK21zZ2lkICIiCisiQ2Fubm90IGNvbnRpbnVlLCBhYm9ydGluZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkZvcnRzZXR6dW5nIG5pY2h0IG3DtmdsaWNoLCB3aXJkIGFiZ2Vicm9jaGVuLlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2OAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJXQVJOSU5HISEhICBUaGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLiAgIElmIHlvdSBjb250aW51ZSB5b3UgKioqV0lMTCoqKlxuIgorImNhdXNlICoqKlNFVkVSRSoqKiBmaWxlc3lzdGVtIGRhbWFnZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIldBUk5VTkchISEgRGFzIERhdGVpc3lzdGVtIGlzdCBlaW5nZWjDpG5ndC4gV2VubiBTaWUgZm9ydGZhaHJlbiwgIgorIioqKldFUkRFTioqKlxuIgorIlNpZSAqKipTQ0hXRVJXSUVHRU5ERSoqKiBTY2jDpGRlbiBhbSBEYXRlaXN5c3RlbSB2ZXJ1cnNhY2hlbi5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNzMKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gY29udGludWUiCittc2dzdHIgIldpcmtsaWNoIGZvcnRmYWhyZW4iCisKKyM6IGUyZnNjay91bml4LmM6Mjc1Cittc2dpZCAiY2hlY2sgYWJvcnRlZC5cbiIKK21zZ3N0ciAiUHLDvGZ1bmcgYWJnZWJyb2NoZW4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MzY4Cittc2dpZCAiIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMiCittc2dzdHIgIiBlbnRow6RsdCBlaW4gZmVobGVyaGFmdGVzIERhdGVpc3lzdGVtIgorCisjOiBlMmZzY2svdW5peC5jOjM3MAorbXNnaWQgIiB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkIgorbXNnc3RyICIgd3VyZGUgbmljaHQgb3JkbnVuZ3NnZW3DpMOfIGF1c2dlaMOkbmd0IgorCisjOiBlMmZzY2svdW5peC5jOjM3MgorbXNnaWQgIiBwcmltYXJ5IHN1cGVyYmxvY2sgZmVhdHVyZXMgZGlmZmVyZW50IGZyb20gYmFja3VwIgorbXNnc3RyICIiCisiRWlnZW5zY2hhZnRlbiBkZXMgcHJpbcOkcmVuIFN1cGVyYmxvY2tzIHVudGVyc2NoZWlkZW4gc2ljaCB2b24gZGVyICIKKyJEYXRlbnNpY2hlcnVuZyIKKworIzogZTJmc2NrL3VuaXguYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBiZWVuIG1vdW50ZWQgJXUgdGltZXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgd3VyZGUgJXUtbWFsIG9obmUgw5xiZXJwcsO8ZnVuZyBlaW5nZWjDpG5ndCIKKworIzogZTJmc2NrL3VuaXguYzozODMKK21zZ2lkICIgaGFzIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRpbWUgaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiIgorIiBoYXQgZWluZW4gaW4gZGVyIFp1a3VuZnQgbGllZ2VuZGVuIFplaXRwdW5rdCBkZXIgbGV0enRlbiBQw7xmdW5nIGRlcyAiCisiRGF0ZWlzeXN0ZW1zIgorCisjOiBlMmZzY2svdW5peC5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGdvbmUgJXUgZGF5cyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiB3dXJkZSAldSBUYWdlIG9obmUgw5xiZXJwcsO8ZnVuZyBnZW51dHp0IgorCisjOiBlMmZzY2svdW5peC5jOjM5OAorbXNnaWQgIiwgY2hlY2sgZm9yY2VkLlxuIgorbXNnc3RyICIsIFByw7xmdW5nIGVyend1bmdlbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuLCAldS8ldSBmaWxlcywgJWxsdS8lbGx1IGJsb2NrcyIKK21zZ3N0ciAiJXM6IHNhdWJlciwgJXUvJXUgRGF0ZWllbiwgJWxsdS8lbGx1IEJsw7Zja2UiCisKKyM6IGUyZnNjay91bml4LmM6NDUxCittc2dpZCAiIChjaGVjayBkZWZlcnJlZDsgb24gYmF0dGVyeSkiCittc2dzdHIgIiAoUHLDvGZ1bmcgbmFjaCBuw6RjaHN0ZW0gRWluaMOkbmdlbikiCisKKyM6IGUyZnNjay91bml4LmM6NDU0Cittc2dpZCAiIChjaGVjayBhZnRlciBuZXh0IG1vdW50KSIKK21zZ3N0ciAiIChQcsO8ZnVuZyBuYWNoIG7DpGNoc3RlbSBFaW5ow6RuZ2VuKSIKKworIzogZTJmc2NrL3VuaXguYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChjaGVjayBpbiAlbGQgbW91bnRzKSIKK21zZ3N0ciAiIChQcsO8ZnVuZyBuYWNoICVsZCBFaW5ow6RuZ2V2b3Jnw6RuZ2VuKSIKKworIzogZTJmc2NrL3VuaXguYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IENvdWxkbid0IG9wZW4gL2Rldi9udWxsICglcylcbiIKK21zZ3N0ciAiRmVobGVyOiAvZGV2L251bGwgKCVzKSBrYW5uIG5pY2h0IGdlw7ZmZm5ldCB3ZXJkZW5cbiIKKworIzogZTJmc2NrL3VuaXguYzo2NzUKK21zZ2lkICJJbnZhbGlkIEVBIHZlcnNpb24uXG4iCittc2dzdHIgIlVuZ8O8bHRpZ2UgRUEtVmVyc2lvbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBleHRlbmRlZCBvcHRpb246ICVzXG4iCittc2dzdHIgIlVuYmVrYW5udGUgZXJ3ZWl0ZXJ0ZSBPcHRpb246ICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6NzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gZTJmc2NrIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisiU3ludGF4ZmVobGVyIGluIGRlciBLb25maWd1cmF0aW9uc2RhdGVpIHZvbiBlMmZzY2sgKCVzLCBaZWlsZSAlZClcbiIKKyJcdCVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6Nzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHZhbGlkYXRpbmcgZmlsZSBkZXNjcmlwdG9yICVkOiAlc1xuIgorbXNnc3RyICJGZWhsZXIgYmVpIMOcYmVycHLDvGZ1bmcgZGVzIERhdGVpLURlc2tyaXB0b3JzICVkOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjgwMQorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIOKAnmNvbXBsZXRpb24gaW5mb3JtYXRpb27igJwtRGF0ZWktRGVza3JpcHRvciIKKworIzogZTJmc2NrL3VuaXguYzo4MTYKK21zZ2lkICJPbmx5IG9uZSBvZiB0aGUgb3B0aW9ucyAtcC8tYSwgLW4gb3IgLXkgbWF5IGJlIHNwZWNpZmllZC4iCittc2dzdHIgIk51ciBlaW5lIGRlciBPcHRpb25lbiAtcC8tYSwgLW4gb2RlciAteSBkYXJmIGFuZ2VnZWJlbiB3ZXJkZW4uIgorCisjOiBlMmZzY2svdW5peC5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgLXQgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKK21zZ3N0ciAiRGllIE9wdGlvbiAtdCB3aXJkIHZvbiBkaWVzZXIgZTJmc2NrLVZlcnNpb24gbmljaHQgdW50ZXJzdMO8dHp0LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjg2OCBlMmZzY2svdW5peC5jOjk0MiBtaXNjL3R1bmUyZnMuYzo4NzkgbWlzYy90dW5lMmZzLmM6MTE3NAorIzogbWlzYy90dW5lMmZzLmM6MTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICJOaWNodCBtw7ZnbGljaCwg4oCeJXPigJwgYXVmenVsw7ZzZW4iCisKKyM6IGUyZnNjay91bml4LmM6OTIxCittc2dpZCAiVGhlIC1uIGFuZCAtRCBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLW4gdW5kIC1EIHNjaGxpZcOfZW4gc2ljaCBnZWdlbnNlaXRpZyBhdXMuIgorCisjOiBlMmZzY2svdW5peC5jOjkyNgorbXNnaWQgIlRoZSAtbiBhbmQgLWMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiRGllIE9wdGlvbmVuIC1uIHVuZCAtYyBzY2hsaWXDn2VuIHNpY2ggZ2VnZW5zZWl0aWcgYXVzLiIKKworIzogZTJmc2NrL3VuaXguYzo5MzEKK21zZ2lkICJUaGUgLW4gYW5kIC1sLy1MIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIkRpZSBPcHRpb25lbiAtbiB1bmQgLWwvLUwgc2NobGllw59lbiBzaWNoIGdlZ2Vuc2VpdGlnIGF1cy4iCisKKyM6IGUyZnNjay91bml4LmM6OTg1Cittc2dpZCAiVGhlIC1jIGFuZCB0aGUgLWwvLUwgb3B0aW9ucyBtYXkgbm90IGJlIGJvdGggdXNlZCBhdCB0aGUgc2FtZSB0aW1lLlxuIgorbXNnc3RyICIiCisiRGllIE9wdGlvbmVuIC1jIHVuZCAtbC8tTCBkw7xyZmVuIG5pY2h0IGdsZWljaHplaXRpZyB2ZXJ3ZW5kZXQgd2VyZGVuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG5vdCBhbiBpbnRlZ2VyXG4iCisiXG4iCittc2dzdHIgIjJGU0NLX0pCRF9ERUJVRyDigJ4lc+KAnCBpc3Qga2VpbmUgR2FuenphaGxcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJbnZhbGlkIG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiVW5nw7xsdGlnZXMgbmljaHQtbnVtZXJpc2NoZXMgQXJndW1lbnQgZsO8ciAtJWMgKOKAniVz4oCcKVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBpbnRlcnZhbCBpcyAldSBzZWNvbmRzIGFuZCB0b3RhbCB3YWl0IHRpbWUgaXMgJXUgc2Vjb25kcy4gUGxlYXNlICIKKyJ3YWl0Li4uXG4iCittc2dzdHIgIiIKKyJNTVAtSW50ZXJ2YWxsIGlzdCAldSBTZWt1bmRlbiB1bmQgZGllIGdlc2FtdGUgV2FydGV6ZWl0IGlzdCAldSBTZWt1bmRlbi5cbiIKKyJCaXR0ZSB3YXJ0ZW4uLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMTQ5IGUyZnNjay91bml4LmM6MTE1NAorbXNnaWQgIndoaWxlIGNoZWNraW5nIE1NUCBibG9jayIKK21zZ3N0ciAiYmVpbSBQcsO8ZmVuIGRlcyBNTVAtQmxvY2tzIgorCisjOiBlMmZzY2svdW5peC5jOjExNTYgbWlzYy90dW5lMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJJZiB5b3UgYXJlIHN1cmUgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IGluIHVzZSBvbiBhbnkgbm9kZSwgcnVuOlxuIgorIid0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfSdcbiIKK21zZ3N0ciAiIgorIldlbm4gU2llIHNpY2hlciBzaW5kLCBkYXNzIGRhcyBEYXRlaXN5c3RlbSBhdWYga2VpbmVtIEtub3RlbiBiZW51dHp0IHdpcmQsXG4iCisiZsO8aHJlbiBTaWUgYml0dGUgRm9sZ2VuZGVzIGF1czpcbiIKKyLigJ50dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfeKAnFxuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMDcKK21zZ2lkICJFcnJvcjogZXh0MmZzIGxpYnJhcnkgdmVyc2lvbiBvdXQgb2YgZGF0ZSFcbiIKK21zZ3N0ciAiRmVobGVyOiBleHQyZnMtQmlibGlvdGhla3MtVmVyc2lvbiBpc3QgenUgYWx0IVxuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMTQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gaW5pdGlhbGl6ZSBwcm9ncmFtIgorbXNnc3RyICJiZWkgZGVyIFByb2dyYW1taW5pdGlhbGlzaWVydW5nIgorCisjOiBlMmZzY2svdW5peC5jOjEyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlcywgJXNcbiIKK21zZ3N0ciAiXHQlcyB3aXJkIHZlcndlbmRldCwgJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjQ5Cittc2dpZCAibmVlZCB0ZXJtaW5hbCBmb3IgaW50ZXJhY3RpdmUgcmVwYWlycyIKK21zZ3N0ciAiRWluIFRlcm1pbmFsIHdpcmQgZsO8ciBpbnRlcmFrdGl2ZSBSZXBhcmF0dXJlbiBiZW7DtnRpZ3QiCisKKyM6IGUyZnNjay91bml4LmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi5cbiIKK21zZ3N0ciAiJXM6ICVzIERhdGVuc2ljaGVydW5ncy1CbMO2Y2tlIHdlcmRlbiB2ZXJzdWNodCAuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzA1Cittc2dpZCAiU3VwZXJibG9jayBpbnZhbGlkLCIKK21zZ3N0ciAiU3VwZXJibG9jayB1bmfDvGx0aWcsIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDYKK21zZ2lkICJHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiIKK21zZ3N0ciAiR3J1cHBlbi1EZXNrcmlwdG9yZW4gc2NoZWluZW4gZGVmZWt0IHp1IHNlaW4uLi4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgdXNpbmcgdGhlIGJhY2t1cCBibG9ja3MiCittc2dzdHIgIiVzOiAlcyBiZWltIEJlbnV0emVuIGRlciBEYXRlbnNpY2hlcnVuZ3MtQmzDtmNrZSIKKworIzogZTJmc2NrL3VuaXguYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBnb2luZyBiYWNrIHRvIG9yaWdpbmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiJXM6IGVzIHdpcmQgenVtIG9yaWdpbmFsZW4gU3VwZXJibG9jayB6dXLDvGNrIGdla2VocnRcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQ5Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIHJldmlzaW9uIGlzIGFwcGFyZW50bHkgdG9vIGhpZ2ggZm9yIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCisiKE9yIHRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2sgaXMgY29ycnVwdClcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRpZXNlIERhdGVpc3lzdGVtLVJldmlzaW9uIGlzdCBvZmZlbnNpY2h0bGljaCB6dSBuZXUgZsO8ciBkaWVzZSBWZXJzaW9uIFxuIgorInZvbiBlMmZzY2sgKG9kZXIgZGVyIERhdGVpc3lzdGVtLVN1cGVyYmxvY2sgaXN0IGRlZmVrdCkuXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1NgorbXNnaWQgIkNvdWxkIHRoaXMgYmUgYSB6ZXJvLWxlbmd0aCBwYXJ0aXRpb24/XG4iCittc2dzdHIgIkvDtm5udGUgZXMgZWluZSBQYXJ0aW9uIGRlciBMw6RuZ2UgTnVsbCBzZWluP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IG11c3QgaGF2ZSAlcyBhY2Nlc3MgdG8gdGhlIGZpbGVzeXN0ZW0gb3IgYmUgcm9vdFxuIgorbXNnc3RyICJTaWUgYmVuw7Z0aWdlbiAlcy0gb2RlciByb290LVJlY2h0ZSBmw7xyIGRhcyBEYXRlaXN5c3RlbS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY0Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICIiCisiTcO2Z2xpY2hlcndlaXNlIGlzdCBkaWUgUGFydGl0aW9uIG5pY2h0IHZvcmhhbmRlbiBvZGVyIGVpbmUgU3dhcC1QYXJ0aXRpb24/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM2NgorbXNnaWQgIkZpbGVzeXN0ZW0gbW91bnRlZCBvciBvcGVuZWQgZXhjbHVzaXZlbHkgYnkgYW5vdGhlciBwcm9ncmFtP1xuIgorbXNnc3RyICIiCisiSXN0IGRhcyBEYXRlaXN5c3RlbSBlaW5nZWjDpG5ndCBvZGVyIGV4a2x1c2l2IHZvbiBlaW5lbSBhbmRlcmVuIFByb2dyYW1tXG4iCisiZ2XDtmZmbmV0IHdvcmRlbj9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzcwCittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IGRldmljZT9cbiIKK21zZ3N0ciAiSXN0IGRhcyBHZXLDpHQgbcO2Z2xpY2hlcndlaXNlIG5pY2h0IHZvcmhhbmRlbj9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzczCittc2dpZCAiIgorIkRpc2sgd3JpdGUtcHJvdGVjdGVkOyB1c2UgdGhlIC1uIG9wdGlvbiB0byBkbyBhIHJlYWQtb25seVxuIgorImNoZWNrIG9mIHRoZSBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJMYXVmd2VyayBpc3Qgc2NocmVpYmdlc2Now7x0enQsIG51dHplbiBTaWUgZGllIE9wdGlvbiAtbixcbiIKKyJ1bSBlcyBpbSBOdXItTGVzZW4tTW9kdXMgenUgcHLDvGZlbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDM3Cittc2dpZCAiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIgorbXNnc3RyICJOZXVlcmUgVmVyc2lvbiB2b24gZTJmc2NrIGJlbsO2dGlndCEiCisKKyM6IGUyZnNjay91bml4LmM6MTQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBleHQzIGpvdXJuYWwgZm9yICVzIgorbXNnc3RyICJ3w6RocmVuZCBkZXIgUHLDvGZ1bmcgZGVzIGV4dDMtSm91cm5hbHMgZsO8ciAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNDkyCittc2dpZCAiIgorIldhcm5pbmc6IHNraXBwaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYmVjYXVzZSBkb2luZyBhIHJlYWQtb25seSBmaWxlc3lzdGVtICIKKyJjaGVjay5cbiIKK21zZ3N0ciAiIgorIldhcm51bmc6IEpvdXJuYWwtV2llZGVyaGVyc3RlbGx1bmcgd2lyZCDDvGJlcnNwcnVuZ2VuLCBkYSBzaWNoIGRhcyAiCisiRGF0ZWlzeXN0ZW1cbiIKKyJpbSBOdXItTGVzZW4tTW9kdXMgYmVmaW5kZXQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTUwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHN1cGVyYmxvY2sgZmxhZ3Mgb24gJXNcbiIKK21zZ3N0ciAiU3VwZXJibG9jay1GbGFncyBrb25udGVuIGF1ZiAlcyBuaWNodCBnZXNldHp0IHdlcmRlblxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVjb3ZlcmluZyBleHQzIGpvdXJuYWwgb2YgJXMiCittc2dzdHIgImJlaSBkZXIgV2llZGVyaGVyc3RlbGx1bmcgZGVzIGV4dDMtSm91cm5hbHMgdm9uICVzIgorCisjOiBlMmZzY2svdW5peC5jOjE1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocyk6IgorbXNnc3RyICIlcyBiZXNpdHp0IG5pY2h0IHVudGVyc3TDvHR6dGUgRWlnZW5zY2hhZnQoZW4pOiIKKworIzogZTJmc2NrL3VuaXguYzoxNTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YXJuaW5nOiBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKK21zZ3N0ciAiJXM6IFdhcm51bmc6IERpZSBLb21wcmVzc2lvbnN1bnRlcnN0w7x0enVuZyBpc3QgZXhwZXJpbWVudGVsbC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogZTJmc2NrIG5vdCBjb21waWxlZCB3aXRoIEhUUkVFIHN1cHBvcnQsXG4iCisiXHRidXQgZmlsZXN5c3RlbSAlcyBoYXMgSFRSRUUgZGlyZWN0b3JpZXMuXG4iCittc2dzdHIgIiIKKyIlczogZTJmc2NrIHd1cmRlIG9obmUgVW50ZXJzdMO8dHp1bmcgZsO8ciBIVFJFRSBrb21waWxpZXJ0LFxuIgorIlx0YWJlciBkYXMgRGF0ZWlzeXN0ZW0gJXMgYmVzaXR6dCBIVFJFRS1WZXJ6ZWljaG5pc3NlLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrcyBpbm9kZVxuIgorbXNnc3RyICIlczogJXMgYmVpbSBMZXNlbiBkZXMgQmFkLUJsb2NrLUlub2Rlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MTAKK21zZ2lkICJUaGlzIGRvZXNuJ3QgYm9kZSB3ZWxsLCBidXQgd2UnbGwgdHJ5IHRvIGdvIG9uLi4uXG4iCittc2dzdHIgIkRhcyB2ZXJoZWnDn3QgbmljaHRzIEd1dGVzLCBhYmVyIGVzIHdpcmQgdHJvdHpkZW0gdmVyc3VjaHQgLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICglZCBibG9ja3MpOiAiCittc2dzdHIgIkpvdXJuYWwgd2lyZCBlcnN0ZWxsdCAoJWQgQmzDtmNrZSk6ICIKKworIzogZTJmc2NrL3VuaXguYzoxNjYyCittc2dpZCAiIERvbmUuXG4iCittc2dzdHIgIiBFcmxlZGlndC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjY0Cittc2dpZCAiIgorIlxuIgorIioqKiBqb3VybmFsIGhhcyBiZWVuIHJlLWNyZWF0ZWQgLSBmaWxlc3lzdGVtIGlzIG5vdyBleHQzIGFnYWluICoqKlxuIgorbXNnc3RyICIiCisiXG4iCisiKioqIEpvdXJuYWwgd3VyZGUgd2llZGVyaGVyZ2VzdGVsbHQgLSBEYXRlaXN5c3RlbSBpc3QgbnVuIHdpZWRlciBleHQzICoqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2ODgKK21zZ2lkICJSZXN0YXJ0aW5nIGUyZnNjayBmcm9tIHRoZSBiZWdpbm5pbmcuLi5cbiIKK21zZ3N0ciAiZTJmc2NrIHdpcmQgbmV1IGdlc3RhcnRldCAuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjkyCittc2dpZCAid2hpbGUgcmVzZXR0aW5nIGNvbnRleHQiCittc2dzdHIgImJlaW0gUsO8Y2tzZXR6ZW4gZGVzIEtvbnRleHRzIgorCisjOiBlMmZzY2svdW5peC5jOjE2OTkKK21zZ2lkICJhYm9ydGVkIgorbXNnc3RyICJhYmdlYnJvY2hlbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBlMmZzY2sgY2FuY2VsZWQuXG4iCittc2dzdHIgIiVzOiBlMmZzY2sgYWJnZWJyb2NoZW4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc0MSBlMmZzY2svdXRpbC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKiogREFURUlTWVNURU0gV1VSREUgVkVSw4ROREVSVCAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICoqKioqIFJFQk9PVCBMSU5VWCAqKioqKlxuIgorbXNnc3RyICIlczogKioqKiogTElOVVggTVVTUyBORVUgR0VTVEFSVEVUIFdFUkRFTiAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NTMgZTJmc2NrL3V0aWwuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogV0FSTklORzogRmlsZXN5c3RlbSBzdGlsbCBoYXMgZXJyb3JzICoqKioqKioqKipcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIFdBUk5VTkc6IE5vY2ggRmVobGVyIGltIERhdGVpc3lzdGVtICAqKioqKioqKioqXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MTkwIG1pc2MvdXRpbC5jOjg2Cittc2dpZCAieVkiCittc2dzdHIgImpKIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MQorbXNnaWQgIm5OIgorbXNnc3RyICJuTiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDUKK21zZ2lkICI8eT4iCittc2dzdHIgIjxqPiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDcKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDkKK21zZ2lkICIgKHkvbikiCittc2dzdHIgIiAoai9uKSIKKworIzogZTJmc2NrL3V0aWwuYzoyMjMKK21zZ2lkICJjYW5jZWxsZWQhXG4iCittc2dzdHIgImFiZ2Vicm9jaGVuIVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjIzOAorbXNnaWQgInllc1xuIgorbXNnc3RyICJqYVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI0MAorbXNnaWQgIm5vXG4iCittc2dzdHIgIm5laW5cbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyBub1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IG5laW5cbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyB5ZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyBqYVxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1OAorbXNnaWQgInllcyIKK21zZ3N0ciAiamEiCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAibm8iCittc2dzdHIgIm5laW4iCisKKyM6IGUyZnNjay91dGlsLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgImUyZnNja19yZWFkX2JpdG1hcHM6IGlsbGVnYWwgYml0bWFwIGJsb2NrKHMpIGZvciAlcyIKK21zZ3N0ciAiZTJmc2NrX3JlYWRfYml0bWFwczogdW5nw7xsdGlnZXIgQml0bXBhLUJsb2NrKC1CbMO2Y2tlKSBmw7xyICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjI3OAorbXNnaWQgInJlYWRpbmcgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMiCittc2dzdHIgIklub2RlIHVuZCBCbG9jay1CaXRtYXBzIHdlcmRlbiBnZWxlc2VuIgorCisjOiBlMmZzY2svdXRpbC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXRyeWluZyB0byByZWFkIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJ3w6RocmVuZCBkZXMgd2llZGVyaG9sdGVuIFZlcnN1Y2hlcywgQml0bWFwcyBmw7xyICVzIGVpbnp1bGVzZW4iCisKKyM6IGUyZnNjay91dGlsLmM6Mjk4Cittc2dpZCAid3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyIKK21zZ3N0ciAiQmxvY2stIHVuZCBJbm9kZS1CaXRtYXBzIHdlcmRlbiBnZXNjaHJpZWJlbiIKKworIzogZTJmc2NrL3V0aWwuYzozMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAiIgorInfDpGhyZW5kIGRlcyB3aWVkZXJob2x0ZW4gVmVyc3VjaGVzLCBCbG9jay0gdW5kIElub2RlLUJpdG1hcHMgZsO8ciAlcyB6dSAiCisic2NocmVpYmVuLiIKKworIzogZTJmc2NrL3V0aWwuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIiVzOiBVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k7IFJVTiBmc2NrIE1BTlVBTExZLlxuIgorIlx0KGkuZS4sIHdpdGhvdXQgLWEgb3IgLXAgb3B0aW9ucylcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIiVzOiBVTkVSV0FSVEVURSBJTktPTlNJU1RFTlo7IGZzY2sgTUFOVUVMTCBBVVNGw5xIUkVOXG4iCisiXHQoZC5oLiBvaG5lIGRpZSBPcHRpb25lbiAtYSBvZGVyIC1wKVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCittc2dzdHIgIkJlbnV0enRlciBTcGVpY2hlcjogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHUsICIKK21zZ3N0ciAiQmVudXR6dGVyIFNwZWljaGVyOiAlbHUsICIKKworIzogZTJmc2NrL3V0aWwuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZTogJTUuMmYvJTUuMmYvJTUuMmZcbiIKK21zZ3N0ciAiWmVpdDogJTUuMmYvJTUuMmYvJTUuMmZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZWxhcHNlZCB0aW1lOiAlNi4zZlxuIgorbXNnc3RyICJhYmdlbGF1ZmVuZGUgWmVpdDogJTYuM2ZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0NDcgZTJmc2NrL3V0aWwuYzo0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgImJlaW0gTGVzZW4gdm9uIElub2RlICVsdSBpbiAlcyIKKworIzogZTJmc2NrL3V0aWwuYzo0NzUgZTJmc2NrL3V0aWwuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgImJlaW0gU2NocmVpYmVuIHZvbiBJbm9kZSAlbHUgaW4gJXMiCisKKyM6IGUyZnNjay91dGlsLmM6NjM3Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyB6ZXJvaXppbmcgYnVmZmVyIgorbXNnc3RyICJiZWltIFJlc2VydmllcmVuIGVpbmVzIFB1ZmZlcnMgenVtIE51bGxlbiIKKworIzogZTJmc2NrL3V0aWwuYzo3ODUKK21zZ2lkICIiCisiVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb2RpZmllZCB3aGlsZSBmc2NrIGlzICIKKyJydW5uaW5nLlxuIgorbXNnc3RyICIiCisiVU5FUldBUlRFVEUgSU5LT05TSVNURU5aOiBkYXMgRGF0ZWlzeXN0ZW0gd2lyZCB2ZXLDpG5kZXJ0LCB3w6RocmVuZCBmc2NrICIKKyJsw6R1ZnQuXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NzIKK21zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorbXNnc3RyICJlcmxlZGlndCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1iIGJsb2NrX3NpemVdIFstaSBpbnB1dF9maWxlXSBbLW8gb3V0cHV0X2ZpbGVdIFstc3Z3bmZdXG4iCisiICAgICAgIFstYyBibG9ja3NfYXRfb25jZV0gWy1kIGRlbGF5X2ZhY3Rvcl9iZXR3ZWVuX3JlYWRzXSBbLWUgIgorIm1heF9iYWRfYmxvY2tzXVxuIgorIiAgICAgICBbLXAgbnVtX3Bhc3Nlc10gWy10IHRlc3RfcGF0dGVybiBbLXQgdGVzdF9wYXR0ZXJuIFsuLi5dXV1cbiIKKyIgICAgICAgZGV2aWNlIFtsYXN0X2Jsb2NrIFtmaXJzdF9ibG9ja11dXG4iCittc2dzdHIgIiIKKyJBdWZydWY6ICVzIFstYiBCbG9ja2dyw7bDn2VdIFstaSBFaW5nYWJlZGF0ZWldIFstbyBBdXNnYWJlZGF0ZWldIFstc3Z3bmZdXG4iCisiICAgICAgICBbLWMgQmzDtmNrZV9hdWZfZWlubWFsXSBbLWQgIgorIlZlcnrDtmdlcnVuZ3NmYWt0b3Jfendpc2NoZW5fTGVzZWR1cmNoZ8Okbmdlbl1cbiIKKyIgICAgICAgIFstZSBtYXhpbWFsZV9kZWZla3RlX0Jsw7Zja2VdIFstcCBBbnphaGxfRHVyY2hnw6RuZ2VdXG4iCisiICAgICAgICBbLXQgVGVzdG11c3RlciBbLXQgVGVzdG11c3RlciBbLi4uXV1dXG4iCisiICAgICAgICBHZXLDpHQgW2xldHp0ZXJfQmxvY2sgW1N0YXJ0YmxvY2tdXVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSAtbiBhbmQgLXcgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIgorIlxuIgorbXNnc3RyICIiCisiJXM6IERpZSBPcHRpb25lbiAtbiB1bmQgLXcgc2NobGllw59lbiBzaWNoIGdlZ2Vuc2VpdGlnIGF1cy5cbiIKKyJcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTYuMmYlJSBkb25lLCAlcyBlbGFwc2VkLiAoJWQvJWQvJWQgZXJyb3JzKSIKK21zZ3N0ciAiJTYuMmYlJSBlcmxlZGlndCwgJXMgdmVyc3RyaWNoZW4uICglZC8lZC8lZCBGZWhsZXIpIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjMyOAorbXNnaWQgIlRlc3Rpbmcgd2l0aCByYW5kb20gcGF0dGVybjogIgorbXNnc3RyICJFcyB3aXJkIG1pdCB6dWbDpGxsaWdlbiBNdXN0ZXJuIGdldGVzdGV0OiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzQ2Cittc2dpZCAiVGVzdGluZyB3aXRoIHBhdHRlcm4gMHgiCittc2dzdHIgIkVzIHdpcmQgZ2V0ZXN0ZXQgTWl0IE11c3RlciAweCIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNzggbWlzYy9iYWRibG9ja3MuYzo0NTEKK21zZ2lkICJkdXJpbmcgc2VlayIKK21zZ3N0ciAiYmVpbSBTdWNoZW4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIldlaXJkIHZhbHVlICglbGQpIGluIGRvX3JlYWRcbiIKK21zZ3N0ciAiTWVya3fDvHJkaWdlciBXZXJ0ICglbGQpIGluIGRvX3JlYWRcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo0NzYKK21zZ2lkICJkdXJpbmcgZXh0MmZzX3N5bmNfZGV2aWNlIgorbXNnc3RyICJ3w6RocmVuZCBleHQyZnNfc3luY19kZXZpY2UiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDk2IG1pc2MvYmFkYmxvY2tzLmM6NzU4Cittc2dpZCAid2hpbGUgYmVnaW5uaW5nIGJhZCBibG9jayBsaXN0IGl0ZXJhdGlvbiIKK21zZ3N0ciAiYmVpbSBCZWdpbm4gZGVzIOKAnkJhZCBCbG9ja+KAnC1MaXN0ZW5kdXJjaGxhdWZzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxMSBtaXNjL2JhZGJsb2Nrcy5jOjYxMSBtaXNjL2JhZGJsb2Nrcy5jOjc2OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVycyIKK21zZ3N0ciAiYmVpbSBadXdlaXNlbiB2b24gUHVmZmVybiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgYmxvY2tzICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiRXMgd2lyZCB2b24gQmxvY2sgJWx1IGJpcyAlbHUgZ2VwcsO8ZnRcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjAKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLW9ubHkgbW9kZVxuIgorbXNnc3RyICJFcyB3aXJkIG5hY2ggZGVmZWt0ZW4gQmzDtmNrZW4gaW0gTnVyLUxlc2VuLU1vZHVzIGdlc3VjaHRcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjkKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAocmVhZC1vbmx5IHRlc3QpOiAiCittc2dzdHIgIkVzIHdpcmQgbmFjaCBkZWZla3RlbiBCbMO2Y2tlbiBnc3VjaHQgKE51ci1MZXNlbi1Nb2R1cyk6IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUzNiBtaXNjL2JhZGJsb2Nrcy5jOjY0MyBtaXNjL2JhZGJsb2Nrcy5jOjY4NQorIzogbWlzYy9iYWRibG9ja3MuYzo4MzIKK21zZ2lkICJUb28gbWFueSBiYWQgYmxvY2tzLCBhYm9ydGluZyB0ZXN0XG4iCittc2dzdHIgIlp1IHZpZWxlIGRlZmVrdGUgQmzDtmNrZSwgVGVzdCB3aXJkIGFiZ2Vicm9jaGVuXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjE4Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIkVzIHdpcmQgbmFjaCBkZWZla3RlbiBCbMO2Y2tlbiBnZXN1Y2h0IChMZXNlbitTY2hyZWliZW4tTW9kdXMpXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjIwIG1pc2MvYmFkYmxvY2tzLmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gYmxvY2sgJWx1IHRvICVsdVxuIgorbXNnc3RyICJWb24gQmxvY2sgJWx1IGJpcyAlbHVcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2NzUKK21zZ2lkICJSZWFkaW5nIGFuZCBjb21wYXJpbmc6ICIKK21zZ3N0ciAiTGVzZW4gdW5kIFZlcmdsZWljaGVuOiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiBub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIiIKKyJFcyB3aXJkIG5hY2ggZGVmZWt0ZW4gQmzDtmNrZW4gaW0gemVyc3TDtnJ1bmdzZnJlaWVuIExlc2VuK1NjaHJlaWJlbi1Nb2R1cyAiCisiZ2VzdWNodFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc4NworbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSB0ZXN0KVxuIgorbXNnc3RyICIiCisiRXMgd2lyZCBuYWNoIGRlZmVrdGVuIEJsw7Zja2VuIGdlc3VjaHQgKHplcnN0w7ZydW5nc2ZyZWllciBMZXNlbitTY2hyZWliZW4tIgorIk1vZHVzKVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc5NAorbXNnaWQgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIgorbXNnc3RyICIiCisiXG4iCisiVW50ZXJicmVjaHVuZyBlbXBmYW5nZW4sIGVzIHdpcmQgYXVmZ2Vyw6R1bXRcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyaW5nIHRlc3QgZGF0YSB3cml0ZSwgYmxvY2sgJWx1IgorbXNnc3RyICJiZWltIFNjaHJlaWJlbiBkZXIgVGVzdC1EYXRlbjsgQmxvY2sgJWx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk5OCBtaXNjL3V0aWwuYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZDsgIgorbXNnc3RyICIlcyBpc3QgZWluZ2Vow6RuZ3Q7ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDAwCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIiIKKyJCYWRibG9ja3Mgd2lyZCB0cm90emRlbSBlcnp3dW5nZW4uIEhvZmZlbnRsaWNoIGlzdCAvZXRjL210YWIgbmljaHQga29ycmVrdC5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDA1Cittc2dpZCAiaXQncyBub3Qgc2FmZSB0byBydW4gYmFkYmxvY2tzIVxuIgorbXNnc3RyICJlcyBpc3QgenUgdW5zaWNoZXIsIEJhZGJsb2NrcyB6dSBzdGFydGVuIVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMTAgbWlzYy91dGlsLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGFwcGFyZW50bHkgaW4gdXNlIGJ5IHRoZSBzeXN0ZW07ICIKK21zZ3N0ciAiJXMgd2lyZCBvZmZlbnNpY2h0bGljaCB2b20gU3lzdGVtIGdlbnV0enQ7ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDEzCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgIiIKKyJCYWRibG9ja3Mgd2lyZCB0cm90emRlbSBlcnp3dW5nZW4uIEhvZmZlbnRsaWNoIGlzdCAvZXRjL210YWIgbmljaHQga29ycmVrdC5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMgLSAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZSAlcyAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGJpZyBtYXggYmFkIGJsb2NrcyBjb3VudCAldSAtIG1heGltdW0gaXMgJXUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGVzdF9wYXR0ZXJuIC0gJXMiCittc2dzdHIgIlNwZWljaGVyIGbDvHIgVGVzdG11c3RlciBrYW5uIG5pY2h0IHJlc2VydmllcnQgd2VyZGVuIC0gJXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE4NAorbXNnaWQgIk1heGltdW0gb2Ygb25lIHRlc3RfcGF0dGVybiBtYXkgYmUgc3BlY2lmaWVkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJFcyBkYXJmIGltIE51ci1MZXNlbi1Nb2R1cyBudXIgZWluIFRlc3RtdXN0ZXIgYW5nZWdlYmVuIHdlcmRlbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTkwCittc2dpZCAiUmFuZG9tIHRlc3RfcGF0dGVybiBpcyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiWnVmw6RsbGlnZXMgVGVzdG11c3RlciBpc3QgaW0gTnVyLUxlc2VuLU1vZHVzIG5pY2h0IGVybGF1YnQiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwNAorbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBtYW51YWxseVxuIgorbXNnc3RyICIiCisiR3LDtsOfZSBkZXMgR2Vyw6R0ZXMgaXN0IG5pY2h0IGZlc3RzdGVsbGJhci5cbiIKKyJTaWUgbcO8c3NlbiBzaWUgbWFudWVsbCBhbmdlYmVuLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMTAKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIgorbXNnc3RyICJiZWltIFZlcnN1Y2gsIGRpZSBHZXLDpHRlZ3LDtsOfZSBmZXN0enVzdGVsbGVuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMTUKK21zZ2lkICJsYXN0IGJsb2NrIgorbXNnc3RyICJsZXR6dGVyIEJsb2NrIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjEKK21zZ2lkICJmaXJzdCBibG9jayIKK21zZ3N0ciAiZXJzdGVyIEJsb2NrIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAoJWxsdSk6IG11c3QgYmUgbGVzcyB0aGFuICVsbHUiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFN0YXJ0YmxvY2sgKCVsbHUpOiBlciBtdXNzIGtsZWluZXIgYWxzICVsbHUgc2VpbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZW5kIGJsb2NrICglbGx1KTogbXVzdCBiZSAzMi1iaXQgdmFsdWUiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIEVuZGJsb2NrICglbGx1KTogZXIgbXVzcyBlaW4gMzItQml0IFdlcnQgc2VpbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjg3Cittc2dpZCAid2hpbGUgY3JlYXRpbmcgaW4tbWVtb3J5IGJhZCBibG9ja3MgbGlzdCIKK21zZ3N0ciAiYmVpbSBFcnN0ZWxsZW4gZGVyIEJhZC1CbG9jay1MaXN0ZSBpbSBTcGVpY2hlciIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjk2Cittc2dpZCAiaW5wdXQgZmlsZSAtIGJhZCBmb3JtYXQiCittc2dzdHIgImRpZSBFaW5nYWJlZGF0ZWkgaGF0IGVpbiB1bmfDvGx0aWdlcyBGb3JtYXQiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTMwNCBtaXNjL2JhZGJsb2Nrcy5jOjEzMTMKK21zZ2lkICJ3aGlsZSBhZGRpbmcgdG8gaW4tbWVtb3J5IGJhZCBibG9jayBsaXN0IgorbXNnc3RyICJiZWltIEhpbnp1ZsO8Z2VuIHp1ciBCYWQtQmxvY2stTGlzdGUgaW0gU3BlaWNoZXIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTMzOAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIKK21zZ3N0ciAiRHVyY2hnYW5nIGJlZW5kZXQsICV1IGRlZmVrdGUgQmzDtmNrZSBnZWZ1bmRlbi4gKCVkLyVkLyVkIEZlaGxlcilcbiIKKworIzogbWlzYy9jaGF0dHIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmZdIFstKz1hQWNDZERlaWpzU3RUdV0gWy12IHZlcnNpb25dIGZpbGVzLi4uXG4iCittc2dzdHIgIkF1ZnJ1ZjogJXMgWy1SVmZdIFstKz1BYUNjRGRlaWpzU3RUdV0gWy12IFZlcnNpb25dIERhdGVpZW4uLi5cbiIKKworIzogbWlzYy9jaGF0dHIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHZlcnNpb24gLSAlc1xuIgorbXNnc3RyICJmYWxzY2hlIFZlcnNpb24gLSAlc1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwMSBtaXNjL2xzYXR0ci5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc3RhdCAlcyIKK21zZ3N0ciAiYmVpbSBBdXNsZXNlbiBkZXMgU3RhdHVzIHZvbiAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiYmVpbSBMZXNlbnMgZGVyIEZsYWdzIGluICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIxMyBtaXNjL2NoYXR0ci5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncyBvZiAlcyBzZXQgYXMgIgorbXNnc3RyICJGbGFncyB2b24gJXMgd2llIGZvbGd0IGdlc2V0enQ6ICIKKworIzogbWlzYy9jaGF0dHIuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiYmVpbSBTZXR6ZW4gZGVyIEZsYWdzIGluICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uIG9mICVzIHNldCBhcyAlbHVcbiIKK21zZ3N0ciAiVmVyc2lvbiB2b24gJXMgZ2VzZXR6dCBhdWYgJWx1XG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgdmVyc2lvbiBvbiAlcyIKK21zZ3N0ciAiYmVpbSBTZXR6ZW4gZGVyIFZlcnNpb24gaW4gJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjY3Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgcGF0aCB2YXJpYWJsZSBpbiBjaGF0dHJfZGlyX3Byb2MiCittc2dzdHIgIlBmYWQtVmFyaWFibGUgaW4gY2hhdHRyX2Rpcl9wcm9jIGtvbm50ZSBuaWNodCByZXNlcnZpZXJ0IHdlcmRlbiIKKworIzogbWlzYy9jaGF0dHIuYzozMDcKK21zZ2lkICI9IGlzIGluY29tcGF0aWJsZSB3aXRoIC0gYW5kICtcbiIKK21zZ3N0ciAiPSBpc3QgaW5rb21wYXRpYmVsIHp1IC0gdW5kICtcbiIKKworIzogbWlzYy9jaGF0dHIuYzozMTUKK21zZ2lkICJNdXN0IHVzZSAnLXYnLCA9LCAtIG9yICtcbiIKK21zZ3N0ciAi4oCeLXbigJwsID0sIC0gb2RlciArIHZlcndlbmRlblxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08bnVtPl0gWy1vIGJsb2Nrc2l6ZT08bnVtPl0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJBdWZydWY6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08TnVtbWVyPl0gWy1vIGJsb2Nrc2l6ZT08TnVtbWVyPl0gR2Vyw6R0XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNTkKK21zZ2lkICJibG9ja3MiCittc2dzdHIgIkJsw7Zja2UiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNjkKK21zZ2lkICJjbHVzdGVycyIKK21zZ3N0ciAiQ2x1c3RlciIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJHcm91cCAlbHU6IChCbG9ja3MgIgorbXNnc3RyICJHcnVwcGUgJWx1OiAoQmzDtmNrZSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDaGVja3N1bSAweCUwNHgiCittc2dzdHIgIiAgUHLDvGZzdW1tZSAweCUwNHgiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChFWFBFQ1RFRCAweCUwNHgpIgorbXNnc3RyICIgKDB4JTA0eCBFUldBUlRFVCkiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCB1bnVzZWQgaW5vZGVzICV1XG4iCittc2dzdHIgIiwgdW5nZW51dHp0ZSBJbm9kZXMgJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICVzIHN1cGVyYmxvY2sgYXQgIgorbXNnc3RyICIgICVzIFN1cGVyYmxvY2sgaW4gIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE0Cittc2dpZCAiUHJpbWFyeSIKK21zZ3N0ciAiUHJpbcOkciIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNAorbXNnaWQgIkJhY2t1cCIKK21zZ3N0ciAiRGF0ZW5zaWNoZXJ1bmciCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTgKK21zZ2lkICIsIEdyb3VwIGRlc2NyaXB0b3JzIGF0ICIKK21zZ3N0ciAiLCBHcnVwcGVuZGVza3JpcHRvcmVuIGluICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyMgorbXNnaWQgIiIKKyJcbiIKKyIgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICByZXNlcnZpZXJ0ZSBHRFQtQmzDtmNrZSBiZWkgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjI5Cittc2dpZCAiIEdyb3VwIGRlc2NyaXB0b3IgYXQgIgorbXNnc3RyICIgR3J1cHBlbmRlc2tyaXB0b3IgaW4gIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM1Cittc2dpZCAiICBCbG9jayBiaXRtYXAgYXQgIgorbXNnc3RyICIgIEJsb2NrLUJpdG1hcCBpbiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzkKK21zZ2lkICIsIElub2RlIGJpdG1hcCBhdCAiCittc2dzdHIgIiwgSW5vZGUtQml0bWFwIGluICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0MworbXNnaWQgIiIKKyJcbiIKKyIgIElub2RlIHRhYmxlIGF0ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgSW5vZGUtVGFiZWxsZSBpbiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiAgJXUgZnJlZSAlcywgJXUgZnJlZSBpbm9kZXMsICV1IGRpcmVjdG9yaWVzJXMiCittc2dzdHIgIiIKKyJcbiIKKyIgICV1IGZyZWllICVzLCAldSBmcmVpZSBJbm9kZXMsICV1IFZlcnplaWNobmlzc2UlcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIsICV1IHVudXNlZCBpbm9kZXNcbiIKK21zZ3N0ciAiLCAldSB1bmdlbnV0enRlIElub2Rlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU5Cittc2dpZCAiICBGcmVlIGJsb2NrczogIgorbXNnc3RyICIgIEZyZWllIEJsw7Zja2U6ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI3NAorbXNnaWQgIiAgRnJlZSBpbm9kZXM6ICIKK21zZ3N0ciAiICBGcmVpZSBJbm9kZXM6ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxMAorbXNnaWQgIndoaWxlIHByaW50aW5nIGJhZCBibG9jayBsaXN0IgorbXNnc3RyICJiZWltIEF1c2dlYmVuIGRlciDigJ5CYWQgQmxvY2vigJwtTGlzdGUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrczogJXUiCittc2dzdHIgIkJhZCBCbG9ja3M6ICV1IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzQ1IG1pc2MvdHVuZTJmcy5jOjM0NworbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAiYmVpbSBMZXNlbiBkZXMgSm91cm5hbC1Jbm9kZXMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNTEKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgImJlaW0gTGVzZW4gZGVzIEpvdXJuYWwtSW5vZGVzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzU3Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyIGJsb2NrIgorbXNnc3RyICJiZWltIExlc2VuIGRlcyBKb3VybmFsLVN1cGVyYmxvY2tzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzY0Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlciBpbnZhbGlkIVxuIgorbXNnc3RyICJEaWUgbWFnaXNjaGUgWmFobCBpbSBKb3VybmFsLVN1cGVyYmxvY2sgaXN0IHVuZ8O8bHRpZyFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2NworbXNnaWQgIkpvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAiCittc2dzdHIgIkpvdW5hbGVpZ2Vuc2NoYWZ0ZW46ICAgICAgICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozODAKK21zZ2lkICJKb3VybmFsIHNpemU6ICAgICAgICAgICAgICIKK21zZ3N0ciAiSm91cm5hbGdyw7bDn2U6ICAgICAgICAgICAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCittc2dzdHIgIiIKKyJKb3VybmFsLUzDpG5nZTogICAgICAgICAgICAldVxuIgorIkpvdXJuYWwtU2VxdWVuejogICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbC1TdGFydDogICAgICAgICAgICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZXJybm86ICAgICAgICAgICAgJWRcbiIKK21zZ3N0ciAiSm91bmFsLUZlaGxlcm51bW1lcjogICAgICAlZFxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDE1IG1pc2MvdHVuZTJmcy5jOjE5NgorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJiZWltIExlc2VuIGRlcyBKb3VybmFsLVN1cGVyYmxvY2tzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDIzCittc2dpZCAiQ291bGRuJ3QgZmluZCBqb3VybmFsIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVycyIKK21zZ3N0ciAiIgorIkRpZSBtYWdpc2NoZSBOdW1tZXIgZGVzIEpvdXJuYWwtU3VwZXJibG9ja3Mga29ubnRlIG5pY2h0IGdlZnVuZGVuIHdlcmRlbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBibG9jayBzaXplOiAgICAgICAldVxuIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIGZpcnN0IGJsb2NrOiAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCisiSm91cm5hbCBudW1iZXIgb2YgdXNlcnM6ICAldVxuIgorbXNnc3RyICIiCisiXG4iCisiSm91cm5hbC1CbG9ja2dyw7bDn2U6ICAgICAgICV1XG4iCisiSm91cm5hbC1Mw6RuZ2U6ICAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsLVN0YXJ0YmxvY2s6ICAgICAgICV1XG4iCisiSm91cm5hbC1TZXF1ZW56OiAgICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsLVN0YXJ0OiAgICAgICAgICAgICV1XG4iCisiSm91cm5hbC1CZW51dHplcmFuemFobDogICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdXNlcnM6ICAgICAgICAgICAgJXNcbiIKK21zZ3N0ciAiSm91bmFsYmVudXR6ZXI6ICAgICAgICAgICAgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ1NiBtaXNjL21rZTJmcy5jOjc0MyBtaXNjL3R1bmUyZnMuYzoxMjExCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIG9wdGlvbnMhXG4iCittc2dzdHIgIiIKKyJTcGVpY2hlciB6dW0gVmVyYXJiZWl0ZW4gZGVyIE9wdGlvbmVuIGtvbm50ZSBuaWNodCByZXNlcnZpZXJ0IHdlcmRlbiFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2sgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJVbmfDvGx0aWdlciBTdXBlcmJsb2NrLVBhcmFtZXRlcjogJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJsb2Nrc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlVuZ8O8bHRpZ2VyIEJsb2NrZ3LDtsOfZW4tUGFyYW1ldGVyOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgZXh0ZW5kZWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdXBlcmJsb2NrPTxzdXBlcmJsb2NrIG51bWJlcj5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvY2tzaXplPlxuIgorbXNnc3RyICIiCisiXG4iCisiRmFsc2NoZSBlcndlaXRlcnRlIE9wdGlvbmVuIGFuZ2VnZWJlbjogJXNcbiIKKyJcbiIKKyJFcndlaXRlcnRlIE9wdGlvbmVuIHdlcmRlbiBkdXJjaCBLb21tYXRhIGdldHJlbm50LiBNYW5jaGUgZXJ3YXJ0ZW4gZWluXG4iCisiXHRBcmd1bWVudCwgd2VsY2hlcyBtaXQgR2xlaWNoaGVpdHN6ZWljaGVuICjigJ494oCcKSB6dWdld2llc2VuIHdpcmQuXG4iCisiXG4iCisiR8O8bHRpZ2UgZXJ3ZWl0ZXJ0ZSBPcHRpb25lbiBzaW5kOlxuIgorIlx0c3VwZXJibG9jaz08TnVtbWVyIGRlcyBTcHVwZXJibG9ja3M+XG4iCisiXHRibG9ja3NpemU9PEJsb2NrZ3LDtsOfZT5cbiIKKyJcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU2OCBtaXNjL21rZTJmcy5jOjE3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlc1xuIgorbXNnc3RyICJcdCVzIHdpcmQgYmVudXR6dFxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjA2IG1pc2MvZTJpbWFnZS5jOjE1ODIgbWlzYy90dW5lMmZzLmM6MjA2MAorIzogcmVzaXplL21haW4uYzozMTkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiRXMga2FubiBrZWluIGfDvGx0aWdlciBEYXRlaXN5c3RlbS1TdXBlcmJsb2NrIGdlZnVuZGVuIHdlcmRlbi5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICVzOiBlcnJvciByZWFkaW5nIGJpdG1hcHM6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogJXM6IEZlaGxlciBiZWltIExlc2VuIHZvbiBCaXRtYXBzOiAlc1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFsgLXJ8USBdIFsgLWZyIF0gZGV2aWNlIGltYWdlLWZpbGVcbiIKK21zZ3N0ciAiQXVmcnVmOiAlcyBbLXJ8USBdIFsgLWZyIF0gR2Vyw6R0ZWRhdGVpIEFiYmlsZC1EYXRlaVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIC1JIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIiAgICAgICAlcyBbLUldIEdlcsOkdGVkYXRlaSBBYmJpbGQtRGF0ZWlcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgJXMgLXJhICBbICAtY2ZucCAgXSBbIC1vIHNyY19vZmZzZXQgXSBbIC1PIGRlc3Rfb2Zmc2V0IF0gc3JjX2ZzICIKKyJbIGRlc3RfZnMgXVxuIgorbXNnc3RyICIiCisiICAgICAgICVzIC1yYSAgWyAgLWNmbnAgIF0gWyAtbyBRdWVsbG9mZnNldCBdIFsgLU8gWmllbG9mZnNldCBdIFF1ZWxsX0ZzICIKKyJbIFppZWxfZnMgXVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjkgbWlzYy9lMmltYWdlLmM6NTc2IG1pc2MvZTJpbWFnZS5jOjU4MgorIzogbWlzYy9lMmltYWdlLmM6MTE3OAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVyIgorbXNnc3RyICJiZWltIFp1d2Vpc2VuIHZvbiBQdWZmZXJuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBibG9jayAlbGx1XG4iCittc2dzdHIgIkJsb2NrICVsbHUgd2lyZCBnZXNjaHJpZWJlblxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igd3JpdGluZyBibG9jayAlbGx1IgorbXNnc3RyICJTY2hyZWliZmVobGVyIC0gQmxvY2sgJWxsdSIKKworIzogbWlzYy9lMmltYWdlLmM6MTkxCittc2dpZCAiZXJyb3IgaW4gZ2VuZXJpY193cml0ZSgpIgorbXNnc3RyICJGZWhsZXIgaW4gZ2VuZXJpY193cml0ZSgpIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMDgKK21zZ2lkICJFcnJvcjogaGVhZGVyIHNpemUgaXMgYmlnZ2VyIHRoYW4gd3J0X3NpemVcbiIKK21zZ3N0ciAiRmVobGVyOiBHcsO2w59lIGRlcyBIZWFkZXJzIMO8YmVyc3RlaWd0IHdydF9zaXplXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjIxMworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGhlYWRlciBidWZmZXJcbiIKK21zZ3N0ciAiSGVhZGVyLVB1ZmZlciBrb25udGUgbmljaHQgenVnZXdpZXNlbiB3ZXJkZW5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MjQxCittc2dpZCAid2hpbGUgd3JpdGluZyBzdXBlcmJsb2NrIgorbXNnc3RyICJiZWltIFNjaHJlaWJlbiBkZXMgU3VwZXJibG9ja3MiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI1MAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgImJlaW0gU2NocmVpYmVuIGRlciBJbm9kZS1UYWJlbGxlIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNTgKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiYmVpbSBTY2hyZWliZW4gZGVyIEJsb2NrLUJpdG1hcCIKKworIzogbWlzYy9lMmltYWdlLmM6MjY2Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSBiaXRtYXAiCittc2dzdHIgImJlaW0gU2NocmVpYmVuIGRlciBJbm9kZS1CaXRtYXAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IGRpcmVjdG9yeSBibG9jayAlbGx1OiBiYWQgcmVjX2xlbiAoJWQpXG4iCittc2dzdHIgIkRlZmVrdGVyIFZlcnplaWNobmlzYmxvY2sgJWxsdTogdW5nw7xsdGlnZSByZWNfbGVuICglZClcbiIKKworIzogbWlzYy9lMmltYWdlLmM6NTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCBuYW1lX2xlbiAoJWQpXG4iCittc2dzdHIgIkRlZmVrdGVyIFZlcnplaWNobmlzYmxvY2sgJWxsdTogdW5nw7xsdGlnZSBuYW1lX2xlbiAoJWQpXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGx1IC8gJWxsdSBibG9ja3MgKCVkJSUpIgorbXNnc3RyICIlbGx1IC8gJWxsdSBCbMO2Y2tlICglZCUlKSIKKworIzogbWlzYy9lMmltYWdlLmM6NTg2IG1pc2MvZTJpbWFnZS5jOjYyNgorbXNnaWQgIkNvcHlpbmcgIgorbXNnc3RyICJLb3BpZXJlbiAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjYyMworbXNnaWQgIiIKKyJTdG9wcGluZyBub3cgd2lsbCBkZXN0cm95IHRoZSBmaWxlc3lzdGVtLCBpbnRlcnJ1cHQgYWdhaW4gaWYgeW91IGFyZSBzdXJlXG4iCittc2dzdHIgIiIKKyJKZXR6dCBhbnp1aGFsdGVuIHfDvHJkZSBkYXMgRGF0ZWlzeXN0ZW0gemVyc3TDtnJlbi4gV2VubiBTaWUgc2ljaGVyIHNpbmQsXG4iCisidW50ZXJicmVjaGVuIFNpZSBub2NoIGVpbm1hbC5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyByZW1haW5pbmcgYXQgJS4yZiBNQi9zIgorbXNnc3RyICIgJXMgYmxlaWJ0IGJlaSAlLjJmIE1CL3MiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjY2MSBtaXNjL2UyaW1hZ2UuYzoxMTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgYmxvY2sgJWxsdSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gdm9uIEJsb2NrICVsbHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3BpZWQgJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSBpbiAlcyAiCittc2dzdHIgIiVsbHUgLyAlbGx1IEJsw7Zja2UgKCVkJSUpIHd1cmRlbiBpbiAlcyBrb3BpZXJ0ICIKKworIzogbWlzYy9lMmltYWdlLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF0ICUuMmYgTUIvcyIKK21zZ3N0ciAiYmVpICUuMmYgTUIvcyIKKworIzogbWlzYy9lMmltYWdlLmM6NzU1Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBsMSB0YWJsZSIKK21zZ3N0ciAiYmVpbSBBbmZvcmRlcm4gdm9uIFNwZWljaGVyIGbDvHIgZGllIGwxLVRhYmVsbGUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjgwMAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgbDIgY2FjaGUiCittc2dzdHIgImJlaW0gQW5mb3JkZXJuIHZvbiBTcGVpY2hlciBmw7xyIGRlbiBsMi1ad2lzY2hlbnNwZWljaGVyIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo4MjMKK21zZ2lkICIiCisiV2FybmluZzogVGhlcmUgYXJlIHN0aWxsIHRhYmxlcyBpbiB0aGUgY2FjaGUgd2hpbGUgcHV0dGluZyB0aGUgY2FjaGUsIGRhdGEgIgorIndpbGwgYmUgbG9zdCBzbyB0aGUgaW1hZ2UgbWF5IG5vdCBiZSB2YWxpZC5cbiIKK21zZ3N0ciAiIgorIldhcm51bmc6IEJlaW0gU2NocmVpYmVuIGRlcyBad2lzY2hlbnNwZWljaGVycyBiZWZpbmRlbiBzaWNoIGltbWVyIG5vY2ggIgorIlRhYmVsbGVuIGluIGlobS4gRGFtaXQgZ2VoZW4gRGF0ZW4gdmVybG9yZW4gdW5kIGRhcyBBYmJpbGQgaXN0IGV2ZW50dWVsbCAiCisidW5nw7xsdGlnLlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTQ1Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBleHQyX3Fjb3cyX2ltYWdlIgorbXNnc3RyICJiZWltIFJlc2VydmllcmVuIHZvbiBTcGVpY2hlciBmw7xyIGV4dDJfcWNvdzJfaW1hZ2UiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjExNTIKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgZXh0Ml9xY293Ml9pbWFnZSIKK21zZ3N0ciAiYmVpbSBJbml0aWFsaXNpZXJlbiBkZXMgZXh0Ml9xY293Ml9pbWFnZSIKKworIzogbWlzYy9lMmltYWdlLmM6MTIxMSBtaXNjL2UyaW1hZ2UuYzoxMjI5Cittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I6IG11bHRpcGxlIHNlcXVlbnRpYWwgcmVmY291bnQgYmxvY2tzIGNyZWF0ZWQhXG4iCittc2dzdHIgIiIKKyJQcm9ncmFtbWllcmZlaGxlcjogbWVocmVyZSBzZXF1ZW56aWVsbGUgUmVmY291bnQtQmzDtmNrZSB3dXJkZW4gZXJ6ZXVndCFcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTI2OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwIgorbXNnc3RyICJiZWltIFJlc2VydmllcmVuIHZvbiBTcGVpY2hlciBmw7xyIGRpZSBCbG9jay1CaXRtYXAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyNzgKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIHNjcmFtYmxlIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiYmVpbSBSZXNlcnZpZXJlbiB2b24gU3BlaWNoZXIgZsO8ciBkaWUgdmVyd8O8cmZlbHRlIEJsb2NrLUJpdG1hcCIKKworIzogbWlzYy9lMmltYWdlLmM6MTI4NQorbXNnaWQgIlNjYW5uaW5nIGlub2Rlcy4uLlxuIgorbXNnc3RyICJJbm9kZXMgd2VyZGVuIGVpbmdlbGVzZW4g4oCmXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyOTcKK21zZ2lkICJDYW4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIiCittc2dzdHIgIkVzIGtvbm50ZSBrZWluIEJsb2NrcHVmZmVyIHJlc2VydmllcnQgd2VyZGVuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzM2IG1pc2MvZTJpbWFnZS5jOjEzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgaXRlcmF0aW5nIG92ZXIgaW5vZGUgJXUiCittc2dzdHIgImJlaW0gSXRlcmllcmVuIMO8YmVyIElub2RlICV1IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzgxCittc2dpZCAiUmF3IGFuZCBxY293MiBpbWFnZXMgY2Fubm90IGJlIGluc3RhbGxlZCIKK21zZ3N0ciAiUm9oZSB1bmQgUWNvdzItQWJiaWxkZXIga8O2bm5lbiBuaWNodCBpbnN0YWxsaWVydCB3ZXJkZW4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MDMKK21zZ2lkICJlcnJvciByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIGRlciBCaXRtYXBzIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDE1Cittc2dpZCAid2hpbGUgb3BlbmluZyBkZXZpY2UgZmlsZSIKK21zZ3N0ciAiYmVpbSDDlmZmbmVuIGRlciBHZXLDpHRlZGF0ZWkiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MjYKK21zZ2lkICJ3aGlsZSByZXN0b3JpbmcgdGhlIGltYWdlIHRhYmxlIgorbXNnc3RyICJiZWltIFNjaHJlaWJlbiBkZXIgSW5vZGUtVGFiZWxsZSIKKworIzogbWlzYy9lMmltYWdlLmM6MTUyMworbXNnaWQgIi1hIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIHdpdGggcmF3IG9yIFFDT1cyIGltYWdlcy4iCittc2dzdHIgIkRpZSBPcHRpb24g4oCeLWHigJwga2FubiBudXIgYmVpIFJvaC0gb2RlciBRQ09XMi1BYmJpbGRlcm4gYmVudXR6dCB3ZXJkZW4uIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTI5Cittc2dpZCAiT2Zmc2V0cyBhcmUgb25seSBhbGxvd2VkIHdpdGggcmF3IGltYWdlcy4iCittc2dzdHIgIk9mZnNldHMgc2luZCBudXIgYmVpIFJvaC1BYmJpbGRlcm4gZXJsYXVidC4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MzQKK21zZ2lkICJNb3ZlIG1vZGUgaXMgb25seSBhbGxvd2VkIHdpdGggcmF3IGltYWdlcy4iCittc2dzdHIgIlZlcnNjaGllYmVuIGlzdCBudXIgYmVpIFJvaC0gQWJiaWxkZXJuIGVybGF1YnQuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTM5Cittc2dpZCAiTW92ZSBtb2RlIHJlcXVpcmVzIGFsbCBkYXRhIG1vZGUuIgorbXNnc3RyICJEZXIgVmVyc2NoaWViZW1vZHVzIGVyZm9yZGVydCBkZW4g4oCeQWxsZSBEYXRlbuKAnC1Nb2R1cy4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1NDkKK21zZ2lkICJjaGVja2luZyBpZiBtb3VudGVkIgorbXNnc3RyICJQcsO8ZnVuZywgb2IgZWluZ2Vow6RuZ3QiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1NTYKK21zZ2lkICIiCisiXG4iCisiUnVubmluZyBlMmltYWdlIG9uIGEgUi9XIG1vdW50ZWQgZmlsZXN5c3RlbSBjYW4gcmVzdWx0IGluIGFuXG4iCisiaW5jb25zaXN0ZW50IGltYWdlIHdoaWNoIHdpbGwgbm90IGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuIgorIlVzZSAtZiBvcHRpb24gaWYgeW91IHJlYWxseSB3YW50IHRvIGRvIHRoYXQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEYXMgU3RhcnRlbiB2b24gRTJpbWFnZSBhdWYgZWluZW0gc2NocmVpYi0gdW5kIGxlc2JhciBlaW5nZWjDpG5ndGVuXG4iCisiRGF0ZWlzeXN0ZW0ga2FubiB6dSBlaW5lbSB1bnZvbGxzdMOkbmRpZ2VuIEFiYmlsZCBmw7xocmVuLCB3ZWxjaGVzXG4iCisidW5icmF1Y2hiYXIgZsO8ciBkaWUgRmVobGVyc3VjaGUgd8OkcmUuIFZlcndlbmRlbiBTaWUgZGllIE9wdGlvbiAtZiwgd2VublxuIgorIlNpZSBkYXMgd2lya2xpY2ggbWFjaGVuIHdvbGxlbi5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYwOAorbXNnaWQgIlFDT1cyIGltYWdlIGNhbiBub3QgYmUgd3JpdHRlbiB0byB0aGUgc3Rkb3V0IVxuIgorbXNnc3RyICIiCisiRGFzIFFDT1cyLUFiYmlsZCBrYW5uIG5pY2h0IGF1ZiBkaWUgU3RhbmRhcmRhdXNnYWJlIGdlc2NocmllYmVuIHdlcmRlbiFcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYxNAorbXNnaWQgIkNhbiBub3Qgc3RhdCBvdXRwdXRcbiIKK21zZ3N0ciAiRGVyIFN0YXR1cyBkZXIgQXVzZ2FiZSBsw6Rzc3Qgc2ljaCBuaWNodCBmZXN0c3RlbGxlblxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkltYWdlICglcykgaXMgY29tcHJlc3NlZFxuIgorbXNnc3RyICJEYXMgQWJiaWxkICglcykgaXN0IGtvbXByaW1pZXJ0XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW1hZ2UgKCVzKSBpcyBlbmNyeXB0ZWRcbiIKK21zZ3N0ciAiRGFzIEFiYmlsZCAoJXMpIGlzdCB2ZXJzY2hsw7xzc2VsdFxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjb252ZXJ0IHFjb3cyIGltYWdlICglcykgaW50byByYXcgaW1hZ2UgKCVzKSIKK21zZ3N0ciAiIgorImJlaW0gVmVyc3VjaCwgZGFzIFFjb3cyLUFiYmlsZCAoJXMpIGluIGVpbiBSb2gtQWJiaWxkICglcykgenUga29udmVydGllcmVuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjM5Cittc2dpZCAiVGhlIC1jIG9wdGlvbiBvbmx5IHN1cHBvcnRlZCBpbiByYXcgbW9kZVxuIgorbXNnc3RyICJEaWUgT3B0aW9uIOKAni1j4oCcIHdpcmQgbnVyIGltIFJvaC1Nb2R1cyB1bnRlcnN0w7x0enRcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY0NAorbXNnaWQgIlRoZSAtYyBvcHRpb24gbm90IHN1cHBvcnRlZCB3aGVuIHdyaXRpbmcgdG8gc3Rkb3V0XG4iCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uIOKAni1j4oCcIHdpcmQgYmVpbSBTY2hyZWliZW4gYXVmIGRpZSBTdGFuZGFyZGF1c2dhYmUgbmljaHQgIgorInVudGVyc3TDvHR6dFxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjUxCittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBjaGVja19idWYiCittc2dzdHIgImJlaW0gQW5mb3JkZXJuIGRlcyBQcsO8ZnB1ZmZlcnMiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NTcKK21zZ2lkICJUaGUgLXAgb3B0aW9uIG9ubHkgc3VwcG9ydGVkIGluIHJhdyBtb2RlXG4iCittc2dzdHIgIkRpZSBPcHRpb24g4oCeLXDigJwgd2lyZCBudXIgaW0gUm9oLU1vZHVzIHVudGVyc3TDvHR6dFxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsb2NrcyBhbHJlYWR5IGNvbnRhaW5lZCB0aGUgZGF0YSB0byBiZSBjb3BpZWRcbiIKK21zZ3N0ciAiJWQgQmzDtmNrZSBlbnRoaWVsdGVuIGJlcmVpdHMgZGllIHp1IGtvcGllcmVuZGVuIERhdGVuLlxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgb3BlbiAlc1xuIgorbXNnc3RyICJlMmxhYmVsOiAlcyBrYW5uIG5pY2h0IGdlw7ZmZm5ldCB3ZXJkZW4uXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogU3ByaW5nZW4genVtIFN1cGVyYmxvY2sgbmljaHQgbcO2Z2xpY2hcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3IgcmVhZGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IExlc2VmZWhsZXIgaW0gU3VwZXJibG9ja1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBub3QgYW4gZXh0MiBmaWxlc3lzdGVtXG4iCittc2dzdHIgImUybGFiZWw6IEtlaW4gZXh0Mi1EYXRlaXN5c3RlbVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo5NyBtaXNjL3R1bmUyZnMuYzoyMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGxhYmVsIHRvbyBsb25nLCB0cnVuY2F0aW5nLlxuIgorbXNnc3RyICJXYXJudW5nOiBOYW1lIHp1IGxhbmcsIHdpcmQgZ2Vrw7xyenQuXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrIGFnYWluXG4iCittc2dzdHIgImUybGFiZWw6IEVybmV1dGVzIFNwcmluZ2VuIHp1bSBTdXBlcmJsb2NrIG5pY2h0IG3DtmdsaWNoXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciB3cml0aW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogRmVobGVyIGJlaW0gU2NocmVpYmVuIGRlcyBTdXBlcmJsb2Nrc1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMTcgbWlzYy90dW5lMmZzLmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBlMmxhYmVsIGRldmljZSBbbmV3bGFiZWxdXG4iCittc2dzdHIgIkF1ZnJ1ZjogZTJsYWJlbCBHZXLDpHQgW25ldWVyX05hbWVdXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIDx0cmFuc2FjdGlvbiBmaWxlPiA8ZmlsZXN5c3RlbT5cbiIKK21zZ3N0ciAiQXVmcnVmOiAlcyA8VHJhbnNha3Rpb25zZGF0ZWk+IDxEYXRlaXN5c3RlbT5cbiIKKworIzogbWlzYy9lMnVuZG8uYzo1MgorbXNnaWQgIkZhaWxlZCB0byByZWFkIHRoZSBmaWxlIHN5c3RlbSBkYXRhIFxuIgorbXNnc3RyICJEaWUgRGF0ZWlzeXN0ZW1kYXRlbiBrb25udGVuIG5pY2h0IGdlbGVzZW4gd2VyZGVuIFxuIgorCisjOiBtaXNjL2UydW5kby5jOjYyIG1pc2MvZTJ1bmRvLmM6ODMgbWlzYy9lMnVuZG8uYzoxMDggbWlzYy9lMnVuZG8uYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9mZXRjaCAlc1xuIgorbXNnc3RyICJ0ZGJfZmV0Y2ggdm9uICVzIGlzdCBmZWhsZ2VzY2hsYWdlblxuIgorCisjOiBtaXNjL2UydW5kby5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBNb3VudCB0aW1lIGRpZG4ndCBtYXRjaCAldVxuIgorbXNnc3RyICJEaWUgWmVpdCBkZXMgbGV0enRlbiBFaW5ow6RuZ2VucyBkZXMgRGF0ZWlzeXN0ZW1zIHdhciBuaWNodCAldVxuIgorCisjOiBtaXNjL2UydW5kby5jOjg5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIFVVSUQgZGlkbid0IG1hdGNoIFxuIgorbXNnc3RyICJEaWUgVVVJRCBkZXMgRGF0ZWlzeXN0ZW1zIHN0aW1tdGUgbmljaHQgw7xiZXJlaW4gXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfb3BlbiAlc1xuIgorbXNnc3RyICJ0ZGJfb3BlbiB2b24gJXMgaXN0IGZlaGxnZXNjaGxhZ2VuXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gw5xiZXJwcsO8ZmVuLCBvYiAlcyBlaW5nZWjDpG5ndCBpc3QuXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTc1Cittc2dpZCAiZTJ1bmRvIHNob3VsZCBvbmx5IGJlIHJ1biBvbiB1bm1vdW50ZWQgZmlsZSBzeXN0ZW1cbiIKK21zZ3N0ciAiZTJ1bmRvIHNvbGx0ZSBudXIgYXVmIG5pY2h0LWVpbmdlaMOkbmd0ZW4gRGF0ZWlzeXN0ZW1lbiBsYXVmZW5cbiIKKworIzogbWlzYy9lMnVuZG8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXNcbiIKK21zZ3N0ciAiJXMga29ubnRlIG5pY2h0IGdlw7ZmZm5ldCB3ZXJkZW5cbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwbGF5ZWQgdHJhbnNhY3Rpb24gb2Ygc2l6ZSAlemQgYXQgbG9jYXRpb24gJWxsdVxuIgorbXNnc3RyICJadXLDvGNrZ2VzcGllbHRlIFRyYW5zYWt0aW9uIGRlciBHcsO2w59lICV6ZCBhbiBQb3NpdGlvbiAlbGx1XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB3cml0ZSAlc1xuIgorbXNnc3RyICJTY2hyZWliZW4gdm9uICVzIGlzdCBmZWhsZ2VzY2hsYWdlblxuIgorCisjOiBtaXNjL2ZzY2suYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogY291bGRuJ3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiV0FSTlVORzogJXMga29ubnRlIG5pY2h0IGdlw7ZmZm5ldCB3ZXJkZW46ICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBiYWQgZm9ybWF0IG9uIGxpbmUgJWQgb2YgJXNcbiIKK21zZ3N0ciAiV0FSTlVORzogZmFsc2NoZXMgRm9ybWF0IGluIFplaWxlICVkIHZvbiAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNzAKK21zZ2lkICIiCisiV0FSTklORzogWW91ciAvZXRjL2ZzdGFiIGRvZXMgbm90IGNvbnRhaW4gdGhlIGZzY2sgcGFzc25vXG4iCisiXHRmaWVsZC4gIEkgd2lsbCBrbHVkZ2UgYXJvdW5kIHRoaW5ncyBmb3IgeW91LCBidXQgeW91XG4iCisiXHRzaG91bGQgZml4IHlvdXIgL2V0Yy9mc3RhYiBmaWxlIGFzIHNvb24gYXMgeW91IGNhbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIldBUk5VTkc6IElocmUgL2V0Yy9mc3RhYiBlbnRow6RsdCBrZWluZSBBbmdhYmUgZGFyw7xiZXIsIHdhbm5cbiIKKyJcdGRhcyBEYXRlaXN5c3RlbSBnZXByw7xmdCB3ZXJkZW4gc29sbC4gRGllcyB3aXJkXG4iCisiXHRpZ25vcmllcnQsIGFiZXIgU2llIHNvbGx0ZW4gSWhyZSAvZXRjL2ZzdGFiIHNvIHNjaG5lbGxcbiIKKyJcdHdpZSBtw7ZnbGljaCBrb3JyaWdpZXJlbi5cbiIKKyJcbiIKKworIzogbWlzYy9mc2NrLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6ICVzOiBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNjazogJXM6IG5pY2h0IGdlZnVuZGVuXG4iCisKKyM6IG1pc2MvZnNjay5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FpdDogTm8gbW9yZSBjaGlsZCBwcm9jZXNzPyE/XG4iCittc2dzdHIgIiVzOiB3YWl0OiBrZWluIEtpbmRwcm96ZXNzIG1laHI/IT9cbiIKKworIzogbWlzYy9mc2NrLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmcuLi4gJXMgZm9yIGRldmljZSAlcyBleGl0ZWQgd2l0aCBzaWduYWwgJWQuXG4iCittc2dzdHIgIldhcm51bmcuLi4gJXMgZsO8ciBHZXLDpHQgJXMgd3VyZGUgbWl0IFNpZ25hbCAlZCBiZWVuZGV0LlxuIgorCisjOiBtaXNjL2ZzY2suYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXM6IHN0YXR1cyBpcyAleCwgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIKK21zZ3N0ciAiJXMgJXM6IFN0YXR1cyBpc3QgJXgsIHNvbGx0ZSBuaWUgdm9ya29tbWVuLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluaXNoZWQgd2l0aCAlcyAoZXhpdCBzdGF0dXMgJWQpXG4iCittc2dzdHIgIkJlZW5kZXQgbWl0ICVzIChFeGl0LVN0YXR1cyAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6NzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBFcnJvciAlZCB3aGlsZSBleGVjdXRpbmcgZnNjay4lcyBmb3IgJXNcbiIKK21zZ3N0ciAiJXM6IEZlaGxlciAlZCBiZWkgQXVzZsO8aHJ1bmcgdm9uIGZzY2suJXMgZsO8ciAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzo3NDIKK21zZ2lkICIiCisiRWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSBmaWxlc3lzdGVtIHR5cGVzIHBhc3NlZCB0byAtdCBtdXN0IGJlIHByZWZpeGVkXG4iCisid2l0aCAnbm8nIG9yICchJy5cbiIKK21zZ3N0ciAiIgorIkJlaSAtdCBtw7xzc2VuIGVudHdlZGVyIGFsbGVuIG9kZXIga2VpbmVtIERhdGVpc3lzdGVtIGVpbiDigJ5ub+KAnCBiencuIOKAniHigJxcbiIKKyJ2b3Jhbmdlc3RlbGx0IHdlcmRlbi5cbiIKKworIzogbWlzYy9mc2NrLmM6NzYxCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBmaWxlc3lzdGVtIHR5cGVzXG4iCittc2dzdHIgIlNwZWljaGVyIGbDvHIgRGF0ZWlzeXN0ZW10eXBlbiBrYW5uIG5pY2h0IHJlc2VydmllcnQgd2VyZGVuLlxuIgorCisjOiBtaXNjL2ZzY2suYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBza2lwcGluZyBiYWQgbGluZSBpbiAvZXRjL2ZzdGFiOiBiaW5kIG1vdW50IHdpdGggbm9uemVybyBmc2NrIHBhc3MgIgorIm51bWJlclxuIgorbXNnc3RyICIiCisiJXM6IFVuZ8O8bHRpZ2UgWmVpbGUgaW4gL2V0Yy9mc3RhYiB3aXJkIMO8YmVyc3BydW5nZW46IGJpbmQgbW91bnQgbWl0XG4iCisiIER1cmNoZ2FuZ3NudW1tZXIgZsO8ciBmc2NrLCBkaWUgbmljaHQgTnVsbCBpc3RcbiIKKworIzogbWlzYy9mc2NrLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6IGNhbm5vdCBjaGVjayAlczogZnNjay4lcyBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNjazogJXMga2FubiBuaWNodCDDvGJlcnByw7xmdCB3ZXJkZW46IGZzY2suJXMgbmljaHQgZ2VmdW5kZW5cbiIKKworIzogbWlzYy9mc2NrLmM6OTY3Cittc2dpZCAiQ2hlY2tpbmcgYWxsIGZpbGUgc3lzdGVtcy5cbiIKK21zZ3N0ciAiQWxsZSBEYXRlaXN5c3RlbWUgd2VyZGVuIMO8YmVycHLDvGZ0LlxuIgorCisjOiBtaXNjL2ZzY2suYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIi0td2FpdGluZy0tIChwYXNzICVkKVxuIgorbXNnc3RyICItLXdhcnRlbi0tIChEdXJjaGdhbmcgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNzgKK21zZ2lkICIiCisiVXNhZ2U6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZmQgXSBdIFstdCBmc3R5cGVdIFtmcy1vcHRpb25zXSBbZmlsZXN5cyAuLi5dXG4iCittc2dzdHIgIiIKKyJBdWZydWY6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZmQgXSBdIFstdCBEYXRlc3lzdGVtdHlwXSBbRlMtT3B0aW9uZW5dICIKKyJbRGF0ZWlzeXN0ZW0uLi5dXG4iCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiJXM6IHp1IHZpZWxlIEdlcsOkdGVcbiIKKworIzogbWlzYy9mc2NrLmM6MTE1MyBtaXNjL2ZzY2suYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiJXM6IHp1IHZpZWxlIEFyZ3VtZW50ZVxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWYWRsdl0gW2ZpbGVzLi4uXVxuIgorbXNnc3RyICJBdWZydWY6ICVzIFstUlZhZGx2XSBbRGF0ZWllbi4uLl1cbiIKKworIzogbWlzYy9sc2F0dHIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJCZWltIExlc2VuIGRlciBGbGFncyB2b24gJXMiCisKKyM6IG1pc2MvbHNhdHRyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJCZWltIExlc2VuIGRlciBWZXJzaW9uIHZvbiAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSBbLUMgY2x1c3Rlci1zaXplXVxuIgorIlx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIGlub2RlLXNpemVdIFstSiBqb3VybmFsLW9wdGlvbnNdXG4iCisiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKyJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisiXHRbLWcgYmxvY2tzLXBlci1ncm91cF0gWy1MIHZvbHVtZS1sYWJlbF0gWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG4iCisiXHRbLU8gZmVhdHVyZVssLi4uXV0gWy1yIGZzLXJldmlzaW9uXSBbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXVxuIgorIlx0Wy10IGZzLXR5cGVdIFstVCB1c2FnZS10eXBlIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSBkZXZpY2UgW2Jsb2Nrcy0iCisiY291bnRdXG4iCittc2dzdHIgIiIKKyJBdWZydWY6ICVzIFstY3wtbCBEYXRlaW5hbWVdIFstYiBCbG9ja2dyw7bDn2VdIFstQyBDbHVzdGVyZ3LDtsOfZV1cbiIKKyJcdFstaSBCeXRlcy1wcm8tSW5vZGVdIFstSSBJbm9kZS1HcsO2w59lXSBbLUogSm91cm5hbC1PcHRpb25lbl1cbiIKKyJcdFstRyBHcsO2w59lX2Rlcl9NZXRhZ3J1cHBlXSBbLU4gQW56YWhsX2Rlcl9Jbm9kZXNdXG4iCisiXHRbLW0gUmVzZXJ2aWVydGUtQmzDtmNrZS1Qcm96ZW50c2F0el0gWy1vIEVyemV1Z2VyLU9TXVxuIgorIlx0Wy1nIEJsw7Zja2UtcHJvLUdydXBwZV0gWy1MIFZvbHVtZS1MYWJlbF1cbiIKKyJcdFstTSBsZXR6dGVzLWVpbmdlaMOkbmd0ZXMtVmVyemVpY2huaXNdIFstTyBFaWdlbnNjaGFmdFssLi4uXV1cbiIKKyJcdFstciBmcy1SZXZpc2lvbl0gWy1FIGVyd2VpdGVydGUtT3B0aW9uWywuLi5dXVxuIgorIlx0Wy10IERhdGVpc3lzdGVtdHlwXSBbLVQgVmVyd2VuZHVuZ3MtVHlwIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXVxuIgorIlx0R2Vyw6R0IFtCbG9jay1BbnphaGxdXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgY29tbWFuZDogJXNcbiIKK21zZ3N0ciAiQmVmZWhsIHdpcmQgYXVzZ2Vmw7xocnQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBydW4gJyVzJyIKK21zZ3N0ciAid8OkaHJlbmQgZGVzIFZlcnN1Y2hzLCDigJ4lc+KAnCBhdXN6dWbDvGhyZW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYzCittc2dpZCAid2hpbGUgcHJvY2Vzc2luZyBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBwcm9ncmFtIgorbXNnc3RyICJiZWltIEF1c3dlcnRlbiBkZXIg4oCeQmFkIEJsb2Nr4oCcLUxpc3RlIHZvbSBQcm9ncmFtbSIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWQgaW4gcHJpbWFyeSBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3IgYXJlYSBiYWQuXG4iCittc2dzdHIgIkJsb2NrICVkIGltIHByaW3DpHJlbiBTdXBlcmJsb2NrL0dydXBwZW5kZXNrcmlwdG9yYmVyZWljaCBkZWZla3QuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrcyAldSB0aHJvdWdoICV1IG11c3QgYmUgZ29vZCBpbiBvcmRlciB0byBidWlsZCBhIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJEaWUgQmzDtmNrZSAldSBiaXMgZWluc2NobGllw59saWNoICV1IG3DvHNzZW4gaW4gT3JkbnVuZyBzZWluLCB1bSBlaW5cbiIKKyJcdERhdGVpc3lzdGVtIHp1IGVyc3RlbGxlbi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTUKK21zZ2lkICJBYm9ydGluZy4uLi5cbiIKK21zZ3N0ciAiQWJicnVjaC4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogdGhlIGJhY2t1cCBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3JzIGF0IGJsb2NrICV1IGNvbnRhaW5cbiIKKyJcdGJhZCBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJXYXJudW5nOiBEaWUgU2ljaGVydW5nIGRlcyBTdXBlcmJsb2NrcyBiencuIEdydXBwZW5kZXNrcmlwdG9ycyBpbiBCbG9jayAldVxuIgorIlx0ZW50aMOkbHQgZGVmZWt0ZSBCbMO2Y2tlLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjMzNAorbXNnaWQgIndoaWxlIG1hcmtpbmcgYmFkIGJsb2NrcyBhcyB1c2VkIgorbXNnc3RyICJiZWltIE1hcmtpZXJlbiB2b24gZGVmZWt0ZW4gQmzDtmNrZW4gYWxzIOKAnmJlbGVndOKAnCIKKworIzogbWlzYy9ta2UyZnMuYzozODYKK21zZ2lkICJXcml0aW5nIGlub2RlIHRhYmxlczogIgorbXNnc3RyICJJbm9kZS1UYWJlbGxlbiB3ZXJkZW4gZ2VzY2hyaWViZW46ICIKKworIzogbWlzYy9ta2UyZnMuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCB3cml0ZSAlZCBibG9ja3MgaW4gaW5vZGUgdGFibGUgc3RhcnRpbmcgYXQgJWxsdTogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVkIEJsw7Zja2Uga29ubnRlbiBuaWNodCBpbiBkaWUgSW5vZGVuLVRhYmVsbGVuIGJlZ2lubmVuZCBiZWkgJWxsdSAiCisiZ2VzY2hyaWViZW4gd2VyZGVuOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjQyMSBtaXNjL21rZTJmcy5jOjI0NzkgbWlzYy9ta2UyZnMuYzoyNzY0Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiZXJsZWRpZ3QgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0MzIKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyByb290IGRpciIKK21zZ3N0ciAiYmVpbSBFcnN0ZWxsZW4gZGVzIFd1cnplbHZlcnplaWNobmlzc2VzIgorCisjOiBtaXNjL21rZTJmcy5jOjQzOQorbXNnaWQgIndoaWxlIHJlYWRpbmcgcm9vdCBpbm9kZSIKK21zZ3N0ciAiYmVpbSBMZXNlbiBkZXMgUm9vdC1Jbm9kZXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDUxCittc2dpZCAid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIKK21zZ3N0ciAiYmVpbSBTZXR6ZW4gZGVzIFJvb3QtSW5vZGUtRWlnZW50w7xtZXJzIgorCisjOiBtaXNjL21rZTJmcy5jOjQ2OQorbXNnaWQgIndoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJiZWltIEVyc3RlbGxlbiB2b24gL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDc2Cittc2dpZCAid2hpbGUgbG9va2luZyB1cCAvbG9zdCtmb3VuZCIKK21zZ3N0ciAiYmVpbSBTdWNoZW4gdm9uIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQ4OQorbXNnaWQgIndoaWxlIGV4cGFuZGluZyAvbG9zdCtmb3VuZCIKK21zZ3N0ciAiYmVpbSBFeHBhbmRpZXJlbiB2b24gL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTA0Cittc2dpZCAid2hpbGUgc2V0dGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgImJlaW0gU2V0emVuIGRlcyDigJ5CYWQgQmxvY2vigJwtSW5vZGVzIgorCisjOiBtaXNjL21rZTJmcy5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJPdXQgb2YgbWVtb3J5IGVyYXNpbmcgc2VjdG9ycyAlZC0lZFxuIgorbXNnc3RyICJTcGVpY2hlciB2b2xsIGJlaW0gTMO2c2NoZW4gZGVyIFNla3RvcmVuICVkLSVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrIDA6ICVzXG4iCittc2dzdHIgIldhcm51bmc6IEJsb2NrICVzIGtvbm50ZSBuaWNodCBnZWxlc2VuIHdlcmRlblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgZXJhc2Ugc2VjdG9yICVkOiAlc1xuIgorbXNnc3RyICJXYXJudW5nOiBTZWt0b3IgJWQga29ubnRlIG5pY2h0IGdlbMO2c2NodCB3ZXJkZW46ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTczCittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAiYmVpbSBJbml0aWFsaXNpZXJlbiBkZXMgSm91cm5hbC1TdXBlcmJsb2NrcyIKKworIzogbWlzYy9ta2UyZnMuYzo1ODEKK21zZ2lkICJaZXJvaW5nIGpvdXJuYWwgZGV2aWNlOiAiCittc2dzdHIgIkpvdXJuYWwtR2Vyw6R0IHdpcmQgbWl0IE51bGxlbiDDvGJlcnNjaHJpZWJlbjogIgorCisjOiBtaXNjL21rZTJmcy5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGpvdXJuYWwgZGV2aWNlIChibG9jayAlbGx1LCBjb3VudCAlZCkiCittc2dzdHIgImJlaW0gw5xiZXJzY2hyZWliZW4gZGVzIEpvdXJuYWwtR2Vyw6R0ZXMgbWl0IE51bGxlbiAoQmxvY2sgJWxsdSwgTnIuICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzo2MTEKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAiYmVpbSBTY2hyZWliZW4gZGVzIEpvdXJuYWwtU3VwZXJibG9ja3MiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGZpbGVzeXN0ZW0gd2l0aCAlbGx1ICVkayBibG9ja3MgYW5kICV1IGlub2Rlc1xuIgorbXNnc3RyICJFaW4gRGF0ZWlzeXN0ZW1zIG1pdCAlbGx1ICglZGspIEJsw7Zja2VuIHVuZCAldSBJbm9kZXMgd2lyZCBlcnpldWd0LlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2FybmluZzogJWxsdSBibG9ja3MgdW51c2VkLlxuIgorIlxuIgorbXNnc3RyICIiCisiV2FybnVuZzogJWxsdSBCbMO2Y2tlIHVuYmVudXR6dC5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBsYWJlbD0lc1xuIgorbXNnc3RyICJEYXRlaXN5c3RlbWJlemVpY2hudW5nPSVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIk9TIHR5cGU6ICVzXG4iCittc2dzdHIgIk9TLVR5cDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJCbG9ja2dyw7bDn2U9JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2x1c3RlciBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIkNsdXN0ZXJncsO2w59lPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyYWdtZW50IHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiRnJhZ21lbnRncsO2w59lPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0cmlkZT0ldSBibG9ja3MsIFN0cmlwZSB3aWR0aD0ldSBibG9ja3NcbiIKK21zZ3N0ciAiU3RyaWRlPSV1IEJsw7Zja2UsIFN0cmlwZWJyZWl0ZT0ldSBCbMO2Y2tlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcywgJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXUgSW5vZGVzLCAlbGx1IEJsw7Zja2VcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSBibG9ja3MgKCUyLjJmJSUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlclxuIgorbXNnc3RyICIlbGx1IEJsw7Zja2UgKCUyLjJmJSUpIHJlc2VydmllcnQgZsO8ciBkZW4gU3VwZXJ1c2VyXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0IGRhdGEgYmxvY2s9JXVcbiIKK21zZ3N0ciAiRXJzdGVyIERhdGVuYmxvY2s9JXVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUm9vdCBkaXJlY3Rvcnkgb3duZXI9JXU6JXVcbiIKK21zZ3N0ciAiRWlnZW50w7xtZXIgZGVzIFd1cnplbHZlcnplaWNobmlzc2VzPSV1OiV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9JWx1XG4iCittc2dzdHIgIk1heGltYWxlIERhdGVpc3lzdGVtLUJsw7Zja2U9JWx1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3Vwc1xuIgorbXNnc3RyICIldSBCbG9ja2dydXBwZW5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgQmxvY2tncnVwcGVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgY2x1c3RlcnMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IEJsw7Zja2UgcHJvIEdydXBwZSwgJXUgQ2x1c3RlciBwcm8gR3J1cHBlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgQmzDtmNrZSBwcm8gR3J1cHBlLCAldSBGcmFnbWVudGUgcHJvIEdydXBwZVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IElub2RlcyBwcm8gR3J1cHBlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gVVVJRDogJXNcbiIKK21zZ3N0ciAiVVVJRCBkZXMgRGF0ZWlzeXN0ZW1zOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OQorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgIlN1cGVyYmxvY2stU2ljaGVydW5nc2tvcGllbiBnZXNwZWljaGVydCBpbiBkZW4gQmzDtmNrZW46ICIKKworIzogbWlzYy9ta2UyZnMuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgJy1PIDY0Yml0J1xuIgorbXNnc3RyICIlcyBlcmZvcmRlcnQg4oCeLU8gNjRCaXTigJxcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtdXN0IGJlIGJlZm9yZSAncmVzaXplPSV1J1xuIgorbXNnc3RyICLigJ4lc+KAnCBtdXNzIHZvciDigJ5yZXNpemU9JXXigJwga29tbWVuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Nzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZGVzY19zaXplOiAnJXMnXG4iCittc2dzdHIgIlVuenVsw6Rzc2lnZSBkZXNjX3NpemU6IOKAniVz4oCcXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2Zmc2V0OiAlc1xuIgorbXNnc3RyICJVbnp1bMOkc3NpZ2VyIE9mZnNldDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MTIgbWlzYy90dW5lMmZzLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCittc2dzdHIgIlVuZ8O8bHRpZ2VzIG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgIyBvZiBiYWNrdXAgc3VwZXJibG9ja3M6ICVzXG4iCittc2dzdHIgIlVuZ8O8bHRpZ2UgQW56YWhsIHZvbiBFcnNhdHotU3VwZXJibMO2Y2tlbjogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJVbmfDvGx0aWdlciDigJ5zdHJpZGXigJwtUGFyYW1ldGVyOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlwZS13aWR0aCBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFN0cmlwZWJyZWl0ZS1QYXJhbWV0ZXI6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmVzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiVW5nw7xsdGlnZXIg4oCecmVzaXpl4oCcLVBhcmFtZXRlcjogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4OTMKK21zZ2lkICJUaGUgcmVzaXplIG1heGltdW0gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGZpbGVzeXN0ZW0gc2l6ZS5cbiIKK21zZ3N0ciAiIgorIkRhcyBNYXhpbXVtIGRlciBWZXJncsO2w59lcnVuZyBtdXNzIG9iZXJoYWxiIGFscyBkZXIgRGF0ZWlzeXN0ZW0tR3LDtsOfZSAiCisibGllZ2VuLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjkxNworbXNnaWQgIk9uLWxpbmUgcmVzaXppbmcgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorIk9ubGluZS1HcsO2w59lbsOkbmRlcnVuZ2VuIHdlcmRlbiBiZWkgUmV2aXNvbi0wLURhdGVpc3lzdGVtZW4gbmljaHRcbiIKKyJcdHVudGVyc3TDvHR6dFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjk0NCBtaXNjL21rZTJmcy5jOjk1MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJvb3Rfb3duZXI6ICclcydcbiIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgRWlnZW50w7xtZXIgZGVyIFd1cnplbDog4oCeJXPigJxcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBxdW90YXR5cGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJVbmfDvGx0aWdlciBRdW90YXR5cC1QYXJhbWV0ZXI6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRtbXBfdXBkYXRlX2ludGVydmFsPTxpbnRlcnZhbD5cbiIKKyJcdG51bV9iYWNrdXBfc2I9PDB8MXwyPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGRhdGEgY2h1bmsgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqIGRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0b2Zmc2V0PTxvZmZzZXQgdG8gY3JlYXRlIHRoZSBmaWxlIHN5c3RlbT5cbiIKKyJcdHJlc2l6ZT08cmVzaXplIG1heGltdW0gc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRwYWNrZWRfbWV0YV9ibG9ja3M9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRyb290X3VpZD08dWlkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0cm9vdF9naWQ9PGdpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdGRpc2NhcmRcbiIKKyJcdG5vZGlzY2FyZFxuIgorIlx0cXVvdGF0eXBlPTx1c3IgT1IgZ3JwPlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiVW5nw7xsdGlnZSBPcHRpb24oZW4pIGFuZ2VnZWJlbjogJXNcbiIKKyJcbiIKKyJFcndlaXRlcnRlIE9wdGlvbmVuIHdlcmRlbiBkdXJjaCBLb21tYXRhIGdldHJlbm50LiBNYW5jaGUgZXJ3YXJ0ZW4gZWluXG4iCisiXHRBcmd1bWVudCwgd2VsY2hlcyBtaXQgR2xlaWNoaGVpdHN6ZWljaGVuICjigJ494oCcKSB6dWdld2llc2VuIHdpcmQuXG4iCisiXG4iCisiR8O8bHRpZ2UgZXJ3ZWl0ZXJ0ZSBPcHRpb25lbiBzaW5kOlxuIgorIlx0bW1wX3VwZGF0ZV9pbnRlcnZhbD08SW50ZXJ2YWxsPlxuIgorIlx0bnVtX2JhY2t1cF9zYj08MHwxfDI+XG4iCisiXHRzdHJpZGU9PFJBSUQtU2VnbWVudGdyw7bDn2UgaW4gQmzDtmNrZW4+XG4iCisiXHRzdHJpcGUtd2lkdGg9PFJBSUQgU3RyaWRlICogRGF0ZW5wbGF0dGVuIGluIEJsw7Zja2VuPlxuIgorIlx0b2Zmc2V0PTxPZmZzZXQgZsO8ciBkYXMgRGF0ZWlzeXN0ZW0+XG4iCisiXHRyZXNpemU9PE9iZXJncmVuemUgZsO8ciBHcsO2w59lbsOkbmRlcnVuZyBpbiBCbMO2Y2tlbj5cbiIKKyJcdHBhY2tlZF9tZXRhX2Jsb2Nrcz08MCBkZWFrdGl2aWVydCwgMSBha3RpdmllcnQ+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIGbDvHIgZGVha3RpdmllcnQsIDEgZsO8ciBha3RpdmllcnQ+XG4iCisiXHRsYXp5X2pvdXJuYWxfaW5pdD08MCBmw7xyIGRlYWt0aXZpZXJ0LCAxIGbDvHIgYWt0aXZpZXJ0PlxuIgorIlx0cm9vdF91aWQ9PFVJRCBkZXMgV3VyemVsdmVyemVpY2huaXNzZXM+XG4iCisiXHRyb290X2dpZD08R0lEIGRlcyBXdXJ6ZWx2ZXJ6ZWljaG5pc3Nlcz5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdGRpc2NhcmRcbiIKKyJcdG5vZGlzY2FyZFxuIgorIlx0cXVvdGF0eXBlPTx1c3IgT0RFUiBncnA+XG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogUkFJRCBzdHJpcGUtd2lkdGggJXUgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2Ygc3RyaWRlICV1LlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiV2FybnVuZzogRGllIFN0cmlwZWJyZWl0ZSAldSBkZXMgUkFJRHMgaXN0IGtlaW4gVmllbGZhY2hlcyBkZXMgU3RyaWRlcyAldS5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gbWtlMmZzIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisiU3ludGF4ZmVobGVyIGluIGRlciBLb25maWd1cmF0aW9uc2RhdGVpIHZvbiBta2UyZnMgKCVzLCBaZWlsZSAjJWQpXG4iCisiXHQlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNjggbWlzYy90dW5lMmZzLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJVbmfDvGx0aWdlIERhdGVpc3lzdGVtLU9wdGlvbiBhbmdlZ2ViZW46ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA4MCBtaXNjL3R1bmUyZnMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtb3VudCBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJVbmfDvGx0aWdlIE9wdGlvbiBmw7xyIGRhcyBFaW5ow6RuZ2VuIGFuZ2VnZWJlbjogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJZb3VyIG1rZTJmcy5jb25mIGZpbGUgZG9lcyBub3QgZGVmaW5lIHRoZSAlcyBmaWxlc3lzdGVtIHR5cGUuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJJaHJlIERhdGVpIG1rZTJmcy5jb25mIGRlZmluaWVydCBkZW4gVHlwIGRlcyBEYXRlaXN5c3RlbXMgJXMgbmljaHQuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyNAorbXNnaWQgIiIKKyJZb3UgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGFuIHVwZGF0ZWQgbWtlMmZzLmNvbmYgZmlsZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlNpZSBtw7xzc2VuIHdhaHJzY2hlaW5saWNoIGVpbmUgYWt0dWFsaXNpZXJ0ZSBWZXJzaW9uIGRlciBEYXRlaSAiCisiaW5zdGFsbGllcmVuLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjgKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICJBYmJydWNo4oCmXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGZzX3R5cGUgJXMgaXMgbm90IGRlZmluZWQgaW4gbWtlMmZzLmNvbmZcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIldhcm51bmc6IGRlciBEYXRlaXN5c3RlbXR5cCAlcyBpc3QgaW4gbWtlMmZzLmNvbmYgbmljaHQgZGVmaW5pZXJ0XG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ0OQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IFBBVEguXG4iCittc2dzdHIgIkVzIGtvbm50ZSBrZWluIFNwZWljaGVyIGbDvHIgZGVuIG5ldWVuIFBGQUQgcmVzZXJ2aWVydCB3ZXJkZW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IChlcnJvcjogJWxkKS5cbiIKK21zZ3N0ciAiRGFzIFByb2ZpbCBrb25udGUgbmljaHQgZXJmb2xncmVpY2ggaW5pdGlhbGlzaWVydCB3ZXJkZW46ICVsZCkuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUyMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrIHNpemUgLSAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZSBCbG9ja2dyw7bDn2UgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgdXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIKK21zZ3N0ciAiIgorIldhcm51bmc6IEVpbmUgQmxvY2tncsO2w59lIHZvbiAlZCBpc3QgYXVmIGRlbiBtZWlzdGVuIFN5c3RlbSB1bmJyYXVjaGJhci5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2x1c3RlciBzaXplIC0gJXMiCittc2dzdHIgInVuZ8O8bHRpZ2UgQ2x1c3Rlcmdyw7bDn2UgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTUzCittc2dpZCAiJy1SJyBpcyBkZXByZWNhdGVkLCB1c2UgJy1FJyBpbnN0ZWFkIgorbXNnc3RyICLigJ4tUuKAnCBpc3QgdmVyYWx0ZXQsIGJpdHRlIHZlcndlbmRlbiBTaWUgc3RhdHRkZXNzZW4g4oCeLUXigJwiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU2NQorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBibG9ja3MgcGVyIGdyb3VwIgorbXNnc3RyICJEaWUgWmFobCBkZXIgQmzDtmNrZSBwcm8gR3J1cHBlIGlzdCB1bnp1bMOkc3NpZyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTcwCittc2dpZCAiYmxvY2tzIHBlciBncm91cCBtdXN0IGJlIG11bHRpcGxlIG9mIDgiCittc2dzdHIgIkRpZSBBbnphaGwgZGVyIEJsw7Zja2UgcHJvIEdydXBwZSBtdXNzIGVpbiBWaWVsZmFjaGVzIHZvbiA4IHNlaW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU3OAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBmbGV4X2JnIHNpemUiCittc2dzdHIgIkRlciBXZXJ0IGbDvHIgZGllIEdyw7bDn2Ugdm9uIGZsZXhfYmcgaXN0IHVuenVsw6Rzc2lnIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODQKK21zZ2lkICJmbGV4X2JnIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIiCittc2dzdHIgIkRpZSBHcsO2w59lIHZvbiBmbGV4X2JnIG11c3MgZWluZSBQb3Rlbnogdm9uIDIgc2VpbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZsZXhfYmcgc2l6ZSAoJWx1KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyXjMxIgorbXNnc3RyICJEaWUgR3LDtsOfZSB2b24gZmxleF9iZyAoJWx1KSBtdXNzIGdsZWljaCBvZGVyIHdlbmlnZXIgYWxzIDJeMzEgc2VpbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjAwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgcmF0aW8gJXMgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJVbnp1bMOkc3NpZ2UgSW5vZGUtUmF0ZSAlcyAobWluICVkL21heCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZSBJbm9kZS1HcsO2w59lIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyMworbXNnaWQgIiIKKyJXYXJuaW5nOiAtSyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZSAnLUUgIgorIm5vZGlzY2FyZCcgZXh0ZW5kZWQgb3B0aW9uIGluc3RlYWQhXG4iCittc2dzdHIgIiIKKyJXYXJudW5nOiBEaWUgT3B0aW9uIC1LIHdpcmQgYmFsZCBuaWNodCBtZWhyIHVudGVyc3TDvHp0LiBWZXJ3ZW5kZW4gU2llICIKKyJzdGF0dGRlc3NlbiBkaWUgRXJ3ZWl0ZXJ1bmdzb3B0aW9uIOKAni1FIG5vZGlzY2FyZOKAnCFcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjM0Cittc2dpZCAiaW4gbWFsbG9jIGZvciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorbXNnc3RyICJpbiBtYWxsb2MgZsO8ciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBXZXJ0IGbDvHIgZGllIHByb3plbnR1YWxlIEFuemFobCByZXNlcnZpZXJ0ZXIgQmzDtmNrZSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bSBpbm9kZXMgLSAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZSBBbnphaGwgdm9uIElub2RlcyAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uIGxldmVsIC0gJXMiCittc2dzdHIgInVuZ8O8bHRpZ2UgVmVyc2lvbiAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSByZXZpc2lvbiAlZCIKK21zZ3N0ciAiYmVpbSBWZXJzdWNoLCBSZXZpc2lvbiAlZCB6dSBlcnpldWdlbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjk4Cittc2dpZCAiVGhlIC10IG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIkRpZSBPcHRpb24g4oCeLXTigJwgZGFyZiBudXIgZWlubWFsIGFuZ2VnZWJlbiB3ZXJkZW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTcwNgorbXNnaWQgIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICJEaWUgT3B0aW9uIOKAni1U4oCcIGRhcmYgbnVyIGVpbm1hbCBhbmdlZ2ViZW4gd2VyZGVuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NTkgbWlzYy9ta2UyZnMuYzoyODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgZGV2aWNlICVzXG4iCittc2dzdHIgImJlaW0gVmVyc3VjaCwgZGFzIEpvdXJuYWxnZXLDpHQgJXMgenUgw7ZmZm5lblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBkZXYgYmxvY2tzaXplICglZCkgc21hbGxlciB0aGFuIG1pbmltdW0gYmxvY2tzaXplICVkXG4iCittc2dzdHIgIiIKKyJEaWUgQmxvY2tncsO2w59lIGRlcyBKb3VybmFsZ2Vyw6R0cyAoJWQpIGlzdCBrbGVpbmVyIGFscyBkaWUgbWluaW1hbGUgIgorIkJsb2NrZ3LDtsOfZSAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgam91cm5hbCBkZXZpY2UncyBibG9ja3NpemU6ICVkXG4iCittc2dzdHIgIkRpZSBCbG9ja2dyw7bDn2UgZGVzIEpvdXJuYWxnZXLDpHRlcyB3aXJkIHZlcndlbmRldDogJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2tzICclcycgb24gZGV2aWNlICclcyciCittc2dzdHIgInVuZ8O8bHRpZ2VyIEJsb2NrIOKAniVz4oCcIGF1ZiBHZXLDpHQg4oCeJXPigJwiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgwNAorbXNnaWQgImZpbGVzeXN0ZW0iCittc2dzdHIgIkRhdGVpc3lzdGVtIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MTcgcmVzaXplL21haW4uYzozOTUKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gc2l6ZSIKK21zZ3N0ciAiYmVpbSBWZXJzdWNoLCBkaWUgR3LDtsOfZSBkZXMgRGF0ZWlzeXN0ZW1zIHp1IGJlc3RpbW1lbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODIzCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKyJEaWUgR3LDtsOfZSBkZXMgR2Vyw6R0ZXMgaXN0IG5pY2h0IGZlc3RzdGVsbGJhci4gU2llIG3DvHNzZW4gZGllIEdyw7bDn2VcbiIKKyJkZXMgRGF0ZWlzeXN0ZW1zIG1hbnVlbGwgYW5nZWJlbi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODMwCittc2dpZCAiIgorIkRldmljZSBzaXplIHJlcG9ydGVkIHRvIGJlIHplcm8uICBJbnZhbGlkIHBhcnRpdGlvbiBzcGVjaWZpZWQsIG9yXG4iCisiXHRwYXJ0aXRpb24gdGFibGUgd2Fzbid0IHJlcmVhZCBhZnRlciBydW5uaW5nIGZkaXNrLCBkdWUgdG9cbiIKKyJcdGEgbW9kaWZpZWQgcGFydGl0aW9uIGJlaW5nIGJ1c3kgYW5kIGluIHVzZS4gIFlvdSBtYXkgbmVlZCB0byByZWJvb3RcbiIKKyJcdHRvIHJlLXJlYWQgeW91ciBwYXJ0aXRpb24gdGFibGUuXG4iCittc2dzdHIgIiIKKyJBbHMgR3LDtsOfZSBkZXMgR2Vyw6R0cyB3aXJkIE51bGwgenVyw7xjayBnZWxpZWZlcnQuIEVudHdlZGVyIHd1cmRlIGVpbmVcbiIKKyJcdHVuZ8O8bHRpZ2UgUGFydGl0aW9uIGFuZ2VnZWJlbiBvZGVyIGRpZSBQYXJ0aXRpb25zdGFiZWxsZSB3dXJkZSBuYWNoXG4iCisiXHRlaW5lbSBMYXVmIHZvbiBmZGlzayBuaWNodCBuZXUgZWluZ2VsZXNlbiwgd2VpbCBkaWUgbW9kaWZpemllcnRlXG4iCisiXHRQYXJ0aXRpb24gdmV3ZW5kZXQgd3VyZGUuIFNpZSBtw7xzc2VuIHVudGVyIFVtc3TDpG5kZW4gZGVuIFJlY2huZXIgbmV1XG4iCisiXHRzdGFydGVuLCBkYW1pdCBkaWUgUGFydGl0aW9uc3RhYmVsbGUgbmV1IGVpbmdlbGVzZW4gd2lyZC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODQ3Cittc2dpZCAiRmlsZXN5c3RlbSBsYXJnZXIgdGhhbiBhcHBhcmVudCBkZXZpY2Ugc2l6ZS4iCittc2dzdHIgIkRhcyBEYXRlaXN5c3RlbSBpc3QgZ3LDtsOfZXIgYWxzIGFscyBkaWUgUGFydGl0aW9uLiIKKworIzogbWlzYy9ta2UyZnMuYzoxODY3Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGZzIHR5cGVzIGxpc3RcbiIKK21zZ3N0ciAiRGllIExpc3RlIGRlciBEYXRlaXN5c3RlbXR5cGVuIGtvbm50ZSBuaWNodCB2ZXJhcmJlaXRldCB3ZXJkZW5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTA4Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBoYXJkd2FyZSBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAiYmVpbSBWZXJzdWNoLCBkaWUgSGFyZHdhcmUtU2VrdG9yZ3LDtsOfZSBmZXN0enVzdGVsbGVuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MTQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHBoeXNpY2FsIHNlY3RvciBzaXplIgorbXNnc3RyICJiZWltIFZlcnN1Y2gsIGRpZSBwaHlzaXNjaGUgU2VrdG9yZ3LDtsOfZSBmZXN0enVzdGVsbGVuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NDYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsIGZvciBkZXZpY2VcbiIKK21zZ3N0ciAiYmVpbSBTZXR6ZW4gZGVyIEJsb2NrZ3LDtsOfZTogenUga2xlaW4gZsO8ciBkYXMgR2Vyw6R0XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogc3BlY2lmaWVkIGJsb2Nrc2l6ZSAlZCBpcyBsZXNzIHRoYW4gZGV2aWNlIHBoeXNpY2FsIHNlY3RvcnNpemUgJWRcbiIKK21zZ3N0ciAiIgorIldhcm51bmc6IGRpZSBhbmdlZ2ViZW5lIEJsb2NrZ3LDtsOfZSAlZCBpc3Qga2xlaW5lciBhbHMgZGllIHBoeXNpc2NoZSAiCisiU2VrdG9yZ3LDtsOfZSAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBTaXplIG9mIGRldmljZSAoMHglbGx4IGJsb2NrcykgJXMgdG9vIGJpZyB0byBiZSBleHByZXNzZWRcbiIKKyJcdGluIDMyIGJpdHMgdXNpbmcgYSBibG9ja3NpemUgb2YgJWQuXG4iCittc2dzdHIgIiIKKyIlMSRzOiBEaWUgR3LDtsOfZSBkZXMgR2Vyw6R0ZXMgJTMkcyAoMHglMiRsbHggQmzDtmNrZSkga2FubiBiZWkgZWluZXIgIgorIkJsb2NrZ3LDtsOfZVxuIgorIlx0dm9uICU0JGQga2FubiBtaXQgMzIgQml0cyBuaWNodCBkYXJnZXN0ZWxsdCB3ZXJkZW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk5MQorbXNnaWQgImZzX3R5cGVzIGZvciBta2UyZnMuY29uZiByZXNvbHV0aW9uOiAiCittc2dzdHIgIkRhdGVpc3lzdGVtdHlwZW4gZsO8ciBkYXMgQXVmc2NobMO8c3NlbG4gdm9uIG1rZTJmcy5jb25mOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk5OAorbXNnaWQgIkZpbGVzeXN0ZW0gZmVhdHVyZXMgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorIkVpZ2Vuc2NoYWZ0ZW4gdm9uIERhdGVpc3lzdGVtZW4gd2VyZGVuIGJlaSBSZXZpc29uLTAtRGF0ZWlzeXN0ZW1lbiBuaWNodFxuIgorIlx0dW50ZXJzdMO8dHp0XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAwNgorbXNnaWQgIlNwYXJzZSBzdXBlcmJsb2NrcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiU3BhcnNlLVN1cGVyYmzDtmNrZSB3ZXJkZW4gYmVpIFJldmlzb24tMC1EYXRlaXN5c3RlbWVuIG5pY2h0XG4iCisiXHR1bnRlcnN0w7x0enRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDE4Cittc2dpZCAiSm91cm5hbHMgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorIkpvdXJuYWxlIHdlcmRlbiBiZWkgUmV2aXNvbi0wLURhdGVpc3lzdGVtZW4gbmljaHRcbiIKKyJcdHVudGVyc3TDvHR6dFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVsZiIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgV2VydGUgZsO8ciBQcm96ZW50IHJlc2VydmllcnRlciBCbMO2Y2tlIC0gJWxmIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNDkKK21zZ2lkICIiCisiRXh0ZW50cyBNVVNUIGJlIGVuYWJsZWQgZm9yIGEgNjQtYml0IGZpbGVzeXN0ZW0uICBQYXNzIC1PIGV4dGVudHMgdG8gIgorInJlY3RpZnkuXG4iCittc2dzdHIgIiIKKyJFcndlaXRlcnVuZ2VuIE3DnFNTRU4gZsO8ciA2NC1CaXQtRGF0ZWlzeXN0ZW1lIGFrdGl2aWVydCB3ZXJkZW4uXG4iCisiXHRHZWJlbiBTaWUg4oCeLU8gZXh0ZW50c+KAnCBhbiwgdW0gZGllcyB6dSB0dW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA2OQorbXNnaWQgIlRoZSBjbHVzdGVyIHNpemUgbWF5IG5vdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGJsb2NrIHNpemUuXG4iCittc2dzdHIgIkRpZSBDbHVzdGVyZ3LDtsOfZSBkYXJmIG5pY2h0IGtsZWluZXIgYWxzIGRpZSBCbG9ja2dyw7bDn2Ugc2Vpbi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDc1Cittc2dpZCAic3BlY2lmeWluZyBhIGNsdXN0ZXIgc2l6ZSByZXF1aXJlcyB0aGUgYmlnYWxsb2MgZmVhdHVyZSIKK21zZ3N0ciAiRGllIEFuZ2FiZSBlaW5lciBDbHVzdGVyZ3LDtsOfZSBlcmZvcmRlcnQgZGllIEVpZ2Vuc2NoYWZ0IOKAnmJpZ2FsbG9j4oCcLiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFVuYWJsZSB0byBnZXQgZGV2aWNlIGdlb21ldHJ5IGZvciAlc1xuIgorbXNnc3RyICJXYXJudW5nOiBEaWUgR2VvbWV0cmllIGRlcyBHZXLDpHRlcyDigJ4lc+KAnCBrYW5uIG5pY2h0IGJlc3RpbW10IHdlcmRlblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxpZ25tZW50IGlzIG9mZnNldCBieSAlbHUgYnl0ZXMuXG4iCittc2dzdHIgIkRpZSBBdXNyaWNodHVuZyB2b24gJXMgaXN0IHVtICVsdSBCeXRlcyB2ZXJzZXR6dC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIG1heSByZXN1bHQgaW4gdmVyeSBwb29yIHBlcmZvcm1hbmNlLCAocmUpLXBhcnRpdGlvbmluZyBzdWdnZXN0ZWQuXG4iCittc2dzdHIgIiIKKyJEaWVzIGvDtm5udGUgaW4gc2VociBzY2hsZWNodGVyIExlaXN0dW5nIHJlc3VsdGllcmVuLiBFaW5lICIKKyJOZXVwYXJ0aXRpb25pZXJ1bmdcbiIKKyJpc3QgYW5nZXJhdGVuLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpIgorbXNnc3RyICJCbMO2Y2tlIG1pdCAlZCBCeXRlcyBzaW5kIHp1IGdyb8OfIGbDvHIgZGFzIEdlcsOkdCAobWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiAlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCksIGZvcmNlZCB0byBjb250aW51ZVxuIgorbXNnc3RyICIiCisiV2FybnVuZzogQmzDtmNrZSBtaXQgJWQgQnl0ZXMgc2luZCB6dSBncm/DnyBmw7xyIGRhcyBHZXLDpHQgKG1heCAlZClcbiIKKyJcdCBXZWl0ZXJ2ZXJhcmJlaXR1bmcgd3VyZGUgZXJ6d3VuZ2VuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE4MAorbXNnaWQgIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0IGV4dGVudHMgZmVhdHVyZSIKK21zZ3N0ciAi4oCeQmlnYWxsb2PigJwgaXN0IG51ciBtaXQg4oCeRXh0ZW50c+KAnCBtw7ZnbGljaCIKKworIzogbWlzYy9ta2UyZnMuYzoyMTg3Cittc2dpZCAiIgorIlRoZSByZXNpemVfaW5vZGUgYW5kIG1ldGFfYmcgZmVhdHVyZXMgYXJlIG5vdCBjb21wYXRpYmxlLlxuIgorIlRoZXkgY2FuIG5vdCBiZSBib3RoIGVuYWJsZWQgc2ltdWx0YW5lb3VzbHkuXG4iCittc2dzdHIgIiIKKyJyZXNpemVfaW5vZGUgdW5kIG1ldGFfYmcgc2luZCBuaWNodCBrb21wYXRpYmVsIHVuZCBrw7ZubmVuXG4iCisiZGFoZXIgbmljaHQgZ2xlaWNoemVpdGlnIGFrdGl2aWVydCB3ZXJkZW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE5NgorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgYmlnYWxsb2MgZmVhdHVyZSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuIgorIlNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiV2FybnVuZzog4oCeYmlnYWxsb2PigJwgYmVmaW5kZXQgc2ljaCBub2NoIGluIEVudHdpY2tsdW5nLlxuIgorIkxlc2VuIFNpZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYyBmw7xyIHdlaXRlcmVcbiIKKyJJbmZvcm1hdGlvbmVuLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMDcKK21zZ2lkICJyZXNlcnZlZCBvbmxpbmUgcmVzaXplIGJsb2NrcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorIlJlc2VydmllcnRlIEJsw7Zja2UgZsO8ciBkaWUgT25saW5lLUdyw7bDn2Vuw6RuZGVydW5nIHdlcmRlbiBhdWYgTmljaHQtU3BhcnNlLVxuIgorIkRhdGVpc3lzdGVtZW4gbmljaHQgdW50ZXJzdMO8dHp0LiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjE2Cittc2dpZCAiYmxvY2tzIHBlciBncm91cCBjb3VudCBvdXQgb2YgcmFuZ2UiCittc2dzdHIgIkRpZSBBbnphaGwgZGVyIEJsw7Zja2UgcHJvIEdydXBwZSBpc3QgYXXDn2VyaGFsYiBkZXMgZ8O8bHRpZ2VuIEJlcmVpY2hzLiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjQwCittc2dpZCAiRmxleF9iZyBmZWF0dXJlIG5vdCBlbmFibGVkLCBzbyBmbGV4X2JnIHNpemUgbWF5IG5vdCBiZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKyJGbGV4X2JnIGlzdCBuaWNodCBha3RpdmllcnQsIGRhaGVyIGRhcmYgZGFmw7xyIGF1Y2gga2VpbmUgR3LDtsOfZSBhbmdlZ2ViZW4gIgorIndlcmRlbi4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgJWQgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2UgSW5vZGUtR3LDtsOfZSAlZCAobWluICVkL21heCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCByYWlzZSBpbm9kZSByYXRpbz8iCittc2dzdHIgInp1IHdlbmlnZSBJbm9kZXMgKCVsbHUpLCBBbnphaGwgZXJow7ZoZW4/IgorCisjOiBtaXNjL21rZTJmcy5jOjIyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgc3BlY2lmeSA8IDJeMzIgaW5vZGVzIgorbXNnc3RyICJ6dSB2aWVsZSBJbm9kZXMgKCVsbHUpLCBnZWJlbiBTaWUgd2VuaWdlciBhbHMgMl4zMiBJbm9kZXMgYW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5vZGVfc2l6ZSAoJXUpICogaW5vZGVzX2NvdW50ICgldSkgdG9vIGJpZyBmb3IgYVxuIgorIlx0ZmlsZXN5c3RlbSB3aXRoICVsbHUgYmxvY2tzLCBzcGVjaWZ5IGhpZ2hlciBpbm9kZV9yYXRpbyAoLWkpXG4iCisiXHRvciBsb3dlciBpbm9kZSBjb3VudCAoLU4pLlxuIgorbXNnc3RyICIiCisiaW5vZGVfc2l6ZSAoJXUpICogaW5vZGVzX2NvdW50ICgldSkgaXN0IHp1IGdyb8OfIGbDvHIgZWluXG4iCisiXHREYXRlaXN5c3RlbSBtaXQgJWxsdSBCbMO2Y2tlbiwgZ2ViZW4gU2llIGVpbiBow7ZoZXJlcyBpbm9kZV9yYXRpbyAoLWkpXG4iCisiXHRhbiBvZGVyIGVpbmUgbmllZHJpZ2VyZSBBbnphaGwgSW5vZGVzICgtTikgYW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbTsgdGhpcyBjYW4gYmUgdW5kb25lIHVzaW5nIHRoZSBjb21tYW5kOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRhcyBiZXN0ZWhlbmRlIERhdGVpc3lzdGVtIHdpcmQgw7xiZXJzY2hyaWViZW4sIGRpZXMga2FubiBtaXR0ZWxzIGRlcyAiCisiQmVmZWhsc1xuIgorIuKAnmUydW5kbyAlcyAlc+KAnCByw7xja2fDpG5naWcgZ2VtYWNodCB3ZXJkZW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQzMgorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzZXR1cCB1bmRvIGZpbGVcbiIKK21zZ3N0ciAiIgorImJlaW0gVmVyc3VjaCwgZGllIERhdGVpIG1pdCBkZW4gRGF0ZW4genVyIFLDvGNrZ8OkbmdpZ21hY2h1bmcgYW56dWxlZ2VuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ1OAorbXNnaWQgIkRpc2NhcmRpbmcgZGV2aWNlIGJsb2NrczogIgorbXNnc3RyICJHZXLDpHRlYmzDtmNrZSB3ZXJkZW4gdmVyd29yZmVuOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ3NAorbXNnaWQgImZhaWxlZCAtICIKK21zZ3N0ciAiZ2VzY2hlaXRlcnQgLSAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU5NgorbXNnaWQgIndoaWxlIHNldHRpbmcgdXAgc3VwZXJibG9jayIKK21zZ3N0ciAiYmVpbSBFcnN0ZWxsZW4gZGVzIFN1cGVyYmxvY2tzIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MTIKK21zZ2lkICJEaXNjYXJkIHN1Y2NlZWRlZCBhbmQgd2lsbCByZXR1cm4gMHMgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iCittc2dzdHIgIiIKKyJWZXJ3ZXJmZW4gd2FyIGVyZm9sZ3JlaWNoIHVuZCB3aXJkIE51bGxlbiB6dXLDvGNrIGxpZWZlcm4gLSBkYWhlciB3aXJkXG4iCisiZGFzIEzDtnNjaGVuIGRlciBJbm9kZS1UYWJlbGxlIMO8YmVyc3BydW5nZW5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3MgLSAlcyIKK21zZ3N0ciAidW5iZWthbm50ZXMgQmV0cmllYnNzeXN0ZW0gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNzUyCittc2dpZCAiQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICIKK21zZ3N0ciAiYmVpbSBBbmZvcmRlcm4gdm9uIFNwZWljaGVyIGbDvHIgZGllIEdydXBwZW50YWJlbGxlbjogIgorCisjOiBtaXNjL21rZTJmcy5jOjI3NjAKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gYWxsb2NhdGUgZmlsZXN5c3RlbSB0YWJsZXMiCittc2dzdHIgImJlaW0gQW5mb3JkZXJuIHZvbiBTcGVpY2hlciBmw7xyIGRpZSBEYXRlaXN5c3RlbXRhYmVsbGVuIgorCisjOiBtaXNjL21rZTJmcy5jOjI3NjkKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYml0bWFwIgorbXNnc3RyICIiCisiXG4iCisiXHRiZWltIEtvbnZlcnRpZXJlbiBkZXIgU3ViY2x1c3RlcmJpdG1hcCIKKworIzogbWlzYy9ta2UyZnMuYzoyODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgYmxvY2sgJWxsdSBhdCBlbmQgb2YgZmlsZXN5c3RlbSIKK21zZ3N0ciAiYmVpbSBOdWxsZW4gdm9uIEJsb2NrICVsbHUgYW0gRW5kZSBkZXMgRGF0ZWlzeXN0ZW1zIgorCisjOiBtaXNjL21rZTJmcy5jOjI4MjYKK21zZ2lkICJ3aGlsZSByZXNlcnZpbmcgYmxvY2tzIGZvciBvbmxpbmUgcmVzaXplIgorbXNnc3RyICJiZWltIFJlc2VydmllcmVuIHZvbiBCbMO2Y2tlbiBmw7xyIGRpZSBPbmxpbmUtR3LDtsOfZW7DpG5kZXJ1bmciCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgzOCBtaXNjL3R1bmUyZnMuYzo3MTIKK21zZ2lkICJqb3VybmFsIgorbXNnc3RyICJKb3VybmFsIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGpvdXJuYWwgdG8gZGV2aWNlICVzOiAiCittc2dzdHIgIkVpbiBKb3VybmFsIHdpcmQgYXVmIEdlcsOkdCAlcyBoaW56dWdlZsO8Z3Q6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBhZGQgam91cm5hbCB0byBkZXZpY2UgJXMiCittc2dzdHIgIiIKKyJcbiIKKyJcdGJlaW0gVmVyc3VjaCwgZWluIEpvdXJuYWwgYXVmIEdlcsOkdCAlcyBoaW56dXp1ZsO8Z2VuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NjIgbWlzYy9ta2UyZnMuYzoyODkzIG1pc2MvdHVuZTJmcy5jOjc0MSBtaXNjL3R1bmUyZnMuYzo3NjAKK21zZ2lkICJkb25lXG4iCittc2dzdHIgImVybGVkZ3RcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODY5Cittc2dpZCAiU2tpcHBpbmcgam91cm5hbCBjcmVhdGlvbiBpbiBzdXBlci1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiRGllIEVyemV1Z3VuZyBlaW5lcyBKb3VybmFscyB3aXJkIGltIE51ci1TdXBlci1Nb2R1cyDDvGJlcnNwcnVuZ2VuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICgldSBibG9ja3MpOiAiCittc2dzdHIgIkRhcyBKb3VybmFsICgldSBCbMO2Y2tlKSB3aXJkIGFuZ2VsZWd0OiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg4OQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCIKK21zZ3N0ciAiIgorIlxuIgorIlx0YmVpbSBBbmxlZ2VuIGRlcyBKb3VybmFscyIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAxIG1pc2MvdHVuZTJmcy5jOjUxNgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisiXG4iCisiRmVobGVyIGJlaW0gQWt0aXZpZXJlbiBkZXMgU2NodXR6ZXMgZ2VnZW4gbWVocmZhY2hlcyBFaW5ow6RuZ2VuIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBpcyBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkIHNlY29uZHMuXG4iCittc2dzdHIgIiIKKyJEZXIgU2NodXR6IGdlZ2VuIG1laHJmYWNoZXMgRWluaMOkbmdlbiB3dXJkZSBha3RpdmllcnQgbWl0IGVpbmVtXG4iCisiQWt0dWFsaXNpZXJ1bmdzaW50ZXJ2YWxsIHZvbiAlZCBTZWt1bmRlbi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTIzCittc2dpZCAiV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAiCittc2dzdHIgIiIKKyJEaWUgU3VwZXJibMO2Y2tlIHVuZCBkaWUgSW5mb3JtYXRpb25lbiDDvGJlciBkaWUgRGF0ZWlzeXN0ZW1udXR6dW5nIHdlcmRlblxuIgorImdlc2NocmllYmVuOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkzMAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nLCBoYWQgdHJvdWJsZSB3cml0aW5nIG91dCBzdXBlcmJsb2Nrcy4iCittc2dzdHIgIiIKKyJcbiIKKyJFcyBnYWIgU2Nod2llcmlna2VpdGVuIGJlaW0gU2NocmVpYmVuIGRlciBTdXBlcmJsw7Zja2UuIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MzIKK21zZ2lkICIiCisiZG9uZVxuIgorIlxuIgorbXNnc3RyICIiCisiZXJsZWRpZ3RcbiIKKyJcbiIKKworIzogbWlzYy9ta2xvc3QrZm91bmQuYzo1MAorbXNnaWQgIlVzYWdlOiBta2xvc3QrZm91bmRcbiIKK21zZ3N0ciAiQXVmcnVmOiBta2xvc3QrZm91bmRcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogICVzIGRldmljZS4uLlxuIgorIlxuIgorIlByaW50cyBvdXQgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBnaXZlbiBkZXZpY2UuXG4iCisiRm9yIGV4YW1wbGU6ICVzIC9kZXYvaGRhXG4iCisiXG4iCittc2dzdHIgIiIKKyJBdWZydWY6ICVzIEdlcsOkdOKAplxuIgorIlxuIgorIkdpYnQgSW5mb3JtYXRpb25lbiDDvGJlciBkaWUgUGFydGl0aW9uaWVydW5nIGplZGVzIGFuZ2VnZWJlbmVuIEdlcsOkdHMgYXVzLlxuIgorIlp1bSBCZWlzcGllbDogJXMgL2Rldi9oZGFcbiIKKyJcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAiJXMga2FubiBuaWNodCBnZcO2ZmZuZXQgd2VyZGVuOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgZ2VvbWV0cnkgb2YgJXM6ICVzIgorbXNnc3RyICJEaWUgR2VvbWV0cmllIHZvbiAlcyBrYW5uIG5pY2h0IGVybWl0dGVsdCB3ZXJkZW46ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBzaXplIG9mICVzOiAlcyIKK21zZ3N0ciAiRGllIEdyw7bDn2Ugdm9uICVzIGthbm4gbmljaHQgZXJtaXR0ZWx0IHdlcmRlbjogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaD0lM2Qgcz0lM2QgYz0lNGQgICBzdGFydD0lOGQgc2l6ZT0lOGx1IGVuZD0lOGRcbiIKK21zZ3N0ciAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgU3RhcnQ9JThkIEdyw7bDn2U9JThsdSBFbmRlPSU4ZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTIKK21zZ2lkICJQbGVhc2UgcnVuIGUyZnNjayBvbiB0aGUgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiQml0dGUgbGFzc2VuIFNpZSBlMmZzY2sgZGllc2VzIERhdGVpc3lzdGVtIMO8YmVycHLDvGZlbi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jIG1heF9tb3VudHNfY291bnRdIFstZSBlcnJvcnNfYmVoYXZpb3JdIFstZyBncm91cF1cbiIKKyJcdFstaSBpbnRlcnZhbFtkfG18d11dIFstal0gWy1KIGpvdXJuYWxfb3B0aW9uc10gWy1sXVxuIgorIlx0Wy1tIHJlc2VydmVkX2Jsb2Nrc19wZXJjZW50XSBbLW8gW15dbW91bnRfb3B0aW9uc1ssLi4uXV0gWy1wICIKKyJtbXBfdXBkYXRlX2ludGVydmFsXVxuIgorIlx0Wy1yIHJlc2VydmVkX2Jsb2Nrc19jb3VudF0gWy11IHVzZXJdIFstQyBtb3VudF9jb3VudF0gWy1MIHZvbHVtZV9sYWJlbF1cbiIKKyJcdFstTSBsYXN0X21vdW50ZWRfZGlyXSBbLU8gW15dZmVhdHVyZVssLi4uXV1cbiIKKyJcdFstUSBxdW90YV9vcHRpb25zXVxuIgorIlx0Wy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV0gWy1UIGxhc3RfY2hlY2tfdGltZV0gWy1VIFVVSURdXG4iCisiXHRbIC1JIG5ld19pbm9kZV9zaXplIF0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJBdWZydWY6ICVzIFstYyBtYXhfQW56YWhsX0VpbmjDpG5ndW5nZW5dIFstZSBGZWhsZXJ2ZXJoYWx0ZW5dIFstZyBHcnVwcGVdXG4iCisiXHRbLWkgSW50ZXJ2YWxsW2R8bXx3XV0gWy1qXSBbLUogSm91cm5hbF9PcHRpb25lbl0gWy1sXVxuIgorIlx0Wy1tIHJlc2VydmllcnRlX0Jsw7Zja2VfUHJvemVudF0gWy1vIFteXUVpbmjDpG5nZW9wdGlvbmVuWywuLi5dXSBbLXAgIgorIm1tcF9Ba3R1YWxpc2llcnVuZ3NpbnRlcnZhbGxdXG4iCisiXHRbLXIgQW56YWhsX3Jlc2VydmllcnRlcl9CbMO2Y2tlXSBbLXUgQmVudXR6ZXJdIFstQyBBbnphaGxfRWluaMOkbmd1bmdlbl0gWy1MICIKKyJWb2x1bWVfS2VubnVuZ11cbiIKKyJcdFstTSBsZXR6dGVzX2VpbmdlaMOkbmd0ZXNfVmVyemVpY2huaXNdIFstTyBbXl1FaWdlbnNjaGFmdFssLi4uXV1cbiIKKyJcdFstUSBRdW90YS1PcHRpb25lbl1cbiIKKyJcdFstRSBlcndlaXRlcnRlX09wdGlvbmVuWywuLi5dXSBbLVQgWmVpdHB1bmt0X2xldHp0ZXJfUHLDvGZ1bmddIFstVSBVVUlEXVxuIgorIlx0WyAtSSBuZXVlX0lub2RlZ3LDtsOfZSBdIEdlcsOkdFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDMKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIVxuIgorbXNnc3RyICJEZXIgSm91cm5hbC1TdXBlcmJsb2NrIHd1cmRlIG5pY2h0IGdlZnVuZGVuIVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjEKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJiZWltIFZlcnN1Y2gsIGRhcyBleHRlcm5lIEpvdXJuYWwgenUgw7ZmZm5lbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjY3IG1pc2MvdHVuZTJmcy5jOjE5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIGlzdCBrZWluIEpvdXJuYWxnZXLDpHQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI3NyBtaXNjL3R1bmUyZnMuYzoxOTc0Cittc2dpZCAiRmlsZXN5c3RlbSdzIFVVSUQgbm90IGZvdW5kIG9uIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICJEaWUgVVVJRCBkZXMgRGF0ZWlzeXN0ZW1zIHd1cmRlIGF1ZiBkZW0gSm91cm5hbGdlcsOkdCBuaWNodCBnZWZ1bmRlbi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MzAxCittc2dpZCAiIgorIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJEYXMgSm91cm5hbGdlcsOkdCB3dXJkZSBuaWNodCBnZWZ1bmRlbi4gRXMgd3VyZGUgTklDSFQgZW50ZmVybnRcbiIKKyJCaXR0ZSBiZW51dHplbiBTaWUgZGllIE9wdGlvbiDigJ4tZuKAnCwgdW0gZGFzIGZlaGxlbmRlIEdlcsOkdCB6dSBlbnRmZXJuZW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMxMAorbXNnaWQgIkpvdXJuYWwgcmVtb3ZlZFxuIgorbXNnc3RyICJEYXMgSm91cm5hbCB3dXJkZSBlbnRmZXJudFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNTQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgImJlaW0gTGVzZW4gZGVyIEJpdG1hcHMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM2MgorbXNnaWQgIndoaWxlIGNsZWFyaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgImJlaW0gWnVyw7xja3NldHplbiBkZXIgSm91cm5hbC1Jbm9kZXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM3MworbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAiYmVpbSBTY2hyZWliZW4gZGVyIEpvdXJuYWwtSW5vZGVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MDUgbWlzYy90dW5lMmZzLmM6NDE4Cittc2dpZCAiKGFuZCByZWJvb3QgYWZ0ZXJ3YXJkcyEpXG4iCittc2dzdHIgIih1bmQgc3RhcnRlbiBTaWUgZGFuYWNoIGRhcyBTeXN0ZW0gbmV1KVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiRGFzIERlYWt0aXZpZXJlbiB2b24g4oCeJXPigJwgd2lyZCBuaWNodCB1bnRlcnN0w7x0enQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIkRhcyBBa3RpdmllcmVuIHZvbiDigJ4lc+KAnCB3aXJkIG5pY2h0IHVudGVyc3TDvHR6dC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDY3Cittc2dpZCAiIgorIlRoZSBoYXNfam91cm5hbCBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkhhc19qb3VybmFsIGthbm4gbnVyIHp1csO8Y2tnZXNldHp0IHdlcmRlbiwgd2VubiBkYXMgRGF0ZWlzeXN0ZW0gbmljaHRcbiIKKyJvZGVyIG51ci1sZXNiYXIgZWluZ2Vow6RuZ3QgaXN0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NzYKK21zZ2lkICIiCisiVGhlIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LiAgUGxlYXNlIHJ1biBlMmZzY2sgYmVmb3JlIGNsZWFyaW5nXG4iCisidGhlIGhhc19qb3VybmFsIGZsYWcuXG4iCittc2dzdHIgIiIKKyJuZWVkc19yZWNvdmVyeSBpc3QgZ2VzZXR6dC4gQml0dGUgZsO8aHJlbiBTaWUgZTJmc2NrIGF1cywgYmV2b3IgU2llXG4iCisiaGFzX2pvdXJuYWwgenVyw7xjayBzZXR6ZW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ5NQorbXNnaWQgIiIKKyJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnc3BhcnNlX3N1cGVyJyBub3Qgc3VwcG9ydGVkXG4iCisiZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIG1ldGFfYmcgZmVhdHVyZSBlbmFibGVkLlxuIgorbXNnc3RyICIiCisiRGFzIFNldHplbiB2b24g4oCec3BhcnNlX3N1cGVy4oCcIHdpcmQgYXVmIERhdGVpc3lzdGVtZW4gbWl0IGFrdGl2aWVydGVtXG4iCisi4oCebWV0YV9iZ+KAnCBuaWNodCB1bnRlcnN0w7x0enQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUwOAorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbid0XG4iCisiYmUgc2V0IGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgb3JcbiIKKyJyZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJEZXIgU2NodXR6IHZvciBtZWhyZmFjaGVtIEVpbmjDpG5nZW4ga2FubiBudXIgYWt0aXZpZXJ0IHdlcmRlbiwgd2VubiBkYXNcbiIKKyJEYXRlaXN5c3RlbSBuaWNodCBvZGVyIG51ci1sZXNiYXIgZWluZ2Vow6RuZ3QgaXN0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkcy5cbiIKK21zZ3N0ciAiIgorIkRlciBTY2h1dHogdm9yIG1laHJmYWNoZW0gRWluaMOkbmdlbiB3dXJkZSBtaXQgZWluZW0gIgorIkFrdHVhbGlzaWVydW5nc2ludGVydmFsbFxuIgorInZvbiAlZCBTZWt1bmRlbiBha3RpdmllcnQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUzNQorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbm5vdFxuIgorImJlIGRpc2FibGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIHJlYWRvbmx5LlxuIgorbXNnc3RyICIiCisiRGVyIFNjaHV0eiB2b3IgbWVocmZhY2hlbSBFaW5ow6RuZ2VuIGthbm4gbmljaHRcbiIKKyJkZWFrdGl2aWVydCB3ZXJkZW4sIHdlbm4gZGFzIERhdGVpc3lzdGVtIG51ci1sZXNiYXJcbiIKKyJlaW5nZWjDpG5ndCBpc3QuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU0MworbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiBkZXIgQml0bWFwc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFnaWMgbnVtYmVyIGluIE1NUCBibG9jayBkb2VzIG5vdCBtYXRjaC4gZXhwZWN0ZWQ6ICV4LCBhY3R1YWw6ICV4XG4iCittc2dzdHIgIiIKKyJEaWUgbWFnaXNjaGUgWmFobCBpbSBNTVAtQmxvY2sgcGFzc3QgbmljaHQuIEVyd2FydGV0OiAleCwgZ2VmdW5kZW46ICV4XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1NworbXNnaWQgIndoaWxlIHJlYWRpbmcgTU1QIGJsb2NrLiIKK21zZ3N0ciAiYmVpbSBMZXNlbiBkZXMgTU1QLUJsb2Nrcy4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU4OQorbXNnaWQgIiIKKyJDbGVhcmluZyB0aGUgZmxleF9iZyBmbGFnIHdvdWxkIGNhdXNlIHRoZSB0aGUgZmlsZXN5c3RlbSB0byBiZVxuIgorImluY29uc2lzdGVudC5cbiIKK21zZ3N0ciAiIgorIkRhcyBEZWFrdGl2aWVyZW4gdm9uIGZsZXhfYmcgd8O8cmRlIGRhcyBEYXRlaXN5c3RlbSBpbmtvbnNpc3RlbnQgbWFjaGVuLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2MDAKK21zZ2lkICIiCisiVGhlIGh1Z2VfZmlsZSBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorImh1Z2VfZmlsZSBrYW5uIG51ciBha3RpdmllcnQgd2VyZGVuLCB3ZW5uIGRhcyBEYXRlaXN5c3RlbSBuaWNodFxuIgorIm9kZXIgbnVyLWxlc2JhciBlaW5nZWjDpG5ndCBpc3QuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY2MAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiAnXnF1b3RhJyBvcHRpb24gb3ZlcnJpZGVzICctUSdhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJXYXJudW5nOiBkaWUgT3B0aW9uIOKAnl5xdW90YeKAnCBoYXQgVm9ycmFuZyB2b3Ig4oCeLVHigJwtQXJndW1lbnRlbi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzA1Cittc2dpZCAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgYSBqb3VybmFsLlxuIgorbXNnc3RyICJEYXMgRGF0ZWlzeXN0ZW0gaGF0IGJlcmVpdHMgZWluIEpvdXJuYWwuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIG9uICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcdGJlaW0gVmVyc3VjaCwgZGFzIEpvdXJuYWwgYXVmICVzIHp1IMO2ZmZuZW5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgb24gZGV2aWNlICVzOiAiCittc2dzdHIgIkpvdXJuYWwgd2lyZCBlcnpldWd0IGF1ZiBHZXLDpHQgJXM6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGFkZGluZyBmaWxlc3lzdGVtIHRvIGpvdXJuYWwgb24gJXMiCittc2dzdHIgImJlaW0gSGluenVmw7xnZW4gZGVzIERhdGVpc3lzdGVtcyB6dW0gSm91cm5hbCBhdWYgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc0MworbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgaW5vZGU6ICIKK21zZ3N0ciAiSm91cm5hbC1Jbm9kZXMgd2VyZGVuIGVyemV1Z3Q6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NzU3Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiCittc2dzdHIgIiIKKyJcbiIKKyJcdGJlaW0gVmVyc3VjaCwgZGllIEpvdXJuYWxkYXRlaSB6dSBlcnpldWdlbiIKKworIzogbWlzYy90dW5lMmZzLmM6ODMyCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIHF1b3RhIG9wdGlvbnMhXG4iCittc2dzdHIgIiIKKyJTcGVpY2hlciB6dW0gRWlubGVzZW4gZGVyIFF1b3RhLU9wdGlvbmVuIGtvbm50ZSBuaWNodCByZXNlcnZpZXJ0IHdlcmRlbiFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6ODU0Cittc2dpZCAiIgorIlxuIgorIkJhZCBxdW90YSBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJGb2xsb3dpbmcgdmFsaWQgcXVvdGEgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIChwYXNzIGJ5IHNlcGFyYXRpbmcgd2l0aCAiCisiY29tbWEpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFcyB3dXJkZW4gdW5nw7xsdGlnZSBRdW90YW9wdGlvbmVuIGFuZ2VnZWJlbi5cbiIKKyJcbiIKKyJEaWUgZm9sZ2VuZGVuIGfDvGx0aWdlbiBRdW90YW9wdGlvbmVuIHNpbmQgdmVyZsO8Z2JhciAoZHVyY2ggS29tbWF0YSBnZXRyZW5udFxuIgorImFuZ2ViZW4pOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBwYXJzZSBkYXRlL3RpbWUgc3BlY2lmaWVyOiAlcyIKK21zZ3N0ciAiRGllIEFuZ2FiZSB2b24gWmVpdC9EYXR1bSB3YXIgdW52ZXJzdMOkbmRsaWNoOiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTQyIG1pc2MvdHVuZTJmcy5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbW91bnRzIGNvdW50IC0gJXMiCittc2dzdHIgInVuZ8O8bHRnZSBBbnphaGwgRWluaMOkbmd1bmdlbiAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGVycm9yIGJlaGF2aW9yIC0gJXMiCittc2dzdHIgInVuZ8O8bHRpZ2VzIFZlcmhhbHRlbiBpbSBGZWhsZXJmYWxsIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2lkL2dyb3VwIG5hbWUgLSAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZSBHcnVwcGVuLUlEL0dydXBwZSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbnRlcnZhbCAtICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBJbnRlcnZhbGwgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2sgcmF0aW8gLSAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZXMgVmVyaMOkbHRuaXMgcmVzZXJ2aWVydGVyIEJsw7Zja2UgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3NQorbXNnaWQgIi1vIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICItbyBkYXJmIG51ciBlaW5tYWwgYW5nZWdlYmVuIHdlcmRlbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTA4NAorbXNnaWQgIi1PIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICItTyBkYXJmIG51ciBlaW5tYWwgYW5nZWdlYmVuIHdlcmRlbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IC0gJXMiCittc2dzdHIgInVuZ8O8bHRpZ2UgQW56YWhsIHJlc2VydmllcnRlciBCbMO2Y2tlIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHVpZC91c2VyIG5hbWUgLSAlcyIKK21zZ3N0ciAiZmFsc2NoZSBCZW51dHplci1JRC9CZW51dHplcm5hbWUgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTE0NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlIElub2RlLUdyw7bDn2UgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbm9kZSBzaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28tICVzIgorbXNnc3RyICJEaWUgSW5vZGUtR3LDtsOfZSBtdXNzIGVpbmUgWndlaWVycG90ZW56IHNlaW4gLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtbXBfdXBkYXRlX2ludGVydmFsIHRvbyBiaWc6ICVsdVxuIgorbXNnc3RyICJtbXBfdXBkYXRlX2ludGVydmFsIGlzdCB6dSBncm/DnzogJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kXG4iCittc2dpZF9wbHVyYWwgIiIKKyJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHJbMF0gIiIKKyJEYXMgQWt0dWFsaXNpZXJ1bmdzaW50ZXJ2YWxsIGRlcyBTY2h1dHplcyB2b3IgbWVocmZhY2hlbSBFaW5ow6RuZ2VuXG4iCisid2lyZCBhdWYgJWx1IFNla3VuZGUgZ2VzZXR6dFxuIgorbXNnc3RyWzFdICIiCisiRGFzIEFrdHVhbGlzaWVydW5nc2ludGVydmFsbCBkZXMgU2NodXR6ZXMgdm9yIG1laHJmYWNoZW0gRWluaMOkbmdlblxuIgorIndpcmQgYXVmICVsdSBTZWt1bmRlbiBnZXNldHp0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlkZTogJXNcbiIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgUkFJRC1TdHJpZGU6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlwZS13aWR0aDogJXNcbiIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgU3RyaXBlYnJlaXRlLVBhcmFtZXRlcjogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGhhc2ggYWxnb3JpdGhtOiAlc1xuIgorbXNnc3RyICJVbmfDvGx0aWdlciBIYXNoLUFsZ29yaXRobXVzOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSB0byAlcyAoJWQpXG4iCittc2dzdHIgIkRlciBTdGFuZGFyZC1IYXNoLUFsZ29yaXRobXVzIHdpcmQgYXVmICVzICglZCkgZ2VzZXR6dFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzMxCittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNoIGFsZ29yaXRobT5cbiIKKyJcdG1vdW50X29wdHM9PGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucz5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBjaHVuayBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZV93aWR0aD08UkFJRCBzdHJpZGUqZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorbXNnc3RyICIiCisiXG4iCisiRmFsc2NoZSBlcndlaXRlcnRlIE9wdGlvbmVuIGFuZ2VnZWJlbi5cbiIKKyJcbiIKKyJFcndlaXRlcnRlIE9wdGlvbmVuIHdlcmRlbiBkdXJjaCBLb21tYXRhIGdldHJlbm50LiBNYW5jaGUgZXJ3YXJ0ZW4gZWluXG4iCisiXHRBcmd1bWVudCwgd2VsY2hlcyBtaXQgR2xlaWNoaGVpdHN6ZWljaGVuICjigJ494oCcKSB6dWdld2llc2VuIHdpcmQuXG4iCisiXG4iCisiR8O8bHRpZ2UgZXJ3ZWl0ZXJ0ZSBPcHRpb25lbiBzaW5kOlxuIgorIlx0Y2xlYXJfbW1wXG4iCisiXHRoYXNoX2FsZz08SGFzaGFsZ29yaXRobXVzPlxuIgorIlx0bW91bnRfb3B0cz08ZXJ3ZWl0ZXJ0ZSBTdGFuZGFyZGVpbmjDpG5nb3B0aW9uZW4+XG4iCisiXHRzdHJpZGU9PFJBSUQtQmxvY2tncsO2w59lIHBybyBQTGF0dGUgaW4gQmzDtmNrZW5cbiIKKyJcdHN0cmlwZV93aWR0aD08UkFJRCBTdHJpZGUqRGF0ZW5wbGF0dGVuIGluIEJsw7Zja2VuPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0XnRlc3RfZnNcbiIKKyJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc5OAorbXNnaWQgIkZhaWxlZCB0byByZWFkIGlub2RlIGJpdG1hcFxuIgorbXNnc3RyICJEaWUgSW5vZGUtQml0bWFwIGtvbm50ZSBuaWNodCBnZWxlc2VuIHdlcmRlblxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODAzCittc2dpZCAiRmFpbGVkIHRvIHJlYWQgYmxvY2sgYml0bWFwXG4iCittc2dzdHIgIkRpZSBCbG9jay1CaXRtYXAga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjAgcmVzaXplL3Jlc2l6ZTJmcy5jOjkzMQorbXNnaWQgImJsb2NrcyB0byBiZSBtb3ZlZCIKK21zZ3N0ciAienUgdmVyc2NoaWViZW5kZSBCbMO2Y2tlIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODIzCittc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrIGJpdG1hcCB3aGVuIGluY3JlYXNpbmcgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICIiCisiQmVpbSBFcmjDtmhlbiBkZXIgSW5vZGUtR3LDtsOfZSBrb25udGUga2VpbmUgQmxvY2tiaXRtYXAgcmVzZXJ2aWVydCB3ZXJkZW5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyOQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gaW5jcmVhc2UgaW5vZGUgc2l6ZSBcbiIKK21zZ3N0ciAiRGVyIFBsYXR6IHJlaWNodCBuaWNodCBhdXMgZsO8ciBlaW5lIEVyaMO2aHVuZyBkZXIgSW5vZGUtR3LDtsOfZSBcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgzNAorbXNnaWQgIkZhaWxlZCB0byByZWxvY2F0ZSBibG9ja3MgZHVyaW5nIGlub2RlIHJlc2l6ZSBcbiIKK21zZ3N0ciAiIgorIkRhcyBWZXJzY2hpZWJlbiB2b24gQmzDtmNrZW4gd8OkaHJlbmQgZGVyIEdyw7bDn2Vuw6RuZGVydW5nIGRlciBJbm9kZXMgIgorInNjaGVpdGVydGUgXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NjYKK21zZ2lkICIiCisiRXJyb3IgaW4gcmVzaXppbmcgdGhlIGlub2RlIHNpemUuXG4iCisiUnVuIGUydW5kbyB0byB1bmRvIHRoZSBmaWxlIHN5c3RlbSBjaGFuZ2VzLiBcbiIKK21zZ3N0ciAiIgorIkZlaGxlciBiZWltIMOEbmRlcm4gZGVyIElub2RlLUdyw7bDn2UuXG4iCisiU3RhcnRlbiBTaWUgZTJ1bmRvLCB1bSBkaWUgw4RuZGVydW5nZW4gYW0gRGF0ZWlzeXN0ZW0gcsO8Y2tnw6RuZ2lnIHp1IG1hY2hlbi4gXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4OTMKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRkYiBmaWxlbmFtZVxuIgorbXNnc3RyICJFcyBrYW5uIGtlaW4gU3BlaWNoZXIgZsO8ciBkZW4gVGRiLURhdGVpbmFtZW4gcmVzZXJ2aWVydCB3ZXJkZW5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGVsZXRlICVzIgorbXNnc3RyICJiZWltIFZlcnN1Y2gsICVzIHp1IGzDtnNjaGVuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyB1bmRvIHRoZSB0dW5lMmZzIG9wZXJhdGlvbiBwbGVhc2UgcnVuIHRoZSBjb21tYW5kXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiVW0gZGllIGR1cmNoIFR1bmUyZnMgZ2VtYWNodGVuIMOEbmRlcnVuZ2VuIHLDvGNrZ8OkbmdpZyB6dSBtYWNoZW4sIHN0YXJ0ZW4gU2llXG4iCisiYml0dGVcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBibG9jayBtYWdpYyBpcyBiYWQuIFRyeSB0byBmaXggaXQgYnkgcnVubmluZzpcbiIKKyInZTJmc2NrIC1mICVzJ1xuIgorbXNnc3RyICIiCisiRGllIG1hZ2lzY2hlIFphaGwgZGVzIE1NUC1CbG9ja3MgaXN0IHVuZ8O8bHRpZy4gVmVyc3VjaGVuIFNpZSwgZGllcyBkdXJjaFxuIgorIuKAnmUyZnNjayAtZiAlc+KAnFxuIgorInp1IGJlaGViZW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGlub2RlIHNpemUgaXMgYWxyZWFkeSAlbHVcbiIKK21zZ3N0ciAiRGllIElub2RlLUdyw7bDn2UgaXN0IGJlcmVpdHMgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwODEKK21zZ2lkICJTaHJpbmtpbmcgaW5vZGUgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIkRhcyBWZXJyaW5nZXJuIGRlciBJbm9kZS1HcsO2w59lIHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpbm9kZSBzaXplICVsdSAobWF4ICVkKVxuIgorbXNnc3RyICJVbnp1bMOkc3NpZ2UgSW5vZGUtR3LDtsOfZTogJWx1IChtYXggJWQpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtYXhpbWFsIG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIkRpZSBtYXhpbWFsZSBBbnphaGwgdm9uIEVpbmjDpG5ndW5nZW4gd2lyZCBhdWYgJWQgZ2VzZXp0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjdXJyZW50IG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIkRpZSBBbnphaGwgZGVyIEVpbmjDpG5ndW5nZW4gd2lyZCBhdWYgJWQgZ2VzZXR6dFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXJyb3IgYmVoYXZpb3IgdG8gJWRcbiIKK21zZ3N0ciAiRGFzIEZlaGxlcnZlcmhhbHRlbiB3aXJkIGF1ZiAlZCBnZXNldHp0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgZ2lkIHRvICVsdVxuIgorbXNnc3RyICJEaWUgR3J1cHBlbi1JRCByZXNlcnZpZXJ0ZXIgQmzDtmNrZSB3aXJkIGF1ZiAlbHUgZ2VzZXR6dFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgIkRlciBBYnN0YW5kIHp3aXNjaGVuIHp3ZWkgUHLDvGZsw6R1ZmVuIGlzdCB6dSBncm/DnyAoJWx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGludGVydmFsIGJldHdlZW4gY2hlY2tzIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHIgIkRlciBBYnN0YW5kIHp3aXNjaGVuIGRlbiBQcsO8ZmzDpHVmZW4gd2lyZCBhdWYgJWx1IFNla3VuZGVuIGdlc2V0enRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50YWdlIHRvICVnJSUgKCVsbHUgYmxvY2tzKVxuIgorbXNnc3RyICIiCisiRGVyIHByb3plbnR1ZWxsZSBBbnRlaWwgcmVzZXJ2aWVydGVyIEJsw7Zja2Ugd2lyZCBhdWYgJWclJSAoJWxsdSBCbMO2Y2tlKSAiCisiZ2VzZXR6dFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlc2VydmVkIGJsb2NrcyBjb3VudCBpcyB0b28gYmlnICglbGx1KSIKK21zZ3N0ciAiRGllIEFuemFobCByZXNlcnZpZXJ0ZXIgQmzDtmNrZSBpc3QgenUgZ3Jvw58gKCVsbHUpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IHRvICVsbHVcbiIKK21zZ3N0ciAiRGllIEFuemFobCByZXNlcnZpZXJ0ZXIgQmzDtmNrZSB3aXJkIGF1ZiAlbGx1IGdlc2V0enRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4NworbXNnaWQgIiIKKyJcbiIKKyJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBzcGFyc2Ugc3VwZXJibG9ja3MuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEYXMgRGF0ZWlzeXN0ZW0gaGF0IGJlcmVpdHMgU3BhcnNlLVN1cGVyYmzDtmNrZS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE5MQorbXNnaWQgIiIKKyJcbiIKKyJTZXR0aW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCBzdXBwb3J0ZWRcbiIKKyJmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgbWV0YV9iZyBmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEYXMgQWt0aXZpZXJlbiB2b24gU3BhcnNlLVN1cGVyYmzDtmNrZW4gd2lyZCBhdWYgRGF0ZWlzeXN0ZW1lbiBtaXQgIgorImFrdGl2aWVydGVyXG4iCisiRWlnZW5zY2hhZnQgbWV0YV9iZyBuaWNodCB1bnRlcnN0w7x0enQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgc2V0LiAgJXMiCittc2dzdHIgIiIKKyJcbiIKKyJLZW5udW5nIOKAnlNwYXJzZS1TdXBlcmJsw7Zja2XigJwgaXN0IGdlc2V0enQuICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjA3Cittc2dpZCAiIgorIlxuIgorIkNsZWFyaW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEYXMgWnVyw7xja3NldHplbiBkZXIgS2VubnVuZyDigJ5TcGFyc2UtU3VwZXJibMO2Y2tl4oCcIHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdGltZSBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0byAlc1xuIgorbXNnc3RyICIiCisiRGVyIFplaXRwdW5rdCBkZXIgbGV0enRlbiBQcsO8ZnVuZyBkZXMgRGF0ZWlzeXN0ZW1zIHdpcmQgYXVmICVzIGdlc2V0enRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyB1aWQgdG8gJWx1XG4iCittc2dzdHIgIkRpZSBCZW51dHplci1JRCByZXNlcnZpZXJ0ZXIgQmzDtmNrZSB3aXJkIGF1ZiAlbHUgZ2VzZXR6dFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjUzCittc2dpZCAiRXJyb3IgaW4gdXNpbmcgY2xlYXJfbW1wLiBJdCBtdXN0IGJlIHVzZWQgd2l0aCAtZlxuIgorbXNnc3RyICIiCisiRmVobGVyIGJlaSBkZXIgVmVyd2VuZHVuZyB2b24gY2xlYXJfbW1wLiBFcyBtdXNzIHp1c2FtbWVuIG1pdCAtZiBiZW51dHp0ICIKKyJ3ZXJkZW5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI3MQorbXNnaWQgIiIKKyJUaGUgcXVvdGEgZmVhdHVyZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiUXVvdGFzIGvDtm5uZW4gbnVyIGJlaSBuaWNodCBlaW5nZWjDpG5ndGVuIERhdGVpc3lzdGVtZW4gZ2XDpG5kZXJ0IHdlcmRlbi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI5MgorbXNnaWQgIlRoZSBVVUlEIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIiIKKyJEaWUgVVVJRCBrYW5uIG51ciBiZWkgbmljaHQgZWluZ2Vow6RuZ3RlbSBEYXRlaXN5c3RlbSBnZcOkbmRlcnQgd2VyZGVuLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzIyCittc2dpZCAiSW52YWxpZCBVVUlEIGZvcm1hdFxuIgorbXNnc3RyICJVbmfDvGx0aWdlcyBVVUlELUZvcm1hdFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzM3Cittc2dpZCAiTmVlZCB0byB1cGRhdGUgam91cm5hbCBzdXBlcmJsb2NrLlxuIgorbXNnc3RyICJEZXIgSm91cm5hbC1TdXBlcmJsb2NrIG11c3MgYWt0dWFsaXNpZXJ0IHdlcmRlbi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM1OAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIiIKKyJEaWUgSW5vZGUtR3LDtsOfZSBrYW5uIG51ciBiZWkgYXVzZ2Vow6RuZ3RlbSBEYXRlaXN5c3RlbSBnZcOkbmRlcnQgd2VyZGVuLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzY2Cittc2dpZCAiIgorIkNoYW5naW5nIHRoZSBpbm9kZSBzaXplIG5vdCBzdXBwb3J0ZWQgZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIGZsZXhfYmdcbiIKKyJmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKyJEYXMgw4RuZGVybiBkZXIgSW5vZGUtR3LDtsOfZSBhdWYgRGF0ZWlzeXN0ZW1lbiBtaXQgYWt0aXZpZXJ0ZW0gZmxleF9iZ1xuIgorIndpcmQgbmljaHQgdW50ZXJzdMO8dHp0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW5vZGUgc2l6ZSAlbHVcbiIKK21zZ3N0ciAiRGllIElub2RlLUdyw7bDn2Ugd2lyZCBhdWYgJWx1IGdlc2V0enRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM4MgorbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICJEaWUgSW5vZGUtR3LDtsOfZSBrb25udGUgbmljaHQgZ2XDpG5kZXJ0IHdlcmRlblxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaWRlIHNpemUgdG8gJWRcbiIKK21zZ3N0ciAiRGllIFN0cmlkZS1HcsO2w59lIHdpcmQgYXVmICVkIGdlc2V0enRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlwZSB3aWR0aCB0byAlZFxuIgorbXNnc3RyICJEaWUgU3RyaXBlYnJlaXRlIHdpcmQgYXVmICVkIGdlc2V0enRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucyB0byAnJXMnXG4iCittc2dzdHIgIkRpZSBlcndlaXRlcnRlbiBTdGFuZGFyZC1FaW5ow6RuZ2VvcHRpb25lbiB3ZXJkZW4gYXVmIOKAniVz4oCcIGdlc2V0enRcbiIKKworIzogbWlzYy91dGlsLmM6OTMKK21zZ2lkICI8cHJvY2VlZGluZz5cbiIKK21zZ3N0ciAiPFZlcmFyYmVpdHVuZyBsw6R1ZnRcbiIKKworIzogbWlzYy91dGlsLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJvY2VlZCBhbnl3YXkgKG9yIHdhaXQgJWQgc2Vjb25kcykgPyAoeSxuKSAiCittc2dzdHIgIlRyb3R6ZGVtIGZvcnRmYWhyZW4gKG9kZXIgJWQgU2VrdW5kZW4gd2FydGVuKSA/IChqLG4pICIKKworIzogbWlzYy91dGlsLmM6MTAxCittc2dpZCAiUHJvY2VlZCBhbnl3YXk/ICh5LG4pICIKK21zZ3N0ciAiVHJvdHpkZW0gZm9ydGZhaHJlbj8gKGosbikgIgorCisjOiBtaXNjL3V0aWwuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vdW50ZWQgb24gJXMgb24gJXMiCittc2dzdHIgIlx0enVsZXR6dCBhdWYgJXMgYXVmICVzIGVpbmdlaMOkbmd0IgorCisjOiBtaXNjL3V0aWwuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vdW50ZWQgb24gJXMiCittc2dzdHIgIlx0enVsZXR6dCBhdWYgJXMgZWluZ2Vow6RuZ3QiCisKKyM6IG1pc2MvdXRpbC5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJcdGNyZWF0ZWQgb24gJXMiCittc2dzdHIgIlx0YXVmICVzIGVyemV1Z3QiCisKKyM6IG1pc2MvdXRpbC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW9kaWZpZWQgb24gJXMiCittc2dzdHIgIlx0enVsZXR6dCBnZcOkbmRlcnQgJXMiCisKKyM6IG1pc2MvdXRpbC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGb3VuZCBhICVzIHBhcnRpdGlvbiB0YWJsZSBpbiAlc1xuIgorbXNnc3RyICJJbiAlMiRzIHd1cmRlIGVpbmUgJTEkcy1QYXJ0aXRpb25zdGFiZWxsZSBnZWZ1bmRlblxuIgorCisjOiBtaXNjL3V0aWwuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGZpbGUgJXMgZG9lcyBub3QgZXhpc3QgYW5kIG5vIHNpemUgd2FzIHNwZWNpZmllZC5cbiIKK21zZ3N0ciAiRGllIERhdGVpICVzIGV4aXN0aWVydCBuaWNodCB1bmQgZXMgd3VyZGUga2VpbmUgR3LDtsOfZSBhbmdlZ2ViZW4uXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyByZWd1bGFyIGZpbGUgJXNcbiIKK21zZ3N0ciAiRGllIHJlZ3Vsw6RyZSBEYXRlaSAlcyB3aXJkIGFuZ2VsZWd0XG4iCisKKyM6IG1pc2MvdXRpbC5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiJXMga2FubiBuaWNodCBnZcO2ZmZuZXQgd2VyZGVuOiAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMTYKK21zZ2lkICIiCisiXG4iCisiVGhlIGRldmljZSBhcHBhcmVudGx5IGRvZXMgbm90IGV4aXN0OyBkaWQgeW91IHNwZWNpZnkgaXQgY29ycmVjdGx5P1xuIgorbXNnc3RyICIiCisiXG4iCisiRGFzIEdlcsOkdCBleGlzdGllcnQgb2ZmZW5zaWNodGxpY2ggbmljaHQ7IGhhYmVuIFNpZSBlcyBrb3JyZWt0IGFuZ2VnZWJlbj9cbiIKKworIzogbWlzYy91dGlsLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGJsb2NrIHNwZWNpYWwgZGV2aWNlLlxuIgorbXNnc3RyICIlcyBpc3Qga2VpbiBzcGV6aWVsbGVzIEJsb2NrZ2Vyw6R0LlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbSBsYWJlbGxlZCAnJXMnXG4iCittc2dzdHIgIiVzIGhhdCBlaW4gJXMtRGF0ZWlzeXN0ZW0gbWl0IE5hbWVuIOKAniVz4oCcXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjb250YWlucyBhICVzIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgIiVzIGhhdCBlaW4gJXMtRGF0ZWlzeXN0ZW1cbiIKKworIzogbWlzYy91dGlsLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGVudGlyZSBkZXZpY2UsIG5vdCBqdXN0IG9uZSBwYXJ0aXRpb24hXG4iCittc2dzdHIgIiVzIGlzdCBkYXMgZ2FuemUgR2Vyw6R0IHVuZCBuaWNodCBudXIgZWluZSBlaW56ZWxuZSBQYXJ0aXRpb24hXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMyMworbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICIiCisibWtlMmZzIHdpcmQgdHJvdHpkZW0gZXJ6d3VuZ2VuLiBIb2ZmZW50bGljaCBpc3QgL2V0Yy9tdGFiIG5pY2h0IGtvcnJla3QuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBtYWtlIGEgJXMgaGVyZSFcbiIKK21zZ3N0ciAiJXMgd2lyZCBoaWVyIG5pY2h0IGFuZ2VsZWd0IVxuIgorCisjOiBtaXNjL3V0aWwuYzozMzUKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAibWtlMmZzIHdpcmQgdHJvdHpkZW0gZXJ6d3VuZ2VuLlxuIgorCisjOiBtaXNjL3V0aWwuYzozNTEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugam91cm5hbCBvcHRpb25zIVxuIgorbXNnc3RyICIiCisiRXMga29ubnRlIGtlaW4gU3BlaWNoZXIgenVtIEVpbmxlc2VuIGRlciBKb3VybmFsb3B0aW9uZW4gcmVzZXJ2aWVydCB3ZXJkZW4hXG4iCisKKyM6IG1pc2MvdXRpbC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IGZpbmQgam91cm5hbCBkZXZpY2UgbWF0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIkVpbiB6dSAlcyBwYXNzZW5kZXMgSm91cm5hbGdlcsOkdCBrb25udGUgbmljaHQgZ2VmdW5kZW4gd2VyZGVuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQwMworbXNnaWQgIiIKKyJcbiIKKyJCYWQgam91cm5hbCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJKb3VybmFsIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBqb3VybmFsIG9wdGlvbnMgYXJlOlxuIgorIlx0c2l6ZT08am91cm5hbCBzaXplIGluIG1lZ2FieXRlcz5cbiIKKyJcdGRldmljZT08am91cm5hbCBkZXZpY2U+XG4iCisiXHRsb2NhdGlvbj08am91cm5hbCBsb2NhdGlvbj5cbiIKKyJcbiIKKyJUaGUgam91cm5hbCBzaXplIG11c3QgYmUgYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkZhbHNjaGUgSm91cm5hbG9wdGlvbmVuIGFuZ2VnZWJlbjpcbiIKKyJcbiIKKyJKb3VybmFsb3B0aW9uZW4gd2VyZGVuIGR1cmNoIEtvbW1hdGEgZ2V0cmVubnQuIE1hbmNoZSBlcndhcnRlbiBlaW5cbiIKKyJcdEFyZ3VtZW50LCB3ZWxjaGVzIG1pdCBHbGVpY2hoZWl0c3plaWNoZW4gKOKAnj3igJwpIHp1Z2V3aWVzZW4gd2lyZC5cbiIKKyJcbiIKKyJHw7xsdGlnZSBKb3VybmFsb3B0aW9uZW4gc2luZDpcbiIKKyJcdHNpemU9PEpvdXJuYWxncsO2w59lIGluIE1lZ2FieXRlcz5cbiIKKyJcdGRldmljZT08Sm91cm5hbGdlcsOkdD5cbiIKKyJcdGxvY2F0aW9uPTxQb3NpdGlvbiBkZXMgSm91cm5hbHM+XG4iCisiXG4iCisiRGllIEdyw7bDn2UgZGVzIEpvdXJuYWxzIG11c3Mgendpc2NoZW4gMTAyNCB1bmQgMTAyNDAwMDAgRGF0ZWlzeXN0ZW1ibMO2Y2tlblxuIgorIlx0bGllZ2VuLlxuIgorIlxuIgorCisjOiBtaXNjL3V0aWwuYzo0MzQKK21zZ2lkICIiCisiXG4iCisiRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIgorbXNnc3RyICIiCisiXG4iCisiRGFzIERhdGVpc3lzdGVtIGlzdCBmw7xyIGVpbiBKb3VybmFsIHp1IGtsZWluXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVGhlIHJlcXVlc3RlZCBqb3VybmFsIHNpemUgaXMgJWQgYmxvY2tzOyBpdCBtdXN0IGJlXG4iCisiYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBibG9ja3MuICBBYm9ydGluZy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkRpZSBnZXfDvG5zY2h0ZSBKb3VybmFsZ3LDtsOfZSBpc3QgJWQgQmzDtmNrZTsgc2llIG11c3NcbiIKKyJ6d2lzY2hlbiAxMDI0IHVuZCAxMDI0MDAwMCBCbMO2Y2tlbiBsaWVnZW4uIEFiYnJ1Y2guXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQ0OQorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIHNpemUgdG9vIGJpZyBmb3IgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkRhcyBKb3VybmFsIGlzdCBmw7xyIGRpZXNlcyBEYXRlaXN5c3RlbSB6dSBncm/Dny5cbiIKKworIzogbWlzYy91dGlsLmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGVzeXN0ZW0gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNoZWNrZWQgZXZlcnkgJWQgbW91bnRzIG9yXG4iCisiJWcgZGF5cywgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgVXNlIHR1bmUyZnMgLWMgb3IgLWkgdG8gb3ZlcnJpZGUuXG4iCittc2dzdHIgIiIKKyJEaWVzZXMgRGF0ZWlzeXN0ZW0gd2lyZCBhdXRvbWF0aXNjaCBhbGxlICVkIEVpbmjDpG5ndW5nZW4gb2RlclxuIgorIiVnIFRhZ2Ugw7xiZXJwcsO8ZnQsIHdhcyBpbW1lciB6dWVyc3Qga29tbXQuXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0OQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1kXSBbLXAgcGlkZmlsZV0gWy1zIHNvY2tldHBhdGhdIFstVCB0aW1lb3V0XVxuIgorbXNnc3RyICJBdWZydWY6ICVzIFstZF0gWy1wIFByb3plc3MtSUQtRGF0ZWldIFstcyBTb2NrZXRwZmFkXSBbLVQgVGltZW91dF1cbiIKKworIzogbWlzYy91dWlkZC5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyBbLXJ8dF0gWy1uIG51bV0gWy1zIHNvY2tldHBhdGhdXG4iCittc2dzdHIgIiAgICAgICAlcyBbLXJ8dF0gWy1uIEFuemFobF0gWy1zIFNvY2tldHBmYWRdXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiICAgICAgICVzIC1rXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoxNTUKK21zZ2lkICJiYWQgYXJndW1lbnRzIgorbXNnc3RyICJ1bmfDvGx0aWdlIEFyZ3VtZW50ZSIKKworIzogbWlzYy91dWlkZC5jOjE3MworbXNnaWQgImNvbm5lY3QiCittc2dzdHIgInZlcmJpbmRlbiIKKworIzogbWlzYy91dWlkZC5jOjE5MgorbXNnaWQgIndyaXRlIgorbXNnc3RyICJzY2hyZWliZW4iCisKKyM6IG1pc2MvdXVpZGQuYzoyMDAKK21zZ2lkICJyZWFkIGNvdW50IgorbXNnc3RyICJMZXNlesOkaGxlciIKKworIzogbWlzYy91dWlkZC5jOjIwNgorbXNnaWQgImJhZCByZXNwb25zZSBsZW5ndGgiCittc2dzdHIgInVuZ8O8bHRpZ2UgTMOkbmdlIGRlciBBbnR3b3J0IgorCisjOiBtaXNjL3V1aWRkLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInV1aWRkIGRhZW1vbiBhbHJlYWR5IHJ1bm5pbmcgYXQgcGlkICVzXG4iCittc2dzdHIgImRlciB1dWlkZC1Ew6Rtb24gbMOkZnQgYmVyZWl0cyBtaXQgUHJvemVzcy1JRCAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICJFcyBrb25udGUga2VpbiBVbml4LVN0cmVhbS1Tb2NrZXQgZXJ6ZXVndCB3ZXJkZW46ICVzIgorCisjOiBtaXNjL3V1aWRkLmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGJpbmQgdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIkVzIGtvbm50ZSBuaWNodCBtaXQgVW5peC1Tb2NrZXQgJXMgdmVyYnVuZGVuIHdlcmRlbjogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsaXN0ZW4gb24gdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIkxhdXNjaGVuIGF1ZiBVbml4LVNvY2tldCAlcyB3YXIgbmljaHQgbcO2Z2xpY2g6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBmcm9tIGNsaWVudCwgbGVuID0gJWRcbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gdm9tIENsaWVudCwgTMOkbmdlID0gJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVyYXRpb24gJWQsIGluY29taW5nIG51bSA9ICVkXG4iCittc2dzdHIgIk9wZXJhdGlvbiAlZCwgZWluZ2VoZW5kZSBOdW1tZXIgPSAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQ6ICVzXG4iCittc2dzdHIgIlplaXQtVVVJRCBlcnpldWd0OiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCByYW5kb20gVVVJRDogJXNcbiIKK21zZ3N0ciAiWnVmw6RsbGlnZSBVVUlEIGVyemV1Z3Q6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kICVkIHN1YnNlcXVlbnQgVVVJRHNcbiIKK21zZ3N0clswXSAiWmVpdC1VVUlEICVzIHVuZCBkaWUgZm9sZ2VuZGUgVVVJRCBlcnpldWd0XG4iCittc2dzdHJbMV0gIlplaXQtVVVJRCAlcyB1bmQgZGllIGZvbGdlbmRlbiAlZCBVVUlEcyBlcnpldWd0XG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkICVkIFVVSUQnczpcbiIKK21zZ3N0ciAiJWQgVVVJRHMgZXJ6ZXVndDpcbiIKKworIzogbWlzYy91dWlkZC5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiAlZFxuIgorbXNnc3RyICJVbmfDvGx0aWdlIE9wZXJhdGlvbiAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDc3IG1pc2MvdXVpZGQuYzo0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlcjogJXNcbiIKK21zZ3N0ciAiVW5nw7xsdGlnZSBOdW1tZXI6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MzQgbWlzYy91dWlkZC5jOjU2MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjYWxsaW5nIHV1aWRkIGRhZW1vbiAoJXMpOiAlc1xuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdWZydWYgZGVzIFV1aWQtRMOkbW9ucyAoJXMpOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFuZCBzdWJzZXF1ZW50IFVVSURcbiIKK21zZ2lkX3BsdXJhbCAiJXMgYW5kIHN1YnNlcXVlbnQgJWQgVVVJRHNcbiIKK21zZ3N0clswXSAiJXMgdW5kIGRpZSBmb2xnZW5kZSBVVUlEXG4iCittc2dzdHJbMV0gIiVzIHVuZCBkaWUgZm9sZ2VuZGVuICVkIFVVSURzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NDgKK21zZ2lkICJMaXN0IG9mIFVVSUQnczpcbiIKK21zZ3N0ciAiTGlzdGUgZGVyIFVVSURzOlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgcmVwbHkgbGVuZ3RoIGZyb20gc2VydmVyICVkXG4iCittc2dzdHIgIlVuZXJ3YXJ0ZXRlIEFudHdvcnRsw6RuZ2Ugdm9uIFNlcnZlciAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGtpbGwgdXVpZGQgcnVubmluZyBhdCBwaWQgJWQ6ICVzXG4iCittc2dzdHIgIiIKKyJEZXIgbWl0IFByb3plc3MtSUQgJWQgbGF1ZmVuZGUgdXVpZGQga29ubnRlIG5pY2h0IGFiZ2VzY2hvc3NlbiB3ZXJkZW46ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiS2lsbGVkIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkXG4iCittc2dzdHIgIkRlciBtaXQgUElEICVkIGxhdWZlbmRlIHV1aWRkIHd1cmRlIGFiZ2VzY2hvc3NlblxuIgorCisjOiBtaXNjL3V1aWRnZW4uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1yXSBbLXRdXG4iCittc2dzdHIgIkF1ZnJ1ZjogJXMgWy1yXSBbLXRdXG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDIKK21zZ2lkICIjIEV4dGVudCBkdW1wOlxuIgorbXNnc3RyICIjIER1bXAgZGVyIEVyd2VpdGVydW5nOlxuIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiNcdE51bT0lbGx1LCBTaXplPSVsbHUsIEN1cnNvcj0lbGx1LCBTb3J0ZWQ9JWxsdVxuIgorbXNnc3RyICIjXHRBbno9JWxsdSwgR3LDtsOfZT0lbGx1LCBDdXJzb3I9JWxsdSwgU29ydGllcnQ9JWxsdVxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1kIGRlYnVnX2ZsYWdzXSBbLWZdIFstRl0gWy1NXSBbLVBdIFstcF0gZGV2aWNlIFtuZXdfc2l6ZV1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkF1ZnJ1ZjogJXMgWy1kIGRlYnVnX2ZsYWdzXSBbLWZdIFstRl0gWy1NXSBbLVBdIFstcF0gR2Vyw6R0IFtuZXVlX0dyw7bDn2VdXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NjYKK21zZ2lkICJFeHRlbmRpbmcgdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJEaWUgSW5vZGUtVGFiZWxsZSB3aXJkIGVyd2VpdGVydCIKKworIzogcmVzaXplL21haW4uYzo2OQorbXNnaWQgIlJlbG9jYXRpbmcgYmxvY2tzIgorbXNnc3RyICJCbMO2Y2tlIHdlcmRlbiB2ZXJzY2hvYmVuIgorCisjOiByZXNpemUvbWFpbi5jOjcyCittc2dpZCAiU2Nhbm5pbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIkRpZSBJbm9kZS1UYWJlbGxlIHdpcmQgZ2VsZXNlbiIKKworIzogcmVzaXplL21haW4uYzo3NQorbXNnaWQgIlVwZGF0aW5nIGlub2RlIHJlZmVyZW5jZXMiCittc2dzdHIgIkRpZSBJbm9kZS1SZWZlcmVuemVuIHdlcmRlbiBha3R1YWxpc2llcnQiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzgKK21zZ2lkICJNb3ZpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIkRpZSBJbm9kZS1UYWJlbGxlIHdpcmQgdmVyc2Nob2JlbiIKKworIzogcmVzaXplL21haW4uYzo4MQorbXNnaWQgIlVua25vd24gcGFzcz8hPyIKK21zZ3N0ciAiVW5iZWthbm50ZXIgRHVyY2hnYW5nPyE/IgorCisjOiByZXNpemUvbWFpbi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZ2luIHBhc3MgJWQgKG1heCA9ICVsdSlcbiIKK21zZ3N0ciAiU3RhcnQgdm9uIER1cmNoZ2FuZyAlZCAobWF4ID0gJWx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjE1NQorbXNnaWQgIiIKKyJcbiIKKyJSZXNpemluZyBiaWdhbGxvYyBmaWxlIHN5c3RlbXMgaGFzIG5vdCBiZWVuIGZ1bGx5IHRlc3RlZC4gIFByb2NlZWQgYXRcbiIKKyJ5b3VyIG93biByaXNrISAgVXNlIHRoZSBmb3JjZSBvcHRpb24gaWYgeW91IHdhbnQgdG8gZ28gYWhlYWQgYW55d2F5LlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiRGllIEdyw7bDn2VudmVyw6RuZGVydW5nIHZvbiBCaWdhbGxvYy1EYXRlaXN5c3RlbWVuIHd1cmRlIG5vY2ggbmljaHQgIgorInZvbGxzdMOkbmRpZ1xuIgorImdlcHLDvGZ0LiBEZXN3ZWdlbiBoYW5kZWxuIFNpZSBhdWYgZWlnZW5lIEdlZmFociEuIFZlcndlbmRlbiBTaWUgZGllIE9wdGlvblxuIgorIuKAnmZvcmNl4oCcLCB3ZW5uIFNpZSB0cm90emRlbSBmb3J0ZmFocmVuIHdvbGxlbi5cbiIKKworIzogcmVzaXplL21haW4uYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyIKK21zZ3N0ciAiYmVpbSDDlmZmbmVuIHZvbiAlcyIKKworIzogcmVzaXplL21haW4uYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZ2V0dGluZyBzdGF0IGluZm9ybWF0aW9uIGZvciAlcyIKK21zZ3N0ciAiYmVpbSBBYmZyYWdlbiBkZXIgU3RhdHVzaW5mb3JtYXRpb24gZsO8ciAlcyIKKworIzogcmVzaXplL21haW4uYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZiAlcycgZmlyc3QuXG4iCisiXG4iCittc2dzdHIgIiIKKyJCaXR0ZSBsYXNzZW4gU2llIHp1ZXJzdCDigJ5lMmZzY2sgLWYgJXPigJwgbGF1ZmVuLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RpbWF0ZWQgbWluaW11bSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtOiAlbGx1XG4iCittc2dzdHIgIkdlc2Now6R0enRlIG1pbmltYWxlIEdyw7bDn2UgZGVzIERhdGVpc3lzdGVtczogJWxsdVxuIgorCisjOiByZXNpemUvbWFpbi5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG5ldyBzaXplOiAlc1xuIgorbXNnc3RyICJVbnp1bMOkc3NpZ2UgbmV1ZSBHcsO2w59lOiAlc1xuIgorCisjOiByZXNpemUvbWFpbi5jOjQyMQorbXNnaWQgIk5ldyBzaXplIHRvbyBsYXJnZSB0byBiZSBleHByZXNzZWQgaW4gMzIgYml0c1xuIgorbXNnc3RyICJEaWUgbmV1ZSBHcsO2w59lIGzDpHNzdCBzaWNoIG5pY2h0IG1laHIgbWl0IDMyIEJpdHMgYXVzZHLDvGNrZW5cbiIKKworIzogcmVzaXplL21haW4uYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV3IHNpemUgc21hbGxlciB0aGFuIG1pbmltdW0gKCVsbHUpXG4iCittc2dzdHIgIkRpZSBuZXVlIEdyw7bDn2UgaXN0IGtsZWluZXIgYWxzIGRhcyBNaW5pbXVtICglbGx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjQzNQorbXNnaWQgIkludmFsaWQgc3RyaWRlIGxlbmd0aCIKK21zZ3N0ciAiVW5nw7xsdGlnZSDigJ5TdHJpZGXigJwtTMOkbmdlIgorCisjOiByZXNpemUvbWFpbi5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbnRhaW5pbmcgcGFydGl0aW9uIChvciBkZXZpY2UpIGlzIG9ubHkgJWxsdSAoJWRrKSBibG9ja3MuXG4iCisiWW91IHJlcXVlc3RlZCBhIG5ldyBzaXplIG9mICVsbHUgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiRGllIHNpZSBlbnRoYWx0ZW5kZSBQYXJ0aXRpb24gKG9kZXIgR2Vyw6R0KSBpc3QgbnVyICVsbHUgKCVkaykgQmzDtmNrZSBncm/Dny5cbiIKKyJTaWUgd29sbGVuICVsbHUgQmzDtmNrZSBoYWJlbi5cbiIKKworIzogcmVzaXplL21haW4uYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIGlzIGFscmVhZHkgJWxsdSAoJWRrKSBibG9ja3MgbG9uZy4gIE5vdGhpbmcgdG8gZG8hXG4iCisiXG4iCittc2dzdHIgIiIKKyJEYXMgRGF0ZWlzeXN0ZW0gaXN0IGJlcmVpdHMgJWxsdSAoJWRrKSBCbMO2Y2tlIGxhbmcuIE5pY2h0cyB6dSB0dW4hXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICIiCisiRGllIEdyw7bDn2UgZGVzIERhdGVpc3lzdGVtcyBhdWYgJXMgd2lyZCBhdWYgJWxsdSAoJWRrKSBCbMO2Y2tlIGdlw6RuZGVydC5cbiIKKworIzogcmVzaXplL21haW4uYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlc2l6ZSAlcyIKK21zZ3N0ciAiYmVpbSBWZXJzdWNoLCBkaWUgR3LDtsOfZSB2b24gJXMgenUgw6RuZGVybiIKKworIzogcmVzaXplL21haW4uYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZnkgJXMnIHRvIGZpeCB0aGUgZmlsZXN5c3RlbVxuIgorImFmdGVyIHRoZSBhYm9ydGVkIHJlc2l6ZSBvcGVyYXRpb24uXG4iCittc2dzdHIgIiIKKyJCaXR0ZSBsYXNzZW4gU2llIOKAnmUyZnNjayAtZnkgJXPigJwgbGF1ZmVuLCB1bSBkYXNcbiIKKyJEYXRlaXN5c3RlbSBuYWNoIGRlciBhYmdlYnJvY2hlbmVuIEdyw7bDn2Vuw6RuZGVydW5nXG4iCisienUgcmVwYXJpZXJlbi5cbiIKKworIzogcmVzaXplL21haW4uYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIG9uICVzIGlzIG5vdyAlbGx1ICglZGspIGJsb2NrcyBsb25nLlxuIgorIlxuIgorbXNnc3RyICIiCisiRGFzIERhdGVpc3lzdGVtIGF1ZiAlcyBpcyBudW4gJWxsdSAoJWRrKSBCbMO2Y2tlIGxhbmcuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byB0cnVuY2F0ZSAlcyIKK21zZ3N0ciAiYmVpbSBWZXJzdWNoLCAlcyBhYnp1c2NobmVpZGVuIgorCisjOiByZXNpemUvb25saW5lLmM6ODIKK21zZ2lkICJrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXplIHdpdGggc3BhcnNlX3N1cGVyMiIKK21zZ3N0ciAiIgorIkRlciBLZXJuZWwgdW50ZXJzdMO8dHp0IGRpZSBPbmxpbmUtR3LDtsOfZW7DpG5kZXJ1bmcgbWl0IHNwYXJzZV9zdXBlcjIgbmljaHQiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4NworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXM7IG9uLWxpbmUgcmVzaXppbmcgcmVxdWlyZWRcbiIKK21zZ3N0ciAiIgorIkRhdGVpc3lzdGVtIGJlaSAlcyBpc3QgYXVmICVzIGVpbmdlaMOkbmd0OyBPbmxpbmUtR3LDtsOfZW7DpG5kZXJ1bmcgaXN0XG4iCisiZXJmb3JkZXJsaWNoXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo5MQorbXNnaWQgIk9uLWxpbmUgc2hyaW5raW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIk9ubGluZS1TY2hydW1wZmVuIHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0IgorCisjOiByZXNpemUvb25saW5lLmM6MTE2Cittc2dpZCAiRmlsZXN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiRGFzIERhdGVpc3lzdGVtIHVudGVyc3TDvHR6dCBkaWUgT25saW5lLUdyw7bDn2Vuw6RuZGVydW5nIG5pY2h0IgorCisjOiByZXNpemUvb25saW5lLmM6MTI1Cittc2dpZCAiTm90IGVub3VnaCByZXNlcnZlZCBnZHQgYmxvY2tzIGZvciByZXNpemluZyIKK21zZ3N0ciAiTmljaHQgZ2VudWcgcmVzZXJ2aWVydGUgR0RULUJsw7Zja2UgZsO8ciBkaWUgR3LDtsOfZW7DpG5kZXJ1bmciCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMzIKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCByZXNpemluZyBhIGZpbGUgc3lzdGVtIHRoaXMgbGFyZ2UiCittc2dzdHIgIiIKKyJEZXIgS2VybmVsIHVudGVyc3TDvHR6dCBkaWUgT25saW5lLUdyw7bDn2Vuw6RuZGVydW5nZW4gZWluZXMgc28gZ3Jvw59lblxuIgorIkRhdGVpc3lzdGVtcyBuaWNodCIKKworIzogcmVzaXplL29ubGluZS5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBtb3VudHBvaW50ICVzIgorbXNnc3RyICJiZWltIFZlcnN1Y2gsIGRlbiBFaW5ow6RuZ2VwdW5rdCAlcyB6dSDDtmZmbmVuIgorCisjOiByZXNpemUvb25saW5lLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIk9sZCByZXNpemUgaW50ZXJmYWNlIHJlcXVlc3RlZC5cbiIKK21zZ3N0ciAiRGllIGFsdGUgU2Nobml0dHN0ZWxsZSBmw7xyIEdyw7bDn2Vuw6RuZGVydW5nIHd1cmRlIGFuZ2Vmb3JkZXJ0LlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MTY0IHJlc2l6ZS9vbmxpbmUuYzoxODEKK21zZ2lkICJQZXJtaXNzaW9uIGRlbmllZCB0byByZXNpemUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiRGllIEVybGF1Ym5pcyB6dW0gw4RuZGVybiBkZXIgRGF0ZWlzeXN0ZW1ncsO2w59lIHd1cmRlIHZlcndlaWdlcnQuIgorCisjOiByZXNpemUvb25saW5lLmM6MTY3IHJlc2l6ZS9vbmxpbmUuYzoxODcKK21zZ2lkICJXaGlsZSBjaGVja2luZyBmb3Igb24tbGluZSByZXNpemluZyBzdXBwb3J0IgorbXNnc3RyICJCZWltIMOcYmVycHLDvGZlbiBkZXIgVW50ZXJzdMO8dHp1bmcgZsO8ciBPbmxpbmUtR3LDtsOfZW7DpG5kZXJ1bmciCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxODQKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIkRlciBLZXJuZWwgYmlldGV0IGtlaW5lIFVudGVyc3TDvHR6dW5nIGbDvHIgZWluZSBPbmxpbmUtR3LDtsOfZW7DpG5kZXJ1bmciCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGVyZm9ybWluZyBhbiBvbi1saW5lIHJlc2l6ZSBvZiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiRGllIEdyw7bDn2Ugdm9uICVzIHdpcmQgZ2VyYWRlIG9ubGluZSBhdWYgJWxsdSAoJWRrKSBCbMO2Y2tlIGdlw6RuZGVydC5cbiIKKworIzogcmVzaXplL29ubGluZS5jOjIzMworbXNnaWQgIldoaWxlIHRyeWluZyB0byBleHRlbmQgdGhlIGxhc3QgZ3JvdXAiCittc2dzdHIgImJlaW0gVmVyc3VjaCwgZGllIGxldHp0ZSBHcnVwcGUgenUgZXJ3ZWl0ZXJuIgorCisjOiByZXNpemUvb25saW5lLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHRyeWluZyB0byBhZGQgZ3JvdXAgIyVkIgorbXNnc3RyICJiZWltIFZlcnN1Y2gsIGRpZSBHcnVwcGUgIyVkIGhpbnp1enVmw7xnZW4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlcywgYW5kIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IHN1cHBvcnRlZCBvbiAiCisidGhpcyBzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJEYXMgRGF0ZWlzeXN0ZW0gYmVpICVzIGlzdCBhdWYgJXMgZWluZ2Vow6RuZ3QgdW5kIGRpZSDDhG5kZXJ1bmcgZGVyIEdyw7bDn2UgaW1cbiIKKyJsYXVmZW5kZW4gU3lzdGVtIHdpcmQgYXVmIGRpZXNlbSBTeXN0ZW0gbmljaHQgdW50ZXJzdMO8dHp0LlxuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgImlub2RlcyAoJWxsdSkgbXVzdCBiZSBsZXNzIHRoYW4gJXUiCittc2dzdHIgIkRpZSBJbm9kZXMgKCVsbHUpIG3DvHNzZW4gdW50ZXIgJXUgbGllZ2VuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6NjkxCittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIgorbXNnc3RyICJyZXNlcnZpZXJ0ZSBCbMO2Y2tlIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6OTM2Cittc2dpZCAibWV0YS1kYXRhIGJsb2NrcyIKK21zZ3N0ciAiTWV0YWRhdGVuLUJsw7Zja2UiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoxMDM5IHJlc2l6ZS9yZXNpemUyZnMuYzoxODM2Cittc2dpZCAibmV3IG1ldGEgYmxvY2tzIgorbXNnc3RyICJuZXVlIE1ldGFkYXRlbi1CbMO2Y2tlIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjA1NgorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW4hICBObyBzYiBpbiBsYXN0IHN1cGVyX3NwYXJzZSBiZz9cbiIKK21zZ3N0ciAiRGllcyBzb2xsdGUgbmllIGdlc2NoZWhlbiEgS2VpbiBzYiBpbSBsZXR6dGVuIHN1cGVyX3NwYXJzZSBiZz9cbiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjIwNjEKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuISAgVW5leHBlY3RlZCBvbGRfZGVzYyBpbiBzdXBlcl9zcGFyc2UgYmc/XG4iCittc2dzdHIgIkRpZXMgc29sbHRlIG5pZSBnZXNjaGVoZW4hIFVuZXJ3YXJ0ZXRlIG9sZF9kZXNjIGluIHN1cGVyX3NwYXJzZSBiZz9cbiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjIxMzkKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuOiByZXNpemUgaW5vZGUgY29ycnVwdCFcbiIKK21zZ3N0ciAiRGllcyBzb2xsdGUgbmllIGdlc2NoZWhlbjogRGVyIEdyw7bDn2Vuw6RuZGVydW5ncy1Jbm9kZSBpc3QgZGVmZWt0IVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEKKyMsIGZ1enp5Cittc2dpZCAiRVhUMkZTIExpYnJhcnkgdmVyc2lvbiAxLjQyLjEzIgorbXNnc3RyICJFWFQyRlMtQmlibGlvdGhlaywgVmVyc2lvbiAxLjQyLjEyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDJfZmlsc3lzIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgZWluZSBleHQyX2ZpbGVzeXMtU3RydWt0dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICJGYWxzY2hlIG1hZ2lzY2hlIFphaGwgZsO8ciBlaW5lIGJhZGJsb2Nrc19saXN0LVN0cnVrdHVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19pdGVyYXRlIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgZWluZSBiYWRibG9ja3NfaXRlcmF0ZS1TdHJ1a3R1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9zY2FuIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgZWluZSBpbm9kZV9zY2FuLVN0cnVrdHVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJGYWxzY2hlIG1hZ2lzY2hlIFphaGwgZsO8ciBlaW5lIGlvX2NoYW5uZWwtU3RydWt0dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdW5peCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgZWluZSBVbml4IGlvX2NoYW5uZWwtU3RydWt0dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fbWFuYWdlciBzdHJ1Y3R1cmUiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIGVpbmUgaW9fbWFuYWdlci1TdHJ1a3R1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBibG9ja19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICJGYWxzY2hlIG1hZ2lzY2hlIFphaGwgZsO8ciBlaW5lIGJsb2NrX2JpdG1hcC1TdHJ1a3R1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICJGYWxzY2hlIG1hZ2lzY2hlIFphaGwgZsO8ciBlaW5lIGlub2RlX2JpdG1hcC1TdHJ1a3R1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBnZW5lcmljX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIGVpbmUgZ2VuZXJpY19iaXRtYXAtU3RydWt0dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdGVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgZWluZSB0ZXN0LWlvX2NoYW5uZWwtU3RydWt0dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZGlyZWN0b3J5IGJsb2NrIGxpc3Qgc3RydWN0dXJlIgorbXNnc3RyICIiCisiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgZWluZSBTdHJ1a3R1ciBmw7xyIGRpZSBMaXN0ZSBkZXIgVmVyemVpY2huaXNibMO2Y2tlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGljb3VudCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIGVpbmUgaWNvdW50LVN0cnVrdHVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIFBvd2VycXVlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIGVpbmUgaW9fY2hhbm5lbC1TdHJ1a3R1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyIGZpbGUgc3RydWN0dXJlIgorbXNnc3RyICJGYWxzY2hlIG1hZ2lzY2hlIFphaGwgZsO8ciBlaW5lIEV4dDItRGF0ZWktU3RydWt0dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgRXh0MiBJbWFnZSBIZWFkZXIiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIGVpbmVuIEV4dDItQWJiaWxkLUtvcGYiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGUgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIGVpbmUgU3RydWt0dXIgZGVzIElub2RlLWlvX2NoYW5uZWxzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IGhhbmRsZSIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgZWluZSBFeHQ0LUVyd2VpdGVydW5nc2hhbmRsZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayIKK21zZ3N0ciAiVW5nw7xsdGlnZSBtYWdpc2NoZSBaYWhsIGltIFN1cGVyYmxvY2siCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMQorbXNnaWQgIkZpbGVzeXN0ZW0gcmV2aXNpb24gdG9vIGhpZ2giCittc2dzdHIgIkRpZSBEYXRlaXN5c3RlbXZlcnNpb24gaXN0IHp1IGhvY2giCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMgorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgdG8gZmlsZXN5c3RlbSBvcGVuZWQgcmVhZC1vbmx5IgorbXNnc3RyICIiCisiRGllcyBpc3QgZWluIFZlcnN1Y2gsIGF1ZiBlaW4gbnVyLWxlc2JhciBnZcO2ZmZuZXRlcyBEYXRlaXN5c3RlbSB6dSBzY2hyZWliZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMworbXNnaWQgIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIkRpZSBHcnVwcGVuZGVza3JpcHRvcmVuIGtvbm50ZW4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNAorbXNnaWQgIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICJEaWUgR3J1cHBlbmRlc2tyaXB0b3JlbiBrb25udGVuIG5pY2h0IGdlc2NocmllYmVuIHdlcmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM1Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiRGVmZWt0ZXIgR3J1cHBlbmRlc2tyaXB0b3I6IGRlZmVrdGVyIEJsb2NrIGbDvHIgZGllIEJsb2NrLUJpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM2Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiRGVmZWt0ZXIgR3J1cHBlbmRlc2tyaXB0b3I6IGRlZmVrdGVyIEJsb2NrIGbDvHIgZGllIElub2RlLUJpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM3Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIHRhYmxlIgorbXNnc3RyICJEZWZla3RlciBHcnVwcGVuZGVza3JpcHRvcjogZGVmZWt0ZXIgQmxvY2sgZsO8ciBkaWUgSW5vZGUtVGFiZWxsZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM4Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgYml0bWFwIgorbXNnc3RyICJFaW5lIElub2RlLUJpdG1hcCBrb25udGUgbmljaHQgZ2VzY2hyaWViZW4gd2VyZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiRWluZSBJbm9kZS1CaXRtYXAga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDAKK21zZ2lkICJDYW4ndCB3cml0ZSBhIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiRWluZSBCbG9jay1CaXRtYXAga29ubnRlIG5pY2h0IGdlc2NocmllYmVuIHdlcmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQxCittc2dpZCAiQ2FuJ3QgcmVhZCBhIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiRWluZSBCbG9jay1CaXRtYXAga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDIKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiRWluZSBJbm9kZS1UYWJlbGxlIGtvbm50ZSBuaWNodCBnZXNjaHJpZWJlbiB3ZXJkZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MworbXNnaWQgIkNhbid0IHJlYWQgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIkVpbmUgSW5vZGUtVGFiZWxsZSBrb25udGUgbmljaHQgZ2VsZXNlbiB3ZXJkZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NAorbXNnaWQgIkNhbid0IHJlYWQgbmV4dCBpbm9kZSIKK21zZ3N0ciAiRGVyIG7DpGNoc3RlIElub2RlIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuZXhwZWN0ZWQgYmxvY2sgc2l6ZSIKK21zZ3N0ciAiRGFzIERhdGVpc3lzdGVtIGhhdCBlaW5lIHVuZXJ3YXJ0ZXRlIEJsb2NrZ3LDtsOfZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ2Cittc2dpZCAiRVhUMiBkaXJlY3RvcnkgY29ycnVwdGVkIgorbXNnc3RyICJEYXMgRXh0Mi1WZXJ6ZWljaG5pcyBpc3QgZGVmZWt0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDcKK21zZ2lkICJBdHRlbXB0IHRvIHJlYWQgYmxvY2sgZnJvbSBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHJlYWQiCittc2dzdHIgIiIKKyJEZXIgVmVyc3VjaCwgZWluZW4gQmxvY2sgdm9tIERhdGVpc3lzdGVtIHp1IGxlc2VuLCBlbmRldGUgaW4ga3VyemVtIExlc2VuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDgKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIGJsb2NrIHRvIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgd3JpdGUiCittc2dzdHIgIiIKKyJEZXIgVmVyc3VjaCwgZWluZW4gQmxvY2sgYXVmIGRhcyBEYXRlaXN5c3RlbSB6dSBzY2hyZWliZW4sIGVuZGV0ZSBpbiBrdXJ6ZW0gIgorIlNjaHJlaWJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ5Cittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiB0aGUgZGlyZWN0b3J5IgorbXNnc3RyICJLZWluIGZyZWllciBQbGF0eiBpbSBWZXJ6ZWljaG5pcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUwCittc2dpZCAiSW5vZGUgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgImRpZSBJbm9kZS1CaXRtYXAgd3VyZGUgbmljaHQgZ2VsYWRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUxCittc2dpZCAiQmxvY2sgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgImRpZSBCbG9jay1CaXRtYXAgd3VyZGUgbmljaHQgZ2VsYWRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUyCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIiCittc2dzdHIgIlVuZ8O8bHRpZ2UgSW5vZGUtTnVtbWVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTMKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiVW5nw7xsdGlnZSBCbG9ja3phaGwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NAorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIgorbXNnc3RyICJJbnRlcm5lciBGZWhsZXIgaW4gZXh0MmZzX2V4cGFuZF9kaXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gYnVpbGQgcHJvcG9zZWQgZmlsZXN5c3RlbSIKK21zZ3N0ciAiTmljaHQgZ2VudWcgUGxhdHosIHVtIGRhcyB2b3JnZXNjaGxhZ2VuZSBEYXRlaXN5c3RlbSB6dSBiYXVlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU2Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorIkVzIHd1cmRlIGVpbmUgdW5nw7xsdGlnZSBCbG9ja251bW1lciBhbiBleHQyZnNfbWFya19ibG9ja19iaXRtYXAgw7xiZXJnZWJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU3Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICIiCisiRXMgd3VyZGUgZWluZSB1bmfDvGx0aWdlIEJsb2NrbnVtbWVyIGFuIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwIMO8YmVyZ2ViZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OAorbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAiCittc2dzdHIgIiIKKyJFcyB3dXJkZSBlaW5lIHVuZ8O8bHRpZ2UgQmxvY2tudW1tZXIgYW4gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIMO8YmVyZ2ViZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKyJFcyB3dXJkZSBlaW5lIHVuZ8O8bHRpZ2UgSW5vZGUtTnVtbWVyIGFuIGV4dDJmc19tYXJrX2lub2RlX2JpdG1hcCDDvGJlcmdlYmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjAKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKyJFcyB3dXJkZSBlaW5lIHVuZ8O8bHRpZ2UgSW5vZGUtTnVtbWVyIGFuIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwIMO8YmVyZ2ViZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKyJFcyB3dXJkZSBlaW5lIHVuZ8O8bHRpZ2UgSW5vZGUtTnVtbWVyIGFuIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCDDvGJlcmdlYmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjIKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBibG9jayBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIiIKKyJFcyB3aXJkIHZlcnN1Y2h0LCBkYXMgRW5kZSBkZXIgQmxvY2stQml0bWFwIGplbnNlaXRzIGRlcyB3aXJrbGljaGVuIEVuZGVzXG4iCisienUgcGxhdHppZXJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYzCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgaW5vZGUgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICIiCisiRXMgd2lyZCB2ZXJzdWNodCwgZGFzIEVuZGUgZGVyIElub2RlLUJpdG1hcCBqZW5zZWl0cyBkZXMgd2lya2xpY2hlbiBFbmRlc1xuIgorInp1IHBsYXR6aWVyZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NAorbXNnaWQgIklsbGVnYWwgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIkVzIHd1cmRlIGVpbiB1bmfDvGx0aWdlciBpbmRpcmVrdGVyIEJsb2NrIGdlZnVuZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKK21zZ2lkICJJbGxlZ2FsIGRvdWJseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiRXMgd3VyZGUgZWluIHVuZ8O8bHRpZ2VyIGRvcHBlbHQgaW5kaXJla3RlciBCbG9jayBnZWZ1bmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY2Cittc2dpZCAiSWxsZWdhbCB0cmlwbHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIkVzIHd1cmRlIGVpbiB1bmfDvGx0aWdlciBkcmVpZmFjaCBpbmRpcmVrdGVyIEJsb2NrIGdlZnVuZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjcKK21zZ2lkICJCbG9jayBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIkRpZSBCbG9jay1CaXRtYXBzIHNpbmQgbmljaHQgaWRlbnRpc2NoIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjgKK21zZ2lkICJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIkRpZSBJbm9kZS1CaXRtYXBzIHNpbmQgbmljaHQgaWRlbnRpc2NoIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjkKK21zZ2lkICJJbGxlZ2FsIG9yIG1hbGZvcm1lZCBkZXZpY2UgbmFtZSIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgb2RlciBmZWhsZXJoYWZ0ZXIgR2Vyw6R0ZW5hbWUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MAorbXNnaWQgIkEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiRWluZXIgQmxvY2tncnVwcGUgZmVobHQgZWluZSBJbm9kZS1UYWJlbGxlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzEKK21zZ2lkICJUaGUgZXh0MiBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQiCittc2dzdHIgIkRlciBFeHQyLVN1cGVyYmxvY2sgaXN0IGRlZmVrdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcyCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisiRWluZSB1bnp1bMOkc3NpZ2UgZ2VuZXJpc2NoZSBCaXRudW1tZXIgd3VyZGUgYW4gZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAgIgorIsO8YmVyZ2ViZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MworbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisiRWluZSB1bnp1bMOkc3NpZ2UgZ2VuZXJpc2NoZSBCaXRudW1tZXIgd3VyZGUgYW4gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCAiCisiw7xiZXJnZWJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc0Cittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisiRWluZSB1bnp1bMOkc3NpZ2UgZ2VuZXJpc2NoZSBCaXRudW1tZXIgd3VyZGUgYW4gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAgIgorIsO8YmVyZ2ViZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NQorbXNnaWQgIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiRXMgd3VyZGVuIHp1IHZpZWxlIHN5bWJvbGlzY2hlIFZlcmtuw7xwZnVuZ2VuIGdlZnVuZGVuLiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc2Cittc2dpZCAiVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB0aGlzIGNhc2UiCittc2dzdHIgIkRpZSBDYWxsYmFjay1GdW5rdGlvbiBrYW5uIGRpZXNlbiBGYWxsIG5pY2h0IGhhbmRoYWJlbi4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NworbXNnaWQgIlRoZSBpbm9kZSBpcyBmcm9tIGEgYmFkIGJsb2NrIGluIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiRGVyIElub2RlIGtvbW10IHZvbiBlaW5lbSBiZXNjaMOkZGlndGVuIEJsb2NrIGluIGRlciBJbm9kZS1UYWJlbGxlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzgKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpIgorbXNnc3RyICJEYXMgRGF0ZWlzeXN0ZW0gYmVzaXR6dCBuaWNodCB1bnRlcnN0w7x0enRlIEVpZ2Vuc2NoYWZ0KGVuKSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc5Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgcmVhZC1vbmx5IGZlYXR1cmUocykiCittc2dzdHIgIkRhcyBEYXRlaXN5c3RlbSBiZXNpdHp0IG5pY2h0IHVudGVyc3TDvHR6dGUgTnVyLUxlc2VuLUVpZ2Vuc2NoYWZ0KGVuKToiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MAorbXNnaWQgIklPIENoYW5uZWwgZmFpbGVkIHRvIHNlZWsgb24gcmVhZCBvciB3cml0ZSIKK21zZ3N0ciAiRGVyIEVBLUthbmFsIGhhdCBuaWNodCBwb3NpdGlvbmllcnQgYmVpbSBMZXNlbiBvZGVyIFNjaHJlaWJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgxCittc2dpZCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICJEaWUgUmVzZXJ2aWVydW5nIHZvbiBTcGVpY2hlciBzY2hsdWcgZmVobCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gZXh0MiBsaWJyYXJ5IgorbXNnc3RyICJFaW4gdW5nw7xsdGlnZXMgQXJndW1lbnQgd3VyZGUgYW4gZGllIEV4dDItQmlibGlvdGhlayDDvGJlcmdlYmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODMKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgYmxvY2sgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJJbSBFeHQyLURhdGVpc3lzdGVtIGtvbm50ZSBrZWluIEJsb2NrIGFuZ2Vmb3JkZXJ0IHdlcmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg0Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGlub2RlIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiSW0gRXh0Mi1EYXRlaXN5c3RlbSBrb25udGUga2VpbiBJbm9kZSBhbmdlZm9yZGVydCB3ZXJkZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NQorbXNnaWQgIkV4dDIgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICJEZXIgRXh0Mi1Jbm9kZSB3ZWlzdCBuaWNodCBhdWYgZWluIFZlcnplaWNobmlzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODYKK21zZ2lkICJUb28gbWFueSByZWZlcmVuY2VzIGluIHRhYmxlIgorbXNnc3RyICJadSB2aWVsZSBSZWZlcmVuemVuIGluIGRlciBUYWJlbGxlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODcKK21zZ2lkICJGaWxlIG5vdCBmb3VuZCBieSBleHQyX2xvb2t1cCIKK21zZ3N0ciAiRGllIERhdGVpIHd1cmRlIHZvbiBleHQyX2xvb2t1cCBuaWNodCBnZWZ1bmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg4Cittc2dpZCAiRmlsZSBvcGVuIHJlYWQtb25seSIKK21zZ3N0ciAiRGllIERhdGVpIHd1cmRlIG51ci1sZXNiYXIgZ2XDtmZmbmV0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODkKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCittc2dzdHIgIkRlciBWZXJ6ZWljaG5pc2Jsb2NrIGRlcyBleHQyLURhdGVpc3lzdGVtcyB3dXJkZSBuaWNodCBnZWZ1bmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkwCittc2dpZCAiRXh0MiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkRhcyBFeHQyLVZlcnplaWNobmlzIGV4aXN0aWVydCBiZXJlaXRzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTEKK21zZ2lkICJVbmltcGxlbWVudGVkIGV4dDIgbGlicmFyeSBmdW5jdGlvbiIKK21zZ3N0ciAiTmljaHQgaW1wbGVtZW50aWVydGUgRXh0Mi1CaWJsaW90aGVrc2Z1bmt0aW9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTIKK21zZ2lkICJVc2VyIGNhbmNlbCByZXF1ZXN0ZWQiCittc2dzdHIgIkRlciBCZW51dHplciBoYXQgYWJnZWJyb2NoZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MworbXNnaWQgIkV4dDIgZmlsZSB0b28gYmlnIgorbXNnc3RyICJEaWUgRXh0Mi1EYXRlaSBpc3QgenUgZ3Jvw58iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NAorbXNnaWQgIlN1cHBsaWVkIGpvdXJuYWwgZGV2aWNlIG5vdCBhIGJsb2NrIGRldmljZSIKK21zZ3N0ciAiRGFzIGFuZ2VnZWJlbmUgSm91cm5hbGdlcsOkdCBpc3Qga2VpbiBibG9ja29yaWVudGllcnRlcyBHZXLDpHQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQiCittc2dzdHIgIkRlciBKb3VybmFsLVN1cGVyYmxvY2sgd3VyZGUgbmljaHQgZ2VmdW5kZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NgorbXNnaWQgIkpvdXJuYWwgbXVzdCBiZSBhdCBsZWFzdCAxMDI0IGJsb2NrcyIKK21zZ3N0ciAiRGFzIEpvdXJuYWwgbXXDnyBtaW5kZXN0ZW5zIDEwMjQgQmzDtmNrZSBncm/DnyBzZWluIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTcKK21zZ2lkICJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iCittc2dzdHIgIk5pY2h0IHVudGVyc3TDvHR6dGUgSm91cm5hbHZlcnNpb24iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGFkZW4gZGVzIGV4dGVybmVuIEpvdXJuYWxzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTkKK21zZ2lkICJKb3VybmFsIG5vdCBmb3VuZCIKK21zZ3N0ciAiRGFzIEpvdXJuYWwgd3VyZGUgbmljaHQgZ2VmdW5kZW4uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAwCittc2dpZCAiRGlyZWN0b3J5IGhhc2ggdW5zdXBwb3J0ZWQiCittc2dzdHIgIlZlcnplaWNobmlzaGFzaGVzIHdlcmRlbiBuaWNodCB1bnRlcnN0w7x0enQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDEKK21zZ2lkICJJbGxlZ2FsIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBudW1iZXIiCittc2dzdHIgIkRpZSBOdW1tZXIgZGVzIEJsb2NrcyBmw7xyIGVyd2VpdGVydGUgQXR0cmlidXRlIGlzdCB1bnp1bMOkc3NpZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMgorbXNnaWQgIkNhbm5vdCBjcmVhdGUgZmlsZXN5c3RlbSB3aXRoIHJlcXVlc3RlZCBudW1iZXIgb2YgaW5vZGVzIgorbXNnc3RyICIiCisiRWluIERhdGVpc3lzdGVtIG1pdCBkZXIgZ2V3w7xuc2NodGVuIEFuemFobCBJbm9kZXMga2FubiBuaWNodCBlcnpldWd0IHdlcmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMworbXNnaWQgIkUyaW1hZ2Ugc25hcHNob3Qgbm90IGluIHVzZSIKK21zZ3N0ciAiRGVyIEUyaW1hZ2UtU2NobmFwcHNjaHVzcyB3aXJkIG5pY2h0IHZlcndlbmRldCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNAorbXNnaWQgIlRvbyBtYW55IHJlc2VydmVkIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzIgorbXNnc3RyICJadSB2aWVsZSByZXNlcnZpZXJ0ZSBCbMO2Y2tlIGbDvHIgR3J1cHBlbi1EZXNrcmlwdG9yZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDUKK21zZ2lkICJSZXNpemUgaW5vZGUgaXMgY29ycnVwdCIKK21zZ3N0ciAiRGVyIEdyw7bDn2Vuw6RuZGVydW5ncy1Jbm9kZSBpc3QgZGVmZWt0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA2Cittc2dpZCAiVHJpZWQgdG8gc2V0IGJsb2NrIGJtYXAgd2l0aCBtaXNzaW5nIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICIiCisiRXMgd3VyZGUgdmVyc3VjaHQsIGVpbmUgQmxvY2stQml0bWFwIG1pdCBmZWhsZW5kZW0gaW5kaXJla3RlbSBCbG9jayB6dSAiCisic2NocmVpYmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA3Cittc2dpZCAiVERCOiBTdWNjZXNzIgorbXNnc3RyICJUREI6IEVyZm9sZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOAorbXNnaWQgIlREQjogQ29ycnVwdCBkYXRhYmFzZSIKK21zZ3N0ciAiVERCOiBEYXRlbmJhbmsgaXN0IGJlc2Now6RkaWd0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA5Cittc2dpZCAiVERCOiBJTyBFcnJvciIKK21zZ3N0ciAiVERCOiBFQS1GZWhsZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTAKK21zZ2lkICJUREI6IExvY2tpbmcgZXJyb3IiCittc2dzdHIgIlREQjogRmVobGVyIGJlaW0gU3BlcnJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMQorbXNnaWQgIlREQjogT3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAiVERCOiBIYXVwdHNwZWljaGVyIGVyc2Now7ZwZnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTIKK21zZ2lkICJUREI6IFJlY29yZCBleGlzdHMiCittc2dzdHIgIlREQjogRGF0ZW5zYXR6IGV4aXN0aWVydCBiZXJlaXRzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEzCittc2dpZCAiVERCOiBMb2NrIGV4aXN0cyBvbiBvdGhlciBrZXlzIgorbXNnc3RyICJUREI6IERpZSBTcGVycmUgZXhpc3RpZXJ0IHNjaG9uIGF1ZiBhbmRlcmVuIFNjaGzDvHNzZWxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE0Cittc2dpZCAiVERCOiBJbnZhbGlkIHBhcmFtZXRlciIKK21zZ3N0ciAiVERCOiBVbmfDvGx0aWdlciBQYXJhbWV0ZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTUKK21zZ2lkICJUREI6IFJlY29yZCBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiVERCOiBEZXIgRGF0ZW5zYXR6IGV4aXN0aWVydCBuaWNodCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNgorbXNnaWQgIlREQjogV3JpdGUgbm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiVERCOiBTY2hyZWliZW4gaXN0IG5pY2h0IHp1bMOkc3NpZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNworbXNnaWQgIkV4dDJmcyBkaXJlY3RvcnkgYmxvY2sgbGlzdCBpcyBlbXB0eSIKK21zZ3N0ciAiRGllIExpc3RlIGRlciBFeHQyZnMtVmVyemVpY2huaXNibMO2Y2tlIGlzdCBsZWVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE4Cittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgYSBibG9jayBtYXBwaW5nIHZpYSBhIHJlYWQtb25seSBibG9jayBpdGVyYXRvciIKK21zZ3N0ciAiIgorIkVzIHdpcmQgdmVyc3VjaHQsIGVpbmUgQmxvY2t6dXdlaXN1bmcgw7xiZXIgZWluZW4gbnVyLWxlc2JhcmVuIEJsb2NraXRlcmF0b3IgIgorInp1XG4iCisiw6RuZGVybiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgc2F2ZWQgcGF0aCIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgZWluZW4gZ2VzcGVpY2hlcnRlbiBQZmFkIHp1IGV4dDQtRXJ3ZWl0ZXJ1bmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBnZW5lcmljIGJpdG1hcCIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgZWluZSBnZW5lcmlzY2hlIDY0LUJpdC1CaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBibG9jayBiaXRtYXAiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIGVpbmUgNjQtQml0LUJsb2NrLUJpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgZWluZSA2NC1CaXQtSW5vZGUtQml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xMyIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIC0tLSBSRVNFUlZFRF8xMyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTQiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCAtLS0gUkVTRVJWRURfMTQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE1IgorbXNnc3RyICJGYWxzY2hlIG1hZ2lzY2hlIFphaGwgLS0tIFJFU0VSVkVEXzE1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNiIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIC0tLSBSRVNFUlZFRF8xNiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTciCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCAtLS0gUkVTRVJWRURfMTciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE4IgorbXNnc3RyICJGYWxzY2hlIG1hZ2lzY2hlIFphaGwgLS0tIFJFU0VSVkVEXzE4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOSIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIC0tLSBSRVNFUlZFRF8xOSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMAorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGhlYWRlciIKK21zZ3N0ciAiRGVmZWt0ZXIgS29wZiBlaW5lciBFcndlaXRlcnVuZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMQorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGluZGV4IgorbXNnc3RyICJCZXNjaMOkZGlndGVyIEVyd2VpdGVydW5nc2luZGV4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMyCittc2dpZCAiQ29ycnVwdCBleHRlbnQiCittc2dzdHIgIkJlc2Now6RkaWd0ZSBFcndlaXRlcnVuZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMworbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gZXh0ZW50IG1hcCIKK21zZ3N0ciAiRXMgaXN0IGtlaW4gZnJlaWVyIFBsYXR6IGluIGRlciBLYXJ0ZSBkZXIgRXJ3ZWl0ZXJ1bmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzQKK21zZ2lkICJJbm9kZSBkb2VzIG5vdCB1c2UgZXh0ZW50cyIKK21zZ3N0ciAiRGVyIElub2RlIHZlcndlbmRldCBrZWluZSBFcndlaXRlcnVuZ2VuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM1Cittc2dpZCAiTm8gJ25leHQnIGV4dGVudCIKK21zZ3N0ciAiS2VpbmUg4oCebsOkY2hzdGXigJwgRXJ3ZWl0ZXJ1bmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzYKK21zZ2lkICJObyAncHJldmlvdXMnIGV4dGVudCIKK21zZ3N0ciAiS2VpbmUg4oCedm9yaGVyaWdl4oCcIEVyd2VpdGVydW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM3Cittc2dpZCAiTm8gJ3VwJyBleHRlbnQiCittc2dzdHIgIktlaW5lIOKAnm9iZXJl4oCcIEVyd2VpdGVydW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAiS2VpbmUg4oCedW50ZXJl4oCcIEVyd2VpdGVydW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM5Cittc2dpZCAiTm8gY3VycmVudCBub2RlIgorbXNnc3RyICJLZWluIGFrdHVlbGxlciBLbm90ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDAKK21zZ2lkICJFeHQyZnMgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkRpZXNlIEV4dDJmcy1PcGVyYXRpb24gd2lyZCBuaWNodCB1bnRlcnN04bqXenQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDEKK21zZ2lkICJObyByb29tIHRvIGluc2VydCBleHRlbnQgaW4gbm9kZSIKK21zZ3N0ciAiRXMgZ2lidCBrZWluZW4gUGxhdHosIHVtIGRpZSBFcndlaXRlcnVuZyBpbiBkZW4gS25vdGVuIGVpbnp1ZsO8Z2VuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQyCittc2dpZCAiU3BsaXR0aW5nIHdvdWxkIHJlc3VsdCBpbiBlbXB0eSBub2RlIgorbXNnc3RyICJEaWUgQXVmdGVpbHVuZyB3w7xyZGUgenUgZWluZW0gbGVlcmVuIEtub3RlbiBmw7xocmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQzCittc2dpZCAiRXh0ZW50IG5vdCBmb3VuZCIKK21zZ3N0ciAiRGllIEVyd2VpdGVydW5nIHd1cmRlIG5pY2h0IGdlZnVuZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIkRpZSBPcGVyYXRpb24gd2lyZCBmw7xyIElub2RlcyBtaXQgRXJ3ZWl0ZXJ1bmdlbiBuaWNodCB1bnRlcnN0w7zhupd6dCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiRGllIEzDpG5nZSBkZXIgRXJ3ZWl0ZXJ1bmcgaW4gdW5nw7xsdGlnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ2Cittc2dpZCAiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIKK21zZ3N0ciAiRGVyIEVBLUthbmFsIHVudGVyc3TDvHR6dCBrZWluZSA2NC1CaXQtQmxvY2tudW1tZXJuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiIgorIldlZ2VuIGRlcyBGZWhsZW5zIHZvbiAvZXRjL210YWIga2FubiBuaWNodCBnZXByw7xmdCB3ZXJkZW4sIG9iIGRhcyAiCisiRGF0ZWlzeXN0ZW1cbiIKKyJlaW5nZWjDpG5ndCBpc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDgKK21zZ2lkICJGaWxlc3lzdGVtIHRvbyBsYXJnZSB0byB1c2UgbGVnYWN5IGJpdG1hcHMiCittc2dzdHIgIkRhcyBEYXRlaXN5c3RlbSBpc3QgenUgZ3Jvw58sIHVtIGRpZSB2ZXJhbHRldGVuIEJpdG1hcHMgenUgdmVyd2VuZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ5Cittc2dpZCAiTU1QOiBpbnZhbGlkIG1hZ2ljIG51bWJlciIKK21zZ3N0ciAiTU1QOiBmZWhsZW5kZSBtYWdpc2NoZSBaYWhsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUwCittc2dpZCAiTU1QOiBkZXZpY2UgY3VycmVudGx5IGFjdGl2ZSIKK21zZ3N0ciAiTU1QOiBkYXMgR2Vyw6R0IGlzdCBkZXJ6ZWl0IGFrdGl2IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUxCittc2dpZCAiTU1QOiBmc2NrIGJlaW5nIHJ1biIKK21zZ3N0ciAiTU1QOiBmc2NrIGzDpHVmdCBkZXJ6ZWl0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUyCittc2dpZCAiTU1QOiBibG9jayBudW1iZXIgYmV5b25kIGZpbGVzeXN0ZW0gcmFuZ2UiCittc2dzdHIgIk1NUDogZGllIEJsb2NrbnVtbWVyIGlzdCBqZW5zZWl0cyBkZXIgRGF0ZWlzeXN0ZW1ncmVuemVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICJNTVA6IGVpbmUgdW5iZWthbm50ZSBPcGVyYXRpb24gd2lyZCBkdXJjaGdlZsO8aHJ0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU0Cittc2dpZCAiTU1QOiBmaWxlc3lzdGVtIHN0aWxsIGluIHVzZSIKK21zZ3N0ciAiTU1QOiBkYXMgRGF0ZWlzeXN0ZW0gd2lyZCBpbW1lciBub2NoIHZlcndlbmRldCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NQorbXNnaWQgIk1NUDogb3BlbiB3aXRoIE9fRElSRUNUIGZhaWxlZCIKK21zZ3N0ciAiTU1QOiDDtmZmbmVuIG1pdCBPX0RJUkVDVCBpc3QgZ2VzY2hlaXRlcnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTYKK21zZ2lkICJCbG9jayBncm91cCBkZXNjcmlwdG9yIHNpemUgaW5jb3JyZWN0IgorbXNnc3RyICJEaWUgR3LDtsOfZSBkZXMg4oCeQmxvY2tncnVwcGVuLURlc2tyaXB0b3Jz4oCcIGlzdCB1bnp1bMOkc3NpZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NworbXNnaWQgIklub2RlIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGlub2RlIgorbXNnc3RyICJEaWUgUHLDvGZzdW1tZSBkZXMgSW5vZGVzIHBhc3N0IG5pY2h0IGRhenUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTgKK21zZ2lkICJJbm9kZSBiaXRtYXAgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYml0bWFwIgorbXNnc3RyICJEaWUgUHLDvGZzdW1tZSBkZXIgSW5vZGUtQml0bWFwIHBhc3N0IG5pY2h0IHp1ciBCaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTkKK21zZ2lkICJFeHRlbnQgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZXh0ZW50IGJsb2NrIgorbXNnc3RyICJEaWUgUHLDvGZzdW1tZSBkZXMgRXJ3ZWl0ZXJ1bmdzYmxvY2tzIHBhc3N0IG5pY2h0IGRhenUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjAKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgZG9lcyBub3QgaGF2ZSBzcGFjZSBmb3IgY2hlY2tzdW0iCittc2dzdHIgIkRlciBWZXJ6ZWljaG5pc2Jsb2NrIGhhdCBrZWluZW4gUGxhdHogZsO8ciBlaW5lIFByw7xmc3VtbWUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjEKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICJEaWUgUHLDvGZzdW1tZSBkZXMgVmVyemVpY2huaXNibG9ja3MgcGFzc3QgbmljaHQgZGF6dSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MgorbXNnaWQgIkV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBibG9jayIKK21zZ3N0ciAiRGllIFByw7xmc3VtbWUgZGVzIEJsb2NrcyBmw7xyIGVyd2VpdGVydGUgQXR0cmlidXRlIHBhc3N0IG5pY2h0IGRhenUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjMKK21zZ2lkICJTdXBlcmJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIHN1cGVyYmxvY2siCittc2dzdHIgIkRpZSBQcsO8ZnN1bW1lIGRlcyBTdXBlcmJsb2NrcyBwYXNzdCBuaWNodCBkYXp1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY0Cittc2dpZCAiVW5rbm93biBjaGVja3N1bSBhbGdvcml0aG0iCittc2dzdHIgIlVuYmVrYW5udGVyIFByw7xmc3VtbWVuYWxnb3JpdGhtdXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjUKK21zZ2lkICJNTVAgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggTU1QIGJsb2NrIgorbXNnc3RyICJEaWUgUHLDvGZzdW1tZSBkZXMgTU1QLUJsb2NrcyBwYXNzdCBuaWNodCBkYXp1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY2Cittc2dpZCAiRXh0MiBmaWxlIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJEaWUgRXh0Mi1EYXRlaSBleGlzdGllcnQgYmVyZWl0cyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTEKK21zZ2lkICJQcm9maWxlIHZlcnNpb24gMC4wIgorbXNnc3RyICJQcm9maWx2ZXJzaW9uIDAuMCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTIKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9ub2RlIgorbXNnc3RyICJVbmfDvGx0aWdlIG1hZ2lzY2hlIFphaGwgaW0gcHJvZmlsZV9ub2RlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMworbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBub3QgZm91bmQiCittc2dzdHIgImRpZSBQcm9maWxzZWt0aW9uIHd1cmRlIG5pY2h0IGdlZnVuZGVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNAorbXNnaWQgIlByb2ZpbGUgcmVsYXRpb24gbm90IGZvdW5kIgorbXNnc3RyICJadXNhbW1lbmhhbmcgZGVzIFByb2ZpbHMgd3VyZGUgbmljaHQgZ2VmdW5kZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE1Cittc2dpZCAiQXR0ZW1wdCB0byBhZGQgYSByZWxhdGlvbiB0byBub2RlIHdoaWNoIGlzIG5vdCBhIHNlY3Rpb24iCittc2dzdHIgIiIKKyJEaWVzIGlzdCBlaW4gVmVyc3VjaCwgZWluZW4gQmV6dWcgenUgZWluZW0gS25vdGVuIGhpbnp1enVmw7xnZW4sIGRlciBrZWluZVxuIgorIlNla3Rpb24gaXN0IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNgorbXNnaWQgIkEgcHJvZmlsZSBzZWN0aW9uIGhlYWRlciBoYXMgYSBub24temVybyB2YWx1ZSIKK21zZ3N0ciAiRGVyIEhlYWRlciBkZXIgUHJvZmlsc2VrdGlvbiBoYXQgZWluZW4gdm9uIE51bGwgdmVyc2NoaWVkZW5lbiBXZXJ0IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNworbXNnaWQgIkJhZCBsaW5rZWQgbGlzdCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgdmVya2V0dGV0ZSBMaXN0ZSBpbiBkZW4gUHJvZmlsc3RydWt0dXJlbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTgKK21zZ2lkICJCYWQgZ3JvdXAgbGV2ZWwgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICJVbmfDvGx0aWdlIEdydXBwZW5lYmVuZSBpbiBkZW4gUHJvZmlsc3RydWt0dXJlbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTkKK21zZ2lkICJCYWQgcGFyZW50IHBvaW50ZXIgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBaZWlnZXIgYXVmIGRpZSBFbHRlcm4gaW4gZGVuIFByb2ZpbHN0cnVrdHVyZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGUgaXRlcmF0b3IiCittc2dzdHIgIlVuZ8O8bHRpZ2UgbWFnaXNjaGUgWmFobCBpbSBQcm9maWxpdGVyYXRvciIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjEKK21zZ2lkICJDYW4ndCBzZXQgdmFsdWUgb24gc2VjdGlvbiBub2RlIgorbXNnc3RyICJJbiBkZW0gU2VrdGlvbnNrbm90ZW4ga2FubiBkZXIgV2VydCBuaWNodCBnZXNldHp0IHdlcmRlbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCittc2dzdHIgIkVzIHd1cmRlIGVpbiB1bnp1bMOkc3NpZ2VzIEFyZ3VtZW50IGFuIGRpZSBQcm9maWxiaWJsaW90aGVrIMO8YmVyZ2ViZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIkVzIHdpcmQgdmVyc3VjaHQsIGVpbiBudXIgbGVzYmFyZXMgUHJvZmlsIHp1IMOkbmRlcm4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI0Cittc2dpZCAiUHJvZmlsZSBzZWN0aW9uIGhlYWRlciBub3QgYXQgdG9wIGxldmVsIgorbXNnc3RyICJEZXIgSGVhZGVyIGRlciBQcm9maWxzZWt0aW9uIGlzdCBuaWNodCBhdWYgZGVyIG9iZXJzdGVuIEViZW5lIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNQorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIgorbXNnc3RyICJTeW50YXhmZWhsZXIgaW0gSGVhZGVyIGRlciBQcm9maWxzZWt0aW9uIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNgorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHJlbGF0aW9uIgorbXNnc3RyICJTeW50YXhmZWhsZXIgaW4gZGVuIFByb2ZpbGJlemllaHVuZ2VuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNworbXNnaWQgIkV4dHJhIGNsb3NpbmcgYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiw5xiZXJ6w6RobGlnZSBzY2hsaWXDn2VuZGUgS2xhbW1lciBpbSBQcm9maWwiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI4Cittc2dpZCAiTWlzc2luZyBvcGVuIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIkZlaGxlbmRlIMO2ZmZuZW5kZSBLbGFtbWVyIGltIFByb2ZpbCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjkKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV90IgorbXNnc3RyICJVbmfDvGx0aWdlIG1hZ2lzY2hlIFphaGwgaW0gcHJvZmlsZV90IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3NlY3Rpb25fdCIKK21zZ3N0ciAiVW5iZWthbm50ZSBtYWdpc2NoZSBaYWhsIGltIHNlY3Rpb25fdCBkZXMgUHJvZmlscyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzEKK21zZ2lkICJJdGVyYXRpb24gdGhyb3VnaCBhbGwgdG9wIGxldmVsIHNlY3Rpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiSXRlcmF0aW9uIGR1cmNoIGFsbGUgVG9wbGV2ZWwtU2VrdGlvbmVuIHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMgorbXNnaWQgIkludmFsaWQgcHJvZmlsZV9zZWN0aW9uIG9iamVjdCIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgcHJvZmlsZV9zZWN0aW9uLU9iamVrdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzMKK21zZ2lkICJObyBtb3JlIHNlY3Rpb25zIgorbXNnc3RyICJLZWluZSB3ZWl0ZXJlbiBTZWt0aW9uZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM0Cittc2dpZCAiQmFkIG5hbWVzZXQgcGFzc2VkIHRvIHF1ZXJ5IHJvdXRpbmUiCittc2dzdHIgIlVuZ8O8bHRpZ2UgTmFtZW4gYW4gZGllIEFiZnJhZ2Vyb3V0aW5lIMO8YmVyZ2ViZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIkVzIGlzdCBrZWluZSBQcm9maWxkYXRlaSBvZmZlbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzYKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCittc2dzdHIgIlVuZ8O8bHRpZ2UgbWFnaXNjaGUgWmFobCBpbSBwcm9maWxlX2ZpbGVfdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzcKK21zZ2lkICJDb3VsZG4ndCBvcGVuIHByb2ZpbGUgZmlsZSIKK21zZ3N0ciAiRGllIFByb2ZpbGRhdGVpIGtvbm50ZSBuaWNodCBnZcO2ZmZuZXQgd2VyZGVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOAorbXNnaWQgIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkRpZSBTZWt0aW9uIGV4aXN0aWVydCBiZXJlaXRzIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOQorbXNnaWQgIkludmFsaWQgYm9vbGVhbiB2YWx1ZSIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgYm9vbGVzY2hlciBXZXJ0IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzo0MAorbXNnaWQgIkludmFsaWQgaW50ZWdlciB2YWx1ZSIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgZ2FuenphaGxpZ2VyIFdlcnQiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQxCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCittc2dzdHIgIlVuZ8O8bHRpZ2UgbWFnaXNjaGUgWmFobCBpbSBwcm9maWxlX2ZpbGVfZGF0YV90IgorCisjfiBtc2dpZCAiQ2xlYXJpbmcgZXh0ZW50IGZsYWcgbm90IHN1cHBvcnRlZCBvbiAlcyIKKyN+IG1zZ3N0ciAiIgorI34gIkRhcyBadXLDvGNrc2V0emVuIGRlcyBLZW5uemVpY2hlbnMgZsO8ciDigJ5FcndlaXRlcnVuZ+KAnCB3aXJkIGF1ZiAlc1xuIgorI34gIlx0bmljaHQgdW50ZXJzdMO8dHp0IgorCisjfiBtc2dpZCAiIgorI34gIiVzOiBUaGUgY29tYmluYXRpb24gb2YgZmxleF9iZyBhbmRcbiIKKyN+ICJcdCFyZXNpemVfaW5vZGUgZmVhdHVyZXMgaXMgbm90IHN1cHBvcnRlZCBieSByZXNpemUyZnMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIlczogRGllIEtvbWJpbmF0aW9uIGRlciBFaWdlbnNjaGFmdGVuIGZsZXhfYmcgdW5kXG4iCisjfiAidCFyZXNpemVfaW5vZGUgd2lyZCB2b24gcmVzaXplMmZzIG5pY2h0IHVudGVyZXN0w7x0enQuXG4iCisKKyN+IG1zZ2lkICJAaSAlaSBzaG91bGQgbm90IGhhdmUgRU9GQkxPQ0tTX0ZMIHNldCAoc2l6ZSAlSXMsIGxibGsgJXIpXG4iCisjfiBtc2dzdHIgIiIKKyN+ICLCoGluIEBpICVpIHNvbGx0ZSBFT0ZCTE9DS1NfRkwgbmljaHQgZ2VzZXR6dCBzZWluIChHcsO2w59lICVJcywgbGJsayAlcilcbiIKKworI34gbXNnaWQgIkNvdWxkbid0IGRldGVybWluZSBqb3VybmFsIHNpemUiCisjfiBtc2dzdHIgIktvbm50ZSBkaWUgR3LDtsOfZSBkZXMgRGF0ZWlzeXN0ZW1zIG5pY2h0IGVybWl0dGVsbiIKKworI34gbXNnaWQgIiNcdFx0ICVsbHUgLT4gJWxsdSAoJWxsdSlcbiIKKyN+IG1zZ3N0ciAiI1x0XHQgJWxsdSAtPiAlbGx1ICglbGx1KVxuIgorCisjfiBtc2dpZCAic2hvcnQgd3JpdGUgKG9ubHkgJWQgYnl0ZXMpIGZvciB3cml0aW5nIGltYWdlIGhlYWRlciIKKyN+IG1zZ3N0ciAic2hvcnQgd3JpdGUgKG9ubHkgJWQgYnl0ZXMpIGZvciB3cml0aW5nIGltYWdlIGhlYWRlciIKKworI34gbXNnaWQgIldhcm5pbmc6IGZyYWdtZW50cyBub3Qgc3VwcG9ydGVkLiAgSWdub3JpbmcgLWYgb3B0aW9uXG4iCisjfiBtc2dzdHIgIldhcm51bmc6IEZyYWdtZW50ZSB3ZXJkZW4gbmljaHQgdW50ZXJzdMO8dHp0LiBJZ25vcmllcmUgLWYgT3B0aW9uXG4iCisKKyN+IG1zZ2lkICJDYWxsaW5nIEJMS0RJU0NBUkQgZnJvbSAlbGx1IHRvICVsbHUgIgorI34gbXNnc3RyICJEZXIgQXVmcnVmIHZvbiBCTEtESVNDQVJEIGbDvHIgZGVuIEJlcmVpY2ggdm9uICVsbHUgYmlzICVsbHUgd2FyICIKKworI34gbXNnaWQgInN1Y2NlZWRlZC5cbiIKKyN+IG1zZ3N0ciAiZXJmb2xncmVpY2guXG4iCmRpZmYgLS1naXQgYS9wby9lMmZzcHJvZ3MucG90IGIvcG8vZTJmc3Byb2dzLnBvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2ZhN2VhCi0tLSAvZGV2L251bGwKKysrIGIvcG8vZTJmc3Byb2dzLnBvdApAQCAtMCwwICsxLDY2NTEgQEAKKyMgRTJmc3Byb2dzIHRyYW5zbGF0aW9uIHRlbXBsYXRlIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAorIyAgICAgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwKKyMgICAgICAyMDEzLCAyMDE0LCAyMDE1IGJ5IFRoZW9kb3JlIFRzJ28KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGUyZnNwcm9ncyBwYWNrYWdlLgorIyBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PiwgMjAxNS4KKyMKKyMuIFRoZSBzdHJpbmdzIGluIGUyZnNjaydzIHByb2JsZW0uYyBjYW4gYmUgdmVyeSBoYXJkIHRvIHRyYW5zbGF0ZSwKKyMuIHNpbmNlIHRoZSBzdHJpbmdzIGFyZSBleHBhbmRlZCBpbiB0d28gZGlmZmVyZW50IHdheXMuICBGaXJzdCBvZiBhbGwsCisjLiB0aGVyZSBpcyBhbiBALWV4cGFuc2lvbiwgd2hlcmUgc3RyaW5ncyBsaWtlICJAaSIgYXJlIGV4cGFuZGVkIHRvCisjLiAiaW5vZGUiLCBhbmQgc28gb24uICBJbiBvcmRlciB0byBtYWtlIGl0IGVhc2llciBmb3IgdHJhbnNsYXRvcnMsIHRoZQorIy4gZTJmc3Byb2dzIHBvIHRlbXBsYXRlIGZpbGUgaGFzIGJlZW4gZW5oYW5jZWQgd2l0aCBjb21tZW50cyB0aGF0IHNob3cKKyMuIHRoZSBALWV4cGFuc2lvbiwgZm9yIHRoZSBzdHJpbmdzIGluIHRoZSBwcm9ibGVtLmMgZmlsZS4KKyMuCisjLiBUcmFuc2xhdG9ycyBhcmUgZnJlZSB0byB1c2UgdGhlIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGlmIHRoZXkgc28KKyMuIGNob29zZSwgYnkgcHJvdmlkaW5nIHRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBpbiBlMmZzY2svbWVzc2FnZS5jLgorIy4gVGhlc2UgdHJhbnNsYXRpb24gY2FuIGNvbXBsZXRlbHkgcmVwbGFjZSBhbiBleHBhbnNpb247IGZvciBleGFtcGxlLAorIy4gaWYgImJibG9jayIgKHdoaWNoIGluZGljYXRlZCB0aGF0ICJAYiIgd291bGQgYmUgZXhwYW5kZWQgdG8gImJsb2NrIikKKyMuIGlzIHRyYW5zbGF0ZWQgYXMgImRkYXRlbnZlcmx1c3QiLCB0aGVuICJAZCIgd2lsbCBiZSBleHBhbmRlZCB0bworIy4gImRhdGVudmVybHVzdCIuICBBbHRlcm5hdGl2ZWx5LCB0cmFuc2xhdG9ycyBjYW4gc2ltcGx5IG5vdCB1c2UgdGhlCisjLiBALWV4cGFuc2lvbiBmYWNpbGl0eSBhdCBhbGwuCisjLgorIy4gVGhlIHNlY29uZCBleHBhbnNpb24gd2hpY2ggaXMgZG9uZSBmb3IgZTJmc2NrJ3MgcHJvYmxlbS5jIG1lc3NhZ2VzIGlzCisjLiBhIGR5bmFtaWMgJS1leHBhbnNpb24sIHdoaWNoIGV4cGFuZHMgJWkgYXMgYW4gaW5vZGUgbnVtYmVyLCBhbmQgc28KKyMuIG9uLiAgQSB0YWJsZSBvZiB0aGVzZSBleHBhbnNpb25zIGNhbiBiZSBmb3VuZCBiZWxvdy4gIE5vdGUgdGhhdAorIy4gJS1leHByZXNzaW9ucyB0aGF0IGJlZ2luIHdpdGggIiVEIiBhbmQgIiVJIiBhcmUgdHdvLWNoYXJhY3RlcgorIy4gZXhwYW5zaW9uczsgc28gZm9yIGV4YW1wbGUsICIlSXUiIGV4cGFuZHMgdG8gdGhlIGlub2RlJ3MgdXNlciBpZAorIy4gb3duZXJzaGlwIGZpZWxkIChpbm9kZS0+aV91aWQpLiAgQWxzbyB0aGUgIiVCIiBleHBhbnNpb24gaXMgc3BlY2lhbDoKKyMuIGl0IGNhbiBleHBhbmQgdG8gZWl0aGVyIHRoZSBzdHJpbmcgImluZGlyZWN0IGJsb2NrIiAocG9zc2libHkgcHJlY2VkZWQKKyMuIGJ5IHRoZSB3b3JkICJkb3VibGUiIG9yICJ0cmlwbGUiKSwgb3IgdGhlIHN0cmluZyAiYmxvY2sgIyIgaW1tZWRpYXRlbHkKKyMuIGZvbGxvd2VkIGJ5IGFuIGludGVnZXIgaW5kaWNhdGluZyBhIGJsb2NrIHNlcXVlbmNlIG51bWJlci4KKyMuICAKKyMuCSViCTxibGs+CQkJYmxvY2sgbnVtYmVyCisjLgklQgkiaW5kaXJlY3QgYmxvY2siIHwgImJsb2NrICMiPGJsa2NvdW50PglzdHJpbmcgfCBzdHJpbmcraW50ZWdlcgorIy4JJWMJPGJsazI+CQkJYmxvY2sgbnVtYmVyCisjLgklRGkJPGRpcmVudD4gLT4gaW5vCQlpbm9kZSBudW1iZXIKKyMuCSVEbgk8ZGlyZW50PiAtPiBuYW1lCXN0cmluZworIy4JJURyCTxkaXJlbnQ+IC0+IHJlY19sZW4KKyMuCSVEbAk8ZGlyZW50PiAtPiBuYW1lX2xlbgorIy4JJUR0CTxkaXJlbnQ+IC0+IGZpbGV0eXBlCisjLgklZAk8ZGlyPiAJCQlpbm9kZSBudW1iZXIKKyMuCSVnCTxncm91cD4JCQlpbnRlZ2VyCisjLgklaQk8aW5vPgkJCWlub2RlIG51bWJlcgorIy4JJUlzCTxpbm9kZT4gLT4gaV9zaXplCisjLgklSVMJPGlub2RlPiAtPiBpX2V4dHJhX2lzaXplCisjLgklSWIJPGlub2RlPiAtPiBpX2Jsb2NrcworIy4JJUlsCTxpbm9kZT4gLT4gaV9saW5rc19jb3VudAorIy4JJUltCTxpbm9kZT4gLT4gaV9tb2RlCisjLgklSU0JPGlub2RlPiAtPiBpX210aW1lCisjLgklSUYJPGlub2RlPiAtPiBpX2ZhZGRyCisjLgklSWYJPGlub2RlPiAtPiBpX2ZpbGVfYWNsCisjLgklSWQJPGlub2RlPiAtPiBpX2Rpcl9hY2wKKyMuCSVJdQk8aW5vZGU+IC0+IGlfdWlkCisjLgklSWcJPGlub2RlPiAtPiBpX2dpZAorIy4JJUl0CTxzdHI+CQkJZmlsZSB0eXBlCisjLgklagk8aW5vMj4JCQlpbm9kZSBudW1iZXIKKyMuCSVtCTxjb21fZXJyIGVycm9yIG1lc3NhZ2U+CisjLgklTgk8bnVtPgorIy4JJXAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+CisjLgklUAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiA8ZGlyZW50Pi0+aW5vIHdpdGggPGlubzI+IGFzCisjLgkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuICAoSWYgZGlyZW50IGlzIE5VTEwKKyMuCQkJCXRoZW4gcmV0dXJuIHRoZSBwYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubzI+KQorIy4JJXEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxkaXI+CisjLgklUQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4gd2l0aCA8ZGlyPiBhcworIy4JCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LgorIy4JJXMJPHN0cj4JCQltaXNjZWxsYW5lb3VzIHN0cmluZworIy4JJVMJCWJhY2t1cCBzdXBlcmJsb2NrCisjLgklWAk8bnVtPgloZXhhZGVjaW1hbCBmb3JtYXQKKyMuCisjLCBmdXp6eQorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZTJmc3Byb2dzIDEuNDIuMTNcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogdHl0c29AYWx1bS5taXQuZWR1XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDUtMTcgMjE6MjYtMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IFlFQVItTU8tREEgSE86TUkrWk9ORVxuIgorIkxhc3QtVHJhbnNsYXRvcjogRlVMTCBOQU1FIDxFTUFJTEBBRERSRVNTPlxuIgorIkxhbmd1YWdlLVRlYW06IExBTkdVQUdFIDxMTEBsaS5vcmc+XG4iCisiTGFuZ3VhZ2U6IFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUNIQVJTRVRcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz1JTlRFR0VSOyBwbHVyYWw9RVhQUkVTU0lPTjtcbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjIzIG1pc2MvbWtlMmZzLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9jayAldSBvdXQgb2YgcmFuZ2U7IGlnbm9yZWQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjQ2Cittc2dpZCAid2hpbGUgc2FuaXR5IGNoZWNraW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo1OAorbXNnaWQgIndoaWxlIHJlYWRpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjcyIGUyZnNjay9zY2FudGVzdC5jOjEwNyBlMmZzY2svdW5peC5jOjEzNDUKKyM6IGUyZnNjay91bml4LmM6MTQzNCBtaXNjL2JhZGJsb2Nrcy5jOjEyNDIgbWlzYy9iYWRibG9ja3MuYzoxMjUwCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyNjQgbWlzYy9iYWRibG9ja3MuYzoxMjc2IG1pc2MvZHVtcGUyZnMuYzo2MDQKKyM6IG1pc2MvZTJpbWFnZS5jOjEzOTYgbWlzYy9lMmltYWdlLmM6MTU4MCBtaXNjL2UyaW1hZ2UuYzoxNTk5CisjOiBtaXNjL21rZTJmcy5jOjIyNyBtaXNjL3R1bmUyZnMuYzoxOTU1IG1pc2MvdHVuZTJmcy5jOjIwNDQgcmVzaXplL21haW4uYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyBwb3BlbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo5NCBtaXNjL21rZTJmcy5jOjIzNAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW4gbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTA1Cittc2dpZCAid2hpbGUgdXBkYXRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogaWxsZWdhbCBibG9jayAldSBmb3VuZCBpbiBiYWQgYmxvY2sgaW5vZGUuICBDbGVhcmVkLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MSBlMmZzY2svZWhhbmRsZXIuYzoxMTAKK21zZ2lkICJJZ25vcmUgZXJyb3IiCittc2dzdHIgIiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjIKK21zZ2lkICJGb3JjZSByZXdyaXRlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjYyCittc2dpZCAiZW1wdHkgZGlyIG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFbXB0eSBkaXJlY3RvcnkgYmxvY2sgJXUgKCMlZCkgaW4gaW5vZGUgJXVcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGZpbGVuYW1lIG5ibG9ja3MgYmxvY2tzaXplXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIG9mIGJsb2NrcyFcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIChzaXplPSVkKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9mbHVzaGIuYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgZGlza1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9mbHVzaGIuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJCTEtGTFNCVUYgaW9jdGwgbm90IHN1cHBvcnRlZCEgIENhbid0IGZsdXNoIGJ1ZmZlcnMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL2lzY2FuLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjgxIGUyZnNjay91bml4LmM6OTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIG9wZW5pbmcgJXMgZm9yIGZsdXNoaW5nIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjg2IGUyZnNjay91bml4LmM6OTc4IHJlc2l6ZS9tYWluLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBmbHVzaCAlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTkgZTJmc2NrL3NjYW50ZXN0LmM6MTE0IG1pc2MvZTJpbWFnZS5jOjEyOTAKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL2lzY2FuLmM6MTI3IG1pc2MvZTJpbWFnZS5jOjEzMDkKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL2lzY2FuLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBzY2FubmVkLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTI0Cittc2dpZCAicmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGpvdXJuYWwgdG9vIHNob3J0XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHJlY292ZXJpbmcgam91cm5hbFxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3b24ndCBkbyBqb3VybmFsIHJlY292ZXJ5IHdoaWxlIHJlYWQtb25seVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9qb3VybmFsLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTEzCittc2dpZCAiYWV4dGVuZGVkIGF0dHJpYnV0ZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNAorbXNnaWQgIkFlcnJvciBhbGxvY2F0aW5nIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE2Cittc2dpZCAiQmJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNworbXNnaWQgImNjb21wcmVzcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE5Cittc2dpZCAiZGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMAorbXNnaWQgIkRkZWxldGVkIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIxCittc2dpZCAiZWVudHJ5IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIyCittc2dpZCAiRUBlICclRG4nIGluICVwICglaSkiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjMKK21zZ2lkICJmZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNAorbXNnaWQgIkZmb3IgQGkgJWkgKCVRKSBpcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNQorbXNnaWQgImdncm91cCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNgorbXNnaWQgImhIVFJFRSBAZCBAaSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNworbXNnaWQgImlpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOAorbXNnaWQgIklpbGxlZ2FsIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI5Cittc2dpZCAiampvdXJuYWwiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMQorbXNnaWQgIkxpcyBhIGxpbmsiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzIKK21zZ2lkICJtbXVsdGlwbHktY2xhaW1lZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMworbXNnaWQgIm5pbnZhbGlkIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM0Cittc2dpZCAib29ycGhhbmVkIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM1Cittc2dpZCAicHByb2JsZW0gaW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOAorbXNnaWQgInNzaG91bGQgYmUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzkKK21zZ2lkICJTc3VwZXJAYiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MAorbXNnaWQgInV1bmF0dGFjaGVkIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQxCittc2dpZCAidmRldmljZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MgorbXNnaWQgInhleHRlbnQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDMKK21zZ2lkICJ6emVyby1sZW5ndGgiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTQKK21zZ2lkICI8VGhlIE5VTEwgaW5vZGU+IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU1Cittc2dpZCAiPFRoZSBiYWQgYmxvY2tzIGlub2RlPiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NworbXNnaWQgIjxUaGUgdXNlciBxdW90YSBpbm9kZT4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTgKK21zZ2lkICI8VGhlIGdyb3VwIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OQorbXNnaWQgIjxUaGUgYm9vdCBsb2FkZXIgaW5vZGU+IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYxCittc2dpZCAiPFRoZSBncm91cCBkZXNjcmlwdG9yIGlub2RlPiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MgorbXNnaWQgIjxUaGUgam91cm5hbCBpbm9kZT4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjMKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgOT4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjQKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgMTA+IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM0Cittc2dpZCAicmVndWxhciBmaWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM2Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM4Cittc2dpZCAiY2hhcmFjdGVyIGRldmljZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MAorbXNnaWQgImJsb2NrIGRldmljZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MgorbXNnaWQgIm5hbWVkIHBpcGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDQKK21zZ2lkICJzeW1ib2xpYyBsaW5rIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ2IG1pc2MvdXVpZGQuYzoxNjIKK21zZ2lkICJzb2NrZXQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWxlIHR5cGUgd2l0aCBtb2RlIDAlbyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyMworbXNnaWQgImluZGlyZWN0IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI1Cittc2dpZCAiZG91YmxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI3Cittc2dpZCAidHJpcGxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI5Cittc2dpZCAidHJhbnNsYXRvciBibG9jayIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQzMQorbXNnaWQgImJsb2NrICMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjIyMgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgaW5vZGUgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo2MjUgZTJmc2NrL3Bhc3MxYi5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBkdXBfYmxrIGZvciAlbGx1XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjg1MgorbXNnaWQgInJldHVybmVkIGZyb20gY2xvbmVfZmlsZV9ibG9jayIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgYmxvY2sgcmVjb3JkIGZvciAlbGx1IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBpbm9kZSByZWNvcmQgZm9yICV1IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjQ3NSBlMmZzY2svcGFzczIuYzo3ODIKK21zZ2lkICJyZWFkaW5nIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzo2MzQKK21zZ2lkICJpbi11c2UgaW5vZGUgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY0NQorbXNnaWQgImRpcmVjdG9yeSBpbm9kZSBtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjU1Cittc2dpZCAicmVndWxhciBmaWxlIGlub2RlIG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzo2NjQgbWlzYy9lMmltYWdlLmM6MTI2NQorbXNnaWQgImluLXVzZSBibG9jayBtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzMwCittc2dpZCAib3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjc2NAorbXNnaWQgImdldHRpbmcgbmV4dCBpbm9kZSBmcm9tIHNjYW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI3OQorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzM2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgaW5kaXJlY3QgYmxvY2tzIG9mIGlub2RlICV1IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzODYKK21zZ2lkICJiYWQgaW5vZGUgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MDkKK21zZ2lkICJpbm9kZSBpbiBiYWQgYmxvY2sgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MjkKK21zZ2lkICJpbWFnaWMgaW5vZGUgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0NTYKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGJsb2NrIG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoxNTY3Cittc2dpZCAiZXh0IGF0dHIgYmxvY2sgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTZsdSglYyk6IGV4cGVjdGluZyAlNmx1IGdvdCBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI4OTgKK21zZ2lkICJibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjkwNAorbXNnaWQgImlub2RlIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoyOTEwCittc2dpZCAiaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MyLmM6MjgzCittc2dpZCAiUGFzcyAyIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMi5jOjgwNgorbXNnaWQgIkNhbiBub3QgY29udGludWUuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMy5jOjc3Cittc2dpZCAiaW5vZGUgZG9uZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MzLmM6ODYKK21zZ2lkICJQZWFrIG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczMuYzoxNDgKK21zZ2lkICJQYXNzIDMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MzLmM6MzQwCittc2dpZCAiaW5vZGUgbG9vcCBkZXRlY3Rpb24gYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzNC5jOjE5NgorbXNnaWQgIlBhc3MgNCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczUuYzo3NAorbXNnaWQgIlBhc3MgNSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxCittc2dpZCAiKG5vIHByb21wdCkiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MgorbXNnaWQgIkZpeCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzCittc2dpZCAiQ2xlYXIiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NAorbXNnaWQgIlJlbG9jYXRlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUKK21zZ2lkICJBbGxvY2F0ZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2Cittc2dpZCAiRXhwYW5kIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTcKK21zZ2lkICJDb25uZWN0IHRvIC9sb3N0K2ZvdW5kIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTgKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OQorbXNnaWQgIlNhbHZhZ2UiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MAorbXNnaWQgIlRydW5jYXRlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEKK21zZ2lkICJDbGVhciBpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyCittc2dpZCAiQWJvcnQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MworbXNnaWQgIlNwbGl0IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1Cittc2dpZCAiQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NgorbXNnaWQgIkRlbGV0ZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4Cittc2dpZCAiVW5saW5rIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkKK21zZ2lkICJDbGVhciBIVHJlZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwCittc2dpZCAiUmVjcmVhdGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OQorbXNnaWQgIihOT05FKSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwCittc2dpZCAiRklYRUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MQorbXNnaWQgIkNMRUFSRUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MgorbXNnaWQgIlJFTE9DQVRFRCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzCittc2dpZCAiQUxMT0NBVEVEIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQKK21zZ2lkICJFWFBBTkRFRCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NgorbXNnaWQgIkNSRUFURUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NworbXNnaWQgIlNBTFZBR0VEIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgKK21zZ2lkICJUUlVOQ0FURUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OQorbXNnaWQgIklOT0RFIENMRUFSRUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MAorbXNnaWQgIkFCT1JURUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MQorbXNnaWQgIlNQTElUIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTIKK21zZ2lkICJDT05USU5VSU5HIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMKK21zZ2lkICJNVUxUSVBMWS1DTEFJTUVEIEJMT0NLUyBDTE9ORUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NAorbXNnaWQgIkZJTEUgREVMRVRFRCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1Cittc2dpZCAiU1VQUFJFU1NFRCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2Cittc2dpZCAiVU5MSU5LRUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NworbXNnaWQgIkhUUkVFIElOREVYIENMRUFSRUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OAorbXNnaWQgIldJTEwgUkVDUkVBVEUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDcKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCittc2dpZCAiQGIgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMQorIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KK21zZ2lkICJAaSBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2CisjLiBALWV4cGFuZGVkOiBpbm9kZSB0YWJsZSBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuCittc2dpZCAiIgorIkBpIHRhYmxlIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCisiV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMgorIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBzdXBlcmJsb2NrIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgdmFsaWQgZXh0Mi9leHQzL2V4dDRcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbS4gIElmIHRoZSBkZXZpY2UgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyL2V4dDMvZXh0NFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgc3VwZXJibG9ja1xuCisjLiBALWV4cGFuZGVkOiBpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBzdXBlcmJsb2NrOlxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iIDgxOTMgPGRldmljZT5cbgorIy4gQC1leHBhbmRlZDogIG9yXG4KKyMuIEAtZXhwYW5kZWQ6ICAgICBlMmZzY2sgLWIgMzI3NjggPGRldmljZT5cbgorIy4gQC1leHBhbmRlZDogXG4KK21zZ2lkICIiCisiXG4iCisiVGhlIEBTIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgdmFsaWQgZXh0Mi9leHQzL2V4dDRcbiIKKyJAZi4gIElmIHRoZSBAdiBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDIvZXh0My9leHQ0XG4iCisiQGYgKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBAU1xuIgorImlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIEBTOlxuIgorIiAgICBlMmZzY2sgLWIgODE5MyA8QHY+XG4iCisiIG9yXG4iCisiICAgIGUyZnNjayAtYiAzMjc2OCA8QHY+XG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMKKyMuIEAtZXhwYW5kZWQ6IFRoZSBmaWxlc3lzdGVtIHNpemUgKGFjY29yZGluZyB0byB0aGUgc3VwZXJibG9jaykgaXMgJWIgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBkZXZpY2UgaXMgJWMgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IEVpdGhlciB0aGUgc3VwZXJibG9jayBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2NrX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbgorIy4gQC1leHBhbmRlZDogVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuCisjLiBALWV4cGFuZGVkOiBmcm9tIHRoZSBibG9jayBzaXplLlxuCittc2dpZCAiIgorIkBTIEBiX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbiIKKyJUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4iCisiZnJvbSB0aGUgQGIgc2l6ZS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja3NfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorbXNnaWQgIkBTIEBic19wZXJfZ3JvdXAgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUyCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGZpcnN0X2RhdGFfYmxvY2sgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCittc2dpZCAiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCittc2dpZCAiIgorIkBmIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydFxuIgorIm9mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnlcbiIKKyJydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgJVMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtXG4iCisibWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZFxuIgorInRoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcxCisjLiBALWV4cGFuZGVkOiBDb3JydXB0aW9uIGZvdW5kIGluIHN1cGVyYmxvY2suICAoJXMgPSAlTikuXG4KK21zZ2lkICJDb3JydXB0aW9uIGZvdW5kIGluIEBTLiAgKCVzID0gJU4pLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc2CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlOiAlbVxuCittc2dpZCAiRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgQHY6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODEKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGNvdW50IGluIHN1cGVyYmxvY2sgaXMgJWksIHNob3VsZCBiZSAlai5cbgorbXNnaWQgIkBpIGNvdW50IGluIEBTIGlzICVpLCBAcyAlai5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4NQorbXNnaWQgIlRoZSBIdXJkIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZlYXR1cmUuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxOTAKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBhbiBpbnZhbGlkIGpvdXJuYWwgKGlub2RlICVpKS5cbgorbXNnaWQgIkBTIGhhcyBhbiBAbiBAaiAoQGkgJWkpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk1CisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBtdWx0aXBsZSBmaWxlc3lzdGVtIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4KK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgbXVsdGlwbGUgQGYgdXNlcnMgKHVuc3VwcG9ydGVkKS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwMAorIy4gQC1leHBhbmRlZDogQ2FuJ3QgZmluZCBleHRlcm5hbCBqb3VybmFsXG4KK21zZ2lkICJDYW4ndCBmaW5kIGV4dGVybmFsIEBqXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyMDUKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIGJhZCBzdXBlcmJsb2NrXG4KK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgYmFkIEBTXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyMTAKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZpbGVzeXN0ZW1cbgorbXNnaWQgIkV4dGVybmFsIEBqIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBAZlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjE1CisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGpvdXJuYWwgc3VwZXJibG9jayBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGpvdXJuYWwgCisjLiBALWV4cGFuZGVkOiBmb3JtYXQuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGFsc28gcG9zc2libGUgdGhlIGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiAiCisiZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyMjMKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCittc2dpZCAiQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyOAorIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXNfam91cm5hbCBmbGFnIGlzIGNsZWFyLCBidXQgYSBqb3VybmFsIGlzIHByZXNlbnQuXG4KK21zZ2lkICJAUyBoYXNfQGogZmxhZyBpcyBjbGVhciwgYnV0IGEgQGogaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzMworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIGpvdXJuYWwgaXMgcHJlc2VudC5cbgorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gQGogaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzOAorIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgam91cm5hbCBoYXMgZGF0YS5cbgorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBAaiBoYXMgZGF0YS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0MworIy4gQC1leHBhbmRlZDogQ2xlYXIgam91cm5hbAorbXNnaWQgIkNsZWFyIEBqIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQ4IGUyZnNjay9wcm9ibGVtLmM6NzA3CisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIGZpbGVzeXN0ZW0uICAKK21zZ2lkICJAZiBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBAZi4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1MworIy4gQC1leHBhbmRlZDogJXMgb3JwaGFuZWQgaW5vZGUgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbgorbXNnaWQgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyNTgKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorbXNnaWQgIkBJICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyNjMKKyMuIEAtZXhwYW5kZWQ6IEFscmVhZHkgY2xlYXJlZCAlQiAoJWIpIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICVpLlxuCittc2dpZCAiQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyNjgKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIG9ycGhhbmVkIGlub2RlICVpIGluIHN1cGVyYmxvY2suXG4KK21zZ2lkICJASSBAbyBAaSAlaSBpbiBAUy5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3MworIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgaW5vZGUgJWkgaW4gb3JwaGFuZWQgaW5vZGUgbGlzdC5cbgorbXNnaWQgIkBJIEBpICVpIGluIEBvIEBpIGxpc3QuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyNzgKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbgorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjgzCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4KK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4OAorIy4gQC1leHBhbmRlZDogam91cm5hbCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4KK21zZ2lkICJAaiB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyOTMKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBNb3Zpbmcgam91cm5hbCBmcm9tIC8lcyB0byBoaWRkZW4gaW5vZGUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCittc2dpZCAiIgorIk1vdmluZyBAaiBmcm9tIC8lcyB0byBoaWRkZW4gQGkuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyOTgKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBFcnJvciBtb3Zpbmcgam91cm5hbDogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KK21zZ2lkICIiCisiRXJyb3IgbW92aW5nIEBqOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzAzCisjLiBALWV4cGFuZGVkOiBGb3VuZCBpbnZhbGlkIFYyIGpvdXJuYWwgc3VwZXJibG9jayBmaWVsZHMgKGZyb20gVjEgam91cm5hbCkuXG4KKyMuIEAtZXhwYW5kZWQ6IENsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIGpvdXJuYWwgc3VwZXJibG9jay4uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorbXNnaWQgIiIKKyJGb3VuZCBAbiBWMiBAaiBAUyBmaWVsZHMgKGZyb20gVjEgQGopLlxuIgorIkNsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIEBqIEBTLi4uXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozMDkKKyMuIEAtZXhwYW5kZWQ6IFJ1biBqb3VybmFsIGFueXdheQorbXNnaWQgIlJ1biBAaiBhbnl3YXkiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozMTQKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorbXNnaWQgIlJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgQFMsIHNvIHJ1bm5pbmcgQGogYW55d2F5LlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzE5CisjLiBALWV4cGFuZGVkOiBCYWNraW5nIHVwIGpvdXJuYWwgaW5vZGUgYmxvY2sgaW5mb3JtYXRpb24uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCittc2dpZCAiIgorIkJhY2tpbmcgdXAgQGogQGkgQGIgaW5mb3JtYXRpb24uXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozMjQKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSByZXNpemVfaW5vZGUgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpcyAlTjsgc2hvdWxkIGJlIHplcm8uICAKK21zZ2lkICIiCisiQGYgZG9lcyBub3QgaGF2ZSByZXNpemVfQGkgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X0Bic1xuIgorImlzICVOOyBAcyB6ZXJvLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzMwCisjLiBALWV4cGFuZGVkOiBSZXNpemVfaW5vZGUgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIGlub2RlIGlzIG5vbi16ZXJvLiAgCittc2dpZCAiUmVzaXplX0BpIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBAaSBpcyBub24temVyby4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzNQorIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIG5vdCB2YWxpZC4gIAorbXNnaWQgIlJlc2l6ZSBAaSBub3QgdmFsaWQuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozNDAKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozNDUKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozNDkKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgc2hvdWxkIGJlICVYLiAgCittc2dpZCAiQFMgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBAcyAlWC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1NAorIy4gQC1leHBhbmRlZDogQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLlxuCisjLiBALWV4cGFuZGVkOiBcbgorbXNnaWQgIiIKKyJBZGRpbmcgZGlyaGFzaCBoaW50IHRvIEBmLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzU5CisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgCittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2NAorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbgorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2OQorIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgCittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzc0CisjLiBALWV4cGFuZGVkOiBMYXN0IGdyb3VwIGJsb2NrIGJpdG1hcCB1bmluaXRpYWxpemVkLiAgCittc2dpZCAiTGFzdCBAZyBAYiBAQiB1bmluaXRpYWxpemVkLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdHJhbnNhY3Rpb24gJWkgd2FzIGNvcnJ1cHQsIHJlcGxheSB3YXMgYWJvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4MworbXNnaWQgIlRoZSB0ZXN0X2ZzIGZsYWcgaXMgc2V0IChhbmQgZXh0NCBpcyBhdmFpbGFibGUpLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzg4CisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpXG4KK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5ICIKKyJzZXQpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozOTQKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldClcbgorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldClcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwMAorIy4gQC1leHBhbmRlZDogT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAKK21zZ2lkICJPbmUgb3IgbW9yZSBAYiBAZyBkZXNjcmlwdG9yIGNoZWNrc3VtcyBhcmUgaW52YWxpZC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwNQorIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCittc2dpZCAiU2V0dGluZyBmcmVlIEBpcyBjb3VudCB0byAlaiAod2FzICVpKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDEwCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgYmxvY2tzIGNvdW50IHRvICVjICh3YXMgJWIpXG4KK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MTUKKyMuIEAtZXhwYW5kZWQ6IE1ha2luZyBxdW90YSBpbm9kZSAlaSAoJVEpIGhpZGRlbi5cbgorbXNnaWQgIk1ha2luZyBAcSBAaSAlaSAoJVEpIGhpZGRlbi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyMAorIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MjUKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgCittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19vcGVuMjogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfY2hlY2tfZGVzYzogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0MAorIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayA2NGJpdCBmaWxlc3lzdGVtcyBuZWVkcyBleHRlbnRzIHRvIGFjY2VzcyB0aGUgd2hvbGUgZGlzay4gIAorbXNnaWQgIkBTIDY0Yml0IGZpbGVzeXN0ZW1zIG5lZWRzIGV4dGVudHMgdG8gYWNjZXNzIHRoZSB3aG9sZSBkaXNrLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQ1Cittc2dpZCAiRmlyc3RfbWV0YV9iZyBpcyB0b28gYmlnLiAgKCVOLCBtYXggdmFsdWUgJWcpLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDUyCisjLiBALWV4cGFuZGVkOiBQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXNcbgorbXNnaWQgIlBhc3MgMTogQ2hlY2tpbmcgQGlzLCBAYnMsIGFuZCBzaXplc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDU2CisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeS4gIAorbXNnaWQgIkByIGlzIG5vdCBhIEBkLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDYxCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gIAorbXNnaWQgIkByIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2NgorIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCittc2dpZCAiUmVzZXJ2ZWQgQGkgJWkgKCVRKSBoYXMgQG4gbW9kZS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3MQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGRlbGV0ZWQgaW5vZGUgJWkgaGFzIHplcm8gZHRpbWUuICAKK21zZ2lkICJARCBAaSAlaSBoYXMgemVybyBkdGltZS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3NgorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAKK21zZ2lkICJAaSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDgxCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSB6ZXJvLWxlbmd0aCBkaXJlY3RvcnkuICAKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDg2CisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCittc2dpZCAiQGcgJWcncyBAYiBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5MQorIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0OTYKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgdGFibGUgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorbXNnaWQgIkBnICVnJ3MgQGkgdGFibGUgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MDEKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwICglYikgaXMgYmFkLiAgCittc2dpZCAiQGcgJWcncyBAYiBAQiAoJWIpIGlzIGJhZC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwNgorIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgKCViKSBpcyBiYWQuICAKK21zZ2lkICJAZyAlZydzIEBpIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTExCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9zaXplIGlzICVJcywgc2hvdWxkIGJlICVOLiAgCittc2dpZCAiQGkgJWksIGlfc2l6ZSBpcyAlSXMsIEBzICVOLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE2CisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9ibG9ja3MgaXMgJUliLCBzaG91bGQgYmUgJU4uICAKK21zZ2lkICJAaSAlaSwgaV9AYnMgaXMgJUliLCBAcyAlTi4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyMQorIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGlub2RlICVpLiAgCittc2dpZCAiQEkgJUIgKCViKSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyNgorIy4gQC1leHBhbmRlZDogJUIgKCViKSBvdmVybGFwcyBmaWxlc3lzdGVtIG1ldGFkYXRhIGluIGlub2RlICVpLiAgCittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzMQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCittc2dpZCAiQGkgJWkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MzYKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBUb28gbWFueSBpbGxlZ2FsIGJsb2NrcyBpbiBpbm9kZSAlaS5cbgorbXNnaWQgIlRvbyBtYW55IGlsbGVnYWwgQGJzIGluIEBpICVpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQxCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gYmFkIGJsb2NrIGlub2RlLiAgCittc2dpZCAiQEkgJUIgKCViKSBpbiBiYWQgQGIgQGkuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NDYKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorbXNnaWQgIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1MQorIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIG9yIGJhZCBibG9jayBpbiB1c2UhXG4KK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1NgorIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrICViIHVzZWQgYXMgYmFkIGJsb2NrIGlub2RlIGluZGlyZWN0IGJsb2NrLiAgCittc2dpZCAiQmFkIEBiICViIHVzZWQgYXMgYmFkIEBiIEBpIGluZGlyZWN0IEBiLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYxCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbgorIy4gQC1leHBhbmRlZDogc2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaW4gdGhlIGZpbGVzeXN0ZW0uXG4KK21zZ2lkICIiCisiXG4iCisiVGhlIGJhZCBAYiBAaSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbiIKKyJzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuIgorImluIHRoZSBAZi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2OAorIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IElmIHRoZSBibG9jayBpcyByZWFsbHkgYmFkLCB0aGUgZmlsZXN5c3RlbSBjYW4gbm90IGJlIGZpeGVkLlxuCittc2dpZCAiIgorIlxuIgorIklmIHRoZSBAYiBpcyByZWFsbHkgYmFkLCB0aGUgQGYgY2FuIG5vdCBiZSBmaXhlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3MworIy4gQC1leHBhbmRlZDogWW91IGNhbiByZW1vdmUgdGhpcyBibG9jayBmcm9tIHRoZSBiYWQgYmxvY2sgbGlzdCBhbmQgaG9wZVxuCisjLiBALWV4cGFuZGVkOiB0aGF0IHRoZSBibG9jayBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCittc2dpZCAiIgorIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKyJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NzkKKyMuIEAtZXhwYW5kZWQ6IFRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgKCViKSBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3QuXG4KK21zZ2lkICJUaGUgcHJpbWFyeSBAUyAoJWIpIGlzIG9uIHRoZSBiYWQgQGIgbGlzdC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4NAorIy4gQC1leHBhbmRlZDogQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgZ3JvdXAgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0XG4KK21zZ2lkICJCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBAZyBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIEBiIGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5MAorIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBzdXBlcmJsb2NrICglYikgaXMgYmFkLlxuCittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBAUyAoJWIpIGlzIGJhZC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5NQorIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBncm91cCBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgYmxvY2sgKCViKS5cbgorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgQGcgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIEBiICglYikuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MDEKKyMuIEAtZXhwYW5kZWQ6IFByb2dyYW1taW5nIGVycm9yPyAgYmxvY2sgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9ibG9jay5cbgorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yPyAgQGIgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9AYi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyAlTiBjb250aWd1b3VzIGJsb2NrKHMpIGluIGJsb2NrIGdyb3VwICVnIGZvciAlczogJW1cbgorbXNnaWQgIkBBICVOIGNvbnRpZ3VvdXMgQGIocykgaW4gQGIgQGcgJWcgZm9yICVzOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEyCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbgorbXNnaWQgIkBBIEBiIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjE3CisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuCittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyMgorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyB0byAlYy4uLlxuCittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIHRvICVjLi4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MjcKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrICViIG9mICVzOiAlbVxuCittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgQGIgJWIgb2YgJXM6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MzIKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBibG9jayAlYiBmb3IgJXM6ICVtXG4KK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjM3IGUyZnNjay9wcm9ibGVtLmM6MTUwMQorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKCVOKTogJW1cbgorbXNnaWQgIkBBIEBpIEBCICglTik6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NDIKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwICglTik6ICVtXG4KK21zZ2lkICJAQSBAYiBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQ3CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbgorbXNnaWQgIkBBIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUyCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBkaXJlY3RvcnkgYmxvY2sgYXJyYXk6ICVtXG4KK21zZ2lkICJAQSBAZCBAYiBhcnJheTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1NworIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuCittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NjIKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWk6ICVtXG4KK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NjcKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBjb3VudD0lTik6ICVtXG4KK21zZ2lkICJFcnJvciBzdG9yaW5nIEBpIGNvdW50IGluZm9ybWF0aW9uIChAaT0laSwgY291bnQ9JU4pOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcyCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGJsb2NrPSViLCBudW09JU4pOiAlbVxuCittc2dpZCAiRXJyb3Igc3RvcmluZyBAZCBAYiBpbmZvcm1hdGlvbiAoQGk9JWksIEBiPSViLCBudW09JU4pOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njc4CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBpbm9kZSAlaTogJW1cbgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2ODYKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgCittc2dpZCAiQGkgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5MQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChpbm9kZSAlaSkgaGFzIGltbXV0YWJsZVxuCisjLiBALWV4cGFuZGVkOiBvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIAorbXNnaWQgIiIKKyJTcGVjaWFsIChAdi9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChAaSAlaSkgaGFzIGltbXV0YWJsZVxuIgorIm9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njk3CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGNvbXByZXNzaW9uIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBjb21wcmVzc2lvbiBzdXBwb3J0LiAgCittc2dpZCAiQGkgJWkgaGFzIEBjaW9uIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgQGNpb24gc3VwcG9ydC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwMgorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmbykgaW5vZGUgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAKK21zZ2lkICJTcGVjaWFsIChAdi9zb2NrZXQvZmlmbykgQGkgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MTIKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKK21zZ2lkICJAaiBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxNworIy4gQC1leHBhbmRlZDogam91cm5hbCBpcyBub3QgcmVndWxhciBmaWxlLiAgCittc2dpZCAiQGogaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyMgorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgCittc2dpZCAiQGkgJWkgd2FzIHBhcnQgb2YgdGhlIEBvIEBpIGxpc3QuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MjgKKyMuIEAtZXhwYW5kZWQ6IGlub2RlcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAKK21zZ2lkICJAaXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMzCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuCittc2dpZCAiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MzgKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGZvciBpbm9kZSAlaS4gIAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgZm9yIEBpICVpLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQzCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBiYWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCittc2dpZCAiQGkgJWkgaGFzIGEgYmFkIEBhIEBiICViLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQ4CisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzUzCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgc2hvdWxkIGJlICVOLiAgCittc2dpZCAiQGEgQGIgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgQHMgJU4uICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3NTgKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKK21zZ2lkICJFcnJvciB3cml0aW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3NjMKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgaF9ibG9ja3MgPiAxLiAgCittc2dpZCAiQGEgQGIgJWIgaGFzIGhfQGJzID4gMS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2OAorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKK21zZ2lkICJAQSBAYSBAYiAlYi4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3MworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gIAorbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3OAorIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgbmFtZSkuICAKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiBuYW1lKS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4MworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgdmFsdWUpLiAgCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gdmFsdWUpLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzg4CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgdG9vIGJpZy4gIAorbXNnaWQgIkBpICVpIGlzIHRvbyBiaWcuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OTIKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgY2F1c2VzIGRpcmVjdG9yeSB0byBiZSB0b28gYmlnLiAgCittc2dpZCAiJUIgKCViKSBjYXVzZXMgQGQgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5NworbXNnaWQgIiVCICglYikgY2F1c2VzIGZpbGUgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwMgorbXNnaWQgIiVCICglYikgY2F1c2VzIHN5bWxpbmsgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwNworIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbgorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MTIKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIGRpcmVjdG9yeS5cbgorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgQGQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MTcKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgcm9vdCBub2RlLlxuCittc2dpZCAiQGggJWkgaGFzIGFuIEBuIHJvb3Qgbm9kZS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyMgorIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiB1bnN1cHBvcnRlZCBoYXNoIHZlcnNpb24gKCVOKVxuCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MjcKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4KK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzMgorIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4KK21zZ2lkICJAaCAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODM3CisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGFuIGluZGlyZWN0IGJsb2NrICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIG1ldGFkYXRhLiAgCittc2dpZCAiIgorIkJhZCBAYiBAaSBoYXMgYW4gaW5kaXJlY3QgQGIgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4iCisiQGYgbWV0YWRhdGEuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NDMKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uCittc2dpZCAiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0OAorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBpbnZhbGlkXG4KK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NTMKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgaW52YWxpZFxuCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NTgKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYzCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgYmxvY2sgKCVOKSB3aGljaCBpcyBpbnZhbGlkIChtdXN0IGJlIDApXG4KK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBAYiAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NjgKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgaW52YWxpZFxuCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NzMKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgaW52YWxpZFxuCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NzgKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbgorbXNnaWQgIkBpICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4MworIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBleHRlbnQgdHJlZSBpbiBpbm9kZSAlaTogJW1cbgorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBAeCB0cmVlIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODg4CisjLiBALWV4cGFuZGVkOiBGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIGlub2RlICVpXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuCittc2dpZCAiIgorIkZhaWxlZCB0byBpdGVyYXRlIGV4dGVudHMgaW4gQGkgJWlcbiIKKyJcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5NAorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIGludmFsaWQgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgQG4gcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5OQorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBpbnZhbGlkIGxlbiAlTilcbgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIEBuIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwNAorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4KK21zZ2lkICJAaSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwOQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBzdXBlcmJsb2NrIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4KK21zZ2lkICJAaSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgQFMgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxNAorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbgorbXNnaWQgIkBpICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0IHN5bWxpbmsgJWkgaGFzIEVYVEVOVF9GTCBzZXQuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MjQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KK21zZ2lkICIiCisiQGkgJWkgaGFzIG91dCBvZiBvcmRlciBleHRlbnRzXG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyOAorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbgorbXNnaWQgIkBpICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MzMKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYmxvY2sgYml0bWFwOiAlbVxuCittc2dpZCAiRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIEBiIEBCOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTM4CisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgcmVndWxhciBmaWxlLiAgCittc2dpZCAiQHEgQGkgaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0MworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKK21zZ2lkICJAcSBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0OAorIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gIAorbXNnaWQgIkBxIEBpIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NTMKKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgbG9va3MgaW52YWxpZC4gIAorbXNnaWQgIlRoZSBiYWQgQGIgQGkgbG9va3MgQG4uICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NTgKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYilcbgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NjUKKyMuIEAtZXhwYW5kZWQ6IEludGVyaW9yIGV4dGVudCBub2RlIGxldmVsICVOIG9mIGlub2RlICVpOlxuCisjLiBALWV4cGFuZGVkOiBMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gIAorbXNnaWQgIiIKKyJJbnRlcmlvciBAeCBub2RlIGxldmVsICVOIG9mIEBpICVpOlxuIgorIkxvZ2ljYWwgc3RhcnQgJWIgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAlYyBhdCBuZXh0IGxldmVsLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTcxCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorbXNnaWQgIiIKKyJAaSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTc3CisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgYmxvY2sgJWIgc2hvdWxkIGJlIGF0IGJsb2NrICVjLiAgCittc2dpZCAiQGQgQGkgJWkgQGIgJWIgc2hvdWxkIGJlIGF0IEBiICVjLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgyCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBleHRlbnQgbWFya2VkIHVuaW5pdGlhbGl6ZWQgYXQgYmxvY2sgJWMuICAKK21zZ2lkICJAZCBAaSAlaSBoYXMgQHggbWFya2VkIHVuaW5pdGlhbGl6ZWQgYXQgQGIgJWMuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5ODcKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGxvZ2ljYWwgYmxvY2sgJWIgKHBoeXNpY2FsIGJsb2NrICVjKSB2aW9sYXRlcyBjbHVzdGVyIGFsbG9jYXRpb24gcnVsZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFdpbGwgZml4IGluIHBhc3MgMUIuXG4KK21zZ2lkICIiCisiQGkgJWkgbG9naWNhbCBAYiAlYiAocGh5c2ljYWwgQGIgJWMpIHZpb2xhdGVzIGNsdXN0ZXIgYWxsb2NhdGlvbiBydWxlcy5cbiIKKyJXaWxsIGZpeCBpbiBwYXNzIDFCLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTk0CisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIGJsb2NrcyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgaW5vZGUuLi5cbgorIy4gQC1leHBhbmRlZDogUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgQGJzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBAaS4uLlxuIgorIlBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIEBtIEBic1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMAorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgJWk6Cittc2dpZCAiQG0gQGIocykgaW4gQGkgJWk6IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjAKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoaW5vZGVfZHVwX21hcCk6ICVtXG4KK21zZ2lkICJAQSBAaSBAQiAoQGlfZHVwX21hcCk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDI1CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpICglcyk6ICVtXG4KK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzAgZTJmc2NrL3Byb2JsZW0uYzoxMzQ1CisjLiBALWV4cGFuZGVkOiBFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCittc2dpZCAiRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBAYSBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzNQorIy4gQC1leHBhbmRlZDogUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KK21zZ2lkICJQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgQGlzIHdpdGggQG0gQGJzXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDQxCisjLiBALWV4cGFuZGVkOiBQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCittc2dpZCAiUGFzcyAxRDogUmVjb25jaWxpbmcgQG0gQGJzXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDQ2CisjLiBALWV4cGFuZGVkOiBGaWxlICVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSkgXG4KKyMuIEAtZXhwYW5kZWQ6ICAgaGFzICVyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4KK21zZ2lkICIiCisiRmlsZSAlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pIFxuIgorIiAgaGFzICVyIEBtIEBiKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1MgorIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KK21zZ2lkICJcdCVRIChAaSAjJWksIG1vZCB0aW1lICVJTSlcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTcKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KK21zZ2lkICJcdDxAZiBtZXRhZGF0YT5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjIKKyMuIEAtZXhwYW5kZWQ6IChUaGVyZSBhcmUgJU4gaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKVxuCisjLiBALWV4cGFuZGVkOiBcbgorbXNnaWQgIiIKKyIoVGhlcmUgYXJlICVOIEBpcyBjb250YWluaW5nIEBtIEBicy4pXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY3CisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuCisjLiBALWV4cGFuZGVkOiBcbgorbXNnaWQgIiIKKyJAbSBAYnMgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY2xvbmUgZmlsZTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwODYKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZVxuCittc2dpZCAiUGFzcyAyOiBDaGVja2luZyBAZCBzdHJ1Y3R1cmVcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTEKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIGlub2RlIG51bWJlciBmb3IgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorbXNnaWQgIkBuIEBpIG51bWJlciBmb3IgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5NgorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaW52YWxpZCBpbm9kZSAjOiAlRGkuXG4KK21zZ2lkICJARSBoYXMgQG4gQGkgIzogJURpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwMQorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgJURpLiAgCittc2dpZCAiQEUgaGFzIEBEL3VudXNlZCBAaSAlRGkuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA2CisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorbXNnaWQgIkBFIEBMIHRvICcuJyAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExMQorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBwb2ludHMgdG8gaW5vZGUgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay5cbgorbXNnaWQgIkBFIHBvaW50cyB0byBAaSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIEBiLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExNgorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gZGlyZWN0b3J5ICVQICglRGkpLlxuCittc2dpZCAiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTIxCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byB0aGUgcm9vdCBpbm9kZS5cbgorbXNnaWQgIkBFIEBMIHRvIHRoZSBAci5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjYKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbgorbXNnaWQgIkBFIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTMxCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCittc2dpZCAiTWlzc2luZyAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTM2CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorbXNnaWQgIk1pc3NpbmcgJy4uJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDEKKyMuIEAtZXhwYW5kZWQ6IEZpcnN0IGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApIHNob3VsZCBiZSAnLidcbgorbXNnaWQgIkZpcnN0IEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpICglcCkgQHMgJy4nXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQ2CisjLiBALWV4cGFuZGVkOiBTZWNvbmQgZW50cnkgJyVEbicgKGlub2RlPSVEaSkgaW4gZGlyZWN0b3J5IGlub2RlICVpIHNob3VsZCBiZSAnLi4nXG4KK21zZ2lkICJTZWNvbmQgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgQHMgJy4uJ1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1MQorIy4gQC1leHBhbmRlZDogaV9mYWRkciBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSUYsIHNob3VsZCBiZSB6ZXJvLlxuCittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTU2CisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZiwgc2hvdWxkIGJlIHplcm8uXG4KK21zZ2lkICJpX2ZpbGVfYWNsIEBGICVJZiwgQHMgemVyby5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjEKKyMuIEAtZXhwYW5kZWQ6IGlfZGlyX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWQsIHNob3VsZCBiZSB6ZXJvLlxuCittc2dpZCAiaV9kaXJfYWNsIEBGICVJZCwgQHMgemVyby5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjYKKyMuIEAtZXhwYW5kZWQ6IGlfZnJhZyBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KK21zZ2lkICJpX2ZyYWcgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTcxCisjLiBALWV4cGFuZGVkOiBpX2ZzaXplIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorbXNnaWQgImlfZnNpemUgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTc2CisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGhhcyBpbnZhbGlkIG1vZGUgKCVJbSkuXG4KK21zZ2lkICJAaSAlaSAoJVEpIGhhcyBAbiBtb2RlICglSW0pLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4MQorIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBkaXJlY3RvcnkgY29ycnVwdGVkXG4KK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogQGQgY29ycnVwdGVkXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTg2CisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4KK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTEKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAKK21zZ2lkICJAZCBAaSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTk2CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogJy4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCittc2dpZCAiJy4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDEKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiAnLi4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCittc2dpZCAiJy4uJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMjA2CisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGRldmljZS5cbgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgY2hhcmFjdGVyIEB2LlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIxMQorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGJsb2NrIGRldmljZS5cbgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgQGIgQHYuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE2CisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLicgZW50cnkuXG4KK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4nIEBlLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyMQorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4uJyBlbnRyeS5cbgorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLi4nIEBlLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNiBlMmZzY2svcHJvYmxlbS5jOjE1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzMQorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgcmVjX2xlbiBvZiAlRHIsIHNob3VsZCBiZSAlTi5cbgorbXNnaWQgIkBFIGhhcyByZWNfbGVuIG9mICVEciwgQHMgJU4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMjM2CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlOiAlbVxuCittc2dpZCAiQEEgaWNvdW50IHN0cnVjdHVyZTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDEKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcnkgYmxvY2tzOiAlbVxuCittc2dpZCAiRXJyb3IgaXRlcmF0aW5nIG92ZXIgQGQgQGJzOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0NgorIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTEKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KK21zZ2lkICJFcnJvciB3cml0aW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMjU2CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrIGZvciBpbm9kZSAlaSAoJXMpOiAlbVxuCittc2dpZCAiQEEgbmV3IEBkIEBiIGZvciBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI2MQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRlYWxsb2NhdGluZyBpbm9kZSAlaTogJW1cbgorbXNnaWQgIkVycm9yIGRlYWxsb2NhdGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjYKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorbXNnaWQgIkBkIEBlIGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMjcxCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgRklGTy5cbgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNzYKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBzb2NrZXQuXG4KK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIHNvY2tldC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODEKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICclRG4nIGluICVwICglaSkgdG8gJU4uXG4KK21zZ2lkICJTZXR0aW5nIGZpbGV0eXBlIGZvciBARSB0byAlTi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODYKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgc2hvdWxkIGJlICVOKS5cbgorbXNnaWQgIkBFIGhhcyBhbiBpbmNvcnJlY3QgZmlsZXR5cGUgKHdhcyAlRHQsIEBzICVOKS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTEKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGZpbGV0eXBlIHNldC5cbgorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMjk2CisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIHplcm8tbGVuZ3RoIG5hbWUuXG4KK21zZ2lkICJARSBoYXMgYSBAeiBuYW1lLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMwMQorIy4gQC1leHBhbmRlZDogU3ltbGluayAlUSAoaW5vZGUgIyVpKSBpcyBpbnZhbGlkLlxuCittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDYKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCittc2dpZCAiQGEgQGIgQEYgQG4gKCVJZikuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzExCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGNvbnRhaW5zIGxhcmdlIGZpbGVzLCBidXQgbGFja3MgTEFSR0VfRklMRSBmbGFnIGluIHN1cGVyYmxvY2suXG4KK21zZ2lkICJAZiBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBAUy5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTYKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuCittc2dpZCAiQHAgQGggJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzIxCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuCittc2dpZCAiQHAgQGggJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjYKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4KK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzMQorIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbgorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzM2CisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLiAgCittc2dpZCAiQG4gQGggJWQgKCVxKS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNDAKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSk6IGJhZCBibG9jayBudW1iZXIgJWIuXG4KK21zZ2lkICJAcCBAaCAlZCAoJXEpOiBiYWQgQGIgbnVtYmVyICViLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1MAorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiByb290IG5vZGUgaXMgaW52YWxpZFxuCittc2dpZCAiQHAgQGggJWQ6IHJvb3Qgbm9kZSBpcyBAblxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1NQorIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGxpbWl0ICglTilcbgorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gbGltaXQgKCVOKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2MAorIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGNvdW50ICglTilcbgorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gY291bnQgKCVOKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2NQorIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3MAorIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGRlcHRoICglTilcbgorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3NQorIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGluICVwICglaSkgZm91bmQuICAKK21zZ2lkICJEdXBsaWNhdGUgQEUgZm91bmQuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgwCisjLCBuby1jLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuCisjLiBALWV4cGFuZGVkOiBSZW5hbWUgdG8gJXMKK21zZ2lkICIiCisiQEUgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbiIKKyJSZW5hbWUgdG8gJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzg1CisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgZm91bmQuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5MAorIy4gQC1leHBhbmRlZDogaV9ibG9ja3NfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCittc2dpZCAiaV9ibG9ja3NfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk1CisjLiBALWV4cGFuZGVkOiBVbmV4cGVjdGVkIGJsb2NrIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLlxuCittc2dpZCAiVW5leHBlY3RlZCBAYiBpbiBAaCAlZCAoJXEpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5OQorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBpbiBncm91cCAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbgorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGluIEBnICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwNAorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBmb3VuZCBpbiBncm91cCAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbgorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGZvdW5kIGluIEBnICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwOQorIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbF9oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KK21zZ2lkICJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxNgorIy4gQC1leHBhbmRlZDogUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5XG4KK21zZ2lkICJQYXNzIDM6IENoZWNraW5nIEBkIGNvbm5lY3Rpdml0eVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyMQorIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkLiAgCittc2dpZCAiQHIgbm90IGFsbG9jYXRlZC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjYKKyMuIEAtZXhwYW5kZWQ6IE5vIHJvb20gaW4gbG9zdCtmb3VuZCBkaXJlY3RvcnkuICAKK21zZ2lkICJObyByb29tIGluIEBsIEBkLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzMQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDM2CisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBub3QgZm91bmQuICAKK21zZ2lkICIvQGwgbm90IGZvdW5kLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ0MQorIy4gQC1leHBhbmRlZDogJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIHNob3VsZCBiZSAlcSAoJWQpLlxuCittc2dpZCAiJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIEBzICVxICglZCkuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQ2CisjLiBALWV4cGFuZGVkOiBCYWQgb3Igbm9uLWV4aXN0ZW50IC9sb3N0K2ZvdW5kLiAgQ2Fubm90IHJlY29ubmVjdC5cbgorbXNnaWQgIkJhZCBvciBub24tZXhpc3RlbnQgL0BsLiAgQ2Fubm90IHJlY29ubmVjdC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NTEKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBDb3VsZCBub3QgZXhwYW5kIC9sb3N0K2ZvdW5kOiAlbVxuCittc2dpZCAiQ291bGQgbm90IGV4cGFuZCAvQGw6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWNvbm5lY3QgJWk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDYxCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL2xvc3QrZm91bmQ6ICVtXG4KK21zZ2lkICJFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvQGw6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDY2CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19ibG9jazogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnlcbgorbXNnaWQgImV4dDJmc19uZXdfQGI6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDcxCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19pbm9kZTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnlcbgorbXNnaWQgImV4dDJmc19uZXdfQGk6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDc2CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2tcbgorbXNnaWQgImV4dDJmc19uZXdfZGlyX0BiOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgQGQgQGJcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODEKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBkaXJlY3RvcnkgYmxvY2sgZm9yIC9sb3N0K2ZvdW5kXG4KK21zZ2lkICJleHQyZnNfd3JpdGVfZGlyX0BiOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBAZCBAYiBmb3IgL0BsXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDg2CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgYWRqdXN0aW5nIGlub2RlIGNvdW50IG9uIGlub2RlICVpXG4KK21zZ2lkICJFcnJvciB3aGlsZSBhZGp1c3RpbmcgQGkgY291bnQgb24gQGkgJWlcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTEKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ5NgorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IENvdWxkbid0IGZpeCBwYXJlbnQgb2YgaW5vZGUgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IGRpcmVjdG9yeSBlbnRyeVxuCisjLiBALWV4cGFuZGVkOiBcbgorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBAZCBAZVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwNgorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNyZWF0aW5nIHJvb3QgZGlyZWN0b3J5ICglcyk6ICVtXG4KK21zZ2lkICJFcnJvciBjcmVhdGluZyByb290IEBkICglcyk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTExCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MTYKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5OyBhYm9ydGluZy5cbgorbXNnaWQgIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MjEKKyMuIEAtZXhwYW5kZWQ6IENhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSByb290IGlub2RlLlxuCittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUzMQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIGlzIG5vdCBhIGRpcmVjdG9yeSAoaW5vPSVpKVxuCittc2dpZCAiL0BsIGlzIG5vdCBhIEBkIChpbm89JWkpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTM4Cittc2dpZCAiUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3Rvcmllc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRpcnNfdG9faGFzaCBpdGVyYXRvcjogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDgKK21zZ2lkICJGYWlsZWQgdG8gb3B0aW1pemUgZGlyZWN0b3J5ICVxICglZCk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTUzCittc2dpZCAiT3B0aW1pemluZyBkaXJlY3RvcmllczogIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3MAorbXNnaWQgIlBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50c1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3NQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgemVyby1sZW5ndGggaW5vZGUgJWkuICAKK21zZ2lkICJAdSBAeiBAaSAlaS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODAKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIGlub2RlICVpXG4KK21zZ2lkICJAdSBAaSAlaVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4NQorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgcmVmIGNvdW50IGlzICVJbCwgc2hvdWxkIGJlICVOLiAgCittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg5CisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuCisjLiBALWV4cGFuZGVkOiBcdE9SIFNPTUUgQk9ORUhFQUQgKFlPVSkgSVMgQ0hFQ0tJTkcgQSBNT1VOVEVEIChMSVZFKSBGSUxFU1lTVEVNLlxuCisjLiBALWV4cGFuZGVkOiBpbm9kZV9saW5rX2luZm9bJWldIGlzICVOLCBpbm9kZS5pX2xpbmtzX2NvdW50IGlzICVJbC4gIFRoZXkgc2hvdWxkIGJlIHRoZSBzYW1lIVxuCittc2dpZCAiIgorIldBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4iCisiXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbiIKKyJAaV9saW5rX2luZm9bJWldIGlzICVOLCBAaS5pX2xpbmtzX2NvdW50IGlzICVJbC4gIFRoZXkgQHMgdGhlIHNhbWUhXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTk5CisjLiBALWV4cGFuZGVkOiBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb25cbgorbXNnaWQgIlBhc3MgNTogQ2hlY2tpbmcgQGcgc3VtbWFyeSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwNAorIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgaW5vZGUgYml0bWFwIGlzIG5vdCBzZXQuIAorbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBpIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDkKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGJsb2NrIGJpdG1hcCBpcyBub3Qgc2V0LiAKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjE0CisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6IAorbXNnaWQgIkBiIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjM0CisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6IAorbXNnaWQgIkBpIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjU0CisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjU5CisjLiBALWV4cGFuZGVkOiBEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KK21zZ2lkICJEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjY0CisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoJWksIGNvdW50ZWQ9JWopLlxuCittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjkKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCViLCBjb3VudGVkPSVjKS5cbgorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NzQKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4KK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY3OQorIy4gQC1leHBhbmRlZDogUFJPR1JBTU1JTkcgRVJST1I6IGZpbGVzeXN0ZW0gKCMlTikgYml0bWFwIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIGJpdG1hcCAKKyMuIEAtZXhwYW5kZWQ6IGVuZHBvaW50cyAoJWksICVqKVxuCittc2dpZCAiIgorIlBST0dSQU1NSU5HIEVSUk9SOiBAZiAoIyVOKSBAQiBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBAQiAiCisiZW5kcG9pbnRzICglaSwgJWopXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjg1Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGZ1ZGdpbmcgZW5kIG9mIGJpdG1hcCAoJU4pXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjkwCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBpbm9kZSBiaXRtYXA6ICVtXG4KK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBpIEBCOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5NQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgYmxvY2sgYml0bWFwOiAlbVxuCittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAYiBAQjogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MjAKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBibG9jayhzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbgorbXNnaWQgIkBnICVnIEBiKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcyNQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGlub2RlKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuCittc2dpZCAiQGcgJWcgQGkocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzMyCisjLiBALWV4cGFuZGVkOiBSZWNyZWF0ZSBqb3VybmFsCittc2dpZCAiUmVjcmVhdGUgQGoiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzM3Cittc2dpZCAiVXBkYXRlIHF1b3RhIGluZm8gZm9yIHF1b3RhIHR5cGUgJU4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzQyCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3Igc2V0dGluZyBibG9jayBncm91cCBjaGVja3N1bSBpbmZvOiAlbVxuCittc2dpZCAiRXJyb3Igc2V0dGluZyBAYiBAZyBjaGVja3N1bSBpbmZvOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc0NworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGZpbGUgc3lzdGVtIGluZm86ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGZsdXNoaW5nIHdyaXRlcyB0byBzdG9yYWdlIGRldmljZTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5oYW5kbGVkIGVycm9yIGNvZGUgKDB4JXgpIVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk5NiBlMmZzY2svcHJvYmxlbS5jOjIwMDAKK21zZ2lkICJJR05PUkVEIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlZCwgZWxhcHNlZCB0aW1lOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNpemUgb2YgaW5vZGU9JWRcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMTkKK21zZ2lkICJ3aGlsZSBzdGFydGluZyBpbm9kZSBzY2FuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjEzMAorbXNnaWQgIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3N1cGVyLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZm9yIGlub2RlICVkIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9zdXBlci5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzQKK21zZ2lkICJUcnVuY2F0aW5nIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9zdXBlci5jOjI3NQorbXNnaWQgIkNsZWFyaW5nIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6ODAKK21zZ2lkICIiCisiXG4iCisiRW1lcmdlbmN5IGhlbHA6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyByZXBhaXIgKG5vIHF1ZXN0aW9ucylcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTWFrZSBubyBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIEFzc3VtZSBcInllc1wiIHRvIGFsbCBxdWVzdGlvbnNcbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIGJhZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYWRibG9jayAiCisibGlzdFxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3JjZSBjaGVja2luZyBldmVuIGlmIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGNsZWFuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4NgorbXNnaWQgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgQmUgdmVyYm9zZVxuIgorIiAtYiBzdXBlcmJsb2NrICAgICAgICBVc2UgYWx0ZXJuYXRpdmUgc3VwZXJibG9ja1xuIgorIiAtQiBibG9ja3NpemUgICAgICAgICBGb3JjZSBibG9ja3NpemUgd2hlbiBsb29raW5nIGZvciBzdXBlcmJsb2NrXG4iCisiIC1qIGV4dGVybmFsX2pvdXJuYWwgIFNldCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbFxuIgorIiAtbCBiYWRfYmxvY2tzX2ZpbGUgICBBZGQgdG8gYmFkYmxvY2tzIGxpc3RcbiIKKyIgLUwgYmFkX2Jsb2Nrc19maWxlICAgU2V0IGJhZGJsb2NrcyBsaXN0XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICVsbHUvJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTEydSBpbm9kZSB1c2VkICglMi4yZiUlLCBvdXQgb2YgJXUpXG4iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyIlMTJ1IGlub2RlcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJXUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGUgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3J5ICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcmllcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgICAgICAgIyBvZiBpbm9kZXMgd2l0aCBpbmQvZGluZC90aW5kIGJsb2NrczogJXUvJXUvJXVcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE3OQorbXNnaWQgIiAgICAgICAgICAgICBFeHRlbnQgZGVwdGggaGlzdG9ncmFtOiAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEybGx1IGJsb2NrIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnaWRfcGx1cmFsICIlMTJsbHUgYmxvY2tzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBiYWQgYmxvY2tcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBiYWQgYmxvY2tzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxhcmdlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsYXJnZSBmaWxlc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZGlyZWN0b3J5XG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZGlyZWN0b3JpZXNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBibG9jayBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWZvXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlmb3NcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbGlua1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGxpbmtzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHN5bWJvbGljIGxpbmsiCittc2dpZF9wbHVyYWwgIiUxMnUgc3ltYm9saWMgbGlua3MiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgKCV1IGZhc3Qgc3ltYm9saWMgbGluaylcbiIKK21zZ2lkX3BsdXJhbCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmtzKVxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzb2NrZXRcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBzb2NrZXRzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWxlc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoyMzIgbWlzYy9iYWRibG9ja3MuYzo5OTMgbWlzYy90dW5lMmZzLmM6MjEyMiBtaXNjL3V0aWwuYzozMTYKKyM6IHJlc2l6ZS9tYWluLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZyEgICVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZyEgICVzIGlzIGluIHVzZS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGluIHVzZS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjI2NgorbXNnaWQgIiIKKyJDYW5ub3QgY29udGludWUsIGFib3J0aW5nLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MjY4Cittc2dpZCAiIgorIlxuIgorIlxuIgorIldBUk5JTkchISEgIFRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuICAgSWYgeW91IGNvbnRpbnVlIHlvdSAqKipXSUxMKioqXG4iCisiY2F1c2UgKioqU0VWRVJFKioqIGZpbGVzeXN0ZW0gZGFtYWdlLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MjczCittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIGNvbnRpbnVlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6Mjc1Cittc2dpZCAiY2hlY2sgYWJvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjM2OAorbXNnaWQgIiBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MzcwCittc2dpZCAiIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzozNzIKK21zZ2lkICIgcHJpbWFyeSBzdXBlcmJsb2NrIGZlYXR1cmVzIGRpZmZlcmVudCBmcm9tIGJhY2t1cCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGJlZW4gbW91bnRlZCAldSB0aW1lcyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzozODMKK21zZ2lkICIgaGFzIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRpbWUgaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGdvbmUgJXUgZGF5cyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzozOTgKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4sICV1LyV1IGZpbGVzLCAlbGx1LyVsbHUgYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6NDUxCittc2dpZCAiIChjaGVjayBkZWZlcnJlZDsgb24gYmF0dGVyeSkiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo0NTQKK21zZ2lkICIgKGNoZWNrIGFmdGVyIG5leHQgbW91bnQpIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoY2hlY2sgaW4gJWxkIG1vdW50cykiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IENvdWxkbid0IG9wZW4gL2Rldi9udWxsICglcylcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjY3NQorbXNnaWQgIkludmFsaWQgRUEgdmVyc2lvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGV4dGVuZGVkIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjcyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIGUyZnNjayBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjgwMQorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4MTYKK21zZ2lkICJPbmx5IG9uZSBvZiB0aGUgb3B0aW9ucyAtcC8tYSwgLW4gb3IgLXkgbWF5IGJlIHNwZWNpZmllZC4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC10IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4NjggZTJmc2NrL3VuaXguYzo5NDIgbWlzYy90dW5lMmZzLmM6ODc5IG1pc2MvdHVuZTJmcy5jOjExNzQKKyM6IG1pc2MvdHVuZTJmcy5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjkyMQorbXNnaWQgIlRoZSAtbiBhbmQgLUQgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjkyNgorbXNnaWQgIlRoZSAtbiBhbmQgLWMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjkzMQorbXNnaWQgIlRoZSAtbiBhbmQgLWwvLUwgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjk4NQorbXNnaWQgIlRoZSAtYyBhbmQgdGhlIC1sLy1MIG9wdGlvbnMgbWF5IG5vdCBiZSBib3RoIHVzZWQgYXQgdGhlIHNhbWUgdGltZS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG5vdCBhbiBpbnRlZ2VyXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJbnZhbGlkIG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGludGVydmFsIGlzICV1IHNlY29uZHMgYW5kIHRvdGFsIHdhaXQgdGltZSBpcyAldSBzZWNvbmRzLiBQbGVhc2UgIgorIndhaXQuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjExNDkgZTJmc2NrL3VuaXguYzoxMTU0Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgTU1QIGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTE1NiBtaXNjL3R1bmUyZnMuYzoyMDQ5Cittc2dpZCAiIgorIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSBpcyBub3QgaW4gdXNlIG9uIGFueSBub2RlLCBydW46XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V9J1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTIwNworbXNnaWQgIkVycm9yOiBleHQyZnMgbGlicmFyeSB2ZXJzaW9uIG91dCBvZiBkYXRlIVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTIxNAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBpbml0aWFsaXplIHByb2dyYW0iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXMsICVzXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMjQ5Cittc2dpZCAibmVlZCB0ZXJtaW5hbCBmb3IgaW50ZXJhY3RpdmUgcmVwYWlycyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzA1Cittc2dpZCAiU3VwZXJibG9jayBpbnZhbGlkLCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDYKK21zZ2lkICJHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHVzaW5nIHRoZSBiYWNrdXAgYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZ29pbmcgYmFjayB0byBvcmlnaW5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQ5Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIHJldmlzaW9uIGlzIGFwcGFyZW50bHkgdG9vIGhpZ2ggZm9yIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCisiKE9yIHRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2sgaXMgY29ycnVwdClcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTYKK21zZ2lkICJDb3VsZCB0aGlzIGJlIGEgemVyby1sZW5ndGggcGFydGl0aW9uP1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSBvciBiZSByb290XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY0Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTM2NgorbXNnaWQgIkZpbGVzeXN0ZW0gbW91bnRlZCBvciBvcGVuZWQgZXhjbHVzaXZlbHkgYnkgYW5vdGhlciBwcm9ncmFtP1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTM3MAorbXNnaWQgIlBvc3NpYmx5IG5vbi1leGlzdGVudCBkZXZpY2U/XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzczCittc2dpZCAiIgorIkRpc2sgd3JpdGUtcHJvdGVjdGVkOyB1c2UgdGhlIC1uIG9wdGlvbiB0byBkbyBhIHJlYWQtb25seVxuIgorImNoZWNrIG9mIHRoZSBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNDM3Cittc2dpZCAiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBleHQzIGpvdXJuYWwgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTQ5MgorbXNnaWQgIiIKKyJXYXJuaW5nOiBza2lwcGluZyBqb3VybmFsIHJlY292ZXJ5IGJlY2F1c2UgZG9pbmcgYSByZWFkLW9ubHkgZmlsZXN5c3RlbSAiCisiY2hlY2suXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNTA0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgc3VwZXJibG9jayBmbGFncyBvbiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWNvdmVyaW5nIGV4dDMgam91cm5hbCBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocyk6IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FybmluZzogY29tcHJlc3Npb24gc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogZTJmc2NrIG5vdCBjb21waWxlZCB3aXRoIEhUUkVFIHN1cHBvcnQsXG4iCisiXHRidXQgZmlsZXN5c3RlbSAlcyBoYXMgSFRSRUUgZGlyZWN0b3JpZXMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSByZWFkaW5nIGJhZCBibG9ja3MgaW5vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2MTAKK21zZ2lkICJUaGlzIGRvZXNuJ3QgYm9kZSB3ZWxsLCBidXQgd2UnbGwgdHJ5IHRvIGdvIG9uLi4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCVkIGJsb2Nrcyk6ICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2NjIKK21zZ2lkICIgRG9uZS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2NjQKK21zZ2lkICIiCisiXG4iCisiKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjg4Cittc2dpZCAiUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjkyCittc2dpZCAid2hpbGUgcmVzZXR0aW5nIGNvbnRleHQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjk5Cittc2dpZCAiYWJvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGUyZnNjayBjYW5jZWxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE3NDEgZTJmc2NrL3V0aWwuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNzUzIGUyZnNjay91dGlsLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIFdBUk5JTkc6IEZpbGVzeXN0ZW0gc3RpbGwgaGFzIGVycm9ycyAqKioqKioqKioqXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoxOTAgbWlzYy91dGlsLmM6ODYKK21zZ2lkICJ5WSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MQorbXNnaWQgIm5OIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MjA1Cittc2dpZCAiPHk+IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MjA3Cittc2dpZCAiPG4+IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MjA5Cittc2dpZCAiICh5L24pIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MjIzCittc2dpZCAiY2FuY2VsbGVkIVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MjM4Cittc2dpZCAieWVzXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyNDAKK21zZ2lkICJub1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8gbm9cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IHllc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAieWVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAibm8iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJmc2NrX3JlYWRfYml0bWFwczogaWxsZWdhbCBiaXRtYXAgYmxvY2socykgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6Mjc4Cittc2dpZCAicmVhZGluZyBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXRyeWluZyB0byByZWFkIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6Mjk4Cittc2dpZCAid3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXdyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyIlczogVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOyBSVU4gZnNjayBNQU5VQUxMWS5cbiIKKyJcdChpLmUuLCB3aXRob3V0IC1hIG9yIC1wIG9wdGlvbnMpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6NDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHUsICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVsYXBzZWQgdGltZTogJTYuM2ZcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjQ0NyBlMmZzY2svdXRpbC5jOjQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjQ3NSBlMmZzY2svdXRpbC5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjYzNworbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgemVyb2l6aW5nIGJ1ZmZlciIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjc4NQorbXNnaWQgIiIKKyJVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k6IHRoZSBmaWxlc3lzdGVtIGlzIGJlaW5nIG1vZGlmaWVkIHdoaWxlIGZzY2sgaXMgIgorInJ1bm5pbmcuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3MgorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYiBibG9ja19zaXplXSBbLWkgaW5wdXRfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxvY2tzX2F0X29uY2VdIFstZCBkZWxheV9mYWN0b3JfYmV0d2Vlbl9yZWFkc10gWy1lICIKKyJtYXhfYmFkX2Jsb2Nrc11cbiIKKyIgICAgICAgWy1wIG51bV9wYXNzZXNdIFstdCB0ZXN0X3BhdHRlcm4gWy10IHRlc3RfcGF0dGVybiBbLi4uXV1dXG4iCisiICAgICAgIGRldmljZSBbbGFzdF9ibG9jayBbZmlyc3RfYmxvY2tdXVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogVGhlIC1uIGFuZCAtdyBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTYuMmYlJSBkb25lLCAlcyBlbGFwc2VkLiAoJWQvJWQvJWQgZXJyb3JzKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjMyOAorbXNnaWQgIlRlc3Rpbmcgd2l0aCByYW5kb20gcGF0dGVybjogIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzQ2Cittc2dpZCAiVGVzdGluZyB3aXRoIHBhdHRlcm4gMHgiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNzggbWlzYy9iYWRibG9ja3MuYzo0NTEKK21zZ2lkICJkdXJpbmcgc2VlayIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJXZWlyZCB2YWx1ZSAoJWxkKSBpbiBkb19yZWFkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo0NzYKK21zZ2lkICJkdXJpbmcgZXh0MmZzX3N5bmNfZGV2aWNlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDk2IG1pc2MvYmFkYmxvY2tzLmM6NzU4Cittc2dpZCAid2hpbGUgYmVnaW5uaW5nIGJhZCBibG9jayBsaXN0IGl0ZXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxMSBtaXNjL2JhZGJsb2Nrcy5jOjYxMSBtaXNjL2JhZGJsb2Nrcy5jOjc2OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVycyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBibG9ja3MgJWx1IHRvICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTIwCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyOQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChyZWFkLW9ubHkgdGVzdCk6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUzNiBtaXNjL2JhZGJsb2Nrcy5jOjY0MyBtaXNjL2JhZGJsb2Nrcy5jOjY4NQorIzogbWlzYy9iYWRibG9ja3MuYzo4MzIKK21zZ2lkICJUb28gbWFueSBiYWQgYmxvY2tzLCBhYm9ydGluZyB0ZXN0XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MTgKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYyMCBtaXNjL2JhZGJsb2Nrcy5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tIGJsb2NrICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY3NQorbXNnaWQgIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NzgxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzg3Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIHRlc3QpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3OTQKK21zZ2lkICIiCisiXG4iCisiSW50ZXJydXB0IGNhdWdodCwgY2xlYW5pbmcgdXBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjg3NworIywgYy1mb3JtYXQKK21zZ2lkICJkdXJpbmcgdGVzdCBkYXRhIHdyaXRlLCBibG9jayAlbHUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5OTggbWlzYy91dGlsLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQ7ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDAKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDUKK21zZ2lkICJpdCdzIG5vdCBzYWZlIHRvIHJ1biBiYWRibG9ja3MhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDEwIG1pc2MvdXRpbC5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhcHBhcmVudGx5IGluIHVzZSBieSB0aGUgc3lzdGVtOyAiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDEzCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGJpZyBtYXggYmFkIGJsb2NrcyBjb3VudCAldSAtIG1heGltdW0gaXMgJXUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGVzdF9wYXR0ZXJuIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTg0Cittc2dpZCAiTWF4aW11bSBvZiBvbmUgdGVzdF9wYXR0ZXJuIG1heSBiZSBzcGVjaWZpZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTkwCittc2dpZCAiUmFuZG9tIHRlc3RfcGF0dGVybiBpcyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMDQKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgbWFudWFsbHlcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMTAKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIxNQorbXNnaWQgImxhc3QgYmxvY2siCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjIxCittc2dpZCAiZmlyc3QgYmxvY2siCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnRpbmcgYmxvY2sgKCVsbHUpOiBtdXN0IGJlIGxlc3MgdGhhbiAlbGx1IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGVuZCBibG9jayAoJWxsdSk6IG11c3QgYmUgMzItYml0IHZhbHVlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI4NworbXNnaWQgIndoaWxlIGNyZWF0aW5nIGluLW1lbW9yeSBiYWQgYmxvY2tzIGxpc3QiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjk2Cittc2dpZCAiaW5wdXQgZmlsZSAtIGJhZCBmb3JtYXQiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzA0IG1pc2MvYmFkYmxvY2tzLmM6MTMxMworbXNnaWQgIndoaWxlIGFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhc3MgY29tcGxldGVkLCAldSBiYWQgYmxvY2tzIGZvdW5kLiAoJWQvJWQvJWQgZXJyb3JzKVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZmXSBbLSs9YUFjQ2REZWlqc1N0VHVdIFstdiB2ZXJzaW9uXSBmaWxlcy4uLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB2ZXJzaW9uIC0gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwMSBtaXNjL2xzYXR0ci5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc3RhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjEzIG1pc2MvY2hhdHRyLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzIG9mICVzIHNldCBhcyAiCittc2dzdHIgIiIKKworIzogbWlzYy9jaGF0dHIuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uIG9mICVzIHNldCBhcyAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9jaGF0dHIuYzoyNjcKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBwYXRoIHZhcmlhYmxlIGluIGNoYXR0cl9kaXJfcHJvYyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjMwNworbXNnaWQgIj0gaXMgaW5jb21wYXRpYmxlIHdpdGggLSBhbmQgK1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6MzE1Cittc2dpZCAiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWJmaGl4Vl0gWy1vIHN1cGVyYmxvY2s9PG51bT5dIFstbyBibG9ja3NpemU9PG51bT5dIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNTkKK21zZ2lkICJibG9ja3MiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE2OQorbXNnaWQgImNsdXN0ZXJzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiR3JvdXAgJWx1OiAoQmxvY2tzICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ2hlY2tzdW0gMHglMDR4IgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChFWFBFQ1RFRCAweCUwNHgpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCB1bnVzZWQgaW5vZGVzICV1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICVzIHN1cGVyYmxvY2sgYXQgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTQKK21zZ2lkICJQcmltYXJ5IgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTQKK21zZ2lkICJCYWNrdXAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxOAorbXNnaWQgIiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjIKK21zZ2lkICIiCisiXG4iCisiICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjI5Cittc2dpZCAiIEdyb3VwIGRlc2NyaXB0b3IgYXQgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzUKK21zZ2lkICIgIEJsb2NrIGJpdG1hcCBhdCAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzOQorbXNnaWQgIiwgSW5vZGUgYml0bWFwIGF0ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQzCittc2dpZCAiIgorIlxuIgorIiAgSW5vZGUgdGFibGUgYXQgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiAgJXUgZnJlZSAlcywgJXUgZnJlZSBpbm9kZXMsICV1IGRpcmVjdG9yaWVzJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIsICV1IHVudXNlZCBpbm9kZXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU5Cittc2dpZCAiICBGcmVlIGJsb2NrczogIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNzQKK21zZ2lkICIgIEZyZWUgaW5vZGVzOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxMAorbXNnaWQgIndoaWxlIHByaW50aW5nIGJhZCBibG9jayBsaXN0IgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrczogJXUiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM0NSBtaXNjL3R1bmUyZnMuYzozNDcKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1MQorbXNnaWQgIndoaWxlIG9wZW5pbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzU3Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyIGJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjQKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVyIGludmFsaWQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2NworbXNnaWQgIkpvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM4MAorbXNnaWQgIkpvdXJuYWwgc2l6ZTogICAgICAgICAgICAgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZXJybm86ICAgICAgICAgICAgJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDE1IG1pc2MvdHVuZTJmcy5jOjE5NgorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXJzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgYmxvY2sgc2l6ZTogICAgICAgJXVcbiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBmaXJzdCBibG9jazogICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgbnVtYmVyIG9mIHVzZXJzOiAgJXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdXNlcnM6ICAgICAgICAgICAgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDU2IG1pc2MvbWtlMmZzLmM6NzQzIG1pc2MvdHVuZTJmcy5jOjEyMTEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugb3B0aW9ucyFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jayBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJsb2Nrc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjUwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIGV4dGVuZGVkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0c3VwZXJibG9jaz08c3VwZXJibG9jayBudW1iZXI+XG4iCisiXHRibG9ja3NpemU9PGJsb2Nrc2l6ZT5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTY4IG1pc2MvbWtlMmZzLmM6MTczNAorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYwNiBtaXNjL2UyaW1hZ2UuYzoxNTgyIG1pc2MvdHVuZTJmcy5jOjIwNjAKKyM6IHJlc2l6ZS9tYWluLmM6MzE5Cittc2dpZCAiQ291bGRuJ3QgZmluZCB2YWxpZCBmaWxlc3lzdGVtIHN1cGVyYmxvY2suXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICVzOiBlcnJvciByZWFkaW5nIGJpdG1hcHM6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbIC1yfFEgXSBbIC1mciBdIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyAtSSBkZXZpY2UgaW1hZ2UtZmlsZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICVzIC1yYSAgWyAgLWNmbnAgIF0gWyAtbyBzcmNfb2Zmc2V0IF0gWyAtTyBkZXN0X29mZnNldCBdIHNyY19mcyAiCisiWyBkZXN0X2ZzIF1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjkgbWlzYy9lMmltYWdlLmM6NTc2IG1pc2MvZTJpbWFnZS5jOjU4MgorIzogbWlzYy9lMmltYWdlLmM6MTE3OAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVyIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igd3JpdGluZyBibG9jayAlbGx1IgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE5MQorbXNnaWQgImVycm9yIGluIGdlbmVyaWNfd3JpdGUoKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMDgKK21zZ2lkICJFcnJvcjogaGVhZGVyIHNpemUgaXMgYmlnZ2VyIHRoYW4gd3J0X3NpemVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMTMKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBoZWFkZXIgYnVmZmVyXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MjQxCittc2dpZCAid2hpbGUgd3JpdGluZyBzdXBlcmJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI1MAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MjU4Cittc2dpZCAid2hpbGUgd3JpdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MjY2Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCByZWNfbGVuICglZClcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBkaXJlY3RvcnkgYmxvY2sgJWxsdTogYmFkIG5hbWVfbGVuICglZClcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1ODYgbWlzYy9lMmltYWdlLmM6NjI2Cittc2dpZCAiQ29weWluZyAiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6NjIzCittc2dpZCAiIgorIlN0b3BwaW5nIG5vdyB3aWxsIGRlc3Ryb3kgdGhlIGZpbGVzeXN0ZW0sIGludGVycnVwdCBhZ2FpbiBpZiB5b3UgYXJlIHN1cmVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHJlbWFpbmluZyBhdCAlLjJmIE1CL3MiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6NjYxIG1pc2MvZTJpbWFnZS5jOjExODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBibG9jayAlbGx1IgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3BpZWQgJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSBpbiAlcyAiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF0ICUuMmYgTUIvcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3NTUKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGwxIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjgwMAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgbDIgY2FjaGUiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6ODIzCittc2dpZCAiIgorIldhcm5pbmc6IFRoZXJlIGFyZSBzdGlsbCB0YWJsZXMgaW4gdGhlIGNhY2hlIHdoaWxlIHB1dHRpbmcgdGhlIGNhY2hlLCBkYXRhICIKKyJ3aWxsIGJlIGxvc3Qgc28gdGhlIGltYWdlIG1heSBub3QgYmUgdmFsaWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTE0NQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgZXh0Ml9xY293Ml9pbWFnZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTUyCittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGV4dDJfcWNvdzJfaW1hZ2UiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTIxMSBtaXNjL2UyaW1hZ2UuYzoxMjI5Cittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I6IG11bHRpcGxlIHNlcXVlbnRpYWwgcmVmY291bnQgYmxvY2tzIGNyZWF0ZWQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTI2OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyNzgKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIHNjcmFtYmxlIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjg1Cittc2dpZCAiU2Nhbm5pbmcgaW5vZGVzLi4uXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTI5NworbXNnaWQgIkNhbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzM2IG1pc2MvZTJpbWFnZS5jOjEzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgaXRlcmF0aW5nIG92ZXIgaW5vZGUgJXUiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTM4MQorbXNnaWQgIlJhdyBhbmQgcWNvdzIgaW1hZ2VzIGNhbm5vdCBiZSBpbnN0YWxsZWQiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTQwMworbXNnaWQgImVycm9yIHJlYWRpbmcgYml0bWFwcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDE1Cittc2dpZCAid2hpbGUgb3BlbmluZyBkZXZpY2UgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDI2Cittc2dpZCAid2hpbGUgcmVzdG9yaW5nIHRoZSBpbWFnZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTIzCittc2dpZCAiLWEgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCByYXcgb3IgUUNPVzIgaW1hZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTI5Cittc2dpZCAiT2Zmc2V0cyBhcmUgb25seSBhbGxvd2VkIHdpdGggcmF3IGltYWdlcy4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUzNAorbXNnaWQgIk1vdmUgbW9kZSBpcyBvbmx5IGFsbG93ZWQgd2l0aCByYXcgaW1hZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTM5Cittc2dpZCAiTW92ZSBtb2RlIHJlcXVpcmVzIGFsbCBkYXRhIG1vZGUuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1NDkKK21zZ2lkICJjaGVja2luZyBpZiBtb3VudGVkIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1NTYKK21zZ2lkICIiCisiXG4iCisiUnVubmluZyBlMmltYWdlIG9uIGEgUi9XIG1vdW50ZWQgZmlsZXN5c3RlbSBjYW4gcmVzdWx0IGluIGFuXG4iCisiaW5jb25zaXN0ZW50IGltYWdlIHdoaWNoIHdpbGwgbm90IGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuIgorIlVzZSAtZiBvcHRpb24gaWYgeW91IHJlYWxseSB3YW50IHRvIGRvIHRoYXQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYwOAorbXNnaWQgIlFDT1cyIGltYWdlIGNhbiBub3QgYmUgd3JpdHRlbiB0byB0aGUgc3Rkb3V0IVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MTQKK21zZ2lkICJDYW4gbm90IHN0YXQgb3V0cHV0XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYyNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbWFnZSAoJXMpIGlzIGNvbXByZXNzZWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkltYWdlICglcykgaXMgZW5jcnlwdGVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYzMAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gY29udmVydCBxY293MiBpbWFnZSAoJXMpIGludG8gcmF3IGltYWdlICglcykiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYzOQorbXNnaWQgIlRoZSAtYyBvcHRpb24gb25seSBzdXBwb3J0ZWQgaW4gcmF3IG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjQ0Cittc2dpZCAiVGhlIC1jIG9wdGlvbiBub3Qgc3VwcG9ydGVkIHdoZW4gd3JpdGluZyB0byBzdGRvdXRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjUxCittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBjaGVja19idWYiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY1NworbXNnaWQgIlRoZSAtcCBvcHRpb24gb25seSBzdXBwb3J0ZWQgaW4gcmF3IG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsb2NrcyBhbHJlYWR5IGNvbnRhaW5lZCB0aGUgZGF0YSB0byBiZSBjb3BpZWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UybGFiZWwuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgb3BlbiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJsYWJlbC5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UybGFiZWwuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciByZWFkaW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UybGFiZWwuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBub3QgYW4gZXh0MiBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmxhYmVsLmM6OTcgbWlzYy90dW5lMmZzLmM6MjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBsYWJlbCB0b28gbG9uZywgdHJ1bmNhdGluZy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9jayBhZ2FpblxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciB3cml0aW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMTcgbWlzYy90dW5lMmZzLmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBlMmxhYmVsIGRldmljZSBbbmV3bGFiZWxdXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgPHRyYW5zYWN0aW9uIGZpbGU+IDxmaWxlc3lzdGVtPlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6NTIKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjYyIG1pc2MvZTJ1bmRvLmM6ODMgbWlzYy9lMnVuZG8uYzoxMDggbWlzYy9lMnVuZG8uYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9mZXRjaCAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIE1vdW50IHRpbWUgZGlkbid0IG1hdGNoICV1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzo4OQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBVVUlEIGRpZG4ndCBtYXRjaCBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX29wZW4gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzoxNzUKK21zZ2lkICJlMnVuZG8gc2hvdWxkIG9ubHkgYmUgcnVuIG9uIHVubW91bnRlZCBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwbGF5ZWQgdHJhbnNhY3Rpb24gb2Ygc2l6ZSAlemQgYXQgbG9jYXRpb24gJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB3cml0ZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBjb3VsZG4ndCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBiYWQgZm9ybWF0IG9uIGxpbmUgJWQgb2YgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzozNzAKK21zZ2lkICIiCisiV0FSTklORzogWW91ciAvZXRjL2ZzdGFiIGRvZXMgbm90IGNvbnRhaW4gdGhlIGZzY2sgcGFzc25vXG4iCisiXHRmaWVsZC4gIEkgd2lsbCBrbHVkZ2UgYXJvdW5kIHRoaW5ncyBmb3IgeW91LCBidXQgeW91XG4iCisiXHRzaG91bGQgZml4IHlvdXIgL2V0Yy9mc3RhYiBmaWxlIGFzIHNvb24gYXMgeW91IGNhbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogJXM6IG5vdCBmb3VuZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FpdDogTm8gbW9yZSBjaGlsZCBwcm9jZXNzPyE/XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmcuLi4gJXMgZm9yIGRldmljZSAlcyBleGl0ZWQgd2l0aCBzaWduYWwgJWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzOiBzdGF0dXMgaXMgJXgsIHNob3VsZCBuZXZlciBoYXBwZW4uXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmlzaGVkIHdpdGggJXMgKGV4aXQgc3RhdHVzICVkKVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6NzQyCittc2dpZCAiIgorIkVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGUgZmlsZXN5c3RlbSB0eXBlcyBwYXNzZWQgdG8gLXQgbXVzdCBiZSBwcmVmaXhlZFxuIgorIndpdGggJ25vJyBvciAnIScuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6NzYxCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBmaWxlc3lzdGVtIHR5cGVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogc2tpcHBpbmcgYmFkIGxpbmUgaW4gL2V0Yy9mc3RhYjogYmluZCBtb3VudCB3aXRoIG5vbnplcm8gZnNjayBwYXNzICIKKyJudW1iZXJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogY2Fubm90IGNoZWNrICVzOiBmc2NrLiVzIG5vdCBmb3VuZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjk2NworbXNnaWQgIkNoZWNraW5nIGFsbCBmaWxlIHN5c3RlbXMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICItLXdhaXRpbmctLSAocGFzcyAlZClcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzoxMDc4Cittc2dpZCAiIgorIlVzYWdlOiBmc2NrIFstQU1OUFJUVl0gWyAtQyBbIGZkIF0gXSBbLXQgZnN0eXBlXSBbZnMtb3B0aW9uc10gW2ZpbGVzeXMgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzoxMTUzIG1pc2MvZnNjay5jOjEyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbHNhdHRyLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZhZGx2XSBbZmlsZXMuLi5dXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9sc2F0dHIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbHNhdHRyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jfC1sIGZpbGVuYW1lXSBbLWIgYmxvY2stc2l6ZV0gWy1DIGNsdXN0ZXItc2l6ZV1cbiIKKyJcdFstaSBieXRlcy1wZXItaW5vZGVdIFstSSBpbm9kZS1zaXplXSBbLUogam91cm5hbC1vcHRpb25zXVxuIgorIlx0Wy1HIGZsZXgtZ3JvdXAtc2l6ZV0gWy1OIG51bWJlci1vZi1pbm9kZXNdXG4iCisiXHRbLW0gcmVzZXJ2ZWQtYmxvY2tzLXBlcmNlbnRhZ2VdIFstbyBjcmVhdG9yLW9zXVxuIgorIlx0Wy1nIGJsb2Nrcy1wZXItZ3JvdXBdIFstTCB2b2x1bWUtbGFiZWxdIFstTSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5XVxuIgorIlx0Wy1PIGZlYXR1cmVbLC4uLl1dIFstciBmcy1yZXZpc2lvbl0gWy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV1cbiIKKyJcdFstdCBmcy10eXBlXSBbLVQgdXNhZ2UtdHlwZSBdIFstVSBVVUlEXSBbLWpucXZERktTVl0gZGV2aWNlIFtibG9ja3MtIgorImNvdW50XVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgY29tbWFuZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcnVuICclcyciCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjMKK21zZ2lkICJ3aGlsZSBwcm9jZXNzaW5nIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIHByb2dyYW0iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWQgaW4gcHJpbWFyeSBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3IgYXJlYSBiYWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2tzICV1IHRocm91Z2ggJXUgbXVzdCBiZSBnb29kIGluIG9yZGVyIHRvIGJ1aWxkIGEgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI5NQorbXNnaWQgIkFib3J0aW5nLi4uLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB0aGUgYmFja3VwIHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvcnMgYXQgYmxvY2sgJXUgY29udGFpblxuIgorIlx0YmFkIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjMzNAorbXNnaWQgIndoaWxlIG1hcmtpbmcgYmFkIGJsb2NrcyBhcyB1c2VkIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mzg2Cittc2dpZCAiV3JpdGluZyBpbm9kZSB0YWJsZXM6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IHdyaXRlICVkIGJsb2NrcyBpbiBpbm9kZSB0YWJsZSBzdGFydGluZyBhdCAlbGx1OiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDIxIG1pc2MvbWtlMmZzLmM6MjQ3OSBtaXNjL21rZTJmcy5jOjI3NjQKK21zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDMyCittc2dpZCAid2hpbGUgY3JlYXRpbmcgcm9vdCBkaXIiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo0MzkKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHJvb3QgaW5vZGUiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo0NTEKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHJvb3QgaW5vZGUgb3duZXJzaGlwIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDY5Cittc2dpZCAid2hpbGUgY3JlYXRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo0NzYKK21zZ2lkICJ3aGlsZSBsb29raW5nIHVwIC9sb3N0K2ZvdW5kIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDg5Cittc2dpZCAid2hpbGUgZXhwYW5kaW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTA0Cittc2dpZCAid2hpbGUgc2V0dGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3V0IG9mIG1lbW9yeSBlcmFzaW5nIHNlY3RvcnMgJWQtJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAwOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzMKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgxCittc2dpZCAiWmVyb2luZyBqb3VybmFsIGRldmljZTogIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgam91cm5hbCBkZXZpY2UgKGJsb2NrICVsbHUsIGNvdW50ICVkKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjYxMQorbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGZpbGVzeXN0ZW0gd2l0aCAlbGx1ICVkayBibG9ja3MgYW5kICV1IGlub2Rlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3YXJuaW5nOiAlbGx1IGJsb2NrcyB1bnVzZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBsYWJlbD0lc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIk9TIHR5cGU6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsdXN0ZXIgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyYWdtZW50IHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJTdHJpZGU9JXUgYmxvY2tzLCBTdHJpcGUgd2lkdGg9JXUgYmxvY2tzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzLCAlbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsbHUgYmxvY2tzICglMi4yZiUlKSByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIHVzZXJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCBkYXRhIGJsb2NrPSV1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUm9vdCBkaXJlY3Rvcnkgb3duZXI9JXU6JXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGZpbGVzeXN0ZW0gYmxvY2tzPSVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3Vwc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3VwXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgY2x1c3RlcnMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgZnJhZ21lbnRzIHBlciBncm91cFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIFVVSUQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2ODkKK21zZ2lkICJTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzICctTyA2NGJpdCdcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgYmVmb3JlICdyZXNpemU9JXUnXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkZXNjX3NpemU6ICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9mZnNldDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjgxMiBtaXNjL3R1bmUyZnMuYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW1wX3VwZGF0ZV9pbnRlcnZhbDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICMgb2YgYmFja3VwIHN1cGVyYmxvY2tzOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6ODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaWRlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlwZS13aWR0aCBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXNpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6ODkzCittc2dpZCAiVGhlIHJlc2l6ZSBtYXhpbXVtIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBmaWxlc3lzdGVtIHNpemUuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo5MTcKK21zZ2lkICJPbi1saW5lIHJlc2l6aW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo5NDQgbWlzYy9ta2UyZnMuYzo5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByb290X293bmVyOiAnJXMnXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBxdW90YXR5cGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRtbXBfdXBkYXRlX2ludGVydmFsPTxpbnRlcnZhbD5cbiIKKyJcdG51bV9iYWNrdXBfc2I9PDB8MXwyPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGRhdGEgY2h1bmsgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqIGRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0b2Zmc2V0PTxvZmZzZXQgdG8gY3JlYXRlIHRoZSBmaWxlIHN5c3RlbT5cbiIKKyJcdHJlc2l6ZT08cmVzaXplIG1heGltdW0gc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRwYWNrZWRfbWV0YV9ibG9ja3M9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRyb290X3VpZD08dWlkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0cm9vdF9naWQ9PGdpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdGRpc2NhcmRcbiIKKyJcdG5vZGlzY2FyZFxuIgorIlx0cXVvdGF0eXBlPTx1c3IgT1IgZ3JwPlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogUkFJRCBzdHJpcGUtd2lkdGggJXUgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2Ygc3RyaWRlICV1LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIG1rZTJmcyBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNjggbWlzYy90dW5lMmZzLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA4MCBtaXNjL3R1bmUyZnMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtb3VudCBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiWW91ciBta2UyZnMuY29uZiBmaWxlIGRvZXMgbm90IGRlZmluZSB0aGUgJXMgZmlsZXN5c3RlbSB0eXBlLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyNAorbXNnaWQgIiIKKyJZb3UgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGFuIHVwZGF0ZWQgbWtlMmZzLmNvbmYgZmlsZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjgKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGZzX3R5cGUgJXMgaXMgbm90IGRlZmluZWQgaW4gbWtlMmZzLmNvbmZcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE0NDkKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBQQVRILlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IChlcnJvcjogJWxkKS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9jayBzaXplIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgdXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjbHVzdGVyIHNpemUgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NTMKK21zZ2lkICInLVInIGlzIGRlcHJlY2F0ZWQsIHVzZSAnLUUnIGluc3RlYWQiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTY1Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGJsb2NrcyBwZXIgZ3JvdXAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTcwCittc2dpZCAiYmxvY2tzIHBlciBncm91cCBtdXN0IGJlIG11bHRpcGxlIG9mIDgiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTc4Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGZsZXhfYmcgc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODQKK21zZ2lkICJmbGV4X2JnIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZsZXhfYmcgc2l6ZSAoJWx1KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyXjMxIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHJhdGlvICVzIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjIzCittc2dpZCAiIgorIldhcm5pbmc6IC1LIG9wdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZS4gVXNlICctRSAiCisibm9kaXNjYXJkJyBleHRlbmRlZCBvcHRpb24gaW5zdGVhZCFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MzQKK21zZ2lkICJpbiBtYWxsb2MgZm9yIGJhZF9ibG9ja3NfZmlsZW5hbWUiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bSBpbm9kZXMgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uIGxldmVsIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjcmVhdGUgcmV2aXNpb24gJWQiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjk4Cittc2dpZCAiVGhlIC10IG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzA2Cittc2dpZCAiVGhlIC1UIG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzU5IG1pc2MvbWtlMmZzLmM6Mjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIGRldmljZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGRldiBibG9ja3NpemUgKCVkKSBzbWFsbGVyIHRoYW4gbWluaW11bSBibG9ja3NpemUgJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgam91cm5hbCBkZXZpY2UncyBibG9ja3NpemU6ICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2tzICclcycgb24gZGV2aWNlICclcyciCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxODA0Cittc2dpZCAiZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MTcgcmVzaXplL21haW4uYzozOTUKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MjMKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MzAKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NDcKK21zZ2lkICJGaWxlc3lzdGVtIGxhcmdlciB0aGFuIGFwcGFyZW50IGRldmljZSBzaXplLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NjcKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZnMgdHlwZXMgbGlzdFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkwOAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgaGFyZHdhcmUgc2VjdG9yIHNpemUiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTE0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBwaHlzaWNhbCBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NDYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsIGZvciBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNwZWNpZmllZCBibG9ja3NpemUgJWQgaXMgbGVzcyB0aGFuIGRldmljZSBwaHlzaWNhbCBzZWN0b3JzaXplICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogU2l6ZSBvZiBkZXZpY2UgKDB4JWxseCBibG9ja3MpICVzIHRvbyBiaWcgdG8gYmUgZXhwcmVzc2VkXG4iCisiXHRpbiAzMiBiaXRzIHVzaW5nIGEgYmxvY2tzaXplIG9mICVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk5MQorbXNnaWQgImZzX3R5cGVzIGZvciBta2UyZnMuY29uZiByZXNvbHV0aW9uOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTk4Cittc2dpZCAiRmlsZXN5c3RlbSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAwNgorbXNnaWQgIlNwYXJzZSBzdXBlcmJsb2NrcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAxOAorbXNnaWQgIkpvdXJuYWxzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDMyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlbGYiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDQ5Cittc2dpZCAiIgorIkV4dGVudHMgTVVTVCBiZSBlbmFibGVkIGZvciBhIDY0LWJpdCBmaWxlc3lzdGVtLiAgUGFzcyAtTyBleHRlbnRzIHRvICIKKyJyZWN0aWZ5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA2OQorbXNnaWQgIlRoZSBjbHVzdGVyIHNpemUgbWF5IG5vdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGJsb2NrIHNpemUuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDc1Cittc2dpZCAic3BlY2lmeWluZyBhIGNsdXN0ZXIgc2l6ZSByZXF1aXJlcyB0aGUgYmlnYWxsb2MgZmVhdHVyZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogVW5hYmxlIHRvIGdldCBkZXZpY2UgZ2VvbWV0cnkgZm9yICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsaWdubWVudCBpcyBvZmZzZXQgYnkgJWx1IGJ5dGVzLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBtYXkgcmVzdWx0IGluIHZlcnkgcG9vciBwZXJmb3JtYW5jZSwgKHJlKS1wYXJ0aXRpb25pbmcgc3VnZ2VzdGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCkiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiAlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCksIGZvcmNlZCB0byBjb250aW51ZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE4MAorbXNnaWQgIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0IGV4dGVudHMgZmVhdHVyZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIxODcKK21zZ2lkICIiCisiVGhlIHJlc2l6ZV9pbm9kZSBhbmQgbWV0YV9iZyBmZWF0dXJlcyBhcmUgbm90IGNvbXBhdGlibGUuXG4iCisiVGhleSBjYW4gbm90IGJlIGJvdGggZW5hYmxlZCBzaW11bHRhbmVvdXNseS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIxOTYKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiIKKyJTZWUgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQmlnYWxsb2MgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMDcKK21zZ2lkICJyZXNlcnZlZCBvbmxpbmUgcmVzaXplIGJsb2NrcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMTYKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNDAKK21zZ2lkICJGbGV4X2JnIGZlYXR1cmUgbm90IGVuYWJsZWQsIHNvIGZsZXhfYmcgc2l6ZSBtYXkgbm90IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplICVkIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgcmFpc2UgaW5vZGUgcmF0aW8/IgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCBzcGVjaWZ5IDwgMl4zMiBpbm9kZXMiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbm9kZV9zaXplICgldSkgKiBpbm9kZXNfY291bnQgKCV1KSB0b28gYmlnIGZvciBhXG4iCisiXHRmaWxlc3lzdGVtIHdpdGggJWxsdSBibG9ja3MsIHNwZWNpZnkgaGlnaGVyIGlub2RlX3JhdGlvICgtaSlcbiIKKyJcdG9yIGxvd2VyIGlub2RlIGNvdW50ICgtTikuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJPdmVyd3JpdGluZyBleGlzdGluZyBmaWxlc3lzdGVtOyB0aGlzIGNhbiBiZSB1bmRvbmUgdXNpbmcgdGhlIGNvbW1hbmQ6XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQzMgorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzZXR1cCB1bmRvIGZpbGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NTgKK21zZ2lkICJEaXNjYXJkaW5nIGRldmljZSBibG9ja3M6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NzQKK21zZ2lkICJmYWlsZWQgLSAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTk2Cittc2dpZCAid2hpbGUgc2V0dGluZyB1cCBzdXBlcmJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYxMgorbXNnaWQgIkRpc2NhcmQgc3VjY2VlZGVkIGFuZCB3aWxsIHJldHVybiAwcyAtIHNraXBwaW5nIGlub2RlIHRhYmxlIHdpcGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcyAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc1MgorbXNnaWQgIkFsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNzYwCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGFsbG9jYXRlIGZpbGVzeXN0ZW0gdGFibGVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2OQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgYmxvY2sgJWxsdSBhdCBlbmQgb2YgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI4MjYKK21zZ2lkICJ3aGlsZSByZXNlcnZpbmcgYmxvY2tzIGZvciBvbmxpbmUgcmVzaXplIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgzOCBtaXNjL3R1bmUyZnMuYzo3MTIKK21zZ2lkICJqb3VybmFsIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgam91cm5hbCB0byBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NjIgbWlzYy9ta2UyZnMuYzoyODkzIG1pc2MvdHVuZTJmcy5jOjc0MSBtaXNjL3R1bmUyZnMuYzo3NjAKK21zZ2lkICJkb25lXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyODY5Cittc2dpZCAiU2tpcHBpbmcgam91cm5hbCBjcmVhdGlvbiBpbiBzdXBlci1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJXUgYmxvY2tzKTogIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg4OQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MDEgbWlzYy90dW5lMmZzLmM6NTE2Cittc2dpZCAiIgorIlxuIgorIkVycm9yIHdoaWxlIGVuYWJsaW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZS4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaXMgZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZCBzZWNvbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkyMworbXNnaWQgIldyaXRpbmcgc3VwZXJibG9ja3MgYW5kIGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkzMAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nLCBoYWQgdHJvdWJsZSB3cml0aW5nIG91dCBzdXBlcmJsb2Nrcy4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTMyCittc2dpZCAiIgorImRvbmVcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rbG9zdCtmb3VuZC5jOjUwCittc2dpZCAiVXNhZ2U6IG1rbG9zdCtmb3VuZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvcGFydGluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICAlcyBkZXZpY2UuLi5cbiIKKyJcbiIKKyJQcmludHMgb3V0IHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGVhY2ggZ2l2ZW4gZGV2aWNlLlxuIgorIkZvciBleGFtcGxlOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvcGFydGluZm8uYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiAlczogJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgZ2VvbWV0cnkgb2YgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvcGFydGluZm8uYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IHNpemUgb2YgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvcGFydGluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaD0lM2Qgcz0lM2QgYz0lNGQgICBzdGFydD0lOGQgc2l6ZT0lOGx1IGVuZD0lOGRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTIKK21zZ2lkICJQbGVhc2UgcnVuIGUyZnNjayBvbiB0aGUgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWMgbWF4X21vdW50c19jb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdyb3VwXVxuIgorIlx0Wy1pIGludGVydmFsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbF9vcHRpb25zXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2ZWRfYmxvY2tzX3BlcmNlbnRdIFstbyBbXl1tb3VudF9vcHRpb25zWywuLi5dXSBbLXAgIgorIm1tcF91cGRhdGVfaW50ZXJ2YWxdXG4iCisiXHRbLXIgcmVzZXJ2ZWRfYmxvY2tzX2NvdW50XSBbLXUgdXNlcl0gWy1DIG1vdW50X2NvdW50XSBbLUwgdm9sdW1lX2xhYmVsXVxuIgorIlx0Wy1NIGxhc3RfbW91bnRlZF9kaXJdIFstTyBbXl1mZWF0dXJlWywuLi5dXVxuIgorIlx0Wy1RIHF1b3RhX29wdGlvbnNdXG4iCisiXHRbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXSBbLVQgbGFzdF9jaGVja190aW1lXSBbLVUgVVVJRF1cbiIKKyJcdFsgLUkgbmV3X2lub2RlX3NpemUgXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDMKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI2MQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIGV4dGVybmFsIGpvdXJuYWwiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjY3IG1pc2MvdHVuZTJmcy5jOjE5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6Mjc3IG1pc2MvdHVuZTJmcy5jOjE5NzQKK21zZ2lkICJGaWxlc3lzdGVtJ3MgVVVJRCBub3QgZm91bmQgb24gam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MzAxCittc2dpZCAiIgorIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MzEwCittc2dpZCAiSm91cm5hbCByZW1vdmVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MzU0Cittc2dpZCAid2hpbGUgcmVhZGluZyBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM2MgorbXNnaWQgIndoaWxlIGNsZWFyaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MzczCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQwNSBtaXNjL3R1bmUyZnMuYzo0MTgKK21zZ2lkICIoYW5kIHJlYm9vdCBhZnRlcndhcmRzISlcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ2NworbXNnaWQgIiIKKyJUaGUgaGFzX2pvdXJuYWwgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDc2Cittc2dpZCAiIgorIlRoZSBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldC4gIFBsZWFzZSBydW4gZTJmc2NrIGJlZm9yZSBjbGVhcmluZ1xuIgorInRoZSBoYXNfam91cm5hbCBmbGFnLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ5NQorbXNnaWQgIiIKKyJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnc3BhcnNlX3N1cGVyJyBub3Qgc3VwcG9ydGVkXG4iCisiZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIG1ldGFfYmcgZmVhdHVyZSBlbmFibGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUwOAorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbid0XG4iCisiYmUgc2V0IGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgb3JcbiIKKyJyZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NTM1Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2Fubm90XG4iCisiYmUgZGlzYWJsZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmVhZG9ubHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NTQzCittc2dpZCAiRXJyb3Igd2hpbGUgcmVhZGluZyBiaXRtYXBzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hZ2ljIG51bWJlciBpbiBNTVAgYmxvY2sgZG9lcyBub3QgbWF0Y2guIGV4cGVjdGVkOiAleCwgYWN0dWFsOiAleFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1NworbXNnaWQgIndoaWxlIHJlYWRpbmcgTU1QIGJsb2NrLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1ODkKK21zZ2lkICIiCisiQ2xlYXJpbmcgdGhlIGZsZXhfYmcgZmxhZyB3b3VsZCBjYXVzZSB0aGUgdGhlIGZpbGVzeXN0ZW0gdG8gYmVcbiIKKyJpbmNvbnNpc3RlbnQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NjAwCittc2dpZCAiIgorIlRoZSBodWdlX2ZpbGUgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NjYwCittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6ICdecXVvdGEnIG9wdGlvbiBvdmVycmlkZXMgJy1RJ2FyZ3VtZW50cy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MDUKK21zZ2lkICJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBhIGpvdXJuYWwuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgb24gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBvbiBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgYWRkaW5nIGZpbGVzeXN0ZW0gdG8gam91cm5hbCBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3NDMKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIGlub2RlOiAiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NzU3Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6ODMyCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIHF1b3RhIG9wdGlvbnMhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6ODU0Cittc2dpZCAiIgorIlxuIgorIkJhZCBxdW90YSBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJGb2xsb3dpbmcgdmFsaWQgcXVvdGEgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIChwYXNzIGJ5IHNlcGFyYXRpbmcgd2l0aCAiCisiY29tbWEpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHBhcnNlIGRhdGUvdGltZSBzcGVjaWZpZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk0MiBtaXNjL3R1bmUyZnMuYzo5NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1vdW50cyBjb3VudCAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZXJyb3IgYmVoYXZpb3IgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpZC9ncm91cCBuYW1lIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW50ZXJ2YWwgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9jayByYXRpbyAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNzUKK21zZ2lkICItbyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDg0Cittc2dpZCAiLU8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdWlkL3VzZXIgbmFtZSAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIklub2RlIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtbXBfdXBkYXRlX2ludGVydmFsIHRvbyBiaWc6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kXG4iCittc2dpZF9wbHVyYWwgIiIKKyJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpZGU6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaXBlLXdpZHRoOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBoYXNoIGFsZ29yaXRobTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSB0byAlcyAoJWQpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTMzMQorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0Y2xlYXJfbW1wXG4iCisiXHRoYXNoX2FsZz08aGFzaCBhbGdvcml0aG0+XG4iCisiXHRtb3VudF9vcHRzPTxleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnM+XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgY2h1bmsgc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGVfd2lkdGg9PFJBSUQgc3RyaWRlKmRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0XnRlc3RfZnNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzk4Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgaW5vZGUgYml0bWFwXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgwMworbXNnaWQgIkZhaWxlZCB0byByZWFkIGJsb2NrIGJpdG1hcFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjAgcmVzaXplL3Jlc2l6ZTJmcy5jOjkzMQorbXNnaWQgImJsb2NrcyB0byBiZSBtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODIzCittc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrIGJpdG1hcCB3aGVuIGluY3JlYXNpbmcgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjkKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGluY3JlYXNlIGlub2RlIHNpemUgXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgzNAorbXNnaWQgIkZhaWxlZCB0byByZWxvY2F0ZSBibG9ja3MgZHVyaW5nIGlub2RlIHJlc2l6ZSBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODY2Cittc2dpZCAiIgorIkVycm9yIGluIHJlc2l6aW5nIHRoZSBpbm9kZSBzaXplLlxuIgorIlJ1biBlMnVuZG8gdG8gdW5kbyB0aGUgZmlsZSBzeXN0ZW0gY2hhbmdlcy4gXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTg5MworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGRiIGZpbGVuYW1lXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGVsZXRlICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIHVuZG8gdGhlIHR1bmUyZnMgb3BlcmF0aW9uIHBsZWFzZSBydW4gdGhlIGNvbW1hbmRcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGJsb2NrIG1hZ2ljIGlzIGJhZC4gVHJ5IHRvIGZpeCBpdCBieSBydW5uaW5nOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA3NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBpcyBhbHJlYWR5ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwODEKK21zZ2lkICJTaHJpbmtpbmcgaW5vZGUgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlub2RlIHNpemUgJWx1IChtYXggJWQpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3VycmVudCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBlcnJvciBiZWhhdmlvciB0byAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgZ2lkIHRvICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgaXMgdG9vIGJpZyAoJWx1KSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnRhZ2UgdG8gJWclJSAoJWxsdSBibG9ja3MpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MgY291bnQgaXMgdG9vIGJpZyAoJWxsdSkiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4NworbXNnaWQgIiIKKyJcbiIKKyJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBzcGFyc2Ugc3VwZXJibG9ja3MuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE5MQorbXNnaWQgIiIKKyJcbiIKKyJTZXR0aW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCBzdXBwb3J0ZWRcbiIKKyJmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgbWV0YV9iZyBmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBzZXQuICAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjA3Cittc2dpZCAiIgorIlxuIgorIkNsZWFyaW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHRpbWUgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdG8gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHVpZCB0byAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjUzCittc2dpZCAiRXJyb3IgaW4gdXNpbmcgY2xlYXJfbW1wLiBJdCBtdXN0IGJlIHVzZWQgd2l0aCAtZlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNzEKK21zZ2lkICIiCisiVGhlIHF1b3RhIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjkyCittc2dpZCAiVGhlIFVVSUQgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzIyCittc2dpZCAiSW52YWxpZCBVVUlEIGZvcm1hdFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzMzcKK21zZ2lkICJOZWVkIHRvIHVwZGF0ZSBqb3VybmFsIHN1cGVyYmxvY2suXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM1OAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM2NgorbXNnaWQgIiIKKyJDaGFuZ2luZyB0aGUgaW5vZGUgc2l6ZSBub3Qgc3VwcG9ydGVkIGZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBmbGV4X2JnXG4iCisiZmVhdHVyZSBlbmFibGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbm9kZSBzaXplICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzODIKK21zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaWRlIHNpemUgdG8gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaXBlIHdpZHRoIHRvICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucyB0byAnJXMnXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6OTMKK21zZ2lkICI8cHJvY2VlZGluZz5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICJQcm9jZWVkIGFueXdheSAob3Igd2FpdCAlZCBzZWNvbmRzKSA/ICh5LG4pICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoxMDEKK21zZ2lkICJQcm9jZWVkIGFueXdheT8gKHksbikgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW91bnRlZCBvbiAlcyBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vdW50ZWQgb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0Y3JlYXRlZCBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vZGlmaWVkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGb3VuZCBhICVzIHBhcnRpdGlvbiB0YWJsZSBpbiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSAlcyBkb2VzIG5vdCBleGlzdCBhbmQgbm8gc2l6ZSB3YXMgc3BlY2lmaWVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyByZWd1bGFyIGZpbGUgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MjE2Cittc2dpZCAiIgorIlxuIgorIlRoZSBkZXZpY2UgYXBwYXJlbnRseSBkb2VzIG5vdCBleGlzdDsgZGlkIHlvdSBzcGVjaWZ5IGl0IGNvcnJlY3RseT9cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGNvbnRhaW5zIGEgJXMgZmlsZSBzeXN0ZW0gbGFiZWxsZWQgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjb250YWlucyBhICVzIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGVudGlyZSBkZXZpY2UsIG5vdCBqdXN0IG9uZSBwYXJ0aXRpb24hXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MzIzCittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IG1ha2UgYSAlcyBoZXJlIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjMzNQorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjM1MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBqb3VybmFsIG9wdGlvbnMhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3QgZmluZCBqb3VybmFsIGRldmljZSBtYXRjaGluZyAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjQwMworbXNnaWQgIiIKKyJcbiIKKyJCYWQgam91cm5hbCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJKb3VybmFsIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBqb3VybmFsIG9wdGlvbnMgYXJlOlxuIgorIlx0c2l6ZT08am91cm5hbCBzaXplIGluIG1lZ2FieXRlcz5cbiIKKyJcdGRldmljZT08am91cm5hbCBkZXZpY2U+XG4iCisiXHRsb2NhdGlvbj08am91cm5hbCBsb2NhdGlvbj5cbiIKKyJcbiIKKyJUaGUgam91cm5hbCBzaXplIG11c3QgYmUgYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzo0MzQKK21zZ2lkICIiCisiXG4iCisiRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVGhlIHJlcXVlc3RlZCBqb3VybmFsIHNpemUgaXMgJWQgYmxvY2tzOyBpdCBtdXN0IGJlXG4iCisiYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBibG9ja3MuICBBYm9ydGluZy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzo0NDkKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBzaXplIHRvbyBiaWcgZm9yIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGVzeXN0ZW0gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNoZWNrZWQgZXZlcnkgJWQgbW91bnRzIG9yXG4iCisiJWcgZGF5cywgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgVXNlIHR1bmUyZnMgLWMgb3IgLWkgdG8gb3ZlcnJpZGUuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWRdIFstcCBwaWRmaWxlXSBbLXMgc29ja2V0cGF0aF0gWy1UIHRpbWVvdXRdXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyBbLXJ8dF0gWy1uIG51bV0gWy1zIHNvY2tldHBhdGhdXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyAta1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoxNTUKK21zZ2lkICJiYWQgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoxNzMKK21zZ2lkICJjb25uZWN0IgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoxOTIKK21zZ2lkICJ3cml0ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MjAwCittc2dpZCAicmVhZCBjb3VudCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MjA2Cittc2dpZCAiYmFkIHJlc3BvbnNlIGxlbmd0aCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInV1aWRkIGRhZW1vbiBhbHJlYWR5IHJ1bm5pbmcgYXQgcGlkICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgdW5peCBzdHJlYW0gc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGJpbmQgdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsaXN0ZW4gb24gdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGZyb20gY2xpZW50LCBsZW4gPSAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlcmF0aW9uICVkLCBpbmNvbWluZyBudW0gPSAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCByYW5kb20gVVVJRDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCAlZCBzdWJzZXF1ZW50IFVVSURzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtaXNjL3V1aWRkLmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCAlZCBVVUlEJ3M6XG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo0NzcgbWlzYy91dWlkZC5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MzQgbWlzYy91dWlkZC5jOjU2MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjYWxsaW5nIHV1aWRkIGRhZW1vbiAoJXMpOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICIlcyBhbmQgc3Vic2VxdWVudCAlZCBVVUlEc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogbWlzYy91dWlkZC5jOjU0OAorbXNnaWQgIkxpc3Qgb2YgVVVJRCdzOlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCByZXBseSBsZW5ndGggZnJvbSBzZXJ2ZXIgJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGtpbGwgdXVpZGQgcnVubmluZyBhdCBwaWQgJWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJLaWxsZWQgdXVpZGQgcnVubmluZyBhdCBwaWQgJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRnZW4uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1yXSBbLXRdXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMgorbXNnaWQgIiMgRXh0ZW50IGR1bXA6XG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIjXHROdW09JWxsdSwgU2l6ZT0lbGx1LCBDdXJzb3I9JWxsdSwgU29ydGVkPSVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1kIGRlYnVnX2ZsYWdzXSBbLWZdIFstRl0gWy1NXSBbLVBdIFstcF0gZGV2aWNlIFtuZXdfc2l6ZV1cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjY2Cittc2dpZCAiRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjY5Cittc2dpZCAiUmVsb2NhdGluZyBibG9ja3MiCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo3MgorbXNnaWQgIlNjYW5uaW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzUKK21zZ2lkICJVcGRhdGluZyBpbm9kZSByZWZlcmVuY2VzIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzgKK21zZ2lkICJNb3ZpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo4MQorbXNnaWQgIlVua25vd24gcGFzcz8hPyIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZ2luIHBhc3MgJWQgKG1heCA9ICVsdSlcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjE1NQorbXNnaWQgIiIKKyJcbiIKKyJSZXNpemluZyBiaWdhbGxvYyBmaWxlIHN5c3RlbXMgaGFzIG5vdCBiZWVuIGZ1bGx5IHRlc3RlZC4gIFByb2NlZWQgYXRcbiIKKyJ5b3VyIG93biByaXNrISAgVXNlIHRoZSBmb3JjZSBvcHRpb24gaWYgeW91IHdhbnQgdG8gZ28gYWhlYWQgYW55d2F5LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIG9wZW5pbmcgJXMiCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZ2V0dGluZyBzdGF0IGluZm9ybWF0aW9uIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1mICVzJyBmaXJzdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RpbWF0ZWQgbWluaW11bSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtOiAlbGx1XG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBuZXcgc2l6ZTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQyMQorbXNnaWQgIk5ldyBzaXplIHRvbyBsYXJnZSB0byBiZSBleHByZXNzZWQgaW4gMzIgYml0c1xuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5ldyBzaXplIHNtYWxsZXIgdGhhbiBtaW5pbXVtICglbGx1KVxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDM1Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgbGVuZ3RoIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29udGFpbmluZyBwYXJ0aXRpb24gKG9yIGRldmljZSkgaXMgb25seSAlbGx1ICglZGspIGJsb2Nrcy5cbiIKKyJZb3UgcmVxdWVzdGVkIGEgbmV3IHNpemUgb2YgJWxsdSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIGlzIGFscmVhZHkgJWxsdSAoJWRrKSBibG9ja3MgbG9uZy4gIE5vdGhpbmcgdG8gZG8hXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXppbmcgdGhlIGZpbGVzeXN0ZW0gb24gJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlc2l6ZSAlcyIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1meSAlcycgdG8gZml4IHRoZSBmaWxlc3lzdGVtXG4iCisiYWZ0ZXIgdGhlIGFib3J0ZWQgcmVzaXplIG9wZXJhdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gb24gJXMgaXMgbm93ICVsbHUgKCVkaykgYmxvY2tzIGxvbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHRydW5jYXRlICVzIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4MgorbXNnaWQgImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemUgd2l0aCBzcGFyc2Vfc3VwZXIyIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4NworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXM7IG9uLWxpbmUgcmVzaXppbmcgcmVxdWlyZWRcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6OTEKK21zZ2lkICJPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTYKK21zZ2lkICJGaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMjUKK21zZ2lkICJOb3QgZW5vdWdoIHJlc2VydmVkIGdkdCBibG9ja3MgZm9yIHJlc2l6aW5nIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMzIKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCByZXNpemluZyBhIGZpbGUgc3lzdGVtIHRoaXMgbGFyZ2UiCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBtb3VudHBvaW50ICVzIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2xkIHJlc2l6ZSBpbnRlcmZhY2UgcmVxdWVzdGVkLlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNjQgcmVzaXplL29ubGluZS5jOjE4MQorbXNnaWQgIlBlcm1pc3Npb24gZGVuaWVkIHRvIHJlc2l6ZSBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNjcgcmVzaXplL29ubGluZS5jOjE4NworbXNnaWQgIldoaWxlIGNoZWNraW5nIGZvciBvbi1saW5lIHJlc2l6aW5nIHN1cHBvcnQiCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjE4NAorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlBlcmZvcm1pbmcgYW4gb24tbGluZSByZXNpemUgb2YgJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjIzMworbXNnaWQgIldoaWxlIHRyeWluZyB0byBleHRlbmQgdGhlIGxhc3QgZ3JvdXAiCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gYWRkIGdyb3VwICMlZCIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXMsIGFuZCBvbi1saW5lIHJlc2l6aW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gIgorInRoaXMgc3lzdGVtLlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5vZGVzICglbGx1KSBtdXN0IGJlIGxlc3MgdGhhbiAldSIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6NjkxCittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo5MzYKK21zZ2lkICJtZXRhLWRhdGEgYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoxMDM5IHJlc2l6ZS9yZXNpemUyZnMuYzoxODM2Cittc2dpZCAibmV3IG1ldGEgYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMDU2Cittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbiEgIE5vIHNiIGluIGxhc3Qgc3VwZXJfc3BhcnNlIGJnP1xuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMDYxCittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbiEgIFVuZXhwZWN0ZWQgb2xkX2Rlc2MgaW4gc3VwZXJfc3BhcnNlIGJnP1xuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMTM5Cittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbjogcmVzaXplIGlub2RlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExCittc2dpZCAiRVhUMkZTIExpYnJhcnkgdmVyc2lvbiAxLjQyLjEzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0Ml9maWxzeXMgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfc2NhbiBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHVuaXggaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19tYW5hZ2VyIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJsb2NrX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZ2VuZXJpY19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdGVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGRpcmVjdG9yeSBibG9jayBsaXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGljb3VudCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBQb3dlcnF1ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0MiBmaWxlIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIEV4dDIgSW1hZ2UgSGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGUgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBoYW5kbGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzEKK21zZ2lkICJGaWxlc3lzdGVtIHJldmlzaW9uIHRvbyBoaWdoIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMgorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgdG8gZmlsZXN5c3RlbSBvcGVuZWQgcmVhZC1vbmx5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMworbXNnaWQgIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM1Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzYKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNworbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzgKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM5Cittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQwCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYSBibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQxCittc2dpZCAiQ2FuJ3QgcmVhZCBhIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDIKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDMKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NAorbXNnaWQgIkNhbid0IHJlYWQgbmV4dCBpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDUKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bmV4cGVjdGVkIGJsb2NrIHNpemUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ2Cittc2dpZCAiRVhUMiBkaXJlY3RvcnkgY29ycnVwdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NworbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDgKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIGJsb2NrIHRvIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgd3JpdGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ5Cittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiB0aGUgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MAorbXNnaWQgIklub2RlIGJpdG1hcCBub3QgbG9hZGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MQorbXNnaWQgIkJsb2NrIGJpdG1hcCBub3QgbG9hZGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MgorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NAorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gYnVpbGQgcHJvcG9zZWQgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTYKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTgKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYwCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYyCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgYmxvY2sgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MworbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGlub2RlIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjQKK21zZ2lkICJJbGxlZ2FsIGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NQorbXNnaWQgIklsbGVnYWwgZG91Ymx5IGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NgorbXNnaWQgIklsbGVnYWwgdHJpcGx5IGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NworbXNnaWQgIkJsb2NrIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjgKK21zZ2lkICJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY5Cittc2dpZCAiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcwCittc2dpZCAiQSBibG9jayBncm91cCBpcyBtaXNzaW5nIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MQorbXNnaWQgIlRoZSBleHQyIHN1cGVyYmxvY2sgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzIKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjczCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc0Cittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NQorbXNnaWQgIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzYKK21zZ2lkICJUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBub3QgaGFuZGxlIHRoaXMgY2FzZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzcKK21zZ2lkICJUaGUgaW5vZGUgaXMgZnJvbSBhIGJhZCBibG9jayBpbiB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc4Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzkKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCByZWFkLW9ubHkgZmVhdHVyZShzKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODAKK21zZ2lkICJJTyBDaGFubmVsIGZhaWxlZCB0byBzZWVrIG9uIHJlYWQgb3Igd3JpdGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgxCittc2dpZCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODMKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgYmxvY2sgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NAorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbm9kZSBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg1Cittc2dpZCAiRXh0MiBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg2Cittc2dpZCAiVG9vIG1hbnkgcmVmZXJlbmNlcyBpbiB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODcKK21zZ2lkICJGaWxlIG5vdCBmb3VuZCBieSBleHQyX2xvb2t1cCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODgKK21zZ2lkICJGaWxlIG9wZW4gcmVhZC1vbmx5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OQorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTAKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTEKK21zZ2lkICJVbmltcGxlbWVudGVkIGV4dDIgbGlicmFyeSBmdW5jdGlvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTIKK21zZ2lkICJVc2VyIGNhbmNlbCByZXF1ZXN0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkzCittc2dpZCAiRXh0MiBmaWxlIHRvbyBiaWciCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk0Cittc2dpZCAiU3VwcGxpZWQgam91cm5hbCBkZXZpY2Ugbm90IGEgYmxvY2sgZGV2aWNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk2Cittc2dpZCAiSm91cm5hbCBtdXN0IGJlIGF0IGxlYXN0IDEwMjQgYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NworbXNnaWQgIlVuc3VwcG9ydGVkIGpvdXJuYWwgdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTgKK21zZ2lkICJFcnJvciBsb2FkaW5nIGV4dGVybmFsIGpvdXJuYWwiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk5Cittc2dpZCAiSm91cm5hbCBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMAorbXNnaWQgIkRpcmVjdG9yeSBoYXNoIHVuc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDEKK21zZ2lkICJJbGxlZ2FsIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBudW1iZXIiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMgorbXNnaWQgIkNhbm5vdCBjcmVhdGUgZmlsZXN5c3RlbSB3aXRoIHJlcXVlc3RlZCBudW1iZXIgb2YgaW5vZGVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDMKK21zZ2lkICJFMmltYWdlIHNuYXBzaG90IG5vdCBpbiB1c2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNAorbXNnaWQgIlRvbyBtYW55IHJlc2VydmVkIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDUKK21zZ2lkICJSZXNpemUgaW5vZGUgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA2Cittc2dpZCAiVHJpZWQgdG8gc2V0IGJsb2NrIGJtYXAgd2l0aCBtaXNzaW5nIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDcKK21zZ2lkICJUREI6IFN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOAorbXNnaWQgIlREQjogQ29ycnVwdCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA5Cittc2dpZCAiVERCOiBJTyBFcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEwCittc2dpZCAiVERCOiBMb2NraW5nIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTEKK21zZ2lkICJUREI6IE91dCBvZiBtZW1vcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMgorbXNnaWQgIlREQjogUmVjb3JkIGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEzCittc2dpZCAiVERCOiBMb2NrIGV4aXN0cyBvbiBvdGhlciBrZXlzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTQKK21zZ2lkICJUREI6IEludmFsaWQgcGFyYW1ldGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTUKK21zZ2lkICJUREI6IFJlY29yZCBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE2Cittc2dpZCAiVERCOiBXcml0ZSBub3QgcGVybWl0dGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTcKK21zZ2lkICJFeHQyZnMgZGlyZWN0b3J5IGJsb2NrIGxpc3QgaXMgZW1wdHkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOAorbXNnaWQgIkF0dGVtcHQgdG8gbW9kaWZ5IGEgYmxvY2sgbWFwcGluZyB2aWEgYSByZWFkLW9ubHkgYmxvY2sgaXRlcmF0b3IiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgc2F2ZWQgcGF0aCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgZ2VuZXJpYyBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgaW5vZGUgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzEzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE0IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE1IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE2IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE3IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE4IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzAKK21zZ2lkICJDb3JydXB0IGV4dGVudCBoZWFkZXIiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMQorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzIKK21zZ2lkICJDb3JydXB0IGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMzCittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiBleHRlbnQgbWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzQKK21zZ2lkICJJbm9kZSBkb2VzIG5vdCB1c2UgZXh0ZW50cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM1Cittc2dpZCAiTm8gJ25leHQnIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM2Cittc2dpZCAiTm8gJ3ByZXZpb3VzJyBleHRlbnQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNworbXNnaWQgIk5vICd1cCcgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzgKK21zZ2lkICJObyAnZG93bicgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzkKK21zZ2lkICJObyBjdXJyZW50IG5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MAorbXNnaWQgIkV4dDJmcyBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQxCittc2dpZCAiTm8gcm9vbSB0byBpbnNlcnQgZXh0ZW50IGluIG5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MgorbXNnaWQgIlNwbGl0dGluZyB3b3VsZCByZXN1bHQgaW4gZW1wdHkgbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQzCittc2dpZCAiRXh0ZW50IG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ2Cittc2dpZCAiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ4Cittc2dpZCAiRmlsZXN5c3RlbSB0b28gbGFyZ2UgdG8gdXNlIGxlZ2FjeSBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDkKK21zZ2lkICJNTVA6IGludmFsaWQgbWFnaWMgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTAKK21zZ2lkICJNTVA6IGRldmljZSBjdXJyZW50bHkgYWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTIKK21zZ2lkICJNTVA6IGJsb2NrIG51bWJlciBiZXlvbmQgZmlsZXN5c3RlbSByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTQKK21zZ2lkICJNTVA6IGZpbGVzeXN0ZW0gc3RpbGwgaW4gdXNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTUKK21zZ2lkICJNTVA6IG9wZW4gd2l0aCBPX0RJUkVDVCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NgorbXNnaWQgIkJsb2NrIGdyb3VwIGRlc2NyaXB0b3Igc2l6ZSBpbmNvcnJlY3QiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NworbXNnaWQgIklub2RlIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGlub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTgKK21zZ2lkICJJbm9kZSBiaXRtYXAgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTkKK21zZ2lkICJFeHRlbnQgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZXh0ZW50IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjAKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgZG9lcyBub3QgaGF2ZSBzcGFjZSBmb3IgY2hlY2tzdW0iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MQorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MgorbXNnaWQgIkV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYzCittc2dpZCAiU3VwZXJibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBzdXBlcmJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjQKK21zZ2lkICJVbmtub3duIGNoZWNrc3VtIGFsZ29yaXRobSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY1Cittc2dpZCAiTU1QIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIE1NUCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY2Cittc2dpZCAiRXh0MiBmaWxlIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjExCittc2dpZCAiUHJvZmlsZSB2ZXJzaW9uIDAuMCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX25vZGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTMKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE0Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTUKK21zZ2lkICJBdHRlbXB0IHRvIGFkZCBhIHJlbGF0aW9uIHRvIG5vZGUgd2hpY2ggaXMgbm90IGEgc2VjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNgorbXNnaWQgIkEgcHJvZmlsZSBzZWN0aW9uIGhlYWRlciBoYXMgYSBub24temVybyB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNworbXNnaWQgIkJhZCBsaW5rZWQgbGlzdCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTgKK21zZ2lkICJCYWQgZ3JvdXAgbGV2ZWwgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE5Cittc2dpZCAiQmFkIHBhcmVudCBwb2ludGVyIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlIGl0ZXJhdG9yIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIxCittc2dpZCAiQ2FuJ3Qgc2V0IHZhbHVlIG9uIHNlY3Rpb24gbm9kZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIHByb2ZpbGUgbGlicmFyeSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMworbXNnaWQgIkF0dGVtcHQgdG8gbW9kaWZ5IHJlYWQtb25seSBwcm9maWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI0Cittc2dpZCAiUHJvZmlsZSBzZWN0aW9uIGhlYWRlciBub3QgYXQgdG9wIGxldmVsIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI1Cittc2dpZCAiU3ludGF4IGVycm9yIGluIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjYKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSByZWxhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNworbXNnaWQgIkV4dHJhIGNsb3NpbmcgYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyOAorbXNnaWQgIk1pc3Npbmcgb3BlbiBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI5Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfdCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3NlY3Rpb25fdCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMQorbXNnaWQgIkl0ZXJhdGlvbiB0aHJvdWdoIGFsbCB0b3AgbGV2ZWwgc2VjdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMyCittc2dpZCAiSW52YWxpZCBwcm9maWxlX3NlY3Rpb24gb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMzCittc2dpZCAiTm8gbW9yZSBzZWN0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNAorbXNnaWQgIkJhZCBuYW1lc2V0IHBhc3NlZCB0byBxdWVyeSByb3V0aW5lIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzYKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzcKK21zZ2lkICJDb3VsZG4ndCBvcGVuIHByb2ZpbGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOAorbXNnaWQgIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzkKK21zZ2lkICJJbnZhbGlkIGJvb2xlYW4gdmFsdWUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDAKK21zZ2lkICJJbnZhbGlkIGludGVnZXIgdmFsdWUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDEKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX2RhdGFfdCIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvcG8vZW5AYm9sZHF1b3QuaGVhZGVyIGIvcG8vZW5AYm9sZHF1b3QuaGVhZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZGI2YTAKLS0tIC9kZXYvbnVsbAorKysgYi9wby9lbkBib2xkcXVvdC5oZWFkZXIKQEAgLTAsMCArMSwyNSBAQAorIyBBbGwgdGhpcyBjYXRhbG9nICJ0cmFuc2xhdGVzIiBhcmUgcXVvdGF0aW9uIGNoYXJhY3RlcnMuCisjIFRoZSBtc2dpZHMgbXVzdCBiZSBBU0NJSSBhbmQgdGhlcmVmb3JlIGNhbm5vdCBjb250YWluIHJlYWwgcXVvdGF0aW9uCisjIGNoYXJhY3RlcnMsIG9ubHkgc3Vic3RpdHV0ZXMgbGlrZSBncmF2ZSBhY2NlbnQgKDB4NjApLCBhcG9zdHJvcGhlICgweDI3KQorIyBhbmQgZG91YmxlIHF1b3RlICgweDIyKS4gVGhlc2Ugc3Vic3RpdHV0ZXMgbG9vayBzdHJhbmdlOyBzZWUKKyMgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vjcy9xdW90ZXMuaHRtbAorIworIyBUaGlzIGNhdGFsb2cgdHJhbnNsYXRlcyBncmF2ZSBhY2NlbnQgKDB4NjApIGFuZCBhcG9zdHJvcGhlICgweDI3KSB0bworIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpLgorIyBJdCBhbHNvIHRyYW5zbGF0ZXMgcGFpcnMgb2YgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KQorIyBhbmQgcGFpcnMgb2YgcXVvdGF0aW9uIG1hcmsgKDB4MjIpIHRvCisjIGxlZnQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUMpIGFuZCByaWdodCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxRCkuCisjCisjIFdoZW4gb3V0cHV0IHRvIGFuIFVURi04IHRlcm1pbmFsLCB0aGUgcXVvdGF0aW9uIGNoYXJhY3RlcnMgYXBwZWFyIHBlcmZlY3RseS4KKyMgV2hlbiBvdXRwdXQgdG8gYW4gSVNPLTg4NTktMSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzIChieSBpY29udiBpbiBnbGliYyAyLjIgb3IgbmV3ZXIpIG9yIHRvCisjIGdyYXZlL2FjdXRlIGFjY2VudCAoYnkgbGliaWNvbnYpLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCisjIFdoZW4gb3V0cHV0IHRvIGFuIEFTQ0lJIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMsIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKyMKKyMgVGhpcyBjYXRhbG9nIGZ1cnRoZXJtb3JlIGRpc3BsYXlzIHRoZSB0ZXh0IGJldHdlZW4gdGhlIHF1b3RhdGlvbiBtYXJrcyBpbgorIyBib2xkIGZhY2UsIGFzc3VtaW5nIHRoZSBWVDEwMC9YVGVybSBlc2NhcGUgc2VxdWVuY2VzLgorIwpkaWZmIC0tZ2l0IGEvcG8vZW5AcXVvdC5oZWFkZXIgYi9wby9lbkBxdW90LmhlYWRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY0N2ZjCi0tLSAvZGV2L251bGwKKysrIGIvcG8vZW5AcXVvdC5oZWFkZXIKQEAgLTAsMCArMSwyMiBAQAorIyBBbGwgdGhpcyBjYXRhbG9nICJ0cmFuc2xhdGVzIiBhcmUgcXVvdGF0aW9uIGNoYXJhY3RlcnMuCisjIFRoZSBtc2dpZHMgbXVzdCBiZSBBU0NJSSBhbmQgdGhlcmVmb3JlIGNhbm5vdCBjb250YWluIHJlYWwgcXVvdGF0aW9uCisjIGNoYXJhY3RlcnMsIG9ubHkgc3Vic3RpdHV0ZXMgbGlrZSBncmF2ZSBhY2NlbnQgKDB4NjApLCBhcG9zdHJvcGhlICgweDI3KQorIyBhbmQgZG91YmxlIHF1b3RlICgweDIyKS4gVGhlc2Ugc3Vic3RpdHV0ZXMgbG9vayBzdHJhbmdlOyBzZWUKKyMgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vjcy9xdW90ZXMuaHRtbAorIworIyBUaGlzIGNhdGFsb2cgdHJhbnNsYXRlcyBncmF2ZSBhY2NlbnQgKDB4NjApIGFuZCBhcG9zdHJvcGhlICgweDI3KSB0bworIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpLgorIyBJdCBhbHNvIHRyYW5zbGF0ZXMgcGFpcnMgb2YgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KQorIyBhbmQgcGFpcnMgb2YgcXVvdGF0aW9uIG1hcmsgKDB4MjIpIHRvCisjIGxlZnQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUMpIGFuZCByaWdodCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxRCkuCisjCisjIFdoZW4gb3V0cHV0IHRvIGFuIFVURi04IHRlcm1pbmFsLCB0aGUgcXVvdGF0aW9uIGNoYXJhY3RlcnMgYXBwZWFyIHBlcmZlY3RseS4KKyMgV2hlbiBvdXRwdXQgdG8gYW4gSVNPLTg4NTktMSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzIChieSBpY29udiBpbiBnbGliYyAyLjIgb3IgbmV3ZXIpIG9yIHRvCisjIGdyYXZlL2FjdXRlIGFjY2VudCAoYnkgbGliaWNvbnYpLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCisjIFdoZW4gb3V0cHV0IHRvIGFuIEFTQ0lJIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMsIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKyMKZGlmZiAtLWdpdCBhL3BvL2VvLmdtbyBiL3BvL2VvLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTVhNjc1Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vZW8uZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2VvLnBvIGIvcG8vZW8ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI4MjI1MAotLS0gL2Rldi9udWxsCisrKyBiL3BvL2VvLnBvCkBAIC0wLDAgKzEsNjg3NSBAQAorIyBFc3BlcmFudG8gdHJhbnNsYXRpb25zIGZvciBlMmZzcHJvZ3MuCisjIENvcHlyaWdodCAoQykgMjAxNCBUaGVvZG9yZSBUc28gKG1zZ2lkcykKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGUyZnNwcm9ncyBwYWNrYWdlLgorIworIyBQcmF2ZSwgInBhxZ1vIiBuZSBlc3RhcyB0cmFkdWtvIGRlICJwYXNzIiwKKyMgc2VkIMSdaSB0cmUga2xhcmFzIGthaiBib25lIGVzcHJpbWFzIGxhIGZhcmFkb24uCisjCisjIEJlbm5vIFNjaHVsZW5iZXJnIDxiZW5ub0B2ZXJ0YWFsdC5ubD4sIDIwMTIsIDIwMTMsIDIwMTQuCisjCisjLiBUaGUgc3RyaW5ncyBpbiBlMmZzY2sncyBwcm9ibGVtLmMgY2FuIGJlIHZlcnkgaGFyZCB0byB0cmFuc2xhdGUsCisjLiBzaW5jZSB0aGUgc3RyaW5ncyBhcmUgZXhwYW5kZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgRmlyc3Qgb2YgYWxsLAorIy4gdGhlcmUgaXMgYW4gQC1leHBhbnNpb24sIHdoZXJlIHN0cmluZ3MgbGlrZSAiQGkiIGFyZSBleHBhbmRlZCB0bworIy4gImlub2RlIiwgYW5kIHNvIG9uLiAgSW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRyYW5zbGF0b3JzLCB0aGUKKyMuIGUyZnNwcm9ncyBwbyB0ZW1wbGF0ZSBmaWxlIGhhcyBiZWVuIGVuaGFuY2VkIHdpdGggY29tbWVudHMgdGhhdCBzaG93CisjLiB0aGUgQC1leHBhbnNpb24sIGZvciB0aGUgc3RyaW5ncyBpbiB0aGUgcHJvYmxlbS5jIGZpbGUuCisjLgorIy4gVHJhbnNsYXRvcnMgYXJlIGZyZWUgdG8gdXNlIHRoZSBALWV4cGFuc2lvbiBmYWNpbGl0eSBpZiB0aGV5IHNvCisjLiBjaG9vc2UsIGJ5IHByb3ZpZGluZyB0cmFuc2xhdGlvbnMgZm9yIHN0cmluZ3MgaW4gZTJmc2NrL21lc3NhZ2UuYy4KKyMuIFRoZXNlIHRyYW5zbGF0aW9uIGNhbiBjb21wbGV0ZWx5IHJlcGxhY2UgYW4gZXhwYW5zaW9uOyBmb3IgZXhhbXBsZSwKKyMuIGlmICJiYmxvY2siICh3aGljaCBpbmRpY2F0ZWQgdGhhdCAiQGIiIHdvdWxkIGJlIGV4cGFuZGVkIHRvICJibG9jayIpCisjLiBpcyB0cmFuc2xhdGVkIGFzICJkZGF0ZW52ZXJsdXN0IiwgdGhlbiAiQGQiIHdpbGwgYmUgZXhwYW5kZWQgdG8KKyMuICJkYXRlbnZlcmx1c3QiLiAgQWx0ZXJuYXRpdmVseSwgdHJhbnNsYXRvcnMgY2FuIHNpbXBseSBub3QgdXNlIHRoZQorIy4gQC1leHBhbnNpb24gZmFjaWxpdHkgYXQgYWxsLgorIy4KKyMuIFRoZSBzZWNvbmQgZXhwYW5zaW9uIHdoaWNoIGlzIGRvbmUgZm9yIGUyZnNjaydzIHByb2JsZW0uYyBtZXNzYWdlcyBpcworIy4gYSBkeW5hbWljICUtZXhwYW5zaW9uLCB3aGljaCBleHBhbmRzICVpIGFzIGFuIGlub2RlIG51bWJlciwgYW5kIHNvCisjLiBvbi4gIEEgdGFibGUgb2YgdGhlc2UgZXhwYW5zaW9ucyBjYW4gYmUgZm91bmQgYmVsb3cuICBOb3RlIHRoYXQKKyMuICUtZXhwcmVzc2lvbnMgdGhhdCBiZWdpbiB3aXRoICIlRCIgYW5kICIlSSIgYXJlIHR3by1jaGFyYWN0ZXIKKyMuIGV4cGFuc2lvbnM7IHNvIGZvciBleGFtcGxlLCAiJUl1IiBleHBhbmRzIHRvIHRoZSBpbm9kZSdzIHVzZXIgaWQKKyMuIG93bmVyc2hpcCBmaWVsZCAoaW5vZGUtPmlfdWlkKS4gIEFsc28gdGhlICIlQiIgZXhwYW5zaW9uIGlzIHNwZWNpYWw6CisjLiBpdCBjYW4gZXhwYW5kIHRvIGVpdGhlciB0aGUgc3RyaW5nICJpbmRpcmVjdCBibG9jayIgKHBvc3NpYmx5IHByZWNlZGVkCisjLiBieSB0aGUgd29yZCAiZG91YmxlIiBvciAidHJpcGxlIiksIG9yIHRoZSBzdHJpbmcgImJsb2NrICMiIGltbWVkaWF0ZWx5CisjLiBmb2xsb3dlZCBieSBhbiBpbnRlZ2VyIGluZGljYXRpbmcgYSBibG9jayBzZXF1ZW5jZSBudW1iZXIuCisjLiAgCisjLiAJJWIJPGJsaz4JCQlibG9jayBudW1iZXIKKyMuIAklQgkiaW5kaXJlY3QgYmxvY2siIHwgImJsb2NrICMiPGJsa2NvdW50PglzdHJpbmcgfCBzdHJpbmcraW50ZWdlcgorIy4gCSVjCTxibGsyPgkJCWJsb2NrIG51bWJlcgorIy4gCSVEaQk8ZGlyZW50PiAtPiBpbm8JCWlub2RlIG51bWJlcgorIy4gCSVEbgk8ZGlyZW50PiAtPiBuYW1lCXN0cmluZworIy4gCSVEcgk8ZGlyZW50PiAtPiByZWNfbGVuCisjLiAJJURsCTxkaXJlbnQ+IC0+IG5hbWVfbGVuCisjLiAJJUR0CTxkaXJlbnQ+IC0+IGZpbGV0eXBlCisjLiAJJWQJPGRpcj4gCQkJaW5vZGUgbnVtYmVyCisjLiAJJWcJPGdyb3VwPgkJCWludGVnZXIKKyMuIAklaQk8aW5vPgkJCWlub2RlIG51bWJlcgorIy4gCSVJcwk8aW5vZGU+IC0+IGlfc2l6ZQorIy4gCSVJUwk8aW5vZGU+IC0+IGlfZXh0cmFfaXNpemUKKyMuIAklSWIJPGlub2RlPiAtPiBpX2Jsb2NrcworIy4gCSVJbAk8aW5vZGU+IC0+IGlfbGlua3NfY291bnQKKyMuIAklSW0JPGlub2RlPiAtPiBpX21vZGUKKyMuIAklSU0JPGlub2RlPiAtPiBpX210aW1lCisjLiAJJUlGCTxpbm9kZT4gLT4gaV9mYWRkcgorIy4gCSVJZgk8aW5vZGU+IC0+IGlfZmlsZV9hY2wKKyMuIAklSWQJPGlub2RlPiAtPiBpX2Rpcl9hY2wKKyMuIAklSXUJPGlub2RlPiAtPiBpX3VpZAorIy4gCSVJZwk8aW5vZGU+IC0+IGlfZ2lkCisjLiAJJUl0CTxzdHI+CQkJZmlsZSB0eXBlCisjLiAJJWoJPGlubzI+CQkJaW5vZGUgbnVtYmVyCisjLiAJJW0JPGNvbV9lcnIgZXJyb3IgbWVzc2FnZT4KKyMuIAklTgk8bnVtPgorIy4gCSVwCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPgorIy4gCSVQCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIDxkaXJlbnQ+LT5pbm8gd2l0aCA8aW5vMj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuICAoSWYgZGlyZW50IGlzIE5VTEwKKyMuIAkJCQl0aGVuIHJldHVybiB0aGUgcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8yPikKKyMuIAklcQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGRpcj4KKyMuIAklUQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4gd2l0aCA8ZGlyPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4KKyMuIAklcwk8c3RyPgkJCW1pc2NlbGxhbmVvdXMgc3RyaW5nCisjLiAJJVMJCWJhY2t1cCBzdXBlcmJsb2NrCisjLiAJJVgJPG51bT4JaGV4YWRlY2ltYWwgZm9ybWF0CisjLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZTJmc3Byb2dzLTEuNDIuMTItcHJlMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiB0eXRzb0BhbHVtLm1pdC5lZHVcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wNS0xNyAyMToyNi0wNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNC0wOC0zMSAxODo0NCswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBCZW5ubyBTY2h1bGVuYmVyZyA8YmVubm9AdmVydGFhbHQubmw+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRXNwZXJhbnRvIDx0cmFuc2xhdGlvbi10ZWFtLWVvQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogZW9cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD1uICE9IDE7XG4iCisiWC1HZW5lcmF0b3I6IExva2FsaXplIDEuMFxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MjMgbWlzYy9ta2UyZnMuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrICV1IG91dCBvZiByYW5nZTsgaWdub3JlZC5cbiIKK21zZ3N0ciAiTWFsYm9uYSBibG9rbyAldSBlc3RhcyBla3N0ZXIgZ2FtbzsgxJ1pIGlnbm9yacSdYXMuXG4iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo0NgorbXNnaWQgIndoaWxlIHNhbml0eSBjaGVja2luZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAiZHVtIHNhbmtvbnRyb2xvIGRlIG1hbGJvbmJsb2thIGktbm9kbyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjU4Cittc2dpZCAid2hpbGUgcmVhZGluZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAiZHVtIGxlZ2FkbyBkZSBtYWxib25ibG9rYSBpLW5vZG8iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo3MiBlMmZzY2svc2NhbnRlc3QuYzoxMDcgZTJmc2NrL3VuaXguYzoxMzQ1CisjOiBlMmZzY2svdW5peC5jOjE0MzQgbWlzYy9iYWRibG9ja3MuYzoxMjQyIG1pc2MvYmFkYmxvY2tzLmM6MTI1MAorIzogbWlzYy9iYWRibG9ja3MuYzoxMjY0IG1pc2MvYmFkYmxvY2tzLmM6MTI3NiBtaXNjL2R1bXBlMmZzLmM6NjA0CisjOiBtaXNjL2UyaW1hZ2UuYzoxMzk2IG1pc2MvZTJpbWFnZS5jOjE1ODAgbWlzYy9lMmltYWdlLmM6MTU5OQorIzogbWlzYy9ta2UyZnMuYzoyMjcgbWlzYy90dW5lMmZzLmM6MTk1NSBtaXNjL3R1bmUyZnMuYzoyMDQ0IHJlc2l6ZS9tYWluLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICVzIgorbXNnc3RyICJkdW0gcHJvdm8gZGUgbWFsZmVybWkgJXMiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgcG9wZW4gJyVzJyIKK21zZ3N0ciAiZHVtIHByb3ZvIGRlIG1hbGZlcm1pIGR1a3RvbiBhbCAnJXMnIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6OTQgbWlzYy9ta2UyZnMuYzoyMzQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGluIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIGZpbGUiCittc2dzdHIgImR1bSBsZWdhZG8gZGUgbGlzdG8gZGUgbWFsYm9uYWogYmxva29qIGVsIGRvc2llcm8iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMDUKK21zZ2lkICJ3aGlsZSB1cGRhdGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgImR1bSDEnWlzZGF0aWdvIGRlIG1hbGJvbmJsb2thIGktbm9kbyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBpbGxlZ2FsIGJsb2NrICV1IGZvdW5kIGluIGJhZCBibG9jayBpbm9kZS4gIENsZWFyZWQuXG4iCittc2dzdHIgIkF2ZXJ0bzogbmV2YWxpZGEgYmxva28gJXUgdHJvdmnEnWlzIG1hbGJvbmJsb2thIGktbm9kby4gIFZpxZ1pxJ1pcy5cbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiRXJhcm8gZHVtIGxlZ2FkbyBkZSBibG9rbyAlbHUgKCVzKSBkdW0gJXMuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkVyYXJvIGR1bSBsZWdhZG8gZGUgYmxva28gJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYxIGUyZnNjay9laGFuZGxlci5jOjExMAorbXNnaWQgIklnbm9yZSBlcnJvciIKK21zZ3N0ciAiSWdub3JpIGVyYXJvbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjIKK21zZ2lkICJGb3JjZSByZXdyaXRlIgorbXNnc3RyICJEZXZpZ2kgcmVza3JpYm9uIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiRXJhcm8gZHVtIHNrcmliYWRvIGRlIGJsb2tvICVsdSAoJXMpIGR1bSAlcy4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkVyYXJvIGR1bSBza3JpYmFkbyBkZSBibG9rbyAlbHUgKCVzKS4gICIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NTcKK21zZ2lkICJlbXB0eSBkaXJibG9ja3MiCittc2dzdHIgInZha2FqIHVqYWogYmxva29qIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo2MgorbXNnaWQgImVtcHR5IGRpciBtYXAiCittc2dzdHIgInZha2EgdWphIG1hcG8iCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVtcHR5IGRpcmVjdG9yeSBibG9jayAldSAoIyVkKSBpbiBpbm9kZSAldVxuIgorbXNnc3RyICJWYWthIHVqYSBibG9rbyAldSAoIyVkKSBlbiBpLW5vZG8gJXVcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBmaWxlbmFtZSBuYmxvY2tzIGJsb2Nrc2l6ZVxuIgorbXNnc3RyICJVem1hbmllcm8gZGUgJXM6ICAlcyBET1NJRVJOT01PIEJMT0tOT01CUk8gQkxPS0dSQU5ET1xuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgb2YgYmxvY2tzIVxuIgorbXNnc3RyICJOZXZhbGlkYSBub21icm8gZGUgYmxva29qIVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIChzaXplPSVkKVxuIgorbXNnc3RyICJNYW5rYXMgc3VmacSJYSBtZW1vcm8gcG9yIGFzaWduaSBidWZyb24gKGdyYW5kbz0lZClcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBkaXNrXG4iCittc2dzdHIgIlV6bWFuaWVybzogICVzIERJU0tPXG4iCisKKyM6IGUyZnNjay9mbHVzaGIuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJCTEtGTFNCVUYgaW9jdGwgbm90IHN1cHBvcnRlZCEgIENhbid0IGZsdXNoIGJ1ZmZlcnMuXG4iCittc2dzdHIgIiIKKyJMYSAnaW9jdGwoQkxLRkxTQlVGKScgbmUgc3VidGVuYXRhcyEgIE5lIGVibGFzIHBlbGkgYnVmcmFqbiBlbmhhdm9qbi5cbiIKKworIzogZTJmc2NrL2lzY2FuLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIGRldmljZVxuIgorbXNnc3RyICJVem1hbmllcm86ICAlcyBbLUZdIFstSSBCVUZST0JMT0tOT01CUk9dIEFQQVJBVE9cbiIKKworIzogZTJmc2NrL2lzY2FuLmM6ODEgZTJmc2NrL3VuaXguYzo5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZmx1c2hpbmciCittc2dzdHIgImR1bSBtYWxmZXJtbyBkZSAlcyBwb3IgZWxidWZyaWdvIgorCisjOiBlMmZzY2svaXNjYW4uYzo4NiBlMmZzY2svdW5peC5jOjk3OCByZXNpemUvbWFpbi5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiCittc2dzdHIgImR1bSBwcm92byBkZSBlbGJ1ZnJpZ2kgJXMiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJkdW0gcHJvdm8gZGUgbWFsZmVybWkgJyVzJyIKKworIzogZTJmc2NrL2lzY2FuLmM6MTE5IGUyZnNjay9zY2FudGVzdC5jOjExNCBtaXNjL2UyaW1hZ2UuYzoxMjkwCittc2dpZCAid2hpbGUgb3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJkdW0gbWFsZmVybW8gZGUgaS1ub2RhIHNrYW5vIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMjcgbWlzYy9lMmltYWdlLmM6MTMwOQorbXNnaWQgIndoaWxlIGdldHRpbmcgbmV4dCBpbm9kZSIKK21zZ3N0ciAiZHVtIHByZW5vIGRlIHNla3ZhIGktbm9kbyIKKworIzogZTJmc2NrL2lzY2FuLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBzY2FubmVkLlxuIgorbXNnc3RyICJTa2FuacSdaXMgJXUgaS1ub2Rvai5cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1MjQKK21zZ2lkICJyZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICJkdW0gbGVnYWRvIGRlIGthxZ1wcm90b2tvbGEgxIllZmJsb2tvXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBubyB2YWxpZCBqb3VybmFsIHN1cGVyYmxvY2sgZm91bmRcbiIKK21zZ3N0ciAiJXM6IG5lIHRyb3ZpxJ1pcyB2YWxpZGEga2HFnXByb3Rva29sYSDEiWVmYmxva29cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGpvdXJuYWwgdG9vIHNob3J0XG4iCittc2dzdHIgIiVzOiBrYcWdcHJvdG9rb2xvIHRybyBtYWxsb25nYXNcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHJlY292ZXJpbmcgam91cm5hbFxuIgorbXNnc3RyICIlczogcmVzdGHFrXJpxJ1hcyBrYcWdcHJvdG9rb2xvLi4uXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3b24ndCBkbyBqb3VybmFsIHJlY292ZXJ5IHdoaWxlIHJlYWQtb25seVxuIgorbXNnc3RyICIlczogbmUgcmVzdGHFrXJpxJ1vcyBrYcWdcHJvdG9rb2xvIGVuIG51cmxlZ2Egc3RhdG9cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlLW9wZW4gJXMiCittc2dzdHIgImR1bSBwcm92byBkZSByZW1hbGZlcm1pICVzIgorCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKioqIExhIHNla3ZhaiBtYWxsb25naWdvaiBwcmVza2HFrSDEiWl1aiB1emnEnWFzIGVuIGxhIHRyYWR1a28uICoqKgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImFldGVuZGl0YSBhdHJpYnV0byIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTQKK21zZ2lkICJBZXJyb3IgYWxsb2NhdGluZyIKK21zZ3N0ciAiQWVyYXJvIGR1bSBhc2lnbm8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJiYmxva28iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE2Cittc2dpZCAiQmJpdG1hcCIKK21zZ3N0ciAiQmJpdG1hcG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE3Cittc2dpZCAiY2NvbXByZXNzIgorbXNnc3RyICJjPHNlbnV6YT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE4Cittc2dpZCAiQ2NvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgQGIiCittc2dzdHIgIkNrb25mbGlrdGFzIGt1biBhbGlhIGRvc2llcnNpc3RlbWEgYmxva28iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE5Cittc2dpZCAiZGRpcmVjdG9yeSIKK21zZ3N0ciAiZGRvc2llcnVqbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjAKK21zZ2lkICJEZGVsZXRlZCIKK21zZ3N0ciAiRGZvcmlnaXRhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMQorbXNnaWQgImVlbnRyeSIKK21zZ3N0ciAiZWVybyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjIKK21zZ2lkICJFQGUgJyVEbicgaW4gJXAgKCVpKSIKK21zZ3N0ciAiRWVybyAnJURuJyBlbiAlcCAoJWkpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMworbXNnaWQgImZmaWxlc3lzdGVtIgorbXNnc3RyICJmZG9zaWVyc2lzdGVtbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjQKK21zZ2lkICJGZm9yIEBpICVpICglUSkgaXMiCittc2dzdHIgIkZwb3IgQGkgJWkgKCVRKSBlc3RhcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjUKK21zZ2lkICJnZ3JvdXAiCittc2dzdHIgImdncnVwbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjYKK21zZ2lkICJoSFRSRUUgQGQgQGkiCittc2dzdHIgImgnSFRSRUUnLWEgdWphIEBpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNworbXNnaWQgImlpbm9kZSIKK21zZ3N0ciAiaWktbm9kbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjgKK21zZ2lkICJJaWxsZWdhbCIKK21zZ3N0ciAiSW5ldmFsaWRhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOQorbXNnaWQgImpqb3VybmFsIgorbXNnc3RyICJqa2HFnXByb3Rva29sbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAibGxvc3QrZm91bmQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMxCittc2dpZCAiTGlzIGEgbGluayIKK21zZ3N0ciAiTGVzdGFzIGxpZ28iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMyCittc2dpZCAibW11bHRpcGx5LWNsYWltZWQiCittc2dzdHIgIm1wbHVyb2JsZSBwb3NlZGF0YSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzMKK21zZ2lkICJuaW52YWxpZCIKK21zZ3N0ciAibm1hbHZhbGlkYSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzQKK21zZ2lkICJvb3JwaGFuZWQiCittc2dzdHIgIm9vcmZhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNQorbXNnaWQgInBwcm9ibGVtIGluIgorbXNnc3RyICJwcHJvYmxlbW8gZW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM2Cittc2dpZCAicXF1b3RhIgorbXNnc3RyICJxa3ZvdG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM3Cittc2dpZCAicnJvb3QgQGkiCittc2dzdHIgInJyYWRpa2EgQGkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM4Cittc2dpZCAic3Nob3VsZCBiZSIKK21zZ3N0ciAic2RldnVzIGVzdGkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM5Cittc2dpZCAiU3N1cGVyQGIiCittc2dzdHIgIlPEiWVmYmxva28iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQwCittc2dpZCAidXVuYXR0YWNoZWQiCittc2dzdHIgInVuZWtvbmVrdGl0YSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDEKK21zZ2lkICJ2ZGV2aWNlIgorbXNnc3RyICJ2YXBhcmF0byIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDIKK21zZ2lkICJ4ZXh0ZW50IgorbXNnc3RyICJ4YW1wbGVrc28iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQzCittc2dpZCAienplcm8tbGVuZ3RoIgorbXNnc3RyICJ6bnVsbG9uZ2EiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU0Cittc2dpZCAiPFRoZSBOVUxMIGlub2RlPiIKK21zZ3N0ciAiPExhIE5VTEwtYSBpLW5vZG8+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NQorbXNnaWQgIjxUaGUgYmFkIGJsb2NrcyBpbm9kZT4iCittc2dzdHIgIjxMYSBtYWxib25ibG9rYSBpLW5vZG8+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NworbXNnaWQgIjxUaGUgdXNlciBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxMYSB1emFudGt2b3RhIGktbm9kbz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU4Cittc2dpZCAiPFRoZSBncm91cCBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxMYSBncnVwa3ZvdGEgaS1ub2RvPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTkKK21zZ2lkICI8VGhlIGJvb3QgbG9hZGVyIGlub2RlPiIKK21zZ3N0ciAiPExhIHN0YXJ0aWdhIGktbm9kbz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICI8TGEgbWFsZm9yaWd1amEgaS1ub2RvPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjEKK21zZ2lkICI8VGhlIGdyb3VwIGRlc2NyaXB0b3IgaW5vZGU+IgorbXNnc3RyICI8TGEgZ3J1cHByaWHEtWEgaS1ub2RvPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjIKK21zZ2lkICI8VGhlIGpvdXJuYWwgaW5vZGU+IgorbXNnc3RyICI8TGEga2HFnXByb3Rva29sYSBpLW5vZG8+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MworbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSA5PiIKK21zZ3N0ciAiPFJlemVydml0YSBpLW5vZG8gOT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTY0Cittc2dpZCAiPFJlc2VydmVkIGlub2RlIDEwPiIKK21zZ3N0ciAiPFJlemVydml0YSBpLW5vZG8gMTA+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNAorbXNnaWQgInJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAibm9ybWFsYSBkb3NpZXJvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNgorbXNnaWQgImRpcmVjdG9yeSIKK21zZ3N0ciAiZG9zaWVydWpvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzOAorbXNnaWQgImNoYXJhY3RlciBkZXZpY2UiCittc2dzdHIgInNpZ25vLWFwYXJhdG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQwCittc2dpZCAiYmxvY2sgZGV2aWNlIgorbXNnc3RyICJibG9rYXBhcmF0byIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDIKK21zZ2lkICJuYW1lZCBwaXBlIgorbXNnc3RyICJub21pdGEgZHVrdG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ0Cittc2dpZCAic3ltYm9saWMgbGluayIKK21zZ3N0ciAic2ltYm9sYSBsaWdvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NiBtaXNjL3V1aWRkLmM6MTYyCittc2dpZCAic29ja2V0IgorbXNnc3RyICJrb25la3RpbG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmlsZSB0eXBlIHdpdGggbW9kZSAwJW8iCittc2dzdHIgIm5la29uYXRhIGRvc2llcnRpcG8ga3VuIG1vZHVzbyAwJW8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDIzCittc2dpZCAiaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIm5lcmVrdGEgYmxva28iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI1Cittc2dpZCAiZG91YmxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJkdW9ibGUgbmVyZWt0YSBibG9rbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjcKK21zZ2lkICJ0cmlwbGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgInRyaW9ibGUgbmVyZWt0YSBibG9rbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjkKK21zZ2lkICJ0cmFuc2xhdG9yIGJsb2NrIgorbXNnc3RyICJ0cmFkdWthIGJsb2tvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQzMQorbXNnaWQgImJsb2NrICMiCittc2dzdHIgImJsb2tvICMiCisKKyM6IGUyZnNjay9wYXNzMWIuYzoyMjIKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGlub2RlIG1hcCIKK21zZ3N0ciAibWFwbyBkZSBwbHVyb2JsZSBwb3NlZGF0YWogaS1ub2RvaiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjYyNSBlMmZzY2svcGFzczFiLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjYW4ndCBmaW5kIGR1cF9ibGsgZm9yICVsbHVcbiIKK21zZ3N0ciAiIgorCisjIEZJWE1FIC0tIGlzIGEgZGVidWcgbWVzc2FnZT8KKyM6IGUyZnNjay9wYXNzMWIuYzo4NTIKK21zZ2lkICJyZXR1cm5lZCBmcm9tIGNsb25lX2ZpbGVfYmxvY2siCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgbG9va3VwIEVBIGJsb2NrIHJlY29yZCBmb3IgJWxsdSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzo0NzUgZTJmc2NrL3Bhc3MyLmM6NzgyCittc2dpZCAicmVhZGluZyBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgImxlZ2FudGUgZG9zaWVydWphbiBibG9rb24iCisKKyM6IGUyZnNjay9wYXNzMS5jOjYzNAorbXNnaWQgImluLXVzZSBpbm9kZSBtYXAiCittc2dzdHIgIm1hcG8gZGUgdXphdGFqIGktbm9kb2oiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY0NQorbXNnaWQgImRpcmVjdG9yeSBpbm9kZSBtYXAiCittc2dzdHIgIm1hcG8gZGUgZG9zaWVydWphaiBpLW5vZG9qIgorCisjOiBlMmZzY2svcGFzczEuYzo2NTUKK21zZ2lkICJyZWd1bGFyIGZpbGUgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBvIGRlIG5vcm1hbGRvc2llcmFqIGktbm9kb2oiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY2NCBtaXNjL2UyaW1hZ2UuYzoxMjY1Cittc2dpZCAiaW4tdXNlIGJsb2NrIG1hcCIKK21zZ3N0ciAibWFwbyBkZSB1emF0YWogYmxva29qIgorCisjOiBlMmZzY2svcGFzczEuYzo3MzAKK21zZ2lkICJvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgIm1hbGZlcm1hbnRlIGktbm9kYW4gc2thbm9uIgorCisjOiBlMmZzY2svcGFzczEuYzo3NjQKK21zZ2lkICJnZXR0aW5nIG5leHQgaW5vZGUgZnJvbSBzY2FuIgorbXNnc3RyICJwcmVuYW50ZSBzZWt2YW4gaS1ub2RvbiBlbCBza2FubyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI3OQorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAiUGHFnW8gMSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGluZGlyZWN0IGJsb2NrcyBvZiBpbm9kZSAldSIKK21zZ3N0ciAibGVnYW50ZSBuZXJla3Rham4gYmxva29qbiBkZSBpLW5vZG8gJXUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzODYKK21zZ2lkICJiYWQgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBvIGRlIG1hbGJvbmFqIGktbm9kb2oiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MDkKK21zZ2lkICJpbm9kZSBpbiBiYWQgYmxvY2sgbWFwIgorbXNnc3RyICJpLW5vZG8gZW4gbWFwbyBkZSBkaWZla3RhaiBibG9rb2oiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MjkKK21zZ2lkICJpbWFnaWMgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBvIGRlICdpbWFnaWMnLWktbm9kb2oiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0NTYKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGJsb2NrIG1hcCIKK21zZ3N0ciAibWFwbyBkZSBwbHVyb2JsZSBwb3NlZGF0YWogaS1ub2RvaiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTU2NworbXNnaWQgImV4dCBhdHRyIGJsb2NrIG1hcCIKK21zZ3N0ciAibWFwbyBkZSBibG9rb2oga3VuIGV0ZW5kaXRhaiBhdHJpYnV0b2oiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTZsdSglYyk6IGV4cGVjdGluZyAlNmx1IGdvdCBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI4OTgKK21zZ2lkICJibG9jayBiaXRtYXAiCittc2dzdHIgImJsb2thIGJpdG1hcG8iCisKKyM6IGUyZnNjay9wYXNzMS5jOjI5MDQKK21zZ2lkICJpbm9kZSBiaXRtYXAiCittc2dzdHIgImktbm9kYSBiaXRtYXBvIgorCisjOiBlMmZzY2svcGFzczEuYzoyOTEwCittc2dpZCAiaW5vZGUgdGFibGUiCittc2dzdHIgImktbm9kYSB0YWJlbG8iCisKKyM6IGUyZnNjay9wYXNzMi5jOjI4MworbXNnaWQgIlBhc3MgMiIKK21zZ3N0ciAiUGHFnW8gMiIKKworIzogZTJmc2NrL3Bhc3MyLmM6ODA2Cittc2dpZCAiQ2FuIG5vdCBjb250aW51ZS4iCittc2dzdHIgIk5lIGVibGFzIGRhxa1yaWdpLiIKKworIzogZTJmc2NrL3Bhc3MzLmM6NzcKK21zZ2lkICJpbm9kZSBkb25lIGJpdG1hcCIKK21zZ3N0ciAiYml0bWFwbyBkZSB0cmFrdGl0YWogaS1ub2RvaiIKKworIzogZTJmc2NrL3Bhc3MzLmM6ODYKK21zZ2lkICJQZWFrIG1lbW9yeSIKK21zZ3N0ciAiUGludGEgbWVtb3J1em8iCisKKyM6IGUyZnNjay9wYXNzMy5jOjE0OAorbXNnaWQgIlBhc3MgMyIKK21zZ3N0ciAiUGHFnW8gMyIKKworIzogZTJmc2NrL3Bhc3MzLmM6MzQwCittc2dpZCAiaW5vZGUgbG9vcCBkZXRlY3Rpb24gYml0bWFwIgorbXNnc3RyICJiaXRtYXBvIHBvciBpLW5vZGEgYnVrbG9yZWtvbm8iCisKKyM6IGUyZnNjay9wYXNzNC5jOjE5NgorbXNnaWQgIlBhc3MgNCIKK21zZ3N0ciAiUGHFnW8gNCIKKworIzogZTJmc2NrL3Bhc3M1LmM6NzQKK21zZ2lkICJQYXNzIDUiCittc2dzdHIgIlBhxZ1vIDUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTEKK21zZ2lkICIobm8gcHJvbXB0KSIKK21zZ3N0ciAiKG5lbml1IGludml0bykiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIKK21zZ2lkICJGaXgiCittc2dzdHIgIsSIdSByaXBhcmkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMKK21zZ2lkICJDbGVhciIKK21zZ3N0ciAixIh1IHZpxZ1pIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0Cittc2dpZCAiUmVsb2NhdGUiCittc2dzdHIgIsSIdSBhbGlsb2tpZ2kiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUKK21zZ2lkICJBbGxvY2F0ZSIKK21zZ3N0ciAixIh1IGFzaWduaSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NgorbXNnaWQgIkV4cGFuZCIKK21zZ3N0ciAixIh1IGV0ZW5kaWdpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3Cittc2dpZCAiQ29ubmVjdCB0byAvbG9zdCtmb3VuZCIKK21zZ3N0ciAixIh1IGtvbmVrdGlnaSBhbCAvbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OAorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAixIh1IGtyZWkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkKK21zZ2lkICJTYWx2YWdlIgorbXNnc3RyICLEiHUgc2F2aSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MAorbXNnaWQgIlRydW5jYXRlIgorbXNnc3RyICLEiHUgdHJ1bmtpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxCittc2dpZCAiQ2xlYXIgaW5vZGUiCittc2dzdHIgIsSIdSB2acWdaSBpLW5vZG9uIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyCittc2dpZCAiQWJvcnQiCittc2dzdHIgIsSIdSDEiWVzaSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MworbXNnaWQgIlNwbGl0IgorbXNnc3RyICLEiHUgZmVuZGkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAixIh1IGRhxa1yaWdpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1Cittc2dpZCAiQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MiCittc2dzdHIgIsSIdSBrbG9uaSBwbHVyb2JsZSBwb3NlZGF0YWpuIGJsb2tvam4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYKK21zZ2lkICJEZWxldGUgZmlsZSIKK21zZ3N0ciAixIh1IGZvcmlnaSBkb3NpZXJvbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NworbXNnaWQgIlN1cHByZXNzIG1lc3NhZ2VzIgorbXNnc3RyICLEiHUgbWFsZWJsaWdpIG1lc2HEnW9qbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OAorbXNnaWQgIlVubGluayIKK21zZ3N0ciAixIh1IG1hbGxpZ2kiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkKK21zZ2lkICJDbGVhciBIVHJlZSBpbmRleCIKK21zZ3N0ciAixIh1IHZpxZ1pICdIVHJlZSctYW4gaW5kZWtzb24iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAKK21zZ2lkICJSZWNyZWF0ZSIKK21zZ3N0ciAixIh1IHJlZXN0aWdpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5Cittc2dpZCAiKE5PTkUpIgorbXNnc3RyICIoTkVOSVUpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwCittc2dpZCAiRklYRUQiCittc2dzdHIgIlJJUEFSSVRBIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxCittc2dpZCAiQ0xFQVJFRCIKK21zZ3N0ciAiVknFnElUQSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MgorbXNnaWQgIlJFTE9DQVRFRCIKK21zZ3N0ciAiQUxJTE9LSUdJVEEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMKK21zZ2lkICJBTExPQ0FURUQiCittc2dzdHIgIkFTSUdOSVRBIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0Cittc2dpZCAiRVhQQU5ERUQiCittc2dzdHIgIkVURU5ESUdJVEEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUKK21zZ2lkICJSRUNPTk5FQ1RFRCIKK21zZ3N0ciAiUkVLT05FS1RJVEEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYKK21zZ2lkICJDUkVBVEVEIgorbXNnc3RyICJLUkVJVEEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcKK21zZ2lkICJTQUxWQUdFRCIKK21zZ3N0ciAiU0FWSVRBIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4Cittc2dpZCAiVFJVTkNBVEVEIgorbXNnc3RyICJUUlVOS0lUQSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OQorbXNnaWQgIklOT0RFIENMRUFSRUQiCittc2dzdHIgIkktTk9ETyBWScWcSVRBIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwCittc2dpZCAiQUJPUlRFRCIKK21zZ3N0ciAixIhFU0lHSVRBIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxCittc2dpZCAiU1BMSVQiCittc2dzdHIgIkZFTkRJVEEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTIKK21zZ2lkICJDT05USU5VSU5HIgorbXNnc3RyICJEQcWsUklHSVRBIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzCittc2dpZCAiTVVMVElQTFktQ0xBSU1FRCBCTE9DS1MgQ0xPTkVEIgorbXNnc3RyICJQTFVST0JMRSBQT1NFREFUQUogQkxPS09KIEtMT05JxJxJUyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NAorbXNnaWQgIkZJTEUgREVMRVRFRCIKK21zZ3N0ciAiRE9TSUVSTyBGT1JJR0nEnElTIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1Cittc2dpZCAiU1VQUFJFU1NFRCIKK21zZ3N0ciAiTUFMRUJMSUdJVEFKIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2Cittc2dpZCAiVU5MSU5LRUQiCittc2dzdHIgIk1BTExJR0lUQSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NworbXNnaWQgIkhUUkVFIElOREVYIENMRUFSRUQiCittc2dzdHIgIidIVFJFRSctQSBJTkRFS1NPIFZJxZxJVEEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgKK21zZ2lkICJXSUxMIFJFQ1JFQVRFIgorbXNnc3RyICJFU1RPUyBSRUVTVElHQVRBIgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDcKK21zZ2lkICJAYiBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJibG9rYSBAQiBwb3IgQGcgJWcgbmUgZXN0YXMgZW4gQGcuICAoQGIgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMQorbXNnaWQgIkBpIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgImktbm9kYSBAQiBwb3IgQGcgJWcgbmUgZXN0YXMgZW4gQGcuICAoQGIgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIHRhYmxlIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2Cittc2dpZCAiIgorIkBpIHRhYmxlIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCisiV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbiIKK21zZ3N0ciAiIgorImktbm9kYSB0YWJlbG8gcG9yIEBnICVnIG5lIGVzdGFzIGVuIEBnLiAgKEBiICViKVxuIgorIkFWRVJUTzogU0VWRVJBIFBFUkRPIERFIERBVFVNT0pOIEVCTEFTLlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIHN1cGVyYmxvY2sgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSB2YWxpZCBleHQyL2V4dDMvZXh0NFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtLiAgSWYgdGhlIGRldmljZSBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDIvZXh0My9leHQ0XG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBzdXBlcmJsb2NrXG4KKyMuIEAtZXhwYW5kZWQ6IGlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIHN1cGVyYmxvY2s6XG4KKyMuIEAtZXhwYW5kZWQ6ICAgICBlMmZzY2sgLWIgODE5MyA8ZGV2aWNlPlxuCisjLiBALWV4cGFuZGVkOiAgb3JcbgorIy4gQC1leHBhbmRlZDogICAgIGUyZnNjayAtYiAzMjc2OCA8ZGV2aWNlPlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjIKK21zZ2lkICIiCisiXG4iCisiVGhlIEBTIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgdmFsaWQgZXh0Mi9leHQzL2V4dDRcbiIKKyJAZi4gIElmIHRoZSBAdiBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDIvZXh0My9leHQ0XG4iCisiQGYgKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBAU1xuIgorImlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIEBTOlxuIgorIiAgICBlMmZzY2sgLWIgODE5MyA8QHY+XG4iCisiIG9yXG4iCisiICAgIGUyZnNjayAtYiAzMjc2OCA8QHY+XG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogVGhlIGZpbGVzeXN0ZW0gc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBzdXBlcmJsb2NrKSBpcyAlYiBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGRldmljZSBpcyAlYyBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogRWl0aGVyIHRoZSBzdXBlcmJsb2NrIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiTGEgZG9zaWVyc2lzdGVtYSBncmFuZG8gZXN0YXMgJWIgYmxva29qIChsYcWtIGxhIMSJZWZibG9rbyk7XG4iCisibGEgZml6aWthIGFwYXJhdGEgZ3JhbmRvIGVzdGFzICVjIGJsb2tvai5cbiIKKyJBxa0gbGEgxIllZmJsb2tvIGHFrSBsYSBzdWJkaXNraWdhIHRhYmVsbyBlc3RhcyBkaWZla3RhIVxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2NrX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbgorIy4gQC1leHBhbmRlZDogVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuCisjLiBALWV4cGFuZGVkOiBmcm9tIHRoZSBibG9jayBzaXplLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MAorbXNnaWQgIiIKKyJAUyBAYl9zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4iCisiVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuIgorImZyb20gdGhlIEBiIHNpemUuXG4iCittc2dzdHIgIiIKKyJFbiBAUzogYmxvY2tfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuIgorIsSIaSB0aXUgdmVyc2lvIGRlICdlMmZzY2snIG5lIHN1YnRlbmFzIGZyYWdtZW50Z3JhbmRvam4ga2l1alxuIgorIm1hbHNhbWFzIGFsIGJsb2tncmFuZG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3Cittc2dpZCAiQFMgQGJzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIkVuIEBTOiBibG9ja3NfcGVyX2dyb3VwID0gJWIsIGRldnVzIGVzdGkgJWNcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBmaXJzdF9kYXRhX2Jsb2NrID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIKK21zZ2lkICJAUyBmaXJzdF9kYXRhX0BiID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiRW4gQFM6IGZpcnN0X2RhdGFfYmxvY2sgPSAlYiwgZGV2dXMgZXN0aSAlY1xuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcKK21zZ2lkICIiCisiQGYgZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJEb3NpZXJzaXN0ZW1vIG5lIGhhdmFzIFVVSUQtb247IHVudSBnZW5lcmnEnWFzLlxuIgorIlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogaWYgc2V2ZXJhbCBpbm9kZSBvciBibG9jayBiaXRtYXAgYmxvY2tzIG9yIHBhcnRcbiIKKyJvZiB0aGUgaW5vZGUgdGFibGUgcmVxdWlyZSByZWxvY2F0aW9uLCB5b3UgbWF5IHdpc2ggdG8gdHJ5XG4iCisicnVubmluZyBlMmZzY2sgd2l0aCB0aGUgJy1iICVTJyBvcHRpb24gZmlyc3QuICBUaGUgcHJvYmxlbVxuIgorIm1heSBsaWUgb25seSB3aXRoIHRoZSBwcmltYXJ5IGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLCBhbmRcbiIKKyJ0aGUgYmFja3VwIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIG1heSBiZSBPSy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBDb3JydXB0aW9uIGZvdW5kIGluIHN1cGVyYmxvY2suICAoJXMgPSAlTikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcxCittc2dpZCAiQ29ycnVwdGlvbiBmb3VuZCBpbiBAUy4gICglcyA9ICVOKS5cbiIKK21zZ3N0ciAiVHJvdmnEnWlzIGRpZmVrdG8gZW4gQFM7ICglcyA9ICVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBAdjogJW1cbiIKK21zZ3N0ciAiRXJhcm8gZHVtIGVsdHJvdm8gZGUgZ3JhbmRvIGRlIGZpemlrYSBhcGFyYXRvOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBjb3VudCBpbiBzdXBlcmJsb2NrIGlzICVpLCBzaG91bGQgYmUgJWouXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTgxCittc2dpZCAiQGkgY291bnQgaW4gQFMgaXMgJWksIEBzICVqLlxuIgorbXNnc3RyICJJLW5vZGEgbm9tYnJvIGVuIMSJZWZibG9rbyBlc3RhcyAlaSwgQHMgJWouXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg1Cittc2dpZCAiVGhlIEh1cmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZmlsZXR5cGUgZmVhdHVyZS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBhbiBpbnZhbGlkIGpvdXJuYWwgKGlub2RlICVpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzIGFuIEBuIEBqIChAaSAlaSkuXG4iCittc2dzdHIgIsSIZWZibG9rbyBoYXZhcyBtYWx2YWxpZGFuIGthxZ1wcm90b2tvbG9uIChAaSAlaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIG11bHRpcGxlIGZpbGVzeXN0ZW0gdXNlcnMgKHVuc3VwcG9ydGVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTUKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgbXVsdGlwbGUgQGYgdXNlcnMgKHVuc3VwcG9ydGVkKS5cbiIKK21zZ3N0ciAiIgorIkVrc3RlcmEga2HFnXByb3Rva29sbyBoYXZhcyBwbHVyYWpuIGRvc2llcnNpc3RlbWFqbiB1emFudG9qbiAobmUgIgorInN1YnRlbmF0YXMpLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW4ndCBmaW5kIGV4dGVybmFsIGpvdXJuYWxcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDAKK21zZ2lkICJDYW4ndCBmaW5kIGV4dGVybmFsIEBqXG4iCittc2dzdHIgIk5lIGVibGFzIHRyb3ZpIGVrc3RlcmFuIGthxZ1wcm90b2tvbG9uLlxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBiYWQgc3VwZXJibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwNQorbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBiYWQgQFNcbiIKK21zZ3N0ciAiRWtzdGVyYSBrYcWdcHJvdG9rb2xvIGhhdmFzIG1hbGJvbmFuIMSJZWZibG9rb24uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZpbGVzeXN0ZW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMTAKK21zZ2lkICJFeHRlcm5hbCBAaiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgQGZcbiIKK21zZ3N0ciAiRWtzdGVyYSBrYcWdcHJvdG9rb2xvIG5lIHN1YnRlbmFzIMSJaSB0aXVuIGRvc2llcnNpc3RlbW9uLlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGpvdXJuYWwgc3VwZXJibG9jayBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGpvdXJuYWwgCisjLiBALWV4cGFuZGVkOiBmb3JtYXQuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGFsc28gcG9zc2libGUgdGhlIGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxNQorbXNnaWQgIiIKKyJAZiBAaiBAUyBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbiIKKyJJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgQGogIgorImZvcm1hdC5cbiIKKyJJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyMworbXNnaWQgIkBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIkthxZ1wcm90b2tvbGEgxIllZmJsb2tvIGVzdGFzIGRpZmVrdGEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzX2pvdXJuYWwgZmxhZyBpcyBjbGVhciwgYnV0IGEgam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyOAorbXNnaWQgIkBTIGhhc19AaiBmbGFnIGlzIGNsZWFyLCBidXQgYSBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJNYWxqZXNhcyDEiWVmYmxva2EgZmxhZ28gJ2hhc19qb3VybmFsJywgc2VkIGVremlzdGFzIGthxZ1wcm90b2tvbG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBqb3VybmFsIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjMzCittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJKZXNhcyDEiWVmYmxva2EgZmxhZ28gJ25lZWRzX3JlY292ZXJ5Jywgc2VkIG5lIGVremlzdGFzIEBqLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBqb3VybmFsIGhhcyBkYXRhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzOAorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBAaiBoYXMgZGF0YS5cbiIKK21zZ3N0ciAiTWFsamVzYXMgxIllZmJsb2thIGZsYWdvICduZWVkc19yZWNvdmVyeScsIHNlZCBAaiBlbmhhdmFzIGRhdHVtb2puLlxuIgorCisjLiBALWV4cGFuZGVkOiBDbGVhciBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0MworbXNnaWQgIkNsZWFyIEBqIgorbXNnc3RyICLEiHUgdmnFnWkga2HFnXByb3Rva29sb24iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgZmlsZXN5c3RlbS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDggZTJmc2NrL3Byb2JsZW0uYzo3MDcKK21zZ2lkICJAZiBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBAZi4gICIKK21zZ3N0ciAiRG9zaWVyc2lzdGVtbyBoYXZhcyBqZXNham4gZnVua2NpYWpuIGZsYWdvam4sIHNlZCBlc3RhcyByZXZpemlvIDAuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVzIG9ycGhhbmVkIGlub2RlICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjUzCittc2dpZCAiJXMgQG8gQGkgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbiIKK21zZ3N0ciAiJXMgb3JmYW4gaS1ub2RvbiAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kdXNvPSVJbSwgZ3JhbmRvPSVJcylcbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1OAorbXNnaWQgIkBJICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIkBJICVCICglYikgdHJvdmnEnWlzIGVuIEBvIEBpICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjMKK21zZ2lkICJBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiSmFtdmnFnWl0YSAlQiAoJWIpIHRyb3ZpxJ1pcyBlbiBAbyBAaSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBvcnBoYW5lZCBpbm9kZSAlaSBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJASSBAbyBAaSAlaSBpbiBAUy5cbiIKK21zZ3N0ciAiQEkgQG8gQGkgJWkgZW4gQFMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgaW5vZGUgJWkgaW4gb3JwaGFuZWQgaW5vZGUgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEkgQGkgJWkgaW4gQG8gQGkgbGlzdC5cbiIKK21zZ3N0ciAiQEkgQGkgJWkgZW4gbGlzdG8gZGUgb3JmYWogaS1ub2Rvai5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3OAorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICJLYcWdcHJvdG9rb2xhIEBTIGhhdmFzIG5la29uYXRhbiBqZXNhbiBudXJsZWdhbiBmdW5rY2lhbiBmbGFnb24uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODMKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiS2HFnXByb3Rva29sYSBAUyBoYXZhcyBuZWtvbmF0YW4gamVzYW4gbmVrb25ncnVhbiBmdW5rY2lhbiBmbGFnb24uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4OAorbXNnaWQgIkBqIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbiIKK21zZ3N0ciAiTGEga2HFnXByb3Rva29sYSB2ZXJzaW8gbmUgc3VidGVuYXRhcyBwb3IgxIlpIHRpdSAnZTJmc2NrJy5cbiIKKworIy4gQC1leHBhbmRlZDogTW92aW5nIGpvdXJuYWwgZnJvbSAvJXMgdG8gaGlkZGVuIGlub2RlLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1vdmluZyBAaiBmcm9tIC8lcyB0byBoaWRkZW4gQGkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJLYcWdcHJvdG9rb2xvIG1vdmnEnWFzIGRlIC8lcyBhbCBrYcWdaXRhIGktbm9kby5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgbW92aW5nIGpvdXJuYWw6ICVtXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgbW92aW5nIEBqOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiRXJhcm8gZHVtIG1vdm8gZGUga2HFnXByb3Rva29sbzogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRm91bmQgaW52YWxpZCBWMiBqb3VybmFsIHN1cGVyYmxvY2sgZmllbGRzIChmcm9tIFYxIGpvdXJuYWwpLlxuCisjLiBALWV4cGFuZGVkOiBDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBqb3VybmFsIHN1cGVyYmxvY2suLi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzAzCittc2dpZCAiIgorIkZvdW5kIEBuIFYyIEBqIEBTIGZpZWxkcyAoZnJvbSBWMSBAaikuXG4iCisiQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgQGogQFMuLi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBSdW4gam91cm5hbCBhbnl3YXkKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzA5Cittc2dpZCAiUnVuIEBqIGFueXdheSIKK21zZ3N0ciAixIh1IHRhbWVuIHJ1bGkga2HFnXByb3Rva29sb24iCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTQKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiUmVzdGHFrXJhIGZsYWdvIG1hbGplc2FzIGVuIHNhdmtvcGlhIEBTLCB0YW1lbiBydWxpxJ1hcyBAai5cbiIKKworIy4gQC1leHBhbmRlZDogQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTkKK21zZ2lkICIiCisiQmFja2luZyB1cCBAaiBAaSBAYiBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkZhcmnEnWFzIHNhdmtvcGlvIGRlIGxhIGluZm9ybW9qIGVuIGthxZ1wcm90b2tvbGEgQGkuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSByZXNpemVfaW5vZGUgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpcyAlTjsgc2hvdWxkIGJlIHplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzI0Cittc2dpZCAiIgorIkBmIGRvZXMgbm90IGhhdmUgcmVzaXplX0BpIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9AYnNcbiIKKyJpcyAlTjsgQHMgemVyby4gICIKK21zZ3N0ciAiIgorIkRvc2llcnNpc3RlbW8gaGF2YXMgbWFsamVzYW4gJ3Jlc2l6ZV9pbm9kZScsIHNlZCAnc19yZXNlcnZlZF9nZHRfYmxvY2tzJ1xuIgorImVzdGFzICVOOyBAcyBudWxvLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemVfaW5vZGUgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIGlub2RlIGlzIG5vbi16ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzMAorbXNnaWQgIlJlc2l6ZV9AaSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgQGkgaXMgbm9uLXplcm8uICAiCittc2dzdHIgIk1hbGplc2FzICdyZXNpemVfaW5vZGUnLCBzZWQgbGEgcmVncmFuZGlnYSBAaSBlc3RhcyBuZW51bGEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSBub3QgdmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzM1Cittc2dpZCAiUmVzaXplIEBpIG5vdCB2YWxpZC4gICIKK21zZ3N0ciAiTGEgcmVncmFuZGlnYSBAaSBtYWx2YWxpZGFzLiAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQwCittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorIkVuIEBTOiB0ZW1wbyBkZSBsYXN0YSBzdXJtZXRvICgldCxcbiIKKyIgICAgbnVuID0gJVQpIGVzdGFzIGVuIGxhIGVzdG9udGVjby5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0NQorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKyJFbiBAUzogdGVtcG8gZGUgbGFzdGEgc2tyaWJvICgldCxcbiIKKyIgICAgbnVuID0gJVQpIGVzdGFzIGVuIGxhIGVzdG9udGVjby5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIHNob3VsZCBiZSAlWC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBAcyAlWC4gICIKK21zZ3N0ciAixIhlZmJsb2thIGluZGlrbyBwb3IgZWtzdGVyYSBAUyBAcyAlWC4gICIKKworIy4gQC1leHBhbmRlZDogQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNTQKK21zZ2lkICIiCisiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkFsZG9uacSdYXMgJ2Rpcmhhc2gnLWEgaW5kaWtvIGFsIEBmLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1OQorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAiCittc2dzdHIgImtvbnRyb2xzdW1vIGRlIGdydXBwcmlhxLVvICVnIGVzdGFzICUwNHgsIEBzICUwNHkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNjkKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNzQKK21zZ2lkICJMYXN0IEBnIEBiIEBCIHVuaW5pdGlhbGl6ZWQuICAiCittc2dzdHIgIkxhc3RhIGdydXBhIGJsb2thIGJpdG1hcG8gZXN0YXMgc2VuIHByYXZhbG9yaXpvLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHRyYW5zYWN0aW9uICVpIHdhcyBjb3JydXB0LCByZXBsYXkgd2FzIGFib3J0ZWQuXG4iCittc2dzdHIgIkthxZ1wcm90b2tvbGEgdHJhbnNha2NpbyAlaSBlc3RpcyBkaWZla3RhOyByZWZhcmFkbyBhYm9ydGnEnWlzLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4MworbXNnaWQgIlRoZSB0ZXN0X2ZzIGZsYWcgaXMgc2V0IChhbmQgZXh0NCBpcyBhdmFpbGFibGUpLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozODgKKyMsIGZ1enp5Cittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAiCisic2V0KVxuIgorbXNnc3RyICIiCisiRW4gQFMgbGEgdGVtcG8gZGUgbGFzdGEgc3VybWV0byBlc3RhcyBlbiBsYSBlc3RvbnRlY28uXG4iCisiICAgIChqZSBtYWxwbGkgb2wgdW51IHRhZ28sIHByb2JhYmxlIGthxa16ZSBkZSBtYWxib25hIGFsxJ11c3RpZ28gZGUgZml6aWthICIKKyJob3Jsb8SdbykgICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM5NAorIywgZnV6enkKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5ICIKKyJzZXQpXG4iCittc2dzdHIgIiIKKyJFbiBAUyBsYSB0ZW1wbyBkZSBsYXN0YSBza3JpYm8gZXN0YXMgZW4gbGEgZXN0b250ZWNvLlxuIgorIiAgICAoamUgbWFscGxpIG9sIHVudSB0YWdvLCBwcm9iYWJsZSBrYcWtemUgZGUgbWFsYm9uYSBhbMSddXN0aWdvIGRlIGZpemlrYSAiCisiaG9ybG/EnW8pICAiCisKKyMuIEAtZXhwYW5kZWQ6IE9uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwMAorbXNnaWQgIk9uZSBvciBtb3JlIEBiIEBnIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgIgorbXNnc3RyICJVbnUgYcWtIHBsdXJhaiBibG9rZ3J1cGFqIHByaWHEtW9qIGhhdmFzIG5ldmFsaWRhbiBrb250cm9sc3Vtb24uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBpbm9kZXMgY291bnQgdG8gJWogKHdhcyAlaSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDUKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGlzIGNvdW50IHRvICVqICh3YXMgJWkpXG4iCittc2dzdHIgIk5vbWJybyBkZSBsaWJlcmFqIGktbm9kb2ogYWdvcmRpxJ1hcyBhbCAlaiAoZXN0aXMgJWkpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBibG9ja3MgY291bnQgdG8gJWMgKHdhcyAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTAKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIk5vbWJybyBkZSBsaWJlcmFqIGJsb2tvaiBhZ29yZGnEnWFzIGFsICVjIChlc3RpcyAlYilcbiIKKworIy4gQC1leHBhbmRlZDogTWFraW5nIHF1b3RhIGlub2RlICVpICglUSkgaGlkZGVuLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxNQorbXNnaWQgIk1ha2luZyBAcSBAaSAlaSAoJVEpIGhpZGRlbi5cbiIKK21zZ3N0ciAiTGEga3ZvdGEgQGkgJWkgKCVRKSBmYXJpxJ1hcyBrYcWdaXRhLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjAKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAiCittc2dzdHIgIsSIZWZibG9rbyBoYXZhcyBuZXZhbGlkYW4gTU1QLWJsb2tvbi4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDI1Cittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgIgorbXNnc3RyICLEiGVmYmxva28gaGF2YXMgbmV2YWxpZGFuIG1hZ2ludW1lcm9uIHBvciBNTVAuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19vcGVuMjogJW1cbiIKK21zZ3N0ciAiZXh0MmZzX29wZW4yKCk6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDM1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19jaGVja19kZXNjOiAlbVxuIgorbXNnc3RyICJleHQyZnNfY2hlY2tfZGVzYygpOiAlbVxuIgorCisjIEZJWE1FIC0tIG1pc3NpbmcgIm9mIj8KKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgNjRiaXQgZmlsZXN5c3RlbXMgbmVlZHMgZXh0ZW50cyB0byBhY2Nlc3MgdGhlIHdob2xlIGRpc2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQwCittc2dpZCAiQFMgNjRiaXQgZmlsZXN5c3RlbXMgbmVlZHMgZXh0ZW50cyB0byBhY2Nlc3MgdGhlIHdob2xlIGRpc2suICAiCittc2dzdHIgIiIKKyJAUyBkZSA2NC1iaXRhaiBkb3NpZXJzaXN0ZW1vaiBiZXpvbmFzIGFtcGxla3Nvam4gcG9yIGF0aW5naSBsYSB0dXRhbiAiCisiZGlza29uLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NQorbXNnaWQgIkZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZy4gICglTiwgbWF4IHZhbHVlICVnKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NTIKK21zZ2lkICJQYXNzIDE6IENoZWNraW5nIEBpcywgQGJzLCBhbmQgc2l6ZXNcbiIKK21zZ3N0ciAiUGHFnW8gMTogS29udHJvbG8gZGUgaS1ub2RvaiwgYmxva29qIGthaiBncmFuZG9qLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1NgorbXNnaWQgIkByIGlzIG5vdCBhIEBkLiAgIgorbXNnc3RyICJAciBuZSBlc3RhcyBAZC4gICIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDYxCittc2dpZCAiQHIgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgIgorbXNnc3RyICJAciBoYXZhcyAnZHRpbWUnLWFuIHZhbG9yb24gKHByb2JhYmxlIGthxa16ZSBkZSBvbGRhICdta2UyZnMnKS4gICIKKworIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2NgorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgIlJlemVydml0YSBpLW5vZG8gJWkgKCVRKSBoYXZhcyBuZXZhbGlkYW4gbW9kdXNvbi4gICIKKworIy4gQC1leHBhbmRlZDogZGVsZXRlZCBpbm9kZSAlaSBoYXMgemVybyBkdGltZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEQgQGkgJWkgaGFzIHplcm8gZHRpbWUuICAiCittc2dzdHIgIkBEIEBpICVpIGhhdmFzIG51bGFuICdkdGltZScuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAiCittc2dzdHIgIkBpICVpIHV6acSdYXMsIHNlZCBoYXZhcyAnZHRpbWUnLWFuIHZhbG9yb24uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICJAaSAlaSBlc3RhcyBAZCBrdW4gbnVsYSBsb25nby4gICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODYKK21zZ2lkICJAZyAlZydzIEBiIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICJibG9rYSBAQiAoJWIpIGRlIEBnICVnIEBDLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5MQorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgImktbm9kYSBAQiAoJWIpIGRlIEBnICVnIEBDLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIHRhYmxlIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDk2Cittc2dpZCAiQGcgJWcncyBAaSB0YWJsZSBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiaS1ub2RhIHRhYmVsbyAoJWIpIGRlIEBnICVnIEBDLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDEKK21zZ2lkICJAZyAlZydzIEBiIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJibG9rYSBAQiAoJWIpIGRlIEBnICVnIG1hbGJvbmFzLiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDYKK21zZ2lkICJAZyAlZydzIEBpIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJpLW5vZGEgQEIgKCViKSBkZSBAZyAlZyBtYWxib25hcy4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfc2l6ZSBpcyAlSXMsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTEKK21zZ2lkICJAaSAlaSwgaV9zaXplIGlzICVJcywgQHMgJU4uICAiCittc2dzdHIgIkBpICVpLCAnaV9zaXplJyBlc3RhcyAlSXMsIEBzICVOLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9ibG9ja3MgaXMgJUliLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE2Cittc2dpZCAiQGkgJWksIGlfQGJzIGlzICVJYiwgQHMgJU4uICAiCittc2dzdHIgIkBpICVpLCAnaV9ibG9ja3MnIGVzdGFzICVJYiwgQHMgJU4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBpbiBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MjEKK21zZ2lkICJASSAlQiAoJWIpIGluIEBpICVpLiAgIgorbXNnc3RyICJASSAlQiAoJWIpIGVuIEBpICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIG92ZXJsYXBzIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI2Cittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiJUIgKCViKSBwYXJ0ZSBrb3ZyYXMgZG9zaWVyc2lzdGVtYWpuIG1ldGFkYXR1bW9qbiBlbiBAaSAlaS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJJLW5vZG8gJWkgaGF2YXMgbmV2YWxpZGEoailuIGJsb2tvKGopbi4gICIKKworIy4gQC1leHBhbmRlZDogVG9vIG1hbnkgaWxsZWdhbCBibG9ja3MgaW4gaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGlsbGVnYWwgQGJzIGluIEBpICVpLlxuIgorbXNnc3RyICJUcm8gbXVsdGFqIG5ldmFsaWRhaiBibG9rb2ogZW4gaS1ub2RvICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gYmFkIGJsb2NrIGlub2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0MQorbXNnaWQgIkBJICVCICglYikgaW4gYmFkIEBiIEBpLiAgIgorbXNnc3RyICJASSAlQiAoJWIpIGVuIG1hbGJvbmJsb2thIEBpLiAgIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQ2Cittc2dpZCAiQmFkIEBiIEBpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJNYWxib25ibG9rYSBpLW5vZG8gaGF2YXMgbmV2YWxpZGEoailuIGJsb2tvKGopbi4gICIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIG9yIGJhZCBibG9jayBpbiB1c2UhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUxCittc2dpZCAiRHVwbGljYXRlIG9yIGJhZCBAYiBpbiB1c2UhXG4iCittc2dzdHIgIkR1b2JsYSBhxa0gbWFsYm9uYSBibG9rbyB1emnEnWFzIVxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgJWIgdXNlZCBhcyBiYWQgYmxvY2sgaW5vZGUgaW5kaXJlY3QgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTU2Cittc2dpZCAiQmFkIEBiICViIHVzZWQgYXMgYmFkIEBiIEBpIGluZGlyZWN0IEBiLiAgIgorbXNnc3RyICJNYWxib25hIGJsb2tvICViIHV6acSdYXMga2llbCBuZXJla3RhIGJsb2tvIGRlIG1hbGJvbmJsb2thIGktbm9kby4gICIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4KKyMuIEAtZXhwYW5kZWQ6IHNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGluIHRoZSBmaWxlc3lzdGVtLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2MQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgYmFkIEBiIEBpIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuIgorInNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4iCisiaW4gdGhlIEBmLlxuIgorbXNnc3RyICIiCisiXG4iCisiTGEgbWFsYm9uYmxva2EgaS1ub2RvIHZlcsWdYWpuZSBkaWZla3RpxJ1pcy4gIFByb2JhYmxlIHZpXG4iCisiZGV2dXMgbnVuIGhhbHRpIMSJaWFuIGZhcmFkb24ga2FqIHJ1bGkgJ2UyZnNjayAtYycgcG9yXG4iCisidHJvdmkgZWJsYWpuIG1hbGJvbmFqbiBibG9rb2puIGVuIGxhIGRvc2llcnNpc3RlbW8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBJZiB0aGUgYmxvY2sgaXMgcmVhbGx5IGJhZCwgdGhlIGZpbGVzeXN0ZW0gY2FuIG5vdCBiZSBmaXhlZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjgKK21zZ2lkICIiCisiXG4iCisiSWYgdGhlIEBiIGlzIHJlYWxseSBiYWQsIHRoZSBAZiBjYW4gbm90IGJlIGZpeGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiU2UgbGEgYmxva28gdmVyZSBtYWxib25hcywgbmUgZWJsYXMgcmlwYXJpIGxhIGRvc2llcnNpc3RlbW9uLlxuIgorCisjLiBALWV4cGFuZGVkOiBZb3UgY2FuIHJlbW92ZSB0aGlzIGJsb2NrIGZyb20gdGhlIGJhZCBibG9jayBsaXN0IGFuZCBob3BlXG4KKyMuIEAtZXhwYW5kZWQ6IHRoYXQgdGhlIGJsb2NrIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTczCittc2dpZCAiIgorIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKyJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJWaSBwb3ZhcyBmb3JpZ2kgxIlpIHRpdW4gYmxva29uIGRlIGxhIG1hbGJvbmJsb2thIGxpc3RvXG4iCisia2FqIGVzcGVyaSBrZSBsYSBibG9rbyBmYWt0ZSBib25hcy4gIFNlZCB0aW8gbmUgZ2FyYW50aWFzLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgcHJpbWFyeSBzdXBlcmJsb2NrICglYikgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3OQorbXNnaWQgIlRoZSBwcmltYXJ5IEBTICglYikgaXMgb24gdGhlIGJhZCBAYiBsaXN0LlxuIgorbXNnc3RyICJMYSB1bnVhIMSJZWZibG9rbyAoJWIpIGVzdGFzIGVuIGxhIG1hbGJvbmJsb2thIGxpc3RvLlxuIgorCisjLiBALWV4cGFuZGVkOiBCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBncm91cCBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3RcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODQKK21zZ2lkICJCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBAZyBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIEBiIGxpc3RcbiIKK21zZ3N0ciAiQmxva28gJWIgZW4gbGEgdW51YWogZ3J1cHByaWHEtW9qIGVzdGFzIGVuIGxhIG1hbGJvbmJsb2thIGxpc3RvLlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIHN1cGVyYmxvY2sgKCViKSBpcyBiYWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkwCittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBAUyAoJWIpIGlzIGJhZC5cbiIKK21zZ3N0ciAiQXZlcnRvOiDEiWVmYmxva28gJWIgZGUgZ3J1cG8gJWcgbWFsYm9uYXMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIGJsb2NrICglYikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTk1Cittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBAZyBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgQGIgKCViKS5cbiIKK21zZ3N0ciAiIgorIkF2ZXJ0bzogZW4gZ3J1cG8gJWcgbGEga29waW8gZGUgbGEgZ3J1cHByaWHEtW9qIGhhdmFzIG1hbGJvbmFuIGJsb2tvbiAoJWIpLlxuIgorCisjLiBALWV4cGFuZGVkOiBQcm9ncmFtbWluZyBlcnJvcj8gIGJsb2NrICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjAxCittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I/ICBAYiAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX0BiLlxuIgorbXNnc3RyICIiCisiKipQcm9ncmFtbWlzbz8qKiAgQmxva28gJWIgc2VucmV6b25lIHByZXRlbmRpxJ1pcyBlbiBwcm9jZXNzX2JhZF9ibG9jaygpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nICVOIGNvbnRpZ3VvdXMgYmxvY2socykgaW4gYmxvY2sgZ3JvdXAgJWcgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNworbXNnaWQgIkBBICVOIGNvbnRpZ3VvdXMgQGIocykgaW4gQGIgQGcgJWcgZm9yICVzOiAlbVxuIgorbXNnc3RyICJAQSBkZSAlTiBrb25la3NhaiBibG9rb2ogZW4gQGIgQGcgJWcgcG9yICVzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAYiBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbiIKK21zZ3N0ciAiQEEgZGUgYmxva2J1ZnJvIHBvciB0cmFuc2xva2kgJXNcbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTcKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuIgorbXNnc3RyICJEZSBAZyAlZyB0cmFuc2xva2nEnWFzICVzIGRlICViIGFsICVjLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgdG8gJWMuLi5cbiIKK21zZ3N0ciAiRGUgQGcgJWcgdHJhbnNsb2tpxJ1hcyAlcyBhbCAlYy4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAlYiBvZiAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjcKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBAYiAlYiBvZiAlczogJW1cbiIKK21zZ3N0ciAiQXZlcnRvOiBtYWxzdWtjZXNpcyBsZWdpIGJsb2tvbiAlYiBkZSAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHdyaXRlIGJsb2NrICViIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzIKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICJBdmVydG86IG1hbHN1a2Nlc2lzIHNrcmliaSBibG9rb24gJWIgcG9yICVzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzNyBlMmZzY2svcHJvYmxlbS5jOjE1MDEKK21zZ2lkICJAQSBAaSBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICJAQSBkZSBpLW5vZGEgQEIgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDIKK21zZ2lkICJAQSBAYiBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICJAQSBkZSBibG9rYSBAQiAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbiIKK21zZ3N0ciAiQEEgZGUgJ2ljb3VudCctYSBsaWdpbmZvcm1vOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGRpcmVjdG9yeSBibG9jayBhcnJheTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGQgQGIgYXJyYXk6ICVtXG4iCittc2dzdHIgIkBBIGRlIHVqYSBibG9rYXJvOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgIkVyYXJvIGR1bSBza2FuYWRvIGRlIGktbm9kb2ogKCVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWk6ICVtXG4iCittc2dzdHIgIkVyYXJvIGR1bSBpdGVyYWNpbyBqZSBibG9rb2ogZW4gQGkgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBjb3VudD0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjY3Cittc2dpZCAiRXJyb3Igc3RvcmluZyBAaSBjb3VudCBpbmZvcm1hdGlvbiAoQGk9JWksIGNvdW50PSVOKTogJW1cbiIKK21zZ3N0ciAiIgorIkVyYXJvIGR1bSBza3JpYmFkbyBkZSBpbmZvcm1vIHByaSBpLW5vZGEgbm9tYnJvIChAaT0laSwgbm9tYnJvPSVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBkaXJlY3RvcnkgYmxvY2sgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBibG9jaz0lYiwgbnVtPSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzIKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBkIEBiIGluZm9ybWF0aW9uIChAaT0laSwgQGI9JWIsIG51bT0lTik6ICVtXG4iCittc2dzdHIgIiIKKyJFcmFybyBkdW0gc2tyaWJhZG8gZGUgaW5mb3JtbyBwcmkgdWphIGJsb2tvIChAaT0laSwgQGI9JWIsIG51bWVybz0lTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkVyYXJvIGR1bSBsZWdhZG8gZGUgQGkgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAiCittc2dzdHIgIkBpICVpIGhhdmFzIGplc2FuIGZsYWdvbiAnaW1hZ2ljJy4gICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlICVpKSBoYXMgaW1tdXRhYmxlXG4KKyMuIEAtZXhwYW5kZWQ6IG9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoQGkgJWkpIGhhcyBpbW11dGFibGVcbiIKKyJvciBhcHBlbmQtb25seSBmbGFnIHNldC4gICIKK21zZ3N0ciAiIgorIlNwZWNpYWxhIEBpICVpIChhcGFyYXRvL2tvbmVrdGlsby92aWNtZW1vcm8pIGhhdmFzIGplc2FuIGZsYWdvblxuIgorIidpbW11dGFibGUnIGHFrSAnYXBwZW5kLW9ubHknLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgY29tcHJlc3Npb24gZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGNvbXByZXNzaW9uIHN1cHBvcnQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBAY2lvbiBmbGFnIHNldCBvbiBAZiB3aXRob3V0IEBjaW9uIHN1cHBvcnQuICAiCittc2dzdHIgIiIKKyJAaSAlaSBoYXZhcyBqZXNhbiBkZW5zaWdhbiBmbGFnb24gZW4gZG9zaWVyc2lzdGVtbyBzZW4gc3VidGVubyBwb3IgZGVuc2lnby4gICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvKSBpbm9kZSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8pIEBpICVpIGhhcyBub24temVybyBzaXplLiAgIgorbXNnc3RyICJTcGVjaWFsYSBAaSAlaSAoYXBhcmF0by9rb25la3RpbG8vdmljbWVtb3JvKSBoYXZhcyBuZW51bGFuIGdyYW5kb24uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzEyCittc2dpZCAiQGogQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkthxZ1wcm90b2tvbGEgaS1ub2RvIG5lIHV6acSdYXMsIHNlZCBlbmhhdmFzIGRhdHVtb2puLiAgIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzE3Cittc2dpZCAiQGogaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiS2HFnXByb3Rva29sbyBuZSBlc3RhcyBub3JtYWxhIGRvc2llcm8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSB3YXMgcGFydCBvZiB0aGUgQG8gQGkgbGlzdC4gICIKK21zZ3N0ciAiSS1ub2RvICVpIGVzdGlzIGVuIGxhIGxpc3RvIGRlIG9yZmFqIGktbm9kb2ouICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzI4Cittc2dpZCAiQGlzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gICIKK21zZ3N0ciAiVHJvdmnEnWlzIGktbm9kb2oga2l1aiBlc3RpcyBhbm9qIGVuIGRpZmVrdGEgbGlzdG8gZGUgb3Jmb2ouICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMzCittc2dpZCAiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iCittc2dzdHIgIkBBIGRlICdyZWZjb3VudCctYSBzdHJ1a3R1cm8gKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgZm9yIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjczOAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgZm9yIEBpICVpLiAgIgorbXNnc3RyICJFcmFybyBkdW0gbGVnYWRvIGRlIEBiICViIGRlIGV0ZW5kaXRhaiBhdHJpYnV0b2ogcG9yIEBpICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBiYWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0MworbXNnaWQgIkBpICVpIGhhcyBhIGJhZCBAYSBAYiAlYi4gICIKK21zZ3N0ciAiQGkgJWkgaGF2YXMgbWFsYm9uYW4gYmxva29uICViIGRlIGV0ZW5kaXRhaiBhdHJpYnV0b2ouICAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQ4Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJFcmFybyBkdW0gbGVnYWRvIGRlIEBiICViIGRlIGV0ZW5kaXRhaiBhdHJpYnV0b2ogKCVtKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTMKK21zZ2lkICJAYSBAYiAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBAcyAlTi4gICIKK21zZ3N0ciAiQGIgJWIgZGUgZXRlbmRpdGFqIGF0cmlidXRvaiBoYXZhcyByZWZlcmVuY25vbWJyb24gJXIsIEBzICVOLiAgIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc1OAorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiRXJhcm8gZHVtIHNrcmliYWRvIGRlIEBiICViIGRlIGV0ZW5kaXRhaiBhdHJpYnV0b2ogKCVtKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyBoX2Jsb2NrcyA+IDEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzYzCittc2dpZCAiQGEgQGIgJWIgaGFzIGhfQGJzID4gMS4gICIKK21zZ3N0ciAiQGIgJWIgZGUgZXRlbmRpdGFqIGF0cmlidXRvaiBoYXZhcyAnaF9ibG9ja3MgPiAxJy4gICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzY4Cittc2dpZCAiQEEgQGEgQGIgJWIuICAiCittc2dzdHIgIkBBIGRlIEBiICViIHBvciBldGVuZGl0YWogYXRyaWJ1dG9qLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3MworbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gICIKK21zZ3N0ciAiQGIgJWIgZGUgZXRlbmRpdGFqIGF0cmlidXRvaiBlc3RhcyBkaWZla3RhIChhc2lnbmEga29saXppbykuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChpbnZhbGlkIG5hbWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3OAorbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIG5hbWUpLiAgIgorbXNnc3RyICJAYiAlYiBkZSBldGVuZGl0YWogYXRyaWJ1dG9qIGVzdGFzIGRpZmVrdGEgKG1hbHZhbGlkYSBub21vKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgdmFsdWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4MworbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIHZhbHVlKS4gICIKK21zZ3N0ciAiQGIgJWIgZGUgZXRlbmRpdGFqIGF0cmlidXRvaiBlc3RhcyBkaWZla3RhIChtYWx2YWxpZGEgdmFsb3JvKS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgdG9vIGJpZy4gICIKK21zZ3N0ciAiQGkgJWkgdHJvIGdyYW5kYXMuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgY2F1c2VzIGRpcmVjdG9yeSB0byBiZSB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5MgorbXNnaWQgIiVCICglYikgY2F1c2VzIEBkIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikgZXN0aWdhcyBkb3NpZXJ1am9uIHRybyBncmFuZGEuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk3Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgZmlsZSB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIGVzdGlnYXMgZG9zaWVyb24gdHJvIGdyYW5kYS4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MDIKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBzeW1saW5rIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikgZXN0aWdhcyBzaW1ib2xhbiBsaWdvbiB0cm8gZ3JhbmRhLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKyJAaSAlaSBoYXZhcyBqZXNhbiBmbGFnb24gJ0lOREVYX0ZMJyBlbiBkb3NpZXJzaXN0ZW1vIHNlbiBzdWJ0ZW5vIHBvciAiCisiJ0hUUkVFJy5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IGJ1dCBpcyBub3QgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgQGQuXG4iCittc2dzdHIgIkBpICVpIGhhdmFzIGplc2FuIGZsYWdvbiAnSU5ERVhfRkwnIHNlZCBuZSBlc3RhcyBAZC5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIHJvb3Qgbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgaGFzIGFuIEBuIHJvb3Qgbm9kZS5cbiIKK21zZ3N0ciAiQGggJWkgaGF2YXMgbWFsdmFsaWRhbiByYWRpa2FuIG5vZG9uLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIyCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIkBoICVpIGhhdmFzIG5lc3VidGVuYXRhbiBoYWtldGFuIHZlcnNpb24gKCVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAiQGggJWkgdXphcyBuZWtvbmdydWFuIGZsYWdvbiBwb3IgJ0hUUkVFJy1hIHJhZGlrYSBub2RvLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzIKK21zZ2lkICJAaCAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuIgorbXNnc3RyICJAaCAlaSBoYXZhcyBhcmJhbiBwcm9mdW5kb24gKCVOKSBraXUgdHJvIGdyYW5kYXNcbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBhbiBpbmRpcmVjdCBibG9jayAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBtZXRhZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzcKK21zZ2lkICIiCisiQmFkIEBiIEBpIGhhcyBhbiBpbmRpcmVjdCBAYiAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbiIKKyJAZiBtZXRhZGF0YS4gICIKK21zZ3N0ciAiIgorIk1hbGJvbmJsb2thIEBpIGhhdmFzIG5lcmVrdGFuIGJsb2tvbiAoJWIpIGtpdSBrb25mbGlrdGFzXG4iCisia3VuIGRvc2llcnNpc3RlbWFqIG1ldGFkYXR1bW9qLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemUgQGkgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uIgorbXNnc3RyICJNYWxzdWtjZXNpcyAocmUpa3JlYWRvIGRlIHJlZ3JhbmRpZ2EgQGk6ICVtLiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQ4Cittc2dpZCAiQGkgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJAaSAlaSBoYXZhcyBrcm9tYW4gZ3JhbmRvbiAoJUlTKSBraXUgbWFsdmFsaWRhc1xuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTMKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiQGEgZW4gQGkgJWkgaGF2YXMgbm9tbG9uZ29uICglTikga2l1IG1hbHZhbGlkYXNcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTgKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJAYSBlbiBAaSBpIGhhdmFzIHZhbG9yYW4gcG96aWNpb24gKCVOKSBraXUgbWFsdmFsaWRhc1xuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgYmxvY2sgKCVOKSB3aGljaCBpcyBpbnZhbGlkIChtdXN0IGJlIDApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYzCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgQGIgKCVOKSB3aGljaCBpcyBAbiAobXVzdCBiZSAwKVxuIgorbXNnc3RyICJAYSBlbiBAaSBpIGhhdmFzIHZhbG9yYW4gYmxva29uICglTikga2l1IG1hbHZhbGlkYXMgKGRldnVzIGVzdGkgMClcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODY4Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkBhIGVuIEBpIGkgaGF2YXMgdmFsb3JhbiBncmFuZG9uICglTikga2l1IG1hbHZhbGlkYXNcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODczCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkBhIGVuIEBpIGkgaGF2YXMgaGFrZXRvbiAoJU4pIGtpdSBtYWx2YWxpZGFzXG4iCisKKyMgWFhYICB3aGF0IGlzICVJdD8/CisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODc4Cittc2dpZCAiQGkgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuIgorbXNnc3RyICJAaSAlaSBlc3RhcyAlSXQgc2VkIMWdYWpuYXMga2UgxJ1pIHZlcmUgZXN0YXMgdWpvLlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgZXh0ZW50IHRyZWUgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBAeCB0cmVlIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJFcmFybyBkdW0gbGVnYWRvIHRyYSBhcmJvIGRlIGFtcGxla3NvaiBlbiBAaSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBpbm9kZSAlaVxuCisjLiBALWV4cGFuZGVkOiBcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODgKK21zZ2lkICIiCisiRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBAaSAlaVxuIgorIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuIgorbXNnc3RyICIiCisiTWFsc3VrY2VzaXMgaXRlcmFjaW8gamUgYW1wbGVrc29qIGVuIEBpICVpXG4iCisiICAgIChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIGludmFsaWQgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTQKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIEBuIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJAaSAlaSBoYXZhcyBtYWx2YWxpZGFuIGFtcGxla3NvblxuIgorIiAgICAobG9naWthIEBiICVjLCBAbiBmaXppa2EgQGIgJWIsIGxvbmdvICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGludmFsaWQgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5OQorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIEBuIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIkBpICVpIGhhdmFzIG1hbHZhbGlkYW4gYW1wbGVrc29uXG4iCisiICAgIChsb2dpa2EgQGIgJWMsIGZpemlrYSBAYiAlYiwgQG4gbG9uZ28gJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuIgorbXNnc3RyICIiCisiQGkgJWkgaGF2YXMgamVzYW4gZmxhZ29uICdFWFRFTlRTX0ZMJyBlbiBkb3NpZXJzaXN0ZW1vIHNlbiBzdWJ0ZW5vIHBvciAiCisiYW1wbGVrc29qLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgc3VwZXJibG9jayBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgQFMgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbiIKK21zZ3N0ciAiQGkgJWkgZXN0YXMgZW4gYW1wbGVrc2EgYXJhbsSdbywgc2VkIEBTIG5lIGhhdmFzIGZ1bmtjaW9uICdFWFRFTlRTJ1xuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbiIKK21zZ3N0ciAiQGkgJWkgZXN0YXMgZW4gYW1wbGVrc2EgYXJhbsSdbywgc2VkIG5lIGhhdmFzICdFWFRFTlRfRkwnXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIKK21zZ3N0ciAiUmFwaWRhIHNpbWJvbGEgbGlnbyAlaSBoYXZhcyBqZXNhbiBmbGFnb24gJ0VYVEVOVF9GTCcuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI0Cittc2dpZCAiIgorIkBpICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJAaSAlaSBoYXZhcyBuZW9yZGFqbiBhbXBsZWtzb2puXG4iCisiICAgKEBuIGxvZ2lrYSBAYiAlYywgZml6aWthIEBiICViLCBsb25nbyAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjgKK21zZ2lkICJAaSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuIgorbXNnc3RyICJAaSAlaSBoYXZhcyBtYWx2YWxpZGFuIGFtcGxla3NhbiBub2RvbiAoYmxrICViLCBsYmxrICVjKVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzMworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgQGIgQEI6ICVtXG4iCittc2dzdHIgIkVyYXJvIGR1bSBrb252ZXJ0byBkZSBzdWJmYXNrYSBibG9rYSBAQjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzgKK21zZ2lkICJAcSBAaSBpcyBub3QgcmVndWxhciBmaWxlLiAgIgorbXNnc3RyICJMYSBrdm90YSBAaSBuZSBlc3RhcyBub3JtYWxhIGRvc2llcm8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0MworbXNnaWQgIkBxIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJMYSBrdm90YSBAaSBuZSB1emnEnWFzLCBzZWQgZW5oYXZhcyBkYXR1bW9qbi4gICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDgKK21zZ2lkICJAcSBAaSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgIgorbXNnc3RyICJMYSBrdm90YSBAaSBlc3RhcyB2aWRlYmxhIHBvciB1emFudG8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgbG9va3MgaW52YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTMKK21zZ2lkICJUaGUgYmFkIEBiIEBpIGxvb2tzIEBuLiAgIgorbXNnc3RyICJMYSBtYWxib25ibG9rYSBAaSDFnWFqbmFzIEBuLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTU4Cittc2dpZCAiIgorIkBpICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYilcbiIKK21zZ3N0ciAiIgorIkBpICVpIGhhdmFzIG51bGxvbmdhbiBhbXBsZWtzb25cbiIKKyIgICAgKEBuIGxvZ2lrYSBAYiAlYywgZml6aWthIEBiICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBJbnRlcmlvciBleHRlbnQgbm9kZSBsZXZlbCAlTiBvZiBpbm9kZSAlaTpcbgorIy4gQC1leHBhbmRlZDogTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTY1Cittc2dpZCAiIgorIkludGVyaW9yIEB4IG5vZGUgbGV2ZWwgJU4gb2YgQGkgJWk6XG4iCisiTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAiCittc2dzdHIgIiIKKyJJbnRlcm5hIGFtcGxla3NhIG5vZGEgbml2ZWxvICVOIGRlIEBpICVpOlxuIgorIkxvZ2lrYSBrb21lbmNvICViIG5lIGtvbmdydWFzIGt1biBsb2dpa2Ega29tZW5jbyAlYyBqZSBwb3N0YSBuaXZlbG8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBlbmQgb2YgZXh0ZW50IGV4Y2VlZHMgYWxsb3dlZCB2YWx1ZVxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3MQorbXNnaWQgIiIKKyJAaSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiQGkgJWksIGZpbm8gZGUgYW1wbGVrc28gdHJhbnNwYXNhcyBwZXJtZXNhdGFuIHZhbG9yb25cbiIKKyIgICAgKGxvZ2lrYSBAYiAlYywgZml6aWthIEBiICViLCBsb25nbyAlTilcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGJsb2NrICViIHNob3VsZCBiZSBhdCBibG9jayAlYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzcKK21zZ2lkICJAZCBAaSAlaSBAYiAlYiBzaG91bGQgYmUgYXQgQGIgJWMuICAiCittc2dzdHIgImJsb2tvICViIGRlIHVqYSBAaSAlaSBkZXZ1cyBlc3RpIGplIGJsb2tvICVjLiAgIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGV4dGVudCBtYXJrZWQgdW5pbml0aWFsaXplZCBhdCBibG9jayAlYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGQgQGkgJWkgaGFzIEB4IG1hcmtlZCB1bmluaXRpYWxpemVkIGF0IEBiICVjLiAgIgorbXNnc3RyICJ1amEgQGkgJWkgaGF2YXMgYW1wbGVrc29uIG1hcmtpdGFuIGtpZWwgc2VuIHByYXZhbG9yaXpvIGplIEBiICVjLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBsb2dpY2FsIGJsb2NrICViIChwaHlzaWNhbCBibG9jayAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuCisjLiBALWV4cGFuZGVkOiBXaWxsIGZpeCBpbiBwYXNzIDFCLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4NworbXNnaWQgIiIKKyJAaSAlaSBsb2dpY2FsIEBiICViIChwaHlzaWNhbCBAYiAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuIgorIldpbGwgZml4IGluIHBhc3MgMUIuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBibG9ja3MgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIGlub2RlLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTk0Cittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBAYnMgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIEBpLi4uXG4iCisiUGFzcyAxQjogUmVzY2FubmluZyBmb3IgQG0gQGJzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBbGRvbmFqIHBhxZ1vaiBwb3Igc29sdmkgYmxva29qIGtpdWogcG9zZWRhdGFzIGRlIHBsaSBvbCB1bnUgaS1ub2RvLlxuIgorIlBhxZ1vIDFCOiBSZXNrYW5hYWRvIHBvciBwbHVyb2JsZSBwb3NlZGF0YWogYmxva29qLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgJWk6CisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG0gQGIocykgaW4gQGkgJWk6IgorbXNnc3RyICJwbHVyb2JsZSBwb3NlZGF0YShqKSBibG9rbyhqKSBlbiBpLW5vZG8gJWk6IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4iCittc2dzdHIgIkVyYXJvIGR1bSBza2FuYWRvIGRlIGktbm9kb2ogKCVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKGlub2RlX2R1cF9tYXApOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGkgQEIgKEBpX2R1cF9tYXApOiAlbVxuIgorbXNnc3RyICJAQSBkZSBpLW5vZGEgQEIgKCdpbm9kZV9kdXBfbWFwKCknKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiRXJhcm8gZHVtIGl0ZXJhY2lvIGplIGJsb2tvaiBlbiBAaSAlaSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzAgZTJmc2NrL3Byb2JsZW0uYzoxMzQ1Cittc2dpZCAiRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBAYSBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICIiCisiRXJhcm8gZHVtIGFsxJ11c3RpZ28gZGUgcmVmZXJlbmNub21icm8gcG9yIEBiICViIGRlIGV0ZW5kaXRhaiBhdHJpYnV0b2ogKEBpICIKKyIlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzUKK21zZ2lkICJQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgQGlzIHdpdGggQG0gQGJzXG4iCittc2dzdHIgIiIKKyJQYcWdbyAxQzogU2thbmFkbyBkZSBkb3NpZXJ1am9qIHBvciBpLW5vZG9qIGt1biBwbHVyb2JsZSBwb3NlZGF0YWogYmxva29qLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0MQorbXNnaWQgIlBhc3MgMUQ6IFJlY29uY2lsaW5nIEBtIEBic1xuIgorbXNnc3RyICJQYcWdbyAxRDogU29sdmFkbyBkZSBwbHVyb2JsZSBwb3NlZGF0YWogYmxva29qLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpbGUgJVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKSBcbgorIy4gQC1leHBhbmRlZDogICBoYXMgJXIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDQ2Cittc2dpZCAiIgorIkZpbGUgJVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKSBcbiIKKyIgIGhhcyAlciBAbSBAYihzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbiIKK21zZ3N0ciAiIgorIkRvc2llcm8gJVEgKEBpICVpLCBtb2RpZmEgdGVtcG8gJUlNKSBcbiIKKyIgIGhhdmFzICVyIHBsdXJvYmxlIHBvc2VkYXRhKGopbiBibG9rbyhqKW4sIGt1bmhhdmUga3VuICVOIGRvc2llcm8oaik6XG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0JVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTIKK21zZ2lkICJcdCVRIChAaSAjJWksIG1vZCB0aW1lICVJTSlcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBcdDxmaWxlc3lzdGVtIG1ldGFkYXRhPlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTcKK21zZ2lkICJcdDxAZiBtZXRhZGF0YT5cbiIKK21zZ3N0ciAiICAgIDxkb3NpZXJzaXN0ZW1haiBtZXRhZGF0dW1vaj5cbiIKKworIy4gQC1leHBhbmRlZDogKFRoZXJlIGFyZSAlTiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjIKK21zZ2lkICIiCisiKFRoZXJlIGFyZSAlTiBAaXMgY29udGFpbmluZyBAbSBAYnMuKVxuIgorIlxuIgorbXNnc3RyICIiCisiKEVremlzdGFzICVOIGktbm9kb2oga2l1aiBoYXZhcyBwbHVyb2JsZSBwb3NlZGF0YWpuIGJsb2tvam4uKVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY3Cittc2dpZCAiIgorIkBtIEBicyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuIgorIlxuIgorbXNnc3RyICIiCisicGx1cm9ibGUgcG9zZWRhdGFqIGJsb2tvaiBqYW0gcmVhc2lnbmnEnWlzIGHFrSBrbG9uacSdaXMuXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjbG9uZSBmaWxlOiAlbVxuIgorbXNnc3RyICJNYWxzdWtjZXNpcyBrbG9uaSBkb3NpZXJvbjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4NgorbXNnaWQgIlBhc3MgMjogQ2hlY2tpbmcgQGQgc3RydWN0dXJlXG4iCittc2dzdHIgIlBhxZ1vIDI6IEtvbnRyb2xvIGRlIGRvc2llcnVqYSBzdHJ1a3R1cm8uLi5cbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBpbm9kZSBudW1iZXIgZm9yICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJAbiBAaSBudW1iZXIgZm9yICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiQG4gaS1ub2RhIG51bWVybyBwb3IgJy4nIGVuIHVqYSBAaSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaW52YWxpZCBpbm9kZSAjOiAlRGkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5NgorbXNnaWQgIkBFIGhhcyBAbiBAaSAjOiAlRGkuXG4iCittc2dzdHIgIkBFIGhhdmFzIG1hbHZhbGlkYW4gaS1ub2RhbiBub21icm9uOiAlRGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlICVEaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTAxCittc2dpZCAiQEUgaGFzIEBEL3VudXNlZCBAaSAlRGkuICAiCittc2dzdHIgIkBFIGhhdmFzIGZvcmlnaXRhbi9uZXV6YXRhbiBpLW5vZG9uICVEaS4gICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gJy4nICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwNgorbXNnaWQgIkBFIEBMIHRvICcuJyAgIgorbXNnc3RyICJARSBATCBhbCAnLicgICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBwb2ludHMgdG8gaW5vZGUgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTExCittc2dpZCAiQEUgcG9pbnRzIHRvIEBpICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgQGIuXG4iCittc2dzdHIgIkBFIHJlZmVyZW5jYXMgYWwgQGkgKCVEaSkga2l1IGVzdGFzIGVuIG1hbGJvbmEgYmxva28uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIGRpcmVjdG9yeSAlUCAoJURpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE2Cittc2dpZCAiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iCittc2dzdHIgIkBFIEBMIGFsIEBkICVQICglRGkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byB0aGUgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTIxCittc2dpZCAiQEUgQEwgdG8gdGhlIEByLlxuIgorbXNnc3RyICJARSBATCBhbCBAci5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjYKK21zZ2lkICJARSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuIgorbXNnc3RyICJARSBoYXZhcyBuZXZhbGlkYWpuIHNpZ25vam4gZW4gc2lhIG5vbW8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJNYW5rYXMgJy4nIGVuIHVqYSBAaSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4uJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiTWFua2FzICcuLicgZW4gdWphIEBpICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBGaXJzdCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKSBzaG91bGQgYmUgJy4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0MQorbXNnaWQgIkZpcnN0IEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpICglcCkgQHMgJy4nXG4iCittc2dzdHIgIlVudWEgQGUgJyVEbicgKEBpPSVEaSkgZW4gdWphIEBpICVpICglcCkgQHMgJy4nXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNlY29uZCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgc2hvdWxkIGJlICcuLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQ2Cittc2dpZCAiU2Vjb25kIEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpIEBzICcuLidcbiIKK21zZ3N0ciAiRHVhIEBlICclRG4nIChAaT0lRGkpIGVuIHVqYSBAaSAlaSBAcyAnLi4nXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmFkZHIgZm9yIGlub2RlICVpICglUSkgaXMgJUlGLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTUxCittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgIidpX2ZhZGRyJyBARiAlSUYsIEBzIG51bG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlmLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTU2Cittc2dpZCAiaV9maWxlX2FjbCBARiAlSWYsIEBzIHplcm8uXG4iCittc2dzdHIgIidpX2ZpbGVfYWNsJyBARiAlSWYsIEBzIG51bG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZGlyX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWQsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjEKK21zZ2lkICJpX2Rpcl9hY2wgQEYgJUlkLCBAcyB6ZXJvLlxuIgorbXNnc3RyICInaV9kaXJfYWNsJyBARiAlSWQsIEBzIG51bG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnJhZyBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2NgorbXNnaWQgImlfZnJhZyBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiJ2lfZnJhZycgQEYgJU4sIEBzIG51bG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnNpemUgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzEKK21zZ2lkICJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICInaV9mc2l6ZScgQEYgJU4sIEBzIG51bG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZSAoJUltKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTc2Cittc2dpZCAiQGkgJWkgKCVRKSBoYXMgQG4gbW9kZSAoJUltKS5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSBoYXZhcyBuZXZhbGlkYW4gbW9kdXNvbiAoJUltKS5cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBkaXJlY3RvcnkgY29ycnVwdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4MQorbXNnaWQgIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBAZCBjb3JydXB0ZWRcbiIKK21zZ3N0ciAidWphIEBpICVpLCAlQiwgcG96aWNpbyAlTjogQGQgZGlmZWt0YXNcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODYKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAidWphIEBpICVpLCAlQiwgcG96aWNpbyAlTjogZG9zaWVybm9tbyB0cm8gbG9uZ2FzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5MQorbXNnaWQgIkBkIEBpICVpIGhhcyBhbiB1bmFsbG9jYXRlZCAlQi4gICIKK21zZ3N0ciAidWphIEBpICVpIGhhdmFzIG5lYXNpZ25hdGFuICVCLiAgIgorCisjLiBALWV4cGFuZGVkOiAnLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5NgorIywgYy1mb3JtYXQKK21zZ2lkICInLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICJ1amEgQGUgJy4nIGVuIHVqYSBAaSAlaSBuZSBmaW5pxJ1hcyBwZXIgTlVMTFxuIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4uJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgInVqYSBAZSAnLi4nIGVuIHVqYSBAaSAlaSBuZSBmaW5pxJ1hcyBwZXIgTlVMTFxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjA2Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBjaGFyYWN0ZXIgQHYuXG4iCittc2dzdHIgIkBpICVpICglUSkgZXN0YXMgQEkgc2lnbm8tYXBhcmF0by5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGJsb2NrIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjExCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBAYiBAdi5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSBlc3RhcyBASSBibG9rYXBhcmF0by5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTYKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4nIEBlLlxuIgorbXNnc3RyICJARSBlc3RhcyBkdW9ibGEgQGUgJy4nLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLi4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjEKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4uJyBAZS5cbiIKK21zZ3N0ciAiQEUgZXN0YXMgZHVvYmxhIEBlICcuLicuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNiBlMmZzY2svcHJvYmxlbS5jOjE1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIHJlY19sZW4gb2YgJURyLCBzaG91bGQgYmUgJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzMQorbXNnaWQgIkBFIGhhcyByZWNfbGVuIG9mICVEciwgQHMgJU4uXG4iCittc2dzdHIgIkBFIGhhdmFzICdyZWNfbGVuJyAlRHIsIEBzICVOLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgc3RydWN0dXJlOiAlbVxuIgorbXNnc3RyICJAQSBkZSAnaWNvdW50Jy1hIHN0cnVrdHVybzogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgaXRlcmF0aW5nIG92ZXIgZGlyZWN0b3J5IGJsb2NrczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGl0ZXJhdGluZyBvdmVyIEBkIEBiczogJW1cbiIKK21zZ3N0ciAiRXJhcm8gZHVtIGl0ZXJhY2lvIGplIHVqYWogYmxva29qOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDYKK21zZ2lkICJFcnJvciByZWFkaW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkVyYXJvIGR1bSBsZWdhZG8gZGUgdWphIGJsb2tvICViIChpLW5vZG8gJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTEKK21zZ2lkICJFcnJvciB3cml0aW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkVyYXJvIGR1bSBza3JpYmFkbyBkZSB1amEgYmxva28gJWIgKGktbm9kbyAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9jayBmb3IgaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIG5ldyBAZCBAYiBmb3IgQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiQEEgZGUgbm92YSB1amEgQGIgcG9yIEBpICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRlYWxsb2NhdGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlYWxsb2NhdGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBlIGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4iCittc2dzdHIgInVqYSBAZSBwb3IgJy4nIGVuICVwICglaSkgZXN0YXMgZ3JhbmRhLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgRklGTy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjcxCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBGSUZPLlxuIgorbXNnc3RyICJAaSAlaSAoJVEpIGVzdGFzIEBJIHZpY21lbW9yby5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIHNvY2tldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc2Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBzb2NrZXQuXG4iCittc2dzdHIgIkBpICVpICglUSkgZXN0YXMgQEkga29uZWt0aWxvLlxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHRvICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODEKK21zZ2lkICJTZXR0aW5nIGZpbGV0eXBlIGZvciBARSB0byAlTi5cbiIKK21zZ3N0ciAiQWdvcmRpxJ1hcyBkb3NpZXJ0aXBvIHBvciBARSBhbCAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBzaG91bGQgYmUgJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODYKK21zZ2lkICJARSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBAcyAlTikuXG4iCittc2dzdHIgIkBFIGhhdmFzIG1hbMSddXN0YW4gZG9zaWVydGlwb24gKGVzdGFzICVEdCwgQHMgJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5MQorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIkBFIGhhdmFzIGRvc2llcnRpcG9uIGFnb3JkaXRhLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIHplcm8tbGVuZ3RoIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5NgorbXNnaWQgIkBFIGhhcyBhIEB6IG5hbWUuXG4iCittc2dzdHIgIkBFIGhhdmFzIG5vbW9uIGt1biBudWxhIGxvbmdvLlxuIgorCisjLiBALWV4cGFuZGVkOiBTeW1saW5rICVRIChpbm9kZSAjJWkpIGlzIGludmFsaWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMwMQorbXNnaWQgIlN5bWxpbmsgJVEgKEBpICMlaSkgaXMgQG4uXG4iCittc2dzdHIgIlNpbWJvbGEgbGlnbyAlUSAoQGkgJWkpIG1hbHZhbGlkYXMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDYKK21zZ2lkICJAYSBAYiBARiBAbiAoJUlmKS5cbiIKK21zZ3N0ciAiQGIgZGUgZXRlbmRpdGFqIGF0cmlidXRvaiBARiBtYWx2YWxpZGEgKCVJZikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzExCittc2dpZCAiQGYgY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gQFMuXG4iCittc2dzdHIgIiIKKyJAZiBlbmhhdmFzIGdyYW5kYWpuIGRvc2llcm9qbiwgc2VkIG1hbGplc2FzIGZsYWdvICdMQVJHRV9GSUxFJyBlbiBAUy5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxNgorbXNnaWQgIkBwIEBoICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgbmUgcmVmZXJlbmNpxJ1hc1xuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjEKK21zZ2lkICJAcCBAaCAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgcmVmZXJlbmNpxJ1hcyBkdW9ibGVcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI2Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIGhhdmFzIG1hbHZhbGlkYW4gbWluaW11bWFuIGhha2V0b25cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMxCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIGhhdmFzIG1hbHZhbGlkYW4gbWFrc2ltdW1hbiBoYWtldG9uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzNgorbXNnaWQgIkBuIEBoICVkICglcSkuICAiCittc2dzdHIgIkBuIEBoICVkICglcSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSk6IGJhZCBibG9jayBudW1iZXIgJWIuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM0MAorbXNnaWQgIkBwIEBoICVkICglcSk6IGJhZCBAYiBudW1iZXIgJWIuXG4iCittc2dzdHIgIkBwIEBoICVkICglcSk6IG1hbHZhbGlkYSBibG9rbnVtZXJvICViLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogcm9vdCBub2RlIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBwIEBoICVkOiByb290IG5vZGUgaXMgQG5cbiIKK21zZ3N0ciAiQHAgQGggJWQ6IHJhZGlrYSBub2RvIGVzdGFzIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBsaW1pdCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1NQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gbGltaXQgKCVOKVxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgaGF2YXMgbWFsdmFsaWRhbiBsaW1vbiAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBjb3VudCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gY291bnQgKCVOKVxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgaGF2YXMgbWFsdmFsaWRhbiBub21icm9uICglTilcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjUKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4iCittc2dzdHIgIkBwIEBoICVkOiAlQiBoYXZhcyBuZW9yZGlnaXRhbiBoYWtldGFuIHRhYmVsb25cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGRlcHRoICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzcwCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBkZXB0aCAoJU4pXG4iCittc2dzdHIgIkBwIEBoICVkOiAlQiBoYXZhcyBtYWx2YWxpZGFuIHByb2Z1bmRvbiAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzUKK21zZ2lkICJEdXBsaWNhdGUgQEUgZm91bmQuICAiCittc2dzdHIgIkR1b2JsYSBARSB0cm92acSdaXMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbgorIy4gQC1leHBhbmRlZDogUmVuYW1lIHRvICVzCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODAKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiIgorIkBFIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4iCisiUmVuYW1lIHRvICVzIgorbXNnc3RyICIiCisiQEUgaGF2YXMgbmV1bmlrYW4gZG9zaWVybm9tb24uXG4iCisixIh1IGFsaW5vbWkgYWwgJXMiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBmb3VuZC5cbgorIy4gQC1leHBhbmRlZDogXHRNYXJraW5nICVwICglaSkgdG8gYmUgcmVidWlsdC5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4NQorbXNnaWQgIiIKKyJEdXBsaWNhdGUgQGUgJyVEbicgZm91bmQuXG4iCisiXHRNYXJraW5nICVwICglaSkgdG8gYmUgcmVidWlsdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkR1b2JsYSBAZSAnJURuJyB0cm92acSdaXMuXG4iCisiICAgIE1hcmtpxJ1hcyAlcCAoJWkpIHBvciByZWtvbnN0cnVvLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Jsb2Nrc19oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5MAorbXNnaWQgImlfYmxvY2tzX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICInaV9ibG9ja3NfaGknIEBGICVOLCBAcyBudWxvLlxuIgorCisjLiBALWV4cGFuZGVkOiBVbmV4cGVjdGVkIGJsb2NrIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTUKK21zZ2lkICJVbmV4cGVjdGVkIEBiIGluIEBoICVkICglcSkuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBpbiBncm91cCAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk5Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgaW4gQGcgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4iCittc2dzdHIgIkBFIHJlZmVyZW5jYXMgaS1ub2RvbiAlRGkgZW4gQGcgJWcga2llIGplc2FzICdfSU5PREVfVU5JTklUJy5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBmb3VuZCBpbiBncm91cCAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDA0Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgZm91bmQgaW4gQGcgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4iCittc2dzdHIgIkBFIHJlZmVyZW5jYXMgaS1ub2RvbiAlRGkga2l1IHRyb3ZpxJ1hcyBqZSBuZXV6YXRhaiBpLW5vZG9qIGRlIEBnICVnLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDA5Cittc2dpZCAiaV9maWxlX2FjbF9oaSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiJ2lfZmlsZV9hY2xfaGknIEBGICVOLCBAcyBudWxvLlxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDE2Cittc2dpZCAiUGFzcyAzOiBDaGVja2luZyBAZCBjb25uZWN0aXZpdHlcbiIKK21zZ3N0ciAiUGHFnW8gMzogS29udHJvbG8gZGUga29uZWt0b2ogaW50ZXIgZG9zaWVydWpvai4uLlxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIG5vdCBhbGxvY2F0ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyMQorbXNnaWQgIkByIG5vdCBhbGxvY2F0ZWQuICAiCittc2dzdHIgIkByIG5lIGFzaWduYXRhcy4gICIKKworIy4gQC1leHBhbmRlZDogTm8gcm9vbSBpbiBsb3N0K2ZvdW5kIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDI2Cittc2dpZCAiTm8gcm9vbSBpbiBAbCBAZC4gICIKK21zZ3N0ciAiTmUgZXN0YXMgcGx1IGRhIHNwYWNvIGVuIGRvc2llcnVqbyAnQGwnLiAgIgorCisjLiBALWV4cGFuZGVkOiBVbmNvbm5lY3RlZCBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5jb25uZWN0ZWQgQGQgQGkgJWkgKCVwKVxuIgorbXNnc3RyICJOZWtvbmVrdGl0YSBkb3NpZXJ1amEgQGkgJWkgKCVwKVxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBub3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzNgorbXNnaWQgIi9AbCBub3QgZm91bmQuICAiCittc2dzdHIgIi9AbCBuZSB0cm92acSdaXMuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBzaG91bGQgYmUgJXEgKCVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQxCittc2dpZCAiJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIEBzICVxICglZCkuXG4iCittc2dzdHIgIicuLicgZW4gJVEgKCVpKSBlc3RhcyAlUCAoJWopLCBkZXZ1cyBlc3RpICVxICglZCkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBvciBub24tZXhpc3RlbnQgL2xvc3QrZm91bmQuICBDYW5ub3QgcmVjb25uZWN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDYKK21zZ2lkICJCYWQgb3Igbm9uLWV4aXN0ZW50IC9AbC4gIENhbm5vdCByZWNvbm5lY3QuXG4iCittc2dzdHIgIk1hbGJvbmFzIGHFrSBuZSBla3ppc3RhcyAvQGwuICBOZSBlYmxhcyByZWtvbmVrdGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkIG5vdCBleHBhbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZXhwYW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiTWFsc3VrY2VzaXMgZXRlbmRpIC9AbDogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWNvbm5lY3QgJWk6ICVtXG4iCittc2dzdHIgIk1hbHN1a2Nlc2lzIHJla29uZWt0aSAlaTogbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiRXJhcm8gZHVtIHNlcsSJbyBkZSAvQGw6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfYmxvY2s6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BiOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X2Jsb2NrKCk6ICVtIGR1bSBrcmVhZG8gZGUgZG9zaWVydWpvIC9AbFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2lub2RlOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AaTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19pbm9kZSgpOiAlbSBkdW0ga3JlYWRvIGRlIGRvc2llcnVqbyAvQGxcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfZGlyX0BiOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgQGQgQGJcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19kaXJfYmxvY2soKTogJW0gZHVtIGtyZWFkbyBkZSBub3ZhIHVqYSBibG9rb1xuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBkaXJlY3RvcnkgYmxvY2sgZm9yIC9sb3N0K2ZvdW5kXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfd3JpdGVfZGlyX0BiOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBAZCBAYiBmb3IgL0BsXG4iCittc2dzdHIgImV4dDJmc193cml0ZV9kaXJfYmxvY2soKTogJW0gZHVtIHNrcmliYWRvIGRlIHVqYSBibG9rbyBwb3IgL0BsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGFkanVzdGluZyBpbm9kZSBjb3VudCBvbiBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgYWRqdXN0aW5nIEBpIGNvdW50IG9uIEBpICVpXG4iCittc2dzdHIgIkVyYXJvIGR1bSBhbMSddXN0aWdvIGRlIGktbm9kYSBub21icm8gamUgaS1ub2RvICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkbid0IGZpeCBwYXJlbnQgb2YgaW5vZGUgJWk6ICVtXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgZGlyZWN0b3J5IGVudHJ5XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IEBkIEBlXG4iCisiXG4iCittc2dzdHIgIiIKKyJOZSBlYmxhcyBmaWtzaSBwYWRyb24gZGUgQGkgJWk6IG1hbGVibGlzIHRyb3ZpIHVqZXJvbiBwb3IgcGFkcm9cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgcm9vdCBkaXJlY3RvcnkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHJvb3QgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiRXJhcm8gZHVtIGtyZWFkbyBkZSByYWRpa2EgZG9zaWVydWpvICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgL0BsIEBkICglcyk6ICVtXG4iCittc2dzdHIgIkVyYXJvIGR1bSBrcmVhZG8gZGUgZG9zaWVydWpvIC9AbCAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeTsgYWJvcnRpbmcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxNgorbXNnaWQgIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIKK21zZ3N0ciAiQHIgbmUgZXN0YXMgZG9zaWVydWpvIC0tIMSJZXNpZ28uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MjEKK21zZ2lkICJDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgQHIuXG4iCittc2dzdHIgIk5lIGVibGFzIGRhxa1yaWdpIHNlbiBAci5cbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgaXMgbm90IGEgZGlyZWN0b3J5IChpbm89JWkpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUzMQorIywgYy1mb3JtYXQKK21zZ2lkICIvQGwgaXMgbm90IGEgQGQgKGlubz0laSlcbiIKK21zZ3N0ciAiL0BsIG5lIGVzdGFzIGRvc2llcnVqbyAoaS1ub2RvPSVpKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzgKK21zZ2lkICJQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzXG4iCittc2dzdHIgIlBhxZ1vIDNBOiBPcHRpbXVtaWdvIGRlIGRvc2llcnVqb2ouLi5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZGlyc190b19oYXNoIGl0ZXJhdG9yOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0OAorbXNnaWQgIkZhaWxlZCB0byBvcHRpbWl6ZSBkaXJlY3RvcnkgJXEgKCVkKTogJW1cbiIKK21zZ3N0ciAiRmlhc2tpcyBvcHRpbXVtaWdvIGRlIGRvc2llcnVqbyAlcSAoJWQpOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NTMKK21zZ2lkICJPcHRpbWl6aW5nIGRpcmVjdG9yaWVzOiAiCittc2dzdHIgIk9wdGltdW1pZ28gZGUgZG9zaWVydWpvajogIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzAKK21zZ2lkICJQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHNcbiIKK21zZ3N0ciAiUGHFnW8gNDogS29udHJvbG8gZGUgbm9tYnJvaiBkZSByZWZlcmVuY29qLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgemVyby1sZW5ndGggaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAeiBAaSAlaS4gICIKK21zZ3N0ciAiQHUgQGkgJWkga3VuIG51bGEgbG9uZ28uICAiCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEBpICVpXG4iCittc2dzdHIgIkB1IEBpICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg1Cittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgInJlZmVyZW5jbm9tYnJvIGRlIEBpICVpIGVzdGFzICVJbCwgQHMgJU4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4OQorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiKipBVkVSVE8qKjogZWJsYSBwcm9ncmFtbWlzbyBlbiAnZTJmc2NrJywgYcWtIHBsaSBwcm9iYWJsZVxuIgorIiAgICBJVSBTVFVMVFVMTyAodmkpIGtvbnRyb2xhcyBWSVZBTiAoU1VSTUVUQVRBTikgRE9TSUVSU0lTVEVNT04uXG4iCisiXG4iCisiaW5vZGVfbGlua19pbmZvWyVpXSBlc3RhcyAlTiwgaW5vZGUuaV9saW5rc19jb3VudCBlc3RhcyAlSWwgLS0gaWxpIGRldnVzICIKKyJlZ2FsaSFcbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU5OQorbXNnaWQgIlBhc3MgNTogQ2hlY2tpbmcgQGcgc3VtbWFyeSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICJQYcWdbyA1OiBLb250cm9sbyBkZSBncnVwYSByZXN1bWEgaW5mb3Jtby4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBpbm9kZSBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDQKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAaSBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIsWcdG9wYWRvIGplIGZpbm8gZGUgaS1ub2RhIGJpdG1hcG8gbmUgYWdvcmRpxJ1hcy4gIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDkKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIsWcdG9wYWRvIGplIGZpbm8gZGUgYmxva2EgYml0bWFwbyBuZSBhZ29yZGnEnWFzLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MTQKK21zZ2lkICJAYiBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJNYWxzYW1vaiBlbiBibG9rYSBiaXRtYXBvOiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MzQKK21zZ2lkICJAaSBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJNYWxzYW1vaiBlbiBpLW5vZGEgYml0bWFwbzogIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1NAorbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiIgorIk5vbWJybyBkZSBsaWJlcmFqIGktbm9kb2ogbWFsxJ11c3RhcyBwb3IgZ3J1cG8gJWcgKGVzdGFzICVpLCBub21icmnEnWlzICVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTkKK21zZ2lkICJEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIiIKKyJOb21icm8gZGUgZG9zaWVydWpvaiBtYWzEnXVzdGFzIHBvciBncnVwbyAlZyAoZXN0YXMgJWksIG5vbWJyacSdaXMgJWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjQKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICJOb21icm8gZGUgbGliZXJhaiBpLW5vZG9qIG1hbMSddXN0YXMgKGVzdGFzICVpLCBub21icmnEnWlzICVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjkKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIiIKKyJOb21icm8gZGUgbGliZXJhaiBibG9rb2ogbWFsxJ11c3RhcyBwb3IgZ3J1cG8gJWcgKGVzdGFzICViLCBub21icmnEnWlzICVjKVxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NzQKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJOb21icm8gZGUgbGliZXJhaiBibG9rb2ogbWFsxJ11c3RhcyAoZXN0YXMgJWIsIG5vbWJyacSdaXMgJWMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBST0dSQU1NSU5HIEVSUk9SOiBmaWxlc3lzdGVtICgjJU4pIGJpdG1hcCBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBiaXRtYXAgCisjLiBALWV4cGFuZGVkOiBlbmRwb2ludHMgKCVpLCAlailcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjc5Cittc2dpZCAiIgorIlBST0dSQU1NSU5HIEVSUk9SOiBAZiAoIyVOKSBAQiBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBAQiAiCisiZW5kcG9pbnRzICglaSwgJWopXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjg1Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGZ1ZGdpbmcgZW5kIG9mIGJpdG1hcCAoJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBpbm9kZSBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBpIEBCOiAlbVxuIgorbXNnc3RyICJFcmFybyBkdW0ga29waWFkbyBkZSBhbnN0YXRhxa1hIGktbm9kYSBAQjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBiIEBCOiAlbVxuIgorbXNnc3RyICJFcmFybyBkdW0ga29waWFkbyBkZSBhbnN0YXRhxa1hIGJsb2thIEBCOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBibG9jayhzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBiKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuIgorbXNnc3RyICIiCisiQGcgJWcgaGF2YXMgYmxva29qbiB1emF0YWpuLCBzZWQgbGEgQGcgZXN0YXMgbWFya2l0YSBraWVsICdCTE9DS19VTklOSVQnXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGlub2RlKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGkocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4iCittc2dzdHIgIiIKKyJAZyAlZyBoYXZhcyBpLW5vZG9qbiB1emF0YWpuLCBzZWQgbGEgQGcgZXN0YXMgbWFya2l0YSBraWVsICdJTk9ERV9VTklOSVQnXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlY3JlYXRlIGpvdXJuYWwKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTczMgorbXNnaWQgIlJlY3JlYXRlIEBqIgorbXNnc3RyICLEiHUgcmVrcmVpIGthxZ1wcm90b2tvbG9uIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MzcKK21zZ2lkICJVcGRhdGUgcXVvdGEgaW5mbyBmb3IgcXVvdGEgdHlwZSAlTiIKK21zZ3N0ciAixIh1IMSdaXNkYXRpZ2kga3ZvdGFuIGluZm9ybW9uIHBvciBrdm90dGlwbyAlTiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc2V0dGluZyBibG9jayBncm91cCBjaGVja3N1bSBpbmZvOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBAYiBAZyBjaGVja3N1bSBpbmZvOiAlbVxuIgorbXNnc3RyICJFcmFybyBkdW0gYWdvcmRvIGRlIGJsb2tncnVwYSBrb250cm9sc3VtbzogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgZmlsZSBzeXN0ZW0gaW5mbzogJW1cbiIKK21zZ3N0ciAiRXJhcm8gZHVtIHNrcmliYWRvIGRlIGRvc2llcnNpc3RlbWEgaW5mb3JtbzogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGZsdXNoaW5nIHdyaXRlcyB0byBzdG9yYWdlIGRldmljZTogJW1cbiIKK21zZ3N0ciAiRXJhcm8gZHVtIGVsYnVmcmlnbyBkZSBza3JpYm9qIGFsIG1lbW9yYXBhcmF0bzogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaGFuZGxlZCBlcnJvciBjb2RlICgweCV4KSFcbiIKK21zZ3N0ciAiTmV0cmFrdGF0YSBlcmFya29kbyAoMHgleCkhXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk5NiBlMmZzY2svcHJvYmxlbS5jOjIwMDAKK21zZ2lkICJJR05PUkVEIgorbXNnc3RyICJJR05PUknEnElTIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWQsIGVsYXBzZWQgdGltZTogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKK21zZ3N0ciAiVXphdGEgbWVtb3JvOiAlZCwgcGFzaW50YSB0ZW1wbzogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic2l6ZSBvZiBpbm9kZT0lZFxuIgorbXNnc3RyICJncmFuZG8gZGUgaS1ub2RvPSVkXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjExOQorbXNnaWQgIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iCittc2dzdHIgImR1bSBrb21lbmNvIGRlIHNrYW5vIGRlIGktbm9kb2oiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjEzMAorbXNnaWQgIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iCittc2dzdHIgImR1bSBza2FuYWRvIGRlIGktbm9kb2oiCisKKyM6IGUyZnNjay9zdXBlci5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19ibG9ja19pdGVyYXRlIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAiZHVtIGFsdm9rbyBkZSAnZXh0MmZzX2Jsb2NrX2l0ZXJhdGUoKScgcG9yIGktbm9kbyAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZm9yIGlub2RlICVkIgorbXNnc3RyICJkdW0gYWx2b2tvIGRlICdleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MigpJyBwb3IgaS1ub2RvICVkIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzQKK21zZ2lkICJUcnVuY2F0aW5nIgorbXNnc3RyICJUcnVua2nEnWFzIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzUKK21zZ2lkICJDbGVhcmluZyIKK21zZ3N0ciAiVmnFnWnEnWFzIgorCisjOiBlMmZzY2svdW5peC5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1wYW55cmNkZnZ0REZWXSBbLWIgc3VwZXJibG9ja10gWy1CIGJsb2Nrc2l6ZV1cbiIKKyJcdFx0Wy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIFstUCBwcm9jZXNzX2lub2RlX3NpemVdXG4iCisiXHRcdFstbHwtTCBiYWRfYmxvY2tzX2ZpbGVdIFstQyBmZF0gWy1qIGV4dGVybmFsX2pvdXJuYWxdXG4iCisiXHRcdFstRSBleHRlbmRlZC1vcHRpb25zXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIlV6bWFuaWVybzogICVzIFstcG55Y2ZrdHZERlZdIFstYiDEiWVmYmxva29dIFstQiBibG9rZ3JhbmRvXVxuIgorIiAgICAgICAgICAgICAgICAgICBbLUMgZG9zaWVycHJpYcS1b10gWy1FIGV0ZW5kaXRhal9vcGNpb2pdXG4iCisiICAgICAgICAgICAgICAgICAgIFstSSBpX25vZGFfYnVmcm9ibG9rb2pdIFstaiBla3N0ZXJhX2thxZ1wcm90b2tvbG9dXG4iCisiICAgICAgICAgICAgICAgICAgIFstbHwtTCBtYWxib25ibG9rYV9kb3NpZXJvXSAgYXBhcmF0b1xuIgorCisjOiBlMmZzY2svdW5peC5jOjgwCittc2dpZCAiIgorIlxuIgorIkVtZXJnZW5jeSBoZWxwOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgcmVwYWlyIChubyBxdWVzdGlvbnMpXG4iCisiIC1uICAgICAgICAgICAgICAgICAgIE1ha2Ugbm8gY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbVxuIgorIiAteSAgICAgICAgICAgICAgICAgICBBc3N1bWUgXCJ5ZXNcIiB0byBhbGwgcXVlc3Rpb25zXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBiYWQgYmxvY2tzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmFkYmxvY2sgIgorImxpc3RcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBjbGVhblxuIgorbXNnc3RyICIiCisiXG4iCisiS3JpemEgaGVscG86XG4iCisiIC1wICAgIGHFrXRvbWF0ZSByaXBhcmkgKHNlbiBkZW1hbmRvailcbiIKKyIgLW4gICAgbmVuaWVsIMWdYW7EnWkgbGEgZG9zaWVyc2lzdGVtb25cbiIKKyIgLXkgICAgc3Vwb3ppICdqZXMnIGplIMSJaXUgZGVtYW5kb1xuIgorIiAtYyAgICBrb250cm9saSBwb3IgbWFsYm9uYWogYmxva29qIGthaiBhbGRvbmkgaWxpbiBhbCBtYWxib25ibG9rYSBsaXN0b1xuIgorIiAtZiAgICBkZXZpZ2kga29udHJvbG9uLCBlxIkgc2UgZG9zaWVyc2lzdGVtbyBlc3RhcyBtYXJraXRhIGtpZWwgcHVyYVxuIgorCisjOiBlMmZzY2svdW5peC5jOjg2Cittc2dpZCAiIgorIiAtdiAgICAgICAgICAgICAgICAgICBCZSB2ZXJib3NlXG4iCisiIC1iIHN1cGVyYmxvY2sgICAgICAgIFVzZSBhbHRlcm5hdGl2ZSBzdXBlcmJsb2NrXG4iCisiIC1CIGJsb2Nrc2l6ZSAgICAgICAgIEZvcmNlIGJsb2Nrc2l6ZSB3aGVuIGxvb2tpbmcgZm9yIHN1cGVyYmxvY2tcbiIKKyIgLWogZXh0ZXJuYWxfam91cm5hbCAgU2V0IGxvY2F0aW9uIG9mIHRoZSBleHRlcm5hbCBqb3VybmFsXG4iCisiIC1sIGJhZF9ibG9ja3NfZmlsZSAgIEFkZCB0byBiYWRibG9ja3MgbGlzdFxuIgorIiAtTCBiYWRfYmxvY2tzX2ZpbGUgICBTZXQgYmFkYmxvY2tzIGxpc3RcbiIKK21zZ3N0ciAiIgorIiAtdiAgICBlbGlnaSBkZXRhbG9qbiBwcmkgbGEgZmFyYWRvXG4iCisiIC1iIDxudW1lcm8+ICAgICAgICB1emVuZGEgYWx0ZXJuYXRpdmEgxIllZmJsb2tvXG4iCisiIC1CIDxub21icm8+ICAgICAgICBkZXZpZ2EgYmxva2dyYW5kbyBkdW0gc2VyxIlvIGRlIMSJZWZibG9rb1xuIgorIiAtaiA8cGFkbz4gICAgICAgICAgbG9rbyBkZSBsYSBla3N0ZXJhIGthxZ1wcm90b2tvbG9cbiIKKyIgLWwgPGRvc2llcm5vbW8+ICAgIGFsZG9uaSBhbCBtYWxib25ibG9rYSBsaXN0b1xuIgorIiAtTCA8ZG9zaWVybm9tbz4gICAgdXplbmRhIGtpZWwgbWFsYm9uYmxva2EgbGlzdG9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICVsbHUvJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXM6ICV1LyV1IGRvc2llcm9qICglMGQuJWQlJSBuZWtvbnRpbnVhKSwgJWxsdS8lbGx1IGJsb2tvalxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTEydSBpbm9kZSB1c2VkICglMi4yZiUlLCBvdXQgb2YgJXUpXG4iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyIlMTJ1IGlub2RlcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJXUpXG4iCittc2dzdHJbMF0gIiIKKyJcbiIKKyIlMTJ1IGktbm9kbyB1eml0YSAoJTIuMmYlJSwgZWwgZGUgJXUpXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IGktbm9kb2ogdXppdGFqICglMi4yZiUlLCBlbCBkZSAldSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBmaWxlICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBmaWxlcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiUxMnUgbmVrb250aW51YSBkb3NpZXJvICglMGQuJWQlJSlcbiIKK21zZ3N0clsxXSAiJTEydSBuZWtvbnRpbnVhaiBkb3NpZXJvaiAoJTBkLiVkJSUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3J5ICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcmllcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiUxMnUgbmVrb250aW51YSBkb3NpZXJ1am8gKCUwZC4lZCUlKVxuIgorbXNnc3RyWzFdICIlMTJ1IG5la29udGludWFqIGRvc2llcnVqb2ogKCUwZC4lZCUlKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgICAgICAgIyBvZiBpbm9kZXMgd2l0aCBpbmQvZGluZC90aW5kIGJsb2NrczogJXUvJXUvJXVcbiIKK21zZ3N0ciAiIgorIiAgICAgICAgICAgICBub21icm8gZGUgaS1ub2RvaiBrdW4gbmVyZWt0YWogYmxva29qOiAldSBzaW1wbGUsICV1IGR1b2JsZSwgJXUgIgorInRyaW9ibGVcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzkKK21zZ2lkICIgICAgICAgICAgICAgRXh0ZW50IGRlcHRoIGhpc3RvZ3JhbTogIgorbXNnc3RyICIgICAgICAgICAgICAgaGlzdG9ncmFtbyBkZSBhbXBsZWtzYSBwcm9mdW5kbzogIgorCisjOiBlMmZzY2svdW5peC5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJsbHUgYmxvY2sgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dpZF9wbHVyYWwgIiUxMmxsdSBibG9ja3MgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dzdHJbMF0gIiUxMmxsdSBibG9rbyB1eml0YSAoJTIuMmYlJSwgZWwgZGUgJWxsdSlcbiIKK21zZ3N0clsxXSAiJTEybGx1IGJsb2tvaiB1eml0YWogKCUyLjJmJSUsIGVsIGRlICVsbHUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmFkIGJsb2NrXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmFkIGJsb2Nrc1xuIgorbXNnc3RyWzBdICIlMTJ1IGRpZmVrdGEgYmxva29cbiIKK21zZ3N0clsxXSAiJTEydSBkaWZla3RhaiBibG9rb2pcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsYXJnZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGFyZ2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBncmFuZGEgZG9zaWVyb1xuIgorbXNnc3RyWzFdICIlMTJ1IGdyYW5kYWogZG9zaWVyb2pcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiUxMnUgbm9ybWFsYSBkb3NpZXJvXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IG5vcm1hbGFqIGRvc2llcm9qXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZGlyZWN0b3J5XG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZGlyZWN0b3JpZXNcbiIKK21zZ3N0clswXSAiJTEydSBkb3NpZXJ1am9cbiIKK21zZ3N0clsxXSAiJTEydSBkb3NpZXJ1am9qXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IHNpZ25vLWFwYXJhdG9cbiIKK21zZ3N0clsxXSAiJTEydSBzaWduby1hcGFyYXRvalxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgYmxva2FwYXJhdG9cbiIKK21zZ3N0clsxXSAiJTEydSBibG9rYXBhcmF0b2pcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWZvXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlmb3NcbiIKK21zZ3N0clswXSAiJTEydSB2aWNtZW1vcm9cbiIKK21zZ3N0clsxXSAiJTEydSB2aWNtZW1vcm9qXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbGlua1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGxpbmtzXG4iCittc2dzdHJbMF0gIiUxMnUgbGlnb1xuIgorbXNnc3RyWzFdICIlMTJ1IGxpZ29qXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgc3ltYm9saWMgbGluayIKK21zZ2lkX3BsdXJhbCAiJTEydSBzeW1ib2xpYyBsaW5rcyIKK21zZ3N0clswXSAiJTEydSBzaW1ib2xhIGxpZ28iCittc2dzdHJbMV0gIiUxMnUgc2ltYm9sYWogbGlnb2oiCisKKyM6IGUyZnNjay91bml4LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rKVxuIgorbXNnaWRfcGx1cmFsICIgKCV1IGZhc3Qgc3ltYm9saWMgbGlua3MpXG4iCittc2dzdHJbMF0gIiAoJXUgcmFwaWRhIHNpbWJvbGEgbGlnbylcbiIKK21zZ3N0clsxXSAiICgldSByYXBpZGFqIHNpbWJvbGFqIGxpZ29qKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHNvY2tldFxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IHNvY2tldHNcbiIKK21zZ3N0clswXSAiJTEydSBrb25la3RpbG9cbiIKK21zZ3N0clsxXSAiJTEydSBrb25la3RpbG9qXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgZG9zaWVyb1xuIgorbXNnc3RyWzFdICIlMTJ1IGRvc2llcm9qXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjMyIG1pc2MvYmFkYmxvY2tzLmM6OTkzIG1pc2MvdHVuZTJmcy5jOjIxMjIgbWlzYy91dGlsLmM6MzE2CisjOiByZXNpemUvbWFpbi5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuIgorbXNnc3RyICJkdW0gZWx0cm92byBzZSAlcyBlc3RhcyBzdXJtZXRhdGEuIgorCisjOiBlMmZzY2svdW5peC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiQXZlcnRvISAgJXMgZXN0YXMgc3VybWV0YXRhLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgaW4gdXNlLlxuIgorbXNnc3RyICJBdmVydG8hICAlcyB1emnEnWFzLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICIlcyBlc3RhcyBzdXJtZXRhdGEuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGluIHVzZS5cbiIKK21zZ3N0ciAiJXMgdXppxJ1hcy5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjYKK21zZ2lkICIiCisiQ2Fubm90IGNvbnRpbnVlLCBhYm9ydGluZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5lIGVibGFzIGRhxa1yaWdpIC0tIMSJZXNpZ28uXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY4Cittc2dpZCAiIgorIlxuIgorIlxuIgorIldBUk5JTkchISEgIFRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuICAgSWYgeW91IGNvbnRpbnVlIHlvdSAqKipXSUxMKioqXG4iCisiY2F1c2UgKioqU0VWRVJFKioqIGZpbGVzeXN0ZW0gZGFtYWdlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiKipBVkVSVE8qKiEhICBMYSBkb3NpZXJzaXN0ZW1vIGVzdGFzIHN1cm1ldGF0YSEhXG4iCisiICAgIFNlIHZpIGtvbnRpbnVhcywgdmkgKipLQcWsWk9TKiogKipTRVZFUkFKTioqIGRvc2llcnNpc3RlbWFqbiBkaWZla3Rvam4uXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjczCittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIGNvbnRpbnVlIgorbXNnc3RyICLEiHUgdmkgdmVyZSB2b2xhcyBrb250aW51aSIKKworIzogZTJmc2NrL3VuaXguYzoyNzUKK21zZ2lkICJjaGVjayBhYm9ydGVkLlxuIgorbXNnc3RyICJrb250cm9sbyDEiWVzaWdpxJ1pcy5cbiIKKworIzogZTJmc2NrL3VuaXguYzozNjgKK21zZ2lkICIgY29udGFpbnMgYSBmaWxlIHN5c3RlbSB3aXRoIGVycm9ycyIKK21zZ3N0ciAiIGVuaGF2YXMgZG9zaWVyc2lzdGVtb24ga3VuIGVyYXJvaiIKKworIzogZTJmc2NrL3VuaXguYzozNzAKK21zZ2lkICIgd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCIKK21zZ3N0ciAiIG5lIGRlbWV0acSdaXMgdHV0a29yZWt0ZSIKKworIzogZTJmc2NrL3VuaXguYzozNzIKK21zZ2lkICIgcHJpbWFyeSBzdXBlcmJsb2NrIGZlYXR1cmVzIGRpZmZlcmVudCBmcm9tIGJhY2t1cCIKK21zZ3N0ciAiIHVudWEgxIllZmJsb2tvIGhhdmFzIGFsaWFqbiBmdW5rY2lvam4gb2wgc2F2a29waWEiCisKKyM6IGUyZnNjay91bml4LmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgYmVlbiBtb3VudGVkICV1IHRpbWVzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIHN1cm1ldGnEnWlzICV1IGZvam9qbiBzZW4gZXN0aSBrb250cm9sYXRhIgorCisjOiBlMmZzY2svdW5peC5jOjM4MworbXNnaWQgIiBoYXMgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdGltZSBpbiB0aGUgZnV0dXJlIgorbXNnc3RyICIgaGF2YXMgdGVtcG9uIGRlIGtvbnRyb2xvIGVuIGxhIGVzdG9udGVjbyIKKworIzogZTJmc2NrL3VuaXguYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBnb25lICV1IGRheXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgcGFzaXMgJXUgdGFnb2puIHNlbiBrb250cm9sbyIKKworIzogZTJmc2NrL3VuaXguYzozOTgKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiOyBwZXJmb3J0YSBrb250cm9sby5cbiIKKworIzogZTJmc2NrL3VuaXguYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuLCAldS8ldSBmaWxlcywgJWxsdS8lbGx1IGJsb2NrcyIKK21zZ3N0ciAiJXM6IHB1cmEsICV1LyV1IGRvc2llcm9qLCAlbGx1LyVsbHUgYmxva29qIgorCisjOiBlMmZzY2svdW5peC5jOjQ1MQorbXNnaWQgIiAoY2hlY2sgZGVmZXJyZWQ7IG9uIGJhdHRlcnkpIgorbXNnc3RyICIgKGtvbnRyb2xvIHByb2tyYXN0aXM7IHN1ciBiYXRlcmlvKSIKKworIyBGSVhNRTogbWF5YmUgKnVwb24qIG5leHQgbW91bnQ/CisjOiBlMmZzY2svdW5peC5jOjQ1NAorbXNnaWQgIiAoY2hlY2sgYWZ0ZXIgbmV4dCBtb3VudCkiCittc2dzdHIgIiAoa29udHJvbGnEnW9zIGplIHNla3ZhIHN1cm1ldG8pIgorCisjOiBlMmZzY2svdW5peC5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGNoZWNrIGluICVsZCBtb3VudHMpIgorbXNnc3RyICIgKGtvbnRyb2xpxJ1vcyBlbiAlbGQgc3VybWV0b2opIgorCisjOiBlMmZzY2svdW5peC5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogQ291bGRuJ3Qgb3BlbiAvZGV2L251bGwgKCVzKVxuIgorbXNnc3RyICJFcmFybzogZmlhc2tpcyBtYWxmZXJtaSAvZGV2L251bGwgKCVzKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjY3NQorbXNnaWQgIkludmFsaWQgRUEgdmVyc2lvbi5cbiIKK21zZ3N0ciAiTWFsdmFsaWRhIHZlcnNpbyBkZSBFQS5cbiIKKworIzogZTJmc2NrL3VuaXguYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBleHRlbmRlZCBvcHRpb246ICVzXG4iCittc2dzdHIgIk5la29uYXRhIGV0ZW5kaXRhIG9wY2lvOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjcyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIGUyZnNjayBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjgwMQorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4MTYKK21zZ2lkICJPbmx5IG9uZSBvZiB0aGUgb3B0aW9ucyAtcC8tYSwgLW4gb3IgLXkgbWF5IGJlIHNwZWNpZmllZC4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC10IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4NjggZTJmc2NrL3VuaXguYzo5NDIgbWlzYy90dW5lMmZzLmM6ODc5IG1pc2MvdHVuZTJmcy5jOjExNzQKKyM6IG1pc2MvdHVuZTJmcy5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjkyMQorbXNnaWQgIlRoZSAtbiBhbmQgLUQgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjkyNgorbXNnaWQgIlRoZSAtbiBhbmQgLWMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjkzMQorbXNnaWQgIlRoZSAtbiBhbmQgLWwvLUwgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjk4NQorbXNnaWQgIlRoZSAtYyBhbmQgdGhlIC1sLy1MIG9wdGlvbnMgbWF5IG5vdCBiZSBib3RoIHVzZWQgYXQgdGhlIHNhbWUgdGltZS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG5vdCBhbiBpbnRlZ2VyXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJbnZhbGlkIG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGludGVydmFsIGlzICV1IHNlY29uZHMgYW5kIHRvdGFsIHdhaXQgdGltZSBpcyAldSBzZWNvbmRzLiBQbGVhc2UgIgorIndhaXQuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjExNDkgZTJmc2NrL3VuaXguYzoxMTU0Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgTU1QIGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTE1NiBtaXNjL3R1bmUyZnMuYzoyMDQ5Cittc2dpZCAiIgorIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSBpcyBub3QgaW4gdXNlIG9uIGFueSBub2RlLCBydW46XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V9J1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTIwNworbXNnaWQgIkVycm9yOiBleHQyZnMgbGlicmFyeSB2ZXJzaW9uIG91dCBvZiBkYXRlIVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTIxNAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBpbml0aWFsaXplIHByb2dyYW0iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXMsICVzXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMjQ5Cittc2dpZCAibmVlZCB0ZXJtaW5hbCBmb3IgaW50ZXJhY3RpdmUgcmVwYWlycyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzA1Cittc2dpZCAiU3VwZXJibG9jayBpbnZhbGlkLCIKK21zZ3N0ciAixIhlZmJsb2tvIG5ldmFsaWRhcywiCisKKyM6IGUyZnNjay91bml4LmM6MTMwNgorbXNnaWQgIkdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIgorbXNnc3RyICJHcnVwcHJpYcS1b2ogYXNwZWt0YXMgbWFsYm9uYWouLi4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgdXNpbmcgdGhlIGJhY2t1cCBibG9ja3MiCittc2dzdHIgIiVzOiAlcyBkdW0gdXphZG8gZGUgc2F2a29waWFqIGJsb2tvaiIKKworIzogZTJmc2NrL3VuaXguYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBnb2luZyBiYWNrIHRvIG9yaWdpbmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiJXM6IHJlaXJpxJ1hcyBhbCBvcmlnaW5hbGEgxIllZmJsb2tvXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM0OQorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSByZXZpc2lvbiBpcyBhcHBhcmVudGx5IHRvbyBoaWdoIGZvciB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorIihPciB0aGUgZmlsZXN5c3RlbSBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQpXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzU2Cittc2dpZCAiQ291bGQgdGhpcyBiZSBhIHplcm8tbGVuZ3RoIHBhcnRpdGlvbj9cbiIKK21zZ3N0ciAixIh1IGVibGUgxIlpIHRpdSBlc3RhcyBudWxsb25nYSBzdWJkaXNrbz9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBtdXN0IGhhdmUgJXMgYWNjZXNzIHRvIHRoZSBmaWxlc3lzdGVtIG9yIGJlIHJvb3RcbiIKK21zZ3N0ciAiVmkgYmV6b25hcyBoYXZpICVzIGF0aW5nb24gYWwgbGEgZG9zaWVyc2lzdGVtbywgYcWtIGVzdGkgxIllZnV6YW50b1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNjQKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgb3Igc3dhcCBkZXZpY2U/XG4iCittc2dzdHIgIsSIdSBlYmxlIGFwYXJhdG8gbmUgZWt6aXN0YXMgYcWtIGVzdGFzICdzd2FwJz9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY2Cittc2dpZCAiRmlsZXN5c3RlbSBtb3VudGVkIG9yIG9wZW5lZCBleGNsdXNpdmVseSBieSBhbm90aGVyIHByb2dyYW0/XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzcwCittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IGRldmljZT9cbiIKK21zZ3N0ciAixIh1IGVibGUgYXBhcmF0byBuZSBla3ppc3Rhcz9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzczCittc2dpZCAiIgorIkRpc2sgd3JpdGUtcHJvdGVjdGVkOyB1c2UgdGhlIC1uIG9wdGlvbiB0byBkbyBhIHJlYWQtb25seVxuIgorImNoZWNrIG9mIHRoZSBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNDM3Cittc2dpZCAiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBleHQzIGpvdXJuYWwgZm9yICVzIgorbXNnc3RyICJkdW0ga29udHJvbGFkbyBkZSBFeHQzLWthxZ1wcm90b2tvbG8gcG9yICVzIgorCisjOiBlMmZzY2svdW5peC5jOjE0OTIKK21zZ2lkICIiCisiV2FybmluZzogc2tpcHBpbmcgam91cm5hbCByZWNvdmVyeSBiZWNhdXNlIGRvaW5nIGEgcmVhZC1vbmx5IGZpbGVzeXN0ZW0gIgorImNoZWNrLlxuIgorbXNnc3RyICIiCisiQXZlcnRvOiB0cmFuc3NhbHRpxJ1hcyBrYcWdcHJvdG9rb2xhIHJlc3Rhxa1ybywgxIlhciBmYXJpxJ1hcyBudXJsZWdhIGtvbnRyb2xvIGRlICIKKyJkb3NpZXJzaXN0ZW1vLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBzdXBlcmJsb2NrIGZsYWdzIG9uICVzXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNTExCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlY292ZXJpbmcgZXh0MyBqb3VybmFsIG9mICVzIgorbXNnc3RyICJkdW0gcmVzdGHFrXJhZG8gZGUgRXh0My1rYcWdcHJvdG9rb2xvIHBvciAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpOiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhcm5pbmc6IGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IGUyZnNjayBub3QgY29tcGlsZWQgd2l0aCBIVFJFRSBzdXBwb3J0LFxuIgorIlx0YnV0IGZpbGVzeXN0ZW0gJXMgaGFzIEhUUkVFIGRpcmVjdG9yaWVzLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgcmVhZGluZyBiYWQgYmxvY2tzIGlub2RlXG4iCittc2dzdHIgIiVzOiAlcyBkdW0gbGVnYWRvIGRlIG1hbGJvbmJsb2thIGktbm9kb1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MTAKK21zZ2lkICJUaGlzIGRvZXNuJ3QgYm9kZSB3ZWxsLCBidXQgd2UnbGwgdHJ5IHRvIGdvIG9uLi4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCVkIGJsb2Nrcyk6ICIKK21zZ3N0ciAiS3JlYWRvIGRlIGthxZ1wcm90b2tvbG8gKCVkIGJsb2tvaik6ICIKKworIzogZTJmc2NrL3VuaXguYzoxNjYyCittc2dpZCAiIERvbmUuXG4iCittc2dzdHIgIiBQcmV0YXMuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY2NAorbXNnaWQgIiIKKyJcbiIKKyIqKiogam91cm5hbCBoYXMgYmVlbiByZS1jcmVhdGVkIC0gZmlsZXN5c3RlbSBpcyBub3cgZXh0MyBhZ2FpbiAqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIioqKiBrYcWdcHJvdG9rb2xvIHJla3JlacSdaXMgLS0gZG9zaWVyc2lzdGVtbyBlc3RhcyBkZW5vdmUgZXh0MyAqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjg4Cittc2dpZCAiUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjkyCittc2dpZCAid2hpbGUgcmVzZXR0aW5nIGNvbnRleHQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjk5Cittc2dpZCAiYWJvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGUyZnNjayBjYW5jZWxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE3NDEgZTJmc2NrL3V0aWwuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqIERPU0lFUlNJU1RFTU8gTU9ESUZJxJxJUyAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICoqKioqIFJFQk9PVCBMSU5VWCAqKioqKlxuIgorbXNnc3RyICIlczogKioqKiogUkVTVEFSVElHVSBMSU5VS1NPTiAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NTMgZTJmc2NrL3V0aWwuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogV0FSTklORzogRmlsZXN5c3RlbSBzdGlsbCBoYXMgZXJyb3JzICoqKioqKioqKipcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIEFWRVJUTzogRG9zaWVyc2lzdGVtbyBhbmtvcmHFrSBlbmhhdmFzIGVyYXJvam4gKioqKioqKioqKlxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MCBtaXNjL3V0aWwuYzo4NgorbXNnaWQgInlZIgorbXNnc3RyICJqSnlZIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MQorbXNnaWQgIm5OIgorbXNnc3RyICJuTiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDUKK21zZ2lkICI8eT4iCittc2dzdHIgIjxqPiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDcKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDkKK21zZ2lkICIgKHkvbikiCittc2dzdHIgIiAoai9uKSIKKworIzogZTJmc2NrL3V0aWwuYzoyMjMKK21zZ2lkICJjYW5jZWxsZWQhXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyMzgKK21zZ2lkICJ5ZXNcbiIKK21zZ3N0ciAiamVzXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjQwCittc2dpZCAibm9cbiIKK21zZ3N0ciAibmVcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyBub1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IG5lXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8geWVzXG4iCisiXG4iCittc2dzdHIgIiIKKyIlcz8gamVzXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAieWVzIgorbXNnc3RyICJqZXMiCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAibm8iCittc2dzdHIgIm5lIgorCisjOiBlMmZzY2svdXRpbC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBpbGxlZ2FsIGJpdG1hcCBibG9jayhzKSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyNzgKK21zZ2lkICJyZWFkaW5nIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJldHJ5aW5nIHRvIHJlYWQgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyOTgKK21zZ2lkICJ3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJld3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIiVzOiBVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k7IFJVTiBmc2NrIE1BTlVBTExZLlxuIgorIlx0KGkuZS4sIHdpdGhvdXQgLWEgb3IgLXAgb3B0aW9ucylcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzo0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdSwgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWU6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZWxhcHNlZCB0aW1lOiAlNi4zZlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6NDQ3IGUyZnNjay91dGlsLmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6NDc1IGUyZnNjay91dGlsLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6NjM3Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyB6ZXJvaXppbmcgYnVmZmVyIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6Nzg1Cittc2dpZCAiIgorIlVORVhQRUNURUQgSU5DT05TSVNURU5DWTogdGhlIGZpbGVzeXN0ZW0gaXMgYmVpbmcgbW9kaWZpZWQgd2hpbGUgZnNjayBpcyAiCisicnVubmluZy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjcyCittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1iIGJsb2NrX3NpemVdIFstaSBpbnB1dF9maWxlXSBbLW8gb3V0cHV0X2ZpbGVdIFstc3Z3bmZdXG4iCisiICAgICAgIFstYyBibG9ja3NfYXRfb25jZV0gWy1kIGRlbGF5X2ZhY3Rvcl9iZXR3ZWVuX3JlYWRzXSBbLWUgIgorIm1heF9iYWRfYmxvY2tzXVxuIgorIiAgICAgICBbLXAgbnVtX3Bhc3Nlc10gWy10IHRlc3RfcGF0dGVybiBbLXQgdGVzdF9wYXR0ZXJuIFsuLi5dXV1cbiIKKyIgICAgICAgZGV2aWNlIFtsYXN0X2Jsb2NrIFtmaXJzdF9ibG9ja11dXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBUaGUgLW4gYW5kIC13IG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICIlNi4yZiUlIGRvbmUsICVzIGVsYXBzZWQuICglZC8lZC8lZCBlcnJvcnMpIgorbXNnc3RyICIlNi4yZiUlIGZhcmnEnWlzLCAlcyBwYXNpcy4gKCVkLyVkLyVkIGVyYXJvaikiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzI4Cittc2dpZCAiVGVzdGluZyB3aXRoIHJhbmRvbSBwYXR0ZXJuOiAiCittc2dzdHIgIlRlc3RhbnRlIGt1biBoYXphcmRhIGFyYW7EnW86ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNDYKK21zZ2lkICJUZXN0aW5nIHdpdGggcGF0dGVybiAweCIKK21zZ3N0ciAiVGVzdGFudGUga3VuIGFyYW7EnW8gMHgiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Mzc4IG1pc2MvYmFkYmxvY2tzLmM6NDUxCittc2dpZCAiZHVyaW5nIHNlZWsiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIgorbXNnc3RyICJTdHJhbmdhIHZhbG9ybyAoJWxkKSBlbiAnZG9fcmVhZCgpJ1xuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ3NgorbXNnaWQgImR1cmluZyBleHQyZnNfc3luY19kZXZpY2UiCittc2dzdHIgImR1bSAnZXh0MmZzX3N5bmNfZGV2aWNlKCknIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ5NiBtaXNjL2JhZGJsb2Nrcy5jOjc1OAorbXNnaWQgIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iCittc2dzdHIgImR1bSBrb21lbmNvIGRlIGl0ZXJhY2lvIGplIG1hbGJvbmJsb2thIGxpc3RvIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxMSBtaXNjL2JhZGJsb2Nrcy5jOjYxMSBtaXNjL2JhZGJsb2Nrcy5jOjc2OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVycyIKK21zZ3N0ciAiZHVtIGFzaWdubyBkZSBidWZyb2oiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGJsb2NrcyAlbHUgdG8gJWx1XG4iCittc2dzdHIgIktvbnRyb2xhbnRlIGJsb2tvam4gJWx1IGFsICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyMAorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtb25seSBtb2RlXG4iCittc2dzdHIgIktvbnRyb2xhbnRlIHBvciBtYWxib25haiBibG9rb2ogZW4gbnVybGVnYSBtb2R1c29cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjkKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAocmVhZC1vbmx5IHRlc3QpOiAiCittc2dzdHIgIktvbnRyb2xhbnRlIHBvciBtYWxib25haiBibG9rb2ogKG51cmxlZ2EgdGVzdG8pOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTM2IG1pc2MvYmFkYmxvY2tzLmM6NjQzIG1pc2MvYmFkYmxvY2tzLmM6Njg1CisjOiBtaXNjL2JhZGJsb2Nrcy5jOjgzMgorbXNnaWQgIlRvbyBtYW55IGJhZCBibG9ja3MsIGFib3J0aW5nIHRlc3RcbiIKK21zZ3N0ciAiVHJvIG11bHRhaiBtYWxib25haiBibG9rb2ogLS0gxIllc2lnbyBkZSB0ZXN0b1xuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYxOAorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJLb250cm9sYW50ZSBwb3IgbWFsYm9uYWogYmxva29qIGVuIGxlZ2Etc2tyaWJhIG1vZHVzb1xuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYyMCBtaXNjL2JhZGJsb2Nrcy5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tIGJsb2NrICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiRGUgYmxva28gJWx1IGFsICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY3NQorbXNnaWQgIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIgorbXNnc3RyICJMZWdhbnRlIGthaiBrb21wYXJhbnRlOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NzgxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJLb250cm9sYW50ZSBwb3IgbWFsYm9uYWogYmxva29qIGVuIG5lZGV0cnVhIGxlZ2Etc2tyaWJhIG1vZHVzb1xuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc4NworbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSB0ZXN0KVxuIgorbXNnc3RyICJLb250cm9sYW50ZSBwb3IgbWFsYm9uYWogYmxva29qIChuZWRldHJ1YSBsZWdhLXNrcmliYSB0ZXN0bylcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3OTQKK21zZ2lkICIiCisiXG4iCisiSW50ZXJydXB0IGNhdWdodCwgY2xlYW5pbmcgdXBcbiIKK21zZ3N0ciAiIgorIlxuIgorIkludGVycm9tcG8gYWx2ZW5pcyAtLSBvcmRpZ2FudGVcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyaW5nIHRlc3QgZGF0YSB3cml0ZSwgYmxvY2sgJWx1IgorbXNnc3RyICJkdW0gdGVzdGEgZGF0dW1hIHNrcmlibywgYmxva28gJWx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk5OCBtaXNjL3V0aWwuYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZDsgIgorbXNnc3RyICIlcyBlc3RhcyBzdXJtZXRhdGE7ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDAwCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIidiYWRibG9ja3MnIHRhbWVuIHBlcmZvcnRpxJ1hcy4gIEVzcGVydSBrZSAvZXRjL210YWIgxJ11c3Rhcy5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDA1Cittc2dpZCAiaXQncyBub3Qgc2FmZSB0byBydW4gYmFkYmxvY2tzIVxuIgorbXNnc3RyICJuZSBlc3RhcyBzZW5kYW7EnWVyYSBydWxpICdiYWRibG9ja3MnIVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMTAgbWlzYy91dGlsLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGFwcGFyZW50bHkgaW4gdXNlIGJ5IHRoZSBzeXN0ZW07ICIKK21zZ3N0ciAiJXMgxZ1ham5lIHV6acSdYXMgcGVyIGxhIHNpc3RlbW87ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDEzCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgIidiYWRibG9ja3MnIHRhbWVuIHBlcmZvcnRpxJ1hcy5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGJpZyBtYXggYmFkIGJsb2NrcyBjb3VudCAldSAtIG1heGltdW0gaXMgJXUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGVzdF9wYXR0ZXJuIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTg0Cittc2dpZCAiTWF4aW11bSBvZiBvbmUgdGVzdF9wYXR0ZXJuIG1heSBiZSBzcGVjaWZpZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTkwCittc2dpZCAiUmFuZG9tIHRlc3RfcGF0dGVybiBpcyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMDQKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgbWFudWFsbHlcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMTAKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIxNQorbXNnaWQgImxhc3QgYmxvY2siCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjIxCittc2dpZCAiZmlyc3QgYmxvY2siCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnRpbmcgYmxvY2sgKCVsbHUpOiBtdXN0IGJlIGxlc3MgdGhhbiAlbGx1IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGVuZCBibG9jayAoJWxsdSk6IG11c3QgYmUgMzItYml0IHZhbHVlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI4NworbXNnaWQgIndoaWxlIGNyZWF0aW5nIGluLW1lbW9yeSBiYWQgYmxvY2tzIGxpc3QiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjk2Cittc2dpZCAiaW5wdXQgZmlsZSAtIGJhZCBmb3JtYXQiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzA0IG1pc2MvYmFkYmxvY2tzLmM6MTMxMworbXNnaWQgIndoaWxlIGFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhc3MgY29tcGxldGVkLCAldSBiYWQgYmxvY2tzIGZvdW5kLiAoJWQvJWQvJWQgZXJyb3JzKVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZmXSBbLSs9YUFjQ2REZWlqc1N0VHVdIFstdiB2ZXJzaW9uXSBmaWxlcy4uLlxuIgorbXNnc3RyICJVem1hbmllcm86ICAlcyBbLVJWZl0gWy0rPUFhQ2NEZGVpalNzVHR1XSBbLXYgVkVSU0lPXSBET1NJRVJPLi4uXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB2ZXJzaW9uIC0gJXNcbiIKK21zZ3N0ciAibWFsYm9uYSB2ZXJzaW8gLSAlc1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwMSBtaXNjL2xzYXR0ci5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc3RhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjEzIG1pc2MvY2hhdHRyLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzIG9mICVzIHNldCBhcyAiCittc2dzdHIgIiIKKworIzogbWlzYy9jaGF0dHIuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uIG9mICVzIHNldCBhcyAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9jaGF0dHIuYzoyNjcKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBwYXRoIHZhcmlhYmxlIGluIGNoYXR0cl9kaXJfcHJvYyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjMwNworbXNnaWQgIj0gaXMgaW5jb21wYXRpYmxlIHdpdGggLSBhbmQgK1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6MzE1Cittc2dpZCAiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWJmaGl4Vl0gWy1vIHN1cGVyYmxvY2s9PG51bT5dIFstbyBibG9ja3NpemU9PG51bT5dIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNTkKK21zZ2lkICJibG9ja3MiCittc2dzdHIgImJsb2tvaiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE2OQorbXNnaWQgImNsdXN0ZXJzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiR3JvdXAgJWx1OiAoQmxvY2tzICIKK21zZ3N0ciAiR3J1cG8gJWx1OiAoQmxva29qICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIENoZWNrc3VtIDB4JTA0eCIKK21zZ3N0ciAiICBLb250cm9sc3VtbyAweCUwNHgiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChFWFBFQ1RFRCAweCUwNHgpIgorbXNnc3RyICIgKEFURU5EScScSVMgMHglMDR4KSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICIsIHVudXNlZCBpbm9kZXMgJXVcbiIKK21zZ3N0ciAiLCBuZXV6aXRhaiBpLW5vZG9qICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAlcyBzdXBlcmJsb2NrIGF0ICIKK21zZ3N0ciAiICAlcyDEiWVmYmxva28gamUgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE0Cittc2dpZCAiUHJpbWFyeSIKK21zZ3N0ciAiVW51YSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNAorbXNnaWQgIkJhY2t1cCIKK21zZ3N0ciAiU2F2a29waWEiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTgKK21zZ2lkICIsIEdyb3VwIGRlc2NyaXB0b3JzIGF0ICIKK21zZ3N0ciAiLCBHcnVwYWogcHJpYcS1b2ogamUgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjIyCittc2dpZCAiIgorIlxuIgorIiAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgIFJlemVydml0YWogR0RULWJsb2tvaiBqZSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjkKK21zZ2lkICIgR3JvdXAgZGVzY3JpcHRvciBhdCAiCittc2dzdHIgIiBHcnVwcHJpYcS1byBqZSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzUKK21zZ2lkICIgIEJsb2NrIGJpdG1hcCBhdCAiCittc2dzdHIgIiAgQmxva2EgYml0bWFwbyBqZSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzkKK21zZ2lkICIsIElub2RlIGJpdG1hcCBhdCAiCittc2dzdHIgIiwgaS1ub2RhIGJpdG1hcG8gamUgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQzCittc2dpZCAiIgorIlxuIgorIiAgSW5vZGUgdGFibGUgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBJLW5vZGEgdGFiZWxvIGplICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiICAldSBmcmVlICVzLCAldSBmcmVlIGlub2RlcywgJXUgZGlyZWN0b3JpZXMlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgJXUgdW51c2VkIGlub2Rlc1xuIgorbXNnc3RyICIsICV1IG5ldXppdGFqIGktbm9kb2pcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1OQorbXNnaWQgIiAgRnJlZSBibG9ja3M6ICIKK21zZ3N0ciAiICBMaWJlcmFqIGJsb2tvajogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mjc0Cittc2dpZCAiICBGcmVlIGlub2RlczogIgorbXNnc3RyICIgIExpYmVyYWogaS1ub2RvajogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzEwCittc2dpZCAid2hpbGUgcHJpbnRpbmcgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2tzOiAldSIKK21zZ3N0ciAiRGlmZWt0YWogYmxva29qOiAldSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM0NSBtaXNjL3R1bmUyZnMuYzozNDcKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgImR1bSBsZWdhZG8gZGUga2HFnXByb3Rva29sYSBpLW5vZG8iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNTEKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgImR1bSBtYWxmZXJtbyBkZSBrYcWdcHJvdG9rb2xhIGktbm9kbyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1NworbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlciBibG9jayIKK21zZ3N0ciAiZHVtIGxlZ2FkbyBkZSBrYcWdcHJvdG9rb2xhIMSJZWZibG9rbyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2NAorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXIgaW52YWxpZCFcbiIKK21zZ3N0ciAiTWFsdmFsaWRhcyBtYWdpbnVtZXJvIGRlIGxhIGthxZ1wcm90b2tvbGEgxIllZmJsb2tvIVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzY3Cittc2dpZCAiSm91cm5hbCBmZWF0dXJlczogICAgICAgICIKK21zZ3N0ciAiS2HFnXByb3Rva29sYWoga2FwYWJsb2o6ICAgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM4MAorbXNnaWQgIkpvdXJuYWwgc2l6ZTogICAgICAgICAgICAgIgorbXNnc3RyICJLYcWdcHJvdG9rb2xhIGdyYW5kbzogICAgICAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCittc2dzdHIgIiIKKyJLYcWdcHJvdG9rb2xhIGxvbmdvOiAgICAgICAgJXVcbiIKKyJLYcWdcHJvdG9rb2xhIHNla3ZlbmNvOiAgICAgMHglMDh4XG4iCisiS2HFnXByb3Rva29sYSBrb21lbmNvOiAgICAgICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBlcnJubzogICAgICAgICAgICAlZFxuIgorbXNnc3RyICJLYcWdcHJvdG9rb2xhIGVyYXJudW1lcm86ICAgJWRcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQxNSBtaXNjL3R1bmUyZnMuYzoxOTYKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAiZHVtIGxlZ2FkbyBkZSBrYcWdcHJvdG9rb2xhIMSJZWZibG9rbyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQyMworbXNnaWQgIkNvdWxkbid0IGZpbmQgam91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlcnMiCittc2dzdHIgIk5lIGVibGFzIHRyb3ZpIGthxZ1wcm90b2tvbGFqbiBtYWdpbnVtZXJvam4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgYmxvY2sgc2l6ZTogICAgICAgJXVcbiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBmaXJzdCBibG9jazogICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgbnVtYmVyIG9mIHVzZXJzOiAgJXVcbiIKK21zZ3N0ciAiIgorIlxuIgorIkthxZ1wcm90b2tvbGEgYmxva2dyYW5kbzogICAldVxuIgorIkthxZ1wcm90b2tvbGEgbG9uZ286ICAgICAgICAldVxuIgorIkthxZ1wcm90b2tvbGEgdW51YSBibG9rbzogICAldVxuIgorIkthxZ1wcm90b2tvbGEgc2VrdmVuY286ICAgICAweCUwOHhcbiIKKyJLYcWdcHJvdG9rb2xhIGtvbWVuY286ICAgICAgJXVcbiIKKyJLYcWdcHJvdG9rb2xhIHV6YW50bm9tYnJvOiAgJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHVzZXJzOiAgICAgICAgICAgICVzXG4iCittc2dzdHIgIkthxZ1wcm90b2tvbGFqIHV6YW50b2o6ICAgICAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDU2IG1pc2MvbWtlMmZzLmM6NzQzIG1pc2MvdHVuZTJmcy5jOjEyMTEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugb3B0aW9ucyFcbiIKK21zZ3N0ciAiTWFua2FzIHN1ZmnEiWEgbWVtb3JvIHBvciBhbmFsaXppIG9wY2lvam4hXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdXBlcmJsb2NrIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgZXh0ZW5kZWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdXBlcmJsb2NrPTxzdXBlcmJsb2NrIG51bWJlcj5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvY2tzaXplPlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NjggbWlzYy9ta2UyZnMuYzoxNzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXNcbiIKK21zZ3N0ciAiICAgIFV6acSdYXMgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYwNiBtaXNjL2UyaW1hZ2UuYzoxNTgyIG1pc2MvdHVuZTJmcy5jOjIwNjAKKyM6IHJlc2l6ZS9tYWluLmM6MzE5Cittc2dpZCAiQ291bGRuJ3QgZmluZCB2YWxpZCBmaWxlc3lzdGVtIHN1cGVyYmxvY2suXG4iCittc2dzdHIgIk1hbHN1a2Nlc2lzIHRyb3ZpIHZhbGlkYW4gZG9zaWVyc2lzdGVtYW4gxIllZmJsb2tvbi5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICVzOiBlcnJvciByZWFkaW5nIGJpdG1hcHM6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbIC1yfFEgXSBbIC1mciBdIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIlV6bWFuaWVybzogICVzIFstcnxRXSBbLWZyXSBBUEFSQVRPIEJJTERPRE9TSUVST1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIC1JIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIiAgICAgICAgICAgICVzIC1JIEFQQVJBVE8gQklMRE9ET1NJRVJPXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICVzIC1yYSAgWyAgLWNmbnAgIF0gWyAtbyBzcmNfb2Zmc2V0IF0gWyAtTyBkZXN0X29mZnNldCBdIHNyY19mcyAiCisiWyBkZXN0X2ZzIF1cbiIKK21zZ3N0ciAiIgorIiAgICAgICAgICAgICVzIC1yYSAgWy1jZm5wXSBbLW8gZm9udHBvemljaW9dIFstTyBjZWxwb3ppY2lvXSBmb250LWRzIFtjZWwtIgorImRzXVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjkgbWlzYy9lMmltYWdlLmM6NTc2IG1pc2MvZTJpbWFnZS5jOjU4MgorIzogbWlzYy9lMmltYWdlLmM6MTE3OAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVyIgorbXNnc3RyICJkdW0gYXNpZ25vIGRlIGJ1ZnJvIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBibG9jayAlbGx1XG4iCittc2dzdHIgIlNrcmliYWRvIGRlIGJsb2tvICVsbHVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHdyaXRpbmcgYmxvY2sgJWxsdSIKK21zZ3N0ciAiZXJhcm8gZHVtIHNrcmliYWRvIGRlIGJsb2tvICVsbHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE5MQorbXNnaWQgImVycm9yIGluIGdlbmVyaWNfd3JpdGUoKSIKK21zZ3N0ciAiZXJhcm8gZW4gJ2dlbmVyaWNfd3JpdGUoKSciCisKKyM6IG1pc2MvZTJpbWFnZS5jOjIwOAorbXNnaWQgIkVycm9yOiBoZWFkZXIgc2l6ZSBpcyBiaWdnZXIgdGhhbiB3cnRfc2l6ZVxuIgorbXNnc3RyICJFcmFybzogxIlhcGEgZ3JhbmRvIHBsaSBncmFuZGFzIG8gJ3dydF9zaXplJ1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMTMKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBoZWFkZXIgYnVmZmVyXG4iCittc2dzdHIgIk1hbmthcyBzdWZpxIlhIG1lbW9ybyBwb3IgYXNpZ25pIGJ1ZnJvbiBwb3IgxIlhcG9cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MjQxCittc2dpZCAid2hpbGUgd3JpdGluZyBzdXBlcmJsb2NrIgorbXNnc3RyICJkdW0gc2tyaWJhZG8gZGUgxIllZmJsb2tvIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNTAKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJkdW0gc2tyaWJhZG8gZGUgaS1ub2RhIHRhYmVsbyIKKworIzogbWlzYy9lMmltYWdlLmM6MjU4Cittc2dpZCAid2hpbGUgd3JpdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgImR1bSBza3JpYmFkbyBkZSBibG9rYSBiaXRtYXBvIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNjYKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiZHVtIHNrcmliYWRvIGRlIGktbm9kYSBiaXRtYXBvIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBkaXJlY3RvcnkgYmxvY2sgJWxsdTogYmFkIHJlY19sZW4gKCVkKVxuIgorbXNnc3RyICJEaWZla3RhIHVqYSBibG9rbyAlbGx1OiBtYWxib25hICdyZWNfbGVuJyAoJWQpXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjUxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IGRpcmVjdG9yeSBibG9jayAlbGx1OiBiYWQgbmFtZV9sZW4gKCVkKVxuIgorbXNnc3RyICJEaWZla3RhIHVqYSBibG9rbyAlbGx1OiBtYWxib25hICduYW1lX2xlbicgKCVkKVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSIKK21zZ3N0ciAiJWxsdSAvICVsbHUgYmxva29qIChkZSAlZCUlKSIKKworIzogbWlzYy9lMmltYWdlLmM6NTg2IG1pc2MvZTJpbWFnZS5jOjYyNgorbXNnaWQgIkNvcHlpbmcgIgorbXNnc3RyICJLb3BpYWRvICIKKworIzogbWlzYy9lMmltYWdlLmM6NjIzCittc2dpZCAiIgorIlN0b3BwaW5nIG5vdyB3aWxsIGRlc3Ryb3kgdGhlIGZpbGVzeXN0ZW0sIGludGVycnVwdCBhZ2FpbiBpZiB5b3UgYXJlIHN1cmVcbiIKK21zZ3N0ciAiSGFsdGkgbnVuIGRldHJ1b3MgbGEgZG9zaWVyc2lzdGVtb247IGludGVycm9tcHUgZGVub3ZlIHNlIHZpIGNlcnRhcy5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyByZW1haW5pbmcgYXQgJS4yZiBNQi9zIgorbXNnc3RyICIgcmVzdGFzICVzIGplICUuMmYgTUIvcyIKKworIzogbWlzYy9lMmltYWdlLmM6NjYxIG1pc2MvZTJpbWFnZS5jOjExODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBibG9jayAlbGx1IgorbXNnc3RyICJlcmFybyBkdW0gbGVnYWRvIGRlIGJsb2tvICVsbHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3BpZWQgJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSBpbiAlcyAiCittc2dzdHIgIktvcGlpxJ1pcyAlbGx1IC8gJWxsdSBibG9rb2ogKGRlICVkJSUpIGVuICVzICIKKworIzogbWlzYy9lMmltYWdlLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF0ICUuMmYgTUIvcyIKK21zZ3N0ciAiamUgJS4yZiBNQi9zIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3NTUKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGwxIHRhYmxlIgorbXNnc3RyICJkdW0gYXNpZ25vIGRlIGwxLXRhYmVsbyIKKworIzogbWlzYy9lMmltYWdlLmM6ODAwCittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBsMiBjYWNoZSIKK21zZ3N0ciAiZHVtIGFzaWdubyBkZSBsMi1rYcWdbWVtb3JvIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo4MjMKK21zZ2lkICIiCisiV2FybmluZzogVGhlcmUgYXJlIHN0aWxsIHRhYmxlcyBpbiB0aGUgY2FjaGUgd2hpbGUgcHV0dGluZyB0aGUgY2FjaGUsIGRhdGEgIgorIndpbGwgYmUgbG9zdCBzbyB0aGUgaW1hZ2UgbWF5IG5vdCBiZSB2YWxpZC5cbiIKK21zZ3N0ciAiIgorIkF2ZXJ0bzogYW5rb3Jhxa0gZWt6aXN0YXMgdGFiZWxvaiBlbiBsYSBrYcWdbWVtb3JvIGR1bSBzaWEga29uc2VydmFkbywgdGlhbCAiCisiZGF0dW1vaiBwZXJkacSdb3Mga2FqIGxhIGJpbGRvIGVibGUgbWFsdmFsaWRhcy5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTE0NQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgZXh0Ml9xY293Ml9pbWFnZSIKK21zZ3N0ciAiZHVtIGFzaWdubyBkZSAnZXh0Ml9xY293Ml9pbWFnZSciCisKKyM6IG1pc2MvZTJpbWFnZS5jOjExNTIKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgZXh0Ml9xY293Ml9pbWFnZSIKK21zZ3N0ciAiZHVtIHByYXZhbG9yaXpvIGRlICdleHQyX3Fjb3cyX2ltYWdlJyIKKworIzogbWlzYy9lMmltYWdlLmM6MTIxMSBtaXNjL2UyaW1hZ2UuYzoxMjI5Cittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I6IG11bHRpcGxlIHNlcXVlbnRpYWwgcmVmY291bnQgYmxvY2tzIGNyZWF0ZWQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTI2OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwIgorbXNnc3RyICJkdW0gYXNpZ25vIGRlIGJsb2thIGJpdG1hcG8iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyNzgKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBzY3JhbWJsZSBibG9jayBiaXRtYXAiCittc2dzdHIgImR1bSBhc2lnbm8gZGUga2lybGl0YSBibG9rYSBiaXRtYXBvIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjg1Cittc2dpZCAiU2Nhbm5pbmcgaW5vZGVzLi4uXG4iCittc2dzdHIgIlNrYW5hZG8gZGUgaS1ub2Rvai4uLlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjk3Cittc2dpZCAiQ2FuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIgorbXNnc3RyICJNYW5rYXMgc3VmacSJYSBtZW1vcm8gcG9yIGFzaWduaSBidWZyb24gcG9yIGJsb2tvIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzM2IG1pc2MvZTJpbWFnZS5jOjEzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgaXRlcmF0aW5nIG92ZXIgaW5vZGUgJXUiCittc2dzdHIgImR1bSBpdGVyYWNpbyBqZSBpLW5vZG8gJXUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzODEKK21zZ2lkICJSYXcgYW5kIHFjb3cyIGltYWdlcyBjYW5ub3QgYmUgaW5zdGFsbGVkIgorbXNnc3RyICJLcnVkYWpuIGthaiBRQ09XMi1iaWxkb2puIG5lIGVibGFzIGluc3RhbGkiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MDMKK21zZ2lkICJlcnJvciByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgImVyYXJvIGR1bSBsZWdhZG8gZGUgYml0bWFwb2oiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MTUKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGRldmljZSBmaWxlIgorbXNnc3RyICJkdW0gbWFsZmVybW8gZGUgYXBhcmF0ZG9zaWVybyIKKworIzogbWlzYy9lMmltYWdlLmM6MTQyNgorbXNnaWQgIndoaWxlIHJlc3RvcmluZyB0aGUgaW1hZ2UgdGFibGUiCittc2dzdHIgImR1bSByZXN0YcWtcm8gZGUgYmlsZGEgdGFiZWxvIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTIzCittc2dpZCAiLWEgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCByYXcgb3IgUUNPVzIgaW1hZ2VzLiIKK21zZ3N0ciAiT3BjaW8gJy1hJyB1emVibGFzIG51ciBrdW4ga3J1ZGFqIGHFrSBRQ09XMi1iaWxkb2ouIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTI5Cittc2dpZCAiT2Zmc2V0cyBhcmUgb25seSBhbGxvd2VkIHdpdGggcmF3IGltYWdlcy4iCittc2dzdHIgIlBvemljaW9qIHV6ZWJsYXMgbnVyIGt1biBrcnVkYWogYmlsZG9qLiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUzNAorbXNnaWQgIk1vdmUgbW9kZSBpcyBvbmx5IGFsbG93ZWQgd2l0aCByYXcgaW1hZ2VzLiIKK21zZ3N0ciAiTW92bW9kdXNvIHV6ZWJsYXMgbnVyIGt1biBrcnVkYWogYmlsZG9qLiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUzOQorbXNnaWQgIk1vdmUgbW9kZSByZXF1aXJlcyBhbGwgZGF0YSBtb2RlLiIKK21zZ3N0ciAiTW92bW9kdXNvIHBvc3R1bGFzICdhbGwtZGF0YScgbW9kdXNvbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTU0OQorbXNnaWQgImNoZWNraW5nIGlmIG1vdW50ZWQiCittc2dzdHIgImtvbnRyb2xvIGplIHN1cm1ldG8iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1NTYKK21zZ2lkICIiCisiXG4iCisiUnVubmluZyBlMmltYWdlIG9uIGEgUi9XIG1vdW50ZWQgZmlsZXN5c3RlbSBjYW4gcmVzdWx0IGluIGFuXG4iCisiaW5jb25zaXN0ZW50IGltYWdlIHdoaWNoIHdpbGwgbm90IGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuIgorIlVzZSAtZiBvcHRpb24gaWYgeW91IHJlYWxseSB3YW50IHRvIGRvIHRoYXQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJSdWxpICdlMmltYWdlJyBqZSBza3JpYmVibGUgc3VybWV0YXRhIGRvc2llcnNpc3RlbW8gcG92YXMgcmV6dWx0aVxuIgorImVuIG1hbGtvaGVyYSBiaWxkbyBraXUgbmUgdXRpbG9zIHBvciBzZXLEiW8gZGUgcHJvZ3JhbW1pc29qLlxuIgorIlV6dSBvcGNpbyAnLWYnIHNlIHZpIHZlcmUgdm9sYXMgZmFyaSB0aW9uLlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjA4Cittc2dpZCAiUUNPVzIgaW1hZ2UgY2FuIG5vdCBiZSB3cml0dGVuIHRvIHRoZSBzdGRvdXQhXG4iCittc2dzdHIgIk5lIGVibGFzIHNrcmliaSBRQ09XMi1iaWxkb24gYWwgxIllZmVsaWd1am8hXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MTQKK21zZ2lkICJDYW4gbm90IHN0YXQgb3V0cHV0XG4iCittc2dzdHIgIk1hbHN1a2Nlc2lzIGVsdHJvdmkgc3RhdGluZm9ybW9uIHByaSBlbGlndWpvXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW1hZ2UgKCVzKSBpcyBjb21wcmVzc2VkXG4iCittc2dzdHIgIkJpbGRvICglcykgZXN0YXMgZGVuc2lnaXRhXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW1hZ2UgKCVzKSBpcyBlbmNyeXB0ZWRcbiIKK21zZ3N0ciAiQmlsZG8gKCVzKSBlc3RhcyDEiWlmcml0YVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjb252ZXJ0IHFjb3cyIGltYWdlICglcykgaW50byByYXcgaW1hZ2UgKCVzKSIKK21zZ3N0ciAiZHVtIGtvbnZlcnRvIGRlIFFDT1cyLWJpbGRvICglcykgYWwga3J1ZGEgYmlsZG8gKCVzKSIKKworIzogbWlzYy9lMmltYWdlLmM6MTYzOQorbXNnaWQgIlRoZSAtYyBvcHRpb24gb25seSBzdXBwb3J0ZWQgaW4gcmF3IG1vZGVcbiIKK21zZ3N0ciAiT3BjaW8gJy1jJyB1emVibGFzIG51ciBlbiBrcnVkYSBtb2R1c29cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY0NAorbXNnaWQgIlRoZSAtYyBvcHRpb24gbm90IHN1cHBvcnRlZCB3aGVuIHdyaXRpbmcgdG8gc3Rkb3V0XG4iCittc2dzdHIgIk9wY2lvICctYycgbmUgdXplYmxhcyBkdW0gc2tyaWJhZG8gYWwgxIllZmVsaWd1am9cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY1MQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgY2hlY2tfYnVmIgorbXNnc3RyICJkdW0gYXNpZ25vIGRlICdjaGVja19idWYnIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjU3Cittc2dpZCAiVGhlIC1wIG9wdGlvbiBvbmx5IHN1cHBvcnRlZCBpbiByYXcgbW9kZVxuIgorbXNnc3RyICJPcGNpbyAnLXAnIHV6ZWJsYXMgbnVyIGVuIGtydWRhIG1vZHVzb1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsb2NrcyBhbHJlYWR5IGNvbnRhaW5lZCB0aGUgZGF0YSB0byBiZSBjb3BpZWRcbiIKK21zZ3N0ciAiRXN0aXMgJWQgYmxva29qIGtpdWogamFtIGVuaGF2aXMgbGEga29waWVuZGFqbiBkYXR1bW9qblxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgb3BlbiAlc1xuIgorbXNnc3RyICJlMmxhYmVsOiBuZSBlYmxhcyBtYWxmZXJtaSAlc1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IG5lIGVibGFzIHNhbHRpIGFsIMSJZWZibG9rb1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciByZWFkaW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogZXJhcm8gZHVtIGxlZ2FkbyBkZSDEiWVmYmxva29cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogbm90IGFuIGV4dDIgZmlsZXN5c3RlbVxuIgorbXNnc3RyICJlMmxhYmVsOiBuZSBlc3RhcyBFeHQyLWRvc2llcnNpc3RlbW9cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6OTcgbWlzYy90dW5lMmZzLmM6MjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBsYWJlbCB0b28gbG9uZywgdHJ1bmNhdGluZy5cbiIKK21zZ3N0ciAiQXZlcnRvOiBldGlrZWRvIHRybyBsb25nYXMsIMSdaSB0cnVua2nEnWFzLlxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9jayBhZ2FpblxuIgorbXNnc3RyICJlMmxhYmVsOiBuZSBlYmxhcyByZXNhbHRpIGFsIMSJZWZibG9rb1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3Igd3JpdGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGVyYXJvIGR1bSBza3JpYmFkbyBkZSDEiWVmYmxva29cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTE3IG1pc2MvdHVuZTJmcy5jOjg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogZTJsYWJlbCBkZXZpY2UgW25ld2xhYmVsXVxuIgorbXNnc3RyICJVem1hbmllcm86ICBlMmxhYmVsIEFQQVJBVE8gW05PVkVUSUtFRE9dXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIDx0cmFuc2FjdGlvbiBmaWxlPiA8ZmlsZXN5c3RlbT5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjUyCittc2dpZCAiRmFpbGVkIHRvIHJlYWQgdGhlIGZpbGUgc3lzdGVtIGRhdGEgXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzo2MiBtaXNjL2UydW5kby5jOjgzIG1pc2MvZTJ1bmRvLmM6MTA4IG1pc2MvZTJ1bmRvLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfZmV0Y2ggJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBNb3VudCB0aW1lIGRpZG4ndCBtYXRjaCAldVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6ODkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gVVVJRCBkaWRuJ3QgbWF0Y2ggXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9vcGVuICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTc1Cittc2dpZCAiZTJ1bmRvIHNob3VsZCBvbmx5IGJlIHJ1biBvbiB1bm1vdW50ZWQgZmlsZSBzeXN0ZW1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlc1xuIgorbXNnc3RyICJNYWxzdWtjZXNpcyBtYWxmZXJtaSAlc1xuIgorCisjOiBtaXNjL2UydW5kby5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBsYXllZCB0cmFuc2FjdGlvbiBvZiBzaXplICV6ZCBhdCBsb2NhdGlvbiAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHdyaXRlICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGNvdWxkbid0IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIkFWRVJUTzogbWFsc3VrY2VzaXMgbWFsZmVybWkgJXM6ICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBiYWQgZm9ybWF0IG9uIGxpbmUgJWQgb2YgJXNcbiIKK21zZ3N0ciAiQVZFUlRPOiBtYWx2YWxpZGEgc2ludGFrc28gZW4gbGluaW8gJWQgZGUgJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzcwCittc2dpZCAiIgorIldBUk5JTkc6IFlvdXIgL2V0Yy9mc3RhYiBkb2VzIG5vdCBjb250YWluIHRoZSBmc2NrIHBhc3Nub1xuIgorIlx0ZmllbGQuICBJIHdpbGwga2x1ZGdlIGFyb3VuZCB0aGluZ3MgZm9yIHlvdSwgYnV0IHlvdVxuIgorIlx0c2hvdWxkIGZpeCB5b3VyIC9ldGMvZnN0YWIgZmlsZSBhcyBzb29uIGFzIHlvdSBjYW4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJXQVJOSU5HOiAvZXRjL2ZzdGFiIG5lIGVuaGF2YXMgbGUgc2VzYW4ga2FtcG9uICh2aWNudW1lcm9uIHBvciAnZnNjaycpXG4iCisiICAgIMSIaSB0aXUgcHJvYmxlbW8gbnVuIMSJaXJrYcWtaXJpxJ1vcyBrYWogZXZpdGnEnW9zLCBzZWQgdmkgZGV2dXNcbiIKKyIgICAga29yZWt0aSB2aWFuIGRvc2llcm9uIC9ldGMvZnN0YWIgbGEgcGxlaiBmcnVlIGtlIHZpIHBvdmFzLlxuIgorIlxuIgorCisjOiBtaXNjL2ZzY2suYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogJXM6IG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiAlcyBuZSB0cm92acSdaXNcbiIKKworIzogbWlzYy9mc2NrLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YWl0OiBObyBtb3JlIGNoaWxkIHByb2Nlc3M/IT9cbiIKK21zZ3N0ciAiJXM6IHdhaXQ6IE5lIHBsdSBla3ppc3RhcyBpZGEgcHJvY2V6byEhXG4iCisKKyM6IG1pc2MvZnNjay5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nLi4uICVzIGZvciBkZXZpY2UgJXMgZXhpdGVkIHdpdGggc2lnbmFsICVkLlxuIgorbXNnc3RyICJBdmVydG8uLi4gJXMgcG9yIGFwYXJhdG8gJXMgZmluaXMga3VuIHNpZ25hbG8gJWQuXG4iCisKKyM6IG1pc2MvZnNjay5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlczogc3RhdHVzIGlzICV4LCBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIgorbXNnc3RyICIlcyAlczogZWxpcnN0YXRvIGVzdGFzICV4IC0tIHRpbyBkZXZ1cyBuZW5pYW0gb2themkuXG4iCisKKyM6IG1pc2MvZnNjay5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5pc2hlZCB3aXRoICVzIChleGl0IHN0YXR1cyAlZClcbiIKK21zZ3N0ciAiRmlua29udHJvbGlzIGFwYXJhdG9uICVzIChlbGlyc3RhdG8gZXN0YXMgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiVzOiBFcmFybyAlZCBkdW0gcnVsYWRvIGRlICdmc2NrLiVzJyBwb3IgJXNcbiIKKworIzogbWlzYy9mc2NrLmM6NzQyCittc2dpZCAiIgorIkVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGUgZmlsZXN5c3RlbSB0eXBlcyBwYXNzZWQgdG8gLXQgbXVzdCBiZSBwcmVmaXhlZFxuIgorIndpdGggJ25vJyBvciAnIScuXG4iCittc2dzdHIgIiIKKyJBxa0gxIlpdWogYcWtIG5lbml1aiBkZSBsYSBkb3NpZXJzaXN0ZW1haiB0aXBvaiBqZSBvcGNpbyAnLXQnXG4iCisiZGV2dXMgZXN0aSBwcmVmaWtzaXRhaiBrdW4gJ25vJyBhxa0gJyEnLlxuIgorCisjOiBtaXNjL2ZzY2suYzo3NjEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGVzeXN0ZW0gdHlwZXNcbiIKK21zZ3N0ciAiTWFua2FzIHN1ZmnEiWEgbWVtb3JvIHBvciBkb3NpZXJzaXN0ZW1haiB0aXBvalxuIgorCisjOiBtaXNjL2ZzY2suYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBza2lwcGluZyBiYWQgbGluZSBpbiAvZXRjL2ZzdGFiOiBiaW5kIG1vdW50IHdpdGggbm9uemVybyBmc2NrIHBhc3MgIgorIm51bWJlclxuIgorbXNnc3RyICIiCisiJXM6IHRyYW5zc2FsdGnEnWFzIG1hbGJvbmEgbGluaW8gZW4gL2V0Yy9mc3RhYjogJ2JpbmQnLXN1cm1ldG8gaGF2YXMgbmVudWxhbiAiCisic2VzYW4ga2FtcG9uICh2aWNudW1lcm9uIHBvciAnZnNjaycpXG4iCisKKyM6IG1pc2MvZnNjay5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiBjYW5ub3QgY2hlY2sgJXM6IGZzY2suJXMgbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6IG5lIGVibGFzIGtvbnRyb2xpICVzOiAnZnNjay4lcycgbmUgdHJvdmnEnWFzXG4iCisKKyM6IG1pc2MvZnNjay5jOjk2NworbXNnaWQgIkNoZWNraW5nIGFsbCBmaWxlIHN5c3RlbXMuXG4iCittc2dzdHIgIktvbnRyb2xvIGRlIMSJaXVqIGRvc2llcnNpc3RlbW9qLlxuIgorCisjOiBtaXNjL2ZzY2suYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIi0td2FpdGluZy0tIChwYXNzICVkKVxuIgorbXNnc3RyICItLWF0ZW5kYWRvLS0gKHBhxZ1vICVkKVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMDc4Cittc2dpZCAiIgorIlVzYWdlOiBmc2NrIFstQU1OUFJUVl0gWyAtQyBbIGZkIF0gXSBbLXQgZnN0eXBlXSBbZnMtb3B0aW9uc10gW2ZpbGVzeXMgLi4uXVxuIgorbXNnc3RyICIiCisiVXptYW5pZXJvOiAgZnNjayBbLUFNTlBSVFZdIFstQyBbZG9zaWVycHJpYcS1b11dIFstdCBkb3NpZXJzaXN0ZW10aXBvXVxuIgorIiAgICAgICAgICAgICAgICAgW2Rvc2llcnNpc3RlbW9wY2lval0gW2Rvc2llcnNpc3RlbW8uLi5dXG4iCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiJXM6IHRybyBkYSBhcGFyYXRvalxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTUzIG1pc2MvZnNjay5jOjEyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICIlczogdHJvIGRhIGFyZ3VtZW50b2pcbiIKKworIzogbWlzYy9sc2F0dHIuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmFkbHZdIFtmaWxlcy4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2xzYXR0ci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9sc2F0dHIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSBbLUMgY2x1c3Rlci1zaXplXVxuIgorIlx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIGlub2RlLXNpemVdIFstSiBqb3VybmFsLW9wdGlvbnNdXG4iCisiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKyJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisiXHRbLWcgYmxvY2tzLXBlci1ncm91cF0gWy1MIHZvbHVtZS1sYWJlbF0gWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG4iCisiXHRbLU8gZmVhdHVyZVssLi4uXV0gWy1yIGZzLXJldmlzaW9uXSBbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXVxuIgorIlx0Wy10IGZzLXR5cGVdIFstVCB1c2FnZS10eXBlIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSBkZXZpY2UgW2Jsb2Nrcy0iCisiY291bnRdXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUnVubmluZyBjb21tYW5kOiAlc1xuIgorbXNnc3RyICJSdWxpxJ1hcyBrb21hbmRvOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcnVuICclcyciCittc2dzdHIgImR1bSBwcm92byBkZSBydWxpICclcyciCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYzCittc2dpZCAid2hpbGUgcHJvY2Vzc2luZyBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBwcm9ncmFtIgorbXNnc3RyICJkdW0gdHJha3RhZG8gZGUgbGlzdG8gZGUgbWFsYm9uYWogYmxva29qIGVsIHByb2dyYW1vIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlZCBpbiBwcmltYXJ5IHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvciBhcmVhIGJhZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9ja3MgJXUgdGhyb3VnaCAldSBtdXN0IGJlIGdvb2QgaW4gb3JkZXIgdG8gYnVpbGQgYSBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjk1Cittc2dpZCAiQWJvcnRpbmcuLi4uXG4iCittc2dzdHIgIkFib3J0acSdYXMuLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHRoZSBiYWNrdXAgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9ycyBhdCBibG9jayAldSBjb250YWluXG4iCisiXHRiYWQgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzM0Cittc2dpZCAid2hpbGUgbWFya2luZyBiYWQgYmxvY2tzIGFzIHVzZWQiCittc2dzdHIgImR1bSBtYXJrYWRvIGRlIG1hbGJvbmFqIGJsb2tvaiBraWVsIHV6YXRhaiIKKworIzogbWlzYy9ta2UyZnMuYzozODYKK21zZ2lkICJXcml0aW5nIGlub2RlIHRhYmxlczogIgorbXNnc3RyICJTa3JpYmnEnWFzIGktbm9kYWogdGFiZWxvajogIgorCisjOiBtaXNjL21rZTJmcy5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IHdyaXRlICVkIGJsb2NrcyBpbiBpbm9kZSB0YWJsZSBzdGFydGluZyBhdCAlbGx1OiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiTWFsc3VrY2VzaXMgc2tyaWJpICVkIGJsb2tvam4gZW4gaS1ub2RhIHRhYmVsbyBla2RlICVsbHU6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDIxIG1pc2MvbWtlMmZzLmM6MjQ3OSBtaXNjL21rZTJmcy5jOjI3NjQKK21zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorbXNnc3RyICJmYXJpdGEgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjQzMgorbXNnaWQgIndoaWxlIGNyZWF0aW5nIHJvb3QgZGlyIgorbXNnc3RyICJkdW0ga3JlYWRvIGRlIHJhZGlrYSBkb3NpZXJ1am8iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDM5Cittc2dpZCAid2hpbGUgcmVhZGluZyByb290IGlub2RlIgorbXNnc3RyICJkdW0gbGVnYWRvIGRlIHJhZGlrYSBpLW5vZG8iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDUxCittc2dpZCAid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIKK21zZ3N0ciAiZHVtIGFnb3JkbyBkZSBwb3NlZGVjbyBkZSByYWRpa2EgaS1ub2RvIgorCisjOiBtaXNjL21rZTJmcy5jOjQ2OQorbXNnaWQgIndoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJkdW0ga3JlYWRvIGRlIGRvc2llcnVqbyAnL2xvc3QrZm91bmQnIgorCisjOiBtaXNjL21rZTJmcy5jOjQ3NgorbXNnaWQgIndoaWxlIGxvb2tpbmcgdXAgL2xvc3QrZm91bmQiCittc2dzdHIgImR1bSBzZXLEiWFkbyBkZSBkb3NpZXJ1am8gJy9sb3N0K2ZvdW5kJyIKKworIzogbWlzYy9ta2UyZnMuYzo0ODkKK21zZ2lkICJ3aGlsZSBleHBhbmRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgImR1bSBldGVuZGFkbyBkZSBkb3NpZXJ1am8gJy9sb3N0K2ZvdW5kJyIKKworIzogbWlzYy9ta2UyZnMuYzo1MDQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAiZHVtIGFnb3JkbyBkZSBtYWxib25ibG9rYSBpLW5vZG8iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk91dCBvZiBtZW1vcnkgZXJhc2luZyBzZWN0b3JzICVkLSVkXG4iCittc2dzdHIgIk1hbmthcyBzdWZpxIlhIG1lbW9ybyBkdW0gdmnFnWFkbyBkZSBzZWt0b3JvaiAlZC0lZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAwOiAlc1xuIgorbXNnc3RyICJBdmVydG86IG1hbHN1a2Nlc2lzIGxlZ2kgYmxva29uIDA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQ6ICVzXG4iCittc2dzdHIgIkF2ZXJ0bzogbWFsc3VrY2VzaXMgdmnFnWkgc2VrdG9yb24gJWQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTczCittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAiZHVtIHByYXZhbG9yaXpvIGRlIGthxZ1wcm90b2tvbGEgxIllZmJsb2tvIgorCisjOiBtaXNjL21rZTJmcy5jOjU4MQorbXNnaWQgIlplcm9pbmcgam91cm5hbCBkZXZpY2U6ICIKK21zZ3N0ciAiTnVscGxlbmnEnWFzIGthxZ1wcm90b2tvbGEgYXBhcmF0bzogIgorCisjOiBtaXNjL21rZTJmcy5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGpvdXJuYWwgZGV2aWNlIChibG9jayAlbGx1LCBjb3VudCAlZCkiCittc2dzdHIgImR1bSBudWxwbGVuaWdvIGRlIGthxZ1wcm90b2tvbGEgYXBhcmF0byAoYmxva28gJWxsdSwgbnVtZXJvICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzo2MTEKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAiZHVtIHNrcmliYWRvIGRlIGthxZ1wcm90b2tvbGEgxIllZmJsb2tvIgorCisjOiBtaXNjL21rZTJmcy5jOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBmaWxlc3lzdGVtIHdpdGggJWxsdSAlZGsgYmxvY2tzIGFuZCAldSBpbm9kZXNcbiIKK21zZ3N0ciAiS3JlYWRvIGRlIGRvc2llcnNpc3RlbW8ga3VuICVsbHUgYmxva29qIChkZSAlZEspIGthaiAldSBpLW5vZG9qXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3YXJuaW5nOiAlbGx1IGJsb2NrcyB1bnVzZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJBdmVydG86ICVsbHUgYmxva29qIG5lIHV6acSdYXMuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gbGFiZWw9JXNcbiIKK21zZ3N0ciAiRG9zaWVyc2lzdGVtYSBldGlrZWRvPSVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIk9TIHR5cGU6ICVzXG4iCittc2dzdHIgIk1hc3RydW1zaXN0ZW1hIHRpcG86ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiQmxva2dyYW5kbz0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDbHVzdGVyIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiRmFza2EgZ3JhbmRvPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyYWdtZW50IHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiRnJhZ21lbnRhIGdyYW5kbz0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJTdHJpZGU9JXUgYmxvY2tzLCBTdHJpcGUgd2lkdGg9JXUgYmxvY2tzXG4iCittc2dzdHIgIidTdHJpZGUnLXBhxZ1vPSV1IGJsb2tvaiwgJ3N0cmlwZSctbGFyxJ1vPSV1IGJsb2tvalxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY1NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMsICVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiV1IGktbm9kb2osICVsbHUgYmxva29qXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsbHUgYmxvY2tzICglMi4yZiUlKSByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIHVzZXJcbiIKK21zZ3N0ciAiJWxsdSBibG9rb2ogKCUyLjJmJSUpIHJlemVydmnEnWFzIHBvciBsYSDEiWVmdXphbnRvXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0IGRhdGEgYmxvY2s9JXVcbiIKK21zZ3N0ciAiVW51YSBkYXR1bWJsb2tvPSV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJvb3QgZGlyZWN0b3J5IG93bmVyPSV1OiV1XG4iCittc2dzdHIgIlBvc2VkYW50byBkZSByYWRpa2EgZG9zaWVydWpvPSV1OiV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9JWx1XG4iCittc2dzdHIgIk1ha3NpbXVtYSBub21icm8gZGUgZG9zaWVyc2lzdGVtYWogYmxva29qPSVsdVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cHNcbiIKK21zZ3N0ciAiJXUgYmxva2dydXBvalxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIldSBibG9rZ3J1cG9cbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgY2x1c3RlcnMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGJsb2tvaiBwbyBncnVwbywgJXUgZmFza29qIHBvIGdydXBvXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgYmxva29qIHBvIGdydXBvLCAldSBmcmFnbWVudG9qIHBvIGdydXBvXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgaS1ub2RvaiBwbyBncnVwb1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIFVVSUQ6ICVzXG4iCittc2dzdHIgIkRvc2llcnNpc3RlbWEgVVVJRD0lc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OQorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgIsSIZWZibG9rYWogc2F2a29waW9qIGdhcmRpxJ1hcyBlbiBibG9rb2o6ICIKKworIzogbWlzYy9ta2UyZnMuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgJy1PIDY0Yml0J1xuIgorbXNnc3RyICIlcyBiZXpvbmFzICctTyA2NGJpdCdcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtdXN0IGJlIGJlZm9yZSAncmVzaXplPSV1J1xuIgorbXNnc3RyICInJXMnIGRldmFzIGVzdGkgYW50YcWtICdyZXNpemU9JXUnXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Nzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZGVzY19zaXplOiAnJXMnXG4iCittc2dzdHIgIk5ldmFsaWRhICdkZXNjX3NpemUnOiAnJXMnXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2Zmc2V0OiAlc1xuIgorbXNnc3RyICJOZXZhbGlkYSBwb3ppY2lvOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgxMiBtaXNjL3R1bmUyZnMuYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW1wX3VwZGF0ZV9pbnRlcnZhbDogJXNcbiIKK21zZ3N0ciAiTmV2YWxpZGEgJ21tcF91cGRhdGVfaW50ZXJ2YWwnOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICMgb2YgYmFja3VwIHN1cGVyYmxvY2tzOiAlc1xuIgorbXNnc3RyICJNYWx2YWxpZGEgbm9tYnJvIGRlIHNhdmtvcGlhaiDEiWVmYmxva29qOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg0OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIk1hbHZhbGlkYSBhcmd1bWVudG8gcG9yICdzdHJpZGUnOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlwZS13aWR0aCBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIk1hbHZhbGlkYSBhcmd1bWVudG8gcG9yICdzdHJpcGUnLWxhcsSdbzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXNpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJNYWx2YWxpZGEgYXJndW1lbnRvIHBvciAncmVzaXplJzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4OTMKK21zZ2lkICJUaGUgcmVzaXplIG1heGltdW0gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGZpbGVzeXN0ZW0gc2l6ZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjkxNworbXNnaWQgIk9uLWxpbmUgcmVzaXppbmcgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjk0NCBtaXNjL21rZTJmcy5jOjk1MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJvb3Rfb3duZXI6ICclcydcbiIKK21zZ3N0ciAiTmV2YWxpZGEgcmFkaWtwb3NlZGFudG86ICclcydcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBxdW90YXR5cGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJNYWx2YWxpZGEgYXJndW1lbnRvIHBvciAncXVvdGF0eXBlJzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdG1tcF91cGRhdGVfaW50ZXJ2YWw9PGludGVydmFsPlxuIgorIlx0bnVtX2JhY2t1cF9zYj08MHwxfDI+XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgZGF0YSBjaHVuayBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGUtd2lkdGg9PFJBSUQgc3RyaWRlICogZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHRvZmZzZXQ9PG9mZnNldCB0byBjcmVhdGUgdGhlIGZpbGUgc3lzdGVtPlxuIgorIlx0cmVzaXplPTxyZXNpemUgbWF4aW11bSBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHBhY2tlZF9tZXRhX2Jsb2Nrcz08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdGxhenlfaXRhYmxlX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRsYXp5X2pvdXJuYWxfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdHJvb3RfdWlkPTx1aWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisiXHRyb290X2dpZD08Z2lkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0dGVzdF9mc1xuIgorIlx0ZGlzY2FyZFxuIgorIlx0bm9kaXNjYXJkXG4iCisiXHRxdW90YXR5cGU9PHVzciBPUiBncnA+XG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiBSQUlEIHN0cmlwZS13aWR0aCAldSBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiBzdHJpZGUgJXUuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gbWtlMmZzIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA2OCBtaXNjL3R1bmUyZnMuYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmaWxlc3lzdGVtIG9wdGlvbiBzZXQ6ICVzXG4iCittc2dzdHIgIk5ldmFsaWRhIGRvc2llcnNpc3RlbWEgb3BjaW8gYWdvcmRpxJ1hczogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDgwIG1pc2MvdHVuZTJmcy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1vdW50IG9wdGlvbiBzZXQ6ICVzXG4iCittc2dzdHIgIk5ldmFsaWRhIHN1cm1ldGEgb3BjaW8gYWdvcmRpxJ1hczogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJZb3VyIG1rZTJmcy5jb25mIGZpbGUgZG9lcyBub3QgZGVmaW5lIHRoZSAlcyBmaWxlc3lzdGVtIHR5cGUuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjI0Cittc2dpZCAiIgorIllvdSBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgYW4gdXBkYXRlZCBta2UyZnMuY29uZiBmaWxlLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyOAorbXNnaWQgIkFib3J0aW5nLi4uXG4iCittc2dzdHIgIkFib3J0acSdYXMuLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgZnNfdHlwZSAlcyBpcyBub3QgZGVmaW5lZCBpbiBta2UyZnMuY29uZlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ0OQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IFBBVEguXG4iCittc2dzdHIgIk1hbmthcyBzdWZpxIlhIG1lbW9ybyBwb3Igbm92YSAnUEFUSCcuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IChlcnJvcjogJWxkKS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9jayBzaXplIC0gJXMiCittc2dzdHIgIm5ldmFsaWRhIGJsb2tncmFuZG86ICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogYmxvY2tzaXplICVkIG5vdCB1c2FibGUgb24gbW9zdCBzeXN0ZW1zLlxuIgorbXNnc3RyICJBdmVydG86IGJsb2tncmFuZG8gJWQgbmUgdXplYmxhcyBlbiBwbGVqbXVsdG8gZGUgc2lzdGVtb2ouXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNsdXN0ZXIgc2l6ZSAtICVzIgorbXNnc3RyICJuZXZhbGlkYSBmYXNrZ3JhbmRvOiAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTUzCittc2dpZCAiJy1SJyBpcyBkZXByZWNhdGVkLCB1c2UgJy1FJyBpbnN0ZWFkIgorbXNnc3RyICJvcGNpbyAnLVInIGFya2Fpa2FzOyB1enUgJy1FJyBhbnN0YXRhxa1lIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NjUKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgYmxvY2tzIHBlciBncm91cCIKK21zZ3N0ciAiTmV2YWxpZGEgbm9tYnJvIGRlIGJsb2tvaiBwbyBncnVwbyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTcwCittc2dpZCAiYmxvY2tzIHBlciBncm91cCBtdXN0IGJlIG11bHRpcGxlIG9mIDgiCittc2dzdHIgImJsb2tvaiBwbyBncnVwbyBkZXZhcyBlc3RpIG9ibG8gZGUgOCIKKworIzogbWlzYy9ta2UyZnMuYzoxNTc4Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGZsZXhfYmcgc2l6ZSIKK21zZ3N0ciAiTWFsdmFsaWRhIG5vbWJybyBwb3IgZ3JhbmRvIGRlICdmbGV4X2JnJyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg0Cittc2dpZCAiZmxleF9iZyBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyIgorbXNnc3RyICJHcmFuZG8gZGUgJ2ZsZXhfYmcnIGRldmFzIGVzdGkgcG90ZW5jbyBkZSAyIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmxleF9iZyBzaXplICglbHUpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDJeMzEiCittc2dzdHIgIkdyYW5kbyBkZSAnZmxleF9iZycgKCVsdSkgZGV2YXMgZXN0aSBtYWxwbGkgb2wgKGHFrSBlZ2FsZSBhbCkgMl4zMSIKKworIzogbWlzYy9ta2UyZnMuYzoxNjAwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgcmF0aW8gJXMgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJuZXZhbGlkYSBpLW5vZGEgcmlsYXRvICVzIChtaW4gJWQvbWFrcyAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAibmV2YWxpZGEgaS1ub2RhIGdyYW5kbzogJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyMworbXNnaWQgIiIKKyJXYXJuaW5nOiAtSyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZSAnLUUgIgorIm5vZGlzY2FyZCcgZXh0ZW5kZWQgb3B0aW9uIGluc3RlYWQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjM0Cittc2dpZCAiaW4gbWFsbG9jIGZvciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorbXNnc3RyICJtYW5rYXMgc3VmacSJYSBtZW1vcm8gZW4gJ2JhZF9ibG9ja3NfZmlsZW5hbWUoKSciCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgIm5ldmFsaWRhIGVsY2VudG8gZGUgcmV6ZXJ2aXRhaiBibG9rb2o6ICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bSBpbm9kZXMgLSAlcyIKK21zZ3N0ciAibmV2YWxpZGEgbm9tYnJvIGRlIGktbm9kb2o6ICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uIGxldmVsIC0gJXMiCittc2dzdHIgIm5ldmFsaWRhIHJldml6aWEgbml2ZWxvOiAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjcmVhdGUgcmV2aXNpb24gJWQiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjk4Cittc2dpZCAiVGhlIC10IG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIk9wY2lvICctdCcgdXplYmxhcyBudXIgdW51IGZvam9uIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MDYKK21zZ2lkICJUaGUgLVQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiT3BjaW8gJy1UJyB1emVibGFzIG51ciB1bnUgZm9qb24iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc1OSBtaXNjL21rZTJmcy5jOjI4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBkZXZpY2UgJXNcbiIKK21zZ3N0ciAiZHVtIHByb3ZvIGRlIG1hbGZlcm1pIGthxZ1wcm90b2tvbGFuIGFwYXJhdG9uICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGRldiBibG9ja3NpemUgKCVkKSBzbWFsbGVyIHRoYW4gbWluaW11bSBibG9ja3NpemUgJWRcbiIKK21zZ3N0ciAiIgorIkJsb2tncmFuZG8gJWQgZGUga2HFnXByb3Rva29sYSBhcGFyYXRvIGVzdGFzIHBsaSBtYWxncmFuZGEgb2wgbWluaW11bWEgIgorImJsb2tncmFuZG8gJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIGpvdXJuYWwgZGV2aWNlJ3MgYmxvY2tzaXplOiAlZFxuIgorbXNnc3RyICJCbG9rZ3JhbmRvIGRlIGthxZ1wcm90b2tvbGEgYXBhcmF0byB1emnEnWFzOiAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9ja3MgJyVzJyBvbiBkZXZpY2UgJyVzJyIKK21zZ3N0ciAibmV2YWxpZGFqIGJsb2tvaiAnJXMnIGVuIGFwYXJhdG8gJyVzJyIKKworIzogbWlzYy9ta2UyZnMuYzoxODA0Cittc2dpZCAiZmlsZXN5c3RlbSIKK21zZ3N0ciAiZG9zaWVyc2lzdGVtbyIKKworIzogbWlzYy9ta2UyZnMuYzoxODE3IHJlc2l6ZS9tYWluLmM6Mzk1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBmaWxlc3lzdGVtIHNpemUiCittc2dzdHIgImR1bSBlbHRyb3ZvIGRlIGRvc2llcnNpc3RlbWEgZ3JhbmRvIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MjMKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiIgorIk1hbHN1a2Nlc2lzIGVsdHJvdmkgYXBhcmF0YW4gZ3JhbmRvbjtcbiIKKyJuZWNlc2FzIGluZGlraSBsYSBncmFuZG9uIGRlIGxhIGRvc2llcnNpc3RlbW9cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODMwCittc2dpZCAiIgorIkRldmljZSBzaXplIHJlcG9ydGVkIHRvIGJlIHplcm8uICBJbnZhbGlkIHBhcnRpdGlvbiBzcGVjaWZpZWQsIG9yXG4iCisiXHRwYXJ0aXRpb24gdGFibGUgd2Fzbid0IHJlcmVhZCBhZnRlciBydW5uaW5nIGZkaXNrLCBkdWUgdG9cbiIKKyJcdGEgbW9kaWZpZWQgcGFydGl0aW9uIGJlaW5nIGJ1c3kgYW5kIGluIHVzZS4gIFlvdSBtYXkgbmVlZCB0byByZWJvb3RcbiIKKyJcdHRvIHJlLXJlYWQgeW91ciBwYXJ0aXRpb24gdGFibGUuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxODQ3Cittc2dpZCAiRmlsZXN5c3RlbSBsYXJnZXIgdGhhbiBhcHBhcmVudCBkZXZpY2Ugc2l6ZS4iCittc2dzdHIgIkRvc2llcnNpc3RlbW8gcGxpIGdyYW5kYXMgb2wgxZ1ham5hIGFwYXJhdGEgZ3JhbmRvLiIKKworIzogbWlzYy9ta2UyZnMuYzoxODY3Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGZzIHR5cGVzIGxpc3RcbiIKK21zZ3N0ciAiTWFsc3VrY2VzaXMgYW5hbGl6aSBsaXN0b24gZGUgZG9zaWVyc2lzdGVtYWogdGlwb2pcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTA4Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBoYXJkd2FyZSBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MTQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHBoeXNpY2FsIHNlY3RvciBzaXplIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk0NgorbXNnaWQgIndoaWxlIHNldHRpbmcgYmxvY2tzaXplOyB0b28gc21hbGwgZm9yIGRldmljZVxuIgorbXNnc3RyICJkdW0gYWdvcmRvIGRlIGJsb2tncmFuZG87IMSdaSB0cm8gbWFsZ3JhbmRhcyBwb3IgYXBhcmF0b1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNwZWNpZmllZCBibG9ja3NpemUgJWQgaXMgbGVzcyB0aGFuIGRldmljZSBwaHlzaWNhbCBzZWN0b3JzaXplICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogU2l6ZSBvZiBkZXZpY2UgKDB4JWxseCBibG9ja3MpICVzIHRvbyBiaWcgdG8gYmUgZXhwcmVzc2VkXG4iCisiXHRpbiAzMiBiaXRzIHVzaW5nIGEgYmxvY2tzaXplIG9mICVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk5MQorbXNnaWQgImZzX3R5cGVzIGZvciBta2UyZnMuY29uZiByZXNvbHV0aW9uOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTk4Cittc2dpZCAiRmlsZXN5c3RlbSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAwNgorbXNnaWQgIlNwYXJzZSBzdXBlcmJsb2NrcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAxOAorbXNnaWQgIkpvdXJuYWxzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIkthxZ1wcm90b2tvbG9qIG5lIHN1YnRlbmF0YXMgZW4gZG9zaWVyc2lzdGVtb2ogZGUgcmV2aXppbyAwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAzMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJWxmIgorbXNnc3RyICJuZXZhbGlkYSBlbGNlbnRvIGRlIHJlemVydml0YWogYmxva29qOiAlbGYiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJFeHRlbnRzIE1VU1QgYmUgZW5hYmxlZCBmb3IgYSA2NC1iaXQgZmlsZXN5c3RlbS4gIFBhc3MgLU8gZXh0ZW50cyB0byAiCisicmVjdGlmeS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNjkKK21zZ2lkICJUaGUgY2x1c3RlciBzaXplIG1heSBub3QgYmUgc21hbGxlciB0aGFuIHRoZSBibG9jayBzaXplLlxuIgorbXNnc3RyICJGYXNrZ3JhbmRvIG5lIHBvdmFzIGVzdGkgcGxpIG1hbGdyYW5kYSBvbCBibG9rZ3JhbmRvLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNzUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgY2x1c3RlciBzaXplIHJlcXVpcmVzIHRoZSBiaWdhbGxvYyBmZWF0dXJlIgorbXNnc3RyICJpbmRpa2kgZmFza2dyYW5kb24gYmV6b25hcyBsYSAnYmlnYWxsb2MnLWthcGFibG9uIgorCisjOiBtaXNjL21rZTJmcy5jOjIwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogVW5hYmxlIHRvIGdldCBkZXZpY2UgZ2VvbWV0cnkgZm9yICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsaWdubWVudCBpcyBvZmZzZXQgYnkgJWx1IGJ5dGVzLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBtYXkgcmVzdWx0IGluIHZlcnkgcG9vciBwZXJmb3JtYW5jZSwgKHJlKS1wYXJ0aXRpb25pbmcgc3VnZ2VzdGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCkiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiAlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCksIGZvcmNlZCB0byBjb250aW51ZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE4MAorbXNnaWQgIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0IGV4dGVudHMgZmVhdHVyZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIxODcKK21zZ2lkICIiCisiVGhlIHJlc2l6ZV9pbm9kZSBhbmQgbWV0YV9iZyBmZWF0dXJlcyBhcmUgbm90IGNvbXBhdGlibGUuXG4iCisiVGhleSBjYW4gbm90IGJlIGJvdGggZW5hYmxlZCBzaW11bHRhbmVvdXNseS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIxOTYKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiIKKyJTZWUgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQmlnYWxsb2MgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMDcKK21zZ2lkICJyZXNlcnZlZCBvbmxpbmUgcmVzaXplIGJsb2NrcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMTYKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIKK21zZ3N0ciAibm9tYnJvIGRlIGJsb2tvaiBwbyBncnVwbyBlc3RhcyBla3N0ZXIgZ2FtbyIKKworIzogbWlzYy9ta2UyZnMuYzoyMjQwCittc2dpZCAiRmxleF9iZyBmZWF0dXJlIG5vdCBlbmFibGVkLCBzbyBmbGV4X2JnIHNpemUgbWF5IG5vdCBiZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgc2l6ZSAlZCAobWluICVkL21heCAlZCkiCittc2dzdHIgIm5ldmFsaWRhIGktbm9kZ3JhbmRvICVkIChtaW4gJWQvbWFrcyAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCByYWlzZSBpbm9kZSByYXRpbz8iCittc2dzdHIgInRybyBtdWx0YWogaS1ub2RvaiAoJWxsdSk7IMSJdSBhbHRpZ2kgbGEgaS1ub2RhbiByaWxhdG9uPyIKKworIzogbWlzYy9ta2UyZnMuYzoyMjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHNwZWNpZnkgPCAyXjMyIGlub2RlcyIKK21zZ3N0ciAidHJvIG11bHRhaiBpLW5vZG9qICglbGx1KTsgaW5kaWt1IG1hbHBsaSBvbCAyXjMyIGktbm9kb2oiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5vZGVfc2l6ZSAoJXUpICogaW5vZGVzX2NvdW50ICgldSkgdG9vIGJpZyBmb3IgYVxuIgorIlx0ZmlsZXN5c3RlbSB3aXRoICVsbHUgYmxvY2tzLCBzcGVjaWZ5IGhpZ2hlciBpbm9kZV9yYXRpbyAoLWkpXG4iCisiXHRvciBsb3dlciBpbm9kZSBjb3VudCAoLU4pLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbTsgdGhpcyBjYW4gYmUgdW5kb25lIHVzaW5nIHRoZSBjb21tYW5kOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI0MzIKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc2V0dXAgdW5kbyBmaWxlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDU4Cittc2dpZCAiRGlzY2FyZGluZyBkZXZpY2UgYmxvY2tzOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDc0Cittc2dpZCAiZmFpbGVkIC0gIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU5NgorbXNnaWQgIndoaWxlIHNldHRpbmcgdXAgc3VwZXJibG9jayIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MTIKK21zZ2lkICJEaXNjYXJkIHN1Y2NlZWRlZCBhbmQgd2lsbCByZXR1cm4gMHMgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3MgLSAlcyIKK21zZ3N0ciAibmVrb25hdGEgbWFzdHJ1bXNpc3RlbW86ICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjI3NTIKK21zZ2lkICJBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogIgorbXNnc3RyICJBc2lnbm8gZGUgZ3J1cGFqIHRhYmVsb2o6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNzYwCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGFsbG9jYXRlIGZpbGVzeXN0ZW0gdGFibGVzIgorbXNnc3RyICJkdW0gYXNpZ25vIGRlIGRvc2llcnNpc3RlbWFqIHRhYmVsb2oiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2OQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgZHVtIGtvbnZlcnRvIGRlIHN1YmZhc2thIGJsb2thIGJpdG1hcG8iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGJsb2NrICVsbHUgYXQgZW5kIG9mIGZpbGVzeXN0ZW0iCittc2dzdHIgImR1bSBudWxwbGVuaWdvIGRlIGJsb2tvICVsbHUgamUgZmlubyBkZSBkb3NpZXJzaXN0ZW1vIgorCisjOiBtaXNjL21rZTJmcy5jOjI4MjYKK21zZ2lkICJ3aGlsZSByZXNlcnZpbmcgYmxvY2tzIGZvciBvbmxpbmUgcmVzaXplIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgzOCBtaXNjL3R1bmUyZnMuYzo3MTIKK21zZ2lkICJqb3VybmFsIgorbXNnc3RyICJrYcWdcHJvdG9rb2xvIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGpvdXJuYWwgdG8gZGV2aWNlICVzOiAiCittc2dzdHIgIkFsZG9uacSdYXMga2HFnXByb3Rva29sbyBhbCBhcGFyYXRvICVzOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gYWRkIGpvdXJuYWwgdG8gZGV2aWNlICVzIgorbXNnc3RyICIiCisiXG4iCisiICAgIGR1bSBwcm92byBkZSBhbGRvbmkga2HFnXByb3Rva29sb24gYWwgYXBhcmF0byAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyODYyIG1pc2MvbWtlMmZzLmM6Mjg5MyBtaXNjL3R1bmUyZnMuYzo3NDEgbWlzYy90dW5lMmZzLmM6NzYwCittc2dpZCAiZG9uZVxuIgorbXNnc3RyICJwcmV0YXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODY5Cittc2dpZCAiU2tpcHBpbmcgam91cm5hbCBjcmVhdGlvbiBpbiBzdXBlci1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiVHJhbnNzYWx0acSdYXMga3JlYWRvIGRlIGthxZ1wcm90b2tvbG8gZW4gbnVyxIllZmEgbW9kdXNvXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICgldSBibG9ja3MpOiAiCittc2dzdHIgIktyZWFkbyBkZSBrYcWdcHJvdG9rb2xvICgldSBibG9rb2opOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg4OQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCIKK21zZ3N0ciAiIgorIlxuIgorIiAgICBkdW0gcHJvdm8gZGUga3JlaSBrYcWdcHJvdG9rb2xvbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAxIG1pc2MvdHVuZTJmcy5jOjUxNgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWQgc2Vjb25kcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MjMKK21zZ2lkICJXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MzAKK21zZ2lkICIiCisiXG4iCisiV2FybmluZywgaGFkIHRyb3VibGUgd3JpdGluZyBvdXQgc3VwZXJibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkzMgorbXNnaWQgIiIKKyJkb25lXG4iCisiXG4iCittc2dzdHIgIiIKKyJwcmV0YXNcbiIKKyJcbiIKKworIzogbWlzYy9ta2xvc3QrZm91bmQuYzo1MAorbXNnaWQgIlVzYWdlOiBta2xvc3QrZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAgJXMgZGV2aWNlLi4uXG4iCisiXG4iCisiUHJpbnRzIG91dCB0aGUgcGFydGl0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGdpdmVuIGRldmljZS5cbiIKKyJGb3IgZXhhbXBsZTogJXMgL2Rldi9oZGFcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvcGFydGluZm8uYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGdlb21ldHJ5IG9mICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBzaXplIG9mICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEyCittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jIG1heF9tb3VudHNfY291bnRdIFstZSBlcnJvcnNfYmVoYXZpb3JdIFstZyBncm91cF1cbiIKKyJcdFstaSBpbnRlcnZhbFtkfG18d11dIFstal0gWy1KIGpvdXJuYWxfb3B0aW9uc10gWy1sXVxuIgorIlx0Wy1tIHJlc2VydmVkX2Jsb2Nrc19wZXJjZW50XSBbLW8gW15dbW91bnRfb3B0aW9uc1ssLi4uXV0gWy1wICIKKyJtbXBfdXBkYXRlX2ludGVydmFsXVxuIgorIlx0Wy1yIHJlc2VydmVkX2Jsb2Nrc19jb3VudF0gWy11IHVzZXJdIFstQyBtb3VudF9jb3VudF0gWy1MIHZvbHVtZV9sYWJlbF1cbiIKKyJcdFstTSBsYXN0X21vdW50ZWRfZGlyXSBbLU8gW15dZmVhdHVyZVssLi4uXV1cbiIKKyJcdFstUSBxdW90YV9vcHRpb25zXVxuIgorIlx0Wy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV0gWy1UIGxhc3RfY2hlY2tfdGltZV0gWy1VIFVVSURdXG4iCisiXHRbIC1JIG5ld19pbm9kZV9zaXplIF0gZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzCittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCFcbiIKK21zZ3N0ciAiS2HFnXByb3Rva29sYSDEiWVmYmxva28gbmUgdHJvdmnEnWlzIVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjEKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJkdW0gcHJvdm8gZGUgbWFsZmVybWkgZWtzdGVyYW4ga2HFnXByb3Rva29sb24iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI2NyBtaXNjL3R1bmUyZnMuYzoxOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIlcyBuZSBlc3RhcyBrYcWdcHJvdG9rb2xhIGFwYXJhdG8uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI3NyBtaXNjL3R1bmUyZnMuYzoxOTc0Cittc2dpZCAiRmlsZXN5c3RlbSdzIFVVSUQgbm90IGZvdW5kIG9uIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICJEb3NpZXJzaXN0ZW1hIFVVSUQgbmUgdHJvdmnEnWlzIGVuIGthxZ1wcm90b2tvbGEgYXBhcmF0by5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MzAxCittc2dpZCAiIgorIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MzEwCittc2dpZCAiSm91cm5hbCByZW1vdmVkXG4iCittc2dzdHIgIkthxZ1wcm90b2tvbG8gZm9yaWdpxJ1pc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNTQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgImR1bSBsZWdhZG8gZGUgYml0bWFwb2oiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM2MgorbXNnaWQgIndoaWxlIGNsZWFyaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgImR1bSB2acWdYWRvIGRlIGthxZ1wcm90b2tvbGEgaS1ub2RvIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNzMKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgImR1bSBza3JpYmFkbyBkZSBrYcWdcHJvdG9rb2xhIGktbm9kbyIKKworIzogbWlzYy90dW5lMmZzLmM6NDA1IG1pc2MvdHVuZTJmcy5jOjQxOAorbXNnaWQgIihhbmQgcmVib290IGFmdGVyd2FyZHMhKVxuIgorbXNnc3RyICIoa2FqIHBvc3RlIHJlc3RhcnRpZ3UgbGEga29tcHV0aWxvbiEpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDY3Cittc2dpZCAiIgorIlRoZSBoYXNfam91cm5hbCBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NzYKK21zZ2lkICIiCisiVGhlIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LiAgUGxlYXNlIHJ1biBlMmZzY2sgYmVmb3JlIGNsZWFyaW5nXG4iCisidGhlIGhhc19qb3VybmFsIGZsYWcuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDk1Cittc2dpZCAiIgorIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICdzcGFyc2Vfc3VwZXInIG5vdCBzdXBwb3J0ZWRcbiIKKyJmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgbWV0YV9iZyBmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NTA4Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2FuJ3RcbiIKKyJiZSBzZXQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBvclxuIgorInJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MzUKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW5ub3RcbiIKKyJiZSBkaXNhYmxlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyByZWFkb25seS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1NDMKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIGJpdG1hcHNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFnaWMgbnVtYmVyIGluIE1NUCBibG9jayBkb2VzIG5vdCBtYXRjaC4gZXhwZWN0ZWQ6ICV4LCBhY3R1YWw6ICV4XG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NTU3Cittc2dpZCAid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU4OQorbXNnaWQgIiIKKyJDbGVhcmluZyB0aGUgZmxleF9iZyBmbGFnIHdvdWxkIGNhdXNlIHRoZSB0aGUgZmlsZXN5c3RlbSB0byBiZVxuIgorImluY29uc2lzdGVudC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2MDAKK21zZ2lkICIiCisiVGhlIGh1Z2VfZmlsZSBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NjAKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogJ15xdW90YScgb3B0aW9uIG92ZXJyaWRlcyAnLVEnYXJndW1lbnRzLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcwNQorbXNnaWQgIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIGEgam91cm5hbC5cbiIKK21zZ3N0ciAiRG9zaWVyc2lzdGVtbyBqYW0gaGF2YXMga2HFnXByb3Rva29sb24uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIG9uICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgZHVtIHByb3ZvIGRlIG1hbGZlcm1pIGthxZ1wcm90b2tvbG9uIGVuICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIG9uIGRldmljZSAlczogIgorbXNnc3RyICJLcmVhZG8gZGUga2HFnXByb3Rva29sbyBlbiBhcGFyYXRvICVzOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBhZGRpbmcgZmlsZXN5c3RlbSB0byBqb3VybmFsIG9uICVzIgorbXNnc3RyICJkdW0gYWxkb25pxJ1vIGRlIGRvc2llcnNpc3RlbW8gYWwga2HFnXByb3Rva29sbyBlbiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6NzQzCittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBpbm9kZTogIgorbXNnc3RyICJLcmVhZG8gZGUga2HFnXByb3Rva29sYSBpLW5vZG86ICIKKworIzogbWlzYy90dW5lMmZzLmM6NzU3Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgZHVtIHByb3ZvIGRlIGtyZWkga2HFnXByb3Rva29sYSBkb3NpZXJvIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4MzIKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2UgcXVvdGEgb3B0aW9ucyFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4NTQKK21zZ2lkICIiCisiXG4iCisiQmFkIHF1b3RhIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkZvbGxvd2luZyB2YWxpZCBxdW90YSBvcHRpb25zIGFyZSBhdmFpbGFibGUgKHBhc3MgYnkgc2VwYXJhdGluZyB3aXRoICIKKyJjb21tYSk6XG4iCisiXHRbXl11c3JxdW90YVxuIgorIlx0W15dZ3JwcXVvdGFcbiIKKyJcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcGFyc2UgZGF0ZS90aW1lIHNwZWNpZmllcjogJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6OTQyIG1pc2MvdHVuZTJmcy5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbW91bnRzIGNvdW50IC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6OTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBlcnJvciBiZWhhdmlvciAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2lkL2dyb3VwIG5hbWUgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbnRlcnZhbCAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrIHJhdGlvIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3NQorbXNnaWQgIi1vIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwODQKK21zZ2lkICItTyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9ja3MgY291bnQgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB1aWQvdXNlciBuYW1lIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTE0NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5vZGUgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1tcF91cGRhdGVfaW50ZXJ2YWwgdG9vIGJpZzogJWx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlkZTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpcGUtd2lkdGg6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGhhc2ggYWxnb3JpdGhtOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHRvICVzICglZClcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzMxCittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNoIGFsZ29yaXRobT5cbiIKKyJcdG1vdW50X29wdHM9PGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucz5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBjaHVuayBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZV93aWR0aD08UkFJRCBzdHJpZGUqZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3OTgKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBpbm9kZSBiaXRtYXBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODAzCittc2dpZCAiRmFpbGVkIHRvIHJlYWQgYmxvY2sgYml0bWFwXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyMCByZXNpemUvcmVzaXplMmZzLmM6OTMxCittc2dpZCAiYmxvY2tzIHRvIGJlIG1vdmVkIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjMKK21zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2sgYml0bWFwIHdoZW4gaW5jcmVhc2luZyBpbm9kZSBzaXplXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyOQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gaW5jcmVhc2UgaW5vZGUgc2l6ZSBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODM0Cittc2dpZCAiRmFpbGVkIHRvIHJlbG9jYXRlIGJsb2NrcyBkdXJpbmcgaW5vZGUgcmVzaXplIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NjYKK21zZ2lkICIiCisiRXJyb3IgaW4gcmVzaXppbmcgdGhlIGlub2RlIHNpemUuXG4iCisiUnVuIGUydW5kbyB0byB1bmRvIHRoZSBmaWxlIHN5c3RlbSBjaGFuZ2VzLiBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODkzCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZGIgZmlsZW5hbWVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZWxldGUgJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gdW5kbyB0aGUgdHVuZTJmcyBvcGVyYXRpb24gcGxlYXNlIHJ1biB0aGUgY29tbWFuZFxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNTVAgYmxvY2sgbWFnaWMgaXMgYmFkLiBUcnkgdG8gZml4IGl0IGJ5IHJ1bm5pbmc6XG4iCisiJ2UyZnNjayAtZiAlcydcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIGlzIGFscmVhZHkgJWx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA4MQorbXNnaWQgIlNocmlua2luZyBpbm9kZSBzaXplIGlzIG5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaW5vZGUgc2l6ZSAlbHUgKG1heCAlZClcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbWF4aW1hbCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjdXJyZW50IG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGVycm9yIGJlaGF2aW9yIHRvICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBnaWQgdG8gJWx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyBpcyB0b28gYmlnICglbHUpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgcGVyY2VudGFnZSB0byAlZyUlICglbGx1IGJsb2NrcylcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlc2VydmVkIGJsb2NrcyBjb3VudCBpcyB0b28gYmlnICglbGx1KSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IHRvICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTg3Cittc2dpZCAiIgorIlxuIgorIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSBzdXBlcmJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTkxCittc2dpZCAiIgorIlxuIgorIlNldHRpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZFxuIgorImZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBtZXRhX2JnIGZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIHNldC4gICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDcKK21zZ2lkICIiCisiXG4iCisiQ2xlYXJpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdGltZSBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0byAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgdWlkIHRvICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNTMKK21zZ2lkICJFcnJvciBpbiB1c2luZyBjbGVhcl9tbXAuIEl0IG11c3QgYmUgdXNlZCB3aXRoIC1mXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI3MQorbXNnaWQgIiIKKyJUaGUgcXVvdGEgZmVhdHVyZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyOTIKK21zZ2lkICJUaGUgVVVJRCBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzMjIKK21zZ2lkICJJbnZhbGlkIFVVSUQgZm9ybWF0XG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjMzNworbXNnaWQgIk5lZWQgdG8gdXBkYXRlIGpvdXJuYWwgc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiTmVjZXNhcyDEnWlzZGF0aWdpIGthxZ1wcm90b2tvbGFuIMSJZWZibG9rb24uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNTgKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiTnVyIGVibGFzIMWdYW7EnWkgaS1ub2RhbiBncmFuZG9uIGtpYW0gZG9zaWVyc2lzdGVtbyBuZSBlc3RhcyBzdXJtZXRhdGEuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNjYKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIGlub2RlIHNpemUgbm90IHN1cHBvcnRlZCBmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgZmxleF9iZ1xuIgorImZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW5vZGUgc2l6ZSAlbHVcbiIKK21zZ3N0ciAiQXJnb3JkacSdYXMgaS1ub2RhIGdyYW5kbyBhbCAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM4MgorbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICJGaWFza2lzIMWdYW7EnW8gZGUgaS1ub2RhIGdyYW5kb1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaWRlIHNpemUgdG8gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaXBlIHdpZHRoIHRvICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucyB0byAnJXMnXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6OTMKK21zZ2lkICI8cHJvY2VlZGluZz5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICJQcm9jZWVkIGFueXdheSAob3Igd2FpdCAlZCBzZWNvbmRzKSA/ICh5LG4pICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoxMDEKK21zZ2lkICJQcm9jZWVkIGFueXdheT8gKHksbikgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW91bnRlZCBvbiAlcyBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vdW50ZWQgb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0Y3JlYXRlZCBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vZGlmaWVkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGb3VuZCBhICVzIHBhcnRpdGlvbiB0YWJsZSBpbiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSAlcyBkb2VzIG5vdCBleGlzdCBhbmQgbm8gc2l6ZSB3YXMgc3BlY2lmaWVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyByZWd1bGFyIGZpbGUgJXNcbiIKK21zZ3N0ciAiS3JlacSdYXMgbm9ybWFsYSBkb3NpZXJvICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiTWFsc3VrY2VzaXMgbWFsZmVybWkgJXM6ICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIxNgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZGV2aWNlIGFwcGFyZW50bHkgZG9lcyBub3QgZXhpc3Q7IGRpZCB5b3Ugc3BlY2lmeSBpdCBjb3JyZWN0bHk/XG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGJsb2NrIHNwZWNpYWwgZGV2aWNlLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjb250YWlucyBhICVzIGZpbGUgc3lzdGVtIGxhYmVsbGVkICclcydcbiIKK21zZ3N0ciAiJXMgZW5oYXZhcyAlcy1kb3NpZXJzaXN0ZW1vbiBrdW4gZXRpa2VkbyAnJXMnXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjb250YWlucyBhICVzIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgIiVzIGVuaGF2YXMgJXMtZG9zaWVyc2lzdGVtb25cbiIKKworIzogbWlzYy91dGlsLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGVudGlyZSBkZXZpY2UsIG5vdCBqdXN0IG9uZSBwYXJ0aXRpb24hXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MzIzCittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IG1ha2UgYSAlcyBoZXJlIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjMzNQorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjM1MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBqb3VybmFsIG9wdGlvbnMhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3QgZmluZCBqb3VybmFsIGRldmljZSBtYXRjaGluZyAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjQwMworbXNnaWQgIiIKKyJcbiIKKyJCYWQgam91cm5hbCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJKb3VybmFsIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBqb3VybmFsIG9wdGlvbnMgYXJlOlxuIgorIlx0c2l6ZT08am91cm5hbCBzaXplIGluIG1lZ2FieXRlcz5cbiIKKyJcdGRldmljZT08am91cm5hbCBkZXZpY2U+XG4iCisiXHRsb2NhdGlvbj08am91cm5hbCBsb2NhdGlvbj5cbiIKKyJcbiIKKyJUaGUgam91cm5hbCBzaXplIG11c3QgYmUgYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzo0MzQKK21zZ2lkICIiCisiXG4iCisiRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIgorbXNnc3RyICIiCisiXG4iCisiRG9zaWVyc2lzdGVtbyB0cm8gbWFsZ3JhbmRhcyBwb3IgaGF2aSBrYcWdcHJvdG9rb2xvbi5cbiIKKworIzogbWlzYy91dGlsLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgcmVxdWVzdGVkIGpvdXJuYWwgc2l6ZSBpcyAlZCBibG9ja3M7IGl0IG11c3QgYmVcbiIKKyJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gIEFib3J0aW5nLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjQ0OQorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIHNpemUgdG9vIGJpZyBmb3IgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkthxZ1wcm90b2tvbGEgZ3JhbmRvIHRybyBncmFuZGFzIHBvciBkb3NpZXJzaXN0ZW1vLlxuIgorCisjOiBtaXNjL3V0aWwuYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZXN5c3RlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hlY2tlZCBldmVyeSAlZCBtb3VudHMgb3JcbiIKKyIlZyBkYXlzLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuICBVc2UgdHVuZTJmcyAtYyBvciAtaSB0byBvdmVycmlkZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstZF0gWy1wIHBpZGZpbGVdIFstcyBzb2NrZXRwYXRoXSBbLVQgdGltZW91dF1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIFstcnx0XSBbLW4gbnVtXSBbLXMgc29ja2V0cGF0aF1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIC1rXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjE1NQorbXNnaWQgImJhZCBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjE3MworbXNnaWQgImNvbm5lY3QiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjE5MgorbXNnaWQgIndyaXRlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDAKK21zZ2lkICJyZWFkIGNvdW50IgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDYKK21zZ2lkICJiYWQgcmVzcG9uc2UgbGVuZ3RoIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXVpZGQgZGFlbW9uIGFscmVhZHkgcnVubmluZyBhdCBwaWQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxpc3RlbiBvbiB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgZnJvbSBjbGllbnQsIGxlbiA9ICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVyYXRpb24gJWQsIGluY29taW5nIG51bSA9ICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHJhbmRvbSBVVUlEOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kICVkIHN1YnNlcXVlbnQgVVVJRHNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IG1pc2MvdXVpZGQuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkICVkIFVVSUQnczpcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjQ3NyBtaXNjL3V1aWRkLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjUzNCBtaXNjL3V1aWRkLmM6NTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNhbGxpbmcgdXVpZGQgZGFlbW9uICglcyk6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ4Cittc2dpZCAiTGlzdCBvZiBVVUlEJ3M6XG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHJlcGx5IGxlbmd0aCBmcm9tIHNlcnZlciAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qga2lsbCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIktpbGxlZCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGdlbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJdIFstdF1cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAyCittc2dpZCAiIyBFeHRlbnQgZHVtcDpcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiNcdE51bT0lbGx1LCBTaXplPSVsbHUsIEN1cnNvcj0lbGx1LCBTb3J0ZWQ9JWxsdVxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBkZXZpY2UgW25ld19zaXplXVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NjYKK21zZ2lkICJFeHRlbmRpbmcgdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NjkKK21zZ2lkICJSZWxvY2F0aW5nIGJsb2NrcyIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjcyCittc2dpZCAiU2Nhbm5pbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo3NQorbXNnaWQgIlVwZGF0aW5nIGlub2RlIHJlZmVyZW5jZXMiCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo3OAorbXNnaWQgIk1vdmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjgxCittc2dpZCAiVW5rbm93biBwYXNzPyE/IgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVnaW4gcGFzcyAlZCAobWF4ID0gJWx1KVxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6MTU1Cittc2dpZCAiIgorIlxuIgorIlJlc2l6aW5nIGJpZ2FsbG9jIGZpbGUgc3lzdGVtcyBoYXMgbm90IGJlZW4gZnVsbHkgdGVzdGVkLiAgUHJvY2VlZCBhdFxuIgorInlvdXIgb3duIHJpc2shICBVc2UgdGhlIGZvcmNlIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBnbyBhaGVhZCBhbnl3YXkuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIHN0YXQgaW5mb3JtYXRpb24gZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWYgJXMnIGZpcnN0LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGltYXRlZCBtaW5pbXVtIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW06ICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG5ldyBzaXplOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDIxCittc2dpZCAiTmV3IHNpemUgdG9vIGxhcmdlIHRvIGJlIGV4cHJlc3NlZCBpbiAzMiBiaXRzXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV3IHNpemUgc21hbGxlciB0aGFuIG1pbmltdW0gKCVsbHUpXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0MzUKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBsZW5ndGgiCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb250YWluaW5nIHBhcnRpdGlvbiAob3IgZGV2aWNlKSBpcyBvbmx5ICVsbHUgKCVkaykgYmxvY2tzLlxuIgorIllvdSByZXF1ZXN0ZWQgYSBuZXcgc2l6ZSBvZiAlbGx1IGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gaXMgYWxyZWFkeSAlbGx1ICglZGspIGJsb2NrcyBsb25nLiAgTm90aGluZyB0byBkbyFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkxhIGRvc2llcnNpc3RlbW8gamFtIGhhdmFzICVsbHUgYmxva29qbiAoZGUgJWRLKS4gIE5lbmlvIGZhcmVuZGFzLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiRG9zaWVyc2lzdGVtbyBzdXIgJXMgcmVncmFuZGlnacSdYXMgYWwgJWxsdSBibG9rb2ogKGRlICVkSykuXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZXNpemUgJXMiCittc2dzdHIgImR1bSBwcm92byBkZSByZWdyYW5kaWdpICVzIgorCisjOiByZXNpemUvbWFpbi5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1meSAlcycgdG8gZml4IHRoZSBmaWxlc3lzdGVtXG4iCisiYWZ0ZXIgdGhlIGFib3J0ZWQgcmVzaXplIG9wZXJhdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gb24gJXMgaXMgbm93ICVsbHUgKCVkaykgYmxvY2tzIGxvbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJEb3NpZXJzaXN0ZW1vIHN1ciAlcyBudW4gaGF2YXMgJWxsdSBibG9rb2puIChkZSAlZEspLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gdHJ1bmNhdGUgJXMiCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjgyCittc2dpZCAia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6ZSB3aXRoIHNwYXJzZV9zdXBlcjIiCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlczsgb24tbGluZSByZXNpemluZyByZXF1aXJlZFxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo5MQorbXNnaWQgIk9uLWxpbmUgc2hyaW5raW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjExNgorbXNnaWQgIkZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjEyNQorbXNnaWQgIk5vdCBlbm91Z2ggcmVzZXJ2ZWQgZ2R0IGJsb2NrcyBmb3IgcmVzaXppbmciCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjEzMgorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHJlc2l6aW5nIGEgZmlsZSBzeXN0ZW0gdGhpcyBsYXJnZSIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIG1vdW50cG9pbnQgJXMiCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJPbGQgcmVzaXplIGludGVyZmFjZSByZXF1ZXN0ZWQuXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjE2NCByZXNpemUvb25saW5lLmM6MTgxCittc2dpZCAiUGVybWlzc2lvbiBkZW5pZWQgdG8gcmVzaXplIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjE2NyByZXNpemUvb25saW5lLmM6MTg3Cittc2dpZCAiV2hpbGUgY2hlY2tpbmcgZm9yIG9uLWxpbmUgcmVzaXppbmcgc3VwcG9ydCIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MTg0Cittc2dpZCAiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGVyZm9ybWluZyBhbiBvbi1saW5lIHJlc2l6ZSBvZiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MjMzCittc2dpZCAiV2hpbGUgdHJ5aW5nIHRvIGV4dGVuZCB0aGUgbGFzdCBncm91cCIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHRyeWluZyB0byBhZGQgZ3JvdXAgIyVkIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlcywgYW5kIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IHN1cHBvcnRlZCBvbiAiCisidGhpcyBzeXN0ZW0uXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo2OTEKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MiCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjkzNgorbXNnaWQgIm1ldGEtZGF0YSBibG9ja3MiCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjEwMzkgcmVzaXplL3Jlc2l6ZTJmcy5jOjE4MzYKK21zZ2lkICJuZXcgbWV0YSBibG9ja3MiCittc2dzdHIgIm5vdmFqIG1ldGFibG9rb2oiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMDU2Cittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbiEgIE5vIHNiIGluIGxhc3Qgc3VwZXJfc3BhcnNlIGJnP1xuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMDYxCittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbiEgIFVuZXhwZWN0ZWQgb2xkX2Rlc2MgaW4gc3VwZXJfc3BhcnNlIGJnP1xuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMTM5Cittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbjogcmVzaXplIGlub2RlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExCittc2dpZCAiRVhUMkZTIExpYnJhcnkgdmVyc2lvbiAxLjQyLjEzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0Ml9maWxzeXMgc3RydWN0dXJlIgorbXNnc3RyICJNYWzEnXVzdGFzIG1hZ2lhIG51bWVybyBwb3Igc3RydWt0dXJvICdleHQyX2ZpbHN5cyciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICJNYWzEnXVzdGFzIG1hZ2lhIG51bWVybyBwb3Igc3RydWt0dXJvICdiYWRibG9ja3NfbGlzdCciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICJNYWzEnXVzdGFzIG1hZ2lhIG51bWVybyBwb3Igc3RydWt0dXJvICdiYWRibG9ja3NfaXRlcmF0ZSciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfc2NhbiBzdHJ1Y3R1cmUiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaWEgbnVtZXJvIHBvciBzdHJ1a3R1cm8gJ2lub2RlX3NjYW4nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJNYWzEnXVzdGFzIG1hZ2lhIG51bWVybyBwb3Igc3RydWt0dXJvICdpb19jaGFubmVsJyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB1bml4IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJNYWzEnXVzdGFzIG1hZ2lhIG51bWVybyBwb3IgVW5pa3NhIHN0cnVrdHVybyAnaW9fY2hhbm5lbCciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fbWFuYWdlciBzdHJ1Y3R1cmUiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaWEgbnVtZXJvIHBvciBzdHJ1a3R1cm8gJ2lvX21hbmFnZXInIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJsb2NrX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaWEgbnVtZXJvIHBvciBzdHJ1a3R1cm8gJ2Jsb2NrX2JpdG1hcCciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiTWFsxJ11c3RhcyBtYWdpYSBudW1lcm8gcG9yIHN0cnVrdHVybyAnaW5vZGVfYml0bWFwJyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBnZW5lcmljX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaWEgbnVtZXJvIHBvciBzdHJ1a3R1cm8gJ2dlbmVyaWNfYml0bWFwJyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB0ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJNYWzEnXVzdGFzIG1hZ2lhIG51bWVybyBwb3Igc3RydWt0dXJvICd0ZXN0IGlvX2NoYW5uZWwnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGRpcmVjdG9yeSBibG9jayBsaXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiTWFsxJ11c3RhcyBtYWdpYSBudW1lcm8gcG9yIHN0cnVrdHVybyAnYmxvY2sgbGlzdCciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaWNvdW50IHN0cnVjdHVyZSIKK21zZ3N0ciAiTWFsxJ11c3RhcyBtYWdpYSBudW1lcm8gcG9yIHN0cnVrdHVybyAnaWNvdW50JyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBQb3dlcnF1ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJNYWzEnXVzdGFzIG1hZ2lhIG51bWVybyBwb3Igc3RydWt0dXJvICdQb3dlcnF1ZXN0IGlvX2NoYW5uZWwnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDIgZmlsZSBzdHJ1Y3R1cmUiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaWEgbnVtZXJvIHBvciBzdHJ1a3R1cm8gJ2V4dDIgZmlsZSciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgRXh0MiBJbWFnZSBIZWFkZXIiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaWEgbnVtZXJvIHBvciAnRXh0MiBJbWFnZSBIZWFkZXInIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJNYWzEnXVzdGFzIG1hZ2lhIG51bWVybyBwb3Igc3RydWt0dXJvICdpb19jaGFubmVsJyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBoYW5kbGUiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaWEgbnVtZXJvIHBvciAnZXh0NCBleHRlbnQgaGFuZGxlJyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayIKK21zZ3N0ciAiTWFsYm9uYXMgbWFnaWEgbnVtZXJvIGVuIMSJZWZibG9rbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMxCittc2dpZCAiRmlsZXN5c3RlbSByZXZpc2lvbiB0b28gaGlnaCIKK21zZ3N0ciAiRG9zaWVyc2lzdGVtYSByZXZpemlvIHRybyBhbHRhcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMyCittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSB0byBmaWxlc3lzdGVtIG9wZW5lZCByZWFkLW9ubHkiCittc2dzdHIgIlByb3ZvIGRlIHNrcmliaSBhbCBkb3NpZXJzaXN0ZW1vIGtpdSBtYWxmZXJtacSdaXMga2llbCBudXJsZWdhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzMKK21zZ2lkICJDYW4ndCByZWFkIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICJNYWxzdWtjZXNpcyBsZWdpIGdydXBham4gcHJpYcS1b2puIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzQKK21zZ2lkICJDYW4ndCB3cml0ZSBncm91cCBkZXNjcmlwdG9ycyIKK21zZ3N0ciAiTWFsc3VrY2VzaXMgc2tyaWJpIGdydXBham4gcHJpYcS1b2puIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzUKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgYmxvY2sgYml0bWFwIgorbXNnc3RyICJEaWZla3RhIGdydXBwcmlhxLVvOiBtYWxib25hIGJsb2tvIHBvciBibG9rYSBiaXRtYXBvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzYKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgYml0bWFwIgorbXNnc3RyICJEaWZla3RhIGdydXBwcmlhxLVvOiBtYWxib25hIGJsb2tvIHBvciBpLW5vZGEgYml0bWFwbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM3Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIHRhYmxlIgorbXNnc3RyICJEaWZla3RhIGdydXBwcmlhxLVvOiBtYWxib25hIGJsb2tvIHBvciBpLW5vZGEgdGFiZWxvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzgKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIk1hbHN1a2Nlc2lzIHNrcmliaSBpLW5vZGFuIGJpdG1hcG9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiTWFsc3VrY2VzaXMgbGVnaSBpLW5vZGFuIGJpdG1hcG9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDAKK21zZ2lkICJDYW4ndCB3cml0ZSBhIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiTWFsc3VrY2VzaXMgc2tyaWJpIGJsb2thbiBiaXRtYXBvbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQxCittc2dpZCAiQ2FuJ3QgcmVhZCBhIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiTWFsc3VrY2VzaXMgbGVnaSBibG9rYW4gYml0bWFwb24iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MgorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJNYWxzdWtjZXNpcyBza3JpYmkgaS1ub2RhbiB0YWJlbG9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDMKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJNYWxzdWtjZXNpcyBsZWdpIGktbm9kYW4gdGFiZWxvbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ0Cittc2dpZCAiQ2FuJ3QgcmVhZCBuZXh0IGlub2RlIgorbXNnc3RyICJNYWxzdWtjZXNpcyBsZWdpIHNla3ZhbiBpLW5vZG9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDUKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bmV4cGVjdGVkIGJsb2NrIHNpemUiCittc2dzdHIgIkRvc2llcnNpc3RlbW8gaGF2YXMgbmVhdGVuZGl0YW4gYmxva2dyYW5kb24iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NgorbXNnaWQgIkVYVDIgZGlyZWN0b3J5IGNvcnJ1cHRlZCIKK21zZ3N0ciAiRVhUMi1kb3NpZXJ1am8gZXN0YXMgZGlmZWt0YSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ3Cittc2dpZCAiQXR0ZW1wdCB0byByZWFkIGJsb2NrIGZyb20gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCByZWFkIgorbXNnc3RyICJQcm92byBkZSBsZWdpIGJsb2tvbiBlbCBkb3NpZXJzaXN0ZW1vIHJlenVsdGlzIGVuIG1hbGxvbmdhIGxlZ28iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgYmxvY2sgdG8gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCB3cml0ZSIKK21zZ3N0ciAiUHJvdm8gZGUgc2tyaWJpIGJsb2tvbiBhbCBkb3NpZXJzaXN0ZW1vIHJlenVsdGlzIGVuIG1hbGxvbmdhIHNrcmlibyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ5Cittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiB0aGUgZGlyZWN0b3J5IgorbXNnc3RyICJEb3NpZXJ1am8gbmUgaGF2YXMgbGliZXJhbiBzcGFjb24iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MAorbXNnaWQgIklub2RlIGJpdG1hcCBub3QgbG9hZGVkIgorbXNnc3RyICJJLW5vZGEgYml0bWFwbyBuZSBlc3RhcyDFnWFyZ2F0YSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUxCittc2dpZCAiQmxvY2sgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgIkJsb2thIGJpdG1hcG8gbmUgZXN0YXMgxZ1hcmdhdGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MgorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIgorbXNnc3RyICJOZXZhbGlkYSBpLW5vZGEgbnVtZXJvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTMKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiTmV2YWxpZGEgYmxva2EgbnVtZXJvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTQKK21zZ2lkICJJbnRlcm5hbCBlcnJvciBpbiBleHQyZnNfZXhwYW5kX2RpciIKK21zZ3N0ciAiKippbnRlcm5hIHByb2dyYW1taXNvKiogZW4gJ2V4dDJmc19leHBhbmRfZGlyKCknIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTUKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGJ1aWxkIHByb3Bvc2VkIGZpbGVzeXN0ZW0iCittc2dzdHIgIk1hbHN1ZmnEiWFzIHNwYWNvIHBvciBrb25zdHJ1aSBwcm9wb25hdGEgZG9zaWVyc2lzdGVtbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU2Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiTmV2YWxpZGEgYmxva251bWVybyBkb25pxJ1pcyBhbCAnZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwKCknIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTcKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIk5ldmFsaWRhIGJsb2tudW1lcm8gZG9uacSdaXMgYWwgJ2V4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwKCknIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTgKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIgorbXNnc3RyICJOZXZhbGlkYSBibG9rbnVtZXJvIGRvbmnEnWlzIGFsICdleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAoKSciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIk5ldmFsaWRhIGktbm9kbnVtZXJvIGRvbmnEnWlzIGFsICdleHQyZnNfbWFya19pbm9kZV9iaXRtYXAoKSciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MAorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiTmV2YWxpZGEgaS1ub2RudW1lcm8gZG9uacSdaXMgYWwgJ2V4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwKCknIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjEKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIgorbXNnc3RyICJOZXZhbGlkYSBpLW5vZG51bWVybyBkb25pxJ1pcyBhbCAnZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwKCknIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjIKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBibG9jayBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIlByb3ZvIGRlIHNtdXJmaSBsYSBmaW5vbiBkZSBibG9rYSBiaXRtYXBvIHRyYW5zIGxhIHZlcmEgZmlubyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYzCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgaW5vZGUgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICJQcm92byBkZSBzbXVyZmkgbGEgZmlub24gZGUgaS1ub2RhIGJpdG1hcG8gdHJhbnMgbGEgdmVyYSBmaW5vIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjQKK21zZ2lkICJJbGxlZ2FsIGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICJUcm92acSdaXMgbmV2YWxpZGEgbmVyZWt0YSBibG9rbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY1Cittc2dpZCAiSWxsZWdhbCBkb3VibHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIlRyb3ZpxJ1pcyBuZXZhbGlkYSBkdW9ibGUgbmVyZWt0YSBibG9rbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY2Cittc2dpZCAiSWxsZWdhbCB0cmlwbHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIlRyb3ZpxJ1pcyBuZXZhbGlkYSB0cmlvYmxlIG5lcmVrdGEgYmxva28iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NworbXNnaWQgIkJsb2NrIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiQmxva2FqIGJpdG1hcG9qIG5lIHNhbWFzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjgKK21zZ2lkICJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIkktbm9kYWogYml0bWFwb2ogbmUgc2FtYXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OQorbXNnaWQgIklsbGVnYWwgb3IgbWFsZm9ybWVkIGRldmljZSBuYW1lIgorbXNnc3RyICJOZXZhbGlkYSBhxa0gbWlzZm9ybWl0YSBhcGFyYXRub21vIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzAKK21zZ2lkICJBIGJsb2NrIGdyb3VwIGlzIG1pc3NpbmcgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIk1hbmthcyBpLW5vZGEgdGFiZWxvIGVuIGl1IGJsb2thIGdydXBvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzEKK21zZ2lkICJUaGUgZXh0MiBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQiCittc2dzdHIgIkxhIEV4dDItxIllZmJsb2tvIGVzdGFzIGRpZmVrdGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MgorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiTmV2YWxpZGEga29tdW5hIGJpdG51bWVybyBkb25pxJ1pcyBhbCAnZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAoKSciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MworbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICJOZXZhbGlkYSBrb211bmEgYml0bnVtZXJvIGRvbmnEnWlzIGFsICdleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwKCknIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzQKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIk5ldmFsaWRhIGtvbXVuYSBiaXRudW1lcm8gZG9uacSdaXMgYWwgJ2V4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwKCknIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzUKK21zZ2lkICJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIlRyb3ZpxJ1pcyB0cm8gbXVsdGFqIGRhIHNpbWJvbGFqIGxpZ29qLiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc2Cittc2dpZCAiVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB0aGlzIGNhc2UiCittc2dzdHIgIkxhIHJlZmVyZW5jdm9rYSBmdW5rY2lvIG5lIGthcGFibGFzIHRyYWt0aSDEiWkgdGl1biBrYXpvbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc3Cittc2dpZCAiVGhlIGlub2RlIGlzIGZyb20gYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJMYSBpLW5vZG8gZXN0YXMgZWwgbWFsYm9uYSBibG9rbyBlbiBsYSBpLW5vZGEgdGFiZWxvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzgKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpIgorbXNnc3RyICJEb3NpZXJzaXN0ZW1vIGhhdmFzIG5lc3VidGVuYXRhKGopbiBrYXBhYmxvKGopbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc5Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgcmVhZC1vbmx5IGZlYXR1cmUocykiCittc2dzdHIgIkRvc2llcnNpc3RlbW8gaGF2YXMgbmVzdWJ0ZW5hdGEoailuIG51cmxlZ2EoailuIGthcGFibG8oailuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODAKK21zZ2lkICJJTyBDaGFubmVsIGZhaWxlZCB0byBzZWVrIG9uIHJlYWQgb3Igd3JpdGUiCittc2dzdHIgIkVuLWVsaWdhIGthbmFsbyBtYWxzdWtjZXNpcyBmYXJpICdzZWVrJyBqZSBsZWdhZG8gYcWtIHNrcmliYWRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODEKK21zZ2lkICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIk1hbmthcyBzdWZpxIlhIG1lbW9ybyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gZXh0MiBsaWJyYXJ5IgorbXNnc3RyICJOZXZhbGlkYSBhcmd1bWVudG8gZG9uacSdaXMgYWwgRXh0Mi1iaWJsaW90ZWtvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODMKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgYmxvY2sgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJNYWxzdWtjZXNpcyBhc2lnbmkgYmxva29uIGVuIEV4dDItZG9zaWVyc2lzdGVtbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg0Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGlub2RlIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiTWFsc3VrY2VzaXMgYXNpZ25pIGktbm9kb24gZW4gRXh0Mi1kb3NpZXJzaXN0ZW1vIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODUKK21zZ2lkICJFeHQyIGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiRXh0Mi1pLW5vZG8gbmUgZXN0YXMgZG9zaWVydWpvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODYKK21zZ2lkICJUb28gbWFueSByZWZlcmVuY2VzIGluIHRhYmxlIgorbXNnc3RyICJUcm8gbXVsdGFqIHJlZmVyZW5jb2ogZW4gdGFiZWxvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODcKK21zZ2lkICJGaWxlIG5vdCBmb3VuZCBieSBleHQyX2xvb2t1cCIKK21zZ3N0ciAiRG9zaWVybyBuZSB0cm92acSdaXMgcGVyICdleHQyX2xvb2t1cCgpJyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg4Cittc2dpZCAiRmlsZSBvcGVuIHJlYWQtb25seSIKK21zZ3N0ciAiRG9zaWVybyBlc3RhcyBtYWxmZXJtYSBudXJsZWdlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODkKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCittc2dzdHIgIkV4dDItZG9zaWVydWphIGJsb2tvIG5lIHRyb3ZpxJ1pcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkwCittc2dpZCAiRXh0MiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkV4dDItZG9zaWVydWpvIGphbSBla3ppc3RhcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkxCittc2dpZCAiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iCittc2dzdHIgIk5lcmVhbGlnaXRhIGZ1bmtjaW8gZW4gRXh0Mi1iaWJsaW90ZWtvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTIKK21zZ2lkICJVc2VyIGNhbmNlbCByZXF1ZXN0ZWQiCittc2dzdHIgIk51bGlnbyBwZXRpxJ1pcyBkZSB1emFudG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MworbXNnaWQgIkV4dDIgZmlsZSB0b28gYmlnIgorbXNnc3RyICJFeHQyLWRvc2llcm8gdHJvIGdyYW5kYXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NAorbXNnaWQgIlN1cHBsaWVkIGpvdXJuYWwgZGV2aWNlIG5vdCBhIGJsb2NrIGRldmljZSIKK21zZ3N0ciAiSW5kaWthdGEga2HFnXByb3Rva29sYSBhcGFyYXRvIG5lIGVzdGFzIGJsb2thcGFyYXRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTUKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIgorbXNnc3RyICJLYcWdcHJvdG9rb2xhIMSJZWZibG9rbyBuZSB0cm92acSdaXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NgorbXNnaWQgIkpvdXJuYWwgbXVzdCBiZSBhdCBsZWFzdCAxMDI0IGJsb2NrcyIKK21zZ3N0ciAiS2HFnXByb3Rva29sbyBkZXZhcyBlc3RpIG1pbmltdW1lIDEwMjQgYmxva29qIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTcKK21zZ2lkICJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iCittc2dzdHIgIk5lc3VidGVuYXRhIGthxZ1wcm90b2tvbGEgdmVyc2lvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTgKK21zZ2lkICJFcnJvciBsb2FkaW5nIGV4dGVybmFsIGpvdXJuYWwiCittc2dzdHIgIkVyYXJvIGR1bSDFnWFyZ28gZGUgZWtzdGVyYSBrYcWdcHJvdG9rb2xvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTkKK21zZ2lkICJKb3VybmFsIG5vdCBmb3VuZCIKK21zZ3N0ciAiS2HFnXByb3Rva29sbyBuZSB0cm92acSdaXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDAKK21zZ2lkICJEaXJlY3RvcnkgaGFzaCB1bnN1cHBvcnRlZCIKK21zZ3N0ciAiVWphIGhha2V0byBuZSBzdWJ0ZW5hdGFzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAxCittc2dpZCAiSWxsZWdhbCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJOZXZhbGlkYSBudW1lcm8gZGUgYmxva28gZGUgZXRlbmRpdGFqIGF0cmlidXRvaiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMgorbXNnaWQgIkNhbm5vdCBjcmVhdGUgZmlsZXN5c3RlbSB3aXRoIHJlcXVlc3RlZCBudW1iZXIgb2YgaW5vZGVzIgorbXNnc3RyICJOZSBlYmxhcyBrcmVpIGRvc2llcnNpc3RlbW9uIGt1biBsYSBwZXRhdGEgbm9tYnJvIGRlIGktbm9kb2oiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDMKK21zZ2lkICJFMmltYWdlIHNuYXBzaG90IG5vdCBpbiB1c2UiCittc2dzdHIgIlNuYXDFnW90byBkZSAnZTJpbWFnZScgbmUgdXppxJ1hcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNAorbXNnaWQgIlRvbyBtYW55IHJlc2VydmVkIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzIgorbXNnc3RyICJUcm8gbXVsdGUgZGEgcmV6ZXJ2aXRhaiBncnVwcHJpYcS1YWogYmxva29qIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA1Cittc2dpZCAiUmVzaXplIGlub2RlIGlzIGNvcnJ1cHQiCittc2dzdHIgIlJlZ3JhbmRpZ2EgaS1ub2RvIGVzdGFzIGRpZmVrdGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDYKK21zZ2lkICJUcmllZCB0byBzZXQgYmxvY2sgYm1hcCB3aXRoIG1pc3NpbmcgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIlByb3ZvIGRlIGFnb3JkaSBibG9rYW4gYml0bWFwb24ga3VuIG1hbmthbnRhIG5lcmVrdGEgYmxva28iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDcKK21zZ2lkICJUREI6IFN1Y2Nlc3MiCittc2dzdHIgIlREQjogU3VrY2VzbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOAorbXNnaWQgIlREQjogQ29ycnVwdCBkYXRhYmFzZSIKK21zZ3N0ciAiVERCOiBEaWZla3RhIGRhdHVtYmF6byIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOQorbXNnaWQgIlREQjogSU8gRXJyb3IiCittc2dzdHIgIlREQjogRW4tZWxpZ2EgZXJhcm8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTAKK21zZ2lkICJUREI6IExvY2tpbmcgZXJyb3IiCittc2dzdHIgIlREQjogUmlnbGEgZXJhcm8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTEKK21zZ2lkICJUREI6IE91dCBvZiBtZW1vcnkiCittc2dzdHIgIlREQjogTWFua2FzIHN1ZmnEiWEgbWVtb3JvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEyCittc2dpZCAiVERCOiBSZWNvcmQgZXhpc3RzIgorbXNnc3RyICJUREI6IFJpa29yZG8gZWt6aXN0YXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTMKK21zZ2lkICJUREI6IExvY2sgZXhpc3RzIG9uIG90aGVyIGtleXMiCittc2dzdHIgIlREQjogUmlnbG8gZWt6aXN0YXMgamUgYWxpYWogxZ1sb3NpbG9qIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE0Cittc2dpZCAiVERCOiBJbnZhbGlkIHBhcmFtZXRlciIKK21zZ3N0ciAiVERCOiBOZXZhbGlkYSBwYXJhbWV0cm8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTUKK21zZ2lkICJUREI6IFJlY29yZCBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiVERCOiBSaWtvcmRvIG5lIGVremlzdGFzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE2Cittc2dpZCAiVERCOiBXcml0ZSBub3QgcGVybWl0dGVkIgorbXNnc3RyICJUREI6IFNrcmlibyBuZSBwZXJtZXNhdGFzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE3Cittc2dpZCAiRXh0MmZzIGRpcmVjdG9yeSBibG9jayBsaXN0IGlzIGVtcHR5IgorbXNnc3RyICJFeHQyLWRvc2llcnVqYSBibG9rYSBsaXN0byB2YWthcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOAorbXNnaWQgIkF0dGVtcHQgdG8gbW9kaWZ5IGEgYmxvY2sgbWFwcGluZyB2aWEgYSByZWFkLW9ubHkgYmxvY2sgaXRlcmF0b3IiCittc2dzdHIgIlByb3ZvIGRlIMWdYW7EnWkgYmxva2FzaWdub24gcGVyIG51cmxlZ2EgYmxva2l0ZXJpbG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IHNhdmVkIHBhdGgiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaW51bWVybyBwb3IgJ2V4dDQgZXh0ZW50IHNhdmVkIHBhdGgnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgZ2VuZXJpYyBiaXRtYXAiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaW51bWVybyBwb3IgNjQtYml0YSBrb211bmEgYml0bWFwbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiTWFsxJ11c3RhcyBtYWdpbnVtZXJvIHBvciA2NC1iaXRhIGJsb2thIGJpdG1hcG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBpbm9kZSBiaXRtYXAiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaW51bWVybyBwb3IgNjQtYml0YSBpLW5vZGEgYml0bWFwbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTMiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaW51bWVybyAtLSBSRVNFUlZFRF8xMyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTQiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaW51bWVybyAtLSBSRVNFUlZFRF8xNCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTUiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaW51bWVybyAtLSBSRVNFUlZFRF8xNSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTYiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaW51bWVybyAtLSBSRVNFUlZFRF8xNiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTciCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaW51bWVybyAtLSBSRVNFUlZFRF8xNyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTgiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaW51bWVybyAtLSBSRVNFUlZFRF8xOCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTkiCittc2dzdHIgIk1hbMSddXN0YXMgbWFnaW51bWVybyAtLSBSRVNFUlZFRF8xOSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMAorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGhlYWRlciIKK21zZ3N0ciAiRGlmZWt0YSBhbXBsZWtzYSDEiWFwbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMQorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGluZGV4IgorbXNnc3RyICJEaWZla3RhIGFtcGxla3NhIGluZGVrc28iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzIKK21zZ2lkICJDb3JydXB0IGV4dGVudCIKK21zZ3N0ciAiRGlmZWt0YSBhbXBsZWtzbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMworbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gZXh0ZW50IG1hcCIKK21zZ3N0ciAiQW1wbGVrc21hcG8gbmUgaGF2YXMgbGliZXJhbiBzcGFjb24iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzQKK21zZ2lkICJJbm9kZSBkb2VzIG5vdCB1c2UgZXh0ZW50cyIKK21zZ3N0ciAiSS1ub2RvIG5lIHV6YXMgYW1wbGVrc29qbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNQorbXNnaWQgIk5vICduZXh0JyBleHRlbnQiCittc2dzdHIgIk1hbGVzdGFzICduZXh0Jy1hbXBsZWtzbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNgorbXNnaWQgIk5vICdwcmV2aW91cycgZXh0ZW50IgorbXNnc3RyICJNYWxlc3RhcyAncHJldmlvdXMnLWFtcGxla3NvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM3Cittc2dpZCAiTm8gJ3VwJyBleHRlbnQiCittc2dzdHIgIk1hbGVzdGFzICd1cCctYW1wbGVrc28iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzgKK21zZ2lkICJObyAnZG93bicgZXh0ZW50IgorbXNnc3RyICJNYWxlc3RhcyAnZG93bictYW1wbGVrc28iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzkKK21zZ2lkICJObyBjdXJyZW50IG5vZGUiCittc2dzdHIgIk5lbml1IGFrdHVhbGEgbm9kbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MAorbXNnaWQgIkV4dDJmcyBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAidGl1IEV4dDJmcy1vcGVyYWNpbyBuZSBzdWJ0ZW5hdGFzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQxCittc2dpZCAiTm8gcm9vbSB0byBpbnNlcnQgZXh0ZW50IGluIG5vZGUiCittc2dzdHIgIk1hbmthcyBzcGFjbyBwb3IgZW5tZXRpIGFtcGxla3NvbiBlbiBub2RvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQyCittc2dpZCAiU3BsaXR0aW5nIHdvdWxkIHJlc3VsdCBpbiBlbXB0eSBub2RlIgorbXNnc3RyICJGZW5kbyByZXp1bHR1cyBlbiB2YWthIG5vZG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDMKK21zZ2lkICJFeHRlbnQgbm90IGZvdW5kIgorbXNnc3RyICJBbXBsZWtzbyBuZSB0cm92acSdaXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDQKK21zZ2lkICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgaW5vZGVzIGNvbnRhaW5pbmcgZXh0ZW50cyIKK21zZ3N0ciAiT3BlcmFjaW8gbmUgc3VidGVuYXRhcyBwb3IgaS1ub2RvaiBraXVqIGVuaGF2YXMgYW1wbGVrc29qbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiQW1wbGVrc2EgbG9uZ28gbWFsdmFsaWRhcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NgorbXNnaWQgIkkvTyBDaGFubmVsIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IGJsb2NrIG51bWJlcnMiCittc2dzdHIgIkVuLWVsaWdhIGthbmFsbyBuZSBzdWJ0ZW5hcyA2NC1iaXRham4gYmxva251bWVyb2puIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiIgorIk5lIGVibGFzIGtvbnRyb2xpIHNlIGRvc2llcnNpc3RlbW8gZXN0YXMgbXVudGl0YSwgxIlhciBtYW5rYXMgZG9zaWVybyAnbXRhYiciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDgKK21zZ2lkICJGaWxlc3lzdGVtIHRvbyBsYXJnZSB0byB1c2UgbGVnYWN5IGJpdG1hcHMiCittc2dzdHIgIkRvc2llcnNpc3RlbW8gdHJvIGdyYW5kYXMgcG9yIHV6aSBhcmthaWtham4gYml0bWFwb2puIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ5Cittc2dpZCAiTU1QOiBpbnZhbGlkIG1hZ2ljIG51bWJlciIKK21zZ3N0ciAiTU1QOiBuZXZhbGlkYSBtYWdpYSBudW1lcm8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTAKK21zZ2lkICJNTVA6IGRldmljZSBjdXJyZW50bHkgYWN0aXZlIgorbXNnc3RyICJNTVA6IGFwYXJhdG8gbnVuZSBha3RpdmFzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUxCittc2dpZCAiTU1QOiBmc2NrIGJlaW5nIHJ1biIKK21zZ3N0ciAiTU1QOiAnZnNjaycgcnVsYXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTIKK21zZ2lkICJNTVA6IGJsb2NrIG51bWJlciBiZXlvbmQgZmlsZXN5c3RlbSByYW5nZSIKK21zZ3N0ciAiTU1QOiBibG9rbnVtZXJvIHRyYW5zcGFzYXMgZG9zaWVyc2lzdGVtYW4gZ2Ftb24iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTMKK21zZ2lkICJNTVA6IHVuZGVyZ29pbmcgYW4gdW5rbm93biBvcGVyYXRpb24iCittc2dzdHIgIk1NUDogc3BlcnRhcyBuZWtvbmF0YW4gb3BlcmFjaW9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU0Cittc2dpZCAiTU1QOiBmaWxlc3lzdGVtIHN0aWxsIGluIHVzZSIKK21zZ3N0ciAiTU1QOiBkb3NpZXJzaXN0ZW1vIGFua29yYcWtIHV6acSdYXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTUKK21zZ2lkICJNTVA6IG9wZW4gd2l0aCBPX0RJUkVDVCBmYWlsZWQiCittc2dzdHIgIk1NUDogbWFsc3VrY2VzaXMgbWFsZmVybW8ga3VuICdPX0RJUkVDVCciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTYKK21zZ2lkICJCbG9jayBncm91cCBkZXNjcmlwdG9yIHNpemUgaW5jb3JyZWN0IgorbXNnc3RyICJNYWzEnXVzdGFzIGdyYW5kbyBkZSBibG9rZ3J1cHByaWHEtW8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTcKK21zZ2lkICJJbm9kZSBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBpbm9kZSIKK21zZ3N0ciAiS29udHJvbHN1bW8gZGUgaS1ub2RvIG5lIGtvbmtvcmRhcyBrdW4gaS1ub2RvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU4Cittc2dpZCAiSW5vZGUgYml0bWFwIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGJpdG1hcCIKK21zZ3N0ciAiS29udHJvbHN1bW8gZGUgaS1ub2RhIGJpdG1hcG8gbmUga29ua29yZGFzIGt1biBiaXRtYXBvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU5Cittc2dpZCAiRXh0ZW50IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGV4dGVudCBibG9jayIKK21zZ3N0ciAiS29udHJvbHN1bW8gZGUgJ2V4dGVudCctYmxva28gbmUga29ua29yZGFzIGt1biBibG9rbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MAorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBkb2VzIG5vdCBoYXZlIHNwYWNlIGZvciBjaGVja3N1bSIKK21zZ3N0ciAiRG9zaWVydWphIGJsb2tvIG5lIGhhdmFzIHNwYWNvbiBwb3Iga29udHJvbHN1bW8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjEKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICJLb250cm9sc3VtbyBkZSBkb3NpZXJ1amEgYmxva28gbmUga29ua29yZGFzIGt1biBkb3NpZXJ1amEgYmxva28iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjIKK21zZ2lkICJFeHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYmxvY2siCittc2dzdHIgIktvbnRyb2xzdW1vIGRlIGJsb2tvIGRlIGV0ZW5kaXRhaiBhdHJpYnV0b2ogbmUga29ua29yZGFzIGt1biBibG9rbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MworbXNnaWQgIlN1cGVyYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggc3VwZXJibG9jayIKK21zZ3N0ciAiS29udHJvbHN1bW8gZGUgxIllZmJsb2tvIG5lIGtvbmtvcmRhcyBrdW4gxIllZmJsb2tvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY0Cittc2dpZCAiVW5rbm93biBjaGVja3N1bSBhbGdvcml0aG0iCittc2dzdHIgIk5la29uYXRhIGtvbnRyb2xzdW1hIGFsZ29yaXRtbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NQorbXNnaWQgIk1NUCBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBNTVAgYmxvY2siCittc2dzdHIgIktvbnRyb2xzdW1vIGRlIE1NUC1ibG9rbyBuZSBrb25rb3JkYXMga3VuIE1NUC1ibG9rbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NgorbXNnaWQgIkV4dDIgZmlsZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRXh0Mi1kb3NpZXJvIGphbSBla3ppc3RhcyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTEKK21zZ2lkICJQcm9maWxlIHZlcnNpb24gMC4wIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEyCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfbm9kZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMworbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTQKK21zZ2lkICJQcm9maWxlIHJlbGF0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNQorbXNnaWQgIkF0dGVtcHQgdG8gYWRkIGEgcmVsYXRpb24gdG8gbm9kZSB3aGljaCBpcyBub3QgYSBzZWN0aW9uIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE2Cittc2dpZCAiQSBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIGhhcyBhIG5vbi16ZXJvIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE3Cittc2dpZCAiQmFkIGxpbmtlZCBsaXN0IGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOAorbXNnaWQgIkJhZCBncm91cCBsZXZlbCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTkKK21zZ2lkICJCYWQgcGFyZW50IHBvaW50ZXIgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGUgaXRlcmF0b3IiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjEKK21zZ2lkICJDYW4ndCBzZXQgdmFsdWUgb24gc2VjdGlvbiBub2RlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gcHJvZmlsZSBsaWJyYXJ5IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjUKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSBzZWN0aW9uIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNgorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHJlbGF0aW9uIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI3Cittc2dpZCAiRXh0cmEgY2xvc2luZyBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI4Cittc2dpZCAiTWlzc2luZyBvcGVuIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjkKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfc2VjdGlvbl90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMxCittc2dpZCAiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzIKK21zZ2lkICJJbnZhbGlkIHByb2ZpbGVfc2VjdGlvbiBvYmplY3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzMKK21zZ2lkICJObyBtb3JlIHNlY3Rpb25zIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM0Cittc2dpZCAiQmFkIG5hbWVzZXQgcGFzc2VkIHRvIHF1ZXJ5IHJvdXRpbmUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzUKK21zZ2lkICJObyBwcm9maWxlIGZpbGUgb3BlbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX2ZpbGVfdCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNworbXNnaWQgIkNvdWxkbid0IG9wZW4gcHJvZmlsZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM4Cittc2dpZCAiU2VjdGlvbiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOQorbXNnaWQgIkludmFsaWQgYm9vbGVhbiB2YWx1ZSIKK21zZ3N0ciAiTWFsdmFsaWRhIGJ1bGVhIHZhbG9ybyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDAKK21zZ2lkICJJbnZhbGlkIGludGVnZXIgdmFsdWUiCittc2dzdHIgIk1hbHZhbGlkYSBlbnRqZXJhIHZhbG9ybyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDEKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX2RhdGFfdCIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvcG8vZXMuZ21vIGIvcG8vZXMuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNWNjZDIKLS0tIC9kZXYvbnVsbAorKysgYi9wby9lcy5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZXMucG8gYi9wby9lcy5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODNmZDZmCi0tLSAvZGV2L251bGwKKysrIGIvcG8vZXMucG8KQEAgLTAsMCArMSw3NjU3IEBACisjIE1lbnNhamVzIGVuIGVzcGHDsW9sIHBhcmEgZTJmc3Byb2dzLgorIyBUT0RPIHBvciBvIHBhcmEKKyMgQ29weXJpZ2h0IChDKSAyMDE0IFRoZW9kb3JlIFRzbyAobXNnaWRzKQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZTJmc3Byb2dzIHBhY2thZ2UuCisjCisjIE1heCBkZSBNZW5kaXrDoWJhbCA8bWF4QHVwbi5teD4sIDIwMDMsIDIwMDUuCisjIEJlbm5vIFNjaHVsZW5iZXJnIDxiZW5ub0B2ZXJ0YWFsdC5ubD4sIDIwMDgsIDIwMTQuCisjIEFudG9uaW8gQ2ViYWxsb3MgPGFjZWJhbGxvc0BnbWFpbC5jb20+LCAyMDE0LCAyMDE1LgorIworIyBDb21pZW56byBkZSB1biB2b2NhYnVsYXJpbyAobGlzdGEgZGUgcGFsYWJyYXMgdXNhZGFzIGFxdcOtKToKKyMgYmxvY2sgLS0+IGJsb3F1ZQorIyBiYWQgYmxvY2sgLS0+IGJsb3F1ZSBkYcOxYWRvCisjIGlub2RlIC0tPiBub2RvLWkKKyMgYml0bWFwIC0tPiBtYXBhIGRlIGJpdHMKKyMgaWdub3JlIC0tPiBkZXNjYXJ0YXIKKyMgZXh0ZW50IC0tPiDCq2V4dGVudMK7IFRCQworIyBqb3VybmFsIC0+IGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcworIyBzb2NrZXQgLT4gwqtzb2NrZXTCuyBUQkMKKyMgcmVndWxhciBmaWxlIC0+IGZpY2hlcm8gb3JkbmFyaW8sIG5vcm1hbCBUQkMKKyMgY2hlY2tzdW0gLT4gwqtjaGVja3N1bcK7LCBzdW1hIGRlIHZlcmlmaWNhY2nDs24gVEJDCisjIGxvc3QrZm91bmQgLT4gbG9zdCtmb3VuZAorIyBsb29wIC0+IGJ1Y2xlCisjIGNsdXN0ZXIgLT4gVEJECisjIHByb2ZpbGUgLT4gwqtwcm9maWxlwrsgVEJDCisjIHByb2ZpbGUgZmlsZSAtPiBmaWNoZXJvIMKrcHJvZmlsZcK7IFRCQworIyAuLi4KKyMKKyMuIFRoZSBzdHJpbmdzIGluIGUyZnNjaydzIHByb2JsZW0uYyBjYW4gYmUgdmVyeSBoYXJkIHRvIHRyYW5zbGF0ZSwKKyMuIHNpbmNlIHRoZSBzdHJpbmdzIGFyZSBleHBhbmRlZCBpbiB0d28gZGlmZmVyZW50IHdheXMuICBGaXJzdCBvZiBhbGwsCisjLiB0aGVyZSBpcyBhbiBALWV4cGFuc2lvbiwgd2hlcmUgc3RyaW5ncyBsaWtlICJAaSIgYXJlIGV4cGFuZGVkIHRvCisjLiAiaW5vZGUiLCBhbmQgc28gb24uICBJbiBvcmRlciB0byBtYWtlIGl0IGVhc2llciBmb3IgdHJhbnNsYXRvcnMsIHRoZQorIy4gZTJmc3Byb2dzIHBvIHRlbXBsYXRlIGZpbGUgaGFzIGJlZW4gZW5oYW5jZWQgd2l0aCBjb21tZW50cyB0aGF0IHNob3cKKyMuIHRoZSBALWV4cGFuc2lvbiwgZm9yIHRoZSBzdHJpbmdzIGluIHRoZSBwcm9ibGVtLmMgZmlsZS4KKyMuCisjLiBUcmFuc2xhdG9ycyBhcmUgZnJlZSB0byB1c2UgdGhlIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGlmIHRoZXkgc28KKyMuIGNob29zZSwgYnkgcHJvdmlkaW5nIHRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBpbiBlMmZzY2svbWVzc2FnZS5jLgorIy4gVGhlc2UgdHJhbnNsYXRpb24gY2FuIGNvbXBsZXRlbHkgcmVwbGFjZSBhbiBleHBhbnNpb247IGZvciBleGFtcGxlLAorIy4gaWYgImJibG9jayIgKHdoaWNoIGluZGljYXRlZCB0aGF0ICJAYiIgd291bGQgYmUgZXhwYW5kZWQgdG8gImJsb2NrIikKKyMuIGlzIHRyYW5zbGF0ZWQgYXMgImRkYXRlbnZlcmx1c3QiLCB0aGVuICJAZCIgd2lsbCBiZSBleHBhbmRlZCB0bworIy4gImRhdGVudmVybHVzdCIuICBBbHRlcm5hdGl2ZWx5LCB0cmFuc2xhdG9ycyBjYW4gc2ltcGx5IG5vdCB1c2UgdGhlCisjLiBALWV4cGFuc2lvbiBmYWNpbGl0eSBhdCBhbGwuCisjLgorIy4gVGhlIHNlY29uZCBleHBhbnNpb24gd2hpY2ggaXMgZG9uZSBmb3IgZTJmc2NrJ3MgcHJvYmxlbS5jIG1lc3NhZ2VzIGlzCisjLiBhIGR5bmFtaWMgJS1leHBhbnNpb24sIHdoaWNoIGV4cGFuZHMgJWkgYXMgYW4gaW5vZGUgbnVtYmVyLCBhbmQgc28KKyMuIG9uLiAgQSB0YWJsZSBvZiB0aGVzZSBleHBhbnNpb25zIGNhbiBiZSBmb3VuZCBiZWxvdy4gIE5vdGUgdGhhdAorIy4gJS1leHByZXNzaW9ucyB0aGF0IGJlZ2luIHdpdGggIiVEIiBhbmQgIiVJIiBhcmUgdHdvLWNoYXJhY3RlcgorIy4gZXhwYW5zaW9uczsgc28gZm9yIGV4YW1wbGUsICIlSXUiIGV4cGFuZHMgdG8gdGhlIGlub2RlJ3MgdXNlciBpZAorIy4gb3duZXJzaGlwIGZpZWxkIChpbm9kZS0+aV91aWQpLiAgQWxzbyB0aGUgIiVCIiBleHBhbnNpb24gaXMgc3BlY2lhbDoKKyMuIGl0IGNhbiBleHBhbmQgdG8gZWl0aGVyIHRoZSBzdHJpbmcgImluZGlyZWN0IGJsb2NrIiAocG9zc2libHkgcHJlY2VkZWQKKyMuIGJ5IHRoZSB3b3JkICJkb3VibGUiIG9yICJ0cmlwbGUiKSwgb3IgdGhlIHN0cmluZyAiYmxvY2sgIyIgaW1tZWRpYXRlbHkKKyMuIGZvbGxvd2VkIGJ5IGFuIGludGVnZXIgaW5kaWNhdGluZyBhIGJsb2NrIHNlcXVlbmNlIG51bWJlci4KKyMuICAKKyMuIAklYgk8YmxrPgkJCWJsb2NrIG51bWJlcgorIy4gCSVCCSJpbmRpcmVjdCBibG9jayIgfCAiYmxvY2sgIyI8YmxrY291bnQ+CXN0cmluZyB8IHN0cmluZytpbnRlZ2VyCisjLiAJJWMJPGJsazI+CQkJYmxvY2sgbnVtYmVyCisjLiAJJURpCTxkaXJlbnQ+IC0+IGlubwkJaW5vZGUgbnVtYmVyCisjLiAJJURuCTxkaXJlbnQ+IC0+IG5hbWUJc3RyaW5nCisjLiAJJURyCTxkaXJlbnQ+IC0+IHJlY19sZW4KKyMuIAklRGwJPGRpcmVudD4gLT4gbmFtZV9sZW4KKyMuIAklRHQJPGRpcmVudD4gLT4gZmlsZXR5cGUKKyMuIAklZAk8ZGlyPiAJCQlpbm9kZSBudW1iZXIKKyMuIAklZwk8Z3JvdXA+CQkJaW50ZWdlcgorIy4gCSVpCTxpbm8+CQkJaW5vZGUgbnVtYmVyCisjLiAJJUlzCTxpbm9kZT4gLT4gaV9zaXplCisjLiAJJUlTCTxpbm9kZT4gLT4gaV9leHRyYV9pc2l6ZQorIy4gCSVJYgk8aW5vZGU+IC0+IGlfYmxvY2tzCisjLiAJJUlsCTxpbm9kZT4gLT4gaV9saW5rc19jb3VudAorIy4gCSVJbQk8aW5vZGU+IC0+IGlfbW9kZQorIy4gCSVJTQk8aW5vZGU+IC0+IGlfbXRpbWUKKyMuIAklSUYJPGlub2RlPiAtPiBpX2ZhZGRyCisjLiAJJUlmCTxpbm9kZT4gLT4gaV9maWxlX2FjbAorIy4gCSVJZAk8aW5vZGU+IC0+IGlfZGlyX2FjbAorIy4gCSVJdQk8aW5vZGU+IC0+IGlfdWlkCisjLiAJJUlnCTxpbm9kZT4gLT4gaV9naWQKKyMuIAklSXQJPHN0cj4JCQlmaWxlIHR5cGUKKyMuIAklagk8aW5vMj4JCQlpbm9kZSBudW1iZXIKKyMuIAklbQk8Y29tX2VyciBlcnJvciBtZXNzYWdlPgorIy4gCSVOCTxudW0+CisjLiAJJXAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+CisjLiAJJVAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgPGRpcmVudD4tPmlubyB3aXRoIDxpbm8yPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4gIChJZiBkaXJlbnQgaXMgTlVMTAorIy4gCQkJCXRoZW4gcmV0dXJuIHRoZSBwYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubzI+KQorIy4gCSVxCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8ZGlyPgorIy4gCSVRCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPiB3aXRoIDxkaXI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LgorIy4gCSVzCTxzdHI+CQkJbWlzY2VsbGFuZW91cyBzdHJpbmcKKyMuIAklUwkJYmFja3VwIHN1cGVyYmxvY2sKKyMuIAklWAk8bnVtPgloZXhhZGVjaW1hbCBmb3JtYXQKKyMuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBlMmZzcHJvZ3MtMS40Mi4xMi1wcmUyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IHR5dHNvQGFsdW0ubWl0LmVkdVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDIxOjI2LTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTAyLTAzIDIzOjI5KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFudG9uaW8gQ2ViYWxsb3MgPGFjZWJhbGxvc0BnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU3BhbmlzaCA8ZXNAdHAub3JnLmVzPlxuIgorIkxhbmd1YWdlOiBlc1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorIlgtR2VuZXJhdG9yOiBMb2thbGl6ZSAxLjBcbiIKKworIyBPam86ICJUbyBpZ25vcmUiIG5vIGVzIGlnbm9yYXIgc2lubyAibm8gdGVuZXIgZW4gY3VlbnRhIiwKKyMgInBhc2FyIHBvciBhbHRvIiwgZXRjLiBZYSBzw6kgcXVlICJpZ25vcmFyIiBzZSBlbnRpZW5kZSwgcGVybyBzw7NsbworIyBwb3JxdWUgc3UgbWFsIHVzbyBlc3TDoSBtdXkgZXh0ZW5kaWRvLiBzdgorIyDCv1F1w6kgdGFsICJzZSBkZXNjYXJ0YSI/IE1lIGd1c3RhcsOtYSBzYWJlciBzaSBoYXkgYWxnw7puIGdsb3NhcmlvIGRlCisjIGZyYXNlcyBwYXJhIHRyYWR1Y2lyIHByb2dyYW1hcyBHTlUsIHNvbiBjb3NhcyBxdWUgZGViZXLDrWFuIHNlcgorIyBlc3TDoW5kYXIuIG1tCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MjMgbWlzYy9ta2UyZnMuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrICV1IG91dCBvZiByYW5nZTsgaWdub3JlZC5cbiIKK21zZ3N0ciAiRWwgYmxvcXVlIGRhw7FhZG8gJXUgZXN0w6EgZnVlcmEgZGVsIGludGVydmFsbzsgc2UgZGVzY2FydGEuXG4iCisKKyMgRW4gZWwgSyZSIHNlIGhhYmxhIGRlIG5vZG8taS4gwr9DdcOhbGVzIHNvbiBsYXMgcmF6b25lcyBhIGZhdm9yIHkgZW4gY29udHJhCisjIGRlICJub2RvIGkiIHNvYnJlICJub2RvLWkiPyBzdgorIyBFbCBwbHVyYWwuIFBlcm8gZXN0w6EgYmllbiwgYWRvcHRvIGxhIGNvbnZlbmNpw7NuIEsmUi4gbW0KKyM6IGUyZnNjay9iYWRibG9ja3MuYzo0NgorbXNnaWQgIndoaWxlIHNhbml0eSBjaGVja2luZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAibWllbnRyYXMgc2UgcmV2aXNhYmEgbGEgc2FsdWQgZGVsIG5vZG8taSBkZSBibG9xdWVzIGRhw7FhZG9zIgorCisjIFlvIHBvbmRyw61hIG1lam9yICJlbCBub2RvIGkgZGUgYmxvcXVlcyBkYcOxYWRvcyIuIE5vIHPDqSBtdWNobyBzb2JyZSBlbAorIyBmb3JtYXRvIGV4dDIsIHBlcm8gY3JlbyBxdWUgZXMgbXV5IHBvc2libGUgcXVlIGhheWEgdW4gbm9kby1pIGVzcGVjaWFsCisjIGN1eWEgdGFyZWEgc2VhIHByZWNpc2FtZW50ZSBsYSBkZSByZWNvcmRhciBjdcOhbGVzIHNvbiBsb3MgYmxvcXVlcworIyBkYcOxYWRvcy4gSW52ZXN0aWdhcmxvIGVuIGNhc28gZGUgZHVkYS4gc3YKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo1OAorbXNnaWQgIndoaWxlIHJlYWRpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgIm1pZW50cmFzIHNlIGxlw61hIGVsIG5vZG8taSBkZSBibG9xdWVzIGRhw7FhZG9zIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NzIgZTJmc2NrL3NjYW50ZXN0LmM6MTA3IGUyZnNjay91bml4LmM6MTM0NQorIzogZTJmc2NrL3VuaXguYzoxNDM0IG1pc2MvYmFkYmxvY2tzLmM6MTI0MiBtaXNjL2JhZGJsb2Nrcy5jOjEyNTAKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI2NCBtaXNjL2JhZGJsb2Nrcy5jOjEyNzYgbWlzYy9kdW1wZTJmcy5jOjYwNAorIzogbWlzYy9lMmltYWdlLmM6MTM5NiBtaXNjL2UyaW1hZ2UuYzoxNTgwIG1pc2MvZTJpbWFnZS5jOjE1OTkKKyM6IG1pc2MvbWtlMmZzLmM6MjI3IG1pc2MvdHVuZTJmcy5jOjE5NTUgbWlzYy90dW5lMmZzLmM6MjA0NCByZXNpemUvbWFpbi5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW50ZW50YWJhIGFicmlyICVzIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHBvcGVuICclcyciCittc2dzdHIgIm1pZW50cmFzIHNlIGludGVudGFiYSBhYnJpciB1bmEgdHViZXLDrWEgYSAnJXMnIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6OTQgbWlzYy9ta2UyZnMuYzoyMzQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGluIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIGZpbGUiCittc2dzdHIgIm1pZW50cmFzIHNlIGxlw61hIHVuYSBsaXN0YSBkZSBibG9xdWVzIGRhw7FhZG9zIGRlc2RlIHVuIGZpY2hlcm8iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMDUKK21zZ2lkICJ3aGlsZSB1cGRhdGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgIm1pZW50cmFzIHNlIGFjdHVhbGl6YWJhIGVsIG5vZG8taSBkZSBibG9xdWVzIGRhw7FhZG9zIgorCisjIFNvbGVtb3MgdHJhZHVjaXIgV2FybmluZyBwb3IgQXRlbmNpw7NuLiBzdgorIyBPaywgdW5pZm9ybWl6by4gbW0KKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogaWxsZWdhbCBibG9jayAldSBmb3VuZCBpbiBiYWQgYmxvY2sgaW5vZGUuICBDbGVhcmVkLlxuIgorbXNnc3RyICIiCisiQXRlbmNpw7NuOiBzZSBlbmNvbnRyw7MgdW4gYmxvcXVlIG5vIHbDoWxpZG8gJXUgZW4gZWwgbm9kby1pIGRlIGJsb3F1ZXMgIgorImRhw7FhZG9zLiBMaW1waWFkby5cbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiRXJyb3IgYWwgbGVlciBlbCBibG9xdWUgJWx1ICglcykgbWllbnRyYXMgJXMuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkVycm9yIGFsIGxlZXIgZWwgYmxvcXVlICVsdSAoJXMpLiAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYxIGUyZnNjay9laGFuZGxlci5jOjExMAorbXNnaWQgIklnbm9yZSBlcnJvciIKK21zZ3N0ciAiRGVzY2FydGFyIGVsIGVycm9yIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MgorbXNnaWQgIkZvcmNlIHJld3JpdGUiCittc2dzdHIgIkZvcnphciBsYSByZWVzY3JpdHVyYSIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIkVycm9yIGFsIGVzY3JpYmlyIGVsIGJsb3F1ZSAlbHUgKCVzKSBtaWVudHJhcyAlcy4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkVycm9yIGFsIGVzY3JpYmlyIGVsIGJsb3F1ZSAlbHUgKCVzKS4gICIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NTcKK21zZ2lkICJlbXB0eSBkaXJibG9ja3MiCittc2dzdHIgImJsb3F1ZXMgZGUgZGlyZWN0b3JpbyB2YWPDrW9zIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo2MgorbXNnaWQgImVtcHR5IGRpciBtYXAiCittc2dzdHIgIm1hcGEgZGUgZGlyZWN0b3Jpb3MgdmFjw61vIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFbXB0eSBkaXJlY3RvcnkgYmxvY2sgJXUgKCMlZCkgaW4gaW5vZGUgJXVcbiIKK21zZ3N0ciAiRWwgYmxvcXVlIGRlbCBkaXJlY3RvcmlvICV1ICgjJWQpIGVzdMOhIHZhY8OtbyBlbiBlbCBub2RvLWkgJXVcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBmaWxlbmFtZSBuYmxvY2tzIGJsb2Nrc2l6ZVxuIgorbXNnc3RyICIlczogJXMgZmljaGVybyBuw7ptZXJvZGVibG9xdWVzIHRhbWHDsW9kZWxibG9xdWVcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIG9mIGJsb2NrcyFcbiIKK21zZ3N0ciAiwqFOw7ptZXJvIGludsOhbGlkbyBkZSBibG9xdWVzIVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIChzaXplPSVkKVxuIgorbXNnc3RyICJObyBzZSBwdWVkZSByZXNlcnZhciB1biBiw7pmZXIgZGUgYmxvcXVlcyAodGFtYcOxbz0lZClcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBkaXNrXG4iCittc2dzdHIgIk1vZG8gZGUgZW1wbGVvOiAlcyBkaXNjb1xuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQkxLRkxTQlVGIGlvY3RsIG5vdCBzdXBwb3J0ZWQhICBDYW4ndCBmbHVzaCBidWZmZXJzLlxuIgorbXNnc3RyICIiCisiwqFObyBlc3TDoSBpbXBsZW1lbnRhZG8gZWwgY29udHJvbCBkZSBlbnRyYWRhL3NhbGlkYSBkZWwgQkxLRkxTQlVGISBObyBzZSAiCisicHVlZGVuIHZhY2lhciBsb3MgYsO6ZmVycy5cbiIKKworIzogZTJmc2NrL2lzY2FuLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIGRldmljZVxuIgorbXNnc3RyICIiCisiTW9kbyBkZSBlbXBsZW86ICVzIFstRl0gWy1JIGJsb3F1ZXNfZGVsX2LDumZlcl9kZWxfbm9kb19pXSBkaXNwb3NpdGl2b1xuIgorCisjOiBlMmZzY2svaXNjYW4uYzo4MSBlMmZzY2svdW5peC5jOjk3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIGZvciBmbHVzaGluZyIKK21zZ3N0ciAibWllbnRyYXMgc2UgYWJyw61hICVzIHBhcmEgc3UgdmFjaWFkbyIKKworIzogZTJmc2NrL2lzY2FuLmM6ODYgZTJmc2NrL3VuaXguYzo5NzggcmVzaXplL21haW4uYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGZsdXNoICVzIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgdmFjaWFyICVzIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW50ZW50YWJhIGFicmlyICclcyciCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTI5MAorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW5pY2lhYmEgbGEgZXhwbG9yYWNpw7NuIGRlIGxvcyBub2Rvcy1pIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMjcgbWlzYy9lMmltYWdlLmM6MTMwOQorbXNnaWQgIndoaWxlIGdldHRpbmcgbmV4dCBpbm9kZSIKK21zZ3N0ciAibWllbnRyYXMgc2Ugb2J0ZW7DrWEgZWwgbm9kby1pIHNpZ3VpZW50ZSIKKworIzogZTJmc2NrL2lzY2FuLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBzY2FubmVkLlxuIgorbXNnc3RyICIldSBub2Rvcy1pIGV4cGxvcmFkb3MuXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTI0Cittc2dpZCAicmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAibGV5ZW5kbyBlbCBzdXBlcmJsb3F1ZSBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzXG4iCisKKyMgT2pvOiBObyBlcyBxdWUgc2UgaGF5YSBlbmNvbnRyYWRvIHVuIHN1cGVyYmxvcXVlIHF1ZSByZXN1bHRhIHF1ZSBubyBlcworIyB2w6FsaWRvLCBzaW5vIHF1ZSBubyBzZSBoYSBlbmNvbnRyYWRvIG5pbmfDum4gc3VwZXJibG9xdWUgcXVlIHNlYSB2w6FsaWRvLAorIyBxdWUgZXMgZGlzdGludG8gKGEgbG8gbWVqb3Igbm8gc2UgaGEgZW5jb250cmFkbyBuaW5nw7puIHN1cGVyYmxvcXVlCisjIGVuIGFic29sdXRvKS4gQ3JlbyBxdWUgbGEgdHJhZHVjY2nDs24gZGViZXLDrWEgY2FtYmlhcnNlLiBzdgorIyBFbiBlZmVjdG8sIHRpZW5lcyB0b2RhIGxhIHJhesOzbi4gQ29ycmVnaWRvLiBtbQorIzogZTJmc2NrL2pvdXJuYWwuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vIHZhbGlkIGpvdXJuYWwgc3VwZXJibG9jayBmb3VuZFxuIgorbXNnc3RyICIiCisiJXM6IG5vIHNlIGhhIGVuY29udHJhZG8gdW4gc3VwZXJibG9xdWUgdsOhbGlkbyBlbiBlbCBmaWNoZXJvIGRlICIKKyJ0cmFuc2FjY2lvbmVzXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBqb3VybmFsIHRvbyBzaG9ydFxuIgorbXNnc3RyICIlczogZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIGVzIGRlbWFzaWFkbyBjb3J0b1xuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcmVjb3ZlcmluZyBqb3VybmFsXG4iCittc2dzdHIgIiVzOiByZWN1cGVyYW5kbyBlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXNcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdvbid0IGRvIGpvdXJuYWwgcmVjb3Zlcnkgd2hpbGUgcmVhZC1vbmx5XG4iCittc2dzdHIgIiIKKyIlczogbm8gc2UgcHVlZGUgaGFjZXIgbGEgcmVjdXBlcmFjacOzbiBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIGVuIG1vZG8gIgorImRlIHPDs2xvIGxlY3R1cmFcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlLW9wZW4gJXMiCittc2dzdHIgIm1pZW50cmFzIHNlIGludGVudGFiYSByZWFicmlyICVzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImFhdHJpYnV0byBleHRlbmRpZG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE0Cittc2dpZCAiQWVycm9yIGFsbG9jYXRpbmciCittc2dzdHIgIkFlcnJvciBlbiBsYSByZXNlcnZhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNQorbXNnaWQgImJibG9jayIKK21zZ3N0ciAiYmJsb3F1ZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTYKK21zZ2lkICJCYml0bWFwIgorbXNnc3RyICJCbWFwYSBkZSBiaXRzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNworbXNnaWQgImNjb21wcmVzcyIKK21zZ3N0ciAiY2NvbXByZXNpw7NuIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICJDZW50cmEgZW4gY29uZmxpY3RvIGNvbiBhbGfDum4gb3RybyBAYiBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTkKK21zZ2lkICJkZGlyZWN0b3J5IgorbXNnc3RyICJkZGlyZWN0b3JpbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjAKK21zZ2lkICJEZGVsZXRlZCIKK21zZ3N0ciAiRGJvcnJhZG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIxCittc2dpZCAiZWVudHJ5IgorbXNnc3RyICJlZW50cmFkYSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjIKK21zZ2lkICJFQGUgJyVEbicgaW4gJXAgKCVpKSIKK21zZ3N0ciAiRUxhIEBlICclRG4nIHF1ZSBlc3TDoSBlbiAlcCAoJWkpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMworbXNnaWQgImZmaWxlc3lzdGVtIgorbXNnc3RyICJmc2lzdGVtYSBkZSBmaWNoZXJvcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjQKK21zZ2lkICJGZm9yIEBpICVpICglUSkgaXMiCittc2dzdHIgIkZwYXJhIGVsIEBpICVpICglUSkgZXMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI1Cittc2dpZCAiZ2dyb3VwIgorbXNnc3RyICJnZ3J1cG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI2Cittc2dpZCAiaEhUUkVFIEBkIEBpIgorbXNnc3RyICJoRWwgw4FSQk9MLUggZGVsIEBpIGRlbCBAZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjcKK21zZ2lkICJpaW5vZGUiCittc2dzdHIgImlub2RvLWkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI4Cittc2dpZCAiSWlsbGVnYWwiCittc2dzdHIgIklubyB2w6FsaWRvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOQorbXNnaWQgImpqb3VybmFsIgorbXNnc3RyICJqZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMAorbXNnaWQgImxsb3N0K2ZvdW5kIgorbXNnc3RyICJsbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzEKK21zZ2lkICJMaXMgYSBsaW5rIgorbXNnc3RyICJMZXMgdW4gZW5sYWNlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMgorbXNnaWQgIm1tdWx0aXBseS1jbGFpbWVkIgorbXNnc3RyICJtcmVjbGFtYWRvIGVuIG3Dumx0aXBsZXMgb2Nhc2lvbmVzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMworbXNnaWQgIm5pbnZhbGlkIgorbXNnc3RyICJuaW52w6FsaWRvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNAorbXNnaWQgIm9vcnBoYW5lZCIKK21zZ3N0ciAib2h1w6lyZmFubyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzUKK21zZ2lkICJwcHJvYmxlbSBpbiIKK21zZ3N0ciAicHByb2JsZW1hIGVuIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNgorbXNnaWQgInFxdW90YSIKK21zZ3N0ciAicWN1b3RhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNworbXNnaWQgInJyb290IEBpIgorbXNnc3RyICJyQGkgcmHDrXoiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM4Cittc2dpZCAic3Nob3VsZCBiZSIKK21zZ3N0ciAic2RlYmVyw61hIHNlciIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzkKK21zZ2lkICJTc3VwZXJAYiIKK21zZ3N0ciAiU3N1cGVyQGIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQwCittc2dpZCAidXVuYXR0YWNoZWQiCittc2dzdHIgInVkZXNhY29wbGFkbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDEKK21zZ2lkICJ2ZGV2aWNlIgorbXNnc3RyICJ2ZGlzcG9zaXRpdm8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQyCittc2dpZCAieGV4dGVudCIKK21zZ3N0ciAieGV4dGVudCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDMKK21zZ2lkICJ6emVyby1sZW5ndGgiCittc2dzdHIgInpsb25naXR1ZCBjZXJvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NAorbXNnaWQgIjxUaGUgTlVMTCBpbm9kZT4iCittc2dzdHIgIjxFbCBub2RvLWkgTlVMTz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU1Cittc2dpZCAiPFRoZSBiYWQgYmxvY2tzIGlub2RlPiIKK21zZ3N0ciAiPEVsIG5vZG8taSBkZSBibG9xdWVzIGRhw7FhZG9zPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTcKK21zZ2lkICI8VGhlIHVzZXIgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8RWwgbm9kby1pIGRlIGxhIGN1b3RhIGRlIHVzdWFyaW8+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OAorbXNnaWQgIjxUaGUgZ3JvdXAgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8RWwgbm9kby1pIGRlIGxhIGN1b3RhIGRlIGdydXBvPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTkKK21zZ2lkICI8VGhlIGJvb3QgbG9hZGVyIGlub2RlPiIKK21zZ3N0ciAiPEVsIG5vZG8taSBkZWwgY2FyZ2Fkb3IgZGUgYXJyYW5xdWU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MAorbXNnaWQgIjxUaGUgdW5kZWxldGUgZGlyZWN0b3J5IGlub2RlPiIKK21zZ3N0ciAiPEVsIG5vZG8taSBkZWwgZGlyZWN0b3JpbyBkZSBkZXNib3JyYWRvPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjEKK21zZ2lkICI8VGhlIGdyb3VwIGRlc2NyaXB0b3IgaW5vZGU+IgorbXNnc3RyICI8RWwgbm9kby1pIGRlc2NyaXB0b3IgZGVsIGdydXBvPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjIKK21zZ2lkICI8VGhlIGpvdXJuYWwgaW5vZGU+IgorbXNnc3RyICI8RWwgbm9kby1pIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXM+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MworbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSA5PiIKK21zZ3N0ciAiPFNlIGhhIHJlc2VydmFkbyBlbCBub2RvLWkgOT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTY0Cittc2dpZCAiPFJlc2VydmVkIGlub2RlIDEwPiIKK21zZ3N0ciAiPFNlIGhhIHJlc2VydmFkbyBlbCBub2RvLWkgMTA+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNAorbXNnaWQgInJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAiZmljaGVybyBub3JtYWwiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM2Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICJkaXJlY3RvcmlvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzOAorbXNnaWQgImNoYXJhY3RlciBkZXZpY2UiCittc2dzdHIgImRpc3Bvc2l0aXZvIGRlIGNhcmFjdGVyZXMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQwCittc2dpZCAiYmxvY2sgZGV2aWNlIgorbXNnc3RyICJkaXNwb3NpdGl2byBkZSBibG9xdWUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQyCittc2dpZCAibmFtZWQgcGlwZSIKK21zZ3N0ciAidHViZXLDrWEgZGVzaWduYWRhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NAorbXNnaWQgInN5bWJvbGljIGxpbmsiCittc2dzdHIgImVubGFjZSBzaW1iw7NsaWNvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NiBtaXNjL3V1aWRkLmM6MTYyCittc2dpZCAic29ja2V0IgorbXNnc3RyICLCq3NvY2tldMK7IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpbGUgdHlwZSB3aXRoIG1vZGUgMCVvIgorbXNnc3RyICJ0aXBvIGRlIGZpY2hlcm8gZGVzY29ub2NpZG8gY29uIG1vZG8gMCVvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyMworbXNnaWQgImluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJibG9xdWUgaW5kaXJlY3RvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyNQorbXNnaWQgImRvdWJsZSBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiYmxvcXVlIGRvYmxlbWVudGUgaW5kaXJlY3RvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyNworbXNnaWQgInRyaXBsZSBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiYmxvcXVlIHRyaXBsZW1lbnRlIGluZGlyZWN0byIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjkKK21zZ2lkICJ0cmFuc2xhdG9yIGJsb2NrIgorbXNnc3RyICJibG9xdWUgZGUgdHJhZHVjY2nDs24iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDMxCittc2dpZCAiYmxvY2sgIyIKK21zZ3N0ciAiYmxvcXVlICMiCisKKyM6IGUyZnNjay9wYXNzMWIuYzoyMjIKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGlub2RlIG1hcCIKK21zZ3N0ciAibWFwYSBkZSBub2Rvcy1pIHJlY2xhbWFkb3MgZW4gbcO6bHRpcGxlcyBvY2FzaW9uZXMiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo2MjUgZTJmc2NrL3Bhc3MxYi5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBkdXBfYmxrIGZvciAlbGx1XG4iCittc2dzdHIgImVycm9yIGludGVybm86IG5vIHNlIGhhIGVuY29udHJhZG8gZWwgZHVwX2JsayBwYXJhICVsbHVcbiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjg1MgorbXNnaWQgInJldHVybmVkIGZyb20gY2xvbmVfZmlsZV9ibG9jayIKK21zZ3N0ciAicmVncmVzYWRvIGRlbCBjbG9uZV9maWxlX2Jsb2NrIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgYmxvY2sgcmVjb3JkIGZvciAlbGx1IgorbXNnc3RyICIiCisiRXJyb3IgaW50ZXJubzogbm8gc2UgcHVlZGUgZW5jb250cmFyIGVsIHJlZ2lzdHJvIGRlIGJsb3F1ZSBFQSBwYXJhICVsbHUiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBpbm9kZSByZWNvcmQgZm9yICV1IgorbXNnc3RyICJFcnJvciBpbnRlcm5vOiBubyBzZSBwdWVkZSBlbmNvbnRyYXIgZWwgcmVnaXN0cm8gZGUgYmxvcXVlIEVBICV1IgorCisjOiBlMmZzY2svcGFzczEuYzo0NzUgZTJmc2NrL3Bhc3MyLmM6NzgyCittc2dpZCAicmVhZGluZyBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgImxleWVuZG8gYmxvcXVlIGRlIGRpcmVjdG9yaW8iCisKKyM6IGUyZnNjay9wYXNzMS5jOjYzNAorbXNnaWQgImluLXVzZSBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgZGUgbm9kb3MtaSB1c2Fkb3MiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY0NQorbXNnaWQgImRpcmVjdG9yeSBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgZGUgbm9kb3MtaSBkZSBkaXJlY3RvcmlvIgorCisjOiBlMmZzY2svcGFzczEuYzo2NTUKK21zZ2lkICJyZWd1bGFyIGZpbGUgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBhIGRlIG5vZG9zLWkgZGUgZmljaGVyb3Mgbm9ybWFsZXMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY2NCBtaXNjL2UyaW1hZ2UuYzoxMjY1Cittc2dpZCAiaW4tdXNlIGJsb2NrIG1hcCIKK21zZ3N0ciAibWFwYSBkZSBibG9xdWVzIHVzYWRvcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzMwCittc2dpZCAib3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJpbmljaWFuZG8gbGEgZXhwbG9yYWNpw7NuIGRlIGxvcyBub2Rvcy1pIgorCisjOiBlMmZzY2svcGFzczEuYzo3NjQKK21zZ2lkICJnZXR0aW5nIG5leHQgaW5vZGUgZnJvbSBzY2FuIgorbXNnc3RyICJvYnRlbmllbmRvIGVsIHNpZ3VpZW50ZSBub2RvLWkgcGFyYSBleGFtaW5hciIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI3OQorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAiUGFzbyAxIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzM2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgaW5kaXJlY3QgYmxvY2tzIG9mIGlub2RlICV1IgorbXNnc3RyICJsZXllbmRvIGJsb3F1ZXMgaW5kaXJlY3RvcyBkZWwgbm9kby1pICV1IgorCisjOiBlMmZzY2svcGFzczEuYzoxMzg2Cittc2dpZCAiYmFkIGlub2RlIG1hcCIKK21zZ3N0ciAibWFwYSBkZSBub2Rvcy1pIGRhw7FhZG9zIgorCisjOiBlMmZzY2svcGFzczEuYzoxNDA5Cittc2dpZCAiaW5vZGUgaW4gYmFkIGJsb2NrIG1hcCIKK21zZ3N0ciAiZWwgbm9kby1pIGVzdMOhIGVuIGVsIG1hcGEgZGUgYmxvcXVlcyBkYcOxYWRvcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQyOQorbXNnaWQgImltYWdpYyBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgZGUgbm9kb3MtaSBjb24gJ2ltYWdpYyciCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0NTYKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGJsb2NrIG1hcCIKK21zZ3N0ciAibWFwYSBkZSBibG9xdWVzIHJlY2xhbWFkb3MgZW4gbcO6bHRpcGxlcyBvY2FzaW9uZXMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE1NjcKK21zZ2lkICJleHQgYXR0ciBibG9jayBtYXAiCittc2dzdHIgIm1hcGEgZGUgYmxvcXVlcyBkZSBhdHJpYnV0b3MgZXh0ZW5kaWRvcyIKKworIyBUT0RPIGJsa2NudCA9IG7Dum1lcm8gZGUgYmxvcXVlL27Dum1lcm8gZGUgYmxvcXVlcz8KKyM6IGUyZnNjay9wYXNzMS5jOjI1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTZsdSglYyk6IGV4cGVjdGluZyAlNmx1IGdvdCBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIgorbXNnc3RyICIiCisiJTZsdSglYyk6IHNlIGVzcGVyYWJhICU2bHUsIHBlcm8gc2UgaGEgb2J0ZW5pZG8gYmxvcXVlIGbDrXNpY28gJTZsdSAobsO6bWVybyAiCisiZGUgYmxvcXVlICVsbGQpXG4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjI4OTgKK21zZ2lkICJibG9jayBiaXRtYXAiCittc2dzdHIgIm1hcGEgZGUgYml0cyBkZSBibG9xdWVzIgorCisjOiBlMmZzY2svcGFzczEuYzoyOTA0Cittc2dpZCAiaW5vZGUgYml0bWFwIgorbXNnc3RyICJtYXBhIGRlIGJpdHMgZGUgbm9kb3MtaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjkxMAorbXNnaWQgImlub2RlIHRhYmxlIgorbXNnc3RyICJ0YWJsYSBkZSBub2Rvcy1pIgorCisjOiBlMmZzY2svcGFzczIuYzoyODMKK21zZ2lkICJQYXNzIDIiCittc2dzdHIgIlBhc28gMiIKKworIzogZTJmc2NrL3Bhc3MyLmM6ODA2Cittc2dpZCAiQ2FuIG5vdCBjb250aW51ZS4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIGNvbnRpbnVhci4iCisKKyM6IGUyZnNjay9wYXNzMy5jOjc3Cittc2dpZCAiaW5vZGUgZG9uZSBiaXRtYXAiCittc2dzdHIgIm1hcGEgZGUgYml0cyBkZSBub2Rvcy1pIHBhc2Fkb3MiCisKKyM6IGUyZnNjay9wYXNzMy5jOjg2Cittc2dpZCAiUGVhayBtZW1vcnkiCittc2dzdHIgIk1lbW9yaWEgcGljbyIKKworIzogZTJmc2NrL3Bhc3MzLmM6MTQ4Cittc2dpZCAiUGFzcyAzIgorbXNnc3RyICJQYXNvIDMiCisKKyM6IGUyZnNjay9wYXNzMy5jOjM0MAorbXNnaWQgImlub2RlIGxvb3AgZGV0ZWN0aW9uIGJpdG1hcCIKK21zZ3N0ciAibWFwYSBkZSBiaXRzIGRlIGRldGVjY2nDs24gZGUgYnVjbGVzIGRlIG5vZG9zLWkiCisKKyM6IGUyZnNjay9wYXNzNC5jOjE5NgorbXNnaWQgIlBhc3MgNCIKK21zZ3N0ciAiUGFzbyA0IgorCisjOiBlMmZzY2svcGFzczUuYzo3NAorbXNnaWQgIlBhc3MgNSIKK21zZ3N0ciAiUGFzbyA1IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxCittc2dpZCAiKG5vIHByb21wdCkiCittc2dzdHIgIihzaW4gY3Vyc29yKSIKKworIyBZbyBwb25kcsOtYSBtZWpvciAiQXJyZWdsYXIiLCB5YSBxdWUgZXMgdW5hIHByZWd1bnRhIHF1ZSBoYWNlIHF1ZSBxdWVkYXLDrWEKKyMgbWVqb3IgZW4gZm9ybWEgaW1wZXJzb25hbC4gRsOtamF0ZSBxdWUgdG9kb3MgbG9zIGRlbcOhcyB2ZXJib3MgcXVlIHNpZ3VlbgorIyBlc3TDoW4gZW4gaW5maW5pdGl2by4KKyMgQ2llcnRvLiBtbQorIzogZTJmc2NrL3Byb2JsZW0uYzo1MgorbXNnaWQgIkZpeCIKK21zZ3N0ciAiQXJyZWdsYXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMKK21zZ2lkICJDbGVhciIKK21zZ3N0ciAiQm9ycmFyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0Cittc2dpZCAiUmVsb2NhdGUiCittc2dzdHIgIlJldWJpY2FyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1Cittc2dpZCAiQWxsb2NhdGUiCittc2dzdHIgIlJlc2VydmFyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2Cittc2dpZCAiRXhwYW5kIgorbXNnc3RyICJFeHBhbmRpciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NworbXNnaWQgIkNvbm5lY3QgdG8gL2xvc3QrZm91bmQiCittc2dzdHIgIkNvbmVjdGFyIGEgL2xvc3QrZm91bmQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTgKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyZWFyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5Cittc2dpZCAiU2FsdmFnZSIKK21zZ3N0ciAiUmVjdXBlcmFyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwCittc2dpZCAiVHJ1bmNhdGUiCittc2dzdHIgIlRydW5jYXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEKK21zZ2lkICJDbGVhciBpbm9kZSIKK21zZ3N0ciAiQm9ycmFyIG5vZG8taSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MgorbXNnaWQgIkFib3J0IgorbXNnc3RyICJJbnRlcnJ1bXBpciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MworbXNnaWQgIlNwbGl0IgorbXNnc3RyICJEaXZpZGlyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgIkNvbnRpbnVhciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NQorbXNnaWQgIkNsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIgorbXNnc3RyICJDbG9uYXIgbG9zIGJsb3F1ZXMgcmVjbGFtYWRvcyBlbiBtw7psdGlwbGVzIG9jYXNpb25lcyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NgorbXNnaWQgIkRlbGV0ZSBmaWxlIgorbXNnc3RyICJCb3JyYXIgZmljaGVybyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NworbXNnaWQgIlN1cHByZXNzIG1lc3NhZ2VzIgorbXNnc3RyICJFbGltaW5hciBtZW5zYWplcyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OAorbXNnaWQgIlVubGluayIKK21zZ3N0ciAiRGVzdmluY3VsYXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkKK21zZ2lkICJDbGVhciBIVHJlZSBpbmRleCIKK21zZ3N0ciAiQm9ycmFyIGVsIMOtbmRpY2UgZGVsIMOhcmJvbC1IIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwCittc2dpZCAiUmVjcmVhdGUiCittc2dzdHIgIlJlY3JlYXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzkKK21zZ2lkICIoTk9ORSkiCittc2dzdHIgIihOSU5HVU5PKSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MAorbXNnaWQgIkZJWEVEIgorbXNnc3RyICJBUlJFR0xBRE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEKK21zZ2lkICJDTEVBUkVEIgorbXNnc3RyICJCT1JSQURPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyCittc2dpZCAiUkVMT0NBVEVEIgorbXNnc3RyICJSRVVCSUNBRE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMKK21zZ2lkICJBTExPQ0FURUQiCittc2dzdHIgIlJFU0VSVkFETyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NAorbXNnaWQgIkVYUEFOREVEIgorbXNnc3RyICJFWFBBTkRJRE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUKK21zZ2lkICJSRUNPTk5FQ1RFRCIKK21zZ3N0ciAiUkVDT05FQ1RBRE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYKK21zZ2lkICJDUkVBVEVEIgorbXNnc3RyICJDUkVBRE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcKK21zZ2lkICJTQUxWQUdFRCIKK21zZ3N0ciAiUkVDVVBFUkFETyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OAorbXNnaWQgIlRSVU5DQVRFRCIKK21zZ3N0ciAiVFJVTkNBRE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODkKK21zZ2lkICJJTk9ERSBDTEVBUkVEIgorbXNnc3RyICJOT0RPLUkgQk9SUkFETyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MAorbXNnaWQgIkFCT1JURUQiCittc2dzdHIgIklOVEVSUlVNUElETyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MQorbXNnaWQgIlNQTElUIgorbXNnc3RyICJESVZJRElETyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MgorbXNnaWQgIkNPTlRJTlVJTkciCittc2dzdHIgIkNPTlRJTlVBTkRPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzCittc2dpZCAiTVVMVElQTFktQ0xBSU1FRCBCTE9DS1MgQ0xPTkVEIgorbXNnc3RyICJTRSBDTE9OQVJPTiBMT1MgQkxPUVVFUyBSRUNMQU1BRE9TIEVOIE3DmkxUSVBMRVMgT0NBU0lPTkVTIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0Cittc2dpZCAiRklMRSBERUxFVEVEIgorbXNnc3RyICJGSUNIRVJPIEJPUlJBRE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUKK21zZ2lkICJTVVBQUkVTU0VEIgorbXNnc3RyICJTVVBSSU1JRE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTYKK21zZ2lkICJVTkxJTktFRCIKK21zZ3N0ciAiREVTVklOQ1VMQURPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3Cittc2dpZCAiSFRSRUUgSU5ERVggQ0xFQVJFRCIKK21zZ3N0ciAiU0UgSEEgTElNUElBRE8gRUwgw41ORElDRSBERUwgw4FSQk9MLUgiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgKK21zZ2lkICJXSUxMIFJFQ1JFQVRFIgorbXNnc3RyICJTRSBSRUNSRUFSw4EiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNworbXNnaWQgIkBiIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgIiIKKyJFbCBtYXBhIGRlIGJpdHMgZGUgYmxvcXVlcyBwYXJhIGVsIGdydXBvICVnIG5vIGVzdMOhIGVuIGVsIGdydXBvLiAgKGJsb3F1ZSAiCisiJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMQorbXNnaWQgIkBpIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgIiIKKyJFbCBtYXBhIGRlIGJpdHMgZGUgbm9kb3MtaSBwYXJhIGVsIGdydXBvICVnIG5vIGVzdMOhIGVuIGVsIGdydXBvLiAgKGJsb3F1ZSAiCisiJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIHRhYmxlIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2Cittc2dpZCAiIgorIkBpIHRhYmxlIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCisiV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbiIKK21zZ3N0ciAiIgorIkxhIHRhYmxhIGRlIG5vZG9zLWkgcGFyYSBlbCBAZyAlZyBubyBlc3TDoSBlbiBlbCBAZy4gIChAYiAlYilcbiIKKyJBVEVOQ0nDk046IEVTIFBPU0lCTEUgUVVFIEhBWUEgVU5BIFDDiVJESURBIERFIERBVE9TIE1VWSBHUkFWRS5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBzdXBlcmJsb2NrIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgdmFsaWQgZXh0Mi9leHQzL2V4dDRcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbS4gIElmIHRoZSBkZXZpY2UgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyL2V4dDMvZXh0NFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgc3VwZXJibG9ja1xuCisjLiBALWV4cGFuZGVkOiBpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBzdXBlcmJsb2NrOlxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iIDgxOTMgPGRldmljZT5cbgorIy4gQC1leHBhbmRlZDogIG9yXG4KKyMuIEAtZXhwYW5kZWQ6ICAgICBlMmZzY2sgLWIgMzI3NjggPGRldmljZT5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyCittc2dpZCAiIgorIlxuIgorIlRoZSBAUyBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIHZhbGlkIGV4dDIvZXh0My9leHQ0XG4iCisiQGYuICBJZiB0aGUgQHYgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyL2V4dDMvZXh0NFxuIgorIkBmIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgQFNcbiIKKyJpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBAUzpcbiIKKyIgICAgZTJmc2NrIC1iIDgxOTMgPEB2PlxuIgorIiBvclxuIgorIiAgICBlMmZzY2sgLWIgMzI3NjggPEB2PlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiRWwgQFMgbm8gc2UgaGEgcG9kaWRvIGxlZXIgbyBubyBkZXNjcmliZSB1biBAZiBleHQyL2V4dDMvZXh0NCB2w6FsaWRvLlxuIgorIlNpIGVsIEB2IGVzIHbDoWxpZG8geSBjb250aWVuZSByZWFsbWVudGUgdW4gQGYgZXh0Mi9leHQzL2V4dDRcbiIKKyIoeSBubyB1bm8gZGUgaW50ZXJjYW1iaW8sIHVmcyB1IG90cmEgY29zYSksIGVudG9uY2VzIGVsIEBTIGVzdMOhXG4iCisiY29ycm9tcGlkbzsgcG9kcsOtYSBpbnRlbnRhciBlamVjdXRhciBlMmZzY2sgY29uIHVuIEBTIGFsdGVybmF0aXZvOlxuIgorIiAgICBlMmZzY2sgLWIgODE5MyA8QHY+XG4iCisiIG9cbiIKKyIgICAgZTJmc2NrIC1iIDMyNzY4IDxAdj5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIGZpbGVzeXN0ZW0gc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBzdXBlcmJsb2NrKSBpcyAlYiBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGRldmljZSBpcyAlYyBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogRWl0aGVyIHRoZSBzdXBlcmJsb2NrIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiRWwgdGFtYcOxbyBkZWwgQGYgKGRlIGFjdWVyZG8gY29uIGVsIEBTKSBlcyBkZSAlYiBAYnMuXG4iCisiRWwgdGFtYcOxbyBmw61zaWNvIGRlbCBAdiBlcyBkZSAlYyBAYnMuXG4iCisiwqFFcyBwcm9iYWJsZSBxdWUgZWwgQFMgbyBsYSB0YWJsYSBkZSBwYXJ0aWNpb25lcyBlc3TDqW4gY29ycnVwdG9zIVxuIgorCisjICLCoVB1ZWRlIHNlciBxdWUgZWwgQFMsIG8gbGEgdGFibGEgZGUgcGFydGljaW9uZXMsIGVzdMOpbiBjb3JydXB0b3MhXG4iCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2NrX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbgorIy4gQC1leHBhbmRlZDogVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuCisjLiBALWV4cGFuZGVkOiBmcm9tIHRoZSBibG9jayBzaXplLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MAorbXNnaWQgIiIKKyJAUyBAYl9zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4iCisiVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuIgorImZyb20gdGhlIEBiIHNpemUuXG4iCittc2dzdHIgIiIKKyJFbiBlbCBAUyBlbCB0YW1hw7FvIGRlbCBAYiA9ICViLCBlbCB0YW1hw7FvIGRlbCBmcmFnbWVudG8gPSAlYy5cbiIKKyJFc3RhIHZlcnNpw7NuIGRlIGUyZnNjayBubyB0aWVuZSBpbXBsZW1lbnRhZG8gZWwgbWFuZWpvIGRlXG4iCisidGFtYcOxb3MgZGUgZnJhZ21lbnRvIGRpc3RpbnRvcyBhbCBkZWwgQGIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3Cittc2dpZCAiQFMgQGJzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIkVsIMKrYmxvY2tzX3Blcl9ncm91cMK7IGRlbCBAUyBlcyAlYiB5IGRlYmVyw61hIGhhYmVyIHNpZG8gJWNcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBmaXJzdF9kYXRhX2Jsb2NrID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIKK21zZ2lkICJAUyBmaXJzdF9kYXRhX0BiID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiRWwgwqtmaXJzdF9kYXRhX2Jsb2NrwrsgZGVsIEBTIGVzICViIHkgZGViZXLDrWEgaGFiZXIgc2lkbyAlY1xuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcKK21zZ2lkICIiCisiQGYgZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4iCisiXG4iCittc2dzdHIgIkVsIEBmIG5vIHRpZW5lIHVuIFVVSUQ7IHNlIGdlbmVyYXLDoSB1bm8uXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydFxuIgorIm9mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnlcbiIKKyJydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgJVMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtXG4iCisibWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZFxuIgorInRoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLlxuIgorIlxuIgorbXNnc3RyICIiCisiTm90YTogc2kgdmFyaW9zIGJsb3F1ZXMgZGUgbWFwYXMgZGUgYml0cyAoZGUgbm9kb3MtaSBvIGRlIGJsb3F1ZXMpXG4iCisibyBwYXJ0ZSBkZSBsYSB0YWJsYSBkZSBub2Rvcy1pIG5lY2VzaXRhbiByZXViaWNhY2nDs24sXG4iCisiZXMgcG9zaWJsZSBxdWUgcHJpbWVybyBzZSBxdWllcmEgaW50ZW50YXIgZWplY3V0YXIgZTJmc2NrIGNvblxuIgorImxhIG9wY2nDs24gJy1iICVTJy4gRWwgcHJvYmxlbWEgcG9kcsOtYSBlc3RhciDDum5pY2FtZW50ZSBlbiBlbFxuIgorImRlc2NyaXB0b3IgcHJpbWFyaW8gZGVsIGdydXBvIGRlIGJsb3F1ZXMgeSBlbFxuIgorImRlc2NyaXB0b3IgZGVsIGdydXBvIGRlIGJsb3F1ZXMgZGUgcmVzcGFsZG8gcG9kcsOtYSBlc3RhciBiaWVuLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3JydXB0aW9uIGZvdW5kIGluIHN1cGVyYmxvY2suICAoJXMgPSAlTikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcxCittc2dpZCAiQ29ycnVwdGlvbiBmb3VuZCBpbiBAUy4gICglcyA9ICVOKS5cbiIKK21zZ3N0ciAiRWwgQFMgZXN0w6EgY29ycnVwdG8uICAoJXMgPSAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIGRldmljZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgQHY6ICVtXG4iCittc2dzdHIgIkVycm9yIGFsIGRldGVybWluYXIgZWwgdGFtYcOxbyBkZWwgQHYgZsOtc2ljbzogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgY291bnQgaW4gc3VwZXJibG9jayBpcyAlaSwgc2hvdWxkIGJlICVqLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MQorbXNnaWQgIkBpIGNvdW50IGluIEBTIGlzICVpLCBAcyAlai5cbiIKK21zZ3N0ciAiTGEgY3VlbnRhIEBpIGVuIGVsIEBTIGVzICVpLCBAcyAlai5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODUKK21zZ2lkICJUaGUgSHVyZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmaWxldHlwZSBmZWF0dXJlLlxuIgorbXNnc3RyICJFbCBIdXJkIG5vIHRpZW5lIGltcGxlbWVudGFkYSBsYSBvcGNpw7NuIGRlIHRpcG9zIGRlIGZpY2hlcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgJWkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoYXMgYW4gQG4gQGogKEBpICVpKS5cbiIKK21zZ3N0ciAiQFMgdGllbmUgdW4gQGogQG4gKEBpICVpKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgbXVsdGlwbGUgZmlsZXN5c3RlbSB1c2VycyAodW5zdXBwb3J0ZWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5NQorbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBtdWx0aXBsZSBAZiB1c2VycyAodW5zdXBwb3J0ZWQpLlxuIgorbXNnc3RyICJFbCBAaiBleHRlcm5vIHRpZW5lIHZhcmlvcyB1c3VhcmlvcyBkZWwgQGYgKG5vIGltcGxlbWVudGFkbykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbid0IGZpbmQgZXh0ZXJuYWwgam91cm5hbFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwMAorbXNnaWQgIkNhbid0IGZpbmQgZXh0ZXJuYWwgQGpcbiIKK21zZ3N0ciAiTm8gc2UgaGEgZW5jb250cmFkbyB1biBAaiBleHRlcm5vXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIGJhZCBzdXBlcmJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjA1Cittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIGJhZCBAU1xuIgorbXNnc3RyICJFbCBAaiBleHRlcm5vIHRpZW5lIHVuIEBTIGRhw7FhZG9cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmlsZXN5c3RlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxMAorbXNnaWQgIkV4dGVybmFsIEBqIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBAZlxuIgorbXNnc3RyICJFbCBAaiBleHRlcm5vIG5vIHRpZW5lIGltcGxlbWVudGFkbyBlc3RlIEBmXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gam91cm5hbCBzdXBlcmJsb2NrIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgam91cm5hbCAKKyMuIEAtZXhwYW5kZWQ6IGZvcm1hdC5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjE1Cittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiAiCisiZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKyJFbCBAUyBkZWwgQGogZGVsIEBmIGVzIGRlIHVuIHRpcG8gZGVzY29ub2NpZG8gJU4gKG5vIGltcGxlbWVudGFkbykuXG4iCisiRXMgcHJvYmFibGUgcXVlIHN1IGNvcGlhIGRlIGUyZnNjayBzZWEgbXV5IGFudGlndWEgeS9vIG5vIHRlbmdhICIKKyJpbXBsZW1lbnRhZG9cbiIKKyJlc3RlIGZvcm1hdG8gZGUgQGouXG4iCisiVGFtYmnDqW4gZXMgcG9zaWJsZSBxdWUgZWwgQFMgZGVsIEBqIGVzdMOpIGNvcnJ1cHRvLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjMKK21zZ2lkICJAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICJFbCBAUyBkZWwgQGogZXN0w6EgY29ycnVwdG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzX2pvdXJuYWwgZmxhZyBpcyBjbGVhciwgYnV0IGEgam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyOAorbXNnaWQgIkBTIGhhc19AaiBmbGFnIGlzIGNsZWFyLCBidXQgYSBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJMYSBiYW5kZXJhIGhhc19qb3VybmFsIGRlbCBAUyBlc3TDoSBxdWl0YWRhLCBwZXJvIGhheSB1biBAai5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIGpvdXJuYWwgaXMgcHJlc2VudC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMzMKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIEBqIGlzIHByZXNlbnQuXG4iCittc2dzdHIgIiIKKyJMYSBiYW5kZXJhIGRlIHJlY3VwZXJhY2nDs24gZGVsIHN1cGVyYmxvcXVlIGVzdMOhIHB1ZXN0YSwgcGVybyBubyBoYXkgQGouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IGpvdXJuYWwgaGFzIGRhdGEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjM4Cittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IEBqIGhhcyBkYXRhLlxuIgorbXNnc3RyICIiCisiTGEgYmFuZGVyYSBkZSByZWN1cGVyYWNpw7NuIGRlbCBzdXBlcmJsb3F1ZSBlc3TDoSBsaW1waWEsIHBlcm8gZWwgQGpcbiIKKyJjb250aWVuZSBpbmZvcm1hY2nDs24uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENsZWFyIGpvdXJuYWwKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQzCittc2dpZCAiQ2xlYXIgQGoiCittc2dzdHIgIkJvcnJhciBlbCBAaiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBmaWxlc3lzdGVtLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0OCBlMmZzY2svcHJvYmxlbS5jOjcwNworbXNnaWQgIkBmIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIEBmLiAgIgorbXNnc3RyICIiCisiRWwgQGYgdGllbmUgdW5hKHMpIGJhbmRlcmEocykgZXNwZWNpYWwoZXMpLCBwZXJvIGVzIHVuYSByZXZpc2nDs24gMCBkZWwgQGYuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVzIG9ycGhhbmVkIGlub2RlICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjUzCittc2dpZCAiJXMgQG8gQGkgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbiIKK21zZ3N0ciAiJXMgQGkgQG8gJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZG89JUltLCB0YW1hw7FvPSVJcylcbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1OAorbXNnaWQgIkBJICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIkBJICVCICglYikgZW5jb250cmFkbyBlbiB1biBAaSBAbyAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYzCittc2dpZCAiQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIllhIHNlIGJvcnLDsyBlbCAlQiAoJWIpIGVuY29udHJhZG8gZW4gZWwgQGkgQG8gJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgb3JwaGFuZWQgaW5vZGUgJWkgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEkgQG8gQGkgJWkgaW4gQFMuXG4iCittc2dzdHIgIkBpIEBvIEBJICVpIGVuIGVsIEBTLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIGlub2RlICVpIGluIG9ycGhhbmVkIGlub2RlIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBpICVpIGluIEBvIEBpIGxpc3QuXG4iCittc2dzdHIgIkBpIEBJICVpIGVuIGxhIGxpc3RhIGRlIG5vZG9zLWkgaHXDqXJmYW5vcy5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3OAorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICJFbCBAUyBkZWwgQGogdGllbmUgcHVlc3RhIHVuYSBiYW5kZXJhIGRlc2Nvbm9jaWRhIGRlIHPDs2xvIGxlY3R1cmEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODMKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiRWwgQFMgZGVsIEBqIHRpZW5lIHB1ZXN0YSB1bmEgYmFuZGVyYSBkZXNjb25vY2lkYSBpbmNvbXBhdGlibGUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4OAorbXNnaWQgIkBqIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbiIKK21zZ3N0ciAiTGEgdmVyc2nDs24gZGVsIEBqIG5vIGVzdMOhIGltcGxlbWVudGFkYSBlbiBlc3RlIGUyZnNjay5cbiIKKworIy4gQC1leHBhbmRlZDogTW92aW5nIGpvdXJuYWwgZnJvbSAvJXMgdG8gaGlkZGVuIGlub2RlLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1vdmluZyBAaiBmcm9tIC8lcyB0byBoaWRkZW4gQGkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJNb3ZpZW5kbyBlbCBAaiBkZSAvJXMgYSB1biBub2RvLWkgb2N1bHRvLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBtb3Zpbmcgam91cm5hbDogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBtb3ZpbmcgQGo6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKyJFcnJvciBtb3ZpZW5kbyBlbCBAajogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRm91bmQgaW52YWxpZCBWMiBqb3VybmFsIHN1cGVyYmxvY2sgZmllbGRzIChmcm9tIFYxIGpvdXJuYWwpLlxuCisjLiBALWV4cGFuZGVkOiBDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBqb3VybmFsIHN1cGVyYmxvY2suLi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzAzCittc2dpZCAiIgorIkZvdW5kIEBuIFYyIEBqIEBTIGZpZWxkcyAoZnJvbSBWMSBAaikuXG4iCisiQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgQGogQFMuLi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlNlIGVuY29udHJhcm9uIGNhbXBvcyBWMiBubyB2w6FsaWRvcyBlbiBlbCBAaiBkZWwgQFNcbiIKKyIoZGVsIFYxIGRlbCBAaikuXG4iCisiQm9ycmFuZG8gbG9zIGNhbXBvcyBxdWUgZXhjZWRlbiBsYSBWMSBkZWwgQGogZGVsIEBTLi4uXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJ1biBqb3VybmFsIGFueXdheQorIzogZTJmc2NrL3Byb2JsZW0uYzozMDkKK21zZ2lkICJSdW4gQGogYW55d2F5IgorbXNnc3RyICJFamVjdXRhciBlbCBAaiBkZSB0b2RhcyBmb3JtYXMiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTQKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiIgorIkxhIGJhbmRlcmEgZGUgcmVjdXBlcmFjacOzbiBubyBlc3TDoSBwdWVzdGEgZW4gZWwgQFMgZGUgcmVzcGFsZG8sXG4iCisicG9yIGVzbyBzZSBlamVjdXRhcsOhIGRlIHRvZGFzIG1hbmVyYXMgZWwgQGouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhY2tpbmcgdXAgam91cm5hbCBpbm9kZSBibG9jayBpbmZvcm1hdGlvbi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzE5Cittc2dpZCAiIgorIkJhY2tpbmcgdXAgQGogQGkgQGIgaW5mb3JtYXRpb24uXG4iCisiXG4iCittc2dzdHIgIiIKKyJSZXNwYWxkYW5kbyBsYSBpbmZvcm1hY2nDs24gZGVsIEBqLCBlbCBAaSB5IGVsIEBiLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgcmVzaXplX2lub2RlIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9ibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaXMgJU47IHNob3VsZCBiZSB6ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyNAorbXNnaWQgIiIKKyJAZiBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9AaSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisiaXMgJU47IEBzIHplcm8uICAiCittc2dzdHIgIiIKKyJFbCBAZiBubyB0aWVuZSAncmVzaXplX2lub2RlJyBoYWJpbGl0YWRvLCBwZXJvICdzX3Jlc2VydmVkX2dkdF9ibG9ja3MnXG4iCisiZXMgJU47IGRlYmVyw61hIHNlciBjZXJvLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemVfaW5vZGUgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIGlub2RlIGlzIG5vbi16ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzMAorbXNnaWQgIlJlc2l6ZV9AaSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgQGkgaXMgbm9uLXplcm8uICAiCittc2dzdHIgIiIKKyJFbCAncmVzaXplX2lub2RlJyBubyBlc3TDoSBoYWJpbGl0YWRvLCBwZXJvIGVsIG5vZG8taSBkZSBjYW1iaW8gZGVsIHRhbWHDsW8gbm8gIgorImVzIGNlcm8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSBub3QgdmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzM1Cittc2dpZCAiUmVzaXplIEBpIG5vdCB2YWxpZC4gICIKK21zZ3N0ciAiRWwgbm9kby1pIGRlIGNhbWJpbyBkZWwgdGFtYcOxbyBubyBlcyB2w6FsaWRvLiAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQwCittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorIkxhIMO6bHRpbWEgdmV6ICgldCxcdG5vdz0lVClcbiIKKyJxdWUgc2UgbW9udMOzIGVsIHN1cGVyYmxvcXVlIGVzIGVuIGVsIGZ1dHVyby5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0NQorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKyJMYSDDumx0aW1hIHZleiAoJXQsXHRub3cgPSAlVCkgcXVlXG4iCisic2UgZXNjcmliacOzIGVuIGVsIHN1cGVyYmxvcXVlIGVzIGVuIGVsIGZ1dHVyby5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIHNob3VsZCBiZSAlWC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBAcyAlWC4gICIKK21zZ3N0ciAiTGEgcGlzdGEgZGUgc3VwZXJibG9xdWUgcGFyYSB1biBzdXBlcmJsb3F1ZSBleHRlcm5vIGRlYmVyw61hIHNlciAlWC4gICIKKworIy4gQC1leHBhbmRlZDogQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNTQKK21zZ2lkICIiCisiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkFncmVnYW5kbyBsYSBwaXN0YSBkaXJoYXNoIGFsIHNpc3RlbWEgZGUgZmljaGVyb3NcbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNTkKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgIgorbXNnc3RyICJFbCDCq2NoZWNrc3VtwrsgZGVsIGRlc2NyaXB0b3IgZGUgQGcgJWcgZXMgJTA0eDsgZGViZXLDrWEgc2VyICUwNHkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuIgorbXNnc3RyICIiCisiRWwgZGVzY3JpcHRvciBkZSBAZyAlZyBldGlxdWV0YWRvIGNvbW8gbm8gaW5pY2lhbGl6YWRvIG5vIHRpZW5lIGFjdGl2YWRhIGVzYSAiCisiZnVuY2lvbmFsaWRhZC5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2OQorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gICIKK21zZ3N0ciAiIgorIkxhIGN1ZW50YSBkZSBub2Rvcy1pIG5vIHV0aWxpemFkb3MgJWIgZGVsIGRlc2NyaXB0b3IgZGUgQGcgJWcgbm8gZXMgdsOhbGlkYS4gICIKKworIy4gQC1leHBhbmRlZDogTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNzQKK21zZ2lkICJMYXN0IEBnIEBiIEBCIHVuaW5pdGlhbGl6ZWQuICAiCittc2dzdHIgIkVsIG1hcGEgZGUgYml0cyBkZSBibG9xdWUgZGVsIMO6bHRpbW8gZ3J1cG8gbm8gZXN0w6EgaW5pY2lhbGl6YWRvLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHRyYW5zYWN0aW9uICVpIHdhcyBjb3JydXB0LCByZXBsYXkgd2FzIGFib3J0ZWQuXG4iCittc2dzdHIgIiIKKyJMYSB0cmFuc2FjY2nDs24gJWkgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBlc3RhYmEgY29ycnVwdGE7IHNlIGhhICIKKyJpbnRlcnJ1bXBpZG8gbGEgcmVwZXRpY2nDs24uXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzgzCittc2dpZCAiVGhlIHRlc3RfZnMgZmxhZyBpcyBzZXQgKGFuZCBleHQ0IGlzIGF2YWlsYWJsZSkuICAiCittc2dzdHIgIkxhIGJhbmRlcmEgdGVzdF9mcyBlc3TDoSBwdWVzdGEgKHkgZXh0NCBlc3TDoSBkaXNwb25pYmxlKS4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4OAorIywgZnV6enkKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5ICIKKyJzZXQpXG4iCittc2dzdHIgIiIKKyJMYSDDumx0aW1hIGhvcmEgZGUgbW9udGFqZSBkZWwgQFMgZXN0w6EgZW4gZWwgZnV0dXJvLlxuIgorIlx0KHBvciBtZW5vcyBkZSB1biBkw61hLCBwcm9iYWJsZW1lbnRlIGRlYmlkbyBhIHF1ZSBlbCByZWxvaiBkZWwgaGFyZHdhcmUgIgorImVzdMOhIG1hbCBwdWVzdG8pICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozOTQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAiCisic2V0KVxuIgorbXNnc3RyICIiCisiTGEgw7psdGltYSBob3JhIGRlIGVzY3JpdHVyYSBkZWwgQFMgZXN0w6EgZW4gZWwgZnV0dXJvLlxuIgorIlx0KHBvciBtZW5vcyBkZSB1biBkw61hLCBwcm9iYWJsZW1lbnRlIGRlYmlkbyBhIHF1ZSBlbCByZWxvaiBkZWwgaGFyZHdhcmUgIgorImVzdMOhIG1hbCBwdWVzdG8pICAiCisKKyMuIEAtZXhwYW5kZWQ6IE9uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwMAorbXNnaWQgIk9uZSBvciBtb3JlIEBiIEBnIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgIgorbXNnc3RyICIiCisiTG9zIMKrY2hlY2tzdW1zwrsgZGUgdW5vIG8gbcOhcyBkZXNjcmlwdG9yZXMgZGUgQGdzIGRlIEBicyBzb24gaW52w6FsaWRvcy4gICIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwNQorbXNnaWQgIlNldHRpbmcgZnJlZSBAaXMgY291bnQgdG8gJWogKHdhcyAlaSlcbiIKK21zZ3N0ciAiU2UgcG9uZSBsYSBjYW50aWRhZCBkZSBub2Rvcy1pIGxpYnJlcyBhICVqIChlcmEgJWkpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBibG9ja3MgY291bnQgdG8gJWMgKHdhcyAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTAKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIlNlIHBvbmUgbGEgY2FudGlkYWQgZGUgYmxvcXVlcyBsaWJyZXMgYSAlYyAoZXJhICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBNYWtpbmcgcXVvdGEgaW5vZGUgJWkgKCVRKSBoaWRkZW4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDE1Cittc2dpZCAiTWFraW5nIEBxIEBpICVpICglUSkgaGlkZGVuLlxuIgorbXNnc3RyICJPY3VsdGFuZG8gZWwgQGkgZGUgQHEgJWkgKCVRKS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDIwCittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgIgorbXNnc3RyICJFbCBzdXBlcmJsb3F1ZSB0aWVuZSB1biBibG9xdWUgTU1QIGludsOhbGlkby4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDI1Cittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgIgorbXNnc3RyICJFbCBzdXBlcmJsb3F1ZSB0aWVuZSB1biBuw7ptZXJvIG3DoWdpY28gZGUgTU1QIGludsOhbGlkby4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX29wZW4yOiAlbVxuIgorbXNnc3RyICJleHQyZnNfb3BlbjIoKTogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCittc2dzdHIgImV4dDJmc19jaGVja19kZXNjKCk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgNjRiaXQgZmlsZXN5c3RlbXMgbmVlZHMgZXh0ZW50cyB0byBhY2Nlc3MgdGhlIHdob2xlIGRpc2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQwCittc2dpZCAiQFMgNjRiaXQgZmlsZXN5c3RlbXMgbmVlZHMgZXh0ZW50cyB0byBhY2Nlc3MgdGhlIHdob2xlIGRpc2suICAiCittc2dzdHIgIiIKKyJAUyBkZSBzaXN0ZW1hcyBkZSBmaWNoZXJvcyBkZSA2NCBiaXRzIG5lY2VzaXRhIMKrZXh0ZW50c8K7IHBhcmEgYWNjZWRlciBhbCAiCisiZGlzY28gZW50ZXJvLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NQorbXNnaWQgIkZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZy4gICglTiwgbWF4IHZhbHVlICVnKS4gICIKK21zZ3N0ciAiRmlyc3RfbWV0YV9iZyBlcyBkZW1hc2lhZG8gZ3JhbmRlLiAoJU4sIHZhbG9yIG3DoXguICVnKS4gICIKKworIyBQcmVmaWVybyBlbCBpbmZpbml0aXZvLCBwZXJvIGhheSBvY2FzaW9uZXMgZW4gcXVlIGVsIGdlcnVuZGlvIGVzCisjIGluZGlzcGVuc2FibGUsIGNvbW8gcG9yIGVqZW1wbG8gInZlcmlmaWNhbmRvIiwgInJldmlzYW5kbyIsIGVuIGRvbmRlCisjIGRhIGxhIGltcHJlc2nDs24gZGUgcXVlIGVuIGVzZSBtb21lbnRvIHNlIGVzdMOhbiBoYWNpZW5kbyBsYXMgY29zYXMuCisjIEVuIGVzdGUgY2FzbyBlbiBwYXJ0aWN1bGFyLCBjcmVvIHF1ZSBlcyBjb252ZW5pZW50ZSBlbCBnZXJ1bmRpby4gbW0KKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1MgorbXNnaWQgIlBhc3MgMTogQ2hlY2tpbmcgQGlzLCBAYnMsIGFuZCBzaXplc1xuIgorbXNnc3RyICJQYXNvIDE6IFZlcmlmaWNhbmRvIG5vZG9zLWksIEBicyB5IHRhbWHDsW9zXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1NgorbXNnaWQgIkByIGlzIG5vdCBhIEBkLiAgIgorbXNnc3RyICJFbCBAciBubyBlcyB1biBAZC4gICIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDYxCittc2dpZCAiQHIgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgIgorbXNnc3RyICIiCisiRWwgQHIgdGllbmUgcHVlc3RvIGVsIGR0aW1lIChwcm9iYWJsZW1lbnRlIGRlYmlkbyBhIHVuYSB2ZXJzacOzbiBhbnRpZ3VhIGRlbCAiCisibWtlMmZzKS4gICIKKworIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2NgorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgIkVsIEBpIHJlc2VydmFkbyAlaSAlUSB0aWVuZSB1biBtb2RvIGluY29ycmVjdG8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGRlbGV0ZWQgaW5vZGUgJWkgaGFzIHplcm8gZHRpbWUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBEIEBpICVpIGhhcyB6ZXJvIGR0aW1lLiAgIgorbXNnc3RyICJFbCBAaSAlaSBALCB0aWVuZSB1biBkdGltZSBjZXJvLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgIgorbXNnc3RyICJFbCBAaSAlaSBlc3TDoSBlbiB1c28sIHBlcm8gdGllbmUgcHVlc3RvIGR0aW1lLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhIHplcm8tbGVuZ3RoIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgYSBAeiBAZC4gICIKK21zZ3N0ciAiRWwgQGkgJWkgZXMgdW4gQGQgY29uIEB6LiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4NgorbXNnaWQgIkBnICVnJ3MgQGIgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIkVsIEBCIGRlIGJsb3F1ZXMgZGVsIEBnICVnIGVuIGVsIGx1Z2FyICViIEBDLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5MQorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIkVsIEBCIGRlIG5vZG9zLWkgZGVsIEBnICVnIGVuIGVsIGx1Z2FyICViIEBDLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIHRhYmxlIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDk2Cittc2dpZCAiQGcgJWcncyBAaSB0YWJsZSBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiTGEgdGFibGEgZGUgbm9kb3MtaSBkZWwgQGcgJWcgZW4gZWwgbHVnYXIgJWIgQEMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwMQorbXNnaWQgIkBnICVnJ3MgQGIgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIkVsIEBCICglYikgZGUgYmxvcXVlcyBkZWwgQGcgJWcgZXN0w6EgZGHDsWFkby4gICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgKCViKSBpcyBiYWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA2Cittc2dpZCAiQGcgJWcncyBAaSBAQiAoJWIpIGlzIGJhZC4gICIKK21zZ3N0ciAiRWwgQEIgKCViKSBkZSBub2Rvcy1pIGRlbCBAZyAlZyBlc3TDoSBkYcOxYWRvLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9zaXplIGlzICVJcywgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxMQorbXNnaWQgIkBpICVpLCBpX3NpemUgaXMgJUlzLCBAcyAlTi4gICIKK21zZ3N0ciAiQGkgJWksIGlfc2l6ZSBlcyAlSXMsIEBzICVOLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9ibG9ja3MgaXMgJUliLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE2Cittc2dpZCAiQGkgJWksIGlfQGJzIGlzICVJYiwgQHMgJU4uICAiCittc2dzdHIgIkBpICVpLCBpX0BicyBlcyAlSWIsIEBzICVOLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIxCittc2dpZCAiQEkgJUIgKCViKSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiQEkgJUIgKCViKSBlbiBAaSAlaS4gICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBvdmVybGFwcyBmaWxlc3lzdGVtIG1ldGFkYXRhIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyNgorbXNnaWQgIiVCICglYikgb3ZlcmxhcHMgQGYgbWV0YWRhdGEgaW4gQGkgJWkuICAiCittc2dzdHIgIiVCICglYikgc2Ugc29sYXBhIGNvbiBsb3MgbWV0YWRhdG9zIGRlbCBAZiBlbiBlbCBAaSAlaS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJAaSAlaSB0aWVuZSBAYihzKSBpbnbDoWxpZG8ocykuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFRvbyBtYW55IGlsbGVnYWwgYmxvY2tzIGluIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzNgorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBpbGxlZ2FsIEBicyBpbiBAaSAlaS5cbiIKK21zZ3N0ciAiRGVtYXNpYWRvcyBAYnMgaW52w6FsaWRvcyBlbiBlbCBAaSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGJhZCBibG9jayBpbm9kZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDEKK21zZ2lkICJASSAlQiAoJWIpIGluIGJhZCBAYiBAaS4gICIKK21zZ3N0ciAiQEkgJUIgKCViKSBlbiBlbCBub2RvLWkgZGUgYmxvcXVlcyBkYcOxYWRvcy4gICIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0NgorbXNnaWQgIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiRWwgbm9kby1pIGRlIGJsb3F1ZXMgZGHDsWFkb3MgdGllbmUgQGIocykgaW52w6FsaWRvKHMpLiAgIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrIGluIHVzZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTEKK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiwqFAYiBkdXBsaWNhZG8gbyBkYcOxYWRvIGVzdMOhIGVuIHVzbyFcbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrICViIHVzZWQgYXMgYmFkIGJsb2NrIGlub2RlIGluZGlyZWN0IGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1NgorbXNnaWQgIkJhZCBAYiAlYiB1c2VkIGFzIGJhZCBAYiBAaSBpbmRpcmVjdCBAYi4gICIKK21zZ3N0ciAiIgorIkVsIEBiIGRhw7FhZG8gJWIgc2UgdXNhIGNvbW8gYmxvcXVlIGluZGlyZWN0byBlbiBlbCBub2RvLWkgZGUgYmxvcXVlcyBkYcOxYWRvcyIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4KKyMuIEAtZXhwYW5kZWQ6IHNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGluIHRoZSBmaWxlc3lzdGVtLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2MQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgYmFkIEBiIEBpIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuIgorInNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4iCisiaW4gdGhlIEBmLlxuIgorbXNnc3RyICIiCisiXG4iCisiRWwgbm9kby1pIGRlIGJsb3F1ZXMgZGHDsWFkb3MgcHJvYmFibGVtZW50ZSBoYXlhIHNpZG8gY29ycm9tcGlkby5cbiIKKyJQcm9iYWJsZW1lbnRlIHNlIGRlYmVyw61hIGRldGVuZXIgYWhvcmEgZWwgcHJvZ3JhbWEgeSBlamVjdXRhclxuIgorImUyZnNjayAtYyBwYXJhIGJ1c2NhciBibG9xdWVzIGRhw7FhZG9zIGVuIGVsIEBmLlxuIgorCisjIE11Y2hhcyBvcmFjaW9uZXMgZW4gcGFzaXZhIGVuIGluZ2zDqXMgcXVlZGFuIG1lam9yIGVuIGZvcm1hIHJlZmxleGl2YQorIyBjdWFuZG8gc2UgdHJhZHVjZW4uCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogSWYgdGhlIGJsb2NrIGlzIHJlYWxseSBiYWQsIHRoZSBmaWxlc3lzdGVtIGNhbiBub3QgYmUgZml4ZWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTY4Cittc2dpZCAiIgorIlxuIgorIklmIHRoZSBAYiBpcyByZWFsbHkgYmFkLCB0aGUgQGYgY2FuIG5vdCBiZSBmaXhlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNpIGVsIEBiIGVzdMOhIHJlYWxtZW50ZSBkYcOxYWRvLCBlbCBAZiBubyBzZSBwdWVkZSBhcnJlZ2xhci5cbiIKKworIy4gQC1leHBhbmRlZDogWW91IGNhbiByZW1vdmUgdGhpcyBibG9jayBmcm9tIHRoZSBiYWQgYmxvY2sgbGlzdCBhbmQgaG9wZVxuCisjLiBALWV4cGFuZGVkOiB0aGF0IHRoZSBibG9jayBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3MworbXNnaWQgIiIKKyJZb3UgY2FuIHJlbW92ZSB0aGlzIEBiIGZyb20gdGhlIGJhZCBAYiBsaXN0IGFuZCBob3BlXG4iCisidGhhdCB0aGUgQGIgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLlxuIgorIlxuIgorbXNnc3RyICIiCisiU2UgcHVlZGUgYm9ycmFyIGVzdGUgYmxvcXVlIGRlIGxhIGxpc3RhIGRlIGJsb3F1ZXMgZGHDsWFkb3MgY29uIGxhIGVzcGVyYW56YVxuIgorImRlIHF1ZSBlbCBibG9xdWUgZXN0w6kgY29ycmVjdG8uICBQZXJvIG5vIGhheSBuaW5ndW5hIGdhcmFudMOtYS5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIHByaW1hcnkgc3VwZXJibG9jayAoJWIpIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzkKK21zZ2lkICJUaGUgcHJpbWFyeSBAUyAoJWIpIGlzIG9uIHRoZSBiYWQgQGIgbGlzdC5cbiIKK21zZ3N0ciAiRWwgQFMgcHJpbWFyaW8gKCViKSBlc3TDoSBlbiBsYSBsaXN0YSBkZSBAYnMgZGHDsWFkb3MuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJsb2NrICViIGluIHRoZSBwcmltYXJ5IGdyb3VwIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4NAorbXNnaWQgIkJsb2NrICViIGluIHRoZSBwcmltYXJ5IEBnIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgQGIgbGlzdFxuIgorbXNnc3RyICIiCisiRWwgYmxvcXVlICViIGVuIGxvcyBkZXNjcmlwdG9yZXMgcHJpbWFyaW9zIGRlIGdydXBvcyBlc3TDoSBlbiBsYSBsaXN0YSBkZSBAYnMgIgorImRhw7FhZG9zXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3Mgc3VwZXJibG9jayAoJWIpIGlzIGJhZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1OTAKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIEBTICglYikgaXMgYmFkLlxuIgorbXNnc3RyICJBdGVuY2nDs246IGVsIEBTICglYikgZGVsIGdydXBvICVnIGVzdMOhIGRhw7FhZG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIGJsb2NrICglYikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTk1Cittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBAZyBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgQGIgKCViKS5cbiIKK21zZ3N0ciAiIgorIkF0ZW5jacOzbjogbGEgY29waWEgZGUgbG9zIGRlc2NyaXB0b3JlcyBkZWwgQGcgJWcgdGllbmUgdW4gQGIgKCViKSBkYcOxYWRvLlxuIgorCisjLiBALWV4cGFuZGVkOiBQcm9ncmFtbWluZyBlcnJvcj8gIGJsb2NrICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjAxCittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I/ICBAYiAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX0BiLlxuIgorbXNnc3RyICIiCisiwr9TZXLDoSB1biBlcnJvciBkZSBwcm9ncmFtYWNpw7NuPyAgRWwgQGIgIyViIHNlIHJlY2xhbWEgc2luIHJhesOzbiBlbiBlbCAiCisicHJvY2Vzc19iYWRfYmxvY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgJU4gY29udGlndW91cyBibG9jayhzKSBpbiBibG9jayBncm91cCAlZyBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjA3Cittc2dpZCAiQEEgJU4gY29udGlndW91cyBAYihzKSBpbiBAYiBAZyAlZyBmb3IgJXM6ICVtXG4iCittc2dzdHIgIkBBICVOLCBlcyBjb250aWd1YSBhIGxvcyBAYnMgZW4gZWwgQGIgZGVsIEBnICVnIHBhcmEgJXM6ICVtXG4iCisKKyMgVE9ETyBwb3IgbyBwYXJhCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAYiBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbiIKK21zZ3N0ciAiQEEgZGVsIGLDumZlciBkZWwgQGIgcG9yIHJldWJpY2FyICVzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjE3Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbiIKK21zZ3N0ciAiUmV1YmljYW5kbyAlcyBkZWwgQGcgJWcgZGUgJWIgYSAlYy4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIHRvICVjLi4uXG4iCittc2dzdHIgIlJldWJpY2FuZG8gZWwgQGcgJWcgZGUgJXMgaGFjaWEgJWMuLi5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHJlYWQgYmxvY2sgJWIgb2YgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjI3Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgQGIgJWIgb2YgJXM6ICVtXG4iCittc2dzdHIgIkF0ZW5jacOzbjogbm8gc2UgcHVlZGUgbGVlciBlbCBAYiAlYiBkZSAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHdyaXRlIGJsb2NrICViIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzIKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICJBdGVuY2nDs246IG5vIHNlIHB1ZWRlIGVzY3JpYmlyIGVsIEBiICViIHBhcmEgJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjM3IGUyZnNjay9wcm9ibGVtLmM6MTUwMQorbXNnaWQgIkBBIEBpIEBCICglTik6ICVtXG4iCittc2dzdHIgIkhheSB1biBAQSBkZWwgQEIgZGVsIEBpICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQyCittc2dpZCAiQEEgQGIgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiSGF5IHVuIEBBIGRlbCBAYiBkZWwgQEIgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4iCittc2dzdHIgIkBBIGVuIGxhIGN1ZW50YS1pIGRlIGxhIGluZm9ybWFjacOzbiBkZWwgZW5sYWNlOiAlbVxuIgorCisjIGFycmF5IC0+IG1hdHJpegorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBkaXJlY3RvcnkgYmxvY2sgYXJyYXk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBkIEBiIGFycmF5OiAlbVxuIgorbXNnc3RyICJAQSBkZWwgYXJyZWdsbyBkZWwgQGIgZGUgQGRzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgIkVycm9yIG1pZW50cmFzIHNlIGV4cGxvcmFiYSBlbCBAaSAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWllbnRyYXMgc2UgaXRlcmFiYSBzb2JyZSBsb3MgQGJzIGVuIGVsIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGlub2RlIGNvdW50IGluZm9ybWF0aW9uIChpbm9kZT0laSwgY291bnQ9JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2NworbXNnaWQgIkVycm9yIHN0b3JpbmcgQGkgY291bnQgaW5mb3JtYXRpb24gKEBpPSVpLCBjb3VudD0lTik6ICVtXG4iCittc2dzdHIgIiIKKyJFcnJvciBhbCBndWFyZGFyIGxhIGluZm9ybWFjacOzbiBkZSBsYSBjdWVudGEgZGVsIEBpIChAaT0laSwgY3VlbnRhPSVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBkaXJlY3RvcnkgYmxvY2sgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBibG9jaz0lYiwgbnVtPSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzIKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBkIEBiIGluZm9ybWF0aW9uIChAaT0laSwgQGI9JWIsIG51bT0lTik6ICVtXG4iCittc2dzdHIgIiIKKyJFcnJvciBhbCBndWFyZGFyIGxhIGluZm9ybWFjacOzbiBkZWwgQGIgZGUgQGRzIChAaT0laSwgQGI9JWIsIG7Dum09JU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJFcnJvciBhbCBsZWVyIGVsIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgIgorbXNnc3RyICJAaSAlaSB0aWVuZSBwdWVzdGEgbGEgYmFuZGVyYSBpbWFnaWMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChpbm9kZSAlaSkgaGFzIGltbXV0YWJsZVxuCisjLiBALWV4cGFuZGVkOiBvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKEBpICVpKSBoYXMgaW1tdXRhYmxlXG4iCisib3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAiCittc2dzdHIgIiIKKyJFbCBmaWNoZXJvIGVzcGVjaWFsIChkaXNwb3NpdGl2by/Cq3NvY2tldMK7L2ZpZm8vZW5sYWNlIHPDrW1ib2xpY28pIChAaSAlaSlcbiIKKyJubyBlcyBtb2RpZmljYWJsZSBvIHRpZW5lIGxhIGJhbmRlcmEgJ2FwcGVuZC1vbmx5JyAoc8OzbG8gYcOxYWRpcikuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBjb21wcmVzc2lvbiBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgY29tcHJlc3Npb24gc3VwcG9ydC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEBjaW9uIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgQGNpb24gc3VwcG9ydC4gICIKK21zZ3N0ciAiIgorImVsIEBpICVpIHRpZW5lIGxhIGJhbmRlcmEgZGUgQGMgcHVlc3RhIGVuIGVsIEBmIHNpbiBxdWUgbGEgQGMgZXN0w6kgIgorImltcGxlbWVudGFkYS4gICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvKSBpbm9kZSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8pIEBpICVpIGhhcyBub24temVybyBzaXplLiAgIgorbXNnc3RyICIiCisiRWwgZmljaGVybyBlc3BlY2lhbCAoZGlzcG9zaXRpdm8vwqtzb2NrZXTCuy9maWZvKSAoQGkgJWkpXG4iCisidGllbmUgdW4gdGFtYcOxbyBkaXN0aW50byBkZSBjZXJvLiAgIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxMgorbXNnaWQgIkBqIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJFbCBAaSBkZWwgQGogbm8gZXN0w6EgZW4gdXNvLCBwZXJvIGNvbnRpZW5lIGluZm9ybWFjacOzbi4gICIKKworIyBUT0RPIGZpY2hlcm8gcmVndWxhcgorIy4gQC1leHBhbmRlZDogam91cm5hbCBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxNworbXNnaWQgIkBqIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgImVsIEBqIG5vIGVzIHVuIGZpY2hlcm8gcmVndWxhci4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIHdhcyBwYXJ0IG9mIHRoZSBAbyBAaSBsaXN0LiAgIgorbXNnc3RyICJlbCBAaSAlaSBlcmEgcGFydGUgZGUgbGEgbGlzdGEgZGUgbm9kb3MtaSBAb3MuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzI4Cittc2dpZCAiQGlzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gICIKK21zZ3N0ciAiIgorIkxvcyBub2Rvcy1pIGZ1ZXJvbiBwYXJ0ZSBkZSB1bmEgbGlzdGEgZW5sYXphZGEgcXVlIGVzdGFiYSBodcOpcmZhbmEgeSAiCisiZGHDsWFkYS4gICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo3MzMKK21zZ2lkICJAQSByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbiIKK21zZ3N0ciAiQEEgZGUgbGEgZXN0cnVjdHVyYSByZWZjb3VudCAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBmb3IgaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzM4Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiBmb3IgQGkgJWkuICAiCittc2dzdHIgIkVycm9yIGFsIGxlZXIgZWwgQGIgZGVsIEBhICViIHBhcmEgZWwgQGkgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQzCittc2dpZCAiQGkgJWkgaGFzIGEgYmFkIEBhIEBiICViLiAgIgorbXNnc3RyICJAaSAlaSB0aWVuZSB1biBAYiBkZWwgQGEgJWIgZGHDsWFkby4gICIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDgKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkVycm9yIGFsIGxlZXIgZWwgQGIgZGVsIEBhICViICglbSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzUzCittc2dpZCAiQGEgQGIgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgQHMgJU4uICAiCittc2dzdHIgIkVsIEBiIGRlbCBAYSAlYiB0aWVuZSB1bmEgY3VlbnRhIGRlIHJlZmVyZW5jaWEgJXIgeSBAcyAlTi4gICIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTgKK21zZ2lkICJFcnJvciB3cml0aW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkVycm9yIGFsIGVzY3JpYmlyIGVsIEBiIGRlIEBhICViICglbSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgaF9ibG9ja3MgPiAxLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2MworbXNnaWQgIkBhIEBiICViIGhhcyBoX0BicyA+IDEuICAiCittc2dzdHIgIkVsIEBiIGRlbCBAYSAlYiB0aWVuZSBoX0BicyA+IDEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2OAorbXNnaWQgIkBBIEBhIEBiICViLiAgIgorbXNnc3RyICJAQSBkZSBAYSBAYiAlYi4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzMKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAiCittc2dzdHIgImVsIEBiIGRlbCBAYSAlYiBlc3TDoSBkYcOxYWRvIChodWJvIHVuYSBjb2xpc2nDs24gZW4gbGEgcmVzZXJ2YSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChpbnZhbGlkIG5hbWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3OAorbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIG5hbWUpLiAgIgorbXNnc3RyICJlbCBAYiBkZWwgQGEgJWIgZXN0w6EgZGHDsWFkbyAobm9tYnJlIG5vIHbDoWxpZG8pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCB2YWx1ZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzgzCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gdmFsdWUpLiAgIgorbXNnc3RyICJlbCBAYiBkZWwgQGEgJWIgZXN0w6EgZGHDsWFkbyAodmFsb3Igbm8gdsOhbGlkbykuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIHRvbyBiaWcuICAiCittc2dzdHIgImVsIEBpICVpIGVzIGRlbWFzaWFkbyBncmFuZGUuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgY2F1c2VzIGRpcmVjdG9yeSB0byBiZSB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5MgorbXNnaWQgIiVCICglYikgY2F1c2VzIEBkIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikgcHJvdm9jYSBxdWUgZWwgQGQgc2VhIGRlbWFzaWFkbyBncmFuZGUuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk3Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgZmlsZSB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIHByb3ZvY2EgcXVlIGVsIGZpY2hlcm8gc2VhIGRlbWFzaWFkbyBncmFuZGUuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAyCittc2dpZCAiJUIgKCViKSBjYXVzZXMgc3ltbGluayB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIHByb3ZvY2EgcXVlIGVsIGVubGFjZSBzaW1iw7NsaWNvIHNlYSBkZW1hc2lhZG8gZ3JhbmRlLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKyJlbCBAaSAlaSB0aWVuZSBsYSBiYW5kZXJhIElOREVYX0ZMIHB1ZXN0YSBlbiBlbCBAZiBzaW4gZWwgw6FyYm9sLWggIgorImltcGxlbWVudGFkby5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IGJ1dCBpcyBub3QgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgQGQuXG4iCittc2dzdHIgIkBpICVpIHRpZW5lIHB1ZXN0YSBsYSBiYW5kZXJhIElOREVYX0ZMIHBlcm8gbm8gZXMgdW4gQGQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCByb290IG5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIGhhcyBhbiBAbiByb290IG5vZGUuXG4iCittc2dzdHIgIkVsIEBoICVpIHRpZW5lIHVuIG5vZG8gcmHDrXogbm8gdsOhbGlkby5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiB1bnN1cHBvcnRlZCBoYXNoIHZlcnNpb24gKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyMgorbXNnaWQgIkBoICVpIGhhcyBhbiB1bnN1cHBvcnRlZCBoYXNoIHZlcnNpb24gKCVOKVxuIgorbXNnc3RyICJFbCBAaCAlaSB0aWVuZSB1bmEgdmVyc2nDs24gZGUgaGFzaCBubyBpbXBsZW1lbnRhZGEgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuIgorbXNnc3RyICIiCisiRWwgQGggJWkgdXRpbGl6YSB1bmEgYmFuZGVyYSBpbmNvbXBhdGlibGUgcGFyYSBlbCBub2RvIHJhw616IGRlbCDDoXJib2wtaC5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMyCittc2dpZCAiQGggJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbiIKK21zZ3N0ciAiRWwgQGggJWkgdGllbmUgdW5hIHByb2Z1bmRpZGFkICglTikgbXV5IGdyYW5kZVxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGFuIGluZGlyZWN0IGJsb2NrICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIG1ldGFkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzNworbXNnaWQgIiIKKyJCYWQgQGIgQGkgaGFzIGFuIGluZGlyZWN0IEBiICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuIgorIkBmIG1ldGFkYXRhLiAgIgorbXNnc3RyICIiCisiRWwgQGkgZGVsIEBiIGVzdMOhIGRhw7FhZG8geSB0aWVuZSB1biBAYiBpbmRpcmVjdG8gKCViKSBxdWVcbiIKKyJlbnRyYSBlbiBjb25mbGljdG8gY29uIGxhIG1ldGFpbmZvcm1hY2nDs24gZGVsIEBmLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemUgQGkgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uIgorbXNnc3RyICJGYWxsw7MgbGEgKHJlKWNyZWFjacOzbiBkZWwgbm9kby1pIGRlIGNhbWJpbyBkZSB0YW1hw7FvOiAlbS4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGV4dHJhIHNpemUgKCVJUykgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0OAorbXNnaWQgIkBpICVpIGhhcyBhIGV4dHJhIHNpemUgKCVJUykgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiRWwgQGkgJWkgdGllbmUgdW4gdGFtYcOxbyBhZGljaW9uYWwgKCVJUykgcXVlIGVzIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJFbCBAYSBlbiBlbCBAaSAlaSB0aWVuZSB1bmEgbG9uZ2l0dWQgZGUgbm9tYnJlICglTikgcXVlIGVzIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODU4Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiRWwgQGEgZW4gQGkgJWkgdGllbmUgdW4gdmFsb3IgZGUgZGVzcGxhemFtaWVudG8gKCVOKSBxdWUgZXMgQG5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIGJsb2NrICglTikgd2hpY2ggaXMgaW52YWxpZCAobXVzdCBiZSAwKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIEBiICglTikgd2hpY2ggaXMgQG4gKG11c3QgYmUgMClcbiIKK21zZ3N0ciAiRWwgQGEgZW4gZWwgQGkgJWkgdGllbmUgdW4gdmFsb3IgZGUgQGIgKCVOKSBxdWUgZXMgQG4gKGRlYmUgc2VyIDApXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2OAorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJFbCBAYSBlbiBlbCBAaSAlaSB0aWVuZSB1biB2YWxvciBkZSB0YW1hw7FvICglTikgcXVlIGVzIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJFbCBAYSBlbiBlbCBAaSAlaSB0aWVuZSB1biBoYXNoICglTikgcXVlIGVzIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzgKK21zZ2lkICJAaSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4iCittc2dzdHIgIkVsIG5vZG8taSAlaSBlc3TDoSBtYXJjYWRvIGNvbW8gdW4gJUl0IHBlcm8gcGFyZWNlIHNlciB1biBkaXJlY3RvcmlvLlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgZXh0ZW50IHRyZWUgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBAeCB0cmVlIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJFcnJvciBtaWVudHJhcyBzZSBsZcOtYSBlbCDDoXJib2wgZGUgwqtAeHPCuyBlbiBlbCBAaSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBpbm9kZSAlaVxuCisjLiBALWV4cGFuZGVkOiBcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODgKK21zZ2lkICIiCisiRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBAaSAlaVxuIgorIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuIgorbXNnc3RyICIiCisiRmFsbG8gYWwgaXRlcmFyIGxvcyDCq2V4dGVudMK7IGVuIGVsIEBpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBpbnZhbGlkIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk0Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBAbiBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiRWwgQGkgJWkgdGllbmUgdW4gZXh0ZW50IEBuXG4iCisiXHQoQGIgbMOzZ2ljbyAlYywgQGIgZsOtc2ljbyBAbiAlYiwgbG9uZ2l0dWQgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgaW52YWxpZCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk5Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgQG4gbGVuICVOKVxuIgorbXNnc3RyICIiCisiRWwgQGkgJWkgdGllbmUgdW4gwqtleHRlbnTCuyBAblxuIgorIlx0KEBiIGzDs2dpY28gJWMsIEBiIGbDrXNpY28gJWIsIGxvbmdpdHVkIEBuICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbiIKK21zZ3N0ciAiIgorIkVsIEBpICVpIHRpZW5lIGxhIGJhbmRlcmEgRVhURU5UU19GTCBwdWVzdGEgZW4gZWwgQGYgc2luIMKrZXh0ZW50c8K7ICIKKyJpbXBsZW1lbnRhZG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBzdXBlcmJsb2NrIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBAUyBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuIgorbXNnc3RyICIiCisiZWwgQGkgJWkgZXN0w6EgZW4gZm9ybWF0byDCq2V4dGVudMK7LCBwZXJvIGVsIEBTIG5vIHRpZW5lIGxhIGNhcmFjdGVyw61zdGljYSAiCisiRVhURU5UU1xuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbiIKK21zZ3N0ciAiZWwgQGkgJWkgbm8gdGllbmUgRVhURU5UX0ZMLCBwZXJvIGVzdMOhIGVuIGZvcm1hdG8gwqtleHRlbnRzwrtcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdCBzeW1saW5rICVpIGhhcyBFWFRFTlRfRkwgc2V0LiAgIgorbXNnc3RyICJFbCBlbmxhY2Ugc2ltYsOzbGljbyByw6FwaWRvICVpIHRpZW5lIHB1ZXN0byBFWFRFTlRfRkwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI0Cittc2dpZCAiIgorIkBpICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJlbCBAaSAlaSB0aWVuZSDCq2V4dGVudHPCuyBlc3Ryb3BlYWRvc1xuIgorIlx0KEBiIGzDs2dpY28gQG4gJWMsIEBiIGbDrXNpY28gJWIsIGxvbmdpdHVkICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyOAorbXNnaWQgIkBpICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4iCittc2dzdHIgImVsIEBpICVpIHRpZW5lIHVuIG1vZG8gZGUgwqtleHRlbnTCuyBubyB2w6FsaWRvIChibGsgJWIsIGxibGsgJWMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBAYiBAQjogJW1cbiIKK21zZ3N0ciAiRXJyb3IgYWwgY29udmVydGlyIGVsIEBCIGRlIEBicyBkZWwgwqtzdWJjbHVzdGVywrs6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTM4Cittc2dpZCAiQHEgQGkgaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiRWwgQGkgZGUgbGEgQHEgbm8gZXMgdW4gZmljaGVybyBub3JtYWwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0MworbXNnaWQgIkBxIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJFbCBAaSBkZSBsYSBAcSBubyBlc3TDoSBlbiB1c28sIHBlcm8gY29udGllbmUgZGF0b3MuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQ4Cittc2dpZCAiQHEgQGkgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gICIKK21zZ3N0ciAiRWwgQGkgZGUgbGEgQHEgZXMgdmlzaWJsZSBwYXJhIGVsIHVzdWFyaW8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgbG9va3MgaW52YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTMKK21zZ2lkICJUaGUgYmFkIEBiIEBpIGxvb2tzIEBuLiAgIgorbXNnc3RyICJFbCBub2RvLWkgZGUgYmxvcXVlcyBkYcOxYWRvcyBwYXJlY2UgaW52w6FsaWRvLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTU4Cittc2dpZCAiIgorIkBpICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYilcbiIKK21zZ3N0ciAiIgorImVsIEBpICVpIHRpZW5lIMKrZXh0ZW50wrsgZGUgbG9uZ2l0dWQgY2Vyb1xuIgorIlx0KEBiIGzDs2dpY28gQG4gJWMsIEBiIGbDrXNpY28gJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEludGVyaW9yIGV4dGVudCBub2RlIGxldmVsICVOIG9mIGlub2RlICVpOlxuCisjLiBALWV4cGFuZGVkOiBMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NjUKK21zZ2lkICIiCisiSW50ZXJpb3IgQHggbm9kZSBsZXZlbCAlTiBvZiBAaSAlaTpcbiIKKyJMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gICIKK21zZ3N0ciAiIgorIk5pdmVsICVOIGRlIG5vZG8gQHggaW50ZXJpb3IgZGVsIEBpICVpOlxuIgorIkVsIGNvbWllbnpvIGzDs2dpY28gJWIgbm8gY2FzYSBjb24gZWwgY29taWVuem8gbMOzZ2ljbyAlYyBkZWwgc2lndWllbnRlICIKKyJuaXZlbC4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTcxCittc2dpZCAiIgorIkBpICVpLCBlbmQgb2YgZXh0ZW50IGV4Y2VlZHMgYWxsb3dlZCB2YWx1ZVxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJlbCBAaSAlaSwgZmluIGRlIMKrZXh0ZW50wrssIGV4Y2VkZSBlbCB2YWxvciBwZXJtaXRpZG9cbiIKKyJcdChAYiBsw7NnaWNvICVjLCBAYiBmw61zaWNvICViLCBsb25naXR1ZCAlTilcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGJsb2NrICViIHNob3VsZCBiZSBhdCBibG9jayAlYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzcKK21zZ2lkICJAZCBAaSAlaSBAYiAlYiBzaG91bGQgYmUgYXQgQGIgJWMuICAiCittc2dzdHIgIkVsIEBiICViIGRlbCBAaSAlaSBkZSBAZCBkZWJlcsOtYSBlc3RhciBlbiBlbCBAYiAlYy4gICIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBleHRlbnQgbWFya2VkIHVuaW5pdGlhbGl6ZWQgYXQgYmxvY2sgJWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBpICVpIGhhcyBAeCBtYXJrZWQgdW5pbml0aWFsaXplZCBhdCBAYiAlYy4gICIKK21zZ3N0ciAiIgorIkVsIEBpICVpIGRlbCBAZCB0aWVuZSB1biBAeCBtYXJjYWRvIGNvbW8gbm8gaW5pY2lhbGl6YWRvIGVuIGVsIEBiICVjLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBsb2dpY2FsIGJsb2NrICViIChwaHlzaWNhbCBibG9jayAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuCisjLiBALWV4cGFuZGVkOiBXaWxsIGZpeCBpbiBwYXNzIDFCLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4NworbXNnaWQgIiIKKyJAaSAlaSBsb2dpY2FsIEBiICViIChwaHlzaWNhbCBAYiAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuIgorIldpbGwgZml4IGluIHBhc3MgMUIuXG4iCittc2dzdHIgIiIKKyJFbCBAYiBsw7NnaWNvICViIGRlbCBAaSAlaSAoQGIgZsOtc2ljbyAlYykgdmlvbGEgbGFzIHJlZ2xhcyBkZSBhc2lnbmFjacOzbiBkZSAiCisiwqtjbHVzdGVywrsuXG4iCisiU2UgY29ycmVnaXLDoSBlbiBlbCBwYXNvIDFCLlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIGJsb2NrcyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgaW5vZGUuLi5cbgorIy4gQC1leHBhbmRlZDogUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5OTQKK21zZ2lkICIiCisiXG4iCisiUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIEBicyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgQGkuLi5cbiIKKyJQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBAbSBAYnNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlNlIGVqZWN1dGFuIHBhc29zIGFkaWNpb25hbGVzIHBhcmEgcmVzb2x2ZXIgbG9zIEBicyByZWNsYW1hZG9zIHBvciBtw6FzIGRlIHVuICIKKyJAaS4uLlxuIgorIlBhc28gMUI6IFNlIHZ1ZWx2ZW4gYSBleHBsb3JhciBwYXJhIGxvcyBAYnMgcmVjbGFtYWRvcyBlbiBtw7psdGlwbGVzICIKKyJvY2FzaW9uZXNcbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAlaToKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAbSBAYihzKSBpbiBAaSAlaToiCittc2dzdHIgIkJsb3F1ZShzKSByZWNsYW1hZG8ocykgZW4gbcO6bHRpcGxlcyBvY2FzaW9uZXMgZW4gQGkgJWk6IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4iCittc2dzdHIgIkVycm9yIG1pZW50cmFzIHNlIGV4cGxvcmFiYW4gbG9zIG5vZG9zLWkgKCVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKGlub2RlX2R1cF9tYXApOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGkgQEIgKEBpX2R1cF9tYXApOiAlbVxuIgorbXNnc3RyICJAQSBkZWwgQEIgZGVsIEBpIChAaV9kdXBfbWFwKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWllbnRyYXMgc2UgaXRlcmFiYSBzb2JyZSBsb3MgQGJzIGVuIGVsIEBpICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzMCBlMmZzY2svcHJvYmxlbS5jOjEzNDUKK21zZ2lkICJFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIEBhIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIiIKKyJFcnJvciBhbCBhanVzdGFyIGxhIGN1ZW50YSBkZSByZWZlcmVuY2lhIHBhcmEgZWwgQGIgZGVsIEBhICViIChAaSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzUKK21zZ2lkICJQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgQGlzIHdpdGggQG0gQGJzXG4iCittc2dzdHIgIiIKKyJQYXNvIDFDOiBFeHBsb3JhbmRvIGxvcyBkaXJlY3RvcmlvcyBwYXJhIGJ1c2NhciBub2Rvcy1pIGNvbiBAYnMgcmVjbGFtYWRvcyAiCisiZW4gbcO6bHRpcGxlcyBvY2FzaW9uZXNcbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDQxCittc2dpZCAiUGFzcyAxRDogUmVjb25jaWxpbmcgQG0gQGJzXG4iCittc2dzdHIgIlBhc28gMUQ6IFJlY29uY2lsaWFuZG8gbG9zIEBicyByZWNsYW1hZG9zIGVuIG3Dumx0aXBsZXMgb2Nhc2lvbmVzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpbGUgJVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKSBcbgorIy4gQC1leHBhbmRlZDogICBoYXMgJXIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDQ2Cittc2dpZCAiIgorIkZpbGUgJVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKSBcbiIKKyIgIGhhcyAlciBAbSBAYihzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbiIKK21zZ3N0ciAiIgorIkVsIGZpY2hlcm8gJVEgKEBpICMlaSwgZmVjaGEgZGUgbW9kaWZpY2FjacOzbiAlSU0pXG4iCisidGllbmUgJXIgQGIocykgcmVjbGFtYWRvKHMpIGVuIG3Dumx0aXBsZXMgb2Nhc2lvbmVzLCBjb21wYXJ0aWRvKHMpIGNvbiAlTiAiCisiZmljaGVybyhzKTpcbiIKKworIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1MgorbXNnaWQgIlx0JVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKVxuIgorbXNnc3RyICJcdCVRIChAaSAjJWksIGZlY2hhIGRlIG1vZGlmaWNhY2nDs24gJUlNKVxuIgorCisjLiBALWV4cGFuZGVkOiBcdDxmaWxlc3lzdGVtIG1ldGFkYXRhPlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTcKK21zZ2lkICJcdDxAZiBtZXRhZGF0YT5cbiIKK21zZ3N0ciAiXHQ8bWV0YWRhdG9zIGRlbCBAZj5cbiIKKworIy4gQC1leHBhbmRlZDogKFRoZXJlIGFyZSAlTiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjIKK21zZ2lkICIiCisiKFRoZXJlIGFyZSAlTiBAaXMgY29udGFpbmluZyBAbSBAYnMuKVxuIgorIlxuIgorbXNnc3RyICIiCisiKEhheSAlTiBub2Rvcy1pIHF1ZSBjb250aWVuZW4gQGJzIHJlY2xhbWFkb3MgZW4gbcO6bHRpcGxlcyBvY2FzaW9uZXMuKVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY3Cittc2dpZCAiIgorIkBtIEBicyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiTG9zIEBicyByZWNsYW1hZG9zIGVuIG3Dumx0aXBsZXMgb2Nhc2lvbmVzIHlhIHNlIHJlYXNpZ25hcm9uIG8gc2UgY2xvbmFyb24uXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjbG9uZSBmaWxlOiAlbVxuIgorbXNnc3RyICJObyBzZSBwdWVkZSBjbG9uYXIgZWwgZmljaGVybzogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4NgorbXNnaWQgIlBhc3MgMjogQ2hlY2tpbmcgQGQgc3RydWN0dXJlXG4iCittc2dzdHIgIlBhc28gMjogVmVyaWZpY2FuZG8gbGEgZXN0cnVjdHVyYSBkZSBAZHNcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBpbm9kZSBudW1iZXIgZm9yICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJAbiBAaSBudW1iZXIgZm9yICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiTsO6bWVybyBAbiBkZWwgQGkgcGFyYSAnLicgZW4gZWwgQGkgZGVsIEBkICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbnZhbGlkIGlub2RlICM6ICVEaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDk2Cittc2dpZCAiQEUgaGFzIEBuIEBpICM6ICVEaS5cbiIKK21zZ3N0ciAiQEUgdGllbmUgdW4gQGkgQG4gIzogJURpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSAlRGkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwMQorbXNnaWQgIkBFIGhhcyBARC91bnVzZWQgQGkgJURpLiAgIgorbXNnc3RyICJARSB0aWVuZSB1biBAaSAlRGkgQEQvbm8gdXRpbGl6YWRvLiAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA2Cittc2dpZCAiQEUgQEwgdG8gJy4nICAiCittc2dzdHIgIkBFIEBMIGEgJy4nICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcG9pbnRzIHRvIGlub2RlICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExMQorbXNnaWQgIkBFIHBvaW50cyB0byBAaSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIEBiLlxuIgorbXNnc3RyICJARSBhcHVudGEgYWwgQGkgKCVEaSkgdWJpY2FkbyBlbiB1biBAYiBkYcOxYWRvLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byBkaXJlY3RvcnkgJVAgKCVEaSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExNgorbXNnaWQgIkBFIEBMIHRvIEBkICVQICglRGkpLlxuIgorbXNnc3RyICJARSBATCBhbCBAZCAlUCAoJURpKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gdGhlIHJvb3QgaW5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEyMQorbXNnaWQgIkBFIEBMIHRvIHRoZSBAci5cbiIKK21zZ3N0ciAiQEUgQEwgYWwgQHIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI2Cittc2dpZCAiQEUgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbiIKK21zZ3N0ciAiTGEgQEUgY29udGllbmUgY2FyYWN0ZXJlcyBubyB2w6FsaWRvcyBlbiBlbCBub21icmUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJGYWx0YSAnLicgZW4gZWwgQGQgQGkgJWkuXG4iCisKKyMgVE9ETyBkZWwgLT4gZGUKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4uJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIkZhbHRhICcuLicgZW4gZWwgQGkgZGVsIEBkICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBGaXJzdCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKSBzaG91bGQgYmUgJy4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0MQorbXNnaWQgIkZpcnN0IEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpICglcCkgQHMgJy4nXG4iCittc2dzdHIgIkxhIHByaW1lcmEgQGUgJyVEbicgKEBpPSVEaSkgZW4gZWwgQGkgZGVsIEBkICVpICglcCkgQHMgJy4nXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNlY29uZCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgc2hvdWxkIGJlICcuLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQ2Cittc2dpZCAiU2Vjb25kIEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpIEBzICcuLidcbiIKK21zZ3N0ciAiTGEgc2VndW5kYSBAZSAnJURuJyAoQGk9JURpKSBlbiBlbCBAaSBkZWwgQGQgJWkgQHMgJy4uJ1xuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZhZGRyIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJRiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1MQorbXNnaWQgImlfZmFkZHIgQEYgJUlGLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJFbCBpX2ZhZGRyIEBGICVJRiwgQHMgY2Vyby5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTYKK21zZ2lkICJpX2ZpbGVfYWNsIEBGICVJZiwgQHMgemVyby5cbiIKK21zZ3N0ciAiRWwgaV9maWxlX2FjbCBARiAlSWYsIEBzIGNlcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZGlyX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWQsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjEKK21zZ2lkICJpX2Rpcl9hY2wgQEYgJUlkLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJFbCBpX2Rpcl9hY2wgQEYgJUlkLCBAcyBjZXJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZyYWcgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjYKK21zZ2lkICJpX2ZyYWcgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIkVsIGlfZnJhZyBARiAlTiwgQHMgY2Vyby5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mc2l6ZSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE3MQorbXNnaWQgImlfZnNpemUgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIkVsIGlfZnNpemUgQEYgJU4sIEBzIGNlcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZSAoJUltKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTc2Cittc2dpZCAiQGkgJWkgKCVRKSBoYXMgQG4gbW9kZSAoJUltKS5cbiIKK21zZ3N0ciAiRWwgQGkgJWkgKCVRKSB0aWVuZSB1biBtb2RvIEBuICglSW0pLlxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGRpcmVjdG9yeSBjb3JydXB0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTgxCittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IEBkIGNvcnJ1cHRlZFxuIgorbXNnc3RyICJFbCBAaSBkZWwgQGQgJWksICVCLCBkZXNwbGF6YW1pZW50byAlTjogZWwgQGQgZXN0w6EgZGHDsWFkb1xuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4NgorbXNnaWQgIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuIgorbXNnc3RyICIiCisiRWwgQGkgZGVsIEBkICVpLCAlQiwgZGVzcGxhemFtaWVudG8gJU46IGVsIG5vbWJyZSBkZWwgZmljaGVybyBlcyBtdXkgbGFyZ29cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiB1bmFsbG9jYXRlZCAlQi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTkxCittc2dpZCAiQGQgQGkgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgIgorbXNnc3RyICJFbCBAaSAlaSBkZWwgQGQgdGllbmUgdW4gJUIgcXVlIG5vIGVzdMOhIHJlc2VydmFkby4gICIKKworIy4gQC1leHBhbmRlZDogJy4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiTGEgQGUgZW4gZWwgQGQgJy4nIGVuIGVsIEBpIGRlbCBAZCAlaSBubyBlc3TDoSB0ZXJtaW5hZGEgY29uIE5VTExcbiIKKworIy4gQC1leHBhbmRlZDogJy4uJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIicuLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICJMYSBAZSBhbCBAZCAnLi4nIGVuIGVsIEBpICVpIGRlbCBAZCBubyBlc3TDoSB0ZXJtaW5hZGEgY29uIE5VTExcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGNoYXJhY3RlciBkZXZpY2UuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwNgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgY2hhcmFjdGVyIEB2LlxuIgorbXNnc3RyICJFbCBAaSAlaSAoJVEpIGVzIHVuIEB2IGRlIGNhcsOhY3RlciBASS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGJsb2NrIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjExCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBAYiBAdi5cbiIKK21zZ3N0ciAiRWwgQGkgJWkgKCVRKSBlcyB1biBAdiBkZSBAYiBASS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTYKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4nIEBlLlxuIgorbXNnc3RyICJMYSBARSBlc3TDoSBkdXBsaWNhZGEgZW4gbGEgQGUgJy4nLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLi4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjEKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4uJyBAZS5cbiIKK21zZ3N0ciAiTGEgQEUgZXN0w6EgZHVwbGljYWRhIGVuIGxhIEBlICcuLicuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNiBlMmZzY2svcHJvYmxlbS5jOjE1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICJFcnJvciBpbnRlcm5vOiBubyBzZSBwdWVkZSBlbmNvbnRyYXIgZWwgZGlyX2luZm8gcGFyYSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgcmVjX2xlbiBvZiAlRHIsIHNob3VsZCBiZSAlTi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjMxCittc2dpZCAiQEUgaGFzIHJlY19sZW4gb2YgJURyLCBAcyAlTi5cbiIKK21zZ3N0ciAiTGEgQEUgdGllbmUgdW4gcmVjX2xlbiBkZSAlRHIgeSBAcyAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IHN0cnVjdHVyZTogJW1cbiIKK21zZ3N0ciAiQEEgZGUgbGEgZXN0cnVjdHVyYSBpY291bnQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGl0ZXJhdGluZyBvdmVyIGRpcmVjdG9yeSBibG9ja3M6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpdGVyYXRpbmcgb3ZlciBAZCBAYnM6ICVtXG4iCittc2dzdHIgIkVycm9yIGFsIGl0ZXJhciBzb2JyZSBsb3MgQGJzIGRlbCBAZDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQ2Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJFcnJvciBhbCBsZWVyIGVsIEBiICViIGRlbCBAZCAoQGkgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTEKK21zZ2lkICJFcnJvciB3cml0aW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkVycm9yIGFsIGVzY3JpYmlyIGVsIEBiICViIGRlbCBAZCAoQGkgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2sgZm9yIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBuZXcgQGQgQGIgZm9yIEBpICVpICglcyk6ICVtXG4iCittc2dzdHIgIkBBIGRlbCBAYiBkZWwgQGQgcGFyYSBlbCBAaSAlaSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBkZWFsbG9jYXRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWFsbG9jYXRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkVycm9yIGFsIGxpYmVyYXIgZWwgQGkgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBlbnRyeSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGQgQGUgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbiIKK21zZ3N0ciAiTGEgQGUgZGVsIEBkIHBhcmEgJy4nIGVuICVwICglaSkgZXMgZ3JhbmRlLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgRklGTy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjcxCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBGSUZPLlxuIgorbXNnc3RyICJFbCBAaSAlaSAoJVEpIGVzIHVuIEZJRk8gQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBzb2NrZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3NgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgc29ja2V0LlxuIgorbXNnc3RyICJFbCBAaSAlaSAoJVEpIGVzIHVuIHPDs2NrZXQgQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICclRG4nIGluICVwICglaSkgdG8gJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4MQorbXNnaWQgIlNldHRpbmcgZmlsZXR5cGUgZm9yIEBFIHRvICVOLlxuIgorbXNnc3RyICJTZSBwb25lIGVsIHRpcG8gZGUgZmljaGVybyBwYXJhIGxhIEBFIGEgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgc2hvdWxkIGJlICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjg2Cittc2dpZCAiQEUgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgQHMgJU4pLlxuIgorbXNnc3RyICJMYSBARSB0aWVuZSB1biB0aXBvIGRlIGZpY2hlcm8gaW5jb3JyZWN0byAoZXJhICVEdCB5IEBzICVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZmlsZXR5cGUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTEKK21zZ2lkICJARSBoYXMgZmlsZXR5cGUgc2V0LlxuIgorbXNnc3RyICJMYSBARSB0aWVuZSBwdWVzdG8gZWwgdGlwbyBkZSBmaWNoZXJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIHplcm8tbGVuZ3RoIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5NgorbXNnaWQgIkBFIGhhcyBhIEB6IG5hbWUuXG4iCittc2dzdHIgIkxhIEBFIHRpZW5lIHVuIG5vbWJyZSBkZSBAei5cbiIKKworIy4gQC1leHBhbmRlZDogU3ltbGluayAlUSAoaW5vZGUgIyVpKSBpcyBpbnZhbGlkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDEKK21zZ2lkICJTeW1saW5rICVRIChAaSAjJWkpIGlzIEBuLlxuIgorbXNnc3RyICJFbCBlbmxhY2Ugc2ltYsOzbGljbyAlUSAoQGkgIyVpKSBlcyBAbi5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGZvciBpbm9kZSAlaSAoJVEpIGlzIGludmFsaWQgKCVJZikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMwNgorbXNnaWQgIkBhIEBiIEBGIEBuICglSWYpLlxuIgorbXNnc3RyICJFbCBAYiBkZWwgQGEgQEYgZXMgQG4gKCVJZikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzExCittc2dpZCAiQGYgY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gQFMuXG4iCittc2dzdHIgIiIKKyJFbCBAZiBjb250aWVuZSBmaWNoZXJvcyBtdXkgZ3JhbmRlcywgcGVybyBubyB0aWVuZSBsYSBiYW5kZXJhIExBUkdFX0ZJTEUgZW4gIgorImVsIEBTLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgbm90IHJlZmVyZW5jZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzE2Cittc2dpZCAiQHAgQGggJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4iCittc2dzdHIgIkhheSB1biBAcCBlbCBAaCAlZDogJUIgbm8gaGEgc2lkbyByZWZlcmVuY2lhZG9cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzIxCittc2dpZCAiQHAgQGggJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbiIKK21zZ3N0ciAiSGF5IHVuIEBwIGVsIEBoICVkOiAlQiBoYSBzaWRvIHJlZmVyZW5jaWFkbyBkb3MgdmVjZXNcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI2Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbiIKK21zZ3N0ciAiSGF5IHVuIEBlbiBlbCBAaCAlZDogJUIgdGllbmUgdW4gaGFzaCBtw61uaW1vIGluY29ycmVjdG9cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMxCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbiIKK21zZ3N0ciAiSGF5IHVuIEBwIGVsIEBoICVkOiAlQiB0aWVuZSB1biBoYXNoIG3DoXhpbW8gaW5jb3JyZWN0b1xuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMzYKK21zZ2lkICJAbiBAaCAlZCAoJXEpLiAgIgorbXNnc3RyICJFbCBAaCAlZCBlcyBAbiAoJXEpLiAgIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpOiBiYWQgYmxvY2sgbnVtYmVyICViLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNDAKK21zZ2lkICJAcCBAaCAlZCAoJXEpOiBiYWQgQGIgbnVtYmVyICViLlxuIgorbXNnc3RyICJIYXkgdW4gQHAgZWwgQGggJWQgKCVxKTogZWwgbsO6bWVybyBkZWwgQGIgJWIgZXMgaW5jb3JyZWN0by5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6IHJvb3Qgbm9kZSBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJAcCBAaCAlZDogcm9vdCBub2RlIGlzIEBuXG4iCittc2dzdHIgIkhheSB1biBAcCBlbCBAaCAlZDogZWwgbm9kbyByYcOteiBlcyBAbi5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGxpbWl0ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzU1Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBsaW1pdCAoJU4pXG4iCittc2dzdHIgIkhheSB1biBAcCBlbCBAaCAlZDogJUIgdGllbmUgdW4gbMOtbWl0ZSBAbiAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBjb3VudCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gY291bnQgKCVOKVxuIgorbXNnc3RyICJIYXkgdW4gQHAgZWwgQGggJWQ6ICVCIHRpZW5lIHVuYSBjdWVudGEgQG4gKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2NQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbiIKK21zZ3N0ciAiSGF5IHVuIEBwIGVsIEBoICVkOiAlQiB0aWVuZSB1bmEgdGFibGEgZGUgaGFzaCBubyBvcmRlbmFkYVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgZGVwdGggKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzAKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGRlcHRoICglTilcbiIKK21zZ3N0ciAiSGF5IHVuIEBwIGVsIEBoICVkOiAlQiB0aWVuZSB1bmEgcHJvZnVuZGlkYWQgcXVlIG5vIGVzIHbDoWxpZGEgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgaW4gJXAgKCVpKSBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzc1Cittc2dpZCAiRHVwbGljYXRlIEBFIGZvdW5kLiAgIgorbXNnc3RyICJARSBlc3TDoSBkdXBsaWNhZGEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbgorIy4gQC1leHBhbmRlZDogUmVuYW1lIHRvICVzCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODAKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiIgorIkBFIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4iCisiUmVuYW1lIHRvICVzIgorbXNnc3RyICIiCisiTGEgQEUgdGllbmUgdW4gbm9tYnJlIGRlIGZpY2hlcm8gbm8gw7puaWNvLlxuIgorIlNlIGNhbWJpYSBlbCBub21icmUgYSAlcyIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGZvdW5kLlxuCisjLiBALWV4cGFuZGVkOiBcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzg1Cittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisiU2UgZW5jb250csOzIHVuYSBAZSBkdXBsaWNhZGEgJyVEbicuXG4iCisiXHRTZSBtYXJjYSAlcCAoJWkpIHBhcmEgc2VyIHJlY29uc3RydWlkby5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogaV9ibG9ja3NfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTAKK21zZ2lkICJpX2Jsb2Nrc19oaSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiRWwgaV9ibG9ja3NfaGkgQEYgJU4sIEBzIGNlcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFVuZXhwZWN0ZWQgYmxvY2sgaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5NQorbXNnaWQgIlVuZXhwZWN0ZWQgQGIgaW4gQGggJWQgKCVxKS5cbiIKK21zZ3N0ciAiQGIgaW5lc3BlcmFkbyBlbiBlbCBAaCAlZCAoJXEpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGluIGdyb3VwICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTkKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBpbiBAZyAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbiIKK21zZ3N0ciAiIgorIkBFIGhhY2UgcmVmZXJlbmNpYSBhbCBAaSAlRGkgZGVsIEBnICVnIGVuIGVsIHF1ZSBfSU5PREVfVU5JTklUIGVzdMOhIHB1ZXN0by5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBmb3VuZCBpbiBncm91cCAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDA0Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgZm91bmQgaW4gQGcgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4iCittc2dzdHIgIiIKKyJARSBoYWNlIHJlZmVyZW5jaWEgYWwgQGkgJURpIGVuY29udHJhZG8gZW4gbGEgem9uYSBkZSBub2Rvcy1pIG5vIHV0aWxpemFkb3MgIgorImRlbCBAZyAlZy5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbF9oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwOQorbXNnaWQgImlfZmlsZV9hY2xfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIkVsIGlfZmlsZV9hY2wgQEYgJU4sIEBzIGNlcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MTYKK21zZ2lkICJQYXNzIDM6IENoZWNraW5nIEBkIGNvbm5lY3Rpdml0eVxuIgorbXNnc3RyICJQYXNvIDM6IFJldmlzYW5kbyBsYSBjb25lY3RpdmlkYWQgZGUgZGlyZWN0b3Jpb3NcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjEKK21zZ2lkICJAciBub3QgYWxsb2NhdGVkLiAgIgorbXNnc3RyICJFbCBAciBubyBoYSBzaWRvIHJlc2VydmFkby4gICIKKworIy4gQC1leHBhbmRlZDogTm8gcm9vbSBpbiBsb3N0K2ZvdW5kIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDI2Cittc2dpZCAiTm8gcm9vbSBpbiBAbCBAZC4gICIKK21zZ3N0ciAiTm8gaGF5IGVzcGFjaW8gZW4gZWwgQGQgQGwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIkVsIEBkIGRlbCBAaSAlaSAoJXApIGVzdMOhIGRlc2NvbmVjdGFkb1xuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBub3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzNgorbXNnaWQgIi9AbCBub3QgZm91bmQuICAiCittc2dzdHIgIk5vIHNlIGVuY29udHLDsyAvQGwuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBzaG91bGQgYmUgJXEgKCVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQxCittc2dpZCAiJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIEBzICVxICglZCkuXG4iCittc2dzdHIgIicuLicgZW4gJVEgKGkpIGVzICVQICglaikgeSBkZWJlcsOtYSBzZXIgJXEgKCVkKS5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIG9yIG5vbi1leGlzdGVudCAvbG9zdCtmb3VuZC4gIENhbm5vdCByZWNvbm5lY3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ0NgorbXNnaWQgIkJhZCBvciBub24tZXhpc3RlbnQgL0BsLiAgQ2Fubm90IHJlY29ubmVjdC5cbiIKK21zZ3N0ciAiRWwgL0BsIG5vIGV4aXN0ZSBvIGVzdMOhIGRhw7FhZG8uICBObyBzZSBwdWVkZSByZWNvbmVjdGFyLlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZCBub3QgZXhwYW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGV4cGFuZCAvQGw6ICVtXG4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIGV4cGFuZGlyIC9AbDogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWNvbm5lY3QgJWk6ICVtXG4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIHJlY29uZWN0YXIgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL0BsOiAlbVxuIgorbXNnc3RyICJFcnJvciBtaWVudHJhcyBzZSBpbnRlbnRhYmEgZW5jb250cmFyIC9AbDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19ibG9jazogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfQGI6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgImV4dDJmc19uZXdfYmxvY2s6ICVtIG1pZW50cmFzIHNlIGludGVudGFiYSBjcmVhciBlbCBAZCAvQGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfaW5vZGU6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BpOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X2lub2RlOiAlbSBjdWFuZG8gc2UgaW50ZW50YWJhIGNyZWFyIGVsIEBkIC9AbC5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfZGlyX0BiOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgQGQgQGJcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIG1pZW50cmFzIHNlIGNyZWFiYSB1biBudWV2byBAYiBkZSBAZC5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazogJW0gd2hpbGUgd3JpdGluZyB0aGUgZGlyZWN0b3J5IGJsb2NrIGZvciAvbG9zdCtmb3VuZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gd2hpbGUgd3JpdGluZyB0aGUgQGQgQGIgZm9yIC9AbFxuIgorbXNnc3RyICJleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSBtaWVudHJhcyBzZSBlc2NyaWLDrWEgZWwgQGIgZGUgQGQgcGFyYSAvQGxcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgYWRqdXN0aW5nIGlub2RlIGNvdW50IG9uIGlub2RlICVpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBhZGp1c3RpbmcgQGkgY291bnQgb24gQGkgJWlcbiIKK21zZ3N0ciAiRXJyb3IgbWllbnRyYXMgc2UgYWp1c3RhYmEgbGEgY3VlbnRhIGRlbCBAaSBlbiBlbCBAaSAlaVxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgYXJyZWdsYXIgYWwgcGFkcmUgZGVsIEBpICVpOiAlbVxuIgorIlxuIgorCisjIGVsIHBhZHJlCisjIFBlcmTDs24sIG5vIGVudGllbmRvLCBzZSBpbnRlbnRhIGFycmVnbGFyIEFMIHBhZHJlLCBubyBFTCBwYWRyZSBkZSB1biBkaXJlY3RvcmlvLgorIyBIYXkgYWxndW5hIHJlZ2xhIHF1ZSBzZSBtZSBlc2NhcGU/IG1tCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBkaXJlY3RvcnkgZW50cnlcbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgQGQgQGVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGFycmVnbGFyIGFsIHBhZHJlIGRlbCBAaSAlaTogbm8gc2UgcHVlZGUgZW5jb250cmFyIGxhIEBlIGFsIEBkICIKKyJwYWRyZVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJFcnJvciBhbCBjcmVhciBlbCBAZCByYcOteiAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyAvbG9zdCtmb3VuZCBkaXJlY3RvcnkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIC9AbCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJFcnJvciBhbCBjcmVhciBlbCBAZCAvQGwgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3Rvcnk7IGFib3J0aW5nLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MTYKK21zZ2lkICJAciBpcyBub3QgYSBAZDsgYWJvcnRpbmcuXG4iCittc2dzdHIgIkVsIEByIG5vIGVzIHVuIEBkOyBzZSBmaW5hbGl6YSBsYSBvcGVyYWNpw7NuLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIxCittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICJObyBzZSBwdWVkZSBwcm9jZWRlciBzaW4gdW4gQHIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIGlzIG5vdCBhIGRpcmVjdG9yeSAoaW5vPSVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiL0BsIGlzIG5vdCBhIEBkIChpbm89JWkpXG4iCittc2dzdHIgIkVsIC9AbCBubyBlcyB1biBAZCAoaW5vPSVpKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzgKK21zZ2lkICJQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzXG4iCittc2dzdHIgIlBhc28gM0E6IE9wdGltaXphbmRvIGRpcmVjdG9yaW9zXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRpcnNfdG9faGFzaCBpdGVyYXRvcjogJW1cbiIKK21zZ3N0ciAiRmFsbG8gYWwgY3JlYXIgZWwgaXRlcmFkb3IgZGlyc190b19oYXNoOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDgKK21zZ2lkICJGYWlsZWQgdG8gb3B0aW1pemUgZGlyZWN0b3J5ICVxICglZCk6ICVtXG4iCittc2dzdHIgIkZhbGxvIGFsIG9wdGltaXphciBlbCBkaXJlY3RvcmlvICVxICglZCk6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU1MworbXNnaWQgIk9wdGltaXppbmcgZGlyZWN0b3JpZXM6ICIKK21zZ3N0ciAiT3B0aW1pemFuZG8gZGlyZWN0b3Jpb3M6ICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcwCittc2dpZCAiUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzXG4iCittc2dzdHIgIlBhc28gNDogUmV2aXNhbmRvIGxhcyBjdWVudGFzIGRlIHJlZmVyZW5jaWFcbiIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCB6ZXJvLWxlbmd0aCBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEB6IEBpICVpLiAgIgorbXNnc3RyICJAaSAlaSBxdWUgdGllbmUgQHogZXN0w6EgQHUuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEBpICVpXG4iCittc2dzdHIgImVsIEBpICVpIGVzdMOhIEB1XG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg1Cittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgIkxhIGN1ZW50YSBkZSByZWZlcmVuY2lhIGRlbCBAaSAlaSBlcyAlSWwsIHkgQHMgJU4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4OQorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiwqFBVEVOQ0nDk046IEVSUk9SIERFIFBST0dSQU1BQ0nDk04gRU4gRTJGU0NLIVxuIgorIlx0TyBBTEfDmk4gVEFSQURPIChVU1RFRCkgRVNUw4EgUkVWSVNBTkRPIFVOIFNJU1RFTUEgREUgRklDSEVST1MgTU9OVEFETyAiCisiKFZJVk8pLlxuIgorImlub2RlX2xpbmtfaW5mb1slaV0gZXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgZXMgJUlsLiAgwqFZIGRlYmVyw61hbiBzZXIgZWwgIgorIm1pc21vIVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb25cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTk5Cittc2dpZCAiUGFzcyA1OiBDaGVja2luZyBAZyBzdW1tYXJ5IGluZm9ybWF0aW9uXG4iCittc2dzdHIgIlBhc28gNTogUmV2aXNhbmRvIGVsIHJlc3VtZW4gZGUgaW5mb3JtYWNpw7NuIGRlIGdydXBvc1xuIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBpbm9kZSBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDQKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAaSBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIk5vIGVzdMOhIHB1ZXN0byBlbCByZWxsZW5vIGFsIGZpbmFsIGRlbCBAQiBkZWwgQGkuICIKKworIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgYmxvY2sgYml0bWFwIGlzIG5vdCBzZXQuIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjA5Cittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGIgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICJObyBlc3TDoSBwdWVzdG8gZWwgcmVsbGVubyBhbCBmaW5hbCBkZWwgQEIgZGVsIEBiLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MTQKK21zZ2lkICJAYiBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJEaWZlcmVuY2lhcyBkZWwgQEIgZGVsIEBiOiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MzQKK21zZ2lkICJAaSBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJEaWZlcmVuY2lhcyBkZWwgQEIgZGVsIEBpOiAiCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjU0Cittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICIiCisiTGEgY3VlbnRhIGRlIG5vZG9zLWkgbGlicmVzIGVzIGluY29ycmVjdGEgcGFyYSBlbCBAZyAjJWcgKCVpLCBjb250YWRvcz0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IERpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjU5Cittc2dpZCAiRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICIiCisiTGEgY3VlbnRhIGRlIGRpcmVjdG9yaW9zIGVzIGluY29ycmVjdGEgcGFyYSBAZyAjJWcgKCVpLCBjb250YWRvcz0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgaW5vZGVzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2NAorbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIkxhIGN1ZW50YSBkZSBub2Rvcy1pIGxpYnJlcyBlcyBpbmNvcnJlY3RhICglaSwgY29udGFkb3M9JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2OQorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiIgorIkxhIGN1ZW50YSBkZSBAYnMgbGlicmVzIGVzIGluY29ycmVjdGEgcGFyYSBlbCBAZyAjJWcgKCViLCBjb250YWRvcz0lYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY3NAorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIkxhIGN1ZW50YSBkZSBAYnMgbGlicmVzIGVzIGluY29ycmVjdGEgKCViLCBjb250YWRvcz0lYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBST0dSQU1NSU5HIEVSUk9SOiBmaWxlc3lzdGVtICgjJU4pIGJpdG1hcCBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBiaXRtYXAgCisjLiBALWV4cGFuZGVkOiBlbmRwb2ludHMgKCVpLCAlailcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjc5Cittc2dpZCAiIgorIlBST0dSQU1NSU5HIEVSUk9SOiBAZiAoIyVOKSBAQiBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBAQiAiCisiZW5kcG9pbnRzICglaSwgJWopXG4iCittc2dzdHIgIiIKKyJFUlJPUiBERSBQUk9HUkFNQUNJw5NOOiBlbCBAZiAoIyVOKSBsb3MgcHVudG9zIGZpbmFsZXMgZGVsICVCICglYiwgJWMpIG5vICIKKyJjb2luY2lkZW4gY29uIGxvcyBwdW50b3MgZmluYWxlcyBkZWwgQEIgY2FsY3VsYWRvcyAoJWksICVqKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2ODUKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogZnVkZ2luZyBlbmQgb2YgYml0bWFwICglTilcbiIKK21zZ3N0ciAiRXJyb3IgaW50ZXJubzogZWwgZmluYWwgZGVsIGJpdG1hcCBubyB0aWVuZSBzZW50aWRvICglTilcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBpbm9kZSBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBpIEBCOiAlbVxuIgorbXNnc3RyICJFcnJvciBhbCBjb3BpYXIgZWwgcmVlbXBsYXpvIGRlbCBAaSBAQjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBiIEBCOiAlbVxuIgorbXNnc3RyICJFcnJvciBhbCBjb3BpYXIgZWwgcmVlbXBsYXpvIGRlbCBAYiBAQjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgYmxvY2socykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAYihzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbiIKK21zZ3N0ciAiIgorIkVsKGxvcykgQGIocykgZGVsIEBnICVnIGVzdMOhKG4pIGVuIHVzbywgcGVybyBlbCBncnVwbyBlc3TDoSBldGlxdWV0YWRvIGNvbW8gIgorIkJMT0NLX1VOSU5JVFxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBpbm9kZShzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBpKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuIgorbXNnc3RyICIiCisiRWwobG9zKSBub2RvKHMpLWkgZGVsIEBnICVnIGVzdMOhKG4pIGVuIHVzbywgcGVybyBlbCBncnVwbyBlc3TDoSBldGlxdWV0YWRvICIKKyJjb21vIElOT0RFX1VOSU5JVFxuIgorCisjLiBALWV4cGFuZGVkOiBSZWNyZWF0ZSBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MzIKK21zZ2lkICJSZWNyZWF0ZSBAaiIKK21zZ3N0ciAiUmVjcmVhciBlbCBAaiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzM3Cittc2dpZCAiVXBkYXRlIHF1b3RhIGluZm8gZm9yIHF1b3RhIHR5cGUgJU4iCittc2dzdHIgIkFjdHVhbGl6YXIgbGEgaW5mb3JtYWNpw7NuIGRlIGN1b3RhIHBhcmEgZWwgdGlwbyBkZSBjdW90YSAlTiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc2V0dGluZyBibG9jayBncm91cCBjaGVja3N1bSBpbmZvOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBAYiBAZyBjaGVja3N1bSBpbmZvOiAlbVxuIgorbXNnc3RyICJFcnJvciBhbCBwb25lciBsYSBpbmZvcm1hY2nDs24gZGUgwqtjaGVja3N1bcK7IGRlbCBncnVwbyBkZSBibG9xdWVzOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBmaWxlIHN5c3RlbSBpbmZvOiAlbVxuIgorbXNnc3RyICJFcnJvciBhbCBlc2NyaWJpciBsYSBpbmZvcm1hY2nDs24gZGVsIHNpc3RlbWEgZGUgZmljaGVyb3M6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBmbHVzaGluZyB3cml0ZXMgdG8gc3RvcmFnZSBkZXZpY2U6ICVtXG4iCittc2dzdHIgIiIKKyJFcnJvciBhbCBoYWNlciBlZmVjdGl2YXMgbGFzIGVzY3JpdHVyYXMgZW4gZWwgZGlzcG9zaXRpdm8gZGUgYWxtYWNlbmFtaWVudG86ICIKKyIlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5oYW5kbGVkIGVycm9yIGNvZGUgKDB4JXgpIVxuIgorbXNnc3RyICLCoUPDs2RpZ28gZGUgZXJyb3Igbm8gcHJldmlzdG8gKDB4JXgpIVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5OTYgZTJmc2NrL3Byb2JsZW0uYzoyMDAwCittc2dpZCAiSUdOT1JFRCIKK21zZ3N0ciAiU0UgSUdOT1JBIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWQsIGVsYXBzZWQgdGltZTogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKK21zZ3N0ciAiTWVtb3JpYSB1dGlsaXphZGE6ICVkLCB0aWVtcG8gdHJhbnNjdXJyaWRvOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzaXplIG9mIGlub2RlPSVkXG4iCittc2dzdHIgInRhbWHDsW8gZGVsIG5vZG8taT0lZFxuIgorCisjIFRPRE8gY29tZW56YWJhIC0+IGNvbWVuemFiYW4KKyM6IGUyZnNjay9zY2FudGVzdC5jOjExOQorbXNnaWQgIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iCittc2dzdHIgIm1pZW50cmFzIHNlIGNvbWVuemFiYSBhIGV4cGxvcmFyIGxvcyBub2Rvcy1pIgorCisjIFRPRE8gZXhwbG9yYWJhIC0+IGV4cGxvcmFiYW4KKyM6IGUyZnNjay9zY2FudGVzdC5jOjEzMAorbXNnaWQgIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iCittc2dzdHIgIm1pZW50cmFzIHNlIGV4cGxvcmFiYSBsb3Mgbm9kb3MtaSIKKworIzogZTJmc2NrL3N1cGVyLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZm9yIGlub2RlICVkIgorbXNnc3RyICJtaWVudHJhcyBzZSBsbGFtYWJhIGEgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgcGFyYSBlbCBub2RvLWkgJWQiCisKKyM6IGUyZnNjay9zdXBlci5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAibWllbnRyYXMgc2UgbGxhbWFiYSBhIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyIHBhcmEgZWwgbm9kby1pICVkIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzQKK21zZ2lkICJUcnVuY2F0aW5nIgorbXNnc3RyICJUcnVuY2FuZG8iCisKKyM6IGUyZnNjay9zdXBlci5jOjI3NQorbXNnaWQgIkNsZWFyaW5nIgorbXNnc3RyICJCb3JyYW5kbyIKKworIzogZTJmc2NrL3VuaXguYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstcGFueXJjZGZ2dERGVl0gWy1iIHN1cGVyYmxvY2tdIFstQiBibG9ja3NpemVdXG4iCisiXHRcdFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBbLVAgcHJvY2Vzc19pbm9kZV9zaXplXVxuIgorIlx0XHRbLWx8LUwgYmFkX2Jsb2Nrc19maWxlXSBbLUMgZmRdIFstaiBleHRlcm5hbF9qb3VybmFsXVxuIgorIlx0XHRbLUUgZXh0ZW5kZWQtb3B0aW9uc10gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJNb2RvIGRlIGVtcGxlbzogJXMgWy1wYW55cmNkZnZ0REZWXSBbLWIgc3VwZXJibG9xdWVdIFstQiB0YW1hw7FvZGVsYmxvcXVlXVxuIgorIlx0XHRbLUkgYmxvcXVlc19kZWxfYsO6ZmVyX2RlbF9ub2RvLWldIFstUCB0YW1hw7FvX2RlbF9wcm9jZXNvX2RlbF9ub2RvLWldXG4iCisiXHRcdFstbHwtTCBmaWNoZXJvX2RlX2Jsb3F1ZXNfZGHDsWFkb3NdIFstQyBmZF0gWy1qIGZpY2hlcm8tZGUtdHJhbnNhY2Npb25lcy0iCisiZXh0ZXJub11cbiIKKyJcdFx0Wy1FIG9wY2lvbmVzLWV4dGVuZGlkYXNdIGRpc3Bvc2l0aXZvXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODAKK21zZ2lkICIiCisiXG4iCisiRW1lcmdlbmN5IGhlbHA6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyByZXBhaXIgKG5vIHF1ZXN0aW9ucylcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTWFrZSBubyBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIEFzc3VtZSBcInllc1wiIHRvIGFsbCBxdWVzdGlvbnNcbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIGJhZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYWRibG9jayAiCisibGlzdFxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3JjZSBjaGVja2luZyBldmVuIGlmIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGNsZWFuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBeXVkYSBkZSBlbWVyZ2VuY2lhOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBSZXBhcmFjacOzbiBhdXRvbcOhdGljYSAoc2luIGhhY2VyIHByZWd1bnRhcylcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTm8gc2UgaGFjZW4gY2FtYmlvcyBhbCBzaXN0ZW1hIGRlIGZpY2hlcm9zXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIENvbnRlc3RhciBcInNpXCIgYSB0b2RhcyBsYXMgcHJlZ3VudGFzXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIEJ1c2NhIGxvcyBibG9xdWVzIGRhw7FhZG9zIHkgbG9zIGFncmVnYSBhIGxhXG4iCisiICAgICAgICAgICAgICAgICAgICAgIGxpc3RhIGRlIGJsb3F1ZXMgZGHDsWFkb3NcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRnVlcnphIGxhIHJldmlzacOzbiBhw7puIHNpIGVsIHNpc3RlbWEgZGUgZmljaGVyb3NcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgZXN0w6EgZXRpcXVldGFkbyBjb21vIGxpbXBpb1xuIgorCisjIFRPRE86IHJldmlzYXIgYWxpbmVhbWllbnRvCisjOiBlMmZzY2svdW5peC5jOjg2Cittc2dpZCAiIgorIiAtdiAgICAgICAgICAgICAgICAgICBCZSB2ZXJib3NlXG4iCisiIC1iIHN1cGVyYmxvY2sgICAgICAgIFVzZSBhbHRlcm5hdGl2ZSBzdXBlcmJsb2NrXG4iCisiIC1CIGJsb2Nrc2l6ZSAgICAgICAgIEZvcmNlIGJsb2Nrc2l6ZSB3aGVuIGxvb2tpbmcgZm9yIHN1cGVyYmxvY2tcbiIKKyIgLWogZXh0ZXJuYWxfam91cm5hbCAgU2V0IGxvY2F0aW9uIG9mIHRoZSBleHRlcm5hbCBqb3VybmFsXG4iCisiIC1sIGJhZF9ibG9ja3NfZmlsZSAgIEFkZCB0byBiYWRibG9ja3MgbGlzdFxuIgorIiAtTCBiYWRfYmxvY2tzX2ZpbGUgICBTZXQgYmFkYmxvY2tzIGxpc3RcbiIKK21zZ3N0ciAiIgorIiAtdiAgICAgICAgICAgICAgICAgICAgICBHZW5lcmEgbcOhcyBtZW5zYWplcyBkZSBkaWFnbsOzc3RpY29cbiIKKyIgLWIgc3VwZXJibG9xdWUgICAgICAgICAgVXRpbGl6YSBlbCBzdXBlcmJsb3F1ZSBhbHRlcm5hdGl2b1xuIgorIiAtQiB0YW1hw7FvZGVsYmxvcXVlICAgICAgRnVlcnphIGVsIHRhbWHDsW9kZWxibG9xdWUgY3VhbmRvIGJ1c2NhICIKKyJhbCAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlcmJsb3F1ZVxuIgorIiAtaiBmaWNoZXJvLWRlLXRyYW5zYWNjaW9uZXMtZXh0ZXJubyBcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgSW5kaWNhIGVsIGx1Z2FyIGVuIGRvbmRlIGVzdMOhIGVsIGZpY2hlcm9cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgZGUgdHJhbnNhY2Npb25lcyBleHRlcm5vXG4iCisiIC1sIGZpY2hlcm9fZGVfYmxvcXVlc19kYcOxYWRvcyBcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgQWdyZWdhIGEgbGEgbGlzdGEgZGUgYmxvcXVlcyBkYcOxYWRvc1xuIgorIiAtTCBmaWNoZXJvX2RlX2Jsb3F1ZXNfZGHDsWFkb3MgXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgIFBvbmUgbGEgbGlzdGEgZGUgYmxvcXVlcyBkYcOxYWRvc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXUvJXUgZmlsZXMgKCUwZC4lZCUlIG5vbi1jb250aWd1b3VzKSwgJWxsdS8lbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIlczogJXUvJXUgZmljaGVyb3MgKCUwZC4lZCUlIG5vIGNvbnRpZ3VvcyksICVsbHUvJWxsdSBibG9xdWVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlMTJ1IGlub2RlIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgaW5vZGVzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiUxMnUgbm9kby1pIHV0aWxpemFkbyAoJTIuMmYlJSwgZWwgJXUpXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IG5vZG9zLWkgdXRpbGl6YWRvcyAoJTIuMmYlJSwgZWwgJXUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIlMTJ1IGZpY2hlcm8gbm8gY29udGlndW8gKCUwZC4lZCUlKVxuIgorbXNnc3RyWzFdICIlMTJ1IGZpY2hlcm9zIG5vIGNvbnRpZ3VvcyAoJTBkLiVkJSUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3J5ICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcmllcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiUxMnUgZGlyZWN0b3JpbyBubyBjb250aWd1byAoJTBkLiVkJSUpXG4iCittc2dzdHJbMV0gIiUxMnUgZGlyZWN0b3Jpb3Mgbm8gY29udGlndW9zICglMGQuJWQlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICAgICAgICMgb2YgaW5vZGVzIHdpdGggaW5kL2RpbmQvdGluZCBibG9ja3M6ICV1LyV1LyV1XG4iCittc2dzdHIgIiAgICAgICAgICAgICBuw7ptZXJvIGRlIG5vZG9zLWkgY29uIGJsb3F1ZXMgaW5kL2RpbmQvdGluZDogJXUvJXUvJXVcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzkKK21zZ2lkICIgICAgICAgICAgICAgRXh0ZW50IGRlcHRoIGhpc3RvZ3JhbTogIgorbXNnc3RyICIgICAgICAgICAgICAgSGlzdG9ncmFtYSBkZSBsYXMgcHJvZnVuZGlkYWRlcyBkZSDCq2V4dGVudHPCuzogIgorCisjOiBlMmZzY2svdW5peC5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJsbHUgYmxvY2sgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dpZF9wbHVyYWwgIiUxMmxsdSBibG9ja3MgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dzdHJbMF0gIiUxMmxsdSBibG9xdWUgdXNhZG8gKCUyLjJmJSUsIGVsICVsbHUpXG4iCittc2dzdHJbMV0gIiUxMmxsdSBibG9xdWVzIHVzYWRvcyAoJTIuMmYlJSwgZWwgJWxsdSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBiYWQgYmxvY2tcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBiYWQgYmxvY2tzXG4iCittc2dzdHJbMF0gIiUxMnUgYmxvcXVlIGRhw7FhZG9cbiIKK21zZ3N0clsxXSAiJTEydSBibG9xdWVzIGRhw7FhZG9zXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbGFyZ2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGxhcmdlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgZmljaGVybyBncmFuZGVcbiIKK21zZ3N0clsxXSAiJTEydSBmaWNoZXJvcyBncmFuZGVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVzXG4iCittc2dzdHJbMF0gIiIKKyJcbiIKKyIlMTJ1IGZpY2hlcm8gcmVndWxhclxuIgorbXNnc3RyWzFdICIiCisiXG4iCisiJTEydSBmaWNoZXJvcyByZWd1bGFyZXNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBkaXJlY3RvcnlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBkaXJlY3Rvcmllc1xuIgorbXNnc3RyWzBdICIlMTJ1IGRpcmVjdG9yaW9cbiIKK21zZ3N0clsxXSAiJTEydSBkaXJlY3Rvcmlvc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBkaXNwb3NpdGl2byBkZSBjYXJhY3RlcmVzXG4iCittc2dzdHJbMV0gIiUxMnUgZGlzcG9zaXRpdm9zIGRlIGNhcmFjdGVyZXNcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBibG9jayBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IGRpc3Bvc2l0aXZvIGRlIGJsb3F1ZVxuIgorbXNnc3RyWzFdICIlMTJ1IGRpc3Bvc2l0aXZvcyBkZSBibG9xdWVcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWZvXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlmb3NcbiIKK21zZ3N0clswXSAiJTEydSBmaWZvXG4iCittc2dzdHJbMV0gIiUxMnUgZmlmb3NcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsaW5rXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGlua3NcbiIKK21zZ3N0clswXSAiJTEydSB2w61uY3Vsb1xuIgorbXNnc3RyWzFdICIlMTJ1IHbDrW5jdWxvc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHN5bWJvbGljIGxpbmsiCittc2dpZF9wbHVyYWwgIiUxMnUgc3ltYm9saWMgbGlua3MiCittc2dzdHJbMF0gIiUxMnUgZW5sYWNlIHNpbWLDs2xpY28iCittc2dzdHJbMV0gIiUxMnUgZW5sYWNlcyBzaW1iw7NsaWNvcyIKKworIzogZTJmc2NrL3VuaXguYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmspXG4iCittc2dpZF9wbHVyYWwgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rcylcbiIKK21zZ3N0clswXSAiICgldSB2w61uY3VsbyBzaW1iw7NsaWNvIHLDoXBpZG8pXG4iCittc2dzdHJbMV0gIiAoJXUgdsOtbmN1bG9zIHNpbWLDs2xpY29zIHLDoXBpZG9zKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHNvY2tldFxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IHNvY2tldHNcbiIKK21zZ3N0clswXSAiJTEydSB6w7NjYWxvXG4iCittc2dzdHJbMV0gIiUxMnUgesOzY2Fsb3NcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBmaWNoZXJvXG4iCittc2dzdHJbMV0gIiUxMnUgZmljaGVyb3NcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMzIgbWlzYy9iYWRibG9ja3MuYzo5OTMgbWlzYy90dW5lMmZzLmM6MjEyMiBtaXNjL3V0aWwuYzozMTYKKyM6IHJlc2l6ZS9tYWluLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iCittc2dzdHIgIm1pZW50cmFzIHNlIGRldGVybWluYWJhIHNpICVzIGVzdMOhIG1vbnRhZG8uIgorCisjOiBlMmZzY2svdW5peC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiwqFBdGVuY2nDs24hICAlcyBlc3TDoSBtb250YWRvLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgaW4gdXNlLlxuIgorbXNnc3RyICLCoUF0ZW5jacOzbiEgICVzIGVzdMOhIGVuIHVzby5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiJXMgZXN0w6EgbW9udGFkby5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW4gdXNlLlxuIgorbXNnc3RyICIlcyBlc3TDoSBlbiB1c28uXG4iCisKKyMgVE9ETyBmaW5hbGl6YSAtPgorIzogZTJmc2NrL3VuaXguYzoyNjYKK21zZ2lkICIiCisiQ2Fubm90IGNvbnRpbnVlLCBhYm9ydGluZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGNvbnRpbnVhciwgc2UgZmluYWxpemEuXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY4Cittc2dpZCAiIgorIlxuIgorIlxuIgorIldBUk5JTkchISEgIFRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuICAgSWYgeW91IGNvbnRpbnVlIHlvdSAqKipXSUxMKioqXG4iCisiY2F1c2UgKioqU0VWRVJFKioqIGZpbGVzeXN0ZW0gZGFtYWdlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiwqHCoUFURU5DScOTTiEhICBFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGVzdMOhIG1vbnRhZG8uIFNpIHNlIGNvbnRpbsO6YSBzZSAiCisiUFJPVk9DQVLDgU5cbiIKKyJHUkFWRVMgZGHDsW9zIGFsIHNpc3RlbWEgZGUgZmljaGVyb3MuXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjczCittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIGNvbnRpbnVlIgorbXNnc3RyICLCv0RlIHZlcmRhZCBxdWllcmUgY29udGludWFyPyIKKworIzogZTJmc2NrL3VuaXguYzoyNzUKK21zZ2lkICJjaGVjayBhYm9ydGVkLlxuIgorbXNnc3RyICJyZXZpc2nDs24gaW50ZXJydW1waWRhLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjM2OAorbXNnaWQgIiBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzIgorbXNnc3RyICIgY29udGllbmUgdW4gc2lzdGVtYSBkZSBmaWNoZXJvcyBjb24gZXJyb3JlcyIKKworIzogZTJmc2NrL3VuaXguYzozNzAKK21zZ2lkICIgd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCIKK21zZ3N0ciAiIG5vIGZ1ZSBkZXNtb250YWRvIGxpbXBpYW1lbnRlIgorCisjOiBlMmZzY2svdW5peC5jOjM3MgorbXNnaWQgIiBwcmltYXJ5IHN1cGVyYmxvY2sgZmVhdHVyZXMgZGlmZmVyZW50IGZyb20gYmFja3VwIgorbXNnc3RyICIiCisiIGxhcyBjYXJhY3RlcsOtc3RpY2FzIGRlbCBzdXBlcmJsb3F1ZSBwcmltYXJpbyBkaWZpZXJlbiBkZSBsYXMgZGUgbGEgY29waWEgZGUgIgorInNlZ3VyaWRhZCIKKworIzogZTJmc2NrL3VuaXguYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBiZWVuIG1vdW50ZWQgJXUgdGltZXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgaGEgc2lkbyBtb250YWRvICV1IHZlY2VzIHNpbiBzZXIgcmV2aXNhZG8iCisKKyM6IGUyZnNjay91bml4LmM6MzgzCittc2dpZCAiIGhhcyBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0aW1lIGluIHRoZSBmdXR1cmUiCittc2dzdHIgIiIKKyIgdGllbmUgbGEgaG9yYSBkZSBsYSDDumx0aW1hIHJldmlzacOzbiBhbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGVuIGVsIGZ1dHVybyIKKworIzogZTJmc2NrL3VuaXguYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBnb25lICV1IGRheXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgeWEgbGxldmEgJXUgZMOtYXMgc2luIHNlciByZXZpc2FkbyIKKworIzogZTJmc2NrL3VuaXguYzozOTgKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiLCBzZSBmdWVyemEgbGEgcmV2aXNpw7NuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4sICV1LyV1IGZpbGVzLCAlbGx1LyVsbHUgYmxvY2tzIgorbXNnc3RyICIlczogbGltcGlvLCAldS8ldSBmaWNoZXJvcywgJWxsdS8lbGx1IGJsb3F1ZXMiCisKKyM6IGUyZnNjay91bml4LmM6NDUxCittc2dpZCAiIChjaGVjayBkZWZlcnJlZDsgb24gYmF0dGVyeSkiCittc2dzdHIgIiAoY29tcHJvYmFjacOzbiBhcGxhemFkYTsgY29uIGJhdGVyw61hcykiCisKKyMgTyAicmV2aXNpw7NuIGRlc3B1w6lzIGRlbCBzaWd1aWVudGUgbW9udGFqZSIuCisjOiBlMmZzY2svdW5peC5jOjQ1NAorbXNnaWQgIiAoY2hlY2sgYWZ0ZXIgbmV4dCBtb3VudCkiCittc2dzdHIgIiAoY29tcHJvYmFjacOzbiBlbiBlbCBzaWd1aWVudGUgbW9udGFqZSkiCisKKyM6IGUyZnNjay91bml4LmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoY2hlY2sgaW4gJWxkIG1vdW50cykiCittc2dzdHIgIiAoY29tcHJvYmFjacOzbiBkZXNwdcOpcyBkZSAlbGQgbW9udGFqZXMpIgorCisjOiBlMmZzY2svdW5peC5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogQ291bGRuJ3Qgb3BlbiAvZGV2L251bGwgKCVzKVxuIgorbXNnc3RyICJFUlJPUjogbm8gc2UgcHVlZGUgYWJyaXIgL2Rldi9udWxsICglcylcbiIKKworIzogZTJmc2NrL3VuaXguYzo2NzUKK21zZ2lkICJJbnZhbGlkIEVBIHZlcnNpb24uXG4iCittc2dzdHIgIlZlcnNpw7NuIGRlIEVBIG5vIHbDoWxpZGEuXG4iCisKKyM6IGUyZnNjay91bml4LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZXh0ZW5kZWQgb3B0aW9uOiAlc1xuIgorbXNnc3RyICJPcGNpw7NuIGV4dGVuZGlkYSBkZXNjb25vY2lkYTogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBlMmZzY2sgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKyJFcnJvciBkZSBzaW50YXhpcyBlbiBlbCBmaWNoZXJvIGRlIGNvbmZpZ3VyYWNpw7NuIGRlIGUyZnNjayAoJXMsIGzDrW5lYSAjJWQpXG4iCisiXHQlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAiRXJyb3IgYWwgdmFsaWRhciBlbCBkZXNjcmlwdG9yIGRlIGZpY2hlcm9zICVkOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjgwMQorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgIkluZm9ybWFjacOzbiBkZSBjb25zaXN0ZW5jaWEgbm8gdsOhbGlkYSBlbiBlbCBkZXNjcmlwdG9yIGRlIGZpY2hlcm9zIgorCisjOiBlMmZzY2svdW5peC5jOjgxNgorbXNnaWQgIk9ubHkgb25lIG9mIHRoZSBvcHRpb25zIC1wLy1hLCAtbiBvciAteSBtYXkgYmUgc3BlY2lmaWVkLiIKK21zZ3N0ciAiU8OzbG8gc2UgcHVlZGUgZXNwZWNpZmljYXIgdW5hIGRlIGxhcyBvcGNpb25lcyAtcC8tYSwgLW4gbyAteS4iCisKKyM6IGUyZnNjay91bml4LmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSAtdCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorbXNnc3RyICJMYSBvcGNpw7NuIC10IG5vIGVzdMOhIGltcGxlbWVudGFkYSBlbiBlc3RhIHZlcnNpw7NuIGRlIGUyZnNjay5cbiIKKworIzogZTJmc2NrL3VuaXguYzo4NjggZTJmc2NrL3VuaXguYzo5NDIgbWlzYy90dW5lMmZzLmM6ODc5IG1pc2MvdHVuZTJmcy5jOjExNzQKKyM6IG1pc2MvdHVuZTJmcy5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiTm8gZXMgcG9zaWJsZSByZXNvbHZlciAnJXMnIgorCisjOiBlMmZzY2svdW5peC5jOjkyMQorbXNnaWQgIlRoZSAtbiBhbmQgLUQgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiTGFzIG9wY2lvbmVzIC1uIHkgLUQgc2UgZXhjbHV5ZW4gbXV0dWFtZW50ZS4iCisKKyM6IGUyZnNjay91bml4LmM6OTI2Cittc2dpZCAiVGhlIC1uIGFuZCAtYyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJMYXMgb3BjaW9uZXMgLW4geSAtYyBzZSBleGNsdXllbiBtdXR1YW1lbnRlLiIKKworIzogZTJmc2NrL3VuaXguYzo5MzEKK21zZ2lkICJUaGUgLW4gYW5kIC1sLy1MIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIkxhcyBvcGNpb25lcyAtbiB5IC1sLy1MIHNlIGV4Y2x1eWVuIG11dHVhbWVudGUuIgorCisjOiBlMmZzY2svdW5peC5jOjk4NQorbXNnaWQgIlRoZSAtYyBhbmQgdGhlIC1sLy1MIG9wdGlvbnMgbWF5IG5vdCBiZSBib3RoIHVzZWQgYXQgdGhlIHNhbWUgdGltZS5cbiIKK21zZ3N0ciAiTGFzIG9wY2lvbmVzIC1jIHkgLWwvLUwgbm8gcHVlZGVuIHNlciB1dGlsaXphZGFzIHNpbXVsdMOhbmVhbWVudGUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTAzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTJGU0NLX0pCRF9ERUJVRyBcIiVzXCIgbm90IGFuIGludGVnZXJcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG5vIGVzIHVuIGVudGVyb1xuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkludmFsaWQgbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gLSVjIChcIiVzXCIpXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudG8gbm8gbnVtw6lyaWNvIGludsOhbGlkbyBwYXJhIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBpbnRlcnZhbCBpcyAldSBzZWNvbmRzIGFuZCB0b3RhbCB3YWl0IHRpbWUgaXMgJXUgc2Vjb25kcy4gUGxlYXNlICIKKyJ3YWl0Li4uXG4iCittc2dzdHIgIiIKKyJFbCBpbnRlcnZhbG8gZGUgbGEgcHJvdGVjY2nDs24gY29udHJhIG1vbnRhamUgbcO6bHRpcGxlIChNTVApIGVzIGRlICV1ICIKKyJzZWd1bmRvcyB5IGVsIHRpZW1wbyB0b3RhbCBkZSBlc3BlcmEgZXMgZGUgJXUgc2VndW5kb3MuIFBvciBmYXZvciwgIgorImVzcGVyZS4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjExNDkgZTJmc2NrL3VuaXguYzoxMTU0Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgTU1QIGJsb2NrIgorbXNnc3RyICJtaWVudHJhcyBzZSByZXZpc2FiYSBlbCBibG9xdWUgTU1QIgorCisjOiBlMmZzY2svdW5peC5jOjExNTYgbWlzYy90dW5lMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJJZiB5b3UgYXJlIHN1cmUgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IGluIHVzZSBvbiBhbnkgbm9kZSwgcnVuOlxuIgorIid0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfSdcbiIKK21zZ3N0ciAiIgorIlNpIHNlIHNhYmUgY29uIGNlcnRlemEgcXVlIGVsIHNpc3RlbWEgZGUgZmljaGVyb3Mgbm8gZXN0w6EgZW4gdXNvIGVuIG5pbmfDum5cbiIKKyJtb2RvLCBlamVjdXRlICd0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfSdcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjA3Cittc2dpZCAiRXJyb3I6IGV4dDJmcyBsaWJyYXJ5IHZlcnNpb24gb3V0IG9mIGRhdGUhXG4iCittc2dzdHIgIsKhRXJyb3I6IGxhIHZlcnNpw7NuIGRlIGxhIGJpYmxpb3RlY2EgZXh0MmZzIGVzdMOhIGNhZHVjYSFcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjE0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGluaXRpYWxpemUgcHJvZ3JhbSIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW50ZW50YWJhIGluaWNpYWxpemFyIGVsIHByb2dyYW1hIgorCisjOiBlMmZzY2svdW5peC5jOjEyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlcywgJXNcbiIKK21zZ3N0ciAiXHRBbCBlbXBsZWFyICVzLCAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEyNDkKK21zZ2lkICJuZWVkIHRlcm1pbmFsIGZvciBpbnRlcmFjdGl2ZSByZXBhaXJzIgorbXNnc3RyICJzZSBuZWNlc2l0YSB1bmEgdGVybWluYWwgcGFyYSBoYWNlciBsYXMgcmVwYXJhY2lvbmVzIGludGVyYWN0aXZhcyIKKworIzogZTJmc2NrL3VuaXguYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB0cnlpbmcgYmFja3VwIGJsb2Nrcy4uLlxuIgorbXNnc3RyICIlczogJXMgaW50ZW50YW5kbyBsb3MgYmxvcXVlcyBkZSByZXNwYWxkby4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDUKK21zZ2lkICJTdXBlcmJsb2NrIGludmFsaWQsIgorbXNnc3RyICJTdXBlcmJsb3F1ZSBlcyBpbnbDoWxpZG8sIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDYKK21zZ2lkICJHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiIKK21zZ3N0ciAiTG9zIGRlc2NyaXB0b3JlcyBkZSBsb3MgZ3J1cG9zIHBhcmVjZW4gZGHDsWFkb3MuLi4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgdXNpbmcgdGhlIGJhY2t1cCBibG9ja3MiCittc2dzdHIgIiVzOiAlcyBtaWVudHJhcyBzZSB1dGlsaXphYmFuIGxvcyBibG9xdWVzIGRlIHJlc3BhbGRvIgorCisjIE9qbzogTm8gZXMgcXVlIHNlIGhheWEgZW5jb250cmFkbyB1biBzdXBlcmJsb3F1ZSBxdWUgcmVzdWx0YSBxdWUgbm8gZXMKKyMgdsOhbGlkbywgc2lubyBxdWUgbm8gc2UgaGEgZW5jb250cmFkbyBuaW5nw7puIHN1cGVyYmxvcXVlIHF1ZSBzZWEgdsOhbGlkbywKKyMgcXVlIGVzIGRpc3RpbnRvIChhIGxvIG1lam9yIG5vIHNlIGhhIGVuY29udHJhZG8gbmluZ8O6biBzdXBlcmJsb3F1ZQorIyBlbiBhYnNvbHV0bykuIENyZW8gcXVlIGxhIHRyYWR1Y2Npw7NuIGRlYmVyw61hIGNhbWJpYXJzZS4gc3YKKyMgRW4gZWZlY3RvLCB0aWVuZXMgdG9kYSBsYSByYXrDs24uIENvcnJlZ2lkby4gbW0KKyM6IGUyZnNjay91bml4LmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZ29pbmcgYmFjayB0byBvcmlnaW5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiVzOiB2b2x2aWVuZG8gYWwgc3VwZXJibG9xdWUgb3JpZ2luYWxcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQ5Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIHJldmlzaW9uIGlzIGFwcGFyZW50bHkgdG9vIGhpZ2ggZm9yIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCisiKE9yIHRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2sgaXMgY29ycnVwdClcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkxhIHZlcnNpw7NuIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGVzLCBlbiBhcGFyaWVuY2lhLCBtdXkgc3VwZXJpb3IgcGFyYSAiCisiZXN0YVxuIgorInZlcnNpw7NuIGRlIGUyZnNjay4gKE8gZWwgc3VwZXJibG9xdWUgZGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgZXN0w6EgZGHDsWFkbylcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzU2Cittc2dpZCAiQ291bGQgdGhpcyBiZSBhIHplcm8tbGVuZ3RoIHBhcnRpdGlvbj9cbiIKK21zZ3N0ciAiwr9Fc3RhIHBvZHLDrWEgc2VyIHVuYSBwYXJ0aWNpw7NuIGRlIGxvbmdpdHVkIGNlcm8/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSBvciBiZSByb290XG4iCittc2dzdHIgIlNlIGRlYmUgdGVuZXIgYWNjZXNvICVzIGFsIHNpc3RlbWEgZGUgZmljaGVyb3MgbyBzZXIgcm9vdFxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNjQKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgb3Igc3dhcCBkZXZpY2U/XG4iCittc2dzdHIgIsK/RXMgcG9zaWJsZSBxdWUgbm8gZXhpc3RhIG8gcXVlIHNlYSB1biBkaXNwb3NpdGl2byBkZSBpbnRlcmNhbWJpbz9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY2Cittc2dpZCAiRmlsZXN5c3RlbSBtb3VudGVkIG9yIG9wZW5lZCBleGNsdXNpdmVseSBieSBhbm90aGVyIHByb2dyYW0/XG4iCittc2dzdHIgIiIKKyLCv1Npc3RlbWEgZGUgZmljaGVyb3MgbW9udGFkbyBvIGFiaWVydG8gZW4gZXhjbHVzaXZhIHBvciBvdHJvIHByb2dyYW1hP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNzAKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgZGV2aWNlP1xuIgorbXNnc3RyICLCv0VzIHBvc2libGUgcXVlIG5vIGV4aXN0YSBlbCBkaXNwb3NpdGl2bz9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzczCittc2dpZCAiIgorIkRpc2sgd3JpdGUtcHJvdGVjdGVkOyB1c2UgdGhlIC1uIG9wdGlvbiB0byBkbyBhIHJlYWQtb25seVxuIgorImNoZWNrIG9mIHRoZSBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJFbCBkaXNjbyBlc3TDoSBwcm90ZWdpZG8gY29udHJhIGVzY3JpdHVyYTsgdXRpbGljZSBsYSBvcGNpw7NuIC1uIHBhcmFcbiIKKyJoYWNlciB1bmEgcmV2aXNpw7NuIGRlIHPDs2xvIGxlY3R1cmEgYWwgZGlzcG9zaXRpdm8uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTQzNworbXNnaWQgIkdldCBhIG5ld2VyIHZlcnNpb24gb2YgZTJmc2NrISIKK21zZ3N0ciAiwqFDb25zaWdhIHVuYSB2ZXJzacOzbiBtw6FzIG1vZGVybmEgZGUgZTJmc2NrISIKKworIzogZTJmc2NrL3VuaXguYzoxNDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNoZWNraW5nIGV4dDMgam91cm5hbCBmb3IgJXMiCittc2dzdHIgIm1pZW50cmFzIHNlIHJldmlzYWJhIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBleHQzIHBhcmEgJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTQ5MgorbXNnaWQgIiIKKyJXYXJuaW5nOiBza2lwcGluZyBqb3VybmFsIHJlY292ZXJ5IGJlY2F1c2UgZG9pbmcgYSByZWFkLW9ubHkgZmlsZXN5c3RlbSAiCisiY2hlY2suXG4iCittc2dzdHIgIiIKKyJBdGVuY2nDs246IHNlIG9taXRpcsOhIGxhIHJlY3VwZXJhY2nDs24gZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBkZWJpZG8gYSAiCisicXVlIHNlIGVzdMOhIGhhY2llbmRvIHVuYSByZXZpc2nDs24gZGUgc8OzbG8gbGVjdHVyYSBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcy5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTA0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgc3VwZXJibG9jayBmbGFncyBvbiAlc1xuIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIHBvbmVyIGxhcyBiYW5kZXJhcyBkZSBzdXBlcmJsb3F1ZSBlbiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVjb3ZlcmluZyBleHQzIGpvdXJuYWwgb2YgJXMiCittc2dzdHIgIm1pZW50cmFzIHNlIHJlY3VwZXJhYmEgZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIGV4dDMgZGUgJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTUzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKToiCittc2dzdHIgIiVzIHRpZW5lIGNhcmFjdGVyw61zdGljYXMgbm8gc29wb3J0YWRhczoiCisKKyM6IGUyZnNjay91bml4LmM6MTU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FybmluZzogY29tcHJlc3Npb24gc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCittc2dzdHIgIiVzOiBhdGVuY2nDs246IGVsIHNvcG9ydGUgYSBsYSBjb21wcmVzacOzbiBlcyBleHBlcmltZW50YWwuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IGUyZnNjayBub3QgY29tcGlsZWQgd2l0aCBIVFJFRSBzdXBwb3J0LFxuIgorIlx0YnV0IGZpbGVzeXN0ZW0gJXMgaGFzIEhUUkVFIGRpcmVjdG9yaWVzLlxuIgorbXNnc3RyICIiCisiJXM6IGUyZnNjayBubyBlc3TDoSBjb21waWxhZG8gY29uIHNvcG9ydGUgYSDDgVJCT0xFUy1ILFxuIgorIlx0cGVybyBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zICVzIHRpZW5lIGRpcmVjdG9yaW9zIGNvbiDDgVJCT0xFUy1ILlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrcyBpbm9kZVxuIgorbXNnc3RyICIlczogJXMgbWllbnRyYXMgc2UgbGXDrWEgZWwgbm9kby1pIGRlIGxvcyBibG9xdWVzIGRhw7FhZG9zXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxMAorbXNnaWQgIlRoaXMgZG9lc24ndCBib2RlIHdlbGwsIGJ1dCB3ZSdsbCB0cnkgdG8gZ28gb24uLi5cbiIKK21zZ3N0ciAiRXN0byBubyBzZSB2ZSBtdXkgYmllbiwgcGVybyBzZSBpbnRlbnRhcsOhIGNvbnRpbnVhci4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJWQgYmxvY2tzKTogIgorbXNnc3RyICJDcmVhbmRvIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyAoJWQgYmxvcXVlcyk6ICIKKworIzogZTJmc2NrL3VuaXguYzoxNjYyCittc2dpZCAiIERvbmUuXG4iCittc2dzdHIgIiBIZWNoby5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjY0Cittc2dpZCAiIgorIlxuIgorIioqKiBqb3VybmFsIGhhcyBiZWVuIHJlLWNyZWF0ZWQgLSBmaWxlc3lzdGVtIGlzIG5vdyBleHQzIGFnYWluICoqKlxuIgorbXNnc3RyICIiCisiXG4iCisiKioqIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBzZSBoYSBjcmVhZG8gZGUgbnVldm8gKioqXG4iCisiKioqIGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgdnVlbHZlIGEgc2VyIGV4dDMgKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY4OAorbXNnaWQgIlJlc3RhcnRpbmcgZTJmc2NrIGZyb20gdGhlIGJlZ2lubmluZy4uLlxuIgorbXNnc3RyICJTZSByZWluaWNpYSBlMmZzY2sgZGVzZGUgZWwgcHJpbmNpcGlvLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY5MgorbXNnaWQgIndoaWxlIHJlc2V0dGluZyBjb250ZXh0IgorbXNnc3RyICJtaWVudHJhcyBzZSByZWFqdXN0YSBlbCBjb250ZXh0byIKKworIzogZTJmc2NrL3VuaXguYzoxNjk5Cittc2dpZCAiYWJvcnRlZCIKK21zZ3N0ciAiZmluYWxpemFkbyIKKworIzogZTJmc2NrL3VuaXguYzoxNzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBlMmZzY2sgY2FuY2VsZWQuXG4iCittc2dzdHIgIiVzOiBzZSBjYW5jZWxhIGUyZnNjay5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzQxIGUyZnNjay91dGlsLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKiBFTCBTSVNURU1BIERFIEZJQ0hFUk9TIEZVRSBNT0RJRklDQURPICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiVzOiAqKioqKiBSRUlOSUNJRSBMSU5VWCAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NTMgZTJmc2NrL3V0aWwuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogV0FSTklORzogRmlsZXN5c3RlbSBzdGlsbCBoYXMgZXJyb3JzICoqKioqKioqKipcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIEFURU5DScOTTjogRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyB0b2RhdsOtYSB0aWVuZSBlcnJvcmVzICIKKyIqKioqKioqKioqKlxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MCBtaXNjL3V0aWwuYzo4NgorbXNnaWQgInlZIgorbXNnc3RyICJzUyIKKworIzogZTJmc2NrL3V0aWwuYzoxOTEKK21zZ2lkICJuTiIKK21zZ3N0ciAibk4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA1Cittc2dpZCAiPHk+IgorbXNnc3RyICI8cz4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA3Cittc2dpZCAiPG4+IgorbXNnc3RyICI8bj4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA5Cittc2dpZCAiICh5L24pIgorbXNnc3RyICIgKHMvbikiCisKKyM6IGUyZnNjay91dGlsLmM6MjIzCittc2dpZCAiY2FuY2VsbGVkIVxuIgorbXNnc3RyICLCoWNhbmNlbGFkbyFcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyMzgKK21zZ2lkICJ5ZXNcbiIKK21zZ3N0ciAic2lcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNDAKK21zZ2lkICJub1xuIgorbXNnc3RyICJub1xuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IG5vXG4iCisiXG4iCittc2dzdHIgIiIKKyLCvyVzPyBub1xuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IHllc1xuIgorIlxuIgorbXNnc3RyICIiCisiwr8lcz8gc2lcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTgKK21zZ2lkICJ5ZXMiCittc2dzdHIgInNpIgorCisjOiBlMmZzY2svdXRpbC5jOjI1OAorbXNnaWQgIm5vIgorbXNnc3RyICJubyIKKworIzogZTJmc2NrL3V0aWwuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJmc2NrX3JlYWRfYml0bWFwczogaWxsZWdhbCBiaXRtYXAgYmxvY2socykgZm9yICVzIgorbXNnc3RyICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBibG9xdWUocykgbm8gdsOhbGlkbyhzKSBkZSBtYXBhcyBkZSBiaXRzIHBhcmEgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjc4Cittc2dpZCAicmVhZGluZyBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcyIKK21zZ3N0ciAibGV5ZW5kbyBsb3MgbWFwYXMgZGUgYml0cyBkZWwgbm9kby1pIHkgZGVsIGJsb3F1ZSIKKworIyBUT0RPIGludGVudGFiYW4gbyBpbnRlbnRhYmEKKyM6IGUyZnNjay91dGlsLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJldHJ5aW5nIHRvIHJlYWQgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgIm1pZW50cmFzIHNlIGludGVudGFiYW4gbGVlciBsb3MgbWFwYXMgZGUgYml0cyBwYXJhICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjI5OAorbXNnaWQgIndyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMiCittc2dzdHIgImVzY3JpYmllbmRvIGxvcyBtYXBhcyBkZSBiaXRzIGRlbCBibG9xdWUgeSBkZWwgbm9kby1pIgorCisjOiBlMmZzY2svdXRpbC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXdyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICIiCisibWllbnRyYXMgc2UgcmVlc2NyaWLDrWFuIGxvcyBtYXBhcyBkZSBiaXRzIGRlIGJsb3F1ZXMgeSBkZSBub2Rvcy1pIHBhcmEgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyIlczogVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOyBSVU4gZnNjayBNQU5VQUxMWS5cbiIKKyJcdChpLmUuLCB3aXRob3V0IC1hIG9yIC1wIG9wdGlvbnMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyIlczogSU5DT05TSVNURU5DSUEgSU5FU1BFUkFEQTsgRUpFQ1VURSBmc2NrIE1BTlVBTE1FTlRFLlxuIgorIihpLmUuLCBzaW4gbGFzIG9wY2lvbmVzIC1hIG8gLXApXG4iCisKKyM6IGUyZnNjay91dGlsLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKK21zZ3N0ciAiTWVtb3JpYSB1dGlsaXphZGE6ICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1LCAiCittc2dzdHIgIk1lbW9yaWEgdXRpbGl6YWRhOiAlbHUsICIKKworIzogZTJmc2NrL3V0aWwuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZTogJTUuMmYvJTUuMmYvJTUuMmZcbiIKK21zZ3N0ciAiZmVjaGE6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVsYXBzZWQgdGltZTogJTYuM2ZcbiIKK21zZ3N0ciAidGllbXBvIHRyYW5zY3VycmlkbzogJTYuM2ZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0NDcgZTJmc2NrL3V0aWwuYzo0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgIm1pZW50cmFzIHNlIGxlw61hIGVsIG5vZG8taSAlbHUgZW4gJXMiCisKKyM6IGUyZnNjay91dGlsLmM6NDc1IGUyZnNjay91dGlsLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICJtaWVudHJhcyBzZSBlc2NyaWLDrWEgZWwgbm9kby1pICVsdSBlbiAlcyIKKworIzogZTJmc2NrL3V0aWwuYzo2MzcKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIHplcm9pemluZyBidWZmZXIiCittc2dzdHIgIm1pZW50cmFzIHNlIHJlc2VydmFiYSBlbCBiw7pmZXIgcmVsbGVubyBjb24gY2Vyb3MiCisKKyM6IGUyZnNjay91dGlsLmM6Nzg1Cittc2dpZCAiIgorIlVORVhQRUNURUQgSU5DT05TSVNURU5DWTogdGhlIGZpbGVzeXN0ZW0gaXMgYmVpbmcgbW9kaWZpZWQgd2hpbGUgZnNjayBpcyAiCisicnVubmluZy5cbiIKK21zZ3N0ciAiIgorIklOQ09OU0lTVEVOQ0lBIElORVNQRVJBREE6IHNlIGVzdMOhIG1vZGlmaWNhbmRvIGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgIgorIm1pZW50cmFzIGZzY2sgZXN0w6EgY29ycmllbmRvLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjcyCittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiaGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYiBibG9ja19zaXplXSBbLWkgaW5wdXRfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxvY2tzX2F0X29uY2VdIFstZCBkZWxheV9mYWN0b3JfYmV0d2Vlbl9yZWFkc10gWy1lICIKKyJtYXhfYmFkX2Jsb2Nrc11cbiIKKyIgICAgICAgWy1wIG51bV9wYXNzZXNdIFstdCB0ZXN0X3BhdHRlcm4gWy10IHRlc3RfcGF0dGVybiBbLi4uXV1dXG4iCisiICAgICAgIGRldmljZSBbbGFzdF9ibG9jayBbZmlyc3RfYmxvY2tdXVxuIgorbXNnc3RyICIiCisiTW9kbyBkZSBlbXBsZW86ICVzIFstYiB0YW1hw7FvX2RlbF9ibG9xdWVdIFstaSBmaWNoZXJvX2RlX2VudHJhZGFdIFstc3Z3bmZdXG4iCisiICAgICAgICAgICAgICAgIFstYyBibG9xdWVzX2FfbGFfdmV6XSBbLWQgIgorImZhY3Rvcl9kZV9yZXRhcmRvX2VudHJlX2xlY3R1cmFzXcKgWy1lIG1heF9ibG9xdWVzX2Rhw7FhZG9zXVxuIgorIiAgICAgICAgICAgICAgICBbLXAgbsO6bV9wYXNvc10gWy10IHBhdHLDs25fZGVfcHJ1ZWJhIFstdCBwYXRyw7NuX2RlX3BydWViYSAiCisiWy4uLl1dXVxuIgorIiAgICAgICAgICAgICAgICBkaXNwb3NpdGl2byBbYmxvcXVlX2ZpbmFsIFtibG9xdWVfaW5pY2lhbF1dXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogVGhlIC1uIGFuZCAtdyBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyIlczogTGFzIG9wY2lvbmVzIC1uIHkgLXcgc2UgZXhjbHV5ZW4gbXV0dWFtZW50ZS5cbiIKKyJcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTYuMmYlJSBkb25lLCAlcyBlbGFwc2VkLiAoJWQvJWQvJWQgZXJyb3JzKSIKK21zZ3N0ciAiJTYuMmYlJSBoZWNobywgJXMgdHJhbnNjdXJyaWRvLiAoJWQvJWQvJWQgZXJyb3JlcykiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzI4Cittc2dpZCAiVGVzdGluZyB3aXRoIHJhbmRvbSBwYXR0ZXJuOiAiCittc2dzdHIgIlByb2JhbmRvIGNvbiB1biBwYXRyw7NuIGFsZWF0b3JpbzogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM0NgorbXNnaWQgIlRlc3Rpbmcgd2l0aCBwYXR0ZXJuIDB4IgorbXNnc3RyICJQcm9iYW5kbyBjb24gZWwgcGF0csOzbiAweCIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNzggbWlzYy9iYWRibG9ja3MuYzo0NTEKK21zZ2lkICJkdXJpbmcgc2VlayIKK21zZ3N0ciAiZHVyYW50ZSBsYSBiw7pzcXVlZGEiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIldlaXJkIHZhbHVlICglbGQpIGluIGRvX3JlYWRcbiIKK21zZ3N0ciAiVmFsb3IgZXh0cmHDsW8gKCVsZCkgZW4gZG9fcmVhZFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ3NgorbXNnaWQgImR1cmluZyBleHQyZnNfc3luY19kZXZpY2UiCittc2dzdHIgImR1cmFudGUgZWwgZXh0MmZzX3N5bmNfZGV2aWNlIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ5NiBtaXNjL2JhZGJsb2Nrcy5jOjc1OAorbXNnaWQgIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iCittc2dzdHIgIm1pZW50cmFzIHNlIGNvbWVuemFiYSBsYSBpdGVyYWNpw7NuIGVuIGxhIGxpc3RhIGRlIGJsb3F1ZXMgZGHDsWFkb3MiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTExIG1pc2MvYmFkYmxvY2tzLmM6NjExIG1pc2MvYmFkYmxvY2tzLmM6NzY5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBidWZmZXJzIgorbXNnc3RyICJtaWVudHJhcyBzZSByZXNlcnZhYmFuIGxvcyBiw7pmZXJlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgYmxvY2tzICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiUmV2aXNhbmRvIGxvcyBibG9xdWVzIGRlbCAlbHUgYWwgJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTIwCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiUmV2aXNhbmRvIGxvcyBibG9xdWVzIGRhw7FhZG9zIGVuIG1vZG8gZGUgc8OzbG8gbGVjdHVyYVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyOQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChyZWFkLW9ubHkgdGVzdCk6ICIKK21zZ3N0ciAiU2UgZXN0w6FuIHJldmlzYW5kbyBsb3MgYmxvcXVlcyBkYcOxYWRvcyAocHJ1ZWJhIGRlIHPDs2xvIGxlY3R1cmEpOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTM2IG1pc2MvYmFkYmxvY2tzLmM6NjQzIG1pc2MvYmFkYmxvY2tzLmM6Njg1CisjOiBtaXNjL2JhZGJsb2Nrcy5jOjgzMgorbXNnaWQgIlRvbyBtYW55IGJhZCBibG9ja3MsIGFib3J0aW5nIHRlc3RcbiIKK21zZ3N0ciAiRGVtYXNpYWRvcyBibG9xdWVzIGRhw7FhZG9zLCBzZSBpbnRlcnJ1bXBlIGxhIHBydWViYVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYxOAorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJTZSBlc3TDoW4gcmV2aXNhbmRvIGxvcyBibG9xdWVzIGRhw7FhZG9zIGVuIG1vZG8gZGUgbGVjdHVyYS1lc2NyaXR1cmFcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MjAgbWlzYy9iYWRibG9ja3MuYzo3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSBibG9jayAlbHUgdG8gJWx1XG4iCittc2dzdHIgIkRlbCBibG9xdWUgJWx1IGFsICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY3NQorbXNnaWQgIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIgorbXNnc3RyICJMZXllbmRvIHkgY29tcGFyYW5kbzogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc4MQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiIgorIlJldmlzYW5kbyBsb3MgYmxvcXVlcyBkYcOxYWRvcyBlbiBtb2RvIGxlY3R1cmEtZXNjcml0dXJhIG5vIGRlc3RydWN0aXZvXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzg3Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIHRlc3QpXG4iCittc2dzdHIgIiIKKyJSZXZpc2FuZG8gbG9zIGJsb3F1ZXMgZGHDsWFkb3MgKHBydWViYSBkZSBsZWN0dXJhLWVzY3JpdHVyYSBubyBkZXN0cnVjdGl2YSlcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3OTQKK21zZ2lkICIiCisiXG4iCisiSW50ZXJydXB0IGNhdWdodCwgY2xlYW5pbmcgdXBcbiIKK21zZ3N0ciAiIgorIlxuIgorIlNlIGludGVyY2VwdMOzIHVuYSBpbnRlcnJ1cGNpw7NuLCBzZSBsaW1waWEgdG9kb1xuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjg3NworIywgYy1mb3JtYXQKK21zZ2lkICJkdXJpbmcgdGVzdCBkYXRhIHdyaXRlLCBibG9jayAlbHUiCittc2dzdHIgImR1cmFudGUgbGEgcHJ1ZWJhIGRlIGVzY3JpdHVyYSBkZSBkYXRvcyBkZWwgYmxvcXVlICVsdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5OTggbWlzYy91dGlsLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQ7ICIKK21zZ3N0ciAiJXMgZXN0w6EgbW9udGFkbzsgIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDAKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiIgorImxvcyBibG9xdWVzIGRhw7FhZG9zIHNlIGZ1ZXJ6YW4gZGUgdG9kYXMgZm9ybWFzLiAgU2UgY3JlZSBxdWUgL2V0Yy9tdGFiIGVzdMOpICIKKyJpbmNvcnJlY3RvLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDUKK21zZ2lkICJpdCdzIG5vdCBzYWZlIHRvIHJ1biBiYWRibG9ja3MhXG4iCittc2dzdHIgIsKhTm8gZXMgc2VndXJvIGVqZWN1dGFyIGxvcyBibG9xdWVzIGRhw7FhZG9zIVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMTAgbWlzYy91dGlsLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGFwcGFyZW50bHkgaW4gdXNlIGJ5IHRoZSBzeXN0ZW07ICIKK21zZ3N0ciAiJXMgZXN0w6EgYXBhcmVudGVtZW50ZSBlbiB1c28gcG9yIGVsIHNpc3RlbWE7ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDEzCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgImxvcyBibG9xdWVzIGRhw7FhZG9zIHNlIGZ1ZXJ6YW4gZGUgdG9kYXMgZm9ybWFzLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyAtICVzIgorbXNnc3RyICIlcyBpbnbDoWxpZG8gLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBiaWcgbWF4IGJhZCBibG9ja3MgY291bnQgJXUgLSBtYXhpbXVtIGlzICV1IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRlc3RfcGF0dGVybiAtICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSByZXNlcnZhciBtZW1vcmlhIHBhcmEgZWwgcGF0csOzbl9kZV9wcnVlYmEgLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTg0Cittc2dpZCAiTWF4aW11bSBvZiBvbmUgdGVzdF9wYXR0ZXJuIG1heSBiZSBzcGVjaWZpZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIiIKKyJTw7NsbyB1biBtw6F4aW1vIGRlIHVuIHBhdHLDs25fZGVfcHJ1ZWJhIHB1ZWRlIHNlciBlc3BlY2lmaWNhZG8gZW4gbW9kbyBzw7NsbyAiCisibGVjdHVyYSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTkwCittc2dpZCAiUmFuZG9tIHRlc3RfcGF0dGVybiBpcyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiRWwgcGF0csOzbl9kZV9wcnVlYmEgYWxlYXRvcmlvIG5vIGVzdMOhIHBlcm1pdGlkbyBlbiBtb2RvIHPDs2xvIGxlY3R1cmEiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwNAorbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBtYW51YWxseVxuIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgZGV0ZXJtaW5hciBlbCB0YW1hw7FvIGRlbCBkaXNwb3NpdGl2bzsgc2UgZGViZSBlc3BlY2lmaWNhclxuIgorImRlIGZvcm1hIG1hbnVhbFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMTAKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgZGV0ZXJtaW5hciBlbCB0YW1hw7FvIGRlbCBkaXNwb3NpdGl2byIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjE1Cittc2dpZCAibGFzdCBibG9jayIKK21zZ3N0ciAiw7psdGltbyBibG9xdWUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIyMQorbXNnaWQgImZpcnN0IGJsb2NrIgorbXNnc3RyICJwcmltZXIgYmxvcXVlIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAoJWxsdSk6IG11c3QgYmUgbGVzcyB0aGFuICVsbHUiCittc2dzdHIgImJsb3F1ZSBpbmljaWFsIG5vIHbDoWxpZG8gKCVsbHUpOiBkZWJlIHNlciBtZW5vcyBxdWUgJWxsdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZW5kIGJsb2NrICglbGx1KTogbXVzdCBiZSAzMi1iaXQgdmFsdWUiCittc2dzdHIgImJsb3F1ZSBmaW5hbCBubyB2w6FsaWRvICglbGx1KTogZGViZSBzZXIgdW4gdmFsb3IgZGUgMzIgYml0cyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjg3Cittc2dpZCAid2hpbGUgY3JlYXRpbmcgaW4tbWVtb3J5IGJhZCBibG9ja3MgbGlzdCIKK21zZ3N0ciAiY3VhbmRvIHNlIGNyZWFiYSBsYSBsaXN0YSBkZSBibG9xdWVzIGRhw7FhZG9zIGVuIG1lbW9yaWEiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI5NgorbXNnaWQgImlucHV0IGZpbGUgLSBiYWQgZm9ybWF0IgorbXNnc3RyICJmaWNoZXJvIGRlIGVudHJhZGEgLSBmb3JtYXRvIGluY29ycmVjdG8iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTMwNCBtaXNjL2JhZGJsb2Nrcy5jOjEzMTMKK21zZ2lkICJ3aGlsZSBhZGRpbmcgdG8gaW4tbWVtb3J5IGJhZCBibG9jayBsaXN0IgorbXNnc3RyICJjdWFuZG8gc2UgYcOxYWTDrWEgYSBsYSBsaXN0YSBkZSBibG9xdWVzIGRhw7FhZG9zIGVuIG1lbW9yaWEiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTMzOAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIKK21zZ3N0ciAiIgorIlBhc28gdGVybWluYWRvLCBzZSBlbmNvbnRyYXJvbiAldSBibG9xdWVzIGRhw7FhZG9zLiAoJWQvJWQvJWQgZXJyb3JlcylcbiIKKworIzogbWlzYy9jaGF0dHIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmZdIFstKz1hQWNDZERlaWpzU3RUdV0gWy12IHZlcnNpb25dIGZpbGVzLi4uXG4iCittc2dzdHIgIiIKKyJNb2RvIGRlIGVtcGxlbzogJXMgWy1SVmZdIFstKz1BYUNjRGRlaWpTc1R0dV0gWy12IHZlcnNpw7NuXSBmaWNoZXJvcy4uLlxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdmVyc2lvbiAtICVzXG4iCittc2dzdHIgInZlcnNpw7NuIGluY29ycmVjdGEgLSAlc1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwMSBtaXNjL2xzYXR0ci5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc3RhdCAlcyIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW50ZW50YWJhIHZlciBlbCBlc3RhZG8gZGVsIGZpY2hlcm8gJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIm1pZW50cmFzIHNlIGVzdGFiYW4gbGV5ZW5kbyBsYXMgYmFuZGVyYXMgZW4gJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjEzIG1pc2MvY2hhdHRyLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzIG9mICVzIHNldCBhcyAiCittc2dzdHIgIkxhcyBiYW5kZXJhcyBkZSAlcyBlc3TDoW4gcHVlc3RhcyBjb21vICIKKworIzogbWlzYy9jaGF0dHIuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAibWllbnRyYXMgc2UgcG9uw61hbiBsYXMgYmFuZGVyYXMgZW4gJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gb2YgJXMgc2V0IGFzICVsdVxuIgorbXNnc3RyICJMYSB2ZXJzacOzbiBkZSAlcyBlc3TDoSBwdWVzdGEgY29tbyAlbHVcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJtaWVudHJhcyBzZSBlc3RhYmEgcG9uaWVuZG8gbGEgdmVyc2nDs24gZW4gJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjY3Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgcGF0aCB2YXJpYWJsZSBpbiBjaGF0dHJfZGlyX3Byb2MiCittc2dzdHIgIk5vIHNlIHB1ZWRlIHJlc2VydmFyIGxhIHZhcmlhYmxlIGRlIHJ1dGEgZW4gY2hhdHRyX2Rpcl9wcm9jIgorCisjOiBtaXNjL2NoYXR0ci5jOjMwNworbXNnaWQgIj0gaXMgaW5jb21wYXRpYmxlIHdpdGggLSBhbmQgK1xuIgorbXNnc3RyICI9IGVzIGluY29tcGF0aWJsZSBjb24gLSB5ICtcbiIKKworIzogbWlzYy9jaGF0dHIuYzozMTUKK21zZ2lkICJNdXN0IHVzZSAnLXYnLCA9LCAtIG9yICtcbiIKK21zZ3N0ciAiU2UgZGViZSB1c2FyICctdicsID0sIC0gbyArXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2NrPTxudW0+XSBbLW8gYmxvY2tzaXplPTxudW0+XSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIk1vZG8gZGUgZW1wbGVvOiAlcyBbLWJmaGl4Vl0gWy1vIHN1cGVyYmxvY2s9PG7Dum1lcm8+XSBbLW8gIgorImJsb2Nrc2l6ZT08bsO6bWVybz5dIGRpc3Bvc2l0aXZvXG4iCisKKyMgVXNhZG8gcXVpbmNlIG1lbnNhamVzIG3DoXMgYWxsw6EuCisjOiBtaXNjL2R1bXBlMmZzLmM6MTU5Cittc2dpZCAiYmxvY2tzIgorbXNnc3RyICJibG9xdWVzIgorCisjIFVzYWRvIHF1aW5jZSBtZW5zYWplcyBtw6FzIGFsbMOhLgorIzogbWlzYy9kdW1wZTJmcy5jOjE2OQorbXNnaWQgImNsdXN0ZXJzIgorbXNnc3RyICLCq2NsdXN0ZXJzwrsiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiR3JvdXAgJWx1OiAoQmxvY2tzICIKK21zZ3N0ciAiR3J1cG8gJWx1OiAoQmxvcXVlcyAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDaGVja3N1bSAweCUwNHgiCittc2dzdHIgIiAgwqtDaGVja3N1bcK7IDB4JTA0eCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKEVYUEVDVEVEIDB4JTA0eCkiCittc2dzdHIgIiAoRVNQRVJBRE8gMHglMDR4KSIKKworIyBGSVhNRTogJXUgQkVGT1JFIHVudXNlZAorIzogbWlzYy9kdW1wZTJmcy5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICIsIHVudXNlZCBpbm9kZXMgJXVcbiIKK21zZ3N0ciAiLCAldSBub2Rvcy1pIHNpbiB1c2FyXG4iCisKKyMgU2UgY29tcGxldGEgY29uIHVubyBkZSBsb3MgZG9zIG1lbnNhamVzIHNpZ3VpZW50ZXMuCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgJXMgc3VwZXJibG9jayBhdCAiCittc2dzdHIgIiAgU3VwZXJibG9xdWUgJXMgZW4gIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE0Cittc2dpZCAiUHJpbWFyeSIKK21zZ3N0ciAicHJpbWFyaW8iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTQKK21zZ2lkICJCYWNrdXAiCittc2dzdHIgImRlIHJlc3BhbGRvIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE4Cittc2dpZCAiLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAiCittc2dzdHIgIiwgZGVzY3JpcHRvcmVzIGRlIGdydXBvIGVuICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyMgorbXNnaWQgIiIKKyJcbiIKKyIgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBTZSByZXNlcnZhcm9uIGxvcyBibG9xdWVzIEdEVCBlbiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjkKK21zZ2lkICIgR3JvdXAgZGVzY3JpcHRvciBhdCAiCittc2dzdHIgIiBEZXNjcmlwdG9yIGRlIGdydXBvIGVuICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzNQorbXNnaWQgIiAgQmxvY2sgYml0bWFwIGF0ICIKK21zZ3N0ciAiICBNYXBhIGRlIGJpdHMgZGUgYmxvcXVlcyBlbiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzkKK21zZ2lkICIsIElub2RlIGJpdG1hcCBhdCAiCittc2dzdHIgIiwgbWFwYSBkZSBiaXRzIGRlIG5vZG9zLWkgZW4gIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQzCittc2dpZCAiIgorIlxuIgorIiAgSW5vZGUgdGFibGUgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBUYWJsYSBkZSBub2Rvcy1pIGVuICIKKworIyBFbCBwcmltZXIgJXMgZGUgc3VzdGl0dXllIGNvbiAiYmxvcXVlcyIgbyAiY2x1c3RlcnMiLCBlbCBzZWd1bmRvIGNvbiBuYWRhIG8gIlxuIi4KKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiAgJXUgZnJlZSAlcywgJXUgZnJlZSBpbm9kZXMsICV1IGRpcmVjdG9yaWVzJXMiCittc2dzdHIgIiIKKyJcbiIKKyIgICV1ICVzIGxpYnJlcywgJXUgbm9kb3MtaSBsaWJyZXMsICV1IGRpcmVjdG9yaW9zJXMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAldSB1bnVzZWQgaW5vZGVzXG4iCittc2dzdHIgIiwgJXUgbm9kb3MtaSBzaW4gdXNhclxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU5Cittc2dpZCAiICBGcmVlIGJsb2NrczogIgorbXNnc3RyICIgIEJsb3F1ZXMgbGlicmVzOiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNzQKK21zZ2lkICIgIEZyZWUgaW5vZGVzOiAiCittc2dzdHIgIiAgTm9kb3MtaSBsaWJyZXM6ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxMAorbXNnaWQgIndoaWxlIHByaW50aW5nIGJhZCBibG9jayBsaXN0IgorbXNnc3RyICJtaWVudHJhcyBzZSBpbXByaW3DrWEgbGEgbGlzdGEgZGUgYmxvcXVlcyBkYcOxYWRvcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2tzOiAldSIKK21zZ3N0ciAiQmxvcXVlcyBkYcOxYWRvczogJXUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNDUgbWlzYy90dW5lMmZzLmM6MzQ3Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJtaWVudHJhcyBzZSBsZcOtYSBlbCBub2RvLWkgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1MQorbXNnaWQgIndoaWxlIG9wZW5pbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAibWllbnRyYXMgc2UgYWJyw61hIGVsIG5vZG8taSBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzU3Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyIGJsb2NrIgorbXNnc3RyICJtaWVudHJhcyBzZSBsZcOtYSBlbCBzdXBlcmJsb3F1ZSBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzY0Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlciBpbnZhbGlkIVxuIgorbXNnc3RyICIiCisiwqFFbCBuw7ptZXJvIG3DoWdpY28gZGVsIHN1cGVyYmxvcXVlIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgZXMgaW52w6FsaWRvIVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzY3Cittc2dpZCAiSm91cm5hbCBmZWF0dXJlczogICAgICAgICIKK21zZ3N0ciAiQ2FyYWN0ZXLDrXN0aWNhcyBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzOiAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzgwCittc2dpZCAiSm91cm5hbCBzaXplOiAgICAgICAgICAgICAiCittc2dzdHIgIlRhbWHDsW8gZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lczogICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorbXNnc3RyICIiCisiTG9uZ2l0dWQgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lczogICAgICAgICAgICV1XG4iCisiU2VjdWVuY2lhIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXM6ICAgICAgICAgIDB4JTA4eFxuIgorIkluaWNpbyBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzOiAgICAgICAgICAgICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZXJybm86ICAgICAgICAgICAgJWRcbiIKK21zZ3N0ciAiTsO6bWVybyBkZSBlcnJvciBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzOiAgICAlZFxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDE1IG1pc2MvdHVuZTJmcy5jOjE5NgorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJtaWVudHJhcyBzZSBsZcOtYSBlbCBzdXBlcmJsb3F1ZSBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDIzCittc2dpZCAiQ291bGRuJ3QgZmluZCBqb3VybmFsIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVycyIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlbiBlbmNvbnRyYXIgbG9zIG7Dum1lcm9zIG3DoWdpY29zIGRlbCBzdXBlcmJsb3F1ZSBkZWwgZmljaGVybyBkZSAiCisidHJhbnNhY2Npb25lcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBibG9jayBzaXplOiAgICAgICAldVxuIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIGZpcnN0IGJsb2NrOiAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCisiSm91cm5hbCBudW1iZXIgb2YgdXNlcnM6ICAldVxuIgorbXNnc3RyICIiCisiXG4iCisiVGFtYcOxbyBkZWwgYmxvcXVlIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXM6ICAldVxuIgorIkxvbmdpdHVkIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXM6ICAgICAgICAgICAldVxuIgorIlByaW1lciBibG9xdWUgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lczogICAgICAldVxuIgorIlNlY3VlbmNpYSBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzOiAgICAgICAgICAweCUwOHhcbiIKKyJJbmljaW8gZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lczogICAgICAgICAgICAgJXVcbiIKKyJOw7ptZXJvIGRlIHVzdWFyaW9zIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXM6ICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB1c2VyczogICAgICAgICAgICAlc1xuIgorbXNnc3RyICJVc3VhcmlvcyBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzOiAgICAgICAgICAgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ1NiBtaXNjL21rZTJmcy5jOjc0MyBtaXNjL3R1bmUyZnMuYzoxMjExCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIG9wdGlvbnMhXG4iCittc2dzdHIgIiIKKyLCoU5vIHNlIHB1ZWRlIHJlc2VydmFyIG1lbW9yaWEgcGFyYSBhbmFsaXphciBzaW50w6FjdGljYW1lbnRlIGxhcyBvcGNpb25lcyFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2sgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXLDoW1ldHJvIGRlIHN1cGVyYmxvcXVlIG5vIHbDoWxpZG86ICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBibG9ja3NpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXLDoW1ldHJvIGRlIHRhbWHDsW8gZGVsIGJsb3F1ZSBubyB2w6FsaWRvOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgZXh0ZW5kZWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdXBlcmJsb2NrPTxzdXBlcmJsb2NrIG51bWJlcj5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvY2tzaXplPlxuIgorbXNnc3RyICIiCisiXG4iCisiTGFzIG9wY2lvbmVzIGVzcGVjaWZpY2FkYXMgc29uIGluY29ycmVjdGFzOiAlc1xuIgorIlxuIgorIk9wY2lvbmVzIGV4dGVuZGlkYXMgZGViZW4gZXN0YXIgc2VwYXJhZGFzIHBvciBjb21hcywgeSBwdWVkZW4gdG9tYXIgdW5cbiIKKyJcdGFyZ3VtZW50byBxdWUgc2UgYWp1c3RhIGNvbiB1biBzaWdubyBkZSBpZ3VhbCAoJz0nKS5cbiIKKyJcbiIKKyJMYXMgb3BjaW9uZXMgZXh0ZW5kaWRhcyB2w6FsaWRhcyBzb246XG4iCisiXHRzdXBlcmJsb2NrPTxuw7ptZXJvX2RlbF9zdXBlcmJsb3F1ZT5cbiIKKyJcdGJsb2Nrc2l6ZT08dGFtYcOxb19kZWxfYmxvcXVlPlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTY4IG1pc2MvbWtlMmZzLmM6MTczNAorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzXG4iCittc2dzdHIgIlx0U2UgZW1wbGVhICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo2MDYgbWlzYy9lMmltYWdlLmM6MTU4MiBtaXNjL3R1bmUyZnMuYzoyMDYwCisjOiByZXNpemUvbWFpbi5jOjMxOQorbXNnaWQgIkNvdWxkbid0IGZpbmQgdmFsaWQgZmlsZXN5c3RlbSBzdXBlcmJsb2NrLlxuIgorbXNnc3RyICIiCisiTm8gc2UgcHVkbyBlbmNvbnRyYXIgdW4gc3VwZXJibG9xdWUgdsOhbGlkbyBwYXJhIGVsIHNpc3RlbWEgZGUgZmljaGVyb3MuXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAlczogZXJyb3IgcmVhZGluZyBiaXRtYXBzOiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICVzOiBlcnJvciBhbCBsZWVyIGxvcyBtYXBhcyBkZSBiaXRzOiAlc1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFsgLXJ8USBdIFsgLWZyIF0gZGV2aWNlIGltYWdlLWZpbGVcbiIKK21zZ3N0ciAiTW9kbyBkZSBlbXBsZW86ICVzIFstcnxRXSBbLWZyXSBkaXNwb3NpdGl2byBmaWNoZXJvX2RlX2ltYWdlblxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIC1JIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIiAgICAgICAgICAgICAgICAlcyAtSSBkaXNwb3NpdGl2byBmaWNoZXJvX2RlX2ltYWdlblxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgICAgICAlcyAtcmEgIFsgIC1jZm5wICBdIFsgLW8gc3JjX29mZnNldCBdIFsgLU8gZGVzdF9vZmZzZXQgXSBzcmNfZnMgIgorIlsgZGVzdF9mcyBdXG4iCittc2dzdHIgIiIKKyIgICAgICAgICAgICAgJXMgLXJhICBbICAtY2ZucCAgXSBbIC1vIGRlc3Bsel9vcmlnIF0gWyAtTyBkZXNwbHpfZGVzdCBdICIKKyJmc19vcmlnIFsgZnNfZGVzdCBdXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2OSBtaXNjL2UyaW1hZ2UuYzo1NzYgbWlzYy9lMmltYWdlLmM6NTgyCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTc4Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBidWZmZXIiCittc2dzdHIgIm1pZW50cmFzIHNlIHJlc2VydmFiYSB1biBiw7pmZXIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAiRXNjcmliaWVuZG8gZWwgYmxvcXVlICVsbHVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHdyaXRpbmcgYmxvY2sgJWxsdSIKK21zZ3N0ciAiZXJyb3IgYWwgZXNjcmliaXIgZWwgYmxvcXVlICVsbHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE5MQorbXNnaWQgImVycm9yIGluIGdlbmVyaWNfd3JpdGUoKSIKK21zZ3N0ciAiZXJyb3IgZW4gZ2VuZXJpY193cml0ZSgpIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMDgKK21zZ2lkICJFcnJvcjogaGVhZGVyIHNpemUgaXMgYmlnZ2VyIHRoYW4gd3J0X3NpemVcbiIKK21zZ3N0ciAiRXJyb3I6IGVsIHRhbWHDsW8gZGUgbGEgY2FiZWNlcmEgZXMgbWF5b3IgcXVlIHdydF9zaXplXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjIxMworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGhlYWRlciBidWZmZXJcbiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgcmVzZXJ2YXIgZWwgYsO6ZmVyIGRlbCBlbmNhYmV6YWRvXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI0MQorbXNnaWQgIndoaWxlIHdyaXRpbmcgc3VwZXJibG9jayIKK21zZ3N0ciAibWllbnRyYXMgc2UgZXNjcmliw61hIGVsIHN1cGVyYmxvcXVlIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNTAKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJtaWVudHJhcyBzZSBlc2NyaWLDrWEgbGEgdGFibGEgZGUgbm9kb3MtaSIKKworIzogbWlzYy9lMmltYWdlLmM6MjU4Cittc2dpZCAid2hpbGUgd3JpdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgIm1pZW50cmFzIHNlIGVzY3JpYsOtYSBlbCBtYXBhIGRlIGJpdHMgZGUgYmxvcXVlcyIKKworIzogbWlzYy9lMmltYWdlLmM6MjY2Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSBiaXRtYXAiCittc2dzdHIgIm1pZW50cmFzIHNlIGVzY3JpYsOtYSBlbCBtYXBhIGRlIGJpdHMgZGUgbm9kb3MtaSIKKworIzogbWlzYy9lMmltYWdlLmM6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCByZWNfbGVuICglZClcbiIKK21zZ3N0ciAiQmxvcXVlIGRlIGRpcmVjdG9yaW8gY29ycnVwdG8gJWxsdTogcmVjX2xlbiBpbmNvcnJlY3RvICglZClcbiIKKworIzogbWlzYy9lMmltYWdlLmM6NTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCBuYW1lX2xlbiAoJWQpXG4iCittc2dzdHIgIkJsb3F1ZSBkZSBkaXJlY3RvcmlvIGNvcnJ1cHRvICVsbHU6IG5hbWVfbGVuIGluY29ycmVjdG8gKCVkKVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSIKK21zZ3N0ciAiJWxsdSAvICVsbHUgYmxvcXVlcyAoJWQlJSkiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjU4NiBtaXNjL2UyaW1hZ2UuYzo2MjYKK21zZ2lkICJDb3B5aW5nICIKK21zZ3N0ciAiQ29waWFuZG8gIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo2MjMKK21zZ2lkICIiCisiU3RvcHBpbmcgbm93IHdpbGwgZGVzdHJveSB0aGUgZmlsZXN5c3RlbSwgaW50ZXJydXB0IGFnYWluIGlmIHlvdSBhcmUgc3VyZVxuIgorbXNnc3RyICIiCisiUGFyYXIgYWhvcmEgZGVzdHJ1aXLDoSBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zOyBpbnRlcnJ1bXBhIG90cmEgdmV6IHNpIGVzdMOhICIKKyJzZWd1cm9cbiIKKworIzogbWlzYy9lMmltYWdlLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyByZW1haW5pbmcgYXQgJS4yZiBNQi9zIgorbXNnc3RyICIgJXMgcmVzdGFudGUgYSAlLjJmIE1CL3MiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjY2MSBtaXNjL2UyaW1hZ2UuYzoxMTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgYmxvY2sgJWxsdSIKK21zZ3N0ciAiZXJyb3IgYWwgbGVlciBlbCBibG9xdWUgJWxsdSIKKworIzogbWlzYy9lMmltYWdlLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcGllZCAlbGx1IC8gJWxsdSBibG9ja3MgKCVkJSUpIGluICVzICIKK21zZ3N0ciAiQ29waWFkb3MgJWxsdSAvICVsbHUgYmxvcXVlcyAoJWQlJSkgaW4gJXMgIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXQgJS4yZiBNQi9zIgorbXNnc3RyICJhICUuMmYgTUIvcyIKKworIzogbWlzYy9lMmltYWdlLmM6NzU1Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBsMSB0YWJsZSIKK21zZ3N0ciAibWllbnRyYXMgc2UgcmVzZXJ2YWJhIHVuYSB0YWJsZSBsMSIKKworIzogbWlzYy9lMmltYWdlLmM6ODAwCittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBsMiBjYWNoZSIKK21zZ3N0ciAibWllbnRyYXMgc2UgcmVzZXJ2YWJhIHVuYSBjYWNow6kgbDIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjgyMworbXNnaWQgIiIKKyJXYXJuaW5nOiBUaGVyZSBhcmUgc3RpbGwgdGFibGVzIGluIHRoZSBjYWNoZSB3aGlsZSBwdXR0aW5nIHRoZSBjYWNoZSwgZGF0YSAiCisid2lsbCBiZSBsb3N0IHNvIHRoZSBpbWFnZSBtYXkgbm90IGJlIHZhbGlkLlxuIgorbXNnc3RyICIiCisiQXRlbmNpw7NuOiBUb2RhdsOtYSBoYXkgdGFibGFzIGVuIGxhIGNhY2jDqSBtaWVudHJhcyBzZSBlc3TDoSBwb25pZW5kbyBsYSBjYWNow6k7ICIKKyJzZSBwZXJkZXLDoW4gZGF0b3MsIHBvciBsbyBxdWUgbGEgaW1hZ2VuIHBvZHLDrWEgbm8gc2VyIHbDoWxpZGEuXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjExNDUKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGV4dDJfcWNvdzJfaW1hZ2UiCittc2dzdHIgIm1pZW50cmFzIHNlIHJlc2VydmFiYSBleHQyX3Fjb3cyX2ltYWdlIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTUyCittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGV4dDJfcWNvdzJfaW1hZ2UiCittc2dzdHIgIm1pZW50cmFzIHNlIGluaWNpYWxpemFiYSBleHQyX3Fjb3cyX2ltYWdlIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjExIG1pc2MvZTJpbWFnZS5jOjEyMjkKK21zZ2lkICJQcm9ncmFtbWluZyBlcnJvcjogbXVsdGlwbGUgc2VxdWVudGlhbCByZWZjb3VudCBibG9ja3MgY3JlYXRlZCFcbiIKK21zZ3N0ciAiIgorIkVycm9yIGRlIHByb2dyYW1hY2nDs246IMKhc2UgaGFuIGNyZWFkbyBtw7psdGlwbGVzIGJsb3F1ZXMgY29uIGN1ZW50YSBkZSAiCisicmVmZXJlbmNpYSBzZWN1ZW5jaWFsIVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjY5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgIm1pZW50cmFzIHNlIHJlc2VydmFiYSBlbCBtYXBhIGRlIGJpdHMgZGUgYmxvcXVlcyIKKworIzogbWlzYy9lMmltYWdlLmM6MTI3OAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgc2NyYW1ibGUgYmxvY2sgYml0bWFwIgorbXNnc3RyICJtaWVudHJhcyBzZSByZXNlcnZhYmEgZWwgbWFwYSBkZSBiaXRzIGRlIGJsb3F1ZXMgZGUgwqtzY3JhbWJsZcK7IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjg1Cittc2dpZCAiU2Nhbm5pbmcgaW5vZGVzLi4uXG4iCittc2dzdHIgIkV4cGxvcmFuZG8gbm9kb3MtaS4uLlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjk3Cittc2dpZCAiQ2FuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIgorbXNnc3RyICJObyBzZSBwdWVkZSByZXNlcnZhciBlbCBiw7pmZXIgZGUgYmxvcXVlIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzM2IG1pc2MvZTJpbWFnZS5jOjEzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgaXRlcmF0aW5nIG92ZXIgaW5vZGUgJXUiCittc2dzdHIgIm1pZW50cmFzIHNlIGl0ZXJhYmEgc29icmUgZWwgbm9kby1pICV1IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzgxCittc2dpZCAiUmF3IGFuZCBxY293MiBpbWFnZXMgY2Fubm90IGJlIGluc3RhbGxlZCIKK21zZ3N0ciAiTm8gc2UgcHVlZGVuIGluc3RhbGFyIGxhcyBpbcOhZ2VuZXMgZW4gYnJ1dG8geSBxY293MiIKKworIzogbWlzYy9lMmltYWdlLmM6MTQwMworbXNnaWQgImVycm9yIHJlYWRpbmcgYml0bWFwcyIKK21zZ3N0ciAiZXJyb3IgbWllbnRyYXMgc2UgbGXDrWFuIGxvcyBtYXBhcyBkZSBiaXRzIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDE1Cittc2dpZCAid2hpbGUgb3BlbmluZyBkZXZpY2UgZmlsZSIKK21zZ3N0ciAibWllbnRyYXMgc2UgYWJyw61hIGVsIGZpY2hlcm8gZGUgZGlzcG9zaXRpdm8iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MjYKK21zZ2lkICJ3aGlsZSByZXN0b3JpbmcgdGhlIGltYWdlIHRhYmxlIgorbXNnc3RyICJtaWVudHJhcyBzZSByZXN0YXVyYWJhIGxhIHRhYmxhIGRlIGxhIGltYWdlbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUyMworbXNnaWQgIi1hIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIHdpdGggcmF3IG9yIFFDT1cyIGltYWdlcy4iCittc2dzdHIgImxhIG9wY2nDs24gLWEgc29sbyBwdWVkZSB1dGlsaXphcnNlIGNvbiBpbcOhZ2VuZXMgZW4gYnJ1dG8gbyBRQ09XMi4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MjkKK21zZ2lkICJPZmZzZXRzIGFyZSBvbmx5IGFsbG93ZWQgd2l0aCByYXcgaW1hZ2VzLiIKK21zZ3N0ciAiU29sbyBzZSBwZXJtaXRlbiBkZXNwbGF6YW1pZW50b3MgY29uIGltw6FnZW5lcyBlbiBicnV0by4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MzQKK21zZ2lkICJNb3ZlIG1vZGUgaXMgb25seSBhbGxvd2VkIHdpdGggcmF3IGltYWdlcy4iCittc2dzdHIgIlNvbG8gc2UgcGVybWl0ZSBlbCBtb2RvIGRlIG1vdmltaWVudG8gY29uIGltw6FnZW5lcyBlbiBicnV0by4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MzkKK21zZ2lkICJNb3ZlIG1vZGUgcmVxdWlyZXMgYWxsIGRhdGEgbW9kZS4iCittc2dzdHIgIkVsIG1vZG8gZGUgbW92aW1pZW50byByZXF1aWVyZSBlbCBtb2RvIGRlIHRvZG9zIGxvcyBkYXRvcy4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1NDkKK21zZ2lkICJjaGVja2luZyBpZiBtb3VudGVkIgorbXNnc3RyICJjb21wcm9iYW5kbyBzaSBlc3TDoSBtb250YWRvIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTU2Cittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgZTJpbWFnZSBvbiBhIFIvVyBtb3VudGVkIGZpbGVzeXN0ZW0gY2FuIHJlc3VsdCBpbiBhblxuIgorImluY29uc2lzdGVudCBpbWFnZSB3aGljaCB3aWxsIG5vdCBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiIKKyJVc2UgLWYgb3B0aW9uIGlmIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGF0LlxuIgorbXNnc3RyICIiCisiXG4iCisiRWplY3V0YXIgZTJpbWFnZSBlbiB1biBzaXN0ZW1hIGRlIGZpY2hlcm9zIG1vbnRhZG8gcGFyYSBsZWN0dXJhIHkgZXNjcml0dXJhICIKKyJwdWVkZSBkYXJcbiIKKyJjb21vIHJlc3VsdGFkbyB1bmEgaW1hZ2VuIGluY29uc2lzdGVudGUgcXVlIG5vIHNlcnZpcsOhIHBhcmEgZGVwdXJhci5cbiIKKyJVdGlsaWNlIGxhIG9wY2nDs24gLWYgc2kgcmVhbG1lbnRlIGRlc2VhIGhhY2VyIGVzby5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYwOAorbXNnaWQgIlFDT1cyIGltYWdlIGNhbiBub3QgYmUgd3JpdHRlbiB0byB0aGUgc3Rkb3V0IVxuIgorbXNnc3RyICLCoUxhIGltYWdlbiBRQ09XMiBubyBwdWVkZSBlc2NyaWJpcnNlIGVuIGxhIHNhbGlkYSBlc3TDoW5kYXIhXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MTQKK21zZ2lkICJDYW4gbm90IHN0YXQgb3V0cHV0XG4iCittc2dzdHIgIk5vIHB1ZWRlIGV4YW1pbmFyc2UgbGEgc2FsaWRhXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW1hZ2UgKCVzKSBpcyBjb21wcmVzc2VkXG4iCittc2dzdHIgIkxhIGltYWdlbiAoJXMpIGVzdMOhIGNvbXByaW1pZGFcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbWFnZSAoJXMpIGlzIGVuY3J5cHRlZFxuIgorbXNnc3RyICJMYSBpbWFnZW4gKCVzKSBlc3TDoSBjaWZyYWRhXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGNvbnZlcnQgcWNvdzIgaW1hZ2UgKCVzKSBpbnRvIHJhdyBpbWFnZSAoJXMpIgorbXNnc3RyICIiCisibWllbnRyYXMgc2UgaW50ZW50YWJhIGNvbnZlcnRpciBsYSBpbWFnZW4gcWNvdzIgKCVzKSBhIGltYWdlbiBlbiBicnV0byAoJXMpIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjM5Cittc2dpZCAiVGhlIC1jIG9wdGlvbiBvbmx5IHN1cHBvcnRlZCBpbiByYXcgbW9kZVxuIgorbXNnc3RyICJMYSBvcGNpw7NuIC1jIHNvbG8gZXN0w6EgaW1wbGVtZW50YWRhIGVuIGVsIG1vZG8gZW4gYnJ1dG9cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY0NAorbXNnaWQgIlRoZSAtYyBvcHRpb24gbm90IHN1cHBvcnRlZCB3aGVuIHdyaXRpbmcgdG8gc3Rkb3V0XG4iCittc2dzdHIgIkxhIG9wY2nDs24gLWMgbm8gZnVuY2lvbmEgY3VhbmRvIHNlIGVzY3JpYmUgZW4gbGEgc2FsaWRhIGVzdMOhbmRhclxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjUxCittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBjaGVja19idWYiCittc2dzdHIgIm1pZW50cmFzIHNlIHJlc2VydmFiYSBjaGVja19idWYiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NTcKK21zZ2lkICJUaGUgLXAgb3B0aW9uIG9ubHkgc3VwcG9ydGVkIGluIHJhdyBtb2RlXG4iCittc2dzdHIgIkxhIG9wY2nDs24gLXAgc29sbyBlc3TDoSBpbXBsZW1lbnRhZGEgZW4gZWwgbW9kbyBlbiBicnV0b1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsb2NrcyBhbHJlYWR5IGNvbnRhaW5lZCB0aGUgZGF0YSB0byBiZSBjb3BpZWRcbiIKK21zZ3N0ciAiJWQgYmxvcXVlcyB5YSBjb250ZW7DrWFuIGxvcyBkYXRvcyBxdWUgaGFiw61hIHF1ZSBjb3BpYXJcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IG9wZW4gJXNcbiIKK21zZ3N0ciAiZTJsYWJlbDogbm8gc2UgcHVlZGUgYWJyaXIgJXNcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBubyBzZSBwdWVkZSBidXNjYXIgYWwgc3VwZXJibG9xdWVcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3IgcmVhZGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGVycm9yIGxleWVuZG8gZWwgc3VwZXJibG9xdWVcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogbm90IGFuIGV4dDIgZmlsZXN5c3RlbVxuIgorbXNnc3RyICJlMmxhYmVsOiBubyBlcyB1biBzaXN0ZW1hIGRlIGZpY2hlcm9zIGV4dDJcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6OTcgbWlzYy90dW5lMmZzLmM6MjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBsYWJlbCB0b28gbG9uZywgdHJ1bmNhdGluZy5cbiIKK21zZ3N0ciAiQXRlbmNpw7NuOiBsYSBldGlxdWV0YSBlcyBtdXkgbGFyZ2EsIHNlIHRydW5jYS5cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2sgYWdhaW5cbiIKK21zZ3N0ciAiZTJsYWJlbDogZGUgbnVldm8sIG5vIHNlIHB1ZWRlIGVuY29udHJhciBhbCBzdXBlcmJsb3F1ZVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3Igd3JpdGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGVycm9yIGFsIGVzY3JpYmlyIGVsIHN1cGVyYmxvcXVlXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjExNyBtaXNjL3R1bmUyZnMuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGUybGFiZWwgZGV2aWNlIFtuZXdsYWJlbF1cbiIKK21zZ3N0ciAiTW9kbyBkZSBlbXBsZW86IGUybGFiZWwgZGlzcG9zaXRpdm8gW251ZXZhYmFuZGVyYV1cbiIKKworIzogbWlzYy9lMnVuZG8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgPHRyYW5zYWN0aW9uIGZpbGU+IDxmaWxlc3lzdGVtPlxuIgorbXNnc3RyICJNb2RvIGRlIGVtcGxlbzogJXMgPGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcz4gPHNpc3RlbWEgZGUgZmljaGVyb3M+XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NTIKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIKK21zZ3N0ciAiRmFsbG8gbWllbnRyYXMgc2UgaW50ZW50YWJhbiBsZWVyIGxvcyBkYXRvcyBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBcbiIKKworIzogbWlzYy9lMnVuZG8uYzo2MiBtaXNjL2UydW5kby5jOjgzIG1pc2MvZTJ1bmRvLmM6MTA4IG1pc2MvZTJ1bmRvLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfZmV0Y2ggJXNcbiIKK21zZ3N0ciAiRmFsbG8gZW4gdGRiX2ZldGNoICVzXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIE1vdW50IHRpbWUgZGlkbid0IG1hdGNoICV1XG4iCittc2dzdHIgIkxhIGhvcmEgZGUgbW9udGFqZSBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBubyBjdWFkcmFiYSAldVxuIgorCisjOiBtaXNjL2UydW5kby5jOjg5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIFVVSUQgZGlkbid0IG1hdGNoIFxuIgorbXNnc3RyICJFbCBVVUlEIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIG5vIGN1YWRyYWJhIFxuIgorCisjOiBtaXNjL2UydW5kby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX29wZW4gJXNcbiIKK21zZ3N0ciAiRmFsbG8gZW4gdGRiX29wZW4gJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICJFcnJvciBtaWVudHJhcyBzZSBkZXRlcm1pbmFiYSBzaSAlcyBlc3TDoSBtb250YWRvLlxuIgorCisjOiBtaXNjL2UydW5kby5jOjE3NQorbXNnaWQgImUydW5kbyBzaG91bGQgb25seSBiZSBydW4gb24gdW5tb3VudGVkIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgIiIKKyJlMnVuZG8gc29sbyBkZWJlcsOtYSBlamVjdXRhcnNlIHNvYnJlIHVuIHNpc3RlbWEgZGUgZmljaGVyb3Mgbm8gbW9udGFkb1xuIgorCisjOiBtaXNjL2UydW5kby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlc1xuIgorbXNnc3RyICJGYWxsbyBtaWVudHJhcyBzZSBpbnRlbnRhYmEgYWJyaXIgJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwbGF5ZWQgdHJhbnNhY3Rpb24gb2Ygc2l6ZSAlemQgYXQgbG9jYXRpb24gJWxsdVxuIgorbXNnc3RyICJTZSBlamVjdXTDsyBkZSBudWV2byB1biB0cmFuc2FjY2nDs24gZGUgdGFtYcOxbyAlemQgZW4gbGEgcG9zaWNpw7NuICVsbHVcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHdyaXRlICVzXG4iCittc2dzdHIgIkZhbGxvIGRlIGVzY3JpdHVyYSAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogY291bGRuJ3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiQVRFTkNJw5NOOiBubyBzZSBwdWVkZSBhYnJpciAlczogJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGJhZCBmb3JtYXQgb24gbGluZSAlZCBvZiAlc1xuIgorbXNnc3RyICJBVEVOQ0nDk046IGZvcm1hdG8gaW5jb3JyZWN0byBlbiBsYSBsw61uZWEgJWQgZGUgJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzcwCittc2dpZCAiIgorIldBUk5JTkc6IFlvdXIgL2V0Yy9mc3RhYiBkb2VzIG5vdCBjb250YWluIHRoZSBmc2NrIHBhc3Nub1xuIgorIlx0ZmllbGQuICBJIHdpbGwga2x1ZGdlIGFyb3VuZCB0aGluZ3MgZm9yIHlvdSwgYnV0IHlvdVxuIgorIlx0c2hvdWxkIGZpeCB5b3VyIC9ldGMvZnN0YWIgZmlsZSBhcyBzb29uIGFzIHlvdSBjYW4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJBVEVOQ0nDk046IEVsIC9ldGMvZnN0YWIgbm8gY29udGllbmUgZWwgY2FtcG8gcGFzc25vIGZzY2suXG4iCisiXHRTZSBpbnRlbnRhcsOhIGhhY2VyIHVuIHRydWNvLCBwZXJvIHNlIGRlYmVyw61hIGFycmVnbGFyIGVsIFxuIgorIlx0ZmljaGVybyAvZXRjL2ZzdGFiIHRhbiBwcm9udG8gY29tbyBzZWEgcG9zaWJsZS5cbiIKKyJcbiIKKworIzogbWlzYy9mc2NrLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6ICVzOiBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNjazogJXM6IG5vIHNlIGVuY29udHLDs1xuIgorCisjOiBtaXNjL2ZzY2suYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIgorbXNnc3RyICIlczogZXNwZXJhOiDCv8Khwr9ObyBoYXkgbcOhcyBwcm9jZXNvcyBoaWpvcz8hP1xuIgorCisjOiBtaXNjL2ZzY2suYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZy4uLiAlcyBmb3IgZGV2aWNlICVzIGV4aXRlZCB3aXRoIHNpZ25hbCAlZC5cbiIKK21zZ3N0ciAiQXRlbmNpw7NuLi4uICVzIHBhcmEgZWwgZGlzcG9zaXRpdm8gJXMgcXVlIGZpbmFsaXrDsyBjb24gbGEgc2XDsWFsICVkLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXM6IHN0YXR1cyBpcyAleCwgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIKK21zZ3N0ciAiJXMgJXM6IGVsIGVzdGF0dXMgZXMgJXgsIHkgbnVuY2EgZGViacOzIGhhYmVyIHN1Y2VkaWRvLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluaXNoZWQgd2l0aCAlcyAoZXhpdCBzdGF0dXMgJWQpXG4iCittc2dzdHIgIlNlIGZpbmFsaXphIGNvbiAlcyAoZXN0YWRvIGRlIHNhbGlkYSAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6NzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBFcnJvciAlZCB3aGlsZSBleGVjdXRpbmcgZnNjay4lcyBmb3IgJXNcbiIKK21zZ3N0ciAiJXM6IEVycm9yICVkIG1pZW50cmFzIHNlIGVqZWN1dGFiYSBmc2NrLiAlcyBwYXJhICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjc0MgorbXNnaWQgIiIKKyJFaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlIGZpbGVzeXN0ZW0gdHlwZXMgcGFzc2VkIHRvIC10IG11c3QgYmUgcHJlZml4ZWRcbiIKKyJ3aXRoICdubycgb3IgJyEnLlxuIgorbXNnc3RyICIiCisiUHVlZGUgc2VyIHF1ZSB0b2RvcyBvIG5pbmd1bm8gZGUgbG9zIHRpcG9zIGRlIHNpc3RlbWFzIGRlIGZpY2hlcm9zIHF1ZSBzZSBcbiIKKyJwYXNhcm9uIGNvbiAtdCBkZWJhbiBlc3RhciBjb24gZWwgcHJlZmlqbyAnbm8nIG8gJyEwLlxuIgorCisjOiBtaXNjL2ZzY2suYzo3NjEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGVzeXN0ZW0gdHlwZXNcbiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgcmVzZXJ2YXIgbWVtb3JpYSBwYXJhIGxvcyB0aXBvcyBkZSBzaXN0ZW1hIGRlIGZpY2hlcm9zXG4iCisKKyMgVE9ETzogYmluZAorIzogbWlzYy9mc2NrLmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogc2tpcHBpbmcgYmFkIGxpbmUgaW4gL2V0Yy9mc3RhYjogYmluZCBtb3VudCB3aXRoIG5vbnplcm8gZnNjayBwYXNzICIKKyJudW1iZXJcbiIKK21zZ3N0ciAiIgorIiVzOiBzZSBpZ25vcmEgbMOtbmVhIGluY29ycmVjdGEgZW4gL2V0Yy9mc3RhYjogbW9udGFqZSDCq2JpbmTCuyBjb24gbsO6bWVybyBkZSAiCisicmFuZ28gZmNzayBkaXN0aW50byBkZSBjZXJvXG4iCisKKyM6IG1pc2MvZnNjay5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiBjYW5ub3QgY2hlY2sgJXM6IGZzY2suJXMgbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6IG5vIHNlIHB1ZWRlIHZlcmlmaWNhciAlczogZnNjay4lcyBubyBzZSBlbmN1ZW50cmFcbiIKKworIzogbWlzYy9mc2NrLmM6OTY3Cittc2dpZCAiQ2hlY2tpbmcgYWxsIGZpbGUgc3lzdGVtcy5cbiIKK21zZ3N0ciAiUmV2aXNhbmRvIHRvZG9zIGxvcyBzaXN0ZW1hcyBkZSBmaWNoZXJvcy5cbiIKKworIzogbWlzYy9mc2NrLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICItLXdhaXRpbmctLSAocGFzcyAlZClcbiIKK21zZ3N0ciAiLS1lc3BlcmFuZG8tLSAocGFzbyAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6MTA3OAorbXNnaWQgIiIKKyJVc2FnZTogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGZzdHlwZV0gW2ZzLW9wdGlvbnNdIFtmaWxlc3lzIC4uLl1cbiIKK21zZ3N0ciAiIgorIk1vZG8gZGUgZW1wbGVvOiAgZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IHRpcG9fZGVfc2ZdXG4iCisiICAgICAgICAgICAgICAgICAgICAgIFtvcGNpb25lc19kZV9zZl0gW3Npc3RlbWFfZGVfZmljaGVyb3MgLi4uXVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBkZXZpY2VzXG4iCittc2dzdHIgIiVzOiBkZW1hc2lhZG9zIGRpc3Bvc2l0aXZvc1xuIgorCisjOiBtaXNjL2ZzY2suYzoxMTUzIG1pc2MvZnNjay5jOjEyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICIlczogZGVtYXNpYWRvcyBhcmd1bWVudG9zXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZhZGx2XSBbZmlsZXMuLi5dXG4iCittc2dzdHIgIk1vZG8gZGUgZW1wbGVvOiAlcyBbLVJWYWRsdl0gW2ZpY2hlcm9zLi4uXVxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIk1pZW50cmFzIHNlIGxlw61hbiBsYXMgYmFuZGVyYXMgZW4gJXMiCisKKyM6IG1pc2MvbHNhdHRyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJNaWVudHJhcyBzZSBsZcOtYSBsYSB2ZXJzacOzbiBlbiAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSBbLUMgY2x1c3Rlci1zaXplXVxuIgorIlx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIGlub2RlLXNpemVdIFstSiBqb3VybmFsLW9wdGlvbnNdXG4iCisiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKyJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisiXHRbLWcgYmxvY2tzLXBlci1ncm91cF0gWy1MIHZvbHVtZS1sYWJlbF0gWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG4iCisiXHRbLU8gZmVhdHVyZVssLi4uXV0gWy1yIGZzLXJldmlzaW9uXSBbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXVxuIgorIlx0Wy10IGZzLXR5cGVdIFstVCB1c2FnZS10eXBlIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSBkZXZpY2UgW2Jsb2Nrcy0iCisiY291bnRdXG4iCittc2dzdHIgIiIKKyJNb2RvIGRlIGVtcGxlbzogJXMgWy1jfC1sIG5vbWJyZS1kZWwtZmljaGVyb10gWy1iIHRhbWHDsW8tZGVsLWJsb3F1ZV0gWy1DICIKKyJ0YW1hw7FvLWRlbC3Cq2NsdXN0ZXLCu11cbiIKKyJcdFstaSBieXRlcy1wb3Itbm9kby1pXSBbLUkgdGFtYcOxby1kZWwtbm9kby1pXSAtSiBvcGNpb25lcy1kZS1maWNoZXJvLWRlLSIKKyJ0cmFuc2FjY2lvbmVzXVxuIgorIlx0Wy1HIHRhbWHDsW8tZGVsX2dydXBvX2ZsZXhdIFstTiBuw7ptZXJvLWRlLW5vZG9zLWldXG4iCisiXHRbLW0gcG9yY2VudGFqZS1kZS1ibG9xdWVzLXJlc2VydmFkb3NdIFstbyBTTy1jcmVhZG9yXVxuIgorIlx0Wy1nIGJsb3F1ZXMtcG9yLWdydXBvXSBbLUwgZXRpcXVldGEtZGUtdm9sdW1lbl0gWy1NIMO6bHRpbW8tZGlyZWN0b3Jpby0iCisibW9udGFkb11cbiIKKyJcdFstTyBjYXJhY3RlcsOtc3RpY2FbLC4uLl1dIFstciByZXZpc2nDs24tZGVsLXNmXSBbLUUgb3BjacOzbi0iCisiZXh0ZW5kaWRheywuLi5dXVxuIgorIlx0Wy10IHRpcG8tZGVsLXNmXSBbLVQgdGlwby1kZS11c28gXSBbLVUgVVVJRF0gWy1qbnF2REZLU1ZdIGRpc3Bvc2l0aXZvICIKKyJbY3VlbnRhLWRlLWJsb3F1ZXNdXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgY29tbWFuZDogJXNcbiIKK21zZ3N0ciAiRWplY3V0YW5kbyBvcmRlbjogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJ1biAnJXMnIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgZWplY3V0YXIgJyVzJyIKKworIzogbWlzYy9ta2UyZnMuYzoyNjMKK21zZ2lkICJ3aGlsZSBwcm9jZXNzaW5nIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIHByb2dyYW0iCittc2dzdHIgIm1pZW50cmFzIHNlIHByb2Nlc2FiYSBsYSBsaXN0YSBkZSBibG9xdWVzIGRhw7FhZG9zIGRlbCBwcm9ncmFtYSIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWQgaW4gcHJpbWFyeSBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3IgYXJlYSBiYWQuXG4iCittc2dzdHIgIiIKKyJFbCBibG9xdWUgJWQgZW4gZWwgw6FyZWEgZGVsIGRlc2NyaXB0b3IgcHJpbWFyaW8gZGVsIHN1cGVyYmxvcXVlL2dydXBvIGVzdMOhICIKKyJkYcOxYWRvLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9ja3MgJXUgdGhyb3VnaCAldSBtdXN0IGJlIGdvb2QgaW4gb3JkZXIgdG8gYnVpbGQgYSBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiTG9zIGJsb3F1ZXMgZGVsICV1IGFsICV1IGRlYmVuIGVzdGFyIGNvcnJlY3RvcyBwYXJhIHBvZGVyIGNvbnN0cnVpciB1biAiCisic2lzdGVtYSBkZSBmaWNoZXJvcy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTUKK21zZ2lkICJBYm9ydGluZy4uLi5cbiIKK21zZ3N0ciAiRmluYWxpemFuZG8uLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHRoZSBiYWNrdXAgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9ycyBhdCBibG9jayAldSBjb250YWluXG4iCisiXHRiYWQgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiQXRlbmNpw7NuOiBsb3MgZGVzY3JpcHRvcmVzIGRlIHJlc3BhbGRvIGRlbCBzdXBlcmJsb3F1ZS9ncnVwbyBlbiBlbCBibG9xdWUgIgorIiV1XG4iCisiXHRjb250aWVuZW4gYmxvcXVlcyBkYcOxYWRvcy5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzozMzQKK21zZ2lkICJ3aGlsZSBtYXJraW5nIGJhZCBibG9ja3MgYXMgdXNlZCIKK21zZ3N0ciAibWllbnRyYXMgc2UgbWFyY2FiYW4gbG9zIGJsb3F1ZXMgZGHDsWFkb3MgY29tbyB1dGlsaXphZG9zIgorCisjOiBtaXNjL21rZTJmcy5jOjM4NgorbXNnaWQgIldyaXRpbmcgaW5vZGUgdGFibGVzOiAiCittc2dzdHIgIkVzY3JpYmllbmRvIGxhcyB0YWJsYXMgZGUgbm9kb3MtaTogIgorCisjOiBtaXNjL21rZTJmcy5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IHdyaXRlICVkIGJsb2NrcyBpbiBpbm9kZSB0YWJsZSBzdGFydGluZyBhdCAlbGx1OiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiTm8gc2UgcHVlZGVuIGVzY3JpYmlyICVkIGJsb3F1ZXMgZW4gbGEgdGFibGEgZGUgbm9kb3MtaSBjb21lbnphbmRvIGVuICVsbHU6ICIKKyIlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjQyMSBtaXNjL21rZTJmcy5jOjI0NzkgbWlzYy9ta2UyZnMuYzoyNzY0Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiaGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0MzIKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyByb290IGRpciIKK21zZ3N0ciAibWllbnRyYXMgc2UgY3JlYWJhIGVsIGRpcmVjdG9yaW8gcmHDrXoiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDM5Cittc2dpZCAid2hpbGUgcmVhZGluZyByb290IGlub2RlIgorbXNnc3RyICJtaWVudHJhcyBzZSBsZcOtYSBlbCBub2RvLWkgcmHDrXoiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDUxCittc2dpZCAid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIKK21zZ3N0ciAibWllbnRyYXMgc2UgcG9uw61hbiBsb3MgcGVybWlzb3MgZGVsIGR1ZcOxbyBkZWwgbm9kby1pIHJhw616IgorCisjOiBtaXNjL21rZTJmcy5jOjQ2OQorbXNnaWQgIndoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJtaWVudHJhcyBzZSBjcmVhYmEgL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDc2Cittc2dpZCAid2hpbGUgbG9va2luZyB1cCAvbG9zdCtmb3VuZCIKK21zZ3N0ciAibWllbnRyYXMgc2UgcmV2aXNhYmEgL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDg5Cittc2dpZCAid2hpbGUgZXhwYW5kaW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJtaWVudHJhcyBzZSBleHBhbmTDrWEgL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTA0Cittc2dpZCAid2hpbGUgc2V0dGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgIm1pZW50cmFzIHNlIHBvbsOtYSBlbCBub2RvLWkgZGUgYmxvcXVlcyBkYcOxYWRvcyIKKworIzogbWlzYy9ta2UyZnMuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3V0IG9mIG1lbW9yeSBlcmFzaW5nIHNlY3RvcnMgJWQtJWRcbiIKK21zZ3N0ciAiU2UgYWdvdMOzIGxhIG1lbW9yaWEgY3VhbmRvIHNlIGJvcnJhYmFuIGxvcyBzZWN0b3JlcyAlZC0lZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAwOiAlc1xuIgorbXNnc3RyICJBdGVuY2nDs246IG5vIHNlIHB1ZWRlIGxlZXIgZWwgYmxvcXVlIDA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQ6ICVzXG4iCittc2dzdHIgIkF0ZW5jacOzbjogbm8gc2UgcHVlZGUgYm9ycmFyIGVsIHNlY3RvciAlZDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzMKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbmljaWFsaXphYmEgZWwgc3VwZXJibG9xdWUgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyIKKworIzogbWlzYy9ta2UyZnMuYzo1ODEKK21zZ2lkICJaZXJvaW5nIGpvdXJuYWwgZGV2aWNlOiAiCittc2dzdHIgIlNlIHJlbGxlbmEgY29uIGNlcm9zIGVsIGRpc3Bvc2l0aXZvIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXM6ICIKKworIzogbWlzYy9ta2UyZnMuYzo1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBqb3VybmFsIGRldmljZSAoYmxvY2sgJWxsdSwgY291bnQgJWQpIgorbXNnc3RyICIiCisibWllbnRyYXMgc2UgaW5pY2lhbGl6YWJhIGNvbiBjZXJvcyBlbCBkaXNwb3NpdGl2byBkZWwgZmljaGVybyBkZSAiCisidHJhbnNhY2Npb25lcyAoYmxvcXVlICVsbHUsIGN1ZW50YSAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjExCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgIm1pZW50cmFzIHNlIGVzY3JpYsOtYSBlbCBzdXBlcmJsb3F1ZSBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIgorCisjOiBtaXNjL21rZTJmcy5jOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBmaWxlc3lzdGVtIHdpdGggJWxsdSAlZGsgYmxvY2tzIGFuZCAldSBpbm9kZXNcbiIKK21zZ3N0ciAiIgorIlNlIGVzdMOhIGNyZWFuZG8gdW4gc2lzdGVtYSBkZSBmaWNoZXJvcyBjb24gJWxsdSBibG9xdWVzIGRlICVkayB5ICV1IG5vZG9zLWlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndhcm5pbmc6ICVsbHUgYmxvY2tzIHVudXNlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkF0ZW5jacOzbjogaGF5ICVsbHUgYmxvcXVlcyBzaW4gdXNhci5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBsYWJlbD0lc1xuIgorbXNnc3RyICJFdGlxdWV0YSBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcz0lc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJPUyB0eXBlOiAlc1xuIgorbXNnc3RyICJUaXBvIGRlIFNPOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIlRhbWHDsW8gZGVsIGJsb3F1ZT0ldSAoYml0w6Fjb3JhPSV1KVxuIgorCisjIFRPRE8gbG9nID0gYml0w6Fjb3JhIFRCQworIzogbWlzYy9ta2UyZnMuYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2x1c3RlciBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIlRhbWHDsW8gZGVsIMKrY2x1c3RlcsK7PSV1IChiaXTDoWNvcmE9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyYWdtZW50IHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiVGFtYcOxbyBkZWwgZnJhZ21lbnRvPSV1IChiaXTDoWNvcmE9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0cmlkZT0ldSBibG9ja3MsIFN0cmlwZSB3aWR0aD0ldSBibG9ja3NcbiIKK21zZ3N0ciAiU3RyaWRlPSV1IGJsb3F1ZXMsIGFuY2h1cmEgZGUgc3RyaXBlPSV1IGJsb3F1ZXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzLCAlbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIldSBub2Rvcy1pLCAlbGx1IGJsb3F1ZXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSBibG9ja3MgKCUyLjJmJSUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlclxuIgorbXNnc3RyICIlbGx1IGJsb3F1ZXMgKCUyLjJmJSUpIHJlc2VydmFkb3MgcGFyYSBlbCBzdXBlcnVzdWFyaW9cbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QgZGF0YSBibG9jaz0ldVxuIgorbXNnc3RyICJQcmltZXIgYmxvcXVlIGRlIGRhdG9zPSV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJvb3QgZGlyZWN0b3J5IG93bmVyPSV1OiV1XG4iCittc2dzdHIgIlByb3BpZXRhcmlvIGRlbCBkaXJlY3RvcmlvIHJhw616PSV1OiV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9JWx1XG4iCittc2dzdHIgIk7Dum1lcm8gbcOheGltbyBkZSBibG9xdWVzIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zPSVsdVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cHNcbiIKK21zZ3N0ciAiJXUgYmxvcXVlIGRlIGdydXBvc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIldSBibG9xdWUgZGUgZ3J1cG9cbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgY2x1c3RlcnMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGJsb3F1ZXMgcG9yIGdydXBvLCAldSDCq2NsdXN0ZXJzwrsgcG9yIGdydXBvXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgYmxvcXVlcyBwb3IgZ3J1cG8sICV1IGZyYWdtZW50b3MgcG9yIGdydXBvXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgbm9kb3MtaSBwb3IgZ3J1cG9cbiIKKworIzogbWlzYy9ta2UyZnMuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBVVUlEOiAlc1xuIgorbXNnc3RyICJVVUlEIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OQorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgIlJlc3BhbGRvIGRlbCBzdXBlcmJsb3F1ZSBndWFyZGFkbyBlbiBsb3MgYmxvcXVlczogIgorCisjOiBtaXNjL21rZTJmcy5jOjc2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyAnLU8gNjRiaXQnXG4iCittc2dzdHIgIiVzIHJlcXVpZXJlICctTyA2NGJpdCdcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtdXN0IGJlIGJlZm9yZSAncmVzaXplPSV1J1xuIgorbXNnc3RyICInJXMnIGRlYmUgZXN0YXIgYW50ZXMgZGUgJ3Jlc2l6ZT0ldSdcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkZXNjX3NpemU6ICclcydcbiIKK21zZ3N0ciAiZGVzY19zaXplIG5vIHbDoWxpZG86ICclcydcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvZmZzZXQ6ICVzXG4iCittc2dzdHIgIkRlc3BsYXphbWllbnRvIG5vIHbDoWxpZG86ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODEyIG1pc2MvdHVuZTJmcy5jOjEyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtbXBfdXBkYXRlX2ludGVydmFsOiAlc1xuIgorbXNnc3RyICJtbXBfdXBkYXRlX2ludGVydmFsIG5vIHbDoWxpZG86ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgIyBvZiBiYWNrdXAgc3VwZXJibG9ja3M6ICVzXG4iCittc2dzdHIgIk7Dum1lcm8gZGUgc3VwZXJibG9xdWVzIGRlIHJlc3BhbGRvIG5vIHbDoWxpZG86ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaWRlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiVGFtYcOxbyBkZSDCq3N0cmlkZcK7IG5vIHbDoWxpZG86ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaXBlLXdpZHRoIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyw6FtZXRybyBzdHJpcGUtd2lkdGggbm8gdsOhbGlkbzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXNpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXLDoW1ldHJvIGRlIHZhcmlhY2nDs24gZGUgdGFtYcOxbyBubyB2w6FsaWRvOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg5MworbXNnaWQgIlRoZSByZXNpemUgbWF4aW11bSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgZmlsZXN5c3RlbSBzaXplLlxuIgorbXNnc3RyICIiCisiRWwgbcOheGltbyBkZSBsYSB2YXJpYWNpw7NuIGRlIHRhbWHDsW8gZGViZSBzZXIgbWF5b3IgcXVlIGVsIHRhbWHDsW8gZGVsIHNpc3RlbWEgIgorImRlIGZpY2hlcm9zLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjkxNworbXNnaWQgIk9uLWxpbmUgcmVzaXppbmcgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorIkVsIGNhbWJpbyBkZSB0YW1hw7FvIGVuIGzDrW5lYSBubyBlc3TDoSBzb3BvcnRhZG8gY29uIHNpc3RlbWFzIGRlIGFyY2hpdm9zIGRlICIKKyJyZXZpc2nDs24gMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjk0NCBtaXNjL21rZTJmcy5jOjk1MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJvb3Rfb3duZXI6ICclcydcbiIKK21zZ3N0ciAicm9vdF9vd25lciBubyB2w6FsaWRvOiAnJXMnXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcXVvdGF0eXBlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyw6FtZXRybyBkZSB0aXBvIGRlIGN1b3RhIG5vIHbDoWxpZG86ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRtbXBfdXBkYXRlX2ludGVydmFsPTxpbnRlcnZhbD5cbiIKKyJcdG51bV9iYWNrdXBfc2I9PDB8MXwyPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGRhdGEgY2h1bmsgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqIGRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0b2Zmc2V0PTxvZmZzZXQgdG8gY3JlYXRlIHRoZSBmaWxlIHN5c3RlbT5cbiIKKyJcdHJlc2l6ZT08cmVzaXplIG1heGltdW0gc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRwYWNrZWRfbWV0YV9ibG9ja3M9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRyb290X3VpZD08dWlkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0cm9vdF9naWQ9PGdpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdGRpc2NhcmRcbiIKKyJcdG5vZGlzY2FyZFxuIgorIlx0cXVvdGF0eXBlPTx1c3IgT1IgZ3JwPlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiTGFzIG9wY2lvbmVzIGVzcGVjaWZpY2FkYXMgc29uIGluY29ycmVjdGFzOiAlc1xuIgorIlxuIgorIkxhcyBvcGNpb25lcyBleHRlbmRpZGFzIGRlYmVuIGVzdGFyIHNlcGFyYWRhcyBwb3IgY29tYXMsIHkgcHVlZGVuIHRvbWFyIHVuXG4iCisiXHRhcmd1bWVudG8gcXVlIHNlIGFqdXN0YSBjb24gdW4gc2lnbm8gZGUgaWd1YWwgKCc9JykuXG4iCisiXG4iCisiTGFzIG9wY2lvbmVzIGV4dGVuZGlkYXMgdsOhbGlkYXMgc29uOlxuIgorIlx0bW1wX3VwZGF0ZV9pbnRlcnZhbD08aW50ZXJ2YWxvPlxuIgorIlx0bnVtX2JhY2t1cF9zYj08MHwxfDI+XG4iCisiXHRzdHJpZGU9PGxvbmdpdHVkIGRlIGxhIHphbmNhZGEsIGVuIGJsb3F1ZXM+XG4iCisiXHRzdHJpcGUtd2lkdGg9PMKrc3RyaWRlwrsgZGUgUkFJRCAqIGRpc2NvcyBkZSBkYXRvcywgZW4gYmxvcXVlcz5cbiIKKyJcdG9mZnNldD08ZGVzcGxhemFtaWVudG8gcGFyYSBjcmVhciBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zPlxuIgorIlx0cmVzaXplPTxtw6F4aW1vIGRlIHZhcmlhY2nDs24gZGUgdGFtYcOxbywgZW4gYmxvcXVlcz5cbiIKKyJcdHBhY2tlZF9tZXRhX2Jsb2Nrcz08MCBwYXJhIGRlc2FjdGl2YXIsIDEgcGFyYSBhY3RpdmFyPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCBwYXJhIGRlc2FjdGl2YXIsIDEgcGFyYSBhY3RpdmFyPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgcGFyYSBkZXNhY3RpdmFyLCAxIHBhcmEgYWN0aXZhcj5cbiIKKyJcdHJvb3RfdWlkPTx1aWQgZGVsIGRpcmVjdG9yaW8gcmHDrXo+XG4iCisiXHRyb290X2dpZD08Z2lkIGRlbCBkaXJlY3RvcmlvIHJhw616PlxuIgorIlx0dGVzdF9mc1xuIgorIlx0ZGlzY2FyZFxuIgorIlx0bm9kaXNjYXJkXG4iCisiXHRxdW90YXR5cGU9PHVzciBPIGdycD5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiBSQUlEIHN0cmlwZS13aWR0aCAldSBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiBzdHJpZGUgJXUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBdGVuY2nDs246IEVsIHBhcsOhbWV0cm8gwqtzdHJpcGUtd2lkdGjCuyBkZSBSQUlEICV1IG5vIGVzIHVuIG3Dumx0aXBsbyBwYXIgZGVsICIKKyJwYXLDoW1ldHJvIMKrc3RyaWRlwrsgJXUuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIG1rZTJmcyBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIkVycm9yIGRlIHNpbnRheGlzIGVuIGVsIGZpY2hlcm8gZGUgY29uZmlndXJhY2nDs24gZGUgbWtlMmZzICglcywgbMOtbmVhICMlZClcbiIKKyJcdCVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA2OCBtaXNjL3R1bmUyZnMuYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmaWxlc3lzdGVtIG9wdGlvbiBzZXQ6ICVzXG4iCittc2dzdHIgIlNlIHB1c28gdW5hIG9wY2nDs24gbm8gdsOhbGlkYSBwYXJhIGVsIHNpc3RlbWEgZGUgZmljaGVyb3M6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA4MCBtaXNjL3R1bmUyZnMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtb3VudCBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJTZSBwdXNvIHVuYSBvcGNpw7NuIGRlIG1vbnRhamUgbm8gdsOhbGlkYTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJZb3VyIG1rZTJmcy5jb25mIGZpbGUgZG9lcyBub3QgZGVmaW5lIHRoZSAlcyBmaWxlc3lzdGVtIHR5cGUuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFbCBmaWNoZXJvIG1rZTJmcy5jb25mIG5vIGRlZmluZSBlbCB0aXBvIGRlIHNpc3RlbWEgZGUgZmljaGVyb3MgJXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyNAorbXNnaWQgIiIKKyJZb3UgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGFuIHVwZGF0ZWQgbWtlMmZzLmNvbmYgZmlsZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlByb2JhYmxlbWVudGUgc2VhIG5lY2VzYXJpbyBpbnN0YWxhciB1biBmaWNoZXJvIG1rZTJmcy5jb25mIGFjdHVhbGl6YWRvLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjgKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICJJbnRlcnJ1bXBpZW5kby4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBmc190eXBlICVzIGlzIG5vdCBkZWZpbmVkIGluIG1rZTJmcy5jb25mXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBdGVuY2nDs246IGVsIGZzX3R5cGUgJXMgbm8gZXN0w6EgZGVmaW5pZG8gZW4gbWtlMmZzLmNvbmZcbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDQ5Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgUEFUSC5cbiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgcmVzZXJ2YXIgbWVtb3JpYSBwYXJhIGxhIG51ZXZhIFJVVEEuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IChlcnJvcjogJWxkKS5cbiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgaW5pY2lhbGl6YXIgY29ycmVjdGFtZW50ZSBlbCBwZXJmaWwgKGVycm9yOiAlbGQpLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9jayBzaXplIC0gJXMiCittc2dzdHIgInRhbWHDsW8gZGVsIGJsb3F1ZSBpbnbDoWxpZG8gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgdXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIKK21zZ3N0ciAiIgorIkF0ZW5jacOzbjogZWwgdGFtYcOxbyBkZWwgYmxvcXVlICVkIG5vIHNlIHB1ZWRlIHV0aWxpemFyIGVuIG11Y2hvcyBzaXN0ZW1hcy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2x1c3RlciBzaXplIC0gJXMiCittc2dzdHIgInRhbWHDsW8gZGVsIMKrY2x1c3RlcsK7IG5vIHbDoWxpZG8gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTUzCittc2dpZCAiJy1SJyBpcyBkZXByZWNhdGVkLCB1c2UgJy1FJyBpbnN0ZWFkIgorbXNnc3RyICInLVInIGVzdMOhIGVuIGRlc3VzbzsgdXRpbGljZSAnLUUnIGVuIHN1IGx1Z2FyIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NjUKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgYmxvY2tzIHBlciBncm91cCIKK21zZ3N0ciAiTsO6bWVybyBubyB2w6FsaWRvIGRlIGJsb3F1ZXMgcG9yIGdydXBvIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NzAKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIG11c3QgYmUgbXVsdGlwbGUgb2YgOCIKK21zZ3N0ciAibG9zIGJsb3F1ZXMgcG9yIGdydXBvIGRlYmVuIHNlciB1biBtw7psdGlwbG8gZGUgOCIKKworIzogbWlzYy9ta2UyZnMuYzoxNTc4Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGZsZXhfYmcgc2l6ZSIKK21zZ3N0ciAiTsO6bWVybyBubyB2w6FsaWRvIHBhcmEgZWwgdGFtYcOxbyBkZSBmbGV4X2JnIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODQKK21zZ2lkICJmbGV4X2JnIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIiCittc2dzdHIgImVsIHRhbWHDsW8gZGUgZmxleF9iZyBkZWJlIHNlciB1bmEgcG90ZW5jaWEgZGUgMiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZsZXhfYmcgc2l6ZSAoJWx1KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyXjMxIgorbXNnc3RyICJlbCB0YW1hw7FvIGRlIGZsZXhfYmcgKCVsdSkgZGViZSBzZXIgbWVub3IgbyBpZ3VhbCBxdWUgMl4zMSIKKworIzogbWlzYy9ta2UyZnMuYzoxNjAwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgcmF0aW8gJXMgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJwcm9wb3JjacOzbiBkZSBub2Rvcy1pIGludsOhbGlkYSAlcyAobWluICVkL21heCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAidGFtYcOxbyBkZSBsb3Mgbm9kb3MtaSBpbnbDoWxpZG8gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNjIzCittc2dpZCAiIgorIldhcm5pbmc6IC1LIG9wdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZS4gVXNlICctRSAiCisibm9kaXNjYXJkJyBleHRlbmRlZCBvcHRpb24gaW5zdGVhZCFcbiIKK21zZ3N0ciAiIgorIsKhQXRlbmNpw7NuOiBsYSBvcGNpw7NuIC1LIGVzdMOhIGVuIGRlc3VzbyB5IG5vIGRlYmVyw61hIHV0aWxpemFyc2UgbnVuY2EgbcOhcy4gIgorIlV0aWxpY2UgbGEgb3BjacOzbiBleHRlbmRpZGEgJy1FIG5vZGlzY2FyZCcgZW4gc3UgbHVnYXIhXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYzNAorbXNnaWQgImluIG1hbGxvYyBmb3IgYmFkX2Jsb2Nrc19maWxlbmFtZSIKK21zZ3N0ciAiZW4gbWFsbG9jIHBhcmEgZmljaGVyb19kZV9ibG9xdWVzX2Rhw7FhZG9zIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVzIgorbXNnc3RyICJlbCBwb3JjZW50YWplIGRlIGJsb3F1ZXMgcmVzZXJ2YWRvcyBlcyBpbnbDoWxpZG8gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW0gaW5vZGVzIC0gJXMiCittc2dzdHIgIm7Dum1lcm8gZGUgbG9zIG5vZG9zLWkgaW52w6FsaWRvIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gbGV2ZWwgLSAlcyIKK21zZ3N0ciAibml2ZWwgZGUgcmV2aXNpw7NuIGluY29ycmVjdG8gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjcmVhdGUgcmV2aXNpb24gJWQiCittc2dzdHIgIm1pZW50cmFzIHNlIGludGVudGFiYSBjcmVhciBsYSByZXZpc2nDs24gJWQiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY5OAorbXNnaWQgIlRoZSAtdCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICJMYSBvcGNpw7NuIC10IHNvbG8gcHVlZGUgdXRpbGl6YXJzZSB1bmEgdmV6IgorCisjOiBtaXNjL21rZTJmcy5jOjE3MDYKK21zZ2lkICJUaGUgLVQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiTGEgb3BjacOzbiAtVCBzb2xvIHB1ZWRlIHV0aWxpemFyc2UgdW5hIHZleiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzU5IG1pc2MvbWtlMmZzLmM6Mjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIGRldmljZSAlc1xuIgorbXNnc3RyICIiCisibWllbnRyYXMgc2UgaW50ZW50YWJhIGFicmlyIGVsIGRpc3Bvc2l0aXZvIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZGV2IGJsb2Nrc2l6ZSAoJWQpIHNtYWxsZXIgdGhhbiBtaW5pbXVtIGJsb2Nrc2l6ZSAlZFxuIgorbXNnc3RyICIiCisiRWwgdGFtYcOxbyBkZWwgYmxvcXVlIGRlbCBkaXNwb3NpdGl2byBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzICglZCkgZXNcbiIKKyJtZW5vciBxdWUgZWwgdGFtYcOxbyBkZWwgYmxvcXVlIG3DrW5pbW8gJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIGpvdXJuYWwgZGV2aWNlJ3MgYmxvY2tzaXplOiAlZFxuIgorbXNnc3RyICIiCisiVXRpbGl6YW5kbyBlbCB0YW1hw7FvIGRlIGJsb3F1ZSBkZWwgZGlzcG9zaXRpdm8gZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lczogIgorIiVkXG4iCisKKyMgVGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYmxvY2tzIGlzIGludmFsaWQuCisjOiBtaXNjL21rZTJmcy5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9ja3MgJyVzJyBvbiBkZXZpY2UgJyVzJyIKK21zZ3N0ciAiYmxvcXVlcyBubyB2w6FsaWRvcyAnJXMnIGVuIGVsIGRpc3Bvc2l0aXZvICclcyciCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgwNAorbXNnaWQgImZpbGVzeXN0ZW0iCittc2dzdHIgInNpc3RlbWEgZGUgZmljaGVyb3MiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgxNyByZXNpemUvbWFpbi5jOjM5NQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBzaXplIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgZGV0ZXJtaW5hciBlbCB0YW1hw7FvIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MjMKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGRldGVybWluYXIgZWwgdGFtYcOxbyBkZWwgZGlzcG9zaXRpdm87IHNlIGRlYmVyw6EgZXNwZWNpZmljYXJcbiIKKyJleHBsw61jaXRhbWVudGUgZWwgdGFtYcOxbyBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MzAKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorIlNlIGluZm9ybcOzIHF1ZSBlbCB0YW1hw7FvIGRlbCBkaXNwb3Npdm8gZXMgY2Vyby4gIEVzIHBvc2libGUgcXVlIHNlIGhheWFcbiIKKyJcdGVzcGVjaWZpY2FkbyB1bmEgcGFydGljacOzbiBubyB2w6FsaWRhIG8gcXVlIGxhIHRhYmxhIGRlIHBhcnRpY2lvbmVzXG4iCisiXHRubyBoYXlhIHNpZG8gcmVsZcOtZGEgZGVzcHXDqXMgZGUgZWplY3V0YXIgZmRpc2sgZGViaWRvIGEgcXVlIHVuYSBcbiIKKyJcdHBhcnRpY2nDs24gbW9kaWZpY2FkYSBlc3TDoSBvY3VwYWRhIG8gZW4gdXNvLiAgRXMgbmVjZXNhcmlvIHJlaW5pY2lhclxuIgorIlx0cGFyYSBwb2RlciByZWxlZXIgbGEgdGFibGEgZGUgcGFydGljaW9uZXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg0NworbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBlcyBtw6FzIGdyYW5kZSBxdWUgZWwgdGFtYcOxbyBhcGFyZW50ZSBkZWwgZGlzcG9zaXRpdm8uIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NjcKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZnMgdHlwZXMgbGlzdFxuIgorbXNnc3RyICJGYWxsbyBhbCBhbmFsaXphciBzaW50w6FjdGljYW1lbnRlIGxhIGxpc3RhIGRlIHRpcG9zIGRlIHNmXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkwOAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgaGFyZHdhcmUgc2VjdG9yIHNpemUiCittc2dzdHIgIm1pZW50cmFzIHNlIGludGVudGFiYSBkZXRlcm1pbmFyIGVsIHRhbWHDsW8gZGVsIHNlY3RvciBwb3IgaGFyZHdhcmUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkxNAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgcGh5c2ljYWwgc2VjdG9yIHNpemUiCittc2dzdHIgIm1pZW50cmFzIHNlIGludGVudGFiYSBkZXRlcm1pbmFyIGVsIHRhbWHDsW8gZGVsIHNlY3RvciBmw61zaWNvIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NDYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsIGZvciBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIm1pZW50cmFzIHNlIGVzdGFibGVjw61hIGVsIHRhbWHDsW8gZGUgYmxvcXVlOyBkZW1hc2lhZG8gcGVxdWXDsW8gcGFyYSBlbCAiCisiZGlzcG9zaXRpdm9cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzcGVjaWZpZWQgYmxvY2tzaXplICVkIGlzIGxlc3MgdGhhbiBkZXZpY2UgcGh5c2ljYWwgc2VjdG9yc2l6ZSAlZFxuIgorbXNnc3RyICIiCisiQXRlbmNpw7NuOiBlbCB0YW1hw7FvIGRlIGJsb3F1ZSBlc3BlY2lmaWNhZG8gJWQgZXMgbWVub3IgcXVlIGVsIHRhbWHDsW8gZGUgIgorInNlY3RvciBmw61zaWNvIGRlbCBkaXNwb3NpdGl2byAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBTaXplIG9mIGRldmljZSAoMHglbGx4IGJsb2NrcykgJXMgdG9vIGJpZyB0byBiZSBleHByZXNzZWRcbiIKKyJcdGluIDMyIGJpdHMgdXNpbmcgYSBibG9ja3NpemUgb2YgJWQuXG4iCittc2dzdHIgIiIKKyIlczogVGFtYcOxbyBkZWwgZGlzcG9zaXRpdm8gKDB4JWxseCBibG9xdWVzKSAlcyBkZW1hc2lhZG8gZ3JhbmRlIHBhcmEgIgorImV4cHJlc2Fyc2VcbiIKKyJcdGVuIDMyIGJpdHMgdXRpbGl6YW5kbyB1biB0YW1hw7FvIGRlIGJsb3F1ZSBkZSAlZC5cbiIKKworIyBUT0RPIGZzX3R5cGVzCisjOiBtaXNjL21rZTJmcy5jOjE5OTEKK21zZ2lkICJmc190eXBlcyBmb3IgbWtlMmZzLmNvbmYgcmVzb2x1dGlvbjogIgorbXNnc3RyICJyZXNvbHVjacOzbiBkZSBmc190eXBlcyBwYXJhIG1rZTJmcy5jb25mOiAiCisKKyMgVE9ETyByZXZpc2lvbiAwCisjOiBtaXNjL21rZTJmcy5jOjE5OTgKK21zZ2lkICJGaWxlc3lzdGVtIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKyJDYXJhY3RlcsOtc3RpY2FzIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIG5vIGRpc3BvbmlibGVzIGNvbiBsYSByZXZpc2nDs24gMCBkZSAiCisibG9zIHNpc3RlbWFzIGRlIGZpY2hlcm9zXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAwNgorbXNnaWQgIlNwYXJzZSBzdXBlcmJsb2NrcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiU3VwZXJibG9xdWVzIGRpc3BlcnNvcyBubyBkaXNwb25pYmxlcyBjb24gbGEgcmV2aXNpw7NuIDAgZGUgbG9zIHNpc3RlbWFzIGRlICIKKyJmaWNoZXJvc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMTgKK21zZ2lkICJKb3VybmFscyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiRmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIG5vIGltcGxlbWVudGFkbyBwYXJhIGxhIHJldmlzacOzbiAwIGRlIGxvcyBzaXN0ZW1hcyAiCisiZGUgZmljaGVyb3NcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDMyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlbGYiCittc2dzdHIgImVsIHBvcmNlbnRhamUgZGUgYmxvcXVlcyByZXNlcnZhZG9zIGVzIGludsOhbGlkbyAtICVsZiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDQ5Cittc2dpZCAiIgorIkV4dGVudHMgTVVTVCBiZSBlbmFibGVkIGZvciBhIDY0LWJpdCBmaWxlc3lzdGVtLiAgUGFzcyAtTyBleHRlbnRzIHRvICIKKyJyZWN0aWZ5LlxuIgorbXNnc3RyICIiCisiTG9zIMKrZXh0ZW50c8K7IERFQkVOIGVzdGFyIGFjdGl2YWRvcyBwYXJhIHVuIHNpc3RlbWEgZGUgZmljaGVyb3MgZGUgNjQgYml0cy4gICIKKyJQYXNhciAtTyBleHRlbnRzIHBhcmEgcmVjdGlmaWNhci5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDY5Cittc2dpZCAiVGhlIGNsdXN0ZXIgc2l6ZSBtYXkgbm90IGJlIHNtYWxsZXIgdGhhbiB0aGUgYmxvY2sgc2l6ZS5cbiIKK21zZ3N0ciAiRWwgdGFtYcOxbyBkZSDCq2NsdXN0ZXLCuyBubyBwdWVkZSBzZXIgbWVub3IgcXVlIGVsIHRhbWHDsW8gZGUgYmxvcXVlLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNzUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgY2x1c3RlciBzaXplIHJlcXVpcmVzIHRoZSBiaWdhbGxvYyBmZWF0dXJlIgorbXNnc3RyICIiCisicGFyYSBlc3BlY2lmaWNhciB1biB0YW1hw7FvIGRlIMKrY2x1c3RlcsK7IGhhY2UgZmFsdGEgbGEgY2FyYWN0ZXLDrXN0aWNhICIKKyLCq2JpZ2FsbG9jwrsiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBVbmFibGUgdG8gZ2V0IGRldmljZSBnZW9tZXRyeSBmb3IgJXNcbiIKK21zZ3N0ciAiYXRlbmNpw7NuOiBubyBzZSBwdWVkZSBvYnRlbmVyIGxhIGdlb21ldHLDrWEgZGVsIGRpc3Bvc2l0aXZvIHBhcmEgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsaWdubWVudCBpcyBvZmZzZXQgYnkgJWx1IGJ5dGVzLlxuIgorbXNnc3RyICJlbCBhbGluZWFtaWVudG8gZGUgJXMgZXN0w6EgZGVzcGxhemFkbyBlbiAlbHUgYnl0ZXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBtYXkgcmVzdWx0IGluIHZlcnkgcG9vciBwZXJmb3JtYW5jZSwgKHJlKS1wYXJ0aXRpb25pbmcgc3VnZ2VzdGVkLlxuIgorbXNnc3RyICIiCisiRXN0byBwdWVkZSBwcm92b2NhciB1biByZW5kaW1pZW50byBtdXkgYmFqbzsgc2Ugc3VnaWVyZSAocmUpcGFydGljaW9uYXIuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCkiCittc2dzdHIgImxvcyBibG9xdWVzIGRlICVkIGJ5dGVzIHNvbiBtdXkgZ3JhbmRlcyBwYXJhIGVsIHNpc3RlbWEgKG3DoXggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjIxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6ICVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAobWF4ICVkKSwgZm9yY2VkIHRvIGNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJBdGVuY2nDs246IGxvcyBibG9xdWVzIGRlICVkIGJ5dGVzIHNvbiBtdXkgZ3JhbmRlcyBwYXJhIGVsIHNpc3RlbWEgXG4iCisiKG3DoXggJWQpLCBzZSBoYWNlIHVuIGVzZnVlcnpvIHBhcmEgY29udGludWFyXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE4MAorbXNnaWQgIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0IGV4dGVudHMgZmVhdHVyZSIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGRpc3BvbmVyIGRlIGxhIGNhcmFjdGVyw61zdGljYSDCq2JpZ2FsbG9jwrsgc2luIGxhIGNhcmFjdGVyw61zdGljYSAiCisiwqtleHRlbnRzwrsiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE4NworbXNnaWQgIiIKKyJUaGUgcmVzaXplX2lub2RlIGFuZCBtZXRhX2JnIGZlYXR1cmVzIGFyZSBub3QgY29tcGF0aWJsZS5cbiIKKyJUaGV5IGNhbiBub3QgYmUgYm90aCBlbmFibGVkIHNpbXVsdGFuZW91c2x5LlxuIgorbXNnc3RyICIiCisiTGFzIGNhcmFjdGVyw61zdGljYXMgcmVzaXplX2lub2RlIHkgbWV0YV9iZyBubyBzb24gY29tcGF0aWJsZXMuXG4iCisiTm8gcHVlZGVuIGVzdGFyIGFjdGl2YWRhcyBsYXMgZG9zIGEgbGEgdmV6LlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIxOTYKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiIKKyJTZWUgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQmlnYWxsb2MgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkF0ZW5jacOzbjogbGEgY2FyYWN0ZXLDrXN0aWNhIMKrYmlnYWxsb2PCuyBhw7puIGVzdMOhIGVuIHByb2Nlc28gZGUgZGVzYXJyb2xsb1xuIgorIlbDqWFzZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYyBwYXJhIG3DoXMgaW5mb3JtYWNpw7NuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIwNworbXNnaWQgInJlc2VydmVkIG9ubGluZSByZXNpemUgYmxvY2tzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLXNwYXJzZSBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisiZWwgY2FtYmlvIGRlIHRhbWHDsW8gZW4gbMOtbmVhIGRlIGxvcyBibG9xdWVzIHJlc2VydmFkb3Mgbm8gZXN0w6EgaW1wbGVtZW50YWRvICIKKyJwYXJhIGxvcyBzaXN0ZW1hcyBkZSBmaWNoZXJvcyBxdWUgbm8gZXN0w6FuIGVzcGFyY2lkb3MiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIxNgorbXNnaWQgImJsb2NrcyBwZXIgZ3JvdXAgY291bnQgb3V0IG9mIHJhbmdlIgorbXNnc3RyICJsYSBjdWVudGEgZGUgYmxvcXVlcyBwb3IgZ3J1cG8gZXN0w6EgZnVlcmEgZGVsIGludGVydmFsbyIKKworIzogbWlzYy9ta2UyZnMuYzoyMjQwCittc2dpZCAiRmxleF9iZyBmZWF0dXJlIG5vdCBlbmFibGVkLCBzbyBmbGV4X2JnIHNpemUgbWF5IG5vdCBiZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKyJMYSBjYXJhY3RlcsOtc3RpY2EgZmxleF9iZyBubyBlc3TDoSBhY3RpdmFkYSwgcG9yIGxvIHF1ZSBubyBwdWVkZSAiCisiZXNwZWNpZmljYXJzZSBlbCB0YW1hw7FvIGRlIGZsZXhfYmciCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgJWQgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJ0YW1hw7FvIGluY29ycmVjdG8gZGVsIG5vZG8taSAlZCAobcOtbiAlZC9tw6F4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHJhaXNlIGlub2RlIHJhdGlvPyIKK21zZ3N0ciAiZGVtYXNpYWRvcyBub2Rvcy1pICglbGx1KSwgwr9hdW1lbnRhciBlbCByYXRpbyBkZSBsb3Mgbm9kb3MtaT8iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCBzcGVjaWZ5IDwgMl4zMiBpbm9kZXMiCittc2dzdHIgImRlbWFzaWFkb3Mgbm9kb3MtaSAoJWxsdSksIGVzcGVjaWZpcXVlIG1lbm9zIHF1ZSAyXjMyIG5vZG9zLWkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5vZGVfc2l6ZSAoJXUpICogaW5vZGVzX2NvdW50ICgldSkgdG9vIGJpZyBmb3IgYVxuIgorIlx0ZmlsZXN5c3RlbSB3aXRoICVsbHUgYmxvY2tzLCBzcGVjaWZ5IGhpZ2hlciBpbm9kZV9yYXRpbyAoLWkpXG4iCisiXHRvciBsb3dlciBpbm9kZSBjb3VudCAoLU4pLlxuIgorbXNnc3RyICIiCisidGFtYcOxb19kZV9ub2Rvc19pICgldSkgKiBuw7ptZXJvX2RlX25vZG9zX2kgKCV1KSBlcyBkZW1hc2lhZG9cbiIKKyJcdGdyYW5kZSBwYXJhIHVuIHNpc3RlbWEgZGUgZmljaGVyb3MgY29uICVsbHUgYmxvcXVlczsgZXNwZWNpZmlxdWVcbiIKKyJcdHVuIHJhdGlvIG1heW9yIGRlIG5vZG9zLWkgKC1pKSBvIHVuIG1lbm9yIG7Dum1lcm8gZGUgbm9kb3MtaSAoLU4pLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzeXN0ZW07IHRoaXMgY2FuIGJlIHVuZG9uZSB1c2luZyB0aGUgY29tbWFuZDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJTb2JyZWVzY3JpYmllbmRvIGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgZXhpc3RlbnRlOyBwdWVkZSBkZXNoYWNlcnNlIG1lZGlhbnRlICIKKyJlbCBjb21hbmRvOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDMyCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHNldHVwIHVuZG8gZmlsZVxuIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgY29uZmlndXJhciBlbCBmaWNoZXJvIGRlIGFudWxhY2nDs25cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDU4Cittc2dpZCAiRGlzY2FyZGluZyBkZXZpY2UgYmxvY2tzOiAiCittc2dzdHIgIkRlc2NhcnRhbmRvIGxvcyBibG9xdWVzIGRlbCBkaXNwb3NpdGl2bzogIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NzQKK21zZ2lkICJmYWlsZWQgLSAiCittc2dzdHIgImZhbGxvIC0gIgorCisjOiBtaXNjL21rZTJmcy5jOjI1OTYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHVwIHN1cGVyYmxvY2siCittc2dzdHIgIm1pZW50cmFzIHNlIGFqdXN0YWJhIGVsIHN1cGVyYmxvcXVlIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MTIKK21zZ2lkICJEaXNjYXJkIHN1Y2NlZWRlZCBhbmQgd2lsbCByZXR1cm4gMHMgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iCittc2dzdHIgIiIKKyJFbCBkZXNjYXJ0ZSBoYSBzaWRvIGNvcnJlY3RvIHkgZGV2b2x2ZXLDoSAwcyAtIHNlIHNhbHRhIGVsIGJvcnJhZG8gZGUgbGEgIgorInRhYmxhIGRlIG5vZG9zLWlcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3MgLSAlcyIKK21zZ3N0ciAic2lzdGVtYSBvcGVyYXRpdm8gZGVzY29ub2NpZG8gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNzUyCittc2dpZCAiQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICIKK21zZ3N0ciAiUmVzZXJ2YW5kbyBsYXMgdGFibGFzIGRlIGdydXBvOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2MAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBhbGxvY2F0ZSBmaWxlc3lzdGVtIHRhYmxlcyIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW50ZW50YWJhIHJlc2VydmFyIGxhcyB0YWJsYXMgZGVsIHNpc3RlbWEgZGUgZmljaGVyb3MiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2OQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgIiIKKyJcbiIKKyJcdG1pZW50cmFzIHNlIGNvbnZlcnTDrWEgZWwgbWFwYSBkZSBiaXRzIGRlIMKrc3ViY2x1c3RlcsK7IgorCisjOiBtaXNjL21rZTJmcy5jOjI4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBibG9jayAlbGx1IGF0IGVuZCBvZiBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisibWllbnRyYXMgc2UgaW5pY2lhbGl6YWJhIGEgY2VybyBlbCBibG9xdWUgJWxsdSBhbCBmaW5hbCBkZWwgc2lzdGVtYSBkZSAiCisiZmljaGVyb3MiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgyNgorbXNnaWQgIndoaWxlIHJlc2VydmluZyBibG9ja3MgZm9yIG9ubGluZSByZXNpemUiCittc2dzdHIgIm1pZW50cmFzIHNlIHJlc2VydmFiYW4gbG9zIGJsb3F1ZXMgcGFyYSBlbCBjYW1iaW8gZGUgdGFtYcOxbyBlbiBsw61uZWEiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgzOCBtaXNjL3R1bmUyZnMuYzo3MTIKK21zZ2lkICJqb3VybmFsIgorbXNnc3RyICJmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgam91cm5hbCB0byBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiQcOxYWRpZW5kbyBlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgYWwgZGlzcG9zaXRpdm8gJXM6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBhZGQgam91cm5hbCB0byBkZXZpY2UgJXMiCittc2dzdHIgIiIKKyJcbiIKKyJcdG1pZW50cmFzIHNlIGludGVudGFiYSBhw7FhZGlyIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBhbCBkaXNwb3NpdGl2byAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyODYyIG1pc2MvbWtlMmZzLmM6Mjg5MyBtaXNjL3R1bmUyZnMuYzo3NDEgbWlzYy90dW5lMmZzLmM6NzYwCittc2dpZCAiZG9uZVxuIgorbXNnc3RyICJoZWNob1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NjkKK21zZ2lkICJTa2lwcGluZyBqb3VybmFsIGNyZWF0aW9uIGluIHN1cGVyLW9ubHkgbW9kZVxuIgorbXNnc3RyICJTZSBvbWl0ZSBsYSBjcmVhY2nDs24gZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBlbiBtb2RvIHNvbG8tc3VwZXJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCV1IGJsb2Nrcyk6ICIKK21zZ3N0ciAiQ3JlYW5kbyBlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgKCV1IGJsb3F1ZXMpOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg4OQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCIKK21zZ3N0ciAiIgorIlxuIgorIlx0bWllbnRyYXMgc2UgaW50ZW50YWJhIGNyZWFyIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAxIG1pc2MvdHVuZTJmcy5jOjUxNgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisiXG4iCisiRXJyb3IgbWllbnRyYXMgc2UgYWN0aXZhYmEgbGEgY2FyYWN0ZXLDrXN0aWNhIGRlIHByb3RlY2Npw7NuIGRlIG1vbnRhamUgIgorIm3Dumx0aXBsZS4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWQgc2Vjb25kcy5cbiIKK21zZ3N0ciAiIgorIkxhIHByb3RlY2Npw7NuIGRlIG1vbnRhamUgbcO6bHRpcGxlIGVzdMOhIGFjdGl2YWRhIGNvbiB1biBpbnRlcnZhbG8gZGUgIgorImFjdHVhbGl6YWNpw7NuIGRlICVkIHNlZ3VuZG9zLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MjMKK21zZ2lkICJXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICIKK21zZ3N0ciAiIgorIkVzY3JpYmllbmRvIHN1cGVyYmxvcXVlcyB5IGxhIGluZm9ybWFjacOzbiBjb250YWJsZSBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvczogIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MzAKK21zZ2lkICIiCisiXG4iCisiV2FybmluZywgaGFkIHRyb3VibGUgd3JpdGluZyBvdXQgc3VwZXJibG9ja3MuIgorbXNnc3RyICIiCisiXG4iCisiQXRlbmNpw7NuLCBzZSB0dXZvIHVuIHByb2JsZW1hIGFsIGVzY3JpYmlyIGxvcyBzdXBlcmJsb3F1ZXMuIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MzIKK21zZ2lkICIiCisiZG9uZVxuIgorIlxuIgorbXNnc3RyICIiCisiaGVjaG9cbiIKKyJcbiIKKworIzogbWlzYy9ta2xvc3QrZm91bmQuYzo1MAorbXNnaWQgIlVzYWdlOiBta2xvc3QrZm91bmRcbiIKK21zZ3N0ciAiTW9kbyBkZSBlbXBsZW86IG1rbG9zdCtmb3VuZFxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAgJXMgZGV2aWNlLi4uXG4iCisiXG4iCisiUHJpbnRzIG91dCB0aGUgcGFydGl0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGdpdmVuIGRldmljZS5cbiIKKyJGb3IgZXhhbXBsZTogJXMgL2Rldi9oZGFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk1vZG8gZGUgZW1wbGVvOiAgJXMgZGlzcG9zaXRpdm8uLi5cbiIKKyJcbiIKKyJFc3RlIHByb2dyYW1hIG11ZXN0cmEgbGEgaW5mb3JtYWNpw7NuIGRlIGxhIHBhcnRpY2nDs24gZGUgY2FkYSBkaXNwb3NpdGl2by5cbiIKKyJQb3IgZWplbXBsbzogJXMgL2Rldi9oZGFcbiIKKyJcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgYWJyaXIgJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBnZW9tZXRyeSBvZiAlczogJXMiCittc2dzdHIgIk5vIHNlIHB1ZWRlIG9idGVuZXIgbGEgZ2VvbWV0csOtYSBkZSAlczogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IHNpemUgb2YgJXM6ICVzIgorbXNnc3RyICJObyBzZSBwdWVkZSBvYnRlbmVyIGVsIHRhbWHDsW8gZGUgJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iCittc2dzdHIgIiVzOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIGluaWNpbz0lOGQgdGFtYcOxbz0lOGx1IGZpbj0lOGRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEyCittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIlBvciBmYXZvciBlamVjdXRlIGUyZnNjayBzb2JyZSBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWMgbWF4X21vdW50c19jb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdyb3VwXVxuIgorIlx0Wy1pIGludGVydmFsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbF9vcHRpb25zXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2ZWRfYmxvY2tzX3BlcmNlbnRdIFstbyBbXl1tb3VudF9vcHRpb25zWywuLi5dXSBbLXAgIgorIm1tcF91cGRhdGVfaW50ZXJ2YWxdXG4iCisiXHRbLXIgcmVzZXJ2ZWRfYmxvY2tzX2NvdW50XSBbLXUgdXNlcl0gWy1DIG1vdW50X2NvdW50XSBbLUwgdm9sdW1lX2xhYmVsXVxuIgorIlx0Wy1NIGxhc3RfbW91bnRlZF9kaXJdIFstTyBbXl1mZWF0dXJlWywuLi5dXVxuIgorIlx0Wy1RIHF1b3RhX29wdGlvbnNdXG4iCisiXHRbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXSBbLVQgbGFzdF9jaGVja190aW1lXSBbLVUgVVVJRF1cbiIKKyJcdFsgLUkgbmV3X2lub2RlX3NpemUgXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIk1vZG8gZGUgZW1wbGVvOiAlcyBbLWMgY3VlbnRhLW3DoXhpbWEtZGUtbW9udGFqZXNdIFstZSBjb21wb3J0YW1pZW50by1kZS0iCisiZXJyb3Jlc10gWy1nIGdydXBvXVxuIgorIlx0Wy1pIGludGVydmFsb1tkfG18d11dIFstal0gWy1KIG9wY2lvbmVzLWRlbC1maWNoZXJvLWRlLXRyYW5zYWNjaW9uZXNdIFstIgorImxdXG4iCisiXHRbLW0gcG9yY2VudGFqZS1kZS1ibG9xdWVzLXJlc2VydmFkb3NdIFstbyBbXl1vcGNpb25lcy1kZS1tb250YWplWywuLi5dXSBbLSIKKyJwIGludGVydmFsby1kZS1hY3R1YWxpemFjacOzbi1tbXBdXG4iCisiXHRbLXIgY3VlbnRhLWRlLWJsb3F1ZXMtcmVzZXJ2YWRvc10gWy11IHVzdWFyaW9dIFstQyBjdWVudGEtZGUtbW9udGFqZXNdIFstTCAiCisiZXRpcXVldGEtZGUtdm9sdW1lbl1cbiIKKyJcdFstTSDDumx0aW1vLWRpcmVjdG9yaW8tbW9udGFkb10gWy1PIFteXWNhcmFjdGVyw61zdGljYVssLi4uXV1cbiIKKyJcdFstUSBvcGNpb25zX2RlLWN1b3RhXVxuIgorIlx0Wy1FIG9wY2nDs24tZXh0ZW5kaWRhWywuLi5dXSBbLVQgw7psdGltYS1mZWNoYS1kZS1yZXZpc8Ozbl0gWy1VIFVVSURdXG4iCisiXHRbIC1JIG51ZXZvLXRhbWHDsW8tZGUtbm9kby1pIF0gZGlzcG9zaXRpdm9cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzCittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCFcbiIKK21zZ3N0ciAiwqFObyBzZSBlbmNvbnRyw7MgZWwgc3VwZXJibG9xdWUgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjYxCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW50ZW50YWJhIGFicmlyIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBleHRlcm5vIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjcgbWlzYy90dW5lMmZzLmM6MTk2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiJXMgbm8gZXMgdW4gZGlzcG9zaXRpdm8gY29uIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6Mjc3IG1pc2MvdHVuZTJmcy5jOjE5NzQKK21zZ2lkICJGaWxlc3lzdGVtJ3MgVVVJRCBub3QgZm91bmQgb24gam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJObyBzZSBlbmNvbnRyw7MgZWwgVVVJRCBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBlbiBlbCBmaWNoZXJvIGRlXG4iCisidHJhbnNhY2Npb25lcyBkZWwgZGlzcG9zaXRpdm8uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMwMQorbXNnaWQgIiIKKyJDYW5ub3QgbG9jYXRlIGpvdXJuYWwgZGV2aWNlLiBJdCB3YXMgTk9UIHJlbW92ZWRcbiIKKyJVc2UgLWYgb3B0aW9uIHRvIHJlbW92ZSBtaXNzaW5nIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgbG9jYWxpemFyIGVsIGRpc3Bvc2l0aXZvIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMuIE5PIHNlICIKKyJlbGltaW7Ds1xuIgorIlV0aWxpY2UgbGEgb3BjacOzbiAtZiBwYXJhIGVsaW1pbmFyIGVsIGRpc3Bvc2l0aXZvIGRlbCBmaWNoZXJvIGRlICIKKyJ0cmFuc2FjY2lvbmVzIHBlcmRpZG8uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMxMAorbXNnaWQgIkpvdXJuYWwgcmVtb3ZlZFxuIgorbXNnc3RyICJGaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgZWxpbWluYWRvXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM1NAorbXNnaWQgIndoaWxlIHJlYWRpbmcgYml0bWFwcyIKK21zZ3N0ciAibWllbnRyYXMgc2UgbGXDrWFuIGxvcyBtYXBhcyBkZSBiaXRzIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNjIKK21zZ2lkICJ3aGlsZSBjbGVhcmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJtaWVudHJhcyBzZSBib3JyYWJhIGVsIG5vZG8taSBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNzMKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgIm1pZW50cmFzIHNlIGVzY3JpYsOtYSBlbCBub2RvLWkgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyIKKworIzogbWlzYy90dW5lMmZzLmM6NDA1IG1pc2MvdHVuZTJmcy5jOjQxOAorbXNnaWQgIihhbmQgcmVib290IGFmdGVyd2FyZHMhKVxuIgorbXNnc3RyICIowqF5IHJlaW5pY2llIGRlc3B1w6lzISlcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyaW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKyJObyBzZSBzb3BvcnRhIGRlc2FjdGl2YXIgbGEgY2FyYWN0ZXLDrXN0aWNhICclcycgZGVsIHNpc3RlbWEgZGUgZmljaGVyb3MuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKyJFbCBhanVzdGUgZGUgbGEgY2FyYWN0ZXLDrXN0aWNhICclcycgZGVsIHNpc3RlbWEgZGUgZmljaGVyb3Mgbm8gZXN0w6EgIgorImltcGxlbWVudGFkby5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDY3Cittc2dpZCAiIgorIlRoZSBoYXNfam91cm5hbCBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkxhIGJhbmRlcmEgJ2hhc19qb3VybmFsJyBzw7NsbyBwdWVkZSBzZXIgYm9ycmFkYSBjdWFuZG8gZWwgc2lzdGVtYSBkZVxuIgorImZpY2hlcm9zIG5vIGVzdMOhIG1vbnRhZG8gbyBlc3TDoSBtb250YWRvIGVuIG1vZG8gZGUgc8OzbG8gbGVjdHVyYS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDc2Cittc2dpZCAiIgorIlRoZSBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldC4gIFBsZWFzZSBydW4gZTJmc2NrIGJlZm9yZSBjbGVhcmluZ1xuIgorInRoZSBoYXNfam91cm5hbCBmbGFnLlxuIgorbXNnc3RyICIiCisiTGEgYmFuZGVyYSAnbmVlZHNfcmVjb3ZlcnknIGVzdMOhIHB1ZXN0YS4gIFBvciBmYXZvciBlamVjdXRlIGUyZnNjayBhbnRlc1xuIgorImRlIGRlYWN0aXZhciBsYSBiYW5kZXJhICdoYXNfam91cm5hbCcuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ5NQorbXNnaWQgIiIKKyJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnc3BhcnNlX3N1cGVyJyBub3Qgc3VwcG9ydGVkXG4iCisiZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIG1ldGFfYmcgZmVhdHVyZSBlbmFibGVkLlxuIgorbXNnc3RyICIiCisiTGEgY2FyYWN0ZXLDrXN0aWNhICdzcGFyc2Vfc3VwZXInIG5vIHNlIHB1ZWRlIGFjdGl2YXJcbiIKKyJlbiBzaXN0ZW1hcyBkZSBmaWNoZXJvcyBxdWUgdGVuZ2FuIGxhIGNhcmFjdGVyw61zdGljYSBtZXRhX2JnIGFjdGl2YWRhLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MDgKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW4ndFxuIgorImJlIHNldCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIG9yXG4iCisicmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiTGEgY2FyYWN0ZXLDrXNpdGNhIGRlIHByb3RlY2Npw7NuIGRlIG1vbnRhamUgbcO6bHRpcGxlIG5vIHB1ZWRlXG4iCisicG9uZXJzZSBzaSBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGVzdMOhIG1vbnRhZG8gbyBlc1xuIgorImRlIHNvbG8gbGVjdHVyYS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIiIKKyJTZSBoYSBhY3RpdmFkbyBsYSBwcm90ZWNjacOzbiBkZSBtb250YWplIG3Dumx0aXBsZSBjb24gdW4gaW50ZXJ2YWxvIGRlICIKKyJhY3R1YWxpemFjacOzbiBkZSAlZHMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUzNQorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbm5vdFxuIgorImJlIGRpc2FibGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIHJlYWRvbmx5LlxuIgorbXNnc3RyICIiCisiTGEgY2FyYWN0ZXLDrXN0aWNhIGRlIG1vbnRhamUgbcO6bHRpcGxlIG5vIHNlIHB1ZWRlXG4iCisiZGVzYWN0aXZhciBzaSBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGVzIGRlIHNvbG8gbGVjdHVyYS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTQzCittc2dpZCAiRXJyb3Igd2hpbGUgcmVhZGluZyBiaXRtYXBzXG4iCittc2dzdHIgIkVycm9yIG1pZW50cmFzIHNlIGxlw61hbiBsb3MgbWFwYXMgZGUgYml0c1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFnaWMgbnVtYmVyIGluIE1NUCBibG9jayBkb2VzIG5vdCBtYXRjaC4gZXhwZWN0ZWQ6ICV4LCBhY3R1YWw6ICV4XG4iCittc2dzdHIgIkVsIG7Dum1lcm8gbcOhZ2ljbyBlbiBlbCBibG9xdWUgTU1QIG5vIGN1YWRyYS4gZXNwZXJhZG86ICV4LCByZWFsOiAleFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1NTcKK21zZ2lkICJ3aGlsZSByZWFkaW5nIE1NUCBibG9jay4iCittc2dzdHIgIm1pZW50cmFzIHNlIGxlw61hIGVsIGJsb3F1ZSBNTVAuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1ODkKK21zZ2lkICIiCisiQ2xlYXJpbmcgdGhlIGZsZXhfYmcgZmxhZyB3b3VsZCBjYXVzZSB0aGUgdGhlIGZpbGVzeXN0ZW0gdG8gYmVcbiIKKyJpbmNvbnNpc3RlbnQuXG4iCittc2dzdHIgIiIKKyJCb3JyYXIgbGEgYmFuZGVyYSBmbGV4X2JnIHByb3ZvY2Fyw61hIHF1ZSBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIHNlXG4iCisidm9sdmllcmEgaW5jb25zaXN0ZW50ZS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjAwCittc2dpZCAiIgorIlRoZSBodWdlX2ZpbGUgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJMYSBjYXJhY3RlcsOtc3RpY2EgJ2h1Z2VfZmlsZScgc8OzbG8gcHVlZGUgc2VyIGJvcnJhZGEgY3VhbmRvIGVsIHNpc3RlbWEgZGVcbiIKKyJmaWNoZXJvcyBubyBlc3TDoSBtb250YWRvIG8gZXN0w6EgZW4gbW9kbyBkZSBzw7NsbyBsZWN0dXJhLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NjAKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogJ15xdW90YScgb3B0aW9uIG92ZXJyaWRlcyAnLVEnYXJndW1lbnRzLlxuIgorbXNnc3RyICIiCisiXG4iCisiQXRlbmNpw7NuOiBsYSBvcGNpw7NuICdecXVvdGEnIGRlamEgc2luIGVmZWN0byBsb3MgYXJndW1lbnRvcyAnLVEnLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MDUKK21zZ2lkICJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBhIGpvdXJuYWwuXG4iCittc2dzdHIgIkVsIHNpc3RlbWEgZGUgZmljaGVyb3MgeWEgdGllbmUgdW4gZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBvbiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiXHRtaWVudHJhcyBzZSBpbnRlbnRhYmEgYWJyaXIgZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIGVuICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIG9uIGRldmljZSAlczogIgorbXNnc3RyICJDcmVhbmRvIHVuIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBlbiBlbCBkaXNwb3NpdGl2byAlczogIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgYWRkaW5nIGZpbGVzeXN0ZW0gdG8gam91cm5hbCBvbiAlcyIKK21zZ3N0ciAiIgorIm1pZW50cmFzIHNlIGFncmVnYWJhIHVuIHNpc3RlbWEgZGUgZmljaGVyb3MgYWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIGVuICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3NDMKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIGlub2RlOiAiCittc2dzdHIgIkNyZWFuZG8gZWwgbm9kby1pIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXM6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NzU3Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiCittc2dzdHIgIiIKKyJcbiIKKyJcdG1pZW50cmFzIGludGVudGFiYSBjcmVhciBlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjgzMgorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBxdW90YSBvcHRpb25zIVxuIgorbXNnc3RyICIiCisiwqFObyBzZSBwdWVkZSByZXNlcnZhciBtZW1vcmlhIHBhcmEgYW5hbGl6YXIgc2ludMOhY3RpY2FtZW50ZSBsYXMgb3BjaW9uZXMgZGUgIgorImN1b3RhIVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4NTQKK21zZ2lkICIiCisiXG4iCisiQmFkIHF1b3RhIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkZvbGxvd2luZyB2YWxpZCBxdW90YSBvcHRpb25zIGFyZSBhdmFpbGFibGUgKHBhc3MgYnkgc2VwYXJhdGluZyB3aXRoICIKKyJjb21tYSk6XG4iCisiXHRbXl11c3JxdW90YVxuIgorIlx0W15dZ3JwcXVvdGFcbiIKKyJcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkxhcyBvcGNpb25lcyBkZSBjdW90YSBlc3BlY2lmaWNhZGFzIG5vIHNvbiBjb3JyZWN0YXMuXG4iCisiXG4iCisiTGFzIHNpZ3VpZW50ZXMgb3BjaW9uZXMgZGUgY3VvdGEgdsOhbGlkYXMgZXN0w6FuIGRpc3BvbmlibGVzIChkZWJlbiBzZXBhcmFyc2UgIgorInBvciBjb21hcyk6XG4iCisiXHRbXl11c3JxdW90YVxuIgorIlx0W15dZ3JwcXVvdGFcbiIKKyJcbiIKKyJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHBhcnNlIGRhdGUvdGltZSBzcGVjaWZpZXI6ICVzIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgYW5hbGl6YXIgc2ludMOhY3RpY2FtZW50ZSBlbCBlc3BlY2lmaWNhZG9yIGRlIGZlY2hhL2hvcmE6ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5NDIgbWlzYy90dW5lMmZzLmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtb3VudHMgY291bnQgLSAlcyIKK21zZ3N0ciAiY3VlbnRhIGRlIG1vbnRhamVzIGluY29ycmVjdG9zIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZXJyb3IgYmVoYXZpb3IgLSAlcyIKK21zZ3N0ciAiY29tcG9ydGFtaWVudG8gZGUgZXJyb3JlcyBpbmNvcnJlY3RvIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2lkL2dyb3VwIG5hbWUgLSAlcyIKK21zZ3N0ciAibm9tYnJlIGRlbCBnaWQvZ3J1cG8gaW5jb3JyZWN0byAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbnRlcnZhbCAtICVzIgorbXNnc3RyICJpbnRlcnZhbG8gaW5jb3JyZWN0byAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9jayByYXRpbyAtICVzIgorbXNnc3RyICJwcm9wb3JjacOzbiBkZSBibG9xdWVzIHJlc2VydmFkb3MgaW5jb3JyZWN0YSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDc1Cittc2dpZCAiLW8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1vIHNvbG8gcG9kcsOtYSBzZXIgZXNwZWNpZmljYWRvIHVuYSB2ZXoiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwODQKK21zZ2lkICItTyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiLU8gc8OzbG8gc2UgcHVlZGUgZXNwZWNpZmljYXIgdW5hIHZleiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IC0gJXMiCittc2dzdHIgImN1ZW50YSBkZSBibG9xdWVzIHJlc2VydmFkb3MgaW5jb3JyZWN0YSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB1aWQvdXNlciBuYW1lIC0gJXMiCittc2dzdHIgIm5vbWJyZSBkZSB1aWQvdXN1YXJpbyBpbmNvcnJlY3RvIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAidGFtYcOxbyBkZSBub2RvLWkgbm8gdsOhbGlkbyAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIklub2RlIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by0gJXMiCittc2dzdHIgIkVsIHRhbWHDsW8gZGUgbm9kby1pIGRlYmUgc2VyIHBvdGVuY2lhIGRlIGRvcyAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1tcF91cGRhdGVfaW50ZXJ2YWwgdG9vIGJpZzogJWx1XG4iCittc2dzdHIgIm1tcF91cGRhdGVfaW50ZXJ2YWwgZGVtYXNpYWRvIGdyYW5kZTogJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kXG4iCittc2dpZF9wbHVyYWwgIiIKKyJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHJbMF0gIiIKKyJTZSBwb25lIGVsIGludGVydmFsbyBkZSBhY3R1YWxpemFjacOzbiBkZSBwcm90ZWNjacOzbiBkZSBtb250YWplIG3Dumx0aXBsZSBhICIKKyIlbHUgc2VndW5kb1xuIgorbXNnc3RyWzFdICIiCisiU2UgcG9uZSBlbCBpbnRlcnZhbG8gZGUgYWN0dWFsaXphY2nDs24gZGUgcHJvdGVjY2nDs24gZGUgbW9udGFqZSBtw7psdGlwbGUgYSAiCisiJWx1IHNlZ3VuZG9zXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlkZTogJXNcbiIKK21zZ3N0ciAiwqtTdHJpZGXCuyBkZSBSQUlEIG5vIHbDoWxpZG86ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlwZS13aWR0aDogJXNcbiIKK21zZ3N0ciAiwqtzdHJpcGUtd2lkdGjCuyBkZSBSQUlEIG5vIHbDoWxpZG86ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBoYXNoIGFsZ29yaXRobTogJXNcbiIKK21zZ3N0ciAiQWxnb3JpdG1vIMKraGFzaMK7IG5vIHbDoWxpZG86ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHRvICVzICglZClcbiIKK21zZ3N0ciAiUG9uaWVuZG8gZWwgYWxnb3JpdG1vIMKraGFzaMK7cHJlZGV0ZXJtaW5hZG8gYSAlcyAoJWQpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMzEKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdGNsZWFyX21tcFxuIgorIlx0aGFzaF9hbGc9PGhhc2ggYWxnb3JpdGhtPlxuIgorIlx0bW91bnRfb3B0cz08ZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGNodW5rIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlX3dpZHRoPTxSQUlEIHN0cmlkZSpkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdF50ZXN0X2ZzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJMYXMgb3BjaW9uZXMgZXNwZWNpZmljYWRhcyBzb24gaW5jb3JyZWN0YXMuXG4iCisiXG4iCisiTGFzIG9wY2lvbmVzIGV4dGVuZGlkYXMgZGViZW4gZXN0YXIgc2VwYXJhZGFzIHBvciBjb21hcywgeSBwdWVkZW4gdG9tYXIgdW5cbiIKKyJcdGFyZ3VtZW50byBxdWUgc2UgYWp1c3RhIGNvbiB1biBzaWdubyBkZSBpZ3VhbCAoJz0nKS5cbiIKKyJcbiIKKyJMYXMgb3BjaW9uZXMgZXh0ZW5kaWRhcyB2w6FsaWRhcyBzb246XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxhbGdvcml0bW8gwqtoYXNowrs+XG4iCisiXHRtb3VudF9vcHRzPTxvcGNpb25lcyBkZSBtb250YWplIGV4dGVuZGlkYXMgcHJlZGV0ZXJtaW5hZGFzPlxuIgorIlx0c3RyaWRlPTx0YW1hw7FvIGRlIGZyYWdtZW50byBwb3IgZGlzY28gUkFJRCwgZW4gYmxvcXVlcz5cbiIKKyJcdHN0cmlwZV93aWR0aD08wqtzdHJpZGXCuyBkZSBSQUlEICogZGlzY29zIGRlIGRhdG9zLCBlbiBibG9xdWVzPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0XnRlc3RfZnNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc5OAorbXNnaWQgIkZhaWxlZCB0byByZWFkIGlub2RlIGJpdG1hcFxuIgorbXNnc3RyICJGYWxsbyBtaWVudHJhcyBzZSBsZcOtYSBlbCBtYXBhIGRlIGJpdHMgZGVsIG5vZG8taVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODAzCittc2dpZCAiRmFpbGVkIHRvIHJlYWQgYmxvY2sgYml0bWFwXG4iCittc2dzdHIgIkZhbGxvIGxleWVuZG8gZWwgbWFwYSBkZSBiaXRzIGRlbCBibG9xdWVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyMCByZXNpemUvcmVzaXplMmZzLmM6OTMxCittc2dpZCAiYmxvY2tzIHRvIGJlIG1vdmVkIgorbXNnc3RyICJibG9xdWVzIHBvciBzZXIgbW92aWRvcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyMworbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSBibG9jayBiaXRtYXAgd2hlbiBpbmNyZWFzaW5nIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiIgorIkZhbGxvIHJlc2VydmFuZG8gZWwgbWFwYSBkZSBiaXRzIGRlbCBibG9xdWUgYWwgaW5jcmVtZW50YXIgZWwgdGFtYcOxbyBkZSBub2RvLSIKKyJpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjkKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGluY3JlYXNlIGlub2RlIHNpemUgXG4iCittc2dzdHIgIk5vIGhheSBlc3BhY2lvIHN1ZmljaWVudGUgcGFyYSBhdW1lbnRhciBlbCB0YW1hw7FvIGRlIG5vZG8taSBcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgzNAorbXNnaWQgIkZhaWxlZCB0byByZWxvY2F0ZSBibG9ja3MgZHVyaW5nIGlub2RlIHJlc2l6ZSBcbiIKK21zZ3N0ciAiIgorIkZhbGxvIG1pZW50cmFzIHNlIHJlc2VydmFiYW4gbG9zIGJsb3F1ZXMgcGFyYSBlbCBjYW1iaW8gZGUgdGFtYcOxbyBkZSBub2RvLSIKKyJpIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODY2Cittc2dpZCAiIgorIkVycm9yIGluIHJlc2l6aW5nIHRoZSBpbm9kZSBzaXplLlxuIgorIlJ1biBlMnVuZG8gdG8gdW5kbyB0aGUgZmlsZSBzeXN0ZW0gY2hhbmdlcy4gXG4iCittc2dzdHIgIiIKKyJFcnJvciBhbCBjYW1iaWFyIGVsIHRhbWHDsW8gZGVsIG5vZG8taS5cbiIKKyJFamVjdXRlIGUydW5kbyBwYXJhIGRlc2hhY2VyIGxvcyBjYW1iaW9zIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zLiBcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTg5MworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGRiIGZpbGVuYW1lXG4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIHJlc2VydmFyIG1lbW9yaWEgcGFyYSBlbCBub21icmUgZGVsIGZpY2hlcm8gdGRiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRlbGV0ZSAlcyIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW50ZW50YWJhIGJvcnJhciAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gdW5kbyB0aGUgdHVuZTJmcyBvcGVyYXRpb24gcGxlYXNlIHJ1biB0aGUgY29tbWFuZFxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBhcmEgZGVzaGFjZXIgbGEgb3BlcmFjacOzbiB0dW5lMmZzLCBlamVjdXRlIGVsIGNvbWFuZG9cbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBibG9jayBtYWdpYyBpcyBiYWQuIFRyeSB0byBmaXggaXQgYnkgcnVubmluZzpcbiIKKyInZTJmc2NrIC1mICVzJ1xuIgorbXNnc3RyICIiCisiRWwgbsO6bWVybyBtw6FnaWNvIGRlbCBibG9xdWUgTU1QIGVzIGluY29ycmVjdG8uIFRyYXRlIGRlIGFycmVnbGFybG8gIgorImVqZWN1dGFuZG86XG4iCisiJ2UyZnNjayAtZiAlcydcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA3NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBpcyBhbHJlYWR5ICVsdVxuIgorbXNnc3RyICJFbCB0YW1hw7FvIGRlbCBub2RvLWkgeWEgZXMgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwODEKK21zZ2lkICJTaHJpbmtpbmcgaW5vZGUgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIk5vIGVzIHBvc2libGUgcmVkdWNpciBlbCB0YW1hw7FvIGRlbCBub2RvLWlcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlub2RlIHNpemUgJWx1IChtYXggJWQpXG4iCittc2dzdHIgIlRhbWHDsW8gaW5jb3JyZWN0byBkZWwgbm9kby1pICVsdSAobcOheCAlZClcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiU2UgcG9uZSBsYSBjdWVudGEgZGUgbW9udGFqZXMgbcOheGltYSBhICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjdXJyZW50IG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIlNlIHBvbmUgbGEgY3VlbnRhIGRlIG1vbnRhamVzIGFjdHVhbCBhICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBlcnJvciBiZWhhdmlvciB0byAlZFxuIgorbXNnc3RyICJTZSBwb25lIGVsIGNvbXBvcnRhbWllbnRvIGRlIGVycm9yZXMgYSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGdpZCB0byAlbHVcbiIKK21zZ3N0ciAiU2UgcG9uZSBlbCBnaWQgZGUgbG9zIGJsb3F1ZXMgcmVzZXJ2YWRvcyAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyBpcyB0b28gYmlnICglbHUpIgorbXNnc3RyICJlbCBpbnRlcnZhbG8gZW50cmUgcmV2aXNpb25lcyBlcyBkZW1hc2lhZG8gZ3JhbmRlICglbHUpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0ciAiU2UgcG9uZSBlbCBpbnRlcnZhbG8gZW50cmUgcmV2aXNpb25lcyBlbiAlbHUgc2VndW5kb3NcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50YWdlIHRvICVnJSUgKCVsbHUgYmxvY2tzKVxuIgorbXNnc3RyICJTZSBwb25lIGVsIHBvcmNlbnRhamUgZGUgYmxvcXVlcyByZXNlcnZhZG9zIGEgJWclJSAoJWxsdSBibG9xdWVzKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlc2VydmVkIGJsb2NrcyBjb3VudCBpcyB0b28gYmlnICglbGx1KSIKK21zZ3N0ciAibGEgY2FudGlkYWQgZGUgYmxvcXVlcyByZXNlcnZhZG9zIGVzIGRlbWFzaWFkbyBncmFuZGUgKCVsbHUpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IHRvICVsbHVcbiIKK21zZ3N0ciAiU2UgcG9uZSBsYSBjYW50aWRhZCBkZSBibG9xdWVzIHJlc2VydmFkb3MgYSAlbGx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxODcKK21zZ2lkICIiCisiXG4iCisiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgc3BhcnNlIHN1cGVyYmxvY2tzLlxuIgorbXNnc3RyICIiCisiXG4iCisiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyB5YSB0aWVuZSBzdXBlcmJsb3F1ZXMgZGlzcGVyc29zLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTkxCittc2dpZCAiIgorIlxuIgorIlNldHRpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZFxuIgorImZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBtZXRhX2JnIGZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkxhIGNhcmFjdGVyw61zdGljYSBkZSBzdXBlcmJsb3F1ZXMgZGlzcGVyc29zIG5vIHNlIHB1ZWRlIGFjdGl2YXJcbiIKKyJlbiBzaXN0ZW1hcyBkZSBmaWNoZXJvcyBxdWUgdGVuZ2FuIGxhIGNhcmFjdGVyw61zdGljYSBtZXRhX2JnIGFjdGl2YWRhLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIHNldC4gICVzIgorbXNnc3RyICIiCisiXG4iCisiTGEgYmFuZGVyYSBkZSBzdXBlcmJsb3F1ZXMgZGlzcGVyc29zIGVzdMOhIHB1ZXN0YS4gICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjA3Cittc2dpZCAiIgorIlxuIgorIkNsZWFyaW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJObyBlcyBwb3NpYmxlIHF1aXRhciBsYSBiYW5kZXJhIGRlIHN1cGVyYmxvcXVlcyBkaXNwZXJzb3MuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB0aW1lIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRvICVzXG4iCittc2dzdHIgIlNlIHBvbmUgbGEgaG9yYSBkZSBsYSDDumx0aW1hIHJldmlzacOzbiBhbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGEgJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyB1aWQgdG8gJWx1XG4iCittc2dzdHIgIlNlIHBvbmUgZWwgdWlkIGRlIGxvcyBibG9xdWVzIHJlc2VydmFkb3MgYSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI1MworbXNnaWQgIkVycm9yIGluIHVzaW5nIGNsZWFyX21tcC4gSXQgbXVzdCBiZSB1c2VkIHdpdGggLWZcbiIKK21zZ3N0ciAiRXJyb3IgYWwgdXRpbGl6YXIgY2xlYXJfbW1wLiBEZWJlIHV0aWxpemFyc2UgY29uIC1mXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNzEKK21zZ2lkICIiCisiVGhlIHF1b3RhIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorIkxhIGNhcmFjdGVyw61zdGljYSBkZSBjdW90YSBzw7NsbyBwdWVkZSBjYW1iaWFyc2UgY3VhbmRvIGVsIHNpc3RlbWEgZGUgIgorImZpY2hlcm9zIG5vIGVzdMOhIG1vbnRhZG8uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyOTIKK21zZ2lkICJUaGUgVVVJRCBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiRWwgVVVJRCBzb2xvIHB1ZWRlIGNhbWJpYXJzZSBjdWFuZG8gZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBubyBlc3TDoSBtb250YWRvLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzIyCittc2dpZCAiSW52YWxpZCBVVUlEIGZvcm1hdFxuIgorbXNnc3RyICJGb3JtYXRvIGRlbCBVVUlEIG5vIHbDoWxpZG9cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjMzNworbXNnaWQgIk5lZWQgdG8gdXBkYXRlIGpvdXJuYWwgc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiSGFjZSBmYWx0YSBhY3R1YWxpemFyIGVsIHN1cGVyYmxvcXVlIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNTgKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiRWwgdGFtYcOxbyBkZSBub2RvLWkgc29sbyBwdWVkZSBjYW1iaWFyc2UgY3VhbmRvIGVsIHNpc3RlbWEgZGUgZmljaGVyb3Mgbm8gIgorImVzdMOhIG1vbnRhZG8uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNjYKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIGlub2RlIHNpemUgbm90IHN1cHBvcnRlZCBmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgZmxleF9iZ1xuIgorImZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorIk5vIGVzIHBvc2libGUgY2FtYmlhciBlbCB0YW1hw7FvIGRlIG5vZG8taSBlbiBzaXN0ZW1hcyBkZSBmaWNoZXJvcyBxdWUgIgorInRlbmdhblxuIgorImxhIGNhcmFjdGVyw61zdGljYSBmbGV4X2JnIGFjdGl2YWRhLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW5vZGUgc2l6ZSAlbHVcbiIKK21zZ3N0ciAiU2UgcG9uZSBlbCB0YW1hw7FvIGRlIG5vZG8taSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM4MgorbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICJGYWxsbyBtaWVudHJhcyBzZSBjYW1iaWFiYSBlbCB0YW1hw7FvIGRlIG5vZG8taVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaWRlIHNpemUgdG8gJWRcbiIKK21zZ3N0ciAiQ29uZmlndXJhbmRvIGVsIHRhbWHDsW8gZGUgwqtzdHJpZGXCuyBhICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdHJpcGUgd2lkdGggdG8gJWRcbiIKK21zZ3N0ciAiQ29uZmlndXJhbmRvIGxhIGFuY2h1cmEgZGUgwqtzdHJpcGXCuyBhICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnMgdG8gJyVzJ1xuIgorbXNnc3RyICJTZSBwb25lbiBsYXMgb3BjaW9uZXMgZGUgbW9udGFqZSBleHRlbmRpZGFzIHByZWRldGVybWluYWRhcyBhICclcydcbiIKKworIzogbWlzYy91dGlsLmM6OTMKK21zZ2lkICI8cHJvY2VlZGluZz5cbiIKK21zZ3N0ciAiPHByb2NlZGllbmRvPlxuIgorCisjOiBtaXNjL3V0aWwuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICJQcm9jZWVkIGFueXdheSAob3Igd2FpdCAlZCBzZWNvbmRzKSA/ICh5LG4pICIKK21zZ3N0ciAiwr9Db250aW51YXIgZGUgdG9kYXMgZm9ybWFzIChvIGVzcGVyYSAlZCBzZWd1bmRvcyk/IChzLG4pICIKKworIzogbWlzYy91dGlsLmM6MTAxCittc2dpZCAiUHJvY2VlZCBhbnl3YXk/ICh5LG4pICIKK21zZ3N0ciAiwr9Db250aW51YXIgZGUgdG9kYXMgZm9ybWFzPyAocyxuKSAiCisKKyM6IG1pc2MvdXRpbC5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW91bnRlZCBvbiAlcyBvbiAlcyIKK21zZ3N0ciAiXHTDumx0aW1hIGZlY2hhIGRlIG1vbnRhamUgZGUgJXMgJXMiCisKKyM6IG1pc2MvdXRpbC5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW91bnRlZCBvbiAlcyIKK21zZ3N0ciAiXHTDumx0aW1hIGZlY2hhIGRlIG1vbnRhamUgJXMiCisKKyM6IG1pc2MvdXRpbC5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJcdGNyZWF0ZWQgb24gJXMiCittc2dzdHIgIlx0ZmVjaGEgZGUgY3JlYWNpw7NuICVzIgorCisjOiBtaXNjL3V0aWwuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vZGlmaWVkIG9uICVzIgorbXNnc3RyICJcdGZlY2hhIGRlIMO6bHRpbWEgbW9kaWZpY2FjacOzbiAlcyIKKworIzogbWlzYy91dGlsLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvdW5kIGEgJXMgcGFydGl0aW9uIHRhYmxlIGluICVzXG4iCittc2dzdHIgIlNlIGhhIGVuY29udHJhZG8gdW5hIHRhYmxhIGRlIHBhcnRpY2lvbmVzICVzIGVuICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSAlcyBkb2VzIG5vdCBleGlzdCBhbmQgbm8gc2l6ZSB3YXMgc3BlY2lmaWVkLlxuIgorbXNnc3RyICJFbCBmaWNoZXJvICVzIG5vIGV4aXN0ZSB5IG5vIHNlIGhhIGVzcGVjaWZpY2FkbyBuaW5nw7puIHRhbWHDsW8uXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyByZWd1bGFyIGZpbGUgJXNcbiIKK21zZ3N0ciAiQ3JlYW5kbyBlbCBmaWNoZXJvIG9yZGluYXJpbyAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIGFicmlyICVzOiAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMTYKK21zZ2lkICIiCisiXG4iCisiVGhlIGRldmljZSBhcHBhcmVudGx5IGRvZXMgbm90IGV4aXN0OyBkaWQgeW91IHNwZWNpZnkgaXQgY29ycmVjdGx5P1xuIgorbXNnc3RyICIiCisiXG4iCisiRW4gYXBhcmllbmNpYSwgZWwgZGlzcG9zaXRpdm8gbm8gZXhpc3RlOyDCv1NlIGVzcGVjaWZpY8OzIGNvcnJlY3RhbWVudGU/XG4iCisKKyM6IG1pc2MvdXRpbC5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBibG9jayBzcGVjaWFsIGRldmljZS5cbiIKK21zZ3N0ciAiJXMgbm8gZXMgdW4gZGlzcG9zaXRpdm8gZXNwZWNpYWwgZGUgYmxvcXVlcy5cbiIKKworIzogbWlzYy91dGlsLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGNvbnRhaW5zIGEgJXMgZmlsZSBzeXN0ZW0gbGFiZWxsZWQgJyVzJ1xuIgorbXNnc3RyICIlcyBjb250aWVuZSB1biBzaXN0ZW1hIGRlIGZpY2hlcm9zICVzIGV0aXF1ZXRhZG8gJyVzJ1xuIgorCisjOiBtaXNjL3V0aWwuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICIlcyBjb250aWVuZSB1biBzaXN0ZW1hIGRlIGZpY2hlcm9zICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBlbnRpcmUgZGV2aWNlLCBub3QganVzdCBvbmUgcGFydGl0aW9uIVxuIgorbXNnc3RyICLCoSVzIGVzIHRvZG8gZWwgZGlzcG9zaXRpdm8sIG5vIHPDs2xvIHVuYSBwYXJ0aWNpw7NuIVxuIgorCisjOiBtaXNjL3V0aWwuYzozMjMKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiIgorIlNlIGZ1ZXJ6YSBkZSB0b2RhcyBmb3JtYXMgbWtlMmZzLiAgRXNwZXJlbW9zIHF1ZSAvZXRjL210YWIgc2VhIGluY29ycmVjdG8uXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBtYWtlIGEgJXMgaGVyZSFcbiIKK21zZ3N0ciAiwqFObyBzZSBoYXLDoSB1biAlcyBhcXXDrSFcbiIKKworIzogbWlzYy91dGlsLmM6MzM1Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgIlNlIGZ1ZXJ6YSBkZSB0b2RhcyBmb3JtYXMgbWtlMmZzLlxuIgorCisjOiBtaXNjL3V0aWwuYzozNTEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugam91cm5hbCBvcHRpb25zIVxuIgorbXNnc3RyICIiCisiwqFObyBzZSBwdWVkZSByZXNlcnZhciBtZW1vcmlhIHBhcmEgbGEgcmV2aXNpw7NuIHNpbnTDoWN0aWNhIGRlIGxhcyBvcGNpb25lcyAiCisiZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyFcbiIKKworIzogbWlzYy91dGlsLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3QgZmluZCBqb3VybmFsIGRldmljZSBtYXRjaGluZyAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiTm8gc2UgcHVlZGUgZW5jb250cmFyIGVsIGRpc3Bvc2l0aXZvIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgIgorImNvcnJlc3BvbmRpZW50ZSBhICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQwMworbXNnaWQgIiIKKyJcbiIKKyJCYWQgam91cm5hbCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJKb3VybmFsIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBqb3VybmFsIG9wdGlvbnMgYXJlOlxuIgorIlx0c2l6ZT08am91cm5hbCBzaXplIGluIG1lZ2FieXRlcz5cbiIKKyJcdGRldmljZT08am91cm5hbCBkZXZpY2U+XG4iCisiXHRsb2NhdGlvbj08am91cm5hbCBsb2NhdGlvbj5cbiIKKyJcbiIKKyJUaGUgam91cm5hbCBzaXplIG11c3QgYmUgYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlNlIGVzcGVjaWZpY2Fyb24gb3BjaW9uZXMgaW5jb3JyZWN0YXMgcGFyYSBlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMuXG4iCisiXG4iCisiTGFzIG9wY2lvbmVzIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgZGViZW4gZXN0YXIgc2VwYXJhZGFzIHBvciBjb21hc1xuIgorInkgcHVlZGVuIHRlbmVyIHVuIGFyZ3VtZW50byBxdWUgc2UgcG9uZSBjb24gdW4gc2lnbm8gZGUgaWd1YWwgKCc9JykuXG4iCisiXG4iCisiTGFzIG9wY2lvbmVzIHbDoWxpZGFzIHBhcmEgZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIHNvbjpcbiIKKyJcdHNpemU9PHRhbWHDsW8gZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBlbiBtZWdhYnl0ZXM+XG4iCisiXHRkZXZpY2U9PGRpc3Bvc2l0aXZvIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXM+XG4iCisiXHRsb2NhdGlvbj08bG9jYWxpemFjacOzbiBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzPlxuIgorIlxuIgorIkVsIHRhbWHDsW8gZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBkZWJlIGVzdGFyIGVudHJlIDEwMjQgeSAxMDI0MDAwMCAiCisiYmxvcXVlcyBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcy5cbiIKKyJcbiIKKworIzogbWlzYy91dGlsLmM6NDM0Cittc2dpZCAiIgorIlxuIgorIkZpbGVzeXN0ZW0gdG9vIHNtYWxsIGZvciBhIGpvdXJuYWxcbiIKK21zZ3N0ciAiIgorIlxuIgorIkVsIHNpc3RlbWEgZGUgZmljaGVyb3MgZXMgZGVtYXNpYWRvIHBlcXVlw7FvIHBhcmEgdW4gZmljaGVybyBkZSAiCisidHJhbnNhY2Npb25lc1xuIgorCisjOiBtaXNjL3V0aWwuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlRoZSByZXF1ZXN0ZWQgam91cm5hbCBzaXplIGlzICVkIGJsb2NrczsgaXQgbXVzdCBiZVxuIgorImJldHdlZW4gMTAyNCBhbmQgMTAyNDAwMDAgYmxvY2tzLiAgQWJvcnRpbmcuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFbCB0YW1hw7FvIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgc29saWNpdGFkbyBlcyBkZSAlZCBibG9xdWVzO1xuIgorImRlYmVyw61hIGVzdGFyIGVudHJlIDEwMjQgeSAxMDI0MDAwMCBibG9xdWVzLiAgU2UgZmluYWxpemEuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQ0OQorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIHNpemUgdG9vIGJpZyBmb3IgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkVsIHRhbWHDsW8gZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBlcyBtdXkgZ3JhbmRlIHBhcmEgZWwgc2lzdGVtYSBkZSAiCisiZmljaGVyb3MuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBmaWxlc3lzdGVtIHdpbGwgYmUgYXV0b21hdGljYWxseSBjaGVja2VkIGV2ZXJ5ICVkIG1vdW50cyBvclxuIgorIiVnIGRheXMsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gIFVzZSB0dW5lMmZzIC1jIG9yIC1pIHRvIG92ZXJyaWRlLlxuIgorbXNnc3RyICIiCisiRXN0ZSBzaXN0ZW1hIGRlIGZpY2hlcm9zIHNlIHJldmlzYXLDoSBhdXRvbcOhdGljYW1lbnRlIGNhZGEgJWQgbW9udGFqZXMgb1xuIgorIiVnIGTDrWFzLCBsbyBxdWUgc3VjZWRhIHByaW1lcm8uICBVdGlsaWNlIHR1bmUyZnMgLWMgbyAtaSBwYXJhIGNhbWJpYXJsby5cbiIKKworIzogbWlzYy91dWlkZC5jOjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWRdIFstcCBwaWRmaWxlXSBbLXMgc29ja2V0cGF0aF0gWy1UIHRpbWVvdXRdXG4iCittc2dzdHIgIiIKKyJNb2RvIGRlIGVtcGxlbzogJXMgWy1kXSBbLXAgZmljaGVyby1waWRdwqBbLXMgcnV0YS1zb2NrZXRdIFstVCByZXRhcmRvXVxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIFstcnx0XSBbLW4gbnVtXSBbLXMgc29ja2V0cGF0aF1cbiIKK21zZ3N0ciAiICAgICAgICVzIFstcnx0XSBbLW4gbsO6bV0gWy1zIHJ1dGEtc29ja2V0XVxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIC1rXG4iCittc2dzdHIgIiAgICAgICAlcyAta1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MTU1Cittc2dpZCAiYmFkIGFyZ3VtZW50cyIKK21zZ3N0ciAiYXJndW1lbnRvcyBpbmNvcnJlY3RvcyIKKworIzogbWlzYy91dWlkZC5jOjE3MworbXNnaWQgImNvbm5lY3QiCittc2dzdHIgImNvbmV4acOzbiIKKworIzogbWlzYy91dWlkZC5jOjE5MgorbXNnaWQgIndyaXRlIgorbXNnc3RyICJlc2NyaXR1cmEiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDAKK21zZ2lkICJyZWFkIGNvdW50IgorbXNnc3RyICJuw7ptZXJvIGRlIGxlY3R1cmFzIgorCisjOiBtaXNjL3V1aWRkLmM6MjA2Cittc2dpZCAiYmFkIHJlc3BvbnNlIGxlbmd0aCIKK21zZ3N0ciAibGEgbG9uZ2l0dWQgZGUgbGEgcmVzcHVlc3RhIGVzIGluY29ycmVjdGEiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXVpZGQgZGFlbW9uIGFscmVhZHkgcnVubmluZyBhdCBwaWQgJXNcbiIKK21zZ3N0ciAiZWwgZGVtb25pbyB1dWlkZCB5YSBlc3TDoSBjb3JyaWVuZG8gY29uIHBpZCAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICJObyBzZSBwdWVkZSBjcmVhciBlbCDCq3NvY2tldMK7IHVuaXggZGUgZmx1am86ICVzIgorCisjOiBtaXNjL3V1aWRkLmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGJpbmQgdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIGFzaWduYXIgZWwgwqtzb2NrZXTCuyB1bml4ICVzOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxpc3RlbiBvbiB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZXNjdWNoYXIgcG9yIGVsIMKrc29ja2V0wrsgdW5peCAlczogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGZyb20gY2xpZW50LCBsZW4gPSAlZFxuIgorbXNnc3RyICJFcnJvciBhbCBsZWVyIGRlbCBjbGllbnRlLCBsb25naXR1ZCA9ICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlcmF0aW9uICVkLCBpbmNvbWluZyBudW0gPSAlZFxuIgorbXNnc3RyICJvcGVyYWNpw7NuICVkLCBuw7ptZXJvIGVudHJhbnRlID0gJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEOiAlc1xuIgorbXNnc3RyICJVVUlEIGNvbiBob3JhIGdlbmVyYWRvOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCByYW5kb20gVVVJRDogJXNcbiIKK21zZ3N0ciAiVVVJRCBhbGVhdG9yaW8gZ2VuZXJhZG86ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kICVkIHN1YnNlcXVlbnQgVVVJRHNcbiIKK21zZ3N0clswXSAiVVVJRCBjb24gaG9yYSBnZW5lcmFkbyAlcyB5IGVsIFVVSUQgc2lndWllbnRlXG4iCittc2dzdHJbMV0gIlVVSUQgY29uIGhvcmEgZ2VuZXJhZG8gJXMgeSBsb3MgJWQgVVVJRHMgc2lndWllbnRlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCAlZCBVVUlEJ3M6XG4iCittc2dzdHIgIiVkIFVVSURzIGdlbmVyYWRvczpcbiIKKworIzogbWlzYy91dWlkZC5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiAlZFxuIgorbXNnc3RyICJPcGVyYWNpw7NuIG5vIHbDoWxpZGEgJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjQ3NyBtaXNjL3V1aWRkLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXI6ICVzXG4iCittc2dzdHIgIk7Dum1lcm8gaW5jb3JyZWN0bzogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjUzNCBtaXNjL3V1aWRkLmM6NTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNhbGxpbmcgdXVpZGQgZGFlbW9uICglcyk6ICVzXG4iCittc2dzdHIgIkVycm9yIGFsIGludm9jYXIgYWwgZGVtb25pbyB1dWlkZCAoJXMpOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFuZCBzdWJzZXF1ZW50IFVVSURcbiIKK21zZ2lkX3BsdXJhbCAiJXMgYW5kIHN1YnNlcXVlbnQgJWQgVVVJRHNcbiIKK21zZ3N0clswXSAiJXMgeSBlbCBVVUlEIHNpZ3VpZW50ZVxuIgorbXNnc3RyWzFdICIlcyB5IGxvcyAlZCBVVUlEcyBzaWd1aWVudGVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NDgKK21zZ2lkICJMaXN0IG9mIFVVSUQnczpcbiIKK21zZ3N0ciAiTGlzdGEgZGUgVVVJRHM6XG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCByZXBseSBsZW5ndGggZnJvbSBzZXJ2ZXIgJWRcbiIKK21zZ3N0ciAiTG9uZ2l0dWQgZGUgcmVzcHVlc3RhIGRlbCBzZXJ2aWRvciBpbmVzcGVyYWRhICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qga2lsbCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZDogJXNcbiIKK21zZ3N0ciAiTm8gc2UgaGEgcG9kaWRvIG1hdGFyIHV1aWRkIHF1ZSBjb3JyZSBjb24gcGlkICVkOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIktpbGxlZCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZFxuIgorbXNnc3RyICJTZSBoYSBtYXRhZG8gdXVpZGQgcXVlIGNvcnLDrWEgY29uIHBpZCAlZFxuIgorCisjOiBtaXNjL3V1aWRnZW4uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1yXSBbLXRdXG4iCittc2dzdHIgIk1vZG8gZGUgZW1wbGVvOiAlcyBbLXJdIFstdF1cbiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMgorbXNnaWQgIiMgRXh0ZW50IGR1bXA6XG4iCittc2dzdHIgIiMgVmFjaWFkbyBleHRlbnNvOlxuIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiNcdE51bT0lbGx1LCBTaXplPSVsbHUsIEN1cnNvcj0lbGx1LCBTb3J0ZWQ9JWxsdVxuIgorbXNnc3RyICIjXHROw7ptPSVsbHUsIFRhbWHDsW89JWxsdSwgQ3Vyc29yPSVsbHUsIE9yZGVuYWRvPSVsbHVcbiIKKworIzogcmVzaXplL21haW4uYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstZCBkZWJ1Z19mbGFnc10gWy1mXSBbLUZdIFstTV0gWy1QXSBbLXBdIGRldmljZSBbbmV3X3NpemVdXG4iCisiXG4iCittc2dzdHIgIiIKKyJNb2RvIGRlIGVtcGxlbzogJXMgWy1kIGJhbmRlcmFzX2RlX2RlcHVyYWNpw7NuXSBbLWZdIFstRl0gWy1NXSBbLVBdIFstcF0gIgorImRpc3Bvc2l0aXZvIFtudWV2by10YW1hw7FvXVxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjY2Cittc2dpZCAiRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiRXh0ZW5kaWVuZG8gbGEgdGFibGEgZGUgbm9kb3MtaSIKKworIzogcmVzaXplL21haW4uYzo2OQorbXNnaWQgIlJlbG9jYXRpbmcgYmxvY2tzIgorbXNnc3RyICJSZXViaWNhbmRvIGJsb3F1ZXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzIKK21zZ2lkICJTY2FubmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiUmV2aXNhbmRvIGxhIHRhYmxhIGRlIG5vZG9zLWkiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzUKK21zZ2lkICJVcGRhdGluZyBpbm9kZSByZWZlcmVuY2VzIgorbXNnc3RyICJBY3R1YWxpemFuZG8gbGFzIHJlZmVyZW5jaWFzIGEgbG9zIG5vZG9zLWkiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzgKK21zZ2lkICJNb3ZpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIk1vdmllbmRvIGxhIHRhYmxhIGRlIG5vZG9zLWkiCisKKyM6IHJlc2l6ZS9tYWluLmM6ODEKK21zZ2lkICJVbmtub3duIHBhc3M/IT8iCittc2dzdHIgIsK/wqHCv1Bhc28gZGVzY29ub2NpZG8/IT8iCisKKyM6IHJlc2l6ZS9tYWluLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVnaW4gcGFzcyAlZCAobWF4ID0gJWx1KVxuIgorbXNnc3RyICJTZSBjb21pZW56YSBlbCBwYXNvICVkIChtw6F4ID0gJWx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjE1NQorbXNnaWQgIiIKKyJcbiIKKyJSZXNpemluZyBiaWdhbGxvYyBmaWxlIHN5c3RlbXMgaGFzIG5vdCBiZWVuIGZ1bGx5IHRlc3RlZC4gIFByb2NlZWQgYXRcbiIKKyJ5b3VyIG93biByaXNrISAgVXNlIHRoZSBmb3JjZSBvcHRpb24gaWYgeW91IHdhbnQgdG8gZ28gYWhlYWQgYW55d2F5LlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiTm8gZXN0w6EgdG90YWxtZW50ZSBwcm9iYWRhIGxhIGZ1bmNpw7NuIGRlIGNhbWJpbyBkZSB0YW1hw7FvIGRlIGxvcyBzaXN0ZW1hcyBkZSAiCisiZmljaGVyb3MgwqtiaWdhbGxvY8K7LiDCoVByb3NpZ2FcbiIKKyJiYWpvIHN1IGN1ZW50YSB5IHJpZXNnbyEgIFV0aWxpY2UgbGEgb3BjacOzbiDCq2ZvcmNlwrsgc2kgZGVzZWEgc2VndWlyIGFkZWxhbnRlICIKKyJkZSB0b2RvcyBtb2Rvcy5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyIKK21zZ3N0ciAibWllbnRyYXMgc2UgYWJyw61hICVzIgorCisjOiByZXNpemUvbWFpbi5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIHN0YXQgaW5mb3JtYXRpb24gZm9yICVzIgorbXNnc3RyICJtaWVudHJhcyBzZSBlc3RhYmEgb2J0ZW5pZW5kbyBpbmZvcm1hY2nDs24gZGVsIGVzdGFkbyBkZSAlcyIKKworIzogcmVzaXplL21haW4uYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZiAlcycgZmlyc3QuXG4iCisiXG4iCittc2dzdHIgIiIKKyJQb3IgZmF2b3IgZWplY3V0ZSBhbnRlcyAnZTJmc2NrIC1mICVzJy5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXN0aW1hdGVkIG1pbmltdW0gc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbTogJWxsdVxuIgorbXNnc3RyICJUYW1hw7FvIG3DrW5pbW8gZXN0aW1hZG8gZGVsIHNpc3RlbWEgZGUgZmljaGVyb3M6ICVsbHVcbiIKKworIzogcmVzaXplL21haW4uYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBuZXcgc2l6ZTogJXNcbiIKK21zZ3N0ciAiRWwgbnVldm8gdGFtYcOxbyBubyBlcyB2w6FsaWRvOiAlc1xuIgorCisjOiByZXNpemUvbWFpbi5jOjQyMQorbXNnaWQgIk5ldyBzaXplIHRvbyBsYXJnZSB0byBiZSBleHByZXNzZWQgaW4gMzIgYml0c1xuIgorbXNnc3RyICJFbCBudWV2byB0YW1hw7FvIGVzIGRlbWFzaWFkbyBncmFuZGUgcGFyYSBwb2RlciBleHByZXNhcnNlIGVuIDMyIGJpdHNcbiIKKworIzogcmVzaXplL21haW4uYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV3IHNpemUgc21hbGxlciB0aGFuIG1pbmltdW0gKCVsbHUpXG4iCittc2dzdHIgIkVsIG51ZXZvIHRhbWHDsW8gZXMgbWVub3IgcXVlIGVsIG3DrW5pbW8gKCVsbHUpXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDM1Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgbGVuZ3RoIgorbXNnc3RyICJMb25naXR1ZCBkZSDCq3N0cmlkZcK7IG5vIHbDoWxpZGEiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29udGFpbmluZyBwYXJ0aXRpb24gKG9yIGRldmljZSkgaXMgb25seSAlbGx1ICglZGspIGJsb2Nrcy5cbiIKKyJZb3UgcmVxdWVzdGVkIGEgbmV3IHNpemUgb2YgJWxsdSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJMYSBwYXJ0aWNpw7NuIGNvbnRlbmlkYSAobyBlbCBkaXNwb3NpdGl2bykgc8OzbG8gdGllbmUgJWxsdSAoJWRrKSBibG9xdWVzLlxuIgorIlkgc2UgaGEgc29saWNpdGFkbyB1biBudWV2byB0YW1hw7FvIGRlICVsbHUgYmxvcXVlcy5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIGlzIGFscmVhZHkgJWxsdSAoJWRrKSBibG9ja3MgbG9uZy4gIE5vdGhpbmcgdG8gZG8hXG4iCisiXG4iCittc2dzdHIgIiIKKyJFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIHlhIHRpZW5lICVsbHUgYmxvcXVlcyAoJWRrKSBkZSBsb25naXR1ZC4gwqFObyBoYXkgcXVlICIKKyJoYWNlciBuYWRhIVxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorIkNhbWJpYW5kbyBlbCB0YW1hw7FvIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGVuICVzIGEgJWxsdSAoJWRrKSBibG9xdWVzLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcmVzaXplICVzIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgbW9kaWZpY2FyIGVsIHRhbWHDsW8gJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWZ5ICVzJyB0byBmaXggdGhlIGZpbGVzeXN0ZW1cbiIKKyJhZnRlciB0aGUgYWJvcnRlZCByZXNpemUgb3BlcmF0aW9uLlxuIgorbXNnc3RyICIiCisiUG9yIGZhdm9yLCBlamVjdXRlICdlMmZzY2sgLWZ5ICVzJyBwYXJhIGFycmVnbGFyIGVsIHNpc3RlbWEgZGUgZmljaGVyb3NcbiIKKyJkZXNwdcOpcyBkZSBsYSBvcGVyYWNpw7NuIGRlIGNhbWJpbyBkZSB0YW1hw7FvIGludGVycnVtcGlkYS5cbiIKKworIzogcmVzaXplL21haW4uYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIG9uICVzIGlzIG5vdyAlbGx1ICglZGspIGJsb2NrcyBsb25nLlxuIgorIlxuIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBlbiAlcyB0aWVuZSBhaG9yYSAlbGx1IGJsb3F1ZXMgKGRlICVkaykuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byB0cnVuY2F0ZSAlcyIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW50ZW50YWJhIHRydW5jYXIgJXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4MgorbXNnaWQgImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemUgd2l0aCBzcGFyc2Vfc3VwZXIyIgorbXNnc3RyICJlbCBuw7pjbGVvIG5vIHBlcm1pdGUgY2FtYmlhciBlbCB0YW1hw7FvIGVuIGzDrW5lYSBjb24gc3BhcnNlX3N1cGVyMiIKKworIzogcmVzaXplL29ubGluZS5jOjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlczsgb24tbGluZSByZXNpemluZyByZXF1aXJlZFxuIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBkZSAlcyBlc3TDoSBtb250YWRvIGVuICVzOyBoYWNlIGZhbHRhIGNhbWJpYXIgZWwgIgorInRhbWHDsW8gZW4gbMOtbmVhXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo5MQorbXNnaWQgIk9uLWxpbmUgc2hyaW5raW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkxhIHJlZHVjY2nDs24gZGUgdGFtYcOxbyBlbiBsw61uZWEgbm8gZXN0w6EgaW1wbGVtZW50YWRhIgorCisjOiByZXNpemUvb25saW5lLmM6MTE2Cittc2dpZCAiRmlsZXN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBubyBwZXJtaXRlIGNhbWJpYXIgZWwgdGFtYcOxbyBlbiBsw61uZWEiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMjUKK21zZ2lkICJOb3QgZW5vdWdoIHJlc2VydmVkIGdkdCBibG9ja3MgZm9yIHJlc2l6aW5nIgorbXNnc3RyICJObyBzZSBoYW4gcmVzZXJ2YWRvIHN1ZmljaWVudGVzIGJsb3F1ZXMgZ2R0IHBhcmEgY2FtYmlhciBlbCB0YW1hw7FvIgorCisjOiByZXNpemUvb25saW5lLmM6MTMyCittc2dpZCAiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcmVzaXppbmcgYSBmaWxlIHN5c3RlbSB0aGlzIGxhcmdlIgorbXNnc3RyICIiCisiRWwgbsO6Y2xlbyBubyBwZXJtaXRlIGNhbWJpYXIgZWwgdGFtYcOxbyBkZSB1biBzaXN0ZW1hIGRlIGZpY2hlcm9zIHRhbiBncmFuZGUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gbW91bnRwb2ludCAlcyIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW50ZW50YWJhIGFicmlyIGVsIHB1bnRvIGRlIG1vbnRhamUgJXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2xkIHJlc2l6ZSBpbnRlcmZhY2UgcmVxdWVzdGVkLlxuIgorbXNnc3RyICJTZSBoYSBzb2xpY2l0YWRvIGVsIGludGVyZmF6IGRlIGNhbWJpbyBkZSB0YW1hw7FvIGFudGlndW8uXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNjQgcmVzaXplL29ubGluZS5jOjE4MQorbXNnaWQgIlBlcm1pc3Npb24gZGVuaWVkIHRvIHJlc2l6ZSBmaWxlc3lzdGVtIgorbXNnc3RyICJQZXJtaXNvIHBhcmEgY2FtYmlhciBlbCB0YW1hw7FvIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGRlbmVnYWRvIgorCisjOiByZXNpemUvb25saW5lLmM6MTY3IHJlc2l6ZS9vbmxpbmUuYzoxODcKK21zZ2lkICJXaGlsZSBjaGVja2luZyBmb3Igb24tbGluZSByZXNpemluZyBzdXBwb3J0IgorbXNnc3RyICJNaWVudHJhcyBzZSBjb21wcm9iYWJhIGVsIHNvcG9ydGUgZGUgY2FtYmlvIGRlIHRhbWHDsW8gZW4gbMOtbmVhIgorCisjOiByZXNpemUvb25saW5lLmM6MTg0Cittc2dpZCAiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICJFbCBuw7pjbGVvIG5vIHBlcm1pdGUgY2FtYmlhciBlbCB0YW1hw7FvIGVuIGzDrW5lYSIKKworIzogcmVzaXplL29ubGluZS5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICJQZXJmb3JtaW5nIGFuIG9uLWxpbmUgcmVzaXplIG9mICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICJSZWFsaXphbmRvIGNhbWJpbyBkZSB0YW1hw7FvIGVuIGzDrW5lYSBkZSAlcyBhICVsbHUgKCVkaykgYmxvcXVlcy5cbiIKKworIzogcmVzaXplL29ubGluZS5jOjIzMworbXNnaWQgIldoaWxlIHRyeWluZyB0byBleHRlbmQgdGhlIGxhc3QgZ3JvdXAiCittc2dzdHIgIm1pZW50cmFzIHNlIGludGVudGFiYSBleHRlbmRlciBlbCDDumx0aW1vIGdydXBvIgorCisjOiByZXNpemUvb25saW5lLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHRyeWluZyB0byBhZGQgZ3JvdXAgIyVkIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgYcOxYWRpciBlbCBncnVwbyAjJWQiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlcywgYW5kIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IHN1cHBvcnRlZCBvbiAiCisidGhpcyBzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGRlICVzIGVzdMOhIG1vbnRhZG8gZW4gJXMsIHBlcm8gZWwgY2FtYmlvIGRlIHRhbWHDsW8gZW4gIgorImzDrW5lYSBubyBlc3TDoSBpbXBsZW1lbnRhZG8gZW4gZXN0ZSBzaXN0ZW1hLlxuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgImlub2RlcyAoJWxsdSkgbXVzdCBiZSBsZXNzIHRoYW4gJXUiCittc2dzdHIgImxvcyBub2Rvcy1pICglbGx1KSBkZWJlbiBzZXIgbWVub3MgZGUgJXUiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo2OTEKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MiCittc2dzdHIgImJsb3F1ZXMgcmVzZXJ2YWRvcyIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjkzNgorbXNnaWQgIm1ldGEtZGF0YSBibG9ja3MiCittc2dzdHIgImJsb3F1ZXMgZGUgbWV0YWRhdG9zIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MTAzOSByZXNpemUvcmVzaXplMmZzLmM6MTgzNgorbXNnaWQgIm5ldyBtZXRhIGJsb2NrcyIKK21zZ3N0ciAibnVldm9zIGJsb3F1ZXMgZGUgbWV0YWRhdG9zIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjA1NgorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW4hICBObyBzYiBpbiBsYXN0IHN1cGVyX3NwYXJzZSBiZz9cbiIKK21zZ3N0ciAiIgorIsKhTnVuY2EgZGViZXLDrWEgc3VjZWRlciEgIMK/Tm8gaGF5IG5pbmfDum4gc2IgZW4gZWwgw7psdGltbyBiZyBzdXBlcl9zcGFyc2U/XG4iCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMDYxCittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbiEgIFVuZXhwZWN0ZWQgb2xkX2Rlc2MgaW4gc3VwZXJfc3BhcnNlIGJnP1xuIgorbXNnc3RyICLCoU51bmNhIGRlYmVyw61hIHN1Y2VkZXIhICDCv29sZF9kZXNjIGluZXNwZXJhZGEgZW4gZWwgYmcgc3VwZXJfc3BhcnNlP1xuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjEzOQorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW46IHJlc2l6ZSBpbm9kZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiRXN0byBudW5jYSBkZWJlcsOtYSBzdWNlZGVyOiDCoVNlIGNhbWJpYSBlbCB0YW1hw7FvIGRlbCBub2RvLWkgY29ycnVwdG8hXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMQorIywgZnV6enkKK21zZ2lkICJFWFQyRlMgTGlicmFyeSB2ZXJzaW9uIDEuNDIuMTMiCittc2dzdHIgIkJpYmxpb3RlY2EgRVhUMkZTIHZlcnNpw7NuIDEuNDIuMTIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0Ml9maWxzeXMgc3RydWN0dXJlIgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byBwYXJhIGxhIGVzdHJ1Y3R1cmEgZXh0Ml9maWxzeXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byBwYXJhIGxhIGVzdHJ1Y3R1cmEgYmFkYmxvY2tzX2xpc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byBwYXJhIGxhIGVzdHJ1Y3R1cmEgYmFkYmxvY2tzX2l0ZXJhdGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfc2NhbiBzdHJ1Y3R1cmUiCittc2dzdHIgIk7Dum1lcm8gbcOhZ2ljbyBpbmNvcnJlY3RvIHBhcmEgbGEgZXN0cnVjdHVyYSBpbm9kZV9zY2FuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byBwYXJhIGxhIGVzdHJ1Y3R1cmEgaW9fY2hhbm5lbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB1bml4IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byBwYXJhIGxhIGVzdHJ1Y3R1cmEgaW9fY2hhbm5lbCB1bml4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX21hbmFnZXIgc3RydWN0dXJlIgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byBwYXJhIGxhIGVzdHJ1Y3R1cmEgaW9fbWFuYWdlciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBibG9ja19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byBwYXJhIGxhIGVzdHJ1Y3R1cmEgYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIk7Dum1lcm8gbcOhZ2ljbyBpbmNvcnJlY3RvIHBhcmEgbGEgZXN0cnVjdHVyYSBpbm9kZV9iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZ2VuZXJpY19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byBwYXJhIGxhIGVzdHJ1Y3R1cmEgZ2VuZXJpY19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdGVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiTsO6bWVybyBtw6FnaWNvIGluY29ycmVjdG8gcGFyYSBsYSBlc3RydWN0dXJhIGlvX2NoYW5uZWwgZGUgdGVzdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBkaXJlY3RvcnkgYmxvY2sgbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKyJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byBwYXJhIGxhIGVzdHJ1Y3R1cmEgZGUgbGlzdGEgZGUgYmxvcXVlIGRlIGRpcmVjdG9yaW8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaWNvdW50IHN0cnVjdHVyZSIKK21zZ3N0ciAiTsO6bWVybyBtw6FnaWNvIGluY29ycmVjdG8gcGFyYSBsYSBlc3RydWN0dXJhIGljb3VudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBQb3dlcnF1ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byBwYXJhIGxhIGVzdHJ1Y3R1cmEgaW9fY2hhbm5lbCBQb3dlcnF1ZXN0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDIgZmlsZSBzdHJ1Y3R1cmUiCittc2dzdHIgIk7Dum1lcm8gbcOhZ2ljbyBpbmNvcnJlY3RvIHBhcmEgbGEgZXN0cnVjdHVyYSBkZSBmaWNoZXJvcyBleHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIEV4dDIgSW1hZ2UgSGVhZGVyIgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byBwYXJhIGxhIGNhYmVjZXJhIGRlIGltYWdlbiBFeHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byBwYXJhIGxhIGVzdHJ1Y3R1cmEgaW9fY2hhbm5lbCBkZSBub2RvLWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgaGFuZGxlIgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byBwYXJhIGVsIG1hbmVqYWRvciBkZSDCq2V4dGVudMK7IGV4dDQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyBudW1iZXIgaW4gc3VwZXItYmxvY2siCittc2dzdHIgIk7Dum1lcm8gbcOhZ2ljbyBpbmNvcnJlY3RvIGVuIGVsIHN1cGVyYmxvcXVlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzEKK21zZ2lkICJGaWxlc3lzdGVtIHJldmlzaW9uIHRvbyBoaWdoIgorbXNnc3RyICJSZXZpc2nDs24gZGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgZGVtYXNpYWRvIGFsdGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMgorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgdG8gZmlsZXN5c3RlbSBvcGVuZWQgcmVhZC1vbmx5IgorbXNnc3RyICJJbnRlbnRvIGRlIGVzY3JpYmlyIGVuIHVuIHNpc3RlbWEgZGUgZmljaGVyb3MgZGUgc29sbyBsZWN0dXJhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzMKK21zZ2lkICJDYW4ndCByZWFkIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICJObyBzZSBwdWVkZW4gbGVlciBsb3MgZGVzY3JpcHRvcmVzIGRlIGdydXBvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzQKK21zZ2lkICJDYW4ndCB3cml0ZSBncm91cCBkZXNjcmlwdG9ycyIKK21zZ3N0ciAiTm8gc2UgcHVlZGVuIGVzY3JpYmlyIGxvcyBkZXNjcmlwdG9yZXMgZGUgZ3J1cG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNQorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKyJEZXNjcmlwdG9yIGRlIGdydXBvIGNvcnJ1cHRvOiBibG9xdWUgaW5jb3JyZWN0byBwYXJhIGVsIG1hcGEgZGUgYml0cyBkZSAiCisiYmxvcXVlcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM2Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiIgorIkRlc2NyaXB0b3IgZGUgZ3J1cG8gY29ycnVwdG86IGJsb3F1ZSBpbmNvcnJlY3RvIHBhcmEgZWwgbWFwYSBkZSBiaXRzIGRlICIKKyJub2Rvcy1pIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzcKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKyJEZXNjcmlwdG9yIGRlIGdydXBvIGNvcnJ1cHRvOiBibG9xdWUgaW5jb3JyZWN0byBwYXJhIGxhIHRhYmxhIGRlIG5vZG9zLWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOAorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiTm8gc2UgaGEgcG9kaWRvIGVzY3JpYmlyIHVuIG1hcGEgZGUgYml0cyBkZSBub2Rvcy1pIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiTm8gc2UgaGEgcG9kaWRvIGxlZXIgdW4gbWFwYSBkZSBiaXRzIGRlIG5vZG9zLWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MAorbXNnaWQgIkNhbid0IHdyaXRlIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICJObyBzZSBoYSBwb2RpZG8gZXNjcmliaXIgdW4gbWFwYSBkZSBiaXRzIGRlIGJsb3F1ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQxCittc2dpZCAiQ2FuJ3QgcmVhZCBhIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiTm8gc2UgaGEgcG9kaWRvIGxlZXIgdW4gbWFwYSBkZSBiaXRzIGRlIGJsb3F1ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQyCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIk5vIHNlIGhhIHBvZGlkbyBlc2NyaWJpciB1bmEgdGFibGEgZGUgbm9kb3MtaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQzCittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiTm8gc2UgaGEgcG9kaWRvIGxlZXIgdW5hIHRhYmxhIGRlIG5vZG9zLWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NAorbXNnaWQgIkNhbid0IHJlYWQgbmV4dCBpbm9kZSIKK21zZ3N0ciAiTm8gc2UgaGEgcG9kaWRvIGxlZXIgZWwgc2lndWllbnRlIG5vZG8taSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ1Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5leHBlY3RlZCBibG9jayBzaXplIgorbXNnc3RyICJFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIHRpZW5lIHVuIHRhbWHDsW8gZGUgYmxvcXVlIGluZXNwZXJhZG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NgorbXNnaWQgIkVYVDIgZGlyZWN0b3J5IGNvcnJ1cHRlZCIKK21zZ3N0ciAiRGlyZWN0b3JpbyBFWFQyIGNvcnJ1cHRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDcKK21zZ2lkICJBdHRlbXB0IHRvIHJlYWQgYmxvY2sgZnJvbSBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHJlYWQiCittc2dzdHIgIiIKKyJFbCBpbnRlbnRvIGRlIGxlZXIgdW4gYmxvcXVlIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIHJlc3VsdMOzIGVuIHVuYSBsZWN0dXJhICIKKyJjb3J0YSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ4Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBibG9jayB0byBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHdyaXRlIgorbXNnc3RyICIiCisiRWwgaW50ZW50byBkZSBlc2NyaWJpciB1biBibG9xdWUgZW4gZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyByZXN1bHTDsyBlbiB1bmEgIgorImVzY3JpdHVyYSBjb3J0YSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ5Cittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiB0aGUgZGlyZWN0b3J5IgorbXNnc3RyICJObyBoYXkgZXNwYWNpbyBsaWJyZSBlbiBlbCBkaXJlY3RvcmlvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTAKK21zZ2lkICJJbm9kZSBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiTm8gZXN0w6EgY2FyZ2FkbyBlbCBtYXBhIGRlIGJpdHMgZGUgbm9kb3MtaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUxCittc2dpZCAiQmxvY2sgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgIk5vIGVzdMOhIGNhcmdhZG8gZWwgbWFwYSBkZSBiaXRzIGRlIGJsb3F1ZXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MgorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIgorbXNnc3RyICJOw7ptZXJvIGludsOhbGlkbyBkZSBub2RvLWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJOw7ptZXJvIGludsOhbGlkbyBkZSBibG9xdWUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NAorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIgorbXNnc3RyICJFcnJvciBpbnRlcm5vIGVuIGV4dDJmc19leHBhbmRfZGlyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTUKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGJ1aWxkIHByb3Bvc2VkIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKyJObyBoYXkgc3VmaWNpZW50ZSBlc3BhY2lvIHBhcmEgY29uc3RydWlyIGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgcHJvcHVlc3RvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTYKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICJTZSBoYSBwYXNhZG8gdW4gbsO6bWVybyBkZSBibG9xdWUgbm8gdsOhbGlkbyBhIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU3Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICIiCisiU2UgaGEgcGFzYWRvIHVuIG7Dum1lcm8gZGUgYmxvcXVlIG5vIHbDoWxpZG8gYSBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiU2UgaGEgcGFzYWRvIHVuIG7Dum1lcm8gZGUgYmxvcXVlIG5vIHbDoWxpZG8gYSBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIlNlIGhhIHBhc2FkbyB1biBuw7ptZXJvIGRlIG5vZG8taSBubyB2w6FsaWRvIGEgZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjAKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKyJTZSBoYSBwYXNhZG8gdW4gbsO6bWVybyBkZSBub2RvLWkgbm8gdsOhbGlkbyBhIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjEKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIgorbXNnc3RyICJTZSBoYSBwYXNhZG8gdW4gbsO6bWVybyBkZSBub2RvLWkgbm8gdsOhbGlkbyBhIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYyCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgYmxvY2sgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICIiCisiU2UgaGEgaW50ZW50YWRvIGVtcHVqYXIgZWwgZmluYWwgZGVsIG1hcGEgZGUgYml0cyBkZSBibG9xdWVzIG3DoXMgYWxsw6EgZGVsICIKKyJmaW5hbCByZWFsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjMKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBpbm9kZSBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIiIKKyJTZSBoYSBpbnRlbnRhZG8gZW1wdWphciBlbCBmaW5hbCBkZWwgbWFwYSBkZSBiaXRzIGRlIG5vZG9zLWkgbcOhcyBhbGzDoSBkZWwgIgorImZpbmFsIHJlYWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NAorbXNnaWQgIklsbGVnYWwgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIlNlIGhhIGVuY29udHJhZG8gdW4gYmxvcXVlIGluZGlyZWN0byBubyB2w6FsaWRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKK21zZ2lkICJJbGxlZ2FsIGRvdWJseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiU2UgaGEgZW5jb250cmFkbyB1biBibG9xdWUgZG9ibGVtZW50ZSBpbmRpcmVjdG8gbm8gdsOhbGlkbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY2Cittc2dpZCAiSWxsZWdhbCB0cmlwbHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIlNlIGhhIGVuY29udHJhZG8gdW4gYmxvcXVlIHRyaXBsZW1lbnRlIGluZGlyZWN0byBubyB2w6FsaWRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjcKK21zZ2lkICJCbG9jayBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIkxvcyBtYXBhcyBkZSBiaXRzIGRlIGJsb3F1ZXMgbm8gc29uIGlndWFsZXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OAorbXNnaWQgIklub2RlIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiTG9zIG1hcGFzIGRlIGJpdHMgZGUgbm9kb3MtaSBubyBzb24gaWd1YWxlcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY5Cittc2dpZCAiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiCittc2dzdHIgIk5vbWJyZSBkZSBkaXNwb3NpdGl2byBubyB2w6FsaWRvIG8gbWFsIGZvcm1hZG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MAorbXNnaWQgIkEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiQWwgZ3J1cG8gZGUgYmxvcXVlcyBsZSBmYWx0YSBsYSB0YWJsYSBkZSBub2Rvcy1pIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzEKK21zZ2lkICJUaGUgZXh0MiBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQiCittc2dzdHIgIkVsIHN1cGVyYmxvcXVlIGV4dDIgZXN0w6EgY29ycnVwdG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MgorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiIgorIkVsIG7Dum1lcm8gZGUgYml0IGdlbsOpcmljbyBwYXNhZG8gYSBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCBubyBlcyB2w6FsaWRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzMKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiIgorIkVsIG7Dum1lcm8gZGUgYml0IGdlbsOpcmljbyBwYXNhZG8gYSBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIG5vIGVzIHbDoWxpZG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NAorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiIgorIkVsIG7Dum1lcm8gZGUgYml0IGdlbsOpcmljbyBwYXNhZG8gYSBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCBubyBlcyB2w6FsaWRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzUKK21zZ2lkICJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIlNlIGhhbiBlbmNvbnRyYWRvIGRlbWFzaWFkb3MgZW5sYWNlcyBzaW1iw7NsaWNvcy4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NgorbXNnaWQgIlRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIG5vdCBoYW5kbGUgdGhpcyBjYXNlIgorbXNnc3RyICJMYSBmdW5jacOzbiBkZSByZXRyb2xsYW1hZGEgbm8gbWFuZWphcsOhIGVzdGUgY2FzbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc3Cittc2dpZCAiVGhlIGlub2RlIGlzIGZyb20gYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJFbCBub2RvLWkgcHJvY2VkZSBkZSB1biBibG9xdWUgaW5jb3JyZWN0byBlbiBsYSB0YWJsYSBkZSBub2Rvcy1pIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzgKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpIgorbXNnc3RyICJFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIHRpZW5lIGNhcmFjdGVyw61zdGljYShzKSBubyBzb3BvcnRhZGEocykiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIHJlYWQtb25seSBmZWF0dXJlKHMpIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyB0aWVuZSBjYXJhY3RlcsOtc3RpY2Eocykgbm8gc29wb3J0YWRhKHMpIGRlIHNvbG8gIgorImxlY3R1cmEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MAorbXNnaWQgIklPIENoYW5uZWwgZmFpbGVkIHRvIHNlZWsgb24gcmVhZCBvciB3cml0ZSIKK21zZ3N0ciAiRmFsbG8gZGUgYsO6c3F1ZWRhIGVuIGNhbmFsIEVTIGFsIGxlZXIgbyBlc2NyaWJpciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgxCittc2dpZCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICJGYWxsbyBlbiBsYSByZXNlcnZhIGRlIG1lbW9yaWEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSIKK21zZ3N0ciAiRWwgYXJndW1lbnRvIHBhc2FkbyBhIGxhIGJpYmxpb3RlY2EgZXh0MiBubyBlcyB2w6FsaWRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODMKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgYmxvY2sgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJObyBzZSBoYSBwb2RpZG8gcmVzZXJ2YXIgYmxvcXVlIGVuIGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgZXh0MiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg0Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGlub2RlIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiTm8gc2UgaGEgcG9kaWRvIHJlc2VydmFyIG5vZG8taSBlbiBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NQorbXNnaWQgIkV4dDIgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICJFbCBub2RvLWkgbm8gZXMgdW4gZGlyZWN0b3JpbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg2Cittc2dpZCAiVG9vIG1hbnkgcmVmZXJlbmNlcyBpbiB0YWJsZSIKK21zZ3N0ciAiRGVtYXNpYWRhcyByZWZlcmVuY2lhcyBlbiBsYSB0YWJsYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg3Cittc2dpZCAiRmlsZSBub3QgZm91bmQgYnkgZXh0Ml9sb29rdXAiCittc2dzdHIgImV4dDJfbG9va3VwIG5vIGhhIGVuY29udHJhZG8gZWwgZmljaGVybyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg4Cittc2dpZCAiRmlsZSBvcGVuIHJlYWQtb25seSIKK21zZ3N0ciAiRmljaGVybyBhYmllcnRvIHNvbG8gcGFyYSBsZWN0dXJhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODkKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCittc2dzdHIgIkJsb3F1ZSBkZSBkaXJlY3RvcmlvIG5vIGVuY29udHJhZG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MAorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFbCBkaXJlY3RvcmlvIHlhIGV4aXN0ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkxCittc2dpZCAiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iCittc2dzdHIgIkZ1bmNpw7NuIGRlIGJpYmxpb3RlY2EgZXh0MiBubyBpbXBsZW1lbnRhZGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MgorbXNnaWQgIlVzZXIgY2FuY2VsIHJlcXVlc3RlZCIKK21zZ3N0ciAiRWwgdXN1YXJpbyBoYSBzb2xpY2l0YWRvIGNhbmNlbGFyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTMKK21zZ2lkICJFeHQyIGZpbGUgdG9vIGJpZyIKK21zZ3N0ciAiRmljaGVybyBkZW1hc2lhZG8gZ3JhbmRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTQKK21zZ2lkICJTdXBwbGllZCBqb3VybmFsIGRldmljZSBub3QgYSBibG9jayBkZXZpY2UiCittc2dzdHIgIiIKKyJFbCBkaXNwb3NpdGl2byBkZSBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgc3VtaW5pc3RyYWRvIG5vIGVzIHVuIGRpc3Bvc2l0aXZvICIKKyJkZSBibG9xdWVzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTUKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIgorbXNnc3RyICJObyBzZSBlbmNvbnRyw7MgZWwgc3VwZXJibG9xdWUgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk2Cittc2dpZCAiSm91cm5hbCBtdXN0IGJlIGF0IGxlYXN0IDEwMjQgYmxvY2tzIgorbXNnc3RyICJFbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgZGViZSB0ZW5lciBhbCBtZW5vcyAxMDI0IGJsb3F1ZXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NworbXNnaWQgIlVuc3VwcG9ydGVkIGpvdXJuYWwgdmVyc2lvbiIKK21zZ3N0ciAiVmVyc2nDs24gZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBubyBzb3BvcnRhZGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAiRXJyb3IgbWllbnRyYXMgc2UgaW50ZW50YWJhIGNhcmdhciBlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgZXh0ZXJubyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk5Cittc2dpZCAiSm91cm5hbCBub3QgZm91bmQiCittc2dzdHIgIk5vIHNlIGVuY29udHLDsyBlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDAKK21zZ2lkICJEaXJlY3RvcnkgaGFzaCB1bnN1cHBvcnRlZCIKK21zZ3N0ciAiwqtIYXNowrsgZGUgZGlyZWN0b3JpbyBubyBzb3BvcnRhZG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDEKK21zZ2lkICJJbGxlZ2FsIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBudW1iZXIiCittc2dzdHIgIkVsIG7Dum1lcm8gZGUgYmxvcXVlIGRlIGF0cmlidXRvIGV4dGVuZGlkbyBubyBlcyB2w6FsaWRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAyCittc2dpZCAiQ2Fubm90IGNyZWF0ZSBmaWxlc3lzdGVtIHdpdGggcmVxdWVzdGVkIG51bWJlciBvZiBpbm9kZXMiCittc2dzdHIgIiIKKyJObyBzZSBoYSBwb2RpZG8gY3JlYXIgZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBjb24gZWwgbsO6bWVybyBkZSBub2Rvcy1pICIKKyJzb2xpY2l0YWRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAzCittc2dpZCAiRTJpbWFnZSBzbmFwc2hvdCBub3QgaW4gdXNlIgorbXNnc3RyICJMYSBpbnN0YW50w6FuZWEgRTJpbWFnZSBubyBlc3TDoSBlbiB1c28iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDQKK21zZ2lkICJUb28gbWFueSByZXNlcnZlZCBncm91cCBkZXNjcmlwdG9yIGJsb2NrcyIKK21zZ3N0ciAiRGVtYXNpYWRvcyBibG9xdWVzIGRlIGRlc2NyaXB0b3JlcyBkZSBncnVwbyByZXNlcnZhZG9zIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA1Cittc2dpZCAiUmVzaXplIGlub2RlIGlzIGNvcnJ1cHQiCittc2dzdHIgIkVsIG5vZG8taSBkZSBjYW1iaW8gZGUgdGFtYcOxbyBlc3TDoSBjb3JydXB0byIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNgorbXNnaWQgIlRyaWVkIHRvIHNldCBibG9jayBibWFwIHdpdGggbWlzc2luZyBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiU2UgaGEgaW50ZW50YWRvIHBvbmVyIHVuIGJtYXAgZGUgYmxvcXVlIGNvbiBibG9xdWUgaW5kaXJlY3RvIHBlcmRpZG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDcKK21zZ2lkICJUREI6IFN1Y2Nlc3MiCittc2dzdHIgIlREQjogQmllbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOAorbXNnaWQgIlREQjogQ29ycnVwdCBkYXRhYmFzZSIKK21zZ3N0ciAiVERCOiBCYXNlIGRlIGRhdG9zIGNvcnJ1cHRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA5Cittc2dpZCAiVERCOiBJTyBFcnJvciIKK21zZ3N0ciAiVERCOiBFcnJvciBkZSBFUyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMAorbXNnaWQgIlREQjogTG9ja2luZyBlcnJvciIKK21zZ3N0ciAiVERCOiBFcnJvciBkZSBibG9xdWVvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTExCittc2dpZCAiVERCOiBPdXQgb2YgbWVtb3J5IgorbXNnc3RyICJUREI6IE5vIGhheSBtw6FzIG1lbW9yaWEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTIKK21zZ2lkICJUREI6IFJlY29yZCBleGlzdHMiCittc2dzdHIgIlREQjogWWEgZXhpc3RlIGVsIHJlZ2lzdHJvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEzCittc2dpZCAiVERCOiBMb2NrIGV4aXN0cyBvbiBvdGhlciBrZXlzIgorbXNnc3RyICJUREI6IFlhIGV4aXN0ZSBlbCBibG9xdWVvIGVuIG90cmFzIGxsYXZlcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNAorbXNnaWQgIlREQjogSW52YWxpZCBwYXJhbWV0ZXIiCittc2dzdHIgIlREQjogUGFyw6FtZXRybyBubyB2w6FsaWRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE1Cittc2dpZCAiVERCOiBSZWNvcmQgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIlREQjogTm8gZXhpc3RlIGVsIHJlZ2lzdHJvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE2Cittc2dpZCAiVERCOiBXcml0ZSBub3QgcGVybWl0dGVkIgorbXNnc3RyICJUREI6IE5vIGVzdMOhIHBlcm1pdGlkbyBlc2NyaWJpciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNworbXNnaWQgIkV4dDJmcyBkaXJlY3RvcnkgYmxvY2sgbGlzdCBpcyBlbXB0eSIKK21zZ3N0ciAiTGEgbGlzdGEgZGUgYmxvcXVlcyBkZWwgZGlyZWN0b3JpbyBleHQyZnMgZXN0w6EgdmFjw61hIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE4Cittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgYSBibG9jayBtYXBwaW5nIHZpYSBhIHJlYWQtb25seSBibG9jayBpdGVyYXRvciIKK21zZ3N0ciAiIgorIkludGVudG8gZGUgbW9kaWZpY2FyIHVuYSBhc29jaWFjacOzbiBkZSBibG9xdWVzIG1lZGlhbnRlIHVuIGl0ZXJhZG9yIGRlICIKKyJibG9xdWVzIGRlIHNvbG8gbGVjdHVyYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgc2F2ZWQgcGF0aCIKK21zZ3N0ciAiTsO6bWVybyBtw6FnaWNvIGluY29ycmVjdG8gcGFyYSBsYSBydXRhIMKrZXh0ZW50wrsgZXh0NCBndWFyZGFkYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGdlbmVyaWMgYml0bWFwIgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byBwYXJhIGVsIGJpdG1hcCBnZW7DqXJpY28gZGUgNjQgYml0cyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiTsO6bWVybyBtw6FnaWNvIGluY29ycmVjdG8gcGFyYSBlbCBiaXRtYXAgZGUgYmxvcXVlcyBkZSA2NCBiaXRzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgaW5vZGUgYml0bWFwIgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byBwYXJhIGVsIGJpdG1hcCBkZSBub2Rvcy1pIGRlIDY0LWJpdHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzEzIgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byAtLS0gUkVTRVJWQURPXzEzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNCIKK21zZ3N0ciAiTsO6bWVybyBtw6FnaWNvIGluY29ycmVjdG8gLS0tIFJFU0VSVkFET18xNCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTUiCittc2dzdHIgIk7Dum1lcm8gbcOhZ2ljbyBpbmNvcnJlY3RvIC0tLSBSRVNFUlZBRE9fMTUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE2IgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byAtLS0gUkVTRVJWQURPXzE2IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNyIKK21zZ3N0ciAiTsO6bWVybyBtw6FnaWNvIGluY29ycmVjdG8gLS0tIFJFU0VSVkFET18xNyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTgiCittc2dzdHIgIk7Dum1lcm8gbcOhZ2ljbyBpbmNvcnJlY3RvIC0tLSBSRVNFUlZBRE9fMTgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE5IgorbXNnc3RyICJOw7ptZXJvIG3DoWdpY28gaW5jb3JyZWN0byAtLS0gUkVTRVJWQURPXzE5IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMwCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaGVhZGVyIgorbXNnc3RyICJDYWJlY2VyYSBkZSDCq2V4dGVudMK7IGNvcnJ1cHRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMxCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaW5kZXgiCittc2dzdHIgIsONbmRpY2UgZGUgwqtleHRlbnTCuyBjb3JydXB0byIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMgorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IgorbXNnc3RyICLCq0V4dGVudMK7IGNvcnJ1cHRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMzCittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiBleHRlbnQgbWFwIgorbXNnc3RyICJObyBxdWVkYSBlc3BhY2lvIGxpYnJlIGVsIGVsIG1hcGEgZGUgwqtleHRlbnTCuyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNAorbXNnaWQgIklub2RlIGRvZXMgbm90IHVzZSBleHRlbnRzIgorbXNnc3RyICJFbCBub2RvLWkgbm8gdXRpbGl6YSDCq2V4dGVudHPCuyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNQorbXNnaWQgIk5vICduZXh0JyBleHRlbnQiCittc2dzdHIgIk5vIGhheSDCq2V4dGVudMK7ICduZXh0JyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNgorbXNnaWQgIk5vICdwcmV2aW91cycgZXh0ZW50IgorbXNnc3RyICJObyBoYXkgwqtleHRlbnTCuyAncHJldmlvdXMnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM3Cittc2dpZCAiTm8gJ3VwJyBleHRlbnQiCittc2dzdHIgIk5vIGhheSDCq2V4dGVudMK7ICd1cCciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzgKK21zZ2lkICJObyAnZG93bicgZXh0ZW50IgorbXNnc3RyICJObyBoYXkgwqtleHRlbnTCuyAnZG93biciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzkKK21zZ2lkICJObyBjdXJyZW50IG5vZGUiCittc2dzdHIgIk5vIGhheSBub2RvIGFjdHVhbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MAorbXNnaWQgIkV4dDJmcyBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTGEgb3BlcmFjacOzbiBleHQyZnMgbm8gZXN0w6EgaW1wbGVtZW50YWRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQxCittc2dpZCAiTm8gcm9vbSB0byBpbnNlcnQgZXh0ZW50IGluIG5vZGUiCittc2dzdHIgIk5vIGhheSBzaXRpbyBwYXJhIGluc2VydGFyIMKrZXh0ZW50wrsgZW4gZWwgbm9kby1pIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQyCittc2dpZCAiU3BsaXR0aW5nIHdvdWxkIHJlc3VsdCBpbiBlbXB0eSBub2RlIgorbXNnc3RyICJMYSBkaXZpc2nDs24gZGFyw61hIGx1Z2FyIGEgdW4gbm9kbyB2YWPDrW8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDMKK21zZ2lkICJFeHRlbnQgbm90IGZvdW5kIgorbXNnc3RyICJObyBzZSBlbmNvbnRyw7MgZWwgwqtleHRlbnTCuyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NAorbXNnaWQgIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGZvciBpbm9kZXMgY29udGFpbmluZyBleHRlbnRzIgorbXNnc3RyICJMYSBvcGVyYWNpw7NuIG5vIGVzdMOhIGltcGxlbWVudGFkYSBwYXJhIG5vZG9zLWkgcXVlIGNvbnRpZW5lbiDCq2V4dGVudHPCuyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiTGEgbG9uZ2l0dWQgZGVsIMKrZXh0ZW50wrsgbm8gZXMgdsOhbGlkYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NgorbXNnaWQgIkkvTyBDaGFubmVsIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IGJsb2NrIG51bWJlcnMiCittc2dzdHIgIkVsIGNhbmFsIGRlIEUvUyBubyBhZG1pdGUgbsO6bWVyb3MgZGUgYmxvcXVlIGRlIDY0IGJpdHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDcKK21zZ2lkICJDYW4ndCBjaGVjayBpZiBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgZHVlIHRvIG1pc3NpbmcgbXRhYiBmaWxlIgorbXNnc3RyICIiCisiTm8gc2UgaGEgcG9kaWRvIGNvbXByb2JhciBzaSBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGVzdMOhIG1vbnRhZG8sIHBvcnF1ZSAiCisiZmFsdGEgZWwgZmljaGVybyBtdGFiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ4Cittc2dpZCAiRmlsZXN5c3RlbSB0b28gbGFyZ2UgdG8gdXNlIGxlZ2FjeSBiaXRtYXBzIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBlcyBkZW1hc2lhZG8gZ3JhbmRlIHBhcmEgdXRpbGl6YXIgbWFwYXMgZGUgYml0cyAiCisiYW50aWd1b3MiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDkKK21zZ2lkICJNTVA6IGludmFsaWQgbWFnaWMgbnVtYmVyIgorbXNnc3RyICJNTVA6IG7Dum1lcm8gbcOhZ2ljbyBubyB2w6FsaWRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUwCittc2dpZCAiTU1QOiBkZXZpY2UgY3VycmVudGx5IGFjdGl2ZSIKK21zZ3N0ciAiTU1QOiBkaXNwb3NpdGl2byBhY3R1YWxtZW50ZSBhY3Rpdm8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICJNTVA6IGZzY2sgZWplY3V0w6FuZG9zZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MgorbXNnaWQgIk1NUDogYmxvY2sgbnVtYmVyIGJleW9uZCBmaWxlc3lzdGVtIHJhbmdlIgorbXNnc3RyICJNTVA6IG7Dum1lcm8gZGUgYmxvcXVlIGZ1ZXJhIGRlbCBhbGNhbmNlIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICJNTVA6IGN1cnNhbmRvIG9wZXJhY2nDs24gZGVzY29ub2NpZGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTQKK21zZ2lkICJNTVA6IGZpbGVzeXN0ZW0gc3RpbGwgaW4gdXNlIgorbXNnc3RyICJNTVA6IGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgdG9kYXbDrWEgZXN0w6EgZW4gdXNvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU1Cittc2dpZCAiTU1QOiBvcGVuIHdpdGggT19ESVJFQ1QgZmFpbGVkIgorbXNnc3RyICJNTVA6IG5vIHNlIGhhIHBvZGlkbyBhYnJpciBjb24gT19ESVJFQ1QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTYKK21zZ2lkICJCbG9jayBncm91cCBkZXNjcmlwdG9yIHNpemUgaW5jb3JyZWN0IgorbXNnc3RyICJFbCB0YW1hw7FvIGRlbCBkZXNjcmlwdG9yIGRlbCBncnVwbyBkZSBibG9xdWVzIGVzIGluY29ycmVjdG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTcKK21zZ2lkICJJbm9kZSBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBpbm9kZSIKK21zZ3N0ciAiRWwgwqtjaGVja3N1bcK7IGRlbCBub2RvLWkgbm8gY3VhZHJhIGNvbiBlbCBub2RvLWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTgKK21zZ2lkICJJbm9kZSBiaXRtYXAgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYml0bWFwIgorbXNnc3RyICIiCisiRWwgwqtjaGVja3N1bcK7IGRlbCBtYXBhIGRlIGJpdHMgZGVsIG5vZG8taSBubyBjdWFkcmEgY29uIGVsIG1hcGEgZGUgYml0cyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OQorbXNnaWQgIkV4dGVudCBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBleHRlbnQgYmxvY2siCittc2dzdHIgIkVsIMKrY2hlY2tzdW3CuyBkZWwgYmxvcXVlIMKrZXh0ZW50wrsgbm8gY3VhZHJhIGNvbiBlbCBibG9xdWUgwqtleHRlbnTCuyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MAorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBkb2VzIG5vdCBoYXZlIHNwYWNlIGZvciBjaGVja3N1bSIKK21zZ3N0ciAiRWwgYmxvcXVlIGRlIGRpcmVjdG9yaW8gbm8gdGllbmUgZXNwYWNpbyBwYXJhIGVsIMKrY2hlY2tzdW3CuyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MQorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgIiIKKyJFbCDCq2NoZWNrc3VtwrsgZGVsIGJsb3F1ZSBkZSBkaXJlY3RvcmlvIG5vIGN1YWRyYSBjb24gZWwgYmxvcXVlIGRlIGRpcmVjdG9yaW8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjIKK21zZ2lkICJFeHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYmxvY2siCittc2dzdHIgIkVsIMKrY2hlY2tzdW3CuyBkZWwgYmxvcXVlIGRlIGF0cmlidXRvIGV4dGVuZGlkbyBubyBjdWFkcmEgY29uIGVsIGJsb3F1ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MworbXNnaWQgIlN1cGVyYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggc3VwZXJibG9jayIKK21zZ3N0ciAiRWwgwqtjaGVja3N1bcK7IGRlbCBzdXBlcmJsb3F1ZSBubyBjdWFkcmEgY29uIGVsIHN1cGVyYmxvcXVlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY0Cittc2dpZCAiVW5rbm93biBjaGVja3N1bSBhbGdvcml0aG0iCittc2dzdHIgIkFsZ29yaXRtbyBkZSDCq2NoZWNrc3VtwrsgZGVzY29ub2NpZG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjUKK21zZ2lkICJNTVAgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggTU1QIGJsb2NrIgorbXNnc3RyICJFbCDCq2NoZWNrc3VtwrsgZGVsIGJsb3F1ZSBNTVAgbm8gY3VhZHJhIGNvbiBlbCBibG9xdWUgTU1QIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY2Cittc2dpZCAiRXh0MiBmaWxlIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFbCBmaWNoZXJvIHlhIGV4aXN0ZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTEKK21zZ2lkICJQcm9maWxlIHZlcnNpb24gMC4wIgorbXNnc3RyICJWZXJzacOzbiBkZSDCq3Byb2ZpbGXCuyAwLjAiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEyCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfbm9kZSIKK21zZ3N0ciAiVmFsb3IgbcOhZ2ljbyBpbmNvcnJlY3RvIGVuIHByb2ZpbGVfbm9kZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTMKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gbm90IGZvdW5kIgorbXNnc3RyICJTZWNjacOzbiDCq3Byb2ZpbGXCuyBubyBlbmNvbnRyYWRhIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNAorbXNnaWQgIlByb2ZpbGUgcmVsYXRpb24gbm90IGZvdW5kIgorbXNnc3RyICJSZWxhY2nDs24gwqtwcm9maWxlwrsgbm8gZW5jb250cmFkYSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTUKK21zZ2lkICJBdHRlbXB0IHRvIGFkZCBhIHJlbGF0aW9uIHRvIG5vZGUgd2hpY2ggaXMgbm90IGEgc2VjdGlvbiIKK21zZ3N0ciAiSW50ZW50byBkZSBhw7FhZGlyIHVuYSByZWxhY2nDs24gYSB1biBub2RvIHF1ZSBubyBlcyBzZWNjacOzbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTYKK21zZ2lkICJBIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgaGFzIGEgbm9uLXplcm8gdmFsdWUiCittc2dzdHIgIlVuYSBjYWJlY2VyYSBkZSBzZWNjacOzbiBkZSDCq3Byb2ZpbGXCuyB0aWVuZSB1biB2YWxvciBubyBudWxvIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNworbXNnaWQgIkJhZCBsaW5rZWQgbGlzdCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIkxpc3RhIGVubGF6YWRhIGluY29ycmVjdGEgZW4gbGFzIGVzdHJ1Y3R1cmFzIMKrcHJvZmlsZcK7IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOAorbXNnaWQgIkJhZCBncm91cCBsZXZlbCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIk5pdmVsIGRlIGdydXBvIGluY29ycmVjdG8gZW4gbGFzIGVzdHJ1Y3R1cmFzIMKrcHJvZmlsZcK7IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOQorbXNnaWQgIkJhZCBwYXJlbnQgcG9pbnRlciBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIlB1bnRlcm8gcGFkcmUgaW5jb3JyZWN0byBlbiBsYXMgZXN0cnVjdHVyYXMgwqtwcm9maWxlwrsiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGUgaXRlcmF0b3IiCittc2dzdHIgIlZhbG9yIG3DoWdpY28gaW5jb3JyZWN0byBlbiBlbCBpdGVyYWRvciDCq3Byb2ZpbGXCuyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjEKK21zZ2lkICJDYW4ndCBzZXQgdmFsdWUgb24gc2VjdGlvbiBub2RlIgorbXNnc3RyICJObyBzZSBoYSBwb2RpZG8gcG9uZXIgZWwgdmFsb3IgZW4gZWwgbm9kbyBkZSBzZWNjacOzbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCittc2dzdHIgIlNlIGhhIHBhc2FkbyB1biBhcmd1bWVudG8gbm8gdsOhbGlkbyBhIGxhIGJpYmxpb3RlY2Egwqtwcm9maWxlwrsiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIkludGVudG8gZGUgbW9kaWZpY2FyIMKrcHJvZmlsZcK7IGRlIHNvbG8gbGVjdHVyYSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIkxhIGNhYmVjZXJhIGRlIHNlY2Npw7NuIMKrcHJvZmlsZcK7IG5vIGVzdMOhIGVuIGVsIG5pdmVsIHN1cGVyaW9yIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNQorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIgorbXNnc3RyICJFcnJvciBkZSBzaW50YXhpcyBlbiBsYSBjYWJlY2VyYSBkZSBsYSBzZWNjacOzbiDCq3Byb2ZpbGXCuyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjYKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSByZWxhdGlvbiIKK21zZ3N0ciAiRXJyb3IgZGUgc2ludGF4aXMgZW4gbGEgcmVsYWNpw7NuIMKrcHJvZmlsZcK7IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNworbXNnaWQgIkV4dHJhIGNsb3NpbmcgYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiU29icmEgdW5hIGxsYXZlIGRlIGNpZXJyZSBlbiDCq3Byb2ZpbGXCuyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjgKK21zZ2lkICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiRmFsdGEgdW5hIGxsYXZlIGRlIGFwZXJ0dXJhIGVuIMKrcHJvZmlsZcK7IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyOQorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3QiCittc2dzdHIgIlZhbG9yIG3DoWdpY28gaW5jb3JyZWN0byBlbiBwcm9maWxlX3QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfc2VjdGlvbl90IgorbXNnc3RyICJWYWxvciBtw6FnaWNvIGluY29ycmVjdG8gZW4gcHJvZmlsZV9zZWN0aW9uX3QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMxCittc2dpZCAiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkxhIGl0ZXJhY2nDs24gcG9yIGxhIHNlY2Npw7NuIGRlIG5pdmVsIHN1cGVyaW9yIG5vIGVzdMOhIGltcGxlbWVudGFkYSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzIKK21zZ2lkICJJbnZhbGlkIHByb2ZpbGVfc2VjdGlvbiBvYmplY3QiCittc2dzdHIgIkVsIG9iamV0byBwcm9maWxlX3NlY3Rpb24gbm8gZXMgdsOhbGlkbyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzMKK21zZ2lkICJObyBtb3JlIHNlY3Rpb25zIgorbXNnc3RyICJObyBoYXkgbcOhcyBzZWNjaW9uZXMiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM0Cittc2dpZCAiQmFkIG5hbWVzZXQgcGFzc2VkIHRvIHF1ZXJ5IHJvdXRpbmUiCittc2dzdHIgIkVsIGNvbmp1bnRvIGRlIG5vbWJyZXMgcGFzYWRvIGEgbGEgcnV0aW5hIGRlIGNvbnN1bHRhIGVzIGluY29ycmVjdG8iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIk5vIGhheSBuaW5nw7puIGZpY2hlcm8gwqtwcm9maWxlwrsgYWJpZXJ0byIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzYKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCittc2dzdHIgIlZhbG9yIG3DoWdpY28gaW5jb3JyZWN0byBlbiBwcm9maWxlX2ZpbGVfdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzcKK21zZ2lkICJDb3VsZG4ndCBvcGVuIHByb2ZpbGUgZmlsZSIKK21zZ3N0ciAiTm8gc2UgaGEgcG9kaWRvIGFicmlyIGVsIGZpY2hlcm8gwqtwcm9maWxlwrsiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM4Cittc2dpZCAiU2VjdGlvbiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiTGEgc2VjY2nDs24geWEgZXhpc3RlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOQorbXNnaWQgIkludmFsaWQgYm9vbGVhbiB2YWx1ZSIKK21zZ3N0ciAiVmFsb3IgbMOzZ2ljbyBubyB2w6FsaWRvIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzo0MAorbXNnaWQgIkludmFsaWQgaW50ZWdlciB2YWx1ZSIKK21zZ3N0ciAiVmFsb3IgZW50ZXJvIG5vIHbDoWxpZG8iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQxCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCittc2dzdHIgIlZhbG9yIG3DoWdpY28gaW5jb3JyZWN0byBlbiBwcm9maWxlX2ZpbGVfZGF0YV90IgorCisjfiBtc2dpZCAiPFRoZSBBQ0wgaW5kZXggaW5vZGU+IgorI34gbXNnc3RyICI8RWwgw61uZGljZSBBQ0wgZGVsIG5vZG8taT4iCisKKyN+IG1zZ2lkICI8VGhlIEFDTCBkYXRhIGlub2RlPiIKKyN+IG1zZ3N0ciAiPExhIGluZm9ybWFjacOzbiBBQ0wgZGVsIG5vZG8taT4iCisKKyN+IG1zZ2lkICJAUyBkb2Vzbid0IGhhdmUgaGFzX0BqIGZsYWcsIGJ1dCBoYXMgZXh0MyBAaiAlcy5cbiIKKyN+IG1zZ3N0ciAiRWwgQFMgbm8gdGllbmUgbGEgYmFuZGVyYSBoYXNfam91cm5hbCwgcGVybyB0aWVuZSB1biBAaiBleHQzICVzLlxuIgorCisjfiBtc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJFbCBAYSBlbiBlbCBAaSAlaSB0aWVuZSB1biBhcnJlZ2xvIGFzb2NpYXRpdm8gKCVOKSBxdWUgZXMgQG4gKGRlYmUgc2VyICIKKyN+ICIwKVxuIgorCisjfiBtc2dpZCAiUmVjcmVhdGUgam91cm5hbCB0byBtYWtlIHRoZSBmaWxlc3lzdGVtIGV4dDMgYWdhaW4/XG4iCisjfiBtc2dzdHIgIsK/UmVjcmVhciBlbCBAaiBwYXJhIGhhY2VyIGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgZXh0MyBkZSBudWV2bz9cbiIKKworI34gbXNnaWQgIndoaWxlIGNhbGxpbmcgaXRlcmF0b3IgZnVuY3Rpb24iCisjfiBtc2dzdHIgIm1pZW50cmFzIHNlIGxsYW1hYmEgYSBsYSBmdW5jacOzbiBpdGVyYWRvcmEiCisKKyN+IG1zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGlub2RlIGJ1ZmZlciIKKyN+IG1zZ3N0ciAibWllbnRyYXMgc2UgcmVzZXJ2YWJhIGFsIGLDumZlciBkZWwgbm9kby1pIgorCisjfiBtc2dpZCAid2hpbGUgcmVhZGluZyBpbm9kZSB0YWJsZSAoZ3JvdXAgJWQpIgorI34gbXNnc3RyICJtaWVudHJhcyBzZSBsZcOtYSBsYSB0YWJsYSBkZSBub2Rvcy1pIChncnVwbyAlZCkiCisKKyN+IG1zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIChncm91cCAlZCkiCisjfiBtc2dzdHIgIm1pZW50cmFzIHNlIGVzY3JpYsOtYSBsYSB0YWJsYSBkZSBub2Rvcy1pIChncnVwbyAlZCkiCisKKyN+IG1zZ2lkICJQYXNzIDA6IERvaW5nIGJ5dGUtc3dhcCBvZiBmaWxlc3lzdGVtXG4iCisjfiBtc2dzdHIgIlBhc28gMDogSGFjaWVuZG8gbGEgdHJhc3Bvc2ljacOzbiBkZSBieXRlcyBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvc1xuIgorCisjfiBtc2dpZCAiIgorI34gIiVzOiB0aGUgZmlsZXN5c3RlbSBtdXN0IGJlIGZyZXNobHkgY2hlY2tlZCB1c2luZyBmc2NrXG4iCisjfiAiYW5kIG5vdCBtb3VudGVkIGJlZm9yZSB0cnlpbmcgdG8gYnl0ZS1zd2FwIGl0LlxuIgorI34gbXNnc3RyICIiCisjfiAiJXM6IGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgZGViZSBzZXIgcmV2aXNhZG8gZGVzZGUgY2VybyB1dGlsaXphbmRvXG4iCisjfiAiZnNjayB5IG5vIGRlYmUgZXN0YXIgbW9udGFkbyBjdWFuZG8gc2UgaW50ZW50ZSBoYWNlciB1bmEgdHJhc3Bvc2ljacOzbiBkZSAiCisjfiAiYnl0ZXMgZW4gw6lsLlxuIgorCisjfiBtc2dpZCAiQnl0ZSBzd2FwIgorI34gbXNnc3RyICJUcmFzcG9zaWNpw7NuIGRlIGJ5dGVzIgorCisjfiBtc2dpZCAiQnl0ZS1zd2FwcGluZyBmaWxlc3lzdGVtcyBub3QgY29tcGlsZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIGUyZnNja1xuIgorI34gbXNnc3RyICIiCisjfiAiTG9zIHNpc3RlbWFzIGNvbiB0cmFzcG9zaWNpw7NuIGRlIGJ5dGVzIG5vIGVzdMOhbiBjb21waWxhZG9zIGVuIGVzdGEgIgorI34gInZlcnNpw7NuIGRlIGUyZnNja1xuIgorCisjfiBtc2dpZCAiSW5jb21wYXRpYmxlIG9wdGlvbnMgbm90IGFsbG93ZWQgd2hlbiBieXRlLXN3YXBwaW5nLlxuIgorI34gbXNnc3RyICIiCisjfiAiTGFzIG9wY2lvbmVzIGluY29tcGF0aWJsZXMgbm8gZXN0w6FuIHBlcm1pdGlkYXMgY3VhbmRvIHNlIGhhY2UgIgorI34gInRyYXNwb3NpY2nDs24gZGUgYnl0ZXMuXG4iCisKKyN+IG1zZ2lkICIlczogRmlsZXN5c3RlbSBieXRlIG9yZGVyIGFscmVhZHkgbm9ybWFsaXplZC5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIiVzOiBlbCBvcmRlbiBkZSBsb3MgYnl0ZXMgZGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgeWEgc2Ugbm9ybWFsaXrDsy5cbiIKKworI34gbXNnaWQgIkNvdWxkbid0IGRldGVybWluZSBqb3VybmFsIHNpemUiCisjfiBtc2dzdHIgIk5vIHNlIHB1ZWRlIGRldGVybWluYXIgZWwgdGFtYcOxbyBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIgorCisjfiBtc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gd3JpdGUgYmxvY2sgYml0bWFwcyBmb3IgJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJtaWVudHJhcyBzZSByZWludGVudGFiYSBlc2NyaWJpciBsb3MgbWFwYXMgZGUgYml0cyBkZWwgYmxvcXVlIHBhcmEgJXMiCisKKyN+IG1zZ2lkICJiYWQgYmxvY2sgc2l6ZSAtICVzIgorI34gbXNnc3RyICJ0YW1hw7FvIGRlIGxvcyBibG9xdWVzIGRhw7FhZG9zIC0gJXMiCisKKyN+IG1zZ2lkICJpbnZhbGlkIHN0YXJ0aW5nIGJsb2NrIC0gJXMiCisjfiBtc2dzdHIgImJsb3F1ZSBpbmljaWFsIG5vIHbDoWxpZG8gLSAlcyIKKworI34gbXNnaWQgIk5vdGU6IFRoaXMgaXMgYSBieXRlLXN3YXBwZWQgZmlsZXN5c3RlbVxuIgorI34gbXNnc3RyICJOb3RhOiBlc3RlIGVzIHVuIHNpc3RlbWEgZGUgZmljaGVyb3MgY29uIHRyYXNwb3NpY2nDs24gZGUgYnl0ZXNcbiIKKworI34gbXNnaWQgInNob3J0IHdyaXRlIChvbmx5ICVkIGJ5dGVzKSBmb3Igd3JpdGluZyBpbWFnZSBoZWFkZXIiCisjfiBtc2dzdHIgIiIKKyN+ICJzZSBlc2NyaWJpw7MgbXV5IHBvY28gKHPDs2xvICVkIGJ5dGVzKSBwYXJhIGVsIGVuY2FiZXphZG8gZGUgbGEgaW1hZ2VuIgorCisjfiBtc2dpZCAiaW52YWxpZCBmcmFnbWVudCBzaXplIC0gJXMiCisjfiBtc2dzdHIgIlRhbWHDsW8gZGVsIGZyYWdtZW50byBpbnbDoWxpZG8gLSAlcyIKKworI34gbXNnaWQgIldhcm5pbmc6IGZyYWdtZW50cyBub3Qgc3VwcG9ydGVkLiAgSWdub3JpbmcgLWYgb3B0aW9uXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJBdGVuY2nDs246IG5vIGVzdMOhbiBpbXBsZW1lbnRhZG9zIGxvcyBmcmFnbWVudG9zLiBTZSBkZXNjYXJ0YSBsYSBvcGNpw7NuIC0iCisjfiAiZlxuIgorCisjfiBtc2dpZCAiIgorI34gIkZpbGVzeXN0ZW0gdG9vIGxhcmdlLiAgTm8gbW9yZSB0aGFuIDIqKjMxLTEgYmxvY2tzXG4iCisjfiAiXHQgKDhUQiB1c2luZyBhIGJsb2Nrc2l6ZSBvZiA0aykgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuIgorI34gbXNnc3RyICIiCisjfiAiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBlcyBkZW1hc2lhZG8gZ3JhbmRlLiAgQWN0dWFsbWVudGUgbm8gc2VcbiIKKyN+ICJzb3BvcnRhbiBtw6FzIGRlIDIqKjMxLTEgYmxvcXVlcyAoOCBUQiBjb24gdW4gdGFtYcOxbyBkZSBibG9xdWUgZGUgNGspLiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJXYXJuaW5nOiBzb21lIDIuNCBrZXJuZWxzIGRvIG5vdCBzdXBwb3J0IGJsb2Nrc2l6ZXMgZ3JlYXRlciB0aGFuIDQwOTZcbiIKKyN+ICJcdHVzaW5nIGV4dDMuICBVc2UgLWIgNDA5NiBpZiB0aGlzIGlzIGFuIGlzc3VlIGZvciB5b3UuXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJBdGVuY2nDs246IGFsZ3Vub3MgbsO6Y2xlb3MgMi40IG5vIG9wZXJhbiBjb24gdGFtYcOxb3MgZGUgYmxvcXVlIHN1cGVyaW9yZXNcbiIKKyN+ICJhIDQwOTYgY29uIGV4dDMuICBVdGlsaWNlIC1iIDQwOTYgc2kgZXN0byBlcyB1biBwcm9ibGVtYSBwYXJhIHVzdGVkLlxuIgorI34gIlxuIgorCisjfiBtc2dpZCAiV2FybmluZzogJWQtYnl0ZSBpbm9kZXMgbm90IHVzYWJsZSBvbiBvbGRlciBzeXN0ZW1zXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJBdGVuY2nDs246IGxvcyBub2Rvcy1pIGRlICVkIGJ5dGVzIG5vIHNlIHB1ZWRlbiB1dGlsaXphciBlbiBtdWNob3MgIgorI34gInNpc3RlbWFzXG4iCisKKyN+IG1zZ2lkICJKb3VybmFsIE5PVCByZW1vdmVkXG4iCisjfiBtc2dzdHIgIk5PIHNlIGhhIGVsaW1pbmFkbyBlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXNcbiIKKworI34gbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyN+IG1zZ3N0ciAiaGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyN+IG1zZ2lkICJpbnZhbGlkIGJsb2NrcyByYW5nZTogJWx1LSVsdSIKKyN+IG1zZ3N0ciAiaW50ZXJ2YWxvIGRlIGJsb3F1ZXMgZGHDsWFkb3M6ICVsdS0lbHUiCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgc3BhcnNlIHN1cGVyYmxvY2tzIGRpc2FibGVkLlxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyB5YSB0aWVuZSBsb3Mgc3VwZXJibG9xdWVzIGRpc3BlcnNvcyAiCisjfiAiZGVzaGFiaWxpdGFkb3MuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBjbGVhcmVkLiAgJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJMYSBiYW5kZXJhIGRlIHN1cGVyYmxvcXVlcyBkaXNwZXJzb3MgaGEgc2lkbyBib3JyYWRhLiAgJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiJXMgaXMgbW91bnRlZDsgY2FuJ3QgcmVzaXplIGEgbW91bnRlZCBmaWxlc3lzdGVtIVxuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisjfiAiJXMgZXN0w6EgbW9udGFkbzsgwqFObyBzZSBwdWVkZSBjYW1iaWFyIGVsIHRhbWHDsW8gZGUgdW4gc2lzdGVtYSBkZSBmaWNoZXJvcyAiCisjfiAibW9udGFkbyFcbiIKKyN+ICJcbiIKKworI34gbXNnaWQgIkNsb25lIGR1cGxpY2F0ZS9iYWQgYmxvY2tzIgorI34gbXNnc3RyICJDbG9uYXIgbG9zIGJsb3F1ZXMgZHVwbGljYWRvcy9kYcOxYWRvcyIKKworI34gbXNnaWQgIkVycm9yIGFsbG9jYXRpbmcgQGEgQGIgJWIuICAiCisjfiBtc2dzdHIgIkVycm9yIGFsIHJlc2VydmFyIGVsIEBiIGRlbCBAYSAlYi4gICIKKworI34gbXNnaWQgIiIKKyN+ICJEdXBsaWNhdGUgQGJzIGZvdW5kLi4uIGludm9raW5nIGR1cGxpY2F0ZSBAYiBwYXNzZXMuXG4iCisjfiAiUGFzcyAxQjogUmVzY2FuIGZvciBkdXBsaWNhdGUvYmFkIEBic1xuIgorI34gbXNnc3RyICIiCisjfiAiU2UgZW5jb250cmFyb24gQGJzIGR1cGxpY2Fkb3MuLi4gc2UgaW52b2NhbiBsb3MgcGFzb3MgcGFyYSBAYnMgIgorI34gImR1cGxpY2Fkb3MuXG4iCisjfiAiUGFzbyAxQjogUmUtZXhwbG9yYWNpw7NuIHBhcmEgYnVzY2FyIEBicyBkdXBsaWNhZG9zL2Rhw7FhZG9zXG4iCisKKyN+IG1zZ2lkICJEdXBsaWNhdGUvYmFkIEBiKHMpIGluIEBpICVpOiIKKyN+IG1zZ3N0ciAiSGF5IEBiKHMpIGR1cGxpY2Fkb3MvZGHDsWFkb3MgZW4gZWwgQGkgJWk6IgorCisjfiBtc2dpZCAiRm9yY2libHkgY2xlYXJpbmcgSFRSRUUgZmxhZyBvbiBAaSAlZCAoJXEpLiAgKEJldGEgdGVzdCBjb2RlKVxuIgorI34gbXNnc3RyICIiCisjfiAiU2UgaW50ZW50YSBib3JyYXIgYSBsYSBmdWVyemEgbGEgYmFuZGVyYSBIVFJFRSBlbiBlbCBAaSAlZCAoJXEpLiAgKEPDs2RpZ28gIgorI34gImRlIHBydWViYSBlbiBldGFwYSBiZXRhKVxuIgorCisjfiBtc2dpZCAiVXNhZ2U6ICBmaW5kc3VwZXIgZGV2aWNlIFtza2lwYnl0ZXMgW3N0YXJ0a2JdXVxuIgorI34gbXNnc3RyICIiCisjfiAiTW9kbyBkZSBlbXBsZW86IGZpbmRzdXBlciBkaXNwb3NpdGl2byBbYnl0ZXNwb3JzYWx0YXIgW3ByaW5jaXBpbyAoZW4gIgorI34gImtiKV1dXG4iCisKKyN+IG1zZ2lkICJza2lwYnl0ZXMgc2hvdWxkIGJlIGEgbnVtYmVyLCBub3QgJXNcbiIKKyN+IG1zZ3N0ciAiYnl0ZXNwb3JzYWx0YXIgZGViZSBzZXIgdW4gbsO6bWVybywgbm8gJXNcbiIKKworI34gbXNnaWQgInNraXBieXRlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplXG4iCisjfiBtc2dzdHIgImJ5dGVzcG9yc2FsdGFyIGRlYmUgc2VyIHVuIG3Dumx0aXBsbyBkZWwgdGFtYcOxbyBkZWwgc2VjdG9yXG4iCisKKyN+IG1zZ2lkICJzdGFydGtiIHNob3VsZCBiZSBhIG51bWJlciwgbm90ICVzXG4iCisjfiBtc2dzdHIgInByaW5jaXBpbyBkZWJlIHNlciB1biBuw7ptZXJvLCBubyAlc1xuIgorCisjfiBtc2dpZCAic3RhcnRrYiBzaG91bGQgYmUgcG9zaXRpdmUsIG5vdCAlTGRcbiIKKyN+IG1zZ3N0ciAicHJpbmNpcGlvIGRlYmUgc2VyIHBvc2l0aXZvLCBubyAlTGRcbiIKKworI34gbXNnaWQgInN0YXJ0aW5nIGF0ICVMZCwgd2l0aCAlZCBieXRlIGluY3JlbWVudHNcbiIKKyN+IG1zZ3N0ciAic2UgY29taWVuemEgZW4gJUxkLCBjb24gaW5jcmVtZW50b3MgZGUgJWQgYnl0ZXNcbiIKKworI34gbXNnaWQgIiAgICAgICB0aGlzb2ZmICAgICBibG9jayBmc19ibGtfc3ogIGJsa3N6IGdycCBsYXN0X21vdW50XG4iCisjfiBtc2dzdHIgIiAgICAgIGVzdGUgICAgICAgIGJsb3F1ZSAgZnNfYmxrX3N6ICBibGtzeiBncnAgdWx0aW1vX21vbnRhZG9cbiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICIlMTRMZDogZmluaXNoZWQgd2l0aCBlcnJubyAlZFxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiJTE0TGQ6IHNlIGZpbmFsaXphIGNvbiBlbCBlcnJvciBuw7ptZXJvICVkXG4iCisKKyN+IG1zZ2lkICIodW5rbm93biBvcykiCisjfiBtc2dzdHIgIihzbyBkZXNjb25vY2lkbykiCisKKyN+IG1zZ2lkICIlcyBmYWlsZWQgZm9yICVzOiAlc1xuIgorI34gbXNnc3RyICIlcyBmYWxsw7MgcGFyYSAlczogJXNcbiIKKworI34gbXNnaWQgIk51bWJlciBvZiBmcmVlIGJsb2NrczogJWQvJWQsIE5lZWRlZDogJWRcbiIKKyN+IG1zZ3N0ciAiTsO6bWVybyBkZSBibG9xdWVzIGxpYnJlczogJWQvJWQsIHNlIG5lY2VzaXRhbjogJWRcbiIKKworI34gbXNnaWQgIkdvaW5nIGludG8gZGVzcGVyYXRpb24gbW9kZSBmb3IgYmxvY2sgYWxsb2NhdGlvbnNcbiIKKyN+IG1zZ3N0ciAiRW50cmFuZG8gYWwgbW9kbyBkZXNlc3BlcmFkbyBwYXJhIHJlc2VydmFyIGJsb3F1ZXNcbiIKKworI34gbXNnaWQgIk1vdmluZyAlZCBibG9ja3MgJXUtPiV1XG4iCisjfiBtc2dzdHIgIk1vdmllbmRvICVkIGJsb3F1ZXMgJXUtPiV1XG4iCisKKyN+IG1zZ2lkICJJbm9kZSBtb3ZlZCAldS0+JXVcbiIKKyN+IG1zZ3N0ciAiTm9kbyBpIG1vdmlkbyAldS0+JXVcbiIKKworI34gbXNnaWQgIklub2RlIHRyYW5zbGF0ZSAoZGlyPSV1LCBuYW1lPSUuKnMsICV1LT4ldSlcbiIKKyN+IG1zZ3N0ciAiVHJhZHVjY2nDs24gZGUgbm9kby1pIChkaXI9JXUsIG5vbWJyZT0lLipzLCAldS0+JXUpXG4iCisKKyN+IG1zZ2lkICJJdGFibGUgbW92ZSBncm91cCAlZCBibG9jayAldS0+JXUgKGRpZmYgJWQpXG4iCisjfiBtc2dzdHIgIkxhIHRhYmxhIGkgbXVldmUgYWwgZ3J1cG8gJWQgYmxvcXVlICV1LT4ldSAoZGlmZXJlbmNpYSAlZClcbiIKKworI34gbXNnaWQgIiVkIGJsb2NrcyBvZiB6ZXJvcy4uLlxuIgorI34gbXNnc3RyICIlZCBibG9xdWVzIGRlIGNlcm9zLi4uXG4iCisKKyN+IG1zZ2lkICJJbm9kZSB0YWJsZSBtb3ZlIGZpbmlzaGVkLlxuIgorI34gbXNnc3RyICJFbCBtb3ZpbWllbnRvIGRlIGxhIHRhYmxhIGRlIGxvcyBub2RvcyBpIGhhIHRlcm1pbmFkby5cbiIKZGlmZiAtLWdpdCBhL3BvL2ZyLmdtbyBiL3BvL2ZyLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWE3MzJhCi0tLSAvZGV2L251bGwKKysrIGIvcG8vZnIuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2ZyLnBvIGIvcG8vZnIucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3ZjVmYgotLS0gL2Rldi9udWxsCisrKyBiL3BvL2ZyLnBvCkBAIC0wLDAgKzEsNzYzNiBAQAorIyBNZXNzYWdlcyBmcmFu52FpcyBwb3VyIEdOVSBjb25jZXJuYW50IGUyZnNwcm9ncy4KKyMgQ29weXJpZ2h0IChDKSAyMDA4IFRoZW9kb3JlIFRzbyAobXNnaWRzKQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZTJmc3Byb2dzIHBhY2thZ2UuCisjIENvcHlyaWdodCCpIDE5OTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIE1pY2hlbCBSb2JpdGFpbGxlIDxyb2JpdGFpbEBJUk8uVU1vbnRyZWFsLkNBPiwgdHJhZHVjdGV1ciBkZXB1aXMvc2luY2UgMTk5Ni4KKyMgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPiwgMjAwNi0yMDE0LgorIworIy4gVGhlIHN0cmluZ3MgaW4gZTJmc2NrJ3MgcHJvYmxlbS5jIGNhbiBiZSB2ZXJ5IGhhcmQgdG8gdHJhbnNsYXRlLAorIy4gc2luY2UgdGhlIHN0cmluZ3MgYXJlIGV4cGFuZGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gIEZpcnN0IG9mIGFsbCwKKyMuIHRoZXJlIGlzIGFuIEAtZXhwYW5zaW9uLCB3aGVyZSBzdHJpbmdzIGxpa2UgIkBpIiBhcmUgZXhwYW5kZWQgdG8KKyMuICJpbm9kZSIsIGFuZCBzbyBvbi4gIEluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0cmFuc2xhdG9ycywgdGhlCisjLiBlMmZzcHJvZ3MgcG8gdGVtcGxhdGUgZmlsZSBoYXMgYmVlbiBlbmhhbmNlZCB3aXRoIGNvbW1lbnRzIHRoYXQgc2hvdworIy4gdGhlIEAtZXhwYW5zaW9uLCBmb3IgdGhlIHN0cmluZ3MgaW4gdGhlIHByb2JsZW0uYyBmaWxlLgorIy4KKyMuIFRyYW5zbGF0b3JzIGFyZSBmcmVlIHRvIHVzZSB0aGUgQC1leHBhbnNpb24gZmFjaWxpdHkgaWYgdGhleSBzbworIy4gY2hvb3NlLCBieSBwcm92aWRpbmcgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGluIGUyZnNjay9tZXNzYWdlLmMuCisjLiBUaGVzZSB0cmFuc2xhdGlvbiBjYW4gY29tcGxldGVseSByZXBsYWNlIGFuIGV4cGFuc2lvbjsgZm9yIGV4YW1wbGUsCisjLiBpZiAiYmJsb2NrIiAod2hpY2ggaW5kaWNhdGVkIHRoYXQgIkBiIiB3b3VsZCBiZSBleHBhbmRlZCB0byAiYmxvY2siKQorIy4gaXMgdHJhbnNsYXRlZCBhcyAiZGRhdGVudmVybHVzdCIsIHRoZW4gIkBkIiB3aWxsIGJlIGV4cGFuZGVkIHRvCisjLiAiZGF0ZW52ZXJsdXN0Ii4gIEFsdGVybmF0aXZlbHksIHRyYW5zbGF0b3JzIGNhbiBzaW1wbHkgbm90IHVzZSB0aGUKKyMuIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGF0IGFsbC4KKyMuCisjLiBUaGUgc2Vjb25kIGV4cGFuc2lvbiB3aGljaCBpcyBkb25lIGZvciBlMmZzY2sncyBwcm9ibGVtLmMgbWVzc2FnZXMgaXMKKyMuIGEgZHluYW1pYyAlLWV4cGFuc2lvbiwgd2hpY2ggZXhwYW5kcyAlaSBhcyBhbiBpbm9kZSBudW1iZXIsIGFuZCBzbworIy4gb24uICBBIHRhYmxlIG9mIHRoZXNlIGV4cGFuc2lvbnMgY2FuIGJlIGZvdW5kIGJlbG93LiAgTm90ZSB0aGF0CisjLiAlLWV4cHJlc3Npb25zIHRoYXQgYmVnaW4gd2l0aCAiJUQiIGFuZCAiJUkiIGFyZSB0d28tY2hhcmFjdGVyCisjLiBleHBhbnNpb25zOyBzbyBmb3IgZXhhbXBsZSwgIiVJdSIgZXhwYW5kcyB0byB0aGUgaW5vZGUncyB1c2VyIGlkCisjLiBvd25lcnNoaXAgZmllbGQgKGlub2RlLT5pX3VpZCkuICBBbHNvIHRoZSAiJUIiIGV4cGFuc2lvbiBpcyBzcGVjaWFsOgorIy4gaXQgY2FuIGV4cGFuZCB0byBlaXRoZXIgdGhlIHN0cmluZyAiaW5kaXJlY3QgYmxvY2siIChwb3NzaWJseSBwcmVjZWRlZAorIy4gYnkgdGhlIHdvcmQgImRvdWJsZSIgb3IgInRyaXBsZSIpLCBvciB0aGUgc3RyaW5nICJibG9jayAjIiBpbW1lZGlhdGVseQorIy4gZm9sbG93ZWQgYnkgYW4gaW50ZWdlciBpbmRpY2F0aW5nIGEgYmxvY2sgc2VxdWVuY2UgbnVtYmVyLgorIy4gIAorIy4gCSViCTxibGs+CQkJYmxvY2sgbnVtYmVyCisjLiAJJUIJImluZGlyZWN0IGJsb2NrIiB8ICJibG9jayAjIjxibGtjb3VudD4Jc3RyaW5nIHwgc3RyaW5nK2ludGVnZXIKKyMuIAklYwk8YmxrMj4JCQlibG9jayBudW1iZXIKKyMuIAklRGkJPGRpcmVudD4gLT4gaW5vCQlpbm9kZSBudW1iZXIKKyMuIAklRG4JPGRpcmVudD4gLT4gbmFtZQlzdHJpbmcKKyMuIAklRHIJPGRpcmVudD4gLT4gcmVjX2xlbgorIy4gCSVEbAk8ZGlyZW50PiAtPiBuYW1lX2xlbgorIy4gCSVEdAk8ZGlyZW50PiAtPiBmaWxldHlwZQorIy4gCSVkCTxkaXI+IAkJCWlub2RlIG51bWJlcgorIy4gCSVnCTxncm91cD4JCQlpbnRlZ2VyCisjLiAJJWkJPGlubz4JCQlpbm9kZSBudW1iZXIKKyMuIAklSXMJPGlub2RlPiAtPiBpX3NpemUKKyMuIAklSVMJPGlub2RlPiAtPiBpX2V4dHJhX2lzaXplCisjLiAJJUliCTxpbm9kZT4gLT4gaV9ibG9ja3MKKyMuIAklSWwJPGlub2RlPiAtPiBpX2xpbmtzX2NvdW50CisjLiAJJUltCTxpbm9kZT4gLT4gaV9tb2RlCisjLiAJJUlNCTxpbm9kZT4gLT4gaV9tdGltZQorIy4gCSVJRgk8aW5vZGU+IC0+IGlfZmFkZHIKKyMuIAklSWYJPGlub2RlPiAtPiBpX2ZpbGVfYWNsCisjLiAJJUlkCTxpbm9kZT4gLT4gaV9kaXJfYWNsCisjLiAJJUl1CTxpbm9kZT4gLT4gaV91aWQKKyMuIAklSWcJPGlub2RlPiAtPiBpX2dpZAorIy4gCSVJdAk8c3RyPgkJCWZpbGUgdHlwZQorIy4gCSVqCTxpbm8yPgkJCWlub2RlIG51bWJlcgorIy4gCSVtCTxjb21fZXJyIGVycm9yIG1lc3NhZ2U+CisjLiAJJU4JPG51bT4KKyMuIAklcAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4KKyMuIAklUAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiA8ZGlyZW50Pi0+aW5vIHdpdGggPGlubzI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LiAgKElmIGRpcmVudCBpcyBOVUxMCisjLiAJCQkJdGhlbiByZXR1cm4gdGhlIHBhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vMj4pCisjLiAJJXEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxkaXI+CisjLiAJJVEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+IHdpdGggPGRpcj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuCisjLiAJJXMJPHN0cj4JCQltaXNjZWxsYW5lb3VzIHN0cmluZworIy4gCSVTCQliYWNrdXAgc3VwZXJibG9jaworIy4gCSVYCTxudW0+CWhleGFkZWNpbWFsIGZvcm1hdAorIy4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEdOVSBlMmZzcHJvZ3MgMS40Mi4xMi1wcmUyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IHR5dHNvQGFsdW0ubWl0LmVkdVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDIxOjI2LTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE0LTA4LTI2IDIxOjI2KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBGcmVuY2ggPHRyYWR1Y0B0cmFkdWMub3JnPlxuIgorIkxhbmd1YWdlOiBmclxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4LWJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuID4gMSk7XG4iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoyMyBtaXNjL21rZTJmcy5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2sgJXUgb3V0IG9mIHJhbmdlOyBpZ25vcmVkLlxuIgorbXNnc3RyICJCbG9jIGTpZmVjdHVldXggJXUgaG9ycyBsaW1pdGWgOyBpZ25vcukuXG4iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo0NgorbXNnaWQgIndoaWxlIHNhbml0eSBjaGVja2luZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAibG9ycyBkdSBjb250cvRsZSBkZSBsJ2ludOlncml06SBkZSBsJ2ktbm9ldWQgZGVzIGJsb2NzIGTpZmVjdGV1eCIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjU4Cittc2dpZCAid2hpbGUgcmVhZGluZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAibG9ycyBkZSBsYSBsZWN0dXJlIGRlIGwnaS1ub2V1ZCBkZXMgYmxvY3MgZOlmZWN0dWV1eCIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjcyIGUyZnNjay9zY2FudGVzdC5jOjEwNyBlMmZzY2svdW5peC5jOjEzNDUKKyM6IGUyZnNjay91bml4LmM6MTQzNCBtaXNjL2JhZGJsb2Nrcy5jOjEyNDIgbWlzYy9iYWRibG9ja3MuYzoxMjUwCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyNjQgbWlzYy9iYWRibG9ja3MuYzoxMjc2IG1pc2MvZHVtcGUyZnMuYzo2MDQKKyM6IG1pc2MvZTJpbWFnZS5jOjEzOTYgbWlzYy9lMmltYWdlLmM6MTU4MCBtaXNjL2UyaW1hZ2UuYzoxNTk5CisjOiBtaXNjL21rZTJmcy5jOjIyNyBtaXNjL3R1bmUyZnMuYzoxOTU1IG1pc2MvdHVuZTJmcy5jOjIwNDQgcmVzaXplL21haW4uYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiCittc2dzdHIgImxvcnMgZGUgbGEgdGVudGF0aXZlIGQnb3V2ZXJ0dXJlIGRlICVzIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHBvcGVuICclcyciCittc2dzdHIgImxvcnMgZGUgbGEgdGVudGF0aXZlIGQnb3V2ZXJ0dXJlIHZpYSBwb3BlbigpIKugJXOguyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjk0IG1pc2MvbWtlMmZzLmM6MjM0Cittc2dpZCAid2hpbGUgcmVhZGluZyBpbiBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBmaWxlIgorbXNnc3RyICIiCisibG9ycyBkZSBsYSBsZWN0dXJlIGRlIGxhIGxpc3RlIGRlcyBibG9jcyBk6WZlY3R1ZXV4IOAgcGFydGlyIGR1IGZpY2hpZXIiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMDUKK21zZ2lkICJ3aGlsZSB1cGRhdGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgImxvcnMgZGUgbGEgbWlzZSDgIGpvdXIgZGUgbCdpLW5vZXVkIGRlcyBibG9jcyBk6WZlY3R1ZXV4IgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGlsbGVnYWwgYmxvY2sgJXUgZm91bmQgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ2xlYXJlZC5cbiIKK21zZ3N0ciAiIgorIkF2ZXJ0aXNzZW1lbnSgOiBibG9jIGlsbOlnYWwgJXUgcmVw6XLpIGRhbnMgbCdpLW5vZXVkIGRlcyBibG9jc1xuIgorImTpZmVjdHVldXguICBFZmZhY+kuXG4iCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIkVycmV1ciBkZSBsZWN0dXJlIGR1IGJsb2MgJWx1ICglcykgbG9ycyBkZSAlcy4gIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICJFcnJldXIgZGUgbGVjdHVyZSBkdSBibG9jICVsdSAoJXMpLiAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYxIGUyZnNjay9laGFuZGxlci5jOjExMAorbXNnaWQgIklnbm9yZSBlcnJvciIKK21zZ3N0ciAiSWdub3JlciBsJ2VycmV1ciIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjIKK21zZ2lkICJGb3JjZSByZXdyaXRlIgorbXNnc3RyICJGb3JjZXIgbGEgcukt6WNyaXR1cmUiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsJ+ljcml0dXJlIGR1IGJsb2MgJWx1ICglcykgbG9ycyBkZSAlcy4gIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgZCfpY3JpdHVyZSBkdSBibG9jICVsdSAoJXMpLiAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJibG9jcyBkZXMgculwZXJ0b2lyZXMgdmlkZXMiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjYyCittc2dpZCAiZW1wdHkgZGlyIG1hcCIKK21zZ3N0ciAiY2FydGUgZGVzIHLpcGVydG9pcmVzIHZpZGUiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVtcHR5IGRpcmVjdG9yeSBibG9jayAldSAoIyVkKSBpbiBpbm9kZSAldVxuIgorbXNnc3RyICJCbG9jIGRlcyBy6XBlcnRvaXJlcyAldSAobrAlZCkgdmlkZSBkYW5zIGwnaS1ub2V1ZCAldVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGZpbGVuYW1lIG5ibG9ja3MgYmxvY2tzaXplXG4iCittc2dzdHIgIiVzoDogJXMgbm9tLWRlLWZpY2hpZXIgbm9tYnJlLWRlLWJsb2NzIHRhaWxsZS1kZXMtYmxvY3NcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIG9mIGJsb2NrcyFcbiIKK21zZ3N0ciAiTm9tYnJlIGlsbOlnYWwgZGUgYmxvY3OgIVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIChzaXplPSVkKVxuIgorbXNnc3RyICJOZSBwZXV0IGFsbG91ZXIgbGUgdGFtcG9uIGRlIGJsb2MgKHRhaWxsZT0lZClcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBkaXNrXG4iCittc2dzdHIgIlV0aWxpc2F0aW9uoDogJXMgZGlzcXVlXG4iCisKKyM6IGUyZnNjay9mbHVzaGIuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJCTEtGTFNCVUYgaW9jdGwgbm90IHN1cHBvcnRlZCEgIENhbid0IGZsdXNoIGJ1ZmZlcnMuXG4iCittc2dzdHIgIiIKKyJMJ2lvY3RsIEJMS0ZMU0JVRiBuJ2VzdCBwYXMgc3VwcG9ydOmgISBJbXBvc3NpYmxlIGRlIHZpZGVyIGxlcyB0YW1wb25zLlxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1GXSBbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJVdGlsaXNhdGlvbqA6ICVzIFstRl0gWy1JoG5vbWJyZV9ibG9jc19kdV90YW1wb25fZF9pX25vZXVkXSBw6XJpcGjpcmlxdWVcbiIKKworIzogZTJmc2NrL2lzY2FuLmM6ODEgZTJmc2NrL3VuaXguYzo5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZmx1c2hpbmciCittc2dzdHIgImxvcnMgZGUgbCdvdXZlcnR1cmUgZGUgJXMgcG91ciBsYSB2aWRhbmdlIgorCisjOiBlMmZzY2svaXNjYW4uYzo4NiBlMmZzY2svdW5peC5jOjk3OCByZXNpemUvbWFpbi5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiCittc2dzdHIgImxvcnMgZGUgbGEgdGVudGF0aXZlIGRlIHZpZGFuZ2UgZGUgJXMiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkJ291dmVydHVyZSBkZSAnJXMnIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTkgZTJmc2NrL3NjYW50ZXN0LmM6MTE0IG1pc2MvZTJpbWFnZS5jOjEyOTAKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgImxvcnMgZGUgbCdvdXZlcnR1cmUgZGUgbCdleGFtZW4gZCdpLW5vZXVkcyIKKworIzogZTJmc2NrL2lzY2FuLmM6MTI3IG1pc2MvZTJpbWFnZS5jOjEzMDkKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUiCittc2dzdHIgImxvcnMgZGUgbCdvYnRlbnRpb24gZGUgbCdpLW5vZXVkIHN1aXZhbnQiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgc2Nhbm5lZC5cbiIKK21zZ3N0ciAiJXUgaS1ub2V1ZHMgZXhhbWlu6XMuXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTI0Cittc2dpZCAicmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAibGVjdHVyZSBlbiBjb3VycyBkdSBzdXBlcmJsb2MgZHUgam91cm5hbFxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiVzoDogYXVjdW4gc3VwZXJibG9jIGRlIGpvdXJuYWwgdmFsaWRlIG4nYSDpdOkgdHJvdXbpXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBqb3VybmFsIHRvbyBzaG9ydFxuIgorbXNnc3RyICIlc6A6IGpvdXJuYWwgdHJvcCBjb3VydFxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcmVjb3ZlcmluZyBqb3VybmFsXG4iCittc2dzdHIgIiVzoDogculjdXDpcmF0aW9uIGR1IGpvdXJuYWxcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdvbid0IGRvIGpvdXJuYWwgcmVjb3Zlcnkgd2hpbGUgcmVhZC1vbmx5XG4iCittc2dzdHIgIiIKKyIlc6A6IGF1Y3VuZSBy6WN1cOlyYXRpb24gZHUgam91cm5hbCBuJ2VzdCBwb3NzaWJsZSB0YW50IHF1J2lsIGVzdCBlblxuIgorImxlY3R1cmUgc2V1bGVcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlLW9wZW4gJXMiCittc2dzdHIgImxvcnMgZGUgbGEgdGVudGF0aXZlIGRlIHLpLW91dmVydHVyZSBkZSAlcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTMKK21zZ2lkICJhZXh0ZW5kZWQgYXR0cmlidXRlIgorbXNnc3RyICJhYXR0cmlidXQg6XRlbmR1IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNAorbXNnaWQgIkFlcnJvciBhbGxvY2F0aW5nIgorbXNnc3RyICJBZXJyZXVyIGxvcnMgZGUgbCdhbGxvY2F0aW9uIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNQorbXNnaWQgImJibG9jayIKK21zZ3N0ciAiYmJsb2MiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE2Cittc2dpZCAiQmJpdG1hcCIKK21zZ3N0ciAiQmJpdG1hcCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTcKK21zZ2lkICJjY29tcHJlc3MiCittc2dzdHIgImNjb21wcmVzcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTgKK21zZ2lkICJDY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBAYiIKK21zZ3N0ciAiQ2VzdCBlbiBjb25mbGl0IGF2ZWMgZGVzIEBicyBkJ2F1dHJlcyBzeXN06G1lcyBkZSBmaWNoaWVycyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTkKK21zZ2lkICJkZGlyZWN0b3J5IgorbXNnc3RyICJkculwZXJ0b2lyZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjAKK21zZ2lkICJEZGVsZXRlZCIKK21zZ3N0ciAiRGVmZmFj6SIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjEKK21zZ2lkICJlZW50cnkiCittc2dzdHIgImVlbnRy6WUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIyCittc2dpZCAiRUBlICclRG4nIGluICVwICglaSkiCittc2dzdHIgIkVAZSCroCVEbqC7IGRhbnMgJXAgKCVpKSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjMKK21zZ2lkICJmZmlsZXN5c3RlbSIKK21zZ3N0ciAiZnN5c3TobWUgZGUgZmljaGllcnMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI0Cittc2dpZCAiRmZvciBAaSAlaSAoJVEpIGlzIgorbXNnc3RyICJGcG91ciBsJ0BpICVpICglUSkgZXN0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNQorbXNnaWQgImdncm91cCIKK21zZ3N0ciAiZ2dyb3VwZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjYKK21zZ2lkICJoSFRSRUUgQGQgQGkiCittc2dzdHIgImhAaSBkZSBAZCBkJ0hUUkVFIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNworbXNnaWQgImlpbm9kZSIKK21zZ3N0ciAiaWktbm9ldWQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI4Cittc2dpZCAiSWlsbGVnYWwiCittc2dzdHIgIklpbGzpZ2FsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOQorbXNnaWQgImpqb3VybmFsIgorbXNnc3RyICJqam91cm5hbCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAibGxvc3QrZm91bmQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMxCittc2dpZCAiTGlzIGEgbGluayIKK21zZ3N0ciAiTGVzdCB1biBsaWVuIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMgorbXNnaWQgIm1tdWx0aXBseS1jbGFpbWVkIgorbXNnc3RyICJtculjbGFt6ShzKSBwbHVzaWV1cnMgZm9pcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzMKK21zZ2lkICJuaW52YWxpZCIKK21zZ3N0ciAibmludmFsaWRlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNAorbXNnaWQgIm9vcnBoYW5lZCIKK21zZ3N0ciAib29ycGhlbGluIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNQorbXNnaWQgInBwcm9ibGVtIGluIgorbXNnc3RyICJwcHJvYmzobWUgYXZlYyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgInFxdW90YSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAickBpIHJhY2luZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzgKK21zZ2lkICJzc2hvdWxkIGJlIgorbXNnc3RyICJzZGV2cmFpdCDqdHJlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOQorbXNnaWQgIlNzdXBlckBiIgorbXNnc3RyICJTc3VwZXJAYiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDAKK21zZ2lkICJ1dW5hdHRhY2hlZCIKK21zZ3N0ciAidW5vbiBhdHRhY2jpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MQorbXNnaWQgInZkZXZpY2UiCittc2dzdHIgInZw6XJpcGjpcmlxdWUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQyCittc2dpZCAieGV4dGVudCIKK21zZ3N0ciAieGV4dGVudCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDMKK21zZ2lkICJ6emVyby1sZW5ndGgiCittc2dzdHIgInpkZSBsb25ndWV1ciB66XJvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NAorbXNnaWQgIjxUaGUgTlVMTCBpbm9kZT4iCittc2dzdHIgIjxMJ2ktbm9ldWQgTlVMPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTUKK21zZ2lkICI8VGhlIGJhZCBibG9ja3MgaW5vZGU+IgorbXNnc3RyICI8TCdpLW5vZXVkIGRlcyBibG9jcyBk6WZlY3R1ZXV4PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTcKK21zZ2lkICI8VGhlIHVzZXIgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8TCdpLW5vZXVkIGRlIHF1b3RhIHV0aWxpc2F0ZXVyPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTgKK21zZ2lkICI8VGhlIGdyb3VwIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPEwnaS1ub2V1ZCBkZSBxdW90YSBkZSBncm91cGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OQorbXNnaWQgIjxUaGUgYm9vdCBsb2FkZXIgaW5vZGU+IgorbXNnc3RyICI8TCdpLW5vZXVkIGR1IGNoYXJnZXVyIGQnYW1vcmNlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjAKK21zZ2lkICI8VGhlIHVuZGVsZXRlIGRpcmVjdG9yeSBpbm9kZT4iCittc2dzdHIgIjxMJ2ktbm9ldWQgZHUgculwZXJ0b2lyZSBkZSBy6WN1cOlyYXRpb24gZGUgZmljaGllcnMgZWZmYWPpcz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYxCittc2dpZCAiPFRoZSBncm91cCBkZXNjcmlwdG9yIGlub2RlPiIKK21zZ3N0ciAiPEwnaS1ub2V1ZCBkZXNjcmlwdGV1ciBkZSBncm91cGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MgorbXNnaWQgIjxUaGUgam91cm5hbCBpbm9kZT4iCittc2dzdHIgIjxMJ2ktbm9ldWQgZGUgam91cm5hbD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYzCittc2dpZCAiPFJlc2VydmVkIGlub2RlIDk+IgorbXNnc3RyICI8TCdpLW5vZXVkIHLpc2VydukgOT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTY0Cittc2dpZCAiPFJlc2VydmVkIGlub2RlIDEwPiIKK21zZ3N0ciAiPEwnaS1ub2V1ZCBy6XNlcnbpIDEwPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzQKK21zZ2lkICJyZWd1bGFyIGZpbGUiCittc2dzdHIgImZpY2hpZXIgbm9ybWFsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNgorbXNnaWQgImRpcmVjdG9yeSIKK21zZ3N0ciAiculwZXJ0b2lyZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzgKK21zZ2lkICJjaGFyYWN0ZXIgZGV2aWNlIgorbXNnc3RyICJmaWNoaWVyIGRlIHDpcmlwaOlyaXF1ZSBlbiBtb2RlIGNhcmFjdOhyZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDAKK21zZ2lkICJibG9jayBkZXZpY2UiCittc2dzdHIgImZpY2hpZXIgZGUgcOlyaXBo6XJpcXVlIGVuIG1vZGUgYmxvYyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDIKK21zZ2lkICJuYW1lZCBwaXBlIgorbXNnc3RyICJ0dWJlIG5vbW3pIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NAorbXNnaWQgInN5bWJvbGljIGxpbmsiCittc2dzdHIgImxpZW4gc3ltYm9saXF1ZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDYgbWlzYy91dWlkZC5jOjE2MgorbXNnaWQgInNvY2tldCIKK21zZ3N0ciAic29ja2V0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpbGUgdHlwZSB3aXRoIG1vZGUgMCVvIgorbXNnc3RyICJ0eXBlIGRlIGZpY2hpZXIgaW5jb25udSBhdmVjIHVuIG1vZGUgMCVvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyMworbXNnaWQgImluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJibG9jIGluZGlyZWN0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyNQorbXNnaWQgImRvdWJsZSBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiYmxvYyBkb3VibGVtZW50IGluZGlyZWN0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyNworbXNnaWQgInRyaXBsZSBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiYmxvYyB0cmlwbGVtZW50IGluZGlyZWN0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyOQorbXNnaWQgInRyYW5zbGF0b3IgYmxvY2siCittc2dzdHIgImJsb2MgZGUgdHJhZHVjdGlvbiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MzEKK21zZ2lkICJibG9jayAjIgorbXNnc3RyICJibG9jIG6wIgorCisjOiBlMmZzY2svcGFzczFiLmM6MjIyCittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBpbm9kZSBtYXAiCittc2dzdHIgImNhcnRlIGRlcyBpLW5vZXVkcyBy6WNsYW3pcyBwbHVzaWV1cnMgZm9pcyIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjYyNSBlMmZzY2svcGFzczFiLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjYW4ndCBmaW5kIGR1cF9ibGsgZm9yICVsbHVcbiIKK21zZ3N0ciAiZXJyZXVyIGludGVybmWgOiBuZSBwZXV0IHRyb3V2ZXIgZHVwX2JsayBwb3VyICVsbHVcbiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjg1MgorbXNnaWQgInJldHVybmVkIGZyb20gY2xvbmVfZmlsZV9ibG9jayIKK21zZ3N0ciAicmV0b3VybukgZGUgY2xvbmVfZmlsZV9ibG9jayIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgbG9va3VwIEVBIGJsb2NrIHJlY29yZCBmb3IgJWxsdSIKK21zZ3N0ciAiIgorImVycmV1ciBpbnRlcm5loDogaW1wb3NzaWJsZSBkZSB0cm91dmVyIGwnZW5yZWdpc3RyZW1lbnQgZGUgYmxvYyBFQSBwb3VyICVsbHUiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBpbm9kZSByZWNvcmQgZm9yICV1IgorbXNnc3RyICIiCisiZXJyZXVyIGludGVybmWgOiBpbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbCdlbnJlZ2lzdHJlbWVudCBkJ2ktbm9ldWQgRUEgcG91ciAldSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NDc1IGUyZnNjay9wYXNzMi5jOjc4MgorbXNnaWQgInJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICJsZWN0dXJlIGRlcyBibG9jcyBkZSBy6XBlcnRvaXJlIgorCisjOiBlMmZzY2svcGFzczEuYzo2MzQKK21zZ2lkICJpbi11c2UgaW5vZGUgbWFwIgorbXNnc3RyICJjYXJ0ZSBkZXMgaS1ub2V1ZHMgdXRpbGlz6XMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY0NQorbXNnaWQgImRpcmVjdG9yeSBpbm9kZSBtYXAiCittc2dzdHIgImNhcnRlIGRlcyBpLW5vZXVkcyBkZSBy6XBlcnRvaXJlcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjU1Cittc2dpZCAicmVndWxhciBmaWxlIGlub2RlIG1hcCIKK21zZ3N0ciAiY2FydGUgZGVzIGktbm9ldWRzIGRlIGZpY2hpZXJzIG5vcm1hdXgiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY2NCBtaXNjL2UyaW1hZ2UuYzoxMjY1Cittc2dpZCAiaW4tdXNlIGJsb2NrIG1hcCIKK21zZ3N0ciAiY2FydGUgZGVzIGJsb2NzIHV0aWxpc+lzIgorCisjOiBlMmZzY2svcGFzczEuYzo3MzAKK21zZ2lkICJvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgImwnb3V2ZXJ0dXJlIGRlIGwnZXhhbWVuIGRlcyBpLW5vZXVkcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzY0Cittc2dpZCAiZ2V0dGluZyBuZXh0IGlub2RlIGZyb20gc2NhbiIKK21zZ3N0ciAibCdvYnRlbnRpb24gZGUgbCdpLW5vZXVkIHN1aXZhbnQgZGVwdWlzIGwnZXhhbWVuIgorCisjOiBlMmZzY2svcGFzczEuYzoxMjc5Cittc2dpZCAiUGFzcyAxIgorbXNnc3RyICJQYXNzZaAxIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzM2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgaW5kaXJlY3QgYmxvY2tzIG9mIGlub2RlICV1IgorbXNnc3RyICJsZWN0dXJlIGRlcyBibG9jcyBpbmRpcmVjdHMgZGUgbCdpLW5vZXVkICV1IgorCisjOiBlMmZzY2svcGFzczEuYzoxMzg2Cittc2dpZCAiYmFkIGlub2RlIG1hcCIKK21zZ3N0ciAiY2FydGUgZGVzIGktbm9ldWRzIGTpZmVjdHVldXgiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MDkKK21zZ2lkICJpbm9kZSBpbiBiYWQgYmxvY2sgbWFwIgorbXNnc3RyICJpLW5vZXVkIGRhbnMgbGEgY2FydGUgZGVzIGJsb2NzIGTpZmVjdHVldXgiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MjkKK21zZ2lkICJpbWFnaWMgaW5vZGUgbWFwIgorbXNnc3RyICJjYXJ0ZSBkJ2ktbm9ldWRzIG1hZ2lxdWVzIgorCisjOiBlMmZzY2svcGFzczEuYzoxNDU2Cittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBibG9jayBtYXAiCittc2dzdHIgImNhcnRlIGRlcyBibG9jcyBy6WNsYW3pcyBwbHVzaWV1cnMgZm9pcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTU2NworbXNnaWQgImV4dCBhdHRyIGJsb2NrIG1hcCIKK21zZ3N0ciAiY2FydGUgZGVzIGJsb2NzIGQnYXR0cmlidXRzIOl0ZW5kdXMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTZsdSglYyk6IGV4cGVjdGluZyAlNmx1IGdvdCBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIgorbXNnc3RyICIlNmx1KCVjKaA6ICU2bHUgYXR0ZW5kdSwgb2J0ZW51IHBoeXMgJTZsdSAoYmxrY250ICVsbGQpXG4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjI4OTgKK21zZ2lkICJibG9jayBiaXRtYXAiCittc2dzdHIgImJpdG1hcCBkZSBibG9jcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjkwNAorbXNnaWQgImlub2RlIGJpdG1hcCIKK21zZ3N0ciAiYml0bWFwIGQnaS1ub2V1ZHMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI5MTAKK21zZ2lkICJpbm9kZSB0YWJsZSIKK21zZ3N0ciAidGFibGUgZCdpLW5vZXVkcyIKKworIzogZTJmc2NrL3Bhc3MyLmM6MjgzCittc2dpZCAiUGFzcyAyIgorbXNnc3RyICJQYXNzZaAyIgorCisjOiBlMmZzY2svcGFzczIuYzo4MDYKK21zZ2lkICJDYW4gbm90IGNvbnRpbnVlLiIKK21zZ3N0ciAiTmUgcGV1dCBjb250aW51ZXIuIgorCisjOiBlMmZzY2svcGFzczMuYzo3NworbXNnaWQgImlub2RlIGRvbmUgYml0bWFwIgorbXNnc3RyICJiaXRtYXAgZCdpLW5vZXVkcyBjb21wbOl06XMiCisKKyM6IGUyZnNjay9wYXNzMy5jOjg2Cittc2dpZCAiUGVhayBtZW1vcnkiCittc2dzdHIgIlBvaW50ZSBt6W1vaXJlIgorCisjOiBlMmZzY2svcGFzczMuYzoxNDgKK21zZ2lkICJQYXNzIDMiCittc2dzdHIgIlBhc3NloDMiCisKKyM6IGUyZnNjay9wYXNzMy5jOjM0MAorbXNnaWQgImlub2RlIGxvb3AgZGV0ZWN0aW9uIGJpdG1hcCIKK21zZ3N0ciAiYml0bWFwIGRlIGTpdGVjdGlvbiBkZXMgYm91Y2xlcyBkJ2ktbm9ldWRzIgorCisjOiBlMmZzY2svcGFzczQuYzoxOTYKK21zZ2lkICJQYXNzIDQiCittc2dzdHIgIlBhc3NloDQiCisKKyM6IGUyZnNjay9wYXNzNS5jOjc0Cittc2dpZCAiUGFzcyA1IgorbXNnc3RyICJQYXNzZaA1IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxCittc2dpZCAiKG5vIHByb21wdCkiCittc2dzdHIgIihwYXMgZCdpbnZpdGUpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyCittc2dpZCAiRml4IgorbXNnc3RyICJDb3JyaWdlciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MworbXNnaWQgIkNsZWFyIgorbXNnc3RyICJFZmZhY2VyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0Cittc2dpZCAiUmVsb2NhdGUiCittc2dzdHIgIlJlbG9jYWxpc2VyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1Cittc2dpZCAiQWxsb2NhdGUiCittc2dzdHIgIkFsbG91ZXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYKK21zZ2lkICJFeHBhbmQiCittc2dzdHIgIsl0ZW5kcmUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTcKK21zZ2lkICJDb25uZWN0IHRvIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJDb25uZWN0ZXIg4CAvbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OAorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAiQ3LpZXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkKK21zZ2lkICJTYWx2YWdlIgorbXNnc3RyICJS6WN1cOlyZXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjAKK21zZ2lkICJUcnVuY2F0ZSIKK21zZ3N0ciAiVHJvbnF1ZXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEKK21zZ2lkICJDbGVhciBpbm9kZSIKK21zZ3N0ciAiRWZmYWNlciBsJ2ktbm9ldWQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIKK21zZ2lkICJBYm9ydCIKK21zZ3N0ciAiQXJy6nRlciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MworbXNnaWQgIlNwbGl0IgorbXNnc3RyICJTY2luZGVyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgIkNvbnRpbnVlciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NQorbXNnaWQgIkNsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIgorbXNnc3RyICJDbG9uZXIgbGVzIGJsb2NzIHLpY2xhbelzIHBsdXNpZXVycyBmb2lzIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2Cittc2dpZCAiRGVsZXRlIGZpbGUiCittc2dzdHIgIkTpdHJ1aXJlIGxlIGZpY2hpZXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiU3VwcHJpbWVyIGxlcyBtZXNzYWdlcyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OAorbXNnaWQgIlVubGluayIKK21zZ3N0ciAiROlsaWVyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5Cittc2dpZCAiQ2xlYXIgSFRyZWUgaW5kZXgiCittc2dzdHIgIkVmZmFjZXIgbCdpbmRleCBIVHJlZSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MAorbXNnaWQgIlJlY3JlYXRlIgorbXNnc3RyICJSZWNy6WVyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5Cittc2dpZCAiKE5PTkUpIgorbXNnc3RyICIoQVVDVU4pIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwCittc2dpZCAiRklYRUQiCittc2dzdHIgIkNPUlJJR8kiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEKK21zZ2lkICJDTEVBUkVEIgorbXNnc3RyICJFRkZBQ8kiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIKK21zZ2lkICJSRUxPQ0FURUQiCittc2dzdHIgIlJFTE9DQUxJU8kiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMKK21zZ2lkICJBTExPQ0FURUQiCittc2dzdHIgIkFMTE9VySIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NAorbXNnaWQgIkVYUEFOREVEIgorbXNnc3RyICLJVEVORFUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUKK21zZ2lkICJSRUNPTk5FQ1RFRCIKK21zZ3N0ciAiUkVDT05ORUNUySIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NgorbXNnaWQgIkNSRUFURUQiCittc2dzdHIgIkNSyckiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcKK21zZ2lkICJTQUxWQUdFRCIKK21zZ3N0ciAiUslDVVDJUskiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgKK21zZ2lkICJUUlVOQ0FURUQiCittc2dzdHIgIlRST05RVckiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODkKK21zZ2lkICJJTk9ERSBDTEVBUkVEIgorbXNnc3RyICJJTk9ERSBFRkZBQ8kiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTAKK21zZ2lkICJBQk9SVEVEIgorbXNnc3RyICJBUlLKVMkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEKK21zZ2lkICJTUExJVCIKK21zZ3N0ciAiU0NJTkTJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyCittc2dpZCAiQ09OVElOVUlORyIKK21zZ3N0ciAiUE9VUlNVSVRFIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzCittc2dpZCAiTVVMVElQTFktQ0xBSU1FRCBCTE9DS1MgQ0xPTkVEIgorbXNnc3RyICJCTE9DUyBSyUNMQU3JUyBQTFVTSUVVUlMgRk9JUyBDTE9OyVMiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQKK21zZ2lkICJGSUxFIERFTEVURUQiCittc2dzdHIgIkZJQ0hJRVIgRMlUUlVJVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NQorbXNnaWQgIlNVUFBSRVNTRUQiCittc2dzdHIgIlNVUFBSSU3JIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2Cittc2dpZCAiVU5MSU5LRUQiCittc2dzdHIgIkTJTEnJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3Cittc2dpZCAiSFRSRUUgSU5ERVggQ0xFQVJFRCIKK21zZ3N0ciAiSU5ERVggSFRSRUUgRUZGQUPJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4Cittc2dpZCAiV0lMTCBSRUNSRUFURSIKK21zZ3N0ciAiUkVDUslFUkEiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNworbXNnaWQgIkBiIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgImxlIEBCIGRlIEBicyBwb3VyIGxlIEBnICVnIG4nZXN0IHBhcyBkYW5zIGxlIEBnLiAoQGIgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMQorbXNnaWQgIkBpIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgImxlIEBCIGQnQGlzIHBvdXIgbGUgQGcgJWcgbidlc3QgcGFzIGRhbnMgbGUgQGcuIChAYiAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgdGFibGUgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIy4gQC1leHBhbmRlZDogV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYKK21zZ2lkICIiCisiQGkgdGFibGUgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKKyJXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuIgorbXNnc3RyICIiCisibGEgdGFibGUgZCdAaXMgcG91ciBsZSBAZyAlZyBuJ2VzdCBwYXMgZGFucyBsZSBAZy4gKEBiICViKVxuIgorIkFUVEVOVElPTqA6IFBFUlRFIFPJVshSRSBERSBET05OyUVTIFBPU1NJQkxFLlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIHN1cGVyYmxvY2sgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSB2YWxpZCBleHQyL2V4dDMvZXh0NFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtLiAgSWYgdGhlIGRldmljZSBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDIvZXh0My9leHQ0XG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBzdXBlcmJsb2NrXG4KKyMuIEAtZXhwYW5kZWQ6IGlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIHN1cGVyYmxvY2s6XG4KKyMuIEAtZXhwYW5kZWQ6ICAgICBlMmZzY2sgLWIgODE5MyA8ZGV2aWNlPlxuCisjLiBALWV4cGFuZGVkOiAgb3JcbgorIy4gQC1leHBhbmRlZDogICAgIGUyZnNjayAtYiAzMjc2OCA8ZGV2aWNlPlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjIKK21zZ2lkICIiCisiXG4iCisiVGhlIEBTIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgdmFsaWQgZXh0Mi9leHQzL2V4dDRcbiIKKyJAZi4gIElmIHRoZSBAdiBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDIvZXh0My9leHQ0XG4iCisiQGYgKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBAU1xuIgorImlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIEBTOlxuIgorIiAgICBlMmZzY2sgLWIgODE5MyA8QHY+XG4iCisiIG9yXG4iCisiICAgIGUyZnNjayAtYiAzMjc2OCA8QHY+XG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJMZSBAUyBuJ2EgcHUg6nRyZSBsdSBvdSBuZSBjb250aWVudCBwYXMgdW4gQGZcbiIKKyJleHQyL2V4dDMvZXh0NCBjb3JyZWN0LiBTaSBsZSBAdiBlc3QgdmFsaWRlIGV0IHF1J2lsIGNvbnRpZW50IHLpZWxsZW1lbnRcbiIKKyJ1biBAZiBleHQyL2V4dDMvZXh0NCAoZXQgbm9uIHBhcyBkZSB0eXBlIHN3YXAsIHVmcyBvdSBhdXRyZSksXG4iCisiYWxvcnMgbGUgQFMgZXN0IGNvcnJvbXB1LCBldCB2b3VzIHBvdXJyaWV6IHRlbnRlciBkJ2V46WN1dGVyXG4iCisiZTJmc2NrIGF2ZWMgdW4gYXV0cmUgQFOgOlxuIgorIiAgICBlMmZzY2sgLWIgODE5MyA8QHY+XG4iCisiIG91XG4iCisiICAgIGUyZnNjayAtYiAzMjc2OCA8QHY+XG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBmaWxlc3lzdGVtIHNpemUgKGFjY29yZGluZyB0byB0aGUgc3VwZXJibG9jaykgaXMgJWIgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBkZXZpY2UgaXMgJWMgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IEVpdGhlciB0aGUgc3VwZXJibG9jayBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMworbXNnaWQgIiIKKyJUaGUgQGYgc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBAUykgaXMgJWIgQGJzXG4iCisiVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIEB2IGlzICVjIEBic1xuIgorIkVpdGhlciB0aGUgQFMgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCFcbiIKK21zZ3N0ciAiIgorIkxhIHRhaWxsZSBkdSBAZiAoc2Vsb24gbGUgQFMpIGVzdCBkZSAlYiBAYnNcbiIKKyJMYSB0YWlsbGUgcGh5c2lxdWUgZHUgQHYgZXN0IGRlICVjIEBic1xuIgorIkxlIEBTIG91IGxhIHRhYmxlIGRlcyBwYXJ0aXRpb25zIGVzdCBwZXV0Lep0cmUgY29ycm9tcHVloCFcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja19zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4KKyMuIEAtZXhwYW5kZWQ6IFRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbgorIy4gQC1leHBhbmRlZDogZnJvbSB0aGUgYmxvY2sgc2l6ZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDAKK21zZ2lkICIiCisiQFMgQGJfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuIgorIlRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbiIKKyJmcm9tIHRoZSBAYiBzaXplLlxuIgorbXNnc3RyICIiCisiQFMgQGJfc2l6ZaA9oCViLCBmcmFnc2l6ZaA9oCVjLlxuIgorIkNldHRlIHZlcnNpb24gZCdlMmZzY2sgbmUgc3VwcG9ydGUgcGFzIGxlcyBmcmFnbWVudHMgZGUgdGFpbGxlcyBkaWZm6XJlbnRlc1xuIgorImRlIGxhIHRhaWxsZSBkZXMgQGIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3Cittc2dpZCAiQFMgQGJzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIkBTIEBic19wZXJfZ3JvdXAgPSAlYiwgYXVyYWl0IGT7IOp0cmUgJWNcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBmaXJzdF9kYXRhX2Jsb2NrID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIKK21zZ2lkICJAUyBmaXJzdF9kYXRhX0BiID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBhdXJhaXQgZPsg6nRyZSAlY1xuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcKK21zZ2lkICIiCisiQGYgZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJMZSBAZiBuJ2EgcGFzIGQnVVVJRDsgb24gZW4gZ+lu6HJlIHVuLlxuIgorIlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogaWYgc2V2ZXJhbCBpbm9kZSBvciBibG9jayBiaXRtYXAgYmxvY2tzIG9yIHBhcnRcbiIKKyJvZiB0aGUgaW5vZGUgdGFibGUgcmVxdWlyZSByZWxvY2F0aW9uLCB5b3UgbWF5IHdpc2ggdG8gdHJ5XG4iCisicnVubmluZyBlMmZzY2sgd2l0aCB0aGUgJy1iICVTJyBvcHRpb24gZmlyc3QuICBUaGUgcHJvYmxlbVxuIgorIm1heSBsaWUgb25seSB3aXRoIHRoZSBwcmltYXJ5IGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLCBhbmRcbiIKKyJ0aGUgYmFja3VwIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIG1heSBiZSBPSy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5vdGWgOiBzaSBwbHVzaWV1cnMgaS1ub2V1ZHMgb3UgYmxvY3MgZGUgYml0bWFwcyBkZSBibG9jcyBvdVxuIgorInVuZSBwYXJ0aWUgZGUgbGEgdGFibGUgZGVzIGktbm9ldWRzIG7pY2Vzc2l0ZW50IHVuZSByZWxvY2FsaXNhdGlvbixcbiIKKyJ2b3VzIGTpc2lyZXJleiBwZXV0Lep0cmUgZXNzYXllciBlbiBwcmVtaWVyIGxpZXUgZCdleOljdXRlciBlMmZzY2tcbiIKKyJhdmVjIGwnb3B0aW9uIKugLWIgJVOguy4gTGUgcHJvYmzobWUgculzaWRlIHBldXQt6nRyZSBzZXVsZW1lbnRcbiIKKyJkYW5zIGxlcyBkZXNjcmlwdGV1cnMgZGUgZ3JvdXBlcyBkZSBibG9jcyBkdSBibG9jIHByaW1haXJlLCBhbG9yc1xuIgorInF1ZSBsZXMgZGVzY3JpcHRldXJzIGRlIGdyb3VwZXMgZGUgYmxvY3MgZGUgc2Vjb3VycyBzb250IHBldXQt6nRyZVxuIgorImVuIGJvbiDpdGF0LlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3JydXB0aW9uIGZvdW5kIGluIHN1cGVyYmxvY2suICAoJXMgPSAlTikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcxCittc2dpZCAiQ29ycnVwdGlvbiBmb3VuZCBpbiBAUy4gICglcyA9ICVOKS5cbiIKK21zZ3N0ciAiQ29ycnVwdGlvbiByZXDpcullIGRhbnMgbGUgQFMuICglc6A9oCVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBAdjogJW1cbiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgZOl0ZXJtaW5hdGlvbiBkZSBsYSB0YWlsbGUgZHUgQHYgcGh5c2lxdWWgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBjb3VudCBpbiBzdXBlcmJsb2NrIGlzICVpLCBzaG91bGQgYmUgJWouXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTgxCittc2dpZCAiQGkgY291bnQgaW4gQFMgaXMgJWksIEBzICVqLlxuIgorbXNnc3RyICJsZSBjb21wdGV1ciBkJ0BpIGRhbnMgbGUgQFMgZXN0ICVpLCBAcyAlai5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODUKK21zZ2lkICJUaGUgSHVyZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmaWxldHlwZSBmZWF0dXJlLlxuIgorbXNnc3RyICJMZSBIdXJkIG5lIHN1cHBvcnRlIHBhcyBsYSBmb25jdGlvbm5hbGl06SBmaWxldHlwZS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgYW4gaW52YWxpZCBqb3VybmFsIChpbm9kZSAlaSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhhcyBhbiBAbiBAaiAoQGkgJWkpLlxuIgorbXNnc3RyICJsZSBAUyBhIHVuIEBqIEBuIChAaaAlaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIG11bHRpcGxlIGZpbGVzeXN0ZW0gdXNlcnMgKHVuc3VwcG9ydGVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTUKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgbXVsdGlwbGUgQGYgdXNlcnMgKHVuc3VwcG9ydGVkKS5cbiIKK21zZ3N0ciAiTGUgQGogZXh0ZXJuZSBhIHBsdXNpZXVycyB1dGlsaXNhdGV1cnMgZGUgQGYgKG5vbiBzdXBwb3J06SkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbid0IGZpbmQgZXh0ZXJuYWwgam91cm5hbFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwMAorbXNnaWQgIkNhbid0IGZpbmQgZXh0ZXJuYWwgQGpcbiIKK21zZ3N0ciAiTmUgcGV1dCB0cm91dmVyIGxlIEBqIGV4dGVybmVcbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgYmFkIHN1cGVyYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDUKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgYmFkIEBTXG4iCittc2dzdHIgIkxlIEBqIGV4dGVybmUgYSB1biBAUyBjb3Jyb21wdVxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmaWxlc3lzdGVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjEwCittc2dpZCAiRXh0ZXJuYWwgQGogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIEBmXG4iCittc2dzdHIgIkxlIEBqIGV4dGVybmUgbmUgc3VwcG9ydGUgcGFzIGNlIEBmXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gam91cm5hbCBzdXBlcmJsb2NrIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgam91cm5hbCAKKyMuIEAtZXhwYW5kZWQ6IGZvcm1hdC5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjE1Cittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiAiCisiZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKyJMZSBAUyBkdSBAaiBlc3QgZGUgdHlwZSBpbmNvbm51oCVOIChub24gc3VwcG9ydOkpLlxuIgorIklsIHNlbWJsZSBxdWUgdm90cmUgY29waWUgZCdlMmZzY2sgc29pdCB1biBwZXUgdmllaWxsb3R0ZSBldC9vdSBuZSBzdXBwb3J0ZVxuIgorInBhcyBjZSBmb3JtYXQgZGUgQGouXG4iCisiSWwgZXN0IGF1c3NpIHBvc3NpYmxlIHF1ZSBsZSBAUyBkdSBAaiBzb2l0IGNvcnJvbXB1LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjMKK21zZ2lkICJAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICJMZSBAUyBkdSBAaiBlc3QgY29ycm9tcHUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzX2pvdXJuYWwgZmxhZyBpcyBjbGVhciwgYnV0IGEgam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyOAorbXNnaWQgIkBTIGhhc19AaiBmbGFnIGlzIGNsZWFyLCBidXQgYSBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJMZSBkcmFwZWF1IGhhc19AaiBkdSBAUyBuJ2VzdCBwYXMgYWN0aXbpLCBtYWlzIHVuIEBqIGVzdCBwculzZW50LlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzMworbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gQGogaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiTGUgQFMgYSBsZSBkcmFwZWF1IG5lZWRzX3JlY292ZXJ5IGFjdGl26SwgbWFpcyBuJ2EgcGFzIGRlIGRlIEBqLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBqb3VybmFsIGhhcyBkYXRhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzOAorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBAaiBoYXMgZGF0YS5cbiIKK21zZ3N0ciAiIgorImxlIGRyYXBlYXUgbmVlZHNfcmVjb3Zlcnkgbidlc3QgcGFzIGFjdGl26SwgbWFpcyBsZSBAaiBjb250aWVudCBkZXMgIgorImRvbm7pZXMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENsZWFyIGpvdXJuYWwKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQzCittc2dpZCAiQ2xlYXIgQGoiCittc2dzdHIgIkVmZmFjZXIgbGUgQGoiCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgZmlsZXN5c3RlbS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDggZTJmc2NrL3Byb2JsZW0uYzo3MDcKK21zZ2lkICJAZiBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBAZi4gICIKK21zZ3N0ciAiIgorImxlIEBmIGEgZGVzIGRyYXBlYXV4IGRlIGZvbmN0aW9ubmFsaXTpcyBhY3RpdulzIG1haXMgZXN0IHVuIEBmIGRlIHZlcnNpb24gMC4gIgorCisjLiBALWV4cGFuZGVkOiAlcyBvcnBoYW5lZCBpbm9kZSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1MworbXNnaWQgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4iCittc2dzdHIgIiVzIGwnQGkgQG8gJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCB0YWlsbGU9JUlzKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjU4Cittc2dpZCAiQEkgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiJUIgKCViKSBASSByZXDpcukgZGFucyBsJ0BpIEBvICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjMKK21zZ2lkICJBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiROlq4CBlZmZh5+kgbGUgJUIgKCViKSByZXDpcukgZGFucyBsJ0BpIEBvICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIG9ycGhhbmVkIGlub2RlICVpIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBvIEBpICVpIGluIEBTLlxuIgorbXNnc3RyICJAaSBAbyAlaSBASSBkYW5zIGxlIEBTLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIGlub2RlICVpIGluIG9ycGhhbmVkIGlub2RlIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBpICVpIGluIEBvIEBpIGxpc3QuXG4iCittc2dzdHIgIkBpICVpIEBJIGRhbnMgbGEgbGlzdGUgZGVzIEBpcyBAb3MuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzgKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiIgorIkxlIEBTIGR1IEBqIGEgdW4gZHJhcGVhdSBkZSBmb25jdGlvbm5hbGl06XMgaW5jb25udSBz6WxlY3Rpb25u6SBlbiBsZWN0dXJlICIKKyJzZXVsZS5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4MworbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICIiCisiTGUgQFMgZHUgQGogY29udGllbnQgdW4gZHJhcGVhdSBub24gcmVjb25udSBkZSBmb25jdGlvbm5hbGl06XMgIgorImluY29tcGF0aWJsZXMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4OAorbXNnaWQgIkBqIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbiIKK21zZ3N0ciAiY2V0dGUgdmVyc2lvbiBkZSBAaiBuJ2VzdCBwYXMgc3VwcG9ydOllIHBhciBjZXQgZTJmc2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBNb3Zpbmcgam91cm5hbCBmcm9tIC8lcyB0byBoaWRkZW4gaW5vZGUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTW92aW5nIEBqIGZyb20gLyVzIHRvIGhpZGRlbiBAaS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkTpcGxhY2VtZW50IGR1IEBqIOAgcGFydGlyIGRlIC8lcyB2ZXJzIGwnQGkgY2FjaOkuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIG1vdmluZyBqb3VybmFsOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIG1vdmluZyBAajogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkVSUkVVUiBsb3JzIGR1IGTpcGxhY2VtZW50IGR1IEBqoDogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRm91bmQgaW52YWxpZCBWMiBqb3VybmFsIHN1cGVyYmxvY2sgZmllbGRzIChmcm9tIFYxIGpvdXJuYWwpLlxuCisjLiBALWV4cGFuZGVkOiBDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBqb3VybmFsIHN1cGVyYmxvY2suLi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzAzCittc2dpZCAiIgorIkZvdW5kIEBuIFYyIEBqIEBTIGZpZWxkcyAoZnJvbSBWMSBAaikuXG4iCisiQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgQGogQFMuLi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkNoYW1wcyBkZSBAUyBkZSBAaiBAbiByZXDpculzICjgIHBhcnRpciBkdSBAaiBWMSkuXG4iCisiRWZmYWNlbWVudCBkZXMgY2hhbXBzIGF1LWRlbOAgZHUgQFMgZGUgQGogVjEuLi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogUnVuIGpvdXJuYWwgYW55d2F5CisjOiBlMmZzY2svcHJvYmxlbS5jOjMwOQorbXNnaWQgIlJ1biBAaiBhbnl3YXkiCittc2dzdHIgIkV46WN1dGVyIHF1YW5kIG3qbWUgbGUgQGoiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTQKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiIgorIkxlIGRyYXBlYXUgZGUgculjdXDpcmF0aW9uIG4nZXN0IHBhcyBhY3RpdukgZGFucyBsZSBAUyBkZSBzZWNvdXJzLCBsZSBAaiAiCisic2VyYSBkb25jIHF1YW5kIG3qbWUgZXjpY3V06S5cbiIKKworIy4gQC1leHBhbmRlZDogQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTkKK21zZ2lkICIiCisiQmFja2luZyB1cCBAaiBAaSBAYiBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkFyY2hpdmFnZSBkZXMgaW5mb3JtYXRpb25zIGR1IEBiIGRlIGwnQGkgZHUgQGouXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSByZXNpemVfaW5vZGUgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpcyAlTjsgc2hvdWxkIGJlIHplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzI0Cittc2dpZCAiIgorIkBmIGRvZXMgbm90IGhhdmUgcmVzaXplX0BpIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9AYnNcbiIKKyJpcyAlTjsgQHMgemVyby4gICIKK21zZ3N0ciAiIgorIkxlIEBmIG4nYSBwYXMgbCdvcHRpb24gcmVzaXplX2lub2RlIGFjdGl26WUsIG1haXMgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisiZXN0ICVOoDsgQHMgeulyby4gIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemVfaW5vZGUgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIGlub2RlIGlzIG5vbi16ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzMAorbXNnaWQgIlJlc2l6ZV9AaSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgQGkgaXMgbm9uLXplcm8uICAiCittc2dzdHIgIiIKKyJSZXNpemVfaW5vZGUgbidlc3QgcGFzIGFjdGl26SwgbWFpcyBsJ0BpIGRlIGNoYW5nZW1lbnQgZGUgdGFpbGxlIG4nZXN0IHBhcyAiCisibnVsLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSBub3QgdmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzM1Cittc2dpZCAiUmVzaXplIEBpIG5vdCB2YWxpZC4gICIKK21zZ3N0ciAiTCdAaSBkZSBjaGFuZ2VtZW50IGRlIHRhaWxsZSBuJ2VzdCBwYXMgdmFsaWRlLiAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNDAKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisiTGEgZGF0ZSBkZSBkZXJuaWVyIG1vbnRhZ2UgZHUgQFMgKCV0LFxuIgorIlx0bWFpbnRlbmFudCA9ICVUKSBlc3QgZGFucyBsZSBmdXR1ci5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0NQorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKyJMYSBkYXRlIGRlIGRlcm5p6HJlIOljcml0dXJlIGR1IEBTICgldCxcbiIKKyJcdG1haW50ZW5hbnQgPSAlVCkgZXN0IGRhbnMgbGUgZnV0dXIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBzaG91bGQgYmUgJVguICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgQHMgJVguICAiCittc2dzdHIgIkwnaW5kaWNhdGlvbiBkdSBAUyBwb3VyIGxlIEBTIGV4dGVybmUgQHMgJVguICIKKworIy4gQC1leHBhbmRlZDogQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNTQKK21zZ2lkICIiCisiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkFqb3V0IGRlIGwnaW5kaWNhdGlvbiCroGRpcmhhc2iguyBhdSBAZi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNTkKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgIgorbXNnc3RyICJMZSBjaGVja3N1bSBkdSBkZXNjcmlwdGV1ciBkZSBAZyAlZyBlc3QgJTA0eCwgZGV2cmFpdCDqdHJlICUwNHkuICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4iCittc2dzdHIgIiIKKyJMZSBkZXNjcmlwdGV1ciBkZSBAZyAlZyBlc3QgbWFycXXpIGNvbW1lIG5vbiBpbml0aWFsaXPpIGFsb3JzIHF1ZSBsYVxuIgorImZvbmN0aW9ubmFsaXTpIG4nZXN0IHBhcyBhY3RpdullLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzY5Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgIgorbXNnc3RyICIiCisiTGUgZGVzY3JpcHRldXIgZGUgQGcgJWcgYSB1biBub21icmUgaW52YWxpZGUgZCdpLW5vZXVkcyBub24gdXRpbGlz6XMgJWIuICIKKworIy4gQC1leHBhbmRlZDogTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNzQKK21zZ2lkICJMYXN0IEBnIEBiIEBCIHVuaW5pdGlhbGl6ZWQuICAiCittc2dzdHIgIkxlIEBCIGRlIEBiIGR1IGRlcm5pZXIgQGcgbidlc3QgcGFzIGluaXRpYWxpc+kuICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB0cmFuc2FjdGlvbiAlaSB3YXMgY29ycnVwdCwgcmVwbGF5IHdhcyBhYm9ydGVkLlxuIgorbXNnc3RyICIiCisiTGEgdHJhbnNhY3Rpb24gJWkgZHUgam91cm5hbCDpdGFpdCBjb3Jyb21wdWUsIGxlIHJlamV1IGEg6XTpIGFiYW5kb25u6S5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozODMKK21zZ2lkICJUaGUgdGVzdF9mcyBmbGFnIGlzIHNldCAoYW5kIGV4dDQgaXMgYXZhaWxhYmxlKS4gICIKK21zZ3N0ciAiTGUgZHJhcGVhdSB0ZXN0X2ZzIGVzdCBwb3NpdGlvbm7pIChldCBleHQ0IGVzdCBkaXNwb25pYmxlKS4gIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzg4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldClcbiIKK21zZ3N0ciAiIgorIkxhIGRhdGUgZGUgZGVybmllciBtb250YWdlIGR1IEBTIGVzdCBkYW5zIGxlIGZ1dHVyLlxuIgorIlx0KGRlIG1vaW5zIGQndW4gam91ciwgcHJvYmFibGVtZW50IOAgY2F1c2UgZCd1bmUgaG9ybG9nZSBtYXTpcmllbGxlIG1hbCAiCisiY29uZmlndXLpZSkgICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM5NAorIywgZnV6enkKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5ICIKKyJzZXQpXG4iCittc2dzdHIgIiIKKyJMYSBkYXRlIGRlIGRlcm5p6HJlIOljcml0dXJlIGR1IEBTIGVzdCBkYW5zIGxlIGZ1dHVyLlxuIgorIlx0KGRlIG1vaW5zIGQndW4gam91ciwgcHJvYmFibGVtZW50IOAgY2F1c2UgZCd1bmUgaG9ybG9nZSBtYXTpcmllbGxlIG1hbCAiCisiY29uZmlndXLpZSkgICIKKworIy4gQC1leHBhbmRlZDogT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDAwCittc2dpZCAiT25lIG9yIG1vcmUgQGIgQGcgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAiCittc2dzdHIgIiIKKyJMZSBjaGVja3N1bSBkJ3VuIG91IGRlIHBsdXNpZXVycyBkZXNjcmlwdGV1cnMgZGUgQGcgZGUgQGIgZXN0IGludmFsaWRlLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBpbm9kZXMgY291bnQgdG8gJWogKHdhcyAlaSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDUKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGlzIGNvdW50IHRvICVqICh3YXMgJWkpXG4iCittc2dzdHIgIkTpZmluaXRpb24gZHUgY29tcHRldXIgZCdAaXMgbGlicmVzIOAgJWogKOl0YWl0ICVpKVxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgYmxvY2tzIGNvdW50IHRvICVjICh3YXMgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDEwCittc2dpZCAiU2V0dGluZyBmcmVlIEBicyBjb3VudCB0byAlYyAod2FzICViKVxuIgorbXNnc3RyICJE6WZpbml0aW9uIGR1IGNvbXB0ZXVyIGRlcyBAYnMgbGlicmVzIOAgJWMgKOl0YWl0ICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBNYWtpbmcgcXVvdGEgaW5vZGUgJWkgKCVRKSBoaWRkZW4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDE1Cittc2dpZCAiTWFraW5nIEBxIEBpICVpICglUSkgaGlkZGVuLlxuIgorbXNnc3RyICJEaXNzaW11bGF0aW9uIGRlIGwnQGkgZGUgQHEgJWkgKCVRKS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDIwCittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgIgorbXNnc3RyICJMZSBAUyBhIHVuIEBiIE1NUCBpbnZhbGlkZS4gIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjUKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAiCittc2dzdHIgIkBTIGEgdW4gbnVt6XJvIG1hZ2lxdWUgTU1QIGludmFsaWRlLiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19vcGVuMjogJW1cbiIKK21zZ3N0ciAiZXh0MmZzX29wZW4yOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfY2hlY2tfZGVzYzogJW1cbiIKK21zZ3N0ciAiZXhldDJmc19jaGVja19kZXNjOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIDY0Yml0IGZpbGVzeXN0ZW1zIG5lZWRzIGV4dGVudHMgdG8gYWNjZXNzIHRoZSB3aG9sZSBkaXNrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0MAorbXNnaWQgIkBTIDY0Yml0IGZpbGVzeXN0ZW1zIG5lZWRzIGV4dGVudHMgdG8gYWNjZXNzIHRoZSB3aG9sZSBkaXNrLiAgIgorbXNnc3RyICIiCisiTGUgc3VwZXJibG9jIGQndW4gc3lzdOhtZSBkZSBmaWNoaWVyIDY0Yml0IGEgYmVzb2luIGRlcyBleHRlbnRzIHBvdXIgYWNj6WRlciAiCisi4CBsJ2Vuc2VtYmxlIGR1IGRpc3F1ZS4gIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NQorbXNnaWQgIkZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZy4gICglTiwgbWF4IHZhbHVlICVnKS4gICIKK21zZ3N0ciAiRmlyc3RfbWV0YV9iZyBlc3QgdHJvcCBncmFuZC4gKCVOLCB2YWxldXIgbWF4aW11bSAlZykuICIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDUyCittc2dpZCAiUGFzcyAxOiBDaGVja2luZyBAaXMsIEBicywgYW5kIHNpemVzXG4iCittc2dzdHIgIlBhc3NloDGgOiB26XJpZmljYXRpb24gZGVzIEBpcywgZGVzIEBicyBldCBkZXMgdGFpbGxlc1xuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NTYKK21zZ2lkICJAciBpcyBub3QgYSBAZC4gICIKK21zZ3N0ciAibCdAciBuJ2VzdCBwYXMgdW4gQGQuICIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDYxCittc2dpZCAiQHIgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgIgorbXNnc3RyICJsJ0ByIGEgdW4gZHRpbWUgKHByb2JhYmxlbWVudCBlbiByYWlzb24gZCd1biB2aWV1eCBta2UyZnMpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2VydmVkIGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjYKK21zZ2lkICJSZXNlcnZlZCBAaSAlaSAoJVEpIGhhcyBAbiBtb2RlLiAgIgorbXNnc3RyICJsJ0BpIHLpc2VydukgJWkgKCVRKSBhIHVuIG1vZGUgQG4uICIKKworIy4gQC1leHBhbmRlZDogZGVsZXRlZCBpbm9kZSAlaSBoYXMgemVybyBkdGltZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEQgQGkgJWkgaGFzIHplcm8gZHRpbWUuICAiCittc2dzdHIgImwnQGkgQEQgJWkgYSB1biBkdGltZSBudWwuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gICIKK21zZ3N0ciAibCdAaSAlaSBlc3QgdXRpbGlz6SwgbWFpcyBhIHVuIGR0aW1lLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICJsJ0BpICVpIGVzdCB1biBAZCBAei4gIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4NgorbXNnaWQgIkBnICVnJ3MgQGIgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgImxlIEBCIGRlIEBicyBkdSBAZyAlZyDgICViIEBDLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5MQorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgImxlIEBCIGQnQGlzIGR1IEBnICVnIOAgJWIgQEMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgdGFibGUgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTYKK21zZ2lkICJAZyAlZydzIEBpIHRhYmxlIGF0ICViIEBDLlxuIgorbXNnc3RyICJsYSB0YWJsZSBkJ0BpcyBkdSBAZyAlZyDgICViIEBDLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDEKK21zZ2lkICJAZyAlZydzIEBiIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJsZSBAQiAoJWIpIGRlIEBicyBkdSBAZyAlZydzIGVzdCBjb3Jyb21wdS4gIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDYKK21zZ2lkICJAZyAlZydzIEBpIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJsZSBAQiAoJWIpIGQnQGlzIGR1IEBnICVnJ3MgZXN0IGNvcnJvbXB1LiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX3NpemUgaXMgJUlzLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTExCittc2dpZCAiQGkgJWksIGlfc2l6ZSBpcyAlSXMsIEBzICVOLiAgIgorbXNnc3RyICJAaSAlaSwgaV9zaXplIGVzdCAlSXMsIEBzICVOLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX2Jsb2NrcyBpcyAlSWIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTYKK21zZ2lkICJAaSAlaSwgaV9AYnMgaXMgJUliLCBAcyAlTi4gICIKK21zZ3N0ciAiQGkgJWksIGlfQGJzIGVzdCAlSWIsIEBzICVOLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBpbiBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MjEKK21zZ2lkICJASSAlQiAoJWIpIGluIEBpICVpLiAgIgorbXNnc3RyICIlQiAoJWIpIEBJIGRhbnMgbCdAaSAlaS4gIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIG92ZXJsYXBzIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI2Cittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAibGUgJUIgKCViKSBjaGV2YXVjaGUgbGVzIG3pdGFkb25u6WVzIGRlIEBmIGRhbnMgbCdAaSAlaS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgImwnQGkgJWkgYSB1bihkZXMpIEBiKHMpIGlsbOlnYWwoYXV4KS4gIgorCisjLiBALWV4cGFuZGVkOiBUb28gbWFueSBpbGxlZ2FsIGJsb2NrcyBpbiBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgaWxsZWdhbCBAYnMgaW4gQGkgJWkuXG4iCittc2dzdHIgIlRyb3AgZGUgQGJzIGlsbOlnYXV4IGRhbnMgbCdAaSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGJhZCBibG9jayBpbm9kZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDEKK21zZ2lkICJASSAlQiAoJWIpIGluIGJhZCBAYiBAaS4gICIKK21zZ3N0ciAiJUIgKCViKSBASSBkYW5zIGwnQGkgZGVzIEBiIGTpZmVjdHVldXguICIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0NgorbXNnaWQgIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiTCdAaSBkZXMgQGJzIGTpZmVjdHVldXggYSB1bihkZXMpIEBiKHMpIGlsbOlnYWwoYXV4KS4gIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrIGluIHVzZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTEKK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiQGIgZHVwbGlxdekgb3UgZOlmZWN0dWV1eCBhY3R1ZWxsZW1lbnQgdXRpbGlz6aAhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayAlYiB1c2VkIGFzIGJhZCBibG9jayBpbm9kZSBpbmRpcmVjdCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTYKK21zZ2lkICJCYWQgQGIgJWIgdXNlZCBhcyBiYWQgQGIgQGkgaW5kaXJlY3QgQGIuICAiCittc2dzdHIgIiIKKyIlYiBk6WZlY3R1ZXV4IHV0aWxpc+kgZW4gdGFudCBxdWUgQGIgaW5kaXJlY3QgZCdAaSBkZXMgQGJzIGTpZmVjdHVldXguICIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4KKyMuIEAtZXhwYW5kZWQ6IHNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGluIHRoZSBmaWxlc3lzdGVtLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2MQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgYmFkIEBiIEBpIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuIgorInNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4iCisiaW4gdGhlIEBmLlxuIgorbXNnc3RyICIiCisiXG4iCisiTCdAaSBkZXMgQGJzIGTpZmVjdHVldXggYSBwcm9iYWJsZW1lbnQg6XTpIGNvcnJvbXB1LiBWb3VzIGRldnJpZXogYXJy6nRlclxuIgorIm1haW50ZW5hbnQgZXQgZXjpY3V0ZXIgZTJmc2NrIC1jIHBvdXIgZXhhbWluZXIgbGVzIGJsb2NzIGTpZmVjdHVldXhcbiIKKyJkYW5zIGxlIEBmLlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogSWYgdGhlIGJsb2NrIGlzIHJlYWxseSBiYWQsIHRoZSBmaWxlc3lzdGVtIGNhbiBub3QgYmUgZml4ZWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTY4Cittc2dpZCAiIgorIlxuIgorIklmIHRoZSBAYiBpcyByZWFsbHkgYmFkLCB0aGUgQGYgY2FuIG5vdCBiZSBmaXhlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNpIGxlIEBiIGVzdCBy6WVsbGVtZW50IGTpZmVjdHVldXgsIGxlIEBmIG5lIHBldXQg6nRyZSBy6XBhcukuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFlvdSBjYW4gcmVtb3ZlIHRoaXMgYmxvY2sgZnJvbSB0aGUgYmFkIGJsb2NrIGxpc3QgYW5kIGhvcGVcbgorIy4gQC1leHBhbmRlZDogdGhhdCB0aGUgYmxvY2sgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzMKK21zZ2lkICIiCisiWW91IGNhbiByZW1vdmUgdGhpcyBAYiBmcm9tIHRoZSBiYWQgQGIgbGlzdCBhbmQgaG9wZVxuIgorInRoYXQgdGhlIEBiIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlZvdXMgcG91dmV6IHN1cHByaW1lciBsZSBAYiBkZSBsYSBsaXN0ZSBkZXMgQGIgZXJyb27pcyBldCBlc3DpcmVyIHF1ZVxuIgorImxlIEBiIHNvaXQgcullbGxlbWVudCBlbiBib24g6XRhdC4gTWFpcyBpbCBuJ3kgYSBhdWN1bmUgZ2FyYW50aWUuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgKCViKSBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTc5Cittc2dpZCAiVGhlIHByaW1hcnkgQFMgKCViKSBpcyBvbiB0aGUgYmFkIEBiIGxpc3QuXG4iCittc2dzdHIgIkxlIEBTIHByaW1haXJlICglYikgZXN0IHN1ciBsYSBsaXN0ZSBkZXMgQGJzIGTpZmVjdHVldXguXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJsb2NrICViIGluIHRoZSBwcmltYXJ5IGdyb3VwIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4NAorbXNnaWQgIkJsb2NrICViIGluIHRoZSBwcmltYXJ5IEBnIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgQGIgbGlzdFxuIgorbXNnc3RyICIiCisiTGUgYmxvYyAlYiBkYW5zIGxlcyBkZXNjcmlwdGV1cnMgZGUgQGdzIHByaW1haXJlcyBlc3QgZGFucyBsYSBsaXN0ZSBkZXMgQGJzICIKKyJk6WZlY3R1ZXV4XG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3Mgc3VwZXJibG9jayAoJWIpIGlzIGJhZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1OTAKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIEBTICglYikgaXMgYmFkLlxuIgorbXNnc3RyICJBdmVydGlzc2VtZW50oDogbGUgQFMgKCViKSBkdSBAZyAlZyBlc3QgY29ycm9tcHUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIGJsb2NrICglYikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTk1Cittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBAZyBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgQGIgKCViKS5cbiIKK21zZ3N0ciAiIgorIkF2ZXJ0aXNzZW1lbnSgOiBsYSBjb3BpZSBkZXMgZGVzY3JpcHRldXJzIGRlIEBncyBkdSBAZyAlZyBhIHVuIEBiICglYikgIgorImTpZmVjdHVldXguXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFByb2dyYW1taW5nIGVycm9yPyAgYmxvY2sgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9ibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDEKK21zZ2lkICJQcm9ncmFtbWluZyBlcnJvcj8gIEBiICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfQGIuXG4iCittc2dzdHIgIiIKKyJFcnJldXIgZGUgcHJvZ3JhbW1hdGlvbqA/IEBiIG6wJWIgcmVjbGFt6SBzYW5zIGF1Y3VuZSByYWlzb24gZGFucyAiCisicHJvY2Vzc19iYWRfYmxvY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgJU4gY29udGlndW91cyBibG9jayhzKSBpbiBibG9jayBncm91cCAlZyBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjA3Cittc2dpZCAiQEEgJU4gY29udGlndW91cyBAYihzKSBpbiBAYiBAZyAlZyBmb3IgJXM6ICVtXG4iCittc2dzdHIgIkBBIGRlICVOIEBiKHMpIGNvbnRpZ3VzIGRhbnMgbGUgQGcgZGUgQGIgJWcgcG91ciAlc6A6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBiIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuIgorbXNnc3RyICJAQSBkJ3VuIHRhbXBvbiBkZSBAYiBwb3VyIGxhIHJlbG9jYWxpc2F0aW9uIGRlICVzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjE3Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbiIKK21zZ3N0ciAiUmVsb2NhbGlzYXRpb24gZHUgJXMgZHUgQGcgJWcgZGUgJWIgdmVycyAlYy4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIHRvICVjLi4uXG4iCittc2dzdHIgIlJlbG9jYWxpc2F0aW9uIHBvdXIgbGUgQGcgJWcgZHUgJXMgdmVycyAlYy4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAlYiBvZiAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjcKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBAYiAlYiBvZiAlczogJW1cbiIKK21zZ3N0ciAiQXZlcnRpc3NlbWVudKA6IGltcG9zc2libGUgZGUgbGlyZSBsZSBAYiAlYiBkZSAlc6A6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBibG9jayAlYiBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMyCittc2dpZCAiV2FybmluZzogY291bGQgbm90IHdyaXRlIEBiICViIGZvciAlczogJW1cbiIKK21zZ3N0ciAiQXZlcnRpc3NlbWVudKA6IGltcG9zc2libGUgZCfpY3JpcmUgbGUgQGIgJWIgcG91ciAlc6A6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjM3IGUyZnNjay9wcm9ibGVtLmM6MTUwMQorbXNnaWQgIkBBIEBpIEBCICglTik6ICVtXG4iCittc2dzdHIgIkBBIGR1IEBCIGQnQGlzICglTimgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0MgorbXNnaWQgIkBBIEBiIEBCICglTik6ICVtXG4iCittc2dzdHIgIkBBIGR1IEBCIGRlIEBicyAoJU4poDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4iCittc2dzdHIgIkBBIGRlIGwnaW5mb3JtYXRpb24gZHUgY29tcHRldXIgZGUgbGllbnOgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGRpcmVjdG9yeSBibG9jayBhcnJheTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGQgQGIgYXJyYXk6ICVtXG4iCittc2dzdHIgIkBBIGR1IHRhYmxlYXUgZGVzIEBicyBkZSBAZHOgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGwnZXhhbWVuIGRlcyBAaXMgKCVpKaA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsYSBib3VjbGUgZCdpdOlyYXRpb24gc3VyIGxlcyBAYnMgZGFucyBsJ0BpICVpoDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBpbm9kZSBjb3VudCBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGNvdW50PSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjcKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBpIGNvdW50IGluZm9ybWF0aW9uIChAaT0laSwgY291bnQ9JU4pOiAlbVxuIgorbXNnc3RyICIiCisiRXJyZXVyIGxvcnMgZHUgc3RvY2thZ2UgZHUgY29tcHRldXIgZCdpbmZvcm1hdGlvbiBkJ0BpIChAaT0laSwgY29tcHRldXI9IgorIiVOKaA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgZGlyZWN0b3J5IGJsb2NrIGluZm9ybWF0aW9uIChpbm9kZT0laSwgYmxvY2s9JWIsIG51bT0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcyCittc2dpZCAiRXJyb3Igc3RvcmluZyBAZCBAYiBpbmZvcm1hdGlvbiAoQGk9JWksIEBiPSViLCBudW09JU4pOiAlbVxuIgorbXNnc3RyICIiCisiRXJyZXVyIGxvcnMgZHUgc3RvY2thZ2UgZGUgbCdpbmZvcm1hdGlvbiBkdSBAYiBkZSBAZHMgKEBpPSVpLCBAYj0lYiwgbnVtPSIKKyIlTimgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsYSBsZWN0dXJlIGRlIGwnQGkgJWmgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgIgorbXNnc3RyICJsJ0BpICVpIGEgdW4gZHJhcGVhdSBpbWFnaWMgYWN0aXbpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChpbm9kZSAlaSkgaGFzIGltbXV0YWJsZVxuCisjLiBALWV4cGFuZGVkOiBvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKEBpICVpKSBoYXMgaW1tdXRhYmxlXG4iCisib3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAiCittc2dzdHIgIiIKKyJMZSBmaWNoaWVyIHNw6WNpYWwgKEB2L3NvY2tldC9maWZvL3N5bWxpbmspIChAaSAlaSkgYSBsZSBkcmFwZWF1XG4iCisiaW1tdXRhYmxlIG91IGFwcGVuZC1vbmx5IGFjdGl26S4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgY29tcHJlc3Npb24gZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGNvbXByZXNzaW9uIHN1cHBvcnQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBAY2lvbiBmbGFnIHNldCBvbiBAZiB3aXRob3V0IEBjaW9uIHN1cHBvcnQuICAiCittc2dzdHIgIiIKKyJsJ0BpICVpIGEgbGUgZHJhcGVhdSBkZSBAY2lvbiBxdWkgZXN0IGluaXRpYWxpc+kgc3VyIHVuIEBmIHNhbnMgc3VwcG9ydCBkZSAiCisiQGNpb24uICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvKSBpbm9kZSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8pIEBpICVpIGhhcyBub24temVybyBzaXplLiAgIgorbXNnc3RyICJMJ0BpIHNw6WNpYWwgKEB2L3NvY2tldC9maWZvKSAlaSBhIHVuZSB0YWlsbGUgbm9uIG51bGxlLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzEyCittc2dpZCAiQGogQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgImwnQGkgZGUgQGogbidlc3QgcGFzIHV0aWxpc+kgbWFpcyBjb250aWVudCBkZXMgZG9ubullcy4gIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzE3Cittc2dpZCAiQGogaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAibGUgQGogbidlc3QgcGFzIHVuIGZpY2hpZXIgbm9ybWFsLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSB3YXMgcGFydCBvZiB0aGUgQG8gQGkgbGlzdC4gICIKK21zZ3N0ciAibCdAaSAlaSBmYWl0IHBhcnRpZSBkZSBsYSBsaXN0ZSBkZXMgQGlzIEBvcy4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyOAorbXNnaWQgIkBpcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAiCittc2dzdHIgIiIKKyJkZXMgQGlzIHF1aSBmYWlzYWllbnQgcGFydGllIGQndW5lIGxpc3RlIGNoYe5u6WUgZCdvcnBoZWxpbnMgY29ycm9tcHVlIG9udCAiCisi6XTpIHJlcOly6XMuICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo3MzMKK21zZ2lkICJAQSByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbiIKK21zZ3N0ciAiQEEgZCd1bmUgc3RydWN0dXJlIGRlIGNvbXB0YWdlIGRlIHLpZulyZW5jZXMgKCVOKaA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGZvciBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MzgKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViIGZvciBAaSAlaS4gICIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgbGVjdHVyZSBkdSBAYiAlYiBkJ0BhIHBvdXIgbCdAaSAlaS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBiYWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0MworbXNnaWQgIkBpICVpIGhhcyBhIGJhZCBAYSBAYiAlYi4gICIKK21zZ3N0ciAibCdAaSAlaSBhIHVuIG1hdXZhaXMgQGIgJWIgZCdAYS4gIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0OAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiRXJyZXVyIGRlIGxlY3R1cmUgZHUgQGIgJWIgZCdAYSAoJW0pLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzUzCittc2dpZCAiQGEgQGIgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgQHMgJU4uICAiCittc2dzdHIgImxlIEBiICViIGQnQGEgYSB1biBjb21wdGV1ciBkZSBy6WbpcmVuY2UgJXIsIEBzICVOLiAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzU4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJFcnJldXIgZCfpY3JpdHVyZSBkdSBAYiAlYiBkJ0BhICglbSkuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyBoX2Jsb2NrcyA+IDEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzYzCittc2dpZCAiQGEgQGIgJWIgaGFzIGhfQGJzID4gMS4gICIKK21zZ3N0ciAibGUgQGIgJWIgZCdAYSBhIGhfYmxvY2tzoD6gMS4gIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjgKK21zZ2lkICJAQSBAYSBAYiAlYi4gICIKK21zZ3N0ciAiQEEgZHUgQGIgJWIgZCdAYS4gIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3MworbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gICIKK21zZ3N0ciAibGUgQGIgJWIgZCdAYSBlc3QgY29ycm9tcHUgKGNvbGxpc2lvbiBkJ2FsbG9jYXRpb24pLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChpbnZhbGlkIG5hbWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3OAorbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIG5hbWUpLiAgIgorbXNnc3RyICJsZSBAYiAlYiBkJ0BhIGVzdCBjb3Jyb21wdSAobm9tIEBuKS4gIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCB2YWx1ZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzgzCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gdmFsdWUpLiAgIgorbXNnc3RyICJsZSBAYiAlYiBkJ0BhIGVzdCBjb3Jyb21wdSAodmFsZXVyIEBuKS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyB0b28gYmlnLiAgIgorbXNnc3RyICJsJ0BpICVpIGVzdCB0cm9wIGdyYW5kLiAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgY2F1c2VzIGRpcmVjdG9yeSB0byBiZSB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5MgorbXNnaWQgIiVCICglYikgY2F1c2VzIEBkIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgImxlICVCICglYikgcmVuZCBsZSBAZCB0cm9wIGdyYW5kLiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk3Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgZmlsZSB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICJsZSAlQiAoJWIpIHJlbmQgbGUgZmljaGllciB0cm9wIGdyYW5kLiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAyCittc2dpZCAiJUIgKCViKSBjYXVzZXMgc3ltbGluayB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICJsZSAlQiAoJWIpIHJlbmQgbGUgbGllbiBzeW1ib2xpcXVlIHRyb3AgZ3JhbmQuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuIgorbXNnc3RyICIiCisibCdAaSAlaSBhIGxlIGRyYXBlYXUgSU5ERVhfRkwgYWN0aXbpIHN1ciBsZSBAZiBzYW5zIHN1cHBvcnQgZGVzIGh0cmVlcy5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IGJ1dCBpcyBub3QgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgQGQuXG4iCittc2dzdHIgImwnQGkgJWkgYSBsZSBkcmFwZWF1IElOREVYX0ZMIGFjdGl26SBtYWlzIG4nZXN0IHBhcyB1biBAZC5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIHJvb3Qgbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgaGFzIGFuIEBuIHJvb3Qgbm9kZS5cbiIKK21zZ3N0ciAibCdAaCAlaSBhIHVuIG5vZXVkIHJvb3QgQG4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjIKK21zZ2lkICJAaCAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbiIKK21zZ3N0ciAibCdAaCAlaSBkaXNwb3NlIGQndW5lIHZlcnNpb24gZGUgaGFjaGFnZSBub24gc3VwcG9ydOllICglTilcbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAibCdAaCAlaSB1dGlsaXNlIHVuIGRyYXBlYXUgZGUgbm9ldWQgcm9vdCBpbmNvbXBhdGlibGUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzMgorbXNnaWQgIkBoICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4iCittc2dzdHIgImwnQGggJWkgYSB1bmUgaGF1dGV1ciBkJ2FyYnJlICglTikgcXVpIGVzdCB0cm9wIGdyYW5kZVxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGFuIGluZGlyZWN0IGJsb2NrICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIG1ldGFkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzNworbXNnaWQgIiIKKyJCYWQgQGIgQGkgaGFzIGFuIGluZGlyZWN0IEBiICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuIgorIkBmIG1ldGFkYXRhLiAgIgorbXNnc3RyICIiCisibCdAaSBkZXMgQGJzIGTpZmVjdHVldXggYSB1biBAYiBpbmRpcmVjdCAoJWIpIHF1aSBlbnRyZSBlbiBjb25mbGl0IGF2ZWMgbGVzICIKKyJt6XRhZG9ubullcyBkdSBAZi4gIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemUgQGkgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uIgorbXNnc3RyICJMYSAocmUtKWNy6WF0aW9uIGRlIGwnQGkgZGUgY2hhbmdlbWVudCBkZSB0YWlsbGUgYSDpY2hvdemgOiAlbS4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGV4dHJhIHNpemUgKCVJUykgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0OAorbXNnaWQgIkBpICVpIGhhcyBhIGV4dHJhIHNpemUgKCVJUykgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAibCdAaSAlaSBhIHVuZSB0YWlsbGUgZXh0cmEgKCVJUykgcXVpIGVzdCBAblxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTMKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAibCdAYSBkYW5zIGwnQGkgJWkgYSB1bmUgbG9uZ3VldXIgZGUgbm9tICglTikgcXVpIGVzdCBAblxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1OAorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgImwnQGEgZGFucyBsJ0BpICVpIGEgdW5lIHZhbGV1ciBkZSBk6WNhbGFnZSAoJU4pIHF1aSBlc3QgQG5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIGJsb2NrICglTikgd2hpY2ggaXMgaW52YWxpZCAobXVzdCBiZSAwKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIEBiICglTikgd2hpY2ggaXMgQG4gKG11c3QgYmUgMClcbiIKK21zZ3N0ciAibCdAYSBkYW5zIGwnQGkgJWkgYSB1biBAYiBkZSB2YWxldXIgKCVOKSBxdWkgZXN0IEBuIChkb2l0IOp0cmUgMClcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODY4Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgImwnQGEgZGFucyBsJ0BpICVpIGEgdW5lIHZhbGV1ciBkZSB0YWlsbGUgKCVOKSBxdWkgZXN0IEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJsJ0BhIGRhbnMgbCdAaSAlaSBhIHVuIGhhY2hhZ2UgKCVOKSBxdWkgZXN0IEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzgKK21zZ2lkICJAaSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4iCittc2dzdHIgImwnQGkgJWkgZXN0IHVuICVJdCBtYWlzIGlsIHNlbWJsZSBxdSdpbCBzb2l0IGVuIGZhaXQgdW4gculwZXJ0b2lyZS5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIGV4dGVudCB0cmVlIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgQHggdHJlZSBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbCdpdOlyYXRpb24gc3VyIGwnYXJicmUgZCdAeHMgZGFucyBsJ0BpICVpoDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBpbm9kZSAlaVxuCisjLiBALWV4cGFuZGVkOiBcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODgKK21zZ2lkICIiCisiRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBAaSAlaVxuIgorIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuIgorbXNnc3RyICIiCisiTidhIHB1IGl06XJlciBzdXIgbGVzIGV4dGVudHMgZGUgbCdAaSAlaVxuIgorIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpoDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIGludmFsaWQgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTQKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIEBuIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJMJ0BpICVpIGEgdW4gZXh0ZW50IEBuXG4iCisiXHQoQGIgbG9naXF1ZSAlYywgQGIgcGh5c2lxdWUgQG4gJWIsIGxvbmd1ZXVyICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGludmFsaWQgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5OQorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIEBuIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIkwnQGkgJWkgYSB1biBleHRlbnQgQG5cbiIKKyJcdChAYiBsb2dpcXVlICVjLCBAYiBwaHlzaXF1ZSAlYiwgbG9uZ3VldXIgQG4gJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuIgorbXNnc3RyICIiCisibCdAaSAlaSBhIGxlIGRyYXBlYXUgRVhURU5UU19GTCBhY3Rpdukgc3VyIGxlIEBmIHNhbnMgc3VwcG9ydCBkZXMgZXh0ZW50cy5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IHN1cGVyYmxvY2sgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IEBTIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4iCittc2dzdHIgIiIKKyJMJ0BpICVpIGEgdW4gZm9ybWF0IGQnZXh0ZW50LCBtYWlzIGxlIEBTIG4nYSBwYXMgbGEgZm9uY3Rpb25uYWxpdOkgRVhURU5UU1xuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbiIKK21zZ3N0ciAiTCdAaSAlaSBuJ2EgcGFzIGxlIGRyYXBlYXUgRVhURU5UX0ZMLCBtYWlzIGEgdW4gZm9ybWF0IGQnZXh0ZW50XG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIKK21zZ3N0ciAiTGUgZmFzdCBzeW1saW5rICVpIGEgbGUgZHJhcGVhdSBFWFRFTlRfRkwgYWN0aXbpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI0Cittc2dpZCAiIgorIkBpICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJMJ0BpICVpIGEgZGVzIGV4dGVudHMgaG9ycyBkZSBwb3J06WVcbiIKKyJcdChAYiBsb2dpcXVlIEBuICVjLCBAYiBwaHlzaXF1ZSAlYiwgbG9uZ3VldXIgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI4Cittc2dpZCAiQGkgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbiIKK21zZ3N0ciAiTCdAaSAlaSBhIHVuIG5vZXVkIGQnZXh0ZW50IGludmFsaWRlIChibGsgJWIsIGxibGsgJWMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBAYiBAQjogJW1cbiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgY29udmVyc2lvbiBkdSBAQiBkZSBAYiBkZSBzb3VzLWNsdXN0ZXKgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzOAorbXNnaWQgIkBxIEBpIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkwnQGkgZGUgQHEgbidlc3QgcGFzIHVuIGZpY2hpZXIgbm9ybWFsLiAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0MworbXNnaWQgIkBxIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJMJ0BpIGRlIEBxIG4nZXN0IHBhcyB1dGlsaXPpIG1haXMgY29udGllbnQgZGVzIGRvbm7pZXMuICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDgKK21zZ2lkICJAcSBAaSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgIgorbXNnc3RyICJMJ0BpIGRlIEBxIGVzdCB2aXNpYmxlIHBhciBsJ3V0aWxpc2F0ZXVyLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgbG9va3MgaW52YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTMKK21zZ2lkICJUaGUgYmFkIEBiIEBpIGxvb2tzIEBuLiAgIgorbXNnc3RyICJMJ0BpIGRlcyBAYnMgZOlmZWN0dWV1eCBhIGwnYWlyIEBuLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTgKK21zZ2lkICIiCisiQGkgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViKVxuIgorbXNnc3RyICIiCisiTCdAaSAlaSBhIHVuIGV4dGVudCBkZSB0YWlsbGUgbnVsbGVcbiIKKyJcdChAYiBsb2dpcXVlIEBuICVjLCBAYiBwaHlzaXF1ZSAlYilcbiIKKworIy4gQC1leHBhbmRlZDogSW50ZXJpb3IgZXh0ZW50IG5vZGUgbGV2ZWwgJU4gb2YgaW5vZGUgJWk6XG4KKyMuIEAtZXhwYW5kZWQ6IExvZ2ljYWwgc3RhcnQgJWIgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAlYyBhdCBuZXh0IGxldmVsLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2NQorbXNnaWQgIiIKKyJJbnRlcmlvciBAeCBub2RlIGxldmVsICVOIG9mIEBpICVpOlxuIgorIkxvZ2ljYWwgc3RhcnQgJWIgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAlYyBhdCBuZXh0IGxldmVsLiAgIgorbXNnc3RyICIiCisiRXh0ZW50IGludOlyaWV1ciBkZSBuaXZlYXUgZGUgbm9ldWQgJU4gZGUgbCdpLW5vZXVkICVpOlxuIgorIkxlIGTpYnV0IGxvZ2lxdWUgJWIgbmUgY29ycmVzcG9uZCBwYXMgYXUgZOlidXQgbG9naXF1ZSAlYyBkdSBuaXZlYXUgIgorInN1aXZhbnQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBlbmQgb2YgZXh0ZW50IGV4Y2VlZHMgYWxsb3dlZCB2YWx1ZVxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3MQorbXNnaWQgIiIKKyJAaSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiRGFucyBsJ0BpICVpLCBsYSBmaW4gZGUgbCdleHRlbnQgZOlwYXNzZSBsYSB2YWxldXIgYXV0b3Jpc+llXG4iCisiXHQoQGIgbG9naXF1ZSAlYywgQGIgcGh5c2lxdWUgJWIsIGxvbmd1ZXVyICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgYmxvY2sgJWIgc2hvdWxkIGJlIGF0IGJsb2NrICVjLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3NworbXNnaWQgIkBkIEBpICVpIEBiICViIHNob3VsZCBiZSBhdCBAYiAlYy4gICIKK21zZ3N0ciAiQGkgZGUgQGQgJWkgYSB1biBtYXV2YWlzIEBiICViIGQnQGEuICIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBleHRlbnQgbWFya2VkIHVuaW5pdGlhbGl6ZWQgYXQgYmxvY2sgJWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBpICVpIGhhcyBAeCBtYXJrZWQgdW5pbml0aWFsaXplZCBhdCBAYiAlYy4gICIKK21zZ3N0ciAibCdAaSBkZSBAZCAlaSBhIHVuIEB4IG1hcnF16SBub24gaW5pdGlhbGlz6SBhdSBAYiAlYy4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBsb2dpY2FsIGJsb2NrICViIChwaHlzaWNhbCBibG9jayAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuCisjLiBALWV4cGFuZGVkOiBXaWxsIGZpeCBpbiBwYXNzIDFCLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4NworbXNnaWQgIiIKKyJAaSAlaSBsb2dpY2FsIEBiICViIChwaHlzaWNhbCBAYiAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuIgorIldpbGwgZml4IGluIHBhc3MgMUIuXG4iCittc2dzdHIgIiIKKyJsJ0BpICVpIEBiIGxvZ2lxdWUgJWIgKEBiIHBoeXNpcXVlICVjKSB2aW9sZSBsZXMgcuhnbGVzIGQnYWxsb2NhdGlvbiBkZSAiCisiY2x1c3Rlci5cbiIKKyJTZXJhIGNvcnJpZ+kgcGVuZGFudCBsYSBwYXNzZSAxQi5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBibG9ja3MgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIGlub2RlLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTk0Cittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBAYnMgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIEBpLi4uXG4iCisiUGFzcyAxQjogUmVzY2FubmluZyBmb3IgQG0gQGJzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFeOljdXRpb24gZGUgcGFzc2VzIGFkZGl0aW9ubmVsbGVzIHBvdXIgculzb3VkcmUgbGVzIHByb2Js6G1lcyBkZSBAYnMgIgorInLpY2xhbelzIHBhciBwbHVzIGQndW4gQGkuLi5cbiIKKyJQYXNzZaAxQqA6IHLpLWV4YW1lbiBwb3VyIGxlcyBAYnMgQG1cbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAlaToKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAbSBAYihzKSBpbiBAaSAlaToiCittc2dzdHIgIkBiKHMpIEBtIGRhbnMgbCdAaSAlaaA6IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4iCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGwnZXhhbWVuIGRlcyBpLW5vZXVkcyAoJWkpoDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKGlub2RlX2R1cF9tYXApOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGkgQEIgKEBpX2R1cF9tYXApOiAlbVxuIgorbXNnc3RyICJAQSBkdSBAQiBkJ0BpcyAoaV9ub2RlX2R1cF9tYXApoDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGVzIGl06XJhdGlvbnMgc3VyIGxlcyBAYnMgZGFucyBsJ0BpICVpICglcymgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzAgZTJmc2NrL3Byb2JsZW0uYzoxMzQ1Cittc2dpZCAiRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBAYSBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJFcnJldXIgZCdhanVzdGVtZW50IGRlIHJlZmNvdW50IHBvdXIgbGUgQGIgJWIgZCdAYSAoQGkgJWkpoDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzNQorbXNnaWQgIlBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBAaXMgd2l0aCBAbSBAYnNcbiIKK21zZ3N0ciAiUGFzc2UgMUOgOiBleGFtZW4gZGVzIHLpcGVydG9pcmVzIHBvdXIgbGVzIEBpcyBhdmVjIGRlcyBAYnMgQG1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDQxCittc2dpZCAiUGFzcyAxRDogUmVjb25jaWxpbmcgQG0gQGJzXG4iCittc2dzdHIgIlBhc3NlIDFEoDogYWp1c3RlbWVudCBkZXMgQGJzIEBtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpbGUgJVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKSBcbgorIy4gQC1leHBhbmRlZDogICBoYXMgJXIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDQ2Cittc2dpZCAiIgorIkZpbGUgJVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKSBcbiIKKyIgIGhhcyAlciBAbSBAYihzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbiIKK21zZ3N0ciAiIgorIkxlIGZpY2hpZXIgJVEgKEBpIG6wJWksIGRhdGUgZGUgbW9kaWZpY2F0aW9uICVJTSlcbiIKKyIgIGEgJXIgQGIocykgQG0sIHBhcnRhZ+lzIGF2ZWMgJU4gZmljaGllcihzKaA6XG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0JVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTIKK21zZ2lkICJcdCVRIChAaSAjJWksIG1vZCB0aW1lICVJTSlcbiIKK21zZ3N0ciAiXHQlUSAoQGkgbrAlaSwgZGF0ZSBkZSBtb2RpZmljYXRpb24gJUlNKVxuIgorCisjLiBALWV4cGFuZGVkOiBcdDxmaWxlc3lzdGVtIG1ldGFkYXRhPlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTcKK21zZ2lkICJcdDxAZiBtZXRhZGF0YT5cbiIKK21zZ3N0ciAiXHQ8bel0YWRvbm7pZSBkdSBAZj5cbiIKKworIy4gQC1leHBhbmRlZDogKFRoZXJlIGFyZSAlTiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjIKK21zZ2lkICIiCisiKFRoZXJlIGFyZSAlTiBAaXMgY29udGFpbmluZyBAbSBAYnMuKVxuIgorIlxuIgorbXNnc3RyICIiCisiKElsIHkgYSAlTiBAaXMgY29udGVuYW50IGRlcyBAYnMgQG0uKVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY3Cittc2dpZCAiIgorIkBtIEBicyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiQGJzIEBtIGTpauAg6XTpIHLpYXNzaWdu6XMgb3UgY2xvbulzLlxuIgorIlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY2xvbmUgZmlsZTogJW1cbiIKK21zZ3N0ciAiTidhIHB1IGNsb25lciBsZSBmaWNoaWVyoDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4NgorbXNnaWQgIlBhc3MgMjogQ2hlY2tpbmcgQGQgc3RydWN0dXJlXG4iCittc2dzdHIgIlBhc3NlIDKgOiB26XJpZmljYXRpb24gZGUgbGEgc3RydWN0dXJlIGRlcyBAZHNcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBpbm9kZSBudW1iZXIgZm9yICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJAbiBAaSBudW1iZXIgZm9yICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiTnVt6XJvIGQnQGkgQG4gcG91ciCroC6guyBkYW5zIGwnQGkgZGUgQGQgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGludmFsaWQgaW5vZGUgIzogJURpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTYKK21zZ2lkICJARSBoYXMgQG4gQGkgIzogJURpLlxuIgorbXNnc3RyICJsJ0BFIGEgdW4gbrAgZCdAaSBAbqA6ICVEaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgJURpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDEKK21zZ2lkICJARSBoYXMgQEQvdW51c2VkIEBpICVEaS4gICIKK21zZ3N0ciAibCdARSBhIHVuIEBpIEBEL25vbiB1dGlsaXPpICVEaS4gIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA2Cittc2dpZCAiQEUgQEwgdG8gJy4nICAiCittc2dzdHIgImwnQEUgQEwgdmVycyCroC6guyAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcG9pbnRzIHRvIGlub2RlICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExMQorbXNnaWQgIkBFIHBvaW50cyB0byBAaSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIEBiLlxuIgorbXNnc3RyICJsJ0BFIHBvaW50ZSB2ZXJzIGwnQGkgKCVEaSkgbG9jYWxpc+kgZGFucyB1biBAYiBk6WZlY3R1ZXV4LlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byBkaXJlY3RvcnkgJVAgKCVEaSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExNgorbXNnaWQgIkBFIEBMIHRvIEBkICVQICglRGkpLlxuIgorbXNnc3RyICJsJ0BFIEBMIHZlcnMgbGUgQGQgJVAgKCVEaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIHRoZSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjEKK21zZ2lkICJARSBATCB0byB0aGUgQHIuXG4iCittc2dzdHIgImwnQEUgQEwgdmVycyBsJ0ByLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEyNgorbXNnaWQgIkBFIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4iCittc2dzdHIgImwnQEUgYSB1biBjYXJhY3TocmUgaWxs6WdhbCBkYW5zIHNvbiBub20uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICKroC6guyBtYW5xdWFudCBkYW5zIGwnQGkgZGUgQGQgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4uJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIqugLi6guyBtYW5xdWFudCBkYW5zIGwnQGkgZGUgQGQgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpcnN0IGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApIHNob3VsZCBiZSAnLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQxCittc2dpZCAiRmlyc3QgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgKCVwKSBAcyAnLidcbiIKK21zZ3N0ciAiTGEgcHJlbWnocmUgQGUgq6AlRG6guyAoQGk9JURpKSBkYW5zIGwnQGkgZGUgQGQgJWkgKCVwKSBAcyCroC6gu1xuIgorCisjLiBALWV4cGFuZGVkOiBTZWNvbmQgZW50cnkgJyVEbicgKGlub2RlPSVEaSkgaW4gZGlyZWN0b3J5IGlub2RlICVpIHNob3VsZCBiZSAnLi4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0NgorbXNnaWQgIlNlY29uZCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSBAcyAnLi4nXG4iCittc2dzdHIgIkxhIHNlY29uZGUgQGUgq6AlRG6guyAoQGk9JURpKSBkYW5zIGwnQGkgZGUgQGQgJWkgQHMgq6AuLqC7XG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmFkZHIgZm9yIGlub2RlICVpICglUSkgaXMgJUlGLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTUxCittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmFkZHIgQEYgJUlGLCBAcyB66XJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1NgorbXNnaWQgImlfZmlsZV9hY2wgQEYgJUlmLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZpbGVfYWNsIEBGICVJZiwgQHMgeulyby5cbiIKKworIy4gQC1leHBhbmRlZDogaV9kaXJfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZCwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2MQorbXNnaWQgImlfZGlyX2FjbCBARiAlSWQsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZGlyX2FjbCBARiAlSWQsIEBzIHrpcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnJhZyBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2NgorbXNnaWQgImlfZnJhZyBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mcmFnIEBGICVOLCBAcyB66XJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZzaXplIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTcxCittc2dpZCAiaV9mc2l6ZSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mc2l6ZSBARiAlTiwgQHMgeulyby5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlICglSW0pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzYKK21zZ2lkICJAaSAlaSAoJVEpIGhhcyBAbiBtb2RlICglSW0pLlxuIgorbXNnc3RyICJsJ0BpICVpICglUSkgYSB1biBtb2RlIEBuICglSW0pLlxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGRpcmVjdG9yeSBjb3JydXB0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTgxCittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IEBkIGNvcnJ1cHRlZFxuIgorbXNnc3RyICJAaSBkZSBAZCAlaSwgJUIsIGTpcGxhY2VtZW50ICVOoDogQGQgY29ycm9tcHVcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODYKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAiQGkgZGUgQGQgJWksICVCLCBk6XBsYWNlbWVudCAlTqA6IG5vbSBkZSBmaWNoaWVyIHRyb3AgbG9uZ1xuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTEKK21zZ2lkICJAZCBAaSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAiCittc2dzdHIgImwnQGkgZGUgQGQgJWkgYSB1biAlQiBub24gYWxsb3XpLiAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIicuJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgImwnQGUgZGUgQGQgq6AuoLsgZGFucyBsJ0BpIGRlIEBkICVpIG4nZXN0IHBhcyB0ZXJtaW7pZSBwYXMgdW4gTlVMTFxuIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4uJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgImwnQGUgZGUgQGQgq6AuLqC7IGRhbnMgbCdAaSBkZSBAZCAlaSBuJ2VzdCBwYXMgdGVybWlu6WUgcGFzIHVuIE5VTExcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGNoYXJhY3RlciBkZXZpY2UuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwNgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgY2hhcmFjdGVyIEB2LlxuIgorbXNnc3RyICJsJ0BpICVpICglUSkgZXN0IHVuIEB2IGRlIGNhcmFjdOhyZSBASS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGJsb2NrIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjExCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBAYiBAdi5cbiIKK21zZ3N0ciAibCdAaSAlaSAoJVEpIGVzdCB1biBAdiBkZSBAYiBASS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTYKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4nIEBlLlxuIgorbXNnc3RyICJsJ0BFIGVzdCB1biBkb3VibG9uIGRlIGwnQGUgq6AuoLsuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgZHVwbGljYXRlICcuLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyMQorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLi4nIEBlLlxuIgorbXNnc3RyICJsJ0BFIGVzdCB1biBkb3VibG9uIGRlIGwnQGUgq6AuLqC7LlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjYgZTJmc2NrL3Byb2JsZW0uYzoxNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVybmFsIGVycm9yOiBjb3VsZG4ndCBmaW5kIGRpcl9pbmZvIGZvciAlaS5cbiIKK21zZ3N0ciAiRXJyZXVyIGludGVybmWgOiBpbXBvc3NpYmxlIGRlIHRyb3V2ZXIgZGlyX2luZm8gcG91ciAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgcmVjX2xlbiBvZiAlRHIsIHNob3VsZCBiZSAlTi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjMxCittc2dpZCAiQEUgaGFzIHJlY19sZW4gb2YgJURyLCBAcyAlTi5cbiIKK21zZ3N0ciAibCdARSBhIHVuIHJlY19sZW4gZGUgJURyLCBAcyAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IHN0cnVjdHVyZTogJW1cbiIKK21zZ3N0ciAiQEEgZCd1bmUgc3RydWN0dXJlIGljb3VudKA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGl0ZXJhdGluZyBvdmVyIGRpcmVjdG9yeSBibG9ja3M6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpdGVyYXRpbmcgb3ZlciBAZCBAYnM6ICVtXG4iCittc2dzdHIgIkVycmV1ciBkJ2l06XJhdGlvbiBzdXIgbGVzIEBicyBkZSBAZKA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0NgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiRXJyZXVyIGRlIGxlY3R1cmUgZHUgQGIgJWIgZGUgQGQgKEBpICVpKaA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1MQorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiRXJyZXVyIGQn6WNyaXR1cmUgZHUgQGIgJWIgZGUgQGQgKEBpICVpKaA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9jayBmb3IgaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIG5ldyBAZCBAYiBmb3IgQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiQEEgZCd1biBub3V2ZWF1IEBiIGRlIEBkIHBvdXIgbCdAaSAlaSAoJXMpoDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGVhbGxvY2F0aW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVhbGxvY2F0aW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsYSBk6XNhbGxvY2F0aW9uIGRlIGwnQGkgJWmgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBlIGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4iCittc2dzdHIgImwnQGUgZGUgQGQgcG91ciCroC6guyBkYW5zICVwICglaSkgZXN0IGdyYW5kZS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIEZJRk8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3MQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAibCdAaSAlaSAoJVEpIGVzdCB1biBGSUZPIEBJLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgc29ja2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNzYKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIHNvY2tldC5cbiIKK21zZ3N0ciAibCdAaSAlaSAoJVEpIGVzdCB1bmUgc29ja2V0IEBJLlxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHRvICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODEKK21zZ2lkICJTZXR0aW5nIGZpbGV0eXBlIGZvciBARSB0byAlTi5cbiIKK21zZ3N0ciAiROlmaW5pdGlvbiBkdSB0eXBlIGRlIGZpY2hpZXIgcG91ciBsJ0BFIOAgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgc2hvdWxkIGJlICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjg2Cittc2dpZCAiQEUgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgQHMgJU4pLlxuIgorbXNnc3RyICJsJ0BFIGEgdW4gdHlwZSBkZSBmaWNoaWVyIGluY29ycmVjdCAo6XRhaXQgJUR0LCBAcyAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGZpbGV0eXBlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjkxCittc2dpZCAiQEUgaGFzIGZpbGV0eXBlIHNldC5cbiIKK21zZ3N0ciAibCdARSBhIHVuIHR5cGUgZGUgZmljaGllciBpbml0aWFsaXPpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIHplcm8tbGVuZ3RoIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5NgorbXNnaWQgIkBFIGhhcyBhIEB6IG5hbWUuXG4iCittc2dzdHIgImwnQEUgYSB1biBub20gQHouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFN5bWxpbmsgJVEgKGlub2RlICMlaSkgaXMgaW52YWxpZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzAxCittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiTGUgbGllbiBzeW1ib2xpcXVlICVRIChAaSBusCVpKSBlc3QgQG4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDYKK21zZ2lkICJAYSBAYiBARiBAbiAoJUlmKS5cbiIKK21zZ3N0ciAibGUgQGIgZCdAYSBARiBAbiAoJUlmKS5cbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTEKK21zZ2lkICJAZiBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBAUy5cbiIKK21zZ3N0ciAiIgorImxlIEBmIGNvbnRpZW50IGRlIGdyYW5kcyBmaWNoaWVycywgbWFpcyBuJ2EgcGFzIGxlIGRyYXBlYXUgTEFSR0VfRklMRSBhY3RpdukgIgorImRhbnMgbGUgQFMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTYKK21zZ2lkICJAcCBAaCAlZDogJUIgbm90IHJlZmVyZW5jZWRcbiIKK21zZ3N0ciAiQHAgbCdAaCAlZKA6ICVCIG4nZXN0IHBhcyBy6WbpcmVuY+lcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzIxCittc2dpZCAiQHAgQGggJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbiIKK21zZ3N0ciAiQHAgbCdAaCAlZKA6ICVCIGVzdCBy6WbpcmVuY+kgZGV1eCBmb2lzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMyNgorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4iCittc2dzdHIgIkBwIGwnQGggJWSgOiAlQiBhIHVuIGhhY2hhZ2UgbWluaW5hbCBlcnJvbulcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMxCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbiIKK21zZ3N0ciAiQHAgbCdAaCAlZKA6ICVCIGEgdW4gaGFjaGFnZSBtYXhpbWFsIGVycm9u6VxuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMzYKK21zZ2lkICJAbiBAaCAlZCAoJXEpLiAgIgorbXNnc3RyICJAaCAlZCBAbiAoJXEpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSk6IGJhZCBibG9jayBudW1iZXIgJWIuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM0MAorbXNnaWQgIkBwIEBoICVkICglcSk6IGJhZCBAYiBudW1iZXIgJWIuXG4iCittc2dzdHIgIkBwIGwnQGggJWQgKCVxKaA6IG51belybyBkZSBAYiAlYiBlcnJvbukuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiByb290IG5vZGUgaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHAgQGggJWQ6IHJvb3Qgbm9kZSBpcyBAblxuIgorbXNnc3RyICJAcCBsJ0BoICVkoDogbGUgbm9ldWQgcm9vdCBlc3QgQG5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGxpbWl0ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzU1Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBsaW1pdCAoJU4pXG4iCittc2dzdHIgIkBwIGwnQGggJWSgOiAlQiBhIHVuZSBsaW1pdGUgQG4gKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgY291bnQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjAKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGNvdW50ICglTilcbiIKK21zZ3N0ciAiQHAgbCdAaCAlZKA6ICVCIGEgdW4gY29tcHRldXIgQG4gKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2NQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbiIKK21zZ3N0ciAiQHAgbCdAaCAlZKA6ICVCIGEgdW5lIHRhYmxlIGRlIGhhY2hhZ2Ugbm9uIG9yZG9ubullXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBkZXB0aCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICJAcCBsJ0BoICVkoDogJUIgYSB1bmUgcHJvZm9uZGV1ciBAbiAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzUKK21zZ2lkICJEdXBsaWNhdGUgQEUgZm91bmQuICAiCittc2dzdHIgIkBFIGRvdWJsb24gcmVw6XLpZS4gIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4KKyMuIEAtZXhwYW5kZWQ6IFJlbmFtZSB0byAlcworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgwCisjLCBuby1jLWZvcm1hdAorbXNnaWQgIiIKKyJARSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuIgorIlJlbmFtZSB0byAlcyIKK21zZ3N0ciAiIgorIkBFIGEgdW4gbm9tIGRlIGZpY2hpZXIgcXVpIG4nZXN0IHBhcyB1bmlxdWUuXG4iCisiUmVub21tYWdlIGVuICVzIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgZm91bmQuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODUKK21zZ2lkICIiCisiRHVwbGljYXRlIEBlICclRG4nIGZvdW5kLlxuIgorIlx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJAZSAnJURuJyBkb3VibG9uIHJlcOly6S5cbiIKKyJcdE1hcnF1YWdlIGRlICVwICglaSkgY29tbWUgZGV2YW50IOp0cmUgcmUtY29uc3RydWl0LlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Jsb2Nrc19oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5MAorbXNnaWQgImlfYmxvY2tzX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2Jsb2Nrc19oaSBARiAlTiwgQHMgeulyby5cbiIKKworIy4gQC1leHBhbmRlZDogVW5leHBlY3RlZCBibG9jayBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk1Cittc2dpZCAiVW5leHBlY3RlZCBAYiBpbiBAaCAlZCAoJXEpLlxuIgorbXNnc3RyICJAYiBkYW5zIGwnQGggJWQgKCVxKSBpbmF0dGVuZHUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgaW4gZ3JvdXAgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5OQorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGluIEBnICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuIgorbXNnc3RyICJARSBy6WbpcmVuY2UgbCdAaSAlRGkgZGFucyBsZSBAZyAlZyBv+SBfSU5PREVfVU5JTklUIGVzdCBwb3NpdGlvbm7pLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGZvdW5kIGluIGdyb3VwICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDQKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBmb3VuZCBpbiBAZyAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbiIKK21zZ3N0ciAiIgorIkBFIHLpZulyZW5jZSBsJ0BpICVEaSB0cm91dukgZGFucyBsYSB6b25lIGQnaS1ub2V1ZHMgbm9uIHV0aWxpc+lzIGR1IEBnICVnLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDA5Cittc2dpZCAiaV9maWxlX2FjbF9oaSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9maWxlX2FjbF9oaSBARiAlTiwgQHMgeulyby5cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxNgorbXNnaWQgIlBhc3MgMzogQ2hlY2tpbmcgQGQgY29ubmVjdGl2aXR5XG4iCittc2dzdHIgIlBhc3NloDOgOiB26XJpZmljYXRpb24gZGUgbGEgY29ubmVjdGl2aXTpIGRlcyBAZHNcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjEKK21zZ2lkICJAciBub3QgYWxsb2NhdGVkLiAgIgorbXNnc3RyICJsJ0ByIG4nZXN0IHBhcyBhbGxvdekuICIKKworIy4gQC1leHBhbmRlZDogTm8gcm9vbSBpbiBsb3N0K2ZvdW5kIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDI2Cittc2dpZCAiTm8gcm9vbSBpbiBAbCBAZC4gICIKK21zZ3N0ciAiUGFzIGQnZXNwYWNlIGRhbnMgbGUgQGQgQGwuICIKKworIy4gQC1leHBhbmRlZDogVW5jb25uZWN0ZWQgZGlyZWN0b3J5IGlub2RlICVpICglcClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuY29ubmVjdGVkIEBkIEBpICVpICglcClcbiIKK21zZ3N0ciAiQGkgJWkgKCVwKSBkZSBAZCBub24gY29ubmVjdOlcbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzYKK21zZ2lkICIvQGwgbm90IGZvdW5kLiAgIgorbXNnc3RyICIvQGwgbidhIHBhcyDpdOkgdHJvdXbpLiAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBzaG91bGQgYmUgJXEgKCVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQxCittc2dpZCAiJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIEBzICVxICglZCkuXG4iCittc2dzdHIgIqugLi6guyBkYW5zICVRICglaSkgZXN0ICVQICglaiksIEBzICVxICglZCkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBvciBub24tZXhpc3RlbnQgL2xvc3QrZm91bmQuICBDYW5ub3QgcmVjb25uZWN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDYKK21zZ2lkICJCYWQgb3Igbm9uLWV4aXN0ZW50IC9AbC4gIENhbm5vdCByZWNvbm5lY3QuXG4iCittc2dzdHIgIi9AbCBlcnJvbukgb3UgaW5leGlzdGVudC4gTmUgcGV1dCByZWNvbm5lY3Rlci5cbiIKKworIy4gQC1leHBhbmRlZDogQ291bGQgbm90IGV4cGFuZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBleHBhbmQgL0BsOiAlbVxuIgorbXNnc3RyICJOZSBwZXV0IOl0ZW5kcmUgL0BsoDogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWNvbm5lY3QgJWk6ICVtXG4iCittc2dzdHIgIk5lIHBldXQgcmVjb25uZWN0ZXIgJWmgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgdGVudGF0aXZlIGRlIHJlcOlyYWdlIGRlIC9AbKA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfYmxvY2s6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BiOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X0BioDogJW0gbG9ycyBkZSBsYSB0ZW50YXRpdmUgZGUgY3LpYXRpb24gZHUgQGQgL0BsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfaW5vZGU6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BpOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X0BpoDogJW0gbG9ycyBkZSBsYSB0ZW50YXRpdmUgZGUgY3LpYXRpb24gZHUgQGQgL0BsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X2Rpcl9AYjogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IEBkIEBiXG4iCittc2dzdHIgIiIKKyJleHQyZnNfbmV3X2Rpcl9AYqA6ICVtIGxvcnMgZGUgbGEgdGVudGF0aXZlIGRlIGNy6WF0aW9uIGQndW4gbm91dmVhdSBAYiBkZSAiCisiQGRcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazogJW0gd2hpbGUgd3JpdGluZyB0aGUgZGlyZWN0b3J5IGJsb2NrIGZvciAvbG9zdCtmb3VuZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gd2hpbGUgd3JpdGluZyB0aGUgQGQgQGIgZm9yIC9AbFxuIgorbXNnc3RyICIiCisiZXh0MmZzX3dyaXRlX2Rpcl9AYqA6ICVtIGxvcnMgZGUgbGEgdGVudGF0aXZlIGQn6WNyaXR1cmUgZHUgQGIgZGUgQGQgcG91ciAvIgorIkBsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGFkanVzdGluZyBpbm9kZSBjb3VudCBvbiBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgYWRqdXN0aW5nIEBpIGNvdW50IG9uIEBpICVpXG4iCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGwnYWp1c3RlbWVudCBkdSBjb21wdGV1ciBkJ0BpIHN1ciBsJ0BpICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkbid0IGZpeCBwYXJlbnQgb2YgaW5vZGUgJWk6ICVtXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKyJOJ2EgcHUgY29ycmlnZXIgbGUgcGFyZW50IGRlIGwnQGkgJWmgOiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBkaXJlY3RvcnkgZW50cnlcbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgQGQgQGVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk4nYSBwdSBjb3JyaWdlciBsZSBwYXJlbnQgZGUgbCdAaSAlaaA6IG4nYSBwdSB0cm91dmVyIGwnQGUgZHUgQGQgcGFyZW50XG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNyZWF0aW5nIHJvb3QgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyByb290IEBkICglcyk6ICVtXG4iCittc2dzdHIgIkVycmV1ciBkZSBjculhdGlvbiBkdSBAZCByYWNpbmUgKCVzKaA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgL0BsIEBkICglcyk6ICVtXG4iCittc2dzdHIgIkVycmV1ciBkZSBjculhdGlvbiBkdSBAZCAvQGwgKCVzKaA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5OyBhYm9ydGluZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTE2Cittc2dpZCAiQHIgaXMgbm90IGEgQGQ7IGFib3J0aW5nLlxuIgorbXNnc3RyICJsJ0ByIG4nZXN0IHBhcyB1biBAZKA7IGFycup0IGltbelkaWF0LlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIxCittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICJOZSBwZXV0IHByb2PpZGVyIHNhbnMgdW4gQHIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIGlzIG5vdCBhIGRpcmVjdG9yeSAoaW5vPSVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiL0BsIGlzIG5vdCBhIEBkIChpbm89JWkpXG4iCittc2dzdHIgIi9AbCBuJ2VzdCBwYXMgdW4gQGQgKGlubz0laSlcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTM4Cittc2dpZCAiUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3Rvcmllc1xuIgorbXNnc3RyICJQYXNzZSAzQaA6IG9wdGltaXNhdGlvbiBkZXMgculwZXJ0b2lyZXNcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZGlyc190b19oYXNoIGl0ZXJhdG9yOiAlbVxuIgorbXNnc3RyICLJY2hlYyBkZSBjculhdGlvbiBkZSBsJ2l06XJhdGV1ciBkaXJzX3RvX2hhc2igOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDgKK21zZ2lkICJGYWlsZWQgdG8gb3B0aW1pemUgZGlyZWN0b3J5ICVxICglZCk6ICVtXG4iCittc2dzdHIgIsljaGVjIGQnb3B0aW1pc2F0aW9uIGR1IHLpcGVydG9pcmUgJXEgKCVkKaA6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU1MworbXNnaWQgIk9wdGltaXppbmcgZGlyZWN0b3JpZXM6ICIKK21zZ3N0ciAiT3B0aW1pc2F0aW9uIGRlcyBy6XBlcnRvaXJlc6A6ICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcwCittc2dpZCAiUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzXG4iCittc2dzdHIgIlBhc3NlIDSgOiB26XJpZmljYXRpb24gZGVzIGNvbXB0ZXVycyBkZSBy6WbpcmVuY2VcbiIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCB6ZXJvLWxlbmd0aCBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEB6IEBpICVpLiAgIgorbXNnc3RyICJAaSAlaSBAeiBAdS4gIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIGlub2RlICVpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAaSAlaVxuIgorbXNnc3RyICJAaSAlaSBAdVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSByZWYgY291bnQgaXMgJUlsLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4NQorbXNnaWQgIkBpICVpIHJlZiBjb3VudCBpcyAlSWwsIEBzICVOLiAgIgorbXNnc3RyICJsZSBjb21wdGV1ciBkZSBy6WbpcmVuY2UgZGUgbCdAaSAlaSBlc3QgJUlsLCBAcyAlTi4gIgorCisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuCisjLiBALWV4cGFuZGVkOiBcdE9SIFNPTUUgQk9ORUhFQUQgKFlPVSkgSVMgQ0hFQ0tJTkcgQSBNT1VOVEVEIChMSVZFKSBGSUxFU1lTVEVNLlxuCisjLiBALWV4cGFuZGVkOiBpbm9kZV9saW5rX2luZm9bJWldIGlzICVOLCBpbm9kZS5pX2xpbmtzX2NvdW50IGlzICVJbC4gIFRoZXkgc2hvdWxkIGJlIHRoZSBzYW1lIVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODkKK21zZ2lkICIiCisiV0FSTklORzogUFJPR1JBTU1JTkcgQlVHIElOIEUyRlNDSyFcbiIKKyJcdE9SIFNPTUUgQk9ORUhFQUQgKFlPVSkgSVMgQ0hFQ0tJTkcgQSBNT1VOVEVEIChMSVZFKSBGSUxFU1lTVEVNLlxuIgorIkBpX2xpbmtfaW5mb1slaV0gaXMgJU4sIEBpLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBAcyB0aGUgc2FtZSFcbiIKK21zZ3N0ciAiIgorIkFUVEVOVElPTqA6IEJPR1VFIERFIFBST0dSQU1NQVRJT04gREFOUyBFMkZTQ0ugIVxuIgorIlx0T1UgVU4gSURJT1QgKFZPVVMpIEVTVCBFTiBUUkFJTiBERSBWyVJJRklFUiBVTiBTWVNUyE1FIERFXG4iCisiXHRGSUNISUVSIE1PTlTJIChBQ1RJRikuIGlub2RlX2xpbmtfaW5mb1slaV0gZXN0ICVOLFxuIgorIlx0aS1ub2RlLmlfbGlua3NfY291bnQgZXN0ICVJbC4gSWxzIGRldnJhaWVudCDqdHJlIGxlcyBt6m1lc6AhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvblxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1OTkKK21zZ2lkICJQYXNzIDU6IENoZWNraW5nIEBnIHN1bW1hcnkgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiUGFzc2UgNaA6IHbpcmlmaWNhdGlvbiBkZSBsJ2luZm9ybWF0aW9uIGR1IHNvbW1haXJlIGRlIEBnXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGlub2RlIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwNAorbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBpIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiTGUgcmVtcGxpc3NhZ2Ug4CBsYSBmaW4gZHUgQEIgZCdAaSBuJ2VzdCBwYXMgaW5pdGlhbGlz6S4gIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDkKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIkxlIHJlbXBsaXNzYWdlIOAgbGEgZmluIGR1IEBCIGRlIEBicyBuJ2VzdCBwYXMgaW5pdGlhbGlz6S4gIgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjE0Cittc2dpZCAiQGIgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiZGlmZulyZW5jZXMgZGUgQEIgZGUgQGJzoDogIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjM0Cittc2dpZCAiQGkgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiZGlmZulyZW5jZXMgZGUgQEIgZCdAaXOgOiAiCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjU0Cittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICIiCisiTGUgZOljb21wdGUgZGVzIEBpcyBsaWJyZXMgZXN0IGVycm9u6SBwb3VyIGxlIEBnIG6wJWcgKCVpLCBk6WNvbXB06T0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IERpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjU5Cittc2dpZCAiRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICIiCisiTGUgZOljb21wdGUgZGVzIHLpcGVydG9pcmVzIGVzdCBlcnJvbukgcG91ciBsZSBAZyBusCVnICglaSwgZOljb21wdOk9JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjQKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICJMZSBk6WNvbXB0ZSBkZXMgQGlzIGxpYnJlcyBlc3QgZXJyb27pICglaSwgZOljb21wdOk9JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2OQorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiIgorIkxlIGTpY29tcHRlIGRlcyBAYnMgbGlicmVzIGVzdCBlcnJvbukgcG91ciBsZSBAZyBusCVnICglYiwgZOljb21wdOk9JWMpLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NzQKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJMZSBk6WNvbXB0ZSBkZXMgQGJzIGxpYnJlcyBlc3QgZXJyb27pICglYiwgZOljb21wdOk9JWMpLlxuIgorCisjLiBALWV4cGFuZGVkOiBQUk9HUkFNTUlORyBFUlJPUjogZmlsZXN5c3RlbSAoIyVOKSBiaXRtYXAgZW5kcG9pbnRzICglYiwgJWMpIGRvbid0IG1hdGNoIGNhbGN1bGF0ZWQgYml0bWFwIAorIy4gQC1leHBhbmRlZDogZW5kcG9pbnRzICglaSwgJWopXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY3OQorbXNnaWQgIiIKKyJQUk9HUkFNTUlORyBFUlJPUjogQGYgKCMlTikgQEIgZW5kcG9pbnRzICglYiwgJWMpIGRvbid0IG1hdGNoIGNhbGN1bGF0ZWQgQEIgIgorImVuZHBvaW50cyAoJWksICVqKVxuIgorbXNnc3RyICIiCisiRVJSRVVSIERFIFBST0dSQU1NQVRJT06gOiBsZXMgcG9pbnRzIGRlIHRlcm1pbmFpc29uICglYiwgJWMpIGRlIEBCcyBkdSBAZiAobrAiCisiJU4pIG5lIGNvbmNvcmRlbnQgcGFzIGF2ZWMgbGVzIHBvaW50cyBkZSB0ZXJtaW5haXNvbiBkZSBAQnMgY2FsY3Vs6XMgKCVpLCAiCisiJWopXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY4NQorbXNnaWQgIkludGVybmFsIGVycm9yOiBmdWRnaW5nIGVuZCBvZiBiaXRtYXAgKCVOKVxuIgorbXNnc3RyICJFcnJldXIgaW50ZXJuZaA6IGFqdXN0ZW1lbnQgYXBwcm94aW1hdGlmIGRlIGxhIGZpbiBkdSBiaXRtYXAgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGlub2RlIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGkgQEI6ICVtXG4iCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGxhIGNvcGllIGR1IEBCIGQnQGlzIGRlIHJlbXBsYWNlbWVudKA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAYiBAQjogJW1cbiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgY29waWUgZHUgQEIgZGVzIEBicyBkZSByZW1wbGFjZW1lbnSgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBibG9jayhzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBiKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuIgorbXNnc3RyICIiCisiVW4gb3UgZGVzIEBiKHMpIGR1IEBnICVnIGVuIGNvdXJzIGQndXRpbGlzYXRpb24gYWxvcnMgcXVlIGxlIEBnIGVzdCBtYXJxdekgIgorIkJMT0NLX1VOSU5JVFxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBpbm9kZShzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBpKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuIgorbXNnc3RyICIiCisiVW4gb3UgZGVzIEBpKHMpIGR1IEBnICVnIGVuIGNvdXJzIGQndXRpbGlzYXRpb24gYWxvcnMgcXVlIGxlIEBnIGVzdCBtYXJxdekgIgorIklOT0RFX1VOSU5JVFxuIgorCisjLiBALWV4cGFuZGVkOiBSZWNyZWF0ZSBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MzIKK21zZ2lkICJSZWNyZWF0ZSBAaiIKK21zZ3N0ciAiUmVjcullciBsZSBAaiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzM3Cittc2dpZCAiVXBkYXRlIHF1b3RhIGluZm8gZm9yIHF1b3RhIHR5cGUgJU4iCittc2dzdHIgIk1pc2Ug4CBqb3VyIGRlIGwnaW5mb3JtYXRpb24gZGUgcXVvdGEgcG91ciBsZSB0eXBlIGRlIHF1b3RhICVOIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzZXR0aW5nIGJsb2NrIGdyb3VwIGNoZWNrc3VtIGluZm86ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc0MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIEBiIEBnIGNoZWNrc3VtIGluZm86ICVtXG4iCittc2dzdHIgIiIKKyJFcnJldXIgbG9ycyBkZSBsJ2luaXRpYWxpc2F0aW9uIGRlIGwnaW5mb3JtYXRpb24gZGUgY2hlY2tzdW0gZHUgQGcgZGUgQGJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgZmlsZSBzeXN0ZW0gaW5mbzogJW1cbiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbCfpY3JpdHVyZSBkZSBsJ2luZm9ybWF0aW9uIGRlIHN5c3TobWUgZGUgZmljaGllcjogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGZsdXNoaW5nIHdyaXRlcyB0byBzdG9yYWdlIGRldmljZTogJW1cbiIKK21zZ3N0ciAiIgorIkVycmV1ciBsb3JzIGRlIGxhIHZpZGFuZ2UgZGVzIHRhbXBvbnMgZCfpY3JpdHVyZSB2ZXJzIGxlIHDpcmlwaOlyaXF1ZSBkZSAiCisic3RvY2thZ2U6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmhhbmRsZWQgZXJyb3IgY29kZSAoMHgleCkhXG4iCittc2dzdHIgIkNvZGUgZCdlcnJldXIgbm9uIHRyYWl06SAoMHgleCmgIVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5OTYgZTJmc2NrL3Byb2JsZW0uYzoyMDAwCittc2dpZCAiSUdOT1JFRCIKK21zZ3N0ciAiSUdOT1LJIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWQsIGVsYXBzZWQgdGltZTogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKK21zZ3N0ciAiTeltb2lyZSB1dGlsaXPpZaA6ICVkLCB0ZW1wcyByZXF1aXOgOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzaXplIG9mIGlub2RlPSVkXG4iCittc2dzdHIgInRhaWxsZSBkZSBsJ2ktbm9ldWQ9JWRcbiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6MTE5Cittc2dpZCAid2hpbGUgc3RhcnRpbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAibG9ycyBkdSBk6W1hcnJhZ2UgZGUgbCdleGFtZW4gZGVzIGktbm9ldWRzIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMzAKK21zZ2lkICJ3aGlsZSBkb2luZyBpbm9kZSBzY2FuIgorbXNnc3RyICJsb3JzIGRlIGwnZXhhbWVuIGRlcyBpLW5vZXVkcyIKKworIzogZTJmc2NrL3N1cGVyLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZm9yIGlub2RlICVkIgorbXNnc3RyICJsb3JzIGRlIGwnYXBwZWwgZGUgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgcG91ciBsJ2ktbm9ldWQgJWQiCisKKyM6IGUyZnNjay9zdXBlci5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAibG9ycyBkZSBsJ2FwcGVsIOAgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgcG91ciBsJ2ktbm9ldWQgJWQiCisKKyM6IGUyZnNjay9zdXBlci5jOjI3NAorbXNnaWQgIlRydW5jYXRpbmciCittc2dzdHIgIkxvcnMgZGUgbGEgdHJvbmNhdHVyZSBkZSIKKworIzogZTJmc2NrL3N1cGVyLmM6Mjc1Cittc2dpZCAiQ2xlYXJpbmciCittc2dzdHIgIkxvcnMgZGUgbCdlZmZhY2VtZW50IGRlIgorCisjOiBlMmZzY2svdW5peC5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1wYW55cmNkZnZ0REZWXSBbLWIgc3VwZXJibG9ja10gWy1CIGJsb2Nrc2l6ZV1cbiIKKyJcdFx0Wy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIFstUCBwcm9jZXNzX2lub2RlX3NpemVdXG4iCisiXHRcdFstbHwtTCBiYWRfYmxvY2tzX2ZpbGVdIFstQyBmZF0gWy1qIGV4dGVybmFsX2pvdXJuYWxdXG4iCisiXHRcdFstRSBleHRlbmRlZC1vcHRpb25zXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIlV0aWxpc2F0aW9uoDogJXMgWy1wYW55cmNkZnZ0REZWXSBbLWIgc3VwZXItYmxvY10gWy1CIHRhaWxsZS1kZS1ibG9jXVxuIgorIlx0XHRbLUkgbm9tYnJlLWJsb2NzLWR1LXRhbXBvbi1pLW5vZXVkc10gWy1QIHRhaWxsZS1pLW5vZXVkLXByb2Nlc3N1c11cbiIKKyJcdFx0Wy1sfC1MIGZpY2hpZXJzLWRlcy1ibG9jcy1k6WZlY3R1ZXV4XSBbLUMgZmRdIFstaiBqb3VybmFsLWV4dGVybmVdXG4iCisiXHRcdFstRSBvcHRpb25zLel0ZW5kdWVzXSBw6XJpcGjpcmlxdWVcbiIKKworIzogZTJmc2NrL3VuaXguYzo4MAorbXNnaWQgIiIKKyJcbiIKKyJFbWVyZ2VuY3kgaGVscDpcbiIKKyIgLXAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIHJlcGFpciAobm8gcXVlc3Rpb25zKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBNYWtlIG5vIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW1cbiIKKyIgLXkgICAgICAgICAgICAgICAgICAgQXNzdW1lIFwieWVzXCIgdG8gYWxsIHF1ZXN0aW9uc1xuIgorIiAtYyAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgYmFkIGJsb2NrcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGJhZGJsb2NrICIKKyJsaXN0XG4iCisiIC1mICAgICAgICAgICAgICAgICAgIEZvcmNlIGNoZWNraW5nIGV2ZW4gaWYgZmlsZXN5c3RlbSBpcyBtYXJrZWQgY2xlYW5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkFpZGUgZCd1cmdlbmNloDpcbiIKKyIgLXAgICAgICAgICAgICAgICAgICAgUulwYXJhdGlvbiBhdXRvbWF0aXF1ZSAoc2FucyBxdWVzdGlvbilcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTidhcHBsaXF1ZXIgYXVjdW4gY2hhbmdlbWVudCBhdSBzeXN06G1lIGRlIGZpY2hpZXJzXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIFN1cHBvc2VyIKugb3VpoLsgcG91ciB0b3V0ZXMgbGVzIHF1ZXN0aW9uc1xuIgorIiAtYyAgICAgICAgICAgICAgICAgICBW6XJpZmllciBsYSBwculzZW5jZSBkZSBibG9jcyBk6WZlY3R1ZXV4IGV0IGxlc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICBham91dGVyIOAgbGEgbGlzdGUgZGVzIGJsb2NzIGTpZmVjdHVldXhcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2VyIGxhIHbpcmlmaWNhdGlvbiBt6m1lIHNpIGxlIHN5c3TobWUgZGUgZmljaGllcnNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgZXN0IG1hcnF16SBwcm9wcmVcbiIKKworIzogZTJmc2NrL3VuaXguYzo4NgorbXNnaWQgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgQmUgdmVyYm9zZVxuIgorIiAtYiBzdXBlcmJsb2NrICAgICAgICBVc2UgYWx0ZXJuYXRpdmUgc3VwZXJibG9ja1xuIgorIiAtQiBibG9ja3NpemUgICAgICAgICBGb3JjZSBibG9ja3NpemUgd2hlbiBsb29raW5nIGZvciBzdXBlcmJsb2NrXG4iCisiIC1qIGV4dGVybmFsX2pvdXJuYWwgIFNldCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbFxuIgorIiAtbCBiYWRfYmxvY2tzX2ZpbGUgICBBZGQgdG8gYmFkYmxvY2tzIGxpc3RcbiIKKyIgLUwgYmFkX2Jsb2Nrc19maWxlICAgU2V0IGJhZGJsb2NrcyBsaXN0XG4iCittc2dzdHIgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgVHJhdmFpbGxlciBlbiBtb2RlIGJhdmFyZFxuIgorIiAtYiBzdXBlci1ibG9jICAgICAgICBVdGlsaXNlciB1biBibG9jIGFsdGVybmF0aWYgcG91ciBsZSBzdXBlcmJsb2NcbiIKKyIgLUIgdGFpbGxlLWRlLWJsb2MgICAgRm9yY2VyIGxhIHRhaWxsZSBkZXMgYmxvY3MgbG9ycyBkZSBsYSByZWNoZXJjaGUgZHVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgc3VwZXJibG9jXG4iCisiIC1qIGpvdXJuYWwtZXh0ZXJuZSAgIETpZmluaXIgbGEgbG9jYWxpc2F0aW9uIGR1IGpvdXJuYWwgZXh0ZXJuZVxuIgorIiAtbCBmaWNoaWVyLWRlcy1ibG9jcy1lcnJvbulzXG4iCisiICAgICAgICAgICAgICAgICAgICAgIEFqb3V0ZXIg4CBsYSBsaXN0ZSBkZXMgYmxvY3MgZOlmZWN0dWV1eFxuIgorIiAtTCBmaWNoaWVyLWRlcy1ibG9jcy1lcnJvbulzXG4iCisiICAgICAgICAgICAgICAgICAgICAgIETpZmluaXIgbGEgbGlzdGUgZGVzIGJsb2NzIGTpZmVjdHVldXhcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICVsbHUvJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXOgOiAldS8ldSBmaWNoaWVycyAoJTBkLiVkJSUgbm9uIGNvbnRpZ3VzKSwgJWxsdS8lbGx1IGJsb2NzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlMTJ1IGlub2RlIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgaW5vZGVzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiUxMnUgaS1ub2V1ZCB1dGlsaXPpICglMi4yZiUlLCBzdXIgJXUpXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IGktbm9ldWRzIHV0aWxpc+lzICglMi4yZiUlLCBzdXIgJXUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIlMTJ1IGZpY2hpZXIgbm9uIGNvbnRpZ3UgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzFdICIlMTJ1IGZpY2hpZXJzIG5vbiBjb250aWd1cyAoJTBkLiVkJSUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3J5ICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcmllcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiUxMnUgculwZXJ0b2lyZSBub24gY29udGlndSAoJTBkLiVkJSUpXG4iCittc2dzdHJbMV0gIiUxMnUgculwZXJ0b2lyZXMgbm9uIGNvbnRpZ3VzICglMGQuJWQlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICAgICAgICMgb2YgaW5vZGVzIHdpdGggaW5kL2RpbmQvdGluZCBibG9ja3M6ICV1LyV1LyV1XG4iCittc2dzdHIgIiIKKyIgICAgICAgICAgICAgbm9tYnJlIGQnaS1ub2V1ZHMgYXZlYyBkZXMgYmxvY3MgaW5kL2RpbmQvdGluZKA6ICV1LyV1LyV1XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc5Cittc2dpZCAiICAgICAgICAgICAgIEV4dGVudCBkZXB0aCBoaXN0b2dyYW06ICIKK21zZ3N0ciAiICAgICAgICAgICAgIEhpc3RvZ3JhbW1lIGRlcyBwcm9mb25kZXVycyBkJ2V4dGVudHOgOiAiCisKKyM6IGUyZnNjay91bml4LmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMmxsdSBibG9jayB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEybGx1IGJsb2NrcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ3N0clswXSAiJTEybGx1IGJsb2MgdXRpbGlz6SAoJTIuMmYlJSwgc3VyICVsbHUpXG4iCittc2dzdHJbMV0gIiUxMmxsdSBibG9jcyB1dGlsaXPpcyAoJTIuMmYlJSwgc3VyICVsbHUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmFkIGJsb2NrXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmFkIGJsb2Nrc1xuIgorbXNnc3RyWzBdICIlMTJ1IGJsb2MgZOlmZWN0dWV1eFxuIgorbXNnc3RyWzFdICIlMTJ1IGJsb2NzIGTpZmVjdHVldXhcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsYXJnZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGFyZ2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBmaWNoaWVyIGRlIGdyYW5kZSB0YWlsbGVcbiIKK21zZ3N0clsxXSAiJTEydSBmaWNoaWVycyBkZSBncmFuZGUgdGFpbGxlXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVzXG4iCittc2dzdHJbMF0gIiIKKyJcbiIKKyIlMTJ1IGZpY2hpZXIgbm9ybWFsXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IGZpY2hpZXJzIG5vcm1hdXhcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBkaXJlY3RvcnlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBkaXJlY3Rvcmllc1xuIgorbXNnc3RyWzBdICIlMTJ1IHLpcGVydG9pcmVcbiIKK21zZ3N0clsxXSAiJTEydSBy6XBlcnRvaXJlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBmaWNoaWVyIGRlIHDpcmlwaOlyaXF1ZSBlbiBtb2RlIGNhcmFjdOhyZVxuIgorbXNnc3RyWzFdICIlMTJ1IGZpY2hpZXJzIGRlIHDpcmlwaOlyaXF1ZSBlbiBtb2RlIGNhcmFjdOhyZVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgZmljaGllciBkZSBw6XJpcGjpcmlxdWUgZW4gbW9kZSBibG9jXG4iCittc2dzdHJbMV0gIiUxMnUgZmljaGllcnMgZGUgcOlyaXBo6XJpcXVlIGVuIG1vZGUgYmxvY1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpZm9cbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWZvc1xuIgorbXNnc3RyWzBdICIlMTJ1IGZpZm9cbiIKK21zZ3N0clsxXSAiJTEydSBmaWZvc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxpbmtcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsaW5rc1xuIgorbXNnc3RyWzBdICIlMTJ1IGxpZW5cbiIKK21zZ3N0clsxXSAiJTEydSBsaWVuc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHN5bWJvbGljIGxpbmsiCittc2dpZF9wbHVyYWwgIiUxMnUgc3ltYm9saWMgbGlua3MiCittc2dzdHJbMF0gIiUxMnUgbGllbiBzeW1ib2xpcXVlIgorbXNnc3RyWzFdICIlMTJ1IGxpZW5zIHN5bWJvbGlxdWVzIgorCisjOiBlMmZzY2svdW5peC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgKCV1IGZhc3Qgc3ltYm9saWMgbGluaylcbiIKK21zZ2lkX3BsdXJhbCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmtzKVxuIgorbXNnc3RyWzBdICIgKCV1IGxpZW4gc3ltYm9saXF1ZSByYXBpZGUpXG4iCittc2dzdHJbMV0gIiAoJXUgbGllbnMgc3ltYm9saXF1ZXMgcmFwaWRlcylcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzb2NrZXRcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBzb2NrZXRzXG4iCittc2dzdHJbMF0gIiUxMnUgc29ja2V0XG4iCittc2dzdHJbMV0gIiUxMnUgc29ja2V0c1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IGZpY2hpZXJcbiIKK21zZ3N0clsxXSAiJTEydSBmaWNoaWVyc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIzMiBtaXNjL2JhZGJsb2Nrcy5jOjk5MyBtaXNjL3R1bmUyZnMuYzoyMTIyIG1pc2MvdXRpbC5jOjMxNgorIzogcmVzaXplL21haW4uYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLiIKK21zZ3N0ciAibG9ycyBkZSBsYSBk6XRlcm1pbmF0aW9uIOAgc2F2b2lyIHNpICVzIGVzdCBtb2506S4iCisKKyM6IGUyZnNjay91bml4LmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICJBdHRlbnRpb26gISAlcyBlc3QgbW9udOkuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyBpbiB1c2UuXG4iCittc2dzdHIgIkF0dGVudGlvbqAhICVzIGVzdCBlbiBjb3VycyBkJ3V0aWxpc2F0aW9uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICIlcyBlc3QgbW9udOkuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGluIHVzZS5cbiIKK21zZ3N0ciAiJXMgZXN0IGVuIGNvdXJzIGQndXRpbGlzYXRpb24uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY2Cittc2dpZCAiIgorIkNhbm5vdCBjb250aW51ZSwgYWJvcnRpbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJOZSBwZXV0IGNvbnRpbnVlciwgYXJy6nQgaW1t6WRpYXQuXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY4Cittc2dpZCAiIgorIlxuIgorIlxuIgorIldBUk5JTkchISEgIFRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuICAgSWYgeW91IGNvbnRpbnVlIHlvdSAqKipXSUxMKioqXG4iCisiY2F1c2UgKioqU0VWRVJFKioqIGZpbGVzeXN0ZW0gZGFtYWdlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiQVRURU5USU9OoCEhISBMZSBzeXN06G1lIGRlIGZpY2hpZXJzIGVzdCBtb2506S4gICBTaSB2b3VzIGNvbnRpbnVlelxuIgorInZvdXMgKioqQ0FVU0VSRVoqKiogZGVzIGRvbW1hZ2VzICoqKlPJVshSRVMqKiogYXUgc3lzdOhtZSBkZSBmaWNoaWVycy5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNzMKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gY29udGludWUiCittc2dzdHIgIlNvdWhhaXRlei12b3VzIHLpZWxsZW1lbnQgY29udGludWVyIgorCisjOiBlMmZzY2svdW5peC5jOjI3NQorbXNnaWQgImNoZWNrIGFib3J0ZWQuXG4iCittc2dzdHIgInbpcmlmaWNhdGlvbiBzdG9wcOllLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjM2OAorbXNnaWQgIiBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzIgorbXNnc3RyICIgY29udGllbnQgdW4gc3lzdOhtZSBkZSBmaWNoaWVycyBjb21wb3J0YW50IGRlcyBlcnJldXJzIgorCisjOiBlMmZzY2svdW5peC5jOjM3MAorbXNnaWQgIiB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkIgorbXNnc3RyICIgbidhIHBhcyDpdOkgZOltb2506SBwcm9wcmVtZW50IgorCisjOiBlMmZzY2svdW5peC5jOjM3MgorbXNnaWQgIiBwcmltYXJ5IHN1cGVyYmxvY2sgZmVhdHVyZXMgZGlmZmVyZW50IGZyb20gYmFja3VwIgorbXNnc3RyICIiCisiIGxlcyBmb25jdGlvbm5hbGl06XMgZHUgc3VwZXJibG9jIHByaW1haXJlIGRpZmbocmVudCBkZSBjZWxsZXMgZGUgbGEgIgorInNhdXZlZ2FyZGUiCisKKyM6IGUyZnNjay91bml4LmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgYmVlbiBtb3VudGVkICV1IHRpbWVzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIGEg6XTpIG1vbnTpICV1IGZvaXMgc2FucyBhdm9pciDpdOkgdulyaWZp6SIKKworIzogZTJmc2NrL3VuaXguYzozODMKK21zZ2lkICIgaGFzIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRpbWUgaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiIgorIiBhIHVuZSBkYXRlIGRlIGRlcm5p6HJlIHbpcmlmaWNhdGlvbiBkdSBzeXN06G1lIGRlIGZpY2hpZXJzIGRhbnMgbGUgZnV0dXIiCisKKyM6IGUyZnNjay91bml4LmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgZ29uZSAldSBkYXlzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIGEgcGFzc+kgJXUgam91cnMgc2FucyBhdm9pciDpdOkgdulyaWZp6SIKKworIzogZTJmc2NrL3VuaXguYzozOTgKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiLCB26XJpZmljYXRpb24gZm9yY+llLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4sICV1LyV1IGZpbGVzLCAlbGx1LyVsbHUgYmxvY2tzIgorbXNnc3RyICIlc6A6IHByb3ByZSwgJXUvJXUgZmljaGllcnMsICVsbHUvJWxsdSBibG9jcyIKKworIzogZTJmc2NrL3VuaXguYzo0NTEKK21zZ2lkICIgKGNoZWNrIGRlZmVycmVkOyBvbiBiYXR0ZXJ5KSIKK21zZ3N0ciAiICh26XJpZmljYXRpb24gcmVtaXNlIOAgcGx1cyB0YXJkoDogc3VyIGJhdHRlcmllKSIKKworIzogZTJmc2NrL3VuaXguYzo0NTQKK21zZ2lkICIgKGNoZWNrIGFmdGVyIG5leHQgbW91bnQpIgorbXNnc3RyICIgKHbpcmlmaWNhdGlvbiBsb3JzIGR1IHByb2NoYWluIG1vbnRhZ2UpIgorCisjOiBlMmZzY2svdW5peC5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGNoZWNrIGluICVsZCBtb3VudHMpIgorbXNnc3RyICIgKHbpcmlmaWNhdGlvbiBkYW5zICVsZCBtb250YWdlcykiCisKKyM6IGUyZnNjay91bml4LmM6NjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBDb3VsZG4ndCBvcGVuIC9kZXYvbnVsbCAoJXMpXG4iCittc2dzdHIgIkVSUkVVUqA6IG5lIHBldXQgb3V2cmlyIC9kZXYvbnVsbCAoJXMpXG4iCisKKyM6IGUyZnNjay91bml4LmM6Njc1Cittc2dpZCAiSW52YWxpZCBFQSB2ZXJzaW9uLlxuIgorbXNnc3RyICJWZXJzaW9uIEVBIGludmFsaWRlLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGV4dGVuZGVkIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAiT3B0aW9uIOl0ZW5kdWUgaW5jb25udWWgOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjcyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIGUyZnNjayBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIkVycmV1ciBkZSBzeW50YXhlIGRhbnMgbGUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIGQnZTJmc2NrICglcyxcbiIKKyJcdGxpZ25lIG6wJWQpXG4iCisiXHQlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAiRVJSRVVSIGxvcnMgZGUgbGEgdmFsaWRhdGlvbiBkdSBkZXNjcmlwdGV1ciBkZSBmaWNoaWVyICVkoDogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo4MDEKK21zZ2lkICJJbnZhbGlkIGNvbXBsZXRpb24gaW5mb3JtYXRpb24gZmlsZSBkZXNjcmlwdG9yIgorbXNnc3RyICJEZXNjcmlwdGV1ciBkZSBmaWNoaWVyIGQnaW5mb3JtYXRpb24gZGUgY29tcGzpdGlvbiBpbnZhbGlkZSIKKworIzogZTJmc2NrL3VuaXguYzo4MTYKK21zZ2lkICJPbmx5IG9uZSBvZiB0aGUgb3B0aW9ucyAtcC8tYSwgLW4gb3IgLXkgbWF5IGJlIHNwZWNpZmllZC4iCittc2dzdHIgIlNldWxlIHVuZSBkZXMgb3B0aW9ucyAtcC8tYSwgLW4gb3UgLXkgcGV1dCDqdHJlIHNw6WNpZmnpZS4iCisKKyM6IGUyZnNjay91bml4LmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSAtdCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorbXNnc3RyICJMJ29wdGlvbiAtdCBuJ2VzdCBwYXMgc3VwcG9ydOllIHN1ciBjZXR0ZSB2ZXJzaW9uIGQnZTJmc2NrLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjg2OCBlMmZzY2svdW5peC5jOjk0MiBtaXNjL3R1bmUyZnMuYzo4NzkgbWlzYy90dW5lMmZzLmM6MTE3NAorIzogbWlzYy90dW5lMmZzLmM6MTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHLpc291ZHJlIKugJXOguyIKKworIzogZTJmc2NrL3VuaXguYzo5MjEKK21zZ2lkICJUaGUgLW4gYW5kIC1EIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIkxlcyBvcHRpb25zIC1uIGV0IC1EIHNvbnQgaW5jb21wYXRpYmxlcy4iCisKKyM6IGUyZnNjay91bml4LmM6OTI2Cittc2dpZCAiVGhlIC1uIGFuZCAtYyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJMZXMgb3B0aW9ucyAtbiBldCAtYyBzb250IGluY29tcGF0aWJsZXMuIgorCisjOiBlMmZzY2svdW5peC5jOjkzMQorbXNnaWQgIlRoZSAtbiBhbmQgLWwvLUwgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiTGVzIG9wdGlvbnMgLW4gZXQgLWwvLUwgc29udCBpbmNvbXBhdGlibGVzLiIKKworIzogZTJmc2NrL3VuaXguYzo5ODUKK21zZ2lkICJUaGUgLWMgYW5kIHRoZSAtbC8tTCBvcHRpb25zIG1heSBub3QgYmUgYm90aCB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuXG4iCittc2dzdHIgIkxlcyBvcHRpb25zIC1jIGV0IC1sLy1MIG5lIHBldXZlbnQgcGFzIOp0cmUgdXRpbGlz6WVzIHNpbXVsdGFu6W1lbnQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTAzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTJGU0NLX0pCRF9ERUJVRyBcIiVzXCIgbm90IGFuIGludGVnZXJcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG4nZXN0IHBhcyB1biBlbnRpZXJcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJbnZhbGlkIG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnQgbm9uIG51belyaXF1ZSBpbnZhbGlkZSBwb3VyIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBpbnRlcnZhbCBpcyAldSBzZWNvbmRzIGFuZCB0b3RhbCB3YWl0IHRpbWUgaXMgJXUgc2Vjb25kcy4gUGxlYXNlICIKKyJ3YWl0Li4uXG4iCittc2dzdHIgIiIKKyJMJ2ludGVydmFsZSBkZSBwcm90ZWN0aW9uIGNvbnRyZSBtb250YWdlIG11bHRpcGxlIChNTVApIGVzdCBkZSAldSBzZWNvbmRlcyAiCisiZXQgdGVtcHMgdG90YWwgZCdhdHRlbnRlIGVzdCBkZSAldSBzZWNvbmRzLiBWZXVpbGxleiBwYXRpZW50ZXIuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMTQ5IGUyZnNjay91bml4LmM6MTE1NAorbXNnaWQgIndoaWxlIGNoZWNraW5nIE1NUCBibG9jayIKK21zZ3N0ciAibG9ycyBkZSBsYSB26XJpZmljYXRpb24gZHUgYmxvY2sgTU1QIgorCisjOiBlMmZzY2svdW5peC5jOjExNTYgbWlzYy90dW5lMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJJZiB5b3UgYXJlIHN1cmUgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IGluIHVzZSBvbiBhbnkgbm9kZSwgcnVuOlxuIgorIid0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfSdcbiIKK21zZ3N0ciAiIgorIlNpIHZvdXMg6nRlcyBz+3IoZSkgcXVlIGxlIHN5c3TobWUgZGUgZmljaGllcnMgbidlc3QgZW4gY291cnMgZCd1dGlsaXNhdGlvbiAiCisic3VyIGF1Y3VuIG5vZXVkLCBsYW5jZXI6XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V9J1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMDcKK21zZ2lkICJFcnJvcjogZXh0MmZzIGxpYnJhcnkgdmVyc2lvbiBvdXQgb2YgZGF0ZSFcbiIKK21zZ3N0ciAiRXJyZXVyoDogbGEgdmVyc2lvbiBkZSBsYSBiaWJsaW90aOhxdWUgZXh0MmZzIGVzdCBw6XJpbelloCFcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjE0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGluaXRpYWxpemUgcHJvZ3JhbSIKK21zZ3N0ciAibG9ycyBkZSBsYSB0ZW50YXRpdmUgZCdpbml0aWFsaXNhdGlvbiBkdSBwcm9ncmFtbWUiCisKKyM6IGUyZnNjay91bml4LmM6MTIzNworIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzLCAlc1xuIgorbXNnc3RyICJcdFV0aWxpc2F0aW9uIGRlICVzLCAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEyNDkKK21zZ2lkICJuZWVkIHRlcm1pbmFsIGZvciBpbnRlcmFjdGl2ZSByZXBhaXJzIgorbXNnc3RyICJhIGJlc29pbiBkJ3VuIHRlcm1pbmFsIHBvdXIgZGVzIHLpcGFyYXRpb25zIGVuIG1vZGUgaW50ZXJhY3RpZiIKKworIzogZTJmc2NrL3VuaXguYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB0cnlpbmcgYmFja3VwIGJsb2Nrcy4uLlxuIgorbXNnc3RyICIlc6A6ICVzIHRlbnRvbnMgZCd1dGlsaXNlciBsZXMgYmxvY3MgZGUgc2F1dmV0YWdlLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMwNQorbXNnaWQgIlN1cGVyYmxvY2sgaW52YWxpZCwiCittc2dzdHIgIlN1cGVyYmxvYyBpbnZhbGlkZSwiCisKKyM6IGUyZnNjay91bml4LmM6MTMwNgorbXNnaWQgIkdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIgorbXNnc3RyICJMZXMgZGVzY3JpcHRldXJzIGRlIGdyb3VwZSBzZW1ibGVudCBlbiBtYXV2YWlzIOl0YXQuLi4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgdXNpbmcgdGhlIGJhY2t1cCBibG9ja3MiCittc2dzdHIgIiVzoDogJXMgbG9ycyBkZSBsJ3V0aWxpc2F0aW9uIGRlcyBibG9jcyBkZSBzYXV2ZXRhZ2UiCisKKyM6IGUyZnNjay91bml4LmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZ29pbmcgYmFjayB0byBvcmlnaW5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiVzoDogcmV0b3VyIGF1IHN1cGVyYmxvY2sgb3JpZ2luZWxcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQ5Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIHJldmlzaW9uIGlzIGFwcGFyZW50bHkgdG9vIGhpZ2ggZm9yIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCisiKE9yIHRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2sgaXMgY29ycnVwdClcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkxhIHZlcnNpb24gZHUgc3lzdOhtZSBkZSBmaWNoaWVycyBlc3QgYXBwYXJlbW1lbnQgdHJvcCDpbGV26WUgcG91ciBjZXR0ZSBcbiIKKyJ2ZXJzaW9uIGQnZTJmc2NrLiAob3UgYmllbiBsZSBzdXBlcmJsb2MgZHUgc3lzdOhtZSBkZSBmaWNoaWVycyBlc3RcbiIKKyJjb3Jyb21wdSlcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzU2Cittc2dpZCAiQ291bGQgdGhpcyBiZSBhIHplcm8tbGVuZ3RoIHBhcnRpdGlvbj9cbiIKK21zZ3N0ciAiUGV1dC3qdHJlIGNldHRlIHBhcnRpdGlvbiBlc3QtZWxsZSBkZSB0YWlsbGUgeulyb6A/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSBvciBiZSByb290XG4iCittc2dzdHIgIlZvdXMgZGV2ZXogYXZvaXIgdW4gYWNj6HMgJXMgYXUgc3lzdOhtZSBkZSBmaWNoaWVycyBvdSDqdHJlIHJvb3RcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY0Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICJQ6XJpcGjpcmlxdWUgcGV1dC3qdHJlIGluZXhpc3RlbnQgb3UgcG91ciBsZSBzd2FwoD9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY2Cittc2dpZCAiRmlsZXN5c3RlbSBtb3VudGVkIG9yIG9wZW5lZCBleGNsdXNpdmVseSBieSBhbm90aGVyIHByb2dyYW0/XG4iCittc2dzdHIgIiIKKyJTeXN06G1lIGRlIGZpY2hpZXIgbW9udOkgb3Ugb3V2ZXJ0IGVuIG1vZGUgZXhjbHVzaWYgcGFyIHVuIGF1dHJlXG4iCisicHJvZ3JhbW1loD9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzcwCittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IGRldmljZT9cbiIKK21zZ3N0ciAiUOlyaXBo6XJpcXVlIHBldXQt6nRyZSBpbmV4aXN0YW50oD9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzczCittc2dpZCAiIgorIkRpc2sgd3JpdGUtcHJvdGVjdGVkOyB1c2UgdGhlIC1uIG9wdGlvbiB0byBkbyBhIHJlYWQtb25seVxuIgorImNoZWNrIG9mIHRoZSBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJEaXNxdWUgcHJvdOln6SBlbiDpY3JpdHVyZaA7IHV0aWxpc2V6IGwnb3B0aW9uIC1uIHBvdXIgZWZmZWN0dWVyIHVuZVxuIgorInbpcmlmaWNhdGlvbiBkdSBw6XJpcGjpcmlxdWUgZW4gbGVjdHVyZSBzZXVsZS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDM3Cittc2dpZCAiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIgorbXNnc3RyICJWZXVpbGxleiBvYnRlbmlyIHVuZSB2ZXJzaW9uIHBsdXMgculjZW50ZSBkJ2UyZnNja6AhIgorCisjOiBlMmZzY2svdW5peC5jOjE0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgZXh0MyBqb3VybmFsIGZvciAlcyIKK21zZ3N0ciAibG9ycyBkZSBsYSB26XJpZmljYXRpb24gZHUgam91cm5hbCBleHQzIHBvdXIgJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTQ5MgorbXNnaWQgIiIKKyJXYXJuaW5nOiBza2lwcGluZyBqb3VybmFsIHJlY292ZXJ5IGJlY2F1c2UgZG9pbmcgYSByZWFkLW9ubHkgZmlsZXN5c3RlbSAiCisiY2hlY2suXG4iCittc2dzdHIgIiIKKyJBdmVydGlzc2VtZW50oDogc2F1dGUgbGEgculjdXDpcmF0aW9uIGR1IGpvdXJuYWwgcHVpc3F1ZSBsJ29uXG4iCisicHJvY+hkZSDgIGwnZXhhbWVuIGQndW4gc3lzdOhtZSBkZSBmaWNoaWVycyBlbiBsZWN0dXJlIHNldWxlLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBzdXBlcmJsb2NrIGZsYWdzIG9uICVzXG4iCittc2dzdHIgImltcG9zc2libGUgZCdpbml0aWFsaXNlciBsZXMgZHJhcGVhdXggZHUgc3VwZXJibG9jIHN1ciAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVjb3ZlcmluZyBleHQzIGpvdXJuYWwgb2YgJXMiCittc2dzdHIgImxvcnMgZGUgbGEgculjdXDpcmF0aW9uIGR1IGpvdXJuYWwgZXh0MyBkZSAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpOiIKK21zZ3N0ciAiJXMgYSB1bmUoZGVzKSBmb25jdGlvbm5hbGl06ShzKSBub24gc3VwcG9ydOllKHMpoDoiCisKKyM6IGUyZnNjay91bml4LmM6MTU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FybmluZzogY29tcHJlc3Npb24gc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCittc2dzdHIgIiVzoDogYXZlcnRpc3NlbWVudKA6IGxlIHN1cHBvcnQgZGUgbGEgY29tcHJlc3Npb24gZXN0IGV4cOlyaW1lbnRhbC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogZTJmc2NrIG5vdCBjb21waWxlZCB3aXRoIEhUUkVFIHN1cHBvcnQsXG4iCisiXHRidXQgZmlsZXN5c3RlbSAlcyBoYXMgSFRSRUUgZGlyZWN0b3JpZXMuXG4iCittc2dzdHIgIiIKKyIlc6A6IGUyZnNjayBuJ2VzdCBwYXMgY29tcGls6SBhdmVjIGxlIHN1cHBvcnQgcG91ciBIVFJFRSxcbiIKKyJcdG1haXMgbGUgc3lzdOhtZSBkZSBmaWNoaWVycyAlcyBhIGRlcyBy6XBlcnRvaXJlcyBIVFJFRS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSByZWFkaW5nIGJhZCBibG9ja3MgaW5vZGVcbiIKK21zZ3N0ciAiJXOgOiAlcyBsb3JzIGRlIGxhIGxlY3R1cmUgZGUgbCdpLW5vZXVkIGRlcyBibG9jcyBk6WZlY3R1ZXV4XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxMAorbXNnaWQgIlRoaXMgZG9lc24ndCBib2RlIHdlbGwsIGJ1dCB3ZSdsbCB0cnkgdG8gZ28gb24uLi5cbiIKK21zZ3N0ciAiQ2VsYSBuZSBzZW1ibGUgcGFzIOp0cmUgYmllbiwgbWFpcyBvbiB2YSBxdWFuZCBt6m1lIGVzc2F5ZXIuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCVkIGJsb2Nrcyk6ICIKK21zZ3N0ciAiQ3LpYXRpb24gZHUgam91cm5hbCAoJWQgYmxvY3MpoDogIgorCisjOiBlMmZzY2svdW5peC5jOjE2NjIKK21zZ2lkICIgRG9uZS5cbiIKK21zZ3N0ciAiQ29tcGzpdOkuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY2NAorbXNnaWQgIiIKKyJcbiIKKyIqKiogam91cm5hbCBoYXMgYmVlbiByZS1jcmVhdGVkIC0gZmlsZXN5c3RlbSBpcyBub3cgZXh0MyBhZ2FpbiAqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIioqKiBsZSBqb3VybmFsIGEg6XTpIHJlLWNy6ekgLSBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIGVzdCBkZSBub3V2ZWF1IGV4dDMgIgorIioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2ODgKK21zZ2lkICJSZXN0YXJ0aW5nIGUyZnNjayBmcm9tIHRoZSBiZWdpbm5pbmcuLi5cbiIKK21zZ3N0ciAiUmUtZOltYXJyb25zIGUyZnNjayBkZXB1aXMgbGUgZOlidXQuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjkyCittc2dpZCAid2hpbGUgcmVzZXR0aW5nIGNvbnRleHQiCittc2dzdHIgImxvcnMgZGUgbGEgculpbml0aWFsaXNhdGlvbiBkdSBjb250ZXh0ZSIKKworIzogZTJmc2NrL3VuaXguYzoxNjk5Cittc2dpZCAiYWJvcnRlZCIKK21zZ3N0ciAiYXJy6nTpIgorCisjOiBlMmZzY2svdW5peC5jOjE3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGUyZnNjayBjYW5jZWxlZC5cbiIKK21zZ3N0ciAiJXOgOiBlMmZzY2sgYSDpdOkgYW5udWzpLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NDEgZTJmc2NrL3V0aWwuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqIExFIFNZU1TITUUgREUgRklDSElFUlMgQSDJVMkgTU9ESUZJySAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICoqKioqIFJFQk9PVCBMSU5VWCAqKioqKlxuIgorbXNnc3RyICIlc6A6ICoqKioqIFLJLUFNT1JDRVIgTElOVVggKioqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzUzIGUyZnNjay91dGlsLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIFdBUk5JTkc6IEZpbGVzeXN0ZW0gc3RpbGwgaGFzIGVycm9ycyAqKioqKioqKioqXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlc6A6ICoqQVRURU5USU9OoDogbGUgc3lzdOhtZSBkZSBmaWNoaWVycyBjb250aWVudCBlbmNvcmUgZGVzIGVycmV1cnMqKlxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MCBtaXNjL3V0aWwuYzo4NgorbXNnaWQgInlZIgorbXNnc3RyICJvTyIKKworIzogZTJmc2NrL3V0aWwuYzoxOTEKK21zZ2lkICJuTiIKK21zZ3N0ciAibk4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA1Cittc2dpZCAiPHk+IgorbXNnc3RyICI8bz4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA3Cittc2dpZCAiPG4+IgorbXNnc3RyICI8bj4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA5Cittc2dpZCAiICh5L24pIgorbXNnc3RyICIgKG8vbikiCisKKyM6IGUyZnNjay91dGlsLmM6MjIzCittc2dpZCAiY2FuY2VsbGVkIVxuIgorbXNnc3RyICJhbm51bOmgIVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjIzOAorbXNnaWQgInllc1xuIgorbXNnc3RyICJvdWlcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNDAKK21zZ2lkICJub1xuIgorbXNnc3RyICJub25cbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyBub1xuIgorIlxuIgorbXNnc3RyICIiCisiJXOgPyBub25cbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyB5ZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzoD8gb3VpXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAieWVzIgorbXNnc3RyICJvdWkiCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAibm8iCittc2dzdHIgIm5vbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJmc2NrX3JlYWRfYml0bWFwczogaWxsZWdhbCBiaXRtYXAgYmxvY2socykgZm9yICVzIgorbXNnc3RyICJlMmZzY2tfcmVhZF9iaXRtYXBzoDogYmxvYyhzKSBkZSBiaXRtYXAgaWxs6WdhbChhdXgpIHBvdXIgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjc4Cittc2dpZCAicmVhZGluZyBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcyIKK21zZ3N0ciAibGEgbGVjdHVyZSBkZXMgYml0bWFwcyBkJ2ktbm9ldWRzIGV0IGRlIGJsb2NzIgorCisjOiBlMmZzY2svdXRpbC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXRyeWluZyB0byByZWFkIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkZSByZS1sZWN0dXJlIGRlcyBiaXRtYXBzIHBvdXIgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjk4Cittc2dpZCAid3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyIKK21zZ3N0ciAibCfpY3JpdHVyZSBkZXMgYml0bWFwcyBkZSBibG9jcyBldCBkJ2ktbm9ldWRzIgorCisjOiBlMmZzY2svdXRpbC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXdyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICIiCisibG9ycyBkJ3VuZSBub3V2ZWxsZSB0ZW50YXRpdmUgZCfpY3JpdHVyZSBkZSBiaXRtYXBzIGRlIGJsb2NzIGV0IGQnaS1ub2V1ZHMgIgorInBvdXIgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyIlczogVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOyBSVU4gZnNjayBNQU5VQUxMWS5cbiIKKyJcdChpLmUuLCB3aXRob3V0IC1hIG9yIC1wIG9wdGlvbnMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyIlczogSU5DT05TSVNURU5DRSBJTkFUVEVORFVFoDsgRVjJQ1VURVogZnNjayBNQU5VRUxMRU1FTlQuXG4iCisiXHQoaS5lLiwgc2FucyBvcHRpb25zIC1hIG91IC1wKVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCittc2dzdHIgIk3pbW9pcmUgdXRpbGlz6WWgOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKKworIzogZTJmc2NrL3V0aWwuYzo0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdSwgIgorbXNnc3RyICJN6W1vaXJlIHV0aWxpc+lloDogJWx1LCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWU6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCittc2dzdHIgInRlbXBzoDogJTUuMmYvJTUuMmYvJTUuMmZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZWxhcHNlZCB0aW1lOiAlNi4zZlxuIgorbXNnc3RyICJ0ZW1wcyDpY291bOmgOiAlNi4zZlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjQ0NyBlMmZzY2svdXRpbC5jOjQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAibG9ycyBkZSBsYSBsZWN0dXJlIGRlIGwnaS1ub2V1ZCAlbHUgZGFucyAlcyIKKworIzogZTJmc2NrL3V0aWwuYzo0NzUgZTJmc2NrL3V0aWwuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgImxvcnMgZGUgbCfpY3JpdHVyZSBkZSBsJ2ktbm9ldWQgJWx1IGRhbnMgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6NjM3Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyB6ZXJvaXppbmcgYnVmZmVyIgorbXNnc3RyICJsb3JzIGRlIGwnYWxsb2NhdGlvbiBkJ3VuIHRhbXBvbiBkZSBtaXNlIOAgeulybyIKKworIzogZTJmc2NrL3V0aWwuYzo3ODUKK21zZ2lkICIiCisiVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb2RpZmllZCB3aGlsZSBmc2NrIGlzICIKKyJydW5uaW5nLlxuIgorbXNnc3RyICIiCisiSU5DT0jJUkVOQ0UgSU5BVFRFTkRVRaA6IGxlIHN5c3TobWUgZGUgZmljaGllcnMgYSDpdOkgbW9kaWZp6SBwZW5kYW50IGxlICIKKyJk6XJvdWxlbWVudCBkZSBmc2NrLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjcyCittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiY29tcGzpdOkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYiBibG9ja19zaXplXSBbLWkgaW5wdXRfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxvY2tzX2F0X29uY2VdIFstZCBkZWxheV9mYWN0b3JfYmV0d2Vlbl9yZWFkc10gWy1lICIKKyJtYXhfYmFkX2Jsb2Nrc11cbiIKKyIgICAgICAgWy1wIG51bV9wYXNzZXNdIFstdCB0ZXN0X3BhdHRlcm4gWy10IHRlc3RfcGF0dGVybiBbLi4uXV1dXG4iCisiICAgICAgIGRldmljZSBbbGFzdF9ibG9jayBbZmlyc3RfYmxvY2tdXVxuIgorbXNnc3RyICIiCisiVXRpbGlzYXRpb26gOiAlcyBbLWIgdGFpbGxlX2RlX2Jsb2NdIFstaSBmaWNoaWVyX2RfZW50cullXSBbLW8gIgorImZpY2hpZXJfZGVfc29ydGllXVxuIgorIiAgICAgICBbLXN2d25mXSBbLWMgYmxvY3Nf4F9sYV9mb2lzXSBbLWQgZmFjdGV1cl9k6WxhaV9lbnRyZV9sZWN0dXJlc11cbiIKKyIgICAgICAgWy1lIG1heF9ibG9ja3NfZOlmZWN0dWV1eF0gWy1wIG5vbWJyZV9kZV9wYXNzZXNdXG4iCisiICAgICAgIFstdCBtb3RpZl9kZV90ZXN0IFstdCBtb3RpZl9kZV90ZXN0IFsuLi5dXV1cbiIKKyIgICAgICAgcOlyaXBo6XJpcXVlIFtkZXJuaWVyX2Jsb2MgW3ByZW1pZXJfYmxvY11dXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogVGhlIC1uIGFuZCAtdyBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyIlczogTGVzIG9wdGlvbnMgLW4gZXQgLXcgc29udCBtdXR1ZWxsZW1lbnQgZXhjbHVzaXZlLlxuIgorIlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICIlNi4yZiUlIGRvbmUsICVzIGVsYXBzZWQuICglZC8lZC8lZCBlcnJvcnMpIgorbXNnc3RyICIlNi4yZiUlIGVmZmVjdHXpLCAlcyDpY291bOkuICglZC8lZC8lZCBlcnJldXJzKSIKKworIzogbWlzYy9iYWRibG9ja3MuYzozMjgKK21zZ2lkICJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIKK21zZ3N0ciAiVGVzdCBlbiBjb3VycyBhdmVjIHVuIG1vdGlmIGFs6WF0b2lyZaA6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNDYKK21zZ2lkICJUZXN0aW5nIHdpdGggcGF0dGVybiAweCIKK21zZ3N0ciAiVGVzdCBlbiBjb3VycyBhdmVjIGxlIG1vdGlmIDB4IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM3OCBtaXNjL2JhZGJsb2Nrcy5jOjQ1MQorbXNnaWQgImR1cmluZyBzZWVrIgorbXNnc3RyICJsb3JzIGRlIGxhIHJlY2hlcmNoZSIKKworIzogbWlzYy9iYWRibG9ja3MuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIgorbXNnc3RyICJWYWxldXIgYml6YXJyZSAoJWxkKSBkYW5zIGRvX3JlYWRcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo0NzYKK21zZ2lkICJkdXJpbmcgZXh0MmZzX3N5bmNfZGV2aWNlIgorbXNnc3RyICJsb3JzIGRlIGwnZXjpY3V0aW9uIGQnZXh0MmZzX3N5bmNfZGV2aWNlIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ5NiBtaXNjL2JhZGJsb2Nrcy5jOjc1OAorbXNnaWQgIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iCittc2dzdHIgImxvcnMgZHUgZOlidXQgZGUgbCdpdOlyYXRpb24gZGUgbGEgbGlzdGUgZGVzIGJsb2NzIGTpZmVjdHVldXgiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTExIG1pc2MvYmFkYmxvY2tzLmM6NjExIG1pc2MvYmFkYmxvY2tzLmM6NzY5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBidWZmZXJzIgorbXNnc3RyICJsb3JzIGRlIGwnYWxsb2NhdGlvbiBkZXMgdGFtcG9ucyIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgYmxvY2tzICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiVulyaWZpY2F0aW9uIGRlcyBibG9jcyAlbHUg4CAlbHVcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjAKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLW9ubHkgbW9kZVxuIgorbXNnc3RyICJW6XJpZmljYXRpb24gZGVzIGJsb2NzIGTpZmVjdHVldXggZW4gbW9kZSBsZWN0dXJlIHNldWxlXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTI5Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKHJlYWQtb25seSB0ZXN0KTogIgorbXNnc3RyICJW6XJpZmljYXRpb24gZGVzIGJsb2NzIGTpZmVjdHVldXggKHRlc3QgZW4gbW9kZSBsZWN0dXJlIHNldWxlKaA6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MzYgbWlzYy9iYWRibG9ja3MuYzo2NDMgbWlzYy9iYWRibG9ja3MuYzo2ODUKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODMyCittc2dpZCAiVG9vIG1hbnkgYmFkIGJsb2NrcywgYWJvcnRpbmcgdGVzdFxuIgorbXNnc3RyICJUcm9wIGRlIGJsb2NzIGTpZmVjdHVldXgsIHRlc3QgYWJhbmRvbm7pXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjE4Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIlbpcmlmaWNhdGlvbiBkZXMgYmxvY3MgZOlmZWN0dWV1eCBlbiBtb2RlIGxlY3R1cmUt6WNyaXR1cmVcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MjAgbWlzYy9iYWRibG9ja3MuYzo3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSBibG9jayAlbHUgdG8gJWx1XG4iCittc2dzdHIgIkR1IGJsb2MgJWx1IGF1IGJsb2MgJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Njc1Cittc2dpZCAiUmVhZGluZyBhbmQgY29tcGFyaW5nOiAiCittc2dzdHIgIkxlY3R1cmUgZXQgY29tcGFyYWlzb26gOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NzgxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICIiCisiVulyaWZpY2F0aW9uIGRlcyBibG9jcyBk6WZlY3R1ZXV4IGRhbnMgdW4gbW9kZSBub24gZGVzdHJ1Y3RpZiBkZSBsZWN0dXJlLVxuIgorIuljcml0dXJlXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzg3Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIHRlc3QpXG4iCittc2dzdHIgIiIKKyJW6XJpZmljYXRpb24gZGVzIGJsb2NzIGTpZmVjdHVldXggKHRlc3Qgbm9uIGRlc3RydWN0aWYgZGUgbGVjdHVyZS3pY3JpdHVyZSlcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3OTQKK21zZ2lkICIiCisiXG4iCisiSW50ZXJydXB0IGNhdWdodCwgY2xlYW5pbmcgdXBcbiIKK21zZ3N0ciAiIgorIlxuIgorIkludGVycnVwdGlvbiwgbmV0dG95YWdlIGVuIGNvdXJzXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmluZyB0ZXN0IGRhdGEgd3JpdGUsIGJsb2NrICVsdSIKK21zZ3N0ciAibG9ycyBkdSB0ZXN0IGQn6WNyaXR1cmUgZGUgZG9ubullcywgYmxvYyAlbHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTk4IG1pc2MvdXRpbC5jOjMyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBtb3VudGVkOyAiCittc2dzdHIgIiVzIGVzdCBtb2506aA7ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDAwCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIiIKKyJsJ2V46WN1dGlvbiBkZSBiYWRibG9ja3MgZXN0IHRvdXQgZGUgbeptZSBmb3Jj6WUuXG4iCisiRXNw6XJvbnMgcXVlIC9ldGMvbXRhYiBlc3QgaW5jb3JyZWN0LlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDUKK21zZ2lkICJpdCdzIG5vdCBzYWZlIHRvIHJ1biBiYWRibG9ja3MhXG4iCittc2dzdHIgImlsIG4nZXN0IHBhcyBwcnVkZW50IGQnZXjpY3V0ZXIgYmFkYmxvY2tzoCFcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDEwIG1pc2MvdXRpbC5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhcHBhcmVudGx5IGluIHVzZSBieSB0aGUgc3lzdGVtOyAiCittc2dzdHIgIiVzIGVzdCBhcHBhcmVtbWVudCB1dGlsaXPpIHBhciBsZSBzeXN06G1loDsgIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMTMKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAiYmxvY3MgZXJyb27pcyBmb3Jj6XMgZGUgdG91dGVzIG1hbmnocmVzLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyAtICVzIgorbXNnc3RyICIlcyBpbnZhbGlkZSAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGJpZyBtYXggYmFkIGJsb2NrcyBjb3VudCAldSAtIG1heGltdW0gaXMgJXUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGVzdF9wYXR0ZXJuIC0gJXMiCittc2dzdHIgIm5lIHBldXQgYWxsb3VlciBkZSBsYSBt6W1vaXJlIHBvdXIgbW90aWZfZGVfdGVzdCAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExODQKK21zZ2lkICJNYXhpbXVtIG9mIG9uZSB0ZXN0X3BhdHRlcm4gbWF5IGJlIHNwZWNpZmllZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiQXUgcGx1cyB1biBzZXVsIG1vdGlmX2RlX3Rlc3QgcGV1dCDqdHJlIHNw6WNpZukgZW4gbW9kZSBsZWN0dXJlIHNldWxlIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExOTAKK21zZ2lkICJSYW5kb20gdGVzdF9wYXR0ZXJuIGlzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJVbiBtb3RpZl9kZV90ZXN0IGFs6WF0b2lyZSBuJ2VzdCBwYXMgcGVybWlzIGVuIG1vZGUgbGVjdHVyZSBzZXVsZSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjA0Cittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG1hbnVhbGx5XG4iCittc2dzdHIgIiIKKyJOZSBwZXV0IGTpdGVybWluZXIgbGEgdGFpbGxlIGR1IHDpcmlwaOlyaXF1ZaA7IHZvdXMgZGV2ZXogc3DpY2lmaWVyXG4iCisibGEgdGFpbGxlIG1hbnVlbGxlbWVudFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMTAKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIgorbXNnc3RyICJsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkZSBk6XRlcm1pbmF0aW9uIGRlIGxhIHRhaWxsZSBkdSBw6XJpcGjpcmlxdWUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIxNQorbXNnaWQgImxhc3QgYmxvY2siCittc2dzdHIgImRlcm5pZXIgYmxvYyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjIxCittc2dpZCAiZmlyc3QgYmxvY2siCittc2dzdHIgInByZW1pZXIgYmxvYyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnRpbmcgYmxvY2sgKCVsbHUpOiBtdXN0IGJlIGxlc3MgdGhhbiAlbGx1IgorbXNnc3RyICJibG9jIGRlIGTpcGFydCBpbnZhbGlkZSAoJWxsdSmgOiBkb2l0IOp0cmUgbW9pbnMgZGUgJWxsdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZW5kIGJsb2NrICglbGx1KTogbXVzdCBiZSAzMi1iaXQgdmFsdWUiCittc2dzdHIgImJsb2MgZGUgZOlwYXJ0IGludmFsaWRlICglbGx1KaA6IGRvaXQg6nRyZSB1bmUgdmFsZXVyIHN1ciAzMiBiaXQiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI4NworbXNnaWQgIndoaWxlIGNyZWF0aW5nIGluLW1lbW9yeSBiYWQgYmxvY2tzIGxpc3QiCittc2dzdHIgImxvcnMgZGUgbGEgY3LpYXRpb24gZW4gbeltb2lyZSBkJ3VuZSBsaXN0ZSBkZXMgYmxvY3MgZOlmZWN0dWV1eCIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjk2Cittc2dpZCAiaW5wdXQgZmlsZSAtIGJhZCBmb3JtYXQiCittc2dzdHIgImZpY2hpZXIgZCdlbnRy6WUgLSBtYXV2YWlzIGZvcm1hdCIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzA0IG1pc2MvYmFkYmxvY2tzLmM6MTMxMworbXNnaWQgIndoaWxlIGFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgImxvcnMgZGUgbCdham91dCBlbiBt6W1vaXJlIOAgbGEgbGlzdGUgZGVzIGJsb2NzIGTpZmVjdHVldXgiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTMzOAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIKK21zZ3N0ciAiUGFzc2UgY29tcGzpdOllLCAldSBibG9jcyBk6WZlY3R1ZXV4IHJlcOly6XMuICglZC8lZC8lZCBlcnJldXJzKVxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWZl0gWy0rPWFBY0NkRGVpanNTdFR1XSBbLXYgdmVyc2lvbl0gZmlsZXMuLi5cbiIKK21zZ3N0ciAiVXRpbGlzYXRpb26gOiAlcyBbLVJWZl0gWy0rPWFBY0NkRGVpanNTdFR1XSBbLXYgdmVyc2lvbl0gZmljaGllcnMuLi5cbiIKKworIzogbWlzYy9jaGF0dHIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHZlcnNpb24gLSAlc1xuIgorbXNnc3RyICJ2ZXJzaW9uIGVycm9u6WUgLSAlc1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwMSBtaXNjL2xzYXR0ci5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc3RhdCAlcyIKK21zZ3N0ciAibG9ycyBkZSBsJ+l2YWx1YXRpb24gcGFyIHN0YXQoKSBkZSAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAibG9ycyBkZSBsYSBsZWN0dXJlIGRlcyBkcmFwZWF1eCBzdXIgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjEzIG1pc2MvY2hhdHRyLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzIG9mICVzIHNldCBhcyAiCittc2dzdHIgIkRyYXBlYXV4IGRlICVzIGluaXRpYWxpc+lzIGNvbW1lICIKKworIzogbWlzYy9jaGF0dHIuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAibG9ycyBkZSBsJ2luaXRpYWxpc2F0aW9uIGRlcyBkcmFwZWF1eCBzdXIgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gb2YgJXMgc2V0IGFzICVsdVxuIgorbXNnc3RyICJWZXJzaW9uIGRlICVzIGluaXRpYWxpc+llIOAgJWx1XG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgdmVyc2lvbiBvbiAlcyIKK21zZ3N0ciAibG9ycyBkZSBsJ2luaXRpYWxpc2F0aW9uIGRlIGxhIHZlcnNpb24gc3VyICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjI2NworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIHBhdGggdmFyaWFibGUgaW4gY2hhdHRyX2Rpcl9wcm9jIgorbXNnc3RyICJOZSBwZXV0IGFsbG91ZXIgdW5lIHZhcmlhYmxlIGRlIGNoZW1pbiBkYW5zIGNoYXR0cl9kaXJfcHJvYyIKKworIzogbWlzYy9jaGF0dHIuYzozMDcKK21zZ2lkICI9IGlzIGluY29tcGF0aWJsZSB3aXRoIC0gYW5kICtcbiIKK21zZ3N0ciAiPSBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgLSBldCArXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MzE1Cittc2dpZCAiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iCittc2dzdHIgIlZvdXMgZGV2ZXogdXRpbGlzZXIgq6AtdqC7LCA9IC0gb3UgK1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08bnVtPl0gWy1vIGJsb2Nrc2l6ZT08bnVtPl0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJVdGlsaXNhdGlvbqA6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08bm9tYnJlPl0gWy1vIGJsb2Nrc2l6ZT08bm9tYnJlPl0gIgorInDpcmlwaOlyaXF1ZVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTU5Cittc2dpZCAiYmxvY2tzIgorbXNnc3RyICJibG9jcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE2OQorbXNnaWQgImNsdXN0ZXJzIgorbXNnc3RyICJjbHVzdGVycyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJHcm91cCAlbHU6IChCbG9ja3MgIgorbXNnc3RyICJHcm91cGUgJWx1oDogKEJsb2NzICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIENoZWNrc3VtIDB4JTA0eCIKK21zZ3N0ciAiICBDaGVja3N1bSAweCUwNHgiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChFWFBFQ1RFRCAweCUwNHgpIgorbXNnc3RyICIgKEFUVEVORFUgMHglMDR4KSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICIsIHVudXNlZCBpbm9kZXMgJXVcbiIKK21zZ3N0ciAiLCBpLW5vZXVkcyBub24gdXRpbGlz6XMgJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICVzIHN1cGVyYmxvY2sgYXQgIgorbXNnc3RyICIgc3VwZXJibG9jICVzIOAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE0Cittc2dpZCAiUHJpbWFyeSIKK21zZ3N0ciAiUHJpbWFpcmUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTQKK21zZ2lkICJCYWNrdXAiCittc2dzdHIgIlNlY291cnMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTgKK21zZ2lkICIsIEdyb3VwIGRlc2NyaXB0b3JzIGF0ICIKK21zZ3N0ciAiLCBEZXNjcmlwdGV1cnMgZGUgZ3JvdXBlcyDgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyMgorbXNnaWQgIiIKKyJcbiIKKyIgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBCbG9jcyBy6XNlcnbpcyBHRFQg4CAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjkKK21zZ2lkICIgR3JvdXAgZGVzY3JpcHRvciBhdCAiCittc2dzdHIgIiBEZXNjcmlwdGV1ciBkZSBncm91cGUg4CAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzUKK21zZ2lkICIgIEJsb2NrIGJpdG1hcCBhdCAiCittc2dzdHIgIiBCaXRtYXAgZGUgYmxvY3Mg4CAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzkKK21zZ2lkICIsIElub2RlIGJpdG1hcCBhdCAiCittc2dzdHIgIiwgQml0bWFwIGQnaS1ub2V1ZHMg4CAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDMKK21zZ2lkICIiCisiXG4iCisiICBJbm9kZSB0YWJsZSBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgVGFibGUgZCdpLW5vZXVkcyDgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiICAldSBmcmVlICVzLCAldSBmcmVlIGlub2RlcywgJXUgZGlyZWN0b3JpZXMlcyIKK21zZ3N0ciAiIgorIlxuIgorIiAgJXUgJXMgbGlicmVzLCAldSBpLW5vZXVkcyBsaWJyZXMsICV1IHLpcGVydG9pcmVzJXMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAldSB1bnVzZWQgaW5vZGVzXG4iCittc2dzdHIgIiwgJXUgaS1ub2V1ZHMgbm9uIHV0aWxpc+lzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTkKK21zZ2lkICIgIEZyZWUgYmxvY2tzOiAiCittc2dzdHIgIiBCbG9jcyBsaWJyZXOgOiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNzQKK21zZ2lkICIgIEZyZWUgaW5vZGVzOiAiCittc2dzdHIgIiBJLW5vZXVkcyBsaWJyZXOgOiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMTAKK21zZ2lkICJ3aGlsZSBwcmludGluZyBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAibG9ycyBkZSBsJ2FmZmljaGFnZSBkZSBsYSBsaXN0ZSBkZXMgYmxvY3MgZOlmZWN0dWV1eCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2tzOiAldSIKK21zZ3N0ciAiQmxvY3MgZOlmZWN0dWV1eKA6ICV1IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzQ1IG1pc2MvdHVuZTJmcy5jOjM0NworbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAibG9ycyBkZSBsYSBsZWN0dXJlIGRlIGwnaS1ub2V1ZCBkdSBqb3VybmFsIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzUxCittc2dpZCAid2hpbGUgb3BlbmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJsb3JzIGRlIGwnb3V2ZXJ0dXJlIGRlIGwnaS1ub2V1ZCBkdSBqb3VybmFsIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzU3Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyIGJsb2NrIgorbXNnc3RyICJsb3JzIGRlIGxhIGxlY3R1cmUgZHUgam91cm5hbCBkdSBzdXBlcmJsb2MiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjQKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVyIGludmFsaWQhXG4iCittc2dzdHIgIkxlIG51belybyBtYWdpcXVlIGR1IHN1cGVyYmxvYyBkZSBqb3VybmFsIGVzdCBpbnZhbGlkZaAhXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjcKK21zZ2lkICJKb3VybmFsIGZlYXR1cmVzOiAgICAgICAgIgorbXNnc3RyICJGb25jdGlvbmFsaXTpcyBkdSBqb3VybmFsoDogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzgwCittc2dpZCAiSm91cm5hbCBzaXplOiAgICAgICAgICAgICAiCittc2dzdHIgIlRhaWxsZSBkdSBqb3VybmFsoDogICAgICAgICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKK21zZ3N0ciAiIgorIkxvbmd1ZXVyIGR1IGpvdXJuYWygOiAgICAgICV1XG4iCisiU+lxdWVuY2UgZHUgam91cm5hbKA6ICAgICAgMHglMDh4XG4iCisiROlidXQgZHUgam91cm5hbKA6ICAgICAgICAgJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGVycm5vOiAgICAgICAgICAgICVkXG4iCittc2dzdHIgIk51belybyBlcnJldXIgZHUgam91cm5hbDogJWRcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQxNSBtaXNjL3R1bmUyZnMuYzoxOTYKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAibG9ycyBkZSBsYSBsZWN0dXJlIGR1IGpvdXJuYWwgZHUgc3VwZXJibG9jIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDIzCittc2dpZCAiQ291bGRuJ3QgZmluZCBqb3VybmFsIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVycyIKK21zZ3N0ciAiTmUgcGV1dCB0cm91dmVyIGxlcyBudW3pcm9zIG1hZ2lxdWVzIGR1IHN1cGVyYmxvYyBkdSBqb3VybmFsIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIGJsb2NrIHNpemU6ICAgICAgICV1XG4iCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgZmlyc3QgYmxvY2s6ICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIG51bWJlciBvZiB1c2VyczogICV1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJUYWlsbGUgZGUgYmxvYyBkdSBqb3VybmFsoDogICAgICAgICV1XG4iCisiTG9uZ3VldXIgZHUgam91cm5hbKA6ICAgICAgICAgICAgICAldVxuIgorIlByZW1pZXIgYmxvYyBkdSBqb3VybmFsoDogICAgICAgICAgJXVcbiIKKyJT6XF1ZW5jZSBkdSBqb3VybmFsoDogICAgICAgICAgICAgIDB4JTA4eFxuIgorIkTpYnV0IGR1IGpvdXJuYWygOiAgICAgICAgICAgICAgICAgJXVcbiIKKyJOb21icmUgZCd1dGlsaXNhdGV1cnMgZHUgam91cm5hbKA6ICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB1c2VyczogICAgICAgICAgICAlc1xuIgorbXNnc3RyICJVc2FnZXJzIGR1IGpvdXJuYWygOiAgICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NTYgbWlzYy9ta2UyZnMuYzo3NDMgbWlzYy90dW5lMmZzLmM6MTIxMQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBvcHRpb25zIVxuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYWxsb3VlciBkZSBsYSBt6W1vaXJlIHBvdXIgYW5hbHlzZXIgbGVzIG9wdGlvbnOgIVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jayBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlBhcmFt6HRyZSBkZSBzdXBlcmJsb2MgaW52YWxpZGWgOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyYW3odHJlIGRlIHRhaWxsZSBkZSBibG9jIGludmFsaWRloDogJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjUwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIGV4dGVuZGVkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0c3VwZXJibG9jaz08c3VwZXJibG9jayBudW1iZXI+XG4iCisiXHRibG9ja3NpemU9PGJsb2Nrc2l6ZT5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlVuZSBvdSBkZXMgb3B0aW9ucyBzcOljaWZp6WVzIHNvbnQgZXJyb27pZXOgOiAlc1xuIgorIlxuIgorIkxlcyBvcHRpb25zIOl0ZW5kdWVzIHNvbnQgc+lwYXLpZXMgcGFyIGRlcyB2aXJndWxlcyBldCBwZXV2ZW50IHByZW5kcmUgdW5cbiIKKyJcdGFyZ3VtZW50IHF1aSBlc3QgZOlmaW5pIOAgbCdhaWRlIGQndW4gc2lnbmUgZCfpZ2FsaXTpICiroD2guykuXG4iCisiXG4iCisiTGVzIG9wdGlvbnMgdmFsaWRlcyBzb250OlxuIgorIlx0c3VwZXJibG9jaz08bnVt6XJvIGRlIHN1cGVyYmxvYz5cbiIKKyJcdGJsb2Nrc2l6ZT08dGFpbGxlIGRlIGJsb2M+XG4iCisiXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NjggbWlzYy9ta2UyZnMuYzoxNzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXNcbiIKK21zZ3N0ciAiXHRVdGlsaXNhdGlvbiBkZSAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjA2IG1pc2MvZTJpbWFnZS5jOjE1ODIgbWlzYy90dW5lMmZzLmM6MjA2MAorIzogcmVzaXplL21haW4uYzozMTkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIHVuIHN1cGVyYmxvYyBkZSBzeXN06G1lIGRlIGZpY2hpZXJzIHZhbGlkZS5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICVzOiBlcnJvciByZWFkaW5nIGJpdG1hcHM6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlc6A6ICVzoDogZXJyZXVyIGxvcnMgZGUgbGEgbGVjdHVyZSBkZXMgYml0bWFwc6A6ICVzXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWyAtcnxRIF0gWyAtZnIgXSBkZXZpY2UgaW1hZ2UtZmlsZVxuIgorbXNnc3RyICJVdGlsaXNhdGlvbqA6ICVzIFsgLXJ8USBdIFsgLWZyIF0gcOlyaXBo6XJpcXVlIGZpY2hpZXJfaW1hZ2VcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyAtSSBkZXZpY2UgaW1hZ2UtZmlsZVxuIgorbXNnc3RyICIgICAgICAgICAgICAgICVzIC1JIHDpcmlwaOlyaXF1ZSBmaWNoaWVyX2ltYWdlXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICVzIC1yYSAgWyAgLWNmbnAgIF0gWyAtbyBzcmNfb2Zmc2V0IF0gWyAtTyBkZXN0X29mZnNldCBdIHNyY19mcyAiCisiWyBkZXN0X2ZzIF1cbiIKK21zZ3N0ciAiIgorIiAgICAgICAgICAgICAgJXMgLXJhICBbICAtY2ZucCAgXSBbIC1vIGTpY2FsYWdlLXNyYyBdIFsgLU8gZOljYWxhZ2UtZHN0IF0gIgorInNyY19mcyBbIGRlc3RfZnMgXVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjkgbWlzYy9lMmltYWdlLmM6NTc2IG1pc2MvZTJpbWFnZS5jOjU4MgorIzogbWlzYy9lMmltYWdlLmM6MTE3OAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVyIgorbXNnc3RyICJsb3JzIGRlIGwnYWxsb2NhdGlvbiBkJ3VuIHRhbXBvbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgYmxvY2sgJWxsdVxuIgorbXNnc3RyICLJY3JpdHVyZSBkdSBibG9jICVsbHVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHdyaXRpbmcgYmxvY2sgJWxsdSIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgZCfpY3JpdHVyZSBkdSBibG9jICVsbHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE5MQorbXNnaWQgImVycm9yIGluIGdlbmVyaWNfd3JpdGUoKSIKK21zZ3N0ciAiZXJyZXVyIGRhbnMgZ2VuZXJpY193cml0ZSgpIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMDgKK21zZ2lkICJFcnJvcjogaGVhZGVyIHNpemUgaXMgYmlnZ2VyIHRoYW4gd3J0X3NpemVcbiIKK21zZ3N0ciAiRXJyZXVyoDogbGEgdGFpbGxlIGQnZW4tdOp0ZSBlc3QgcGx1cyBncmFuZGUgcXVlIHdydF9zaXplXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjIxMworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGhlYWRlciBidWZmZXJcbiIKK21zZ3N0ciAiTmUgcGV1dCBhbGxvdWVyIHVuIHRhbXBvbiBkJ2VuLXTqdGVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MjQxCittc2dpZCAid2hpbGUgd3JpdGluZyBzdXBlcmJsb2NrIgorbXNnc3RyICJsb3JzIGRlIGwn6WNyaXR1cmUgZHUgc3VwZXJibG9jIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNTAKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJsb3JzIGRlIGwn6WNyaXR1cmUgZGUgbGEgdGFibGUgZCdpLW5vZXVkcyIKKworIzogbWlzYy9lMmltYWdlLmM6MjU4Cittc2dpZCAid2hpbGUgd3JpdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgImxvcnMgZGUgbCfpY3JpdHVyZSBkdSBiaXRtYXAgZGUgYmxvY3MiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI2NgorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgYml0bWFwIgorbXNnc3RyICJsb3JzIGRlIGwn6WNyaXR1cmUgZHUgYml0bWFwIGQnaS1ub2V1ZHMiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IGRpcmVjdG9yeSBibG9jayAlbGx1OiBiYWQgcmVjX2xlbiAoJWQpXG4iCittc2dzdHIgIkJsb2MgZGVzIHLpcGVydG9pcmVzICVsbHUgY29ycm9tcHU6IG1hdXZhaXMgcmVjX2xlbiAoJWQpXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjUxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IGRpcmVjdG9yeSBibG9jayAlbGx1OiBiYWQgbmFtZV9sZW4gKCVkKVxuIgorbXNnc3RyICJCbG9jIGRlcyBy6XBlcnRvaXJlcyAlbGx1IGNvcnJvbXB1OiBtYXV2YWlzIG5hbWVfbGVuICglZClcbiIKKworIzogbWlzYy9lMmltYWdlLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsbHUgLyAlbGx1IGJsb2NrcyAoJWQlJSkiCittc2dzdHIgIiVsbHUgLyAlbGx1IGJsb2NzICglZCUlKSIKKworIzogbWlzYy9lMmltYWdlLmM6NTg2IG1pc2MvZTJpbWFnZS5jOjYyNgorbXNnaWQgIkNvcHlpbmcgIgorbXNnc3RyICJDb3BpZSAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjYyMworbXNnaWQgIiIKKyJTdG9wcGluZyBub3cgd2lsbCBkZXN0cm95IHRoZSBmaWxlc3lzdGVtLCBpbnRlcnJ1cHQgYWdhaW4gaWYgeW91IGFyZSBzdXJlXG4iCittc2dzdHIgIiIKKyJBcnLqdGVyIG1haW50ZW5hbnQgdmEgZOl0cnVpcmUgbGUgc3lzdOhtZSBkZSBmaWNoaWVyLCBpbnRlcnJvbXBleiBkZSBub3V2ZWF1ICIKKyJzaSB2b3VzIOp0ZXMgc/tyXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgcmVtYWluaW5nIGF0ICUuMmYgTUIvcyIKK21zZ3N0ciAiIHJlc3RlICVzIOAgJS4yZiBNby9zIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo2NjEgbWlzYy9lMmltYWdlLmM6MTE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIGJsb2NrICVsbHUiCittc2dzdHIgImVycmV1ciBkZSBsZWN0dXJlIGR1IGJsb2MgJWxsdSIKKworIzogbWlzYy9lMmltYWdlLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcGllZCAlbGx1IC8gJWxsdSBibG9ja3MgKCVkJSUpIGluICVzICIKK21zZ3N0ciAiQ29waekgJWxsdSAvICVsbHUgYmxvY3MgKCVkJSUpIGRhbnMgJXMgIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXQgJS4yZiBNQi9zIgorbXNnc3RyICLgICUuMmYgTW8vcyIKKworIzogbWlzYy9lMmltYWdlLmM6NzU1Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBsMSB0YWJsZSIKK21zZ3N0ciAibG9ycyBkZSBsJ2FsbG9jYXRpb24gZCd1bmUgdGFibGUgbDEiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjgwMAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgbDIgY2FjaGUiCittc2dzdHIgImxvcnMgZGUgbCdhbGxvY2F0aW9uIGQndW4gY2FjaGUgbDIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjgyMworbXNnaWQgIiIKKyJXYXJuaW5nOiBUaGVyZSBhcmUgc3RpbGwgdGFibGVzIGluIHRoZSBjYWNoZSB3aGlsZSBwdXR0aW5nIHRoZSBjYWNoZSwgZGF0YSAiCisid2lsbCBiZSBsb3N0IHNvIHRoZSBpbWFnZSBtYXkgbm90IGJlIHZhbGlkLlxuIgorbXNnc3RyICIiCisiQXR0ZW50aW9uoDogSWwgcmVzdGUgZGVzIHRhYmxlcyBkYW5zIGxlIGNhY2hlIGxvcnMgZGUgbGEgbGli6XJhdGlvbiBkdSAiCisiY2FjaGUsIGxlcyBkb25u6WVzIHNlcm9udCBwZXJkdWUsIGV0IGRvbmMgbCdpbWFnZSBwb3VycmFpdCBuZSBwYXMg6nRyZSAiCisidmFsaWRlLlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTQ1Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBleHQyX3Fjb3cyX2ltYWdlIgorbXNnc3RyICJsb3JzIGRlIGwnYWxsb2NhdGlvbiBkZSBleHQyZnNfcWNvdzJfaW1hZ2UiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjExNTIKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgZXh0Ml9xY293Ml9pbWFnZSIKK21zZ3N0ciAibG9ycyBkZSBsJ2luaXRpYWxpemF0aW9uIGRlIGV4dDJmc19xY293Ml9pbWFnZSIKKworIzogbWlzYy9lMmltYWdlLmM6MTIxMSBtaXNjL2UyaW1hZ2UuYzoxMjI5Cittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I6IG11bHRpcGxlIHNlcXVlbnRpYWwgcmVmY291bnQgYmxvY2tzIGNyZWF0ZWQhXG4iCittc2dzdHIgIiIKKyJFcnJldXIgZGUgcHJvZ3JhbW1hdGlvbqA6IHBsdXNpZXVycyBibG9jcyBz6XF1ZW50aWVscyByZWZjb3VudCBvbnQg6XTpICIKKyJjcunpc6AhXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyNjkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAibG9ycyBkZSBsJ2FsbG9jYXRpb24gZCd1biBiaXRtYXAgZGUgYmxvY3MiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyNzgKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIHNjcmFtYmxlIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAibG9ycyBkZSBsJ2FsbG9jYXRpb24gZCd1biBiaXRtYXAgZGUgYmxvYyBzY2FtYmxlIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjg1Cittc2dpZCAiU2Nhbm5pbmcgaW5vZGVzLi4uXG4iCittc2dzdHIgIkV4YW1lbiBkZXMgaS1ub2V1ZHMuLi5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTI5NworbXNnaWQgIkNhbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciIKK21zZ3N0ciAiTmUgcGV1dCBhbGxvdWVyIGxlIHRhbXBvbiBkZSBibG9jIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzM2IG1pc2MvZTJpbWFnZS5jOjEzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgaXRlcmF0aW5nIG92ZXIgaW5vZGUgJXUiCittc2dzdHIgImxvcnMgZGUgbCdpdGVyYXRpb24gc3VyIGwnaS1ub2V1ZCAldSIKKworIzogbWlzYy9lMmltYWdlLmM6MTM4MQorbXNnaWQgIlJhdyBhbmQgcWNvdzIgaW1hZ2VzIGNhbm5vdCBiZSBpbnN0YWxsZWQiCittc2dzdHIgIkxlcyBpbWFnZXMgYnJ1dGVzIGV0IHFjb3cyIG5lIHBldXZlbnQgcGFzIOp0cmUgaW5zdGFsbOllIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDAzCittc2dpZCAiZXJyb3IgcmVhZGluZyBiaXRtYXBzIgorbXNnc3RyICJlcnJldXIgbG9ycyBkZSBsYSBsZWN0dXJlIGRlcyBiaXRtYXBzIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDE1Cittc2dpZCAid2hpbGUgb3BlbmluZyBkZXZpY2UgZmlsZSIKK21zZ3N0ciAibG9ycyBkZSBsJ291dmVydHVyZSBkdSBmaWNoaWVyIGRlIHDpcmlwaOlyaXF1ZSIKKworIzogbWlzYy9lMmltYWdlLmM6MTQyNgorbXNnaWQgIndoaWxlIHJlc3RvcmluZyB0aGUgaW1hZ2UgdGFibGUiCittc2dzdHIgImxvcnMgZGUgbGEgcmVzdGF1cmF0aW9uIGRlIGRlIGxhIHRhYmxlIGRlIGwnaW1hZ2UiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MjMKK21zZ2lkICItYSBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHJhdyBvciBRQ09XMiBpbWFnZXMuIgorbXNnc3RyICJMJ29wdGlvbiAtYSBuZSBwZXV0IOp0cmUgdXRpbGlz6WUgcXUnYXZlYyBsZXMgaW1hZ2VzIGJydXRlcyBvdSBRQ09XMi4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MjkKK21zZ2lkICJPZmZzZXRzIGFyZSBvbmx5IGFsbG93ZWQgd2l0aCByYXcgaW1hZ2VzLiIKK21zZ3N0ciAiTGVzIGTpY2FsYWdlcyBuZSBzb250IGF1dG9yaXPpcyBxdSdhdmVjIGxlcyBpbWFnZXMgYnJ1dGVzLiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUzNAorbXNnaWQgIk1vdmUgbW9kZSBpcyBvbmx5IGFsbG93ZWQgd2l0aCByYXcgaW1hZ2VzLiIKK21zZ3N0ciAiTGUgbW9kZSBkZSBk6XBsYWNlbWVudCBuJ2VzdCBhdXRvcmlz6SBxdSdhdmVjIGxlcyBpbWFnZXMgYnJ1dGVzLiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUzOQorbXNnaWQgIk1vdmUgbW9kZSByZXF1aXJlcyBhbGwgZGF0YSBtb2RlLiIKK21zZ3N0ciAiTGUgbW9kZSBkZSBk6XBsYWNlbWVudCBu6WNlc3NpdGUgdG91cyBsZXMgbW9kZSBkZSBkb25u6WVzLiIKKworIzogbWlzYy9lMmltYWdlLmM6MTU0OQorbXNnaWQgImNoZWNraW5nIGlmIG1vdW50ZWQiCittc2dzdHIgInbpcmlmaWNhdGlvbiBkZSBtb250YWdlIGV4aXN0YW50IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTU2Cittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgZTJpbWFnZSBvbiBhIFIvVyBtb3VudGVkIGZpbGVzeXN0ZW0gY2FuIHJlc3VsdCBpbiBhblxuIgorImluY29uc2lzdGVudCBpbWFnZSB3aGljaCB3aWxsIG5vdCBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiIKKyJVc2UgLWYgb3B0aW9uIGlmIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGF0LlxuIgorbXNnc3RyICIiCisiXG4iCisiTGFuY2VyIGUyaW1hZ2Ugc3VyIHVuIHN5c3TobWUgZGUgZmljaGllciBtb2506SBlbiDpY3JpdHVyZSBwZXV0XG4iCisicHJvZHVpcmUgdW5lIGltYWdlIGluY29o6XJlbnRlIHF1aSBuZSBzZXJhIHBhcyB1dGlsZSBwb3VyIGRlcyBmaW5zXG4iCisiZGUgZOlidWdnYWdlLiBVdGlsaXNleiBsJ29wdGlvbiAtZiBzaSB2b3VzIHZvdWxleiBy6WVsbGVtZW50IGZhaXJlXG4iCisiY2VsYS5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYwOAorbXNnaWQgIlFDT1cyIGltYWdlIGNhbiBub3QgYmUgd3JpdHRlbiB0byB0aGUgc3Rkb3V0IVxuIgorbXNnc3RyICJVbmUgaW1hZ2UgUUNPVzIgbmUgcGV1dCBwYXMg6nRyZSDpY3JpdGUgc3VyIHN0ZG91dKAhXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MTQKK21zZ2lkICJDYW4gbm90IHN0YXQgb3V0cHV0XG4iCittc2dzdHIgIk5lIHBldXQgcGFzIGV4YW1pbmVyIGxhIHNvcnRpZVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkltYWdlICglcykgaXMgY29tcHJlc3NlZFxuIgorbXNnc3RyICJMJ2ltYWdlICglcykgZXN0IGNvbXByZXNz6WVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbWFnZSAoJXMpIGlzIGVuY3J5cHRlZFxuIgorbXNnc3RyICJMJ2ltYWdlICglcykgZXN0IGNoaWZmcullXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGNvbnZlcnQgcWNvdzIgaW1hZ2UgKCVzKSBpbnRvIHJhdyBpbWFnZSAoJXMpIgorbXNnc3RyICIiCisibG9ycyBkZSBsJ2Vzc2FpIGRlIGNvbnZlcnNpb24gZGUgbCdpbWFnZSBxY293MiAoJXMpIGVuIGltYWdlIGJydXRlICglcykiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MzkKK21zZ2lkICJUaGUgLWMgb3B0aW9uIG9ubHkgc3VwcG9ydGVkIGluIHJhdyBtb2RlXG4iCittc2dzdHIgIkwnb3B0aW9uIC1jIG4nZXN0IHN1cHBvcnTpZSBxdSdlbiBtb2RlIGJydXRcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY0NAorbXNnaWQgIlRoZSAtYyBvcHRpb24gbm90IHN1cHBvcnRlZCB3aGVuIHdyaXRpbmcgdG8gc3Rkb3V0XG4iCittc2dzdHIgIkwnb3B0aW9uIC1jIG4nZXN0IHBhcyBzdXBwb3J06WUgYXZlYyDpY3JpdHVyZSBzdXIgc3Rkb3V0XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NTEKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGNoZWNrX2J1ZiIKK21zZ3N0ciAibG9ycyBkZSBsJ2FsbG9jYXRpb24gZGUgY2hlY2tfYnVmIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjU3Cittc2dpZCAiVGhlIC1wIG9wdGlvbiBvbmx5IHN1cHBvcnRlZCBpbiByYXcgbW9kZVxuIgorbXNnc3RyICJMJ29wdGlvbiAtcCBuJ2VzdCBzdXBwb3J06WUgcXUnZW4gbW9kZSBicnV0XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxvY2tzIGFscmVhZHkgY29udGFpbmVkIHRoZSBkYXRhIHRvIGJlIGNvcGllZFxuIgorbXNnc3RyICIlZCBibG9jcyBjb250ZW5haWVudCBk6WrgIGxlcyBkb25u6WVzIGRldmFudCDqdHJlIGNvcGnpZXNcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IG9wZW4gJXNcbiIKK21zZ3N0ciAiZTJsYWJlbKA6IGltcG9zc2libGUgZCdvdXZyaXIgJXNcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsoDogbmUgcGV1dCBhdHRlaW5kcmUgbGUgc3VwZXJibG9jXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHJlYWRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsoDogZXJyZXVyIGRlIGxlY3R1cmUgZHUgc3VwZXJibG9jXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IG5vdCBhbiBleHQyIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiZTJsYWJlbKA6IG4nZXN0IHBhcyB1biBzeXN06G1lIGRlIGZpY2hpZXJzIGV4dDJcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6OTcgbWlzYy90dW5lMmZzLmM6MjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBsYWJlbCB0b28gbG9uZywgdHJ1bmNhdGluZy5cbiIKK21zZ3N0ciAiQXZlcnRpc3NlbWVudKA6IOl0aXF1ZXR0ZSB0cm9wIGxvbmd1ZSwgc2VyYSB0cm9ucXXpZS5cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2sgYWdhaW5cbiIKK21zZ3N0ciAiZTJsYWJlbKA6IG5lIHBldXQgYXR0ZWluZHJlIGxlIHN1cGVyYmxvYyDgIG5vdXZlYXVcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHdyaXRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsoDogZXJyZXVyIGxvcnMgZGUgbCfpY3JpdHVyZSBkdSBzdXBlcmJsb2NcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTE3IG1pc2MvdHVuZTJmcy5jOjg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogZTJsYWJlbCBkZXZpY2UgW25ld2xhYmVsXVxuIgorbXNnc3RyICJVdGlsaXNhdGlvbqA6IGUybGFiZWwgcOlyaXBo6XJpcXVlIFtub3V2ZWxsZV/pdGlxdWV0dGVdXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIDx0cmFuc2FjdGlvbiBmaWxlPiA8ZmlsZXN5c3RlbT5cbiIKK21zZ3N0ciAiVXRpbGlzYXRpb26gOiAlcyA8ZmljaGllciB0cmFuc2FjdGlvbj4gPHN5c3TobWUgZGUgZmljaGllcnM+XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NTIKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIKK21zZ3N0ciAiyWNoZWMgZGUgbGVjdHVyZSBkZXMgZG9ubullcyBkdSBzeXN06G1lIGRlIGZpY2hpZXJzIFxuIgorCisjOiBtaXNjL2UydW5kby5jOjYyIG1pc2MvZTJ1bmRvLmM6ODMgbWlzYy9lMnVuZG8uYzoxMDggbWlzYy9lMnVuZG8uYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9mZXRjaCAlc1xuIgorbXNnc3RyICLJY2hlYyB0ZGJfZmV0Y2ggJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIKK21zZ3N0ciAiTGEgZGF0ZSBkZSBtb250YWdlIGR1IHN5c3TobWUgZGUgZmljaGllcnMgbmUgY29ycmVzcG9uZCBwYXMg4CAldVxuIgorCisjOiBtaXNjL2UydW5kby5jOjg5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIFVVSUQgZGlkbid0IG1hdGNoIFxuIgorbXNnc3RyICJMJ1VVSUQgZHUgc3lzdOhtZSBkZSBmaWNoaWVycyBuZSBjb3JyZXNwb25kIHBhcyBcbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9vcGVuICVzXG4iCittc2dzdHIgIsljaGVjIHRkYl9vcGVuICVzXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgbGEgZOl0ZXJtaW5hdGlvbiDgIHNhdm9pciBzaSAlcyBlc3QgbW9udOkuXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTc1Cittc2dpZCAiZTJ1bmRvIHNob3VsZCBvbmx5IGJlIHJ1biBvbiB1bm1vdW50ZWQgZmlsZSBzeXN0ZW1cbiIKK21zZ3N0ciAiIgorImUydW5kbyBuZSBkZXZyYWl0IOp0cmUgbGFuY+kgcXVlIHN1ciB1biBzeXN06G1lIGRlIGZpY2hpZXJzIG5vbiBtb2506VxuIgorCisjOiBtaXNjL2UydW5kby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlc1xuIgorbXNnc3RyICLJY2hlYyBsb3JzIGRlIGwnb3V2ZXJ0dXJlIGRlICVzXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcGxheWVkIHRyYW5zYWN0aW9uIG9mIHNpemUgJXpkIGF0IGxvY2F0aW9uICVsbHVcbiIKK21zZ3N0ciAiUmVqZXUgZGUgbGEgdHJhbnNhY3Rpb24gZGUgdGFpbGxlICV6ZCDgIGxhIHBvc2l0aW9uICVsbHVcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHdyaXRlICVzXG4iCittc2dzdHIgIsljaGVjIOljcml0dXJlICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBjb3VsZG4ndCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJBVFRFTlRJT06gOiBpbXBvc3NpYmxlIGQnb3V2cmlyICVzoDogJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGJhZCBmb3JtYXQgb24gbGluZSAlZCBvZiAlc1xuIgorbXNnc3RyICJBVFRFTlRJT06gOiBmb3JtYXQgZXJyb27pIHN1ciBsYSBsaWduZSAlZCBkZSAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNzAKK21zZ2lkICIiCisiV0FSTklORzogWW91ciAvZXRjL2ZzdGFiIGRvZXMgbm90IGNvbnRhaW4gdGhlIGZzY2sgcGFzc25vXG4iCisiXHRmaWVsZC4gIEkgd2lsbCBrbHVkZ2UgYXJvdW5kIHRoaW5ncyBmb3IgeW91LCBidXQgeW91XG4iCisiXHRzaG91bGQgZml4IHlvdXIgL2V0Yy9mc3RhYiBmaWxlIGFzIHNvb24gYXMgeW91IGNhbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkFUVEVOVElPTqA6IHZvdHJlIGZpY2hpZXIgL2V0Yy9mc3RhYiBuZSBjb250aWVudCBwYXMgZGUgY2hhbXBcbiIKKyJcdGRlIG51belybyBkZSBwYXNzZSBmc2NrLiBKZSB2YWlzIGFycmFuZ2VyIGNldHRlIHNpdHVhdGlvbiBwb3VyIHZvdXNcbiIKKyJcdG1haXMgdm91cyBkZXZyaWV6IGNvcnJpZ2VyIHZvdHJlIGZpY2hpZXIgL2V0Yy9mc3RhYiBhdXNzaSB09HQgcXVlXG4iCisiXHRwb3NzaWJsZS5cbiIKKyJcbiIKKworIzogbWlzYy9mc2NrLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6ICVzOiBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNja6A6ICVzoDogbm9uIHRyb3V26VxuIgorCisjOiBtaXNjL2ZzY2suYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIgorbXNnc3RyICIlc6A6IHdhaXSgOiBwbHVzIGRlIHByb2Nlc3N1cyBmaWxzoD8hP1xuIgorCisjOiBtaXNjL2ZzY2suYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZy4uLiAlcyBmb3IgZGV2aWNlICVzIGV4aXRlZCB3aXRoIHNpZ25hbCAlZC5cbiIKK21zZ3N0ciAiIgorIkF2ZXJ0aXNzZW1lbnQuLi4gJXMgcG91ciBsZSBw6XJpcGjpcmlxdWUgJXMgcydlc3QgdGVybWlu6SBhdmVjIGxlIHNpZ25hbCAiCisiJWQuXG4iCisKKyM6IG1pc2MvZnNjay5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlczogc3RhdHVzIGlzICV4LCBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIgorbXNnc3RyICIlcyAlc6A6IGwn6XRhdCBlc3QgJXgsIG5lIGRldnJhaXQgamFtYWlzIHNlIHByb2R1aXJlLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluaXNoZWQgd2l0aCAlcyAoZXhpdCBzdGF0dXMgJWQpXG4iCittc2dzdHIgIlRlcm1pbukgYXZlYyAlcyAo6XRhdCBkZSBmaW4gZCdleOljdXRpb24gJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiVzoDogRXJyZXVyICVkIGxvcnMgZGUgbCdleOljdXRpb24gZGUgZnNjay4lcyBwb3VyICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjc0MgorbXNnaWQgIiIKKyJFaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlIGZpbGVzeXN0ZW0gdHlwZXMgcGFzc2VkIHRvIC10IG11c3QgYmUgcHJlZml4ZWRcbiIKKyJ3aXRoICdubycgb3IgJyEnLlxuIgorbXNnc3RyICIiCisiU29pdCB0b3VzIG91IGF1Y3VuIGRlcyB0eXBlcyBkZSBzeXN06G1lcyBkZSBmaWNoaWVycyBwYXNz6XMg4CAtdCBkb2l2ZW50XG4iCisi6nRyZSBwculmaXjpcyBwYXIgq6Bub6C7IG91IKugIaC7LlxuIgorCisjOiBtaXNjL2ZzY2suYzo3NjEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGVzeXN0ZW0gdHlwZXNcbiIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZCdhbGxvdWVyIGRlIGxhIG3pbW9pcmUgcG91ciBsZXMgdHlwZXMgZGUgc3lzdOhtZXMgZGUgZmljaGllcnNcbiIKKworIzogbWlzYy9mc2NrLmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogc2tpcHBpbmcgYmFkIGxpbmUgaW4gL2V0Yy9mc3RhYjogYmluZCBtb3VudCB3aXRoIG5vbnplcm8gZnNjayBwYXNzICIKKyJudW1iZXJcbiIKK21zZ3N0ciAiIgorIiVzoDogc2F1dCBkZSBsYSBtYXV2YWlzZSBsaWduZSBkZSAvZXRjL2ZzdGFioDogbW9udGFnZSCroGJpbmSguyBhdmVjIHVuICIKKyJudW3pcm8gZGUgcGFzc2UgZnNjayBub24gbnVsXG4iCisKKyM6IG1pc2MvZnNjay5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiBjYW5ub3QgY2hlY2sgJXM6IGZzY2suJXMgbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2ugOiBuZSBwZXV0IHBhcyB26XJpZmllciAlc6A6IGZzY2suJXMgbm9uIHRyb3V26VxuIgorCisjOiBtaXNjL2ZzY2suYzo5NjcKK21zZ2lkICJDaGVja2luZyBhbGwgZmlsZSBzeXN0ZW1zLlxuIgorbXNnc3RyICJW6XJpZmljYXRpb24gZGUgdG91cyBsZXMgc3lzdOhtZXMgZGUgZmljaGllcnMuXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS13YWl0aW5nLS0gKHBhc3MgJWQpXG4iCittc2dzdHIgIi0tZW4gYXR0ZW50ZS0tIChwYXNzZSAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6MTA3OAorbXNnaWQgIiIKKyJVc2FnZTogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGZzdHlwZV0gW2ZzLW9wdGlvbnNdIFtmaWxlc3lzIC4uLl1cbiIKK21zZ3N0ciAiIgorIlV0aWxpc2F0aW9uoDogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IHR5cGVfc3lzX2ZpY2hpZXJzXSAiCisiW29wdGlvbnNfc3lzX2ZpY2hpZXJzXSBbc3lzX2ZpY2hpZXJzLi4uXVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBkZXZpY2VzXG4iCittc2dzdHIgIiVzoDogdHJvcCBkZSBw6XJpcGjpcmlxdWVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjExNTMgbWlzYy9mc2NrLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIiVzoDogdHJvcCBkJ2FyZ3VtZW50c1xuIgorCisjOiBtaXNjL2xzYXR0ci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWYWRsdl0gW2ZpbGVzLi4uXVxuIgorbXNnc3RyICJVdGlsaXNhdGlvbqA6ICVzIFstUlZhZGx2XSBbZmljaGllcnMuLi5dXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiTG9ycyBkZSBsYSBsZWN0dXJlIGRlcyBkcmFwZWF1eCBzdXIgJXMiCisKKyM6IG1pc2MvbHNhdHRyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJMb3JzIGRlIGxhIGxlY3R1cmUgZGUgbGEgdmVyc2lvbiBzdXIgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jfC1sIGZpbGVuYW1lXSBbLWIgYmxvY2stc2l6ZV0gWy1DIGNsdXN0ZXItc2l6ZV1cbiIKKyJcdFstaSBieXRlcy1wZXItaW5vZGVdIFstSSBpbm9kZS1zaXplXSBbLUogam91cm5hbC1vcHRpb25zXVxuIgorIlx0Wy1HIGZsZXgtZ3JvdXAtc2l6ZV0gWy1OIG51bWJlci1vZi1pbm9kZXNdXG4iCisiXHRbLW0gcmVzZXJ2ZWQtYmxvY2tzLXBlcmNlbnRhZ2VdIFstbyBjcmVhdG9yLW9zXVxuIgorIlx0Wy1nIGJsb2Nrcy1wZXItZ3JvdXBdIFstTCB2b2x1bWUtbGFiZWxdIFstTSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5XVxuIgorIlx0Wy1PIGZlYXR1cmVbLC4uLl1dIFstciBmcy1yZXZpc2lvbl0gWy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV1cbiIKKyJcdFstdCBmcy10eXBlXSBbLVQgdXNhZ2UtdHlwZSBdIFstVSBVVUlEXSBbLWpucXZERktTVl0gZGV2aWNlIFtibG9ja3MtIgorImNvdW50XVxuIgorbXNnc3RyICIiCisiVXRpbGlzYXRpb26gOiAlcyBbLWN8LWwgbm9tLWRlLWZpY2hpZXJdIFstYiB0YWlsbGUtZGUtYmxvY10gWy1DIHRhaWxsZS1kZS0iCisiY2x1c3Rlcl1cbiIKKyJcdFstaSBvY3RldHMtcGFyLWktbm9ldWRdIFstSSB0YWlsbGUtZGVzLWktbm9ldWRzXVxuIgorIlx0Wy1KIG9wdGlvbnMtZGUtam91cm5hbF0gWy1HIHRhaWxsZS1ncm91cGUtZmxleF0gWy1OIG5vbWJyZS1kLWktbm9ldWRzXVxuIgorIlx0Wy1tIHBvdXJjZW50YWdlLWRlLWJsb2NzLXLpc2VydulzXVxuIgorIlx0Wy1vIHN5c3TobWUtZC1leHBsb2l0YXRpb24tZGUtY3LpYXRpb25dIFstZyBibG9jcy1wYXItZ3JvdXBlXVxuIgorIlx0Wy1MIOl0aXF1ZXR0ZS1kdS12b2x1bWVdIFstTSBkZXJuaWVyLXLpcGVydG9pcmUtbW9udOldXG4iCisiXHRbLU8gZm9uY3Rpb25uYWxpdOlbLC4uLl1dIFstciBy6XZpc2lvbi1kdS1zeXN06G1lLWRlLWZpY2hpZXJzXVxuIgorIlx0Wy1FIG9wdGlvbi3pdGVuZHVlWywuLi5dXSBbLXQgdHlwZS1zeXN06G1lLWRlLWZpY2hpZXJzXSBbLVQgdHlwZS0iCisiZCd1dGlsaXNhdGlvbl1cbiIKKyJcdFstVSBVVUlEXSBbLWpucXZGS1NWXSBw6XJpcGjpcmlxdWUgW25vbWJyZS1kZS1ibG9jc11cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUnVubmluZyBjb21tYW5kOiAlc1xuIgorbXNnc3RyICJFeOljdXRpb24gZGUgbGEgY29tbWFuZGWgOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcnVuICclcyciCittc2dzdHIgImR1cmFudCBsYSB0ZW50YXRpdmUgZCdleOljdXRpb24gZGUgq6Alc6C7IgorCisjOiBtaXNjL21rZTJmcy5jOjI2MworbXNnaWQgIndoaWxlIHByb2Nlc3NpbmcgbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gcHJvZ3JhbSIKK21zZ3N0ciAiIgorImxvcnMgZHUgdHJhaXRlbWVudCBkZSBsYSBsaXN0ZSBkZXMgYmxvY3MgZOlmZWN0dWV1eCDgIHBhcnRpciBkdSBwcm9ncmFtbWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVkIGluIHByaW1hcnkgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9yIGFyZWEgYmFkLlxuIgorbXNnc3RyICIiCisiQmxvYyAlZCBkYW5zIGxhIHpvbmUgZHUgZGVzY3JpcHRldXIgZGUgc3VwZXJibG9jL2dyb3VwZSBwcmltYWlyZSBlc3QgIgorImTpZmVjdHVldXguXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrcyAldSB0aHJvdWdoICV1IG11c3QgYmUgZ29vZCBpbiBvcmRlciB0byBidWlsZCBhIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJMZXMgYmxvY3MgZGUgJXUg4CAldSBkb2l2ZW50IOp0cmUgZW4gYm9uIOl0YXQgcG91ciBn6W7pcmVyIGxlIHN5c3TobWUgZGUgIgorImZpY2hpZXJzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI5NQorbXNnaWQgIkFib3J0aW5nLi4uLlxuIgorbXNnc3RyICJBcnLqdCBpbW3pZGlhdC4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogdGhlIGJhY2t1cCBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3JzIGF0IGJsb2NrICV1IGNvbnRhaW5cbiIKKyJcdGJhZCBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJBdmVydGlzc2VtZW50oDogbGVzIHNhdXZlZ2FyZGVzIGRlcyBkZXNjcmlwdGV1cnMgZGUgc3VwZXJibG9jcy9ncm91cGVzIGF1XG4iCisiXHRibG9jICV1IGNvbnRpZW5uZW50IGRlcyBibG9jcyBk6WZlY3R1ZXV4LlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjMzNAorbXNnaWQgIndoaWxlIG1hcmtpbmcgYmFkIGJsb2NrcyBhcyB1c2VkIgorbXNnc3RyICJsb3JzIGR1IG1hcnF1YWdlIGRlcyBibG9jcyBk6WZlY3R1ZXV4IGVuIHRhbnQgcXUndXRpbGlz6XMiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mzg2Cittc2dpZCAiV3JpdGluZyBpbm9kZSB0YWJsZXM6ICIKK21zZ3N0ciAiyWNyaXR1cmUgZGVzIHRhYmxlcyBkJ2ktbm9ldWRzoDogIgorCisjOiBtaXNjL21rZTJmcy5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IHdyaXRlICVkIGJsb2NrcyBpbiBpbm9kZSB0YWJsZSBzdGFydGluZyBhdCAlbGx1OiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiSW1wb3NzaWJsZSBkJ+ljcmlyZSAlZCBibG9jcyBkYW5zIGxhIHRhYmxlIGQnaS1ub2V1ZHMgZOlidXRhbnQg4CAlbGx1oDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0MjEgbWlzYy9ta2UyZnMuYzoyNDc5IG1pc2MvbWtlMmZzLmM6Mjc2NAorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgImNvbXBs6XTpICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDMyCittc2dpZCAid2hpbGUgY3JlYXRpbmcgcm9vdCBkaXIiCittc2dzdHIgImxvcnMgZGUgbGEgY3LpYXRpb24gZHUgculwZXJ0b2lyZSByYWNpbmUiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDM5Cittc2dpZCAid2hpbGUgcmVhZGluZyByb290IGlub2RlIgorbXNnc3RyICJsb3JzIGRlIGxhIGxlY3R1cmUgZGUgbCdpLW5vZXVkIHJhY2luZSIKKworIzogbWlzYy9ta2UyZnMuYzo0NTEKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHJvb3QgaW5vZGUgb3duZXJzaGlwIgorbXNnc3RyICJsb3JzIGRlIGwnaW5pdGlhbGlzYXRpb24gZGUgbGEgcHJvcHJp6XTpIGRlIGwnaS1ub2V1ZCByYWNpbmUiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDY5Cittc2dpZCAid2hpbGUgY3JlYXRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgImxvcnMgZGUgbGEgY3LpYXRpb24gZGUgL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDc2Cittc2dpZCAid2hpbGUgbG9va2luZyB1cCAvbG9zdCtmb3VuZCIKK21zZ3N0ciAibG9ycyBkZSBsYSByZWNoZXJjaGUgZGUgL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDg5Cittc2dpZCAid2hpbGUgZXhwYW5kaW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJsb3JzIGRlIGwnZXh0ZW5zaW9uIGRlIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjUwNAorbXNnaWQgIndoaWxlIHNldHRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICJsb3JzIGRlIGwnaW5pdGlhbGlzYXRpb24gZGUgbCdpLW5vZXVkIGRlcyBibG9jcyBk6WZlY3R1ZXV4IgorCisjOiBtaXNjL21rZTJmcy5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJPdXQgb2YgbWVtb3J5IGVyYXNpbmcgc2VjdG9ycyAlZC0lZFxuIgorbXNnc3RyICJN6W1vaXJlIOlwdWlz6WUgbG9ycyBkZSBsJ2VmZmFjZW1lbnQgZGVzIHNlY3RldXJzICVkLSVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrIDA6ICVzXG4iCittc2dzdHIgIkF2ZXJ0aXNzZW1lbnSgOiBpbXBvc3NpYmxlIGRlIGxpcmUgbGUgYmxvYyAwoDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IGVyYXNlIHNlY3RvciAlZDogJXNcbiIKK21zZ3N0ciAiQXZlcnRpc3NlbWVudKA6IGltcG9zc2libGUgZCdlZmZhY2VyIGxlIHNlY3RldXIgJWSgOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU3MworbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgImxvcnMgZGUgbCdpbml0aWFsaXNhdGlvbiBkdSBqb3VybmFsIGR1IHN1cGVyYmxvYyIKKworIzogbWlzYy9ta2UyZnMuYzo1ODEKK21zZ2lkICJaZXJvaW5nIGpvdXJuYWwgZGV2aWNlOiAiCittc2dzdHIgIk1pc2Ug4CB66XJvIGR1IHDpcmlwaOlyaXF1ZSBkZSBqb3VybmFsoDogIgorCisjOiBtaXNjL21rZTJmcy5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGpvdXJuYWwgZGV2aWNlIChibG9jayAlbGx1LCBjb3VudCAlZCkiCittc2dzdHIgIiIKKyJsb3JzIGRlIGxhIG1pc2Ug4CB66XJvIGR1IHDpcmlwaOlyaXF1ZSBkZSBqb3VybmFsIChibG9jICVsbHUsIGNvbXB0ZSAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjExCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgImxvcnMgZGUgbCfpY3JpdHVyZSBkdSBzdXBlcmJsb2MgZGUgam91cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgZmlsZXN5c3RlbSB3aXRoICVsbHUgJWRrIGJsb2NrcyBhbmQgJXUgaW5vZGVzXG4iCittc2dzdHIgIiIKKyJFbiB0cmFpbiBkZSBjcullciB1biBzeXN06G1lIGRlIGZpY2hpZXJzIGF2ZWMgJWxsdSAlZGsgYmxvY3MgZXQgJXUgaS0iCisibm9ldWRzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2FybmluZzogJWxsdSBibG9ja3MgdW51c2VkLlxuIgorIlxuIgorbXNnc3RyICIiCisiQXZlcnRpc3NlbWVudKA6ICVsbHUgYmxvY3MgaW51dGlsaXPpcy5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBsYWJlbD0lc1xuIgorbXNnc3RyICLJdGlxdWV0dGUgZGUgc3lzdOhtZSBkZSBmaWNoaWVycz0lc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJPUyB0eXBlOiAlc1xuIgorbXNnc3RyICJUeXBlIGRlIHN5c3TobWUgZCdleHBsb2l0YXRpb26gOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIlRhaWxsZSBkZSBibG9jPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsdXN0ZXIgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJUYWlsbGUgZGUgY2x1c3Rlcj0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGcmFnbWVudCBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIlRhaWxsZSBkZSBmcmFnbWVudD0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJTdHJpZGU9JXUgYmxvY2tzLCBTdHJpcGUgd2lkdGg9JXUgYmxvY2tzXG4iCittc2dzdHIgIqugU3RyaWRloLsgPSAldSBibG9jcywgq6BTdHJpcGUgd2lkdGiguyA9ICV1IGJsb2NzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcywgJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXUgaS1ub2V1ZHMsICVsbHUgYmxvY3NcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSBibG9ja3MgKCUyLjJmJSUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlclxuIgorbXNnc3RyICIlbGx1IGJsb2NzICglMi4yZiUlKSBy6XNlcnbpcyBwb3VyIGxlIHN1cGVyIHV0aWxpc2F0ZXVyXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0IGRhdGEgYmxvY2s9JXVcbiIKK21zZ3N0ciAiUHJlbWllciBibG9jIGRlIGRvbm7pZXM9JXVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUm9vdCBkaXJlY3Rvcnkgb3duZXI9JXU6JXVcbiIKK21zZ3N0ciAiUHJvcHJp6XRhaXJlIGR1IHLpcGVydG9pcmUgcmFjaW5lPSV1OiV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9JWx1XG4iCittc2dzdHIgIk5vbWJyZSBtYXhpbXVtIGRlIGJsb2NzIGR1IHN5c3TobWUgZGUgZmljaGllcnM9JWx1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3Vwc1xuIgorbXNnc3RyICIldSBncm91cGVzIGRlIGJsb2NzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3VwXG4iCittc2dzdHIgIiV1IGdyb3VwZSBkZSBibG9jXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGNsdXN0ZXJzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBibG9jcyBwYXIgZ3JvdXBlLCAldSBjbHVzdGVycyBwYXIgZ3JvdXBlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgYmxvY3MgcGFyIGdyb3VwZSwgJXUgZnJhZ21lbnRzIHBhciBncm91cGVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBpLW5vZXVkcyBwYXIgZ3JvdXBlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gVVVJRDogJXNcbiIKK21zZ3N0ciAiVVVJRCBkZSBzeXN06G1lIGRlIGZpY2hpZXJzPSVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njg5Cittc2dpZCAiU3VwZXJibG9jayBiYWNrdXBzIHN0b3JlZCBvbiBibG9ja3M6ICIKK21zZ3N0ciAiU3VwZXJibG9jcyBkZSBzZWNvdXJzIHN0b2Nr6XMgc3VyIGxlcyBibG9jc6A6ICIKKworIzogbWlzYy9ta2UyZnMuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgJy1PIDY0Yml0J1xuIgorbXNnc3RyICIlcyBu6WNlc3NpdGUgJy1PIDY0Yml0J1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgYmVmb3JlICdyZXNpemU9JXUnXG4iCittc2dzdHIgIiclcycgZG9pdCDqdHJlIGF2YW50ICdyZXNpemU9JXUnXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Nzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZGVzY19zaXplOiAnJXMnXG4iCittc2dzdHIgImRlc2Nfc2l6ZSBpbnZhbGlkZTogJyVzJ1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9mZnNldDogJXNcbiIKK21zZ3N0ciAiROljYWxhZ2UgaW52YWxpZGWgOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgxMiBtaXNjL3R1bmUyZnMuYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW1wX3VwZGF0ZV9pbnRlcnZhbDogJXNcbiIKK21zZ3N0ciAibW1wX3VwZGF0ZV9pbnRlcnZhbCBpbnZhbGlkZaA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgIyBvZiBiYWNrdXAgc3VwZXJibG9ja3M6ICVzXG4iCittc2dzdHIgIk5vbWJyZSBkZSBzdXBlcmJsb2MgZGUgc2Vjb3VycyBpbnZhbGlkZaA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaWRlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyYW3odHJlIKugc3RyaWRloLsgaW52YWxpZGWgOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlwZS13aWR0aCBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlBhcmFt6HRyZSCroHN0cmlwZS13aWR0aKC7IGludmFsaWRloDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXNpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXJhbeh0cmUgZGUgY2hhbmdlbWVudCBkZSB0YWlsbGUgaW52YWxpZGWgOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg5MworbXNnaWQgIlRoZSByZXNpemUgbWF4aW11bSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgZmlsZXN5c3RlbSBzaXplLlxuIgorbXNnc3RyICIiCisiTGEgdGFpbGxlIG1heGltYWxlIGRlIGwnYWdyYW5kaXNzZW1lbnQgZG9pdCDqdHJlIHBsdXMgZ3JhbmRlIHF1ZSBsYSB0YWlsbGVcbiIKKyJkdSBzeXN06G1lIGRlIGZpY2hpZXJzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjkxNworbXNnaWQgIk9uLWxpbmUgcmVzaXppbmcgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorIkxlIGNoYW5nZW1lbnQgZGUgdGFpbGxlIGVuIGxpZ25lIG4nZXN0IHBhcyBzdXBwb3J06WUgYXZlYyBsZXMgc3lzdOhtZXMgZGVcbiIKKyJmaWNoaWVycyBkZSB2ZXJzaW9uIDBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5NDQgbWlzYy9ta2UyZnMuYzo5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByb290X293bmVyOiAnJXMnXG4iCittc2dzdHIgInJvb3Rfb3duZXIgaW52YWxpZGWgOiCroCVzoLtcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBxdW90YXR5cGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXJhbeh0cmUgZGUgdHlwZSBkZSBxdW90YSBpbnZhbGlkZaA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRtbXBfdXBkYXRlX2ludGVydmFsPTxpbnRlcnZhbD5cbiIKKyJcdG51bV9iYWNrdXBfc2I9PDB8MXwyPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGRhdGEgY2h1bmsgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqIGRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0b2Zmc2V0PTxvZmZzZXQgdG8gY3JlYXRlIHRoZSBmaWxlIHN5c3RlbT5cbiIKKyJcdHJlc2l6ZT08cmVzaXplIG1heGltdW0gc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRwYWNrZWRfbWV0YV9ibG9ja3M9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRyb290X3VpZD08dWlkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0cm9vdF9naWQ9PGdpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdGRpc2NhcmRcbiIKKyJcdG5vZGlzY2FyZFxuIgorIlx0cXVvdGF0eXBlPTx1c3IgT1IgZ3JwPlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiVW5lIG91IGRlcyBvcHRpb25zIHNw6WNpZmnpZXMgc29udCBlcnJvbullc6A6ICVzXG4iCisiXG4iCisiTGVzIG9wdGlvbnMg6XRlbmR1ZXMgc29udCBz6XBhcullcyBwYXIgZGVzIHZpcmd1bGVzIGV0IHBldXZlbnQgcHJlbmRyZSB1blxuIgorIlx0YXJndW1lbnQgcXVpIGVzdCBk6WZpbmkg4CBsJ2FpZGUgZCd1biBzaWduZSBkJ+lnYWxpdOkgKKugPaC7KS5cbiIKKyJcbiIKKyJMZXMgb3B0aW9ucyB2YWxpZGVzIHNvbnSgOlxuIgorIlx0bW1wX3VwZGF0ZV9pbnRlcnZhbD08aW50ZXJ2YWxsZT5cbiIKKyJcdG51bV9iYWNrdXBfc2I9PDB8MXwyPlxuIgorIlx0c3RyaWRlPTx0YWlsbGUgZW4gYmxvY3MgZGVzIG1vcmNlYXV4IHBhciBkaXNxdWUgUkFJRD5cbiIKKyJcdHN0cmlwZS13aWR0aD08c3RyaWRlIFJBSUQgKiBub21icmUgZGUgZGlzcXVlcyBlbiBibG9jcz5cbiIKKyJcdG9mZnNldD08ZOljYWxhZ2Ugb/kgY3LpZXIgbGUgc3lzdOhtZSBkZSBmaWNoaWVycz5cbiIKKyJcdHJlc2l6ZT08dGFpbGxlIG1heGltYWxlIGRlIGNoYW5nZW1lbnQgZGUgdGFpbGxlIGVuIGJsb2NzPlxuIgorIlx0cGFja2VkX21ldGFfYmxvY2tzPTwwIHBvdXIgZOlzYWN0aXZlciwgMSBwb3VyIGFjdGl2ZXI+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHBvdXIgZOlzYWN0aXZlciwgMSBwb3VyIGFjdGl2ZXI+XG4iCisiXHRsYXp5X2pvdXJuYWxfaW5pdD08MCBwb3VyIGTpc2FjdGl2ZXIsIDEgcG91ciBhY3RpdmVyPlxuIgorIlx0cm9vdF91aWQ9PHVpZCBkdSBy6XBlcnRvaXJlIHJhY2luZT5cbiIKKyJcdHJvb3RfZ2lkPTxnaWQgZHUgculwZXJ0b2lyZSByYWNpbmU+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXNyIE9VIGdycD5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiBSQUlEIHN0cmlwZS13aWR0aCAldSBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiBzdHJpZGUgJXUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBdHRlbnRpb26gOiBsZSCroHN0cmlwZS13aWR0aKC7IFJBSUQgJXUgbidlc3QgcGFzIG11bHRpcGxlIGltcGFpciBkdSAiCisiq6BzdHJpZGWguyAldS5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gbWtlMmZzIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisiRXJyZXVyIGRlIHN5bnRheGUgZGFucyBsZSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gZGUgbWtlMmZzXG4iCisiXHQoJXMsIGxpZ25lIG6wJWQpXG4iCisiXHQlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNjggbWlzYy90dW5lMmZzLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJKZXUgZCdvcHRpb25zIGRlIHN5c3TobWUgZGUgZmljaGllcnMgaW52YWxpZGWgOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwODAgbWlzYy90dW5lMmZzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiSmV1IGQnb3B0aW9ucyBwb3VyIGxlIG1vbnRhZ2UgaW52YWxpZGWgOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIllvdXIgbWtlMmZzLmNvbmYgZmlsZSBkb2VzIG5vdCBkZWZpbmUgdGhlICVzIGZpbGVzeXN0ZW0gdHlwZS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlZvdHJlIG1rZTJmcy5jb25mIG5lIHBy6WNpc2UgcGFzIGxlIHR5cGUgZGUgc3lzdOhtZSBkZSBmaWNoaWVycyBkZVxuIgorIiVzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjQKK21zZ2lkICIiCisiWW91IHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBhbiB1cGRhdGVkIG1rZTJmcy5jb25mIGZpbGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJJbCB2b3VzIGZhdXQgc2FucyBkb3V0ZSBpbnN0YWxsZXIgdW4gZmljaGllciBta2UyZnMuY29uZiBtaXMg4CBqb3VyLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjgKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICJBcnLqdCBpbW3pZGlhdC4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBmc190eXBlICVzIGlzIG5vdCBkZWZpbmVkIGluIG1rZTJmcy5jb25mXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBdmVydGlzc2VtZW50oDogbGUgZnNfdHlwZSAlcyBuJ2VzdCBwYXMgZOlmaW5pIGRhbnMgbWtlMmZzLmNvbmZcbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDQ5Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgUEFUSC5cbiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2FsbG91ZXIgZGUgbGEgbeltb2lyZSBwb3VyIHVuIG5vdXZlYXUgY2hlbWluLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgaW5pdCBwcm9maWxlIHN1Y2Nlc3NmdWxseSAoZXJyb3I6ICVsZCkuXG4iCittc2dzdHIgIk4nYSBwdSBpbml0aWFsaXNlciBsZSBwcm9maWxhZ2UgY29ycmVjdGVtZW50IChlcnJldXKgOiAlbGQpLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9jayBzaXplIC0gJXMiCittc2dzdHIgInRhaWxsZSBpbnZhbGlkZSBkZXMgYmxvY3MgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgdXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIKK21zZ3N0ciAiIgorIkF2ZXJ0aXNzZW1lbnSgOiBsYSB0YWlsbGUgZGUgYmxvYyAlZCBuJ2VzdCBwYXMgdXRpbGlzYWJsZVxuIgorInN1ciBsYSBwbHVwYXJ0IGRlcyBzeXN06G1lcy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2x1c3RlciBzaXplIC0gJXMiCittc2dzdHIgInRhaWxsZSBkZSBjbHVzdGVyIGludmFsaWRlIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU1MworbXNnaWQgIictUicgaXMgZGVwcmVjYXRlZCwgdXNlICctRScgaW5zdGVhZCIKK21zZ3N0ciAiq6AtUqC7IGVzdCBk6XBy6WNp6SwgdXRpbGlzZXIgcGx1dPR0IKugLUWguyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTY1Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGJsb2NrcyBwZXIgZ3JvdXAiCittc2dzdHIgIk5vbWJyZSBkZSBibG9jcyBwYXIgZ3JvdXBlIGlsbOlnYWwiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU3MAorbXNnaWQgImJsb2NrcyBwZXIgZ3JvdXAgbXVzdCBiZSBtdWx0aXBsZSBvZiA4IgorbXNnc3RyICJsZSBub21icmUgZGUgYmxvY3MgcGFyIGdyb3VwZSBkb2l0IOp0cmUgdW4gbXVsdGlwbGUgZGUgOCIKKworIzogbWlzYy9ta2UyZnMuYzoxNTc4Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGZsZXhfYmcgc2l6ZSIKK21zZ3N0ciAiTm9tYnJlIGlsbOlnYWwgcG91ciBsYSB0YWlsbGUgZmxleF9iZyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg0Cittc2dpZCAiZmxleF9iZyBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyIgorbXNnc3RyICJMYSB0YWlsbGUgZmxleF9iZyBkb2l0IOp0cmUgdW5lIHB1aXNzYW5jZSBkZSAyIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmxleF9iZyBzaXplICglbHUpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDJeMzEiCittc2dzdHIgIkxhIHRhaWxsZSBmbGV4X2JnICglbHUpIGRvaXQg6nRyZSBpbmbpcmlldXIgb3Ug6WdhbCDgIDJeMzEiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHJhdGlvICVzIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAidGF1eCBkJ2ktbm9ldWRzIGludmFsaWRlcyAlcyAobWluICVkL21heCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAidGFpbGxlIGQnaS1ub2V1ZCBpbnZhbGlkZSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MjMKK21zZ2lkICIiCisiV2FybmluZzogLUsgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLiBVc2UgJy1FICIKKyJub2Rpc2NhcmQnIGV4dGVuZGVkIG9wdGlvbiBpbnN0ZWFkIVxuIgorbXNnc3RyICIiCisiQXZlcnRpc3NlbWVudKA6IGwnb3B0aW9uIC1LIGVzdCBk6XBy6WNp6WUgZXQgbmUgZGV2cmFpdCBwbHVzIOp0cmUgdXRpbGlz6WUuICIKKyJVdGlsaXNlciBwbHV09HQgbCdvcHRpb24g6XRlbmR1ZSCroC1FIG5vZGlzY2FyZKC7oCFcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjM0Cittc2dpZCAiaW4gbWFsbG9jIGZvciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorbXNnc3RyICJkYW5zIG1hbGxvYyBwb3VyIGJhZF9ibG9ja3NfZmlsZW5hbWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgInBvdXJjZW50YWdlIGRlIGJsb2NzIHLpc2VydulzIGludmFsaWRlIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtIGlub2RlcyAtICVzIgorbXNnc3RyICJtYXV2YWlzIG5vbWJyZSBkJ2ktbm9ldWRzIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gbGV2ZWwgLSAlcyIKK21zZ3N0ciAibWF1dmFpcyBudW3pcm8gZGUgdmVyc2lvbiAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSByZXZpc2lvbiAlZCIKK21zZ3N0ciAibG9ycyBkZSBsYSB0ZW50YXRpdmUgZGUgY3LpYXRpb24gZGUgbGEgcul2aXNpb24gJWQiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY5OAorbXNnaWQgIlRoZSAtdCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICJMJ29wdGlvbiAtdCBuZSBwZXV0IOp0cmUgc3DpY2lmaellIHF1J3VuZSBmb2lzIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MDYKK21zZ2lkICJUaGUgLVQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiTCdvcHRpb24gLVQgbmUgcGV1dCDqdHJlIHNw6WNpZmnpZSBxdSd1bmUgZm9pcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNzU5IG1pc2MvbWtlMmZzLmM6Mjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIGRldmljZSAlc1xuIgorbXNnc3RyICJsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkJ291dmVydHVyZSBkdSBw6XJpcGjpcmlxdWUgZGUgam91cm5hbCAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBkZXYgYmxvY2tzaXplICglZCkgc21hbGxlciB0aGFuIG1pbmltdW0gYmxvY2tzaXplICVkXG4iCittc2dzdHIgIiIKKyJsYSB0YWlsbGUgZGUgYmxvYyBkdSBw6XJpcGjpcmlxdWUgZGUgam91cm5hbCAoJWQpIGVzdCBwbHVzIHBldGl0IHF1ZSBsYVxuIgorInRhaWxsZSBkZSBibG9jcyBtaW5pbXVtICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBqb3VybmFsIGRldmljZSdzIGJsb2Nrc2l6ZTogJWRcbiIKK21zZ3N0ciAiVXRpbGlzYXRpb24gZGUgbGEgdGFpbGxlIGRlIGJsb2MgZHUgcOlyaXBo6XJpcXVlIGRlIGpvdXJuYWygOiAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9ja3MgJyVzJyBvbiBkZXZpY2UgJyVzJyIKK21zZ3N0ciAiYmxvY3MgJyVzJyBpbnZhbGlkZXMgc3VyIGxlIHDpcmlwaOlyaXF1ZSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxODA0Cittc2dpZCAiZmlsZXN5c3RlbSIKK21zZ3N0ciAic3lzdOhtZSBkZSBmaWNoaWVycyIKKworIzogbWlzYy9ta2UyZnMuYzoxODE3IHJlc2l6ZS9tYWluLmM6Mzk1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBmaWxlc3lzdGVtIHNpemUiCittc2dzdHIgIiIKKyJsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkZSBk6XRlcm1pbmF0aW9uIGRlIGxhIHRhaWxsZSBkdSBzeXN06G1lIGRlIGZpY2hpZXJzIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MjMKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiIgorIk5lIHBldXQgZOl0ZXJtaW5lciBsYSB0YWlsbGUgZHUgcOlyaXBo6XJpcXVloDsgdm91cyBkZXZleiBzcOljaWZpZXJcbiIKKyJsYSB0YWlsbGUgZHUgc3lzdOhtZSBkZSBmaWNoaWVyc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MzAKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorIkxhIHRhaWxsZSByYXBwb3J06WUgZHUgcOlyaXBo6XJpcXVlIGVzdCB66XJvLiBMYSBwYXJ0aXRpb24gc3DpY2lmaellIGVzdFxuIgorIlx0aW52YWxpZGUgb3UgbGEgdGFibGUgZGUgcGFydGl0aW9ucyBuJ2EgcGFzIOl06SByZWx1ZSBhcHLoc1xuIgorIlx0bCdleOljdXRpb24gZGUgZmRpc2ssIGT7IGF1IGZhaXQgcXVlIGxhIHBhcnRpdGlvbiBtb2RpZmnpZSDpdGFpdFxuIgorIlx0b2NjdXDpZSBldCB1dGlsaXPpZS4gVm91cyBkZXZleiBy6S1hbW9yY2VyIHBvdXIgZm9yY2VyIHVuZVxuIgorIlx0cmVsZWN0dXJlIGRlIGxhIHRhYmxlIGRlIHBhcnRpdGlvbnMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg0NworbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICJTeXN06G1lIGRlIGZpY2hpZXJzIHBsdXMgZ3JhbmQgcXVlIGxhIHRhaWxsZSBhcHBhcmVudGUgZHUgcOlyaXBo6XJpcXVlIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NjcKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZnMgdHlwZXMgbGlzdFxuIgorbXNnc3RyICLJY2hlYyBkdSBwYXJjb3VycyBkZSBsYSBsaXN0ZSBkZSB0eXBlcyBkZSBzeXN06G1lcyBkZSBmaWNoaWVyc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MDgKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGhhcmR3YXJlIHNlY3RvciBzaXplIgorbXNnc3RyICIiCisibG9ycyBkZSBsYSB0ZW50YXRpdmUgZGUgZOl0ZXJtaW5hdGlvbiBkZSBsYSB0YWlsbGUgbWF06XJpZWxsZSBkZSBzZWN0ZXVyIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MTQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHBoeXNpY2FsIHNlY3RvciBzaXplIgorbXNnc3RyICJsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkZSBk6XRlcm1pbmF0aW9uIGRlIGxhIHRhaWxsZSBkZSBzZWN0ZXVyIG1hdOlyaWVsIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NDYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsIGZvciBkZXZpY2VcbiIKK21zZ3N0ciAiIgorImxvcnMgZGUgbGEgZOlmaW5pdGlvbiBkZSBsYSB0YWlsbGUgZGUgYmxvY6A7IHRyb3AgcGV0aXRlIHBvdXIgbGUgIgorInDpcmlwaOlyaXF1ZVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNwZWNpZmllZCBibG9ja3NpemUgJWQgaXMgbGVzcyB0aGFuIGRldmljZSBwaHlzaWNhbCBzZWN0b3JzaXplICVkXG4iCittc2dzdHIgIiIKKyJBdmVydGlzc2VtZW50oDogbGEgdGFpbGxlIGRlIGJsb2MgJWQgc3DpY2lmaellIGVzdCBwbHVzIHBldGl0ZSBxdWUgbGEgdGFpbGxlICIKKyJkZSBzZWN0ZXVyIHBoeXNpcXVlICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFNpemUgb2YgZGV2aWNlICgweCVsbHggYmxvY2tzKSAlcyB0b28gYmlnIHRvIGJlIGV4cHJlc3NlZFxuIgorIlx0aW4gMzIgYml0cyB1c2luZyBhIGJsb2Nrc2l6ZSBvZiAlZC5cbiIKK21zZ3N0ciAiIgorIiVzOiBMYSB0YWlsbGUgKDB4JWxseCBibG9jcykgZHUgcOlyaXBo6XJpcXVlICVzIGVzdCB0cm9wIGdyYW5kZSBwb3VyXG4iCisiXHRwb3V2b2lyIOp0cmUgZXhwcmlt6WUgc3VyIDMyIGJpdHMgZW4gdXRpbGlzYW50IHVuZSB0YWlsbGUgZGUgYmxvYyBkZSAlZC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTkxCittc2dpZCAiZnNfdHlwZXMgZm9yIG1rZTJmcy5jb25mIHJlc29sdXRpb246ICIKK21zZ3N0ciAiculzb2x1dGlvbiBkZSBmc190eXBlcyBwb3VyIG1rZTJmcy5jb25moDogIgorCisjOiBtaXNjL21rZTJmcy5jOjE5OTgKK21zZ2lkICJGaWxlc3lzdGVtIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKyJGb25jdGlvbm5hbGl06XMgZHUgc3lzdOhtZSBkZSBmaWNoaWVycyBub24gc3VwcG9ydOllcyBwYXIgbGVzIHN5c3TobWVzIGRlXG4iCisiZmljaGllcnMgZGUgdmVyc2lvbiAwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAwNgorbXNnaWQgIlNwYXJzZSBzdXBlcmJsb2NrcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiTGVzIHN1cGVyYmxvY3MgY3JldXggbmUgc29udCBwYXMgc3VwcG9ydOlzIHBhciBsZXMgc3lzdOhtZXMgZGVcbiIKKyJmaWNoaWVycyBkZSB2ZXJzaW9uIDBcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDE4Cittc2dpZCAiSm91cm5hbHMgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorIkxlcyBqb3VybmF1eCBuZSBzb250IHBhcyBzdXBwb3J06XMgcGFyIGxlcyBzeXN06G1lcyBkZVxuIgorImZpY2hpZXJzIGRlIHZlcnNpb24gMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVsZiIKK21zZ3N0ciAicG91cmNlbnRhZ2UgZGUgYmxvY3MgculzZXJ26XMgaW52YWxpZGUgLSAlbGYiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJFeHRlbnRzIE1VU1QgYmUgZW5hYmxlZCBmb3IgYSA2NC1iaXQgZmlsZXN5c3RlbS4gIFBhc3MgLU8gZXh0ZW50cyB0byAiCisicmVjdGlmeS5cbiIKK21zZ3N0ciAiIgorIkxlcyBleHRlbnRzIERPSVZFTlQg6nRyZSBhY3RpdullcyBwb3VyIHVuIHN5c3TobWUgZGUgZmljaGllcnMgNjSgYml0LiAgIgorIlBhc3NleiAtTyBleHRlbnRzIHBvdXIgY29ycmlnZXIuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA2OQorbXNnaWQgIlRoZSBjbHVzdGVyIHNpemUgbWF5IG5vdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGJsb2NrIHNpemUuXG4iCittc2dzdHIgIiIKKyJMYSB0YWlsbGUgZCd1biBjbHVzdGVyIG5lIHBldXQgcGFzIOp0cmUgcGx1cyBwZXRpdGUgcXVlIGxhIHRhaWxsZSBkJ3VuICIKKyJibG9jLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNzUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgY2x1c3RlciBzaXplIHJlcXVpcmVzIHRoZSBiaWdhbGxvYyBmZWF0dXJlIgorbXNnc3RyICJTcOljaWZpZXIgdW5lIHRhaWxsZSBkZSBjbHVzdGVyIG7pY2Vzc2l0ZSBsYSBmb25jdGlvbmFsaXTpIGJpZ2FsbG9jIgorCisjOiBtaXNjL21rZTJmcy5jOjIwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogVW5hYmxlIHRvIGdldCBkZXZpY2UgZ2VvbWV0cnkgZm9yICVzXG4iCittc2dzdHIgImF0dGVudGlvbqA6IEltcG9zc2libGUgZCdvYnRlbmlyIGxhIGfpb23pdHJpZSBkdSBw6XJpcGjpcmlxdWUgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsaWdubWVudCBpcyBvZmZzZXQgYnkgJWx1IGJ5dGVzLlxuIgorbXNnc3RyICJMJ2FsaWduZW1lbnQgZGUgJXMgZXN0IGTpY2Fs6SBkZSAlbHUgb2N0ZXRzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgbWF5IHJlc3VsdCBpbiB2ZXJ5IHBvb3IgcGVyZm9ybWFuY2UsIChyZSktcGFydGl0aW9uaW5nIHN1Z2dlc3RlZC5cbiIKK21zZ3N0ciAiIgorIkNlbGEgcGV1dCBpbmR1aXJlIGRlIHRy6HMgbWF1dmFpc2VzIHBlcmZvcm1hbmNlcywgaWwgZXN0IHN1Z2fpcukgZGUgKHJlKS0iCisicGFydGl0aW9ubmVyLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpIgorbXNnc3RyICJibG9jcyBkZSAlZCBvY3RldHMgdHJvcCBncm9zIHBvdXIgbGUgc3lzdOhtZSAobWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiAlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCksIGZvcmNlZCB0byBjb250aW51ZVxuIgorbXNnc3RyICIiCisiQXZlcnRpc3NlbWVudKA6IGJsb2NzIGRlICVkIG9jdGV0cyB0cm9wIGdyb3MgcG91ciBsZSBzeXN06G1lIChtYXggJWQpLFxuIgorInBvdXJzdWl0ZSBmb3Jj6WVcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTgwCittc2dpZCAiQ2FuJ3Qgc3VwcG9ydCBiaWdhbGxvYyBmZWF0dXJlIHdpdGhvdXQgZXh0ZW50cyBmZWF0dXJlIgorbXNnc3RyICIiCisiTGEgZm9uY3Rpb25hbGl06SBiaWdhbGxvYyBuZSBwZXV0IHBhcyDqdHJlIHN1cHBvcnTpZSBzYW5zIGxhIGZvbmN0aW9uYWxpdOkgIgorImV4dGVudCIKKworIzogbWlzYy9ta2UyZnMuYzoyMTg3Cittc2dpZCAiIgorIlRoZSByZXNpemVfaW5vZGUgYW5kIG1ldGFfYmcgZmVhdHVyZXMgYXJlIG5vdCBjb21wYXRpYmxlLlxuIgorIlRoZXkgY2FuIG5vdCBiZSBib3RoIGVuYWJsZWQgc2ltdWx0YW5lb3VzbHkuXG4iCittc2dzdHIgIiIKKyJMZXMgZm9uY3Rpb25uYWxpdOlzIHJlc2l6ZV9pbm9kZSBldCBtZXRhX2JnIG5lIHNvbnQgcGFzIGNvbXBhdGlibGVzLlxuIgorIkVsbGVzIG5lIHBldXZlbnQgcGFzIOp0cmUgYWN0aXbpZXMgc2ltdWx0YW7pbWVudC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTk2Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBiaWdhbGxvYyBmZWF0dXJlIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50XG4iCisiU2VlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0JpZ2FsbG9jIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBdmVydGlzc2VtZW50oDogbGEgZm9uY3Rpb25hbGl06SBiaWdhbGxvYyBlc3QgZW5jb3JlIGVuIGNvdXJzIGRlICIKKyJk6XZlbG9wcGVtZW50XG4iCisiVm9pciBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYyBwb3VyIHBsdXMgIgorImQnaW5mb3JtYXRpb25zXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIwNworbXNnaWQgInJlc2VydmVkIG9ubGluZSByZXNpemUgYmxvY2tzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLXNwYXJzZSBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisibGEgculzZXJ2YXRpb24gZGUgYmxvY3MgZGUgY2hhbmdlbWVudCBkZSB0YWlsbGUgZW4gbGlnbmUgbidlc3QgcGFzXG4iCisic3VwcG9ydOllIHN1ciB1biBzeXN06G1lIGRlIGZpY2hpZXJzIG5vbiBjcmV1eCIKKworIzogbWlzYy9ta2UyZnMuYzoyMjE2Cittc2dpZCAiYmxvY2tzIHBlciBncm91cCBjb3VudCBvdXQgb2YgcmFuZ2UiCittc2dzdHIgImNvbXB0ZXVyIGRlIGJsb2NzIHBhciBncm91cGUgaG9ycyBsaW1pdGUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI0MAorbXNnaWQgIkZsZXhfYmcgZmVhdHVyZSBub3QgZW5hYmxlZCwgc28gZmxleF9iZyBzaXplIG1heSBub3QgYmUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisiTGEgZm9uY3Rpb25uYWxpdOkgZmxleF9iZyBuJ2VzdCBwYXMgYWN0aXbpZSwgbGEgdGFpbGxlIGZsZXhfYmcgbmUgcGV1dCBkb25jICIKKyJwYXMg6nRyZSBzcOljaWZp6WUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgJWQgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJ0YWlsbGUgZCdpLW5vZXVkIGludmFsaWRlICVkIChtaW4gJWQvbWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHJhaXNlIGlub2RlIHJhdGlvPyIKK21zZ3N0ciAidHJvcCBkJ2ktbm9ldWRzICglbGx1KSwgYXVnbWVudGVyIGxlIHJhdGlvIGQnaS1ub2V1ZHOgPyIKKworIzogbWlzYy9ta2UyZnMuYzoyMjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHNwZWNpZnkgPCAyXjMyIGlub2RlcyIKK21zZ3N0ciAidHJvcCBkJ2ktbm9ldWRzICglbGx1KSwgaW5kaXF1ZXIgPCAyXjMyIGktbm9ldWRzIgorCisjOiBtaXNjL21rZTJmcy5jOjIyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImlub2RlX3NpemUgKCV1KSAqIGlub2Rlc19jb3VudCAoJXUpIHRvbyBiaWcgZm9yIGFcbiIKKyJcdGZpbGVzeXN0ZW0gd2l0aCAlbGx1IGJsb2Nrcywgc3BlY2lmeSBoaWdoZXIgaW5vZGVfcmF0aW8gKC1pKVxuIgorIlx0b3IgbG93ZXIgaW5vZGUgY291bnQgKC1OKS5cbiIKK21zZ3N0ciAiIgorInRhaWxsZV9pX25vZXVkICgldSkgKiBub21icmVfaV9ub2V1ZHMgKCV1KSB0cm9wIGdyYW5kIHBvdXIgdW5cbiIKKyJcdHN5c3TobWUgZGUgZmljaGllcnMgYXZlYyAlbGx1IGJsb2NzLCBpbmRpcXVlciB1biByYXRpb19pX25vZXVkICgtaSlcbiIKKyJcdHBsdXMgZ3JhbmQgb3UgdW4gbm9tYnJlIGQnaS1ub2V1ZCBwbHVzIHBldGl0ICgtTikuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbTsgdGhpcyBjYW4gYmUgdW5kb25lIHVzaW5nIHRoZSBjb21tYW5kOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIsljcmFzZW1lbnQgZHUgc3lzdOhtZSBkZSBmaWNoaWVycyBleGlzdGFudKA7IGNlbGEgcGV1dCDqdHJlIGTpZmFpdCBlbiAiCisidXRpbGlzYW50IGxhIGNvbW1hbmRloDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQzMgorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzZXR1cCB1bmRvIGZpbGVcbiIKK21zZ3N0ciAibG9ycyBkZSBsYSB0ZW50YXRpdmUgZGUgbWlzZSBlbiBwbGFjZSBkdSBmaWNoaWVyIGQnYW5udWxhdGlvblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NTgKK21zZ2lkICJEaXNjYXJkaW5nIGRldmljZSBibG9ja3M6ICIKK21zZ3N0ciAiUmVqZXQgZGVzIGJsb2NzIGRlIHDpcmlwaOlyaXF1ZaA6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNDc0Cittc2dpZCAiZmFpbGVkIC0gIgorbXNnc3RyICLpY2hvdekgLSAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU5NgorbXNnaWQgIndoaWxlIHNldHRpbmcgdXAgc3VwZXJibG9jayIKK21zZ3N0ciAibG9ycyBkZSBsJ2luaXRpYWxpc2F0aW9uIGR1IHN1cGVyYmxvYyIKKworIzogbWlzYy9ta2UyZnMuYzoyNjEyCittc2dpZCAiRGlzY2FyZCBzdWNjZWVkZWQgYW5kIHdpbGwgcmV0dXJuIDBzIC0gc2tpcHBpbmcgaW5vZGUgdGFibGUgd2lwZVxuIgorbXNnc3RyICIiCisiTGEgbGli6XJhdGlvbiBhIHLpdXNzaSBldCByZXRvdXJuZXJhIGRlcyAwcyAtIGludXRpbGUgZCdlZmZhY2VyIGxhIHRhYmxlIGRlcyAiCisiaS1ub2V1ZHNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3MgLSAlcyIKK21zZ3N0ciAic3lzdOhtZSBkJ2V4cGxvaXRhdGlvbiBpbmNvbm51IC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc1MgorbXNnaWQgIkFsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAiCittc2dzdHIgIkFsbG9jYXRpb24gZGVzIHRhYmxlcyBkZSBncm91cGWgOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2MAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBhbGxvY2F0ZSBmaWxlc3lzdGVtIHRhYmxlcyIKK21zZ3N0ciAibG9ycyBkZSBsYSB0ZW50YXRpdmUgZCdhbGxvY2F0aW9uIGRlcyB0YWJsZXMgZGUgc3lzdOhtZXMgZGUgZmljaGllcnMiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2OQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgIiIKKyJcbiIKKyJcdGxvcnMgZGUgbGEgY29udmVyc2lvbiBkdSBiaXRtYXAgZGUgc291cy1jbHVzdGVyIgorCisjOiBtaXNjL21rZTJmcy5jOjI4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBibG9jayAlbGx1IGF0IGVuZCBvZiBmaWxlc3lzdGVtIgorbXNnc3RyICJsb3JzIGRlIGxhIG1pc2Ug4CB66XJvIGR1IGJsb2MgJWxsdSDgIGxhIGZpbiBkdSBzeXN06G1lIGRlIGZpY2hpZXJzIgorCisjOiBtaXNjL21rZTJmcy5jOjI4MjYKK21zZ2lkICJ3aGlsZSByZXNlcnZpbmcgYmxvY2tzIGZvciBvbmxpbmUgcmVzaXplIgorbXNnc3RyICJsb3JzIGRlIGxhIHLpc2VydmF0aW9uIGRlIGJsb2NzIHBvdXIgdW4gY2hhbmdlbWVudCBkZSB0YWlsbGUgZW4gbGlnbmUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgzOCBtaXNjL3R1bmUyZnMuYzo3MTIKK21zZ2lkICJqb3VybmFsIgorbXNnc3RyICJqb3VybmFsIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGpvdXJuYWwgdG8gZGV2aWNlICVzOiAiCittc2dzdHIgIkFqb3V0IGR1IGpvdXJuYWwgYXUgcOlyaXBo6XJpcXVlICVzoDogIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlx0bG9ycyBkZSBsYSB0ZW50YXRpdmUgZCdham91dCBkJ3VuIGpvdXJuYWwgYXUgcOlyaXBo6XJpcXVlICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NjIgbWlzYy9ta2UyZnMuYzoyODkzIG1pc2MvdHVuZTJmcy5jOjc0MSBtaXNjL3R1bmUyZnMuYzo3NjAKK21zZ2lkICJkb25lXG4iCittc2dzdHIgImNvbXBs6XTpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg2OQorbXNnaWQgIlNraXBwaW5nIGpvdXJuYWwgY3JlYXRpb24gaW4gc3VwZXItb25seSBtb2RlXG4iCittc2dzdHIgIlBhcyBkZSBjculhdGlvbiBkZSBqb3VybmFsIGVuIG1vZGUgc3VwZXItc2V1bFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJXUgYmxvY2tzKTogIgorbXNnc3RyICJDculhdGlvbiBkdSBqb3VybmFsICgldSBibG9jcymgOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg4OQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCIKK21zZ3N0ciAiIgorIlxuIgorIlx0bG9ycyBkZSBsYSB0ZW50YXRpdmUgZGUgY3LpYXRpb24gZHUgam91cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAxIG1pc2MvdHVuZTJmcy5jOjUxNgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisiXG4iCisiRXJyZXVyIGxvcnMgZGUgbCdhY3RpdmF0aW9uIGRlIGxhIGZvbmN0aW9ubmFsaXTpIGRlIHByb3RlY3Rpb24gY29udHJlIGxlICIKKyJtb250YWdlIG11bHRpcGxlLiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaXMgZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZCBzZWNvbmRzLlxuIgorbXNnc3RyICIiCisiTGEgcHJvdGVjdGlvbiBjb250cmUgbGUgbW9udGFnZSBtdWx0aXBsZSBlc3QgYWN0aXbpZSBhdmVjIHVuIGludGVydmFsZSBkZSAiCisibWlzZSDgIGpvdXIgZGUgJWQgc2Vjb25kZXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkyMworbXNnaWQgIldyaXRpbmcgc3VwZXJibG9ja3MgYW5kIGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogIgorbXNnc3RyICIiCisiyWNyaXR1cmUgZGVzIHN1cGVyYmxvY3MgZXQgZGUgbCdpbmZvcm1hdGlvbiBkZSBjb21wdGFiaWxpdOkgZHUgc3lzdOhtZSBkZVxuIgorImZpY2hpZXJzoDogIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MzAKK21zZ2lkICIiCisiXG4iCisiV2FybmluZywgaGFkIHRyb3VibGUgd3JpdGluZyBvdXQgc3VwZXJibG9ja3MuIgorbXNnc3RyICIiCisiXG4iCisiQXR0ZW50aW9uLCBkZXMgcHJvYmzobWVzIHNvbnQgc3VydmVudXMgbG9ycyBkZSBsJ+ljcml0dXJlIGRlcyBzdXBlcmJsb2NzLiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTMyCittc2dpZCAiIgorImRvbmVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImNvbXBs6XTpXG4iCisiXG4iCisKKyM6IG1pc2MvbWtsb3N0K2ZvdW5kLmM6NTAKK21zZ2lkICJVc2FnZTogbWtsb3N0K2ZvdW5kXG4iCittc2dzdHIgIlV0aWxpc2F0aW9uoDogbWtsb3N0K2ZvdW5kXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICAlcyBkZXZpY2UuLi5cbiIKKyJcbiIKKyJQcmludHMgb3V0IHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGVhY2ggZ2l2ZW4gZGV2aWNlLlxuIgorIkZvciBleGFtcGxlOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorbXNnc3RyICIiCisiVXRpbGlzYXRpb26gOiAgJXMgcOlyaXBo6XJpcXVlLi4uXG4iCisiXG4iCisiSW1wcmltZSBsJ2luZm9ybWF0aW9uIGRlIHBhcnRpdGlvbiBwb3VyIGNoYXF1ZSBw6XJpcGjpcmlxdWUgaW5kaXF16S5cbiIKKyJQYXIgZXhlbXBsZaA6ICVzIC9kZXYvaGRhXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiAlczogJXMiCittc2dzdHIgIkltcG9zc2libGUgZCdvdXZyaXIgJXOgOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgZ2VvbWV0cnkgb2YgJXM6ICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnb2J0ZW5pciBsYSBn6W9t6XRyaWUgZGUgJXOgOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgc2l6ZSBvZiAlczogJXMiCittc2dzdHIgIkltcG9zc2libGUgZCdvYnRlbmlyIGxhIHRhaWxsZSBkZSAlc6A6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iCittc2dzdHIgIiVzoDogaD0lM2Qgcz0lM2QgYz0lNGQgICBk6WJ1dD0lOGQgdGFpbGxlPSU4bHUgZmluPSU4ZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTIKK21zZ2lkICJQbGVhc2UgcnVuIGUyZnNjayBvbiB0aGUgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiU1ZQIGV46WN1dGV6IGUyZnNjayBzdXIgbGUgc3lzdOhtZSBkZSBmaWNoaWVycy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jIG1heF9tb3VudHNfY291bnRdIFstZSBlcnJvcnNfYmVoYXZpb3JdIFstZyBncm91cF1cbiIKKyJcdFstaSBpbnRlcnZhbFtkfG18d11dIFstal0gWy1KIGpvdXJuYWxfb3B0aW9uc10gWy1sXVxuIgorIlx0Wy1tIHJlc2VydmVkX2Jsb2Nrc19wZXJjZW50XSBbLW8gW15dbW91bnRfb3B0aW9uc1ssLi4uXV0gWy1wICIKKyJtbXBfdXBkYXRlX2ludGVydmFsXVxuIgorIlx0Wy1yIHJlc2VydmVkX2Jsb2Nrc19jb3VudF0gWy11IHVzZXJdIFstQyBtb3VudF9jb3VudF0gWy1MIHZvbHVtZV9sYWJlbF1cbiIKKyJcdFstTSBsYXN0X21vdW50ZWRfZGlyXSBbLU8gW15dZmVhdHVyZVssLi4uXV1cbiIKKyJcdFstUSBxdW90YV9vcHRpb25zXVxuIgorIlx0Wy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV0gWy1UIGxhc3RfY2hlY2tfdGltZV0gWy1VIFVVSURdXG4iCisiXHRbIC1JIG5ld19pbm9kZV9zaXplIF0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJVdGlsaXNhdGlvbqA6ICVzIFstYyBsaW1pdGUtbWF4aW1hbGUtZGUtbW9udGFnZV1cbiIKKyJcdFstZSBjb21wb3J0ZW1lbnQtZW4tY2FzLWQtZXJyZXVyXSBbLWcgZ3JvdXBlXVxuIgorIlx0Wy1pIGludGVydmFsbGVbZHxtfHddXSBbLWpdIFstSiBvcHRpb25zLWpvdXJuYWxdIFstbF1cbiIKKyJcdFstbSBwb3VyY2VudGFnZS1kZS1ibG9jcy1y6XNlcnbpc10gWy1vIFteXW9wdGlvbnMtZGUtbW9udGFnZVssLi4uXV1cbiIKKyJcdFstcCBpbnRlcnZhbGUtbWlzZS3gLWpvdXItbW1wXSBbLXIgbm9tYnJlLWRlLWJsb2NzLXLpc2VydulzXVxuIgorIlx0Wy11IHV0aWxpc2F0ZXVyXSBbLUMgbm9tYnJlLWRlLW1vbnRhZ2VdIFstTCDpdGlxdWV0dGUtZHUtdm9sdW1lXVxuIgorIlx0Wy1NIGRlcm5pZXItculwZXJ0b2lyZS1tb2506V0gWy1PIFteXWZvbmN0aW9ubmFsaXTpWywuLi5dXVxuIgorIlx0Wy1RIG9wdGlvbnMtZGUtcXVvdGFdXG4iCisiXHRbLUUgb3B0aW9uLel0ZW5kdWVbLC4uLl1dIFstVCBkYXRlLWRlLWRlcm5p6HJlLXbpcmlmaWNhdGlvbl1cbiIKKyJcdFstVSBVVUlEXSBbLUkgbm91dmVsbGUtdGFpbGxlLWktbm9ldWRzXSBw6XJpcGjpcmlxdWVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzCittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCFcbiIKK21zZ3N0ciAiTGUgc3VwZXJibG9jIGRlIGpvdXJuYWwgbidhIHBhcyDpdOkgdHJvdXbpoCFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjYxCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAibG9ycyBkZSBsYSB0ZW50YXRpdmUgZCdvdXZlcnR1cmUgZHUgam91cm5hbCBleHRlcm5lIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjcgbWlzYy90dW5lMmZzLmM6MTk2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiJXMgbidlc3QgcGFzIHVuIHDpcmlwaOlyaXF1ZSBkZSBqb3VybmFsLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNzcgbWlzYy90dW5lMmZzLmM6MTk3NAorbXNnaWQgIkZpbGVzeXN0ZW0ncyBVVUlEIG5vdCBmb3VuZCBvbiBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIkwnVVVJRCBkdSBzeXN06G1lIGRlIGZpY2hpZXJzIG4nYSBwYXMg6XTpIHRyb3V26SBzdXIgbGUgcOlyaXBo6XJpcXVlIGRlXG4iCisiam91cm5hbC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MzAxCittc2dpZCAiIgorIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJOZSBwZXV0IHJlcOlyZXIgbGUgcOlyaXBo6XJpcXVlIGRlIGpvdXJuYWwuIElsIG4nYSBQQVMg6XTpIHN1cHByaW3pXG4iCisiVXRpbGlzZXIgbCdvcHRpb24gLWYgcG91ciBzdXBwcmltZXIgbGUgcOlyaXBo6XJpcXVlIGRlIGpvdXJuYWwgbWFucXVhbnQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMxMAorbXNnaWQgIkpvdXJuYWwgcmVtb3ZlZFxuIgorbXNnc3RyICJKb3VybmFsIGVubGV26VxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNTQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgImxvcnMgZGUgbGEgbGVjdHVyZSBkZXMgYml0bWFwcyIKKworIzogbWlzYy90dW5lMmZzLmM6MzYyCittc2dpZCAid2hpbGUgY2xlYXJpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAibG9ycyBkZSBsJ2VmZmFjZW1lbnQgZGUgbCdpLW5vZXVkIGR1IGpvdXJuYWwiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM3MworbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAibG9ycyBkZSBsJ+ljcml0dXJlIGRlIGwnaS1ub2V1ZCBkdSBqb3VybmFsIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MDUgbWlzYy90dW5lMmZzLmM6NDE4Cittc2dpZCAiKGFuZCByZWJvb3QgYWZ0ZXJ3YXJkcyEpXG4iCittc2dzdHIgIihldCByZWJvb3RleiBhcHLoc6AhKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorIkxhIHN1cHByZXNzaW9uIGRlIGxhIGZvbmN0aW9ubmFsaXTpIGRlIHN5c3TobWUgZGUgZmljaGllcnMgJyVzJyBuJ2VzdCBwYXNcbiIKKyJzdXBwb3J06WUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKyJMJ2Fqb3V0IGRlIGxhIGZvbmN0aW9ubmFsaXTpIGRlIHN5c3TobWUgZGUgZmljaGllcnMgJyVzJyBuJ2VzdCBwYXNcbiIKKyJzdXBwb3J06S5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDY3Cittc2dpZCAiIgorIlRoZSBoYXNfam91cm5hbCBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkxhIGZvbmN0aW9ubmFsaXRp6SBoYXNfam91cm5hbCBwZXV0IOp0cmUgZOlzYWN0aXbpZSB1bmlxdWVtZW50IGxvcnNxdWUgbGVcbiIKKyJzeXN06G1lIGRlIGZpY2hpZXJzIGVzdCBk6W1vbnTpIG91IG1vbnTpIGVuIGxlY3R1cmUgc2V1bGUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ3NgorbXNnaWQgIiIKKyJUaGUgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQuICBQbGVhc2UgcnVuIGUyZnNjayBiZWZvcmUgY2xlYXJpbmdcbiIKKyJ0aGUgaGFzX2pvdXJuYWwgZmxhZy5cbiIKK21zZ3N0ciAiIgorIkxlIGRyYXBlYXUgbmVlZHNfcmVjb3ZlcnkgZXN0IGFjdGl26S4gU1ZQIGV46WN1dGV6IGUyZnNjayBhdmFudFxuIgorImRlIGTpc2FjdGl2ZXIgbGUgZHJhcGVhdSBoYXNfam91cm5hbC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDk1Cittc2dpZCAiIgorIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICdzcGFyc2Vfc3VwZXInIG5vdCBzdXBwb3J0ZWRcbiIKKyJmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgbWV0YV9iZyBmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKyJE6WZpbmlyIGxhIGZvbmN0aW9uYWxpdOkgZGUgc3lzdOhtZSBkZSBmaWNoaWVyICdzcGFyc2Vfc3VwZXInIG4nZXN0IHBhc1xuIgorInN1cHBvcnTpIHBvdXIgbGVzIHN5c3TobWVzIGRlIGZpY2hpZXJzIGF2ZWMgbGEgZm9uY3Rpb25hbGl06SBmbGV4X2JnICIKKyJhY3RpdullLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MDgKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW4ndFxuIgorImJlIHNldCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIG9yXG4iCisicmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiTGEgZm9uY3Rpb25uYWxpdOkgZGUgcHJvdGVjdGlvbiBjb250cmUgbGVzXG4iCisibW9udGFnZXMgbXVsdGlwbGVzIG5lIHBldXQg6nRyZSBhY3RpdullIGxvcnNxdWVcbiIKKyJsZSBzeXN06G1lIGRlIGZpY2hpZXIgZXN0IG1vbnTpIG91IGVuIGxlY3R1cmUgc2V1bGUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGhhcyBiZWVuIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWRzLlxuIgorbXNnc3RyICIiCisiTGEgcHJvdGVjdGlvbiBjb250cmUgbGUgbW9udGFnZSBtdWx0aXBsZSBhIOl06SBhY3RpdullIGF2ZWMgdW4gaW50ZXJ2YWxlIGRlICIKKyJtaXNlIOAgam91ciBkZSAlZHMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUzNQorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbm5vdFxuIgorImJlIGRpc2FibGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIHJlYWRvbmx5LlxuIgorbXNnc3RyICIiCisiTGEgZm9uY3Rpb25uYWxpdOkgZGUgcHJvdGVjdGlvbiBjb250cmUgbGUgbW9udGFnZSBtdWx0aXBsZSBuZSBwZXV0XG4iCisi6nRyZSBk6XNhY3RpdullIHNpIGxlIHN5c3TobWUgZGUgZmljaGllcnMgZXN0IGVuIGxlY3R1cmUgc2V1bGUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU0MworbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsYSBsZWN0dXJlIGRlcyBiaXRtYXBzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1MgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWdpYyBudW1iZXIgaW4gTU1QIGJsb2NrIGRvZXMgbm90IG1hdGNoLiBleHBlY3RlZDogJXgsIGFjdHVhbDogJXhcbiIKK21zZ3N0ciAiIgorIkxlIG51belybyBtYWdpcXVlIGRhbnMgbGUgYmxvYyBNTVAgbmUgY29ycmVzcG9uZCBwYXMuIGF0dGVuZHWgOiAleCwgYWN0dWVsoDogIgorIiV4XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1NworbXNnaWQgIndoaWxlIHJlYWRpbmcgTU1QIGJsb2NrLiIKK21zZ3N0ciAibG9ycyBkZSBsYSBsZWN0dXJlIGR1IGJsb2MgTU1QLiIKKworIzogbWlzYy90dW5lMmZzLmM6NTg5Cittc2dpZCAiIgorIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgY2F1c2UgdGhlIHRoZSBmaWxlc3lzdGVtIHRvIGJlXG4iCisiaW5jb25zaXN0ZW50LlxuIgorbXNnc3RyICIiCisiRWZmYWNlciBsZSBkcmFwZWF1IGZsZXhfYmcgcmVuZHJhaXQgbGUgc3lzdOhtZSBkZSBmaWNoaWVycyBpbmNvaOlyZW50LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2MDAKK21zZ2lkICIiCisiVGhlIGh1Z2VfZmlsZSBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkxhIGZvbmN0aW9ubmFsaXTpIGh1Z2VfZmlsZSBwZXV0IOp0cmUgZOlzYWN0aXbpZSB1bmlxdWVtZW50IGxvcnNxdWUgbGVcbiIKKyJzeXN06G1lIGRlIGZpY2hpZXJzIGVzdCBk6W1vbnTpIG91IG1vbnTpIGVuIGxlY3R1cmUgc2V1bGUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY2MAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiAnXnF1b3RhJyBvcHRpb24gb3ZlcnJpZGVzICctUSdhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBdmVydGlzc2VtZW50oDogbCdvcHRpb24gq6BecXVvdGGguyBzdXBwbGFudGUgbGVzIGFyZ3VtZW50cyCroC1RoLsuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcwNQorbXNnaWQgIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIGEgam91cm5hbC5cbiIKK21zZ3N0ciAiTGUgc3lzdOhtZSBkZSBmaWNoaWVycyBhIGTpauAgdW4gam91cm5hbC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgb24gJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlx0bG9ycyBkZSBsYSB0ZW50YXRpdmUgZCdvdXZlcnR1cmUgZHUgam91cm5hbCBzdXIgJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgb24gZGV2aWNlICVzOiAiCittc2dzdHIgIkNy6WF0aW9uIGR1IGpvdXJuYWwgc3VyIGxlIHDpcmlwaOlyaXF1ZSAlc6A6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGFkZGluZyBmaWxlc3lzdGVtIHRvIGpvdXJuYWwgb24gJXMiCittc2dzdHIgImxvcnMgZGUgbCdham91dCBkdSBzeXN06G1lIGRlIGZpY2hpZXJzIGF1IGpvdXJuYWwgc3VyICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3NDMKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIGlub2RlOiAiCittc2dzdHIgIkNy6WF0aW9uIGRlIGwnaS1ub2V1ZCBkdSBqb3VybmFsoDogIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3NTcKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwgZmlsZSIKK21zZ3N0ciAiIgorIlxuIgorIlx0bG9ycyBkZSBsYSB0ZW50YXRpdmUgZGUgY3LpYXRpb24gZHUgZmljaGllciBqb3VybmFsIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4MzIKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2UgcXVvdGEgb3B0aW9ucyFcbiIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZCdhbGxvdWVyIGRlIGxhIG3pbW9pcmUgcG91ciBhbmFseXNlciBsZXMgb3B0aW9ucyBkZSBxdW90YaAhXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg1NAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgcXVvdGEgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRm9sbG93aW5nIHZhbGlkIHF1b3RhIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSAocGFzcyBieSBzZXBhcmF0aW5nIHdpdGggIgorImNvbW1hKTpcbiIKKyJcdFteXXVzcnF1b3RhXG4iCisiXHRbXl1ncnBxdW90YVxuIgorIlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiVW5lIG91IGRlcyBvcHRpb25zIGRlIHF1b3RhIHNw6WNpZmnpZXMgc29udCBlcnJvbullcy5cbiIKKyJcbiIKKyJMZXMgb3B0aW9ucyBkZSBxdW90YSBzdWl2YW50ZXMgc29udCBkaXNwb25pYmxlcyAobGVzIGZvdXJuaXIgc+lwYXLpZXMgcGFyICIKKyJkZXMgdmlyZ3VsZXMpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBwYXJzZSBkYXRlL3RpbWUgc3BlY2lmaWVyOiAlcyIKK21zZ3N0ciAiTmUgcGV1dCBhbmFseXNlciBsYSBzcOljaWZpY2F0aW9uIGRlIGRhdGUvaGV1cmWgOiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTQyIG1pc2MvdHVuZTJmcy5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbW91bnRzIGNvdW50IC0gJXMiCittc2dzdHIgImNvbXB0ZXVyIGRlIG1vbnRhZ2VzIGVycm9u6SAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGVycm9yIGJlaGF2aW9yIC0gJXMiCittc2dzdHIgIm1hdXZhaXMgY29tcG9ydGVtZW50IGVuIGNhcyBkJ2VycmV1ciAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpZC9ncm91cCBuYW1lIC0gJXMiCittc2dzdHIgIm5vbSBnaWQvZ3JvdXBlIGVycm9u6SAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbnRlcnZhbCAtICVzIgorbXNnc3RyICJpbnRlcnZhbGxlIGVycm9u6SAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9jayByYXRpbyAtICVzIgorbXNnc3RyICJ0YXV4IGRlIGJsb2NzIHLpc2VydulzIGVycm9u6SAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDc1Cittc2dpZCAiLW8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1vIG5lIHBldXQg6nRyZSBzcOljaWZp6SBxdSd1bmUgZm9pcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA4NAorbXNnaWQgIi1PIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICItTyBuZSBwZXV0IOp0cmUgc3DpY2lmaekgcXUndW5lIGZvaXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrcyBjb3VudCAtICVzIgorbXNnc3RyICJjb21wdGV1ciBkZSBibG9jcyBy6XNlcnbpcyBlcnJvbukgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdWlkL3VzZXIgbmFtZSAtICVzIgorbXNnc3RyICJub20gdXRpbGlzYXRldXIvdWlkIGVycm9u6SAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgInRhaWxsZSBkJ2ktbm9ldWQgaW52YWxpZGUgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbm9kZSBzaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28tICVzIgorbXNnc3RyICJMYSB0YWlsbGUgZGVzIGktbm9ldWRzIGRvaXQg6nRyZSB1bmUgcHVpc3NhbmNlIGRlIGRldXggLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtbXBfdXBkYXRlX2ludGVydmFsIHRvbyBiaWc6ICVsdVxuIgorbXNnc3RyICJtbXBfdXBkYXRlX2ludGVydmFsIHRyb3AgZ3JhbmSgOiAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0clswXSAiIgorIkTpZmluaXRpb24gZGUgbCdpbnRlcnZhbGUgZGUgbWlzZSDgIGpvdXIgZGUgbGEgcHJvdGVjdGlvbiBjb250cmUgbGVzICIKKyJtb250YWdlcyBtdWx0aXBsZXMg4CAlbHUgc2Vjb25kZVxuIgorbXNnc3RyWzFdICIiCisiROlmaW5pdGlvbiBkZSBsJ2ludGVydmFsZSBkZSBtaXNlIOAgam91ciBkZSBsYSBwcm90ZWN0aW9uIGNvbnRyZSBsZXMgIgorIm1vbnRhZ2VzIG11bHRpcGxlcyDgICVsdSBzZWNvbmRlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpZGU6ICVzXG4iCittc2dzdHIgIlBhcmFt6HRyZSCroHN0cmlkZSBSQUlEoLsgaW52YWxpZGWgOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpcGUtd2lkdGg6ICVzXG4iCittc2dzdHIgIlBhcmFt6HRyZSCroHN0cmlwZS13aWR0aCBSQUlEoLsgaW52YWxpZGWgOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaGFzaCBhbGdvcml0aG06ICVzXG4iCittc2dzdHIgIkFsZ29yaXRobWUgZGUgaGFjaGFnZSBpbnZhbGlkZaA6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHRvICVzICglZClcbiIKK21zZ3N0ciAiROlmaW5pdGlvbiBkZSBsJ2FsZ29yaXRobWUgZGUgaGFjaGFnZSBwYXIgZOlmYXV0IOAgJXMgKCVkKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzMxCittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNoIGFsZ29yaXRobT5cbiIKKyJcdG1vdW50X29wdHM9PGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucz5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBjaHVuayBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZV93aWR0aD08UkFJRCBzdHJpZGUqZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorbXNnc3RyICIiCisiXG4iCisiVW5lIG91IGRlcyBvcHRpb25zIHNw6WNpZmnpZXMgc29udCBlcnJvbullcy5cbiIKKyJcbiIKKyJMZXMgb3B0aW9ucyDpdGVuZHVlcyBzb250IHPpcGFy6WVzIHBhciBkZXMgdmlyZ3VsZXMgZXQgcGV1dmVudCBwcmVuZHJlIHVuXG4iCisiXHRhcmd1bWVudCBxdWkgZXN0IGTpZmluaSDgIGwnYWlkZSBkJ3VuIHNpZ25lIGQn6WdhbGl06SAoq6A9oLspLlxuIgorIlxuIgorIkxlcyBvcHRpb25zIOl0ZW5kdWVzIHZhbGlkZXMgc29udDpcbiIKKyJcdGNsZWFyX21tcFxuIgorIlx0aGFzaF9hbGc9PGFsZ29yaXRobWUgZGUgaGFjaGFnZT5cbiIKKyJcdG1vdW50X29wdHM9PG9wdGlvbnMgZGUgbW9udGFnZXMg6XRlbmR1ZXMgcGFyIGTpZmF1dD5cbiIKKyJcdHN0cmlkZT08dGFpbGxlIGVuIGJsb2NzIGRlcyBtb3JjZWF1eCBwYXIgZGlzcXVlIFJBSUQ+XG4iCisiXHRzdHJpcGUtd2lkdGg9PHN0cmlkZSBSQUlEICogbm9tYnJlIGRlIGRpc3F1ZXMgZW4gYmxvY3M+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzk4Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgaW5vZGUgYml0bWFwXG4iCittc2dzdHIgIsljaGVjIGRlIGxlY3R1cmUgZHUgYml0bWFwIGQnaS1ub2V1ZHNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgwMworbXNnaWQgIkZhaWxlZCB0byByZWFkIGJsb2NrIGJpdG1hcFxuIgorbXNnc3RyICLJY2hlYyBkZSBsZWN0dXJlIGR1IGJpdG1hcCBkZSBibG9jXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjAgcmVzaXplL3Jlc2l6ZTJmcy5jOjkzMQorbXNnaWQgImJsb2NrcyB0byBiZSBtb3ZlZCIKK21zZ3N0ciAiYmxvY3Mg4CBk6XBsYWNlciIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyMworbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSBibG9jayBiaXRtYXAgd2hlbiBpbmNyZWFzaW5nIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiIgorIk4nYSBwdSBhbGxvdWVyIGRlIGJpdG1hcCBkZSBibG9jcyBsb3JzIGQndW5lIGF1Z21lbnRhdGlvbiBkZSB0YWlsbGUgZCdpLSIKKyJub2V1ZCBcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyOQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gaW5jcmVhc2UgaW5vZGUgc2l6ZSBcbiIKK21zZ3N0ciAiUGFzIGFzc2V6IGQnZXNwYWNlIHBvdXIgYXVnbWVudGVyIGxhIHRhaWxsZSBkJ2ktbm9ldWQgXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MzQKK21zZ2lkICJGYWlsZWQgdG8gcmVsb2NhdGUgYmxvY2tzIGR1cmluZyBpbm9kZSByZXNpemUgXG4iCittc2dzdHIgIk4nYSBwdSByZWxvZ2VyIGRlcyBibG9jcyBsb3JzIGQndW4gY2hhbmdlbWVudCBkZSB0YWlsbGUgZCdpLW5vZXVkIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODY2Cittc2dpZCAiIgorIkVycm9yIGluIHJlc2l6aW5nIHRoZSBpbm9kZSBzaXplLlxuIgorIlJ1biBlMnVuZG8gdG8gdW5kbyB0aGUgZmlsZSBzeXN0ZW0gY2hhbmdlcy4gXG4iCittc2dzdHIgIiIKKyJFcnJldXIgbG9ycyBkdSBjaGFuZ2VtZW50IGRlIGxhIHRhaWxsZSBkZXMgaS1ub2V1ZHMuXG4iCisiRXjpY3V0ZXogZTJ1bmRvIHBvdXIgZOlmYWlyZSBsZXMgY2hhbmdlbWVudHMgZHUgc3lzdOhtZSBkZSBmaWNoaWVycy4gXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4OTMKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRkYiBmaWxlbmFtZVxuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYWxsb3VlciBkZSBsYSBt6W1vaXJlIHBvdXIgbGUgbm9tIGR1IGZpY2hpZXIgdGRiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRlbGV0ZSAlcyIKK21zZ3N0ciAibG9ycyBkZSBsYSB0ZW50YXRpdmUgZCdlZmZhY2VtZW50IGRlICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyB1bmRvIHRoZSB0dW5lMmZzIG9wZXJhdGlvbiBwbGVhc2UgcnVuIHRoZSBjb21tYW5kXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiUG91ciBk6WZhaXJlIGwnb3DpcmF0aW9uIGRlIHR1bmUyZnMsIHZldWlsbGV6IGxhbmNlciBsYSBjb21tYW5kZVxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGJsb2NrIG1hZ2ljIGlzIGJhZC4gVHJ5IHRvIGZpeCBpdCBieSBydW5uaW5nOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCittc2dzdHIgIiIKKyJMZSBudW3pcm8gbWFnaXF1ZSBkdSBibG9jIE1NUCBlc3QgaW5jb3JyZWN0LiBFc3NheWVyIGRlIGxlIGNvcnJpZ2VyIGVuICIKKyJsYW7nYW50OlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGlub2RlIHNpemUgaXMgYWxyZWFkeSAlbHVcbiIKK21zZ3N0ciAiTGEgdGFpbGxlIGRlcyBpLW5vZXVkcyBlc3QgZOlq4CAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA4MQorbXNnaWQgIlNocmlua2luZyBpbm9kZSBzaXplIGlzIG5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiTGEgculkdWN0aW9uIGRlIGxhIHRhaWxsZSBkJ3VuIGktbm9ldWQgbidlc3QgcGFzIHN1cHBvcnTpZVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaW5vZGUgc2l6ZSAlbHUgKG1heCAlZClcbiIKK21zZ3N0ciAiVGFpbGxlIGQnaS1ub2V1ZCBpbnZhbGlkZSAlbHUgKG1heCAlZClcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiROlmaW5pdGlvbiBkdSBub21icmUgbWF4aW1hbCBkZSBtb250YWdlcyDgICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjdXJyZW50IG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIkTpZmluaXRpb24gZHUgbm9tYnJlIGNvdXJhbnQgZGUgbW9udGFnZXMg4CAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXJyb3IgYmVoYXZpb3IgdG8gJWRcbiIKK21zZ3N0ciAiROlmaW5pdGlvbiBkdSBjb21wb3J0ZW1lbnQgZW4gY2FzIGQnZXJyZXVyIOAgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBnaWQgdG8gJWx1XG4iCittc2dzdHIgIkTpZmluaXRpb24gZHUgZ2lkIGRlcyBibG9jcyBy6XNlcnbpcyDgICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgImwnaW50ZXJ2YWxsZSBlbnRyZSBsZXMgdulyaWZpY2F0aW9ucyBlc3QgdHJvcCBncmFuZCAoJWx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGludGVydmFsIGJldHdlZW4gY2hlY2tzIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHIgIkTpZmluaXRpb24gZGUgbCdpbnRlcnZhbGxlIGRlIHbpcmlmaWNhdGlvbiDgICVsdSBzZWNvbmRlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnRhZ2UgdG8gJWclJSAoJWxsdSBibG9ja3MpXG4iCittc2dzdHIgIkTpZmluaXRpb24gZHUgcG91cmNlbnRhZ2UgZGUgYmxvY3MgculzZXJ26XMg4CAlZyUlICglbGx1IGJsb2NzKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlc2VydmVkIGJsb2NrcyBjb3VudCBpcyB0b28gYmlnICglbGx1KSIKK21zZ3N0ciAibGUgbm9tYnJlIGRlIGJsb2NzIHLpc2VydulzIGVzdCB0cm9wIGdyYW5kICglbGx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgIkTpZmluaXRpb24gZHUgbm9tYnJlIGRlIGJsb2NzIHLpc2VydulzIOAgJWxsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTg3Cittc2dpZCAiIgorIlxuIgorIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSBzdXBlcmJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkxlIHN5c3TobWUgZGUgZmljaGllcnMgYSBk6WrgIGRlcyBzdXBlcmJsb2NzIGNyZXV4LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTkxCittc2dpZCAiIgorIlxuIgorIlNldHRpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZFxuIgorImZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBtZXRhX2JnIGZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkTpZmluaXIgbGUgZHJhcGVhdSBjcmV1eCBkdSBzdXBlcmJsb2Mgbidlc3QgcGFzIHN1cHBvcnTpIHBvdXIgbGVzIHN5c3TobWVzXG4iCisiZGUgZmljaGllcnMgYXZlYyBsYSBmb25jdGlvbmFsaXTpIGZsZXhfYmcgYWN0aXbpZS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBzZXQuICAlcyIKK21zZ3N0ciAiIgorIlxuIgorIkRyYXBlYXUgZGUgc3VwZXJibG9jIGNyZXV4IGFjdGl26S4gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDcKK21zZ2lkICIiCisiXG4iCisiQ2xlYXJpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkxhIHN1cHByZXNzaW9uIGR1IGRyYXBlYXUgY3JldXggZHUgc3VwZXJibG9jIG4nZXN0IHBhcyBzdXBwb3J06WUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB0aW1lIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRvICVzXG4iCittc2dzdHIgIiIKKyJE6WZpbml0aW9uIGRlIGxhIGRhdGUgZGUgbGEgZGVybmnocmUgdulyaWZpY2F0aW9uIGR1IHN5c3TobWUgZGVcbiIKKyJmaWNoaWVycyDgICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgdWlkIHRvICVsdVxuIgorbXNnc3RyICJE6WZpbml0aW9uIGRlIGwndWlkIGRlIGJsb2NzIHLpc2VydulzIOAgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNTMKK21zZ2lkICJFcnJvciBpbiB1c2luZyBjbGVhcl9tbXAuIEl0IG11c3QgYmUgdXNlZCB3aXRoIC1mXG4iCittc2dzdHIgIiIKKyJFcnJldXIgbG9ycyBkZSBsJ3V0aWxpc2F0aW9uIGRlIGNsZWFyX21tcC4gRWxsZSBkb2l0IOp0cmUgdXRpbGlz6WUgYXZlYyAtZlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjcxCittc2dpZCAiIgorIlRoZSBxdW90YSBmZWF0dXJlIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIiIKKyJMYSBmb25jdGlvbmFsaXTpIGRlIHF1b3RhIG5lIHBldXQg6nRyZSBjaGFuZ+llIHF1ZSBsb3JzcXVlIGxlIHN5c3TobWUgZGUgIgorImZpY2hpZXJzIGVzdCBk6W1vbnTpLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjkyCittc2dpZCAiVGhlIFVVSUQgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorIkwnVVVJRCBuZSBwZXV0IOp0cmUgY2hhbmfpIHF1ZSBsb3JzcXVlIGxlIHN5c3TobWVcbiIKKyJkZSBmaWNoaWVycyBldCBk6W1vbnTpLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzIyCittc2dpZCAiSW52YWxpZCBVVUlEIGZvcm1hdFxuIgorbXNnc3RyICJGb3JtYXQgVVVJRCBpbnZhbGlkZVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzM3Cittc2dpZCAiTmVlZCB0byB1cGRhdGUgam91cm5hbCBzdXBlcmJsb2NrLlxuIgorbXNnc3RyICJEb2l0IG1ldHRyZSDgIGpvdXIgbGUgc3VwZXJibG9jIGR1IGpvdXJuYWxcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM1OAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIiIKKyJMYSB0YWlsbGUgZGVzIGktbm9ldWRzIG5lIHBldXQg6nRyZSBjaGFuZ+llIHF1ZSBsb3JzcXVlIGxlIHN5c3TobWVcbiIKKyJkZSBmaWNoaWVycyBldCBk6W1vbnTpLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzY2Cittc2dpZCAiIgorIkNoYW5naW5nIHRoZSBpbm9kZSBzaXplIG5vdCBzdXBwb3J0ZWQgZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIGZsZXhfYmdcbiIKKyJmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKyJDaGFuZ2VyIGxhIHRhaWxsZSBkZXMgaS1ub2V1ZHMgbidlc3QgcGFzIHN1cHBvcnTpIHBvdXIgbGVzIHN5c3TobWVzIGRlXG4iCisiZmljaGllcnMgYXZlYyBsYSBmb25jdGlvbmFsaXTpIGZsZXhfYmcgYWN0aXbpZS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGlub2RlIHNpemUgJWx1XG4iCittc2dzdHIgIkTpZmluaXRpb24gZGUgbGEgdGFpbGxlIGRlcyBpLW5vZXVkcyDgICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzgyCittc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBpbm9kZSBzaXplXG4iCittc2dzdHIgIk4nYSBwdSBjaGFuZ2VyIGxhIHRhaWxsZSBkJ2ktbm9ldWQgXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdHJpZGUgc2l6ZSB0byAlZFxuIgorbXNnc3RyICJE6WZpbml0aW9uIGRlIGxhIHRhaWxsZSBkZSCroHN0cmlkZaC7IOAgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlwZSB3aWR0aCB0byAlZFxuIgorbXNnc3RyICJE6WZpbml0aW9uIGRlIGxhIHRhaWxsZSBkdSCroHN0cmlwZSB3aWR0aKC7IOAgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucyB0byAnJXMnXG4iCittc2dzdHIgIkTpZmluaXRpb24gZGVzIG9wdGlvbnMgZGUgbW9udGFnZSDpdGVuZHVlcyBwYXIgZOlmYXV0IOAgq6Alc6C7XG4iCisKKyM6IG1pc2MvdXRpbC5jOjkzCittc2dpZCAiPHByb2NlZWRpbmc+XG4iCittc2dzdHIgIjxvbiBwcm9j6GRlPlxuIgorCisjOiBtaXNjL3V0aWwuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICJQcm9jZWVkIGFueXdheSAob3Igd2FpdCAlZCBzZWNvbmRzKSA/ICh5LG4pICIKK21zZ3N0ciAiUHJvY+lkZXIgbWFsZ3LpIHRvdXQgKG91IGF0dGVuZHJlICVkIHNlY29uZGVzKaA/IChvLG4pICIKKworIzogbWlzYy91dGlsLmM6MTAxCittc2dpZCAiUHJvY2VlZCBhbnl3YXk/ICh5LG4pICIKK21zZ3N0ciAiUHJvY+lkZXIgbWFsZ3LpIHRvdXSgPyAobyxuKSAiCisKKyM6IG1pc2MvdXRpbC5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW91bnRlZCBvbiAlcyBvbiAlcyIKK21zZ3N0ciAiXHRkZXJuaWVyIG1vbnRhZ2Ugc3VyICVzIGxlICVzIgorCisjOiBtaXNjL3V0aWwuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vdW50ZWQgb24gJXMiCittc2dzdHIgIlx0ZGVybmllciBtb250YWdlIGxlICVzIgorCisjOiBtaXNjL3V0aWwuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRjcmVhdGVkIG9uICVzIgorbXNnc3RyICJcdGNy6ekgbGUgJXMiCisKKyM6IG1pc2MvdXRpbC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW9kaWZpZWQgb24gJXMiCittc2dzdHIgIlx0bW9kaWZp6SBsYSBkZXJuaehyZSBmb2lzIGxlICVzIgorCisjOiBtaXNjL3V0aWwuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm91bmQgYSAlcyBwYXJ0aXRpb24gdGFibGUgaW4gJXNcbiIKK21zZ3N0ciAiVHJvdXbpIHVuZSB0YWJsZSBkZSBwYXJ0aXRpb25zICVzIGRhbnMgJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBmaWxlICVzIGRvZXMgbm90IGV4aXN0IGFuZCBubyBzaXplIHdhcyBzcGVjaWZpZWQuXG4iCittc2dzdHIgIkxlIGZpY2hpZXIgJXMgbidleGlzdGUgcGFzIGV0IGF1Y3VuZSB0YWlsbGUgbidhIOl06SBzcOljaWZp6WUuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyByZWd1bGFyIGZpbGUgJXNcbiIKK21zZ3N0ciAiQ3LpYXRpb24gZCd1biBmaWNoaWVyIG5vcm1hbCAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIkltcG9zc2libGUgZCdvdXZyaXIgJXOgOiAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMTYKK21zZ2lkICIiCisiXG4iCisiVGhlIGRldmljZSBhcHBhcmVudGx5IGRvZXMgbm90IGV4aXN0OyBkaWQgeW91IHNwZWNpZnkgaXQgY29ycmVjdGx5P1xuIgorbXNnc3RyICIiCisiXG4iCisiTGUgcOlyaXBo6XJpcXVlIG4nZXhpc3RlIGFwcGFyZW1tZW50IHBhc6A7IGwnYXZlei12b3VzIHNw6WNpZmnpXG4iCisiY29ycmVjdGVtZW50oD9cbiIKKworIzogbWlzYy91dGlsLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGJsb2NrIHNwZWNpYWwgZGV2aWNlLlxuIgorbXNnc3RyICIlcyBuJ2VzdCBwYXMgdW4gcOlyaXBo6XJpcXVlIHNw6WNpYWwgZW4gbW9kZSBibG9jLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbSBsYWJlbGxlZCAnJXMnXG4iCittc2dzdHIgIiVzIGNvbnRpZW50IHVuIHN5c3TobWUgZGUgZmljaGllcnMgJXMg6XRpcXVldOkgq6Alc6C7XG4iCisKKyM6IG1pc2MvdXRpbC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjb250YWlucyBhICVzIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgIiVzIGNvbnRpZW50IHVuIHN5c3TobWUgZGUgZmljaGllcnMgJXNcbiIKKworIzogbWlzYy91dGlsLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGVudGlyZSBkZXZpY2UsIG5vdCBqdXN0IG9uZSBwYXJ0aXRpb24hXG4iCittc2dzdHIgIiVzIGVzdCBsZSBw6XJpcGjpcmlxdWUgZW4gaW506WdyYWxpdOksIHBhcyBzZXVsZW1lbnQgdW5lIHBhcnRpdGlvbqAhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMyMworbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICIiCisibCdleOljdXRpb24gZGUgbWtlMmZzIGVzdCB0b3V0IGRlIG3qbWUgZm9yY+llLlxuIgorIkVzcOlyb25zIHF1ZSAvZXRjL210YWIgZXN0IGluY29ycmVjdC5cbiIKKworIzogbWlzYy91dGlsLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IG1ha2UgYSAlcyBoZXJlIVxuIgorbXNnc3RyICJuZSBmZXJhIHBhcyB1biAlcyBpY2mgIVxuIgorCisjOiBtaXNjL3V0aWwuYzozMzUKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAibCdleOljdXRpb24gZGUgbWtlMmZzIGVzdCB0b3V0IGRlIG3qbWUgZm9yY+llLlxuIgorCisjOiBtaXNjL3V0aWwuYzozNTEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugam91cm5hbCBvcHRpb25zIVxuIgorbXNnc3RyICJOJ2EgcHUgYWxsb3VlciBkZSBsYSBt6W1vaXJlIHBvdXIgYW5hbHlzZXIgbGVzIG9wdGlvbnMgZHUgam91cm5hbKAhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IGZpbmQgam91cm5hbCBkZXZpY2UgbWF0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIk4nYSBwdSB0cm91dmVyIGxlIHDpcmlwaOlyaXF1ZSBkZSBqb3VybmFsIGNvcnJlc3BvbmRhbnQg4CAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzo0MDMKK21zZ2lkICIiCisiXG4iCisiQmFkIGpvdXJuYWwgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiSm91cm5hbCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgam91cm5hbCBvcHRpb25zIGFyZTpcbiIKKyJcdHNpemU9PGpvdXJuYWwgc2l6ZSBpbiBtZWdhYnl0ZXM+XG4iCisiXHRkZXZpY2U9PGpvdXJuYWwgZGV2aWNlPlxuIgorIlx0bG9jYXRpb249PGpvdXJuYWwgbG9jYXRpb24+XG4iCisiXG4iCisiVGhlIGpvdXJuYWwgc2l6ZSBtdXN0IGJlIGJldHdlZW4gMTAyNCBhbmQgMTAyNDAwMDAgZmlsZXN5c3RlbSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJVbmUgb3UgZGVzIG9wdGlvbnMgZGUgam91cm5hbCBzcOljaWZp6WVzIHNvbnQgZXJyb27pZXMuXG4iCisiXG4iCisiTGVzIG9wdGlvbnMgZGUgam91cm5hbCBzb250IHPpcGFy6WVzIHBhciBkZXMgdmlyZ3VsZXMgZXQgcGV1dmVudCBwcmVuZHJlIHVuXG4iCisiXHRhcmd1bWVudCBxdWkgZXN0IGTpZmluaSDgIGwnYWlkZSBkJ3VuIHNpZ25lIGQn6WdhbGl06SAoq6A9oLspLlxuIgorIlxuIgorIkxlcyBvcHRpb25zIGRlIGpvdXJuYWwgdmFsaWRlcyBzb250oDpcbiIKKyJcdHNpemU9PHRhaWxsZSBkdSBqb3VybmFsIGVuIG3pZ2FvY3RldHM+XG4iCisiXHRkZXZpY2U9PHDpcmlwaOlyaXF1ZSBkdSBqb3VybmFsPlxuIgorIlx0bG9jYXRpb249PGVtcGxhY2VtZW50IGR1IGpvdXJuYWw+XG4iCisiXG4iCisiTGEgdGFpbGxlIGR1IGpvdXJuYWwgZG9pdCDqdHJlIGNvbXByaXNlIGVudHJlIDEwMjQgZXQgMTAyNDAwMDAgYmxvY3MgZHVcbiIKKyJzeXN06G1lIGRlIGZpY2hpZXJzLlxuIgorIlxuIgorCisjOiBtaXNjL3V0aWwuYzo0MzQKK21zZ2lkICIiCisiXG4iCisiRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIgorbXNnc3RyICIiCisiXG4iCisiTGUgc3lzdOhtZSBkZSBmaWNoaWVycyBlc3QgdHJvcCBwZXRpdCBwb3VyIHVuIGpvdXJuYWxcbiIKKworIzogbWlzYy91dGlsLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgcmVxdWVzdGVkIGpvdXJuYWwgc2l6ZSBpcyAlZCBibG9ja3M7IGl0IG11c3QgYmVcbiIKKyJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gIEFib3J0aW5nLlxuIgorbXNnc3RyICIiCisiXG4iCisiTGEgdGFpbGxlIGRlbWFuZOllIGR1IGpvdXJuYWwgZXN0IGRlICVkIGJsb2NzoDsgZWxsZSBkb2l0IOp0cmVcbiIKKyJlbnRyZSAxMDI0IGV0IDEwMjQwMDAwIGJsb2NzLiBBcnLqdCBpbW3pZGlhdC5cbiIKKworIzogbWlzYy91dGlsLmM6NDQ5Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgc2l6ZSB0b28gYmlnIGZvciBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiXG4iCisiTGEgdGFpbGxlIGR1IGpvdXJuYWwgZXN0IHRyb3AgZ3JhbmRlIHBvdXIgbGUgc3lzdOhtZSBkZSBmaWNoaWVycy5cbiIKKworIzogbWlzYy91dGlsLmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGVzeXN0ZW0gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNoZWNrZWQgZXZlcnkgJWQgbW91bnRzIG9yXG4iCisiJWcgZGF5cywgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgVXNlIHR1bmUyZnMgLWMgb3IgLWkgdG8gb3ZlcnJpZGUuXG4iCittc2dzdHIgIiIKKyJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIHNlcmEgYXV0b21hdGlxdWVtZW50IHbpcmlmaekgdG91cyBsZXMgJWQgbW9udGFnZXMgb3VcbiIKKyJhcHLocyAlZyBqb3Vycywgc2Vsb24gbGEgcHJlbWnocmUg6XZlbnR1YWxpdOkuIFV0aWxpc2VyIHR1bmUyZnMgLWMgb3UgLWlcbiIKKyJwb3VyIOljcmFzZXIgbGEgdmFsZXVyLlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstZF0gWy1wIHBpZGZpbGVdIFstcyBzb2NrZXRwYXRoXSBbLVQgdGltZW91dF1cbiIKK21zZ3N0ciAiVXRpbGlzYXRpb26gOiAlcyBbLWRdIFstcCBmaWNoaWVyLXBpZF0gWy1zIGNoZW1pbi1zb2NrZXRdIFstVCBk6WxhaV1cbiIKKworIzogbWlzYy91dWlkZC5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyBbLXJ8dF0gWy1uIG51bV0gWy1zIHNvY2tldHBhdGhdXG4iCittc2dzdHIgIiAgICAgICAlcyBbLXJ8dF0gWy1uIG51bV0gWy1zIGNoZW1pbi1zb2NrZXRdXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiICAgICAgICVzIC1rXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoxNTUKK21zZ2lkICJiYWQgYXJndW1lbnRzIgorbXNnc3RyICJtYXV2YWlzIGFyZ3VtZW50cyIKKworIzogbWlzYy91dWlkZC5jOjE3MworbXNnaWQgImNvbm5lY3QiCittc2dzdHIgImNvbm5lY3Rpb24iCisKKyM6IG1pc2MvdXVpZGQuYzoxOTIKK21zZ2lkICJ3cml0ZSIKK21zZ3N0ciAi6WNyaXR1cmUiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDAKK21zZ2lkICJyZWFkIGNvdW50IgorbXNnc3RyICJub21icmUgZGUgbGVjdHVyZXMiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDYKK21zZ2lkICJiYWQgcmVzcG9uc2UgbGVuZ3RoIgorbXNnc3RyICJsb25ndWV1ciBkZSBy6XBvbnNloGludmFsaWRlIgorCisjOiBtaXNjL3V1aWRkLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInV1aWRkIGRhZW1vbiBhbHJlYWR5IHJ1bm5pbmcgYXQgcGlkICVzXG4iCittc2dzdHIgImxlIGTpbW9uIHV1aWRkIGVzdCBk6WrgIGVuIGNvdXJzIGQnZXjpY3V0aW9uIGF2ZWMgcG91ciBwaWQgJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgdW5peCBzdHJlYW0gc29ja2V0OiAlcyIKK21zZ3N0ciAiTidhIHBhcyBwdSBjcullciBsYSBzb2NrZXQgdW5peCBkZSBmbHV4oDogJXMiCisKKyM6IG1pc2MvdXVpZGQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiTidhIHBhcyBwdSBhdHRhY2hlciBsYSBzb2NrZXQgdW5peCAlc6A6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbGlzdGVuIG9uIHVuaXggc29ja2V0ICVzOiAlc1xuIgorbXNnc3RyICJOJ2EgcGFzIHB1IOljb3V0ZXIgc3VyIGxhIHNvY2tldCB1bml4ICVzoDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGZyb20gY2xpZW50LCBsZW4gPSAlZFxuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsYSBsZWN0dXJlIGRlcHVpcyBsZSBjbGllbnQsIGxvbmd1ZXVyID0gJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVyYXRpb24gJWQsIGluY29taW5nIG51bSA9ICVkXG4iCittc2dzdHIgIm9w6XJhdGlvbiAlZCwgbnVtIGVudHJhbnQgPSAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQ6ICVzXG4iCittc2dzdHIgIlVVSUQgZGUgdGVtcHMgZ+lu6XLpoDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgcmFuZG9tIFVVSUQ6ICVzXG4iCittc2dzdHIgIlVVSUQgYWzpYXRvaXJlIGfpbuly6aA6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kICVkIHN1YnNlcXVlbnQgVVVJRHNcbiIKK21zZ3N0clswXSAiVVVJRCBkZSB0ZW1wcyAlcyBldCAlZCBzdWl2YW50IGfpbuly6XNcbiIKK21zZ3N0clsxXSAiVVVJRCBkZSB0ZW1wcyAlcyBldCAlZCBzdWl2YW50cyBn6W7pculzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkICVkIFVVSUQnczpcbiIKK21zZ3N0ciAiR+lu6XLpICVkIFVVSURzoDpcbiIKKworIzogbWlzYy91dWlkZC5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiAlZFxuIgorbXNnc3RyICJPcGVyYXRpb24gJWQgaW52YWxpZGVcbiIKKworIzogbWlzYy91dWlkZC5jOjQ3NyBtaXNjL3V1aWRkLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXI6ICVzXG4iCittc2dzdHIgIk5vbWJyZSBpbnZhbGlkZaA6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MzQgbWlzYy91dWlkZC5jOjU2MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjYWxsaW5nIHV1aWRkIGRhZW1vbiAoJXMpOiAlc1xuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsJ2FwcGVsIGF1IGTpbW9uIHV1aWRkICglcymgOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFuZCBzdWJzZXF1ZW50IFVVSURcbiIKK21zZ2lkX3BsdXJhbCAiJXMgYW5kIHN1YnNlcXVlbnQgJWQgVVVJRHNcbiIKK21zZ3N0clswXSAiJXMgZXQgVVVJRCBzdWl2YW50XG4iCittc2dzdHJbMV0gIiVzIGV0ICVkIFVVSURzIHN1aXZhbnRzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NDgKK21zZ2lkICJMaXN0IG9mIFVVSUQnczpcbiIKK21zZ3N0ciAiTGlzdGUgZGVzIFVVSURzoDpcbiIKKworIzogbWlzYy91dWlkZC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHJlcGx5IGxlbmd0aCBmcm9tIHNlcnZlciAlZFxuIgorbXNnc3RyICJMb25ndWV1ciBkZSBy6XBvbnNlIGluYXR0ZW5kdWUgZGVwdWlzIGxlIHNlcnZldXIgJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBraWxsIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkOiAlc1xuIgorbXNnc3RyICJOJ2EgcHUgdHVlciBsJ3V1aWRkIGVuIGNvdXJzIGQnZXjpY3V0aW9uIHNvdXMgbGUgcGlkICVkoDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJLaWxsZWQgdXVpZGQgcnVubmluZyBhdCBwaWQgJWRcbiIKK21zZ3N0ciAiQSB0dekgbCd1dWlkIGVuIGNvdXJzIGQnZXjpY3V0aW9uIHNvdXMgbGUgcGlkICVkXG4iCisKKyM6IG1pc2MvdXVpZGdlbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJdIFstdF1cbiIKK21zZ3N0ciAiVXRpbGlzYXRpb26gOiAlcyBbLXJdIFstdF1cbiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMgorbXNnaWQgIiMgRXh0ZW50IGR1bXA6XG4iCittc2dzdHIgIiMgVmlkYW5nZSBkZXMgZXh0ZW50c6A6XG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iCittc2dzdHIgIiNcdE5iPSVsbHUsIFRhaWxsZT0lbGx1LCBDdXJzZXVyPSVsbHUsIFRyaelzPSVsbHVcbiIKKworIzogcmVzaXplL21haW4uYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstZCBkZWJ1Z19mbGFnc10gWy1mXSBbLUZdIFstTV0gWy1QXSBbLXBdIGRldmljZSBbbmV3X3NpemVdXG4iCisiXG4iCittc2dzdHIgIiIKKyJVdGlsaXNhdGlvbqA6ICVzIFstZCBkcmFwZWF1eF9kZV9kZWJ1Z10gWy1mXSBbLUZdIFstTV0gWyAtUF0gWy1wXSAiCisicOlyaXBo6XJpcXVlXG4iCisiIFtub3V2ZWxsZV90YWlsbGVdXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NjYKK21zZ2lkICJFeHRlbmRpbmcgdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJFeHRlbnNpb24gZGUgbGEgdGFibGUgZCdpLW5vZXVkcyIKKworIzogcmVzaXplL21haW4uYzo2OQorbXNnaWQgIlJlbG9jYXRpbmcgYmxvY2tzIgorbXNnc3RyICJSZWxvY2FsaXNhdGlvbiBkZSBibG9jcyIKKworIzogcmVzaXplL21haW4uYzo3MgorbXNnaWQgIlNjYW5uaW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJFeGFtZW4gZGUgbGEgdGFibGUgZCdpLW5vZXVkcyIKKworIzogcmVzaXplL21haW4uYzo3NQorbXNnaWQgIlVwZGF0aW5nIGlub2RlIHJlZmVyZW5jZXMiCittc2dzdHIgIk1pc2Ug4CBqb3VyIGRlcyBy6WbpcmVuY2VzIGQnaS1ub2V1ZHMiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzgKK21zZ2lkICJNb3ZpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIkTpcGxhY2VtZW50IGRlIGxhIHRhYmxlIGQnaS1ub2V1ZHMiCisKKyM6IHJlc2l6ZS9tYWluLmM6ODEKK21zZ2lkICJVbmtub3duIHBhc3M/IT8iCittc2dzdHIgIlBhc3NlIGluY29ubnVloD8hPyEiCisKKyM6IHJlc2l6ZS9tYWluLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVnaW4gcGFzcyAlZCAobWF4ID0gJWx1KVxuIgorbXNnc3RyICJE6WJ1dCBkZSBsYSBwYXNzZSAlZCAobWF4ID0gJWx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjE1NQorbXNnaWQgIiIKKyJcbiIKKyJSZXNpemluZyBiaWdhbGxvYyBmaWxlIHN5c3RlbXMgaGFzIG5vdCBiZWVuIGZ1bGx5IHRlc3RlZC4gIFByb2NlZWQgYXRcbiIKKyJ5b3VyIG93biByaXNrISAgVXNlIHRoZSBmb3JjZSBvcHRpb24gaWYgeW91IHdhbnQgdG8gZ28gYWhlYWQgYW55d2F5LlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiUmV0YWlsbGVyIHVuIHN5c3TobWUgZGUgZmljaGllciBiaWdhbGxvYyBuJ2EgcGFzIOl06SBjb21wbOh0ZW1lbnQgdGVzdOkuXG4iCisiUHJvY+lkZXogc2Vsb24gdm90cmUgcHJvcHJlIHJpc3F1ZaAhIFV0aWxpc2V6IGwnb3B0aW9uIGZvcmNlIHNpIHZvdXNcbiIKKyJ2b3VsZXogY29udGludWVyIG1hbGdy6SB0b3V0LlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIgorbXNnc3RyICJsb3JzIGRlIGwnb3V2ZXJ0dXJlIGRlICVzIgorCisjOiByZXNpemUvbWFpbi5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIHN0YXQgaW5mb3JtYXRpb24gZm9yICVzIgorbXNnc3RyICJsb3JzIGRlIGxhIHLpY3Vw6XJhcnRpb24gZGUgbCfpdGF0IGRlICVzIgorCisjOiByZXNpemUvbWFpbi5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1mICVzJyBmaXJzdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlNWUCBleOljdXRleiCroGUyZnNjayAtZiAlc6C7IGQnYWJvcmQuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGltYXRlZCBtaW5pbXVtIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW06ICVsbHVcbiIKK21zZ3N0ciAiVGFpbGxlIG1pbmltYWxlIGVzdGlt6WUgZHUgc3lzdOhtZSBkZSBmaWNoaWVyc6A6ICVsbHVcbiIKKworIzogcmVzaXplL21haW4uYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBuZXcgc2l6ZTogJXNcbiIKK21zZ3N0ciAidGFpbGxlIGQnaS1ub2V1ZCBpbnZhbGlkZSAtICVzXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDIxCittc2dpZCAiTmV3IHNpemUgdG9vIGxhcmdlIHRvIGJlIGV4cHJlc3NlZCBpbiAzMiBiaXRzXG4iCittc2dzdHIgIkxhIG5vdXZlbGxlIHRhaWxsZSBlc3QgdHJvcCBncmFuZGUgcG91ciDqdHJlIGV4cHJpbellIHN1ciAzMiBiaXRzXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5ldyBzaXplIHNtYWxsZXIgdGhhbiBtaW5pbXVtICglbGx1KVxuIgorbXNnc3RyICJMYSBub3V2ZWxsZSB0YWlsbGUgZXN0IHBsdXMgcGV0aXRlIHF1ZSBsZSBtaW5pbXVtICglbGx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjQzNQorbXNnaWQgIkludmFsaWQgc3RyaWRlIGxlbmd0aCIKK21zZ3N0ciAiTG9uZ3VldXIgq6BzdHJpZGWguyBpbnZhbGlkZSIKKworIzogcmVzaXplL21haW4uYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb250YWluaW5nIHBhcnRpdGlvbiAob3IgZGV2aWNlKSBpcyBvbmx5ICVsbHUgKCVkaykgYmxvY2tzLlxuIgorIllvdSByZXF1ZXN0ZWQgYSBuZXcgc2l6ZSBvZiAlbGx1IGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkxhIHBhcnRpdGlvbiAob3UgbGUgcOlyaXBo6XJpcXVlKSBjb250ZW5hbnRlIG4nYSBxdWUgJWxsdSAoJWRrKSBibG9jcy5cbiIKKyJWb3VzIGF2ZXogZGVtYW5k6SB1bmUgbm91dmVsbGUgdGFpbGxlIGRlICVsbHUgYmxvY3MuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBpcyBhbHJlYWR5ICVsbHUgKCVkaykgYmxvY2tzIGxvbmcuICBOb3RoaW5nIHRvIGRvIVxuIgorIlxuIgorbXNnc3RyICIiCisiTGUgc3lzdOhtZSBkZSBmaWNoaWVycyBhIGTpauAgJWxsdSBibG9jcyAoJWRrKS4gUmllbiDgIGZhaXJloCFcbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXppbmcgdGhlIGZpbGVzeXN0ZW0gb24gJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIiIKKyJFbiB0cmFpbiBkZSByZWRpbWVuc2lvbm5lciBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIHN1ciAlcyDgICVsbHUgKCVkaykgIgorImJsb2NzLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcmVzaXplICVzIgorbXNnc3RyICJsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkZSBjaGFuZ2VtZW50IGRlIHRhaWxsZSBkZSAlcyIKKworIzogcmVzaXplL21haW4uYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZnkgJXMnIHRvIGZpeCB0aGUgZmlsZXN5c3RlbVxuIgorImFmdGVyIHRoZSBhYm9ydGVkIHJlc2l6ZSBvcGVyYXRpb24uXG4iCittc2dzdHIgIiIKKyJWZXVpbGxleiBsYW5jZXIgq6BlMmZzY2sgLWZ5ICVzoLsgcG91ciBjb3JyaWdlciBsZSBzeXN06G1lIGRlIGZpY2hpZXJzXG4iCisiYXBy6HMgbCdvcOlyYXRpb24gZGUgY2hhbmdlbWVudCBkZSB0YWlsbGUgYXZvcnTpZS5cbiIKKworIzogcmVzaXplL21haW4uYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIG9uICVzIGlzIG5vdyAlbGx1ICglZGspIGJsb2NrcyBsb25nLlxuIgorIlxuIgorbXNnc3RyICIiCisiTGUgc3lzdOhtZSBkZSBmaWNoaWVycyBzdXIgJXMgYSBtYWludGVuYW50IHVuZSB0YWlsbGUgZGUgJWxsdSBibG9jcyAoJWRrKS5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHRydW5jYXRlICVzIgorbXNnc3RyICJsb3JzIGRlIGxhIHRyb25jYXR1cmUgZGUgJXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4MgorbXNnaWQgImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemUgd2l0aCBzcGFyc2Vfc3VwZXIyIgorbXNnc3RyICIiCisiTGUgbm95YXUgbmUgc3VwcG9ydGUgcGFzIGxlIGNoYW5nZW1lbnQgZGUgdGFpbGxlIGVuIGxpZ25lIGF2ZWMgc3BhcnNlX3N1cGVyMiIKKworIzogcmVzaXplL29ubGluZS5jOjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlczsgb24tbGluZSByZXNpemluZyByZXF1aXJlZFxuIgorbXNnc3RyICIiCisiTGUgc3lzdOhtZSBkZSBmaWNoaWVycyBkZSAlcyBlc3QgbW9udOkgc3VyICVzoDsgbGUgY2hhbmdlbWVudCBkZSB0YWlsbGUgZG9pdCAiCisi6nRyZSBlZmZlY3R16SBlbiBsaWduZVxuIgorCisjOiByZXNpemUvb25saW5lLmM6OTEKK21zZ2lkICJPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJMYSBy6WR1Y3Rpb24gZW4gbGlnbmUgbidlc3QgcGFzIHN1cHBvcnTpZSIKKworIzogcmVzaXplL29ubGluZS5jOjExNgorbXNnaWQgIkZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIiIKKyJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIG5lIHN1cHBvcnRlIHBhcyBsZSBjaGFuZ2VtZW50IGRlIHRhaWxsZSBlbiBsaWduZSIKKworIzogcmVzaXplL29ubGluZS5jOjEyNQorbXNnaWQgIk5vdCBlbm91Z2ggcmVzZXJ2ZWQgZ2R0IGJsb2NrcyBmb3IgcmVzaXppbmciCittc2dzdHIgIlBhcyBhc3NleiBkZSBibG9jcyBnZHQgculzZXJ26XMgcG91ciB1biBjaGFuZ2VtZW50IGRlIHRhaWxsZSIKKworIzogcmVzaXplL29ubGluZS5jOjEzMgorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHJlc2l6aW5nIGEgZmlsZSBzeXN0ZW0gdGhpcyBsYXJnZSIKK21zZ3N0ciAiIgorIkxlIG5veWF1IG5lIHNhaXQgcGFzIHJldGFpbGxlciB1biBzeXN06G1lIGRlIGZpY2hpZXJzIGQndW5lIHRlbGxlIHRhaWxsZSIKKworIzogcmVzaXplL29ubGluZS5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBtb3VudHBvaW50ICVzIgorbXNnc3RyICJsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkJ291dmVydHVyZSBkdSBwb2ludCBkZSBtb250YWdlICVzIgorCisjOiByZXNpemUvb25saW5lLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIk9sZCByZXNpemUgaW50ZXJmYWNlIHJlcXVlc3RlZC5cbiIKK21zZ3N0ciAiVXRpbGlzYXRpb24gZGUgbCdhbmNpZW5uZSBpbnRlcmZhY2UgZGUgY2hhbmdlbWVudCBkZSB0YWlsbGUuXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNjQgcmVzaXplL29ubGluZS5jOjE4MQorbXNnaWQgIlBlcm1pc3Npb24gZGVuaWVkIHRvIHJlc2l6ZSBmaWxlc3lzdGVtIgorbXNnc3RyICJQZXJtaXNzaW9uIGRlIHJlZGltZW5zaW9ubmVyIGxlIHN5c3TobWUgZGUgZmljaGllcnMgcmVmdXPpZSIKKworIzogcmVzaXplL29ubGluZS5jOjE2NyByZXNpemUvb25saW5lLmM6MTg3Cittc2dpZCAiV2hpbGUgY2hlY2tpbmcgZm9yIG9uLWxpbmUgcmVzaXppbmcgc3VwcG9ydCIKK21zZ3N0ciAiTG9ycyBkZSBsYSB26XJpZmljYXRpb24gZHUgc3VwcG9ydCBkZSBjaGFuZ2VtZW50IGRlIHRhaWxsZSBlbiBsaWduZSIKKworIzogcmVzaXplL29ubGluZS5jOjE4NAorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiTGUgbm95YXUgbmUgc3VwcG9ydGUgcGFzIGxlIGNoYW5nZW1lbnQgZGUgdGFpbGxlIGVuIGxpZ25lIgorCisjOiByZXNpemUvb25saW5lLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlBlcmZvcm1pbmcgYW4gb24tbGluZSByZXNpemUgb2YgJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIiIKKyJFbiB0cmFpbiBkJ2VmZmVjdHVlciB1biBjaGFuZ2VtZW50IGRlIHRhaWxsZSBlbiBsaWduZSBkZSAlcyB2ZXJzICVsbHUgKCVkaykgIgorImJsb2NzLlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MjMzCittc2dpZCAiV2hpbGUgdHJ5aW5nIHRvIGV4dGVuZCB0aGUgbGFzdCBncm91cCIKK21zZ3N0ciAiTG9ycyBkZSBsYSB0ZW50YXRpdmUgZCfpdGVuZHJlIGxlIGRlcm5pZXIgZ3JvdXBlIgorCisjOiByZXNpemUvb25saW5lLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHRyeWluZyB0byBhZGQgZ3JvdXAgIyVkIgorbXNnc3RyICJMb3JzIGRlIGxhIHRlbnRhdGl2ZSBkJ2Fqb3V0IGR1IGdyb3VwZSBudW3pcm8gJWQiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlcywgYW5kIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IHN1cHBvcnRlZCBvbiAiCisidGhpcyBzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIGRlICVzIGVzdCBtb2506SBzdXIgJXMsIGV0IGxlIGNoYW5nZW1lbnQgZGUgdGFpbGxlIGVuICIKKyJsaWduZSBuJ2VzdCBwYXMgc3VwcG9ydOkgc3VyIGNlIHN5c3TobWUuXG4iCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5vZGVzICglbGx1KSBtdXN0IGJlIGxlc3MgdGhhbiAldSIKK21zZ3N0ciAibGUgbm9tYnJlIGQnaS1ub2V1ZHMgKCVsbHUpIGRvaXQg6nRyZSBwbHVzIHBldGl0IHF1ZSAldSIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjY5MQorbXNnaWQgInJlc2VydmVkIGJsb2NrcyIKK21zZ3N0ciAiYmxvY3MgculzZXJ26XMiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo5MzYKK21zZ2lkICJtZXRhLWRhdGEgYmxvY2tzIgorbXNnc3RyICJibG9jcyBkZSBt6XRhZG9ubullcyIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjEwMzkgcmVzaXplL3Jlc2l6ZTJmcy5jOjE4MzYKK21zZ2lkICJuZXcgbWV0YSBibG9ja3MiCittc2dzdHIgIm5vdXZlYXV4IGJsb2NzIGRlIG3pdGFkb25u6WVzIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjA1NgorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW4hICBObyBzYiBpbiBsYXN0IHN1cGVyX3NwYXJzZSBiZz9cbiIKK21zZ3N0ciAiIgorIk5lIGRldnJhaXQgamFtYWlzIGFycml2ZXKgISBQYXMgZGUgc2IgZGFucyBsZSBkZXJuaWVyIHN1cGVyX3NwYXJzZSBiZ6A/XG4iCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMDYxCittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbiEgIFVuZXhwZWN0ZWQgb2xkX2Rlc2MgaW4gc3VwZXJfc3BhcnNlIGJnP1xuIgorbXNnc3RyICIiCisiTmUgZGV2cmFpdCBqYW1haXMgYXJyaXZlcqAhIG9sZF9kZXNjIGluYXR0ZW5kdSBkYW5zIHN1cGVyX3NwYXJzZSBiZ6A/XG4iCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMTM5Cittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbjogcmVzaXplIGlub2RlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKyJOZSBkZXZyYWl0IGphbWFpcyBzZSBwcm9kdWlyZaA6IGktbm9ldWQgZGUgcmVkaW1lbnNpb25uZW1lbnQgY29ycm9tcHWgIVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEKKyMsIGZ1enp5Cittc2dpZCAiRVhUMkZTIExpYnJhcnkgdmVyc2lvbiAxLjQyLjEzIgorbXNnc3RyICJMaWJyYWlyaWUgRVhUMkZTIHZlcnNpb24gMS40Mi4xMiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyX2ZpbHN5cyBzdHJ1Y3R1cmUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGEgc3RydWN0dXJlIGV4dDJfZmlsc3lzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19saXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgcG91ciBsYSBzdHJ1Y3R1cmUgYmFkYmxvY2tzX2xpc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSBwb3VyIGxhIHN0cnVjdHVyZSBiYWRibG9ja3NfaXRlcmF0ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9zY2FuIHN0cnVjdHVyZSIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgcG91ciBsYSBzdHJ1Y3R1cmUgaW5vZGVfc2NhbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgcG91ciBsYSBzdHJ1Y3R1cmUgaW9fY2hhbm5lbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB1bml4IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSBwb3VyIGxhIHN0cnVjdHVyZSBpb19jaGFubmVsIHVuaXgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fbWFuYWdlciBzdHJ1Y3R1cmUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGEgc3RydWN0dXJlIGlvX21hbmFnZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmxvY2tfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgcG91ciBsYSBzdHJ1Y3R1cmUgYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGEgc3RydWN0dXJlIGlub2RlX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBnZW5lcmljX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGEgc3RydWN0dXJlIGdlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHRlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGEgc3RydWN0dXJlIGlvX2NoYW5uZWwgZGUgdGVzdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBkaXJlY3RvcnkgYmxvY2sgbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKyJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSBwb3VyIGxhIHN0cnVjdHVyZSBkZSBsaXN0ZSBkZSBibG9jIGRlIHLpcGVydG9pcmUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaWNvdW50IHN0cnVjdHVyZSIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgcG91ciBsYSBzdHJ1Y3R1cmUgaWNvdW50IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIFBvd2VycXVlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGEgc3RydWN0dXJlIFBvd2VycXVlc3QgaW9fY2hhbm5lbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyIGZpbGUgc3RydWN0dXJlIgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSBwb3VyIGxhIHN0cnVjdHVyZSBkZSBmaWNoaWVyIGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgRXh0MiBJbWFnZSBIZWFkZXIiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbCdlbi106nRlIGQnaW1hZ2UgRXh0MiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZSBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgcG91ciBsYSBzdHJ1Y3R1cmUgaW9fY2hhbm5lbCBkJ2ktbm9ldWQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgaGFuZGxlIgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSBwb3VyIGxlIGhhbmRsZSBkJ2V4dGVudCBleHQ0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgbnVtYmVyIGluIHN1cGVyLWJsb2NrIgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSBkYW5zIGxlIHN1cGVyLWJsb2MiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMQorbXNnaWQgIkZpbGVzeXN0ZW0gcmV2aXNpb24gdG9vIGhpZ2giCittc2dzdHIgIlLpdmlzaW9uIGRlIHN5c3TobWUgZGUgZmljaGllciB0cm9wIGdyYW5kZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMyCittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSB0byBmaWxlc3lzdGVtIG9wZW5lZCByZWFkLW9ubHkiCittc2dzdHIgIiIKKyJUZW50YXRpdmUgZCfpY3JpdHVyZSBkYW5zIHVuIHN5c3TobWUgZGUgZmljaGllcnMgb3V2ZXJ0IGVuIGxlY3R1cmUgc2V1bGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMworbXNnaWQgIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIk5lIHBldXQgbGlyZSBsZXMgZGVzY3JpcHRldXJzIGRlIGdyb3VwZXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNAorbXNnaWQgIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICJOZSBwZXV0IOljcmlyZSBsZXMgZGVzY3JpcHRldXJzIGRlIGdyb3VwZXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNQorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBibG9jayBiaXRtYXAiCittc2dzdHIgIkRlc2NyaXB0ZXVyIGRlIGdyb3VwZSBjb3Jyb21wdaA6IGJsb2MgaW52YWxpZGUgcG91ciBsZSBiaXRtYXAgZGUgYmxvY3MiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNgorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKyJEZXNjcmlwdGV1ciBkZSBncm91cGUgY29ycm9tcHWgOiBibG9jIGludmFsaWRlIHBvdXIgbGUgYml0bWFwIGQnaS1ub2V1ZHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNworbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorIkRlc2NyaXB0ZXVyIGRlIGdyb3VwZSBjb3Jyb21wdaA6IGJsb2MgaW52YWxpZGUgcG91ciBsYSB0YWJsZSBkJ2ktbm9ldWRzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzgKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIk5lIHBldXQg6WNyaXJlIHVuIGJpdG1hcCBkJ2ktbm9ldWRzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiTmUgcGV1dCBsaXJlIHVuIGJpdG1hcCBkJ2ktbm9ldWRzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDAKK21zZ2lkICJDYW4ndCB3cml0ZSBhIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiTmUgcGV1dCDpY3JpcmUgdW4gYml0bWFwIGRlIGJsb2NzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDEKK21zZ2lkICJDYW4ndCByZWFkIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICJOZSBwZXV0IGxpcmUgdW4gYml0bWFwIGRlIGJsb2NzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDIKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiTmUgcGV1dCDpY3JpcmUgdW5lIHRhYmxlIGQnaS1ub2V1ZHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MworbXNnaWQgIkNhbid0IHJlYWQgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIk5lIHBldXQgbGlyZSB1bmUgdGFibGUgZCdpLW5vZXVkcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ0Cittc2dpZCAiQ2FuJ3QgcmVhZCBuZXh0IGlub2RlIgorbXNnc3RyICJOZSBwZXV0IGxpcmUgbCdpLW5vZXVkIHN1aXZhbnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuZXhwZWN0ZWQgYmxvY2sgc2l6ZSIKK21zZ3N0ciAiTGUgc3lzdOhtZSBkZSBmaWNoaWVycyBhIHVuZSB0YWlsbGUgZGUgYmxvYyBpbmF0dGVuZHVlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDYKK21zZ2lkICJFWFQyIGRpcmVjdG9yeSBjb3JydXB0ZWQiCittc2dzdHIgIlLpcGVydG9pcmUgRVhUMiBjb3Jyb21wdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ3Cittc2dpZCAiQXR0ZW1wdCB0byByZWFkIGJsb2NrIGZyb20gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCByZWFkIgorbXNnc3RyICIiCisiTGEgdGVudGF0aXZlIGRlIGxlY3R1cmUgZCd1biBibG9jIGRlcHVpcyBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIGEgcHJvZHVpdCAiCisidW5lIGxlY3R1cmUgdHJvbnF16WUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgYmxvY2sgdG8gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCB3cml0ZSIKK21zZ3N0ciAiIgorIkxhIHRlbnRhdGl2ZSBkJ+ljcml0dXJlIGQndW4gYmxvY2sgdmVycyBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIGEgcHJvZHVpdCB1bmUgIgorIuljcml0dXJlIHRyb25xdellIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDkKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIHRoZSBkaXJlY3RvcnkiCittc2dzdHIgIlBhcyBkZSBwbGFjZSBsaWJyZSBkYW5zIGxlIHLpcGVydG9pcmUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MAorbXNnaWQgIklub2RlIGJpdG1hcCBub3QgbG9hZGVkIgorbXNnc3RyICJCaXRtYXAgZCdpLW5vZXVkcyBub24gY2hhcmfpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKK21zZ2lkICJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiQml0bWFwIGRlIGJsb2NzIG5vbiBjaGFyZ+kiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MgorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIgorbXNnc3RyICJOdW3pcm8gZCdpLW5vZXVkIGlsbOlnYWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJOdW3pcm8gZGUgYmxvYyBpbGzpZ2FsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTQKK21zZ2lkICJJbnRlcm5hbCBlcnJvciBpbiBleHQyZnNfZXhwYW5kX2RpciIKK21zZ3N0ciAiRXJyZXVyIGludGVybmUgZGFucyBleHQyZnNfZXhwYW5kX2RpciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU1Cittc2dpZCAiTm90IGVub3VnaCBzcGFjZSB0byBidWlsZCBwcm9wb3NlZCBmaWxlc3lzdGVtIgorbXNnc3RyICJQYXMgYXNzZXogZCdlc3BhY2UgcG91ciBjb25zdHJ1aXJlIGxlIHN5c3TobWUgZGUgZmljaGllcnMgcHJvcG9z6SIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU2Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiTnVt6XJvIGRlIGJsb2NzIGlsbOlnYWwgcGFzc+kg4CBleHQyZnNfbWFya19ibG9ja19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiTnVt6XJvIGRlIGJsb2NzIGlsbOlnYWwgcGFzc+kg4CBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiTnVt6XJvIGRlIGJsb2NzIGlsbOlnYWwgcGFzc+kg4CBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIk51belybyBkZSBibG9jcyBpbGzpZ2FsIHBhc3PpIOAgZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjAKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIk51belybyBkZSBibG9jcyBpbGzpZ2FsIHBhc3PpIOAgZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCittc2dzdHIgIk51belybyBkZSBibG9jcyBpbGzpZ2FsIHBhc3PpIOAgZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjIKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBibG9jayBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIiIKKyJUZW50YXRpdmUgZGUgdHJ1cXVhZ2UgZGUgbGEgZmluIGR1IGJpdG1hcCBkZSBibG9jcyBhdS1kZWzgIGRlIGxhIGZpbiBy6WVsbGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MworbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGlub2RlIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiIgorIlRlbnRhdGl2ZSBkZSB0cnVxdWFnZSBkZSBsYSBmaW4gZHUgYml0bWFwIGQnaS1ub2V1ZHMgYXUtZGVs4CBkZSBsYSBmaW4gcullbGxlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjQKK21zZ2lkICJJbGxlZ2FsIGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICJCbG9jIGluZGlyZWN0IGlsbOlnYWwgcmVw6XLpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKK21zZ2lkICJJbGxlZ2FsIGRvdWJseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiQmxvYyBkb3VibGVtZW50IGluZGlyZWN0IGlsbOlnYWwgcmVw6XLpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjYKK21zZ2lkICJJbGxlZ2FsIHRyaXBseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiQmxvYyB0cmlwbGVtZW50IGluZGlyZWN0IGlsbOlnYWwgcmVw6XLpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjcKK21zZ2lkICJCbG9jayBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIkxlcyBiaXRtYXBzIGRlIGJsb2NzIG5lIHNvbnQgcGFzIGxlcyBt6m1lcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY4Cittc2dpZCAiSW5vZGUgYml0bWFwcyBhcmUgbm90IHRoZSBzYW1lIgorbXNnc3RyICJMZXMgYml0bWFwcyBkJ2ktbm9ldWRzIG5lIHNvbnQgcGFzIGxlcyBt6m1lcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY5Cittc2dpZCAiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiCittc2dzdHIgIk5vbSBkZSBw6XJpcGjpcmlxdWUgaWxs6WdhbCBvdSBtYWwgZm9ybekiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MAorbXNnaWQgIkEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiSWwgbWFucXVlIHVuZSB0YWJsZSBkJ2ktbm9ldWRzIOAgdW4gZ3JvdXBlIGRlIGJsb2NzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzEKK21zZ2lkICJUaGUgZXh0MiBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQiCittc2dzdHIgIkxlIHN1cGVyYmxvYyBleHQyIGVzdCBjb3Jyb21wdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcyCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICJOdW3pcm8gZGUgYml0IGfpbulyaXF1ZSBpbGzpZ2FsIHBhc3PpIOAgZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MworbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICJOdW3pcm8gZGUgYml0IGfpbulyaXF1ZSBpbGzpZ2FsIHBhc3PpIOAgZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc0Cittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICJOdW3pcm8gZGUgYml0IGfpbulyaXF1ZSBpbGzpZ2FsIHBhc3PpIOAgZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NQorbXNnaWQgIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiVHJvcCBkZSBsaWVucyBzeW1ib2xpcXVlcyByZW5jb250culzLiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc2Cittc2dpZCAiVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB0aGlzIGNhc2UiCittc2dzdHIgIkxhIGZvbmN0aW9uIGRlIHJhcHBlbCBuZSB0cmFpdGVyYSBwYXMgY2UgY2FzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzcKK21zZ2lkICJUaGUgaW5vZGUgaXMgZnJvbSBhIGJhZCBibG9jayBpbiB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIkwnaS1ub2V1ZCBwcm92aWVudCBkJ3VuIGJsb2MgZOlmZWN0dWV1eCBkYW5zIGxhIHRhYmxlIGQnaS1ub2V1ZHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OAorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocykiCittc2dzdHIgIkxlIHN5c3TobWUgZGUgZmljaGllcnMgYSB1bmUoZGVzKSBmb25jdGlvbm5hbGl06ShzKSBub24gc3VwcG9ydOllKHMpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzkKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCByZWFkLW9ubHkgZmVhdHVyZShzKSIKK21zZ3N0ciAiIgorIkxlIHN5c3TobWUgZGUgZmljaGllcnMgYSB1bmUoZGVzKSBmb25jdGlvbm5hbGl06ShzKSBlbiBsZWN0dXJlIHNldWxlIG5vbiAiCisic3VwcG9ydOllcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgwCittc2dpZCAiSU8gQ2hhbm5lbCBmYWlsZWQgdG8gc2VlayBvbiByZWFkIG9yIHdyaXRlIgorbXNnc3RyICJMZSBjYW5hbCBkJ0UvUyBuJ2EgcGFzIHB1IHNlIGTpcGxhY2VyIHN1ciB1bmUgbGVjdHVyZSBvdSDpY3JpdHVyZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgxCittc2dpZCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICLJY2hlYyBkJ2FsbG9jYXRpb24gbeltb2lyZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gZXh0MiBsaWJyYXJ5IgorbXNnc3RyICJBcmd1bWVudCBpbnZhbGlkZSBwYXNz6SDgIGxhIGJpYmxpb3Ro6HF1ZSBleHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODMKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgYmxvY2sgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJOJ2EgcHUgYWxsb3VlciBkZSBibG9jIGRhbnMgbGUgc3lzdOhtZSBkZSBmaWNoaWVycyBleHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODQKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgaW5vZGUgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJOJ2EgcHUgYWxsb3VlciBkJ2ktbm9ldWQgZGFucyBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NQorbXNnaWQgIkV4dDIgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICJMJ2ktbm9ldWQgZXh0MiBuJ2VzdCBwYXMgdW4gculwZXJ0b2lyZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg2Cittc2dpZCAiVG9vIG1hbnkgcmVmZXJlbmNlcyBpbiB0YWJsZSIKK21zZ3N0ciAiVHJvcCBkZSBy6WbpcmVuY2VzIGRhbnMgbGEgdGFibGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NworbXNnaWQgIkZpbGUgbm90IGZvdW5kIGJ5IGV4dDJfbG9va3VwIgorbXNnc3RyICJGaWNoaWVyIG5vbiB0cm91dukgcGFyIGV4dDJfbG9va3VwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODgKK21zZ2lkICJGaWxlIG9wZW4gcmVhZC1vbmx5IgorbXNnc3RyICJGaWNoaWVyIG91dmVydCBlbiBsZWN0dXJlIHNldWxlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODkKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCittc2dzdHIgIkJsb2MgZGUgculwZXJ0b2lyZSBkJ2V4dDIgbm9uIHRyb3V26SIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkwCittc2dpZCAiRXh0MiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkxlIHLpcGVydG9pcmUgZXh0MiBleGlzdGUgZOlq4CIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkxCittc2dpZCAiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iCittc2dzdHIgIkZ1bmN0aW9uIGRlIGJpYmxpb3Ro6HF1ZSBleHQyIG5vbiBpbXBs6W1lbnTpZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkyCittc2dpZCAiVXNlciBjYW5jZWwgcmVxdWVzdGVkIgorbXNnc3RyICJSZXF16nRlIGQnYW5udWxhdGlvbiB1dGlsaXNhdGV1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkzCittc2dpZCAiRXh0MiBmaWxlIHRvbyBiaWciCittc2dzdHIgIkZpY2hpZXIgZXh0MiB0cm9wIGdyYW5kIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTQKK21zZ2lkICJTdXBwbGllZCBqb3VybmFsIGRldmljZSBub3QgYSBibG9jayBkZXZpY2UiCittc2dzdHIgIkxlIHDpcmlwaOlyaXF1ZSBkZSBqb3VybmFsIGZvdXJuaSBuJ2VzdCBwYXMgdW4gcOlyaXBo6XJpcXVlIGRlIGJsb2MiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQiCittc2dzdHIgIkxlIHN1cGVyYmxvYyBkZSBqb3VybmFsIG5vbiB0cm91dukiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NgorbXNnaWQgIkpvdXJuYWwgbXVzdCBiZSBhdCBsZWFzdCAxMDI0IGJsb2NrcyIKK21zZ3N0ciAiTGUgam91cm5hbCBkb2l0IGF2b2lyIGF1IG1vaW5zIDEwMjQgYmxvY3MiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NworbXNnaWQgIlVuc3VwcG9ydGVkIGpvdXJuYWwgdmVyc2lvbiIKK21zZ3N0ciAiVmVyc2lvbiBkZSBqb3VybmFsIG5vbiBzdXBwb3J06WUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbCdvdXZlcnR1cmUgZHUgam91cm5hbCBleHRlcm5lIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTkKK21zZ2lkICJKb3VybmFsIG5vdCBmb3VuZCIKK21zZ3N0ciAiSm91cm5hbCBub24gdHJvdXbpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAwCittc2dpZCAiRGlyZWN0b3J5IGhhc2ggdW5zdXBwb3J0ZWQiCittc2dzdHIgIkhhY2hhZ2UgZGUgculwZXJ0b2lyZSBub24gc3VwcG9ydOkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDEKK21zZ2lkICJJbGxlZ2FsIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBudW1iZXIiCittc2dzdHIgIk51belybyBkZSBibG9jIGQnYXR0cmlidXQg6XRlbmR1IGlsbOlnYWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDIKK21zZ2lkICJDYW5ub3QgY3JlYXRlIGZpbGVzeXN0ZW0gd2l0aCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGlub2RlcyIKK21zZ3N0ciAiTmUgcGV1dCBjcullciBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIGF2ZWMgbGUgbm9tYnJlIHJlcXVpcyBkJ2ktbm9ldWRzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAzCittc2dpZCAiRTJpbWFnZSBzbmFwc2hvdCBub3QgaW4gdXNlIgorbXNnc3RyICJMJ2luc3RhbnRhbukgRTJpbWFnZSBuJ2VzdCBwYXMgZW4gY291cnMgZCd1dGlsaXNhdGlvbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNAorbXNnaWQgIlRvbyBtYW55IHJlc2VydmVkIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzIgorbXNnc3RyICJUcm9wIGRlIGJsb2NzIGRlIGRlc2NyaXB0ZXVycyBkZSBncm91cGVzIHLpc2VydulzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA1Cittc2dpZCAiUmVzaXplIGlub2RlIGlzIGNvcnJ1cHQiCittc2dzdHIgIkwnaS1ub2V1ZCBkZSBjaGFuZ2VtZW50IGRlIHRhaWxsZSBlc3QgY29ycm9tcHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDYKK21zZ2lkICJUcmllZCB0byBzZXQgYmxvY2sgYm1hcCB3aXRoIG1pc3NpbmcgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIkEgZXNzYXnpIGRlIGTpZmluaXIgbGUgYml0bWFwIGRlIGJsb2NzIGF2ZWMgdW4gYmxvYyBpbmRpcmVjdCBtYW5xdWFudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNworbXNnaWQgIlREQjogU3VjY2VzcyIKK21zZ3N0ciAiVERCoDogU3VjY+hzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA4Cittc2dpZCAiVERCOiBDb3JydXB0IGRhdGFiYXNlIgorbXNnc3RyICJUREKgOiBCYXNlIGRlIGRvbm7pZXMgY29ycm9tcHVlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA5Cittc2dpZCAiVERCOiBJTyBFcnJvciIKK21zZ3N0ciAiVERCoDogRXJyZXVyIEUvUyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMAorbXNnaWQgIlREQjogTG9ja2luZyBlcnJvciIKK21zZ3N0ciAiVERCoDogRXJyZXVyIGRlIHZlcnJvdWlsbGFnZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMQorbXNnaWQgIlREQjogT3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAiVERCoDogROlwYXNzZW1lbnQgbeltb2lyZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMgorbXNnaWQgIlREQjogUmVjb3JkIGV4aXN0cyIKK21zZ3N0ciAiVERCoDogTCdlbnJlZ2lzdHJlbWVudCBleGlzdGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTMKK21zZ2lkICJUREI6IExvY2sgZXhpc3RzIG9uIG90aGVyIGtleXMiCittc2dzdHIgIlREQqA6IGxlIHZlcnJvdSBleGlzdGUgc3VyIGQnYXV0cmVzIGNs6XMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTQKK21zZ2lkICJUREI6IEludmFsaWQgcGFyYW1ldGVyIgorbXNnc3RyICJUREKgOiBwYXJhbeh0cmUgaW52YWxpZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTUKK21zZ2lkICJUREI6IFJlY29yZCBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiVERCoDogTCdlbnJlZ2lzdHJlbWVudCBuJ2V4aXN0ZSBwYXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTYKK21zZ2lkICJUREI6IFdyaXRlIG5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIlREQqA6IMljcml0dXJlIG5vbiBwZXJtaXNlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE3Cittc2dpZCAiRXh0MmZzIGRpcmVjdG9yeSBibG9jayBsaXN0IGlzIGVtcHR5IgorbXNnc3RyICJMYSBsaXN0ZSBkZSBibG9jcyBkZSBy6XBlcnRvaXJlcyBleHQyZnMgZXN0IHZpZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTgKK21zZ2lkICJBdHRlbXB0IHRvIG1vZGlmeSBhIGJsb2NrIG1hcHBpbmcgdmlhIGEgcmVhZC1vbmx5IGJsb2NrIGl0ZXJhdG9yIgorbXNnc3RyICIiCisiVGVudGF0aXZlIGRlIG1vZGlmaWNhdGlvbiBkJ3VuIHBsYW4gZGUgYmxvY3MgdmlhIHVuIGl06XJhdGV1ciBkZSBibG9jcyBlbiAiCisibGVjdHVyZSBzZXVsZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgc2F2ZWQgcGF0aCIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgcG91ciBsZSBjaGVtaW4gZCdleHRlbnQgZXh0NCBzYXV26SIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGdlbmVyaWMgYml0bWFwIgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSBwb3VyIGxlIGJpdG1hcCBn6W7pcmlxdWUgNjQtYml0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgYmxvY2sgYml0bWFwIgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSBwb3VyIGxlIGJpdG1hcCBkZSBibG9jcyA2NC1iaXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBpbm9kZSBiaXRtYXAiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGUgYml0bWFwIGQnaS1ub2V1ZHMgNjQtYml0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xMyIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgLS0tIFLJU0VSVslfMTMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE0IgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSAtLS0gUslTRVJWyV8xNCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIC0tLSBSyVNFUlbJXzE1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNiIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgLS0tIFLJU0VSVslfMTYiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE3IgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSAtLS0gUslTRVJWyV8xNyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTgiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIC0tLSBSyVNFUlbJXzE4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOSIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgLS0tIFLJU0VSVslfMTkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzAKK21zZ2lkICJDb3JydXB0IGV4dGVudCBoZWFkZXIiCittc2dzdHIgIkVuLXTqdGUgZCdleHRlbnQgY29ycm9tcHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzEKK21zZ2lkICJDb3JydXB0IGV4dGVudCBpbmRleCIKK21zZ3N0ciAiSW5kZXggZCdleHRlbnQgY29ycm9tcHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzIKK21zZ2lkICJDb3JydXB0IGV4dGVudCIKK21zZ3N0ciAiRXh0ZW50IGNvcnJvbXB1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMzCittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiBleHRlbnQgbWFwIgorbXNnc3RyICJQYXMgZGUgcGxhY2UgbGlicmUgZGFucyBsYSBjYXJ0ZSBkJ2V4dGVudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNAorbXNnaWQgIklub2RlIGRvZXMgbm90IHVzZSBleHRlbnRzIgorbXNnc3RyICJMJ2ktbm9ldWQgbid1dGlsaXNlIHBhcyBkJ2V4dGVudHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzUKK21zZ2lkICJObyAnbmV4dCcgZXh0ZW50IgorbXNnc3RyICJQYXMgZCdleHRlbnQgJ25leHQnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM2Cittc2dpZCAiTm8gJ3ByZXZpb3VzJyBleHRlbnQiCittc2dzdHIgIlBhcyBkJ2V4dGVudCAncHJldmlvdXMnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM3Cittc2dpZCAiTm8gJ3VwJyBleHRlbnQiCittc2dzdHIgIlBhcyBkJ2V4dGVudCAndXAnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAiUGFzIGQnZXh0ZW50ICdkb3duJyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOQorbXNnaWQgIk5vIGN1cnJlbnQgbm9kZSIKK21zZ3N0ciAiUGFzIGRlIG5vZXVkIGNvdXJhbnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDAKK21zZ2lkICJFeHQyZnMgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIk9w6XJhdGlvbiBleHQyZnMgbm9uIHN1cHBvcnTpZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICJQYXMgZGUgcGxhY2UgcG91ciBpbnPpcmVyIGwnZXh0ZW50IGRhbnMgbGUgbm9ldWQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDIKK21zZ2lkICJTcGxpdHRpbmcgd291bGQgcmVzdWx0IGluIGVtcHR5IG5vZGUiCittc2dzdHIgIkTpY291cGVyIHByb2R1aXJhaXQgdW4gbm9ldWQgdmlkZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MworbXNnaWQgIkV4dGVudCBub3QgZm91bmQiCittc2dzdHIgIkV4dGVudCBub24gdHJvdXbpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIk9w6XJhdGlvbiBub24gc3VwcG9ydOllIHBvdXIgbGVzIGktbm9ldWRzIGNvbnRlbmFudCBkZXMgZXh0ZW50cyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiTGEgbG9uZ3VldXIgZCdleHRlbnQgZXN0IGludmFsaWRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ2Cittc2dpZCAiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIKK21zZ3N0ciAiTGUgY2FuYWwgZCdFL1MgbmUgc3VwcG9ydGUgcGFzIGxlcyBudW3pcm9zIGRlIGJsb2MgNjQtYml0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiIgorIk5lIHBldXQgcGFzIHbpcmlmaWVyIHNpIGxlIHN5c3TobWUgZGUgZmljaGllcnMgZXN0IG1vbnTpIOAgY2F1c2UgZHUgbWFucXVlICIKKyJkZSBmaWNoaWVyIG10YWIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDgKK21zZ2lkICJGaWxlc3lzdGVtIHRvbyBsYXJnZSB0byB1c2UgbGVnYWN5IGJpdG1hcHMiCittc2dzdHIgIiIKKyJMZSBzeXN06G1lIGRlIGZpY2hpZXIgZXN0IHRyb3AgZ3JhbmQgcG91ciB1dGlsaXNlciBsJ2FuY2llbiBzdHlsZSBkZSBiaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDkKK21zZ2lkICJNTVA6IGludmFsaWQgbWFnaWMgbnVtYmVyIgorbXNnc3RyICJNTVCgOiBudW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MAorbXNnaWQgIk1NUDogZGV2aWNlIGN1cnJlbnRseSBhY3RpdmUiCittc2dzdHIgIk1NUKA6IHDpcmlwaOlyaXF1ZSBhY3R1ZWxsZW1lbnQgYWN0aWYiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICJNTVCgOiBmc2NrIGVuIGNvdXJzIGQnZXjpY3V0aW9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUyCittc2dpZCAiTU1QOiBibG9jayBudW1iZXIgYmV5b25kIGZpbGVzeXN0ZW0gcmFuZ2UiCittc2dzdHIgIk1NUKA6IG51belybyBkZSBibG9jIGVuLWRlaG9ycyBkZSBsYSBwb3J06WUgZHUgc3lzdOhtZSBkZSBmaWNoaWVycyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MworbXNnaWQgIk1NUDogdW5kZXJnb2luZyBhbiB1bmtub3duIG9wZXJhdGlvbiIKK21zZ3N0ciAiTU1QoDogZW4gY291cnMgZCdvcOlyYXRpb24gaW5jb25udWUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTQKK21zZ2lkICJNTVA6IGZpbGVzeXN0ZW0gc3RpbGwgaW4gdXNlIgorbXNnc3RyICJNTVCgOiBzeXN06G1lIGRlIGZpY2hpZXJzIGVuIGNvdXJzIGQndXRpbGlzYXRpb24iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTUKK21zZ2lkICJNTVA6IG9wZW4gd2l0aCBPX0RJUkVDVCBmYWlsZWQiCittc2dzdHIgIk1NUKA6IGwnb3V2ZXJ0dXJlIGF2ZWMgT19ESVJFQ1QgYSDpY2hvdekiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTYKK21zZ2lkICJCbG9jayBncm91cCBkZXNjcmlwdG9yIHNpemUgaW5jb3JyZWN0IgorbXNnc3RyICJUYWlsbGUgZHUgZGVzY3JpcHRldXIgZGUgZ3JvdXBlIGRlIGJsb2NzIGluY29ycmVjdGUuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU3Cittc2dpZCAiSW5vZGUgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggaW5vZGUiCittc2dzdHIgIkxhIHNvbW1lIGRlIGNvbnRy9GxlIGRlIGwnaS1ub2V1ZCBuZSBjb3JyZXNwb25kIHBhcyDgIGwnaS1ub2V1ZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OAorbXNnaWQgIklub2RlIGJpdG1hcCBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBiaXRtYXAiCittc2dzdHIgIkxhIHNvbW1lIGRlIGNvbnRy9GxlIGR1IGJpdG1hcCBkJ2ktbm9ldWQgbmUgY29ycmVzcG9uZCBwYXMgYXUgYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU5Cittc2dpZCAiRXh0ZW50IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGV4dGVudCBibG9jayIKK21zZ3N0ciAiIgorIkxhIHNvbW1lIGRlIGNvbnRy9GxlIGR1IGJsb2NrIGQnZXh0ZW50IG5lIGNvcnJlc3BvbmQgcGFzIGF1IGJsb2MgZCdleHRlbnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjAKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgZG9lcyBub3QgaGF2ZSBzcGFjZSBmb3IgY2hlY2tzdW0iCittc2dzdHIgIkxlIGJsb2MgZGUgculwZXJ0b2lyZSBuJ2EgcGFzIGRlIHBsYWNlIHBvdXIgbGEgc29tbWUgZGUgY29udHL0bGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjEKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICIiCisiTGEgc29tbWUgZGUgY29udHL0bGUgZHUgYmxvYyBkZSBy6XBlcnRvaXJlIG5lIGNvcnJlc3BvbmQgcGFzIGF1IGJsb2MgZGUgIgorInLpcGVydG9pcmUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjIKK21zZ2lkICJFeHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYmxvY2siCittc2dzdHIgIiIKKyJMYSBzb21tZSBkZSBjb250cvRsZSBkdSBibG9jIGQnYXR0cmlidXQg6XRlbmR1IG5lIGNvcnJlc3BvbmQgcGFzIGF1IGJsb2MiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjMKK21zZ2lkICJTdXBlcmJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIHN1cGVyYmxvY2siCittc2dzdHIgIkxhIHNvbW1lIGRlIGNvbnRy9GxlIGR1IHN1cGVyYmxvYyBuZSBjb3JyZXNwb25kIHBhcyBhdSBzdXBlcmJsb2MiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjQKK21zZ2lkICJVbmtub3duIGNoZWNrc3VtIGFsZ29yaXRobSIKK21zZ3N0ciAiQWxnb3JpdGhtZSBkZSBzb21tZSBkZSBjb250cvRsZSBpbmNvbm51IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY1Cittc2dpZCAiTU1QIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIE1NUCBibG9jayIKK21zZ3N0ciAiTGEgc29tbWUgZGUgY29udHL0bGUgZHUgYmxvYyBNTVAgbmUgY29ycmVzcG9uZCBwYXMgYXUgYmxvYyBNTVAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjYKK21zZ2lkICJFeHQyIGZpbGUgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkxlIGZpY2hpZXIgZXh0MiBleGlzdGUgZOlq4CIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTEKK21zZ2lkICJQcm9maWxlIHZlcnNpb24gMC4wIgorbXNnc3RyICJQcm9maWxhZ2UgdmVyc2lvbiAwLjAiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEyCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfbm9kZSIKK21zZ3N0ciAiVmFsZXVyIG1hZ2lxdWUgaW52YWxpZGUgZGFucyBwcm9maWxlX25vZGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEzCittc2dpZCAiUHJvZmlsZSBzZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiU2VjdGlvbiBkZSBwcm9maWxhZ2Ugbm9uIHRyb3V26WUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE0Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgIlJlbGF0aW9uIGRlIHByb2ZpbGFnZSBub24gdHJvdXbpZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTUKK21zZ2lkICJBdHRlbXB0IHRvIGFkZCBhIHJlbGF0aW9uIHRvIG5vZGUgd2hpY2ggaXMgbm90IGEgc2VjdGlvbiIKK21zZ3N0ciAiVGVudGF0aXZlIGQnYWpvdXQgZCd1bmUgcmVsYXRpb24g4CB1biBub2V1ZCBxdWkgbidlc3QgcGFzIHVuZSBzZWN0aW9uIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNgorbXNnaWQgIkEgcHJvZmlsZSBzZWN0aW9uIGhlYWRlciBoYXMgYSBub24temVybyB2YWx1ZSIKK21zZ3N0ciAiVW4gZW4tdOp0ZSBkZSBzZWN0aW9uIGRlIHByb2ZpbGFnZSBhIHVuIHZhbGV1ciBub24gbnVsbGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE3Cittc2dpZCAiQmFkIGxpbmtlZCBsaXN0IGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiTGlzdGUgY2hh7m7pZSBpbnZhbGlkZSBkYW5zIGxlcyBzdHJ1Y3R1cmVzIGRlIHByb2ZpbGFnZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTgKK21zZ2lkICJCYWQgZ3JvdXAgbGV2ZWwgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICJOaXZlYXUgZGUgZ3JvdXBlIGludmFsaWRlIGRhbnMgbGVzIHN0cnVjdHVyZXMgZGUgcHJvZmlsYWdlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOQorbXNnaWQgIkJhZCBwYXJlbnQgcG9pbnRlciBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIlBvaW50ZXVyIHBhcmVudCBpbnZhbGlkZSBkYW5zIGxlcyBzdHJ1Y3R1cmVzIGRlIHByb2ZpbGFnZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZSBpdGVyYXRvciIKK21zZ3N0ciAiVmFsZXVyIG1hZ2lxdWUgaW52YWxpZGUgZGFucyBsJ2l0ZXJhdGV1ciBkZSBwcm9maWxhZ2UiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIxCittc2dpZCAiQ2FuJ3Qgc2V0IHZhbHVlIG9uIHNlY3Rpb24gbm9kZSIKK21zZ3N0ciAiTmUgcGV1dCBk6WZpbmlyZSBsYSB2YWxldXIgc3VyIHVuIG5vZXVkIGRlIHNlY3Rpb24iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gcHJvZmlsZSBsaWJyYXJ5IgorbXNnc3RyICJBcmd1bWVudCBpbnZhbGlkZSBwYXNz6SDgIGxhIGJpYmxpb3Ro6HF1ZSBkZSBwcm9maWxhZ2UiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIlRlbnRhdGl2ZSBkZSBtb2RpZmllciB1biBwcm9maWxhZ2UgZW4gbGVjdHVyZSBzZXVsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIkwnZW4tdOp0ZSBkZSBzZWN0aW9uIGRlIHByb2ZpbGFnZSBuJ2VzdCBwYXMgbml2ZWF1IHNvbW1ldCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjUKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSBzZWN0aW9uIGhlYWRlciIKK21zZ3N0ciAiRXJyZXVyIGRlIHN5bnRheGUgZGFucyBsJ2VuLXTqdGUgZGUgc2VjdGlvbiBkZSBwcm9maWxhZ2UiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI2Cittc2dpZCAiU3ludGF4IGVycm9yIGluIHByb2ZpbGUgcmVsYXRpb24iCittc2dzdHIgIkVycmV1ciBkZSBzeW50YXhlIGRhbnMgbGEgcmVsYXRpb24gZGUgcHJvZmlsYWdlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNworbXNnaWQgIkV4dHJhIGNsb3NpbmcgYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiQWNjb2xhZGUgZmVybWFudGUgc3VwZXJmbHVlIGRhbnMgbGUgcHJvZmlsYWdlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyOAorbXNnaWQgIk1pc3Npbmcgb3BlbiBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICJBY2NvbGFkZSBvdXZyYW50ZSBtYW5xdWFudGUgZGFucyBsZSBwcm9maWxhZ2UiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI5Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfdCIKK21zZ3N0ciAiVmFsZXVyIG1hZ2lxdWUgaW52YWxpZGUgZGFucyBwcm9maWxlX3QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfc2VjdGlvbl90IgorbXNnc3RyICJWYWxldXIgbWFnaXF1ZSBpbnZhbGlkZSBkYW5zIHByb2ZpbGVfc2VjdGlvbl90IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMQorbXNnaWQgIkl0ZXJhdGlvbiB0aHJvdWdoIGFsbCB0b3AgbGV2ZWwgc2VjdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJJdOlyYXRpb24gc3VyIHRvdXRlcyBsZXMgc2VjdGlvbnMgZGUgbml2ZWF1IHNvbW1ldCBub24gc3VwcG9ydOllIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMgorbXNnaWQgIkludmFsaWQgcHJvZmlsZV9zZWN0aW9uIG9iamVjdCIKK21zZ3N0ciAiT2JqZWN0IHByb2ZpbGVfc2VjdGlvbiBpbnZhbGlkZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzMKK21zZ2lkICJObyBtb3JlIHNlY3Rpb25zIgorbXNnc3RyICJQbHVzIGRlIHNlY3Rpb25zIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNAorbXNnaWQgIkJhZCBuYW1lc2V0IHBhc3NlZCB0byBxdWVyeSByb3V0aW5lIgorbXNnc3RyICJFbnNlbWJsZSBkZSBub20gaW52YWxpZGUgcGFzc+kg4CBsYSByb3V0aW5lIGRlIHJlcXXqdGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIlBhcyBkZSBmaWNoaWVyIGRlIHByb2ZpbGFnZSBvdXZlcnQiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM2Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV90IgorbXNnc3RyICJWYWxldXIgbWFnaXF1ZSBpbnZhbGlkZSBkYW5zIHByb2ZpbGVfZmlsZV90IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNworbXNnaWQgIkNvdWxkbid0IG9wZW4gcHJvZmlsZSBmaWxlIgorbXNnc3RyICJOJ2EgcHUgb3V2cmlyIGxlIGZpY2hpZXIgZGUgcHJvZmlsYWdlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOAorbXNnaWQgIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkxhIHNlY3Rpb24gZXhpc3RlIGTpauAiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM5Cittc2dpZCAiSW52YWxpZCBib29sZWFuIHZhbHVlIgorbXNnc3RyICJWYWxldXIgYm9vbOllbm5lIGludmFsaWRlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzo0MAorbXNnaWQgIkludmFsaWQgaW50ZWdlciB2YWx1ZSIKK21zZ3N0ciAiVmFsZXVyIGVudGnocmUgaW52YWxpZGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQxCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCittc2dzdHIgIlZhbGV1ciBtYWdpcXVlIGludmFsaWRlIGRhbnMgcHJvZmlsZV9maWxlX2RhdGFfdCIKKworI34gbXNnaWQgIiIKKyN+ICJcYlxiXGJcYlxiXGJcYlxiQ29waWVkICVsbHUgLyAlbGx1IGJsb2NrcyAoJWxsdSUlKSBpbiAlcyBhdCAlLjJmIE1CLyIKKyN+ICJzICAgICAgIFxuIgorI34gbXNnc3RyICIiCisjfiAiXGJcYlxiXGJcYlxiXGJcYkNvcGnpICVsbHUgLyAlbGx1IGJsb2NzICglbGx1JSUpIGVuICVzIOAgJS4yZiBNby8iCisjfiAicyAgICAgICBcbiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJXYXJuaW5nOiB0aGUgcXVvdGEgZmVhdHVyZSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuIgorI34gIlNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9RdW90YSBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiQXZlcnRpc3NlbWVudKA6IGxhIGZvbmN0aW9uYWxpdOkgcXVvdGEgZXN0IGVuY29yZSBlbiBjb3VycyBkZSAiCisjfiAiZOl2ZWxvcHBlbWVudFxuIgorI34gIlZvaXIgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvUXVvdGEgcG91ciBwbHVzICIKKyN+ICJkJ2luZm9ybWF0aW9uc1xuIgorI34gIlxuIgorCisjfiBtc2dpZCAiQ291bGQgbm90IHN0YXQgJXMgLS0tICVzXG4iCisjfiBtc2dzdHIgIk5lIHBldXQg6XZhbHVlciBwYXIgc3RhdCgpICVzIC0tLSAlc1xuIgorCisjfiBtc2dpZCAiQ2xlYXJpbmcgZXh0ZW50IGZsYWcgbm90IHN1cHBvcnRlZCBvbiAlcyIKKyN+IG1zZ3N0ciAiTGEgc3VwcHJlc3Npb24gZHUgZHJhcGVhdSBleHRlbnQgbidlc3QgcGFzIHN1cHBvcnTpZSBzdXIgJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiJXM6IFRoZSBjb21iaW5hdGlvbiBvZiBmbGV4X2JnIGFuZFxuIgorI34gIlx0IXJlc2l6ZV9pbm9kZSBmZWF0dXJlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHJlc2l6ZTJmcy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIiVzoDogTGEgY29tYmluYWlzb24gZGVzIGZvbmN0aW9ubmFsaXTpc1xuIgorI34gIlx0ZmxleF9iZyBldCAhcmVzaXplX2lub2RlIG4nZXN0IHBhcyBzdXBwb3J06WUgcGFyIHJlc2l6ZTJmcy5cbiIKKworI34gbXNnaWQgIkBnICVnIEBiIEBCIHVuaW5pdGlhbGl6ZWQgYnV0IEBpIEBCIGluIHVzZS5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkxlIEBCIGRlIEBiIGR1IEBnICVnIG4nZXN0IHBhcyBpbml0aWFsaXPpXG4iCisjfiAiYWxvcnMgcXVlIGxlIEBCIGQnQGkgZXN0IGVuIGNvdXJzIGQndXRpbGlzYXRpb24uXG4iCisKKyN+IG1zZ2lkICJAaSAlaSBzaG91bGQgbm90IGhhdmUgRU9GQkxPQ0tTX0ZMIHNldCAoc2l6ZSAlSXMsIGxibGsgJXIpXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJMJ0BpICVpIG5lIGRldnJhaXQgcGFzIGF2b2lyIEVPRkJMT0NLU19GTCBk6WZpbmkgKHRhaWxsZSAlSXMsIGxibGsgJXIpXG4iCisKKyN+IG1zZ2lkICJDb3VsZG4ndCBkZXRlcm1pbmUgam91cm5hbCBzaXplIgorI34gbXNnc3RyICJOJ2EgcHUgZOl0ZXJtaW5lciBsYSB0YWlsbGUgZHUgam91cm5hbCIKKworI34gbXNnaWQgIiNcdFx0ICVsbHUgLT4gJWxsdSAoJWxsdSlcbiIKKyN+IG1zZ3N0ciAiI1x0XHQgJWxsdSAtPiAlbGx1ICglbGx1KVxuIgorCisjfiBtc2dpZCAiTWlzc2luZyBpbmRpcmVjdCBibG9jayBub3QgcHJlc2VudCIKKyN+IG1zZ3N0ciAiQmxvYyBpbmRpcmVjdCBtYW5xdWFudCIKKworI34gbXNnaWQgIjxUaGUgQUNMIGluZGV4IGlub2RlPiIKKyN+IG1zZ3N0ciAiPEwnaS1ub2V1ZCBkJ2luZGV4IEFDTD4iCisKKyN+IG1zZ2lkICI8VGhlIEFDTCBkYXRhIGlub2RlPiIKKyN+IG1zZ3N0ciAiPEwnaS1ub2V1ZCBkZXMgZG9ubullcyBBQ0w+IgorCisjfiBtc2dpZCAic2hvcnQgd3JpdGUgKG9ubHkgJWQgYnl0ZXMpIGZvciB3cml0aW5nIGltYWdlIGhlYWRlciIKKyN+IG1zZ3N0ciAiIgorI34gIuljcml0dXJlIOljb3VydOllIChzZXVsZW1lbnQgJWQgb2N0ZXRzKSBwb3VyIGwn6WNyaXR1cmUgZGUgbCdlbi106nRlIGltYWdlIgorCisjfiBtc2dpZCAiaW52YWxpZCBmcmFnbWVudCBzaXplIC0gJXMiCisjfiBtc2dzdHIgInRhaWxsZSBkZSBmcmFnbWVudCBpbnZhbGlkZSAtICVzIgorCisjfiBtc2dpZCAiV2FybmluZzogZnJhZ21lbnRzIG5vdCBzdXBwb3J0ZWQuICBJZ25vcmluZyAtZiBvcHRpb25cbiIKKyN+IG1zZ3N0ciAiQXZlcnRpc3NlbWVudKA6IGZyYWdtZW50cyBub24gc3VwcG9ydOlzLiBMJ29wdGlvbiAtZiBlc3QgaWdub3LpZVxuIgorCisjfiBtc2dpZCAiQ2FsbGluZyBCTEtESVNDQVJEIGZyb20gJWxsdSB0byAlbGx1ICIKKyN+IG1zZ3N0ciAiQXBwZWwgZGUgQkxLRElTQ0FSRCBkZSAlbGx1IOAgJWxsdSAiCisKKyN+IG1zZ2lkICJzdWNjZWVkZWQuXG4iCisjfiBtc2dzdHIgImF2ZWMgc3VjY+hzLlxuIgorCisjfiBtc2dpZCAiSm91cm5hbCBOT1QgcmVtb3ZlZFxuIgorI34gbXNnc3RyICJMZSBqb3VybmFsIE4nQSBQQVMg6XTpIGVubGV26VxuIgorCisjfiBtc2dpZCAiQFMgZG9lc24ndCBoYXZlIGhhc19AaiBmbGFnLCBidXQgaGFzIGV4dDMgQGogJXMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJMZSBAUyBuZSBzZW1ibGUgcGFzIGF2b2lyIGxlIGRyYXBlYXUgaGFzX2pvdXJuYWwsIG1haXMgYSB1biAlcyBkZSBAaiAiCisjfiAiZXh0My5cbiIKKworI34gbXNnaWQgIlJlY3JlYXRlIGpvdXJuYWwgdG8gbWFrZSB0aGUgZmlsZXN5c3RlbSBleHQzIGFnYWluP1xuIgorI34gbXNnc3RyICIiCisjfiAiUmVjcullciBsZSBqb3VybmFsIHBvdXIgcmVuZHJlIGxlIHN5c3TobWUgZGUgZmljaGllcnMgZXh0MyBkZSBub3V2ZWF1oD9cbiIKKworI34gbXNnaWQgImJhZCBibG9jayBzaXplIC0gJXMiCisjfiBtc2dzdHIgInRhaWxsZSBkZXMgYmxvY3MgZOlmZWN0dWV1eCAtICVzIgorCisjfiBtc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gd3JpdGUgYmxvY2sgYml0bWFwcyBmb3IgJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJsb3JzIGQndW5lIG5vdXZlbGxlIHRlbnRhdGl2ZSBkJ+ljcml0dXJlIGRlcyBiaXRtYXBzIGRlIGJsb2NzIHBvdXIgJXMiCisKKyN+IG1zZ2lkICIlcyBmYWlsZWQgZm9yICVzOiAlc1xuIgorI34gbXNnc3RyICIlcyBhIOljaG916SBwb3VyICVzoDogJXNcbiIKKworI34gbXNnaWQgIm9wZW4iCisjfiBtc2dzdHIgIm9wZW4iCisKKyN+IG1zZ2lkICJIRElPX0dFVEdFTyBpb2N0bCIKKyN+IG1zZ3N0ciAiSERJT19HRVRHRU8gaW9jdGwiCisKKyN+IG1zZ2lkICJCTEtHRVRTSVpFIGlvY3RsIgorI34gbXNnc3RyICJCTEtHRVRTSVpFIGlvY3RsIgorCisjfiBtc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCisjfiBtc2dzdHIgImwnQGEgZGFucyBsJ0BpICVpIGEgdW4gaGFzaCAoJU4pIHF1aSBlc3QgQG4gKGRvaXQg6nRyZSAwKVxuIgorCisjfiBtc2dpZCAid2hpbGUgY2FsbGluZyBpdGVyYXRvciBmdW5jdGlvbiIKKyN+IG1zZ3N0ciAibG9ycyBkZSBsJ2FwcGVsIGRlIGxhIGZvbmN0aW9uIGl06XJhdGlvbiIKKworI34gbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgaW5vZGUgYnVmZmVyIgorI34gbXNnc3RyICJsb3JzIGRlIGwnYWxsb2NhdGlvbiBkJ3VuIHRhbXBvbiBkJ2ktbm9ldWQiCisKKyN+IG1zZ2lkICJ3aGlsZSByZWFkaW5nIGlub2RlIHRhYmxlIChncm91cCAlZCkiCisjfiBtc2dzdHIgImxvcnMgZGUgbGEgbGVjdHVyZSBkZSBsYSB0YWJsZSBkJ2ktbm9ldWRzIChncm91cGUgJWQpIgorCisjfiBtc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSB0YWJsZSAoZ3JvdXAgJWQpIgorI34gbXNnc3RyICJsb3JzIGRlIGwn6WNyaXR1cmUgZGUgbGEgdGFibGUgZCdpLW5vZXVkcyAoZ3JvdXBlICVkKSIKKworI34gbXNnaWQgIlBhc3MgMDogRG9pbmcgYnl0ZS1zd2FwIG9mIGZpbGVzeXN0ZW1cbiIKKyN+IG1zZ3N0ciAiIgorI34gIlBhc3NlIDCgOiB0cmFpdGVtZW50IGRlIGwn6WNoYW5nZSBvY3RldCBwYXIgb2N0ZXQgZHUgc3lzdOhtZSBkZSBmaWNoaWVyc1xuIgorCisjfiBtc2dpZCAiIgorI34gIiVzOiB0aGUgZmlsZXN5c3RlbSBtdXN0IGJlIGZyZXNobHkgY2hlY2tlZCB1c2luZyBmc2NrXG4iCisjfiAiYW5kIG5vdCBtb3VudGVkIGJlZm9yZSB0cnlpbmcgdG8gYnl0ZS1zd2FwIGl0LlxuIgorI34gbXNnc3RyICIiCisjfiAiJXOgOiBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIGRvaXQgYXZvaXIg6XTpIHLpY2VtbWVudCB26XJpZmnpIGVuICIKKyN+ICJ1dGlsaXNhbnRcbiIKKyN+ICJmc2NrIGV0IG5lIGRvaXQgcGFzIGF2b2lyIOl06SBtb2506SBhdmFudCBkJ2Vzc2F5ZXIgdW4g6WNoYW5nZSBwYXIgb2N0ZXQgIgorI34gImRlXG4iCisjfiAiY2VsdWktY2kuXG4iCisKKyN+IG1zZ2lkICJCeXRlIHN3YXAiCisjfiBtc2dzdHIgIsljaGFuZ2UgZCdvY3RldHMiCisKKyN+IG1zZ2lkICJCeXRlLXN3YXBwaW5nIGZpbGVzeXN0ZW1zIG5vdCBjb21waWxlZCBpbiB0aGlzIHZlcnNpb24gb2YgZTJmc2NrXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJMZXMgc3lzdOhtZXMgZGUgZmljaGllcnMgYXZlYyDpY2hhbmdlIGQnb2N0ZXRzIG5lIHNvbnQgcGFzIGNvbXBpbOlzIHBvdXJcbiIKKyN+ICJjZXR0ZSB2ZXJzaW9uIGQnZTJmc2NrXG4iCisKKyN+IG1zZ2lkICJJbmNvbXBhdGlibGUgb3B0aW9ucyBub3QgYWxsb3dlZCB3aGVuIGJ5dGUtc3dhcHBpbmcuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJMZXMgb3B0aW9ucyBpbmNvbXBhdGlibGVzIG5lIHNvbnQgcGFzIGF1dG9yaXPpZXMgbG9ycyBkZSBsJ+ljaGFuZ2VzICIKKyN+ICJkJ29jdGV0cy5cbiIKKworI34gbXNnaWQgIiVzOiBGaWxlc3lzdGVtIGJ5dGUgb3JkZXIgYWxyZWFkeSBub3JtYWxpemVkLlxuIgorI34gbXNnc3RyICIiCisjfiAiJXOgOiBsJ29yZHJlIGRlcyBvY3RldHMgZHUgc3lzdOhtZSBkZSBmaWNoaWVycyBhIGTpauAg6XTpIG5vcm1hbGlz6S5cbiIKKworI34gbXNnaWQgImludmFsaWQgc3RhcnRpbmcgYmxvY2sgLSAlcyIKKyN+IG1zZ3N0ciAiYmxvYyBkZSBk6XBhcnQgaW52YWxpZGUgLSAlcyIKKworI34gbXNnaWQgIk5vdGU6IFRoaXMgaXMgYSBieXRlLXN3YXBwZWQgZmlsZXN5c3RlbVxuIgorI34gbXNnc3RyICJOb3RloDogY2Ugc3lzdOhtZSBkZSBmaWNoaWVycyBlc3Qg4CDpY2hhbmdlIGQnb2N0ZXRzXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiRmlsZXN5c3RlbSB0b28gbGFyZ2UuICBObyBtb3JlIHRoYW4gMioqMzEtMSBibG9ja3NcbiIKKyN+ICJcdCAoOFRCIHVzaW5nIGEgYmxvY2tzaXplIG9mIDRrKSBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJTeXN06G1lIGRlIGZpY2hpZXJzIHRyb3AgZ3JhbmQuIFBhcyBwbHVzIGRlIDJeMzEtMSBibG9jcyAoOFRPIHBvdXJcbiIKKyN+ICJcdCB1bmUgdGFpbGxlIGRlIGJsb2NzIGRlIDRLKSBuZSBzb250IGFjdHVlbGxlbWVudCBzdXBwb3J06XMuIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIldhcm5pbmc6IHNvbWUgMi40IGtlcm5lbHMgZG8gbm90IHN1cHBvcnQgYmxvY2tzaXplcyBncmVhdGVyIHRoYW4gNDA5NlxuIgorI34gIlx0dXNpbmcgZXh0My4gIFVzZSAtYiA0MDk2IGlmIHRoaXMgaXMgYW4gaXNzdWUgZm9yIHlvdS5cbiIKKyN+ICJcbiIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIkF2ZXJ0aXNzZW1lbnSgOiBjZXJ0YWlucyBub3lhdXggMi40IG5lIHRvbOhyZW50IHBhcyBsZXMgdGFpbGxlcyBkZSBibG9jc1xuIgorI34gIlx0c3Vw6XJpZXVyZXMg4CA0MDk2IGF2ZWMgZXh0My4gVXRpbGlzZXogLWIgNDA5NiBzaSBjZWxhIHZvdXNcbiIKKyN+ICJcdHBvc2UgcHJvYmzobWUuXG4iCisjfiAiXG4iCisKKyN+IG1zZ2lkICJXYXJuaW5nOiAlZC1ieXRlIGlub2RlcyBub3QgdXNhYmxlIG9uIG9sZGVyIHN5c3RlbXNcbiIKKyN+IG1zZ3N0ciAiIgorI34gIkF2ZXJ0aXNzZW1lbnSgOiBsZXMgaS1ub2V1ZHMgZGUgJWQgb2N0ZXRzIG5lIHNvbnQgcGFzIHV0aWxpc2FibGVzIHN1ciAiCisjfiAibGVzXG4iCisjfiAiYW5jaWVucyBzeXN06G1lc1xuIgorCisjfiBtc2dpZCAiaW52YWxpZCBibG9ja3MgcmFuZ2U6ICVsdS0lbHUiCisjfiBtc2dzdHIgIul0ZW5kdWUgaW52YWxpZGUgZGVzIGJsb2NzoDogJWx1LSAlbHUiCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgc3BhcnNlIHN1cGVyYmxvY2tzIGRpc2FibGVkLlxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiTGVzIHN1cGVyYmxvY3MgY3JldXggc29udCBk6WrgIGTpc2FjdGl26XMgc3VyIGxlIHN5c3TobWUgZGUgZmljaGllcnMuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBjbGVhcmVkLiAgJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJEcmFwZWF1IGRlIHN1cGVyYmxvYyBjcmV1eCBk6XNhY3RpdukuICVzIgorCisjfiBtc2dpZCAiQ2xvbmUgZHVwbGljYXRlL2JhZCBibG9ja3MiCisjfiBtc2dzdHIgIkNsb25lciBsZXMgYmxvY3MgZHVwbGljYXRhcy9k6WZlY3R1ZXV4IgorCisjfiBtc2dpZCAiRXJyb3IgYWxsb2NhdGluZyBAYSBAYiAlYi4gICIKKyN+IG1zZ3N0ciAiRVJSRVVSIGQnYWxsb2NhdGlvbiBkJ3VuIEBiICViIGQnQGEuICIKKworI34gbXNnaWQgIiIKKyN+ICJEdXBsaWNhdGUgQGJzIGZvdW5kLi4uIGludm9raW5nIGR1cGxpY2F0ZSBAYiBwYXNzZXMuXG4iCisjfiAiUGFzcyAxQjogUmVzY2FuIGZvciBkdXBsaWNhdGUvYmFkIEBic1xuIgorI34gbXNnc3RyICIiCisjfiAiQGJzIGR1cGxpY2F0YXMgcmVw6XLpcy4uLiBpbnZvY2F0aW9uIGRlIGxhIHBhc3NlIGRlcyBAYnMgZHVwbGljYXRhcy5cbiIKKyN+ICJQYXNzZSAxQjogbm91dmVsbGUgc2NydXRhdGlvbiBwb3VyIGxlcyBAYnMgZHVwbGljYXRhcy9lcnJvbulzXG4iCisKKyN+IG1zZ2lkICJEdXBsaWNhdGUvYmFkIEBiKHMpIGluIEBpICVpOiIKKyN+IG1zZ3N0ciAiQGIocykgZHVwbGljYXRhcy9lcnJvbulzIGRhbnMgbCdAaSAlaaA6IgorCisjfiBtc2dpZCAiIgorI34gIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorI34gImlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uICBWYWxpZCByYWlkIG9wdGlvbnMgYXJlOlxuIgorI34gIlx0ZWFfdmVyPTxlYV92ZXJzaW9uICgxIG9yIDIpXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJMZXMgb3B0aW9ucyDpdGVuZHVlcyBzb250IHPpcGFy6WVzIHBhciBkZXMgdmlyZ3VsZXMsIGV0IHBldXZlbnQgcHJlbmRyZSAiCisjfiAidW4gYXJndW1lbnRcbiIKKyN+ICJsZXF1ZWwgcGV1dCDqdHJlIGluaXRpYWxpc+kgcGFyIHVuIHNpZ25lIGQn6WdhbGl06SAoJz0nKS4gTGVzIG9wdGlvbnMgIgorI34gIlJBSUQgdmFsaWRlcyBzb250OlxuIgorI34gIlx0ZWFfdmVyPTxlYV92ZXJzaW9uICgxIG9yIDIpXG4iCisjfiAiXG4iCisKKyN+IG1zZ2lkICJVc2FnZTogIGZpbmRzdXBlciBkZXZpY2UgW3NraXBieXRlcyBbc3RhcnRrYl1dXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJVc2FnZaA6ICBmaW5kc3VwZXIgcOlyaXBo6XJpcXVlIFtvY3RldHNf4F9lc2NhbW90ZXIgW2TpYnV0X2VuX0tvXV1cbiIKKworI34gbXNnaWQgInNraXBieXRlcyBzaG91bGQgYmUgYSBudW1iZXIsIG5vdCAlc1xuIgorI34gbXNnc3RyICJvY3RldHMg4CBlc2NhbW90ZXIgZG9pdCDqdHJlIHVuIG5vbWJyZSwgbm9uIHBhcyAlc1xuIgorCisjfiBtc2dpZCAic2tpcGJ5dGVzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemVcbiIKKyN+IG1zZ3N0ciAib2N0ZXRzIOAgZXNjYW1vdGVyIGRvaXQg6nRyZSB1biBtdWx0aXBsZSBkZSBsYSB0YWlsbGUgZGUgc2VjdGV1clxuIgorCisjfiBtc2dpZCAic3RhcnRrYiBzaG91bGQgYmUgYSBudW1iZXIsIG5vdCAlc1xuIgorI34gbXNnc3RyICJk6WJ1dCBlbiBLbyBkb2l0IOp0cmUgdW4gbm9tYnJlLCBub24gcGFzICVzXG4iCisKKyN+IG1zZ2lkICJzdGFydGtiIHNob3VsZCBiZSBwb3NpdGl2ZSwgbm90ICVMZFxuIgorI34gbXNnc3RyICJk6WJ1dCBlbiBLbyBkb2l0IOp0cmUgcG9zaXRpZiwgbm9uIHBhcyAlTGRcbiIKKworI34gbXNnaWQgInN0YXJ0aW5nIGF0ICVMZCwgd2l0aCAlZCBieXRlIGluY3JlbWVudHNcbiIKKyN+IG1zZ3N0ciAiZOlidXQg4CAlTGQsIGF2ZWMgdW4gaW5jcultZW50IGRlICVkIG9jdGV0c1xuIgorCisjfiBtc2dpZCAiICAgICAgIHRoaXNvZmYgICAgIGJsb2NrIGZzX2Jsa19zeiAgYmxrc3ogZ3JwIGxhc3RfbW91bnRcbiIKKyN+IG1zZ3N0ciAiICAgICAgIHRoaXNvZmYgICAgIGJsb2NrIGZzX2Jsa19zeiAgYmxrc3ogZ3JwIGxhc3RfbW91bnRcbiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICIlMTRMZDogZmluaXNoZWQgd2l0aCBlcnJubyAlZFxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiJTE0TGQ6IHRlcm1pbukgYXZlYyBlcnJubyAlZFxuIgorCisjfiBtc2dpZCAiIgorI34gIlVzYWdlOiAlcyA8ZGV2MT4gPGRldjI+IDxkZXYzPlxuIgorI34gIlxuIgorI34gIlRoaXMgcHJvZ3JhbSBwcmludHMgb3V0IHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGEgc2V0IG9mIGRldmljZXNcbiIKKyN+ICJBIGNvbW1vbiB3YXkgdG8gdXNlIHRoaXMgcHJvZ3JhbSBpczpcbiIKKyN+ICJcbiIKKyN+ICJcdCVzIC9kZXYvaGRhP1xuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisjfiAiVXNhZ2WgOiAlcyA8cOlyaXBoMT4gPHDpcmlwaDI+IDxw6XJpcGgzPlxuIgorI34gIlxuIgorI34gIkNlIHByb2dyYW1tZSBhZmZpY2hlIGxlcyBpbmZvcm1hdGlvbnMgZGVzIHBhcnRpdGlvbnMgcG91ciB1biBlbnNlbWJsZSBkZSAiCisjfiAicOlyaXBo6XJpcXVlc1xuIgorI34gIlVuZSBmYedvbiB1c3VlbGxlIGQndXRpbGlzZXIgY2UgcHJvZ3JhbW1lIGVzdDpcbiIKKyN+ICJcbiIKKyN+ICJcdCVzIC9kZXYvaGRhP1xuIgorI34gIlxuIgorCisjfiBtc2dpZCAiRm9yY2libHkgY2xlYXJpbmcgSFRSRUUgZmxhZyBvbiBAaSAlZCAoJXEpLiAgKEJldGEgdGVzdCBjb2RlKVxuIgorI34gbXNnc3RyICIiCisjfiAiRm9yY2VyIGxhIG1pc2Ug4CB66XJvIGR1IGRyYXBlYXUgSFRSRUUgc3VyIGwnQGkgJWQgKCVxKS4gKENvZGUgZW4gcGhhc2UgIgorI34gImJldGEgdGVzdClcbiIKKworI34gbXNnaWQgIih1bmtub3duIG9zKSIKKyN+IG1zZ3N0ciAiKHN5c3TobWUgZCdleHBsb2l0YXRpb24gaW5jb25udSkiCisKKyN+IG1zZ2lkICJyZXNpemUyZnMgJXMgKCVzKVxuIgorI34gbXNnc3RyICJyZXNpemUyZnMgJXMgKCVzKVxuIgorCisjfiBtc2dpZCAiTnVtYmVyIG9mIGZyZWUgYmxvY2tzOiAlZC8lZCwgTmVlZGVkOiAlZFxuIgorI34gbXNnc3RyICJOb21icmUgZGUgYmxvY3MgbGlicmVzoDogJWQvJWQsIEEgYmVzb2luIGRlOiAlZFxuIgorCisjfiBtc2dpZCAiR29pbmcgaW50byBkZXNwZXJhdGlvbiBtb2RlIGZvciBibG9jayBhbGxvY2F0aW9uc1xuIgorI34gbXNnc3RyICJQYXNzYWdlIGVuIG1vZGUgZOlzZXNw6XLpIHBvdXIgbCdhbGxvY2F0aW9uIGRlIGJsb2NzXG4iCisKKyN+IG1zZ2lkICJNb3ZpbmcgJWQgYmxvY2tzICV1LT4ldVxuIgorI34gbXNnc3RyICJE6XBsYWNlbWVudCBkZSAlZCBibG9jcyAldS0+JXVcbiIKKworI34gbXNnaWQgImlubz0ldSwgYmxvY2tjbnQ9JWxsZCwgJXUtPiV1XG4iCisjfiBtc2dzdHIgImlubz0ldSwgYmxvY2tjbnQ9JWxsZCwgJXUtPiV1XG4iCisKKyN+IG1zZ2lkICJJbm9kZSBtb3ZlZCAldS0+JXVcbiIKKyN+IG1zZ3N0ciAiSS1ub2V1ZCBk6XBsYWPpICV1LT4ldVxuIgorCisjfiBtc2dpZCAiSW5vZGUgdHJhbnNsYXRlIChkaXI9JXUsIG5hbWU9JS4qcywgJXUtPiV1KVxuIgorI34gbXNnc3RyICJUcmFuc2xhdGlvbiBkJ2ktbm9ldWQgKHLpcGVydG9pcmU9JXUsIG5vbT0lLipzLCAldS0+JXUpXG4iCisKKyN+IG1zZ2lkICJJdGFibGUgbW92ZSBncm91cCAlZCBibG9jayAldS0+JXUgKGRpZmYgJWQpXG4iCisjfiBtc2dzdHIgIkTpcGxhY2VtZW50IGR1IGdyb3VwZSBJdGFibGUgJWQgYmxvYyAldS0+JXUgKGRpZmYgJWQpXG4iCisKKyN+IG1zZ2lkICIlZCBibG9ja3Mgb2YgemVyb3MuLi5cbiIKKyN+IG1zZ3N0ciAiJWQgYmxvY3MgZGUgeulyb3MuLi5cbiIKKworI34gbXNnaWQgIklub2RlIHRhYmxlIG1vdmUgZmluaXNoZWQuXG4iCisjfiBtc2dzdHIgIkTpcGxhY2VtZW50IGRlIGxhIHRhYmxlIGQnaS1ub2V1ZHMgY29tcGzpdOkuXG4iCmRpZmYgLS1naXQgYS9wby9pZC5nbW8gYi9wby9pZC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTViODVhZQotLS0gL2Rldi9udWxsCisrKyBiL3BvL2lkLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9pZC5wbyBiL3BvL2lkLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMTExODkKLS0tIC9kZXYvbnVsbAorKysgYi9wby9pZC5wbwpAQCAtMCwwICsxLDcyNzQgQEAKKyMgUGVzYW4gQmFoYXNhIEluZG9uZXNpYSB1bnR1ayBlMmZzcHJvZ3MKKyMgQ29weXJpZ2h0IChDKSAyMDA4IFRoZW9kb3JlIFRzbyAobXNnaWRzKQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZTJmc3Byb2dzIHBhY2thZ2UuCisjIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBmcmVlbHkgY29weSBhbmQgZGlzdHJpYnV0ZQorIyB0aGlzIGZpbGUgYW5kIG1vZGlmaWVkIHZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHRoaXMKKyMgaGVhZGVyIGlzIG5vdCByZW1vdmVkIGFuZCBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgbWFya2VkCisjIGFzIHN1Y2guCisjIEFyaWYgRS4gTnVncm9obyA8YXJpZl9lbmRyb0B5YWhvby5jb20+LCAyMDA4LCAyMDA5LCAyMDEwLgorIworIy4gVGhlIHN0cmluZ3MgaW4gZTJmc2NrJ3MgcHJvYmxlbS5jIGNhbiBiZSB2ZXJ5IGhhcmQgdG8gdHJhbnNsYXRlLAorIy4gc2luY2UgdGhlIHN0cmluZ3MgYXJlIGV4cGFuZGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gIEZpcnN0IG9mIGFsbCwKKyMuIHRoZXJlIGlzIGFuIEAtZXhwYW5zaW9uLCB3aGVyZSBzdHJpbmdzIGxpa2UgIkBpIiBhcmUgZXhwYW5kZWQgdG8KKyMuICJpbm9kZSIsIGFuZCBzbyBvbi4gIEluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0cmFuc2xhdG9ycywgdGhlCisjLiBlMmZzcHJvZ3MgcG8gdGVtcGxhdGUgZmlsZSBoYXMgYmVlbiBlbmhhbmNlZCB3aXRoIGNvbW1lbnRzIHRoYXQgc2hvdworIy4gdGhlIEAtZXhwYW5zaW9uLCBmb3IgdGhlIHN0cmluZ3MgaW4gdGhlIHByb2JsZW0uYyBmaWxlLgorIy4KKyMuIFRyYW5zbGF0b3JzIGFyZSBmcmVlIHRvIHVzZSB0aGUgQC1leHBhbnNpb24gZmFjaWxpdHkgaWYgdGhleSBzbworIy4gY2hvb3NlLCBieSBwcm92aWRpbmcgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGluIGUyZnNjay9tZXNzYWdlLmMuCisjLiBUaGVzZSB0cmFuc2xhdGlvbiBjYW4gY29tcGxldGVseSByZXBsYWNlIGFuIGV4cGFuc2lvbjsgZm9yIGV4YW1wbGUsCisjLiBpZiAiYmJsb2NrIiAod2hpY2ggaW5kaWNhdGVkIHRoYXQgIkBiIiB3b3VsZCBiZSBleHBhbmRlZCB0byAiYmxvY2siKQorIy4gaXMgdHJhbnNsYXRlZCBhcyAiZGRhdGVudmVybHVzdCIsIHRoZW4gIkBkIiB3aWxsIGJlIGV4cGFuZGVkIHRvCisjLiAiZGF0ZW52ZXJsdXN0Ii4gIEFsdGVybmF0aXZlbHksIHRyYW5zbGF0b3JzIGNhbiBzaW1wbHkgbm90IHVzZSB0aGUKKyMuIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGF0IGFsbC4KKyMuCisjLiBUaGUgc2Vjb25kIGV4cGFuc2lvbiB3aGljaCBpcyBkb25lIGZvciBlMmZzY2sncyBwcm9ibGVtLmMgbWVzc2FnZXMgaXMKKyMuIGEgZHluYW1pYyAlLWV4cGFuc2lvbiwgd2hpY2ggZXhwYW5kcyAlaSBhcyBhbiBpbm9kZSBudW1iZXIsIGFuZCBzbworIy4gb24uICBBIHRhYmxlIG9mIHRoZXNlIGV4cGFuc2lvbnMgY2FuIGJlIGZvdW5kIGJlbG93LiAgTm90ZSB0aGF0CisjLiAlLWV4cHJlc3Npb25zIHRoYXQgYmVnaW4gd2l0aCAiJUQiIGFuZCAiJUkiIGFyZSB0d28tY2hhcmFjdGVyCisjLiBleHBhbnNpb25zOyBzbyBmb3IgZXhhbXBsZSwgIiVJdSIgZXhwYW5kcyB0byB0aGUgaW5vZGUncyB1c2VyIGlkCisjLiBvd25lcnNoaXAgZmllbGQgKGlub2RlLT5pX3VpZCkuICBBbHNvIHRoZSAiJUIiIGV4cGFuc2lvbiBpcyBzcGVjaWFsOgorIy4gaXQgY2FuIGV4cGFuZCB0byBlaXRoZXIgdGhlIHN0cmluZyAiaW5kaXJlY3QgYmxvY2siIChwb3NzaWJseSBwcmVjZWRlZAorIy4gYnkgdGhlIHdvcmQgImRvdWJsZSIgb3IgInRyaXBsZSIpLCBvciB0aGUgc3RyaW5nICJibG9jayAjIiBpbW1lZGlhdGVseQorIy4gZm9sbG93ZWQgYnkgYW4gaW50ZWdlciBpbmRpY2F0aW5nIGEgYmxvY2sgc2VxdWVuY2UgbnVtYmVyLgorIy4gIAorIy4gCSViCTxibGs+CQkJYmxvY2sgbnVtYmVyCisjLiAJJUIJImluZGlyZWN0IGJsb2NrIiB8ICJibG9jayAjIjxibGtjb3VudD4Jc3RyaW5nIHwgc3RyaW5nK2ludGVnZXIKKyMuIAklYwk8YmxrMj4JCQlibG9jayBudW1iZXIKKyMuIAklRGkJPGRpcmVudD4gLT4gaW5vCQlpbm9kZSBudW1iZXIKKyMuIAklRG4JPGRpcmVudD4gLT4gbmFtZQlzdHJpbmcKKyMuIAklRHIJPGRpcmVudD4gLT4gcmVjX2xlbgorIy4gCSVEbAk8ZGlyZW50PiAtPiBuYW1lX2xlbgorIy4gCSVEdAk8ZGlyZW50PiAtPiBmaWxldHlwZQorIy4gCSVkCTxkaXI+IAkJCWlub2RlIG51bWJlcgorIy4gCSVnCTxncm91cD4JCQlpbnRlZ2VyCisjLiAJJWkJPGlubz4JCQlpbm9kZSBudW1iZXIKKyMuIAklSXMJPGlub2RlPiAtPiBpX3NpemUKKyMuIAklSVMJPGlub2RlPiAtPiBpX2V4dHJhX2lzaXplCisjLiAJJUliCTxpbm9kZT4gLT4gaV9ibG9ja3MKKyMuIAklSWwJPGlub2RlPiAtPiBpX2xpbmtzX2NvdW50CisjLiAJJUltCTxpbm9kZT4gLT4gaV9tb2RlCisjLiAJJUlNCTxpbm9kZT4gLT4gaV9tdGltZQorIy4gCSVJRgk8aW5vZGU+IC0+IGlfZmFkZHIKKyMuIAklSWYJPGlub2RlPiAtPiBpX2ZpbGVfYWNsCisjLiAJJUlkCTxpbm9kZT4gLT4gaV9kaXJfYWNsCisjLiAJJUl1CTxpbm9kZT4gLT4gaV91aWQKKyMuIAklSWcJPGlub2RlPiAtPiBpX2dpZAorIy4gCSVJdAk8c3RyPgkJCWZpbGUgdHlwZQorIy4gCSVqCTxpbm8yPgkJCWlub2RlIG51bWJlcgorIy4gCSVtCTxjb21fZXJyIGVycm9yIG1lc3NhZ2U+CisjLiAJJU4JPG51bT4KKyMuIAklcAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4KKyMuIAklUAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiA8ZGlyZW50Pi0+aW5vIHdpdGggPGlubzI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LiAgKElmIGRpcmVudCBpcyBOVUxMCisjLiAJCQkJdGhlbiByZXR1cm4gdGhlIHBhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vMj4pCisjLiAJJXEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxkaXI+CisjLiAJJVEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+IHdpdGggPGRpcj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuCisjLiAJJXMJPHN0cj4JCQltaXNjZWxsYW5lb3VzIHN0cmluZworIy4gCSVTCQliYWNrdXAgc3VwZXJibG9jaworIy4gCSVYCTxudW0+CWhleGFkZWNpbWFsIGZvcm1hdAorIy4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGUyZnNwcm9ncyAxLjQxLjEyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IHR5dHNvQGFsdW0ubWl0LmVkdVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDIxOjI2LTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTA1LTI0IDEyOjMwKzA3MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFyaWYgRS4gTnVncm9obyA8YXJpZl9lbmRyb0B5YWhvby5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogSW5kb25lc2lhbiA8dHJhbnNsYXRpb24tdGVhbS1pZEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IGlkXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjIzIG1pc2MvbWtlMmZzLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9jayAldSBvdXQgb2YgcmFuZ2U7IGlnbm9yZWQuXG4iCittc2dzdHIgIkJhZCBibG9jayAldSBkaWx1YXIgamFuZ2thdWFuOyBkaWFiYWlrYW4uXG4iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo0NgorbXNnaWQgIndoaWxlIHNhbml0eSBjaGVja2luZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAia2V0aWthIG1lbGFrdWthbiBwZW5nZWNoZWNrYW4gZGkgaW5vZGUgYmFkIGJsb2NrIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NTgKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICJrZXRpa2EgbWVtYmFjYSBpbm9kZSBiYWQgYmxvY2siCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo3MiBlMmZzY2svc2NhbnRlc3QuYzoxMDcgZTJmc2NrL3VuaXguYzoxMzQ1CisjOiBlMmZzY2svdW5peC5jOjE0MzQgbWlzYy9iYWRibG9ja3MuYzoxMjQyIG1pc2MvYmFkYmxvY2tzLmM6MTI1MAorIzogbWlzYy9iYWRibG9ja3MuYzoxMjY0IG1pc2MvYmFkYmxvY2tzLmM6MTI3NiBtaXNjL2R1bXBlMmZzLmM6NjA0CisjOiBtaXNjL2UyaW1hZ2UuYzoxMzk2IG1pc2MvZTJpbWFnZS5jOjE1ODAgbWlzYy9lMmltYWdlLmM6MTU5OQorIzogbWlzYy9ta2UyZnMuYzoyMjcgbWlzYy90dW5lMmZzLmM6MTk1NSBtaXNjL3R1bmUyZnMuYzoyMDQ0IHJlc2l6ZS9tYWluLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICVzIgorbXNnc3RyICJrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW1idWthICVzIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHBvcGVuICclcyciCittc2dzdHIgImtldGlrYSBtZW5jb2JhIHBvcGVuICclcyciCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo5NCBtaXNjL21rZTJmcy5jOjIzNAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW4gbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gZmlsZSIKK21zZ3N0ciAia2V0aWthIG1lbWJhY2EgZGFsYW0gZGFmdGFyIGJhZCBibG9jayBkYXJpIGJlcmthcyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEwNQorbXNnaWQgIndoaWxlIHVwZGF0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAia2V0aWthIG1lbXBlcmJhcnVpIGlub2RlIGJhZCBibG9jayIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBpbGxlZ2FsIGJsb2NrICV1IGZvdW5kIGluIGJhZCBibG9jayBpbm9kZS4gIENsZWFyZWQuXG4iCittc2dzdHIgIiIKKyJQZXJpbmdhdGFuOiBpbGxlZ2FsIGJsb2NrICV1IGRpdGVtdWthbiBkYWxhbSBpbm9kZSBiYWQgYmxvY2suIERpaGFwdXMuXG4iCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIkVycm9yIG1lbWJhY2EgYmxvY2sgJWx1ICglcykga2V0aWthICVzLiAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkVycm9yIG1lbWJhY2EgYmxvY2sgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYxIGUyZnNjay9laGFuZGxlci5jOjExMAorbXNnaWQgIklnbm9yZSBlcnJvciIKK21zZ3N0ciAiTWVuZ2FiYWlrYW4gZXJyb3IiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYyCittc2dpZCAiRm9yY2UgcmV3cml0ZSIKK21zZ3N0ciAiTWVtYWtzYSBtZW51bGlzIGtlbWJhbGkiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICJFcnJvciBtZW51bGlzIGJsb2NrICVsdSAoJXMpIGtldGlrYSAlcy4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkVycm9yIG1lbnVsaXMgYmxvY2sgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJkaXJibG9jayBrb3NvbmciCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjYyCittc2dpZCAiZW1wdHkgZGlyIG1hcCIKK21zZ3N0ciAiZGlyIG1hcCBrb3NvbmciCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVtcHR5IGRpcmVjdG9yeSBibG9jayAldSAoIyVkKSBpbiBpbm9kZSAldVxuIgorbXNnc3RyICJEaXJla3RvcmkgYmxvY2sgJXUgKCMlZCkga29zb25nIGRhbGFtIGlub2RlICV1XG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgZmlsZW5hbWUgbmJsb2NrcyBibG9ja3NpemVcbiIKK21zZ3N0ciAiJXM6ICVzIGZpbGVuYW1lIG5ibG9ja3MgYmxvY2tzaXplXG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBvZiBibG9ja3MhXG4iCittc2dzdHIgIk5vbW9yIGRhcmkgYmxvY2sgdGlkYWsgbGVnYWwhXG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIgKHNpemU9JWQpXG4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmdhbG9rYXNpa2FuIGJsb2NrIGJ1ZmZlciAodWt1cmFuPSVkKVxuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIGRpc2tcbiIKK21zZ3N0ciAiUGVuZ2d1bmFhbjogJXMgZGlza1xuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQkxLRkxTQlVGIGlvY3RsIG5vdCBzdXBwb3J0ZWQhICBDYW4ndCBmbHVzaCBidWZmZXJzLlxuIgorbXNnc3RyICJCTEtGTFNCVUYgaW9jdGwgdGlkYWsgZGlzdXBwb3J0ISBUaWRhayBkYXBhdCBtZW1mbHVzaCBidWZmZXIuXG4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLUZdIFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBkZXZpY2VcbiIKK21zZ3N0ciAiUGVuZ2d1bmFhbjogJXMgWy1GXSBbLUkgaW5vZGVfYnVmZmVyX2Jsb2NrXSBwZXJhbmdrYXRcbiIKKworIzogZTJmc2NrL2lzY2FuLmM6ODEgZTJmc2NrL3VuaXguYzo5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZmx1c2hpbmciCittc2dzdHIgImtldGlrYSBtZW1idWthICVzIHVudHVrIGZsdXNoaW5nIgorCisjOiBlMmZzY2svaXNjYW4uYzo4NiBlMmZzY2svdW5peC5jOjk3OCByZXNpemUvbWFpbi5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiCittc2dzdHIgImtldGlrYSBtZW5jb2JhIHVudHVrIG1lbWZsdXNoICVzIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICclcyciCittc2dzdHIgImtldGlrYSBtZW5jb2JhIHVudHVrIG1lbWJ1a2EgJXMiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTI5MAorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAia2V0aWthIG1lbmNvYmEgbWVtYnVrYSBpbm9kZSBzY2FuIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMjcgbWlzYy9lMmltYWdlLmM6MTMwOQorbXNnaWQgIndoaWxlIGdldHRpbmcgbmV4dCBpbm9kZSIKK21zZ3N0ciAia2V0aWthIG1lbXBlcm9sZWggaW5vZGUgYmVyaWt1dG55YSIKKworIzogZTJmc2NrL2lzY2FuLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBzY2FubmVkLlxuIgorbXNnc3RyICIldSBpbm9kZXMgZGlzY2FuLlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjUyNAorbXNnaWQgInJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIm1lbWJhY2Egam91cm5hbCBzdXBlcmJsb2NrXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBubyB2YWxpZCBqb3VybmFsIHN1cGVyYmxvY2sgZm91bmRcbiIKK21zZ3N0ciAiJXM6IGpvdXJuYWwgc3VwZXJibG9jayB0aWRhayB2YWxpZCBkaXRlbXVrYW5cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGpvdXJuYWwgdG9vIHNob3J0XG4iCittc2dzdHIgIiVzOiBqb3VybmFsIHRlcmxhbHUgcGVuZGVrXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiByZWNvdmVyaW5nIGpvdXJuYWxcbiIKK21zZ3N0ciAiJXM6IG1lcmVjb3Zlcnkgam91cm5hbFxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogd29uJ3QgZG8gam91cm5hbCByZWNvdmVyeSB3aGlsZSByZWFkLW9ubHlcbiIKK21zZ3N0ciAiJXM6IHRpZGFrIGFrYW4gbWVsYWt1a2FuIGpvdXJuYWwgcmVjb3Zlcnkga2V0aWthIHJlYWQtb25seVxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcmUtb3BlbiAlcyIKK21zZ3N0ciAia2V0aWthIG1lbmNvYmEgdW50dWsgbWVtYnVrYSAlcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTMKK21zZ2lkICJhZXh0ZW5kZWQgYXR0cmlidXRlIgorbXNnc3RyICJhZXh0ZW5kZWQgYXR0cmlidXRlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNAorbXNnaWQgIkFlcnJvciBhbGxvY2F0aW5nIgorbXNnc3RyICJBZXJyb3IgbWVuZ2Fsb2thc2lrYW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJiYmxvY2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE2Cittc2dpZCAiQmJpdG1hcCIKK21zZ3N0ciAiQmJpdG1hcCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTcKK21zZ2lkICJjY29tcHJlc3MiCittc2dzdHIgImNjb21wcmVzcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTgKK21zZ2lkICJDY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBAYiIKK21zZ3N0ciAiQ2tvbmZsaWsgZGVuZ2FuIGJlYmVyYXBhIHNpc3RlbSBiZXJrYXMgbGFpbiBAYiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTkKK21zZ2lkICJkZGlyZWN0b3J5IgorbXNnc3RyICJkZGlyZWt0b3JpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMAorbXNnaWQgIkRkZWxldGVkIgorbXNnc3RyICJEZGVsZXRlZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjEKK21zZ2lkICJlZW50cnkiCittc2dzdHIgImVlbnRyaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjIKK21zZ2lkICJFQGUgJyVEbicgaW4gJXAgKCVpKSIKK21zZ3N0ciAiRUBlICclRG4nIGRhbGFtICVwICglaSkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIzCittc2dpZCAiZmZpbGVzeXN0ZW0iCittc2dzdHIgImZzaXN0ZW0gYmVya2FzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNAorbXNnaWQgIkZmb3IgQGkgJWkgKCVRKSBpcyIKK21zZ3N0ciAiRnVudHVrIEBpICVpICglUSkgYWRhbGFoIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNQorbXNnaWQgImdncm91cCIKK21zZ3N0ciAiZ2dydXAiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI2Cittc2dpZCAiaEhUUkVFIEBkIEBpIgorbXNnc3RyICJoSFRSRUUgQGQgQGkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI3Cittc2dpZCAiaWlub2RlIgorbXNnc3RyICJpaW5vZGUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI4Cittc2dpZCAiSWlsbGVnYWwiCittc2dzdHIgIklpbGVnYWwiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI5Cittc2dpZCAiampvdXJuYWwiCittc2dzdHIgImpqb3VybmFsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMAorbXNnaWQgImxsb3N0K2ZvdW5kIgorbXNnc3RyICJsbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzEKK21zZ2lkICJMaXMgYSBsaW5rIgorbXNnc3RyICJMYWRhbGFoIHNlYnVhaCBsaW5rIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMgorbXNnaWQgIm1tdWx0aXBseS1jbGFpbWVkIgorbXNnc3RyICJtbXVsdGlwbHktY2xhaW1lZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzMKK21zZ2lkICJuaW52YWxpZCIKK21zZ3N0ciAibmludmFsaWQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM0Cittc2dpZCAib29ycGhhbmVkIgorbXNnc3RyICJvb3JwaGFuZWQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM1Cittc2dpZCAicHByb2JsZW0gaW4iCittc2dzdHIgInBwcm9ibGVtIGRhbGFtIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNgorbXNnaWQgInFxdW90YSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNworbXNnaWQgInJyb290IEBpIgorbXNnc3RyICJycm9vdCBAaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzgKK21zZ2lkICJzc2hvdWxkIGJlIgorbXNnc3RyICJzc2VoYXJ1c255YSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzkKK21zZ2lkICJTc3VwZXJAYiIKK21zZ3N0ciAiU3N1cGVyQGIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQwCittc2dpZCAidXVuYXR0YWNoZWQiCittc2dzdHIgInV1bmF0dGFjaGVkIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MQorbXNnaWQgInZkZXZpY2UiCittc2dzdHIgInZwZXJhbmdrYXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQyCittc2dpZCAieGV4dGVudCIKK21zZ3N0ciAieGV4dGVudCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDMKK21zZ2lkICJ6emVyby1sZW5ndGgiCittc2dzdHIgInp6ZXJvLWxlbmd0aCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTQKK21zZ2lkICI8VGhlIE5VTEwgaW5vZGU+IgorbXNnc3RyICI8SW5vZGUgS29zb25nPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTUKK21zZ2lkICI8VGhlIGJhZCBibG9ja3MgaW5vZGU+IgorbXNnc3RyICI8QmFkIGJsb2NrIGlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTcKKyMsIGZ1enp5Cittc2dpZCAiPFRoZSB1c2VyIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPElub2RlIGpvdXJuYWw+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OAorIywgZnV6enkKK21zZ2lkICI8VGhlIGdyb3VwIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPGlub2RlIGRlc2tyaXBzaSBncnVwPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTkKK21zZ2lkICI8VGhlIGJvb3QgbG9hZGVyIGlub2RlPiIKK21zZ3N0ciAiPGJvb3QgbG9hZGVyIGlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjAKK21zZ2lkICI8VGhlIHVuZGVsZXRlIGRpcmVjdG9yeSBpbm9kZT4iCittc2dzdHIgIjx1bmRlbGV0ZSBkaXJla3RvcmkgaW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MQorbXNnaWQgIjxUaGUgZ3JvdXAgZGVzY3JpcHRvciBpbm9kZT4iCittc2dzdHIgIjxpbm9kZSBkZXNrcmlwc2kgZ3J1cD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYyCittc2dpZCAiPFRoZSBqb3VybmFsIGlub2RlPiIKK21zZ3N0ciAiPElub2RlIGpvdXJuYWw+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MworbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSA5PiIKK21zZ3N0ciAiPElub2RlIHRlcnBlc2FuIDk+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2NAorbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSAxMD4iCittc2dzdHIgIjxJbm9kZSBUZXJwZXNhbiAxMD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM0Cittc2dpZCAicmVndWxhciBmaWxlIgorbXNnc3RyICJiZXJrYXMgYmlhc2EiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM2Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICJkaXJla3RvcmkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM4Cittc2dpZCAiY2hhcmFjdGVyIGRldmljZSIKK21zZ3N0ciAia2FyYWt0ZXIgZGV2aWNlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MAorbXNnaWQgImJsb2NrIGRldmljZSIKK21zZ3N0ciAiYmxvY2sgZGV2aWNlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MgorbXNnaWQgIm5hbWVkIHBpcGUiCittc2dzdHIgIm5hbWVkIHBpcGUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ0Cittc2dpZCAic3ltYm9saWMgbGluayIKK21zZ3N0ciAic3ltYm9saWMgbGluayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDYgbWlzYy91dWlkZC5jOjE2MgorbXNnaWQgInNvY2tldCIKK21zZ3N0ciAic29ja2V0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpbGUgdHlwZSB3aXRoIG1vZGUgMCVvIgorbXNnc3RyICJ0aXBlIGZpbGUgdGlkYWsgZGlrZXRhaHVpIGRlbmdhbiBtb2RlIDAlbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjMKK21zZ2lkICJpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiYmxvY2sgdGlkYWsgbGFuZ3N1bmciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI1Cittc2dpZCAiZG91YmxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJibG9rIHRpZGFrIGxhbmdzdW5nIGJlcmR1YSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjcKK21zZ2lkICJ0cmlwbGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImJsb2sgdGlkYWsgbGFuZ3N1bmcgYmVydGlnYSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjkKK21zZ2lkICJ0cmFuc2xhdG9yIGJsb2NrIgorbXNnc3RyICJibG9rIHBlbmVyamVtYWgiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDMxCittc2dpZCAiYmxvY2sgIyIKK21zZ3N0ciAiYmxvayAjIgorCisjOiBlMmZzY2svcGFzczFiLmM6MjIyCittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBpbm9kZSBtYXAiCittc2dzdHIgImthbGlrYW4gcGV0YSBpbm9kZSB5YW5nIGRpdHVudHV0IgorCisjOiBlMmZzY2svcGFzczFiLmM6NjI1IGUyZnNjay9wYXNzMWIuYzo3NDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjYW4ndCBmaW5kIGR1cF9ibGsgZm9yICVsbHVcbiIKK21zZ3N0ciAiaW50ZXJuYWwgZXJyb3I6IHRpZGFrIGRhcGF0IG1lbmVtdWthbiBkdXBfYmxrIHVudHVrICV1XG4iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NTIKK21zZ2lkICJyZXR1cm5lZCBmcm9tIGNsb25lX2ZpbGVfYmxvY2siCittc2dzdHIgImtlbWJhbGkgZGFyaSBjbG9uZV9maWxlX2Jsb2NrIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgbG9va3VwIEVBIGJsb2NrIHJlY29yZCBmb3IgJWxsdSIKK21zZ3N0ciAiaW50ZXJuYWwgZXJyb3I6IHRpZGFrIGRhcGF0IG1lbmVtdWthbiBFQSBibG9jayByZWNvcmQgdW50dWsgJXUiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBpbm9kZSByZWNvcmQgZm9yICV1IgorbXNnc3RyICJpbnRlcm5hbCBlcnJvcjogdGlkYWsgZGFwYXQgbWVuZW11a2FuIEVBIGlub2RlIHJlY29yZCB1bnR1ayAldSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NDc1IGUyZnNjay9wYXNzMi5jOjc4MgorbXNnaWQgInJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICJtZW1iYWNhIGRpcmVrdG9yaSBibG9jayIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjM0Cittc2dpZCAiaW4tdXNlIGlub2RlIG1hcCIKK21zZ3N0ciAiaW4tdXNlIGlub2RlIG1hcCIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjQ1Cittc2dpZCAiZGlyZWN0b3J5IGlub2RlIG1hcCIKK21zZ3N0ciAiZGlyZWt0b3JpIGlub2RlIG1hcCIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjU1Cittc2dpZCAicmVndWxhciBmaWxlIGlub2RlIG1hcCIKK21zZ3N0ciAicmVndWxhciBmaWxlIGlub2RlIG1hcCIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjY0IG1pc2MvZTJpbWFnZS5jOjEyNjUKK21zZ2lkICJpbi11c2UgYmxvY2sgbWFwIgorbXNnc3RyICJpbi11c2UgYmxvY2sgbWFwIgorCisjOiBlMmZzY2svcGFzczEuYzo3MzAKK21zZ2lkICJvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgIm1lbWJ1a2EgaW5vZGUgc2NhbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzY0Cittc2dpZCAiZ2V0dGluZyBuZXh0IGlub2RlIGZyb20gc2NhbiIKK21zZ3N0ciAibWVtcGVyb2xlaCBpbm9kZSBzZWxhbmp1dG55YSBkYXJpIHNjYW4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjEyNzkKK21zZ2lkICJQYXNzIDEiCittc2dzdHIgIlRhaGFwIDEiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBpbmRpcmVjdCBibG9ja3Mgb2YgaW5vZGUgJXUiCittc2dzdHIgIm1lbWJhY2EgaW5kaXJlY3QgYmxvY2sgZGFyaSBpbm9kZSAldSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM4NgorbXNnaWQgImJhZCBpbm9kZSBtYXAiCittc2dzdHIgImlub2RlIG1hcCBidXJ1ayIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQwOQorbXNnaWQgImlub2RlIGluIGJhZCBibG9jayBtYXAiCittc2dzdHIgImlub2RlIGRhbGFtIGJhZCBibG9jayBtYXAiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MjkKK21zZ2lkICJpbWFnaWMgaW5vZGUgbWFwIgorbXNnc3RyICJpbWFnaWMgaW5vZGUgbWFwIgorCisjOiBlMmZzY2svcGFzczEuYzoxNDU2Cittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBibG9jayBtYXAiCittc2dzdHIgIm11bHRpcGx5IGRpa2xhaW0gYmxvY2sgbWFwIgorCisjOiBlMmZzY2svcGFzczEuYzoxNTY3Cittc2dpZCAiZXh0IGF0dHIgYmxvY2sgbWFwIgorbXNnc3RyICJleHQgYXR0ciBibG9jayBtYXAiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTZsdSglYyk6IGV4cGVjdGluZyAlNmx1IGdvdCBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIgorbXNnc3RyICIlNmx1KCVjKTogZGlwZXJraXJha2FuICU2bHUgZGlwZXJvbGVoIHBoeXMgJTZsdSAoYmxrY250ICVsbGQpXG4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjI4OTgKK21zZ2lkICJibG9jayBiaXRtYXAiCittc2dzdHIgImJsb2NrIGJpdG1hcCIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjkwNAorbXNnaWQgImlub2RlIGJpdG1hcCIKK21zZ3N0ciAiaW5vZGUgYml0bWFwIgorCisjOiBlMmZzY2svcGFzczEuYzoyOTEwCittc2dpZCAiaW5vZGUgdGFibGUiCittc2dzdHIgImlub2RlIHRhYmxlIgorCisjOiBlMmZzY2svcGFzczIuYzoyODMKK21zZ2lkICJQYXNzIDIiCittc2dzdHIgIlRhaGFwIDIiCisKKyM6IGUyZnNjay9wYXNzMi5jOjgwNgorbXNnaWQgIkNhbiBub3QgY29udGludWUuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZWxhbmp1dGthbi4iCisKKyM6IGUyZnNjay9wYXNzMy5jOjc3Cittc2dpZCAiaW5vZGUgZG9uZSBiaXRtYXAiCittc2dzdHIgImlub2RlIHNlbGVzYWkgYml0bWFwIgorCisjOiBlMmZzY2svcGFzczMuYzo4NgorbXNnaWQgIlBlYWsgbWVtb3J5IgorbXNnc3RyICJQdW5jYWsgcGVtYWthaWFuIG1lbW9yaSIKKworIzogZTJmc2NrL3Bhc3MzLmM6MTQ4Cittc2dpZCAiUGFzcyAzIgorbXNnc3RyICJUYWhhcCAzIgorCisjOiBlMmZzY2svcGFzczMuYzozNDAKK21zZ2lkICJpbm9kZSBsb29wIGRldGVjdGlvbiBiaXRtYXAiCittc2dzdHIgImlub2RlIGRldGVrc2kgbG9vcCBiaXRtYXAiCisKKyM6IGUyZnNjay9wYXNzNC5jOjE5NgorbXNnaWQgIlBhc3MgNCIKK21zZ3N0ciAiVGFoYXAgNCIKKworIzogZTJmc2NrL3Bhc3M1LmM6NzQKK21zZ2lkICJQYXNzIDUiCittc2dzdHIgIlRhaGFwIDUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTEKK21zZ2lkICIobm8gcHJvbXB0KSIKK21zZ3N0ciAiKHRpZGFrIGFkYSBwcm9tcHQpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyCittc2dpZCAiRml4IgorbXNnc3RyICJCZXR1bGthbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MworbXNnaWQgIkNsZWFyIgorbXNnc3RyICJEaWhhcHVzIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0Cittc2dpZCAiUmVsb2NhdGUiCittc2dzdHIgIkRpcGluZGFoa2FuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1Cittc2dpZCAiQWxsb2NhdGUiCittc2dzdHIgIkRpYWxva2FzaWthbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NgorbXNnaWQgIkV4cGFuZCIKK21zZ3N0ciAiRGlleHBhbmQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTcKK21zZ2lkICJDb25uZWN0IHRvIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJNZW55YW1idW5na2FuIGtlIC9sb3N0K2ZvdW5kIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJNZW1idWF0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5Cittc2dpZCAiU2FsdmFnZSIKK21zZ3N0ciAiTWVuZ2FtYmlsIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwCittc2dpZCAiVHJ1bmNhdGUiCittc2dzdHIgIlRydW5jYXRlIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxCittc2dpZCAiQ2xlYXIgaW5vZGUiCittc2dzdHIgIk1lbmdoYXB1cyBpbm9kZSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MgorbXNnaWQgIkFib3J0IgorbXNnc3RyICJNZW1iYXRhbGthbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MworbXNnaWQgIlNwbGl0IgorbXNnc3RyICJNZW1iYWdpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgIk1lbGFuanV0a2FuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1Cittc2dpZCAiQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MiCittc2dzdHIgIktvcGkgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYKK21zZ2lkICJEZWxldGUgZmlsZSIKK21zZ3N0ciAiSGFwdXMgYmVya2FzIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3Cittc2dpZCAiU3VwcHJlc3MgbWVzc2FnZXMiCittc2dzdHIgIlN1cHByZXNzIHBlc2FuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4Cittc2dpZCAiVW5saW5rIgorbXNnc3RyICJVbmxpbmsiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkKK21zZ2lkICJDbGVhciBIVHJlZSBpbmRleCIKK21zZ3N0ciAiSGFwdXMgSFRyZWUgaW5kZXgiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAKK21zZ2lkICJSZWNyZWF0ZSIKK21zZ3N0ciAiQnVhdCBrZW1iYWxpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5Cittc2dpZCAiKE5PTkUpIgorbXNnc3RyICIoS09TT05HKSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MAorbXNnaWQgIkZJWEVEIgorbXNnc3RyICJESUJFVFVMS0FOIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxCittc2dpZCAiQ0xFQVJFRCIKK21zZ3N0ciAiRElIQVBVUyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MgorbXNnaWQgIlJFTE9DQVRFRCIKK21zZ3N0ciAiRElQSU5EQUhLQU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMKK21zZ2lkICJBTExPQ0FURUQiCittc2dzdHIgIkRJQUxPS0FTSUtBTiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NAorbXNnaWQgIkVYUEFOREVEIgorbXNnc3RyICJESUVYUEFORCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NQorbXNnaWQgIlJFQ09OTkVDVEVEIgorbXNnc3RyICJESUhVQlVOR0tBTiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NgorbXNnaWQgIkNSRUFURUQiCittc2dzdHIgIkRJQlVBVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NworbXNnaWQgIlNBTFZBR0VEIgorbXNnc3RyICJESUFNQU5LQU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgKK21zZ2lkICJUUlVOQ0FURUQiCittc2dzdHIgIkRJUE9UT05HIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5Cittc2dpZCAiSU5PREUgQ0xFQVJFRCIKK21zZ3N0ciAiSU5PREUgRElIQVBVUyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MAorbXNnaWQgIkFCT1JURUQiCittc2dzdHIgIkRJQkFUQUxLQU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEKK21zZ2lkICJTUExJVCIKK21zZ3N0ciAiRElCQUdJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyCittc2dpZCAiQ09OVElOVUlORyIKK21zZ3N0ciAiTUVMQU5KVVRLQU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMKK21zZ2lkICJNVUxUSVBMWS1DTEFJTUVEIEJMT0NLUyBDTE9ORUQiCittc2dzdHIgIk1VTFRJUExZLUNMQUlNRUQgQkxPSyBESUtPUEkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQKK21zZ2lkICJGSUxFIERFTEVURUQiCittc2dzdHIgIkJFUktBUyBESUhBUFVTIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1Cittc2dpZCAiU1VQUFJFU1NFRCIKK21zZ3N0ciAiRElBS0hJUkkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTYKK21zZ2lkICJVTkxJTktFRCIKK21zZ3N0ciAiRElMRVBBUyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NworbXNnaWQgIkhUUkVFIElOREVYIENMRUFSRUQiCittc2dzdHIgIkhUUkVFIElOREVYIERJSEFQVVMiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgKK21zZ2lkICJXSUxMIFJFQ1JFQVRFIgorbXNnc3RyICJBS0FOIE1FTUJVQVQgS0VNQkFMSSIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3Cittc2dpZCAiQGIgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiQGIgQEIgdW50dWsgQGcgJWcgdGlkYWsgZGFsYW0gQGcuIChAYiAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExCittc2dpZCAiQGkgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiQGkgQEIgdW50dWsgQEcgJUcgdGlkYWsgZGFsYW0gQGcuIChAYiAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgdGFibGUgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIy4gQC1leHBhbmRlZDogV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYKK21zZ2lkICIiCisiQGkgdGFibGUgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKKyJXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuIgorbXNnc3RyICIiCisiQGkgdGFibGUgdW50dWsgQGcgJWcgdGlkYWsgYmVyYWRhIGRhbGFtIEBnLiAoQGIgJWIpXG4iCisiUEVSSU5HQVRBTjogS0VNVU5HS0lOQU4gS0VISUxBTkdBTiBEQVRBIEJFU0FSLlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIHN1cGVyYmxvY2sgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSB2YWxpZCBleHQyL2V4dDMvZXh0NFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtLiAgSWYgdGhlIGRldmljZSBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDIvZXh0My9leHQ0XG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBzdXBlcmJsb2NrXG4KKyMuIEAtZXhwYW5kZWQ6IGlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIHN1cGVyYmxvY2s6XG4KKyMuIEAtZXhwYW5kZWQ6ICAgICBlMmZzY2sgLWIgODE5MyA8ZGV2aWNlPlxuCisjLiBALWV4cGFuZGVkOiAgb3JcbgorIy4gQC1leHBhbmRlZDogICAgIGUyZnNjayAtYiAzMjc2OCA8ZGV2aWNlPlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjIKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIlRoZSBAUyBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIHZhbGlkIGV4dDIvZXh0My9leHQ0XG4iCisiQGYuICBJZiB0aGUgQHYgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyL2V4dDMvZXh0NFxuIgorIkBmIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgQFNcbiIKKyJpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBAUzpcbiIKKyIgICAgZTJmc2NrIC1iIDgxOTMgPEB2PlxuIgorIiBvclxuIgorIiAgICBlMmZzY2sgLWIgMzI3NjggPEB2PlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQFMgdGlkYWsgZGFwYXQgZGliYWNhIGF0YXUgdGlkYWsgZGFwYXQgbWVuamVsYXNrYW4gZXh0MiBkZW5nYW4gYmVuYXJcbiIKKyJAZi4gSmlrYSBAdiB0aWRhayB2YWxpZCBkYW4gaW5pIGJlcmlzaSBzZWJ1YWggZXh0MlxuIgorIkBmIChkYW4gYnVrYW4gc3dhcCBhdGF1IHVmcyBhdGF1IHNlc3VhdHUgeWFuZyBsYWluKSwgbWFrYSBAU1xuIgorImtvcnVwLCBkYW4gYW5kYSBtdW5na2luIGJpc2EgbWVuY29iYSBtZW5qYWxhbmthbiBlMmZzY2sgc2VjYXJhIGFsdGVybmF0aWYgIgorIkBTOlxuIgorIiAgICAgZTJmc2NrIC1iICVTIDxAdj5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIGZpbGVzeXN0ZW0gc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBzdXBlcmJsb2NrKSBpcyAlYiBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGRldmljZSBpcyAlYyBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogRWl0aGVyIHRoZSBzdXBlcmJsb2NrIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiVWt1cmFuIEBmIChtZW51cnV0IGRhcmkgQFMpIGFkYWxhaCAlYiBAYnNcbiIKKyJVa3VyYW4gZmlzaWsgZGFyaSBAdiBhZGFsYWggJWMgQGJzXG4iCisiS2FsYXUgbmdnYWsgQFMgYXRhdSB0YWJlbCBwYXJ0aXNpIHlhbmcgbXVuZ2tpbiBrb3J1cCFcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja19zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4KKyMuIEAtZXhwYW5kZWQ6IFRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbgorIy4gQC1leHBhbmRlZDogZnJvbSB0aGUgYmxvY2sgc2l6ZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDAKK21zZ2lkICIiCisiQFMgQGJfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuIgorIlRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbiIKKyJmcm9tIHRoZSBAYiBzaXplLlxuIgorbXNnc3RyICIiCisiQFMgQGJfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuIgorIlZlcnNpIGUyZnNjayBpbmkgdGlkYWsgbWVuZ2ltcGxlbWVudGFzaWthbiB1bnR1ayB1a3VyYW4gZnJhZ21lbnQgeWFuZyAiCisiYmVyYmVkYVxuIgorImRhcmkgQGIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3Cittc2dpZCAiQFMgQGJzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIkBTIEBic19wZXJfZ3JvdXAgPSAlYiwgc2VoYXJ1c255YSAlY1xuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGZpcnN0X2RhdGFfYmxvY2sgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MgorbXNnaWQgIkBTIGZpcnN0X2RhdGFfQGIgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICJAUyBmaXJzdF9kYXRhX0BiID0gJWIsIHNlaGFydXNueWEgJWNcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3Cittc2dpZCAiIgorIkBmIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuIgorIlxuIgorbXNnc3RyICIiCisiQGYgdGlkYWsgbWVtaWxpa2kgc2VidWFoIFVVSUQ7IG1lbWJ1YXQgc2F0dS5cbiIKKyJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IGlmIHNldmVyYWwgaW5vZGUgb3IgYmxvY2sgYml0bWFwIGJsb2NrcyBvciBwYXJ0XG4iCisib2YgdGhlIGlub2RlIHRhYmxlIHJlcXVpcmUgcmVsb2NhdGlvbiwgeW91IG1heSB3aXNoIHRvIHRyeVxuIgorInJ1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiAlUycgb3B0aW9uIGZpcnN0LiAgVGhlIHByb2JsZW1cbiIKKyJtYXkgbGllIG9ubHkgd2l0aCB0aGUgcHJpbWFyeSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYW5kXG4iCisidGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suXG4iCisiXG4iCittc2dzdHIgIiIKKyJDYXRhdGFuOiBqaWthIGJlYmVyYXBhIGlub2RlIGF0YXUgYmxvayBiaXRtYXAgYmxvayBhdGF1IGJhZ2lhblxuIgorImRhcmkgdGFiZWwgaW5vZGUgbWVtYnV0dWhrYW4gcmVsb2thc2ksIGFuZGEgbXVuZ2tpbiBiaXNhIG1lbmNvYmFcbiIKKyJkZW5nYW4gbWVuamFsYW5rYW4gZTJmc2NrIGRlbmdhbiBwaWxpaGFuICctYiAlUycgdGVybGViaWggZGFodWx1LiBNYXNhbGFoXG4iCisieWFuZyBtdW5na2luIHRpbWJ1bCBqaWthIGRlbmdhbiBtZW5nZ3VuYWthbiBibG9rIGRlc2tyaXBzaSB1dGFtYSwgZGFuXG4iCisiYmxvayBjYWRhbmdhbiBncnVwIGRlc2tyaXBzaSBtdW5na2luIE9LLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3JydXB0aW9uIGZvdW5kIGluIHN1cGVyYmxvY2suICAoJXMgPSAlTikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcxCittc2dpZCAiQ29ycnVwdGlvbiBmb3VuZCBpbiBAUy4gICglcyA9ICVOKS5cbiIKK21zZ3N0ciAiS29ydXBzaSBkaXRlbXVrYW4gZGkgQFMuICglcyA9ICVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBAdjogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWVuZW50dWthbiB1a3VyYW4gZGFyaSBwaGlzaWsgQHY6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGNvdW50IGluIHN1cGVyYmxvY2sgaXMgJWksIHNob3VsZCBiZSAlai5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxODEKK21zZ2lkICJAaSBjb3VudCBpbiBAUyBpcyAlaSwgQHMgJWouXG4iCittc2dzdHIgIkBpIHRlcmhpdHVuZyBkYWxhbSBAUyBhZGFsYWggJWksIEBzICVqLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4NQorbXNnaWQgIlRoZSBIdXJkIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZlYXR1cmUuXG4iCittc2dzdHIgIkh1cmQgdGlkYWsgbWVuZHVrdW5nIGxheWFuYW4gZmlsZXR5cGUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgJWkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoYXMgYW4gQG4gQGogKEBpICVpKS5cbiIKK21zZ3N0ciAiQFMgbWVtaWxpa2kgc2VidWFoIEBuIEBqIChAaSAlaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIG11bHRpcGxlIGZpbGVzeXN0ZW0gdXNlcnMgKHVuc3VwcG9ydGVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTUKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgbXVsdGlwbGUgQGYgdXNlcnMgKHVuc3VwcG9ydGVkKS5cbiIKK21zZ3N0ciAiRXh0ZXJuYWwgQGogbWVtaWxpa2kgbXVsdGlwbGUgQGYgZGFyaSBwZW5nZ3VuYSAodGlkYWsgZGlsYXlhbmkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW4ndCBmaW5kIGV4dGVybmFsIGpvdXJuYWxcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDAKK21zZ2lkICJDYW4ndCBmaW5kIGV4dGVybmFsIEBqXG4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmVtdWthbiBleHRlcm5hbCBAalxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBiYWQgc3VwZXJibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwNQorbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBiYWQgQFNcbiIKK21zZ3N0ciAiRXh0ZXJuYWwgQGogbWVtaWxpa2kgYmFkIEBTXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZpbGVzeXN0ZW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMTAKK21zZ2lkICJFeHRlcm5hbCBAaiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgQGZcbiIKK21zZ3N0ciAiRXh0ZXJuYWwgQGogdGlkYWsgbWVsYXlhbmkgaW5pIEBmXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gam91cm5hbCBzdXBlcmJsb2NrIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgam91cm5hbCAKKyMuIEAtZXhwYW5kZWQ6IGZvcm1hdC5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjE1Cittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiAiCisiZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKyJAZiBAaiBAUyBtZW1pbGlraSB0aXBlIHlhbmcgdGlkYWsgZGlrZXRhaHVpICVOICh0aWRhayBkaXN1cHBvcnQpLlxuIgorIkluaSBzYW5nYXQgbWVtdW5na2lua2FuIGppa2Egc2FsaW5hbiBkYXJpIGUyZnNjayBzdWRhaCBsYW1hIGRhbi9hdGF1IHRpZGFrICIKKyJtZWxheWFuaSBmb3JtYXQgQGogaW5pLlxuIgorIkluaSBqdWdhIG11bmdraW4gamlrYSBAaiBAUyB0ZWxhaCB0ZXJrb3J1cHNpLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjMKK21zZ2lkICJAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICJAaiBAUyB0ZWxhaCB0ZXJrb3J1cHNpLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhc19qb3VybmFsIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIGpvdXJuYWwgaXMgcHJlc2VudC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjgKKyMsIGZ1enp5Cittc2dpZCAiQFMgaGFzX0BqIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIEBqIGlzIHByZXNlbnQuXG4iCittc2dzdHIgIkBTIHRhbmRhIGhhc19AaiBoaWxhbmcsIHRldGFwaSBAaiAlcyBhZGEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBqb3VybmFsIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjMzCittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJAUyB0YW5kYSBuZWVkc19yZWNvdmVyeSBhZGEsIHRldGFwaSB0aWRhayBtZW1pbGlraSBAai5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgam91cm5hbCBoYXMgZGF0YS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMzgKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgQGogaGFzIGRhdGEuXG4iCittc2dzdHIgIkBTIHRhbmRhIG5lZWRfcmVjb3Zlcnkgc3VkYWggaGlsYW5nLCB0ZXRhcGkgQGogbWVtaWxpa2kgZGF0YS5cbiIKKworIy4gQC1leHBhbmRlZDogQ2xlYXIgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDMKK21zZ2lkICJDbGVhciBAaiIKK21zZ3N0ciAiSGFwdXMgQGoiCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgZmlsZXN5c3RlbS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDggZTJmc2NrL3Byb2JsZW0uYzo3MDcKK21zZ2lkICJAZiBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBAZi4gICIKK21zZ3N0ciAiQGYgbWVtaWxpa2kgZmVhdHVyZSBmbGFnKHMpIHNldCwgdGV0YXBpIG1lbWlsaWtpIHNlYnVhaCByZXZpc2kgMCBAZi4iCisKKyMuIEAtZXhwYW5kZWQ6ICVzIG9ycGhhbmVkIGlub2RlICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjUzCittc2dpZCAiJXMgQG8gQGkgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbiIKK21zZ3N0ciAiJXMgQG8gQGkgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCB1a3VyYW49JUlzKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjU4Cittc2dpZCAiQEkgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiQEkgJUIgKCViKSBkaXRlbXVrYW4gZGFsYW0gQG8gQGkgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEFscmVhZHkgY2xlYXJlZCAlQiAoJWIpIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI2MworbXNnaWQgIkFscmVhZHkgY2xlYXJlZCAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICJTdWRhaCBkaWhhcHVzICVCICglYikgZGl0ZW11a2FuIGRhbGFtIEBvIEBpICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIG9ycGhhbmVkIGlub2RlICVpIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBvIEBpICVpIGluIEBTLlxuIgorbXNnc3RyICJASSBAbyBAaSAlaSBkYWxhbSBAUy5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBpbm9kZSAlaSBpbiBvcnBoYW5lZCBpbm9kZSBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJASSBAaSAlaSBpbiBAbyBAaSBsaXN0LlxuIgorbXNnc3RyICJASSBAaSAlaSBkYWxhbSBkYWZ0YXIgQG8gQGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzgKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiQGogQFMgbWVtaWxpa2kgc2VidWFoIGZlYXR1cmUgeWFuZyB0aWRhayBkaWtldGFodWkgYWt0aWYuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODMKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiIgorIkBqIEBTIG1lbWlsaWtpIHNlYnVhaCBmZWF0dXJlIHlhbmcgdGlkYWsga29tcGF0aWJlbCB5YW5nIHRpZGFrIGRpa2V0YWh1aSAiCisiYWt0aWYuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4OAorbXNnaWQgIkBqIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbiIKK21zZ3N0ciAidmVyc2kgQGogdGlkYWsgZGlzdXBwb3J0IG9sZWggZTJmc2NrIGluaS5cbiIKKworIy4gQC1leHBhbmRlZDogTW92aW5nIGpvdXJuYWwgZnJvbSAvJXMgdG8gaGlkZGVuIGlub2RlLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1vdmluZyBAaiBmcm9tIC8lcyB0byBoaWRkZW4gQGkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJNZW1pbmRhaGthbiBAaiBkYXJpIC8lcyBrZSB0ZXJzZW1idW55aSBAaS5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgbW92aW5nIGpvdXJuYWw6ICVtXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgbW92aW5nIEBqOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiRXJyb3IgbWVtaW5kYWhrYW4gQGo6ICVtXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZvdW5kIGludmFsaWQgVjIgam91cm5hbCBzdXBlcmJsb2NrIGZpZWxkcyAoZnJvbSBWMSBqb3VybmFsKS5cbgorIy4gQC1leHBhbmRlZDogQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgam91cm5hbCBzdXBlcmJsb2NrLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMwMworbXNnaWQgIiIKKyJGb3VuZCBAbiBWMiBAaiBAUyBmaWVsZHMgKGZyb20gVjEgQGopLlxuIgorIkNsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIEBqIEBTLi4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJNZW5lbXVrYW4gQG4gVjIgQGogQFMgZmllbGRzIChkYXJpIFYxIEBqKS5cbiIKKyJNZW5naGFwdXMgZmllbGQgZGlhdGFzIGRhcmkgVjEgQGogQFMuLi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogUnVuIGpvdXJuYWwgYW55d2F5CisjOiBlMmZzY2svcHJvYmxlbS5jOjMwOQorbXNnaWQgIlJ1biBAaiBhbnl3YXkiCittc2dzdHIgIkphbGFua2FuIEBqIGJhZ2FpbWFuYXB1biIKKworIy4gQC1leHBhbmRlZDogUmVjb3ZlcnkgZmxhZyBub3Qgc2V0IGluIGJhY2t1cCBzdXBlcmJsb2NrLCBzbyBydW5uaW5nIGpvdXJuYWwgYW55d2F5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMxNAorbXNnaWQgIlJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgQFMsIHNvIHJ1bm5pbmcgQGogYW55d2F5LlxuIgorbXNnc3RyICIiCisiUmVjb3ZlcnkgZmxhZyB0aWRhayBkaXNldCBkYWxhbSBiYWNrdXAgQFMsIGphZGkgbWVuamFsYW5rYW4gQGogIgorImJhZ2FpbWFuYXB1bi5cbiIKKworIy4gQC1leHBhbmRlZDogQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTkKK21zZ2lkICIiCisiQmFja2luZyB1cCBAaiBAaSBAYiBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk1lbnlpbXBhbiBpbmZvcm1hc2kgQGogQGkgQGIuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSByZXNpemVfaW5vZGUgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpcyAlTjsgc2hvdWxkIGJlIHplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzI0Cittc2dpZCAiIgorIkBmIGRvZXMgbm90IGhhdmUgcmVzaXplX0BpIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9AYnNcbiIKKyJpcyAlTjsgQHMgemVyby4gICIKK21zZ3N0ciAiIgorIkBmIHRpZGFrIG1lbWlsaWtpIHJlc2l6ZV9AaSBha3RpZiwgdGV0YXBpIF9yZXNlcnZlZF9nZHRfQGJzXG4iCisiYWRhbGFoICVOOyBAcyBub2wuICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplX2lub2RlIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBpbm9kZSBpcyBub24temVyby4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMzAKK21zZ2lkICJSZXNpemVfQGkgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIEBpIGlzIG5vbi16ZXJvLiAgIgorbXNnc3RyICJSZXNpemVfQGkgdGlkYWsgYWt0aWYsIHRldGFwaSByZXNpemUgQGkgYnVrYW4gbm9sLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgbm90IHZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzNQorbXNnaWQgIlJlc2l6ZSBAaSBub3QgdmFsaWQuICAiCittc2dzdHIgIlJlc2l6ZSBAaSB0aWRhayB2YWxpZC4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0MAorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKyJAUyB3YWt0dSB0ZXJha2hpciBkaXBhc2FuZyAoJXQsXG4iCisiXHRzZWthcmFuZyA9ICVUKSBiZXJhZGEgZGkgbWFzYSB5YW5nIGFrYW4gZGF0YW5nLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ1Cittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorIkBTIHdha3R1IHRlcmFraGlyIGRpdHVsaXMgKCV0LFxuIgorIlx0c2VrYXJhbmcgPSAlVCkgYmVyYWRhIGRpIG1hc2EgeWFuZyBha2FuIGRhdGFuZy5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIHNob3VsZCBiZSAlWC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBAcyAlWC4gICIKK21zZ3N0ciAiQFMgcGV0dW5qdWsgdW50dWsgc3VwZXJibG9rIGx1YXIgQHMgJVguICAiCisKKyMuIEAtZXhwYW5kZWQ6IEFkZGluZyBkaXJoYXNoIGhpbnQgdG8gZmlsZXN5c3RlbS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzU0Cittc2dpZCAiIgorIkFkZGluZyBkaXJoYXNoIGhpbnQgdG8gQGYuXG4iCisiXG4iCittc2dzdHIgIiIKKyJNZW5hbWJhaGthbiBkaXJoYXMgaGludCBrZSBAZi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNTkKKyMsIGZ1enp5Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gICIKK21zZ3N0ciAiQGcgZGVza3JpcHNpICVnIGNoZWNrc3VtIHRpZGFrIHZhbGlkLiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbiIKK21zZ3N0ciAiQGcgZGVza3JpcHNpICVnIGRpdGFuZGFpIHVuaW50aWFsaXNhc2kgdGFucGEgbWVuc2V0IGZlYXR1cmUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNjkKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAiCittc2dzdHIgIkBnIGRlc2tyaXBzaSAlZyBtZW1pbGlraSBpbm9kZSB5YW5nIHRpZGFrIHZhbGlkIHRlcmhpdHVuZyAlYi4gICIKKworIy4gQC1leHBhbmRlZDogTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNzQKK21zZ2lkICJMYXN0IEBnIEBiIEBCIHVuaW5pdGlhbGl6ZWQuICAiCittc2dzdHIgIlRlcmFraGlyIEBnIEBiIEBCIHRpZGFrIHRlcmluaXRpYWxpc2FzaS4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB0cmFuc2FjdGlvbiAlaSB3YXMgY29ycnVwdCwgcmVwbGF5IHdhcyBhYm9ydGVkLlxuIgorbXNnc3RyICJKdXJuYWwgdHJhbnNha3NpICVpIHRlcmtvcnVwc2ksIGJhbGFzYW4gZGliYXRhbGthbi5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozODMKK21zZ2lkICJUaGUgdGVzdF9mcyBmbGFnIGlzIHNldCAoYW5kIGV4dDQgaXMgYXZhaWxhYmxlKS4gICIKK21zZ3N0ciAiVGFuZGEgdGVzdF9mcyB0ZWxhaCBha3RpZiAoZGFuIGV4dDQgdGVyc2VkaWEpLiAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzg4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldClcbiIKK21zZ3N0ciAiIgorIkBTIHdha3R1IHBhc2FuZyB0ZXJha2hpciBiZXJhZGEgZGkgbWFzYSB5YW5nIGFrYW4gZGF0YW5nLlxuIgorIlx0KGxlYmloIGtlY2lsIHNlaGFyaSwgbXVuZ2tpbiBrYXJlbmEgcGVyYW5na2F0IGphbSBkaXNldCB0aWRhayBiZW5hcikgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzk0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldClcbiIKK21zZ3N0ciAiIgorIkBTIHdha3R1IHR1bGlzIHRlcmFraGlyIGJlcmFkYSBkaW1hc2EgeWFuZyBha2FuIGRhdGFuZy5cbiIKKyJcdChsZWJpaCBrZWNpbCBzZWhhcmksIG11bmdraW4ga2FyZW5hIHBlcmFuZ2thdCBqYW0gZGlzZXQgdGlkYWsgYmVuYXIpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IE9uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwMAorbXNnaWQgIk9uZSBvciBtb3JlIEBiIEBnIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgIgorbXNnc3RyICJTYXR1IGF0YXUgbGViaWggQGIgQGcgcGVuZGVza3JpcHNpIGNoZWNrc3VtIHRpZGFrIHZhbGlkLiAgIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgaW5vZGVzIGNvdW50IHRvICVqICh3YXMgJWkpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDA1CisjLCBmdXp6eQorbXNnaWQgIlNldHRpbmcgZnJlZSBAaXMgY291bnQgdG8gJWogKHdhcyAlaSlcbiIKK21zZ3N0ciAiTWVuc2V0IGp1bWxhaCByZXNlcnZlZCBibG9rIGtlICVsdVxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgYmxvY2tzIGNvdW50IHRvICVjICh3YXMgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDEwCisjLCBmdXp6eQorbXNnaWQgIlNldHRpbmcgZnJlZSBAYnMgY291bnQgdG8gJWMgKHdhcyAlYilcbiIKK21zZ3N0ciAiTWVuc2V0IGp1bWxhaCByZXNlcnZlZCBibG9rIGtlICVsdVxuIgorCisjLiBALWV4cGFuZGVkOiBNYWtpbmcgcXVvdGEgaW5vZGUgJWkgKCVRKSBoaWRkZW4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDE1CisjLCBmdXp6eQorbXNnaWQgIk1ha2luZyBAcSBAaSAlaSAoJVEpIGhpZGRlbi5cbiIKK21zZ3N0ciAiIgorIk1lbWluZGFoa2FuIEBqIGRhcmkgLyVzIGtlIHRlcnNlbWJ1bnlpIEBpLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjAKKyMsIGZ1enp5Cittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgIgorbXNnc3RyICJVa3VyYW4gYmxvayB0aWRhayB2YWxpZCAtICVzIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjUKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX29wZW4yOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDM1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19jaGVja19kZXNjOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgNjRiaXQgZmlsZXN5c3RlbXMgbmVlZHMgZXh0ZW50cyB0byBhY2Nlc3MgdGhlIHdob2xlIGRpc2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQwCittc2dpZCAiQFMgNjRiaXQgZmlsZXN5c3RlbXMgbmVlZHMgZXh0ZW50cyB0byBhY2Nlc3MgdGhlIHdob2xlIGRpc2suICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0NDUKK21zZ2lkICJGaXJzdF9tZXRhX2JnIGlzIHRvbyBiaWcuICAoJU4sIG1heCB2YWx1ZSAlZykuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDUyCittc2dpZCAiUGFzcyAxOiBDaGVja2luZyBAaXMsIEBicywgYW5kIHNpemVzXG4iCittc2dzdHIgIlRhaGFwIDE6IE1lbWVyaWtzYSBAaSwgQGJzLCBkYW4gdWt1cmFuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1NgorbXNnaWQgIkByIGlzIG5vdCBhIEBkLiAgIgorbXNnc3RyICJAciBidWthbiBzZWJ1YWggQGQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2MQorbXNnaWQgIkByIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gICIKK21zZ3N0ciAiIgorIkByIG1lbWlsaWtpIGR0aW1lIHRlcnNldCAobXVuZ2tpbiBrYXJlbmEgcGVuZ2d1bmFhbiBta2UyZnMgdmVyc2kgbGFtYSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2VydmVkIGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjYKK21zZ2lkICJSZXNlcnZlZCBAaSAlaSAoJVEpIGhhcyBAbiBtb2RlLiAgIgorbXNnc3RyICJSZXNlcnZlZCBAaSAlaSAoJVEpIG1lbWlsaWtpIEBuIG1vZGUuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGRlbGV0ZWQgaW5vZGUgJWkgaGFzIHplcm8gZHRpbWUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBEIEBpICVpIGhhcyB6ZXJvIGR0aW1lLiAgIgorbXNnc3RyICJARCBAaSAlaSBtZW1pbGlraSBkdGltZSBub2wuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAiCittc2dzdHIgIkBpICVpIHNlZGFuZyBkaWd1bmFrYW4sIHRldGFwaSBtaWxpa2kgZHRpbWUgdGVyc2V0LiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhIHplcm8tbGVuZ3RoIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgYSBAeiBAZC4gICIKK21zZ3N0ciAiQGkgJWkgYWRhbGFoIHNlYnVhaCBAeiBAZC4gICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODYKK21zZ2lkICJAZyAlZydzIEBiIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICJAZyAlZydzIEBiIEBCIGRpICViIEBDLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5MQorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIkBnICVnJ3MgQGkgQEIgZGkgJWIgQEMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgdGFibGUgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTYKK21zZ2lkICJAZyAlZydzIEBpIHRhYmxlIGF0ICViIEBDLlxuIgorbXNnc3RyICJARyAlZydzIEBpIHRhYmVsIGRpICViIEBDLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDEKK21zZ2lkICJAZyAlZydzIEBiIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJAZyAlZydzIEBiIEBCICglYikgYWRhbGFoIGJ1cnVrLiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDYKK21zZ2lkICJAZyAlZydzIEBpIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJAZyAlZydzIEBpIEBCICglYikgYWRhbGFoIGJ1cnVrLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9zaXplIGlzICVJcywgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxMQorbXNnaWQgIkBpICVpLCBpX3NpemUgaXMgJUlzLCBAcyAlTi4gICIKK21zZ3N0ciAiQGkgJWksIGlfc2l6ZSBhZGFsYWggJUlzLCBAcyAlTi4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfYmxvY2tzIGlzICVJYiwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxNgorbXNnaWQgIkBpICVpLCBpX0BicyBpcyAlSWIsIEBzICVOLiAgIgorbXNnc3RyICJAaSAlaSwgaV9AYnMgYWRhbGFoICVJYiwgQHMgJU4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBpbiBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MjEKK21zZ2lkICJASSAlQiAoJWIpIGluIEBpICVpLiAgIgorbXNnc3RyICJASSAlQiAoJWIpIGRhbGFtIEBpICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIG92ZXJsYXBzIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI2Cittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiJUIgKCViKSBzYWxpbmcgYmVydHVtcGFuZyB0aW5kaWggQGYgbWV0YWRhdGEgZGFsYW0gQGkgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiQGkgJWkgbWVtaWxpa2kgQGIocykgaWxlZ2FsLiAgIgorCisjLiBALWV4cGFuZGVkOiBUb28gbWFueSBpbGxlZ2FsIGJsb2NrcyBpbiBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgaWxsZWdhbCBAYnMgaW4gQGkgJWkuXG4iCittc2dzdHIgIlRlcmxhbHUgYmFueWFrIGlsZWdhbCBAYnMgZGFsYW0gQGkgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBpbiBiYWQgYmxvY2sgaW5vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQxCittc2dpZCAiQEkgJUIgKCViKSBpbiBiYWQgQGIgQGkuICAiCittc2dzdHIgIkBJICVCICglYikgZGFsYW0gQGIgQGkgYnVydWsuICAiCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDYKK21zZ2lkICJCYWQgQGIgQGkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIkBiIEBpIGJ1cnVrIG1lbWlsaWtpIGlsZWdhbCBAYihzKS4gICIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIG9yIGJhZCBibG9jayBpbiB1c2UhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUxCittc2dpZCAiRHVwbGljYXRlIG9yIGJhZCBAYiBpbiB1c2UhXG4iCittc2dzdHIgIkR1cGxpa2FzaSBhdGF1IEBiIGJ1cnVrIHNlZGFuZyBkaWd1bmFrYW4hXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayAlYiB1c2VkIGFzIGJhZCBibG9jayBpbm9kZSBpbmRpcmVjdCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTYKK21zZ2lkICJCYWQgQGIgJWIgdXNlZCBhcyBiYWQgQGIgQGkgaW5kaXJlY3QgQGIuICAiCittc2dzdHIgIkBiICViIGJ1cnVrIHlhbmcgZGlndW5ha2FuIHNhbWEgYnVydWtueWEgZGVuZ2FuIEBiIEBpIGluZGlyZWN0IEBiLiAgIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbgorIy4gQC1leHBhbmRlZDogc2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaW4gdGhlIGZpbGVzeXN0ZW0uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYxCittc2dpZCAiIgorIlxuIgorIlRoZSBiYWQgQGIgQGkgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4iCisic2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbiIKKyJpbiB0aGUgQGYuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJAYiBAaSBidXJ1ayB0ZWxhaCB0ZXJrb3J1cHNpLiBBbmRhIHNlaGFydXNueWEgYmVyaGVudGlcbiIKKyJzZWthcmFuZyBkYW4gbWVuamFsYW5rYW4gZTJmc2NrIC1jIHVudHVrIG1lbnNjYW4gdW50dWtcbiIKKyJtZW5jYXJpIGJsb2sgYnVydWsgZGFsYW0gQGYuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBJZiB0aGUgYmxvY2sgaXMgcmVhbGx5IGJhZCwgdGhlIGZpbGVzeXN0ZW0gY2FuIG5vdCBiZSBmaXhlZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjgKK21zZ2lkICIiCisiXG4iCisiSWYgdGhlIEBiIGlzIHJlYWxseSBiYWQsIHRoZSBAZiBjYW4gbm90IGJlIGZpeGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiSmlrYSBAYiBhZGFsYWggc2FuZ2F0IGJ1cnVrLCBAZiB0aWRhayBkYXBhdCBkaWJldHVsa2FuLlxuIgorCisjLiBALWV4cGFuZGVkOiBZb3UgY2FuIHJlbW92ZSB0aGlzIGJsb2NrIGZyb20gdGhlIGJhZCBibG9jayBsaXN0IGFuZCBob3BlXG4KKyMuIEAtZXhwYW5kZWQ6IHRoYXQgdGhlIGJsb2NrIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTczCittc2dpZCAiIgorIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKyJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJBbmRhIGRhcGF0IG1lbmdoYXB1cyBAYiBpbmkgZGFyaSBkYWZ0YXIgQGIgYnVydWsgZGFuIGJlcmhhcmFwXG4iCisiQGIgYmVuYXIgYmVuYXIgT0suIFRldGFwaSB0aWRhayBnYXJhbnNpIHVudHVrIGhhbCBpbmkuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgKCViKSBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTc5Cittc2dpZCAiVGhlIHByaW1hcnkgQFMgKCViKSBpcyBvbiB0aGUgYmFkIEBiIGxpc3QuXG4iCittc2dzdHIgIkBTICglYikgdXRhbWEgYmVyYWRhIGRhbGFtIGRhZnRhciBAYiBidXJ1ay5cbiIKKworIy4gQC1leHBhbmRlZDogQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgZ3JvdXAgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTg0Cittc2dpZCAiQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgQGcgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBAYiBsaXN0XG4iCittc2dzdHIgIkJsb2sgJWIgZGFsYW0gZGVza3JpcHNpIEBnIHV0YW1hIGJlcmFkYSBkYWxhbSBkYWZ0YXIgQGIgYnVydWtcbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBzdXBlcmJsb2NrICglYikgaXMgYmFkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5MAorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgQFMgKCViKSBpcyBiYWQuXG4iCittc2dzdHIgIlBlcmluZ2F0YW46IEdydXAgJWcncyBAUyAoYikgYnVydWsuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIGJsb2NrICglYikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTk1Cittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBAZyBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgQGIgKCViKS5cbiIKK21zZ3N0ciAiIgorIlBlcmluZ2F0YW46IEdydXAgJWcncyBzYWxpbmFuIGRhcmkgZGVza3JpcHNpIEBnIG1lbWlsaWtpIHNlYnVhaCBAYiAoJWIpICIKKyJidXJ1ay5cbiIKKworIy4gQC1leHBhbmRlZDogUHJvZ3JhbW1pbmcgZXJyb3I/ICBibG9jayAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX2Jsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwMQorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yPyAgQGIgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9AYi5cbiIKK21zZ3N0ciAiIgorIlByb2dyYW1taW5nIGVycm9yPyBAYiAjJWIgdGVya2xhaW0gdW50dWsgdGlkYWsgYWRhIGFsYXNhbiBkYWxhbSAiCisicHJvY2Vzc19iYWRfQGIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgJU4gY29udGlndW91cyBibG9jayhzKSBpbiBibG9jayBncm91cCAlZyBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjA3Cittc2dpZCAiQEEgJU4gY29udGlndW91cyBAYihzKSBpbiBAYiBAZyAlZyBmb3IgJXM6ICVtXG4iCittc2dzdHIgIkBBICVOIGtvbnRpbnUgQGIocykgZGFsYW0gQGIgQGcgJWcgdW50dWsgJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBiIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuIgorbXNnc3RyICJAQSBAYiBidWZmZXIgdW50dWsgcmVsb2thc2kgJXNcbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTcKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuIgorbXNnc3RyICJNZW1pbmRhaGthbiBAZyAlZydzICVzIGRhcmkgJWIga2UgJWMuLi5cbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyB0byAlYy4uLlxuIgorbXNnc3RyICJNZW1pbmRhaGthbiBAZyAlZydzICVzIGtlICVjLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrICViIG9mICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyNworbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIEBiICViIG9mICVzOiAlbVxuIgorbXNnc3RyICJQZXJpbmdhdGFuOiB0aWRhayBkYXBhdCBtZW1iYWNhIEBiICViIGRhcmkgJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBibG9jayAlYiBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMyCittc2dpZCAiV2FybmluZzogY291bGQgbm90IHdyaXRlIEBiICViIGZvciAlczogJW1cbiIKK21zZ3N0ciAiUGVyaW5nYXRhbjogdGlkYWsgZGFwYXQgbWVudWxpcyBAYiAlYiB1bnR1ayAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzcgZTJmc2NrL3Byb2JsZW0uYzoxNTAxCittc2dpZCAiQEEgQGkgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiQEEgQGkgQEIgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDIKK21zZ2lkICJAQSBAYiBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICJAQSBAYiBAQiAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbiIKK21zZ3N0ciAiQEEgaWNvdW50IGxpbmsgaW5mb3JtYXNpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGRpcmVjdG9yeSBibG9jayBhcnJheTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGQgQGIgYXJyYXk6ICVtXG4iCittc2dzdHIgIkBBIEBkIEBiIGFycmF5OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgIkVycm9yIGtldGlrYSBtZWxha3VrYW4gc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJFcnJvciBrZXRpa2EgbWVuZ2l0ZXJhc2kgbWVsYWx1aSBAYnMgZGFsYW0gQGkgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBjb3VudD0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjY3Cittc2dpZCAiRXJyb3Igc3RvcmluZyBAaSBjb3VudCBpbmZvcm1hdGlvbiAoQGk9JWksIGNvdW50PSVOKTogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWVueWltcGFuIEBpIGNvdW50IGluZm9ybWFzaSAoQGk9JWksIGNvdW50PSVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBkaXJlY3RvcnkgYmxvY2sgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBibG9jaz0lYiwgbnVtPSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzIKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBkIEBiIGluZm9ybWF0aW9uIChAaT0laSwgQGI9JWIsIG51bT0lTik6ICVtXG4iCittc2dzdHIgIkVycm9yIG1lbnlpbXBhbiBAZCBAYiBpbmZvcm1hc2kgKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWVtYmFjYSBAaSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gICIKK21zZ3N0ciAiQGkgJWkgbWVtaWxpa2kgZmxhZyBpbWFnaWMgdGVyc2V0LiAgIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoaW5vZGUgJWkpIGhhcyBpbW11dGFibGVcbgorIy4gQC1leHBhbmRlZDogb3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTcGVjaWFsIChAdi9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChAaSAlaSkgaGFzIGltbXV0YWJsZVxuIgorIm9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgIgorbXNnc3RyICIiCisiU3Blc2lhbCAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgYmVya2FzIChAaSAlaSkgbWVtaWxpa2kga2V0YWhhbmFuXG4iCisiYXRhdSBhcHBlbmQtb25seSBmbGFnIHRlcnNldC4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBjb21wcmVzc2lvbiBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgY29tcHJlc3Npb24gc3VwcG9ydC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEBjaW9uIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgQGNpb24gc3VwcG9ydC4gICIKK21zZ3N0ciAiQGkgJWkgbWVtaWxpa2kgQGNpb24gZmxhZyB0ZXJzZXQgcGFkYSBAZiB0YW5wYSBsYXlhbmFuIEBjaW9uLiAgIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8pIGlub2RlICVpIGhhcyBub24temVybyBzaXplLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWFsIChAdi9zb2NrZXQvZmlmbykgQGkgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAiCittc2dzdHIgIlNwZXNpYWwgKEB2L3NvY2tldC9maWZvKSBAaSAlaSBtZW1pbGlraSB1a3VyYW4ga29zb25nLiAgIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxMgorbXNnaWQgIkBqIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJAaiBAaSBzZWRhbmcgdGlkYWsgZGlndW5ha2FuLCB0ZXRhcGkgYmVyaXNpIGRhdGEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MTcKK21zZ2lkICJAaiBpcyBub3QgcmVndWxhciBmaWxlLiAgIgorbXNnc3RyICJAaiBidWthbiBzZWJ1YWggZmlsZSByZWd1bGFyLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgd2FzIHBhcnQgb2YgdGhlIEBvIEBpIGxpc3QuICAiCittc2dzdHIgIkBpICVpIGFkYWxhaCBiYWdpYW4gZGFyaSBkYWZ0YXIgQG8gQGkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzI4Cittc2dpZCAiQGlzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gICIKK21zZ3N0ciAiIgorIkBpIGFkYWxhaCBiYWdpYW4gZGFyaSBvcnBoYW4gdGVya29ydXBzaSB5YW5nIGRpdGVtdWthbiBkYXJpIGxpbmtlZCBsaXN0LiAgIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjczMworbXNnaWQgIkBBIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuIgorbXNnc3RyICJAQSByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgZm9yIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjczOAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgZm9yIEBpICVpLiAgIgorbXNnc3RyICJFcnJvciBtZW1iYWNhIEBhIEBiICViIHVudHVrIEBpICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBiYWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0MworbXNnaWQgIkBpICVpIGhhcyBhIGJhZCBAYSBAYiAlYi4gICIKK21zZ3N0ciAiQGkgJWkgbWVtaWxpa2kgc2VidWFoIEBhIEBiICViIGJ1cnVrLiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDgKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkVycm9yIG1lbWJhY2EgQGEgQGIgJWIgKCVtKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTMKK21zZ2lkICJAYSBAYiAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBAcyAlTi4gICIKK21zZ3N0ciAiQGEgQGIgJWIgbWVtaWxpa2kganVtbGFoIHJlZmVyZW5zaSAlciwgQHMgJU4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzU4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJFcnJvciBtZW51bGlzIEBhIEBiICViICglbSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgaF9ibG9ja3MgPiAxLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2MworbXNnaWQgIkBhIEBiICViIGhhcyBoX0BicyA+IDEuICAiCittc2dzdHIgIkBhIEBiICViIG1lbWlsaWtpIGhfQGJzID4gMS4gICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzY4Cittc2dpZCAiQEEgQGEgQGIgJWIuICAiCittc2dzdHIgIkBBIEBhIEBiICViLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3MworbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gICIKK21zZ3N0ciAiQGEgQGIgJWIgYWRhbGFoIGtvcnVwIChiZW50cm9rIGRhbGFtIGFsb2thc2kpLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCBuYW1lKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzgKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiBuYW1lKS4gICIKK21zZ3N0ciAiQGEgQGIgJWIgYWRhbGFoIGtvcnVwIChAbiBuYW1hKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgdmFsdWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4MworbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIHZhbHVlKS4gICIKK21zZ3N0ciAiQGEgQGIgJWIgYWRhbGFoIGtvcnVwIChAbiB2YWx1ZSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIHRvbyBiaWcuICAiCittc2dzdHIgIkBpICVpIHRlcmxhbHUgYmVzYXIuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgY2F1c2VzIGRpcmVjdG9yeSB0byBiZSB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5MgorbXNnaWQgIiVCICglYikgY2F1c2VzIEBkIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikgbWVueWViYWJrYW4gQGQgdGVybGFsdSBiZXNhci4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OTcKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBmaWxlIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikgbWVueWViYWJrYW4gYmVya2FzIHRlcmxhbHUgYmVzYXIuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAyCittc2dpZCAiJUIgKCViKSBjYXVzZXMgc3ltbGluayB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIG1lbnllYmFia2FuIHN5bWxpbmsgdGVybGFsdSBiZXNhci4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuIgorbXNnc3RyICJAaSAlaSBtZW1pbGlraSBJTkRFWF9GTCBmbGFnIHRlcnNldCBkaSBAZiB0YW5wYSBiYW50dWFuIGh0cmVlLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIGRpcmVjdG9yeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IGJ1dCBpcyBub3QgYSBAZC5cbiIKK21zZ3N0ciAiQGkgJWkgbWVtaWxpa2kgSU5ERVhfRkwgZmxhZyB0ZXJzZXQgdGV0YXBpIHRpZGFrIHNlYnVhaCBAZFxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgcm9vdCBub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxNworIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSBoYXMgYW4gQG4gcm9vdCBub2RlLlxuIgorbXNnc3RyICJAaCAlaSBtZW1pbGlraSBzZWJ1YWggQG4gdGl0aWsgcm9vdC5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiB1bnN1cHBvcnRlZCBoYXNoIHZlcnNpb24gKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyMgorbXNnaWQgIkBoICVpIGhhcyBhbiB1bnN1cHBvcnRlZCBoYXNoIHZlcnNpb24gKCVOKVxuIgorbXNnc3RyICJAaCAlaSBtZW1pbGlraSBzZWJ1YWggdmVyc2kgaGFzaCB5YW5nIHRpZGFrIGRpbGF5YW5pICglTilcbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAiIgorIkBoICVpIG1lbmdndW5ha2FuIHNlYnVhaCBodHJlZSB5YW5nIHRpZGFrIGtvbXBhdGlibGUgZGkgdGl0aWsgcm9vdCBmbGFnLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzIKK21zZ2lkICJAaCAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuIgorbXNnc3RyICJAaCAlaSBtZW1pbGlraSBzZWJ1YWgga2VkYWxhbWFuIHBvaG9uICglTikgeWFuZyB0ZXJsYWx1IGJlc2FyXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgYW4gaW5kaXJlY3QgYmxvY2sgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gbWV0YWRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODM3Cittc2dpZCAiIgorIkJhZCBAYiBAaSBoYXMgYW4gaW5kaXJlY3QgQGIgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4iCisiQGYgbWV0YWRhdGEuICAiCittc2dzdHIgIiIKKyJCdXJ1ayBAYiBAaSBtZW1pbGlraSBzZWJ1YWggQGIgKCViKSB0aWRhayBsYW5nc3VuZyB5YW5nIGtvbmZsaWsgZGVuZ2FuXG4iCisiQGYgbWV0YWRhdGEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSAocmUpY3JlYXRpb24gZmFpbGVkOiAlbS4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6ZSBAaSAocmUpY3JlYXRpb24gZmFpbGVkOiAlbS4iCittc2dzdHIgIlJlc2l6ZSBAaSBnYWdhbCBtZW1idWF0IGtlbWJhbGk6ICVtLiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQ4Cittc2dpZCAiQGkgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJAaSAlaSBtZW1pbGlraSBzZWJ1YWggdWt1cmFuIGV4dHJhICglSVMpIHlhbmcgYmVyaXNpIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJAYSBkYWxhbSBAaSAlaSBtZW1pbGlraSBzZWJ1YWggcGFuamFuZyBuYW1hICglTikgeWFuZyBiZXJpc2kgQG5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTgKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJAYSBkYWxhbSBAaSAlaSBtZW1pbGlraSBuaWxhaSBvZnNldCAoJU4pIHlhbmcgYmVyaXNpIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBibG9jayAoJU4pIHdoaWNoIGlzIGludmFsaWQgKG11c3QgYmUgMClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjMKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBAYiAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCittc2dzdHIgIiIKKyJAYSBkYWxhbSBAaSAlaSBtZW1pbGlraSBzZWJ1YWggbmlsYWkgQGIgKCVOKSB5YW5nIGJlcmlzaSBAbiAoc2VoYXJ1c255YSAwKVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjgKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiIgorIkBhIGRhbGFtIEBpICVpIG1lbWlsaWtpIHNlYnVhaCBuaWxhaSB5YW5nIGJlcnVrdXJhbiAoJU4pIHlhbmcgYmVyaXNpIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJAYSBkYWxhbSBAaSAlaSBtZW1pbGlraSBzZWJ1YWggaGFzaCAoJU4pIHlhbmcgYmVyaXNpIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzgKK21zZ2lkICJAaSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4iCittc2dzdHIgIiIKKyJAaSAlaSBhZGFsYWggc2VidWFoICVJdCB0ZXRhcGkgc2VwZXJ0aW55YSBiZW5hciBiZW5hciBzZWJ1YWggZGlyZWt0b3JpLlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgZXh0ZW50IHRyZWUgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBAeCB0cmVlIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJFcnJvciBrZXRpa2EgbWVtYmFjYSBkaWF0YXMgQHggdHJlZSBkYWxhbSBAaSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBpbm9kZSAlaVxuCisjLiBALWV4cGFuZGVkOiBcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODgKK21zZ2lkICIiCisiRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBAaSAlaVxuIgorIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuIgorbXNnc3RyICIiCisiR2FnYWwgbWVuZ2l0ZXJhc2kgZXh0ZW5zIGRhbGFtIEBpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBpbnZhbGlkIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk0Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBAbiBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiQGkgJWkgbWVtaWxpa2kgc2VidWFoIGV4dGVuc2kgQG5cbiIKKyJcdChsb2dpY2FsIEBiICVjLCBAbiBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGludmFsaWQgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5OQorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIEBuIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIkBpICVpIG1lbWlsaWtpIHNlYnVhaCBlbnRlbnNpIEBuXG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIEBuIGxlbiAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4iCittc2dzdHIgIkBpICVpIG1lbWlsaWtpIEVYVEVOVFNfRkwgdGFuZGEgc2V0IGRpIEBmIHRhbnBhIHN1cHBvcnQgZXh0ZW5zaS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IHN1cGVyYmxvY2sgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IEBTIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4iCittc2dzdHIgIkBpICVpIGFkYWxhaCBzZWJ1YWggZm9ybWF0IGV4dGVuc2ksIHRldGFwaSBAUyBoaWxhbmcgZmVhdHVyZSBFWFRFTlRTXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuIgorbXNnc3RyICJAaSAlaSBoaWxhbmcgRVhURU5UX0ZMLCB0ZXRhcGkgYWRhbGFoIHNlYnVhaCBmb3JtYXQgZXh0ZW5zaVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0IHN5bWxpbmsgJWkgaGFzIEVYVEVOVF9GTCBzZXQuICAiCittc2dzdHIgIkZhc3Qgc3ltbGluayAlaSBtZW1pbGlraSBFWFRFTlRfRkwgdGVyc2V0LiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyNAorbXNnaWQgIiIKKyJAaSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiQGkgJWkgdGVsYWggdGlkYWsgdGVyYXR1ciBleHRlbnNpbnlhXG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjgKK21zZ2lkICJAaSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuIgorbXNnc3RyICJAaSAlaSBtZW1pbGlraSBzZWJ1YWggdGl0aWsgZWtzdGVuc2kgdGlkYWsgdmFsaWQgKGJsayAlYiwgbGJsayAlYylcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBAYiBAQjogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWVuZ2l0ZXJhc2kgbWVsYWx1aSBAZCBAYnM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTM4CisjLCBmdXp6eQorbXNnaWQgIkBxIEBpIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkBqIGJ1a2FuIHNlYnVhaCBmaWxlIHJlZ3VsYXIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0MworIywgZnV6enkKK21zZ2lkICJAcSBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiQGogQGkgc2VkYW5nIHRpZGFrIGRpZ3VuYWthbiwgdGV0YXBpIGJlcmlzaSBkYXRhLiAgIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0OAorIywgZnV6enkKK21zZ2lkICJAcSBAaSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgIgorbXNnc3RyICJAaSAlaSBzZWRhbmcgZGlndW5ha2FuLCB0ZXRhcGkgbWlsaWtpIGR0aW1lIHRlcnNldC4gICIKKworIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBsb29rcyBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1MworIywgZnV6enkKK21zZ2lkICJUaGUgYmFkIEBiIEBpIGxvb2tzIEBuLiAgIgorbXNnc3RyICI8QmFkIGJsb2NrIGlub2RlPiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1OAorIywgZnV6enkKK21zZ2lkICIiCisiQGkgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViKVxuIgorbXNnc3RyICIiCisiQGkgJWkgdGVsYWggdGlkYWsgdGVyYXR1ciBleHRlbnNpbnlhXG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKKworIy4gQC1leHBhbmRlZDogSW50ZXJpb3IgZXh0ZW50IG5vZGUgbGV2ZWwgJU4gb2YgaW5vZGUgJWk6XG4KKyMuIEAtZXhwYW5kZWQ6IExvZ2ljYWwgc3RhcnQgJWIgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAlYyBhdCBuZXh0IGxldmVsLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2NQorbXNnaWQgIiIKKyJJbnRlcmlvciBAeCBub2RlIGxldmVsICVOIG9mIEBpICVpOlxuIgorIkxvZ2ljYWwgc3RhcnQgJWIgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAlYyBhdCBuZXh0IGxldmVsLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBlbmQgb2YgZXh0ZW50IGV4Y2VlZHMgYWxsb3dlZCB2YWx1ZVxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3MQorIywgZnV6enkKK21zZ2lkICIiCisiQGkgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIkBpICVpIG1lbWlsaWtpIHNlYnVhaCBleHRlbnNpIEBuXG4iCisiXHQobG9naWNhbCBAYiAlYywgQG4gcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGJsb2NrICViIHNob3VsZCBiZSBhdCBibG9jayAlYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzcKKyMsIGZ1enp5Cittc2dpZCAiQGQgQGkgJWkgQGIgJWIgc2hvdWxkIGJlIGF0IEBiICVjLiAgIgorbXNnc3RyICJAaSAlaSBtZW1pbGlraSBzZWJ1YWggQGEgQGIgJWIgYnVydWsuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGV4dGVudCBtYXJrZWQgdW5pbml0aWFsaXplZCBhdCBibG9jayAlYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5ODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkBkIEBpICVpIGhhcyBAeCBtYXJrZWQgdW5pbml0aWFsaXplZCBhdCBAYiAlYy4gICIKK21zZ3N0ciAiQGQgQGkgJWkgbWVtaWxpa2kgIyVCIHlhbmcgdGlkYWsgdGVyYWxva2FzaS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbG9naWNhbCBibG9jayAlYiAocGh5c2ljYWwgYmxvY2sgJWMpIHZpb2xhdGVzIGNsdXN0ZXIgYWxsb2NhdGlvbiBydWxlcy5cbgorIy4gQC1leHBhbmRlZDogV2lsbCBmaXggaW4gcGFzcyAxQi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5ODcKK21zZ2lkICIiCisiQGkgJWkgbG9naWNhbCBAYiAlYiAocGh5c2ljYWwgQGIgJWMpIHZpb2xhdGVzIGNsdXN0ZXIgYWxsb2NhdGlvbiBydWxlcy5cbiIKKyJXaWxsIGZpeCBpbiBwYXNzIDFCLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLlxuCisjLiBALWV4cGFuZGVkOiBQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk5NAorbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgQGJzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBAaS4uLlxuIgorIlBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIEBtIEBic1xuIgorbXNnc3RyICIiCisiXG4iCisiTWVuamFsYW5rYW4gdGFoYXAgdGFtYmFoYW4gdW50dWsgbWVyZXNvbHZlIEBicyBkaWtsYWltIG9sZWggbGViaWggZGFyaSBzYXR1ICIKKyJAaS4uLlxuIgorIlRhaGFwIDFCOiBNZW5zY2FuIGtlbWJhbGkgdW50dWsgQG0gQGJzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgJWk6CisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG0gQGIocykgaW4gQGkgJWk6IgorbXNnc3RyICJAbSBAYihzKSBkYWxhbSBAaSAlaToiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbiIKK21zZ3N0ciAiRXJyb3Iga2V0aWthIG1lbnNjYW4gaW5vZGVzICglaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwIChpbm9kZV9kdXBfbWFwKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBpIEBCIChAaV9kdXBfbWFwKTogJW1cbiIKK21zZ3N0ciAiQEEgQGkgQEIgKEBpX2R1cF9tYXApOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJFcnJvciBrZXRpa2EgbWVuZ2l0ZXJhc2kgZGkgQGJzIGRhbGFtIEBpICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzMCBlMmZzY2svcHJvYmxlbS5jOjEzNDUKK21zZ2lkICJFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIEBhIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkVycm9yIG1lbnllc3VhaWthbiByZWZjb3VudCB1bnR1ayBAYSBAYiAlYiAoQGkgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDM1Cittc2dpZCAiUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIEBpcyB3aXRoIEBtIEBic1xuIgorbXNnc3RyICJUYWhhcCAxQzogTWVtZXJpa3NhIGRpcmVrdG9yaSB1bnR1ayBAaXMgZGVuZ2FuIEBtIEBic1xuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDEKK21zZ2lkICJQYXNzIDFEOiBSZWNvbmNpbGluZyBAbSBAYnNcbiIKK21zZ3N0ciAiVGFoYXAgMUQ6IE1lbWJldHVsa2FuIEBtIEBic1xuIgorCisjLiBALWV4cGFuZGVkOiBGaWxlICVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSkgXG4KKyMuIEAtZXhwYW5kZWQ6ICAgaGFzICVyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0NgorbXNnaWQgIiIKKyJGaWxlICVRIChAaSAjJWksIG1vZCB0aW1lICVJTSkgXG4iCisiICBoYXMgJXIgQG0gQGIocyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4iCittc2dzdHIgIiIKKyJCZXJrYXMgJVEgKEBpICMlaSwgd2FrdHUgYmVydWJhaCAlSU0pIFxuIgorIiAgbWVtaWxpa2kgJXIgQG0gQGIocyksIGRpYmFnaSBkZW5nYW4gJU4gYmVya2FzOlxuIgorCisjLiBALWV4cGFuZGVkOiBcdCVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDUyCittc2dpZCAiXHQlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pXG4iCittc2dzdHIgIlx0JVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKVxuIgorCisjLiBALWV4cGFuZGVkOiBcdDxmaWxlc3lzdGVtIG1ldGFkYXRhPlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTcKK21zZ2lkICJcdDxAZiBtZXRhZGF0YT5cbiIKK21zZ3N0ciAiXHQ8QGYgbWV0YWRhdGE+XG4iCisKKyMuIEAtZXhwYW5kZWQ6IChUaGVyZSBhcmUgJU4gaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDYyCittc2dpZCAiIgorIihUaGVyZSBhcmUgJU4gQGlzIGNvbnRhaW5pbmcgQG0gQGJzLilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIihBZGEgJU4gQGlzIGJlcmlzaSBAbSBAYnMuKVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY3Cittc2dpZCAiIgorIkBtIEBicyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiQG0gQGJzIHRlbGFoIGRpYXNzaWduIGF0YXUgZGlrb3BpLlxuIgorIlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY2xvbmUgZmlsZTogJW1cbiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVueWFsaW4gZmlsZTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4NgorbXNnaWQgIlBhc3MgMjogQ2hlY2tpbmcgQGQgc3RydWN0dXJlXG4iCittc2dzdHIgIlRhaGFwIDI6IE1lbWVyaWtzYSBzdHJ1a3R1ciBAZFxuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIGlub2RlIG51bWJlciBmb3IgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBuIEBpIG51bWJlciBmb3IgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJAbiBAaSBqdW1sYWggdW50dWsgJy4nIGRhbGFtIEBkIEBpICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbnZhbGlkIGlub2RlICM6ICVEaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDk2Cittc2dpZCAiQEUgaGFzIEBuIEBpICM6ICVEaS5cbiIKK21zZ3N0ciAiQEUgbWVtaWxpa2kgQG4gQGkgIzogJURpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSAlRGkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwMQorbXNnaWQgIkBFIGhhcyBARC91bnVzZWQgQGkgJURpLiAgIgorbXNnc3RyICJARSBtZW1pbGlraSBARC90aWRhayBkaXBha2FpIEBpICVEaS4gICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvICcuJyAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDYKK21zZ2lkICJARSBATCB0byAnLicgICIKK21zZ3N0ciAiQEUgQEwga2UgJy4nICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcG9pbnRzIHRvIGlub2RlICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExMQorbXNnaWQgIkBFIHBvaW50cyB0byBAaSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIEBiLlxuIgorbXNnc3RyICJARSBtZW51bmp1ayBrZSBAaSAoJURpKSB0ZXJsZXRhayBkaSBkYWxhbSBAYiBidXJ1ay5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gZGlyZWN0b3J5ICVQICglRGkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTYKK21zZ2lkICJARSBATCB0byBAZCAlUCAoJURpKS5cbiIKK21zZ3N0ciAiQEUgQEwga2UgQGQgJVAgKCVEaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIHRoZSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjEKK21zZ2lkICJARSBATCB0byB0aGUgQHIuXG4iCittc2dzdHIgIkBFIEBMIGtlIEByLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEyNgorbXNnaWQgIkBFIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4iCittc2dzdHIgIkBFIG1lbWlsaWtpIGthcmFrdGVyIGlsZWdhbCBkYWxhbSBuYW1hbnlhLlxuIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiSGlsYW5nICcuJyBkYWxhbSBAZCBAaSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4uJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiSGlsYW5nICcuLicgZGFsYW0gQGQgQGkgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpcnN0IGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApIHNob3VsZCBiZSAnLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQxCittc2dpZCAiRmlyc3QgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgKCVwKSBAcyAnLidcbiIKK21zZ3N0ciAiUGVydGFtYSBAZSAnJURuJyAoQGk9JURpKSBkYWxhbSBAZCBAaSAlaSAoJXApIEBzICcuJ1xuIgorCisjLiBALWV4cGFuZGVkOiBTZWNvbmQgZW50cnkgJyVEbicgKGlub2RlPSVEaSkgaW4gZGlyZWN0b3J5IGlub2RlICVpIHNob3VsZCBiZSAnLi4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0NgorbXNnaWQgIlNlY29uZCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSBAcyAnLi4nXG4iCittc2dzdHIgIktlZHVhIEBlICclRG4nIChAaT0lRGkpIGRhbGFtIEBkIEBpICVpIEBzICcuLidcbiIKKworIy4gQC1leHBhbmRlZDogaV9mYWRkciBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSUYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTEKK21zZ2lkICJpX2ZhZGRyIEBGICVJRiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mYWRkciBARiAlSUYsIEBzIG5vbC5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTYKK21zZ2lkICJpX2ZpbGVfYWNsIEBGICVJZiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9maWxlX2FjbCBARiAlSWYsIEBzIG5vbC5cbiIKKworIy4gQC1leHBhbmRlZDogaV9kaXJfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZCwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2MQorbXNnaWQgImlfZGlyX2FjbCBARiAlSWQsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZGlyX2FjbCBARiAlSWQsIEBzIG5vbC5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mcmFnIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTY2Cittc2dpZCAiaV9mcmFnIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZyYWcgQEYgJU4sIEBzIG5vbC5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mc2l6ZSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE3MQorbXNnaWQgImlfZnNpemUgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfZnNpemUgQEYgJU4sIEBzIG5vbC5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlICglSW0pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzYKK21zZ2lkICJAaSAlaSAoJVEpIGhhcyBAbiBtb2RlICglSW0pLlxuIgorbXNnc3RyICJAaSAlaSAoJVEpIG1lbWlsaWtpIG1vZGUgQG4gKCVJbSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZGlyZWN0b3J5IGNvcnJ1cHRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODEKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogQGQgY29ycnVwdGVkXG4iCittc2dzdHIgIkBkIEBpICVpLCAlQiwgb2ZzZXQgJU46IEBkIHRlcmtvcnVwc2lcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODYKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAiQGQgQGkgJWksICVCLCBvZnNldCAlTjogbmFtYSBiZXJrYXMgdGVybGFsdSBwYW5qYW5nXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5MQorbXNnaWQgIkBkIEBpICVpIGhhcyBhbiB1bmFsbG9jYXRlZCAlQi4gICIKK21zZ3N0ciAiQGQgQGkgJWkgbWVtaWxpa2kgIyVCIHlhbmcgdGlkYWsgdGVyYWxva2FzaS4gICIKKworIy4gQC1leHBhbmRlZDogJy4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiJy4nIEBkIEBlIGRhbGFtIEBkIEBpICVpIHRpZGFrIHRlcmFraGlyaSBkZW5nYW4gTlVMTFxuIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4uJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIicuLicgQGQgQGUgZGFsYW0gQGQgQGkgJWkgdGlkYWsgdGVyYWtoaXJpIGRlbmdhbiBOVUxMXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDYKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIGNoYXJhY3RlciBAdi5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSBhZGFsYWggc2VidWFoIGthcmFrdGVyIEBJIEB2LlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgYmxvY2sgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTEKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIEBiIEB2LlxuIgorbXNnc3RyICJAaSAlaSAoJVEpIGFkYWxhaCBzZWJ1YWggQEkgQGIgQHYuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgZHVwbGljYXRlICcuJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE2Cittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuJyBAZS5cbiIKK21zZ3N0ciAiQEUgYWRhbGFoIHNhbGluYW4gJy4nIEBlLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLi4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjEKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4uJyBAZS5cbiIKK21zZ3N0ciAiQEUgYWRhbGFoIGR1cGxpa2FzaSBkYXJpICcuLicgQGUuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNiBlMmZzY2svcHJvYmxlbS5jOjE1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICJJbnRlcm5hbCBlcnJvcjogdGlkYWsgZGFwYXQgbWVuY2FyaSBkaXJfaW5mbyB1bnR1ayAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgcmVjX2xlbiBvZiAlRHIsIHNob3VsZCBiZSAlTi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjMxCittc2dpZCAiQEUgaGFzIHJlY19sZW4gb2YgJURyLCBAcyAlTi5cbiIKK21zZ3N0ciAiQEUgbWVtaWxpa2kgcmVjX2xlbiBkYXJpICVEciwgQHMgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IHN0cnVjdHVyZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4iCittc2dzdHIgInN0cnVrdHVyIEBBIGljb3VudDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgaXRlcmF0aW5nIG92ZXIgZGlyZWN0b3J5IGJsb2NrczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGl0ZXJhdGluZyBvdmVyIEBkIEBiczogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWVuZ2l0ZXJhc2kgbWVsYWx1aSBAZCBAYnM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0NgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWVtYmFjYSBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTEKK21zZ2lkICJFcnJvciB3cml0aW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkVycm9yIG1lbnVsaXMgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrIGZvciBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgbmV3IEBkIEBiIGZvciBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJAQSBiYXJ1IEBkIEBiIHVudHVrIEBpICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRlYWxsb2NhdGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlYWxsb2NhdGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWVuZGVhbG9rYXNpa2FuIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBlIGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4iCittc2dzdHIgIkBkIEBlIHVudHVrICcuJyBkYWxhbSAlcCAoJWkpIGJlc2FyLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgRklGTy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjcxCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBGSUZPLlxuIgorbXNnc3RyICJAaSAlaSAoJVEpIGFkYWxhaCBzZWJ1YWggQEkgRklGTy5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIHNvY2tldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc2Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBzb2NrZXQuXG4iCittc2dzdHIgIkBpICVpICglUSkgYWRhbGFoIHNlYnVhaCBASSBzb2NrZXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICclRG4nIGluICVwICglaSkgdG8gJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4MQorbXNnaWQgIlNldHRpbmcgZmlsZXR5cGUgZm9yIEBFIHRvICVOLlxuIgorbXNnc3RyICJTZXR0aW5nIGZpbGV0eXBlIHVudHVrIEBFIGtlICVOLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhbiBpbmNvcnJlY3QgZmlsZXR5cGUgKHdhcyAlRHQsIHNob3VsZCBiZSAlTikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4NgorbXNnaWQgIkBFIGhhcyBhbiBpbmNvcnJlY3QgZmlsZXR5cGUgKHdhcyAlRHQsIEBzICVOKS5cbiIKK21zZ3N0ciAiIgorIkBFIG1lbWlsaWtpIHNlYnVhaCB0aXBlIGJlcmthcyB5YW5nIHRpZGFrIGJlbmFyIChzZWJlbHVtbnlhICVEdCwgQHMgJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5MQorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIkBFIG1lbWlsaWtpIGZpbGV0eXBlIHNldC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSB6ZXJvLWxlbmd0aCBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTYKK21zZ2lkICJARSBoYXMgYSBAeiBuYW1lLlxuIgorbXNnc3RyICJARSBtZW1pbGlraSBzZWJ1YWggbmFtYSBAei5cbiIKKworIy4gQC1leHBhbmRlZDogU3ltbGluayAlUSAoaW5vZGUgIyVpKSBpcyBpbnZhbGlkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDEKK21zZ2lkICJTeW1saW5rICVRIChAaSAjJWkpIGlzIEBuLlxuIgorbXNnc3RyICJTeW1saW5rICVRIChAaSAjJWkpIGFkYWxhaCBAbi5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGZvciBpbm9kZSAlaSAoJVEpIGlzIGludmFsaWQgKCVJZikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMwNgorbXNnaWQgIkBhIEBiIEBGIEBuICglSWYpLlxuIgorbXNnc3RyICJAYSBAYiBARiBAbiAoJUlmKS5cbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTEKK21zZ2lkICJAZiBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBAUy5cbiIKK21zZ3N0ciAiQGYgYmVyaXNpIGJlcmthcyBiZXNhciwgdGV0YXBpIGt1cmFuZyBMQVJHRV9GSUxFIGZsYWcgZGFsYW0gQFMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTYKK21zZ2lkICJAcCBAaCAlZDogJUIgbm90IHJlZmVyZW5jZWRcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIHRpZGFrIG1lbWlsaWtpIHJlZmVyZW5zaVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjEKK21zZ2lkICJAcCBAaCAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgbWVtaWxpa2kgZHVhIHJlZmVyZW5zaS5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI2Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIG1lbWlsaWtpIG1pbiBoYXNoIGJ1cnVrXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzMQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4iCittc2dzdHIgIkBwIEBoICVkOiAlQiBtZW1pbGlraSBtYXggaGFzIGJ1cnVrXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzNgorbXNnaWQgIkBuIEBoICVkICglcSkuICAiCittc2dzdHIgIkBuIEBoICVkICglcSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSk6IGJhZCBibG9jayBudW1iZXIgJWIuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM0MAorbXNnaWQgIkBwIEBoICVkICglcSk6IGJhZCBAYiBudW1iZXIgJWIuXG4iCittc2dzdHIgIkBwIEBoICVkICglcSk6IGJ1cnVrIEBiIG5vbW9yICViLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogcm9vdCBub2RlIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBwIEBoICVkOiByb290IG5vZGUgaXMgQG5cbiIKK21zZ3N0ciAiQHAgQGggJWQ6IHRpdGlrIHJvb3QgYWRhbGFoIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBsaW1pdCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1NQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gbGltaXQgKCVOKVxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgbWVtaWxpa2kgQG4gYmF0YXMgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgY291bnQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjAKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGNvdW50ICglTilcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIG1lbWlsaWtpIEBuIGp1bWxhaCAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzY1Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgbWVtaWxpa2kgc2VidWFoIHRhYmVsIGhhc2ggeWFuZyB0aWRhayB0ZXJ1cnV0XG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBkZXB0aCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgbWVtaWxpa2kgQG4ga2VkYWxhbWFuICglTilcbiIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGluICVwICglaSkgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3NQorbXNnaWQgIkR1cGxpY2F0ZSBARSBmb3VuZC4gICIKK21zZ3N0ciAiRHVwbGlrYXNpIEBFIGRpdGVtdWthbi4gICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuCisjLiBALWV4cGFuZGVkOiBSZW5hbWUgdG8gJXMKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4MAorIywgbm8tYy1mb3JtYXQKK21zZ2lkICIiCisiQEUgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbiIKKyJSZW5hbWUgdG8gJXMiCittc2dzdHIgIiIKKyJARSBtZW1pbGlraSBzZWJ1YWggbmFtYSBmaWxlIHlhbmcgdGlkYWsgdW5pcS5cbiIKKyJNZW5ndWJhaCBuYW1hbnlhIGtlICVzIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgZm91bmQuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODUKK21zZ2lkICIiCisiRHVwbGljYXRlIEBlICclRG4nIGZvdW5kLlxuIgorIlx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJEdXBsaWthc2kgQGUgJyVEbicgZGl0ZW11a2FuLlxuIgorIlx0IE1lbmFuZGFpICVwICglaSkgdW50dWsgZGlidWF0IGtlbWJhbGkuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfYmxvY2tzX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzkwCittc2dpZCAiaV9ibG9ja3NfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfYmxvY2tzX2hpIEBGICVOLCBAcyBub2wuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFVuZXhwZWN0ZWQgYmxvY2sgaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5NQorbXNnaWQgIlVuZXhwZWN0ZWQgQGIgaW4gQGggJWQgKCVxKS5cbiIKK21zZ3N0ciAiVGlkYWsgdGVyZHVnYSBAYiBkYWxhbSBAaCAlZCAoJXEpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGluIGdyb3VwICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTkKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBpbiBAZyAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbiIKK21zZ3N0ciAiQEUgcmVmZXJlbnNpIEBpICVEaSBkYWxhbSBAZyAlZyBkaW1hbmEgX0lOT0RFX1VOSU5JVCB0ZWxhaCBkaXNldC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBmb3VuZCBpbiBncm91cCAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDA0Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgZm91bmQgaW4gQGcgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4iCittc2dzdHIgIiIKKyJARSByZWZlcmVuc2kgQGkgJURpIGRpdGVtdWthbiBkYWxhbSBAZyAlZydzIGRpIGRhZXJhaCBpbm9kZSB5YW5nIHRpZGFrICIKKyJkaWd1bmFrYW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2xfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDkKK21zZ2lkICJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyBub2wuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MTYKK21zZ2lkICJQYXNzIDM6IENoZWNraW5nIEBkIGNvbm5lY3Rpdml0eVxuIgorbXNnc3RyICJUYWhhcCAzOiBNZW1lcmlrc2Ega29uZWt0aXZpdGFzIEBkXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgbm90IGFsbG9jYXRlZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDIxCittc2dpZCAiQHIgbm90IGFsbG9jYXRlZC4gICIKK21zZ3N0ciAiQHIgdGlkYWsgZGlhbG9rYXNpa2FuLiAgIgorCisjLiBALWV4cGFuZGVkOiBObyByb29tIGluIGxvc3QrZm91bmQgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjYKK21zZ2lkICJObyByb29tIGluIEBsIEBkLiAgIgorbXNnc3RyICJUaWRhayBhZGEgcnVhbmcgZGFsYW0gQGwgQGQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIlRpZGFrIHRlcmh1YnVuZyBAZCBAaSAlaSAoJXApXG4iCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIG5vdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDM2Cittc2dpZCAiL0BsIG5vdCBmb3VuZC4gICIKK21zZ3N0ciAiL0BsIHRpZGFrIGRpdGVtdWthbi4gICIKKworIy4gQC1leHBhbmRlZDogJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIHNob3VsZCBiZSAlcSAoJWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDEKK21zZ2lkICInLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKK21zZ3N0ciAiJy4uJyBkYWxhbSAlUSAoJWkpIGFkYWxhaCAlUCAoJWopLCBAcyAlcSAoJWQpLlxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgb3Igbm9uLWV4aXN0ZW50IC9sb3N0K2ZvdW5kLiAgQ2Fubm90IHJlY29ubmVjdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQ2Cittc2dpZCAiQmFkIG9yIG5vbi1leGlzdGVudCAvQGwuICBDYW5ub3QgcmVjb25uZWN0LlxuIgorbXNnc3RyICJCdXJ1ayBhdGF1IHRpZGFrIGFkYSAvQGwuIFRpZGFrIGRhcGF0IGRpaHVidW5na2FuIGtlbWJhbGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkIG5vdCBleHBhbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZXhwYW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuZ2V4cGFuIC9AbDogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWNvbm5lY3QgJWk6ICVtXG4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmdodWJ1bmdrYW4gJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL0BsOiAlbVxuIgorbXNnc3RyICJFcnJvciBrZXRpa2EgbWVuY29iYSBtZW5jYXJpIC9AbDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19ibG9jazogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfQGI6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgImV4dDJmc19uZXdfQGI6ICVtIGtldGlrYSBtZW5jb2JhIHVudHVrIG1lbWJ1YXQgL0BsIEBkXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfaW5vZGU6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BpOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X0BpOiAlbSBrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW1idWF0IC9AbCBAZFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Rpcl9ibG9jazogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19kaXJfQGI6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBAZCBAYlxuIgorbXNnc3RyICJleHQyZnNfbmV3X2Rpcl9AYjogJW0ga2V0aWthIG1lbWJ1YXQgQGQgQGIgYmFydVxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBkaXJlY3RvcnkgYmxvY2sgZm9yIC9sb3N0K2ZvdW5kXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfd3JpdGVfZGlyX0BiOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBAZCBAYiBmb3IgL0BsXG4iCittc2dzdHIgImV4dDJmc193cml0ZV9kaXJfQGI6ICVtIGtldGlrYSBtZW51bGlzIEBkIEBiIHVudHVrIC9AbFxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBhZGp1c3RpbmcgaW5vZGUgY291bnQgb24gaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGFkanVzdGluZyBAaSBjb3VudCBvbiBAaSAlaVxuIgorbXNnc3RyICJFcnJvciBrZXRpa2EgbWVueWVzdWFpa2FuIGp1bWxhaCBAaSBkaSBAaSAlaVxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiVGlkYWsgZGFwYXQgbWVtYmV0dWxrYW4gcGFyZW50IGRhcmkgQGkgJWk6ICVtXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkbid0IGZpeCBwYXJlbnQgb2YgaW5vZGUgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IGRpcmVjdG9yeSBlbnRyeVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBAZCBAZVxuIgorIlxuIgorbXNnc3RyICIiCisiVGlkYWsgZGFwYXQgbWVtYmV0dWxrYW4gcGFyZW50IGRhcmkgQGkgJWk6IFRpZGFrIGRhcGF0IG1lbmNhcmkgcGFyZW50IEBkIEBlXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNyZWF0aW5nIHJvb3QgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyByb290IEBkICglcyk6ICVtXG4iCittc2dzdHIgIkVycm9yIG1lbWJ1YXQgcm9vdCBAZCAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyAvbG9zdCtmb3VuZCBkaXJlY3RvcnkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIC9AbCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJFcnJvciBtZW1idWF0IC9AbCBAZCAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeTsgYWJvcnRpbmcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxNgorbXNnaWQgIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIKK21zZ3N0ciAiQHIgYnVrYW4gc2VidWFoIEBkOiBtZW1iYXRhbGthbi5cbiIKKworIy4gQC1leHBhbmRlZDogQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIHJvb3QgaW5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUyMQorbXNnaWQgIkNhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSBAci5cbiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVsYW5qdXRrYW4gdGFucGEgc2VidWFoIEByLlxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBpcyBub3QgYSBkaXJlY3RvcnkgKGlubz0laSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIi9AbCBpcyBub3QgYSBAZCAoaW5vPSVpKVxuIgorbXNnc3RyICIvQGwgYnVrYW4gc2VidWFoIEBkIChpbm89JWkpXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUzOAorbXNnaWQgIlBhc3MgM0E6IE9wdGltaXppbmcgZGlyZWN0b3JpZXNcbiIKK21zZ3N0ciAiVGFoYXAgM0E6IE1lbmdvcHRpbWFzaSBkaXJla3RvcmlcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZGlyc190b19oYXNoIGl0ZXJhdG9yOiAlbVxuIgorbXNnc3RyICJHYWdhbCBtZW1idWF0IHBlbmctaXRlcmFzaSBkaXJzX3RvX2hhc2g6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0OAorbXNnaWQgIkZhaWxlZCB0byBvcHRpbWl6ZSBkaXJlY3RvcnkgJXEgKCVkKTogJW1cbiIKK21zZ3N0ciAiR2FnYWwgbWVuZ29wdGltYXNpIGRpcmVrdG9yaSAlcSAoJWQpOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NTMKK21zZ2lkICJPcHRpbWl6aW5nIGRpcmVjdG9yaWVzOiAiCittc2dzdHIgIk1lbmdvcHRpbWFzaSBkaXJla3Rvcmk6ICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcwCittc2dpZCAiUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzXG4iCittc2dzdHIgIlRhaGFwIDQ6IE1lbWVyaWtzYSBqdW1sYWggcmVmZXJlbnNpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgemVyby1sZW5ndGggaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAeiBAaSAlaS4gICIKK21zZ3N0ciAiQHUgQHogQGkgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEBpICVpXG4iCittc2dzdHIgIkB1IEBpICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg1Cittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgIkBpICVpIHJlZiBjb3VudCBhZGFsYWggJUlsLCBAcyAlTi4gICIKKworIy4gQC1leHBhbmRlZDogV0FSTklORzogUFJPR1JBTU1JTkcgQlVHIElOIEUyRlNDSyFcbgorIy4gQC1leHBhbmRlZDogXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbgorIy4gQC1leHBhbmRlZDogaW5vZGVfbGlua19pbmZvWyVpXSBpcyAlTiwgaW5vZGUuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IHNob3VsZCBiZSB0aGUgc2FtZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg5Cittc2dpZCAiIgorIldBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4iCisiXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbiIKKyJAaV9saW5rX2luZm9bJWldIGlzICVOLCBAaS5pX2xpbmtzX2NvdW50IGlzICVJbC4gIFRoZXkgQHMgdGhlIHNhbWUhXG4iCittc2dzdHIgIiIKKyJQRVJJTkdBVEFOOiBCVUcgREFMQU0gUEVNUk9HUkFNQU4gRTJGU0NLIVxuIgorIlx0QVRBVSBTRU9SQU5HIEtFUkFTIEtFUEFMQSAoQU5EQSkgTUVNRVJJS1NBIFNFQlVBSCBTSVNURU0gQkVSS0FTIChISURVUCkgIgorIllBTkcgVEVSUEFTQU5HLlxuIgorIkBpX2xpbmtfaW5mb1slaV0gYWRhbGFoICVOLCBAaS5pX2xpbmtzX2NvdW50IGFkYWxhaCAlSWwuIE1lcmVrYSBAcyBhZGFsYWggIgorInNhbWEhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvblxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1OTkKK21zZ2lkICJQYXNzIDU6IENoZWNraW5nIEBnIHN1bW1hcnkgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiVGFoYXAgNTogTWVtZXJpa3NhIHJpbmdrYXNhbiBpbmZvcm1hc2kgQGdcbiIKKworIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgaW5vZGUgYml0bWFwIGlzIG5vdCBzZXQuIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjA0Cittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGkgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICJNZW5hbWJhaGthbiBwYWQgZGlha2hpciBkYXJpIEBpIEBCIHlhbmcgdGlkYWsgdGVyc2V0LiAgIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDkKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIk1lbmFtYmFoa2FuIHBhZCBkaSBha2hpciBkYXJpIEBiIEBCIGFkYWxhaCB0ZXIgc2V0LiAgIgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjE0Cittc2dpZCAiQGIgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiQGIgQEIgcGVyYmVkYWFuOiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MzQKK21zZ2lkICJAaSBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJAaSBAQiBwZXJiZWRhYW46ICIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTQKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIktvc29uZyBAaXMgdGVyaGl0dW5nIHNhbGFoIHVudHVrIEBnICMlZyAoJWksIHRlcmhpdHVuZz0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IERpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjU5Cittc2dpZCAiRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICJEaXJla3RvcmkgdGVyaGl0dW5nIHNhbGFoIHVudHVrIEBnICMlZyAoJWksIHRlcmhpdHVuZz0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgaW5vZGVzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2NAorbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIktvc29uZyBAaXMgdGVyaGl0dW5nIHNhbGFoICglaSwgdGVyaGl0dW5nPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjkKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIktvc29uZyBAYnMgdGVyaGl0dW5nIHNhbGFoIHVudHVrIEBnICMlZyAoJWIsIHRlcmhpdHVuZz0lYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY3NAorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIktvc29uZyBAYnMgdGVyaGl0dW5nIHNhbGFoICglYiwgdGVyaGl0dW5nPSVjKS5cbiIKKworIy4gQC1leHBhbmRlZDogUFJPR1JBTU1JTkcgRVJST1I6IGZpbGVzeXN0ZW0gKCMlTikgYml0bWFwIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIGJpdG1hcCAKKyMuIEAtZXhwYW5kZWQ6IGVuZHBvaW50cyAoJWksICVqKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NzkKK21zZ2lkICIiCisiUFJPR1JBTU1JTkcgRVJST1I6IEBmICgjJU4pIEBCIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIEBCICIKKyJlbmRwb2ludHMgKCVpLCAlailcbiIKK21zZ3N0ciAiIgorIlBST0dSQU1NSU5HIEVSUk9SOiBAZiAoIyVOKSBAQiBlbmRwb2ludHMgKCViLCAlYykgdGlkYWsgZGFwYXQgbWVuY29jb2thbiAiCisicGVyaGl0dW5nYW4gQEIgdGl0aWsgdWp1bmcgKCVpLCAlailcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjg1Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGZ1ZGdpbmcgZW5kIG9mIGJpdG1hcCAoJU4pXG4iCittc2dzdHIgIkludGVybmFsIGVycm9yOiBmdWRnaW5nIGJlcmFraGlyIGRhcmkgYml0bWFwICglTilcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBpbm9kZSBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBpIEBCOiAlbVxuIgorbXNnc3RyICJFcnJvciBtZW55YWxpbiBkYWxhbSBtZW5nZ2FudGkgQGkgQEI6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAYiBAQjogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWVueWFsaW4gZGFsYW0gbWVuZ2dhbnRpIEBiIEBCOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBibG9jayhzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBiKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuIgorbXNnc3RyICJAZyAlZyBAYihzKSBzZWRhbmcgZGlndW5ha2FuIHRldGFwaSBAZyB0ZXJ0YW5kYSBCTE9DS19VTklOSVRcbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgaW5vZGUocykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAaShzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbiIKK21zZ3N0ciAiQGcgJWcgQGkocykgc2VkYW5nIGRpZ3VuYWthbiB0ZXRhcGkgQGcgdGVydGFuZGEgSU5PREVfVU5JTklUXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlY3JlYXRlIGpvdXJuYWwKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTczMgorbXNnaWQgIlJlY3JlYXRlIEBqIgorbXNnc3RyICJNZW1idWF0IGtlbWJhbGkgQGoiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTczNworbXNnaWQgIlVwZGF0ZSBxdW90YSBpbmZvIGZvciBxdW90YSB0eXBlICVOIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHNldHRpbmcgYmxvY2sgZ3JvdXAgY2hlY2tzdW0gaW5mbzogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzQyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIEBiIEBnIGNoZWNrc3VtIGluZm86ICVtXG4iCittc2dzdHIgImtldGlrYSBzZWRhbmcgbWVuc2V0IGluZm9ybWFzaSBjaGVja3N1bSBkaSBncnVwIGJsb2siCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBmaWxlIHN5c3RlbSBpbmZvOiAlbVxuIgorbXNnc3RyICJFcnJvciBrZXRpa2EgbWVuZ2hhcHVzIGV4dGVuc2k6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBmbHVzaGluZyB3cml0ZXMgdG8gc3RvcmFnZSBkZXZpY2U6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaGFuZGxlZCBlcnJvciBjb2RlICgweCV4KSFcbiIKK21zZ3N0ciAiS29kZSBlcnJvciB0aWRhayB0ZXJ0YW5nYW5pICgweCV4KSFcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxOTk2IGUyZnNjay9wcm9ibGVtLmM6MjAwMAorbXNnaWQgIklHTk9SRUQiCittc2dzdHIgIkRJQUJBSUtBTiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVkLCBlbGFwc2VkIHRpbWU6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCittc2dzdHIgIk1lbW9yaSB5YW5nIGRpZ3VuYWthbjogJWQsIHdha3R1IHlhbmcgZGlndW5ha2FuOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzaXplIG9mIGlub2RlPSVkXG4iCittc2dzdHIgInVrdXJhbiBkYXJpIGlub2RlPSVkXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjExOQorbXNnaWQgIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iCittc2dzdHIgImtldGlrYSBtZW11bGFpIHNjYW4gZGFyaSBpbm9kZSIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6MTMwCittc2dpZCAid2hpbGUgZG9pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAia2V0aWthIG1lbGFrdWthbiBwZW1lcmlrc2FhbiBpbm9kZSIKKworIzogZTJmc2NrL3N1cGVyLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZm9yIGlub2RlICVkIgorbXNnc3RyICJrZXRpa2EgbWVtYW5nZ2lsIGV4dDJmc19ibG9ja19pdGVyYXRlIHVudHVrIGlub2RlICVkIgorCisjOiBlMmZzY2svc3VwZXIuYzoyMTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZm9yIGlub2RlICVkIgorbXNnc3RyICJrZXRpa2EgbWVtYW5nZ2lsIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQgdW50dWsgaW5vZGUgJWQiCisKKyM6IGUyZnNjay9zdXBlci5jOjI3NAorbXNnaWQgIlRydW5jYXRpbmciCittc2dzdHIgIlRydW5jYXRpbmciCisKKyM6IGUyZnNjay9zdXBlci5jOjI3NQorbXNnaWQgIkNsZWFyaW5nIgorbXNnc3RyICJNZW5naGFwdXMiCisKKyM6IGUyZnNjay91bml4LmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisiUGVuZ2d1bmFhbjogJXMgWy1wYW55cmNkZnZ0REZWXSBbLWIgc3VwZXJibG9rXSBbLUIgdWt1cmFuIGJsb2tdXG4iCisiXHRcdFstSSBpbm9kZV9idWZmZXJfYmxvY2tdIFstUCBwcm9jZXNzX2lub2RlX3NpemVdXG4iCisiXHRcdFstbHwtTCBiYWRfYmxvY2tzX2ZpbGVdIFstQyBmZF0gWy1qIGV4dGVybmFsX2pvdXJuYWxdXG4iCisiXHRcdFstRSBleHRlbmRlbmQtb3B0aW9uc10gcGVyYW5na2F0XG4iCisKKyM6IGUyZnNjay91bml4LmM6ODAKK21zZ2lkICIiCisiXG4iCisiRW1lcmdlbmN5IGhlbHA6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyByZXBhaXIgKG5vIHF1ZXN0aW9ucylcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTWFrZSBubyBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIEFzc3VtZSBcInllc1wiIHRvIGFsbCBxdWVzdGlvbnNcbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIGJhZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYWRibG9jayAiCisibGlzdFxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3JjZSBjaGVja2luZyBldmVuIGlmIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGNsZWFuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQZXJ0b2xvbmdhbiBkYXJ1cmF0OlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBPdG9tYXRpcyBwZXJiYWlrYW4gKHRhbnBhIHBlcnRhbnlhYW4pXG4iCisiIC1uICAgICAgICAgICAgICAgICAgIFRpZGFrIG1lbWJ1YXQgcGVydWJhaGFuIGRpIHNpc3RlbSBiZXJrYXNcbiIKKyIgLXkgICAgICAgICAgICAgICAgICAgTWVuZ2FzdW1zaSBcInllc1wiIHVudHVrIHNlbXVhIHBlcnRhbnlhYW5cbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgTWVtZXJpa3NhIGJsb2sgYnVydWsgZGFuIG1lbmFtYmFoa2FuIGhhc2lsbnlhIGtlICIKKyJkYWZ0YXIgYmxvayBidXJ1a1xuIgorIiAtZiAgICAgICAgICAgICAgICAgICBNZW1ha3NhIG1lbWVyaWtzYSB3YWxhdXB1biBzaXN0ZW0gYmVya2FzIGRpdGFuZGFpICIKKyJiZXJzaWhcbiIKKworIzogZTJmc2NrL3VuaXguYzo4NgorbXNnaWQgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgQmUgdmVyYm9zZVxuIgorIiAtYiBzdXBlcmJsb2NrICAgICAgICBVc2UgYWx0ZXJuYXRpdmUgc3VwZXJibG9ja1xuIgorIiAtQiBibG9ja3NpemUgICAgICAgICBGb3JjZSBibG9ja3NpemUgd2hlbiBsb29raW5nIGZvciBzdXBlcmJsb2NrXG4iCisiIC1qIGV4dGVybmFsX2pvdXJuYWwgIFNldCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbFxuIgorIiAtbCBiYWRfYmxvY2tzX2ZpbGUgICBBZGQgdG8gYmFkYmxvY2tzIGxpc3RcbiIKKyIgLUwgYmFkX2Jsb2Nrc19maWxlICAgU2V0IGJhZGJsb2NrcyBsaXN0XG4iCittc2dzdHIgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgVGFtcGlsa2FuIHBlc2FuIHBlc2FuXG4iCisiIC1iIHN1cGVyIGJsb2sgICAgICAgIEd1bmFrYW4gc3VwZXJibG9rIGxhaW5cbiIKKyIgLUIgdWt1cmFuIGJsb2sgICAgICAgUGFrc2EgbWVuZ2d1bmFrYW4gdWt1cmFuIGJsb2sga2V0aWthIG1lbmNhcmkgc3VwZXIgIgorImJsb2tcbiIKKyIgLWogZXh0ZXJuYWxfam91cm5hbCAgU2V0IGxva2FzaSBkYXJpIGpvdXJuYWwgbHVhclxuIgorIiAtbCBiYWRfYmxva19maWxlICAgICBUYW1iYWhrYW4ga2UgZGFmdGFyIGJsb2sgYnVydWtcbiIKKyIgLUwgYmFkX2Jsb2tfZmlsZSAgICAgU2V0IGRhZnRhciBibG9rIGJ1cnVrXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogJXUvJXUgZmlsZXMgKCUwZC4lZCUlIG5vbi1jb250aWd1b3VzKSwgJWxsdS8lbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIlczogJXUvJXUgYmVya2FzICglMGQuJWQlJSB0aWRhayBrb250aW51KSwgJXUvJXUgYmxva1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE1NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSBpbm9kZXMgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnc3RyWzBdICIldSBpbm9kZXMgZGlzY2FuLlxuIgorbXNnc3RyWzFdICIldSBpbm9kZXMgZGlzY2FuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGUgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3J5ICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcmllcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE3MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICAgICAgICMgb2YgaW5vZGVzIHdpdGggaW5kL2RpbmQvdGluZCBibG9ja3M6ICV1LyV1LyV1XG4iCittc2dzdHIgIiAgICAgICAgICMgZGFyaSBpbm9kZXMgZGVuZ2FuIGluZC9kaW5kL3RpbmQgYmxvazogJXUvJXUvJXVcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzkKKyMsIGZ1enp5Cittc2dpZCAiICAgICAgICAgICAgIEV4dGVudCBkZXB0aCBoaXN0b2dyYW06ICIKK21zZ3N0ciAiICAgICAgICAgS2VkYWxhbWFuIEV4dGVuc2kgaGlzdG9ncmFtOiAiCisKKyM6IGUyZnNjay91bml4LmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMmxsdSBibG9jayB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEybGx1IGJsb2NrcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MTkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJhZCBibG9ja1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJhZCBibG9ja3NcbiIKK21zZ3N0clswXSAiJXUgaW5vZGVzLCAldSBibG9rXG4iCittc2dzdHJbMV0gIiV1IGlub2RlcywgJXUgYmxva1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsYXJnZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGFyZ2UgZmlsZXNcbiIKK21zZ3N0clswXSAiYmVya2FzIGJpYXNhIgorbXNnc3RyWzFdICJiZXJrYXMgYmlhc2EiCisKKyM6IGUyZnNjay91bml4LmM6MTk2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlc1xuIgorbXNnc3RyWzBdICJiZXJrYXMgYmlhc2EiCittc2dzdHJbMV0gImJlcmthcyBiaWFzYSIKKworIzogZTJmc2NrL3VuaXguYzoxOTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZGlyZWN0b3J5XG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZGlyZWN0b3JpZXNcbiIKK21zZ3N0clswXSAiZGlyZWt0b3JpIgorbXNnc3RyWzFdICJkaXJla3RvcmkiCisKKyM6IGUyZnNjay91bml4LmM6MjAwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAia2FyYWt0ZXIgZGV2aWNlIgorbXNnc3RyWzFdICJrYXJha3RlciBkZXZpY2UiCisKKyM6IGUyZnNjay91bml4LmM6MjAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gImJsb2NrIGRldmljZSIKK21zZ3N0clsxXSAiYmxvY2sgZGV2aWNlIgorCisjOiBlMmZzY2svdW5peC5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpZm9cbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWZvc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsaW5rXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGlua3NcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MjA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHN5bWJvbGljIGxpbmsiCittc2dpZF9wbHVyYWwgIiUxMnUgc3ltYm9saWMgbGlua3MiCittc2dzdHJbMF0gInN5bWJvbGljIGxpbmsiCittc2dzdHJbMV0gInN5bWJvbGljIGxpbmsiCisKKyM6IGUyZnNjay91bml4LmM6MjExCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgKCV1IGZhc3Qgc3ltYm9saWMgbGluaylcbiIKK21zZ2lkX3BsdXJhbCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmtzKVxuIgorbXNnc3RyWzBdICJzeW1ib2xpYyBsaW5rIgorbXNnc3RyWzFdICJzeW1ib2xpYyBsaW5rIgorCisjOiBlMmZzY2svdW5peC5jOjIxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzb2NrZXRcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBzb2NrZXRzXG4iCittc2dzdHJbMF0gInNvY2tldCIKK21zZ3N0clsxXSAic29ja2V0IgorCisjOiBlMmZzY2svdW5peC5jOjIxOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlsZXNcbiIKK21zZ3N0clswXSAiYmVya2FzIGJpYXNhIgorbXNnc3RyWzFdICJiZXJrYXMgYmlhc2EiCisKKyM6IGUyZnNjay91bml4LmM6MjMyIG1pc2MvYmFkYmxvY2tzLmM6OTkzIG1pc2MvdHVuZTJmcy5jOjIxMjIgbWlzYy91dGlsLmM6MzE2CisjOiByZXNpemUvbWFpbi5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuIgorbXNnc3RyICJrZXRpa2Egc2VkYW5nIG1lbmVudHVrYW4gYXBha2FoICVzIHNlZGFuZyBkaW1vdW50LiIKKworIzogZTJmc2NrL3VuaXguYzoyNTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICJQZXJpbmdhdGFuISAlcyBzZWRhbmcgZGltb3VudC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyBpbiB1c2UuXG4iCittc2dzdHIgIlBlcmluZ2F0YW4hICVzIHNlZGFuZyBkaW1vdW50LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiJXMgc2VkYW5nIGRpbW91bnQuICAgIgorCisjOiBlMmZzY2svdW5peC5jOjI2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW4gdXNlLlxuIgorbXNnc3RyICIlcyBzZWRhbmcgZGltb3VudC4gICAiCisKKyM6IGUyZnNjay91bml4LmM6MjY2Cittc2dpZCAiIgorIkNhbm5vdCBjb250aW51ZSwgYWJvcnRpbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJUaWRhayBkYXBhdCBtZWxhbmp1dGthbiwgbWVtYmF0YWxrYW4uXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJXQVJOSU5HISEhICBUaGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLiAgIElmIHlvdSBjb250aW51ZSB5b3UgKioqV0lMTCoqKlxuIgorImNhdXNlICoqKlNFVkVSRSoqKiBmaWxlc3lzdGVtIGRhbWFnZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIlxhXGFcYVxhUEVSSU5HQVRBTiEhISBTaXN0ZW0gYmVya2FzIHRlbGFoIHRlcnBhc2FuZy4gSmlrYSBhbmRhIGxhbmp1dGthbiAiCisiYW5kYSAqKipBS0FOKioqXG4iCisiYmlzYSBtZW55ZWJhYmthbiBrZXJ1c2FrYW4gKioqUEFSQUgqKiogZGkgc2lzdGVtIGJlcmthcy5cYVxhXGFcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNzMKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gY29udGludWUiCittc2dzdHIgIkFwYWthaCBhbmRhIHlha2luIGluZ2luIG1lbGFuanV0a2FuIgorCisjOiBlMmZzY2svdW5peC5jOjI3NQorbXNnaWQgImNoZWNrIGFib3J0ZWQuXG4iCittc2dzdHIgInBlbWVyaWtzYWFuIGRpYmF0YWxrYW4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MzY4Cittc2dpZCAiIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMiCittc2dzdHIgIiBiZXJpc2kgc2VidWFoIGZpbGUgc3lzdGVtIGRlbmdhbiBlcnJvcnMiCisKKyM6IGUyZnNjay91bml4LmM6MzcwCittc2dpZCAiIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQiCittc2dzdHIgIiB0aWRhayBiZXJzaWggc2V0ZWxhaCBkaXVubW91bnQuIgorCisjOiBlMmZzY2svdW5peC5jOjM3MgorbXNnaWQgIiBwcmltYXJ5IHN1cGVyYmxvY2sgZmVhdHVyZXMgZGlmZmVyZW50IGZyb20gYmFja3VwIgorbXNnc3RyICIgc3VwZXJibG9rIHV0YW1hIG1lbWlsaWtpIGZlYXR1cmUgYmVyYmVkYSBkYXJpIGJhY2t1cCIKKworIzogZTJmc2NrL3VuaXguYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBiZWVuIG1vdW50ZWQgJXUgdGltZXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgdGVsYWggZGltb3VudCAldSBrYWxpIHRhbnBhIGRpbGFrdWthbiBwZW1lcmlrc2FhbiIKKworIzogZTJmc2NrL3VuaXguYzozODMKK21zZ2lkICIgaGFzIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRpbWUgaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiIgorIiBtZW1pbGlraSBzaXN0ZW0gYmVya2FzIHlhbmcgd2FrdHUgdGVyYWtoaXIgZGlwZXJpa3NhIGJlcmFkYSBkaSBtYXNhIHlhbmcgIgorImFrYW4gZGF0YW5nIgorCisjOiBlMmZzY2svdW5peC5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGdvbmUgJXUgZGF5cyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiB0ZWxhaCBsZXdhdCAldSBoYXJpIHRhbnBhIGRpbGFrdWthbiBwZW1lcmlrc2FhbiIKKworIzogZTJmc2NrL3VuaXguYzozOTgKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiLCBwZW1lcmlrc2FhbiBkaXBha3Nha2FuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjQzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuLCAldS8ldSBmaWxlcywgJWxsdS8lbGx1IGJsb2NrcyIKK21zZ3N0ciAiJXM6IGJlcnNpaCwgJXUvJXUgYmVya2FzLCAldS8ldSBibG9rIgorCisjOiBlMmZzY2svdW5peC5jOjQ1MQorbXNnaWQgIiAoY2hlY2sgZGVmZXJyZWQ7IG9uIGJhdHRlcnkpIgorbXNnc3RyICIgKHBlbWVyaWtzYWFuIGRpYmF0YWxrYW47IHBvd2VyIG1lbmdndW5ha2FuIGJhdGVyZSkiCisKKyM6IGUyZnNjay91bml4LmM6NDU0Cittc2dpZCAiIChjaGVjayBhZnRlciBuZXh0IG1vdW50KSIKK21zZ3N0ciAiIChwZW1lcmlrc2FhbiBkaWxha3VrYW4gc2V0ZWxhaCBtb3VudCBzZWxhbmp1dG55YSkiCisKKyM6IGUyZnNjay91bml4LmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoY2hlY2sgaW4gJWxkIG1vdW50cykiCittc2dzdHIgIiAocGVtZXJpa3NhYW4gZGlsYWt1a2FuIGRhbGFtICVsZCBtb3VudHMpIgorCisjOiBlMmZzY2svdW5peC5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogQ291bGRuJ3Qgb3BlbiAvZGV2L251bGwgKCVzKVxuIgorbXNnc3RyICJFUlJPUjogVGlkYWsgZGFwYXQgbWVtYnVrYSAvZGV2L251bGwgKCVzKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjY3NQorbXNnaWQgIkludmFsaWQgRUEgdmVyc2lvbi5cbiIKK21zZ3N0ciAiVmVyc2kgRUEgdGlkYWsgdmFsaWQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZXh0ZW5kZWQgb3B0aW9uOiAlc1xuIgorbXNnc3RyICJQaWxpaGFuIGV4dGVuZGVkIHRpZGFrIGRpa2V0YWh1aTogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBlMmZzY2sgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKyJTeW50YXggZXJyb3IgZGFsYW0gYmVya2FzIGtvbmZpZ3VyYXNpIGUyZnNjayAoJXMsIGJhcmlzICMlZClcbiIKKyJcdCVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6Nzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHZhbGlkYXRpbmcgZmlsZSBkZXNjcmlwdG9yICVkOiAlc1xuIgorbXNnc3RyICJFcnJvciBtZW12YWxpZGFzaSBiZXJrYXMgZGVza3JpcHNpICVkOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjgwMQorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgIkluZm9ybWFzaSBGaWxlIGJlcmthcyBjb21wbGV0aW9uIHRpZGFrIHZhbGlkIgorCisjOiBlMmZzY2svdW5peC5jOjgxNgorbXNnaWQgIk9ubHkgb25lIG9mIHRoZSBvcHRpb25zIC1wLy1hLCAtbiBvciAteSBtYXkgYmUgc3BlY2lmaWVkLiIKK21zZ3N0ciAiIgorIkhhbnlhIHNhbGFoIHNhdHUgZGFyaSBwaWxpaGFuIC1wLy1hLCAtbiBhdGF1IC15IHlhbmcgYm9sZWggZGlzcGVzaWZpa2FzaWthbi4iCisKKyM6IGUyZnNjay91bml4LmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSAtdCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorbXNnc3RyICJQaWxpaGFuIC10IHRpZGFrIGRpbGF5YW5pIGRhbGFtIHZlcnNpIGUyZnNjayBpbmkuXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODY4IGUyZnNjay91bml4LmM6OTQyIG1pc2MvdHVuZTJmcy5jOjg3OSBtaXNjL3R1bmUyZnMuYzoxMTc0CisjOiBtaXNjL3R1bmUyZnMuYzoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZXNvbHZlICclcyciCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lcmVzb2x2ZSAnJXMnIgorCisjOiBlMmZzY2svdW5peC5jOjkyMQorbXNnaWQgIlRoZSAtbiBhbmQgLUQgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiUGlsaWhhbiAtbiBkYW4gLUQgdGlkYWsga29tcGF0aWJlbC4iCisKKyM6IGUyZnNjay91bml4LmM6OTI2Cittc2dpZCAiVGhlIC1uIGFuZCAtYyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJQaWxpaGFuIC1uIGRhbiAtYyB0aWRhayBrb21wYXRpYmVsLiIKKworIzogZTJmc2NrL3VuaXguYzo5MzEKK21zZ2lkICJUaGUgLW4gYW5kIC1sLy1MIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIlBpbGloYW4gLW4gZGFuIC1sLy1MIHRpZGFrIGtvbXBhdGliZWwuIgorCisjOiBlMmZzY2svdW5peC5jOjk4NQorbXNnaWQgIlRoZSAtYyBhbmQgdGhlIC1sLy1MIG9wdGlvbnMgbWF5IG5vdCBiZSBib3RoIHVzZWQgYXQgdGhlIHNhbWUgdGltZS5cbiIKK21zZ3N0ciAiIgorIlBpbGloYW4gLWMgZGFuIC1sLy1MIHRpZGFrIGJvbGVoIGRpZ3VuYWthbiBzZWNhcmEgYmVyc2FtYWFuIGRhbGFtIHNhdHUgIgorIndha3R1LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG5vdCBhbiBpbnRlZ2VyXG4iCisiXG4iCittc2dzdHIgIiIKKyJFMkZTQ0tfSkJEX0RFQlVHIFwiJXNcIiBidWthbiBzZWJ1YWggaW50ZWdlclxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkludmFsaWQgbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gLSVjIChcIiVzXCIpXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBcmd1bWVudCBidWthbiBudW1lcmlrIHRpZGFrIHZhbGlkIHVudHVrIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBpbnRlcnZhbCBpcyAldSBzZWNvbmRzIGFuZCB0b3RhbCB3YWl0IHRpbWUgaXMgJXUgc2Vjb25kcy4gUGxlYXNlICIKKyJ3YWl0Li4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMTQ5IGUyZnNjay91bml4LmM6MTE1NAorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBNTVAgYmxvY2siCittc2dzdHIgImtldGlrYSBtZW5zZXR1cCBzdXBlcmJsb2siCisKKyM6IGUyZnNjay91bml4LmM6MTE1NiBtaXNjL3R1bmUyZnMuYzoyMDQ5Cittc2dpZCAiIgorIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSBpcyBub3QgaW4gdXNlIG9uIGFueSBub2RlLCBydW46XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V9J1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTIwNworbXNnaWQgIkVycm9yOiBleHQyZnMgbGlicmFyeSB2ZXJzaW9uIG91dCBvZiBkYXRlIVxuIgorbXNnc3RyICJFcnJvcjogZXh0MmZzIHZlcnNpIGxpYnJhcmkga2V0aW5nZ2FsYW4gamFtYW4hXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTIxNAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBpbml0aWFsaXplIHByb2dyYW0iCittc2dzdHIgImtldGlrYSBtZW5jb2JhIHVudHVrIG1lbmdpbmlzaWFsaXNhc2kgYXBsaWthc2kiCisKKyM6IGUyZnNjay91bml4LmM6MTIzNworIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzLCAlc1xuIgorbXNnc3RyICJcdE1lbmdndW5ha2FuICVzLCAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEyNDkKK21zZ2lkICJuZWVkIHRlcm1pbmFsIGZvciBpbnRlcmFjdGl2ZSByZXBhaXJzIgorbXNnc3RyICJidXR1aCB0ZXJtaW5hbCB1bnR1ayByZXBhcmFzaSBpbnRlcmFjdGl2ZSIKKworIzogZTJmc2NrL3VuaXguYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB0cnlpbmcgYmFja3VwIGJsb2Nrcy4uLlxuIgorbXNnc3RyICIlczogJXMgbWVuY29iYSBtZW1iYWNrdXAgYmxvay4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDUKK21zZ2lkICJTdXBlcmJsb2NrIGludmFsaWQsIgorbXNnc3RyICJTdXBlcmJsb2sgdGlkYWsgdmFsaWQsIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDYKK21zZ2lkICJHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiIKK21zZ3N0ciAiRGVza3JpcHNpIGdydXAgdGVybGloYXQgYnVydWsuLi4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHVzaW5nIHRoZSBiYWNrdXAgYmxvY2tzIgorbXNnc3RyICIlczogJXMgbWVuY29iYSBtZW1iYWNrdXAgYmxvay4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGdvaW5nIGJhY2sgdG8gb3JpZ2luYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICIlczoga2VtYmFsaSBrZSBzdXBlcmJsb2NrIGFzbGlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQ5Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIHJldmlzaW9uIGlzIGFwcGFyZW50bHkgdG9vIGhpZ2ggZm9yIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCisiKE9yIHRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2sgaXMgY29ycnVwdClcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlJldmlzaSBzaXN0ZW0gYmVya2FzIGtlbGloYXRhbm55YSB0ZXJsYWx1IHRpbmdnaSB1bnR1ayB2ZXJzaSBlMmZzY2sgaW5pLlxuIgorIihBdGF1IHNpc3RlbSBiZXJrYXMgc3VwZXJibG9rIHRlcmtvcnVwc2kpXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1NgorbXNnaWQgIkNvdWxkIHRoaXMgYmUgYSB6ZXJvLWxlbmd0aCBwYXJ0aXRpb24/XG4iCittc2dzdHIgIk11bmdraW5rYW4gaW5pIHNlYnVhaCBwYXJ0aXNpIGRlbmdhbiBwYW5qYW5nIG5vbD9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBtdXN0IGhhdmUgJXMgYWNjZXNzIHRvIHRoZSBmaWxlc3lzdGVtIG9yIGJlIHJvb3RcbiIKK21zZ3N0ciAiQW5kYSBoYXJ1cyBtZW1pbGlraSAlcyBha3NlcyBrZSBzaXN0ZW0gYmVya2FzIGF0YXUgbWVuamFkaSByb290XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM2NAorbXNnaWQgIlBvc3NpYmx5IG5vbi1leGlzdGVudCBvciBzd2FwIGRldmljZT9cbiIKK21zZ3N0ciAiTXVuZ2tpbiB0aWRhayBhZGEgYXRhdSBzZWJ1YWggcGVyYW5na2F0IHN3YXA/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM2NgorbXNnaWQgIkZpbGVzeXN0ZW0gbW91bnRlZCBvciBvcGVuZWQgZXhjbHVzaXZlbHkgYnkgYW5vdGhlciBwcm9ncmFtP1xuIgorbXNnc3RyICIiCisiU2lzdGVtIGJlcmthcyBkaW1vdW50IGF0YXUgZGlidWthIHNlY2FyYSBleGNsdXNpdmVseSBvbGVoIGFwbGlrYXNpIGxhaW4/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM3MAorIywgZnV6enkKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgZGV2aWNlP1xuIgorbXNnc3RyICJNdW5na2luIHRpZGFrIGFkYSBhdGF1IHNlYnVhaCBwZXJhbmdrYXQgc3dhcD9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzczCittc2dpZCAiIgorIkRpc2sgd3JpdGUtcHJvdGVjdGVkOyB1c2UgdGhlIC1uIG9wdGlvbiB0byBkbyBhIHJlYWQtb25seVxuIgorImNoZWNrIG9mIHRoZSBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJEaXNrIHRlcnByb3Rla3NpIHVudHVrIGRpdHVsaXM7IGd1bmFrYW4gcGlsaWhhbiAtbiB1bnR1ayBtZWxha3VrYW4gc2VjYXJhICIKKyJiYWNhLXNhamFcbiIKKyJkYWxhbSBtZW1lcmlrc2EgcGVyYW5na2F0LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE0MzcKK21zZ2lkICJHZXQgYSBuZXdlciB2ZXJzaW9uIG9mIGUyZnNjayEiCittc2dzdHIgIkRhcGF0a2FuIHZlcnNpIHlhbmcgbGViaWggYmFydSBkYXJpIGUyZnNjayEiCisKKyM6IGUyZnNjay91bml4LmM6MTQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBleHQzIGpvdXJuYWwgZm9yICVzIgorbXNnc3RyICJrZXRpa2EgbWVtZXJpa3NhIGV4dDMganVybmFsIHVudHVrICVzIgorCisjOiBlMmZzY2svdW5peC5jOjE0OTIKK21zZ2lkICIiCisiV2FybmluZzogc2tpcHBpbmcgam91cm5hbCByZWNvdmVyeSBiZWNhdXNlIGRvaW5nIGEgcmVhZC1vbmx5IGZpbGVzeXN0ZW0gIgorImNoZWNrLlxuIgorbXNnc3RyICIiCisiUGVyaW5nYXRhbjogbWVsZXdhdGthbiByZWNvdmVyeSBqdXJuYWwga2FyZW5hIHNlZGFuZyBtZWxha3VrYW4gcGVtZXJpa3NhYW4gIgorImRpIHNpc3RlbSBiZXJrYXMgeWFuZyBiYWNhLXNhamEgKHJlYWQtb25seSkuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTUwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHN1cGVyYmxvY2sgZmxhZ3Mgb24gJXNcbiIKK21zZ3N0ciAidGlkYWsgZGFwYXQgbWVuc2V0IHN1cGVyYmxvayBmbGFnIGRpICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWNvdmVyaW5nIGV4dDMgam91cm5hbCBvZiAlcyIKK21zZ3N0ciAia2V0aWthIG1lcmVjb3ZlcnkgZXh0MyBqdXJuYWwgZGFyaSAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpOiIKK21zZ3N0ciAiJXMgbWVtaWxpa2kgZmVhdHVyZSB5YW5nIHRpZGFrIGRpc3VwcG9ydDoiCisKKyM6IGUyZnNjay91bml4LmM6MTU0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhcm5pbmc6IGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorbXNnc3RyICJQZXJpbmdhdGFuOiBzdXBwb3J0IHVudHVrIGtvbXByZXNpIGFkYWxhaCBleHBlcmltZW50YWwuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU1NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBlMmZzY2sgbm90IGNvbXBpbGVkIHdpdGggSFRSRUUgc3VwcG9ydCxcbiIKKyJcdGJ1dCBmaWxlc3lzdGVtICVzIGhhcyBIVFJFRSBkaXJlY3Rvcmllcy5cbiIKK21zZ3N0ciAiIgorIkUyZnNjayB0aWRhayBkaWtvbXBpbGFzaSBkZW5nYW4gbGF5YW5hbiBIVFJFRSxcbiIKKyJcdCB0ZXRhcGkgc2lzdGVtIGJlcmthcyAlcyBtZW1pbGlraSBkaXJla3RvcmkgSFRSRUUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrcyBpbm9kZVxuIgorbXNnc3RyICJrZXRpa2Egc2VkYW5nIG1lbWJhY2EgaW5vZGUgYmxvayBidXJ1ayIKKworIzogZTJmc2NrL3VuaXguYzoxNjEwCittc2dpZCAiVGhpcyBkb2Vzbid0IGJvZGUgd2VsbCwgYnV0IHdlJ2xsIHRyeSB0byBnbyBvbi4uLlxuIgorbXNnc3RyICIiCisiSW5pIGJ1a2FuIHBlcnRhbmRhIGJhaWssIHRhcGkga2l0YSBha2FuIHRldGFwIG1lbmNvYmEgdW50dWsgbWVuZXJ1c2thbi4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJWQgYmxvY2tzKTogIgorbXNnc3RyICJNZW1idWF0IGp1cm5hbCAoJWQgYmxvayk6ICIKKworIzogZTJmc2NrL3VuaXguYzoxNjYyCittc2dpZCAiIERvbmUuXG4iCittc2dzdHIgIiBTZWxlc2FpLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NjQKK21zZ2lkICIiCisiXG4iCisiKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqKioganVybmFsIHRlbGFoIGRpYnVhdCBrZW1iYWxpIC0gc2lzdGVtIGJlcmthcyBzZWthcmFuZyBleHQzIGxhZ2kgKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY4OAorbXNnaWQgIlJlc3RhcnRpbmcgZTJmc2NrIGZyb20gdGhlIGJlZ2lubmluZy4uLlxuIgorbXNnc3RyICJNZW5ndWxhbmcga2VtYmFsaSBlMmZzY2sgZGFyaSBhd2FsLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY5MgorbXNnaWQgIndoaWxlIHJlc2V0dGluZyBjb250ZXh0IgorbXNnc3RyICJrZXRpa2EgbWVyZXNldCBjb250ZXh0IgorCisjOiBlMmZzY2svdW5peC5jOjE2OTkKK21zZ2lkICJhYm9ydGVkIgorbXNnc3RyICJkaWJhdGFsa2FuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGUyZnNjayBjYW5jZWxlZC5cbiIKK21zZ3N0ciAiJXM6IGUyZnNjayBkaWJhdGFsa2FuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NDEgZTJmc2NrL3V0aWwuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqIEZJTEUgU1lTVEVNIFRFTEFIIFRFUk1PRElGSUtBU0kgKioqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAqKioqKiBSRUJPT1QgTElOVVggKioqKipcbiIKK21zZ3N0ciAiJXM6ICoqKioqIFJFQk9PVCBMSU5VWCAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NTMgZTJmc2NrL3V0aWwuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogV0FSTklORzogRmlsZXN5c3RlbSBzdGlsbCBoYXMgZXJyb3JzICoqKioqKioqKipcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIFBFUklOR0FUQU46IFNpc3RlbSBiZXJrYXMgbWFzaWggbWVtaWxpa2kgZXJyb3JzICoqKioqKioqKlxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MCBtaXNjL3V0aWwuYzo4NgorbXNnaWQgInlZIgorbXNnc3RyICJ5WSIKKworIzogZTJmc2NrL3V0aWwuYzoxOTEKK21zZ2lkICJuTiIKK21zZ3N0ciAibk4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA1Cittc2dpZCAiPHk+IgorbXNnc3RyICI8eT4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA3Cittc2dpZCAiPG4+IgorbXNnc3RyICI8bj4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA5Cittc2dpZCAiICh5L24pIgorbXNnc3RyICIoeS9uKSIKKworIzogZTJmc2NrL3V0aWwuYzoyMjMKK21zZ2lkICJjYW5jZWxsZWQhXG4iCittc2dzdHIgImRpYmF0YWxrYW4hXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjM4Cittc2dpZCAieWVzXG4iCittc2dzdHIgInlhXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjQwCittc2dpZCAibm9cbiIKK21zZ3N0ciAidGlkYWtcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyBub1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IHRpZGFrXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8geWVzXG4iCisiXG4iCittc2dzdHIgIiIKKyIlcz8geWFcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTgKK21zZ2lkICJ5ZXMiCittc2dzdHIgInlhIgorCisjOiBlMmZzY2svdXRpbC5jOjI1OAorbXNnaWQgIm5vIgorbXNnc3RyICJ0aWRhayIKKworIzogZTJmc2NrL3V0aWwuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJmc2NrX3JlYWRfYml0bWFwczogaWxsZWdhbCBiaXRtYXAgYmxvY2socykgZm9yICVzIgorbXNnc3RyICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBpbGVnYWwgYml0bWFwIGJsb2sgdW50dWsgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjc4Cittc2dpZCAicmVhZGluZyBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcyIKK21zZ3N0ciAibWVtYmFjYSBpbm9kZSBkYW4gYmxvayBiaXRtYXAiCisKKyM6IGUyZnNjay91dGlsLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJldHJ5aW5nIHRvIHJlYWQgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgImtldGlrYSBzZWRhbmcgbWVuY29iYSB1bnR1ayBtZW1iYWNhIGJpdG1hcCB1bnR1ayAlcyIKKworIzogZTJmc2NrL3V0aWwuYzoyOTgKK21zZ2lkICJ3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIgorbXNnc3RyICJtZW51bGlzIGJsb2sgZGFuIGlub2RlIGJpdG1hcHMiCisKKyM6IGUyZnNjay91dGlsLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJld3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgImtldGlrYSBtZW5jb2JhIHVudHVrIG1lbnVsaXMgYmxvayBkYW4gaW5vZGUgYml0bWFwIHVudHVrICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiJXM6IFVORVhQRUNURUQgSU5DT05TSVNURU5DWTsgUlVOIGZzY2sgTUFOVUFMTFkuXG4iCisiXHQoaS5lLiwgd2l0aG91dCAtYSBvciAtcCBvcHRpb25zKVxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiJXM6IFRFUkpBREkgSU5LT05TSVRFTlNJIFlBTkcgVElEQUsgRElIQVJBUEtBTjsgSkFMQU5LQU4gZnNjayBTRUNBUkEgIgorIk1BTlVBTC5cbiIKKyJcdChpLmUsIHRhbnBhIHBpbGloYW4gLWEgYXRhdSAtcClcbiIKKworIzogZTJmc2NrL3V0aWwuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorbXNnc3RyICJNZW1vcmkgeWFuZyBkaWd1bmFrYW46ICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1LCAiCittc2dzdHIgIk1lbW9yaSB5YW5nIGRpZ3VuYWthbjogJWx1LCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWU6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCittc2dzdHIgIndha3R1OiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbGFwc2VkIHRpbWU6ICU2LjNmXG4iCittc2dzdHIgIndha3R1IHlhbmcgZGlqYWxhbmk6ICU2LjNmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDQ3IGUyZnNjay91dGlsLmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICJrZXRpa2EgIG1lbWJhY2EgaW5vZGUgJWx1IGRhbGFtICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjQ3NSBlMmZzY2svdXRpbC5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAia2V0aWthIG1lbnVsaXMgaW5vZGUgJWx1IGRhbGFtICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjYzNworbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgemVyb2l6aW5nIGJ1ZmZlciIKK21zZ3N0ciAia2V0aWthIG1lbmdhbG9rYXNpa2FuIHplcm9pemluZyBidWZmZXIiCisKKyM6IGUyZnNjay91dGlsLmM6Nzg1Cittc2dpZCAiIgorIlVORVhQRUNURUQgSU5DT05TSVNURU5DWTogdGhlIGZpbGVzeXN0ZW0gaXMgYmVpbmcgbW9kaWZpZWQgd2hpbGUgZnNjayBpcyAiCisicnVubmluZy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjcyCisjLCBmdXp6eQorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgInNlbGVzYWkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYiBibG9ja19zaXplXSBbLWkgaW5wdXRfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxvY2tzX2F0X29uY2VdIFstZCBkZWxheV9mYWN0b3JfYmV0d2Vlbl9yZWFkc10gWy1lICIKKyJtYXhfYmFkX2Jsb2Nrc11cbiIKKyIgICAgICAgWy1wIG51bV9wYXNzZXNdIFstdCB0ZXN0X3BhdHRlcm4gWy10IHRlc3RfcGF0dGVybiBbLi4uXV1dXG4iCisiICAgICAgIGRldmljZSBbbGFzdF9ibG9jayBbZmlyc3RfYmxvY2tdXVxuIgorbXNnc3RyICIiCisiUGVuZ2d1bmFhbjogJXMgWy1iIHVrdXJhbl9ibG9rXSBbLWkgYmVya2FzX21hc3VrYW5dIFstbyBiZXJrYXNfa2VsdWFyYW5dIFstIgorInN2d25mXVxuIgorIiAgICAgICBbLWMgYmxva19kaV9zZWthbGldIFstcCBqdW1sYWhfdGFoYXBdIFstZSBtYWtzaW1hbF9ibG9rX2J1cnVrXSBbLWQgIgorImZha3Rvcl9kZWxheV9hbnRhcmFfYmFjYV1cbiIKKyIgICAgICAgWy1lIHBhdHRlcm5fdGVzXSBbLXQgcGF0dGVybl90ZXN0IFsuLi5dXV1cbiIKKyIgICAgICAgcGVyYW5na2F0IFtibG9rX3RlcmFraGlyIFtibG9rX3BlcnRhbWFdXVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSAtbiBhbmQgLXcgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIgorIlxuIgorbXNnc3RyICIiCisiJXM6IFBpbGloYW4gLW4gZGFuIC13IGFkYWxhaCBtdXR1YWxseSBleGNsdXNpdmUuXG4iCisiXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MjIzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlNi4yZiUlIGRvbmUsICVzIGVsYXBzZWQuICglZC8lZC8lZCBlcnJvcnMpIgorbXNnc3RyICIlNi4yZiUlIHNlbGVzYWksICVzIGJlcmphbGFuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjMyOAorbXNnaWQgIlRlc3Rpbmcgd2l0aCByYW5kb20gcGF0dGVybjogIgorbXNnc3RyICJNZW1lcmlrc2EgZGVuZ2FuIHBhdHRlcm4gcmFuZG9tOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzQ2Cittc2dpZCAiVGVzdGluZyB3aXRoIHBhdHRlcm4gMHgiCittc2dzdHIgIk1lbWVyaWtzYSBkZW5nYW4gcGF0dGVybiAweCIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNzggbWlzYy9iYWRibG9ja3MuYzo0NTEKK21zZ2lkICJkdXJpbmcgc2VlayIKK21zZ3N0ciAia2V0aWthIG1lbmNhcmkoc2VlaykiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIldlaXJkIHZhbHVlICglbGQpIGluIGRvX3JlYWRcbiIKK21zZ3N0ciAiTmlsYWkgYW5laCAoJWxkKSBkYWxhbSBkb19yZWFkXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDc2Cittc2dpZCAiZHVyaW5nIGV4dDJmc19zeW5jX2RldmljZSIKK21zZ3N0ciAia2V0aWthIGV4dDJmc19zeW5jX2RldmljZSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo0OTYgbWlzYy9iYWRibG9ja3MuYzo3NTgKK21zZ2lkICJ3aGlsZSBiZWdpbm5pbmcgYmFkIGJsb2NrIGxpc3QgaXRlcmF0aW9uIgorbXNnc3RyICJrZXRpa2EgZGkgYXdhbCBpdGVyYXNpIGRhZnRhcmEgYmxvayBidXJ1ayIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTEgbWlzYy9iYWRibG9ja3MuYzo2MTEgbWlzYy9iYWRibG9ja3MuYzo3NjkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlcnMiCittc2dzdHIgImtldGlrYSBtZW5nYWxva2FzaWthbiBidWZmZXIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGJsb2NrcyAlbHUgdG8gJWx1XG4iCittc2dzdHIgIk1lbWVyaWtzYSBibG9rICVsdSBrZSAlbHVcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjAKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLW9ubHkgbW9kZVxuIgorbXNnc3RyICJNZW1lcmlrc2EgYmxvayBidXJ1ayBkYWxhbSBtb2RlIGJhY2Etc2FqYSAocmVhZC1vbmx5KVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyOQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChyZWFkLW9ubHkgdGVzdCk6ICIKK21zZ3N0ciAiTWVtZXJpa3NhIGJsb2sgYnVydWsgKHBlbWVyaWtzYWFuIGJhY2Etc2FqYSk6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MzYgbWlzYy9iYWRibG9ja3MuYzo2NDMgbWlzYy9iYWRibG9ja3MuYzo2ODUKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODMyCittc2dpZCAiVG9vIG1hbnkgYmFkIGJsb2NrcywgYWJvcnRpbmcgdGVzdFxuIgorbXNnc3RyICJUZXJsYWx1IGJhbnlhayBibG9rIGJ1cnVrLCBtZW1iYXRhbGthbiBwZW1lcmlrc2FhblxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYxOAorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJNZW1lcmlrc2EgdW50dWsgYmxvayBidXJ1ayBkYWxhbSBtb2RlIGJhY2EtdHVsaXNcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MjAgbWlzYy9iYWRibG9ja3MuYzo3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSBibG9jayAlbHUgdG8gJWx1XG4iCittc2dzdHIgIkRhcmkgYmxvayAlbHUga2UgJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Njc1Cittc2dpZCAiUmVhZGluZyBhbmQgY29tcGFyaW5nOiAiCittc2dzdHIgIk1lbWJhY2EgZGFuIG1lbWJhbmRpbmdrYW46ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiBub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIk1lbWVyaWtzYSB1bnR1ayBibG9rIGJ1cnVrIGRhbGFsIG1vZGUgdGlkYWstbWVydXNhayBiYWNhLXR1bGlzXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzg3Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIHRlc3QpXG4iCittc2dzdHIgIk1lbWVyaWtzYSB1bnR1ayBibG9rIGJ1cnVrIChwZW1lcmlrc2FhbiB0aWRhay1tZXJ1c2FrIGJhY2EtdHVsaXMpXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzk0Cittc2dpZCAiIgorIlxuIgorIkludGVycnVwdCBjYXVnaHQsIGNsZWFuaW5nIHVwXG4iCittc2dzdHIgIiIKKyJcbiIKKyJJbnRlcnVwc2kgdGVydGFuZ2thcCwgbWVtYmVyc2loa2FuXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmluZyB0ZXN0IGRhdGEgd3JpdGUsIGJsb2NrICVsdSIKK21zZ3N0ciAia2V0aWthIG1lbWVyaWthcyBkYXRhIGRpdHVsaXMsIGJsb2sgJWx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk5OCBtaXNjL3V0aWwuYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZDsgIgorbXNnc3RyICIlcyBzZWRhbmcgZGltb3VudDsgIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDAKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiYmFkYmxva3MgdGV0YXAgZGlwYWtzYWthbi4gTXVkYWgtbXVkYWhhbiAvZXRjL210YWIgdGlkYWsgYmVuYXJcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDA1Cittc2dpZCAiaXQncyBub3Qgc2FmZSB0byBydW4gYmFkYmxvY2tzIVxuIgorbXNnc3RyICJpbmkgdGlkYWsgYW1hbiB1bnR1ayBtZW5qYWxhbmthbiBiYWRibG9ja3MhXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAxMCBtaXNjL3V0aWwuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYXBwYXJlbnRseSBpbiB1c2UgYnkgdGhlIHN5c3RlbTsgIgorbXNnc3RyICIlcyBrZWxpaGF0YW5ueWEgc2VkYW5nIGRpZ3VuYWthbiBvbGVoIHN5c3RlbTsgIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMTMKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAiYmFkYmxvY2tzIGRpcGFrc2FrYW4gc2FqYS5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMgLSAlcyIKK21zZ3N0ciAidGlkYWsgdmFsaWQgJXMgLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBiaWcgbWF4IGJhZCBibG9ja3MgY291bnQgJXUgLSBtYXhpbXVtIGlzICV1IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRlc3RfcGF0dGVybiAtICVzIgorbXNnc3RyICJ0aWRhayBkYXBhdCBtZW5nYWxva2FzaWthbiBtZW1vcmkgdW50dWsgdGVzdF9wYXR0ZXJuIC0gJXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE4NAorbXNnaWQgIk1heGltdW0gb2Ygb25lIHRlc3RfcGF0dGVybiBtYXkgYmUgc3BlY2lmaWVkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICIiCisiTWFrc2ltdW0gZGFyaSBzYXR1IHRlc3RfcGF0dGVybiBib2xlaCBkaXNwZXNpZmlrYXNpIGRhbGFtIG1vZGUgYmFjYS1zYWphIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExOTAKK21zZ2lkICJSYW5kb20gdGVzdF9wYXR0ZXJuIGlzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJSYW5kb20gdGVzdF9wYXR0ZXJuIHRpZGFrIGRpcGVyYm9sZWhrYW4gZGFsYW0gbW9kZSBiYWNhLXNhamEiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwNAorbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBtYW51YWxseVxuIgorbXNnc3RyICIiCisiVGlkYWsgZGFwYXQgbWVuZW50dWthbiB1a3VyYW4gcGVyYW5na2F0OyBhbmRhIGhhcnVzIG1lbnNwZXNpZmlrYXNpa2FuXG4iCisidWt1cmFuIHBlcmFuZ2thdCBzZWNhcmEgbWFudWFsXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIxMAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZGV2aWNlIHNpemUiCittc2dzdHIgImtldGlrYSBtZW5jb2JhIHVudHVrIG1lbmVudHVrYWtuIHVrdXJhbiBwZXJhbmdrYXQiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIxNQorbXNnaWQgImxhc3QgYmxvY2siCittc2dzdHIgImJsb2sgdGVyYWtoaXIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIyMQorbXNnaWQgImZpcnN0IGJsb2NrIgorbXNnc3RyICJibG9rIHBlcnRhbWEiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIyNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAoJWxsdSk6IG11c3QgYmUgbGVzcyB0aGFuICVsbHUiCittc2dzdHIgImF3YWwgYmxvayB0aWRhayB2YWxpZCAoJWx1KTogaGFydXMgbGViaWgga2VjaWwgZGFyaSAlbHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBlbmQgYmxvY2sgKCVsbHUpOiBtdXN0IGJlIDMyLWJpdCB2YWx1ZSIKK21zZ3N0ciAiYXdhbCBibG9rIHRpZGFrIHZhbGlkICglbHUpOiBoYXJ1cyBsZWJpaCBrZWNpbCBkYXJpICVsdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjg3Cittc2dpZCAid2hpbGUgY3JlYXRpbmcgaW4tbWVtb3J5IGJhZCBibG9ja3MgbGlzdCIKK21zZ3N0ciAia2V0aWthIG1lbWJ1YXQgZGFmdGFyIGJsb2sgYnVydWsgZGFsYW0gbWVtb3JpIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyOTYKK21zZ2lkICJpbnB1dCBmaWxlIC0gYmFkIGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEzMDQgbWlzYy9iYWRibG9ja3MuYzoxMzEzCittc2dpZCAid2hpbGUgYWRkaW5nIHRvIGluLW1lbW9yeSBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAia2V0aWthIG1lbmFtYmFoa2FuIGRhZnRhciBibG9rIGJ1cnVrIGRhbGFtIG1lbW9yaSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzM4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIKK21zZ3N0ciAiVGFoYXAgc2VsZXNhaSwgJXUgYmxvayBidXJ1ayBkaXRlbXVrYW4uXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWZl0gWy0rPWFBY0NkRGVpanNTdFR1XSBbLXYgdmVyc2lvbl0gZmlsZXMuLi5cbiIKK21zZ3N0ciAiUGVuZ2d1bmFhbjogJXMgWy1SVmZdIFstKz1BYWNEZGVpanNTdV0gWy12IHZlcnNpXSBiZXJrYXMuLi5cbiIKKworIzogbWlzYy9jaGF0dHIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHZlcnNpb24gLSAlc1xuIgorbXNnc3RyICJ2ZXJzaSBidXJ1ayAtICVzXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MjAxIG1pc2MvbHNhdHRyLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzdGF0ICVzIgorbXNnc3RyICJrZXRpa2EgbWVuY29iYSB1bnR1ayBtZWxha3VrYW4gc3RhdGlzdGlrICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJrZXRpa2EgbWVtYmFjYSBmbGFncyBkaSAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyMTMgbWlzYy9jaGF0dHIuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3Mgb2YgJXMgc2V0IGFzICIKK21zZ3N0ciAiRmxhZ3MgZGFyaSAlcyBkaXNldCBzZWJhZ2FpICIKKworIzogbWlzYy9jaGF0dHIuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAia2V0aWthIG1lbnNldCBmbGFncyBkaSAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiBvZiAlcyBzZXQgYXMgJWx1XG4iCittc2dzdHIgIlZlcnNpIGRhcmkgJXMgZGlzZXQgc2ViYWdhaSAlbHVcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJrZXRpa2EgbWVuc2V0IHZlcnNpIGRpICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjI2NworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIHBhdGggdmFyaWFibGUgaW4gY2hhdHRyX2Rpcl9wcm9jIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW5nYWxva2FzaWthbiB2YXJpYWJsZSBwYXRoIGRpIGNoYXR0cl9kaXJfcHJvYyIKKworIzogbWlzYy9jaGF0dHIuYzozMDcKK21zZ2lkICI9IGlzIGluY29tcGF0aWJsZSB3aXRoIC0gYW5kICtcbiIKK21zZ3N0ciAiPSB0aWRhayBrb21wYXRpYmVsIGRlbmdhbiAtIGRhbiArXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MzE1Cittc2dpZCAiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iCittc2dzdHIgIkhhcnVzIG1lbmdndW5ha2FuICctdicsID0sIC0gYXRhdSArXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2NrPTxudW0+XSBbLW8gYmxvY2tzaXplPTxudW0+XSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIlBlbmdndW5hYW46ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9rPTxqdW1sYWg+XSBbLW8gdWt1cmFuYmxvaz08YmVzYXI+XSAiCisicGVyYW5na2F0XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNTkKKyMsIGZ1enp5Cittc2dpZCAiYmxvY2tzIgorbXNnc3RyICJiYmxvY2siCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNjkKK21zZ2lkICJjbHVzdGVycyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkdyb3VwICVsdTogKEJsb2NrcyAiCittc2dzdHIgIkdydXAgJWx1OiAoYmxvayAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgQ2hlY2tzdW0gMHglMDR4IgorbXNnc3RyICIgIENoZWNrc3VtIDB4JTA0eCwgaW5vZGUgeWFuZyB0aWRhayBkaWd1bmFrYW4gJWRcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKEVYUEVDVEVEIDB4JTA0eCkiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiLCB1bnVzZWQgaW5vZGVzICV1XG4iCittc2dzdHIgIiwgJXUgaW5vZGUgeWFuZyB0aWRhayBkaWd1bmFrYW5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICVzIHN1cGVyYmxvY2sgYXQgIgorbXNnc3RyICIgICVzIHN1cGVyYmxvayBkaSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTQKK21zZ2lkICJQcmltYXJ5IgorbXNnc3RyICJVdGFtYSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNAorbXNnaWQgIkJhY2t1cCIKK21zZ3N0ciAiQ2FkYW5nYW4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTgKK21zZ2lkICIsIEdyb3VwIGRlc2NyaXB0b3JzIGF0ICIKK21zZ3N0ciAiLCBHcnVwIGRlc2tyaXBzaSBkaSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjIKK21zZ2lkICIiCisiXG4iCisiICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgUmVzZXJ2ZWQgR0RUIGJsb2sgZGkgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjI5Cittc2dpZCAiIEdyb3VwIGRlc2NyaXB0b3IgYXQgIgorbXNnc3RyICIgR3J1cCBkZXNrcmlwc2kgZGkgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM1Cittc2dpZCAiICBCbG9jayBiaXRtYXAgYXQgIgorbXNnc3RyICIgIEJsb2sgYml0bWFwIGRpICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzOQorbXNnaWQgIiwgSW5vZGUgYml0bWFwIGF0ICIKK21zZ3N0ciAiLCBJbm9kZSBiaXRtYXAgZGkgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQzCittc2dpZCAiIgorIlxuIgorIiAgSW5vZGUgdGFibGUgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBJbm9kZSB0YWJlbCBkaSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgICV1IGZyZWUgJXMsICV1IGZyZWUgaW5vZGVzLCAldSBkaXJlY3RvcmllcyVzIgorbXNnc3RyICIiCisiXG4iCisiICAldSBibG9rIGJlYmFzLCAldSBpbm9kZSBiZWJhcywgJXUgZGlyZWt0b3JpJXMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAldSB1bnVzZWQgaW5vZGVzXG4iCittc2dzdHIgIiwgJXUgaW5vZGUgeWFuZyB0aWRhayBkaWd1bmFrYW5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1OQorbXNnaWQgIiAgRnJlZSBibG9ja3M6ICIKK21zZ3N0ciAiICBCbG9rIGJlYmFzOiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNzQKK21zZ2lkICIgIEZyZWUgaW5vZGVzOiAiCittc2dzdHIgIiAgSW5vZGUgYmViYXM6ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxMAorbXNnaWQgIndoaWxlIHByaW50aW5nIGJhZCBibG9jayBsaXN0IgorbXNnc3RyICJrZXRpa2EgbWVuY2V0YWsgZGFmdGFyIGJsb2sgYnVydWsiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrczogJXUiCittc2dzdHIgIkJsb2sgYnVydWs6ICV1IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzQ1IG1pc2MvdHVuZTJmcy5jOjM0NworbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAia2V0aWthIG1lbWJhY2EganVybmFsIGlub2RlIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzUxCittc2dpZCAid2hpbGUgb3BlbmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJrZXRpa2EgbWVtYnVrYSBqdXJuYWwgaW5vZGUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNTcKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXIgYmxvY2siCittc2dzdHIgImtldGlrYSBtZW1iYWNhIHN1cGVyIGJsb2sganVybmFsIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzY0CisjLCBmdXp6eQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXIgaW52YWxpZCFcbiIKK21zZ3N0ciAiSnVybmFsIHN1cGVyYmxvayB0aWRhayBkaXRlbXVrYW4hXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjcKK21zZ2lkICJKb3VybmFsIGZlYXR1cmVzOiAgICAgICAgIgorbXNnc3RyICJGYXNpbGl0YXMganVybmFsOiAgICAgICAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzgwCittc2dpZCAiSm91cm5hbCBzaXplOiAgICAgICAgICAgICAiCittc2dzdHIgIlVrdXJhbiBqdXJuYWw6ICAgICAgICAgICAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCittc2dzdHIgIiIKKyJQYW5qYW5nIGp1cm5hbDogICAgICAgICAgICV1XG4iCisiVXJ1dGFuIGp1cm5hbDogICAgICAgICAgICAweCUwOHhcbiIKKyJBd2FsIGRhcmkganVybmFsOiAgICAgICAgICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozOTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZXJybm86ICAgICAgICAgICAgJWRcbiIKK21zZ3N0ciAiUGVuZ2d1bmEganVybmFsOiAgICAgICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MTUgbWlzYy90dW5lMmZzLmM6MTk2Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgImtldGlrYW4gbWVtYmFjYSBzdXBlcmJsb2sganVybmFsIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDIzCittc2dpZCAiQ291bGRuJ3QgZmluZCBqb3VybmFsIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVycyIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuY2FyaSBub21vciBtYWdpYyBkaSBqdXJuYWwgc3VwZXJibG9rIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIGJsb2NrIHNpemU6ICAgICAgICV1XG4iCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgZmlyc3QgYmxvY2s6ICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIG51bWJlciBvZiB1c2VyczogICV1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJVa3VyYW4gYmxvayBqdXJuYWw6ICAgICAgICV1XG4iCisiUGFuamFuZyBqdXJuYWw6ICAgICAgICAgICAldVxuIgorIkJsb2sgcGVydGFtYSBqdXJuYWw6ICAgICAgJXVcbiIKKyJVcnV0YW4ganVybmFsOiAgICAgICAgICAgIDB4JTA4eFxuIgorIkF3YWwgZGFyaSBqdXJuYWw6ICAgICAgICAgJXVcbiIKKyJKdW1sYWggcGVuZ2d1bmEgZGFyaSBqdXJuYWw6ICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB1c2VyczogICAgICAgICAgICAlc1xuIgorbXNnc3RyICJQZW5nZ3VuYSBqdXJuYWw6ICAgICAgICAgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ1NiBtaXNjL21rZTJmcy5jOjc0MyBtaXNjL3R1bmUyZnMuYzoxMjExCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIG9wdGlvbnMhXG4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmdhbG9rYXNpa2FuIG1lbW9yaSB1bnR1ayBtZW1wYXJzZSBwaWxpaGFuIVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jayBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlBhcmFtZXRlciBzdXBlcmJsb2sgdGlkYWsgdmFsaWQ6ICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBibG9ja3NpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXJhbWV0ZXIgdWt1cmFuLWJsb2sgdGlkYWsgdmFsaWQ6ICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBleHRlbmRlZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdHN1cGVyYmxvY2s9PHN1cGVyYmxvY2sgbnVtYmVyPlxuIgorIlx0YmxvY2tzaXplPTxibG9ja3NpemU+XG4iCittc2dzdHIgIiIKKyJcbiIKKyJQaWxpaGFuIGV4dGVuZGVkIGJ1cnVrIGRpc3Blc2lmaWthc2lrYW46ICVzXG4iCisiXG4iCisiUGlsaWhhbiBleHRlbmRlZCBkaXBpc2Foa2FuIGRlbmdhbiBrb21hLCBkYW4gYm9sZWggbWVtYmF3YSBhcmd1bWVudCBkaW1hbmFcbiIKKyJcdGluaSBkaSBzZXQgb2ZmIG9sZWggc2VidWFoIHRhbmRhIHNhbWEgZGVuZ2FuICgnPScpLlxuIgorIlxuIgorIlBpbGloYW4gZXh0ZW5kZWQgeWFuZyB2YWxpZCBhZGFsYWg6XG4iCisiXHRzdXBlcmJsb2NrPTxub21vciBzdXBlcmJsb2s+XG4iCisiXHRibG9ja3NpemU9PGJlc2FyIGJsb2s+XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NjggbWlzYy9ta2UyZnMuYzoxNzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXNcbiIKK21zZ3N0ciAiXHRNZW5nZ3VuYWthbiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjA2IG1pc2MvZTJpbWFnZS5jOjE1ODIgbWlzYy90dW5lMmZzLmM6MjA2MAorIzogcmVzaXplL21haW4uYzozMTkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuY2FyaSBzdXBlcmJsb2sgc2lzdGVtIGJlcmthcyB5YW5nIHZhbGlkLlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogJXM6IGVycm9yIHJlYWRpbmcgYml0bWFwczogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAlczogZXJyb3IgbWVtYmFjYSBiaXRtYXBzOiAlc1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbIC1yfFEgXSBbIC1mciBdIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIlBlbmdndW5hYW46ICVzIFstcnNJXSBwZXJhbmdrYXQgaW1hZ2VfZmlsZVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyAtSSBkZXZpY2UgaW1hZ2UtZmlsZVxuIgorbXNnc3RyICJQZW5nZ3VuYWFuOiAlcyBbLXJzSV0gcGVyYW5na2F0IGltYWdlX2ZpbGVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgJXMgLXJhICBbICAtY2ZucCAgXSBbIC1vIHNyY19vZmZzZXQgXSBbIC1PIGRlc3Rfb2Zmc2V0IF0gc3JjX2ZzICIKKyJbIGRlc3RfZnMgXVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2OSBtaXNjL2UyaW1hZ2UuYzo1NzYgbWlzYy9lMmltYWdlLmM6NTgyCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTc4CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVyIgorbXNnc3RyICJrZXRpa2EgbWVuZ2Fsb2thc2lrYW4gYnVmZmVyIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgYmxvY2sgJWxsdVxuIgorbXNnc3RyICJNZW1lcmlrc2EgYmxvayAlbHUga2UgJWx1XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE4OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igd3JpdGluZyBibG9jayAlbGx1IgorbXNnc3RyICJFcnJvciBtZW51bGlzIGJsb2NrICVsdSAoJXMpLiAgIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxOTEKK21zZ2lkICJlcnJvciBpbiBnZW5lcmljX3dyaXRlKCkiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MjA4Cittc2dpZCAiRXJyb3I6IGhlYWRlciBzaXplIGlzIGJpZ2dlciB0aGFuIHdydF9zaXplXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MjEzCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgaGVhZGVyIGJ1ZmZlclxuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW5nYWxva2FzaWthbiBidWZmZXIgaGVhZGVyXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI0MQorbXNnaWQgIndoaWxlIHdyaXRpbmcgc3VwZXJibG9jayIKK21zZ3N0ciAia2V0aWthIG1lbnVsaXMgc3VwZXJibG9rIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNTAKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJrZXRpa2EgbWVudWxpcyB0YWJlbCBpbm9kZSIKKworIzogbWlzYy9lMmltYWdlLmM6MjU4Cittc2dpZCAid2hpbGUgd3JpdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgImtldGlrYSBtZW51bGlzIGJsb2sgYml0bWFwIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNjYKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAia2V0aWthIG1lbnVsaXMgaW5vZGUgYml0bWFwIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1MDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCByZWNfbGVuICglZClcbiIKK21zZ3N0ciAiRGlyZWt0b3JpIGJsb2NrICV1ICgjJWQpIGtvc29uZyBkYWxhbSBpbm9kZSAldVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1MTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCBuYW1lX2xlbiAoJWQpXG4iCittc2dzdHIgIkRpcmVrdG9yaSBibG9jayAldSAoIyVkKSBrb3NvbmcgZGFsYW0gaW5vZGUgJXVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6NTU1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlbGx1IC8gJWxsdSBibG9ja3MgKCVkJSUpIgorbXNnc3RyICIldSBpbm9kZXMsICV1IGJsb2tcbiIKKworIzogbWlzYy9lMmltYWdlLmM6NTg2IG1pc2MvZTJpbWFnZS5jOjYyNgorbXNnaWQgIkNvcHlpbmcgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjYyMworbXNnaWQgIiIKKyJTdG9wcGluZyBub3cgd2lsbCBkZXN0cm95IHRoZSBmaWxlc3lzdGVtLCBpbnRlcnJ1cHQgYWdhaW4gaWYgeW91IGFyZSBzdXJlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyByZW1haW5pbmcgYXQgJS4yZiBNQi9zIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjY2MSBtaXNjL2UyaW1hZ2UuYzoxMTg4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIGJsb2NrICVsbHUiCittc2dzdHIgIkVycm9yIG1lbWJhY2EgYmxvY2sgJWx1ICglcykuICAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3BpZWQgJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSBpbiAlcyAiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF0ICUuMmYgTUIvcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3NTUKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBsMSB0YWJsZSIKK21zZ3N0ciAia2V0aWthIG1lbmdhbG9rYXNpa2FuIGJ1ZmZlciIKKworIzogbWlzYy9lMmltYWdlLmM6ODAwCisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgbDIgY2FjaGUiCittc2dzdHIgImtldGlrYSBtZW5nYWxva2FzaWthbiBidWZmZXIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjgyMworbXNnaWQgIiIKKyJXYXJuaW5nOiBUaGVyZSBhcmUgc3RpbGwgdGFibGVzIGluIHRoZSBjYWNoZSB3aGlsZSBwdXR0aW5nIHRoZSBjYWNoZSwgZGF0YSAiCisid2lsbCBiZSBsb3N0IHNvIHRoZSBpbWFnZSBtYXkgbm90IGJlIHZhbGlkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjExNDUKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBleHQyX3Fjb3cyX2ltYWdlIgorbXNnc3RyICJrZXRpa2EgbWVuZ2Fsb2thc2lrYW4gemVyb2l6aW5nIGJ1ZmZlciIKKworIzogbWlzYy9lMmltYWdlLmM6MTE1MgorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgZXh0Ml9xY293Ml9pbWFnZSIKK21zZ3N0ciAia2V0aWthIG1lbmdpbmlzaWFsaXNhc2kganVybmFsIHN1cGVyYmxvayIKKworIzogbWlzYy9lMmltYWdlLmM6MTIxMSBtaXNjL2UyaW1hZ2UuYzoxMjI5Cittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I6IG11bHRpcGxlIHNlcXVlbnRpYWwgcmVmY291bnQgYmxvY2tzIGNyZWF0ZWQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTI2OQorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAia2V0aWthIG1lbnVsaXMgYmxvayBiaXRtYXAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyNzgKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBzY3JhbWJsZSBibG9jayBiaXRtYXAiCittc2dzdHIgImtldGlrYSBtZW51bGlzIGJsb2sgYml0bWFwIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjg1CisjLCBmdXp6eQorbXNnaWQgIlNjYW5uaW5nIGlub2Rlcy4uLlxuIgorbXNnc3RyICJNZW1lcmlrc2EgdGFiZWwgaW5vZGUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyOTcKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW5nYWxva2FzaWthbiBibG9jayBidWZmZXIgKHVrdXJhbj0lZClcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTMzNiBtaXNjL2UyaW1hZ2UuYzoxMzUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBpdGVyYXRpbmcgb3ZlciBpbm9kZSAldSIKK21zZ3N0ciAia2V0aWthIG1lbXBlcm9sZWggaW5vZGUgYmVyaWt1dG55YSIKKworIzogbWlzYy9lMmltYWdlLmM6MTM4MQorbXNnaWQgIlJhdyBhbmQgcWNvdzIgaW1hZ2VzIGNhbm5vdCBiZSBpbnN0YWxsZWQiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTQwMworIywgZnV6enkKK21zZ2lkICJlcnJvciByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgImtldGlrYSBtZW1iYWNhIGJpdG1hcCIKKworIzogbWlzYy9lMmltYWdlLmM6MTQxNQorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGRldmljZSBmaWxlIgorbXNnc3RyICJrZXRpa2EgbWVuY29iYSBtZW1idWthIGlub2RlIHNjYW4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MjYKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgcmVzdG9yaW5nIHRoZSBpbWFnZSB0YWJsZSIKK21zZ3N0ciAia2V0aWthIG1lbnVsaXMgdGFiZWwgaW5vZGUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MjMKK21zZ2lkICItYSBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHJhdyBvciBRQ09XMiBpbWFnZXMuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MjkKK21zZ2lkICJPZmZzZXRzIGFyZSBvbmx5IGFsbG93ZWQgd2l0aCByYXcgaW1hZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTM0Cittc2dpZCAiTW92ZSBtb2RlIGlzIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MzkKK21zZ2lkICJNb3ZlIG1vZGUgcmVxdWlyZXMgYWxsIGRhdGEgbW9kZS4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTU0OQorIywgZnV6enkKK21zZ2lkICJjaGVja2luZyBpZiBtb3VudGVkIgorbXNnc3RyICIgKHBlbWVyaWtzYWFuIGRpbGFrdWthbiBkYWxhbSAlbGQgbW91bnRzKSIKKworIzogbWlzYy9lMmltYWdlLmM6MTU1NgorbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGUyaW1hZ2Ugb24gYSBSL1cgbW91bnRlZCBmaWxlc3lzdGVtIGNhbiByZXN1bHQgaW4gYW5cbiIKKyJpbmNvbnNpc3RlbnQgaW1hZ2Ugd2hpY2ggd2lsbCBub3QgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4iCisiVXNlIC1mIG9wdGlvbiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gdGhhdC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjA4Cittc2dpZCAiUUNPVzIgaW1hZ2UgY2FuIG5vdCBiZSB3cml0dGVuIHRvIHRoZSBzdGRvdXQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYxNAorbXNnaWQgIkNhbiBub3Qgc3RhdCBvdXRwdXRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkltYWdlICglcykgaXMgY29tcHJlc3NlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW1hZ2UgKCVzKSBpcyBlbmNyeXB0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjb252ZXJ0IHFjb3cyIGltYWdlICglcykgaW50byByYXcgaW1hZ2UgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjM5CisjLCBmdXp6eQorbXNnaWQgIlRoZSAtYyBvcHRpb24gb25seSBzdXBwb3J0ZWQgaW4gcmF3IG1vZGVcbiIKK21zZ3N0ciAiUGlsaWhhbiAtdCB0aWRhayBkaWxheWFuaSBkYWxhbSB2ZXJzaSBlMmZzY2sgaW5pLlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjQ0CisjLCBmdXp6eQorbXNnaWQgIlRoZSAtYyBvcHRpb24gbm90IHN1cHBvcnRlZCB3aGVuIHdyaXRpbmcgdG8gc3Rkb3V0XG4iCittc2dzdHIgIlBpbGloYW4gLXQgdGlkYWsgZGlsYXlhbmkgZGFsYW0gdmVyc2kgZTJmc2NrIGluaS5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY1MQorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGNoZWNrX2J1ZiIKK21zZ3N0ciAia2V0aWthIG1lbmdhbG9rYXNpa2FuIGJ1ZmZlciIKKworIzogbWlzYy9lMmltYWdlLmM6MTY1NworIywgZnV6enkKK21zZ2lkICJUaGUgLXAgb3B0aW9uIG9ubHkgc3VwcG9ydGVkIGluIHJhdyBtb2RlXG4iCittc2dzdHIgIlBpbGloYW4gLXQgdGlkYWsgZGlsYXlhbmkgZGFsYW0gdmVyc2kgZTJmc2NrIGluaS5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY2NworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibG9ja3MgYWxyZWFkeSBjb250YWluZWQgdGhlIGRhdGEgdG8gYmUgY29waWVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmxhYmVsLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IG9wZW4gJXNcbiIKK21zZ3N0ciAiZTJsYWJlbDogdGlkYWsgZGFwYXQgbWVtYnVrYSAlc1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IHRpZGFrIGRhcGF0IG1lbmNhcmkgc3VwZXJibG9rXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHJlYWRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBlcnJvciBtZW1iYWNhIHN1cGVyYmxva1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBub3QgYW4gZXh0MiBmaWxlc3lzdGVtXG4iCittc2dzdHIgImUybGFiZWw6IGJ1a2FuIHNlYnVhaCBleHQyIHNpc3RlbSBiZXJrYXNcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6OTcgbWlzYy90dW5lMmZzLmM6MjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBsYWJlbCB0b28gbG9uZywgdHJ1bmNhdGluZy5cbiIKK21zZ3N0ciAiUGVyaW5nYXRhbjogbGFiZWwgdGVybGFsdSBwYW5qYW5nLCBtZW1vdG9uZy5cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2sgYWdhaW5cbiIKK21zZ3N0ciAiZTJsYWJlbDogdGlkYWsgZGFwYXQgbWVuY2FyaSBzdXBlcmJsb2sgbGFnaVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3Igd3JpdGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGVycm9yIG1lbnVsaXMgc3VwZXJibG9rXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjExNyBtaXNjL3R1bmUyZnMuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGUybGFiZWwgZGV2aWNlIFtuZXdsYWJlbF1cbiIKK21zZ3N0ciAiUGVuZ2d1bmFhbjogZTJsYWJlbCBwZXJhbmdrYXQgW2xhYmVsYmFydV1cbiIKKworIzogbWlzYy9lMnVuZG8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgPHRyYW5zYWN0aW9uIGZpbGU+IDxmaWxlc3lzdGVtPlxuIgorbXNnc3RyICJQZW5nZ3VuYWFuOiAlcyA8YmVya2FzIHRyYW5zYWtzaT4gPHNpc3RlbSBiZXJrYXM+XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NTIKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIKK21zZ3N0ciAiR2FnYWwgbWVtYmFjYSBkYXRhIGZpbGVzeXN0ZW0gXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NjIgbWlzYy9lMnVuZG8uYzo4MyBtaXNjL2UydW5kby5jOjEwOCBtaXNjL2UydW5kby5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX2ZldGNoICVzXG4iCittc2dzdHIgIkdhZ2FsIHRkYl9mZXRjaCAlc1xuIgorCisjOiBtaXNjL2UydW5kby5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBNb3VudCB0aW1lIGRpZG4ndCBtYXRjaCAldVxuIgorbXNnc3RyICJTaXN0ZW0gYmVya2FzIHdha3R1IG1vdW50IHRpZGFrIGNvY29rICV1XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6ODkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gVVVJRCBkaWRuJ3QgbWF0Y2ggXG4iCittc2dzdHIgIlNpc3RlbSBiZXJrYXMgVVVJRCB0aWRhayBjb2NvayBcbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9vcGVuICVzXG4iCittc2dzdHIgIkdhZ2FsIHRkYl9vcGVuICVzXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiRXJyb3Iga2V0aWthIG1lbmVudHVrYW4gYXBha2FoICVzIHN1ZGFoIGRpbW91bnQuXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTc1Cittc2dpZCAiZTJ1bmRvIHNob3VsZCBvbmx5IGJlIHJ1biBvbiB1bm1vdW50ZWQgZmlsZSBzeXN0ZW1cbiIKK21zZ3N0ciAiIgorImUydW5kbyBzZWhhcnVzbnlhIGhhbnlhIGRpamFsYW5rYW4gZGkgc2lzdGVtIGJlcmthcyB5YW5nIHN1ZGFoIGRpdW5tb3VudFxuIgorCisjOiBtaXNjL2UydW5kby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlc1xuIgorbXNnc3RyICJHYWdhbCBtZW1idWthICVzXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJSZXBsYXllZCB0cmFuc2FjdGlvbiBvZiBzaXplICV6ZCBhdCBsb2NhdGlvbiAlbGx1XG4iCittc2dzdHIgIkJhbGFzYW4gdWt1cmFuIHRyYW5zYWtzaSAlemQgZGkgbG9rYXNpICVsZFxuIgorCisjOiBtaXNjL2UydW5kby5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgd3JpdGUgJXNcbiIKK21zZ3N0ciAiR2FnYWwgbWVudWxpcyAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogY291bGRuJ3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiUEVSSU5HQVRBTjogdGlkYWsgZGFwYXQgbWVtYnVrYSAlczogJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGJhZCBmb3JtYXQgb24gbGluZSAlZCBvZiAlc1xuIgorbXNnc3RyICJQRVJJTkdBVEFOOiBmb3JtYXQgYnVydWsgZGkgYmFyaSAlZCBkYXJpICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM3MAorIywgZnV6enkKK21zZ2lkICIiCisiV0FSTklORzogWW91ciAvZXRjL2ZzdGFiIGRvZXMgbm90IGNvbnRhaW4gdGhlIGZzY2sgcGFzc25vXG4iCisiXHRmaWVsZC4gIEkgd2lsbCBrbHVkZ2UgYXJvdW5kIHRoaW5ncyBmb3IgeW91LCBidXQgeW91XG4iCisiXHRzaG91bGQgZml4IHlvdXIgL2V0Yy9mc3RhYiBmaWxlIGFzIHNvb24gYXMgeW91IGNhbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxhXGFcYVBFUklOR0FUQU46IC9ldGMvZnN0YWIgYW5kYSB0aWRhayBiZXJpc2kgZnNjayBwYXNzbm9cbiIKKyJcdHBpbGloYW4uIFNheWEgYWthbiBrbHVkZSBhcm91bmQgdGhpbmdzIHVudHVrIGFuZGEsIHRldGFwaSBhbmRhXG4iCisiXHRzZWhhcnVzbnlhIG1lbWJldHVsa2FuIGJlcmthcyAvZXRjL2ZzdGFiIGFuZGEgc2VjZXBhdG55YS5cbiIKKyJcbiIKKworIzogbWlzYy9mc2NrLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6ICVzOiBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNjazogJXM6IHRpZGFrIGRpdGVtdWthblxuIgorCisjOiBtaXNjL2ZzY2suYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIgorbXNnc3RyICIlczogdHVuZ2d1OiBUaWRhayBhZGEgbGFnaSBwcm9zZXMgYW5haz8hP1xuIgorCisjOiBtaXNjL2ZzY2suYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZy4uLiAlcyBmb3IgZGV2aWNlICVzIGV4aXRlZCB3aXRoIHNpZ25hbCAlZC5cbiIKK21zZ3N0ciAiUGVyaW5nYXRhbi4uLiAlcyB1bnR1ayBwZXJhbmdrYXQgJXMga2VsdWFyIGRlbmdhbiBzaW55YWwgJWQuXG4iCisKKyM6IG1pc2MvZnNjay5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlczogc3RhdHVzIGlzICV4LCBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIgorbXNnc3RyICIlcyAlczogc3RhdHVzIGFkYWxhaCAleCwgc2VoYXJ1c255YSB0aWRhayBwZXJuYWggdGVyamFkaS5cbiIKKworIzogbWlzYy9mc2NrLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmlzaGVkIHdpdGggJXMgKGV4aXQgc3RhdHVzICVkKVxuIgorbXNnc3RyICJCZXJha2hpciBkZW5nYW4gJXMgKHN0YXR1cyBrZWx1YXIgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiVzOiBFcnJvciAlZCBrZXRpa2EgbWVuamFsYW5rYW4gZnNjay4lcyB1bnR1ayAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzo3NDIKK21zZ2lkICIiCisiRWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSBmaWxlc3lzdGVtIHR5cGVzIHBhc3NlZCB0byAtdCBtdXN0IGJlIHByZWZpeGVkXG4iCisid2l0aCAnbm8nIG9yICchJy5cbiIKK21zZ3N0ciAiIgorIlNlbXVhIGF0YXUgdGlkYWsgc2FtYSBzZWthbGkgZGFyaSB0aXBlIHNpc3RlbSBiZXJrYXMgZGlsZXdhdGthbiBtZWxhbHVpICIKKyJwaWxpaGFuIC10IGhhcnVzIGRpd2FsaVxuIgorImRlbmdhbiAnbm8nIGF0YXUgJyEnLlxuIgorCisjOiBtaXNjL2ZzY2suYzo3NjEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGVzeXN0ZW0gdHlwZXNcbiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuZ2Fsb2thc2lrYW4gbWVtb3JpIHVudHVrIHRpcGUgc2lzdGVtIGJlcmthc1xuIgorCisjOiBtaXNjL2ZzY2suYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBza2lwcGluZyBiYWQgbGluZSBpbiAvZXRjL2ZzdGFiOiBiaW5kIG1vdW50IHdpdGggbm9uemVybyBmc2NrIHBhc3MgIgorIm51bWJlclxuIgorbXNnc3RyICIiCisiJXM6IG1lbGV3YXRrYW4gYmFyaXMgYnVydWsgZGkgL2V0Yy9mc3RhYjogYmluZCBtb3VudCBkZW5nYW4gdGlkYWsgbm9sIGZzY2sgIgorInRhaGFwIG5vbW9yXG4iCisKKyM6IG1pc2MvZnNjay5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiBjYW5ub3QgY2hlY2sgJXM6IGZzY2suJXMgbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6IHRpZGFrIGRhcGF0IG1lbWVyaWtzYSAlczogZnNjay4lcyB0aWRhayBkaXRlbXVrYW5cbiIKKworIzogbWlzYy9mc2NrLmM6OTY3Cittc2dpZCAiQ2hlY2tpbmcgYWxsIGZpbGUgc3lzdGVtcy5cbiIKK21zZ3N0ciAiTWVtZXJpa3NhIHNlbXVhIGZpbGVzeXRlbS5cbiIKKworIzogbWlzYy9mc2NrLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICItLXdhaXRpbmctLSAocGFzcyAlZClcbiIKK21zZ3N0ciAiLS1tZW51bmdndS0tICh0YWhhcCAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6MTA3OAorbXNnaWQgIiIKKyJVc2FnZTogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGZzdHlwZV0gW2ZzLW9wdGlvbnNdIFtmaWxlc3lzIC4uLl1cbiIKK21zZ3N0ciAiIgorIlBlbmdndW5hYW46IGZzY2sgWy1BTU5QUlRWXSAtQyBbZmRdIF0gWy10IGZzdHlwZV0gW2ZzLXBpbGloYW5dICIKKyJbZmlsZXN5cyAuLi5dXG4iCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiJXM6IHRlcmxhbHUgYmFueWFrIHBlcmFuZ2thdFxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTUzIG1pc2MvZnNjay5jOjEyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICIlczogdGVybGFsdSBiYW55YWsgYXJndW1lblxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWYWRsdl0gW2ZpbGVzLi4uXVxuIgorbXNnc3RyICJQZW5nZ3VuYWFuOiAlcyBbLVJWYWRsdl0gW2Jlcmthcy4uLl1cbiIKKworIzogbWlzYy9sc2F0dHIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJLZXRpa2EgbWVtYmFjYSBmbGFncyBkaSAlcyIKKworIzogbWlzYy9sc2F0dHIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIktldGlrYSBtZW1iYWNhIHZlcnNpIGRpICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSBbLUMgY2x1c3Rlci1zaXplXVxuIgorIlx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIGlub2RlLXNpemVdIFstSiBqb3VybmFsLW9wdGlvbnNdXG4iCisiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKyJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisiXHRbLWcgYmxvY2tzLXBlci1ncm91cF0gWy1MIHZvbHVtZS1sYWJlbF0gWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG4iCisiXHRbLU8gZmVhdHVyZVssLi4uXV0gWy1yIGZzLXJldmlzaW9uXSBbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXVxuIgorIlx0Wy10IGZzLXR5cGVdIFstVCB1c2FnZS10eXBlIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSBkZXZpY2UgW2Jsb2Nrcy0iCisiY291bnRdXG4iCittc2dzdHIgIiIKKyJQZW5nZ3VuYWFuOiAlcyBbLWN8LWwgbmFtYWZpbGVdIFstYiB1a3VyYW4tYmxva10gWy1mIHVrdXJhbi1mcmFnbWVuXVxuIgorIlx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIHVrdXJhbi1pbm9kZV0gWy1KIHBpbGloYW4tanVybmFsXVxuIgorIlx0Wy1HIHVrdXJhbiBtZXRhIGdydXBdIFstTiBqdW1sYWgtZGFyaS1pbm9kZV1cbiIKKyJcdFstbSBwZXJzZW50YXNpLXJlc2VydmVkLWJsb2tdIFstbyBzaXN0ZW0tb3BlcmFzaS1wZW1idWF0XVxuIgorIlx0Wy1nIGJsb2stcGVyLWdydXBdIFstTCBsYWJlbC12b2x1bWVdIFstTSBkaXJla3RvcmktdGVyYWtoaXItZGlwYXNhbmddXG4iCisiXHRbLU8gZmFzaWxpdGFzWywuLi5dXSBbLXIgcmV2aXNpLWZzXSBbLUUgcGlsaWhhbi10YW1iYWhhblssLi4uXV1cbiIKKyJcdFstVCB0eXBlLWZzXSBbLVUgVVVJRF0gWy1qbnF2RktTVl0gcGVyYW5na2F0IFtqdW1sYWgtYmxva11cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUnVubmluZyBjb21tYW5kOiAlc1xuIgorbXNnc3RyICJNZW5qYWxhbmthbiBwZXJpbnRhaDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJ1biAnJXMnIgorbXNnc3RyICJrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW5qYWxhbmthbiAnJXMnIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MworbXNnaWQgIndoaWxlIHByb2Nlc3NpbmcgbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gcHJvZ3JhbSIKK21zZ3N0ciAia2V0aWthIG1lbXByb3NlcyBkYWZ0YXIgZGFyaSBibG9rIGJ1cnVrIGRhcmkgYXBsaWthc2kiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVkIGluIHByaW1hcnkgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9yIGFyZWEgYmFkLlxuIgorbXNnc3RyICJCbG9rICVkIGRhbGFtIGRhZXJhaCBkZXNrcmlwc2kgc3VwZXJibG9rL2dydXAgdXRhbWEgYnVydWsuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrcyAldSB0aHJvdWdoICV1IG11c3QgYmUgZ29vZCBpbiBvcmRlciB0byBidWlsZCBhIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJCbG9rICV1IHNhbXBhaSAldSBoYXJ1cyBkYWxhbSBrZWFkYWFuIGJhaWsgdW50dWsgbWVtYnVhdCBzZWJ1YWggc2lzdGVtICIKKyJiZXJrYXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjk1Cittc2dpZCAiQWJvcnRpbmcuLi4uXG4iCittc2dzdHIgIk1lbWJhdGFsa2FuLi4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB0aGUgYmFja3VwIHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvcnMgYXQgYmxvY2sgJXUgY29udGFpblxuIgorIlx0YmFkIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBlcmluZ2F0YW46IGRlc2tyaXBzaSBzdXBlcmJsb2svZ3J1cCBjYWRhbmdhbiBkaSBibG9rICV1IGJlcmlzaVxuIgorIlx0YmxvayBidXJ1ay5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzozMzQKK21zZ2lkICJ3aGlsZSBtYXJraW5nIGJhZCBibG9ja3MgYXMgdXNlZCIKK21zZ3N0ciAia2V0aWthIG1lbmFuZGFpIGJsb2sgYnVydWsgc2ViYWdhaSBkaWd1bmFrYW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Mzg2Cittc2dpZCAiV3JpdGluZyBpbm9kZSB0YWJsZXM6ICIKK21zZ3N0ciAiTWVudWxpcyB0YWJlbCBpbm9kZTogIgorCisjOiBtaXNjL21rZTJmcy5jOjQwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCB3cml0ZSAlZCBibG9ja3MgaW4gaW5vZGUgdGFibGUgc3RhcnRpbmcgYXQgJWxsdTogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlRpZGFrIGRhcGF0IG1lbnVsaXMgJWQgYmxvayBkYWxhbSB0YWJlbCBpbm9kZSBkaW11bGFpIGRpICV1OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjQyMSBtaXNjL21rZTJmcy5jOjI0NzkgbWlzYy9ta2UyZnMuYzoyNzY0Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAic2VsZXNhaSAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjQzMgorbXNnaWQgIndoaWxlIGNyZWF0aW5nIHJvb3QgZGlyIgorbXNnc3RyICJrZXRpa2EgbWVtYnVhdCBkaXJla3Rvcmkgcm9vdCIKKworIzogbWlzYy9ta2UyZnMuYzo0MzkKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHJvb3QgaW5vZGUiCittc2dzdHIgImtldGlrYSBtZW1iYWNhIGlub2RlIHJvb3QiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDUxCittc2dpZCAid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIKK21zZ3N0ciAia2V0aWthIG1lbnNldCBrZXBlbWlsaWthbiBpbm9kZSByb290IgorCisjOiBtaXNjL21rZTJmcy5jOjQ2OQorbXNnaWQgIndoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJrZXRpa2EgbWVtYnVhdCAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0NzYKK21zZ2lkICJ3aGlsZSBsb29raW5nIHVwIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJrZXRpa2EgbWVuY2FyaSAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0ODkKK21zZ2lkICJ3aGlsZSBleHBhbmRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgImtldGlrYSBtZW5nZWtzcGFuc2kgL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTA0Cittc2dpZCAid2hpbGUgc2V0dGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgImtldGlrYSBtZW5zZXQgaW5vZGUgYmxvayBidXJ1ayIKKworIzogbWlzYy9ta2UyZnMuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3V0IG9mIG1lbW9yeSBlcmFzaW5nIHNlY3RvcnMgJWQtJWRcbiIKK21zZ3N0ciAiS2VoYWJpc2FuIG1lbW9yaSBtZW5naGFwdXMgc2VrdG9yICVkLSVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrIDA6ICVzXG4iCittc2dzdHIgIlBlcmluZ2F0YW46IHRpZGFrIGRhcGF0IG1lbWJhY2EgYmxvayAwOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgZXJhc2Ugc2VjdG9yICVkOiAlc1xuIgorbXNnc3RyICJQZXJpbmdhdGFuOiB0aWRhayBkYXBhdCBtZW5naGFwdXMgc2VrdG9yICVkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU3MworbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgImtldGlrYSBtZW5naW5pc2lhbGlzYXNpIGp1cm5hbCBzdXBlcmJsb2siCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgxCittc2dpZCAiWmVyb2luZyBqb3VybmFsIGRldmljZTogIgorbXNnc3RyICJNZW5nb3NvbmdrYW4gcGVyYW5na2F0IGp1cm5hbDogIgorCisjOiBtaXNjL21rZTJmcy5jOjU5MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBqb3VybmFsIGRldmljZSAoYmxvY2sgJWxsdSwgY291bnQgJWQpIgorbXNnc3RyICJrZXRpa2EgbWVuZ29zb25na2FuIHBlcmFuZ2thdCBqdXJuYWwgKGJsb2sgJXUsIGp1bWxhaCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjExCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgImtldGlrYSBtZW51bGlzIGp1cm5hbCBzdXBlcmJsb2siCisKKyM6IG1pc2MvbWtlMmZzLmM6NjI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBmaWxlc3lzdGVtIHdpdGggJWxsdSAlZGsgYmxvY2tzIGFuZCAldSBpbm9kZXNcbiIKK21zZ3N0ciAiTWVuZ3ViYWggc2lzdGVtIGJlcmthcyBkaSAlcyBrZSAldSAoJWRrKSBibG9rLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYzNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIndhcm5pbmc6ICVsbHUgYmxvY2tzIHVudXNlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorInBlcmluZ2F0YW46ICV1IGJsb2sgdGlkYWsgZGlndW5ha2FuLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGxhYmVsPSVzXG4iCittc2dzdHIgIlNpc3RlbSBiZXJrYXMgbGFiZWw9JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk9TIHR5cGU6ICVzXG4iCittc2dzdHIgIlRpcGUgT1M6ICIKKworIzogbWlzYy9ta2UyZnMuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJVa3VyYW4gYmxvaz0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ2x1c3RlciBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIlVrdXJhbiBibG9rPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyYWdtZW50IHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiVWt1cmFuIHBlY2FoYW49JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RyaWRlPSV1IGJsb2NrcywgU3RyaXBlIHdpZHRoPSV1IGJsb2Nrc1xuIgorbXNnc3RyICJTdHJpZGU9JXUgYmxvaywgTGViYXIgc3RyaXBlPSV1IGJsb2tcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcywgJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXUgaW5vZGVzLCAldSBibG9rXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlbGx1IGJsb2NrcyAoJTIuMmYlJSkgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlciB1c2VyXG4iCittc2dzdHIgIiV1IGJsb2sgKCUyLjJmJSUpIHJlc2VydmVkIHVudHVrIHN1cGVyIHVzZXJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QgZGF0YSBibG9jaz0ldVxuIgorbXNnc3RyICJEYXRhIGJsb2sgcGVydGFtYT0ldVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJSb290IGRpcmVjdG9yeSBvd25lcj0ldToldVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9JWx1XG4iCittc2dzdHIgIk1ha3NpbXVtIGJsb2sgc2lzdGVtIGJlcmthcz0lbHVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBzXG4iCittc2dzdHIgIiV1IGdydXAgYmxva1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIldSBncnVwIGJsb2tcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGNsdXN0ZXJzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBibG9rIHBlciBncnVwLCAldSBwb3RvbmdhbiBwZXIgZ3J1cFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBmcmFnbWVudHMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGJsb2sgcGVyIGdydXAsICV1IHBvdG9uZ2FuIHBlciBncnVwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgaW5vZGUgcGVyIGdydXBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2ODgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gVVVJRDogJXNcbiIKK21zZ3N0ciAiU2lzdGVtIGJlcmthcyBsYWJlbD0lc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OQorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgIkNhZGFuZ2FuIHN1cGVyYmxvayBkaXNpbXBhbiBkaSBibG9rOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6NzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzICctTyA2NGJpdCdcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgYmVmb3JlICdyZXNpemU9JXUnXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo3ODUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZGVzY19zaXplOiAnJXMnXG4iCittc2dzdHIgIlVrdXJhbiBpbm9kZSBiYXJ1IHRpZGFrIHZhbGlkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjc5OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvZmZzZXQ6ICVzXG4iCittc2dzdHIgIlVrdXJhbiBpbm9kZSBiYXJ1IHRpZGFrIHZhbGlkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgxMiBtaXNjL3R1bmUyZnMuYzoxMjM5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCittc2dzdHIgInBpbGloYW4gbW91bnQgdGlkYWsgdmFsaWQgZGlzZXQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICMgb2YgYmFja3VwIHN1cGVyYmxvY2tzOiAlc1xuIgorbXNnc3RyICJQYXJhbWV0ZXIgc3VwZXJibG9rIHRpZGFrIHZhbGlkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg0OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlBhcmFtZXRlciBzdHJpZGUgdGlkYWsgdmFsaWQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaXBlLXdpZHRoIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyYW1ldGVyIHN0cmlwZS13aWR0aCB0aWRhayB2YWxpZDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXNpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXJhbWV0ZXIgcmVzaXplIHRpZGFrIHZhbGlkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg5MworbXNnaWQgIlRoZSByZXNpemUgbWF4aW11bSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgZmlsZXN5c3RlbSBzaXplLlxuIgorbXNnc3RyICJSZXNpemUgbWFrc2ltdW0gaGFydXMgbGViaWggYmVzYXIgZGFyaXBhZGEgdWt1cmFuIHNpc3RlbSBiZXJrYXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTE3Cittc2dpZCAiT24tbGluZSByZXNpemluZyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICJPbi1saW5lIHJlc2l6aW5nIHRpZGFrIGRpbGF5YW5pIGRlbmdhbiBzaXN0ZW0gYmVya2FzIHJldmlzaSAwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTQ0IG1pc2MvbWtlMmZzLmM6OTUzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJvb3Rfb3duZXI6ICclcydcbiIKK21zZ3N0ciAicGlsaWhhbiBtb3VudCB0aWRhayB2YWxpZCBkaXNldDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5NzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcXVvdGF0eXBlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyYW1ldGVyIHN0cmlkZSB0aWRhayB2YWxpZDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5ODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRtbXBfdXBkYXRlX2ludGVydmFsPTxpbnRlcnZhbD5cbiIKKyJcdG51bV9iYWNrdXBfc2I9PDB8MXwyPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGRhdGEgY2h1bmsgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqIGRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0b2Zmc2V0PTxvZmZzZXQgdG8gY3JlYXRlIHRoZSBmaWxlIHN5c3RlbT5cbiIKKyJcdHJlc2l6ZT08cmVzaXplIG1heGltdW0gc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRwYWNrZWRfbWV0YV9ibG9ja3M9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRyb290X3VpZD08dWlkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0cm9vdF9naWQ9PGdpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdGRpc2NhcmRcbiIKKyJcdG5vZGlzY2FyZFxuIgorIlx0cXVvdGF0eXBlPTx1c3IgT1IgZ3JwPlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiUGlsaWhhbiBidXJ1ayBkaXNwZXNpZmlrYXNpa2FuOiAlc1xuIgorIlxuIgorIlBpbGloYW4gZXh0ZW5kZWQgZGlwaXNhaGthbiBkZW5nYW4ga29tYSwgZGFuIGJvbGVoIG1lbmdndW5ha2FuIGFyZ3VtZW4geWFuZ1xuIgorIlx0ZGkgc2V0IG9mZiBvbGVoIHRhbmRhIHNhbWEgZGVuZ2FuICgnPScpLlxuIgorIlxuIgorIlBpbGloYW4gZXh0ZW5kZWQgeWFuZyB2YWxpZCBhZGFsYWg6XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgZGF0YSBjaHVuayBkYWxhbSBibG9rPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqIGRhdGEgZGlzayBkYWxhbSBibG9rPlxuIgorIlx0cmVzaXplPTxyZXNpemUgdWt1cmFuIG1ha3NpbXVtIGRhbGFtIGJsb2s+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHVudHVrIG1lbm9uYWt0aWZrYW4sIDEgdW50dWsgbWVuZ2FrdGlma2FuPlxuIgorIlx0dGVzdF9mc1xuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IFJBSUQgc3RyaXBlLXdpZHRoICV1IG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHN0cmlkZSAldS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBlcmluZ2F0YW46IFJBSUQgc3RyaXBlLXdpZHRoICV1IGJ1a2FuIHNlYnVhaCBldmVuIG11bHRpcGxlIGRhcmkgc3RyaWRlICV1LlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBta2UyZnMgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKyJTeW50YXggZXJyb3IgZGFsYW0gbWtlMmZzIGJlcmthcyBrb25maWd1cmFzaSAoJXMsIGJhcmlzICMlZClcbiIKKyJcdCVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA2OCBtaXNjL3R1bmUyZnMuYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmaWxlc3lzdGVtIG9wdGlvbiBzZXQ6ICVzXG4iCittc2dzdHIgIlBpbGloYW4gc2lzdGVtIGJlcmthcyB0aWRhayB2YWxpZCBkaXNldDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDgwIG1pc2MvdHVuZTJmcy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1vdW50IG9wdGlvbiBzZXQ6ICVzXG4iCittc2dzdHIgInBpbGloYW4gbW91bnQgdGlkYWsgdmFsaWQgZGlzZXQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIllvdXIgbWtlMmZzLmNvbmYgZmlsZSBkb2VzIG5vdCBkZWZpbmUgdGhlICVzIGZpbGVzeXN0ZW0gdHlwZS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlBlcmluZ2F0YW4hIEJlcmthcyBta2UyZnMuY29uZiBhbmRhIHRpZGFrIG1lbmRlZmluaXNpa2FuIHRpcGUgc2lzdGVtIGJlcmthcyAiCisiJXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyNAorbXNnaWQgIiIKKyJZb3UgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGFuIHVwZGF0ZWQgbWtlMmZzLmNvbmYgZmlsZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkFuZGEgbXVuZ2tpbiBidXR1aCB1bnR1ayBtZW1hc2FuZyBzZWJ1YWggdXBkYXRlIGRhcmkgYmVya2FzIG1rZTJmcy5jb25mLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjgKKyMsIGZ1enp5Cittc2dpZCAiQWJvcnRpbmcuLi5cbiIKK21zZ3N0ciAiTWVtYmF0YWxrYW4uLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgZnNfdHlwZSAlcyBpcyBub3QgZGVmaW5lZCBpbiBta2UyZnMuY29uZlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ0OQorIywgZnV6enkKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBQQVRILlxuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW5nYWxva2FzaWthbiBtZW1vcmkgdW50dWsgbmFtYSBiZXJrYXMgdGRiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IChlcnJvcjogJWxkKS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9jayBzaXplIC0gJXMiCittc2dzdHIgIlVrdXJhbiBibG9rIHRpZGFrIHZhbGlkIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUyNworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBibG9ja3NpemUgJWQgbm90IHVzYWJsZSBvbiBtb3N0IHN5c3RlbXMuXG4iCittc2dzdHIgIlBlcmluZ2F0YW46IHVrdXJhbmJsb2sgJWQgdGlkYWsgYmVyZ3VuYSBkYWxhbSBrZWJhbnlha2FuIHN5c3RlbS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTQzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNsdXN0ZXIgc2l6ZSAtICVzIgorbXNnc3RyICJVa3VyYW4gYmxvayB0aWRhayB2YWxpZCAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NTMKK21zZ2lkICInLVInIGlzIGRlcHJlY2F0ZWQsIHVzZSAnLUUnIGluc3RlYWQiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTY1Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGJsb2NrcyBwZXIgZ3JvdXAiCittc2dzdHIgIkp1bWxhaCBpbGVnYWwgdW50dWsgYmxvayBwZXIgZ3J1cCIKKworIzogbWlzYy9ta2UyZnMuYzoxNTcwCittc2dpZCAiYmxvY2tzIHBlciBncm91cCBtdXN0IGJlIG11bHRpcGxlIG9mIDgiCittc2dzdHIgImJsb2sgcGVyIGdydXAgaGFydXMga2VsaXBhdGFuIGRhcmkgOCIKKworIzogbWlzYy9ta2UyZnMuYzoxNTc4Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGZsZXhfYmcgc2l6ZSIKK21zZ3N0ciAiSnVtbGFoIGlsZWdhbCB1bnR1ayB1a3VyYW4gZmxleF9iZyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg0Cittc2dpZCAiZmxleF9iZyBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyIgorbXNnc3RyICJ1a3VyYW4gZmxleF9iZyBoYXJ1cyBrZWxpcGF0YW4gZGFyaSAyIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZsZXhfYmcgc2l6ZSAoJWx1KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyXjMxIgorbXNnc3RyICJ1a3VyYW4gZmxleF9iZyBoYXJ1cyBrZWxpcGF0YW4gZGFyaSAyIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSByYXRpbyAlcyAobWluICVkL21heCAlZCkiCittc2dzdHIgInJhc2lvIGRhcmkgaW5vZGUgdGlkYWsgdmFsaWQgJXMgKG1pbiAlZC9tYXggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgInVrdXJhbiBpbm9kZSB0aWRhayB2YWxpZCAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MjMKK21zZ2lkICIiCisiV2FybmluZzogLUsgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLiBVc2UgJy1FICIKKyJub2Rpc2NhcmQnIGV4dGVuZGVkIG9wdGlvbiBpbnN0ZWFkIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYzNAorbXNnaWQgImluIG1hbGxvYyBmb3IgYmFkX2Jsb2Nrc19maWxlbmFtZSIKK21zZ3N0ciAiZGFsYW0gbWFsbG9jIHVudHVrIGJhZF9ibG9ja19maWxlbmFtZSIKKworIzogbWlzYy9ta2UyZnMuYzoxNjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlcyIKK21zZ3N0ciAicGVyc2VudGFzaSByZXNlcnZlZCBibG9rIHRpZGFrIHZhbGlkIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtIGlub2RlcyAtICVzIgorbXNnc3RyICJqdW1sYWggaW5vZGUgYnVydWsgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXZpc2lvbiBsZXZlbCAtICVzIgorbXNnc3RyICJsZXZlbCByZXZpc2kgYnVydWsgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNjg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIHJldmlzaW9uICVkIgorbXNnc3RyICIiCisiXG4iCisiXHRrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW1idWF0IGp1cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzoxNjk4CisjLCBmdXp6eQorbXNnaWQgIlRoZSAtdCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICItbyBoYW55YSBib2xlaCBkaXNwZXNpZmlrYXNpa2FuIHNla2FsaSIKKworIzogbWlzYy9ta2UyZnMuYzoxNzA2CisjLCBmdXp6eQorbXNnaWQgIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICItbyBoYW55YSBib2xlaCBkaXNwZXNpZmlrYXNpa2FuIHNla2FsaSIKKworIzogbWlzYy9ta2UyZnMuYzoxNzU5IG1pc2MvbWtlMmZzLmM6Mjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIGRldmljZSAlc1xuIgorbXNnc3RyICJrZXRpa2EgbWVuY29iYSBtZW1idWthIHBlcmFuZ2thdCBqdXJuYWwgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZGV2IGJsb2Nrc2l6ZSAoJWQpIHNtYWxsZXIgdGhhbiBtaW5pbXVtIGJsb2Nrc2l6ZSAlZFxuIgorbXNnc3RyICIiCisiUGVyYW5na2F0IGp1cm5hbCB1a3VyYW5ibG9rICglZCkgbGViaWgga2VjaWwgZGFyaXBhZGEgbWluaW11bSB1a3VyYW5ibG9rICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBqb3VybmFsIGRldmljZSdzIGJsb2Nrc2l6ZTogJWRcbiIKK21zZ3N0ciAiTWVuZ2d1bmFrYW4gcGVyYW5na2F0IGp1cm5hbCB1a3VyYW5ibG9rOiAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3ODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2tzICclcycgb24gZGV2aWNlICclcyciCittc2dzdHIgImp1bWxhaCBibG9rIHRpZGFrIHZhbGlkIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgwNAorbXNnaWQgImZpbGVzeXN0ZW0iCittc2dzdHIgInNpc3RlbSBiZXJrYXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgxNyByZXNpemUvbWFpbi5jOjM5NQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBzaXplIgorbXNnc3RyICJrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW5lbnR1a2FuIHVrdXJhbiBzaXN0ZW0gYmVya2FzIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MjMKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiIgorIlRpZGFrIGRhcGF0IG1lbmVudHVrYW4gdWt1cmFuIHBlcmFuZ2thdDsgYW5kYSBoYXJ1cyBtZW5zcGVzaWZpa2FzaWthblxuIgorInVrdXJhbiBkYXJpIHNpc3RlbSBiZXJrYXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODMwCittc2dpZCAiIgorIkRldmljZSBzaXplIHJlcG9ydGVkIHRvIGJlIHplcm8uICBJbnZhbGlkIHBhcnRpdGlvbiBzcGVjaWZpZWQsIG9yXG4iCisiXHRwYXJ0aXRpb24gdGFibGUgd2Fzbid0IHJlcmVhZCBhZnRlciBydW5uaW5nIGZkaXNrLCBkdWUgdG9cbiIKKyJcdGEgbW9kaWZpZWQgcGFydGl0aW9uIGJlaW5nIGJ1c3kgYW5kIGluIHVzZS4gIFlvdSBtYXkgbmVlZCB0byByZWJvb3RcbiIKKyJcdHRvIHJlLXJlYWQgeW91ciBwYXJ0aXRpb24gdGFibGUuXG4iCittc2dzdHIgIiIKKyJVa3VyYW4gcGVyYW5na2F0IHlhbmcgZGlsYXBvcmthbiBub2wuIFBhcnRpc2kgeWFuZyBkaXNwZXNpZmlrYXNpa2FuIHRpZGFrICIKKyJ2YWxpZCwgYXRhdVxuIgorIlx0dGFiZWwgcGFydGlzaSB0aWRhayBkaWJhY2Ega2VtYmFsaSBzZXRlbGFoIG1lbmphbGFua2FuIGZkaXNrLCBrYXJlbmFcbiIKKyJcdHBhcnRpc2kgeWFuZyBkaXViYWggc2VkYW5nIHNpYnVrIGRhbiBzZWRhbmcgZGlndW5ha2FuLiBBbmRhIGJpc2EgbWVsYWt1a2FuICIKKyJyZWJvb3RcbiIKKyJcdHVudHVrIG1lbWJhY2Ega2VtYmFsaSB0YWJlbCBwYXJ0aXNpLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NDcKK21zZ2lkICJGaWxlc3lzdGVtIGxhcmdlciB0aGFuIGFwcGFyZW50IGRldmljZSBzaXplLiIKK21zZ3N0ciAiU2lzdGVtIGJlcmthcyBsZWJpaCBiZXNhciBkYXJpIHVrdXJhbiBwZXJhbmdrYXQgeWFuZyB0ZXJsaWhhdC4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg2NworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBmcyB0eXBlcyBsaXN0XG4iCittc2dzdHIgIkdhZ2FsIHVudHVrIG1lbXBhcnNlIGRhZnRhciB0eXBlIGZzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkwOAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgaGFyZHdhcmUgc2VjdG9yIHNpemUiCittc2dzdHIgImtldGlrYSBtZW5jb2JhIHVudHVrIG1lbmVudHVrYW4gdWt1cmFuIHNla3RvciBwZXJhbmdrYXQiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkxNAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgcGh5c2ljYWwgc2VjdG9yIHNpemUiCittc2dzdHIgImtldGlrYSBtZW5jb2JhIHVudHVrIG1lbmVudHVrYW4gdWt1cmFuIGZpc2lrIHNla3RvciIKKworIzogbWlzYy9ta2UyZnMuYzoxOTQ2Cittc2dpZCAid2hpbGUgc2V0dGluZyBibG9ja3NpemU7IHRvbyBzbWFsbCBmb3IgZGV2aWNlXG4iCittc2dzdHIgIiIKKyJrZXRpa2Egc2VkYW5nIG1lbGFrdWthbiBrb25maWd1cmFzaSB1a3VyYW4gYmxvazt0ZXJsYWx1IGtlY2lsIHVudHVrICIKKyJwZXJhbmdrYXRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTUxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogc3BlY2lmaWVkIGJsb2Nrc2l6ZSAlZCBpcyBsZXNzIHRoYW4gZGV2aWNlIHBoeXNpY2FsIHNlY3RvcnNpemUgJWRcbiIKK21zZ3N0ciAiIgorIlBlcmluZ2F0YW46IHVrdXJhbiBibG9rIHlhbmcgZGlzcGVzaWZpa2FzaWthbiAlZCBsZWJpaCBrZWNpbCBkYXJpcGFkYSB1a3VyYW4gIgorImZpc2lrIHNla3RvciBwZXJhbmdrYXQgJWQsIHRldGFwIGRpbGFuanV0a2FuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBTaXplIG9mIGRldmljZSAoMHglbGx4IGJsb2NrcykgJXMgdG9vIGJpZyB0byBiZSBleHByZXNzZWRcbiIKKyJcdGluIDMyIGJpdHMgdXNpbmcgYSBibG9ja3NpemUgb2YgJWQuXG4iCittc2dzdHIgIiIKKyIlczogVWt1cmFuIGRhcmkgcGVyYW5na2F0ICVzIHRlcmxhbHUgYmVzYXIgdW50dWsgZGlleHByZXNpa2FuIGRhbGFtIDMyIGJpdFxuIgorIlx0bWVuZ2d1bmFrYW4gc2VidWFoIHVrdXJhbmJsb2sgZGFyaSAlZC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTkxCittc2dpZCAiZnNfdHlwZXMgZm9yIG1rZTJmcy5jb25mIHJlc29sdXRpb246ICIKK21zZ3N0ciAiZnNfdHlwZXMgdW50dWsgbWtlMmZzLmNvbmYgcmVzb2x1dGlvbjogIgorCisjOiBtaXNjL21rZTJmcy5jOjE5OTgKK21zZ2lkICJGaWxlc3lzdGVtIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIlNpc3RlbSBiZXJrYXMgZmVhdHVyZXMgdGlkYWsgZGlsYXlhbmkgZGVuZ2FuIHNpc3RlbSBiZXJrYXMgcmV2aXNpIDBcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDA2Cittc2dpZCAiU3BhcnNlIHN1cGVyYmxvY2tzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIlNwYXJzZSBzdXBlcmJsb2sgdGlkYWsgZGlsYXlhbmkgZGVuZ2FuIHNpc3RlbSBiZXJrYXMgcmV2aXNpIDBcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDE4Cittc2dpZCAiSm91cm5hbHMgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiSnVybmFsIHRpZGFrIGRpbGF5YW5pIGRlbmdhbiBzaXN0ZW0gYmVya2FzIHJldmlzaSAwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVsZiIKK21zZ3N0ciAicGVyc2VudGFzaSByZXNlcnZlZCBibG9rIHRpZGFrIHZhbGlkIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJFeHRlbnRzIE1VU1QgYmUgZW5hYmxlZCBmb3IgYSA2NC1iaXQgZmlsZXN5c3RlbS4gIFBhc3MgLU8gZXh0ZW50cyB0byAiCisicmVjdGlmeS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNjkKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGNsdXN0ZXIgc2l6ZSBtYXkgbm90IGJlIHNtYWxsZXIgdGhhbiB0aGUgYmxvY2sgc2l6ZS5cbiIKK21zZ3N0ciAiUmVzaXplIG1ha3NpbXVtIGhhcnVzIGxlYmloIGJlc2FyIGRhcmlwYWRhIHVrdXJhbiBzaXN0ZW0gYmVya2FzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNzUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgY2x1c3RlciBzaXplIHJlcXVpcmVzIHRoZSBiaWdhbGxvYyBmZWF0dXJlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBVbmFibGUgdG8gZ2V0IGRldmljZSBnZW9tZXRyeSBmb3IgJXNcbiIKK21zZ3N0ciAiUGVyaW5nYXRhbjogVGlkYWsgZGFwYXQgbWVuZGFwYXRrYW4gZ2VvbWV0cmkgdW50dWsgcGVyYW5na2F0ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbGlnbm1lbnQgaXMgb2Zmc2V0IGJ5ICVsdSBieXRlcy5cbiIKK21zZ3N0ciAiJXMgcGVueWVzdWFpYW4gb2ZzZXQgc2ViZXNhciAlbHUgYnl0ZXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBtYXkgcmVzdWx0IGluIHZlcnkgcG9vciBwZXJmb3JtYW5jZSwgKHJlKS1wYXJ0aXRpb25pbmcgc3VnZ2VzdGVkLlxuIgorbXNnc3RyICIiCisiSW5pIG11bmdraW4gYWthbiBiZXJ1anVuZyBrZSBwZXJmb3JtYSB5YW5nIHRpZGFrIGJhaWssIGRpc2FyYW5rYW4gdW50dWsgIgorIm1lbGFrdWthbiBwZW1iYWdpYW4gdWxhbmcuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCkiCittc2dzdHIgIiVkLWJ5dGUgYmxva3MgdGVybGFsdSBiZXNhciB1bnR1ayBzeXN0ZW0gKG1ha3NpbWFsICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiAlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCksIGZvcmNlZCB0byBjb250aW51ZVxuIgorbXNnc3RyICIiCisiUGVyaW5nYXRhbjogJWQtYnl0ZSBibG9rIHRlcmxhbHUgYmVzYXIgdW50dWsgc3lzdGVtIChtYWtzaW1hbCAlZCksIGRpcGFrc2EgIgorInVudHVrIG1lbGFuanV0a2FuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE4MAorbXNnaWQgIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0IGV4dGVudHMgZmVhdHVyZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIxODcKK21zZ2lkICIiCisiVGhlIHJlc2l6ZV9pbm9kZSBhbmQgbWV0YV9iZyBmZWF0dXJlcyBhcmUgbm90IGNvbXBhdGlibGUuXG4iCisiVGhleSBjYW4gbm90IGJlIGJvdGggZW5hYmxlZCBzaW11bHRhbmVvdXNseS5cbiIKK21zZ3N0ciAiIgorInJlc2l6ZV9pbm9kZSBkYW4gbWV0YV9iZyBmZWF0dXJlIHRpZGFrIHNhbGluZyBrb21wYXRpYmVsLlxuIgorIk1lcmFrYSB0aWRhayBkYXBhdCBkaWFrdGlma2FuIHNlY2FyYSBiZXJzYW1hYW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE5NgorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgYmlnYWxsb2MgZmVhdHVyZSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuIgorIlNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIwNworbXNnaWQgInJlc2VydmVkIG9ubGluZSByZXNpemUgYmxvY2tzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLXNwYXJzZSBmaWxlc3lzdGVtIgorbXNnc3RyICJyZXNlcnZlZCBvbmxpbmUgcmVzaXplIGJsb2sgdGlkYWsgZGlsYXlhbmkgZGkgbm9uLXNwYXJzZSBzaXN0ZW0gYmVya2FzIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMTYKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIKK21zZ3N0ciAianVtbGFoIGJsb2sgcGVyIGdydXAgZGlsdWFyIGphbmdrYXVhbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjQwCittc2dpZCAiRmxleF9iZyBmZWF0dXJlIG5vdCBlbmFibGVkLCBzbyBmbGV4X2JnIHNpemUgbWF5IG5vdCBiZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKyJGbGV4X2JnIGZlYXR1cmUgdGlkYWsgZGlha3RpZmthbiwgamFkaSB1a3VyYW4gZmxleF9idyBtdW5na2luIHRpZGFrIGRhcGF0ICIKKyJkaXNwZXNpZmlrYXNpa2FuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplICVkIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAidWt1cmFuIGlub2RlIHRpZGFrIHZhbGlkICVkIChtaW4gJWQvbWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHJhaXNlIGlub2RlIHJhdGlvPyIKK21zZ3N0ciAidGVybGFsdSBiYW55YWsgaW5vZGUgKCVsbHUpLCBuYWlra2FuIHJhc2lvIGlub2RlPyIKKworIzogbWlzYy9ta2UyZnMuYzoyMjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHNwZWNpZnkgPCAyXjMyIGlub2RlcyIKK21zZ3N0ciAidGVybGFsdSBiYW55YWsgaW5vZGUgKCVsbHUpLCBzcGVzaWZpa2FzaWthbiA8IDLCszIgaW5vZGUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI5MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorImlub2RlX3NpemUgKCV1KSAqIGlub2Rlc19jb3VudCAoJXUpIHRvbyBiaWcgZm9yIGFcbiIKKyJcdGZpbGVzeXN0ZW0gd2l0aCAlbGx1IGJsb2Nrcywgc3BlY2lmeSBoaWdoZXIgaW5vZGVfcmF0aW8gKC1pKVxuIgorIlx0b3IgbG93ZXIgaW5vZGUgY291bnQgKC1OKS5cbiIKK21zZ3N0ciAiIgorImlub2RlX3NpemUgKCV1KSAqIGlub2RlX2NvdW50ICgldSkgdGVybGFsdSBiZXNhciB1bnR1ayBzZWJ1YWhcbiIKKyJcdHNpc3RlbSBiZXJrYXMgZGVuZ2FuICVsdSBibG9rLCBzcGVzaWZpa2FuIGxlYmloIHRpbmdnaSBpbm9kZV9yYXRpbyAoLWkpXG4iCisiXHRhdGF1IGxlYmloIHJlbmRhaCBqdW1sYWggaW5vZGUgKC1OKS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJPdmVyd3JpdGluZyBleGlzdGluZyBmaWxlc3lzdGVtOyB0aGlzIGNhbiBiZSB1bmRvbmUgdXNpbmcgdGhlIGNvbW1hbmQ6XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiTWVtYWtzYSBtZW51bGlzIHNpc3RlbSBiZXJrYXMgeWFuZyBzdWRhaCBhZGE7IGluaSB0aWRhayBkYXBhdCBkaXVuZG8gZGVuZ2FuICIKKyJwZXJpbnRhaDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQzMgorIywgZnV6enkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc2V0dXAgdW5kbyBmaWxlXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcdGtldGlrYSBtZW5jb2JhIG1lbWJ1YXQgZmlsZSBqdXJuYWwiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ1OAorIywgZnV6enkKK21zZ2lkICJEaXNjYXJkaW5nIGRldmljZSBibG9ja3M6ICIKK21zZ3N0ciAiTWVuZ2d1bmFrYW4gcGVyYW5na2F0IGp1cm5hbCB1a3VyYW5ibG9rOiAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NzQKKyMsIGZ1enp5Cittc2dpZCAiZmFpbGVkIC0gIgorbXNnc3RyICJnYWdhbC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTk2Cittc2dpZCAid2hpbGUgc2V0dGluZyB1cCBzdXBlcmJsb2NrIgorbXNnc3RyICJrZXRpa2EgbWVuc2V0dXAgc3VwZXJibG9rIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MTIKK21zZ2lkICJEaXNjYXJkIHN1Y2NlZWRlZCBhbmQgd2lsbCByZXR1cm4gMHMgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3MgLSAlcyIKK21zZ3N0ciAib3MgdGlkYWsgZGlrZXRhaHVpIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc1MgorIywgZnV6enkKK21zZ2lkICJBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogIgorbXNnc3RyICJNZW51bGlzIHRhYmVsIGlub2RlOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2MAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBhbGxvY2F0ZSBmaWxlc3lzdGVtIHRhYmxlcyIKK21zZ3N0ciAia2V0aWthIG1lbmNvYmEgbWVuZ2Fsb2thc2lrYW4gdGFiZWwgc2lzdGVtIGJlcmthcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNzY5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgImtldGlrYSBtZW51bGlzIGJsb2sgYml0bWFwIgorCisjOiBtaXNjL21rZTJmcy5jOjI4MTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgYmxvY2sgJWxsdSBhdCBlbmQgb2YgZmlsZXN5c3RlbSIKK21zZ3N0ciAia2V0aWthIG1lbmdrb3NvbmdrYW4gYmxvayAldSBkaSBha2hpciBkYXJpIHNpc3RlbSBiZXJrYXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgyNgorbXNnaWQgIndoaWxlIHJlc2VydmluZyBibG9ja3MgZm9yIG9ubGluZSByZXNpemUiCittc2dzdHIgImtldGlrYSBtZW5yZXNlcnZlIGJsb2sgdW50dWsgb25saW5lIHJlc2l6ZSIKKworIzogbWlzYy9ta2UyZnMuYzoyODM4IG1pc2MvdHVuZTJmcy5jOjcxMgorbXNnaWQgImpvdXJuYWwiCittc2dzdHIgImp1cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzoyODUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBqb3VybmFsIHRvIGRldmljZSAlczogIgorbXNnc3RyICJNZW5hbWJhaGthbiBqdXJuYWwga2UgcGVyYW5na2F0ICVzOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gYWRkIGpvdXJuYWwgdG8gZGV2aWNlICVzIgorbXNnc3RyICIiCisiXG4iCisiXHRrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW5hbWJhaGthbiBqdXJuYWwga2UgcGVyYW5na2F0ICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NjIgbWlzYy9ta2UyZnMuYzoyODkzIG1pc2MvdHVuZTJmcy5jOjc0MSBtaXNjL3R1bmUyZnMuYzo3NjAKK21zZ2lkICJkb25lXG4iCittc2dzdHIgInNlbGVzYWlcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODY5Cittc2dpZCAiU2tpcHBpbmcgam91cm5hbCBjcmVhdGlvbiBpbiBzdXBlci1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiTWVsZXdhdGthbiBwZW1idWF0YW4ganVybmFsIGRhbGFtIG1vZGUgc3VwZXItc2FqYVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJXUgYmxvY2tzKTogIgorbXNnc3RyICJNZW1idWF0IGp1cm5hbCAoJXUgYmxvayk6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyODg5Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIgorbXNnc3RyICIiCisiXG4iCisiXHRrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW1idWF0IGp1cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAxIG1pc2MvdHVuZTJmcy5jOjUxNgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWQgc2Vjb25kcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MjMKK21zZ2lkICJXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICIKK21zZ3N0ciAiTWVudWxpcyBzdXBlcmJsb2sgZGFuIGluZm9ybWFzaSBha3VudGFzaSBzaXN0ZW0gYmVya2FzOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkzMAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nLCBoYWQgdHJvdWJsZSB3cml0aW5nIG91dCBzdXBlcmJsb2Nrcy4iCittc2dzdHIgIiIKKyJcbiIKKyJQZXJpbmdhdGFuLCBtZW1pbGlraSBtYXNhbGFoIG1lbnVsaXMgZGlsdWFyIHN1cGVyYmxvay4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkzMgorbXNnaWQgIiIKKyJkb25lXG4iCisiXG4iCittc2dzdHIgIiIKKyJzZWxlc2FpXG4iCisiXG4iCisKKyM6IG1pc2MvbWtsb3N0K2ZvdW5kLmM6NTAKK21zZ2lkICJVc2FnZTogbWtsb3N0K2ZvdW5kXG4iCittc2dzdHIgIlBlbmdndW5hYW46IG1rbG9zdCtmb3VuZFxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAgJXMgZGV2aWNlLi4uXG4iCisiXG4iCisiUHJpbnRzIG91dCB0aGUgcGFydGl0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGdpdmVuIGRldmljZS5cbiIKKyJGb3IgZXhhbXBsZTogJXMgL2Rldi9oZGFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBlbmdndW5hYW46ICVzIHBlcmFuZ2thdC4uLlxuIgorIlxuIgorIlRhbXBpbGthbiBpbmZvcm1hc2kgcGFydGlzaSB1bnR1ayBzZXRpYXAgcGVyYW5na2F0IHlhbmcgZGliZXJpa2FuLlxuIgorIkNvbnRvaDogJXMgL2Rldi9oZGFcbiIKKyJcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAidGlkYWsgZGFwYXQgbWVtYnVrYSAlczogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGdlb21ldHJ5IG9mICVzOiAlcyIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVtcGVyb2xlaCBnZW9tZXRyeSBkYXJpICVzOyAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgc2l6ZSBvZiAlczogJXMiCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbXBlcm9sZWggdWt1cmFuIGRhcmkgJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iCittc2dzdHIgIiVzOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIGF3YWw9JThkIHVrdXJhbj0lOGx1IGFraGlyPSU2ZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTIKK21zZ2lkICJQbGVhc2UgcnVuIGUyZnNjayBvbiB0aGUgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiVG9sb25nIGphbGFua2FuIGUyZnNjayB1bnR1ayBzaXN0ZW0gYmVya2FzLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jIG1heF9tb3VudHNfY291bnRdIFstZSBlcnJvcnNfYmVoYXZpb3JdIFstZyBncm91cF1cbiIKKyJcdFstaSBpbnRlcnZhbFtkfG18d11dIFstal0gWy1KIGpvdXJuYWxfb3B0aW9uc10gWy1sXVxuIgorIlx0Wy1tIHJlc2VydmVkX2Jsb2Nrc19wZXJjZW50XSBbLW8gW15dbW91bnRfb3B0aW9uc1ssLi4uXV0gWy1wICIKKyJtbXBfdXBkYXRlX2ludGVydmFsXVxuIgorIlx0Wy1yIHJlc2VydmVkX2Jsb2Nrc19jb3VudF0gWy11IHVzZXJdIFstQyBtb3VudF9jb3VudF0gWy1MIHZvbHVtZV9sYWJlbF1cbiIKKyJcdFstTSBsYXN0X21vdW50ZWRfZGlyXSBbLU8gW15dZmVhdHVyZVssLi4uXV1cbiIKKyJcdFstUSBxdW90YV9vcHRpb25zXVxuIgorIlx0Wy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV0gWy1UIGxhc3RfY2hlY2tfdGltZV0gWy1VIFVVSURdXG4iCisiXHRbIC1JIG5ld19pbm9kZV9zaXplIF0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJQZW5nZ3VuYWFuOiAlcyBbLWMganVtbGFoX21heF9tb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdydXBdXG4iCisiXHRbLXQgaW50ZXJ2YWxbZHxtfHddXSBbLWpdIFstSiBwaWxpaGFuX2p1cm5hbF0gWy1sXVxuIgorIlx0Wy1tIHBlcnNlbnRhc2lfcmVzZXJ2ZWRfYmxva10gWy1vIFteXXBpbGloYW5fbW91bnRbLC4uLl1dIFxuIgorIlx0Wy1yIGp1bWxhaF9yZXNlcnZlZF9ibG9rXSBbLXUgcGVuZ2d1bmFdIFstQyBqdW1sYWhfbW91bnRdIFstTCAiCisibGFiZWxfdm9sdW1lXVxuIgorIlx0Wy1FIHBpbGloYW4tdGFtYmFoYW5bLC4uLl1dIFstVCB3YWt0dV90ZXJha2hpcl9kaXBlcmlrc2FdIFstVSBVVUlEXVxuIgorIlx0Wy1JIHVrdXJhbl9pbm9kZV9iYXJ1XSBwZXJhbmdrYXRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzCittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCFcbiIKK21zZ3N0ciAiSnVybmFsIHN1cGVyYmxvayB0aWRhayBkaXRlbXVrYW4hXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI2MQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIGV4dGVybmFsIGpvdXJuYWwiCittc2dzdHIgImtldGlrYSBtZW5jb2JhIG1lbWJ1a2EganVybmFsIGV4dGVybmFsIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjcgbWlzYy90dW5lMmZzLmM6MTk2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiJXMgYnVrYW4gc2VidWFoIHBlcmFuZ2thdCBqdXJuYWwuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI3NyBtaXNjL3R1bmUyZnMuYzoxOTc0Cittc2dpZCAiRmlsZXN5c3RlbSdzIFVVSUQgbm90IGZvdW5kIG9uIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICJTaXN0ZW0gYmVya2FzIFVVSUQgdGlkYWsgZGl0ZW11a2FuIGRhbGFtIHBlcmFuZ2thdCBqdXJuYWwuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMwMQorbXNnaWQgIiIKKyJDYW5ub3QgbG9jYXRlIGpvdXJuYWwgZGV2aWNlLiBJdCB3YXMgTk9UIHJlbW92ZWRcbiIKKyJVc2UgLWYgb3B0aW9uIHRvIHJlbW92ZSBtaXNzaW5nIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMxMAorbXNnaWQgIkpvdXJuYWwgcmVtb3ZlZFxuIgorbXNnc3RyICJKdXJuYWwgZGloYXB1c1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNTQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgImtldGlrYSBtZW1iYWNhIGJpdG1hcCIKKworIzogbWlzYy90dW5lMmZzLmM6MzYyCittc2dpZCAid2hpbGUgY2xlYXJpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAia2V0aWthIG1lbmdoYXB1cyBpbm9kZSBqdXJuYWwiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM3MworbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAia2V0aWthIG1lbnVsaXMgaW5vZGUganVybmFsIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MDUgbWlzYy90dW5lMmZzLmM6NDE4Cittc2dpZCAiKGFuZCByZWJvb3QgYWZ0ZXJ3YXJkcyEpXG4iCittc2dzdHIgIihkYW4gcmVib290IHNldGVsYWggaW5pISlcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyaW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIk1lbmdoYXB1cyBmZWF0dXJlIHNpc3RlbSBiZXJrYXMgJyVzJyB0aWRhayBkaWxheWFuaS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiVGF0YW5hbiBmaXR1ciBzaXN0ZW0gYmVya2FzICclcycgdGlkYWsgZGlsYXlhbmkuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ2NworbXNnaWQgIiIKKyJUaGUgaGFzX2pvdXJuYWwgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJIYXNfam91cm5hbCBmZWF0dXJlIG11bmdraW4gaGFueWEgYmlzYSBkaWhhcHVzIGtldGlrYSBzaXN0ZW0gYmVya2FzIHNlZGFuZ1xuIgorImRpbW91bnQgYmFjYS1zYWphIGF0YXUgdGlkYWsgZGltb3VudC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDc2Cittc2dpZCAiIgorIlRoZSBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldC4gIFBsZWFzZSBydW4gZTJmc2NrIGJlZm9yZSBjbGVhcmluZ1xuIgorInRoZSBoYXNfam91cm5hbCBmbGFnLlxuIgorbXNnc3RyICIiCisiTmVlZHNfcmVjb3ZlcnkgZmxhZyBkaXNldC4gVG9sb25nIGphbGFua2FuIGUyZnNjayBzZWJlbHVtIG1lbmdoYXB1c1xuIgorImhhc19qb3VybmFsIGZsYWcuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ5NQorIywgZnV6enkKK21zZ2lkICIiCisiU2V0dGluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJ3NwYXJzZV9zdXBlcicgbm90IHN1cHBvcnRlZFxuIgorImZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBtZXRhX2JnIGZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorIlBlbmd1YmFoYW4gdWt1cmFuIGlub2RlIHRpZGFrIGRpZHVrdW5nIHVudHVrIHNpc3RlbSBiZXJrYXMgZGVuZ2FuIGZsZXhfYmdcbiIKKyJmaXR1ciBha3RpZi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTA4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbid0XG4iCisiYmUgc2V0IGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgb3JcbiIKKyJyZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJIdWdlX2ZpbGUgZmVhdHVyZSBoYW55YSBib2xlaCBkaWhhcHVzIGtldGlrYSBzaXN0ZW0gYmVya2FzIHNlZGFuZ1xuIgorImRpbW91bnQgYmFjYS1zYWphIGF0YXUgdGlkYWsgZGltb3VudC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NTM1Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2Fubm90XG4iCisiYmUgZGlzYWJsZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmVhZG9ubHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NTQzCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICJrZXRpa2EgbWVtYmFjYSBiaXRtYXAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1MgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWdpYyBudW1iZXIgaW4gTU1QIGJsb2NrIGRvZXMgbm90IG1hdGNoLiBleHBlY3RlZDogJXgsIGFjdHVhbDogJXhcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1NTcKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIgorbXNnc3RyICJrZXRpa2Egc2VkYW5nIG1lbWJhY2EgaW5vZGUgYmxvayBidXJ1ayIKKworIzogbWlzYy90dW5lMmZzLmM6NTg5Cittc2dpZCAiIgorIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgY2F1c2UgdGhlIHRoZSBmaWxlc3lzdGVtIHRvIGJlXG4iCisiaW5jb25zaXN0ZW50LlxuIgorbXNnc3RyICIiCisiTWVuZ2hhcHVzIGZsZXhfYmcgZmxhZyBha2FuIG1lbmdha2liYXRrYW4gc2lzdGVtIGJlcmthcyBtZW5qYWRpXG4iCisidGlkYWsga29uc2lzdGVuLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2MDAKK21zZ2lkICIiCisiVGhlIGh1Z2VfZmlsZSBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkh1Z2VfZmlsZSBmZWF0dXJlIGhhbnlhIGJvbGVoIGRpaGFwdXMga2V0aWthIHNpc3RlbSBiZXJrYXMgc2VkYW5nXG4iCisiZGltb3VudCBiYWNhLXNhamEgYXRhdSB0aWRhayBkaW1vdW50LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NjAKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogJ15xdW90YScgb3B0aW9uIG92ZXJyaWRlcyAnLVEnYXJndW1lbnRzLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcwNQorbXNnaWQgIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIGEgam91cm5hbC5cbiIKK21zZ3N0ciAiU2lzdGVtIGJlcmthcyB0ZWxhaCBtZW1pbGlraSBzZWJ1YWgganVybmFsLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBvbiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiXHRrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW1idWthIGp1cm5hbCBkaSAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBvbiBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiTWVtYnVhdCBqdXJuYWwgZGkgcGVyYW5na2F0ICVzOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBhZGRpbmcgZmlsZXN5c3RlbSB0byBqb3VybmFsIG9uICVzIgorbXNnc3RyICJrZXRpa2EgbWVuYW1iYWhrYW4gc2lzdGVtIGJlcmthcyBkaSBqdXJuYWwgZGkgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc0MworbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgaW5vZGU6ICIKK21zZ3N0ciAiTWVtYnVhdCBqdXJuYWwgaW5vZGU6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NzU3Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiCittc2dzdHIgIiIKKyJcbiIKKyJcdGtldGlrYSBtZW5jb2JhIG1lbWJ1YXQgZmlsZSBqdXJuYWwiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjgzMgorIywgZnV6enkKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2UgcXVvdGEgb3B0aW9ucyFcbiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuZ2Fsb2thc2lrYW4gbWVtb3JpIHVudHVrIG1lbXBhcnNlIHBpbGloYW4hXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg1NAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgcXVvdGEgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRm9sbG93aW5nIHZhbGlkIHF1b3RhIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSAocGFzcyBieSBzZXBhcmF0aW5nIHdpdGggIgorImNvbW1hKTpcbiIKKyJcdFteXXVzcnF1b3RhXG4iCisiXHRbXl1ncnBxdW90YVxuIgorIlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBwYXJzZSBkYXRlL3RpbWUgc3BlY2lmaWVyOiAlcyIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVtcGFyc2UgZGF0ZS90aW1lIHNwZWNpZmllcjogJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk0MiBtaXNjL3R1bmUyZnMuYzo5NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1vdW50cyBjb3VudCAtICVzIgorbXNnc3RyICJqdW1sYWggbW91bnQgYnVydWsgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBlcnJvciBiZWhhdmlvciAtICVzIgorbXNnc3RyICJwZXJpbGFrdSBlcnJvciBidXJ1ayAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpZC9ncm91cCBuYW1lIC0gJXMiCittc2dzdHIgIm5hbWEgZ2lkL2dydXAgYnVydWsgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW50ZXJ2YWwgLSAlcyIKK21zZ3N0ciAiaW50ZXJ2YWwgYnVydWsgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2sgcmF0aW8gLSAlcyIKK21zZ3N0ciAicmFzaW8gcmVzZXJ2ZWQgYmxvayBidXJ1ayAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDc1Cittc2dpZCAiLW8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1vIGhhbnlhIGJvbGVoIGRpc3Blc2lmaWthc2lrYW4gc2VrYWxpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDg0Cittc2dpZCAiLU8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1PIGhhbnlhIGJvbGVoIGRpc3Blc2lmaWthc2lrYW4gc2VrYWxpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9ja3MgY291bnQgLSAlcyIKK21zZ3N0ciAianVtbGFoIHJlc2VydmVkIGJsb2sgYnVydWsgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdWlkL3VzZXIgbmFtZSAtICVzIgorbXNnc3RyICJuYW1hIHVpZC9wZW5nZ3VuYSBidXJ1ayAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgInVrdXJhbiBpbm9kZSBidXJ1ayAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIklub2RlIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by0gJXMiCittc2dzdHIgIlVrdXJhbiBpbm9kZSBoYXJ1cyBrZWxpcGF0YW4gZGFyaSBkdWEgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtbXBfdXBkYXRlX2ludGVydmFsIHRvbyBiaWc6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZFxuIgorbXNnaWRfcGx1cmFsICIiCisiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyWzBdICJNZW5zZXQgbWFrc2ltYWwganVtbGFoIG1vdW50IGtlICVkXG4iCittc2dzdHJbMV0gIk1lbnNldCBtYWtzaW1hbCBqdW1sYWggbW91bnQga2UgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaWRlOiAlc1xuIgorbXNnc3RyICJJbnZhbGlkIFJBSUQgc3RyaWRlOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpcGUtd2lkdGg6ICVzXG4iCittc2dzdHIgIkludmFsaWQgUkFJRCBzdHJpcGUtd2lkdGg6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBoYXNoIGFsZ29yaXRobTogJXNcbiIKK21zZ3N0ciAiQWxnb3JpdG1hIGhhc2ggdGlkYWsgdmFsaWQ6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHRvICVzICglZClcbiIKK21zZ3N0ciAiTWVuc2V0IGRlZmF1bHQgYWxnb3JpdG1hIGhhc2gga2UgJXMgKCVkKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzMxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0Y2xlYXJfbW1wXG4iCisiXHRoYXNoX2FsZz08aGFzaCBhbGdvcml0aG0+XG4iCisiXHRtb3VudF9vcHRzPTxleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnM+XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgY2h1bmsgc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGVfd2lkdGg9PFJBSUQgc3RyaWRlKmRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0XnRlc3RfZnNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBpbGloYW4gYnVydWsgZGlzcGVzaWZpa2FzaWthbi5cbiIKKyJcbiIKKyJQaWxpaGFuIGV4dGVuZGVkIGRpcGlzYWhrYW4gb2xlaCBrb21hLCBkYW4gYm9sZWggbWVuZ2FtYmlsIGFyZ3VtZW5cbiIKKyJcdHlhbmcgZGkgc2V0IG9mIG9sZWggc2VidWFoIHRhbmRhIHNhbWEgZGVuZ2FuICgnPScpLlxuIgorIlxuIgorIlBpbGloYW4gZXh0ZW5kZWQgeWFuZyB2YWxpZCBhZGFsYWg6XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgdWt1cmFuIGNodW5rIGRhbGFtIGJsb2s+XG4iCisiXHRzdHJpcGUtd2lkdGg9PFJBSUQgc3RyaWRlKmRhdGEgZGlzayBkYWxhbSBibG9rPlxuIgorIlx0aGFzaF9hbGc9PGFsZ29yaXRtYV9oYXNoPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0XnRlc3RfZnNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc5OAorIywgZnV6enkKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBpbm9kZSBiaXRtYXBcbiIKK21zZ3N0ciAia2V0aWthIG1lbWJhY2EgYml0bWFwIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODAzCisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byByZWFkIGJsb2NrIGJpdG1hcFxuIgorbXNnc3RyICJtZW1iYWNhIGlub2RlIGRhbiBibG9rIGJpdG1hcCIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyMCByZXNpemUvcmVzaXplMmZzLmM6OTMxCittc2dpZCAiYmxvY2tzIHRvIGJlIG1vdmVkIgorbXNnc3RyICJibG9rIGFrYW4gZGlwaW5kYWhrYW4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjMKK21zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2sgYml0bWFwIHdoZW4gaW5jcmVhc2luZyBpbm9kZSBzaXplXG4iCittc2dzdHIgIiIKKyJHYWdhbCB1bnR1ayBtZW5nYWxva2FzaWthbiBiaXRtYXAgYmxvayBrZXRpa2EgbWVuaW5na2F0a2FuIHVrdXJhbiBpbm9kZVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODI5Cittc2dpZCAiTm90IGVub3VnaCBzcGFjZSB0byBpbmNyZWFzZSBpbm9kZSBzaXplIFxuIgorbXNnc3RyICJUaWRhayBjdWt1cCBydWFuZyB1bnR1ayBtZW5pbmdrYXRrYW4gdWt1cmFuIGlub2RlIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODM0Cittc2dpZCAiRmFpbGVkIHRvIHJlbG9jYXRlIGJsb2NrcyBkdXJpbmcgaW5vZGUgcmVzaXplIFxuIgorbXNnc3RyICJHYWdhbCB1bnR1ayBtZW1pbmRhaGthbiBibG9rIGtldGlrYSBwZW5ndWJhaGFuIHVrdXJhbiBpbm9kZSBcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTg2NgorbXNnaWQgIiIKKyJFcnJvciBpbiByZXNpemluZyB0aGUgaW5vZGUgc2l6ZS5cbiIKKyJSdW4gZTJ1bmRvIHRvIHVuZG8gdGhlIGZpbGUgc3lzdGVtIGNoYW5nZXMuIFxuIgorbXNnc3RyICIiCisiRXJyb3IgZGFsYW0gbWVuZ3ViYWggdWt1cmFuIGRhcmkgdWt1cmFuIGlub2RlLlxuIgorIkphbGFua2FuIGUydW5kbyB1bnR1ayB1bmRvIHBlcnViYWhhbiBzaXN0ZW0gYmVya2FzLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODkzCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZGIgZmlsZW5hbWVcbiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuZ2Fsb2thc2lrYW4gbWVtb3JpIHVudHVrIG5hbWEgYmVya2FzIHRkYlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZWxldGUgJXMiCittc2dzdHIgImtldGlrYSBtZW5jb2JhIHVudHVrIG1lbmdoYXB1cyAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gdW5kbyB0aGUgdHVuZTJmcyBvcGVyYXRpb24gcGxlYXNlIHJ1biB0aGUgY29tbWFuZFxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlVudHVrIG1lbmdlbWJhbGlrYW4gb3BlcmFzaSB0dW5lMmZzIG1vaG9uIGphbGFua2FuIHBlcmludGFoXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNTVAgYmxvY2sgbWFnaWMgaXMgYmFkLiBUcnkgdG8gZml4IGl0IGJ5IHJ1bm5pbmc6XG4iCisiJ2UyZnNjayAtZiAlcydcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIGlzIGFscmVhZHkgJWx1XG4iCittc2dzdHIgIlVrdXJhbiBpbm9kZSB0ZWxhaCAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA4MQorIywgZnV6enkKK21zZ2lkICJTaHJpbmtpbmcgaW5vZGUgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIk1lbmdlY2lsa2FuIHVrdXJhbiBpbm9kZSB5YW5nIHRpZGFrIGRpbGF5YW5pXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaW5vZGUgc2l6ZSAlbHUgKG1heCAlZClcbiIKK21zZ3N0ciAidWt1cmFuIGlub2RlIHRpZGFrIHZhbGlkICVkIChtaW4gJWQvbWF4ICVkKSIKKworIzogbWlzYy90dW5lMmZzLmM6MjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiTWVuc2V0IG1ha3NpbWFsIGp1bWxhaCBtb3VudCBrZSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3VycmVudCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICJNZW5zZXQganVtbGFoIG1vdW50IHNla2FyYW5nIGtlICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBlcnJvciBiZWhhdmlvciB0byAlZFxuIgorbXNnc3RyICJNZW5zZXQgcGVyaWxha3UgZXJyb3Iga2UgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBnaWQgdG8gJWx1XG4iCittc2dzdHIgIk1lbnNldCBnaWQgcmVzZXJ2ZWQgYmxvayBrZSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgaXMgdG9vIGJpZyAoJWx1KSIKK21zZ3N0ciAiTWVuc2V0IGludGVydmFsIGRpYW50YXJhIGNoZWNrIGtlICVsdSBkZXRpa1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0ciAiTWVuc2V0IGludGVydmFsIGRpYW50YXJhIGNoZWNrIGtlICVsdSBkZXRpa1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50YWdlIHRvICVnJSUgKCVsbHUgYmxvY2tzKVxuIgorbXNnc3RyICJNZW5zZXQgcGVyc2VudGFzaSByZXNlcnZlZCBibG9rIGtlICVnJSUgKCV1IGJsb2spXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlc2VydmVkIGJsb2NrcyBjb3VudCBpcyB0b28gYmlnICglbGx1KSIKK21zZ3N0ciAianVtbGFoIHJlc2VydmVkIGJsb2sgdGVybGFsdSBiZXNhciAoJWx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgY291bnQgdG8gJWxsdVxuIgorbXNnc3RyICJNZW5zZXQganVtbGFoIHJlc2VydmVkIGJsb2sga2UgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxODcKK21zZ2lkICIiCisiXG4iCisiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgc3BhcnNlIHN1cGVyYmxvY2tzLlxuIgorbXNnc3RyICIiCisiXG4iCisiU2lzdGVtIGJlcmthcyB0ZWxhaCBtZW1pbGlraSBzcGFyc2Ugc3VwZXJibG9rLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTkxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJTZXR0aW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCBzdXBwb3J0ZWRcbiIKKyJmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgbWV0YV9iZyBmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKyJQZW5ndWJhaGFuIHVrdXJhbiBpbm9kZSB0aWRhayBkaWR1a3VuZyB1bnR1ayBzaXN0ZW0gYmVya2FzIGRlbmdhbiBmbGV4X2JnXG4iCisiZml0dXIgYWt0aWYuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgc2V0LiAgJXMiCittc2dzdHIgIiIKKyJcbiIKKyJTcGFyc2Ugc3VwZXJibG9rIGZsYWcgZGlzZXQuICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjA3CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJDbGVhcmluZyB0aGUgc3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiTWVuZ2hhcHVzIHNwYXJzZSBzdXBlcmZsYWcgdGlkYWsgZGlsYXlhbmkuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB0aW1lIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRvICVzXG4iCittc2dzdHIgIk1lbnNldCB3YWt0dSBzaXN0ZW0gYmVya2FzIHRlcmFraGlyIGRpcGVyaWtzYSBrZSAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHVpZCB0byAlbHVcbiIKK21zZ3N0ciAiTWVuc2V0IHVpZCByZXNlcnZlZCBibG9rIGtlICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjUzCittc2dpZCAiRXJyb3IgaW4gdXNpbmcgY2xlYXJfbW1wLiBJdCBtdXN0IGJlIHVzZWQgd2l0aCAtZlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNzEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBxdW90YSBmZWF0dXJlIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIiIKKyJVa3VyYW4gaW5vZGUgbXVuZ2tpbiBha2FuIGJlcnViYWgga2V0aWthIHNpc3RlbSBiZXJrYXMgdGlkYWsgZGltb3VudC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI5MgorIywgZnV6enkKK21zZ2lkICJUaGUgVVVJRCBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiVWt1cmFuIGlub2RlIG11bmdraW4gYWthbiBiZXJ1YmFoIGtldGlrYSBzaXN0ZW0gYmVya2FzIHRpZGFrIGRpbW91bnQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzMjIKK21zZ2lkICJJbnZhbGlkIFVVSUQgZm9ybWF0XG4iCittc2dzdHIgIkludmFsaWQgZm9ybWF0IFVVSURcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjMzNworIywgZnV6enkKK21zZ2lkICJOZWVkIHRvIHVwZGF0ZSBqb3VybmFsIHN1cGVyYmxvY2suXG4iCittc2dzdHIgIm1lbWJhY2Egam91cm5hbCBzdXBlcmJsb2NrXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNTgKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiVWt1cmFuIGlub2RlIG11bmdraW4gYWthbiBiZXJ1YmFoIGtldGlrYSBzaXN0ZW0gYmVya2FzIHRpZGFrIGRpbW91bnQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNjYKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIGlub2RlIHNpemUgbm90IHN1cHBvcnRlZCBmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgZmxleF9iZ1xuIgorImZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorIlBlbmd1YmFoYW4gdWt1cmFuIGlub2RlIHRpZGFrIGRpZHVrdW5nIHVudHVrIHNpc3RlbSBiZXJrYXMgZGVuZ2FuIGZsZXhfYmdcbiIKKyJmaXR1ciBha3RpZi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGlub2RlIHNpemUgJWx1XG4iCittc2dzdHIgIk1lbnNldCB1a3VyYW4gaW5vZGUgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzODIKKyMsIGZ1enp5Cittc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBpbm9kZSBzaXplXG4iCittc2dzdHIgIkdhZ2FsIHVudHVrIG1lbWluZGFoa2FuIGJsb2sga2V0aWthIHBlbmd1YmFoYW4gdWt1cmFuIGlub2RlIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaWRlIHNpemUgdG8gJWRcbiIKK21zZ3N0ciAiTWVuc2V0IHVrdXJhbiBzdHJpZGUga2UgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlwZSB3aWR0aCB0byAlZFxuIgorbXNnc3RyICJNZW5zZXQgbGViYXIgc3RyaXBlIGtlICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI0MDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zIHRvICclcydcbiIKK21zZ3N0ciAiTWVuc2V0IGp1bWxhaCBtb3VudCBzZWthcmFuZyBrZSAlZFxuIgorCisjOiBtaXNjL3V0aWwuYzo5MworbXNnaWQgIjxwcm9jZWVkaW5nPlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjk3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQcm9jZWVkIGFueXdheSAob3Igd2FpdCAlZCBzZWNvbmRzKSA/ICh5LG4pICIKK21zZ3N0ciAiSmFsYW5rYW4gc2FqYT8gKHksbikgIgorCisjOiBtaXNjL3V0aWwuYzoxMDEKK21zZ2lkICJQcm9jZWVkIGFueXdheT8gKHksbikgIgorbXNnc3RyICJKYWxhbmthbiBzYWphPyAoeSxuKSAiCisKKyM6IG1pc2MvdXRpbC5jOjEzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vdW50ZWQgb24gJXMgb24gJXMiCittc2dzdHIgImp1bWxhaCBtb3VudCBidXJ1ayAtICVzIgorCisjOiBtaXNjL3V0aWwuYzoxMzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlx0bGFzdCBtb3VudGVkIG9uICVzIgorbXNnc3RyICJqdW1sYWggbW91bnQgYnVydWsgLSAlcyIKKworIzogbWlzYy91dGlsLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0Y3JlYXRlZCBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vZGlmaWVkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGb3VuZCBhICVzIHBhcnRpdGlvbiB0YWJsZSBpbiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSAlcyBkb2VzIG5vdCBleGlzdCBhbmQgbm8gc2l6ZSB3YXMgc3BlY2lmaWVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjIxMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgcmVndWxhciBmaWxlICVzXG4iCittc2dzdHIgImJlcmthcyBiaWFzYSIKKworIzogbWlzYy91dGlsLmM6MjEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAidGlkYWsgZGFwYXQgbWVtYnVrYSAlczogJXMiCisKKyM6IG1pc2MvdXRpbC5jOjIxNgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZGV2aWNlIGFwcGFyZW50bHkgZG9lcyBub3QgZXhpc3Q7IGRpZCB5b3Ugc3BlY2lmeSBpdCBjb3JyZWN0bHk/XG4iCittc2dzdHIgIiIKKyJcbiIKKyJQZXJhbmdrYXQga2VsaWhhdGFubnlhIHRpZGFrIGFkYTsgYXBha2FoIGFuZGEgbWVuc3Blc2lmaWthc2lrYW5ueWEgZGVuZ2FuICIKKyJiZW5hcj9cbiIKKworIzogbWlzYy91dGlsLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGJsb2NrIHNwZWNpYWwgZGV2aWNlLlxuIgorbXNnc3RyICIlcyBidWthbiBzZWJ1YWggcGVyYW5na2F0IGJsb2sgc3Blc2lhbC5cbiIKKworIzogbWlzYy91dGlsLmM6MjYwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyBjb250YWlucyBhICVzIGZpbGUgc3lzdGVtIGxhYmVsbGVkICclcydcbiIKK21zZ3N0ciAiIGJlcmlzaSBzZWJ1YWggZmlsZSBzeXN0ZW0gZGVuZ2FuIGVycm9ycyIKKworIzogbWlzYy91dGlsLmM6MjYzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyBjb250YWlucyBhICVzIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgIiBiZXJpc2kgc2VidWFoIGZpbGUgc3lzdGVtIGRlbmdhbiBlcnJvcnMiCisKKyM6IG1pc2MvdXRpbC5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBlbnRpcmUgZGV2aWNlLCBub3QganVzdCBvbmUgcGFydGl0aW9uIVxuIgorbXNnc3RyICIlcyBhZGFsYWggc2VsdXJ1aCBwZXJhbmdrYXRtIGJ1a2FuIGhhbnlhIHNlYnVhaCBwYXJ0aXNpIVxuIgorCisjOiBtaXNjL3V0aWwuYzozMjMKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAibWtlMmZzIGRpcGFrc2FrYW4gc2FqYS4gTXVkYWggbXVkYWhhbiAvZXRjL210YWIgdGlkYWsgYmVuYXIuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBtYWtlIGEgJXMgaGVyZSFcbiIKK21zZ3N0ciAidGlkYWsgYWthbiBtZW1idWF0IHNlYnVhaCAlcyBkaXNpbmkhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMzNQorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICJta2UyZnMgZGlwYWtzYWthbiBzYWphLlxuIgorCisjOiBtaXNjL3V0aWwuYzozNTEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugam91cm5hbCBvcHRpb25zIVxuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW5nYWxva2FzaWthbiBtZW1vcmkgdW50dWsgbWVtcGFyc2UgcGlsaWhhbiBqdXJuYWwhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IGZpbmQgam91cm5hbCBkZXZpY2UgbWF0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlRpZGFrIGRhcGF0IG1lbmVtdWthbiBwZXJhbmdrYXQganVybmFsIHlhbmcgY29jb2sgJXNcbiIKKworIzogbWlzYy91dGlsLmM6NDAzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJCYWQgam91cm5hbCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJKb3VybmFsIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBqb3VybmFsIG9wdGlvbnMgYXJlOlxuIgorIlx0c2l6ZT08am91cm5hbCBzaXplIGluIG1lZ2FieXRlcz5cbiIKKyJcdGRldmljZT08am91cm5hbCBkZXZpY2U+XG4iCisiXHRsb2NhdGlvbj08am91cm5hbCBsb2NhdGlvbj5cbiIKKyJcbiIKKyJUaGUgam91cm5hbCBzaXplIG11c3QgYmUgYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBpbGloYW4ganVybmFsIGJ1cnVrIGRpc3Blc2lmaWthc2lrYW4uXG4iCisiXG4iCisiUGlsaWhhbiBqdXJuYWwgZGlwaXNhaGthbiBkZW5nYW4ga29tYSwgZGFuIGJvbGVoIG1lbmdndW5ha2FuIGFyZ3VtZW4geWFuZ1xuIgorIlx0ZGlzZXQgb2ZmIGRlbmdhbiBzZWJ1YWggdGFuZGEgc2FtYSBkZW5nYW4gKCc9JykuXG4iCisiXG4iCisiUGlsaWhhbiBqdXJuYWwgdmFsaWQgYWRhbGFoOlxuIgorIlx0c2l6ZT08dWt1cmFuIGp1cm5hbCBkYWxhbSBtZWdhYnl0ZXM+XG4iCisiXHRkZXZpY2U9PHBlcmFuZ2thdCBqdXJuYWw+XG4iCisiXG4iCisiVWt1cmFuIGp1cm5hbCBoYXJ1cyBkaWFudGFyYSAxMDI0IGRhbiAxMDI0MDAwMCBibG9rIHNpc3RlbSBiZXJrYXMuXG4iCisiXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQzNAorbXNnaWQgIiIKKyJcbiIKKyJGaWxlc3lzdGVtIHRvbyBzbWFsbCBmb3IgYSBqb3VybmFsXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTaXN0ZW0gYmVya2FzIHRlcmxhbHUga2VjaWwgdW50dWsgc2VidWFoIGp1cm5hbFxuIgorCisjOiBtaXNjL3V0aWwuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlRoZSByZXF1ZXN0ZWQgam91cm5hbCBzaXplIGlzICVkIGJsb2NrczsgaXQgbXVzdCBiZVxuIgorImJldHdlZW4gMTAyNCBhbmQgMTAyNDAwMDAgYmxvY2tzLiAgQWJvcnRpbmcuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJVa3VyYW4ganVybmFsIHlhbmcgZGltaW50YSBhZGFsYWggJWQgYmxvazsgaW5pIGhhcnVzIGJlcmFkYVxuIgorImRpYW50YXJhIDEwMjQgZGFuIDEwMjQwMDAwIGJsb2suIE1lbWJhdGFsa2FuLlxuIgorCisjOiBtaXNjL3V0aWwuYzo0NDkKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBzaXplIHRvbyBiaWcgZm9yIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJVa3VyYW4ganVybmFsIHRlcmxhbHUgYmVzYXIgdW50dWsgc2lzdGVtIGJlcmthcy5cbiIKKworIzogbWlzYy91dGlsLmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGVzeXN0ZW0gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNoZWNrZWQgZXZlcnkgJWQgbW91bnRzIG9yXG4iCisiJWcgZGF5cywgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgVXNlIHR1bmUyZnMgLWMgb3IgLWkgdG8gb3ZlcnJpZGUuXG4iCittc2dzdHIgIiIKKyJTaXN0ZW0gYmVya2FzIGluaSBha2FuIHNlY2FyYSBvdG9tYXRpcyBkaXBlcmlrc2Egc2V0aWFwICVkIG1vdW50cyBhdGF1XG4iCisiJWcgaGFyaSwgeWFuZyBtYW5hIHlhbmcgZGF0YW5nIGxlYmloIGR1bHUuIEd1bmFrYW4gdHVuZTJmcyAtYyBhdGF1IC1pXG4iCisidW50dWsgbWVuZ3ViYWhueWEuXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0OQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1kXSBbLXAgcGlkZmlsZV0gWy1zIHNvY2tldHBhdGhdIFstVCB0aW1lb3V0XVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgWy1yfHRdIFstbiBudW1dIFstcyBzb2NrZXRwYXRoXVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MTU1CisjLCBmdXp6eQorbXNnaWQgImJhZCBhcmd1bWVudHMiCittc2dzdHIgIiVzOiB0ZXJsYWx1IGJhbnlhayBhcmd1bWVuXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoxNzMKK21zZ2lkICJjb25uZWN0IgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoxOTIKK21zZ2lkICJ3cml0ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MjAwCittc2dpZCAicmVhZCBjb3VudCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MjA2CisjLCBmdXp6eQorbXNnaWQgImJhZCByZXNwb25zZSBsZW5ndGgiCittc2dzdHIgIlBhbmphbmcgc3RyaWRlIHRpZGFrIHZhbGlkIgorCisjOiBtaXNjL3V1aWRkLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInV1aWRkIGRhZW1vbiBhbHJlYWR5IHJ1bm5pbmcgYXQgcGlkICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjI3OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY3JlYXRlIHVuaXggc3RyZWFtIHNvY2tldDogJXMiCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbXBhcnNlIGRhdGUvdGltZSBzcGVjaWZpZXI6ICVzIgorCisjOiBtaXNjL3V1aWRkLmM6MzA4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBiaW5kIHVuaXggc29ja2V0ICVzOiAlc1xuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW5naHVidW5na2FuICVpOiAlbVxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzE2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsaXN0ZW4gb24gdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmdodWJ1bmdrYW4gJWk6ICVtXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgZnJvbSBjbGllbnQsIGxlbiA9ICVkXG4iCittc2dzdHIgIkVycm9yIG1lbWJhY2EgQGkgJWk6ICVtXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlcmF0aW9uICVkLCBpbmNvbWluZyBudW0gPSAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCByYW5kb20gVVVJRDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCAlZCBzdWJzZXF1ZW50IFVVSURzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtaXNjL3V1aWRkLmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCAlZCBVVUlEJ3M6XG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjQzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24gJWRcbiIKK21zZ3N0ciAiVmVyc2kgRUEgdGlkYWsgdmFsaWQuXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0NzcgbWlzYy91dWlkZC5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MzQgbWlzYy91dWlkZC5jOjU2MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2FsbGluZyB1dWlkZCBkYWVtb24gKCVzKTogJXNcbiIKK21zZ3N0ciAiRXJyb3IgbWVtYnVhdCAvQGwgQGQgKCVzKTogJW1cbiIKKworIzogbWlzYy91dWlkZC5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ4Cittc2dpZCAiTGlzdCBvZiBVVUlEJ3M6XG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHJlcGx5IGxlbmd0aCBmcm9tIHNlcnZlciAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qga2lsbCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIktpbGxlZCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGdlbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJdIFstdF1cbiIKK21zZ3N0ciAiUGVuZ2d1bmFhbjogJXMgWy1yXSBbLXRdXG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDIKK21zZ2lkICIjIEV4dGVudCBkdW1wOlxuIgorbXNnc3RyICIjIEV4dGVudCBkdW1wOlxuIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIjXHROdW09JWxsdSwgU2l6ZT0lbGx1LCBDdXJzb3I9JWxsdSwgU29ydGVkPSVsbHVcbiIKK21zZ3N0ciAiI1x0TnVtPSVkLCBVa3VyYW49JWQsIEN1cnNvcj0lZCwgU29ydGVkPSVkXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBkZXZpY2UgW25ld19zaXplXVxuIgorIlxuIgorbXNnc3RyICIiCisiUGVuZ2d1bmFhbjogJXMgWy1kIGRlYnVnX2ZsYWdzXSBbLWZdIFstRl0gWy1NXSBbLVBdIFstcF0gcGVyYW5na2F0ICIKKyJbdWt1cmFuX2JhcnVdXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NjYKK21zZ2lkICJFeHRlbmRpbmcgdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJNZW1wZXJiZXNhciB0YWJlbCBpbm9kZSIKKworIzogcmVzaXplL21haW4uYzo2OQorbXNnaWQgIlJlbG9jYXRpbmcgYmxvY2tzIgorbXNnc3RyICJNZW1pbmRhaGthbiBibG9rIgorCisjOiByZXNpemUvbWFpbi5jOjcyCittc2dpZCAiU2Nhbm5pbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIk1lbWVyaWtzYSB0YWJlbCBpbm9kZSIKKworIzogcmVzaXplL21haW4uYzo3NQorbXNnaWQgIlVwZGF0aW5nIGlub2RlIHJlZmVyZW5jZXMiCittc2dzdHIgIk1lbXBlcmJhcnVpIHJlZmVyZW5zaSBpbm9kZSIKKworIzogcmVzaXplL21haW4uYzo3OAorbXNnaWQgIk1vdmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiTWVtaW5kYWhrYW4gdGFiZWwgaW5vZGUiCisKKyM6IHJlc2l6ZS9tYWluLmM6ODEKK21zZ2lkICJVbmtub3duIHBhc3M/IT8iCittc2dzdHIgIlRhaGFwIHRpZGFrIGRpa2V0YWh1aT8hPyIKKworIzogcmVzaXplL21haW4uYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJCZWdpbiBwYXNzICVkIChtYXggPSAlbHUpXG4iCittc2dzdHIgIkF3YWwgdGFoYXAgJWQgKG1heCA9ICVsdSlcbiIKKworIzogcmVzaXplL21haW4uYzoxNTUKK21zZ2lkICIiCisiXG4iCisiUmVzaXppbmcgYmlnYWxsb2MgZmlsZSBzeXN0ZW1zIGhhcyBub3QgYmVlbiBmdWxseSB0ZXN0ZWQuICBQcm9jZWVkIGF0XG4iCisieW91ciBvd24gcmlzayEgIFVzZSB0aGUgZm9yY2Ugb3B0aW9uIGlmIHlvdSB3YW50IHRvIGdvIGFoZWFkIGFueXdheS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIgorbXNnc3RyICJrZXRpa2EgbWVtYnVrYSAlcyIKKworIzogcmVzaXplL21haW4uYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZ2V0dGluZyBzdGF0IGluZm9ybWF0aW9uIGZvciAlcyIKK21zZ3N0ciAia2V0aWthIG1lbXBlcm9sZWggaW5mb3JtYXNpIHN0YXRpc3RpayB1bnR1ayAlcyIKKworIzogcmVzaXplL21haW4uYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZiAlcycgZmlyc3QuXG4iCisiXG4iCittc2dzdHIgIiIKKyJUb2xvbmcgamFsYW5rYW4gJ2UyZnNjayAtZiAlcycgdGVybGViaWggZGFodWx1LlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjM2OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXN0aW1hdGVkIG1pbmltdW0gc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbTogJWxsdVxuIgorbXNnc3RyICJFc3RpbWFzaSBtaW5pbXVtIGRhcmkgdWt1cmFuIHNpc3RlbSBiZXJrYXM6ICV1XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbmV3IHNpemU6ICVzXG4iCittc2dzdHIgIlVrdXJhbiBpbm9kZSBiYXJ1IHRpZGFrIHZhbGlkOiAlc1xuIgorCisjOiByZXNpemUvbWFpbi5jOjQyMQorbXNnaWQgIk5ldyBzaXplIHRvbyBsYXJnZSB0byBiZSBleHByZXNzZWQgaW4gMzIgYml0c1xuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJOZXcgc2l6ZSBzbWFsbGVyIHRoYW4gbWluaW11bSAoJWxsdSlcbiIKK21zZ3N0ciAiVWt1cmFuIGJhcnUgbGViaWgga2VjaWwgZGFyaXBhZGEgbWluaW11bSAoJXUpXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDM1Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgbGVuZ3RoIgorbXNnc3RyICJQYW5qYW5nIHN0cmlkZSB0aWRhayB2YWxpZCIKKworIzogcmVzaXplL21haW4uYzo0NTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29udGFpbmluZyBwYXJ0aXRpb24gKG9yIGRldmljZSkgaXMgb25seSAlbGx1ICglZGspIGJsb2Nrcy5cbiIKKyJZb3UgcmVxdWVzdGVkIGEgbmV3IHNpemUgb2YgJWxsdSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJQYXJ0aXNpIChhdGF1IHBlcmFuZ2thdCkgaGFueWEgYmVyaXNpICV1ICglZGspIGJsb2suXG4iCisiQW5kYSBtZW1pbnRhIHVrdXJhbiBiYXJ1ICV1IGJsb2suXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gaXMgYWxyZWFkeSAlbGx1ICglZGspIGJsb2NrcyBsb25nLiAgTm90aGluZyB0byBkbyFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlNpc3RlbSBiZXJrYXMgdGVsYWggbWVtaWxpa2kgcGFuamFuZyAldSBibG9rLiBUaWRhayBhZGEgeWFuZyBoYXJ1cyAiCisiZGlsYWt1a2FuICFcbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0NzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICJNZW5ndWJhaCBzaXN0ZW0gYmVya2FzIGRpICVzIGtlICV1ICglZGspIGJsb2suXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZXNpemUgJXMiCittc2dzdHIgImtldGlrYSBtZW5jb2JhIHVudHVrIG1lbmd1YmFoIHVrdXJhbiAlcyIKKworIzogcmVzaXplL21haW4uYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZnkgJXMnIHRvIGZpeCB0aGUgZmlsZXN5c3RlbVxuIgorImFmdGVyIHRoZSBhYm9ydGVkIHJlc2l6ZSBvcGVyYXRpb24uXG4iCittc2dzdHIgIiIKKyJNb2hvbiBqYWxhbmthbiAnZTJmc2NrIC1meSAlcycgdW50dWsgbWVtYmV0dWxrYW4gc2lzdGVtIGJlcmthc1xuIgorInNldGVsYWggcGVtYmF0YWxhbiBvcGVyYXNpIHBlbmd1YmFoYW4gdWt1cmFuLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIG9uICVzIGlzIG5vdyAlbGx1ICglZGspIGJsb2NrcyBsb25nLlxuIgorIlxuIgorbXNnc3RyICIiCisiU2lzdGVtIGJlcmthcyBkaSAlcyBzZWthcmFuZyBtZW1pbGlraSBwYW5qYW5nICV1IGJsb2suXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byB0cnVuY2F0ZSAlcyIKK21zZ3N0ciAia2V0aWthIG1lbmNvYmEgdW50dWsgbWVtb3RvbmcgJXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4MgorIywgZnV6enkKK21zZ2lkICJrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXplIHdpdGggc3BhcnNlX3N1cGVyMiIKK21zZ3N0ciAiS2VybmVsIHRpZGFrIG1lbGF5YW5pIG9ubGluZSByZXNpemluZyIKKworIzogcmVzaXplL29ubGluZS5jOjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlczsgb24tbGluZSByZXNpemluZyByZXF1aXJlZFxuIgorbXNnc3RyICJTaXN0ZW0gYmVya2FzIGRpICVzIGRpbW91bnQgZGkgJXM7IG9uLWxpbmUgcmVzaXppbmcgZGlidXR1aGthblxuIgorCisjOiByZXNpemUvb25saW5lLmM6OTEKKyMsIGZ1enp5Cittc2dpZCAiT24tbGluZSBzaHJpbmtpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiT24tbGluZSBzaHJpbmtpbmcgZGFyaSAldSBrZSAldSB0aWRhayBkaWxheWFuaS5cbiIKKworIzogcmVzaXplL29ubGluZS5jOjExNgorbXNnaWQgIkZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIlNpc3RlbSBiZXJrYXMgdGlkYWsgbWVsYXlhbmkgb25saW5lIHJlc2l6aW5nIgorCisjOiByZXNpemUvb25saW5lLmM6MTI1CisjLCBmdXp6eQorbXNnaWQgIk5vdCBlbm91Z2ggcmVzZXJ2ZWQgZ2R0IGJsb2NrcyBmb3IgcmVzaXppbmciCittc2dzdHIgImtldGlrYSBtZW5yZXNlcnZlIGJsb2sgdW50dWsgb25saW5lIHJlc2l6ZSIKKworIzogcmVzaXplL29ubGluZS5jOjEzMgorIywgZnV6enkKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCByZXNpemluZyBhIGZpbGUgc3lzdGVtIHRoaXMgbGFyZ2UiCittc2dzdHIgIktlcm5lbCB0aWRhayBtZWxheWFuaSBvbmxpbmUgcmVzaXppbmciCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gbW91bnRwb2ludCAlcyIKK21zZ3N0ciAia2V0aWthIG1lbmNvYmEgbWVtYnVrYSBtb3VudHBvaW50ICVzIgorCisjOiByZXNpemUvb25saW5lLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIk9sZCByZXNpemUgaW50ZXJmYWNlIHJlcXVlc3RlZC5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MTY0IHJlc2l6ZS9vbmxpbmUuYzoxODEKK21zZ2lkICJQZXJtaXNzaW9uIGRlbmllZCB0byByZXNpemUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiSWppbiBkaXRvbGFrIGtldGlrYSBtZW5ndWJhaCB1a3VyYW4gc2lzdGVtIGJlcmthcyIKKworIzogcmVzaXplL29ubGluZS5jOjE2NyByZXNpemUvb25saW5lLmM6MTg3Cittc2dpZCAiV2hpbGUgY2hlY2tpbmcgZm9yIG9uLWxpbmUgcmVzaXppbmcgc3VwcG9ydCIKK21zZ3N0ciAiS2V0aWthIG1lbWVyaWtzYSB1bnR1ayBsYXlhbmFuIG9uLWxpbmUgcmVzaXppbmciCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxODQKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIktlcm5lbCB0aWRhayBtZWxheWFuaSBvbmxpbmUgcmVzaXppbmciCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlBlcmZvcm1pbmcgYW4gb24tbGluZSByZXNpemUgb2YgJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIk1lbmphbGFua2FuIHNlYnVhaCBvbi1saW5lIHJlc2l6ZSBkYXJpICVzIGtlICV1ICglZGspIGJsb2suXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMzMKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gZXh0ZW5kIHRoZSBsYXN0IGdyb3VwIgorbXNnc3RyICJLZXRpa2EgbWVuY29iYSB1bnR1ayBtZW5nZXh0ZW4gZ3J1cCB0ZXJha2hpciIKKworIzogcmVzaXplL29ubGluZS5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gYWRkIGdyb3VwICMlZCIKK21zZ3N0ciAiS2V0aWthIG1lbmNvYmEgdW50dWsgbWVuYW1iYWhrYW4gZ3J1cCAjJWQiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlcywgYW5kIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IHN1cHBvcnRlZCBvbiAiCisidGhpcyBzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJTaXN0ZW0gYmVya2FzIGRpICVzIGRpbW91bnQgZGkgJXMsIGRhbiBvbi1saW5lIHJlc2l6aW5nIHRpZGFrIGRpc3VwcG9ydCBkaSAiCisic3lzdGVtIGluaS5cbiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICJpbm9kZSAoJWxsdSkgaGFydXMgbGViaWgga2VjaWwgZGFyaSAldSIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjY5MQorbXNnaWQgInJlc2VydmVkIGJsb2NrcyIKK21zZ3N0ciAicmVzZXJ2ZWQgYmxvayIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjkzNgorbXNnaWQgIm1ldGEtZGF0YSBibG9ja3MiCittc2dzdHIgIm1ldGEtZGF0YSBibG9rIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MTAzOSByZXNpemUvcmVzaXplMmZzLmM6MTgzNgorIywgZnV6enkKK21zZ2lkICJuZXcgbWV0YSBibG9ja3MiCittc2dzdHIgIm1ldGEtZGF0YSBibG9rIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjA1NgorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW4hICBObyBzYiBpbiBsYXN0IHN1cGVyX3NwYXJzZSBiZz9cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjA2MQorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW4hICBVbmV4cGVjdGVkIG9sZF9kZXNjIGluIHN1cGVyX3NwYXJzZSBiZz9cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjEzOQorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW46IHJlc2l6ZSBpbm9kZSBjb3JydXB0IVxuIgorbXNnc3RyICJTZWhhcnVzbnlhIHRpZGFrIHBlcm5haCB0ZXJqYWRpOiByZXNpemUgaW5vZGUgY29ycnVwdCFcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExCittc2dpZCAiRVhUMkZTIExpYnJhcnkgdmVyc2lvbiAxLjQyLjEzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0Ml9maWxzeXMgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfc2NhbiBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHVuaXggaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19tYW5hZ2VyIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJsb2NrX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZ2VuZXJpY19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdGVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGRpcmVjdG9yeSBibG9jayBsaXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGljb3VudCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBQb3dlcnF1ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0MiBmaWxlIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIEV4dDIgSW1hZ2UgSGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGUgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBoYW5kbGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMwCisjLCBmdXp6eQorbXNnaWQgIkJhZCBtYWdpYyBudW1iZXIgaW4gc3VwZXItYmxvY2siCittc2dzdHIgIm1lbWJhY2Egam91cm5hbCBzdXBlcmJsb2NrXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMQorbXNnaWQgIkZpbGVzeXN0ZW0gcmV2aXNpb24gdG9vIGhpZ2giCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMyCittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSB0byBmaWxlc3lzdGVtIG9wZW5lZCByZWFkLW9ubHkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIiwgR3J1cCBkZXNrcmlwc2kgZGkgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzQKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIiwgR3J1cCBkZXNrcmlwc2kgZGkgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzUKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgYmxvY2sgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNgorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM3Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOAorIywgZnV6enkKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIm1lbnVsaXMgaW5vZGUgYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzkKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIm1lbnVsaXMgaW5vZGUgYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDAKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgYSBibG9jayBiaXRtYXAiCittc2dzdHIgIm1lbWJhY2EgaW5vZGUgZGFuIGJsb2sgYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDEKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgcmVhZCBhIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAibWVtYmFjYSBpbm9kZSBkYW4gYmxvayBiaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MgorIywgZnV6enkKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAia2V0aWthIG1lbnVsaXMgdGFiZWwgaW5vZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MworIywgZnV6enkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJNZW1lcmlrc2EgdGFiZWwgaW5vZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NAorbXNnaWQgIkNhbid0IHJlYWQgbmV4dCBpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDUKKyMsIGZ1enp5Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5leHBlY3RlZCBibG9jayBzaXplIgorbXNnc3RyICJTaXN0ZW0gYmVya2FzIGxlYmloIGJlc2FyIGRhcmkgdWt1cmFuIHBlcmFuZ2thdCB5YW5nIHRlcmxpaGF0LiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ2Cittc2dpZCAiRVhUMiBkaXJlY3RvcnkgY29ycnVwdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NworbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDgKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIGJsb2NrIHRvIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgd3JpdGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ5Cittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiB0aGUgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MAorIywgZnV6enkKK21zZ2lkICJJbm9kZSBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiLCBJbm9kZSBiaXRtYXAgZGkgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKKyMsIGZ1enp5Cittc2dpZCAiQmxvY2sgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgIiAgQmxvayBiaXRtYXAgZGkgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTIKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIiCittc2dzdHIgIk5vbW9yIGRhcmkgYmxvY2sgdGlkYWsgbGVnYWwhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MworIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiTm9tb3IgZGFyaSBibG9jayB0aWRhayBsZWdhbCFcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3IgaW4gZXh0MmZzX2V4cGFuZF9kaXIiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU1CisjLCBmdXp6eQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gYnVpbGQgcHJvcG9zZWQgZmlsZXN5c3RlbSIKK21zZ3N0ciAiVGlkYWsgY3VrdXAgcnVhbmcgdW50dWsgbWVuaW5na2F0a2FuIHVrdXJhbiBpbm9kZSBcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU2Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTcKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTkKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MAorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjEKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MgorbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGJsb2NrIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjMKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBpbm9kZSBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY0CisjLCBmdXp6eQorbXNnaWQgIklsbGVnYWwgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgImJsb2sgdGlkYWsgbGFuZ3N1bmcgYmVyZHVhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBkb3VibHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgImJsb2sgdGlkYWsgbGFuZ3N1bmcgYmVyZHVhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjYKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCB0cmlwbHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgImJsb2sgdGlkYWsgbGFuZ3N1bmcgYmVydGlnYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY3CisjLCBmdXp6eQorbXNnaWQgIkJsb2NrIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiICBCbG9rIGJpdG1hcCBkaSAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OAorIywgZnV6enkKK21zZ2lkICJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIiwgSW5vZGUgYml0bWFwIGRpICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY5Cittc2dpZCAiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcwCittc2dpZCAiQSBibG9jayBncm91cCBpcyBtaXNzaW5nIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MQorbXNnaWQgIlRoZSBleHQyIHN1cGVyYmxvY2sgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzIKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjczCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc0Cittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NQorbXNnaWQgIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzYKK21zZ2lkICJUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBub3QgaGFuZGxlIHRoaXMgY2FzZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzcKK21zZ2lkICJUaGUgaW5vZGUgaXMgZnJvbSBhIGJhZCBibG9jayBpbiB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc4CisjLCBmdXp6eQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocykiCittc2dzdHIgIiVzIG1lbWlsaWtpIGZlYXR1cmUgeWFuZyB0aWRhayBkaXN1cHBvcnQ6IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzkKKyMsIGZ1enp5Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgcmVhZC1vbmx5IGZlYXR1cmUocykiCittc2dzdHIgIiVzIG1lbWlsaWtpIGZlYXR1cmUgeWFuZyB0aWRhayBkaXN1cHBvcnQ6IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODAKK21zZ2lkICJJTyBDaGFubmVsIGZhaWxlZCB0byBzZWVrIG9uIHJlYWQgb3Igd3JpdGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgxCisjLCBmdXp6eQorbXNnaWQgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiQWVycm9yIG1lbmdhbG9rYXNpa2FuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgzCisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBibG9jayBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmdhbG9rYXNpa2FuIG1lbW9yaSB1bnR1ayB0aXBlIHNpc3RlbSBiZXJrYXNcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg0CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbm9kZSBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmdhbG9rYXNpa2FuIG1lbW9yaSB1bnR1ayB0aXBlIHNpc3RlbSBiZXJrYXNcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg1Cittc2dpZCAiRXh0MiBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg2Cittc2dpZCAiVG9vIG1hbnkgcmVmZXJlbmNlcyBpbiB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODcKK21zZ2lkICJGaWxlIG5vdCBmb3VuZCBieSBleHQyX2xvb2t1cCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODgKK21zZ2lkICJGaWxlIG9wZW4gcmVhZC1vbmx5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OQorIywgZnV6enkKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCittc2dzdHIgIkRpcmVrdG9yaSBibG9jayAldSAoIyVkKSBrb3NvbmcgZGFsYW0gaW5vZGUgJXVcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkwCittc2dpZCAiRXh0MiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkxCittc2dpZCAiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkyCittc2dpZCAiVXNlciBjYW5jZWwgcmVxdWVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MworbXNnaWQgIkV4dDIgZmlsZSB0b28gYmlnIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NAorIywgZnV6enkKK21zZ2lkICJTdXBwbGllZCBqb3VybmFsIGRldmljZSBub3QgYSBibG9jayBkZXZpY2UiCittc2dzdHIgIk1lbmdndW5ha2FuIHBlcmFuZ2thdCBqdXJuYWwgdWt1cmFuYmxvazogJWRcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk1CisjLCBmdXp6eQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQiCittc2dzdHIgIkp1cm5hbCBzdXBlcmJsb2sgdGlkYWsgZGl0ZW11a2FuIVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTYKK21zZ2lkICJKb3VybmFsIG11c3QgYmUgYXQgbGVhc3QgMTAyNCBibG9ja3MiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk3Cittc2dpZCAiVW5zdXBwb3J0ZWQgam91cm5hbCB2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OAorIywgZnV6enkKK21zZ2lkICJFcnJvciBsb2FkaW5nIGV4dGVybmFsIGpvdXJuYWwiCittc2dzdHIgImtldGlrYSBtZW5jb2JhIG1lbWJ1a2EganVybmFsIGV4dGVybmFsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTkKKyMsIGZ1enp5Cittc2dpZCAiSm91cm5hbCBub3QgZm91bmQiCittc2dzdHIgIkp1cm5hbCBzdXBlcmJsb2sgdGlkYWsgZGl0ZW11a2FuIVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAwCittc2dpZCAiRGlyZWN0b3J5IGhhc2ggdW5zdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMQorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBudW1iZXIiCittc2dzdHIgImFleHRlbmRlZCBhdHRyaWJ1dGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDIKK21zZ2lkICJDYW5ub3QgY3JlYXRlIGZpbGVzeXN0ZW0gd2l0aCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGlub2RlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAzCittc2dpZCAiRTJpbWFnZSBzbmFwc2hvdCBub3QgaW4gdXNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDQKKyMsIGZ1enp5Cittc2dpZCAiVG9vIG1hbnkgcmVzZXJ2ZWQgZ3JvdXAgZGVzY3JpcHRvciBibG9ja3MiCittc2dzdHIgIjxpbm9kZSBkZXNrcmlwc2kgZ3J1cD4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDUKK21zZ2lkICJSZXNpemUgaW5vZGUgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA2CisjLCBmdXp6eQorbXNnaWQgIlRyaWVkIHRvIHNldCBibG9jayBibWFwIHdpdGggbWlzc2luZyBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiIgorIkdhZ2FsIHVudHVrIG1lbmdhbG9rYXNpa2FuIGJpdG1hcCBibG9rIGtldGlrYSBtZW5pbmdrYXRrYW4gdWt1cmFuIGlub2RlXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDcKK21zZ2lkICJUREI6IFN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOAorbXNnaWQgIlREQjogQ29ycnVwdCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA5Cittc2dpZCAiVERCOiBJTyBFcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEwCittc2dpZCAiVERCOiBMb2NraW5nIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTEKK21zZ2lkICJUREI6IE91dCBvZiBtZW1vcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMgorbXNnaWQgIlREQjogUmVjb3JkIGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEzCittc2dpZCAiVERCOiBMb2NrIGV4aXN0cyBvbiBvdGhlciBrZXlzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTQKKyMsIGZ1enp5Cittc2dpZCAiVERCOiBJbnZhbGlkIHBhcmFtZXRlciIKK21zZ3N0ciAiUGFyYW1ldGVyIHN0cmlkZSB0aWRhayB2YWxpZDogJXNcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNQorbXNnaWQgIlREQjogUmVjb3JkIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTYKK21zZ2lkICJUREI6IFdyaXRlIG5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNworbXNnaWQgIkV4dDJmcyBkaXJlY3RvcnkgYmxvY2sgbGlzdCBpcyBlbXB0eSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE4Cittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgYSBibG9jayBtYXBwaW5nIHZpYSBhIHJlYWQtb25seSBibG9jayBpdGVyYXRvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBzYXZlZCBwYXRoIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBnZW5lcmljIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgYmxvY2sgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTYiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTciCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTgiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMAorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMxCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaW5kZXgiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMgorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzMKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIGV4dGVudCBtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNAorbXNnaWQgIklub2RlIGRvZXMgbm90IHVzZSBleHRlbnRzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzUKKyMsIGZ1enp5Cittc2dpZCAiTm8gJ25leHQnIGV4dGVudCIKK21zZ3N0ciAieGV4dGVudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNgorbXNnaWQgIk5vICdwcmV2aW91cycgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzcKK21zZ2lkICJObyAndXAnIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM5Cittc2dpZCAiTm8gY3VycmVudCBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDAKK21zZ2lkICJFeHQyZnMgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDIKK21zZ2lkICJTcGxpdHRpbmcgd291bGQgcmVzdWx0IGluIGVtcHR5IG5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MworIywgZnV6enkKK21zZ2lkICJFeHRlbnQgbm90IGZvdW5kIgorbXNnc3RyICIvQGwgdGlkYWsgZGl0ZW11a2FuLiAgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ2Cittc2dpZCAiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ4Cittc2dpZCAiRmlsZXN5c3RlbSB0b28gbGFyZ2UgdG8gdXNlIGxlZ2FjeSBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDkKK21zZ2lkICJNTVA6IGludmFsaWQgbWFnaWMgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTAKK21zZ2lkICJNTVA6IGRldmljZSBjdXJyZW50bHkgYWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTIKK21zZ2lkICJNTVA6IGJsb2NrIG51bWJlciBiZXlvbmQgZmlsZXN5c3RlbSByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTQKK21zZ2lkICJNTVA6IGZpbGVzeXN0ZW0gc3RpbGwgaW4gdXNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTUKK21zZ2lkICJNTVA6IG9wZW4gd2l0aCBPX0RJUkVDVCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NgorIywgZnV6enkKK21zZ2lkICJCbG9jayBncm91cCBkZXNjcmlwdG9yIHNpemUgaW5jb3JyZWN0IgorbXNnc3RyICI8aW5vZGUgZGVza3JpcHNpIGdydXA+IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU3Cittc2dpZCAiSW5vZGUgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggaW5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OAorIywgZnV6enkKK21zZ2lkICJJbm9kZSBiaXRtYXAgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYml0bWFwIgorbXNnc3RyICIsIElub2RlIGJpdG1hcCBkaSAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTkKK21zZ2lkICJFeHRlbnQgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZXh0ZW50IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjAKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgZG9lcyBub3QgaGF2ZSBzcGFjZSBmb3IgY2hlY2tzdW0iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MQorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MgorbXNnaWQgIkV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYzCisjLCBmdXp6eQorbXNnaWQgIlN1cGVyYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggc3VwZXJibG9jayIKK21zZ3N0ciAiQ2FkYW5nYW4gc3VwZXJibG9rIGRpc2ltcGFuIGRpIGJsb2s6ICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NAorbXNnaWQgIlVua25vd24gY2hlY2tzdW0gYWxnb3JpdGhtIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjUKK21zZ2lkICJNTVAgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggTU1QIGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjYKK21zZ2lkICJFeHQyIGZpbGUgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTEKK21zZ2lkICJQcm9maWxlIHZlcnNpb24gMC4wIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEyCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfbm9kZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMworIywgZnV6enkKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gbm90IGZvdW5kIgorbXNnc3RyICJrZXRpa2EgbWVtYnVhdCAvbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTQKKyMsIGZ1enp5Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgImtldGlrYSBtZW1idWF0IC9sb3N0K2ZvdW5kIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNQorbXNnaWQgIkF0dGVtcHQgdG8gYWRkIGEgcmVsYXRpb24gdG8gbm9kZSB3aGljaCBpcyBub3QgYSBzZWN0aW9uIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE2Cittc2dpZCAiQSBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIGhhcyBhIG5vbi16ZXJvIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE3Cittc2dpZCAiQmFkIGxpbmtlZCBsaXN0IGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOAorbXNnaWQgIkJhZCBncm91cCBsZXZlbCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTkKK21zZ2lkICJCYWQgcGFyZW50IHBvaW50ZXIgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGUgaXRlcmF0b3IiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjEKK21zZ2lkICJDYW4ndCBzZXQgdmFsdWUgb24gc2VjdGlvbiBub2RlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gcHJvZmlsZSBsaWJyYXJ5IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjUKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSBzZWN0aW9uIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNgorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHJlbGF0aW9uIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI3Cittc2dpZCAiRXh0cmEgY2xvc2luZyBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI4Cittc2dpZCAiTWlzc2luZyBvcGVuIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjkKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfc2VjdGlvbl90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMxCittc2dpZCAiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzIKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBwcm9maWxlX3NlY3Rpb24gb2JqZWN0IgorbXNnc3RyICJQaWxpaGFuIHNpc3RlbSBiZXJrYXMgdGlkYWsgdmFsaWQgZGlzZXQ6ICVzXG4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMzCittc2dpZCAiTm8gbW9yZSBzZWN0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNAorbXNnaWQgIkJhZCBuYW1lc2V0IHBhc3NlZCB0byBxdWVyeSByb3V0aW5lIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzYKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzcKKyMsIGZ1enp5Cittc2dpZCAiQ291bGRuJ3Qgb3BlbiBwcm9maWxlIGZpbGUiCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbnlhbGluIGZpbGU6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM4Cittc2dpZCAiU2VjdGlvbiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOQorbXNnaWQgIkludmFsaWQgYm9vbGVhbiB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzo0MAorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIGludGVnZXIgdmFsdWUiCittc2dzdHIgIlBhbmphbmcgc3RyaWRlIHRpZGFrIHZhbGlkIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzo0MQorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX2ZpbGVfZGF0YV90IgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICJDbGVhcmluZyBleHRlbnQgZmxhZyBub3Qgc3VwcG9ydGVkIG9uICVzIgorI34gbXNnc3RyICJNZW5naGFwdXMgdGFuZGEgZWtzdGVuc2kgeWFuZyB0aWRhayBkaWR1a3VuZyBkaSAlcyIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICVzIC0tLSAlc1xuIgorI34gbXNnc3RyICJUaWRhayBkYXBhdCBtZWxha3VrYW4gc3RhdGlzdGlrICVzIC0tLSAlc1xuIgorCisjfiBtc2dpZCAiIgorI34gIiVzOiBUaGUgY29tYmluYXRpb24gb2YgZmxleF9iZyBhbmRcbiIKKyN+ICJcdCFyZXNpemVfaW5vZGUgZmVhdHVyZXMgaXMgbm90IHN1cHBvcnRlZCBieSByZXNpemUyZnMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIlczogS29tYmluYXNpIGRhcmkgZmxleF9iZyBkYW5cbiIKKyN+ICJcdCFyZXNpemVfaW5vZGUgZmVhdHVyZXMgdGlkYWsgZGlsYXlhbmkgb2xlaCByZXNpemUyZnMuXG4iCisKKyN+IG1zZ2lkICI8VGhlIEFDTCBpbmRleCBpbm9kZT4iCisjfiBtc2dzdHIgIjxBQ0wgaW5kZXggaW5vZGU+IgorCisjfiBtc2dpZCAiPFRoZSBBQ0wgZGF0YSBpbm9kZT4iCisjfiBtc2dzdHIgIjxBQ0wgZGF0YSBpbm9kZT4iCisKKyN+IG1zZ2lkICJAZyAlZyBAYiBAQiB1bmluaXRpYWxpemVkIGJ1dCBAaSBAQiBpbiB1c2UuXG4iCisjfiBtc2dzdHIgIkBnICVnIEBiIEBCIHRpZGFrIHRlcmluaXRpYWxpc2FzaSB0ZXRhcGkgQGkgQEIgc2VkYW5nIGRpZ3VuYWthbi5cbiIKKworI34gbXNnaWQgIkBpICVpIHNob3VsZCBub3QgaGF2ZSBFT0ZCTE9DS1NfRkwgc2V0IChzaXplICVJcywgbGJsayAlcilcbiIKKyN+IG1zZ3N0ciAiQGkgJWkgc2VoYXJ1c255YSBFT0ZCTE9DS1NfRkwgdGlkYWsgYWt0aWYgKHVrdXJhbiAlSXMsIGxibGsgJXIpXG4iCisKKyN+IG1zZ2lkICJDb3VsZG4ndCBkZXRlcm1pbmUgam91cm5hbCBzaXplIgorI34gbXNnc3RyICJUaWRhayBkYXBhdCBtZW5lbnR1a2FuIHVrdXJhbiBqdXJuYWwiCisKKyN+IG1zZ2lkICJzaG9ydCB3cml0ZSAob25seSAlZCBieXRlcykgZm9yIHdyaXRpbmcgaW1hZ2UgaGVhZGVyIgorI34gbXNnc3RyICJtZW51bGlzIHBlbmRlayAoaGFueWEgJWQgYnl0ZXMpIHVudHVrIG1lbnVsaXMgaGVhZGVyIGltYWdlIgorCisjfiBtc2dpZCAiaW52YWxpZCBmcmFnbWVudCBzaXplIC0gJXMiCisjfiBtc2dzdHIgInVrdXJhbiBwb3Rvbmdhbi9mcmFnbWVuIHRpZGFrIHZhbGlkIC0gJXMiCisKKyN+IG1zZ2lkICJXYXJuaW5nOiBmcmFnbWVudHMgbm90IHN1cHBvcnRlZC4gIElnbm9yaW5nIC1mIG9wdGlvblxuIgorI34gbXNnc3RyICJQZXJpbmdhdGFuOiBmcmFnbWVudCB0aWRhayBkaWxheWFuaS4gTWVuZ2FiYWlrYW4gcGlsaWhhbiAtZlxuIgorCisjfiBtc2dpZCAiQ2FsbGluZyBCTEtESVNDQVJEIGZyb20gJWxsdSB0byAlbGx1ICIKKyN+IG1zZ3N0ciAiTWVtYW5nZ2lsIEJMS0RJU0NBUkQgZGFyaSAlbGx1IGtlICVsbHUgIgorCisjfiBtc2dpZCAic3VjY2VlZGVkLlxuIgorI34gbXNnc3RyICJiZXJoYXNpbC5cbiIKKworI34gbXNnaWQgIkpvdXJuYWwgTk9UIHJlbW92ZWRcbiIKKyN+IG1zZ3N0ciAiSnVybmFsIFRJREFLIGRpaGFwdXNcbiIKKworI34gbXNnaWQgIiNcdFx0ICV1IC0+ICV1ICglZClcbiIKKyN+IG1zZ3N0ciAiI1x0XHQgJXUgLT4gJXUgKCVkKVxuIgorCisjfiBtc2dpZCAiU2V0dGluZyBzaXN0ZW0gYmVya2FzIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorI34gbXNnc3RyICJNZW5zZXQgc2lzdGVtIGJlcmthcyBmZWF0dXJlICclcycgdGlkYWsgZGlsYXlhbmkuXG4iCisKKyN+IG1zZ2lkICJAUyBkb2Vzbid0IGhhdmUgaGFzX0BqIGZsYWcsIGJ1dCBoYXMgZXh0MyBAaiAlcy5cbiIKKyN+IG1zZ3N0ciAiQFMgdGlkYWsgbWVtaWxpa2kgQGogdGFuZGEsIHRldGFwaSBtZW1pbGlraSBleHQzIEBqICVzLlxuIgorCisjfiBtc2dpZCAiUmVjcmVhdGUgam91cm5hbCB0byBtYWtlIHRoZSBmaWxlc3lzdGVtIGV4dDMgYWdhaW4/XG4iCisjfiBtc2dzdHIgIk1lbWJ1YXQga2VtYmFsaSBqdXJuYWwgdW50dWsgbWVtYnVhdCBzaXN0ZW0gYmVya2FzIGV4dDMgbGFnaT9cbiIKKworI34gbXNnaWQgImJhZCBibG9jayBzaXplIC0gJXMiCisjfiBtc2dzdHIgInVrdXJhbiBibG9rIGJ1cnVrIC0gJXMiCisKKyN+IG1zZ2lkICJ3aGlsZSByZXRyeWluZyB0byB3cml0ZSBibG9jayBiaXRtYXBzIGZvciAlcyIKKyN+IG1zZ3N0ciAia2V0aWthIHNlZGFuZyBtZW5jb2JhIHVudHVrIG1lbnVsaXMgYmxvayBiaXRtYXAgdW50dWsgJXMiCisKKyN+IG1zZ2lkICIlcyBmYWlsZWQgZm9yICVzOiAlc1xuIgorI34gbXNnc3RyICIlcyBnYWdhbCB1bnR1ayAlczogJXNcbiIKKworI34gbXNnaWQgIm9wZW4iCisjfiBtc2dzdHIgImJ1a2EiCisKKyN+IG1zZ2lkICJIRElPX0dFVEdFTyBpb2N0bCIKKyN+IG1zZ3N0ciAiSERJT19HRVRHRU8gaW9jdGwiCisKKyN+IG1zZ2lkICJCTEtHRVRTSVpFIGlvY3RsIgorI34gbXNnc3RyICJCTEtHRVRTSVpFIGlvY3RsIgpkaWZmIC0tZ2l0IGEvcG8vaW5zZXJ0LWhlYWRlci5zaW4gYi9wby9pbnNlcnQtaGVhZGVyLnNpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjZkZTAxCi0tLSAvZGV2L251bGwKKysrIGIvcG8vaW5zZXJ0LWhlYWRlci5zaW4KQEAgLTAsMCArMSwyMyBAQAorIyBTZWQgc2NyaXB0IHRoYXQgaW5zZXJ0cyB0aGUgZmlsZSBjYWxsZWQgSEVBREVSIGJlZm9yZSB0aGUgaGVhZGVyIGVudHJ5LgorIworIyBBdCBlYWNoIG9jY3VycmVuY2Ugb2YgYSBsaW5lIHN0YXJ0aW5nIHdpdGggIm1zZ2lkICIsIHdlIGV4ZWN1dGUgdGhlIGZvbGxvd2luZworIyBjb21tYW5kcy4gQXQgdGhlIGZpcnN0IG9jY3VycmVuY2UsIGluc2VydCB0aGUgZmlsZS4gQXQgdGhlIGZvbGxvd2luZworIyBvY2N1cnJlbmNlcywgZG8gbm90aGluZy4gVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIGZpcnN0IGFuZCB0aGUgZm9sbG93aW5nCisjIG9jY3VycmVuY2VzIGlzIGFjaGlldmVkIGJ5IGxvb2tpbmcgYXQgdGhlIGhvbGQgc3BhY2UuCisvXm1zZ2lkIC97Cit4CisjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCitzL20vbS8KK3RhCisjIFllcyBpdCB3YXMgZW1wdHkuIEZpcnN0IG9jY3VycmVuY2UuIFJlYWQgdGhlIGZpbGUuCityIEhFQURFUgorIyBPdXRwdXQgdGhlIGZpbGUncyBjb250ZW50cyBieSByZWFkaW5nIHRoZSBuZXh0IGxpbmUuIEJ1dCBkb24ndCBsb3NlIHRoZQorIyBjdXJyZW50IGxpbmUgd2hpbGUgZG9pbmcgdGhpcy4KK2cKK04KK2JiCis6YQorIyBUaGUgaG9sZCBzcGFjZSB3YXMgbm9uZW1wdHkuIEZvbGxvd2luZyBvY2N1cnJlbmNlcy4gRG8gbm90aGluZy4KK3gKKzpiCit9CmRpZmYgLS1naXQgYS9wby9pdC5nbW8gYi9wby9pdC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFmNzdkZQotLS0gL2Rldi9udWxsCisrKyBiL3BvL2l0LmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9pdC5wbyBiL3BvL2l0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNzFhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9wby9pdC5wbwpAQCAtMCwwICsxLDcxODQgQEAKKyMgSXRhbGlhbiB0cmFuc2xhdGlvbiBmb3IgZTJmc3Byb2dzCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAxMyAyMDE0IFRoZW9kb3JlIFRzbyAobXNnaWRzKQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZTJmc3Byb2dzIHBhY2thZ2UuCisjIEFuZHJlYSBTcGFkYWNjaW5pIDxsdXBpbjg1QGVtYWlsLml0PiwgMjAwNAorIyBNYXJjbyBDb2xvbWJvIDxtLmNvbG9tYm9AZWQuYWMudWs+LCAyMDA0CisjIE1pbG8gQ2FzYWdyYW5kZSA8bWlsb0BtaWxvLm5hbWU+LCAyMDEzLgorIworIy4gVGhlIHN0cmluZ3MgaW4gZTJmc2NrJ3MgcHJvYmxlbS5jIGNhbiBiZSB2ZXJ5IGhhcmQgdG8gdHJhbnNsYXRlLAorIy4gc2luY2UgdGhlIHN0cmluZ3MgYXJlIGV4cGFuZGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gIEZpcnN0IG9mIGFsbCwKKyMuIHRoZXJlIGlzIGFuIEAtZXhwYW5zaW9uLCB3aGVyZSBzdHJpbmdzIGxpa2UgIkBpIiBhcmUgZXhwYW5kZWQgdG8KKyMuICJpbm9kZSIsIGFuZCBzbyBvbi4gIEluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0cmFuc2xhdG9ycywgdGhlCisjLiBlMmZzcHJvZ3MgcG8gdGVtcGxhdGUgZmlsZSBoYXMgYmVlbiBlbmhhbmNlZCB3aXRoIGNvbW1lbnRzIHRoYXQgc2hvdworIy4gdGhlIEAtZXhwYW5zaW9uLCBmb3IgdGhlIHN0cmluZ3MgaW4gdGhlIHByb2JsZW0uYyBmaWxlLgorIy4KKyMuIFRyYW5zbGF0b3JzIGFyZSBmcmVlIHRvIHVzZSB0aGUgQC1leHBhbnNpb24gZmFjaWxpdHkgaWYgdGhleSBzbworIy4gY2hvb3NlLCBieSBwcm92aWRpbmcgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGluIGUyZnNjay9tZXNzYWdlLmMuCisjLiBUaGVzZSB0cmFuc2xhdGlvbiBjYW4gY29tcGxldGVseSByZXBsYWNlIGFuIGV4cGFuc2lvbjsgZm9yIGV4YW1wbGUsCisjLiBpZiAiYmJsb2NrIiAod2hpY2ggaW5kaWNhdGVkIHRoYXQgIkBiIiB3b3VsZCBiZSBleHBhbmRlZCB0byAiYmxvY2siKQorIy4gaXMgdHJhbnNsYXRlZCBhcyAiZGRhdGVudmVybHVzdCIsIHRoZW4gIkBkIiB3aWxsIGJlIGV4cGFuZGVkIHRvCisjLiAiZGF0ZW52ZXJsdXN0Ii4gIEFsdGVybmF0aXZlbHksIHRyYW5zbGF0b3JzIGNhbiBzaW1wbHkgbm90IHVzZSB0aGUKKyMuIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGF0IGFsbC4KKyMuCisjLiBUaGUgc2Vjb25kIGV4cGFuc2lvbiB3aGljaCBpcyBkb25lIGZvciBlMmZzY2sncyBwcm9ibGVtLmMgbWVzc2FnZXMgaXMKKyMuIGEgZHluYW1pYyAlLWV4cGFuc2lvbiwgd2hpY2ggZXhwYW5kcyAlaSBhcyBhbiBpbm9kZSBudW1iZXIsIGFuZCBzbworIy4gb24uICBBIHRhYmxlIG9mIHRoZXNlIGV4cGFuc2lvbnMgY2FuIGJlIGZvdW5kIGJlbG93LiAgTm90ZSB0aGF0CisjLiAlLWV4cHJlc3Npb25zIHRoYXQgYmVnaW4gd2l0aCAiJUQiIGFuZCAiJUkiIGFyZSB0d28tY2hhcmFjdGVyCisjLiBleHBhbnNpb25zOyBzbyBmb3IgZXhhbXBsZSwgIiVJdSIgZXhwYW5kcyB0byB0aGUgaW5vZGUncyB1c2VyIGlkCisjLiBvd25lcnNoaXAgZmllbGQgKGlub2RlLT5pX3VpZCkuICBBbHNvIHRoZSAiJUIiIGV4cGFuc2lvbiBpcyBzcGVjaWFsOgorIy4gaXQgY2FuIGV4cGFuZCB0byBlaXRoZXIgdGhlIHN0cmluZyAiaW5kaXJlY3QgYmxvY2siIChwb3NzaWJseSBwcmVjZWRlZAorIy4gYnkgdGhlIHdvcmQgImRvdWJsZSIgb3IgInRyaXBsZSIpLCBvciB0aGUgc3RyaW5nICJibG9jayAjIiBpbW1lZGlhdGVseQorIy4gZm9sbG93ZWQgYnkgYW4gaW50ZWdlciBpbmRpY2F0aW5nIGEgYmxvY2sgc2VxdWVuY2UgbnVtYmVyLgorIy4gIAorIy4gCSViCTxibGs+CQkJYmxvY2sgbnVtYmVyCisjLiAJJUIJImluZGlyZWN0IGJsb2NrIiB8ICJibG9jayAjIjxibGtjb3VudD4Jc3RyaW5nIHwgc3RyaW5nK2ludGVnZXIKKyMuIAklYwk8YmxrMj4JCQlibG9jayBudW1iZXIKKyMuIAklRGkJPGRpcmVudD4gLT4gaW5vCQlpbm9kZSBudW1iZXIKKyMuIAklRG4JPGRpcmVudD4gLT4gbmFtZQlzdHJpbmcKKyMuIAklRHIJPGRpcmVudD4gLT4gcmVjX2xlbgorIy4gCSVEbAk8ZGlyZW50PiAtPiBuYW1lX2xlbgorIy4gCSVEdAk8ZGlyZW50PiAtPiBmaWxldHlwZQorIy4gCSVkCTxkaXI+IAkJCWlub2RlIG51bWJlcgorIy4gCSVnCTxncm91cD4JCQlpbnRlZ2VyCisjLiAJJWkJPGlubz4JCQlpbm9kZSBudW1iZXIKKyMuIAklSXMJPGlub2RlPiAtPiBpX3NpemUKKyMuIAklSVMJPGlub2RlPiAtPiBpX2V4dHJhX2lzaXplCisjLiAJJUliCTxpbm9kZT4gLT4gaV9ibG9ja3MKKyMuIAklSWwJPGlub2RlPiAtPiBpX2xpbmtzX2NvdW50CisjLiAJJUltCTxpbm9kZT4gLT4gaV9tb2RlCisjLiAJJUlNCTxpbm9kZT4gLT4gaV9tdGltZQorIy4gCSVJRgk8aW5vZGU+IC0+IGlfZmFkZHIKKyMuIAklSWYJPGlub2RlPiAtPiBpX2ZpbGVfYWNsCisjLiAJJUlkCTxpbm9kZT4gLT4gaV9kaXJfYWNsCisjLiAJJUl1CTxpbm9kZT4gLT4gaV91aWQKKyMuIAklSWcJPGlub2RlPiAtPiBpX2dpZAorIy4gCSVJdAk8c3RyPgkJCWZpbGUgdHlwZQorIy4gCSVqCTxpbm8yPgkJCWlub2RlIG51bWJlcgorIy4gCSVtCTxjb21fZXJyIGVycm9yIG1lc3NhZ2U+CisjLiAJJU4JPG51bT4KKyMuIAklcAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4KKyMuIAklUAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiA8ZGlyZW50Pi0+aW5vIHdpdGggPGlubzI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LiAgKElmIGRpcmVudCBpcyBOVUxMCisjLiAJCQkJdGhlbiByZXR1cm4gdGhlIHBhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vMj4pCisjLiAJJXEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxkaXI+CisjLiAJJVEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+IHdpdGggPGRpcj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuCisjLiAJJXMJPHN0cj4JCQltaXNjZWxsYW5lb3VzIHN0cmluZworIy4gCSVTCQliYWNrdXAgc3VwZXJibG9jaworIy4gCSVYCTxudW0+CWhleGFkZWNpbWFsIGZvcm1hdAorIy4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGUyZnNwcm9ncy0xLjQyLjEwXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IHR5dHNvQGFsdW0ubWl0LmVkdVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDIxOjI2LTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE0LTA1LTMxIDE2OjA5KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1pbG8gQ2FzYWdyYW5kZSA8bWlsb0BtaWxvLm5hbWU+XG4iCisiTGFuZ3VhZ2UtVGVhbTogSXRhbGlhbiA8dHBAbGlzdHMubGludXguaXQ+XG4iCisiTGFuZ3VhZ2U6IGl0XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4hPTEpO1xuIgorIlgtR2VuZXJhdG9yOiBQb2VkaXQgMS42LjVcbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjIzIG1pc2MvbWtlMmZzLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9jayAldSBvdXQgb2YgcmFuZ2U7IGlnbm9yZWQuXG4iCittc2dzdHIgIkJsb2NjbyBub24gdmFsaWRvICV1IGZ1b3JpIGRhbGwnaW50ZXJ2YWxsbzsgaWdub3JhdG8uXG4iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo0NgorbXNnaWQgIndoaWxlIHNhbml0eSBjaGVja2luZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAibmVsIGNvbnRyb2xsYXJlIGwnaW50ZWdyaXTDoCBkZWdsaSBpbm9kZSBkZWkgYmxvY2NoaSBkYW5uZWdnaWF0aSIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjU4Cittc2dpZCAid2hpbGUgcmVhZGluZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAibmVsIGxlZ2dlcmUgZ2xpIGlub2RlIGRlaSBibG9jY2hpIGRhbm5lZ2dpYXRpIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NzIgZTJmc2NrL3NjYW50ZXN0LmM6MTA3IGUyZnNjay91bml4LmM6MTM0NQorIzogZTJmc2NrL3VuaXguYzoxNDM0IG1pc2MvYmFkYmxvY2tzLmM6MTI0MiBtaXNjL2JhZGJsb2Nrcy5jOjEyNTAKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI2NCBtaXNjL2JhZGJsb2Nrcy5jOjEyNzYgbWlzYy9kdW1wZTJmcy5jOjYwNAorIzogbWlzYy9lMmltYWdlLmM6MTM5NiBtaXNjL2UyaW1hZ2UuYzoxNTgwIG1pc2MvZTJpbWFnZS5jOjE1OTkKKyM6IG1pc2MvbWtlMmZzLmM6MjI3IG1pc2MvdHVuZTJmcy5jOjE5NTUgbWlzYy90dW5lMmZzLmM6MjA0NCByZXNpemUvbWFpbi5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIKK21zZ3N0ciAibmVsbCdhcHJpcmUgJXMiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgcG9wZW4gJyVzJyIKK21zZ3N0ciAibmVsbCdlc2VndWlyZSBwb3BlbiBzdSBcIiVzXCIiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo5NCBtaXNjL21rZTJmcy5jOjIzNAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW4gbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gZmlsZSIKK21zZ3N0ciAibmVsIGxlZ2dlcmUgbCdlbGVuY28gZGkgYmxvY2NoaSBkYW5uZWdnaWF0aSBkYSBmaWxlIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTA1Cittc2dpZCAid2hpbGUgdXBkYXRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICJuZWxsJ2FnZ2lvcm5hcmUgbCdpbm9kZSBkaSB1biBibG9jY28gZGFubmVnZ2lhdG8iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogaWxsZWdhbCBibG9jayAldSBmb3VuZCBpbiBiYWQgYmxvY2sgaW5vZGUuICBDbGVhcmVkLlxuIgorbXNnc3RyICIiCisiQXR0ZW56aW9uZTogYmxvY2NvICV1IG5vbiB2YWxpZG8gdHJvdmF0byBuZWxsJ2lub2RlIGRpIHVuIGJsb2NjbyAiCisiZGFubmVnZ2lhdG8uIEF6emVyYXRvLlxuIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICJFcnJvcmUgbmVsIGxlZ2dlcmUgaWwgYmxvY2NvICVsdSAoJXMpIG1lbnRyZSAlcy4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiRXJyb3JlIG5lbCBsZWdnZXJlIGlsIGJsb2NjbyAlbHUgKCVzKS4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjEgZTJmc2NrL2VoYW5kbGVyLmM6MTEwCittc2dpZCAiSWdub3JlIGVycm9yIgorbXNnc3RyICJJZ25vcmEgbCdlcnJvcmUiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYyCittc2dpZCAiRm9yY2UgcmV3cml0ZSIKK21zZ3N0ciAiRm9yemEgbGEgcmlzY3JpdHR1cmEiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICJFcnJvcmUgbmVsbG8gc2NyaXZlcmUgaWwgYmxvY2NvICVsdSAoJXMpIG1lbnRyZSAlcy4iCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICJFcnJvcmUgbmVsbG8gc2NyaXZlcmUgaWwgYmxvY2NvICVsdSAoJXMpLiAgIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo1NworbXNnaWQgImVtcHR5IGRpcmJsb2NrcyIKK21zZ3N0ciAiYmxvY2NoaSBkaXJlY3RvcnkgdnVvdGkiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjYyCittc2dpZCAiZW1wdHkgZGlyIG1hcCIKK21zZ3N0ciAibWFwcGEgZGlyZWN0b3J5IHZ1b3RhIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFbXB0eSBkaXJlY3RvcnkgYmxvY2sgJXUgKCMlZCkgaW4gaW5vZGUgJXVcbiIKK21zZ3N0ciAiQmxvY2NvIGRpcmVjdG9yeSAldSAoIyVkKSB2dW90byBuZWxsJ2lub2RlICV1XG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgZmlsZW5hbWUgbmJsb2NrcyBibG9ja3NpemVcbiIKK21zZ3N0ciAiJXM6ICVzIG5vbWVmaWxlIG5ibG9jY2hpIGRpbV9ibG9jY29cbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIG9mIGJsb2NrcyFcbiIKK21zZ3N0ciAiTnVtZXJvIGRpIGJsb2NjaGkgbm9uIHZhbGlkby5cbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciAoc2l6ZT0lZClcbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYWxsb2NhcmUgaWwgYnVmZmVyIGJsb2NjbyAoZGltZW5zaW9uZT0lZClcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBkaXNrXG4iCittc2dzdHIgIlVzbzogJXMgZGlzY29cbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJMS0ZMU0JVRiBpb2N0bCBub3Qgc3VwcG9ydGVkISAgQ2FuJ3QgZmx1c2ggYnVmZmVycy5cbiIKK21zZ3N0ciAiSW9jdGwgQkxLRkxTQlVGIG5vbiBzdXBwb3J0YXRhOiBpbXBvc3NpYmlsZSBzdnVvdGFyZSBpIGJ1ZmZlci5cbiIKKworIzogZTJmc2NrL2lzY2FuLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIGRldmljZVxuIgorbXNnc3RyICJVc286ICVzIFstRl0gWy1JIGJsb2NjaGlfYnVmZmVyX2lub2RlXSBkZXZpY2VcbiIKKworIzogZTJmc2NrL2lzY2FuLmM6ODEgZTJmc2NrL3VuaXguYzo5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZmx1c2hpbmciCittc2dzdHIgIm5lbGwnYXByaXJlICVzIHBlciBsbyBzdnVvdGFtZW50byIKKworIzogZTJmc2NrL2lzY2FuLmM6ODYgZTJmc2NrL3VuaXguYzo5NzggcmVzaXplL21haW4uYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGZsdXNoICVzIgorbXNnc3RyICJuZWwgdGVudGFyZSBsbyBzdnVvdGFtZW50byBkaSAlcyIKKworIzogZTJmc2NrL2lzY2FuLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICclcyciCittc2dzdHIgIm5lbCB0ZW50YXJlIGRpIGFwcmlyZSBcIiVzXCIiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTI5MAorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAibmVsbCdhdnZpYXJlIGwnYW5hbGlzaSBkZWdsaSBpbm9kZSIKKworIzogZTJmc2NrL2lzY2FuLmM6MTI3IG1pc2MvZTJpbWFnZS5jOjEzMDkKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUiCittc2dzdHIgIm5lbCByZWN1cGVyYXJlIGwnaW5vZGUgc3VjY2Vzc2l2byIKKworIzogZTJmc2NrL2lzY2FuLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBzY2FubmVkLlxuIgorbXNnc3RyICIldSBpbm9kZSBhbmFsaXp6YXRpLlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjUyNAorbXNnaWQgInJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgImxldHR1cmEgZGVsIHN1cGVyYmxvY2NvIGRlbCBqb3VybmFsXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBubyB2YWxpZCBqb3VybmFsIHN1cGVyYmxvY2sgZm91bmRcbiIKK21zZ3N0ciAiJXM6IG5vbiDDqCBzdGF0byB0cm92YXRvIHVuIHN1cGVyYmxvY2NvIHZhbGlkbyBkZWwgam91cm5hbFxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogam91cm5hbCB0b28gc2hvcnRcbiIKK21zZ3N0ciAiJXM6IGpvdXJuYWwgdHJvcHBvIGNvcnRvXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiByZWNvdmVyaW5nIGpvdXJuYWxcbiIKK21zZ3N0ciAiJXM6IHJpcHJpc3Rpbm8gZGVsIGpvdXJuYWxcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdvbid0IGRvIGpvdXJuYWwgcmVjb3Zlcnkgd2hpbGUgcmVhZC1vbmx5XG4iCittc2dzdHIgIiVzOiBpbXBvc3NpYmlsZSByaXByaXRpbmFyZSBpbCBqb3VybmFsIGluIG1vZGFsaXTDoCBzb2xhIGxldHR1cmFcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlLW9wZW4gJXMiCittc2dzdHIgIm5lbCB0ZW50YXJlIGRpIHJpYXByaXJlICVzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImFhdHRyaWJ1dG8gZXN0ZXNvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNAorbXNnaWQgIkFlcnJvciBhbGxvY2F0aW5nIgorbXNnc3RyICJBZXJyb3JlIG5lbGwnYWxsb2NhcmUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJiYmxvY2NvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNgorbXNnaWQgIkJiaXRtYXAiCittc2dzdHIgIkJiaXRtYXAiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE3Cittc2dpZCAiY2NvbXByZXNzIgorbXNnc3RyICJjY29tcHJpbWkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE4Cittc2dpZCAiQ2NvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgQGIiCittc2dzdHIgIkN2YSBpbiBjb25mbGl0dG8gY29uIGFsdHJpIGJsb2NjaGkgbmVsIGZpbGUgc3lzdGVtIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOQorbXNnaWQgImRkaXJlY3RvcnkiCittc2dzdHIgImRkaXJlY3RvcnkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIwCittc2dpZCAiRGRlbGV0ZWQiCittc2dzdHIgIkRlbGltaW5hdG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIxCittc2dpZCAiZWVudHJ5IgorbXNnc3RyICJlZWxlbWVudG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIyCittc2dpZCAiRUBlICclRG4nIGluICVwICglaSkiCittc2dzdHIgIkVAZSBcIiVEblwiIGluICVwICglaSkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIzCittc2dpZCAiZmZpbGVzeXN0ZW0iCittc2dzdHIgImZmaWxlIHN5c3RlbSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjQKK21zZ2lkICJGZm9yIEBpICVpICglUSkgaXMiCittc2dzdHIgIkZwZXIgbCdAaSAlaSAoJVEpIMOoIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNQorbXNnaWQgImdncm91cCIKK21zZ3N0ciAiZ2dydXBwbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjYKK21zZ2lkICJoSFRSRUUgQGQgQGkiCittc2dzdHIgImhAaSBkZWxsYSBAZCBIVFJFRSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjcKK21zZ2lkICJpaW5vZGUiCittc2dzdHIgImlpbm9kZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjgKK21zZ2lkICJJaWxsZWdhbCIKK21zZ3N0ciAiSWlsbGVnYWxlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOQorbXNnaWQgImpqb3VybmFsIgorbXNnc3RyICJqam91cm5hbCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAibGxvc3QrZm91bmQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMxCittc2dpZCAiTGlzIGEgbGluayIKK21zZ3N0ciAiTMOoIHVuIGNvbGxlZ2FtZW50byIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzIKKyMsIGZ1enp5Cittc2dpZCAibW11bHRpcGx5LWNsYWltZWQiCittc2dzdHIgIm1hcHBhIGRlZ2xpIGlub2RlIHJpY2hpZXN0YSBwacO5IHZvbHRlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMworbXNnaWQgIm5pbnZhbGlkIgorbXNnc3RyICJubm9uIHZhbGlkbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzQKK21zZ2lkICJvb3JwaGFuZWQiCittc2dzdHIgIm9vcmZhbm8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM1Cittc2dpZCAicHByb2JsZW0gaW4iCittc2dzdHIgInBwcm9ibGVtYSBpbiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgInFxdW90YSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAickBpIHJvb3QiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM4Cittc2dpZCAic3Nob3VsZCBiZSIKK21zZ3N0ciAic2RvdnJlYmJlIGVzc2VyZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzkKK21zZ2lkICJTc3VwZXJAYiIKK21zZ3N0ciAiU3N1cGVyLUBiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MAorbXNnaWQgInV1bmF0dGFjaGVkIgorbXNnc3RyICJ1bm9uIGNvbGxlZ2F0byIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDEKK21zZ2lkICJ2ZGV2aWNlIgorbXNnc3RyICJ2ZGV2aWNlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MgorbXNnaWQgInhleHRlbnQiCittc2dzdHIgInhleHRlbnQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQzCittc2dpZCAienplcm8tbGVuZ3RoIgorbXNnc3RyICJ6bHVuZ2hlenphLXplcm8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU0Cittc2dpZCAiPFRoZSBOVUxMIGlub2RlPiIKK21zZ3N0ciAiPElub2RlIE5VTEw+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NQorbXNnaWQgIjxUaGUgYmFkIGJsb2NrcyBpbm9kZT4iCittc2dzdHIgIjxJbm9kZSBkZWkgYmxvY2NoaSBkYW5uZWdnaWF0aT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU3Cittc2dpZCAiPFRoZSB1c2VyIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPElub2RlIGRlbGxhIHF1b3RhIHV0ZW50ZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU4Cittc2dpZCAiPFRoZSBncm91cCBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxJbm9kZSBkZWxsYSBxdW90YSBkZWwgZ3J1cHBvPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTkKK21zZ2lkICI8VGhlIGJvb3QgbG9hZGVyIGlub2RlPiIKK21zZ3N0ciAiPElub2RlIGRlbCBib290IGxvYWRlcj4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICI8SW5vZGUgZGVsbGEgZGlyZWN0b3J5IHVuZGVsZXRlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjEKK21zZ2lkICI8VGhlIGdyb3VwIGRlc2NyaXB0b3IgaW5vZGU+IgorbXNnc3RyICI8SW5vZGUgZGVsIGRlc2NyaXR0b3JlIGRpIGdydXBwbz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYyCittc2dpZCAiPFRoZSBqb3VybmFsIGlub2RlPiIKK21zZ3N0ciAiPElub2RlIGRlbCBqb3VybmFsPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjMKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgOT4iCittc2dzdHIgIjxJbm9kZSByaXNlcnZhdG8gOT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTY0Cittc2dpZCAiPFJlc2VydmVkIGlub2RlIDEwPiIKK21zZ3N0ciAiPElub2RlIHJpc2VydmF0byAxMD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM0Cittc2dpZCAicmVndWxhciBmaWxlIgorbXNnc3RyICJmaWxlIHJlZ29sYXJlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNgorbXNnaWQgImRpcmVjdG9yeSIKK21zZ3N0ciAiZGRpcmVjdG9yeSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzgKK21zZ2lkICJjaGFyYWN0ZXIgZGV2aWNlIgorbXNnc3RyICJkZXZpY2UgYSBjYXJhdHRlcmkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQwCittc2dpZCAiYmxvY2sgZGV2aWNlIgorbXNnc3RyICJkZXZpY2UgYSBibG9jY2hpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MgorIywgZnV6enkKK21zZ2lkICJuYW1lZCBwaXBlIgorbXNnc3RyICJwaXBlIGNvbiBub21lIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NAorbXNnaWQgInN5bWJvbGljIGxpbmsiCittc2dzdHIgImNvbGxlZ2FtZW50byBzaW1ib2xpY28iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ2IG1pc2MvdXVpZGQuYzoxNjIKK21zZ2lkICJzb2NrZXQiCittc2dzdHIgInNvY2tldCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWxlIHR5cGUgd2l0aCBtb2RlIDAlbyIKK21zZ3N0ciAidGlwbyBkaSBmaWxlIHNjb25vc2NpdXRvIGNvbiBtb2RhbGl0w6AgMCVvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyMworbXNnaWQgImluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJibG9jY28gaW5kaXJldHRvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyNQorbXNnaWQgImRvdWJsZSBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiYmxvY2NvIGRvcHBpbyBpbmRpcmV0dG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI3Cittc2dpZCAidHJpcGxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJibG9jY28gdHJpcGxvIGluZGlyZXR0byIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjkKK21zZ2lkICJ0cmFuc2xhdG9yIGJsb2NrIgorbXNnc3RyICJibG9jY28gdHJhZHV0dG9yZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MzEKK21zZ2lkICJibG9jayAjIgorbXNnc3RyICJibG9jY28gbsKwICIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjIyMgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBwYSBkZWdsaSBpbm9kZSByaWNoaWVzdGEgcGnDuSB2b2x0ZSIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjYyNSBlMmZzY2svcGFzczFiLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjYW4ndCBmaW5kIGR1cF9ibGsgZm9yICVsbHVcbiIKK21zZ3N0ciAiZXJyb3JlIGludGVybm86IGltcG9zc2liaWxlIHRyb3ZhcmUgZHVwX2JsayBwZXIgJWxsdVxuIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODUyCittc2dpZCAicmV0dXJuZWQgZnJvbSBjbG9uZV9maWxlX2Jsb2NrIgorbXNnc3RyICJyaXRvcm5hdG8gZGEgY2xvbmVfZmlsZV9ibG9jayIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgbG9va3VwIEVBIGJsb2NrIHJlY29yZCBmb3IgJWxsdSIKK21zZ3N0ciAiRXJyb3JlIGludGVybm86IGltcG9zc2liaWxlIHRyb3ZhcmUgaWwgYmxvY2NvIEVBIHBlciAlbGx1IgorCisjOiBlMmZzY2svcGFzczFiLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAiRXJyb3JlIGludGVybm86IGltcG9zc2liaWxlIHRyb3ZhcmUgbCdpbm9kZSBFQSBwZXIgJXUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjQ3NSBlMmZzY2svcGFzczIuYzo3ODIKK21zZ2lkICJyZWFkaW5nIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAibGV0dHVyYSBibG9jY28gZGlyZWN0b3J5IgorCisjOiBlMmZzY2svcGFzczEuYzo2MzQKK21zZ2lkICJpbi11c2UgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBwYSBkZWdsaSBpbm9kZSBpbiB1c28iCisKKyM6IGUyZnNjay9wYXNzMS5jOjY0NQorbXNnaWQgImRpcmVjdG9yeSBpbm9kZSBtYXAiCittc2dzdHIgIm1hcHBhIGRlZ2xpIGlub2RlIGRlbGxlIGRpcmVjdG9yeSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjU1Cittc2dpZCAicmVndWxhciBmaWxlIGlub2RlIG1hcCIKK21zZ3N0ciAibWFwcGEgZGVnbGkgaW5vZGUgZGVpIGZpbGUgcmVnb2xhcmkiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY2NCBtaXNjL2UyaW1hZ2UuYzoxMjY1Cittc2dpZCAiaW4tdXNlIGJsb2NrIG1hcCIKK21zZ3N0ciAibWFwcGEgZGVpIGJsb2NjaGkgaW4gdXNvIgorCisjOiBlMmZzY2svcGFzczEuYzo3MzAKK21zZ2lkICJvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgImluaXppbyBhbmFsaXNpIGlub2RlIgorCisjOiBlMmZzY2svcGFzczEuYzo3NjQKK21zZ2lkICJnZXR0aW5nIG5leHQgaW5vZGUgZnJvbSBzY2FuIgorbXNnc3RyICJyZWN1cGVybyBpbm9kZSBzdWNjZXNzaXZvIGRhbGwnYW5hbGlzaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI3OQorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAiUGFzc28gMSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGluZGlyZWN0IGJsb2NrcyBvZiBpbm9kZSAldSIKK21zZ3N0ciAibGV0dHVyYSBkZWkgYmxvY2NoaSBpbmRpcmV0dGkgZGVsbCdpbm9kZSAldSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM4NgorbXNnaWQgImJhZCBpbm9kZSBtYXAiCittc2dzdHIgIm1hcHBhIGRlZ2xpIGlub2RlIG5vbiB2YWxpZGEiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MDkKK21zZ2lkICJpbm9kZSBpbiBiYWQgYmxvY2sgbWFwIgorbXNnc3RyICJpbm9kZSBuZWxsYSBtYXBwYSBkZWkgYmxvY2NoaSBkYW5uZWdnaWF0aSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQyOQorbXNnaWQgImltYWdpYyBpbm9kZSBtYXAiCittc2dzdHIgIm1hcHBhIGRlZ2xpIGlub2RlIGltYWdpYyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQ1NgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgYmxvY2sgbWFwIgorbXNnc3RyICJtYXBwYSBkZWkgYmxvY2NoaSByaWNoaWVzdGEgcGnDuSB2b2x0ZSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTU2NworbXNnaWQgImV4dCBhdHRyIGJsb2NrIG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoyNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiU2bHUoJWMpOiBleHBlY3RpbmcgJTZsdSBnb3QgcGh5cyAlNmx1IChibGtjbnQgJWxsZClcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoyODk4Cittc2dpZCAiYmxvY2sgYml0bWFwIgorbXNnc3RyICJiaXRtYXAgZGVsIGJsb2NjbyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjkwNAorbXNnaWQgImlub2RlIGJpdG1hcCIKK21zZ3N0ciAiYml0bWFwIGRlbGwnaW5vZGUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI5MTAKK21zZ2lkICJpbm9kZSB0YWJsZSIKK21zZ3N0ciAidGFiZWxsYSBkZWxsJ2lub2RlIgorCisjOiBlMmZzY2svcGFzczIuYzoyODMKK21zZ2lkICJQYXNzIDIiCittc2dzdHIgIlBhc3NvIDIiCisKKyM6IGUyZnNjay9wYXNzMi5jOjgwNgorbXNnaWQgIkNhbiBub3QgY29udGludWUuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjb250aW51YXJlLiIKKworIzogZTJmc2NrL3Bhc3MzLmM6NzcKK21zZ2lkICJpbm9kZSBkb25lIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczMuYzo4NgorbXNnaWQgIlBlYWsgbWVtb3J5IgorbXNnc3RyICJNZW1vcmlhIGRpIHBpY2NvIgorCisjOiBlMmZzY2svcGFzczMuYzoxNDgKK21zZ2lkICJQYXNzIDMiCittc2dzdHIgIlBhc3NvIDMiCisKKyM6IGUyZnNjay9wYXNzMy5jOjM0MAorIywgZnV6enkKK21zZ2lkICJpbm9kZSBsb29wIGRldGVjdGlvbiBiaXRtYXAiCittc2dzdHIgIm1hcHBhIGRlaSBiaXQgZGVsIGNpY2xvIGRpIHJpbGV2YW1lbnRvIGlub2RlIgorCisjOiBlMmZzY2svcGFzczQuYzoxOTYKK21zZ2lkICJQYXNzIDQiCittc2dzdHIgIlBhc3NvIDQiCisKKyM6IGUyZnNjay9wYXNzNS5jOjc0Cittc2dpZCAiUGFzcyA1IgorbXNnc3RyICJQYXNzbyA1IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxCittc2dpZCAiKG5vIHByb21wdCkiCittc2dzdHIgIihuZXNzdW4gcHJvbXB0KSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MgorbXNnaWQgIkZpeCIKK21zZ3N0ciAiQ29ycmVnZ2kiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMKK21zZ2lkICJDbGVhciIKK21zZ3N0ciAiQXp6ZXJhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0Cittc2dpZCAiUmVsb2NhdGUiCittc2dzdHIgIlJpY29sbG9jYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NQorbXNnaWQgIkFsbG9jYXRlIgorbXNnc3RyICJBbGxvY2EiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYKK21zZ2lkICJFeHBhbmQiCittc2dzdHIgIkVzcGFuZGkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTcKK21zZ2lkICJDb25uZWN0IHRvIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJDb2xsZWdhIGEgL2xvc3QrZm91bmQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTgKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyZWEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkKK21zZ2lkICJTYWx2YWdlIgorbXNnc3RyICJSZWN1cGVyYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MAorbXNnaWQgIlRydW5jYXRlIgorbXNnc3RyICJUcm9uY2EiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEKK21zZ2lkICJDbGVhciBpbm9kZSIKK21zZ3N0ciAiQXp6ZXJhIGlub2RlIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyCittc2dpZCAiQWJvcnQiCittc2dzdHIgIkFubnVsbGEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMKK21zZ2lkICJTcGxpdCIKK21zZ3N0ciAiRGl2aWRpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgIkNvbnRpbnVhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1CisjLCBmdXp6eQorbXNnaWQgIkNsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIgorbXNnc3RyICJtYXBwYSBkZWkgYmxvY2NoaSByaWNoaWVzdGEgcGnDuSB2b2x0ZSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NgorbXNnaWQgIkRlbGV0ZSBmaWxlIgorbXNnc3RyICJFbGltaW5hIGZpbGUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiU29wcHJpbWkgbWVzc2FnZ2kiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjgKK21zZ2lkICJVbmxpbmsiCittc2dzdHIgIlNjb2xsZWdhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5Cittc2dpZCAiQ2xlYXIgSFRyZWUgaW5kZXgiCittc2dzdHIgIkF6emVyYSBsJ2luZGljZSBIVHJlZSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MAorbXNnaWQgIlJlY3JlYXRlIgorbXNnc3RyICJSaWNyZWEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzkKK21zZ2lkICIoTk9ORSkiCittc2dzdHIgIihORVNTVU5PKSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MAorbXNnaWQgIkZJWEVEIgorbXNnc3RyICJDT1JSRVRUTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MQorbXNnaWQgIkNMRUFSRUQiCittc2dzdHIgIkFaWkVSQVRPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyCittc2dpZCAiUkVMT0NBVEVEIgorbXNnc3RyICJSSUNPTExPQ0FUTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MworbXNnaWQgIkFMTE9DQVRFRCIKK21zZ3N0ciAiQUxMT0NBVE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQKK21zZ2lkICJFWFBBTkRFRCIKK21zZ3N0ciAiRVNQQU5TTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NQorbXNnaWQgIlJFQ09OTkVDVEVEIgorbXNnc3RyICJSSUNPTExFR0FUTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NgorbXNnaWQgIkNSRUFURUQiCittc2dzdHIgIkNSRUFUTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NworbXNnaWQgIlNBTFZBR0VEIgorbXNnc3RyICJSRUNVUEVSQVRPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4Cittc2dpZCAiVFJVTkNBVEVEIgorbXNnc3RyICJUUk9OQ0FUTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OQorbXNnaWQgIklOT0RFIENMRUFSRUQiCittc2dzdHIgIklOT0RFIEFaWkVSQVRPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwCittc2dpZCAiQUJPUlRFRCIKK21zZ3N0ciAiSU5URVJST1RUTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MQorbXNnaWQgIlNQTElUIgorbXNnc3RyICJESVZJU08iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTIKK21zZ2lkICJDT05USU5VSU5HIgorbXNnc3RyICJDT05USU5VQSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MworIywgZnV6enkKK21zZ2lkICJNVUxUSVBMWS1DTEFJTUVEIEJMT0NLUyBDTE9ORUQiCittc2dzdHIgIkNMT05BVEkgQkxPQ0NISSBEVVBMSUNBVEkvTk9OIFZBTElESSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NAorbXNnaWQgIkZJTEUgREVMRVRFRCIKK21zZ3N0ciAiRklMRSBFTElNSU5BVE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUKK21zZ2lkICJTVVBQUkVTU0VEIgorbXNnc3RyICJTT1BQUkVTU08iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTYKK21zZ2lkICJVTkxJTktFRCIKK21zZ3N0ciAiU0NPTExFR0FUTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NworbXNnaWQgIkhUUkVFIElOREVYIENMRUFSRUQiCittc2dzdHIgIklORElDRSBIVFJFRSBBWlpFUkFUTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OAorbXNnaWQgIldJTEwgUkVDUkVBVEUiCittc2dzdHIgIlJJQ1JFRVLDgCIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3Cittc2dpZCAiQGIgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiQEIgZGVsIEBiIHBlciBpbCBAZyAlZyBub24gw6ggaW4gQGcuIChAYiAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExCittc2dpZCAiQGkgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiQEIgZGVsbCdAaSBwZXIgaWwgQGcgJWcgbm9uIMOoIGluIEBnLiAoQGIgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIHRhYmxlIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2Cittc2dpZCAiIgorIkBpIHRhYmxlIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCisiV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbiIKK21zZ3N0ciAiIgorIkxhIHRhdm9sYSBkZWdsaSBAaSBwZXIgaWwgQGcgJWcgbm9uIMOoIGluIEBnLiAoQGIgJWIpXG4iCisiQVRURU5aSU9ORTogU09OTyBQT1NTSUJJTEkgTk9URVZPTEkgUEVSRElURSBESSBEQVRJLlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIHN1cGVyYmxvY2sgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSB2YWxpZCBleHQyL2V4dDMvZXh0NFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtLiAgSWYgdGhlIGRldmljZSBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDIvZXh0My9leHQ0XG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBzdXBlcmJsb2NrXG4KKyMuIEAtZXhwYW5kZWQ6IGlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIHN1cGVyYmxvY2s6XG4KKyMuIEAtZXhwYW5kZWQ6ICAgICBlMmZzY2sgLWIgODE5MyA8ZGV2aWNlPlxuCisjLiBALWV4cGFuZGVkOiAgb3JcbgorIy4gQC1leHBhbmRlZDogICAgIGUyZnNjayAtYiAzMjc2OCA8ZGV2aWNlPlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjIKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIlRoZSBAUyBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIHZhbGlkIGV4dDIvZXh0My9leHQ0XG4iCisiQGYuICBJZiB0aGUgQHYgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyL2V4dDMvZXh0NFxuIgorIkBmIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgQFNcbiIKKyJpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBAUzpcbiIKKyIgICAgZTJmc2NrIC1iIDgxOTMgPEB2PlxuIgorIiBvclxuIgorIiAgICBlMmZzY2sgLWIgMzI3NjggPEB2PlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiSWwgQFMgw6ggaWxsZWdnaWJpbGUsIG8gbm9uIGRlc2NyaXZlIHVuIGNvcnJldHRvIEBmIGV4dDJcbiIKKyJTZSBpbCBAdiDDqCB2YWxpZG8gZSBjb250aWVuZSByZWFsbWVudGUgdW4gQGYgZXh0MlxuIgorIihlIG5vbiBzd2FwLCB1ZnMgbyBhbHRybyksIGFsbG9yYSBpbCBAUyDDqCBjb3Jyb3R0bywgZSBzaSBwb3RyZWJiZVxuIgorInByb3ZhcmUgYWQgZXNlZ3VpcmUgZTJmc2NrIGNvbiB1biBAUyBhbHRlcm5hdGl2bzpcbiIKKyIgICAgZTJmc2NrIC1iICVTIDxAdj5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIGZpbGVzeXN0ZW0gc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBzdXBlcmJsb2NrKSBpcyAlYiBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGRldmljZSBpcyAlYyBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogRWl0aGVyIHRoZSBzdXBlcmJsb2NrIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiTGEgZGltZW5zaW9uZSBkZWwgQGYgKHNlY29uZG8gaWwgQFMpIMOoICViIEBiKGkpXG4iCisiTGEgZGltZW5zaW9uZSBmaXNpY2EgZGVsIEB2IMOoICVjIEBiKGkpXG4iCisiw4ggcHJvYmFiaWxlIGNoZSBpbCBAUyBvIGxhIHRhdm9sYSBkZWxsZSBwYXJ0aXppb25pIHNpYW5vIGNvcnJvdHRpIVxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2NrX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbgorIy4gQC1leHBhbmRlZDogVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuCisjLiBALWV4cGFuZGVkOiBmcm9tIHRoZSBibG9jayBzaXplLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MAorbXNnaWQgIiIKKyJAUyBAYl9zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4iCisiVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuIgorImZyb20gdGhlIEBiIHNpemUuXG4iCittc2dzdHIgIiIKKyJEaW1lbnNpb25lIGRlbCBAYiBkZWwgQFMgPSAlYiwgZGltZW5zaW9uZSBmcmFtbWVudG8gPSAlYy5cbiIKKyJRdWVzdGEgdmVyc2lvbmUgZGkgZTJmc2NrIG5vbiBzdXBwb3J0YSBkaW1lbnNpb25pIGRpIGZyYW1tZW50b1xuIgorImRpZmZlcmVudGkgZGFsbGEgZGltZW5zaW9uZSBkZWwgQGIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3Cittc2dpZCAiQFMgQGJzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIkBTIEBiKGkpX3Blcl9ncnVwcG8gPSAlYiwgYXZyZWJiZSBkb3Z1dG8gZXNzZXJlICVjXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgZmlyc3RfZGF0YV9ibG9jayA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUyCisjLCBmdXp6eQorbXNnaWQgIkBTIGZpcnN0X2RhdGFfQGIgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICJQcmltbyBAYiBjb250ZW5lbnRlIGRhdGkgZGVsIEBTID0gJWIsIGF2cmViYmUgZG92dXRvIGVzc2VyZSAlY1xuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcKK21zZ2lkICIiCisiQGYgZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJpbCBAZiBub24gYXZldmEgdW4gVVVJRDsgZ2VuZXJhemlvbmUgZGkgdW4gVVVJRC5cbiIKKyJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydFxuIgorIm9mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnlcbiIKKyJydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgJVMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtXG4iCisibWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZFxuIgorInRoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLlxuIgorIlxuIgorbXNnc3RyICIiCisiTm90YTogc2UgbW9sdGUgbWFwcGUgZGVpIGJpdCBkZWdsaSBpbm9kZSBvIGRlaSBibG9jY2hpXG4iCisicmljaGllZG9ubyBpbCByaWxvY2FtZW50bywgbyB1bmEgcGFydGUgZGVsbGEgdGF2b2xhIGRlZ2xpXG4iCisiaW5vZGUgZGV2ZSBlc3NlcmUgc3Bvc3RhdGEsIHNpIHB1w7IgcHJpbWEgcHJvdmFyZSBhZCBlc2VndWlyZVxuIgorImUyZnNjayBjb24gbCdvcHppb25lICctYiAlUycuIElsIHByb2JsZW1hIHBvdHJlYmJlIHJpc2llZGVyZVxuIgorIm5lbCBkZXNjcml0dG9yZSBkaSBncnVwcG8gZGVpIGJsb2NjaGkgcHJpbWFyaW8sIGVkIGlsIGRlc2NyaXR0b3JlXG4iCisiZGkgZ3J1cHBvIGRlaSBibG9jY2hpIHBvdHJlYmJlIGVzc2VyZSBPSy5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ29ycnVwdGlvbiBmb3VuZCBpbiBzdXBlcmJsb2NrLiAgKCVzID0gJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MQorbXNnaWQgIkNvcnJ1cHRpb24gZm91bmQgaW4gQFMuICAoJXMgPSAlTikuXG4iCittc2dzdHIgIlRyb3ZhdGEgY29ycnV6aW9uZSBuZWwgQFMuICglcyA9ICVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBAdjogJW1cbiIKK21zZ3N0ciAiRXJyb3JlIGRldGVybWluYW5kbyBsYSBkaW1lbnNpb25lIGRlbCBAdiBmaXNpY286ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGNvdW50IGluIHN1cGVyYmxvY2sgaXMgJWksIHNob3VsZCBiZSAlai5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxODEKKyMsIGZ1enp5Cittc2dpZCAiQGkgY291bnQgaW4gQFMgaXMgJWksIEBzICVqLlxuIgorbXNnc3RyICJJbCBudW1lcm8gZGkgQGkgaW4gQFMgw6ggJWksIGRvdnJlYmJlIGVzc2VyZSAlai5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODUKK21zZ2lkICJUaGUgSHVyZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmaWxldHlwZSBmZWF0dXJlLlxuIgorbXNnc3RyICJJbCBrZXJuZWwgSHVyZCBub24gc3VwcG9ydGEgbGEgY2FyYXR0ZXJpc3RpY2EgZmlsZXR5cGUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgJWkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzIGFuIEBuIEBqIChAaSAlaSkuXG4iCittc2dzdHIgIklsIEBTIGhhIHVuIEBqIGV4dDMgbm9uIHZhbGlkbyAoQGkgJWkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBtdWx0aXBsZSBmaWxlc3lzdGVtIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk1Cittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIG11bHRpcGxlIEBmIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4iCittc2dzdHIgIklsIEBqIGVzdGVybm8gaGEgZGl2ZXJzaSB1dGVudGkgZGVsIEBmIChub24gc3VwcG9ydGF0bykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbid0IGZpbmQgZXh0ZXJuYWwgam91cm5hbFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwMAorbXNnaWQgIkNhbid0IGZpbmQgZXh0ZXJuYWwgQGpcbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBpbCBAaiBlc3Rlcm5vXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIGJhZCBzdXBlcmJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjA1Cittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIGJhZCBAU1xuIgorbXNnc3RyICJJbCBAaiBlc3Rlcm5vIGhhIHVuIEBTIG5vbiB2YWxpZG9cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmlsZXN5c3RlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxMAorbXNnaWQgIkV4dGVybmFsIEBqIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBAZlxuIgorbXNnc3RyICJJbCBAaiBlc3Rlcm5vIG5vbiBzdXBwb3J0YSBxdWVzdG8gQGZcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBqb3VybmFsIHN1cGVyYmxvY2sgaXMgdW5rbm93biB0eXBlICVOICh1bnN1cHBvcnRlZCkuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBqb3VybmFsIAorIy4gQC1leHBhbmRlZDogZm9ybWF0LlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMTUKKyMsIGZ1enp5Cittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiAiCisiZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKyJJbCBAUyBkZWwgQGogZXh0MyDDqCBkZWwgdGlwbyBzY29ub3NjaXV0byAlTiAobm9uIHN1cHBvcnRhdG8pLlxuIgorIkUnIHByb2JhYmlsZSBjaGUgcXVlc3RhIGNvcGlhIGRpIGUyZnNjayBzaWEgdmVjY2hpYSBlL28gbm9uIHN1cHBvcnRpIHF1ZXN0byAiCisiZm9ybWF0byBkaSBAai5cbiIKKyJFJyBhbmNoZSBwb3NzaWJpbGUgY2hlIGlsIEBTIGRlbCBAaiBzaWEgY29ycm90dG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyMworIywgZnV6enkKK21zZ2lkICJAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICJJbCBAUyBkZWwgQGogZXh0MyDDqCBjb3Jyb3R0by5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXNfam91cm5hbCBmbGFnIGlzIGNsZWFyLCBidXQgYSBqb3VybmFsIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjI4CisjLCBmdXp6eQorbXNnaWQgIkBTIGhhc19AaiBmbGFnIGlzIGNsZWFyLCBidXQgYSBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJJbCBAUyBoYSBpbCBmbGFnIGV4dDMgbmVlZHNfcmVjb3ZlcnkgaW1wb3N0YXRvLCBtYSBub24gaGEgQGouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBqb3VybmFsIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjMzCisjLCBmdXp6eQorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gQGogaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiSWwgQFMgaGEgaWwgZmxhZyBleHQzIG5lZWRzX3JlY292ZXJ5IGltcG9zdGF0bywgbWEgbm9uIGhhIEBqLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBqb3VybmFsIGhhcyBkYXRhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzOAorIywgZnV6enkKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgQGogaGFzIGRhdGEuXG4iCittc2dzdHIgImZsYWcgZGVsIHJlY3VwZXJvIGV4dDMgcHVsaXRvLCBtYSBpbCBAaiBjb250aWVuZSBhbmNvcmEgZGF0aS5cbiIKKworIy4gQC1leHBhbmRlZDogQ2xlYXIgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDMKK21zZ2lkICJDbGVhciBAaiIKK21zZ3N0ciAiQXp6ZXJhcmUgQGoiCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgZmlsZXN5c3RlbS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDggZTJmc2NrL3Byb2JsZW0uYzo3MDcKK21zZ2lkICJAZiBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBAZi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiAlcyBvcnBoYW5lZCBpbm9kZSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1MworbXNnaWQgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4iCittc2dzdHIgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RhbGl0w6A9JUltLCBkaW1lbnNpb25lPSVJcylcbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1OAorIywgZnV6enkKK21zZ2lkICJASSAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICJAYiBASSAjJUIgKCViKSB0cm92YXRvIGluIHVuIEBpIEBvICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjMKKyMsIGZ1enp5Cittc2dpZCAiQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIkdpw6AgYXp6ZXJhdG8gaWwgQGIgIyVCICglYikgdHJvdmF0byBpbiB1biBAaSBAbyAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBvcnBoYW5lZCBpbm9kZSAlaSBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJASSBAbyBAaSAlaSBpbiBAUy5cbiIKK21zZ3N0ciAiQGkgQG8gQEkgJWkgbmVsIEBTLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIGlub2RlICVpIGluIG9ycGhhbmVkIGlub2RlIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBpICVpIGluIEBvIEBpIGxpc3QuXG4iCittc2dzdHIgIkBpIEBJICVpIG5lbGxhIGxpc3RhIGRlZ2xpIEBpIEBvLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjc4CisjLCBmdXp6eQorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICIiCisiSWwgQFMgZGVsIEBqIGV4dDMgaGEgaW1wb3N0YXRvIGlsIGZsYWcgYSBzb2xhIGxldHR1cmEgZGkgdW5hIGNhcmF0dGVyaXN0aWNhICIKKyJzY29ub3NjaXV0YS5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4MworIywgZnV6enkKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiIgorIklsIEBTIGRlbCBAaiBleHQzIGhhIGltcG9zdGF0byBpbCBmbGFnIGRpIHVuYSBjYXJhdHRlcmlzdGljYSBub24gIgorImNvbXBhdGliaWxlLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODgKK21zZ2lkICJAaiB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4iCittc2dzdHIgIlZlcnNpb25lIGRlbCBAaiBub24gc3VwcG9ydGF0YSBkYSBxdWVzdG8gZTJmc2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBNb3Zpbmcgam91cm5hbCBmcm9tIC8lcyB0byBoaWRkZW4gaW5vZGUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIk1vdmluZyBAaiBmcm9tIC8lcyB0byBoaWRkZW4gQGkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJTcG9zdGFtZW50byBkaSBAaiBkYSAvJXMgYWxsJ2lub2RlIG5hc2Nvc3RvLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBtb3Zpbmcgam91cm5hbDogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBtb3ZpbmcgQGo6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKyJFcnJvcmUgc3Bvc3RhbmRvIEBqOiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBGb3VuZCBpbnZhbGlkIFYyIGpvdXJuYWwgc3VwZXJibG9jayBmaWVsZHMgKGZyb20gVjEgam91cm5hbCkuXG4KKyMuIEAtZXhwYW5kZWQ6IENsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIGpvdXJuYWwgc3VwZXJibG9jay4uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMDMKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZvdW5kIEBuIFYyIEBqIEBTIGZpZWxkcyAoZnJvbSBWMSBAaikuXG4iCisiQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgQGogQFMuLi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlRyb3ZhdGkgZGVpIGNhbXBpIFYyIGRlbCBAUyBkZWwgQGogbm9uIHZhbGlkaSAoZGFsIGpvdXJuYWwgVjEpLlxuIgorIlB1bGl0dXJhIGRlaSBjYW1waSBhbCBkaSBsw6AgZGVsIEBTIGRlbCBAaiBWMS4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBSdW4gam91cm5hbCBhbnl3YXkKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzA5Cittc2dpZCAiUnVuIEBqIGFueXdheSIKK21zZ3N0ciAiRXNlZ3VpcmUgQGogY29tdW5xdWUiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTQKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiRmxhZyBkaSByZWN1cGVybyBub24gaW1wb3N0YXRvIG5lbCBAUyBkaSBiYWNrdXAsIGVzZWd1byBAaiBjb211bnF1ZS5cbiIKKworIy4gQC1leHBhbmRlZDogQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTkKK21zZ2lkICIiCisiQmFja2luZyB1cCBAaiBAaSBAYiBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkVzZWN1emlvbmUgZGVsIGJhY2t1cCBkZWxsJ2luZm9ybWF6aW9uZSBAaiBAaSBAYi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9pbm9kZSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGlzICVOOyBzaG91bGQgYmUgemVyby4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMjQKK21zZ2lkICIiCisiQGYgZG9lcyBub3QgaGF2ZSByZXNpemVfQGkgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X0Bic1xuIgorImlzICVOOyBAcyB6ZXJvLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZV9pbm9kZSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgaW5vZGUgaXMgbm9uLXplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzMwCittc2dpZCAiUmVzaXplX0BpIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBAaSBpcyBub24temVyby4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgbm90IHZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzNQorIywgZnV6enkKK21zZ2lkICJSZXNpemUgQGkgbm90IHZhbGlkLiAgIgorbXNnc3RyICJMJ0ByIG5vbiDDqCB1bmEgQGQuICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0MAorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0NQorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIHNob3VsZCBiZSAlWC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBAcyAlWC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBBZGRpbmcgZGlyaGFzaCBoaW50IHRvIGZpbGVzeXN0ZW0uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1NAorbXNnaWQgIiIKKyJBZGRpbmcgZGlyaGFzaCBoaW50IHRvIEBmLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzU5Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzY5Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IExhc3QgZ3JvdXAgYmxvY2sgYml0bWFwIHVuaW5pdGlhbGl6ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzc0Cittc2dpZCAiTGFzdCBAZyBAYiBAQiB1bmluaXRpYWxpemVkLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdHJhbnNhY3Rpb24gJWkgd2FzIGNvcnJ1cHQsIHJlcGxheSB3YXMgYWJvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4MworbXNnaWQgIlRoZSB0ZXN0X2ZzIGZsYWcgaXMgc2V0IChhbmQgZXh0NCBpcyBhdmFpbGFibGUpLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozODgKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5ICIKKyJzZXQpXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM5NAorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldClcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBPbmUgb3IgbW9yZSBibG9jayBncm91cCBkZXNjcmlwdG9yIGNoZWNrc3VtcyBhcmUgaW52YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDAKK21zZ2lkICJPbmUgb3IgbW9yZSBAYiBAZyBkZXNjcmlwdG9yIGNoZWNrc3VtcyBhcmUgaW52YWxpZC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgaW5vZGVzIGNvdW50IHRvICVqICh3YXMgJWkpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDA1CisjLCBmdXp6eQorbXNnaWQgIlNldHRpbmcgZnJlZSBAaXMgY291bnQgdG8gJWogKHdhcyAlaSlcbiIKK21zZ3N0ciAiSW1wb3N0YXppb25lIGRlbCBudW1lcm8gZGkgYmxvY2NoaSByaXNlcnZhdGkgYSAlbHVcbiIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGJsb2NrcyBjb3VudCB0byAlYyAod2FzICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxMAorIywgZnV6enkKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIkltcG9zdGF6aW9uZSBkZWwgbnVtZXJvIGRpIGJsb2NjaGkgcmlzZXJ2YXRpIGEgJWx1XG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1ha2luZyBxdW90YSBpbm9kZSAlaSAoJVEpIGhpZGRlbi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTUKK21zZ2lkICJNYWtpbmcgQHEgQGkgJWkgKCVRKSBoaWRkZW4uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDIwCittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyNQorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfb3BlbjI6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayA2NGJpdCBmaWxlc3lzdGVtcyBuZWVkcyBleHRlbnRzIHRvIGFjY2VzcyB0aGUgd2hvbGUgZGlzay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDAKK21zZ2lkICJAUyA2NGJpdCBmaWxlc3lzdGVtcyBuZWVkcyBleHRlbnRzIHRvIGFjY2VzcyB0aGUgd2hvbGUgZGlzay4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NQorbXNnaWQgIkZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZy4gICglTiwgbWF4IHZhbHVlICVnKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NTIKK21zZ2lkICJQYXNzIDE6IENoZWNraW5nIEBpcywgQGJzLCBhbmQgc2l6ZXNcbiIKK21zZ3N0ciAiUGFzc28gMTogQ29udHJvbGxvIGRpIEBpLCBAYihpKSBlIGRpbWVuc2lvbmlcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDU2Cittc2dpZCAiQHIgaXMgbm90IGEgQGQuICAiCittc2dzdHIgIkwnQHIgbm9uIMOoIHVuYSBAZC4gIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjEKK21zZ2lkICJAciBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAiCittc2dzdHIgIiIKKyJMJ0ByIGhhIGlsIGR0aW1lIGltcG9zdGF0byAocHJvYmFiaWxtZW50ZSBhIGNhdXNhIGRpIHVuIHZlY2NoaW8gbWtlMmZzKS4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2VydmVkIGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjYKKyMsIGZ1enp5Cittc2dpZCAiUmVzZXJ2ZWQgQGkgJWkgKCVRKSBoYXMgQG4gbW9kZS4gICIKK21zZ3N0ciAiTCdAaSByaXNlcnZhdG8gJWkgJVEgaGEgdW5hIG1vZGFsaXTDoCBlcnJhdGEuICIKKworIy4gQC1leHBhbmRlZDogZGVsZXRlZCBpbm9kZSAlaSBoYXMgemVybyBkdGltZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEQgQGkgJWkgaGFzIHplcm8gZHRpbWUuICAiCittc2dzdHIgIkwnQGkgQEQgICVpIGhhIGR0aW1lIHplcm8uICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAiCittc2dzdHIgIkwnQGkgJWkgw6ggaW4gdXNvLCBtYSBoYSBpbCBkdGltZSBpbXBvc3RhdG8uICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSB6ZXJvLWxlbmd0aCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGEgQHogQGQuICAiCittc2dzdHIgIkwnQGkgJWkgw6ggdW5hIEBkIGEgQHouICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODYKK21zZ2lkICJAZyAlZydzIEBiIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICJMYSBAQiBkZWkgQGIoaSkgZGVsIEBnICVnIGEgJWIgQEMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDkxCittc2dpZCAiQGcgJWcncyBAaSBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiTGEgQEIgZGVnbGkgQGkgZGVsIEBnICVnIGEgJWIgQEMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgdGFibGUgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTYKK21zZ2lkICJAZyAlZydzIEBpIHRhYmxlIGF0ICViIEBDLlxuIgorbXNnc3RyICJMYSB0YXZvbGEgZGVnbGkgQGkgZGVsIEBnICVnIGEgJWIgQEMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwMQorbXNnaWQgIkBnICVnJ3MgQGIgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIkxhIEBCIGRlaSBAYihpKSBkZWwgQGcgJWcgKCViKSBub24gw6ggdmFsaWRhLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwNgorbXNnaWQgIkBnICVnJ3MgQGkgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIkxhIEBCIGRlZ2xpIEBpIGRlbCBAZyAlZyAoJWIpIG5vbiDDqCB2YWxpZGEuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfc2l6ZSBpcyAlSXMsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTEKK21zZ2lkICJAaSAlaSwgaV9zaXplIGlzICVJcywgQHMgJU4uICAiCittc2dzdHIgIkBpICVpLCBpX3NpemUgw6ggJUlzLCBAcyAlTi4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9ibG9ja3MgaXMgJUliLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE2CisjLCBmdXp6eQorbXNnaWQgIkBpICVpLCBpX0BicyBpcyAlSWIsIEBzICVOLiAgIgorbXNnc3RyICJAaSAlaSwgaV9ibG9ja3Mgw6ggJUliLCBAcyAlTi4gIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIxCisjLCBmdXp6eQorbXNnaWQgIkBJICVCICglYikgaW4gQGkgJWkuICAiCittc2dzdHIgIkBiIEBJICMlQiAoJWIpIG5lbGwnQGkgJWkuICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBvdmVybGFwcyBmaWxlc3lzdGVtIG1ldGFkYXRhIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyNgorbXNnaWQgIiVCICglYikgb3ZlcmxhcHMgQGYgbWV0YWRhdGEgaW4gQGkgJWkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJMJ0BpICVpIGhhIEBiKGkpIGlsbGVnYWxpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFRvbyBtYW55IGlsbGVnYWwgYmxvY2tzIGluIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzNgorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBpbGxlZ2FsIEBicyBpbiBAaSAlaS5cbiIKK21zZ3N0ciAiVHJvcHBpIEBiKGkpIGlsbGVnYWxpIGluIEBpICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gYmFkIGJsb2NrIGlub2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0MQorIywgZnV6enkKK21zZ2lkICJASSAlQiAoJWIpIGluIGJhZCBAYiBAaS4gICIKK21zZ3N0ciAiQGIgQEkgIyVCICglYikgbmVsbCdAaSBkZWwgQGIgbm9uIHZhbGlkby4gIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQ2CisjLCBmdXp6eQorbXNnaWQgIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiTCdAaSBkZWwgQGIgbm9uIHZhbGlkbyBoYSBAYihpKSBpbGxlZ2FsaS4gIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrIGluIHVzZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTEKK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiQGIgZHVwbGljYXRvIG8gbm9uIHZhbGlkbyBpbiB1c28hXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayAlYiB1c2VkIGFzIGJhZCBibG9jayBpbm9kZSBpbmRpcmVjdCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTYKKyMsIGZ1enp5Cittc2dpZCAiQmFkIEBiICViIHVzZWQgYXMgYmFkIEBiIEBpIGluZGlyZWN0IEBiLiAgIgorbXNnc3RyICJJbCBAYiAlYiB1c2EgY29tZSBAaSBkZWwgQGIgbm9uIHZhbGlkbyB1biBAYiBpbmRpcmV0dG8uICIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4KKyMuIEAtZXhwYW5kZWQ6IHNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGluIHRoZSBmaWxlc3lzdGVtLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2MQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgYmFkIEBiIEBpIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuIgorInNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4iCisiaW4gdGhlIEBmLlxuIgorbXNnc3RyICIiCisiXG4iCisiTCdAaSBkZWwgQGIgbm9uIHZhbGlkbyDDqCBzdGF0byBwcm9iYWJpbG1lbnRlIGNvcnJvdHRvLiBFJyBjb25zaWdsaWFiaWxlXG4iCisiZmVybWFyc2kgb3JhIGVkIGVzZWd1aXJlIGUyZnNjayAtYyBwZXIgY2VyY2FyZSBibG9jY2hpIG5vbiB2YWxpZGlcbiIKKyJuZWwgQGYuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBJZiB0aGUgYmxvY2sgaXMgcmVhbGx5IGJhZCwgdGhlIGZpbGVzeXN0ZW0gY2FuIG5vdCBiZSBmaXhlZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjgKK21zZ2lkICIiCisiXG4iCisiSWYgdGhlIEBiIGlzIHJlYWxseSBiYWQsIHRoZSBAZiBjYW4gbm90IGJlIGZpeGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiU2UgaWwgQGIgw6ggbW9sdG8gY29ycm90dG8sIGlsIEBmIG5vbiBwdcOyIGVzc2VyZSByaXBhcmF0by5cbiIKKworIy4gQC1leHBhbmRlZDogWW91IGNhbiByZW1vdmUgdGhpcyBibG9jayBmcm9tIHRoZSBiYWQgYmxvY2sgbGlzdCBhbmQgaG9wZVxuCisjLiBALWV4cGFuZGVkOiB0aGF0IHRoZSBibG9jayBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3MworIywgZnV6enkKK21zZ2lkICIiCisiWW91IGNhbiByZW1vdmUgdGhpcyBAYiBmcm9tIHRoZSBiYWQgQGIgbGlzdCBhbmQgaG9wZVxuIgorInRoYXQgdGhlIEBiIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkUnIHBvc3NpYmlsZSBlbGltaW5hcmUgcXVlc3RvIEBiIChlIHNwZXJhcmUgaWwgbWVnbGlvKSBkYWxsYVxuIgorImxpc3RhIGRlaSBAYihpKSBub24gdmFsaWRpLCBlIHNwZXJhcmUgY2hlIHNpYSBkYXZ2ZXJvIGEgcG9zdG8sIG1hXG4iCisibm9uIGNpIHNvbm8gZ2FyYW56aWUuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgKCViKSBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTc5Cittc2dpZCAiVGhlIHByaW1hcnkgQFMgKCViKSBpcyBvbiB0aGUgYmFkIEBiIGxpc3QuXG4iCittc2dzdHIgIklsIEBTIHByaW1hcmlvICglYikgw6ggbmVsbGEgbGlzdGkgZGVpIEBiKGkpIG5vbiB2YWxpZGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJsb2NrICViIGluIHRoZSBwcmltYXJ5IGdyb3VwIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4NAorbXNnaWQgIkJsb2NrICViIGluIHRoZSBwcmltYXJ5IEBnIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgQGIgbGlzdFxuIgorbXNnc3RyICIiCisiSWwgYmxvY2NvICViIG5laSBkZXNjcml0dG9yaSBwcmltYXJpIGRlbCBAZyDDqCBuZWxsYSBsaXN0YSBkZWkgQGIoaSkgbm9uICIKKyJ2YWxpZGlcbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBzdXBlcmJsb2NrICglYikgaXMgYmFkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5MAorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgQFMgKCViKSBpcyBiYWQuXG4iCittc2dzdHIgIkF0dGVuemlvbmU6IElsIEBTICglYikgZGVsIGdydXBwbyAlZyBub24gw6ggdmFsaWRvLlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIGdyb3VwIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBibG9jayAoJWIpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5NQorIywgZnV6enkKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIEBnIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBAYiAoJWIpLlxuIgorbXNnc3RyICIiCisiQXR0ZW56aW9uZTogTGEgY29waWEgZGVpIGRlc2NyaXR0b3JpIGRpIEBnIGRlbCBncnVwcG8gJWcgaGEgdW4gQGIgKCViKSBub24gIgorInZhbGlkby5cbiIKKworIy4gQC1leHBhbmRlZDogUHJvZ3JhbW1pbmcgZXJyb3I/ICBibG9jayAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX2Jsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwMQorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yPyAgQGIgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9AYi5cbiIKK21zZ3N0ciAiIgorIkVycm9yZSBkaSBwcm9ncmFtbWF6aW9uZT8gQGIgIyViIHJlY2xhbWF0byBzZW56YSByYWdpb25lIGluIHByb2Nlc3NfYmFkX0BiLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nICVOIGNvbnRpZ3VvdXMgYmxvY2socykgaW4gYmxvY2sgZ3JvdXAgJWcgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNworIywgZnV6enkKK21zZ2lkICJAQSAlTiBjb250aWd1b3VzIEBiKHMpIGluIEBiIEBnICVnIGZvciAlczogJW1cbiIKK21zZ3N0ciAiQEEgJU4gQGIoaSkgY29udGlndWkgbmVsIEBnIGRpIEBiICVnIHBlciAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGIgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4iCittc2dzdHIgIkBBIGlsIGJ1ZmZlciBAYiBwZXIgbGEgcmlsb2NhemlvbmUgZGkgJXNcbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTcKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuIgorbXNnc3RyICJSaWxvY2F6aW9uZSBkZWwgJXMgZGVsIEBnICVnIGRhICViIGEgJWMuLi5cbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgdG8gJWMuLi5cbiIKK21zZ3N0ciAiUmlsb2NhemlvbmUgZGVsICVzIGRlbCBAZyAlZyBpbiAlYy4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAlYiBvZiAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjcKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBAYiAlYiBvZiAlczogJW1cbiIKK21zZ3N0ciAiQXR0ZW56aW9uZTogaW1wb3NzaWJpbGUgbGVnZ2VyZSBAYiAlYiBkaSAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHdyaXRlIGJsb2NrICViIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzIKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICJBdHRlbnppb25lOiBpbXBvc3NpYmlsZSBzY3JpdmVyZSBAYiAlYiBwZXIgJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjM3IGUyZnNjay9wcm9ibGVtLmM6MTUwMQorbXNnaWQgIkBBIEBpIEBCICglTik6ICVtXG4iCittc2dzdHIgIkBBIGxhIEBCIGRlbGwnQGkgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDIKKyMsIGZ1enp5Cittc2dpZCAiQEEgQGIgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiQEEgbGEgQEIgZGVsbCdAaSAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4iCittc2dzdHIgIkBBIGxlIGluZm9ybWF6aW9uaSBkZWwgY29sbGVnYW1lbnRvIGljb3VudDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBkaXJlY3RvcnkgYmxvY2sgYXJyYXk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAQSBAZCBAYiBhcnJheTogJW1cbiIKK21zZ3N0ciAiQEEgbCdhcnJheSBkZWkgQGIgZGkgQGQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1NworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzY2FubmluZyBAaXMgKCVpKTogJW1cbiIKK21zZ3N0ciAiRXJyb3JlIGFuYWxpenphbmRvIEBpcyAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRXJyb3JlIHNjb3JyZW5kbyBpIEBiKGkpIG5lbGwnQGkgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBjb3VudD0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjY3Cittc2dpZCAiRXJyb3Igc3RvcmluZyBAaSBjb3VudCBpbmZvcm1hdGlvbiAoQGk9JWksIGNvdW50PSVOKTogJW1cbiIKK21zZ3N0ciAiIgorIkVycm9yZSBzYWx2YW5kbyBsZSBpbmZvcm1hemlvbmkgc3VsIG51bWVybyBkaSBAaSAoQGk9JWksIG51bWVybz0lTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgZGlyZWN0b3J5IGJsb2NrIGluZm9ybWF0aW9uIChpbm9kZT0laSwgYmxvY2s9JWIsIG51bT0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcyCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKK21zZ3N0ciAiIgorIkVycm9yZSBzYWx2YW5kbyBsZSBpbmZvcm1hemlvbmkgc3VpIEBiKGkpIGRpIEBkIChAaT0laSwgQGI9JWIsIG51bT0lTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkVycm9yZSBkdXJhbnRlIGxhIGxldHR1cmEgZGVsbCdAaSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gICIKK21zZ3N0ciAiTCdAaSAlaSBoYSBpbCBmbGFnIGltYWdpYyBpbXBvc3RhdG8uICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlICVpKSBoYXMgaW1tdXRhYmxlXG4KKyMuIEAtZXhwYW5kZWQ6IG9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoQGkgJWkpIGhhcyBpbW11dGFibGVcbiIKKyJvciBhcHBlbmQtb25seSBmbGFnIHNldC4gICIKK21zZ3N0ciAiIgorIlVuIGZpbGUgKEBpICVpKSBzcGVjaWFsZSAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgaGEgaWwgZmxhZ1xuIgorImltbXV0YWJsZSBvIGFwcGVuZC1vbmx5IGltcG9zdGF0by4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgY29tcHJlc3Npb24gZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGNvbXByZXNzaW9uIHN1cHBvcnQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBAY2lvbiBmbGFnIHNldCBvbiBAZiB3aXRob3V0IEBjaW9uIHN1cHBvcnQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvKSBpbm9kZSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvKSBAaSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gICIKK21zZ3N0ciAiIgorIlVuIGZpbGUgKEBpICVpKSBzcGVjaWFsZSAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgaGEgaWwgZmxhZ1xuIgorImltbXV0YWJsZSBvIGFwcGVuZC1vbmx5IGltcG9zdGF0by4gIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxMgorIywgZnV6enkKK21zZ2lkICJAaiBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiTCdAaSAlaSDDqCBpbiB1c28sIG1hIGhhIGlsIGR0aW1lIGltcG9zdGF0by4gIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzE3Cittc2dpZCAiQGogaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiSWwgQGogbm9uIMOoIHVuIGZpbGUgcmVnb2xhcmUuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzIyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSB3YXMgcGFydCBvZiB0aGUgQG8gQGkgbGlzdC4gICIKK21zZ3N0ciAiTCdAaSAlaSBmYWNldmEgcGFydGUgZGVsbGEgbGlzdGEgZGVnbGkgQGkgb3JmYW5pLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzI4CisjLCBmdXp6eQorbXNnaWQgIkBpcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAiCittc2dzdHIgIiIKKyJ0cm92YXRpIEBpIGNoZSBmYWNldmFubyBwYXJ0ZSBkaSB1bmEgbGlzdGEgZGkgb3JmYW5pIGNvcnJvdHRpIGNvbGxlZ2F0aS4gIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjczMworIywgZnV6enkKK21zZ2lkICJAQSByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbiIKK21zZ3N0ciAiQEEgbGEgc3RydXR0dXJhIGljb3VudDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgZm9yIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjczOAorIywgZnV6enkKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViIGZvciBAaSAlaS4gICIKK21zZ3N0ciAiRXJyb3JlIGxlZ2dlbmRvIGwnQGEgZGkgQGIgJWIgcGVyIGwnQGkgJWkuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgYmFkIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDMKKyMsIGZ1enp5Cittc2dpZCAiQGkgJWkgaGFzIGEgYmFkIEBhIEBiICViLiAgIgorbXNnc3RyICJMJ0BpICVpIGhhIHVuIEBhIGRpIEBiICViIG5vbiB2YWxpZG8uICIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDgKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJFcnJvcmUgbGVnZ2VuZG8gbCdAYSBkaSBAYiAlYiAoJW0pLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzUzCisjLCBmdXp6eQorbXNnaWQgIkBhIEBiICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIEBzICVOLiAgIgorbXNnc3RyICJMJ0BhIGRpIEBiICViIMOoIGNvbnRhdG8gY29tZSAlYiwgZG92cmViYmUgZXNzZXJlICVOLiAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzU4CisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiRXJyb3JlIHNjcml2ZW5kbyBsJ0BhIEBiICViICglbSkuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyBoX2Jsb2NrcyA+IDEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzYzCisjLCBmdXp6eQorbXNnaWQgIkBhIEBiICViIGhhcyBoX0BicyA+IDEuICAiCittc2dzdHIgIkwnQGEgQGIgJWIgaGEgaWwgdmFsb3JlIGhfYmxvY2tzID4gMS4gIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjgKKyMsIGZ1enp5Cittc2dpZCAiQEEgQGEgQGIgJWIuICAiCittc2dzdHIgIkwnQGkgJWkgaGEgdW4gQGEgZGkgQGIgJWIgbm9uIHZhbGlkby4gIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3MworIywgZnV6enkKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAiCittc2dzdHIgIkwnQGEgZGkgQGIgJWIgw6ggY29ycm90dG8gKGNvbGxpc2lvbmUgZGkgYWxsb2NhemlvbmUpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChpbnZhbGlkIG5hbWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3OAorIywgZnV6enkKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiBuYW1lKS4gICIKK21zZ3N0ciAiTCdAYSBkaSBAYiAlYiDDqCBjb3Jyb3R0byAobm9tZSBub24gdmFsaWRvKS4gIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCB2YWx1ZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzgzCisjLCBmdXp6eQorbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIHZhbHVlKS4gICIKK21zZ3N0ciAiTCdAYSBkaSBAYiAlYiDDqCBjb3Jyb3R0byAodmFsb3JlIG5vbiB2YWxpZG8pLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIHRvbyBiaWcuICAiCittc2dzdHIgIkwnQGkgJWkgw6ggdHJvcHBvIGdyYW5kZS4gIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIGNhdXNlcyBkaXJlY3RvcnkgdG8gYmUgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3OTIKKyMsIGZ1enp5Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgQGQgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiSWwgQGIgIyVCICglYikgZmEgZGl2ZW50YXJlIGlsIEBkIHRyb3BwbyBncmFuZGUuICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OTcKKyMsIGZ1enp5Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgZmlsZSB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICJJbCBAYiAjJUIgKCViKSBmYSBkaXZlbnRhcmUgaWwgZmlsZSB0cm9wcG8gZ3JhbmRlLiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAyCisjLCBmdXp6eQorbXNnaWQgIiVCICglYikgY2F1c2VzIHN5bWxpbmsgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiSWwgQGIgIyVCICglYikgZmEgZGl2ZW50YXJlIGlsIGxpbmsgc2ltYm9saWNvIHRyb3BwbyBncmFuZGUuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuIgorbXNnc3RyICIiCisiTCdAaSAlaSBnYSBpbCBmbGFnIElOREVYX0ZMIGltcG9zdGF0byBuZWwgQGYgc2VuemEgaWwgc3VwcG9ydG8gaHRyZWUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIgorbXNnc3RyICJMJ0BpICVpIGhhIGlsIGZsYWcgSU5ERVhfRkwgaW1wb3N0YXRvLCBtYSBub24gw6ggdW4gQGQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCByb290IG5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODE3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSBoYXMgYW4gQG4gcm9vdCBub2RlLlxuIgorbXNnc3RyICJMJ0BoICVpIGhhIHVuIG5vZG8gcm9vdCBub24gdmFsaWRvLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIyCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIkwnQGggJWkgaGEgdW5hIHZlcnNpb25lIGRlbGwnaGFzaCBub24gc3VwcG9ydGF0YSAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4iCittc2dzdHIgIkwnQGggJWkgdXNhIHVuIGZsYWcgZGkgbm9kbyBodHJlZSBkaSByb290IG5vbiBjb21wYXRpYmlsZS5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMyCittc2dpZCAiQGggJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbiIKK21zZ3N0ciAiTCdAaCAlaSBoYSB1biBsaXZlbGxvIGRpIHByb2ZvbmRpdMOgICglTikgdHJvcHBvIGVsZXZhdG9cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBhbiBpbmRpcmVjdCBibG9jayAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBtZXRhZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzcKK21zZ2lkICIiCisiQmFkIEBiIEBpIGhhcyBhbiBpbmRpcmVjdCBAYiAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbiIKKyJAZiBtZXRhZGF0YS4gICIKK21zZ3N0ciAiIgorIkwnQGkgZGVsIEBiIG5vbiB2YWxpZG8gaGEgdW4gQGIgaW5kaXJldHRvICglYikgY2hlIGVudHJhIGluXG4iCisiY29uZmxpdHRvIGNvbiBpbCBtZXRhZGF0YSBkZWwgQGYuICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDgKKyMsIGZ1enp5Cittc2dpZCAiQGkgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJMJ0BoICVpIGhhIHVuIGxpdmVsbG8gZGkgcHJvZm9uZGl0w6AgKCVOKSB0cm9wcG8gZWxldmF0b1xuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTMKKyMsIGZ1enp5Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkwnQGggJWkgaGEgdW4gbGl2ZWxsbyBkaSBwcm9mb25kaXTDoCAoJU4pIHRyb3BwbyBlbGV2YXRvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODU4CisjLCBmdXp6eQorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkwnQGggJWkgaGEgdW4gbGl2ZWxsbyBkaSBwcm9mb25kaXTDoCAoJU4pIHRyb3BwbyBlbGV2YXRvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBibG9jayAoJU4pIHdoaWNoIGlzIGludmFsaWQgKG11c3QgYmUgMClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjMKKyMsIGZ1enp5Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgQGIgKCVOKSB3aGljaCBpcyBAbiAobXVzdCBiZSAwKVxuIgorbXNnc3RyICJMJ0BoICVpIGhhIHVuIGxpdmVsbG8gZGkgcHJvZm9uZGl0w6AgKCVOKSB0cm9wcG8gZWxldmF0b1xuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjgKKyMsIGZ1enp5Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkwnQGggJWkgaGEgdW4gbGl2ZWxsbyBkaSBwcm9mb25kaXTDoCAoJU4pIHRyb3BwbyBlbGV2YXRvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3MworIywgZnV6enkKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiTCdAaCAlaSBoYSB1biBsaXZlbGxvIGRpIHByb2ZvbmRpdMOgICglTikgdHJvcHBvIGVsZXZhdG9cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3OAorbXNnaWQgIkBpICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgZXh0ZW50IHRyZWUgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgQHggdHJlZSBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRXJyb3JlIHNjb3JyZW5kbyBpIEBiKGkpIG5lbGwnQGkgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZhaWxlZCB0byBpdGVyYXRlIGV4dGVudHMgaW4gaW5vZGUgJWlcbgorIy4gQC1leHBhbmRlZDogXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODg4Cittc2dpZCAiIgorIkZhaWxlZCB0byBpdGVyYXRlIGV4dGVudHMgaW4gQGkgJWlcbiIKKyJcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgaW52YWxpZCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5NAorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgQG4gcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGludmFsaWQgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5OQorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIEBuIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKyJMJ0BpICVpIGdhIGlsIGZsYWcgSU5ERVhfRkwgaW1wb3N0YXRvIG5lbCBAZiBzZW56YSBpbCBzdXBwb3J0byBodHJlZS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IHN1cGVyYmxvY2sgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IEBTIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdCBzeW1saW5rICVpIGhhcyBFWFRFTlRfRkwgc2V0LiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI0Cittc2dpZCAiIgorIkBpICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjgKKyMsIGZ1enp5Cittc2dpZCAiQGkgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbiIKK21zZ3N0ciAiTCdAaCAlaSBoYSB1biBub2RvIHJvb3Qgbm9uIHZhbGlkby5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBAYiBAQjogJW1cbiIKK21zZ3N0ciAiRXJyb3JlIHNjb3JyZW5kbyBpIEBiKGkpIGRlbGxlIEBkOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzOAorIywgZnV6enkKK21zZ2lkICJAcSBAaSBpcyBub3QgcmVndWxhciBmaWxlLiAgIgorbXNnc3RyICJJbCBAaiBub24gw6ggdW4gZmlsZSByZWdvbGFyZS4gIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDMKKyMsIGZ1enp5Cittc2dpZCAiQHEgQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkwnQGkgJWkgw6ggaW4gdXNvLCBtYSBoYSBpbCBkdGltZSBpbXBvc3RhdG8uICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDgKKyMsIGZ1enp5Cittc2dpZCAiQHEgQGkgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gICIKK21zZ3N0ciAiTCdAaSAlaSDDqCBpbiB1c28sIG1hIGhhIGlsIGR0aW1lIGltcG9zdGF0by4gIgorCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGxvb2tzIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUzCisjLCBmdXp6eQorbXNnaWQgIlRoZSBiYWQgQGIgQGkgbG9va3MgQG4uICAiCittc2dzdHIgIjxJbm9kZSBudW1lcm8gMT4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTgKK21zZ2lkICIiCisiQGkgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEludGVyaW9yIGV4dGVudCBub2RlIGxldmVsICVOIG9mIGlub2RlICVpOlxuCisjLiBALWV4cGFuZGVkOiBMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NjUKK21zZ2lkICIiCisiSW50ZXJpb3IgQHggbm9kZSBsZXZlbCAlTiBvZiBAaSAlaTpcbiIKKyJMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzEKK21zZ2lkICIiCisiQGkgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgYmxvY2sgJWIgc2hvdWxkIGJlIGF0IGJsb2NrICVjLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3NworIywgZnV6enkKK21zZ2lkICJAZCBAaSAlaSBAYiAlYiBzaG91bGQgYmUgYXQgQGIgJWMuICAiCittc2dzdHIgIkwnQGkgJWkgaGEgdW4gQGEgZGkgQGIgJWIgbm9uIHZhbGlkby4gIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGV4dGVudCBtYXJrZWQgdW5pbml0aWFsaXplZCBhdCBibG9jayAlYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5ODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkBkIEBpICVpIGhhcyBAeCBtYXJrZWQgdW5pbml0aWFsaXplZCBhdCBAYiAlYy4gICIKK21zZ3N0ciAiTCdAaSAlaSBkZWxsYSBAZCBoYSB1biBAYiAoIyVCKSBub24gYWxsb2NhdG8uICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbG9naWNhbCBibG9jayAlYiAocGh5c2ljYWwgYmxvY2sgJWMpIHZpb2xhdGVzIGNsdXN0ZXIgYWxsb2NhdGlvbiBydWxlcy5cbgorIy4gQC1leHBhbmRlZDogV2lsbCBmaXggaW4gcGFzcyAxQi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5ODcKK21zZ2lkICIiCisiQGkgJWkgbG9naWNhbCBAYiAlYiAocGh5c2ljYWwgQGIgJWMpIHZpb2xhdGVzIGNsdXN0ZXIgYWxsb2NhdGlvbiBydWxlcy5cbiIKKyJXaWxsIGZpeCBpbiBwYXNzIDFCLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLlxuCisjLiBALWV4cGFuZGVkOiBQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk5NAorbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgQGJzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBAaS4uLlxuIgorIlBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIEBtIEBic1xuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgJWk6CisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMDAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkBtIEBiKHMpIGluIEBpICVpOiIKK21zZ3N0ciAiQGIgQEkgIyVCICglYikgbmVsbCdAaSAlaS4gIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4iCittc2dzdHIgIkVycm9yZSBhbmFsaXp6YW5kbyBnbGkgaW5vZGUgKCVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKGlub2RlX2R1cF9tYXApOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkBBIEBpIEBCIChAaV9kdXBfbWFwKTogJW1cbiIKK21zZ3N0ciAiQEEgbGEgQEIgZGVnbGkgQGkgKGlub2RlX2R1cF9tYXApOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJFcnJvcmUgc2NvcnJlbmRvIGkgQGIoaSkgbmVsbCdAaSAlaSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzAgZTJmc2NrL3Byb2JsZW0uYzoxMzQ1CisjLCBmdXp6eQorbXNnaWQgIkVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgQGEgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiIgorIkVycm9yZSBzaXN0ZW1hbmRvIGlsIGNvbnRlZ2dpbyBkZWkgcmlmZXJpbWVudGkgcGVyIGlsIEBiIEBhICViIChAaSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzUKKyMsIGZ1enp5Cittc2dpZCAiUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIEBpcyB3aXRoIEBtIEBic1xuIgorbXNnc3RyICIiCisiUGFzc28gMUM6IEFuYWxpc2kgZGVsbGUgZGlyZWN0b3J5IHJlbGF0aXZhIGFnbGkgQGkgY29uIEBiKGkpIGR1cGxpY2F0aS5cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDQxCisjLCBmdXp6eQorbXNnaWQgIlBhc3MgMUQ6IFJlY29uY2lsaW5nIEBtIEBic1xuIgorbXNnc3RyICJQYXNzbyAxRDogUmljb25jaWxpYW1lbnRvIGRlbCBAYihpKSBkdXBsaWNhdGlcbiIKKworIy4gQC1leHBhbmRlZDogRmlsZSAlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pIFxuCisjLiBALWV4cGFuZGVkOiAgIGhhcyAlciBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDYKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZpbGUgJVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKSBcbiIKKyIgIGhhcyAlciBAbSBAYihzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbiIKK21zZ3N0ciAiIgorIklsIGZpbGUgJVEgKEBpICMlaSwgdWx0aW1hIG1vZGlmaWNhICVJTSkgXG4iCisiICBoYSAlYiBAYihpKSBkdXBsaWNhdGksIGNvbmRpdmlzaSBjb24gJU4gZmlsZTpcbiIKKworIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1MgorbXNnaWQgIlx0JVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKVxuIgorbXNnc3RyICJcdCVRIChAaSAjJWksIHVsdGltYSBtb2RpZmljYSAlSU0pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1NworbXNnaWQgIlx0PEBmIG1ldGFkYXRhPlxuIgorbXNnc3RyICJcdDxtZXRhZGF0YSBkZWwgQGY+XG4iCisKKyMuIEAtZXhwYW5kZWQ6IChUaGVyZSBhcmUgJU4gaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDYyCisjLCBmdXp6eQorbXNnaWQgIiIKKyIoVGhlcmUgYXJlICVOIEBpcyBjb250YWluaW5nIEBtIEBicy4pXG4iCisiXG4iCittc2dzdHIgIiIKKyIoQ2kgc29ubyAlbiBAaSBjb250ZW5lbnRpIEBiKGkpIGR1cGxpY2F0by9ub24gdmFsaWRvKGkpLilcbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA2NworIywgZnV6enkKK21zZ2lkICIiCisiQG0gQGJzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJAYihpKSBkdXBsaWNhdGkgZ2nDoCByaWFzc2VnbmF0aSBvIGNsb25hdGkuXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjbG9uZSBmaWxlOiAlbVxuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjbG9uYXJlIGlsIGZpbGU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwODYKK21zZ2lkICJQYXNzIDI6IENoZWNraW5nIEBkIHN0cnVjdHVyZVxuIgorbXNnc3RyICJQYXNzbyAyOiBBbmFsaXNpIGRlbGxhIHN0cnV0dHVyYSBkZWxsZSBAZFxuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIGlub2RlIG51bWJlciBmb3IgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDkxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAbiBAaSBudW1iZXIgZm9yICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiTnVtZXJvIGRpIEBpIG5vbiB2YWxpZG8gcGVyICcuJyBuZWxsJ0BpIEBkICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbnZhbGlkIGlub2RlICM6ICVEaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDk2CisjLCBmdXp6eQorbXNnaWQgIkBFIGhhcyBAbiBAaSAjOiAlRGkuXG4iCittc2dzdHIgIkwnQEUgaGEgdW4gQGkgbm9uIHZhbGlkbyAjOiAlRGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlICVEaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTAxCisjLCBmdXp6eQorbXNnaWQgIkBFIGhhcyBARC91bnVzZWQgQGkgJURpLiAgIgorbXNnc3RyICJMJ0BFIGhhIEBpIG5vbiB1dGlsaXp6YXRvL0BEICVEaS4gIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA2Cittc2dpZCAiQEUgQEwgdG8gJy4nICAiCittc2dzdHIgIkwnQEUgQEwgYSAnLicgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHBvaW50cyB0byBpbm9kZSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTEKK21zZ2lkICJARSBwb2ludHMgdG8gQGkgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBAYi5cbiIKK21zZ3N0ciAiTCdARSBwdW50YSBhbGwnQGkgKCVEaSksIHBvc2l6aW9uYXRvIGluIHVuIEBiIG5vbiB2YWxpZG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIGRpcmVjdG9yeSAlUCAoJURpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE2Cittc2dpZCAiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iCittc2dzdHIgIkwnQEUgQEwgYWxsYSBAZCAlUCAoJURpKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gdGhlIHJvb3QgaW5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEyMQorbXNnaWQgIkBFIEBMIHRvIHRoZSBAci5cbiIKK21zZ3N0ciAiTCdARSBATCBhbGwnQHIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI2Cittc2dpZCAiQEUgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbiIKK21zZ3N0ciAiTCdARSBoYSBjYXJhdHRlcmkgbm9uIHZhbGlkaSBuZWwgc3VvIG5vbWUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICInLicgbWFuY2FudGUgbmVsbCdAaSAlaSBkZWxsYSBAZC5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4uJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiJy4uJyBtYW5jYW50ZSBuZWxsJ0BpICVpIGRlbGxhIEBkLlxuIgorCisjLiBALWV4cGFuZGVkOiBGaXJzdCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKSBzaG91bGQgYmUgJy4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0MQorIywgZnV6enkKK21zZ2lkICJGaXJzdCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSAoJXApIEBzICcuJ1xuIgorbXNnc3RyICJJbCBwcmltbyBAZSAnJURuJyAoaW5vZGU9JURpKSBuZWxsJ0BpICVpIGRlbGxhIEBkICglcCkgQHMgJy4nXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNlY29uZCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgc2hvdWxkIGJlICcuLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQ2CisjLCBmdXp6eQorbXNnaWQgIlNlY29uZCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSBAcyAnLi4nXG4iCittc2dzdHIgIklsIHNlY29uZG8gQGUgJyVEbicgKGlub2RlPSVEaSkgbmVsbCdAaSAlaSBkZWxsYSBAZCAoJXApIEBzICcuJ1xuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZhZGRyIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJRiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1MQorIywgZnV6enkKK21zZ2lkICJpX2ZhZGRyIEBGICVJRiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mYWRkciBARiAlSUYgQHMgemVyby5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTYKKyMsIGZ1enp5Cittc2dpZCAiaV9maWxlX2FjbCBARiAlSWYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2wgQEYgJUlmIEBzIHplcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZGlyX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWQsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjEKKyMsIGZ1enp5Cittc2dpZCAiaV9kaXJfYWNsIEBGICVJZCwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9kaXJfYWNsIEBGICVJZCBAcyB6ZXJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZyYWcgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjYKKyMsIGZ1enp5Cittc2dpZCAiaV9mcmFnIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZyYWcgQEYgJU4gQHMgemVyby5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mc2l6ZSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE3MQorIywgZnV6enkKK21zZ2lkICJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZzaXplIEBGICVOIEBzIHplcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZSAoJUltKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTc2CisjLCBmdXp6eQorbXNnaWQgIkBpICVpICglUSkgaGFzIEBuIG1vZGUgKCVJbSkuXG4iCittc2dzdHIgIkwnQG8gJWkgKCVRKSBoYSB1bmEgbW9kYWxpdMOgIG5vbiB2YWxpZGEgKCVJbSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZGlyZWN0b3J5IGNvcnJ1cHRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODEKKyMsIGZ1enp5Cittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IEBkIGNvcnJ1cHRlZFxuIgorbXNnc3RyICJAaSAlaSBkZWxsYSBAZCwgb2Zmc2V0ICVOOiBAZCBjb3Jyb3R0YVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4NgorIywgZnV6enkKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAiQGkgJWkgZGVsbGEgQGQsIG9mZnNldCAlTjogbm9tZSBmaWxlIHRyb3BwbyBsdW5nb1xuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTEKKyMsIGZ1enp5Cittc2dpZCAiQGQgQGkgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgIgorbXNnc3RyICJMJ0BpICVpIGRlbGxhIEBkIGhhIHVuIEBiICgjJUIpIG5vbiBhbGxvY2F0by4gIgorCisjLiBALWV4cGFuZGVkOiAnLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5NgorIywgYy1mb3JtYXQKK21zZ2lkICInLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICJMJ0BlIGRlbGxhIEBkICcuJyBuZWxsJ0BpICVpIGRlbGxhIEBkIG5vbiDDqCB0ZXJtaW5hdG8gZGEgTlVMTFxuIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4uJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIkwnQGUgZGVsbGEgQGQgJy4uJyBuZWxsJ0BpICVpIGRlbGxhIEBkIG5vbiDDqCB0ZXJtaW5hdG8gZGEgTlVMTFxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjA2Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBjaGFyYWN0ZXIgQHYuXG4iCittc2dzdHIgIkwnQGkgJWkgKCVRKSDDqCB1biBAdiBhIGNhcmF0dGVyaSBASS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGJsb2NrIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjExCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBAYiBAdi5cbiIKK21zZ3N0ciAiTCdAaSAlaSAoJVEpIMOoIHVuIEB2IGEgQGIoaSkgQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgZHVwbGljYXRlICcuJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE2CisjLCBmdXp6eQorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLicgQGUuXG4iCittc2dzdHIgIkwnQEUgw6ggdW4gZHVwbGljYXRvIGRlbGwnQGUgJy4nLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLi4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjEKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4uJyBAZS5cbiIKK21zZ3N0ciAiTCdARSDDqCB1biBkdXBsaWNhdG8gZGVsbCdAZSAnLi4nLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjYgZTJmc2NrL3Byb2JsZW0uYzoxNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVybmFsIGVycm9yOiBjb3VsZG4ndCBmaW5kIGRpcl9pbmZvIGZvciAlaS5cbiIKK21zZ3N0ciAiRXJyb3JlIGludGVybm86IGltcG9zc2liaWxlIHRyb3ZhcmUgZGlyX2luZm8gcGVyICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyByZWNfbGVuIG9mICVEciwgc2hvdWxkIGJlICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzEKKyMsIGZ1enp5Cittc2dpZCAiQEUgaGFzIHJlY19sZW4gb2YgJURyLCBAcyAlTi5cbiIKK21zZ3N0ciAiTCdARSBoYSByZWNfbGVuIGRpICVEciwgZG92cmViYmUgZXNzZXJlICVOLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgc3RydWN0dXJlOiAlbVxuIgorbXNnc3RyICJAQSBsYSBzdHJ1dHR1cmEgaWNvdW50OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcnkgYmxvY2tzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaXRlcmF0aW5nIG92ZXIgQGQgQGJzOiAlbVxuIgorbXNnc3RyICJFcnJvcmUgc2NvcnJlbmRvIGkgQGIoaSkgZGVsbGUgQGQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0NgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiRXJyb3JlIGxlZ2dlbmRvIGlsIEBiIGRlbGxhIEBkICViIChAaSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1MQorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiRXJyb3JlIHNjcml2ZW5kbyBpbCBAYiBkZWxsYSBAZCAlYiAoQGkgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2sgZm9yIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBuZXcgQGQgQGIgZm9yIEBpICVpICglcyk6ICVtXG4iCittc2dzdHIgIkBBIHVuIG51b3ZvIEBiIGRlbGxhIEBkIHBlciBsJ0BpICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRlYWxsb2NhdGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWFsbG9jYXRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkVycm9yZSBkZWFsbG9jYW5kbyBsJ0BpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAZCBAZSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuIgorbXNnc3RyICJMJ0BlIGRlbGxhIEBkIGRpICcuJyDDqCBncmFuZGUuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIEZJRk8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3MQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiTCdAaSAlaSAoJVEpIMOoIHVuYSBGSUZPIEBJLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgc29ja2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNzYKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIHNvY2tldC5cbiIKK21zZ3N0ciAiTCdAaSAlaSAoJVEpIMOoIHVuIHNvY2tldCBASS5cbiIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmaWxldHlwZSBmb3IgZW50cnkgJyVEbicgaW4gJXAgKCVpKSB0byAlTi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjgxCittc2dpZCAiU2V0dGluZyBmaWxldHlwZSBmb3IgQEUgdG8gJU4uXG4iCittc2dzdHIgIkltcG9zdGF6aW9uZSBkZWwgdGlwbyBkaSBmaWxlIHBlciBsJ0BFIGEgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgc2hvdWxkIGJlICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjg2CisjLCBmdXp6eQorbXNnaWQgIkBFIGhhcyBhbiBpbmNvcnJlY3QgZmlsZXR5cGUgKHdhcyAlRHQsIEBzICVOKS5cbiIKK21zZ3N0ciAiTCdARSBub24gw6ggZGVsIGdpdXN0byB0aXBvIGRpIGZpbGUgKGVyYSAlRHQsIGRvdnJlYmJlIGVzc2VyZSAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGZpbGV0eXBlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjkxCittc2dpZCAiQEUgaGFzIGZpbGV0eXBlIHNldC5cbiIKK21zZ3N0ciAiRScgaW1wb3N0YXRvIGlsIHRpcG8gZGkgZmlsZSBwZXIgbCdARS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSB6ZXJvLWxlbmd0aCBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTYKKyMsIGZ1enp5Cittc2dpZCAiQEUgaGFzIGEgQHogbmFtZS5cbiIKK21zZ3N0ciAiSWwgbm9tZSBkZWxsJ0BFIMOoIGRpIGx1bmdoZXp6YSBudWxsYS5cbiIKKworIy4gQC1leHBhbmRlZDogU3ltbGluayAlUSAoaW5vZGUgIyVpKSBpcyBpbnZhbGlkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDEKKyMsIGZ1enp5Cittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiSWwgc3ltbGluayAlUSAoQGkgIyVpKSBub24gw6ggdmFsaWRvLlxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgZm9yIGlub2RlICVpICglUSkgaXMgaW52YWxpZCAoJUlmKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzA2Cittc2dpZCAiQGEgQGIgQEYgQG4gKCVJZikuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTEKK21zZ2lkICJAZiBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBAUy5cbiIKK21zZ3N0ciAiIgorIklsIEBmIGNvbnRpZW5lIGZpbGVzIGRpIGdyYW5kaSBkaW1lbnNpb25pLCBtYSBuZWwgQFMgbm9uIMOoIHNwZWNpZmljYXRvIGlsICIKKyJmbGFnIExBUkdFX0ZJTEUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTYKKyMsIGZ1enp5Cittc2dpZCAiQHAgQGggJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4iCittc2dzdHIgIkBwIHVuIEBoICglZCk6IG5vZG8gKCVCKSBub24gcmVmZXJlbnppYXRvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiByZWZlcmVuY2VkIHR3aWNlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMyMQorIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuIgorbXNnc3RyICJAcCB1biBAaCAoJWQpOiBub2RvICglYikgcmVmZXJlbnppYXRvIGR1ZSB2b2x0ZVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjYKKyMsIGZ1enp5Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbiIKK21zZ3N0ciAiQHAgdW4gQGggKCVkKTogbm9kbyAoJUIpIGNvbiBoYXNoIG1pbmltbyBub24gdmFsaWRvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzMQorIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuIgorbXNnc3RyICJAcCB1biBAaCAoJWQpOiBub2RvICglYikgY29uIGhhc2ggbWFzc2ltbyBub24gdmFsaWRvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzNgorIywgZnV6enkKK21zZ2lkICJAbiBAaCAlZCAoJXEpLiAgIgorbXNnc3RyICJAaCAlZCBub24gdmFsaWRvICglcSkuICIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKTogYmFkIGJsb2NrIG51bWJlciAlYi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQwCittc2dpZCAiQHAgQGggJWQgKCVxKTogYmFkIEBiIG51bWJlciAlYi5cbiIKK21zZ3N0ciAiQHAgdW4gQGggJWQgKCVxKTogQGIgbm9uIHZhbGlkbyBudW1lcm8gJWIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiByb290IG5vZGUgaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkBwIEBoICVkOiByb290IG5vZGUgaXMgQG5cbiIKK21zZ3N0ciAiQHAgdW4gQGggKCVkKTogbm9kbyByb290IG5vbiB2YWxpZG9cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGxpbWl0ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzU1CisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gbGltaXQgKCVOKVxuIgorbXNnc3RyICJAcCB1biBAaCAoJWQpOiBub2RvICglQikgY29uIGxpbWl0ZSBub24gdmFsaWRvICglTilcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGNvdW50ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzYwCisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gY291bnQgKCVOKVxuIgorbXNnc3RyICJAcCB1biBAaCAoJWQpOiBudW1lcm8gKCVOKSBkaSBub2RvICglQikgbm9uIHZhbGlkb1xuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2NQorIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4iCittc2dzdHIgIkBwIHVuIEBoICglZCk6IG5vZG8gKCVCKSBjb24gdGFiZWxsYSBoYXNoIG5vbiBvcmRpbmF0YVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgZGVwdGggKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzAKKyMsIGZ1enp5Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBkZXB0aCAoJU4pXG4iCittc2dzdHIgIkBwIHVuIEBoICglZCk6IG5vZG8gKCVCKSBjb24gcHJvZm9uZGl0w6Agbm9uIHZhbGlkYVxuIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgaW4gJXAgKCVpKSBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzc1Cittc2dpZCAiRHVwbGljYXRlIEBFIGZvdW5kLiAgIgorbXNnc3RyICJUcm92YXRvIEBFIGR1cGxpY2F0by4gIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4KKyMuIEAtZXhwYW5kZWQ6IFJlbmFtZSB0byAlcworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgwCisjLCBuby1jLWZvcm1hdAorbXNnaWQgIiIKKyJARSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuIgorIlJlbmFtZSB0byAlcyIKK21zZ3N0ciAiIgorIkBFIGhhIHVuIG5vbWUgZmlsZSBub24gdW5pdm9jby5cbiIKKyJDYW1iaWFyZSBpbCBub21lIGluICVzIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgZm91bmQuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODUKKyMsIGZ1enp5Cittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisiVHJvdmF0byBAZSBkdXBsaWNhdG8gJyVEbicuXG4iCisiXHQlcCAoJWkpIMOoIGRhIHJpY29zdHJ1aXJlLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Jsb2Nrc19oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5MAorIywgZnV6enkKK21zZ2lkICJpX2Jsb2Nrc19oaSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mc2l6ZSBARiAlTiBAcyB6ZXJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBVbmV4cGVjdGVkIGJsb2NrIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTUKK21zZ2lkICJVbmV4cGVjdGVkIEBiIGluIEBoICVkICglcSkuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBpbiBncm91cCAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk5Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgaW4gQGcgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBmb3VuZCBpbiBncm91cCAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDA0Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgZm91bmQgaW4gQGcgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbF9oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwOQorIywgZnV6enkKK21zZ2lkICJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZpbGVfYWNsIEBGICVJZiBAcyB6ZXJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDE2Cittc2dpZCAiUGFzcyAzOiBDaGVja2luZyBAZCBjb25uZWN0aXZpdHlcbiIKK21zZ3N0ciAiUGFzc28gMzogQ29udHJvbGxvIGRlbGxhIGNvbm5ldHRpdml0w6AgZGkgQGRcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjEKK21zZ2lkICJAciBub3QgYWxsb2NhdGVkLiAgIgorbXNnc3RyICJAciBub24gYWxsb2NhdG8uIgorCisjLiBALWV4cGFuZGVkOiBObyByb29tIGluIGxvc3QrZm91bmQgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjYKK21zZ2lkICJObyByb29tIGluIEBsIEBkLiAgIgorbXNnc3RyICJOb24gYyfDqCBzcGF6aW8gbmVsbGEgQGQgQGwiCisKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzYKK21zZ2lkICIvQGwgbm90IGZvdW5kLiAgIgorbXNnc3RyICIvQGwgbm9uIHRyb3ZhdGEuICIKKworIy4gQC1leHBhbmRlZDogJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIHNob3VsZCBiZSAlcSAoJWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDEKK21zZ2lkICInLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKK21zZ3N0ciAiJy4uJyBpbiAlUSAoJWkpIMOoICVQICglaiksIEBzICVxICglZCkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBvciBub24tZXhpc3RlbnQgL2xvc3QrZm91bmQuICBDYW5ub3QgcmVjb25uZWN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDYKKyMsIGZ1enp5Cittc2dpZCAiQmFkIG9yIG5vbi1leGlzdGVudCAvQGwuICBDYW5ub3QgcmVjb25uZWN0LlxuIgorbXNnc3RyICIvQGwgbm9uIHZhbGlkYSBvIGluZXNpc3RlbnRlLiBJbXBvc3NpYmlsZSByaWNvbm5ldHRlcmUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkIG5vdCBleHBhbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZXhwYW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNwYW5kZXJlIC9AbDogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVjb25uZWN0ICVpOiAlbVxuIgorbXNnc3RyICJJbXBvc3NpYmlsZSByaWNvbm5ldHRlcmUgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL0BsOiAlbVxuIgorbXNnc3RyICJFcnJvcmUgY2VyY2FuZG8gL0BsOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Jsb2NrOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfQGI6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgImV4dDJmc19uZXdfYmxvY2s6ICVtIGNlcmNhbmRvIGRpIGNyZWFyZSBsYSBAZCAvQGxcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19pbm9kZTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDcxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfQGk6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgImV4dDJmc19uZXdfQGk6ICVtIGNlcmNhbmRvIGRpIGNyZWFyZSBsYSBAZCAvQGxcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X2Rpcl9AYjogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IEBkIEBiXG4iCittc2dzdHIgImV4dDJmX25ld19kaXJfYmxvY2s6ICVtIGNyZWFuZG8gdW4gbnVvdm8gQGIgQGRcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazogJW0gd2hpbGUgd3JpdGluZyB0aGUgZGlyZWN0b3J5IGJsb2NrIGZvciAvbG9zdCtmb3VuZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc193cml0ZV9kaXJfQGI6ICVtIHdoaWxlIHdyaXRpbmcgdGhlIEBkIEBiIGZvciAvQGxcbiIKK21zZ3N0ciAiZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazogJW0gc2NyaXZlbmRvIGlsIEBiIEBkIHBlciAvQGxcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgYWRqdXN0aW5nIGlub2RlIGNvdW50IG9uIGlub2RlICVpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBhZGp1c3RpbmcgQGkgY291bnQgb24gQGkgJWlcbiIKK21zZ3N0ciAiRXJyb3JlIGFnZ2l1c3RhbmRvIGlsIG51bWVybyBAaSBuZWxsJ0BpICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkbid0IGZpeCBwYXJlbnQgb2YgaW5vZGUgJWk6ICVtXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgZGlyZWN0b3J5IGVudHJ5XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IEBkIEBlXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgcm9vdCBkaXJlY3RvcnkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHJvb3QgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiRXJyb3JlIGNyZWFuZG8gbGEgQGQgcm9vdCAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyAvbG9zdCtmb3VuZCBkaXJlY3RvcnkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIC9AbCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJFcnJvcmUgY3JlYW5kbyBsYSBAZCAvQGwgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3Rvcnk7IGFib3J0aW5nLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MTYKKyMsIGZ1enp5Cittc2dpZCAiQHIgaXMgbm90IGEgQGQ7IGFib3J0aW5nLlxuIgorbXNnc3RyICJMJ0ByIG5vbiDDqCB1bmEgQGQ7IGNhbmNlbGxhemlvbmUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MjEKK21zZ2lkICJDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgQHIuXG4iCittc2dzdHIgIkltcG9zc2liaWxlIHByb2NlZGVyZSBzZW56YSB1biBAci5cbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgaXMgbm90IGEgZGlyZWN0b3J5IChpbm89JWkpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUzMQorIywgYy1mb3JtYXQKK21zZ2lkICIvQGwgaXMgbm90IGEgQGQgKGlubz0laSlcbiIKK21zZ3N0ciAiL0BsIG5vbiDDqCB1bmEgQGQgKGlubz0laSlcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTM4Cittc2dpZCAiUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3Rvcmllc1xuIgorbXNnc3RyICJQYXNzbyAzQTogT3R0aW1penphemlvbmUgZGVsbGUgZGlyZWN0b3J5XG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkaXJzX3RvX2hhc2ggaXRlcmF0b3I6ICVtXG4iCittc2dzdHIgIkltcG9zc2liaWxlIGNyZWFyZSB1biBpdGVyYXRvcmUgZGlyc190b19oYXNoOiAlbSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQ4CisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byBvcHRpbWl6ZSBkaXJlY3RvcnkgJXEgKCVkKTogJW1cbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgb3R0aW1penphcmUgbGEgZGlyZWN0b3J5ICVxICglZCk6ICVtIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NTMKK21zZ2lkICJPcHRpbWl6aW5nIGRpcmVjdG9yaWVzOiAiCittc2dzdHIgIk90dGltaXp6YXppb25lIGRlbGxlIGRpcmVjdG9yeTogIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzAKK21zZ2lkICJQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHNcbiIKK21zZ3N0ciAiUGFzcyA0OiBDb250cm9sbG8gZGVsIG51bWVybyBkZWkgcmlmZXJpbWVudGlcbiIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCB6ZXJvLWxlbmd0aCBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTc1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAdSBAeiBAaSAlaS4gICIKK21zZ3N0ciAiQGkgQG8gQEkgJWkgbmVsIEBTLlxuIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIGlub2RlICVpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAaSAlaVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg1CisjLCBmdXp6eQorbXNnaWQgIkBpICVpIHJlZiBjb3VudCBpcyAlSWwsIEBzICVOLiAgIgorbXNnc3RyICJJbCBjb250YXRvcmUgcmlmZXJpbWVudGkgZGVsbCdAaSAlaSDDqCAlSWwsIEBzICVOLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4OQorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiQVRURU5aSU9ORTogRVJST1JFIERJIFBST0dSQU1NQVpJT05FIElOIEUyRlNDSyFcbiIKKyJcdE8gUVVBTENIRSBURVNUQSBWVU9UQSAoVFUpIFNUQSBDT05UUk9MTEFORE8gVU4gRklMRSBTWVNURU0gTU9OVEFUTyAiCisiKExJVkUpLlxuIgorIkBpX2xpbmtfaW5mb1slaV0gw6ggJU4sIEBpLmlfbGlua3NfY291bnQgw6ggJUlsLiBEb3ZyZWJiZXJvIGVzc2VyZSBpZGVudGljaSFcbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU5OQorIywgZnV6enkKK21zZ2lkICJQYXNzIDU6IENoZWNraW5nIEBnIHN1bW1hcnkgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiUGFzc28gNTogQ29udHJvbGxvIGRlbCByaWVwaWxvZ28gZGVsbGUgaW5mb3JtYXppb25pIGRlbCBAZ1xuIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBpbm9kZSBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDQKKyMsIGZ1enp5Cittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGkgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICJSaWVtcGltZW50byBhbGxhIGZpbmUgZGkgQGkgQEIgbm9uIGltcG9zdGF0by4gIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDkKKyMsIGZ1enp5Cittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGIgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICJSaWVtcGltZW50byBhbGxhIGZpbmUgZGkgQGIgQEIgbm9uIGltcG9zdGF0by4gIgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjE0Cittc2dpZCAiQGIgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiRGlmZmVyZW56ZSBuZWxsYSBAQiBkZWkgQGI6ICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYzNAorbXNnaWQgIkBpIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIkRpZmZlcmVuemUgbmVsbGEgQEIgZGVnbGkgQGk6ICIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTQKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIk51bWVybyBkZWdsaSBAaSBsaWJlcmkgZXJyYXRvIHBlciBpbCBAZyAjJWcgKCVpLCBjb250YXRpPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTkKK21zZ2lkICJEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIk51bWVybyBkZWxsZSBkaXJlY3RvcnkgZXJyYXRvIHBlciBpbCBAZyAjJWcgKCVpLCBjb250YXRpPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjY0Cittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiTnVtZXJvIGRlZ2xpIEBpIGxpYmVyaSBlcnJhdG8gKCVpLCBjb250YXRpPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjkKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIk51bWVybyBkZWkgQGIoaSkgbGliZXJpIGVycmF0byBwZXIgaWwgQGcgIyVnICglYiwgY29udGF0aT0lYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY3NAorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIk51bWVybyBkZWkgQGIoaSkgbGliZXJpIGVycmF0byAoJWIsIGNvbnRhdGk9JWMpLlxuIgorCisjLiBALWV4cGFuZGVkOiBQUk9HUkFNTUlORyBFUlJPUjogZmlsZXN5c3RlbSAoIyVOKSBiaXRtYXAgZW5kcG9pbnRzICglYiwgJWMpIGRvbid0IG1hdGNoIGNhbGN1bGF0ZWQgYml0bWFwIAorIy4gQC1leHBhbmRlZDogZW5kcG9pbnRzICglaSwgJWopXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY3OQorbXNnaWQgIiIKKyJQUk9HUkFNTUlORyBFUlJPUjogQGYgKCMlTikgQEIgZW5kcG9pbnRzICglYiwgJWMpIGRvbid0IG1hdGNoIGNhbGN1bGF0ZWQgQEIgIgorImVuZHBvaW50cyAoJWksICVqKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY4NQorIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogZnVkZ2luZyBlbmQgb2YgYml0bWFwICglTilcbiIKK21zZ3N0ciAiIgorIkVycm9yZSBpbnRlcm5vOiBpbXBvc3NpYmlsZSBpbmRpdmlkdWFyZSBsYSBmaW5lIGRlbGxhIG1hcHBhIGRpIGJpdCAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgaW5vZGUgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGkgQEI6ICVtXG4iCittc2dzdHIgIkVycm9yZSBkdXJhbnRlIGxhIGxldHR1cmEgZGVsbCdAaSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBiIEBCOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGJsb2NrKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGIocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgaW5vZGUocykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAaShzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBSZWNyZWF0ZSBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MzIKKyMsIGZ1enp5Cittc2dpZCAiUmVjcmVhdGUgQGoiCittc2dzdHIgIlJpY3JlYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzM3Cittc2dpZCAiVXBkYXRlIHF1b3RhIGluZm8gZm9yIHF1b3RhIHR5cGUgJU4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc2V0dGluZyBibG9jayBncm91cCBjaGVja3N1bSBpbmZvOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgQGIgQGcgY2hlY2tzdW0gaW5mbzogJW1cbiIKK21zZ3N0ciAiaW1wb3N0YW5kbyBsJ2lub2RlIGRlbCBibG9jY28gZGlmZXR0b3NvIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgZmlsZSBzeXN0ZW0gaW5mbzogJW1cbiIKK21zZ3N0ciAiRXJyb3JlIGR1cmFudGUgbGEgbGV0dHVyYSBkZWxsJ0BpICVpOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZmx1c2hpbmcgd3JpdGVzIHRvIHN0b3JhZ2UgZGV2aWNlOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmhhbmRsZWQgZXJyb3IgY29kZSAoMHgleCkhXG4iCittc2dzdHIgIkNvZGljZSBlcnJvcmUgbm9uIGdlc3RpdG8gKDB4JXgpIVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5OTYgZTJmc2NrL3Byb2JsZW0uYzoyMDAwCittc2dpZCAiSUdOT1JFRCIKK21zZ3N0ciAiSUdOT1JBVE8iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlZCwgZWxhcHNlZCB0aW1lOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorbXNnc3RyICJNZW1vcmlhIHVzYXRhOiAlZCwgdGVtcG8gcmltYXN0bzogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic2l6ZSBvZiBpbm9kZT0lZFxuIgorbXNnc3RyICJkaW1lbnNpb25lIGRpIHVuIGlub2RlPSVkXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjExOQorbXNnaWQgIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iCittc2dzdHIgImluaXppYW5kbyBsYSBzY2Fuc2lvbmUgZGVnbGkgaW5vZGUiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjEzMAorbXNnaWQgIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iCittc2dzdHIgImR1cmFudGUgbGEgc2NhbnNpb25lIGRlbGwnaW5vZGUiCisKKyM6IGUyZnNjay9zdXBlci5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19ibG9ja19pdGVyYXRlIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAiY2hpYW1hbmRvIGV4dDJmc19ibG9ja19pdGVyYXRlIHBlciBsJ2lub2RlICVkIgorCisjOiBlMmZzY2svc3VwZXIuYzoyMTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZm9yIGlub2RlICVkIgorbXNnc3RyICJjaGlhbWFuZG8gZXh0MmZzX2FkanVzdF9lYV9yZWZvY3VudCBwZXIgbCdpbm9kZSAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6Mjc0Cittc2dpZCAiVHJ1bmNhdGluZyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzUKK21zZ2lkICJDbGVhcmluZyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstcGFueXJjZGZ2dERGVl0gWy1iIHN1cGVyYmxvY2tdIFstQiBibG9ja3NpemVdXG4iCisiXHRcdFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBbLVAgcHJvY2Vzc19pbm9kZV9zaXplXVxuIgorIlx0XHRbLWx8LUwgYmFkX2Jsb2Nrc19maWxlXSBbLUMgZmRdIFstaiBleHRlcm5hbF9qb3VybmFsXVxuIgorIlx0XHRbLUUgZXh0ZW5kZWQtb3B0aW9uc10gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJVdGlsaXp6bzogJXMgWy1wYW55cmNkZnZzdERGU1ZdIFstYiBzdXBlcmJsb2Njb10gWy1CIGRpbWVuc2lvbmVfYmxvY2NvXVxuIgorIlx0XHRbLUkgYmxvY2NoaV9idWZmZXJfaW5vZGVdIFstUCBwcm9jZXNzYV9kaW1lbnNpb25lX2lub2RlXVxuIgorIlx0XHRbLWx8LUwgZmlsZV9ibG9jY2hpX25vbl92YWxpZGldIFstQyBmZF0gWy1qIGV4dC1qb3VybmFsXVxuIgorIlx0XHRbLUUgb3B6aW9uaS1lc3Rlc2VdIGRldmljZVxuIgorCisjOiBlMmZzY2svdW5peC5jOjgwCittc2dpZCAiIgorIlxuIgorIkVtZXJnZW5jeSBoZWxwOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgcmVwYWlyIChubyBxdWVzdGlvbnMpXG4iCisiIC1uICAgICAgICAgICAgICAgICAgIE1ha2Ugbm8gY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbVxuIgorIiAteSAgICAgICAgICAgICAgICAgICBBc3N1bWUgXCJ5ZXNcIiB0byBhbGwgcXVlc3Rpb25zXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBiYWQgYmxvY2tzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmFkYmxvY2sgIgorImxpc3RcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBjbGVhblxuIgorbXNnc3RyICIiCisiXG4iCisiQWl1dG8gZGkgZW1lcmdlbnphOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBSaXBhcmF6aW9uZSBhdXRvbWF0aWNhIChzZW56YSBkb21hbmRlKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBOb24gZWZmZXR0dWEgbW9kaWZpY2hlIG5lbCBmaWxlIHN5c3RlbVxuIgorIiAteSAgICAgICAgICAgICAgICAgICBSaXNwb3N0YSBhZmZlcm1hdGl2YSBhIHR1dHRlIGxlIGRvbWFuZGVcbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgQ2VyY2EgYmxvY2NoaSBub24gdmFsaWRpIGUgbGkgYWdnaXVuZ2UgbmVsbCdhcHBvc2l0byAiCisiZWxlbmNvXG4iCisiIC1mICAgICAgICAgICAgICAgICAgIEZvcnphIGlsIGNvbnRyb2xsbyBhbmNoZSBzZSBpbCBmaWxlIHN5c3RlbSDDqCBzZWduYXRvICIKKyJjb21lIHB1bGl0b1xuIgorCisjOiBlMmZzY2svdW5peC5jOjg2CisjLCBmdXp6eQorbXNnaWQgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgQmUgdmVyYm9zZVxuIgorIiAtYiBzdXBlcmJsb2NrICAgICAgICBVc2UgYWx0ZXJuYXRpdmUgc3VwZXJibG9ja1xuIgorIiAtQiBibG9ja3NpemUgICAgICAgICBGb3JjZSBibG9ja3NpemUgd2hlbiBsb29raW5nIGZvciBzdXBlcmJsb2NrXG4iCisiIC1qIGV4dGVybmFsX2pvdXJuYWwgIFNldCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbFxuIgorIiAtbCBiYWRfYmxvY2tzX2ZpbGUgICBBZGQgdG8gYmFkYmxvY2tzIGxpc3RcbiIKKyIgLUwgYmFkX2Jsb2Nrc19maWxlICAgU2V0IGJhZGJsb2NrcyBsaXN0XG4iCittc2dzdHIgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgTW9kYWxpdMOgIHByb2xpc3NhXG4iCisiIC1iIHN1cGVyYmxvY2NvICAgICAgIFVzYSB1biBzdXBlcmJsb2NjbyBhbHRlcm5hdGl2b1xuIgorIiAtQiBkaW1fYmxvY2NvICAgICAgICBGb3J6YSBsYSBkaW1lbnNpb25lIGRlaSBibG9jY2hpIGR1cmFudGUgbGEgcmljZXJjYSBkZWwgIgorInN1cGVyYmxvY2NvXG4iCisiIC1qIGpvdXJuYWwtZXN0ZXJubyAgIFNwZWNpZmljYSBsYSBwb3NpemlvbmUgZGVsIGpvdXJuYWwgZXN0ZXJub1xuIgorIiAtbCBmaWxlX2JhZF9ibG9ja3MgICBBZ2dpdW5naSBhbGxhIGxpc3RhIGRlaSBibG9jY2hpIG5vbiB2YWxpZGlcbiIKKyIgLUwgZmlsZV9iYWRfYmxvY2tzICAgSW1wb3N0YSBsYSBsaXN0YSBkZWkgYmxvY2NoaSBub24gdmFsaWRpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogJXUvJXUgZmlsZXMgKCUwZC4lZCUlIG5vbi1jb250aWd1b3VzKSwgJWxsdS8lbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIlczogJWQvJWQgZmlsZXMgKCUwZC4lZCUlIG5vbiBjb250aWd1aSksICVkLyVkIGJsb2NjaGlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSBpbm9kZXMgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBmaWxlICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBmaWxlcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yeSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3JpZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxNzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAgICAgICAjIG9mIGlub2RlcyB3aXRoIGluZC9kaW5kL3RpbmQgYmxvY2tzOiAldS8ldS8ldVxuIgorbXNnc3RyICIgICAgICAgICAjIGRpIGlub2RlIGNvbiBibG9jY2hpIGluZC9kaW5kL3RpbmQ6ICVkLyVkLyVkXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc5Cittc2dpZCAiICAgICAgICAgICAgIEV4dGVudCBkZXB0aCBoaXN0b2dyYW06ICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJsbHUgYmxvY2sgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dpZF9wbHVyYWwgIiUxMmxsdSBibG9ja3MgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJhZCBibG9ja1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJhZCBibG9ja3NcbiIKK21zZ3N0clswXSAiJTEydSBibG9jY28gZGFubmVnZ2lhdG9cbiIKK21zZ3N0clsxXSAiJTEydSBibG9jY2hpIGRhbm5lZ2dpYXRpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbGFyZ2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGxhcmdlIGZpbGVzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlc1xuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJTEydSBmaWxlIHJlZ29sYXJlXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IGZpbGUgcmVnb2xhcmlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBkaXJlY3RvcnlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBkaXJlY3Rvcmllc1xuIgorbXNnc3RyWzBdICIlMTJ1IGRpcmVjdG9yeVxuIgorbXNnc3RyWzFdICIlMTJ1IGRpcmVjdG9yeVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBibG9jayBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlmb1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpZm9zXG4iCittc2dzdHJbMF0gIiUxMnUgZmlmb1xuIgorbXNnc3RyWzFdICIlMTJ1IGZpZm9cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsaW5rXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGlua3NcbiIKK21zZ3N0clswXSAiJTEydSBjb2xsZWdhbWVudG9cbiIKK21zZ3N0clsxXSAiJTEydSBjb2xsZWdhbWVudGlcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzeW1ib2xpYyBsaW5rIgorbXNnaWRfcGx1cmFsICIlMTJ1IHN5bWJvbGljIGxpbmtzIgorbXNnc3RyWzBdICIlMTJ1IGNvbGxlZ2FtZW50byBzaW1ib2xpY28iCittc2dzdHJbMV0gIiUxMnUgY29sbGVnYW1lbnRpIHNpbWJvbGljaSIKKworIzogZTJmc2NrL3VuaXguYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmspXG4iCittc2dpZF9wbHVyYWwgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rcylcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgc29ja2V0XG4iCittc2dpZF9wbHVyYWwgIiUxMnUgc29ja2V0c1xuIgorbXNnc3RyWzBdICIlMTJ1IHNvY2tldFxuIgorbXNnc3RyWzFdICIlMTJ1IHNvY2tldFxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IGZpbGVcbiIKK21zZ3N0clsxXSAiJTEydSBmaWxlXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjMyIG1pc2MvYmFkYmxvY2tzLmM6OTkzIG1pc2MvdHVuZTJmcy5jOjIxMjIgbWlzYy91dGlsLmM6MzE2CisjOiByZXNpemUvbWFpbi5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuIgorbXNnc3RyICJuZWwgZGV0ZXJtaW5hcmUgc2UgJXMgw6ggbW9udGF0by4iCisKKyM6IGUyZnNjay91bml4LmM6MjUzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiQXR0ZW56aW9uZTogJXMgw6ggJXMuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgaW4gdXNlLlxuIgorbXNnc3RyICJBdHRlbnppb25lOiAlcyDDqCAlcy5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIiVzIMOoIG1vbnRhdG86ICIKKworIzogZTJmc2NrL3VuaXguYzoyNjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGluIHVzZS5cbiIKK21zZ3N0ciAiJXMgw6ggJXMuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY2Cittc2dpZCAiIgorIkNhbm5vdCBjb250aW51ZSwgYWJvcnRpbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBjb250aW51YXJlLCBvcGVyYXppb25lIGFubnVsbGF0YS5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjgKK21zZ2lkICIiCisiXG4iCisiXG4iCisiV0FSTklORyEhISAgVGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4gICBJZiB5b3UgY29udGludWUgeW91ICoqKldJTEwqKipcbiIKKyJjYXVzZSAqKipTRVZFUkUqKiogZmlsZXN5c3RlbSBkYW1hZ2UuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJBVFRFTlpJT05FOiBpbCBmaWxlIHN5c3RlbSDDqCBtb250YXRvLiBDb250aW51YW5kbyBsJ29wZXJhemlvbmVcbiIKKyJ2ZXJyYW5ubyBjYXVzYXRpIHNlcmkgZGFubmkgYWwgZmlsZSBzeXN0ZW0uXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjczCittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIGNvbnRpbnVlIgorbXNnc3RyICJDb250aW51YXJlIgorCisjOiBlMmZzY2svdW5peC5jOjI3NQorbXNnaWQgImNoZWNrIGFib3J0ZWQuXG4iCittc2dzdHIgImNvbnRyb2xsbyBhbm51bGxhdG8uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MzY4Cittc2dpZCAiIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMiCittc2dzdHIgIiBjb250aWVuZSB1biBmaWxlIHN5c3RlbSBjb24gZXJyb3JpIgorCisjOiBlMmZzY2svdW5peC5jOjM3MAorbXNnaWQgIiB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkIgorbXNnc3RyICIgbm9uIMOoIHN0YXRvIHNtb250YXRvIGluIG1hbmllcmEgY29ycmV0dGEiCisKKyM6IGUyZnNjay91bml4LmM6MzcyCittc2dpZCAiIHByaW1hcnkgc3VwZXJibG9jayBmZWF0dXJlcyBkaWZmZXJlbnQgZnJvbSBiYWNrdXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBiZWVuIG1vdW50ZWQgJXUgdGltZXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgw6ggc3RhdG8gbW9udGF0byAldSB2b2x0ZSBzZW56YSBlc3NlcmUgY29udHJvbGxhdG8iCisKKyM6IGUyZnNjay91bml4LmM6MzgzCittc2dpZCAiIGhhcyBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0aW1lIGluIHRoZSBmdXR1cmUiCittc2dzdHIgIiBwcmVzZW50YSBvcmFyaW8gZGkgdWx0aW1vIGNvbnRyb2xsbyBkZWwgZmlsZSBzeXN0ZW0gbmVsIGZ1dHVybyIKKworIzogZTJmc2NrL3VuaXguYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBnb25lICV1IGRheXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgbm9uIMOoIHN0YXRvIGNvbnRyb2xsYXRvIG5lZ2xpIHVsdGltaSAldSBnaW9ybmkiCisKKyM6IGUyZnNjay91bml4LmM6Mzk4Cittc2dpZCAiLCBjaGVjayBmb3JjZWQuXG4iCittc2dzdHIgIiwgY29udHJvbGxvIGZvcnphdG8uXG4iCisKKyM6IGUyZnNjay91bml4LmM6NDMxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4sICV1LyV1IGZpbGVzLCAlbGx1LyVsbHUgYmxvY2tzIgorbXNnc3RyICIlczogYSBwb3N0bywgJWQvJWQgZmlsZSwgJWQvJWQgYmxvY2NoaSIKKworIzogZTJmc2NrL3VuaXguYzo0NTEKKyMsIGZ1enp5Cittc2dpZCAiIChjaGVjayBkZWZlcnJlZDsgb24gYmF0dGVyeSkiCittc2dzdHIgIiAoY29udHJvbGxvIGRvcG8gaWwgcHJvc3NpbW8gbW91bnQpIgorCisjOiBlMmZzY2svdW5peC5jOjQ1NAorbXNnaWQgIiAoY2hlY2sgYWZ0ZXIgbmV4dCBtb3VudCkiCittc2dzdHIgIiAoY29udHJvbGxvIGRvcG8gaWwgcHJvc3NpbW8gbW91bnQpIgorCisjOiBlMmZzY2svdW5peC5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGNoZWNrIGluICVsZCBtb3VudHMpIgorbXNnc3RyICIgKGNvbnRyb2xsbyB0cmEgJWxkIG1vdW50KSIKKworIzogZTJmc2NrL3VuaXguYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IENvdWxkbid0IG9wZW4gL2Rldi9udWxsICglcylcbiIKK21zZ3N0ciAiRVJST1JFOiBJbXBvc3NpYmlsZSBhcHJpcmUgL2Rldi9udWxsICglcylcbiIKKworIzogZTJmc2NrL3VuaXguYzo2NzUKK21zZ2lkICJJbnZhbGlkIEVBIHZlcnNpb24uXG4iCittc2dzdHIgIlZlcnNpb25lIEVBIG5vbiB2YWxpZGEuXG4iCisKKyM6IGUyZnNjay91bml4LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZXh0ZW5kZWQgb3B0aW9uOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6NzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gZTJmc2NrIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6Nzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHZhbGlkYXRpbmcgZmlsZSBkZXNjcmlwdG9yICVkOiAlc1xuIgorbXNnc3RyICJFcnJvcmUgY29udmFsaWRhbmRvIGlsIGRlc2NyaXR0b3JlIGRpIGZpbGUgJWQ6ICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODAxCisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgIkluZm9ybWF6aW9uaSBkaSBjb21wbGV0YW1lbnRvIGRlc2NyaXR0b3JlIGRpIGZpbGUgbm9uIHZhbGlkZSIKKworIzogZTJmc2NrL3VuaXguYzo4MTYKKyMsIGZ1enp5Cittc2dpZCAiT25seSBvbmUgb2YgdGhlIG9wdGlvbnMgLXAvLWEsIC1uIG9yIC15IG1heSBiZSBzcGVjaWZpZWQuIgorbXNnc3RyICJTb2xvIHVuYSB0cmEgbGUgb3B6aW9uaSAtcC8tYSwgLW4gbyAteSBwdcOyIGVzc2VyZSBzcGVjaWZpY2F0YS4iCisKKyM6IGUyZnNjay91bml4LmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSAtdCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorbXNnc3RyICJMJ29wemlvbmUgLXQgbm9uIMOoIHN1cHBvcnRhdGEgZGEgcXVlc3RhIHZlcnNpb25lIGRpIGUyZnNjay5cbiIKKworIzogZTJmc2NrL3VuaXguYzo4NjggZTJmc2NrL3VuaXguYzo5NDIgbWlzYy90dW5lMmZzLmM6ODc5IG1pc2MvdHVuZTJmcy5jOjExNzQKKyM6IG1pc2MvdHVuZTJmcy5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmlzb2x2ZXJlICclcyciCisKKyM6IGUyZnNjay91bml4LmM6OTIxCittc2dpZCAiVGhlIC1uIGFuZCAtRCBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6OTI2Cittc2dpZCAiVGhlIC1uIGFuZCAtYyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6OTMxCisjLCBmdXp6eQorbXNnaWQgIlRoZSAtbiBhbmQgLWwvLUwgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiTGUgb3B6aW9uaSAtYyBlIC1JLy1MIG5vbiBwb3Nzb25vIGVzc2VyZSB1c2F0ZSBjb250ZW1wb3JhbmVhbWVudGUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6OTg1Cittc2dpZCAiVGhlIC1jIGFuZCB0aGUgLWwvLUwgb3B0aW9ucyBtYXkgbm90IGJlIGJvdGggdXNlZCBhdCB0aGUgc2FtZSB0aW1lLlxuIgorbXNnc3RyICJMZSBvcHppb25pIC1jIGUgLUkvLUwgbm9uIHBvc3Nvbm8gZXNzZXJlIHVzYXRlIGNvbnRlbXBvcmFuZWFtZW50ZS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMkZTQ0tfSkJEX0RFQlVHIFwiJXNcIiBub3QgYW4gaW50ZWdlclxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTA0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSW52YWxpZCBub24tbnVtZXJpYyBhcmd1bWVudCB0byAtJWMgKFwiJXNcIilcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBpbnRlcnZhbCBpcyAldSBzZWNvbmRzIGFuZCB0b3RhbCB3YWl0IHRpbWUgaXMgJXUgc2Vjb25kcy4gUGxlYXNlICIKKyJ3YWl0Li4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMTQ5IGUyZnNjay91bml4LmM6MTE1NAorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBNTVAgYmxvY2siCittc2dzdHIgImltcG9zdGFuZG8gaWwgc3VwZXJibG9jY28iCisKKyM6IGUyZnNjay91bml4LmM6MTE1NiBtaXNjL3R1bmUyZnMuYzoyMDQ5Cittc2dpZCAiIgorIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSBpcyBub3QgaW4gdXNlIG9uIGFueSBub2RlLCBydW46XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V9J1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTIwNworbXNnaWQgIkVycm9yOiBleHQyZnMgbGlicmFyeSB2ZXJzaW9uIG91dCBvZiBkYXRlIVxuIgorbXNnc3RyICJFcnJvcmU6IHZlcnNpb25lIG9ic29sZXRhIGRlbGxhIGxpYnJlcmlhIGV4dDJmcyFcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjE0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGluaXRpYWxpemUgcHJvZ3JhbSIKK21zZ3N0ciAidGVudGFuZG8gZGkgaW5pemlhbGl6emFyZSBpbCBwcm9ncmFtbWEiCisKKyM6IGUyZnNjay91bml4LmM6MTIzNworIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzLCAlc1xuIgorbXNnc3RyICJcdFV0aWxpenphbmRvICVzLCAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEyNDkKK21zZ2lkICJuZWVkIHRlcm1pbmFsIGZvciBpbnRlcmFjdGl2ZSByZXBhaXJzIgorbXNnc3RyICJzZXJ2ZSBpbCB0ZXJtaW5hbGUgcGVyIGlsIHJpcGFybyBpbnRlcmF0dGl2byIKKworIzogZTJmc2NrL3VuaXguYzoxMzAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi5cbiIKK21zZ3N0ciAiJXMgY2VyY2FuZG8gdHJhIGkgYmxvY2NoaSBkaSBiYWNrdXAuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzA1Cittc2dpZCAiU3VwZXJibG9jayBpbnZhbGlkLCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDYKK21zZ2lkICJHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiIKK21zZ3N0ciAiSSBkZXNjcml0dG9yaSBkaSBncnVwcG8gc2VtYnJhbm8gbm9uIHZhbGlkaS4uLiIKKworIzogZTJmc2NrL3VuaXguYzoxMzE2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgdXNpbmcgdGhlIGJhY2t1cCBibG9ja3MiCittc2dzdHIgImR1cmFudGUgbGEgbGV0dHVyYSBkZWxsJ2lub2RlIG51bWVybyAxIgorCisjOiBlMmZzY2svdW5peC5jOjEzMjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBnb2luZyBiYWNrIHRvIG9yaWdpbmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiJXM6IG5vbiDDqCBzdGF0byB0cm92YXRvIHVuIHN1cGVyYmxvY2NvIHZhbGlkbyBkZWwgam91cm5hbFxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNDkKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gcmV2aXNpb24gaXMgYXBwYXJlbnRseSB0b28gaGlnaCBmb3IgdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKKyIoT3IgdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jayBpcyBjb3JydXB0KVxuIgorIlxuIgorbXNnc3RyICIiCisiTGEgcmV2aXNpb25lIGRlbCBmaWxlIHN5c3RlbSBzZW1icmEgdHJvcHBvIGFsdGEgcGVyIHF1ZXN0YSB2ZXJzaW9uZSBkaSAiCisiZTJmc2NrLlxuIgorIihPIGlsIHN1cGVyLWJsb2NjbyBkZWwgZmlsZSBzeXN0ZW0gw6ggZGFubmVnZ2lhdG8pXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1NgorbXNnaWQgIkNvdWxkIHRoaXMgYmUgYSB6ZXJvLWxlbmd0aCBwYXJ0aXRpb24/XG4iCittc2dzdHIgIkUnIHBvc3NpYmlsZSBjaGUgcXVlc3RhIHNpYSB1bmEgcGFydGl6aW9uZSBkaSBkaW1lbnNpb25lIHplcm8/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSBvciBiZSByb290XG4iCittc2dzdHIgIlNlcnZlIGFjY2Vzc28gZGkgdGlwbyAlcyBhbCBmaWxlIHN5c3RlbSBvIMOoIG5lY2Vzc2FyaW8gZXNzZXJlIHJvb3RcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY0Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICJEZXZpY2Ugbm9uIGVzaXN0ZW50ZSBvIGRpIHN3YXA/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM2NgorbXNnaWQgIkZpbGVzeXN0ZW0gbW91bnRlZCBvciBvcGVuZWQgZXhjbHVzaXZlbHkgYnkgYW5vdGhlciBwcm9ncmFtP1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTM3MAorIywgZnV6enkKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgZGV2aWNlP1xuIgorbXNnc3RyICJEZXZpY2Ugbm9uIGVzaXN0ZW50ZSBvIGRpIHN3YXA/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM3MworbXNnaWQgIiIKKyJEaXNrIHdyaXRlLXByb3RlY3RlZDsgdXNlIHRoZSAtbiBvcHRpb24gdG8gZG8gYSByZWFkLW9ubHlcbiIKKyJjaGVjayBvZiB0aGUgZGV2aWNlLlxuIgorbXNnc3RyICIiCisiRGlzY28gcHJvdGV0dG8gZGEgc2NyaXR0dXJhOiB1c2FyZSBsJ29wemlvbmUgLW4gcGVyIGNvbnRyb2xsYXJlXG4iCisiaW4gbW9kYWxpdMOgIHNvbGEgbGV0dHVyYS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDM3Cittc2dpZCAiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIgorbXNnc3RyICJVdGlsaXp6YXJlIHVuYSB2ZXJzaW9uZSBwacO5IG51b3ZhIGRpIGUyZnNjay4iCisKKyM6IGUyZnNjay91bml4LmM6MTQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBleHQzIGpvdXJuYWwgZm9yICVzIgorbXNnc3RyICJjb250cm9sbGFuZG8gaWwgam91cm5hbCBleHQzIHBlciAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNDkyCittc2dpZCAiIgorIldhcm5pbmc6IHNraXBwaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYmVjYXVzZSBkb2luZyBhIHJlYWQtb25seSBmaWxlc3lzdGVtICIKKyJjaGVjay5cbiIKK21zZ3N0ciAiIgorIkF0dGVuemlvbmU6IGVzc2VuZG8gdW4gY29udHJvbGxvIGEgc29sYSBsZXR0dXJhLCBpbCBqb3VybmFsIG5vbiB2ZXJyw6AgIgorInJpcHJpc3RpbmF0by5cbiIKKworIyBmdXp6eQorIzogZTJmc2NrL3VuaXguYzoxNTA0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgc3VwZXJibG9jayBmbGFncyBvbiAlc1xuIgorbXNnc3RyICJpbXBvc3NpYmlsZSBpbXBvc3RhcmVpIGkgZmxhZyBkZWwgc3VwZXJibG9jY28gYSAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVjb3ZlcmluZyBleHQzIGpvdXJuYWwgb2YgJXMiCittc2dzdHIgInJpcHJpc3RpbmFuZG8gaWwgam91cm5hbCBleHQzIGRpICVzIgorCisjOiBlMmZzY2svdW5peC5jOjE1MzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpOiIKK21zZ3N0ciAiTCdAaCAlaSBoYSB1bmEgdmVyc2lvbmUgZGVsbCdoYXNoIG5vbiBzdXBwb3J0YXRhICglTilcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogd2FybmluZzogY29tcHJlc3Npb24gc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCittc2dzdHIgIkF0dGVuemlvbmU6IGlsIHN1cHBvcnRvIHBlciBsYSBjb21wcmVzc2lvbmUgw6ggc3BlcmltZW50YWxlLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBlMmZzY2sgbm90IGNvbXBpbGVkIHdpdGggSFRSRUUgc3VwcG9ydCxcbiIKKyJcdGJ1dCBmaWxlc3lzdGVtICVzIGhhcyBIVFJFRSBkaXJlY3Rvcmllcy5cbiIKK21zZ3N0ciAiIgorIiVzOiBlMmZzY2sgbm9uIMOoIHN0YXRvIGNvbXBpbGF0byBjb24gaWwgc3VwcG9ydG8gSFRSRUUsXG4iCisiXHRtYSBpbCBmaWxlIHN5c3RlbSAlcyBjb250aWVuZSBkaXJlY3RvcnkgSFRSRUUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrcyBpbm9kZVxuIgorbXNnc3RyICJsZWdnZW5kbyBsJ2lub2RlIG51bWVybyAxIgorCisjOiBlMmZzY2svdW5peC5jOjE2MTAKK21zZ2lkICJUaGlzIGRvZXNuJ3QgYm9kZSB3ZWxsLCBidXQgd2UnbGwgdHJ5IHRvIGdvIG9uLi4uXG4iCittc2dzdHIgIlF1ZXN0byBub24gw6ggdW4gYnVvbiBzZWdubywgbWEgc2kgdGVudGVyw6AgZGkgY29udGludWFyZS4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJWQgYmxvY2tzKTogIgorbXNnc3RyICJDcmVhemlvbmUgZGVsIGpvdXJuYWwgKCVkIGJsb2NjaGkpOiAiCisKKyM6IGUyZnNjay91bml4LmM6MTY2MgorbXNnaWQgIiBEb25lLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTY2NAorbXNnaWQgIiIKKyJcbiIKKyIqKiogam91cm5hbCBoYXMgYmVlbiByZS1jcmVhdGVkIC0gZmlsZXN5c3RlbSBpcyBub3cgZXh0MyBhZ2FpbiAqKipcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2ODgKK21zZ2lkICJSZXN0YXJ0aW5nIGUyZnNjayBmcm9tIHRoZSBiZWdpbm5pbmcuLi5cbiIKK21zZ3N0ciAiUmlhdnZpbyBkaSBlMmZzY2sgZGFsbCdpbml6aW8uLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjkyCittc2dpZCAid2hpbGUgcmVzZXR0aW5nIGNvbnRleHQiCittc2dzdHIgInJlc2V0dGFuZG8gaWwgY29udGVzdG8iCisKKyM6IGUyZnNjay91bml4LmM6MTY5OQorbXNnaWQgImFib3J0ZWQiCittc2dzdHIgImFubnVsbGF0byIKKworIzogZTJmc2NrL3VuaXguYzoxNzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBlMmZzY2sgY2FuY2VsZWQuXG4iCittc2dzdHIgIiVzOiBlMmZzY2sgY2FuY2VsbGF0by5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzQxIGUyZnNjay91dGlsLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKiBJTCBGSUxFIFNZU1RFTSDDiCBTVEFUTyBNT0RJRklDQVRPICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiVzOiAqKioqKiBSSUFWVklBUkUgTElOVVggKioqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzUzIGUyZnNjay91dGlsLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIFdBUk5JTkc6IEZpbGVzeXN0ZW0gc3RpbGwgaGFzIGVycm9ycyAqKioqKioqKioqXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBBVFRFTlpJT05FOiBJbCBmaWxlIHN5c3RlbSBjb250aWVuZSBhbmNvcmEgZXJyb3JpICIKKyIqKioqKioqKioqKipcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoxOTAgbWlzYy91dGlsLmM6ODYKK21zZ2lkICJ5WSIKK21zZ3N0ciAic1MiCisKKyM6IGUyZnNjay91dGlsLmM6MTkxCittc2dpZCAibk4iCittc2dzdHIgIm5OIgorCisjOiBlMmZzY2svdXRpbC5jOjIwNQorbXNnaWQgIjx5PiIKK21zZ3N0ciAiPHM+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwNworbXNnaWQgIjxuPiIKK21zZ3N0ciAiPG4+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwOQorbXNnaWQgIiAoeS9uKSIKK21zZ3N0ciAiIChzL24pIgorCisjOiBlMmZzY2svdXRpbC5jOjIyMworbXNnaWQgImNhbmNlbGxlZCFcbiIKK21zZ3N0ciAiY2FuY2VsbGF0byFcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyMzgKK21zZ2lkICJ5ZXNcbiIKK21zZ3N0ciAic8OsXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjQwCittc2dpZCAibm9cbiIKK21zZ3N0ciAibm9cbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyBub1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IG5vXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8geWVzXG4iCisiXG4iCittc2dzdHIgIiIKKyIlcz8gc8OsXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAieWVzIgorbXNnc3RyICJzw6wiCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAibm8iCittc2dzdHIgIm5vIgorCisjOiBlMmZzY2svdXRpbC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBpbGxlZ2FsIGJpdG1hcCBibG9jayhzKSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyNzgKK21zZ2lkICJyZWFkaW5nIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIgorbXNnc3RyICJsZXR0dXJhIGRlbGxlIG1hcHBlIGRpIGJpdCBpbm9kZSBlIGJsb2NjbyIKKworIzogZTJmc2NrL3V0aWwuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gcmVhZCBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAicmlwcm92YW5kbyBhIGxlZ2dlcmUgbGUgbWFwcGUgZGkgYml0IHBlciAlcyIKKworIzogZTJmc2NrL3V0aWwuYzoyOTgKKyMsIGZ1enp5Cittc2dpZCAid3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyIKK21zZ3N0ciAic2NyaXZlbmRvIGxlIG1hcHBlIGRpIGJpdCBkaSBibG9jY28iCisKKyM6IGUyZnNjay91dGlsLmM6MzAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXdyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJyaXByb3ZhbmRvIGEgc2NyaXZlcmUgbGUgbWFwcGUgZGkgYml0IGRpIGlub2RlIHBlciAlcyIKKworIyBmdXp6eQorIzogZTJmc2NrL3V0aWwuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIiVzOiBVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k7IFJVTiBmc2NrIE1BTlVBTExZLlxuIgorIlx0KGkuZS4sIHdpdGhvdXQgLWEgb3IgLXAgb3B0aW9ucylcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIiVzOiBJTkNPTlNJU1RFTlpBIElOQVNQRVRUQVRBOiBFU0VHVUlSRSBmc2NrIE1BTlVBTE1FTlRFLlxuIgorIlx0KGVzLiwgc2VuemEgbGUgb3B6aW9uaSAtYSBvIC1wKVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjM5NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorbXNnc3RyICJNZW1vcmlhIHVzYXRhOiAlZGsvJWRrICglZGsvJWRrKSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdSwgIgorbXNnc3RyICJNZW1vcmlhIHVzYXRhOiAlZCwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorbXNnc3RyICJkdXJhdGE6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVsYXBzZWQgdGltZTogJTYuM2ZcbiIKK21zZ3N0ciAidGVtcG8gcmltYW5lbnRlOiAlNi4zZlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjQ0NyBlMmZzY2svdXRpbC5jOjQ2MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgImxlZ2dlbmRvIGwnaW5vZGUgJWxkIGluICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjQ3NSBlMmZzY2svdXRpbC5jOjQ4OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgInNjcml2ZW5kbyBsJ2lub2RlICVsZCBpbiAlcyIKKworIzogZTJmc2NrL3V0aWwuYzo2MzcKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIHplcm9pemluZyBidWZmZXIiCittc2dzdHIgImFsbG9jYW5kbyBpIGJ1ZmZlciB6ZXJvaXppbmciCisKKyM6IGUyZnNjay91dGlsLmM6Nzg1Cittc2dpZCAiIgorIlVORVhQRUNURUQgSU5DT05TSVNURU5DWTogdGhlIGZpbGVzeXN0ZW0gaXMgYmVpbmcgbW9kaWZpZWQgd2hpbGUgZnNjayBpcyAiCisicnVubmluZy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjcyCisjLCBmdXp6eQorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgImZhdHRvICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1iIGJsb2NrX3NpemVdIFstaSBpbnB1dF9maWxlXSBbLW8gb3V0cHV0X2ZpbGVdIFstc3Z3bmZdXG4iCisiICAgICAgIFstYyBibG9ja3NfYXRfb25jZV0gWy1kIGRlbGF5X2ZhY3Rvcl9iZXR3ZWVuX3JlYWRzXSBbLWUgIgorIm1heF9iYWRfYmxvY2tzXVxuIgorIiAgICAgICBbLXAgbnVtX3Bhc3Nlc10gWy10IHRlc3RfcGF0dGVybiBbLXQgdGVzdF9wYXR0ZXJuIFsuLi5dXV1cbiIKKyIgICAgICAgZGV2aWNlIFtsYXN0X2Jsb2NrIFtmaXJzdF9ibG9ja11dXG4iCittc2dzdHIgIiIKKyJVc286ICVzIFstYiBkaW1fYmxvY2NvXSBbLWkgZmlsZV9kaV9pbnB1dF0gWy1vIGZpbGVfZGlfb3V0cHV0XSBbLXN2d25mXVxuIgorIiBbLWMgYmxvY2tzX2F0X29uY2VdIFstcCBudW1fcGFzc2ldIFstdCBtb2RlbGxvX2RpX3Byb3ZhIFstdCAiCisibW9kZWxsb19kaV9wcm92YSBbLi4uXV1dXG4iCisiIGRldmljZSBbYmxvY2NvX2ZpbmFsZSBbYmxvY2NvX2luaXppYWxlXV1cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBUaGUgLW4gYW5kIC13IG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICIlNi4yZiUlIGRvbmUsICVzIGVsYXBzZWQuICglZC8lZC8lZCBlcnJvcnMpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzI4Cittc2dpZCAiVGVzdGluZyB3aXRoIHJhbmRvbSBwYXR0ZXJuOiAiCittc2dzdHIgIkNvbnRyb2xsbyBjb24gdW4gbW9kZWxsbyBjYXN1YWxlOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzQ2Cittc2dpZCAiVGVzdGluZyB3aXRoIHBhdHRlcm4gMHgiCittc2dzdHIgIkNvbnRyb2xsbyBjb24gbW9kZWxsbyAweCIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNzggbWlzYy9iYWRibG9ja3MuYzo0NTEKK21zZ2lkICJkdXJpbmcgc2VlayIKK21zZ3N0ciAiZHVyYW50ZSBsYSByaWNlcmNhIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJXZWlyZCB2YWx1ZSAoJWxkKSBpbiBkb19yZWFkXG4iCittc2dzdHIgIlZhbG9yZSBzdHJhbm8gKCVsZCkgbmVsbGEgZG9fcmVhZFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ3NgorbXNnaWQgImR1cmluZyBleHQyZnNfc3luY19kZXZpY2UiCittc2dzdHIgImR1cmFudGUgbGEgZXh0MmZzX3N5bmNfZGV2aWNlIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ5NiBtaXNjL2JhZGJsb2Nrcy5jOjc1OAorbXNnaWQgIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iCittc2dzdHIgImluaXppYW5kbyBhIHNjb3JyZXJlIGxhIGxpc3RhIGRlaSBibG9jY2hpIGRpZmV0dG9zaSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTEgbWlzYy9iYWRibG9ja3MuYzo2MTEgbWlzYy9iYWRibG9ja3MuYzo3NjkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlcnMiCittc2dzdHIgImFsbG9jYW5kbyBpIGJ1ZmZlciIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgYmxvY2tzICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiQ29udHJvbGxvIGRlaSBibG9jY2hpIGRhICVsdSBhICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyMAorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtb25seSBtb2RlXG4iCittc2dzdHIgIlJpY2VyY2EgZGVpIGJsb2NjaGkgbm9uIHZhbGlkaSBpbiBtb2RhbGl0w6Agc29sYSBsZXR0dXJhXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTI5Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKHJlYWQtb25seSB0ZXN0KTogIgorbXNnc3RyICJSaWNlcmNhIGRlaSBibG9jY2hpIG5vbiB2YWxpZGkgKHRlc3QgYSBzb2xhIGxldHR1cmEpOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTM2IG1pc2MvYmFkYmxvY2tzLmM6NjQzIG1pc2MvYmFkYmxvY2tzLmM6Njg1CisjOiBtaXNjL2JhZGJsb2Nrcy5jOjgzMgorbXNnaWQgIlRvbyBtYW55IGJhZCBibG9ja3MsIGFib3J0aW5nIHRlc3RcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYxOAorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJSaWNlcmNhIGRlaSBibG9jY2hpIG5vbiB2YWxpZGkgaW4gbW9kYWxpdMOgIGxldHR1cmEtc2NyaXR0dXJhXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjIwIG1pc2MvYmFkYmxvY2tzLmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gYmxvY2sgJWx1IHRvICVsdVxuIgorbXNnc3RyICJEYWwgYmxvY2NvICVsdSBhbCBibG9jY28gJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Njc1Cittc2dpZCAiUmVhZGluZyBhbmQgY29tcGFyaW5nOiAiCittc2dzdHIgIkxldHR1cmEgZSBjb25mcm9udG86ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiBub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIiIKKyJSaWNlcmNhIGRlaSBibG9jY2hpIG5vbiB2YWxpZGkgaW4gbW9kYWxpdMOgIGxldHR1cmEtc2NyaXR0dXJhIG5vbiAiCisiZGlzdHJ1dHRpdmFcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODcKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAobm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgdGVzdClcbiIKK21zZ3N0ciAiIgorIlJpY2VyY2EgZGVpIGJsb2NjaGkgbm9uIHZhbGlkaSAodGVzdCBpbiBtb2FsaXTDoCBsZXR0dXJhLXNjcml0dHVyYSBub24gIgorImRpc3RydXR0aXZhKVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc5NAorbXNnaWQgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIgorbXNnc3RyICIiCisiXG4iCisiUmlsZXZhdG8gaW50ZXJydXB0LCBwdWxpemlhIGluIGNvcnNvXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmluZyB0ZXN0IGRhdGEgd3JpdGUsIGJsb2NrICVsdSIKK21zZ3N0ciAiZHVyYW50ZSBsYSBzY3JpdHR1cmEgZGVpIGRhdGkgZGVsIHRlc3QsIGJsb2NjbyAlbHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTk4IG1pc2MvdXRpbC5jOjMyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBtb3VudGVkOyAiCittc2dzdHIgIiVzIMOoIG1vbnRhdG86ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDAwCisjLCBmdXp6eQorbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICJmb3J6YXRvIGNvbXVucXVlIGJhZGJsb2Nrcy4gU3BlcmlhbW8gY2hlIC9ldGMvbXRhYiBzaSBlcnJhdG8uXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwNQorbXNnaWQgIml0J3Mgbm90IHNhZmUgdG8gcnVuIGJhZGJsb2NrcyFcbiIKK21zZ3N0ciAibm9uIMOoIHNpY3VybyBlc2VndWlyZSBiYWRibG9ja3MhXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAxMCBtaXNjL3V0aWwuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYXBwYXJlbnRseSBpbiB1c2UgYnkgdGhlIHN5c3RlbTsgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAxMworIywgZnV6enkKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAiZm9yemF0byBjb211bnF1ZSBiYWRibG9ja3MuIFNwZXJpYW1vIGNoZSAvZXRjL210YWIgc2kgZXJyYXRvLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMgLSAlcyIKK21zZ3N0ciAiaW50ZXJ2YWxsbyBub24gdmFsaWRvIC0gJXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTEyNworIywgYy1mb3JtYXQKK21zZ2lkICJUb28gYmlnIG1heCBiYWQgYmxvY2tzIGNvdW50ICV1IC0gbWF4aW11bSBpcyAldSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZXN0X3BhdHRlcm4gLSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYWxsb2NhcmUgbWVtb3JpYSBwZXIgaWwgbW9kZWxsbyBkaSBwcm92YSAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExODQKK21zZ2lkICJNYXhpbXVtIG9mIG9uZSB0ZXN0X3BhdHRlcm4gbWF5IGJlIHNwZWNpZmllZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiIgorIkUnIHBvc3NpYmlsZSBzcGVjaWZpY2FyZSB1biBzb2xvIG1vZGVsbG8gZGkgcHJvdmEgaW4gbW9kYWxpdMOgIHNvbGEgbGV0dHVyYSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTkwCittc2dpZCAiUmFuZG9tIHRlc3RfcGF0dGVybiBpcyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiTW9kZWxsbyBkaSBwcm92YSBjYXN1YWxlIG5vbiBjb25zZW50aXRvIGluIG1vZGFsaXTDoCBzb2xhIGxldHR1cmEiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwNAorbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBtYW51YWxseVxuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZGV0ZXJtaW5hcmUgbGEgZGltZW5zaW9uZSBkZWwgZGV2aWNlOlxuIgorInNwZWNpZmljYXJsYSBtYW51YWxtZW50ZVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMTAKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIgorbXNnc3RyICJ0ZW50YW5kbyBkaSBkZXRlcm1pbmFyZSBsYSBkaW1lbnNpb25lIGRlbCBkZXZpY2UiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIxNQorIywgZnV6enkKK21zZ2lkICJsYXN0IGJsb2NrIgorbXNnc3RyICJSaWxvY2F6aW9uZSBkZWkgYmxvY2NoaSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjIxCisjLCBmdXp6eQorbXNnaWQgImZpcnN0IGJsb2NrIgorbXNnc3RyICJQcmltbyBibG9jY28gZGF0aT0ldVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAoJWxsdSk6IG11c3QgYmUgbGVzcyB0aGFuICVsbHUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZW5kIGJsb2NrICglbGx1KTogbXVzdCBiZSAzMi1iaXQgdmFsdWUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjg3CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGNyZWF0aW5nIGluLW1lbW9yeSBiYWQgYmxvY2tzIGxpc3QiCittc2dzdHIgImNyZWFuZG8gbGEgbGlzdGEgZGVpIGJsb2NjaGkgbm9uIHZhbGlkaSBpbiBtZW1vcmlhIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyOTYKK21zZ2lkICJpbnB1dCBmaWxlIC0gYmFkIGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEzMDQgbWlzYy9iYWRibG9ja3MuYzoxMzEzCisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgImFnZ2l1bmdlbmRvIHVuIGVsZW1lbnRvIGFsbGEgbGlzdGEgZGVpIGJsb2NjaGkgZGlmZXR0b3NpIGluIG1lbW9yaWEiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTMzOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFzcyBjb21wbGV0ZWQsICV1IGJhZCBibG9ja3MgZm91bmQuICglZC8lZC8lZCBlcnJvcnMpXG4iCittc2dzdHIgIlBhc3NvIGNvbXBsZXRhdG8uICV1IGJsb2NjaGkgbm9uIHZhbGlkaSB0cm92YXRpLlxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmZdIFstKz1hQWNDZERlaWpzU3RUdV0gWy12IHZlcnNpb25dIGZpbGVzLi4uXG4iCittc2dzdHIgInVzbzogJXMgWy1SVl0gWy0rPUFhY0RkaWpzU3VdIFstdiB2ZXJzaW9uZV0gZmlsZS4uLlxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdmVyc2lvbiAtICVzXG4iCittc2dzdHIgInZlcnNpb25lIG5vbiB2YWxpZGEgLSAlc1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwMSBtaXNjL2xzYXR0ci5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc3RhdCAlcyIKK21zZ3N0ciAidGVudGFuZG8gZGkgZmFyZSBsbyBzdGF0IGRpICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJsZWdnZW5kbyBpIGZsYWcgZGkgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjEzIG1pc2MvY2hhdHRyLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzIG9mICVzIHNldCBhcyAiCittc2dzdHIgImZsYWcgZGkgJXMgaW1wb3N0YXRpIGNvbWUiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgImltcG9zdGFuZG8gaSBmbGFnIGRpICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uIG9mICVzIHNldCBhcyAlbHVcbiIKK21zZ3N0ciAiVmVyc2lvbmUgZGkgJXMgaW1wb3N0YXRhIGEgJWx1XG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgdmVyc2lvbiBvbiAlcyIKK21zZ3N0ciAiaW1wb3N0YW5kbyBsYSB2ZXJzaW9uZSBhICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjI2NworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIHBhdGggdmFyaWFibGUgaW4gY2hhdHRyX2Rpcl9wcm9jIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhbGxvY2FyZSBsYSB2YXJpYWJpbGUgZGkgcGVyY29yc28gbmVsbGEgY2hhdHRyX2Rpcl9wcm9jIgorCisjOiBtaXNjL2NoYXR0ci5jOjMwNworbXNnaWQgIj0gaXMgaW5jb21wYXRpYmxlIHdpdGggLSBhbmQgK1xuIgorbXNnc3RyICI9IMOoIGluY29tcGF0aWJpbGUgY29uICsgZSAtXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MzE1Cittc2dpZCAiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iCittc2dzdHIgIlNpIGRldmUgdXNhcmUgJy12JywgPSwgLSBvICtcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2NrPTxudW0+XSBbLW8gYmxvY2tzaXplPTxudW0+XSBkZXZpY2VcbiIKK21zZ3N0ciAiVXNvOiAlcyBbLWJmaGl4Vl0gWy1vYiBzdXBlcmJsb2Njb10gWy1vQiBkaW1fYmxvY2NvXSBkZXZpY2VcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE1OQorIywgZnV6enkKK21zZ2lkICJibG9ja3MiCittc2dzdHIgImJibG9jY28iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNjkKK21zZ2lkICJjbHVzdGVycyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkdyb3VwICVsdTogKEJsb2NrcyAiCittc2dzdHIgIkdydXBwbyAlbHU6IChCbG9jY2hpICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIENoZWNrc3VtIDB4JTA0eCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoRVhQRUNURUQgMHglMDR4KSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIsIHVudXNlZCBpbm9kZXMgJXVcbiIKK21zZ3N0ciAibWFwcGEgZGVnbGkgaW5vZGUgaW4gdXRpbGl6em8iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAlcyBzdXBlcmJsb2NrIGF0ICIKK21zZ3N0ciAiIHN1cGVyYmxvY2NvICVzIGEgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE0Cittc2dpZCAiUHJpbWFyeSIKK21zZ3N0ciAiUHJpbWFyaW8iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTQKK21zZ2lkICJCYWNrdXAiCittc2dzdHIgIkJhY2t1cCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxOAorbXNnaWQgIiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgIgorbXNnc3RyICIsIERlc2NyaXR0b3JpIGRpIGdydXBwbyBhICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyMgorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0ICIKK21zZ3N0ciAiYmxvY2NoaSByaXNlcnZhdGkiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjkKK21zZ2lkICIgR3JvdXAgZGVzY3JpcHRvciBhdCAiCittc2dzdHIgIiBEZXNjcml0dG9yaSBkaSBncnVwcG8gYSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzNQorbXNnaWQgIiAgQmxvY2sgYml0bWFwIGF0ICIKK21zZ3N0ciAiICBNYXBwYSBkZWkgYml0IGRpIGJsb2NjbyBhICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzkKK21zZ2lkICIsIElub2RlIGJpdG1hcCBhdCAiCittc2dzdHIgIiwgbWFwcGEgZGVpIGJpdCBpbm9kZSBhICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0MworbXNnaWQgIiIKKyJcbiIKKyIgIElub2RlIHRhYmxlIGF0ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgVGF2b2xhIGRlZ2xpIGlub2RlIGEgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiICAldSBmcmVlICVzLCAldSBmcmVlIGlub2RlcywgJXUgZGlyZWN0b3JpZXMlcyIKK21zZ3N0ciAiIgorIlxuIgorIiAgJWQgYmxvY2NoaSBsaWJlcmksICVkIGlub2RlIGxpYmVyaSwgJWQgZGlyZWN0b3J5XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAldSB1bnVzZWQgaW5vZGVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1OQorbXNnaWQgIiAgRnJlZSBibG9ja3M6ICIKK21zZ3N0ciAiICBCbG9jY2hpIGxpYmVyaTogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mjc0Cittc2dpZCAiICBGcmVlIGlub2RlczogIgorbXNnc3RyICIgIElub2RlIGxpYmVyaTogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzEwCittc2dpZCAid2hpbGUgcHJpbnRpbmcgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgInN0YW1wYW5kbyBsYSBsaXN0YSBkZWkgYmxvY2NoaSBkaWZldHRvc2kiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9ja3M6ICV1IgorbXNnc3RyICJCbG9jY2hpIG5vbiB2YWxpZGk6ICVkIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzQ1IG1pc2MvdHVuZTJmcy5jOjM0NworbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAibGVnZ2VuZG8gbCdpbm9kZSBkZWwgam91cm5hbCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1MQorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgImxlZ2dlbmRvIGwnaW5vZGUgZGVsIGpvdXJuYWwiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNTcKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyIGJsb2NrIgorbXNnc3RyICJsZWdnZW5kbyBpbCBzdXBlcmJsb2NjbyBkZWwgam91cm5hbCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2NAorIywgZnV6enkKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVyIGludmFsaWQhXG4iCittc2dzdHIgIlN1cGVyYmxvY2NvIGRlbCBqb3VybmFsIG5vbiB0cm92YXRvIVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzY3Cittc2dpZCAiSm91cm5hbCBmZWF0dXJlczogICAgICAgICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzgwCittc2dpZCAiSm91cm5hbCBzaXplOiAgICAgICAgICAgICAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM5MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKK21zZ3N0ciAiIgorIlxuIgorIkRpbWVuc2lvbmUgZGVpIGJsb2NjaGkgZGVsIGpvdXJuYWw6ICAgJWRcbiIKKyJEaW1lbnNpb25lIGRlbCBqb3VybmFsOiAgICAgICAgICAgICAgICVkXG4iCisiUHJpbW8gYmxvY2NvIGRlbCBqb3VybmFsOiAgICAgICAgICAgICAlZFxuIgorIlNlcXVlbnphIGRlbCBqb3VybmFsOiAgICAgICAgICAgICAgICAgb3glMDh4XG4iCisiSW5pemlvIGRlbCBqb3VybmFsOiAgICAgICAgICAgICAgICAgICAlZFxuIgorIk51bWVybyBkaSB1dGVudGkgZGVsIGpvdXJuYWw6ICAgICAgICAgJWRcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGVycm5vOiAgICAgICAgICAgICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQxNSBtaXNjL3R1bmUyZnMuYzoxOTYKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAibGVnZ2VuZG8gaWwgc3VwZXJibG9jY28gZGVsIGpvdXJuYWwiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXJzIgorbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIGkgbWFnaWMgbnVtYmVycyBkZWwgc3VwZXJibG9jY28gZGVsIGpvdXJuYWwiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIGJsb2NrIHNpemU6ICAgICAgICV1XG4iCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgZmlyc3QgYmxvY2s6ICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIG51bWJlciBvZiB1c2VyczogICV1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJEaW1lbnNpb25lIGRlaSBibG9jY2hpIGRlbCBqb3VybmFsOiAgICVkXG4iCisiRGltZW5zaW9uZSBkZWwgam91cm5hbDogICAgICAgICAgICAgICAlZFxuIgorIlByaW1vIGJsb2NjbyBkZWwgam91cm5hbDogICAgICAgICAgICAgJWRcbiIKKyJTZXF1ZW56YSBkZWwgam91cm5hbDogICAgICAgICAgICAgICAgIG94JTA4eFxuIgorIkluaXppbyBkZWwgam91cm5hbDogICAgICAgICAgICAgICAgICAgJWRcbiIKKyJOdW1lcm8gZGkgdXRlbnRpIGRlbCBqb3VybmFsOiAgICAgICAgICVkXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB1c2VyczogICAgICAgICAgICAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NTYgbWlzYy9ta2UyZnMuYzo3NDMgbWlzYy90dW5lMmZzLmM6MTIxMQorIywgZnV6enkKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugb3B0aW9ucyFcbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYWxsb2NhcmUgbWVtb3JpYSBwZXIgZmFyZSBpbCBwYXJzaW5nIGRlbGxlIG9wemlvbmkgcmFpZCFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ4MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdXBlcmJsb2NrIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyYW1ldHJvIGRpIHN0cmlkZSBub24gdmFsaWRvLlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDk3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJsb2Nrc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlBhcmFtZXRybyBkaSBzdHJpZGUgbm9uIHZhbGlkby5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjUwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBleHRlbmRlZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdHN1cGVyYmxvY2s9PHN1cGVyYmxvY2sgbnVtYmVyPlxuIgorIlx0YmxvY2tzaXplPTxibG9ja3NpemU+XG4iCittc2dzdHIgIiIKKyJcbiIKKyJPcHppb25pIHJhaWQgbm9uIHZhbGlkZS5cbiIKKyJcbiIKKyJMZSBvcHppb25pIHJhaWQgc29ubyBzZXBhcnRlIGRhIHZpcmdvbGUsIGUgcG9zc29ubyBhdmVyZSB1biBwYXJhbWV0cm8sIGNoZVxuIgorIlx0w6ggcGFzc2F0byBkYSB1biBzZWdubyBkaSB1Z3VhbGUgKCc9JykuXG4iCisiXG4iCisiTGUgb3B6aW9uaSByYWlkIHZhbGlkZSBzb25vOlxuIgorIlx0c3RyaWRlPWx1bmdoZXp6YSBzdHJpZGUgaW4gYmxvY2NoaT5cbiIKKyJcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU2OCBtaXNjL21rZTJmcy5jOjE3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlc1xuIgorbXNnc3RyICJcdFVzYW5kbyAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjA2IG1pc2MvZTJpbWFnZS5jOjE1ODIgbWlzYy90dW5lMmZzLmM6MjA2MAorIzogcmVzaXplL21haW4uYzozMTkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSB1biB2YWxpZG8gc3VwZXItYmxvY2NvIHBlciBpbCBmaWxlIHN5c3RlbS5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICVzOiBlcnJvciByZWFkaW5nIGJpdG1hcHM6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogJXM6IGVycm9yZSBsZWdnZW5kbyBsZSBtYXBwZSBkaSBiaXQ6ICVzXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFsgLXJ8USBdIFsgLWZyIF0gZGV2aWNlIGltYWdlLWZpbGVcbiIKK21zZ3N0ciAiVXNvOiAlcyBbLXJdIGRpc3Bvc2l0aXZvIGZpbGVfaW1tYWdpbmVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLUkgZGV2aWNlIGltYWdlLWZpbGVcbiIKK21zZ3N0ciAiVXNvOiAlcyBbLXJdIGRpc3Bvc2l0aXZvIGZpbGVfaW1tYWdpbmVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgJXMgLXJhICBbICAtY2ZucCAgXSBbIC1vIHNyY19vZmZzZXQgXSBbIC1PIGRlc3Rfb2Zmc2V0IF0gc3JjX2ZzICIKKyJbIGRlc3RfZnMgXVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2OSBtaXNjL2UyaW1hZ2UuYzo1NzYgbWlzYy9lMmltYWdlLmM6NTgyCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTc4CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVyIgorbXNnc3RyICJhbGxvY2FuZG8gaSBidWZmZXIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBibG9jayAlbGx1XG4iCittc2dzdHIgIkNvbnRyb2xsbyBkZWkgYmxvY2NoaSBkYSAlbHUgYSAlbHVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTg4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJlcnJvciB3cml0aW5nIGJsb2NrICVsbHUiCittc2dzdHIgIkVycm9yZSBuZWxsbyBzY3JpdmVyZSBpbCBibG9jY28gJWx1ICglcykuICAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE5MQorbXNnaWQgImVycm9yIGluIGdlbmVyaWNfd3JpdGUoKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMDgKK21zZ2lkICJFcnJvcjogaGVhZGVyIHNpemUgaXMgYmlnZ2VyIHRoYW4gd3J0X3NpemVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMTMKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBoZWFkZXIgYnVmZmVyXG4iCittc2dzdHIgIkltcG9zc2liaWxlIGFsbG9jYXJlIGlsIGJ1ZmZlciBkJ2ludGVzdGF6aW9uZVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNDEKK21zZ2lkICJ3aGlsZSB3cml0aW5nIHN1cGVyYmxvY2siCittc2dzdHIgInNjcml2ZW5kbyBpbCBzdXBlcmJsb2NjbyIKKworIzogbWlzYy9lMmltYWdlLmM6MjUwCittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAic2NyaXZlbmRvIGxhIHRhdm9sYSBkZWdsaSBpbm9kZSIKKworIzogbWlzYy9lMmltYWdlLmM6MjU4Cittc2dpZCAid2hpbGUgd3JpdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgInNjcml2ZW5kbyBsYSBtYXBwYSBkZWkgYml0IGRlbCBibG9jY28iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI2NgorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgYml0bWFwIgorbXNnc3RyICJzY3JpdmVuZG8gbGEgbWFwcGEgZGVpIGJpdCBkZWxsJ2lub2RlIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1MDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCByZWNfbGVuICglZClcbiIKK21zZ3N0ciAiQmxvY2NvIGRpcmVjdG9yeSAldSAoIyVkKSB2dW90byBuZWxsJ2lub2RlICV1XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjUxNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBkaXJlY3RvcnkgYmxvY2sgJWxsdTogYmFkIG5hbWVfbGVuICglZClcbiIKK21zZ3N0ciAiQmxvY2NvIGRpcmVjdG9yeSAldSAoIyVkKSB2dW90byBuZWxsJ2lub2RlICV1XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjU1NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSIKK21zZ3N0ciAiJXUgaW5vZGUsICV1IGJsb2NjaGlcbiIKKworIzogbWlzYy9lMmltYWdlLmM6NTg2IG1pc2MvZTJpbWFnZS5jOjYyNgorbXNnaWQgIkNvcHlpbmcgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjYyMworbXNnaWQgIiIKKyJTdG9wcGluZyBub3cgd2lsbCBkZXN0cm95IHRoZSBmaWxlc3lzdGVtLCBpbnRlcnJ1cHQgYWdhaW4gaWYgeW91IGFyZSBzdXJlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyByZW1haW5pbmcgYXQgJS4yZiBNQi9zIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjY2MSBtaXNjL2UyaW1hZ2UuYzoxMTg4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIGJsb2NrICVsbHUiCittc2dzdHIgIkVycm9yZSBuZWwgbGVnZ2VyZSBpbCBibG9jY28gJWx1ICglcykuICAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3BpZWQgJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSBpbiAlcyAiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF0ICUuMmYgTUIvcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3NTUKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBsMSB0YWJsZSIKK21zZ3N0ciAiYWxsb2NhbmRvIGkgYnVmZmVyIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo4MDAKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBsMiBjYWNoZSIKK21zZ3N0ciAiYWxsb2NhbmRvIGkgYnVmZmVyIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo4MjMKK21zZ2lkICIiCisiV2FybmluZzogVGhlcmUgYXJlIHN0aWxsIHRhYmxlcyBpbiB0aGUgY2FjaGUgd2hpbGUgcHV0dGluZyB0aGUgY2FjaGUsIGRhdGEgIgorIndpbGwgYmUgbG9zdCBzbyB0aGUgaW1hZ2UgbWF5IG5vdCBiZSB2YWxpZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTQ1CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgZXh0Ml9xY293Ml9pbWFnZSIKK21zZ3N0ciAiY2hpYW1hbmRvIGV4dDJmc19ibG9ja19pdGVyYXRlIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTUyCisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBleHQyX3Fjb3cyX2ltYWdlIgorbXNnc3RyICJjaGlhbWFuZG8gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyMTEgbWlzYy9lMmltYWdlLmM6MTIyOQorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yOiBtdWx0aXBsZSBzZXF1ZW50aWFsIHJlZmNvdW50IGJsb2NrcyBjcmVhdGVkIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyNjkKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgInNjcml2ZW5kbyBsYSBtYXBwYSBkZWkgYml0IGRlbCBibG9jY28iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyNzgKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBzY3JhbWJsZSBibG9jayBiaXRtYXAiCittc2dzdHIgInNjcml2ZW5kbyBsYSBtYXBwYSBkZWkgYml0IGRlbCBibG9jY28iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyODUKKyMsIGZ1enp5Cittc2dpZCAiU2Nhbm5pbmcgaW5vZGVzLi4uXG4iCittc2dzdHIgIlNjYW5zaW9uZSBkZWxsYSB0YXZvbGEgZGVnbGkgaW5vZGUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyOTcKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhbGxvY2FyZSBpbCBidWZmZXIgYmxvY2NvIChkaW1lbnNpb25lPSVkKVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzM2IG1pc2MvZTJpbWFnZS5jOjEzNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGl0ZXJhdGluZyBvdmVyIGlub2RlICV1IgorbXNnc3RyICJuZWwgcmVjdXBlcmFyZSBsJ2lub2RlIHN1Y2Nlc3Npdm8iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzODEKK21zZ2lkICJSYXcgYW5kIHFjb3cyIGltYWdlcyBjYW5ub3QgYmUgaW5zdGFsbGVkIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MDMKKyMsIGZ1enp5Cittc2dpZCAiZXJyb3IgcmVhZGluZyBiaXRtYXBzIgorbXNnc3RyICJsZWdnZW5kbyBsZSBtYXBwZSBkZWkgYml0IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDE1CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIG9wZW5pbmcgZGV2aWNlIGZpbGUiCittc2dzdHIgIm5lbGwnYXZ2aWFyZSBsJ2FuYWxpc2kgZGVnbGkgaW5vZGUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MjYKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgcmVzdG9yaW5nIHRoZSBpbWFnZSB0YWJsZSIKK21zZ3N0ciAic2NyaXZlbmRvIGxhIHRhdm9sYSBkZWdsaSBpbm9kZSIKKworIzogbWlzYy9lMmltYWdlLmM6MTUyMworbXNnaWQgIi1hIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIHdpdGggcmF3IG9yIFFDT1cyIGltYWdlcy4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUyOQorbXNnaWQgIk9mZnNldHMgYXJlIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MzQKK21zZ2lkICJNb3ZlIG1vZGUgaXMgb25seSBhbGxvd2VkIHdpdGggcmF3IGltYWdlcy4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUzOQorbXNnaWQgIk1vdmUgbW9kZSByZXF1aXJlcyBhbGwgZGF0YSBtb2RlLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTQ5CisjLCBmdXp6eQorbXNnaWQgImNoZWNraW5nIGlmIG1vdW50ZWQiCittc2dzdHIgIiAoY29udHJvbGxvIHRyYSAlbGQgbW91bnQpIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTU2Cittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgZTJpbWFnZSBvbiBhIFIvVyBtb3VudGVkIGZpbGVzeXN0ZW0gY2FuIHJlc3VsdCBpbiBhblxuIgorImluY29uc2lzdGVudCBpbWFnZSB3aGljaCB3aWxsIG5vdCBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiIKKyJVc2UgLWYgb3B0aW9uIGlmIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGF0LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MDgKK21zZ2lkICJRQ09XMiBpbWFnZSBjYW4gbm90IGJlIHdyaXR0ZW4gdG8gdGhlIHN0ZG91dCFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjE0Cittc2dpZCAiQ2FuIG5vdCBzdGF0IG91dHB1dFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW1hZ2UgKCVzKSBpcyBjb21wcmVzc2VkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbWFnZSAoJXMpIGlzIGVuY3J5cHRlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGNvbnZlcnQgcWNvdzIgaW1hZ2UgKCVzKSBpbnRvIHJhdyBpbWFnZSAoJXMpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MzkKKyMsIGZ1enp5Cittc2dpZCAiVGhlIC1jIG9wdGlvbiBvbmx5IHN1cHBvcnRlZCBpbiByYXcgbW9kZVxuIgorbXNnc3RyICJMJ29wemlvbmUgLXQgbm9uIMOoIHN1cHBvcnRhdGEgZGEgcXVlc3RhIHZlcnNpb25lIGRpIGUyZnNjay5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY0NAorIywgZnV6enkKK21zZ2lkICJUaGUgLWMgb3B0aW9uIG5vdCBzdXBwb3J0ZWQgd2hlbiB3cml0aW5nIHRvIHN0ZG91dFxuIgorbXNnc3RyICJMJ29wemlvbmUgLXQgbm9uIMOoIHN1cHBvcnRhdGEgZGEgcXVlc3RhIHZlcnNpb25lIGRpIGUyZnNjay5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY1MQorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGNoZWNrX2J1ZiIKK21zZ3N0ciAiYWxsb2NhbmRvIGkgYnVmZmVyIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjU3CisjLCBmdXp6eQorbXNnaWQgIlRoZSAtcCBvcHRpb24gb25seSBzdXBwb3J0ZWQgaW4gcmF3IG1vZGVcbiIKK21zZ3N0ciAiTCdvcHppb25lIC10IG5vbiDDqCBzdXBwb3J0YXRhIGRhIHF1ZXN0YSB2ZXJzaW9uZSBkaSBlMmZzY2suXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxvY2tzIGFscmVhZHkgY29udGFpbmVkIHRoZSBkYXRhIHRvIGJlIGNvcGllZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJsYWJlbC5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBvcGVuICVzXG4iCittc2dzdHIgImUybGFiZWw6IGltcG9zc2liaWxlIGFwcmlyZSAlc1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGltcG9zc2liaWxlIHJhZ2dpdW5nZXJlIGlsIHN1cGVyYmxvY2NvXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHJlYWRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBlcnJvcmUgZHVyYW50ZSBsYSBsZXR0dXJhIGRlbCBzdXBlcmJsb2Njb1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBub3QgYW4gZXh0MiBmaWxlc3lzdGVtXG4iCittc2dzdHIgImUybGFiZWw6IG5vbiDDqCB1biBmaWwgZXN5c3RlbSBleHQyXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjk3IG1pc2MvdHVuZTJmcy5jOjIyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogbGFiZWwgdG9vIGxvbmcsIHRydW5jYXRpbmcuXG4iCittc2dzdHIgIkF0dGVuemlvbmU6IHRyb25jYW1lbnRvIGRlbGwnZXRpY2hldHRhLCB0cm9wcG8gbHVuZ2EuXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrIGFnYWluXG4iCittc2dzdHIgImUybGFiZWw6IGltcG9zc2liaWxlIHNwb3N0YXJzaSBudW92YW1lbnRlIHN1bCBzdXBlcmJsb2Njb1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3Igd3JpdGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGVycm9yZSBkdXJhbnRlIGxhIHNjcml0dHVyYSBkZWwgc3VwZXJibG9jY29cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTE3IG1pc2MvdHVuZTJmcy5jOjg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogZTJsYWJlbCBkZXZpY2UgW25ld2xhYmVsXVxuIgorbXNnc3RyICJVc286IGUybGFiZWwgZGV2aWNlIFtudW92YV9ldGljaGV0dGFdXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIDx0cmFuc2FjdGlvbiBmaWxlPiA8ZmlsZXN5c3RlbT5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjUyCittc2dpZCAiRmFpbGVkIHRvIHJlYWQgdGhlIGZpbGUgc3lzdGVtIGRhdGEgXG4iCittc2dzdHIgIkxldHR1cmEgZGVpIGRhdGkgZGVsIGZpbGUgc3lzdGVtIG5vbiByaXVzY2l0YVxuIgorCisjOiBtaXNjL2UydW5kby5jOjYyIG1pc2MvZTJ1bmRvLmM6ODMgbWlzYy9lMnVuZG8uYzoxMDggbWlzYy9lMnVuZG8uYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9mZXRjaCAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIE1vdW50IHRpbWUgZGlkbid0IG1hdGNoICV1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzo4OQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBVVUlEIGRpZG4ndCBtYXRjaCBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX29wZW4gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjE2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICJkZXRlcm1pbmFuZG8gc2UgJXMgw6ggbW9udGF0by4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTc1Cittc2dpZCAiZTJ1bmRvIHNob3VsZCBvbmx5IGJlIHJ1biBvbiB1bm1vdW50ZWQgZmlsZSBzeXN0ZW1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjE4NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXNcbiIKK21zZ3N0ciAiZHVyYW50ZSBsJ2FwZXJ0dXJhIGRpICVzIgorCisjOiBtaXNjL2UydW5kby5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBsYXllZCB0cmFuc2FjdGlvbiBvZiBzaXplICV6ZCBhdCBsb2NhdGlvbiAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHdyaXRlICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGNvdWxkbid0IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIkFUVEVOWklPTkU6IGltcG9zc2liaWxlIGFwcmlyZSAlczogJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGJhZCBmb3JtYXQgb24gbGluZSAlZCBvZiAlc1xuIgorbXNnc3RyICJBVFRFTlpJT05FOiBmb3JtYXRvIG5vbiB2YWxpZG8gYWxsYSBsaW5lYSAlZCBkaSAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNzAKKyMsIGZ1enp5Cittc2dpZCAiIgorIldBUk5JTkc6IFlvdXIgL2V0Yy9mc3RhYiBkb2VzIG5vdCBjb250YWluIHRoZSBmc2NrIHBhc3Nub1xuIgorIlx0ZmllbGQuICBJIHdpbGwga2x1ZGdlIGFyb3VuZCB0aGluZ3MgZm9yIHlvdSwgYnV0IHlvdVxuIgorIlx0c2hvdWxkIGZpeCB5b3VyIC9ldGMvZnN0YWIgZmlsZSBhcyBzb29uIGFzIHlvdSBjYW4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJBVFRFTlpJT05FOiBJbCBmaWxlIC9ldGMvZnN0YWIgbm9uIGNvbnRpZW5lIGlsIGNhbXBvIGZzY2tcbiIKKyJcdHBhc3NuLiBMJ2Vycm9yZSB2ZXJyw6AgaWdub3JhdG8sIG1hIGlsIGZpbGUgL2V0Yy9mc3RhYiBkb3ZyZWJiZVxuIgorIlx0ZXNzZXJlIHNpc3RlbWF0byBhbCBwacO5IHByZXN0by5cbiIKKyJcbiIKKworIzogbWlzYy9mc2NrLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6ICVzOiBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNjazogJXM6IG5vbiB0cm92YXRvXG4iCisKKyM6IG1pc2MvZnNjay5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FpdDogTm8gbW9yZSBjaGlsZCBwcm9jZXNzPyE/XG4iCittc2dzdHIgIiVzOiBhc3BldHRhOiBOb24gY2kgc29ubyBwcm9jZXNzaSBmaWdsaT8hP1xuIgorCisjOiBtaXNjL2ZzY2suYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZy4uLiAlcyBmb3IgZGV2aWNlICVzIGV4aXRlZCB3aXRoIHNpZ25hbCAlZC5cbiIKK21zZ3N0ciAiQXR0ZW56aW9uZS4uLiAlcyBwZXIgaWwgZGV2aWNlICVzIMOoIHVzY2l0byBjb24gaWwgc2VnbmFsZSAlZC5cbiIKKworIzogbWlzYy9mc2NrLmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzOiBzdGF0dXMgaXMgJXgsIHNob3VsZCBuZXZlciBoYXBwZW4uXG4iCittc2dzdHIgIiVzICVzOiBsbyBzdGF0byDDqCAleCwgbm9uIGRvdnJlYmJlIGF2dmVuaXJlIG1haS5cbiIKKworIzogbWlzYy9mc2NrLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmlzaGVkIHdpdGggJXMgKGV4aXQgc3RhdHVzICVkKVxuIgorbXNnc3RyICJUZXJtaW5hdG8gY29uICVzIChzdGF0byBkaSB1c2NpdGEgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiVzOiBFcnJvcmUgJWQgZXNlZ3VlbmRvIGZzY2suICVzIHBlciAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzo3NDIKK21zZ2lkICIiCisiRWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSBmaWxlc3lzdGVtIHR5cGVzIHBhc3NlZCB0byAtdCBtdXN0IGJlIHByZWZpeGVkXG4iCisid2l0aCAnbm8nIG9yICchJy5cbiIKK21zZ3N0ciAiIgorIlR1dHRpLCBvIG5lc3N1bm8sIGkgdGlwaSBkaSBmaWxlIHN5c3RlbSBwYXNzYXRpIGNvbiBsJ29wemlvbmUgLXQgZGV2b25vICIKKyJlc3NlcmUgcHJlY2VkdXRpXG4iCisiZGEgXCJub1wiIG8gXCIhXCIuXG4iCisKKyM6IG1pc2MvZnNjay5jOjc2MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlsZXN5c3RlbSB0eXBlc1xuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhbGxvY2FyZSBtZW1vcmlhIHBlciBpIHRpcGkgZGkgZmlsZSBzeXN0ZW1cbiIKKworIzogbWlzYy9mc2NrLmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogc2tpcHBpbmcgYmFkIGxpbmUgaW4gL2V0Yy9mc3RhYjogYmluZCBtb3VudCB3aXRoIG5vbnplcm8gZnNjayBwYXNzICIKKyJudW1iZXJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogY2Fubm90IGNoZWNrICVzOiBmc2NrLiVzIG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiBpbXBvc3NpYmlsZSBjb250cm9sbGFyZSAlczogZnNjay4lcyBub24gdHJvdmF0b1xuIgorCisjOiBtaXNjL2ZzY2suYzo5NjcKK21zZ2lkICJDaGVja2luZyBhbGwgZmlsZSBzeXN0ZW1zLlxuIgorbXNnc3RyICJDb250cm9sbG8gZGkgdHV0dGkgaSBmaWxlIHN5c3RlbS5cbiIKKworIzogbWlzYy9mc2NrLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICItLXdhaXRpbmctLSAocGFzcyAlZClcbiIKK21zZ3N0ciAiLS1hdHRlc2EtLSAocGFzc28gJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNzgKKyMsIGZ1enp5Cittc2dpZCAiIgorIlVzYWdlOiBmc2NrIFstQU1OUFJUVl0gWyAtQyBbIGZkIF0gXSBbLXQgZnN0eXBlXSBbZnMtb3B0aW9uc10gW2ZpbGVzeXMgLi4uXVxuIgorbXNnc3RyICJVc286IGZzY2sgWy1BQ05QUlRWXSBbLXQgdGlwb2ZzXSBbb3B6aW9uaS1mc10gW2ZpbGVzeXMgLi4uXVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBkZXZpY2VzXG4iCittc2dzdHIgIiVzOiB0cm9wcGkgZGV2aWNlXG4iCisKKyM6IG1pc2MvZnNjay5jOjExNTMgbWlzYy9mc2NrLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIiVzOiB0cm9wcGkgcGFyYW1ldHJpXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZhZGx2XSBbZmlsZXMuLi5dXG4iCittc2dzdHIgIlVzbzogJXMgW1JWYWRsdl0gW2ZpbGUgLi4uXVxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIkR1cmFudGUgbGEgbGV0dHVyYSBkZWkgZmxhZyBkaSAlcyIKKworIzogbWlzYy9sc2F0dHIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIkR1cmFudGUgbGEgbGV0dHVyYSBkZWxsYSB2ZXJzaW9uZSBkaSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jfC1sIGZpbGVuYW1lXSBbLWIgYmxvY2stc2l6ZV0gWy1DIGNsdXN0ZXItc2l6ZV1cbiIKKyJcdFstaSBieXRlcy1wZXItaW5vZGVdIFstSSBpbm9kZS1zaXplXSBbLUogam91cm5hbC1vcHRpb25zXVxuIgorIlx0Wy1HIGZsZXgtZ3JvdXAtc2l6ZV0gWy1OIG51bWJlci1vZi1pbm9kZXNdXG4iCisiXHRbLW0gcmVzZXJ2ZWQtYmxvY2tzLXBlcmNlbnRhZ2VdIFstbyBjcmVhdG9yLW9zXVxuIgorIlx0Wy1nIGJsb2Nrcy1wZXItZ3JvdXBdIFstTCB2b2x1bWUtbGFiZWxdIFstTSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5XVxuIgorIlx0Wy1PIGZlYXR1cmVbLC4uLl1dIFstciBmcy1yZXZpc2lvbl0gWy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV1cbiIKKyJcdFstdCBmcy10eXBlXSBbLVQgdXNhZ2UtdHlwZSBdIFstVSBVVUlEXSBbLWpucXZERktTVl0gZGV2aWNlIFtibG9ja3MtIgorImNvdW50XVxuIgorbXNnc3RyICIiCisiVXNvOiAlcyBbLWN8LXR8LWwgbm9tZWZpbGVdIFstYiBkaW1fYmxvY2NoaV0gWy1mIGRpbV9mcmFtbWVudG9dXG4iCisiXHRbLWkgYnl0ZS1wZXItaW5vZGVdIFstal0gWy1KIG9wemlvbmktam91cm5hbF0gWy1OIG51bWVyby1kaS1pbm9kZV1cbiIKKyJcdFstbSBwZXJjZW50dWFsZS1ibG9jY2hpLXJpc2VydmF0aV0gWy1vIG9zLW9yaWdpbmVdIFstZyBibG9jY2hpLXBlci0iCisiZ3J1cHBvXVxuIgorIlx0Wy1MIGV0aWNoZXR0YS12b2x1bWVdIFstTSB1bHRpbWEtZGlyLW1vbnRhdGFdIFstTyBjYXJhdHRlcmlzdGljYVssLi4uXV1cbiIKKyJcdFstciByZXZpc2lvbmUtZnNdIFstUiBvcHpfcmFpZF0gWy1xdlNWXSBkZXZpY2UgW251bWVyby1ibG9jY2hpXVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJSdW5uaW5nIGNvbW1hbmQ6ICVzXG4iCittc2dzdHIgIkVzZWN1emlvbmUgZGVsIGNvbWFuZG86ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcnVuICclcyciCittc2dzdHIgInByb3ZhbmRvIGEgY2FyaWNhcmUgJyVzJyIKKworIzogbWlzYy9ta2UyZnMuYzoyNjMKK21zZ2lkICJ3aGlsZSBwcm9jZXNzaW5nIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIHByb2dyYW0iCittc2dzdHIgImFuYWxpenphbmRvIHVuYSBsaXN0YSBkaSBibG9jY2hpIG5vbiB2YWxpZGkgZGFsIHByb2dyYW1tYSIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWQgaW4gcHJpbWFyeSBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3IgYXJlYSBiYWQuXG4iCittc2dzdHIgIiIKKyJCbG9jY28gJWQgbm9uIHZhbGlkbyBuZWwgc3VwZXJibG9jY28gcHJpbWFyaW8vYXJlYSBkZWwgZGVzY3JpdHRvcmUgZGkgIgorImdydXBwby5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2tzICV1IHRocm91Z2ggJXUgbXVzdCBiZSBnb29kIGluIG9yZGVyIHRvIGJ1aWxkIGEgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorIkkgYmxvY2NoaSBkYSAldSBhICV1IGRldm9ubyBlc3NlcmUgdmFsaWRpIHBlciBjb3N0cnVpcmUgdW4gZmlsZSBzeXN0ZW0uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjk1Cittc2dpZCAiQWJvcnRpbmcuLi4uXG4iCittc2dzdHIgIkFubnVsbGFtZW50by4uLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzozMTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB0aGUgYmFja3VwIHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvcnMgYXQgYmxvY2sgJXUgY29udGFpblxuIgorIlx0YmFkIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkF0dGVuemlvbmU6IGlsIHN1cGVyYmxvY2NvIGRpIGJhY2t1cC9kZXNjcml0dG9yaSBkaSBncnVwcG8gYWkgYmxvY2NoaSAlZFxuIgorIlx0Y29udGVuZ29ubyBibG9jY2hpIG5vbiB2YWxpZGkuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzM0Cittc2dpZCAid2hpbGUgbWFya2luZyBiYWQgYmxvY2tzIGFzIHVzZWQiCittc2dzdHIgImNvbnRyYXNzZWduYW5kbyBpIGJsb2NjaGkgbm9uIHZhbGlkaSBjb21lIHV0aWxpenphdGkiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mzg2Cittc2dpZCAiV3JpdGluZyBpbm9kZSB0YWJsZXM6ICIKK21zZ3N0ciAiU2NyaXR0dXJhIGRlbGxlIHRhdm9sZSBkZWdsaSBpbm9kZTogIgorCisjOiBtaXNjL21rZTJmcy5jOjQwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCB3cml0ZSAlZCBibG9ja3MgaW4gaW5vZGUgdGFibGUgc3RhcnRpbmcgYXQgJWxsdTogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIkltcG9zc2liaWxlIHNjcml2ZXJlICVkIGJsb2NjaGkgbmVsbGEgdGF2b2xhIGRlZ2xpIGlub2RlIGluaXppYW5kbyBkYSAlZDogIgorIiVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDIxIG1pc2MvbWtlMmZzLmM6MjQ3OSBtaXNjL21rZTJmcy5jOjI3NjQKK21zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorbXNnc3RyICJmYXR0byAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjQzMgorbXNnaWQgIndoaWxlIGNyZWF0aW5nIHJvb3QgZGlyIgorbXNnc3RyICJjcmVhbmRvIGxhIGRpcmVjdG9yeSByb290IgorCisjOiBtaXNjL21rZTJmcy5jOjQzOQorbXNnaWQgIndoaWxlIHJlYWRpbmcgcm9vdCBpbm9kZSIKK21zZ3N0ciAiY3JlYW5kbyBsJ2lub2RlIHJvb3QiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDUxCittc2dpZCAid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIKK21zZ3N0ciAiaW1wb3N0YW5kbyBpIHBlcm1lc3NpIGRlbGwnaW5vZGUgcm9vdCIKKworIzogbWlzYy9ta2UyZnMuYzo0NjkKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyAvbG9zdCtmb3VuZCIKK21zZ3N0ciAiY3JlYW5kbyAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0NzYKK21zZ2lkICJ3aGlsZSBsb29raW5nIHVwIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJjZXJjYW5kbyAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0ODkKK21zZ2lkICJ3aGlsZSBleHBhbmRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgImVzcGFuZGVuZG8gL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTA0Cittc2dpZCAid2hpbGUgc2V0dGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgImltcG9zdGFuZG8gbCdpbm9kZSBkZWwgYmxvY2NvIGRpZmV0dG9zbyIKKworIzogbWlzYy9ta2UyZnMuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3V0IG9mIG1lbW9yeSBlcmFzaW5nIHNlY3RvcnMgJWQtJWRcbiIKK21zZ3N0ciAiRmluZSBtZW1vcmlhIGNhbmNlbGxhbmRvIGkgc2V0dG9yaSAlZC0lZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAwOiAlc1xuIgorbXNnc3RyICJBdHRlbnppb25lOiBpbXBvc3NpYmlsZSBsZWdnZXJlIGlsIGJsb2NjbyAwOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgZXJhc2Ugc2VjdG9yICVkOiAlc1xuIgorbXNnc3RyICJBdHRlbnppb25lOiBpbXBvc3NpYmlsZSBjYW5jZWxsYXJlIGlsIHNldHRvcmUgJWQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTczCittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAiaW5pemlhbGl6emFuZG8gaWwgc3VwZXJibG9jY28gZGVsIGpvdXJuYWwiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgxCittc2dpZCAiWmVyb2luZyBqb3VybmFsIGRldmljZTogIgorbXNnc3RyICJBenplcmFtZW50byBkZWwgZGV2aWNlIGRpIGpvdXJuYWxpbmc6ICIKKworIzogbWlzYy9ta2UyZnMuYzo1OTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgam91cm5hbCBkZXZpY2UgKGJsb2NrICVsbHUsIGNvdW50ICVkKSIKK21zZ3N0ciAiYXp6ZXJhbmRvIGlsIGRldmljZSBkaSBqb3VybmFsaW5nIChibG9jY28gJXUsIG51bWVybyAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjExCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgInNjcml2ZW5kbyBpbCBzdXBlcmJsb2NjbyBkZWwgam91cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgZmlsZXN5c3RlbSB3aXRoICVsbHUgJWRrIGJsb2NrcyBhbmQgJXUgaW5vZGVzXG4iCittc2dzdHIgIkNyZWF6aW9uZSBkZWwgZmlsZSBzeXN0ZW0gY29uICVsbHUgJWRrIGJsb2NjaGkgZSAldSBpbm9kZVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYzNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIndhcm5pbmc6ICVsbHUgYmxvY2tzIHVudXNlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorImF0dGVuemlvbmU6ICVkIGJsb2NjaGkgaW51dGlsaXp6YXRpLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGxhYmVsPSVzXG4iCittc2dzdHIgIkV0aWNoZXR0YSBkZWwgZmlsZSBzeXN0ZW09JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk9TIHR5cGU6ICVzXG4iCittc2dzdHIgIlRpcG8gU086ICIKKworIzogbWlzYy9ta2UyZnMuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJEaW1lbnNpb25lIGJsb2Njbz0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ2x1c3RlciBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIkRpbWVuc2lvbmUgYmxvY2NvPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyYWdtZW50IHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiRGltZW5zaW9uZSBmcmFtbWVudG89JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RyaWRlPSV1IGJsb2NrcywgU3RyaXBlIHdpZHRoPSV1IGJsb2Nrc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMsICVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiV1IGlub2RlLCAldSBibG9jY2hpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlbGx1IGJsb2NrcyAoJTIuMmYlJSkgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlciB1c2VyXG4iCittc2dzdHIgIiV1IGJsb2NjaGkgKCUyLjJmJSUpIHJpc2VydmF0aSBwZXIgbCd1dGVudGUgcm9vdFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCBkYXRhIGJsb2NrPSV1XG4iCittc2dzdHIgIlByaW1vIGJsb2NjbyBkYXRpPSV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJvb3QgZGlyZWN0b3J5IG93bmVyPSV1OiV1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBmaWxlc3lzdGVtIGJsb2Nrcz0lbHVcbiIKK21zZ3N0ciAiQmxvY2NoaSBtYXNzaW1pIG5lbCBmaWxlIHN5c3RlbT0lbHVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBzXG4iCittc2dzdHIgIiV1IGdydXBwaSBkaSBibG9jY2hpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjcxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIldSBncnVwcG8gZGkgYmxvY2NoaVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgY2x1c3RlcnMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGJsb2NjaGkgcGVyIGdydXBwbywgJXUgZnJhbW1lbnRpIHBlciBncnVwcG9cbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgZnJhZ21lbnRzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBibG9jY2hpIHBlciBncnVwcG8sICV1IGZyYW1tZW50aSBwZXIgZ3J1cHBvXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgaW5vZGUgcGVyIGdydXBwb1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIFVVSUQ6ICVzXG4iCittc2dzdHIgIkV0aWNoZXR0YSBkZWwgZmlsZSBzeXN0ZW09JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2ODkKK21zZ2lkICJTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogIgorbXNnc3RyICJCYWNrdXAgZGVsIHN1cGVyYmxvY2NvIHNhbHZhdGkgbmVpIGJsb2NjaGk6ICIKKworIzogbWlzYy9ta2UyZnMuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgJy1PIDY0Yml0J1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbXVzdCBiZSBiZWZvcmUgJ3Jlc2l6ZT0ldSdcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjc4NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkZXNjX3NpemU6ICclcydcbiIKK21zZ3N0ciAiUGFyYW1ldHJvIGRpIHN0cmlkZSBub24gdmFsaWRvLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjc5OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvZmZzZXQ6ICVzXG4iCittc2dzdHIgIlBhcmFtZXRybyBkaSBzdHJpZGUgbm9uIHZhbGlkby5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MTIgbWlzYy90dW5lMmZzLmM6MTIzOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtbXBfdXBkYXRlX2ludGVydmFsOiAlc1xuIgorbXNnc3RyICJtb2RlbGxvIGRpIHByb3ZhIG5vbiB2YWxpZG86ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICMgb2YgYmFja3VwIHN1cGVyYmxvY2tzOiAlc1xuIgorbXNnc3RyICJQYXJhbWV0cm8gZGkgc3RyaWRlIG5vbiB2YWxpZG8uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlBhcmFtZXRybyBkaSBzdHJpZGUgbm9uIHZhbGlkby5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaXBlLXdpZHRoIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyYW1ldHJvIGRpIHN0cmlkZSBub24gdmFsaWRvLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjg4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXNpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXJhbWV0cm8gZGkgc3RyaWRlIG5vbiB2YWxpZG8uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODkzCittc2dpZCAiVGhlIHJlc2l6ZSBtYXhpbXVtIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBmaWxlc3lzdGVtIHNpemUuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo5MTcKK21zZ2lkICJPbi1saW5lIHJlc2l6aW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo5NDQgbWlzYy9ta2UyZnMuYzo5NTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcm9vdF9vd25lcjogJyVzJ1xuIgorbXNnc3RyICJJbnNpZW1lIGRpIG9wemlvbmkgZGkgbW91bnQgbm9uIHZhbGlkbzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5NzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcXVvdGF0eXBlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyYW1ldHJvIGRpIHN0cmlkZSBub24gdmFsaWRvLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0bW1wX3VwZGF0ZV9pbnRlcnZhbD08aW50ZXJ2YWw+XG4iCisiXHRudW1fYmFja3VwX3NiPTwwfDF8Mj5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBkYXRhIGNodW5rIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUgKiBkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdG9mZnNldD08b2Zmc2V0IHRvIGNyZWF0ZSB0aGUgZmlsZSBzeXN0ZW0+XG4iCisiXHRyZXNpemU9PHJlc2l6ZSBtYXhpbXVtIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0cGFja2VkX21ldGFfYmxvY2tzPTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdGxhenlfam91cm5hbF9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0cm9vdF91aWQ9PHVpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHJvb3RfZ2lkPTxnaWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXNyIE9SIGdycD5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IFJBSUQgc3RyaXBlLXdpZHRoICV1IG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHN0cmlkZSAldS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBta2UyZnMgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDY4IG1pc2MvdHVuZTJmcy5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGZpbGVzeXN0ZW0gb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiU2V0IGRpIG9wemlvbmkgZGVsIGZpbGUgc3lzdGVtIG5vbiB2YWxpZG86ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA4MCBtaXNjL3R1bmUyZnMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtb3VudCBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJJbnNpZW1lIGRpIG9wemlvbmkgZGkgbW91bnQgbm9uIHZhbGlkbzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJZb3VyIG1rZTJmcy5jb25mIGZpbGUgZG9lcyBub3QgZGVmaW5lIHRoZSAlcyBmaWxlc3lzdGVtIHR5cGUuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjI0Cittc2dpZCAiIgorIllvdSBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgYW4gdXBkYXRlZCBta2UyZnMuY29uZiBmaWxlLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyOAorIywgZnV6enkKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICJBbm51bGxhbWVudG8uLi4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGZzX3R5cGUgJXMgaXMgbm90IGRlZmluZWQgaW4gbWtlMmZzLmNvbmZcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE0NDkKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBQQVRILlxuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhbGxvY2FyZSBtZW1vcmlhIHBlciBpIHRpcGkgZGkgZmlsZSBzeXN0ZW1cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGluaXQgcHJvZmlsZSBzdWNjZXNzZnVsbHkgKGVycm9yOiAlbGQpLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUyMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9jayBzaXplIC0gJXMiCittc2dzdHIgImRpbWVuc2lvbmUgZGVsIGJsb2NjbyBkaWZldHRvc28gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgdXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIKK21zZ3N0ciAiIgorIkF0dGVuemlvbmU6IGxhIGRpbWVuc2lvbmUgZGkgYmxvY2NvICVkIG5vbiDDqCB1dGlsaXp6YWJpbGUgc3UgbW9sdGkgc2lzdGVtaS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2x1c3RlciBzaXplIC0gJXMiCittc2dzdHIgImRpbWVuc2lvbmUgZmlsZSBzeXN0ZW0gbm9uIHZhbGlkYSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NTMKK21zZ2lkICInLVInIGlzIGRlcHJlY2F0ZWQsIHVzZSAnLUUnIGluc3RlYWQiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTY1Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGJsb2NrcyBwZXIgZ3JvdXAiCittc2dzdHIgIk51bWVybyBkaSBibG9jY2hpIHBlciBncnVwcG8gbm9uIHZhbGlkbyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTcwCittc2dpZCAiYmxvY2tzIHBlciBncm91cCBtdXN0IGJlIG11bHRpcGxlIG9mIDgiCittc2dzdHIgImkgYmxvY2NoaSBwZXIgZ3J1cHBvIGRldm9ubyBlc3NlcmUgbXVsdGlwbGkgZGkgOCIKKworIzogbWlzYy9ta2UyZnMuYzoxNTc4CisjLCBmdXp6eQorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBmbGV4X2JnIHNpemUiCittc2dzdHIgIk51bWVybyBkaSBibG9jY2hpIHBlciBncnVwcG8gbm9uIHZhbGlkbyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg0Cittc2dpZCAiZmxleF9iZyBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmbGV4X2JnIHNpemUgKCVsdSkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMl4zMSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MDAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgcmF0aW8gJXMgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJ0YXNzbyBkaSBpbm9kZSBub24gdmFsaWRvICVzIChtaW4gJWQvbWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoxNjEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAiZGltZW5zaW9uZSBpbm9kZSBub24gdmFsaWRhIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyMworbXNnaWQgIiIKKyJXYXJuaW5nOiAtSyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZSAnLUUgIgorIm5vZGlzY2FyZCcgZXh0ZW5kZWQgb3B0aW9uIGluc3RlYWQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjM0Cittc2dpZCAiaW4gbWFsbG9jIGZvciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorbXNnc3RyICJuZWxsYSBtYWxsb2MgcGVyIGJhZF9ibG9ja3NfZmlsZW5hbWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVzIgorbXNnc3RyICJwZXJjZW50dWFsZSBkaSBibG9jY2hpIHJpc2VydmF0aSBub24gdmFsaWRhIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY2MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bSBpbm9kZXMgLSAlcyIKK21zZ3N0ciAiZGltZW5zaW9uZSBpbm9kZSBub24gdmFsaWRhIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY3OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uIGxldmVsIC0gJXMiCittc2dzdHIgInZlcnNpb25lIG5vbiB2YWxpZGEgLSAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE2ODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjcmVhdGUgcmV2aXNpb24gJWQiCittc2dzdHIgIiIKKyJcbiIKKyJcdGNlcmNhbmRvIGRpIGNyZWFyZSBpbCBqb3VybmFsIgorCisjOiBtaXNjL21rZTJmcy5jOjE2OTgKKyMsIGZ1enp5Cittc2dpZCAiVGhlIC10IG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIi1vIHB1w7IgZXNzZXJlIHNwZWNpZmljYXRhIHNvbG8gdW5hIHZvbHRhIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MDYKKyMsIGZ1enp5Cittc2dpZCAiVGhlIC1UIG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIi1vIHB1w7IgZXNzZXJlIHNwZWNpZmljYXRhIHNvbG8gdW5hIHZvbHRhIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NTkgbWlzYy9ta2UyZnMuYzoyODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgZGV2aWNlICVzXG4iCittc2dzdHIgImR1cmFudGUgbCdhcGVydHVyYSBkZWwgZGlzcG9zaXRpdm8gZGkgam91cm5hbGluZyAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBkZXYgYmxvY2tzaXplICglZCkgc21hbGxlciB0aGFuIG1pbmltdW0gYmxvY2tzaXplICVkXG4iCittc2dzdHIgIiIKKyJEaW1lbnNpb25lIGRlaSBibG9jY2hpIGRlbCBkZXZpY2UgZGkgam91cm5hbGluZyAoJWQpIG1pbm9yZSBkZWxsYSBkaW0gbWluaW1hICIKKyJkZWkgYmxvY2NoaSAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIGpvdXJuYWwgZGV2aWNlJ3MgYmxvY2tzaXplOiAlZFxuIgorbXNnc3RyICJBZ2dpdW50YSBkZWwgam91cm5hbCBhbCBkZXZpY2UgJXM6ICIKKworIzogbWlzYy9ta2UyZnMuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2tzICclcycgb24gZGV2aWNlICclcyciCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxODA0Cittc2dpZCAiZmlsZXN5c3RlbSIKK21zZ3N0ciAiZmlsZSBzeXN0ZW0iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgxNyByZXNpemUvbWFpbi5jOjM5NQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBzaXplIgorbXNnc3RyICJ0ZW50YW5kbyBkaSBkZXRlcm1pbmFyZSBsYSBkaW1lbnNpb25lIGRlbCBmaWxlIHN5c3RlbSIKKworIzogbWlzYy9ta2UyZnMuYzoxODIzCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBkZXRlcm1pbmFyZSBsYSBkaW1lbnNpb25lIGRlbCBkZXZpY2U6IGJpc29nbmFcbiIKKyJzcGVjaWZpY2FyZSBsYSBkaW1lbnNpb25lIGRlbCBmaWxlIHN5c3RlbVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MzAKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorIlNlbWJyYSBjaGUgbGEgZGltZW5zaW9uZSBkZWwgZGV2aWNlIHNpYSB6ZXJvLiBTcGVjaWZpY2F0YSBwYXJ0aXppb25lIG5vblxuIgorIlx0dmFsaWRhIG8gbGEgdGFiZWxsYSBkZWxsZSBwYXJ0aXppb25pIG5vbiDDqCBzdGF0YSByaWxldHRhIGRvcG8gIgorImwnZXNlY3V6aW9uZVxuIgorIlx0ZGkgZmRpc2ssIHBvaWNow6kgdW5hIHBhcnRpemlvbmUgbW9kaWZpY2F0YSBlcmEgb2NjdXBhdGEuIFBvdHJlYmJlIGVzc2VyZVxuIgorIlx0bmVjZXNzYXJpbyByaWF2dmlhcmUgcGVyIHJpbGVnZ2VyZSBsYSB0YWJlbGxhIGRlbGxlIHBhcnRpemlvbmkuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg0NworbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICJJbCBmaWxlIHN5c3RlbSDDqCBwacO5IGdyYW5kZSBkZWxsYSBkaW1lbnNpb25lIGFwcGFyZW50ZSBkZWwgZGV2aWNlLiIKKworIzogbWlzYy9ta2UyZnMuYzoxODY3Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGZzIHR5cGVzIGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MDgKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGhhcmR3YXJlIHNlY3RvciBzaXplIgorbXNnc3RyICJwcm92YW5kbyBhIGRldGVybWluYXJlIGxhIGRpbWVuc2lvbmUgZGVsIHNldHRvcmUgaGFyZHdhcmUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkxNAorIywgZnV6enkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHBoeXNpY2FsIHNlY3RvciBzaXplIgorbXNnc3RyICJwcm92YW5kbyBhIGRldGVybWluYXJlIGxhIGRpbWVuc2lvbmUgZGVsIHNldHRvcmUgaGFyZHdhcmUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk0NgorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsIGZvciBkZXZpY2VcbiIKK21zZ3N0ciAibGVnZ2VuZG8gbCdpbm9kZSBkZWkgYmxvY2NoaSBub24gdmFsaWRpIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNwZWNpZmllZCBibG9ja3NpemUgJWQgaXMgbGVzcyB0aGFuIGRldmljZSBwaHlzaWNhbCBzZWN0b3JzaXplICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogU2l6ZSBvZiBkZXZpY2UgKDB4JWxseCBibG9ja3MpICVzIHRvbyBiaWcgdG8gYmUgZXhwcmVzc2VkXG4iCisiXHRpbiAzMiBiaXRzIHVzaW5nIGEgYmxvY2tzaXplIG9mICVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk5MQorbXNnaWQgImZzX3R5cGVzIGZvciBta2UyZnMuY29uZiByZXNvbHV0aW9uOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTk4Cittc2dpZCAiRmlsZXN5c3RlbSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAwNgorbXNnaWQgIlNwYXJzZSBzdXBlcmJsb2NrcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAxOAorbXNnaWQgIkpvdXJuYWxzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIkpvdXJuYWwgbm9uIHN1cHBvcnRhdGkgY29uIGlsIG51bWVybyBkaSByZXZpc2lvbmUgMCBkZWwgZmlsZSBzeXN0ZW1cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDMyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJWxmIgorbXNnc3RyICJwZXJjZW50dWFsZSBkaSBibG9jY2hpIHJpc2VydmF0aSBub24gdmFsaWRhIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJFeHRlbnRzIE1VU1QgYmUgZW5hYmxlZCBmb3IgYSA2NC1iaXQgZmlsZXN5c3RlbS4gIFBhc3MgLU8gZXh0ZW50cyB0byAiCisicmVjdGlmeS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNjkKK21zZ2lkICJUaGUgY2x1c3RlciBzaXplIG1heSBub3QgYmUgc21hbGxlciB0aGFuIHRoZSBibG9jayBzaXplLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA3NQorbXNnaWQgInNwZWNpZnlpbmcgYSBjbHVzdGVyIHNpemUgcmVxdWlyZXMgdGhlIGJpZ2FsbG9jIGZlYXR1cmUiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFVuYWJsZSB0byBnZXQgZGV2aWNlIGdlb21ldHJ5IGZvciAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbGlnbm1lbnQgaXMgb2Zmc2V0IGJ5ICVsdSBieXRlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgbWF5IHJlc3VsdCBpbiB2ZXJ5IHBvb3IgcGVyZm9ybWFuY2UsIChyZSktcGFydGl0aW9uaW5nIHN1Z2dlc3RlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpIgorbXNnc3RyICJibG9jY2hpIGRpICVkIGJ5dGUgdHJvcHBvIGdyYW5kaSBwZXIgaWwgc2lzdGVtYSAobWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiAlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCksIGZvcmNlZCB0byBjb250aW51ZVxuIgorbXNnc3RyICIiCisiQXR0ZW56aW9uZTogYmxvY2NoaSBkaSAlZCBieXRlcyB0cm9wcG8gZ3JhbmRpIHBlciBpbCBzaXN0ZW1hIChtYXggJWQpLCAiCisiY29udGludW8gY29tdW5xdWVcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTgwCittc2dpZCAiQ2FuJ3Qgc3VwcG9ydCBiaWdhbGxvYyBmZWF0dXJlIHdpdGhvdXQgZXh0ZW50cyBmZWF0dXJlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE4NworbXNnaWQgIiIKKyJUaGUgcmVzaXplX2lub2RlIGFuZCBtZXRhX2JnIGZlYXR1cmVzIGFyZSBub3QgY29tcGF0aWJsZS5cbiIKKyJUaGV5IGNhbiBub3QgYmUgYm90aCBlbmFibGVkIHNpbXVsdGFuZW91c2x5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE5NgorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgYmlnYWxsb2MgZmVhdHVyZSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuIgorIlNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIwNworbXNnaWQgInJlc2VydmVkIG9ubGluZSByZXNpemUgYmxvY2tzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLXNwYXJzZSBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIxNgorbXNnaWQgImJsb2NrcyBwZXIgZ3JvdXAgY291bnQgb3V0IG9mIHJhbmdlIgorbXNnc3RyICJjb250ZWdnaW8gZGVpIGJsb2NjaGkgcGVyIGdydXBwbyBmdW9yaSBkYWxsJ2ludGVydmFsbG8iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI0MAorbXNnaWQgIkZsZXhfYmcgZmVhdHVyZSBub3QgZW5hYmxlZCwgc28gZmxleF9iZyBzaXplIG1heSBub3QgYmUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI1MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplICVkIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAiZGltZW5zaW9uZSBkZWxsJ2lub2RlIG5vbiB2YWxpZGE6ICVkIChtaW4gJWQvbWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHJhaXNlIGlub2RlIHJhdGlvPyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgc3BlY2lmeSA8IDJeMzIgaW5vZGVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5vZGVfc2l6ZSAoJXUpICogaW5vZGVzX2NvdW50ICgldSkgdG9vIGJpZyBmb3IgYVxuIgorIlx0ZmlsZXN5c3RlbSB3aXRoICVsbHUgYmxvY2tzLCBzcGVjaWZ5IGhpZ2hlciBpbm9kZV9yYXRpbyAoLWkpXG4iCisiXHRvciBsb3dlciBpbm9kZSBjb3VudCAoLU4pLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbTsgdGhpcyBjYW4gYmUgdW5kb25lIHVzaW5nIHRoZSBjb21tYW5kOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI0MzIKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHNldHVwIHVuZG8gZmlsZVxuIgorbXNnc3RyICIiCisiXG4iCisiXHRjZXJjYW5kbyBkaSBjcmVhcmUgaWwgZmlsZSBkaSBqb3VybmFsIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NTgKK21zZ2lkICJEaXNjYXJkaW5nIGRldmljZSBibG9ja3M6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NzQKK21zZ2lkICJmYWlsZWQgLSAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTk2CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIHNldHRpbmcgdXAgc3VwZXJibG9jayIKK21zZ3N0ciAiaW1wb3N0YW5kbyBpbCBzdXBlcmJsb2NjbyIKKworIzogbWlzYy9ta2UyZnMuYzoyNjEyCittc2dpZCAiRGlzY2FyZCBzdWNjZWVkZWQgYW5kIHdpbGwgcmV0dXJuIDBzIC0gc2tpcHBpbmcgaW5vZGUgdGFibGUgd2lwZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9zIC0gJXMiCittc2dzdHIgIlNPIHNjb25vc2NpdXRvIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc1MgorIywgZnV6enkKK21zZ2lkICJBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogIgorbXNnc3RyICJTY3JpdHR1cmEgZGVsbGUgdGF2b2xlIGRlZ2xpIGlub2RlOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2MAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBhbGxvY2F0ZSBmaWxlc3lzdGVtIHRhYmxlcyIKK21zZ3N0ciAidGVudGFuZG8gZGkgYWxsb2NhcmUgbGUgdGFiZWxsZSBkZWwgZmlsZSBzeXN0ZW0iCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2OQorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYml0bWFwIgorbXNnc3RyICJzY3JpdmVuZG8gbGEgbWFwcGEgZGVpIGJpdCBkZWwgYmxvY2NvIgorCisjOiBtaXNjL21rZTJmcy5jOjI4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBibG9jayAlbGx1IGF0IGVuZCBvZiBmaWxlc3lzdGVtIgorbXNnc3RyICJuZWxsJ2F6emVyYXJlIGlsIGJsb2NjbyAlbGx1IGFsbGEgZmluZSBkZWwgZmlsZSBzeXN0ZW0iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgyNgorIywgZnV6enkKK21zZ2lkICJ3aGlsZSByZXNlcnZpbmcgYmxvY2tzIGZvciBvbmxpbmUgcmVzaXplIgorbXNnc3RyICJsZWdnZW5kbyBsJ2lub2RlIGRlaSBibG9jY2hpIG5vbiB2YWxpZGkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgzOCBtaXNjL3R1bmUyZnMuYzo3MTIKK21zZ2lkICJqb3VybmFsIgorbXNnc3RyICJqb3VybmFsIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGpvdXJuYWwgdG8gZGV2aWNlICVzOiAiCittc2dzdHIgIkFnZ2l1bnRhIGRlbCBqb3VybmFsIGFsIGRldmljZSAlczogIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlx0Y2VyY2FuZG8gZGkgYWdpZ3VuZ2VyZSBpbCBqb3VybmFsIGFsIGRldmljZSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyODYyIG1pc2MvbWtlMmZzLmM6Mjg5MyBtaXNjL3R1bmUyZnMuYzo3NDEgbWlzYy90dW5lMmZzLmM6NzYwCittc2dpZCAiZG9uZVxuIgorbXNnc3RyICJmYXR0b1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NjkKK21zZ2lkICJTa2lwcGluZyBqb3VybmFsIGNyZWF0aW9uIGluIHN1cGVyLW9ubHkgbW9kZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg4MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJXUgYmxvY2tzKTogIgorbXNnc3RyICJDcmVhemlvbmUgZGVsIGpvdXJuYWwgKCVkIGJsb2NjaGkpOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg4OQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCIKK21zZ3N0ciAiIgorIlxuIgorIlx0Y2VyY2FuZG8gZGkgY3JlYXJlIGlsIGpvdXJuYWwiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwMSBtaXNjL3R1bmUyZnMuYzo1MTYKK21zZ2lkICIiCisiXG4iCisiRXJyb3Igd2hpbGUgZW5hYmxpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBpcyBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkIHNlY29uZHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTIzCittc2dpZCAiV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAiCittc2dzdHIgIiIKKyJTY3JpdHR1cmEgZGVsbGUgaW5mb3JtYXppb25pIGRlaSBzdXBlci1ibG9jY2hpIGUgZGVsbCdhY2NvdW50aW5nIGRlbCBmaWxlICIKKyJzeXN0ZW06ICIKKworIzogbWlzYy9ta2UyZnMuYzoyOTMwCittc2dpZCAiIgorIlxuIgorIldhcm5pbmcsIGhhZCB0cm91YmxlIHdyaXRpbmcgb3V0IHN1cGVyYmxvY2tzLiIKK21zZ3N0ciAiIgorIlxuIgorIkF0dGVuemlvbmUsIHByb2JsZW1pIGR1cmFudGUgbGEgc2NyaXR0dXJhIGRlaSBzdXBlcmJsb2NjaGkuIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MzIKK21zZ2lkICIiCisiZG9uZVxuIgorIlxuIgorbXNnc3RyICIiCisiZmF0dG9cbiIKKyJcbiIKKworIzogbWlzYy9ta2xvc3QrZm91bmQuYzo1MAorbXNnaWQgIlVzYWdlOiBta2xvc3QrZm91bmRcbiIKK21zZ3N0ciAiVXNvOiBta2xvc3QrZm91bmRcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjQxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICAlcyBkZXZpY2UuLi5cbiIKKyJcbiIKKyJQcmludHMgb3V0IHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGVhY2ggZ2l2ZW4gZGV2aWNlLlxuIgorIkZvciBleGFtcGxlOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorbXNnc3RyICIiCisiVXNvOiAlcyA8ZGV2MT4gPGRldjI+IDxkZXYzPlxuIgorIlxuIgorIlF1ZXN0byBwcm9ncmFtbWEgc3RhbXBhIGxlIGluZm9ybWF6aW9uaSBkaSBwYXJ0aXppb25lIHBlciB1biBpbnNpZW1lIGRpICIKKyJkZXZpY2VcbiIKKyJVbiB1dGlsaXp6byBjb211bmUgZGkgcXVlc3RvIHByb2dyYW1tYSDDqDpcbiIKKyJcbiIKKyJcdCVzIC9kZXYvaGRhP1xuIgorIlxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAiZTJsYWJlbDogaW1wb3NzaWJpbGUgYXByaXJlICVzXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGdlb21ldHJ5IG9mICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBzaXplIG9mICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEyCittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIkVzZWd1aXJlIGUyZnNjayBzdWwgZmlsZSBzeXN0ZW0uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWMgbWF4X21vdW50c19jb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdyb3VwXVxuIgorIlx0Wy1pIGludGVydmFsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbF9vcHRpb25zXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2ZWRfYmxvY2tzX3BlcmNlbnRdIFstbyBbXl1tb3VudF9vcHRpb25zWywuLi5dXSBbLXAgIgorIm1tcF91cGRhdGVfaW50ZXJ2YWxdXG4iCisiXHRbLXIgcmVzZXJ2ZWRfYmxvY2tzX2NvdW50XSBbLXUgdXNlcl0gWy1DIG1vdW50X2NvdW50XSBbLUwgdm9sdW1lX2xhYmVsXVxuIgorIlx0Wy1NIGxhc3RfbW91bnRlZF9kaXJdIFstTyBbXl1mZWF0dXJlWywuLi5dXVxuIgorIlx0Wy1RIHF1b3RhX29wdGlvbnNdXG4iCisiXHRbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXSBbLVQgbGFzdF9jaGVja190aW1lXSBbLVUgVVVJRF1cbiIKKyJcdFsgLUkgbmV3X2lub2RlX3NpemUgXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIlVzbzogJXMgWy1jIG1heC1udW1lcm8tbW91bnRdIFstZSBjb21wb3J0YW1lbnRvLWVycm9yaV0gWy1nIGdydXBwb11cbiIKKyJcdFstaSBpbnRlcnZhbGxvW2R8bXx3XV0gWy1qXSBbLUogb3B6aW9uaS1qb3VybmFsXVxuIgorIlx0Wy1sXSBbLXMgZmxhZy1zcGFyc2VdIFstbSBwZXJjZW50dWFsZS1ibG9jY2hpLXJpc2VydmF0aV1cbiIKKyJcdFstbyBbXl1vcHppb25pLW1vdW50WywuLi5dXSBbLXIgbnVtZXJvLWJsb2NjaGktcmlzZXJ2YXRpXVxuIgorIlx0Wy11IHV0ZW50ZV0gWy1DIG51bWVyby1tb3VudF0gWy1MIGV0aWNoZXR0YS12b2x1bWVdIFstTSB1bHRpbWEtZGlyLSIKKyJtb250YXRhXVxuIgorIlx0Wy1PIFteXWNhcmF0dGVyaXN0aWNhWywuLi5dXSBbLVQgdWx0aW1vLWNvbnRyb2xsb10gWy1VIFVVSURdIGRldmljZVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDMKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIVxuIgorbXNnc3RyICJTdXBlcmJsb2NjbyBkZWwgam91cm5hbCBub24gdHJvdmF0byFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjYxCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAiY2VyY2FuZG8gZGkgYXByaXJlIGlsIGpvdXJuYWwgZXN0ZXJubyIKKworIzogbWlzYy90dW5lMmZzLmM6MjY3IG1pc2MvdHVuZTJmcy5jOjE5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIG5vbiDDqCB1biBkaXNwb3NpdGl2byBkaSBqb3VybmFsaW5nLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNzcgbWlzYy90dW5lMmZzLmM6MTk3NAorbXNnaWQgIkZpbGVzeXN0ZW0ncyBVVUlEIG5vdCBmb3VuZCBvbiBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiVVVJRCBkZWwgZmlsZSBzeXN0ZW0gbm9uIHRyb3ZhdG8gc3VsIGRpc3Bvc2l0aXZvIGRpIGpvdXJuYWxpbmcuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMwMQorbXNnaWQgIiIKKyJDYW5ub3QgbG9jYXRlIGpvdXJuYWwgZGV2aWNlLiBJdCB3YXMgTk9UIHJlbW92ZWRcbiIKKyJVc2UgLWYgb3B0aW9uIHRvIHJlbW92ZSBtaXNzaW5nIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMxMAorbXNnaWQgIkpvdXJuYWwgcmVtb3ZlZFxuIgorbXNnc3RyICJKb3VybmFsIHJpbW9zc29cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MzU0Cittc2dpZCAid2hpbGUgcmVhZGluZyBiaXRtYXBzIgorbXNnc3RyICJsZWdnZW5kbyBsZSBtYXBwZSBkZWkgYml0IgorCisjOiBtaXNjL3R1bmUyZnMuYzozNjIKK21zZ2lkICJ3aGlsZSBjbGVhcmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJhenplcmFuZG8gbCdpbm9kZSBkZWwgam91cm5hbCIKKworIzogbWlzYy90dW5lMmZzLmM6MzczCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJzY3JpdmVuZG8gbCdpbm9kZSBkZWwgam91cm5hbCIKKworIzogbWlzYy90dW5lMmZzLmM6NDA1IG1pc2MvdHVuZTJmcy5jOjQxOAorbXNnaWQgIihhbmQgcmVib290IGFmdGVyd2FyZHMhKVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKyJJbXBvc3RhemlvbmUgZGkgZGF0YSBlZCBvcmEgZGVsbCd1bHRpbW8gY29udHJvbGxvIGRlbCBmaWxlIHN5c3RlbSBhICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ2NworbXNnaWQgIiIKKyJUaGUgaGFzX2pvdXJuYWwgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJJbCBmbGFnIGhhc19qb3VybmFsIHB1w7IgZXNzZXJlIGF6emVyYXRvIHF1YW5kbyBpbCBmaWxlIHN5c3RlbSBub25cbiIKKyLDqCBtb250YXRvIG8gw6ggbW9udGF0byBzb2xvIGluIGxldHR1cmEuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ3NgorbXNnaWQgIiIKKyJUaGUgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQuICBQbGVhc2UgcnVuIGUyZnNjayBiZWZvcmUgY2xlYXJpbmdcbiIKKyJ0aGUgaGFzX2pvdXJuYWwgZmxhZy5cbiIKK21zZ3N0ciAiIgorIklsIGZsYWcgbmVlZHNfcmVjb3Zlcnkgw6ggaW1wb3N0YXRvLiBFc2VndWlyZSBlMmZzY2sgcHJpbWEgZGkgYXp6ZXJhcmVcbiIKKyJpbCBmbGFnIGhhc19qb3VybmFsLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0OTUKK21zZ2lkICIiCisiU2V0dGluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJ3NwYXJzZV9zdXBlcicgbm90IHN1cHBvcnRlZFxuIgorImZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBtZXRhX2JnIGZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorIkltcG9zdGF6aW9uZSBkaSBkYXRhIGVkIG9yYSBkZWxsJ3VsdGltbyBjb250cm9sbG8gZGVsIGZpbGUgc3lzdGVtIGEgJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTA4Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2FuJ3RcbiIKKyJiZSBzZXQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBvclxuIgorInJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIklsIGZsYWcgaGFzX2pvdXJuYWwgcHXDsiBlc3NlcmUgYXp6ZXJhdG8gcXVhbmRvIGlsIGZpbGUgc3lzdGVtIG5vblxuIgorIsOoIG1vbnRhdG8gbyDDqCBtb250YXRvIHNvbG8gaW4gbGV0dHVyYS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NTM1Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2Fubm90XG4iCisiYmUgZGlzYWJsZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmVhZG9ubHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NTQzCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICJsZWdnZW5kbyBsZSBtYXBwZSBkZWkgYml0IgorCisjOiBtaXNjL3R1bmUyZnMuYzo1NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFnaWMgbnVtYmVyIGluIE1NUCBibG9jayBkb2VzIG5vdCBtYXRjaC4gZXhwZWN0ZWQ6ICV4LCBhY3R1YWw6ICV4XG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NTU3CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIHJlYWRpbmcgTU1QIGJsb2NrLiIKK21zZ3N0ciAibGVnZ2VuZG8gbCdpbm9kZSBudW1lcm8gMSIKKworIzogbWlzYy90dW5lMmZzLmM6NTg5Cittc2dpZCAiIgorIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgY2F1c2UgdGhlIHRoZSBmaWxlc3lzdGVtIHRvIGJlXG4iCisiaW5jb25zaXN0ZW50LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjYwMAorbXNnaWQgIiIKKyJUaGUgaHVnZV9maWxlIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiSWwgZmxhZyBoYXNfam91cm5hbCBwdcOyIGVzc2VyZSBhenplcmF0byBxdWFuZG8gaWwgZmlsZSBzeXN0ZW0gbm9uXG4iCisiw6ggbW9udGF0byBvIMOoIG1vbnRhdG8gc29sbyBpbiBsZXR0dXJhLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NjAKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogJ15xdW90YScgb3B0aW9uIG92ZXJyaWRlcyAnLVEnYXJndW1lbnRzLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcwNQorbXNnaWQgIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIGEgam91cm5hbC5cbiIKK21zZ3N0ciAiSWwgZmlsZSBzeXN0ZW0gaGEgZ2nDoCB1biBqb3VybmFsLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBvbiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiXHR0ZW50YW5kbyBkaSBhcHJpcmUgaWwgam91cm5hbCBpbiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBvbiBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiQ3JlYW5kbyBpbCBqb3VybmFsIHBlciBpbCBkZXZpY2UgJXM6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGFkZGluZyBmaWxlc3lzdGVtIHRvIGpvdXJuYWwgb24gJXMiCittc2dzdHIgImFnZ2l1bmdlbmRvIHVuIGZpbGUgc3lzdGVtIGFsIGpvdXJuYWwgaW4gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc0MworbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgaW5vZGU6ICIKK21zZ3N0ciAiQ3JlYXppb25lIGRlbGwnaW5vZGUgZGVsIGpvdXJuYWw6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NzU3Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiCittc2dzdHIgIiIKKyJcbiIKKyJcdGNlcmNhbmRvIGRpIGNyZWFyZSBpbCBmaWxlIGRpIGpvdXJuYWwiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjgzMgorIywgZnV6enkKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2UgcXVvdGEgb3B0aW9ucyFcbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYWxsb2NhcmUgbWVtb3JpYSBwZXIgZmFyZSBpbCBwYXJzaW5nIGRlbGxlIG9wemlvbmkgcmFpZCFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6ODU0Cittc2dpZCAiIgorIlxuIgorIkJhZCBxdW90YSBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJGb2xsb3dpbmcgdmFsaWQgcXVvdGEgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIChwYXNzIGJ5IHNlcGFyYXRpbmcgd2l0aCAiCisiY29tbWEpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHBhcnNlIGRhdGUvdGltZSBzcGVjaWZpZXI6ICVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjb21wcmVuZGVyZSBpbCBmb3JtYXRvIGRpIGRhdGEvb3JhOiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTQyIG1pc2MvdHVuZTJmcy5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbW91bnRzIGNvdW50IC0gJXMiCittc2dzdHIgIm51bWVybyBkaSBtb3VudCBub24gdmFsaWRpIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk3MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGVycm9yIGJlaGF2aW9yIC0gJXMiCittc2dzdHIgImNvbXBvcnRhbWVudG8gcmVsYXRpdm8gYWQgdW4gZXJyb3JlIG5vbiB2YWxpZG8gLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaWQvZ3JvdXAgbmFtZSAtICVzIgorbXNnc3RyICJnaWQvbm9tZSBncnVwcG8gbm9uIHZhbGlkbyAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbnRlcnZhbCAtICVzIgorbXNnc3RyICJpbnRlcnZhbGxvIG5vbiB2YWxpZG8gLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2sgcmF0aW8gLSAlcyIKK21zZ3N0ciAicGVyY2VudHVhbGUgZGkgYmxvY2NoaSByaXNlcnZhdGkgbm9uIHZhbGlkYSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDc1Cittc2dpZCAiLW8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1vIHB1w7IgZXNzZXJlIHNwZWNpZmljYXRhIHNvbG8gdW5hIHZvbHRhIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDg0Cittc2dpZCAiLU8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1PIHB1w7IgZXNzZXJlIHNwZWNpZmljYXRhIHNvbG8gdW5hIHZvbHRhIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9ja3MgY291bnQgLSAlcyIKK21zZ3N0ciAibnVtZXJvIGRpIGJsb2NjaGkgcmlzZXJ2YXRpIG5vbiB2YWxpZG8gLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdWlkL3VzZXIgbmFtZSAtICVzIgorbXNnc3RyICJ1aWQvbm9tZSB1dGVudGUgbm9uIHZhbGlkbyAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgImRpbWVuc2lvbmUgaW5vZGUgbm9uIHZhbGlkYSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIklub2RlIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtbXBfdXBkYXRlX2ludGVydmFsIHRvbyBiaWc6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZFxuIgorbXNnaWRfcGx1cmFsICIiCisiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyWzBdICJJbXBvc3RhemlvbmUgZGVsIG51bWVybyBtYXNzaW1vIGRpIG1vdW50IGEgJWRcbiIKK21zZ3N0clsxXSAiSW1wb3N0YXppb25lIGRlbCBudW1lcm8gbWFzc2ltbyBkaSBtb3VudCBhICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpZGU6ICVzXG4iCittc2dzdHIgIkluc2llbWUgZGkgb3B6aW9uaSBkaSBtb3VudCBub24gdmFsaWRvOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjkxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaXBlLXdpZHRoOiAlc1xuIgorbXNnc3RyICJQYXJhbWV0cm8gZGkgc3RyaWRlIG5vbiB2YWxpZG8uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaGFzaCBhbGdvcml0aG06ICVzXG4iCittc2dzdHIgIlBhcmFtZXRybyBkaSBzdHJpZGUgbm9uIHZhbGlkby5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gdG8gJXMgKCVkKVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMzEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNoIGFsZ29yaXRobT5cbiIKKyJcdG1vdW50X29wdHM9PGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucz5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBjaHVuayBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZV93aWR0aD08UkFJRCBzdHJpZGUqZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorbXNnc3RyICIiCisiXG4iCisiT3B6aW9uaSByYWlkIG5vbiB2YWxpZGUuXG4iCisiXG4iCisiTGUgb3B6aW9uaSByYWlkIHNvbm8gc2VwYXJ0ZSBkYSB2aXJnb2xlLCBlIHBvc3Nvbm8gYXZlcmUgdW4gcGFyYW1ldHJvLCBjaGVcbiIKKyJcdMOoIHBhc3NhdG8gZGEgdW4gc2Vnbm8gZGkgdWd1YWxlICgnPScpLlxuIgorIlxuIgorIkxlIG9wemlvbmkgcmFpZCB2YWxpZGUgc29ubzpcbiIKKyJcdHN0cmlkZT1sdW5naGV6emEgc3RyaWRlIGluIGJsb2NjaGk+XG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3OTgKKyMsIGZ1enp5Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgaW5vZGUgYml0bWFwXG4iCittc2dzdHIgImxlZ2dlbmRvIGxlIG1hcHBlIGRlaSBiaXQiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MDMKKyMsIGZ1enp5Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgYmxvY2sgYml0bWFwXG4iCittc2dzdHIgImxldHR1cmEgZGVsbGUgbWFwcGUgZGkgYml0IGlub2RlIGUgYmxvY2NvIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODIwIHJlc2l6ZS9yZXNpemUyZnMuYzo5MzEKK21zZ2lkICJibG9ja3MgdG8gYmUgbW92ZWQiCittc2dzdHIgImJsb2NjaGkgZGEgc3Bvc3RhcmUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjMKK21zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2sgYml0bWFwIHdoZW4gaW5jcmVhc2luZyBpbm9kZSBzaXplXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyOQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gaW5jcmVhc2UgaW5vZGUgc2l6ZSBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODM0CisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byByZWxvY2F0ZSBibG9ja3MgZHVyaW5nIGlub2RlIHJlc2l6ZSBcbiIKK21zZ3N0ciAibGVnZ2VuZG8gbCdpbm9kZSBkZWkgYmxvY2NoaSBub24gdmFsaWRpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODY2Cittc2dpZCAiIgorIkVycm9yIGluIHJlc2l6aW5nIHRoZSBpbm9kZSBzaXplLlxuIgorIlJ1biBlMnVuZG8gdG8gdW5kbyB0aGUgZmlsZSBzeXN0ZW0gY2hhbmdlcy4gXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTg5MworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGRiIGZpbGVuYW1lXG4iCittc2dzdHIgIkltcG9zc2liaWxlIGFsbG9jYXJlIG1lbW9yaWEgcGVyIGkgdGlwaSBkaSBmaWxlIHN5c3RlbVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTE0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGVsZXRlICVzIgorbXNnc3RyICJwcm92YW5kbyBhIHJpZGltZW5zaW9uYXJlICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyB1bmRvIHRoZSB0dW5lMmZzIG9wZXJhdGlvbiBwbGVhc2UgcnVuIHRoZSBjb21tYW5kXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBibG9jayBtYWdpYyBpcyBiYWQuIFRyeSB0byBmaXggaXQgYnkgcnVubmluZzpcbiIKKyInZTJmc2NrIC1mICVzJ1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGlub2RlIHNpemUgaXMgYWxyZWFkeSAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDgxCittc2dpZCAiU2hyaW5raW5nIGlub2RlIHNpemUgaXMgbm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICIiCisiSW1wb3N0YXppb25lIGRpIGRhdGEgZWQgb3JhIGRlbGwndWx0aW1vIGNvbnRyb2xsbyBkZWwgZmlsZSBzeXN0ZW0gYSAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlub2RlIHNpemUgJWx1IChtYXggJWQpXG4iCittc2dzdHIgImRpbWVuc2lvbmUgZGVsbCdpbm9kZSBub24gdmFsaWRhOiAlZCAobWluICVkL21heCAlZCkiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtYXhpbWFsIG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIkltcG9zdGF6aW9uZSBkZWwgbnVtZXJvIG1hc3NpbW8gZGkgbW91bnQgYSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3VycmVudCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICJJbXBvc3RhemlvbmUgZGVsIG51bWVybyBhdHR1YWxlIGRpIG1vdW50IGEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE0NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBlcnJvciBiZWhhdmlvciB0byAlZFxuIgorbXNnc3RyICJJbXBvc3RhemlvbmUgZGVsIGNvbXBvcnRhbWVudG8gZGEgZXJyb3JlIGEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBnaWQgdG8gJWx1XG4iCittc2dzdHIgIkltcG9zdGF6aW9uZSBkZWwgZ2lkIGRlaSBibG9jY2hpIHJpc2VydmF0aSBhICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTU0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyBpcyB0b28gYmlnICglbHUpIgorbXNnc3RyICJpbCBudW1lcm8gZGkgYmxvY2NoaSByaXNlcnZhdGkgw6ggdHJvcHBvIGFsdG8gKCVsdSkiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0ciAiSW1wb3N0YXppb25lIGRlbGwnaW50ZXJ2YWxsbyB0cmEgaSBjb250cm9sbGkgYSAlbHUgc2Vjb25kaVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50YWdlIHRvICVnJSUgKCVsbHUgYmxvY2tzKVxuIgorbXNnc3RyICIiCisiSW1wb3N0YXppb25lIGRlbGxhIHBlcmNlbnR1YWxlIGRpIGJsb2NjaGkgcmlzZXJ2YXRpIGEgJWx1ICgldSBibG9jY2hpKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MgY291bnQgaXMgdG9vIGJpZyAoJWxsdSkiCittc2dzdHIgImlsIG51bWVybyBkaSBibG9jY2hpIHJpc2VydmF0aSDDqCB0cm9wcG8gYWx0byAoJWx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgY291bnQgdG8gJWxsdVxuIgorbXNnc3RyICJJbXBvc3RhemlvbmUgZGVsIG51bWVybyBkaSBibG9jY2hpIHJpc2VydmF0aSBhICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTg3Cittc2dpZCAiIgorIlxuIgorIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSBzdXBlcmJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIklsIGZpbGUgc3lzdGVtIGhhIGdpw6AgZGVpIHN1cGVyLWJsb2NjaGkgc3BhcnNpLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTkxCittc2dpZCAiIgorIlxuIgorIlNldHRpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZFxuIgorImZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBtZXRhX2JnIGZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIHNldC4gICVzIgorbXNnc3RyICIiCisKKyMgZnV6enkKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDcKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkNsZWFyaW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgImltcG9zc2liaWxlIGltcG9zdGFyZWkgaSBmbGFnIGRlbCBzdXBlcmJsb2NjbyBhICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB0aW1lIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRvICVzXG4iCittc2dzdHIgIiIKKyJJbXBvc3RhemlvbmUgZGkgZGF0YSBlIG9yYSBkZWxsJ3VsdGltbyBjb250cm9sbG8gZGVsIGZpbGUgc3lzdGVtIGEgJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyB1aWQgdG8gJWx1XG4iCittc2dzdHIgIkltcG9zdGF6aW9uZSBkZWxsJ3VpZCBkZWkgYmxvY2NoaSByaXNlcnZhdGkgYSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI1MworbXNnaWQgIkVycm9yIGluIHVzaW5nIGNsZWFyX21tcC4gSXQgbXVzdCBiZSB1c2VkIHdpdGggLWZcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjcxCittc2dpZCAiIgorIlRoZSBxdW90YSBmZWF0dXJlIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIiIKKyJJbCBmbGFnIGhhc19qb3VybmFsIHB1w7IgZXNzZXJlIGF6emVyYXRvIHF1YW5kbyBpbCBmaWxlIHN5c3RlbSBub25cbiIKKyLDqCBtb250YXRvIG8gw6ggbW9udGF0byBzb2xvIGluIGxldHR1cmEuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyOTIKK21zZ2lkICJUaGUgVVVJRCBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiSWwgZmxhZyBoYXNfam91cm5hbCBwdcOyIGVzc2VyZSBhenplcmF0byBxdWFuZG8gaWwgZmlsZSBzeXN0ZW0gbm9uXG4iCisiw6ggbW9udGF0byBvIMOoIG1vbnRhdG8gc29sbyBpbiBsZXR0dXJhLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzIyCittc2dpZCAiSW52YWxpZCBVVUlEIGZvcm1hdFxuIgorbXNnc3RyICJGb3JtYXRvIFVVSUQgbm9uIHZhbGlkb1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzM3CisjLCBmdXp6eQorbXNnaWQgIk5lZWQgdG8gdXBkYXRlIGpvdXJuYWwgc3VwZXJibG9jay5cbiIKK21zZ3N0ciAibGV0dHVyYSBkZWwgc3VwZXJibG9jY28gZGVsIGpvdXJuYWxcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM1OAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIiIKKyJJbCBmbGFnIGhhc19qb3VybmFsIHB1w7IgZXNzZXJlIGF6emVyYXRvIHF1YW5kbyBpbCBmaWxlIHN5c3RlbSBub25cbiIKKyLDqCBtb250YXRvIG8gw6ggbW9udGF0byBzb2xvIGluIGxldHR1cmEuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNjYKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIGlub2RlIHNpemUgbm90IHN1cHBvcnRlZCBmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgZmxleF9iZ1xuIgorImZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGlub2RlIHNpemUgJWx1XG4iCittc2dzdHIgImRpbWVuc2lvbmUgaW5vZGUgbm9uIHZhbGlkYSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzgyCisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICJpbml6aWFuZG8gbGEgc2NhbnNpb25lIGRlZ2xpIGlub2RlIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzkzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlkZSBzaXplIHRvICVkXG4iCittc2dzdHIgIkltcG9zdGF6aW9uZSBkZWwgZ2lkIGRlaSBibG9jY2hpIHJpc2VydmF0aSBhICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlwZSB3aWR0aCB0byAlZFxuIgorbXNnc3RyICJJbXBvc3RhemlvbmUgZGVsIGdpZCBkZWkgYmxvY2NoaSByaXNlcnZhdGkgYSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjQwNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnMgdG8gJyVzJ1xuIgorbXNnc3RyICJJbXBvc3RhemlvbmUgZGVsIG51bWVybyBhdHR1YWxlIGRpIG1vdW50IGEgJWRcbiIKKworIzogbWlzYy91dGlsLmM6OTMKK21zZ2lkICI8cHJvY2VlZGluZz5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzo5NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUHJvY2VlZCBhbnl3YXkgKG9yIHdhaXQgJWQgc2Vjb25kcykgPyAoeSxuKSAiCittc2dzdHIgIlByb2NlZGVyZSBjb211bnF1ZT8gKHMsbikgIgorCisjOiBtaXNjL3V0aWwuYzoxMDEKK21zZ2lkICJQcm9jZWVkIGFueXdheT8gKHksbikgIgorbXNnc3RyICJQcm9jZWRlcmUgY29tdW5xdWU/IChzLG4pICIKKworIzogbWlzYy91dGlsLmM6MTMyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW91bnRlZCBvbiAlcyBvbiAlcyIKK21zZ3N0ciAibnVtZXJvIGRpIG1vdW50IG5vbiB2YWxpZGkgLSAlcyIKKworIzogbWlzYy91dGlsLmM6MTM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW91bnRlZCBvbiAlcyIKK21zZ3N0ciAibnVtZXJvIGRpIG1vdW50IG5vbiB2YWxpZGkgLSAlcyIKKworIzogbWlzYy91dGlsLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0Y3JlYXRlZCBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vZGlmaWVkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGb3VuZCBhICVzIHBhcnRpdGlvbiB0YWJsZSBpbiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSAlcyBkb2VzIG5vdCBleGlzdCBhbmQgbm8gc2l6ZSB3YXMgc3BlY2lmaWVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjIxMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgcmVndWxhciBmaWxlICVzXG4iCittc2dzdHIgImZpbGUgcmVnb2xhcmUiCisKKyM6IG1pc2MvdXRpbC5jOjIxMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgImUybGFiZWw6IGltcG9zc2liaWxlIGFwcmlyZSAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMTYKK21zZ2lkICIiCisiXG4iCisiVGhlIGRldmljZSBhcHBhcmVudGx5IGRvZXMgbm90IGV4aXN0OyBkaWQgeW91IHNwZWNpZnkgaXQgY29ycmVjdGx5P1xuIgorbXNnc3RyICIiCisiXG4iCisiU2VtYnJhIGNoZSBpbCBkaXNwb3NpdGl2byBub24gZXNpc3RhOyDDqCBzdGF0byBzcGVjaWZpY2F0byBjb3JyZXR0YW1lbnRlP1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIG5vbiDDqCB1biBkZXZpY2Ugc3BlY2lhbGUgYSBibG9jY2hpLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbSBsYWJlbGxlZCAnJXMnXG4iCittc2dzdHIgIiVzIGNvbnRpZW5lIHVuIGZpbGUgc3lzdGVtICVzIGNvbiBldGljaGV0dGEgXCIlc1wiXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjb250YWlucyBhICVzIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgIiVzIGNvbnRpZW5lIHVuIGZpbGUgc3lzdGVtICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBlbnRpcmUgZGV2aWNlLCBub3QganVzdCBvbmUgcGFydGl0aW9uIVxuIgorbXNnc3RyICIlcyDDqCB1biBkZXZpY2UgaW50ZXJvLCBub24gc29sbyB1bmEgcGFydGl6aW9uZS5cbiIKKworIzogbWlzYy91dGlsLmM6MzIzCittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIiIKKyJta2UyZnMgw6ggc3RhdG8gZm9yemF0byBjb211bnF1ZS4gU2kgc3BlcmEgY2hlIC9ldGMvbXRhYiBzaWEgc2JhZ2xpYXRvLlxuIgorCisjOiBtaXNjL3V0aWwuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgbWFrZSBhICVzIGhlcmUhXG4iCittc2dzdHIgIm5vbiBmYXLDsiB1biAlcyBxdWkhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMzNQorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjM1MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBqb3VybmFsIG9wdGlvbnMhXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBhbGxvY2FyZSBtZW1vcmlhIHBlciBmYXJlIGlsIHBhcnNpbmcgZGVsbGUgb3B6aW9uaSBkZWwgam91cm5hbCFcbiIKKworIzogbWlzYy91dGlsLmM6Mzc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IGZpbmQgam91cm5hbCBkZXZpY2UgbWF0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBpIG1hZ2ljIG51bWJlcnMgZGVsIHN1cGVyYmxvY2NvIGRlbCBqb3VybmFsIgorCisjOiBtaXNjL3V0aWwuYzo0MDMKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkJhZCBqb3VybmFsIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkpvdXJuYWwgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGpvdXJuYWwgb3B0aW9ucyBhcmU6XG4iCisiXHRzaXplPTxqb3VybmFsIHNpemUgaW4gbWVnYWJ5dGVzPlxuIgorIlx0ZGV2aWNlPTxqb3VybmFsIGRldmljZT5cbiIKKyJcdGxvY2F0aW9uPTxqb3VybmFsIGxvY2F0aW9uPlxuIgorIlxuIgorIlRoZSBqb3VybmFsIHNpemUgbXVzdCBiZSBiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGZpbGVzeXN0ZW0gYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiU29ubyBzdGF0ZSBzcGVjaWZpY2F0ZSBvcHppb25pIG5vbiB2YWxpZGUgcGVyIGlsIGpvdXJuYWwuXG4iCisiXG4iCisiTGUgb3B6aW9uaSBwZXIgaWwgam91cm5hbCBzb25vIHNlcGFyYXRlIGRhIHZpcmdvbGUsIGUgcG9zc29ubyBhdmVyZSB1biAiCisicGFyYW1ldHJvLFxuIgorIlx0cGFzc2F0byBkYSB1biBzZWdubyBkaSB1Z3VhbGUgKCc9JykuXG4iCisiXG4iCisiT3B6aW9uaSB2YWxpZGUgcGVyIGlsIGpvdXJuYWwgc29ubzpcbiIKKyJcdHNpemU9PGRpbWVuc2lvbmUgZGVsIGpvdXJuYWwgaW4gTUI+XG4iCisiXHRkZXZpY2U9PGRpc3Bvc2l0aXZvIGRpIGpvdXJuYWw+XG4iCisiXG4iCisiTGEgZGltZW5zaW9uZSBkZWwgam91cm5hbCBkZXYnZXNzZXJlIGNvbXByZXNvIHRyYSAxMDI0IGUgMTAyNDAwIGJsb2NjaGkgZGVsICIKKyJmaWxlc3lzdGVtLlxuIgorIlxuIgorCisjOiBtaXNjL3V0aWwuYzo0MzQKK21zZ2lkICIiCisiXG4iCisiRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIgorbXNnc3RyICIiCisiXG4iCisiRmlsZXN5c3RlbSB0cm9wcG8gcGljY29sbyBwZXIgdW4gam91cm5hbFxuIgorCisjOiBtaXNjL3V0aWwuYzo0NDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgcmVxdWVzdGVkIGpvdXJuYWwgc2l6ZSBpcyAlZCBibG9ja3M7IGl0IG11c3QgYmVcbiIKKyJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gIEFib3J0aW5nLlxuIgorbXNnc3RyICIiCisiXG4iCisiTGEgZGltZW5zaW9uZSBzcGVjaWZpY2F0YSBkZWwgam91cm5hbCDDqCBkaSAlZCBibG9jY2hpLCBtYSBlc3NhXG4iCisiZGV2J2Vzc2VyZSBjb21wcmVzYSB0cmEgMTAyNCBlIDEwMjQwMCBibG9jY2hpLiBPcGVyYXppb25lIGFubnVsbGF0YS5cbiIKKworIzogbWlzYy91dGlsLmM6NDQ5Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgc2l6ZSB0b28gYmlnIGZvciBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiXG4iCisiRGltZW5zaW9uZSBkZWwgam91cm5hbCB0cm9wcG8gZ3JhbmRlIHBlciBpbCBmaWxlc3lzdGVtLlxuIgorCisjOiBtaXNjL3V0aWwuYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZXN5c3RlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hlY2tlZCBldmVyeSAlZCBtb3VudHMgb3JcbiIKKyIlZyBkYXlzLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuICBVc2UgdHVuZTJmcyAtYyBvciAtaSB0byBvdmVycmlkZS5cbiIKK21zZ3N0ciAiIgorIlF1ZXN0byBmaWxlc3lzdGVtIHZlcnLDoCBhdXRvbWF0aWNhbWVudGUgY29udHJvbGxhdG8gb2duaSAlZCBtb3VudCwgb1xuIgorIiVnIGdpb3JuaSwgYSBzZWNvbmRhIGRpIHF1YWxlIHZlbmdhIHByaW1hLiBVc2FyZSB0dW5lMmZzIC1jIG8gLWkgcGVyICIKKyJjYW1iaWFyZS5cbiIKKworIzogbWlzYy91dWlkZC5jOjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWRdIFstcCBwaWRmaWxlXSBbLXMgc29ja2V0cGF0aF0gWy1UIHRpbWVvdXRdXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyBbLXJ8dF0gWy1uIG51bV0gWy1zIHNvY2tldHBhdGhdXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyAta1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoxNTUKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGFyZ3VtZW50cyIKK21zZ3N0ciAiZGltZW5zaW9uZSBkZWwgZnJhbW1lbnRvIG5vbiB2YWxpZGEgLSAlcyIKKworIzogbWlzYy91dWlkZC5jOjE3MworbXNnaWQgImNvbm5lY3QiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjE5MgorbXNnaWQgIndyaXRlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDAKK21zZ2lkICJyZWFkIGNvdW50IgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDYKK21zZ2lkICJiYWQgcmVzcG9uc2UgbGVuZ3RoIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXVpZGQgZGFlbW9uIGFscmVhZHkgcnVubmluZyBhdCBwaWQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgdW5peCBzdHJlYW0gc29ja2V0OiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY29tcHJlbmRlcmUgaWwgZm9ybWF0byBkaSBkYXRhL29yYTogJXMiCisKKyM6IG1pc2MvdXVpZGQuYzozMDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGJpbmQgdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgaWwgc3VwZXJibG9jY28gZXh0MiIKKworIzogbWlzYy91dWlkZC5jOjMxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbGlzdGVuIG9uIHVuaXggc29ja2V0ICVzOiAlc1xuIgorbXNnc3RyICJJbXBvc3NpYmlsZSByaWNvbm5ldHRlcmUgJWk6ICVtXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgZnJvbSBjbGllbnQsIGxlbiA9ICVkXG4iCittc2dzdHIgIkVycm9yZSBkdXJhbnRlIGxhIGxldHR1cmEgZGVsbCdAaSAlaTogJW1cbiIKKworIzogbWlzYy91dWlkZC5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVyYXRpb24gJWQsIGluY29taW5nIG51bSA9ICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHJhbmRvbSBVVUlEOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kICVkIHN1YnNlcXVlbnQgVVVJRHNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IG1pc2MvdXVpZGQuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkICVkIFVVSUQnczpcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NDMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiAlZFxuIgorbXNnc3RyICJWZXJzaW9uZSBFQSBub24gdmFsaWRhLlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDc3IG1pc2MvdXVpZGQuYzo0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTM0IG1pc2MvdXVpZGQuYzo1NjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNhbGxpbmcgdXVpZGQgZGFlbW9uICglcyk6ICVzXG4iCittc2dzdHIgIkVycm9yZSBjcmVhbmRvIGxhIEBkIC9AbCAoJXMpOiAlbVxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFuZCBzdWJzZXF1ZW50IFVVSURcbiIKK21zZ2lkX3BsdXJhbCAiJXMgYW5kIHN1YnNlcXVlbnQgJWQgVVVJRHNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1NDgKK21zZ2lkICJMaXN0IG9mIFVVSUQnczpcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgcmVwbHkgbGVuZ3RoIGZyb20gc2VydmVyICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBraWxsIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiS2lsbGVkIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZ2VuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstcl0gWy10XVxuIgorbXNnc3RyICJVc286ICVzIFstcl0gWy10XVxuIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAyCisjLCBmdXp6eQorbXNnaWQgIiMgRXh0ZW50IGR1bXA6XG4iCittc2dzdHIgIiMgRHVtcCBlc3Rlc286XG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBkZXZpY2UgW25ld19zaXplXVxuIgorIlxuIgorbXNnc3RyICIiCisiVXNvOiAlcyBbLWQgZmxhZ19kaV9kZWJ1Z10gWy1mXSBbLUZdIFstcF0gZGV2aWNlIFtudW92YS1kaW1lbnNpb25lXVxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjY2Cittc2dpZCAiRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiRXN0ZW5zaW9uZSBkZWxsYSB0YXZvbGEgZGVnbGkgaW5vZGUiCisKKyM6IHJlc2l6ZS9tYWluLmM6NjkKK21zZ2lkICJSZWxvY2F0aW5nIGJsb2NrcyIKK21zZ3N0ciAiUmlsb2NhemlvbmUgZGVpIGJsb2NjaGkiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzIKK21zZ2lkICJTY2FubmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiU2NhbnNpb25lIGRlbGxhIHRhdm9sYSBkZWdsaSBpbm9kZSIKKworIzogcmVzaXplL21haW4uYzo3NQorbXNnaWQgIlVwZGF0aW5nIGlub2RlIHJlZmVyZW5jZXMiCittc2dzdHIgIkFnZ2lvcm5hbWVudG8gZGVpIHJpZmVyaW1lbnRpIGRlZ2xpIGlub2RlIgorCisjOiByZXNpemUvbWFpbi5jOjc4Cittc2dpZCAiTW92aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJTcG9zdGFtZW50byBkZWxsYSB0YXZvbGEgZGVnbGkgaW5vZGUiCisKKyM6IHJlc2l6ZS9tYWluLmM6ODEKK21zZ2lkICJVbmtub3duIHBhc3M/IT8iCittc2dzdHIgIlBhc3NvIHNjb25vc2NpdXRvPyE/IgorCisjOiByZXNpemUvbWFpbi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZ2luIHBhc3MgJWQgKG1heCA9ICVsdSlcbiIKK21zZ3N0ciAiSW5pemlvIGRlbCBwYXNzbyAlZCAobWF4ID0gJWx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjE1NQorbXNnaWQgIiIKKyJcbiIKKyJSZXNpemluZyBiaWdhbGxvYyBmaWxlIHN5c3RlbXMgaGFzIG5vdCBiZWVuIGZ1bGx5IHRlc3RlZC4gIFByb2NlZWQgYXRcbiIKKyJ5b3VyIG93biByaXNrISAgVXNlIHRoZSBmb3JjZSBvcHRpb24gaWYgeW91IHdhbnQgdG8gZ28gYWhlYWQgYW55d2F5LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6MjczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIgorbXNnc3RyICJhdnZpYW5kbyBsYSBzY2Fuc2lvbmUgZGVnbGkgaW5vZGUiCisKKyM6IHJlc2l6ZS9tYWluLmM6MjgxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIHN0YXQgaW5mb3JtYXRpb24gZm9yICVzIgorbXNnc3RyICJpbXBvc3RhbmRvIGxhIHZlcnNpb25lIGEgJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWYgJXMnIGZpcnN0LlxuIgorIlxuIgorbXNnc3RyICIiCisiRXNlZ3VpcmUgcHJpbWEgJ2UyZnNjayAtZiAlcycuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGltYXRlZCBtaW5pbXVtIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW06ICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQwNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBuZXcgc2l6ZTogJXNcbiIKK21zZ3N0ciAiUGFyYW1ldHJvIGRpIHN0cmlkZSBub24gdmFsaWRvLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQyMQorbXNnaWQgIk5ldyBzaXplIHRvbyBsYXJnZSB0byBiZSBleHByZXNzZWQgaW4gMzIgYml0c1xuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJOZXcgc2l6ZSBzbWFsbGVyIHRoYW4gbWluaW11bSAoJWxsdSlcbiIKK21zZ3N0ciAiIgorIkRpbWVuc2lvbmUgZGVpIGJsb2NjaGkgZGVsIGRldmljZSBkaSBqb3VybmFsaW5nICglZCkgbWlub3JlIGRlbGxhIGRpbSBtaW5pbWEgIgorImRlaSBibG9jY2hpICVkXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDM1CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgc3RyaWRlIGxlbmd0aCIKK21zZ3N0ciAiUGFyYW1ldHJvIGRpIHN0cmlkZSBub24gdmFsaWRvLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb250YWluaW5nIHBhcnRpdGlvbiAob3IgZGV2aWNlKSBpcyBvbmx5ICVsbHUgKCVkaykgYmxvY2tzLlxuIgorIllvdSByZXF1ZXN0ZWQgYSBuZXcgc2l6ZSBvZiAlbGx1IGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkxhIHBhcnRpemlvbmUgKG8gZGV2aWNlKSBjb250ZW5lbnRlIMOoIHNvbG8gZGkgJWQgKCVkaykgYmxvY2NoaS5cbiIKKyJFJyBzdGF0YSByaWNoaWVzdGEgdW5hIG51b3ZhIGRpbWVuc2lvbmUgZGkgJWQgYmxvY2NoaS5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0NjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBpcyBhbHJlYWR5ICVsbHUgKCVkaykgYmxvY2tzIGxvbmcuICBOb3RoaW5nIHRvIGRvIVxuIgorIlxuIgorbXNnc3RyICIiCisiSWwgZmlsZXN5c3RlbSDDqCBnacOgIGx1bmdvICVkIGJsb2NjaGkuIE51bGxhIGRhIGZhcmUhXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorIklsIGZpbGVzeXN0ZW0gc3UgJXMgw6ggb3JhIGx1bmdvICVkIGJsb2NjaGkuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZXNpemUgJXMiCittc2dzdHIgInByb3ZhbmRvIGEgcmlkaW1lbnNpb25hcmUgJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWZ5ICVzJyB0byBmaXggdGhlIGZpbGVzeXN0ZW1cbiIKKyJhZnRlciB0aGUgYWJvcnRlZCByZXNpemUgb3BlcmF0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gb24gJXMgaXMgbm93ICVsbHUgKCVkaykgYmxvY2tzIGxvbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJJbCBmaWxlc3lzdGVtIHN1ICVzIMOoIG9yYSBsdW5nbyAlZCBibG9jY2hpLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjUwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHRydW5jYXRlICVzIgorbXNnc3RyICJ0ZW50YW5kbyBkaSBmYXJlIGxvIHN0YXQgZGkgJXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4MgorIywgZnV6enkKK21zZ2lkICJrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXplIHdpdGggc3BhcnNlX3N1cGVyMiIKK21zZ3N0ciAiSWwgQGogZXN0ZXJubyBub24gc3VwcG9ydGEgcXVlc3RvIEBmXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4NworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXM7IG9uLWxpbmUgcmVzaXppbmcgcmVxdWlyZWRcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6OTEKK21zZ2lkICJPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTYKK21zZ2lkICJGaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMjUKKyMsIGZ1enp5Cittc2dpZCAiTm90IGVub3VnaCByZXNlcnZlZCBnZHQgYmxvY2tzIGZvciByZXNpemluZyIKK21zZ3N0ciAibGVnZ2VuZG8gbCdpbm9kZSBkZWkgYmxvY2NoaSBub24gdmFsaWRpIgorCisjOiByZXNpemUvb25saW5lLmM6MTMyCisjLCBmdXp6eQorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHJlc2l6aW5nIGEgZmlsZSBzeXN0ZW0gdGhpcyBsYXJnZSIKK21zZ3N0ciAiSWwga2VybmVsIEh1cmQgbm9uIHN1cHBvcnRhIGxhIGNhcmF0dGVyaXN0aWNhIGZpbGV0eXBlLlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MTQwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBtb3VudHBvaW50ICVzIgorbXNnc3RyICIiCisiXG4iCisiXHR0ZW50YW5kbyBkaSBhcHJpcmUgaWwgam91cm5hbCBpbiAlc1xuIgorCisjOiByZXNpemUvb25saW5lLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIk9sZCByZXNpemUgaW50ZXJmYWNlIHJlcXVlc3RlZC5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MTY0IHJlc2l6ZS9vbmxpbmUuYzoxODEKK21zZ2lkICJQZXJtaXNzaW9uIGRlbmllZCB0byByZXNpemUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MTY3IHJlc2l6ZS9vbmxpbmUuYzoxODcKKyMsIGZ1enp5Cittc2dpZCAiV2hpbGUgY2hlY2tpbmcgZm9yIG9uLWxpbmUgcmVzaXppbmcgc3VwcG9ydCIKK21zZ3N0ciAibGVnZ2VuZG8gbCdpbm9kZSBkZWkgYmxvY2NoaSBub24gdmFsaWRpIgorCisjOiByZXNpemUvb25saW5lLmM6MTg0CisjLCBmdXp6eQorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiSWwgQGogZXN0ZXJubyBub24gc3VwcG9ydGEgcXVlc3RvIEBmXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGVyZm9ybWluZyBhbiBvbi1saW5lIHJlc2l6ZSBvZiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MjMzCisjLCBmdXp6eQorbXNnaWQgIldoaWxlIHRyeWluZyB0byBleHRlbmQgdGhlIGxhc3QgZ3JvdXAiCittc2dzdHIgImNlcmNhbmRvIGRpIGFwcmlyZSBpbCBqb3VybmFsIGVzdGVybm8iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyODcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHRyeWluZyB0byBhZGQgZ3JvdXAgIyVkIgorbXNnc3RyICJkdXJhbnRlIGwnYXBlcnR1cmEgZGkgJXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlcywgYW5kIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IHN1cHBvcnRlZCBvbiAiCisidGhpcyBzeXN0ZW0uXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo2OTEKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MiCittc2dzdHIgImJsb2NjaGkgcmlzZXJ2YXRpIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6OTM2Cittc2dpZCAibWV0YS1kYXRhIGJsb2NrcyIKK21zZ3N0ciAiYmxvY2NoaSBkaSBtZXRhLWRhdGkiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoxMDM5IHJlc2l6ZS9yZXNpemUyZnMuYzoxODM2CisjLCBmdXp6eQorbXNnaWQgIm5ldyBtZXRhIGJsb2NrcyIKK21zZ3N0ciAiYmxvY2NoaSBkaSBtZXRhLWRhdGkiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMDU2Cittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbiEgIE5vIHNiIGluIGxhc3Qgc3VwZXJfc3BhcnNlIGJnP1xuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMDYxCittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbiEgIFVuZXhwZWN0ZWQgb2xkX2Rlc2MgaW4gc3VwZXJfc3BhcnNlIGJnP1xuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMTM5Cittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbjogcmVzaXplIGlub2RlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExCittc2dpZCAiRVhUMkZTIExpYnJhcnkgdmVyc2lvbiAxLjQyLjEzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0Ml9maWxzeXMgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfc2NhbiBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHVuaXggaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19tYW5hZ2VyIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJsb2NrX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZ2VuZXJpY19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdGVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGRpcmVjdG9yeSBibG9jayBsaXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGljb3VudCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBQb3dlcnF1ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0MiBmaWxlIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIEV4dDIgSW1hZ2UgSGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGUgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBoYW5kbGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayIKK21zZ3N0ciAiVmFsb3JlIG1hZ2ljIG5vbiBjb3JyZXR0byBuZWwgc3VwZXItYmxvY2NvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzEKK21zZ2lkICJGaWxlc3lzdGVtIHJldmlzaW9uIHRvbyBoaWdoIgorbXNnc3RyICJOdW1lcm8gZGkgcmV2aXNpb25lIGRlbCBmaWxlc3lzdGVtIHRyb3BwbyBlbGV2YXRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzIKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHRvIGZpbGVzeXN0ZW0gb3BlbmVkIHJlYWQtb25seSIKK21zZ3N0ciAiVGVudGF0aXZvIGRpIHNjcml2ZXJlIHN1IHVuIGZpbGVzeXN0ZW0gYXBlcnRvIGluIHNvbGEgbGV0dHVyYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIiwgRGVzY3JpdHRvcmkgZGkgZ3J1cHBvIGEgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzQKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIiwgRGVzY3JpdHRvcmkgZGkgZ3J1cHBvIGEgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzUKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgYmxvY2sgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNgorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM3Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOAorIywgZnV6enkKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgInNjcml2ZW5kbyBsZSBtYXBwZSBkaSBiaXQgZGkgaW5vZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOQorIywgZnV6enkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAic2NyaXZlbmRvIGxlIG1hcHBlIGRpIGJpdCBkaSBpbm9kZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQwCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHdyaXRlIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICJzY3JpdmVuZG8gbGUgbWFwcGUgZGkgYml0IGRpIGJsb2NjbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQxCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHJlYWQgYSBibG9jayBiaXRtYXAiCittc2dzdHIgImxldHR1cmEgZGVsbGUgbWFwcGUgZGkgYml0IGlub2RlIGUgYmxvY2NvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDIKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgInNjcml2ZW5kbyBsYSB0YXZvbGEgZGVnbGkgaW5vZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MworIywgZnV6enkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJTY2Fuc2lvbmUgZGVsbGEgdGF2b2xhIGRlZ2xpIGlub2RlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDQKK21zZ2lkICJDYW4ndCByZWFkIG5leHQgaW5vZGUiCittc2dzdHIgIkltcG9zc2liaWxlIGxlZ2dlcmUgbCdpbm9kZSBzdWNjZXNzaXZvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDUKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bmV4cGVjdGVkIGJsb2NrIHNpemUiCittc2dzdHIgIklsIGZpbGVzeXN0ZW0gaGEgdW5hIGRpbWVuc2lvbmUgZGVsIGJsb2NjbyBub24gYXR0ZXNhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDYKK21zZ2lkICJFWFQyIGRpcmVjdG9yeSBjb3JydXB0ZWQiCittc2dzdHIgIkRpcmVjdG9yeSBFWFQyIGRhbm5lZ2dpYXRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDcKK21zZ2lkICJBdHRlbXB0IHRvIHJlYWQgYmxvY2sgZnJvbSBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHJlYWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ4Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBibG9jayB0byBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHdyaXRlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OQorbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gdGhlIGRpcmVjdG9yeSIKK21zZ3N0ciAiU3BhemlvIG5vbiBzdWZmaWNpZW50ZSBuZWxsYSBkaXJlY3RvcnkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MAorbXNnaWQgIklub2RlIGJpdG1hcCBub3QgbG9hZGVkIgorbXNnc3RyICJCaXRtYXAgZGVnbGkgaW5vZGUgbm9uIGNhcmljYXRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKK21zZ2lkICJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiQml0bWFwIGRlaSBibG9jY2hpIG5vbiBjYXJpY2F0YSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUyCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIiCittc2dzdHIgIk51bWVybyBkaSBpbm9kZSBub24gdmFsaWRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTMKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiTnVtZXJvIGRpIGJsb2NjaGkgbm9uIHZhbGlkbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3IgaW4gZXh0MmZzX2V4cGFuZF9kaXIiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU1Cittc2dpZCAiTm90IGVub3VnaCBzcGFjZSB0byBidWlsZCBwcm9wb3NlZCBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NgorbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU3Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OAorbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU5Cittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjAKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYxCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjIKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBibG9jayBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYzCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgaW5vZGUgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NAorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICJsZXR0dXJhIGRlaSBibG9jY2hpIGluZGlyZXR0aSBkZWxsJ2lub2RlICV1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBkb3VibHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgImxldHR1cmEgZGVpIGJsb2NjaGkgaW5kaXJldHRpIGRlbGwnaW5vZGUgJXUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NgorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIHRyaXBseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAibGV0dHVyYSBkZWkgYmxvY2NoaSBpbmRpcmV0dGkgZGVsbCdpbm9kZSAldSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY3CisjLCBmdXp6eQorbXNnaWQgIkJsb2NrIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiICBNYXBwYSBkZWkgYml0IGRpIGJsb2NjbyBhICAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OAorIywgZnV6enkKK21zZ2lkICJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIiwgbWFwcGEgZGVpIGJpdCBpbm9kZSBhICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY5Cittc2dpZCAiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcwCittc2dpZCAiQSBibG9jayBncm91cCBpcyBtaXNzaW5nIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MQorbXNnaWQgIlRoZSBleHQyIHN1cGVyYmxvY2sgaXMgY29ycnVwdCIKK21zZ3N0ciAiSWwgc3VwZXItYmxvY2NvIGV4dDIgw6ggZGFubmVnZ2lhdG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MgorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzMKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzQKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc1Cittc2dpZCAiVG9vIG1hbnkgc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQuIgorbXNnc3RyICJUcm92YXRpIHRyb3BwaSBjb2xsZWdhbWVudGkgc2ltYm9saWNpLiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc2Cittc2dpZCAiVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB0aGlzIGNhc2UiCittc2dzdHIgIkxhIGZ1bnppb25lIGRpIGNhbGxiYWNrIG5vbiBnZXN0aXLDoCBxdWVzdG8gY2FzbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc3Cittc2dpZCAiVGhlIGlub2RlIGlzIGZyb20gYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJMJ2lub2RlIGFycml2YSBkYSB1biBibG9jY28gZGFubmVnZ2lhdG8gbmVsbGEgdGFiZWxsYSBkZWdsaSBpbm9kZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc4Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzkKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCByZWFkLW9ubHkgZmVhdHVyZShzKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODAKK21zZ2lkICJJTyBDaGFubmVsIGZhaWxlZCB0byBzZWVrIG9uIHJlYWQgb3Igd3JpdGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgxCittc2dpZCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICJBbGxvY2F6aW9uZSBkaSBtZW1vcmlhIG5vbiByaXVzY2l0YSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gZXh0MiBsaWJyYXJ5IgorbXNnc3RyICJBcmdvbWVudG8gbm9uIHZhbGlkbyBwYXNzYXRvIGFsbGEgbGlicmVyaWEgZXh0MiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgzCisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBibG9jayBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIkltcG9zc2liaWxlIGFsbG9jYXJlIG1lbW9yaWEgcGVyIGkgdGlwaSBkaSBmaWxlc3lzdGVtXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NAorIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgaW5vZGUgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhbGxvY2FyZSBtZW1vcmlhIHBlciBpIHRpcGkgZGkgZmlsZXN5c3RlbVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODUKK21zZ2lkICJFeHQyIGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODYKK21zZ2lkICJUb28gbWFueSByZWZlcmVuY2VzIGluIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NworbXNnaWQgIkZpbGUgbm90IGZvdW5kIGJ5IGV4dDJfbG9va3VwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OAorbXNnaWQgIkZpbGUgb3BlbiByZWFkLW9ubHkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg5CisjLCBmdXp6eQorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiQmxvY2NvIGRpcmVjdG9yeSAlZCAoIyVkKSB2dW90byBuZWxsJ2lub2RlICVkXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MAorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJMYSBkaXJlY3RvcnkgRXh0MiBlc2lzdGUgZ2nDoCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkxCittc2dpZCAiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkyCittc2dpZCAiVXNlciBjYW5jZWwgcmVxdWVzdGVkIgorbXNnc3RyICJMJ3V0ZW50ZSBoYSBhbm51bGxhdG8gbGEgcmljaGllc3RhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTMKK21zZ2lkICJFeHQyIGZpbGUgdG9vIGJpZyIKK21zZ3N0ciAiRmlsZSBFeHQyIHRyb3BwbyBncmFuZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NAorbXNnaWQgIlN1cHBsaWVkIGpvdXJuYWwgZGV2aWNlIG5vdCBhIGJsb2NrIGRldmljZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTUKKyMsIGZ1enp5Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiU3VwZXJibG9jY28gZGVsIGpvdXJuYWwgbm9uIHRyb3ZhdG8hXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NgorbXNnaWQgIkpvdXJuYWwgbXVzdCBiZSBhdCBsZWFzdCAxMDI0IGJsb2NrcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTcKK21zZ2lkICJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk4CisjLCBmdXp6eQorbXNnaWQgIkVycm9yIGxvYWRpbmcgZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAiY2VyY2FuZG8gZGkgYXByaXJlIGlsIGpvdXJuYWwgZXN0ZXJubyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk5CisjLCBmdXp6eQorbXNnaWQgIkpvdXJuYWwgbm90IGZvdW5kIgorbXNnc3RyICJTdXBlcmJsb2NjbyBkZWwgam91cm5hbCBub24gdHJvdmF0byFcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMAorbXNnaWQgIkRpcmVjdG9yeSBoYXNoIHVuc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDEKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJhYXR0cmlidXRvIGVzdGVzbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMgorbXNnaWQgIkNhbm5vdCBjcmVhdGUgZmlsZXN5c3RlbSB3aXRoIHJlcXVlc3RlZCBudW1iZXIgb2YgaW5vZGVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDMKK21zZ2lkICJFMmltYWdlIHNuYXBzaG90IG5vdCBpbiB1c2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNAorIywgZnV6enkKK21zZ2lkICJUb28gbWFueSByZXNlcnZlZCBncm91cCBkZXNjcmlwdG9yIGJsb2NrcyIKK21zZ3N0ciAiPElub2RlIGRlbCBkZXNjcml0dG9yZSBkaSBncnVwcG8+IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA1Cittc2dpZCAiUmVzaXplIGlub2RlIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNgorbXNnaWQgIlRyaWVkIHRvIHNldCBibG9jayBibWFwIHdpdGggbWlzc2luZyBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA3Cittc2dpZCAiVERCOiBTdWNjZXNzIgorbXNnc3RyICJUREI6IHN1Y2Nlc3NvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA4Cittc2dpZCAiVERCOiBDb3JydXB0IGRhdGFiYXNlIgorbXNnc3RyICJUREI6IGRhdGFiYXNlIGRhbm5lZ2dpYXRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA5Cittc2dpZCAiVERCOiBJTyBFcnJvciIKK21zZ3N0ciAiVERCOiBlcnJvcmUgSS9PIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEwCittc2dpZCAiVERCOiBMb2NraW5nIGVycm9yIgorbXNnc3RyICJUREI6IGVycm9yZSBuZWxsJ290dGVuZXJlIGlsIGJsb2NjbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMQorbXNnaWQgIlREQjogT3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAiVERCOiBtZW1vcmlhIGVzYXVyaXRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEyCittc2dpZCAiVERCOiBSZWNvcmQgZXhpc3RzIgorbXNnc3RyICJUREI6IGlsIHJlY29yZCBlc2lzdGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTMKK21zZ2lkICJUREI6IExvY2sgZXhpc3RzIG9uIG90aGVyIGtleXMiCittc2dzdHIgIlREQjogYmxvY2NvIGVzaXN0ZW50ZSBzdSBhbHRyZSBjaGlhdmkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTQKK21zZ2lkICJUREI6IEludmFsaWQgcGFyYW1ldGVyIgorbXNnc3RyICJUREI6IHBhcmFtZXRybyBub24gdmFsaWRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE1Cittc2dpZCAiVERCOiBSZWNvcmQgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIlREQjogaWwgcmVjb3JkIG5vbiBlc2lzdGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTYKK21zZ2lkICJUREI6IFdyaXRlIG5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIlREQjogc2NyaXR0dXJhIG5vbiBjb25zZW50aXRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE3Cittc2dpZCAiRXh0MmZzIGRpcmVjdG9yeSBibG9jayBsaXN0IGlzIGVtcHR5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTgKK21zZ2lkICJBdHRlbXB0IHRvIG1vZGlmeSBhIGJsb2NrIG1hcHBpbmcgdmlhIGEgcmVhZC1vbmx5IGJsb2NrIGl0ZXJhdG9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IHNhdmVkIHBhdGgiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGdlbmVyaWMgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xMyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMwCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaGVhZGVyIgorbXNnc3RyICJFeHRlbnQgaW50ZXN0YXppb25lIGRhbm5lZ2dpYXRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMxCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaW5kZXgiCittc2dzdHIgIkV4dGVudCBpbmRpY2UgZGFubmVnZ2lhdG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzIKK21zZ2lkICJDb3JydXB0IGV4dGVudCIKK21zZ3N0ciAiRXh0ZW50IGRhbm5lZ2dpYXRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMzCittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiBleHRlbnQgbWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzQKK21zZ2lkICJJbm9kZSBkb2VzIG5vdCB1c2UgZXh0ZW50cyIKK21zZ3N0ciAiTCdpbm9kZSBub24gdXNhIGdsaSBleHRlbnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzUKK21zZ2lkICJObyAnbmV4dCcgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzYKK21zZ2lkICJObyAncHJldmlvdXMnIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM3Cittc2dpZCAiTm8gJ3VwJyBleHRlbnQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOAorbXNnaWQgIk5vICdkb3duJyBleHRlbnQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOQorbXNnaWQgIk5vIGN1cnJlbnQgbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQwCittc2dpZCAiRXh0MmZzIG9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDEKK21zZ2lkICJObyByb29tIHRvIGluc2VydCBleHRlbnQgaW4gbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQyCittc2dpZCAiU3BsaXR0aW5nIHdvdWxkIHJlc3VsdCBpbiBlbXB0eSBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDMKK21zZ2lkICJFeHRlbnQgbm90IGZvdW5kIgorbXNnc3RyICJFeHRlbnQgbm9uIHRyb3ZhdG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDQKK21zZ2lkICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgaW5vZGVzIGNvbnRhaW5pbmcgZXh0ZW50cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ1Cittc2dpZCAiRXh0ZW50IGxlbmd0aCBpcyBpbnZhbGlkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDYKK21zZ2lkICJJL08gQ2hhbm5lbCBkb2VzIG5vdCBzdXBwb3J0IDY0LWJpdCBibG9jayBudW1iZXJzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDcKK21zZ2lkICJDYW4ndCBjaGVjayBpZiBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgZHVlIHRvIG1pc3NpbmcgbXRhYiBmaWxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDgKK21zZ2lkICJGaWxlc3lzdGVtIHRvbyBsYXJnZSB0byB1c2UgbGVnYWN5IGJpdG1hcHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OQorbXNnaWQgIk1NUDogaW52YWxpZCBtYWdpYyBudW1iZXIiCittc2dzdHIgIk1NUDogbnVtZXJvIG1hZ2ljIG5vbiB2YWxpZG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTAKK21zZ2lkICJNTVA6IGRldmljZSBjdXJyZW50bHkgYWN0aXZlIgorbXNnc3RyICJNTVA6IGRldmljZSBhdHRpdm8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICJNTVA6IGZzY2sgaW4gZXNlY3V6aW9uZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MgorbXNnaWQgIk1NUDogYmxvY2sgbnVtYmVyIGJleW9uZCBmaWxlc3lzdGVtIHJhbmdlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTMKK21zZ2lkICJNTVA6IHVuZGVyZ29pbmcgYW4gdW5rbm93biBvcGVyYXRpb24iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NAorIywgZnV6enkKK21zZ2lkICJNTVA6IGZpbGVzeXN0ZW0gc3RpbGwgaW4gdXNlIgorbXNnc3RyICJkaW1lbnNpb25lIGZpbGVzeXN0ZW0gbm9uIHZhbGlkYSAtICVzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU1Cittc2dpZCAiTU1QOiBvcGVuIHdpdGggT19ESVJFQ1QgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTYKKyMsIGZ1enp5Cittc2dpZCAiQmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBzaXplIGluY29ycmVjdCIKK21zZ3N0ciAiPElub2RlIGRlbCBkZXNjcml0dG9yZSBkaSBncnVwcG8+IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU3Cittc2dpZCAiSW5vZGUgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggaW5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OAorbXNnaWQgIklub2RlIGJpdG1hcCBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OQorbXNnaWQgIkV4dGVudCBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBleHRlbnQgYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MAorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBkb2VzIG5vdCBoYXZlIHNwYWNlIGZvciBjaGVja3N1bSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYxCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYyCittc2dpZCAiRXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjMKK21zZ2lkICJTdXBlcmJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIHN1cGVyYmxvY2siCittc2dzdHIgIklsIGNoZWNrc3VtIGRlbCBzdXBlci1ibG9jY28gbm9uIGNvcnJpc3BvbmRlIGFsIHN1cGVyLWJsb2NjbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NAorbXNnaWQgIlVua25vd24gY2hlY2tzdW0gYWxnb3JpdGhtIgorbXNnc3RyICJBbGdvcml0bW8gZGkgY2hlY2tzdW0gc2Nvbm9zY2l1dG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjUKK21zZ2lkICJNTVAgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggTU1QIGJsb2NrIgorbXNnc3RyICJJbCBjaGVja3N1bSBkZWwgYmxvY2NvIE1NUCBub24gY29ycmlzcG9uZGUgYWwgYmxvY2NvIE1NUCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NgorbXNnaWQgIkV4dDIgZmlsZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiSWwgZmlsZSBFeHQyIGVzaXN0ZSBnacOgIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMQorbXNnaWQgIlByb2ZpbGUgdmVyc2lvbiAwLjAiCittc2dzdHIgIlByb2ZpbG8gdmVyc2lvbmUgMC4wIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX25vZGUiCittc2dzdHIgIlZhbG9yZSBtYWdpYyBub24gY29ycmV0dG8gaW4gcHJvZmlsZV9ub2RlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMworbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBub3QgZm91bmQiCittc2dzdHIgIlNlemlvbmUgZGVsIHByb2ZpbG8gbm9uIHRyb3ZhdGEiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE0Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgIlJlbGF6aW9uZSBkZWwgcHJvZmlsZSBub24gdHJvdmF0YSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTUKK21zZ2lkICJBdHRlbXB0IHRvIGFkZCBhIHJlbGF0aW9uIHRvIG5vZGUgd2hpY2ggaXMgbm90IGEgc2VjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNgorbXNnaWQgIkEgcHJvZmlsZSBzZWN0aW9uIGhlYWRlciBoYXMgYSBub24temVybyB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNworbXNnaWQgIkJhZCBsaW5rZWQgbGlzdCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTgKK21zZ2lkICJCYWQgZ3JvdXAgbGV2ZWwgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE5Cittc2dpZCAiQmFkIHBhcmVudCBwb2ludGVyIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlIGl0ZXJhdG9yIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIxCittc2dpZCAiQ2FuJ3Qgc2V0IHZhbHVlIG9uIHNlY3Rpb24gbm9kZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIHByb2ZpbGUgbGlicmFyeSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMworbXNnaWQgIkF0dGVtcHQgdG8gbW9kaWZ5IHJlYWQtb25seSBwcm9maWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI0Cittc2dpZCAiUHJvZmlsZSBzZWN0aW9uIGhlYWRlciBub3QgYXQgdG9wIGxldmVsIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI1Cittc2dpZCAiU3ludGF4IGVycm9yIGluIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjYKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSByZWxhdGlvbiIKK21zZ3N0ciAiRXJyb3JlIGRpIHNpbnRhc3NpIG5lbGxhIHJlbGF6aW9uZSBkZWwgcHJvZmlsbyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjcKK21zZ2lkICJFeHRyYSBjbG9zaW5nIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjgKK21zZ2lkICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiUGFyZW50ZXNpIGRpIGFwZXJ0dXJhIG1hbmNhbnRlIG5lbCBwcm9maWxvIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyOQorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3QiCittc2dzdHIgIlZhbG9yZSBtYWdpYyBub24gY29ycmV0dG8gaW4gcHJvZmlsZV90IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3NlY3Rpb25fdCIKK21zZ3N0ciAiVmFsb3JlIG1hZ2ljIG5vbiBjb3JyZXR0byBpbiBwcm9maWxlX3NlY3Rpb25fdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzEKK21zZ2lkICJJdGVyYXRpb24gdGhyb3VnaCBhbGwgdG9wIGxldmVsIHNlY3Rpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMgorbXNnaWQgIkludmFsaWQgcHJvZmlsZV9zZWN0aW9uIG9iamVjdCIKK21zZ3N0ciAiT2dnZXR0byBwcm9maWxlX3NlY3Rpb24gbm9uIHZhbGlkbyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzMKK21zZ2lkICJObyBtb3JlIHNlY3Rpb25zIgorbXNnc3RyICJTZXppb25pIGVzYXVyaXRlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNAorbXNnaWQgIkJhZCBuYW1lc2V0IHBhc3NlZCB0byBxdWVyeSByb3V0aW5lIgorbXNnc3RyICJOYW1lc2V0IGVycmF0byBwYXNzYXRvIGFsbGEgcm91dGluZSBkaSBpbnRlcnJvZ2F6aW9uZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzUKK21zZ2lkICJObyBwcm9maWxlIGZpbGUgb3BlbiIKK21zZ3N0ciAiTmVzc3VuIGZpbGUgZGkgcHJvZmlsbyBkYSBhcHJpcmUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM2Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV90IgorbXNnc3RyICJWYWxvcmUgbWFnaWMgbm9uIGNvcnJldHRvIGluIHByb2ZpbGVfZmlsZV90IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNworbXNnaWQgIkNvdWxkbid0IG9wZW4gcHJvZmlsZSBmaWxlIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhcHJpcmUgaWwgZmlsZSBkZWwgcHJvZmlsbyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzgKK21zZ2lkICJTZWN0aW9uIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJMYSBzZXppb25lIGVzaXN0ZSBnacOgIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOQorbXNnaWQgIkludmFsaWQgYm9vbGVhbiB2YWx1ZSIKK21zZ3N0ciAiVmFsb3JlIGJvb2xlYW5vIG5vbiB2YWxpZG8iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQwCittc2dpZCAiSW52YWxpZCBpbnRlZ2VyIHZhbHVlIgorbXNnc3RyICJWYWxvcmUgaW50ZXJvIG5vbiB2YWxpZG8iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQxCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCittc2dzdHIgIlZhbG9yZSBtYWdpYyBub24gY29ycmV0dG8gaW4gcHJvZmlsZV9maWxlX2RhdGFfdCIKZGlmZiAtLWdpdCBhL3BvL25sLmdtbyBiL3BvL25sLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTgzNDI1Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vbmwuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL25sLnBvIGIvcG8vbmwucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJkNGU2MgotLS0gL2Rldi9udWxsCisrKyBiL3BvL25sLnBvCkBAIC0wLDAgKzEsNzQ2NyBAQAorIyBEdXRjaCB0cmFuc2xhdGlvbnMgZm9yIGUyZnNwcm9ncy4KKyMgQ29weXJpZ2h0IChDKSAyMDE0IFRoZW9kb3JlIFRzbyAobXNnaWRzKQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZTJmc3Byb2dzIHBhY2thZ2UuCisjCisjIMKrIE9uIG5lIHNvdWZmcmUgamFtYWlzIHF1ZSBkdSBtYWwgcXVlIG5vdXMgZm9udCBjZXV4IHF1J29uIGFpbWUuCisjIExlIG1hbCBxdWkgdmllbnQgZCd1biBlbm5lbWkgbmUgY29tcHRlIHBhcy4gwrsKKyMKKyMgQmVubm8gU2NodWxlbmJlcmcgPGJlbm5vQHZlcnRhYWx0Lm5sPiwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNC4KKyMKKyMgV29vcmRnZWJydWlrOgorIyBibG9jayAgIC0+IGJsb2sKKyMgc2VjdG9yICAtPiBzZWN0b3IKKyMgKGlub2RlIGJsaWpmdCBvbnZlcnRhYWxkKQorIyAoZXh0ZW50IGJsaWpmdCBvbnZlcnRhYWxkKQorIyAoam91cm5hbCBibGlqZnQgb252ZXJ0YWFsZCkKKyMKKyMuIFRoZSBzdHJpbmdzIGluIGUyZnNjaydzIHByb2JsZW0uYyBjYW4gYmUgdmVyeSBoYXJkIHRvIHRyYW5zbGF0ZSwKKyMuIHNpbmNlIHRoZSBzdHJpbmdzIGFyZSBleHBhbmRlZCBpbiB0d28gZGlmZmVyZW50IHdheXMuICBGaXJzdCBvZiBhbGwsCisjLiB0aGVyZSBpcyBhbiBALWV4cGFuc2lvbiwgd2hlcmUgc3RyaW5ncyBsaWtlICJAaSIgYXJlIGV4cGFuZGVkIHRvCisjLiAiaW5vZGUiLCBhbmQgc28gb24uICBJbiBvcmRlciB0byBtYWtlIGl0IGVhc2llciBmb3IgdHJhbnNsYXRvcnMsIHRoZQorIy4gZTJmc3Byb2dzIHBvIHRlbXBsYXRlIGZpbGUgaGFzIGJlZW4gZW5oYW5jZWQgd2l0aCBjb21tZW50cyB0aGF0IHNob3cKKyMuIHRoZSBALWV4cGFuc2lvbiwgZm9yIHRoZSBzdHJpbmdzIGluIHRoZSBwcm9ibGVtLmMgZmlsZS4KKyMuCisjLiBUcmFuc2xhdG9ycyBhcmUgZnJlZSB0byB1c2UgdGhlIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGlmIHRoZXkgc28KKyMuIGNob29zZSwgYnkgcHJvdmlkaW5nIHRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBpbiBlMmZzY2svbWVzc2FnZS5jLgorIy4gVGhlc2UgdHJhbnNsYXRpb24gY2FuIGNvbXBsZXRlbHkgcmVwbGFjZSBhbiBleHBhbnNpb247IGZvciBleGFtcGxlLAorIy4gaWYgImJibG9jayIgKHdoaWNoIGluZGljYXRlZCB0aGF0ICJAYiIgd291bGQgYmUgZXhwYW5kZWQgdG8gImJsb2NrIikKKyMuIGlzIHRyYW5zbGF0ZWQgYXMgImRkYXRlbnZlcmx1c3QiLCB0aGVuICJAZCIgd2lsbCBiZSBleHBhbmRlZCB0bworIy4gImRhdGVudmVybHVzdCIuICBBbHRlcm5hdGl2ZWx5LCB0cmFuc2xhdG9ycyBjYW4gc2ltcGx5IG5vdCB1c2UgdGhlCisjLiBALWV4cGFuc2lvbiBmYWNpbGl0eSBhdCBhbGwuCisjLgorIy4gVGhlIHNlY29uZCBleHBhbnNpb24gd2hpY2ggaXMgZG9uZSBmb3IgZTJmc2NrJ3MgcHJvYmxlbS5jIG1lc3NhZ2VzIGlzCisjLiBhIGR5bmFtaWMgJS1leHBhbnNpb24sIHdoaWNoIGV4cGFuZHMgJWkgYXMgYW4gaW5vZGUgbnVtYmVyLCBhbmQgc28KKyMuIG9uLiAgQSB0YWJsZSBvZiB0aGVzZSBleHBhbnNpb25zIGNhbiBiZSBmb3VuZCBiZWxvdy4gIE5vdGUgdGhhdAorIy4gJS1leHByZXNzaW9ucyB0aGF0IGJlZ2luIHdpdGggIiVEIiBhbmQgIiVJIiBhcmUgdHdvLWNoYXJhY3RlcgorIy4gZXhwYW5zaW9uczsgc28gZm9yIGV4YW1wbGUsICIlSXUiIGV4cGFuZHMgdG8gdGhlIGlub2RlJ3MgdXNlciBpZAorIy4gb3duZXJzaGlwIGZpZWxkIChpbm9kZS0+aV91aWQpLiAgQWxzbyB0aGUgIiVCIiBleHBhbnNpb24gaXMgc3BlY2lhbDoKKyMuIGl0IGNhbiBleHBhbmQgdG8gZWl0aGVyIHRoZSBzdHJpbmcgImluZGlyZWN0IGJsb2NrIiAocG9zc2libHkgcHJlY2VkZWQKKyMuIGJ5IHRoZSB3b3JkICJkb3VibGUiIG9yICJ0cmlwbGUiKSwgb3IgdGhlIHN0cmluZyAiYmxvY2sgIyIgaW1tZWRpYXRlbHkKKyMuIGZvbGxvd2VkIGJ5IGFuIGludGVnZXIgaW5kaWNhdGluZyBhIGJsb2NrIHNlcXVlbmNlIG51bWJlci4KKyMuICAKKyMuIAklYgk8YmxrPgkJCWJsb2NrIG51bWJlcgorIy4gCSVCCSJpbmRpcmVjdCBibG9jayIgfCAiYmxvY2sgIyI8YmxrY291bnQ+CXN0cmluZyB8IHN0cmluZytpbnRlZ2VyCisjLiAJJWMJPGJsazI+CQkJYmxvY2sgbnVtYmVyCisjLiAJJURpCTxkaXJlbnQ+IC0+IGlubwkJaW5vZGUgbnVtYmVyCisjLiAJJURuCTxkaXJlbnQ+IC0+IG5hbWUJc3RyaW5nCisjLiAJJURyCTxkaXJlbnQ+IC0+IHJlY19sZW4KKyMuIAklRGwJPGRpcmVudD4gLT4gbmFtZV9sZW4KKyMuIAklRHQJPGRpcmVudD4gLT4gZmlsZXR5cGUKKyMuIAklZAk8ZGlyPiAJCQlpbm9kZSBudW1iZXIKKyMuIAklZwk8Z3JvdXA+CQkJaW50ZWdlcgorIy4gCSVpCTxpbm8+CQkJaW5vZGUgbnVtYmVyCisjLiAJJUlzCTxpbm9kZT4gLT4gaV9zaXplCisjLiAJJUlTCTxpbm9kZT4gLT4gaV9leHRyYV9pc2l6ZQorIy4gCSVJYgk8aW5vZGU+IC0+IGlfYmxvY2tzCisjLiAJJUlsCTxpbm9kZT4gLT4gaV9saW5rc19jb3VudAorIy4gCSVJbQk8aW5vZGU+IC0+IGlfbW9kZQorIy4gCSVJTQk8aW5vZGU+IC0+IGlfbXRpbWUKKyMuIAklSUYJPGlub2RlPiAtPiBpX2ZhZGRyCisjLiAJJUlmCTxpbm9kZT4gLT4gaV9maWxlX2FjbAorIy4gCSVJZAk8aW5vZGU+IC0+IGlfZGlyX2FjbAorIy4gCSVJdQk8aW5vZGU+IC0+IGlfdWlkCisjLiAJJUlnCTxpbm9kZT4gLT4gaV9naWQKKyMuIAklSXQJPHN0cj4JCQlmaWxlIHR5cGUKKyMuIAklagk8aW5vMj4JCQlpbm9kZSBudW1iZXIKKyMuIAklbQk8Y29tX2VyciBlcnJvciBtZXNzYWdlPgorIy4gCSVOCTxudW0+CisjLiAJJXAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+CisjLiAJJVAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgPGRpcmVudD4tPmlubyB3aXRoIDxpbm8yPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4gIChJZiBkaXJlbnQgaXMgTlVMTAorIy4gCQkJCXRoZW4gcmV0dXJuIHRoZSBwYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubzI+KQorIy4gCSVxCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8ZGlyPgorIy4gCSVRCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPiB3aXRoIDxkaXI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LgorIy4gCSVzCTxzdHI+CQkJbWlzY2VsbGFuZW91cyBzdHJpbmcKKyMuIAklUwkJYmFja3VwIHN1cGVyYmxvY2sKKyMuIAklWAk8bnVtPgloZXhhZGVjaW1hbCBmb3JtYXQKKyMuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBlMmZzcHJvZ3MtMS40Mi4xMi1wcmUyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IHR5dHNvQGFsdW0ubWl0LmVkdVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDIxOjI2LTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE0LTA4LTI3IDEwOjA2KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEJlbm5vIFNjaHVsZW5iZXJnIDxiZW5ub0B2ZXJ0YWFsdC5ubD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBEdXRjaCA8dmVydGFsaW5nQHZyaWpzY2hyaWZ0Lm9yZz5cbiIKKyJMYW5ndWFnZTogbmxcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLUdlbmVyYXRvcjogTG9rYWxpemUgMS4wXG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoyMyBtaXNjL21rZTJmcy5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2sgJXUgb3V0IG9mIHJhbmdlOyBpZ25vcmVkLlxuIgorbXNnc3RyICJTbGVjaHQgYmxvayAldSBsaWd0IGJ1aXRlbiBiZXJlaWs7IGdlbmVnZWVyZC5cbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjQ2Cittc2dpZCAid2hpbGUgc2FuaXR5IGNoZWNraW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICJ0aWpkZW5zIGNvbnRyb2xlIHZhbiBkZSBzbGVjaHRlYmxva2tlbi1pbm9kZSIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjU4Cittc2dpZCAid2hpbGUgcmVhZGluZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAidGlqZGVucyBsZXplbiB2YW4gZGUgc2xlY2h0ZWJsb2trZW4taW5vZGUiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo3MiBlMmZzY2svc2NhbnRlc3QuYzoxMDcgZTJmc2NrL3VuaXguYzoxMzQ1CisjOiBlMmZzY2svdW5peC5jOjE0MzQgbWlzYy9iYWRibG9ja3MuYzoxMjQyIG1pc2MvYmFkYmxvY2tzLmM6MTI1MAorIzogbWlzYy9iYWRibG9ja3MuYzoxMjY0IG1pc2MvYmFkYmxvY2tzLmM6MTI3NiBtaXNjL2R1bXBlMmZzLmM6NjA0CisjOiBtaXNjL2UyaW1hZ2UuYzoxMzk2IG1pc2MvZTJpbWFnZS5jOjE1ODAgbWlzYy9lMmltYWdlLmM6MTU5OQorIzogbWlzYy9ta2UyZnMuYzoyMjcgbWlzYy90dW5lMmZzLmM6MTk1NSBtaXNjL3R1bmUyZnMuYzoyMDQ0IHJlc2l6ZS9tYWluLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICVzIgorbXNnc3RyICJ0aWpkZW5zIG9wZW5lbiB2YW4gJXMiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgcG9wZW4gJyVzJyIKK21zZ3N0ciAidGlqZGVucyBlZW4gcG9wZW4oKSB2YW4gJXMiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo5NCBtaXNjL21rZTJmcy5jOjIzNAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW4gbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gZmlsZSIKK21zZ3N0ciAidGlqZGVucyBsZXplbiB2YW4gbGlqc3QgdmFuIHNsZWNodGUgYmxva2tlbiB1aXQgYmVzdGFuZCIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEwNQorbXNnaWQgIndoaWxlIHVwZGF0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAidGlqZGVucyBiaWp3ZXJrZW4gdmFuIGRlIGlub2RlIHZhbiBlZW4gc2xlY2h0IGJsb2siCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogaWxsZWdhbCBibG9jayAldSBmb3VuZCBpbiBiYWQgYmxvY2sgaW5vZGUuICBDbGVhcmVkLlxuIgorbXNnc3RyICIiCisiV2FhcnNjaHV3aW5nOiBvbmdlbGRpZyBibG9rICV1IGdldm9uZGVuIGluIGlub2RlIHZhbiBzbGVjaHQgYmxvay4gIEdld2lzdC5cbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIGxlemVuIHZhbiBibG9rICVsdSAoJXMpIHRpamRlbnMgJXMuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkZvdXQgdGlqZGVucyBsZXplbiB2YW4gYmxvayAlbHUgKCVzKS4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjEgZTJmc2NrL2VoYW5kbGVyLmM6MTEwCittc2dpZCAiSWdub3JlIGVycm9yIgorbXNnc3RyICJGb3V0IG5lZ2VyZW4iCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYyCittc2dpZCAiRm9yY2UgcmV3cml0ZSIKK21zZ3N0ciAiSGVyc2NocmlqdmVuIGFmZHdpbmdlbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIkZvdXQgdGlqZGVucyBzY2hyaWp2ZW4gdmFuIGJsb2sgJWx1ICglcykgdGlqZGVucyAlcy4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkZvdXQgdGlqZGVucyBzY2hyaWp2ZW4gdmFuIGJsb2sgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJsZWdlIG1hcGJsb2trZW4iCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjYyCittc2dpZCAiZW1wdHkgZGlyIG1hcCIKK21zZ3N0ciAibGVnZSBtYXB0YWJlbCIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZGlyZWN0b3J5IGJsb2NrICV1ICgjJWQpIGluIGlub2RlICV1XG4iCittc2dzdHIgIkxlZWcgbWFwYmxvayAldSAoIyVkKSBpbiBpbm9kZSAldS5cbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBmaWxlbmFtZSBuYmxvY2tzIGJsb2Nrc2l6ZVxuIgorbXNnc3RyICJHZWJydWlrIHZhbiAlczogICVzIGJlc3RhbmRzbmFhbSBibG9ra2VuYWFudGFsIGJsb2tncm9vdHRlXG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBvZiBibG9ja3MhXG4iCittc2dzdHIgIk9uZ2VsZGlnIGFhbnRhbCBibG9ra2VuIVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIChzaXplPSVkKVxuIgorbXNnc3RyICJLYW4gZ2VlbiBibG9rYnVmZmVyIHJlc2VydmVyZW4gKGdyb290dGU9JWQpLlxuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIGRpc2tcbiIKK21zZ3N0ciAiR2VicnVpazogICVzIHNjaGlqZm5hYW1cbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJMS0ZMU0JVRiBpb2N0bCBub3Qgc3VwcG9ydGVkISAgQ2FuJ3QgZmx1c2ggYnVmZmVycy5cbiIKK21zZ3N0ciAiIgorImlvY3RsKEJMS0ZMU0JVRikgd29yZHQgbmlldCBvbmRlcnN0ZXVuZCEgIEthbiBidWZmZXJzIG5pZXQgbGVlZ21ha2VuLlxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1GXSBbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gZGV2aWNlXG4iCittc2dzdHIgIkdlYnJ1aWs6ICAlcyBbLUZdIFstSSBpbm9kZWJ1ZmZlcmJsb2trZW5dIGFwcGFyYWF0XG4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjgxIGUyZnNjay91bml4LmM6OTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIG9wZW5pbmcgJXMgZm9yIGZsdXNoaW5nIgorbXNnc3RyICJ0aWpkZW5zIG9wZW5lbiB2YW4gJXMgb20gZGV6ZSBsZWVnIHRlIG1ha2VuIgorCisjOiBlMmZzY2svaXNjYW4uYzo4NiBlMmZzY2svdW5peC5jOjk3OCByZXNpemUvbWFpbi5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiCittc2dzdHIgInRpamRlbnMgbGVlZ21ha2VuIHZhbiAlcyIKKworIzogZTJmc2NrL2lzY2FuLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICclcyciCittc2dzdHIgInRpamRlbnMgb3BlbmVuIHZhbiAnJXMnIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTkgZTJmc2NrL3NjYW50ZXN0LmM6MTE0IG1pc2MvZTJpbWFnZS5jOjEyOTAKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgInRpamRlbnMgb3BlbmVuIHZvb3IgaW5vZGUtc2NhbiIKKworIzogZTJmc2NrL2lzY2FuLmM6MTI3IG1pc2MvZTJpbWFnZS5jOjEzMDkKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUiCittc2dzdHIgInRpamRlbnMgaGFsZW4gdmFuIHZvbGdlbmRlIGlub2RlIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHNjYW5uZWQuXG4iCittc2dzdHIgIiV1IGlub2RlcyBnZXNjYW5kLlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjUyNAorbXNnaWQgInJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgImxlemVuIHZhbiBqb3VybmFsLXN1cGVyYmxvay4uLlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiVzOiBnZWVuIGdlbGRpZyBqb3VybmFsLXN1cGVyYmxvayBnZXZvbmRlblxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogam91cm5hbCB0b28gc2hvcnRcbiIKK21zZ3N0ciAiJXM6IGpvdXJuYWwgaXMgdGUga29ydFxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcmVjb3ZlcmluZyBqb3VybmFsXG4iCittc2dzdHIgIiVzOiBoZXJzdGVsbGVuIHZhbiBqb3VybmFsLi4uXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3b24ndCBkbyBqb3VybmFsIHJlY292ZXJ5IHdoaWxlIHJlYWQtb25seVxuIgorbXNnc3RyICIlczogZ2VlbiBoZXJzdGVsbGluZyB2YW4gam91cm5hbCBiaWogYWxsZWVuLWxlemVuXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICJ0aWpkZW5zIGhlcm9wZW5lbiB2YW4gJXMiCisKKyMgQmVoYWx2ZSBFIGVuIEYgd29yZGVuIGRlIHZvbGdlbmRlIDMwIGxldHRlcmFma29ydGluZ2VuIG5pZXQgZ2VicnVpa3QuCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImE8Zm91dD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE0Cittc2dpZCAiQWVycm9yIGFsbG9jYXRpbmciCittc2dzdHIgIkE8Zm91dD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJiPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNgorbXNnaWQgIkJiaXRtYXAiCittc2dzdHIgIkI8Zm91dD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE3Cittc2dpZCAiY2NvbXByZXNzIgorbXNnc3RyICJjPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICJDPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOQorbXNnaWQgImRkaXJlY3RvcnkiCittc2dzdHIgImQ8Zm91dD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIwCittc2dpZCAiRGRlbGV0ZWQiCittc2dzdHIgIkQ8Zm91dD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIxCittc2dpZCAiZWVudHJ5IgorbXNnc3RyICJlPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMgorbXNnaWQgIkVAZSAnJURuJyBpbiAlcCAoJWkpIgorbXNnc3RyICJFSXRlbSAnJURuJyBpbiAlcCAoJWkpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMworbXNnaWQgImZmaWxlc3lzdGVtIgorbXNnc3RyICJmPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNAorbXNnaWQgIkZmb3IgQGkgJWkgKCVRKSBpcyIKK21zZ3N0ciAiRnZvb3IgaW5vZGUgJWkgKCVRKSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjUKK21zZ2lkICJnZ3JvdXAiCittc2dzdHIgImc8Zm91dD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI2Cittc2dpZCAiaEhUUkVFIEBkIEBpIgorbXNnc3RyICJoPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNworbXNnaWQgImlpbm9kZSIKK21zZ3N0ciAiaTxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjgKK21zZ2lkICJJaWxsZWdhbCIKK21zZ3N0ciAiSTxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjkKK21zZ2lkICJqam91cm5hbCIKK21zZ3N0ciAiajxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAibDxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzEKK21zZ2lkICJMaXMgYSBsaW5rIgorbXNnc3RyICJMPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMgorbXNnaWQgIm1tdWx0aXBseS1jbGFpbWVkIgorbXNnc3RyICJtPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMworbXNnaWQgIm5pbnZhbGlkIgorbXNnc3RyICJuPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNAorbXNnaWQgIm9vcnBoYW5lZCIKK21zZ3N0ciAibzxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzUKK21zZ2lkICJwcHJvYmxlbSBpbiIKK21zZ3N0ciAicDxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgInE8Zm91dD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM3Cittc2dpZCAicnJvb3QgQGkiCittc2dzdHIgInI8Zm91dD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM4Cittc2dpZCAic3Nob3VsZCBiZSIKK21zZ3N0ciAiczxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzkKK21zZ2lkICJTc3VwZXJAYiIKK21zZ3N0ciAiUzxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDAKK21zZ2lkICJ1dW5hdHRhY2hlZCIKK21zZ3N0ciAidTxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDEKK21zZ2lkICJ2ZGV2aWNlIgorbXNnc3RyICJ2PGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MgorbXNnaWQgInhleHRlbnQiCittc2dzdHIgIng8Zm91dD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQzCittc2dpZCAienplcm8tbGVuZ3RoIgorbXNnc3RyICJ6PGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NAorbXNnaWQgIjxUaGUgTlVMTCBpbm9kZT4iCittc2dzdHIgIjxkZSBOVUxMLWlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTUKK21zZ2lkICI8VGhlIGJhZCBibG9ja3MgaW5vZGU+IgorbXNnc3RyICI8ZGUgc2xlY2h0ZWJsb2trZW4taW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NworbXNnaWQgIjxUaGUgdXNlciBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxkZSBnZWJydWlrZXJzcXVvdGEtaW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OAorbXNnaWQgIjxUaGUgZ3JvdXAgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8ZGUgZ3JvZXBzcXVvdGEtaW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OQorbXNnaWQgIjxUaGUgYm9vdCBsb2FkZXIgaW5vZGU+IgorbXNnc3RyICI8ZGUgb3BzdGFydC1pbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICI8ZGUgd2lzLW9uZ2VkYWFubWFraW5nc21hcC1pbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYxCittc2dpZCAiPFRoZSBncm91cCBkZXNjcmlwdG9yIGlub2RlPiIKK21zZ3N0ciAiPGRlIGdyb2Vwc2Jlc2NocmlqdmVyLWlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjIKK21zZ2lkICI8VGhlIGpvdXJuYWwgaW5vZGU+IgorbXNnc3RyICI8ZGUgam91cm5hbC1pbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYzCittc2dpZCAiPFJlc2VydmVkIGlub2RlIDk+IgorbXNnc3RyICI8Z2VyZXNlcnZlZXJkZSBpbm9kZSA5PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjQKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgMTA+IgorbXNnc3RyICI8Z2VyZXNlcnZlZXJkZSBpbm9kZSAxMD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM0Cittc2dpZCAicmVndWxhciBmaWxlIgorbXNnc3RyICJub3JtYWFsIGJlc3RhbmQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM2Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICJtYXAiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM4Cittc2dpZCAiY2hhcmFjdGVyIGRldmljZSIKK21zZ3N0ciAiYnl0ZS1hcHBhcmFhdCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDAKK21zZ2lkICJibG9jayBkZXZpY2UiCittc2dzdHIgImJsb2stYXBwYXJhYXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQyCittc2dpZCAibmFtZWQgcGlwZSIKK21zZ3N0ciAiYmVub2VtZGUgcGlqcCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDQKK21zZ2lkICJzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJzeW1ib2xpc2NoZSBrb3BwZWxpbmciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ2IG1pc2MvdXVpZGQuYzoxNjIKK21zZ2lkICJzb2NrZXQiCittc2dzdHIgInNvY2tldCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWxlIHR5cGUgd2l0aCBtb2RlIDAlbyIKK21zZ3N0ciAib25iZWtlbmQgYmVzdGFuZHN0eXBlIG1ldCBtb2R1cyAwJW8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDIzCittc2dpZCAiaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImluZGlyZWN0IGJsb2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI1Cittc2dpZCAiZG91YmxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJkdWJiZWwtaW5kaXJlY3QgYmxvayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjcKK21zZ2lkICJ0cmlwbGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImRyaWV2b3VkaWctaW5kaXJlY3QgYmxvayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjkKK21zZ2lkICJ0cmFuc2xhdG9yIGJsb2NrIgorbXNnc3RyICJ0cmFuc2xhdG9yLWJsb2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDMxCittc2dpZCAiYmxvY2sgIyIKK21zZ3N0ciAiYmxvayAjIgorCisjOiBlMmZzY2svcGFzczFiLmM6MjIyCittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBpbm9kZSBtYXAiCittc2dzdHIgImthYXJ0IHZhbiBtZWVydm91ZGlnLWdlY2xhaW1kZSBpbm9kZXMiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo2MjUgZTJmc2NrL3Bhc3MxYi5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBkdXBfYmxrIGZvciAlbGx1XG4iCittc2dzdHIgIioqaW50ZXJuZSBwcm9ncmFtbWFmb3V0Kio6IGthbiBnZWVuICdkdXBfYmxrJyB2b29yICVsbHUgdmluZGVuXG4iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NTIKK21zZ2lkICJyZXR1cm5lZCBmcm9tIGNsb25lX2ZpbGVfYmxvY2siCittc2dzdHIgIiMjIyB0ZXJ1Z2dla2VlcmQgdmFuIGNsb25lX2ZpbGVfYmxvY2soKSIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgbG9va3VwIEVBIGJsb2NrIHJlY29yZCBmb3IgJWxsdSIKK21zZ3N0ciAiIgorIioqaW50ZXJuZSBwcm9ncmFtbWFmb3V0Kio6IGthbiBkZSByZWNvcmQgdmFuIEVBLWJsb2trZW4gdm9vciAlbGx1IG5pZXQgIgorIm9wdnJhZ2VuIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAiIgorIioqaW50ZXJuZSBwcm9ncmFtbWFmb3V0Kio6IGthbiBkZSByZWNvcmQgdmFuIEVBLWlub2RlcyB2b29yICV1IG5pZXQgb3B2cmFnZW4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjQ3NSBlMmZzY2svcGFzczIuYzo3ODIKK21zZ2lkICJyZWFkaW5nIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAidGlqZGVucyBsZXplbiB2YW4gbWFwYmxvayIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjM0Cittc2dpZCAiaW4tdXNlIGlub2RlIG1hcCIKK21zZ3N0ciAiYml0a2FhcnQgdmFuIGdlYnJ1aWt0ZSBpbm9kZXMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY0NQorbXNnaWQgImRpcmVjdG9yeSBpbm9kZSBtYXAiCittc2dzdHIgImJpdGthYXJ0IHZhbiBtYXBwZW4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjY1NQorbXNnaWQgInJlZ3VsYXIgZmlsZSBpbm9kZSBtYXAiCittc2dzdHIgImJpdGthYXJ0IHZhbiBub3JtYWxlIGJlc3RhbmRlbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjY0IG1pc2MvZTJpbWFnZS5jOjEyNjUKK21zZ2lkICJpbi11c2UgYmxvY2sgbWFwIgorbXNnc3RyICJiaXRrYWFydCB2YW4gZ2VicnVpa3RlIGJsb2trZW4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjczMAorbXNnaWQgIm9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAidGlqZGVucyBzdGFydGVuIHZhbiBpbm9kZS1zY2FuIgorCisjOiBlMmZzY2svcGFzczEuYzo3NjQKK21zZ2lkICJnZXR0aW5nIG5leHQgaW5vZGUgZnJvbSBzY2FuIgorbXNnc3RyICJ0aWpkZW5zIGhhbGVuIHZhbiB2b2xnZW5kZSBpbm9kZSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI3OQorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAiU3RhcCAxIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzM2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgaW5kaXJlY3QgYmxvY2tzIG9mIGlub2RlICV1IgorbXNnc3RyICJsZXplbiB2YW4gaW5kaXJlY3RlIGJsb2trZW4gdmFuIGlub2RlICV1IgorCisjOiBlMmZzY2svcGFzczEuYzoxMzg2Cittc2dpZCAiYmFkIGlub2RlIG1hcCIKK21zZ3N0ciAiYml0a2FhcnQgdmFuIHNsZWNodGUgaW5vZGVzIgorCisjOiBlMmZzY2svcGFzczEuYzoxNDA5Cittc2dpZCAiaW5vZGUgaW4gYmFkIGJsb2NrIG1hcCIKK21zZ3N0ciAiaW5vZGUgc3RhYXQgaW4ga2FhcnQgdmFuIHNsZWNodGUgYmxva2tlbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQyOQorbXNnaWQgImltYWdpYyBpbm9kZSBtYXAiCittc2dzdHIgImltYWdpYy1pbm9kZWthYXJ0IgorCisjOiBlMmZzY2svcGFzczEuYzoxNDU2Cittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBibG9jayBtYXAiCittc2dzdHIgImthYXJ0IHZhbiBtZWVydm91ZGlnLWdlY2xhaW1kZSBibG9ra2VuIgorCisjOiBlMmZzY2svcGFzczEuYzoxNTY3Cittc2dpZCAiZXh0IGF0dHIgYmxvY2sgbWFwIgorbXNnc3RyICJrYWFydCB2YW4gYmxva2tlbiBtZXQgdWl0Z2VicmVpZGUga2VubWVya2VuIgorCisjOiBlMmZzY2svcGFzczEuYzoyNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiU2bHUoJWMpOiBleHBlY3RpbmcgJTZsdSBnb3QgcGh5cyAlNmx1IChibGtjbnQgJWxsZClcbiIKK21zZ3N0ciAiJTZsdSglYyk6IHZlcndhY2h0dGUgJTZsdSwga3JlZWcgZnlzaWVrICU2bHUgKGJsb2trZW5hYW50YWwgJWxsZClcbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6Mjg5OAorbXNnaWQgImJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiYmxvay1iaXRrYWFydCIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjkwNAorbXNnaWQgImlub2RlIGJpdG1hcCIKK21zZ3N0ciAiaW5vZGUtYml0a2FhcnQiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI5MTAKK21zZ2lkICJpbm9kZSB0YWJsZSIKK21zZ3N0ciAiaW5vZGV0YWJlbCIKKworIzogZTJmc2NrL3Bhc3MyLmM6MjgzCittc2dpZCAiUGFzcyAyIgorbXNnc3RyICJTdGFwIDIiCisKKyM6IGUyZnNjay9wYXNzMi5jOjgwNgorbXNnaWQgIkNhbiBub3QgY29udGludWUuIgorbXNnc3RyICJLYW4gbmlldCB2ZXJkZXJnYWFuLiIKKworIzogZTJmc2NrL3Bhc3MzLmM6NzcKK21zZ2lkICJpbm9kZSBkb25lIGJpdG1hcCIKK21zZ3N0ciAiYml0a2FhcnQgdmFuIGJlaGFuZGVsZGUgaW5vZGVzIgorCisjOiBlMmZzY2svcGFzczMuYzo4NgorbXNnaWQgIlBlYWsgbWVtb3J5IgorbXNnc3RyICJQaWVrZ2VoZXVnZW5nZWJydWlrIgorCisjOiBlMmZzY2svcGFzczMuYzoxNDgKK21zZ2lkICJQYXNzIDMiCittc2dzdHIgIlN0YXAgMyIKKworIzogZTJmc2NrL3Bhc3MzLmM6MzQwCittc2dpZCAiaW5vZGUgbG9vcCBkZXRlY3Rpb24gYml0bWFwIgorbXNnc3RyICJiaXRrYWFydCB2YW4gaW5vZGUtbHVzZGV0ZWN0aWUiCisKKyM6IGUyZnNjay9wYXNzNC5jOjE5NgorbXNnaWQgIlBhc3MgNCIKK21zZ3N0ciAiU3RhcCA0IgorCisjOiBlMmZzY2svcGFzczUuYzo3NAorbXNnaWQgIlBhc3MgNSIKK21zZ3N0ciAiU3RhcCA1IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxCittc2dpZCAiKG5vIHByb21wdCkiCittc2dzdHIgIihnZWVuIHByb21wdCkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIKK21zZ2lkICJGaXgiCittc2dzdHIgIlJlcGFyZXJlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MworbXNnaWQgIkNsZWFyIgorbXNnc3RyICJXaXNzZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQKK21zZ2lkICJSZWxvY2F0ZSIKK21zZ3N0ciAiSGVycGxhYXRzZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUKK21zZ2lkICJBbGxvY2F0ZSIKK21zZ3N0ciAiUGxhYXRzZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYKK21zZ2lkICJFeHBhbmQiCittc2dzdHIgIlVpdGJyZWlkZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTcKK21zZ2lkICJDb25uZWN0IHRvIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJWZXJiaW5kZW4gbWV0IC9sb3N0K2ZvdW5kIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJBYW5tYWtlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OQorbXNnaWQgIlNhbHZhZ2UiCittc2dzdHIgIkJlcmdlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MAorbXNnaWQgIlRydW5jYXRlIgorbXNnc3RyICJBZmthcHBlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MQorbXNnaWQgIkNsZWFyIGlub2RlIgorbXNnc3RyICJJbm9kZSB3aXNzZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIKK21zZ2lkICJBYm9ydCIKK21zZ3N0ciAiQWZicmVrZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMKK21zZ2lkICJTcGxpdCIKK21zZ3N0ciAiU3BsaXRzZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiRG9vcmdhYW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUKK21zZ2lkICJDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyIKK21zZ3N0ciAiTWVlcnZvdWRpZy1nZWNsYWltZGUgYmxva2tlbiBrbG9uZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYKK21zZ2lkICJEZWxldGUgZmlsZSIKK21zZ3N0ciAiQmVzdGFuZCB2ZXJ3aWpkZXJlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NworbXNnaWQgIlN1cHByZXNzIG1lc3NhZ2VzIgorbXNnc3RyICJCZXJpY2h0ZW4gb25kZXJkcnVra2VuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4Cittc2dpZCAiVW5saW5rIgorbXNnc3RyICJMb3NtYWtlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OQorbXNnaWQgIkNsZWFyIEhUcmVlIGluZGV4IgorbXNnc3RyICInaHRyZWUnLWluZGV4IHdpc3NlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MAorbXNnaWQgIlJlY3JlYXRlIgorbXNnc3RyICJIZXJhYW5tYWtlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OQorbXNnaWQgIihOT05FKSIKK21zZ3N0ciAiKEdFRU4pIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwCittc2dpZCAiRklYRUQiCittc2dzdHIgIkdFUkVQQVJFRVJEIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxCittc2dpZCAiQ0xFQVJFRCIKK21zZ3N0ciAiR0VXSVNUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyCittc2dpZCAiUkVMT0NBVEVEIgorbXNnc3RyICJIRVJQTEFBVFNUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzCittc2dpZCAiQUxMT0NBVEVEIgorbXNnc3RyICJHRVBMQUFUU1QiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQKK21zZ2lkICJFWFBBTkRFRCIKK21zZ3N0ciAiVUlUR0VCUkVJRCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NQorbXNnaWQgIlJFQ09OTkVDVEVEIgorbXNnc3RyICJIRVJWRVJCT05ERU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYKK21zZ2lkICJDUkVBVEVEIgorbXNnc3RyICJBQU5HRU1BQUtUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3Cittc2dpZCAiU0FMVkFHRUQiCittc2dzdHIgIkdFQk9SR0VOIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4Cittc2dpZCAiVFJVTkNBVEVEIgorbXNnc3RyICJBRkdFS0FQVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OQorbXNnaWQgIklOT0RFIENMRUFSRUQiCittc2dzdHIgIklOT0RFIEdFV0lTVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MAorbXNnaWQgIkFCT1JURUQiCittc2dzdHIgIkFGR0VCUk9LRU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEKK21zZ2lkICJTUExJVCIKK21zZ3N0ciAiR0VTUExJVFNUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyCittc2dpZCAiQ09OVElOVUlORyIKK21zZ3N0ciAiVkVSREVSR0FBTkQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMKK21zZ2lkICJNVUxUSVBMWS1DTEFJTUVEIEJMT0NLUyBDTE9ORUQiCittc2dzdHIgIk1FRVJWT1VESUctR0VDTEFJTURFIEJMT0tLRU4gR0VLTE9PTkQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQKK21zZ2lkICJGSUxFIERFTEVURUQiCittc2dzdHIgIkJFU1RBTkQgVkVSV0lKREVSRCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NQorbXNnaWQgIlNVUFBSRVNTRUQiCittc2dzdHIgIk9OREVSRFJVS1QiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTYKK21zZ2lkICJVTkxJTktFRCIKK21zZ3N0ciAiTE9TR0VNQUFLVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NworbXNnaWQgIkhUUkVFIElOREVYIENMRUFSRUQiCittc2dzdHIgIidIVFJFRSctSU5ERVggR0VXSVNUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4Cittc2dpZCAiV0lMTCBSRUNSRUFURSIKK21zZ3N0ciAiWkFMIEhFUkFBTk1BS0VOIgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDcKK21zZ2lkICJAYiBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJibG9rLWJpdGthYXJ0IHZvb3IgZ3JvZXAgJWcgeml0IG5pZXQgaW4gZ3JvZXAgIChibG9rICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTEKK21zZ2lkICJAaSBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJpbm9kZS1iaXRrYWFydCB2b29yIGdyb2VwICVnIHppdCBuaWV0IGluIGdyb2VwICAoYmxvayAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgdGFibGUgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIy4gQC1leHBhbmRlZDogV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYKK21zZ2lkICIiCisiQGkgdGFibGUgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKKyJXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuIgorbXNnc3RyICIiCisiaW5vZGV0YWJlbCB2b29yIGdyb2VwICVnIHppdCBuaWV0IGluIGdyb2VwICAoYmxvayAlYilcbiIKKyJXQUFSU0NIVVdJTkc6IEVSTlNUSUcgVkVSTElFUyBWQU4gR0VHRVZFTlMgSVMgTU9HRUxJSksuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgc3VwZXJibG9jayBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIHZhbGlkIGV4dDIvZXh0My9leHQ0XG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0uICBJZiB0aGUgZGV2aWNlIGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0Mi9leHQzL2V4dDRcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIHN1cGVyYmxvY2tcbgorIy4gQC1leHBhbmRlZDogaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgc3VwZXJibG9jazpcbgorIy4gQC1leHBhbmRlZDogICAgIGUyZnNjayAtYiA4MTkzIDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6ICBvclxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iIDMyNzY4IDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgQFMgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSB2YWxpZCBleHQyL2V4dDMvZXh0NFxuIgorIkBmLiAgSWYgdGhlIEB2IGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0Mi9leHQzL2V4dDRcbiIKKyJAZiAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIEBTXG4iCisiaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgQFM6XG4iCisiICAgIGUyZnNjayAtYiA4MTkzIDxAdj5cbiIKKyIgb3JcbiIKKyIgICAgZTJmc2NrIC1iIDMyNzY4IDxAdj5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkhldCBzdXBlcmJsb2sgaXMgb25sZWVzYmFhciBvZiBvbXNjaHJpamZ0IGdlZW4gZ2VsZGlnIGV4dDIvMy80LSIKKyJiZXN0YW5kc3N5c3RlZW0uXG4iCisiQWxzIGhldCBhcHBhcmFhdCBqdWlzdCBpcyBlbiB3ZXJrZWxpamsgZWVuIGV4dDItLCBleHQzLSBvZiBleHQ0LSIKKyJiZXN0YW5kc3N5c3RlZW1cbiIKKyJiZXZhdCAoZW4gbmlldCBzd2FwIG9mIFVGUyBvZiBpZXRzIGFuZGVycyksIGRhbiBpcyBoZXQgc3VwZXJibG9rICIKKyJiZXNjaGFkaWdkLlxuIgorIlUga3VudCBkYW4gcHJvYmVyZW4gZWVuIGFuZGVyIHN1cGVyYmxvayB0ZSBnZWJydWlrZW4sIGJpanZvb3JiZWVsZDpcbiIKKyIgICAgZTJmc2NrIC1iIDgxOTMgPGFwcGFyYWF0PlxuIgorIm9mOlxuIgorIiAgICBlMmZzY2sgLWIgMzI3NjggPGFwcGFyYWF0PlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgZmlsZXN5c3RlbSBzaXplIChhY2NvcmRpbmcgdG8gdGhlIHN1cGVyYmxvY2spIGlzICViIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgZGV2aWNlIGlzICVjIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBFaXRoZXIgdGhlIHN1cGVyYmxvY2sgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMKK21zZ2lkICIiCisiVGhlIEBmIHNpemUgKGFjY29yZGluZyB0byB0aGUgQFMpIGlzICViIEBic1xuIgorIlRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBAdiBpcyAlYyBAYnNcbiIKKyJFaXRoZXIgdGhlIEBTIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKyJWb2xnZW5zIGhldCBzdXBlcmJsb2sgaXMgZGUgZ3Jvb3R0ZSB2YW4gaGV0IGJlc3RhbmRzc3lzdGVlbSAlYiBibG9ra2VuLlxuIgorIk1hYXIgZGUgZnlzaWVrZSBncm9vdHRlIHZhbiBoZXQgYXBwYXJhYXQgaXMgJWMgYmxva2tlbi5cbiIKKyJXYWFyc2NoaWpubGlqayBpcyBvZndlbCBoZXQgc3VwZXJibG9rIG9md2VsIGRlIHBhcnRpdGlldGFiZWwgYmVzY2hhZGlnZCFcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja19zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4KKyMuIEAtZXhwYW5kZWQ6IFRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbgorIy4gQC1leHBhbmRlZDogZnJvbSB0aGUgYmxvY2sgc2l6ZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDAKK21zZ2lkICIiCisiQFMgQGJfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuIgorIlRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbiIKKyJmcm9tIHRoZSBAYiBzaXplLlxuIgorbXNnc3RyICIiCisiU3VwZXJibG9rOiBibG9rZ3Jvb3R0ZSA9ICViLCBmcmFnbWVudGdyb290dGUgPSAlYy5cbiIKKyJEZXplIHZlcnNpZSB2YW4gJ2UyZnNjaycgb25kZXJzdGV1bnQgZ2VlblxuIgorImZyYWdtZW50Z3Jvb3R0ZSBkaWUgdmVyc2NoaWx0IHZhbiBkZSBibG9rZ3Jvb3R0ZS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja3NfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDcKK21zZ2lkICJAUyBAYnNfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiU3VwZXJibG9rOiBibG9ra2VuX3Blcl9ncm9lcCA9ICViLCB6b3UgJWMgbW9ldGVuIHppam4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgZmlyc3RfZGF0YV9ibG9jayA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUyCittc2dpZCAiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIlN1cGVyYmxvazogZWVyc3RlX2dlZ2V2ZW5zX2Jsb2sgPSAlYiwgem91ICVjIG1vZXRlbiB6aWpuLlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcKK21zZ2lkICIiCisiQGYgZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJCZXN0YW5kc3N5c3RlZW0gaGVlZnQgZ2VlbiBVVUlEOyBlciB3b3JkdCBlZW50amUgYWFuZ2VtYWFrdC5cbiIKKyJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IGlmIHNldmVyYWwgaW5vZGUgb3IgYmxvY2sgYml0bWFwIGJsb2NrcyBvciBwYXJ0XG4iCisib2YgdGhlIGlub2RlIHRhYmxlIHJlcXVpcmUgcmVsb2NhdGlvbiwgeW91IG1heSB3aXNoIHRvIHRyeVxuIgorInJ1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiAlUycgb3B0aW9uIGZpcnN0LiAgVGhlIHByb2JsZW1cbiIKKyJtYXkgbGllIG9ubHkgd2l0aCB0aGUgcHJpbWFyeSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYW5kXG4iCisidGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suXG4iCisiXG4iCittc2dzdHIgIiIKKyJPcG1lcmtpbmc6IGFscyBtZWVyZGVyZSBibG9ra2VuIHZhbiBpbm9kZS1iaXRrYWFydGVuIG9mIGJsb2stYml0a2FhcnRlblxuIgorImhlcnBsYWF0c3QgbW9ldGVuIHdvcmRlbiwgb2YgZWVuIGRlZWwgdmFuIGRlIGlub2RldGFiZWwsIGt1bnQgdSBiZXRlclxuIgorImVlcnN0ICdlMmZzY2snIHVpdHZvZXJlbiBtZXQgZGUgb3B0aWUgJy1iICVTJy4gIE1pc3NjaGllbiBkb2V0IGhldFxuIgorInByb2JsZWVtIHppY2ggYWxsZWVuIHZvb3IgaW4gaGV0IGVlcnN0ZSBzdXBlcmJsb2s7IG1vZ2VsaWprIGlzIGVlblxuIgorInJlc2VydmVrb3BpZSBub2cgaW4gb3JkZS5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ29ycnVwdGlvbiBmb3VuZCBpbiBzdXBlcmJsb2NrLiAgKCVzID0gJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MQorbXNnaWQgIkNvcnJ1cHRpb24gZm91bmQgaW4gQFMuICAoJXMgPSAlTikuXG4iCittc2dzdHIgIkJlc2NoYWRpZ2luZyBnZXZvbmRlbiBpbiBoZXQgc3VwZXJibG9rOiAgJXMgPSAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBAdjogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIGJlcGFsZW4gdmFuIGRlIGdyb290dGUgdmFuIGZ5c2llayBhcHBhcmFhdDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgY291bnQgaW4gc3VwZXJibG9jayBpcyAlaSwgc2hvdWxkIGJlICVqLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MQorbXNnaWQgIkBpIGNvdW50IGluIEBTIGlzICVpLCBAcyAlai5cbiIKK21zZ3N0ciAiSW5vZGV0YWwgaW4gc3VwZXJibG9rIGlzICVpLCB6b3UgJWogbW9ldGVuIHppam4uXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg1Cittc2dpZCAiVGhlIEh1cmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZmlsZXR5cGUgZmVhdHVyZS5cbiIKK21zZ3N0ciAiRGUgSHVyZCBvbmRlcnN0ZXVudCBkZSBiZXN0YW5kc3R5cGVuZnVuY3RpZSBuaWV0LlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBhbiBpbnZhbGlkIGpvdXJuYWwgKGlub2RlICVpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzIGFuIEBuIEBqIChAaSAlaSkuXG4iCittc2dzdHIgIlN1cGVyYmxvayBoZWVmdCBlZW4gb25nZWxkaWcgam91cm5hbCAoaW5vZGUgJWkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBtdWx0aXBsZSBmaWxlc3lzdGVtIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk1Cittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIG11bHRpcGxlIEBmIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4iCittc2dzdHIgIiIKKyJIZXQgZXh0ZXJuZSBqb3VybmFsIGhlZWZ0IG1lZXJkZXJlIGJlc3RhbmRzc3lzdGVlbS1nZWJydWlrZXJzO1xuIgorImRpdCB3b3JkdCBuaWV0IG9uZGVyc3RldW5kLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW4ndCBmaW5kIGV4dGVybmFsIGpvdXJuYWxcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDAKK21zZ2lkICJDYW4ndCBmaW5kIGV4dGVybmFsIEBqXG4iCittc2dzdHIgIkthbiBnZWVuIGV4dGVybiBqb3VybmFsIHZpbmRlbi5cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgYmFkIHN1cGVyYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDUKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgYmFkIEBTXG4iCittc2dzdHIgIkhldCBleHRlcm5lIGpvdXJuYWwgaGVlZnQgZWVuIHNsZWNodCBzdXBlcmJsb2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZpbGVzeXN0ZW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMTAKK21zZ2lkICJFeHRlcm5hbCBAaiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgQGZcbiIKK21zZ3N0ciAiSGV0IGV4dGVybmUgam91cm5hbCBvbmRlcnN0ZXVudCBkaXQgYmVzdGFuZHNzeXN0ZWVtIG5pZXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gam91cm5hbCBzdXBlcmJsb2NrIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgam91cm5hbCAKKyMuIEAtZXhwYW5kZWQ6IGZvcm1hdC5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjE1Cittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiAiCisiZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKyJIZXQgc3VwZXJibG9rIHZhbiBoZXQgam91cm5hbCBpcyB2YW4gZWVuIG9uYmVrZW5kIGVuIG5pZXQtb25kZXJzdGV1bmQgdHlwZSAiCisiJU4uXG4iCisiVmVybW9lZGVsaWprIGdlYnJ1aWt0IHUgZWVuIG91ZGVyICdlMmZzY2snLXByb2dyYW1tYSBkYXQgZGV6ZSBqb3VybmFsLSIKKyJpbmRlbGluZ1xuIgorIm5pZXQgb25kZXJzdGV1bnQuICBIZXQga2FuIG9vayB6aWpuIGRhdCBoZXQgam91cm5hbC1zdXBlcmJsb2sgYmVzY2hhZGlnZCAiCisiaXMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyMworbXNnaWQgIkBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIkhldCBzdXBlcmJsb2sgdmFuIGhldCBqb3VybmFsIGlzIGJlc2NoYWRpZ2QuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzX2pvdXJuYWwgZmxhZyBpcyBjbGVhciwgYnV0IGEgam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyOAorbXNnaWQgIkBTIGhhc19AaiBmbGFnIGlzIGNsZWFyLCBidXQgYSBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJKb3VybmFsLXZsYWcgaW4gc3VwZXJibG9rIGlzIG5pZXQgZ2V6ZXQsIG1hYXIgZXIgaXMgd2VsIGVlbiBqb3VybmFsLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzMworbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gQGogaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiUmVkZGluZ3N2bGFnIGluIHN1cGVyYmxvayBpcyBnZXpldCwgbWFhciBlciBpcyBnZWVuIGpvdXJuYWwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IGpvdXJuYWwgaGFzIGRhdGEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjM4Cittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IEBqIGhhcyBkYXRhLlxuIgorbXNnc3RyICIiCisiUmVkZGluZ3N2bGFnIGluIHN1cGVyYmxvayBpcyBuaWV0IGdlemV0LCBtYWFyIGhldCBqb3VybmFsIGJldmF0IGdlZ2V2ZW5zLlxuIgorCisjLiBALWV4cGFuZGVkOiBDbGVhciBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0MworbXNnaWQgIkNsZWFyIEBqIgorbXNnc3RyICJKb3VybmFsIHdpc3NlbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBmaWxlc3lzdGVtLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0OCBlMmZzY2svcHJvYmxlbS5jOjcwNworbXNnaWQgIkBmIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIEBmLiAgIgorbXNnc3RyICJCZXN0YW5kc3N5c3RlZW0gaXMgZWVuIHZlcnNpZSAwLCBtYWFyIGhlZWZ0IGZ1bmN0aWV2bGFnKGdlbikgZ2V6ZXQuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVzIG9ycGhhbmVkIGlub2RlICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjUzCittc2dpZCAiJXMgQG8gQGkgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbiIKK21zZ3N0ciAiJXMgdmFuIHZlcndlZXNkZSBpbm9kZSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjU4Cittc2dpZCAiQEkgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiT25nZWxkaWcgJUIgKCViKSBnZXZvbmRlbiBpbiB2ZXJ3ZWVzZGUgaW5vZGUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEFscmVhZHkgY2xlYXJlZCAlQiAoJWIpIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI2MworbXNnaWQgIkFscmVhZHkgY2xlYXJlZCAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICJSZWVkcy1nZXdpc3QgJUIgKCViKSBnZXZvbmRlbiBpbiB2ZXJ3ZWVzZGUgaW5vZGUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgb3JwaGFuZWQgaW5vZGUgJWkgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEkgQG8gQGkgJWkgaW4gQFMuXG4iCittc2dzdHIgIk9uZ2VsZGlnZSB2ZXJ3ZWVzZGUgaW5vZGUgJWkgaW4gc3VwZXJibG9rLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIGlub2RlICVpIGluIG9ycGhhbmVkIGlub2RlIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBpICVpIGluIEBvIEBpIGxpc3QuXG4iCittc2dzdHIgIk9uZ2VsZGlnZSBpbm9kZSAlaSBpbiBsaWpzdCB2YW4gdmVyd2Vlc2RlIGlub2Rlcy5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3OAorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICIiCisiSm91cm5hbC1zdXBlcmJsb2sgaGVlZnQgZWVuIG9uYmVrZW5kZSBhbGxlZW4tbGV6ZW4tZnVuY3RpZXZsYWcgZ2V6ZXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODMKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiIgorIkpvdXJuYWwtc3VwZXJibG9rIGhlZWZ0IGVlbiBvbmJla2VuZGUgZW4gaW5jb21wYXRpYmVsZSBmdW5jdGlldmxhZyBnZXpldC5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjg4Cittc2dpZCAiQGogdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuIgorbXNnc3RyICJKb3VybmFsLXZlcnNpZSB3b3JkdCBuaWV0IG9uZGVyc3RldW5kIGRvb3IgZGV6ZSBlMmZzY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1vdmluZyBqb3VybmFsIGZyb20gLyVzIHRvIGhpZGRlbiBpbm9kZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNb3ZpbmcgQGogZnJvbSAvJXMgdG8gaGlkZGVuIEBpLlxuIgorIlxuIgorbXNnc3RyICIiCisiSm91cm5hbCB3b3JkdCB2ZXJwbGFhdHN0IHZhbiAvJXMgbmFhciBlZW4gdmVyYm9yZ2VuIGlub2RlLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBtb3Zpbmcgam91cm5hbDogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBtb3ZpbmcgQGo6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKyJGb3V0IHRpamRlbnMgdmVycGxhYXRzZW4gdmFuIGpvdXJuYWw6ICVtXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZvdW5kIGludmFsaWQgVjIgam91cm5hbCBzdXBlcmJsb2NrIGZpZWxkcyAoZnJvbSBWMSBqb3VybmFsKS5cbgorIy4gQC1leHBhbmRlZDogQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgam91cm5hbCBzdXBlcmJsb2NrLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMwMworbXNnaWQgIiIKKyJGb3VuZCBAbiBWMiBAaiBAUyBmaWVsZHMgKGZyb20gVjEgQGopLlxuIgorIkNsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIEBqIEBTLi4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJPbmdlbGRpZ2UgVjItam91cm5hbC1zdXBlcmJsb2t2ZWxkZW4gZ2V2b25kZW4gaW4gVjEtam91cm5hbC5cbiIKKyJWZWxkZW4gdm9vcmJpaiBoZXQgVjEtam91cm5hbC1zdXBlcmJsb2sgd29yZGVuIGdld2lzdC4uLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBSdW4gam91cm5hbCBhbnl3YXkKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzA5Cittc2dpZCAiUnVuIEBqIGFueXdheSIKK21zZ3N0ciAiSm91cm5hbCB0b2NoIGFmc3BlbGVuIgorCisjLiBALWV4cGFuZGVkOiBSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIHN1cGVyYmxvY2ssIHNvIHJ1bm5pbmcgam91cm5hbCBhbnl3YXkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzE0Cittc2dpZCAiUmVjb3ZlcnkgZmxhZyBub3Qgc2V0IGluIGJhY2t1cCBAUywgc28gcnVubmluZyBAaiBhbnl3YXkuXG4iCittc2dzdHIgIiIKKyJSZXNlcnZla29waWXDq24gdmFuIGhldCBzdXBlcmJsb2sga2VubmVuIGdlZW4gcmVkZGluZ3N2bGFnO1xuIgorImhldCBuaWV0LWxlZ2Ugam91cm5hbCB3b3JkdCBkYWFyb20gYWZnZXNwZWVsZC5cbiIKKworIy4gQC1leHBhbmRlZDogQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTkKK21zZ2lkICIiCisiQmFja2luZyB1cCBAaiBAaSBAYiBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk1ha2VuIHZhbiByZXNlcnZla29waWUgdmFuIGluZm9ybWF0aWUgaW4gam91cm5hbC1pbm9kZWJsb2trZW4uLi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9pbm9kZSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGlzICVOOyBzaG91bGQgYmUgemVyby4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMjQKK21zZ2lkICIiCisiQGYgZG9lcyBub3QgaGF2ZSByZXNpemVfQGkgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X0Bic1xuIgorImlzICVOOyBAcyB6ZXJvLiAgIgorbXNnc3RyICIiCisiQmVzdGFuZHNzeXN0ZWVtIGhlZWZ0IGZ1bmN0aWUgJ3Jlc2l6ZV9pbm9kZScgdWl0Z2VzY2hha2VsZCxcbiIKKyJtYWFyICdzX3Jlc2VydmVkX2dkdF9ibG9ja3MnIGlzICVOOyB6b3UgbnVsIG1vZXRlbiB6aWpuLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemVfaW5vZGUgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIGlub2RlIGlzIG5vbi16ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzMAorbXNnaWQgIlJlc2l6ZV9AaSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgQGkgaXMgbm9uLXplcm8uICAiCittc2dzdHIgIiIKKyJGdW5jdGllICdyZXNpemVfaW5vZGUnIGlzIHVpdGdlc2NoYWtlbGQsIG1hYXIgZGUgJ3Jlc2l6ZSctaW5vZGUgaXMgbmlldCAiCisibnVsLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgbm90IHZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzNQorbXNnaWQgIlJlc2l6ZSBAaSBub3QgdmFsaWQuICAiCittc2dzdHIgIk9uZ2VsZGlnZSAncmVzaXplJy1pbm9kZS4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0MAorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKyJMYWF0c3RlIGFhbmtvcHBlbGluZ3N0aWpkICgldCkgbGlndCB2b2xnZW5zIHN1cGVyYmxva1xuIgorIiAgICBpbiBkZSB0b2Vrb21zdCAobnUgPSAlVCkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNDUKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisiTGFhdHN0ZSBzY2hyaWpmdGlqZCAoJXQpIGxpZ3Qgdm9sZ2VucyBzdXBlcmJsb2tcbiIKKyIgICAgaW4gZGUgdG9la29tc3QgKG51ID0gJVQpLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgc2hvdWxkIGJlICVYLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIEBzICVYLiAgIgorbXNnc3RyICJEZSBzdXBlcmJsb2toaW50IHZvb3IgZWVuIGV4dGVybiBzdXBlcmJsb2sgZGllbnQgJVggdGUgemlqbi4gICIKKworIy4gQC1leHBhbmRlZDogQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNTQKK21zZ2lkICIiCisiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlRvZXZvZWdlbiB2YW4gJ2Rpcmhhc2gnLWhpbnQgYWFuIGJlc3RhbmRzc3lzdGVlbS5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNTkKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgIgorbXNnc3RyICIiCisiVmFuIGdyb2Vwc2Jlc2NocmlqdmVyICVnIGlzIGRlIGNvbnRyb2xlc29tICUwNHgsIHpvdSAlMDR5IG1vZXRlbiB6aWpuLiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbiIKK21zZ3N0ciAiIgorIkdyb2Vwc2Jlc2NocmlqdmVyICVnIGlzIGdlbWFya2VlcmQgYWxzIG9uZ2XDr25pdGlhbGlzZWVyZCB6b25kZXIgZnVuY3RpZXMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNjkKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAiCittc2dzdHIgIiIKKyJHcm9lcHNiZXNjaHJpanZlciAlZyBoZWVmdCBlZW4gb25nZWxkaWcgYWFudGFsICglYikgb25nZWJydWlrdGUgaW5vZGVzLiAgIgorCisjLiBALWV4cGFuZGVkOiBMYXN0IGdyb3VwIGJsb2NrIGJpdG1hcCB1bmluaXRpYWxpemVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3NAorbXNnaWQgIkxhc3QgQGcgQGIgQEIgdW5pbml0aWFsaXplZC4gICIKK21zZ3N0ciAiQmxvay1iaXRrYWFydCB2YW4gbGFhdHN0ZSBncm9lcHNiZXNjaHJpanZlciBpcyBvbmdlw69uaXRpYWxpc2VlcmQuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdHJhbnNhY3Rpb24gJWkgd2FzIGNvcnJ1cHQsIHJlcGxheSB3YXMgYWJvcnRlZC5cbiIKK21zZ3N0ciAiSm91cm5hbC10cmFuc2FjdGllICVpIGlzIGJlc2NoYWRpZ2Q7IGhldCBhZnNwZWxlbiBpcyBhZmdlYnJva2VuLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4MworbXNnaWQgIlRoZSB0ZXN0X2ZzIGZsYWcgaXMgc2V0IChhbmQgZXh0NCBpcyBhdmFpbGFibGUpLiAgIgorbXNnc3RyICJEZSBmdW5jdGlldmxhZyAndGVzdF9mcycgaXMgZ2V6ZXQgKGVuIGV4dDQgaXMgYmVzY2hpa2JhYXIpLiAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzg4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldClcbiIKK21zZ3N0ciAiIgorIkxhYXRzdGUgYWFua29wcGVsaW5nc3RpamQgbGlndCB2b2xnZW5zIGhldCBzdXBlcmJsb2sgaW4gZGUgdG9la29tc3QuXG4iCisiICAgIChNYWFyIG1pbmRlciBkYW4gZWVuIGRhZzsgdmVybW9lZGVsaWprIGlzIGRlIGhhcmR3YXJla2xvayBvbmp1aXN0ICIKKyJpbmdlc3RlbGQuKSAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzk0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldClcbiIKK21zZ3N0ciAiIgorIkxhYXRzdGUgc2NocmlqZnRpamQgbGlndCB2b2xnZW5zIGhldCBzdXBlcmJsb2sgaW4gZGUgdG9la29tc3QuXG4iCisiICAgIChNYWFyIG1pbmRlciBkYW4gZWVuIGRhZzsgdmVybW9lZGVsaWprIGlzIGRlIGhhcmR3YXJla2xvayBvbmp1aXN0ICIKKyJpbmdlc3RlbGQuKSAgIgorCisjLiBALWV4cGFuZGVkOiBPbmUgb3IgbW9yZSBibG9jayBncm91cCBkZXNjcmlwdG9yIGNoZWNrc3VtcyBhcmUgaW52YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDAKK21zZ2lkICJPbmUgb3IgbW9yZSBAYiBAZyBkZXNjcmlwdG9yIGNoZWNrc3VtcyBhcmUgaW52YWxpZC4gICIKK21zZ3N0ciAiRWVuIG9mIG1lZXIgZ3JvZXBzYmVzY2hyaWp2ZXJzIGhlYmJlbiBlZW4gb25nZWxkaWdlIGNvbnRyb2xlc29tLiAgIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgaW5vZGVzIGNvdW50IHRvICVqICh3YXMgJWkpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDA1Cittc2dpZCAiU2V0dGluZyBmcmVlIEBpcyBjb3VudCB0byAlaiAod2FzICVpKVxuIgorbXNnc3RyICJIZXQgYWFudGFsIHZyaWplIGlub2RlcyBpcyBvcCAlaiBnZXpldCAod2FzICVpKVxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgYmxvY2tzIGNvdW50IHRvICVjICh3YXMgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDEwCittc2dpZCAiU2V0dGluZyBmcmVlIEBicyBjb3VudCB0byAlYyAod2FzICViKVxuIgorbXNnc3RyICJIZXQgYWFudGFsIHZyaWplIGJsb2trZW4gaXMgb3AgJWMgZ2V6ZXQgKHdhcyAlYilcbiIKKworIy4gQC1leHBhbmRlZDogTWFraW5nIHF1b3RhIGlub2RlICVpICglUSkgaGlkZGVuLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxNQorbXNnaWQgIk1ha2luZyBAcSBAaSAlaSAoJVEpIGhpZGRlbi5cbiIKK21zZ3N0ciAiRGUgcXVvdGEtaW5vZGUgJWkgKCVRKSB3b3JkdCB2ZXJib3JnZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyMAorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gICIKK21zZ3N0ciAiU3VwZXJibG9rIGhlZWZ0IG9uZ2VsZGlnIE1NUC1ibG9rLiAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjUKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAiCittc2dzdHIgIlN1cGVyYmxvayBoZWVmdCBvbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgTU1QLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfb3BlbjI6ICVtXG4iCittc2dzdHIgImV4dDJmc19vcGVuMigpOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfY2hlY2tfZGVzYzogJW1cbiIKK21zZ3N0ciAiZXh0MmZzX2NoZWNrX2Rlc2MoKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayA2NGJpdCBmaWxlc3lzdGVtcyBuZWVkcyBleHRlbnRzIHRvIGFjY2VzcyB0aGUgd2hvbGUgZGlzay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDAKK21zZ2lkICJAUyA2NGJpdCBmaWxlc3lzdGVtcyBuZWVkcyBleHRlbnRzIHRvIGFjY2VzcyB0aGUgd2hvbGUgZGlzay4gICIKK21zZ3N0ciAiIgorIlN1cGVyYmxvayB2YW4gNjQtYml0cyBiZXN0YW5kc3N5c3RlbWVuIGhlZWZ0IGV4dGVudHMgbm9kaWcgb20gZ2VoZWxlIHNjaGlqZiAiCisidGUga3VubmVuIGJlcmVpa2VuLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NQorbXNnaWQgIkZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZy4gICglTiwgbWF4IHZhbHVlICVnKS4gICIKK21zZ3N0ciAiV2FhcmRlIHZhbiAnZmlyc3RfbWV0YV9iZycgaXMgdGUgZ3Jvb3QgKCVOLCBtYXhpbXVtIGlzICVnKS4gICIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDUyCittc2dpZCAiUGFzcyAxOiBDaGVja2luZyBAaXMsIEBicywgYW5kIHNpemVzXG4iCittc2dzdHIgIlN0YXAgMTogQ29udHJvbGUgdmFuIGlub2RlcywgYmxva2tlbiwgZW4gZ3Jvb3R0ZXNcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDU2Cittc2dpZCAiQHIgaXMgbm90IGEgQGQuICAiCittc2dzdHIgIkRlIGhvb2ZkLWlub2RlIGlzIGdlZW4gbWFwLiAgIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjEKK21zZ2lkICJAciBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAiCittc2dzdHIgIiIKKyJEZSB2ZXJ3aWpkZXJpbmdzdGlqZCB2YW4gZGUgaG9vZmQtaW5vZGUgaXMgbmlldCBudWwgKHdhYXJzY2hpam5saWprICIKKyJ2ZXJvb3J6YWFrdCBkb29yIGVlbiBvdWRlIG1rZTJmcykuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2VydmVkIGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjYKK21zZ2lkICJSZXNlcnZlZCBAaSAlaSAoJVEpIGhhcyBAbiBtb2RlLiAgIgorbXNnc3RyICJHZXJlc2VydmVlcmRlIGlub2RlICVpICVRIGhlZWZ0IGVlbiBvbmdlbGRpZ2UgbW9kdXMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGRlbGV0ZWQgaW5vZGUgJWkgaGFzIHplcm8gZHRpbWUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBEIEBpICVpIGhhcyB6ZXJvIGR0aW1lLiAgIgorbXNnc3RyICJEZSB2ZXJ3aWpkZXJpbmdzdGlqZCB2YW4gdmVyd2lqZGVyZGUgaW5vZGUgJWkgaXMgbnVsLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgIgorbXNnc3RyICJJbm9kZSAlaSBpcyBpbiBnZWJydWlrLCBtYWFyIGhlZWZ0IGVlbiBpbmdldnVsZGUgdmVyd2lqZGVyaW5nc3RpamQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICJJbm9kZSAlaSBpcyBlZW4gbWFwIG1ldCBsZW5ndGUgbnVsLiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4NgorbXNnaWQgIkBnICVnJ3MgQGIgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKyJEZSBibG9rLWJpdGthYXJ0IHZhbiBncm9lcCAlZyBib3RzdCBiaWogJWIgbWV0IGVlbiBiZXN0YW5kc3N5c3RlZW1ibG9rLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5MQorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKyJEZSBpbm9kZS1iaXRrYWFydCB2YW4gZ3JvZXAgJWcgYm90c3QgYmlqICViIG1ldCBlZW4gYmVzdGFuZHNzeXN0ZWVtYmxvay5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSB0YWJsZSBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5NgorbXNnaWQgIkBnICVnJ3MgQGkgdGFibGUgYXQgJWIgQEMuXG4iCittc2dzdHIgIkRlIGlub2RldGFiZWwgdmFuIGdyb2VwICVnIGJvdHN0IGJpaiAlYiBtZXQgZWVuIGJlc3RhbmRzc3lzdGVlbWJsb2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwMQorbXNnaWQgIkBnICVnJ3MgQGIgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIkRlIGJsb2stYml0a2FhcnQgJWIgdmFuIGdyb2VwICVnIGlzIG9uZ2VsZGlnLiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDYKK21zZ2lkICJAZyAlZydzIEBpIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJEZSBpbm9kZS1iaXRrYWFydCAlYiB2YW4gZ3JvZXAgJWcgaXMgb25nZWxkaWcuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX3NpemUgaXMgJUlzLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTExCittc2dpZCAiQGkgJWksIGlfc2l6ZSBpcyAlSXMsIEBzICVOLiAgIgorbXNnc3RyICJJbm9kZSAlaSwgJ2lfc2l6ZScgaXMgJUlzLCB6b3UgJU4gbW9ldGVuIHppam4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX2Jsb2NrcyBpcyAlSWIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTYKK21zZ2lkICJAaSAlaSwgaV9AYnMgaXMgJUliLCBAcyAlTi4gICIKK21zZ3N0ciAiSW5vZGUgJWksICdpX2Jsb2NrcycgaXMgJUliLCB6b3UgJU4gbW9ldGVuIHppam4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBpbiBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MjEKK21zZ2lkICJASSAlQiAoJWIpIGluIEBpICVpLiAgIgorbXNnc3RyICJPbmdlbGRpZyAlQiAoJWIpIGluIGlub2RlICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIG92ZXJsYXBzIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI2Cittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiJUIgKCViKSBvdmVybGFwdCBtZXRhZGF0YSB2YW4gYmVzdGFuZHNzeXN0ZWVtIGluIGlub2RlICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIklub2RlICVpIGJldmF0IG9uZ2VsZGlnKGUpIGJsb2soa2VuKS4gICIKKworIy4gQC1leHBhbmRlZDogVG9vIG1hbnkgaWxsZWdhbCBibG9ja3MgaW4gaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGlsbGVnYWwgQGJzIGluIEBpICVpLlxuIgorbXNnc3RyICJUZSB2ZWVsIG9uZ2VsZGlnZSBibG9ra2VuIGluIGlub2RlICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gYmFkIGJsb2NrIGlub2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0MQorbXNnaWQgIkBJICVCICglYikgaW4gYmFkIEBiIEBpLiAgIgorbXNnc3RyICJPbmdlbGRpZyAlQiAoJWIpIGluIHNsZWNodGVibG9ra2VuLWlub2RlLiAgIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQ2Cittc2dpZCAiQmFkIEBiIEBpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJTbGVjaHRlYmxva2tlbi1pbm9kZSBiZXZhdCBvbmdlbGRpZyhlKSBibG9rKGtlbikuICAiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBvciBiYWQgYmxvY2sgaW4gdXNlIVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1MQorbXNnaWQgIkR1cGxpY2F0ZSBvciBiYWQgQGIgaW4gdXNlIVxuIgorbXNnc3RyICJFZW4gZHViYmVsIG9mIHNsZWNodCBibG9rIGlzIGluIGdlYnJ1aWshXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayAlYiB1c2VkIGFzIGJhZCBibG9jayBpbm9kZSBpbmRpcmVjdCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTYKK21zZ2lkICJCYWQgQGIgJWIgdXNlZCBhcyBiYWQgQGIgQGkgaW5kaXJlY3QgQGIuICAiCittc2dzdHIgIiIKKyJTbGVjaHQgYmxvayAlYiBpcyBpbiBnZWJydWlrIGFscyBpbmRpcmVjdCBibG9rIHZvb3IgZGUgc2xlY2h0ZWJsb2trZW4tIgorImlub2RlLiAgIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbgorIy4gQC1leHBhbmRlZDogc2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaW4gdGhlIGZpbGVzeXN0ZW0uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYxCittc2dpZCAiIgorIlxuIgorIlRoZSBiYWQgQGIgQGkgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4iCisic2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbiIKKyJpbiB0aGUgQGYuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEZSBzbGVjaHRlYmxva2tlbi1pbm9kZSBpcyB2ZXJtb2VkZWxpamsgYmVzY2hhZGlnZC5cbiIKKyJVIGt1bnQgbnUgYmV0ZXIgc3RvcHBlbiBlbiAnZTJmc2NrIC1jJyB1aXR2b2VyZW4gb21cbiIKKyJoZXQgYmVzdGFuZHNzeXN0ZWVtIHRlIGRvb3J6b2VrZW4gbmFhciBzbGVjaHRlIGJsb2trZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBJZiB0aGUgYmxvY2sgaXMgcmVhbGx5IGJhZCwgdGhlIGZpbGVzeXN0ZW0gY2FuIG5vdCBiZSBmaXhlZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjgKK21zZ2lkICIiCisiXG4iCisiSWYgdGhlIEBiIGlzIHJlYWxseSBiYWQsIHRoZSBAZiBjYW4gbm90IGJlIGZpeGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiQWxzIGhldCBibG9rIGVjaHQgc2xlY2h0IGlzLCBrYW4gaGV0IGJlc3RhbmRzc3lzdGVlbSBuaWV0IGdlcmVwYXJlZXJkICIKKyJ3b3JkZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFlvdSBjYW4gcmVtb3ZlIHRoaXMgYmxvY2sgZnJvbSB0aGUgYmFkIGJsb2NrIGxpc3QgYW5kIGhvcGVcbgorIy4gQC1leHBhbmRlZDogdGhhdCB0aGUgYmxvY2sgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzMKK21zZ2lkICIiCisiWW91IGNhbiByZW1vdmUgdGhpcyBAYiBmcm9tIHRoZSBiYWQgQGIgbGlzdCBhbmQgaG9wZVxuIgorInRoYXQgdGhlIEBiIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlUga3VudCBkaXQgYmxvayB1aXQgZGUgbGlqc3QgdmFuIHNsZWNodGUgYmxva2tlbiB3aXNzZW4gZW4gaG9wZW5cbiIKKyJkYXQgaGV0IGJsb2sgdG9jaCBnb2VkIGlzLiAgTWFhciBlciB6aWpuIGdlZW4gZ2FyYW50aWVzLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgcHJpbWFyeSBzdXBlcmJsb2NrICglYikgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3OQorbXNnaWQgIlRoZSBwcmltYXJ5IEBTICglYikgaXMgb24gdGhlIGJhZCBAYiBsaXN0LlxuIgorbXNnc3RyICJIZXQgcHJpbWFpcmUgc3VwZXJibG9rICglYikgc3RhYXQgaW4gZGUgbGlqc3QgdmFuIHNsZWNodGUgYmxva2tlbi5cbiIKKworIy4gQC1leHBhbmRlZDogQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgZ3JvdXAgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTg0Cittc2dpZCAiQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgQGcgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBAYiBsaXN0XG4iCittc2dzdHIgIiIKKyJFZW4gZ3JvZXBzYmVzY2hyaWp2ZXJzYmxvayAoJWIpIHN0YWF0IGluIGRlIGxpanN0IHZhbiBzbGVjaHRlIGJsb2trZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3Mgc3VwZXJibG9jayAoJWIpIGlzIGJhZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1OTAKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIEBTICglYikgaXMgYmFkLlxuIgorbXNnc3RyICJXYWFyc2NodXdpbmc6IGdyb2VwICVnIGhlZWZ0IGVlbiBzbGVjaHQgc3VwZXJibG9rICglYikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIGJsb2NrICglYikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTk1Cittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBAZyBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgQGIgKCViKS5cbiIKK21zZ3N0ciAiIgorIldhYXJzY2h1d2luZzogZ3JvZXAgJWcgYmV2YXQgZWVuIHNsZWNodCBibG9rICglYikgaW4gZGUgZ3JvZXBzYmVzY2hyaWp2ZXJzLlxuIgorCisjLiBALWV4cGFuZGVkOiBQcm9ncmFtbWluZyBlcnJvcj8gIGJsb2NrICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjAxCittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I/ICBAYiAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX0BiLlxuIgorbXNnc3RyICIiCisiSW50ZXJuZSBmb3V0PzogYmxvayAlYiBpcyB6b25kZXIgcmVkZW4gZ2VjbGFpbWQgaW4gcHJvY2Vzc19iYWRfYmxvY2soKS5cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyAlTiBjb250aWd1b3VzIGJsb2NrKHMpIGluIGJsb2NrIGdyb3VwICVnIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDcKK21zZ2lkICJAQSAlTiBjb250aWd1b3VzIEBiKHMpIGluIEBiIEBnICVnIGZvciAlczogJW1cbiIKK21zZ3N0ciAiIgorIkZvdXQgdGlqZGVucyByZXNlcnZlcmVuIHZhbiAlTiBhYW5lZW5nc2xvdGVuIGJsb2trZW4gaW4gZ3JvZXAgJWcgdm9vciAlczogIgorIiVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBiIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgcmVzZXJ2ZXJlbiB2YW4gYnVmZmVyIHZvb3IgdmVycGxhYXRzZW4gdmFuICVzLlxuIgorCisjIHNyYy9kZWxlZ2F0ZS5jOjM2OAorIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTcKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuIgorbXNnc3RyICJCZXppZyBtZXQgdmVycGxhYXRzZW4gdmFuIGdyb2VwICVnJ3MgJXMgdmFuICViIG5hYXIgJWMuLi5cbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyB0byAlYy4uLlxuIgorbXNnc3RyICJCZXppZyBtZXQgdmVycGxhYXRzZW4gdmFuIGdyb2VwICVnJ3MgJXMgbmFhciAlYy4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAlYiBvZiAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjcKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBAYiAlYiBvZiAlczogJW1cbiIKK21zZ3N0ciAiV2FhcnNjaHV3aW5nOiBrYW4gYmxvayAlYiB2YW4gJXMgbmlldCBsZXplbjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHdyaXRlIGJsb2NrICViIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzIKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICJXYWFyc2NodXdpbmc6IGthbiBibG9rICViIHZhbiAlcyBuaWV0IHNjaHJpanZlbjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzcgZTJmc2NrL3Byb2JsZW0uYzoxNTAxCittc2dpZCAiQEEgQGkgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIHJlc2VydmVyZW4gdmFuIGlub2RlLWJpdGthYXJ0ICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQyCittc2dpZCAiQEEgQGIgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIHJlc2VydmVyZW4gdmFuIGJsb2stYml0a2FhcnQgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyByZXNlcnZlcmVuIHZhbiAnaWNvdW50Jy1saW5rLWluZm9ybWF0aWU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZGlyZWN0b3J5IGJsb2NrIGFycmF5OiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAZCBAYiBhcnJheTogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIHJlc2VydmVyZW4gdmFuIGJsb2tyZWVrcyB2b29yIG1hcDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIEBpcyAoJWkpOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgc2Nhbm5lbiB2YW4gaW5vZGVzICglaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgbGFuZ3Nsb3BlbiB2YW4gYmxva2tlbiB2YW4gaW5vZGUgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBjb3VudD0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjY3Cittc2dpZCAiRXJyb3Igc3RvcmluZyBAaSBjb3VudCBpbmZvcm1hdGlvbiAoQGk9JWksIGNvdW50PSVOKTogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIG9wc2xhYW4gdmFuIGlub2RldGFsIChpbm9kZT0laSwgYWFudGFsPSVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBkaXJlY3RvcnkgYmxvY2sgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBibG9jaz0lYiwgbnVtPSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzIKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBkIEBiIGluZm9ybWF0aW9uIChAaT0laSwgQGI9JWIsIG51bT0lTik6ICVtXG4iCittc2dzdHIgIiIKKyJGb3V0IHRpamRlbnMgb3BzbGFhbiB2YW4gbWFwYmxva2tlbmluZm9ybWF0aWUgKGlub2RlPSVpLCBibG9rPSViLCBhYW50YWw9IgorIiVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIGxlemVuIHZhbiBpbm9kZSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gICIKK21zZ3N0ciAiSW5vZGUgJWkgaGVlZnQgZGUgaW1hZ2ljLXZsYWcgZ2V6ZXQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChpbm9kZSAlaSkgaGFzIGltbXV0YWJsZVxuCisjLiBALWV4cGFuZGVkOiBvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKEBpICVpKSBoYXMgaW1tdXRhYmxlXG4iCisib3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAiCittc2dzdHIgIiIKKyJTcGVjaWFhbCBiZXN0YW5kIChhcHBhcmFhdC9zb2NrZXQvZmlmby9zeW1saW5rKSBoZWVmdCBkZSBvbnZlcmFuZGVyYmFhci1cbiIKKyJvZiBkZSBhbGxlZW4tdG9ldm9lZ2VudmxhZyBnZXpldCAoaW5vZGUgJWkpLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgY29tcHJlc3Npb24gZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGNvbXByZXNzaW9uIHN1cHBvcnQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBAY2lvbiBmbGFnIHNldCBvbiBAZiB3aXRob3V0IEBjaW9uIHN1cHBvcnQuICAiCittc2dzdHIgIiIKKyJJbm9kZSAlaSBoZWVmdCBkZSBjb21wcmVzc2lldmxhZyBnZXpldCBvcCBlZW4gYmVzdGFuZHNzeXN0ZWVtIHpvbmRlciAiCisiY29tcHJlc3NpZS1vbmRlcnN0ZXVuaW5nLiAgIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8pIGlub2RlICVpIGhhcyBub24temVybyBzaXplLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWFsIChAdi9zb2NrZXQvZmlmbykgQGkgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAiCittc2dzdHIgIlNwZWNpYWxlIGlub2RlICVpIChhcHBhcmFhdC9zb2NrZXQvZmlmbykgaGVlZnQgbmlldCBsZW5ndGUgbnVsLiAgIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxMgorbXNnaWQgIkBqIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJKb3VybmFsLWlub2RlIGlzIG5pZXQgaW4gZ2VicnVpaywgbWFhciBiZXZhdCBnZWdldmVucy4gICIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxNworbXNnaWQgIkBqIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkpvdXJuYWwgaXMgZ2VlbiBub3JtYWFsIGJlc3RhbmQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSB3YXMgcGFydCBvZiB0aGUgQG8gQGkgbGlzdC4gICIKK21zZ3N0ciAiSW5vZGUgJWkgd2FzIGRlZWwgdmFuIGRlIGxpanN0IHZhbiB2ZXJ3ZWVzZGUgaW5vZGVzLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyOAorbXNnaWQgIkBpcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAiCittc2dzdHIgIiIKKyJJbm9kZXMgZ2V2b25kZW4gZGllIGRlZWwgd2FyZW4gdmFuIGVlbiBiZXNjaGFkaWdkZSBsaWpzdCB2YW4gdmVyd2Vlc2RlICIKKyJpbm9kZXMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMzCittc2dpZCAiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyByZXNlcnZlcmVuIHZhbiAncmVmY291bnQnLXN0cnVjdHV1ciAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBmb3IgaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzM4Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiBmb3IgQGkgJWkuICAiCittc2dzdHIgIiIKKyJGb3V0IHRpamRlbnMgbGV6ZW4gdmFuIGJsb2sgJWIgbWV0IHVpdGdlYnJlaWRlIGtlbm1lcmtlbiB2b29yIGlub2RlICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBiYWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0MworbXNnaWQgIkBpICVpIGhhcyBhIGJhZCBAYSBAYiAlYi4gICIKK21zZ3N0ciAiSW5vZGUgJWkgYmV2YXQgZWVuIHNsZWNodCBibG9rICViIG1ldCB1aXRnZWJyZWlkZSBrZW5tZXJrZW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQ4Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJGb3V0IHRpamRlbnMgbGV6ZW4gdmFuIGJsb2sgJWIgbWV0IHVpdGdlYnJlaWRlIGtlbm1lcmtlbjogJW0gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTMKK21zZ2lkICJAYSBAYiAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBAcyAlTi4gICIKK21zZ3N0ciAiIgorIkJsb2sgJWIgbWV0IHVpdGdlYnJlaWRlIGtlbm1lcmtlbiBoZWVmdCB2ZXJ3aWp6aW5nc3RhbCAlciwgem91ICVOIG1vZXRlbiAiCisiemlqbi4gICIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTgKK21zZ2lkICJFcnJvciB3cml0aW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkZvdXQgdGlqZGVucyBzY2hyaWp2ZW4gdmFuIGJsb2sgJWIgbWV0IHVpdGdlYnJlaWRlIGtlbm1lcmtlbjogJW0gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyBoX2Jsb2NrcyA+IDEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzYzCittc2dpZCAiQGEgQGIgJWIgaGFzIGhfQGJzID4gMS4gICIKK21zZ3N0ciAiQmxvayAlYiBtZXQgdWl0Z2VicmVpZGUga2VubWVya2VuIGhlZWZ0IGhfYmxvY2tzID4gMS4gICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzY4Cittc2dpZCAiQEEgQGEgQGIgJWIuICAiCittc2dzdHIgIkZvdXQgdGlqZGVucyByZXNlcnZlcmVuIHZhbiBibG9rICViIG1ldCB1aXRnZWJyZWlkZSBrZW5tZXJrZW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzczCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgIgorbXNnc3RyICIiCisiQmxvayAlYiBtZXQgdWl0Z2VicmVpZGUga2VubWVya2VuIGlzIGJlc2NoYWRpZ2QgKHJlc2VydmVyaW5nc292ZXJsYXApLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCBuYW1lKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzgKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiBuYW1lKS4gICIKK21zZ3N0ciAiQmxvayAlYiBtZXQgdWl0Z2VicmVpZGUga2VubWVya2VuIGlzIGJlc2NoYWRpZ2QgKG9uZ2VsZGlnZSBuYWFtKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgdmFsdWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4MworbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIHZhbHVlKS4gICIKK21zZ3N0ciAiQmxvayAlYiBtZXQgdWl0Z2VicmVpZGUga2VubWVya2VuIGlzIGJlc2NoYWRpZ2QgKG9uZ2VsZGlnZSB3YWFyZGUpLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyB0b28gYmlnLiAgIgorbXNnc3RyICJJbm9kZSAlaSBpcyB0ZSBncm9vdC4gICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBjYXVzZXMgZGlyZWN0b3J5IHRvIGJlIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzkyCittc2dpZCAiJUIgKCViKSBjYXVzZXMgQGQgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiJUIgKCViKSBtYWFrdCBtYXAgdGUgZ3Jvb3QuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk3Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgZmlsZSB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIG1hYWt0IGJlc3RhbmQgdGUgZ3Jvb3QuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAyCittc2dpZCAiJUIgKCViKSBjYXVzZXMgc3ltbGluayB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIG1hYWt0IHN5bWJvbGlzY2hlIGtvcHBlbGluZyB0ZSBncm9vdC4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuIgorbXNnc3RyICIiCisiSW5vZGUgJWkgaGVlZnQgZGUgJ0lOREVYX0ZMJy12bGFnIGdlemV0IG9wIGVlbiBiZXN0YW5kc3N5c3RlZW0gem9uZGVyICIKKyInaHRyZWUnLW9uZGVyc3RldW5pbmcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIgorbXNnc3RyICJJbm9kZSAlaSBoZWVmdCBkZSAnSU5ERVhfRkwnLXZsYWcgZ2V6ZXQgbWFhciBoZXQgaXMgZ2VlbiBtYXAuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCByb290IG5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIGhhcyBhbiBAbiByb290IG5vZGUuXG4iCittc2dzdHIgIklub2RlICVpIHZhbiAnaHRyZWUnLW1hcCBoZWVmdCBlZW4gb25nZWxkaWdlIHdvcnRlbGtub29wLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIyCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIiIKKyJJbm9kZSAlaSB2YW4gJ2h0cmVlJy1tYXAgZ2VicnVpa3QgZWVuIG5pZXQtb25kZXJzdGV1bmRlIGhhc2gtdmVyc2llICglTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4iCittc2dzdHIgIklub2RlICVpIHZhbiAnaHRyZWUnLW1hcCBnZWJydWlrdCBlZW4gaW5jb21wYXRpYmVsZSB3b3J0ZWxrbm9vcHZsYWcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzMgorbXNnaWQgIkBoICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4iCittc2dzdHIgIklub2RlICVpIHZhbiAnaHRyZWUnLW1hcCBoZWVmdCBlZW4gdGUgZ3JvdGUgYm9vbWRpZXB0ZSAoJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGFuIGluZGlyZWN0IGJsb2NrICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIG1ldGFkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzNworbXNnaWQgIiIKKyJCYWQgQGIgQGkgaGFzIGFuIGluZGlyZWN0IEBiICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuIgorIkBmIG1ldGFkYXRhLiAgIgorbXNnc3RyICIiCisiU2xlY2h0ZWJsb2trZW4taW5vZGUgYmV2YXQgZWVuIGluZGlyZWN0IGJsb2sgKCViKSBkYXQgc3RyaWpkaWdcbiIKKyJpcyBtZXQgZGUgbWV0YWdlZ2V2ZW5zIHZhbiBoZXQgYmVzdGFuZHNzeXN0ZWVtLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemUgQGkgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uIgorbXNnc3RyICJBYW5tYWtlbiB2YW4gJ3Jlc2l6ZSctaW5vZGUgaXMgbWlzbHVrdDogJW0iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGV4dHJhIHNpemUgKCVJUykgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0OAorbXNnaWQgIkBpICVpIGhhcyBhIGV4dHJhIHNpemUgKCVJUykgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiSW5vZGUgJWkgaGVlZnQgZWVuIG9uZ2VsZGlnZSBleHRyYSBncm9vdHRlICglSVMpLlxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTMKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiIgorIkVlbiB1aXRnZWJyZWlkIGtlbm1lcmsgaW4gaW5vZGUgJWkgaGVlZnQgZWVuIG9uZ2VsZGlnZSBuYWFtbGVuZ3RlICglTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODU4Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiIgorIkVlbiB1aXRnZWJyZWlkIGtlbm1lcmsgaW4gaW5vZGUgJWkgaGVlZnQgZWVuIG9uZ2VsZGlnZSB3YWFyZGVvZmZzZXQgKCVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIGJsb2NrICglTikgd2hpY2ggaXMgaW52YWxpZCAobXVzdCBiZSAwKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIEBiICglTikgd2hpY2ggaXMgQG4gKG11c3QgYmUgMClcbiIKK21zZ3N0ciAiIgorIkVlbiB1aXRnZWJyZWlkIGtlbm1lcmsgaW4gaW5vZGUgJWkgaGVlZnQgZWVuIG9uZ2VsZGlnIHdhYXJkZWJsb2sgKCVOLCBtb2V0IDAgIgorInppam4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjgKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiIgorIkVlbiB1aXRnZWJyZWlkIGtlbm1lcmsgaW4gaW5vZGUgJWkgaGVlZnQgZWVuIG9uZ2VsZGlnZSB3YWFyZGVncm9vdHRlICglTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICIiCisiRWVuIHVpdGdlYnJlaWQga2VubWVyayBpbiBpbm9kZSAlaSBoZWVmdCBlZW4gb25nZWxkaWdlIGhhc2gtd2FhcmRlICglTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzgKK21zZ2lkICJAaSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4iCittc2dzdHIgIiIKKyJJbm9kZSAlaSBpcyBnZW1hcmtlZXJkIGFscyBlZW4gJUl0LCBtYWFyIGxpamt0IGZlaXRlbGlqayBlZW4gbWFwIHRlIHppam4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBleHRlbnQgdHJlZSBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIEB4IHRyZWUgaW4gQGkgJWk6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyBkb29ybGV6ZW4gdmFuICdleHRlbnRzJy1ib29tIGluIGlub2RlICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIGlub2RlICVpXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4OAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIEBpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCittc2dzdHIgIiIKKyJMYW5nc2xvcGVuIHZhbiAnZXh0ZW50cycgaW4gaW5vZGUgJWkgaXMgbWlzbHVrdFxuIgorIiAgICAob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBpbnZhbGlkIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk0Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBAbiBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiSW5vZGUgJWkgaGVlZnQgZWVuIG9uZ2VsZGlnZSAnZXh0ZW50J1xuIgorIiAgKGxvZ2lzY2ggYmxvayAlYywgb25nZWxkaWcgZnlzaWVrIGJsb2sgJWIsIGxlbmd0ZSAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBpbnZhbGlkIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTkKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBAbiBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJJbm9kZSAlaSBoZWVmdCBlZW4gb25nZWxkaWdlICdleHRlbnQnXG4iCisiICAobG9naXNjaCBibG9rICVjLCBmeXNpZWsgYmxvayAlYiwgb25nZWxkaWdlIGxlbmd0ZSAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKyJJbm9kZSAlaSBoZWVmdCBkZSAnRVhURU5UU19GTCctdmxhZyBnZXpldCBvcCBlZW4gYmVzdGFuZHNzeXN0ZWVtIHpvbmRlciAiCisiJ2h0cmVlJy1vbmRlcnN0ZXVuaW5nLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgc3VwZXJibG9jayBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgQFMgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbiIKK21zZ3N0ciAiIgorIklub2RlICVpIGhlZWZ0IGV4dGVudC1vcG1hYWssIG1hYXIgc3VwZXJibG9rIGhlZWZ0IEVYVEVOVFMtZnVuY3RpZXZsYWcgbmlldCAiCisiZ2V6ZXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuIgorbXNnc3RyICIiCisiSW5vZGUgJWkgaGVlZnQgJ2V4dGVudCctb3BtYWFrLCBtYWFyIGhlZWZ0ICdFWFRFTlRfRkwnLXZsYWcgbmlldCBnZXpldC5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdCBzeW1saW5rICVpIGhhcyBFWFRFTlRfRkwgc2V0LiAgIgorbXNnc3RyICJTbmVsbGUgc3ltYm9saXNjaGUga29wcGVsaW5nICVpIGhlZWZ0ICdFWFRFTlRfRkwnLXZsYWcgZ2V6ZXQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI0Cittc2dpZCAiIgorIkBpICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJJbm9kZSAlaSBoZWVmdCAnZXh0ZW50cycgZGllIG5pZXQgb3Agdm9sZ29yZGUgbGlnZ2VuXG4iCisiICAob25nZWxkaWcgbG9naXNjaCBibG9rICVjLCBmeXNpZWsgYmxvayAlYiwgbGVuZ3RlICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyOAorbXNnaWQgIkBpICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4iCittc2dzdHIgIklub2RlICVpIGhlZWZ0IGVlbiBvbmdlbGRpZ2UgJ2V4dGVudCcta25vb3AgKGJsayAlYiwgbGJsayAlYylcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIEBiIEBCOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgY29udmVydGVyZW4gdmFuIHN1YmNsdXN0ZXJibG9ra2VuLWJpdGthYXJ0OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzOAorbXNnaWQgIkBxIEBpIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIlF1b3RhLWlub2RlIGlzIGdlZW4gbm9ybWFhbCBiZXN0YW5kLiAgIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDMKK21zZ2lkICJAcSBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiUXVvdGEtaW5vZGUgaXMgbmlldCBpbiBnZWJydWlrLCBtYWFyIGJldmF0IGdlZ2V2ZW5zLiAgIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0OAorbXNnaWQgIkBxIEBpIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAiCittc2dzdHIgIlF1b3RhLWlub2RlIGlzIHppY2h0YmFhciB2b29yIGRlIGdlYnJ1aWtlci4gICIKKworIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBsb29rcyBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1MworbXNnaWQgIlRoZSBiYWQgQGIgQGkgbG9va3MgQG4uICAiCittc2dzdHIgIkRlIHNsZWNodGVibG9ra2VuLWlub2RlIGxpamt0IG9uZ2VsZGlnLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTU4Cittc2dpZCAiIgorIkBpICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYilcbiIKK21zZ3N0ciAiIgorIklub2RlICVpIGhlZWZ0IGVlbiAnZXh0ZW50JyBtZXQgbGVuZ3RlIG51bFxuIgorIiAgKG9uZ2VsZGlnIGxvZ2lzY2ggYmxvayAlYywgZnlzaWVrIGJsb2sgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEludGVyaW9yIGV4dGVudCBub2RlIGxldmVsICVOIG9mIGlub2RlICVpOlxuCisjLiBALWV4cGFuZGVkOiBMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NjUKK21zZ2lkICIiCisiSW50ZXJpb3IgQHggbm9kZSBsZXZlbCAlTiBvZiBAaSAlaTpcbiIKKyJMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gICIKK21zZ3N0ciAiIgorIklud2VuZGlnICdleHRlbnQnLWtub29wbml2ZWF1ICVOIHZhbiBpbm9kZSAlaTpcbiIKKyJMb2dpc2NoIGJlZ2luICViIGtvbXQgbmlldCBvdmVyZWVuIG1ldCBsb2dpc2NoIGJlZ2luICVjIG9wIHZvbGdlbmRlIG5pdmVhdS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTcxCittc2dpZCAiIgorIkBpICVpLCBlbmQgb2YgZXh0ZW50IGV4Y2VlZHMgYWxsb3dlZCB2YWx1ZVxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJJbm9kZSAlaTogZWluZGUgdmFuICdleHRlbnQnIG92ZXJzY2hyaWpkdCB0b2VnZXN0YW5lIHdhYXJkZVxuIgorIiAgKGxvZ2lzY2ggYmxvayAlYywgZnlzaWVrIGJsb2sgJWIsIGxlbmd0ZSAlTilcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGJsb2NrICViIHNob3VsZCBiZSBhdCBibG9jayAlYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzcKK21zZ2lkICJAZCBAaSAlaSBAYiAlYiBzaG91bGQgYmUgYXQgQGIgJWMuICAiCittc2dzdHIgIkluIG1hcC1pbm9kZSAlaSB6b3UgYmxvayAlYiBibG9rICVjIG1vZXRlbiB6aWpuLiAgIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGV4dGVudCBtYXJrZWQgdW5pbml0aWFsaXplZCBhdCBibG9jayAlYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGQgQGkgJWkgaGFzIEB4IG1hcmtlZCB1bmluaXRpYWxpemVkIGF0IEBiICVjLiAgIgorbXNnc3RyICJNYXAtaW5vZGUgJWkgYmV2YXQgZWVuIG9uZ2XDr25pdGlhbGlzZWVyZGUgZXh0ZW50IGluIGJsb2sgJWMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGxvZ2ljYWwgYmxvY2sgJWIgKHBoeXNpY2FsIGJsb2NrICVjKSB2aW9sYXRlcyBjbHVzdGVyIGFsbG9jYXRpb24gcnVsZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFdpbGwgZml4IGluIHBhc3MgMUIuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTg3Cittc2dpZCAiIgorIkBpICVpIGxvZ2ljYWwgQGIgJWIgKHBoeXNpY2FsIEBiICVjKSB2aW9sYXRlcyBjbHVzdGVyIGFsbG9jYXRpb24gcnVsZXMuXG4iCisiV2lsbCBmaXggaW4gcGFzcyAxQi5cbiIKK21zZ3N0ciAiIgorIkxvZ2lzY2ggYmxvayAlYiAoZnlzaWVrIGJsb2sgJWMpIGluIGlub2RlICVpIHNjaGVuZHQgIgorImNsdXN0ZXJyZXNlcnZlcmluZ3NyZWdlbHMuXG4iCisiWmFsIHdvcmRlbiBnZXJlcGFyZWVyZCBpbiBzdGFwIDFCLlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIGJsb2NrcyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgaW5vZGUuLi5cbgorIy4gQC1leHBhbmRlZDogUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5OTQKK21zZ2lkICIiCisiXG4iCisiUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIEBicyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgQGkuLi5cbiIKKyJQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBAbSBAYnNcbiIKK21zZ3N0ciAiIgorIlxuIgorIkVyIHppam4gZXh0cmEgc3RhcHBlbiBub2RpZyB2b29yIGhldCBvbnR3YXJyZW4gdmFuIGJsb2trZW4gZGllIGRvb3JcbiIKKyJtZWVyIGRhbiDDqcOpbiBpbm9kZSBnZWNsYWltZCB3b3JkZW4uXG4iCisiU3RhcCAxQjogT3BuaWV1dyB6b2VrZW4gbmFhciBtZWVydm91ZGlnLWdlY2xhaW1kZSBibG9ra2VuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgJWk6CisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG0gQGIocykgaW4gQGkgJWk6IgorbXNnc3RyICJNZWVydm91ZGlnLWdlY2xhaW1kIGJsb2sgKG9mIGJsb2trZW4pIGluIGlub2RlICVpOiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgc2Nhbm5lbiB2YW4gaW5vZGVzICglaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwIChpbm9kZV9kdXBfbWFwKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBpIEBCIChAaV9kdXBfbWFwKTogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIHJlc2VydmVyZW4gdmFuIHZlcnZhbmdlbmRlIGlub2RlLWJpdGthYXJ0OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgbGFuZ3Nsb3BlbiB2YW4gYmxva2tlbiB2YW4gaW5vZGUgJWkgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDMwIGUyZnNjay9wcm9ibGVtLmM6MTM0NQorbXNnaWQgIkVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgQGEgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiIgorIkZvdXQgdGlqZGVucyBiaWpzdGVsbGVuIHZhbiB2ZXJ3aWp6aW5nc3RhbCB2YW4gYmxvayAlYiBtZXQgdWl0Z2VicmVpZGUgIgorImtlbm1lcmtlbiAoaW5vZGUgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDM1Cittc2dpZCAiUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIEBpcyB3aXRoIEBtIEBic1xuIgorbXNnc3RyICIiCisiU3RhcCAxQzogRG9vcnpvZWtlbiB2YW4gbWFwcGVuIG5hYXIgaW5vZGVzIG1ldCBtZWVydm91ZGlnLWdlY2xhaW1kZSBibG9ra2VuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0MQorbXNnaWQgIlBhc3MgMUQ6IFJlY29uY2lsaW5nIEBtIEBic1xuIgorbXNnc3RyICJTdGFwIDFEOiBWZXJ6b2VuZW4gdmFuIG1lZXJ2b3VkaWctZ2VjbGFpbWRlIGJsb2trZW5cbiIKKworIy4gQC1leHBhbmRlZDogRmlsZSAlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pIFxuCisjLiBALWV4cGFuZGVkOiAgIGhhcyAlciBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDYKK21zZ2lkICIiCisiRmlsZSAlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pIFxuIgorIiAgaGFzICVyIEBtIEBiKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuIgorbXNnc3RyICIiCisiQmVzdGFuZCAlUSAoaW5vZGUgJWksIHdpanppZ2luZ3N0aWpkICVJTSlcbiIKKyIgICAgYmV2YXQgJXIgbWVlcnZvdWRpZy1nZWNsYWltZChlKSBibG9rKGtlbiksIGdlZGVlbGQgbWV0ICVOIGJlc3RhbmQoZW4pOlxuIgorCisjLiBALWV4cGFuZGVkOiBcdCVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDUyCittc2dpZCAiXHQlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pXG4iCittc2dzdHIgIlx0JVEgKGlub2RlICVpLCB3aWp6aWdpbmdzdGlqZCAlSU0pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1NworbXNnaWQgIlx0PEBmIG1ldGFkYXRhPlxuIgorbXNnc3RyICJcdDxtZXRhZ2VnZXZlbnMgdmFuIGJlc3RhbmRzc3lzdGVlbT5cbiIKKworIy4gQC1leHBhbmRlZDogKFRoZXJlIGFyZSAlTiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjIKK21zZ2lkICIiCisiKFRoZXJlIGFyZSAlTiBAaXMgY29udGFpbmluZyBAbSBAYnMuKVxuIgorIlxuIgorbXNnc3RyICIiCisiKEVyIHppam4gJU4gaW5vZGVzIG1ldCBtZWVydm91ZGlnLWdlY2xhaW1kZSBibG9ra2VuLilcbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA2NworbXNnaWQgIiIKKyJAbSBAYnMgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk1lZXJ2b3VkaWctZ2VjbGFpbWRlIGJsb2trZW4gemlqbiBhbCBnZWtsb29uZCBvZiBvcG5pZXV3IHRvZWdla2VuZC5cbiIKKyJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNsb25lIGZpbGU6ICVtXG4iCittc2dzdHIgIkthbiBiZXN0YW5kIG5pZXQga2xvbmVuOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDg2Cittc2dpZCAiUGFzcyAyOiBDaGVja2luZyBAZCBzdHJ1Y3R1cmVcbiIKK21zZ3N0ciAiU3RhcCAyOiBDb250cm9sZSB2YW4gbWFwcGVuc3RydWN0dXVyXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgaW5vZGUgbnVtYmVyIGZvciAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG4gQGkgbnVtYmVyIGZvciAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIk9uZ2VsZGlnIGlub2RlbnVtbWVyIHZvb3IgJy4nIGluIG1hcC1pbm9kZSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaW52YWxpZCBpbm9kZSAjOiAlRGkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5NgorbXNnaWQgIkBFIGhhcyBAbiBAaSAjOiAlRGkuXG4iCittc2dzdHIgIkBFIGhlZWZ0IGVlbiBvbmdlbGRpZyBpbm9kZW51bW1lcjogJURpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSAlRGkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwMQorbXNnaWQgIkBFIGhhcyBARC91bnVzZWQgQGkgJURpLiAgIgorbXNnc3RyICJARSBiZXZhdCBlZW4gdmVyd2lqZGVyZGUgb2Ygb25nZWJydWlrdGUgaW5vZGUgJURpLiAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA2Cittc2dpZCAiQEUgQEwgdG8gJy4nICAiCittc2dzdHIgIkBFIGlzIGVlbiBrb3BwZWxpbmcgbmFhciAnLicgICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBwb2ludHMgdG8gaW5vZGUgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTExCittc2dpZCAiQEUgcG9pbnRzIHRvIEBpICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgQGIuXG4iCittc2dzdHIgIkBFIHZlcndpanN0IG5hYXIgZWVuIGlub2RlICglRGkpIGluIGVlbiBzbGVjaHQgYmxvay5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gZGlyZWN0b3J5ICVQICglRGkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTYKK21zZ2lkICJARSBATCB0byBAZCAlUCAoJURpKS5cbiIKK21zZ3N0ciAiQEUgaXMgZWVuIGtvcHBlbGluZyBuYWFyIG1hcCAlUCAoJURpKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gdGhlIHJvb3QgaW5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEyMQorbXNnaWQgIkBFIEBMIHRvIHRoZSBAci5cbiIKK21zZ3N0ciAiQEUgaXMgZWVuIGtvcHBlbGluZyBuYWFyIGRlIGhvb2ZkLWlub2RlLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEyNgorbXNnaWQgIkBFIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4iCittc2dzdHIgIkBFIGJldmF0IG9uZ2VsZGlnZSB0ZWtlbnMgaW4gZGUgbmFhbS5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIk9udGJyZWtlbmRlICcuJyBpbiBtYXAtaW5vZGUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4uJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIk9udGJyZWtlbmRlICcuLicgaW4gbWFwLWlub2RlICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBGaXJzdCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKSBzaG91bGQgYmUgJy4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0MQorbXNnaWQgIkZpcnN0IEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpICglcCkgQHMgJy4nXG4iCittc2dzdHIgIkVlcnN0ZSBpdGVtICclRG4nIChpbm9kZT0lRGkpIGluIG1hcC1pbm9kZSAlaSAoJXApIG1vZXQgJy4nIHppam4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNlY29uZCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgc2hvdWxkIGJlICcuLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQ2Cittc2dpZCAiU2Vjb25kIEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpIEBzICcuLidcbiIKK21zZ3N0ciAiVHdlZWRlIGl0ZW0gJyVEbicgKGlub2RlPSVEaSkgaW4gbWFwLWlub2RlICVpIG1vZXQgJy4uJyB6aWpuLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZhZGRyIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJRiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1MQorbXNnaWQgImlfZmFkZHIgQEYgJUlGLCBAcyB6ZXJvLlxuIgorbXNnc3RyICInaV9mYWRkcicgQEYgaXMgJUlGLCBtb2V0IG51bCB6aWpuLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1NgorbXNnaWQgImlfZmlsZV9hY2wgQEYgJUlmLCBAcyB6ZXJvLlxuIgorbXNnc3RyICInaV9maWxlX2FjbCcgQEYgaXMgJUlmLCBtb2V0IG51bCB6aWpuLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Rpcl9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlkLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYxCittc2dpZCAiaV9kaXJfYWNsIEBGICVJZCwgQHMgemVyby5cbiIKK21zZ3N0ciAiJ2lfZGlyX2FjbCcgQEYgaXMgJUlkLCBtb2V0IG51bCB6aWpuLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZyYWcgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjYKK21zZ2lkICJpX2ZyYWcgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIidpX2ZyYWcnIEBGIGlzICVOLCBtb2V0IG51bCB6aWpuLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZzaXplIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTcxCittc2dpZCAiaV9mc2l6ZSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiJ2lfZnNpemUnIEBGIGlzICVOLCBtb2V0IG51bCB6aWpuLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGhhcyBpbnZhbGlkIG1vZGUgKCVJbSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE3NgorbXNnaWQgIkBpICVpICglUSkgaGFzIEBuIG1vZGUgKCVJbSkuXG4iCittc2dzdHIgIklub2RlICVpICglUSkgaGVlZnQgZWVuIG9uZ2VsZGlnZSBtb2R1cyAoJUltKS5cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBkaXJlY3RvcnkgY29ycnVwdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4MQorbXNnaWQgIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBAZCBjb3JydXB0ZWRcbiIKK21zZ3N0ciAiTWFwLWlub2RlICVpLCAlQiwgcG9zaXRpZSAlTjogbWFwIGlzIGJlc2NoYWRpZ2RcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODYKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAiTWFwLWlub2RlICVpLCAlQiwgcG9zaXRpZSAlTjogYmVzdGFuZHNuYWFtIGlzIHRlIGxhbmdcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiB1bmFsbG9jYXRlZCAlQi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTkxCittc2dpZCAiQGQgQGkgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgIgorbXNnc3RyICJNYXAtaW5vZGUgJWkgYmV2YXQgZWVuIG9uZ2VyZXNlcnZlZXJkICVCLiAgIgorCisjLiBALWV4cGFuZGVkOiAnLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5NgorIywgYy1mb3JtYXQKK21zZ2lkICInLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICJJdGVtICcuJyBpbiBtYXAtaW5vZGUgJWkgZWluZGlndCBuaWV0IG9wIE5VTEwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICInLi4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiSXRlbSAnLi4nIGluIG1hcC1pbm9kZSAlaSBlaW5kaWd0IG5pZXQgb3AgTlVMTC5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGNoYXJhY3RlciBkZXZpY2UuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwNgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgY2hhcmFjdGVyIEB2LlxuIgorbXNnc3RyICJJbm9kZSAlaSAoJVEpIGlzIGVlbiBvbmdlbGRpZyBieXRlLWFwcGFyYWF0LlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgYmxvY2sgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTEKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIEBiIEB2LlxuIgorbXNnc3RyICJJbm9kZSAlaSAoJVEpIGlzIGVlbiBvbmdlbGRpZyBibG9rLWFwcGFyYWF0LlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIxNgorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLicgQGUuXG4iCittc2dzdHIgIkBFIGlzIGVlbiBkdXBsaWNhYXQtJy4nLWl0ZW0uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgZHVwbGljYXRlICcuLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyMQorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLi4nIEBlLlxuIgorbXNnc3RyICJARSBpcyBlZW4gZHVwbGljYWF0LScuLictaXRlbS5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMjI2IGUyZnNjay9wcm9ibGVtLmM6MTUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgZmluZCBkaXJfaW5mbyBmb3IgJWkuXG4iCittc2dzdHIgIioqSW50ZXJuZSBwcm9ncmFtbWFmb3V0Kio6IGthbiAnZGlyX2luZm8nIHZvb3IgJWkgbmlldCB2aW5kZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIHJlY19sZW4gb2YgJURyLCBzaG91bGQgYmUgJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzMQorbXNnaWQgIkBFIGhhcyByZWNfbGVuIG9mICVEciwgQHMgJU4uXG4iCittc2dzdHIgIkBFIGhlZWZ0IGVlbiAncmVjX2xlbicgdmFuICVEciwgem91ICVOIG1vZXRlbiB6aWpuLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgc3RydWN0dXJlOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgcmVzZXJ2ZXJlbiB2YW4gJ2ljb3VudCctc3RydWN0dXVyOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcnkgYmxvY2tzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaXRlcmF0aW5nIG92ZXIgQGQgQGJzOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgbGFuZ3Nsb3BlbiB2YW4gbWFwYmxva2tlbjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQ2Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgbGV6ZW4gdmFuIG1hcGJsb2sgJWIgKGlub2RlICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjUxCittc2dpZCAiRXJyb3Igd3JpdGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgc2NocmlqdmVuIHZhbiBtYXBibG9rICViIChpbm9kZSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9jayBmb3IgaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIG5ldyBAZCBAYiBmb3IgQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIHJlc2VydmVyZW4gdmFuIG5pZXV3IG1hcGJsb2sgdm9vciBpbm9kZSAlaSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBkZWFsbG9jYXRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWFsbG9jYXRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyB2cmlqZ2V2ZW4gdmFuIGlub2RlICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBlIGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4iCittc2dzdHIgIk1hcGl0ZW0gdm9vciAnLicgaW4gJXAgKCVpKSBpcyBncm9vdC5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIEZJRk8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3MQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiSW5vZGUgJWkgKCVRKSBpcyBlZW4gb25nZWxkaWdlIEZJRk8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBzb2NrZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3NgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgc29ja2V0LlxuIgorbXNnc3RyICJJbm9kZSAlaSAoJVEpIGlzIGVlbiBvbmdlbGRpZ2Ugc29ja2V0LlxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHRvICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODEKK21zZ2lkICJTZXR0aW5nIGZpbGV0eXBlIGZvciBARSB0byAlTi5cbiIKK21zZ3N0ciAiQmVzdGFuZHN0eXBlIHZhbiBARSB3b3JkdCBvcCAlTiBnZXpldC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBzaG91bGQgYmUgJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODYKK21zZ2lkICJARSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBAcyAlTikuXG4iCittc2dzdHIgIkBFIGhlZWZ0IGVlbiBvbmdlbGRpZyBiZXN0YW5kc3R5cGUgKCVEdCwgem91ICVOIG1vZXRlbiB6aWpuKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZmlsZXR5cGUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTEKK21zZ2lkICJARSBoYXMgZmlsZXR5cGUgc2V0LlxuIgorbXNnc3RyICJARSBoZWVmdCBlZW4gaW5nZXZ1bGQgYmVzdGFuZHN0eXBlLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIHplcm8tbGVuZ3RoIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5NgorbXNnaWQgIkBFIGhhcyBhIEB6IG5hbWUuXG4iCittc2dzdHIgIkBFIGhlZWZ0IGVlbiBuYWFtIG1ldCBsZW5ndGUgbnVsLlxuIgorCisjLiBALWV4cGFuZGVkOiBTeW1saW5rICVRIChpbm9kZSAjJWkpIGlzIGludmFsaWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMwMQorbXNnaWQgIlN5bWxpbmsgJVEgKEBpICMlaSkgaXMgQG4uXG4iCittc2dzdHIgIlN5bWJvbGlzY2hlIGtvcHBlbGluZyAlUSAoaW5vZGUgJWkpIGlzIG9uZ2VsZGlnLlxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgZm9yIGlub2RlICVpICglUSkgaXMgaW52YWxpZCAoJUlmKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzA2Cittc2dpZCAiQGEgQGIgQEYgQG4gKCVJZikuXG4iCittc2dzdHIgIkJsb2sgdmFuIHVpdGdlYnJlaWRlIGtlbm1lcmtlbiBARiBpcyBvbmdlbGRpZyAoJUlmKS5cbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTEKK21zZ2lkICJAZiBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBAUy5cbiIKK21zZ3N0ciAiIgorIkJlc3RhbmRzc3lzdGVlbSBiZXZhdCBncm90ZSBiZXN0YW5kZW4sIG1hYXIgaGVlZnQgaW4gaGV0IHN1cGVyYmxvayBuaWV0IGRlICIKKyInbGFyZ2UtZmlsZSctdmxhZyBnZXpldC5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxNgorbXNnaWQgIkBwIEBoICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuIgorbXNnc3RyICJQcm9ibGVlbSBpbiAnaHRyZWUnLW1hcC1pbm9kZSAlZDogbmFhciAlQiB3b3JkdCBuaWV0IHZlcndlemVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjEKK21zZ2lkICJAcCBAaCAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuIgorbXNnc3RyICJQcm9ibGVlbSBpbiAnaHRyZWUnLW1hcC1pbm9kZSAlZDogbmFhciAlQiB3b3JkdCB0d2VlIGtlZXIgdmVyd2V6ZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMyNgorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4iCittc2dzdHIgIiIKKyJQcm9ibGVlbSBpbiAnaHRyZWUnLW1hcC1pbm9kZSAlZDogJUIgaGVlZnQgZWVuIG9uZ2VsZGlnZSBtaW5pbXVtIGhhc2guXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzMQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4iCittc2dzdHIgIiIKKyJQcm9ibGVlbSBpbiAnaHRyZWUnLW1hcC1pbm9kZSAlZDogJUIgaGVlZnQgZWVuIG9uZ2VsZGlnZSBtYXhpbXVtIGhhc2guXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzNgorbXNnaWQgIkBuIEBoICVkICglcSkuICAiCittc2dzdHIgIk9uZ2VsZGlnZSAnaHRyZWUnLW1hcC1pbm9kZSAlZCAoJXEpLiAgIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpOiBiYWQgYmxvY2sgbnVtYmVyICViLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNDAKK21zZ2lkICJAcCBAaCAlZCAoJXEpOiBiYWQgQGIgbnVtYmVyICViLlxuIgorbXNnc3RyICJQcm9ibGVlbSBpbiAnaHRyZWUnLW1hcC1pbm9kZSAlZCAoJXEpOiBvbmdlbGRpZyBibG9rbnVtbWVyICViLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogcm9vdCBub2RlIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBwIEBoICVkOiByb290IG5vZGUgaXMgQG5cbiIKK21zZ3N0ciAiUHJvYmxlZW0gaW4gJ2h0cmVlJy1tYXAtaW5vZGUgJWQ6IGRlIHdvcnRlbGtub29wIGlzIG9uZ2VsZGlnLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgbGltaXQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTUKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGxpbWl0ICglTilcbiIKK21zZ3N0ciAiIgorIlByb2JsZWVtIGluICdodHJlZSctbWFwLWlub2RlICVkOiAlQiBoZWVmdCBlZW4gb25nZWxkaWdlIGxpbWlldCAoJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgY291bnQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjAKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGNvdW50ICglTilcbiIKK21zZ3N0ciAiUHJvYmxlZW0gaW4gJ2h0cmVlJy1tYXAtaW5vZGUgJWQ6ICVCIGhlZWZ0IGVlbiBvbmdlbGRpZyBhYW50YWwgKCVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjUKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4iCittc2dzdHIgIiIKKyJQcm9ibGVlbSBpbiAnaHRyZWUnLW1hcC1pbm9kZSAlZDogJUIgaGVlZnQgZWVuIG9uZ2VvcmRlbmRlIGhhc2gtdGFiZWwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBkZXB0aCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICIiCisiUHJvYmxlZW0gaW4gJ2h0cmVlJy1tYXAtaW5vZGUgJWQ6ICVCIGhlZWZ0IGVlbiBvbmdlbGRpZ2UgZGllcHRlICglTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzUKK21zZ2lkICJEdXBsaWNhdGUgQEUgZm91bmQuICAiCittc2dzdHIgIkR1YmJlbCBpdGVtICclRG4nIGluICVwICglaSkgZ2V2b25kZW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbgorIy4gQC1leHBhbmRlZDogUmVuYW1lIHRvICVzCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODAKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiIgorIkBFIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4iCisiUmVuYW1lIHRvICVzIgorbXNnc3RyICIiCisiQEUgaGVlZnQgZWVuIG5pZXQtdW5pZWtlIGJlc3RhbmRzbmFhbS5cbiIKKyJIZXJub2VtZW4gdG90ICVzIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgZm91bmQuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODUKK21zZ2lkICIiCisiRHVwbGljYXRlIEBlICclRG4nIGZvdW5kLlxuIgorIlx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJEdWJiZWwgaXRlbSAnJURuJyBnZXZvbmRlbi5cbiIKKyIgICAgTWFwICVwICglaSkgd29yZHQgZ2VtYXJrZWVyZCBvbSBvcG5pZXV3IHRlIHdvcmRlbiBvcGdlYm91d2QuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfYmxvY2tzX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzkwCittc2dpZCAiaV9ibG9ja3NfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIidpX2Jsb2Nrc19oaScgQEYgaXMgJU4sIG1vZXQgbnVsIHppam4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFVuZXhwZWN0ZWQgYmxvY2sgaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5NQorbXNnaWQgIlVuZXhwZWN0ZWQgQGIgaW4gQGggJWQgKCVxKS5cbiIKK21zZ3N0ciAiT252ZXJ3YWNodCBibG9rIGluICdodHJlZSctbWFwLWlub2RlICVkICglcSlcbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBpbiBncm91cCAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk5Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgaW4gQGcgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4iCittc2dzdHIgIiIKKyJARSB2ZXJ3aWpzdCBuYWFyIGlub2RlICVEaSBpbiBncm9lcCAlZyBkaWUgZ2VtYXJrZWVyZCBpcyBhbHMgX0lOT0RFX1VOSU5JVC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBmb3VuZCBpbiBncm91cCAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDA0Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgZm91bmQgaW4gQGcgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4iCittc2dzdHIgIiIKKyJARSB2ZXJ3aWpzdCBuYWFyIGlub2RlICVEaSBpbiBoZXQgZ2ViaWVkIG1ldCBvbmdlYnJ1aWt0ZSBpbm9kZXMgdmFuIGdyb2VwICIKKyIlZy5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbF9oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwOQorbXNnaWQgImlfZmlsZV9hY2xfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIidpX2ZpbGVfYWNsJyBARiBpcyAlTiwgbW9ldCBudWwgemlqbi5cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxNgorbXNnaWQgIlBhc3MgMzogQ2hlY2tpbmcgQGQgY29ubmVjdGl2aXR5XG4iCittc2dzdHIgIlN0YXAgMzogQ29udHJvbGUgdmFuIHZlcmJpbmRpbmdlbiB0dXNzZW4gbWFwcGVuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgbm90IGFsbG9jYXRlZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDIxCittc2dpZCAiQHIgbm90IGFsbG9jYXRlZC4gICIKK21zZ3N0ciAiSG9vZmQtaW5vZGUgaXMgbmlldCBnZXJlc2VydmVlcmQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IE5vIHJvb20gaW4gbG9zdCtmb3VuZCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyNgorbXNnaWQgIk5vIHJvb20gaW4gQGwgQGQuICAiCittc2dzdHIgIkdlZW4gcnVpbXRlIG1lZXIgaW4gL2xvc3QrZm91bmQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIk9udmVyYm9uZGVuIG1hcC1pbm9kZSAlaSAoJXApXG4iCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIG5vdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDM2Cittc2dpZCAiL0BsIG5vdCBmb3VuZC4gICIKK21zZ3N0ciAiL2xvc3QrZm91bmQgbmlldCBnZXZvbmRlbi4gICIKKworIy4gQC1leHBhbmRlZDogJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIHNob3VsZCBiZSAlcSAoJWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDEKK21zZ2lkICInLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKK21zZ3N0ciAiJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIG1vZXQgJXEgKCVkKSB6aWpuLlxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgb3Igbm9uLWV4aXN0ZW50IC9sb3N0K2ZvdW5kLiAgQ2Fubm90IHJlY29ubmVjdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQ2Cittc2dpZCAiQmFkIG9yIG5vbi1leGlzdGVudCAvQGwuICBDYW5ub3QgcmVjb25uZWN0LlxuIgorbXNnc3RyICIiCisiQmVzY2hhZGlnZGUgb2YgbmlldC1iZXN0YWFuZGUgL2xvc3QrZm91bmQuICBLYW4gaW5vZGUgbmlldCBoZXJ2ZXJiaW5kZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkIG5vdCBleHBhbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZXhwYW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiS2FuIC9sb3N0K2ZvdW5kIG5pZXQgdWl0YnJlaWRlbjogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWNvbm5lY3QgJWk6ICVtXG4iCittc2dzdHIgIkthbiBpbm9kZSAlaSBuaWV0IGhlcnZlcmJpbmRlbjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvQGw6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyB6b2VrZW4gdmFuIC9sb3N0K2ZvdW5kOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Jsb2NrOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AYjogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19ibG9jaygpOiAlbSB0aWpkZW5zIG1ha2VuIHZhbiAvbG9zdCtmb3VuZFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2lub2RlOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AaTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19pbm9kZSgpOiAlbSB0aWpkZW5zIG1ha2VuIHZhbiAvbG9zdCtmb3VuZFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Rpcl9ibG9jazogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19kaXJfQGI6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBAZCBAYlxuIgorbXNnc3RyICJleHQyZnNfbmV3X2Rpcl9ibG9jaygpOiAlbSB0aWpkZW5zIG1ha2VuIHZhbiBuaWV1dyBtYXBibG9rXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc193cml0ZV9kaXJfYmxvY2s6ICVtIHdoaWxlIHdyaXRpbmcgdGhlIGRpcmVjdG9yeSBibG9jayBmb3IgL2xvc3QrZm91bmRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc193cml0ZV9kaXJfQGI6ICVtIHdoaWxlIHdyaXRpbmcgdGhlIEBkIEBiIGZvciAvQGxcbiIKK21zZ3N0ciAiIgorImV4dDJmc193cml0ZV9kaXJfYmxvY2soKTogJW0gdGlqZGVucyBtYWtlbiB2YW4gbWFwYmxvayB2b29yIC9sb3N0K2ZvdW5kXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGFkanVzdGluZyBpbm9kZSBjb3VudCBvbiBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgYWRqdXN0aW5nIEBpIGNvdW50IG9uIEBpICVpXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyBiaWp3ZXJrZW4gdmFuIGlub2RldGFsIHZhbiBpbm9kZSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkthbiBvdWRlcnZlcndpanppbmcgdmFuIGlub2RlICVpIG5pZXQgaGVyc3RlbGxlbjogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgZGlyZWN0b3J5IGVudHJ5XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IEBkIEBlXG4iCisiXG4iCittc2dzdHIgIiIKKyJLYW4gb3VkZXJ2ZXJ3aWp6aW5nIHZhbiBpbm9kZSAlaSBuaWV0IGhlcnN0ZWxsZW46IGthbiBkZSBvdWRlcm1hcCBuaWV0ICIKKyJ2aW5kZW4uXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNyZWF0aW5nIHJvb3QgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyByb290IEBkICglcyk6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyBtYWtlbiB2YW4gaG9vZmRtYXAgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIG1ha2VuIHZhbiAvbG9zdCtmb3VuZC1tYXAgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3Rvcnk7IGFib3J0aW5nLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MTYKK21zZ2lkICJAciBpcyBub3QgYSBAZDsgYWJvcnRpbmcuXG4iCittc2dzdHIgIkRlIGhvb2ZkLWlub2RlIGlzIGdlZW4gbWFwLiAgR2VzdG9wdC5cbiIKKworIy4gQC1leHBhbmRlZDogQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIHJvb3QgaW5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUyMQorbXNnaWQgIkNhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSBAci5cbiIKK21zZ3N0ciAiS2FuIG5pZXQgdmVyZGVyIHpvbmRlciBlZW4gaG9vZmQtaW5vZGUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIGlzIG5vdCBhIGRpcmVjdG9yeSAoaW5vPSVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiL0BsIGlzIG5vdCBhIEBkIChpbm89JWkpXG4iCittc2dzdHIgIi9sb3N0K2ZvdW5kIChpbm9kZSAlaSkgaXMgZ2VlbiBtYXBcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTM4Cittc2dpZCAiUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3Rvcmllc1xuIgorbXNnc3RyICJTdGFwIDNBOiBPcHRpbWFsaXNhdGllIHZhbiBtYXBwZW5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZGlyc190b19oYXNoIGl0ZXJhdG9yOiAlbVxuIgorbXNnc3RyICJNYWtlbiB2YW4gJ2RpcnNfdG9faGFzaC1pdGVyYXRvcicgaXMgbWlzbHVrdDogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQ4Cittc2dpZCAiRmFpbGVkIHRvIG9wdGltaXplIGRpcmVjdG9yeSAlcSAoJWQpOiAlbVxuIgorbXNnc3RyICJPcHRpbWFsaXNlcmVuIHZhbiBtYXAgJXEgKCVkKSBpcyBtaXNsdWt0OiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NTMKK21zZ2lkICJPcHRpbWl6aW5nIGRpcmVjdG9yaWVzOiAiCittc2dzdHIgIk9wdGltYWxpc2VyZW4gdmFuIG1hcHBlbjogIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzAKK21zZ2lkICJQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHNcbiIKK21zZ3N0ciAiU3RhcCA0OiBDb250cm9sZSB2YW4gdmVyd2lqemluZ3NhYW50YWxsZW5cbiIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCB6ZXJvLWxlbmd0aCBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEB6IEBpICVpLiAgIgorbXNnc3RyICJPbnZlcmJvbmRlbiBpbm9kZSAlaSBtZXQgbGVuZ3RlIG51bC4gICIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQGkgJWlcbiIKK21zZ3N0ciAiT252ZXJib25kZW4gaW5vZGUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg1Cittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgIlZlcndpanppbmdzYWFudGFsIHZhbiBpbm9kZSAlaSBpcyAlSWwsIHpvdSAlTiBtb2V0ZW4gemlqbi4gICIKKworIy4gQC1leHBhbmRlZDogV0FSTklORzogUFJPR1JBTU1JTkcgQlVHIElOIEUyRlNDSyFcbgorIy4gQC1leHBhbmRlZDogXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbgorIy4gQC1leHBhbmRlZDogaW5vZGVfbGlua19pbmZvWyVpXSBpcyAlTiwgaW5vZGUuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IHNob3VsZCBiZSB0aGUgc2FtZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg5Cittc2dpZCAiIgorIldBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4iCisiXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbiIKKyJAaV9saW5rX2luZm9bJWldIGlzICVOLCBAaS5pX2xpbmtzX2NvdW50IGlzICVJbC4gIFRoZXkgQHMgdGhlIHNhbWUhXG4iCittc2dzdHIgIiIKKyJXQUFSU0NIVVdJTkc6IHByb2dyYW1tYWZvdXQgaW4gZTJmc2NrIVxuIgorIiAgICAqb2YqIFUgQkVOVCBFRU4gQUFOR0VLT1BQRUxEIEJFU1RBTkRTU1lTVEVFTSBBQU4gSEVUIENPTlRST0xFUkVOIVxuIgorIlxuIgorImlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLlxuIgorIkRlemUgaG9yZW4gaGV0emVsZmRlIHRlIHppam4hXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvblxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1OTkKK21zZ2lkICJQYXNzIDU6IENoZWNraW5nIEBnIHN1bW1hcnkgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiU3RhcCA1OiBDb250cm9sZSB2YW4gZ3JvZXBzc2FtZW52YXR0aW5nZW5cbiIKKworIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgaW5vZGUgYml0bWFwIGlzIG5vdCBzZXQuIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjA0Cittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGkgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICJPcHZ1bGxpbmcgYWFuIGhldCBlaW5kIHZhbiBpbm9kZS1iaXRrYWFydCBpcyBuaWV0IGdlemV0LiAiCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGJsb2NrIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwOQorbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBiIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiT3B2dWxsaW5nIGFhbiBoZXQgZWluZCB2YW4gYmxvay1iaXRrYWFydCBpcyBuaWV0IGdlemV0LiAiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MTQKK21zZ2lkICJAYiBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJCbG9rLWJpdGthYXJ0LXZlcnNjaGlsbGVuOiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MzQKK21zZ2lkICJAaSBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJJbm9kZS1iaXRrYWFydC12ZXJzY2hpbGxlbjogIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1NAorbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiVmVya2VlcmQgYWFudGFsIHZyaWplIGlub2RlcyB2b29yIGdyb2VwICMlZyAoJWksIGdldGVsZD0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IERpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjU5Cittc2dpZCAiRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICJWZXJrZWVyZCBhYW50YWwgbWFwcGVuIHZvb3IgZ3JvZXAgIyVnICglaSwgZ2V0ZWxkPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjY0Cittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiVmVya2VlcmQgYWFudGFsIGlub2RlcyAoJWksIGdldGVsZD0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjY5Cittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJWZXJrZWVyZCBhYW50YWwgYmxva2tlbiB2b29yIGdyb2VwICMlZyAoJWIsIGdldGVsZD0lYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY3NAorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIlZlcmtlZXJkIGFhbnRhbCBibG9ra2VuICglYiwgZ2V0ZWxkPSVjKS5cbiIKKworIy4gQC1leHBhbmRlZDogUFJPR1JBTU1JTkcgRVJST1I6IGZpbGVzeXN0ZW0gKCMlTikgYml0bWFwIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIGJpdG1hcCAKKyMuIEAtZXhwYW5kZWQ6IGVuZHBvaW50cyAoJWksICVqKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NzkKK21zZ2lkICIiCisiUFJPR1JBTU1JTkcgRVJST1I6IEBmICgjJU4pIEBCIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIEBCICIKKyJlbmRwb2ludHMgKCVpLCAlailcbiIKK21zZ3N0ciAiIgorIlBST0dSQU1NQUZPVVQgaW4gZTJmc2NrOiBpbiBiZXN0YW5kc3N5c3RlZW0gJU4ga29tZW4gZGUgYml0a2FhcnQtZWluZHB1bnRlbiAiCisiKCViLCAlYykgbmlldCBvdmVyZWVuIG1ldCBkZSBiZXJla2VuZGUgZWluZHB1bnRlbiAoJWksICVqKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2ODUKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogZnVkZ2luZyBlbmQgb2YgYml0bWFwICglTilcbiIKK21zZ3N0ciAiKipJbnRlcm5lIHByb2dyYW1tYWZvdXQqKjogZWluZGUgdmFuIGJpdG1hcCBpcyBnZWZvZXplbGQgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGlub2RlIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGkgQEI6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyBrb3Bpw6tyZW4gbmFhciB2ZXJ2YW5nZW5kZSBpbm9kZS1iaXRrYWFydDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBiIEBCOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMga29wacOrcmVuIG5hYXIgdmVydmFuZ2VuZGUgYmxvay1iaXRrYWFydDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgYmxvY2socykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAYihzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbiIKK21zZ3N0ciAiIgorIkJsb2soa2VuKSB2YW4gZ3JvZXAgJWcgaW4gZ2VicnVpaywgbWFhciBncm9lcCBpcyBnZW1hcmtlZXJkIGFscyAiCisiQkxPQ0tfVU5JTklUXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGlub2RlKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGkocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4iCittc2dzdHIgIiIKKyJJbm9kZShzKSB2YW4gZ3JvZXAgJWcgaW4gZ2VicnVpaywgbWFhciBncm9lcCBpcyBnZW1hcmtlZXJkIGFscyBJTk9ERV9VTklOSVRcbiIKKworIy4gQC1leHBhbmRlZDogUmVjcmVhdGUgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzMyCittc2dpZCAiUmVjcmVhdGUgQGoiCittc2dzdHIgIkpvdXJuYWwgaGVyYWFubWFrZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTczNworbXNnaWQgIlVwZGF0ZSBxdW90YSBpbmZvIGZvciBxdW90YSB0eXBlICVOIgorbXNnc3RyICJRdW90YS1pbmZvcm1hdGllIGJpandlcmtlbiB2b29yIHF1b3RhdHlwZSAlTiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc2V0dGluZyBibG9jayBncm91cCBjaGVja3N1bSBpbmZvOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBAYiBAZyBjaGVja3N1bSBpbmZvOiAlbVxuIgorbXNnc3RyICJGb3V0IGJpaiBpbnN0ZWxsZW4gdmFuIGJsb2tncm9lcGNvbnRyb2xlc29taW5mb3JtYXRpZTogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgZmlsZSBzeXN0ZW0gaW5mbzogJW1cbiIKK21zZ3N0ciAiRm91dCBiaWogc2NocmlqdmVuIHZhbiBiZXN0YW5kc3N5c3RlZW1pbmZvcm1hdGllOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZmx1c2hpbmcgd3JpdGVzIHRvIHN0b3JhZ2UgZGV2aWNlOiAlbVxuIgorbXNnc3RyICJGb3V0IGJpaiB3ZWdzY2hyaWp2ZW4gdmFuIGJ1ZmZlcnMgbmFhciBvcHNsYWdhcHBhcmFhdDogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaGFuZGxlZCBlcnJvciBjb2RlICgweCV4KSFcbiIKK21zZ3N0ciAiT25iZWtlbmRlIGZvdXRjb2RlICgweCV4KSFcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxOTk2IGUyZnNjay9wcm9ibGVtLmM6MjAwMAorbXNnaWQgIklHTk9SRUQiCittc2dzdHIgIkdFTkVHRUVSRCIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVkLCBlbGFwc2VkIHRpbWU6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCittc2dzdHIgIkdlYnJ1aWt0IGdlaGV1Z2VuOiAlZCwgdmVybG9wZW4gdGlqZDogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic2l6ZSBvZiBpbm9kZT0lZFxuIgorbXNnc3RyICJncm9vdHRlIHZhbiBpbm9kZSBpcyAlZFxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMTkKK21zZ2lkICJ3aGlsZSBzdGFydGluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJ0aWpkZW5zIHN0YXJ0IHZhbiBpbm9kZS1zY2FuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMzAKK21zZ2lkICJ3aGlsZSBkb2luZyBpbm9kZSBzY2FuIgorbXNnc3RyICJ0aWpkZW5zIHVpdHZvZXJpbmcgdmFuIGlub2RlLXNjYW4iCisKKyM6IGUyZnNjay9zdXBlci5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19ibG9ja19pdGVyYXRlIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAidGlqZGVucyBhYW5yb2VwIHZhbiBleHQyZnNfYmxvY2tfaXRlcmF0ZSgpIHZvb3IgaW5vZGUgJWQiCisKKyM6IGUyZnNjay9zdXBlci5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAidGlqZGVucyBhYW5yb2VwIHZhbiBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MigpIHZvb3IgaW5vZGUgJWQiCisKKyM6IGUyZnNjay9zdXBlci5jOjI3NAorbXNnaWQgIlRydW5jYXRpbmciCittc2dzdHIgIkFma2FwcGVuIHZhbiIKKworIzogZTJmc2NrL3N1cGVyLmM6Mjc1Cittc2dpZCAiQ2xlYXJpbmciCittc2dzdHIgIldpc3NlbiB2YW4iCisKKyM6IGUyZnNjay91bml4LmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisiR2VicnVpazogICVzIFstY2Rma25wdHZ5REZWXSBbLWIgc3VwZXJibG9rXSBbLUIgYmxva2dyb290dGVdXG4iCisiICAgICAgICAgICAgICAgICBbLUMgYmVzdGFuZHNkZXNjcmlwdG9yXSBbLUUgdWl0Z2VicmVpZGVfb3B0aWVzXVxuIgorIiAgICAgICAgICAgICAgICAgWy1JIGlub2RlYnVmZmVyYmxva2tlbl0gWy1sfC1MIHNsZWNodGVibG9ra2VuYmVzdGFuZF1cbiIKKyIgICAgICAgICAgICAgICAgIFstaiBleHRlcm5fam91cm5hbF0gWy1QIHByb2Nlc2lub2RlLWdyb290dGVdXG4iCisiICAgICAgICAgICAgICAgICBhcHBhcmFhdFxuIgorCisjOiBlMmZzY2svdW5peC5jOjgwCittc2dpZCAiIgorIlxuIgorIkVtZXJnZW5jeSBoZWxwOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgcmVwYWlyIChubyBxdWVzdGlvbnMpXG4iCisiIC1uICAgICAgICAgICAgICAgICAgIE1ha2Ugbm8gY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbVxuIgorIiAteSAgICAgICAgICAgICAgICAgICBBc3N1bWUgXCJ5ZXNcIiB0byBhbGwgcXVlc3Rpb25zXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBiYWQgYmxvY2tzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmFkYmxvY2sgIgorImxpc3RcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBjbGVhblxuIgorbXNnc3RyICIiCisiXG4iCisiTm9vZGh1bHA6XG4iCisiIC1wICAgQXV0b21hdGlzY2hlIHJlcGFyYXRpZSAoem9uZGVyIHZyYWdlbikuXG4iCisiIC1uICAgQmVzdGFuZHNzeXRlZW0gbmlldCB2ZXJhbmRlcmVuOyBvcCBhbGxlIHZyYWdlbiBcIm5lZVwiIGFhbm5lbWVuLlxuIgorIiAteSAgIEFscyBhbnR3b29yZCBvcCBhbGxlIHZyYWdlbiBcImphXCIgYWFubmVtZW4uXG4iCisiIC1jICAgT3Agc2xlY2h0ZSBibG9ra2VuIGNvbnRyb2xlcmVuIGVuIGRlemUgYWFuIGxpanN0IHRvZXZvZWdlbi5cbiIKKyIgLWYgICBFZW4gY29udHJvbGUgYWZkd2luZ2VuLCBvb2sgYWxzIGhldCBiZXN0YW5kc3N5c3RlZW0gc2Nob29uIGlzLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjg2Cittc2dpZCAiIgorIiAtdiAgICAgICAgICAgICAgICAgICBCZSB2ZXJib3NlXG4iCisiIC1iIHN1cGVyYmxvY2sgICAgICAgIFVzZSBhbHRlcm5hdGl2ZSBzdXBlcmJsb2NrXG4iCisiIC1CIGJsb2Nrc2l6ZSAgICAgICAgIEZvcmNlIGJsb2Nrc2l6ZSB3aGVuIGxvb2tpbmcgZm9yIHN1cGVyYmxvY2tcbiIKKyIgLWogZXh0ZXJuYWxfam91cm5hbCAgU2V0IGxvY2F0aW9uIG9mIHRoZSBleHRlcm5hbCBqb3VybmFsXG4iCisiIC1sIGJhZF9ibG9ja3NfZmlsZSAgIEFkZCB0byBiYWRibG9ja3MgbGlzdFxuIgorIiAtTCBiYWRfYmxvY2tzX2ZpbGUgICBTZXQgYmFkYmxvY2tzIGxpc3RcbiIKK21zZ3N0ciAiIgorIiAtdiAgIEdlZGV0YWlsbGVlcmRlIHVpdHZvZXIgcHJvZHVjZXJlbi5cbiIKKyIgLWIgc3VwZXJibG9rICAgICAgICBEaXQgc3VwZXJibG9rIGdlYnJ1aWtlbi5cbiIKKyIgLUIgYmxva2dyb290dGUgICAgICBEZXplIGJsb2tncm9vdHRlIGdlYnJ1aWtlbiBiaWogem9la2VuIG5hYXIgc3VwZXJibG9rLlxuIgorIiAtaiBleHRlcm5fam91cm5hbCAgIERpdCBleHRlcm5lIGpvdXJuYWwgZ2VicnVpa2VuLlxuIgorIiAtbCBzbGVjaHRlYmxva2tlbmJlc3RhbmQgICBEZXplIGxpanN0IGFhbiBkZSBzbGVjaHRlYmxva2tlbmxpanN0ICIKKyJ0b2V2b2VnZW4uXG4iCisiIC1MIHNsZWNodGVibG9ra2VuYmVzdGFuZCAgIERlemUgc2xlY2h0ZWJsb2trZW5saWpzdCBnZWJydWlrZW4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAldS8ldSBmaWxlcyAoJTBkLiVkJSUgbm9uLWNvbnRpZ3VvdXMpLCAlbGx1LyVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiIKKyIlczogJXUvJXUgYmVzdGFuZGVuICglMGQuJWQlJSBuaWV0LWFhbmVlbmdlc2xvdGVuKSwgJWxsdS8lbGx1IGJsb2trZW5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSBpbm9kZXMgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJTEydSBpbm9kZSBnZWJydWlrdCAoJTIuMmYlJSB2YW4gJXUpXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IGlub2RlcyBnZWJydWlrdCAoJTIuMmYlJSB2YW4gJXUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIlMTJ1IG5pZXQtYWFuZWVuZ2VzbG90ZW4gYmVzdGFuZCAoJTBkLiVkJSUpXG4iCittc2dzdHJbMV0gIiUxMnUgbmlldC1hYW5lZW5nZXNsb3RlbiBiZXN0YW5kZW4gKCUwZC4lZCUlKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yeSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3JpZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIlMTJ1IG5pZXQtYWFuZWVuZ2VzbG90ZW4gbWFwICglMGQuJWQlJSlcbiIKK21zZ3N0clsxXSAiJTEydSBuaWV0LWFhbmVlbmdlc2xvdGVuIG1hcHBlbiAoJTBkLiVkJSUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAgICAgICAjIG9mIGlub2RlcyB3aXRoIGluZC9kaW5kL3RpbmQgYmxvY2tzOiAldS8ldS8ldVxuIgorbXNnc3RyICIiCisiICAgICAgICAgICAgIGFhbnRhbCBpbm9kZXMgbWV0IGluZGlyZWN0ZSBibG9ra2VuOiAldSBlbmtlbCwgJXUgZHViYmVsLCAldSAiCisidHJpcGxlXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc5Cittc2dpZCAiICAgICAgICAgICAgIEV4dGVudCBkZXB0aCBoaXN0b2dyYW06ICIKK21zZ3N0ciAiICAgICAgICAgICAgIEV4dGVudHMtZGllcHRlaGlzdG9ncmFtOiAiCisKKyM6IGUyZnNjay91bml4LmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMmxsdSBibG9jayB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEybGx1IGJsb2NrcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ3N0clswXSAiJTEybGx1IGJsb2sgZ2VicnVpa3QgKCUyLjJmJSUgdmFuICVsbHUpXG4iCittc2dzdHJbMV0gIiUxMmxsdSBibG9ra2VuIGdlYnJ1aWt0ICglMi4yZiUlIHZhbiAlbGx1KVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJhZCBibG9ja1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJhZCBibG9ja3NcbiIKK21zZ3N0clswXSAiJTEydSBzbGVjaHQgYmxva1xuIgorbXNnc3RyWzFdICIlMTJ1IHNsZWNodGUgYmxva2tlblxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxhcmdlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsYXJnZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IGdyb290IGJlc3RhbmRcbiIKK21zZ3N0clsxXSAiJTEydSBncm90ZSBiZXN0YW5kZW5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiUxMnUgbm9ybWFhbCBiZXN0YW5kXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IG5vcm1hbGUgYmVzdGFuZGVuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZGlyZWN0b3J5XG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZGlyZWN0b3JpZXNcbiIKK21zZ3N0clswXSAiJTEydSBtYXBcbiIKK21zZ3N0clsxXSAiJTEydSBtYXBwZW5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgYnl0ZS1hcHBhcmFhdFxuIgorbXNnc3RyWzFdICIlMTJ1IGJ5dGUtYXBwYXJhdGVuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBibG9jayBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBibG9rLWFwcGFyYWF0XG4iCittc2dzdHJbMV0gIiUxMnUgYmxvay1hcHBhcmF0ZW5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWZvXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlmb3NcbiIKK21zZ3N0clswXSAiJTEydSBmaWZvXG4iCittc2dzdHJbMV0gIiUxMnUgZmlmbydzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbGlua1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGxpbmtzXG4iCittc2dzdHJbMF0gIiUxMnUga29wcGVsaW5nXG4iCittc2dzdHJbMV0gIiUxMnUga29wcGVsaW5nZW5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzeW1ib2xpYyBsaW5rIgorbXNnaWRfcGx1cmFsICIlMTJ1IHN5bWJvbGljIGxpbmtzIgorbXNnc3RyWzBdICIlMTJ1IHN5bWJvbGlzY2hlIGtvcHBlbGluZyIKK21zZ3N0clsxXSAiJTEydSBzeW1ib2xpc2NoZSBrb3BwZWxpbmdlbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmspXG4iCittc2dpZF9wbHVyYWwgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rcylcbiIKK21zZ3N0clswXSAiICgldSBzbmVsbGUga29wcGVsaW5nKVxuIgorbXNnc3RyWzFdICIgKCV1IHNuZWxsZSBrb3BwZWxpbmdlbilcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzb2NrZXRcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBzb2NrZXRzXG4iCittc2dzdHJbMF0gIiUxMnUgc29ja2V0XG4iCittc2dzdHJbMV0gIiUxMnUgc29ja2V0c1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IGJlc3RhbmRcbiIKK21zZ3N0clsxXSAiJTEydSBiZXN0YW5kZW5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMzIgbWlzYy9iYWRibG9ja3MuYzo5OTMgbWlzYy90dW5lMmZzLmM6MjEyMiBtaXNjL3V0aWwuYzozMTYKKyM6IHJlc2l6ZS9tYWluLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iCittc2dzdHIgInRpamRlbnMgYmVwYWxlbiBvZiAlcyBhYW5nZWtvcHBlbGQgaXMuIgorCisjOiBlMmZzY2svdW5peC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiV2FhcnNjaHV3aW5nISAgJXMgaXMgYWFuZ2Vrb3BwZWxkLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgaW4gdXNlLlxuIgorbXNnc3RyICJXYWFyc2NodXdpbmchICAlcyBpcyBpbiBnZWJydWlrLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICIlcyBpcyBhYW5nZWtvcHBlbGQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGluIHVzZS5cbiIKK21zZ3N0ciAiJXMgaXMgaW4gZ2VicnVpay5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjYKK21zZ2lkICIiCisiQ2Fubm90IGNvbnRpbnVlLCBhYm9ydGluZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkthbiBuaWV0IGRvb3JnYWFuLiAgR2VzdG9wdC5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjgKK21zZ2lkICIiCisiXG4iCisiXG4iCisiV0FSTklORyEhISAgVGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4gICBJZiB5b3UgY29udGludWUgeW91ICoqKldJTEwqKipcbiIKKyJjYXVzZSAqKipTRVZFUkUqKiogZmlsZXN5c3RlbSBkYW1hZ2UuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyIqKldBQVJTQ0hVV0lORyoqISEhICBIZXQgYmVzdGFuZHNzeXN0ZWVtIGlzIGFhbmdla29wcGVsZCFcbiIKKyIgICAgQWxzIHUgZG9vcmdhYXQgKipaQUwqKiBkaXQgdG90ICoqWldBUkUqKiBiZXNjaGFkaWdpbmdlbiBsZWlkZW4uXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjczCittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIGNvbnRpbnVlIgorbXNnc3RyICJXaWx0IHUgZWNodCBkb29yZ2FhbiIKKworIzogZTJmc2NrL3VuaXguYzoyNzUKK21zZ2lkICJjaGVjayBhYm9ydGVkLlxuIgorbXNnc3RyICJEZSBjb250cm9sZSBpcyBhZmdlYnJva2VuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjM2OAorbXNnaWQgIiBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzIgorbXNnc3RyICIgYmV2YXQgZWVuIGJlc3RhbmRzc3lzdGVlbSBtZXQgZm91dGVuIgorCisjOiBlMmZzY2svdW5peC5jOjM3MAorbXNnaWQgIiB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkIgorbXNnc3RyICIgaXMgbmlldCBnb2VkIG9udGtvcHBlbGQiCisKKyM6IGUyZnNjay91bml4LmM6MzcyCittc2dpZCAiIHByaW1hcnkgc3VwZXJibG9jayBmZWF0dXJlcyBkaWZmZXJlbnQgZnJvbSBiYWNrdXAiCittc2dzdHIgIiIKKyIgaGV0IHByaW1haXJlIHN1cGVyYmxvayBoZWVmdCBhbmRlcmUgZnVuY3RpZXZsYWdnZW4gZ2V6ZXQgZGFuIGRlICIKKyJyZXNlcnZlYmxva2tlbiIKKworIzogZTJmc2NrL3VuaXguYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBiZWVuIG1vdW50ZWQgJXUgdGltZXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgaXMgJXUga2VlciBhYW5nZWtvcHBlbGQgZ2V3ZWVzdCB6b25kZXIgY29udHJvbGUiCisKKyM6IGUyZnNjay91bml4LmM6MzgzCittc2dpZCAiIGhhcyBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0aW1lIGluIHRoZSBmdXR1cmUiCittc2dzdHIgIiBpcyBzY2hpam5iYWFyIGhldCBsYWF0c3QgZ2Vjb250cm9sZWVyZCBpbiBkZSB0b2Vrb21zdCIKKworIzogZTJmc2NrL3VuaXguYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBnb25lICV1IGRheXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgaXMgZ2VkdXJlbmRlICV1IGRhZ2VuIG5pZXQgZ2Vjb250cm9sZWVyZCIKKworIzogZTJmc2NrL3VuaXguYzozOTgKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiLCBnZWR3b25nZW4gY29udHJvbGUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiwgJXUvJXUgZmlsZXMsICVsbHUvJWxsdSBibG9ja3MiCittc2dzdHIgIiVzOiBzY2hvb24sICV1LyV1IGJlc3RhbmRlbiwgJWxsdS8lbGx1IGJsb2trZW4iCisKKyM6IGUyZnNjay91bml4LmM6NDUxCittc2dpZCAiIChjaGVjayBkZWZlcnJlZDsgb24gYmF0dGVyeSkiCittc2dzdHIgIiAoY29udHJvbGUgaXMgdWl0Z2VzdGVsZDsgY29tcHV0ZXIgbG9vcHQgb3AgYWNjdSkiCisKKyM6IGUyZnNjay91bml4LmM6NDU0Cittc2dpZCAiIChjaGVjayBhZnRlciBuZXh0IG1vdW50KSIKK21zZ3N0ciAiIChjb250cm9sZSBiaWogdm9sZ2VuZGUgYWFua29wcGVsaW5nKSIKKworIzogZTJmc2NrL3VuaXguYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChjaGVjayBpbiAlbGQgbW91bnRzKSIKK21zZ3N0ciAiIChjb250cm9sZSBuYSAlbGQgYWFua29wcGVsaW5nZW4pIgorCisjOiBlMmZzY2svdW5peC5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogQ291bGRuJ3Qgb3BlbiAvZGV2L251bGwgKCVzKVxuIgorbXNnc3RyICJGT1VUOiBrYW4gL2Rldi9udWxsIG5pZXQgb3BlbmVuICglcylcbiIKKworIzogZTJmc2NrL3VuaXguYzo2NzUKK21zZ2lkICJJbnZhbGlkIEVBIHZlcnNpb24uXG4iCittc2dzdHIgIk9uZ2VsZGlnZSB2ZXJzaWUgdmFuIHVpdGdlYnJlaWRlIGtlbm1lcmtlbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBleHRlbmRlZCBvcHRpb246ICVzXG4iCittc2dzdHIgIk9uYmVrZW5kZSB1aXRnZWJyZWlkZSBvcHRpZTogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBlMmZzY2sgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKyJTeW50YXhmb3V0IGluICdlMmZzY2snLWNvbmZpZ3VyYXRpZWJlc3RhbmQgKCVzLCByZWdlbCAjJWQpXG4iCisiICAgICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6Nzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHZhbGlkYXRpbmcgZmlsZSBkZXNjcmlwdG9yICVkOiAlc1xuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgdmFsaWRlcmVuIHZhbiBiZXN0YW5kc2Rlc3JpcHRvciAlZDogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo4MDEKK21zZ2lkICJJbnZhbGlkIGNvbXBsZXRpb24gaW5mb3JtYXRpb24gZmlsZSBkZXNjcmlwdG9yIgorbXNnc3RyICJPbmdlbGRpZ2UgY29tcGxldGVyaW5nc2luZm9ybWF0aWUgdm9vciBiZXN0YW5kc2Rlc2NyaXB0b3IuIgorCisjOiBlMmZzY2svdW5peC5jOjgxNgorbXNnaWQgIk9ubHkgb25lIG9mIHRoZSBvcHRpb25zIC1wLy1hLCAtbiBvciAteSBtYXkgYmUgc3BlY2lmaWVkLiIKK21zZ3N0ciAiU2xlY2h0cyDDqcOpbiB2YW4gZGUgb3B0aWVzIC1hLCAtcCwgLW4gb2YgLXkgbWFnIHdvcmRlbiBvcGdlZ2V2ZW4uIgorCisjOiBlMmZzY2svdW5peC5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgLXQgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKK21zZ3N0ciAiT3B0aWUgJy10JyB3b3JkdCBuaWV0IG9uZGVyc3RldW5kIGRvb3IgZGV6ZSB2ZXJzaWUgdmFuIGUyZnNjay5cbiIKKworIzogZTJmc2NrL3VuaXguYzo4NjggZTJmc2NrL3VuaXguYzo5NDIgbWlzYy90dW5lMmZzLmM6ODc5IG1pc2MvdHVuZTJmcy5jOjExNzQKKyM6IG1pc2MvdHVuZTJmcy5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiS2FuIGFwcGFyYWF0ICclcycgbmlldCB2aW5kZW4uIgorCisjOiBlMmZzY2svdW5peC5jOjkyMQorbXNnaWQgIlRoZSAtbiBhbmQgLUQgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiT3B0aWVzICctbicgZW4gJy1EJyBnYWFuIG5pZXQgc2FtZW4uIgorCisjOiBlMmZzY2svdW5peC5jOjkyNgorbXNnaWQgIlRoZSAtbiBhbmQgLWMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiT3B0aWVzICctbicgZW4gJy1jJyBnYWFuIG5pZXQgc2FtZW4uIgorCisjOiBlMmZzY2svdW5peC5jOjkzMQorbXNnaWQgIlRoZSAtbiBhbmQgLWwvLUwgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiRGUgb3B0aWVzICctbicgZW4gJy1sJyBvZiAnLUwnIGdhYW4gbmlldCBzYW1lbi4iCisKKyM6IGUyZnNjay91bml4LmM6OTg1Cittc2dpZCAiVGhlIC1jIGFuZCB0aGUgLWwvLUwgb3B0aW9ucyBtYXkgbm90IGJlIGJvdGggdXNlZCBhdCB0aGUgc2FtZSB0aW1lLlxuIgorbXNnc3RyICJEZSBvcHRpZXMgJy1jJyBlbiAnLWwnIG9mICctTCcga3VubmVuIG5pZXQgc2FtZW4gZ2VicnVpa3Qgd29yZGVuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG5vdCBhbiBpbnRlZ2VyXG4iCisiXG4iCittc2dzdHIgIiIKKyJFMkZTQ0tfSkJEX0RFQlVHIC0tIFwiJXNcIiBpcyBnZWVuIGdlaGVlbCBnZXRhbFxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkludmFsaWQgbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gLSVjIChcIiVzXCIpXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPbmdlbGRpZyBuaWV0LW51bWVyaWVrIGFyZ3VtZW50IHZhbiAnLSVjJzogXCIlc1wiXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGludGVydmFsIGlzICV1IHNlY29uZHMgYW5kIHRvdGFsIHdhaXQgdGltZSBpcyAldSBzZWNvbmRzLiBQbGVhc2UgIgorIndhaXQuLi5cbiIKK21zZ3N0ciAiIgorIkhldCBNTVAtaW50ZXJ2YWwgaXMgJXUgc2Vjb25kZW4sIGVuIGRlIHRvdGFsZSB3YWNodHRpamQgaXMgJXUgc2Vjb25kZW4uICAiCisiRXZlbiBnZWR1bGQuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMTQ5IGUyZnNjay91bml4LmM6MTE1NAorbXNnaWQgIndoaWxlIGNoZWNraW5nIE1NUCBibG9jayIKK21zZ3N0ciAidGlqZGVucyBjb250cm9sZXJlbiB2YW4gTU1QLWJsb2siCisKKyM6IGUyZnNjay91bml4LmM6MTE1NiBtaXNjL3R1bmUyZnMuYzoyMDQ5Cittc2dpZCAiIgorIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSBpcyBub3QgaW4gdXNlIG9uIGFueSBub2RlLCBydW46XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V9J1xuIgorbXNnc3RyICIiCisiQWxzIHUgemVrZXIgd2VldCBkYXQgaGV0IGJlc3RhbmRzc3lzdGVlbSBuZXJnZW5zIGdlYnJ1aWt0IHdvcmR0LFxuIgorImdlZWYgZGFuIGRlemUgb3BkcmFjaHQ6ICd0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7YXBwYXJhYXR9J1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMDcKK21zZ2lkICJFcnJvcjogZXh0MmZzIGxpYnJhcnkgdmVyc2lvbiBvdXQgb2YgZGF0ZSFcbiIKK21zZ3N0ciAiRm91dDogZGUgZXh0MmZzLWJpYmxpb3RoZWVrIGlzIHRlIG91ZCFcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjE0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGluaXRpYWxpemUgcHJvZ3JhbSIKK21zZ3N0ciAidGlqZGVucyBwcm9ncmFtbWEtaW5pdGlhbGlzYXRpZSIKKworIzogZTJmc2NrL3VuaXguYzoxMjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXMsICVzXG4iCittc2dzdHIgIiAgICBnZWJydWlrIG1ha2VuZCB2YW4gJXMsICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTI0OQorbXNnaWQgIm5lZWQgdGVybWluYWwgZm9yIGludGVyYWN0aXZlIHJlcGFpcnMiCittc2dzdHIgInZvb3IgaW50ZXJhY3RpZXZlIHJlcGFyYXRpZXMgaXMgZWVuIHRlcm1pbmFsIHZlcmVpc3QiCisKKyM6IGUyZnNjay91bml4LmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi5cbiIKK21zZ3N0ciAiJXM6ICVzIHJlc2VydmVrb3BpZWJsb2trZW4gd29yZGVuIGJla2VrZW4uLi5cbiIKKworIyBHZWJydWlrIHZhbiAnLS0nIGluIGRlemUgZW4gdm9sZ2VuZGUgc3RyaW5nIGlzIG9wemV0dGVsaWprOworIyDDqcOpbiB2YW4gZGV6ZSBzdHJpbmdzIHdvcmR0IGluZ2V2dWxkIHZvb3IgZGUgdHdlZWRlICVzIGhpZXJib3Zlbi4KKyM6IGUyZnNjay91bml4LmM6MTMwNQorbXNnaWQgIlN1cGVyYmxvY2sgaW52YWxpZCwiCittc2dzdHIgIlN1cGVyYmxvayBpcyBvbmdlbGRpZyAtLSIKKworIzogZTJmc2NrL3VuaXguYzoxMzA2Cittc2dpZCAiR3JvdXAgZGVzY3JpcHRvcnMgbG9vayBiYWQuLi4iCittc2dzdHIgIkdyb2Vwc2Jlc2NocmlqdmVycyB6aWVuIGVyIHNsZWNodCB1aXQgLS0iCisKKyM6IGUyZnNjay91bml4LmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgdXNpbmcgdGhlIGJhY2t1cCBibG9ja3MiCittc2dzdHIgIiVzOiAlcyB0aWpkZW5zIGdlYnJ1aWsgdmFuIGRlIHJlc2VydmVrb3BpZWJsb2trZW4iCisKKyM6IGUyZnNjay91bml4LmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZ29pbmcgYmFjayB0byBvcmlnaW5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiVzOiBlciB3b3JkdCB0ZXJ1Z2dldmFsbGVuIG9wIGhldCBlZXJzdGUgc3VwZXJibG9rXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM0OQorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSByZXZpc2lvbiBpcyBhcHBhcmVudGx5IHRvbyBoaWdoIGZvciB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorIihPciB0aGUgZmlsZXN5c3RlbSBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQpXG4iCisiXG4iCittc2dzdHIgIiIKKyJEZSBiZXN0YW5kc3N5c3RlZW12ZXJzaWUgaXMgYmxpamtiYWFyIHRlIG5pZXV3IHZvb3IgZGV6ZSB2ZXJzaWUgdmFuIGUyZnNjay5cbiIKKyIoT2YgaGV0IHN1cGVyYmxvayBpcyBiZXNjaGFkaWdkLilcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzU2Cittc2dpZCAiQ291bGQgdGhpcyBiZSBhIHplcm8tbGVuZ3RoIHBhcnRpdGlvbj9cbiIKK21zZ3N0ciAiSXMgZGl0IG1pc3NjaGllbiBlZW4gcGFydGl0aWUgbWV0IGxlbmd0ZSBudWw/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSBvciBiZSByb290XG4iCittc2dzdHIgIiIKKyJVIGRpZW50ICVzLXRvZWdhbmcgdG90IGhldCBiZXN0YW5kc3N5dGVlbSB0ZSBoZWJiZW4sIG9mIHJvb3QgdGUgemlqbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY0Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICJNb2dlbGlqayBlZW4gbmlldC1iZXN0YWFuZCBhcHBhcmFhdCBvZiBlZW4gc3dhcC1hcHBhcmFhdD9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY2Cittc2dpZCAiRmlsZXN5c3RlbSBtb3VudGVkIG9yIG9wZW5lZCBleGNsdXNpdmVseSBieSBhbm90aGVyIHByb2dyYW0/XG4iCittc2dzdHIgIiIKKyJJcyBiZXN0YW5kc3N5c3RlZW0gZXhjbHVzaWVmIGFhbmdla29wcGVsZCBvZiBnZW9wZW5kIGRvb3IgZWVuIGFuZGVyICIKKyJwcm9ncmFtbWE/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM3MAorbXNnaWQgIlBvc3NpYmx5IG5vbi1leGlzdGVudCBkZXZpY2U/XG4iCittc2dzdHIgIk1vZ2VsaWprIGVlbiBuaWV0LWJlc3RhYW5kIGFwcGFyYWF0P1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNzMKK21zZ2lkICIiCisiRGlzayB3cml0ZS1wcm90ZWN0ZWQ7IHVzZSB0aGUgLW4gb3B0aW9uIHRvIGRvIGEgcmVhZC1vbmx5XG4iCisiY2hlY2sgb2YgdGhlIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIkRlIHNjaGlqZiBpcyBzY2hyaWpmYmV2ZWlsaWdkLiAgR2VicnVpayBkZSBvcHRpZSAnLW4nIG9tIGVlblxuIgorImFsbGVlbi1sZXplbmNvbnRyb2xlIHZhbiBoZXQgYXBwYXJhYXQgdWl0IHRlIHZvZXJlbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDM3Cittc2dpZCAiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIgorbXNnc3RyICJJbnN0YWxsZWVyIGVlbiBuaWV1d2VyZSB2ZXJzaWUgdmFuIGUyZnNjayEiCisKKyM6IGUyZnNjay91bml4LmM6MTQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBleHQzIGpvdXJuYWwgZm9yICVzIgorbXNnc3RyICJ0aWpkZW5zIGNvbnRyb2xlIHZhbiBoZXQgZXh0My1qb3VybmFsIHZhbiAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNDkyCittc2dpZCAiIgorIldhcm5pbmc6IHNraXBwaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYmVjYXVzZSBkb2luZyBhIHJlYWQtb25seSBmaWxlc3lzdGVtICIKKyJjaGVjay5cbiIKK21zZ3N0ciAiIgorIldhYXJzY2h1d2luZzogYWZzcGVsZW4gdmFuIGpvdXJuYWwgd29yZHQgb3Zlcmdlc2xhZ2VuXG4iCisib21kYXQgZWVuIGFsbGVlbi1sZXplbmNvbnRyb2xlIHVpdGdldm9lcmQgd29yZHQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTUwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHN1cGVyYmxvY2sgZmxhZ3Mgb24gJXNcbiIKK21zZ3N0ciAiS2FuIHN1cGVyYmxva3ZsYWdnZW4gdmFuICVzIG5pZXQgemV0dGVuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVjb3ZlcmluZyBleHQzIGpvdXJuYWwgb2YgJXMiCittc2dzdHIgInRpamRlbnMgYWZzcGVsZW4gdmFuIGhldCBleHQzLWpvdXJuYWwgdmFuICVzIgorCisjOiBlMmZzY2svdW5peC5jOjE1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocyk6IgorbXNnc3RyICIiCisiQmVzdGFuZHNzeXN0ZWVtICVzIGhlZWZ0IGZ1bmN0aWVzIGluZ2VzY2hha2VsZCBkaWUgbmlldCBvbmRlcnN0ZXVuZCB3b3JkZW46IgorCisjOiBlMmZzY2svdW5peC5jOjE1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhcm5pbmc6IGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorbXNnc3RyICIlczogV2FhcnNjaHV3aW5nOiBjb21wcmVzc2llLW9uZGVyc3RldW5pbmcgaXMgbm9nIGV4cGVyaW1lbnRlZWwuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IGUyZnNjayBub3QgY29tcGlsZWQgd2l0aCBIVFJFRSBzdXBwb3J0LFxuIgorIlx0YnV0IGZpbGVzeXN0ZW0gJXMgaGFzIEhUUkVFIGRpcmVjdG9yaWVzLlxuIgorbXNnc3RyICIiCisiJXM6IERlemUgJ2UyZnNjaycgaXMgbmlldCBnZWNvbXBpbGVlcmQgbWV0ICdodHJlZSctb25kZXJzdGV1bmluZyxcbiIKKyIgICAgbWFhciBoZXQgYmVzdGFuZHNzeXN0ZWVtICVzIGJldmF0ICdodHJlZSctbWFwcGVuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrcyBpbm9kZVxuIgorbXNnc3RyICIlczogJXMgdGlqZGVucyBsZXplbiB2YW4gc2xlY2h0ZWJsb2trZW4taW5vZGVcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjEwCittc2dpZCAiVGhpcyBkb2Vzbid0IGJvZGUgd2VsbCwgYnV0IHdlJ2xsIHRyeSB0byBnbyBvbi4uLlxuIgorbXNnc3RyICJEaXQgemlldCBlciBuaWV0IGdvZWQgdWl0LCBtYWFyIHdlIHp1bGxlbiBkb29yZ2Fhbi4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJWQgYmxvY2tzKTogIgorbXNnc3RyICJBYW5tYWtlbiB2YW4gam91cm5hbCAoJWQgYmxva2tlbik6ICIKKworIzogZTJmc2NrL3VuaXguYzoxNjYyCittc2dpZCAiIERvbmUuXG4iCittc2dzdHIgIiB2b2x0b29pZC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjY0Cittc2dpZCAiIgorIlxuIgorIioqKiBqb3VybmFsIGhhcyBiZWVuIHJlLWNyZWF0ZWQgLSBmaWxlc3lzdGVtIGlzIG5vdyBleHQzIGFnYWluICoqKlxuIgorbXNnc3RyICIiCisiXG4iCisiKioqIGpvdXJuYWwgaXMgb3BuaWV1dyBhYW5nZW1hYWt0IC0tIGhldCBiZXN0YW5kc3N5c3RlZW0gaXMgbnUgd2VlciBleHQzICIKKyIqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjg4Cittc2dpZCAiUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uXG4iCittc2dzdHIgIkUyZnNjayB3b3JkdCBvcG5pZXV3IGdlc3RhcnQgdmFuYWYgaGV0IGJlZ2luLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY5MgorbXNnaWQgIndoaWxlIHJlc2V0dGluZyBjb250ZXh0IgorbXNnc3RyICJ0aWpkZW5zIHdpc3NlbiB2YW4gZGUgY29udGV4dCIKKworIzogZTJmc2NrL3VuaXguYzoxNjk5Cittc2dpZCAiYWJvcnRlZCIKK21zZ3N0ciAiYWZnZWJyb2tlbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBlMmZzY2sgY2FuY2VsZWQuXG4iCittc2dzdHIgIiVzOiAnZTJmc2NrJyBpcyBnZWFubnVsZWVyZC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzQxIGUyZnNjay91dGlsLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKiBCRVNUQU5EU1NZU1RFRU0gSVMgVkVSQU5ERVJEICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiVzOiAqKioqKiBIRVJTVEFSVCBVVyBTWVNURUVNICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc1MyBlMmZzY2svdXRpbC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBXQVJOSU5HOiBGaWxlc3lzdGVtIHN0aWxsIGhhcyBlcnJvcnMgKioqKioqKioqKlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogV0FBUlNDSFVXSU5HOiBiZXN0YW5kc3N5c3RlZW0gYmV2YXQgbm9nIGZvdXRlbiAqKioqKioqKioqXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MTkwIG1pc2MvdXRpbC5jOjg2Cittc2dpZCAieVkiCittc2dzdHIgImpKeVkiCisKKyM6IGUyZnNjay91dGlsLmM6MTkxCittc2dpZCAibk4iCittc2dzdHIgIm5OIgorCisjOiBlMmZzY2svdXRpbC5jOjIwNQorbXNnaWQgIjx5PiIKK21zZ3N0ciAiPGo+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwNworbXNnaWQgIjxuPiIKK21zZ3N0ciAiPG4+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwOQorbXNnaWQgIiAoeS9uKSIKK21zZ3N0ciAiIChqL24pIgorCisjOiBlMmZzY2svdXRpbC5jOjIyMworbXNnaWQgImNhbmNlbGxlZCFcbiIKK21zZ3N0ciAiZ2Vhbm51bGVlcmQhXG4iCisKKyMgc3JjL21haW4uYzo0MTcgc3JjL21haW4uYzo0MTggc3JjL21haW4uYzo0ODMgc3JjL21haW4uYzo0ODQgc3JjL21haW4uYzo0ODkKKyMgc3JjL21haW4uYzo0OTAgc3JjL21haW4uYzo1NzQKKyM6IGUyZnNjay91dGlsLmM6MjM4Cittc2dpZCAieWVzXG4iCittc2dzdHIgImphXG4iCisKKyMgc3JjL21haW4uYzo0MTcgc3JjL21haW4uYzo0MTggc3JjL21haW4uYzo0MzIgc3JjL21haW4uYzo0ODMgc3JjL21haW4uYzo0ODQKKyMgc3JjL21haW4uYzo0ODkgc3JjL21haW4uYzo0OTAgc3JjL21haW4uYzo1NzQKKyM6IGUyZnNjay91dGlsLmM6MjQwCittc2dpZCAibm9cbiIKK21zZ3N0ciAibmVlXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8gbm9cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyBuZWVcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyB5ZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyBqYVxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1OAorbXNnaWQgInllcyIKK21zZ3N0ciAiamEiCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAibm8iCittc2dzdHIgIm5lZSIKKworIzogZTJmc2NrL3V0aWwuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJmc2NrX3JlYWRfYml0bWFwczogaWxsZWdhbCBiaXRtYXAgYmxvY2socykgZm9yICVzIgorbXNnc3RyICJlMmZzY2tfcmVhZF9iaXRtYXBzKCk6IG9uZ2VsZGlnZSBiaXRrYWFydGJsb2trZW4gdm9vciAlcyIKKworIzogZTJmc2NrL3V0aWwuYzoyNzgKK21zZ2lkICJyZWFkaW5nIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIgorbXNnc3RyICJsZXplbiB2YW4gaW5vZGUtIGVuIGJsb2stYml0a2FhcnRlbiIKKworIzogZTJmc2NrL3V0aWwuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gcmVhZCBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAidGlqZGVucyBoZXJsZXplbiB2YW4gYml0a2FhcnRlbiB2b29yICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjI5OAorbXNnaWQgIndyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMiCittc2dzdHIgInNjaHJpanZlbiB2YW4gYmxvay0gZW4gaW5vZGUtYml0a2FhcnRlbiIKKworIzogZTJmc2NrL3V0aWwuYzozMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAidGlqZGVucyBoZXJzY2hyaWp2ZW4gdmFuIGJsb2stIGVuIGlub2RlLWJpdGthYXJ0ZW4gdm9vciAlcyIKKworIzogZTJmc2NrL3V0aWwuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIiVzOiBVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k7IFJVTiBmc2NrIE1BTlVBTExZLlxuIgorIlx0KGkuZS4sIHdpdGhvdXQgLWEgb3IgLXAgb3B0aW9ucylcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIiVzOiBPTlZFUldBQ0hURSBJTkNPTlNJU1RFTlRJRTsgdm9lciAnZnNjaycgbWV0IGRlIGhhbmQgdWl0XG4iCisiICAgIChkYXQgd2lsIHplZ2dlbjogem9uZGVyIGRlIG9wdGllcyAnLWEnIG9mICctcCcpLlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCittc2dzdHIgIkdlYnJ1aWt0IGdlaGV1Z2VuOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKKworIzogZTJmc2NrL3V0aWwuYzo0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdSwgIgorbXNnc3RyICJHZWJydWlrdCBnZWhldWdlbjogJWx1LCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWU6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCittc2dzdHIgInRpamQ6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVsYXBzZWQgdGltZTogJTYuM2ZcbiIKK21zZ3N0ciAidmVybG9wZW4gdGlqZDogJTYuM2ZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0NDcgZTJmc2NrL3V0aWwuYzo0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgInRpamRlbnMgbGV6ZW4gdmFuIGlub2RlICVsdSBpbiAlcyIKKworIzogZTJmc2NrL3V0aWwuYzo0NzUgZTJmc2NrL3V0aWwuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgInRpamRlbnMgc2NocmlqdmVuIHZhbiBpbm9kZSAlbHUgaW4gJXMiCisKKyM6IGUyZnNjay91dGlsLmM6NjM3Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyB6ZXJvaXppbmcgYnVmZmVyIgorbXNnc3RyICJ0aWpkZW5zIHJlc2VydmVyZW4gdmFuIG51bG1ha2luZ3NidWZmZXIiCisKKyM6IGUyZnNjay91dGlsLmM6Nzg1Cittc2dpZCAiIgorIlVORVhQRUNURUQgSU5DT05TSVNURU5DWTogdGhlIGZpbGVzeXN0ZW0gaXMgYmVpbmcgbW9kaWZpZWQgd2hpbGUgZnNjayBpcyAiCisicnVubmluZy5cbiIKK21zZ3N0ciAiIgorIk9OVkVSV0FDSFRFIElOQ09OU0lTVEVOVElFOiBoZXQgYmVzdGFuZHNzeXN0ZWVtIHdvcmR0IGdld2lqemlnZCB0ZXJ3aWpsICIKKyInZnNjaycgdWl0Z2V2b2VyZCB3b3JkdC5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3MgorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgInZvbHRvb2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWIgYmxvY2tfc2l6ZV0gWy1pIGlucHV0X2ZpbGVdIFstbyBvdXRwdXRfZmlsZV0gWy1zdnduZl1cbiIKKyIgICAgICAgWy1jIGJsb2Nrc19hdF9vbmNlXSBbLWQgZGVsYXlfZmFjdG9yX2JldHdlZW5fcmVhZHNdIFstZSAiCisibWF4X2JhZF9ibG9ja3NdXG4iCisiICAgICAgIFstcCBudW1fcGFzc2VzXSBbLXQgdGVzdF9wYXR0ZXJuIFstdCB0ZXN0X3BhdHRlcm4gWy4uLl1dXVxuIgorIiAgICAgICBkZXZpY2UgW2xhc3RfYmxvY2sgW2ZpcnN0X2Jsb2NrXV1cbiIKK21zZ3N0ciAiIgorIkdlYnJ1aWs6ICAlcyBbLWIgYmxva2dyb290dGVdIFstaSBpbnZvZXJiZXN0YW5kXSBbLW8gdWl0dm9lcmJlc3RhbmRdXG4iCisiICAgICAgICAgIFstYyBhYW50YWxfYmxva2tlbl90ZWdlbGlqa10gWy1kICIKKyJ2ZXJ0cmFnaW5nc2ZhY3Rvcl90dXNzZW5fbGVlc2FjdGllc11cbiIKKyIgICAgICAgICAgWy1lIG1heGltdW1fYWFudGFsX3NsZWNodGVfYmxva2tlbl0gWy1wIGFhbnRhbF9jb250cm9sZXNdXG4iCisiICAgICAgICAgIFstdCB0ZXN0cGF0cm9vbiBbLXQgdGVzdHBhdHJvb24gWy4uLl1dXSAgWy1mbnN2d11cbiIKKyIgICAgICAgICAgYXBwYXJhYXQgIFtlaW5kYmxvayBbYmVnaW5ibG9rXV1cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBUaGUgLW4gYW5kIC13IG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzOiBPcHRpZXMgJy1uJyBlbiAnLXcnIGdhYW4gbmlldCBzYW1lbi5cbiIKKyJcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTYuMmYlJSBkb25lLCAlcyBlbGFwc2VkLiAoJWQvJWQvJWQgZXJyb3JzKSIKK21zZ3N0ciAiJTYuMmYlJSBnZWRhYW4sICVzIHZlcmxvcGVuICAoJWQvJWQvJWQgZm91dGVuKSIKKworIzogbWlzYy9iYWRibG9ja3MuYzozMjgKK21zZ2lkICJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIKK21zZ3N0ciAiVGVzdCB3b3JkdCB1aXRnZXZvZXJkIG1ldCBkaXQgd2lsbGVrZXVyaWdlIHBhdHJvb246ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNDYKK21zZ2lkICJUZXN0aW5nIHdpdGggcGF0dGVybiAweCIKK21zZ3N0ciAiVGVzdCB3b3JkdCB1aXRnZXZvZXJkIG1ldCBwYXRyb29uIDB4IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM3OCBtaXNjL2JhZGJsb2Nrcy5jOjQ1MQorbXNnaWQgImR1cmluZyBzZWVrIgorbXNnc3RyICJ0aWpkZW5zICdzZWVrJyIKKworIzogbWlzYy9iYWRibG9ja3MuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIgorbXNnc3RyICJWcmVlbWRlIHdhYXJkZSAoJWxkKSBiaWogbGVlc3BvZ2luZ1xuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ3NgorbXNnaWQgImR1cmluZyBleHQyZnNfc3luY19kZXZpY2UiCittc2dzdHIgInRpamRlbnMgbGVlZ21ha2VuIHZhbiBkZSBidWZmZXJzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ5NiBtaXNjL2JhZGJsb2Nrcy5jOjc1OAorbXNnaWQgIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iCittc2dzdHIgIiIKKyJ0aWpkZW5zIHZvb3JiZXJlaWRpbmcgdmFuIGhldCBsYW5nc2xvcGVuIHZhbiBkZSBsaWpzdCBtZXQgc2xlY2h0ZSBibG9ra2VuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxMSBtaXNjL2JhZGJsb2Nrcy5jOjYxMSBtaXNjL2JhZGJsb2Nrcy5jOjc2OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVycyIKK21zZ3N0ciAidGlqZGVucyByZXNlcnZlcmVuIHZhbiBidWZmZXJzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBibG9ja3MgJWx1IHRvICVsdVxuIgorbXNnc3RyICJDb250cm9sZXJlbiB2YW4gYmxva2tlbiAlbHUgdG90ICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyMAorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtb25seSBtb2RlXG4iCittc2dzdHIgIlpvZWtlbiBuYWFyIHNsZWNodGUgYmxva2tlbiBpbiBhbGxlZW4tbGV6ZW4tbW9kdXNcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjkKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAocmVhZC1vbmx5IHRlc3QpOiAiCittc2dzdHIgIlpvZWtlbiBuYWFyIHNsZWNodGUgYmxva2tlbiAoYWxsZWVuLWxlemVuLXRlc3QpOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTM2IG1pc2MvYmFkYmxvY2tzLmM6NjQzIG1pc2MvYmFkYmxvY2tzLmM6Njg1CisjOiBtaXNjL2JhZGJsb2Nrcy5jOjgzMgorbXNnaWQgIlRvbyBtYW55IGJhZCBibG9ja3MsIGFib3J0aW5nIHRlc3RcbiIKK21zZ3N0ciAiVGUgdmVlbCBzbGVjaHRlIGJsb2trZW4gLS0gY29udHJvbGUgaXMgYWZnZWJyb2tlblxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYxOAorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJab2VrZW4gbmFhciBzbGVjaHRlIGJsb2trZW4gaW4gbGV6ZW4tZW4tc2NocmlqdmVuLW1vZHVzXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjIwIG1pc2MvYmFkYmxvY2tzLmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gYmxvY2sgJWx1IHRvICVsdVxuIgorbXNnc3RyICJWYW4gYmxvayAlbHUgdG90ICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY3NQorbXNnaWQgIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIgorbXNnc3RyICJMZXplbiBlbiB2ZXJnZWxpamtlbjogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc4MQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiIgorIlpvZWtlbiBuYWFyIHNsZWNodGUgYmxva2tlbiBpbiBuaWV0LWRlc3RydWN0aWV2ZSBsZXplbi1lbi1zY2hyaWp2ZW4tbW9kdXNcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODcKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAobm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgdGVzdClcbiIKK21zZ3N0ciAiIgorIlpvZWtlbiBuYWFyIHNsZWNodGUgYmxva2tlbiAobmlldC1kZXN0cnVjdGlldmUgbGV6ZW4tZW4tc2NocmlqdmVuLXRlc3QpXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzk0Cittc2dpZCAiIgorIlxuIgorIkludGVycnVwdCBjYXVnaHQsIGNsZWFuaW5nIHVwXG4iCittc2dzdHIgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgb250dmFuZ2VuLCBiZXppZyBtZXQgb3BzY2hvbmVuLi4uXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmluZyB0ZXN0IGRhdGEgd3JpdGUsIGJsb2NrICVsdSIKK21zZ3N0ciAidGlqZGVucyBzY2hyaWp2ZW4gdmFuIHRlc3RwYXRyb29uLCBibG9rICVsdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5OTggbWlzYy91dGlsLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQ7ICIKK21zZ3N0ciAiJXMgaXMgYWFuZ2Vrb3BwZWxkOyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwMAorbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICIiCisibWFhciAnYmFkYmxvY2tzJyB3b3JkdCBnZWR3b25nZW4gdWl0Z2V2b2VyZC5cbiIKKyJIb29wIGRhdCAvZXRjL210YWIgb25qdWlzdCBpcy5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDA1Cittc2dpZCAiaXQncyBub3Qgc2FmZSB0byBydW4gYmFkYmxvY2tzIVxuIgorbXNnc3RyICJoZXQgaXMgbmlldCB2ZWlsaWcgb20gJ2JhZGJsb2NrcycgdWl0IHRlIHZvZXJlbiFcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDEwIG1pc2MvdXRpbC5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhcHBhcmVudGx5IGluIHVzZSBieSB0aGUgc3lzdGVtOyAiCittc2dzdHIgIiVzIHdvcmR0IGJsaWprYmFhciBnZWJydWlrdCBkb29yIGhldCBzeXN0ZWVtOyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAxMworbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICJtYWFyICdiYWRibG9ja3MnIHdvcmR0IGdlZHdvbmdlbiB1aXRnZXZvZXJkLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyAtICVzIgorbXNnc3RyICJvbmdlbGRpZ2UgJXM6ICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGJpZyBtYXggYmFkIGJsb2NrcyBjb3VudCAldSAtIG1heGltdW0gaXMgJXUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGVzdF9wYXR0ZXJuIC0gJXMiCittc2dzdHIgImthbiBnZWVuIGdlaGV1Z2VuIHJlc2VydmVyZW4gdm9vciB0ZXN0cGF0cm9vbiAtLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTg0Cittc2dpZCAiTWF4aW11bSBvZiBvbmUgdGVzdF9wYXR0ZXJuIG1heSBiZSBzcGVjaWZpZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIkluIGFsbGVlbi1sZXplbi1tb2R1cyBtYWcgc2xlY2h0cyDDqcOpbiB0ZXN0cGF0cm9vbiBnZWdldmVuIHdvcmRlbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTkwCittc2dpZCAiUmFuZG9tIHRlc3RfcGF0dGVybiBpcyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiSW4gYWxsZWVuLWxlemVuLW1vZHVzIGlzIGVlbiB3aWxsZWtldXJpZyB0ZXN0cGF0cm9vbiBuaWV0IHRvZWdlc3RhYW4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwNAorbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBtYW51YWxseVxuIgorbXNnc3RyICJLYW4gZGUgYXBwYXJhYXRncm9vdHRlIG5pZXQgYmVwYWxlbjsgZ2VlZiBkZSBncm9vdHRlIGhhbmRtYXRpZyBvcC5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjEwCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBkZXZpY2Ugc2l6ZSIKK21zZ3N0ciAidGlqZGVucyBiZXBhbGVuIHZhbiBhcHBhcmFhdGdyb290dGUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIxNQorbXNnaWQgImxhc3QgYmxvY2siCittc2dzdHIgImxhYXRzdGUgYmxvayIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjIxCittc2dpZCAiZmlyc3QgYmxvY2siCittc2dzdHIgImVlcnN0ZSBibG9rIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAoJWxsdSk6IG11c3QgYmUgbGVzcyB0aGFuICVsbHUiCittc2dzdHIgIm9uZ2VsZGlnIGJlZ2luYmxvazogJWxsdSAtLSBtb2V0IGtsZWluZXIgZGFuICVsbHUgemlqbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZW5kIGJsb2NrICglbGx1KTogbXVzdCBiZSAzMi1iaXQgdmFsdWUiCittc2dzdHIgIm9uZ2VsZGlnIGJlZ2luYmxvazogJWxsdSAtLSBtb2V0IGVlbiAzMi1iaXRzIHdhYXJkZSB6aWpuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyODcKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyBpbi1tZW1vcnkgYmFkIGJsb2NrcyBsaXN0IgorbXNnc3RyICJ0aWpkZW5zIG9wc3RlbGxlbiB2YW4gbGlqc3QgdmFuIHNsZWNodGUgYmxva2tlbiBpbiBnZWhldWdlbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjk2Cittc2dpZCAiaW5wdXQgZmlsZSAtIGJhZCBmb3JtYXQiCittc2dzdHIgImludm9lcmJlc3RhbmQgaGVlZnQgb25nZWxkaWdlIG9wbWFhayIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzA0IG1pc2MvYmFkYmxvY2tzLmM6MTMxMworbXNnaWQgIndoaWxlIGFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgInRpamRlbnMgdG9ldm9lZ2VuIGFhbiBsaWpzdCB2YW4gc2xlY2h0ZSBibG9ra2VuIGluIGdlaGV1Z2VuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEzMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFzcyBjb21wbGV0ZWQsICV1IGJhZCBibG9ja3MgZm91bmQuICglZC8lZC8lZCBlcnJvcnMpXG4iCittc2dzdHIgIkNvbnRyb2xlIGlzIHZvbHRvb2lkOyAldSBzbGVjaHRlIGJsb2trZW4gZ2V2b25kZW4gKCVkLyVkLyVkIGZvdXRlbikuXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZmXSBbLSs9YUFjQ2REZWlqc1N0VHVdIFstdiB2ZXJzaW9uXSBmaWxlcy4uLlxuIgorbXNnc3RyICJHZWJydWlrOiAgJXMgWy1SVmZdIFstKz1BYUNjRGRlaWpTc1R0dV0gWy12IFZFUlNJRV0gQkVTVEFORC4uLlxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdmVyc2lvbiAtICVzXG4iCittc2dzdHIgIm9uZ2VsZGlnZSB2ZXJzaWU6ICVzXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MjAxIG1pc2MvbHNhdHRyLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzdGF0ICVzIgorbXNnc3RyICJ0aWpkZW5zIG9wdnJhZ2VuIHZhbiBkZSBzdGF0dXMgdmFuICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJ0aWpkZW5zIGxlemVuIHZhbiB2bGFnZ2VuIG9wICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIxMyBtaXNjL2NoYXR0ci5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncyBvZiAlcyBzZXQgYXMgIgorbXNnc3RyICJWbGFnZ2VuIHZhbiAlcyBnZXpldCBhbHMgIgorCisjOiBtaXNjL2NoYXR0ci5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJ0aWpkZW5zIHpldHRlbiB2YW4gdmxhZ2dlbiBvcCAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiBvZiAlcyBzZXQgYXMgJWx1XG4iCittc2dzdHIgIlZlcnNpZSB2YW4gJXMgZ2V6ZXQgYWxzICVsdVxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgInRpamRlbnMgemV0dGVuIHZhbiB2ZXJzaWUgb3AgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjY3Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgcGF0aCB2YXJpYWJsZSBpbiBjaGF0dHJfZGlyX3Byb2MiCittc2dzdHIgIkthbiBnZWVuIHBhZHZhcmlhYmVsZSByZXNlcnZlcmVuIGluIGNoYXR0cl9kaXJfcHJvYygpIgorCisjOiBtaXNjL2NoYXR0ci5jOjMwNworbXNnaWQgIj0gaXMgaW5jb21wYXRpYmxlIHdpdGggLSBhbmQgK1xuIgorbXNnc3RyICInPScgZ2FhdCBuaWV0IHNhbWVuIG1ldCAnLScgZW4gJysnXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MzE1Cittc2dpZCAiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iCittc2dzdHIgIkdlYnJ1aWsgJy12JywgJz0nLCAnLScgb2YgJysnLlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08bnVtPl0gWy1vIGJsb2Nrc2l6ZT08bnVtPl0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJHZWJydWlrOiAgJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2NrPTxudW1tZXI+XSBbLW8gYmxvY2tzaXplPTxnZXRhbD5dICIKKyJhcHBhcmFhdFxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTU5Cittc2dpZCAiYmxvY2tzIgorbXNnc3RyICJibG9ra2VuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTY5Cittc2dpZCAiY2x1c3RlcnMiCittc2dzdHIgImNsdXN0ZXJzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkdyb3VwICVsdTogKEJsb2NrcyAiCittc2dzdHIgIkdyb2VwICVsdTogKEJsb2trZW4gIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ2hlY2tzdW0gMHglMDR4IgorbXNnc3RyICIgIENvbnRyb2xlc29tIGlzIDB4JTA0eCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKEVYUEVDVEVEIDB4JTA0eCkiCittc2dzdHIgIiAoMHglMDR4IFdFUkQgVkVSV0FDSFQpIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgdW51c2VkIGlub2RlcyAldVxuIgorbXNnc3RyICIsICV1IG9uZ2VicnVpa3RlIGlub2Rlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgJXMgc3VwZXJibG9jayBhdCAiCittc2dzdHIgIiAgJXMgc3VwZXJibG9rIG9wICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNAorbXNnaWQgIlByaW1hcnkiCittc2dzdHIgIlByaW1haXIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTQKK21zZ2lkICJCYWNrdXAiCittc2dzdHIgIlJlc2VydmVrb3BpZSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxOAorbXNnaWQgIiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgIgorbXNnc3RyICIsIEdyb2Vwc2Jlc2NocmlqdmVycyBvcCAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjIKK21zZ2lkICIiCisiXG4iCisiICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgQmxva2tlbiB2b29yIGdyb2Vwc2Jlc2NocmlqdmVyc3RhYmVsIGdlcmVzZXJ2ZWVyZCBvcCAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjkKK21zZ2lkICIgR3JvdXAgZGVzY3JpcHRvciBhdCAiCittc2dzdHIgIiBHcm9lcHNiZXNjaHJpanZlciBvcCAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzUKK21zZ2lkICIgIEJsb2NrIGJpdG1hcCBhdCAiCittc2dzdHIgIiAgQmxvay1iaXRrYWFydCBvcCAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzkKK21zZ2lkICIsIElub2RlIGJpdG1hcCBhdCAiCittc2dzdHIgIiwgSW5vZGUtYml0a2FhcnQgb3AgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQzCittc2dpZCAiIgorIlxuIgorIiAgSW5vZGUgdGFibGUgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBJbm9kZXRhYmVsIG9wICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiICAldSBmcmVlICVzLCAldSBmcmVlIGlub2RlcywgJXUgZGlyZWN0b3JpZXMlcyIKK21zZ3N0ciAiIgorIlxuIgorIiAgJXUgdnJpamUgJXMsICV1IHZyaWplIGlub2RlcywgJXUgbWFwcGVuJXMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAldSB1bnVzZWQgaW5vZGVzXG4iCittc2dzdHIgIiwgJXUgb25nZWJydWlrdGUgaW5vZGVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTkKK21zZ2lkICIgIEZyZWUgYmxvY2tzOiAiCittc2dzdHIgIiAgVnJpamUgYmxva2tlbjogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mjc0Cittc2dpZCAiICBGcmVlIGlub2RlczogIgorbXNnc3RyICIgIFZyaWplIGlub2RlczogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzEwCittc2dpZCAid2hpbGUgcHJpbnRpbmcgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgInRpamRlbnMgcHJpbnRlbiB2YW4gbGlqc3QgdmFuIHNsZWNodGUgYmxva2tlbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2tzOiAldSIKK21zZ3N0ciAiU2xlY2h0ZSBibG9ra2VuOiAldSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM0NSBtaXNjL3R1bmUyZnMuYzozNDcKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInRpamRlbnMgbGV6ZW4gdmFuIGpvdXJuYWwtaW5vZGUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNTEKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInRpamRlbnMgb3BlbmVuIHZhbiBqb3VybmFsLWlub2RlIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzU3Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyIGJsb2NrIgorbXNnc3RyICJ0aWpkZW5zIGxlemVuIHZhbiBqb3VybmFsLXN1cGVyYmxvayIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2NAorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXIgaW52YWxpZCFcbiIKK21zZ3N0ciAiTWFnaXNjaCBnZXRhbCB2YW4gam91cm5hbC1zdXBlcmJsb2sgaXMgb25nZWxkaWchXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjcKK21zZ2lkICJKb3VybmFsIGZlYXR1cmVzOiAgICAgICAgIgorbXNnc3RyICJKb3VybmFsLWZ1bmN0aWVzOiAgICAgICAgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM4MAorbXNnaWQgIkpvdXJuYWwgc2l6ZTogICAgICAgICAgICAgIgorbXNnc3RyICJHcm9vdHRlIHZhbiBqb3VybmFsOiAgICAgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorbXNnc3RyICIiCisiTGVuZ3RlIHZhbiBqb3VybmFsOiAgICAgICAldVxuIgorIkpvdXJuYWwtc2VxdWVudGllOiAgICAgICAgMHglMDh4XG4iCisiQmVnaW4gdmFuIGpvdXJuYWw6ICAgICAgICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZXJybm86ICAgICAgICAgICAgJWRcbiIKK21zZ3N0ciAiSm91cm5hbC1mb3V0bW51bW1lcjogICAgICAlZFxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDE1IG1pc2MvdHVuZTJmcy5jOjE5NgorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJ0aWpkZW5zIGxlemVuIHZhbiBqb3VybmFsLXN1cGVyYmxvayIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQyMworbXNnaWQgIkNvdWxkbid0IGZpbmQgam91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlcnMiCittc2dzdHIgIkthbiBtYWdpc2NoZSBnZXRhbGxlbiB2YW4gam91cm5hbC1zdXBlcmJsb2sgbmlldCB2aW5kZW4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgYmxvY2sgc2l6ZTogICAgICAgJXVcbiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBmaXJzdCBibG9jazogICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgbnVtYmVyIG9mIHVzZXJzOiAgJXVcbiIKK21zZ3N0ciAiIgorIlxuIgorIkJsb2tncm9vdHRlIGluIGpvdXJuYWw6ICAgICAldVxuIgorIkxlbmd0ZSB2YW4gam91cm5hbDogICAgICAgICAldVxuIgorIkVlcnN0ZSBqb3VybmFsLWJsb2s6ICAgICAgICAldVxuIgorIktvcGNvZGUgdmFuIGpvdXJuYWwtcmVla3M6ICAweCUwOHhcbiIKKyJCZWdpbiB2YW4gam91cm5hbDogICAgICAgICAgJXVcbiIKKyJBYW50YWwgam91cm5hbC1nZWJydWlrZXJzOiAgJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHVzZXJzOiAgICAgICAgICAgICVzXG4iCittc2dzdHIgIkpvdXJuYWwtZ2VicnVpa2VyczogICAgICAgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ1NiBtaXNjL21rZTJmcy5jOjc0MyBtaXNjL3R1bmUyZnMuYzoxMjExCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIG9wdGlvbnMhXG4iCittc2dzdHIgIkthbiBnZWVuIGdlaGV1Z2VuIHJlc2VydmVyZW4gb20gb3B0aWVzIHRlIG9udGxlZGVuIVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jayBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIk9uZ2VsZGlnIHN1cGVyYmxvayBvcGdlZ2V2ZW46ICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBibG9ja3NpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJPbmdlbGRpZ2UgYmxva2dyb290dGUgb3BnZWdldmVuOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgZXh0ZW5kZWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdXBlcmJsb2NrPTxzdXBlcmJsb2NrIG51bWJlcj5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvY2tzaXplPlxuIgorbXNnc3RyICIiCisiXG4iCisiT25nZWxkaWdlIG9wdGllIG9wZ2VnZXZlbjogJXNcbiIKKyJcbiIKKyJVaXRnZWJyZWlkZSBvcHRpZXMgd29yZGVuIGdlc2NoZWlkZW4gZG9vciBrb21tYSdzO1xuIgorImh1biBhcmd1bWVudCB3b3JkdCB2b29yYWZnZWdhYW4gZG9vciBlZW4gJz0nLXRla2VuLlxuIgorIlxuIgorIkdlbGRpZ2UgdWl0Z2VicmVpZGUgb3B0aWVzIHppam46XG4iCisiICAgIHN1cGVyYmxvY2s9PHN1cGVyYmxva251bW1lcj5cbiIKKyIgICAgYmxvY2tzaXplPTxibG9rZ3Jvb3R0ZT5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU2OCBtaXNjL21rZTJmcy5jOjE3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlc1xuIgorbXNnc3RyICJcdGdlYnJ1aWsgbWFrZW5kIHZhbiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjA2IG1pc2MvZTJpbWFnZS5jOjE1ODIgbWlzYy90dW5lMmZzLmM6MjA2MAorIzogcmVzaXplL21haW4uYzozMTkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiS2FuIGdlZW4gZ2VsZGlnIGJlc3RhbmRzc3lzdGVlbS1zdXBlcmJsb2sgdmluZGVuLlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogJXM6IGVycm9yIHJlYWRpbmcgYml0bWFwczogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAlczogZm91dCB0aWpkZW5zIGxlemVuIHZhbiBiaXRrYWFydGVuOiAlc1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFsgLXJ8USBdIFsgLWZyIF0gZGV2aWNlIGltYWdlLWZpbGVcbiIKK21zZ3N0ciAiR2VicnVpazogICVzIFstcnwtUV0gWy1mcl0gYXBwYXJhYXQgaW1hZ2ViZXN0YW5kXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLUkgZGV2aWNlIGltYWdlLWZpbGVcbiIKK21zZ3N0ciAiICAgICAgICAgICVzIC1JIGFwcGFyYWF0IGltYWdlYmVzdGFuZFxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgICAgICAlcyAtcmEgIFsgIC1jZm5wICBdIFsgLW8gc3JjX29mZnNldCBdIFsgLU8gZGVzdF9vZmZzZXQgXSBzcmNfZnMgIgorIlsgZGVzdF9mcyBdXG4iCittc2dzdHIgIiIKKyIgICAgICAgICAgJXMgLXJhIFstY2ZucF0gWy1vIGJyb25wb3NpdGllXSBbLU8gZG9lbHBvc2l0aWVdIGJyb24tYnMgW2RvZWwtIgorImJzXVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjkgbWlzYy9lMmltYWdlLmM6NTc2IG1pc2MvZTJpbWFnZS5jOjU4MgorIzogbWlzYy9lMmltYWdlLmM6MTE3OAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVyIgorbXNnc3RyICJ0aWpkZW5zIHJlc2VydmVyZW4gdmFuIGJ1ZmZlciIKKworIzogbWlzYy9lMmltYWdlLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgYmxvY2sgJWxsdVxuIgorbXNnc3RyICJTY2hyaWp2ZW4gdmFuIGJsb2sgJWxsdVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igd3JpdGluZyBibG9jayAlbGx1IgorbXNnc3RyICJmb3V0IHRpamRlbnMgc2NocmlqdmVuIHZhbiBibG9rICVsbHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE5MQorbXNnaWQgImVycm9yIGluIGdlbmVyaWNfd3JpdGUoKSIKK21zZ3N0ciAiZm91dCBpbiBnZW5lcmljX3dyaXRlKCkiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjIwOAorbXNnaWQgIkVycm9yOiBoZWFkZXIgc2l6ZSBpcyBiaWdnZXIgdGhhbiB3cnRfc2l6ZVxuIgorbXNnc3RyICJGb3V0OiBoZWFkZXItZ3Jvb3R0ZSBpcyBncm90ZXIgZGFuIHdydF9zaXplXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjIxMworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGhlYWRlciBidWZmZXJcbiIKK21zZ3N0ciAiS2FuIGdlZW4gaGVhZGVyLWJ1ZmZlciByZXNlcnZlcmVuLlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNDEKK21zZ2lkICJ3aGlsZSB3cml0aW5nIHN1cGVyYmxvY2siCittc2dzdHIgInRpamRlbnMgc2NocmlqdmVuIHZhbiBzdXBlcmJsb2siCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI1MAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgInRpamRlbnMgYWFubWFrZW4gdmFuIGlub2RldGFiZWwiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI1OAorbXNnaWQgIndoaWxlIHdyaXRpbmcgYmxvY2sgYml0bWFwIgorbXNnc3RyICJ0aWpkZW5zIHNjaHJpanZlbiB2YW4gYmxvay1iaXRrYWFydCIKKworIzogbWlzYy9lMmltYWdlLmM6MjY2Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSBiaXRtYXAiCittc2dzdHIgInRpamRlbnMgc2NocmlqdmVuIHZhbiBpbm9kZS1iaXRrYWFydCIKKworIzogbWlzYy9lMmltYWdlLmM6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCByZWNfbGVuICglZClcbiIKK21zZ3N0ciAiQmVzY2hhZGlnZCBtYXBibG9rICVsbHU6IG9uanVpc3RlICdyZWNfbGVuJyAoJWQpXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjUxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IGRpcmVjdG9yeSBibG9jayAlbGx1OiBiYWQgbmFtZV9sZW4gKCVkKVxuIgorbXNnc3RyICJCZXNjaGFkaWdkIG1hcGJsb2sgJWxsdTogb25qdWlzdGUgJ25hbWVfbGVuJyAoJWQpXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGx1IC8gJWxsdSBibG9ja3MgKCVkJSUpIgorbXNnc3RyICIlbGx1IC8gJWxsdSBibG9ra2VuICglZCUlKSIKKworIzogbWlzYy9lMmltYWdlLmM6NTg2IG1pc2MvZTJpbWFnZS5jOjYyNgorbXNnaWQgIkNvcHlpbmcgIgorbXNnc3RyICJLb3Bpw6tyZW4gdmFuICIKKworIzogbWlzYy9lMmltYWdlLmM6NjIzCittc2dpZCAiIgorIlN0b3BwaW5nIG5vdyB3aWxsIGRlc3Ryb3kgdGhlIGZpbGVzeXN0ZW0sIGludGVycnVwdCBhZ2FpbiBpZiB5b3UgYXJlIHN1cmVcbiIKK21zZ3N0ciAiIgorIk51IHN0b3BwZW4gemFsIGhldCBiZXN0YW5kc3N5c3RlZW0gdmVybmlldGlnZW47IG9uZGVyYnJlZWsgb3BuaWV1dyBhbHMgdSBoZXQgIgorInpla2VyIHdlZXQuXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgcmVtYWluaW5nIGF0ICUuMmYgTUIvcyIKK21zZ3N0ciAiIG5vZyAlcyBiaWogJS4yZiBNQi9zIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo2NjEgbWlzYy9lMmltYWdlLmM6MTE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIGJsb2NrICVsbHUiCittc2dzdHIgImZvdXQgdGlqZGVucyBsZXplbiB2YW4gYmxvayAlbGx1IgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29waWVkICVsbHUgLyAlbGx1IGJsb2NrcyAoJWQlJSkgaW4gJXMgIgorbXNnc3RyICJFciB6aWpuICVsbHUgLyAlbGx1IGJsb2trZW4gZ2Vrb3BpZWVyZCAoJWQlJSkgaW4gJXMgIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXQgJS4yZiBNQi9zIgorbXNnc3RyICJtZXQgJS4yZiBNQi9zIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3NTUKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGwxIHRhYmxlIgorbXNnc3RyICJ0aWpkZW5zIHJlc2VydmVyZW4gdmFuIGwxLXRhYmVsIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo4MDAKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGwyIGNhY2hlIgorbXNnc3RyICJ0aWpkZW5zIHJlc2VydmVyZW4gdmFuIGwyLWNhY2hlIgorCisjIFhYWCAgIndoaWxlIHB1dHRpbmciPz8KKyM6IG1pc2MvZTJpbWFnZS5jOjgyMworbXNnaWQgIiIKKyJXYXJuaW5nOiBUaGVyZSBhcmUgc3RpbGwgdGFibGVzIGluIHRoZSBjYWNoZSB3aGlsZSBwdXR0aW5nIHRoZSBjYWNoZSwgZGF0YSAiCisid2lsbCBiZSBsb3N0IHNvIHRoZSBpbWFnZSBtYXkgbm90IGJlIHZhbGlkLlxuIgorbXNnc3RyICIiCisiV2FhcnNjaHV3aW5nOiBlciB6aXR0ZW4gbm9nIHRhYmVsbGVuIGluIGRlIGNhY2hlIHRlcndpamwgZGV6ZSBvcGdlc2xhZ2VuICIKKyJ3b3JkdDtcbiIKKyJlciB6dWxsZW4gZ2VnZXZlbnMgdmVybG9yZW4gZ2FhbiwgZHVzIGRlIGltYWdlIGthbiBvbmdlbGRpZyB6aWpuLlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTQ1Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBleHQyX3Fjb3cyX2ltYWdlIgorbXNnc3RyICJ0aWpkZW5zIHJlc2VydmVyZW4gdmFuICdleHQyX3Fjb3cyX2ltYWdlJyIKKworIzogbWlzYy9lMmltYWdlLmM6MTE1MgorbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBleHQyX3Fjb3cyX2ltYWdlIgorbXNnc3RyICJ0aWpkZW5zIGluaXRpYWxpc2VyZW4gdmFuICdleHQyX3Fjb3cyX2ltYWdlJyIKKworIzogbWlzYy9lMmltYWdlLmM6MTIxMSBtaXNjL2UyaW1hZ2UuYzoxMjI5Cittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I6IG11bHRpcGxlIHNlcXVlbnRpYWwgcmVmY291bnQgYmxvY2tzIGNyZWF0ZWQhXG4iCittc2dzdHIgIiIKKyIqKlByb2dyYW1tYWZvdXQqKjogbWVlcmRlcmUgb3BlZW52b2xnZW5kZSAncmVmY291bnQnLWJsb2trZW4gYWFuZ2VtYWFrdCFcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTI2OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwIgorbXNnc3RyICJ0aWpkZW5zIHJlc2VydmVyZW4gdmFuIGJsb2stYml0a2FhcnQiCisKKyMgWFhYICBtYXliZSAnc2NyYW1ibGVkJz8KKyM6IG1pc2MvZTJpbWFnZS5jOjEyNzgKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIHNjcmFtYmxlIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAidGlqZGVucyByZXNlcnZlcmVuIHZhbiBnZWh1c3NlbGRlIGJsb2stYml0a2FhcnQiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyODUKK21zZ2lkICJTY2FubmluZyBpbm9kZXMuLi5cbiIKK21zZ3N0ciAiU2Nhbm5lbiB2YW4gaW5vZGVzLi4uXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyOTcKK21zZ2lkICJDYW4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIiCittc2dzdHIgIkthbiBnZWVuIGJsb2tidWZmZXIgcmVzZXJ2ZXJlbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTMzNiBtaXNjL2UyaW1hZ2UuYzoxMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGl0ZXJhdGluZyBvdmVyIGlub2RlICV1IgorbXNnc3RyICJ0aWpkZW5zIGl0ZXJhdGllIG92ZXIgaW5vZGUgJXUiCisKKyMgWFhYICB1cHBlcmNhc2UgUUNPVzIsIGFkZCBzcGFjZQorIzogbWlzYy9lMmltYWdlLmM6MTM4MQorbXNnaWQgIlJhdyBhbmQgcWNvdzIgaW1hZ2VzIGNhbm5vdCBiZSBpbnN0YWxsZWQiCittc2dzdHIgIidyYXcnLSBlbiBRQ09XMi1pbWFnZXMga3VubmVuIG5pZXQgZ2XDr25zdGFsbGVlcmQgd29yZGVuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDAzCittc2dpZCAiZXJyb3IgcmVhZGluZyBiaXRtYXBzIgorbXNnc3RyICJmb3V0IHRpamRlbnMgbGV6ZW4gdmFuIGJpdGthYXJ0ZW4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MTUKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGRldmljZSBmaWxlIgorbXNnc3RyICJ0aWpkZW5zIG9wZW5lbiB2YW4gYXBwYXJhYXRiZXN0YW5kIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDI2Cittc2dpZCAid2hpbGUgcmVzdG9yaW5nIHRoZSBpbWFnZSB0YWJsZSIKK21zZ3N0ciAidGlqZGVucyBoZXQgaGVyc3RlbGxlbiB2YW4gZGUgaW1hZ2UtdGFiZWwiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MjMKK21zZ2lkICItYSBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHJhdyBvciBRQ09XMiBpbWFnZXMuIgorbXNnc3RyICJPcHRpZSAnLWEnIGthbiBhbGxlZW4gZ2VicnVpa3Qgd29yZGVuIG1ldCAncmF3Jy0gb2YgUUNPVzItaW1hZ2VzLiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUyOQorbXNnaWQgIk9mZnNldHMgYXJlIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIgorbXNnc3RyICJQb3NpdGllcyB6aWpuIGFsbGVlbiB0b2VnZXN0YWFuIG1ldCAncmF3Jy1pbWFnZXMuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTM0Cittc2dpZCAiTW92ZSBtb2RlIGlzIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIgorbXNnc3RyICJWZXJwbGFhdHNpbmdzbW9kdXMgaXMgYWxsZWVuIHRvZWdlc3RhYW4gbWV0ICdyYXcnLWltYWdlcy4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MzkKK21zZ2lkICJNb3ZlIG1vZGUgcmVxdWlyZXMgYWxsIGRhdGEgbW9kZS4iCittc2dzdHIgIlZlcnBsYWF0c2luZ3Ntb2R1cyB2ZXJlaXN0ICdhbGwtZGF0YSctbW9kdXMiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1NDkKK21zZ2lkICJjaGVja2luZyBpZiBtb3VudGVkIgorbXNnc3RyICJjb250cm9sZSBvcCBhYW5rb3BwZWxpbmciCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1NTYKK21zZ2lkICIiCisiXG4iCisiUnVubmluZyBlMmltYWdlIG9uIGEgUi9XIG1vdW50ZWQgZmlsZXN5c3RlbSBjYW4gcmVzdWx0IGluIGFuXG4iCisiaW5jb25zaXN0ZW50IGltYWdlIHdoaWNoIHdpbGwgbm90IGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuIgorIlVzZSAtZiBvcHRpb24gaWYgeW91IHJlYWxseSB3YW50IHRvIGRvIHRoYXQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJIZXQgZHJhYWllbiB2YW4gJ2UyaW1hZ2UnIG9wIGVlbiBzY2hyaWpmYmFhciBhYW5nZWtvcHBlbGQgYmVzdGFuZHNzeXN0ZWVtXG4iCisia2FuIHJlc3VsdGVyZW4gaW4gZWVuIGluY29uc2lzdGVudGUgaW1hZ2UgZGllIG9uYnJ1aWtiYWFyIGlzIHZvb3IgIgorImRlYnVnZ2luZy5cbiIKKyJHZWJydWlrIG9wdGllICctZicgYWxzIHUgZGl0IGVjaHQgd2lsdCBkb2VuLlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjA4Cittc2dpZCAiUUNPVzIgaW1hZ2UgY2FuIG5vdCBiZSB3cml0dGVuIHRvIHRoZSBzdGRvdXQhXG4iCittc2dzdHIgIkVlbiBRQ09XMi1pbWFnZSBrYW4gbmlldCBuYWFyIHN0YW5kYWFyZHVpdHZvZXIgZ2VzY2hyZXZlbiB3b3JkZW4uXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MTQKK21zZ2lkICJDYW4gbm90IHN0YXQgb3V0cHV0XG4iCittc2dzdHIgIkthbiBzdGF0dXMgdmFuIHVpdHZvZXIgbmlldCBvcHZyYWdlblxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkltYWdlICglcykgaXMgY29tcHJlc3NlZFxuIgorbXNnc3RyICJJbWFnZSAoJXMpIGlzIGdlY29tcHJpbWVlcmQuXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW1hZ2UgKCVzKSBpcyBlbmNyeXB0ZWRcbiIKK21zZ3N0ciAiSW1hZ2UgKCVzKSBpcyB2ZXJzbGV1dGVsZC5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYzMAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gY29udmVydCBxY293MiBpbWFnZSAoJXMpIGludG8gcmF3IGltYWdlICglcykiCittc2dzdHIgIiIKKyJ0aWpkZW5zIGNvbnZlcnRlcmVuIHZhbiBlZW4gcWNvdzItaW1hZ2UgKCVzKSBuYWFyIGVlbiByYXctaW1hZ2ViZXN0YW5kICglcykiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MzkKK21zZ2lkICJUaGUgLWMgb3B0aW9uIG9ubHkgc3VwcG9ydGVkIGluIHJhdyBtb2RlXG4iCittc2dzdHIgIk9wdGllICctYycgd29yZHQgYWxsZWVuIG9uZGVyc3RldW5kIGluICdyYXcnLW1vZHVzLlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjQ0Cittc2dpZCAiVGhlIC1jIG9wdGlvbiBub3Qgc3VwcG9ydGVkIHdoZW4gd3JpdGluZyB0byBzdGRvdXRcbiIKK21zZ3N0ciAiIgorIk9wdGllICctYycgd29yZHQgbmlldCBvbmRlcnN0ZXVuZCBiaWogc2NocmlqdmVuIG5hYXIgc3RhbmRhYXJkdWl0dm9lci5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY1MQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgY2hlY2tfYnVmIgorbXNnc3RyICJ0aWpkZW5zIHJlc2VydmVyZW4gdmFuICdjaGVja19idWYnIgorCisjIFhYWCAgYWRkICdpcycgYmVmb3JlICdvbmx5JworIzogbWlzYy9lMmltYWdlLmM6MTY1NworbXNnaWQgIlRoZSAtcCBvcHRpb24gb25seSBzdXBwb3J0ZWQgaW4gcmF3IG1vZGVcbiIKK21zZ3N0ciAiT3B0aWUgJy1wJyB3b3JkdCBhbGxlZW4gb25kZXJzdGV1bmQgaW4gJ3JhdyctbW9kdXMuXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxvY2tzIGFscmVhZHkgY29udGFpbmVkIHRoZSBkYXRhIHRvIGJlIGNvcGllZFxuIgorbXNnc3RyICIlZCBibG9ra2VuIGJldmF0dGVuIHJlZWRzIGRlIHRlIGtvcGnDq3JlbiBnZWdldmVuc1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgb3BlbiAlc1xuIgorbXNnc3RyICJlMmxhYmVsOiBrYW4gJXMgbmlldCBvcGVuZW5cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBrYW4gZ2VlbiAnc2VlaycgZG9lbiBuYWFyIHN1cGVyYmxva1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciByZWFkaW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogZm91dCB0aWpkZW5zIGxlemVuIHZhbiBzdXBlcmJsb2tcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogbm90IGFuIGV4dDIgZmlsZXN5c3RlbVxuIgorbXNnc3RyICJlMmxhYmVsOiBkaXQgaXMgZ2VlbiBleHQyLWJlc3RhbmRzc3lzdGVlbVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo5NyBtaXNjL3R1bmUyZnMuYzoyMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGxhYmVsIHRvbyBsb25nLCB0cnVuY2F0aW5nLlxuIgorbXNnc3RyICJXYWFyc2NodXdpbmc6IGxhYmVsIGlzIHRlIGxhbmcsIHdvcmR0IGFmZ2VrYXB0LlxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9jayBhZ2FpblxuIgorbXNnc3RyICJlMmxhYmVsOiBrYW4gbmlldCBvcG5pZXV3ICdzZWVrJyBkb2VuIG5hYXIgc3VwZXJibG9rXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciB3cml0aW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogZm91dCB0aWpkZW5zIHNjaHJpanZlbiB2YW4gc3VwZXJibG9rXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjExNyBtaXNjL3R1bmUyZnMuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGUybGFiZWwgZGV2aWNlIFtuZXdsYWJlbF1cbiIKK21zZ3N0ciAiR2VicnVpazogIGUybGFiZWwgYXBwYXJhYXQgW25pZXV3X2xhYmVsXVxuIgorCisjOiBtaXNjL2UydW5kby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyA8dHJhbnNhY3Rpb24gZmlsZT4gPGZpbGVzeXN0ZW0+XG4iCittc2dzdHIgIkdlYnJ1aWs6ICAlcyA8dHJhbnNhY3RpZWJlc3RhbmQ+IDxiZXN0YW5kc3N5c3RlZW0+XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NTIKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIKK21zZ3N0ciAiTGV6ZW4gdmFuIGJlc3RhbmRzc3lzdGVlbWdlZ2V2ZW5zIGlzIG1pc2x1a3QgXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NjIgbWlzYy9lMnVuZG8uYzo4MyBtaXNjL2UydW5kby5jOjEwOCBtaXNjL2UydW5kby5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX2ZldGNoICVzXG4iCittc2dzdHIgIkxlemVuIHZhbiB0cmFuc2FjdGllZ2VnZXZlbnMgaXMgbWlzbHVrdDogJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIKK21zZ3N0ciAiIgorImFhbmtvcHBlbGluZ3N0aWpkIHZhbiBiZXN0YW5kc3N5c3RlZW0ga29tdCBuaWV0IG92ZXJlZW4gbWV0ICV1IHVpdCAiCisidHJhbnNhY3RpZWJlc3RhbmRcbiIKKworIzogbWlzYy9lMnVuZG8uYzo4OQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBVVUlEIGRpZG4ndCBtYXRjaCBcbiIKK21zZ3N0ciAiIgorIlVVSUQncyB2YW4gYmVzdGFuZHNzeXN0ZWVtIGVuIHVpdCB0cmFuc2FjdGllYmVzdGFuZCBrb21lbiBuaWV0IG92ZXJlZW5cbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9vcGVuICVzXG4iCittc2dzdHIgIk9wZW5lbiB2YW4gdHJhbnNhY3RpZWJlc3RhbmQgJXMgaXMgbWlzbHVrdFxuIgorCisjOiBtaXNjL2UydW5kby5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyBiZXBhbGVuIG9mICVzIGFhbmdla29wcGVsZCBpcy5cbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNzUKK21zZ2lkICJlMnVuZG8gc2hvdWxkIG9ubHkgYmUgcnVuIG9uIHVubW91bnRlZCBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICJWb2VyICdlMnVuZG8nIGFsbGVlbiB1aXQgb3AgZWVuIG5pZXQtYWFuZ2Vrb3BwZWxkIGJlc3RhbmRzc3lzdGVlbS5cbiIKKworIzogbWlzYy9lMnVuZG8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXNcbiIKK21zZ3N0ciAiT3BlbmVuIHZhbiAlcyBpcyBtaXNsdWt0XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcGxheWVkIHRyYW5zYWN0aW9uIG9mIHNpemUgJXpkIGF0IGxvY2F0aW9uICVsbHVcbiIKK21zZ3N0ciAiRWVuIHRyYW5zYWN0aWUgbWV0IGdyb290dGUgJXpkIGlzIGFmZ2VzcGVlbGQgb3AgbG9jYXRpZSAlbGx1LlxuIgorCisjOiBtaXNjL2UydW5kby5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgd3JpdGUgJXNcbiIKK21zZ3N0ciAiU2NocmlqdmVuIGlzIG1pc2x1a3Q6ICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBjb3VsZG4ndCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJXQUFSU0NIVVdJTkc6IGthbiAlcyBuaWV0IG9wZW5lbjogJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGJhZCBmb3JtYXQgb24gbGluZSAlZCBvZiAlc1xuIgorbXNnc3RyICJXQUFSU0NIVVdJTkc6IGZvdXRlIGluZGVsaW5nIG9wIHJlZ2VsICVkIHZhbiAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNzAKK21zZ2lkICIiCisiV0FSTklORzogWW91ciAvZXRjL2ZzdGFiIGRvZXMgbm90IGNvbnRhaW4gdGhlIGZzY2sgcGFzc25vXG4iCisiXHRmaWVsZC4gIEkgd2lsbCBrbHVkZ2UgYXJvdW5kIHRoaW5ncyBmb3IgeW91LCBidXQgeW91XG4iCisiXHRzaG91bGQgZml4IHlvdXIgL2V0Yy9mc3RhYiBmaWxlIGFzIHNvb24gYXMgeW91IGNhbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIldBQVJTQ0hVV0lORzogL2V0Yy9mc3RhYiBiZXZhdCBnZWVuIHplc2RlIHZlbGQgKGVlbiBmc2NrLXZvbGdudW1tZXIpLlxuIgorIiAgICBFciB3b3JkdCBudSBvbWhlZW5nZXdlcmt0LCBtYWFyIHUgem91IGRpdCB2ZWxkIGJpalxuIgorIiAgICBkZSBlZXJzdHZvbGdlbmRlIGdlbGVnZW5oZWlkIHRvZSBkaWVuZW4gdGUgdm9lZ2VuLlxuIgorIlxuIgorCisjOiBtaXNjL2ZzY2suYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogJXM6IG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiAlczogbmlldCBnZXZvbmRlblxuIgorCisjOiBtaXNjL2ZzY2suYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIgorbXNnc3RyICIlczogd2FpdDogZ2VlbiBkb2NodGVycHJvY2Vzc2VuIG1lZXI/IT9cbiIKKworIzogbWlzYy9mc2NrLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmcuLi4gJXMgZm9yIGRldmljZSAlcyBleGl0ZWQgd2l0aCBzaWduYWwgJWQuXG4iCittc2dzdHIgIldhYXJzY2h1d2luZzogJXMgdm9vciBhcHBhcmFhdCAlcyB3ZXJkIGJlw6tpbmRpZ2QgbWV0IHNpZ25hYWwgJWQuXG4iCisKKyM6IG1pc2MvZnNjay5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlczogc3RhdHVzIGlzICV4LCBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIgorbXNnc3RyICIlcyAlczogZGUgc3RhdHVzIGlzICV4LCBkaXQgem91IG5vb2l0IHZvb3IgbW9nZW4ga29tZW4uXG4iCisKKyM6IG1pc2MvZnNjay5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5pc2hlZCB3aXRoICVzIChleGl0IHN0YXR1cyAlZClcbiIKK21zZ3N0ciAiQWZnZXNsb3RlbiBtZXQgJXMgKGFmc2x1aXR3YWFyZGUgJWQpLlxuIgorCisjOiBtaXNjL2ZzY2suYzo3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IEVycm9yICVkIHdoaWxlIGV4ZWN1dGluZyBmc2NrLiVzIGZvciAlc1xuIgorbXNnc3RyICIlczogRm91dCAlZCB0aWpkZW5zIHVpdHZvZXJpbmcgdmFuIGZzY2suJXMgdm9vciAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzo3NDIKK21zZ2lkICIiCisiRWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSBmaWxlc3lzdGVtIHR5cGVzIHBhc3NlZCB0byAtdCBtdXN0IGJlIHByZWZpeGVkXG4iCisid2l0aCAnbm8nIG9yICchJy5cbiIKK21zZ3N0ciAiIgorIsOTZiBnZWVuIMOzZiBhbGxlIGJlc3RhbmRzc3N5c3RlZW1zb29ydGVuIGJpaiBvcHRpZSAtdFxuIgorImRpZW5lbiB2b29yYWZnZWdhYW4gdGUgd29yZGVuIGRvb3IgJ25vJyBvZiAnIScuXG4iCisKKyM6IG1pc2MvZnNjay5jOjc2MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlsZXN5c3RlbSB0eXBlc1xuIgorbXNnc3RyICJLYW4gZ2VlbiBnZWhldWdlbiByZXNlcnZlcmVuIHZvb3IgYmVzdGFuZHNzeXN0ZWVtc29vcnRlbi5cbiIKKworIzogbWlzYy9mc2NrLmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogc2tpcHBpbmcgYmFkIGxpbmUgaW4gL2V0Yy9mc3RhYjogYmluZCBtb3VudCB3aXRoIG5vbnplcm8gZnNjayBwYXNzICIKKyJudW1iZXJcbiIKK21zZ3N0ciAiIgorIiVzOiBvbmdlbGRpZ2UgcmVnZWwgaW4gL2V0Yy9mc3RhYiB3b3JkdCBvdmVyZ2VzbGFnZW46XG4iCisiemVzZGUgdmVsZCB2YW4gJ2JpbmQnLWFhbmtvcHBlbGluZyBpcyBuaWV0IG51bCAoZnNjay12b2xnbnVtbWVyKVxuIgorCisjOiBtaXNjL2ZzY2suYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogY2Fubm90IGNoZWNrICVzOiBmc2NrLiVzIG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiBrYW4gJXMgbmlldCBjb250cm9sZXJlbjogZnNjay4lcyBuaWV0IGdldm9uZGVuXG4iCisKKyM6IG1pc2MvZnNjay5jOjk2NworbXNnaWQgIkNoZWNraW5nIGFsbCBmaWxlIHN5c3RlbXMuXG4iCittc2dzdHIgIkFsbGUgYmVzdGFuZHNzeXN0ZW1lbiB3b3JkZW4gZ2Vjb250cm9sZWVyZC5cbiIKKworIzogbWlzYy9mc2NrLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICItLXdhaXRpbmctLSAocGFzcyAlZClcbiIKK21zZ3N0ciAiLS13YWNodGVuLS0gKHZvbGdudW1tZXIgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNzgKK21zZ2lkICIiCisiVXNhZ2U6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZmQgXSBdIFstdCBmc3R5cGVdIFtmcy1vcHRpb25zXSBbZmlsZXN5cyAuLi5dXG4iCittc2dzdHIgIiIKKyJHZWJydWlrOiAgZnNjayBbLUFNTlBSVFZdIFstQyBbZGVzY3JpcHRvcl1dIFstdCBiZXN0YW5kc3N5c3RlZW1zb29ydF1cbiIKKyIgICAgICAgICAgW2Jlc3RhbmRzc3lzdGVlbW9wdGllc10gW2Jlc3RhbmRzc3lzdGVlbS4uLl1cbiIKKworIzogbWlzYy9mc2NrLmM6MTEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdG9vIG1hbnkgZGV2aWNlc1xuIgorbXNnc3RyICIlczogdGUgdmVlbCBhcHBhcmF0ZW5cbiIKKworIzogbWlzYy9mc2NrLmM6MTE1MyBtaXNjL2ZzY2suYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiJXM6IHRlIHZlZWwgYXJndW1lbnRlblxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWYWRsdl0gW2ZpbGVzLi4uXVxuIgorbXNnc3RyICJHZWJydWlrOiAgJXMgWy1SVmFkbHZdIFtiZXN0YW5kLi4uXVxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIlRpamRlbnMgbGV6ZW4gdmFuIHZsYWdnZW4gb3AgJXMiCisKKyM6IG1pc2MvbHNhdHRyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJUaWpkZW5zIGxlemVuIHZhbiB2ZXJzaWUgb3AgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jfC1sIGZpbGVuYW1lXSBbLWIgYmxvY2stc2l6ZV0gWy1DIGNsdXN0ZXItc2l6ZV1cbiIKKyJcdFstaSBieXRlcy1wZXItaW5vZGVdIFstSSBpbm9kZS1zaXplXSBbLUogam91cm5hbC1vcHRpb25zXVxuIgorIlx0Wy1HIGZsZXgtZ3JvdXAtc2l6ZV0gWy1OIG51bWJlci1vZi1pbm9kZXNdXG4iCisiXHRbLW0gcmVzZXJ2ZWQtYmxvY2tzLXBlcmNlbnRhZ2VdIFstbyBjcmVhdG9yLW9zXVxuIgorIlx0Wy1nIGJsb2Nrcy1wZXItZ3JvdXBdIFstTCB2b2x1bWUtbGFiZWxdIFstTSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5XVxuIgorIlx0Wy1PIGZlYXR1cmVbLC4uLl1dIFstciBmcy1yZXZpc2lvbl0gWy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV1cbiIKKyJcdFstdCBmcy10eXBlXSBbLVQgdXNhZ2UtdHlwZSBdIFstVSBVVUlEXSBbLWpucXZERktTVl0gZGV2aWNlIFtibG9ja3MtIgorImNvdW50XVxuIgorbXNnc3RyICIiCisiR2VicnVpazogICVzIFstYiBibG9rZ3Jvb3R0ZV0gWy1jfC1sIGJlc3RhbmRzbmFhbV0gWy1DIGNsdXN0ZXJncm9vdHRlXVxuIgorIiAgICAgICAgICBbLWcgYmxva2tlbl9wZXJfZ3JvZXBdIFstRyBmbGV4Z3JvZXBncm9vdHRlXSBbLWkgYnl0ZXNfcGVyX2lub2RlXVxuIgorIiAgICAgICAgICBbLUkgaW5vZGUtZ3Jvb3R0ZV0gWy1KIGpvdXJuYWwtb3B0aWVzXSBbLUwgbGFiZWxdIFstTiAiCisiYWFudGFsX2lub2Rlc11cbiIKKyIgICAgICAgICAgWy1tIHBlcmNlbnRhZ2VfZ2VyZXNlcnZlZXJkZV9ibG9ra2VuXSBbLU0gIgorImxhYXRzdGVfYWFua29wcGVsaW5nc3B1bnRdXG4iCisiICAgICAgICAgIFstbyBuYWFtX3Zhbl9hYW5tYWtlbmRlX2Jlc3R1cmluZ3NzeXRlZW1dIFstTyBmdW5jdGllWywuLi5dXSBbLVUgIgorIlVVSURdXG4iCisiICAgICAgICAgIFstciBiZXN0YW5kc3N5c3RlZW12ZXJzaWVdIFstdCBiZXN0YW5kc3N5c3RlZW1zb29ydF0gWy1UICIKKyJnZWJydWlrc3R5cGVdXG4iCisiICAgICAgICAgIFstRSB1aXRnZWJyZWlkZV9vcHRpZVssLi4uXV0gWy1qbnF2REZLU1ZdICBhcHBhcmFhdCAgIgorIlthYW50YWxfYmxva2tlbl1cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUnVubmluZyBjb21tYW5kOiAlc1xuIgorbXNnc3RyICJVaXRnZXZvZXJkZSBvcGRyYWNodCBpczogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJ1biAnJXMnIgorbXNnc3RyICJ0aWpkZW5zIHVpdHZvZXJpbmcgdmFuICclcyciCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYzCittc2dpZCAid2hpbGUgcHJvY2Vzc2luZyBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBwcm9ncmFtIgorbXNnc3RyICJ0aWpkZW5zIHZlcndlcmtlbiB2YW4gZGUgZ2VtYWFrdGUgbGlqc3QgdmFuIHNsZWNodGUgYmxva2tlbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWQgaW4gcHJpbWFyeSBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3IgYXJlYSBiYWQuXG4iCittc2dzdHIgIiIKKyJCbG9rICVkIGluIGhldCBwcmltYWlyZSBzdXBlcmJsb2sgb2YgZGUgZ3JvZXBzYmVzY2hyaWp2ZXJzIGlzIHNsZWNodC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2tzICV1IHRocm91Z2ggJXUgbXVzdCBiZSBnb29kIGluIG9yZGVyIHRvIGJ1aWxkIGEgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorIkJsb2trZW4gJXUgdG90IGVuIG1ldCAldSBtb2V0ZW4gZ29lZCB6aWpuXG4iCisib20gZWVuIGJlc3RhbmRzc3lzdGVlbSBhYW4gdGUga3VubmVuIG1ha2VuLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI5NQorbXNnaWQgIkFib3J0aW5nLi4uLlxuIgorbXNnc3RyICJHZXN0b3B0Li4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB0aGUgYmFja3VwIHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvcnMgYXQgYmxvY2sgJXUgY29udGFpblxuIgorIlx0YmFkIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIldhYXJzY2h1d2luZzogZGUgcmVzZXJ2ZWtvcGllIHZhbiBoZXQgc3VwZXJibG9rIGVuIGRlIGdyb2Vwc2Jlc2NocmlqdmVycyxcbiIKKyJiZWdpbm5lbmQgYmlqIGJsb2sgJXUsIGJldmF0IHNsZWNodGUgYmxva2tlbi5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzozMzQKK21zZ2lkICJ3aGlsZSBtYXJraW5nIGJhZCBibG9ja3MgYXMgdXNlZCIKK21zZ3N0ciAidGlqZGVucyBoZXQgbWFya2VyZW4gdmFuIHNsZWNodGUgYmxva2tlbiAoYWxzIHppam5kZSBpbiBnZWJydWlrKSIKKworIzogbWlzYy9ta2UyZnMuYzozODYKK21zZ2lkICJXcml0aW5nIGlub2RlIHRhYmxlczogIgorbXNnc3RyICJTY2hyaWp2ZW4gdmFuIGlub2RldGFiZWxsZW46ICIKKworIzogbWlzYy9ta2UyZnMuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCB3cml0ZSAlZCBibG9ja3MgaW4gaW5vZGUgdGFibGUgc3RhcnRpbmcgYXQgJWxsdTogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIkthbiAlZCBibG9ra2VuIGluIGlub2RldGFiZWwgbmlldCBzY2hyaWp2ZW4sIGJlZ2lubmVuZCBiaWogJWxsdTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0MjEgbWlzYy9ta2UyZnMuYzoyNDc5IG1pc2MvbWtlMmZzLmM6Mjc2NAorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgInZvbHRvb2lkICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDMyCittc2dpZCAid2hpbGUgY3JlYXRpbmcgcm9vdCBkaXIiCittc2dzdHIgInRpamRlbnMgYWFubWFrZW4gdmFuIGhvb2ZkbWFwIgorCisjOiBtaXNjL21rZTJmcy5jOjQzOQorbXNnaWQgIndoaWxlIHJlYWRpbmcgcm9vdCBpbm9kZSIKK21zZ3N0ciAidGlqZGVucyBsZXplbiB2YW4gaG9vZmQtaW5vZGUiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDUxCittc2dpZCAid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIKK21zZ3N0ciAidGlqZGVucyB6ZXR0ZW4gdmFuIGVpZ2VuYWFyIHZhbiBob29mZC1pbm9kZSIKKworIzogbWlzYy9ta2UyZnMuYzo0NjkKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyAvbG9zdCtmb3VuZCIKK21zZ3N0ciAidGlqZGVucyBhYW5tYWtlbiB2YW4gL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDc2Cittc2dpZCAid2hpbGUgbG9va2luZyB1cCAvbG9zdCtmb3VuZCIKK21zZ3N0ciAidGlqZGVucyB6b2VrZW4gdmFuIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQ4OQorbXNnaWQgIndoaWxlIGV4cGFuZGluZyAvbG9zdCtmb3VuZCIKK21zZ3N0ciAidGlqZGVucyB1aXRicmVpZGVuIHZhbiAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo1MDQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAidGlqZGVucyB6ZXR0ZW4gdmFuIHNsZWNodGVibG9ra2VuLWlub2RlIgorCisjOiBtaXNjL21rZTJmcy5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJPdXQgb2YgbWVtb3J5IGVyYXNpbmcgc2VjdG9ycyAlZC0lZFxuIgorbXNnc3RyICJPbnZvbGRvZW5kZSBnZWhldWdlbiB0aWpkZW5zIHdpc3NlbiB2YW4gc2VjdG9yZW4gJWQtJWQuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrIDA6ICVzXG4iCittc2dzdHIgIldhYXJzY2h1d2luZzoga2FuIGJsb2sgMCBuaWV0IGxlemVuOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgZXJhc2Ugc2VjdG9yICVkOiAlc1xuIgorbXNnc3RyICJXYWFyc2NodXdpbmc6IGthbiBzZWN0b3IgJWQgbmlldCB3aXNzZW46ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTczCittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAidGlqZGVucyBpbml0aWFsaXNlcmVuIHZhbiBoZXQgam91cm5hbC1zdXBlcmJsb2siCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgxCittc2dpZCAiWmVyb2luZyBqb3VybmFsIGRldmljZTogIgorbXNnc3RyICJOdWxtYWtlbiB2YW4gam91cm5hbC1hcHBhcmFhdDogIgorCisjOiBtaXNjL21rZTJmcy5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGpvdXJuYWwgZGV2aWNlIChibG9jayAlbGx1LCBjb3VudCAlZCkiCittc2dzdHIgInRpamRlbnMgbnVsbWFrZW4gdmFuIGpvdXJuYWwtYXBwYXJhYXQgKGJsb2sgJWxsdSwgbnVtbWVyICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzo2MTEKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAidGlqZGVucyBzY2hyaWp2ZW4gdmFuIGpvdXJuYWwtc3VwZXJibG9rIgorCisjOiBtaXNjL21rZTJmcy5jOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBmaWxlc3lzdGVtIHdpdGggJWxsdSAlZGsgYmxvY2tzIGFuZCAldSBpbm9kZXNcbiIKK21zZ3N0ciAiIgorIkFhbm1ha2VuIHZhbiBiZXN0YW5kc3N5c3RlZW0gbWV0ICVsbHUgYmxva2tlbiAodmFuICVkSykgZW4gJXUgaW5vZGVzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2FybmluZzogJWxsdSBibG9ja3MgdW51c2VkLlxuIgorIlxuIgorbXNnc3RyICIiCisiV2FhcnNjaHV3aW5nOiAlbGx1IG9uZ2VicnVpa3RlIGJsb2trZW4uXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gbGFiZWw9JXNcbiIKK21zZ3N0ciAiQmVzdGFuZHNzeXN0ZWVtbGFiZWw9JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiT1MgdHlwZTogJXNcbiIKK21zZ3N0ciAiU29vcnQgYmVzdHVyaW5nc3N5c3RlZW06ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiQmxva2dyb290dGU9JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2x1c3RlciBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIkNsdXN0ZXJncm9vdHRlPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyYWdtZW50IHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiRnJhZ21lbnRncm9vdHRlPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0cmlkZT0ldSBibG9ja3MsIFN0cmlwZSB3aWR0aD0ldSBibG9ja3NcbiIKK21zZ3N0ciAiJ3N0cmlkZSc9JXUgYmxva2tlbiwgJ3N0cmlwZSctYnJlZWR0ZT0ldSBibG9ra2VuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcywgJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXUgaW5vZGVzLCAlbGx1IGJsb2trZW5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSBibG9ja3MgKCUyLjJmJSUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlclxuIgorbXNnc3RyICIlbGx1IGJsb2trZW4gKCUyLjJmJSUpIGdlcmVzZXJ2ZWVyZCB2b29yIHN5c3RlZW1iZWhlZXJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QgZGF0YSBibG9jaz0ldVxuIgorbXNnc3RyICJFZXJzdGUgZ2VnZXZlbnNibG9rPSV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJvb3QgZGlyZWN0b3J5IG93bmVyPSV1OiV1XG4iCittc2dzdHIgIkhvb2ZkbWFwLWVpZ2VuYWFyPSV1OiV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9JWx1XG4iCittc2dzdHIgIk1heGltdW0gYWFudGFsIGJlc3RhbmRzc3lzdGVlbWJsb2trZW49JWx1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3Vwc1xuIgorbXNnc3RyICIldSBibG9rZ3JvZXBlblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIldSBibG9rZ3JvZXBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgY2x1c3RlcnMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGJsb2trZW4gcGVyIGdyb2VwLCAldSBjbHVzdGVycyBwZXIgZ3JvZXBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgZnJhZ21lbnRzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBibG9ra2VuIHBlciBncm9lcCwgJXUgZnJhZ21lbnRlbiBwZXIgZ3JvZXBcbiIKKworIyBzcmMvbWFpbi5jOjQyNQorIzogbWlzYy9ta2UyZnMuYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBpbm9kZXMgcGVyIGdyb2VwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gVVVJRDogJXNcbiIKK21zZ3N0ciAiQmVzdGFuZHNzeXN0ZWVtLVVVSUQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njg5Cittc2dpZCAiU3VwZXJibG9jayBiYWNrdXBzIHN0b3JlZCBvbiBibG9ja3M6ICIKK21zZ3N0ciAiU3VwZXJibG9rcmVzZXJ2ZWtvcGllw6tuIHppam4gb3BnZXNsYWdlbiBpbiBibG9ra2VuOiAiCisKKyMgWFhYICBtYW5wYWdlIGRvZXMgbm90IG1lbnRpb24gLU8gNjRiaXQKKyM6IG1pc2MvbWtlMmZzLmM6NzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzICctTyA2NGJpdCdcbiIKK21zZ3N0ciAiJXMgdmVyZWlzdCAnLU8gNjRiaXQnXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbXVzdCBiZSBiZWZvcmUgJ3Jlc2l6ZT0ldSdcbiIKK21zZ3N0ciAiJyVzJyBtb2V0IHbDs8OzciAncmVzaXplPSV1JyBzdGFhblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjc4NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRlc2Nfc2l6ZTogJyVzJ1xuIgorbXNnc3RyICJPbmdlbGRpZ2UgJ2Rlc2Nfc2l6ZSc6ICclcydcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvZmZzZXQ6ICVzXG4iCittc2dzdHIgIk9uZ2VsZGlnZSBwb3NpdGllOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgxMiBtaXNjL3R1bmUyZnMuYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW1wX3VwZGF0ZV9pbnRlcnZhbDogJXNcbiIKK21zZ3N0ciAiT25nZWxkaWcgJ21tcF91cGRhdGVfaW50ZXJ2YWwnOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICMgb2YgYmFja3VwIHN1cGVyYmxvY2tzOiAlc1xuIgorbXNnc3RyICJPbmdlbGRpZyBhYW50YWwgcmVzZXJ2ZWtvcGllLXN1cGVyYmxva2tlbjogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJPbmdlbGRpZyBhcmd1bWVudCB2YW4gJ3N0cmlkZSc6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaXBlLXdpZHRoIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiT25nZWxkaWcgYXJndW1lbnQgdmFuICdzdHJpcGVfd2lkdGgnOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIk9uZ2VsZGlnIGFyZ3VtZW50IHZhbiAncmVzaXplJzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4OTMKK21zZ2lkICJUaGUgcmVzaXplIG1heGltdW0gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGZpbGVzeXN0ZW0gc2l6ZS5cbiIKK21zZ3N0ciAiIgorIkRlIG1heGltdW0gZ3Jvb3R0ZSBtb2V0IGdyb3RlciB6aWpuIGRhbiBkZSBodWlkaWdlIGJlc3RhbmRzc3lzdGVlbWdyb290dGUuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTE3Cittc2dpZCAiT24tbGluZSByZXNpemluZyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiTGl2ZSB2ZXJncm90ZW4gb2YgdmVya2xlaW5lbiBpcyBuaWV0IG1vZ2VsaWprIG9wIGVlbiBiZXN0YW5kc3N5c3RlZW0gdmFuICIKKyJ2ZXJzaWUgMC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo5NDQgbWlzYy9ta2UyZnMuYzo5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByb290X293bmVyOiAnJXMnXG4iCittc2dzdHIgIk9uZ2VsZGlnZSBob29mZG1hcC1laWdlbmFhcjogJyVzJ1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHF1b3RhdHlwZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIk9uZ2VsZGlnIGFyZ3VtZW50IHZhbiAncXVvdGF0eXBlJzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdG1tcF91cGRhdGVfaW50ZXJ2YWw9PGludGVydmFsPlxuIgorIlx0bnVtX2JhY2t1cF9zYj08MHwxfDI+XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgZGF0YSBjaHVuayBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGUtd2lkdGg9PFJBSUQgc3RyaWRlICogZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHRvZmZzZXQ9PG9mZnNldCB0byBjcmVhdGUgdGhlIGZpbGUgc3lzdGVtPlxuIgorIlx0cmVzaXplPTxyZXNpemUgbWF4aW11bSBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHBhY2tlZF9tZXRhX2Jsb2Nrcz08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdGxhenlfaXRhYmxlX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRsYXp5X2pvdXJuYWxfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdHJvb3RfdWlkPTx1aWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisiXHRyb290X2dpZD08Z2lkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0dGVzdF9mc1xuIgorIlx0ZGlzY2FyZFxuIgorIlx0bm9kaXNjYXJkXG4iCisiXHRxdW90YXR5cGU9PHVzciBPUiBncnA+XG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPbmdlbGRpZ2Ugb3B0aWUgb3BnZWdldmVuOiAlc1xuIgorIlxuIgorIlVpdGdlYnJlaWRlIG9wdGllcyB3b3JkZW4gZ2VzY2hlaWRlbiBkb29yIGtvbW1hJ3M7XG4iCisiaHVuIGFyZ3VtZW50IHdvcmR0IHZvb3JhZmdlZ2FhbiBkb29yIGVlbiAnPSctdGVrZW4uXG4iCisiXG4iCisiR2VsZGlnZSB1aXRnZWJyZWlkZSBvcHRpZXMgemlqbjpcbiIKKyIgICAgbW1wX3VwZGF0ZV9pbnRlcnZhbD08aW50ZXJ2YWw+XG4iCisiICAgIG51bV9iYWNrdXBfc2I9PDB8MXwyPlxuIgorIiAgICBzdHJpZGU9PGFhbnRhbCBibG9ra2VuIGRhdCBzYW1lbiBwZXIgUkFJRC1zY2hpamYgd29yZHQgZ2VsZXplbi8iCisiZ2VzY2hyZXZlbj5cbiIKKyIgICAgc3RyaXBlX3dpZHRoPTxhYW50YWwgYmxva2tlbiBwZXIgc3RyaXBlPiAobWVlc3RhbCBzdHJpZGUgw5cgYWFudGFsICIKKyJzY2hpanZlbilcbiIKKyIgICAgb2Zmc2V0PTxwb3NpdGllIHdhYXJvcCBoZXQgYmVzdGFuZHNzeXN0ZWVtIHRlIGJlZ2lubmVuPlxuIgorIiAgICByZXNpemU9PG1heGltdW0gZ3Jvb3R0ZSB2YW4gYmVzdGFuZHNzeXN0ZWVtIGluIGJsb2trZW4+XG4iCisiICAgIHBhY2tlZF9tZXRhX2Jsb2Nrcz08MCB2b29yIHVpdHNjaGFrZWxlbiwgMSB2b29yIGluc2NoYWtlbGVuPlxuIgorIiAgICBsYXp5X2l0YWJsZV9pbml0PTwwIHZvb3IgdWl0c2NoYWtlbGVuLCAxIHZvb3IgaW5zY2hha2VsZW4+XG4iCisiICAgIGxhenlfam91cm5hbF9pbml0PTwwIHZvb3IgdWl0c2NoYWtlbGVuLCAxIHZvb3IgaW5zY2hha2VsZW4+XG4iCisiICAgIHJvb3RfdWlkPTxVSUQgdmFuIGhvb2ZkbWFwPlxuIgorIiAgICByb290X2dpZD08R0lEIHZhbiBob29mZG1hcD5cbiIKKyIgICAgdGVzdF9mc1xuIgorIiAgICBkaXNjYXJkXG4iCisiICAgIG5vZGlzY2FyZFxuIgorIiAgICBxdW90YXR5cGU9PHVzciBPRiBncnA+XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogUkFJRCBzdHJpcGUtd2lkdGggJXUgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2Ygc3RyaWRlICV1LlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiV2FhcnNjaHV3aW5nOiAnc3RyaXBlJy1icmVlZHRlICV1IGlzIGdlZW4gZXZlbiB2ZWVsdm91ZCB2YW4gJ3N0cmlkZScgJXUuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIG1rZTJmcyBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIlN5bnRheGZvdXQgaW4gbWtlMmZzLWNvbmZpZ3VyYXRpZWJlc3RhbmQgKCVzLCByZWdlbCAjJWQpXG4iCisiICAgICVzXG4iCisKKyMgRGl0IGdhYXQgb3ZlciBoZXQgYXJndW1lbnQgdmFuIG9wdGllIC1PLgorIzogbWlzYy9ta2UyZnMuYzoxMDY4IG1pc2MvdHVuZTJmcy5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGZpbGVzeXN0ZW0gb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiT25nZWxkaWdlIGJlc3RhbmRzc3lzdGVlbWZ1bmN0aWU6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA4MCBtaXNjL3R1bmUyZnMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtb3VudCBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJPbmdlbGRpZ2UgYWFua29wcGVsaW5nc29wdGllOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIllvdXIgbWtlMmZzLmNvbmYgZmlsZSBkb2VzIG5vdCBkZWZpbmUgdGhlICVzIGZpbGVzeXN0ZW0gdHlwZS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlV3IG1rZTJmcy5jb25mIGRlZmluaWVlcnQgZ2VlbiBiZXN0YW5kc3N5c3RlZW10eXBlICVzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjQKK21zZ2lkICIiCisiWW91IHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBhbiB1cGRhdGVkIG1rZTJmcy5jb25mIGZpbGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJVIGRpZW50IHdhYXJzY2hpam5saWprIGVlbiBuaWV1d2VyIG1rZTJmcy5jb25mLWJlc3RhbmQgdGUgaW5zdGFsbGVyZW4uXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyOAorbXNnaWQgIkFib3J0aW5nLi4uXG4iCittc2dzdHIgIkdlc3RvcHQuLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgZnNfdHlwZSAlcyBpcyBub3QgZGVmaW5lZCBpbiBta2UyZnMuY29uZlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiV2FhcnNjaHV3aW5nOiBiZXN0YW5kc3N5c3RlZW10eXBlICVzIGlzIG5pZXQgZ2VkZWZpbmllZXJkIGluIG1rZTJmcy5jb25mXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ0OQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IFBBVEguXG4iCittc2dzdHIgIkthbiBnZWVuIGdlaGV1Z2VuIHJlc2VydmVyZW4gdm9vciBuaWV1d2UgUEFUSC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGluaXQgcHJvZmlsZSBzdWNjZXNzZnVsbHkgKGVycm9yOiAlbGQpLlxuIgorbXNnc3RyICJJbml0aWFsaXNlcmVuIHZhbiBwcm9maWxlIGlzIG1pc2x1a3QgKGZvdXQ6ICVsZCkuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUyMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrIHNpemUgLSAlcyIKK21zZ3N0ciAib25nZWxkaWdlIGJsb2tncm9vdHRlOiAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgdXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIKK21zZ3N0ciAiIgorIldhYXJzY2h1d2luZzogYmxva2dyb290dGUgJWQgaXMgb3AgZGUgbWVlc3RlIHN5c3RlbWVuIG5pZXQgYnJ1aWtiYWFyLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjbHVzdGVyIHNpemUgLSAlcyIKK21zZ3N0ciAib25nZWxkaWdlIGNsdXN0ZXJncm9vdHRlOiAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTUzCittc2dpZCAiJy1SJyBpcyBkZXByZWNhdGVkLCB1c2UgJy1FJyBpbnN0ZWFkIgorbXNnc3RyICInb3B0aWUgJy1SJyBpcyB2ZXJvdWRlcmQ7IGdlYnJ1aWsgJy1FJyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTY1Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGJsb2NrcyBwZXIgZ3JvdXAiCittc2dzdHIgIk9uZ2VsZGlnIGFhbnRhbCBibG9ra2VuIHBlciBncm9lcCIKKworIzogbWlzYy9ta2UyZnMuYzoxNTcwCittc2dpZCAiYmxvY2tzIHBlciBncm91cCBtdXN0IGJlIG11bHRpcGxlIG9mIDgiCittc2dzdHIgImFyZ3VtZW50IHZhbiAtZyAoYmxva2tlbiBwZXIgZ3JvZXApIGlzIGdlZW4gdmVlbHZvdWQgdmFuIDgiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU3OAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBmbGV4X2JnIHNpemUiCittc2dzdHIgIk9uZ2VsZGlnIGdldGFsIHZvb3IgbWV0YWdyb2VwZ3Jvb3R0ZSIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg0Cittc2dpZCAiZmxleF9iZyBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyIgorbXNnc3RyICJNZXRhZ3JvZXBncm9vdHRlIG1vZXQgZWVuIG1hY2h0IHZhbiAyIHppam4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmbGV4X2JnIHNpemUgKCVsdSkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMl4zMSIKK21zZ3N0ciAiTWV0YWdyb2VwZ3Jvb3R0ZSAoJWx1KSBtb2V0IGtsZWluZXIgemlqbiBkYW4gb2YgZ2VsaWprIHppam4gYWFuIDJeMzEiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHJhdGlvICVzIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAib25nZWxkaWdlIGlub2RldmVyaG91ZGluZyAlcyAobWluICVkIC8gbWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoxNjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICJvbmdlbGRpZ2UgZ3Jvb3R0ZSB2YW4gaW5vZGU6ICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MjMKK21zZ2lkICIiCisiV2FybmluZzogLUsgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLiBVc2UgJy1FICIKKyJub2Rpc2NhcmQnIGV4dGVuZGVkIG9wdGlvbiBpbnN0ZWFkIVxuIgorbXNnc3RyICIiCisiV2FhcnNjaHV3aW5nOiBvcHRpZSAnLUsnIGlzIHZlcm91ZGVyZCBlbiB6b3UgdSBuaWV0IG1lZXIgbW9ldGVuIGdlYnJ1aWtlbjtcbiIKKyJnZWJydWlrIGluIHBsYWF0cyBkYWFydmFuIGRlIHVpdGdlYnJlaWRlIG9wdGllICctRSBub2Rpc2NhcmQnLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MzQKK21zZ2lkICJpbiBtYWxsb2MgZm9yIGJhZF9ibG9ja3NfZmlsZW5hbWUiCittc2dzdHIgIm9udm9sZG9lbmRlIGdlaGV1Z2VuIGluIGJhZF9ibG9ja3NfZmlsZW5hbWUoKSIKKworIzogbWlzYy9ta2UyZnMuYzoxNjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlcyIKK21zZ3N0ciAib25nZWxkaWcgcGVyY2VudGFnZSBnZXJlc2VydmVlcmRlIGJsb2trZW46ICVzIgorCisjIGxpYi9wcmFuZ2UuYzoyOTkgbGliL3ByYW5nZS5jOjMxNgorIzogbWlzYy9ta2UyZnMuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW0gaW5vZGVzIC0gJXMiCittc2dzdHIgIm9uZ2VsZGlnIGFhbnRhbCBpbm9kZXM6ICVzIgorCisjIGxpYi9wcmFuZ2UuYzoyOTkgbGliL3ByYW5nZS5jOjMxNgorIzogbWlzYy9ta2UyZnMuYzoxNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXZpc2lvbiBsZXZlbCAtICVzIgorbXNnc3RyICJvbmdlbGRpZyB2ZXJzaWVudW1tZXI6ICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSByZXZpc2lvbiAlZCIKK21zZ3N0ciAidGlqZGVucyBhYW5tYWtlbiB2YW4gdmVyc2llICVkIgorCisjOiBtaXNjL21rZTJmcy5jOjE2OTgKK21zZ2lkICJUaGUgLXQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiT3B0aWUgJy10JyBtYWcgc2xlY2h0cyDDqcOpbiBrZWVyIGdlZ2V2ZW4gd29yZGVuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MDYKK21zZ2lkICJUaGUgLVQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiT3B0aWUgJy1UJyBtYWcgc2xlY2h0cyDDqcOpbiBrZWVyIGdlZ2V2ZW4gd29yZGVuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NTkgbWlzYy9ta2UyZnMuYzoyODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgZGV2aWNlICVzXG4iCittc2dzdHIgInRpamRlbnMgb3BlbmVuIHZhbiBqb3VybmFsLWFwcGFyYWF0ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGRldiBibG9ja3NpemUgKCVkKSBzbWFsbGVyIHRoYW4gbWluaW11bSBibG9ja3NpemUgJWRcbiIKK21zZ3N0ciAiIgorIkJsb2tncm9vdHRlICVkIHZhbiBqb3VybmFsLWFwcGFyYWF0IGlzIGtsZWluZXIgZGFuIG1pbmltdW0gYmxva2dyb290dGUgJWQuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBqb3VybmFsIGRldmljZSdzIGJsb2Nrc2l6ZTogJWRcbiIKK21zZ3N0ciAiQmxva2dyb290dGUgdmFuIGhldCBqb3VybmFsLWFwcGFyYWF0IHdvcmR0IGdlYnJ1aWt0OiAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9ja3MgJyVzJyBvbiBkZXZpY2UgJyVzJyIKK21zZ3N0ciAib25nZWxkaWdlIGJsb2trZW4gJyVzJyBvcCBhcHBhcmFhdCAnJXMnIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MDQKK21zZ2lkICJmaWxlc3lzdGVtIgorbXNnc3RyICJiZXN0YW5kc3N5c3RlZW0iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgxNyByZXNpemUvbWFpbi5jOjM5NQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBzaXplIgorbXNnc3RyICJ0aWpkZW5zIGJlcGFsZW4gdmFuIGdyb290dGUgdmFuIGJlc3RhbmRzc3lzdGVlbSIKKworIzogbWlzYy9ta2UyZnMuYzoxODIzCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKyJLYW4gZGUgZ3Jvb3R0ZSB2YW4gaGV0IGFwcGFyYWF0IG5pZXQgYmVwYWxlbjtcbiIKKyJ1IGRpZW50IHplbGYgZGUgZ3Jvb3R0ZSB2YW4gaGV0IGJlc3RhbmRzc3lzdGVlbSBhYW4gdGUgZ2V2ZW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgzMAorbXNnaWQgIiIKKyJEZXZpY2Ugc2l6ZSByZXBvcnRlZCB0byBiZSB6ZXJvLiAgSW52YWxpZCBwYXJ0aXRpb24gc3BlY2lmaWVkLCBvclxuIgorIlx0cGFydGl0aW9uIHRhYmxlIHdhc24ndCByZXJlYWQgYWZ0ZXIgcnVubmluZyBmZGlzaywgZHVlIHRvXG4iCisiXHRhIG1vZGlmaWVkIHBhcnRpdGlvbiBiZWluZyBidXN5IGFuZCBpbiB1c2UuICBZb3UgbWF5IG5lZWQgdG8gcmVib290XG4iCisiXHR0byByZS1yZWFkIHlvdXIgcGFydGl0aW9uIHRhYmxlLlxuIgorbXNnc3RyICIiCisiQXBwYXJhYXRncm9vdHRlIHdvcmR0IGdlcmFwcG9ydGVlcmQgYWxzIG51bC4gIERpdCBiZXRla2VudCBkYXQgZXIgZWVuXG4iCisiICAgIG9uZ2VsZGlnZSBwYXJ0aXRpZSBpcyBvcGdlZ2V2ZW4sIG9mIGRhdCBkZSBwYXJ0aXRpZXRhYmVsIG5pZXQgb3BuaWV1d1xuIgorIiAgICBnZWxlemVuIGlzIG5hIGdlYnJ1aWsgdmFuIGVlbiBwYXJ0aXRpb25lcmluZ3Nwcm9ncmFtbWEsIHdlZ2VucyBoZXRcbiIKKyIgICAgaW4tZ2VicnVpay16aWpuIHZhbiBlZW4gZ2V3aWp6aWdkZSBwYXJ0aXRpZS4gIE1vZ2VsaWprIGRpZW50IHUgdXdcbiIKKyIgICAgY29tcHV0ZXIgdGUgaGVyc3RhcnRlbiBvbSBkZSBqdWlzdGUgcGFydGl0aWV0YWJlbCB0ZSB2ZXJrcmlqZ2VuLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NDcKK21zZ2lkICJGaWxlc3lzdGVtIGxhcmdlciB0aGFuIGFwcGFyZW50IGRldmljZSBzaXplLiIKK21zZ3N0ciAiQmVzdGFuZHNzeXN0ZWVtIGlzIGdyb3RlciBkYW4gZGUgc2NoaWpuYmFyZSBhcHBhcmFhdGdyb290dGUuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NjcKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZnMgdHlwZXMgbGlzdFxuIgorbXNnc3RyICJWZXJ3ZXJrZW4gdmFuIGxpanN0IG1ldCBiZXN0YW5kc3N5c3RlZW1zb29ydGVuIGlzIG1pc2x1a3RcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTA4Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBoYXJkd2FyZSBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAidGlqZGVucyBiZXBhbGVuIHZhbiBkZSBoYXJkd2FyZS1zZWN0b3Jncm9vdHRlIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MTQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHBoeXNpY2FsIHNlY3RvciBzaXplIgorbXNnc3RyICJ0aWpkZW5zIGJlcGFsZW4gdmFuIGRlIGZ5c2lla2Ugc2VjdG9yZ3Jvb3R0ZSIKKworIzogbWlzYy9ta2UyZnMuYzoxOTQ2Cittc2dpZCAid2hpbGUgc2V0dGluZyBibG9ja3NpemU7IHRvbyBzbWFsbCBmb3IgZGV2aWNlXG4iCittc2dzdHIgInRpamRlbnMgaW5zdGVsbGVuIHZhbiBkZSBibG9rZ3Jvb3R0ZTsgdGUga2xlaW4gdm9vciBhcHBhcmFhdFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNwZWNpZmllZCBibG9ja3NpemUgJWQgaXMgbGVzcyB0aGFuIGRldmljZSBwaHlzaWNhbCBzZWN0b3JzaXplICVkXG4iCittc2dzdHIgIiIKKyJXYWFyc2NodXdpbmc6IGRlIGdlZ2V2ZW4gYmxva2dyb290dGUgJWQgaXMga2xlaW5lciBkYW4gZGUgZnlzaWVrZSAiCisic2VjdG9yZ3Jvb3R0ZSAlZCB2YW4gaGV0IGFwcGFyYWF0XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFNpemUgb2YgZGV2aWNlICgweCVsbHggYmxvY2tzKSAlcyB0b28gYmlnIHRvIGJlIGV4cHJlc3NlZFxuIgorIlx0aW4gMzIgYml0cyB1c2luZyBhIGJsb2Nrc2l6ZSBvZiAlZC5cbiIKK21zZ3N0ciAiIgorIiVzOiBEZSBncm9vdHRlICgweCVsbHggYmxva2tlbikgdmFuIGFwcGFyYWF0ICVzIGthbiBuaWV0IHVpdGdlZHJ1a3RcbiIKKyIgICAgd29yZGVuIGluIDMyIGJpdHMgYmlqIGVlbiBibG9rZ3Jvb3R0ZSB2YW4gJWQuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk5MQorbXNnaWQgImZzX3R5cGVzIGZvciBta2UyZnMuY29uZiByZXNvbHV0aW9uOiAiCittc2dzdHIgIkxpanN0IG1ldCBiZXN0YW5kc3N5c3RlZW1zb29ydGVuIHZvb3IgbWtlMmZzLmNvbmY6ICIKKworIzogbWlzYy9ta2UyZnMuYzoxOTk4Cittc2dpZCAiRmlsZXN5c3RlbSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiRXh0cmEgZnVuY3RpZXMgd29yZGVuIG5pZXQgb25kZXJzdGV1bmQgb3AgZWVuIGJlc3RhbmRzc3lzdGVlbSB2YW4gdmVyc2llIDAuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAwNgorbXNnaWQgIlNwYXJzZSBzdXBlcmJsb2NrcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiU2NoYWFyc2Ugc3VwZXJibG9ra2VuIHppam4gbmlldCBtb2dlbGlqayBvcCBlZW4gYmVzdGFuZHNzeXN0ZWVtIHZhbiB2ZXJzaWUgIgorIjAuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAxOAorbXNnaWQgIkpvdXJuYWxzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIkVlbiBqb3VybmFsIGlzIG5pZXQgbW9nZWxpamsgb3AgZWVuIGJlc3RhbmRzc3lzdGVlbSB2YW4gdmVyc2llIDAuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAzMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJWxmIgorbXNnc3RyICJvbmdlbGRpZyBwZXJjZW50YWdlIGdlcmVzZXJ2ZWVyZGUgYmxva2tlbjogJWxmIgorCisjIFhYWCAgb3B0aW9uIHNob3VsZCAnLU8gZXh0ZW50Jywgc2luZ3VsYXIKKyM6IG1pc2MvbWtlMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJFeHRlbnRzIE1VU1QgYmUgZW5hYmxlZCBmb3IgYSA2NC1iaXQgZmlsZXN5c3RlbS4gIFBhc3MgLU8gZXh0ZW50cyB0byAiCisicmVjdGlmeS5cbiIKK21zZ3N0ciAiIgorIkV4dGVudHMgTU9FVEVOIGluZ2VzY2hha2VsZCB6aWpuIHZvb3IgZWVuIDY0LWJpdHMgYmVzdGFuZHNzeXN0ZWVtLlxuIgorIkdlZWYgb3B0aWUgJy1PIGV4dGVudCcgb20gZGl0IHRlIGRvZW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA2OQorbXNnaWQgIlRoZSBjbHVzdGVyIHNpemUgbWF5IG5vdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGJsb2NrIHNpemUuXG4iCittc2dzdHIgIkRlIGNsdXN0ZXJncm9vdHRlIG1hZyBuaWV0IGtsZWluZXIgemlqbiBkYW4gZGUgYmxva2dyb290dGUuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA3NQorbXNnaWQgInNwZWNpZnlpbmcgYSBjbHVzdGVyIHNpemUgcmVxdWlyZXMgdGhlIGJpZ2FsbG9jIGZlYXR1cmUiCittc2dzdHIgImhldCBvcGdldmVuIHZhbiBlZW4gY2x1c3Rlcmdyb290dGUgdmVyZWlzdCBkZSAnYmlnYWxsb2MnLWZ1bmN0aWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBVbmFibGUgdG8gZ2V0IGRldmljZSBnZW9tZXRyeSBmb3IgJXNcbiIKK21zZ3N0ciAiV2FhcnNjaHV3aW5nOiBrYW4gbG9naXNjaGUgc2NoaWpmb3Bib3V3IHZhbiAlcyBuaWV0IHZlcmtyaWpnZW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbGlnbm1lbnQgaXMgb2Zmc2V0IGJ5ICVsdSBieXRlcy5cbiIKK21zZ3N0ciAiVWl0bGlqbmluZyB2YW4gJXMgaXMgJWx1IGJ5dGVzIHZlcnNjaG92ZW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBtYXkgcmVzdWx0IGluIHZlcnkgcG9vciBwZXJmb3JtYW5jZSwgKHJlKS1wYXJ0aXRpb25pbmcgc3VnZ2VzdGVkLlxuIgorbXNnc3RyICIiCisiRGl0IGthbiB6ZWVyIHNsZWNodGUgcHJlc3RhdGllcyB0b3QgZ2V2b2xnIGhlYmJlbjtcbiIKKyIoaGVyKXBhcnRpdGlvbmVyaW5nIHdvcmR0IGFhbmJldm9sZW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCkiCittc2dzdHIgIkJsb2trZW4gdmFuICVkIGJ5dGVzIHppam4gdGUgZ3Jvb3Qgdm9vciBkaXQgc3lzdGVlbSAobWF4ICVkKS4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpLCBmb3JjZWQgdG8gY29udGludWVcbiIKK21zZ3N0ciAiIgorIldhYXJzY2h1d2luZzogYmxva2tlbiB2YW4gJWQgYnl0ZXMgemlqbiB0ZSBncm9vdCB2b29yIGRpdCBzeXN0ZWVtLFxuIgorImhldCBtYXhpbXVtIGlzICVkIC0tIG1hYXIgJ21rZTJmcycgd29yZHQgZ2Vkd29uZ2VuIHVpdGdldm9lcmQuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE4MAorbXNnaWQgIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0IGV4dGVudHMgZmVhdHVyZSIKK21zZ3N0ciAiS2FuICdiaWdhbGxvYyctZnVuY3RpZSBuaWV0IG9uZGVyc3RldW5lbiB6b25kZXIgJ2V4dGVudHMnLWZ1bmN0aWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE4NworbXNnaWQgIiIKKyJUaGUgcmVzaXplX2lub2RlIGFuZCBtZXRhX2JnIGZlYXR1cmVzIGFyZSBub3QgY29tcGF0aWJsZS5cbiIKKyJUaGV5IGNhbiBub3QgYmUgYm90aCBlbmFibGVkIHNpbXVsdGFuZW91c2x5LlxuIgorbXNnc3RyICIiCisiRGUgZnVuY3RpZXMgJ3Jlc2l6ZV9pbm9kZScgZW4gJ21ldGFfYmcnIGdhYW4gbmlldCBzYW1lbi5cbiIKKyJaZSBrdW5uZW4gbmlldCBiZWlkZSBpbmdlc2NoYWtlbGQgd29yZGVuLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIxOTYKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiIKKyJTZWUgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQmlnYWxsb2MgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIldhYXJzY2h1d2luZzogZGUgJ2JpZ2FsbG9jJy1mdW5jdGllIGlzIG5vZyBpbiBvbnR3aWtrZWxpbmcuXG4iCisiWmllIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0JpZ2FsbG9jIHZvb3IgbWVlciBpbmZvcm1hdGllLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMDcKK21zZ2lkICJyZXNlcnZlZCBvbmxpbmUgcmVzaXplIGJsb2NrcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorImhldCByZXNlcnZlcmVuIHZhbiBibG9ra2VuIHZvb3IgYmVzdGFuZHNzeXN0ZWVtdmVyZ3JvdGluZyB3b3JkdCBuaWV0ICIKKyJvbmRlcnN0ZXVuZCBvcCBlZW4gbmlldC1zY2hhYXJzIGJlc3RhbmRzc3lzdGVlbSIKKworIzogbWlzYy9ta2UyZnMuYzoyMjE2Cittc2dpZCAiYmxvY2tzIHBlciBncm91cCBjb3VudCBvdXQgb2YgcmFuZ2UiCittc2dzdHIgInRlbGxlciB2YW4gYmxva2tlbi1wZXItZ3JvZXAgbGlndCBidWl0ZW4gaGV0IHRvZWdlc3RhbmUgYmVyZWlrIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNDAKK21zZ2lkICJGbGV4X2JnIGZlYXR1cmUgbm90IGVuYWJsZWQsIHNvIGZsZXhfYmcgc2l6ZSBtYXkgbm90IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorIkRlIGZ1bmN0aWUgJ2ZsZXhfYmcnIGlzIG5pZXQgaW5nZXNjaGFrZWxkLCBkdXMgZGUgbWV0YWdyb2VwZ3Jvb3R0ZSBtYWcgbmlldCAiCisib3BnZWdldmVuIHdvcmRlbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgc2l6ZSAlZCAobWluICVkL21heCAlZCkiCittc2dzdHIgIm9uZ2VsZGlnZSBpbm9kZS1ncm9vdHRlICVkIChtaW4gJWQgLyBtYXggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgcmFpc2UgaW5vZGUgcmF0aW8/IgorbXNnc3RyICJ0ZSB2ZWVsIGlub2RlcyAoJWxsdSkgLS0gaW5vZGV2ZXJob3VkaW5nIHZlcmhvZ2VuPyIKKworIzogbWlzYy9ta2UyZnMuYzoyMjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHNwZWNpZnkgPCAyXjMyIGlub2RlcyIKK21zZ3N0ciAidGUgdmVlbCBpbm9kZXMgKCVsbHUpIC0tIGdlZWYgbWluZGVyIGRhbiAyXjMyIG9wIgorCisjOiBtaXNjL21rZTJmcy5jOjIyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImlub2RlX3NpemUgKCV1KSAqIGlub2Rlc19jb3VudCAoJXUpIHRvbyBiaWcgZm9yIGFcbiIKKyJcdGZpbGVzeXN0ZW0gd2l0aCAlbGx1IGJsb2Nrcywgc3BlY2lmeSBoaWdoZXIgaW5vZGVfcmF0aW8gKC1pKVxuIgorIlx0b3IgbG93ZXIgaW5vZGUgY291bnQgKC1OKS5cbiIKK21zZ3N0ciAiIgorIkRlIGlub2RlLXJ1aW10ZSAoaW5vZGUtZ3Jvb3R0ZSAldSAqIGFhbnRhbF9pbm9kZXMgJXUpXG4iCisiaXMgdGUgZ3Jvb3Qgdm9vciBlZW4gYmVzdGFuZHNzeXN0ZWVtIG1ldCAlbGx1IGJsb2trZW4gLS1cbiIKKyIgICBnZWVmIGVlbiBob2dlcmUgYnl0ZXMtcGVyLWlub2RldmVyaG91ZGluZyBvcCAoLWkpLFxuIgorIiAgIG9mIHZlcmtsZWluIGhldCBhYW50YWwgaW5vZGVzICgtTikuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbTsgdGhpcyBjYW4gYmUgdW5kb25lIHVzaW5nIHRoZSBjb21tYW5kOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkVlbiBiZXN0YWFuZCBiZXN0YW5kc3N5c3RlZW0gd29yZHQgb3ZlcnNjaHJldmVuO1xuIgorImRpdCBrYW4gb25nZWRhYW4gZ2VtYWFrdCB3b3JkZW4gbWV0IGRlIG9wZHJhY2h0OlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDMyCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHNldHVwIHVuZG8gZmlsZVxuIgorbXNnc3RyICJ0aWpkZW5zIGFhbm1ha2VuIHZhbiAndW5kbyctYmVzdGFuZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NTgKK21zZ2lkICJEaXNjYXJkaW5nIGRldmljZSBibG9ja3M6ICIKK21zZ3N0ciAiVmVyd2VycGVuIHZhbiBibG9ra2VuOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ3NAorbXNnaWQgImZhaWxlZCAtICIKK21zZ3N0ciAiaXMgbWlzbHVrdCAtICIKKworIzogbWlzYy9ta2UyZnMuYzoyNTk2Cittc2dpZCAid2hpbGUgc2V0dGluZyB1cCBzdXBlcmJsb2NrIgorbXNnc3RyICJ0aWpkZW5zIGFhbm1ha2VuIHZhbiBzdXBlcmJsb2siCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYxMgorbXNnaWQgIkRpc2NhcmQgc3VjY2VlZGVkIGFuZCB3aWxsIHJldHVybiAwcyAtIHNraXBwaW5nIGlub2RlIHRhYmxlIHdpcGVcbiIKK21zZ3N0ciAiIgorIlZlcndlcnBpbmcgaXMgZ2VsdWt0IGVuIHphbCBudWxsZW4gcmV0b3VybmVyZW4gLS0gd2lzc2VuIHZhbiBpbm9kZS10YWJlbCAiCisid29yZHQgb3Zlcmdlc2xhZ2VuXG4iCisKKyMgWFhYICB1cHBlcmNhc2UgT1MKKyM6IG1pc2MvbWtlMmZzLmM6MjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9zIC0gJXMiCittc2dzdHIgIm9uYmVrZW5kIGJlc3R1cmluZ3NzeXN0ZWVtOiAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNzUyCittc2dpZCAiQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICIKK21zZ3N0ciAiUmVzZXJ2ZXJlbiB2YW4gZ3JvZXBzdGFiZWxsZW46ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNzYwCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGFsbG9jYXRlIGZpbGVzeXN0ZW0gdGFibGVzIgorbXNnc3RyICJ0aWpkZW5zIHJlc2VydmVyZW4gdmFuIGJlc3RhbmRzc3lzdGVlbXRhYmVsbGVuIgorCisjOiBtaXNjL21rZTJmcy5jOjI3NjkKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYml0bWFwIgorbXNnc3RyICIiCisiXG4iCisiICAgIHRpamRlbnMgY29udmVydGVyZW4gdmFuIHN1YmNsdXN0ZXItYml0a2FhcnQiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGJsb2NrICVsbHUgYXQgZW5kIG9mIGZpbGVzeXN0ZW0iCittc2dzdHIgInRpamRlbnMgbnVsbWFrZW4gdmFuIGJsb2sgJWxsdSBhYW4gaGV0IGVpbmQgdmFuIGhldCBiZXN0YW5kc3N5c3RlZW0iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgyNgorbXNnaWQgIndoaWxlIHJlc2VydmluZyBibG9ja3MgZm9yIG9ubGluZSByZXNpemUiCittc2dzdHIgInRpamRlbnMgcmVzZXJ2ZXJlbiB2YW4gdWl0YnJlaWRpbmdzYmxva2tlbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODM4IG1pc2MvdHVuZTJmcy5jOjcxMgorbXNnaWQgImpvdXJuYWwiCittc2dzdHIgImpvdXJuYWwiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgam91cm5hbCB0byBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiVG9ldm9lZ2VuIHZhbiBqb3VybmFsIGFhbiBhcHBhcmFhdCAlczogIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorIlxuIgorIiAgICB0aWpkZW5zIHRvZXZvZWdlbiB2YW4gam91cm5hbCBhYW4gYXBwYXJhYXQgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg2MiBtaXNjL21rZTJmcy5jOjI4OTMgbWlzYy90dW5lMmZzLmM6NzQxIG1pc2MvdHVuZTJmcy5jOjc2MAorbXNnaWQgImRvbmVcbiIKK21zZ3N0ciAidm9sdG9vaWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODY5Cittc2dpZCAiU2tpcHBpbmcgam91cm5hbCBjcmVhdGlvbiBpbiBzdXBlci1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiQWFubWFrZW4gdmFuIGpvdXJuYWwgd29yZHQgb3Zlcmdlc2xhZ2VuIHdlZ2VucyBvcHRpZSAnLVMnLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJXUgYmxvY2tzKTogIgorbXNnc3RyICJBYW5tYWtlbiB2YW4gam91cm5hbCAoJXUgYmxva2tlbik6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyODg5Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIgorbXNnc3RyICIiCisiXG4iCisiICAgIHRpamRlbnMgYWFubWFrZW4gdmFuIGpvdXJuYWwiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwMSBtaXNjL3R1bmUyZnMuYzo1MTYKK21zZ2lkICIiCisiXG4iCisiRXJyb3Igd2hpbGUgZW5hYmxpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlLiIKK21zZ3N0ciAiIgorIlxuIgorIkZvdXQgdGlqZGVucyBpbnNjaGFrZWxlbiB2YW4gTU1QIChiZXNjaGVybWluZyB0ZWdlbiBtZWVydm91ZGlnZSAiCisiYWFua29wcGVsaW5nZW4pLiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaXMgZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZCBzZWNvbmRzLlxuIgorbXNnc3RyICIiCisiQmVzY2hlcm1pbmcgdGVnZW4gbWVlcnZvdWRpZ2UgYWFua29wcGVsaW5nZW4gaXMgaW5nZXNjaGFrZWxkXG4iCisibWV0IGVlbiBiaWp3ZXJraW5nc2ludGVydmFsIHZhbiAlZCBzZWNvbmRlbi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTIzCittc2dpZCAiV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAiCittc2dzdHIgIlNjaHJpanZlbiB2YW4gc3VwZXJibG9ra2VuIGVuIGJlc3RhbmRzc3lzdGVlbS1tZXRhZ2VnZXZlbnM6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyOTMwCittc2dpZCAiIgorIlxuIgorIldhcm5pbmcsIGhhZCB0cm91YmxlIHdyaXRpbmcgb3V0IHN1cGVyYmxvY2tzLiIKK21zZ3N0ciAiIgorIlxuIgorIldhYXJzY2h1d2luZzogcHJvYmxlbWVuIHRpamRlbnMgc2NocmlqdmVuIHZhbiBzdXBlcmJsb2trZW4uIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MzIKK21zZ2lkICIiCisiZG9uZVxuIgorIlxuIgorbXNnc3RyICIiCisidm9sdG9vaWRcbiIKKyJcbiIKKworIzogbWlzYy9ta2xvc3QrZm91bmQuYzo1MAorbXNnaWQgIlVzYWdlOiBta2xvc3QrZm91bmRcbiIKK21zZ3N0ciAiR2VicnVpazogIG1rbG9zdCtmb3VuZFxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAgJXMgZGV2aWNlLi4uXG4iCisiXG4iCisiUHJpbnRzIG91dCB0aGUgcGFydGl0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGdpdmVuIGRldmljZS5cbiIKKyJGb3IgZXhhbXBsZTogJXMgL2Rldi9oZGFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkdlYnJ1aWs6ICAlcyBhcHBhcmFhdC4uLlxuIgorIlxuIgorIlRvb250IGRlIHBhcnRpdGllLWluZm9ybWF0aWUgdm9vciBlbGsgZ2VnZXZlbiBhcHBhcmFhdC5cbiIKKyJcbiIKKyJWb29yYmVlbGQ6ICAlcyAvZGV2L2hkYVxuIgorIlxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJLYW4gJXMgbmlldCBvcGVuZW46ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBnZW9tZXRyeSBvZiAlczogJXMiCittc2dzdHIgIkthbiBnZW9tZXRyaWUgdmFuICVzIG5pZXQgYmVwYWxlbjogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IHNpemUgb2YgJXM6ICVzIgorbXNnc3RyICJLYW4gZ3Jvb3R0ZSB2YW4gJXMgbmlldCBiZXBhbGVuOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIHN0YXJ0PSU4ZCBzaXplPSU4bHUgZW5kPSU4ZFxuIgorbXNnc3RyICIlczoga29wPSUzZCBzZWM9JTNkIGNpbD0lNGQgICBiZWdpbj0lOGQgZ3Jvb3R0ZT0lOGx1IGVpbmRlPSU4ZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTIKK21zZ2lkICJQbGVhc2UgcnVuIGUyZnNjayBvbiB0aGUgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiQ29udHJvbGVlciBoZXQgYmVzdGFuZHNzeXN0ZWVtIG1ldCAnZTJmc2NrJy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jIG1heF9tb3VudHNfY291bnRdIFstZSBlcnJvcnNfYmVoYXZpb3JdIFstZyBncm91cF1cbiIKKyJcdFstaSBpbnRlcnZhbFtkfG18d11dIFstal0gWy1KIGpvdXJuYWxfb3B0aW9uc10gWy1sXVxuIgorIlx0Wy1tIHJlc2VydmVkX2Jsb2Nrc19wZXJjZW50XSBbLW8gW15dbW91bnRfb3B0aW9uc1ssLi4uXV0gWy1wICIKKyJtbXBfdXBkYXRlX2ludGVydmFsXVxuIgorIlx0Wy1yIHJlc2VydmVkX2Jsb2Nrc19jb3VudF0gWy11IHVzZXJdIFstQyBtb3VudF9jb3VudF0gWy1MIHZvbHVtZV9sYWJlbF1cbiIKKyJcdFstTSBsYXN0X21vdW50ZWRfZGlyXSBbLU8gW15dZmVhdHVyZVssLi4uXV1cbiIKKyJcdFstUSBxdW90YV9vcHRpb25zXVxuIgorIlx0Wy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV0gWy1UIGxhc3RfY2hlY2tfdGltZV0gWy1VIFVVSURdXG4iCisiXHRbIC1JIG5ld19pbm9kZV9zaXplIF0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJHZWJydWlrOiAgJXMgWy1jIG1heGltdW1fYWFudGFsX2FhbmtvcHBlbGluZ2VuXSBbLUMgYWFua29wcGVsaW5nZW50YWxdXG4iCisiICAgICAgICAgIFstZSBnZWRyYWdfYmlqX2ZvdXRlbl0gWy1FIHVpdGdlYnJlaWRlX29wdGllWywuLi5dXSBbLWZdIFstZyAiCisiZ3JvZXBdXG4iCisiICAgICAgICAgIFstaSBpbnRlcnZhbFtkfHd8bV1dIFstal0gWy1KIGpvdXJuYWwtb3B0aWVzXSBbLWxdIFstTCBsYWJlbF1cbiIKKyIgICAgICAgICAgWy1tIHBlcmNlbnRhZ2VfZ2VyZXNlcnZlZXJkZV9ibG9ra2VuXSBbLU0gIgorImxhYXRzdGVfYWFua29wcGVsaW5nc3B1bnRdXG4iCisiICAgICAgICAgIFstbyBbXl1hYW5rb3BwZWxpbmdzb3B0aWVzWywuLi5dXSBbLU8gW15dZnVuY3RpZVssLi4uXV1cbiIKKyIgICAgICAgICAgWy1wIE1NUC1iaWp3ZXJraW5nc2ludGVydmFsXSBbLXIgYWFudGFsX2dlcmVzZXJ2ZWVyZGVfYmxva2tlbl1cbiIKKyIgICAgICAgICAgWy1UIHRpamRzdGlwX3Zhbl9sYWF0c3RlX2NvbnRyb2xlXSBbLXUgZ2VicnVpa2VyXSBbLVUgVVVJRF1cbiIKKyIgICAgICAgICAgWy1JIG5pZXV3ZV9pbm9kZS1ncm9vdHRlXSBbLVEgcXVvdGEtb3B0aWVzXSAgYXBwYXJhYXRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzCittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCFcbiIKK21zZ3N0ciAiR2VlbiBqb3VybmFsLXN1cGVyYmxvayBnZXZvbmRlbiFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjYxCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAidGlqZGVucyBvcGVuZW4gdmFuIGV4dGVybiBqb3VybmFsIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjcgbWlzYy90dW5lMmZzLmM6MTk2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiJXM6IGlzIGdlZW4gam91cm5hbC1hcHBhcmFhdC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6Mjc3IG1pc2MvdHVuZTJmcy5jOjE5NzQKK21zZ2lkICJGaWxlc3lzdGVtJ3MgVVVJRCBub3QgZm91bmQgb24gam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIlVVSUQgdmFuIGJlc3RhbmRzc3lzdGVlbSBuaWV0IGdldm9uZGVuIG9wIGpvdXJuYWwtYXBwYXJhYXQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMwMQorbXNnaWQgIiIKKyJDYW5ub3QgbG9jYXRlIGpvdXJuYWwgZGV2aWNlLiBJdCB3YXMgTk9UIHJlbW92ZWRcbiIKKyJVc2UgLWYgb3B0aW9uIHRvIHJlbW92ZSBtaXNzaW5nIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIiCisiS2FuIGpvdXJuYWwtYXBwYXJhYXQgbmlldCBsb2thbGlzZXJlbi4gIEhldCBpcyBOSUVUIHZlcndpamRlcmQuXG4iCisiR2VicnVpayBvcHRpZSAnLWYnIG9tIGhldCBvbnRicmVrZW5kZSBqb3VybmFsLWFwcGFyYWF0IHRlIHZlcndpamRlcmVuLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMTAKK21zZ2lkICJKb3VybmFsIHJlbW92ZWRcbiIKK21zZ3N0ciAiSm91cm5hbCBpcyB2ZXJ3aWpkZXJkLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNTQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgInRpamRlbnMgbGV6ZW4gdmFuIGJpdGthYXJ0ZW4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM2MgorbXNnaWQgIndoaWxlIGNsZWFyaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInRpamRlbnMgd2lzc2VuIHZhbiBqb3VybmFsLWlub2RlIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNzMKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInRpamRlbnMgc2NocmlqdmVuIHZhbiBqb3VybmFsLWlub2RlIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MDUgbWlzYy90dW5lMmZzLmM6NDE4Cittc2dpZCAiKGFuZCByZWJvb3QgYWZ0ZXJ3YXJkcyEpXG4iCittc2dzdHIgIihFbiBoZXJzdGFydCBkYWFybmEgdXcgY29tcHV0ZXIhKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiSGV0IHVpdHNjaGFrZWxlbiB2YW4gYmVzdGFuZHNzeXN0ZWVtZnVuY3RpZSAnJXMnIGlzIG5pZXQgbW9nZWxpamsuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIkhldCBpbnNjaGFrZWxlbiB2YW4gYmVzdGFuZHNzeXN0ZWVtZnVuY3RpZSAnJXMnIGlzIG5pZXQgbW9nZWxpamsuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ2NworbXNnaWQgIiIKKyJUaGUgaGFzX2pvdXJuYWwgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJEZSBqb3VybmFsLXZsYWcgbWFnIGFsbGVlbiBnZXdpc3Qgd29yZGVuIHdhbm5lZXIgaGV0IGJlc3RhbmRzc3lzdGVlbVxuIgorIm9udGtvcHBlbGQgaXMgb2YgYWFuZ2Vrb3BwZWxkIGFscyBhbGxlZW4tbGV6ZW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ3NgorbXNnaWQgIiIKKyJUaGUgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQuICBQbGVhc2UgcnVuIGUyZnNjayBiZWZvcmUgY2xlYXJpbmdcbiIKKyJ0aGUgaGFzX2pvdXJuYWwgZmxhZy5cbiIKK21zZ3N0ciAiIgorIkRlIHJlZGRpbmdzdmxhZyB2YW4gaGV0IGpvdXJuYWwgaXMgZ2V6ZXQuXG4iCisiVm9lciBlZXJzdCAnZTJmc2NrJyB1aXQsIHZvb3JkYXQgdSBkZSBqb3VybmFsLXZsYWcgd2lzdC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDk1Cittc2dpZCAiIgorIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICdzcGFyc2Vfc3VwZXInIG5vdCBzdXBwb3J0ZWRcbiIKKyJmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgbWV0YV9iZyBmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKyJIZXQgaW5zY2hha2VsZW4gdmFuIGJlc3RhbmRzc3lzdGVlbWZ1bmN0aWUgJ3NwYXJzZV9zdXBlcicgaXMgbmlldCBtb2dlbGlqayAiCisidm9vclxuIgorImJlc3RhbmRzc3lzdGVtZW4gbWV0IGluZ2VzY2hha2VsZGUgJ21ldGFfYmcnLWZ1bmN0aWV2bGFnLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MDgKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW4ndFxuIgorImJlIHNldCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIG9yXG4iCisicmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiQmVzY2hlcm1pbmcgdGVnZW4gbWVlcnZvdWRpZ2UgYWFua29wcGVsaW5nZW4ga2FuXG4iCisibmlldCBpbmdlc2NoYWtlbGQgd29yZGVuIGFscyBoZXQgYmVzdGFuZHNzeXN0ZWVtXG4iCisiYWFuZ2Vrb3BwZWxkIG9mIGFsbGVlbi1sZXplbiBpcy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIiIKKyJCZXNjaGVybWluZyB0ZWdlbiBtZWVydm91ZGlnZSBhYW5rb3BwZWxpbmdlbiBpcyBpbmdlc2NoYWtlbGRcbiIKKyJtZXQgZWVuIGJpandlcmtpbmdzaW50ZXJ2YWwgdmFuICVkIHNlY29uZGVuLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MzUKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW5ub3RcbiIKKyJiZSBkaXNhYmxlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyByZWFkb25seS5cbiIKK21zZ3N0ciAiIgorIkJlc2NoZXJtaW5nIHRlZ2VuIG1lZXJ2b3VkaWdlIGFhbmtvcHBlbGluZ2VuIGthblxuIgorIm5pZXQgdWl0Z2VzY2hha2VsZCB3b3JkZW4gYWxzIGhldCBiZXN0YW5kc3N5c3RlZW1cbiIKKyJhbGxlZW4tbGV6ZW4gaXMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU0MworbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgbGV6ZW4gdmFuIGJpdGthYXJ0ZW5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hZ2ljIG51bWJlciBpbiBNTVAgYmxvY2sgZG9lcyBub3QgbWF0Y2guIGV4cGVjdGVkOiAleCwgYWN0dWFsOiAleFxuIgorbXNnc3RyICJNYWdpc2NoIGdldGFsIGluIE1NUC1ibG9rIGtsb3B0IG5pZXQgLS0gdmVyd2FjaHQ6ICV4LCBnZXZvbmRlbjogJXhcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTU3Cittc2dpZCAid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIgorbXNnc3RyICJ0aWpkZW5zIGxlemVuIHZhbiBNTVAtYmxvayIKKworIzogbWlzYy90dW5lMmZzLmM6NTg5Cittc2dpZCAiIgorIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgY2F1c2UgdGhlIHRoZSBmaWxlc3lzdGVtIHRvIGJlXG4iCisiaW5jb25zaXN0ZW50LlxuIgorbXNnc3RyICIiCisiSGV0IHVpdHNjaGFrZWxlbiB2YW4gYmVzdGFuZHNzeXN0ZWVtZnVuY3RpZSAnZmxleF9iZycgem91IGhldFxuIgorImJlc3RhbmRzc3lzdGVlbSBpbmNvbnNpc3RlbnQgbWFrZW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjYwMAorbXNnaWQgIiIKKyJUaGUgaHVnZV9maWxlIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiRGUgJ2h1Z2VfZmlsZSctZnVuY3RpZXZsYWcgbWFnIGFsbGVlbiBnZXdpc3Qgd29yZGVuIHdhbm5lZXIgaGV0XG4iCisiYmVzdGFuZHNzeXN0ZWVtIG9udGtvcHBlbGQgaXMgb2YgYWFuZ2Vrb3BwZWxkIGFscyBhbGxlZW4tbGV6ZW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY2MAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiAnXnF1b3RhJyBvcHRpb24gb3ZlcnJpZGVzICctUSdhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJXYWFyc2NodXdpbmc6ICdecXVvdGEnLW9wdGllIG92ZXJzdGlqZ3QgJy1RJy1hcmd1bWVudGVuLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MDUKK21zZ2lkICJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBhIGpvdXJuYWwuXG4iCittc2dzdHIgIkhldCBiZXN0YW5kc3N5c3RlZW0gaGVlZnQgYWwgZWVuIGpvdXJuYWwuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIG9uICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgdGlqZGVucyBvcGVuZW4gdmFuIGpvdXJuYWwgb3AgJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgb24gZGV2aWNlICVzOiAiCittc2dzdHIgIkFhbm1ha2VuIHZhbiBqb3VybmFsIG9wIGFwcGFyYWF0ICVzOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBhZGRpbmcgZmlsZXN5c3RlbSB0byBqb3VybmFsIG9uICVzIgorbXNnc3RyICJ0aWpkZW5zIHRvZXZvZWdlbiB2YW4gYmVzdGFuZHNzeXN0ZWVtIGFhbiBqb3VybmFsIG9wICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3NDMKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIGlub2RlOiAiCittc2dzdHIgIkFhbm1ha2VuIHZhbiBqb3VybmFsLWlub2RlOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc1NworbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCBmaWxlIgorbXNnc3RyICIiCisiXG4iCisiICAgIHRpamRlbnMgYWFubWFrZW4gdmFuIGpvdXJuYWwtaW5vZGUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjgzMgorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBxdW90YSBvcHRpb25zIVxuIgorbXNnc3RyICJLYW4gZ2VlbiBnZWhldWdlbiByZXNlcnZlcmVuIG9tIHF1b3RhLW9wdGllcyB0ZSBvbnRsZWRlbiFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6ODU0Cittc2dpZCAiIgorIlxuIgorIkJhZCBxdW90YSBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJGb2xsb3dpbmcgdmFsaWQgcXVvdGEgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIChwYXNzIGJ5IHNlcGFyYXRpbmcgd2l0aCAiCisiY29tbWEpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPbmdlbGRpZ2UgcXVvdGEtb3B0aWUgb3BnZWdldmVuLlxuIgorIlxuIgorIkdlbGRpZ2UgcXVvdGEtb3B0aWVzIHppam4gKHRlIHNjaGVpZGVuIG1ldCBlZW4ga29tbWEpOlxuIgorIiAgICBbXl11c3JxdW90YVxuIgorIiAgICBbXl1ncnBxdW90YVxuIgorIlxuIgorIlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcGFyc2UgZGF0ZS90aW1lIHNwZWNpZmllcjogJXMiCittc2dzdHIgIkthbiBkYXR1bS90aWpkLXNwZWNpZmljYXRpZSBuaWV0IG9udGxlZGVuOiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTQyIG1pc2MvdHVuZTJmcy5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbW91bnRzIGNvdW50IC0gJXMiCittc2dzdHIgIm9uanVpc3QgYWFua29wcGVsaW5nZW5hYW50YWw6ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGVycm9yIGJlaGF2aW9yIC0gJXMiCittc2dzdHIgIm9uanVpc3QgYXJndW1lbnQgdmFuIC1lIChnZWRyYWcgYmlqIGVlbiBmb3V0KTogJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2lkL2dyb3VwIG5hbWUgLSAlcyIKK21zZ3N0ciAib25qdWlzdGUgR0lEIG9mIGdyb2Vwc25hYW06ICVzIgorCisjIGxpYi9wcmFuZ2UuYzoyOTkgbGliL3ByYW5nZS5jOjMxNgorIzogbWlzYy90dW5lMmZzLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW50ZXJ2YWwgLSAlcyIKK21zZ3N0ciAib25qdWlzdCBpbnRlcnZhbDogJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrIHJhdGlvIC0gJXMiCittc2dzdHIgIm9uanVpc3RlIHZlcmhvdWRpbmcgKCVzKSB2b29yIGdlcmVzZXJ2ZWVyZGUgYmxva2tlbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3NQorbXNnaWQgIi1vIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICJPcHRpZSAnLW8nIG1hZyBzbGVjaHRzIMOpw6luIGtlZXIgZ2VnZXZlbiB3b3JkZW4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwODQKK21zZ2lkICItTyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiT3B0aWUgJy1vJyBtYWcgc2xlY2h0cyDDqcOpbiBrZWVyIGdlZ2V2ZW4gd29yZGVuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9ja3MgY291bnQgLSAlcyIKK21zZ3N0ciAib25qdWlzdCBhYW50YWwgZ2VyZXNlcnZlZXJkZSBibG9ra2VuOiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdWlkL3VzZXIgbmFtZSAtICVzIgorbXNnc3RyICJvbmp1aXN0ZSBVSUQgb2YgZ2VicnVpa2Vyc25hYW06ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgIm9uZ2VsZGlnZSBncm9vdHRlIHZhbiBpbm9kZTogJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5vZGUgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLSAlcyIKK21zZ3N0ciAiSW5vZGUtZ3Jvb3R0ZSBtb2V0IGVlbiBtYWNodCB2YW4gMiB6aWpuIC0tIG5pZXQgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibW1wX3VwZGF0ZV9pbnRlcnZhbCB0b28gYmlnOiAlbHVcbiIKK21zZ3N0ciAiTU1QLWJpandlcmtpbmdzaW50ZXJ2YWwgaXMgdGUgZ3Jvb3Q6ICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZFxuIgorbXNnaWRfcGx1cmFsICIiCisiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyWzBdICJIZXQgTU1QLWJpandlcmtpbmdzaW50ZXJ2YWwgaXMgb3AgJWx1IHNlY29uZGUgZ2V6ZXRcbiIKK21zZ3N0clsxXSAiSGV0IE1NUC1iaWp3ZXJraW5nc2ludGVydmFsIGlzIG9wICVsdSBzZWNvbmRlbiBnZXpldFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpZGU6ICVzXG4iCittc2dzdHIgIk9uZ2VsZGlnIGFyZ3VtZW50IHZhbiAnc3RyaWRlJzogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaXBlLXdpZHRoOiAlc1xuIgorbXNnc3RyICJPbmdlbGRpZyBhcmd1bWVudCB2YW4gJ3N0cmlwZV93aWR0aCc6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBoYXNoIGFsZ29yaXRobTogJXNcbiIKK21zZ3N0ciAiT25nZWxkaWcgaGFzaC1hbGdvcml0bWU6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHRvICVzICglZClcbiIKK21zZ3N0ciAiSGV0IHN0YW5kYWFyZC1oYXNoLWFsZ29yaXRtZSBpcyBvcCAlcyAoJWQpIGdlemV0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMzEKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdGNsZWFyX21tcFxuIgorIlx0aGFzaF9hbGc9PGhhc2ggYWxnb3JpdGhtPlxuIgorIlx0bW91bnRfb3B0cz08ZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGNodW5rIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlX3dpZHRoPTxSQUlEIHN0cmlkZSpkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdF50ZXN0X2ZzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPbmdlbGRpZ2Ugb3B0aWUgb3BnZWdldmVuLlxuIgorIlxuIgorIlVpdGdlYnJlaWRlIG9wdGllcyB3b3JkZW4gZ2VzY2hlaWRlbiBkb29yIGtvbW1hJ3M7XG4iCisiaHVuIGFyZ3VtZW50IHdvcmR0IHZvb3JhZmdlZ2FhbiBkb29yIGVlbiAnPSctdGVrZW4uXG4iCisiXG4iCisiR2VsZGlnZSB1aXRnZWJyZWlkZSBvcHRpZXMgemlqbjpcbiIKKyIgICAgY2xlYXJfbW1wXG4iCisiICAgIGhhc2hfYWxnPTxoYXNoLWFsZ29yaXRtZT5cbiIKKyIgICAgbW91bnRfb3B0cz08dWl0Z2VicmVpZGUgc3RhbmRhYXJkIGFhbmtvcHBlbGluZ3NvcHRpZXM+XG4iCisiICAgIHN0cmlkZT08YWFudGFsIGJsb2trZW4gZGF0IHNhbWVuIHBlciBSQUlELXNjaGlqZiB3b3JkdCBnZWxlemVuLyIKKyJnZXNjaHJldmVuPlxuIgorIiAgICBzdHJpcGVfd2lkdGg9PGFhbnRhbCBibG9ra2VuIHBlciBzdHJpcGU+IChtZWVzdGFsIHN0cmlkZSDDlyBhYW50YWwgIgorInNjaGlqdmVuKVxuIgorIiAgICB0ZXN0X2ZzXG4iCisiICAgIF50ZXN0X2ZzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3OTgKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBpbm9kZSBiaXRtYXBcbiIKK21zZ3N0ciAiTGV6ZW4gdmFuIGlub2RlLWJpdGthYXJ0IGlzIG1pc2x1a3RcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgwMworbXNnaWQgIkZhaWxlZCB0byByZWFkIGJsb2NrIGJpdG1hcFxuIgorbXNnc3RyICJMZXplbiB2YW4gYmxvay1iaXRrYWFydCBpcyBtaXNsdWt0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjAgcmVzaXplL3Jlc2l6ZTJmcy5jOjkzMQorbXNnaWQgImJsb2NrcyB0byBiZSBtb3ZlZCIKK21zZ3N0ciAidGUgdmVycGxhYXRzZW4gYmxva2tlbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyMworbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSBibG9jayBiaXRtYXAgd2hlbiBpbmNyZWFzaW5nIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiIgorIlJlc2VydmVyZW4gdmFuIGJsb2stYml0a2FhcnQgdGlqZGVucyBpbm9kZS1ncm9vdHRldmVyYW5kZXJpbmcgaXMgbWlzbHVrdC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyOQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gaW5jcmVhc2UgaW5vZGUgc2l6ZSBcbiIKK21zZ3N0ciAiRXIgaXMgb252b2xkb2VuZGUgcnVpbXRlIG9tIGRlIGlub2RlLWdyb290dGUgdGUgdmVyZ3JvdGVuLiBcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgzNAorbXNnaWQgIkZhaWxlZCB0byByZWxvY2F0ZSBibG9ja3MgZHVyaW5nIGlub2RlIHJlc2l6ZSBcbiIKK21zZ3N0ciAiIgorIkhlcnBsYWF0c2VuIHZhbiBibG9ra2VuIHRpamRlbnMgaW5vZGUtZ3Jvb3R0ZXZlcmFuZGVyaW5nIGlzIG1pc2x1a3QuIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODY2Cittc2dpZCAiIgorIkVycm9yIGluIHJlc2l6aW5nIHRoZSBpbm9kZSBzaXplLlxuIgorIlJ1biBlMnVuZG8gdG8gdW5kbyB0aGUgZmlsZSBzeXN0ZW0gY2hhbmdlcy4gXG4iCittc2dzdHIgIiIKKyJGb3V0IHRpamRlbnMgdmVyYW5kZXJlbiB2YW4gZGUgaW5vZGUtZ3Jvb3R0ZS5cbiIKKyJWb2VyICdlMnVuZG8nIHVpdCBvbSBkZSBiZXN0YW5kc3N5c3RlZW13aWp6aWdpbmdlbiBvbmdlZGFhbiB0ZSBtYWtlbi4gXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4OTMKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRkYiBmaWxlbmFtZVxuIgorbXNnc3RyICJLYW4gZ2VlbiBnZWhldWdlbiByZXNlcnZlcmVuIHZvb3IgJ3RkYictYmVzdGFuZHNuYWFtXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRlbGV0ZSAlcyIKK21zZ3N0ciAidGlqZGVucyB2ZXJ3aWpkZXJlbiB2YW4gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIHVuZG8gdGhlIHR1bmUyZnMgb3BlcmF0aW9uIHBsZWFzZSBydW4gdGhlIGNvbW1hbmRcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJEZSB2ZXJhbmRlcmluZ2VuIGRpZSBkb29yICd0dW5lMmZzJyBnZW1hYWt0IHppam5cbiIKKyJrdW5uZW4gb25nZWRhYW4gZ2VtYWFrdCB3b3JkZW4gbWV0IGRlIG9wZHJhY2h0OlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGJsb2NrIG1hZ2ljIGlzIGJhZC4gVHJ5IHRvIGZpeCBpdCBieSBydW5uaW5nOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCittc2dzdHIgIiIKKyJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIGluIE1NUC1ibG9rLlxuIgorIlByb2JlZXIgaGV0IHRlIHJlcGFyZXJlbiBtZXQ6XG4iCisiICAgIGUyZnNjayAtZiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIGlzIGFscmVhZHkgJWx1XG4iCittc2dzdHIgIkRlIGlub2RlLWdyb290dGUgaXMgYWwgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwODEKK21zZ2lkICJTaHJpbmtpbmcgaW5vZGUgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIkhldCB2ZXJrbGVpbmVuIHZhbiBkZSBpbm9kZS1ncm9vdHRlIHdvcmR0IG5pZXQgb25kZXJzdGV1bmQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpbm9kZSBzaXplICVsdSAobWF4ICVkKVxuIgorbXNnc3RyICJvbmdlbGRpZ2UgaW5vZGUtZ3Jvb3R0ZSAlbHUgKG1heCAlZClcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiSGV0IG1heGltdW0gYWFudGFsIGFhbmtvcHBlbGluZ2VuIGlzIG9wICVkIGdlemV0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjdXJyZW50IG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIkhldCBodWlkaWdlIGFhbnRhbCBhYW5rb3BwZWxpbmdlbiBpcyBvcCAlZCBnZXpldFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXJyb3IgYmVoYXZpb3IgdG8gJWRcbiIKK21zZ3N0ciAiR2VkcmFnIGJpaiBmb3V0ZW4gaXMgb3AgJWQgZ2V6ZXRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBnaWQgdG8gJWx1XG4iCittc2dzdHIgIkdJRCB2YW4gZ2VyZXNlcnZlZXJkZSBibG9ra2VuIGlzIG9wICVsdSBnZXpldFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgImludGVydmFsIHR1c3NlbiBjb250cm9sZXMgaXMgdGUgZ3Jvb3QgKCVsdSkiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyICJJbnRlcnZhbCB0dXNzZW4gY29udHJvbGVzIGlzIG9wICVsdSBzZWNvbmRlbiBnZXpldFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnRhZ2UgdG8gJWclJSAoJWxsdSBibG9ja3MpXG4iCittc2dzdHIgIlBlcmNlbnRhZ2UgZ2VyZXNlcnZlZXJkZSBibG9ra2VuIGlzIG9wICVnJSUgZ2V6ZXQgKCVsbHUgYmxva2tlbilcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MgY291bnQgaXMgdG9vIGJpZyAoJWxsdSkiCittc2dzdHIgImFhbnRhbCBnZXJlc2VydmVlcmRlIGJsb2trZW4gaXMgdGUgZ3Jvb3QgKCVsbHUpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IHRvICVsbHVcbiIKK21zZ3N0ciAiSGV0IGFhbnRhbCBnZXJlc2VydmVlcmRlIGJsb2trZW4gaXMgb3AgJWxsdSBnZXpldFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTg3Cittc2dpZCAiIgorIlxuIgorIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSBzdXBlcmJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkhldCBiZXN0YW5kc3N5c3RlZW0gaXMgYWwgenVpbmlnIG1ldCBzdXBlcmJsb2trZW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxOTEKK21zZ2lkICIiCisiXG4iCisiU2V0dGluZyB0aGUgc3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBub3Qgc3VwcG9ydGVkXG4iCisiZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIG1ldGFfYmcgZmVhdHVyZSBlbmFibGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiSGV0IGluc2NoYWtlbGVuIHZhbiBkZSAnc3BhcnNlX3N1cGVyJy1mdW5jdGlldmxhZyBpcyBuaWV0IG1vZ2VsaWprIHZvb3JcbiIKKyJiZXN0YW5kc3N5c3RlbWVuIG1ldCBpbmdlc2NoYWtlbGRlICdtZXRhX2JnJy1mdW5jdGlldmxhZy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBzZXQuICAlcyIKK21zZ3N0ciAiIgorIlxuIgorIkRlIHp1aW5pZy1tZXQtc3VwZXJibG9ra2VudmxhZyBpcyBhYW5nZXpldC4gICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjA3Cittc2dpZCAiIgorIlxuIgorIkNsZWFyaW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJIZXQgdWl0emV0dGVuIHZhbiBkZSAnc3BhcnNlX3N1cGVyJy1mdW5jdGlldmxhZyBpcyBuaWV0IG1vZ2VsaWprLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdGltZSBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0byAlc1xuIgorbXNnc3RyICJUaWpkIHZhbiBsYWF0c3RlIGNvbnRyb2xlIGlzIG9wICVzIGdlemV0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgdWlkIHRvICVsdVxuIgorbXNnc3RyICJVSUQgdmFuIGdlcmVzZXJ2ZWVyZGUgYmxva2tlbiBpcyBvcCAlbHUgZ2V6ZXRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI1MworbXNnaWQgIkVycm9yIGluIHVzaW5nIGNsZWFyX21tcC4gSXQgbXVzdCBiZSB1c2VkIHdpdGggLWZcbiIKK21zZ3N0ciAiRm91dCBpbiBnZWJydWlrIHZhbiAnY2xlYXJfbW1wJy4gIEhldCBtb2V0IHNhbWVuZ2FhbiBtZXQgJy1mJy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI3MQorbXNnaWQgIiIKKyJUaGUgcXVvdGEgZmVhdHVyZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiRGUgcXVvdGEtZnVuY3RpZSBtYWcgYWxsZWVuIGdld2lqemlnZCB3b3JkZW4gd2FubmVlciBoZXQgYmVzdGFuZHNzeXN0ZWVtXG4iCisib250a29wcGVsZCBpcy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI5MgorbXNnaWQgIlRoZSBVVUlEIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIiIKKyJEZSBVVUlEIG1hZyBhbGxlZW4gZ2V3aWp6aWdkIHdvcmRlbiB3YW5uZWVyIGhldCBiZXN0YW5kc3N5c3RlZW0gb250a29wcGVsZCAiCisiaXMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzMjIKK21zZ2lkICJJbnZhbGlkIFVVSUQgZm9ybWF0XG4iCittc2dzdHIgIk9uanVpc3RlIFVVSUQtaW5kZWxpbmdcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjMzNworbXNnaWQgIk5lZWQgdG8gdXBkYXRlIGpvdXJuYWwgc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiSGV0IGpvdXJuYWwtc3VwZXJibG9rIG1vZXQgYmlqZ2V3ZXJrdCB3b3JkZW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNTgKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiRGUgaW5vZGUtZ3Jvb3R0ZSBtYWcgYWxsZWVuIGdld2lqemlnZCB3b3JkZW4gd2FubmVlciBoZXQgYmVzdGFuZHNzeXN0ZWVtXG4iCisib250a29wcGVsZCBpcy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM2NgorbXNnaWQgIiIKKyJDaGFuZ2luZyB0aGUgaW5vZGUgc2l6ZSBub3Qgc3VwcG9ydGVkIGZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBmbGV4X2JnXG4iCisiZmVhdHVyZSBlbmFibGVkLlxuIgorbXNnc3RyICIiCisiSGV0IHZlcmFuZGVyZW4gdmFuIGRlIGlub2RlLWdyb290dGUgaXMgbmlldCBtb2dlbGlqayB2b29yXG4iCisiYmVzdGFuZHNzeXN0ZW1lbiBtZXQgaW5nZXNjaGFrZWxkZSAnZmxleF9iZyctZnVuY3RpZXZsYWcuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbm9kZSBzaXplICVsdVxuIgorbXNnc3RyICJEZSBpbm9kZS1ncm9vdGUgaXMgb3AgJWx1IGdlemV0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzODIKK21zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiSGV0IHZlcmFuZGVyZW4gdmFuIGRlIGlub2RlLWdyb290dGUgaXMgbWlzbHVrdC4gXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdHJpZGUgc2l6ZSB0byAlZFxuIgorbXNnc3RyICJEZSAnc3RyaWRlJy1sZW5ndGUgaXMgb3AgJWQgZ2V6ZXRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlwZSB3aWR0aCB0byAlZFxuIgorbXNnc3RyICJEZSAnc3RyaXBlJy1icmVlZHRlIGlzIG9wICVkIGdlemV0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnMgdG8gJyVzJ1xuIgorbXNnc3RyICJEZSB1aXRnZWJyZWlkZSBzdGFuZGFhcmQgYWFua29wcGVsaW5nc29wdGllcyB6aWpuIG9wICclcycgZ2V6ZXRcbiIKKworIzogbWlzYy91dGlsLmM6OTMKK21zZ2lkICI8cHJvY2VlZGluZz5cbiIKK21zZ3N0ciAiPHZlcmRlcmdhYW5kPlxuIgorCisjOiBtaXNjL3V0aWwuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICJQcm9jZWVkIGFueXdheSAob3Igd2FpdCAlZCBzZWNvbmRzKSA/ICh5LG4pICIKK21zZ3N0ciAiVG9jaCBkb29yZ2FhbiAob2YgJWQgc2Vjb25kZW4gd2FjaHRlbik/IChqLG4pICIKKworIzogbWlzYy91dGlsLmM6MTAxCittc2dpZCAiUHJvY2VlZCBhbnl3YXk/ICh5LG4pICIKK21zZ3N0ciAiVG9jaCBkb29yZ2Fhbj8gKGosbikgIgorCisjOiBtaXNjL3V0aWwuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vdW50ZWQgb24gJXMgb24gJXMiCittc2dzdHIgIlx0bGFhdHN0IGFhbmdla29wcGVsZCBvcCAlcyBvcCAlcyIKKworIzogbWlzYy91dGlsLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0bGFzdCBtb3VudGVkIG9uICVzIgorbXNnc3RyICJcdGxhYXRzdCBhYW5nZWtvcHBlbGQgb3AgJXMiCisKKyM6IG1pc2MvdXRpbC5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJcdGNyZWF0ZWQgb24gJXMiCittc2dzdHIgIlx0YWFuZ2VtYWFrdCBvcCAlcyIKKworIzogbWlzYy91dGlsLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0bGFzdCBtb2RpZmllZCBvbiAlcyIKK21zZ3N0ciAiXHRsYWF0c3QgZ2V3aWp6aWdkIG9wICVzIgorCisjOiBtaXNjL3V0aWwuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm91bmQgYSAlcyBwYXJ0aXRpb24gdGFibGUgaW4gJXNcbiIKK21zZ3N0ciAiRXIgaXMgZWVuICVzLXBhcnRpdGlldGFiZWwgZ2V2b25kZW4gaW4gJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBmaWxlICVzIGRvZXMgbm90IGV4aXN0IGFuZCBubyBzaXplIHdhcyBzcGVjaWZpZWQuXG4iCittc2dzdHIgIkJlc3RhbmQgJXMgYmVzdGFhdCBuaWV0IGVuIGVyIGlzIGdlZW4gZ3Jvb3R0ZSBvcGdlZ2V2ZW4uXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyByZWd1bGFyIGZpbGUgJXNcbiIKK21zZ3N0ciAiQWFubWFrZW4gdmFuIG5vcm1hYWwgYmVzdGFuZCAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIkthbiAlcyBuaWV0IG9wZW5lbjogJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjE2Cittc2dpZCAiIgorIlxuIgorIlRoZSBkZXZpY2UgYXBwYXJlbnRseSBkb2VzIG5vdCBleGlzdDsgZGlkIHlvdSBzcGVjaWZ5IGl0IGNvcnJlY3RseT9cbiIKK21zZ3N0ciAiIgorIlxuIgorIkhldCBhcHBhcmFhdCBiZXN0YWF0IGJsaWprYmFhciBuaWV0OyBoZWVmdCB1IGhldCBqdWlzdCBvcGdlZ2V2ZW4/XG4iCisKKyM6IG1pc2MvdXRpbC5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBibG9jayBzcGVjaWFsIGRldmljZS5cbiIKK21zZ3N0ciAiJXMgaXMgZ2VlbiBibG9rLWFwcGFyYWF0LlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbSBsYWJlbGxlZCAnJXMnXG4iCittc2dzdHIgIiVzIGJldmF0IGVlbiAlcy1iZXN0YW5kc3N5c3RlZW0gbWV0IGxhYmVsICclcydcbiIKKworIzogbWlzYy91dGlsLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGNvbnRhaW5zIGEgJXMgZmlsZSBzeXN0ZW1cbiIKK21zZ3N0ciAiJXMgYmV2YXQgZWVuICVzLWJlc3RhbmRzc3lzdGVlbVxuIgorCisjOiBtaXNjL3V0aWwuYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgZW50aXJlIGRldmljZSwgbm90IGp1c3Qgb25lIHBhcnRpdGlvbiFcbiIKK21zZ3N0ciAiJXMgaXMgaGV0IGhlbGUgYXBwYXJhYXQsIG5pZXQgc2xlY2h0cyBlZW4gcGFydGl0aWUhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMyMworbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICInbWtlMmZzJyB3b3JkdCBnZWR3b25nZW4gdWl0Z2V2b2VyZC4gIEhvb3AgZGF0IC9ldGMvbXRhYiBvbmp1aXN0IGlzLlxuIgorCisjOiBtaXNjL3V0aWwuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgbWFrZSBhICVzIGhlcmUhXG4iCittc2dzdHIgInphbCBoaWVyIGdlZW4gJXMgbWFrZW4hXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMzNQorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICInbWtlMmZzJyB3b3JkdCBnZWR3b25nZW4gdWl0Z2V2b2VyZC5cbiIKKworIzogbWlzYy91dGlsLmM6MzUxCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIGpvdXJuYWwgb3B0aW9ucyFcbiIKK21zZ3N0ciAiS2FuIGdlZW4gZ2VoZXVnZW4gcmVzZXJ2ZXJlbiBvbSBqb3VybmFsLW9wdGllcyB0ZSBvbnRsZWRlbiFcbiIKKworIzogbWlzYy91dGlsLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3QgZmluZCBqb3VybmFsIGRldmljZSBtYXRjaGluZyAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiS2FuIGdlZW4gam91cm5hbC1hcHBhcmFhdCB2aW5kZW4gZGF0IG92ZXJlZW5rb210IG1ldCAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzo0MDMKK21zZ2lkICIiCisiXG4iCisiQmFkIGpvdXJuYWwgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiSm91cm5hbCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgam91cm5hbCBvcHRpb25zIGFyZTpcbiIKKyJcdHNpemU9PGpvdXJuYWwgc2l6ZSBpbiBtZWdhYnl0ZXM+XG4iCisiXHRkZXZpY2U9PGpvdXJuYWwgZGV2aWNlPlxuIgorIlx0bG9jYXRpb249PGpvdXJuYWwgbG9jYXRpb24+XG4iCisiXG4iCisiVGhlIGpvdXJuYWwgc2l6ZSBtdXN0IGJlIGJldHdlZW4gMTAyNCBhbmQgMTAyNDAwMDAgZmlsZXN5c3RlbSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPbmdlbGRpZ2Ugam91cm5hbC1vcHRpZXMgb3BnZWdldmVuLlxuIgorIlxuIgorIkpvdXJuYWwtb3B0aWVzIHdvcmRlbiBnZXNjaGVpZGVuIGRvb3Iga29tbWEncyxcbiIKKyJodW4gYXJndW1lbnQgd29yZHQgdm9vcmFmZ2VnYWFuIGRvb3IgZWVuICc9Jy10ZWtlbi5cbiIKKyJcbiIKKyJHZWxkaWdlIGpvdXJuYWwtb3B0aWVzIHppam46XG4iCisiICAgIHNpemU9PGpvdXJuYWwtZ3Jvb3R0ZSBpbiBtZWdhYnl0ZXM+XG4iCisiICAgIGRldmljZT08am91cm5hbC1hcHBhcmFhdD5cbiIKKyIgICAgbG9jYXRpb249PGpvdXJuYWwtbG9jYXRpZT5cbiIKKyJcbiIKKyJEZSBncm9vdHRlIHZhbiBoZXQgam91cm5hbCBpcyBtaW5pbWFhbCAxMDI0IGVuIG1heGltYWFsIDEwMjQwMDAwIGJsb2trZW4uXG4iCisiXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQzNAorbXNnaWQgIiIKKyJcbiIKKyJGaWxlc3lzdGVtIHRvbyBzbWFsbCBmb3IgYSBqb3VybmFsXG4iCittc2dzdHIgIiIKKyJcbiIKKyJCZXN0YW5kc3N5c3RlZW0gaXMgdGUga2xlaW4gdm9vciBlZW4gam91cm5hbC5cbiIKKworIzogbWlzYy91dGlsLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgcmVxdWVzdGVkIGpvdXJuYWwgc2l6ZSBpcyAlZCBibG9ja3M7IGl0IG11c3QgYmVcbiIKKyJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gIEFib3J0aW5nLlxuIgorbXNnc3RyICIiCisiXG4iCisiRGUgZ2V2cmFhZ2RlIGpvdXJuYWwtYWZtZXRpbmcgaXMgJWQgYmxva2tlbjsgbWFhciBkZXplIGRpZW50XG4iCisidHVzc2VuIGRlIDEwMjQgZW4gZGUgMTAuMjQwLjAwMCBibG9ra2VuIHRlIGxpZ2dlbi4gIEdlc3RvcHQuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQ0OQorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIHNpemUgdG9vIGJpZyBmb3IgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkpvdXJuYWwtYWZtZXRpbmcgaXMgdGUgZ3Jvb3Qgdm9vciBiZXN0YW5kc3N5c3RlZW0uXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBmaWxlc3lzdGVtIHdpbGwgYmUgYXV0b21hdGljYWxseSBjaGVja2VkIGV2ZXJ5ICVkIG1vdW50cyBvclxuIgorIiVnIGRheXMsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gIFVzZSB0dW5lMmZzIC1jIG9yIC1pIHRvIG92ZXJyaWRlLlxuIgorbXNnc3RyICIiCisiRGl0IGJlc3RhbmRzc3lzdGVlbSB6YWwgYXV0b21hdGlzY2ggZ2Vjb250cm9sZWVyZCB3b3JkZW4gbmEgZWxrZVxuIgorIiVkIGFhbmtvcHBlbGluZ2VuIG9mIG5hICVnIGRhZ2VuLCBhZmhhbmtlbGlqayB2YW4gd2F0IGhldCBlZXJzdCB2b29ya29tdC5cbiIKKyJVIGt1bnQgJ3R1bmUyZnMnIG1ldCAnLWMnIG9mICctaScgZ2VicnVpa2VuIG9tIGRpdCBiaWogdGUgc3RlbGxlbi5cbiIKKworIzogbWlzYy91dWlkZC5jOjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWRdIFstcCBwaWRmaWxlXSBbLXMgc29ja2V0cGF0aF0gWy1UIHRpbWVvdXRdXG4iCittc2dzdHIgIkdlYnJ1aWs6ICAlcyBbLWRdIFstcCBQSUQtYmVzdGFuZF0gWy1zIHNvY2tldC1wYWRdIFstVCB0aWpkc2xpbWlldF1cbiIKKworIzogbWlzYy91dWlkZC5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyBbLXJ8dF0gWy1uIG51bV0gWy1zIHNvY2tldHBhdGhdXG4iCittc2dzdHIgIiAgICAgICAgICAlcyBbLXJ8dF0gWy1uIG51bW1lcl0gWy1zIHNvY2tldC1wYWRdXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiICAgICAgICAgICVzIC1rXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoxNTUKK21zZ2lkICJiYWQgYXJndW1lbnRzIgorbXNnc3RyICJvbmdlbGRpZ2UgYXJndW1lbnRlbiIKKworIzogbWlzYy91dWlkZC5jOjE3MworbXNnaWQgImNvbm5lY3QiCittc2dzdHIgInZlcmJpbmRlbiIKKworIzogbWlzYy91dWlkZC5jOjE5MgorbXNnaWQgIndyaXRlIgorbXNnc3RyICJzY2hyaWp2ZW4iCisKKyM6IG1pc2MvdXVpZGQuYzoyMDAKK21zZ2lkICJyZWFkIGNvdW50IgorbXNnc3RyICJnZWxlemVuIGFhbnRhbCIKKworIzogbWlzYy91dWlkZC5jOjIwNgorbXNnaWQgImJhZCByZXNwb25zZSBsZW5ndGgiCittc2dzdHIgIm9uZ2VsZGlnZSBhbnR3b29yZGxlbmd0ZSIKKworIzogbWlzYy91dWlkZC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1dWlkZCBkYWVtb24gYWxyZWFkeSBydW5uaW5nIGF0IHBpZCAlc1xuIgorbXNnc3RyICJ1dWlkZC1kaWVuc3QgZHJhYWl0IGFsIG9uZGVyIFBJRCAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICJLYW4gZ2VlbiBVTklYLXN0cmVhbS1zb2NrZXQgYWFubWFrZW46ICVzIgorCisjOiBtaXNjL3V1aWRkLmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGJpbmQgdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIkthbiBVTklYLXN0cmVhbS1zb2NrZXQgJXMgbmlldCBiaW5kZW46ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbGlzdGVuIG9uIHVuaXggc29ja2V0ICVzOiAlc1xuIgorbXNnc3RyICJLYW4gbmlldCBsdWlzdGVyZW4gb3AgVU5JWC1zdHJlYW0tc29ja2V0ICVzOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgZnJvbSBjbGllbnQsIGxlbiA9ICVkXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyBsZXplbiB2YW4gY2xpw6tudDsgbGVuZ3RlID0gJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVyYXRpb24gJWQsIGluY29taW5nIG51bSA9ICVkXG4iCittc2dzdHIgImJld2Vya2luZyAlZCwgZ2VnZXZlbiBnZXRhbCA9ICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRDogJXNcbiIKK21zZ3N0ciAiR2VnZW5lcmVlcmRlIHRpamRzLVVVSUQ6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHJhbmRvbSBVVUlEOiAlc1xuIgorbXNnc3RyICJHZWdlbmVyZWVyZGUgd2lsbGVrZXVyaWdlIFVVSUQ6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kICVkIHN1YnNlcXVlbnQgVVVJRHNcbiIKK21zZ3N0clswXSAiVGlqZHMtVVVJRCAlcyB3ZXJkIGdlZ2VuZXJlZXJkLCBlbiDDqcOpbiBvcHZvbGdlbmRlXG4iCittc2dzdHJbMV0gIlRpamRzLVVVSUQgJXMgd2VyZCBnZWdlbmVyZWVyZCwgZW4gJWQgb3B2b2xnZW5kZVxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCAlZCBVVUlEJ3M6XG4iCittc2dzdHIgIkVyIHppam4gJWQgVVVJRCdzIGdlZ2VuZXJlZXJkOlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uICVkXG4iCittc2dzdHIgIk9uZ2VsZGlnZSBiZXdlcmtpbmcgJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjQ3NyBtaXNjL3V1aWRkLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXI6ICVzXG4iCittc2dzdHIgIk9uZ2VsZGlnIGdldGFsOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTM0IG1pc2MvdXVpZGQuYzo1NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2FsbGluZyB1dWlkZCBkYWVtb24gKCVzKTogJXNcbiIKK21zZ3N0ciAiRm91dCBiaWogYWFucm9lcGVuIHZhbiB1dWlkZC1kaWVuc3QgKCVzKTogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiVzIGVuIMOpw6luIG9wdm9sZ2VuZGUgVVVJRFxuIgorbXNnc3RyWzFdICIlcyBlbiAlZCBvcHZvbGdlbmRlIFVVSUQnc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ4Cittc2dpZCAiTGlzdCBvZiBVVUlEJ3M6XG4iCittc2dzdHIgIkxpanN0IHZhbiBVVUlEJ3M6XG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCByZXBseSBsZW5ndGggZnJvbSBzZXJ2ZXIgJWRcbiIKK21zZ3N0ciAiT252ZXJ3YWNodGUgYW50d29vcmRsZW5ndGUgKCVkKSB2YW4gc2VydmVyXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qga2lsbCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZDogJXNcbiIKK21zZ3N0ciAiS2FuIHV1aWRkIG1ldCBQSUQgJWQgbmlldCBlbGltaW5lcmVuOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIktpbGxlZCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZFxuIgorbXNnc3RyICJ1dWlkZCBtZXQgUElEICVkIGlzIGdlw6tsaW1pbmVlcmRcbiIKKworIzogbWlzYy91dWlkZ2VuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstcl0gWy10XVxuIgorbXNnc3RyICJHZWJydWlrOiAgJXMgWy1yXSBbLXRdXG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDIKK21zZ2lkICIjIEV4dGVudCBkdW1wOlxuIgorbXNnc3RyICIjIChkZWJ1ZykgRXh0ZW50IGR1bXA6XG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iCittc2dzdHIgIiMgKGRlYnVnKVx0TnVtPSVsbHUgU2l6ZT0lbGx1LCBDdXJzb3I9JWxsdSwgU29ydGVkPSVsbHVcbiIKKworIzogcmVzaXplL21haW4uYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstZCBkZWJ1Z19mbGFnc10gWy1mXSBbLUZdIFstTV0gWy1QXSBbLXBdIGRldmljZSBbbmV3X3NpemVdXG4iCisiXG4iCittc2dzdHIgIiIKKyJHZWJydWlrOiAgJXMgWy1kIGRlYnVndmxhZ2dlbl0gWy1mRk1wUF0gYXBwYXJhYXQgW25pZXV3ZV9ncm9vdHRlXVxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjY2Cittc2dpZCAiRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiVWl0YnJlaWRlbiB2YW4gaW5vZGV0YWJlbCIKKworIzogcmVzaXplL21haW4uYzo2OQorbXNnaWQgIlJlbG9jYXRpbmcgYmxvY2tzIgorbXNnc3RyICJWZXJwbGFhdHNlbiB2YW4gYmxva2tlbiIKKworIzogcmVzaXplL21haW4uYzo3MgorbXNnaWQgIlNjYW5uaW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJTY2FubmVuIHZhbiBpbm9kZXRhYmVsIgorCisjOiByZXNpemUvbWFpbi5jOjc1Cittc2dpZCAiVXBkYXRpbmcgaW5vZGUgcmVmZXJlbmNlcyIKK21zZ3N0ciAiQmlqd2Vya2VuIHZhbiBpbm9kZS12ZXJ3aWp6aW5nZW4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NzgKK21zZ2lkICJNb3ZpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIlZlcnBsYWF0c2VuIHZhbiBpbm9kZXRhYmVsIgorCisjOiByZXNpemUvbWFpbi5jOjgxCittc2dpZCAiVW5rbm93biBwYXNzPyE/IgorbXNnc3RyICJPbmJla2VuZGUgc3RhcD8hPyIKKworIzogcmVzaXplL21haW4uYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJCZWdpbiBwYXNzICVkIChtYXggPSAlbHUpXG4iCittc2dzdHIgIkJlZ2luIHZhbiBzdGFwICVkIChtYXggPSAlbHUpXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MTU1Cittc2dpZCAiIgorIlxuIgorIlJlc2l6aW5nIGJpZ2FsbG9jIGZpbGUgc3lzdGVtcyBoYXMgbm90IGJlZW4gZnVsbHkgdGVzdGVkLiAgUHJvY2VlZCBhdFxuIgorInlvdXIgb3duIHJpc2shICBVc2UgdGhlIGZvcmNlIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBnbyBhaGVhZCBhbnl3YXkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJIZXQgdmFuIGdyb290dGUgdmVyYW5kZXJlbiB2YW4gZWVuICdiaWdhbGxvYyctYmVzdGFuZHNzeXN0ZWVtIGlzIG5vZ1xuIgorIm9udm9sZG9lbmRlIGdldGVzdC4gIERvb3JnYWFuIGlzIGdlaGVlbCB2b29yIGVpZ2VuIHJpc2ljbyEgIEdlYnJ1aWtcbiIKKyJkZSBkd2FuZ29wdGllIGFscyB1IHRvY2ggZG9vciB3aWx0IGdhYW4uXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIG9wZW5pbmcgJXMiCittc2dzdHIgInRpamRlbnMgb3BlbmVuIHZhbiAlcyIKKworIzogcmVzaXplL21haW4uYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZ2V0dGluZyBzdGF0IGluZm9ybWF0aW9uIGZvciAlcyIKK21zZ3N0ciAidGlqZGVucyBvcHZyYWdlbiB2YW4gc3RhdHVzIHZhbiAlcyIKKworIzogcmVzaXplL21haW4uYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZiAlcycgZmlyc3QuXG4iCisiXG4iCittc2dzdHIgIiIKKyJWb2VyIGVlcnN0ICdlMmZzY2sgLWYgJXMnIHVpdC5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXN0aW1hdGVkIG1pbmltdW0gc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbTogJWxsdVxuIgorbXNnc3RyICJHZXNjaGF0dGUgbWluaW11bSBncm9vdHRlIHZhbiBoZXQgYmVzdGFuZHNzeXN0ZWVtOiAlbGx1XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbmV3IHNpemU6ICVzXG4iCittc2dzdHIgIk9uZ2VsZGlnZSBuaWV1d2UgZ3Jvb3R0ZTogJXNcbiIKKworIzogcmVzaXplL21haW4uYzo0MjEKK21zZ2lkICJOZXcgc2l6ZSB0b28gbGFyZ2UgdG8gYmUgZXhwcmVzc2VkIGluIDMyIGJpdHNcbiIKK21zZ3N0ciAiIgorIk5pZXV3ZSBncm9vdHRlIGlzIHRlIGdyb290IG9tIHVpdGdlZHJ1a3QgdGUga3VubmVuIHdvcmRlbiBpbiAzMiBiaXRzLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJOZXcgc2l6ZSBzbWFsbGVyIHRoYW4gbWluaW11bSAoJWxsdSlcbiIKK21zZ3N0ciAiTmlldXdlIGdyb290dGUgaXMga2xlaW5lciBkYW4gbWluaW11bSAoJWxsdSkuXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDM1Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgbGVuZ3RoIgorbXNnc3RyICJPbmdlbGRpZ2UgbGVuZ3RlIHZvb3IgJ3N0cmlkZSciCisKKyM6IHJlc2l6ZS9tYWluLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29udGFpbmluZyBwYXJ0aXRpb24gKG9yIGRldmljZSkgaXMgb25seSAlbGx1ICglZGspIGJsb2Nrcy5cbiIKKyJZb3UgcmVxdWVzdGVkIGEgbmV3IHNpemUgb2YgJWxsdSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJEZSBwYXJ0aXRpZSAob2YgaGV0IGFwcGFyYWF0KSBpcyBzbGVjaHRzICVsbHUgYmxva2tlbiAodmFuICVkSykuXG4iCisiVSB2cm9lZyBvbSBlZW4gbmlldXdlIGdyb290dGUgdmFuICVsbHUgYmxva2tlbi5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIGlzIGFscmVhZHkgJWxsdSAoJWRrKSBibG9ja3MgbG9uZy4gIE5vdGhpbmcgdG8gZG8hXG4iCisiXG4iCittc2dzdHIgIiIKKyJIZXQgYmVzdGFuZHNzeXN0ZWVtIGlzIGFsICVsbHUgYmxva2tlbiAodmFuICVkSykgZ3Jvb3QuICBFciBpcyBuaWV0cyB0ZSAiCisiZG9lbiFcbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXppbmcgdGhlIGZpbGVzeXN0ZW0gb24gJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIiIKKyJWYW4gZ3Jvb3R0ZSB2ZXJhbmRlcmVuIHZhbiBiZXN0YW5kc3N5c3RlZW0gb3AgJXMgbmFhciAlbGx1IGJsb2trZW4gKHZhbiAiCisiJWRLKS5cbiIKKworIzogcmVzaXplL21haW4uYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlc2l6ZSAlcyIKK21zZ3N0ciAidGlqZGVucyB2ZXJhbmRlcmVuIHZhbiBkZSBncm9vdHRlIHZhbiAlcyIKKworIzogcmVzaXplL21haW4uYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZnkgJXMnIHRvIGZpeCB0aGUgZmlsZXN5c3RlbVxuIgorImFmdGVyIHRoZSBhYm9ydGVkIHJlc2l6ZSBvcGVyYXRpb24uXG4iCittc2dzdHIgIiIKKyJWb2VyICdlMmZzY2sgLWZ5ICVzJyB1aXQgb20gaGV0IGJlc3RhbmRzc3lzdGVlbVxuIgorInRlIHJlcGFyZXJlbiBuYSBkZSBhZmdlYnJva2VuIGdyb290dGV2ZXJhbmRlcmluZy5cbiIKKworIzogcmVzaXplL21haW4uYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIG9uICVzIGlzIG5vdyAlbGx1ICglZGspIGJsb2NrcyBsb25nLlxuIgorIlxuIgorbXNnc3RyICIiCisiSGV0IGJlc3RhbmRzc3lzdGVlbSBvcCAlcyBpcyBudSAlbGx1IGJsb2trZW4gKHZhbiAlZEspIGdyb290LlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gdHJ1bmNhdGUgJXMiCittc2dzdHIgInRpamRlbnMgaW5rb3J0ZW4gdmFuICVzIgorCisjOiByZXNpemUvb25saW5lLmM6ODIKK21zZ2lkICJrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXplIHdpdGggc3BhcnNlX3N1cGVyMiIKK21zZ3N0ciAiIgorImRlIGtlcm5lbCBvbmRlcnN0ZXVudCBoZXQgbGl2ZSB2ZXJncm90ZW4vdmVya2xlaW5lbiBtZXQgJ3NwYXJzZV9zdXBlcjInIG5pZXQiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4NworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXM7IG9uLWxpbmUgcmVzaXppbmcgcmVxdWlyZWRcbiIKK21zZ3N0ciAiIgorIkJlc3RhbmRzc3lzdGVlbSBvcCAlcyBpcyBhYW5nZWtvcHBlbGQgb3AgJXM7XG4iCisiaGV0IHZlcmdyb3Rlbi92ZXJrbGVpbmVuIHphbCBsaXZlIGdlZGFhbiBtb2V0ZW4gd29yZGVuLlxuIgorCisjOiByZXNpemUvb25saW5lLmM6OTEKK21zZ2lkICJPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJIZXQgbGl2ZSBrcmltcGVuIHdvcmR0IG5pZXQgb25kZXJzdGV1bmQiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTYKK21zZ2lkICJGaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICJCZXN0YW5kc3N5c3RlZW0gb25kZXJzdGV1bnQgbGl2ZSB2ZXJncm90ZW4vdmVya2xlaW5lbiBuaWV0IgorCisjOiByZXNpemUvb25saW5lLmM6MTI1Cittc2dpZCAiTm90IGVub3VnaCByZXNlcnZlZCBnZHQgYmxvY2tzIGZvciByZXNpemluZyIKK21zZ3N0ciAiTmlldCBnZW5vZWcgZ2VyZXNlcnZlZXJkZSBHRFQtYmxva2tlbiBvbSBncm9vdHRlIHRlIGt1bm5lbiB2ZXJhbmRlcmVuIgorCisjOiByZXNpemUvb25saW5lLmM6MTMyCittc2dpZCAiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcmVzaXppbmcgYSBmaWxlIHN5c3RlbSB0aGlzIGxhcmdlIgorbXNnc3RyICIiCisiRGUga2VybmVsIG9uZGVyc3RldW50IGhldCB2ZXJncm90ZW4vdmVya2xlaW5lbiB2YW5cbiIKKyJlZW4gYmVzdGFuZHNzeXN0ZWVtIG1ldCBkZXplIGFmbWV0aW5nZW4gbmlldCIKKworIzogcmVzaXplL29ubGluZS5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBtb3VudHBvaW50ICVzIgorbXNnc3RyICJ0aWpkZW5zIG9wZW5lbiB2YW4gYWFua29wcGVsaW5nc3B1bnQgJXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2xkIHJlc2l6ZSBpbnRlcmZhY2UgcmVxdWVzdGVkLlxuIgorbXNnc3RyICJPdWRlIGludGVyZmFjZSB2b29yIGdyb290dGV2ZXJhbmRlcmluZyBpcyBnZXZyYWFnZC5cbiIKKworIzogcmVzaXplL29ubGluZS5jOjE2NCByZXNpemUvb25saW5lLmM6MTgxCittc2dpZCAiUGVybWlzc2lvbiBkZW5pZWQgdG8gcmVzaXplIGZpbGVzeXN0ZW0iCittc2dzdHIgIlRvZWdhbmcgZ2V3ZWlnZXJkIHZvb3IgaGV0IHZlcmdyb3Rlbi92ZXJrbGVpbmVuIHZhbiBiZXN0YW5kc3N5c3RlZW0iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNjcgcmVzaXplL29ubGluZS5jOjE4NworbXNnaWQgIldoaWxlIGNoZWNraW5nIGZvciBvbi1saW5lIHJlc2l6aW5nIHN1cHBvcnQiCittc2dzdHIgIlRpamRlbnMgY29udHJvbGUgb3Agb25kZXJzdGV1bmluZyB2b29yIGxpdmUgdmVyZ3JvdGVuL3ZlcmtsZWluZW4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxODQKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIkRlIGtlcm5lbCBvbmRlcnN0ZXVudCBoZXQgbGl2ZSB2ZXJncm90ZW4vdmVya2xlaW5lbiBuaWV0IgorCisjOiByZXNpemUvb25saW5lLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlBlcmZvcm1pbmcgYW4gb24tbGluZSByZXNpemUgb2YgJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIlVpdHZvZXJlbiB2YW4gbGl2ZSB2ZXJhbmRlcmluZyB2YW4gJXMgbmFhciAlbGx1IGJsb2trZW4gKHZhbiAlZEspLlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MjMzCittc2dpZCAiV2hpbGUgdHJ5aW5nIHRvIGV4dGVuZCB0aGUgbGFzdCBncm91cCIKK21zZ3N0ciAiVGlqZGVucyB1aXRicmVpZGVuIHZhbiBkZSBsYWF0c3RlIGdyb2VwIgorCisjOiByZXNpemUvb25saW5lLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHRyeWluZyB0byBhZGQgZ3JvdXAgIyVkIgorbXNnc3RyICJUaWpkZW5zIHRvZXZvZWdlbiB2YW4gZ3JvZXAgIyVkIgorCisjOiByZXNpemUvb25saW5lLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXMsIGFuZCBvbi1saW5lIHJlc2l6aW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gIgorInRoaXMgc3lzdGVtLlxuIgorbXNnc3RyICIiCisiQmVzdGFuZHNzeXN0ZWVtIG9wICVzIGlzIGFhbmdla29wcGxlZCBvcCAlcztcbiIKKyJvcCBkaXQgc3lzdGVlbSBpcyBsaXZlIHZlcmdyb3Rlbi92ZXJrbGVpbmVuIG5pZXQgbW9nZWxpamsuXG4iCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5vZGVzICglbGx1KSBtdXN0IGJlIGxlc3MgdGhhbiAldSIKK21zZ3N0ciAiYWFudGFsIGlub2RlcyAoJWxsdSkgbW9ldCBrbGVpbmVyIHppam4gZGFuICV1IgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6NjkxCittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIgorbXNnc3RyICJnZXJlc2VydmVlcmRlIGJsb2trZW4iCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo5MzYKK21zZ2lkICJtZXRhLWRhdGEgYmxvY2tzIgorbXNnc3RyICJibG9ra2VuIHZvb3IgbWV0YWdlZ2V2ZW5zIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MTAzOSByZXNpemUvcmVzaXplMmZzLmM6MTgzNgorbXNnaWQgIm5ldyBtZXRhIGJsb2NrcyIKK21zZ3N0ciAibmlldXdlIG1ldGFibG9ra2VuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjA1NgorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW4hICBObyBzYiBpbiBsYXN0IHN1cGVyX3NwYXJzZSBiZz9cbiIKK21zZ3N0ciAiIgorIlpvdSBub29pdCBtb2dlbiBnZWJldXJlbjogZ2VlbiBzdXBlcmJsb2sgaW4gbGFhdHN0ZSAnc3VwZXJfc3BhcnNlJyAiCisiYmxva2dyb2VwIVxuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjA2MQorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW4hICBVbmV4cGVjdGVkIG9sZF9kZXNjIGluIHN1cGVyX3NwYXJzZSBiZz9cbiIKK21zZ3N0ciAiIgorIlpvdSBub29pdCBtb2dlbiBnZWJldXJlbjogb252ZXJ3YWNodGUgJ29sZF9kZXNjJyBpbiAnc3VwZXJfc3BhcnNlJyAiCisiYmxva2dyb2VwIVxuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjEzOQorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW46IHJlc2l6ZSBpbm9kZSBjb3JydXB0IVxuIgorbXNnc3RyICJab3Ugbm9vaXQgbW9nZW4gZ2ViZXVyZW46IGRlICdyZXNpemUnLWlub2RlIGlzIGJlc2NoYWRpZ2QhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMQorIywgZnV6enkKK21zZ2lkICJFWFQyRlMgTGlicmFyeSB2ZXJzaW9uIDEuNDIuMTMiCittc2dzdHIgIkVYVDJGUy1iaWJsaW90aGVlayAgdmVyc2llIDEuNDIuMTIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0Ml9maWxzeXMgc3RydWN0dXJlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgJ2V4dDJfZmlsc3lzJy1zdHJ1Y3R1dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgJ2JhZGJsb2Nrc19saXN0Jy1zdHJ1Y3R1dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgJ2JhZGJsb2Nrc19pdGVyYXRlJy1zdHJ1Y3R1dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfc2NhbiBzdHJ1Y3R1cmUiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgdm9vciAnaW5vZGVfc2Nhbictc3RydWN0dXVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgJ2lvX2NoYW5uZWwnLXN0cnVjdHV1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB1bml4IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgVW5peC0naW9fY2hhbm5lbCctc3RydWN0dXVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX21hbmFnZXIgc3RydWN0dXJlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgJ2lvX21hbmFnZXInLXN0cnVjdHV1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBibG9ja19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgJ2Jsb2NrX2JpdG1hcCctc3RydWN0dXVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgdm9vciAnaW5vZGVfYml0bWFwJy1zdHJ1Y3R1dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZ2VuZXJpY19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgJ2dlbmVyaWNfYml0bWFwJy1zdHJ1Y3R1dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdGVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yIHRlc3QtJ2lvX2NoYW5uZWwnLXN0cnVjdHV1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBkaXJlY3RvcnkgYmxvY2sgbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgdm9vciBtYXBwZW5ibG9rbGlqc3Qtc3RydWN0dXVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGljb3VudCBzdHJ1Y3R1cmUiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgdm9vciAnaWNvdW50Jy1zdHJ1Y3R1dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgUG93ZXJxdWVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yIFBvd2VycXVlc3QtJ2lvX2NoYW5uZWwnLXN0cnVjdHV1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyIGZpbGUgc3RydWN0dXJlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgZXh0Mi1iZXN0YW5kcy1zdHJ1Y3R1dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgRXh0MiBJbWFnZSBIZWFkZXIiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgdm9vciBFeHQyLWltYWdlaGVhZGVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgaW5vZGUtJ2lvX2NoYW5uZWwnLXN0cnVjdHV1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBoYW5kbGUiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgdm9vciBFeHQ0LWV4dGVudC1oYW5kbGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyBudW1iZXIgaW4gc3VwZXItYmxvY2siCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgaW4gc3VwZXJibG9rIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzEKK21zZ2lkICJGaWxlc3lzdGVtIHJldmlzaW9uIHRvbyBoaWdoIgorbXNnc3RyICJCZXN0YW5kc3N5c3RlZW12ZXJzaWUgaXMgdGUgaG9vZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMyCittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSB0byBmaWxlc3lzdGVtIG9wZW5lZCByZWFkLW9ubHkiCittc2dzdHIgIiIKKyJQb2dpbmcgdG90IHNjaHJpanZlbiBuYWFyIGJlc3RhbmRzc3lzdGVlbSBkYXQgZ2VvcGVuZCBpcyB2b29yIGFsbGVlbi1sZXplbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMzCittc2dpZCAiQ2FuJ3QgcmVhZCBncm91cCBkZXNjcmlwdG9ycyIKK21zZ3N0ciAiS2FuIGdyb2Vwc2Jlc2NocmlqdmVycyBuaWV0IGxlemVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzQKK21zZ2lkICJDYW4ndCB3cml0ZSBncm91cCBkZXNjcmlwdG9ycyIKK21zZ3N0ciAiS2FuIGdyb2Vwc2Jlc2NocmlqdmVycyBuaWV0IHNjaHJpanZlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM1Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiQmVzY2hhZGlnZGUgZ3JvZXBzYmVzY2hyaWp2ZXI6IG9uZ2VsZGlnIGJsb2sgdm9vciBibG9rLWJpdGthYXJ0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzYKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgYml0bWFwIgorbXNnc3RyICJCZXNjaGFkaWdkZSBncm9lcHNiZXNjaHJpanZlcjogb25nZWxkaWcgYmxvayB2b29yIGlub2RlLWJpdGthYXJ0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzcKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgdGFibGUiCittc2dzdHIgIkJlc2NoYWRpZ2RlIGdyb2Vwc2Jlc2NocmlqdmVyOiBvbmdlbGRpZyBibG9rIHZvb3IgaW5vZGV0YWJlbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM4Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgYml0bWFwIgorbXNnc3RyICJLYW4gZWVuIGlub2RlLWJpdGthYXJ0IG5pZXQgc2NocmlqdmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiS2FuIGVlbiBpbm9kZS1iaXRrYWFydCBuaWV0IGxlemVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDAKK21zZ2lkICJDYW4ndCB3cml0ZSBhIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiS2FuIGVlbiBibG9rLWJpdGthYXJ0IG5pZXQgc2NocmlqdmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDEKK21zZ2lkICJDYW4ndCByZWFkIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICJLYW4gZWVuIGJsb2stYml0a2FhcnQgbmlldCBsZXplbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQyCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIkthbiBlZW4gaW5vZGV0YWJlbCBuaWV0IHNjaHJpanZlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQzCittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiS2FuIGVlbiBpbm9kZXRhYmVsIG5pZXQgbGV6ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NAorbXNnaWQgIkNhbid0IHJlYWQgbmV4dCBpbm9kZSIKK21zZ3N0ciAiS2FuIHZvbGdlbmRlIGlub2RlIG5pZXQgbGV6ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuZXhwZWN0ZWQgYmxvY2sgc2l6ZSIKK21zZ3N0ciAiQmVzdGFuZHNzeXN0ZWVtIGhlZWZ0IGVlbiBvbnZlcndhY2h0ZSBibG9rZ3Jvb3R0ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ2Cittc2dpZCAiRVhUMiBkaXJlY3RvcnkgY29ycnVwdGVkIgorbXNnc3RyICJFWFQyLW1hcCBpcyBiZXNjaGFkaWdkIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDcKK21zZ2lkICJBdHRlbXB0IHRvIHJlYWQgYmxvY2sgZnJvbSBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHJlYWQiCittc2dzdHIgIlBvZ2luZyB0b3QgbGV6ZW4gdmFuIGJsb2sgdWl0IGJlc3RhbmRzc3lzdGVlbSBsYXMgdGUgd2VpbmlnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDgKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIGJsb2NrIHRvIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgd3JpdGUiCittc2dzdHIgIlBvZ2luZyB0b3Qgc2NocmlqdmVuIHZhbiBibG9rIG5hYXIgYmVzdGFuZHNzeXN0ZWVtIHNjaHJlZWYgdGUgd2VpbmlnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDkKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIHRoZSBkaXJlY3RvcnkiCittc2dzdHIgIkdlZW4gdnJpamUgcnVpbXRlIG1lZXIgaW4gZGUgbWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTAKK21zZ2lkICJJbm9kZSBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiSW5vZGUtYml0a2FhcnQgaXMgbmlldCBnZWxhZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKK21zZ2lkICJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiQmxvay1iaXRrYWFydCBpcyBuaWV0IGdlbGFkZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MgorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIgorbXNnc3RyICJPbmdlbGRpZyBpbm9kZW51bW1lciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUzCittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIiCittc2dzdHIgIk9uZ2VsZGlnIGJsb2tudW1tZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NAorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIgorbXNnc3RyICIqKkludGVybmUgcHJvZ3JhbW1hZm91dCoqIGluIGV4dDJmc19leHBhbmRfZGlyKCkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gYnVpbGQgcHJvcG9zZWQgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorIkVyIGlzIG9udm9sZG9lbmRlIHJ1aW10ZSBvbSBoZXQgdm9vcmdlc3RlbGRlIGJlc3RhbmRzc3lzdGVlbSB0ZSBjcmXDq3JlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU2Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiT25nZWxkaWcgYmxva251bW1lciBnZWdldmVuIGFhbiBleHQyZnNfbWFya19ibG9ja19iaXRtYXAoKSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU3Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICJPbmdlbGRpZyBibG9rbnVtbWVyIGdlZ2V2ZW4gYWFuIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwKCkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OAorbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAiCittc2dzdHIgIk9uZ2VsZGlnIGJsb2tudW1tZXIgZ2VnZXZlbiBhYW4gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwKCkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIk9uZ2VsZGlnIGJsb2tudW1tZXIgZ2VnZXZlbiBhYW4gZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwKCkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MAorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiT25nZWxkaWcgYmxva251bW1lciBnZWdldmVuIGFhbiBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCgpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjEKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIgorbXNnc3RyICJPbmdlbGRpZyBibG9rbnVtbWVyIGdlZ2V2ZW4gYWFuIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCgpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjIKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBibG9jayBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIlBvZ2luZyBvbSBoZXQgZWluZCB2YW4gYmxvay1iaXRrYWFydCB2b29yYmlqIGhldCBlY2h0ZSBlaW5kIHRlIHNtdXJmZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MworbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGlub2RlIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiIgorIlBvZ2luZyBvbSBoZXQgZWluZCB2YW4gaW5vZGUtYml0a2FhcnQgdm9vcmJpaiBoZXQgZWNodGUgZWluZCB0ZSBzbXVyZmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjQKK21zZ2lkICJJbGxlZ2FsIGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICJPbmdlbGRpZyBpbmRpcmVjdCBibG9rIGdldm9uZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKK21zZ2lkICJJbGxlZ2FsIGRvdWJseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiT25nZWxkaWcgZHViYmVsLWluZGlyZWN0IGJsb2sgZ2V2b25kZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NgorbXNnaWQgIklsbGVnYWwgdHJpcGx5IGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICJPbmdlbGRpZyBkcmlldm91ZGlnLWluZGlyZWN0IGJsb2sgZ2V2b25kZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NworbXNnaWQgIkJsb2NrIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiQmxvay1iaXRrYWFydGVuIHppam4gbmlldCBoZXR6ZWxmZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OAorbXNnaWQgIklub2RlIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiSW5vZGUtYml0a2FhcnRlbiB6aWpuIG5pZXQgaGV0emVsZmRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjkKK21zZ2lkICJJbGxlZ2FsIG9yIG1hbGZvcm1lZCBkZXZpY2UgbmFtZSIKK21zZ3N0ciAiT25nZWxkaWdlIG9mIG1pc3Zvcm1kZSBhcHBhcmFhdG5hYW0iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MAorbXNnaWQgIkEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiRXIgb250YnJlZWt0IGVlbiBibG9rZ3JvZXAgaW4gZGUgaW5vZGV0YWJlbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcxCittc2dpZCAiVGhlIGV4dDIgc3VwZXJibG9jayBpcyBjb3JydXB0IgorbXNnc3RyICJIZXQgRXh0Mi1zdXBlcmJsb2sgaXMgYmVzY2hhZGlnZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcyCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICJPbmdlbGRpZyBnZW5lcmllayBiaXRudW1tZXIgZ2VnZXZlbiBhYW4gZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAoKSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjczCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIk9uZ2VsZGlnIGdlbmVyaWVrIGJpdG51bW1lciBnZWdldmVuIGFhbiBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwKCkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NAorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiT25nZWxkaWcgZ2VuZXJpZWsgYml0bnVtbWVyIGdlZ2V2ZW4gYWFuIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwKCkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NQorbXNnaWQgIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiVGUgdmVlbCBzeW1ib2xpc2NoZSBrb3BwZWxpbmdlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc2Cittc2dpZCAiVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB0aGlzIGNhc2UiCittc2dzdHIgIkRlIGNhbGxiYWNrLWZ1bmN0aWUga2FuIGRpdCBnZXZhbCBuaWV0IGFhbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc3Cittc2dpZCAiVGhlIGlub2RlIGlzIGZyb20gYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJEZSBpbm9kZSBrb210IHVpdCBlZW4gc2xlY2h0IGJsb2sgaW4gZGUgaW5vZGV0YWJlbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc4Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKSIKK21zZ3N0ciAiQmVzdGFuZHNzeXN0ZWVtIGhlZWZ0IG5pZXQtb25kZXJzdGV1bmRlIGZ1bmN0aWVzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzkKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCByZWFkLW9ubHkgZmVhdHVyZShzKSIKK21zZ3N0ciAiQmVzdGFuZHNzeXN0ZWVtIGhlZWZ0IG5pZXQtb25kZXJzdGV1bmRlIGFsbGVlbi1sZXplbiBmdW5jdGllcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgwCittc2dpZCAiSU8gQ2hhbm5lbCBmYWlsZWQgdG8gc2VlayBvbiByZWFkIG9yIHdyaXRlIgorbXNnc3RyICJJbi0vdWl0dm9lcmthbmFhbCBrb24gZ2VlbiAnc2VlaycgZG9lbiBiaWogbGV6ZW4gb2Ygc2NocmlqdmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODEKK21zZ2lkICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIk9udm9sZG9lbmRlIGdlaGV1Z2VuIGJlc2NoaWtiYWFyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkiCittc2dzdHIgIk9uZ2VsZGlnIGFyZ3VtZW50IGdlZ2V2ZW4gYWFuIEV4dDItYmlibGlvdGhlZWsiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MworbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBibG9jayBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIkthbiBnZWVuIGJsb2sgcmVzZXJ2ZXJlbiBpbiBFeHQyLWJlc3RhbmRzc3lzdGVlbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg0Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGlub2RlIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiS2FuIGdlZW4gaW5vZGUgcmVzZXJ2ZXJlbiBpbiBFeHQyLWJlc3RhbmRzc3lzdGVlbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg1Cittc2dpZCAiRXh0MiBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIkV4dDItaW5vZGUgaXMgZ2VlbiBtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NgorbXNnaWQgIlRvbyBtYW55IHJlZmVyZW5jZXMgaW4gdGFibGUiCittc2dzdHIgIlRlIHZlZWwgdmVyd2lqemluZ2VuIGluIHRhYmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODcKK21zZ2lkICJGaWxlIG5vdCBmb3VuZCBieSBleHQyX2xvb2t1cCIKK21zZ3N0ciAiQmVzdGFuZCBpcyBuaWV0IGdldm9uZGVuIGRvb3IgJ2V4dDJfbG9va3VwKCknIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODgKK21zZ2lkICJGaWxlIG9wZW4gcmVhZC1vbmx5IgorbXNnc3RyICJCZXN0YW5kIGlzIGdlb3BlbmQgdm9vciBhbGxlZW4tbGV6ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OQorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiRXh0Mi1tYXBibG9rIG5pZXQgZ2V2b25kZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MAorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFeHQyLW1hcCBiZXN0YWF0IGFsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTEKK21zZ2lkICJVbmltcGxlbWVudGVkIGV4dDIgbGlicmFyeSBmdW5jdGlvbiIKK21zZ3N0ciAiT25nZcOvbXBsZW1lbnRlZXJkZSBFeHQyLWJpYmxpb3RoZWVrZnVuY3RpZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkyCittc2dpZCAiVXNlciBjYW5jZWwgcmVxdWVzdGVkIgorbXNnc3RyICJBbm51bGVyaW5nIGlzIHZlcnpvY2h0IGRvb3IgZ2VicnVpa2VyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTMKK21zZ2lkICJFeHQyIGZpbGUgdG9vIGJpZyIKK21zZ3N0ciAiRXh0Mi1iZXN0YW5kIGlzIHRlIGdyb290IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTQKK21zZ2lkICJTdXBwbGllZCBqb3VybmFsIGRldmljZSBub3QgYSBibG9jayBkZXZpY2UiCittc2dzdHIgIkFhbmdlZ2V2ZW4gam91cm5hbC1hcHBhcmFhdCBpcyBnZWVuIGJsb2stYXBwYXJhYXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQiCittc2dzdHIgIkdlZW4gam91cm5hbC1zdXBlcmJsb2sgZ2V2b25kZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NgorbXNnaWQgIkpvdXJuYWwgbXVzdCBiZSBhdCBsZWFzdCAxMDI0IGJsb2NrcyIKK21zZ3N0ciAiSm91cm5hbCBtb2V0IG1pbnN0ZW5zIDEwMjQgYmxva2tlbiB6aWpuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTcKK21zZ2lkICJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iCittc2dzdHIgIk5pZXQtb25kZXJzdGV1bmRlIGpvdXJuYWwtdmVyc2llIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTgKK21zZ2lkICJFcnJvciBsb2FkaW5nIGV4dGVybmFsIGpvdXJuYWwiCittc2dzdHIgIkZvdXQgdGlqZGVucyBsYWRlbiB2YW4gZXh0ZXJuIGpvdXJuYWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OQorbXNnaWQgIkpvdXJuYWwgbm90IGZvdW5kIgorbXNnc3RyICJHZWVuIGpvdXJuYWwgZ2V2b25kZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDAKK21zZ2lkICJEaXJlY3RvcnkgaGFzaCB1bnN1cHBvcnRlZCIKK21zZ3N0ciAiTWFwLWhhc2ggd29yZHQgbmlldCBvbmRlcnN0ZXVuZCIKKworIyBCZWhhbHZlIEUgZW4gRiB3b3JkZW4gZGUgdm9sZ2VuZGUgMzAgbGV0dGVyYWZrb3J0aW5nZW4gbmlldCBnZWJydWlrdC4KKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDEKK21zZ2lkICJJbGxlZ2FsIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBudW1iZXIiCittc2dzdHIgIk9uZ2VsZGlnIGJsb2tudW1tZXIgdm9vciB1aXRnZWJyZWlkIGtlbm1lcmsiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDIKK21zZ2lkICJDYW5ub3QgY3JlYXRlIGZpbGVzeXN0ZW0gd2l0aCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGlub2RlcyIKK21zZ3N0ciAiS2FuIGdlZW4gYmVzdGFuZHNzeXN0ZWVtIGFhbm1ha2VuIG1ldCBoZXQgZ2V2cmFhZ2RlIGFhbnRhbCBpbm9kZXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDMKK21zZ2lkICJFMmltYWdlIHNuYXBzaG90IG5vdCBpbiB1c2UiCittc2dzdHIgIkUyaW1hZ2Utc25hcHNob3Qgd29yZHQgbmlldCBnZWJydWlrdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNAorbXNnaWQgIlRvbyBtYW55IHJlc2VydmVkIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzIgorbXNnc3RyICJUZSB2ZWVsIGdlcmVzZXJ2ZWVyZGUgZ3JvZXBzYmVzY2hyaWp2ZXJibG9ra2VuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA1Cittc2dpZCAiUmVzaXplIGlub2RlIGlzIGNvcnJ1cHQiCittc2dzdHIgIkRlIHJlc2l6ZS1pbm9kZSBpcyBiZXNjaGFkaWdkIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA2Cittc2dpZCAiVHJpZWQgdG8gc2V0IGJsb2NrIGJtYXAgd2l0aCBtaXNzaW5nIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJQb2dpbmcgdG90IHpldHRlbiB2YW4gYmxvay1iaXRrYWFydCBtZXQgb250YnJla2VuZCBpbmRpcmVjdCBibG9rIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA3Cittc2dpZCAiVERCOiBTdWNjZXNzIgorbXNnc3RyICJUREI6IGdlbHVrdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOAorbXNnaWQgIlREQjogQ29ycnVwdCBkYXRhYmFzZSIKK21zZ3N0ciAiVERCOiBkYXRhYmFuayBpcyBiZXNjaGFkaWdkIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA5Cittc2dpZCAiVERCOiBJTyBFcnJvciIKK21zZ3N0ciAiVERCOiBpbi0vdWl0dm9lcmZvdXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTAKK21zZ2lkICJUREI6IExvY2tpbmcgZXJyb3IiCittc2dzdHIgIlREQjogdmVyZ3JlbmRlbGluZ3Nmb3V0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTExCittc2dpZCAiVERCOiBPdXQgb2YgbWVtb3J5IgorbXNnc3RyICJUREI6IG9udm9sZG9lbmRlIGdlaGV1Z2VuIGJlc2NoaWtiYWFyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEyCittc2dpZCAiVERCOiBSZWNvcmQgZXhpc3RzIgorbXNnc3RyICJUREI6IHJlY29yZCBiZXN0YWF0IGFsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEzCittc2dpZCAiVERCOiBMb2NrIGV4aXN0cyBvbiBvdGhlciBrZXlzIgorbXNnc3RyICJUREI6IGFuZGVyZSBzbGV1dGVscyB6aWpuIHZlcmdyZW5kZWxkIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE0Cittc2dpZCAiVERCOiBJbnZhbGlkIHBhcmFtZXRlciIKK21zZ3N0ciAiVERCOiBvbmdlbGRpZ2UgcGFyYW1ldGVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE1Cittc2dpZCAiVERCOiBSZWNvcmQgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIlREQjogcmVjb3JkIGJlc3RhYXQgbmlldCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNgorbXNnaWQgIlREQjogV3JpdGUgbm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiVERCOiBzY2hyaWp2ZW4gaXMgbmlldCB0b2VnZXN0YWFuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE3Cittc2dpZCAiRXh0MmZzIGRpcmVjdG9yeSBibG9jayBsaXN0IGlzIGVtcHR5IgorbXNnc3RyICJFeHQyZnMtbWFwYmxva2tlbmxpanN0IGlzIGxlZWciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTgKK21zZ2lkICJBdHRlbXB0IHRvIG1vZGlmeSBhIGJsb2NrIG1hcHBpbmcgdmlhIGEgcmVhZC1vbmx5IGJsb2NrIGl0ZXJhdG9yIgorbXNnc3RyICJQb2dpbmcgdG90IHdpanppZ2VuIHZhbiBibG9rdG9ld2lqemluZyB2aWEgZWVuIGFsbGVlbi1sZXplbiBpdGVyYXRvciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgc2F2ZWQgcGF0aCIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yIG9wZ2VzbGFnZW4gcGFkIHZhbiBFeHQ0LWV4dGVudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGdlbmVyaWMgYml0bWFwIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgNjQtYml0IGdlbmVyaWVrZSBiaXRrYWFydCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yIDY0LWJpdCBibG9rLWJpdGthYXJ0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgaW5vZGUgYml0bWFwIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgNjQtYml0IGlub2RlLWJpdGthYXJ0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xMyIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCAgLS0gIFJFU0VSVkVEXzEzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNCIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCAgLS0gIFJFU0VSVkVEXzE0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNSIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCAgLS0gIFJFU0VSVkVEXzE1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNiIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCAgLS0gIFJFU0VSVkVEXzE2IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNyIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCAgLS0gIFJFU0VSVkVEXzE3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOCIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCAgLS0gIFJFU0VSVkVEXzE4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOSIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCAgLS0gIFJFU0VSVkVEXzE5IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMwCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaGVhZGVyIgorbXNnc3RyICJFeHRlbnQtaGVhZGVyIGlzIGJlc2NoYWRpZ2QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzEKK21zZ2lkICJDb3JydXB0IGV4dGVudCBpbmRleCIKK21zZ3N0ciAiRXh0ZW50LWluZGV4IGlzIGJlc2NoYWRpZ2QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzIKK21zZ2lkICJDb3JydXB0IGV4dGVudCIKK21zZ3N0ciAiRXh0ZW50IGlzIGJlc2NoYWRpZ2QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzMKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIGV4dGVudCBtYXAiCittc2dzdHIgIkdlZW4gdnJpamUgcnVpbXRlIG1lZXIgaW4gZXh0ZW50LWthYXJ0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM0Cittc2dpZCAiSW5vZGUgZG9lcyBub3QgdXNlIGV4dGVudHMiCittc2dzdHIgIklub2RlIGdlYnJ1aWt0IGdlZW4gZXh0ZW50cyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNQorbXNnaWQgIk5vICduZXh0JyBleHRlbnQiCittc2dzdHIgIkVyIGlzIGdlZW4gJ25leHQnIGV4dGVudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNgorbXNnaWQgIk5vICdwcmV2aW91cycgZXh0ZW50IgorbXNnc3RyICJFciBpcyBnZWVuICdwcmV2aW91cycgZXh0ZW50IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM3Cittc2dpZCAiTm8gJ3VwJyBleHRlbnQiCittc2dzdHIgIkVyIGlzIGdlZW4gJ3VwJyBleHRlbnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzgKK21zZ2lkICJObyAnZG93bicgZXh0ZW50IgorbXNnc3RyICJFciBpcyBnZWVuICdkb3duJyBleHRlbnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzkKK21zZ2lkICJObyBjdXJyZW50IG5vZGUiCittc2dzdHIgIkVyIGlzIGdlZW4gaHVpZGlnZSBrbm9vcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MAorbXNnaWQgIkV4dDJmcyBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRXh0MmZzLWJld2Vya2luZyB3b3JkdCBuaWV0IG9uZGVyc3RldW5kIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQxCittc2dpZCAiTm8gcm9vbSB0byBpbnNlcnQgZXh0ZW50IGluIG5vZGUiCittc2dzdHIgIkVyIGlzIGdlZW4gcnVpbXRlIG9tIGVlbiBleHRlbnQgaW4gZGUga25vb3AgaW4gdGUgdm9lZ2VuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQyCittc2dpZCAiU3BsaXR0aW5nIHdvdWxkIHJlc3VsdCBpbiBlbXB0eSBub2RlIgorbXNnc3RyICJTcGxpdHNlbiB6b3UgcmVzdWx0ZXJlbiBpbiBlZW4gbGVnZSBrbm9vcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MworbXNnaWQgIkV4dGVudCBub3QgZm91bmQiCittc2dzdHIgIkV4dGVudCBuaWV0IGdldm9uZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIkJld2Vya2luZyB3b3JkdCBuaWV0IG9uZGVyc3RldW5kIHZvb3IgaW5vZGVzIGRpZSBleHRlbnRzIGJldmF0dGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ1Cittc2dpZCAiRXh0ZW50IGxlbmd0aCBpcyBpbnZhbGlkIgorbXNnc3RyICJFeHRlbnQtbGVuZ3RlIGlzIG9uZ2VsZGlnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ2Cittc2dpZCAiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIKK21zZ3N0ciAiSW4tL3VpdHZvZXJrYW5hYWwgb25kZXJzdGV1bnQgZ2VlbiA2NC1iaXQgYmxva251bW1lcnMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDcKK21zZ2lkICJDYW4ndCBjaGVjayBpZiBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgZHVlIHRvIG1pc3NpbmcgbXRhYiBmaWxlIgorbXNnc3RyICIiCisiS2FuIGdlZW4gY29udHJvbGUgdWl0dm9lcmVuIGFscyBoZXQgYmVzdGFuZHNzeXN0ZWVtIGFhbmdla29wcGVsZCBpc1xuIgorIndlZ2VucyBlZW4gb250YnJla2VuZCAnbXRhYictYmVzdGFuZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OAorbXNnaWQgIkZpbGVzeXN0ZW0gdG9vIGxhcmdlIHRvIHVzZSBsZWdhY3kgYml0bWFwcyIKK21zZ3N0ciAiQmVzdGFuZHNzeXN0ZWVtIGlzIHRlIGdyb290IG9tIG91ZGUgYml0a2FhcnRlbiB0ZSBrdW5uZW4gZ2VicnVpa2VuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ5Cittc2dpZCAiTU1QOiBpbnZhbGlkIG1hZ2ljIG51bWJlciIKK21zZ3N0ciAiTU1QOiBvbmdlbGRpZyBtYWdpc2NoIGdldGFsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUwCittc2dpZCAiTU1QOiBkZXZpY2UgY3VycmVudGx5IGFjdGl2ZSIKK21zZ3N0ciAiTU1QOiBhcHBhcmFhdCBpcyBtb21lbnRlZWwgYWN0aWVmIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUxCittc2dpZCAiTU1QOiBmc2NrIGJlaW5nIHJ1biIKK21zZ3N0ciAiTU1QOiAnZnNjaycgd29yZHQgdWl0Z2V2b2VyZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MgorbXNnaWQgIk1NUDogYmxvY2sgbnVtYmVyIGJleW9uZCBmaWxlc3lzdGVtIHJhbmdlIgorbXNnc3RyICJNTVA6IGJsb2tudW1tZXIgdmFsdCBidWl0ZW4gYmVyZWlrIHZhbiBiZXN0YW5kc3N5c3RlZW0iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTMKK21zZ2lkICJNTVA6IHVuZGVyZ29pbmcgYW4gdW5rbm93biBvcGVyYXRpb24iCittc2dzdHIgIk1NUDogb25kZXJnYWF0IGVlbiBvbmJla2VuZGUgYmV3ZXJraW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU0Cittc2dpZCAiTU1QOiBmaWxlc3lzdGVtIHN0aWxsIGluIHVzZSIKK21zZ3N0ciAiTU1QOiBiZXN0YW5kc3N5c3RlZW0gaXMgbm9nIGluIGdlYnJ1aWsiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTUKK21zZ2lkICJNTVA6IG9wZW4gd2l0aCBPX0RJUkVDVCBmYWlsZWQiCittc2dzdHIgIk1NUDogb3BlbmVuIG1ldCAnT19ESVJFQ1QnIGlzIG1pc2x1a3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTYKK21zZ2lkICJCbG9jayBncm91cCBkZXNjcmlwdG9yIHNpemUgaW5jb3JyZWN0IgorbXNnc3RyICJHcm9vdHRlIHZhbiBibG9rZ3JvZXBzYmVzY2hyaWp2ZXIgaXMgb25qdWlzdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NworbXNnaWQgIklub2RlIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGlub2RlIgorbXNnc3RyICJDb250cm9sZXNvbSB2YW4gaW5vZGUga29tdCBuaWV0IG92ZXJlZW4gbWV0IGlub2RlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU4Cittc2dpZCAiSW5vZGUgYml0bWFwIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGJpdG1hcCIKK21zZ3N0ciAiQ29udHJvbGVzb20gdmFuIGlub2RlLWJpdGthYXJ0IGtvbXQgbmlldCBvdmVyZWVuIG1ldCBiaXRrYWFydCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OQorbXNnaWQgIkV4dGVudCBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBleHRlbnQgYmxvY2siCittc2dzdHIgIkNvbnRyb2xlc29tIHZhbiBleHRlbnQtYmxvayBrb210IG5pZXQgb3ZlcmVlbiBtZXQgZXh0ZW50LWJsb2siCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjAKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgZG9lcyBub3QgaGF2ZSBzcGFjZSBmb3IgY2hlY2tzdW0iCittc2dzdHIgIk1hcC1ibG9rIGhlZWZ0IGdlZW4gcnVpbXRlIHZvb3IgZWVuIGNvbnRyb2xlc29tIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYxCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAiQ29udHJvbGVzb20gdmFuIG1hcC1ibG9rIGtvbXQgbmlldCBvdmVyZWVuIG1ldCBtYXAtYmxvayIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MgorbXNnaWQgIkV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBibG9jayIKK21zZ3N0ciAiQ29udHJvbGVzb20gdmFuIHVpdGdlYnJlaWRla2VubWVya2VuLWJsb2sga29tdCBuaWV0IG92ZXJlZW4gbWV0IGJsb2siCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjMKK21zZ2lkICJTdXBlcmJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIHN1cGVyYmxvY2siCittc2dzdHIgIkNvbnRyb2xlc29tIHZhbiBzdXBlcmJsb2sga29tdCBuaWV0IG92ZXJlZW4gbWV0IHN1cGVyYmxvayIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NAorbXNnaWQgIlVua25vd24gY2hlY2tzdW0gYWxnb3JpdGhtIgorbXNnc3RyICJPbmdlbGRpZyBjb250cm9sZXNvbS1hbGdvcml0bWUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjUKK21zZ2lkICJNTVAgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggTU1QIGJsb2NrIgorbXNnc3RyICJDb250cm9sZXNvbSB2YW4gTU1QLWJsb2sga29tdCBuaWV0IG92ZXJlZW4gbWV0IE1NUC1ibG9rIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY2Cittc2dpZCAiRXh0MiBmaWxlIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFeHQyLWJlc3RhbmQgYmVzdGFhdCBhbCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTEKK21zZ2lkICJQcm9maWxlIHZlcnNpb24gMC4wIgorbXNnc3RyICJQcm9maWxlICB2ZXJzaWUgMC4wIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX25vZGUiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgaW4gJ3Byb2ZpbGVfbm9kZSciCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEzCittc2dpZCAiUHJvZmlsZSBzZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiUHJvZmlsZS1zZWN0aWUgbmlldCBnZXZvbmRlbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTQKK21zZ2lkICJQcm9maWxlIHJlbGF0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiUHJvZmlsZS1yZWxhdGllIG5pZXQgZ2V2b25kZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE1Cittc2dpZCAiQXR0ZW1wdCB0byBhZGQgYSByZWxhdGlvbiB0byBub2RlIHdoaWNoIGlzIG5vdCBhIHNlY3Rpb24iCittc2dzdHIgIiIKKyJQb2dpbmcgdG90IGhldCB0b2V2b2VnZW4gdmFuIGVlbiByZWxhdGllIGFhbiBlZW4ga25vb3AgZGllIGdlZW4gc2VjdGllIGlzIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNgorbXNnaWQgIkEgcHJvZmlsZSBzZWN0aW9uIGhlYWRlciBoYXMgYSBub24temVybyB2YWx1ZSIKK21zZ3N0ciAiRWVuIHByb2ZpbGUtc2VjdGlla29wIGhlZWZ0IGVlbiB3YWFyZGUgZGllIG5pZXQgbnVsIGlzIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNworbXNnaWQgIkJhZCBsaW5rZWQgbGlzdCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIk9uZ2VsZGlnZSBnZWtvcHBlbGRlIGxpanN0IGluIHByb2ZpbGUtc3RydWN0dXJlbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTgKK21zZ2lkICJCYWQgZ3JvdXAgbGV2ZWwgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICJPbmdlbGRpZyBncm9lcHNuaXZlYXUgaW4gcHJvZmlsZS1zdHJ1Y3R1cmVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOQorbXNnaWQgIkJhZCBwYXJlbnQgcG9pbnRlciBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIk9uZ2VsZGlnZSBwb2ludGVyIG5hYXIgb3VkZXIgaW4gcHJvZmlsZS1zdHJ1Y3R1cmVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlIGl0ZXJhdG9yIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIGluIHByb2ZpbGUtaXRlcmF0b3IiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIxCittc2dpZCAiQ2FuJ3Qgc2V0IHZhbHVlIG9uIHNlY3Rpb24gbm9kZSIKK21zZ3N0ciAiS2FuIHdhYXJkZSBuaWV0IGluc3RlbGxlbiBpbiBzZWN0aWVrbm9vcCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCittc2dzdHIgIk9uZ2VsZGlnIGFyZ3VtZW50IGdlZ2V2ZW4gYWFuIFByb2ZpbGUtYmlibGlvdGhlZWsiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIlBvZ2luZyB0b3Qgd2lqemlnZW4gdmFuIGVlbiBhbGxlZW4tbGV6ZW4gcHJvZmlsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIlByb2ZpbGUtc2VjdGlla29wIGlzIG5pZXQgb3AgdG9wbml2ZWF1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNQorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIgorbXNnc3RyICJTeW50YXhmb3V0IGluIHByb2ZpbGUtc2VjdGlla29wIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNgorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHJlbGF0aW9uIgorbXNnc3RyICJTeW50YXhmb3V0IGluIHByb2ZpbGUtcmVsYXRpZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjcKK21zZ2lkICJFeHRyYSBjbG9zaW5nIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIk92ZXJ0b2xsaWdlIHNsdWl0YWNjb2xhZGUgaW4gcHJvZmlsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjgKK21zZ2lkICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiT250YnJla2VuZGUgb3BlbmluZ3NhY2NvbGFkZSBpbiBwcm9maWxlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyOQorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3QiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgaW4gJ3Byb2ZpbGVfdCciCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfc2VjdGlvbl90IgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIGluICdwcm9maWxlX3NlY3Rpb25fdCciCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMxCittc2dpZCAiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkRvb3Jsb3BlbiB2YW4gYWxsZSB0b3BuaXZlYXUtc2VjdGllcyB3b3JkdCBuaWV0IG9uZGVyc3RldW5kIgorCisjIERpdCBnYWF0IG92ZXIgaGV0IGFyZ3VtZW50IHZhbiBvcHRpZSAtTy4KKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMyCittc2dpZCAiSW52YWxpZCBwcm9maWxlX3NlY3Rpb24gb2JqZWN0IgorbXNnc3RyICJPbmdlbGRpZyAncHJvZmlsZV9zZWN0aW9uJy1vYmplY3QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMzCittc2dpZCAiTm8gbW9yZSBzZWN0aW9ucyIKK21zZ3N0ciAiRXIgemlqbiBnZWVuIHZlcmRlcmUgc2VjdGllcyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzQKK21zZ2lkICJCYWQgbmFtZXNldCBwYXNzZWQgdG8gcXVlcnkgcm91dGluZSIKK21zZ3N0ciAiT25nZWxkaWdlIG5hYW1zZXQgZ2VnZXZlbiBhYW4gYmV2cmFnaW5nc3JvdXRpbmUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIkVyIGlzIGdlZW4gb3BlbiBwcm9maWxlLWJlc3RhbmQiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM2Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV90IgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIGluICdwcm9maWxlX2ZpbGVfdCciCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM3Cittc2dpZCAiQ291bGRuJ3Qgb3BlbiBwcm9maWxlIGZpbGUiCittc2dzdHIgIkthbiBwcm9maWxlLWJlc3RhbmQgbmlldCBvcGVuZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM4Cittc2dpZCAiU2VjdGlvbiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiU2VjdGllIGJlc3RhYXQgYWwiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM5Cittc2dpZCAiSW52YWxpZCBib29sZWFuIHZhbHVlIgorbXNnc3RyICJPbmdlbGRpZ2UgYm9vbGVhYW5zZSB3YWFyZGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQwCittc2dpZCAiSW52YWxpZCBpbnRlZ2VyIHZhbHVlIgorbXNnc3RyICJPbmdlbGRpZyBnZWhlZWwgZ2V0YWwiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQxCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgaW4gJ3Byb2ZpbGVfZmlsZV9kYXRhX3QnIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIldhcm5pbmc6IHRoZSBxdW90YSBmZWF0dXJlIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50XG4iCisjfiAiU2VlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL1F1b3RhIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJXYWFyc2NodXdpbmc6IGRlICdxdW90YSctZnVuY3RpZSBpcyBub2cgaW4gb250d2lra2VsaW5nLlxuIgorI34gIlppZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9RdW90YSB2b29yIG1lZXIgaW5mb3JtYXRpZS5cbiIKKyN+ICJcbiIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICVzIC0tLSAlc1xuIgorI34gbXNnc3RyICJLYW4gZGUgc3RhdHVzIHZhbiAlcyBuaWV0IG9wdnJhZ2VuIC0tICVzXG4iCisKKyN+IG1zZ2lkICJDbGVhcmluZyBleHRlbnQgZmxhZyBub3Qgc3VwcG9ydGVkIG9uICVzIgorI34gbXNnc3RyICIiCisjfiAiSGV0IHVpdHpldHRlbiB2YW4gZGUgJ2V4dGVudCctZnVuY3RpZXZsYWcgd29yZHQgbmlldCBvbmRlcnN0ZXVuZCBvcCAlcyIKKworI34gbXNnaWQgIiIKKyN+ICIlczogVGhlIGNvbWJpbmF0aW9uIG9mIGZsZXhfYmcgYW5kXG4iCisjfiAiXHQhcmVzaXplX2lub2RlIGZlYXR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgcmVzaXplMmZzLlxuIgorI34gbXNnc3RyICIiCisjfiAiJXM6IERlIGZ1bmN0aWUgJ2ZsZXhfYmcnIHpvbmRlciBkZSBmdW5jdGllICdyZXNpemVfaW5vZGUnXG4iCisjfiAiICAgIHdvcmR0IGRvb3IgJ3Jlc2l6ZTJmcycgbmlldCBvbmRlcnN0ZXVuZC5cbiIKKworI34gbXNnaWQgIkBnICVnIEBiIEBCIHVuaW5pdGlhbGl6ZWQgYnV0IEBpIEBCIGluIHVzZS5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkdyb2Vwc2Jlc2NocmlqdmVyICVnIGhlZWZ0IGVlbiBvbmdlw69uaXRpYWxpc2VlcmRlIGJsb2stYml0a2FhcnQgbWFhciBkZSAiCisjfiAiaW5vZGUtYml0a2FhcnQgaXMgaW4gZ2VicnVpay5cbiIKKworI34gbXNnaWQgIkBpICVpIHNob3VsZCBub3QgaGF2ZSBFT0ZCTE9DS1NfRkwgc2V0IChzaXplICVJcywgbGJsayAlcilcbiIKKyN+IG1zZ3N0ciAiIgorI34gIklub2RlICVpIHpvdSBuaWV0IGRlICdFT0ZCTE9DS1NfRkwnLXZsYWcgZ2V6ZXQgbW9ldGVuIGhlYmJlbiAoZ3Jvb3R0ZSAiCisjfiAiJUlzLCBsYmxrICVyKVxuIgorCisjfiBtc2dpZCAiQ291bGRuJ3QgZGV0ZXJtaW5lIGpvdXJuYWwgc2l6ZSIKKyN+IG1zZ3N0ciAiS2FuIGpvdXJuYWwtZ3Jvb3R0ZSBuaWV0IGJlcGFsZW4iCisKKyN+IG1zZ2lkICJNaXNzaW5nIGluZGlyZWN0IGJsb2NrIG5vdCBwcmVzZW50IgorI34gbXNnc3RyICJPbnRicmVrZW5kIGluZGlyZWN0IGJsb2sgaXMgYWZ3ZXppZyIKKworI34gbXNnaWQgIjxUaGUgQUNMIGluZGV4IGlub2RlPiIKKyN+IG1zZ3N0ciAiPGRlIEFDTC1pbmRleC1pbm9kZT4iCisKKyN+IG1zZ2lkICI8VGhlIEFDTCBkYXRhIGlub2RlPiIKKyN+IG1zZ3N0ciAiPGRlIEFDTC1kYXRhLWlub2RlPiIKKworI34gbXNnaWQgInNob3J0IHdyaXRlIChvbmx5ICVkIGJ5dGVzKSBmb3Igd3JpdGluZyBpbWFnZSBoZWFkZXIiCisjfiBtc2dzdHIgIm9udm9sbGVkaWcgYmxvayAoc2xlY2h0cyAlZCBieXRlcykgdGlqZGVucyBzY2hyaWp2ZW4gdmFuIGltYWdlLWtvcCIKKworI34gbXNnaWQgImludmFsaWQgZnJhZ21lbnQgc2l6ZSAtICVzIgorI34gbXNnc3RyICJvbmdlbGRpZ2UgZnJhZ21lbnRncm9vdHRlOiAlcyIKKworI34gbXNnaWQgIldhcm5pbmc6IGZyYWdtZW50cyBub3Qgc3VwcG9ydGVkLiAgSWdub3JpbmcgLWYgb3B0aW9uXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJXYWFyc2NodXdpbmc6IGZyYWdtZW50ZW4gd29yZGVuIG5pZXQgb25kZXJzdGV1bmQ7IG9wdGllICctZicgd29yZHQgIgorI34gImdlbmVnZWVyZFxuIgorCisjfiBtc2dpZCAiQ2FsbGluZyBCTEtESVNDQVJEIGZyb20gJWxsdSB0byAlbGx1ICIKKyN+IG1zZ3N0ciAiQWFucm9lcGVuIHZhbiBCTEtESVNDQVJEIHZhbiAlbGx1IHRvdCAlbGx1ICIKKworI34gbXNnaWQgInN1Y2NlZWRlZC5cbiIKKyN+IG1zZ3N0ciAiaXMgZ2VzbGFhZ2QuXG4iCisKKyN+IG1zZ2lkICJKb3VybmFsIE5PVCByZW1vdmVkXG4iCisjfiBtc2dzdHIgIkpvdXJuYWwgaXMgTklFVCB2ZXJ3aWpkZXJkLlxuIgorCisjfiBtc2dpZCAiQFMgZG9lc24ndCBoYXZlIGhhc19AaiBmbGFnLCBidXQgaGFzIGV4dDMgQGogJXMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJTdXBlcmJsb2sgaGVlZnQgam91cm5hbC12bGFnIG5pZXQgZ2V6ZXQsIG1hYXIgaGVlZnQgd2VsIGVlbiBleHQzLWpvdXJuYWwgIgorI34gIiVzLlxuIgorCisjfiBtc2dpZCAiUmVjcmVhdGUgam91cm5hbCB0byBtYWtlIHRoZSBmaWxlc3lzdGVtIGV4dDMgYWdhaW4/XG4iCisjfiBtc2dzdHIgIiIKKyN+ICJIZXQgam91cm5hbCBoZXJhYW5tYWtlbiBvbSBoZXQgYmVzdGFuZHNzeXN0ZWVtIHdlZXIgZXh0MyB0ZSBtYWtlbj9cbiIKKworI34gbXNnaWQgImJhZCBibG9jayBzaXplIC0gJXMiCisjfiBtc2dzdHIgIm9uZ2VsZGlnZSBibG9rZ3Jvb3R0ZTogJXMiCisKKyN+IG1zZ2lkICJ3aGlsZSByZXRyeWluZyB0byB3cml0ZSBibG9jayBiaXRtYXBzIGZvciAlcyIKKyN+IG1zZ3N0ciAidGlqZGVucyBoZXJzY2hyaWp2ZW4gdmFuIGJsb2stYml0a2FhcnRlbiB2b29yICVzIgorCisjfiBtc2dpZCAiJXMgZmFpbGVkIGZvciAlczogJXNcbiIKKyN+IG1zZ3N0ciAiJXMgaXMgbWlzbHVrdCB2b29yICVzOiAlc1xuIgorCisjfiBtc2dpZCAiSERJT19HRVRHRU8gaW9jdGwiCisjfiBtc2dzdHIgIk9wdnJhZ2VuIHZhbiBnZW9tZXRyaWUiCisKKyN+IG1zZ2lkICJCTEtHRVRTSVpFIGlvY3RsIgorI34gbXNnc3RyICJPcHZyYWdlbiB2YW4gZ3Jvb3R0ZSIKKworI34gbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBAbiAobXVzdCBiZSAwKVxuIgorI34gbXNnc3RyICIiCisjfiAiRWVuIHVpdGdlYnJlaWQga2VubWVyayBpbiBpbm9kZSAlaSBoZWVmdCBlZW4gb25nZWxkaWdlIGhhc2h3YWFyZGUgKCVOLCAiCisjfiAibW9ldCAwIHppam4pLlxuIgorCisjfiBtc2dpZCAid2hpbGUgY2FsbGluZyBpdGVyYXRvciBmdW5jdGlvbiIKKyN+IG1zZ3N0ciAidGlqZGVucyBhYW5yb2VwIHZhbiBpdGVyYXRvci1mdW5jdGllIgorCisjfiBtc2dpZCAid2hpbGUgYWxsb2NhdGluZyBpbm9kZSBidWZmZXIiCisjfiBtc2dzdHIgInRpamRlbnMgcmVzZXJ2ZXJlbiB2YW4gaW5vZGVidWZmZXIiCisKKyN+IG1zZ2lkICJ3aGlsZSByZWFkaW5nIGlub2RlIHRhYmxlIChncm91cCAlZCkiCisjfiBtc2dzdHIgInRpamRlbnMgbGV6ZW4gdmFuIGlub2RldGFiZWwgKGdyb2VwICVkKSIKKworI34gbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgdGFibGUgKGdyb3VwICVkKSIKKyN+IG1zZ3N0ciAidGlqZGVucyBzY2hyaWp2ZW4gdmFuIGlub2RldGFiZWwgKGdyb2VwICVkKSIKKworI34gbXNnaWQgIlBhc3MgMDogRG9pbmcgYnl0ZS1zd2FwIG9mIGZpbGVzeXN0ZW1cbiIKKyN+IG1zZ3N0ciAiIgorI34gIlN0YXAgMDogT213aXNzZWxpbmcgdmFuIGhvZ2UgZW4gbGFnZSBieXRlcyBpbiBoZWxlIGJlc3RhbmRzc3lzdGVlbVxuIgorCisjfiBtc2dpZCAiIgorI34gIiVzOiB0aGUgZmlsZXN5c3RlbSBtdXN0IGJlIGZyZXNobHkgY2hlY2tlZCB1c2luZyBmc2NrXG4iCisjfiAiYW5kIG5vdCBtb3VudGVkIGJlZm9yZSB0cnlpbmcgdG8gYnl0ZS1zd2FwIGl0LlxuIgorI34gbXNnc3RyICIiCisjfiAiJXM6IGhldCBiZXN0YW5kc3N5c3RlZW0gZGllbnQgb3BuaWV1dyBnZWNvbnRyb2xlZXJkIHRlIHdvcmRlbiBtZXQgJ2ZzY2snXG4iCisjfiAiZW4gbmlldCBhYW5nZWtvcHBlbGQgdGUgd29yZGVuIHZvb3JkYXQgZGUgYnl0ZS1vbXdpc3NlbGluZyBnZWJldXJkIGlzLlxuIgorCisjfiBtc2dpZCAiQnl0ZSBzd2FwIgorI34gbXNnc3RyICJCeXRlLW9td2lzc2VsaW5nIgorCisjfiBtc2dpZCAiQnl0ZS1zd2FwcGluZyBmaWxlc3lzdGVtcyBub3QgY29tcGlsZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIGUyZnNja1xuIgorI34gbXNnc3RyICJCeXRlLW9td2lzc2VsaW5nIGlzIG5pZXQgbW9nZWxpamsgbWV0IGRlemUgdmVyc2llIHZhbiBlMmZzY2suXG4iCisKKyN+IG1zZ2lkICJJbmNvbXBhdGlibGUgb3B0aW9ucyBub3QgYWxsb3dlZCB3aGVuIGJ5dGUtc3dhcHBpbmcuXG4iCisjfiBtc2dzdHIgIkJpaiBieXRlLW9td2lzc2VsaW5nIHppam4gYm90c2VuZGUgb3B0aWVzIG5pZXQgdG9lZ2VzdGFhbi5cbiIKKworI34gbXNnaWQgIiVzOiBGaWxlc3lzdGVtIGJ5dGUgb3JkZXIgYWxyZWFkeSBub3JtYWxpemVkLlxuIgorI34gbXNnc3RyICIlczogYnl0ZXZvbGdvcmRlIHZhbiBiZXN0YW5kc3N5c3RlZW0gaXMgYWwgZ2Vub3JtYWxpc2VlcmQuXG4iCisKKyN+IG1zZ2lkICJpbnZhbGlkIHN0YXJ0aW5nIGJsb2NrIC0gJXMiCisjfiBtc2dzdHIgIm9uZ2VsZGlnIGJlZ2luYmxvazogJXMiCisKKyN+IG1zZ2lkICJOb3RlOiBUaGlzIGlzIGEgYnl0ZS1zd2FwcGVkIGZpbGVzeXN0ZW1cbiIKKyN+IG1zZ3N0ciAiT3BtZXJraW5nOiBkaXQgaXMgZWVuIGJ5dGUtdmVyd2lzc2VsZCBiZXN0YW5kc3N5c3RlZW0uXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiRmlsZXN5c3RlbSB0b28gbGFyZ2UuICBObyBtb3JlIHRoYW4gMioqMzEtMSBibG9ja3NcbiIKKyN+ICJcdCAoOFRCIHVzaW5nIGEgYmxvY2tzaXplIG9mIDRrKSBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJCZXN0YW5kc3N5c3RlZW0gaXMgdGUgZ3Jvb3QuICBNb21lbnRlZWwgemlqbiBuaWV0IG1lZXIgZGFuXG4iCisjfiAiMioqMzEtMSBibG9ra2VuIG1vZ2VsaWprICg4VEIgYmlqIGVlbiBibG9rZ3Jvb3R0ZSB2YW4gNEspLiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJXYXJuaW5nOiBzb21lIDIuNCBrZXJuZWxzIGRvIG5vdCBzdXBwb3J0IGJsb2Nrc2l6ZXMgZ3JlYXRlciB0aGFuIDQwOTZcbiIKKyN+ICJcdHVzaW5nIGV4dDMuICBVc2UgLWIgNDA5NiBpZiB0aGlzIGlzIGFuIGlzc3VlIGZvciB5b3UuXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJXYWFyc2NodXdpbmc6IHNvbW1pZ2UgMi40LWtlcm5lbHMgb25kZXJzdGV1bmVuIHZvb3IgZXh0MyBnZWVuXG4iCisjfiAiYmxva2dyb290dGVzIGdyb3RlciBkYW4gNDA5Ni4gIEdlYnJ1aWsgaW4gZGF0IGdldmFsICctYiA0MDk2Jy5cbiIKKyN+ICJcbiIKKworI34gbXNnaWQgIldhcm5pbmc6ICVkLWJ5dGUgaW5vZGVzIG5vdCB1c2FibGUgb24gb2xkZXIgc3lzdGVtc1xuIgorI34gbXNnc3RyICIiCisjfiAiV2FhcnNjaHV3aW5nOiBpbm9kZXMgdmFuICVkIGJ5dGVzIHppam4gb25icnVpa2JhYXIgb3Agb3VkZXJlIHN5c3RlbWVuXG4iCmRpZmYgLS1naXQgYS9wby9wbC5nbW8gYi9wby9wbC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxOTAzZAotLS0gL2Rldi9udWxsCisrKyBiL3BvL3BsLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9wbC5wbyBiL3BvL3BsLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZmFmNTQKLS0tIC9kZXYvbnVsbAorKysgYi9wby9wbC5wbwpAQCAtMCwwICsxLDcxODMgQEAKKyMgUG9saXNoIHRyYW5zbGF0aW9uIGZvciBlMmZzcHJvZ3MuCisjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBUaGVvZG9yZSBUc28gKG1zZ2lkcykKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGUyZnNwcm9ncyBwYWNrYWdlLgorIyBKYWt1YiBCb2d1c3ogPHFib29zaEBwbGQtbGludXgub3JnPiwgMjAwMi0yMDE0LgorIworIy4gVGhlIHN0cmluZ3MgaW4gZTJmc2NrJ3MgcHJvYmxlbS5jIGNhbiBiZSB2ZXJ5IGhhcmQgdG8gdHJhbnNsYXRlLAorIy4gc2luY2UgdGhlIHN0cmluZ3MgYXJlIGV4cGFuZGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gIEZpcnN0IG9mIGFsbCwKKyMuIHRoZXJlIGlzIGFuIEAtZXhwYW5zaW9uLCB3aGVyZSBzdHJpbmdzIGxpa2UgIkBpIiBhcmUgZXhwYW5kZWQgdG8KKyMuICJpbm9kZSIsIGFuZCBzbyBvbi4gIEluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0cmFuc2xhdG9ycywgdGhlCisjLiBlMmZzcHJvZ3MgcG8gdGVtcGxhdGUgZmlsZSBoYXMgYmVlbiBlbmhhbmNlZCB3aXRoIGNvbW1lbnRzIHRoYXQgc2hvdworIy4gdGhlIEAtZXhwYW5zaW9uLCBmb3IgdGhlIHN0cmluZ3MgaW4gdGhlIHByb2JsZW0uYyBmaWxlLgorIy4KKyMuIFRyYW5zbGF0b3JzIGFyZSBmcmVlIHRvIHVzZSB0aGUgQC1leHBhbnNpb24gZmFjaWxpdHkgaWYgdGhleSBzbworIy4gY2hvb3NlLCBieSBwcm92aWRpbmcgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGluIGUyZnNjay9tZXNzYWdlLmMuCisjLiBUaGVzZSB0cmFuc2xhdGlvbiBjYW4gY29tcGxldGVseSByZXBsYWNlIGFuIGV4cGFuc2lvbjsgZm9yIGV4YW1wbGUsCisjLiBpZiAiYmJsb2NrIiAod2hpY2ggaW5kaWNhdGVkIHRoYXQgIkBiIiB3b3VsZCBiZSBleHBhbmRlZCB0byAiYmxvY2siKQorIy4gaXMgdHJhbnNsYXRlZCBhcyAiZGRhdGVudmVybHVzdCIsIHRoZW4gIkBkIiB3aWxsIGJlIGV4cGFuZGVkIHRvCisjLiAiZGF0ZW52ZXJsdXN0Ii4gIEFsdGVybmF0aXZlbHksIHRyYW5zbGF0b3JzIGNhbiBzaW1wbHkgbm90IHVzZSB0aGUKKyMuIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGF0IGFsbC4KKyMuCisjLiBUaGUgc2Vjb25kIGV4cGFuc2lvbiB3aGljaCBpcyBkb25lIGZvciBlMmZzY2sncyBwcm9ibGVtLmMgbWVzc2FnZXMgaXMKKyMuIGEgZHluYW1pYyAlLWV4cGFuc2lvbiwgd2hpY2ggZXhwYW5kcyAlaSBhcyBhbiBpbm9kZSBudW1iZXIsIGFuZCBzbworIy4gb24uICBBIHRhYmxlIG9mIHRoZXNlIGV4cGFuc2lvbnMgY2FuIGJlIGZvdW5kIGJlbG93LiAgTm90ZSB0aGF0CisjLiAlLWV4cHJlc3Npb25zIHRoYXQgYmVnaW4gd2l0aCAiJUQiIGFuZCAiJUkiIGFyZSB0d28tY2hhcmFjdGVyCisjLiBleHBhbnNpb25zOyBzbyBmb3IgZXhhbXBsZSwgIiVJdSIgZXhwYW5kcyB0byB0aGUgaW5vZGUncyB1c2VyIGlkCisjLiBvd25lcnNoaXAgZmllbGQgKGlub2RlLT5pX3VpZCkuICBBbHNvIHRoZSAiJUIiIGV4cGFuc2lvbiBpcyBzcGVjaWFsOgorIy4gaXQgY2FuIGV4cGFuZCB0byBlaXRoZXIgdGhlIHN0cmluZyAiaW5kaXJlY3QgYmxvY2siIChwb3NzaWJseSBwcmVjZWRlZAorIy4gYnkgdGhlIHdvcmQgImRvdWJsZSIgb3IgInRyaXBsZSIpLCBvciB0aGUgc3RyaW5nICJibG9jayAjIiBpbW1lZGlhdGVseQorIy4gZm9sbG93ZWQgYnkgYW4gaW50ZWdlciBpbmRpY2F0aW5nIGEgYmxvY2sgc2VxdWVuY2UgbnVtYmVyLgorIy4gIAorIy4gCSViCTxibGs+CQkJYmxvY2sgbnVtYmVyCisjLiAJJUIJImluZGlyZWN0IGJsb2NrIiB8ICJibG9jayAjIjxibGtjb3VudD4Jc3RyaW5nIHwgc3RyaW5nK2ludGVnZXIKKyMuIAklYwk8YmxrMj4JCQlibG9jayBudW1iZXIKKyMuIAklRGkJPGRpcmVudD4gLT4gaW5vCQlpbm9kZSBudW1iZXIKKyMuIAklRG4JPGRpcmVudD4gLT4gbmFtZQlzdHJpbmcKKyMuIAklRHIJPGRpcmVudD4gLT4gcmVjX2xlbgorIy4gCSVEbAk8ZGlyZW50PiAtPiBuYW1lX2xlbgorIy4gCSVEdAk8ZGlyZW50PiAtPiBmaWxldHlwZQorIy4gCSVkCTxkaXI+IAkJCWlub2RlIG51bWJlcgorIy4gCSVnCTxncm91cD4JCQlpbnRlZ2VyCisjLiAJJWkJPGlubz4JCQlpbm9kZSBudW1iZXIKKyMuIAklSXMJPGlub2RlPiAtPiBpX3NpemUKKyMuIAklSVMJPGlub2RlPiAtPiBpX2V4dHJhX2lzaXplCisjLiAJJUliCTxpbm9kZT4gLT4gaV9ibG9ja3MKKyMuIAklSWwJPGlub2RlPiAtPiBpX2xpbmtzX2NvdW50CisjLiAJJUltCTxpbm9kZT4gLT4gaV9tb2RlCisjLiAJJUlNCTxpbm9kZT4gLT4gaV9tdGltZQorIy4gCSVJRgk8aW5vZGU+IC0+IGlfZmFkZHIKKyMuIAklSWYJPGlub2RlPiAtPiBpX2ZpbGVfYWNsCisjLiAJJUlkCTxpbm9kZT4gLT4gaV9kaXJfYWNsCisjLiAJJUl1CTxpbm9kZT4gLT4gaV91aWQKKyMuIAklSWcJPGlub2RlPiAtPiBpX2dpZAorIy4gCSVJdAk8c3RyPgkJCWZpbGUgdHlwZQorIy4gCSVqCTxpbm8yPgkJCWlub2RlIG51bWJlcgorIy4gCSVtCTxjb21fZXJyIGVycm9yIG1lc3NhZ2U+CisjLiAJJU4JPG51bT4KKyMuIAklcAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4KKyMuIAklUAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiA8ZGlyZW50Pi0+aW5vIHdpdGggPGlubzI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LiAgKElmIGRpcmVudCBpcyBOVUxMCisjLiAJCQkJdGhlbiByZXR1cm4gdGhlIHBhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vMj4pCisjLiAJJXEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxkaXI+CisjLiAJJVEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+IHdpdGggPGRpcj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuCisjLiAJJXMJPHN0cj4JCQltaXNjZWxsYW5lb3VzIHN0cmluZworIy4gCSVTCQliYWNrdXAgc3VwZXJibG9jaworIy4gCSVYCTxudW0+CWhleGFkZWNpbWFsIGZvcm1hdAorIy4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGUyZnNwcm9ncyAxLjQyLjEyLXByZTJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogdHl0c29AYWx1bS5taXQuZWR1XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDUtMTcgMjE6MjYtMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTQtMDgtMjcgMTY6MzYrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSmFrdWIgQm9ndXN6IDxxYm9vc2hAcGxkLWxpbnV4Lm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBQb2xpc2ggPHRyYW5zbGF0aW9uLXRlYW0tcGxAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBwbFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MzsgcGx1cmFsPShuPT0xID8gMCA6IG4lMTA+PTIgJiYgbiUxMDw9NCAmJiAobiUxMDA8MTAgIgorInx8IG4lMTAwPj0yMCkgPyAxIDogMik7XG4iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoyMyBtaXNjL21rZTJmcy5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2sgJXUgb3V0IG9mIHJhbmdlOyBpZ25vcmVkLlxuIgorbXNnc3RyICJXYWRsaXd5IGJsb2sgJXUgcG96YSB6YWtyZXNlbSAtIHppZ25vcm93YW55LlxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NDYKK21zZ2lkICJ3aGlsZSBzYW5pdHkgY2hlY2tpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgInBvZGN6YXMgc3ByYXdkemFuaWEgcG9wcmF3bm/Fm2NpIGktd8SZesWCYSB3YWRsaXd5Y2ggYmxva8OzdyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjU4Cittc2dpZCAid2hpbGUgcmVhZGluZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAicG9kY3phcyBvZGN6eXR1IGktd8SZesWCYSB3YWRsaXd5Y2ggYmxva8OzdyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjcyIGUyZnNjay9zY2FudGVzdC5jOjEwNyBlMmZzY2svdW5peC5jOjEzNDUKKyM6IGUyZnNjay91bml4LmM6MTQzNCBtaXNjL2JhZGJsb2Nrcy5jOjEyNDIgbWlzYy9iYWRibG9ja3MuYzoxMjUwCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyNjQgbWlzYy9iYWRibG9ja3MuYzoxMjc2IG1pc2MvZHVtcGUyZnMuYzo2MDQKKyM6IG1pc2MvZTJpbWFnZS5jOjEzOTYgbWlzYy9lMmltYWdlLmM6MTU4MCBtaXNjL2UyaW1hZ2UuYzoxNTk5CisjOiBtaXNjL21rZTJmcy5jOjIyNyBtaXNjL3R1bmUyZnMuYzoxOTU1IG1pc2MvdHVuZTJmcy5jOjIwNDQgcmVzaXplL21haW4uYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiCittc2dzdHIgInBvZGN6YXMgcHLDs2J5IG90d29yemVuaWEgJXMiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgcG9wZW4gJyVzJyIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgcG9wZW4gJyVzJyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjk0IG1pc2MvbWtlMmZzLmM6MjM0Cittc2dpZCAid2hpbGUgcmVhZGluZyBpbiBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBmaWxlIgorbXNnc3RyICJwb2RjemFzIHdjenl0eXdhbmlhIHogcGxpa3UgbGlzdHkgd2FkbGl3eWNoIGJsb2vDs3ciCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMDUKK21zZ2lkICJ3aGlsZSB1cGRhdGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgInBvZGN6YXMgdWFrdHVhbG5pYW5pYSBpLXfEmXrFgmEgd2FkbGl3ZWdvIGJsb2t1IgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGlsbGVnYWwgYmxvY2sgJXUgZm91bmQgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ2xlYXJlZC5cbiIKK21zZ3N0ciAiIgorIlV3YWdhOiB6bmFsZXppb25vIG5pZWRvcHVzemN6YWxueSBibG9rICV1IHcgaS13xJnFumxlIHdhZGxpd2VnbyBibG9rdS4gIgorIld5Y3p5c3pjem9uby5cbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiQsWCxIVkIHByenkgb2RjenljaWUgYmxva3UgJWx1ICglcykgcG9kY3phcyAlcy4gIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICJCxYLEhWQgcHJ6eSBvZGN6eWNpZSBibG9rdSAlbHUgKCVzKS4gIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MSBlMmZzY2svZWhhbmRsZXIuYzoxMTAKK21zZ2lkICJJZ25vcmUgZXJyb3IiCittc2dzdHIgIlppZ25vcm93YcSHIGLFgsSFZCIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjIKK21zZ2lkICJGb3JjZSByZXdyaXRlIgorbXNnc3RyICJXeW11c2nEhyBwb25vd255IHphcGlzIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiQsWCxIVkIHByenkgemFwaXNpZSBibG9rdSAlbHUgKCVzKSBwb2RjemFzICVzLiAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICJCxYLEhWQgcHJ6eSB6YXBpc2llIGJsb2t1ICVsdSAoJXMpLiAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJwdXN0ZSBibG9raSBrYXRhbG9ndSIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NjIKK21zZ2lkICJlbXB0eSBkaXIgbWFwIgorbXNnc3RyICJwdXN0YSBtYXBhIGthdGFsb2d1IgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFbXB0eSBkaXJlY3RvcnkgYmxvY2sgJXUgKCMlZCkgaW4gaW5vZGUgJXVcbiIKK21zZ3N0ciAiUHVzdHkgYmxvayBrYXRhbG9ndSAldSAoIyVkKSB3IGktd8SZxbpsZSAldVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGZpbGVuYW1lIG5ibG9ja3MgYmxvY2tzaXplXG4iCittc2dzdHIgIiVzOiAlcyBuYXp3YV9wbGlrdSBsaWN6YmFfYmxva8OzdyByb3ptaWFyX2Jsb2t1XG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBvZiBibG9ja3MhXG4iCittc2dzdHIgIk5pZWRvcHVzemN6YWxuYSBsaWN6YmEgYmxva8OzdyFcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciAoc2l6ZT0lZClcbiIKK21zZ3N0ciAiTmllIG1vxbxuYSBwcnp5ZHppZWxpxIcgYnVmb3JhIGJsb2t1IChyb3ptaWFyPSVkKVxuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIGRpc2tcbiIKK21zZ3N0ciAiU2vFgmFkbmlhOiAlcyBkeXNrXG4iCisKKyM6IGUyZnNjay9mbHVzaGIuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJCTEtGTFNCVUYgaW9jdGwgbm90IHN1cHBvcnRlZCEgIENhbid0IGZsdXNoIGJ1ZmZlcnMuXG4iCittc2dzdHIgImlvY3RsIEJMS0ZMU0JVRiBuaWUgb2JzxYJ1Z2l3YW55ISBOaWUgbW/FvG5hIG9wcsOzxbxuacSHIGJ1Zm9yw7N3LlxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1GXSBbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gZGV2aWNlXG4iCittc2dzdHIgIlNrxYJhZG5pYTogJXMgWy1GXSBbLUkgYmxva2lfYnVmb3JhX2ktd8SZesWCw7N3XSB1cnrEhWR6ZW5pZVxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo4MSBlMmZzY2svdW5peC5jOjk3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIGZvciBmbHVzaGluZyIKK21zZ3N0ciAicG9kY3phcyBvdHdpZXJhbmlhICVzIHcgY2VsdSBvcHLDs8W8bmllbmlhIgorCisjOiBlMmZzY2svaXNjYW4uYzo4NiBlMmZzY2svdW5peC5jOjk3OCByZXNpemUvbWFpbi5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiCittc2dzdHIgInBvZGN6YXMgcHLDs2J5IG9wcsOzxbxuaWVuaWEgJXMiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJwb2RjemFzIHByw7NieSBvdHdhcmNpYSAnJXMnIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTkgZTJmc2NrL3NjYW50ZXN0LmM6MTE0IG1pc2MvZTJpbWFnZS5jOjEyOTAKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgInBvZGN6YXMgb3R3aWVyYW5pYSBvYnJhenUgaS13xJl6xYLDs3ciCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEyNyBtaXNjL2UyaW1hZ2UuYzoxMzA5Cittc2dpZCAid2hpbGUgZ2V0dGluZyBuZXh0IGlub2RlIgorbXNnc3RyICJwb2RjemFzIHBvYmllcmFuaWEgbmFzdMSZcG5lZ28gaS13xJl6xYJhIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHNjYW5uZWQuXG4iCittc2dzdHIgIlByemVzenVrYW5vIGktd8SZesWCw7N3OiAldS5cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1MjQKK21zZ2lkICJyZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICJvZGN6eXQgc3VwZXJibG9rdSBrcm9uaWtpXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBubyB2YWxpZCBqb3VybmFsIHN1cGVyYmxvY2sgZm91bmRcbiIKK21zZ3N0ciAiJXM6IG5pZSB6bmFsZXppb25vIHBvcHJhd25lZ28gc3VwZXJibG9rdSBrcm9uaWtpXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBqb3VybmFsIHRvbyBzaG9ydFxuIgorbXNnc3RyICIlczoga3JvbmlrYSB6YSBrcsOzdGthXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiByZWNvdmVyaW5nIGpvdXJuYWxcbiIKK21zZ3N0ciAiJXM6IG9kdHdhcnphbmllIHoga3JvbmlraVxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogd29uJ3QgZG8gam91cm5hbCByZWNvdmVyeSB3aGlsZSByZWFkLW9ubHlcbiIKK21zZ3N0ciAiIgorIiVzOiBvZHR3b3J6ZW5pZSB6IGtyb25pa2kgbmllIHpvc3RhbmllIHd5a29uYW5lIHcgdHJ5YmllIHR5bGtvIGRvIG9kY3p5dHVcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlLW9wZW4gJXMiCittc2dzdHIgInBvZGN6YXMgcHLDs2J5IHBvbm93bmVnbyBvdHdhcmNpYSAlcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTMKK21zZ2lkICJhZXh0ZW5kZWQgYXR0cmlidXRlIgorbXNnc3RyICJhcm96c3plcnpvbnkgYXRyeWJ1dCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTQKK21zZ2lkICJBZXJyb3IgYWxsb2NhdGluZyIKK21zZ3N0ciAiQWLFgsSFZCBwb2RjemFzIHByenlkemllbGFuaWEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJiYmxvayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTYKK21zZ2lkICJCYml0bWFwIgorbXNnc3RyICJCYml0bWFwYSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTcKK21zZ2lkICJjY29tcHJlc3MiCittc2dzdHIgImNrb21wcmVzamEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE4Cittc2dpZCAiQ2NvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgQGIiCittc2dzdHIgIkNrb25mbGlrdCB6IGlubnltIEBiaWVtIHN5c3RlbXUgcGxpa8OzdyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTkKK21zZ2lkICJkZGlyZWN0b3J5IgorbXNnc3RyICJka2F0YWxvZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjAKK21zZ2lkICJEZGVsZXRlZCIKK21zZ3N0ciAiRHVzdW5pxJl0eSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjEKK21zZ2lkICJlZW50cnkiCittc2dzdHIgImV3cGlzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMgorbXNnaWQgIkVAZSAnJURuJyBpbiAlcCAoJWkpIgorbXNnc3RyICJFQGUgJyVEbicgdyAlcCAoJWkpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMworbXNnaWQgImZmaWxlc3lzdGVtIgorbXNnc3RyICJmc3lzdGVtIHBsaWvDs3ciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI0Cittc2dpZCAiRmZvciBAaSAlaSAoJVEpIGlzIgorbXNnc3RyICJGZGxhIGktd8SZesWCYSAlaSAoJVEpIHd5bm9zaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjUKK21zZ2lkICJnZ3JvdXAiCittc2dzdHIgImdncnVwYSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjYKK21zZ2lkICJoSFRSRUUgQGQgQGkiCittc2dzdHIgImhAaSBAZHUgSFRSRUUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI3Cittc2dpZCAiaWlub2RlIgorbXNnc3RyICJpaS13xJl6ZcWCIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOAorbXNnaWQgIklpbGxlZ2FsIgorbXNnc3RyICJJbmllZG9wdXN6Y3phbG55IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOQorbXNnaWQgImpqb3VybmFsIgorbXNnc3RyICJqa3JvbmlrYSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAibGxvc3QrZm91bmQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMxCittc2dpZCAiTGlzIGEgbGluayIKK21zZ3N0ciAiTGplc3QgZG93acSFemFuaWVtIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMgorbXNnaWQgIm1tdWx0aXBseS1jbGFpbWVkIgorbXNnc3RyICJtd2llbG9rcm90bmllIHphZGVrbGFyb3dhbnkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMzCittc2dpZCAibmludmFsaWQiCittc2dzdHIgIm5ixYLEmWRueSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzQKK21zZ2lkICJvb3JwaGFuZWQiCittc2dzdHIgIm9vc2llcm9jb255IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNQorbXNnaWQgInBwcm9ibGVtIGluIgorbXNnc3RyICJwcHJvYmxlbSB3IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNgorbXNnaWQgInFxdW90YSIKK21zZ3N0ciAicWxpbWl0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNworbXNnaWQgInJyb290IEBpIgorbXNnc3RyICJyZ8WCw7N3bnkgQGkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM4Cittc2dpZCAic3Nob3VsZCBiZSIKK21zZ3N0ciAic3Bvd2lubm8gYnnEhyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzkKK21zZ2lkICJTc3VwZXJAYiIKK21zZ3N0ciAiU3N1cGVyQGIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQwCittc2dpZCAidXVuYXR0YWNoZWQiCittc2dzdHIgInVuaWVkb8WCxIVjem9ueSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDEKK21zZ2lkICJ2ZGV2aWNlIgorbXNnc3RyICJ2dXJ6xIVkemVuaWUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQyCittc2dpZCAieGV4dGVudCIKK21zZ3N0ciAieGVrc3RlbnQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQzCittc2dpZCAienplcm8tbGVuZ3RoIgorbXNnc3RyICJ6emVyb3dlaiBkxYJ1Z2/Fm2NpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NAorbXNnaWQgIjxUaGUgTlVMTCBpbm9kZT4iCittc2dzdHIgIjxwdXN0eSBpLXfEmXplxYI+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NQorbXNnaWQgIjxUaGUgYmFkIGJsb2NrcyBpbm9kZT4iCittc2dzdHIgIjxpLXfEmXplxYIgd2FkbGl3eWNoIGJsb2vDs3c+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NworbXNnaWQgIjxUaGUgdXNlciBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxpLXfEmXplxYIgbGltaXTDs3cgdcW8eXRrb3duaWvDs3c+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OAorbXNnaWQgIjxUaGUgZ3JvdXAgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8aS13xJl6ZcWCIGxpbWl0w7N3IGdydXA+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OQorbXNnaWQgIjxUaGUgYm9vdCBsb2FkZXIgaW5vZGU+IgorbXNnc3RyICI8aS13xJl6ZcWCIGJvb3QtbG9hZGVyYT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICI8aS13xJl6ZcWCIGthdGFsb2d1IHVuZGVsZXRlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjEKK21zZ2lkICI8VGhlIGdyb3VwIGRlc2NyaXB0b3IgaW5vZGU+IgorbXNnc3RyICI8aS13xJl6ZcWCIGRlc2tyeXB0b3JhIGdydXB5PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjIKK21zZ2lkICI8VGhlIGpvdXJuYWwgaW5vZGU+IgorbXNnc3RyICI8aS13xJl6ZcWCIGtyb25pa2k+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MworbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSA5PiIKK21zZ3N0ciAiPHphcmV6ZXJ3b3dhbnkgaS13xJl6ZcWCIDk+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2NAorbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSAxMD4iCittc2dzdHIgIjx6YXJlemVyd293YW55IGktd8SZemXFgiAxMD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM0Cittc2dpZCAicmVndWxhciBmaWxlIgorbXNnc3RyICJwbGlrIHp3eWvFgnkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM2Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICJrYXRhbG9nIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzOAorbXNnaWQgImNoYXJhY3RlciBkZXZpY2UiCittc2dzdHIgInVyesSFZHplbmllIHpuYWtvd2UiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQwCittc2dpZCAiYmxvY2sgZGV2aWNlIgorbXNnc3RyICJ1cnrEhWR6ZW5pZSBibG9rb3dlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MgorbXNnaWQgIm5hbWVkIHBpcGUiCittc2dzdHIgIm5hendhbnkgcG90b2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ0Cittc2dpZCAic3ltYm9saWMgbGluayIKK21zZ3N0ciAiZG93acSFemFuaWUgc3ltYm9saWN6bmUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ2IG1pc2MvdXVpZGQuYzoxNjIKK21zZ2lkICJzb2NrZXQiCittc2dzdHIgImduaWF6ZG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmlsZSB0eXBlIHdpdGggbW9kZSAwJW8iCittc2dzdHIgIm5pZXpuYW55IHJvZHphaiBwbGlrdSB0eXB1IDAlbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjMKK21zZ2lkICJpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiYmxvayBwb8WbcmVkbmkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI1Cittc2dpZCAiZG91YmxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJibG9rIHBvZHfDs2puaWUgcG/Fm3JlZG5pIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyNworbXNnaWQgInRyaXBsZSBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiYmxvayBwb3Ryw7NqbmllIHBvxZtyZWRuaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjkKK21zZ2lkICJ0cmFuc2xhdG9yIGJsb2NrIgorbXNnc3RyICJibG9rIHTFgnVtYWN6xIVjeSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MzEKK21zZ2lkICJibG9jayAjIgorbXNnc3RyICJibG9rICMiCisKKyM6IGUyZnNjay9wYXNzMWIuYzoyMjIKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGlub2RlIG1hcCIKK21zZ3N0ciAid2llbG9rcm90bmllIHphZGVrbGFyb3dhbmEgbWFwYSBpLXfEmXrFgsOzdyIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjYyNSBlMmZzY2svcGFzczFiLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjYW4ndCBmaW5kIGR1cF9ibGsgZm9yICVsbHVcbiIKK21zZ3N0ciAiYsWCxIVkIHdld27EmXRyem55OyBuaWUgbW/FvG5hIHpuYWxlxbrEhyBkdXBfYmxrIGRsYSAlbGx1XG4iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NTIKK21zZ2lkICJyZXR1cm5lZCBmcm9tIGNsb25lX2ZpbGVfYmxvY2siCittc2dzdHIgInBvd3LDs3QgeiBjbG9uZV9maWxlX2Jsb2NrIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgYmxvY2sgcmVjb3JkIGZvciAlbGx1IgorbXNnc3RyICJixYLEhWQgd2V3bsSZdHJ6bnk6IG5pZSBtb8W8bmEgem5hbGXFusSHIHJla29yZHUgYmxva3UgRUEgZGxhICVsbHUiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBpbm9kZSByZWNvcmQgZm9yICV1IgorbXNnc3RyICJCxYLEhWQgd2V3bsSZdHJ6bnk6IG5pZSBtb8W8bmEgem5hbGXFusSHIHJla29yZHUgaS13xJl6xYJhIEVBIGRsYSAldSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NDc1IGUyZnNjay9wYXNzMi5jOjc4MgorbXNnaWQgInJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICJvZGN6eXR1IGJsb2t1IGthdGFsb2d1IgorCisjOiBlMmZzY2svcGFzczEuYzo2MzQKK21zZ2lkICJpbi11c2UgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBhIHXFvHl3YW55Y2ggaS13xJl6xYLDs3ciCisKKyM6IGUyZnNjay9wYXNzMS5jOjY0NQorbXNnaWQgImRpcmVjdG9yeSBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgaS13xJl6xYLDs3cga2F0YWxvZ8OzdyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjU1Cittc2dpZCAicmVndWxhciBmaWxlIGlub2RlIG1hcCIKK21zZ3N0ciAibWFwYSBpLXfEmXrFgsOzdyB6d3lrxYJ5Y2ggcGxpa8OzdyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjY0IG1pc2MvZTJpbWFnZS5jOjEyNjUKK21zZ2lkICJpbi11c2UgYmxvY2sgbWFwIgorbXNnc3RyICJtYXBhIHXFvHl3YW55Y2ggYmxva8OzdyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzMwCittc2dpZCAib3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJyb3pwb2N6eW5hbmlhIHByemVzenVraXdhbmlhIGktd8SZesWCw7N3IgorCisjOiBlMmZzY2svcGFzczEuYzo3NjQKK21zZ2lkICJnZXR0aW5nIG5leHQgaW5vZGUgZnJvbSBzY2FuIgorbXNnc3RyICJwb2JpZXJhbmlhIG5hc3TEmXBuZWdvIGktd8SZesWCYSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI3OQorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAiUHJ6ZWJpZWcgMSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGluZGlyZWN0IGJsb2NrcyBvZiBpbm9kZSAldSIKK21zZ3N0ciAib2Rjenl0dSBuaWViZXpwb8WbcmVkbmljaCBibG9rw7N3IGktd8SZesWCYSAldSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM4NgorbXNnaWQgImJhZCBpbm9kZSBtYXAiCittc2dzdHIgImLFgsSZZG5hIG1hcGEgaS13xJl6xYLDs3ciCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MDkKK21zZ2lkICJpbm9kZSBpbiBiYWQgYmxvY2sgbWFwIgorbXNnc3RyICJpLXfEmXplxYIgdyBtYXBpZSB3YWRsaXd5Y2ggYmxva8OzdyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQyOQorbXNnaWQgImltYWdpYyBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgaS13xJl6xYLDs3cgaW1hZ2ljIgorCisjOiBlMmZzY2svcGFzczEuYzoxNDU2Cittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBibG9jayBtYXAiCittc2dzdHIgIndpZWxva3JvdG5pZSB6YWRla2xhcm93YW5hIG1hcGEgYmxva8OzdyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTU2NworbXNnaWQgImV4dCBhdHRyIGJsb2NrIG1hcCIKK21zZ3N0ciAibWFwYSBibG9rw7N3IHJvenN6ZXJ6b255Y2ggYXRyeWJ1dMOzdyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlNmx1KCVjKTogZXhwZWN0aW5nICU2bHUgZ290IHBoeXMgJTZsdSAoYmxrY250ICVsbGQpXG4iCittc2dzdHIgIiU2bHUoJWMpOiBvY3pla2l3YW5vICU2bHUsIG90cnp5bWFubyBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIgorCisjOiBlMmZzY2svcGFzczEuYzoyODk4Cittc2dpZCAiYmxvY2sgYml0bWFwIgorbXNnc3RyICJiaXRtYXBhIGJsb2vDs3ciCisKKyM6IGUyZnNjay9wYXNzMS5jOjI5MDQKK21zZ2lkICJpbm9kZSBiaXRtYXAiCittc2dzdHIgImJpdG1hcGEgaS13xJl6xYLDs3ciCisKKyM6IGUyZnNjay9wYXNzMS5jOjI5MTAKK21zZ2lkICJpbm9kZSB0YWJsZSIKK21zZ3N0ciAidGFibGljYSBpLXfEmXrFgsOzdyIKKworIzogZTJmc2NrL3Bhc3MyLmM6MjgzCittc2dpZCAiUGFzcyAyIgorbXNnc3RyICJQcnplYmllZyAyIgorCisjOiBlMmZzY2svcGFzczIuYzo4MDYKK21zZ2lkICJDYW4gbm90IGNvbnRpbnVlLiIKK21zZ3N0ciAiTmllIG1vxbxuYSBrb250eW51b3dhxIcuIgorCisjOiBlMmZzY2svcGFzczMuYzo3NworbXNnaWQgImlub2RlIGRvbmUgYml0bWFwIgorbXNnc3RyICJiaXRtYXBhIHd5a29uYW55Y2ggaS13xJl6xYLDs3ciCisKKyM6IGUyZnNjay9wYXNzMy5jOjg2Cittc2dpZCAiUGVhayBtZW1vcnkiCittc2dzdHIgIk5handpxJlrc3plIHXFvHljaWUgcGFtacSZY2kiCisKKyM6IGUyZnNjay9wYXNzMy5jOjE0OAorbXNnaWQgIlBhc3MgMyIKK21zZ3N0ciAiUHJ6ZWJpZWcgMyIKKworIzogZTJmc2NrL3Bhc3MzLmM6MzQwCittc2dpZCAiaW5vZGUgbG9vcCBkZXRlY3Rpb24gYml0bWFwIgorbXNnc3RyICJiaXRtYXBhIHd5a3J5d2FuaWEgcMSZdGxpIGktd8SZesWCw7N3IgorCisjOiBlMmZzY2svcGFzczQuYzoxOTYKK21zZ2lkICJQYXNzIDQiCittc2dzdHIgIlByemViaWVnIDQiCisKKyM6IGUyZnNjay9wYXNzNS5jOjc0Cittc2dpZCAiUGFzcyA1IgorbXNnc3RyICJQcnplYmllZyA1IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxCittc2dpZCAiKG5vIHByb21wdCkiCittc2dzdHIgIihiZXogcHl0YW5pYSkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIKK21zZ2lkICJGaXgiCittc2dzdHIgIlBvcHJhd2nEhyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MworbXNnaWQgIkNsZWFyIgorbXNnc3RyICJXeWN6ecWbY2nEhyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NAorbXNnaWQgIlJlbG9jYXRlIgorbXNnc3RyICJQcnplbmllxZvEhyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NQorbXNnaWQgIkFsbG9jYXRlIgorbXNnc3RyICJQcnp5ZHppZWxpxIciCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYKK21zZ2lkICJFeHBhbmQiCittc2dzdHIgIlJvenN6ZXJ6ecSHIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3Cittc2dpZCAiQ29ubmVjdCB0byAvbG9zdCtmb3VuZCIKK21zZ3N0ciAiRG/FgsSFY3p5xIcgZG8gL2xvc3QrZm91bmQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTgKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIld5Y3p5xZtjacSHIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5Cittc2dpZCAiU2FsdmFnZSIKK21zZ3N0ciAiVXJhdG93YcSHIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwCittc2dpZCAiVHJ1bmNhdGUiCittc2dzdHIgIlVjacSFxIciCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEKK21zZ2lkICJDbGVhciBpbm9kZSIKK21zZ3N0ciAiV3ljennFm2NpxIcgaS13xJl6ZcWCIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyCittc2dpZCAiQWJvcnQiCittc2dzdHIgIlByemVyd2HEhyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MworbXNnaWQgIlNwbGl0IgorbXNnc3RyICJQb2R6aWVsacSHIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgIktvbnR5bnVvd2HEhyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NQorbXNnaWQgIkNsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIgorbXNnc3RyICJTa2xvbm93YcSHIHdpZWxva3JvdG5pZSB6YWRla2xhcm93YW5lIGJsb2tpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2Cittc2dpZCAiRGVsZXRlIGZpbGUiCittc2dzdHIgIlVzdW7EhcSHIHBsaWsiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiUG9taW7EhcSHIGtvbXVuaWthdHkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjgKK21zZ2lkICJVbmxpbmsiCittc2dzdHIgIk9kxYLEhWN6ecSHIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5Cittc2dpZCAiQ2xlYXIgSFRyZWUgaW5kZXgiCittc2dzdHIgIld5Y3p5xZtjacSHIGluZGVrcyBIVHJlZSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MAorbXNnaWQgIlJlY3JlYXRlIgorbXNnc3RyICJPZHR3b3J6ecSHIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5Cittc2dpZCAiKE5PTkUpIgorbXNnc3RyICIoTklDKSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MAorbXNnaWQgIkZJWEVEIgorbXNnc3RyICJQT1BSQVdJT05PIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxCittc2dpZCAiQ0xFQVJFRCIKK21zZ3N0ciAiV1lDWllTWkNaT05PIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyCittc2dpZCAiUkVMT0NBVEVEIgorbXNnc3RyICJQUlpFTklFU0lPTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMKK21zZ2lkICJBTExPQ0FURUQiCittc2dzdHIgIlBSWllEWklFTE9OTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NAorbXNnaWQgIkVYUEFOREVEIgorbXNnc3RyICJST1pTWkVSWk9OTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NQorbXNnaWQgIlJFQ09OTkVDVEVEIgorbXNnc3RyICJQT0TFgcSEQ1pPTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYKK21zZ2lkICJDUkVBVEVEIgorbXNnc3RyICJVVFdPUlpPTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcKK21zZ2lkICJTQUxWQUdFRCIKK21zZ3N0ciAiVVJBVE9XQU5PIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4Cittc2dpZCAiVFJVTkNBVEVEIgorbXNnc3RyICJTS1LDk0NPTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODkKK21zZ2lkICJJTk9ERSBDTEVBUkVEIgorbXNnc3RyICJJLVfEmFpFxYEgV1lDWllTWkNaT05ZIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwCittc2dpZCAiQUJPUlRFRCIKK21zZ3N0ciAiUFJaRVJXQU5PIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxCittc2dpZCAiU1BMSVQiCittc2dzdHIgIlBPRFpJRUxPTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTIKK21zZ2lkICJDT05USU5VSU5HIgorbXNnc3RyICJLT05UWU5VQUNKQSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MworbXNnaWQgIk1VTFRJUExZLUNMQUlNRUQgQkxPQ0tTIENMT05FRCIKK21zZ3N0ciAiU0tMT05PV0FOTyBXSUVMT0tST1ROSUUgWkFERUtMQVJPV0FORSBCTE9LSSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NAorbXNnaWQgIkZJTEUgREVMRVRFRCIKK21zZ3N0ciAiUExJSyBVU1VOScSYVFkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUKK21zZ2lkICJTVVBQUkVTU0VEIgorbXNnc3RyICJQT01JTknEmFRPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2Cittc2dpZCAiVU5MSU5LRUQiCittc2dzdHIgIk9ExYHEhENaT05PIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3Cittc2dpZCAiSFRSRUUgSU5ERVggQ0xFQVJFRCIKK21zZ3N0ciAiSU5ERUtTIEhUUkVFIFdZQ1pZU1pDWk9OWSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OAorbXNnaWQgIldJTEwgUkVDUkVBVEUiCittc2dzdHIgIlpPU1RBTklFIE9EVFdPUlpPTlkiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNworbXNnaWQgIkBiIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgIkBCIEBiw7N3IGRsYSBncnVweSAlZyBuaWUgamVzdCB3IGdydXBpZS4gKEBiICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTEKK21zZ2lkICJAaSBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJAQiBpLXfEmXrFgsOzdyBkbGEgZ3J1cHkgJWcgbmllIGplc3QgdyBncnVwaWUuIChAYiAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgdGFibGUgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIy4gQC1leHBhbmRlZDogV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYKK21zZ2lkICIiCisiQGkgdGFibGUgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKKyJXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuIgorbXNnc3RyICIiCisidGFibGljYSBpLXfEmXrFgsOzdyBkbGEgZ3J1cHkgJWcgbmllIGplc3QgdyBncnVwaWUuIChAYiAlYilcbiIKKyJVV0FHQTogTU/Fu0xJV0EgUE9XQcW7TkEgVVRSQVRBIERBTllDSC5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBzdXBlcmJsb2NrIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgdmFsaWQgZXh0Mi9leHQzL2V4dDRcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbS4gIElmIHRoZSBkZXZpY2UgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyL2V4dDMvZXh0NFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgc3VwZXJibG9ja1xuCisjLiBALWV4cGFuZGVkOiBpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBzdXBlcmJsb2NrOlxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iIDgxOTMgPGRldmljZT5cbgorIy4gQC1leHBhbmRlZDogIG9yXG4KKyMuIEAtZXhwYW5kZWQ6ICAgICBlMmZzY2sgLWIgMzI3NjggPGRldmljZT5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyCittc2dpZCAiIgorIlxuIgorIlRoZSBAUyBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIHZhbGlkIGV4dDIvZXh0My9leHQ0XG4iCisiQGYuICBJZiB0aGUgQHYgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyL2V4dDMvZXh0NFxuIgorIkBmIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgQFNcbiIKKyJpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBAUzpcbiIKKyIgICAgZTJmc2NrIC1iIDgxOTMgPEB2PlxuIgorIiBvclxuIgorIiAgICBlMmZzY2sgLWIgMzI3NjggPEB2PlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQFMgbmllIG3Ds2fFgiBiecSHIG9kY3p5dGFueSBsdWIgbmllIG9waXN1amUgcHJhd2lkxYJvd2VnbyBzeXN0ZW11XG4iCisicGxpa8OzdyBleHQyL2V4dDMvZXh0NC4gSmXFvGVsaSBAdiBqZXN0IHByYXdpZMWCb3dlIGkgbmFwcmF3ZMSZIHphd2llcmFcbiIKKyJAZiBleHQyL2V4dDMvZXh0NCAobmllIGplc3Qgc3dhcGVtLCB1ZnMtZW0gYW5pIG5pY3p5bSBpbm55bSksXG4iCisidG8gQFMgamVzdCB1c3prb2R6b255IC0gbW/FvG5hIHByw7Nib3dhxIcgdXJ1Y2hvbWnEhyBlMmZzY2sgeiBpbm55bVxuIgorIkBTaWVtOlxuIgorIiAgICBlMmZzY2sgLWIgODE5MyA8QHY+XG4iCisiIGx1YlxuIgorIiAgICBlMmZzY2sgLWIgMzI3NjggPEB2PlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgZmlsZXN5c3RlbSBzaXplIChhY2NvcmRpbmcgdG8gdGhlIHN1cGVyYmxvY2spIGlzICViIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgZGV2aWNlIGlzICVjIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBFaXRoZXIgdGhlIHN1cGVyYmxvY2sgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMKK21zZ2lkICIiCisiVGhlIEBmIHNpemUgKGFjY29yZGluZyB0byB0aGUgQFMpIGlzICViIEBic1xuIgorIlRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBAdiBpcyAlYyBAYnNcbiIKKyJFaXRoZXIgdGhlIEBTIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKyJSb3ptaWFyIHN5c3RlbXUgcGxpa8OzdyAod2VkxYJ1ZyBAU3UpIHd5bm9zaSAlYiBAYsOzd1xuIgorIkZpenljem55IHJvem1pYXIgdXJ6xIVkemVuaWEgd3lub3NpICVjIEBiw7N3XG4iCisiTW/FvGxpd2UsIMW8ZSBAUyBhbGJvIHRhYmxpY2EgcGFydHljamkgamVzdCB1c3prb2R6b25hIVxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2NrX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbgorIy4gQC1leHBhbmRlZDogVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuCisjLiBALWV4cGFuZGVkOiBmcm9tIHRoZSBibG9jayBzaXplLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MAorbXNnaWQgIiIKKyJAUyBAYl9zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4iCisiVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuIgorImZyb20gdGhlIEBiIHNpemUuXG4iCittc2dzdHIgIiIKKyJXIEBTdSBibG9ja19zaXplIChyb3ptLiBibG9rdSkgPSAlYiwgZnJhZ3NpemUgKHJvem0uIGZyYWdtZW50dSkgPSAlYy5cbiIKKyJUYSB3ZXJzamEgZTJmc2NrIG5pZSBvYnPFgnVndWplIHJvem1pYXLDs3cgZnJhZ21lbnR1IHLDs8W8bnljaCBvZCByb3ptaWFydVxuIgorIkBidS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja3NfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDcKK21zZ2lkICJAUyBAYnNfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiVyBAU3UgYmxvY2tzX3Blcl9ncm91cCAoYmxva8OzdyB3IGdydXBpZSkgPSAlYiwgcG93aW5ubyBiecSHICVjXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgZmlyc3RfZGF0YV9ibG9jayA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUyCittc2dpZCAiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIlcgQFN1IGZpcnN0X2RhdGFfYmxvY2sgKDEuIEBiIGRhbnljaCkgPSAlYiwgcG93aW5pZW4gYnnEhyAlY1xuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcKK21zZ2lkICIiCisiQGYgZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJAZiBuaWUgbWlhxYIgVVVJRC1hOyB3eWdlbmVyb3dhbm8uXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydFxuIgorIm9mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnlcbiIKKyJydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgJVMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtXG4iCisibWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZFxuIgorInRoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLlxuIgorIlxuIgorbXNnc3RyICIiCisiVXdhZ2E6IGplxZtsaSBqYWtpZcWbIGJsb2tpIGJpdG1hcCBpLXfEmXrFgsOzdyBsdWIgYmxva8OzdyBhbGJvIGN6xJnFm8SHXG4iCisidGFiZWxpIGktd8SZesWCw7N3IHd5bWFnYSByZWxva2FjamksIG1vxbxuYSB1cnVjaG9tacSHIG5hanBpZXJ3IGUyZnNja1xuIgorInogb3BjasSFICctYiAlUycuIFByb2JsZW0gbW/FvGUgdGt3acSHIHR5bGtvIHcgZGVza3J5cHRvcmFjaCBnxYLDs3duZWpcbiIKKyJncnVweSBibG9rw7N3LCBhIHphcGFzb3dlIGRlc2tyeXB0b3J5IGdydXB5IGJsb2vDs3cgbW9nxIUgYnnEhyBwb3ByYXduZS5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ29ycnVwdGlvbiBmb3VuZCBpbiBzdXBlcmJsb2NrLiAgKCVzID0gJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MQorbXNnaWQgIkNvcnJ1cHRpb24gZm91bmQgaW4gQFMuICAoJXMgPSAlTikuXG4iCittc2dzdHIgIlpuYWxlemlvbm8gdXN6a29kemVuaWEgdyBAU3UuICglcyA9ICVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBAdjogJW1cbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgb2tyZcWbbGFuaWEgcm96bWlhcnUgZml6eWN6bmVnbyB1cnrEhWR6ZW5pYTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgY291bnQgaW4gc3VwZXJibG9jayBpcyAlaSwgc2hvdWxkIGJlICVqLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MQorbXNnaWQgIkBpIGNvdW50IGluIEBTIGlzICVpLCBAcyAlai5cbiIKK21zZ3N0ciAibGljem5payBpLXfEmXrFgsOzdyB3IEBTdSB3eW5vc2kgJWksIHBvd2luaWVuIGJ5xIcgJWouXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg1Cittc2dpZCAiVGhlIEh1cmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZmlsZXR5cGUgZmVhdHVyZS5cbiIKK21zZ3N0ciAiSHVyZCBuaWUgb2JzxYJ1Z3VqZSB3xYJhc25vxZtjaSBmaWxldHlwZS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgYW4gaW52YWxpZCBqb3VybmFsIChpbm9kZSAlaSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhhcyBhbiBAbiBAaiAoQGkgJWkpLlxuIgorbXNnc3RyICJAUyBtYSBixYLEmWRuxIUga3JvbmlrxJkgKEBpICVpKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgbXVsdGlwbGUgZmlsZXN5c3RlbSB1c2VycyAodW5zdXBwb3J0ZWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5NQorbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBtdWx0aXBsZSBAZiB1c2VycyAodW5zdXBwb3J0ZWQpLlxuIgorbXNnc3RyICIiCisiWmV3bsSZdHJ6bmEgQGogbWEgd2llbHUgdcW8eXRrb3duaWvDs3cgc3lzdGVtdSBwbGlrw7N3IChuaWUgb2JzxYJ1Z2l3YW5lKS5cbiIKKworIy4gQC1leHBhbmRlZDogQ2FuJ3QgZmluZCBleHRlcm5hbCBqb3VybmFsXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjAwCittc2dpZCAiQ2FuJ3QgZmluZCBleHRlcm5hbCBAalxuIgorbXNnc3RyICJOaWUgbW/FvG5hIHpuYWxlxbrEhyB6ZXduxJl0cnpuZWoga3JvbmlraVxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBiYWQgc3VwZXJibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwNQorbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBiYWQgQFNcbiIKK21zZ3N0ciAiWmV3bsSZdHJ6bmEgQGogbWEgYsWCxJlkbnkgQFNcbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmlsZXN5c3RlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxMAorbXNnaWQgIkV4dGVybmFsIEBqIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBAZlxuIgorbXNnc3RyICJaZXduxJl0cnpuYSBAaiBuaWUgb2JzxYJ1Z3VqZSB0ZWdvIHN5c3RlbXUgcGxpa8Ozd1xuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGpvdXJuYWwgc3VwZXJibG9jayBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGpvdXJuYWwgCisjLiBALWV4cGFuZGVkOiBmb3JtYXQuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGFsc28gcG9zc2libGUgdGhlIGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxNQorbXNnaWQgIiIKKyJAZiBAaiBAUyBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbiIKKyJJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgQGogIgorImZvcm1hdC5cbiIKKyJJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICIiCisiQFMga3JvbmlraSBzeXN0ZW11IHBsaWvDs3cgbWEgbmllem5hbnkgdHlwICVOIChuaWUgb2JzxYJ1Z2l3YW55KS5cbiIKKyJNb8W8bGl3ZSwgxbxlIHRhIGtvcGlhIGUyZnNjayBqZXN0IHN0YXJhIGkvbHViIG5pZSBvYnPFgnVndWplIHRlZ28gZm9ybWF0dVxuIgorImtyb25pa2kuXG4iCisiTW/FvGxpd2UgdGXFvCwgxbxlIEBTIGtyb25pa2kgamVzdCB1c3prb2R6b255LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjMKK21zZ2lkICJAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICJAUyBrcm9uaWtpIGplc3QgdXN6a29kem9ueS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXNfam91cm5hbCBmbGFnIGlzIGNsZWFyLCBidXQgYSBqb3VybmFsIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjI4Cittc2dpZCAiQFMgaGFzX0BqIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIEBqIGlzIHByZXNlbnQuXG4iCittc2dzdHIgImZsYWdhIEBTdSBoYXNfam91cm5hbCBqZXN0IHd5emVyb3dhbmEsIGFsZSBAaiBpc3RuaWVqZS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIGpvdXJuYWwgaXMgcHJlc2VudC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMzMKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIEBqIGlzIHByZXNlbnQuXG4iCittc2dzdHIgIkBTIG1hIHVzdGF3aW9uxIUgZmxhZ8SZIG5lZWRzX3JlY292ZXJ5LCBhbGUgbmllIG1hIGtyb25pa2kuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IGpvdXJuYWwgaGFzIGRhdGEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjM4Cittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IEBqIGhhcyBkYXRhLlxuIgorbXNnc3RyICJmbGFnYSBuZWVkc19yZWNvdmVyeSBAU3UgamVzdCB3eXplcm93YW5hLCBhbGUgQGogemF3aWVyYSBkYW5lLlxuIgorCisjLiBALWV4cGFuZGVkOiBDbGVhciBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0MworbXNnaWQgIkNsZWFyIEBqIgorbXNnc3RyICJXeWN6ecWbY2nEhyBrcm9uaWvEmSIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBmaWxlc3lzdGVtLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0OCBlMmZzY2svcHJvYmxlbS5jOjcwNworbXNnaWQgIkBmIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIEBmLiAgIgorbXNnc3RyICJAZiBtYSB1c3Rhd2lvbmUgZmxhZ2kgY2VjaCwgYWxlIG1hIHdlcnNqxJkgMCBzeXN0ZW11IHBsaWvDs3cuICIKKworIy4gQC1leHBhbmRlZDogJXMgb3JwaGFuZWQgaW5vZGUgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTMKK21zZ2lkICIlcyBAbyBAaSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuIgorbXNnc3RyICIlcyBAbyBAaSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgdXByYXduaWVuaWE9JUltLCByb3ptaWFyPSVJcylcbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1OAorbXNnaWQgIkBJICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgInpuYWxlemlvbm8gQEkgJUIgKCViKSB3IEBvbSBpLXfEmcW6bGUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEFscmVhZHkgY2xlYXJlZCAlQiAoJWIpIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI2MworbXNnaWQgIkFscmVhZHkgY2xlYXJlZCAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICJKdcW8IHd5Y3p5c3pjem9ubyAlQiAoJWIpIHpuYWxlemlvbnkgdyBAb20gaS13xJnFumxlICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIG9ycGhhbmVkIGlub2RlICVpIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBvIEBpICVpIGluIEBTLlxuIgorbXNnc3RyICJASSBAbyBAaSAlaSB3IEBTdS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBpbm9kZSAlaSBpbiBvcnBoYW5lZCBpbm9kZSBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJASSBAaSAlaSBpbiBAbyBAaSBsaXN0LlxuIgorbXNnc3RyICJASSBAaSAlaSB3IGxpxZtjaWUgQG9jaCBpLXfEmXrFgsOzdy5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3OAorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICJAUyBrcm9uaWtpIG1hIHVzdGF3aW9uxIUgbmllem5hbsSFIGZsYWfEmSB0eWxrbyBkbyBvZGN6eXR1LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjgzCittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIkBTIGtyb25pa2kgbWEgdXN0YXdpb27EhSBmbGFnxJkgbmllem5hbmVqIGNlY2h5LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODgKK21zZ2lkICJAaiB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4iCittc2dzdHIgIldlcnNqYSBrcm9uaWtpIG5pZSBvYnPFgnVnaXdhbmEgcHJ6ZXogdGVuIGUyZnNjay5cbiIKKworIy4gQC1leHBhbmRlZDogTW92aW5nIGpvdXJuYWwgZnJvbSAvJXMgdG8gaGlkZGVuIGlub2RlLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1vdmluZyBAaiBmcm9tIC8lcyB0byBoaWRkZW4gQGkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJQcnplbm9zemVuaWUga3JvbmlraSB6IC8lcyBkbyB1a3J5dGVnbyBpLXfEmXrFgmEuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIG1vdmluZyBqb3VybmFsOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIG1vdmluZyBAajogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkLFgsSFZCBwb2RjemFzIHByemVub3N6ZW5pYSBrcm9uaWtpOiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBGb3VuZCBpbnZhbGlkIFYyIGpvdXJuYWwgc3VwZXJibG9jayBmaWVsZHMgKGZyb20gVjEgam91cm5hbCkuXG4KKyMuIEAtZXhwYW5kZWQ6IENsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIGpvdXJuYWwgc3VwZXJibG9jay4uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMDMKK21zZ2lkICIiCisiRm91bmQgQG4gVjIgQGogQFMgZmllbGRzIChmcm9tIFYxIEBqKS5cbiIKKyJDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBAaiBAUy4uLlxuIgorIlxuIgorbXNnc3RyICIiCisiWm5hbGV6aW9ubyBixYLEmWRuZSBwb2xhIEBTdSBrcm9uaWtpIFYyICh6IGtyb25pa2kgVjEpLlxuIgorIkN6eXN6Y3plbmllIHDDs2wgc3BvemEgQFN1IGtyb25pa2kgVjEuLi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogUnVuIGpvdXJuYWwgYW55d2F5CisjOiBlMmZzY2svcHJvYmxlbS5jOjMwOQorbXNnaWQgIlJ1biBAaiBhbnl3YXkiCittc2dzdHIgIld5a29uYcSHIHphcGlzeSB6IGtyb25pa2kiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTQKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiIgorIkZsYWdhIG9kdHdvcnplbmlhIG5pZSB1c3Rhd2lvbmEgdyB6YXBhc293eW0gQFN1LFxuIgorIndpxJljIHd5a29udWrEmSB6YXBpc3kgeiBrcm9uaWtpIG1pbW8gdG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhY2tpbmcgdXAgam91cm5hbCBpbm9kZSBibG9jayBpbmZvcm1hdGlvbi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzE5Cittc2dpZCAiIgorIkJhY2tpbmcgdXAgQGogQGkgQGIgaW5mb3JtYXRpb24uXG4iCisiXG4iCittc2dzdHIgIlR3b3J6ZW5pZSBrb3BpaSB6YXBhc293ZWogaW5mb3JtYWNqaSB6IEBidSBpLXfEmXrFgmEga3JvbmlraS5cbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9pbm9kZSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGlzICVOOyBzaG91bGQgYmUgemVyby4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMjQKK21zZ2lkICIiCisiQGYgZG9lcyBub3QgaGF2ZSByZXNpemVfQGkgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X0Bic1xuIgorImlzICVOOyBAcyB6ZXJvLiAgIgorbXNnc3RyICIiCisiQGYgbmllIG1hIHfFgsSFY3pvbmVnbyByZXNpemVfaW5vZGUsIGFsZSBzX3Jlc2VydmVkX2dkdF9ibG9ja3NcbiIKKyJ3eW5vc2kgJU47IEBzIHplcm8uICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplX2lub2RlIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBpbm9kZSBpcyBub24temVyby4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMzAKK21zZ2lkICJSZXNpemVfQGkgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIEBpIGlzIG5vbi16ZXJvLiAgIgorbXNnc3RyICIiCisiUmVzaXplX2lub2RlIG5pZSB3xYLEhWN6b25lLCBhbGUgaS13xJl6ZcWCIHptaWFueSByb3ptaWFydSBqZXN0IG5pZXplcm93eS4gIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgbm90IHZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzNQorbXNnaWQgIlJlc2l6ZSBAaSBub3QgdmFsaWQuICAiCittc2dzdHIgImktd8SZemXFgiB6bWlhbnkgcm96bWlhcnUgKHJlc2l6ZSkgbmllcHJhd2lkxYJvd3kuICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0MAorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKyJDemFzIG9zdGF0bmllZ28gbW9udG93YW5pYSBAU3UgKCV0LFxuIgorIlx0dGVyYXogPSAlVCkgamVzdCB3IHByenlzesWCb8WbY2kuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNDUKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisiQ3phcyBvc3RhdG5pZWdvIHphcGlzdSBAU3UgKCV0LFxuIgorIlx0dGVyYXogPSAlVCkgamVzdCB3IHByenlzesWCb8WbY2kuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBzaG91bGQgYmUgJVguICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgQHMgJVguICAiCittc2dzdHIgIlBvZHBvd2llZMW6IEBTdSBkbGEgemV3bsSZdHJ6bmVnbyBzdXBlcmJsb2t1IHBvd2lubmEgYnnEhyAlWC4gIgorCisjLiBALWV4cGFuZGVkOiBBZGRpbmcgZGlyaGFzaCBoaW50IHRvIGZpbGVzeXN0ZW0uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1NAorbXNnaWQgIiIKKyJBZGRpbmcgZGlyaGFzaCBoaW50IHRvIEBmLlxuIgorIlxuIgorbXNnc3RyICIiCisiRG9kYXdhbmllIHBvZHBvd2llZHppIGRpcmhhc2ggZG8gc3lzdGVtdSBwbGlrw7N3LlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1OQorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAiCittc2dzdHIgIlN1bWEga29udHJvbG5hIGRlc2tyeXB0b3JhIGdydXB5ICVnIHRvICUwNHgsIHBvd2lubmEgd3lub3NpxIcgJTA0eS4gIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbiIKK21zZ3N0ciAiRGVza3J5cHRvciBncnVweSAlZyBvem5hY3pvbnkgamFrbyBuaWUgemFpbmljam93YW55IGJleiB6YmlvcnUgY2VjaC5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2OQorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gICIKK21zZ3N0ciAiRGVza3J5cHRvciBncnVweSAlZyBtYSBixYLEmWRuxIUgbGljemLEmSBuaWUgdcW8eXdhbnljaCBpLXfEmXrFgsOzdyAlYi4gIgorCisjLiBALWV4cGFuZGVkOiBMYXN0IGdyb3VwIGJsb2NrIGJpdG1hcCB1bmluaXRpYWxpemVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3NAorbXNnaWQgIkxhc3QgQGcgQGIgQEIgdW5pbml0aWFsaXplZC4gICIKK21zZ3N0ciAiQEIgQGJ1IG9zdGF0bmllaiBncnVweSBuaWV6YWluaWNqb3dhbmEuICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB0cmFuc2FjdGlvbiAlaSB3YXMgY29ycnVwdCwgcmVwbGF5IHdhcyBhYm9ydGVkLlxuIgorbXNnc3RyICJUcmFuc2FrY2phICVpIGtyb25pa2kgYnnFgmEgdXN6a29kem9uYSwgb2R0d2FyemFuaWUgcHJ6ZXJ3YW5vLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4MworbXNnaWQgIlRoZSB0ZXN0X2ZzIGZsYWcgaXMgc2V0IChhbmQgZXh0NCBpcyBhdmFpbGFibGUpLiAgIgorbXNnc3RyICJGbGFncyB0ZXN0X2ZzIGplc3QgdXN0YXdpb25hIChpIGV4dDQgamVzdCBkb3N0xJlwbnkpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozODgKKyMsIGZ1enp5Cittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAiCisic2V0KVxuIgorbXNnc3RyICIiCisiQ3phcyBvc3RhdG5pZWdvIG1vbnRvd2FuaWEgQFN1IGplc3QgdyBwcnp5c3rFgm/Fm2NpXG4iCisiXHQobyBtbmllaiBuacW8IGR6aWXFhCwgemFwZXduZSB6IHBvd29kdSB6xYJlZ28gdXN0YXdpZW5pYSB6ZWdhcmEgc3ByesSZdG93ZWdvKSAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzk0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldClcbiIKK21zZ3N0ciAiIgorIkN6YXMgb3N0YXRuaWVnbyB6YXBpc3UgQFN1IGplc3QgdyBwcnp5c3rFgm/Fm2NpXG4iCisiXHQobyBtbmllaiBuacW8IGR6aWXFhCwgemFwZXduZSB6IHBvd29kdSB6xYJlZ28gdXN0YXdpZW5pYSB6ZWdhcmEgc3ByesSZdG93ZWdvKSAgIgorCisjLiBALWV4cGFuZGVkOiBPbmUgb3IgbW9yZSBibG9jayBncm91cCBkZXNjcmlwdG9yIGNoZWNrc3VtcyBhcmUgaW52YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDAKK21zZ2lkICJPbmUgb3IgbW9yZSBAYiBAZyBkZXNjcmlwdG9yIGNoZWNrc3VtcyBhcmUgaW52YWxpZC4gICIKK21zZ3N0ciAiSmVkZW4gbHViIHdpxJljZWogZGVza3J5cHRvcsOzdyBncnVwIGJsb2vDs3cgamVzdCBixYLEmWRueWNoLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBpbm9kZXMgY291bnQgdG8gJWogKHdhcyAlaSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDUKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGlzIGNvdW50IHRvICVqICh3YXMgJWkpXG4iCittc2dzdHIgIlVzdGF3aWFuaWUgbGljemJ5IHdvbG55Y2ggaS13xJl6xYLDs3cgbmEgJWogKGJ5xYJvICVpKVxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgYmxvY2tzIGNvdW50IHRvICVjICh3YXMgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDEwCittc2dpZCAiU2V0dGluZyBmcmVlIEBicyBjb3VudCB0byAlYyAod2FzICViKVxuIgorbXNnc3RyICJVc3Rhd2lhbmllIGxpY3pieSB3b2xueWNoIEBiw7N3IG5hICVjIChiecWCbyAlYilcbiIKKworIy4gQC1leHBhbmRlZDogTWFraW5nIHF1b3RhIGlub2RlICVpICglUSkgaGlkZGVuLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxNQorbXNnaWQgIk1ha2luZyBAcSBAaSAlaSAoJVEpIGhpZGRlbi5cbiIKK21zZ3N0ciAiWm1pYW5hIGktd8SZesWCYSBAccOzdyBuYSB1a3J5dHkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyMAorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gICIKK21zZ3N0ciAiQFMgbWEgYsWCxJlkbnkgYmxvayBNTVAuICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDI1Cittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgIgorbXNnc3RyICJAUyBtYSBixYLEmWRuxIUgbGljemLEmSBtYWdpY3puxIUgTU1QLiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19vcGVuMjogJW1cbiIKK21zZ3N0ciAiZXh0MmZzX29wZW4yOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfY2hlY2tfZGVzYzogJW1cbiIKK21zZ3N0ciAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgNjRiaXQgZmlsZXN5c3RlbXMgbmVlZHMgZXh0ZW50cyB0byBhY2Nlc3MgdGhlIHdob2xlIGRpc2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQwCittc2dpZCAiQFMgNjRiaXQgZmlsZXN5c3RlbXMgbmVlZHMgZXh0ZW50cyB0byBhY2Nlc3MgdGhlIHdob2xlIGRpc2suICAiCittc2dzdHIgIiIKKyJAUyA2NC1iaXRvd3ljaCBzeXN0ZW3Ds3cgcGxpa8OzdyB3eW1hZ2EgZWtzdGVudMOzdyBkbyBkb3N0xJlwdSBkbyBjYcWCZWdvIGR5c2t1LiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQ1Cittc2dpZCAiRmlyc3RfbWV0YV9iZyBpcyB0b28gYmlnLiAgKCVOLCBtYXggdmFsdWUgJWcpLiAgIgorbXNnc3RyICJGaXJzdF9tZXRhX2JnIGplc3QgemJ5dCBkdcW8ZSAoJU4sIHdhcnRvxZvEhyBtYWtzeW1hbG5hICVnKS4gIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NTIKK21zZ2lkICJQYXNzIDE6IENoZWNraW5nIEBpcywgQGJzLCBhbmQgc2l6ZXNcbiIKK21zZ3N0ciAiUHJ6ZWJpZWcgMTogU3ByYXdkemFuaWUgaS13xJl6xYLDs3csIEBiw7N3IGkgcm96bWlhcsOzd1xuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NTYKK21zZ2lkICJAciBpcyBub3QgYSBAZC4gICIKK21zZ3N0ciAiQHIgbmllIGplc3QgQGRpZW0uICIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDYxCittc2dpZCAiQHIgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgIgorbXNnc3RyICJAciBtYSB1c3Rhd2lvbnkgZHRpbWUgKHphcGV3bmUgcHJ6ZXogc3RhcnkgbWtlMmZzKS4gIgorCisjLiBALWV4cGFuZGVkOiBSZXNlcnZlZCBpbm9kZSAlaSAoJVEpIGhhcyBpbnZhbGlkIG1vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDY2Cittc2dpZCAiUmVzZXJ2ZWQgQGkgJWkgKCVRKSBoYXMgQG4gbW9kZS4gICIKK21zZ3N0ciAiWmFyZXplcndvd2FueSBAaSAlaSAoJVEpIG1hIGLFgsSZZG5lIHVwcmF3bmllbmlhLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGRlbGV0ZWQgaW5vZGUgJWkgaGFzIHplcm8gZHRpbWUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBEIEBpICVpIGhhcyB6ZXJvIGR0aW1lLiAgIgorbXNnc3RyICJARCBAaSAlaSBtYSB6ZXJvd3kgZHRpbWUuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gICIKK21zZ3N0ciAiQGkgJWkgamVzdCB1xbx5d2FueSwgYWxlIG1hIHVzdGF3aW9ueSBkdGltZS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhIHplcm8tbGVuZ3RoIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgYSBAeiBAZC4gICIKK21zZ3N0ciAiQGkgJWkgamVzdCBAZGllbSBAei4gIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4NgorbXNnaWQgIkBnICVnJ3MgQGIgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIkBCIEBiw7N3IGdydXB5ICVnIHcgJWIgamVzdCB3IGtvbmZsaWtjaWUgeiBpbm55bSBAYmllbS5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTEKK21zZ2lkICJAZyAlZydzIEBpIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICJAQiBpLXfEmXrFgsOzdyBncnVweSAlZyB3ICViIGplc3QgdyBrb25mbGlrY2llIHogaW5ueW0gQGJpZW0uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgdGFibGUgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTYKK21zZ2lkICJAZyAlZydzIEBpIHRhYmxlIGF0ICViIEBDLlxuIgorbXNnc3RyICJ0YWJsaWNhIGktd8SZesWCw7N3IGdydXB5ICVnIHcgJWIgamVzdCB3IGtvbmZsaWtjaWUgeiBpbm55bSBAYmllbS5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgKCViKSBpcyBiYWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTAxCittc2dpZCAiQGcgJWcncyBAYiBAQiAoJWIpIGlzIGJhZC4gICIKK21zZ3N0ciAiQEIgQGLDs3cgZ3J1cHkgJWcgKCViKSBqZXN0IGLFgsSZZG5hLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwNgorbXNnaWQgIkBnICVnJ3MgQGkgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIkBCIGktd8SZesWCw7N3IGdydXB5ICVnICglYikgamVzdCBixYLEmWRuYS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9zaXplIGlzICVJcywgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxMQorbXNnaWQgIkBpICVpLCBpX3NpemUgaXMgJUlzLCBAcyAlTi4gICIKK21zZ3N0ciAiQGkgJWksIGlfc2l6ZSB3eW5vc2kgJUlzLCBAcyAlTi4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9ibG9ja3MgaXMgJUliLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE2Cittc2dpZCAiQGkgJWksIGlfQGJzIGlzICVJYiwgQHMgJU4uICAiCittc2dzdHIgIkBpICVpLCBpX2Jsb2NrcyB3eW5vc2kgJUliLCBAcyAlTi4gIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIxCittc2dpZCAiQEkgJUIgKCViKSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiQEkgJUIgKCViKSB3IGktd8SZxbpsZSAlaS4gIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIG92ZXJsYXBzIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI2Cittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiJUIgKCViKSBuYWvFgmFkYSBzacSZIG5hIG1ldGFkYW5lIHN5c3RlbXUgcGxpa8OzdyB3IGktd8SZxbpsZSAlaS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIkBpICVpIG1hIG5pZWRvcHVzemN6YWxuZSBAYmkuICIKKworIy4gQC1leHBhbmRlZDogVG9vIG1hbnkgaWxsZWdhbCBibG9ja3MgaW4gaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGlsbGVnYWwgQGJzIGluIEBpICVpLlxuIgorbXNnc3RyICJaYSBkdcW8byBuaWVkb3B1c3pjemFsbnljaCBAYsOzdyB3IGktd8SZxbpsZSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGJhZCBibG9jayBpbm9kZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDEKK21zZ2lkICJASSAlQiAoJWIpIGluIGJhZCBAYiBAaS4gICIKK21zZ3N0ciAiQEkgJUIgKCViKSB3IGktd8SZxbpsZSB3YWRsaXd5Y2ggQGLDs3cuICIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0NgorbXNnaWQgIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiSS13xJl6ZcWCIHdhZGxpd3ljaCBAYsOzdyBtYSBuaWVkb3B1c3pjemFsbmUgQGJpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBvciBiYWQgYmxvY2sgaW4gdXNlIVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1MQorbXNnaWQgIkR1cGxpY2F0ZSBvciBiYWQgQGIgaW4gdXNlIVxuIgorbXNnc3RyICJQb2R3w7NqbnkgbHViIHdhZGxpd3kgQGIgamVzdCB1xbx5d2FueSFcbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrICViIHVzZWQgYXMgYmFkIGJsb2NrIGlub2RlIGluZGlyZWN0IGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1NgorbXNnaWQgIkJhZCBAYiAlYiB1c2VkIGFzIGJhZCBAYiBAaSBpbmRpcmVjdCBAYi4gICIKK21zZ3N0ciAiIgorIldhZGxpd3kgQGIgJWIgamVzdCB1xbx5d2FueSBqYWtvIG5pZWJpZXpwb8WbcmVkbmkgQGIgaS13xJnFusWCYSB6IHdhZGxpd3ltIEBiaWVtLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuCisjLiBALWV4cGFuZGVkOiBzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpbiB0aGUgZmlsZXN5c3RlbS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjEKK21zZ2lkICIiCisiXG4iCisiVGhlIGJhZCBAYiBAaSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbiIKKyJzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuIgorImluIHRoZSBAZi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkktd8SZemXFgiB6IHdhZGxpd3ltIEBiaWVtIHpvc3RhxYIgcHJhd2RvcG9kb2JuaWUgdXN6a29kem9ueS5cbiIKKyJQcmF3ZG9wb2RvYm5pZSBuYWxlxbxhxYJvYnkgdGVyYXogemF0cnp5bWHEhyBpIHVydWNob21pxIcgZTJmc2NrIC1jXG4iCisiYWJ5IHByemVzenVrYcSHIEBmIHBvZCBrxIV0ZW0gd2FkbGl3eWNoIGJsb2vDs3cuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBJZiB0aGUgYmxvY2sgaXMgcmVhbGx5IGJhZCwgdGhlIGZpbGVzeXN0ZW0gY2FuIG5vdCBiZSBmaXhlZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjgKK21zZ2lkICIiCisiXG4iCisiSWYgdGhlIEBiIGlzIHJlYWxseSBiYWQsIHRoZSBAZiBjYW4gbm90IGJlIGZpeGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiSmXFvGVsaSBAYiBqZXN0IG5hcHJhd2TEmSB3YWRsaXd5LCBAZiBuaWUgbW/FvGUgYnnEhyBuYXByYXdpb255LlxuIgorCisjLiBALWV4cGFuZGVkOiBZb3UgY2FuIHJlbW92ZSB0aGlzIGJsb2NrIGZyb20gdGhlIGJhZCBibG9jayBsaXN0IGFuZCBob3BlXG4KKyMuIEAtZXhwYW5kZWQ6IHRoYXQgdGhlIGJsb2NrIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTczCittc2dpZCAiIgorIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKyJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJNb8W8bmEgd3ljennFm2NpxIcgdGVuIEBiIHogbGlzdHkgd2FkbGl3eWNoIEBiw7N3IGkgbWllxIcgbmFkemllasSZLFxuIgorIsW8ZSBAYiBqZXN0IG5hcHJhd2TEmSBkb2JyeS4gQWxlIG5pZSBtYSB0YWtpZWogZ3dhcmFuY2ppLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgcHJpbWFyeSBzdXBlcmJsb2NrICglYikgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3OQorbXNnaWQgIlRoZSBwcmltYXJ5IEBTICglYikgaXMgb24gdGhlIGJhZCBAYiBsaXN0LlxuIgorbXNnc3RyICJHxYLDs3dueSBAUyAoJWIpIGplc3QgbmEgbGnFm2NpZSB3YWRsaXd5Y2ggQGLDs3cuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJsb2NrICViIGluIHRoZSBwcmltYXJ5IGdyb3VwIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4NAorbXNnaWQgIkJsb2NrICViIGluIHRoZSBwcmltYXJ5IEBnIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgQGIgbGlzdFxuIgorbXNnc3RyICJCbG9rICViIHogZGVza3J5cHRvcsOzdyBnxYLDs3duZWogZ3J1cHkgamVzdCBuYSBsacWbY2llIHdhZGxpd3ljaCBAYsOzd1xuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIHN1cGVyYmxvY2sgKCViKSBpcyBiYWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkwCittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBAUyAoJWIpIGlzIGJhZC5cbiIKK21zZ3N0ciAiVXdhZ2E6IHcgZ3J1cGllICVnIEBTICglYikgamVzdCB3YWRsaXd5LlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIGdyb3VwIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBibG9jayAoJWIpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5NQorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgQGcgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIEBiICglYikuXG4iCittc2dzdHIgIlV3YWdhOiBrb3BpYSBkZXNrcnlwdG9yw7N3IGdydXB5ICVnIG1hIGLFgsSZZG55IEBiICglYikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFByb2dyYW1taW5nIGVycm9yPyAgYmxvY2sgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9ibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDEKK21zZ2lkICJQcm9ncmFtbWluZyBlcnJvcj8gIEBiICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfQGIuXG4iCittc2dzdHIgIkLFgsSFZCBwcm9ncmFtdT8gQGIgIyViIHV6bmFueSBiZXogcG93b2R1IHcgcHJvY2Vzc19iYWRfYmxvY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgJU4gY29udGlndW91cyBibG9jayhzKSBpbiBibG9jayBncm91cCAlZyBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjA3Cittc2dpZCAiQEEgJU4gY29udGlndW91cyBAYihzKSBpbiBAYiBAZyAlZyBmb3IgJXM6ICVtXG4iCittc2dzdHIgIkBBICVOIGNpxIVnxYJ5Y2ggQGLDs3cgdyBncnVwaWUgQGLDs3cgJWcgZGxhICVzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAYiBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbiIKK21zZ3N0ciAiQEEgYnVmb3JhIEBiw7N3IGRvIHByemVub3N6ZW5pYSAlc1xuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxNworbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4iCittc2dzdHIgIlByemVub3N6ZW5pZSB3IGdydXBpZSAlZyAlcyB6ICViIGRvICVjLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgdG8gJWMuLi5cbiIKK21zZ3N0ciAiUHJ6ZW5vc3plbmllIHcgZ3J1cGllICVnICVzIGRvICVjLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrICViIG9mICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyNworbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIEBiICViIG9mICVzOiAlbVxuIgorbXNnc3RyICJVd2FnYTogbmllIG1vxbxuYSBvZGN6eXRhxIcgQGJ1ICViIHogJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBibG9jayAlYiBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMyCittc2dpZCAiV2FybmluZzogY291bGQgbm90IHdyaXRlIEBiICViIGZvciAlczogJW1cbiIKK21zZ3N0ciAiVXdhZ2E6IG5pZSBtb8W8bmEgemFwaXNhxIcgQGJ1ICViIGRvICVzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzNyBlMmZzY2svcHJvYmxlbS5jOjE1MDEKK21zZ2lkICJAQSBAaSBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICJAQSBiaXRtYXB5IGktd8SZesWCw7N3ICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQyCittc2dpZCAiQEEgQGIgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiQEEgYml0bWFweSBpLXfEmXrFgsOzdyAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbiIKK21zZ3N0ciAiQEEgaW5mb3JtYWNqaSBvIGxpY3puaWt1IGRvd2nEhXphxYQgKGljb3VudCk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZGlyZWN0b3J5IGJsb2NrIGFycmF5OiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAZCBAYiBhcnJheTogJW1cbiIKK21zZ3N0ciAiQEEgdGFibGljeSBAZGNoIEBiw7N3OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIHByemVzenVraXdhbmlhIGktd8SZesWCw7N3ICglaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyBpdGVyYWNqaSBwbyBAYmFjaCB3IGktd8SZxbpsZSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBpbm9kZSBjb3VudCBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGNvdW50PSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjcKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBpIGNvdW50IGluZm9ybWF0aW9uIChAaT0laSwgY291bnQ9JU4pOiAlbVxuIgorbXNnc3RyICIiCisiQsWCxIVkIHBvZGN6YXMgemFwaXN1IGluZm9ybWFjamkgbyBsaWN6YmllIGktd8SZesWCw7N3IChAaT0laSwgbGljemJhPSVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBkaXJlY3RvcnkgYmxvY2sgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBibG9jaz0lYiwgbnVtPSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzIKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBkIEBiIGluZm9ybWF0aW9uIChAaT0laSwgQGI9JWIsIG51bT0lTik6ICVtXG4iCittc2dzdHIgIiIKKyJCxYLEhWQgcG9kY3phcyB6YXBpc3UgaW5mb3JtYWNqaSBvIEBkY2ggQGJhY2ggKEBpPSVpLCBAYj0lYiwgbGljemJhPSVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgb2Rjenl0dSBpLXfEmXrFgmEgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAiCittc2dzdHIgIkBpICVpIG1hIHVzdGF3aW9uxIUgZmxhZ8SZIGltYWdpYy4gIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoaW5vZGUgJWkpIGhhcyBpbW11dGFibGVcbgorIy4gQC1leHBhbmRlZDogb3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTcGVjaWFsIChAdi9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChAaSAlaSkgaGFzIGltbXV0YWJsZVxuIgorIm9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgIgorbXNnc3RyICIiCisiU3BlY2phbG55IHBsaWsgKEB2L2duaWF6ZG8vcG90b2svZG93acSFemFuaWUpIChAaSAlaSkgbWEgdXN0YXdpb27EhVxuIgorImZsYWfEmSBuaWVuYXJ1c3phbG5vxZtjaSAoaW1tdXRhYmxlKSBsdWIgZG9waXN5d2FuaWEgKGFwcGVuZC1vbmx5KS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgY29tcHJlc3Npb24gZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGNvbXByZXNzaW9uIHN1cHBvcnQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBAY2lvbiBmbGFnIHNldCBvbiBAZiB3aXRob3V0IEBjaW9uIHN1cHBvcnQuICAiCittc2dzdHIgIiIKKyJAaSAlaSBtYSB1c3Rhd2lvbsSFIGZsYWfEmSBrb21wcmVzamkgbmEgc3lzdGVtaWUgcGxpa8OzdyBiZXogb2JzxYJ1Z2lcbiIKKyJrb21wcmVzamkuICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvKSBpbm9kZSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8pIEBpICVpIGhhcyBub24temVybyBzaXplLiAgIgorbXNnc3RyICJTcGVjamFsbnkgKEB2L2duaWF6ZG8vcG90b2svZG93acSFemFuaWUpIEBpICVpIG1hIG5pZXplcm93eSByb3ptaWFyLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzEyCittc2dpZCAiQGogQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkBpIGtyb25pa2kgbmllIGplc3QgdcW8eXdhbnksIGFsZSB6YXdpZXJhIGRhbmUuICIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxNworbXNnaWQgIkBqIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkBqIG5pZSBqZXN0IHp3eWvFgnltIHBsaWtpZW0uICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIHdhcyBwYXJ0IG9mIHRoZSBAbyBAaSBsaXN0LiAgIgorbXNnc3RyICJAaSAlaSBiecWCIGN6xJnFm2NpxIUgbGlzdHkgb3NpZXJvY29ueWNoIGktd8SZesWCw7N3LiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzI4Cittc2dpZCAiQGlzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gICIKK21zZ3N0ciAiWm5hbGV6aW9ubyBpLXfEmXrFgnksIGt0w7NyZSBiecWCeSBjesSZxZtjacSFIHVzemtvZHpvbmVqIGxpc3R5IHNpZXJvdC4gIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjczMworbXNnaWQgIkBBIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuIgorbXNnc3RyICJAQSBzdHJ1a3R1cnkgcmVmY291bnQgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgZm9yIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjczOAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgZm9yIEBpICVpLiAgIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyBvZGN6eXR1IEBidSByb3pzemVyem9ueWNoIGF0cnlidXTDs3cgJWIgZGxhIGktd8SZesWCYSAlaS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBiYWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0MworbXNnaWQgIkBpICVpIGhhcyBhIGJhZCBAYSBAYiAlYi4gICIKK21zZ3N0ciAiQGkgJWkgbWEgYsWCxJlkbnkgQGIgcm96c3plcnpvbnljaCBhdHJ5YnV0w7N3ICViLiAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQ4Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyBvZGN6eXR1IEBidSByb3pzemVyem9ueWNoIGF0cnlidXTDs3cgJWIgKCVtKS4gIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc1MworbXNnaWQgIkBhIEBiICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIEBzICVOLiAgIgorbXNnc3RyICJAYiByb3pzemVyem9ueWNoIGF0cnlidXTDs3cgJWIgbWEgbGljemLEmSBvZG5pZXNpZcWEICVyLCBwb3dpbm5vIGJ5xIcgJU4uICIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTgKK21zZ2lkICJFcnJvciB3cml0aW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIHphcGlzdSBAYnUgcm96c3plcnpvbnljaCBhdHJ5YnV0w7N3ICViICglbSkuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyBoX2Jsb2NrcyA+IDEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzYzCittc2dpZCAiQGEgQGIgJWIgaGFzIGhfQGJzID4gMS4gICIKK21zZ3N0ciAiQGIgcm96c3plcnpvbnljaCBhdHJ5YnV0w7N3ICViIG1hIGhfYmxvY2tzID4gMS4gIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjgKK21zZ2lkICJAQSBAYSBAYiAlYi4gICIKK21zZ3N0ciAiQEEgQGJ1IHJvenN6ZXJ6b255Y2ggYXRyeWJ1dMOzdyAlYi4gIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3MworbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gICIKK21zZ3N0ciAiIgorIkBiIHJvenN6ZXJ6b255Y2ggYXRyeWJ1dMOzdyAlYiBqZXN0IHVzemtvZHpvbnkgKGtvbGl6amEgcHJ6eWR6aWVsYW5pYSkuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgbmFtZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzc4Cittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gbmFtZSkuICAiCittc2dzdHIgIkBiIHJvenN6ZXJ6b255Y2ggYXRyeWJ1dMOzdyAlYiBqZXN0IHVzemtvZHpvbnkgKGLFgsSZZG5hIG5hendhKS4gIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCB2YWx1ZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzgzCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gdmFsdWUpLiAgIgorbXNnc3RyICJAYiByb3pzemVyem9ueWNoIGF0cnlidXTDs3cgJWIgamVzdCB1c3prb2R6b255IChixYLEmWRuYSB3YXJ0b8WbxIcpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIHRvbyBiaWcuICAiCittc2dzdHIgIkBpICVpIGplc3QgemJ5dCBkdcW8eS4gIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIGNhdXNlcyBkaXJlY3RvcnkgdG8gYmUgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3OTIKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBAZCB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIHBvd29kdWplLCDFvGUgQGQgamVzdCB6Ynl0IGR1xbx5LiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk3Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgZmlsZSB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIHBvd29kdWplLCDFvGUgcGxpayBqZXN0IHpieXQgZHXFvHkuICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MDIKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBzeW1saW5rIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikgcG93b2R1amUsIMW8ZSBkb3dpxIV6YW5pZSBqZXN0IHpieXQgZHXFvGUuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuIgorbXNnc3RyICIiCisiQGkgJWkgbWEgdXN0YXdpb27EhSBmbGFnxJkgSU5ERVhfRkwgbmEgc3lzdGVtaWUgcGxpa8OzdyBiZXogb2JzxYJ1Z2kgaHRyZWUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIgorbXNnc3RyICJAaSAlaSBtYSB1c3Rhd2lvbsSFIGZsYWfEmSBJTkRFWF9GTCwgYWxlIG5pZSBqZXN0IEBkaWVtLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgcm9vdCBub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxNworIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSBoYXMgYW4gQG4gcm9vdCBub2RlLlxuIgorbXNnc3RyICJAaCAlaSBtYSBixYLEmWRueSBnxYLDs3dueSB3xJl6ZcWCLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIyCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIkBoICVpIG1hIG5pZSBvYnPFgnVnaXdhbsSFIHdlcnNqxJkgaGFzemEgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuIgorbXNnc3RyICJAaCAlaSB1xbx5d2Egbmlla29tcGF0eWJpbG5laiBmbGFnaSBnxYLDs3duZWdvIHfEmXrFgmEgaHRyZWUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzMgorbXNnaWQgIkBoICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4iCittc2dzdHIgIkBoICVpIG1hIHpieXQgZHXFvMSFIGfFgsSZYm9rb8WbxIcgZHJ6ZXdhICglTilcbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBhbiBpbmRpcmVjdCBibG9jayAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBtZXRhZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzcKK21zZ2lkICIiCisiQmFkIEBiIEBpIGhhcyBhbiBpbmRpcmVjdCBAYiAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbiIKKyJAZiBtZXRhZGF0YS4gICIKK21zZ3N0ciAiIgorIkktd8SZemXFgiB6IHdhZGxpd3ltIEBiaWVtIG1hIG5pZWJlenBvxZtyZWRuaSBAYiAoJWIpIGLEmWTEhWN5XG4iCisidyBrb25mbGlrY2llIHogbWV0YWRhbnltaSBzeXN0ZW11IHBsaWvDs3cuICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIKK21zZ3N0ciAiVHdvcnplbmllL29kdHdhcnphbmllIGktd8SZesWCYSB6bWlhbnkgcm96bWlhcnUgbmllIHBvd2lvZMWCbyBzacSZOiAlbS4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGV4dHJhIHNpemUgKCVJUykgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0OAorbXNnaWQgIkBpICVpIGhhcyBhIGV4dHJhIHNpemUgKCVJUykgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiQGkgJWkgbWEgZG9kYXRrb3d5IHJvem1pYXIgKCVJUyksIGNvIGplc3QgYsWCxJlkbmVcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUzCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkBhIHcgaS13xJnFumxlICVpIG1hIG5hbWVsZW4gKCVOKSwgY28gamVzdCBixYLEmWRuZVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1OAorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkBhIHcgaS13xJnFumxlICVpIG1hIHByemVzdW5pxJljaWUgd2FydG/Fm2NpICglTiksIGNvIGplc3QgYsWCxJlkbmVcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIGJsb2NrICglTikgd2hpY2ggaXMgaW52YWxpZCAobXVzdCBiZSAwKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIEBiICglTikgd2hpY2ggaXMgQG4gKG11c3QgYmUgMClcbiIKK21zZ3N0ciAiQGEgdyBpLXfEmcW6bGUgJWkgbWEgQGIgd2FydG/Fm2NpICglTiksIGNvIGplc3QgYsWCxJlkbmUgKG11c2kgYnnEhyAwKVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjgKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiQGEgdyBpLXfEmcW6bGUgJWkgbWEgcm96bWlhciB3YXJ0b8WbY2kgKCVOKSwgY28gamVzdCBixYLEmWRuZVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzMKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiQGEgdyBpLXfEmcW6bGUgJWkgbWEgaGFzaCAoJU4pLCBjbyBqZXN0IGLFgsSZZG5lXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzgKK21zZ2lkICJAaSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4iCittc2dzdHIgIkBpICVpIHRvICVJdCwgYWxlIHd5Z2zEhWRhIGpha2J5IHcgcnplY3p5d2lzdG/Fm2NpIGJ5xYIga2F0YWxvZ2llbS5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIGV4dGVudCB0cmVlIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgQHggdHJlZSBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgY3p5dGFuaWEgcG8gQHhhY2ggdyBpLXfEmcW6bGUgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZhaWxlZCB0byBpdGVyYXRlIGV4dGVudHMgaW4gaW5vZGUgJWlcbgorIy4gQC1leHBhbmRlZDogXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODg4Cittc2dpZCAiIgorIkZhaWxlZCB0byBpdGVyYXRlIGV4dGVudHMgaW4gQGkgJWlcbiIKKyJcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKK21zZ3N0ciAiIgorIk5pZSB1ZGHFgm8gc2nEmSBwcnplasWbxIcgZWtzdGVudMOzdyB3IGktd8SZxbpsZSAlaVxuIgorIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgaW52YWxpZCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5NAorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgQG4gcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIkBpICVpIG1hIEBuIGVrc3RlbnRcbiIKKyJcdChAYiBsb2dpY3pueSAlYywgQG4gQGIgZml6eWN6bnkgJWIsIGTFgnVnb8WbxIcgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgaW52YWxpZCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk5Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgQG4gbGVuICVOKVxuIgorbXNnc3RyICIiCisiQGkgJWkgbWEgYsWCxJlkbnkgZWtzdGVudFxuIgorIlx0KEBiIGxvZ2ljem55ICVjLCBAYiBmaXp5Y3pueSAlYiwgYsWCxJlkbmEgZMWCdWdvxZvEhyAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKyJAaSAlaSBtYSB1c3Rhd2lvbsSFIGZsYWfEmSBFWFRFTlRTX0ZMIG5hIHN5c3RlbWllIHBsaWvDs3cgYmV6IG9ic8WCdWdpICIKKyJla3N0ZW50w7N3LlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgc3VwZXJibG9jayBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgQFMgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbiIKK21zZ3N0ciAiIgorIkBpICVpIG1hIGZvcm1hdCB6IGVrc3RlbnRhbWksIGFsZSB3IHN1cGVyYmxva3UgYnJha3VqZSB3xYJhxZtjaXdvxZtjaSBFWFRFTlRTXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuIgorbXNnc3RyICJAaSAlaSBuaWUgbWEgZmxhZ2kgRVhURU5UX0ZMLCBhbGUgamVzdCB3IGZvcm1hY2llIHogZWtzdGVudGFtaVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0IHN5bWxpbmsgJWkgaGFzIEVYVEVOVF9GTCBzZXQuICAiCittc2dzdHIgIlN6eWJraWUgZG93acSFemFuaWUgc3ltYm9saWN6bmUgJWkgbWEgdXN0YXdpb27EhSBmbGFnxJkgRVhURU5UX0ZMLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI0Cittc2dpZCAiIgorIkBpICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJAaSAlaSBtYSBla3N0ZW50eSBzcG96YSBrb2xlam5vxZtjaVxuIgorIlx0KEBiIEBiIGxvZ2ljem55ICVjLCBAYiBmaXp5Y3pueSAlYiwgZMWCdWdvxZvEhyAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjgKK21zZ2lkICJAaSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuIgorbXNnc3RyICJAaSAlaSBtYSBixYLEmWRueSB3xJl6ZcWCIGVrc3RlbnR1IChibGsgJWIsIGxibGsgJWMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBAYiBAQjogJW1cbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgcHJ6ZWtzenRhxYJjYW5pYSBiaXRtYXB5IEBiw7N3IHBvZGtsYXN0cmE6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTM4Cittc2dpZCAiQHEgQGkgaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiQGkgQHHDs3cgbmllIGplc3Qgend5a8WCeW0gcGxpa2llbS4gIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDMKK21zZ2lkICJAcSBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiQGkgQHHDs3cgbmllIGplc3QgdcW8eXdhbnksIGFsZSB6YXdpZXJhIGRhbmUuICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDgKK21zZ2lkICJAcSBAaSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgIgorbXNnc3RyICJAaSBAccOzdyBqZXN0IHdpZG9jem55IGRsYSB1xbx5dGtvd25pa2EuICIKKworIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBsb29rcyBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1MworbXNnaWQgIlRoZSBiYWQgQGIgQGkgbG9va3MgQG4uICAiCittc2dzdHIgIkktd8SZemXFgiB3YWRsaXd5Y2ggQGLDs3cgd3lnbMSFZGEgbmEgYsWCxJlkbnkuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1OAorbXNnaWQgIiIKKyJAaSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIpXG4iCittc2dzdHIgIiIKKyJAaSAlaSBtYSBla3N0ZW50IHplcm93ZWogZMWCdWdvxZtjaVxuIgorIlx0KEBuIEBiIGxvZ2ljem55ICVjLCBAYiBmaXp5Y3pueSAlYiwgZMWCdWdvxZvEhyAlTilcbiIKKworIy4gQC1leHBhbmRlZDogSW50ZXJpb3IgZXh0ZW50IG5vZGUgbGV2ZWwgJU4gb2YgaW5vZGUgJWk6XG4KKyMuIEAtZXhwYW5kZWQ6IExvZ2ljYWwgc3RhcnQgJWIgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAlYyBhdCBuZXh0IGxldmVsLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2NQorbXNnaWQgIiIKKyJJbnRlcmlvciBAeCBub2RlIGxldmVsICVOIG9mIEBpICVpOlxuIgorIkxvZ2ljYWwgc3RhcnQgJWIgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAlYyBhdCBuZXh0IGxldmVsLiAgIgorbXNnc3RyICIiCisiUG96aW9tIHdld27EmXRyem5lZ28gd8SZesWCYSBla3N0ZW50dSAlTiBpLXfEmXrFgmEgJWk6XG4iCisiUG9jesSFdGVrIGxvZ2ljem55ICViIG5pZSB6Z2FkemEgc2nEmSB6IHBvY3rEhXRraWVtIGxvZ2ljem55bSAlYyBrb2xlam5lZ28gIgorInBvemlvbXUuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTcxCittc2dpZCAiIgorIkBpICVpLCBlbmQgb2YgZXh0ZW50IGV4Y2VlZHMgYWxsb3dlZCB2YWx1ZVxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJAaSAlaSwga29uaWVjIGVrc3RlbnR1IHByemVrcmFjemEgZG96d29sb27EhSB3YXJ0b8WbxIdcbiIKKyJcdChAYiBsb2dpY3pueSAlYywgQGIgZml6eWN6bnkgJWIsIGTFgnVnb8WbxIcgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBibG9jayAlYiBzaG91bGQgYmUgYXQgYmxvY2sgJWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTc3Cittc2dpZCAiQGQgQGkgJWkgQGIgJWIgc2hvdWxkIGJlIGF0IEBiICVjLiAgIgorbXNnc3RyICJEbGEgaS13xJl6xYJhIEBkdSAlaSBAYiAlYiBwb3dpbmllbiBiecSHIHByenkgQGJ1ICVjLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgZXh0ZW50IG1hcmtlZCB1bmluaXRpYWxpemVkIGF0IGJsb2NrICVjLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJAZCBAaSAlaSBoYXMgQHggbWFya2VkIHVuaW5pdGlhbGl6ZWQgYXQgQGIgJWMuICAiCittc2dzdHIgIkBpIEBkdSAlaSBtYSBAeCBvem5hY3pvbnkgamFrbyBuaWV6YWluaWNqb3dhbnkgcHJ6eSBAYnUgJWMuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbG9naWNhbCBibG9jayAlYiAocGh5c2ljYWwgYmxvY2sgJWMpIHZpb2xhdGVzIGNsdXN0ZXIgYWxsb2NhdGlvbiBydWxlcy5cbgorIy4gQC1leHBhbmRlZDogV2lsbCBmaXggaW4gcGFzcyAxQi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5ODcKK21zZ2lkICIiCisiQGkgJWkgbG9naWNhbCBAYiAlYiAocGh5c2ljYWwgQGIgJWMpIHZpb2xhdGVzIGNsdXN0ZXIgYWxsb2NhdGlvbiBydWxlcy5cbiIKKyJXaWxsIGZpeCBpbiBwYXNzIDFCLlxuIgorbXNnc3RyICIiCisiRGxhIGktd8SZesWCYSAlaSBAYiBsb2dpY3pueSAlYiAoQGIgZml6eWN6bnkgJWMpIG5hcnVzemEgemFzYWR5IHByenlkemllbGFuaWEgIgorImtsYXN0csOzdy5cbiIKKyJab3N0YW5pZSBwb3ByYXdpb255IHcgcHJ6ZWJpZWd1IDFCLlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIGJsb2NrcyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgaW5vZGUuLi5cbgorIy4gQC1leHBhbmRlZDogUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5OTQKK21zZ2lkICIiCisiXG4iCisiUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIEBicyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgQGkuLi5cbiIKKyJQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBAbSBAYnNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlVydWNoYW1pYW5pZSBkb2RhdGtvd3ljaCBwcnplYmllZ8OzdyBkbyByb3p3acSFemFuaWEgYmxva8OzdyB6YWRla2xhcm93YW55Y2hcbiIKKyJwcnpleiB3acSZY2VqIG5pxbwgamVkZW4gQGkuLi5cbiIKKyJQcnplYmllZyAxQjogUG9ub3duZSBwcnplc3p1a2l3YW5pZSBAbWNoIEBiw7N3XG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgJWk6CisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG0gQGIocykgaW4gQGkgJWk6IgorbXNnc3RyICJAbSBAYihpKSB3IGktd8SZxbpsZSAlaToiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgc3p1a2FuaWEgaS13xJl6xYJhICglaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwIChpbm9kZV9kdXBfbWFwKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBpIEBCIChAaV9kdXBfbWFwKTogJW1cbiIKK21zZ3N0ciAiQEEgYml0bWFweSBpLXfEmXrFgsOzdyAoaW5vZGVfZHVwX21hcCk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpICglcyk6ICVtXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIGl0ZXJhY2ppIHBvIEBiYWNoIHcgaS13xJnFumxlICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzMCBlMmZzY2svcHJvYmxlbS5jOjEzNDUKK21zZ2lkICJFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIEBhIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIiIKKyJCxYLEhWQgcG9kY3phcyBwb3ByYXdpYW5pYSByZWZjb3VudCBkbGEgQGJ1IHJvenN6ZXJ6b255Y2ggYXRyeWJ1dMOzdyAlYiAoQGkgIgorIiVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzNQorbXNnaWQgIlBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBAaXMgd2l0aCBAbSBAYnNcbiIKK21zZ3N0ciAiIgorIlByemViaWVnIDFDOiBQcnplc3p1a2l3YW5pZSBrYXRhbG9nw7N3IHBvZCBrxIV0ZW0gaS13xJl6xYLDs3cgeiBAbW1pIEBiYW1pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0MQorbXNnaWQgIlBhc3MgMUQ6IFJlY29uY2lsaW5nIEBtIEBic1xuIgorbXNnc3RyICJQcnplYmllZyAxRDogVXpnYWRuaWFuaWUgQG1jaCBAYsOzd1xuIgorCisjLiBALWV4cGFuZGVkOiBGaWxlICVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSkgXG4KKyMuIEAtZXhwYW5kZWQ6ICAgaGFzICVyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0NgorbXNnaWQgIiIKKyJGaWxlICVRIChAaSAjJWksIG1vZCB0aW1lICVJTSkgXG4iCisiICBoYXMgJXIgQG0gQGIocyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4iCittc2dzdHIgIiIKKyJQbGlrICVRIChAaSAjJWksIGN6YXMgbW9keWZpa2FjamkgJUlNKSBcbiIKKyIgIG1hICVyIEBtY2ggQGLDs3csIGR6aWVsb255Y2ggeiAlTiBwbGlrYW1pOlxuIgorCisjLiBALWV4cGFuZGVkOiBcdCVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDUyCittc2dpZCAiXHQlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pXG4iCittc2dzdHIgIlx0JVEgKEBpICMlaSwgY3phcyBtb2R5ZmlrYWNqaSAlSU0pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1NworbXNnaWQgIlx0PEBmIG1ldGFkYXRhPlxuIgorbXNnc3RyICJcdDxtZXRhZGFuZSBzeXN0ZW11IHBsaWvDs3c+XG4iCisKKyMuIEAtZXhwYW5kZWQ6IChUaGVyZSBhcmUgJU4gaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDYyCittc2dpZCAiIgorIihUaGVyZSBhcmUgJU4gQGlzIGNvbnRhaW5pbmcgQG0gQGJzLilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIihKZXN0ICVOIGktd8SZesWCw7N3IHphd2llcmFqxIVjeWNoIHBvZHfDs2puaWUgemFkZWtsYXJvd2FuZSBAYmkuKVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY3Cittc2dpZCAiIgorIkBtIEBicyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiUG9kd8Ozam5pZSB6YWRla2xhcm93YW5lIEBiaSBqdcW8IHByemVwaXNhbmUgbHViIHNrbG9ub3dhbmUuXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjbG9uZSBmaWxlOiAlbVxuIgorbXNnc3RyICJOaWUgbW/FvG5hIHNrbG9ub3dhxIcgcGxpa3U6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwODYKK21zZ2lkICJQYXNzIDI6IENoZWNraW5nIEBkIHN0cnVjdHVyZVxuIgorbXNnc3RyICJQcnplYmllZyAyOiBTcHJhd2R6YW5pZSBzdHJ1a3R1cnkgQGTDs3dcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBpbm9kZSBudW1iZXIgZm9yICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJAbiBAaSBudW1iZXIgZm9yICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiQsWCxJlkbnkgbnVtZXIgaS13xJl6xYJhIGRsYSAnLicgdyBpLXfEmcW6bGUgQGR1ICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbnZhbGlkIGlub2RlICM6ICVEaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDk2Cittc2dpZCAiQEUgaGFzIEBuIEBpICM6ICVEaS5cbiIKK21zZ3N0ciAiQEUgbWEgYsWCxJlkbnkgbnVtZXIgaS13xJl6xYJhOiAlRGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlICVEaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTAxCittc2dpZCAiQEUgaGFzIEBEL3VudXNlZCBAaSAlRGkuICAiCittc2dzdHIgIkBFIG1hIEBEL25pZSB1xbx5d2FueSBAaSAlRGkuICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gJy4nICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwNgorbXNnaWQgIkBFIEBMIHRvICcuJyAgIgorbXNnc3RyICJARSBATCBkbyAnLicgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHBvaW50cyB0byBpbm9kZSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTEKK21zZ2lkICJARSBwb2ludHMgdG8gQGkgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBAYi5cbiIKK21zZ3N0ciAiQEUgd3NrYXp1amUgbmEgQGkgKCVEaSkgcG/Fgm/FvG9ueSB3IHdhZGxpd3ltIEBiLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byBkaXJlY3RvcnkgJVAgKCVEaSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExNgorbXNnaWQgIkBFIEBMIHRvIEBkICVQICglRGkpLlxuIgorbXNnc3RyICJARSBATCBkbyBAZHUgJVAgKCVEaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIHRoZSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjEKK21zZ2lkICJARSBATCB0byB0aGUgQHIuXG4iCittc2dzdHIgIkBFIEBMIGRvIGfFgsOzd25lZ28ga2F0YWxvZ3UuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI2Cittc2dpZCAiQEUgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbiIKK21zZ3N0ciAiQEUgbWEgbmllZG9wdXN6Y3phbG5lIHpuYWtpIHcgbmF6d2llLlxuIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiQnJha3VqZSAnLicgdyBpLXfEmcW6bGUgQGR1ICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLi4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJCcmFrdWplICcuLicgdyBpLXfEmcW6bGUgQGR1ICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBGaXJzdCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKSBzaG91bGQgYmUgJy4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0MQorbXNnaWQgIkZpcnN0IEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpICglcCkgQHMgJy4nXG4iCittc2dzdHIgIlBpZXJ3c3p5bSBAZWVtICclRG4nIChAaT0lRGkpIHcgaS13xJnFumxlIEBkdSAlaSAoJXApIEBzICcuJ1xuIgorCisjLiBALWV4cGFuZGVkOiBTZWNvbmQgZW50cnkgJyVEbicgKGlub2RlPSVEaSkgaW4gZGlyZWN0b3J5IGlub2RlICVpIHNob3VsZCBiZSAnLi4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0NgorbXNnaWQgIlNlY29uZCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSBAcyAnLi4nXG4iCittc2dzdHIgIkRydWdpbSBAZWVtICclRG4nIChAaT0lRGkpIHcgaS13xJnFumxlIEBkdSAlaSBAcyAnLi4nXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmFkZHIgZm9yIGlub2RlICVpICglUSkgaXMgJUlGLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTUxCittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmFkZHIgQEYgJUlGLCBAcyB6ZXJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1NgorbXNnaWQgImlfZmlsZV9hY2wgQEYgJUlmLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZpbGVfYWNsIEBGICVJZiwgQHMgemVyby5cbiIKKworIy4gQC1leHBhbmRlZDogaV9kaXJfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZCwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2MQorbXNnaWQgImlfZGlyX2FjbCBARiAlSWQsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZGlyX2FjbCBARiAlSWQsIEBzIHplcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnJhZyBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2NgorbXNnaWQgImlfZnJhZyBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mcmFnIEBGICVOLCBAcyB6ZXJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZzaXplIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTcxCittc2dpZCAiaV9mc2l6ZSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mc2l6ZSBARiAlTiwgQHMgemVyby5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlICglSW0pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzYKK21zZ2lkICJAaSAlaSAoJVEpIGhhcyBAbiBtb2RlICglSW0pLlxuIgorbXNnc3RyICJAaSAlaSAoJVEpIG1hIGLFgsSZZG5lIHVwcmF3bmllbmlhICglSW0pLlxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGRpcmVjdG9yeSBjb3JydXB0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTgxCittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IEBkIGNvcnJ1cHRlZFxuIgorbXNnc3RyICJAaSBAZHUgJWksICVCLCBvZmZzZXQgJU46IEBkIHVzemtvZHpvbnlcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODYKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAiQGkgQGR1ICVpLCAlQiwgb2Zmc2V0ICVOOiBuYXp3YSBwbGlrdSB6Ynl0IGTFgnVnYVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTEKK21zZ2lkICJAZCBAaSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAiCittc2dzdHIgIkBpIEBkdSAlaSBtYSBuaWUgcHJ6eWR6aWVsb255ICVCLiAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIicuJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIkBlIEBkdSAnLicgdyBpLXfEmcW6bGUgQGR1ICVpIG5pZSBqZXN0IHpha2/FhGN6b255IHByemV6IE5VTExcbiIKKworIy4gQC1leHBhbmRlZDogJy4uJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIicuLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICJAZSBAZHUgJy4uJyB3IGktd8SZxbpsZSBAZHUgJWkgbmllIGplc3QgemFrb8WEY3pvbnkgcHJ6ZXogTlVMTFxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjA2Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBjaGFyYWN0ZXIgQHYuXG4iCittc2dzdHIgIkBpICVpICglUSkgamVzdCBASW0gQHZtIHpuYWtvd3ltLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgYmxvY2sgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTEKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIEBiIEB2LlxuIgorbXNnc3RyICJAaSAlaSAoJVEpIGplc3QgQEltIEB2bSBAYm93eW0uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgZHVwbGljYXRlICcuJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE2Cittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuJyBAZS5cbiIKK21zZ3N0ciAiQEUgamVzdCBwb3dpZWxvbnltIEBlZW0gJy4nLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLi4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjEKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4uJyBAZS5cbiIKK21zZ3N0ciAiQEUgamVzdCBwb3dpZWxvbnltIEBlZW0gJy4uJy5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMjI2IGUyZnNjay9wcm9ibGVtLmM6MTUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgZmluZCBkaXJfaW5mbyBmb3IgJWkuXG4iCittc2dzdHIgIkLFgsSFZCB3ZXduxJl0cnpueTogbmllIG1vxbxuYSB6bmFsZcW6xIcgZGlyX2luZm8gZGxhICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyByZWNfbGVuIG9mICVEciwgc2hvdWxkIGJlICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzEKK21zZ2lkICJARSBoYXMgcmVjX2xlbiBvZiAlRHIsIEBzICVOLlxuIgorbXNnc3RyICJARSBtYSByZWNfbGVuICVEciwgQHMgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IHN0cnVjdHVyZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4iCittc2dzdHIgIkBBIHN0cnVrdHVyeSBpY291bnQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGl0ZXJhdGluZyBvdmVyIGRpcmVjdG9yeSBibG9ja3M6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpdGVyYXRpbmcgb3ZlciBAZCBAYnM6ICVtXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIGl0ZXJhY2ppIHBvIEBiYWNoIEBkdTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQ2Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyBvZGN6eXR1IEBiICViIEBkdSAoQGkgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTEKK21zZ2lkICJFcnJvciB3cml0aW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIHphcGlzdSBAYiAlYiBAZHUgKEBpICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrIGZvciBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgbmV3IEBkIEBiIGZvciBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJAQSBub3dlZ28gQGJ1IEBkdSBkbGEgaS13xJl6xYJhICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRlYWxsb2NhdGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlYWxsb2NhdGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgendhbG5pYW5pYSBpLXfEmXrFgmEgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBlbnRyeSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGQgQGUgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbiIKK21zZ3N0ciAiQGUgQGR1IGRsYSAnLicgdyAlcCAoJWkpIGplc3QgZHXFvHkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBGSUZPLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNzEKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIEZJRk8uXG4iCittc2dzdHIgIkBpICVpICglUSkgamVzdCBASW0gRklGTy5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIHNvY2tldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc2Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBzb2NrZXQuXG4iCittc2dzdHIgIkBpICVpICglUSkgamVzdCBASW0gZ25pYXpkZW0uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICclRG4nIGluICVwICglaSkgdG8gJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4MQorbXNnaWQgIlNldHRpbmcgZmlsZXR5cGUgZm9yIEBFIHRvICVOLlxuIgorbXNnc3RyICJVc3Rhd2lvbm8gZmlsZXR5cGUgZGxhIEBldSAnJURuJyB3ICVwICglaSkgbmEgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgc2hvdWxkIGJlICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjg2Cittc2dpZCAiQEUgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgQHMgJU4pLlxuIgorbXNnc3RyICJARSBtYSBixYLEmWRueSBmaWxldHlwZSAoYnnFgiAlRHQsIHBvd2luaWVuIGJ5xIcgJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5MQorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIkBFIG1hIHVzdGF3aW9uZSBmaWxldHlwZS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSB6ZXJvLWxlbmd0aCBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTYKK21zZ2lkICJARSBoYXMgYSBAeiBuYW1lLlxuIgorbXNnc3RyICJARSBtYSBuYXp3xJkgemVyb3dlaiBkxYJ1Z2/Fm2NpLlxuIgorCisjLiBALWV4cGFuZGVkOiBTeW1saW5rICVRIChpbm9kZSAjJWkpIGlzIGludmFsaWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMwMQorbXNnaWQgIlN5bWxpbmsgJVEgKEBpICMlaSkgaXMgQG4uXG4iCittc2dzdHIgIkRvd2nEhXphbmllIHN5bWJvbGljem5lICVRIChAaSAjJWkpIGplc3QgYsWCxJlkbmUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDYKK21zZ2lkICJAYSBAYiBARiBAbiAoJUlmKS5cbiIKK21zZ3N0ciAiQGIgcm96c3plcnpvbnljaCBhdHJ5YnV0w7N3IGRsYSBpLXfEmXrFgmEgJWkgKCVRKSBqZXN0IGLFgsSZZG55ICglSWYpLlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGNvbnRhaW5zIGxhcmdlIGZpbGVzLCBidXQgbGFja3MgTEFSR0VfRklMRSBmbGFnIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxMQorbXNnaWQgIkBmIGNvbnRhaW5zIGxhcmdlIGZpbGVzLCBidXQgbGFja3MgTEFSR0VfRklMRSBmbGFnIGluIEBTLlxuIgorbXNnc3RyICJAZiB6YXdpZXJhIGR1xbxlIHBsaWtpLCBhbGUgYnJhayBmbGFnaSBMQVJHRV9GSUxFIHcgQFN1LlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgbm90IHJlZmVyZW5jZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzE2Cittc2dpZCAiQHAgQGggJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4iCittc2dzdHIgIkBwIGktd8SZxbpsZSBAZHUgSFRSRUUgJWQ6ICVCIG5pZSBtYSBvZHdvxYJhxYRcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzIxCittc2dpZCAiQHAgQGggJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbiIKK21zZ3N0ciAiQHAgaS13xJnFumxlIEBkdSBIVFJFRSAlZDogJUIgbWEgcG9kd8Ozam5lIG9kd2/FgmFuaWVcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI2Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbiIKK21zZ3N0ciAiQHAgaS13xJnFumxlIEBkdSBIVFJFRSAlZDogJUIgbWEgYsWCxJlkbnkgbWluaW1hbG55IGhhc3pcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMxCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbiIKK21zZ3N0ciAiQHAgaS13xJnFumxlIEBkdSBIVFJFRSAlZDogJUIgbWEgYsWCxJlkbnkgbWFrc3ltYWxueSBoYXN6XG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzNgorbXNnaWQgIkBuIEBoICVkICglcSkuICAiCittc2dzdHIgIkLFgsSZZG5lIEBoICVkICglcSkuICIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKTogYmFkIGJsb2NrIG51bWJlciAlYi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQwCittc2dpZCAiQHAgQGggJWQgKCVxKTogYmFkIEBiIG51bWJlciAlYi5cbiIKK21zZ3N0ciAiQHAgaS13xJnFumxlIEBkdSBIVFJFRSAlZCAoJXEpOiBixYLEmWRueSBudW1lciBAYnUgJWIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiByb290IG5vZGUgaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHAgQGggJWQ6IHJvb3Qgbm9kZSBpcyBAblxuIgorbXNnc3RyICJAcCBpLXfEmcW6bGUgQGR1IEhUUkVFICVkOiBnxYLDs3dueSB3xJl6ZcWCIGplc3QgYsWCxJlkbnlcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGxpbWl0ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzU1Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBsaW1pdCAoJU4pXG4iCittc2dzdHIgIkBwIGktd8SZxbpsZSBAZHUgSFRSRUUgJWQ6ICVCIG1hIGLFgsSZZG55IGxpbWl0ICglTilcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGNvdW50ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzYwCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBjb3VudCAoJU4pXG4iCittc2dzdHIgIkBwIGktd8SZxbpsZSBAZHUgSFRSRUUgJWQ6ICVCIG1hIGLFgsSZZG55IGxpY3puaWsgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2NQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbiIKK21zZ3N0ciAiQHAgaS13xJnFumxlIEBkdSBIVFJFRSAlZDogJUIgbWEgbmllIHVwb3J6xIVka293YW7EhSB0YWJsaWPEmSBoYXN6dWrEhWPEhVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgZGVwdGggKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzAKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGRlcHRoICglTilcbiIKK21zZ3N0ciAiQHAgaS13xJnFumxlIEBkdSBIVFJFRSAlZDogJUIgbWEgYsWCxJlkbsSFIGfFgsSZYm9rb8WbxIcgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgaW4gJXAgKCVpKSBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzc1Cittc2dpZCAiRHVwbGljYXRlIEBFIGZvdW5kLiAgIgorbXNnc3RyICJabmFsZXppb25vIHBvZHfDs2pueSBARS4gIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4KKyMuIEAtZXhwYW5kZWQ6IFJlbmFtZSB0byAlcworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgwCisjLCBuby1jLWZvcm1hdAorbXNnaWQgIiIKKyJARSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuIgorIlJlbmFtZSB0byAlcyIKK21zZ3N0ciAiIgorIkBFIG1hIG5pZXVuaWthbG7EhSBuYXp3xJkgcGxpa3UuXG4iCisiWm1pZW5pxIcgbmEgJXMiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBmb3VuZC5cbgorIy4gQC1leHBhbmRlZDogXHRNYXJraW5nICVwICglaSkgdG8gYmUgcmVidWlsdC5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4NQorbXNnaWQgIiIKKyJEdXBsaWNhdGUgQGUgJyVEbicgZm91bmQuXG4iCisiXHRNYXJraW5nICVwICglaSkgdG8gYmUgcmVidWlsdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlpuYWxlemlvbm8gcG9kd8Ozam55IEBlICclRG4nLlxuIgorIlx0WmF6bmFjem9ubyAlcCAoJWkpIGRvIHByemVidWRvd2FuaWEuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfYmxvY2tzX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzkwCittc2dpZCAiaV9ibG9ja3NfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfYmxvY2tzX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBVbmV4cGVjdGVkIGJsb2NrIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTUKK21zZ2lkICJVbmV4cGVjdGVkIEBiIGluIEBoICVkICglcSkuXG4iCittc2dzdHIgIk5pZW9jemVraXdhbnkgQGIgdyBpLXfEmcW6bGUgQGR1IEhUUkVFICVkICglcSlcbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBpbiBncm91cCAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk5Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgaW4gQGcgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4iCittc2dzdHIgIiIKKyJAaSAlRGkgem5hbGV6aW9ueSB3IGdydXBpZSAlZywga3TDs3JhIG1hIHVzdGF3aW9uxIUgZmxhZ8SZIF9JTk9ORV9VTklOSVQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgZm91bmQgaW4gZ3JvdXAgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwNAorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGZvdW5kIGluIEBnICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuIgorbXNnc3RyICJAaSAlRGkgem5hbGV6aW9ueSB3IGdydXBpZSAlZyBvYnN6YXJ1IG5pZSB1xbx5d2FueWNoIGktd8SZesWCw7N3LlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDA5Cittc2dpZCAiaV9maWxlX2FjbF9oaSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9maWxlX2FjbF9oaSBARiAlTiwgQHMgemVyby5cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxNgorbXNnaWQgIlBhc3MgMzogQ2hlY2tpbmcgQGQgY29ubmVjdGl2aXR5XG4iCittc2dzdHIgIlByemViaWVnIDM6IFNwcmF3ZHphbmllIMWCxIVjem5vxZtjaSBAZMOzd1xuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIG5vdCBhbGxvY2F0ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyMQorbXNnaWQgIkByIG5vdCBhbGxvY2F0ZWQuICAiCittc2dzdHIgIkByIGplc3QgbmllIHByenlkemllbG9ueS4gIgorCisjLiBALWV4cGFuZGVkOiBObyByb29tIGluIGxvc3QrZm91bmQgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjYKK21zZ2lkICJObyByb29tIGluIEBsIEBkLiAgIgorbXNnc3RyICJCcmFrIG1pZWpzY2EgdyBAZHUgQGwuICIKKworIy4gQC1leHBhbmRlZDogVW5jb25uZWN0ZWQgZGlyZWN0b3J5IGlub2RlICVpICglcClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuY29ubmVjdGVkIEBkIEBpICVpICglcClcbiIKK21zZ3N0ciAiTmllIHBvZMWCxIVjem9ueSBAaSBAZHUgJWkgKCVwKVxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBub3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzNgorbXNnaWQgIi9AbCBub3QgZm91bmQuICAiCittc2dzdHIgIk5pZSB6bmFsZXppb25vIC9AbC4gIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgc2hvdWxkIGJlICVxICglZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ0MQorbXNnaWQgIicuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBAcyAlcSAoJWQpLlxuIgorbXNnc3RyICInLi4nIHcgJVEgKCVpKSBqZXN0ICVQICglaiksIEBzICVxICglZCkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBvciBub24tZXhpc3RlbnQgL2xvc3QrZm91bmQuICBDYW5ub3QgcmVjb25uZWN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDYKK21zZ2lkICJCYWQgb3Igbm9uLWV4aXN0ZW50IC9AbC4gIENhbm5vdCByZWNvbm5lY3QuXG4iCittc2dzdHIgIkLFgsSZZG55IGx1YiBuaWUgaXN0bmllasSFY3kgL0BsLiBOaWUgbW/FvG5hIHBvZMWCxIVjennEhy5cbiIKKworIy4gQC1leHBhbmRlZDogQ291bGQgbm90IGV4cGFuZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBleHBhbmQgL0BsOiAlbVxuIgorbXNnc3RyICJOaWUgbW/FvG5hIHJvenN6ZXJ6ecSHIC9AbDogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWNvbm5lY3QgJWk6ICVtXG4iCittc2dzdHIgIk5pZSBtb8W8bmEgcG9kxYLEhWN6ecSHICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgc3p1a2FuaWEgL0BsOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Jsb2NrOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AYjogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19ibG9jazogJW0gcG9kY3phcyBwcsOzYnkgdXR3b3J6ZW5pYSBAZHUgL0BsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfaW5vZGU6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BpOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X2lub2RlOiAlbSBwb2RjemFzIHByw7NieSB1dHdvcnplbmlhIEBkdSAvQGxcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfZGlyX0BiOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgQGQgQGJcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIHBvZGN6YXMgdHdvcnplbmlhIG5vd2VnbyBAYnUgQGR1XG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc193cml0ZV9kaXJfYmxvY2s6ICVtIHdoaWxlIHdyaXRpbmcgdGhlIGRpcmVjdG9yeSBibG9jayBmb3IgL2xvc3QrZm91bmRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc193cml0ZV9kaXJfQGI6ICVtIHdoaWxlIHdyaXRpbmcgdGhlIEBkIEBiIGZvciAvQGxcbiIKK21zZ3N0ciAiZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazogJW0gcG9kY3phcyB6YXBpc3UgQGJ1IEBkdSBkbGEgL0BsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGFkanVzdGluZyBpbm9kZSBjb3VudCBvbiBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgYWRqdXN0aW5nIEBpIGNvdW50IG9uIEBpICVpXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIHBvcHJhd2lhbmlhIGxpY3pieSBpLXfEmXrFgsOzdyB3IGktd8SZxbpsZSAlaVxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiTmllIG1vxbxuYSBwb3ByYXdpxIcgcm9kemljYSBpLXfEmXrFgmEgJWk6ICVtXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkbid0IGZpeCBwYXJlbnQgb2YgaW5vZGUgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IGRpcmVjdG9yeSBlbnRyeVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBAZCBAZVxuIgorIlxuIgorbXNnc3RyICIiCisiTmllIG1vxbxuYSBwb3ByYXdpxIcgcm9kemljYSBpLXfEmXrFgmEgJWk6IG5pZSB6bmFsZXppb25vIHdwaXN1IEBkdSByb2R6aWNhXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNyZWF0aW5nIHJvb3QgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyByb290IEBkICglcyk6ICVtXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIHR3b3J6ZW5pYSBnxYLDs3duZWdvIEBkdSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyAvbG9zdCtmb3VuZCBkaXJlY3RvcnkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIC9AbCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyB0d29yemVuaWEgQGR1IC9AbCAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeTsgYWJvcnRpbmcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxNgorbXNnaWQgIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIKK21zZ3N0ciAiQHIgbmllIGplc3QgQGRpZW07IHByemVyd2FuaWUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MjEKK21zZ2lkICJDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgQHIuXG4iCittc2dzdHIgIk5pZSBtb8W8bmEga29udHludW93YcSHIGJleiBnxYLDs3duZWdvIGthdGFsb2d1LlxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBpcyBub3QgYSBkaXJlY3RvcnkgKGlubz0laSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIi9AbCBpcyBub3QgYSBAZCAoaW5vPSVpKVxuIgorbXNnc3RyICIvQGwgbmllIGplc3QgQGRpZW0gKEBpPSVpKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzgKK21zZ2lkICJQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzXG4iCittc2dzdHIgIlByemViaWVnIDNBOiBPcHR5bWFsaXphY2phIGthdGFsb2fDs3dcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZGlyc190b19oYXNoIGl0ZXJhdG9yOiAlbVxuIgorbXNnc3RyICJUd29yemVuaWUgaXRlcmF0b3JhIGRpcnNfdG9faGFzaCBuaWUgcG93aW9kxYJvIHNpxJk6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0OAorbXNnaWQgIkZhaWxlZCB0byBvcHRpbWl6ZSBkaXJlY3RvcnkgJXEgKCVkKTogJW1cbiIKK21zZ3N0ciAiT3B0eW1hbGl6YWNqYSBrYXRhbG9ndSAlcSAoJWQpIG5pZSBwb3dpb2TFgmEgc2nEmTogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTUzCittc2dpZCAiT3B0aW1pemluZyBkaXJlY3RvcmllczogIgorbXNnc3RyICJPcHR5bWFsaXphY2phIGthdGFsb2fDs3c6ICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcwCittc2dpZCAiUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzXG4iCittc2dzdHIgIlByemViaWVnIDQ6IFNwcmF3ZHphbmllIGxpY3puaWvDs3cgb2R3b8WCYcWEXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgemVyby1sZW5ndGggaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAeiBAaSAlaS4gICIKK21zZ3N0ciAiQHUgQGkgQHogJWkuICIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQGkgJWlcbiIKK21zZ3N0ciAiQHUgQGkgJWlcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgcmVmIGNvdW50IGlzICVJbCwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODUKK21zZ2lkICJAaSAlaSByZWYgY291bnQgaXMgJUlsLCBAcyAlTi4gICIKK21zZ3N0ciAibGljem5payBvZHdvxYJhxYQgaS13xJl6xYJhICVpIHd5bm9zaSAlSWwsIEBzICVOLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4OQorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiVVdBR0E6IELFgcSERCBQUk9HUkFNVSBXIEUyRlNDSyFcbiIKKyJcdExVQiBLVE/FmiBCRVpNw5NaR0kgKFRZKSBTUFJBV0RaQSBQT0RNT05UT1dBTlkgKMW7WVdZKSBTWVNURU0gUExJS8OTVy5cbiIKKyJpbm9kZV9saW5rX2luZm9bJWldPSVOLCBpbm9kZS5pX2xpbmtzX2NvdW50PSVJbC4gUG93aW5ueSBiecSHIHRha2llIHNhbWUhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvblxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1OTkKK21zZ2lkICJQYXNzIDU6IENoZWNraW5nIEBnIHN1bW1hcnkgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiUHJ6ZWJpZWcgNTogU3ByYXdkemFuaWUgc3VtYXJ5Y3pueWNoIGluZm9ybWFjamkgbyBAZ2NoXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGlub2RlIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwNAorbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBpIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiV3lwZcWCbmllbmllIG5hIGtvxYRjdSBiaXRtYXB5IGktd8SZesWCw7N3IG5pZSBqZXN0IHVzdGF3aW9uZS4gIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDkKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIld5cGXFgm5pZW5pZSBuYSBrb8WEY3UgYml0bWFweSBAYsOzdyBuaWUgamVzdCB1c3Rhd2lvbmUuICIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYxNAorbXNnaWQgIkBiIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIlLDs8W8bmljZSBiaXRtYXB5IEBiw7N3OiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MzQKK21zZ2lkICJAaSBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJSw7PFvG5pY2UgYml0bWFweSBpLXfEmXrFgsOzdzogIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1NAorbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIHdvbG55Y2ggaS13xJl6xYLDs3cgZGxhIGdydXB5ICMlZyAoJWksIG5hbGljem9ubyAlaikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IERpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjU5Cittc2dpZCAiRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEga2F0YWxvZ8OzdyBkbGEgZ3J1cHkgIyVnICglaSwgbmFsaWN6b25vICVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjY0Cittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIHdvbG55Y2ggaS13xJl6xYLDs3cgKCVpLCBuYWxpY3pvbm8gJWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2OQorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIHdvbG55Y2ggQGLDs3cgZGxhIGdydXB5ICMlZyAoJWIsIG5hbGljem9ubyAlYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY3NAorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSB3b2xueWNoIEBiw7N3ICglYiwgbmFsaWN6b25vICVjKS5cbiIKKworIy4gQC1leHBhbmRlZDogUFJPR1JBTU1JTkcgRVJST1I6IGZpbGVzeXN0ZW0gKCMlTikgYml0bWFwIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIGJpdG1hcCAKKyMuIEAtZXhwYW5kZWQ6IGVuZHBvaW50cyAoJWksICVqKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NzkKK21zZ2lkICIiCisiUFJPR1JBTU1JTkcgRVJST1I6IEBmICgjJU4pIEBCIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIEBCICIKKyJlbmRwb2ludHMgKCVpLCAlailcbiIKK21zZ3N0ciAiIgorIkLFgcSERCBQUk9HUkFNVToga2/FhGNlIGJpdG1hcCBzeXN0ZW11IHBsaWvDs3cgKCMlTikgKCViLCAlYykgbmllIHpnYWR6YWrEhSBzacSZIHogIgorInBvbGljem9ueW1pIGtvxYRjYW1pIGJpdG1hcCAoJWksICVqKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2ODUKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogZnVkZ2luZyBlbmQgb2YgYml0bWFwICglTilcbiIKK21zZ3N0ciAiQsWCxIVkIHdld27EmXRyem55OiBmYcWCc3p5d3kga29uaWVjIGJpdG1hcHkgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGlub2RlIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGkgQEI6ICVtXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIGtvcGlvd2FuaWEgdyB6YXN0xJlwY3plaiBiaXRtYXBpZSBpLXfEmXrFgsOzdzogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBiIEBCOiAlbVxuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyBrb3Bpb3dhbmlhIHcgemFzdMSZcGN6ZWogYml0bWFwaWUgQGLDs3c6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGJsb2NrKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGIocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4iCittc2dzdHIgIkBiKGkpIGdydXB5ICVnIHPEhSB1xbx5d2FuZSwgYWxlIEBnIG1hIGZsYWfEmSBCTE9DS19VTklOSVRcbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgaW5vZGUocykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAaShzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbiIKK21zZ3N0ciAiaS13xJl6xYJ5IGdydXB5ICVnIHPEhSB1xbx5d2FuZSwgYWxlIEBnIG1hIGZsYWfEmSBJTk9ERV9VTklOSVRcbiIKKworIy4gQC1leHBhbmRlZDogUmVjcmVhdGUgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzMyCittc2dpZCAiUmVjcmVhdGUgQGoiCittc2dzdHIgIk9kdHdvcnp5xIcga3JvbmlrxJkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTczNworbXNnaWQgIlVwZGF0ZSBxdW90YSBpbmZvIGZvciBxdW90YSB0eXBlICVOIgorbXNnc3RyICJVYWt0dWFsbmnEhyBpbmZvcm1hY2plIG8gbGltaXRhY2ggdHlwdSAlTiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc2V0dGluZyBibG9jayBncm91cCBjaGVja3N1bSBpbmZvOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBAYiBAZyBjaGVja3N1bSBpbmZvOiAlbVxuIgorbXNnc3RyICIiCisiQsWCxIVkIHBvZGN6YXMgdXN0YXdpYW5pYSBpbmZvcm1hY2ppIG8gc3VtaWUga29udHJvbG5laiBncnVweSBibG9rw7N3OiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBmaWxlIHN5c3RlbSBpbmZvOiAlbVxuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyB6YXBpc3UgaW5mb3JtYWNqaSBvIHN5c3RlbWllIHBsaWvDs3c6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBmbHVzaGluZyB3cml0ZXMgdG8gc3RvcmFnZSBkZXZpY2U6ICVtXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIHpyenVjYW5pYSB6YXBpc8OzdyBuYSB1cnrEhWR6ZW5pZSBwcnplY2hvd3VqxIVjZTogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaGFuZGxlZCBlcnJvciBjb2RlICgweCV4KSFcbiIKK21zZ3N0ciAiTmllIG9ic8WCdcW8b255IGtvZCBixYLEmWR1ICgweCV4KSFcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxOTk2IGUyZnNjay9wcm9ibGVtLmM6MjAwMAorbXNnaWQgIklHTk9SRUQiCittc2dzdHIgIlpJR05PUk9XQU5PIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWQsIGVsYXBzZWQgdGltZTogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKK21zZ3N0ciAiVcW8eXRhIHBhbWnEmcSHOiAlZCwgdXDFgnluxIXFgiBjemFzOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzaXplIG9mIGlub2RlPSVkXG4iCittc2dzdHIgInJvem1pYXIgaS13xJl6xYJhPSVkXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjExOQorbXNnaWQgIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iCittc2dzdHIgInBvZGN6YXMgcm96cG9jenluYW5pYSBwcnplc3p1a2l3YW5pYSBpLXfEmXrFgsOzdyIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6MTMwCittc2dpZCAid2hpbGUgZG9pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAicG9kY3phcyBwcnplc3p1a2l3YW5pYSBpLXfEmXrFgsOzdyIKKworIzogZTJmc2NrL3N1cGVyLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZm9yIGlub2RlICVkIgorbXNnc3RyICJwb2RjemFzIHd5d2/FgmFuaWEgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZGxhIGktd8SZesWCYSAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZm9yIGlub2RlICVkIgorbXNnc3RyICJwb2RjemFzIHd5d2/FgmFuaWEgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZGxhIGktd8SZesWCYSAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6Mjc0Cittc2dpZCAiVHJ1bmNhdGluZyIKK21zZ3N0ciAiU2tyYWNhbmllIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzUKK21zZ2lkICJDbGVhcmluZyIKK21zZ3N0ciAiQ3p5c3pjemVuaWUiCisKKyM6IGUyZnNjay91bml4LmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisiU2vFgmFkbmlhOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2tdIFstQiByb3ptX2Jsb2t1XVxuIgorIlx0XHRbLUkgYmxva8Ozd19idWZvcmFfaS13xJl6xYLDs3ddIFstUCByb3ptaWFyX2ktd8SZesWCYV1cbiIKKyJcdFx0Wy1sfC1MIHBsaWtfd2FkbGl3eWNoX2Jsb2vDs3ddIFstQyBmZF0gWy1qIHpld24ta3JvbmlrYV1cbiIKKyJcdFx0Wy1FIHJvenN6ZXJ6b25lLW9wY2plXSB1cnrEhWR6ZW5pZVxuIgorCisjOiBlMmZzY2svdW5peC5jOjgwCittc2dpZCAiIgorIlxuIgorIkVtZXJnZW5jeSBoZWxwOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgcmVwYWlyIChubyBxdWVzdGlvbnMpXG4iCisiIC1uICAgICAgICAgICAgICAgICAgIE1ha2Ugbm8gY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbVxuIgorIiAteSAgICAgICAgICAgICAgICAgICBBc3N1bWUgXCJ5ZXNcIiB0byBhbGwgcXVlc3Rpb25zXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBiYWQgYmxvY2tzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmFkYmxvY2sgIgorImxpc3RcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBjbGVhblxuIgorbXNnc3RyICIiCisiXG4iCisiQXdhcnlqbmEgcG9tb2M6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXR5Y3puZSBuYXByYXdpYW5pZSAoYmV6IHB5dGHFhClcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTmllIHd5a29ueXdhbmllIHptaWFuIHcgc3lzdGVtaWUgcGxpa8Ozd1xuIgorIiAteSAgICAgICAgICAgICAgICAgICBQcnp5asSZY2llIG9kcG93aWVkemkgXCJ0YWtcIiBuYSB3c3p5c3RraWUgcHl0YW5pYVxuIgorIiAtYyAgICAgICAgICAgICAgICAgICBTenVrYW5pZSB3YWRsaXd5Y2ggYmxva8OzdyBpIGRvZGFuaWUgaWNoIGRvIGxpc3R5XG4iCisiIC1mICAgICAgICAgICAgICAgICAgIFd5bXVzemVuaWUgc3ByYXdkemVuaWEgbmF3ZXQgXCJjenlzdGVnb1wiIHN5c3RlbXUgIgorInBsaWvDs3dcbiIKKworIzogZTJmc2NrL3VuaXguYzo4NgorbXNnaWQgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgQmUgdmVyYm9zZVxuIgorIiAtYiBzdXBlcmJsb2NrICAgICAgICBVc2UgYWx0ZXJuYXRpdmUgc3VwZXJibG9ja1xuIgorIiAtQiBibG9ja3NpemUgICAgICAgICBGb3JjZSBibG9ja3NpemUgd2hlbiBsb29raW5nIGZvciBzdXBlcmJsb2NrXG4iCisiIC1qIGV4dGVybmFsX2pvdXJuYWwgIFNldCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbFxuIgorIiAtbCBiYWRfYmxvY2tzX2ZpbGUgICBBZGQgdG8gYmFkYmxvY2tzIGxpc3RcbiIKKyIgLUwgYmFkX2Jsb2Nrc19maWxlICAgU2V0IGJhZGJsb2NrcyBsaXN0XG4iCittc2dzdHIgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgUG9rYXp5d2FuaWUgd2nEmWtzemVqIGlsb8WbY2kgaW5mb3JtYWNqaVxuIgorIiAtYiBzdXBlcmJsb2sgICAgICAgICBVxbx5Y2llIGlubmVnbyBzdXBlcmJsb2t1XG4iCisiIC1CIHJvem0uYmxva3UgICAgICAgIFd5bXVzemVuaWUgcm96bWlhcnUgYmxva3UgcHJ6eSBwb3N6dWtpd2FuaXUgIgorInN1cGVyYmxva3VcbiIKKyIgLWogemV3bi1rcm9uaWthICAgICAgVXN0YXdpZW5pZSBwb8WCb8W8ZW5pYSB6ZXduxJl0cnpuZWoga3JvbmlraVxuIgorIiAtbCBwbGlrX3rFgnljaF9ibG9rw7N3IERvZGFuaWUgZG8gbGlzdHkgd2FkbGl3eWNoIGJsb2vDs3dcbiIKKyIgLUwgcGxpa196xYJ5Y2hfYmxva8OzdyBVc3Rhd2llbmllIGxpc3R5IHdhZGxpd3ljaCBibG9rw7N3XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAldS8ldSBmaWxlcyAoJTBkLiVkJSUgbm9uLWNvbnRpZ3VvdXMpLCAlbGx1LyVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiVzOiAldS8ldSBwbGlrw7N3ICglMGQuJWQlJSBuaWVjacSFZ8WCeWNoKSwgJWxsdS8lbGx1IGJsb2vDs3dcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSBpbm9kZXMgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJTEydSB1xbx5dHkgaS13xJl6ZcWCICglMi4yZiUlIHogJXUpXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IHXFvHl0ZSBpLXfEmXrFgnkgKCUyLjJmJSUgeiAldSlcbiIKK21zZ3N0clsyXSAiIgorIlxuIgorIiUxMnUgdcW8eXR5Y2ggaS13xJl6xYLDs3cgKCUyLjJmJSUgeiAldSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBmaWxlICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBmaWxlcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiUxMnUgcGxpayBuaWVjacSFZ8WCeSAoJTBkLiVkJSUpXG4iCittc2dzdHJbMV0gIiUxMnUgcGxpa2kgbmllY2nEhWfFgmUgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzJdICIlMTJ1IHBsaWvDs3cgbmllY2nEhWfFgnljaCAoJTBkLiVkJSUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3J5ICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcmllcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiUxMnUga2F0YWxvZyBuaWVjacSFZ8WCeSAoJTBkLiVkJSUpXG4iCittc2dzdHJbMV0gIiUxMnUga2F0YWxvZ2kgbmllY2nEhWfFgmUgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzJdICIlMTJ1IGthdGFsb2fDs3cgbmllY2nEhWfFgnljaCAoJTBkLiVkJSUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAgICAgICAjIG9mIGlub2RlcyB3aXRoIGluZC9kaW5kL3RpbmQgYmxvY2tzOiAldS8ldS8ldVxuIgorbXNnc3RyICIgICAgICAgICAgICAgbGljemJhIGktd8SZesWCw7N3IHogYmxva2FtaSBpbmQvZGluZC90aW5kOiAldS8ldS8ldVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3OQorbXNnaWQgIiAgICAgICAgICAgICBFeHRlbnQgZGVwdGggaGlzdG9ncmFtOiAiCittc2dzdHIgIiAgICAgICAgICAgICBIaXN0b2dyYW0gZ8WCxJlib2tvxZtjaSBla3N0ZW50w7N3OiAiCisKKyM6IGUyZnNjay91bml4LmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMmxsdSBibG9jayB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEybGx1IGJsb2NrcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ3N0clswXSAiJTEybGx1IHXFvHl0eSBibG9rICglMi4yZiUlIHogJWxsdSlcbiIKK21zZ3N0clsxXSAiJTEybGx1IHXFvHl0ZSBibG9raSAoJTIuMmYlJSB6ICVsbHUpXG4iCittc2dzdHJbMl0gIiUxMmxsdSB1xbx5dHljaCBibG9rw7N3ICglMi4yZiUlIHogJWxsdSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBiYWQgYmxvY2tcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBiYWQgYmxvY2tzXG4iCittc2dzdHJbMF0gIiUxMnUgd2FkbGl3eSBibG9rXG4iCittc2dzdHJbMV0gIiUxMnUgd2FkbGl3ZSBibG9raVxuIgorbXNnc3RyWzJdICIlMTJ1IHdhZGxpd3ljaCBibG9rw7N3XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbGFyZ2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGxhcmdlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgZHXFvHkgcGxpa1xuIgorbXNnc3RyWzFdICIlMTJ1IGR1xbxlIHBsaWtpXG4iCittc2dzdHJbMl0gIiUxMnUgZHXFvHljaCBwbGlrw7N3XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVzXG4iCittc2dzdHJbMF0gIiIKKyJcbiIKKyIlMTJ1IHp3eWvFgnkgcGxpa1xuIgorbXNnc3RyWzFdICIiCisiXG4iCisiJTEydSB6d3lrxYJlIHBsaWtpXG4iCittc2dzdHJbMl0gIiIKKyJcbiIKKyIlMTJ1IHp3eWvFgnljaCBwbGlrw7N3XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZGlyZWN0b3J5XG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZGlyZWN0b3JpZXNcbiIKK21zZ3N0clswXSAiJTEydSBrYXRhbG9nXG4iCittc2dzdHJbMV0gIiUxMnUga2F0YWxvZ2lcbiIKK21zZ3N0clsyXSAiJTEydSBrYXRhbG9nw7N3XG4iCisKKyM6IGUyZnNjay91bml4LmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IHBsaWsgdXJ6xIVkemVuaWEgem5ha293ZWdvXG4iCittc2dzdHJbMV0gIiUxMnUgcGxpa2kgdXJ6xIVkemXFhCB6bmFrb3d5Y2hcbiIKK21zZ3N0clsyXSAiJTEydSBwbGlrw7N3IHVyesSFZHplxYQgem5ha293eWNoXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBibG9jayBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBwbGlrIHVyesSFZHplbmlhIGJsb2tvd2Vnb1xuIgorbXNnc3RyWzFdICIlMTJ1IHBsaWtpIHVyesSFZHplxYQgYmxva293eWNoXG4iCittc2dzdHJbMl0gIiUxMnUgcGxpa8OzdyB1cnrEhWR6ZcWEIGJsb2tvd3ljaFxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpZm9cbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWZvc1xuIgorbXNnc3RyWzBdICIlMTJ1IHBvdG9rXG4iCittc2dzdHJbMV0gIiUxMnUgcG90b2tpXG4iCittc2dzdHJbMl0gIiUxMnUgcG90b2vDs3dcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsaW5rXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGlua3NcbiIKK21zZ3N0clswXSAiJTEydSBkb3dpxIV6YW5pZVxuIgorbXNnc3RyWzFdICIlMTJ1IGRvd2nEhXphbmlhXG4iCittc2dzdHJbMl0gIiUxMnUgZG93acSFemHFhFxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHN5bWJvbGljIGxpbmsiCittc2dpZF9wbHVyYWwgIiUxMnUgc3ltYm9saWMgbGlua3MiCittc2dzdHJbMF0gIiUxMnUgZG93acSFemFuaWUgc3ltYm9saWN6bmUiCittc2dzdHJbMV0gIiUxMnUgZG93acSFemFuaWEgc3ltYm9saWN6bmUiCittc2dzdHJbMl0gIiUxMnUgZG93acSFemHFhCBzeW1ib2xpY3pueWNoIgorCisjOiBlMmZzY2svdW5peC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgKCV1IGZhc3Qgc3ltYm9saWMgbGluaylcbiIKK21zZ2lkX3BsdXJhbCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmtzKVxuIgorbXNnc3RyWzBdICIgKCV1IHN6eWJraWUgZG93acSFemFuaWUgc3ltYm9saWN6bmUpXG4iCittc2dzdHJbMV0gIiAoJXUgc3p5YmtpZSBkb3dpxIV6YW5pYSBzeW1ib2xpY3puZSlcbiIKK21zZ3N0clsyXSAiICgldSBzenlia2ljaCBkb3dpxIV6YcWEIHN5bWJvbGljem55Y2gpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgc29ja2V0XG4iCittc2dpZF9wbHVyYWwgIiUxMnUgc29ja2V0c1xuIgorbXNnc3RyWzBdICIlMTJ1IGduaWF6ZG9cbiIKK21zZ3N0clsxXSAiJTEydSBnbmlhemRhXG4iCittc2dzdHJbMl0gIiUxMnUgZ25pYXpkXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgcGxpa1xuIgorbXNnc3RyWzFdICIlMTJ1IHBsaWtpXG4iCittc2dzdHJbMl0gIiUxMnUgcGxpa8Ozd1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIzMiBtaXNjL2JhZGJsb2Nrcy5jOjk5MyBtaXNjL3R1bmUyZnMuYzoyMTIyIG1pc2MvdXRpbC5jOjMxNgorIzogcmVzaXplL21haW4uYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLiIKK21zZ3N0ciAicG9kY3phcyBzcHJhd2R6YW5pYSwgY3p5ICVzIGplc3QgemFtb250b3dhbnkuIgorCisjOiBlMmZzY2svdW5peC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiVXdhZ2EhICVzIGplc3QgemFtb250b3dhbnkuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyBpbiB1c2UuXG4iCittc2dzdHIgIlV3YWdhISAlcyBqZXN0IHcgdcW8eWNpdS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiJXMgamVzdCB6YW1vbnRvd2FueS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW4gdXNlLlxuIgorbXNnc3RyICIlcyBqZXN0IHcgdcW8eWNpdS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjYKK21zZ2lkICIiCisiQ2Fubm90IGNvbnRpbnVlLCBhYm9ydGluZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5pZSBtb8W8bmEga29udHludW93YcSHLCBwcnplcndhbm8uXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY4Cittc2dpZCAiIgorIlxuIgorIlxuIgorIldBUk5JTkchISEgIFRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuICAgSWYgeW91IGNvbnRpbnVlIHlvdSAqKipXSUxMKioqXG4iCisiY2F1c2UgKioqU0VWRVJFKioqIGZpbGVzeXN0ZW0gZGFtYWdlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiVVdBR0EhISEgU3lzdGVtIHBsaWvDs3cgamVzdCB6YW1vbnRvd2FueS4gS29udHludWFjamEgKioqU1BPV09EVUpFKioqXG4iCisiKioqUE9XQcW7TkUqKiogdXN6a29kemVuaWUgc3lzdGVtdSBwbGlrw7N3LlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI3MworbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byBjb250aW51ZSIKK21zZ3N0ciAiTmFwcmF3ZMSZIGtvbnR5bnVvd2HEhz8iCisKKyM6IGUyZnNjay91bml4LmM6Mjc1Cittc2dpZCAiY2hlY2sgYWJvcnRlZC5cbiIKK21zZ3N0ciAic3ByYXdkemFuaWUgcHJ6ZXJ3YW5lLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjM2OAorbXNnaWQgIiBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzIgorbXNnc3RyICIgemF3aWVyYSBzeXN0ZW0gcGxpa8OzdyB6IGLFgsSZZGFtaSIKKworIzogZTJmc2NrL3VuaXguYzozNzAKK21zZ2lkICIgd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCIKK21zZ3N0ciAiIG5pZSBiecWCIGN6eXN0byBvZG1vbnRvd2FueSIKKworIzogZTJmc2NrL3VuaXguYzozNzIKK21zZ2lkICIgcHJpbWFyeSBzdXBlcmJsb2NrIGZlYXR1cmVzIGRpZmZlcmVudCBmcm9tIGJhY2t1cCIKK21zZ3N0ciAiIGNlY2h5IGfFgsOzd25lZ28gc3VwZXJibG9rdSByw7PFvG5pxIUgc2nEmSBvZCBrb3BpaSB6YXBhc293ZWoiCisKKyM6IGUyZnNjay91bml4LmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgYmVlbiBtb3VudGVkICV1IHRpbWVzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIGJ5xYIgbW9udG93YW55ICV1IHJhenkgYmV6IHNwcmF3ZHphbmlhIgorCisjOiBlMmZzY2svdW5peC5jOjM4MworbXNnaWQgIiBoYXMgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdGltZSBpbiB0aGUgZnV0dXJlIgorbXNnc3RyICIgbWEgY3phcyBvc3RhdG5pZWdvIHNwcmF3ZHplbmlhIHN5c3RlbXUgcGxpa8OzdyB3IHByenlzesWCb8WbY2kiCisKKyM6IGUyZnNjay91bml4LmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgZ29uZSAldSBkYXlzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIHByemV0cndhxYIgJXUgZG5pIGJleiBzcHJhd2R6YW5pYSIKKworIzogZTJmc2NrL3VuaXguYzozOTgKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiLCB3eW11c3pvbm8gc3ByYXdkemVuaWUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiwgJXUvJXUgZmlsZXMsICVsbHUvJWxsdSBibG9ja3MiCittc2dzdHIgIiVzOiBjenlzdHksICV1LyV1IHBsaWvDs3csICVsbHUvJWxsdSBibG9rw7N3IgorCisjOiBlMmZzY2svdW5peC5jOjQ1MQorbXNnaWQgIiAoY2hlY2sgZGVmZXJyZWQ7IG9uIGJhdHRlcnkpIgorbXNnc3RyICIgKHNwcmF3ZHplbmllIHdzdHJ6eW1hbmU7IHphc2lsYW5pZSB6IGJhdGVyaWkpIgorCisjOiBlMmZzY2svdW5peC5jOjQ1NAorbXNnaWQgIiAoY2hlY2sgYWZ0ZXIgbmV4dCBtb3VudCkiCittc2dzdHIgIiAoc3ByYXdkemVuaWUgcG8gbmFzdMSZcG55bSBtb250b3dhbml1KSIKKworIzogZTJmc2NrL3VuaXguYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChjaGVjayBpbiAlbGQgbW91bnRzKSIKK21zZ3N0ciAiKHNwcmF3ZHplbmllIHphICVsZCBtb250b3dhxYQpIgorCisjOiBlMmZzY2svdW5peC5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogQ291bGRuJ3Qgb3BlbiAvZGV2L251bGwgKCVzKVxuIgorbXNnc3RyICJCxYHEhEQ6IE5pZSBtb8W8bmEgb3R3b3J6ecSHIC9kZXYvbnVsbCAoJXMpXG4iCisKKyM6IGUyZnNjay91bml4LmM6Njc1Cittc2dpZCAiSW52YWxpZCBFQSB2ZXJzaW9uLlxuIgorbXNnc3RyICJCxYLEmWRuYSB3ZXJzamEgRUEuXG4iCisKKyM6IGUyZnNjay91bml4LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZXh0ZW5kZWQgb3B0aW9uOiAlc1xuIgorbXNnc3RyICJOaWV6bmFuYSBvcGNqYSByb3pzemVyem9uYTogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBlMmZzY2sgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKyJCxYLEhWQgc2vFgmFkbmkgdyBwbGlrdSBrb25maWd1cmFjeWpueW0gZTJmc2NrICglcywgbGluaWEgJWQpXG4iCisiXHQlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMga29udHJvbGkgZGVza3J5cHRvcmEgcGxpa3UgJWQ6ICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODAxCittc2dpZCAiSW52YWxpZCBjb21wbGV0aW9uIGluZm9ybWF0aW9uIGZpbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAiQsWCxJlkbmUgaW5mb3JtYWNqZSBkb3BlxYJuaWFqxIVjZSBkZXNrcnlwdG9yYSBwbGlrw7N3IgorCisjOiBlMmZzY2svdW5peC5jOjgxNgorbXNnaWQgIk9ubHkgb25lIG9mIHRoZSBvcHRpb25zIC1wLy1hLCAtbiBvciAteSBtYXkgYmUgc3BlY2lmaWVkLiIKK21zZ3N0ciAiTW/FvG5hIHBvZGHEhyB0eWxrbyBqZWRuxIUgeiBvcGNqaSAtcC8tYSwgLW4gbHViIC15LiIKKworIzogZTJmc2NrL3VuaXguYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC10IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCittc2dzdHIgIk9wY2phIC10IG5pZSBqZXN0IG9ic8WCdWdpd2FuYSBwcnpleiB0xJkgd2Vyc2rEmSBlMmZzY2suXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODY4IGUyZnNjay91bml4LmM6OTQyIG1pc2MvdHVuZTJmcy5jOjg3OSBtaXNjL3R1bmUyZnMuYzoxMTc0CisjOiBtaXNjL3R1bmUyZnMuYzoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZXNvbHZlICclcyciCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSByb3p3acSFemHEhyAnJXMnIgorCisjOiBlMmZzY2svdW5peC5jOjkyMQorbXNnaWQgIlRoZSAtbiBhbmQgLUQgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiT3BjamUgLW4gaSAtRCBzxIUgbmlla29tcGF0eWJpbG5lLiIKKworIzogZTJmc2NrL3VuaXguYzo5MjYKK21zZ2lkICJUaGUgLW4gYW5kIC1jIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIk9wY2plIC1uIGkgLWMgc8SFIG5pZWtvbXBhdHliaWxuZS4iCisKKyM6IGUyZnNjay91bml4LmM6OTMxCittc2dpZCAiVGhlIC1uIGFuZCAtbC8tTCBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJPcGNqZSAtbiBpIC1sLy1MIHPEhSBuaWVrb21wYXR5YmlsbmUuIgorCisjOiBlMmZzY2svdW5peC5jOjk4NQorbXNnaWQgIlRoZSAtYyBhbmQgdGhlIC1sLy1MIG9wdGlvbnMgbWF5IG5vdCBiZSBib3RoIHVzZWQgYXQgdGhlIHNhbWUgdGltZS5cbiIKK21zZ3N0ciAiT3BjamUgLWMgb3JheiAtbC8tTCBuaWUgbW9nxIUgYnnEhyBwb2RhbmUgamVkbm9jemXFm25pZS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMkZTQ0tfSkJEX0RFQlVHIFwiJXNcIiBub3QgYW4gaW50ZWdlclxuIgorIlxuIgorbXNnc3RyICIiCisiRTJGU0NLX0pCRF9ERUJVRyBcIiVzXCIgbmllIGplc3QgbGljemLEhSBjYcWCa293aXTEhVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkludmFsaWQgbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gLSVjIChcIiVzXCIpXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJCxYLEmWRueSBhcmd1bWVudCBuaWVsaWN6Ym93eSBkbGEgLSVjIChcIiVzXCIpXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGludGVydmFsIGlzICV1IHNlY29uZHMgYW5kIHRvdGFsIHdhaXQgdGltZSBpcyAldSBzZWNvbmRzLiBQbGVhc2UgIgorIndhaXQuLi5cbiIKK21zZ3N0ciAiIgorIlByemVkemlhxYIgTU1QIHRvICV1IHNlaywgYSBjYcWCa293aXR5IGN6YXMgb2N6ZWtpd2FuaWEgJXUgc2VrLiBQcm9zesSZICIKKyJjemVrYcSHLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTE0OSBlMmZzY2svdW5peC5jOjExNTQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBNTVAgYmxvY2siCittc2dzdHIgInBvZGN6YXMgc3ByYXdkemFuaWEgYmxva3UgTU1QIgorCisjOiBlMmZzY2svdW5peC5jOjExNTYgbWlzYy90dW5lMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJJZiB5b3UgYXJlIHN1cmUgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IGluIHVzZSBvbiBhbnkgbm9kZSwgcnVuOlxuIgorIid0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfSdcbiIKK21zZ3N0ciAiIgorIkplxZtsaSBzeXN0ZW0gcGxpa8OzdyBuaWUgamVzdCBuYSBwZXdubyB1xbx5d2FueSBwcnpleiDFvGFkZW4gc3lzdGVtLCBtb8W8bmEgIgorInVydWNob21pxIc6XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHt1cnrEhWR6ZW5pZX0nXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTIwNworbXNnaWQgIkVycm9yOiBleHQyZnMgbGlicmFyeSB2ZXJzaW9uIG91dCBvZiBkYXRlIVxuIgorbXNnc3RyICJCxYLEhWQ6IHdlcnNqYSBiaWJsaW90ZWtpIGV4dDJmcyBqZXN0IHphIHN0YXJhIVxuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMTQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gaW5pdGlhbGl6ZSBwcm9ncmFtIgorbXNnc3RyICJwb2RjemFzIHByw7NieSB6YWluaWNqb3dhbmlhIHByb2dyYW11IgorCisjOiBlMmZzY2svdW5peC5jOjEyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlcywgJXNcbiIKK21zZ3N0ciAiXHRVxbx5d2FuZSAlcywgJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjQ5Cittc2dpZCAibmVlZCB0ZXJtaW5hbCBmb3IgaW50ZXJhY3RpdmUgcmVwYWlycyIKK21zZ3N0ciAiaW50ZXJha3R5d25hIG5hcHJhd2Egd3ltYWdhIHRlcm1pbmFsYSIKKworIzogZTJmc2NrL3VuaXguYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB0cnlpbmcgYmFja3VwIGJsb2Nrcy4uLlxuIgorbXNnc3RyICIlczogJXMgcHLDs2JhIHXFvHljaWEgemFwYXNvd3ljaCBibG9rw7N3Li4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMwNQorbXNnaWQgIlN1cGVyYmxvY2sgaW52YWxpZCwiCittc2dzdHIgIlN1cGVyYmxvayBixYLEmWRueSwiCisKKyM6IGUyZnNjay91bml4LmM6MTMwNgorbXNnaWQgIkdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIgorbXNnc3RyICJEZXNrcnlwdG9yeSBncnVwIHd5Z2zEhWRhasSFIMW6bGUuLi4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgdXNpbmcgdGhlIGJhY2t1cCBibG9ja3MiCittc2dzdHIgIiVzOiAlcyBwb2RjemFzIHByw7NieSB1xbx5Y2lhIHphcGFzb3d5Y2ggYmxva8OzdyIKKworIzogZTJmc2NrL3VuaXguYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBnb2luZyBiYWNrIHRvIG9yaWdpbmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiJXM6IHBvd3JhY2FuaWUgZG8gb3J5Z2luYWxuZWdvIHN1cGVyYmxva3VcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQ5Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIHJldmlzaW9uIGlzIGFwcGFyZW50bHkgdG9vIGhpZ2ggZm9yIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCisiKE9yIHRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2sgaXMgY29ycnVwdClcbiIKKyJcbiIKK21zZ3N0ciAiIgorIldlcnNqYSBzeXN0ZW11IHBsaWvDs3cgamVzdCB6Ynl0IGR1xbxhIGRsYSB0ZWogd2Vyc2ppIGUyZnNjay5cbiIKKyIobHViIHN1cGVyYmxvayBzeXN0ZW11IHBsaWvDs3cgamVzdCB1c3prb2R6b255KVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTYKK21zZ2lkICJDb3VsZCB0aGlzIGJlIGEgemVyby1sZW5ndGggcGFydGl0aW9uP1xuIgorbXNnc3RyICJDenkgdG8gbW/FvGUgamVzdCBwYXJ0eWNqYSB6ZXJvd2VqIGTFgnVnb8WbY2k/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSBvciBiZSByb290XG4iCittc2dzdHIgIlRyemViYSBtaWXEhyBkb3N0xJlwICVzIGRvIHN5c3RlbXUgcGxpa8OzdyBsdWIgYnnEhyByb290ZW1cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY0Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICJaYXBld25lIG5pZSBpc3RuaWVqxIVjZSB1cnrEhWR6ZW5pZSBsdWIgc3dhcD9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY2Cittc2dpZCAiRmlsZXN5c3RlbSBtb3VudGVkIG9yIG9wZW5lZCBleGNsdXNpdmVseSBieSBhbm90aGVyIHByb2dyYW0/XG4iCittc2dzdHIgIiIKKyJTeXN0ZW0gcGxpa8OzdyB6YW1vbnRvd2FueSBsdWIgb3R3YXJ0eSBuYSB3ecWCxIVjem5vxZvEhyBwcnpleiBpbm55IHByb2dyYW0/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM3MAorbXNnaWQgIlBvc3NpYmx5IG5vbi1leGlzdGVudCBkZXZpY2U/XG4iCittc2dzdHIgIlphcGV3bmUgbmllIGlzdG5pZWrEhWNlIHVyesSFZHplbmllP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNzMKK21zZ2lkICIiCisiRGlzayB3cml0ZS1wcm90ZWN0ZWQ7IHVzZSB0aGUgLW4gb3B0aW9uIHRvIGRvIGEgcmVhZC1vbmx5XG4iCisiY2hlY2sgb2YgdGhlIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIkR5c2sgemFiZXpwaWVjem9ueSBwcnplZCB6YXBpc2VtOyBtb8W8bmEgdcW8ecSHIG9wY2ppIC1uIGFieSBzcHJhd2R6acSHXG4iCisidXJ6xIVkemVuaWUgdyB0cnliaWUgdHlsa28gZG8gb2Rjenl0dS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDM3Cittc2dpZCAiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIgorbXNnc3RyICJQb3RyemViYSBub3dzemVqIHdlcnNqaSBlMmZzY2shIgorCisjOiBlMmZzY2svdW5peC5jOjE0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgZXh0MyBqb3VybmFsIGZvciAlcyIKK21zZ3N0ciAicG9kY3phcyBzcHJhd2R6YW5pYSBrcm9uaWtpIGV4dDMgZGxhICVzIgorCisjOiBlMmZzY2svdW5peC5jOjE0OTIKK21zZ2lkICIiCisiV2FybmluZzogc2tpcHBpbmcgam91cm5hbCByZWNvdmVyeSBiZWNhdXNlIGRvaW5nIGEgcmVhZC1vbmx5IGZpbGVzeXN0ZW0gIgorImNoZWNrLlxuIgorbXNnc3RyICIiCisiVXdhZ2E6IHBvbWluacSZdG8gb2R0d2FyemFuaWUgeiBrcm9uaWtpIHogcG93b2R1IHNwcmF3ZHphbmlhIHcgdHJ5YmllIHR5bGtvXG4iCisiZG8gb2Rjenl0dS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTA0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgc3VwZXJibG9jayBmbGFncyBvbiAlc1xuIgorbXNnc3RyICJuaWUgbW/FvG5hIHVzdGF3acSHIGZsYWcgc3VwZXJibG9rdSBuYSAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVjb3ZlcmluZyBleHQzIGpvdXJuYWwgb2YgJXMiCittc2dzdHIgInBvZGN6YXMgb2R0d2FyemFuaWEgeiBrcm9uaWtpIGV4dDMgZGxhICVzIgorCisjOiBlMmZzY2svdW5peC5jOjE1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocyk6IgorbXNnc3RyICIlcyBtYSB3xYLEhWN6b25lIG5pZSBvYnPFgnVnaXdhbmUgY2VjaHk6IgorCisjOiBlMmZzY2svdW5peC5jOjE1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhcm5pbmc6IGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorbXNnc3RyICIlczogdXdhZ2E6IG9ic8WCdWdhIGtvbXByZXNqaSBqZXN0IGVrc3BlcnltZW50YWxuYS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogZTJmc2NrIG5vdCBjb21waWxlZCB3aXRoIEhUUkVFIHN1cHBvcnQsXG4iCisiXHRidXQgZmlsZXN5c3RlbSAlcyBoYXMgSFRSRUUgZGlyZWN0b3JpZXMuXG4iCittc2dzdHIgIiIKKyIlczogZTJmc2NrIHNrb21waWxvd2FueSBiZXogb2JzxYJ1Z2kgSFRSRUUsXG4iCisiXHRhbGUgc3lzdGVtIHBsaWvDs3cgJXMgbWEga2F0YWxvZ2kgSFRSRUUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgcmVhZGluZyBiYWQgYmxvY2tzIGlub2RlXG4iCittc2dzdHIgIiVzOiAlcyBwb2RjemFzIG9kY3p5dHUgaS13xJl6xYJhIHdhZGxpd3ljaCBibG9rw7N3XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxMAorbXNnaWQgIlRoaXMgZG9lc24ndCBib2RlIHdlbGwsIGJ1dCB3ZSdsbCB0cnkgdG8gZ28gb24uLi5cbiIKK21zZ3N0ciAiTmllIHdyw7PFvHkgdG8gZG9icnplLCBhbGUgc3Byw7NidWrEmSBrb250eW51b3dhxIcuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCVkIGJsb2Nrcyk6ICIKK21zZ3N0ciAiVHdvcnplbmllIGtyb25pa2kgKCVkIGJsb2vDs3cpOiAiCisKKyM6IGUyZnNjay91bml4LmM6MTY2MgorbXNnaWQgIiBEb25lLlxuIgorbXNnc3RyICIgV3lrb25hbm8uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY2NAorbXNnaWQgIiIKKyJcbiIKKyIqKiogam91cm5hbCBoYXMgYmVlbiByZS1jcmVhdGVkIC0gZmlsZXN5c3RlbSBpcyBub3cgZXh0MyBhZ2FpbiAqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIioqKiBrcm9uaWthIHpvc3RhxYJhIHBvbm93bmllIHV0d29yem9uYSAtIHN5c3RlbSBwbGlrw7N3IHRvIHpub3d1IGV4dDMgKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY4OAorbXNnaWQgIlJlc3RhcnRpbmcgZTJmc2NrIGZyb20gdGhlIGJlZ2lubmluZy4uLlxuIgorbXNnc3RyICJSZXN0YXJ0IGUyZnNjayBvZCBwb2N6xIV0a3UuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjkyCittc2dpZCAid2hpbGUgcmVzZXR0aW5nIGNvbnRleHQiCittc2dzdHIgInBvZGN6YXMgcmVzZXRvd2FuaWEga29udGVrc3R1IgorCisjOiBlMmZzY2svdW5peC5jOjE2OTkKK21zZ2lkICJhYm9ydGVkIgorbXNnc3RyICJwcnplcndhbm8iCisKKyM6IGUyZnNjay91bml4LmM6MTcwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZTJmc2NrIGNhbmNlbGVkLlxuIgorbXNnc3RyICIlczogZTJmc2NrIHByemVyd2FueS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzQxIGUyZnNjay91dGlsLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKiBTWVNURU0gUExJS8OTVyBaTU9EWUZJS09XQU5ZICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiVzOiAqKioqKiBXWU1BR0FOWSBSRVNUQVJUIExJTlVLU0EgKioqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzUzIGUyZnNjay91dGlsLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIFdBUk5JTkc6IEZpbGVzeXN0ZW0gc3RpbGwgaGFzIGVycm9ycyAqKioqKioqKioqXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBVV0FHQTogU3lzdGVtIHBsaWvDs3cgbmFkYWwgbWEgYsWCxJlkeSAqKioqKioqKioqXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MTkwIG1pc2MvdXRpbC5jOjg2Cittc2dpZCAieVkiCittc2dzdHIgInRUeVkiCisKKyM6IGUyZnNjay91dGlsLmM6MTkxCittc2dpZCAibk4iCittc2dzdHIgIm5OIgorCisjOiBlMmZzY2svdXRpbC5jOjIwNQorbXNnaWQgIjx5PiIKK21zZ3N0ciAiPHQ+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwNworbXNnaWQgIjxuPiIKK21zZ3N0ciAiPG4+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwOQorbXNnaWQgIiAoeS9uKSIKK21zZ3N0ciAiICh0L24pIgorCisjOiBlMmZzY2svdXRpbC5jOjIyMworbXNnaWQgImNhbmNlbGxlZCFcbiIKK21zZ3N0ciAiYW51bG93YW5vIVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjIzOAorbXNnaWQgInllc1xuIgorbXNnc3RyICJ0YWtcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNDAKK21zZ2lkICJub1xuIgorbXNnc3RyICJuaWVcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyBub1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IG5pZVxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IHllc1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IHRha1xuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1OAorbXNnaWQgInllcyIKK21zZ3N0ciAidGFrIgorCisjOiBlMmZzY2svdXRpbC5jOjI1OAorbXNnaWQgIm5vIgorbXNnc3RyICJuaWUiCisKKyM6IGUyZnNjay91dGlsLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgImUyZnNja19yZWFkX2JpdG1hcHM6IGlsbGVnYWwgYml0bWFwIGJsb2NrKHMpIGZvciAlcyIKK21zZ3N0ciAiZTJmc2NrX3JlYWRfYml0bWFwczogbmllZG9wdXN6Y3phbG5lIGJsb2tpIGJpdG1hcHkgZGxhICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjI3OAorbXNnaWQgInJlYWRpbmcgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMiCittc2dzdHIgIm9kY3p5dHUgYml0bWFwIGktd8SZesWCw7N3IGkgYmxva8OzdyIKKworIzogZTJmc2NrL3V0aWwuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gcmVhZCBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAicG9kY3phcyBwb25hd2lhbmlhIHByw7NieSBvZGN6eXR1IGJpdG1hcCBkbGEgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjk4Cittc2dpZCAid3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyIKK21zZ3N0ciAiemFwaXN1IGJpdG1hcCBibG9rw7N3IGkgaS13xJl6xYLDs3ciCisKKyM6IGUyZnNjay91dGlsLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJld3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgInBvZGN6YXMgcG9ub3duZWdvIHphcGlzdSBiaXRtYXAgYmxpa8OzdyBpIGktd8SZesWCw7N3IGRsYSAlcyIKKworIzogZTJmc2NrL3V0aWwuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIiVzOiBVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k7IFJVTiBmc2NrIE1BTlVBTExZLlxuIgorIlx0KGkuZS4sIHdpdGhvdXQgLWEgb3IgLXAgb3B0aW9ucylcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIiVzOiBOSUVPQ1pFS0lXQU5BIE5JRVNQw5NKTk/FmsSGOyBUUlpFQkEgVVJVQ0hPTUnEhiBmc2NrIFLEmENaTklFLlxuIgorIlx0KHR6bi4gYmV6IG9wY2ppIC1hIGFuaSAtcClcbiIKKworIzogZTJmc2NrL3V0aWwuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorbXNnc3RyICJVxbx5dGEgcGFtacSZxIc6ICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1LCAiCittc2dzdHIgIlXFvHl0YSBwYW1pxJnEhzogJWx1LCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWU6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCittc2dzdHIgImN6YXM6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVsYXBzZWQgdGltZTogJTYuM2ZcbiIKK21zZ3N0ciAidXDFgnluxIXFgiBjemFzOiAlNi5mXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDQ3IGUyZnNjay91dGlsLmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICJwb2RjemFzIG9kY3p5dHUgaS13xJl6xYJhICVsdSB3ICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjQ3NSBlMmZzY2svdXRpbC5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAicG9kY3phcyB6YXBpc3UgaS13xJl6xYJhICVsdSB3ICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjYzNworbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgemVyb2l6aW5nIGJ1ZmZlciIKK21zZ3N0ciAicG9kY3phcyBwcnp5ZHppZWxhbmlhIGJ1Zm9yYSB6ZXJ1asSFY2VnbyIKKworIzogZTJmc2NrL3V0aWwuYzo3ODUKK21zZ2lkICIiCisiVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb2RpZmllZCB3aGlsZSBmc2NrIGlzICIKKyJydW5uaW5nLlxuIgorbXNnc3RyICIiCisiTklFT0NaRUtJV0FOQSBOSUVTUMOTSk5PxZrEhjogc3lzdGVtIHBsaWvDs3cgem9zdGHFgiB6bW9keWZpa293YW55IHBvZGN6YXMgIgorImR6aWHFgmFuaWEgZnNjay5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3MgorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgInpha2/FhGN6b25vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1iIGJsb2NrX3NpemVdIFstaSBpbnB1dF9maWxlXSBbLW8gb3V0cHV0X2ZpbGVdIFstc3Z3bmZdXG4iCisiICAgICAgIFstYyBibG9ja3NfYXRfb25jZV0gWy1kIGRlbGF5X2ZhY3Rvcl9iZXR3ZWVuX3JlYWRzXSBbLWUgIgorIm1heF9iYWRfYmxvY2tzXVxuIgorIiAgICAgICBbLXAgbnVtX3Bhc3Nlc10gWy10IHRlc3RfcGF0dGVybiBbLXQgdGVzdF9wYXR0ZXJuIFsuLi5dXV1cbiIKKyIgICAgICAgZGV2aWNlIFtsYXN0X2Jsb2NrIFtmaXJzdF9ibG9ja11dXG4iCittc2dzdHIgIiIKKyJTa8WCYWRuaWE6ICVzIFstYiByb3ptX2Jsb2t1XSBbLWkgcGxpa193ZWpdIFstbyBwbGlrX3d5al0gWy1zdnduZl1cbiIKKyIgICAgICAgWy1jIGJsb2vDs3dfbmFyYXpdIFstZCB3c3Bfb3DDs8W6bl9tacSZZHp5X29kY3p5dGFtaV1cbiIKKyIgICAgICAgWy1lIG1ha3Nfd2FkbGl3eWNoX2Jsb2vDs3ddIFstcCBwcnplYmllZ8Ozd11cbiIKKyIgICAgICAgWy10IHd6w7NyX3Rlc3Rvd3kgWy10IHd6w7NyX3Rlc3Rvd3kgWy4uLl1dXVxuIgorIiAgICAgICB1cnrEhWR6ZW5pZSBbb3N0YXRuaV9ibG9rIFtwaWVyd3N6eV9ibG9rXV1cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBUaGUgLW4gYW5kIC13IG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzOiBPcGNqZSAtbiBpIC13IHd5a2x1Y3phasSFIHNpxJkgd3phamVtbmllLlxuIgorIlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICIlNi4yZiUlIGRvbmUsICVzIGVsYXBzZWQuICglZC8lZC8lZCBlcnJvcnMpIgorbXNnc3RyICJHb3Rvd2UgdyAlNi4yZiUlLCBtaW7EmcWCbyAlcyAoYsWCxJlkw7N3OiAlZC8lZC8lZCkiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzI4Cittc2dpZCAiVGVzdGluZyB3aXRoIHJhbmRvbSBwYXR0ZXJuOiAiCittc2dzdHIgIlRlc3Rvd2FuaWUgd3pvcmNlbSBsb3Nvd3ltOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzQ2Cittc2dpZCAiVGVzdGluZyB3aXRoIHBhdHRlcm4gMHgiCittc2dzdHIgIlRlc3Rvd2FuaWUgd3pvcmNlbSAweCIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNzggbWlzYy9iYWRibG9ja3MuYzo0NTEKK21zZ2lkICJkdXJpbmcgc2VlayIKK21zZ3N0ciAicG9kY3phcyBwcnplc2tha2l3YW5pYSIKKworIzogbWlzYy9iYWRibG9ja3MuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIgorbXNnc3RyICJEeml3bmEgd2FydG/Fm8SHICglbGQpIHcgZG9fcmVhZFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ3NgorbXNnaWQgImR1cmluZyBleHQyZnNfc3luY19kZXZpY2UiCittc2dzdHIgInBvZGN6YXMgZXh0MmZzX3N5bmNfZGV2aWNlIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ5NiBtaXNjL2JhZGJsb2Nrcy5jOjc1OAorbXNnaWQgIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iCittc2dzdHIgInBvZGN6YXMgcm96cG9jenluYW5pYSBpdGVyYWNqaSBwbyBsacWbY2llIHdhZGxpd3ljaCBibG9rw7N3IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxMSBtaXNjL2JhZGJsb2Nrcy5jOjYxMSBtaXNjL2JhZGJsb2Nrcy5jOjc2OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVycyIKK21zZ3N0ciAicG9kY3phcyBwcnp5ZHppZWxhbmlhIGJ1Zm9yw7N3IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBibG9ja3MgJWx1IHRvICVsdVxuIgorbXNnc3RyICJTcHJhd2R6YW5pZSBibG9rw7N3IG9kICVsdSBkbyAlbHVcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjAKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLW9ubHkgbW9kZVxuIgorbXNnc3RyICJQb3N6dWtpd2FuaWUgd2FkbGl3eWNoIGJsb2vDs3cgdyB0cnliaWUgdHlsa28gZG8gb2Rjenl0dVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyOQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChyZWFkLW9ubHkgdGVzdCk6ICIKK21zZ3N0ciAiUG9zenVraXdhbmllIHdhZGxpd3ljaCBibG9rw7N3ICh0eWxrbyBvZGN6eXQpOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTM2IG1pc2MvYmFkYmxvY2tzLmM6NjQzIG1pc2MvYmFkYmxvY2tzLmM6Njg1CisjOiBtaXNjL2JhZGJsb2Nrcy5jOjgzMgorbXNnaWQgIlRvbyBtYW55IGJhZCBibG9ja3MsIGFib3J0aW5nIHRlc3RcbiIKK21zZ3N0ciAiWmJ5dCBkdcW8byB3YWRsaXd5Y2ggYmxva8OzdywgcHJ6ZXJ3YW5pZSB0ZXN0dVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYxOAorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJQb3N6dWtpd2FuaWUgd2FkbGl3eWNoIGJsb2vDs3cgdyB0cnliaWUgb2Rjenl0dSBpIHphcGlzdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYyMCBtaXNjL2JhZGJsb2Nrcy5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tIGJsb2NrICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiT2QgYmxva3UgJWx1IGRvICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY3NQorbXNnaWQgIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIgorbXNnc3RyICJPZGN6eXQgaSBwb3LDs3dueXdhbmllOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NzgxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJQb3N6dWtpd2FuaWUgd2FkbGl3eWNoIGJsb2vDs3cgdyB0cnliaWUgeiBuaWVkZXN0cnVrdHl3bnltIHphcGlzZW1cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODcKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAobm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgdGVzdClcbiIKK21zZ3N0ciAiUG9zenVraXdhbmllIHdhZGxpd3ljaCBibG9rw7N3IChvZGN6eXQgaSBuaWVkZXN0cnVrdHl3bnkgemFwaXMpXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzk0Cittc2dpZCAiIgorIlxuIgorIkludGVycnVwdCBjYXVnaHQsIGNsZWFuaW5nIHVwXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPdHJ6eW1hbm8gcHJ6ZXJ3YW5pZSwgc3ByesSFdGFtXG4iCisiXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmluZyB0ZXN0IGRhdGEgd3JpdGUsIGJsb2NrICVsdSIKK21zZ3N0ciAicG9kY3phcyB6YXBpc3UgdGVzdG93eWNoIGRhbnljaCwgYmxvayAlbHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTk4IG1pc2MvdXRpbC5jOjMyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBtb3VudGVkOyAiCittc2dzdHIgIiVzIGplc3QgemFtb250b3dhbnk7ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDAwCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgImJhZGJsb2NrcyB3eW11c3pvbmUgbWltbyB0by4gTWFtIG5hZHppZWrEmSwgxbxlIC9ldGMvbXRhYiBzacSZIG15bGkuXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwNQorbXNnaWQgIml0J3Mgbm90IHNhZmUgdG8gcnVuIGJhZGJsb2NrcyFcbiIKK21zZ3N0ciAibmllIGplc3QgYmV6cGllY3puaWUgdXJ1Y2hhbWlhxIcgYmFkYmxvY2tzIVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMTAgbWlzYy91dGlsLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGFwcGFyZW50bHkgaW4gdXNlIGJ5IHRoZSBzeXN0ZW07ICIKK21zZ3N0ciAiJXMgamVzdCBuYWp3eXJhxbpuaWVqIHXFvHl3YW55IHByemV6IHN5c3RlbTsgIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMTMKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAiYmFkYmxvY2tzIHd5bXVzem9uZSBtaW1vIHRvLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyAtICVzIgorbXNnc3RyICJixYLEmWRueSAlcyAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGJpZyBtYXggYmFkIGJsb2NrcyBjb3VudCAldSAtIG1heGltdW0gaXMgJXUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGVzdF9wYXR0ZXJuIC0gJXMiCittc2dzdHIgIm5pZSBtb8W8bmEgcHJ6eWR6aWVsacSHIHBhbWnEmWNpIG5hIHd6b3J6ZWNfdGVzdG93eSAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExODQKK21zZ2lkICJNYXhpbXVtIG9mIG9uZSB0ZXN0X3BhdHRlcm4gbWF5IGJlIHNwZWNpZmllZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiVyB0cnliaWUgb2Rjenl0dS16YXBpc3UgbW/FvG5hIHBvZGHEhyBuYWp3ecW8ZWogamVkZW4gd3pvcnplYyB0ZXN0b3d5IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExOTAKK21zZ2lkICJSYW5kb20gdGVzdF9wYXR0ZXJuIGlzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJXIHRyeWJpZSBzYW1lZ28gb2Rjenl0dSBuaWUgbW/FvG5hIHBvZGHEhyB3em9yY2FfdGVzdG93ZWdvIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMDQKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgbWFudWFsbHlcbiIKK21zZ3N0ciAiIgorIk5pZSBtb8W8bmEgb2tyZcWbbGnEhyByb3ptaWFydSB1cnrEhWR6ZW5pYTsgdHJ6ZWJhIHBvZGHEh1xuIgorInJvem1pYXIgcsSZY3puaWVcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjEwCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBkZXZpY2Ugc2l6ZSIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgb2tyZcWbbGVuaWEgcm96bWlhcnUgdXJ6xIVkemVuaWEiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIxNQorbXNnaWQgImxhc3QgYmxvY2siCittc2dzdHIgIm9zdGF0bmkgYmxvayIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjIxCittc2dpZCAiZmlyc3QgYmxvY2siCittc2dzdHIgInBpZXJ3c3p5IGJsb2siCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0aW5nIGJsb2NrICglbGx1KTogbXVzdCBiZSBsZXNzIHRoYW4gJWxsdSIKK21zZ3N0ciAiYsWCxJlkbnkgcG9jesSFdGtvd3kgYmxvayAoJWxsdSk6IG11c2kgYnnEhyBtbmllanN6eSBuacW8ICVsbHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGVuZCBibG9jayAoJWxsdSk6IG11c3QgYmUgMzItYml0IHZhbHVlIgorbXNnc3RyICJixYLEmWRueSBwb2N6xIV0a293eSBibG9rICglbGx1KTogbXVzaSBiecSHIHdhcnRvxZtjacSFIDMyLWJpdG93xIUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI4NworbXNnaWQgIndoaWxlIGNyZWF0aW5nIGluLW1lbW9yeSBiYWQgYmxvY2tzIGxpc3QiCittc2dzdHIgInBvZGN6YXMgdHdvcnplbmlhIGxpc3R5IHdhZGxpd3ljaCBibG9rw7N3IHcgcGFtacSZY2kiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI5NgorbXNnaWQgImlucHV0IGZpbGUgLSBiYWQgZm9ybWF0IgorbXNnc3RyICJwbGlrIHdlasWbY2lvd3kgLSBixYLEmWRueSBmb3JtYXQiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTMwNCBtaXNjL2JhZGJsb2Nrcy5jOjEzMTMKK21zZ2lkICJ3aGlsZSBhZGRpbmcgdG8gaW4tbWVtb3J5IGJhZCBibG9jayBsaXN0IgorbXNnc3RyICJwb2RjemFzIGRvZGF3YW5pYSBkbyBsaXN0eSB3YWRsaXd5Y2ggYmxva8OzdyB3IHBhbWnEmWNpIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEzMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFzcyBjb21wbGV0ZWQsICV1IGJhZCBibG9ja3MgZm91bmQuICglZC8lZC8lZCBlcnJvcnMpXG4iCittc2dzdHIgIiIKKyJQcnplYmllZyB6YWtvxYRjem9ueSwgem5hbGV6aW9ubyAldSB3YWRsaXd5Y2ggYmxva8OzdyAoYsWCxJlkw7N3OiAlZC8lZC8lZCkuXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZmXSBbLSs9YUFjQ2REZWlqc1N0VHVdIFstdiB2ZXJzaW9uXSBmaWxlcy4uLlxuIgorbXNnc3RyICJTa8WCYWRuaWE6ICVzIFstUlZmXSBbLSs9YUFjQ2REZWlqc1N0VHVdIFstdiB3ZXJzamFdIHBsaWtpLi4uXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB2ZXJzaW9uIC0gJXNcbiIKK21zZ3N0ciAiYsWCxJlkbmEgd2Vyc2phIC0gJXNcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyMDEgbWlzYy9sc2F0dHIuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHN0YXQgJXMiCittc2dzdHIgInBvZGN6YXMgcHLDs2J5IHN0YXQgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgInBvZGN6YXMgb2Rjenl0dSBmbGFnICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIxMyBtaXNjL2NoYXR0ci5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncyBvZiAlcyBzZXQgYXMgIgorbXNnc3RyICJGbGFnaSAlcyB1c3Rhd2lvbm8gamFrbyAiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgInBvZGN6YXMgdXN0YXdpYW5pYSBmbGFnICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uIG9mICVzIHNldCBhcyAlbHVcbiIKK21zZ3N0ciAiV2Vyc2phICVzIHVzdGF3aW9uYSBqYWtvICVsdVxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgInBvZGN6YXMgdXN0YXdpYW5pYSB3ZXJzamkgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjY3Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgcGF0aCB2YXJpYWJsZSBpbiBjaGF0dHJfZGlyX3Byb2MiCittc2dzdHIgIk5pZSBtb8W8bmEgcHJ6eWR6aWVsacSHIHptaWVubmVqIHBhdGggdyBjaGF0dHJfZGlyX3Byb2MiCisKKyM6IG1pc2MvY2hhdHRyLmM6MzA3Cittc2dpZCAiPSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtIGFuZCArXG4iCittc2dzdHIgIj0gamVzdCBuaWVrb21wYXR5YmlsbmUgeiAtIGkgK1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjMxNQorbXNnaWQgIk11c3QgdXNlICctdicsID0sIC0gb3IgK1xuIgorbXNnc3RyICJUcnplYmEgdcW8ecSHICctdicsID0sIC0gbHViICtcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWJmaGl4Vl0gWy1vIHN1cGVyYmxvY2s9PG51bT5dIFstbyBibG9ja3NpemU9PG51bT5dIGRldmljZVxuIgorbXNnc3RyICIiCisiU2vFgmFkbmlhOiAlcyBbLWJmaGl4Vl0gWy1vIHN1cGVyYmxvaz08bnVtZXI+XSBbLW8gYmxvY2tzaXplPTxyb3ptaWFyPl0gIgorInVyesSFZHplbmllXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNTkKK21zZ2lkICJibG9ja3MiCittc2dzdHIgImJsb2vDs3ciCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNjkKK21zZ2lkICJjbHVzdGVycyIKK21zZ3N0ciAia2xhc3Ryw7N3IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkdyb3VwICVsdTogKEJsb2NrcyAiCittc2dzdHIgIkdydXBhICVsdTogKEJsb2tpICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIENoZWNrc3VtIDB4JTA0eCIKK21zZ3N0ciAiICBTdW1hIGtvbnRyb2xuYSAweCUwNHgiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChFWFBFQ1RFRCAweCUwNHgpIgorbXNnc3RyICIgKE9DWkVLSVdBTkEgMHglMDR4KSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICIsIHVudXNlZCBpbm9kZXMgJXVcbiIKK21zZ3N0ciAiLCBuaWUgdcW8eXdhbnljaCBpLXfEmXrFgsOzdzogJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICVzIHN1cGVyYmxvY2sgYXQgIgorbXNnc3RyICIgICVzIHN1cGVyYmxvayBwb2QgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE0Cittc2dpZCAiUHJpbWFyeSIKK21zZ3N0ciAiR8WCw7N3bnkiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTQKK21zZ2lkICJCYWNrdXAiCittc2dzdHIgIlphcGFzb3d5IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE4Cittc2dpZCAiLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAiCittc2dzdHIgIiwgRGVza3J5cHRvcnkgZ3J1cCBwb2QgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjIyCittc2dpZCAiIgorIlxuIgorIiAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgIFphcmV6ZXJ3b3dhbmUgYmxva2kgR0RUIHBvZCAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjkKK21zZ2lkICIgR3JvdXAgZGVzY3JpcHRvciBhdCAiCittc2dzdHIgIiwgRGVza3J5cHRvcnkgZ3J1cCBwb2QgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM1Cittc2dpZCAiICBCbG9jayBiaXRtYXAgYXQgIgorbXNnc3RyICIgIEJpdG1hcGEgYmxva8OzdyBwb2QgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM5Cittc2dpZCAiLCBJbm9kZSBiaXRtYXAgYXQgIgorbXNnc3RyICIsIGJpdG1hcGEgaS13xJl6xYLDs3cgcG9kICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0MworbXNnaWQgIiIKKyJcbiIKKyIgIElub2RlIHRhYmxlIGF0ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgVGFibGljYSBpLXfEmXrFgsOzdyBwb2QgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgICV1IGZyZWUgJXMsICV1IGZyZWUgaW5vZGVzLCAldSBkaXJlY3RvcmllcyVzIgorbXNnc3RyICIiCisiXG4iCisiICB3b2xueWNoICUyJHM6ICUxJHUsIHdvbG55Y2ggaS13xJl6xYLDs3c6ICUzJHUsIGthdGFsb2fDs3c6ICU0JHUlNSRzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgJXUgdW51c2VkIGlub2Rlc1xuIgorbXNnc3RyICIsIG5pZSB1xbx5d2FueWNoIGktd8SZesWCw7N3OiAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU5Cittc2dpZCAiICBGcmVlIGJsb2NrczogIgorbXNnc3RyICIgIFdvbG5lIGJsb2tpOiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNzQKK21zZ2lkICIgIEZyZWUgaW5vZGVzOiAiCittc2dzdHIgIiAgV29sbmUgaS13xJl6xYJ5OiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMTAKK21zZ2lkICJ3aGlsZSBwcmludGluZyBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAicG9kY3phcyB3eXBpc3l3YW5pYSBsaXN0eSB3YWRsaXd5Y2ggYmxva8OzdyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2tzOiAldSIKK21zZ3N0ciAiV2FkbGl3ZSBibG9raTogJXUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNDUgbWlzYy90dW5lMmZzLmM6MzQ3Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJwb2RjemFzIG9kY3p5dHUgaS13xJl6xYJhIGtyb25pa2kiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNTEKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInBvZGN6YXMgb3R3aWVyYW5pYSBpLXfEmXrFgmEga3JvbmlraSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1NworbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlciBibG9jayIKK21zZ3N0ciAicG9kY3phcyBvZGN6eXR1IHN1cGVyYmxva3Uga3JvbmlraSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2NAorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXIgaW52YWxpZCFcbiIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIHN1cGVyYmxva3Uga3JvbmlraSFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2NworbXNnaWQgIkpvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAiCittc2dzdHIgIkNlY2h5IGtyb25pa2k6ICAgICAgICAgICAgICAgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM4MAorbXNnaWQgIkpvdXJuYWwgc2l6ZTogICAgICAgICAgICAgIgorbXNnc3RyICJSb3ptaWFyIGtyb25pa2k6ICAgICAgICAgICAgICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKK21zZ3N0ciAiIgorIkTFgnVnb8WbxIcga3JvbmlraTogICAgICAgICAgICAgICV1XG4iCisiU2Vrd2VuY2phIGtyb25pa2k6ICAgICAgICAgICAgMHglMDh4XG4iCisiUG9jesSFdGVrIGtyb25pa2k6ICAgICAgICAgICAgICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBlcnJubzogICAgICAgICAgICAlZFxuIgorbXNnc3RyICJCxYLEhWQga3JvbmlraTogICAgICAgICAgICAgJWRcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQxNSBtaXNjL3R1bmUyZnMuYzoxOTYKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAicG9kY3phcyBvZGN6eXR1IHN1cGVyYmxva3Uga3JvbmlraSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQyMworbXNnaWQgIkNvdWxkbid0IGZpbmQgam91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlcnMiCittc2dzdHIgIk5pZSBtb8W8bmEgem5hbGXFusSHIG1hZ2ljem55Y2ggbGljemIgc3VwZXJibG9rdSBrcm9uaWtpIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIGJsb2NrIHNpemU6ICAgICAgICV1XG4iCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgZmlyc3QgYmxvY2s6ICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIG51bWJlciBvZiB1c2VyczogICV1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJSb3ptaWFyIGJsb2t1IGtyb25pa2k6ICAgICAgICAldVxuIgorIkTFgnVnb8WbxIcga3JvbmlraTogICAgICAgICAgICAgICV1XG4iCisiUGllcndzenkgYmxvayBrcm9uaWtpOiAgICAgICAgJXVcbiIKKyJTZWt3ZW5jamEga3JvbmlraTogICAgICAgICAgICAweCUwOHhcbiIKKyJQb2N6xIV0ZWsga3JvbmlraTogICAgICAgICAgICAgJXVcbiIKKyJMaWN6YmEgdcW8eXRrb3duaWvDs3cga3JvbmlraTogICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB1c2VyczogICAgICAgICAgICAlc1xuIgorbXNnc3RyICJVxbx5dGtvd25pY3kga3JvbmlraTogICAgICAgICAgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ1NiBtaXNjL21rZTJmcy5jOjc0MyBtaXNjL3R1bmUyZnMuYzoxMjExCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIG9wdGlvbnMhXG4iCittc2dzdHIgIk5pZSBtb8W8bmEgcHJ6eWR6aWVsacSHIHBhbWnEmWNpIGRvIGFuYWxpenkgb3BjamkhXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdXBlcmJsb2NrIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiQsWCxJlkbnkgcGFyYW1ldHIgc3VwZXJibG9jazogJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJsb2Nrc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIkLFgsSZZG55IHBhcmFtZXRyIGJsb2Nrc2l6ZTogJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjUwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIGV4dGVuZGVkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0c3VwZXJibG9jaz08c3VwZXJibG9jayBudW1iZXI+XG4iCisiXHRibG9ja3NpemU9PGJsb2Nrc2l6ZT5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlBvZGFubyBixYLEmWRuZSBvcGNqZSByb3pzemVyem9uZTogJXMuXG4iCisiXG4iCisiT3BjamUgcm96c3plcnpvbmUgc8SFIG9kZHppZWxhbmUgcHJ6ZWNpbmthbWkgaSBtb2fEhSBwcnp5am1vd2HEhyBwYXJhbWV0cixcbiIKKyJcdGt0w7NyeSBqZXN0IHVzdGF3aWFueSB6bmFraWVtICc9Jy5cbiIKKyJcbiIKKyJQb3ByYXduZSBvcGNqZSByb3pzemVyem9uZSB0bzpcbiIKKyJcdHN1cGVyYmxvY2s9PG51bWVyIHN1cGVyYmxva3U+XG4iCisiXHRibG9ja3NpemU9PHJvem1pYXIgYmxva3U+XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NjggbWlzYy9ta2UyZnMuYzoxNzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXNcbiIKK21zZ3N0ciAiXHRVxbx5d2FuZSAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjA2IG1pc2MvZTJpbWFnZS5jOjE1ODIgbWlzYy90dW5lMmZzLmM6MjA2MAorIzogcmVzaXplL21haW4uYzozMTkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiTmllIG1vxbxuYSB6bmFsZcW6xIcgcG9wcmF3bmVnbyBzdXBlcmJsb2t1IHN5c3RlbXUgcGxpa8Ozdy5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICVzOiBlcnJvciByZWFkaW5nIGJpdG1hcHM6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogJXM6IGLFgsSFZCBwb2RjemFzIGN6eXRhbmlhIGJpdG1hcDogJXNcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbIC1yfFEgXSBbIC1mciBdIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIlNrxYJhZG5pYTogJXMgWy1yfFEgXSBbIC1mciBdIHVyesSFZHplbmllIHBsaWtfb2JyYXp1XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLUkgZGV2aWNlIGltYWdlLWZpbGVcbiIKK21zZ3N0ciAiICAgICAgICVzIC1JIHVyesSFZHplbmllIHBsaWtfb2JyYXp1XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICVzIC1yYSAgWyAgLWNmbnAgIF0gWyAtbyBzcmNfb2Zmc2V0IF0gWyAtTyBkZXN0X29mZnNldCBdIHNyY19mcyAiCisiWyBkZXN0X2ZzIF1cbiIKK21zZ3N0ciAiIgorIiAgICAgICAlcyAtcmEgIFsgIC1jbmZwICBdIFsgLW8gb2Zmc2V0X8W6ciBdIFsgLU8gb2Zmc2V0X2RvYyBdIGZzX8W6ciAiCisiWyBmc19kb2MgXVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjkgbWlzYy9lMmltYWdlLmM6NTc2IG1pc2MvZTJpbWFnZS5jOjU4MgorIzogbWlzYy9lMmltYWdlLmM6MTE3OAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVyIgorbXNnc3RyICJwb2RjemFzIHByenlkemllbGFuaWEgYnVmb3JhIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBibG9jayAlbGx1XG4iCittc2dzdHIgIlphcGlzeXdhbmllIGJsb2t1ICVsbHVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHdyaXRpbmcgYmxvY2sgJWxsdSIKK21zZ3N0ciAiYsWCxIVkIHByenkgemFwaXNpZSBibG9rdSAlbGx1IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxOTEKK21zZ2lkICJlcnJvciBpbiBnZW5lcmljX3dyaXRlKCkiCittc2dzdHIgImLFgsSFZCB3IGdlbmVyaWNfd3JpdGUoKSIKKworIzogbWlzYy9lMmltYWdlLmM6MjA4Cittc2dpZCAiRXJyb3I6IGhlYWRlciBzaXplIGlzIGJpZ2dlciB0aGFuIHdydF9zaXplXG4iCittc2dzdHIgIkLFgsSFZDogcm96bWlhciBuYWfFgsOzd2thIGplc3Qgd2nEmWtzenkgbmnFvCB3cnRfc2l6ZVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMTMKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBoZWFkZXIgYnVmZmVyXG4iCittc2dzdHIgIk5pZSBtb8W8bmEgcHJ6eWR6aWVsacSHIGJ1Zm9yYSBuYWfFgsOzd2thXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI0MQorbXNnaWQgIndoaWxlIHdyaXRpbmcgc3VwZXJibG9jayIKK21zZ3N0ciAicG9kY3phcyB6YXBpc3Ugc3VwZXJibG9rdSIKKworIzogbWlzYy9lMmltYWdlLmM6MjUwCittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAicG9kY3phcyB6YXBpc3UgdGFiZWxpIGktd8SZesWCw7N3IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNTgKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAicG9kY3phcyB6YXBpc3UgYml0bWFweSBibG9rw7N3IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNjYKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAicG9kY3phcyB6YXBpc3UgYml0bWFweSBpLXfEmXrFgsOzdyIKKworIzogbWlzYy9lMmltYWdlLmM6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCByZWNfbGVuICglZClcbiIKK21zZ3N0ciAiVXN6a29kem9ueSBibG9rIGthdGFsb2d1ICVsbHU6IGLFgsSZZG5lIHJlY19sZW4gKCVkKVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBkaXJlY3RvcnkgYmxvY2sgJWxsdTogYmFkIG5hbWVfbGVuICglZClcbiIKK21zZ3N0ciAiVXN6a29kem9ueSBibG9rIGthdGFsb2d1ICVsbHU6IGLFgsSZZG5lIG5hbWVfbGVuICglZClcbiIKKworIzogbWlzYy9lMmltYWdlLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsbHUgLyAlbGx1IGJsb2NrcyAoJWQlJSkiCittc2dzdHIgIkJsb2vDs3c6ICVsbHUgLyAlbGx1ICglZCUlKSIKKworIzogbWlzYy9lMmltYWdlLmM6NTg2IG1pc2MvZTJpbWFnZS5jOjYyNgorbXNnaWQgIkNvcHlpbmcgIgorbXNnc3RyICJLb3Bpb3dhbmllICIKKworIzogbWlzYy9lMmltYWdlLmM6NjIzCittc2dpZCAiIgorIlN0b3BwaW5nIG5vdyB3aWxsIGRlc3Ryb3kgdGhlIGZpbGVzeXN0ZW0sIGludGVycnVwdCBhZ2FpbiBpZiB5b3UgYXJlIHN1cmVcbiIKK21zZ3N0ciAiIgorIlphdHJ6eW1hbmllIHRlcmF6IHpuaXN6Y3p5IHN5c3RlbSBwbGlrw7N3OyBhYnkgcG90d2llcmR6acSHLCBtb8W8bmEgcHJ6ZXJ3YcSHICIKKyJwb25vd25pZVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHJlbWFpbmluZyBhdCAlLjJmIE1CL3MiCittc2dzdHIgIiAlcyBwb3pvc3RhxYJvIHByenkgJS4yZiBNQi9zIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo2NjEgbWlzYy9lMmltYWdlLmM6MTE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIGJsb2NrICVsbHUiCittc2dzdHIgImLFgsSFZCBwcnp5IG9kY3p5Y2llIGJsb2t1ICVsbHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3BpZWQgJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSBpbiAlcyAiCittc2dzdHIgIlNrb3Bpb3dhbm8gYmxva8OzdzogJWxsdSAvICVsbHUgKCVkJSUpIHcgJXMgIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXQgJS4yZiBNQi9zIgorbXNnc3RyICJwcnp5ICUuMmYgTUIvcyIKKworIzogbWlzYy9lMmltYWdlLmM6NzU1Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBsMSB0YWJsZSIKK21zZ3N0ciAicG9kY3phcyBwcnp5ZHppZWxhbmlhIHRhYmxpY3kgbDEiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjgwMAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgbDIgY2FjaGUiCittc2dzdHIgInBvZGN6YXMgcHJ6eWR6aWVsYW5pYSBidWZvcmEgbDIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjgyMworbXNnaWQgIiIKKyJXYXJuaW5nOiBUaGVyZSBhcmUgc3RpbGwgdGFibGVzIGluIHRoZSBjYWNoZSB3aGlsZSBwdXR0aW5nIHRoZSBjYWNoZSwgZGF0YSAiCisid2lsbCBiZSBsb3N0IHNvIHRoZSBpbWFnZSBtYXkgbm90IGJlIHZhbGlkLlxuIgorbXNnc3RyICIiCisiVXdhZ2E6IHcgcGFtacSZY2kgcG9kcsSZY3puZWogc8SFIG5hZGFsIHRhYmxpY2UgdyB0cmFrY2llIHphcGlzdSBidWZvcmEsIGRhbmUgIgorInpvc3RhbsSFIHV0cmFjb25lLCB3acSZYyBvYnJheiBtb8W8ZSBuaWUgYnnEhyBwb3ByYXdueS5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTE0NQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgZXh0Ml9xY293Ml9pbWFnZSIKK21zZ3N0ciAicG9kY3phcyBwcnp5ZHppZWxhbmlhIGV4dF9xY293Ml9pbWFnZSIKKworIzogbWlzYy9lMmltYWdlLmM6MTE1MgorbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBleHQyX3Fjb3cyX2ltYWdlIgorbXNnc3RyICJwb2RjemFzIGluaWNqb3dhbmlhIGV4dDJfcWNvdzJfaW1hZ2UiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyMTEgbWlzYy9lMmltYWdlLmM6MTIyOQorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yOiBtdWx0aXBsZSBzZXF1ZW50aWFsIHJlZmNvdW50IGJsb2NrcyBjcmVhdGVkIVxuIgorbXNnc3RyICIiCisiQsWCxIVkIHByb2dyYW11OiB1dHdvcnpvbm8gd2llbGUgYmxva8OzdyBzZWt3ZW5jeWpueWNoIGxpY3puaWvDs3cgb2R3b8WCYcWEIVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjY5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgInBvZGN6YXMgcHJ6eWR6aWVsYW5pYSBiaXRtYXB5IGJsb2vDs3ciCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyNzgKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIHNjcmFtYmxlIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAicG9kY3phcyBwcnp5ZHppZWxhbmlhIGJpdG1hcHkgYmxva8OzdyBzY3JhbWJsZSIKKworIzogbWlzYy9lMmltYWdlLmM6MTI4NQorbXNnaWQgIlNjYW5uaW5nIGlub2Rlcy4uLlxuIgorbXNnc3RyICJQcnplc3p1a2l3YW5pZSBpLXfEmXrFgsOzdy4uLlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjk3Cittc2dpZCAiQ2FuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIgorbXNnc3RyICJOaWUgbW/FvG5hIHByenlkemllbGnEhyBidWZvcmEgYmxva3UiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzMzYgbWlzYy9lMmltYWdlLmM6MTM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBpdGVyYXRpbmcgb3ZlciBpbm9kZSAldSIKK21zZ3N0ciAicG9kY3phcyBpdGVyYWNqaSBwbyBpLXfEmcW6bGUgJXUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzODEKK21zZ2lkICJSYXcgYW5kIHFjb3cyIGltYWdlcyBjYW5ub3QgYmUgaW5zdGFsbGVkIgorbXNnc3RyICJPYnJhesOzdyBzdXJvd2VnbyBpIHFjb3cyIG5pZSBtb8W8bmEgemFpbnN0YWxvd2HEhyIKKworIzogbWlzYy9lMmltYWdlLmM6MTQwMworbXNnaWQgImVycm9yIHJlYWRpbmcgYml0bWFwcyIKK21zZ3N0ciAiYsWCxIVkIHBvZGN6YXMgb2Rjenl0dSBiaXRtYXAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MTUKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGRldmljZSBmaWxlIgorbXNnc3RyICJwb2RjemFzIG90d2llcmFuaWEgcGxpa3UgdXJ6xIVkemVuaWEiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MjYKK21zZ2lkICJ3aGlsZSByZXN0b3JpbmcgdGhlIGltYWdlIHRhYmxlIgorbXNnc3RyICJwb2RjemFzIG9kdHdhcnphbmlhIHRhYmVsaSBvYnJhenUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MjMKK21zZ2lkICItYSBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHJhdyBvciBRQ09XMiBpbWFnZXMuIgorbXNnc3RyICJPcGNqYSAtYSBtb8W8ZSBiecSHIHXFvHl0YSB0eWxrbyB6IG9icmF6YW1pIHN1cm93eW0gbHViIFFDT1cyLiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUyOQorbXNnaWQgIk9mZnNldHMgYXJlIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIgorbXNnc3RyICJPZmZzZXR5IHPEhSBkb3p3b2xvbmUgdHlsa28geiBvYnJhemFtaSBzdXJvd3ltaS4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MzQKK21zZ2lkICJNb3ZlIG1vZGUgaXMgb25seSBhbGxvd2VkIHdpdGggcmF3IGltYWdlcy4iCittc2dzdHIgIlRyeWIgcHJ6ZXN1bmnEmWNpYSBqZXN0IGRvendvbG9ueSB0eWxrbyB6IG9icmF6YW1pIHN1cm93eW1pLiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUzOQorbXNnaWQgIk1vdmUgbW9kZSByZXF1aXJlcyBhbGwgZGF0YSBtb2RlLiIKK21zZ3N0ciAiVHJ5YiBwcnplc3VuacSZY2lhIHd5bWFnYSB0cnlidSB3c3p5c3RraWNoIGRhbnljaC4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1NDkKK21zZ2lkICJjaGVja2luZyBpZiBtb3VudGVkIgorbXNnc3RyICJzcHJhd2R6YW5pZSwgY3p5IHphbW9udG93YW55IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTU2Cittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgZTJpbWFnZSBvbiBhIFIvVyBtb3VudGVkIGZpbGVzeXN0ZW0gY2FuIHJlc3VsdCBpbiBhblxuIgorImluY29uc2lzdGVudCBpbWFnZSB3aGljaCB3aWxsIG5vdCBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiIKKyJVc2UgLWYgb3B0aW9uIGlmIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGF0LlxuIgorbXNnc3RyICIiCisiXG4iCisiVXJ1Y2hhbWlhbmllIGUyaW1hZ2UgbmEgc3lzdGVtaWUgcGxpa8OzdyB6YW1vbnRvd2FueW0gZG8gb2Rjenl0dSBpIHphcGlzdVxuIgorIm1vxbxlIHNwb3dvZG93YcSHLCDFvGUgb2JyYXogYsSZZHppZSBuaWVzcMOzam55LCBwcnpleiBjbyBuaWUgYsSZZHppZSBwcnp5ZGF0bnlcbiIKKyJkbyBjZWzDs3cgZGlhZ25vc3R5Y3pueWNoLiBBYnkgbmEgcGV3bm8gdG8genJvYmnEhywgbW/FvG5hIHXFvHnEhyBvcGNqaSAtZi5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYwOAorbXNnaWQgIlFDT1cyIGltYWdlIGNhbiBub3QgYmUgd3JpdHRlbiB0byB0aGUgc3Rkb3V0IVxuIgorbXNnc3RyICJPYnJhenUgUUNPVzIgbmllIG1vxbxuYSB6YXBpc2HEhyBuYSBzdGFuZGFyZG93ZSB3eWrFm2NpZSFcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYxNAorbXNnaWQgIkNhbiBub3Qgc3RhdCBvdXRwdXRcbiIKK21zZ3N0ciAiTmllIG1vxbxuYSB3eWtvbmHEhyBzdGF0IG5hIHd5asWbY2l1XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW1hZ2UgKCVzKSBpcyBjb21wcmVzc2VkXG4iCittc2dzdHIgIk9icmF6ICglcykgamVzdCBza29tcHJlc293YW55XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW1hZ2UgKCVzKSBpcyBlbmNyeXB0ZWRcbiIKK21zZ3N0ciAiT2JyYXogKCVzKSBqZXN0IHphc3p5ZnJvd2FueVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjb252ZXJ0IHFjb3cyIGltYWdlICglcykgaW50byByYXcgaW1hZ2UgKCVzKSIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgcHJ6ZWtzenRhxYJjZW5pYSBvYnJhenUgcWNvdzIgKCVzKSBuYSBvYnJheiBzdXJvd3kgKCVzKSIKKworIzogbWlzYy9lMmltYWdlLmM6MTYzOQorbXNnaWQgIlRoZSAtYyBvcHRpb24gb25seSBzdXBwb3J0ZWQgaW4gcmF3IG1vZGVcbiIKK21zZ3N0ciAiT3BjamEgLWMgamVzdCBvYnPFgnVnaXdhbmEgdHlsa28gdyB0cnliaWUgc3Vyb3d5bVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjQ0Cittc2dpZCAiVGhlIC1jIG9wdGlvbiBub3Qgc3VwcG9ydGVkIHdoZW4gd3JpdGluZyB0byBzdGRvdXRcbiIKK21zZ3N0ciAiT3BjamEgLWMgbmllIGplc3Qgb2JzxYJ1Z2l3YW5hIHByenkgemFwaXNpZSBuYSBzdGFuZGFyZG93ZSB3eWpzY2llXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NTEKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGNoZWNrX2J1ZiIKK21zZ3N0ciAicG9kY3phcyBwcnp5ZHppZWxhbmlhIGNoZWNrX2J1ZiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY1NworbXNnaWQgIlRoZSAtcCBvcHRpb24gb25seSBzdXBwb3J0ZWQgaW4gcmF3IG1vZGVcbiIKK21zZ3N0ciAiT3BjamEgLXAgamVzdCBvYnPFgnVnaXdhbmEgdHlsa28gdyB0cnliaWUgc3Vyb3d5bVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsb2NrcyBhbHJlYWR5IGNvbnRhaW5lZCB0aGUgZGF0YSB0byBiZSBjb3BpZWRcbiIKK21zZ3N0ciAiJWQgYmxva8OzdyBqdcW8IHphd2llcmHFgm8gZGFuZSBkbyBza29waW93YW5pYVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgb3BlbiAlc1xuIgorbXNnc3RyICJlMmxhYmVsOiBuaWUgbW/FvG5hIG90d29yennEhyAlc1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IG5pZSBtb8W8bmEgcHJ6ZWrFm8SHIGRvIHN1cGVyYmxva3VcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3IgcmVhZGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGLFgsSFZCBwb2RjemFzIG9kY3p5dHUgc3VwZXJibG9rdVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBub3QgYW4gZXh0MiBmaWxlc3lzdGVtXG4iCittc2dzdHIgImUybGFiZWw6IHRvIG5pZSBqZXN0IHN5c3RlbSBwbGlrw7N3IGV4dDJcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6OTcgbWlzYy90dW5lMmZzLmM6MjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBsYWJlbCB0b28gbG9uZywgdHJ1bmNhdGluZy5cbiIKK21zZ3N0ciAiVXdhZ2E6IGV0eWtpZXRhIHphIGTFgnVnYSwgc2tyw7Njb25vLlxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9jayBhZ2FpblxuIgorbXNnc3RyICJlMmxhYmVsOiBuaWUgbW/FvG5hIHByemVqxZvEhyBwb25vd25pZSBkbyBzdXBlcmJsb2t1XG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciB3cml0aW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogYsWCxIVkIHBvZGN6YXMgemFwaXN1IHN1cGVyYmxva3VcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTE3IG1pc2MvdHVuZTJmcy5jOjg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogZTJsYWJlbCBkZXZpY2UgW25ld2xhYmVsXVxuIgorbXNnc3RyICJTa8WCYWRuaWE6IGUybGFiZWwgdXJ6xIVkemVuaWUgW25vd2EtZXR5a2lldGFdXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIDx0cmFuc2FjdGlvbiBmaWxlPiA8ZmlsZXN5c3RlbT5cbiIKK21zZ3N0ciAiU2vFgmFkbmlhOiAlcyA8cGxpa190cmFuc2FrY2ppPiA8c3lzdGVtX3BsaWvDs3c+XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NTIKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIG9kY3p5dGHEhyBkYW55Y2ggc3lzdGVtdSBwbGlrw7N3XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NjIgbWlzYy9lMnVuZG8uYzo4MyBtaXNjL2UydW5kby5jOjEwOCBtaXNjL2UydW5kby5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX2ZldGNoICVzXG4iCittc2dzdHIgInRkYl9mZXRjaCAlcyBuaWUgcG93aW9kxYJvIHNpxJlcbiIKKworIzogbWlzYy9lMnVuZG8uYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIKK21zZ3N0ciAiQ3phcyBtb250b3dhbmlhIHN5c3RlbXUgcGxpa8OzdyBuaWUgb2Rwb3dpYWRhICV1XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6ODkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gVVVJRCBkaWRuJ3QgbWF0Y2ggXG4iCittc2dzdHIgIlVVSUQgc3lzdGVtdSBwbGlrw7N3IG5pZSBwYXN1amVcbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9vcGVuICVzXG4iCittc2dzdHIgInRkYl9vcGVuICVzIG5pZSBwb3dpb2TFgm8gc2nEmVxuIgorCisjOiBtaXNjL2UydW5kby5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIHNwcmF3ZHphbmlhLCBjenkgJXMgamVzdCB6YW1vbnRvd2FueS5cbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNzUKK21zZ2lkICJlMnVuZG8gc2hvdWxkIG9ubHkgYmUgcnVuIG9uIHVubW91bnRlZCBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICJlMnVuZG8gcG93aW5ubyBiecSHIHVydWNoYW1pYW5lIHR5bGtvIG5hIG9kbW9udG93YW55bSBzeXN0ZW1pZSBwbGlrw7N3XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzXG4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwbGF5ZWQgdHJhbnNhY3Rpb24gb2Ygc2l6ZSAlemQgYXQgbG9jYXRpb24gJWxsdVxuIgorbXNnc3RyICJPZHR3b3J6b25vIHRyYW5zYWtjasSZIHJvem1pYXJ1ICV6ZCB3IHBvxYJvxbxlbml1ICVsbHVcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHdyaXRlICVzXG4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB6YXBpc2HEhyAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogY291bGRuJ3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiVVdBR0E6IG5pZSBtb8W8bmEgb3R3b3J6ecSHICVzOiAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogYmFkIGZvcm1hdCBvbiBsaW5lICVkIG9mICVzXG4iCittc2dzdHIgIlVXQUdBOiB6xYJ5IGZvcm1hdCB3IGxpbmlpICVkIHBsaWt1ICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM3MAorbXNnaWQgIiIKKyJXQVJOSU5HOiBZb3VyIC9ldGMvZnN0YWIgZG9lcyBub3QgY29udGFpbiB0aGUgZnNjayBwYXNzbm9cbiIKKyJcdGZpZWxkLiAgSSB3aWxsIGtsdWRnZSBhcm91bmQgdGhpbmdzIGZvciB5b3UsIGJ1dCB5b3VcbiIKKyJcdHNob3VsZCBmaXggeW91ciAvZXRjL2ZzdGFiIGZpbGUgYXMgc29vbiBhcyB5b3UgY2FuLlxuIgorIlxuIgorbXNnc3RyICIiCisiVVdBR0E6IC9ldGMvZnN0YWIgbmllIHphd2llcmEgcG9sYSBwYXNzbm8gZGxhIGZzY2suXG4iCisiUG9taW7EmSB0ZW4gYsWCxIVkLCBhbGUgL2V0Yy9mc3RhYiBuYWxlxbx5IGphayBuYWpzenliY2llaiBwb3ByYXdpxIcuXG4iCisiXG4iCisKKyM6IG1pc2MvZnNjay5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiAlczogbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6ICVzOiBuaWUgem5hbGV6aW9ub1xuIgorCisjOiBtaXNjL2ZzY2suYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIgorbXNnc3RyICIlczogd2FpdDogTmllIG1hIHdpxJljZWogcHJvY2Vzw7N3IHBvdG9tbnljaD8hP1xuIgorCisjOiBtaXNjL2ZzY2suYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZy4uLiAlcyBmb3IgZGV2aWNlICVzIGV4aXRlZCB3aXRoIHNpZ25hbCAlZC5cbiIKK21zZ3N0ciAiVXdhZ2EuLi4gJXMgZGxhIHVyesSFZHplbmlhICVzIHpha2/FhGN6ecWCIHNpxJkgc3lnbmHFgmVtICVkLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXM6IHN0YXR1cyBpcyAleCwgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIKK21zZ3N0ciAiJXMgJXM6IHN0YXR1cyB3eW5vc2kgJXgsIHRvIHNpxJkgbmllIHBvd2lubm8gbmlnZHkgemRhcnp5xIcuXG4iCisKKyM6IG1pc2MvZnNjay5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5pc2hlZCB3aXRoICVzIChleGl0IHN0YXR1cyAlZClcbiIKK21zZ3N0ciAiU2tvxYRjem9ubyB6ICVzIChzdGF0dXMgd3lqxZtjaWEgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiVzOiBCxYLEhWQgJWQgcG9kY3phcyB3eWtvbnl3YW5pYSBmc2NrLiVzIGRsYSAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzo3NDIKK21zZ2lkICIiCisiRWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSBmaWxlc3lzdGVtIHR5cGVzIHBhc3NlZCB0byAtdCBtdXN0IGJlIHByZWZpeGVkXG4iCisid2l0aCAnbm8nIG9yICchJy5cbiIKK21zZ3N0ciAiIgorIkFsYm8gd3N6eXN0a2llLCBhbGJvIMW8YWRlbiByb2R6YWogc3lzdGVtdSBwbGlrw7N3IHogcG9kYW55Y2ggcG8gLXQgbXVzaSBiecSHXG4iCisicG9wcnplZHpvbnkgJ25vJyBsdWIgJyEnLlxuIgorCisjOiBtaXNjL2ZzY2suYzo3NjEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGVzeXN0ZW0gdHlwZXNcbiIKK21zZ3N0ciAiTmllIG1vxbxuYSBwcnp5ZHppZWxpxIcgcGFtacSZY2kgbmEgcm9kemFqZSBzeXN0ZW3Ds3cgcGxpa8Ozd1xuIgorCisjOiBtaXNjL2ZzY2suYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBza2lwcGluZyBiYWQgbGluZSBpbiAvZXRjL2ZzdGFiOiBiaW5kIG1vdW50IHdpdGggbm9uemVybyBmc2NrIHBhc3MgIgorIm51bWJlclxuIgorbXNnc3RyICIiCisiJXM6IHBvbWluacSZdG8gYsWCxJlkbsSFIGxpbmnEmSB3IC9ldGMvZnN0YWI6IG1vbnRvd2FuaWUgYmluZCB6IG5pZXplcm93eW0gIgorIm51bWVyZW0gcHJ6ZWJpZWd1IGZzY2tcbiIKKworIzogbWlzYy9mc2NrLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6IGNhbm5vdCBjaGVjayAlczogZnNjay4lcyBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNjazogbmllIG1vxbxuYSBzcHJhd2R6acSHICVzOiBmc2NrLiVzIG5pZSB6bmFsZXppb255XG4iCisKKyM6IG1pc2MvZnNjay5jOjk2NworbXNnaWQgIkNoZWNraW5nIGFsbCBmaWxlIHN5c3RlbXMuXG4iCittc2dzdHIgIlNwcmF3ZHphbmllIHdzenlzdGtpY2ggc3lzdGVtw7N3IHBsaWvDs3cuXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS13YWl0aW5nLS0gKHBhc3MgJWQpXG4iCittc2dzdHIgIi0tb2N6ZWtpd2FuaWUtLSAocHJ6ZWJpZWcgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNzgKK21zZ2lkICIiCisiVXNhZ2U6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZmQgXSBdIFstdCBmc3R5cGVdIFtmcy1vcHRpb25zXSBbZmlsZXN5cyAuLi5dXG4iCittc2dzdHIgIiIKKyJTa8WCYWRuaWE6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZGVza3J5cHRvciBdIF0gWy10IHJvZHphai1mc10gW29wY2plLWZzXSAiCisiW3N5c3RlbS1wbGlrw7N3IC4uLl1cbiIKKworIzogbWlzYy9mc2NrLmM6MTEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdG9vIG1hbnkgZGV2aWNlc1xuIgorbXNnc3RyICIlczogemEgZHXFvG8gdXJ6xIVkemXFhFxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTUzIG1pc2MvZnNjay5jOjEyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICIlczogemEgZHXFvG8gcGFyYW1ldHLDs3dcbiIKKworIzogbWlzYy9sc2F0dHIuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmFkbHZdIFtmaWxlcy4uLl1cbiIKK21zZ3N0ciAiU2vFgmFkbmlhOiAlcyBbLVJWYWRsdl0gW3BsaWtpLi4uXVxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIlBvZGN6YXMgb2Rjenl0dSBmbGFnICVzIgorCisjOiBtaXNjL2xzYXR0ci5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgdmVyc2lvbiBvbiAlcyIKK21zZ3N0ciAiUG9kY3phcyBvZGN6eXR1IHdlcnNqaSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSBbLUMgY2x1c3Rlci1zaXplXVxuIgorIlx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIGlub2RlLXNpemVdIFstSiBqb3VybmFsLW9wdGlvbnNdXG4iCisiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKyJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisiXHRbLWcgYmxvY2tzLXBlci1ncm91cF0gWy1MIHZvbHVtZS1sYWJlbF0gWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG4iCisiXHRbLU8gZmVhdHVyZVssLi4uXV0gWy1yIGZzLXJldmlzaW9uXSBbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXVxuIgorIlx0Wy10IGZzLXR5cGVdIFstVCB1c2FnZS10eXBlIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSBkZXZpY2UgW2Jsb2Nrcy0iCisiY291bnRdXG4iCittc2dzdHIgIiIKKyJTa8WCYWRuaWE6ICVzIFstY3wtbCBuYXp3YS1wbGlrdV0gWy1iIHJvem0uYmxva3VdIFstQyByb3ptLmtsYXN0cmFdXG4iCisiXHRbLWkgYmFqdMOzdy1uYS1pLXfEmXplxYJdIFstSSByb3ptLWktd8SZesWCYV0gWy1KIG9wY2plLWtyb25pa2ldXG4iCisiXHRbLUcgcm96bWlhci1ncnVweS1mbGV4XSBbLU4gbGljemJhLWktd8SZesWCw7N3XVxuIgorIlx0Wy1tIHByb2NlbnQtcmV6ZXJ3Li1ibG9rw7N3XSBbLW8gb3MtdHfDs3JjeV1cbiIKKyJcdFstZyBibG9rw7N3LXctZ3J1cGllXSBbLUwgZXR5a2lldGEtd29sdW1lbnVdIFstTSBvc3QuLW1vbnQuLWthdGFsb2ddXG4iCisiXHRbLU8gY2VjaGFbLC4uLl1dIFstciB3ZXJzamEtZnNdIFstRSBvcGNqYS1yb3pzemVyem9uYVssLi4uXV1cbiIKKyJcdFstdCB0eXAtZnNdIFstVCB0eXAtdcW8eWNpYV0gWy1VIFVVSURdIFstam5xdkRGS1NWXSB1cnrEhWR6ZW5pZSBbbGljemJhLSIKKyJibG9rw7N3XVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJSdW5uaW5nIGNvbW1hbmQ6ICVzXG4iCittc2dzdHIgIlVydWNoYW1pYW5pZSBwb2xlY2VuaWE6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBydW4gJyVzJyIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgdXJ1Y2hvbWllbmlhICclcyciCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYzCittc2dpZCAid2hpbGUgcHJvY2Vzc2luZyBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBwcm9ncmFtIgorbXNnc3RyICJwb2RjemFzIHByemV0d2FyemFuaWEgbGlzdHkgd2FkbGl3eWNoIGJsb2vDs3cgeiBwcm9ncmFtdSIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWQgaW4gcHJpbWFyeSBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3IgYXJlYSBiYWQuXG4iCittc2dzdHIgIldhZGxpd3kgYmxvayAlZCB3IGfFgsOzd255bSBzdXBlcmJsb2t1L29ic3phcnplIGRlc2tyeXB0b3JhIGdydXAuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrcyAldSB0aHJvdWdoICV1IG11c3QgYmUgZ29vZCBpbiBvcmRlciB0byBidWlsZCBhIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIkJsb2tpIG9kICV1IGRvICV1IG11c3rEhSBiecSHIGRvYnJlLCBhYnkgc3R3b3J6ecSHIHN5c3RlbSBwbGlrw7N3LlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI5NQorbXNnaWQgIkFib3J0aW5nLi4uLlxuIgorbXNnc3RyICJQcnplcndhbm8uLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHRoZSBiYWNrdXAgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9ycyBhdCBibG9jayAldSBjb250YWluXG4iCisiXHRiYWQgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiVXdhZ2E6IHphcGFzb3d5IHN1cGVyYmxvay9kZXNrcnlwdG9yeSBncnVwIHcgYmxva3UgJXUgemF3aWVyYWrEhVxuIgorIlx0d2FkbGl3ZSBibG9raS5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzozMzQKK21zZ2lkICJ3aGlsZSBtYXJraW5nIGJhZCBibG9ja3MgYXMgdXNlZCIKK21zZ3N0ciAicG9kY3phcyB6YXpuYWN6YW5pYSB3YWRsaXd5Y2ggYmxva8OzdyBqYWtvIHXFvHl3YW5lIgorCisjOiBtaXNjL21rZTJmcy5jOjM4NgorbXNnaWQgIldyaXRpbmcgaW5vZGUgdGFibGVzOiAiCittc2dzdHIgIlphcGlzIHRhYmxpY3kgaS13xJl6xYLDs3c6ICIKKworIzogbWlzYy9ta2UyZnMuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCB3cml0ZSAlZCBibG9ja3MgaW4gaW5vZGUgdGFibGUgc3RhcnRpbmcgYXQgJWxsdTogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5pZSB1ZGHFgm8gc2nEmSB6YXBpc2HEhyAlZCBibG9rw7N3IHcgdGFibGljeSBpLXfEmXrFgsOzdyBwb2N6xIV3c3p5IG9kICVsbHU6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDIxIG1pc2MvbWtlMmZzLmM6MjQ3OSBtaXNjL21rZTJmcy5jOjI3NjQKK21zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorbXNnc3RyICJ6YWtvxYRjem9ubyAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0MzIKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyByb290IGRpciIKK21zZ3N0ciAicG9kY3phcyB0d29yemVuaWEgZ8WCw7N3bmVnbyBrYXRhbG9ndSIKKworIzogbWlzYy9ta2UyZnMuYzo0MzkKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHJvb3QgaW5vZGUiCittc2dzdHIgInBvZGN6YXMgb2Rjenl0dSBnxYLDs3duZWdvIGktd8SZesWCYSIKKworIzogbWlzYy9ta2UyZnMuYzo0NTEKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHJvb3QgaW5vZGUgb3duZXJzaGlwIgorbXNnc3RyICJwb2RjemFzIHVzdGF3aWFuaWEgd8WCYcWbY2ljaWVsYSBnxYLDs3duZWdvIGktd8SZesWCYSIKKworIzogbWlzYy9ta2UyZnMuYzo0NjkKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyAvbG9zdCtmb3VuZCIKK21zZ3N0ciAicG9kY3phcyB0d29yemVuaWEgL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDc2Cittc2dpZCAid2hpbGUgbG9va2luZyB1cCAvbG9zdCtmb3VuZCIKK21zZ3N0ciAicG9kY3phcyBzenVrYW5pYSAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0ODkKK21zZ2lkICJ3aGlsZSBleHBhbmRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgInBvZGN6YXMgcm96c3plcnphbmlhIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjUwNAorbXNnaWQgIndoaWxlIHNldHRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICJwb2RjemFzIHVzdGF3aWFuaWEgaS13xJl6xYJhIHdhZGxpd3ljaCBibG9rw7N3IgorCisjOiBtaXNjL21rZTJmcy5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJPdXQgb2YgbWVtb3J5IGVyYXNpbmcgc2VjdG9ycyAlZC0lZFxuIgorbXNnc3RyICJCcmFrIHBhbWnEmWNpIHBvZGN6YXMgY3p5c3pjemVuaWEgc2VrdG9yw7N3ICVkLSVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrIDA6ICVzXG4iCittc2dzdHIgIlV3YWdhOiBuaWUgbW/FvG5hIG9kY3p5dGHEhyBibG9rdSAwOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgZXJhc2Ugc2VjdG9yICVkOiAlc1xuIgorbXNnc3RyICJVd2FnYTogbmllIG1vxbxuYSB3eWN6ecWbY2nEhyBzZWt0b3JhICVkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU3MworbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgInBvZGN6YXMgaW5pY2pvd2FuaWEgc3VwZXJibG9rdSBrcm9uaWtpIgorCisjOiBtaXNjL21rZTJmcy5jOjU4MQorbXNnaWQgIlplcm9pbmcgam91cm5hbCBkZXZpY2U6ICIKK21zZ3N0ciAiWmVyb3dhbmllIHVyesSFZHplbmlhIGtyb25pa2k6ICIKKworIzogbWlzYy9ta2UyZnMuYzo1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBqb3VybmFsIGRldmljZSAoYmxvY2sgJWxsdSwgY291bnQgJWQpIgorbXNnc3RyICJwb2RjemFzIHplcm93YW5pYSB1cnrEhWR6ZW5pYSBrcm9uaWtpIChibG9rICVsbHUsIGxpY3piYSAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjExCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgInBvZGN6YXMgemFwaXN1IHN1cGVyYmxva3Uga3JvbmlraSIKKworIzogbWlzYy9ta2UyZnMuYzo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgZmlsZXN5c3RlbSB3aXRoICVsbHUgJWRrIGJsb2NrcyBhbmQgJXUgaW5vZGVzXG4iCittc2dzdHIgIlR3b3J6ZW5pZSBzeXN0ZW11IHBsaWvDs3cgbyAlbGx1IGJsb2thY2ggJWRrIG9yYXogJXUgaS13xJl6xYJhY2hcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndhcm5pbmc6ICVsbHUgYmxvY2tzIHVudXNlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorInV3YWdhOiAlbGx1IGJsb2vDs3cgbmllIHXFvHl3YW55Y2guXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gbGFiZWw9JXNcbiIKK21zZ3N0ciAiRXR5a2lldGEgc3lzdGVtdSBwbGlrw7N3PSVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIk9TIHR5cGU6ICVzXG4iCittc2dzdHIgIlR5cCBPUzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJSb3ptaWFyIGJsb2t1PSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsdXN0ZXIgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJSb3ptaWFyIGtsYXN0cmE9JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJhZ21lbnQgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJSb3ptaWFyIGZyYWdtZW50dT0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJTdHJpZGU9JXUgYmxvY2tzLCBTdHJpcGUgd2lkdGg9JXUgYmxvY2tzXG4iCittc2dzdHIgIlN0cmlkZT0ldSBibG9rw7N3LCBzemVyb2tvxZvEhyBTdHJpcGU9JXUgYmxva8Ozd1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY1NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMsICVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiV1IGktd8SZesWCw7N3LCAlbGx1IGJsb2vDs3dcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSBibG9ja3MgKCUyLjJmJSUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlclxuIgorbXNnc3RyICIlbGx1IGJsb2vDs3cgKCUyLjJmJSUpIHphcmV6ZXJ3b3dhbnljaCBkbGEgc3VwZXJ1xbx5dGtvd25pa2FcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QgZGF0YSBibG9jaz0ldVxuIgorbXNnc3RyICJQaWVyd3N6eSBibG9rIGRhbnljaD0ldVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJSb290IGRpcmVjdG9yeSBvd25lcj0ldToldVxuIgorbXNnc3RyICJXxYJhxZtjaWNpZWwgZ8WCw7N3bmVnbyBrYXRhbG9ndT0ldToldVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGZpbGVzeXN0ZW0gYmxvY2tzPSVsdVxuIgorbXNnc3RyICJNYWtzeW1hbG5hIGxpY3piYSBibG9rw7N3IHN5c3RlbXUgcGxpa8Ozdz0lbHVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBzXG4iCittc2dzdHIgIiV1IGdydXAgYmxva8Ozd1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIldSBncnVwYSBibG9rw7N3XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGNsdXN0ZXJzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBibG9rw7N3IHcgZ3J1cGllLCAldSBrbGFzdHLDs3cgdyBncnVwaWVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgZnJhZ21lbnRzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBibG9rw7N3IHcgZ3J1cGllLCAldSBmcmFnbWVudMOzdyB3IGdydXBpZVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGktd8SZesWCw7N3IHcgZ3J1cGllXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gVVVJRDogJXNcbiIKK21zZ3N0ciAiVVVJRCBzeXN0ZW11IHBsaWvDs3c6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njg5Cittc2dpZCAiU3VwZXJibG9jayBiYWNrdXBzIHN0b3JlZCBvbiBibG9ja3M6ICIKK21zZ3N0ciAiS29waWUgemFwYXNvd2Ugc3VwZXJibG9rdSB6YXBpc2FuZSB3IGJsb2thY2g6ICIKKworIzogbWlzYy9ta2UyZnMuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgJy1PIDY0Yml0J1xuIgorbXNnc3RyICIlcyB3eW1hZ2EgJy1PIDY0Yml0J1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgYmVmb3JlICdyZXNpemU9JXUnXG4iCittc2dzdHIgIiclcycgbXVzaSBiecSHIHByemVkICdyZXNpemU9JXUnXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Nzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZGVzY19zaXplOiAnJXMnXG4iCittc2dzdHIgIkLFgsSZZG55IGRlc2Nfc2l6ZTogJyVzJ1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9mZnNldDogJXNcbiIKK21zZ3N0ciAiQsWCxJlkbnkgb2Zmc2V0OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgxMiBtaXNjL3R1bmUyZnMuYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW1wX3VwZGF0ZV9pbnRlcnZhbDogJXNcbiIKK21zZ3N0ciAiQsWCxJlkbnkgb2tyZXMgdWFrdHVhbG5pYW5pYSBtbXA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgIyBvZiBiYWNrdXAgc3VwZXJibG9ja3M6ICVzXG4iCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBrb3BpaSB6YXBhc293eWNoIHN1cGVyYmxva3U6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaWRlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiQsWCxJlkbnkgcGFyYW1ldHIgc3RyaWRlOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlwZS13aWR0aCBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIkLFgsSZZG55IHBhcmFtZXRyIHN0cmlwZS13aWR0aDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXNpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJCxYLEmWRueSBwYXJhbWV0ciByZXNpemU6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODkzCittc2dpZCAiVGhlIHJlc2l6ZSBtYXhpbXVtIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBmaWxlc3lzdGVtIHNpemUuXG4iCittc2dzdHIgIiIKKyJNYWtzeW1hbG55IHJvem1pYXIgKHJlc2l6ZSkgbXVzaSBiecSHIHdpxJlrc3p5IG9kIHJvem1pYXJ1IHN5c3RlbXUgcGxpa8Ozdy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MTcKK21zZ2lkICJPbi1saW5lIHJlc2l6aW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKyJabWlhbmEgcm96bWlhcnUgdyBsb2NpZSBuaWUgamVzdCBvYnPFgnVnaXdhbmEgcHJ6ZXogc3lzdGVteSBwbGlrw7N3IHcgd2Vyc2ppICIKKyIwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTQ0IG1pc2MvbWtlMmZzLmM6OTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcm9vdF9vd25lcjogJyVzJ1xuIgorbXNnc3RyICJCxYLEmWRueSByb290X293bmVyOiAnJXMnXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcXVvdGF0eXBlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiQsWCxJlkbnkgcGFyYW1ldHIgcXVvdGF0eXBlOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0bW1wX3VwZGF0ZV9pbnRlcnZhbD08aW50ZXJ2YWw+XG4iCisiXHRudW1fYmFja3VwX3NiPTwwfDF8Mj5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBkYXRhIGNodW5rIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUgKiBkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdG9mZnNldD08b2Zmc2V0IHRvIGNyZWF0ZSB0aGUgZmlsZSBzeXN0ZW0+XG4iCisiXHRyZXNpemU9PHJlc2l6ZSBtYXhpbXVtIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0cGFja2VkX21ldGFfYmxvY2tzPTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdGxhenlfam91cm5hbF9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0cm9vdF91aWQ9PHVpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHJvb3RfZ2lkPTxnaWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXNyIE9SIGdycD5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBvZGFubyBixYLEmWRuZSBvcGNqZTogJXNcbiIKKyJcbiIKKyJPcGNqZSByb3pzemVyem9uZSBzxIUgb2RkemllbGFuZSBwcnplY2lua2FtaSBpIG1vZ8SFIHByenlqbW93YcSHIHBhcmFtZXRyLFxuIgorIlx0a3TDs3J5IGplc3QgdXN0YXdpYW55IHpuYWtpZW0gJz0nLlxuIgorIlxuIgorIlBvcHJhd25lIG9wY2plIHJvenN6ZXJ6b25lIHRvOlxuIgorIlx0bW1wX3VwZGF0ZV9pbnRlcnZhbD08cHJ6ZWR6aWHFgj5cbiIKKyJcdG51bV9iYWNrdXBfc2I9PDB8MXwyPlxuIgorIlx0c3RyaWRlPTxyb3ptaWFyIHBvcmNqaSBkYW55Y2ggUkFJRCBuYSBkeXNrdSB3IGJsb2thY2g+XG4iCisiXHRzdHJpcGUtd2lkdGg9PFJBSUQgc3RyaWRlICogbGljemJhIGR5c2vDs3cgZGFueWNoIHcgYmxva2FjaD5cbiIKKyJcdG9mZnNldD08cHJ6ZXN1bmnEmWNpZSBzeXN0ZW11IHBsaWvDs3cgZG8gdXR3b3J6ZW5pYT5cbiIKKyJcdHJlc2l6ZT08bWFrc3ltYWxueSByb3ptaWFyIHBvd2nEmWtzemVuaWEgdyBibG9rYWNoPlxuIgorIlx0cGFja2VkX21ldGFfYmxvY2tzPTwwIGFieSB3ecWCxIVjennEhywgMSBhYnkgd8WCxIVjennEhz5cbiIKKyJcdGxhenlfaXRhYmxlX2luaXQ9PDAgYWJ5IHd5xYLEhWN6ecSHLCAxIGFieSB3xYLEhWN6ecSHPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgYWJ5IHd5xYLEhWN6ecSHLCAxIGFieSB3xYLEhWN6ecSHPlxuIgorIlx0cm9vdF91aWQ9PHVpZCBrYXRhbG9ndSBnxYLDs3duZWdvPlxuIgorIlx0cm9vdF9naWQ9PGdpZCBrYXRhbG9ndSBnxYLDs3duZWdvPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0ZGlzY2FyZFxuIgorIlx0bm9kaXNjYXJkXG4iCisiXHRxdW90YXR5cGU9PHVzciBMVUIgZ3JwPlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IFJBSUQgc3RyaXBlLXdpZHRoICV1IG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHN0cmlkZSAldS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlV3YWdhOiBSQUlEIHN0cmlwZS13aWR0aCAldSBuaWUgamVzdCBwYXJ6eXN0xIUgd2llbG9rcm90bm/Fm2NpxIUgc3RyaWRlICV1LlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBta2UyZnMgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKyJCxYLEhWQgc2vFgmFkbmkgdyBwbGlrdSBrb25maWd1cmFjeWpueW0gbWtlMmZzICglcywgbGluaWEgJWQpXG4iCisiXHQlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNjggbWlzYy90dW5lMmZzLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJVc3Rhd2lvbmEgYsWCxJlkbmEgb3BjamEgc3lzdGVtdSBwbGlrw7N3OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwODAgbWlzYy90dW5lMmZzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiVXN0YXdpb25hIGLFgsSZZG5hIG9wY2phIG1vbnRvd2FuaWE6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiWW91ciBta2UyZnMuY29uZiBmaWxlIGRvZXMgbm90IGRlZmluZSB0aGUgJXMgZmlsZXN5c3RlbSB0eXBlLlxuIgorbXNnc3RyICIiCisiXG4iCisiVXdhZ2EhIFBsaWsgbWtlMmZzLmNvbmYgbmllIG9rcmXFm2xhIHR5cHUgc3lzdGVtdSBwbGlrw7N3ICVzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjQKK21zZ2lkICIiCisiWW91IHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBhbiB1cGRhdGVkIG1rZTJmcy5jb25mIGZpbGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJQcmF3ZG9wb2RvYm5pZSB0cnplYmEgemFpbnN0YWxvd2HEhyB1YWt0dWFsbmlvbnkgcGxpayBta2UyZnMuY29uZi5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjI4Cittc2dpZCAiQWJvcnRpbmcuLi5cbiIKK21zZ3N0ciAiUHJ6ZXJ3YW5vLi4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGZzX3R5cGUgJXMgaXMgbm90IGRlZmluZWQgaW4gbWtlMmZzLmNvbmZcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlV3YWdhOiB0eXAgc3lzdGVtdSBwbGlrw7N3ICVzIG5pZSBqZXN0IHpkZWZpbmlvd2FueSB3IG1rZTJmcy5jb25mXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ0OQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IFBBVEguXG4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBwcnp5ZHppZWxpxIcgcGFtacSZY2kgbmEgbm93xIUgUEFUSFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgaW5pdCBwcm9maWxlIHN1Y2Nlc3NmdWxseSAoZXJyb3I6ICVsZCkuXG4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBwb3ByYXduaWUgemFpbmljam93YcSHIHByb2ZpbHUgKGLFgsSFZDogJWxkKS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTIzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2sgc2l6ZSAtICVzIgorbXNnc3RyICJixYLEmWRueSByb3ptaWFyIGJsb2t1IC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUyNworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBibG9ja3NpemUgJWQgbm90IHVzYWJsZSBvbiBtb3N0IHN5c3RlbXMuXG4iCittc2dzdHIgIlV3YWdhOiByb3ptaWFyIGJsb2t1ICVkIG5pZSB1xbx5d2FsbnkgbmEgd2nEmWtzem/Fm2NpIHN5c3RlbcOzdy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2x1c3RlciBzaXplIC0gJXMiCittc2dzdHIgImLFgsSZZG55IHJvem1pYXIga2xhc3RyYSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NTMKK21zZ2lkICInLVInIGlzIGRlcHJlY2F0ZWQsIHVzZSAnLUUnIGluc3RlYWQiCittc2dzdHIgIictJScgamVzdCBwcnplc3RhcnphxYJlLCB6YW1pYXN0IG5pZWdvIG5hbGXFvHkgdcW8eXdhxIcgJy1FJyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTY1Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGJsb2NrcyBwZXIgZ3JvdXAiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBibG9rw7N3IHcgZ3J1cGllIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NzAKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIG11c3QgYmUgbXVsdGlwbGUgb2YgOCIKK21zZ3N0ciAibGljemJhIGJsb2vDs3cgdyBncnVwaWUgbXVzaSBiecSHIHdpZWxva3JvdG5vxZtjacSFIDgiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU3OAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBmbGV4X2JnIHNpemUiCittc2dzdHIgIk5pZWRvcHVzemN6YWxueSByb3ptaWFyIGZsZXhfYmciCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4NAorbXNnaWQgImZsZXhfYmcgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMiIKK21zZ3N0ciAicm96bWlhciBmbGV4X2JnIG11c2kgYnnEhyBwb3TEmWfEhSAyIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmxleF9iZyBzaXplICglbHUpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDJeMzEiCittc2dzdHIgInJvem1pYXIgZmxleF9iZyAoJWx1KSBtdXNpIGJ5xIcgbW5pZWpzenkgbHViIHLDs3dueSAyXjMxIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSByYXRpbyAlcyAobWluICVkL21heCAlZCkiCittc2dzdHIgImLFgsSZZG55IHN0b3N1bmVrIGktd8SZesWCw7N3ICVzIChtaW4gJWQvbWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoxNjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICJixYLEmWRueSByb3ptaWFyIGktd8SZesWCYSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MjMKK21zZ2lkICIiCisiV2FybmluZzogLUsgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLiBVc2UgJy1FICIKKyJub2Rpc2NhcmQnIGV4dGVuZGVkIG9wdGlvbiBpbnN0ZWFkIVxuIgorbXNnc3RyICIiCisiVXdhZ2E6IG9wY2phIC1LIGplc3QgcHJ6ZXN0YXJ6YcWCYSBpIG5pZSBwb3dpbm5hIGp1xbwgYnnEhyB1xbx5d2FuYS4gWmFtaWFzdCAiCisibmllaiBuYWxlxbx5IHXFvHnEhyBvcGNqaSByb3pzemVyem9uZWogJy1FIG5vZGlzY2FyZCcuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYzNAorbXNnaWQgImluIG1hbGxvYyBmb3IgYmFkX2Jsb2Nrc19maWxlbmFtZSIKK21zZ3N0ciAidyBtYWxsb2MgZGxhIGJhZF9ibG9ja3NfZmlsZW5hbWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgImLFgsSZZG55IHByb2NlbnQgemFyZXplcndvd2FueWNoIGJsb2vDs3cgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW0gaW5vZGVzIC0gJXMiCittc2dzdHIgImLFgsSZZG5hIGxpY3piYSBpLXfEmXrFgsOzdyAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uIGxldmVsIC0gJXMiCittc2dzdHIgImLFgsSZZG55IHBvemlvbSB3ZXJzamkgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjcmVhdGUgcmV2aXNpb24gJWQiCittc2dzdHIgInRwb2RjemFzIHByw7NieSB1dHdvcnplbmlhIHJld2l6amkgJWQiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY5OAorbXNnaWQgIlRoZSAtdCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICJPcGNqYSAtdCBtb8W8ZSBiecSHIHXFvHl0YSB0eWxrbyByYXoiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTcwNgorbXNnaWQgIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICJPcGNqYSAtVCBtb8W8ZSBiecSHIHXFvHl0YSB0eWxrbyByYXoiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc1OSBtaXNjL21rZTJmcy5jOjI4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBkZXZpY2UgJXNcbiIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgb3R3YXJjaWEgdXJ6xIVkemVuaWEga3JvbmlraSAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBkZXYgYmxvY2tzaXplICglZCkgc21hbGxlciB0aGFuIG1pbmltdW0gYmxvY2tzaXplICVkXG4iCittc2dzdHIgIlJvem1pYXIgYmxva3UgdXJ6xIVkemVuaWEgeiBrcm9uaWvEhSAoJWQpIG1uaWVqc3p5IG9kIG1pbmltYWxuZWdvICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBqb3VybmFsIGRldmljZSdzIGJsb2Nrc2l6ZTogJWRcbiIKK21zZ3N0ciAiVcW8eWNpZSByb3ptaWFydSBibG9rdSB1cnrEhWR6ZW5pYSBrcm9uaWtpOiAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9ja3MgJyVzJyBvbiBkZXZpY2UgJyVzJyIKK21zZ3N0ciAiYsWCxJlkbmEgbGljemJhIGJsb2vDs3cgJyVzJyBuYSB1cnrEhWR6ZW5pdSAnJXMnIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MDQKK21zZ2lkICJmaWxlc3lzdGVtIgorbXNnc3RyICJzeXN0ZW0gcGxpa8OzdyIKKworIzogbWlzYy9ta2UyZnMuYzoxODE3IHJlc2l6ZS9tYWluLmM6Mzk1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBmaWxlc3lzdGVtIHNpemUiCittc2dzdHIgInBvZGN6YXMgcHLDs2J5IG9rcmXFm2xlbmlhIHJvem1pYXJ1IHN5c3RlbXUgcGxpa8OzdyIKKworIzogbWlzYy9ta2UyZnMuYzoxODIzCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKyJOaWUgbW/FvG5hIG9rcmXFm2xpxIcgcm96bWlhcnUgdXJ6xIVkemVuaWE7IHJvem1pYXIgc3lzdGVtdVxuIgorInBsaWvDs3cgbXVzaSBiecSHIHBvZGFueVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MzAKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorIk9kY3p5dGFueSByb3ptaWFyIHVyesSFZHplbmlhIHd5bm9zaSB6ZXJvLiBQb2Rhbm8gYsWCxJlkbsSFIHBhcnR5Y2rEmVxuIgorIlx0bHViIHRhYmxpY2EgcGFydHljamkgbmllIGJ5xYJhIG9kY3p5dGFuYSBwb25vd25pZSBwbyB1cnVjaG9taWVuaXVcbiIKKyJcdGZkaXNrYSB6IHBvd29kdSB6YWrEmXRlaiBtb2R5Zmlrb3dhbmVqIHBhcnR5Y2ppLiBQb25vd255IG9kY3p5dFxuIgorIlx0dGFibGljeSBwYXJ0eWNqaSBtb8W8ZSB3eW1hZ2HEhyByZWJvb3R1LlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NDcKK21zZ2lkICJGaWxlc3lzdGVtIGxhcmdlciB0aGFuIGFwcGFyZW50IGRldmljZSBzaXplLiIKK21zZ3N0ciAiU3lzdGVtIHBsaWvDs3cgd2nEmWtzenkgb2Qgd2lkb2N6bmVnbyByb3ptaWFydSB1cnrEhWR6ZW5pYS4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg2NworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBmcyB0eXBlcyBsaXN0XG4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBwcnplYW5hbGl6b3dhxIcgbGlzdHkgdHlww7N3IHN5c3RlbcOzdyBwbGlrw7N3XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkwOAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgaGFyZHdhcmUgc2VjdG9yIHNpemUiCittc2dzdHIgInBvZGN6YXMgcHLDs2J5IG9rcmXFm2xlbmlhIHJvem1pYXJ1IHNwcnrEmXRvd2VnbyBzZWt0b3JhIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MTQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHBoeXNpY2FsIHNlY3RvciBzaXplIgorbXNnc3RyICJwb2RjemFzIHByw7NieSBva3JlxZtsZW5pYSByb3ptaWFydSBzZWt0b3JhIGZpenljem5lZ28iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk0NgorbXNnaWQgIndoaWxlIHNldHRpbmcgYmxvY2tzaXplOyB0b28gc21hbGwgZm9yIGRldmljZVxuIgorbXNnc3RyICJwb2RjemFzIHVzdGF3aWFuaWEgcm96bWlhcnUgYmxva3U7IHpieXQgbWHFgnkgZGxhIHVyesSFZHplbmlhXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogc3BlY2lmaWVkIGJsb2Nrc2l6ZSAlZCBpcyBsZXNzIHRoYW4gZGV2aWNlIHBoeXNpY2FsIHNlY3RvcnNpemUgJWRcbiIKK21zZ3N0ciAiIgorIlV3YWdhOiBwb2Rhbnkgcm96bWlhciBibG9rdSAlZCBqZXN0IG1uaWVqc3p5IG5pxbwgcm96bWlhciBzZWt0b3JhIGZpenljem5lZ28gIgorIiVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFNpemUgb2YgZGV2aWNlICgweCVsbHggYmxvY2tzKSAlcyB0b28gYmlnIHRvIGJlIGV4cHJlc3NlZFxuIgorIlx0aW4gMzIgYml0cyB1c2luZyBhIGJsb2Nrc2l6ZSBvZiAlZC5cbiIKK21zZ3N0ciAiIgorIiVzOiBSb3ptaWFyIHVyesSFZHplbmlhICgweCVsbHggYmxva8OzdykgJXMgamVzdCB6Ynl0IGR1xbx5LCBhYnkgd3lyYXppxIcgZ29cbiIKKyJcdHcgMzIgYml0YWNoIHByenkgdcW8eWNpdSByb3ptaWFydSBibG9rdSAlZC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTkxCittc2dpZCAiZnNfdHlwZXMgZm9yIG1rZTJmcy5jb25mIHJlc29sdXRpb246ICIKK21zZ3N0ciAiUm96d2luacSZY2llIGZzX3R5cGVzIGRsYSBta2UyZnMuY29uZjogIgorCisjOiBtaXNjL21rZTJmcy5jOjE5OTgKK21zZ2lkICJGaWxlc3lzdGVtIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIkNlY2h5IHN5c3RlbXUgcGxpa8OzdyBuaWUgb2JzxYJ1Z2l3YW5lIHByemV6IHN5c3RlbXkgcGxpa8OzdyB3IHdlcnNqaSAwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAwNgorbXNnaWQgIlNwYXJzZSBzdXBlcmJsb2NrcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiUnphZGtpZSBzdXBlcmJsb2tpIG5pZSBzxIUgb2JzxYJ1Z2l3YW5lIHByemV6IHN5c3RlbXkgcGxpa8OzdyB3IHdlcnNqaSAwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAxOAorbXNnaWQgIkpvdXJuYWxzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIktyb25pa2kgbmllIHPEhSBvYnPFgnVnaXdhbmUgcHJ6ZXogc3lzdGVteSBwbGlrw7N3IHcgd2Vyc2ppIDBcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDMyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlbGYiCittc2dzdHIgImLFgsSZZG55IHByb2NlbnQgemFyZXplcndvd2FueWNoIGJsb2vDs3cgLSAlbGYiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJFeHRlbnRzIE1VU1QgYmUgZW5hYmxlZCBmb3IgYSA2NC1iaXQgZmlsZXN5c3RlbS4gIFBhc3MgLU8gZXh0ZW50cyB0byAiCisicmVjdGlmeS5cbiIKK21zZ3N0ciAiIgorIkVrc3RlbnR5IE1VU1rEhCBiecSHIHfFgsSFY3pvbmUgZGxhIDY0LWJpdG93ZWdvIHN5c3RlbXUgcGxpa8Ozdy4gQWJ5IHRvIHBvcHJhd2nEhywgIgorIm5hbGXFvHkgcHJ6ZWthemHEhyAtTyBleHRlbnRzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNjkKK21zZ2lkICJUaGUgY2x1c3RlciBzaXplIG1heSBub3QgYmUgc21hbGxlciB0aGFuIHRoZSBibG9jayBzaXplLlxuIgorbXNnc3RyICJSb3ptaWFyIGtsYXN0cmEgbmllIG1vxbxlIGJ5xIcgbW5pZWpzenkgbmnFvCByb3ptaWFyIGJsb2t1LlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNzUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgY2x1c3RlciBzaXplIHJlcXVpcmVzIHRoZSBiaWdhbGxvYyBmZWF0dXJlIgorbXNnc3RyICJva3JlxZtsZW5pZSByb3ptaWFydSBrbGFzdHJhIHd5bWFnYSB3xYJhc25vxZtjaSBiaWdhbGxvYyIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFVuYWJsZSB0byBnZXQgZGV2aWNlIGdlb21ldHJ5IGZvciAlc1xuIgorbXNnc3RyICJ1d2FnYTogbmllIHVkYcWCbyBzacSZIG9kY3p5dGHEhyBnZW9tZXRyaWkgdXJ6xIVkemVuaWEgZGxhICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbGlnbm1lbnQgaXMgb2Zmc2V0IGJ5ICVsdSBieXRlcy5cbiIKK21zZ3N0ciAiV3lyw7N3bmFuaWUgJXMgamVzdCBwcnplc3VuacSZdGUgbyAlbHUgYmFqdMOzdy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIG1heSByZXN1bHQgaW4gdmVyeSBwb29yIHBlcmZvcm1hbmNlLCAocmUpLXBhcnRpdGlvbmluZyBzdWdnZXN0ZWQuXG4iCittc2dzdHIgIiIKKyJNb8W8ZSB0byBwb3dvZG93YcSHIGJhcmR6byBuaXNrxIUgd3lkYWpub8WbxIcsIHphbGVjYW5lIGplc3QgIgorIihwcnplKXBhcnR5Y2pvbm93YW5pZS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAobWF4ICVkKSIKK21zZ3N0ciAiJWQtYmFqdG93ZSBibG9raSBzxIUgemJ5dCBkdcW8ZSBkbGEgc3lzdGVtdSAobWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiAlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCksIGZvcmNlZCB0byBjb250aW51ZVxuIgorbXNnc3RyICIiCisiVXdhZ2E6ICVkLWJhanRvd2UgYmxva2kgc8SFIHpieXQgZHXFvGUgZGxhIHN5c3RlbXUgKG1heCAlZCksIHd5bXVzem9ubyAiCisia29udHludWFjasSZXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE4MAorbXNnaWQgIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0IGV4dGVudHMgZmVhdHVyZSIKK21zZ3N0ciAiT2JzxYJ1Z2Egd8WCYXNub8WbY2kgYmlnYWxsb2MgamVzdCBuaWVtb8W8bGl3YSBiZXogd8WCYXNub8WbY2kgZXh0ZW50cyIKKworIzogbWlzYy9ta2UyZnMuYzoyMTg3Cittc2dpZCAiIgorIlRoZSByZXNpemVfaW5vZGUgYW5kIG1ldGFfYmcgZmVhdHVyZXMgYXJlIG5vdCBjb21wYXRpYmxlLlxuIgorIlRoZXkgY2FuIG5vdCBiZSBib3RoIGVuYWJsZWQgc2ltdWx0YW5lb3VzbHkuXG4iCittc2dzdHIgIiIKKyJDZWNoeSByZXNpemVfaW5vZGUgaSBtZXRhX2JnIG5pZSBzxIUga29tcGF0eWJpbG5lLlxuIgorIk5pZSBtb8W8bmEgaWNoIHfFgsSFY3p5xIcgamVkbm9jemXFm25pZS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTk2Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBiaWdhbGxvYyBmZWF0dXJlIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50XG4iCisiU2VlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0JpZ2FsbG9jIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJVd2FnYTogd8WCYXNub8WbxIcgYmlnYWxsb2MgamVzdCBuYWRhbCB3IHRyYWtjaWUgcm96d29qdS5cbiIKKyJXacSZY2VqIGluZm9ybWFjamkgcG9kIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0JpZ2FsbG9jXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIwNworbXNnaWQgInJlc2VydmVkIG9ubGluZSByZXNpemUgYmxvY2tzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLXNwYXJzZSBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisiemFyZXplcndvd2FuZSBibG9raSBkbyB6bWlhbnkgcm96bWlhcnUgdyBsb2NpZSBuaWUgb2JzxYJ1Z2l3YW5lIG5hIG5pZWNpxIVnxYJ5bSAiCisic3lzdGVtaWUgcGxpa8OzdyIKKworIzogbWlzYy9ta2UyZnMuYzoyMjE2Cittc2dpZCAiYmxvY2tzIHBlciBncm91cCBjb3VudCBvdXQgb2YgcmFuZ2UiCittc2dzdHIgImxpY3piYSBibG9rw7N3IHcgZ3J1cGllIHNwb3phIHpha3Jlc3UiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI0MAorbXNnaWQgIkZsZXhfYmcgZmVhdHVyZSBub3QgZW5hYmxlZCwgc28gZmxleF9iZyBzaXplIG1heSBub3QgYmUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisiQ2VjaGEgZmxleF9iZyBuaWUgamVzdCB3xYLEhWN6b25hLCB3acSZYyBuaWUgbW/FvG5hIG9rcmXFm2xpxIcgcm96bWlhcnUgZmxleF9iZyIKKworIzogbWlzYy9ta2UyZnMuYzoyMjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgc2l6ZSAlZCAobWluICVkL21heCAlZCkiCittc2dzdHIgImLFgsSZZG55IHJvem1pYXIgaS13xJl6xYJhICVkIChtaW4gJWQvbWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHJhaXNlIGlub2RlIHJhdGlvPyIKK21zZ3N0ciAiemJ5dCBkdcW8byBpLXfEmXrFgsOzdyAoJWxsdSksIHp3acSZa3N6ecSHIHdzcMOzxYJjenlubmlrIGktd8SZesWCw7N3PyIKKworIzogbWlzYy9ta2UyZnMuYzoyMjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHNwZWNpZnkgPCAyXjMyIGlub2RlcyIKK21zZ3N0ciAiemJ5dCBkdcW8byBpLXfEmXrFgsOzdyAoJWxsdSksIG5hbGXFvHkgcG9kYcSHIDwgMl4zMiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbm9kZV9zaXplICgldSkgKiBpbm9kZXNfY291bnQgKCV1KSB0b28gYmlnIGZvciBhXG4iCisiXHRmaWxlc3lzdGVtIHdpdGggJWxsdSBibG9ja3MsIHNwZWNpZnkgaGlnaGVyIGlub2RlX3JhdGlvICgtaSlcbiIKKyJcdG9yIGxvd2VyIGlub2RlIGNvdW50ICgtTikuXG4iCittc2dzdHIgIiIKKyJyb3ptX2l3xJl6xYJhICgldSkgKiBsaWN6YmFfaXfEmXrFgsOzdyAoJXUpIHpieXQgZHXFvGUgZGxhIHN5c3RlbXVcbiIKKyJcdHBsaWvDs3cgbyBsaWN6YmllIGJsb2vDs3cgJWxsdSwgbmFsZcW8eSBwb2RhxIcgd2nEmWtzenkgd3Nww7PFgmN6eW5uaWsgKC1pKVxuIgorIlx0bHViIG1uaWVqc3rEhSBsaWN6YsSZIGktd8SZesWCw7N3ICgtTikuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbTsgdGhpcyBjYW4gYmUgdW5kb25lIHVzaW5nIHRoZSBjb21tYW5kOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5hZHBpc3l3YW5pZSBpc3RuaWVqxIVjZWdvIHN5c3RlbXUgcGxpa8OzdzsgbW/FvG5hIHRvIHd5Y29mYcSHIHBvbGVjZW5pZW06XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI0MzIKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc2V0dXAgdW5kbyBmaWxlXG4iCittc2dzdHIgInBvZGN6YXMgcHLDs2J5IHV0d29yemVuaWEgcGxpa3UgY29mbmnEmWNpYSAodW5kbylcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDU4Cittc2dpZCAiRGlzY2FyZGluZyBkZXZpY2UgYmxvY2tzOiAiCittc2dzdHIgIlBvcnp1Y2FuaWUgYmxva8OzdyB1cnrEhWR6ZW5pYTogIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NzQKK21zZ2lkICJmYWlsZWQgLSAiCittc2dzdHIgIm5pZSBwb3dpb2TFgm8gc2nEmSAtICIKKworIzogbWlzYy9ta2UyZnMuYzoyNTk2Cittc2dpZCAid2hpbGUgc2V0dGluZyB1cCBzdXBlcmJsb2NrIgorbXNnc3RyICJwb2RjemFzIHVzdGF3aWFuaWEgc3VwZXJibG9rdSIKKworIzogbWlzYy9ta2UyZnMuYzoyNjEyCittc2dpZCAiRGlzY2FyZCBzdWNjZWVkZWQgYW5kIHdpbGwgcmV0dXJuIDBzIC0gc2tpcHBpbmcgaW5vZGUgdGFibGUgd2lwZVxuIgorbXNnc3RyICIiCisiQ3p5c3pjemVuaWUgc2nEmSBwb3dpb2TFgm8gaSBixJlkemllIHp3cmFjYcSHIHplcmEgLSBwb21pbmnEmXRvIGN6eXN6Y3plbmllICIKKyJ0YWJsaWN5IGktd8SZesWCw7N3XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9zIC0gJXMiCittc2dzdHIgIm5pZXpuYW55IG9zIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc1MgorbXNnaWQgIkFsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAiCittc2dzdHIgIlByenlkemllbGFuaWUgdGFibGljeSBncnVwOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2MAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBhbGxvY2F0ZSBmaWxlc3lzdGVtIHRhYmxlcyIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgcHJ6eWR6aWVsZW5pYSB0YWJsaWMgc3lzdGVtdSBwbGlrw7N3IgorCisjOiBtaXNjL21rZTJmcy5jOjI3NjkKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYml0bWFwIgorbXNnc3RyICIiCisiXG4iCisiXHRwb2RjemFzIHByw7NieSBwcnpla3N6dGHFgmNlbmlhIGJpdG1hcHkgcG9ka2xhc3Ryw7N3IgorCisjOiBtaXNjL21rZTJmcy5jOjI4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBibG9jayAlbGx1IGF0IGVuZCBvZiBmaWxlc3lzdGVtIgorbXNnc3RyICJwb2RjemFzIHplcm93YW5pYSBibG9rdSAlbGx1IG5hIGtvxYRjdSBzeXN0ZW11IHBsaWvDs3ciCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgyNgorbXNnaWQgIndoaWxlIHJlc2VydmluZyBibG9ja3MgZm9yIG9ubGluZSByZXNpemUiCittc2dzdHIgInBvZGN6YXMgcmV6ZXJ3b3dhbmlhIGJsb2vDs3cgbmEgem1pYW7EmSByb3ptaWFydSB3IGxvY2llIgorCisjOiBtaXNjL21rZTJmcy5jOjI4MzggbWlzYy90dW5lMmZzLmM6NzEyCittc2dpZCAiam91cm5hbCIKK21zZ3N0ciAia3JvbmlrYSIKKworIzogbWlzYy9ta2UyZnMuYzoyODUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBqb3VybmFsIHRvIGRldmljZSAlczogIgorbXNnc3RyICJEb2Rhbm8ga3JvbmlrxJkgZG8gdXJ6xIVkemVuaWEgJXM6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBhZGQgam91cm5hbCB0byBkZXZpY2UgJXMiCittc2dzdHIgIiIKKyJcbiIKKyJcdHBvZGN6YXMgcHLDs2J5IGRvZGFuaWEga3JvbmlraSBkbyB1cnrEhWR6ZW5pYSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyODYyIG1pc2MvbWtlMmZzLmM6Mjg5MyBtaXNjL3R1bmUyZnMuYzo3NDEgbWlzYy90dW5lMmZzLmM6NzYwCittc2dpZCAiZG9uZVxuIgorbXNnc3RyICJ3eWtvbmFub1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NjkKK21zZ2lkICJTa2lwcGluZyBqb3VybmFsIGNyZWF0aW9uIGluIHN1cGVyLW9ubHkgbW9kZVxuIgorbXNnc3RyICJQb21pbmnEmXRvIHR3b3J6ZW5pZSBrcm9uaWtpIHcgdHJ5YmllIHN1cGVyLW9ubHlcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCV1IGJsb2Nrcyk6ICIKK21zZ3N0ciAiVHdvcnplbmllIGtyb25pa2kgKCV1IGJsb2vDs3cpOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg4OQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCIKK21zZ3N0ciAiIgorIlxuIgorIlx0cG9kY3phcyBwcsOzYnkgdXR3b3J6ZW5pYSBrcm9uaWtpIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MDEgbWlzYy90dW5lMmZzLmM6NTE2Cittc2dpZCAiIgorIlxuIgorIkVycm9yIHdoaWxlIGVuYWJsaW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZS4iCittc2dzdHIgIiIKKyJcbiIKKyJCxYLEhWQgcG9kY3phcyB3xYLEhWN6YW5pYSBmdW5rY2ppIHphYmV6cGllY3plbmlhIHByemVkIHdpZWxva3JvdG55bSBtb250b3dhbmllbS4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWQgc2Vjb25kcy5cbiIKK21zZ3N0ciAiIgorIlphYmV6cGllY3plbmllIHByemVkIHdpZWxva3JvdG55bSBtb250b3dhbmllbSBqZXN0IHfFgsSFY3pvbmUgeiBva3Jlc2VtICIKKyJ1YWt0dWFsbmlhbmlhICVkIHNla3VuZC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTIzCittc2dpZCAiV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAiCittc2dzdHIgIlphcGlzIHN1cGVyYmxva8OzdyBpIHBvZHN1bW93YW5pYSBzeXN0ZW11IHBsaWvDs3c6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyOTMwCittc2dpZCAiIgorIlxuIgorIldhcm5pbmcsIGhhZCB0cm91YmxlIHdyaXRpbmcgb3V0IHN1cGVyYmxvY2tzLiIKK21zZ3N0ciAiIgorIlxuIgorIlV3YWdhLCBwcm9ibGVteSB6IHphcGlzZW0gc3VwZXJibG9rw7N3LiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTMyCittc2dpZCAiIgorImRvbmVcbiIKKyJcbiIKK21zZ3N0ciAiIgorInd5a29uYW5vXG4iCisiXG4iCisKKyM6IG1pc2MvbWtsb3N0K2ZvdW5kLmM6NTAKK21zZ2lkICJVc2FnZTogbWtsb3N0K2ZvdW5kXG4iCittc2dzdHIgIlNrxYJhZG5pYTogbWtsb3N0K2ZvdW5kXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICAlcyBkZXZpY2UuLi5cbiIKKyJcbiIKKyJQcmludHMgb3V0IHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGVhY2ggZ2l2ZW4gZGV2aWNlLlxuIgorIkZvciBleGFtcGxlOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorbXNnc3RyICIiCisiU2vFgmFkbmlhOiAlcyB1cnrEhWR6ZW5pZS4uLlxuIgorIlxuIgorIld5cGlzYW5pZSBpbmZvcm1hY2ppIG8gcGFydHljamFjaCBuYSBrYcW8ZHltIHBvZGFueW0gdXJ6xIVkemVuaXUuXG4iCisiUHJ6eWvFgmFkOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJOaWUgbW/FvG5hIG90d29yennEhyAlczogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGdlb21ldHJ5IG9mICVzOiAlcyIKK21zZ3N0ciAiTmllIG1vxbxuYSBwb2JyYcSHIGdlb21ldHJpaSAlczogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IHNpemUgb2YgJXM6ICVzIgorbXNnc3RyICJOaWUgbW/FvG5hIHBvYnJhxIcgcm96bWlhcnUgJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iCittc2dzdHIgIiVzOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIHBvY3rEhXRlaz0lOGQgcm96bWlhcj0lOGx1IGtvbmllYz0lOGRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEyCittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIlByb3N6xJkgdXJ1Y2hvbWnEhyBlMmZzY2sgbmEgc3lzdGVtaWUgcGxpa8Ozdy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jIG1heF9tb3VudHNfY291bnRdIFstZSBlcnJvcnNfYmVoYXZpb3JdIFstZyBncm91cF1cbiIKKyJcdFstaSBpbnRlcnZhbFtkfG18d11dIFstal0gWy1KIGpvdXJuYWxfb3B0aW9uc10gWy1sXVxuIgorIlx0Wy1tIHJlc2VydmVkX2Jsb2Nrc19wZXJjZW50XSBbLW8gW15dbW91bnRfb3B0aW9uc1ssLi4uXV0gWy1wICIKKyJtbXBfdXBkYXRlX2ludGVydmFsXVxuIgorIlx0Wy1yIHJlc2VydmVkX2Jsb2Nrc19jb3VudF0gWy11IHVzZXJdIFstQyBtb3VudF9jb3VudF0gWy1MIHZvbHVtZV9sYWJlbF1cbiIKKyJcdFstTSBsYXN0X21vdW50ZWRfZGlyXSBbLU8gW15dZmVhdHVyZVssLi4uXV1cbiIKKyJcdFstUSBxdW90YV9vcHRpb25zXVxuIgorIlx0Wy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV0gWy1UIGxhc3RfY2hlY2tfdGltZV0gWy1VIFVVSURdXG4iCisiXHRbIC1JIG5ld19pbm9kZV9zaXplIF0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJTa8WCYWRuaWE6ICVzIFstYyBtYXhfbGljem5pa19tb250b3dhxYRdIFstZSB0cmFrdC5fYsWCxJlkw7N3XSBbLWcgZ3J1cGFdXG4iCisiXHRbLWkgb2RzdMSZcFtkfG18d11dIFstal0gWy1KIG9wY2plX2tyb25pa2ldIFstbF1cbiIKKyJcdFstbSBwcm9jZW50X3JlemVydy5fYmxva8Ozd10gWy1vIFteXW9wY2plX21vbnRvd2FuaWFbLC4uLl1dIFstcCBva3Jlc191YWt0LiIKKyJfbW1wXVxuIgorIlx0Wy1yIGxpY3piYV96YXJlei5fYmxva8Ozd10gWy11IHXFvHl0a293bmlrXSBbLUMgbGljem5pa19tb250b3dhxYRdXG4iCisiXHRbLUwgZXR5a2lldGFfd29sdW1lbnVdIFstTSBvc3RhdG5pb19tb250Ll9rYXRhbG9nXSBbLU8gW15dY2VjaGFbLC4uLl1dXG4iCisiXHRbLVEgb3BjamVfbGltaXTDs3ddXG4iCisiXHRbLUUgb3BjamFfcm96c3plcnpvbmFbLC4uLl1dIFstVCBjemFzX29zdC5fc3ByYXdkei5dIFstVSBVVUlEXVxuIgorIlx0Wy1JIG5vd3lfcm96bWlhcl9pLXfEmXrFgmFdIHVyesSFZHplbmllXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMworbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQhXG4iCittc2dzdHIgIk5pZSB6bmFsZXppb25vIHN1cGVyYmxva3Uga3JvbmlraSFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjYxCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgb3R3b3J6ZW5pYSB6ZXduxJl0cnpuZWoga3JvbmlraSIKKworIzogbWlzYy90dW5lMmZzLmM6MjY3IG1pc2MvdHVuZTJmcy5jOjE5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIG5pZSBqZXN0IHVyesSFZHplbmllbSBrcm9uaWtpLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNzcgbWlzYy90dW5lMmZzLmM6MTk3NAorbXNnaWQgIkZpbGVzeXN0ZW0ncyBVVUlEIG5vdCBmb3VuZCBvbiBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiVVVJRCBzeXN0ZW11IHBsaWvDs3cgbmllIHpuYWxlemlvbnkgbmEgdXJ6xIVkemVuaXUga3JvbmlraS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MzAxCittc2dpZCAiIgorIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJOaWUgbW/FvG5hIHpsb2thbGl6b3dhxIcgdXJ6xIVkemVuaWEga3JvbmlraS4gTklFIHpvc3RhxYJvIHVzdW5pxJl0ZS5cbiIKKyJNb8W8bmEgdcW8ecSHIG9wY2ppIC1mLCBhYnkgdXN1bsSFxIcgbmllaXN0bmllasSFY2UgdXJ6xIVkemVuaWUga3JvbmlraS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MzEwCittc2dpZCAiSm91cm5hbCByZW1vdmVkXG4iCittc2dzdHIgIktyb25pa2EgdXN1bmnEmXRhXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM1NAorbXNnaWQgIndoaWxlIHJlYWRpbmcgYml0bWFwcyIKK21zZ3N0ciAicG9kY3phcyBvZGN6eXR1IGJpdG1hcCIKKworIzogbWlzYy90dW5lMmZzLmM6MzYyCittc2dpZCAid2hpbGUgY2xlYXJpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAicG9kY3phcyBjenlzemN6ZW5pYSBpLXfEmXrFgmEga3JvbmlraSIKKworIzogbWlzYy90dW5lMmZzLmM6MzczCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJwb2RjemFzIHphcGlzdSBpLXfEmXrFgmEga3JvbmlraSIKKworIzogbWlzYy90dW5lMmZzLmM6NDA1IG1pc2MvdHVuZTJmcy5jOjQxOAorbXNnaWQgIihhbmQgcmVib290IGFmdGVyd2FyZHMhKVxuIgorbXNnc3RyICIocHJvc3rEmSB6cmVzdGFydG93YcSHIHBvdGVtIHN5c3RlbSEpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICJVc3V3YW5pZSBjZWNoeSBzeXN0ZW11IHBsaWvDs3cgJyVzJyBuaWUgamVzdCBvYnPFgnVnaXdhbmUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIlVzdGF3aWFuaWUgY2VjaHkgc3lzdGVtdSBwbGlrw7N3ICclcycgbmllIGplc3Qgb2JzxYJ1Z2l3YW5lLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NjcKK21zZ2lkICIiCisiVGhlIGhhc19qb3VybmFsIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiRmxhZ2EgaGFzX2pvdXJuYWwgbW/FvGUgYnnEhyB3eWN6eXN6Y3pvbmEgdHlsa28ga2llZHkgc3lzdGVtIHBsaWvDs3dcbiIKKyJqZXN0IG9kbW9udG93YW55IGx1YiB6YW1vbnRvd2FueSB0eWxrbyBkbyBvZGN6eXR1LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NzYKK21zZ2lkICIiCisiVGhlIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LiAgUGxlYXNlIHJ1biBlMmZzY2sgYmVmb3JlIGNsZWFyaW5nXG4iCisidGhlIGhhc19qb3VybmFsIGZsYWcuXG4iCittc2dzdHIgIiIKKyJGbGFnYSBuZWVkc19yZWNvdmVyeSBqZXN0IHVzdGF3aW9uYS4gUHJvc3rEmSB1cnVjaG9tacSHIGUyZnNjayBwcnplZFxuIgorImN6eXN6Y3plbmllbSBmbGFnaSBoYXNfam91cm5hbC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDk1Cittc2dpZCAiIgorIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICdzcGFyc2Vfc3VwZXInIG5vdCBzdXBwb3J0ZWRcbiIKKyJmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgbWV0YV9iZyBmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKyJVc3Rhd2llbmllIHfFgmHFm2Npd2/Fm2NpIHN5c3RlbXUgcGxpa8OzdyAnc3BhcnNlX3N1cGVyJyBuaWUgamVzdCBvYnPFgnVnaXdhbmVcbiIKKyJkbGEgc3lzdGVtw7N3IHBsaWvDs3cgeiB3xYLEhWN6b27EhSBjZWNoxIUgbWV0YV9iZy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTA4Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2FuJ3RcbiIKKyJiZSBzZXQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBvclxuIgorInJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkZ1bmtjamEgb2Nocm9ueSBwcnplZCB3aWVsb2tyb3RueW0gbW9udG93YW5pZW0gbmllIG1vxbxlIHpvc3RhxIdcbiIKKyJ3xYLEhWN6b25hLCBqZcWbbGkgc3lzdGVtIHBsaWvDs3cgamVzdCB6YW1vbnRvd2FueSBsdWIgdHlsa28gZG8gb2Rjenl0dS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIiIKKyJaYXZlenBpZWN6ZW5pZSBwcnplZCB3aWVsb2tyb3RueW0gbW9udG93YW5pZW0gem9zdGHFgmEgd8WCxIVjem9uYSB6IGN6YXNlbSAiCisidWFrdHVhbG5pYW5pYSAlZHMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUzNQorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbm5vdFxuIgorImJlIGRpc2FibGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIHJlYWRvbmx5LlxuIgorbXNnc3RyICIiCisiRnVua2NqYSB6YWJlenBpZWN6ZW5pYSBwcnplZCB3aWVsb2tyb3RueW0gbW9udG93YW5pZW0gbmllIG1vxbxlIHpvc3RhxIdcbiIKKyJ3ecWCxIVjem9uYSwgamXFm2xpIHN5c3RlbSBwbGlrw7N3IGplc3QgdHlsa28gZG8gb2Rjenl0dS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTQzCittc2dpZCAiRXJyb3Igd2hpbGUgcmVhZGluZyBiaXRtYXBzXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIG9kY3p5dHUgYml0bWFwXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1MgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWdpYyBudW1iZXIgaW4gTU1QIGJsb2NrIGRvZXMgbm90IG1hdGNoLiBleHBlY3RlZDogJXgsIGFjdHVhbDogJXhcbiIKK21zZ3N0ciAiTGljemJhIG1hZ2ljem5hIHcgYmxva3UgTU1QIHNpxJkgbmllIHpnYWR6YTsgb2N6ZWtpd2FubyAleCwgamVzdCAleFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1NTcKK21zZ2lkICJ3aGlsZSByZWFkaW5nIE1NUCBibG9jay4iCittc2dzdHIgInBvZGN6YXMgb2Rjenl0dSBibG9rdSBNTVAuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1ODkKK21zZ2lkICIiCisiQ2xlYXJpbmcgdGhlIGZsZXhfYmcgZmxhZyB3b3VsZCBjYXVzZSB0aGUgdGhlIGZpbGVzeXN0ZW0gdG8gYmVcbiIKKyJpbmNvbnNpc3RlbnQuXG4iCittc2dzdHIgIld5xYLEhWN6ZW5pZSBmbGFnaSBmbGV4X2JnIHNwb3dvZHVqZSBuaWVzcMOzam5vxZvEhyBzeXN0ZW11IHBsaWvDs3cuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjYwMAorbXNnaWQgIiIKKyJUaGUgaHVnZV9maWxlIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiRmxhZ2EgaHVnZV9maWxlIG1vxbxlIGJ5xIcgd3ljenlzemN6b25hIHR5bGtvIGtpZWR5IHN5c3RlbSBwbGlrw7N3XG4iCisiamVzdCBvZG1vbnRvd2FueSBsdWIgemFtb250b3dhbnkgdHlsa28gZG8gb2Rjenl0dS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjYwCittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6ICdecXVvdGEnIG9wdGlvbiBvdmVycmlkZXMgJy1RJ2FyZ3VtZW50cy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlV3YWdhOiBvcGNqYSAnXnF1b3RhJyBuYWRwaXN1amUgYXJndW1lbnR5ICctUScuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcwNQorbXNnaWQgIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIGEgam91cm5hbC5cbiIKK21zZ3N0ciAiU3lzdGVtIHBsaWvDs3cganXFvCBtYSBrcm9uaWvEmS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgb24gJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlx0cG9kY3phcyBwcsOzYnkgb3R3b3J6ZW5pYSBrcm9uaWtpIG5hICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIG9uIGRldmljZSAlczogIgorbXNnc3RyICJUd29yemVuaWUga3JvbmlraSBuYSB1cnrEhWR6ZW5pdSAlczogIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgYWRkaW5nIGZpbGVzeXN0ZW0gdG8gam91cm5hbCBvbiAlcyIKK21zZ3N0ciAicG9kY3phcyBkb2Rhd2FuaWEgc3lzdGVtdSBwbGlrw7N3IGRvIGtyb25pa2kgbmEgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc0MworbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgaW5vZGU6ICIKK21zZ3N0ciAiVHdvcnplbmllIGktd8SZesWCYSBrcm9uaWtpOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc1NworbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCBmaWxlIgorbXNnc3RyICIiCisiXG4iCisiXHRwb2RjemFzIHByw7NieSB1dHdvcnplbmlhIHBsaWt1IGtyb25pa2kiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjgzMgorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBxdW90YSBvcHRpb25zIVxuIgorbXNnc3RyICJOaWUgbW/FvG5hIHByenlkemllbGnEhyBwYW1pxJljaSBkbyBhbmFsaXp5IG9wY2ppIGxpbWl0w7N3IVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4NTQKK21zZ2lkICIiCisiXG4iCisiQmFkIHF1b3RhIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkZvbGxvd2luZyB2YWxpZCBxdW90YSBvcHRpb25zIGFyZSBhdmFpbGFibGUgKHBhc3MgYnkgc2VwYXJhdGluZyB3aXRoICIKKyJjb21tYSk6XG4iCisiXHRbXl11c3JxdW90YVxuIgorIlx0W15dZ3JwcXVvdGFcbiIKKyJcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBvZGFubyBixYLEmWRuZSBvcGNqZSBsaW1pdMOzdy5cbiIKKyJcbiIKKyJEb3N0xJlwbmUgc8SFIG5hc3TEmXB1asSFY2Ugb3BjamUgbGltaXTDs3cgKG1vxbxuYSBqZSBwcnpla2F6eXdhxIcgb2RkemllbG9uZSAiCisicHJ6ZWNpbmtpZW0pOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBwYXJzZSBkYXRlL3RpbWUgc3BlY2lmaWVyOiAlcyIKK21zZ3N0ciAiTmllIG1vxbxuYSBwcnplYW5hbGl6b3dhxIcgcG9kYW5laiBkYXR5L2N6YXN1OiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTQyIG1pc2MvdHVuZTJmcy5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbW91bnRzIGNvdW50IC0gJXMiCittc2dzdHIgImLFgsSZZG5hIGxpY3piYSBtb250b3dhxYQgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBlcnJvciBiZWhhdmlvciAtICVzIgorbXNnc3RyICJixYLEmWRuZSB0cmFrdG93YW5pZSBixYLEmWTDs3cgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaWQvZ3JvdXAgbmFtZSAtICVzIgorbXNnc3RyICJixYLEmWRueSBnaWQvbmF6d2EgZ3J1cHkgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW50ZXJ2YWwgLSAlcyIKK21zZ3N0ciAiYsWCxJlkbnkgb2RzdMSZcCAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9jayByYXRpbyAtICVzIgorbXNnc3RyICJixYLEmWRueSBwcm9jZW50IHphcmV6ZXJ3b3dhbnljaCBibG9rw7N3IC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNzUKK21zZ2lkICItbyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiLW8gbW/FvGUgYnnEhyBwb2RhbmUgdHlsa28gcmF6IgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDg0Cittc2dpZCAiLU8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1PIG1vxbxlIGJ5xIcgcG9kYW5lIHR5bGtvIHJheiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IC0gJXMiCittc2dzdHIgImLFgsSZZG5hIGxpY3piYSB6YXJlemVyd293YW55Y2ggYmxva8OzdyAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB1aWQvdXNlciBuYW1lIC0gJXMiCittc2dzdHIgImLFgsSZZG55IHVpZC9uYXp3YSB1xbx5dGtvd25pa2EgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTE0NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICJixYLEmWRueSByb3ptaWFyIGktd8SZesWCYSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIklub2RlIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by0gJXMiCittc2dzdHIgIlJvem1pYXIgaS13xJl6xYJhIG11c2kgYnnEhyBwb3TEmWfEhSBkd8OzamtpIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibW1wX3VwZGF0ZV9pbnRlcnZhbCB0b28gYmlnOiAlbHVcbiIKK21zZ3N0ciAiT2tyZXMgdWFrdHVhbG5pYW5pYSBtbXAgemJ5dCBkdcW8eTogJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kXG4iCittc2dpZF9wbHVyYWwgIiIKKyJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHJbMF0gIiIKKyJVc3Rhd2lhbmllIG9rcmVzdSB1YWt0dWFsbmlhbmlhIHphYmV6cGllY3plbmlhIHByemVkIHdpZWxva3JvdG55bSAiCisibW9udG93YW5pZW0gbmEgJWx1IHNla3VuZMSZXG4iCittc2dzdHJbMV0gIiIKKyJVc3Rhd2lhbmllIG9rcmVzdSB1YWt0dWFsbmlhbmlhIHphYmV6cGllY3plbmlhIHByemVkIHdpZWxva3JvdG55bSAiCisibW9udG93YW5pZW0gbmEgJWx1IHNla3VuZHlcbiIKK21zZ3N0clsyXSAiIgorIlVzdGF3aWFuaWUgb2tyZXN1IHVha3R1YWxuaWFuaWEgemFiZXpwaWVjemVuaWEgcHJ6ZWQgd2llbG9rcm90bnltICIKKyJtb250b3dhbmllbSBuYSAlbHUgc2VrdW5kXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlkZTogJXNcbiIKK21zZ3N0ciAiQsWCxJlkbnkgcGFyYW1ldHIgUkFJRCBzdHJpZGU6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlwZS13aWR0aDogJXNcbiIKK21zZ3N0ciAiQsWCxJlkbnkgcGFyYW1ldHIgUkFJRCBzdHJpcGUtd2lkdGg6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBoYXNoIGFsZ29yaXRobTogJXNcbiIKK21zZ3N0ciAiQsWCxJlkbnkgYWxnb3J5dG0gaGFzem93YW5pYTogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gdG8gJXMgKCVkKVxuIgorbXNnc3RyICJVc3Rhd2lhbmllIGRvbXnFm2xuZWdvIGFsZ29yeXRtdSBoYXN6b3dhbmlhIG5hICVzICglZClcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTMzMQorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0Y2xlYXJfbW1wXG4iCisiXHRoYXNoX2FsZz08aGFzaCBhbGdvcml0aG0+XG4iCisiXHRtb3VudF9vcHRzPTxleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnM+XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgY2h1bmsgc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGVfd2lkdGg9PFJBSUQgc3RyaWRlKmRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0XnRlc3RfZnNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBvZGFubyBixYLEmWRuZSBvcGNqZS5cbiIKKyJcbiIKKyJPcGNqZSByb3pzemVyem9uZSBzxIUgb2RkemllbGFuZSBwcnplY2lua2FtaSBpIG1vZ8SFIHByenlqbW93YcSHIHBhcmFtZXRyLFxuIgorIlx0a3TDs3J5IGplc3QgdXN0YXdpYW55IHpuYWtpZW0gJz0nLlxuIgorIlxuIgorIlBvcHJhd25lIG9wY2plIHRvOlxuIgorIlx0Y2xlYXJfbW1wXG4iCisiXHRoYXNoX2FsZz08YWxnb3J5dG0gaGFzem93YW5pYT5cbiIKKyJcdG1vdW50X29wdHM9PHJvenN6ZXJ6b25lIGRvbXnFm2xuZSBvcGNqZSBtb250b3dhbmlhPlxuIgorIlx0c3RyaWRlPTxyb3ptaWFyIHBvcmNqaSBkYW55Y2ggUkFJRCBuYSBkeXNrdSB3IGJsb2thY2g+XG4iCisiXHRzdHJpcGVfd2lkdGg9PFJBSUQgc3RyaWRlICogbGljemJhIGR5c2vDs3cgZGFueWNoIHcgYmxva2FjaD5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdF50ZXN0X2ZzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3OTgKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBpbm9kZSBiaXRtYXBcbiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIG9kY3p5dGHEhyBiaXRtYXB5IGktd8SZesWCw7N3XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MDMKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBibG9jayBiaXRtYXBcbiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIG9kY3p5dGHEhyBiaXRtYXB5IGJsb2vDs3dcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyMCByZXNpemUvcmVzaXplMmZzLmM6OTMxCittc2dpZCAiYmxvY2tzIHRvIGJlIG1vdmVkIgorbXNnc3RyICJibG9raSBkbyBwcnplbmllc2llbmlhIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODIzCittc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrIGJpdG1hcCB3aGVuIGluY3JlYXNpbmcgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICIiCisiTmllIHVkYcWCbyBzacSZIHByenlkemllbGnEhyBiaXRtYXB5IGJsb2vDs3cgcG9kY3phcyB6d2nEmWtzemFuaWEgcm96bWlhcnUgaS0iCisid8SZesWCYVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODI5Cittc2dpZCAiTm90IGVub3VnaCBzcGFjZSB0byBpbmNyZWFzZSBpbm9kZSBzaXplIFxuIgorbXNnc3RyICJaYSBtYcWCbyBtaWVqc2NhLCBhYnkgendpxJlrc3p5xIcgcm96bWlhciBpLXfEmXrFgmFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgzNAorbXNnaWQgIkZhaWxlZCB0byByZWxvY2F0ZSBibG9ja3MgZHVyaW5nIGlub2RlIHJlc2l6ZSBcbiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHByemVtaWXFm2NpxIcgYmxva8OzdyBwb2RjemFzIHptaWFueSByb3ptaWFydSBpLXfEmXrFgmFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTg2NgorbXNnaWQgIiIKKyJFcnJvciBpbiByZXNpemluZyB0aGUgaW5vZGUgc2l6ZS5cbiIKKyJSdW4gZTJ1bmRvIHRvIHVuZG8gdGhlIGZpbGUgc3lzdGVtIGNoYW5nZXMuIFxuIgorbXNnc3RyICIiCisiQsWCxIVkIHBvZGN6YXMgem1pYW55IHJvem1pYXJ1IGktd8SZesWCYS5cbiIKKyJOYWxlxbx5IHVydWNob21pxIcgZTJ1bmRvIHcgY2VsdSB3eWNvZmFuaWEgem1pYW4gdyBzeXN0ZW1pZSBwbGlrw7N3LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODkzCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZGIgZmlsZW5hbWVcbiIKK21zZ3N0ciAiTmllIG1vxbxuYSBwcnp5ZHppZWxpxIcgcGFtacSZY2kgbmEgbmF6d8SZIHBsaWvDs3cgdGRiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRlbGV0ZSAlcyIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgdXN1bmnEmWNpYSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gdW5kbyB0aGUgdHVuZTJmcyBvcGVyYXRpb24gcGxlYXNlIHJ1biB0aGUgY29tbWFuZFxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkFieSB3eWNvZmHEhyBvcGVyYWNqxJkgdHVuZTJmcywgcHJvc3rEmSB3eWRhxIcgcG9sZWNlbmllXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNTVAgYmxvY2sgbWFnaWMgaXMgYmFkLiBUcnkgdG8gZml4IGl0IGJ5IHJ1bm5pbmc6XG4iCisiJ2UyZnNjayAtZiAlcydcbiIKK21zZ3N0ciAiIgorIkxpY3piYSBtYWdpY3puYSBibG9rdSBNTVAgamVzdCBixYLEmWRuYS4gTW/FvG5hIHByw7Nib3dhxIcgdG8gbmFwcmF3acSHICIKKyJ1cnVjaGFtaWFqxIVjOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGlub2RlIHNpemUgaXMgYWxyZWFkeSAlbHVcbiIKK21zZ3N0ciAiUm96bWlhciBpLXfEmXrFgmEganXFvCB3eW5vc2kgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwODEKK21zZ2lkICJTaHJpbmtpbmcgaW5vZGUgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIlptbmllanN6YW5pZSByb3ptaWFydSBpLXfEmXrFgmEgbmllIGplc3Qgb2JzxYJ1Z2l3YW5lXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpbm9kZSBzaXplICVsdSAobWF4ICVkKVxuIgorbXNnc3RyICJCxYLEmWRueSByb3ptaWFyIGktd8SZesWCYSAlbHUgKG1heCAlZClcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSBtYWtzeW1hbG5laiBsaWN6YnkgbW9udG93YcWEIG5hICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjdXJyZW50IG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIlVzdGF3aWFuaWUgYWt0dWFsbmVnbyBsaWN6bmlrYSBtb250b3dhxYQgbmEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGVycm9yIGJlaGF2aW9yIHRvICVkXG4iCittc2dzdHIgIlVzdGF3aWFuaWUgdHJha3Rvd2FuaWEgYsWCxJlkw7N3IG5hICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgZ2lkIHRvICVsdVxuIgorbXNnc3RyICJVc3Rhd2lhbmllIGdpZC1hIHphcmV6ZXJ3b3dhbnljaCBibG9rw7N3IG5hICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgIm9kc3TEmXAgcG9tacSZZHp5IHNwcmF3ZHplbmlhbWkgamVzdCB6Ynl0IGR1xbx5ICglbHUpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSBvZHN0xJlwdSBwb21pxJlkenkgc3ByYXdkemVuaWFtaSBuYSAlbHUgc2VrdW5kXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgcGVyY2VudGFnZSB0byAlZyUlICglbGx1IGJsb2NrcylcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSBwcm9jZW50dSB6YXJlemVyd293YW55Y2ggYmxva8OzdyBuYSAlZyUlICglbGx1IGJsb2vDs3cpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIGNvdW50IGlzIHRvbyBiaWcgKCVsbHUpIgorbXNnc3RyICJsaWN6YmEgemFyZXplcndvd2FueWNoIGJsb2vDs3cgamVzdCB6Ynl0IGR1xbxhICglbGx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgIlVzdGF3aWFuaWUgbGljemJ5IHphcmV6ZXJ3b3dhbnljaCBibG9rw7N3IG5hICVsbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4NworbXNnaWQgIiIKKyJcbiIKKyJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBzcGFyc2Ugc3VwZXJibG9ja3MuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTeXN0ZW0gcGxpa8OzdyBqdcW8IG1hIHJ6YWRraWUgc3VwZXJibG9raS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE5MQorbXNnaWQgIiIKKyJcbiIKKyJTZXR0aW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCBzdXBwb3J0ZWRcbiIKKyJmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgbWV0YV9iZyBmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJVc3Rhd2llbmllIGZsYWdpIHJ6YWRraWVnbyBzdXBlcmJsb2t1IG5pZSBqZXN0IG9ic8WCdWdpd2FuZVxuIgorImRsYSBzeXN0ZW3Ds3cgcGxpa8OzdyB6IHfFgsSFY3pvbsSFIGNlY2jEhSBtZXRhX2JnLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIHNldC4gICVzIgorbXNnc3RyICIiCisiXG4iCisiRmxhZ2EgcnphZGtpY2ggc3VwZXJibG9rw7N3IHVzdGF3aW9uYS4gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDcKK21zZ2lkICIiCisiXG4iCisiQ2xlYXJpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlVzdXdhbmllIGZsYWdpIHJ6YWRraWVnbyBzdXBlcmJsb2t1IG5pZSBqZXN0IG9ic8WCdWdpd2FuZS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHRpbWUgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdG8gJXNcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSBjemFzdSBvc3RhdG5pZWdvIHNwcmF3ZHplbmlhIHN5c3RlbXUgcGxpa8OzdyBuYSAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHVpZCB0byAlbHVcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSB1aWQtYSB6YXJlemVyd293YW55Y2ggYmxva8OzdyBuYSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI1MworbXNnaWQgIkVycm9yIGluIHVzaW5nIGNsZWFyX21tcC4gSXQgbXVzdCBiZSB1c2VkIHdpdGggLWZcbiIKK21zZ3N0ciAiQsWCxIVkIHcgdcW8eWNpdSBjbGVhcl9tbXAuIE9wY2phIHRhIG11c2kgYnnEhyB1xbx5dGEgeiAtZlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjcxCittc2dpZCAiIgorIlRoZSBxdW90YSBmZWF0dXJlIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIiIKKyJGdW5rY2rEmSBsaW1pdMOzdyBtb8W8bmEgem1pZW5pxIcgdHlsa28gbmEgbmllemFtb250b3dhbnltIHN5c3RlbWllIHBsaWvDs3cuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyOTIKK21zZ2lkICJUaGUgVVVJRCBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICJVVUlEIG1vxbxuYSB6bWllbmnEhyB0eWxrbyBuYSBuaWV6YW1vbnRvd2FueW0gc3lzdGVtaWUgcGxpa8Ozdy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjMyMgorbXNnaWQgIkludmFsaWQgVVVJRCBmb3JtYXRcbiIKK21zZ3N0ciAiQsWCxJlkbnkgZm9ybWF0IFVVSUQtYVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzM3Cittc2dpZCAiTmVlZCB0byB1cGRhdGUgam91cm5hbCBzdXBlcmJsb2NrLlxuIgorbXNnc3RyICJUcnplYmEgdWFrdHVhbG5pxIcgc3VwZXJibG9rIGtyb25pa2kuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNTgKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiUm96bWlhciBpLXfEmXrFgmEgbW/FvG5hIHptaWVuacSHIHR5bGtvIG5hIG5pZXphbW9udG93YW55bSBzeXN0ZW1pZSBwbGlrw7N3LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzY2Cittc2dpZCAiIgorIkNoYW5naW5nIHRoZSBpbm9kZSBzaXplIG5vdCBzdXBwb3J0ZWQgZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIGZsZXhfYmdcbiIKKyJmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKyJabWlhbmEgcm96bWlhcnUgaS13xJl6xYJhIG5pZSBqZXN0IG9ic8WCdWdpd2FuYSBkbGEgc3lzdGVtw7N3IHBsaWvDs3dcbiIKKyJ6IHfFgsSFY3pvbsSFIGNlY2jEhSBmbGV4X2JnLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW5vZGUgc2l6ZSAlbHVcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSByb3ptaWFydSBpLXfEmXrFgmEgbmEgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzODIKK21zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHptaWVuacSHIHJvem1pYXJ1IGktd8SZesWCYVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaWRlIHNpemUgdG8gJWRcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSByb3ptaWFydSBzdHJpZGUgbmEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlwZSB3aWR0aCB0byAlZFxuIgorbXNnc3RyICJVc3Rhd2lhbmllIHN6ZXJva2/Fm2NpIHN0cmlwZSBuYSBuYSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zIHRvICclcydcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSByb3pzemVyem9ueWNoIGRvbXnFm2xueWNoIG9wY2ppIG1vbnRvd2FuaWEgbmEgJyVzJ1xuIgorCisjOiBtaXNjL3V0aWwuYzo5MworbXNnaWQgIjxwcm9jZWVkaW5nPlxuIgorbXNnc3RyICI8a29udHludWFjamE+XG4iCisKKyM6IG1pc2MvdXRpbC5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlByb2NlZWQgYW55d2F5IChvciB3YWl0ICVkIHNlY29uZHMpID8gKHksbikgIgorbXNnc3RyICJLb250eW51b3dhxIcgbWltbyB0byAobHViIG9kY3pla2HEhyAlZCBzKT8gKHQsbikgIgorCisjOiBtaXNjL3V0aWwuYzoxMDEKK21zZ2lkICJQcm9jZWVkIGFueXdheT8gKHksbikgIgorbXNnc3RyICJLb250eW51b3dhxIcgbWltbyB0bz8gKHQsbikgIgorCisjOiBtaXNjL3V0aWwuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vdW50ZWQgb24gJXMgb24gJXMiCittc2dzdHIgIlx0b3N0YXRuaW8gbW9udG93YW5vICVzIHBvZCAlcyIKKworIzogbWlzYy91dGlsLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0bGFzdCBtb3VudGVkIG9uICVzIgorbXNnc3RyICJcdG9zdGF0bmlvIG1vbnRvd2FubyAlcyIKKworIzogbWlzYy91dGlsLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0Y3JlYXRlZCBvbiAlcyIKK21zZ3N0ciAiXHR1dHdvcnpvbm8gJXMiCisKKyM6IG1pc2MvdXRpbC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW9kaWZpZWQgb24gJXMiCittc2dzdHIgIlx0b3N0YXRuaW8gem1vZHlmaWtvd2FubyAlcyIKKworIzogbWlzYy91dGlsLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvdW5kIGEgJXMgcGFydGl0aW9uIHRhYmxlIGluICVzXG4iCittc2dzdHIgIlpuYWxlemlvbm8gdGFibGljxJkgcGFydHljamkgJXMgdyAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGZpbGUgJXMgZG9lcyBub3QgZXhpc3QgYW5kIG5vIHNpemUgd2FzIHNwZWNpZmllZC5cbiIKK21zZ3N0ciAiUGxpayAlcyBuaWUgaXN0bmllamUgaSBuaWUgcG9kYW5vIHJvem1pYXJ1LlxuIgorCisjOiBtaXNjL3V0aWwuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgcmVndWxhciBmaWxlICVzXG4iCittc2dzdHIgIlR3b3J6ZW5pZSB6d3lrxYJlZ28gcGxpa3UgJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgb3R3b3J6ecSHICVzOiAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMTYKK21zZ2lkICIiCisiXG4iCisiVGhlIGRldmljZSBhcHBhcmVudGx5IGRvZXMgbm90IGV4aXN0OyBkaWQgeW91IHNwZWNpZnkgaXQgY29ycmVjdGx5P1xuIgorbXNnc3RyICIiCisiXG4iCisiVXJ6xIVkemVuaWUgbmFqd3lyYcW6bmllaiBuaWUgaXN0bmllamU7IGN6eSB6b3N0YcWCbyBwb2RhbmUgcG9wcmF3bmllP1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIG5pZSBqZXN0IHNwZWNqYWxueW0gdXJ6xIVkemVuaWVtIGJsb2tvd3ltLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbSBsYWJlbGxlZCAnJXMnXG4iCittc2dzdHIgIiVzIHphd2llcmEgc3lzdGVtIHBsaWvDs3cgJXMgeiBldHlraWV0xIUgJyVzJ1xuIgorCisjOiBtaXNjL3V0aWwuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICIlcyB6YXdpZXJhIHN5c3RlbSBwbGlrw7N3ICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBlbnRpcmUgZGV2aWNlLCBub3QganVzdCBvbmUgcGFydGl0aW9uIVxuIgorbXNnc3RyICIlcyBqZXN0IGNhxYJ5bSB1cnrEhWR6ZW5pZW0sIGEgbmllIHR5bGtvIGplZG7EhSBwYXJ0eWNqxIUhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMyMworbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICJta2UyZnMgd3ltdXN6b25lIG1pbW8gdG8uIE1hbSBuYWR6aWVqxJksIMW8ZSAvZXRjL210YWIgc2nEmSBteWxpLlxuIgorCisjOiBtaXNjL3V0aWwuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgbWFrZSBhICVzIGhlcmUhXG4iCittc2dzdHIgIm5pZSB6cm9iacSZIHR1dGFqICVzIVxuIgorCisjOiBtaXNjL3V0aWwuYzozMzUKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAibWtlMmZzIHd5bXVzem9uZSBtaW1vIHRvLlxuIgorCisjOiBtaXNjL3V0aWwuYzozNTEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugam91cm5hbCBvcHRpb25zIVxuIgorbXNnc3RyICJOaWUgbW/FvG5hIHByenlkemllbGnEhyBwYW1pxJljaSBuYSBhbmFsaXrEmSBvcGNqaSBrcm9uaWtpIVxuIgorCisjOiBtaXNjL3V0aWwuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCBmaW5kIGpvdXJuYWwgZGV2aWNlIG1hdGNoaW5nICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOaWUgbW/FvG5hIHpuYWxlxbrEhyB1cnrEhWR6ZW5pYSBrcm9uaWtpIHBhc3VqxIVjZWdvIGRvICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQwMworbXNnaWQgIiIKKyJcbiIKKyJCYWQgam91cm5hbCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJKb3VybmFsIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBqb3VybmFsIG9wdGlvbnMgYXJlOlxuIgorIlx0c2l6ZT08am91cm5hbCBzaXplIGluIG1lZ2FieXRlcz5cbiIKKyJcdGRldmljZT08am91cm5hbCBkZXZpY2U+XG4iCisiXHRsb2NhdGlvbj08am91cm5hbCBsb2NhdGlvbj5cbiIKKyJcbiIKKyJUaGUgam91cm5hbCBzaXplIG11c3QgYmUgYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBvZGFubyBixYLEmWRuZSBvcGNqZSBrcm9uaWtpLlxuIgorIlxuIgorIk9wY2plIGtyb25pa2kgc8SFIG9kZHppZWxhbmUgcHJ6ZWNpbmthbWkgaSBtb2fEhSBwcnp5am1vd2HEhyBwYXJhbWV0cixcbiIKKyJcdGt0w7NyeSB1c3Rhd2lhIHNpxJkgem5ha2llbSAnPScuXG4iCisiXG4iCisiUG9wcmF3bmUgb3BjamUga3JvbmlraSB0bzpcbiIKKyJcdHNpemU9PHJvem1pYXIga3JvbmlraSB3IG1lZ2FiYWp0YWNoPlxuIgorIlx0ZGV2aWNlPTx1cnrEhWR6ZW5pZSBrcm9uaWtpPlxuIgorIlx0bG9jYXRpb249PHBvxYJvxbxlbmllIGtyb25pa2k+XG4iCisiXG4iCisiUm96bWlhciBrcm9uaWtpIG11c2kgYnnEhyBwb21pxJlkenkgMTAyNCBhIDEwMjQwMDAwIGJsb2thbWkgc3lzdGVtdSBwbGlrw7N3LlxuIgorIlxuIgorCisjOiBtaXNjL3V0aWwuYzo0MzQKK21zZ2lkICIiCisiXG4iCisiRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIgorbXNnc3RyICIiCisiXG4iCisiU3lzdGVtIHBsaWvDs3cgemEgbWHFgnkgbmEga3JvbmlrxJlcbiIKKworIzogbWlzYy91dGlsLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgcmVxdWVzdGVkIGpvdXJuYWwgc2l6ZSBpcyAlZCBibG9ja3M7IGl0IG11c3QgYmVcbiIKKyJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gIEFib3J0aW5nLlxuIgorbXNnc3RyICIiCisiXG4iCisixbvEhWRhbnkgcm96bWlhciBrcm9uaWtpIHRvICVkIGJsb2vDs3c7IG11c2kgYnnEh1xuIgorInBvbWnEmWR6eSAxMDI0IGEgMTAyNDAwMDAgYmxva8Ozdy4gUHJ6ZXJ3YW5vLlxuIgorCisjOiBtaXNjL3V0aWwuYzo0NDkKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBzaXplIHRvbyBiaWcgZm9yIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJSb3ptaWFyIGtyb25pa2kgemJ5dCBkdcW8eSBkbGEgc3lzdGVtdSBwbGlrw7N3LlxuIgorCisjOiBtaXNjL3V0aWwuYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZXN5c3RlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hlY2tlZCBldmVyeSAlZCBtb3VudHMgb3JcbiIKKyIlZyBkYXlzLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuICBVc2UgdHVuZTJmcyAtYyBvciAtaSB0byBvdmVycmlkZS5cbiIKK21zZ3N0ciAiIgorIlRlbiBzeXN0ZW0gcGxpa8OzdyBixJlkemllIGF1dG9tYXR5Y3puaWUgc3ByYXdkemFueSBjbyBrYcW8ZGUgJWQgbW9udG93YcWEXG4iCisibHViIGNvICVnIGRuaSwgemFsZcW8bmllIGNvIG5hc3TEhXBpIHBpZXJ3c3plLiBNb8W8bmEgdG8gem1pZW5pxIcgcG9wcnplelxuIgorInR1bmUyZnMgLWMgbHViIC1pLlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstZF0gWy1wIHBpZGZpbGVdIFstcyBzb2NrZXRwYXRoXSBbLVQgdGltZW91dF1cbiIKK21zZ3N0ciAiIgorIlNrxYJhZG5pYTogJXMgWy1kXSBbLXAgcGxpa19waWRdIFstcyDFm2NpZcW8a2FfZ25pYXpkYV0gWy1UIGxpbWl0X2N6YXN1XVxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIFstcnx0XSBbLW4gbnVtXSBbLXMgc29ja2V0cGF0aF1cbiIKK21zZ3N0ciAiICAgICAgICAgICVzIFstcnx0XSBbLW4gaWxlXSBbLXMgxZtjaWXFvGthX2duaWF6ZGFdXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiICAgICAgICAgICVzIC1rXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoxNTUKK21zZ2lkICJiYWQgYXJndW1lbnRzIgorbXNnc3RyICJixYLEmWRuZSBhcmd1bWVudHkiCisKKyM6IG1pc2MvdXVpZGQuYzoxNzMKK21zZ2lkICJjb25uZWN0IgorbXNnc3RyICLFgsSFY3plbmllIgorCisjOiBtaXNjL3V1aWRkLmM6MTkyCittc2dpZCAid3JpdGUiCittc2dzdHIgInphcGlzIgorCisjOiBtaXNjL3V1aWRkLmM6MjAwCittc2dpZCAicmVhZCBjb3VudCIKK21zZ3N0ciAib2Rjenl0IGxpY3pieSIKKworIzogbWlzYy91dWlkZC5jOjIwNgorbXNnaWQgImJhZCByZXNwb25zZSBsZW5ndGgiCittc2dzdHIgImLFgsSZZG5hIGTFgnVnb8WbxIcgb2Rwb3dpZWR6aSIKKworIzogbWlzYy91dWlkZC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1dWlkZCBkYWVtb24gYWxyZWFkeSBydW5uaW5nIGF0IHBpZCAlc1xuIgorbXNnc3RyICJkZW1vbiB1dWlkZCBqdcW8IGR6aWHFgmEgeiBwaWRlbSAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgdXR3b3J6ecSHIHVuaWtzb3dlZ28gZ25pYXpkYSBzdHJ1bWllbmlvd2VnbzogJXMiCisKKyM6IG1pc2MvdXVpZGQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHBvZHBpxIXEhyBnbmlhemRhIHVuaWtzb3dlZ28gJXM6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbGlzdGVuIG9uIHVuaXggc29ja2V0ICVzOiAlc1xuIgorbXNnc3RyICJOaWUgbW/FvG5hIG5hc8WCdWNoaXdhxIcgbmEgZ25pZcW6ZHppZSB1bmlrc293eW0gJXM6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBmcm9tIGNsaWVudCwgbGVuID0gJWRcbiIKK21zZ3N0ciAiQsWCxIVkIG9kY3p5dHUgb2Qga2xpZW50YSwgZMWCdWdvxZvEhyA9ICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlcmF0aW9uICVkLCBpbmNvbWluZyBudW0gPSAlZFxuIgorbXNnc3RyICJvcGVyYWNqYSAlZCwgbGljemJhIHByenljaG9kesSFY2EgPSAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQ6ICVzXG4iCittc2dzdHIgIld5Z2VuZXJvd2FueSBVVUlEIGN6YXNvd3k6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHJhbmRvbSBVVUlEOiAlc1xuIgorbXNnc3RyICJXeWdlbmVyb3dhbnkgVVVJRCBsb3Nvd3k6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kICVkIHN1YnNlcXVlbnQgVVVJRHNcbiIKK21zZ3N0clswXSAiV3lnZW5lcm93YW55IFVVSUQgY3phc293eSAlcyBpIGtvbGVqbnlcbiIKK21zZ3N0clsxXSAiV3lnZW5lcm93YW55IFVVSUQgY3phc293eSAlcyBpICVkIGtvbGVqbmVcbiIKK21zZ3N0clsyXSAiV3lnZW5lcm93YW55IFVVSUQgY3phc293eSAlcyBpICVkIGtvbGVqbnljaFxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCAlZCBVVUlEJ3M6XG4iCittc2dzdHIgIld5Z2VuZXJvd2FubyAlZCBVVUlELcOzdzpcbiIKKworIzogbWlzYy91dWlkZC5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiAlZFxuIgorbXNnc3RyICJCxYLEmWRuYSBvcGVyYWNqYSAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDc3IG1pc2MvdXVpZGQuYzo0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlcjogJXNcbiIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTM0IG1pc2MvdXVpZGQuYzo1NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2FsbGluZyB1dWlkZCBkYWVtb24gKCVzKTogJXNcbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgd3l3b8WCYW5pYSBkZW1vbmEgdXVpZGQgKCVzKTogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiVzIGkga29sZWpueSBVVUlEXG4iCittc2dzdHJbMV0gIiVzIGkgJWQga29sZWpuZSBVVUlELXlcbiIKK21zZ3N0clsyXSAiJXMgaSAlZCBrb2xlam55Y2ggVVVJRC3Ds3dcbiIKKworIzogbWlzYy91dWlkZC5jOjU0OAorbXNnaWQgIkxpc3Qgb2YgVVVJRCdzOlxuIgorbXNnc3RyICJMaXN0YSBVVUlELcOzdzpcbiIKKworIzogbWlzYy91dWlkZC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHJlcGx5IGxlbmd0aCBmcm9tIHNlcnZlciAlZFxuIgorbXNnc3RyICJOaWVvY3pla2l3YW5hIGTFgnVnb8WbxIcgb2Rwb3dpZWR6aSBzZXJ3ZXJhOiAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGtpbGwgdXVpZGQgcnVubmluZyBhdCBwaWQgJWQ6ICVzXG4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB6YWJpxIcgdXVpZGQgZHppYcWCYWrEhWNlZ28geiBwaWRlbSAlZDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJLaWxsZWQgdXVpZGQgcnVubmluZyBhdCBwaWQgJWRcbiIKK21zZ3N0ciAiWmFwaXRvIHV1aWRkIGR6aWHFgmFqxIVjeSB6IHBpZGVtICVkXG4iCisKKyM6IG1pc2MvdXVpZGdlbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJdIFstdF1cbiIKK21zZ3N0ciAiU2vFgmFkbmlhOiAlcyBbLXJdIFstdF1cbiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMgorbXNnaWQgIiMgRXh0ZW50IGR1bXA6XG4iCittc2dzdHIgIiMgWnJ6dXQgZWtzdGVudHU6XG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iCittc2dzdHIgIiNcdE51bT0lbGx1LCBSb3ptaWFyPSVsbHUsIEt1cnNvcj0lbGx1LCBTb3J0b3dhbmU9JWxsdVxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1kIGRlYnVnX2ZsYWdzXSBbLWZdIFstRl0gWy1NXSBbLVBdIFstcF0gZGV2aWNlIFtuZXdfc2l6ZV1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlNrxYJhZG5pYTogJXMgWy1kIGZsYWdpX8WbbGVkemVuaWFdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSB1cnrEhWR6ZW5pZSAiCisiW25vd3lfcm96bV1cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo2NgorbXNnaWQgIkV4dGVuZGluZyB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIlJvenN6ZXJ6YW5pZSB0YWJsaWN5IGktd8SZesWCw7N3IgorCisjOiByZXNpemUvbWFpbi5jOjY5Cittc2dpZCAiUmVsb2NhdGluZyBibG9ja3MiCittc2dzdHIgIlJlbG9rb3dhbmllIGJsb2vDs3ciCisKKyM6IHJlc2l6ZS9tYWluLmM6NzIKK21zZ2lkICJTY2FubmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiUHJ6ZXN6dWtpd2FuaWUgdGFibGljeSBpLXfEmXrFgsOzdyIKKworIzogcmVzaXplL21haW4uYzo3NQorbXNnaWQgIlVwZGF0aW5nIGlub2RlIHJlZmVyZW5jZXMiCittc2dzdHIgIlVha3R1YWxuaWFuaWUgb2R3b8WCYcWEIGRvIGktd8SZesWCw7N3IgorCisjOiByZXNpemUvbWFpbi5jOjc4Cittc2dpZCAiTW92aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJQcnplbm9zemVuaWUgdGFibGljeSBpLXfEmXrFgsOzdyIKKworIzogcmVzaXplL21haW4uYzo4MQorbXNnaWQgIlVua25vd24gcGFzcz8hPyIKK21zZ3N0ciAiTmllem5hbnkgcHJ6ZWJpZWc/IT8iCisKKyM6IHJlc2l6ZS9tYWluLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVnaW4gcGFzcyAlZCAobWF4ID0gJWx1KVxuIgorbXNnc3RyICJQb2N6xIV0a293eSBwcnplYmllZyAlZCAobWFrc3ltYWxueSA9ICVsdSlcbiIKKworIzogcmVzaXplL21haW4uYzoxNTUKK21zZ2lkICIiCisiXG4iCisiUmVzaXppbmcgYmlnYWxsb2MgZmlsZSBzeXN0ZW1zIGhhcyBub3QgYmVlbiBmdWxseSB0ZXN0ZWQuICBQcm9jZWVkIGF0XG4iCisieW91ciBvd24gcmlzayEgIFVzZSB0aGUgZm9yY2Ugb3B0aW9uIGlmIHlvdSB3YW50IHRvIGdvIGFoZWFkIGFueXdheS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlptaWFuYSByb3ptaWFyw7N3IHN5c3RlbcOzdyBwbGlrw7N3IGJpZ2FsbG9jIG5pZSB6b3N0YcWCYSBqZXN6Y3plIHcgcGXFgm5pXG4iCisicHJ6ZXRlc3Rvd2FuYS4gS29udHludWFjamEgdHlsa28gbmEgd8WCYXNuZSByeXp5a28hIEFieSBtaW1vIHdzenlzdGtvXG4iCisidG8gd3lrb25hxIcsIG5hbGXFvHkgdcW8ecSHIG9wY2ppIGZvcmNlLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIgorbXNnc3RyICJwb2RjemFzIG90d2llcmFuaWEgJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGdldHRpbmcgc3RhdCBpbmZvcm1hdGlvbiBmb3IgJXMiCittc2dzdHIgInBvZGN6YXMgcG9iaWVyYW5pYSBpbmZvcm1hY2ppIHN0YXQgZGxhICVzIgorCisjOiByZXNpemUvbWFpbi5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1mICVzJyBmaXJzdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlByb3N6xJkgdXJ1Y2hvbWnEhyBuYWpwaWVydyAnZTJmc2NrIC1mICVzJy5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXN0aW1hdGVkIG1pbmltdW0gc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbTogJWxsdVxuIgorbXNnc3RyICJQcnp5YmxpxbxvbnkgbWluaW1hbG55IHJvem1pYXIgc3lzdGVtdSBwbGlrw7N3OiAlbGx1XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbmV3IHNpemU6ICVzXG4iCittc2dzdHIgIkLFgsSZZG55IG5vd3kgcm96bWlhcjogJXNcbiIKKworIzogcmVzaXplL21haW4uYzo0MjEKK21zZ2lkICJOZXcgc2l6ZSB0b28gbGFyZ2UgdG8gYmUgZXhwcmVzc2VkIGluIDMyIGJpdHNcbiIKK21zZ3N0ciAiTm93eSByb3ptaWFyIHpieXQgZHXFvHksIGJ5IG3Ds2fFgiBiecSHIHd5cmHFvG9ueSB3IDMyIGJpdGFjaFxuIgorCisjOiByZXNpemUvbWFpbi5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJOZXcgc2l6ZSBzbWFsbGVyIHRoYW4gbWluaW11bSAoJWxsdSlcbiIKK21zZ3N0ciAiTm93eSByb3ptaWFyIGplc3QgbW5pZWpzenkgbmnFvCBtaW5pbWFsbnkgKCVsbHUpXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDM1Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgbGVuZ3RoIgorbXNnc3RyICJCxYLEmWRuYSBkxYJ1Z2/Fm8SHIHN0cmlkZSIKKworIzogcmVzaXplL21haW4uYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb250YWluaW5nIHBhcnRpdGlvbiAob3IgZGV2aWNlKSBpcyBvbmx5ICVsbHUgKCVkaykgYmxvY2tzLlxuIgorIllvdSByZXF1ZXN0ZWQgYSBuZXcgc2l6ZSBvZiAlbGx1IGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBhcnR5Y2phIHphd2llcmFqxIVjYSAobHViIHVyesSFZHplbmllKSBtYSB0eWxrbyAlbGx1IGJsb2vDs3cgKCVkaykuXG4iCisiWmHFvMSFZGFubyBub3dlZ28gcm96bWlhcnUgJWxsdSBibG9rw7N3LlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gaXMgYWxyZWFkeSAlbGx1ICglZGspIGJsb2NrcyBsb25nLiAgTm90aGluZyB0byBkbyFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlN5c3RlbSBwbGlrw7N3IGp1xbwgbWEgd2llbGtvxZvEhyAlbGx1ICglZGspIGJsb2vDs3cuIE5pZSBtYSBuaWMgZG8gcm9ib3R5IVxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiWm1pYW5hIHJvem1pYXJ1IHN5c3RlbXUgcGxpa8OzdyAlcyBuYSAlbGx1ICglZGspIGJsb2vDs3cuXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZXNpemUgJXMiCittc2dzdHIgInBvZGN6YXMgcHLDs2J5IHptaWFueSByb3ptaWFydSAlcyIKKworIzogcmVzaXplL21haW4uYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZnkgJXMnIHRvIGZpeCB0aGUgZmlsZXN5c3RlbVxuIgorImFmdGVyIHRoZSBhYm9ydGVkIHJlc2l6ZSBvcGVyYXRpb24uXG4iCittc2dzdHIgIiIKKyJQcm9zesSZIHVydWNob21pxIcgJ2UyZnNjayAtZnkgJXMnLCBhYnkgbmFwcmF3acSHIHN5c3RlbSBwbGlrw7N3XG4iCisicG8gcHJ6ZXJ3YW5laiBvcGVyYWNqaSB6bWlhbnkgcm96bWlhcnUuXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBvbiAlcyBpcyBub3cgJWxsdSAoJWRrKSBibG9ja3MgbG9uZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlN5c3RlbSBwbGlrw7N3IG5hICVzIG1hIHRlcmF6ICVsbHUgKCVkaykgYmxva8Ozdy5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHRydW5jYXRlICVzIgorbXNnc3RyICJwb2RjemFzIHByw7NieSBza3LDs2NlbmlhICVzIgorCisjOiByZXNpemUvb25saW5lLmM6ODIKK21zZ2lkICJrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXplIHdpdGggc3BhcnNlX3N1cGVyMiIKK21zZ3N0ciAiasSFZHJvIG5pZSBvYnPFgnVndWplIHptaWFueSByb3ptaWFydSB3IGxvY2llIHByenkgZmxhZHplIHNwYXJzZV9zdXBlcjIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4NworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXM7IG9uLWxpbmUgcmVzaXppbmcgcmVxdWlyZWRcbiIKK21zZ3N0ciAiIgorIlN5c3RlbSBwbGlrw7N3ICVzIGplc3QgemFtb250b3dhbnkgcG9kICVzOyB3eW1hZ2FuYSB6bWlhbmEgcm96bWlhcnUgdyBsb2NpZVxuIgorCisjOiByZXNpemUvb25saW5lLmM6OTEKK21zZ2lkICJPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJabW5pZWpzemFuaWUgdyBsb2NpZSBuaWUgamVzdCBvYnPFgnVnaXdhbmUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTYKK21zZ2lkICJGaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICJTeXN0ZW0gcGxpa8OzdyBuaWUgb2JzxYJ1Z3VqZSB6bWlhbnkgcm96bWlhcnUgdyBsb2NpZSIKKworIzogcmVzaXplL29ubGluZS5jOjEyNQorbXNnaWQgIk5vdCBlbm91Z2ggcmVzZXJ2ZWQgZ2R0IGJsb2NrcyBmb3IgcmVzaXppbmciCittc2dzdHIgIlpieXQgbWHFgm8gemFyZXplcndvd2FueWNoIGJsb2vDs3cgZ2R0IGRvIHptaWFueSByb3ptaWFydSIKKworIzogcmVzaXplL29ubGluZS5jOjEzMgorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHJlc2l6aW5nIGEgZmlsZSBzeXN0ZW0gdGhpcyBsYXJnZSIKK21zZ3N0ciAiSsSFZHJvIG5pZSBvYnPFgnVndWplIHptaWFueSByb3ptaWFydSB0YWsgZHXFvGVnbyBzeXN0ZW11IHBsaWvDs3ciCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gbW91bnRwb2ludCAlcyIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgb3R3YXJjaWEgcHVua3R1IG1vbnRvd2FuaWEgJXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2xkIHJlc2l6ZSBpbnRlcmZhY2UgcmVxdWVzdGVkLlxuIgorbXNnc3RyICJaYcW8xIVkYW5vIHN0YXJlZ28gaW50ZXJmZWpzdSByZXNpemUuXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNjQgcmVzaXplL29ubGluZS5jOjE4MQorbXNnaWQgIlBlcm1pc3Npb24gZGVuaWVkIHRvIHJlc2l6ZSBmaWxlc3lzdGVtIgorbXNnc3RyICJCcmFrIHVwcmF3bmllxYQgZG8gem1pYW55IHJvem1pYXJ1IHN5c3RlbXUgcGxpa8OzdyIKKworIzogcmVzaXplL29ubGluZS5jOjE2NyByZXNpemUvb25saW5lLmM6MTg3Cittc2dpZCAiV2hpbGUgY2hlY2tpbmcgZm9yIG9uLWxpbmUgcmVzaXppbmcgc3VwcG9ydCIKK21zZ3N0ciAiUG9kY3phcyBzcHJhd2R6YW5pYSBvYnPFgnVnaSB6bWlhbnkgcm96bWlhcnUgdyBsb2NpZSIKKworIzogcmVzaXplL29ubGluZS5jOjE4NAorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiSsSFZHJvIG5pZSBvYnPFgnVndWplIHptaWFueSByb3ptaWFydSB3IGxvY2llIgorCisjOiByZXNpemUvb25saW5lLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlBlcmZvcm1pbmcgYW4gb24tbGluZSByZXNpemUgb2YgJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIld5a29ueXdhbmllIHptaWFueSByb3ptaWFydSB3IGxvY2llICVzIG5hICVsbHUgKCVkaykgYmxva8Ozdy5cbiIKKworIzogcmVzaXplL29ubGluZS5jOjIzMworbXNnaWQgIldoaWxlIHRyeWluZyB0byBleHRlbmQgdGhlIGxhc3QgZ3JvdXAiCittc2dzdHIgIlBvZGN6YXMgcHLDs2J5IHJvenN6ZXJ6ZW5pYSBvc3RhdG5pZWogZ3J1cHkiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgdHJ5aW5nIHRvIGFkZCBncm91cCAjJWQiCittc2dzdHIgIlBvZGN6YXMgcHLDs2J5IGRvZGFuaWEgZ3J1cHkgIyVkIgorCisjOiByZXNpemUvb25saW5lLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXMsIGFuZCBvbi1saW5lIHJlc2l6aW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gIgorInRoaXMgc3lzdGVtLlxuIgorbXNnc3RyICIiCisiU3lzdGVtIHBsaWvDs3cgbmEgJXMgamVzdCB6YW1vbnRvd2FueSBwb2QgJXMsIHptaWFuYSByb3ptaWFydSB3IGxvY2llIG5pZSAiCisiamVzdCBvYnPFgnVnaXdhbmEgbmEgdHltIHN5c3RlbWllLlxuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgImlub2RlcyAoJWxsdSkgbXVzdCBiZSBsZXNzIHRoYW4gJXUiCittc2dzdHIgImxpY3piYSBpLXfEmXrFgsOzdyAoJWxsdSkgbXVzaSBiecSHIG1uaWVqc3phIG5pxbwgJXUiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo2OTEKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MiCittc2dzdHIgInphcmV6ZXJ3b3dhbmUgYmxva2kiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo5MzYKK21zZ2lkICJtZXRhLWRhdGEgYmxvY2tzIgorbXNnc3RyICJibG9raSBtZXRhZGFueWNoIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MTAzOSByZXNpemUvcmVzaXplMmZzLmM6MTgzNgorbXNnaWQgIm5ldyBtZXRhIGJsb2NrcyIKK21zZ3N0ciAibm93ZSBibG9raSBtZXRhIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjA1NgorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW4hICBObyBzYiBpbiBsYXN0IHN1cGVyX3NwYXJzZSBiZz9cbiIKK21zZ3N0ciAiVG8gc2nEmSBuaWUgcG93aW5ubyB6ZGFyennEhyEgQnJhayBzYiB3IG9zdGF0bmltIHN1cGVyX3NwYXJzZSBiZz9cbiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjIwNjEKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuISAgVW5leHBlY3RlZCBvbGRfZGVzYyBpbiBzdXBlcl9zcGFyc2UgYmc/XG4iCittc2dzdHIgIiIKKyJUbyBzacSZIG5pZSBwb3dpbm5vIHpkYXJ6ecSHISBOaWVvY3pla2l3YW5lIG9sZF9kZXNjIHcgc3VwZXJfc3BhcnNlIGJnP1xuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjEzOQorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW46IHJlc2l6ZSBpbm9kZSBjb3JydXB0IVxuIgorbXNnc3RyICJOaWdkeSBzacSZIG5pZSBwb3dpbm5vIHpkYXJ6ecSHOiBpLXfEmXplxYIgem1pYW55IHJvem1pYXJ1IHVzemtvZHpvbnkhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMQorIywgZnV6enkKK21zZ2lkICJFWFQyRlMgTGlicmFyeSB2ZXJzaW9uIDEuNDIuMTMiCittc2dzdHIgIkJpYmxpb3Rla2EgRVhUMkZTIHcgd2Vyc2ppIDEuNDIuMTIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0Ml9maWxzeXMgc3RydWN0dXJlIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgZGxhIHN0cnVrdHVyeSBleHQyX2ZpbHN5cyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBiYWRibG9ja3NfbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgc3RydWt0dXJ5IGJhZGJsb2Nrc19saXN0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19pdGVyYXRlIHN0cnVjdHVyZSIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIGRsYSBzdHJ1a3R1cnkgYmFkYmxvY2tzX2l0ZXJhdGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfc2NhbiBzdHJ1Y3R1cmUiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgc3RydWt0dXJ5IGlub2RlX3NjYW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgc3RydWt0dXJ5IGlvX2NoYW5uZWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdW5peCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIGRsYSBzdHJ1a3R1cnkgaW9fY2hhbm5lbCB0eXB1IHVuaXgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fbWFuYWdlciBzdHJ1Y3R1cmUiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgc3RydWt0dXJ5IGlvX21hbmFnZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmxvY2tfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIGRsYSBzdHJ1a3R1cnkgYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgc3RydWt0dXJ5IGlub2RlX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBnZW5lcmljX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgc3RydWt0dXJ5IGdlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHRlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgc3RydWtydXR5IGlvX2NoYW5uZWwgdHlwdSB0ZXN0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGRpcmVjdG9yeSBibG9jayBsaXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIGRsYSBzdHJ1a3R1cnkgbGlzdHkgYmxva8OzdyBrYXRhbG9ndSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpY291bnQgc3RydWN0dXJlIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgZGxhIHN0cnVrdHVyeSBpY291bnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgUG93ZXJxdWVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIGRsYSBzdHJ1a3R1cnkgaW9fY2hhbm5lbCB0eXB1IFBvd2VycXVlc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0MiBmaWxlIHN0cnVjdHVyZSIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIGRsYSBzdHJ1a3R1cnkgcGxpa3UgZXh0MiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBFeHQyIEltYWdlIEhlYWRlciIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIGRsYSBuYWfFgsOzd2thIG9icmF6dSBleHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgZGxhIHN0cnVrdHVyeSBpb19jaGFubmVsIGktd8SZesWCYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBoYW5kbGUiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgdWNod3l0dSBla3N0ZW50dSBleHQ0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgbnVtYmVyIGluIHN1cGVyLWJsb2NrIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgdyBzdXBlcmJsb2t1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzEKK21zZ2lkICJGaWxlc3lzdGVtIHJldmlzaW9uIHRvbyBoaWdoIgorbXNnc3RyICJXZXJzamEgc3lzdGVtdSBwbGlrw7N3IHpieXQgZHXFvGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMgorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgdG8gZmlsZXN5c3RlbSBvcGVuZWQgcmVhZC1vbmx5IgorbXNnc3RyICJQcsOzYmEgemFwaXN1IHcgc3lzdGVtaWUgcGxpa8OzdyBvdHdhcnR5bSB0eWxrbyBkbyBvZGN6eXR1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzMKK21zZ2lkICJDYW4ndCByZWFkIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICJOaWUgbW/FvG5hIG9kY3p5dGHEhyBkZXNrcnlwdG9yw7N3IGdydXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNAorbXNnaWQgIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICJOaWUgbW/FvG5hIHphcGlzYcSHIGRlc2tyeXB0b3LDs3cgZ3J1cCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM1Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiVXN6a29kem9ueSBkZXNrcnlwdG9yIGdydXB5OiB3YWRsaXd5IGJsb2sgYml0bWFweSBibG9rw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzYKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgYml0bWFwIgorbXNnc3RyICJVc3prb2R6b255IGRlc2tyeXB0b3IgZ3J1cHk6IHdhZGxpd3kgYmxvayBiaXRtYXB5IGktd8SZesWCw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzcKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgdGFibGUiCittc2dzdHIgIlVzemtvZHpvbnkgZGVza3J5cHRvciBncnVweTogd2FkbGl3eSBibG9rIHRhYmxpY3kgaS13xJl6xYLDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOAorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiTmllIG1vxbxuYSB6YXBpc2HEhyBiaXRtYXB5IGktd8SZesWCw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiTmllIG1vxbxuYSBvZGN6eXRhxIcgYml0bWFweSBpLXfEmXrFgsOzdyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQwCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYSBibG9jayBiaXRtYXAiCittc2dzdHIgIk5pZSBtb8W8bmEgemFwaXNhxIcgYml0bWFweSBibG9rw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDEKK21zZ2lkICJDYW4ndCByZWFkIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICJOaWUgbW/FvG5hIG9kY3p5dGHEhyBiaXRtYXB5IGJsb2vDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MgorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJOaWUgbW/FvG5hIHphcGlzYcSHIHRhYmxpY3kgaS13xJl6xYLDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MworbXNnaWQgIkNhbid0IHJlYWQgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIk5pZSBtb8W8bmEgb2Rjenl0YcSHIHRhYmxpY3kgaS13xJl6xYLDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NAorbXNnaWQgIkNhbid0IHJlYWQgbmV4dCBpbm9kZSIKK21zZ3N0ciAiTmllIG1vxbxuYSBvZGN6eXRhxIcga29sZWpuZWdvIGktd8SZesWCYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ1Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5leHBlY3RlZCBibG9jayBzaXplIgorbXNnc3RyICJTeXN0ZW0gcGxpa8OzdyBtYSBuaWVvY3pla2l3YW55IHJvem1pYXIgYmxva3UiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NgorbXNnaWQgIkVYVDIgZGlyZWN0b3J5IGNvcnJ1cHRlZCIKK21zZ3N0ciAiS2F0YWxvZyBFWFQyIHVzemtvZHpvbnkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NworbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCIKK21zZ3N0ciAiUHLDs2JhIG9kY3p5dHUgYmxva3UgeiBzeXN0ZW11IHBsaWvDs3cgemFrb8WEY3p5xYJhIHNpxJkgc2tyw7Njb255bSBvZGN6eXRlbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ4Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBibG9jayB0byBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHdyaXRlIgorbXNnc3RyICJQcsOzYmEgemFwaXN1IGJsb2t1IHcgc3lzdGVtaWUgcGxpa8OzdyB6YWtvxYRjennFgmEgc2nEmSBza3LDs2NvbnltIHphcGlzZW0iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OQorbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gdGhlIGRpcmVjdG9yeSIKK21zZ3N0ciAiQnJhayB3b2xuZWdvIG1pZWpzY2EgdyBrYXRhbG9ndSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUwCittc2dpZCAiSW5vZGUgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgIk5pZSB3Y3p5dGFubyBiaXRtYXB5IGktd8SZesWCw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKK21zZ2lkICJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiTmllIHdjenl0YW5vIGJpdG1hcHkgYmxva8OzdyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUyCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIiCittc2dzdHIgIk5pZWRvendvbG9uYSBsaWN6YmEgaS13xJl6xYLDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJOaWVkb3p3b2xvbmEgbGljemJhIGJsb2vDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NAorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIgorbXNnc3RyICJCxYLEhWQgd2V3bsSZdHJ6bnkgdyBleHQyZnNfZXhwYW5kX2RpciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU1Cittc2dpZCAiTm90IGVub3VnaCBzcGFjZSB0byBidWlsZCBwcm9wb3NlZCBmaWxlc3lzdGVtIgorbXNnc3RyICJaYSBtYcWCbyBtaWVqc2NhIGRvIHpidWRvd2FuaWEgcHJvcG9ub3dhbmVnbyBzeXN0ZW11IHBsaWvDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NgorbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIk5pZWRvendvbG9ueSBudW1lciBibG9rdSBwcnpla2F6YW55IGRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU3Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICJOaWVkb3p3b2xvbnkgbnVtZXIgYmxva3UgcHJ6ZWthemFueSBkbyBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiTmllZG96d29sb255IG51bWVyIGJsb2t1IHByemVrYXphbnkgZG8gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTkKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICJOaWVkb3p3b2xvbnkgbnVtZXIgaS13xJl6xYJhIHByemVrYXphbnkgZG8gZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjAKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIk5pZWRvendvbG9ueSBudW1lciBpLXfEmXrFgmEgcHJ6ZWthemFueSBkbyBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYxCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiTmllZG96d29sb255IG51bWVyIGktd8SZesWCYSBwcnpla2F6YW55IGRvIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYyCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgYmxvY2sgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICJQcsOzYmEgc2ZhxYJzem93YW5pYSBrb8WEY2EgYml0bWFweSBibG9rw7N3IHphIHByYXdkeml3eW0ga2/FhGNlbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYzCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgaW5vZGUgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICJQcsOzYmEgc2ZhxYJzem93YW5pYSBrb8WEY2EgYml0bWFweSBpLXfEmXrFgsOzdyB6YSBwcmF3ZHppd3ltIGtvxYRjZW0iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NAorbXNnaWQgIklsbGVnYWwgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIlpuYWxlemlvbm8gbmllZG96d29sb255IGJsb2sgcG/Fm3JlZG5pIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKK21zZ2lkICJJbGxlZ2FsIGRvdWJseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiWm5hbGV6aW9ubyBuaWVkb3p3b2xvbnkgYmxvayBwb2R3w7NqbmllIHBvxZtyZWRuaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY2Cittc2dpZCAiSWxsZWdhbCB0cmlwbHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIlpuYWxlemlvbm8gbmllZG96d29sb255IGJsb2sgcG90csOzam5pZSBwb8WbcmVkbmkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NworbXNnaWQgIkJsb2NrIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiQml0bWFweSBibG9rw7N3IG5pZSBzxIUgdGFraWUgc2FtZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY4Cittc2dpZCAiSW5vZGUgYml0bWFwcyBhcmUgbm90IHRoZSBzYW1lIgorbXNnc3RyICJCaXRtYXB5IGktd8SZesWCw7N3IG5pZSBzxIUgdGFraWUgc2FtZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY5Cittc2dpZCAiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiCittc2dzdHIgIk5pZWRvendvbG9uYSBsdWIgxbpsZSB6YXBpc2FuYSBuYXp3YSB1cnrEhWR6ZW5pYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcwCittc2dpZCAiQSBibG9jayBncm91cCBpcyBtaXNzaW5nIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJHcnVwYSBibG9rw7N3IG5pZSBtYSB0YWJsaWN5IGktd8SZesWCw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzEKK21zZ2lkICJUaGUgZXh0MiBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQiCittc2dzdHIgIlN1cGVyYmxvayBleHQyIGplc3QgdXN6a29kem9ueSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcyCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICJOaWVkb3p3b2xvbnkgbnVtZXIgYml0dSBwcnpla2F6YW55IGRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzMKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiTmllZG96d29sb255IG51bWVyIGJpdHUgcHJ6ZWthemFueSBkbyBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzQKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIk5pZWRvendvbG9ueSBudW1lciBiaXR1IHByemVrYXphbnkgZG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NQorbXNnaWQgIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiTmFwb3RrYW5vIHpieXQgZHXFvG8gZG93acSFemHFhCBzeW1ib2xpY3pueWNoLiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc2Cittc2dpZCAiVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB0aGlzIGNhc2UiCittc2dzdHIgIkZ1bmtjamEgd3l3b8WCYW5pYSB6d3JvdG5lZ28gbmllIG9ic8WCdcW8eSB0ZWdvIHByenlwYWRrdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc3Cittc2dpZCAiVGhlIGlub2RlIGlzIGZyb20gYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJJLXfEmXplxYIgcG9jaG9kesSFY3kgeiB3YWRsaXdlZ28gYmxva3UgdyB0YWJsaWN5IGktd8SZesWCw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzgKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpIgorbXNnc3RyICJTeXN0ZW0gcGxpa8OzdyBtYSB3xYLEhWN6b25lIG5pZSBvYnPFgnVnaXdhbmUgY2VjaHkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIHJlYWQtb25seSBmZWF0dXJlKHMpIgorbXNnc3RyICJTeXN0ZW0gcGxpa8OzdyBtYSB3xYLEhWN6b25lIG5pZSBvYnPFgnVnaXdhbmUgY2VjaHkgdHlsa28gZG8gb2Rjenl0dSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgwCittc2dpZCAiSU8gQ2hhbm5lbCBmYWlsZWQgdG8gc2VlayBvbiByZWFkIG9yIHdyaXRlIgorbXNnc3RyICIiCisiTmllIHBvd2lvZMWCbyBzacSZIHByemVtaWVzemN6ZW5pZSB3IGthbmHFgiB3ZS93eSBwcnp5IG9kY3p5Y2llIGx1YiB6YXBpc2llIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODEKK21zZ2lkICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIlByenlkemllbGVuaWUgcGFtacSZY2kgbmllIHBvd2lvZMWCbyBzacSZIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkiCittc2dzdHIgIlByemVrYXphbm8gYsWCxJlkbnkgYXJndW1lbnQgZG8gYmlibGlvdGVraSBleHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODMKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgYmxvY2sgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgcHJ6eWR6aWVsacSHIGJsb2t1IHcgc3lzdGVtaWUgcGxpa8OzdyBleHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODQKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgaW5vZGUgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgcHJ6eWR6aWVsacSHIGktd8SZesWCYSB3IHN5c3RlbWllIHBsaWvDs3cgZXh0MiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg1Cittc2dpZCAiRXh0MiBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIkktd8SZemXFgiBleHQyIG5pZSBqZXN0IGthdGFsb2dpZW0iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NgorbXNnaWQgIlRvbyBtYW55IHJlZmVyZW5jZXMgaW4gdGFibGUiCittc2dzdHIgIlpieXQgZHXFvG8gb2RuaWVzaWXFhCB3IHRhYmxpY3kiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NworbXNnaWQgIkZpbGUgbm90IGZvdW5kIGJ5IGV4dDJfbG9va3VwIgorbXNnc3RyICJOaWUgem5hbGV6aW9ubyBwbGlrdSB3IGV4dDJfbG9va3VwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODgKK21zZ2lkICJGaWxlIG9wZW4gcmVhZC1vbmx5IgorbXNnc3RyICJQbGlrIG90d2FydHkgdHlsa28gZG8gb2Rjenl0dSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg5Cittc2dpZCAiRXh0MiBkaXJlY3RvcnkgYmxvY2sgbm90IGZvdW5kIgorbXNnc3RyICJOaWUgem5hbGV6aW9ubyBibG9rdSBrYXRhbG9ndSBleHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTAKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiS2F0YWxvZyBleHQyIGp1xbwgaXN0bmllamUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MQorbXNnaWQgIlVuaW1wbGVtZW50ZWQgZXh0MiBsaWJyYXJ5IGZ1bmN0aW9uIgorbXNnc3RyICJOaWUgemFpbXBsZW1lbnRvd2FuYSBmdW5rY2phIGJpYmxpb3Rla2kgZXh0MiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkyCittc2dpZCAiVXNlciBjYW5jZWwgcmVxdWVzdGVkIgorbXNnc3RyICLFu8SFZGFuaWUgcHJ6ZXJ3YW5pYSBvZCB1xbx5dGtvd25pa2EiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MworbXNnaWQgIkV4dDIgZmlsZSB0b28gYmlnIgorbXNnc3RyICJQbGlrIGV4dDIgemJ5dCBkdcW8eSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk0Cittc2dpZCAiU3VwcGxpZWQgam91cm5hbCBkZXZpY2Ugbm90IGEgYmxvY2sgZGV2aWNlIgorbXNnc3RyICJQcnpla2F6YW5lIHVyesSFZHplbmllIGtyb25pa2kgbmllIGplc3QgdXJ6xIVkemVuaWVtIGJsb2tvd3ltIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTUKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIgorbXNnc3RyICJOaWUgem5hbGV6aW9ubyBzdXBlcmJsb2t1IGtyb25pa2kiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NgorbXNnaWQgIkpvdXJuYWwgbXVzdCBiZSBhdCBsZWFzdCAxMDI0IGJsb2NrcyIKK21zZ3N0ciAiS3JvbmlrYSBtdXNpIG1pZcSHIHByenluYWptbmllaiAxMDI0IGJsb2tpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTcKK21zZ2lkICJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iCittc2dzdHIgIk5pZSBvYnPFgnVnaXdhbmEgd2Vyc2phIGtyb25pa2kiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgd2N6eXR5d2FuaWEgemV3bsSZdHJ6bmVqIGtyb25pa2kiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OQorbXNnaWQgIkpvdXJuYWwgbm90IGZvdW5kIgorbXNnc3RyICJOaWUgem5hbGV6aW9ubyBrcm9uaWtpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAwCittc2dpZCAiRGlyZWN0b3J5IGhhc2ggdW5zdXBwb3J0ZWQiCittc2dzdHIgIk5pZSBvYnPFgnVnaXdhbmUgaGFzem93YW5pZSBrYXRhbG9ndSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMQorbXNnaWQgIklsbGVnYWwgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiQsWCxJlkbnkgbnVtZXIgYmxva3UgYXRyeWJ1dHUgcm96c3plcnpvbmVnbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMgorbXNnaWQgIkNhbm5vdCBjcmVhdGUgZmlsZXN5c3RlbSB3aXRoIHJlcXVlc3RlZCBudW1iZXIgb2YgaW5vZGVzIgorbXNnc3RyICJOaWUgbW/FvG5hIHV0d29yennEhyBzeXN0ZW11IHBsaWvDs3cgbyDFvMSFZGFuZWogbGljemJpZSBpLXfEmXrFgsOzdyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMworbXNnaWQgIkUyaW1hZ2Ugc25hcHNob3Qgbm90IGluIHVzZSIKK21zZ3N0ciAiTWlnYXdrYSBlMmltYWdlIG5pZSBqZXN0IHcgdcW8eWNpdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNAorbXNnaWQgIlRvbyBtYW55IHJlc2VydmVkIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzIgorbXNnc3RyICJaYnl0IGR1xbxvIHphcmV6ZXJ3b3dhbnljaCBibG9rw7N3IGRlc2tyeXB0b3LDs3cgZ3J1cCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNQorbXNnaWQgIlJlc2l6ZSBpbm9kZSBpcyBjb3JydXB0IgorbXNnc3RyICJJLXfEmXplxYIgem1pYW55IHJvem1pYXJ1IGplc3QgdXN6a29kem9ueSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNgorbXNnaWQgIlRyaWVkIHRvIHNldCBibG9jayBibWFwIHdpdGggbWlzc2luZyBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiUHLDs2Jvd2FubyB1c3Rhd2nEhyBiaXRtYXDEmSBibG9rw7N3IHogYnJha3VqxIVjeW0gYmxva2llbSBiZXpwb8WbcmVkbmltIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA3Cittc2dpZCAiVERCOiBTdWNjZXNzIgorbXNnc3RyICJUREI6IHN1a2NlcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOAorbXNnaWQgIlREQjogQ29ycnVwdCBkYXRhYmFzZSIKK21zZ3N0ciAiVERCOiB1c3prb2R6b25hIGJhemEgZGFueWNoIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA5Cittc2dpZCAiVERCOiBJTyBFcnJvciIKK21zZ3N0ciAiVERCOiBixYLEhWQgd2Uvd3kiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTAKK21zZ2lkICJUREI6IExvY2tpbmcgZXJyb3IiCittc2dzdHIgIlREQjogYsWCxIVkIGJsb2tvd2FuaWEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTEKK21zZ2lkICJUREI6IE91dCBvZiBtZW1vcnkiCittc2dzdHIgIlREQjogYnJhayBwYW1pxJljaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMgorbXNnaWQgIlREQjogUmVjb3JkIGV4aXN0cyIKK21zZ3N0ciAiVERCOiByZWtvcmQgaXN0bmllamUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTMKK21zZ2lkICJUREI6IExvY2sgZXhpc3RzIG9uIG90aGVyIGtleXMiCittc2dzdHIgIlREQjogaXN0bmllamUgYmxva2FkYSBuYSBpbm55Y2gga2x1Y3phY2giCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTQKK21zZ2lkICJUREI6IEludmFsaWQgcGFyYW1ldGVyIgorbXNnc3RyICJUREI6IGLFgsSZZG55IHBhcmFtZXRyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE1Cittc2dpZCAiVERCOiBSZWNvcmQgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIlREQjogcmVrb3JkIG5pZSBpc3RuaWVqZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNgorbXNnaWQgIlREQjogV3JpdGUgbm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiVERCOiB6YXBpcyBuaWVkb3p3b2xvbnkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTcKK21zZ2lkICJFeHQyZnMgZGlyZWN0b3J5IGJsb2NrIGxpc3QgaXMgZW1wdHkiCittc2dzdHIgIkxpc3RhIGJsb2vDs3cga2F0YWxvZ3UgZXh0MmZzIGplc3QgcHVzdGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTgKK21zZ2lkICJBdHRlbXB0IHRvIG1vZGlmeSBhIGJsb2NrIG1hcHBpbmcgdmlhIGEgcmVhZC1vbmx5IGJsb2NrIGl0ZXJhdG9yIgorbXNnc3RyICIiCisiUHLDs2JhIHptb2R5Zmlrb3dhbmlhIG1hcHkgYmxva8OzdyBwb3ByemV6IGl0ZXJhdG9yIGJsb2vDs3cgdHlsa28gZG8gb2Rjenl0dSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgc2F2ZWQgcGF0aCIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIMWbY2llxbxraSB6YWNob3dhbnljaCBla3N0ZW50w7N3IGV4dDQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBnZW5lcmljIGJpdG1hcCIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIGRsYSBvZ8OzbG5laiBiaXRtYXB5IDY0LWJpdG93ZWoiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBibG9jayBiaXRtYXAiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgNjQtYml0b3dlaiBiaXRtYXB5IGJsb2vDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBpbm9kZSBiaXRtYXAiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgNjQtYml0b3dlaiBiaXRtYXB5IGktd8SZesWCw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xMyIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIC0tLSBSRVNFUlZFRF8xMyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTQiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSAtLS0gUkVTRVJWRURfMTQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE1IgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgLS0tIFJFU0VSVkVEXzE1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNiIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIC0tLSBSRVNFUlZFRF8xNiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTciCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSAtLS0gUkVTRVJWRURfMTciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE4IgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgLS0tIFJFU0VSVkVEXzE4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOSIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIC0tLSBSRVNFUlZFRF8xOSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMAorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGhlYWRlciIKK21zZ3N0ciAiVXN6a29kem9ueSBuYWfFgsOzd2VrIGVrc3RlbnR1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMxCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaW5kZXgiCittc2dzdHIgIlVzemtvZHpvbnkgaW5kZWtzIGVrc3RlbnR1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMyCittc2dpZCAiQ29ycnVwdCBleHRlbnQiCittc2dzdHIgIlVzemtvZHpvbnkgZWtzdGVudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMworbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gZXh0ZW50IG1hcCIKK21zZ3N0ciAiQnJhayB3b2xuZWdvIG1pZWpzY2EgdyBtYXBpZSBla3N0ZW50w7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM0Cittc2dpZCAiSW5vZGUgZG9lcyBub3QgdXNlIGV4dGVudHMiCittc2dzdHIgIkktd8SZemXFgiBuaWUgd3lrb3J6eXN0dWplIGVrc3RlbnTDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzUKK21zZ2lkICJObyAnbmV4dCcgZXh0ZW50IgorbXNnc3RyICJCcmFrIGVrc3RlbnR1IG5hc3TEmXBuZWdvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM2Cittc2dpZCAiTm8gJ3ByZXZpb3VzJyBleHRlbnQiCittc2dzdHIgIkJyYWsgZWtzdGVudHUgcG9wcnplZG5pZWdvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM3Cittc2dpZCAiTm8gJ3VwJyBleHRlbnQiCittc2dzdHIgIkJyYWsgZWtzdGVudHUgJ3cgZ8OzcsSZJyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOAorbXNnaWQgIk5vICdkb3duJyBleHRlbnQiCittc2dzdHIgIkJyYWsgZWtzdGVudHUgJ3cgZMOzxYInIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM5Cittc2dpZCAiTm8gY3VycmVudCBub2RlIgorbXNnc3RyICJCcmFrIGJpZcW8xIVjZWdvIHfEmXrFgmEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDAKK21zZ2lkICJFeHQyZnMgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIk9wZXJhY2phIGV4dDJmcyBuaWUgb2JzxYJ1Z2l3YW5hIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQxCittc2dpZCAiTm8gcm9vbSB0byBpbnNlcnQgZXh0ZW50IGluIG5vZGUiCittc2dzdHIgIkJyYWsgbWllanNjYSBuYSB3c3Rhd2llbmllIGVrc3RlbnR1IHcgd8SZxbpsZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MgorbXNnaWQgIlNwbGl0dGluZyB3b3VsZCByZXN1bHQgaW4gZW1wdHkgbm9kZSIKK21zZ3N0ciAiUG9kemllbGVuaWUgdXR3b3J6ecWCb2J5IHB1c3R5IHfEmXplxYIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDMKK21zZ2lkICJFeHRlbnQgbm90IGZvdW5kIgorbXNnc3RyICJOaWUgem5hbGV6aW9ubyBla3N0ZW50dSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NAorbXNnaWQgIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGZvciBpbm9kZXMgY29udGFpbmluZyBleHRlbnRzIgorbXNnc3RyICJPcGVyYWNqYSBuaWUgb2JzxYJ1Z2l3YW5hIGRsYSBpLXfEmXrFgsOzdyB6YXdpZXJhasSFY3ljaCBla3N0ZW50eSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiQsWCxJlkbmEgZMWCdWdvxZvEhyBla3N0ZW50dSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NgorbXNnaWQgIkkvTyBDaGFubmVsIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IGJsb2NrIG51bWJlcnMiCittc2dzdHIgIkthbmHFgiB3ZS93eSBuaWUgb2JzxYJ1Z3VqZSA2NC1iaXRvd3ljaCBudW1lcsOzdyBibG9rw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiIgorIk5pZSBtb8W8bmEgc3ByYXdkemnEhywgY3p5IHN5c3RlbSBwbGlrw7N3IGplc3QgemFtb250b3dhbnkgeiBwb3dvZHUgYnJha3UgcGxpa3UgIgorIm10YWIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDgKK21zZ2lkICJGaWxlc3lzdGVtIHRvbyBsYXJnZSB0byB1c2UgbGVnYWN5IGJpdG1hcHMiCittc2dzdHIgIlN5c3RlbSBwbGlrw7N3IHpieXQgZHXFvHksIGFieSB1xbx5xIcgYml0bWFwIHN0YXJlZ28gdHlwdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OQorbXNnaWQgIk1NUDogaW52YWxpZCBtYWdpYyBudW1iZXIiCittc2dzdHIgIk1NUDogYsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUwCittc2dpZCAiTU1QOiBkZXZpY2UgY3VycmVudGx5IGFjdGl2ZSIKK21zZ3N0ciAiTU1QOiB1cnrEhWR6ZW5pZSBvYmVjbmllIGFrdHl3bmUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICJNTVA6IGZzY2sgamVzdCB1cnVjaG9taW9ueSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MgorbXNnaWQgIk1NUDogYmxvY2sgbnVtYmVyIGJleW9uZCBmaWxlc3lzdGVtIHJhbmdlIgorbXNnc3RyICJNTVA6IG51bWVyIGJsb2t1IHBvemEgemFrcmVzZW0gc3lzdGVtdSBwbGlrw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICJNTVA6IHd5a29ueXdhbmEgamVzdCBuaWV6bmFuYSBvcGVyYWNqYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NAorbXNnaWQgIk1NUDogZmlsZXN5c3RlbSBzdGlsbCBpbiB1c2UiCittc2dzdHIgIk1NUDogc3lzdGVtIHBsaWvDs3cgbmFkYWwgdyB1xbx5Y2l1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU1Cittc2dpZCAiTU1QOiBvcGVuIHdpdGggT19ESVJFQ1QgZmFpbGVkIgorbXNnc3RyICJNTVA6IG90d2FyY2llIHogZmxhZ8SFIE9fRElSRUNUIG5pZSBwb3dpb2TFgm8gc2nEmSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NgorbXNnaWQgIkJsb2NrIGdyb3VwIGRlc2NyaXB0b3Igc2l6ZSBpbmNvcnJlY3QiCittc2dzdHIgIk5pZXBvcHJhd255IHJvem1pYXIgZGVza3J5cHRvcmEgZ3J1cHkgYmxva8OzdyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NworbXNnaWQgIklub2RlIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGlub2RlIgorbXNnc3RyICJTdW1hIGtvbnRyb2xuYSBpLXfEmXrFgmEgbmllIHpnYWR6YSBzacSZIHogaS13xJl6xYJlbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OAorbXNnaWQgIklub2RlIGJpdG1hcCBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBiaXRtYXAiCittc2dzdHIgIlN1bWEga29udHJvbG5hIGJpdG1hcHkgaS13xJl6xYLDs3cgbmllIHpnYWR6YSBzacSZIHogYml0bWFwxIUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTkKK21zZ2lkICJFeHRlbnQgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZXh0ZW50IGJsb2NrIgorbXNnc3RyICJTdW1hIGtvbnRyb2xuYSBibG9rdSBla3N0ZW50w7N3IG5pZSB6Z2FkemEgc2nEmSB6IGJsb2tpZW0gZWtzdGVudMOzdyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MAorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBkb2VzIG5vdCBoYXZlIHNwYWNlIGZvciBjaGVja3N1bSIKK21zZ3N0ciAiQmxvayBrYXRhbG9ndSBuaWUgbWEgbWllanNjYSBuYSBzdW3EmSBrb250cm9sbsSFIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYxCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAiU3VtYSBrb250cm9sbmEgYmxva3Uga2F0YWxvZ3UgbmllIHpnYWR6YSBzacSZIHogYmxva2llbSBrYXRhbG9ndSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MgorbXNnaWQgIkV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBibG9jayIKK21zZ3N0ciAiU3VtYXIga29udHJvbG5hIGJsb2t1IHJvenN6ZXJ6b255Y2ggYXRyeWJ1dMOzdyBuaWUgemdhZHphIHNpxJkgeiBibG9raWVtIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYzCittc2dpZCAiU3VwZXJibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBzdXBlcmJsb2NrIgorbXNnc3RyICJTdW1hIGtvbnRyb2xuYSBzdXBlcmJsb2t1IG5pZSB6Z2FkemEgc2nEmSB6IHN1cGVyYmxva2llbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NAorbXNnaWQgIlVua25vd24gY2hlY2tzdW0gYWxnb3JpdGhtIgorbXNnc3RyICJOaWV6bmFueSBhbGdvcnl0bSBzdW15IGtvbnRyb2xuZWoiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjUKK21zZ2lkICJNTVAgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggTU1QIGJsb2NrIgorbXNnc3RyICJTdW1hIGtvbnRyb2xuYSBibG9rdSBNTVAgbmllIHpnYWR6YSBzacSZIHogYmxva2llbSBNTVAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjYKK21zZ2lkICJFeHQyIGZpbGUgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIlBsaWsgZXh0MiBqdcW8IGlzdG5pZWplIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMQorbXNnaWQgIlByb2ZpbGUgdmVyc2lvbiAwLjAiCittc2dzdHIgIlByb2ZpbCB3IHdlcnNqaSAwLjAiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEyCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfbm9kZSIKK21zZ3N0ciAiQsWCxJlkbmEgd2FydG/Fm8SHIG1hZ2ljem5hIHcgcHJvZmlsZV9ub2RlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMworbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBub3QgZm91bmQiCittc2dzdHIgIk5pZSB6bmFsZXppb25vIHNla2NqaSBwcm9maWx1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNAorbXNnaWQgIlByb2ZpbGUgcmVsYXRpb24gbm90IGZvdW5kIgorbXNnc3RyICJOaWUgem5hbGV6aW9ubyByZWxhY2ppIHByb2ZpbHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE1Cittc2dpZCAiQXR0ZW1wdCB0byBhZGQgYSByZWxhdGlvbiB0byBub2RlIHdoaWNoIGlzIG5vdCBhIHNlY3Rpb24iCittc2dzdHIgIlByw7NiYSBkb2RhbmlhIHJlbGFjamkgZG8gd8SZesWCYSwga3TDs3J5IG5pZSBqZXN0IHNla2NqxIUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE2Cittc2dpZCAiQSBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIGhhcyBhIG5vbi16ZXJvIHZhbHVlIgorbXNnc3RyICJOYWfFgsOzd2VrIHNla2NqaSBwcm9maWx1IG1hIG5pZXplcm93xIUgd2FydG/Fm8SHIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNworbXNnaWQgIkJhZCBsaW5rZWQgbGlzdCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIkLFgsSZZG5hIGxpc3RhIHcgc3RydWt0dXJhY2ggcHJvZmlsdSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTgKK21zZ2lkICJCYWQgZ3JvdXAgbGV2ZWwgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICJCxYLEmWRueSBwb3ppb20gZ3J1cHkgdyBzdHJ1a3R1cmFjaCBwcm9maWx1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOQorbXNnaWQgIkJhZCBwYXJlbnQgcG9pbnRlciBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIkLFgsSZZG55IHdza2HFum5payByb2R6aWNhIHcgc3RydWt0dXJhY2ggcHJvZmlsdSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZSBpdGVyYXRvciIKK21zZ3N0ciAiQsWCxJlkbmEgd2FydG/Fm8SHIG1hZ2ljem5hIHcgaXRlcmF0b3J6ZSBwcm9maWx1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMQorbXNnaWQgIkNhbid0IHNldCB2YWx1ZSBvbiBzZWN0aW9uIG5vZGUiCittc2dzdHIgIk5pZSBtb8W8bmEgdXN0YXdpxIcgd2FydG/Fm2NpIHcgd8SZxbpsZSBzZWtjamkiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gcHJvZmlsZSBsaWJyYXJ5IgorbXNnc3RyICJCxYLEmWRueSBhcmd1bWVudCBwcnpla2F6YW55IGRvIGJpYmxpb3Rla2kgcHJvZmlsdSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjMKK21zZ2lkICJBdHRlbXB0IHRvIG1vZGlmeSByZWFkLW9ubHkgcHJvZmlsZSIKK21zZ3N0ciAiUHLDs2JhIHptb2R5Zmlrb3dhbmlhIHByb2ZpbHUgdHlsa28gZG8gb2Rjenl0dSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIk5hZ8WCw7N3ZWsgc2VrY2ppIHByb2ZpbHUgbmllIG5hIG5hand5xbxzenltIHBvemlvbWllIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNQorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIgorbXNnc3RyICJCxYLEhWQgc2vFgmFkbmkgdyBuYWfFgsOzd2t1IHNla2NqaSBwcm9maWx1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNgorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHJlbGF0aW9uIgorbXNnc3RyICJCxYLEhWQgc2vFgmFkbmkgdyByZWxhY2ppIHByb2ZpbHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI3Cittc2dpZCAiRXh0cmEgY2xvc2luZyBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICJOYWRtaWFyb3d5IG5hd2lhcyB6YW15a2FqxIVjeSB3IHByb2ZpbHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI4Cittc2dpZCAiTWlzc2luZyBvcGVuIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIkJyYWt1asSFY3kgbmF3aWFzIG90d2llcmFqxIVjeSB3IHByb2ZpbHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI5Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfdCIKK21zZ3N0ciAiQsWCxJlkbmEgd2FydG/Fm8SHIG1hZ2ljem5hIHcgcHJvZmlsZV90IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3NlY3Rpb25fdCIKK21zZ3N0ciAiQsWCxJlkbmEgd2FydG/Fm8SHIG1hZ2ljem5hIHcgcHJvZmlsZV9zZWN0aW9uX3QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMxCittc2dpZCAiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKyJJdGVyb3dhbmllIHBvcHJ6ZXogd3N6eXN0a2llIHNla2NqZSBuYWp3ecW8c3plZ28gcG96aW9tdSBuaWUgamVzdCBvYnPFgnVnaXdhbmUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMyCittc2dpZCAiSW52YWxpZCBwcm9maWxlX3NlY3Rpb24gb2JqZWN0IgorbXNnc3RyICJCxYLEmWRueSBvYmlla3QgcHJvZmlsZV9zZWN0aW9uIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMworbXNnaWQgIk5vIG1vcmUgc2VjdGlvbnMiCittc2dzdHIgIk5pZSBtYSB3acSZY2VqIHNla2NqaSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzQKK21zZ2lkICJCYWQgbmFtZXNldCBwYXNzZWQgdG8gcXVlcnkgcm91dGluZSIKK21zZ3N0ciAiQsWCxJlkbnkgbmFtZXNldCBwcnpla2F6YW55IGRvIGZ1bmtjamkgb2RweXR1asSFY2VqIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNQorbXNnaWQgIk5vIHByb2ZpbGUgZmlsZSBvcGVuIgorbXNnc3RyICJCcmFrIG90d2FydGVnbyBwbGlrdSBwcm9maWx1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX2ZpbGVfdCIKK21zZ3N0ciAiQsWCxJlkbmEgd2FydG/Fm8SHIG1hZ2ljem5hIHcgcHJvZmlsZV9maWxlX3QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM3Cittc2dpZCAiQ291bGRuJ3Qgb3BlbiBwcm9maWxlIGZpbGUiCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgcGxpa3UgcHJvZmlsdSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzgKK21zZ2lkICJTZWN0aW9uIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJTZWtjamEganXFvCBpc3RuaWVqZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzkKK21zZ2lkICJJbnZhbGlkIGJvb2xlYW4gdmFsdWUiCittc2dzdHIgIkLFgsSZZG5hIHdhcnRvxZvEhyBsb2dpY3puYSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDAKK21zZ2lkICJJbnZhbGlkIGludGVnZXIgdmFsdWUiCittc2dzdHIgIkLFgsSZZG5hIHdhcnRvxZvEhyBjYcWCa293aXRhIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzo0MQorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX2ZpbGVfZGF0YV90IgorbXNnc3RyICJCxYLEmWRuYSB3YXJ0b8WbxIcgbWFnaWN6bmEgdyBwcm9maWxlX2ZpbGVfZGF0YV90IgpkaWZmIC0tZ2l0IGEvcG8vcXVvdC5zZWQgYi9wby9xdW90LnNlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTIyYzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vcXVvdC5zZWQKQEAgLTAsMCArMSw2IEBACitzLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKK3MvYFwoW15gJ10qXCknL+KAmFwx4oCZL2cKK3MvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCitzLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCitzL14nXChbXmAnXSpcKScgL+KAmFwx4oCZIC9nCitzL+KAnOKAnS8iIi9nCmRpZmYgLS1naXQgYS9wby9yZW1vdmUtcG90Y2RhdGUuc2luIGIvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDM2YzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgpAQCAtMCwwICsxLDE5IEBACisjIFNlZCBzY3JpcHQgdGhhdCByZW1vdmUgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorIyBmcm9tIGEgUE9UIGZpbGUuCisjCisjIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBvZiB0aGUKKyMgcGF0dGVybiBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgorL14iUE9ULUNyZWF0aW9uLURhdGU6IC4qIiQveworeAorIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5Lgorcy9QL1AvCit0YQorIyBZZXMgaXQgd2FzIGVtcHR5LiBGaXJzdCBvY2N1cnJlbmNlLiBSZW1vdmUgdGhlIGxpbmUuCitnCitkCitiYgorOmEKKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCit4Cis6YgorfQpkaWZmIC0tZ2l0IGEvcG8vc3YuZ21vIGIvcG8vc3YuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZTAxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9wby9zdi5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vc3YucG8gYi9wby9zdi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmI1YzA3Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vc3YucG8KQEAgLTAsMCArMSw3MTg5IEBACisjIFN3ZWRpc2ggbWVzc2FnZXMgZm9yIGUyZnNwcm9ncy4KKyMgQ29weXJpZ2h0IMKpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTQgVGhlb2RvcmUgVHNvIChtc2dpZHMpCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4KKyMgR8O2cmFuIFVkZGVib3JnIDxnb2VyYW5AdWRkZWJvcmcuc2U+LCAyMDAzLCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDE0LgorIworIyAkUmV2aXNpb246IDEuODQgJAorIworIy4gVGhlIHN0cmluZ3MgaW4gZTJmc2NrJ3MgcHJvYmxlbS5jIGNhbiBiZSB2ZXJ5IGhhcmQgdG8gdHJhbnNsYXRlLAorIy4gc2luY2UgdGhlIHN0cmluZ3MgYXJlIGV4cGFuZGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gIEZpcnN0IG9mIGFsbCwKKyMuIHRoZXJlIGlzIGFuIEAtZXhwYW5zaW9uLCB3aGVyZSBzdHJpbmdzIGxpa2UgIkBpIiBhcmUgZXhwYW5kZWQgdG8KKyMuICJpbm9kZSIsIGFuZCBzbyBvbi4gIEluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0cmFuc2xhdG9ycywgdGhlCisjLiBlMmZzcHJvZ3MgcG8gdGVtcGxhdGUgZmlsZSBoYXMgYmVlbiBlbmhhbmNlZCB3aXRoIGNvbW1lbnRzIHRoYXQgc2hvdworIy4gdGhlIEAtZXhwYW5zaW9uLCBmb3IgdGhlIHN0cmluZ3MgaW4gdGhlIHByb2JsZW0uYyBmaWxlLgorIy4KKyMuIFRyYW5zbGF0b3JzIGFyZSBmcmVlIHRvIHVzZSB0aGUgQC1leHBhbnNpb24gZmFjaWxpdHkgaWYgdGhleSBzbworIy4gY2hvb3NlLCBieSBwcm92aWRpbmcgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGluIGUyZnNjay9tZXNzYWdlLmMuCisjLiBUaGVzZSB0cmFuc2xhdGlvbiBjYW4gY29tcGxldGVseSByZXBsYWNlIGFuIGV4cGFuc2lvbjsgZm9yIGV4YW1wbGUsCisjLiBpZiAiYmJsb2NrIiAod2hpY2ggaW5kaWNhdGVkIHRoYXQgIkBiIiB3b3VsZCBiZSBleHBhbmRlZCB0byAiYmxvY2siKQorIy4gaXMgdHJhbnNsYXRlZCBhcyAiZGRhdGVudmVybHVzdCIsIHRoZW4gIkBkIiB3aWxsIGJlIGV4cGFuZGVkIHRvCisjLiAiZGF0ZW52ZXJsdXN0Ii4gIEFsdGVybmF0aXZlbHksIHRyYW5zbGF0b3JzIGNhbiBzaW1wbHkgbm90IHVzZSB0aGUKKyMuIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGF0IGFsbC4KKyMuCisjLiBUaGUgc2Vjb25kIGV4cGFuc2lvbiB3aGljaCBpcyBkb25lIGZvciBlMmZzY2sncyBwcm9ibGVtLmMgbWVzc2FnZXMgaXMKKyMuIGEgZHluYW1pYyAlLWV4cGFuc2lvbiwgd2hpY2ggZXhwYW5kcyAlaSBhcyBhbiBpbm9kZSBudW1iZXIsIGFuZCBzbworIy4gb24uICBBIHRhYmxlIG9mIHRoZXNlIGV4cGFuc2lvbnMgY2FuIGJlIGZvdW5kIGJlbG93LiAgTm90ZSB0aGF0CisjLiAlLWV4cHJlc3Npb25zIHRoYXQgYmVnaW4gd2l0aCAiJUQiIGFuZCAiJUkiIGFyZSB0d28tY2hhcmFjdGVyCisjLiBleHBhbnNpb25zOyBzbyBmb3IgZXhhbXBsZSwgIiVJdSIgZXhwYW5kcyB0byB0aGUgaW5vZGUncyB1c2VyIGlkCisjLiBvd25lcnNoaXAgZmllbGQgKGlub2RlLT5pX3VpZCkuICBBbHNvIHRoZSAiJUIiIGV4cGFuc2lvbiBpcyBzcGVjaWFsOgorIy4gaXQgY2FuIGV4cGFuZCB0byBlaXRoZXIgdGhlIHN0cmluZyAiaW5kaXJlY3QgYmxvY2siIChwb3NzaWJseSBwcmVjZWRlZAorIy4gYnkgdGhlIHdvcmQgImRvdWJsZSIgb3IgInRyaXBsZSIpLCBvciB0aGUgc3RyaW5nICJibG9jayAjIiBpbW1lZGlhdGVseQorIy4gZm9sbG93ZWQgYnkgYW4gaW50ZWdlciBpbmRpY2F0aW5nIGEgYmxvY2sgc2VxdWVuY2UgbnVtYmVyLgorIy4gIAorIy4gCSViCTxibGs+CQkJYmxvY2sgbnVtYmVyCisjLiAJJUIJImluZGlyZWN0IGJsb2NrIiB8ICJibG9jayAjIjxibGtjb3VudD4Jc3RyaW5nIHwgc3RyaW5nK2ludGVnZXIKKyMuIAklYwk8YmxrMj4JCQlibG9jayBudW1iZXIKKyMuIAklRGkJPGRpcmVudD4gLT4gaW5vCQlpbm9kZSBudW1iZXIKKyMuIAklRG4JPGRpcmVudD4gLT4gbmFtZQlzdHJpbmcKKyMuIAklRHIJPGRpcmVudD4gLT4gcmVjX2xlbgorIy4gCSVEbAk8ZGlyZW50PiAtPiBuYW1lX2xlbgorIy4gCSVEdAk8ZGlyZW50PiAtPiBmaWxldHlwZQorIy4gCSVkCTxkaXI+IAkJCWlub2RlIG51bWJlcgorIy4gCSVnCTxncm91cD4JCQlpbnRlZ2VyCisjLiAJJWkJPGlubz4JCQlpbm9kZSBudW1iZXIKKyMuIAklSXMJPGlub2RlPiAtPiBpX3NpemUKKyMuIAklSVMJPGlub2RlPiAtPiBpX2V4dHJhX2lzaXplCisjLiAJJUliCTxpbm9kZT4gLT4gaV9ibG9ja3MKKyMuIAklSWwJPGlub2RlPiAtPiBpX2xpbmtzX2NvdW50CisjLiAJJUltCTxpbm9kZT4gLT4gaV9tb2RlCisjLiAJJUlNCTxpbm9kZT4gLT4gaV9tdGltZQorIy4gCSVJRgk8aW5vZGU+IC0+IGlfZmFkZHIKKyMuIAklSWYJPGlub2RlPiAtPiBpX2ZpbGVfYWNsCisjLiAJJUlkCTxpbm9kZT4gLT4gaV9kaXJfYWNsCisjLiAJJUl1CTxpbm9kZT4gLT4gaV91aWQKKyMuIAklSWcJPGlub2RlPiAtPiBpX2dpZAorIy4gCSVJdAk8c3RyPgkJCWZpbGUgdHlwZQorIy4gCSVqCTxpbm8yPgkJCWlub2RlIG51bWJlcgorIy4gCSVtCTxjb21fZXJyIGVycm9yIG1lc3NhZ2U+CisjLiAJJU4JPG51bT4KKyMuIAklcAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4KKyMuIAklUAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiA8ZGlyZW50Pi0+aW5vIHdpdGggPGlubzI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LiAgKElmIGRpcmVudCBpcyBOVUxMCisjLiAJCQkJdGhlbiByZXR1cm4gdGhlIHBhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vMj4pCisjLiAJJXEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxkaXI+CisjLiAJJVEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+IHdpdGggPGRpcj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuCisjLiAJJXMJPHN0cj4JCQltaXNjZWxsYW5lb3VzIHN0cmluZworIy4gCSVTCQliYWNrdXAgc3VwZXJibG9jaworIy4gCSVYCTxudW0+CWhleGFkZWNpbWFsIGZvcm1hdAorIy4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGUyZnNwcm9ncyAxLjQyLjEyLXByZTJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogdHl0c29AYWx1bS5taXQuZWR1XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDUtMTcgMjE6MjYtMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTQtMDgtMjcgMjI6MTMrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogR8O2cmFuIFVkZGVib3JnIDxnb2VyYW5AdWRkZWJvcmcuc2U+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU3dlZGlzaCA8dHAtc3ZAbGlzdG9yLnRwLXN2LnNlPlxuIgorIkxhbmd1YWdlOiBzdlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MjMgbWlzYy9ta2UyZnMuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrICV1IG91dCBvZiByYW5nZTsgaWdub3JlZC5cbiIKK21zZ3N0ciAiRMOlbGlndCBibG9jayAldSB1dGFuZsO2ciBnaWx0aWd0IGludGVydmFsbDsgaWdub3JlcmFzLlxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NDYKK21zZ2lkICJ3aGlsZSBzYW5pdHkgY2hlY2tpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgInZpZCByaW1saWdoZXRza29udHJvbGwgYXYgaW5vZGVuIGbDtnIgZMOlbGlnYSBibG9jayIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjU4Cittc2dpZCAid2hpbGUgcmVhZGluZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAidmlkIGzDpHNuaW5nIGF2IGlub2RlbiBmw7ZyIGTDpWxpZ2EgYmxvY2siCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo3MiBlMmZzY2svc2NhbnRlc3QuYzoxMDcgZTJmc2NrL3VuaXguYzoxMzQ1CisjOiBlMmZzY2svdW5peC5jOjE0MzQgbWlzYy9iYWRibG9ja3MuYzoxMjQyIG1pc2MvYmFkYmxvY2tzLmM6MTI1MAorIzogbWlzYy9iYWRibG9ja3MuYzoxMjY0IG1pc2MvYmFkYmxvY2tzLmM6MTI3NiBtaXNjL2R1bXBlMmZzLmM6NjA0CisjOiBtaXNjL2UyaW1hZ2UuYzoxMzk2IG1pc2MvZTJpbWFnZS5jOjE1ODAgbWlzYy9lMmltYWdlLmM6MTU5OQorIzogbWlzYy9ta2UyZnMuYzoyMjcgbWlzYy90dW5lMmZzLmM6MTk1NSBtaXNjL3R1bmUyZnMuYzoyMDQ0IHJlc2l6ZS9tYWluLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICVzIgorbXNnc3RyICJ2aWQgZsO2cnPDtmsgYXR0IMO2cHBuYSAlcyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyBwb3BlbiAnJXMnIgorbXNnc3RyICJ2aWQgZsO2cnPDtmsgYXR0IGFudsOkbmRhIHBvcGVuIFwiJXNcIiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjk0IG1pc2MvbWtlMmZzLmM6MjM0Cittc2dpZCAid2hpbGUgcmVhZGluZyBpbiBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBmaWxlIgorbXNnc3RyICJ2aWQgbMOkc25pbmcgaSBsaXN0YW4gw7Z2ZXIgZMOlbGlnYSBibG9jayBmcsOlbiBmaWwiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMDUKK21zZ2lkICJ3aGlsZSB1cGRhdGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgInZpZCB1cHBkYXRlcmluZyBhdiBpbm9kZW4gZsO2ciBkw6VsaWdhIGJsb2NrIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGlsbGVnYWwgYmxvY2sgJXUgZm91bmQgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ2xlYXJlZC5cbiIKK21zZ3N0ciAiVmFybmluZzogb3RpbGzDpXRldCBibG9jayAldSBoaXR0YXQgaSBpbm9kZW4gZsOlciBkw6VsaWdhIGJsb2NrLiAgVMO2bXQuXG4iCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIkZlbCB2aWQgbMOkc25pbmcgYXYgYmxvY2sgJWx1ICglcykgdmlkICVzLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICJGZWwgdmlkIGzDpHNuaW5nIGF2IGJsb2NrICVsdSAoJXMpLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MSBlMmZzY2svZWhhbmRsZXIuYzoxMTAKK21zZ2lkICJJZ25vcmUgZXJyb3IiCittc2dzdHIgIklnbm9yZXJhIGZlbCIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjIKK21zZ2lkICJGb3JjZSByZXdyaXRlIgorbXNnc3RyICJGcmFtdHZpbmdhIG9tc2tyaXZuaW5nIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiRmVsIHZpZCBza3Jpdm5pbmcgYXYgYmxvY2sgJWx1ICglcykgdmlkICVzLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiRmVsIHZpZCBza3Jpdm5pbmcgYXYgYmxvY2sgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJ0b21tYSBrYXRhbG9nYmxvY2siCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjYyCittc2dpZCAiZW1wdHkgZGlyIG1hcCIKK21zZ3N0ciAidG9tIGthdGFsb2drYXJ0YSIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZGlyZWN0b3J5IGJsb2NrICV1ICgjJWQpIGluIGlub2RlICV1XG4iCittc2dzdHIgIlRvbXQga2F0YWxvZ2Jsb2NrICV1IChuci4gJWQpIGkgaW5vZCAldVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGZpbGVuYW1lIG5ibG9ja3MgYmxvY2tzaXplXG4iCittc2dzdHIgIiVzOiAlcyBmaWxuYW1uIG5ibG9jayBibG9ja3N0b3JsZWtcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIG9mIGJsb2NrcyFcbiIKK21zZ3N0ciAiT3RpbGzDpXRldCBhbnRhbCBibG9jayFcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciAoc2l6ZT0lZClcbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBhbGxva2VyYSBibG9ja2J1ZmZlcnQgKHN0b3JsZWs9JWQpXG4iCisKKyM6IGUyZnNjay9mbHVzaGIuYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgZGlza1xuIgorbXNnc3RyICJBbnbDpG5kbmluZzogJXMgZGlza1xuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQkxLRkxTQlVGIGlvY3RsIG5vdCBzdXBwb3J0ZWQhICBDYW4ndCBmbHVzaCBidWZmZXJzLlxuIgorbXNnc3RyICJCTEtGTFNCVUYtaW9jdGwgc3TDtmRzIGludGUhICBLYW4gaW50ZSB0w7ZtbWEgYnVmZmVydGFyLlxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1GXSBbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gZGV2aWNlXG4iCittc2dzdHIgIkFudsOkbmRuaW5nOiAlcyBbLUZdIFstSSBpbm9kYnVmZmVydGJsb2NrXSBlbmhldFxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo4MSBlMmZzY2svdW5peC5jOjk3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIGZvciBmbHVzaGluZyIKK21zZ3N0ciAidmlkIMO2cHBuaW5nIGF2ICVzIGbDtnIgdXRza3Jpdm5pbmciCisKKyM6IGUyZnNjay9pc2Nhbi5jOjg2IGUyZnNjay91bml4LmM6OTc4IHJlc2l6ZS9tYWluLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBmbHVzaCAlcyIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCBza3JpdmEgdXQgJXMiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJ2aWQgZsO2cnPDtmsgYXR0IMO2cHBuYSDigJ0lc+KAnSIKKworIzogZTJmc2NrL2lzY2FuLmM6MTE5IGUyZnNjay9zY2FudGVzdC5jOjExNCBtaXNjL2UyaW1hZ2UuYzoxMjkwCittc2dpZCAid2hpbGUgb3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJ2aWQgw7ZwcG5pbmcgYXYgaW5vZHPDtmtuaW5nIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMjcgbWlzYy9lMmltYWdlLmM6MTMwOQorbXNnaWQgIndoaWxlIGdldHRpbmcgbmV4dCBpbm9kZSIKK21zZ3N0ciAibsOkciBuw6RzdGEgaW5vZCBow6RtdGFkZXMiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgc2Nhbm5lZC5cbiIKK21zZ3N0ciAiJXUgaW5vZGVyIGdlbm9tc8O2a3RhLlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjUyNAorbXNnaWQgInJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgImzDpHNlciBqb3VybmFsc3VwZXJibG9ja1xuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiVzOiBpbmdldCBnaWx0aWd0IGpvdXJuYWxzdXBlcmJsb2NrIGhpdHRhZGVzXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBqb3VybmFsIHRvbyBzaG9ydFxuIgorbXNnc3RyICIlczogam91cm5hbGVuIGbDtnIga29ydFxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcmVjb3ZlcmluZyBqb3VybmFsXG4iCittc2dzdHIgIiVzOiDDpXRlcmjDpG10YXIgam91cm5hbGVuXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3b24ndCBkbyBqb3VybmFsIHJlY292ZXJ5IHdoaWxlIHJlYWQtb25seVxuIgorbXNnc3RyICIlczogw6V0ZXJow6RtdGFyIGludGUgam91cm5hbGVuIGkgc2tyaXZza3lkZGF0IGzDpGdlXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICJ2aWQgZsO2cnPDtmsgYXR0IMOldGVyw7ZwcG5hICVzIgorCisjIEbDtnJzdGEgYm9rc3RhdmVuIGkgZGV0dGEgb2NoIGbDtmxqYW5kZSBtZWRkZWxhbmRlbiDDpHIgZXR0IGluZGV4IHNvbQorIyBhbnbDpG5kcyBzb20gZW4gZsO2cmtvcnRuaW5nIGkgYW5kcmEgbWVkZGVsYW5kZW4sIG9jaCBpbnRlIHNrcml2cyB1dC4KKyMgVXBwc2xhZ25pbmdlbiBza2VyIHDDpSBkZXQgdXJzcHJ1bmdsaWdhIG1lZGRlbGFuZGV0LCBzw6UgZGV0IHNwZWxhcgorIyBlZ2VudGxpZ2VuIGluZ2VuIHJvbGwgdmlsa2V0IHRlY2tlbiBzb20gc3TDpXIgZsO2cnN0IGkgZGVuIMO2dmVyc2F0dGEKKyMgc3Ryw6RuZ2VuLiAgRGV0IHZpa3RpZ2Egw6RyIGF0dCBkZXQgc3TDpXIgbsOlZ29uIHBsYXRzaMOlbGxhcmUgZMOkciwgZsO2cnN0YQorIyB0ZWNrbmV0IHNrcml2cyBpbnRlIHV0LCB2YXJlIHNpZyBpIG9yZ2luYWxzdHLDpG5nZW4gZWxsZXIgZGVuIMO2dmVyc2F0dGEKKyMgc3Ryw6RuZ2VuLiAgSmFnIHR5Y2t0ZSBkZXQgdmFyIGLDpHN0IGF0dCBiZWjDpWxsYSBvcmdpbmFsdGVja25ldC4KKyMKKyMgSmFnIGhhciBmZWxyYXBwb3J0ZXJhdCBoZWxhIGlkw6luLiAgRGV0IGlubmViw6RyIGp1IGF0dCBtYW4gYnlnZ2VyIGlob3AKKyMgbWVuaW5nYXIgZnLDpW4gZGVsYXIsIG9jaCBkZXQgYnJ1a2FyIGp1IGfDpSBzw7ZuZGVyIGkgw7Z2ZXJzw6R0dG5pbmdhciBtZWQKKyMgb2xpa2EgZ2VudXMgb2NoIGR5bGlrdC4gIE1lbiBmw7ZyZmF0dGFyZW4gaGFyIGVuIGRlbCBicmEgYXJndW1lbnQgb20KKyMgYXR0IGbDtnJrb3J0bmluZ3NzeXN0ZW1ldCDDpHIgZW4gZsO2cmRlbCBuw6RyIG1hbiBza2FsbCBmw6UgcGxhdHMgbWVkIHPDpQorIyBteWNrZXQgc29tIG3DtmpsaWd0IHDDpSBlbiByw6RkZG5pbmdzZGlza2V0dC4gIEkgZGV0IGZhbGxldCDDpHIgw6RuZMOlCisjIGtuYXBwYXN0IMO2dmVyc8OkdHRuaW5nYXIgbWVkLiAgU8OlIGRlbiBiw6RzdGEgbMO2c25pbmdlbiDDpHIgbm9nIGF0dCBsw6V0YQorIyBzeXN0ZW1ldCBzb20gc8OlZGFudCBmaW5uYXMga3ZhciwgbWVuIGludGUgYW52w6RuZGEgZGV0IGFsbHMgaSDDtnZlcnNhdHRhCisjIG1lZGRlbGFuZGVuLgorIzogZTJmc2NrL21lc3NhZ2UuYzoxMTMKK21zZ2lkICJhZXh0ZW5kZWQgYXR0cmlidXRlIgorbXNnc3RyICJhdXTDtmthdCBhdHRyaWJ1dCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTQKK21zZ2lkICJBZXJyb3IgYWxsb2NhdGluZyIKK21zZ3N0ciAiQWZlbCB2aWQgYWxsb2tlcmluZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTUKK21zZ2lkICJiYmxvY2siCittc2dzdHIgImJibG9jayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTYKK21zZ2lkICJCYml0bWFwIgorbXNnc3RyICJCYml0a2FydGEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE3Cittc2dpZCAiY2NvbXByZXNzIgorbXNnc3RyICJja29tcHJpbWVyYSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTgKK21zZ2lkICJDY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBAYiIKK21zZ3N0ciAiQ2tvbmZsaWt0IG1lZCBuw6Vnb3QgYW5uYXQgZnMgQGIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE5Cittc2dpZCAiZGRpcmVjdG9yeSIKK21zZ3N0ciAiZGthdGFsb2ciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIwCittc2dpZCAiRGRlbGV0ZWQiCittc2dzdHIgIkRyYWRlcmFkIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMQorbXNnaWQgImVlbnRyeSIKK21zZ3N0ciAiZXBvc3QiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIyCittc2dpZCAiRUBlICclRG4nIGluICVwICglaSkiCittc2dzdHIgIkVwb3N0IFwiJURuXCIgaSAlcCAoJWkpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMworbXNnaWQgImZmaWxlc3lzdGVtIgorbXNnc3RyICJmZmlsc3lzdGVtIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNAorbXNnaWQgIkZmb3IgQGkgJWkgKCVRKSBpcyIKK21zZ3N0ciAiRmbDtnIgaW5vZCAlaSAoJVEpIMOkciIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjUKK21zZ2lkICJnZ3JvdXAiCittc2dzdHIgImdncnVwcCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjYKK21zZ2lkICJoSFRSRUUgQGQgQGkiCittc2dzdHIgImhIVFJFRSBrYXRhbG9nLWlub2QiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI3Cittc2dpZCAiaWlub2RlIgorbXNnc3RyICJpaW5vZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjgKK21zZ2lkICJJaWxsZWdhbCIKK21zZ3N0ciAiSW90aWxsw6V0ZW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI5Cittc2dpZCAiampvdXJuYWwiCittc2dzdHIgImpqb3VybmFsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMAorbXNnaWQgImxsb3N0K2ZvdW5kIgorbXNnc3RyICJsbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzEKK21zZ2lkICJMaXMgYSBsaW5rIgorbXNnc3RyICJMw6RyIGVuIGzDpG5rIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMgorbXNnaWQgIm1tdWx0aXBseS1jbGFpbWVkIgorbXNnc3RyICJtZmxlcmZhbGRpZ3QgaWFuc3Byw6Vrc3RhZ25hIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMworbXNnaWQgIm5pbnZhbGlkIgorbXNnc3RyICJub2dpbHRpZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzQKK21zZ2lkICJvb3JwaGFuZWQiCittc2dzdHIgIm9mw7Zyw6RsZHJhbMO2cyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzUKK21zZ2lkICJwcHJvYmxlbSBpbiIKK21zZ3N0ciAicHByb2JsZW0gaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgInFrdm90IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNworbXNnaWQgInJyb290IEBpIgorbXNnc3RyICJycm90aW5vZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzgKK21zZ2lkICJzc2hvdWxkIGJlIgorbXNnc3RyICJzc2t1bGxlIHZhcml0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOQorbXNnaWQgIlNzdXBlckBiIgorbXNnc3RyICJTc3VwZXJibG9jayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDAKK21zZ2lkICJ1dW5hdHRhY2hlZCIKK21zZ3N0ciAidWzDtnMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQxCittc2dpZCAidmRldmljZSIKK21zZ3N0ciAidmVuaGV0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MgorbXNnaWQgInhleHRlbnQiCittc2dzdHIgInh1dHN0csOkY2tuaW5nIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MworbXNnaWQgInp6ZXJvLWxlbmd0aCIKK21zZ3N0ciAiem5vbGzDpG5nZHMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU0Cittc2dpZCAiPFRoZSBOVUxMIGlub2RlPiIKK21zZ3N0ciAiPElub2Qgbm9sbD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU1Cittc2dpZCAiPFRoZSBiYWQgYmxvY2tzIGlub2RlPiIKK21zZ3N0ciAiPElub2RlbiBmw7ZyIGTDpWxpZ2EgYmxvY2s+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NworbXNnaWQgIjxUaGUgdXNlciBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxJbm9kZW4gZsO2ciBhbnbDpG5kYXJrdm90ZXI+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OAorbXNnaWQgIjxUaGUgZ3JvdXAgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8SW5vZGVuIGbDtnIgZ3J1cHBrdm90ZXI+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OQorbXNnaWQgIjxUaGUgYm9vdCBsb2FkZXIgaW5vZGU+IgorbXNnc3RyICI8VXBwc3RhcnRzcHJvZ3JhbWlub2Rlbj4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICI8SW5vZGVuIGbDtnIgw6V0ZXJow6RtdG5pbmcgYXYgYm9ydHRhZ25hIGthdGFsb2dlcj4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYxCittc2dpZCAiPFRoZSBncm91cCBkZXNjcmlwdG9yIGlub2RlPiIKK21zZ3N0ciAiPEdydXBwaWRlbnRpZmllcmFyaW5vZGVuPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjIKK21zZ2lkICI8VGhlIGpvdXJuYWwgaW5vZGU+IgorbXNnc3RyICI8Sm91cm5hbGlub2Rlbj4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYzCittc2dpZCAiPFJlc2VydmVkIGlub2RlIDk+IgorbXNnc3RyICI8UmVzZXJ2ZXJhZCBpbm9kIDk+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2NAorbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSAxMD4iCittc2dzdHIgIjxSZXNlcnZlcmFkIGlub2QgMTA+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNAorbXNnaWQgInJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAibm9ybWFsIGZpbCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzYKK21zZ2lkICJkaXJlY3RvcnkiCittc2dzdHIgImthdGFsb2ciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM4Cittc2dpZCAiY2hhcmFjdGVyIGRldmljZSIKK21zZ3N0ciAidGVja2VuZW5oZXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQwCittc2dpZCAiYmxvY2sgZGV2aWNlIgorbXNnc3RyICJibG9ja2VuaGV0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MgorbXNnaWQgIm5hbWVkIHBpcGUiCittc2dzdHIgIm5hbW5naXZldCByw7ZyIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NAorbXNnaWQgInN5bWJvbGljIGxpbmsiCittc2dzdHIgInN5bWJvbGlzayBsw6RuayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDYgbWlzYy91dWlkZC5jOjE2MgorbXNnaWQgInNvY2tldCIKK21zZ3N0ciAidXR0YWcgKHNvY2tldCkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmlsZSB0eXBlIHdpdGggbW9kZSAwJW8iCittc2dzdHIgIm9rw6RuZCBmaWx0eXAgbWVkIHR5cCAwJW8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDIzCittc2dpZCAiaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImluZGlyZWt0IGJsb2NrIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyNQorbXNnaWQgImRvdWJsZSBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiZHViYmVsdCBpbmRpcmVrdCBibG9jayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjcKK21zZ2lkICJ0cmlwbGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgInRyaXBwZWx0IGluZGlyZWt0IGJsb2NrIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyOQorbXNnaWQgInRyYW5zbGF0b3IgYmxvY2siCittc2dzdHIgIsO2dmVyc8OkdHRuaW5nc2Jsb2NrIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQzMQorbXNnaWQgImJsb2NrICMiCittc2dzdHIgImJsb2NrIG5yLiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjIyMgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgaW5vZGUgbWFwIgorbXNnc3RyICJrYXJ0YSDDtnZlciBmbGVyZmFsZGlndCBpIGFuc3Byw6Vrc3RhZ25hIGlub2RlciIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjYyNSBlMmZzY2svcGFzczFiLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjYW4ndCBmaW5kIGR1cF9ibGsgZm9yICVsbHVcbiIKK21zZ3N0ciAiaW50ZXJudCBmZWw6IGthbiBpbnRlIGhpdHRhIGR1cF9ibGsgZsO2ciAlbGx1XG4iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NTIKK21zZ2lkICJyZXR1cm5lZCBmcm9tIGNsb25lX2ZpbGVfYmxvY2siCittc2dzdHIgIsOldGVydsOkbmRlIGZyw6VuIGNsb25lX2ZpbGVfYmxvY2siCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBibG9jayByZWNvcmQgZm9yICVsbHUiCittc2dzdHIgImludGVybnQgZmVsOiBkZXQgZ2ljayBpbnRlIGF0dCBzbMOlIHVwcCBFQS1ibG9ja3Bvc3QgZsO2ciAlbGx1IgorCisjOiBlMmZzY2svcGFzczFiLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAiaW50ZXJudCBmZWw6IGRldCBnaWNrIGludGUgYXR0IHNsw6UgdXBwIEVBLWlub2Rwb3N0IGbDtnIgJXUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjQ3NSBlMmZzY2svcGFzczIuYzo3ODIKK21zZ2lkICJyZWFkaW5nIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAibMOkc2VyIGthdGFsb2dibG9jayIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjM0Cittc2dpZCAiaW4tdXNlIGlub2RlIG1hcCIKK21zZ3N0ciAia2FydGEgw7Z2ZXIgYW52w6RuZGEgaW5vZGVyIgorCisjOiBlMmZzY2svcGFzczEuYzo2NDUKK21zZ2lkICJkaXJlY3RvcnkgaW5vZGUgbWFwIgorbXNnc3RyICJrYXRhbG9naW5vZHNrYXJ0YSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjU1Cittc2dpZCAicmVndWxhciBmaWxlIGlub2RlIG1hcCIKK21zZ3N0ciAiaW5vZHNrYXJ0YSDDtnZlciByZWd1bGrDpHJhIGZpbGVyIgorCisjOiBlMmZzY2svcGFzczEuYzo2NjQgbWlzYy9lMmltYWdlLmM6MTI2NQorbXNnaWQgImluLXVzZSBibG9jayBtYXAiCittc2dzdHIgImthcnRhIMO2dmVyIGFudsOkbmRhIGJsb2NrIgorCisjOiBlMmZzY2svcGFzczEuYzo3MzAKK21zZ2lkICJvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgIsO2cHBuYXIgaW5vZHPDtmtuaW5nIgorCisjOiBlMmZzY2svcGFzczEuYzo3NjQKK21zZ2lkICJnZXR0aW5nIG5leHQgaW5vZGUgZnJvbSBzY2FuIgorbXNnc3RyICJow6RtdGFyIG7DpHN0YSBpbm9kIGZyw6VuIHPDtmtuaW5nIgorCisjOiBlMmZzY2svcGFzczEuYzoxMjc5Cittc2dpZCAiUGFzcyAxIgorbXNnc3RyICJQYXNzIDEiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBpbmRpcmVjdCBibG9ja3Mgb2YgaW5vZGUgJXUiCittc2dzdHIgImzDpHNlciBpbmRpcmVrdGJsb2NrIGbDtnIgaW5vZCAldSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM4NgorbXNnaWQgImJhZCBpbm9kZSBtYXAiCittc2dzdHIgImthcnRhIMO2dmVyIGTDpWxpZ2EgaW5vZGVyIgorCisjOiBlMmZzY2svcGFzczEuYzoxNDA5Cittc2dpZCAiaW5vZGUgaW4gYmFkIGJsb2NrIG1hcCIKK21zZ3N0ciAiaW5vZCBpIGthcnRhIMO2dmVyIGTDpWxpZ2EgYmxvY2siCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MjkKK21zZ2lkICJpbWFnaWMgaW5vZGUgbWFwIgorbXNnc3RyICJpbWFnaWMgaW5vZHNrYXJ0YSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQ1NgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgYmxvY2sgbWFwIgorbXNnc3RyICJrYXJ0YSDDtnZlciBmbGVyZmFsZGlndCBpIGFuc3Byw6Vrc3RhZ25hIGJsb2NrIgorCisjOiBlMmZzY2svcGFzczEuYzoxNTY3Cittc2dpZCAiZXh0IGF0dHIgYmxvY2sgbWFwIgorbXNnc3RyICJrYXJ0YSDDtnZlciBibG9jayBmw7ZyIHV0w7ZrYWRlIGF0dHJpYnV0IgorCisjOiBlMmZzY2svcGFzczEuYzoyNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiU2bHUoJWMpOiBleHBlY3RpbmcgJTZsdSBnb3QgcGh5cyAlNmx1IChibGtjbnQgJWxsZClcbiIKK21zZ3N0ciAiJTZsdSglYyk6IGbDtnJ2w6RudGFkZSAlNmx1IGZpY2sgZnlzICU2bHUgKGJsa2FudCAlbGxkKVxuIgorCisjOiBlMmZzY2svcGFzczEuYzoyODk4Cittc2dpZCAiYmxvY2sgYml0bWFwIgorbXNnc3RyICJibG9ja2JpdGthcnRhIgorCisjOiBlMmZzY2svcGFzczEuYzoyOTA0Cittc2dpZCAiaW5vZGUgYml0bWFwIgorbXNnc3RyICJpbm9kYml0a2FydGEiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI5MTAKK21zZ2lkICJpbm9kZSB0YWJsZSIKK21zZ3N0ciAiaW5vZHN0YWJlbGwiCisKKyM6IGUyZnNjay9wYXNzMi5jOjI4MworbXNnaWQgIlBhc3MgMiIKK21zZ3N0ciAiUGFzcyAyIgorCisjOiBlMmZzY2svcGFzczIuYzo4MDYKK21zZ2lkICJDYW4gbm90IGNvbnRpbnVlLiIKK21zZ3N0ciAiS2FuIGludGUgZm9ydHPDpHR0YS4iCisKKyM6IGUyZnNjay9wYXNzMy5jOjc3Cittc2dpZCAiaW5vZGUgZG9uZSBiaXRtYXAiCittc2dzdHIgImlub2Qga2xhciBiaXRrYXJ0YSIKKworIzogZTJmc2NrL3Bhc3MzLmM6ODYKK21zZ2lkICJQZWFrIG1lbW9yeSIKK21zZ3N0ciAiTWF4IG1pbm5lIgorCisjOiBlMmZzY2svcGFzczMuYzoxNDgKK21zZ2lkICJQYXNzIDMiCittc2dzdHIgIlBhc3MgMyIKKworIzogZTJmc2NrL3Bhc3MzLmM6MzQwCittc2dpZCAiaW5vZGUgbG9vcCBkZXRlY3Rpb24gYml0bWFwIgorbXNnc3RyICJiaXRrYXJ0YSBmw7ZyIHVwcHTDpGNrdCBhdiBpbm9kc3NsaW5nb3IiCisKKyM6IGUyZnNjay9wYXNzNC5jOjE5NgorbXNnaWQgIlBhc3MgNCIKK21zZ3N0ciAiUGFzcyA0IgorCisjOiBlMmZzY2svcGFzczUuYzo3NAorbXNnaWQgIlBhc3MgNSIKK21zZ3N0ciAiUGFzcyA1IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxCittc2dpZCAiKG5vIHByb21wdCkiCittc2dzdHIgIihpbmdlbiBwcm9tcHQpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyCittc2dpZCAiRml4IgorbXNnc3RyICJGaXhhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzCittc2dpZCAiQ2xlYXIiCittc2dzdHIgIlTDtm0iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQKK21zZ2lkICJSZWxvY2F0ZSIKK21zZ3N0ciAiUmVsb2tlcmEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUKK21zZ2lkICJBbGxvY2F0ZSIKK21zZ3N0ciAiQWxsb2tlcmEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYKK21zZ2lkICJFeHBhbmQiCittc2dzdHIgIkV4cGFuZGVyYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NworbXNnaWQgIkNvbm5lY3QgdG8gL2xvc3QrZm91bmQiCittc2dzdHIgIktvcHBsYSB0aWxsIC9sb3N0K2ZvdW5kIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJTa2FwYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OQorbXNnaWQgIlNhbHZhZ2UiCittc2dzdHIgIlLDpGRkYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MAorbXNnaWQgIlRydW5jYXRlIgorbXNnc3RyICJLYXBhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxCittc2dpZCAiQ2xlYXIgaW5vZGUiCittc2dzdHIgIlTDtm0gaW5vZCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MgorbXNnaWQgIkFib3J0IgorbXNnc3RyICJBdmJyeXQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMKK21zZ2lkICJTcGxpdCIKK21zZ3N0ciAiRGVsYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICJGb3J0c8OkdHQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUKK21zZ2lkICJDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyIKK21zZ3N0ciAiS2xvbmEgZmxlcmZhbGRpZ3QgaWFuc3Byw6Vrc3RhZ25hIGJsb2NrIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2Cittc2dpZCAiRGVsZXRlIGZpbGUiCittc2dzdHIgIlRhIGJvcnQgZmlsIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3Cittc2dpZCAiU3VwcHJlc3MgbWVzc2FnZXMiCittc2dzdHIgIlVuZGVydHJ5Y2sgbWVkZGVsYW5kZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjgKK21zZ2lkICJVbmxpbmsiCittc2dzdHIgIkF2bMOkbmthIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5Cittc2dpZCAiQ2xlYXIgSFRyZWUgaW5kZXgiCittc2dzdHIgIlTDtm0gSFRyZWUtaW5kZXgiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAKK21zZ2lkICJSZWNyZWF0ZSIKK21zZ3N0ciAiw4V0ZXJza2FwYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OQorbXNnaWQgIihOT05FKSIKK21zZ3N0ciAiKElOR0VUKSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MAorbXNnaWQgIkZJWEVEIgorbXNnc3RyICJGSVhBVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MQorbXNnaWQgIkNMRUFSRUQiCittc2dzdHIgIlTDlk1EIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyCittc2dpZCAiUkVMT0NBVEVEIgorbXNnc3RyICJSRUxPS0VSQVQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMKK21zZ2lkICJBTExPQ0FURUQiCittc2dzdHIgIkFMTE9LRVJBVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NAorbXNnaWQgIkVYUEFOREVEIgorbXNnc3RyICJFWFBBTkRFUkFEIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIsOFVEVSS09QUExBRCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NgorbXNnaWQgIkNSRUFURUQiCittc2dzdHIgIlNLQVBBRCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NworbXNnaWQgIlNBTFZBR0VEIgorbXNnc3RyICJSw4REREFEIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4Cittc2dpZCAiVFJVTkNBVEVEIgorbXNnc3RyICJLQVBBVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OQorbXNnaWQgIklOT0RFIENMRUFSRUQiCittc2dzdHIgIklOT0QgVMOWTUQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTAKK21zZ2lkICJBQk9SVEVEIgorbXNnc3RyICJBVkJSVVRFVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MQorbXNnaWQgIlNQTElUIgorbXNnc3RyICJERUxBRCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MgorbXNnaWQgIkNPTlRJTlVJTkciCittc2dzdHIgIkZPUlRTw4RUVEVSIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzCittc2dpZCAiTVVMVElQTFktQ0xBSU1FRCBCTE9DS1MgQ0xPTkVEIgorbXNnc3RyICJGTEVSRkFMRElHIElBTlNQUsOFS1NUQUdOQSBCTE9DSyBLTE9OQURFIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0Cittc2dpZCAiRklMRSBERUxFVEVEIgorbXNnc3RyICJGSUwgQk9SVFRBR0VOIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1Cittc2dpZCAiU1VQUFJFU1NFRCIKK21zZ3N0ciAiVU5ERVJUUllDS1QiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTYKK21zZ2lkICJVTkxJTktFRCIKK21zZ3N0ciAiQVZMw4ROS0FEIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3Cittc2dpZCAiSFRSRUUgSU5ERVggQ0xFQVJFRCIKK21zZ3N0ciAiSFRSRUUtSU5ERVggVMOWTVQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgKK21zZ2lkICJXSUxMIFJFQ1JFQVRFIgorbXNnc3RyICJLT01NRVIgw4VURVJTS0FQQSIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3Cittc2dpZCAiQGIgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiYmxvY2tiaXRrYXJ0YSBmw7ZyIGdydXBwICVnIMOkciBpbnRlIGkgZ3J1cHBlbi4gKGJsb2NrICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTEKK21zZ2lkICJAaSBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJpbm9kc2JpdGthcnRhIGbDtnIgZ3J1cHAgJWcgw6RyIGludGUgaSBncnVwcGVuLiAgKGJsb2NrICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSB0YWJsZSBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNgorbXNnaWQgIiIKKyJAaSB0YWJsZSBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorIldBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4iCittc2dzdHIgIiIKKyJpbm9kdGFiZWxsIGbDtnIgZ3J1cHAgJWcgw6RyIGludGUgaSBncnVwcGVuLiAgKGJsb2NrICViKVxuIgorIlZBUk5JTkc6IEFMTFZBUkxJRyBEQVRBRsOWUkxVU1Qgw4RSIE3DlkpMSUcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgc3VwZXJibG9jayBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIHZhbGlkIGV4dDIvZXh0My9leHQ0XG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0uICBJZiB0aGUgZGV2aWNlIGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0Mi9leHQzL2V4dDRcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIHN1cGVyYmxvY2tcbgorIy4gQC1leHBhbmRlZDogaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgc3VwZXJibG9jazpcbgorIy4gQC1leHBhbmRlZDogICAgIGUyZnNjayAtYiA4MTkzIDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6ICBvclxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iIDMyNzY4IDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgQFMgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSB2YWxpZCBleHQyL2V4dDMvZXh0NFxuIgorIkBmLiAgSWYgdGhlIEB2IGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0Mi9leHQzL2V4dDRcbiIKKyJAZiAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIEBTXG4iCisiaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgQFM6XG4iCisiICAgIGUyZnNjayAtYiA4MTkzIDxAdj5cbiIKKyIgb3JcbiIKKyIgICAgZTJmc2NrIC1iIDMyNzY4IDxAdj5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlN1cGVyYmxvY2tldCBrdW5kZSBpbnRlIGzDpHNhcyBlbGxlciBiZXNrcml2ZXIgaW50ZSBldHQgZ2lsdGlndFxuIgorImV4dDIvZXh0My9leHQ0LWZpbHN5c3RlbS4gIE9tIGVuaGV0ZW4gw6RyIGdpbHRpZyBvY2ggZGVuIHZlcmtsaWdlbiBpbm5laMOlbGxlciAiCisiZXR0XG4iCisiZXh0Mi9leHQzL2V4dDQtZmlsc3lzdGVtIChvY2ggaW50ZSB2w6R4bGluZ3N1dHJ5bW1lIGVsbGVyIHVmcyBlbGxlciBuw6Vnb3QgIgorImFubmF0KVxuIgorIsOkciBzdXBlcmJsb2NrZXQgdHJhc2lndCwgb2NoIGR1IGthbiBmw7Zyc8O2a2Ega8O2cmEgbWVkIGV0dCBhbHRlcm5hdGl2dFxuIgorInN1cGVyYmxvY2s6XG4iCisiICAgIGUyZnNjayAtYiA4MTkzIDxlbmhldD5cbiIKKyIgZWxsZXJcbiIKKyIgICAgZTJmc2NrIC1iIDMyNzY4IDxlbmhldD5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIGZpbGVzeXN0ZW0gc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBzdXBlcmJsb2NrKSBpcyAlYiBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGRldmljZSBpcyAlYyBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogRWl0aGVyIHRoZSBzdXBlcmJsb2NrIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiRmlsc3lzdGVtc3N0b3JsZWtlbiAoZW5saWd0IHN1cGVyYmxvY2tldCkgw6RyICViIGJsb2NrXG4iCisiRGVuIGZ5c2lza2Egc3Rvcmxla2VuIHDDpSBlbmhldGVuIMOkciAlYyBibG9ja1xuIgorIlN1cGVyYmxvY2tldCBlbGxlciBwYXJ0aXRpb25zdGFiZWxsZW4gw6RyIGbDtnJtb2RsaWdlbiB0cmFzaWchXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuCisjLiBALWV4cGFuZGVkOiBUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4KKyMuIEAtZXhwYW5kZWQ6IGZyb20gdGhlIGJsb2NrIHNpemUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwCittc2dpZCAiIgorIkBTIEBiX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbiIKKyJUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4iCisiZnJvbSB0aGUgQGIgc2l6ZS5cbiIKK21zZ3N0ciAiIgorIlN1cGVyYmxvY2tldHMgYmxvY2tzdG9ybGVrID0gJWIsIGZyYWdtZW50c3RvcmxlayA9ICVjLlxuIgorIkRlbm5hIHZlcnNpb24gYXYgZTJmc2NrIHN0w7ZkamVyIGludGUgYW5kcmEgZnJhZ21lbnRzdG9ybGVrYXIgw6RuXG4iCisiYmxvY2tzdG9ybGVrZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3Cittc2dpZCAiQFMgQGJzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIlN1cGVyYmxvY2tldHMgYmxvY2sgcGVyIGdydXBwID0gJWIsIHNrdWxsZSBoYSB2YXJpdCAlY1xuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGZpcnN0X2RhdGFfYmxvY2sgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MgorbXNnaWQgIkBTIGZpcnN0X2RhdGFfQGIgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICJTdXBlcmJsb2NrZXRzIGbDtnJzdGEgZGF0YWJsb2NrID0gJWIsIHNrdWxsZSBoYSB2YXJpdCAlY1xuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcKK21zZ2lkICIiCisiQGYgZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4iCisiXG4iCittc2dzdHIgImZpbHN5c3RlbWV0IGhhZGUgaW5nZW4gVVVJRDsgZ2VuZXJlcmFyIGVuLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogaWYgc2V2ZXJhbCBpbm9kZSBvciBibG9jayBiaXRtYXAgYmxvY2tzIG9yIHBhcnRcbiIKKyJvZiB0aGUgaW5vZGUgdGFibGUgcmVxdWlyZSByZWxvY2F0aW9uLCB5b3UgbWF5IHdpc2ggdG8gdHJ5XG4iCisicnVubmluZyBlMmZzY2sgd2l0aCB0aGUgJy1iICVTJyBvcHRpb24gZmlyc3QuICBUaGUgcHJvYmxlbVxuIgorIm1heSBsaWUgb25seSB3aXRoIHRoZSBwcmltYXJ5IGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLCBhbmRcbiIKKyJ0aGUgYmFja3VwIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIG1heSBiZSBPSy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk9ic2VydmVyYTogb20gZGV0IMOkciBmbGVyYSBpbm9kLSBlbGxlciBibG9ja2JpdGthcnRlYmxvY2sgZWxsZXIgZW4gZGVsXG4iCisiYXYgaW5vZHN0YWJlbGxlbiBzb20gbcOlc3RlIGZseXR0YXMsIGthbnNrZSBkdSB2aWxsIGvDtnJhIGUyZnNjayBtZWRcbiIKKyJmbGFnZ2FuIFwiLWIgJVNcIiBmw7Zyc3QuICBQcm9ibGVtZXQga2FuIGxpZ2dhIGJhcmEgaSBkZW4gcHJpbcOkcmFcbiIKKyJibG9ja2dydXBwYmVza3JpdmFyZW4sIG9jaCByZXNlcnZibG9ja2dydXBwYmVza3JpdmFyZW4ga2FuIHZhcmEgT0suXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvcnJ1cHRpb24gZm91bmQgaW4gc3VwZXJibG9jay4gICglcyA9ICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzEKK21zZ2lkICJDb3JydXB0aW9uIGZvdW5kIGluIEBTLiAgKCVzID0gJU4pLlxuIgorbXNnc3RyICJTa2FkYSBoaXR0YWQgaSBzdXBlcmJsb2NrLiAgKCVzID0gJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBkZXZpY2U6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIEB2OiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIGJlc3TDpG1uaW5nIGF2IGRlbiBmeXNpc2thIGVuaGV0ZW46ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGNvdW50IGluIHN1cGVyYmxvY2sgaXMgJWksIHNob3VsZCBiZSAlai5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxODEKK21zZ2lkICJAaSBjb3VudCBpbiBAUyBpcyAlaSwgQHMgJWouXG4iCittc2dzdHIgImlub2RzYW50YWwgaSBzdXBlcmJsb2NrIMOkciAlaSwgc2thbGwgdmFyYSAlai5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODUKK21zZ2lkICJUaGUgSHVyZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmaWxldHlwZSBmZWF0dXJlLlxuIgorbXNnc3RyICJIdXJkIHN0w7ZkamVyIGludGUgZnVua3Rpb25lbiBmaWx0eXAuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgJWkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoYXMgYW4gQG4gQGogKEBpICVpKS5cbiIKK21zZ3N0ciAiU3VwZXJibG9jayBoYXIgZW4gb2dpbHRpZyBqb3VybmFsIChpbm9kICVpKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgbXVsdGlwbGUgZmlsZXN5c3RlbSB1c2VycyAodW5zdXBwb3J0ZWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5NQorbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBtdWx0aXBsZSBAZiB1c2VycyAodW5zdXBwb3J0ZWQpLlxuIgorbXNnc3RyICJFeHRlcm4gam91cm5hbCBoYXIgZmxlcmEgZmlsc3lzdGVtc2FudsOkbmRhcmUgKHN0w7ZkanMgZWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW4ndCBmaW5kIGV4dGVybmFsIGpvdXJuYWxcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDAKK21zZ2lkICJDYW4ndCBmaW5kIGV4dGVybmFsIEBqXG4iCittc2dzdHIgIkthbiBpbnRlIGhpdHRhIGV4dGVybiBqb3VybmFsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIGJhZCBzdXBlcmJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjA1Cittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIGJhZCBAU1xuIgorbXNnc3RyICJFeHRlcm4gam91cm5hbCBoYXIgZMOlbGlndCBzdXBlcmJsb2NrXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZpbGVzeXN0ZW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMTAKK21zZ2lkICJFeHRlcm5hbCBAaiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgQGZcbiIKK21zZ3N0ciAiRXh0ZXJuIGpvdXJuYWwgc3TDtmRqZXIgaW50ZSBkZXR0YSBmaWxzeXN0ZW1cbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBqb3VybmFsIHN1cGVyYmxvY2sgaXMgdW5rbm93biB0eXBlICVOICh1bnN1cHBvcnRlZCkuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBqb3VybmFsIAorIy4gQC1leHBhbmRlZDogZm9ybWF0LlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMTUKK21zZ2lkICIiCisiQGYgQGogQFMgaXMgdW5rbm93biB0eXBlICVOICh1bnN1cHBvcnRlZCkuXG4iCisiSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIEBqICIKKyJmb3JtYXQuXG4iCisiSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbXNqb3VybmFsc3VwZXJibG9jayDDpHIgYXYgb2vDpG5kIHR5cCAlTiAoZWogc3TDtnR0KS5cbiIKKyJEZXQgw6RyIHRyb2xpZ3QgYXR0IGRpdHQgZXhlbXBsYXIgYXYgZTJmc2NrIMOkciBnYW1tYWx0IG9jaC9lbGxlciBpbnRlXG4iCisic3TDtmRqZXIgZGV0dGEgam91cm5hbGZvcm1hdC5cbiIKKyJEZXQgw6RyIG9ja3PDpSBtw7ZqbGlndCBhdHQgam91cm5hbHN1cGVyYmxvY2tldCDDpHIgdHJhc2lndC5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjIzCittc2dpZCAiQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiSm91cm5hbHN1cGVyYmxvY2sgw6RyIHRyYXNpZ3QuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzX2pvdXJuYWwgZmxhZyBpcyBjbGVhciwgYnV0IGEgam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyOAorbXNnaWQgIkBTIGhhc19AaiBmbGFnIGlzIGNsZWFyLCBidXQgYSBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJTdXBlcmJsb2Nrc2ZsYWdnYW4gaGFzX2pvdXJuYWwgw6RyIG5vbGxzdMOkbGxkLCBtZW4gZW4gam91cm5hbCBmaW5ucy5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIGpvdXJuYWwgaXMgcHJlc2VudC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMzMKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIEBqIGlzIHByZXNlbnQuXG4iCittc2dzdHIgIlN1cGVyYmxvY2tmbGFnZ2EgYmVow7Z2ZXJfcsOkdHRhcyDDpHIgc2F0dCwgbWVuIGluZ2VuIGpvdXJuYWwgZmlubnMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IGpvdXJuYWwgaGFzIGRhdGEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjM4Cittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IEBqIGhhcyBkYXRhLlxuIgorbXNnc3RyICIiCisiU3VwZXJibG9ja3NmbGFnZ2EgYmVow7Z2ZXJfcsOkdHRhcyDDpHIgbm9sbHN0w6RsbGQsIG1lbiBqb3VybmFsIGhhciBkYXRhLlxuIgorCisjLiBALWV4cGFuZGVkOiBDbGVhciBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0MworbXNnaWQgIkNsZWFyIEBqIgorbXNnc3RyICJUw7ZtIGpvdXJuYWwiCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgZmlsZXN5c3RlbS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDggZTJmc2NrL3Byb2JsZW0uYzo3MDcKK21zZ2lkICJAZiBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBAZi4gICIKK21zZ3N0ciAiIgorImZpbHN5c3RlbWV0IGhhciBmdW5rdGlvbnNmbGFnZ29yIHNhdHRhLCBtZW4gw6RyIGV0dCByZXZpc2lvbiAwLWZpbHN5c3RlbS4gICIKKworIy4gQC1leHBhbmRlZDogJXMgb3JwaGFuZWQgaW5vZGUgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTMKK21zZ2lkICIlcyBAbyBAaSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuIgorbXNnc3RyICIiCisiJXMgZsO2csOkbGRyYWzDtnMgaW5vZCAlaSAodWlkPSVJdSwgZ2lkPSVJZywgcsOkdHRpZ2hldD0lSW0sIHN0b3JsZWs9JUlzKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjU4Cittc2dpZCAiQEkgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiT2dpbHRpZ3QgJUIgKCViKSBoaXR0YXQgaSBmw7Zyw6RsZHJhbMO2cyBpbm9kICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjMKK21zZ2lkICJBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiUmVkYW4gdMO2bXQgJUIgKCViKSBoaXR0YXQgaSBmw7Zyw6RsZHJhbMO2cyBpbm9kICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIG9ycGhhbmVkIGlub2RlICVpIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBvIEBpICVpIGluIEBTLlxuIgorbXNnc3RyICJPZ2lsdGlnIGbDtnLDpGxkcmFsw7ZzIGlub2QgJWkgaSBzdXBlcmJsb2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIGlub2RlICVpIGluIG9ycGhhbmVkIGlub2RlIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBpICVpIGluIEBvIEBpIGxpc3QuXG4iCittc2dzdHIgIk9naWx0aWcgaW5vZCAlaSBpIGbDtnLDpGxkcmFsw7ZzIGlub2RsaXN0YS5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3OAorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICJKb3VybmFsc3VwZXJibG9jayBoYXIgb2vDpG5kIHNrcml2c2t5ZGRhZCBmdW5rdGlvbnNmbGFnZ2Egc2F0dC5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4MworbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICJKb3VybmFsc3VwZXJibG9jayBoYXIgb2vDpG5kIGlua29tcGF0aWJlbCBmdW5rdGlvbnNmbGFnZ2Egc2F0dC5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjg4Cittc2dpZCAiQGogdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuIgorbXNnc3RyICJKb3VybmFsdmVyc2lvbiBzdMO2ZHMgaW50ZSBhdiBkZW5uYSBlMmZzY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1vdmluZyBqb3VybmFsIGZyb20gLyVzIHRvIGhpZGRlbiBpbm9kZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNb3ZpbmcgQGogZnJvbSAvJXMgdG8gaGlkZGVuIEBpLlxuIgorIlxuIgorbXNnc3RyICIiCisiRmx5dHRhciBqb3VybmFsIGZyw6VuIC8lcyB0aWxsIGRvbGQgaW5vZC5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgbW92aW5nIGpvdXJuYWw6ICVtXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgbW92aW5nIEBqOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiRmVsIHZpZCBmbHl0dG5pbmcgYXYgam91cm5hbDogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRm91bmQgaW52YWxpZCBWMiBqb3VybmFsIHN1cGVyYmxvY2sgZmllbGRzIChmcm9tIFYxIGpvdXJuYWwpLlxuCisjLiBALWV4cGFuZGVkOiBDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBqb3VybmFsIHN1cGVyYmxvY2suLi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzAzCittc2dpZCAiIgorIkZvdW5kIEBuIFYyIEBqIEBTIGZpZWxkcyAoZnJvbSBWMSBAaikuXG4iCisiQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgQGogQFMuLi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkhpdHRhZGUgb2dpbHRpZ2EgVjItam91cm5hbHN1cGVyYmxvY2tmw6RsdCAoZnLDpW4gVjEtam91cm5hbCkuXG4iCisiVMO2bW1lciBmw6RsdCBlZnRlciBWMS1qb3VybmFsc3VwZXJibG9jayAuLi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogUnVuIGpvdXJuYWwgYW55d2F5CisjOiBlMmZzY2svcHJvYmxlbS5jOjMwOQorbXNnaWQgIlJ1biBAaiBhbnl3YXkiCittc2dzdHIgIkvDtnIgam91cm5hbCDDpG5kw6UiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTQKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiUsOkdHRuaW5nc2ZsYWdnYSBpbnRlIHNhdHQgaSByZXNlcnZzdXBlcmJsb2NrLCBzw6Uga8O2ciBqb3VybmFsIMOkbmTDpS5cbiIKKworIy4gQC1leHBhbmRlZDogQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTkKK21zZ2lkICIiCisiQmFja2luZyB1cCBAaiBAaSBAYiBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlPDpGtlcmhldHNrb3BpZXJhciBibG9ja2luZm9ybWF0aW9uIGbDtnIgam91cm5hbGlub2QuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSByZXNpemVfaW5vZGUgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpcyAlTjsgc2hvdWxkIGJlIHplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzI0Cittc2dpZCAiIgorIkBmIGRvZXMgbm90IGhhdmUgcmVzaXplX0BpIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9AYnNcbiIKKyJpcyAlTjsgQHMgemVyby4gICIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbWV0IGhhciBpbnRlIHJlc2l6ZV9pbm9kZSBha3RpdmVyYXQsIG1lbiByX3Jlc2VydmVkX2dkdF9ibG9ja3NcbiIKKyLDpHIgJU47IHNrdWxsZSB2YXJpdCBub2xsLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemVfaW5vZGUgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIGlub2RlIGlzIG5vbi16ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzMAorbXNnaWQgIlJlc2l6ZV9AaSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgQGkgaXMgbm9uLXplcm8uICAiCittc2dzdHIgIiIKKyJSZXNpemVfaW5vZGUgw6RyIGludGUgYWt0aXZlcmF0LCBtZW4gc3Rvcmxla3PDpG5kcmluZ3Npbm9kZW4gw6RyIGludGUgbm9sbC4gICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIG5vdCB2YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMzUKK21zZ2lkICJSZXNpemUgQGkgbm90IHZhbGlkLiAgIgorbXNnc3RyICJTdG9ybGVrc8OkbmRyaW5nc2lub2Qgw6RyIGludGUgZ2lsdGlnLiAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQwCittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorIlN1cGVyYmxvY2tldHMgc2VuYXN0ZSBtb250ZXJpbmdzdGlkICgldCxcbiIKKyJcdG51ID0gJVQpIMOkciBpIGZyYW10aWRlbi5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0NQorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKyJTdXBlcmJsb2NrZXRzIHNlbmFzdGUgc2tyaXZuaW5nc3RpZCAoJXQsXG4iCisiXHRudSA9ICVUKSDDpHIgaSBmcmFtdGlkZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBzaG91bGQgYmUgJVguICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgQHMgJVguICAiCittc2dzdHIgIlN1cGVyYmxvY2t0aXBzIGbDtnIgZXh0ZXJudCBzdXBlcmJsb2NrIGJvcmRlIHZhcmEgJVguIgorCisjLiBALWV4cGFuZGVkOiBBZGRpbmcgZGlyaGFzaCBoaW50IHRvIGZpbGVzeXN0ZW0uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1NAorbXNnaWQgIiIKKyJBZGRpbmcgZGlyaGFzaCBoaW50IHRvIEBmLlxuIgorIlxuIgorbXNnc3RyICIiCisiTMOkZ2dlciB0aWxsIGRpcmhhc2gtdGlwcyB0aWxsIGZpbHN5c3RlbS5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNTkKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgIgorbXNnc3RyICJrb250cm9sbHN1bW1hIGbDtnIgZ3J1cHBiZXNrcml2YXJlICVnIMOkciAlMDR4LCBza2FsbCB2YXJhICUwNHkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuIgorbXNnc3RyICIiCisiZ3J1cHBiZXNrcml2YXJlICVnIMOkciBtYXJrZXJhZCBvaW5pdGllcmFkIHV0YW4gYXR0IGVnZW5za2FwZW4gw6RyIHNhdHQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNjkKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAiCittc2dzdHIgImdydXBwYmVza3JpdmFyZSAlZyBoYXIgb2dpbHRpZ3QgYW50YWwgb2FudsOkbmRhIGlub2RlciAlYi4gICIKKworIy4gQC1leHBhbmRlZDogTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNzQKK21zZ2lkICJMYXN0IEBnIEBiIEBCIHVuaW5pdGlhbGl6ZWQuICAiCittc2dzdHIgIlNpc3RhIGdydXBwYmxvY2tiaXRrYXJ0YSBvaW5pdGllcmFkLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHRyYW5zYWN0aW9uICVpIHdhcyBjb3JydXB0LCByZXBsYXkgd2FzIGFib3J0ZWQuXG4iCittc2dzdHIgIkpvdXJuYWx0cmFuc2FrdGlvbiAlaSB2YXIgdHJhc2lnLCDDpXRlcnVwcHNwZWxuaW5nZW4gYXZicsO2dHMuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzgzCittc2dpZCAiVGhlIHRlc3RfZnMgZmxhZyBpcyBzZXQgKGFuZCBleHQ0IGlzIGF2YWlsYWJsZSkuICAiCittc2dzdHIgIkZsYWdnYW4gdGVzdF9mcyDDpHIgc2F0dCAob2NoIGV4dDQgw6RyIHRpbGxnw6RubGlndCkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozODgKKyMsIGZ1enp5Cittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAiCisic2V0KVxuIgorbXNnc3RyICIiCisiU3VwZXJibG9ja2V0cyBzZW5hc3RlIG1vbnRlcmluZ3N0aWQgbGlnZ2VyIGkgZnJhbXRpZGVuLlxuIgorIlx0KG1lZCBtaW5kcmUgw6RuIGVuIGRhZywgZsO2cm1vZGxpZ2VuIGbDtnIgYXR0IGjDpXJkdmFydWtsb2NrYW4gZ8OlciBmZWwpIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzk0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldClcbiIKK21zZ3N0ciAiIgorIlN1cGVyYmxvY2tldHMgc2tyZXZzIHNlbmFzdCBpIGZyYW10aWRlbi5cbiIKKyJcdChtZWQgbWluZHJlIMOkbiBlbiBkYWcsIGbDtnJtb2RsaWdlbiBmw7ZyIGF0dCBow6VyZHZhcnVrbG9ja2FuIGfDpXIgZmVsKSIKKworIy4gQC1leHBhbmRlZDogT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDAwCittc2dpZCAiT25lIG9yIG1vcmUgQGIgQGcgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAiCittc2dzdHIgIktvbnRyb2xsc3VtbWEgZsO2ciBlbiBlbGxlciBmbGVyYSBibG9ja2dydXBwYmVza3JpdmFyZSDDpHIgb2dpbHRpZy4gICIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwNQorbXNnaWQgIlNldHRpbmcgZnJlZSBAaXMgY291bnQgdG8gJWogKHdhcyAlaSlcbiIKK21zZ3N0ciAiU8OkdHRlciBhbnRhbGV0IGZyaWEgaW5vZGVyICVqICh2YXIgJWkpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBibG9ja3MgY291bnQgdG8gJWMgKHdhcyAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTAKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIlPDpHR0ZXIgYW50YWxldCBmcmlhIGJsb2NrIHRpbGwgJWMgKHZhciAlYilcbiIKKworIy4gQC1leHBhbmRlZDogTWFraW5nIHF1b3RhIGlub2RlICVpICglUSkgaGlkZGVuLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxNQorbXNnaWQgIk1ha2luZyBAcSBAaSAlaSAoJVEpIGhpZGRlbi5cbiIKK21zZ3N0ciAiIgorIkfDtnIga3ZvdGlub2QgJWkgKCVRKSBkb2xkLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjAKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAiCittc2dzdHIgInN1cGVyYmxvY2tldCBoYXIgZXR0IGZlbGFrdGlndCBNTVAtYmxvY2suICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyNQorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gICIKK21zZ3N0ciAic3VwZXJibG9ja2V0IGhhciBvZ2lsdGlndCBNTVAtbWFnaXNrdCB0YWwuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19vcGVuMjogJW1cbiIKK21zZ3N0ciAiZXh0MmZzX29wZW4yOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfY2hlY2tfZGVzYzogJW1cbiIKK21zZ3N0ciAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgNjRiaXQgZmlsZXN5c3RlbXMgbmVlZHMgZXh0ZW50cyB0byBhY2Nlc3MgdGhlIHdob2xlIGRpc2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQwCittc2dpZCAiQFMgNjRiaXQgZmlsZXN5c3RlbXMgbmVlZHMgZXh0ZW50cyB0byBhY2Nlc3MgdGhlIHdob2xlIGRpc2suICAiCittc2dzdHIgIiIKKyJzdXBlcmJsb2NrIHDDpSA2NC1iaXRhcnMgZmlsc3lzdGVtIGJlaMO2dmVyIHV0c3Ryw6Rja25pbmdhciBmw7ZyIGF0dCBrb21tYSDDpXQgIgorImhlbGEgZGlza2VuLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NQorbXNnaWQgIkZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZy4gICglTiwgbWF4IHZhbHVlICVnKS4gICIKK21zZ3N0ciAiRmlyc3RfbWV0YV9iZyDDpHIgZsO2ciBzdG9ydC4gICglTiwgbWF4dsOkcmRlICVnKS4gICIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDUyCittc2dpZCAiUGFzcyAxOiBDaGVja2luZyBAaXMsIEBicywgYW5kIHNpemVzXG4iCittc2dzdHIgIlBhc3MgMTogS29udHJvbGxlcmFyIGlub2RlciwgYmxvY2sgb2NoIHN0b3JsZWthclxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NTYKK21zZ2lkICJAciBpcyBub3QgYSBAZC4gICIKK21zZ3N0ciAiUm9vdGlub2Qgw6RyIGludGUgZW4ga2F0YWxvZy4gICIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDYxCittc2dpZCAiQHIgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgIgorbXNnc3RyICJyb3Rpbm9kIGhhciBkdGlkIHNhdHQgKGbDtnJtb2RsaWdlbiBww6UgZ3J1bmQgYXYgZ2FtbWFsIG1rZTJmcykuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2VydmVkIGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjYKK21zZ2lkICJSZXNlcnZlZCBAaSAlaSAoJVEpIGhhcyBAbiBtb2RlLiAgIgorbXNnc3RyICJSZXNlcnZlcmFkIGlub2QgJWkgJVEgaGFyIG9naWx0aWdhIHLDpHR0aWdoZXRlci4gICIKKworIy4gQC1leHBhbmRlZDogZGVsZXRlZCBpbm9kZSAlaSBoYXMgemVybyBkdGltZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEQgQGkgJWkgaGFzIHplcm8gZHRpbWUuICAiCittc2dzdHIgIlJhZGVyYWQgaW5vZCAlaSBoYXIgZHRpZCBub2xsLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgIgorbXNnc3RyICJJbm9kICVpIGFudsOkbmRzLCBtZW4gaGFyIGR0aWQgc2F0dC4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSB6ZXJvLWxlbmd0aCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGEgQHogQGQuICAiCittc2dzdHIgIklub2QgJWkgw6RyIGVuIG5vbGzDpG5nZHMga2F0YWxvZy4gICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODYKK21zZ2lkICJAZyAlZydzIEBiIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICIiCisiR3J1cHAgJWc6cyBibG9ja2JpdGthcnRhIHZpZCAlYiBzdMOlciBpIGtvbmZsaWt0IG1lZCBhbm5hdCBmaWxzeXN0ZW1ibG9jay5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTEKK21zZ2lkICJAZyAlZydzIEBpIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICIiCisiR3J1cHAgJWc6cyBpbm9kYml0a2FydGEgdmlkICViIHN0w6VyIGkga29uZmxpa3QgbWVkIGFubmF0IGZpbHN5c3RlbWJsb2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIHRhYmxlIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDk2Cittc2dpZCAiQGcgJWcncyBAaSB0YWJsZSBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiIgorIkdydXBwICVnOnMgaW5vZHRhYmVsbCB2aWQgJWIgc3TDpXIgaSBrb25mbGlrdCBtZWQgYW5uYXQgZmlsc3lzdGVtYmxvY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwMQorbXNnaWQgIkBnICVnJ3MgQGIgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIkdydXBwICVnOnMgYmxvY2tiaXRrYXJ0YSAoJWIpIMOlciBmZWxha3RpZy4gICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgKCViKSBpcyBiYWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA2Cittc2dpZCAiQGcgJWcncyBAaSBAQiAoJWIpIGlzIGJhZC4gICIKK21zZ3N0ciAiR3J1cHAgJWc6cyBpbm9kYml0a2FydGEgKCViKSDDpHIgZmVsYWt0aWcuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX3NpemUgaXMgJUlzLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTExCittc2dpZCAiQGkgJWksIGlfc2l6ZSBpcyAlSXMsIEBzICVOLiAgIgorbXNnc3RyICJJbm9kICVpLCBpX3N0b3JsZWsgw6RyICVJcywgc2t1bGxlIHZhcml0ICVOLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9ibG9ja3MgaXMgJUliLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE2Cittc2dpZCAiQGkgJWksIGlfQGJzIGlzICVJYiwgQHMgJU4uICAiCittc2dzdHIgIklub2QgJWksIGlfYmxvY2sgw6RyICVJYiwgc2t1bGxlIHZhcml0ICVOLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIxCittc2dpZCAiQEkgJUIgKCViKSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiT2dpbHRpZ3QgJUIgKCViKSBpIGlub2QgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgb3ZlcmxhcHMgZmlsZXN5c3RlbSBtZXRhZGF0YSBpbiBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MjYKK21zZ2lkICIlQiAoJWIpIG92ZXJsYXBzIEBmIG1ldGFkYXRhIGluIEBpICVpLiAgIgorbXNnc3RyICIlQiAoJWIpIMO2dmVybGFwcGFyIGZpbHN5c3RlbW1ldGFkYXRhIGkgaW5vZCAlaS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJJbm9kICVpIGhhciBvZ2lsdGlnYSBibG9jay4gICIKKworIy4gQC1leHBhbmRlZDogVG9vIG1hbnkgaWxsZWdhbCBibG9ja3MgaW4gaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGlsbGVnYWwgQGJzIGluIEBpICVpLlxuIgorbXNnc3RyICJGw7ZyIG3DpW5nYSBvZ2lsdGlnYSBibG9jayBpIGlub2QgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBpbiBiYWQgYmxvY2sgaW5vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQxCittc2dpZCAiQEkgJUIgKCViKSBpbiBiYWQgQGIgQGkuICAiCittc2dzdHIgIk9naWx0aWd0ICVCICglYikgaSBpbm9kIGbDtnIgZmVsYWt0aWdhIGJsb2NrLiAgIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQ2Cittc2dpZCAiQmFkIEBiIEBpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJGZWxha3RpZyBibG9ja2lub2QgaGFyIG9naWx0aWdhIGJsb2NrLiAgIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrIGluIHVzZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTEKK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiRHVwbGljZXJhdCBlbGxlciBmZWxha3RpZ3QgYmxvY2sgYW52w6RuZHMhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayAlYiB1c2VkIGFzIGJhZCBibG9jayBpbm9kZSBpbmRpcmVjdCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTYKK21zZ2lkICJCYWQgQGIgJWIgdXNlZCBhcyBiYWQgQGIgQGkgaW5kaXJlY3QgQGIuICAiCittc2dzdHIgIiIKKyJGZWxha3RpZ3QgYmxvY2sgJWIgYW52w6RudCBzb20gaW5kaXJla3RibG9jayBmw7ZyIGlub2QgZsO2ciBkw6VsaWdhIGJsb2NrLiAgIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbgorIy4gQC1leHBhbmRlZDogc2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaW4gdGhlIGZpbGVzeXN0ZW0uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYxCittc2dpZCAiIgorIlxuIgorIlRoZSBiYWQgQGIgQGkgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4iCisic2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbiIKKyJpbiB0aGUgQGYuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJJbm9kZW4gZsO2ciBkw6VsaWdhIGJsb2NrIGhhciBhbnRhZ2xpZ2VuIGJsaXZpdCBza2FkYWQuICBEdSBiw7ZyXG4iCisiYW50YWdsaWdlbiBzbHV0YSBudSBvY2gga8O2cmEgZTJmc2NrIC1jIGbDtnIgYXR0IHPDtmthIGVmdGVyIGTDpWxpZ2EgYmxvY2tcbiIKKyJpIGZpbHN5c3RlbWV0LlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogSWYgdGhlIGJsb2NrIGlzIHJlYWxseSBiYWQsIHRoZSBmaWxlc3lzdGVtIGNhbiBub3QgYmUgZml4ZWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTY4Cittc2dpZCAiIgorIlxuIgorIklmIHRoZSBAYiBpcyByZWFsbHkgYmFkLCB0aGUgQGYgY2FuIG5vdCBiZSBmaXhlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk9tIGJsb2NrZXQgdmVya2xpZ2VuIMOkciBkw6VsaWd0IGthbiBpbnRlIGZpbHN5c3RlbWV0IGxhZ2FzLlxuIgorCisjLiBALWV4cGFuZGVkOiBZb3UgY2FuIHJlbW92ZSB0aGlzIGJsb2NrIGZyb20gdGhlIGJhZCBibG9jayBsaXN0IGFuZCBob3BlXG4KKyMuIEAtZXhwYW5kZWQ6IHRoYXQgdGhlIGJsb2NrIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTczCittc2dpZCAiIgorIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKyJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJEdSBrYW4gdGEgYm9ydCBkZXR0YSBibG9jayBmcsOlbiBsaXN0YW4gw7Z2ZXIgZMOlbGlnYSBibG9jayBvY2ggaG9wcGFzXG4iCisiYXR0IGJsb2NrZXQgdmVya2xpZ2VuIMOkciBPSy4gbWVuIGRldCBmaW5ucyBpbmdhIGdhcmFuaXRlci5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIHByaW1hcnkgc3VwZXJibG9jayAoJWIpIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzkKK21zZ2lkICJUaGUgcHJpbWFyeSBAUyAoJWIpIGlzIG9uIHRoZSBiYWQgQGIgbGlzdC5cbiIKK21zZ3N0ciAiRGV0IHByaW3DpHJhIHN1cGVyYmxvY2tldCAoJWIpIMOkciBww6UgbGlzdGFuIMO2dmVyIGTDpWxpZ2EgYmxvY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJsb2NrICViIGluIHRoZSBwcmltYXJ5IGdyb3VwIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4NAorbXNnaWQgIkJsb2NrICViIGluIHRoZSBwcmltYXJ5IEBnIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgQGIgbGlzdFxuIgorbXNnc3RyICIiCisiQmxvY2sgJWIgaSBkZSBwcmltw6RyYSBncnVwcGJlc2tyaXZhcm5hIMOkciBww6UgbGlzdGFuIMO2dmVyIGTDpWxpZ2EgYmxvY2tcbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBzdXBlcmJsb2NrICglYikgaXMgYmFkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5MAorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgQFMgKCViKSBpcyBiYWQuXG4iCittc2dzdHIgIlZhcm5pbmc6IEdydXBwICVnOnMgc3VwZXJibG9jayAoJWIpIMOkciBkw6VsaWd0LlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIGdyb3VwIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBibG9jayAoJWIpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5NQorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgQGcgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIEBiICglYikuXG4iCittc2dzdHIgIiIKKyJWYXJuaW5nOiBHcnVwcCAlZzpzIGtvcGlhIGF2IGdydXBwYmVza3JpdmFybmEgaGFyIGV0dCBkw6VsaWd0IGJsb2NrICglYikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFByb2dyYW1taW5nIGVycm9yPyAgYmxvY2sgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9ibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDEKK21zZ2lkICJQcm9ncmFtbWluZyBlcnJvcj8gIEBiICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfQGIuXG4iCittc2dzdHIgIiIKKyJQcm9ncmFtbWVyaW5nc2ZlbD8gIEJsb2NrIG5yLiAlYiB0YXMgaSBhbnNwcsOlayB1dGFuIGFubGVkbmluZyBpICIKKyJwcm9jZXNzX2JhZF9ibG9jay5cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyAlTiBjb250aWd1b3VzIGJsb2NrKHMpIGluIGJsb2NrIGdyb3VwICVnIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDcKK21zZ2lkICJAQSAlTiBjb250aWd1b3VzIEBiKHMpIGluIEBiIEBnICVnIGZvciAlczogJW1cbiIKK21zZ3N0ciAiIgorIkZlbCB2aWQgYWxsb2tlcmluZyBhdiAlTiBrb25zZWt1dGl2YSBibG9jayBpIGJsb2NrZ3J1cHAgJWcgZsO2ciAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGIgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4iCittc2dzdHIgIkZpbCB2aWQgYWxsb2tlcmluZyBhdiBibG9ja2J1ZmZlcnQgZsO2ciByZWxva2VyaW5nIGF2ICVzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjE3Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbiIKK21zZ3N0ciAiUmVsb2tlcmFyIGdydXBwICVnOnMgJXMgZnLDpW4gJWIgdGlsbCAlYyAuLi5cbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyB0byAlYy4uLlxuIgorbXNnc3RyICJSZWxva2VyYXIgZ3J1cHAgJWc6cyAlcyB0aWxsICVjIC4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAlYiBvZiAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjcKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBAYiAlYiBvZiAlczogJW1cbiIKK21zZ3N0ciAiVmFybmluZzoga3VuZGUgaW50ZSBsw6RzYSBibG9jayAlYiBhdiAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHdyaXRlIGJsb2NrICViIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzIKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICJWYXJuaW5nOiBrdW5kZSBpbnRlIHNrcml2YSBibG9jayAlYiBhdiAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzcgZTJmc2NrL3Byb2JsZW0uYzoxNTAxCittc2dpZCAiQEEgQGkgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBhbGxva2VyaW5nIGF2IGlub2RiaXRrYXJ0YSAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0MgorbXNnaWQgIkBBIEBiIEBCICglTik6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQgYWxsb2tlcmluZyBhdiBibG9ja2JpdGthcnRhICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIGFsbG9rZXJpbmcgYXYgaWNvdW50LWzDpG5raW5mb3JtYXRpb246ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZGlyZWN0b3J5IGJsb2NrIGFycmF5OiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAZCBAYiBhcnJheTogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBhbGxva2VyaW5nIGF2IGthdGFsb2dibG9ja3Zla3RvcjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIEBpcyAoJWkpOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIGdlbm9tc8O2a25pbmcgYXYgaW5vZGVyICglaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIGl0ZXJlcmluZyDDtnZlciBibG9jayBpIGlub2QgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBjb3VudD0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjY3Cittc2dpZCAiRXJyb3Igc3RvcmluZyBAaSBjb3VudCBpbmZvcm1hdGlvbiAoQGk9JWksIGNvdW50PSVOKTogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBsYWdyaW5nIGF2IGlub2RzcsOka25hcmluZm9ybWF0aW9uIChpbm9kPSVpLCBhbnRhbD0lTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgZGlyZWN0b3J5IGJsb2NrIGluZm9ybWF0aW9uIChpbm9kZT0laSwgYmxvY2s9JWIsIG51bT0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcyCittc2dpZCAiRXJyb3Igc3RvcmluZyBAZCBAYiBpbmZvcm1hdGlvbiAoQGk9JWksIEBiPSViLCBudW09JU4pOiAlbVxuIgorbXNnc3RyICIiCisiRmVsIHZpZCBsYWdyaW5nIGF2IGthdGFsb2dibG9ja3NpbmZvcm1hdGlvbiAoaW5vZD0laSwgYmxvY2s9JWIsIGFudGFsPSVOKTogIgorIiVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQgbMOkc25pbmcgYXYgaW5vZCAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gICIKK21zZ3N0ciAiSW5vZCAlaSBoYXIgZmxhZ2dhbiBpbWFnaWMgc2F0dC4gICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlICVpKSBoYXMgaW1tdXRhYmxlXG4KKyMuIEAtZXhwYW5kZWQ6IG9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoQGkgJWkpIGhhcyBpbW11dGFibGVcbiIKKyJvciBhcHBlbmQtb25seSBmbGFnIHNldC4gICIKK21zZ3N0ciAiIgorIlNwZWNpYWxmaWwgKGVuaGV0L3V0dGFnIChzb2NrZXQpL2ZpZm8vc3ltbMOkbmspIChpbm9kICVpKSBoYXIgZmxhZ2dhblxuIgorIm9mw7Zyw6RuZGVybGlnIGVsbGVyIGVuZGFzdCB0aWxsw6RnZyBzYXR0LiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGNvbXByZXNzaW9uIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBjb21wcmVzc2lvbiBzdXBwb3J0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgQGNpb24gZmxhZyBzZXQgb24gQGYgd2l0aG91dCBAY2lvbiBzdXBwb3J0LiAgIgorbXNnc3RyICIiCisiSW5vZCAlaSBoYXIga29tcHJlc3Npb25zZmxhZ2dhIHNhdHQgcMOlIGZpbHN5c3RlbSB1dGFuIGtvbXByZXNzaW9uc3N0w7ZkLiAgIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8pIGlub2RlICVpIGhhcyBub24temVybyBzaXplLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWFsIChAdi9zb2NrZXQvZmlmbykgQGkgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAiCittc2dzdHIgIlNwZWNpYWxpbm9kIChlbmhldC91dHRhZyAoc29ja2V0KS9maWZvKSAlaSBoYXIgbm9sbHNraWxkIHN0b3JsZWsuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzEyCittc2dpZCAiQGogQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkpvdXJuYWxpbm9kIGFudsOkbmRzLCBtZW4gaW5uZWjDpWxsZXIgZGF0YS4gICIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxNworbXNnaWQgIkBqIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkpvdXJuYWwgw6RyIGludGUgZW4gdmFubGlnIGZpbC4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIHdhcyBwYXJ0IG9mIHRoZSBAbyBAaSBsaXN0LiAgIgorbXNnc3RyICJJbm9kICVpIHZhciBtZWQgaSBsaXN0YW4gw7Z2ZXIgZsO2csOkbGRyYWzDtnNhIGlub2Rlci4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGVzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjgKK21zZ2lkICJAaXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgIgorbXNnc3RyICJJbm9kZXIgc29tIHZhciBtZWQgaSB0cmFzaWcgbGlzdGEgw7Z2ZXIgZsO2csOkbGRyYWzDtnNhIGlub2RlciBoaXR0YWQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMzCittc2dpZCAiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQgYWxsb2tlcmluZyBhdiByZWZlcmVuc3LDpGtuYXJzdHJ1a3R1ciAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBmb3IgaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzM4Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiBmb3IgQGkgJWkuICAiCittc2dzdHIgIkZlbCB2aWQgbMOkc25pbmcgYXYgdXTDtmthZGUgYXR0cmlidXQtYmxvY2sgJWIgZsO2ciBpbm9kICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBiYWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0MworbXNnaWQgIkBpICVpIGhhcyBhIGJhZCBAYSBAYiAlYi4gICIKK21zZ3N0ciAiSW5vZCAlaSBoYXIgZXR0IGZlbGFrdGlndCB1dMO2a2FkZSBhdHRyaWJ1dC1ibG9jayAlYi4gICIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDgKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkZlbCB2aWQgbMOkc25pbmcgYXYgdXTDtmthZGUgYXR0cmlidXQtYmxvY2sgJWIgKCVtKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTMKK21zZ2lkICJAYSBAYiAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBAcyAlTi4gICIKK21zZ3N0ciAiVXTDtmthZGUgYXR0cmlidXQtYmxvY2sgJWIgaGFyIHJlZmVyZW5zcsOka25hcmUgJXIsIHNrYWxsIHZhcmEgJU4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzU4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyBhdiB1dMO2a2FkZSBhdHRyaWJ1dC1ibG9jayAlYiAoJW0pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIGhfYmxvY2tzID4gMS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjMKK21zZ2lkICJAYSBAYiAlYiBoYXMgaF9AYnMgPiAxLiAgIgorbXNnc3RyICJVdMO2a2FkZSBhdHRyaWJ1dC1ibG9jayAlYiBoYXIgaF9ibG9ja3MgPiAxLiAgIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjgKK21zZ2lkICJAQSBAYSBAYiAlYi4gICIKK21zZ3N0ciAiRmVsIHZpZCBhbGxva2VyaW5nIGF2IGJsb2NrIGbDtnIgdXTDtmthZGUgYXR0cmlidXQgJWIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzczCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgIgorbXNnc3RyICJVdMO2a2FkZSBhdHRyaWJ1dC1ibG9jayAlYiDDpHIgdHJhc2lndCAoYWxsb2tlcmluZ3Nrb2xsaXNpb24pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCBuYW1lKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzgKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiBuYW1lKS4gICIKK21zZ3N0ciAiVXTDtmthZGUgYXR0cmlidXQtYmxvY2sgJWIgw6RyIHRyYXNpZ3QgKG9naWx0aWd0IG5hbW4pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCB2YWx1ZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzgzCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gdmFsdWUpLiAgIgorbXNnc3RyICJVdMO2a2FkZSBhdHRyaWJ1dC1ibG9jayAlYiDDpHIgdHJhc2lndCAob2dpbHRpZ3QgdsOkcmRlKS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgdG9vIGJpZy4gICIKK21zZ3N0ciAiSW5vZCAlaSDDpHIgZsO2ciBzdG9yLiAgIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIGNhdXNlcyBkaXJlY3RvcnkgdG8gYmUgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3OTIKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBAZCB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIGbDpXIga2F0YWxvZyBhdHQgYmxpIGbDtnIgc3Rvci4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OTcKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBmaWxlIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikgZsOlciBmaWwgYXR0IGJsaSBmw7ZyIHN0b3IuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAyCittc2dpZCAiJUIgKCViKSBjYXVzZXMgc3ltbGluayB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIGbDpXIgc3ltbMOkbmsgYXR0IGJsaSBmw7ZyIHN0b3IuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbiIKK21zZ3N0ciAiSW5vZCAlaSBoYXIgZmxhZ2dhIElOREVYX0ZMIHNhdHQgcMOlIGZpbHN5c3RlbSB1dGFuIHN0w7ZkIGbDtnIgaHRyZWUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIgorbXNnc3RyICJJbm9kICVpIGhhciBmbGFnZ2EgSU5ERVhfRkwgc2F0dCBtZW4gw6RyIGludGUgZW4ga2F0YWxvZy5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIHJvb3Qgbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgaGFzIGFuIEBuIHJvb3Qgbm9kZS5cbiIKK21zZ3N0ciAiSFRSRUUga2F0YWxvZ2lub2QgJWkgaGFyIGVuIG9naWx0aWcgcm90bm9kLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIyCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIkhUUkVFIGthdGFsb2ctaW5vZCAlaSBoYXIgZW4gaGFzaHZlcnNpb24gc29tIGludGUgc3TDtmRzICglTilcbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAiSFRSRUUga2F0YWxvZy1pbm9kICVpIGFudsOkbmRlciBlbiBpbmtvbXBhdGliZWwgaHRyZWUgcm90bm9kc2ZsYWdnYS5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMyCittc2dpZCAiQGggJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbiIKK21zZ3N0ciAiSFRSRUUga2F0YWxvZy1pbm9kICVpIGhhciBldHQgdHLDpGRkanVwICglTikgc29tIMOkciBmw7ZyIHN0b3J0XG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgYW4gaW5kaXJlY3QgYmxvY2sgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gbWV0YWRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODM3Cittc2dpZCAiIgorIkJhZCBAYiBAaSBoYXMgYW4gaW5kaXJlY3QgQGIgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4iCisiQGYgbWV0YWRhdGEuICAiCittc2dzdHIgIiIKKyJJbm9kZW4gZsO2ciBkw6VsaWdhIGJsb2NrIGhhciBldHQgaW5kaXJla3RibG9jayAoJWIpIHNvbSBzdMOlciBpIGtvbmZsaWt0XG4iCisibWVkIGZpbHN5c3RlbXNtZXRhZGF0YS4gICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIGF0dCDDpXRlcnNrYXBhIHN0b3JsZWtzw6RuZHJpbmdzaW5vZDogJW0uIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDgKK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIklub2QgJWkgaGFyIGVuIGV4dHJhIHN0b3JsZWsgKCVJUykgc29tIMOkciBvZ2lsdGlnXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJVdMO2a2F0IGF0dHJpYnV0IGkgaW5vZCAlaSBoYXIgZXR0IG5hbWVsZW4gKCVOKSBzb20gw6RyIG9naWx0aWdcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTgKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJVdMO2a2F0IGF0dHJpYnV0IGkgaW5vZCAlaSBoYXIgZW4gdsOkcmRlcG9zaXRpb24gKCVOKSBzb20gw6RyIG9naWx0aWdcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIGJsb2NrICglTikgd2hpY2ggaXMgaW52YWxpZCAobXVzdCBiZSAwKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIEBiICglTikgd2hpY2ggaXMgQG4gKG11c3QgYmUgMClcbiIKK21zZ3N0ciAiIgorIlV0w7ZrYXQgYXR0cmlidXQgaSBpbm9kICVpIGhhciBldHQgdsOkcmRlYmxvY2sgKCVOKSBzb20gw6RyIG9naWx0aWd0IChtw6VzdGUgIgorInZhcmEgMClcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODY4Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIlV0w7ZrYXQgYXR0cmlidXQgaSBpbm9kICVpIGhhciBldHQgdsOkcmRlc3RvcmxlayAoJU4pIHNvbSDDpHIgb2dpbHRpZ1xuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzMKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiVXTDtmthdCBhdHRyaWJ1dCBpIGlub2QgJWkgaGFyIGhhc2ggKCVOKSBzb20gw6RyIG9naWx0aWdcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3OAorbXNnaWQgIkBpICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbiIKK21zZ3N0ciAiaW5vZCAlaSDDpHIgZW4gJUl0IG1lbiBkZXQgc2VyIHV0IHNvbSBkZXQgZWdlbnRsaWdlbiDDpHIgZW4ga2F0YWxvZy5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIGV4dGVudCB0cmVlIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgQHggdHJlZSBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBsw6RzbmluZyDDtnZlciB1dHN0csOkY2tuaW5nc3Ryw6RkIGkgaW5vZCAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBpbm9kZSAlaVxuCisjLiBALWV4cGFuZGVkOiBcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODgKK21zZ2lkICIiCisiRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBAaSAlaVxuIgorIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuIgorbXNnc3RyICIiCisiTWlzc2x5Y2thZGVzIGF0dCBpdGVyZXJhIMO2dmVyIHV0c3Ryw6Rja25pbmdhciBpIGlub2QgJWlcbiIKKyJcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIGludmFsaWQgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTQKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIEBuIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJpbm9kICVpIGhhciBlbiBvZ2lsdGlnIHV0c3Ryw6Rja25pbmdcbiIKKyJcdChsb2dpc2t0IGJsb2NrICVjLCBvZ2lsdGlndCBmeXNpc2t0IGJsb2NrICViLCBsw6RuZ2QgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgaW52YWxpZCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk5Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgQG4gbGVuICVOKVxuIgorbXNnc3RyICIiCisiaW5vZCAlaSBoYXIgZW4gb2dpbHRpZyB1dHN0csOkY2tuaW5nXG4iCisiXHQobG9naXNrdCBibG9jayAlYywgZnlzaXNrdCBibG9jayAlYiwgb2dpbHRpZyBsw6RuZ2QgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuIgorbXNnc3RyICIiCisiSW5vZCAlaSBoYXIgZmxhZ2dhbiBFWFRFTlRTX0ZMIHNhdHQgcMOlIGZpbHN5c3RlbWV0IHV0YW4gc3TDtmQgZsO2ciAiCisidXRzdHLDpGNrbmluZ2FyLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgc3VwZXJibG9jayBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgQFMgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbiIKK21zZ3N0ciAiIgorImlub2QgJWkgw6RyIGkgdXRzdHLDpGNrbmluZ3Nmb3JtYXQsIG1lbiBzdXBlcmJsb2NrZXQgc2FrbmFyIGVnZW5za2FwZW4gIgorIkVYVEVOVFNcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4iCittc2dzdHIgImlub2QgJWkgc2FrbmFyIEVYVEVOVF9GTCwgbWVuIMOkciBpIHV0c3Ryw6Rja25pbmdzZm9ybWF0XG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIKK21zZ3N0ciAiU25hYmIgc3ltbMOkbmsgJWkgaGFyIEVYVEVOVF9GTCBzYXR0LiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyNAorbXNnaWQgIiIKKyJAaSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiaW5vZCAlaSBoYXIgdXRzdHLDpGNrbmluZ2FyIGkgb29yZG5pbmdcbiIKKyJcdChvZ2lsdGlndCBsb2dpc2t0IGJsb2NrICVjLCBmeXNpc2t0IGJsb2NrICViLCBsw6RuZ2QgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI4Cittc2dpZCAiQGkgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbiIKK21zZ3N0ciAiaW5vZCAlaSBoYXIgZW4gb2dpbHRpZyB1dHN0csOkY2tuaW5nc25vZCAoYmxrICViLCBsYmxrICVjKVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzMworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgQGIgQEI6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQga29udmVydGVyaW5nIGF2IGJsb2NrYml0a2FydGEgw7Z2ZXIgc3Via2x1c3RlcjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzgKK21zZ2lkICJAcSBAaSBpcyBub3QgcmVndWxhciBmaWxlLiAgIgorbXNnc3RyICJLdm90YWlub2RlbiDDpHIgaW50ZSBlbiB2YW5saWcgZmlsLiAgIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDMKK21zZ2lkICJAcSBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiS3ZvdGlub2RlbiBhbnbDpG5kcyBpbnRlLCBtZW4gaW5uZWjDpWxsZXIgZGF0YS4gICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDgKK21zZ2lkICJAcSBAaSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgIgorbXNnc3RyICJLdm90aW5vZGVuIMOkciBzeW5saWcgZsO2ciBhbnbDpG5kYXJlbi4gICIKKworIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBsb29rcyBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1MworbXNnaWQgIlRoZSBiYWQgQGIgQGkgbG9va3MgQG4uICAiCittc2dzdHIgIklub2RlbiBmw7ZyIGTDpWxpZ2EgYmxvY2sgdmVya2FyIGZlbGFrdGlnLiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1OAorbXNnaWQgIiIKKyJAaSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIpXG4iCittc2dzdHIgIiIKKyJpbm9kICVpIGhhciBlbiB1dHN0csOkY2tuaW5nIG1lZCBub2xsIGzDpG5nZFxuIgorIlx0KG9naWx0aWd0IGxvZ2lza3QgYmxvY2sgJWMsIGZ5c2lza3QgYmxvY2sgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEludGVyaW9yIGV4dGVudCBub2RlIGxldmVsICVOIG9mIGlub2RlICVpOlxuCisjLiBALWV4cGFuZGVkOiBMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NjUKK21zZ2lkICIiCisiSW50ZXJpb3IgQHggbm9kZSBsZXZlbCAlTiBvZiBAaSAlaTpcbiIKKyJMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gICIKK21zZ3N0ciAiIgorIkludGVybiB1dHN0csOkY2tuaW5nc25vZCBww6Ugbml2w6UgJU4gYXYgaW5vZCAlaTpcbiIKKyJMb2dpc2sgc3RhcnQgJWIgc3TDpG1tZXIgaW50ZSBtZWQgbG9naXNrIHN0YXJ0ICVjIHDDpSBuw6RzdGEgbml2w6UuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBlbmQgb2YgZXh0ZW50IGV4Y2VlZHMgYWxsb3dlZCB2YWx1ZVxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3MQorbXNnaWQgIiIKKyJAaSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiaW5vZCAlaSwgc2x1dGV0IHDDpSB1dHN0csOkY2tuaW5nZW4gw7Z2ZXJza3JpZGVyIHRpbGzDpXRldCB2w6RyZGVcbiIKKyJcdChsb2dpc2t0IGJsb2NrICVjLCBmeXNpc2t0IGJsb2NrICViLCBsw6RuZ2QgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBibG9jayAlYiBzaG91bGQgYmUgYXQgYmxvY2sgJWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTc3Cittc2dpZCAiQGQgQGkgJWkgQGIgJWIgc2hvdWxkIGJlIGF0IEBiICVjLiAgIgorbXNnc3RyICJLYXRhbG9naW5vZCAlaSBibG9jayAlYiBza3VsbGUgdmFyaXQgdmlkICVjLiAgIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGV4dGVudCBtYXJrZWQgdW5pbml0aWFsaXplZCBhdCBibG9jayAlYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGQgQGkgJWkgaGFzIEB4IG1hcmtlZCB1bmluaXRpYWxpemVkIGF0IEBiICVjLiAgIgorbXNnc3RyICJLYXRhbG9naW5vZCAlaSBlbiB1dHN0csOkY2tuaW5nIG1hcmtlcmFkIG9pbml0aWVyYWQgdmlkIGJsb2NrICVjLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBsb2dpY2FsIGJsb2NrICViIChwaHlzaWNhbCBibG9jayAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuCisjLiBALWV4cGFuZGVkOiBXaWxsIGZpeCBpbiBwYXNzIDFCLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4NworbXNnaWQgIiIKKyJAaSAlaSBsb2dpY2FsIEBiICViIChwaHlzaWNhbCBAYiAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuIgorIldpbGwgZml4IGluIHBhc3MgMUIuXG4iCittc2dzdHIgIiIKKyJpbm9kICVpIGxvZ2lza3QgYmxvY2sgJWIgKGZ5c2lza3QgYmxvY2sgJWMpIGJyeXRlciBtb3QgIgorImtsdXN0ZXJhbGxva2VyaW5nc3JlZ2xlci5cbiIKKyJLb21tZXIgZml4YSBpIHBhc3MgMUIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLlxuCisjLiBALWV4cGFuZGVkOiBQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk5NAorbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgQGJzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBAaS4uLlxuIgorIlBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIEBtIEBic1xuIgorbXNnc3RyICIiCisiXG4iCisiS8O2ciB5dHRlcmxpZ2dhcmUgcGFzcyBmw7ZyIGF0dCBsw7ZzYSB1cHAgYmxvY2sgc29tIGFudsOkbmRzIGF2IG1lciDDpG4gZW4gIgorImlub2QgLi4uXG4iCisiUGFzcyAxQjogU8O2a2VyIGlnZW4gZWZ0ZXIgYmxvY2sgc29tIGFudsOkbmRzIGZsZXJhIGfDpW5nZXJcbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAlaToKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAbSBAYihzKSBpbiBAaSAlaToiCittc2dzdHIgIkZsZXJmYWxkaWd0IGlhbnNwcsOla3N0YWduYSBibG9jayBpIGlub2QgJWk6IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQgZ2Vub21zw7ZrbmluZyBhdiBpbm9kZXIgKCVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKGlub2RlX2R1cF9tYXApOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGkgQEIgKEBpX2R1cF9tYXApOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIGFsbG9rZXJpbmcgYXYgaW5vZGJpdGthcnRhIChpbm9kZV9kdXBfbWFwKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBpdGVyZXJpbmcgw7Z2ZXIgYmxvY2sgaSBpbm9kICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzMCBlMmZzY2svcHJvYmxlbS5jOjEzNDUKK21zZ2lkICJFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIEBhIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIiIKKyJGZWwgdmlkIGp1c3RlcmluZyBhdiByZWZlcmVuc3LDpGtuYXJlIGbDtnIgZXh0ZXJuYSBhdHRyaWJ1dC1ibG9jayAlYiAoaW5vZCAiCisiJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDM1Cittc2dpZCAiUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIEBpcyB3aXRoIEBtIEBic1xuIgorbXNnc3RyICIiCisiUGFzcyAxQzogU8O2a2VyIGthdGFsb2dlciBlZnRlciBpbm9kZXIgbWVkIGZsZXJmYWxkaWd0IGlhbnNwcsOla3N0YWduYSBibG9ja1xuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDEKK21zZ2lkICJQYXNzIDFEOiBSZWNvbmNpbGluZyBAbSBAYnNcbiIKK21zZ3N0ciAiUGFzcyAxRDogRsO2cmxpa2FyIGZsZXJmYWxkaWd0IGlhbnNwcsOla3N0YWduYSBibG9ja1xuIgorCisjLiBALWV4cGFuZGVkOiBGaWxlICVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSkgXG4KKyMuIEAtZXhwYW5kZWQ6ICAgaGFzICVyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0NgorbXNnaWQgIiIKKyJGaWxlICVRIChAaSAjJWksIG1vZCB0aW1lICVJTSkgXG4iCisiICBoYXMgJXIgQG0gQGIocyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4iCittc2dzdHIgIiIKKyJGaWwgJVEgKGlub2QgbnIuICVpLCBtb2RpZmllcmluZ3N0aWQgJUlNKSBcbiIKKyIgIGhhciAlciBmbGVyZmFsZGlndCBpYW5zcHLDpWtzdGFnbmEgYmxvY2ssIGRlbGFkZSBtZWQgJU4gZmlsZXI6XG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0JVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTIKK21zZ2lkICJcdCVRIChAaSAjJWksIG1vZCB0aW1lICVJTSlcbiIKK21zZ3N0ciAiXHQlUSAoaW5vZCBuci4gJWksIG1vZGlmaWVyaW5nc3RpZCAlSU0pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1NworbXNnaWQgIlx0PEBmIG1ldGFkYXRhPlxuIgorbXNnc3RyICJcdDxmaWxzeXN0ZW1zbWV0YWRhdGE+XG4iCisKKyMuIEAtZXhwYW5kZWQ6IChUaGVyZSBhcmUgJU4gaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDYyCittc2dpZCAiIgorIihUaGVyZSBhcmUgJU4gQGlzIGNvbnRhaW5pbmcgQG0gQGJzLilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIihEZXQgZmlubnMgJU4gaW5vZGVyIHNvbSBpbm5laMOlbGxlciBmbGVyZmFsZGlndCBpYW5zcHLDpWtzdGFnbmEgYmxvY2suKVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY3Cittc2dpZCAiIgorIkBtIEBicyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiRmxlcmZhbGRpZyBpYW5zcHLDpWtzdGFnbmEgYmxvY2sgcmVkYW4gw7Z2ZXJsw6V0bmEgZWxsZXIga2xvbmFkZS5cbiIKKyJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNsb25lIGZpbGU6ICVtXG4iCittc2dzdHIgIkt1bmRlIGludGUga2xvbmEgZmlsOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDg2Cittc2dpZCAiUGFzcyAyOiBDaGVja2luZyBAZCBzdHJ1Y3R1cmVcbiIKK21zZ3N0ciAiUGFzcyAyOiBLb250cm9sbGVyYXIga2F0YWxvZ3N0cnVrdHVyXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgaW5vZGUgbnVtYmVyIGZvciAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG4gQGkgbnVtYmVyIGZvciAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIk9naWx0aWd0IGlub2RzbnVtbWVyIGbDtnIgXCIuXCIgaSBrYXRhbG9naW5vZCAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaW52YWxpZCBpbm9kZSAjOiAlRGkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5NgorbXNnaWQgIkBFIGhhcyBAbiBAaSAjOiAlRGkuXG4iCittc2dzdHIgIlBvc3QgXCIlRG5cIiBpICVwICglaSkgaGFyIG9naWx0aWd0IGlub2RzbnVtbWVyOiAlRGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlICVEaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTAxCittc2dpZCAiQEUgaGFzIEBEL3VudXNlZCBAaSAlRGkuICAiCittc2dzdHIgIlBvc3QgXCIlRG5cIiBpICVwICglaSkgaGFyIHJhZGVyYWQvb2FudsOkbmQgaW5vZCAlRGkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvICcuJyAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDYKK21zZ2lkICJARSBATCB0byAnLicgICIKK21zZ3N0ciAiUG9zdCBcIiVEblwiIGkgJXAgKCVpKSDDpHIgZW4gbMOkbmsgdGlsbCBcIi5cIiAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHBvaW50cyB0byBpbm9kZSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTEKK21zZ2lkICJARSBwb2ludHMgdG8gQGkgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBAYi5cbiIKK21zZ3N0ciAiIgorIlBvc3QgXCIlRG5cIiBpICVwICglaSkgcGVrYXIgcMOlIGlub2QgKCVEaSkgc29tIGZpbm5zIGkgZXR0IHRyYXNpZ3QgYmxvY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIGRpcmVjdG9yeSAlUCAoJURpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE2Cittc2dpZCAiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iCittc2dzdHIgIlBvc3QgXCIlRG5cIiBpICVwICglaSkgw6RyIGVuIGzDpG5rIHRpbGwga2F0YWxvZyAlUCAoJURpKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gdGhlIHJvb3QgaW5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEyMQorbXNnaWQgIkBFIEBMIHRvIHRoZSBAci5cbiIKK21zZ3N0ciAiUG9zdCBcIiVEblwiIGkgJXAgKCVpKSDDpHIgZW4gbMOkbmsgdGlsbCByb3Rpbm9kZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI2Cittc2dpZCAiQEUgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbiIKK21zZ3N0ciAiUG9zdCBcIiVEblwiIGkgJXAgKCVpKSBoYXIgb2dpbHRpZ2EgdGVja2VuIGkgbmFtbmV0LlxuIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiXCIuXCIgc2FrbmFzIGkga2F0YWxvZ2lub2QgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4uJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIlwiLi5cIiBzYWtuYXMgaSBrYXRhbG9naW5vZCAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogRmlyc3QgZW50cnkgJyVEbicgKGlub2RlPSVEaSkgaW4gZGlyZWN0b3J5IGlub2RlICVpICglcCkgc2hvdWxkIGJlICcuJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDEKK21zZ2lkICJGaXJzdCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSAoJXApIEBzICcuJ1xuIgorbXNnc3RyICIiCisiRsO2cnN0YSBwb3N0IFwiJURuXCIgKGlub2Q9JURpKSBpIGthdGFsb2dpbm9kICVpICglcCkgc2t1bGxlIHZhcml0IFwiLlwiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNlY29uZCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgc2hvdWxkIGJlICcuLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQ2Cittc2dpZCAiU2Vjb25kIEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpIEBzICcuLidcbiIKK21zZ3N0ciAiQW5kcmEgcG9zdCBcIiVEblwiIChpbm9kPSVEaSkgaSBrYXRhbG9naW5vZCAlaSBza3VsbGUgdmFyaXQgXCIuLlwiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmFkZHIgZm9yIGlub2RlICVpICglUSkgaXMgJUlGLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTUxCittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmFkZHIgZsO2ciBpbm9kICVpICglUSkgw6RyICVJRiwgc2t1bGxlIHZhcml0IG5vbGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlmLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTU2Cittc2dpZCAiaV9maWxlX2FjbCBARiAlSWYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2wgZsO2ciBpbm9kICVpICglUSkgw6RyICVJZiwgc2t1bGxlIHZhcml0IG5vbGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZGlyX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWQsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjEKK21zZ2lkICJpX2Rpcl9hY2wgQEYgJUlkLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2Rpcl9hY2wgZsO2ciBpbm9kICVpICglUSkgw6RyICVJZCwgc2t1bGxlIHZhcml0IG5vbGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnJhZyBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2NgorbXNnaWQgImlfZnJhZyBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mcmFnIGbDtnIgaW5vZCAlaSAoJVEpIMOkciAlTiwgc2t1bGxlIHZhcml0IG5vbGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnNpemUgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzEKK21zZ2lkICJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZzaXplIGbDtnIgaW5vZCAlaSAoJVEpIMOkciAlTiwgc2t1bGxlIHZhcml0IG5vbGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZSAoJUltKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTc2Cittc2dpZCAiQGkgJWkgKCVRKSBoYXMgQG4gbW9kZSAoJUltKS5cbiIKK21zZ3N0ciAiSW5vZCAlaSAoJVEpIGhhciBvZ2lsdGlnYSByw6R0dGlnaGV0ZXIgKCVJbSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZGlyZWN0b3J5IGNvcnJ1cHRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODEKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogQGQgY29ycnVwdGVkXG4iCittc2dzdHIgIkthdGFsb2dpbm9kICVpLCAlQiwgcG9zaXRpb24gJU46IGthdGFsb2dlbiB0cmFzaWdcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODYKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAiS2F0YWxvZ2lub2QgJWksICVCLCBwb3NpdGlvbiAlTjogZsO2ciBsw6VuZ3QgZmlsbmFtblxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTEKK21zZ2lkICJAZCBAaSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAiCittc2dzdHIgIkthdGFsb2dpbm9kICVpIGhhciBldHQgb2FsbG9rZXJhdCAlQi4gICIKKworIy4gQC1leHBhbmRlZDogJy4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiXCIuXCIta2F0YWxvZ3Bvc3QgaSBrYXRhbG9naW5vZCAlaSDDpHIgaW50ZSBub2xsdGVybWluZXJhZFxuIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4uJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIlwiLi5cIi1rYXRhbG9ncG9zdCBpIGthdGFsb2dpbm9kICVpIMOkciBpbnRlIG5vbGx0ZXJtaW5lcmFkXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDYKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIGNoYXJhY3RlciBAdi5cbiIKK21zZ3N0ciAiSW5vZCAlaSAoJVEpIMOkciBlbiBvZ2lsdGlnIHRlY2tlbmVuaGV0LlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgYmxvY2sgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTEKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIEBiIEB2LlxuIgorbXNnc3RyICJJbm9kICVpIChUUSDDpHIgZW4gb2dpbHRpZyBibG9ja2VuaGV0LlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIxNgorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLicgQGUuXG4iCittc2dzdHIgIlBvc3QgXCIlRG5cIiBpICVwICglaSkgw6RyIGR1cGxpY2VyYWQgXCIuXCItcG9zdC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4uJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjIxCittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuLicgQGUuXG4iCittc2dzdHIgIlBvc3QgXCIlRG5cIiBpICVwICglaSkgw6RyIGR1cGxpY2VyYWQgXCIuLlwiLXBvc3QuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNiBlMmZzY2svcHJvYmxlbS5jOjE1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICJJbnRlcm50IGZlbDoga3VuZGUgaW50ZSBoaXR0YSBkaXJfaW5mbyBmw7ZyICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyByZWNfbGVuIG9mICVEciwgc2hvdWxkIGJlICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzEKK21zZ2lkICJARSBoYXMgcmVjX2xlbiBvZiAlRHIsIEBzICVOLlxuIgorbXNnc3RyICIiCisiUG9zdCBcIiVEblwiIGkgJXAgKCVpKSBoYXIgcmVjX2xlbiAlRHIsIHNrdWxsZSB2YXJpdCAlTi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IHN0cnVjdHVyZTogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBhbGxva2VyaW5nIGF2IGljb3VudC1zdHJ1a3R1cjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgaXRlcmF0aW5nIG92ZXIgZGlyZWN0b3J5IGJsb2NrczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGl0ZXJhdGluZyBvdmVyIEBkIEBiczogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBpdGVyZXJpbmcgw7Z2ZXIga2F0YWxvZ2Jsb2NrOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDYKK21zZ2lkICJFcnJvciByZWFkaW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQgbMOkc25pbmcgYXYga2F0YWxvZ2Jsb2NrICViIChpbm9kICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjUxCittc2dpZCAiRXJyb3Igd3JpdGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyBhdiBrYXRhbG9nYmxvY2sgJWIgKGlub2QgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2sgZm9yIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBuZXcgQGQgQGIgZm9yIEBpICVpICglcyk6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQgYWxsb2tlcmluZyBhdiBueXR0IGthdGFsb2dibG9jayBmw7ZyIGlub2QgJWkgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGVhbGxvY2F0aW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVhbGxvY2F0aW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIGRlYWxsb2tlcmluZyBhdiBpbm9kICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBlIGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4iCittc2dzdHIgIkthdGFsb2dwb3N0IGbDtnIgXCIuXCIgaSAlcCAoJWkpIMOkciBzdG9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgRklGTy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjcxCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBGSUZPLlxuIgorbXNnc3RyICJJbm9kICVpICglUSkgw6RyIGVuIG9naWx0aWcgRklGTy5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIHNvY2tldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc2Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBzb2NrZXQuXG4iCittc2dzdHIgIklub2QgJWkgKCVRKSDDpHIgZXR0IG9naWx0aWd0IHV0dGFnIChzb2NrZXQpLlxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHRvICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODEKK21zZ2lkICJTZXR0aW5nIGZpbGV0eXBlIGZvciBARSB0byAlTi5cbiIKK21zZ3N0ciAiU8OkdHRlciBmaWx0eXAgZsO2ciBwb3N0IFwiJURuXCIgaSAlcCAoJWkpIHRpbGwgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgc2hvdWxkIGJlICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjg2Cittc2dpZCAiQEUgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgQHMgJU4pLlxuIgorbXNnc3RyICIiCisiUG9zdCBcIiVEblwiIGkgJXAgKCVpKSBoYXIgZmVsYWt0aWcgZmlsdHlwICh2YXIgJUR0LCBza3VsbGUgdmFyaXQgJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5MQorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIlBvc3QgXCIlRG5cIiBpICVwICglaSkgaGFyIGZpbHR5cCBzYXR0LlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIHplcm8tbGVuZ3RoIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5NgorbXNnaWQgIkBFIGhhcyBhIEB6IG5hbWUuXG4iCittc2dzdHIgIlBvc3QgXCIlRG5cIiBpICVwICglaSkgaGFyIG5vbGzDpG5nZHNuYW1uLlxuIgorCisjLiBALWV4cGFuZGVkOiBTeW1saW5rICVRIChpbm9kZSAjJWkpIGlzIGludmFsaWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMwMQorbXNnaWQgIlN5bWxpbmsgJVEgKEBpICMlaSkgaXMgQG4uXG4iCittc2dzdHIgIlN5bWzDpG5rICVRIChpbm9kIG5yLiAlaSkgw6RyIG9naWx0aWcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDYKK21zZ2lkICJAYSBAYiBARiBAbiAoJUlmKS5cbiIKK21zZ3N0ciAiVXTDtmthdCBhdHRyaWJ1dC1ibG9jayBmw7ZyIGlub2QgJWkgKCVRKSDDpHIgb2dpbHRpZ3QgKCVJZikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzExCittc2dpZCAiQGYgY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gQFMuXG4iCittc2dzdHIgIiIKKyJGaWxzeXN0ZW0gaW5uZWjDpWxsZXIgc3RvcmEgZmlsZXIsIG1lbiBzYWtuYXIgZmxhZ2dhbiBMQVJHRV9GSUxFIGkgIgorInN1cGVyYmxvY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTYKK21zZ2lkICJAcCBAaCAlZDogJUIgbm90IHJlZmVyZW5jZWRcbiIKK21zZ3N0ciAiUHJvYmxlbSBpIEhUUkVFLWthdGFsb2dpbm9kICVkOiAlQiBpbnRlIHJlZmVyZXJhZFxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjEKK21zZ2lkICJAcCBAaCAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuIgorbXNnc3RyICJQcm9ibGVtIGkgSFRSRUUta2F0YWxvZ2lub2QgJWQ6ICVCIHJlZmVyZXJhdCB0dsOlIGfDpW5nZXJcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI2Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbiIKK21zZ3N0ciAiUHJvYmxlbSBpIEhUUkVFLWthdGFsb2dpbm9kICVkOiAlQiBoYXIgZmVsYWt0aWcgbWluLWhhc2hcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMxCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbiIKK21zZ3N0ciAiUHJvYmxlbSBpIEhUUkVFLWthdGFsb2dpbm9kICVkOiAlQiBoYXIgZmVsYWt0aWcgbWF4LWhhc2hcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzM2Cittc2dpZCAiQG4gQGggJWQgKCVxKS4gICIKK21zZ3N0ciAiT2dpbHRpZyBIVFJFRS1rYXRhbG9naW5vZCAlZCAoJXEpLiAgIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpOiBiYWQgYmxvY2sgbnVtYmVyICViLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNDAKK21zZ2lkICJAcCBAaCAlZCAoJXEpOiBiYWQgQGIgbnVtYmVyICViLlxuIgorbXNnc3RyICJQcm9ibGVtIGkgSFRSRUUta2F0YWxvZ2lub2QgJWQgKCVxKTogZmVsYWt0aWd0IGJsb2NrbnVtbWVyICViLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogcm9vdCBub2RlIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBwIEBoICVkOiByb290IG5vZGUgaXMgQG5cbiIKK21zZ3N0ciAiUHJvYmxlbSBpIEhUUkVFLWthdGFsb2dpbm9kICVkOiBvZ2lsdGlnIHJvdG5vZC5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGxpbWl0ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzU1Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBsaW1pdCAoJU4pXG4iCittc2dzdHIgIlByb2JsZW0gaSBIVFJFRS1rYXRhbG9naW5vZCAlZDogJUIgaGFyIG9naWx0aWcgZ3LDpG5zICglTilcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGNvdW50ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzYwCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBjb3VudCAoJU4pXG4iCittc2dzdHIgIiIKKyJQcm9ibGVtIGkgSFRSRUUta2F0YWxvZ2lub2QgJWQ6ICVCIGhhciBvZ2lsdGlndCBhbnRhbCAoJU4pXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzY1Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuIgorbXNnc3RyICJQcm9ibGVtIGkgSFRSRUUta2F0YWxvZ2lub2QgJWQ6ICVCIGhhciBlbiBvb3JkbmFkIGhhc2gtdGFiZWxsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBkZXB0aCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICJQcm9ibGVtIGkgSFRSRUUta2F0YWxvZ2lub2QgJWQ6ICVCIGhhciBvZ2lsdGlndCBkanVwICglTilcbiIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGluICVwICglaSkgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3NQorbXNnaWQgIkR1cGxpY2F0ZSBARSBmb3VuZC4gICIKK21zZ3N0ciAiRHVwbGljZXJhZCBwb3N0IFwiJURuXCIgaSAlcCAoJWkpIGhpdHRhZC4gICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuCisjLiBALWV4cGFuZGVkOiBSZW5hbWUgdG8gJXMKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4MAorIywgbm8tYy1mb3JtYXQKK21zZ2lkICIiCisiQEUgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbiIKKyJSZW5hbWUgdG8gJXMiCittc2dzdHIgIiIKKyJQb3N0IFwiJURuXCIgaSAlcCAoJWkpIGhhciBldHQgaWNrZSB1bmlrdCBmaWxuYW1uLlxuIgorIkJ5dCBuYW1uIHRpbGwgJXMiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBmb3VuZC5cbgorIy4gQC1leHBhbmRlZDogXHRNYXJraW5nICVwICglaSkgdG8gYmUgcmVidWlsdC5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4NQorbXNnaWQgIiIKKyJEdXBsaWNhdGUgQGUgJyVEbicgZm91bmQuXG4iCisiXHRNYXJraW5nICVwICglaSkgdG8gYmUgcmVidWlsdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkR1cGxpY2VyYWQgcG9zdCBcIiVEblwiIGhpdHRhZC5cbiIKKyJcdE1hcmtlcmFyICVwICglaSkgZsO2ciBvbWJ5Z2duYWQuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfYmxvY2tzX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzkwCittc2dpZCAiaV9ibG9ja3NfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfYmxvY2tzX2hpIGbDtnIgaW5vZCAlaSAoJVEpIMOkciAlTiwgc2t1bGxlIHZhcml0IG5vbGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFVuZXhwZWN0ZWQgYmxvY2sgaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5NQorbXNnaWQgIlVuZXhwZWN0ZWQgQGIgaW4gQGggJWQgKCVxKS5cbiIKK21zZ3N0ciAiT3bDpG50YXQgYmxvY2sgaSBIVFJFRS1rYXRhbG9nICVkICglcSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgaW4gZ3JvdXAgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5OQorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGluIEBnICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuIgorbXNnc3RyICIiCisiUG9zdCBcIiVEblwiIGkgJXAgKCVpKSByZWZlcmVyYXIgaW5vZCAlRGkgaSBncnVwcCAlZyBkw6RyIF9JTk9ERV9VTklOSVQgw6RyICIKKyJzYXR0LlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGZvdW5kIGluIGdyb3VwICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDQKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBmb3VuZCBpbiBAZyAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbiIKK21zZ3N0ciAiIgorIlBvc3QgXCIlRG5cIiBpICVwICglaSkgcmVmZXJlcmFyIGlub2QgJURpIGZ1bm5lbiBpIG9hbnbDpG50IGlub2Rzb21yw6VkZSBpICIKKyJncnVwcCAlZy5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbF9oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwOQorbXNnaWQgImlfZmlsZV9hY2xfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2xfaGkgZsO2ciBpbm9kICVpICglUSkgw6RyICVOLCBza3VsbGUgdmFyaXQgbm9sbC5cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxNgorbXNnaWQgIlBhc3MgMzogQ2hlY2tpbmcgQGQgY29ubmVjdGl2aXR5XG4iCittc2dzdHIgIlBhc3MgMzogS29udHJvbGxlcmFyIGthdGFsb2dmw7ZyYmluZGVsc2VyXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgbm90IGFsbG9jYXRlZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDIxCittc2dpZCAiQHIgbm90IGFsbG9jYXRlZC4gICIKK21zZ3N0ciAiUm90aW5vZCBpbnRlIGFsbG9rZXJhZC4gICIKKworIy4gQC1leHBhbmRlZDogTm8gcm9vbSBpbiBsb3N0K2ZvdW5kIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDI2Cittc2dpZCAiTm8gcm9vbSBpbiBAbCBAZC4gICIKK21zZ3N0ciAiSW5nZW4gcGxhdHMgaSBsb3N0K2ZvdW5kLWthdGFsb2cuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIk9mw7ZyYnVuZGVuIGthdGFsb2dpbm9kICVpICglcClcbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzYKK21zZ2lkICIvQGwgbm90IGZvdW5kLiAgIgorbXNnc3RyICIvbG9zdCtmb3VuZCBpbnRlIGZ1bm5lbi4gICIKKworIy4gQC1leHBhbmRlZDogJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIHNob3VsZCBiZSAlcSAoJWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDEKK21zZ2lkICInLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKK21zZ3N0ciAiXCIuLlwiIGkgJVEgKCVpKSDDpHIgJVAgKCVqKSwgc2t1bGxlIHZhcml0ICVxICglZCkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBvciBub24tZXhpc3RlbnQgL2xvc3QrZm91bmQuICBDYW5ub3QgcmVjb25uZWN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDYKK21zZ2lkICJCYWQgb3Igbm9uLWV4aXN0ZW50IC9AbC4gIENhbm5vdCByZWNvbm5lY3QuXG4iCittc2dzdHIgIkZlbGFrdGlnIGVsbGVyIGVqIGV4aXN0ZXJhbmRlIC9sb3N0K2ZvdW5kLiAgS2FuIGludGUgw6V0ZXJhbnNsdXRhLlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZCBub3QgZXhwYW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGV4cGFuZCAvQGw6ICVtXG4iCittc2dzdHIgIkt1bmRlIGludGUgZXhwYW5kZXJhIC9sb3N0K2ZvdW5kOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlY29ubmVjdCAlaTogJW1cbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSDDpXRlcmbDtnJiaW5kYSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvQGw6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQgZsO2cnPDtmsgYXR0IGhpdHRhIC9sb3N0K2ZvdW5kOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Jsb2NrOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AYjogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19ibG9jazogJW0gdmVkIGbDtnJzw7ZrIGF0dCBza2FwYSAvbG9zdCtmb3VuZC1rYXRhbG9nXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfaW5vZGU6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BpOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X2lub2RlOiAlbSB2aWQgZsO2cnPDtmsgYXR0IHNrYXBhIC9sb3N0K2ZvdW5kLWthdGFsb2dcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfZGlyX0BiOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgQGQgQGJcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIG7DpHIgbnl0dCBrYXRhbG9nYmxvY2sgc2thcGFkZXNcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazogJW0gd2hpbGUgd3JpdGluZyB0aGUgZGlyZWN0b3J5IGJsb2NrIGZvciAvbG9zdCtmb3VuZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gd2hpbGUgd3JpdGluZyB0aGUgQGQgQGIgZm9yIC9AbFxuIgorbXNnc3RyICIiCisiZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazogJW0gdmlkIHNrcml2bmluZyBhdiBrYXRhbG9nYmxvY2tldCBmw7ZyIC9sb3N0K2ZvdW5kXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGFkanVzdGluZyBpbm9kZSBjb3VudCBvbiBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgYWRqdXN0aW5nIEBpIGNvdW50IG9uIEBpICVpXG4iCittc2dzdHIgIkZlbCB2aWQganVzdGVyaW5nIGF2IGlub2Ryw6RrbmFyZSBww6UgaW5vZCAlaVxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiS3VuZGUgaW50ZSByw6R0dGEgZsO2csOkbGRlciB0aWxsIGlub2QgJWk6ICVtXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkbid0IGZpeCBwYXJlbnQgb2YgaW5vZGUgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IGRpcmVjdG9yeSBlbnRyeVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBAZCBAZVxuIgorIlxuIgorbXNnc3RyICIiCisiS3VuZGUgaW50ZSByw6R0dGEgZsO2csOkbGRlciB0aWxsIGlub2QgJWk6IEt1bmRlIGludGUgaGl0dGEgIgorImbDtnLDpGxkZXJrYXRhbG9ncG9zdFxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIHNrYXBhbmRlIGF2IHJvdGthdGFsb2cgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBza2FwYW5kZSBhdiAvbG9zdCtmb3VuZC1rYXRhbG9nICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5OyBhYm9ydGluZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTE2Cittc2dpZCAiQHIgaXMgbm90IGEgQGQ7IGFib3J0aW5nLlxuIgorbXNnc3RyICJSb3Rpbm9kIMOkciBpbnRlIGVuIGthdGFsb2c7IGF2YnJ5dGVyLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIxCittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICJLYW4gaW50ZSBmb3J0c8OkdHRhIHV0YW4gZW4gcm90aW5vZC5cbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgaXMgbm90IGEgZGlyZWN0b3J5IChpbm89JWkpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUzMQorIywgYy1mb3JtYXQKK21zZ2lkICIvQGwgaXMgbm90IGEgQGQgKGlubz0laSlcbiIKK21zZ3N0ciAiL2xvc3QrZm91bmQgw6RyIGludGUgZW4ga2F0YWxvZyAoaW5vPSVpKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzgKK21zZ2lkICJQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzXG4iCittc2dzdHIgIlBhc3MgM0E6IE9wdGltZXJhciBrYXRhbG9nZXJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZGlyc190b19oYXNoIGl0ZXJhdG9yOiAlbVxuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgYXR0IHNrYXBhIGRpcnNfdG9faGFzaC1pdGVyYXRvcjogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQ4Cittc2dpZCAiRmFpbGVkIHRvIG9wdGltaXplIGRpcmVjdG9yeSAlcSAoJWQpOiAlbVxuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgYXR0IG9wdGltZXJhIGthdGFsb2cgJXEgKCVkKTogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTUzCittc2dpZCAiT3B0aW1pemluZyBkaXJlY3RvcmllczogIgorbXNnc3RyICJPcHRpbWVyYXIga2F0YWxvZ2VyOiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3MAorbXNnaWQgIlBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50c1xuIgorbXNnc3RyICJQYXNzIDQ6IEtvbnRyb2xsZXJhciByZWZlcmVuc3LDpGtuYXJlXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgemVyby1sZW5ndGggaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAeiBAaSAlaS4gICIKK21zZ3N0ciAiTMO2cyBub2xsw6RuZ2RzaW5vZCAlaS4gICIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQGkgJWlcbiIKK21zZ3N0ciAibMO2cyBpbm9kICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg1Cittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgIklub2QgJWkgcmVmZXJlbnNyw6RrbmFyZSDDpHIgJUlsLCBza3VsbGUgdmFyaXQgJU4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4OQorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiVkFSTklORzogUFJPR1JBTU1FUklOR1NGRUwgSSBFMkZTQ0shXG4iCisiICAgIEVMTEVSIE7DhUdPTiBLTEFOVFNLQUxMRSAoRFUpIEtPTlRST0xMRVJBUiBFVFQgTU9OVEVSQVQgKEFLVElWVCkgIgorIkZJTFNZU1RFTS5cbiIKKyJpbm9kX2xpbmtfaW5mb1slaV0gw6RyICVOLCBpbm9kLmlfbGlua3NfY291bnQgw6RyICVJbC4gIERlIHNrdWxsZSB2YXJhIHNhbW1hIVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb25cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTk5Cittc2dpZCAiUGFzcyA1OiBDaGVja2luZyBAZyBzdW1tYXJ5IGluZm9ybWF0aW9uXG4iCittc2dzdHIgIlBhc3MgNTogS29udHJvbGxlcmFyIGdydXBwc2FtbWFuZmF0dG5pbmdzaW5mb3JtYXRpb25cbiIKKworIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgaW5vZGUgYml0bWFwIGlzIG5vdCBzZXQuIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjA0Cittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGkgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICJVdGZ5bGxuYWQgdmlkIHNsdXRldCBhdiBpbm9kc2JpdGthcnRhIMOkciBpbnRlIHNhdHQuICIKKworIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgYmxvY2sgYml0bWFwIGlzIG5vdCBzZXQuIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjA5Cittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGIgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICJVdGZ5bGxuYWQgdmlkIHNsdXRldCBhdiBibG9ja2JpdGthcnRhIMOkciBpbnRlIHNhdHQuICIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYxNAorbXNnaWQgIkBiIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIkJsb2NrYml0a2FydGVza2lsbG5hZGVyOiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MzQKK21zZ2lkICJAaSBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJJbm9kc2JpdGthcnRlc2tpbGxuYWRlcjogIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1NAorbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiQW50YWwgZnJpYSBpbm9kZXIgw6RyIGZlbCBmw7ZyIGdydXBwIG5yLiAlZyAoJWksIHLDpGtuYWRlPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTkKK21zZ2lkICJEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIkthdGFsb2dhbnRhbCBmZWwgZsO2ciBncnVwcCBuci4gJWcgKCVpLCByw6RrbmFkZT0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgaW5vZGVzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2NAorbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIkFudGFsIGZyaWEgaW5vZGVyIMOkciBmZWwgKCVpLCByw6RrbmFkZT0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjY5Cittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJBbnRhbCBmcmlhIGJsb2NrIMOkciBmZWwgZsO2ciBncnVwcCBuci4gJWcgKCViLCByw6RrbmFkZT0lYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY3NAorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIkFudGFsIGZyaWEgYmxvY2sgw6RyIGZlbCAoJWIsIHLDpGtuYWRlPSVjKS5cbiIKKworIy4gQC1leHBhbmRlZDogUFJPR1JBTU1JTkcgRVJST1I6IGZpbGVzeXN0ZW0gKCMlTikgYml0bWFwIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIGJpdG1hcCAKKyMuIEAtZXhwYW5kZWQ6IGVuZHBvaW50cyAoJWksICVqKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NzkKK21zZ2lkICIiCisiUFJPR1JBTU1JTkcgRVJST1I6IEBmICgjJU4pIEBCIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIEBCICIKKyJlbmRwb2ludHMgKCVpLCAlailcbiIKK21zZ3N0ciAiIgorIlBST0dSQU1NRVJJTkdTRkVMOiBmaWxzeXN0ZW0gKG5yLiAlTikgYml0a2FydGFzIMOkbmRwdW5rdGVyICglYiwgJWMpIHN0w6RtbWVyXG4iCisiaW50ZSBtZWQgYmVyw6RrbmFkZSBiaXRrYXJ0ZcOkbmRwdW5rdGVyICglaSwgJWopXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY4NQorbXNnaWQgIkludGVybmFsIGVycm9yOiBmdWRnaW5nIGVuZCBvZiBiaXRtYXAgKCVOKVxuIgorbXNnc3RyICJJbnRlcm50IGZlbDogZnVza2FyIHRpbGwgc2x1dCBww6UgYml0a2FydGEgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGlub2RlIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGkgQEI6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQga29waWVyaW5nIGF2IGVyc8OkdHRuaW5nc2lub2Rza2FydGE6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAYiBAQjogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBpbmtvcGllcmluZyBhdiBlcnPDpHR0bmluZ3NiaXRrYXJ0YTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgYmxvY2socykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAYihzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbiIKK21zZ3N0ciAiYmxvY2sgaSBncnVwcCAlZyBhbnbDpG5kcyBtZW4gZ3J1cHBlbiDDpHIgbWFya2VyYWQgQkxPQ0tfVU5JTklUXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGlub2RlKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGkocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4iCittc2dzdHIgImlub2RlciBpIGdydXBwICVnIGFudsOkbmRzIG1lbiBncnVwcGVuIMOkciBtYXJrZXJhZCBJTk9ERV9VTklOSVRcbiIKKworIy4gQC1leHBhbmRlZDogUmVjcmVhdGUgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzMyCittc2dpZCAiUmVjcmVhdGUgQGoiCittc2dzdHIgIsOFdGVyc2thcGEgam91cm5hbCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzM3Cittc2dpZCAiVXBkYXRlIHF1b3RhIGluZm8gZm9yIHF1b3RhIHR5cGUgJU4iCittc2dzdHIgIlVwcGRhdGVyYSBrdm90aW5mb3JtYXRpb24gZsO2ciBrdm90dHlwICVOIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzZXR0aW5nIGJsb2NrIGdyb3VwIGNoZWNrc3VtIGluZm86ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc0MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIEBiIEBnIGNoZWNrc3VtIGluZm86ICVtXG4iCittc2dzdHIgIkZlbCBuw6RyIGtvbnRyb2xsc3VtbWVpbmZvcm1hdGlvbiBmw7ZyIGJsb2NrZ3J1cHAgc2F0dGVzOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBmaWxlIHN5c3RlbSBpbmZvOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyBhdiBmaWxzeXN0ZW1zaW5mb3JtYXRpb246ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBmbHVzaGluZyB3cml0ZXMgdG8gc3RvcmFnZSBkZXZpY2U6ICVtXG4iCittc2dzdHIgIkZlbCBuw6RyIHNrcml2bmluZ2FyIHTDtm1kZXMgdGlsbCBsYWdyaW5nc2VuaGV0ZW46ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmhhbmRsZWQgZXJyb3IgY29kZSAoMHgleCkhXG4iCittc2dzdHIgIkVqIGhhbnRlcmFkIGZlbGtvZCAoMHgleCkhXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk5NiBlMmZzY2svcHJvYmxlbS5jOjIwMDAKK21zZ2lkICJJR05PUkVEIgorbXNnc3RyICJJR05PUkVSQVQiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlZCwgZWxhcHNlZCB0aW1lOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorbXNnc3RyICJBbnbDpG50IG1pbm5lOiAlZCwgZsO2cmx1cGVuIHRpZDogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic2l6ZSBvZiBpbm9kZT0lZFxuIgorbXNnc3RyICJzdG9ybGVrIHDDpSBpbm9kPSVkXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjExOQorbXNnaWQgIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iCittc2dzdHIgInZpZCBzdGFydCBhdiBpbm9kc2dlbm9tc8O2a25pbmciCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjEzMAorbXNnaWQgIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iCittc2dzdHIgInZpZCBpbm9kc2dlbm9tc8O2a25pbmciCisKKyM6IGUyZnNjay9zdXBlci5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19ibG9ja19pdGVyYXRlIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAidmlkIGFucm9wIGF2IGV4dDJmc19ibG9ja19pdGVyYXRlIGbDtnIgaW5vZCAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZm9yIGlub2RlICVkIgorbXNnc3RyICJ2aWQgYW5yb3AgYXYgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZsO2ciBpbm9kICVkIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzQKK21zZ2lkICJUcnVuY2F0aW5nIgorbXNnc3RyICJLYXBhciIKKworIzogZTJmc2NrL3N1cGVyLmM6Mjc1Cittc2dpZCAiQ2xlYXJpbmciCittc2dzdHIgIlTDtm1tZXIiCisKKyM6IGUyZnNjay91bml4LmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisiQW52w6RuZG5pbmc6ICVzIFstcGFueXJjZGZ2dERGVl0gWy1iIHN1cGVyYmxvY2tdIFstQiBibG9ja3N0b3JsZWtdXG4iCisiXHRcdFstSSBpbm9kYnVmZmVydGJsb2NrXSBbLVAgcHJvY2Vzc2lub2Rzc3Rvcmxla11cbiIKKyJcdFx0Wy1sfC1MIGTDpWxpZ2FfYmxvY2tfZmlsXSBbLUMgZmRdIFstaiBleHRlcm5fam91cm5hbF1cbiIKKyJcdFx0Wy1FIHV0w7ZrYWRlLWZsYWdnb3JdIGVuaGV0XG4iCisKKyM6IGUyZnNjay91bml4LmM6ODAKK21zZ2lkICIiCisiXG4iCisiRW1lcmdlbmN5IGhlbHA6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyByZXBhaXIgKG5vIHF1ZXN0aW9ucylcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTWFrZSBubyBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIEFzc3VtZSBcInllc1wiIHRvIGFsbCBxdWVzdGlvbnNcbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIGJhZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYWRibG9jayAiCisibGlzdFxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3JjZSBjaGVja2luZyBldmVuIGlmIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGNsZWFuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOw7ZkaGrDpGxwOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBSZXBhcmVyYSBhdXRvbWF0aXNrdCAoaW5nYSBmcsOlZ29yKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBHw7ZyIGluZ2EgZsO2csOkbmRyaW5nYXIgYXYgZmlsc3lzdGVtZXRcbiIKKyIgLXkgICAgICAgICAgICAgICAgICAgQW50YSBcImphXCIgc29tIHN2YXIgcMOlIGFsbGEgZnLDpWdvclxuIgorIiAtYyAgICAgICAgICAgICAgICAgICBMZXRhIGVmdGVyIGTDpWxpZ2EgYmxvY2sgb2NoIGzDpGdnIHRpbGwgZGVtIGkgbGlzdGFuXG4iCisiIC1mICAgICAgICAgICAgICAgICAgIEZyYW10dmluZ2Ega29udHJvbGwgw6R2ZW4gb20gZmlsc3lzdGVtZXQgw6RyIG1hcmtlcmF0ICIKKyJyZW50XG4iCisKKyM6IGUyZnNjay91bml4LmM6ODYKK21zZ2lkICIiCisiIC12ICAgICAgICAgICAgICAgICAgIEJlIHZlcmJvc2VcbiIKKyIgLWIgc3VwZXJibG9jayAgICAgICAgVXNlIGFsdGVybmF0aXZlIHN1cGVyYmxvY2tcbiIKKyIgLUIgYmxvY2tzaXplICAgICAgICAgRm9yY2UgYmxvY2tzaXplIHdoZW4gbG9va2luZyBmb3Igc3VwZXJibG9ja1xuIgorIiAtaiBleHRlcm5hbF9qb3VybmFsICBTZXQgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGpvdXJuYWxcbiIKKyIgLWwgYmFkX2Jsb2Nrc19maWxlICAgQWRkIHRvIGJhZGJsb2NrcyBsaXN0XG4iCisiIC1MIGJhZF9ibG9ja3NfZmlsZSAgIFNldCBiYWRibG9ja3MgbGlzdFxuIgorbXNnc3RyICIiCisiIC12ICAgICAgICAgICAgICAgICAgIFZhciB1dGbDtnJsaWdcbiIKKyIgLWIgc3VwZXJibG9jayAgICAgICAgQW52w6RuZCBhbHRlcm5hdGl2dCBzdXBlcmJsb2NrXG4iCisiIC1CIGJsb2Nrc3RvcmxlayAgICAgIEZyYW10dmluZ2EgYmxvY2tzdG9ybGVrIHZpZCBzw7ZrYW5kZSBlZnRlciBzdXBlcmJsb2NrXG4iCisiIC1qIGV4dGVybl9qb3VybmFsICAgIEJlc3TDpG0gcGxhdHMgZsO2ciBkZW4gZXh0ZXJuYSBqb3VybmFsZW5cbiIKKyIgLWwgZMOlbGlnYV9ibG9ja19maWwgIEzDpGdnIHRpbGwgdGlsbCBsaXN0YW4gw7Z2ZXIgZMOlbGlnYSBibG9ja1xuIgorIiAtTCBkw6VsaWdhX2Jsb2NrX2ZpbCAgQW5nZSBsaXN0YSDDtnZlciBkw6VsaWdhIGJsb2NrXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAldS8ldSBmaWxlcyAoJTBkLiVkJSUgbm9uLWNvbnRpZ3VvdXMpLCAlbGx1LyVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiVzOiAldS8ldSBmaWxlciAoJTBkLiVkJSUgZWogc2FtbWFuaMOkbmdhbmRlKSwgJWxsdS8lbGx1IGJsb2NrXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlMTJ1IGlub2RlIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgaW5vZGVzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiUxMnUgaW5vZCBhbnbDpG5kICglMi4yZiAlJSwgYXYgJXUpXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IGlub2RlciBhbnbDpG5kYSAoJTIuMmYgJSUsIGF2ICV1KVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGUgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiJTEydSBlaiBrb25zZWt1dGl2IGZpbCAoJTBkLiVkICUlKVxuIgorbXNnc3RyWzFdICIlMTJ1IGVqIGtvbnNla3V0aXZhIGZpbGVyICglMGQuJWQgJSUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3J5ICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcmllcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiUxMnUgZWoga29uc2VrdXRpdiBrYXRhbG9nICglMGQuJWQgJSUpXG4iCittc2dzdHJbMV0gIiUxMnUgZWoga29uc2VrdXRpdmEga2F0YWxvZ2VyICglMGQuJWQgJSUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAgICAgICAjIG9mIGlub2RlcyB3aXRoIGluZC9kaW5kL3RpbmQgYmxvY2tzOiAldS8ldS8ldVxuIgorbXNnc3RyICIgICAgICAgICAgICAgYW50YWwgaW5vZGVyIG1lZCBpbmQvZGluZC90aW5kLWJsb2NrOiAldS8ldS8ldVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3OQorbXNnaWQgIiAgICAgICAgICAgICBFeHRlbnQgZGVwdGggaGlzdG9ncmFtOiAiCittc2dzdHIgIiAgICAgICAgICAgICBIaXN0b2dyYW0gw7Z2ZXIgdXRzdHLDpGNrbmluZ2FycyBkanVwOiAiCisKKyM6IGUyZnNjay91bml4LmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMmxsdSBibG9jayB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEybGx1IGJsb2NrcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ3N0clswXSAiJTEybGx1IGFudsOkbnQgYmxvY2sgKCUyLjJmICUlLCBhdiAlbGx1KVxuIgorbXNnc3RyWzFdICIlMTJsbHUgYW52w6RuZGEgYmxvY2sgKCUyLjJmICUlLCBhdiAlbGx1KVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJhZCBibG9ja1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJhZCBibG9ja3NcbiIKK21zZ3N0clswXSAiJTEydSBkw6VsaWd0IGJsb2NrXG4iCittc2dzdHJbMV0gIiUxMnUgZMOlbGlnYSBibG9ja1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxhcmdlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsYXJnZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IHN0b3IgZmlsXG4iCittc2dzdHJbMV0gIiUxMnUgc3RvcmEgZmlsZXJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiUxMnUgbm9ybWFsIGZpbFxuIgorbXNnc3RyWzFdICIiCisiXG4iCisiJTEydSBub3JtYWxhIGZpbGVyXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZGlyZWN0b3J5XG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZGlyZWN0b3JpZXNcbiIKK21zZ3N0clswXSAiJTEydSBrYXRhbG9nXG4iCittc2dzdHJbMV0gIiUxMnUga2F0YWxvZ2VyXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IHRlY2tlbmVuaGV0c2ZpbFxuIgorbXNnc3RyWzFdICIlMTJ1IHRlY2tlbmVuaGV0c2ZpbGVyXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBibG9jayBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBibG9ja2VuaGV0c2ZpbFxuIgorbXNnc3RyWzFdICIlMTJ1IGJsb2NrZW5oZXRzZmlsZXJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWZvXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlmb3NcbiIKK21zZ3N0clswXSAiJTEydSBmaWZvXG4iCittc2dzdHJbMV0gIiUxMnUgZmlmb25cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsaW5rXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGlua3NcbiIKK21zZ3N0clswXSAiJTEydSBsw6Rua1xuIgorbXNnc3RyWzFdICIlMTJ1IGzDpG5rYXJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzeW1ib2xpYyBsaW5rIgorbXNnaWRfcGx1cmFsICIlMTJ1IHN5bWJvbGljIGxpbmtzIgorbXNnc3RyWzBdICIlMTJ1IHN5bWJvbGlzayBsw6RuayIKK21zZ3N0clsxXSAiJTEydSBzeW1ib2xpc2thIGzDpG5rYXIiCisKKyM6IGUyZnNjay91bml4LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rKVxuIgorbXNnaWRfcGx1cmFsICIgKCV1IGZhc3Qgc3ltYm9saWMgbGlua3MpXG4iCittc2dzdHJbMF0gIiAoJXUgc25hYmIgc3ltYm9saXNrIGzDpG5rKVxuIgorbXNnc3RyWzFdICIgKCV1IHNuYmJhIHN5bWJvbGlza2EgbMOkbmthcilcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzb2NrZXRcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBzb2NrZXRzXG4iCittc2dzdHJbMF0gIiUxMnUgdXR0YWcgKHNvY2tldClcbiIKK21zZ3N0clsxXSAiJTEydSB1dHRhZyAoc29ja2V0cylcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBmaWxcbiIKK21zZ3N0clsxXSAiJTEydSBmaWxlclxuIgorCisjOiBlMmZzY2svdW5peC5jOjIzMiBtaXNjL2JhZGJsb2Nrcy5jOjk5MyBtaXNjL3R1bmUyZnMuYzoyMTIyIG1pc2MvdXRpbC5jOjMxNgorIzogcmVzaXplL21haW4uYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLiIKK21zZ3N0ciAibsOkciBkZXQgYXZnam9yZGVzIG9tICVzIMOkciBtb250ZXJhdC4iCisKKyM6IGUyZnNjay91bml4LmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICJWYXJuaW5nISAgJXMgw6RyIG1vbnRlcmF0LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgaW4gdXNlLlxuIgorbXNnc3RyICJWYXJuaW5nISAgJXMgYW52w6RuZHMuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIiVzIMOkciBtb250ZXJhdC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW4gdXNlLlxuIgorbXNnc3RyICIlcyBhbnbDpG5kcy5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjYKK21zZ2lkICIiCisiQ2Fubm90IGNvbnRpbnVlLCBhYm9ydGluZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGZvcnRzw6R0dGEsIGF2YnJ5dGVyLlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2OAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJXQVJOSU5HISEhICBUaGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLiAgIElmIHlvdSBjb250aW51ZSB5b3UgKioqV0lMTCoqKlxuIgorImNhdXNlICoqKlNFVkVSRSoqKiBmaWxlc3lzdGVtIGRhbWFnZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIlZBUk5JTkchISEgIEZpbHN5c3RlbWV0IMOkciBtb250ZXJhdC4gIE9tIGR1IGZvcnRzw6R0dGVyICoqKktPTU1FUioqKlxuIgorImR1IGF0dCBvcnNha2EgKioqQUxMVkFSTElHKioqIHNrYWRhIHDDpSBmaWxzeXN0ZW1ldC5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNzMKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gY29udGludWUiCittc2dzdHIgIlZpbGwgZHUgdmVya2xpZ2VuIGZvcnRzw6R0dGEiCisKKyM6IGUyZnNjay91bml4LmM6Mjc1Cittc2dpZCAiY2hlY2sgYWJvcnRlZC5cbiIKK21zZ3N0ciAia29udHJvbGwgYXZicnV0ZW4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MzY4Cittc2dpZCAiIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMiCittc2dzdHIgIiBpbm5laMOlbGxlciBldHQgZmlsc3lzdGVtIG1lZCBmZWwiCisKKyM6IGUyZnNjay91bml4LmM6MzcwCittc2dpZCAiIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQiCittc2dzdHIgIiB2YXIgaW50ZSBmbMOkY2tmcml0dCBhdm1vbnRlcmF0IgorCisjOiBlMmZzY2svdW5peC5jOjM3MgorbXNnaWQgIiBwcmltYXJ5IHN1cGVyYmxvY2sgZmVhdHVyZXMgZGlmZmVyZW50IGZyb20gYmFja3VwIgorbXNnc3RyICIgZGV0IHByaW3DpHJhIHN1cGVyYmxvY2tldHMgZWdlbnNrYXBlciBza2lsamVyIGZyw6VuIHJlc2VydmVucyIKKworIzogZTJmc2NrL3VuaXguYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBiZWVuIG1vdW50ZWQgJXUgdGltZXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgaGFyIG1vbnRlcmF0cyAldSBnw6VuZ2VyIHV0YW4gYXR0IGtvbnRyb2xsZXJhcyIKKworIzogZTJmc2NrL3VuaXguYzozODMKK21zZ2lkICIgaGFzIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRpbWUgaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiIGhhciB0aWRwdW5rdGVuIGbDtnIgc2VuYXN0ZSBmaWxzeXN0ZW1za29udHJvbGwgaSBmcmFtdGlkZW4iCisKKyM6IGUyZnNjay91bml4LmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgZ29uZSAldSBkYXlzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIGhhciBpbnRlIGtvbnRyb2xsZXJhdHMgcMOlICV1IGRhZ2FyIgorCisjOiBlMmZzY2svdW5peC5jOjM5OAorbXNnaWQgIiwgY2hlY2sgZm9yY2VkLlxuIgorbXNnc3RyICIsIGtvbnRyb2xsIGZyYW10dmluZ2FkLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4sICV1LyV1IGZpbGVzLCAlbGx1LyVsbHUgYmxvY2tzIgorbXNnc3RyICIlczogcmVudCwgJXUvJXUgZmlsZXIsICVsbHUvJWxsdSBibG9jayIKKworIzogZTJmc2NrL3VuaXguYzo0NTEKK21zZ2lkICIgKGNoZWNrIGRlZmVycmVkOyBvbiBiYXR0ZXJ5KSIKK21zZ3N0ciAiIChrb250cm9sbCBzZW5hcmVsYWdkOyBww6UgYmF0dGVyaSkiCisKKyM6IGUyZnNjay91bml4LmM6NDU0Cittc2dpZCAiIChjaGVjayBhZnRlciBuZXh0IG1vdW50KSIKK21zZ3N0ciAiIChrb250cm9sbGVyYSBlZnRlciBuw6RzdGEgbW9udGVyaW5nKSIKKworIzogZTJmc2NrL3VuaXguYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChjaGVjayBpbiAlbGQgbW91bnRzKSIKK21zZ3N0ciAiIChrb250cm9sbGVyYSBvbSAlbGQgbW9udGVyaW5nYXIpIgorCisjOiBlMmZzY2svdW5peC5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogQ291bGRuJ3Qgb3BlbiAvZGV2L251bGwgKCVzKVxuIgorbXNnc3RyICJGRUw6IEt1bmRlIGludGUgw7ZwcG5hIC9kZXYvbnVsbCAoJXMpXG4iCisKKyM6IGUyZnNjay91bml4LmM6Njc1Cittc2dpZCAiSW52YWxpZCBFQSB2ZXJzaW9uLlxuIgorbXNnc3RyICJPZ2lsdGlnIEVBLXZlcnNpb24uXG4iCisKKyM6IGUyZnNjay91bml4LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZXh0ZW5kZWQgb3B0aW9uOiAlc1xuIgorbXNnc3RyICJPa8OkbmQgdXTDtmthZCBmbGFnZ2E6ICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6NzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gZTJmc2NrIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisiU3ludGF4ZmVsIGkgZTJmc2NrOnMga29uZmlndXJhdGlvbnNmaWwgKCVzLCByYWQgbnIgJWQpXG4iCisiXHQlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAiRmVsIHZpZCB2YWxpZGVyaW5nIGF2IGZpbGlkZW50aWZpZXJhcmUgJWQ6ICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODAxCittc2dpZCAiSW52YWxpZCBjb21wbGV0aW9uIGluZm9ybWF0aW9uIGZpbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAiT2dpbHRpZyBmaWxpZGVudGlmaWVyYXJlIGbDtnIgZsO2cmxvcHBzaW5mb3JtYXRpb24iCisKKyM6IGUyZnNjay91bml4LmM6ODE2Cittc2dpZCAiT25seSBvbmUgb2YgdGhlIG9wdGlvbnMgLXAvLWEsIC1uIG9yIC15IG1heSBiZSBzcGVjaWZpZWQuIgorbXNnc3RyICJFbmRhc3QgZW4gYXYgZmxhZ2dvcm5hIC1wLy1hLCAtbiBlbGxlciAteSBrYW4gYW5nZXMuIgorCisjOiBlMmZzY2svdW5peC5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgLXQgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKK21zZ3N0ciAiRmxhZ2dhbiAtdCBzdMO2ZGpzIGludGUgaSBkZW5uYSB2ZXJzaW9uIGF2IGUyZnNjay5cbiIKKworIzogZTJmc2NrL3VuaXguYzo4NjggZTJmc2NrL3VuaXguYzo5NDIgbWlzYy90dW5lMmZzLmM6ODc5IG1pc2MvdHVuZTJmcy5jOjExNzQKKyM6IG1pc2MvdHVuZTJmcy5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiS2FuIGludGUgaGl0dGEgXCIlc1wiIgorCisjOiBlMmZzY2svdW5peC5jOjkyMQorbXNnaWQgIlRoZSAtbiBhbmQgLUQgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiRmxhZ2dvcm5hIC1uIG9jaCAtRCDDpHIgaW5rb21wYXRpYmxhLiIKKworIzogZTJmc2NrL3VuaXguYzo5MjYKK21zZ2lkICJUaGUgLW4gYW5kIC1jIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIkZsYWdnb3JuYSAtbiBvY2ggLWMgw6RyIGlua29tcGF0aWJsYS4iCisKKyM6IGUyZnNjay91bml4LmM6OTMxCittc2dpZCAiVGhlIC1uIGFuZCAtbC8tTCBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJGbGFnZ29ybmEgLW4gb2NoIC1sLy1MIMOkciBpbmtvbXBhdGlibGEuIgorCisjOiBlMmZzY2svdW5peC5jOjk4NQorbXNnaWQgIlRoZSAtYyBhbmQgdGhlIC1sLy1MIG9wdGlvbnMgbWF5IG5vdCBiZSBib3RoIHVzZWQgYXQgdGhlIHNhbWUgdGltZS5cbiIKK21zZ3N0ciAiRmxhZ2dvcm5hIC1jIG9jaCAtbC8tTCBrYW4gaW50ZSBiw6VkYSBhbnbDpG5kYXMgcMOlIHNhbW1hIGfDpW5nLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG5vdCBhbiBpbnRlZ2VyXG4iCisiXG4iCittc2dzdHIgIiIKKyJFMkZTQ0tfSkJEX0RFQlVHIFwiJXNcIiDDpHIgaW50ZSBldHQgaGVsdGFsXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTA0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSW52YWxpZCBub24tbnVtZXJpYyBhcmd1bWVudCB0byAtJWMgKFwiJXNcIilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk9naWx0aWd0IGlja2VudW1lcmlza3QgYXJndW1lbnQgdGlsbCAtJWMgKFwiJXNcIilcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNTVAgaW50ZXJ2YWwgaXMgJXUgc2Vjb25kcyBhbmQgdG90YWwgd2FpdCB0aW1lIGlzICV1IHNlY29uZHMuIFBsZWFzZSAiCisid2FpdC4uLlxuIgorbXNnc3RyICIiCisiTU1QLWludGVydmFsbCDDpHIgJXUgc2VrdW5kZXIgb2NoIGRlbiB0b3RhbGEgdsOkbnRldGlkZW4gw6RyICV1IHNla3VuZGVyLiAgVmFyICIKKyJnb2QgZHLDtmogLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTE0OSBlMmZzY2svdW5peC5jOjExNTQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBNTVAgYmxvY2siCittc2dzdHIgInZpZCB1cHBzw6R0dG5pbmcgYXYgTU1QLWJsb2NrIgorCisjOiBlMmZzY2svdW5peC5jOjExNTYgbWlzYy90dW5lMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJJZiB5b3UgYXJlIHN1cmUgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IGluIHVzZSBvbiBhbnkgbm9kZSwgcnVuOlxuIgorIid0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfSdcbiIKK21zZ3N0ciAiIgorIk9tIGR1IMOkciBzw6RrZXIgcMOlIGF0dCBmaWxzeXN0ZW1ldCBpbnRlIGFudsOkbmRzIHDDpSBuw6Vnb24gbm9kLCBrw7ZyOlxuIgorIlwidHVuZTJmcy1mLUUgY2xlYXJfbW1wIHtlbmhldH1cIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMDcKK21zZ2lkICJFcnJvcjogZXh0MmZzIGxpYnJhcnkgdmVyc2lvbiBvdXQgb2YgZGF0ZSFcbiIKK21zZ3N0ciAiRmVsOiBleHQyZnMtYmlibGlvdGVrdmVyc2lvbiBpbmFrdHVlbGwhXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTIxNAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBpbml0aWFsaXplIHByb2dyYW0iCittc2dzdHIgInZpZCBmw7Zyc8O2ayBhdHQgaW5pdGllcmEgcHJvZ3JhbSIKKworIzogZTJmc2NrL3VuaXguYzoxMjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXMsICVzXG4iCittc2dzdHIgIlx0QW52w6RuZGVyICVzLCAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEyNDkKK21zZ2lkICJuZWVkIHRlcm1pbmFsIGZvciBpbnRlcmFjdGl2ZSByZXBhaXJzIgorbXNnc3RyICJiZWjDtnZlciB0ZXJtaW5hbCBmw7ZyIGludGVyYWt0aXZhIHJlcGFyYXRpb25lciIKKworIzogZTJmc2NrL3VuaXguYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB0cnlpbmcgYmFja3VwIGJsb2Nrcy4uLlxuIgorbXNnc3RyICIlczogJXMgZsO2cnPDtmtlciBtZWQgcmVzZXJ2YmxvY2sgLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMwNQorbXNnaWQgIlN1cGVyYmxvY2sgaW52YWxpZCwiCittc2dzdHIgIlN1cGVyYmxvY2tldCDDpHIgb2dpbHRpZ3QsIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDYKK21zZ2lkICJHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiIKK21zZ3N0ciAiR3J1cHBiZXNrcml2YXJuYSBzZXIgdHJhc2lnYSB1dCAuLi4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgdXNpbmcgdGhlIGJhY2t1cCBibG9ja3MiCittc2dzdHIgIiVzOiAlcyBuw6RyIHJlc2VydmJsb2NrZW4gYW52w6RuZGVzIgorCisjOiBlMmZzY2svdW5peC5jOjEzMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGdvaW5nIGJhY2sgdG8gb3JpZ2luYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICIlczogZ8OlciB0aWxsYmFrYSB0aWxsIG9yZ2luYWxzdXBlcmJsb2NrXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM0OQorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSByZXZpc2lvbiBpcyBhcHBhcmVudGx5IHRvbyBoaWdoIGZvciB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorIihPciB0aGUgZmlsZXN5c3RlbSBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQpXG4iCisiXG4iCittc2dzdHIgIiIKKyJGaWxzeXN0ZW1zcmV2aXNpb25lbiDDpHIgdXBwZW5iYXJsaWdlbiBmw7ZyIGjDtmcgZsO2ciBkZW5uYSB2ZXJzaW9uIGF2IGUyZnNjay5cbiIKKyIoRWxsZXIgc8OlIMOkciBmaWxzeXN0ZW1ldHMgc3VwZXJibG9jayB0cmFzaWd0KVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTYKK21zZ2lkICJDb3VsZCB0aGlzIGJlIGEgemVyby1sZW5ndGggcGFydGl0aW9uP1xuIgorbXNnc3RyICJLYW4gZGV0dGEgdmFyYSBlbiBub2xsw6RuZ2RzcGFydGl0aW9uP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IG11c3QgaGF2ZSAlcyBhY2Nlc3MgdG8gdGhlIGZpbGVzeXN0ZW0gb3IgYmUgcm9vdFxuIgorbXNnc3RyICJEdSBtw6VzdGUgaGEgJXMtw6V0a29tc3QgdGlsbCBmaWxzeXN0ZW1ldCBlbGxlciB2YXJhIHJvb3RcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY0Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICJLYW5za2UgaW50ZSBleGlzdGVyYXIgZWxsZXIgdsOkeGxpbmdzZW5oZXQ/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM2NgorbXNnaWQgIkZpbGVzeXN0ZW0gbW91bnRlZCBvciBvcGVuZWQgZXhjbHVzaXZlbHkgYnkgYW5vdGhlciBwcm9ncmFtP1xuIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBtb250ZXJhdCBlbGxlciDDtnBwbmF0IGV4a2x1c2l2dCBhdiBldHQgYW5uYXQgcHJvZ3JhbT9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzcwCittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IGRldmljZT9cbiIKK21zZ3N0ciAiS2Fuc2tlIGVuIGVuaGV0IHNvbSBpbnRlIGV4aXN0ZXJhcj9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzczCittc2dpZCAiIgorIkRpc2sgd3JpdGUtcHJvdGVjdGVkOyB1c2UgdGhlIC1uIG9wdGlvbiB0byBkbyBhIHJlYWQtb25seVxuIgorImNoZWNrIG9mIHRoZSBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJTa3JpdnNreWRkYWQgZGlzazsgYW52w6RuZCBmbGFnZ2FuIC1uIGbDtnIgYXR0IGfDtnJhIGVuIGzDpHNuaW5nc2tvbnRyb2xsXG4iCisiYXYgZW5oZXRlbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDM3Cittc2dpZCAiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIgorbXNnc3RyICJIw6RtdGEgZW4gbnlhcmUgdmVyc2lvbiBhdiBlMmZzY2shIgorCisjOiBlMmZzY2svdW5peC5jOjE0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgZXh0MyBqb3VybmFsIGZvciAlcyIKK21zZ3N0ciAidmlkIGtvbnRyb2xsIGF2IGV4dDMtam91cm5hbCBmw7ZyICVzIgorCisjOiBlMmZzY2svdW5peC5jOjE0OTIKK21zZ2lkICIiCisiV2FybmluZzogc2tpcHBpbmcgam91cm5hbCByZWNvdmVyeSBiZWNhdXNlIGRvaW5nIGEgcmVhZC1vbmx5IGZpbGVzeXN0ZW0gIgorImNoZWNrLlxuIgorbXNnc3RyICIiCisiVmFybmluZzogaG9wcGFyIMO2dmVyIGpvdXJuYWzDpXRlcmjDpG10bmluZyBlZnRlcnNvbSBlbiBsw6RzbmluZ3Nrb250cm9sbCBhdiAiCisiZmlsc3lzdGVtIGfDtnJzLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBzdXBlcmJsb2NrIGZsYWdzIG9uICVzXG4iCittc2dzdHIgImthbiBpbnRlIHPDpHR0YSBzdXBlcmJsb2Nrc2ZsYWdnb3IgcMOlICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWNvdmVyaW5nIGV4dDMgam91cm5hbCBvZiAlcyIKK21zZ3N0ciAidmlkIMOldGVyaMOkbXRuaW5nIGF2IGV4dDMtam91cm5hbCBmw7ZyICVzIgorCisjOiBlMmZzY2svdW5peC5jOjE1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocyk6IgorbXNnc3RyICIlcyBoYXIgZnVua3Rpb25lciBzb20gaW50ZSBzdMO2ZHM6IgorCisjOiBlMmZzY2svdW5peC5jOjE1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhcm5pbmc6IGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorbXNnc3RyICIlczogdmFybmluZzoga29tcHJpbWVyaW5nc3N0w7ZkIMOkciBleHBlcmltZW50ZWxsdC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogZTJmc2NrIG5vdCBjb21waWxlZCB3aXRoIEhUUkVFIHN1cHBvcnQsXG4iCisiXHRidXQgZmlsZXN5c3RlbSAlcyBoYXMgSFRSRUUgZGlyZWN0b3JpZXMuXG4iCittc2dzdHIgIiIKKyIlczogZTJmc2NrIMOkciBpbnRlIGtvbXBpbGVyYXQgbWVkIEhUUkVFLXN0w7ZkLFxuIgorIlx0bWVuIGZpbHN5c3RlbSAlcyBoYXIgSFRSRUUta2F0YWxvZ2VyLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrcyBpbm9kZVxuIgorbXNnc3RyICIlczogJXMgdmlkIGzDpHNuaW5nIGF2IGlub2QgZsO2ciBkw6VsaWdhIGJsb2NrXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxMAorbXNnaWQgIlRoaXMgZG9lc24ndCBib2RlIHdlbGwsIGJ1dCB3ZSdsbCB0cnkgdG8gZ28gb24uLi5cbiIKK21zZ3N0ciAiRGV0dGEgYsOlZGFyIGludGUgZ290dCwgbWVuIHZpIHNrYWxsIGbDtnJzw7ZrYSBhdHQgZm9ydHPDpHR0YSAuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCVkIGJsb2Nrcyk6ICIKK21zZ3N0ciAiU2thcGFyIGpvdXJuYWwgKCVkIGJsb2NrKTogIgorCisjOiBlMmZzY2svdW5peC5jOjE2NjIKK21zZ2lkICIgRG9uZS5cbiIKK21zZ3N0ciAiIEtsYXIuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY2NAorbXNnaWQgIiIKKyJcbiIKKyIqKiogam91cm5hbCBoYXMgYmVlbiByZS1jcmVhdGVkIC0gZmlsZXN5c3RlbSBpcyBub3cgZXh0MyBhZ2FpbiAqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIioqKiBqb3VybmFsZW4gaGFyIMOldGVyc2thcGF0cyAtIGZpbHN5c3RlbWV0IMOkciBudSBleHQzIGlnZW4gKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY4OAorbXNnaWQgIlJlc3RhcnRpbmcgZTJmc2NrIGZyb20gdGhlIGJlZ2lubmluZy4uLlxuIgorbXNnc3RyICJTdGFydGFyIG9tIGUyZnNjayBmcsOlbiBiw7ZyamFuIC4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2OTIKK21zZ2lkICJ3aGlsZSByZXNldHRpbmcgY29udGV4dCIKK21zZ3N0ciAidmlkIMOldGVyc3TDpGxsbmluZyBhdiBvbWdpdm5pbmciCisKKyM6IGUyZnNjay91bml4LmM6MTY5OQorbXNnaWQgImFib3J0ZWQiCittc2dzdHIgImF2YnJ1dGVuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGUyZnNjayBjYW5jZWxlZC5cbiIKK21zZ3N0ciAiJXM6IGUyZnNjayBpbnN0w6RsbGQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc0MSBlMmZzY2svdXRpbC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKiogRklMU1lTVEVNRVQgTU9ESUZJRVJBREVTICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiVzOiAqKioqKiBTVEFSVEEgT00gTElOVVggKioqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzUzIGUyZnNjay91dGlsLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIFdBUk5JTkc6IEZpbGVzeXN0ZW0gc3RpbGwgaGFzIGVycm9ycyAqKioqKioqKioqXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBWQVJOSU5HOiBGaWxzeXN0ZW1ldCBoYXIgZm9ydGZhcmFuZGUgZmVsICoqKioqKioqKipcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoxOTAgbWlzYy91dGlsLmM6ODYKK21zZ2lkICJ5WSIKK21zZ3N0ciAieVlqSiIKKworIzogZTJmc2NrL3V0aWwuYzoxOTEKK21zZ2lkICJuTiIKK21zZ3N0ciAibk4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA1Cittc2dpZCAiPHk+IgorbXNnc3RyICI8aj4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA3Cittc2dpZCAiPG4+IgorbXNnc3RyICI8bj4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA5Cittc2dpZCAiICh5L24pIgorbXNnc3RyICIgKGovbikiCisKKyM6IGUyZnNjay91dGlsLmM6MjIzCittc2dpZCAiY2FuY2VsbGVkIVxuIgorbXNnc3RyICJpbnN0w6RsbGQhXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjM4Cittc2dpZCAieWVzXG4iCittc2dzdHIgImphXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjQwCittc2dpZCAibm9cbiIKK21zZ3N0ciAibmVqXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8gbm9cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyBuZWpcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyB5ZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyBqYVxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1OAorbXNnaWQgInllcyIKK21zZ3N0ciAiamEiCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAibm8iCittc2dzdHIgIm5laiIKKworIzogZTJmc2NrL3V0aWwuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJmc2NrX3JlYWRfYml0bWFwczogaWxsZWdhbCBiaXRtYXAgYmxvY2socykgZm9yICVzIgorbXNnc3RyICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBvZ2lsdGlnYSBiaXRrYXJ0ZWJsb2NrIGbDtnIgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjc4Cittc2dpZCAicmVhZGluZyBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcyIKK21zZ3N0ciAibMOkc2VyIGlub2QtIG9jaCBibG9ja2JpdGthcnRvciIKKworIzogZTJmc2NrL3V0aWwuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gcmVhZCBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAidmlkIHVwcHJlcGF0IGbDtnJzw7ZrIGF0dCBsw6RzYSBiaXRrYXJ0YSBmw7ZyICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjI5OAorbXNnaWQgIndyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMiCittc2dzdHIgInNraXZlciBibG9jay0gb2NoIGlub2RzYml0a2FydG9yIgorCisjOiBlMmZzY2svdXRpbC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXdyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJ2aWQgb21za3Jpdm5pbmcgYXYgYmxvY2stIG9jaCBpbm9kc2JpdGthcnRvciBmw7ZyICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiJXM6IFVORVhQRUNURUQgSU5DT05TSVNURU5DWTsgUlVOIGZzY2sgTUFOVUFMTFkuXG4iCisiXHQoaS5lLiwgd2l0aG91dCAtYSBvciAtcCBvcHRpb25zKVxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiJXM6IE9Ww4ROVEFEIElOS09OU0VLVkVOUzsgS8OWUiBmc2NrIE1BTlVFTExULlxuIgorIlx0KGQudi5zLiwgdXRhbiBmbGFnZ29ybmEgLWEgZWxsZXIgLXApXG4iCisKKyM6IGUyZnNjay91dGlsLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKK21zZ3N0ciAiQW52w6RudCBtaW5uZTogJWx1IGsvJWx1IGsgKCVsdSBrLyVsdSBrKSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1LCAiCittc2dzdHIgIkFudsOkbnQgbWlubmU6ICVsdSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorbXNnc3RyICJ0aWQ6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVsYXBzZWQgdGltZTogJTYuM2ZcbiIKK21zZ3N0ciAiZsO2cmZsdXRlbiB0aWQ6ICU2LjNmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDQ3IGUyZnNjay91dGlsLmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICJuw6RyIGlub2QgJWx1IGkgJXMgbMOkc3RlcyIKKworIzogZTJmc2NrL3V0aWwuYzo0NzUgZTJmc2NrL3V0aWwuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgIm7DpHIgaW5vZCAlbHUgaSAlcyBza3JldnMiCisKKyM6IGUyZnNjay91dGlsLmM6NjM3Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyB6ZXJvaXppbmcgYnVmZmVyIgorbXNnc3RyICJ2aWQgYWxsb2tlcmluZyBhdiBub2xsc3TDpGxsbmluZ3NidWZmZXJ0IgorCisjOiBlMmZzY2svdXRpbC5jOjc4NQorbXNnaWQgIiIKKyJVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k6IHRoZSBmaWxlc3lzdGVtIGlzIGJlaW5nIG1vZGlmaWVkIHdoaWxlIGZzY2sgaXMgIgorInJ1bm5pbmcuXG4iCittc2dzdHIgIk9Ww4ROVEFEIElOS09OU0lTVEVOUzogZmlsc3lzdGVtZXQgbW9kaWZpZXJhcyBtZWRhbiBmc2NrIGvDtnJzLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjcyCittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAia2xhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYiBibG9ja19zaXplXSBbLWkgaW5wdXRfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxvY2tzX2F0X29uY2VdIFstZCBkZWxheV9mYWN0b3JfYmV0d2Vlbl9yZWFkc10gWy1lICIKKyJtYXhfYmFkX2Jsb2Nrc11cbiIKKyIgICAgICAgWy1wIG51bV9wYXNzZXNdIFstdCB0ZXN0X3BhdHRlcm4gWy10IHRlc3RfcGF0dGVybiBbLi4uXV1dXG4iCisiICAgICAgIGRldmljZSBbbGFzdF9ibG9jayBbZmlyc3RfYmxvY2tdXVxuIgorbXNnc3RyICIiCisiQW52w6RuZG5pbmc6ICVzIFstYiBibG9ja3N0b3JsZWtdIFstaSBpbmZpbF0gWy1vIHV0ZmlsZV0gWy1zdnduZl1cbiIKKyIgICAgICAgICAgICBbLWMgYmxvY2tfw6V0X2fDpW5nZW5dIFstZCBmw7ZyZHLDtmpuaW5nc2Zha3RvciBtZWxsYW4gbMOkc25pbmdhcl1cbiIKKyIgICAgICAgICAgICBbLWUgbWF4X2TDpWxpZ2FfYmxvY2tdIFstcCBhbnRhbF9wYXNzXVxuIgorIiAgICAgICAgICAgIFstdCB0ZXN0bcO2bnN0ZXIgWy10IHRlc3Rtw7Zuc3RlciBbLi4uXV1dXG4iCisiICAgICAgICAgICAgZW5oZXQgW3Npc3RhX2Jsb2NrIFtmw7Zyc3RhX2Jsb2NrXV1cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBUaGUgLW4gYW5kIC13IG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzOiBGbGFnZ29ybmEgLW4gb2NoIC13IMOkciDDtm1zZXNpZGlndCB1dGVzbHV0YW5kZS5cbiIKKyJcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTYuMmYlJSBkb25lLCAlcyBlbGFwc2VkLiAoJWQvJWQvJWQgZXJyb3JzKSIKK21zZ3N0ciAiJTYuMmYgJSUga2xhciwgJXMgaGFyIGfDpXR0LiAoJWQvJWQvJWQgZmVsKSIKKworIzogbWlzYy9iYWRibG9ja3MuYzozMjgKK21zZ2lkICJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIKK21zZ3N0ciAiVGVzdGFyIG1lZCBzbHVtcG3Dtm5zdGVyOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzQ2Cittc2dpZCAiVGVzdGluZyB3aXRoIHBhdHRlcm4gMHgiCittc2dzdHIgIlRlc3RhciBtZWQgbcO2bnN0ZXIgMHgiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Mzc4IG1pc2MvYmFkYmxvY2tzLmM6NDUxCittc2dpZCAiZHVyaW5nIHNlZWsiCittc2dzdHIgInZpZCBzw7ZrbmluZyIKKworIzogbWlzYy9iYWRibG9ja3MuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIgorbXNnc3RyICJVbmRlcmxpZ3QgdsOkcmRlICglbGQpIGkgZG9fcmVhZFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ3NgorbXNnaWQgImR1cmluZyBleHQyZnNfc3luY19kZXZpY2UiCittc2dzdHIgInZpZCBleHQyZnNfc3luY19kZXZpY2UiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDk2IG1pc2MvYmFkYmxvY2tzLmM6NzU4Cittc2dpZCAid2hpbGUgYmVnaW5uaW5nIGJhZCBibG9jayBsaXN0IGl0ZXJhdGlvbiIKK21zZ3N0ciAidmlkIGLDtnJqYW4gYXYgaXRlcmF0aW9uIMO2dmVyIGxpc3RhIGF2IGTDpWxpZ2EgYmxvY2siCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTExIG1pc2MvYmFkYmxvY2tzLmM6NjExIG1pc2MvYmFkYmxvY2tzLmM6NzY5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBidWZmZXJzIgorbXNnc3RyICJ2aWQgYWxsb2tlcmluZyBhdiBidWZmZXJ0YXIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGJsb2NrcyAlbHUgdG8gJWx1XG4iCittc2dzdHIgIktvbnRyb2xsZXJhciBibG9jayAlbHUgdGlsbCAlbHVcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjAKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLW9ubHkgbW9kZVxuIgorbXNnc3RyICJMZXRhciBlZnRlciBkw6VsaWdhIGJsb2NrIGkgc2tyaXZza3lkZGF0IGzDpGdlXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTI5Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKHJlYWQtb25seSB0ZXN0KTogIgorbXNnc3RyICJMZXRhciBlZnRlciBkw6VsaWdhIGJsb2NrIChza3JpdnNreWRkYWQgdGVzdCk6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MzYgbWlzYy9iYWRibG9ja3MuYzo2NDMgbWlzYy9iYWRibG9ja3MuYzo2ODUKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODMyCittc2dpZCAiVG9vIG1hbnkgYmFkIGJsb2NrcywgYWJvcnRpbmcgdGVzdFxuIgorbXNnc3RyICJGw7ZyIG3DpW5nYSBkw6VsaWdhIGJsb2NrLCBhdmJyeXRlciB0ZXN0ZXRcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MTgKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiTGV0YXIgZWZ0ZXIgZMOlbGlnYSBibG9jayBpIGzDpHMtc2tyaXYtbMOkZ2VcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MjAgbWlzYy9iYWRibG9ja3MuYzo3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSBibG9jayAlbHUgdG8gJWx1XG4iCittc2dzdHIgIkZyw6VuIGJsb2NrICVsdSB0aWxsICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY3NQorbXNnaWQgIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIgorbXNnc3RyICJMw6RzZXIgb2NoIGrDpG1mw7ZyOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NzgxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJMZXRhciBlZnRlciBkw6VsaWdhIGJsb2NrIGkgaWNrZWbDtnJzdMO2cmFuZGUgbMOkcy1za3Jpdi1sw6RnZVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc4NworbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSB0ZXN0KVxuIgorbXNnc3RyICJMZXRhciBlZnRlciBkw6VsaWdhIGJsb2NrIChpY2tlZsO2cnN0w7ZyYW5kZSBsw6RzLXNrcml2LXRlc3QpXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzk0Cittc2dpZCAiIgorIlxuIgorIkludGVycnVwdCBjYXVnaHQsIGNsZWFuaW5nIHVwXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBdmJyb3R0IGbDpW5nYXQsIHJlbnNhciB1cHBcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyaW5nIHRlc3QgZGF0YSB3cml0ZSwgYmxvY2sgJWx1IgorbXNnc3RyICJ2aWQgdGVzdGRhdGFza3Jpdm5pbmcsIGJsb2NrICVsdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5OTggbWlzYy91dGlsLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQ7ICIKK21zZ3N0ciAiJXMgw6RyIG1vbnRlcmF0LCAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwMAorbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICJiYWRibG9ja3MgZnJhbXR2aW5nYXQgw6RuZMOlLiAgSG9wcGFzIC9ldGMvbXRhYiDDpHIgZmVsYWt0aWcuXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwNQorbXNnaWQgIml0J3Mgbm90IHNhZmUgdG8gcnVuIGJhZGJsb2NrcyFcbiIKK21zZ3N0ciAiZGV0IMOkciBpbnRlIHPDpGtlcnQgYXR0IGvDtnJhIGJhZGJsb2NrcyFcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDEwIG1pc2MvdXRpbC5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhcHBhcmVudGx5IGluIHVzZSBieSB0aGUgc3lzdGVtOyAiCittc2dzdHIgIiVzIGFudsOkbmRzIHVwcGVuYmFybGlnZW4gYXYgc3lzdGVtZXQ7ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDEzCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgImJhZGJsb2NrcyBmcmFtdHZpbmdhdCDDpG5kw6UuXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIC0gJXMiCittc2dzdHIgIm9naWx0aWcgJXMgLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBiaWcgbWF4IGJhZCBibG9ja3MgY291bnQgJXUgLSBtYXhpbXVtIGlzICV1IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRlc3RfcGF0dGVybiAtICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIGFsbG9rZXJhIG1pbm5lIGbDtnIgdGVzdG3Dtm5zdGVyIC0gJXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE4NAorbXNnaWQgIk1heGltdW0gb2Ygb25lIHRlc3RfcGF0dGVybiBtYXkgYmUgc3BlY2lmaWVkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJIw7Znc3QgZXR0IHRlc3Rtw7Zuc3RlciBmw6VyIGFuZ2VzIGkgc2tyaXZza3lkZGF0IGzDpGdlIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExOTAKK21zZ2lkICJSYW5kb20gdGVzdF9wYXR0ZXJuIGlzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJTbHVtcHZpcyB0ZXN0bcO2bnN0ZXIgw6RyIGludGUgdGlsbMOldGV0IGkgc2tyaXZza3lkZGF0IGzDpGdlIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMDQKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgbWFudWFsbHlcbiIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgYXZnw7ZyYSBlbmhldHNzdG9ybGVrOyBkdSBtw6VzdGUgYW5nZVxuIgorInN0b3JsZWtlbiBtYW51ZWxsdFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMTAKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIgorbXNnc3RyICJ2aWQgZsO2cnPDtmsgYXR0IGF2Z8O2cmEgZW5oZXRzc3RvcmxlayIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjE1Cittc2dpZCAibGFzdCBibG9jayIKK21zZ3N0ciAic2lzdGEgYmxvY2siCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIyMQorbXNnaWQgImZpcnN0IGJsb2NrIgorbXNnc3RyICJmw7Zyc3RhIGJsb2NrIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAoJWxsdSk6IG11c3QgYmUgbGVzcyB0aGFuICVsbHUiCittc2dzdHIgImZlbGFrdGlndCBzdGFydGJsb2NrICglbGx1KTogbcOlc3RlIHZhcmEgbWluZHJlIMOkbiAlbGx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBlbmQgYmxvY2sgKCVsbHUpOiBtdXN0IGJlIDMyLWJpdCB2YWx1ZSIKK21zZ3N0ciAiZmVsYWt0aWd0IHN0YXJ0YmxvY2sgKCVsbHUpOiBtw6VzdGUgdmFyYSBldHQgMzItYml0YXJzIHbDpHJkZSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjg3Cittc2dpZCAid2hpbGUgY3JlYXRpbmcgaW4tbWVtb3J5IGJhZCBibG9ja3MgbGlzdCIKK21zZ3N0ciAibsOkciBsaXN0YSDDtnZlciBkw6VsaWdhIGJsb2NrIGkgbWlubmV0IHNrYXBhZGVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyOTYKK21zZ2lkICJpbnB1dCBmaWxlIC0gYmFkIGZvcm1hdCIKK21zZ3N0ciAiaW5kYXRhZmlsIOKAlCBmZWxha3RpZ3QgZm9ybWF0IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEzMDQgbWlzYy9iYWRibG9ja3MuYzoxMzEzCittc2dpZCAid2hpbGUgYWRkaW5nIHRvIGluLW1lbW9yeSBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAibsOkciB0aWxsw6RnZyBnam9yZGVzIHRpbGwgbGlzdGEgaSBtaW5uZXQgw7Z2ZXIgZMOlbGlnYSBibG9jayBnam9yZGVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEzMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFzcyBjb21wbGV0ZWQsICV1IGJhZCBibG9ja3MgZm91bmQuICglZC8lZC8lZCBlcnJvcnMpXG4iCittc2dzdHIgIlBhc3MgYXZzbHV0YXQsICV1IGTDpWxpZ2EgYmxvY2sgaGl0dGFkZS4gKCVkLyVkLyVkIGZlbClcbiIKKworIzogbWlzYy9jaGF0dHIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmZdIFstKz1hQWNDZERlaWpzU3RUdV0gWy12IHZlcnNpb25dIGZpbGVzLi4uXG4iCittc2dzdHIgIkFudsOkbmRuaW5nOiAlcyBbLVJWZl0gWy0rPWFBY0NkRGVpanNTdFR1XSBbLXYgdmVyc2lvbl0gZmlsZXLigKZcbiIKKworIzogbWlzYy9jaGF0dHIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHZlcnNpb24gLSAlc1xuIgorbXNnc3RyICJmZWxha3RpZyB2ZXJzaW9uIC0gJXNcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyMDEgbWlzYy9sc2F0dHIuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHN0YXQgJXMiCittc2dzdHIgInZpZCBmw7Zyc8O2ayBhdHQgdGEgc3RhdHVzIHDDpSAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAidmlkIGzDpHNuaW5nIGF2IGZsYWdnb3IgcMOlICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIxMyBtaXNjL2NoYXR0ci5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncyBvZiAlcyBzZXQgYXMgIgorbXNnc3RyICJGbGFnZ29yIHDDpSAlcyBzYXR0YSBzb20gIgorCisjOiBtaXNjL2NoYXR0ci5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJ2aWQgc8OkdHRuaW5nIGF2IGZsYWdnb3IgcMOlICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uIG9mICVzIHNldCBhcyAlbHVcbiIKK21zZ3N0ciAiVmVyc2lvbiBhdiAlcyBzYXR0IHNvbSAlbHVcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJ2aWQgc8OkdHRuaW5nIGF2IHZlcnNpb24gcMOlICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjI2NworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIHBhdGggdmFyaWFibGUgaW4gY2hhdHRyX2Rpcl9wcm9jIgorbXNnc3RyICJLdW5kZSBpbnRlIGFsbG9rZXJhIHPDtmt2w6Rnc3ZhcmlhYmVsIGkgY2hhdHRyX2Rpcl9wcm9jIgorCisjOiBtaXNjL2NoYXR0ci5jOjMwNworbXNnaWQgIj0gaXMgaW5jb21wYXRpYmxlIHdpdGggLSBhbmQgK1xuIgorbXNnc3RyICI9IMOkciBpbmtvbXBhdGliZWx0IG1lZCAtIG9jaCArXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MzE1Cittc2dpZCAiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iCittc2dzdHIgIk3DpXN0ZSBhbnbDpG5kYSBcIi12XCIsID0sIC0gZWxsZXIgK1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08bnVtPl0gWy1vIGJsb2Nrc2l6ZT08bnVtPl0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJBbnbDpG5kbmluZzogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2NrPTxudW0+XSBbLW8gYmxvY2tzaXplPTxudW0+XSBlbmhldFxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTU5Cittc2dpZCAiYmxvY2tzIgorbXNnc3RyICJibG9jayIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE2OQorbXNnaWQgImNsdXN0ZXJzIgorbXNnc3RyICJrbHVzdGVyIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkdyb3VwICVsdTogKEJsb2NrcyAiCittc2dzdHIgIkdydXBwICVsdTogKEJsb2NrICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIENoZWNrc3VtIDB4JTA0eCIKK21zZ3N0ciAiICBLb250cm9sbHN1bW1hIDB4JTA0eCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKEVYUEVDVEVEIDB4JTA0eCkiCittc2dzdHIgIiAoMHglMDR4IEbDllJWw4ROVEFERVMpIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgdW51c2VkIGlub2RlcyAldVxuIgorbXNnc3RyICIsIG9hbnbDpG5kYSBpbm9kZXIgJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICVzIHN1cGVyYmxvY2sgYXQgIgorbXNnc3RyICIgICVzc3VwZXJibG9jayB2aWQgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE0Cittc2dpZCAiUHJpbWFyeSIKK21zZ3N0ciAiUHJpbcOkcnQgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE0Cittc2dpZCAiQmFja3VwIgorbXNnc3RyICJSZXNlcnYiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTgKK21zZ2lkICIsIEdyb3VwIGRlc2NyaXB0b3JzIGF0ICIKK21zZ3N0ciAiLCBHcnVwcGJlc2tyaXZhcmUgdmlkICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyMgorbXNnaWQgIiIKKyJcbiIKKyIgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBSZXNlcnZlcmFkZSBHRFQtYmxvY2sgdmlkICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyOQorbXNnaWQgIiBHcm91cCBkZXNjcmlwdG9yIGF0ICIKK21zZ3N0ciAiIEdydXBwYmVza3JpdmFyZSB2aWQgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM1Cittc2dpZCAiICBCbG9jayBiaXRtYXAgYXQgIgorbXNnc3RyICIgIEJsb2NrYml0a2FydGEgdmlkICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzOQorbXNnaWQgIiwgSW5vZGUgYml0bWFwIGF0ICIKK21zZ3N0ciAiLCBJbm9kc2JpdGthcnRhIHZpZCAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDMKK21zZ2lkICIiCisiXG4iCisiICBJbm9kZSB0YWJsZSBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgIElub2RzdGFiZWxsIHZpZCAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiAgJXUgZnJlZSAlcywgJXUgZnJlZSBpbm9kZXMsICV1IGRpcmVjdG9yaWVzJXMiCittc2dzdHIgIiIKKyJcbiIKKyIgICV1IGZyaXR0ICVzLCAldSBmcmlhIGlub2RlciwgJXUga2F0YWxvZ2VyJXMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAldSB1bnVzZWQgaW5vZGVzXG4iCittc2dzdHIgIiwgJXUgb2FudsOkbmRhIGlub2RlclxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU5Cittc2dpZCAiICBGcmVlIGJsb2NrczogIgorbXNnc3RyICIgIEZyaWEgYmxvY2s6ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI3NAorbXNnaWQgIiAgRnJlZSBpbm9kZXM6ICIKK21zZ3N0ciAiICBGcmlhIGlub2RlcjogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzEwCittc2dpZCAid2hpbGUgcHJpbnRpbmcgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgInZpZCB1dHNrcmlmdCBhdiBsaXN0YSDDtnZlciBkw6VsaWdhIGJsb2NrIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9ja3M6ICV1IgorbXNnc3RyICJEw6VsaWdhIGJsb2NrOiAldSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM0NSBtaXNjL3R1bmUyZnMuYzozNDcKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInZpZCBsw6RzbmluZyBhdiBqb3VybmFsaW5vZCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1MQorbXNnaWQgIndoaWxlIG9wZW5pbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAibsOkciBqb3VybmFsaW5vZGVuIMO2cHBuYWRlcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1NworbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlciBibG9jayIKK21zZ3N0ciAibsOkciBqb3VybmFsc3VwZXJibG9ja2V0IGzDpHN0ZXMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjQKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVyIGludmFsaWQhXG4iCittc2dzdHIgIkpvdXJuYWxzdXBlcmJsb2NrZXRzIG1hZ2lza2EgdGFsIGZlbGFrdGlndCFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2NworbXNnaWQgIkpvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAiCittc2dzdHIgIkpvdXJuYWxmdW5rdGlvbmVyOiAgICAgICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozODAKK21zZ2lkICJKb3VybmFsIHNpemU6ICAgICAgICAgICAgICIKK21zZ3N0ciAiSm91cm5hbHN0b3JsZWs6ICAgICAgICAgICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKK21zZ3N0ciAiIgorIkpvdXJuYWxsw6RuZ2Q6ICAgICAgICAgICAgICV1XG4iCisiSm91cm5hbHNla3ZlbnM6ICAgICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsc3RhcnQ6ICAgICAgICAgICAgICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBlcnJubzogICAgICAgICAgICAlZFxuIgorbXNnc3RyICJKb3VybmFsZmVsbnVtbWVyOiAgICAgICAgICVkXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MTUgbWlzYy90dW5lMmZzLmM6MTk2Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgInZpZCBsw6RzbmluZyBhdiBqb3VybmFsc3VwZXJibG9jayIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQyMworbXNnaWQgIkNvdWxkbid0IGZpbmQgam91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlcnMiCittc2dzdHIgIkt1bmRlIGludGUgaGl0dGEgam91cm5hbHN1cGVyYmxvY2tldHMgbWFnaXNrYSB0YWwiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgYmxvY2sgc2l6ZTogICAgICAgJXVcbiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBmaXJzdCBibG9jazogICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgbnVtYmVyIG9mIHVzZXJzOiAgJXVcbiIKK21zZ3N0ciAiIgorIlxuIgorIkpvdXJuYWxibG9ja3N0b3JsZWs6ICAgICAgJXVcbiIKKyJKb3VybmFsbMOkbmdkOiAgICAgICAgICAgICAldVxuIgorIkpvdXJuYWxlbnMgZsO2cnN0YSBibG9jazogICV1XG4iCisiSm91cm5hbHNla3ZlbnM6ICAgICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsc3RhcnQ6ICAgICAgICAgICAgICV1XG4iCisiSm91cm5hbGVucyBhbnbDpG5kYXJhbnRhbDogJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHVzZXJzOiAgICAgICAgICAgICVzXG4iCittc2dzdHIgIkpvdXJuYWxhbnbDpG5kYXJlOiAgICAgICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NTYgbWlzYy9ta2UyZnMuYzo3NDMgbWlzYy90dW5lMmZzLmM6MTIxMQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBvcHRpb25zIVxuIgorbXNnc3RyICJLdW5kZSBpbnRlIGFsbG9rZXJhIG1pbm5lIGbDtnIgYXR0IHRvbGthIGZsYWdnb3IhXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdXBlcmJsb2NrIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiT2dpbHRpZyBzdXBlcmJsb2NrcGFyYW1ldGVyOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiT2dpbHRpZyBibG9ja3N0b3JsZWtzcGFyYW1ldGVyOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgZXh0ZW5kZWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdXBlcmJsb2NrPTxzdXBlcmJsb2NrIG51bWJlcj5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvY2tzaXplPlxuIgorbXNnc3RyICIiCisiXG4iCisiRmVsYWt0aWdhIHV0w7ZrYWRlIGZsYWdnb3IgYW5naXZuYTogJXNcbiIKKyJcbiIKKyJVdMO2a2FkZSBmbGFnZ29yIHNlcGFyZXJhcyBtZWQga29tbWFuLCBvY2gga2FuIHRhIGV0dCBhcmd1bWVudCBzb20gYXZkZWxhcyAiCisibWVkXG4iCisiXHRldHQgbGlraGV0c3RlY2tlbiAoXCI9XCIpLlxuIgorIlxuIgorIkdpbHRpZ2EgdXTDtmthZGUgZmxhZ2dvciDDpHI6XG4iCisiXHRzdXBlcmJsb2NrPTxzdXBlcmJsb2NrbnVtbWVyPlxuIgorIlx0YmxvY2tzaXplPTxibG9ja3N0b3JsZWs+XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NjggbWlzYy9ta2UyZnMuYzoxNzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXNcbiIKK21zZ3N0ciAiXHRBbnbDpG5kZXIgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYwNiBtaXNjL2UyaW1hZ2UuYzoxNTgyIG1pc2MvdHVuZTJmcy5jOjIwNjAKKyM6IHJlc2l6ZS9tYWluLmM6MzE5Cittc2dpZCAiQ291bGRuJ3QgZmluZCB2YWxpZCBmaWxlc3lzdGVtIHN1cGVyYmxvY2suXG4iCittc2dzdHIgIkt1bmRlIGludGUgaGl0dGEgZ2lsdGlndCBmaWxzeXN0ZW1zc3VwZXJibG9jay5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICVzOiBlcnJvciByZWFkaW5nIGJpdG1hcHM6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogJXM6IGZlbCB2aWQgbMOkc25pbmcgYXYgYml0a2FydG9yOiAlc1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFsgLXJ8USBdIFsgLWZyIF0gZGV2aWNlIGltYWdlLWZpbGVcbiIKK21zZ3N0ciAiQW52w6RuZG5pbmc6ICVzIFsgLXJ8USBdIFsgLWZyIF0gZW5oZXQgYXZiaWxkc2ZpbFxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIC1JIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIiAgICAgICAgICAgICVzIC1JIGVuaGV0IGF2YmlsZHNmaWxcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgJXMgLXJhICBbICAtY2ZucCAgXSBbIC1vIHNyY19vZmZzZXQgXSBbIC1PIGRlc3Rfb2Zmc2V0IF0gc3JjX2ZzICIKKyJbIGRlc3RfZnMgXVxuIgorbXNnc3RyICIiCisiICAgICAgICVzIC1yYSAgWyAgLWNmbnAgIF0gWyAtbyBrw6RsbGF2c3TDpW5kIF0gWyAtTyBtw6VsYXZzdMOlbmQgXSBrw6RsbC1mcyAiCisiWyBtw6VsLWZzIF1cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY5IG1pc2MvZTJpbWFnZS5jOjU3NiBtaXNjL2UyaW1hZ2UuYzo1ODIKKyM6IG1pc2MvZTJpbWFnZS5jOjExNzgKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlciIKK21zZ3N0ciAidmlkIGFsbG9rZXJpbmcgYXYgYnVmZmVydCIKKworIzogbWlzYy9lMmltYWdlLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgYmxvY2sgJWxsdVxuIgorbXNnc3RyICJOw6RyIGJsb2NrICVsbHUgc2tyZXZzXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciB3cml0aW5nIGJsb2NrICVsbHUiCittc2dzdHIgImZlbCBuw6RyIGJsb2NrICVsbHUgc2tyZXZzIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxOTEKK21zZ2lkICJlcnJvciBpbiBnZW5lcmljX3dyaXRlKCkiCittc2dzdHIgImZlbCBpIGdlbmVyaWNfd3JpdGUoKSIKKworIzogbWlzYy9lMmltYWdlLmM6MjA4Cittc2dpZCAiRXJyb3I6IGhlYWRlciBzaXplIGlzIGJpZ2dlciB0aGFuIHdydF9zaXplXG4iCittc2dzdHIgIkZlbDogaHV2dWRzdG9ybGVrIMOkciBzdMO2cnJlIMOkbiB3cnRfc2l6ZVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMTMKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBoZWFkZXIgYnVmZmVyXG4iCittc2dzdHIgIkt1bmRlIGludGUgYWxsb2tlcmEgaHV2dWRidWZmZXJ0XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI0MQorbXNnaWQgIndoaWxlIHdyaXRpbmcgc3VwZXJibG9jayIKK21zZ3N0ciAidmlkIHNrcml2bmluZyBhdiBzdXBlcmJsb2NrIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNTAKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJ2aWQgc2tyaXZuaW5nIGF2IGlub2R0YWJlbGwiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI1OAorbXNnaWQgIndoaWxlIHdyaXRpbmcgYmxvY2sgYml0bWFwIgorbXNnc3RyICJ2aWQgc2tyaXZuaW5nIGF2IGJsb2NrYml0a2FydGEiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI2NgorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgYml0bWFwIgorbXNnc3RyICJ2aWQgc2tyaXZuaW5nIGF2IGlub2RiaXRrYXJ0YSIKKworIzogbWlzYy9lMmltYWdlLmM6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCByZWNfbGVuICglZClcbiIKK21zZ3N0ciAiVHJhc2lndCBrYXRhbG9nYmxvY2sgJWxsdTogZmVsYWt0aWcgcmVjX2xlbiAoJWQpXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjUxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IGRpcmVjdG9yeSBibG9jayAlbGx1OiBiYWQgbmFtZV9sZW4gKCVkKVxuIgorbXNnc3RyICJUcmFzaWd0IGthdGFsb2dibG9jayAlbGx1OiBmZWxha3RpZyBuYW1lX2xlbiAoJWQpXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGx1IC8gJWxsdSBibG9ja3MgKCVkJSUpIgorbXNnc3RyICIlbGx1IC8gJWxsdSBibG9jayAoJWQgJSUpIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1ODYgbWlzYy9lMmltYWdlLmM6NjI2Cittc2dpZCAiQ29weWluZyAiCittc2dzdHIgIktvcGllcmFyICIKKworIzogbWlzYy9lMmltYWdlLmM6NjIzCittc2dpZCAiIgorIlN0b3BwaW5nIG5vdyB3aWxsIGRlc3Ryb3kgdGhlIGZpbGVzeXN0ZW0sIGludGVycnVwdCBhZ2FpbiBpZiB5b3UgYXJlIHN1cmVcbiIKK21zZ3N0ciAiQXR0IHNsdXRhIG51IGtvbW1lciBmw7Zyc3TDtnJhIGZpbHN5c3RlbWV0LCBhdmJyeXQgaWdlbiBvbSBkdSDDpHIgc8Oka2VyXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgcmVtYWluaW5nIGF0ICUuMmYgTUIvcyIKK21zZ3N0ciAiICVzIMOldGVyc3TDpXIgbWVkICUuMmYgTUIvcyIKKworIzogbWlzYy9lMmltYWdlLmM6NjYxIG1pc2MvZTJpbWFnZS5jOjExODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBibG9jayAlbGx1IgorbXNnc3RyICJmZWwgbsOkciBibG9jayAlbGx1IGzDpHN0ZXMiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3BpZWQgJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSBpbiAlcyAiCittc2dzdHIgIktvcGllcmFkZSAlbGx1IC8gJWxsdSBibG9jayAoJWQgJSUpIHDDpSAlcyAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdCAlLjJmIE1CL3MiCittc2dzdHIgIm1lZCAlLjJmIE1CL3MiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjc1NQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgbDEgdGFibGUiCittc2dzdHIgIm7DpHIgbDEtdGFiZWxsIGFsbG9rZXJhZGVzIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo4MDAKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGwyIGNhY2hlIgorbXNnc3RyICJuw6RyIGwyLWNhY2hlIGFsbG9rZXJhZGVzIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo4MjMKK21zZ2lkICIiCisiV2FybmluZzogVGhlcmUgYXJlIHN0aWxsIHRhYmxlcyBpbiB0aGUgY2FjaGUgd2hpbGUgcHV0dGluZyB0aGUgY2FjaGUsIGRhdGEgIgorIndpbGwgYmUgbG9zdCBzbyB0aGUgaW1hZ2UgbWF5IG5vdCBiZSB2YWxpZC5cbiIKK21zZ3N0ciAiIgorIlZhcm5pbmc6IGRldCBmaW5ucyBmb3J0ZmFyYW5kZSB0YWJlbGxlciBpIGNhY2hlbiBtZWRhbnMgY2FjaGVuIHNrcml2cywgZGF0YSAiCisia29tbWVyIGfDpSBmw7ZybG9yYWRlIHPDpSBhdmJpbGRlbiBrb21tZXIga2Fuc2UgaW50ZSB2YXJhIGtvcnJla3QuXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjExNDUKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGV4dDJfcWNvdzJfaW1hZ2UiCittc2dzdHIgIm7DpHIgZXh0Ml9xY293Ml9pbWFnZSBhbGxva2VyYWRlcyIKKworIzogbWlzYy9lMmltYWdlLmM6MTE1MgorbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBleHQyX3Fjb3cyX2ltYWdlIgorbXNnc3RyICJuw6RyIGV4dDJfcWNvdzJfaW1hZ2UgaW5pdGllcmFkZXMiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyMTEgbWlzYy9lMmltYWdlLmM6MTIyOQorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yOiBtdWx0aXBsZSBzZXF1ZW50aWFsIHJlZmNvdW50IGJsb2NrcyBjcmVhdGVkIVxuIgorbXNnc3RyICIiCisiUHJvZ3JhbW1lcmluZ3NmZWw6IG11bHRpcGxhIHNla3ZlbnRpZWxsYSByZWZlcmVuc3LDpGtuYXJibG9jayBza2FwYWRlIVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjY5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgIm7DpHIgYmxvY2tiaXRrYXJ0YSBhbGxva2VyYWRlcyIKKworIzogbWlzYy9lMmltYWdlLmM6MTI3OAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgc2NyYW1ibGUgYmxvY2sgYml0bWFwIgorbXNnc3RyICJuw6RyIGbDtnJ2csOkbmdkIGJsb2NrYml0a2FydGEgYWxsb2tlcmFkZXMiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyODUKK21zZ2lkICJTY2FubmluZyBpbm9kZXMuLi5cbiIKK21zZ3N0ciAiU8O2a2VyIGlnZW5vbSBpbm9kZXIg4oCmXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyOTcKK21zZ2lkICJDYW4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIiCittc2dzdHIgIkthbiBpbnRlIGFsbG9rZXJhIGVuIGJsb2NrYnVmZmVydCIKKworIzogbWlzYy9lMmltYWdlLmM6MTMzNiBtaXNjL2UyaW1hZ2UuYzoxMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGl0ZXJhdGluZyBvdmVyIGlub2RlICV1IgorbXNnc3RyICJ2aWQgaXRlcmF0aW9uIMO2dmVyIGlub2QgJXUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzODEKK21zZ2lkICJSYXcgYW5kIHFjb3cyIGltYWdlcyBjYW5ub3QgYmUgaW5zdGFsbGVkIgorbXNnc3RyICJSYXctIG9jaCBxY293Mi1hdmJpbGRlciBrYW4gaW50ZSBpbnN0YWxsZXJhcyIKKworIzogbWlzYy9lMmltYWdlLmM6MTQwMworbXNnaWQgImVycm9yIHJlYWRpbmcgYml0bWFwcyIKK21zZ3N0ciAiZmVsIG7DpHIgYml0a2FydG9yIGzDpHN0ZXMiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MTUKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGRldmljZSBmaWxlIgorbXNnc3RyICJuw6RyIGVuaGV0c2ZpbCDDtnBwbmFkZXMiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MjYKK21zZ2lkICJ3aGlsZSByZXN0b3JpbmcgdGhlIGltYWdlIHRhYmxlIgorbXNnc3RyICJuw6RyIGF2YmlsZHN0YWJlbGxlbiDDpXRlcnN0w6RsbGRlcyIKKworIzogbWlzYy9lMmltYWdlLmM6MTUyMworbXNnaWQgIi1hIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIHdpdGggcmF3IG9yIFFDT1cyIGltYWdlcy4iCittc2dzdHIgImZsYWdnYW4gLWEga2FuIGVuZGFzdCBhbnbDpG5kYXMgbWVkIHJhdy0gZWxsZXIgUUNPVzItYXZiaWxkZXIuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTI5Cittc2dpZCAiT2Zmc2V0cyBhcmUgb25seSBhbGxvd2VkIHdpdGggcmF3IGltYWdlcy4iCittc2dzdHIgIkF2c3TDpW5kIMOkciBlbmRhc3QgdGlsbMOldG5hIG1lZCByYXctYXZiaWxkZXIuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTM0Cittc2dpZCAiTW92ZSBtb2RlIGlzIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIgorbXNnc3RyICJGbHl0dG5pbmdzbMOkZ2Ugw6RyIGVuZGFzdCB0aWxsw6V0ZXQgbWVkIHJhdy1hdmJpbGRlci4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MzkKK21zZ2lkICJNb3ZlIG1vZGUgcmVxdWlyZXMgYWxsIGRhdGEgbW9kZS4iCittc2dzdHIgIkZseXR0bmluZ3Nsw6RnZSBiZWjDtnZlciBsw6RnZXQgYWxsIGRhdGEuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTQ5Cittc2dpZCAiY2hlY2tpbmcgaWYgbW91bnRlZCIKK21zZ3N0ciAia29udHJvbGxlcmFyIG9tIG1vbnRlcmFkIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTU2Cittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgZTJpbWFnZSBvbiBhIFIvVyBtb3VudGVkIGZpbGVzeXN0ZW0gY2FuIHJlc3VsdCBpbiBhblxuIgorImluY29uc2lzdGVudCBpbWFnZSB3aGljaCB3aWxsIG5vdCBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiIKKyJVc2UgLWYgb3B0aW9uIGlmIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGF0LlxuIgorbXNnc3RyICIiCisiXG4iCisiQXR0IGvDtnJhIGUyaW1hZ2UgcMOlIGV0dCBmaWxzeXN0ZW0gbW9udGVyYXQgYsOlZGUgZsO2ciBza3Jpdm5pbmcgb2NoIGzDpHNuaW5nXG4iCisia2FuIHJlc3VsdGVyYSBpIGVuIGlua29uc2lzdGVudCBhdmJpbGQgc29tIGludGUga29tbWVyIHZhcmEgYW52w6RuZGJhciBmw7ZyXG4iCisiZmVsc8O2a25pbmdzw6RuZGFtw6VsLiAgQW52w6RuZCBmbGFnZ2FuIC1mIG9tIGR1IHZlcmtsaWdlbiB2aWxsIGfDtnJhIGRldC5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYwOAorbXNnaWQgIlFDT1cyIGltYWdlIGNhbiBub3QgYmUgd3JpdHRlbiB0byB0aGUgc3Rkb3V0IVxuIgorbXNnc3RyICJFbiBRQ09XMi1hdmJpbGQga2FuIGludGUgc2tyaXZhcyB0aWxsIHN0YW5kYXJkIHV0IVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjE0Cittc2dpZCAiQ2FuIG5vdCBzdGF0IG91dHB1dFxuIgorbXNnc3RyICJLYW4gaW50ZSB0YSBzdGF0dXMgcMOlIHV0ZGF0YVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkltYWdlICglcykgaXMgY29tcHJlc3NlZFxuIgorbXNnc3RyICJBdmJpbGRlbiAoJXMpIMOkciBrb21wcmltZXJhZFxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkltYWdlICglcykgaXMgZW5jcnlwdGVkXG4iCittc2dzdHIgIkF2YmlsZGVuICglcykgw6RyIGtyeXB0ZXJhZFxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjb252ZXJ0IHFjb3cyIGltYWdlICglcykgaW50byByYXcgaW1hZ2UgKCVzKSIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCBrb252ZXJ0ZXJhIGVuIHFjb3cyLWJpbGQgKCVzKSB0aWxsIGVuIHLDpSBiaWxkICglcykiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MzkKK21zZ2lkICJUaGUgLWMgb3B0aW9uIG9ubHkgc3VwcG9ydGVkIGluIHJhdyBtb2RlXG4iCittc2dzdHIgIkZsYWdnYW4gLWMgc3TDtmRqcyBlbmRhc3QgaSByYXctbMOkZ2VcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY0NAorbXNnaWQgIlRoZSAtYyBvcHRpb24gbm90IHN1cHBvcnRlZCB3aGVuIHdyaXRpbmcgdG8gc3Rkb3V0XG4iCittc2dzdHIgIkZsYWdnYW4gLWMgc3TDtmRqcyBpbnRlIHZpZCBza3Jpdm5pbmcgdGlsbCBzdGFuZGFyZCB1dFxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjUxCittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBjaGVja19idWYiCittc2dzdHIgIm7DpHIgY2hlY2tfYnVmIGFsbG9rZXJhZGVzIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjU3Cittc2dpZCAiVGhlIC1wIG9wdGlvbiBvbmx5IHN1cHBvcnRlZCBpbiByYXcgbW9kZVxuIgorbXNnc3RyICJGbGFnZ2FuIC1wIHN0w7ZkanMgZW5kYXN0IGkgcmF3LWzDpGdlXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxvY2tzIGFscmVhZHkgY29udGFpbmVkIHRoZSBkYXRhIHRvIGJlIGNvcGllZFxuIgorbXNnc3RyICIlZCBibG9jayBpbm5laMO2bGwgcmVkYW4gZGUgZGF0YSBzb20gc2t1bGxlIGtvcGllcmFzXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBvcGVuICVzXG4iCittc2dzdHIgImUybGFiZWw6IGthbiBpbnRlIMO2cHBuYSAlc1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGthbiBpbnRlIHPDtmthIHRpbGwgc3VwZXJibG9ja1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciByZWFkaW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogZmVsIHZpZCBsw6RzbmluZyBhdiBzdXBlcmJsb2NrXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IG5vdCBhbiBleHQyIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiZTJsYWJlbDogaW50ZSBldHQgZXh0Mi1maWxzeXN0ZW1cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6OTcgbWlzYy90dW5lMmZzLmM6MjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBsYWJlbCB0b28gbG9uZywgdHJ1bmNhdGluZy5cbiIKK21zZ3N0ciAiVmFybmluZzogZXRpa2V0dCBmw7ZyIGzDpW5nLCBhdmtvcnRhci5cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2sgYWdhaW5cbiIKK21zZ3N0ciAiZTJsYWJlbDoga2FuIGludGUgc8O2a2EgdGlsbCBzdXBlcmJsb2NrIGlnZW5cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHdyaXRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBmZWwgdmlkIHNrcml2bmluZyBhdiBzdXBlcmJsb2NrXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjExNyBtaXNjL3R1bmUyZnMuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGUybGFiZWwgZGV2aWNlIFtuZXdsYWJlbF1cbiIKK21zZ3N0ciAiQW52w6RuZG5pbmc6IGUybGFiZWwgZW5oZXQgW255LWV0aWtldHRdXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIDx0cmFuc2FjdGlvbiBmaWxlPiA8ZmlsZXN5c3RlbT5cbiIKK21zZ3N0ciAiQW52w6RuZG5pbmc6ICVzIDx0cmFuc2FrdGlvbnNmaWw+IDxmaWxzeXN0ZW0+XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NTIKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIGF0dCBsw6RzYSBmaWxzeXN0ZW1kYXRhIFxuIgorCisjOiBtaXNjL2UydW5kby5jOjYyIG1pc2MvZTJ1bmRvLmM6ODMgbWlzYy9lMnVuZG8uYzoxMDggbWlzYy9lMnVuZG8uYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9mZXRjaCAlc1xuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIHRkYl9mZXRjaCAlc1xuIgorCisjOiBtaXNjL2UydW5kby5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBNb3VudCB0aW1lIGRpZG4ndCBtYXRjaCAldVxuIgorbXNnc3RyICJGaWxzeXN0ZW1ldHMgbW9udGVyaW5ncyB0aWQgc3TDpG1tZXIgaW50ZSBtZWQgJXVcbiIKKworIzogbWlzYy9lMnVuZG8uYzo4OQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBVVUlEIGRpZG4ndCBtYXRjaCBcbiIKK21zZ3N0ciAiRmlsc3lzdGVtZXRzIFVVSUQgc3TDpG1tZXIgaW50ZSBtZWQgXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfb3BlbiAlc1xuIgorbXNnc3RyICJ0ZGJfb3BlbiBtaXNzbHlja2FkZXMgJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICJGZWwgbsOkciBkZXQgYXZnam9yZGVzIG9tICVzIMOkciBtb250ZXJhdC5cbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNzUKK21zZ2lkICJlMnVuZG8gc2hvdWxkIG9ubHkgYmUgcnVuIG9uIHVubW91bnRlZCBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICJlMnVuZG8gc2thbGwgZW5kYXN0IGvDtnJhcyBww6Ugb21vbnRlcmFkZSBmaWxzeXN0ZW1cbiIKKworIzogbWlzYy9lMnVuZG8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXNcbiIKK21zZ3N0ciAiRGV0IGdpY2sgaW50ZSBhdHQgw7ZwcG5hIMO2cHBuYSAlc1xuIgorCisjOiBtaXNjL2UydW5kby5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBsYXllZCB0cmFuc2FjdGlvbiBvZiBzaXplICV6ZCBhdCBsb2NhdGlvbiAlbGx1XG4iCittc2dzdHIgIsOFdGVydXBwc3BlbG5pbmcgYXYgdHJhbnNha3Rpb24gbWVkIHN0b3JsZWsgJXpkIHDDpSBwbGF0cyAlbGx1XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB3cml0ZSAlc1xuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgc2tyaXZhICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBjb3VsZG4ndCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJWQVJOSU5HOiBrdW5kZSBpbnRlIMO2cHBuYSAlczogJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGJhZCBmb3JtYXQgb24gbGluZSAlZCBvZiAlc1xuIgorbXNnc3RyICJWQVJOSU5HOiBmZWwgZm9ybWF0IHDDpSByYWQgJWQgYXYgJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzcwCittc2dpZCAiIgorIldBUk5JTkc6IFlvdXIgL2V0Yy9mc3RhYiBkb2VzIG5vdCBjb250YWluIHRoZSBmc2NrIHBhc3Nub1xuIgorIlx0ZmllbGQuICBJIHdpbGwga2x1ZGdlIGFyb3VuZCB0aGluZ3MgZm9yIHlvdSwgYnV0IHlvdVxuIgorIlx0c2hvdWxkIGZpeCB5b3VyIC9ldGMvZnN0YWIgZmlsZSBhcyBzb29uIGFzIHlvdSBjYW4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJWQVJOSU5HOiBEaW4gL2V0Yy9mc3RhYiBpbm5laMOlbGxlciBpbnRlIGZzY2stcGFzc25yLWbDpGx0ZXQuXG4iCisiXHRKYWcgZml4YXIgbWlnIGbDtnJiaSBkZXR0YSDDpXQgZGlnLCBtZW4gZHVcbiIKKyJcdGLDtnIgcsOkdHRhIGRpbiAvZXRjL2ZzdGFiLWZpbCBzw6Ugc25hcnQgZHUga2FuLlxuIgorIlxuIgorCisjOiBtaXNjL2ZzY2suYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogJXM6IG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiAlczogaW50ZSBmdW5uZW5cbiIKKworIzogbWlzYy9mc2NrLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YWl0OiBObyBtb3JlIGNoaWxkIHByb2Nlc3M/IT9cbiIKK21zZ3N0ciAiJXM6IHdhaXQ6IEluZ2EgZmxlciBiYXJucHJvY2Vzc2VyPyE/XG4iCisKKyM6IG1pc2MvZnNjay5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nLi4uICVzIGZvciBkZXZpY2UgJXMgZXhpdGVkIHdpdGggc2lnbmFsICVkLlxuIgorbXNnc3RyICJWYXJuaW5nLi4uICVzIGbDtnIgZW5oZXQgJXMgYXZzbHV0YWRlIG1lZCBzaWduYWwgJWQuXG4iCisKKyM6IG1pc2MvZnNjay5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlczogc3RhdHVzIGlzICV4LCBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIgorbXNnc3RyICIlcyAlczogc3RhdHVzIMOkciAleCwgc2t1bGxlIGFsZHJpZyBpbnRyw6RmZmEuXG4iCisKKyM6IG1pc2MvZnNjay5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5pc2hlZCB3aXRoICVzIChleGl0IHN0YXR1cyAlZClcbiIKK21zZ3N0ciAiQXZzbHV0YWRlIG1lZCAlcyAoc2x1dHN0YXR1cyAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6NzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBFcnJvciAlZCB3aGlsZSBleGVjdXRpbmcgZnNjay4lcyBmb3IgJXNcbiIKK21zZ3N0ciAiJXM6IEZlbCAlZCBuw6RyIGZzY2suJXMga8O2cmRlcyBmw7ZyICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjc0MgorbXNnaWQgIiIKKyJFaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlIGZpbGVzeXN0ZW0gdHlwZXMgcGFzc2VkIHRvIC10IG11c3QgYmUgcHJlZml4ZWRcbiIKKyJ3aXRoICdubycgb3IgJyEnLlxuIgorbXNnc3RyICIiCisiQW50aW5nZW4gYWxsYSBlbGxlciBpbmdhIGF2IGZpbHN5c3RlbXN0eXBlcm5hIHNvbSBnZXMgdGlsbCAtdCBtw6VzdGUgaGFcbiIKKyJwcmVmaXggXCJub1wiIGVsbGVyIFwiIVwiLlxuIgorCisjOiBtaXNjL2ZzY2suYzo3NjEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGVzeXN0ZW0gdHlwZXNcbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBhbGxva2VyYSBtaW5uZSBmw7ZyIGZpbHN5c3RlbXR5cGVyXG4iCisKKyM6IG1pc2MvZnNjay5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IHNraXBwaW5nIGJhZCBsaW5lIGluIC9ldGMvZnN0YWI6IGJpbmQgbW91bnQgd2l0aCBub256ZXJvIGZzY2sgcGFzcyAiCisibnVtYmVyXG4iCittc2dzdHIgIiIKKyIlczogaG9wcGFyIMO2dmVyIGZlbGFrdGlnIHJhZCBpIC9ldGMvZnN0YWI6IGJpbmQtbW9udGVyaW5nIG1lZCBmc2NrLSIKKyJwYXNzbnVtbWVyIHNvbSBpbnRlIMOkciBub2xsXG4iCisKKyM6IG1pc2MvZnNjay5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiBjYW5ub3QgY2hlY2sgJXM6IGZzY2suJXMgbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6IGthbiBpbnRlIGtvbnRyb2xsZXJhICVzOiBmc2NrLiVzIGZpbm5zIGludGVcbiIKKworIzogbWlzYy9mc2NrLmM6OTY3Cittc2dpZCAiQ2hlY2tpbmcgYWxsIGZpbGUgc3lzdGVtcy5cbiIKK21zZ3N0ciAiS29udHJvbGxlcmFyIGFsbGEgZmlsc3lzdGVtLlxuIgorCisjOiBtaXNjL2ZzY2suYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIi0td2FpdGluZy0tIChwYXNzICVkKVxuIgorbXNnc3RyICItLXbDpG50YXItLSAocGFzcyAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6MTA3OAorbXNnaWQgIiIKKyJVc2FnZTogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGZzdHlwZV0gW2ZzLW9wdGlvbnNdIFtmaWxlc3lzIC4uLl1cbiIKK21zZ3N0ciAiIgorIkFudsOkbmRuaW5nOiBmc2NrIFstQU1OUFJUVl0gWyAtQyBbIGZoIF0gXSBbLXQgZnN0eXBdIFtmcy1mbGFnZ29yXSAiCisiW2ZpbHN5cyAuLi5dXG4iCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiJXM6IGbDtnIgbcOlbmdhIGVuaGV0ZXJcbiIKKworIzogbWlzYy9mc2NrLmM6MTE1MyBtaXNjL2ZzY2suYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiJXM6IGbDtnIgbcOlbmdhIGFyZ3VtZW50XG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZhZGx2XSBbZmlsZXMuLi5dXG4iCittc2dzdHIgIkFudsOkbmRuaW5nOiAlcyBbLVJWYWRsdl0gW2ZpbGVyLi4uXVxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIlZpZCBsw6RzbmluZyBhdiBmbGFnZ29yIHDDpSAlcyIKKworIzogbWlzYy9sc2F0dHIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIlZpZCBsw6RzbmluZyBhdiB2ZXJzaW9uIHDDpSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSBbLUMgY2x1c3Rlci1zaXplXVxuIgorIlx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIGlub2RlLXNpemVdIFstSiBqb3VybmFsLW9wdGlvbnNdXG4iCisiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKyJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisiXHRbLWcgYmxvY2tzLXBlci1ncm91cF0gWy1MIHZvbHVtZS1sYWJlbF0gWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG4iCisiXHRbLU8gZmVhdHVyZVssLi4uXV0gWy1yIGZzLXJldmlzaW9uXSBbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXVxuIgorIlx0Wy10IGZzLXR5cGVdIFstVCB1c2FnZS10eXBlIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSBkZXZpY2UgW2Jsb2Nrcy0iCisiY291bnRdXG4iCittc2dzdHIgIiIKKyJBbnbDpG5kbmluZzogJXMgWy1jfC1sIGZpbG5hbW5dIFstYiBibG9ja3N0b3JsZWtdIFstQyBrbHVzdGVyc3Rvcmxla11cbiIKKyJcdFstaSBieXRlLXBlci1pbm9kXSBbLUkgaW5vZHN0b3JsZWtdIFstSiBqb3VybmFsZmxhZ2dvcl1cbiIKKyJcdFstRyBmbGV4Z3J1cHBzdG9ybGVrXSBbLU4gYW50YWwtaW5vZGVyXVxuIgorIlx0Wy1tIHJlc2VydmFkZS1ibG9jay1wcm9jZW50XSBbLW8gc2thcGFyLW9zXVxuIgorIlx0Wy1nIGJsb2NrLXBlci1ncnVwcF0gWy1MIHZvbHltZXRpa2V0dF0gWy1NIHNlbmFzdC1tb250ZXJhZC1rYXRhbG9nXVxuIgorIlx0Wy1PIGZ1bmt0aW9uWywuLi5dXSBbLXIgZnMtcmV2aXNpb25dIFstRSB1dMO2a2FkLWZsYWdnYVssLi4uXV1cbiIKKyJcdFstdCBmcy10eXBdIFstVCBhbnbDpG5kbmluZ3N0eXBdIFstVSBVVUlEXSBbLWpucXZERktTVl0gZW5oZXQgW2Jsb2NrYW50YWxdXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgY29tbWFuZDogJXNcbiIKK21zZ3N0ciAiS8O2ciBrb21tYW5kbzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJ1biAnJXMnIgorbXNnc3RyICJ2aWQgZsO2cnPDtmsgYXR0IGvDtnJhIFwiJXNcIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjMKK21zZ2lkICJ3aGlsZSBwcm9jZXNzaW5nIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIHByb2dyYW0iCittc2dzdHIgInZpZCBiZWFyYmV0bmluZyBhdiBsaXN0YSDDtnZlciBkw6VsaWdhIGJsb2NrIGZyw6VuIHByb2dyYW0iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVkIGluIHByaW1hcnkgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9yIGFyZWEgYmFkLlxuIgorbXNnc3RyICJCbG9jayAlZCBpIHByaW3DpHIgc3VwZXJibG9jay0vZ3J1cHBiZXNrcml2YXJlIMOkciBmZWxha3RpZ3QuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrcyAldSB0aHJvdWdoICV1IG11c3QgYmUgZ29vZCBpbiBvcmRlciB0byBidWlsZCBhIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIkJsb2NrICV1IHRpbGwgJXUgbcOlc3RlIHZhcmEgYnJhIGbDtnIgYXR0IGJ5Z2dhIGV0dCBmaWxzeXN0ZW0uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjk1Cittc2dpZCAiQWJvcnRpbmcuLi4uXG4iCittc2dzdHIgIkF2YnJ5dGVyLi4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB0aGUgYmFja3VwIHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvcnMgYXQgYmxvY2sgJXUgY29udGFpblxuIgorIlx0YmFkIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlZhcm5pbmc6IHJlc2VydnN1cGVyYmxvY2stLy1ncnVwcGJlc2tyaXZhcmUgdmlkIGJsb2NrICV1IGlubmVow6VsbGVyXG4iCisiXHRkw6VsaWdhIGJsb2NrLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjMzNAorbXNnaWQgIndoaWxlIG1hcmtpbmcgYmFkIGJsb2NrcyBhcyB1c2VkIgorbXNnc3RyICJ2aWQgbWFya2VyaW5nIGF2IGTDpWxpZ2EgYmxvY2sgc29tIGFudsOkbmRhIgorCisjOiBtaXNjL21rZTJmcy5jOjM4NgorbXNnaWQgIldyaXRpbmcgaW5vZGUgdGFibGVzOiAiCittc2dzdHIgIlNrcml2ZXIgaW5vZHN0YWJlbGxlcjogIgorCisjOiBtaXNjL21rZTJmcy5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IHdyaXRlICVkIGJsb2NrcyBpbiBpbm9kZSB0YWJsZSBzdGFydGluZyBhdCAlbGx1OiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiS3VuZGUgaW50ZSBza3JpdmEgJWQgYmxvY2sgaSBpbm9kc3RhYmVsbCBzb20gYsO2cmphciB2aWQgJWxsdTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0MjEgbWlzYy9ta2UyZnMuYzoyNDc5IG1pc2MvbWtlMmZzLmM6Mjc2NAorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgImtsYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDMyCittc2dpZCAid2hpbGUgY3JlYXRpbmcgcm9vdCBkaXIiCittc2dzdHIgInZpZCBza2FwYW5kZSBhdiByb3RrYXRhbG9nIgorCisjOiBtaXNjL21rZTJmcy5jOjQzOQorbXNnaWQgIndoaWxlIHJlYWRpbmcgcm9vdCBpbm9kZSIKK21zZ3N0ciAidmlkIGzDpHNuaW5nIGF2IHJvdGlub2QiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDUxCittc2dpZCAid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIKK21zZ3N0ciAidmlkIGluc3TDpGxsbmluZyBhdiByb3Rpbm9kZW5zIMOkZ2Fyc2thcCIKKworIzogbWlzYy9ta2UyZnMuYzo0NjkKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyAvbG9zdCtmb3VuZCIKK21zZ3N0ciAidmlkIHNrYXBhbmRlIGF2IC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQ3NgorbXNnaWQgIndoaWxlIGxvb2tpbmcgdXAgL2xvc3QrZm91bmQiCittc2dzdHIgInZpZCBzw7ZrbmluZyBlZnRlciAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0ODkKK21zZ2lkICJ3aGlsZSBleHBhbmRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgInZpZCB1dHZpZGduaW5nIGF2IC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjUwNAorbXNnaWQgIndoaWxlIHNldHRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICJ2aWQgaW5zdMOkbGxuaW5nIGF2IGlub2QgZsO2ciBkw6VsaWdhIGJsb2NrIgorCisjOiBtaXNjL21rZTJmcy5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJPdXQgb2YgbWVtb3J5IGVyYXNpbmcgc2VjdG9ycyAlZC0lZFxuIgorbXNnc3RyICJTbHV0IHDDpSBtaW5uZSB2aWQgcmFkZXJpbmcgYXYgc2VrdG9yZXIgJWQtJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgYmxvY2sgMDogJXNcbiIKK21zZ3N0ciAiVmFybmluZzoga3VuZGUgaW50ZSBsw6RzYSBibG9jayAwOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgZXJhc2Ugc2VjdG9yICVkOiAlc1xuIgorbXNnc3RyICJWYXJuaW5nOiBrdW5kZSBpbnRlIHJhZGVyYSBzZWt0b3IgJWQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTczCittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAidmlkIGluaXRpZXJpbmcgYXYgam91cm5hbHN1cGVyYmxvY2siCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgxCittc2dpZCAiWmVyb2luZyBqb3VybmFsIGRldmljZTogIgorbXNnc3RyICJOb2xsc3TDpGxsZXIgam91cm5hbGVuaGV0OiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgam91cm5hbCBkZXZpY2UgKGJsb2NrICVsbHUsIGNvdW50ICVkKSIKK21zZ3N0ciAidmlkIG5vbGxzdMOkbGxuaW5nIGF2IGpvdXJuYWxlbmhldCAoYmxvY2sgJWxsdSwgYW50YWwgJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjYxMQorbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJ2aWQgc2tyaXZuaW5nIGF2IGpvdXJuYWxzdXBlcmJsb2NrIgorCisjOiBtaXNjL21rZTJmcy5jOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBmaWxlc3lzdGVtIHdpdGggJWxsdSAlZGsgYmxvY2tzIGFuZCAldSBpbm9kZXNcbiIKK21zZ3N0ciAiU2thcGFyIGV0dCBmaWxzeXN0ZW0gbWVkICVsbHUgJWQgay1ibG9jayBvY2ggJXUgaW5vZGVyXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3YXJuaW5nOiAlbGx1IGJsb2NrcyB1bnVzZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJ2YXJuaW5nOiAlbGx1IGJsb2NrIG9hbnbDpG5kYS5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBsYWJlbD0lc1xuIgorbXNnc3RyICJGaWxzeXN0ZW1zZXRpa2V0dD0lc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJPUyB0eXBlOiAlc1xuIgorbXNnc3RyICJPUy10eXA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiQmxvY2tzdG9ybGVrPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsdXN0ZXIgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJLbHVzdGVyc3Rvcmxlaz0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGcmFnbWVudCBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIkZyYWdtZW50c3Rvcmxlaz0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJTdHJpZGU9JXUgYmxvY2tzLCBTdHJpcGUgd2lkdGg9JXUgYmxvY2tzXG4iCittc2dzdHIgIktsaXY9JXUgYmxvY2ssIHJlbXN2aWRkPSV1IGJsb2NrXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcywgJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXUgaW5vZGVyLCAlbGx1IGJsb2NrXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsbHUgYmxvY2tzICglMi4yZiUlKSByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIHVzZXJcbiIKK21zZ3N0ciAiJWxsdSBibG9jayAoJTIuMmYlJSkgcmVzZXJ2ZXJhZGUgZsO2ciBzdXBlcmFudsOkbmRhcmVuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0IGRhdGEgYmxvY2s9JXVcbiIKK21zZ3N0ciAiRsO2cnN0YSBkYXRhYmxvY2s9JXVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUm9vdCBkaXJlY3Rvcnkgb3duZXI9JXU6JXVcbiIKK21zZ3N0ciAiUm90a2F0YWxvZ8OkZ2FyZT0ldToldVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGZpbGVzeXN0ZW0gYmxvY2tzPSVsdVxuIgorbXNnc3RyICJNYXhpbWFsdCBhbnRhbCBmaWxzeXN0ZW1zYmxvY2s9JWx1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3Vwc1xuIgorbXNnc3RyICIldSBibG9ja2dydXBwZXJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgYmxvY2tncnVwcFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBjbHVzdGVycyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgYmxvY2sgcGVyIGdydXBwLCAldSBrbHVzdGVyIHBlciBncnVwcFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBmcmFnbWVudHMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGJsb2NrIHBlciBncnVwcCwgJXUgZnJhZ21lbnQgcGVyIGdydXBwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgaW5vZGVyIHBlciBncnVwcFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIFVVSUQ6ICVzXG4iCittc2dzdHIgIkZpbHN5c3RlbXMtVVVJRDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2ODkKK21zZ2lkICJTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogIgorbXNnc3RyICJTdXBlcmJsb2Nra29waW9yIGxhZ3JhZGUgcMOlIGJsb2NrOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6NzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzICctTyA2NGJpdCdcbiIKK21zZ3N0ciAiJXMgZsO2cnV0c8OkdHRlciDigJ0tTyA2NGJpdOKAnVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgYmVmb3JlICdyZXNpemU9JXUnXG4iCittc2dzdHIgIuKAnSVz4oCdIG3DpXN0ZSBrb21tYSBmw7ZyZSDigJ1yZXNpemU9JXXigJ1cbiIKKworIzogbWlzYy9ta2UyZnMuYzo3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkZXNjX3NpemU6ICclcydcbiIKK21zZ3N0ciAiT2dpbHRpZyBkZXNjX3NpemU6IOKAnSVz4oCdXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2Zmc2V0OiAlc1xuIgorbXNnc3RyICJPZ2lsdGlndCBhdnN0w6VuZDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MTIgbWlzYy90dW5lMmZzLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCittc2dzdHIgIk9naWx0aWd0IG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgIyBvZiBiYWNrdXAgc3VwZXJibG9ja3M6ICVzXG4iCittc2dzdHIgIk9naWx0aWd0IGFudGFsIHN1cGVyYmxvY2tza29waW9yOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg0OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIk9naWx0aWcgc3RyaWRlLXBhcmFtZXRlcjogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpcGUtd2lkdGggcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJPZ2lsdGlnIHJlbXNicmVkZHNwYXJhbWV0ZXI6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmVzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiT2dpbHRpZyBzdG9ybGVrc8OkbmRyaW5nc3BhcmFtZXRlcjogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4OTMKK21zZ2lkICJUaGUgcmVzaXplIG1heGltdW0gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGZpbGVzeXN0ZW0gc2l6ZS5cbiIKK21zZ3N0ciAiIgorIlN0b3JsZWtzw6RuZHJpbmdlbnMgbWF4aW11bSBtw6VzdGUgdmFyYSBzdMO2cnJlIMOkbiBmaWxzeXN0ZW1ldHMgc3Rvcmxlay5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MTcKK21zZ2lkICJPbi1saW5lIHJlc2l6aW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIlN0b3JsZWtzw6RuZHJpbmcgdW5kZXIgZHJpZnQgc3TDtmRzIGludGUgbWVkIHJldmlzaW9uIDAtZmlsc3lzdGVtXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTQ0IG1pc2MvbWtlMmZzLmM6OTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcm9vdF9vd25lcjogJyVzJ1xuIgorbXNnc3RyICJPZ2lsdGlnIHJvdMOkZ2FyZTog4oCdJXPigJ1cbiIKKworIzogbWlzYy9ta2UyZnMuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBxdW90YXR5cGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJPZ2lsdGlnIHF1b3RhdHlwZS1wYXJhbWV0ZXI6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRtbXBfdXBkYXRlX2ludGVydmFsPTxpbnRlcnZhbD5cbiIKKyJcdG51bV9iYWNrdXBfc2I9PDB8MXwyPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGRhdGEgY2h1bmsgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqIGRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0b2Zmc2V0PTxvZmZzZXQgdG8gY3JlYXRlIHRoZSBmaWxlIHN5c3RlbT5cbiIKKyJcdHJlc2l6ZT08cmVzaXplIG1heGltdW0gc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRwYWNrZWRfbWV0YV9ibG9ja3M9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRyb290X3VpZD08dWlkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0cm9vdF9naWQ9PGdpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdGRpc2NhcmRcbiIKKyJcdG5vZGlzY2FyZFxuIgorIlx0cXVvdGF0eXBlPTx1c3IgT1IgZ3JwPlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiRmVsYWt0aWdhIGZsYWdnb3IgYW5naXZuYTogJXNcbiIKKyJcbiIKKyJVdMO2a2FkZSBmbGFnZ29yIHNlcGFyZXJhcyBtZWQga29tbWFuLCBvY2gga2FuIHRhIGV0dCBhcmd1bWVudCBzb20gYXZkZWxhcyAiCisibWVkXG4iCisiXHRldHQgbGlraGV0c3RlY2tlbiAo4oCdPeKAnSkuXG4iCisiXG4iCisiR2lsdGlnYSB1dMO2a2FkZSBmbGFnZ29yIMOkcjpcbiIKKyJcdG1tcF91cGRhdGVfaW50ZXJ2YWw9PGludGVydmFsbD5cbiIKKyJcdG51bV9iYWNrdXBfc2I9PDB8MXwyPlxuIgorIlx0c3RyaWRlPTxSQUlELWRhdGFzdHlja2VuIHBlciBkaXNrIGkgYmxvY2s+XG4iCisiXHRzdHJpcGUtd2lkdGg9PFJBSUQta2xpdiDCtyBkYXRhZGlza2FyIGkgYmxvY2s+XG4iCisiXHRvZmZzZXQ9PGF2c3TDpW5kIGF0dCBza2FwYSBmaWxzeXN0ZW1ldCBww6U+XG4iCisiXHRyZXNpemU9PG1heGltYWwgc3Rvcmxla3PDpG5kcmluZ3NzdG9ybGVrIGkgYmxvY2s+XG4iCisiXHRwYWNrZWRfbWV0YV9ibG9ja3M9PDAgZsO2ciBhdHQgYXZha3RpdmVyYSwgMSBmw7ZyIGF0dCBha3RpdmVyYT5cbiIKKyJcdGxhenlfaXRhYmxlX2luaXQ9PDAgZsO2ciBhdHQgYXZha3RpdmVyYSwgMSBmw7ZyIGF0dCBha3RpdmVyYT5cbiIKKyJcdGxhenlfam91cm5hbF9pbml0PTwwIGbDtnIgYXR0IGF2YWt0aXZlcmEsIDEgZsO2ciBhdHQgYWt0aXZlcmE+XG4iCisiXHRyb290X3VpZD08dWlkIGbDtnIgcm90a2F0YWxvZ2VuPlxuIgorIlx0cm9vdF9naWQ9PGdpZCBmw7ZyIHJvdGthdGFsb2dlbj5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdGRpc2NhcmRcbiIKKyJcdG5vZGlzY2FyZFxuIgorIlx0cXVvdGF0eXBlPTx1c3IgRUxMRVIgZ3JwPlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IFJBSUQgc3RyaXBlLXdpZHRoICV1IG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHN0cmlkZSAldS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZhcm5pbmc6IFJBSUQtcmVtc2JyZWRkICV1IMOkciBpbnRlIGVuIGrDpG1uIG11bHRpcGVsIGF2IGtsaXZldCAldS5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gbWtlMmZzIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisiU3ludGF4ZmVsIGkgbWtlMmZzIGtvbmZpZ3VyYXRpb25zZmlsICglcywgcmFkIG5yICVkKVxuIgorIlx0JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDY4IG1pc2MvdHVuZTJmcy5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGZpbGVzeXN0ZW0gb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiT2dpbHRpZyBmaWxzeXN0ZW1zZmxhZ2dhIHNhdHQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA4MCBtaXNjL3R1bmUyZnMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtb3VudCBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJPZ2lsdGlnIG1vbnRlcmluZ3NmbGFnZ2Egc2F0dDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJZb3VyIG1rZTJmcy5jb25mIGZpbGUgZG9lcyBub3QgZGVmaW5lIHRoZSAlcyBmaWxlc3lzdGVtIHR5cGUuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEaW4gbWtlMmZzLmNvbmYtZmlsIGRlZmluaWVyYXIgaW50ZSBmaWxzeXN0ZW1zdHlwZW4gJXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyNAorbXNnaWQgIiIKKyJZb3UgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGFuIHVwZGF0ZWQgbWtlMmZzLmNvbmYgZmlsZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkR1IGJlaMO2dmVyIGbDtnJtb2RsaWdlbiBpbnN0YWxsZXJhIGVuIHVwcGRhdGVyYWQgbWtlMmZzLmNvbmYtZmlsLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjgKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICJBdmJyeXRlci4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBmc190eXBlICVzIGlzIG5vdCBkZWZpbmVkIGluIG1rZTJmcy5jb25mXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWYXJuaW5nOiBmc190eXBlICVzIMOkciBpbnRlIGRlZmluaWVyYWQgaSBta2UyZnMuY29uZlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE0NDkKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBQQVRILlxuIgorbXNnc3RyICJLdW5kZSBpbnRlIGFsbG9rZXJhIG1pbm5lIGbDtnIgbnkgU8OWS1bDhEcuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IChlcnJvcjogJWxkKS5cbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBpbml0aWVyYSBwcm9maWxlbiAoZmVsOiAlbGQpLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9jayBzaXplIC0gJXMiCittc2dzdHIgImZlbGFrdGlnIGJsb2Nrc3RvcmxlayAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogYmxvY2tzaXplICVkIG5vdCB1c2FibGUgb24gbW9zdCBzeXN0ZW1zLlxuIgorbXNnc3RyICJWYXJuaW5nOiBibG9ja3N0b3JsZWsgJWQgw6RyIGludGUgYW52w6RuZGJhciBww6UgZGUgZmxlc3RhIHN5c3RlbS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2x1c3RlciBzaXplIC0gJXMiCittc2dzdHIgImZlbGFrdGlnIGtsdXN0ZXJzdG9ybGVrIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU1MworbXNnaWQgIictUicgaXMgZGVwcmVjYXRlZCwgdXNlICctRScgaW5zdGVhZCIKK21zZ3N0ciAi4oCdLVLigJ0gdW5kYW5iZWRlcywgYW52w6RuZCDigJ0tReKAnSBpc3TDpGxsZXQiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU2NQorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBibG9ja3MgcGVyIGdyb3VwIgorbXNnc3RyICJPZ2lsdGlndCBhbnRhbCBmw7ZyIGJsb2NrIHBlciBncnVwcCIKKworIzogbWlzYy9ta2UyZnMuYzoxNTcwCittc2dpZCAiYmxvY2tzIHBlciBncm91cCBtdXN0IGJlIG11bHRpcGxlIG9mIDgiCittc2dzdHIgImJsb2NrIHBlciBncnVwcCBtw6VzdGUgdmFyYSBlbiBtdWx0aXBlbCBhdiA4IgorCisjOiBtaXNjL21rZTJmcy5jOjE1NzgKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgZmxleF9iZyBzaXplIgorbXNnc3RyICJGZWxha3RpZ3QgdGFsIGbDtnIgZmxleF9iZy1zdG9ybGVrIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODQKK21zZ2lkICJmbGV4X2JnIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIiCittc2dzdHIgInN0b3JsZWsgcMOlIGZsZXhfYmcgbcOlc3RlIHZhcmEgZW4gbXVsdGlwZWwgYXYgMiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZsZXhfYmcgc2l6ZSAoJWx1KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyXjMxIgorbXNnc3RyICJzdG9ybGVrIHDDpSBmbGV4X2JnICglbHUpIG3DpXN0ZSB2YXJhIG1pbmRyZSDDpG4gZWxsZXIgbGlrYSBtZWQgMsKzwrkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHJhdGlvICVzIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAib2dpbHRpZyBpbm9kc2bDtnJow6VsbGFuZGUgJXMgKG1pbiAlZC9tYXggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgIm9naWx0aWcgaW5vZHNzdG9ybGVrIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyMworbXNnaWQgIiIKKyJXYXJuaW5nOiAtSyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZSAnLUUgIgorIm5vZGlzY2FyZCcgZXh0ZW5kZWQgb3B0aW9uIGluc3RlYWQhXG4iCittc2dzdHIgIiIKKyJWYXJuaW5nOiBmbGFnZ2FuIC1LIHVuZGFuYmVkZXMgb2NoIHNrYWxsIGludGUgYW52w6RuZGFzIG1lcmEuICBBbnbDpG5kIGRlbiAiCisidXTDtmthZGUgZmxhZ2dhbiBcIi1FIG5vZGlzY2FyZFwiIGlzdMOkbGxldCFcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjM0Cittc2dpZCAiaW4gbWFsbG9jIGZvciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorbXNnc3RyICJpIG1hbGxvYyBmw7ZyIGJhZF9ibG9ja3NfZmlsZW5hbWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgIm9naWx0aWcgcHJvY2VudGFuZGVsIHJlc2VydmVyYWRlIGJsb2NrIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtIGlub2RlcyAtICVzIgorbXNnc3RyICJmZWxha3RpZ3QgYW50YWwgaW5vZGVyIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gbGV2ZWwgLSAlcyIKK21zZ3N0ciAiZmVsYWt0aWcgdmVyc2lvbnNuaXbDpSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSByZXZpc2lvbiAlZCIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCBza2FwYSByZXZpc2lvbiAlZCIKKworIzogbWlzYy9ta2UyZnMuYzoxNjk4Cittc2dpZCAiVGhlIC10IG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIkZsYWdnYW4gLXQgZsOlciBlbmRhc3QgYW5nZXMgZW4gZ8OlbmciCisKKyM6IG1pc2MvbWtlMmZzLmM6MTcwNgorbXNnaWQgIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICJGbGFnZ2FuIC1UIGbDpXIgZW5kYXN0IGFuZ2VzIGVuIGfDpW5nIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NTkgbWlzYy9ta2UyZnMuYzoyODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgZGV2aWNlICVzXG4iCittc2dzdHIgInZpZCBmw7Zyc8O2ayBhdHQgw7ZwcG5hIGpvdXJuYWxlbmhldCAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBkZXYgYmxvY2tzaXplICglZCkgc21hbGxlciB0aGFuIG1pbmltdW0gYmxvY2tzaXplICVkXG4iCittc2dzdHIgIkpvdXJuYWxlbmhldGVucyBibG9ja3N0b3JsZWsgKCVkKSBtaW5kcmUgw6RuIG1pbnN0YSBibG9ja3N0b3JsZWsgJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIGpvdXJuYWwgZGV2aWNlJ3MgYmxvY2tzaXplOiAlZFxuIgorbXNnc3RyICJBbnbDpG5kZXIgam91cm5hbGVuaGV0ZW5zIGJsb2Nrc3RvcmxlazogJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2tzICclcycgb24gZGV2aWNlICclcyciCittc2dzdHIgImZlbGFrdGlnYSBibG9jayBcIiVzXCIgcMOlIGVuaGV0IFwiJXNcIiIKKworIyAiRXR0IiBmw7ZyIGF0dCBkZXR0YSBzw6R0dHMgaW4gaSBhbm5hbiBzdHLDpG5nIGTDpHIgZGV0IGbDtnJlZ8OlcyBhdiAiYSIuCisjIMOEdmVuICJqb3VybmFsIiBrYW4gc8OkdHRhcyBpbiBww6Ugc2FtbWEgcGxhdHMuICBGZWxyYXBwb3J0ZXJhdC4KKyM6IG1pc2MvbWtlMmZzLmM6MTgwNAorbXNnaWQgImZpbGVzeXN0ZW0iCittc2dzdHIgImV0dCBmaWxzeXN0ZW0iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgxNyByZXNpemUvbWFpbi5jOjM5NQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBzaXplIgorbXNnc3RyICJ2aWQgZsO2cnPDtmsgYXR0IGF2Z8O2cmEgZmlsc3lzdGVtc3RvcmxlayIKKworIzogbWlzYy9ta2UyZnMuYzoxODIzCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKyJLdW5kZSBpbnRlIGF2Z8O2cmEgZW5oZXRzc3RvcmxlazsgZHUgbcOlc3RlIGFuZ2VcbiIKKyJzdG9ybGVrZW4gcMOlIGZpbHN5c3RlbWV0XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgzMAorbXNnaWQgIiIKKyJEZXZpY2Ugc2l6ZSByZXBvcnRlZCB0byBiZSB6ZXJvLiAgSW52YWxpZCBwYXJ0aXRpb24gc3BlY2lmaWVkLCBvclxuIgorIlx0cGFydGl0aW9uIHRhYmxlIHdhc24ndCByZXJlYWQgYWZ0ZXIgcnVubmluZyBmZGlzaywgZHVlIHRvXG4iCisiXHRhIG1vZGlmaWVkIHBhcnRpdGlvbiBiZWluZyBidXN5IGFuZCBpbiB1c2UuICBZb3UgbWF5IG5lZWQgdG8gcmVib290XG4iCisiXHR0byByZS1yZWFkIHlvdXIgcGFydGl0aW9uIHRhYmxlLlxuIgorbXNnc3RyICIiCisiRW5oZXRzc3RvcmxlayByYXBwb3J0ZXJhZGVzIHNvbSBub2xsLiAgT2dpbHRpZyBwYXJ0aXRpb24gYW5naXZlbiwgZWxsZXJcbiIKKyJcdHBhcnRpdGlvbnN0YWJlbGxlbiB2YXIgaW50ZSBvbWzDpHN0IGVmdGVyIGF0dCBoYSBrw7ZydCBmc2NrLCBww6UgZ3J1bmRcbiIKKyJcdGF2IGVuIG1vZGlmaWVyYWQgcGFydGl0aW9uIGFudsOkbmRzIG9jaCDDpHIgaSBicnVrLiAgRHUga2FuIGJlaMO2dmFcbiIKKyJcdHN0YXJ0YSBvbSBmw7ZyIGF0dCBsw6RzYSBvbSBkaW4gcGFydGl0aW9uc3RhYmVsbC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODQ3Cittc2dpZCAiRmlsZXN5c3RlbSBsYXJnZXIgdGhhbiBhcHBhcmVudCBkZXZpY2Ugc2l6ZS4iCittc2dzdHIgIkZpbHN5c3RlbSBzdMO2cnJlIMOkbiBzeW5iYXIgZW5oZXRzc3Rvcmxlay4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg2NworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBmcyB0eXBlcyBsaXN0XG4iCittc2dzdHIgIk1pc3NseWNrYWRlcyB0b2xrYSBmcy10eXBsaXN0YVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MDgKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGhhcmR3YXJlIHNlY3RvciBzaXplIgorbXNnc3RyICJ2aWQgZsO2cnPDtmsgYXR0IGF2Z8O2cmEgaMOlcmR2YXJ1c2VrdG9yc3RvcmxlayIKKworIzogbWlzYy9ta2UyZnMuYzoxOTE0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBwaHlzaWNhbCBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCBhdmfDtnJhIGZ5c2lzayBzZWt0b3JzdG9ybGVrIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NDYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsIGZvciBkZXZpY2VcbiIKK21zZ3N0ciAibsOkciBibG9ja3N0b3JsZWsgc2F0dGVzOyBmw7ZyIGxpdGVuIGbDtnIgZW5oZXRlblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNwZWNpZmllZCBibG9ja3NpemUgJWQgaXMgbGVzcyB0aGFuIGRldmljZSBwaHlzaWNhbCBzZWN0b3JzaXplICVkXG4iCittc2dzdHIgIiIKKyJWYXJuaW5nOiBhbmdpdmVuIGJsb2Nrc3RvcmxlayAlZCDDpHIgbWluZHJlIMOkbiBlbmhldGVucyBmeXNpc2thIHNla3RvcnN0b3JsZWsgIgorIiVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFNpemUgb2YgZGV2aWNlICgweCVsbHggYmxvY2tzKSAlcyB0b28gYmlnIHRvIGJlIGV4cHJlc3NlZFxuIgorIlx0aW4gMzIgYml0cyB1c2luZyBhIGJsb2Nrc2l6ZSBvZiAlZC5cbiIKK21zZ3N0ciAiIgorIiVzOiBTdG9ybGVrZW4gcMOlIGVuaGV0ICgweCVsbHggYmxvY2spICVzIMOkciBmw7ZyIHN0b3IgZsO2ciBhdHQgdXR0cnlja2FzXG4iCisiXHRtZWQgMzIgYml0YXIgbWVkIGFudsOkbmRuaW5nIGF2IGVuIGJsb2Nrc3RvcmxlayBww6UgJWQuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk5MQorbXNnaWQgImZzX3R5cGVzIGZvciBta2UyZnMuY29uZiByZXNvbHV0aW9uOiAiCittc2dzdHIgInVwcGzDtnNuaW5nIGF2IGZzX3R5cGVzIGbDtnIgbWtlMmZzLmNvbmY6ICIKKworIzogbWlzYy9ta2UyZnMuYzoxOTk4Cittc2dpZCAiRmlsZXN5c3RlbSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICJGaWxzeXN0ZW1zZnVua3Rpb25lciBzb20gaW50ZSBzdMO2ZHMgbWVkIHJldmlzaW9uIDAtZmlsc3lzdGVtXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAwNgorbXNnaWQgIlNwYXJzZSBzdXBlcmJsb2NrcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICJHbGVzYSBzdXBlcmJsb2NrIHN0w7ZkcyBpbnRlIG1lZCByZXZpc2lvbiAwLWZpbHN5c3RlbVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMTgKK21zZ2lkICJKb3VybmFscyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICJKb3VybmFsZXIgc3TDtmRzIGludGUgbWVkIHJldmlzaW9uIDAtZmlsc3lzdGVtXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAzMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJWxmIgorbXNnc3RyICJvZ2lsdGlnIHByb2NlbnRhbmRlbCByZXNlcnZlcmFkZSBibG9jayAtICVsZiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDQ5Cittc2dpZCAiIgorIkV4dGVudHMgTVVTVCBiZSBlbmFibGVkIGZvciBhIDY0LWJpdCBmaWxlc3lzdGVtLiAgUGFzcyAtTyBleHRlbnRzIHRvICIKKyJyZWN0aWZ5LlxuIgorbXNnc3RyICIiCisiVXRzdHLDpGNrbmluZ2FyIE3DhVNURSB2YXJhIGFrdGl2ZXJhZGUgcMOlIGV0dCA2NC1iaXRhcnMgZmlsc3lzdGVtLiAgU2tpY2thIC1PICIKKyJleHRlbnRzIGbDtnIgYXR0IHLDpHR0YS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDY5Cittc2dpZCAiVGhlIGNsdXN0ZXIgc2l6ZSBtYXkgbm90IGJlIHNtYWxsZXIgdGhhbiB0aGUgYmxvY2sgc2l6ZS5cbiIKK21zZ3N0ciAiS2x1c3RlcnN0b3JsZWtlbiBmw6VyIGludGUgdmFyYSBtaW5kcmUgw6RuIGJsb2Nrc3Rvcmxla2VuLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNzUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgY2x1c3RlciBzaXplIHJlcXVpcmVzIHRoZSBiaWdhbGxvYyBmZWF0dXJlIgorbXNnc3RyICJhdHQgYW5nZSBlbiBrbHVzdGVyc3RvcmxlayBmw7ZydXRzw6R0dGVyIGZ1bmt0aW9uZW4gYmlnYWxsb2MiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBVbmFibGUgdG8gZ2V0IGRldmljZSBnZW9tZXRyeSBmb3IgJXNcbiIKK21zZ3N0ciAidmFybmluZzogS2FuIGludGUgdGEgcmVkYSBww6UgZW5oZXRlbnMgZ2VvbWV0cmkgZsO2ciAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxpZ25tZW50IGlzIG9mZnNldCBieSAlbHUgYnl0ZXMuXG4iCittc2dzdHIgIiVzIGp1c3RlcmluZyDDpHIgZsO2cnNranV0ZW4gbWVkICVsdSBieXRlLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgbWF5IHJlc3VsdCBpbiB2ZXJ5IHBvb3IgcGVyZm9ybWFuY2UsIChyZSktcGFydGl0aW9uaW5nIHN1Z2dlc3RlZC5cbiIKK21zZ3N0ciAiIgorIkRldHRhIGthbiBtZWRmw7ZyYSB2w6RsZGlndCBkw6VsaWdhIHByZXN0YW5kYSwgKG9tKXBhcnRpdGlvbmVyaW5nIGbDtnJlc2zDpXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCkiCittc2dzdHIgIiVkLWJ5dGVibG9jayBmw7ZyIHN0b3J0IGbDtnIgc3lzdGVtZXQgKG1heCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpLCBmb3JjZWQgdG8gY29udGludWVcbiIKK21zZ3N0ciAiIgorIlZhcm5pbmc6ICVkLWJ5dGVibG9jayBmw7ZyIHN0b3J0IGbDtnIgc3lzdGVtZXQgKG1heCAlZCksIHR2aW5nYXMgZm9ydHPDpHR0YVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIxODAKK21zZ2lkICJDYW4ndCBzdXBwb3J0IGJpZ2FsbG9jIGZlYXR1cmUgd2l0aG91dCBleHRlbnRzIGZlYXR1cmUiCittc2dzdHIgIkthbiBpbnRlIHN0w7ZkamEgZnVua3Rpb25lbiBiaWdhbGxvYyB1dGFuIGZ1bmt0aW9uZW4gdXRzdHLDpGNrbmluZ2FyIgorCisjOiBtaXNjL21rZTJmcy5jOjIxODcKK21zZ2lkICIiCisiVGhlIHJlc2l6ZV9pbm9kZSBhbmQgbWV0YV9iZyBmZWF0dXJlcyBhcmUgbm90IGNvbXBhdGlibGUuXG4iCisiVGhleSBjYW4gbm90IGJlIGJvdGggZW5hYmxlZCBzaW11bHRhbmVvdXNseS5cbiIKK21zZ3N0ciAiIgorIkVnZW5za2FwZXJuYSByZXNpemVfaW5vZGUgb2NoIG1ldGFfYmcgw6RyIGludGUga29tcGF0aWJsYVxuIgorIkRlIGthbiBpbnRlIGLDpWRhIGFrdGl2ZXJhcyBzYW10aWRpZ3QuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE5NgorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgYmlnYWxsb2MgZmVhdHVyZSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuIgorIlNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiVmFybmluZzogZnVua3Rpb25lbiBiaWdhbGxvYyDDpHIgZm9ydGZhcmFuZGUgdW5kZXIgdXR2ZWNrbGluZ1xuIgorIlNlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0JpZ2FsbG9jIGbDtnIgbWVyIGluZm9ybWF0aW9uXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIwNworbXNnaWQgInJlc2VydmVkIG9ubGluZSByZXNpemUgYmxvY2tzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLXNwYXJzZSBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisicmVzZXJ2ZXJhZGUgYmxvY2sgZsO2ciBzdG9ybGVrc8OkbmRyaW5nIHVuZGVyIGRyaWZ0IHN0w7ZkcyBpbnRlIHDDpSBpY2tlLWdsZXNhICIKKyJmaWxzeXN0ZW0iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIxNgorbXNnaWQgImJsb2NrcyBwZXIgZ3JvdXAgY291bnQgb3V0IG9mIHJhbmdlIgorbXNnc3RyICJhbnRhbCBibG9jayBwZXIgZ3J1cHAgdXRhbmbDtnIgZ2lsdGlndCBpbnRlcnZhbGwiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI0MAorbXNnaWQgIkZsZXhfYmcgZmVhdHVyZSBub3QgZW5hYmxlZCwgc28gZmxleF9iZyBzaXplIG1heSBub3QgYmUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisiRnVua3Rpb25lbiBmbGV4X2diIMOkciBpbnRlIGFrdGl2ZXJhZCwgc8OlIGZsZWdfYmctc3RvcmxlZyBrYW4gaW50ZSBhbmdlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyMjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgc2l6ZSAlZCAobWluICVkL21heCAlZCkiCittc2dzdHIgIm9naWx0aWcgaW5vZHN0b3JsZWsgJWQgKG1pbiAlZC9tYXggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgcmFpc2UgaW5vZGUgcmF0aW8/IgorbXNnc3RyICJmw7ZyIG3DpW5nYSBpbm9kZXIgKCVsbHUpLCDDtmthIGlub2RzZsO2cmjDpWxsYW5kZXQ/IgorCisjOiBtaXNjL21rZTJmcy5jOjIyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgc3BlY2lmeSA8IDJeMzIgaW5vZGVzIgorbXNnc3RyICJmw7ZyIG3DpW5nYSBpbm9kZXIgKCVsbHUpLCBhbmdlIDwgMsKzwrIgaW5vZGVyIgorCisjOiBtaXNjL21rZTJmcy5jOjIyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImlub2RlX3NpemUgKCV1KSAqIGlub2Rlc19jb3VudCAoJXUpIHRvbyBiaWcgZm9yIGFcbiIKKyJcdGZpbGVzeXN0ZW0gd2l0aCAlbGx1IGJsb2Nrcywgc3BlY2lmeSBoaWdoZXIgaW5vZGVfcmF0aW8gKC1pKVxuIgorIlx0b3IgbG93ZXIgaW5vZGUgY291bnQgKC1OKS5cbiIKK21zZ3N0ciAiIgorImlub2Rzc3RvcmxlayAoJXUpIMK3IGlub2RhbnRhbCAoJXUpIGbDtnIgc3RvcnQgZsO2ciBldHRcbiIKKyJcdGZpbHN5c3RlbSBtZWQgJWxsdSBibG9jaywgYW5nZSBow7ZncmUgaW5vZHNmw7ZyaMOlbGxhbmRlICgtaSlcbiIKKyJcdGVsbGVyIGzDpGdyZSBpbm9kYW50YWwgKC1OKS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJPdmVyd3JpdGluZyBleGlzdGluZyBmaWxlc3lzdGVtOyB0aGlzIGNhbiBiZSB1bmRvbmUgdXNpbmcgdGhlIGNvbW1hbmQ6XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiU2tyaXZlciDDtnZlciBleGlzdGVyYW5kZSBmaWxzeXN0ZW0sIGRldHRhIGthbiBnw7ZyYXMgb2dqb3J0IG1lZCBrb21tYW5kb3Q6XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI0MzIKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc2V0dXAgdW5kbyBmaWxlXG4iCittc2dzdHIgInZpZCBmw7Zyc8O2ayBhdHQgc2thcGEgZW4gZ8O2ci1vZ2pvcnQtZmlsXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ1OAorbXNnaWQgIkRpc2NhcmRpbmcgZGV2aWNlIGJsb2NrczogIgorbXNnc3RyICJVdHJhbmdlcmFyIGVuaGV0c2Jsb2NrOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ3NAorbXNnaWQgImZhaWxlZCAtICIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIC0gIgorCisjOiBtaXNjL21rZTJmcy5jOjI1OTYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHVwIHN1cGVyYmxvY2siCittc2dzdHIgInZpZCB1cHBzw6R0dG5pbmcgYXYgc3VwZXJibG9jayIKKworIzogbWlzYy9ta2UyZnMuYzoyNjEyCittc2dpZCAiRGlzY2FyZCBzdWNjZWVkZWQgYW5kIHdpbGwgcmV0dXJuIDBzIC0gc2tpcHBpbmcgaW5vZGUgdGFibGUgd2lwZVxuIgorbXNnc3RyICIiCisiVXRyYW5nZXJpbmcgbHlja2FkZXMgb2NoIGtvbW1lciByZXR1cm5lcmEgMHMg4oCUIGhvcHBhciDDtnZlciByZW5zbmluZyBhdiAiCisiaW5vZHN0YWJlbGxcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3MgLSAlcyIKK21zZ3N0ciAib2vDpG50IG9zIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc1MgorbXNnaWQgIkFsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAiCittc2dzdHIgIkFsbG9rZXJhciBncnVwcHRhYmVsbGVyOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2MAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBhbGxvY2F0ZSBmaWxlc3lzdGVtIHRhYmxlcyIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCBhbGxva2VyYSBmaWxzeXN0ZW1zdGFiZWxsZXIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2OQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgIiIKKyJcbiIKKyJcdHZpZCBrb252ZXJ0ZXJpbmcgYXYgdW5kZXJrbHVzdHJldHMgYml0a2FydGEiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGJsb2NrICVsbHUgYXQgZW5kIG9mIGZpbGVzeXN0ZW0iCittc2dzdHIgInZpZCBub2xsc3TDpGxsbmluZyBhdiBibG9jayAlbGx1IHZpZCBzbHV0ZXQgYXYgZmlsc3lzdGVtZXQiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgyNgorbXNnaWQgIndoaWxlIHJlc2VydmluZyBibG9ja3MgZm9yIG9ubGluZSByZXNpemUiCittc2dzdHIgInZpZCByZXNlcnZhdGlvbiBhdiBibG9jayBmw7ZyIHN0b3JsZWtzw6RuZHJpbmcgdW5kZXIgZHJpZnQiCisKKyMgIkVuIiBmw7ZyIGF0dCBkZXR0YSBzw6R0dHMgaW4gaSBhbm5hbiBzdHLDpG5nIGTDpHIgZGV0IGbDtnJlZ8OlcyBhdiAiYSIuCisjIMOEdmVuICJmaWxzeXN0ZW0iIGthbiBzw6R0dGFzIGluIHDDpSBzYW1tYSBwbGF0cy4gIEZlbHJhcHBvcnRlcmF0LgorIzogbWlzYy9ta2UyZnMuYzoyODM4IG1pc2MvdHVuZTJmcy5jOjcxMgorbXNnaWQgImpvdXJuYWwiCittc2dzdHIgImVuIGpvdXJuYWwiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgam91cm5hbCB0byBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiTMOkZ2dlciB0aWxsIGpvdXJuYWwgdGlsbCBlbmhldCAlczogIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlx0dmlkIGbDtnJzw7ZrIGF0dCBsw6RnZ2EgdGlsbCBqb3VybmFsIHRpbGwgZW5oZXQgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg2MiBtaXNjL21rZTJmcy5jOjI4OTMgbWlzYy90dW5lMmZzLmM6NzQxIG1pc2MvdHVuZTJmcy5jOjc2MAorbXNnaWQgImRvbmVcbiIKK21zZ3N0ciAia2xhclxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NjkKK21zZ2lkICJTa2lwcGluZyBqb3VybmFsIGNyZWF0aW9uIGluIHN1cGVyLW9ubHkgbW9kZVxuIgorbXNnc3RyICJIb3BwYXIgw7Z2ZXIgYXR0IHNrYXBhIGpvcm5hbCBpIGzDpGdldCBlbmRhc3Qgc3VwZXJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCV1IGJsb2Nrcyk6ICIKK21zZ3N0ciAiU2thcGFyIGpvdXJuYWwgKCV1IGJsb2NrKTogIgorCisjOiBtaXNjL21rZTJmcy5jOjI4ODkKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwiCittc2dzdHIgIiIKKyJcbiIKKyJcdHZpZCBmw7Zyc8O2ayBhdHQgc2thcGEgam91cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAxIG1pc2MvdHVuZTJmcy5jOjUxNgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisiXG4iCisiRmVsIHZpZCBha3RpdmVyaW5nIGF2IGZ1bmt0aW9uZW4gZsO2ciBza3lkZCBtb3QgZmxlcmZhbGRpZyBtb250ZXJpbmcuIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBpcyBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkIHNlY29uZHMuXG4iCittc2dzdHIgIiIKKyJTa3lkZCBtb3QgZmxlcmZhbGRpZyBtb250ZXJpbmcgw6RyIGFrdGl2ZXJhdCBtZWQgdXBwZGF0ZXJpbmdzaW50ZXJ2YWxsICVkICIKKyJzZWt1bmRlci5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTIzCittc2dpZCAiV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAiCittc2dzdHIgIlNrcml2ZXIgc3VwZXJibG9jayBvY2ggZmlsc3lzdGVtc2Jva2bDtnJpbmdzaW5mb3JtYXRpb246ICIKKworIzogbWlzYy9ta2UyZnMuYzoyOTMwCittc2dpZCAiIgorIlxuIgorIldhcm5pbmcsIGhhZCB0cm91YmxlIHdyaXRpbmcgb3V0IHN1cGVyYmxvY2tzLiIKK21zZ3N0ciAiIgorIlxuIgorIlZhcm5pbmcsIGhhZGUgcHJvYmxlbSBhdHQgc2tyaXZhIHV0IHN1cGVyYmxvY2suIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MzIKK21zZ2lkICIiCisiZG9uZVxuIgorIlxuIgorbXNnc3RyICIiCisia2xhclxuIgorIlxuIgorCisjOiBtaXNjL21rbG9zdCtmb3VuZC5jOjUwCittc2dpZCAiVXNhZ2U6IG1rbG9zdCtmb3VuZFxuIgorbXNnc3RyICJBbnbDpG5kbmluZzogbWtsb3N0K2ZvdW5kXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICAlcyBkZXZpY2UuLi5cbiIKKyJcbiIKKyJQcmludHMgb3V0IHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGVhY2ggZ2l2ZW4gZGV2aWNlLlxuIgorIkZvciBleGFtcGxlOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorbXNnc3RyICIiCisiQW52w6RuZG5pbmc6ICAlcyBlbmhldC4uLlxuIgorIlxuIgorIlNrcml2IHV0IHBhcnRpdGlvbnNpbmZvcm1hdGlvbmVuIGbDtnIgdmFyamUgYW5naXZlbiBlbmhldC5cbiIKKyJUaWxsIGV4ZW1wZWw6ICVzIC9kZXYvaGRhXG4iCisiXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiAlczogJXMiCittc2dzdHIgIkthbiBpbnRlIMO2cHBuYSAlczogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGdlb21ldHJ5IG9mICVzOiAlcyIKK21zZ3N0ciAiS2FuIGludGUgZsOlIGdlb21ldHJpbiBmw7ZyICVzOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgc2l6ZSBvZiAlczogJXMiCittc2dzdHIgIkthbiBpbnRlIGbDpSBzdG9ybGVrIGF2ICVzOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIHN0YXJ0PSU4ZCBzaXplPSU4bHUgZW5kPSU4ZFxuIgorbXNnc3RyICIlczogaD0lM2Qgcz0lM2QgYz0lNGQgICBzdGFydD0lOGQgc3Rvcmxlaz0lOGx1IHNsdXQ9JThkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExMgorbXNnaWQgIlBsZWFzZSBydW4gZTJmc2NrIG9uIHRoZSBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICJLw7ZyIGUyZnNjayBww6UgZmlsc3lzdGVtZXQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYyBtYXhfbW91bnRzX2NvdW50XSBbLWUgZXJyb3JzX2JlaGF2aW9yXSBbLWcgZ3JvdXBdXG4iCisiXHRbLWkgaW50ZXJ2YWxbZHxtfHddXSBbLWpdIFstSiBqb3VybmFsX29wdGlvbnNdIFstbF1cbiIKKyJcdFstbSByZXNlcnZlZF9ibG9ja3NfcGVyY2VudF0gWy1vIFteXW1vdW50X29wdGlvbnNbLC4uLl1dIFstcCAiCisibW1wX3VwZGF0ZV9pbnRlcnZhbF1cbiIKKyJcdFstciByZXNlcnZlZF9ibG9ja3NfY291bnRdIFstdSB1c2VyXSBbLUMgbW91bnRfY291bnRdIFstTCB2b2x1bWVfbGFiZWxdXG4iCisiXHRbLU0gbGFzdF9tb3VudGVkX2Rpcl0gWy1PIFteXWZlYXR1cmVbLC4uLl1dXG4iCisiXHRbLVEgcXVvdGFfb3B0aW9uc11cbiIKKyJcdFstRSBleHRlbmRlZC1vcHRpb25bLC4uLl1dIFstVCBsYXN0X2NoZWNrX3RpbWVdIFstVSBVVUlEXVxuIgorIlx0WyAtSSBuZXdfaW5vZGVfc2l6ZSBdIGRldmljZVxuIgorbXNnc3RyICIiCisiQW52w6RuZG5pbmc6ICVzIFstYyBtYXhfYW50YWxfbW9udGVyaW5nYXJdIFstZSBmZWxiZXRlZW5kZV0gWy1nIGdydXBwXVxuIgorIlx0Wy1pIGludGVydmFsbFtkfG18d11dIFstal0gWy1KIGpvdXJuYWxmbGFnZ29yXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2ZXJhZGVfYmxvY2tfcHJvY2VudF0gWy1vIFteXW1vbnRlcmluZ3NmbGFnZ29yWywuLi5dXVxuIgorIlx0Wy1wIG1tcF91cHBkYXRlcmluZ3NpbnRlcnZhbGxdIFstciBhbnRhbF9yZXNlcnZlcmFkZV9ibG9ja11cbiIKKyJcdFstdSBhbnbDpG5kYXJlXSBbLUMgYW50YWxfbW9udGVyaW5nYXJdIFstTCB2b2x5bWV0aWtldHRdXG4iCisiXHRbLU0gc2VuYXN0X21vbnRlcmFkX2thdGFsb2ddIFstTyBbXl1mdW5rdGlvblssLi4uXV1cbiIKKyJcdFstUSBrdm90YWx0ZXJuYXRpdl1cbiIKKyJcdFstRSB1dMO2a2FkLWZsYWdnYVssLi4uXV0gWy1UIHNlbmFzdGVfa29udHJvbGx0aWRdIFstVSBVVUlEXVxuIgorIlx0WyAtSSBueV9pbm9kc3RvcmxlayBdIGVuaGV0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMworbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQhXG4iCittc2dzdHIgIkpvdXJuYWxzdXBlcmJsb2NrIGludGUgZnVubmV0IVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjEKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJ2aWQgZsO2cnPDtmsgYXR0IMO2cHBuYSBleHRlcm4gam91cm5hbCIKKworIzogbWlzYy90dW5lMmZzLmM6MjY3IG1pc2MvdHVuZTJmcy5jOjE5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIMOkciBpbnRlIGVuIGpvdXJuYWxlbmhldC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6Mjc3IG1pc2MvdHVuZTJmcy5jOjE5NzQKK21zZ2lkICJGaWxlc3lzdGVtJ3MgVVVJRCBub3QgZm91bmQgb24gam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIkZpbHN5c3RlbXMgVVVJRCBpbnRlIGZ1bm5ldCBww6Ugam91cm5hbGVuaGV0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMDEKK21zZ2lkICIiCisiQ2Fubm90IGxvY2F0ZSBqb3VybmFsIGRldmljZS4gSXQgd2FzIE5PVCByZW1vdmVkXG4iCisiVXNlIC1mIG9wdGlvbiB0byByZW1vdmUgbWlzc2luZyBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGhpdHRhIGpvdXJuYWxlbmhldGVuLiAgIERlbiB0b2dzIElOVEUgYm9ydC5cbiIKKyJBbnbDpG5kIGZsYWdnYW4gLWYgZsO2ciBhdHQgdGEgYm9ydCBlbiBzYWtuYWQgam91cm5hbGVuaGV0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMTAKK21zZ2lkICJKb3VybmFsIHJlbW92ZWRcbiIKK21zZ3N0ciAiSm91cm5hbCBib3J0dGFnZW5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MzU0Cittc2dpZCAid2hpbGUgcmVhZGluZyBiaXRtYXBzIgorbXNnc3RyICJ2aWQgbMOkc25pbmcgYXYgYml0a2FydG9yIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNjIKK21zZ2lkICJ3aGlsZSBjbGVhcmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJ2aWQgbm9sbHN0w6RsbG5pbmcgYXYgam91cm5hbGlub2QiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM3MworbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAidmlkIHNrcml2bmluZyBhdiBqb3VybmFsaW5vZCIKKworIzogbWlzYy90dW5lMmZzLmM6NDA1IG1pc2MvdHVuZTJmcy5jOjQxOAorbXNnaWQgIihhbmQgcmVib290IGFmdGVyd2FyZHMhKVxuIgorbXNnc3RyICIob2NoIHN0YXJ0YSBvbSBlZnRlcsOldCEpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICJOb2xsc3TDpGxsbmluZyBhdiBmaWxzeXN0ZW1zZnVua3Rpb24gXCIlc1wiIHN0w7ZkcyBpbnRlLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICJBdHQgc8OkdHRhIGZpbHN5c3RlbXNmdW5rdGlvbiBcIiVzXCIgc3TDtmRzIGludGUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ2NworbXNnaWQgIiIKKyJUaGUgaGFzX2pvdXJuYWwgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJGbGFnZ2FuIGhhc19qb3VybmFsIGbDpXIgZW5kYXN0IG5vbGxzdMOkbGxhcyBuw6RyIGZpbHN5c3RlbWV0IMOkclxuIgorIm9tb250ZXJhdCBlbGxlciBtb250ZXJhdCBlbmJhcnQgZsO2ciBsw6RzbmluZy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDc2Cittc2dpZCAiIgorIlRoZSBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldC4gIFBsZWFzZSBydW4gZTJmc2NrIGJlZm9yZSBjbGVhcmluZ1xuIgorInRoZSBoYXNfam91cm5hbCBmbGFnLlxuIgorbXNnc3RyICIiCisiRmxhZ2dhbiBuZWVkc19yZWNvdmVyeSDDpHIgc2F0dC4gIEvDtnIgZTJmc2NrIGbDtnJlIGZsYWdnYW4gaGFzX2pvdXJuYWxcbiIKKyJub2xsc3TDpGxscy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDk1Cittc2dpZCAiIgorIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICdzcGFyc2Vfc3VwZXInIG5vdCBzdXBwb3J0ZWRcbiIKKyJmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgbWV0YV9iZyBmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKyJBdHQgc8OkdHRhIGZpbHN5c3RlbXNmdW5rdGlvbmVuIOKAnXNwYXJzZV9zdXBlcuKAnSBzdMO2ZGpzIGludGVcbiIKKyJmw7ZyIGZpbHN5c3RlbSBtZWQgZnVua3Rpb25lbiBtZXRhX2JnIGFrdGl2ZXJhZC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTA4Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2FuJ3RcbiIKKyJiZSBzZXQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBvclxuIgorInJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkZ1bmt0aW9uZW4gZsO2ciBza3lkZCBtb3QgZmxlcmZhbGRpZyBtb250ZXJpbmdcbiIKKyJrYW4gaW50ZSBzw6R0dGFzIHDDpSBvbSBmaWxzeXN0ZW1ldCDDpHIgbW9udGVyYXRcbiIKKyJlbGxlciBza3JpdnNreWRkYXQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGhhcyBiZWVuIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWRzLlxuIgorbXNnc3RyICIiCisiU2t5ZGQgbW90IGZsZXJmYWxkaWcgbW9udGVyaW5nIGhhciBha3RpdmVyYXRzIG1lZCB1cHBkYXRlcmluZ3NpbnRlcnZhbGxldCAlZCAiCisicy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTM1Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2Fubm90XG4iCisiYmUgZGlzYWJsZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmVhZG9ubHkuXG4iCittc2dzdHIgIiIKKyJGdW5rdGlvbmVuIGbDtnIgc2t5ZGQgbW90IGZsZXJmYWxkaWcgbW9udGVyaW5nIGthbiBpbnRlXG4iCisiYXZha3RpdmVyYXMgb20gZmlsc3lzdGVtZXQgw6RyIHNrcml2c2t5ZGRhdC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTQzCittc2dpZCAiRXJyb3Igd2hpbGUgcmVhZGluZyBiaXRtYXBzXG4iCittc2dzdHIgIkZlbCB2aWQgbMOkc25pbmcgYXYgYml0a2FydG9yXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1MgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWdpYyBudW1iZXIgaW4gTU1QIGJsb2NrIGRvZXMgbm90IG1hdGNoLiBleHBlY3RlZDogJXgsIGFjdHVhbDogJXhcbiIKK21zZ3N0ciAiTWFnaXNrdCB0YWwgaSBNTVAtYmxvY2sgc3TDpG1tZXIgaW50ZS4gIGbDtnJ2w6RudGF0OiAleCwgZmFrdGlza3Q6ICV4XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1NworbXNnaWQgIndoaWxlIHJlYWRpbmcgTU1QIGJsb2NrLiIKK21zZ3N0ciAidmlkIGzDpHNuaW5nIGF2IE1NUC1ibG9jay4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU4OQorbXNnaWQgIiIKKyJDbGVhcmluZyB0aGUgZmxleF9iZyBmbGFnIHdvdWxkIGNhdXNlIHRoZSB0aGUgZmlsZXN5c3RlbSB0byBiZVxuIgorImluY29uc2lzdGVudC5cbiIKK21zZ3N0ciAiIgorIkF0dCBub2xsc3TDpGxsYSBmbGFnZ2FuIGZsZXhfYmcgc2t1bGxlIGbDpSBmaWxzeXN0ZW1ldCBhdHQgYmxpXG4iCisiaW5rb25zaXN0ZW50LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2MDAKK21zZ2lkICIiCisiVGhlIGh1Z2VfZmlsZSBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkZsYWdnYW4gaHVnZV9maWxlIGbDpXIgZW5kYXN0IG5vbGxzdMOkbGxhcyBuw6RyIGZpbHN5c3RlbWV0IMOkclxuIgorIm9tb250ZXJhdCBlbGxlciBtb250ZXJhdCBlbmJhcnQgZsO2ciBsw6RzbmluZy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjYwCittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6ICdecXVvdGEnIG9wdGlvbiBvdmVycmlkZXMgJy1RJ2FyZ3VtZW50cy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlZhcm5pbmc6IGZsYWdnYW4gXCJecXVvdGFcIiDDpXNpZG9zw6R0dGVyIFwiLVFcIi1hcmd1bWVudC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzA1Cittc2dpZCAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgYSBqb3VybmFsLlxuIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBoYXIgcmVkYW4gZW4gam91cm5hbC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgb24gJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlx0dmlkIGbDtnJzw7ZrIGF0dCDDtnBwbmEgam91cm5hbCBww6UgJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgb24gZGV2aWNlICVzOiAiCittc2dzdHIgIlNrYXBhciBqb3VybmFsIHDDpSBlbmhldCAlczogIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgYWRkaW5nIGZpbGVzeXN0ZW0gdG8gam91cm5hbCBvbiAlcyIKK21zZ3N0ciAidmlkIHRpbGzDpGdnIGF2IGZpbHN5c3RlbSB0aWxsIGpvdXJuYWwgcMOlICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3NDMKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIGlub2RlOiAiCittc2dzdHIgIlNrYXBhciBqb3VybmFsaW5vZDogIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3NTcKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwgZmlsZSIKK21zZ3N0ciAiIgorIlxuIgorIlx0dmlkIGbDtnJzw7ZrIGF0dCBza2FwYSBqb3VybmFsZmlsIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4MzIKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2UgcXVvdGEgb3B0aW9ucyFcbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBhbGxva2VyYSBtaW5uZSBmw7ZyIGF0dCB0b2xrYSBrdm90ZmxhZ2dvciFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6ODU0Cittc2dpZCAiIgorIlxuIgorIkJhZCBxdW90YSBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJGb2xsb3dpbmcgdmFsaWQgcXVvdGEgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIChwYXNzIGJ5IHNlcGFyYXRpbmcgd2l0aCAiCisiY29tbWEpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJGZWxha3RpZ3Qga3ZvdGFsdGVybmF0aXYgYW5naXZldC5cbiIKKyJcbiIKKyJGw7ZsamFuZGUgZ2lsdGlnYSBrdm90YWx0ZXJuYXRpdiBmaW5ucyAoc2tpY2thIGRlbSBzZXBhcmVyYWRlIG1lZCAiCisia29tbWF0ZWNrZW4pOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBwYXJzZSBkYXRlL3RpbWUgc3BlY2lmaWVyOiAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0b2xrYSBkYXR1bS0vdGlkc2FuZ2l2ZWxzZTogJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk0MiBtaXNjL3R1bmUyZnMuYzo5NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1vdW50cyBjb3VudCAtICVzIgorbXNnc3RyICJmZWxha3RpZ3QgYW50YWwgbW9udGVyaW5nYXIgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBlcnJvciBiZWhhdmlvciAtICVzIgorbXNnc3RyICJmZWxha3RpZ3QgZmVsYmV0ZWVuZGUgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaWQvZ3JvdXAgbmFtZSAtICVzIgorbXNnc3RyICJmZWxha3RpZ3QgZ2lkL2dydXBwbmFtbiAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbnRlcnZhbCAtICVzIgorbXNnc3RyICJmZWxha3RpZ3QgaW50ZXJ2YWxsIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrIHJhdGlvIC0gJXMiCittc2dzdHIgImZlbGFrdGlnIGFuZGVsIHJlc2VydmVyYWRlIGJsb2NrIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNzUKK21zZ2lkICItbyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiLW8gZsOlciBlbmRhc3QgYW5nZXMgZW4gZ8OlbmciCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwODQKK21zZ2lkICItTyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiLU8gZsOlciBlbmRhc3QgYW5nZXMgZW4gZ8OlbmciCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrcyBjb3VudCAtICVzIgorbXNnc3RyICJmZWxha3RpZ3QgYW50YWwgcmVzZXJ2ZXJhZGUgYmxvY2sgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdWlkL3VzZXIgbmFtZSAtICVzIgorbXNnc3RyICJmZWxhZ3RpZ3QgdWlkL2FudsOkbmRhcm5hbW4gLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTE0NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICJmZWxha3RpZyBpbm9kc3N0b3JsZWsgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbm9kZSBzaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28tICVzIgorbXNnc3RyICJJbm9kc3N0b3JsZWsgbcOlc3RlIHZhcmEgZW4gbXVsdGlwZWwgYXYgdHbDpS0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibW1wX3VwZGF0ZV9pbnRlcnZhbCB0b28gYmlnOiAlbHVcbiIKK21zZ3N0ciAibW1wX3VwZGF0ZV9pbnRlcnZhbCDDpHIgZsO2ciBzdG9ydDogJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kXG4iCittc2dpZF9wbHVyYWwgIiIKKyJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHJbMF0gIiIKKyJTw6R0dGVyIHVwcGRhdGVyaW5nc2ludGVydmFsbCBmw7ZyIHNreWRkIG1vdCBmbGVyZmFsZGlnIG1vbnRlcmluZyB0aWxsICVsdSAiCisic2VrdW5kXG4iCittc2dzdHJbMV0gIiIKKyJTw6R0dGVyIHVwcGRhdGVyaW5nc2ludGVydmFsbCBmw7ZyIHNreWRkIG1vdCBmbGVyZmFsZGlnIG1vbnRlcmluZyB0aWxsICVsdSAiCisic2VrdW5kZXJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaWRlOiAlc1xuIgorbXNnc3RyICJPZ2lsdGlnIFJBSUQta2xpdjogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaXBlLXdpZHRoOiAlc1xuIgorbXNnc3RyICJPZ2lsdGlnIFJBSUQtcmVtc2JyZWRkOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaGFzaCBhbGdvcml0aG06ICVzXG4iCittc2dzdHIgIk9naWx0aWcgaGFzaC1hbGdvcml0bTogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gdG8gJXMgKCVkKVxuIgorbXNnc3RyICJTw6R0dGVyIHN0YW5kYXJkaGFzaGFsZ29yaXRtIHRpbGwgJXMgKCVkKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzMxCittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNoIGFsZ29yaXRobT5cbiIKKyJcdG1vdW50X29wdHM9PGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucz5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBjaHVuayBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZV93aWR0aD08UkFJRCBzdHJpZGUqZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorbXNnc3RyICIiCisiXG4iCisiRmVsYWt0aWdhIGZsYWdnb3IgYW5naXZuYS5cbiIKKyJcbiIKKyJVdMO2a2FkZSBmbGFnZ29yIHNlcGFyZXJhcyBtZWQga29tbWFuLCBvY2gga2FuIHRhIGV0dCBhcmd1bWVudCBzb20gYXZkZWxhcyAiCisibWVkXG4iCisiXHRldHQgbGlraGV0c3RlY2tlbiAoXCI9XCIpLlxuIgorIlxuIgorIkdpbHRpZ2EgdXTDtmthZGUgZmxhZ2dvciDDpHI6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNoLWFsZ29yaXRtPlxuIgorIiAgICAgICAgbW91bnRfb3B0cz08dXTDtmthZGUgc3RhbmRhcmRtb250ZXJpbmdzZmxhZ2dvcj5cbiIKKyJcdHN0cmlkZT08UkFJRC1zdHlja2VzdG9ybGVrIHBlciBkaXNrIGkgYmxvY2s+XG4iCisiXHRzdHJpcGVfd2lkdGg9PFJBSUQta2xpdsK3ZGF0YWRpc2thciBpIGJsb2NrPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0XnRlc3RfZnNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc5OAorbXNnaWQgIkZhaWxlZCB0byByZWFkIGlub2RlIGJpdG1hcFxuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgYXR0IGzDpHNhIGlub2RzYml0a2FydGFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgwMworbXNnaWQgIkZhaWxlZCB0byByZWFkIGJsb2NrIGJpdG1hcFxuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgYXR0IGzDpHNhIGJsb2NrYml0a2FydGFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyMCByZXNpemUvcmVzaXplMmZzLmM6OTMxCittc2dpZCAiYmxvY2tzIHRvIGJlIG1vdmVkIgorbXNnc3RyICJibG9jayBhdHQgZmx5dHRhIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODIzCittc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrIGJpdG1hcCB3aGVuIGluY3JlYXNpbmcgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICJLdW5kZSBpbnRlIGFsbG9rZXJhIGJsb2NrYml0a2FydGEgbsOkciBpbm9kc3N0b3JsZWtlbiDDtmthZGVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjkKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGluY3JlYXNlIGlub2RlIHNpemUgXG4iCittc2dzdHIgIkludGUgdGlsbHLDpGNrbGlndCBtZWQgdXRyeW1tZSBmw7ZyIGF0dCDDtmthIGlub2Rzc3Rvcmxla2VuIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODM0Cittc2dpZCAiRmFpbGVkIHRvIHJlbG9jYXRlIGJsb2NrcyBkdXJpbmcgaW5vZGUgcmVzaXplIFxuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgb21sb2thbGlzZXJhIGJsb2NrIHVuZGVyIHN0b3JsZWtzw6RuZHJpbmcgYXYgaW5vZGVyIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODY2Cittc2dpZCAiIgorIkVycm9yIGluIHJlc2l6aW5nIHRoZSBpbm9kZSBzaXplLlxuIgorIlJ1biBlMnVuZG8gdG8gdW5kbyB0aGUgZmlsZSBzeXN0ZW0gY2hhbmdlcy4gXG4iCittc2dzdHIgIiIKKyJGZWwgbsOkciBzdG9ybGVrZW4gcMOlIGlub2RlciDDpG5kcmFkZXMuXG4iCisiS8O2ciBlMnVuZG8gZsO2ciBhdHQgZ8O2cmEgZmlsc3lzdGVtc8OkbmRyaW5nYXJuYSBvZ2pvcmRhLiBcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTg5MworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGRiIGZpbGVuYW1lXG4iCittc2dzdHIgIkt1bmRlIGludGUgYWxsb2tlcmEgbWlubmUgZsO2ciB0ZGItZmlsbmFtblxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZWxldGUgJXMiCittc2dzdHIgInZpZCBmw7Zyc8O2ayBhdHQgdGEgYm9ydCAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gdW5kbyB0aGUgdHVuZTJmcyBvcGVyYXRpb24gcGxlYXNlIHJ1biB0aGUgY29tbWFuZFxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkbDtnIgYXR0IGfDtnJhIHR1bmUyZnMtb3BlcmF0aW9uZW4gb2dqb3JkLCBrw7ZyIGtvbW1hbmRvdFxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGJsb2NrIG1hZ2ljIGlzIGJhZC4gVHJ5IHRvIGZpeCBpdCBieSBydW5uaW5nOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCittc2dzdHIgIiIKKyJNTVAtYmxvY2tldHMgbWFnaXNrYSB0YWwgw6RyIGZlbGFrdGlndC4gIEbDtnJzw7ZrIGF0dCByw6R0dGEgZGV0IGdlbm9tIGF0dCAiCisia8O2cmE6XG4iCisiXCJlMmZzY2stZiAlc1wiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGlub2RlIHNpemUgaXMgYWxyZWFkeSAlbHVcbiIKK21zZ3N0ciAiSW5vZHNzdG9ybGVrZW4gw6RyIHJlZGFuICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDgxCittc2dpZCAiU2hyaW5raW5nIGlub2RlIHNpemUgaXMgbm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICJBdHQga3J5bXBhIGlub2Rzc3Rvcmxla2VuIHN0w7ZkanMgaW50ZVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaW5vZGUgc2l6ZSAlbHUgKG1heCAlZClcbiIKK21zZ3N0ciAiT2dpbHRpZyBpbm9kc3RvcmxlayAlbHUgKG1heCAlZClcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiU8OkdHRlciBtYXggYW50YWwgbW9udGVyaW5nYXIgdGlsbCAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3VycmVudCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICJTw6R0dGVyIGFrdHVlbGx0IGFudGFsIG1vbnRlcmluZ2FyIHRpbGwgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGVycm9yIGJlaGF2aW9yIHRvICVkXG4iCittc2dzdHIgIlPDpHR0ZXIgZmVsYmV0ZWVuZGUgdGlsbCAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGdpZCB0byAlbHVcbiIKK21zZ3N0ciAiU8OkdHRlciBnaWQgZsO2ciByZXNlcnZlcmFkZSBibG9jayB0aWxsICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgImludGVydmFsbCBtZWxsYW4ga29udHJvbGxlciDDpHIgZsO2ciBzdG9ydCAoJWx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGludGVydmFsIGJldHdlZW4gY2hlY2tzIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHIgIlPDpHR0ZXIgaW50ZXJ2YWxsIG1lbGxhbiBrb250cm9sbGVyIHRpbGwgJWx1IHNla3VuZGVyXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgcGVyY2VudGFnZSB0byAlZyUlICglbGx1IGJsb2NrcylcbiIKK21zZ3N0ciAiU8OkdHRlciBwcm9jZW50IHJlc2VydmVyYWRlIGJsb2NrIHRpbGwgJWcgJSUgKCVsbHUgYmxvY2spXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIGNvdW50IGlzIHRvbyBiaWcgKCVsbHUpIgorbXNnc3RyICJhbnRhbCByZXNlcnZlcmFkZSBibG9jayBmw7ZyIHN0b3J0ICglbGx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgIlPDpHR0ZXIgYW50YWwgcmVzZXJ2ZXJhZGUgYmxvY2sgdGlsbCAlbGx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxODcKK21zZ2lkICIiCisiXG4iCisiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgc3BhcnNlIHN1cGVyYmxvY2tzLlxuIgorbXNnc3RyICIiCisiXG4iCisiRmlsc3lzdGVtZXQgaGFyIHJlZGFuIGdsZXNhIHN1cGVyYmxvY2suXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxOTEKK21zZ2lkICIiCisiXG4iCisiU2V0dGluZyB0aGUgc3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBub3Qgc3VwcG9ydGVkXG4iCisiZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIG1ldGFfYmcgZmVhdHVyZSBlbmFibGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiQXR0IHPDpHR0YSBzdXBlcmJsb2NrZmxhZ2dhbiBnbGVzIHN0w7ZkanMgaW50ZVxuIgorImbDtnIgZmlsc3lzdGVtIG1lZCBmdW5rdGlvbmVuIG1ldGFfYmcgYWt0aXZlcmFkLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIHNldC4gICVzIgorbXNnc3RyICIiCisiXG4iCisiRmxhZ2dhbiBmw7ZyIGdsZXNhIHN1cGVyYmxvY2sgc2F0dC4gICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjA3Cittc2dpZCAiIgorIlxuIgorIkNsZWFyaW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOb2xsc3TDpGxsbmluZyBhdiBzdXBlcmJsb2Nrc2ZsYWdnYW4gZ2xlcyBzdMO2ZGpzIGludGUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB0aW1lIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRvICVzXG4iCittc2dzdHIgIlPDpHR0ZXIgdGlkcHVua3QgZsO2ciBzZW5hc3RlIGZpbHN5c3RlbXNrb250cm9sbCB0aWxsICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgdWlkIHRvICVsdVxuIgorbXNnc3RyICJTw6R0dGVyIHVpZCBmw7ZyIHJlc2VydmVyYWRlIGJsb2NrIHRpbGwgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNTMKK21zZ2lkICJFcnJvciBpbiB1c2luZyBjbGVhcl9tbXAuIEl0IG11c3QgYmUgdXNlZCB3aXRoIC1mXG4iCittc2dzdHIgIkZlbCB2aWQgYW52w6RuZG5pbmcgYXYgY2xlYXJfbW1wLiAgRGV0IG3DpXN0ZSBhbnbDpG5kYXMgbWVkIC1mXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNzEKK21zZ2lkICIiCisiVGhlIHF1b3RhIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiS3ZvdGFmdW5rdGlvbmVuIGthbiBlbmRhc3Qgw6RuZHJhcyBuw6RyIGZpbHN5c3RlbWV0IMOkciBvbW9udGVyYXQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyOTIKK21zZ2lkICJUaGUgVVVJRCBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICJVVUlEOm4gZsOlciBlbmRhc3Qgw6RuZHJhcyBuw6RyIGZpbHN5c3RlbWV0IMOkciBvbW9udGVyYXQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzMjIKK21zZ2lkICJJbnZhbGlkIFVVSUQgZm9ybWF0XG4iCittc2dzdHIgIk9naWx0aWd0IFVVSUQtZm9ybWF0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzMzcKK21zZ2lkICJOZWVkIHRvIHVwZGF0ZSBqb3VybmFsIHN1cGVyYmxvY2suXG4iCittc2dzdHIgIkJlaMO2dmVyIHVwcGRhdGVyYSBqb3VybmFsc3VwZXJibG9jay5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM1OAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIklub2Rzc3Rvcmxla2VuIGbDpXIgZW5kYXN0IMOkbmRyYXMgbsOkciBmaWxzeXN0ZW1ldCDDpHIgb21vbnRlcmF0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzY2Cittc2dpZCAiIgorIkNoYW5naW5nIHRoZSBpbm9kZSBzaXplIG5vdCBzdXBwb3J0ZWQgZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIGZsZXhfYmdcbiIKKyJmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKyJBdHQgw6RuZHJhIGlub2Rzc3RvcmxlayBzdMO2ZHMgaW50ZSBmw7ZyIGZpbHN5c3RlbSBtZWQgZnVua3Rpb25lbiBmbGV4X2JnXG4iCisiYWt0aXZlcmFkLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW5vZGUgc2l6ZSAlbHVcbiIKK21zZ3N0ciAiU8OkdHRlciBpbm9kc3N0b3JsZWsgdGlsbCAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM4MgorbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgYXR0IMOkbmRyYSBpbm9kc3N0b3JsZWtcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlkZSBzaXplIHRvICVkXG4iCittc2dzdHIgIlPDpHR0ZXIga2xpdnN0b3JsZWsgdGlsbCAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaXBlIHdpZHRoIHRvICVkXG4iCittc2dzdHIgIlPDpHR0ZXIgcmVtc2JyZWRkIHRpbGwgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucyB0byAnJXMnXG4iCittc2dzdHIgIlPDpHR0ZXIgdXTDtmthZGUgc3RhbmRhcmRtb250ZXJpbmdzZmxhZ2dvciB0aWxsIFwiJXNcIlxuIgorCisjOiBtaXNjL3V0aWwuYzo5MworbXNnaWQgIjxwcm9jZWVkaW5nPlxuIgorbXNnc3RyICI8Zm9ydHPDpHR0ZXI+XG4iCisKKyM6IG1pc2MvdXRpbC5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlByb2NlZWQgYW55d2F5IChvciB3YWl0ICVkIHNlY29uZHMpID8gKHksbikgIgorbXNnc3RyICJGb3J0c8OkdHQgw6RuZMOlIChlbGxlciB2w6RudGEgJWQgc2VrdW5kZXIpPyAoaixuKSAiCisKKyM6IG1pc2MvdXRpbC5jOjEwMQorbXNnaWQgIlByb2NlZWQgYW55d2F5PyAoeSxuKSAiCittc2dzdHIgIkZvcnRzw6R0dCDDpG5kw6U/IChqLG4pICIKKworIzogbWlzYy91dGlsLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0bGFzdCBtb3VudGVkIG9uICVzIG9uICVzIgorbXNnc3RyICJcdHNlbmFzdCBtb250ZXJhZCBww6UgJXMgcMOlICVzIgorCisjOiBtaXNjL3V0aWwuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vdW50ZWQgb24gJXMiCittc2dzdHIgIlx0c2VuYXN0IG1vbnRlcmFkIHDDpSAlcyIKKworIzogbWlzYy91dGlsLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0Y3JlYXRlZCBvbiAlcyIKK21zZ3N0ciAiXHRza2FwYWQgJXMiCisKKyM6IG1pc2MvdXRpbC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW9kaWZpZWQgb24gJXMiCittc2dzdHIgIlx0c2VuYXN0IG1vZGlmaWVyYWQgcMOlICVzIgorCisjOiBtaXNjL3V0aWwuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm91bmQgYSAlcyBwYXJ0aXRpb24gdGFibGUgaW4gJXNcbiIKK21zZ3N0ciAiSGl0dGFkZSBlbiAlcy1wYXJ0aXRpb25zdGFiZWxsIGkgJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBmaWxlICVzIGRvZXMgbm90IGV4aXN0IGFuZCBubyBzaXplIHdhcyBzcGVjaWZpZWQuXG4iCittc2dzdHIgIkZpbGVuICVzIGZpbm5zIGludGUgb2NoIGluZ2VuIHN0b3JsZWsgYW5nYXZzLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgcmVndWxhciBmaWxlICVzXG4iCittc2dzdHIgIlNrYXBhciBub3JtYWwgZmlsICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSDDtnBwbmEgJXM6ICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIxNgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZGV2aWNlIGFwcGFyZW50bHkgZG9lcyBub3QgZXhpc3Q7IGRpZCB5b3Ugc3BlY2lmeSBpdCBjb3JyZWN0bHk/XG4iCittc2dzdHIgIiIKKyJcbiIKKyJFbmhldGVuIGV4aXN0ZXJhciB1cHBlbmJhcmxpZ2VuIGludGU7IGFuZ2F2IGR1IGRlbiBrb3JyZWt0P1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIMOkciBpbnRlIGVuIGJsb2Nrc3BlY2lhbGVuaGV0LlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbSBsYWJlbGxlZCAnJXMnXG4iCittc2dzdHIgIiVzIGlubmVow6VsbGVyIGV0dCAlcy1maWxzeXN0ZW0gbWVkIGV0aWtldHRlbiDigJ0lc+KAnVxuIgorCisjOiBtaXNjL3V0aWwuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICIlcyBpbm5laMOlbGxlciBldHQgJXMtZmlsc3lzdGVtXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBlbnRpcmUgZGV2aWNlLCBub3QganVzdCBvbmUgcGFydGl0aW9uIVxuIgorbXNnc3RyICIlcyDDpHIgaGVsYSBlbmhldGVuLCBpbnRlIGJhcmEgZW4gcGFydGl0aW9uIVxuIgorCisjOiBtaXNjL3V0aWwuYzozMjMKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAibWtlMmZzIGZyYW10dmluZ2F0IMOkbmTDpS4gIEhvcHBhcyAvZXRjL210YWIgw6RyIGZlbGFrdGlnLlxuIgorCisjICVzIGthbiBibGkgImZpbHN5c3RlbSIgZWxsZXIgImpvdXJuYWwiLiAgSmFnIGhhciBsYWd0IHRpbGwgImVuIgorIyByZXNwZWt0aXZlICJldHQiIGkgw7Z2ZXJzw6R0dG5pbmdhcm5hIGF2IGRlc3NhIHN0csOkbmdhciBpc3TDpGxsZXQuCisjIEZlbHJhcHBvcnRlcmF0LgorIzogbWlzYy91dGlsLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IG1ha2UgYSAlcyBoZXJlIVxuIgorbXNnc3RyICJza2FwYXIgaW50ZSAlcyBow6RyIVxuIgorCisjOiBtaXNjL3V0aWwuYzozMzUKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAibWtlMmZzIGZyYW10dmluZ2FkIMOkbmTDpS5cbiIKKworIzogbWlzYy91dGlsLmM6MzUxCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIGpvdXJuYWwgb3B0aW9ucyFcbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBhbGxva2VyYSBtaW5uZSBmw7ZyIGF0dCB0b2xrYSBqb3VybmFsZmxhZ2dvciFcbiIKKworIzogbWlzYy91dGlsLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3QgZmluZCBqb3VybmFsIGRldmljZSBtYXRjaGluZyAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiS3VuZGUgaW50ZSBoaXR0YSBqb3VybmFsZW5oZXQgc29tIG1hdGNoYXIgJXNcbiIKKworIzogbWlzYy91dGlsLmM6NDAzCittc2dpZCAiIgorIlxuIgorIkJhZCBqb3VybmFsIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkpvdXJuYWwgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGpvdXJuYWwgb3B0aW9ucyBhcmU6XG4iCisiXHRzaXplPTxqb3VybmFsIHNpemUgaW4gbWVnYWJ5dGVzPlxuIgorIlx0ZGV2aWNlPTxqb3VybmFsIGRldmljZT5cbiIKKyJcdGxvY2F0aW9uPTxqb3VybmFsIGxvY2F0aW9uPlxuIgorIlxuIgorIlRoZSBqb3VybmFsIHNpemUgbXVzdCBiZSBiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGZpbGVzeXN0ZW0gYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiRmVsYWt0aWdhIGpvdXJuYWxmbGFnZ29yIGFuZ2l2bmEuXG4iCisiXG4iCisiSm91cm5hbGZsYWdnb3Igc2VwYXJlcmFzIG1lZCBrb21tYXRlY2tlbiwgb2NoIGthbiB0YSBldHQgYXJndW1lbnQgc29tXG4iCisiXHRhdmdyw6Ruc2FzIG1lZCBldHQgbGlraGV0c3RlY2tlbiAo4oCdPeKAnSkuXG4iCisiXG4iCisiR2lsdGlnYSBqb3VybmFsZmxhZ2dvciDDpHI6XG4iCisiXHRzaXplPTxqb3VybmFsc3RvcmxlayBpIG1lZ2FieXRlPlxuIgorIlx0ZW5oZXQ9PGpvdXJuYWxlbmhldD5cbiIKKyJcdGxvY2F0aW9uPTxqb3VybmFscGxhdHM+XG4iCisiXG4iCisiSm91cm5hbHN0b3JsZWtlbiBtw6VzdGUgdmFyYSBtZWxsYW4gMTAyNCBvY2ggMTAyNDAwMDAgZmlsc3lzdGVtc2Jsb2NrLlxuIgorIlxuIgorCisjOiBtaXNjL3V0aWwuYzo0MzQKK21zZ2lkICIiCisiXG4iCisiRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIgorbXNnc3RyICIiCisiXG4iCisiRmlsc3lzdGVtIGbDtnIgbGl0ZXQgZsO2ciBlbiBqb3VybmFsXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVGhlIHJlcXVlc3RlZCBqb3VybmFsIHNpemUgaXMgJWQgYmxvY2tzOyBpdCBtdXN0IGJlXG4iCisiYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBibG9ja3MuICBBYm9ydGluZy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkRlbiBiZWfDpHJkYSBqb3VybmFsc3Rvcmxla2VuIMOkciAlZCBibG9jazsgZGVuIG3DpXN0ZSB2YXJhXG4iCisibWVsbGFuIDEwMjQgb2NoIDEwMjQwMDAwIGJsb2NrLiAgQXZicnl0ZXIuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQ0OQorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIHNpemUgdG9vIGJpZyBmb3IgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkpvdXJuYWxzdG9ybGVrZW4gZsO2ciBzdG9yIGbDtnIgZmlsc3lzdGVtLlxuIgorCisjOiBtaXNjL3V0aWwuYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZXN5c3RlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hlY2tlZCBldmVyeSAlZCBtb3VudHMgb3JcbiIKKyIlZyBkYXlzLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuICBVc2UgdHVuZTJmcyAtYyBvciAtaSB0byBvdmVycmlkZS5cbiIKK21zZ3N0ciAiIgorIkRldHRhIGZpbHN5c3RlbSBrb21tZXIgYXV0b21hdGlza3Qga29udHJvbGxlcmFzIHZhciAlZCBtb250ZXJpbmcgZWxsZXJcbiIKKyIlZyBkYWcsIHZpbGtldCBzb20ga29tbWVyIGbDtnJzdC4gIEFudsOkbmQgdHVuZTJmcyAtYyBlbGxlciAtaSBmw7ZyIGF0dCDDpG5kcmEuXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0OQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1kXSBbLXAgcGlkZmlsZV0gWy1zIHNvY2tldHBhdGhdIFstVCB0aW1lb3V0XVxuIgorbXNnc3RyICJBbnbDpG5kbmluZzogJXMgWy1kXSBbLXAgcGlkLWZpbF0gWy1zIHV0dGFnc3PDtmt2w6RnXSBbLVQgdGlkc2dyw6Ruc11cbiIKKworIzogbWlzYy91dWlkZC5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyBbLXJ8dF0gWy1uIG51bV0gWy1zIHNvY2tldHBhdGhdXG4iCittc2dzdHIgIiAgICAgICAlcyBbLXJ8dF0gWy1uIGFudF0gWy1zIHNvY2tldHV0dGFnXVxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIC1rXG4iCittc2dzdHIgIiAgICAgICAlcyAta1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MTU1Cittc2dpZCAiYmFkIGFyZ3VtZW50cyIKK21zZ3N0ciAiZmVsYWt0aWdhIGFyZ3VtZW50IgorCisjOiBtaXNjL3V1aWRkLmM6MTczCittc2dpZCAiY29ubmVjdCIKK21zZ3N0ciAiYW5zbHV0IgorCisjOiBtaXNjL3V1aWRkLmM6MTkyCittc2dpZCAid3JpdGUiCittc2dzdHIgInNrcml2IgorCisjOiBtaXNjL3V1aWRkLmM6MjAwCittc2dpZCAicmVhZCBjb3VudCIKK21zZ3N0ciAibMOkc2FudGFsIgorCisjOiBtaXNjL3V1aWRkLmM6MjA2Cittc2dpZCAiYmFkIHJlc3BvbnNlIGxlbmd0aCIKK21zZ3N0ciAiZmVsYWt0aWcgc3ZhcnNsw6RuZ2QiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXVpZGQgZGFlbW9uIGFscmVhZHkgcnVubmluZyBhdCBwaWQgJXNcbiIKK21zZ3N0ciAidXVpZGQtZGVtb25lbiBzb20ga8O2cnMgcmVkYW4gbWVkIHBpZCAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIHNrYXBhIHVuaXgtc3Ryw7ZtdXR0YWc6ICVzIgorCisjOiBtaXNjL3V1aWRkLmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGJpbmQgdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIkt1bmRlIGludGUgYmluZGEgdW5peC11dHRhZyAlczogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsaXN0ZW4gb24gdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIkt1bmRlIGludGUgbHlzc25hIHDDpSB1bml4LXV0dGFnICVzOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgZnJvbSBjbGllbnQsIGxlbiA9ICVkXG4iCittc2dzdHIgIkZlbCB2aWQgbMOkc25pbmcgZnLDpW4ga2xpZW50LCBsZW4gPSAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZXJhdGlvbiAlZCwgaW5jb21pbmcgbnVtID0gJWRcbiIKK21zZ3N0ciAib3BlcmF0aW9uICVkLCBpbmtvbW1hbmRlIGFudCA9ICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRDogJXNcbiIKK21zZ3N0ciAiR2VuZXJlcmFkZSB0aWRzLVVVSUQ6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHJhbmRvbSBVVUlEOiAlc1xuIgorbXNnc3RyICJHZW5lcmVyYWRlIHNsdW1wbcOkc3NpZ3QgVVVJRDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCBzdWJzZXF1ZW50IFVVSURcbiIKK21zZ2lkX3BsdXJhbCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgJWQgc3Vic2VxdWVudCBVVUlEc1xuIgorbXNnc3RyWzBdICJHZW5lcmVyYWRlIHRpZHMtVVVJRCAlcyBvY2ggZWZ0ZXJmw7ZsamFuZGUgVVVJRFxuIgorbXNnc3RyWzFdICJHZW5lcmVyYWRlIHRpZHMtVVVJRCAlcyBvY2ggJWQgZWZ0ZXJmw7ZsamFuZGUgVVVJRDplclxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCAlZCBVVUlEJ3M6XG4iCittc2dzdHIgIkdlbmVyZXJhZGUgJWQgVVVJRDplcjpcbiIKKworIzogbWlzYy91dWlkZC5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiAlZFxuIgorbXNnc3RyICJPZ2lsdGlnIG9wZXJhdGlvbiAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDc3IG1pc2MvdXVpZGQuYzo0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlcjogJXNcbiIKK21zZ3N0ciAiRmVsYWt0aWd0IHRhbDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjUzNCBtaXNjL3V1aWRkLmM6NTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNhbGxpbmcgdXVpZGQgZGFlbW9uICglcyk6ICVzXG4iCittc2dzdHIgIkZlbCB2aWQgYW5yb3AgYXYgdXVpZGQtZGVtb25lbiAoJXMpOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFuZCBzdWJzZXF1ZW50IFVVSURcbiIKK21zZ2lkX3BsdXJhbCAiJXMgYW5kIHN1YnNlcXVlbnQgJWQgVVVJRHNcbiIKK21zZ3N0clswXSAiJXMgb2NoIGVmdGVyZsO2bGphbmRlIFVVSURcbiIKK21zZ3N0clsxXSAiJXMgb2NoIGVmdGVyZsO2bGphbmRlICVkIFVVSUQ6ZXJcbiIKKworIzogbWlzYy91dWlkZC5jOjU0OAorbXNnaWQgIkxpc3Qgb2YgVVVJRCdzOlxuIgorbXNnc3RyICJMaXN0YSDDtnZlciBVVUlEOmVyOlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgcmVwbHkgbGVuZ3RoIGZyb20gc2VydmVyICVkXG4iCittc2dzdHIgIk92w6RudGFkIHN2YXJzbMOkbmdkIGZyw6VuIHNlcnZlcm4gJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBraWxsIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkOiAlc1xuIgorbXNnc3RyICJLdW5kZSBpbnRlIGTDtmRhIHV1aWRkIHNvbSBrw7ZyIG1lZCBwaWQgJWQ6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiS2lsbGVkIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkXG4iCittc2dzdHIgIkTDtmRhZGUgdXVpZGQgc29tIGvDtnJkZSBtZWQgcGlkICVkXG4iCisKKyM6IG1pc2MvdXVpZGdlbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJdIFstdF1cbiIKK21zZ3N0ciAiQW52w6RuZG5pbmc6ICVzIFstcl0gWy10XVxuIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAyCittc2dpZCAiIyBFeHRlbnQgZHVtcDpcbiIKK21zZ3N0ciAiIyBPbXLDpWRlc2R1bXA6XG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iCittc2dzdHIgIiNcdEFudGFsPSVsbHUsIFN0b3JsZWs9JWxsdSwgTWFya8O2cj0lbGx1LCBTb3J0ZXJhZD0lbGx1XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBkZXZpY2UgW25ld19zaXplXVxuIgorIlxuIgorbXNnc3RyICIiCisiQW52w6RuZG5pbmc6ICVzIFstZCBmZWxzw7ZrbmluZ2ZsYWdnb3JdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBlbmhldCAiCisiW255X3N0b3JsZWtdXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NjYKK21zZ2lkICJFeHRlbmRpbmcgdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJVdMO2a2FyIGlub2RzdGFiZWxsZW4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NjkKK21zZ2lkICJSZWxvY2F0aW5nIGJsb2NrcyIKK21zZ3N0ciAiRmx5dHRhciBvbSBibG9jayIKKworIzogcmVzaXplL21haW4uYzo3MgorbXNnaWQgIlNjYW5uaW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJTw7ZrZXIgaWdlbm9tIGlub2RzdGFiZWxsIgorCisjOiByZXNpemUvbWFpbi5jOjc1Cittc2dpZCAiVXBkYXRpbmcgaW5vZGUgcmVmZXJlbmNlcyIKK21zZ3N0ciAiVXBwZGF0ZXJhciBpbm9kc3JlZmVyZW5zZXIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzgKK21zZ2lkICJNb3ZpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIkZseXR0YXIgaW5vZHN0YWJlbGwiCisKKyM6IHJlc2l6ZS9tYWluLmM6ODEKK21zZ2lkICJVbmtub3duIHBhc3M/IT8iCittc2dzdHIgIk9rw6RudCBwYXNzPyE/IgorCisjOiByZXNpemUvbWFpbi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZ2luIHBhc3MgJWQgKG1heCA9ICVsdSlcbiIKK21zZ3N0ciAiQsO2cmphIHBhc3MgJWQgKG1heCA9ICVsdSlcbiIKKworIzogcmVzaXplL21haW4uYzoxNTUKK21zZ2lkICIiCisiXG4iCisiUmVzaXppbmcgYmlnYWxsb2MgZmlsZSBzeXN0ZW1zIGhhcyBub3QgYmVlbiBmdWxseSB0ZXN0ZWQuICBQcm9jZWVkIGF0XG4iCisieW91ciBvd24gcmlzayEgIFVzZSB0aGUgZm9yY2Ugb3B0aW9uIGlmIHlvdSB3YW50IHRvIGdvIGFoZWFkIGFueXdheS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkF0dCDDpG5kcmEgc3RvcmxlayBww6UgYmlnYWxsb2MtZmlsc3lzdGVtIGhhciBpbnRlIHRlc3RhdHMgZnVsbHQgdXQuXG4iCisiRm9ydHPDpHR0IHDDpSBlZ2VuIHJpc2shICBBbnbDpG5kIGRlbiB0dmluZ2FuZGUgZmxhZ2dhbiBvbSBkdSB2aWxsIGfDtnJhXG4iCisiZGV0IMOkbmTDpS5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyIKK21zZ3N0ciAibsOkciAlcyDDtnBwbmFkZXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGdldHRpbmcgc3RhdCBpbmZvcm1hdGlvbiBmb3IgJXMiCittc2dzdHIgIm7DpHIgc3RhdHVzaW5mb3JtYXRpb24gZsO2ciAlcyBow6RtdGFkZXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWYgJXMnIGZpcnN0LlxuIgorIlxuIgorbXNnc3RyICIiCisiS8O2ciBcImUyZnNjayAtZiAlc1wiIGbDtnJzdC5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXN0aW1hdGVkIG1pbmltdW0gc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbTogJWxsdVxuIgorbXNnc3RyICJVcHBza2F0dGFkIG1pbnN0YSBzdG9ybGVrIHDDpSBmaWxzeXN0ZW1ldDogJWxsdVxuIgorCisjOiByZXNpemUvbWFpbi5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG5ldyBzaXplOiAlc1xuIgorbXNnc3RyICJPZ2lsdGlnIG55IHN0b3JsZWs6ICVzXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDIxCittc2dpZCAiTmV3IHNpemUgdG9vIGxhcmdlIHRvIGJlIGV4cHJlc3NlZCBpbiAzMiBiaXRzXG4iCittc2dzdHIgIk55IHN0b3JsZWsgZsO2ciBzdG9yIGbDtnIgYXR0IHV0dHJ5Y2thcyBpIDMyIGJpdGFyXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5ldyBzaXplIHNtYWxsZXIgdGhhbiBtaW5pbXVtICglbGx1KVxuIgorbXNnc3RyICJOeSBzdG9ybGVrIG1pbmRyZSDDpG4gbWluaW11bSAoJWxsdSlcbiIKKworIzogcmVzaXplL21haW4uYzo0MzUKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBsZW5ndGgiCittc2dzdHIgIk9naWx0aWcgc3RyaWRlLWzDpG5nZCIKKworIzogcmVzaXplL21haW4uYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb250YWluaW5nIHBhcnRpdGlvbiAob3IgZGV2aWNlKSBpcyBvbmx5ICVsbHUgKCVkaykgYmxvY2tzLlxuIgorIllvdSByZXF1ZXN0ZWQgYSBuZXcgc2l6ZSBvZiAlbGx1IGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRlbiByeW1tYW5kZSBwYXJ0aXRpb25lbiAoZWxsZXIgZW5oZXRlbikgw6RyIGJhcmEgJWxsdSAoJWQgaykgYmxvY2suXG4iCisiRHUgYmVnw6RyZGUgZW4gbnkgc3RvcmxlayBww6UgJWxsdSBibG9jay5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIGlzIGFscmVhZHkgJWxsdSAoJWRrKSBibG9ja3MgbG9uZy4gIE5vdGhpbmcgdG8gZG8hXG4iCisiXG4iCittc2dzdHIgIiIKKyJGaWxzeXN0ZW1ldCDDpHIgcmVkYW4gJWxsdSAoJWQgaykgYmxvY2sgbMOlbmd0LiAgSW5nZXQgYmVow7Z2ZXIgZ8O2cmFzIVxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiw4RuZHJhciBzdG9ybGVrIHDDpSBmaWxzeXN0ZW1ldCBww6UgJXMgdGlsbCAlbGx1ICglZCBrKSBibG9jay5cbiIKKworIzogcmVzaXplL21haW4uYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlc2l6ZSAlcyIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCDDpG5kcmEgc3RvcmxlayBww6UgJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWZ5ICVzJyB0byBmaXggdGhlIGZpbGVzeXN0ZW1cbiIKKyJhZnRlciB0aGUgYWJvcnRlZCByZXNpemUgb3BlcmF0aW9uLlxuIgorbXNnc3RyICIiCisiS8O2ciBcImUyZnNjayAtZnkgJXNcIiBmw7ZyIGF0dCBsYWdhIGZpbHN5c3RlbWV0XG4iCisiZWZ0ZXIgZGVuIGF2YnJ1dG5hIHN0b3JsZWtzw6RuZHJpbmdlbi5cbiIKKworIzogcmVzaXplL21haW4uYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIG9uICVzIGlzIG5vdyAlbGx1ICglZGspIGJsb2NrcyBsb25nLlxuIgorIlxuIgorbXNnc3RyICIiCisiRmlsc3lzdGVtZXQgcMOlICVzIMOkciBudSAlbGx1ICglZCBrKSBibG9jayBsw6VuZ3QuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byB0cnVuY2F0ZSAlcyIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCBrb3J0YSBhdiAlcyIKKworIzogcmVzaXplL29ubGluZS5jOjgyCittc2dpZCAia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6ZSB3aXRoIHNwYXJzZV9zdXBlcjIiCittc2dzdHIgIkvDpHJuYW4gc3TDtmRqZXIgaW50ZSBzdG9ybGVrc8OkbmRyaW5nIHVwcGtvcHBsYXQgbWVkIHNwYXJzZV9zdXBlcjIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4NworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXM7IG9uLWxpbmUgcmVzaXppbmcgcmVxdWlyZWRcbiIKK21zZ3N0ciAiRmlsc3lzdGVtIHDDpSAlcyDDpHIgbW9udGVyYXQgcMOlICVzLCBvbi1saW5lLXN0b3JsZWtzw6RuZHJpbmcga3LDpHZzXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo5MQorbXNnaWQgIk9uLWxpbmUgc2hyaW5raW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkF0dCBrcnltcGEgdXBwa29wcGxhdCBzdMO2ZGpzIGludGUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTYKK21zZ2lkICJGaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBzdMO2ZGplciBpbnRlIHN0b3JsZWtzw6RuZHJpbmcgdXBwa29wcGxhdCIKKworIzogcmVzaXplL29ubGluZS5jOjEyNQorbXNnaWQgIk5vdCBlbm91Z2ggcmVzZXJ2ZWQgZ2R0IGJsb2NrcyBmb3IgcmVzaXppbmciCittc2dzdHIgIkludGUgdGlsbHLDpGNrbGlndCBtZWQgcmVzZXJ2ZXJhZGUgZ2R0LWJsb2NrIGbDtnIgc3Rvcmxla3PDpG5kcmluZyIKKworIzogcmVzaXplL29ubGluZS5jOjEzMgorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHJlc2l6aW5nIGEgZmlsZSBzeXN0ZW0gdGhpcyBsYXJnZSIKK21zZ3N0ciAiS8Okcm5hbiBzdMO2ZGplciBpbnRlIMOkbmRyaW5nIGF2IHN0b3JsZWsgcMOlIHPDpSBzdG9yYSBmaWxzeXN0ZW0iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gbW91bnRwb2ludCAlcyIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCDDtnBwbmEgbW9udGVyaW5nc3B1bmt0ICVzIgorCisjOiByZXNpemUvb25saW5lLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIk9sZCByZXNpemUgaW50ZXJmYWNlIHJlcXVlc3RlZC5cbiIKK21zZ3N0ciAiR2FtbWFsdCBncsOkbnNzbml0dCBmw7ZyIHN0b3JsZWtzw6RuZHJpbmcgYmVnw6RydC5cbiIKKworIzogcmVzaXplL29ubGluZS5jOjE2NCByZXNpemUvb25saW5lLmM6MTgxCittc2dpZCAiUGVybWlzc2lvbiBkZW5pZWQgdG8gcmVzaXplIGZpbGVzeXN0ZW0iCittc2dzdHIgIlLDpHR0aWdoZXQgYXR0IMOkbmRyYSBzdG9ybGVrIHDDpSBmaWxzeXN0ZW0gbmVrYXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNjcgcmVzaXplL29ubGluZS5jOjE4NworbXNnaWQgIldoaWxlIGNoZWNraW5nIGZvciBvbi1saW5lIHJlc2l6aW5nIHN1cHBvcnQiCittc2dzdHIgIlZpZCBrb250cm9sbCBhdiBzdMO2ZCBmw7ZyIHN0b3JsZWtzw6RuZHJpbmcgdXBwa29wcGxhdCIKKworIzogcmVzaXplL29ubGluZS5jOjE4NAorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiS8Okcm5hbiBzdMO2ZGplciBpbnRlIHN0b3JsZWtzw6RuZHJpbmcgdXBwa29wcGxhdCIKKworIzogcmVzaXplL29ubGluZS5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICJQZXJmb3JtaW5nIGFuIG9uLWxpbmUgcmVzaXplIG9mICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICJVdGbDtnIgZW4gc3Rvcmxla3PDpG5kcmluZyBvbi1saW5lIGF2ICVzIHRpbGwgJWxsdSAoJWQgaykgYmxvY2suXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMzMKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gZXh0ZW5kIHRoZSBsYXN0IGdyb3VwIgorbXNnc3RyICJWaWQgZsO2cnPDtmsgYXR0IHV0w7ZrYSBkZW4gc2lzdGEgZ3J1cHBlbiIKKworIzogcmVzaXplL29ubGluZS5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gYWRkIGdyb3VwICMlZCIKK21zZ3N0ciAiVmlkIGbDtnJzw7ZrIGF0dCDDtnBwbmEgZ3J1cHAgbnIuICVkIgorCisjOiByZXNpemUvb25saW5lLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXMsIGFuZCBvbi1saW5lIHJlc2l6aW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gIgorInRoaXMgc3lzdGVtLlxuIgorbXNnc3RyICIiCisiRmlsc3lzdGVtZXQgcMOlICVzIMOkciBtb250ZXJhdCBww6UgJXMsIG9jaCBzdG9ybGVrc8OkbmRyaW5nIG9uLWxpbmUgc3TDtmRzIGludGUgIgorInDDpSBkZXR0YSBzeXN0ZW0uXG4iCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5vZGVzICglbGx1KSBtdXN0IGJlIGxlc3MgdGhhbiAldSIKK21zZ3N0ciAiaW5vZGVyICglbGx1KSBtw6VzdGUgdmFyYSBtaW5kcmUgw6RuICV1IgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6NjkxCittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIgorbXNnc3RyICJyZXNlcnZlcmFkZSBibG9jayIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjkzNgorbXNnaWQgIm1ldGEtZGF0YSBibG9ja3MiCittc2dzdHIgIm1ldGFkYXRhYmxvY2siCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoxMDM5IHJlc2l6ZS9yZXNpemUyZnMuYzoxODM2Cittc2dpZCAibmV3IG1ldGEgYmxvY2tzIgorbXNnc3RyICJueWEgbWV0YWJsb2NrIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjA1NgorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW4hICBObyBzYiBpbiBsYXN0IHN1cGVyX3NwYXJzZSBiZz9cbiIKK21zZ3N0ciAiQm9yZGUgYWxkcmlnIGjDpG5kYSEgIEluZ2VuIHNiIGkgc2lzdGEgc3VwZXJfc3BhcnNlIGJnP1xuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjA2MQorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW4hICBVbmV4cGVjdGVkIG9sZF9kZXNjIGluIHN1cGVyX3NwYXJzZSBiZz9cbiIKK21zZ3N0ciAiQm9yZGUgYWxkcmlnIGjDpG5kYSEgIE92w6RudGFkIG9sZF9kZXNjIGkgc3VwZXJfc3BhcnNlIGJnP1xuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjEzOQorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW46IHJlc2l6ZSBpbm9kZSBjb3JydXB0IVxuIgorbXNnc3RyICJTa3VsbGUgYWxkcmlnIGludHLDpGZmYTogc3Rvcmxla3PDpG5kcmluZ3Npbm9kZW4gdHJhc2lnIVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEKKyMsIGZ1enp5Cittc2dpZCAiRVhUMkZTIExpYnJhcnkgdmVyc2lvbiAxLjQyLjEzIgorbXNnc3RyICJFWFQyRlMtYmlibGlvdGVrIHZlcnNpb24gMS40Mi4xMiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyX2ZpbHN5cyBzdHJ1Y3R1cmUiCittc2dzdHIgIkZlbCBtYWdpc2t0IHRhbCBmw7ZyIGV4dDJfZmlsc3lzLXBvc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICJGZWwgbWFnaXNrdCB0YWwgZsO2ciBiYWRibG9ja3NfbGlzdC1wb3N0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19pdGVyYXRlIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgdGFsIGbDtnIgYmFkYmxvY2tzX2l0ZXJhdGUtcG9zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9zY2FuIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgdGFsIGbDtnIgaW5vZGVfc2Nhbi1wb3N0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJGZWwgbWFnaXNrdCB0YWwgZsO2ciBpb19jaGFubmVsLXBvc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdW5peCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgdGFsIGbDtnIgdW5peC1pb19jaGFubmVsLXBvc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fbWFuYWdlciBzdHJ1Y3R1cmUiCittc2dzdHIgIkZlbCBtYWdpc2t0IHRhbCBmw7ZyIGlvX21hbmFnZXItcG9zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBibG9ja19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICJGZWwgbWFnaXNrdCB0YWwgZsO2ciBibG9ja19iaXRtYXAtcG9zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICJGZWwgbWFnaXNrdCB0YWwgZsO2ciBpbm9kZV9iaXRtYXAtcG9zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBnZW5lcmljX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZlbCBtYWdpc2t0IHRhbCBmw7ZyIGdlbmVyaWNfYml0bWFwLXBvc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdGVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgdGFsIGbDtnIgdGVzdCBpb19jaGFubmVsLXBvc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZGlyZWN0b3J5IGJsb2NrIGxpc3Qgc3RydWN0dXJlIgorbXNnc3RyICJGZWwgbWFnaXNrdCB0YWwgZsO2ciBrYXRhbG9nZW5ibG9ja2xpc3RlcG9zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpY291bnQgc3RydWN0dXJlIgorbXNnc3RyICJGZWwgbWFnaXNrdCB0YWwgZsO2ciBpY291bnQtcG9zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBQb3dlcnF1ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJGZWwgbWFnaXNrdCB0YWwgZsO2ciBQb3dlclF1ZXN0LWlvX2NoYW5uZWwtcG9zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyIGZpbGUgc3RydWN0dXJlIgorbXNnc3RyICJGZWwgbWFnaXNrdCB0YWwgZsO2ciBleHQyLWZpbHN0cnVrdHVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIEV4dDIgSW1hZ2UgSGVhZGVyIgorbXNnc3RyICJGZWwgbWFnaXNrdCB0YWwgZsO2ciBleHQyLWF2YmlsZHNodXZ1ZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZSBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgdGFsIGbDtnIgaW5vZHMtaW9fY2hhbm5lbC1wb3N0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IGhhbmRsZSIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgdGFsIGbDtnIgZXh0NC11dHN0csOkY2tuaW5nc2hhbmR0YWciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyBudW1iZXIgaW4gc3VwZXItYmxvY2siCittc2dzdHIgIkZlbCBtYWdpc2t0IHRhbCBpIHN1cGVyYmxvY2tldCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMxCittc2dpZCAiRmlsZXN5c3RlbSByZXZpc2lvbiB0b28gaGlnaCIKK21zZ3N0ciAiRmlsZXN5c3RlbXZlcnNpb25lbiDDpHIgZsO2ciBow7ZnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzIKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHRvIGZpbGVzeXN0ZW0gb3BlbmVkIHJlYWQtb25seSIKK21zZ3N0ciAiRsO2cnPDtmsgYXR0IHNrcml2YSB0aWxsIGV0dCBmaWxzeXN0ZW0gw7ZwcG5hdCBza3JpdnNreWRkYXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMworbXNnaWQgIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIkthbiBpbnRlIGzDpHNhIGdydXBwYmVza3JpdmFyZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIkthbiBpbnRlIHNrcml2YSBncnVwcGJlc2tyaXZhcmUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNQorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBibG9jayBiaXRtYXAiCittc2dzdHIgIlRyYXNpZyBncnVwcGJlc2tyaXZhcmU6IGZlbGFrdGlndCBibG9jayBmw7ZyIGJsb2NrYml0a2FydGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNgorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSBiaXRtYXAiCittc2dzdHIgIlRyYXNpZyBncnVwcGJlc2tyaXZhcmU6IGZlbGFrdGlndCBibG9jayBmw7ZyIGlub2RzYml0a2FydGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNworbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiVHJhc2lnIGdydXBwYmVza3JpdmFyZTogZMOlbGlndCBibG9jayBmw7ZyIGlub2RzdGFiZWxsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzgKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIkthbiBpbnRlIHNrcml2YSBlbiBpbm9kc2JpdGthcnRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiS2FuIGludGUgbMOkc2EgZW4gaW5vZHNiaXRrYXJ0YSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQwCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYSBibG9jayBiaXRtYXAiCittc2dzdHIgIkthbiBpbnRlIHNrcml2YSBlbiBibG9ja2JpdGthcnRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDEKK21zZ2lkICJDYW4ndCByZWFkIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICJLYW4gaW50ZSBsw6RzYSBlbiBibG9ja2JpdGthcnRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDIKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiS2FuIGludGUgc2tyaXZhIGVuIGlub2RzdGFiZWxsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDMKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJLYW4gaW50ZSBsw6RzYSBlbiBpbm9kc3RhYmVsbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ0Cittc2dpZCAiQ2FuJ3QgcmVhZCBuZXh0IGlub2RlIgorbXNnc3RyICJLYW4gaW50ZSBsw6RzYSBuw6RzdGEgaW5vZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ1Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5leHBlY3RlZCBibG9jayBzaXplIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBoYXIgb3bDpG50YWQgYmxvY2tzdG9ybGVrLiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ2Cittc2dpZCAiRVhUMiBkaXJlY3RvcnkgY29ycnVwdGVkIgorbXNnc3RyICJFWFQyLWthdGFsb2cgc2thZGFkIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDcKK21zZ2lkICJBdHRlbXB0IHRvIHJlYWQgYmxvY2sgZnJvbSBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHJlYWQiCittc2dzdHIgIkbDtnJzw7ZrIGF0dCBsw6RzYSBibG9jayBmcsOlbiBmaWxzeXN0ZW1ldCByZXN1bHRlcmFkZSBpIGVuIGtvcnQgbMOkc25pbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgYmxvY2sgdG8gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCB3cml0ZSIKK21zZ3N0ciAiIgorIkbDtnJzw7ZrIGF0dCBza3JpdmEgYmxvY2sgdGlsbCBmaWxzeXN0ZW1ldCByZXN1bHRlcmFkZSBpIGVuIGtvcnQgc2tyaXZuaW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDkKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIHRoZSBkaXJlY3RvcnkiCittc2dzdHIgIkluZ2V0IGxlZGlndCB1dHJ5bW1lIGkga2F0YWxvZ2VuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTAKK21zZ2lkICJJbm9kZSBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiSW5vZHNiaXRrYXJ0YW4gaW50ZSBpbmzDpHN0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKK21zZ2lkICJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiQmxvY2tiaXRrYXJ0YW4gaW50ZSBpbmzDpHN0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTIKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciIKK21zZ3N0ciAiT3RpbGzDpXRldCBpbm9kc251bW1lciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUzCittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIiCittc2dzdHIgIk90aWxsw6V0ZXQgYmxvY2tudW1tZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NAorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIgorbXNnc3RyICJJbnRlcm50IGZlbCBpIGV4dDJmc19leHBhbmRfZGlyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTUKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGJ1aWxkIHByb3Bvc2VkIGZpbGVzeXN0ZW0iCittc2dzdHIgIkludGUgdGlsbHLDpGNrbGlndCBtZWQgdXRyeW1tZSBmw7ZyIGF0dCBieWdnYSBkZXQgZsO2cmVzbGFnbmEgZmlsc3lzdGVtZXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NgorbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIk90aWxsw6V0ZXQgYmxvY2tudW1tZXIgc2tpY2thdCB0aWxsIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU3Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICJPdGlsbMOldGV0IGJsb2NrbnVtbWVyIHNraWNrYXQgdGlsbCBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiT3RpbGzDpXRldCBibG9ja251bW1lciBza2lja2F0IHRpbGwgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTkKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICJPdGlsbMOldGV0IGlub2RzbnVtbWVyIHNraWNrYXQgdGlsbCBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MAorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiT3RpbGzDpXRldCBpbm9kc251bW1lciBza2lja2F0IHRpbGwgZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCittc2dzdHIgIk90aWxsw6V0ZXQgaW5vZHNudW1tZXIgc2tpY2thdCB0aWxsIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYyCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgYmxvY2sgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICIiCisiRsO2cnPDtmsgYXR0IGZ1c2thIHRpbGwgc2x1dGV0IGF2IGJsb2NrYml0a2FydGFuIGJvcnRvbSBkZXQgcmlrdGlnYSBzbHV0ZXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MworbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGlub2RlIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiIgorIkbDtnJzw7ZrIGF0dCBmdXNrYSB0aWxsIHNsdXRldCBhdiBpbm9kc2JpdGthcnRhbiBib3J0b20gZGV0IHJpa3RpZ2Egc2x1dGV0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjQKK21zZ2lkICJJbGxlZ2FsIGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICJPdGlsbMOldGV0IGluZGlyZWt0YmxvY2sgaGl0dGF0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKK21zZ2lkICJJbGxlZ2FsIGRvdWJseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiT3RpbGzDpXRldCBkdWJiZWx0IGluZGlyZWt0YmxvY2sgaGl0dGF0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjYKK21zZ2lkICJJbGxlZ2FsIHRyaXBseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiT3RpbGzDpXRldCB0cmlwcGVsdCBpbmRpcmVrdGJsb2NrIGhpdHRhdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY3Cittc2dpZCAiQmxvY2sgYml0bWFwcyBhcmUgbm90IHRoZSBzYW1lIgorbXNnc3RyICJCbG9ja2JpdGthcnRvcm5hIMOkciBpbnRlIGRlc2FtbWEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OAorbXNnaWQgIklub2RlIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiSW5vZHNiaXRrYXJ0b3JuYSDDpHIgaW50ZSBkZXNhbW1hIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjkKK21zZ2lkICJJbGxlZ2FsIG9yIG1hbGZvcm1lZCBkZXZpY2UgbmFtZSIKK21zZ3N0ciAiT3RpbGzDpXRldCBlbGxlciBmZWxmb3JtYXQgZW5oZXRzbmFtbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcwCittc2dpZCAiQSBibG9jayBncm91cCBpcyBtaXNzaW5nIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJFbiBibG9ja2dydXBwIHNha25hciBlbiBpbm9kc3RhYmVsbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcxCittc2dpZCAiVGhlIGV4dDIgc3VwZXJibG9jayBpcyBjb3JydXB0IgorbXNnc3RyICJFeHQyLXN1cGVyYmxvY2tldCDDpHIgc2thZGF0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzIKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIk90aWxsw6V0ZXQgZ2VuZXJpc2t0IGJpdHRhbCBza2lja2F0IHRpbGwgZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MworbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICJPdGlsbMOldGV0IGdlbmVyaXNrdCBiaXR0YWwgc2tpY2thdCB0aWxsIGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NAorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiT3RpbGzDpXRldCBnZW5lcmlza3QgYml0dGFsIHNraWNrYXQgdGlsbCBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc1Cittc2dpZCAiVG9vIG1hbnkgc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQuIgorbXNnc3RyICJBbGx0ZsO2ciBtw6VuZ2Egc3ltYm9saXNrYSBsw6Rua2FyIHDDpXRyw6RmZmFkZS4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NgorbXNnaWQgIlRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIG5vdCBoYW5kbGUgdGhpcyBjYXNlIgorbXNnc3RyICLDhXRlcmFucm9wc2Z1bmt0aW9uZW4ga29tbWVyIGludGUgYXR0IGhhbnRlcmEgZGV0dGEgZmFsbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc3Cittc2dpZCAiVGhlIGlub2RlIGlzIGZyb20gYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJJbm9kZW4gw6RyIGZyw6VuIGV0dCBkw6VsaWd0IGJsb2NrIGkgaW5vZHN0YWJlbGxlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc4Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKSIKK21zZ3N0ciAiRmlsc3lzdGVtZXQgaGFyIGZ1bmt0aW9uZXIgc29tIGludGUgc3TDtmRqcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc5Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgcmVhZC1vbmx5IGZlYXR1cmUocykiCittc2dzdHIgIkZpbHN5c3RlbWV0IGhhciBlbmRhc3QtbMOkc2JhcnQtZnVua3Rpb25lciBzb20gaW50ZSBzdMO2ZGpzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODAKK21zZ2lkICJJTyBDaGFubmVsIGZhaWxlZCB0byBzZWVrIG9uIHJlYWQgb3Igd3JpdGUiCittc2dzdHIgIklPLWthbmFsZW4gbWlzc2x5Y2thZGVzIHPDtmthIHZpZCBsw6RzbmluZyBlbGxlciBza3Jpdm5pbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MQorbXNnaWQgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiTWlubmVzYWxsb2tlcmluZyBtaXNzbHlja2FkZXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSIKK21zZ3N0ciAiT2dpbHRpZ3QgYXJndW1lbnRldCBza2lja2F0IHRpbGwgZXh0Mi1iaWJsaW90ZWtldCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgzCittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGJsb2NrIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiS3VuZGUgaW50ZSBhbGxva2VyYSBibG9jayBpIGV4dDItZmlsc3lzdGVtIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODQKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgaW5vZGUgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJLdW5kZSBpbnRlIGFsbG9rZXJhIGlub2RlciBpIGV4dDItZmlsc3lzdGVtIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODUKK21zZ2lkICJFeHQyIGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiRXh0Mi1pbm9kIMOkciBpbnRlIGVuIGthdGFsb2ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NgorbXNnaWQgIlRvbyBtYW55IHJlZmVyZW5jZXMgaW4gdGFibGUiCittc2dzdHIgIkbDtnIgbcOlbmdhIHJlZmVyZW5zZXIgaSB0YWJlbGxlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg3Cittc2dpZCAiRmlsZSBub3QgZm91bmQgYnkgZXh0Ml9sb29rdXAiCittc2dzdHIgIkZpbGVuIGhpdHRhZGVzIGludGUgYXYgZXh0Ml9sb29rdXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OAorbXNnaWQgIkZpbGUgb3BlbiByZWFkLW9ubHkiCittc2dzdHIgIkZpbGVuIMO2cHBuYXMgc2tyaXZza3lkZGFkIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODkKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCittc2dzdHIgIkV4dDIta2F0YWxvZ2Jsb2NrIGhpdHRhZGVzIGludGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MAorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFeHQyLWthdGFsb2dlbiBmaW5ucyByZWRhbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkxCittc2dpZCAiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iCittc2dzdHIgIk9pbXBsZW1lbnRlcmFkIGV4dDItYmlibGlvdGVrc2Z1bmt0aW9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTIKK21zZ2lkICJVc2VyIGNhbmNlbCByZXF1ZXN0ZWQiCittc2dzdHIgIkFudsOkbmRhcmFubnVsbGVyaW5nIGJlZ8OkcmQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MworbXNnaWQgIkV4dDIgZmlsZSB0b28gYmlnIgorbXNnc3RyICJFeHQyLWZpbCBmw7ZyIHN0b3IiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NAorbXNnaWQgIlN1cHBsaWVkIGpvdXJuYWwgZGV2aWNlIG5vdCBhIGJsb2NrIGRldmljZSIKK21zZ3N0ciAiQW5naXZlbiBqb3VybmFsZW5oZXQgw6RyIGludGUgZW4gYmxvY2tlbmhldCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk1Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiSm91cm5hbHN1cGVyYmxvY2sgaW50ZSBmdW5uZXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NgorbXNnaWQgIkpvdXJuYWwgbXVzdCBiZSBhdCBsZWFzdCAxMDI0IGJsb2NrcyIKK21zZ3N0ciAiSm91cm5hbGVuIG3DpXN0ZSB2YXJhIG1pbnN0IDEwMjQgYmxvY2siCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NworbXNnaWQgIlVuc3VwcG9ydGVkIGpvdXJuYWwgdmVyc2lvbiIKK21zZ3N0ciAiRWogc3TDtmRkIGpvdXJuYWx2ZXJzaW9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTgKK21zZ2lkICJFcnJvciBsb2FkaW5nIGV4dGVybmFsIGpvdXJuYWwiCittc2dzdHIgIkZlbCB2aWQgbMOkc25pbmcgYXYgZW4gZXh0ZXJuIGpvdXJuYWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OQorbXNnaWQgIkpvdXJuYWwgbm90IGZvdW5kIgorbXNnc3RyICJKb3VybmFsZW4gaW50ZSBmdW5uZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDAKK21zZ2lkICJEaXJlY3RvcnkgaGFzaCB1bnN1cHBvcnRlZCIKK21zZ3N0ciAiS2F0YWxvZy1oYXNoIHN0w7ZkanMgaW50ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMQorbXNnaWQgIklsbGVnYWwgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiT2dpbHRpZ3QgYmxvY2tudW1tZXIgZsO2ciB1dMO2a2F0IGF0dHJpYnV0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAyCittc2dpZCAiQ2Fubm90IGNyZWF0ZSBmaWxlc3lzdGVtIHdpdGggcmVxdWVzdGVkIG51bWJlciBvZiBpbm9kZXMiCittc2dzdHIgIkthbiBpbnRlIHNrYXBhIGV0dCBmaWxzeXN0ZW0gbWVkIGJlZ8OkcnQgYW50YWwgaW5vZGVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAzCittc2dpZCAiRTJpbWFnZSBzbmFwc2hvdCBub3QgaW4gdXNlIgorbXNnc3RyICJFMmltYWdlLcO2Z29uYmxpY2tzYmlsZCBhbnbDpG5kcyBpbnRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA0Cittc2dpZCAiVG9vIG1hbnkgcmVzZXJ2ZWQgZ3JvdXAgZGVzY3JpcHRvciBibG9ja3MiCittc2dzdHIgIkbDtnIgbcOlbmdhIHJlc2VydmVyYWRlIGdydXBwaWRlbnRpZmllcmFyYmxvY2siCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDUKK21zZ2lkICJSZXNpemUgaW5vZGUgaXMgY29ycnVwdCIKK21zZ3N0ciAiU3Rvcmxla3PDpG5kcmluZ3Npbm9kZW4gw6RyIHRyYXNpZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNgorbXNnaWQgIlRyaWVkIHRvIHNldCBibG9jayBibWFwIHdpdGggbWlzc2luZyBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiRsO2cnPDtmt0ZSBzw6R0dGEgZW4gYmxvY2tiaXRrYXJ0YSBtZWQgc2FrbmF0IGluZGlyZWt0YmxvY2siCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDcKK21zZ2lkICJUREI6IFN1Y2Nlc3MiCittc2dzdHIgIlREQjogR2ljayBicmEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDgKK21zZ2lkICJUREI6IENvcnJ1cHQgZGF0YWJhc2UiCittc2dzdHIgIlREQjogVHJhc2lnIGRhdGFiYXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDkKK21zZ2lkICJUREI6IElPIEVycm9yIgorbXNnc3RyICJUREI6IEkvTy1mZWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTAKK21zZ2lkICJUREI6IExvY2tpbmcgZXJyb3IiCittc2dzdHIgIlREQjogTMOlc25pbmdzZmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTExCittc2dpZCAiVERCOiBPdXQgb2YgbWVtb3J5IgorbXNnc3RyICJUREI6IFNsdXQgcMOlIG1pbm5lIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEyCittc2dpZCAiVERCOiBSZWNvcmQgZXhpc3RzIgorbXNnc3RyICJUREI6IFBvc3RlbiBmaW5ucyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMworbXNnaWQgIlREQjogTG9jayBleGlzdHMgb24gb3RoZXIga2V5cyIKK21zZ3N0ciAiVERCOiBMw6VzIGZpbm5zIHDDpSBhbmRyYSBueWNrbGFyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE0Cittc2dpZCAiVERCOiBJbnZhbGlkIHBhcmFtZXRlciIKK21zZ3N0ciAiVEJEOiBPZ2lsdGlnIHBhcmFtZXRlciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNQorbXNnaWQgIlREQjogUmVjb3JkIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJUREI6IFBvc3RlbiBmaW5ucyBpbnRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE2Cittc2dpZCAiVERCOiBXcml0ZSBub3QgcGVybWl0dGVkIgorbXNnc3RyICJUREI6IFNrcml2bmluZyDDpHIgaW50ZSB0aWxsw6V0ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTcKK21zZ2lkICJFeHQyZnMgZGlyZWN0b3J5IGJsb2NrIGxpc3QgaXMgZW1wdHkiCittc2dzdHIgIkV4dDJmcy1rYXRhbG9nYmxvY2tsaXN0YW4gw6RyIHRvbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOAorbXNnaWQgIkF0dGVtcHQgdG8gbW9kaWZ5IGEgYmxvY2sgbWFwcGluZyB2aWEgYSByZWFkLW9ubHkgYmxvY2sgaXRlcmF0b3IiCittc2dzdHIgIkbDtnJzw7ZrIGF0dCDDpG5kcmEgZW4gYmxvY2ttYXBwbmluZyB2aWEgZW4gZW5kYXN0IGzDpHNiYXIgYmxvY2tpdGVyYXRvciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgc2F2ZWQgcGF0aCIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgbnVtbWVyIGbDtnIgc3BhcmFkIHPDtmt2w6RnIHRpbGwgZXh0NC11dHN0csOkY2tuaW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgZ2VuZXJpYyBiaXRtYXAiCittc2dzdHIgIkZlbCBtYWdpc2t0IG51bW1lciBmw7ZyIDY0LWJpdGFycyBhbGxtw6RuIGJpdGthcnRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgYmxvY2sgYml0bWFwIgorbXNnc3RyICJGZWwgbWFnaXNrdCBudW1tZXIgZsO2ciA2NC1iaXRhcnMgYmxvY2tiaXRrYXJ0YSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgbnVtbWVyIGbDtnIgNjQtYml0YXJzIGlub2RzYml0a2FydGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzEzIgorbXNnc3RyICJGZWwgbWFnaXNrdCBudW1tZXIgLS0tIFJFU0VSVkVSQVRfMTMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE0IgorbXNnc3RyICJGZWwgbWFnaXNrdCBudW1tZXIgLS0tIFJFU0VSVkVSQVRfMTQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE1IgorbXNnc3RyICJGZWwgbWFnaXNrdCBudW1tZXIgLS0tIFJFU0VSVkVSQVRfMTUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE2IgorbXNnc3RyICJGZWwgbWFnaXNrdCBudW1tZXIgLS0tIFJFU0VSVkVSQVRfMTYiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE3IgorbXNnc3RyICJGZWwgbWFnaXNrdCBudW1tZXIgLS0tIFJFU0VSVkVSQVRfMTciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE4IgorbXNnc3RyICJGZWwgbWFnaXNrdCBudW1tZXIgLS0tIFJFU0VSVkVSQVRfMTgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE5IgorbXNnc3RyICJGZWwgbWFnaXNrdCBudW1tZXIgLS0tIFJFU0VSVkVSQVRfMTkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzAKK21zZ2lkICJDb3JydXB0IGV4dGVudCBoZWFkZXIiCittc2dzdHIgIlRyYXNpZ3QgdXRzdHLDpGNrbmluZ3NodXZ1ZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMQorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGluZGV4IgorbXNnc3RyICJUcmFzaWd0IHV0c3Ryw6Rja25pbmdzaW5kZXgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzIKK21zZ2lkICJDb3JydXB0IGV4dGVudCIKK21zZ3N0ciAiVHJhc2lnIHV0c3Ryw6Rja25pbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzMKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIGV4dGVudCBtYXAiCittc2dzdHIgIkluZ2V0IGZyaXR0IHV0cnltbWUgaSB1dHN0csOkY2tuaW5nc2thcnRhbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNAorbXNnaWQgIklub2RlIGRvZXMgbm90IHVzZSBleHRlbnRzIgorbXNnc3RyICJJbm9kZXIgYW52w6RuZGVyIGludGUgdXRzdHLDpGNrbmluZ2FyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM1Cittc2dpZCAiTm8gJ25leHQnIGV4dGVudCIKK21zZ3N0ciAiSW5nZW4gXCJuw6RzdGFcIiB1dHN0csOkY2tuaW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM2Cittc2dpZCAiTm8gJ3ByZXZpb3VzJyBleHRlbnQiCittc2dzdHIgIkluZ2VuIFwiZsO2cmVnw6VlbmRlXCIgdXRzdHLDpGNrbmluZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNworbXNnaWQgIk5vICd1cCcgZXh0ZW50IgorbXNnc3RyICJJbmdlbiBcInVwcFwiLXV0c3Ryw6Rja25pbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzgKK21zZ2lkICJObyAnZG93bicgZXh0ZW50IgorbXNnc3RyICJJbmdlbiBcIm5lclwiLXV0c3Ryw6Rja25pbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzkKK21zZ2lkICJObyBjdXJyZW50IG5vZGUiCittc2dzdHIgIkluZ2VuIGFrdHVlbGwgbm9kIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQwCittc2dpZCAiRXh0MmZzIG9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJFeHQyZnMtb3BlcmF0aW9uZW4gc3TDtmRqcyBpbnRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQxCittc2dpZCAiTm8gcm9vbSB0byBpbnNlcnQgZXh0ZW50IGluIG5vZGUiCittc2dzdHIgIkluZ2VuIHBsYXRzIGF0dCBsw6RnZ2EgaW4gZW4gdXRzdHLDpGNrbmluZyBpIG5vZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQyCittc2dpZCAiU3BsaXR0aW5nIHdvdWxkIHJlc3VsdCBpbiBlbXB0eSBub2RlIgorbXNnc3RyICJVcHBkZWxuaW5nIHNrdWxsZSByZXN1bHRlcmEgaSBlbiB0b20gbm9kIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQzCittc2dpZCAiRXh0ZW50IG5vdCBmb3VuZCIKK21zZ3N0ciAiVXRzdHLDpGNrbmluZ2VuIGludGUgZnVubmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIk9wZXJhdGlvbmVuIHN0w7ZkanMgaW50ZSBmw7ZyIGlub2RlciBzb20gaW5uZWjDpWxsZXIgdXRzdHLDpGNrbmluZ2FyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ1Cittc2dpZCAiRXh0ZW50IGxlbmd0aCBpcyBpbnZhbGlkIgorbXNnc3RyICJVdHN0csOkY2tuaW5nc2zDpG5nZGVuIMOkciBmZWxha3RpZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NgorbXNnaWQgIkkvTyBDaGFubmVsIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IGJsb2NrIG51bWJlcnMiCittc2dzdHIgIkkvTy1rYW5hbGVyIHN0w7ZkamVyIGludGUgNjQtYml0YXJzIGJsb2NrbnVtbWVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGtvbnRyb2xsZXJhIG9tIGZpbHN5c3RlbSDDpHIgbW9udGVyYWRlIGbDtnIgYXR0IG10YWItZmlsZW4gc2FrbmFzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ4Cittc2dpZCAiRmlsZXN5c3RlbSB0b28gbGFyZ2UgdG8gdXNlIGxlZ2FjeSBiaXRtYXBzIgorbXNnc3RyICJGaWxzeXN0ZW1lbiDDpHIgZsO2ciBzdG9yYSBmw7ZyIGF0dCBhbnbDpG5kYSBnYW1tYWxkYWdzIGJpdGthcnRvciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OQorbXNnaWQgIk1NUDogaW52YWxpZCBtYWdpYyBudW1iZXIiCittc2dzdHIgIk1NUDogb2dpbHRpZ3QgbWFnaXNrdCBudW1tZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTAKK21zZ2lkICJNTVA6IGRldmljZSBjdXJyZW50bHkgYWN0aXZlIgorbXNnc3RyICJNTVA6IGVuaGV0ZW4gw6RyIGbDtnIgbsOkcnZhcmFuZGUgYWt0aXYiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICJNTVA6IGZzY2sga8O2cnMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTIKK21zZ2lkICJNTVA6IGJsb2NrIG51bWJlciBiZXlvbmQgZmlsZXN5c3RlbSByYW5nZSIKK21zZ3N0ciAiTU1QOiBibG9ja251bW1lciB1dGFuZsO2ciBmaWxzeXN0ZW1ldHMgcsOkY2t2aWRkIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICJNTVA6IHV0ZsO2ciBlbiBva8OkbmQgb3BlcmF0aW9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU0Cittc2dpZCAiTU1QOiBmaWxlc3lzdGVtIHN0aWxsIGluIHVzZSIKK21zZ3N0ciAiTU1QOiBmaWxzeXN0ZW1ldCBhbnbDpG5kcyBmb3J0ZmFyYW5kZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NQorbXNnaWQgIk1NUDogb3BlbiB3aXRoIE9fRElSRUNUIGZhaWxlZCIKK21zZ3N0ciAiTU1QOiDDtnBwbmluZyBtZWQgT19ESVJFQ1QgbWlzc2x5Y2thZGVzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU2Cittc2dpZCAiQmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBzaXplIGluY29ycmVjdCIKK21zZ3N0ciAiU3RvcmxlayBww6UgYmxvY2tncnVwcGJlc2tyaXZhcmUgZmVsYWt0aWciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTcKK21zZ2lkICJJbm9kZSBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBpbm9kZSIKK21zZ3N0ciAiSW5vZGVucyBrb250cm9sbHN1bW1hIHN0w6RtbWVyIGludGUgbWVkIGlub2RlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OAorbXNnaWQgIklub2RlIGJpdG1hcCBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBiaXRtYXAiCittc2dzdHIgIktvbnRyb2xsc3VtbWFuIGbDtnIgaW5vZHNiaXRrYXJ0YW4gc3TDpG1tZXIgaW50ZSBtZWQgYml0a2FydGFuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU5Cittc2dpZCAiRXh0ZW50IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGV4dGVudCBibG9jayIKK21zZ3N0ciAiVXTDtmtuaW5nZW5zIGJsb2Nra29udHJvbGxzdW1tYSBzdMOkbW1lciBpbnRlIHV0w7ZrbmluZ3NibG9ja2V0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYwCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGRvZXMgbm90IGhhdmUgc3BhY2UgZm9yIGNoZWNrc3VtIgorbXNnc3RyICJLYXRhbG9nYmxvY2tldCBoYXIgaW50ZSBwbGF0cyBmw7ZyIGtvbnRyb2xsc3VtbWFuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYxCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAiS2F0YWxvZ2Jsb2Nrc3VtbWFuIHN0w6RtbWVyIGludGUgbWVkIGthdGFsb2dibG9ja2V0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYyCittc2dpZCAiRXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGJsb2NrIgorbXNnc3RyICIiCisiS29udHJvbGxzdW1tYW4gZsO2ciBibG9ja2V0IGbDtnIgdXTDtmthZGUgYXR0cmlidXQgc3TDpG1tZXIgaW50ZSBtZWQgYmxvY2tldCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MworbXNnaWQgIlN1cGVyYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggc3VwZXJibG9jayIKK21zZ3N0ciAiS29udHJvbGxzdW1tYW4gZsO2ciBzdXBlcmJsb2NrZXQgc3TDpG1tZXIgaW50ZSBtZWQgc3VwZXJibG9ja2V0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY0Cittc2dpZCAiVW5rbm93biBjaGVja3N1bSBhbGdvcml0aG0iCittc2dzdHIgIk9rw6RuZCBrb250cm9sbHN1bW1lYWxnb3JpdG0iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjUKK21zZ2lkICJNTVAgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggTU1QIGJsb2NrIgorbXNnc3RyICJLb250cm9sbHN1bW1hbiBmw7ZyIE1NUC1ibG9ja2V0IHN0w6RtbWVyIGludGUgbWVkIE1NUC1ibG9ja2V0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY2Cittc2dpZCAiRXh0MiBmaWxlIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFeHQyLWZpbGVuIGZpbm5zIHJlZGFuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMQorbXNnaWQgIlByb2ZpbGUgdmVyc2lvbiAwLjAiCittc2dzdHIgIlByb2ZpbCB2ZXJzaW9uIDAuMCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTIKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9ub2RlIgorbXNnc3RyICJGZWxha3RpZ3QgbWFnaXNrdCB2w6RyZGUgaSBwcm9maWxlX25vZGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEzCittc2dpZCAiUHJvZmlsZSBzZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiUHJvZmlsc2VrdGlvbmVuIGludGUgZnVubmVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNAorbXNnaWQgIlByb2ZpbGUgcmVsYXRpb24gbm90IGZvdW5kIgorbXNnc3RyICJQcm9maWxyZWxhdGlvbmVuIGludGUgZnVubmVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNQorbXNnaWQgIkF0dGVtcHQgdG8gYWRkIGEgcmVsYXRpb24gdG8gbm9kZSB3aGljaCBpcyBub3QgYSBzZWN0aW9uIgorbXNnc3RyICJGw7Zyc8O2ayBhdHQgbMOkZ2dhIHRpbGwgZW4gcmVsYXRpb24gdGlsbCBlbiBub2Qgc29tIGludGUgw6RyIGVuIHNla3Rpb24iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE2Cittc2dpZCAiQSBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIGhhcyBhIG5vbi16ZXJvIHZhbHVlIgorbXNnc3RyICJFdHQgaHV2dWQgdGlsbCBlbiBwcm9maWxzZWt0aW9uIGhhciBldHQgdsOkcmRlIHNraWx0IGZyw6VuIG5vbGwiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE3Cittc2dpZCAiQmFkIGxpbmtlZCBsaXN0IGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiRmVsYWt0aWcgbMOkbmthZCBsaXN0YSBpIHByb2ZpbHN0cnVrdHVyZXIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE4Cittc2dpZCAiQmFkIGdyb3VwIGxldmVsIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiRmVsYWt0aWcgZ3J1cHBuaXbDpSBpIHByb2ZpbHN0cnVrdHVyZXIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE5Cittc2dpZCAiQmFkIHBhcmVudCBwb2ludGVyIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiRmVsYWt0aWcgZsO2csOkbGRyYXBla2FyZSBpIHByb2ZpbHN0cnVrdHVyZXIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGUgaXRlcmF0b3IiCittc2dzdHIgIkZlbGFrdGlndCBtYWdpc2t0IHbDpHJkZSBpIHByb2ZpbGl0ZXJhdG9yIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMQorbXNnaWQgIkNhbid0IHNldCB2YWx1ZSBvbiBzZWN0aW9uIG5vZGUiCittc2dzdHIgIkthbiBpbnRlIHPDpHR0YSB2w6RyZGUgcMOlIHNla3Rpb25zbm9kIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIHByb2ZpbGUgbGlicmFyeSIKK21zZ3N0ciAiT2dpbHRpZ3QgYXJndW1lbnQgc2tpY2thdCB0aWxsIHByb2ZpbGJpYmxpb3Rla2V0IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMworbXNnaWQgIkF0dGVtcHQgdG8gbW9kaWZ5IHJlYWQtb25seSBwcm9maWxlIgorbXNnc3RyICJGw7Zyc8O2ayBhdHQgw6RuZHJhIGVuIGVuZGFzdCBsw6RzYmFyIHByb2ZpbCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIkh1dnVkZXQgdGlsbCBwcm9maWxzZWt0aW9uZW4gw6RyIGludGUgcMOlIHRvcHBuaXbDpW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI1Cittc2dpZCAiU3ludGF4IGVycm9yIGluIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIiCittc2dzdHIgIlN5bnRheGZlbCBpIGh1dnVkZXQgdGlsbCBwcm9maWxzZWt0aW9uZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI2Cittc2dpZCAiU3ludGF4IGVycm9yIGluIHByb2ZpbGUgcmVsYXRpb24iCittc2dzdHIgIlN5bnRheGZlbCBpIGVuIHByb2ZpbHJlbGF0aW9uIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNworbXNnaWQgIkV4dHJhIGNsb3NpbmcgYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiRXh0cmEgYXZzbHV0YW5kZSBrbGFtbWVyIGkgcHJvZmlsZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI4Cittc2dpZCAiTWlzc2luZyBvcGVuIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIklubGVkYW5kZSBrbGFtbWVyIHNha25hcyBpIHByb2ZpbGVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyOQorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3QiCittc2dzdHIgIkZlbGFrdGlndCBtYWdpc2t0IHbDpHJkZSBpIHByb2ZpbGVfdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9zZWN0aW9uX3QiCittc2dzdHIgIkZlbGFrdGlndCBtYWdpc2t0IHbDpHJkZSBpIHByb2ZpbGVfc2VjdGlvbl90IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMQorbXNnaWQgIkl0ZXJhdGlvbiB0aHJvdWdoIGFsbCB0b3AgbGV2ZWwgc2VjdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJJdGVyYXRpb24gw7Z2ZXIgYWxsYSB0b3Bwbml2w6VzZWt0aW9uZXIgc3TDtmRqcyBpbnRlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMgorbXNnaWQgIkludmFsaWQgcHJvZmlsZV9zZWN0aW9uIG9iamVjdCIKK21zZ3N0ciAiT2dpbHRpZ3QgcHJvZmlsZV9zZWN0aW9uLW9iamVrdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzMKK21zZ2lkICJObyBtb3JlIHNlY3Rpb25zIgorbXNnc3RyICJJbmdhIGZsZXIgc2VrdGlvbmVyIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNAorbXNnaWQgIkJhZCBuYW1lc2V0IHBhc3NlZCB0byBxdWVyeSByb3V0aW5lIgorbXNnc3RyICJGZWxha3RpZyBuYW1ubcOkbmdkIHNraWNrYWQgdGlsbCBmcsOlZ2VydXRpbmVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNQorbXNnaWQgIk5vIHByb2ZpbGUgZmlsZSBvcGVuIgorbXNnc3RyICJJbmdlbiBwcm9maWxmaWwgw7ZwcGVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX2ZpbGVfdCIKK21zZ3N0ciAiRmVsYWt0aWd0IG1hZ2lza3QgdsOkcmRlIGkgcHJvZmlsZV9maWxlX3QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM3Cittc2dpZCAiQ291bGRuJ3Qgb3BlbiBwcm9maWxlIGZpbGUiCittc2dzdHIgIkt1bmRlIGludGUgw7ZwcG5hIHByb2ZpbGZpbGVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOAorbXNnaWQgIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIlNla3Rpb25lbiBmaW5ucyByZWRhbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzkKK21zZ2lkICJJbnZhbGlkIGJvb2xlYW4gdmFsdWUiCittc2dzdHIgIk9naWx0aWd0IGJvb2xlc2t0IHbDpHJkZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDAKK21zZ2lkICJJbnZhbGlkIGludGVnZXIgdmFsdWUiCittc2dzdHIgIk9naWx0aWd0IGhlbHRhbHN2w6RyZGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQxCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCittc2dzdHIgIkZlbGFrdGlndCBtYWdpc2t0IHbDpHJkZSBpIHByb2ZpbGVfZmlsZV9kYXRhX3QiCmRpZmYgLS1naXQgYS9wby90ci5nbW8gYi9wby90ci5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdiNmZjOAotLS0gL2Rldi9udWxsCisrKyBiL3BvL3RyLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby90ci5wbyBiL3BvL3RyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMGFlOTEKLS0tIC9kZXYvbnVsbAorKysgYi9wby90ci5wbwpAQCAtMCwwICsxLDc3MDAgQEAKKyMgVHVya2lzaCB0cmFuc2xhdGlvbnMgZm9yIGUyZnNwcm9ncyBtZXNzYWdlcy4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IFRoZW9kb3JlIFRzbyAobXNnaWRzKQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZTJmc3Byb2dzIHBhY2thZ2UuCisjCisjIE5pbGfDvG4gQmVsbWEgQnVnw7xuZXIgPG5pbGd1bkBidWd1bmVyLm5hbWUudHI+LCAyMDAxLC4uLiwgMjAwNy4KKyMgVm9sa2FuIEdlemVyIDx2bGtuZ3pyQGdtYWlsLmNvbT4sIDIwMTMuCisjLiBUaGUgc3RyaW5ncyBpbiBlMmZzY2sncyBwcm9ibGVtLmMgY2FuIGJlIHZlcnkgaGFyZCB0byB0cmFuc2xhdGUsCisjLiBzaW5jZSB0aGUgc3RyaW5ncyBhcmUgZXhwYW5kZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgRmlyc3Qgb2YgYWxsLAorIy4gdGhlcmUgaXMgYW4gQC1leHBhbnNpb24sIHdoZXJlIHN0cmluZ3MgbGlrZSAiQGkiIGFyZSBleHBhbmRlZCB0bworIy4gImlub2RlIiwgYW5kIHNvIG9uLiAgSW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRyYW5zbGF0b3JzLCB0aGUKKyMuIGUyZnNwcm9ncyBwbyB0ZW1wbGF0ZSBmaWxlIGhhcyBiZWVuIGVuaGFuY2VkIHdpdGggY29tbWVudHMgdGhhdCBzaG93CisjLiB0aGUgQC1leHBhbnNpb24sIGZvciB0aGUgc3RyaW5ncyBpbiB0aGUgcHJvYmxlbS5jIGZpbGUuCisjLgorIy4gVHJhbnNsYXRvcnMgYXJlIGZyZWUgdG8gdXNlIHRoZSBALWV4cGFuc2lvbiBmYWNpbGl0eSBpZiB0aGV5IHNvCisjLiBjaG9vc2UsIGJ5IHByb3ZpZGluZyB0cmFuc2xhdGlvbnMgZm9yIHN0cmluZ3MgaW4gZTJmc2NrL21lc3NhZ2UuYy4KKyMuIFRoZXNlIHRyYW5zbGF0aW9uIGNhbiBjb21wbGV0ZWx5IHJlcGxhY2UgYW4gZXhwYW5zaW9uOyBmb3IgZXhhbXBsZSwKKyMuIGlmICJiYmxvY2siICh3aGljaCBpbmRpY2F0ZWQgdGhhdCAiQGIiIHdvdWxkIGJlIGV4cGFuZGVkIHRvICJibG9jayIpCisjLiBpcyB0cmFuc2xhdGVkIGFzICJkZGF0ZW52ZXJsdXN0IiwgdGhlbiAiQGQiIHdpbGwgYmUgZXhwYW5kZWQgdG8KKyMuICJkYXRlbnZlcmx1c3QiLiAgQWx0ZXJuYXRpdmVseSwgdHJhbnNsYXRvcnMgY2FuIHNpbXBseSBub3QgdXNlIHRoZQorIy4gQC1leHBhbnNpb24gZmFjaWxpdHkgYXQgYWxsLgorIy4KKyMuIFRoZSBzZWNvbmQgZXhwYW5zaW9uIHdoaWNoIGlzIGRvbmUgZm9yIGUyZnNjaydzIHByb2JsZW0uYyBtZXNzYWdlcyBpcworIy4gYSBkeW5hbWljICUtZXhwYW5zaW9uLCB3aGljaCBleHBhbmRzICVpIGFzIGFuIGlub2RlIG51bWJlciwgYW5kIHNvCisjLiBvbi4gIEEgdGFibGUgb2YgdGhlc2UgZXhwYW5zaW9ucyBjYW4gYmUgZm91bmQgYmVsb3cuICBOb3RlIHRoYXQKKyMuICUtZXhwcmVzc2lvbnMgdGhhdCBiZWdpbiB3aXRoICIlRCIgYW5kICIlSSIgYXJlIHR3by1jaGFyYWN0ZXIKKyMuIGV4cGFuc2lvbnM7IHNvIGZvciBleGFtcGxlLCAiJUl1IiBleHBhbmRzIHRvIHRoZSBpbm9kZSdzIHVzZXIgaWQKKyMuIG93bmVyc2hpcCBmaWVsZCAoaW5vZGUtPmlfdWlkKS4gIEFsc28gdGhlICIlQiIgZXhwYW5zaW9uIGlzIHNwZWNpYWw6CisjLiBpdCBjYW4gZXhwYW5kIHRvIGVpdGhlciB0aGUgc3RyaW5nICJpbmRpcmVjdCBibG9jayIgKHBvc3NpYmx5IHByZWNlZGVkCisjLiBieSB0aGUgd29yZCAiZG91YmxlIiBvciAidHJpcGxlIiksIG9yIHRoZSBzdHJpbmcgImJsb2NrICMiIGltbWVkaWF0ZWx5CisjLiBmb2xsb3dlZCBieSBhbiBpbnRlZ2VyIGluZGljYXRpbmcgYSBibG9jayBzZXF1ZW5jZSBudW1iZXIuCisjLiAgCisjLiAJJWIJPGJsaz4JCQlibG9jayBudW1iZXIKKyMuIAklQgkiaW5kaXJlY3QgYmxvY2siIHwgImJsb2NrICMiPGJsa2NvdW50PglzdHJpbmcgfCBzdHJpbmcraW50ZWdlcgorIy4gCSVjCTxibGsyPgkJCWJsb2NrIG51bWJlcgorIy4gCSVEaQk8ZGlyZW50PiAtPiBpbm8JCWlub2RlIG51bWJlcgorIy4gCSVEbgk8ZGlyZW50PiAtPiBuYW1lCXN0cmluZworIy4gCSVEcgk8ZGlyZW50PiAtPiByZWNfbGVuCisjLiAJJURsCTxkaXJlbnQ+IC0+IG5hbWVfbGVuCisjLiAJJUR0CTxkaXJlbnQ+IC0+IGZpbGV0eXBlCisjLiAJJWQJPGRpcj4gCQkJaW5vZGUgbnVtYmVyCisjLiAJJWcJPGdyb3VwPgkJCWludGVnZXIKKyMuIAklaQk8aW5vPgkJCWlub2RlIG51bWJlcgorIy4gCSVJcwk8aW5vZGU+IC0+IGlfc2l6ZQorIy4gCSVJUwk8aW5vZGU+IC0+IGlfZXh0cmFfaXNpemUKKyMuIAklSWIJPGlub2RlPiAtPiBpX2Jsb2NrcworIy4gCSVJbAk8aW5vZGU+IC0+IGlfbGlua3NfY291bnQKKyMuIAklSW0JPGlub2RlPiAtPiBpX21vZGUKKyMuIAklSU0JPGlub2RlPiAtPiBpX210aW1lCisjLiAJJUlGCTxpbm9kZT4gLT4gaV9mYWRkcgorIy4gCSVJZgk8aW5vZGU+IC0+IGlfZmlsZV9hY2wKKyMuIAklSWQJPGlub2RlPiAtPiBpX2Rpcl9hY2wKKyMuIAklSXUJPGlub2RlPiAtPiBpX3VpZAorIy4gCSVJZwk8aW5vZGU+IC0+IGlfZ2lkCisjLiAJJUl0CTxzdHI+CQkJZmlsZSB0eXBlCisjLiAJJWoJPGlubzI+CQkJaW5vZGUgbnVtYmVyCisjLiAJJW0JPGNvbV9lcnIgZXJyb3IgbWVzc2FnZT4KKyMuIAklTgk8bnVtPgorIy4gCSVwCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPgorIy4gCSVQCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIDxkaXJlbnQ+LT5pbm8gd2l0aCA8aW5vMj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuICAoSWYgZGlyZW50IGlzIE5VTEwKKyMuIAkJCQl0aGVuIHJldHVybiB0aGUgcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8yPikKKyMuIAklcQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGRpcj4KKyMuIAklUQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4gd2l0aCA8ZGlyPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4KKyMuIAklcwk8c3RyPgkJCW1pc2NlbGxhbmVvdXMgc3RyaW5nCisjLiAJJVMJCWJhY2t1cCBzdXBlcmJsb2NrCisjLiAJJVgJPG51bT4JaGV4YWRlY2ltYWwgZm9ybWF0CisjLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZTJmc3Byb2dzIDEuNDIuOFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiB0eXRzb0BhbHVtLm1pdC5lZHVcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wNS0xNyAyMToyNi0wNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMy0xMS0wMSAyMjo0OSswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBWb2xrYW4gR2V6ZXIgPHZsa25nenJAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFR1cmtpc2ggPGdudS10ci11MTJhQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogdHJcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKyJYLUdlbmVyYXRvcjogTG9rYWxpemUgMS41XG4iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoyMyBtaXNjL21rZTJmcy5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2sgJXUgb3V0IG9mIHJhbmdlOyBpZ25vcmVkLlxuIgorbXNnc3RyICJIYXRhbMSxIGJsb2sgJXUga2Fwc2FtZMSxxZ/EsTsgeW9rc2F5xLFsZMSxLlxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NDYKK21zZ2lkICJ3aGlsZSBzYW5pdHkgY2hlY2tpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgIi0gaGF0YWzEsSBibG9rbGFyIGTDvMSfw7xtw7xuZGUgZG/En3J1bHVrIGRlbmV0bGVuaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NTgKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICItIGhhdGFsxLEgYmxva2xhciBkw7zEn8O8bcO8IG9rdW51cmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo3MiBlMmZzY2svc2NhbnRlc3QuYzoxMDcgZTJmc2NrL3VuaXguYzoxMzQ1CisjOiBlMmZzY2svdW5peC5jOjE0MzQgbWlzYy9iYWRibG9ja3MuYzoxMjQyIG1pc2MvYmFkYmxvY2tzLmM6MTI1MAorIzogbWlzYy9iYWRibG9ja3MuYzoxMjY0IG1pc2MvYmFkYmxvY2tzLmM6MTI3NiBtaXNjL2R1bXBlMmZzLmM6NjA0CisjOiBtaXNjL2UyaW1hZ2UuYzoxMzk2IG1pc2MvZTJpbWFnZS5jOjE1ODAgbWlzYy9lMmltYWdlLmM6MTU5OQorIzogbWlzYy9ta2UyZnMuYzoyMjcgbWlzYy90dW5lMmZzLmM6MTk1NSBtaXNjL3R1bmUyZnMuYzoyMDQ0IHJlc2l6ZS9tYWluLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICVzIgorbXNnc3RyICItICVzIGHDp8SxbG1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHBvcGVuICclcyciCittc2dzdHIgIi0gJyVzJyB2ZXJpIHlvbHUgYcOnxLFsbWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo5NCBtaXNjL21rZTJmcy5jOjIzNAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW4gbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gZmlsZSIKK21zZ3N0ciAiLSBkb3N5YWRhbiBoYXRhbMSxIGJsb2tsYXIgbGlzdGVzaW5pbiBva3VubWFzxLEgc8SxcmFzxLFuZGEgaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTA1Cittc2dpZCAid2hpbGUgdXBkYXRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICItIGhhdGFsxLEgYmxva2xhciBkw7zEn8O8bcO8IGfDvG5jZWxsZW5pcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogaWxsZWdhbCBibG9jayAldSBmb3VuZCBpbiBiYWQgYmxvY2sgaW5vZGUuICBDbGVhcmVkLlxuIgorbXNnc3RyICJVeWFyxLE6IEhhdGFsxLEgYmxvayBkw7zEn8O8bcO8bmRlICV1LiBibG9rIGt1cmFsZMSxxZ/EsTsgdGVtaXpsZW5kaS5cbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiJTMkcyBpxZ9sZW1pIHPEsXJhc8SxbmRhIGJsb2sgJTEkbHUgb2t1bnVya2VuIGhhdGEgb2x1xZ90dSAoJTIkcykuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgImJsb2sgJWx1IG9rdW51cmtlbiBoYXRhIG9sdcWfdHUgKCVzKS4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjEgZTJmc2NrL2VoYW5kbGVyLmM6MTEwCittc2dpZCAiSWdub3JlIGVycm9yIgorbXNnc3RyICJIYXRhIGfDtnJtZXpkZW4gZ2VsaW5kaSIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjIKK21zZ2lkICJGb3JjZSByZXdyaXRlIgorbXNnc3RyICJZZW5pZGVuIHlheiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIiUzJHMgacWfbGVtaSBzxLFyYXPEsW5kYSBibG9rICUxJGx1IHlhesSxbMSxcmtlbiBoYXRhIG9sdcWfdHUgKCUyJHMpLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiJWx1IGJsb8SfdSB5YXrEsWzEsXJrZW4gaGF0YTogJXMuICAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJib8WfIGRpemluIGJsb2tsYXLEsSIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NjIKK21zZ2lkICJlbXB0eSBkaXIgbWFwIgorbXNnc3RyICJib8WfIGRpemluIGXFn2xlbWkiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVtcHR5IGRpcmVjdG9yeSBibG9jayAldSAoIyVkKSBpbiBpbm9kZSAldVxuIgorbXNnc3RyICJFbXB0eSBkaXJlY3RvcnkgYmxvY2sgJXUgKCMlZCkgaW4gaW5vZGUgJXVcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBmaWxlbmFtZSBuYmxvY2tzIGJsb2Nrc2l6ZVxuIgorbXNnc3RyICIlczogJXMgZG9zeWFfaXNtaSBibG9rX3NhecSxc8SxIGJsb2tfYm95dVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgb2YgYmxvY2tzIVxuIgorbXNnc3RyICJCbG9rIHNhecSxc8SxIGt1cmFsZMSxxZ/EsSFcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciAoc2l6ZT0lZClcbiIKK21zZ3N0ciAiQmxvayB0YW1wb251IGF5csSxbGFtYWTEsSAoYm95dT0lZClcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBkaXNrXG4iCittc2dzdHIgIkt1bGxhbsSxbcSxOiAlcyBkaXNrXG4iCisKKyM6IGUyZnNjay9mbHVzaGIuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJCTEtGTFNCVUYgaW9jdGwgbm90IHN1cHBvcnRlZCEgIENhbid0IGZsdXNoIGJ1ZmZlcnMuXG4iCittc2dzdHIgIkJMS0ZMU0JVRiBpb2N0bCBkZXN0ZWtsZW5taXlvciEgIFRhbXBvbmxhciBib8WfYWx0xLFsYW1hZMSxLlxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1GXSBbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gZGV2aWNlXG4iCittc2dzdHIgIkt1bGxhbsSxbcSxOiAlcyBbLUZdIFstSSBkw7zEn8O8bV90YW1wb25fYmxva2xhcsSxXSBheWfEsXRcbiIKKworIzogZTJmc2NrL2lzY2FuLmM6ODEgZTJmc2NrL3VuaXguYzo5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZmx1c2hpbmciCittc2dzdHIgIiVzIHRlbWl6bGlrIGnDp2luIGHDp8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjg2IGUyZnNjay91bml4LmM6OTc4IHJlc2l6ZS9tYWluLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBmbHVzaCAlcyIKK21zZ3N0ciAiJXMgYm/Fn2FsdMSxbG1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICclcyciCittc2dzdHIgIi0gJXMgYcOnxLFsbWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTI5MAorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAiZMO8xJ/DvG0gdGFyYW1hc8SxIGJhxZ9sYXTEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svaXNjYW4uYzoxMjcgbWlzYy9lMmltYWdlLmM6MTMwOQorbXNnaWQgIndoaWxlIGdldHRpbmcgbmV4dCBpbm9kZSIKK21zZ3N0ciAic29ucmFraSBkw7zEn8O8bWUgZ2XDp2lsaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svaXNjYW4uYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHNjYW5uZWQuXG4iCittc2dzdHIgIiV1IGTDvMSfw7xtIHRhcmFuZMSxLlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjUyNAorbXNnaWQgInJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgImfDvG5sw7xrIGRvc3lhc8SxIHN1cGVyIGJsb8SfdSBva3VudXlvclxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiVzOiBnZcOnZXJsaSBnw7xtbMO8ayBkb3N5YXPEsSBzdXBlciBibG/En3UgeW9rXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBqb3VybmFsIHRvbyBzaG9ydFxuIgorbXNnc3RyICIlczogZ8O8bWzDvGsgZG9zeWFzxLEgw6dvayBrxLFzYVxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcmVjb3ZlcmluZyBqb3VybmFsXG4iCittc2dzdHIgIiVzOiBnw7xubMO8ayBkb3N5YXPEsW5hIGfDtnJlIGt1cnRhcsSxbMSxeW9yXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3b24ndCBkbyBqb3VybmFsIHJlY292ZXJ5IHdoaWxlIHJlYWQtb25seVxuIgorbXNnc3RyICIlczogc2FsdC1va3VudXIgZHVydW1kYXlrZW4gZ8O8bmzDvGsgZG9zeWFzxLFuYSBnw7ZyZSBrdXJ0YXJtYSB5YXDEsWxhbWF6XG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICIlcyB5ZW5pZGVuIGHDp8SxbG1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImFlayDDtnplbGxpayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTQKK21zZ2lkICJBZXJyb3IgYWxsb2NhdGluZyIKK21zZ3N0ciAiQWF5csSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJiYmxvayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTYKK21zZ2lkICJCYml0bWFwIgorbXNnc3RyICJCYml0ZcWfbGVtIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNworbXNnaWQgImNjb21wcmVzcyIKK21zZ3N0ciAiY3PEsWvEscWfdMSxcm1hIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICJDYmF6xLEgZG9zeWEgc2lzdGVtaSBibG9rbGFyxLEgaWxlIMOnZWxpxZ9peW9yIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOQorbXNnaWQgImRkaXJlY3RvcnkiCittc2dzdHIgImRkaXppbiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjAKK21zZ2lkICJEZGVsZXRlZCIKK21zZ3N0ciAiRHNpbGluZW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIxCittc2dpZCAiZWVudHJ5IgorbXNnc3RyICJlZ2lyZGkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIyCittc2dpZCAiRUBlICclRG4nIGluICVwICglaSkiCittc2dzdHIgIkVARSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjMKK21zZ2lkICJmZmlsZXN5c3RlbSIKK21zZ3N0ciAiZmRvc3lhIHNpc3RlbWkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI0Cittc2dpZCAiRmZvciBAaSAlaSAoJVEpIGlzIgorbXNnc3RyICJGJWkgKCVRKSBkw7zEn8O8bcO8IGnDp2luIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNQorbXNnaWQgImdncm91cCIKK21zZ3N0ciAiZ2dydXAiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI2Cittc2dpZCAiaEhUUkVFIEBkIEBpIgorbXNnc3RyICJoSFRSRUUgZGl6aW4gZMO8xJ/DvG0iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI3Cittc2dpZCAiaWlub2RlIgorbXNnc3RyICJpZMO8xJ/DvG0iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI4Cittc2dpZCAiSWlsbGVnYWwiCittc2dzdHIgIklrdXJhbGTEscWfxLEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI5Cittc2dpZCAiampvdXJuYWwiCittc2dzdHIgImpnw7xubMO8ayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAibGxvc3QrZm91bmQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMxCittc2dpZCAiTGlzIGEgbGluayIKK21zZ3N0ciAiTGJpciBiYcSfZMSxciIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzIKK21zZ2lkICJtbXVsdGlwbHktY2xhaW1lZCIKK21zZ3N0ciAibcOnb2sgZMO8xJ/DvG1sw7wiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMzCittc2dpZCAibmludmFsaWQiCittc2dzdHIgIm5nZcOnZXJzaXoiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM0Cittc2dpZCAib29ycGhhbmVkIgorbXNnc3RyICJvYXJ0xLFrIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNQorbXNnaWQgInBwcm9ibGVtIGluIgorbXNnc3RyICJwc29ydW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM2Cittc2dpZCAicXF1b3RhIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM3Cittc2dpZCAicnJvb3QgQGkiCittc2dzdHIgInJrw7ZrIGTDvMSfw7xtw7wiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM4Cittc2dpZCAic3Nob3VsZCBiZSIKK21zZ3N0ciAic29sbWFsxLF5ZMSxIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOQorbXNnaWQgIlNzdXBlckBiIgorbXNnc3RyICJTc8O8cGVyIGJsb2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQwCittc2dpZCAidXVuYXR0YWNoZWQiCittc2dzdHIgInViYcSfbGFudMSxc8SxeiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDEKK21zZ2lkICJ2ZGV2aWNlIgorbXNnc3RyICJ2YXlnxLF0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MgorbXNnaWQgInhleHRlbnQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDMKK21zZ2lkICJ6emVyby1sZW5ndGgiCittc2dzdHIgInpzxLFmxLFyIHV6dW5sdWtsdSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTQKK21zZ2lkICI8VGhlIE5VTEwgaW5vZGU+IgorbXNnc3RyICI8TlVMTCBkw7zEn8O8bT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU1Cittc2dpZCAiPFRoZSBiYWQgYmxvY2tzIGlub2RlPiIKK21zZ3N0ciAiPEhhdGFsxLEgYmxva2xhciBkw7zEn8O8bcO8PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTcKKyMsIGZ1enp5Cittc2dpZCAiPFRoZSB1c2VyIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPGfDvG5sw7xrIGTDvMSfw7xtw7w+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OAorIywgZnV6enkKK21zZ2lkICI8VGhlIGdyb3VwIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPEdydXAgdGFuxLFtbGF5xLFjxLEgZMO8xJ/DvG3DvD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU5Cittc2dpZCAiPFRoZSBib290IGxvYWRlciBpbm9kZT4iCittc2dzdHIgIjzDlm55w7xrbGV5aWNpIGTDvMSfw7xtw7w+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MAorbXNnaWQgIjxUaGUgdW5kZWxldGUgZGlyZWN0b3J5IGlub2RlPiIKK21zZ3N0ciAiPEt1cnRhcsSxbGFuIGRpemluaW4gZMO8xJ/DvG3DvD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYxCittc2dpZCAiPFRoZSBncm91cCBkZXNjcmlwdG9yIGlub2RlPiIKK21zZ3N0ciAiPEdydXAgdGFuxLFtbGF5xLFjxLEgZMO8xJ/DvG3DvD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYyCittc2dpZCAiPFRoZSBqb3VybmFsIGlub2RlPiIKK21zZ3N0ciAiPGfDvG5sw7xrIGTDvMSfw7xtw7w+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MworbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSA5PiIKK21zZ3N0ciAiPFllZGVrIGTDvMSfw7xtIDk+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2NAorbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSAxMD4iCittc2dzdHIgIjxZZWRlayBkw7zEn8O8bSAxMD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM0Cittc2dpZCAicmVndWxhciBmaWxlIgorbXNnc3RyICJvbGHEn2FuIGRvc3lhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNgorbXNnaWQgImRpcmVjdG9yeSIKK21zZ3N0ciAiZGl6aW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM4Cittc2dpZCAiY2hhcmFjdGVyIGRldmljZSIKK21zZ3N0ciAia2FyYWt0ZXIgYXlnxLF0xLEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQwCittc2dpZCAiYmxvY2sgZGV2aWNlIgorbXNnc3RyICJheWfEsXTEsSBlbmdlbGxlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MgorbXNnaWQgIm5hbWVkIHBpcGUiCittc2dzdHIgImlzaW1saSB2ZXJpIHlvbHUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ0Cittc2dpZCAic3ltYm9saWMgbGluayIKK21zZ3N0ciAic2VtYm9saWsgYmHEnyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDYgbWlzYy91dWlkZC5jOjE2MgorbXNnaWQgInNvY2tldCIKK21zZ3N0ciAieXV2YSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWxlIHR5cGUgd2l0aCBtb2RlIDAlbyIKK21zZ3N0ciAiMCVvIGtpcGluZGUgYmlsaW5tZXllbiBkb3N5YSB0w7xyw7wiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDIzCisjLCBmdXp6eQorbXNnaWQgImluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJrdWxsYW7EsW1kYWtpIGJsb2sgZcWfbGVtaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjUKK21zZ2lkICJkb3VibGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjcKKyMsIGZ1enp5Cittc2dpZCAidHJpcGxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICIldSBkw7zEn8O8bcO8bsO8biBkb2xheWzEsSBibG9rbGFyxLEgb2t1bnV5b3IiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI5CisjLCBmdXp6eQorbXNnaWQgInRyYW5zbGF0b3IgYmxvY2siCittc2dzdHIgIm1ldGEtdmVyaSBibG9rbGFyxLEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDMxCisjLCBmdXp6eQorbXNnaWQgImJsb2NrICMiCittc2dzdHIgImJibG9rIgorCisjOiBlMmZzY2svcGFzczFiLmM6MjIyCittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBpbm9kZSBtYXAiCittc2dzdHIgInRla3JhcmxhbmFuIGJsb2tsYXLEsW4gZMO8xJ/DvG0gZcWfbGVtaSIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjYyNSBlMmZzY2svcGFzczFiLmM6NzQ2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBkdXBfYmxrIGZvciAlbGx1XG4iCittc2dzdHIgImnDpyBoYXRhOyAldSBpw6dpbiBkdXBfYmxrIGJ1bHVuYW3EsXlvclxuIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODUyCittc2dpZCAicmV0dXJuZWQgZnJvbSBjbG9uZV9maWxlX2Jsb2NrIgorbXNnc3RyICJjbG9uZV9maWxlX2Jsb2NrIGnFn2xldmluZGVuIGTDtm5kw7xyw7xsZMO8IgorCisjOiBlMmZzY2svcGFzczFiLmM6ODc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgbG9va3VwIEVBIGJsb2NrIHJlY29yZCBmb3IgJWxsdSIKK21zZ3N0ciAiacOnIGhhdGE7ICV1IGnDp2luIGR1cF9ibGsgYnVsdW5hbcSxeW9yXG4iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBpbm9kZSByZWNvcmQgZm9yICV1IgorbXNnc3RyICLEsMOnIGhhdGE6ICV1IGnDp2luIGRpemluIGJpbGdpbGVyaSBidWx1bmFtxLF5b3IuIgorCisjOiBlMmZzY2svcGFzczEuYzo0NzUgZTJmc2NrL3Bhc3MyLmM6NzgyCittc2dpZCAicmVhZGluZyBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgImJsb2sgZGl6aW5pIG9rdW51eW9yIgorCisjOiBlMmZzY2svcGFzczEuYzo2MzQKK21zZ2lkICJpbi11c2UgaW5vZGUgbWFwIgorbXNnc3RyICJrdWxsYW7EsW1kYWtpIGTDvMSfw7xtIGXFn2xlbWkiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY0NQorbXNnaWQgImRpcmVjdG9yeSBpbm9kZSBtYXAiCittc2dzdHIgImRpemluIGTDvMSfw7xtw7wgZcWfbGVtaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjU1Cittc2dpZCAicmVndWxhciBmaWxlIGlub2RlIG1hcCIKK21zZ3N0ciAibm9ybWFsIGRvc3lhIGTDvMSfw7xtw7wgZcWfbGVtaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjY0IG1pc2MvZTJpbWFnZS5jOjEyNjUKK21zZ2lkICJpbi11c2UgYmxvY2sgbWFwIgorbXNnc3RyICJrdWxsYW7EsW1kYWtpIGJsb2sgZcWfbGVtaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzMwCittc2dpZCAib3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJkw7zEn8O8bSB0YXJhbWEgYcOnxLFsxLF5b3IiCisKKyM6IGUyZnNjay9wYXNzMS5jOjc2NAorbXNnaWQgImdldHRpbmcgbmV4dCBpbm9kZSBmcm9tIHNjYW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI3OQorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAiMS4gZ2XDp2nFnyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGluZGlyZWN0IGJsb2NrcyBvZiBpbm9kZSAldSIKK21zZ3N0ciAiJXUgZMO8xJ/DvG3DvG7DvG4gZG9sYXlsxLEgYmxva2xhcsSxIG9rdW51eW9yIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzg2Cittc2dpZCAiYmFkIGlub2RlIG1hcCIKK21zZ3N0ciAiaGF0YWzEsSBkw7zEn8O8bSBlxZ9sZW1pIgorCisjOiBlMmZzY2svcGFzczEuYzoxNDA5Cittc2dpZCAiaW5vZGUgaW4gYmFkIGJsb2NrIG1hcCIKK21zZ3N0ciAiaGF0YWzEsSBibG9rIGXFn2xlbWluZGVraSBkw7zEn8O8bSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQyOQorbXNnaWQgImltYWdpYyBpbm9kZSBtYXAiCittc2dzdHIgImltYWdpYyBkw7zEn8O8bSBlxZ9sZW1pIgorCisjOiBlMmZzY2svcGFzczEuYzoxNDU2Cittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBibG9jayBtYXAiCittc2dzdHIgInRla3JhcmxhbmFuIGJsb2tsYXLEsW4gZcWfbGVtaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTU2NworbXNnaWQgImV4dCBhdHRyIGJsb2NrIG1hcCIKK21zZ3N0ciAiZWsgw7Z6ZWxsaWsgYmxvxJ91IGXFn2xlbWkiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTZsdSglYyk6IGV4cGVjdGluZyAlNmx1IGdvdCBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI4OTgKK21zZ2lkICJibG9jayBiaXRtYXAiCittc2dzdHIgImJsb2sgYml0ZcWfbGVtaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjkwNAorbXNnaWQgImlub2RlIGJpdG1hcCIKK21zZ3N0ciAiZMO8xJ/DvG0gYml0ZcWfbGVtaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjkxMAorbXNnaWQgImlub2RlIHRhYmxlIgorbXNnc3RyICJkw7zEn8O8bSB0YWJsb3N1IgorCisjOiBlMmZzY2svcGFzczIuYzoyODMKK21zZ2lkICJQYXNzIDIiCittc2dzdHIgIjIuIGdlw6dpxZ8iCisKKyM6IGUyZnNjay9wYXNzMi5jOjgwNgorbXNnaWQgIkNhbiBub3QgY29udGludWUuIgorbXNnc3RyICJEZXZhbSBlZGlsZW1peW9yLiIKKworIzogZTJmc2NrL3Bhc3MzLmM6NzcKK21zZ2lkICJpbm9kZSBkb25lIGJpdG1hcCIKK21zZ3N0ciAiZMO8xJ/DvG1sZXJpIGluZGVrc2xpIGJpdGXFn2xlbSIKKworIzogZTJmc2NrL3Bhc3MzLmM6ODYKK21zZ2lkICJQZWFrIG1lbW9yeSIKK21zZ3N0ciAiRG9ydWsgYmVsbGVrIgorCisjOiBlMmZzY2svcGFzczMuYzoxNDgKK21zZ2lkICJQYXNzIDMiCittc2dzdHIgIjMuIGdlw6dpxZ8iCisKKyM6IGUyZnNjay9wYXNzMy5jOjM0MAorbXNnaWQgImlub2RlIGxvb3AgZGV0ZWN0aW9uIGJpdG1hcCIKK21zZ3N0ciAiZMO8xJ/DvG0gZMO2bmfDvHPDvCBzYXB0YW1hIGJpdGXFn2xlbWkiCisKKyM6IGUyZnNjay9wYXNzNC5jOjE5NgorbXNnaWQgIlBhc3MgNCIKK21zZ3N0ciAiNC4gZ2XDp2nFnyIKKworIzogZTJmc2NrL3Bhc3M1LmM6NzQKK21zZ2lkICJQYXNzIDUiCittc2dzdHIgIjUuIGdlw6dpxZ8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTEKK21zZ2lkICIobm8gcHJvbXB0KSIKK21zZ3N0ciAiKGtvbXV0IGlzdGVtaSB5b2spIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyCittc2dpZCAiRml4IgorbXNnc3RyICJEw7x6ZWx0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzCittc2dpZCAiQ2xlYXIiCittc2dzdHIgIlRlbWl6bGUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQKK21zZ2lkICJSZWxvY2F0ZSIKK21zZ3N0ciAiS29udW1sYW5kxLFyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1Cittc2dpZCAiQWxsb2NhdGUiCittc2dzdHIgIlRhaHNpcyBldCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NgorbXNnaWQgIkV4cGFuZCIKK21zZ3N0ciAiR2VuacWfbGV0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3Cittc2dpZCAiQ29ubmVjdCB0byAvbG9zdCtmb3VuZCIKK21zZ3N0ciAiL2xvc3QrZm91bmQgYSBiYcSfbGFuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJPbHXFn3R1ciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OQorbXNnaWQgIlNhbHZhZ2UiCittc2dzdHIgIkt1cnRhcsSxbGFjYWtsYXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjAKK21zZ2lkICJUcnVuY2F0ZSIKK21zZ3N0ciAiS8SxcnAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEKK21zZ2lkICJDbGVhciBpbm9kZSIKK21zZ3N0ciAiRMO8xJ/DvG3DvCB0ZW1pemxlIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyCittc2dpZCAiQWJvcnQiCittc2dzdHIgIlZhemdlw6ciCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMKK21zZ2lkICJTcGxpdCIKK21zZ3N0ciAiQXnEsXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiRGV2YW0gZXQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUKK21zZ2lkICJDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyIKK21zZ3N0ciAiw4dvayBkw7zEn8O8bWzDvCBibG9rbGFyxLEga29weWFsYXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYKK21zZ2lkICJEZWxldGUgZmlsZSIKK21zZ3N0ciAiRG9zeWF5xLEgU2lsIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3Cittc2dpZCAiU3VwcHJlc3MgbWVzc2FnZXMiCittc2dzdHIgIsSwbGV0aWxlcmkgZW5nZWxsZSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OAorbXNnaWQgIlVubGluayIKK21zZ3N0ciAiQmHEn8SxIGthbGTEsXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkKK21zZ2lkICJDbGVhciBIVHJlZSBpbmRleCIKK21zZ3N0ciAiSFRyZWUgaW5kZWtzaW5pIHRlbWl6bGUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAKK21zZ2lkICJSZWNyZWF0ZSIKK21zZ3N0ciAiWWVuaWRlbiBvbHXFn3R1ciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OQorbXNnaWQgIihOT05FKSIKK21zZ3N0ciAiKEjEsMOHQsSwUsSwKSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MAorbXNnaWQgIkZJWEVEIgorbXNnc3RyICJEw5xaRUxUxLBMRMSwIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxCittc2dpZCAiQ0xFQVJFRCIKK21zZ3N0ciAiVEVNxLBaTEVORMSwIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyCittc2dpZCAiUkVMT0NBVEVEIgorbXNnc3RyICJLT05VTUxBTkRJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzCittc2dpZCAiQUxMT0NBVEVEIgorbXNnc3RyICJUQUhTxLBTIEVExLBMRMSwIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0Cittc2dpZCAiRVhQQU5ERUQiCittc2dzdHIgIkdFTsSwxZ5MRVTEsExExLAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUKK21zZ2lkICJSRUNPTk5FQ1RFRCIKK21zZ3N0ciAiVEVLUkFSIEJBxJ5MQU5ESSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NgorbXNnaWQgIkNSRUFURUQiCittc2dzdHIgIk9MVcWeVFVSVUxEVSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NworbXNnaWQgIlNBTFZBR0VEIgorbXNnc3RyICJLVVJUQVJJTEFCxLBMxLBSTEVSIEzEsFNURUxFTkTEsCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OAorbXNnaWQgIlRSVU5DQVRFRCIKK21zZ3N0ciAiS0lSUElMREkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODkKK21zZ2lkICJJTk9ERSBDTEVBUkVEIgorbXNnc3RyICJEw5zEnsOcTSBURU3EsFpMRU5ExLAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTAKK21zZ2lkICJBQk9SVEVEIgorbXNnc3RyICJWQVpHRcOHxLBMRMSwIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxCittc2dpZCAiU1BMSVQiCittc2dzdHIgIkFZUklMREkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTIKK21zZ2lkICJDT05USU5VSU5HIgorbXNnc3RyICJTw5xSw5xZT1IiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMKK21zZ2lkICJNVUxUSVBMWS1DTEFJTUVEIEJMT0NLUyBDTE9ORUQiCittc2dzdHIgIsOHT0sgRMOcxJ7DnE1Mw5wgQkxPS0xBUiBLT1BZQUxBTkRJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0Cittc2dpZCAiRklMRSBERUxFVEVEIgorbXNnc3RyICJET1NZQSBTxLBMxLBORMSwIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1Cittc2dpZCAiU1VQUFJFU1NFRCIKK21zZ3N0ciAiRU5HRUxMRU5ExLAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTYKK21zZ2lkICJVTkxJTktFRCIKK21zZ3N0ciAiQkHEniBLQUxESVJJTERJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3Cittc2dpZCAiSFRSRUUgSU5ERVggQ0xFQVJFRCIKK21zZ3N0ciAiSFRSRUUgxLBOREVLU8SwIFRFTcSwWkxFTkTEsCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OAorbXNnaWQgIldJTEwgUkVDUkVBVEUiCittc2dzdHIgIlRFS1JBUiBPTFXFnlRVUlVMQUNBSyIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3Cittc2dpZCAiQGIgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiJWcgZ3J1YnVudW4gYmxvayBiaXRlxZ9sZW1pIGdydXAgacOnaW5kZSBkZcSfaWwuIChibG9rICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTEKK21zZ2lkICJAaSBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICIlZyBncnVidW51biBkw7zEn8O8bSBiaXRlxZ9sZW1pIGdydXAgacOnaW5kZSBkZcSfaWwuIChibG9rICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSB0YWJsZSBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNgorbXNnaWQgIiIKKyJAaSB0YWJsZSBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorIldBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4iCittc2dzdHIgIiIKKyIlZyBncnVidW51biBkw7zEn8O8bSB0YWJsb3N1IGdydXAgacOnaW5kZSBkZcSfaWwuIChibG9rICViKVxuIgorIlVZQVJJOiBDxLBERMSwIFZFUsSwIEtBWUJJIE9MQVNJTEnEnkkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgc3VwZXJibG9jayBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIHZhbGlkIGV4dDIvZXh0My9leHQ0XG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0uICBJZiB0aGUgZGV2aWNlIGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0Mi9leHQzL2V4dDRcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIHN1cGVyYmxvY2tcbgorIy4gQC1leHBhbmRlZDogaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgc3VwZXJibG9jazpcbgorIy4gQC1leHBhbmRlZDogICAgIGUyZnNjayAtYiA4MTkzIDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6ICBvclxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iIDMyNzY4IDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMgorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiVGhlIEBTIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgdmFsaWQgZXh0Mi9leHQzL2V4dDRcbiIKKyJAZi4gIElmIHRoZSBAdiBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDIvZXh0My9leHQ0XG4iCisiQGYgKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBAU1xuIgorImlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIEBTOlxuIgorIiAgICBlMmZzY2sgLWIgODE5MyA8QHY+XG4iCisiIG9yXG4iCisiICAgIGUyZnNjayAtYiAzMjc2OCA8QHY+XG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTw7xwZXIgYmxvayBva3VuYW3EsXlvciB5YSBkYSBkb8SfcnUgZXh0MiBkb3N5YSBzaXN0ZW1pIHRhbsSxbWxhbcSxeW9yLlxuIgorIkF5Z8SxdCBnZcOnZXJsaXlzZSB2ZSBnZXLDp2VrdGVuIGJpciBleHQyIGRvc3lhIHNpc3RlbWkgacOnZXJpeW9yc2EsXG4iCisiKHZlIGJpciB0YWthcyBiw7Zsw7xtw7wgdmV5YSB1ZnMgeWEgZGEgaGVyIG5leXNlIGRlxJ9pbHNlKVxuIgorInPDvHBlciBibG9rIGJvenVsbXXFnyBkZW1la3Rpci4gQmHFn2thIGJpciBzw7xwZXIgYmxvayBpbGUgZTJmc2NrIMOnYWzEscWfdMSxcm1hecSxXG4iCisiZGVuZW1lbGlzaW5pejpcbiIKKyIgICAgICBlMmZzY2sgLWIgJVMgPGF5Z8SxdD5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIGZpbGVzeXN0ZW0gc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBzdXBlcmJsb2NrKSBpcyAlYiBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGRldmljZSBpcyAlYyBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogRWl0aGVyIHRoZSBzdXBlcmJsb2NrIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiRG9zeWEgc2lzdGVtaSB1enVubHXEn3UgKHPDvHBlcmJsb2sgaWxlIGlsacWfa2lsaSkgJWIgYmxvayxcbiIKKyJheWfEsXTEsW4gZ2Vyw6dlayBib3l1dHUgaXNlICVjIGJsb2t0dXIuXG4iCisiSGVtIHPDvHBlciBibG9rIGhlbSBkZSBkaXNrIGLDtmzDvG1sZW1lIHRhYmxvc3UgYm96dWsgb2xhYmlsaXIhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuCisjLiBALWV4cGFuZGVkOiBUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4KKyMuIEAtZXhwYW5kZWQ6IGZyb20gdGhlIGJsb2NrIHNpemUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwCittc2dpZCAiIgorIkBTIEBiX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbiIKKyJUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4iCisiZnJvbSB0aGUgQGIgc2l6ZS5cbiIKK21zZ3N0ciAiIgorIlPDvHBlcmJsb2sgYmxva191enVubHXEn3UgPSAlYiwgYWTEsW1sYW1hX3V6dW5sdcSfdSA9ICVjLlxuIgorIkJ1IGUyZnNjayBzw7xyw7xtw7xuZGUgYWTEsW1sYW1hIHV6dW5sdWtsYXLEsW7EsW4gYmxvayB1enVubHVrbGFyxLFuZGFuXG4iCisiZmFya2zEsSBvbG1hc8SxIGRlc3Rla2xlbm1peW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2Nrc19wZXJfZ3JvdXAgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NworbXNnaWQgIkBTIEBic19wZXJfZ3JvdXAgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICJTw7xwZXJibG9rIGdydXBfYmHFn8SxbmFfYmxva19zYXnEsXPEsSA9ICViOyAlYyBvbG1hbMSxeWTEsVxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGZpcnN0X2RhdGFfYmxvY2sgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MgorbXNnaWQgIkBTIGZpcnN0X2RhdGFfQGIgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICJTw7xwZXIgYmxvayBpbGtfdmVyaV9ibG/En3UgPSAlYjsgJWMgb2xtYWzEsXlkxLFcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3Cittc2dpZCAiIgorIkBmIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuIgorIlxuIgorbXNnc3RyICIiCisiRG9zeWEgc2lzdGVtaSBiaXIgVVVJRCBpw6dlcm1peW9yOyBiaXIgdGFuZSDDvHJldGlsaXlvci5cbiIKKyJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IGlmIHNldmVyYWwgaW5vZGUgb3IgYmxvY2sgYml0bWFwIGJsb2NrcyBvciBwYXJ0XG4iCisib2YgdGhlIGlub2RlIHRhYmxlIHJlcXVpcmUgcmVsb2NhdGlvbiwgeW91IG1heSB3aXNoIHRvIHRyeVxuIgorInJ1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiAlUycgb3B0aW9uIGZpcnN0LiAgVGhlIHByb2JsZW1cbiIKKyJtYXkgbGllIG9ubHkgd2l0aCB0aGUgcHJpbWFyeSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYW5kXG4iCisidGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suXG4iCisiXG4iCittc2dzdHIgIiIKKyJCaWxnaTogVGHFn8Sxbm1hc8SxIGdlcmVrZW4gZMO8xJ/DvG0gdGFibG9zdW51biBiaXIgcGFyw6dhc8SxIG9sYW5cbiIKKyJ5YSBkYSB5ZW5pZGVuIGtvbnVtbGFubWFzxLEgZ2VyZWtlbiBibG9rIGJpdGXFn2xlbSBibG9rbGFyxLFcbiIKKyJ5YSBkYSBkw7zEn8O8bWxlcmkgdmFyc2EsIGUyZnNjayd5xLEgw7ZuY2UgJy1iICVTJyBzZcOnZW5lxJ9peWxlXG4iCisiw6dhbMSxxZ90xLFybWFsxLFzxLFuxLF6LiBTb3J1biBzYWRlY2UgYmlyaW5jaWwgYmxvxJ91biBncnVwXG4iCisidGFuxLFtbGF5xLFjxLFzxLEgaWxlIGlsZ2lsaSBvbGFiaWxpciB2ZSB5ZWRla2xlbWUgYmxvxJ91IGdydXBcbiIKKyJ0YW7EsW1sYXnEsWPEsXPEsSBkYSBkb8SfcnUgb2xhYmlsaXIuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvcnJ1cHRpb24gZm91bmQgaW4gc3VwZXJibG9jay4gICglcyA9ICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzEKK21zZ2lkICJDb3JydXB0aW9uIGZvdW5kIGluIEBTLiAgKCVzID0gJU4pLlxuIgorbXNnc3RyICJTw7xwZXJibG9rIGnDp2luZGUgYm96dWtsdWsgc2FwdGFuZMSxLiAoJXMgPSAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIGRldmljZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgQHY6ICVtXG4iCittc2dzdHIgIkF5Z8SxdMSxbiBmaXppa3NlbCB1enVubHXEn3Ugc2FwdGFuxLFya2VuIGhhdGEgb2x1xZ90dTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgY291bnQgaW4gc3VwZXJibG9jayBpcyAlaSwgc2hvdWxkIGJlICVqLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MQorbXNnaWQgIkBpIGNvdW50IGluIEBTIGlzICVpLCBAcyAlai5cbiIKK21zZ3N0ciAiU8O8cGVyYmxvayBpw6dpbmRla2kgZMO8xJ/DvG0gc2F5xLFzxLEgJWk7ICVqIG9sbWFsxLF5ZMSxLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4NQorbXNnaWQgIlRoZSBIdXJkIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZlYXR1cmUuXG4iCittc2dzdHIgIkh1cmQsIGRvc3lhIHTDvHLDvCDDtnplbGxpxJ9pbmkgZGVzdGVrbGVtZXouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgJWkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzIGFuIEBuIEBqIChAaSAlaSkuXG4iCittc2dzdHIgIlPDvHBlcmJsb2sgaGF0YWzEsSBleHQzIGfDvG5sw7zEn8O8IGnDp2VyaXlvciAoZMO8xJ/DvG0gJWkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBtdWx0aXBsZSBmaWxlc3lzdGVtIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk1Cittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIG11bHRpcGxlIEBmIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4iCittc2dzdHIgIiIKKyJExLHFnyBnw7xubMO8ayDDp29rIHNhecSxZGEgZG9zeWEgc2lzdGVtaSBrdWxsYW7EsWPEsXPEsSBpw6dlcml5b3IuIChkZXN0ZWtsZW5taXlvcilcbiIKKworIy4gQC1leHBhbmRlZDogQ2FuJ3QgZmluZCBleHRlcm5hbCBqb3VybmFsXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjAwCittc2dpZCAiQ2FuJ3QgZmluZCBleHRlcm5hbCBAalxuIgorbXNnc3RyICJExLHFnyBnw7xubMO8ayBidWx1bmFtxLF5b3JcbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgYmFkIHN1cGVyYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDUKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgYmFkIEBTXG4iCittc2dzdHIgIkTEscWfIGfDvG5sw7xrIGhhdGFsxLEgc8O8cGVyYmxvayBpw6dlcml5b3JcbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmlsZXN5c3RlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxMAorbXNnaWQgIkV4dGVybmFsIEBqIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBAZlxuIgorbXNnc3RyICJExLHFnyBnw7xubMO8ayBidSBkb3N5YSBzaXN0ZW1pbmkgZGVzdGVrbGVtaXlvclxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGpvdXJuYWwgc3VwZXJibG9jayBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGpvdXJuYWwgCisjLiBALWV4cGFuZGVkOiBmb3JtYXQuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGFsc28gcG9zc2libGUgdGhlIGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxNQorIywgZnV6enkKK21zZ2lkICIiCisiQGYgQGogQFMgaXMgdW5rbm93biB0eXBlICVOICh1bnN1cHBvcnRlZCkuXG4iCisiSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIEBqICIKKyJmb3JtYXQuXG4iCisiSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiIgorIkV4dDMgZ8O8bmzDvMSfw7wgc8O8cGVyYmxvayB0w7xyw7wgJU4gYmlsaW5taXlvciAoZGVzdGVrbGVubWl5b3IpLlxuIgorIkJ1IGtvcHlhLCBidSBkb3N5YSBzaXN0ZW1pIHRhcmFmxLFuZGFuIGRlc3Rla2xlbm1leWVuIHZlL3lhXG4iCisiZXNraSBiaXIgYmnDp2ltIGdpYmkgZ8O2csO8bsO8eW9yLlxuIgorIkF5csSxY2EsIGfDvG5sw7xrIHPDvHBlcmJsb2t1bnVuIGJvenVrIG9sbWFzxLEgZGEgbcO8bWvDvG4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyMworIywgZnV6enkKK21zZ2lkICJAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICJFeHQzIGfDvG5sw7zEn8O8IHPDvHBlcmJsb2t1IGJvenVrLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhc19qb3VybmFsIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIGpvdXJuYWwgaXMgcHJlc2VudC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjgKKyMsIGZ1enp5Cittc2dpZCAiQFMgaGFzX0BqIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIEBqIGlzIHByZXNlbnQuXG4iCittc2dzdHIgImV4dDMga3VydGFybWEgYmF5cmHEn8SxIHRlbWl6IGFtYSBnw7xubMO8ayB2ZXJpIGnDp2VyaXlvci5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIGpvdXJuYWwgaXMgcHJlc2VudC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMzMKKyMsIGZ1enp5Cittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJTw7xwZXJibG9rIGV4dDMgbmVlZHNfcmVjb3ZlcnkgYmF5cmHEn8SxIGnDp2VyaXlvciBhbWEgZ8O8bmzDvGsgeW9rLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBqb3VybmFsIGhhcyBkYXRhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzOAorIywgZnV6enkKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgQGogaGFzIGRhdGEuXG4iCittc2dzdHIgImV4dDMga3VydGFybWEgYmF5cmHEn8SxIHRlbWl6IGFtYSBnw7xubMO8ayB2ZXJpIGnDp2VyaXlvci5cbiIKKworIy4gQC1leHBhbmRlZDogQ2xlYXIgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDMKK21zZ2lkICJDbGVhciBAaiIKK21zZ3N0ciAiR8O8bmzDvMSfw7wgVGVtaXpsZSIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBmaWxlc3lzdGVtLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0OCBlMmZzY2svcHJvYmxlbS5jOjcwNworbXNnaWQgIkBmIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIEBmLiAgIgorbXNnc3RyICJkb3N5YXNpc3RlbWluaW4gw7Z6ZWxsaWsgYmF5cmFrbGFyxLEgZXRraW4gYW1hIGRvc3lhc2lzdGVtaW5pbiBzw7xyw7xtw7wgMC4iCisKKyMuIEAtZXhwYW5kZWQ6ICVzIG9ycGhhbmVkIGlub2RlICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjUzCittc2dpZCAiJXMgQG8gQGkgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbiIKK21zZ3N0ciAiJXMgYXJ0xLFrIGTDvMSfw7xtICVpIChrdWxsX2tpbWw9JUl1LCBncnVwX2tpbWw9JUlnLCBraXA9JUltLCBib3k9JUlzKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjU4CisjLCBmdXp6eQorbXNnaWQgIkBJICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgImTDvMSfw7xtICVpIGnDp2luZGVraSBibG9rICMlQiAoJWIpIGt1cmFsZMSxxZ/EsS5cbiIKKworIy4gQC1leHBhbmRlZDogQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYzCisjLCBmdXp6eQorbXNnaWQgIkFscmVhZHkgY2xlYXJlZCAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICJhcnTEsWsgZMO8xJ/DvG0gJWkgacOnaW5kZWtpIGJsb2sgIyVCICglYikgemF0ZW4gdGVtaXpsZW5tacWfLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIG9ycGhhbmVkIGlub2RlICVpIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBvIEBpICVpIGluIEBTLlxuIgorbXNnc3RyICJzw7xwZXIgYmxvayBpw6dpbmRla2kgYXJ0xLFrIGTDvMSfw7xtICVpIGt1cmFsZMSxxZ/EsS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBpbm9kZSAlaSBpbiBvcnBoYW5lZCBpbm9kZSBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJASSBAaSAlaSBpbiBAbyBAaSBsaXN0LlxuIgorbXNnc3RyICJhcnTEsWsgZMO8xJ/DvG0gbGlzdGVzaW5kZWtpIGTDvMSfw7xtICVpIGt1cmFsZMSxxZ/EsVxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjc4CisjLCBmdXp6eQorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICIiCisiRXh0MyBnw7xubMO8xJ/DvCBzw7xwZXIgYmxvxJ91IGJpbGlubWV5ZW4gc2FsdC1va3VudXIgw7Z6ZWxsaWtsaSBiaXIgYmF5cmFrICIKKyJpw6dlcml5b3IuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODMKKyMsIGZ1enp5Cittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIiIKKyJFeHQzIGfDvG5sw7zEn8O8bsO8biBzw7xwZXIgYmxvxJ91IGJpbGlubWV5ZW4gdXl1bXN1eiDDtnplbGxpa2xpIGJpciBiYXlyYWsgIgorImnDp2VyaXlvci5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjg4Cittc2dpZCAiQGogdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuIgorbXNnc3RyICJnw7xubMO8ayBzw7xyw7xtw7wgYnUgZTJmc2NrIHRhcmFmxLFuZGFuIGRlc3Rla2xlbm1peW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBNb3Zpbmcgam91cm5hbCBmcm9tIC8lcyB0byBoaWRkZW4gaW5vZGUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTW92aW5nIEBqIGZyb20gLyVzIHRvIGhpZGRlbiBAaS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkfDvG5sw7xrIC8lcyBkZW4gZ2l6bGkgZMO8xJ/DvG1lIHRhxZ/EsW7EsXlvci5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgbW92aW5nIGpvdXJuYWw6ICVtXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgbW92aW5nIEBqOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiZ8O8bmzDvGsgdGHFn8SxbsSxcmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZvdW5kIGludmFsaWQgVjIgam91cm5hbCBzdXBlcmJsb2NrIGZpZWxkcyAoZnJvbSBWMSBqb3VybmFsKS5cbgorIy4gQC1leHBhbmRlZDogQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgam91cm5hbCBzdXBlcmJsb2NrLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMwMworbXNnaWQgIiIKKyJGb3VuZCBAbiBWMiBAaiBAUyBmaWVsZHMgKGZyb20gVjEgQGopLlxuIgorIkNsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIEBqIEBTLi4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJHZcOnZXJzaXogVjIgZ8O8bmzDvMSfw7wgc8O8cGVyIGJsb2sgYWxhbmxhcsSxIGJ1bHVuZHUgKFYxIGfDvG5sw7zEn8O8bmRlbikuXG4iCisiVjEgZ8O8bmzDvMSfw7wgc8O8cGVyIGJsb8SfdW5kYW4gc29ucmFraSBhbGFubGFyIHRlbWl6bGVuaXlvci4uLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBSdW4gam91cm5hbCBhbnl3YXkKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzA5Cittc2dpZCAiUnVuIEBqIGFueXdheSIKK21zZ3N0ciAiR8O8bmzDvMSfw7wgeWluZSBkZSDDp2FsxLHFn3TEsXIiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTQKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiIgorIlllZGVrIHPDvHBlciBibG9rZGEga3VydGFybWEgYmF5cmHEn8SxIHRlbWl6IG9sZHXEn3VuZGFuIGfDvG5sw7xrIGhlcsWfZXllIHJhxJ9tZW4gIgorIsOnYWzEscWfYWNhay5cbiIKKworIy4gQC1leHBhbmRlZDogQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTkKK21zZ2lkICIiCisiQmFja2luZyB1cCBAaiBAaSBAYiBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkfDvG5sw7xrIGTDvMSfw7xtw7wgYmxvayBiaWxnaWxlcmkgeWVkZWtsZW5peW9yLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgcmVzaXplX2lub2RlIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9ibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaXMgJU47IHNob3VsZCBiZSB6ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyNAorbXNnaWQgIiIKKyJAZiBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9AaSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisiaXMgJU47IEBzIHplcm8uICAiCittc2dzdHIgIiIKKyJkb3N5YSBzaXN0ZW1pbmRlIHJlc2l6ZV/EsW5vZGUgZXRraW4gZGXEn2lsLCBhbWEgc19yZXNlcnZlZF9nZHRfYmxvY2tzIGnDp2luXG4iCisiJU4gZGXEn2VyaSB2YXI7IHPEsWbEsXIgb2xtYWzEsXlkxLEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZV9pbm9kZSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgaW5vZGUgaXMgbm9uLXplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzMwCittc2dpZCAiUmVzaXplX0BpIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBAaSBpcyBub24temVyby4gICIKK21zZ3N0ciAiUmVzaXplX2lub2RlIGV0a2luIGRlxJ9pbCwgYW1hIGTDvMSfw7xtIGJveXV0bGFuZMSxcm1hIHPEsWbEsXJkYW4gZmFya2zEsS4gICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIG5vdCB2YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMzUKK21zZ2lkICJSZXNpemUgQGkgbm90IHZhbGlkLiAgIgorbXNnc3RyICJEw7zEn8O8bSBib3l1dGxhbmTEsXJtYSBnZcOnZXJzaXouICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNDAKKyMsIGZ1enp5Cittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiU8O8cGVyYmxvxJ91biBzb24gYmHEn2xhbWEgemFtYW7EsSBnZWxlY2VrdGUuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNDUKKyMsIGZ1enp5Cittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiU8O8cGVyYmxva3VuIHNvbiB5YXptYSB6YW1hbsSxIGdlbGVjZWt0ZS4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIHNob3VsZCBiZSAlWC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBAcyAlWC4gICIKK21zZ3N0ciAiaGFyaWNpIHPDvHBlcmJsb2t1ICVYIG9sbWFzxLEgZ2VyZWtlbiBkb3N5YXNpc3RlbWkgacOnaW4gc8O8cGVyYmxvayBpbWFzxLEiCisKKyMuIEAtZXhwYW5kZWQ6IEFkZGluZyBkaXJoYXNoIGhpbnQgdG8gZmlsZXN5c3RlbS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzU0Cittc2dpZCAiIgorIkFkZGluZyBkaXJoYXNoIGhpbnQgdG8gQGYuXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNTkKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNjkKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNzQKK21zZ2lkICJMYXN0IEBnIEBiIEBCIHVuaW5pdGlhbGl6ZWQuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB0cmFuc2FjdGlvbiAlaSB3YXMgY29ycnVwdCwgcmVwbGF5IHdhcyBhYm9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzgzCittc2dpZCAiVGhlIHRlc3RfZnMgZmxhZyBpcyBzZXQgKGFuZCBleHQ0IGlzIGF2YWlsYWJsZSkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4OAorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldClcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzk0Cittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAiCisic2V0KVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IE9uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwMAorbXNnaWQgIk9uZSBvciBtb3JlIEBiIEBnIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBpbm9kZXMgY291bnQgdG8gJWogKHdhcyAlaSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDUKKyMsIGZ1enp5Cittc2dpZCAiU2V0dGluZyBmcmVlIEBpcyBjb3VudCB0byAlaiAod2FzICVpKVxuIgorbXNnc3RyICJZZWRlayBibG9rIHNhecSxc8SxICVsdSBvbGFyYWsgYmVsaXJsZW5peW9yXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBibG9ja3MgY291bnQgdG8gJWMgKHdhcyAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTAKKyMsIGZ1enp5Cittc2dpZCAiU2V0dGluZyBmcmVlIEBicyBjb3VudCB0byAlYyAod2FzICViKVxuIgorbXNnc3RyICJZZWRlayBibG9rIHNhecSxc8SxICVsdSBvbGFyYWsgYmVsaXJsZW5peW9yXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1ha2luZyBxdW90YSBpbm9kZSAlaSAoJVEpIGhpZGRlbi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTUKKyMsIGZ1enp5Cittc2dpZCAiTWFraW5nIEBxIEBpICVpICglUSkgaGlkZGVuLlxuIgorbXNnc3RyICIiCisiR8O8bmzDvGsgLyVzIGRlbiBnaXpsaSBkw7zEn8O8bWUgdGHFn8SxbsSxeW9yLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjAKKyMsIGZ1enp5Cittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgIgorbXNnc3RyICJibG9rIHV6dW5sdcSfdSBoYXRhbMSxIC0gJXMiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyNQorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfb3BlbjI6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayA2NGJpdCBmaWxlc3lzdGVtcyBuZWVkcyBleHRlbnRzIHRvIGFjY2VzcyB0aGUgd2hvbGUgZGlzay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDAKK21zZ2lkICJAUyA2NGJpdCBmaWxlc3lzdGVtcyBuZWVkcyBleHRlbnRzIHRvIGFjY2VzcyB0aGUgd2hvbGUgZGlzay4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NQorbXNnaWQgIkZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZy4gICglTiwgbWF4IHZhbHVlICVnKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NTIKK21zZ2lkICJQYXNzIDE6IENoZWNraW5nIEBpcywgQGJzLCBhbmQgc2l6ZXNcbiIKK21zZ3N0ciAiMS4gZ2XDp2nFnzogZMO8xJ/DvG1sZXIsIGJsb2tsYXIgdmUgdXp1bmx1a2xhciBkZW5ldGxlbml5b3JcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDU2Cittc2dpZCAiQHIgaXMgbm90IGEgQGQuICAiCittc2dzdHIgIkvDtmsgZMO8xJ/DvG3DvCBiaXIgZGl6aW4gZGXEn2lsLiAgIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjEKK21zZ2lkICJAciBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAiCittc2dzdHIgIkvDtmsgZMO8xJ/DvG3DvCBpw6dpbiBkdGltZSBiZWxpcnRpbG1pxZ8gKGVza2kgbWtlMmZzJ2RlbiBkb2xhecSxIG9sYWJpbGlyKS4gICIKKworIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2NgorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgIlllZGVrIGTDvMSfw7xtICVpICglUSkgaGF0YWzEsSBraXAgacOnZXJpeW9yLiAgIgorCisjLiBALWV4cGFuZGVkOiBkZWxldGVkIGlub2RlICVpIGhhcyB6ZXJvIGR0aW1lLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICJARCBAaSAlaSBoYXMgemVybyBkdGltZS4gICIKK21zZ3N0ciAiU2lsaW5lbiBkw7zEn8O8bSAlaSBzxLFmxLFyIGR0aW1lIGnDp2VyaXlvci4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gICIKK21zZ3N0ciAiRMO8xJ/DvG0gJWkga3VsbGFuxLFtZGEsIGFtYSBkdGltZSBiZWxpcnRpbG1pxZ8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICJEw7zEn8O8bSAlaSBiaXIgc8SxZsSxciB1enVubHVrbHUgZGl6aW5kaXIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDg2Cittc2dpZCAiQGcgJWcncyBAYiBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiIgorIiVnIGdydWJ1bnVuICViIGRla2kgYmxvayBiaXRlxZ9sZW1pIGRpxJ9lciBkb3N5YSBzaXN0ZW1pIGJsb2tsYXLEsSBpbGUgIgorIsOnZWxpxZ9peW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5MQorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKyIlZyBncnVidW51biAlYiBkZWtpIGTDvMSfw7xtIGJpdGXFn2xlbWkgZGnEn2VyIGRvc3lhIHNpc3RlbWkgYmxva2xhcsSxIGlsZSAiCisiw6dlbGnFn2l5b3IuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgdGFibGUgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTYKK21zZ2lkICJAZyAlZydzIEBpIHRhYmxlIGF0ICViIEBDLlxuIgorbXNnc3RyICIiCisiJWcgZ3J1YnVudW4gJWIgZGVraSBkw7zEn8O8bSB0YWJsb3N1IGRpxJ9lciBkb3N5YSBzaXN0ZW1pIGJsb2tsYXLEsSBpbGUgIgorIsOnZWxpxZ9peW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDEKK21zZ2lkICJAZyAlZydzIEBiIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICIlZyBncnVidW51biBibG9rIGJpdGXFn2xlbWkgKCViKSBoYXRhbMSxLiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDYKK21zZ2lkICJAZyAlZydzIEBpIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICIlZyBncnVidW51biBkw7zEn8O8bSBiaXRlxZ9sZW1pICglYikgaGF0YWzEsS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfc2l6ZSBpcyAlSXMsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTEKK21zZ2lkICJAaSAlaSwgaV9zaXplIGlzICVJcywgQHMgJU4uICAiCittc2dzdHIgIkTDvMSfw7xtICVpIGTDvMSfw7xtIHV6dW5sdcSfdSAlSXMsICVOIG9sbWFsxLF5ZMSxLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9ibG9ja3MgaXMgJUliLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE2Cittc2dpZCAiQGkgJWksIGlfQGJzIGlzICVJYiwgQHMgJU4uICAiCittc2dzdHIgIkRvc3lhIGTDvMSfw7xtICVpLCBibG9rIGTDvMSfw7xtw7wgJUliLCAlTiBvbG1hbMSxeWTEsS4gICIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyMQorIywgZnV6enkKK21zZ2lkICJASSAlQiAoJWIpIGluIEBpICVpLiAgIgorbXNnc3RyICJEw7zEn8O8bSAlaSBpw6dpbmRla2kgYmxvayAjJUIgKCViKSBrdXJhbGTEscWfxLEuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgb3ZlcmxhcHMgZmlsZXN5c3RlbSBtZXRhZGF0YSBpbiBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MjYKKyMsIGZ1enp5Cittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiIgorIkTDvMSfw7xtICVpIGnDp2luZGVraSBibG9rICMlQiAoJWIpIGRvc3lhIHNpc3RlbWkgbWV0YXZlcmlzaW5pbiDDvHplcmluZSAiCisidGHFn8SxeW9yLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIkTDvMSfw7xtICVpIGt1cmFsZMSxxZ/EsSBibG9rKGxhcikgacOnZXJpeW9yLiAgIgorCisjLiBALWV4cGFuZGVkOiBUb28gbWFueSBpbGxlZ2FsIGJsb2NrcyBpbiBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgaWxsZWdhbCBAYnMgaW4gQGkgJWkuXG4iCittc2dzdHIgIkTDvMSfw7xtICVpIGnDp2luZGUgw6dvayBmYXpsYSBrdXJhbGTEscWfxLEgYmxvay5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGJhZCBibG9jayBpbm9kZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDEKKyMsIGZ1enp5Cittc2dpZCAiQEkgJUIgKCViKSBpbiBiYWQgQGIgQGkuICAiCittc2dzdHIgIkhhdGFsxLEgYmxvayBkw7zEn8O8bcO8IGnDp2luZGVraSBibG9rICVCICglYikga3VyYWxkxLHFn8SxLiAgIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQ2Cittc2dpZCAiQmFkIEBiIEBpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJIYXRhbMSxIGJsb2sgZMO8xJ/DvG3DvCBrdXJhbGTEscWfxLEgYmxvayhsYXIpIGnDp2VyaXlvci4gICIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIG9yIGJhZCBibG9jayBpbiB1c2UhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUxCittc2dpZCAiRHVwbGljYXRlIG9yIGJhZCBAYiBpbiB1c2UhXG4iCittc2dzdHIgIlRla3Jhcmxhbm3EscWfIHlhIGRhIGhhdGFsxLEgYmxvayBrdWxsYW7EsW1kYSFcbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrICViIHVzZWQgYXMgYmFkIGJsb2NrIGlub2RlIGluZGlyZWN0IGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1NgorbXNnaWQgIkJhZCBAYiAlYiB1c2VkIGFzIGJhZCBAYiBAaSBpbmRpcmVjdCBAYi4gICIKK21zZ3N0ciAiSGF0YWzEsSBibG9rICViLCBoYXRhbMSxIGJsb2sgZMO8xJ/DvG3DvCBkb2xheWzEsSBibG/En3Ugb2xhcmFrIGt1bGxhbsSxbG3EscWfLiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4KKyMuIEAtZXhwYW5kZWQ6IHNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGluIHRoZSBmaWxlc3lzdGVtLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2MQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgYmFkIEBiIEBpIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuIgorInNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4iCisiaW4gdGhlIEBmLlxuIgorbXNnc3RyICIiCisiXG4iCisiSGF0YWzEsSBibG9rIGTDvMSfw7xtw7wgZ2FsaWJhIGJvenVsbXXFny4gQnUgZHVydW1kYSBoZXLFn2V5aSBkdXJkdXJ1cFxuIgorImRvc3lhIHNpc3RlbWluZGVraSBoYXRhbMSxIGJsb2tsYXLEsSB0YXJhbWFrIGnDp2luIGUyZnNjayAtY1xuIgorIsOnYWzEscWfdMSxcm1hbMSxc8SxbsSxei5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IElmIHRoZSBibG9jayBpcyByZWFsbHkgYmFkLCB0aGUgZmlsZXN5c3RlbSBjYW4gbm90IGJlIGZpeGVkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2OAorbXNnaWQgIiIKKyJcbiIKKyJJZiB0aGUgQGIgaXMgcmVhbGx5IGJhZCwgdGhlIEBmIGNhbiBub3QgYmUgZml4ZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJCbG9rIGdlcsOnZWt0ZW4gaGF0YWzEsXlzYSwgZG9zeWEgc2lzdGVtaSBkw7x6ZWx0aWxlbWV6LlxuIgorCisjLiBALWV4cGFuZGVkOiBZb3UgY2FuIHJlbW92ZSB0aGlzIGJsb2NrIGZyb20gdGhlIGJhZCBibG9jayBsaXN0IGFuZCBob3BlXG4KKyMuIEAtZXhwYW5kZWQ6IHRoYXQgdGhlIGJsb2NrIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTczCittc2dpZCAiIgorIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKyJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJCdSBibG/En3UgaGF0YWzEsSBibG9rbGFyIGxpc3Rlc2luZGVuIHNpbGViaWxpciB2ZSBidSBibG/En3VuIGdlcsOnZWt0ZW5cbiIKKyJkb8SfcnUgb2xkdcSfdW51IHVtYWJpbGlyc2luaXosIGFuY2FrIGhpw6diaXIgZ2FyYW50aXNpIHlva3R1ci5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIHByaW1hcnkgc3VwZXJibG9jayAoJWIpIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzkKK21zZ2lkICJUaGUgcHJpbWFyeSBAUyAoJWIpIGlzIG9uIHRoZSBiYWQgQGIgbGlzdC5cbiIKK21zZ3N0ciAiQmlyaW5jaWwgZG9zeWEgc2lzdGVtaSAoJWIpIGhhdGFsxLEgYmxva2xhciBsaXN0ZXNpbmRlIGthecSxdGzEsS5cbiIKKworIy4gQC1leHBhbmRlZDogQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgZ3JvdXAgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTg0Cittc2dpZCAiQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgQGcgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBAYiBsaXN0XG4iCittc2dzdHIgIiIKKyJCaXJpbmNpbCBncnVwIHRhbsSxbWxhcsSxbmRha2kgYmxvayAlYiwgaGF0YWzEsSBibG9rbGFyIGxpc3Rlc2luZGUga2F5xLF0bMSxXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3Mgc3VwZXJibG9jayAoJWIpIGlzIGJhZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1OTAKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIEBTICglYikgaXMgYmFkLlxuIgorbXNnc3RyICJVeWFyxLE6ICVnIGdydWJ1bnVuIHN1cGVyYmxvxJ91ICglYikgaGF0YWzEsS5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBncm91cCBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgYmxvY2sgKCViKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1OTUKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIEBnIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBAYiAoJWIpLlxuIgorbXNnc3RyICIiCisiVXlhcsSxICVnIGdydWJ1bnVuIGdydXAgdGFuxLFtbGFyxLEga29weWFzxLEgYmlyIGhhdGFsxLEgYmxvayBpw6dlcml5b3IgKCViKS5cbiIKKworIy4gQC1leHBhbmRlZDogUHJvZ3JhbW1pbmcgZXJyb3I/ICBibG9jayAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX2Jsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwMQorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yPyAgQGIgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9AYi5cbiIKK21zZ3N0ciAiIgorIlByb2dyYW1sYW1hIGhhdGFzxLE/ICBibG9rICViLCBoYXRhbMSxIGJsb2sgacWfbGVtaW5kZSBzZWJlcHNpeiBvbGFyYWsgdGFsZXAgIgorImVkaWxkaS5cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyAlTiBjb250aWd1b3VzIGJsb2NrKHMpIGluIGJsb2NrIGdyb3VwICVnIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDcKK21zZ2lkICJAQSAlTiBjb250aWd1b3VzIEBiKHMpIGluIEBiIEBnICVnIGZvciAlczogJW1cbiIKK21zZ3N0ciAiIgorIiVzIGnDp2luICVnIGJsb2sgZ3J1YnVuZGEgJU4gYml0acWfaWsgYmxvxJ9hIHllciBheXLEsWzEsXJrZW4gaGF0YSBvbHXFn3R1OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAYiBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbiIKK21zZ3N0ciAiJXMgdGVrcmFyIGtvbnVtbGFtYXPEsSBpw6dpbiBibG9rIHRhbXBvbnVuYSB5ZXIgYXlyxLFsxLFya2VuIGhhdGEgb2x1xZ90dVxuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxNworbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4iCittc2dzdHIgIiVnIGdydWJ1bnVuICVzICViIGRlbiAlYyB5ZSBha3RhcsSxbMSxeW9yLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgdG8gJWMuLi5cbiIKK21zZ3N0ciAiJWcgZ3J1YnVudW4gJXMgJWMgeWUgYWt0YXLEsWzEsXlvci4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAlYiBvZiAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjcKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBAYiAlYiBvZiAlczogJW1cbiIKK21zZ3N0ciAiVXlhcsSxOiAlc25pbiAlYiBibG/En3Ugb2t1bmFtYWTEsTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHdyaXRlIGJsb2NrICViIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzIKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICJVeWFyxLE6ICVzbmluICViIGJsb8SfdSB5YXrEsWxhbWFkxLE6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjM3IGUyZnNjay9wcm9ibGVtLmM6MTUwMQorbXNnaWQgIkBBIEBpIEBCICglTik6ICVtXG4iCittc2dzdHIgIkTDvMSfw7xtIGJpdGXFn2xlbWkgKCVOKSBheXLEsWzEsXJrZW4gaGF0YSBvbHXFn3R1OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0MgorbXNnaWQgIkBBIEBiIEBCICglTik6ICVtXG4iCittc2dzdHIgIkTDvMSfw7xtIGJpdGXFn2xlbWkgKCVOKSBheXLEsWzEsXJrZW4gaGF0YSBvbHXFn3R1OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbiIKK21zZ3N0ciAiRMO8xJ/DvG0gc2F5xLFzxLEgYmHEnyBiaWxnaXNpbmUgeWVyIGF5csSxbMSxcmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZGlyZWN0b3J5IGJsb2NrIGFycmF5OiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAZCBAYiBhcnJheTogJW1cbiIKK21zZ3N0ciAiRGl6aW4gYmxvxJ91IGRpemlzaW5lIHllciBheXLEsWzEsXJrZW4gaGF0YSBvbHXFn3R1OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgIkTDvMSfw7xtbGVyICglaSkgdGFyYW7EsXJrZW4gaGF0YSBvbHXFn3R1OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiIgorIkTDvMSfw7xtICVpIGnDp2luZGVraSBibG9rbGFyIMO8emVyaW5kZSBpxZ9sZW1sZXIgdGVrcmFybGFuxLFya2VuIGhhdGEgb2x1xZ90dTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBpbm9kZSBjb3VudCBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGNvdW50PSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjcKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBpIGNvdW50IGluZm9ybWF0aW9uIChAaT0laSwgY291bnQ9JU4pOiAlbVxuIgorbXNnc3RyICIiCisiRMO8xJ/DvG0gc2F5xLFzxLEgYmlsZ2lzaSAoZMO8xJ/DvG0gPSAlaSwgc2F5xLFzxLEgPSAlTilcbiIKKyJzYWtsYW7EsXJrZW4gaGF0YSBvbHXFn3R1OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGJsb2NrPSViLCBudW09JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3MgorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKK21zZ3N0ciAiIgorIkRpemluIGJsb8SfdSBiaWxnaXNpIChkw7zEn8O8bSA9ICVpLCBibG9rID0gJWIsIG51bSA9ICVOKVxuIgorInNha2xhbsSxcmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkTDvMSfw7xtICVpIG9rdW51cmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAiCittc2dzdHIgIkTDvMSfw7xtICVpIGltYWdpYyBiYXlyYcSfxLEgacOnZXJpeW9yLiAgIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoaW5vZGUgJWkpIGhhcyBpbW11dGFibGVcbgorIy4gQC1leHBhbmRlZDogb3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTcGVjaWFsIChAdi9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChAaSAlaSkgaGFzIGltbXV0YWJsZVxuIgorIm9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgIgorbXNnc3RyICIiCisiw5Z6ZWwgKGF5Z8SxdC9zb2tldC9maWZvL3NlbWJhxJ8pIGRvc3lhIChkw7zEn8O8bSAlaSksXG4iCisic2FsdC1la2xlbmlyIHlhIGRhIGRlxJ9pxZ9tZXogYmF5cmHEn8SxIGnDp2VyaXlvci4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGNvbXByZXNzaW9uIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBjb21wcmVzc2lvbiBzdXBwb3J0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgQGNpb24gZmxhZyBzZXQgb24gQGYgd2l0aG91dCBAY2lvbiBzdXBwb3J0LiAgIgorbXNnc3RyICIiCisiRMO8xJ/DvG0gJWkgc8Sxa8SxxZ90xLFybWEgZGVzdGVrbGVubWV5ZW4gZG9zeWEgc2lzdGVtaW5kZSBzxLFrxLHFn3TEsXJtYSBiYXlyYcSfxLEgIgorImnDp2VyaXlvci4gICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvKSBpbm9kZSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8pIEBpICVpIGhhcyBub24temVybyBzaXplLiAgIgorbXNnc3RyICLDlnplbCAoYXlnxLF0L3Nva2V0L2ZpZm8pIGTDvMSfw7xtICVpIHPEsWbEsXJkYW4gZmFya2zEsSBib3l1dHRhLiAgIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxMgorbXNnaWQgIkBqIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJHw7xubMO8ayBkw7zEn8O8bcO8IGt1bGxhbsSxbWRhIGRlxJ9pbCBhbWEgdmVyaSBpw6dlcml5b3IuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MTcKK21zZ2lkICJAaiBpcyBub3QgcmVndWxhciBmaWxlLiAgIgorbXNnc3RyICJHw7xubMO8ayBkb3N5YXPEsSBub3JtYWwgYmlyIGRvc3lhIGRlxJ9pbC4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIHdhcyBwYXJ0IG9mIHRoZSBAbyBAaSBsaXN0LiAgIgorbXNnc3RyICJEw7zEn8O8bSAlaSDDtmtzw7x6IGTDvMSfw7xtIGxpc3Rlc2luaW4gcGFyw6dhc8SxeWTEsS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGVzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjgKK21zZ2lkICJAaXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgIgorbXNnc3RyICJCb3p1ayBiaXIgYXJ0xLFrIGJhxJ9sxLEgbGlzdGVuaW4gYmlyIHBhcsOnYXPEsW7EsSBidWx1bmR1cmFuIGTDvMSfw7xtbGVyLiAgIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjczMworbXNnaWQgIkBBIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuIgorbXNnc3RyICJyZWZjb3VudCB2ZXJpIHlhcMSxc8SxIGnDp2luIHllciBheXLEsWzEsXJrZW4gaGF0YSBvbHXFn3R1OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBmb3IgaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzM4Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiBmb3IgQGkgJWkuICAiCittc2dzdHIgIkTDvMSfw7xtICVpIGnDp2luIGVrIMO2emVsbGlrIGJsb8SfdSAlYiBva3VudXJrZW4gaGF0YSBvbHXFn3R1LiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBiYWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0MworbXNnaWQgIkBpICVpIGhhcyBhIGJhZCBAYSBAYiAlYi4gICIKK21zZ3N0ciAiRMO8xJ/DvG0gJWkgJWIgaGF0YWzEsSBlayDDtnplbGxpayBibG/En3VudSBpw6dlcml5b3IuICAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQ4Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJFayDDtnplbGxpayBibG/En3UgJWIgb2t1bnVya2VuIGhhdGEgb2x1xZ90dSAoJW0pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc1MworIywgZnV6enkKK21zZ2lkICJAYSBAYiAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBAcyAlTi4gICIKK21zZ3N0ciAiRWsgw7Z6ZWxsaWtsZXIgYmxvxJ91ICViICVCIGJhxZ92dXJ1IHNhecSxc8SxbmEgc2FoaXAsICVOIG9sbWFsxLF5ZMSxLiAgIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc1OAorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiRWsgw7Z6ZWxsaWsgYmxvxJ91ICViIHlhesSxbMSxcmtlbiBoYXRhIG9sdcWfdHUgKCVtKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyBoX2Jsb2NrcyA+IDEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzYzCittc2dpZCAiQGEgQGIgJWIgaGFzIGhfQGJzID4gMS4gICIKK21zZ3N0ciAiRWsgw7Z6ZWxsaWtsZXIgYmxvxJ91ICViIGnDp2luICBoX2Jsb2NrcyA+IDEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2OAorbXNnaWQgIkBBIEBhIEBiICViLiAgIgorbXNnc3RyICJFayDDtnplbGxpa2xlciBibG/En3UgJWIgYXlyxLFsxLFya2VuIGhhdGEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzczCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgIgorbXNnc3RyICJFayDDtnplbGxpayBibG/En3UgJWIgYm96dWsgKHRhaHNpcyDDp2F0xLHFn21hc8SxKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgbmFtZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzc4Cittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gbmFtZSkuICAiCittc2dzdHIgIkVrIMO2emVsbGlrbGVyIGJsb8SfdSAlYiBib3p1ayAoZ2XDp2Vyc2l6IGlzaW0pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCB2YWx1ZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzgzCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gdmFsdWUpLiAgIgorbXNnc3RyICJFayDDtnplbGxpa2xlciBibG/En3UgJWIgYm96dWsgKGdlw6dlcnNpeiBkZcSfZXIpLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyB0b28gYmlnLiAgIgorbXNnc3RyICJkw7zEn8O8bSAlaSDDp29rIGLDvHnDvGsuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgY2F1c2VzIGRpcmVjdG9yeSB0byBiZSB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5MgorIywgZnV6enkKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBAZCB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICJCbG9rICMlQiAoJWIpIMOnb2sgYsO8ecO8ayBkaXppbiBvbHXFn3R1cnV5b3IuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk3CisjLCBmdXp6eQorbXNnaWQgIiVCICglYikgY2F1c2VzIGZpbGUgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiQmxvayAjJUIgKCViKSDDp29rIGLDvHnDvGsgZG9zeWEgb2x1xZ90dXJ1eW9yLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwMgorIywgZnV6enkKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBzeW1saW5rIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIkJsb2sgIyVCICglYikgw6dvayBiw7x5w7xrIHNlbWJvbGlrIGJhxJ8gb2x1xZ90dXJ1eW9yLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKyJEw7zEn8O8bSAlaSBodHJlZSBkZXN0ZcSfaSBidWx1bm1heWFuIGRvc3lhIHNpc3RlbWluZGUgSU5ERVhfRkwgYmF5cmHEn8SxICIKKyJpw6dlcml5b3IuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIgorbXNnc3RyICJEw7zEn8O8bSAlaSBJTkRFWF9GTCBiYXlyYcSfxLEgacOnZXJpeW9yIGFtYSBvIGJpciBkaXppbiBkZcSfaWwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCByb290IG5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIGhhcyBhbiBAbiByb290IG5vZGUuXG4iCittc2dzdHIgIkhUUkVFIGRpemluIGTDvMSfw7xtw7wgJWkgZ2XDp2Vyc2l6IGJpciBrw7ZrIGTDvMSfw7xtw7wgacOnZXJpeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIyCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIkhUUkVFIGRpemluIGTDvMSfw7xtw7wgJWkgZGVzdGVrbGVubWV5ZW4gYmlyIGhhc2ggc8O8csO8bcO8ICglTikgacOnZXJpeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuIgorbXNnc3RyICIiCisiSFRSRUUgZGl6aW4gZMO8xJ/DvG3DvCAlaSB1eXVtc3V6IGJpciBodHJlZSBrw7ZrIGTDvMSfw7xtw7wgYmF5cmHEn8SxIGt1bGxhbsSxeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzIKK21zZ2lkICJAaCAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuIgorbXNnc3RyICJIVFJFRSBkaXppbiBkw7zEn8O8bcO8ICVpIMOnb2sgYsO8ecO8ayBiaXIgYcSfYcOnIGRlcmlubGnEn2luZSAoJU4pIHNhaGlwXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgYW4gaW5kaXJlY3QgYmxvY2sgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gbWV0YWRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODM3Cittc2dpZCAiIgorIkJhZCBAYiBAaSBoYXMgYW4gaW5kaXJlY3QgQGIgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4iCisiQGYgbWV0YWRhdGEuICAiCittc2dzdHIgIiIKKyJIYXRhbMSxIGTDvMSfw7xtIGJsb8SfdSBkb3N5YSBzaXN0ZW1pbmluIG1ldGEgdmVyaXNpIGlsZSDDp2VsacWfZW5cbiIKKyJiaXIgZG9sYXlsxLEgYmxvayAoJWIpIGnDp2VyaXlvci4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSAocmUpY3JlYXRpb24gZmFpbGVkOiAlbS4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6ZSBAaSAocmUpY3JlYXRpb24gZmFpbGVkOiAlbS4iCittc2dzdHIgIkTDvMSfw7xtw7wgYm95dXRsYW5kxLFybWFrIGnDp2luICh0ZWtyYXIpIG9sdcWfdHVybWEgYmHFn2FyxLFzxLF6OiAlbSIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQ4Cittc2dpZCAiQGkgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICIlaS4gZMO8xJ/DvG0gZ2XDp2Vyc2l6IGJpciBlayBib3l1dCBpw6dlcml5b3IgKCVJUylcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUzCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiVpLiBkw7zEn8O8bWRla2kgZWsgw7Z6ZWxsaWsgZ2XDp2Vyc2l6IGJpciBpc2ltIGFsYW7EsSBpw6dlcml5b3IgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1OAorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiVpLiBkw7zEn8O8bWRla2kgZWsgw7Z6ZWxsaWsgZ2XDp2Vyc2l6IGJpciBkZcSfZXIgYmHFn2xhbmfEsWPEsSBpw6dlcml5b3IgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgYmxvY2sgKCVOKSB3aGljaCBpcyBpbnZhbGlkIChtdXN0IGJlIDApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYzCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgQGIgKCVOKSB3aGljaCBpcyBAbiAobXVzdCBiZSAwKVxuIgorbXNnc3RyICIiCisiJWkuIGTDvMSfw7xtZGVraSBlayDDtnplbGxpayBnZcOnZXJzaXogYmlyIGRlxJ9lciBibG/En3UgacOnZXJpeW9yICglTiksIDAgb2xtYWzEsVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjgKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiJWkuIGTDvMSfw7xtZGVraSBlayDDtnplbGxpayBnZcOnZXJzaXogYmlyIGRlxJ9lciBpw6dlcml5b3IgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzMKKyMsIGZ1enp5Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiVpLiBkw7zEn8O8bWRla2kgZWsgw7Z6ZWxsaWsgZ2XDp2Vyc2l6IGJpciBpc2ltIGFsYW7EsSBpw6dlcml5b3IgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODc4Cittc2dpZCAiQGkgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuIgorbXNnc3RyICJAaSAlaSBiaXIgJUl0IGFuY2FrIGdlcsOnZWt0ZW4gYmlyIGRpemluIGdpYmkgZ8O2csO8bsO8eW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgZXh0ZW50IHRyZWUgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgQHggdHJlZSBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiIgorIkTDvMSfw7xtICVpIGnDp2luZGVraSBibG9rbGFyIMO8emVyaW5kZSBpxZ9sZW1sZXIgdGVrcmFybGFuxLFya2VuIGhhdGEgb2x1xZ90dTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBpbm9kZSAlaVxuCisjLiBALWV4cGFuZGVkOiBcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODgKK21zZ2lkICIiCisiRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBAaSAlaVxuIgorIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBpbnZhbGlkIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk0Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBAbiBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgaW52YWxpZCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk5Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgQG4gbGVuICVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbiIKK21zZ3N0ciAiIgorIkTDvMSfw7xtICVpIGh0cmVlIGRlc3RlxJ9pIGJ1bHVubWF5YW4gZG9zeWEgc2lzdGVtaW5kZSBJTkRFWF9GTCBiYXlyYcSfxLEgIgorImnDp2VyaXlvci5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IHN1cGVyYmxvY2sgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IEBTIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdCBzeW1saW5rICVpIGhhcyBFWFRFTlRfRkwgc2V0LiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI0Cittc2dpZCAiIgorIkBpICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjgKK21zZ2lkICJAaSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgQGIgQEI6ICVtXG4iCittc2dzdHIgIkRpemluIGJsb2tsYXLEsSB5aW5lbGVuaXJrZW4gaGF0YTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzgKKyMsIGZ1enp5Cittc2dpZCAiQHEgQGkgaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiR8O8bmzDvGsgZG9zeWFzxLEgbm9ybWFsIGJpciBkb3N5YSBkZcSfaWwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0MworIywgZnV6enkKK21zZ2lkICJAcSBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiR8O8bmzDvGsgZMO8xJ/DvG3DvCBrdWxsYW7EsW1kYSBkZcSfaWwgYW1hIHZlcmkgacOnZXJpeW9yLiAgIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0OAorIywgZnV6enkKK21zZ2lkICJAcSBAaSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgIgorbXNnc3RyICJEw7zEn8O8bSAlaSBrdWxsYW7EsW1kYSwgYW1hIGR0aW1lIGJlbGlydGlsbWnFny4gICIKKworIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBsb29rcyBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1MworIywgZnV6enkKK21zZ2lkICJUaGUgYmFkIEBiIEBpIGxvb2tzIEBuLiAgIgorbXNnc3RyICI8SGF0YWzEsSBibG9rbGFyIGTDvMSfw7xtw7w+IgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTU4Cittc2dpZCAiIgorIkBpICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBJbnRlcmlvciBleHRlbnQgbm9kZSBsZXZlbCAlTiBvZiBpbm9kZSAlaTpcbgorIy4gQC1leHBhbmRlZDogTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTY1Cittc2dpZCAiIgorIkludGVyaW9yIEB4IG5vZGUgbGV2ZWwgJU4gb2YgQGkgJWk6XG4iCisiTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTcxCittc2dpZCAiIgorIkBpICVpLCBlbmQgb2YgZXh0ZW50IGV4Y2VlZHMgYWxsb3dlZCB2YWx1ZVxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGJsb2NrICViIHNob3VsZCBiZSBhdCBibG9jayAlYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzcKKyMsIGZ1enp5Cittc2dpZCAiQGQgQGkgJWkgQGIgJWIgc2hvdWxkIGJlIGF0IEBiICVjLiAgIgorbXNnc3RyICJEw7zEn8O8bSAlaSAlYiBoYXRhbMSxIGVrIMO2emVsbGlrIGJsb8SfdW51IGnDp2VyaXlvci4gICIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBleHRlbnQgbWFya2VkIHVuaW5pdGlhbGl6ZWQgYXQgYmxvY2sgJWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAZCBAaSAlaSBoYXMgQHggbWFya2VkIHVuaW5pdGlhbGl6ZWQgYXQgQGIgJWMuICAiCittc2dzdHIgIkRpemluIGTDvMSfw7xtw7wgJWkgYmlyIGF5csSxbG1heWFuIGJsb2sgIyVCIGnDp2VyaXlvci4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbG9naWNhbCBibG9jayAlYiAocGh5c2ljYWwgYmxvY2sgJWMpIHZpb2xhdGVzIGNsdXN0ZXIgYWxsb2NhdGlvbiBydWxlcy5cbgorIy4gQC1leHBhbmRlZDogV2lsbCBmaXggaW4gcGFzcyAxQi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5ODcKK21zZ2lkICIiCisiQGkgJWkgbG9naWNhbCBAYiAlYiAocGh5c2ljYWwgQGIgJWMpIHZpb2xhdGVzIGNsdXN0ZXIgYWxsb2NhdGlvbiBydWxlcy5cbiIKKyJXaWxsIGZpeCBpbiBwYXNzIDFCLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLlxuCisjLiBALWV4cGFuZGVkOiBQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk5NAorbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgQGJzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBAaS4uLlxuIgorIlBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIEBtIEBic1xuIgorbXNnc3RyICIiCisiXG4iCisiQmlyZGVuIGZhemxhIGTDvMSfw7xtIGdlcmVrdGlyZW4gYmxva2xhcsSxIMOnw7Z6w7xtbGVtZWsgacOnaW4gZWsgZ2XDp2nFn2xlciAiCisieWFwxLFsxLF5b3IuLi5cbiIKKyJHZcOnacWfIDFCOiDDh29rIGTDvMSfw7xtbMO8IGJsb2tsYXIgeWVuaWRlbiB0YXJhbsSxeW9yXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgJWk6CisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG0gQGIocykgaW4gQGkgJWk6IgorbXNnc3RyICJEw7zEn8O8bSAlaSBpw6dpbmRlIMOnb2sgZMO8xJ/DvG1sw7wgYmxva2xhciB2YXI6IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4iCittc2dzdHIgIkTDvMSfw7xtbGVyICglaSkgdGFyYW7EsXJrZW4gaGF0YSBvbHXFn3R1OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoaW5vZGVfZHVwX21hcCk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAaSBAQiAoQGlfZHVwX21hcCk6ICVtXG4iCittc2dzdHIgIkTDvMSfw7xtIGJpdGXFn2xlbWkgKGlub2RlX2R1cF9tYXApIGnDp2luIHllciBheXLEsWzEsXJrZW4gaGF0YSBvbHXFn3R1OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICIiCisiRMO8xJ/DvG0gJWkgacOnaW5kZWtpIGJsb2tsYXIgw7x6ZXJpbmRla2kgacWfbGVtbGVyIHRla3JhcmxhbsSxcmtlblxuIgorImhhdGEgb2x1xZ90dSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzAgZTJmc2NrL3Byb2JsZW0uYzoxMzQ1Cittc2dpZCAiRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBAYSBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICIiCisiRWsgw7Z6ZWxsaWtsZXIgYmxvxJ91ICViIChkw7zEn8O8bSAlaSkgacOnaW4gcmVmY291bnQgYXlhcmxhbsSxcmtlbiBoYXRhIG9sdcWfdHU6ICIKKyIlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDM1Cittc2dpZCAiUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIEBpcyB3aXRoIEBtIEBic1xuIgorbXNnc3RyICJHZcOnacWfIDFDOiBUZWtyYXJsYW5hbiBibG9rbGFyxLFuIGTDvMSfw7xtbGVyaSBpw6dpbiBkaXppbmxlciB0YXJhbsSxeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDEKK21zZ2lkICJQYXNzIDFEOiBSZWNvbmNpbGluZyBAbSBAYnNcbiIKK21zZ3N0ciAiR2XDp2nFnyAxRDogw4dvayBkw7zEn8O8bWzDvCBibG9rbGFyIHllbmlkZW4gaGFsbGVkaWxpeW9yXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpbGUgJVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKSBcbgorIy4gQC1leHBhbmRlZDogICBoYXMgJXIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDQ2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJGaWxlICVRIChAaSAjJWksIG1vZCB0aW1lICVJTSkgXG4iCisiICBoYXMgJXIgQG0gQGIocyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4iCittc2dzdHIgIiIKKyJEb3N5YSAlUSAoZMO8xJ/DvG0gJWksIGRlxJ9pxZ9pa2xpayB6YW1hbsSxICVJTSkgXG4iCisiICAlTiBkb3N5YSBpbGUgcGF5bGHFn8SxbWzEsSwgw6dvayBkw7zEn8O8bWzDvCAlQiBibG9rIGnDp2VyaXlvcjpcbiIKKworIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1MgorbXNnaWQgIlx0JVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKVxuIgorbXNnc3RyICJcdCVRIChkw7zEn8O8bSAlaSwgZGXEn2nFn2lrbGlrIHphbWFuxLEgJUlNKVxuIgorCisjLiBALWV4cGFuZGVkOiBcdDxmaWxlc3lzdGVtIG1ldGFkYXRhPlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTcKK21zZ2lkICJcdDxAZiBtZXRhZGF0YT5cbiIKK21zZ3N0ciAiXHQ8ZG9zeWEgc2lzdGVtaSBtZXRhdmVyaXNpPlxuIgorCisjLiBALWV4cGFuZGVkOiAoVGhlcmUgYXJlICVOIGlub2RlcyBjb250YWluaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzLilcbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA2MgorbXNnaWQgIiIKKyIoVGhlcmUgYXJlICVOIEBpcyBjb250YWluaW5nIEBtIEBicy4pXG4iCisiXG4iCittc2dzdHIgIiIKKyIow4dvayBkw7zEn8O8bWzDvCBibG9rIGnDp2VyZW4gJU4gZMO8xJ/DvG0gdmFyLilcbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA2NworbXNnaWQgIiIKKyJAbSBAYnMgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIsOHb2sgZMO8xJ/DvG1sw7wgYmxva2xhciB6YXRlbiB5ZW5pZGVuIGF0YW5txLHFnyB5YSBkYSBrb3B5YWxhbm3EscWfdMSxLlxuIgorIlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY2xvbmUgZmlsZTogJW1cbiIKK21zZ3N0ciAiRG9zeWEga29weWFsYW5hbWFkxLE6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwODYKK21zZ2lkICJQYXNzIDI6IENoZWNraW5nIEBkIHN0cnVjdHVyZVxuIgorbXNnc3RyICJHZcOnacWfIDI6IERpemluIHlhcMSxc8SxIGRlbmV0bGVuaXlvclxuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIGlub2RlIG51bWJlciBmb3IgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBuIEBpIG51bWJlciBmb3IgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJEaXppbiBkw7zEn8O8bcO8ICVpIGnDp2luZGVraSAnLicgacOnaW4gZMO8xJ/DvG0gbnVtYXJhc8SxIGdlw6dlcnNpei5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaW52YWxpZCBpbm9kZSAjOiAlRGkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5NgorbXNnaWQgIkBFIGhhcyBAbiBAaSAjOiAlRGkuXG4iCittc2dzdHIgIkBFIGhhdGFsxLEgZMO8xJ/DvG0gbnVtYXJhc8SxIGnDp2VyaXlvcjogJURpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSAlRGkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwMQorbXNnaWQgIkBFIGhhcyBARC91bnVzZWQgQGkgJURpLiAgIgorbXNnc3RyICJARSBzaWxpbm1pxZ8va3VsbGFuxLFsbWF5YW4gZMO8xJ/DvG0gJURpIGnDp2VyaXlvci4gICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gJy4nICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwNgorbXNnaWQgIkBFIEBMIHRvICcuJyAgIgorbXNnc3RyICJARSAnLicgeWEgYmlyIGJhxJ9kxLFyLiAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHBvaW50cyB0byBpbm9kZSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTEKK21zZ2lkICJARSBwb2ludHMgdG8gQGkgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBAYi5cbiIKK21zZ3N0ciAiQEUgYmlyIGhhdGFsxLEgYmxvayBpw6dpbmRla2kgZMO8xJ/DvG3DvCAoJURpKSBnw7ZzdGVyaXlvci5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gZGlyZWN0b3J5ICVQICglRGkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTYKK21zZ2lkICJARSBATCB0byBAZCAlUCAoJURpKS5cbiIKK21zZ3N0ciAiQEUgZGl6aW4gJVAgKCVEaSkgacOnaW4gYmlyIGJhxJ9kxLFyLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byB0aGUgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTIxCittc2dpZCAiQEUgQEwgdG8gdGhlIEByLlxuIgorbXNnc3RyICJARSBrw7ZrIGTDvMSfw7xtw7xuZSBiaXIgYmHEn2TEsXIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI2Cittc2dpZCAiQEUgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbiIKK21zZ3N0ciAiQEUgaXNtaW5kZSBrdXJhbGTEscWfxLEga2FyYWt0ZXJsZXIgacOnZXJpeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiRGl6aW4gZMO8xJ/DvG3DvCAlaSBpw6dpbmRlICcuJyBla3Npay5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4uJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiRGl6aW4gZMO8xJ/DvG3DvCAlaSBpw6dpbmRlICcuLicgZWtzaWsuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpcnN0IGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApIHNob3VsZCBiZSAnLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQxCittc2dpZCAiRmlyc3QgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgKCVwKSBAcyAnLidcbiIKK21zZ3N0ciAiIgorIkRpemluIGTDvMSfw7xtw7wgJWkgKCVwKSBpw6dpbmRla2kgaWxrIGdpcmRpICclRG4nIChkw7zEn8O8bT0lRGkpICcuJyBvbG1hbMSxeWTEsS5cbiIKKworIy4gQC1leHBhbmRlZDogU2Vjb25kIGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSBzaG91bGQgYmUgJy4uJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDYKK21zZ2lkICJTZWNvbmQgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgQHMgJy4uJ1xuIgorbXNnc3RyICIiCisiRGl6aW4gZMO8xJ/DvG3DvCAlaSBpw6dpbmRla2kgaWtpbmNpIGdpcmRpICclRG4nIChkw7zEn8O8bT0lRGkpICcuLicgb2xtYWzEsXlkxLEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmFkZHIgZm9yIGlub2RlICVpICglUSkgaXMgJUlGLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTUxCittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgImTDvMSfw7xtICVpICglUSkgJUlGIGnDp2luIGlfZmFkZHIsIHPEsWbEsXIgb2xtYWzEsS5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTYKK21zZ2lkICJpX2ZpbGVfYWNsIEBGICVJZiwgQHMgemVyby5cbiIKK21zZ3N0ciAiZMO8xJ/DvG0gJWkgKCVRKSAlSWYgacOnaW4gaV9maWxlX2FjbCwgc8SxZsSxciBvbG1hbMSxLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Rpcl9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlkLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYxCittc2dpZCAiaV9kaXJfYWNsIEBGICVJZCwgQHMgemVyby5cbiIKK21zZ3N0ciAiZMO8xJ/DvG0gJWkgKCVRKSAlSWQgacOnaW4gaV9kaXJfYWNsLCBzxLFmxLFyIG9sbWFsxLEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnJhZyBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2NgorbXNnaWQgImlfZnJhZyBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiZMO8xJ/DvG0gJWkgKCVRKSAlTiBpw6dpbiBpX2ZyYWcsIHPEsWbEsXIgb2xtYWzEsS5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mc2l6ZSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE3MQorbXNnaWQgImlfZnNpemUgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImTDvMSfw7xtICVpICglUSkgICVOIGnDp2luIGlfZnNpemUsIHPEsWbEsXIgb2xtYWzEsS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlICglSW0pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzYKK21zZ2lkICJAaSAlaSAoJVEpIGhhcyBAbiBtb2RlICglSW0pLlxuIgorbXNnc3RyICJEw7zEn8O8bSAlaSAoJVEpIGJpciBoYXRhbMSxIGtpcCAoJUltKSBpw6dlcml5b3IuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZGlyZWN0b3J5IGNvcnJ1cHRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODEKKyMsIGZ1enp5Cittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IEBkIGNvcnJ1cHRlZFxuIgorbXNnc3RyICJEaXppbiBkw7zEn8O8bcO8ICVpLCBibG9rICVCLCBrb251bSAlTjogZGl6aW4gYm96dWtcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODYKKyMsIGZ1enp5Cittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4iCittc2dzdHIgIkRpemluIGTDvMSfw7xtw7wgJWksIGJsb2sgJUIsIGtvbnVtICVOOiBkb3N5YSBpc21pIMOnb2sgdXp1blxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTEKKyMsIGZ1enp5Cittc2dpZCAiQGQgQGkgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgIgorbXNnc3RyICJEaXppbiBkw7zEn8O8bcO8ICVpIGJpciBheXLEsWxtYXlhbiBibG9rICMlQiBpw6dlcml5b3IuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIicuJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIkRpemluIGTDvMSfw7xtw7wgJWkgZGVraSAnLicgZGl6aW4gZ2lyZGlzaSBOVUxMIHNvbmxhbmTEsXJtYWzEsSBkZcSfaWxcbiIKKworIy4gQC1leHBhbmRlZDogJy4uJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIicuLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICJEaXppbiBkw7zEn8O8bcO8ICVpIGRla2kgJy4uJyBkaXppbiBnaXJkaXNpIE5VTEwgc29ubGFuZMSxcm1hbMSxIGRlxJ9pbFxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjA2Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBjaGFyYWN0ZXIgQHYuXG4iCittc2dzdHIgIkTDvMSfw7xtICVpICglUSkgYmlyIGt1cmFsZMSxxZ/EsSBrYXJha3RlciBheWfEsXTEsS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGJsb2NrIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjExCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBAYiBAdi5cbiIKK21zZ3N0ciAiRMO8xJ/DvG0gJWkgKCVRKSBiaXIga3VyYWxkxLHFn8SxIGJsb2sgYXlnxLF0xLEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgZHVwbGljYXRlICcuJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE2Cittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuJyBAZS5cbiIKK21zZ3N0ciAiQEUgdGVrcmFybGF5YW4gJy4nIGdpcmRpc2kgacOnZXJpeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLi4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjEKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4uJyBAZS5cbiIKK21zZ3N0ciAiQEUgdGVrcmFybGF5YW4gJy4uJyBnaXJkaXNpIGnDp2VyaXlvci5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMjI2IGUyZnNjay9wcm9ibGVtLmM6MTUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgZmluZCBkaXJfaW5mbyBmb3IgJWkuXG4iCittc2dzdHIgIsSww6cgaGF0YTogJWkgacOnaW4gZGl6aW4gYmlsZ2lsZXJpIGJ1bHVuYW3EsXlvci5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgcmVjX2xlbiBvZiAlRHIsIHNob3VsZCBiZSAlTi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjMxCittc2dpZCAiQEUgaGFzIHJlY19sZW4gb2YgJURyLCBAcyAlTi5cbiIKK21zZ3N0ciAiQEUgJURyIGthecSxdCB1enVubHXEn3VuZGEsICVOIG9sbWFsxLF5ZMSxLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgc3RydWN0dXJlOiAlbVxuIgorbXNnc3RyICJpY291bnQgdmVyaSB5YXDEsXPEsSBpw6dpbiB5ZXIgYXlyxLFsxLFya2VuIGhhdGEgb2x1xZ90dTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgaXRlcmF0aW5nIG92ZXIgZGlyZWN0b3J5IGJsb2NrczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGl0ZXJhdGluZyBvdmVyIEBkIEBiczogJW1cbiIKK21zZ3N0ciAiRGl6aW4gYmxva2xhcsSxIHlpbmVsZW5pcmtlbiBoYXRhOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDYKK21zZ2lkICJFcnJvciByZWFkaW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkRpemluIGJsb8SfdSAlYiAoZMO8xJ/DvG0gJWkpIG9rdW51cmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1MQorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiRGl6aW4gYmxvxJ91ICViIChkw7zEn8O8bSAlaSkgeWF6xLFsxLFya2VuIGhhdGEgb2x1xZ90dTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrIGZvciBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgbmV3IEBkIEBiIGZvciBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJEw7zEn8O8bSAlaSBpw6dpbiB5ZW5pIGRpemluIGJsb2t1IGF5csSxbMSxcmtlbiBoYXRhIG9sdcWfdHUgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGVhbGxvY2F0aW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVhbGxvY2F0aW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJEw7zEn8O8bSAlaSBixLFyYWvEsWzEsXJrZW4gaGF0YTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGVudHJ5IGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQGQgQGUgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbiIKK21zZ3N0ciAiJy4nIGnDp2luIGRpemluIGdpcmRpc2kgYsO8ecO8ay4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIEZJRk8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3MQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiRMO8xJ/DvG0gJWkgKCVRKSBiaXIga3VyYWxkxLHFn8SxIEZJRk8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBzb2NrZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3NgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgc29ja2V0LlxuIgorbXNnc3RyICJEw7zEn8O8bSAlaSAoJVEpIGJpciBrdXJhbGTEscWfxLEgc29rZXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICclRG4nIGluICVwICglaSkgdG8gJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4MQorbXNnaWQgIlNldHRpbmcgZmlsZXR5cGUgZm9yIEBFIHRvICVOLlxuIgorbXNnc3RyICJARSBpw6dpbiBkb3N5YSB0w7xyw7wgJU4gb2xhcmFrIGJlbGlybGVuaXlvci5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBzaG91bGQgYmUgJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODYKK21zZ2lkICJARSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBAcyAlTikuXG4iCittc2dzdHIgIkBFIHlhbmzEscWfIGRvc3lhIHTDvHLDvG5kZSAoJUR0IGlkaSwgJU4gb2xtYWzEsXlkxLEpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5MQorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIkBFIGnDp2luIGRvc3lhIHTDvHLDvCBiZWxpcnRpbG1pxZ8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgemVyby1sZW5ndGggbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjk2Cittc2dpZCAiQEUgaGFzIGEgQHogbmFtZS5cbiIKK21zZ3N0ciAiQEVuaW4gaXNtaSBzxLFmxLFyIHV6dW5sdWt0YS5cbiIKKworIy4gQC1leHBhbmRlZDogU3ltbGluayAlUSAoaW5vZGUgIyVpKSBpcyBpbnZhbGlkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDEKK21zZ2lkICJTeW1saW5rICVRIChAaSAjJWkpIGlzIEBuLlxuIgorbXNnc3RyICIlUSBzZW1ib2xpayBiYcSfxLEgKGTDvMSfw7xtICVpKSBnZcOnZXJzaXouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDYKK21zZ2lkICJAYSBAYiBARiBAbiAoJUlmKS5cbiIKK21zZ3N0ciAiQEYgZWsgw7Z6ZWxsaWsgYmxvxJ91IGdlw6dlcnNpeiAoJUlmKS5cbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTEKK21zZ2lkICJAZiBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBAUy5cbiIKK21zZ3N0ciAiIgorIkRvc3lhIHNpc3RlbWkgw6dvayBiw7x5w7xrIGRvc3lhbGFyIGnDp2VyaXlvciwgYW1hIHPDvHBlcmJsb2t0YSBMQVJHRV9GSUxFICIKKyJiYXlyYcSfxLEgeW9rXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTYKKyMsIGZ1enp5Cittc2dpZCAiQHAgQGggJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4iCittc2dzdHIgIkhUUkVFIGRpemluIGTDvMSfw7xtw7wgJWQgacOnaW5kZSBzb3J1bjogZMO8xJ/DvG0gKCVCKSByZWZlcmFuc3PEsXpcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzIxCisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiByZWZlcmVuY2VkIHR3aWNlXG4iCittc2dzdHIgIkhUUkVFIGRpemluIGTDvMSfw7xtw7wgJWQgacOnaW5kZSBzb3J1bjogZMO8xJ/DvG0gKCVCKSBpa2kga2VyZSByZWZlcmFuc2zEsVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjYKKyMsIGZ1enp5Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbiIKK21zZ3N0ciAiIgorIkhUUkVFIGRpemluIGTDvMSfw7xtw7wgJWQgacOnaW5kZSBzb3J1bjogZMO8xJ/DvG0gKCVCKSBoYXRhbGkgYXNnYXJpIGhhc2ggacOnZXJpeW9yXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzMQorIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuIgorbXNnc3RyICIiCisiSFRSRUUgZGl6aW4gZMO8xJ/DvG3DvCAlZCBpw6dpbmRlIHNvcnVuOiBkw7zEn8O8bSAoJUIpICBoYXRhbGkgYXphbWkgaGFzaCBpw6dlcml5b3JcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzM2Cittc2dpZCAiQG4gQGggJWQgKCVxKS4gICIKK21zZ3N0ciAiSFRSRUUgZGl6aW4gZMO8xJ/DvG3DvCAlZCAoJXEpIGdlw6dlcnNpei4gICIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKTogYmFkIGJsb2NrIG51bWJlciAlYi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQwCittc2dpZCAiQHAgQGggJWQgKCVxKTogYmFkIEBiIG51bWJlciAlYi5cbiIKK21zZ3N0ciAiSFRSRUUgZGl6aW4gZMO8xJ/DvG3DvCAlZCBpw6dpbmRlIHNvcnVuOiBibG9rIG51bWFyYXPEsSAlYiBoYXRhbMSxLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogcm9vdCBub2RlIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBwIEBoICVkOiByb290IG5vZGUgaXMgQG5cbiIKK21zZ3N0ciAiSFRSRUUgZGl6aW4gZMO8xJ/DvG3DvCAlZCBpw6dpbmRlIHNvcnVuOiBrw7ZrIGTDvMSfw7xtw7wgZ2XDp2Vyc2l6XG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBsaW1pdCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1NQorIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGxpbWl0ICglTilcbiIKK21zZ3N0ciAiIgorIkhUUkVFIGRpemluIGTDvMSfw7xtw7wgJWQgacOnaW5kZSBzb3J1bjogZMO8xJ/DvG0gKCVCKSBoYXRhbMSxIHPEsW7EsXIgKCVOKSBpw6dlcml5b3JcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGNvdW50ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzYwCisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gY291bnQgKCVOKVxuIgorbXNnc3RyICIiCisiSFRSRUUgZGl6aW4gZMO8xJ/DvG3DvCAlZCBpw6dpbmRlIHNvcnVuOiBkw7zEn8O8bSAoJUIpIGhhdGFsxLEgc2F5xLFtICglTikgacOnZXJpeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2NQorIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4iCittc2dzdHIgIiIKKyJIVFJFRSBkaXppbiBkw7zEn8O8bcO8ICVkIGnDp2luZGUgc29ydW46IGTDvMSfw7xtICglQikgc8SxcmFzxLF6IGJpdCBoYXNoIHRhYmxvc3UgIgorImnDp2VyaXlvclxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgZGVwdGggKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzAKKyMsIGZ1enp5Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBkZXB0aCAoJU4pXG4iCittc2dzdHIgIiIKKyJIVFJFRSBkaXppbiBkw7zEn8O8bcO8ICVkIGnDp2luZGUgc29ydW46IGTDvMSfw7xtICglQikgZ2XDp2Vyc2l6IGRlcmlubGlrIGnDp2VyaXlvclxuIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgaW4gJXAgKCVpKSBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzc1Cittc2dpZCAiRHVwbGljYXRlIEBFIGZvdW5kLiAgIgorbXNnc3RyICJZaW5lbGVubWnFnyBARSBidWx1bmR1LiAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4KKyMuIEAtZXhwYW5kZWQ6IFJlbmFtZSB0byAlcworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgwCisjLCBuby1jLWZvcm1hdAorbXNnaWQgIiIKKyJARSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuIgorIlJlbmFtZSB0byAlcyIKK21zZ3N0ciAiIgorIkBFIGJlbnplcnNpeiBvbG1heWFuIGJpciBkb3N5YSBpc21pIGnDp2VyaXlvci5cbiIKKyIlcyBvbGFyYWsgZGXEn2nFn3RpcmlsbWVsaSIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGZvdW5kLlxuCisjLiBALWV4cGFuZGVkOiBcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzg1Cittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisiJyVEbicgZ2lyZGlzaSB5aW5lbGVubWnFny5cbiIKKyJcdCVwICglaSkgeWVuaWRlbiBrdXJndWxhbm1hayDDvHplcmUgaW1sZW5peW9yLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Jsb2Nrc19oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5MAorbXNnaWQgImlfYmxvY2tzX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2Jsb2Nrc19oaSBARiAlTiwgQHMgc8SxZsSxci5cbiIKKworIy4gQC1leHBhbmRlZDogVW5leHBlY3RlZCBibG9jayBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk1Cittc2dpZCAiVW5leHBlY3RlZCBAYiBpbiBAaCAlZCAoJXEpLlxuIgorbXNnc3RyICJCZWtsZW5tZXllbiBAYiwgQGggacOnaW5kZSAlZCAoJXEpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGluIGdyb3VwICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTkKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBpbiBAZyAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGZvdW5kIGluIGdyb3VwICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDQKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBmb3VuZCBpbiBAZyAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDA5CisjLCBmdXp6eQorbXNnaWQgImlfZmlsZV9hY2xfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImTDvMSfw7xtICVpICglUSkgJUlmIGnDp2luIGlfZmlsZV9hY2wsIHPEsWbEsXIgb2xtYWzEsS5cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxNgorbXNnaWQgIlBhc3MgMzogQ2hlY2tpbmcgQGQgY29ubmVjdGl2aXR5XG4iCittc2dzdHIgIkdlw6dpxZ8gMzogRGl6aW4gYmHEn2xhbmFiaWxpcmxpxJ9pIGRlbmV0bGVuaXlvclxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIG5vdCBhbGxvY2F0ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyMQorbXNnaWQgIkByIG5vdCBhbGxvY2F0ZWQuICAiCittc2dzdHIgIkvDtmsgZMO8xJ/DvG3DvCB0YWhzaXNsaSBkZcSfaWwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IE5vIHJvb20gaW4gbG9zdCtmb3VuZCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyNgorbXNnaWQgIk5vIHJvb20gaW4gQGwgQGQuICAiCittc2dzdHIgImxvc3QrZm91bmQgZGl6aW5pbmRlIHllciB5b2suICAiCisKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIkRpemluIGTDvMSfw7xtw7wgJWkgKCVwKSBiYcSfbGFudMSxc8SxelxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBub3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzNgorbXNnaWQgIi9AbCBub3QgZm91bmQuICAiCittc2dzdHIgIi9sb3N0K2ZvdW5kIGRpemluaSB5b2suICAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBzaG91bGQgYmUgJXEgKCVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQxCittc2dpZCAiJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIEBzICVxICglZCkuXG4iCittc2dzdHIgIiVRICglaSkgZGFraSAnLi4nICVQICglaiksIHPDvHBlcmJsb2sgJXEgKCVkKS5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIG9yIG5vbi1leGlzdGVudCAvbG9zdCtmb3VuZC4gIENhbm5vdCByZWNvbm5lY3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ0NgorbXNnaWQgIkJhZCBvciBub24tZXhpc3RlbnQgL0BsLiAgQ2Fubm90IHJlY29ubmVjdC5cbiIKK21zZ3N0ciAiL2xvc3QrZm91bmQgZGl6aW5pIHlhIHlvayB5YSBkYSBoYXRhbMSxLiB0ZWtyYXIgYmHEn2xhbsSxbGFtxLF5b3IuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkIG5vdCBleHBhbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZXhwYW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiL2xvc3QrZm91bmQgZGl6aW5pIGdlbmnFn2xldGlsZW1peW9yOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlY29ubmVjdCAlaTogJW1cbiIKK21zZ3N0ciAiJWkgeWUgdGVrcmFyIGJhxJ9sYW7EsWxhbcSxeW9yOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiL2xvc3QrZm91bmQgZGl6aW5pIGJ1bHVubWF5YSDDp2FsxLHFn8SxbMSxcmthbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfYmxvY2s6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BiOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICIiCisiZXh0MmZzX25ld19ibG9jazogJW1cbiIKKyIvbG9zdCtmb3VuZCBkaXppbmkgb2x1xZ90dXJ1bG1heWEgw6dhbMSxxZ/EsWzEsXJrYW4gaGF0YSBvbHXFn3R1LlxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2lub2RlOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AaTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiIgorImV4dDJmc19uZXdfaW5vZGU6ICVtXG4iCisiL2xvc3QrZm91bmQgZGl6aW5pIG9sdcWfdHVydWxtYXlhIMOnYWzEscWfxLFsxLFya2FuIGhhdGEgb2x1xZ90dS5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfZGlyX0BiOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgQGQgQGJcbiIKK21zZ3N0ciAiIgorImV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbVxuIgorInllbmkgZGl6aW4gYmxvxJ91IG9sdcWfdHVydWx1cmtlbiBoYXRhLlxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBkaXJlY3RvcnkgYmxvY2sgZm9yIC9sb3N0K2ZvdW5kXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfd3JpdGVfZGlyX0BiOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBAZCBAYiBmb3IgL0BsXG4iCittc2dzdHIgIiIKKyJleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbVxuIgorIi9sb3N0K2ZvdW5kIGnDp2luIGRpemluIGJsb8SfdSB5YXrEsWzEsXJrZW4gaGF0YSBvbHXFn3R1LlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBhZGp1c3RpbmcgaW5vZGUgY291bnQgb24gaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGFkanVzdGluZyBAaSBjb3VudCBvbiBAaSAlaVxuIgorbXNnc3RyICJEw7zEn8O8bSAlaSDDvHplcmluZGUgZMO8xJ/DvG0gc2F5xLFzxLEgYXlhcmxhbsSxcmtlbiBoYXRhIG9sdcWfdHVcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkTDvMSfw7xtICVpIGnDp2luIMO8c3QgZMO8xJ/DvG0gYmVsaXJsZW5lbWVkaTogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgZGlyZWN0b3J5IGVudHJ5XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IEBkIEBlXG4iCisiXG4iCittc2dzdHIgIiIKKyJEw7zEn8O8bSAlaSBpw6dpbiDDvHN0IGTDvMSfw7xtIGJlbGlybGVuZW1lZGk6IMO8c3QgZGl6aW4gZ2lyZGlzaSBidWx1bmFtYWTEsVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJLw7ZrIGRpemluaSBvbHXFn3R1cnVsdXJrZW4gaGF0YSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyAvbG9zdCtmb3VuZCBkaXJlY3RvcnkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIC9AbCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICIvbG9zdCtmb3VuZCBkaXppbmkgb2x1xZ90dXJ1bHVya2VuIGhhdGEgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3Rvcnk7IGFib3J0aW5nLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MTYKK21zZ2lkICJAciBpcyBub3QgYSBAZDsgYWJvcnRpbmcuXG4iCittc2dzdHIgIkvDtmsgZMO8xJ/DvG3DvCBiaXIgZGl6aW4gZGXEn2lsOyDDp8Sxa8SxbMSxeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIxCittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICJCaXIga8O2ayBkw7zEn8O8bcO8IG9sbWFrc8SxesSxbiBpxZ9sZW5lbWV6LlxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBpcyBub3QgYSBkaXJlY3RvcnkgKGlubz0laSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIi9AbCBpcyBub3QgYSBAZCAoaW5vPSVpKVxuIgorbXNnc3RyICIvbG9zdCtmb3VuZCBiaXIgZGl6aW4gZGXEn2lsIChkw7zEn8O8bSA9ICVpKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzgKK21zZ2lkICJQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzXG4iCittc2dzdHIgIlBhc3MgM0E6IERpemlubGVyIGVuaXlpbGVuaXlvclxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZGlyc190b19oYXNoIGl0ZXJhdG9yOiAlbVxuIgorbXNnc3RyICJkaXJzX3RvX2hhc2ggeWluZWxleWljaSBvbHXFn3R1cnVsYW1hZMSxOiAlbSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQ4CisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byBvcHRpbWl6ZSBkaXJlY3RvcnkgJXEgKCVkKTogJW1cbiIKK21zZ3N0ciAiRGl6aW4gJXEgKCVkKSBlbml5aWxlbmVtZWRpOiAlbSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTUzCittc2dpZCAiT3B0aW1pemluZyBkaXJlY3RvcmllczogIgorbXNnc3RyICJFbml5aWxlbmVuIGRpemlubGVyOiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3MAorbXNnaWQgIlBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50c1xuIgorbXNnc3RyICJHZcOnacWfIDQ6IEJhxZ92dXJ1IHNhecSxc8SxIGRlbmV0bGVuaXlvclxuIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIHplcm8tbGVuZ3RoIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQHogQGkgJWkuICAiCittc2dzdHIgImFydMSxayBkw7zEn8O8bSAlaSBzxLFmxLFyIHV6dW5sdWt0YS4gICIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQGkgJWlcbiIKK21zZ3N0ciAiYXJ0xLFrIGTDvMSfw7xtICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg1Cittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgIkTDvMSfw7xtICVpIGnDp2luIGJhxZ92dXJ1IHNhecSxc8SxICVJbCwgJU4gb2xtYWzEsXlkxLEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4OQorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiVVlBUkk6IEUyRlNDSydEQSBZQVpJTElNIEhBVEFTSSFcbiIKKyIgICAgWUEgREEgQsSwUiBNQU5LQUZBIChTxLBaKSBCQcSeTEkgKENBTkxJKSBET1NZQSBTxLBTVEVNxLBOxLAgREVORVRMRVTEsFlPUi5cbiIKKyIgICAgICAgICAocGFyZG9uLCB5YXphciBCT05FSEVBRCAoWU9VKSB5YXptxLHFnyBkYSlcbiIKKyJpbm9kZV9saW5rX2luZm9bJWldID0gJU4sIGlub2RlLmlub2RlX2xpbmtzX2NvdW50ID0gJUlsLlxuIgorIkJ1bmxhciBheW7EsSBvbG1hbMSxeWTEsSFcbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU5OQorbXNnaWQgIlBhc3MgNTogQ2hlY2tpbmcgQGcgc3VtbWFyeSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICI1LiBHZcOnacWfOiBncnVwIMO2emV0IGJpbGdpbGVyaSBkZW5ldGxlbml5b3JcbiIKKworIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgaW5vZGUgYml0bWFwIGlzIG5vdCBzZXQuIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjA0Cittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGkgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICJEw7zEn8O8bSBiaXRlxZ9sZW1pbmluIHNvbnVuZGFraSBhbGFuIGJlbGlybGVubWVtacWfLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGJsb2NrIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwOQorbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBiIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiQmxvayBiaXRlxZ9sZW1pbmluIHNvbnVuZGFraSBhbGFuIGJlbGlybGVubWVtacWfLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MTQKK21zZ2lkICJAYiBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJibG9rIGJpdGXFn2xlbWkgZmFya2xhcsSxOiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MzQKK21zZ2lkICJAaSBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJkw7zEn8O8bSBiaXRlxZ9sZW1pIGZhcmtsYXLEsTogIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1NAorbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiJWcuIGdydXAgacOnaW4gc2VyYmVzdCBkw7zEn8O8bSBzYXnEsXPEsSB5YW5sxLHFnyAoJWksIHNhecSxbGFuID0gJWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1OQorbXNnaWQgIkRpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiJWcuIGdydXAgacOnaW4gZGl6aW4gc2F5xLFzxLEgeWFubMSxxZ8gKCVpLCBzYXnEsWxhbiA9ICVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjY0Cittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiU2VyYmVzdCBkw7zEn8O8bSBzYXnEsXPEsSB5YW5sxLHFnyAoJWksIHNhecSxbGFuID0gJWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2OQorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiJWcuIGdydXAgacOnaW4gc2VyYmVzdCBibG9rIHNhecSxc8SxIHlhbmzEscWfICglYiwgc2F5xLFsYW4gPSAlYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY3NAorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIlNlcmJlc3QgYmxvayBzYXnEsXPEsSB5YW5sxLHFnyAoJWIsIHNhecSxbGFuID0gJWMpLlxuIgorCisjLiBALWV4cGFuZGVkOiBQUk9HUkFNTUlORyBFUlJPUjogZmlsZXN5c3RlbSAoIyVOKSBiaXRtYXAgZW5kcG9pbnRzICglYiwgJWMpIGRvbid0IG1hdGNoIGNhbGN1bGF0ZWQgYml0bWFwIAorIy4gQC1leHBhbmRlZDogZW5kcG9pbnRzICglaSwgJWopXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY3OQorbXNnaWQgIiIKKyJQUk9HUkFNTUlORyBFUlJPUjogQGYgKCMlTikgQEIgZW5kcG9pbnRzICglYiwgJWMpIGRvbid0IG1hdGNoIGNhbGN1bGF0ZWQgQEIgIgorImVuZHBvaW50cyAoJWksICVqKVxuIgorbXNnc3RyICIiCisiUFJPR1JBTUxBTUEgSEFUQVNJOiBkb3N5YSBzaXN0ZW1pICgjJU4pIGJpdGXFn2xlbSBzxLFuxLFybGFyxLEgKCViLCAlYylcbiIKKyJpbGUgaGVzYXBsYW5hbiBiaXRlxZ9sZW0gc8SxbsSxcmxhcsSxICglaSwgJWopIHV5dcWfbXV5b3JcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjg1Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGZ1ZGdpbmcgZW5kIG9mIGJpdG1hcCAoJU4pXG4iCittc2dzdHIgIsSww6cgaGF0YTogYml0ZcWfbGVtaW4gc29udW5kYSBib3p1bG1hICglTilcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBpbm9kZSBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBpIEBCOiAlbVxuIgorbXNnc3RyICJZZWRlayBkw7zEn8O8bSBiaXRlxZ9sZW1pbmRlIGtvcHlhbGFtYSBoYXRhc8SxOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGIgQEI6ICVtXG4iCittc2dzdHIgIlllZGVrIGJsb2sgYml0ZcWfbGVtaW5kZSBrb3B5YWxhbWEgaGF0YXPEsTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgYmxvY2socykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAYihzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBpbm9kZShzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBpKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY3JlYXRlIGpvdXJuYWwKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTczMgorIywgZnV6enkKK21zZ2lkICJSZWNyZWF0ZSBAaiIKK21zZ3N0ciAiWWVuaWRlbiBvbHXFn3R1ciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzM3Cittc2dpZCAiVXBkYXRlIHF1b3RhIGluZm8gZm9yIHF1b3RhIHR5cGUgJU4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc2V0dGluZyBibG9jayBncm91cCBjaGVja3N1bSBpbmZvOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgQGIgQGcgY2hlY2tzdW0gaW5mbzogJW1cbiIKK21zZ3N0ciAiLSBoYXRhbMSxIGJsb2sgZMO8xJ/DvG3DvCBiZWxpcmxlbmlya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGZpbGUgc3lzdGVtIGluZm86ICVtXG4iCittc2dzdHIgIkTDvMSfw7xtICVpIG9rdW51cmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBmbHVzaGluZyB3cml0ZXMgdG8gc3RvcmFnZSBkZXZpY2U6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaGFuZGxlZCBlcnJvciBjb2RlICgweCV4KSFcbiIKK21zZ3N0ciAiRWxkZSBlZGlsZW1leWVuIGhhdGEga29kdSAoKDB4JXgpIVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5OTYgZTJmc2NrL3Byb2JsZW0uYzoyMDAwCittc2dpZCAiSUdOT1JFRCIKK21zZ3N0ciAiWU9LU0FZSUxESSIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVkLCBlbGFwc2VkIHRpbWU6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCittc2dzdHIgIkt1bGxhbsSxbGFuIGJlbGxlazogJWQsIGdlw6dlbiBzw7xyZTogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic2l6ZSBvZiBpbm9kZT0lZFxuIgorbXNnc3RyICJkw7zEn8O8bSB1enVubHXEn3UgPSAlZFxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMTkKK21zZ2lkICJ3aGlsZSBzdGFydGluZyBpbm9kZSBzY2FuIgorbXNnc3RyICItIGTDvMSfw7xtIHRhcmFtYXPEsSBiYcWfbGF0xLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6MTMwCittc2dpZCAid2hpbGUgZG9pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAiLSBkw7zEn8O8bSB0YXJhbWFzxLEgeWFwxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL3N1cGVyLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZm9yIGlub2RlICVkIgorbXNnc3RyICJEw7zEn8O8bSAlZCBpw6dpbiBleHQyZnNfYmxvY2tfaXRlcmF0ZSBpxZ9sZXZpIMOnYcSfcsSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9zdXBlci5jOjIxMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MiBmb3IgaW5vZGUgJWQiCittc2dzdHIgIkTDvMSfw7xtICVkIGnDp2luIGV4dDJmc19ibG9ja19pdGVyYXRlIGnFn2xldmkgw6dhxJ9yxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL3N1cGVyLmM6Mjc0Cittc2dpZCAiVHJ1bmNhdGluZyIKK21zZ3N0ciAiS8SxcnDEsWzEsXlvciIKKworIzogZTJmc2NrL3N1cGVyLmM6Mjc1Cittc2dpZCAiQ2xlYXJpbmciCittc2dzdHIgIlRlbWl6bGVuaXlvciIKKworIzogZTJmc2NrL3VuaXguYzo3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisiS3VsbGFuxLFtxLE6ICVzIFstcGFueXJjZGZ2c3RERlNWXSBbLWIgc3VwZXJibG9rXSBbLUIgYmxva2JveXVdXG4iCisiXHRbLUkgZMO8xJ/DvG1fdGFtcG9udV9ibG9rX3NhecSxc8SxXSBbLVAgacWfbGVtX2TDvMSfw7xtw7xfYm95dV1cbiIKKyJcdFstbHwtTCBoYXRhbMSxX2Jsb2tsYXJfZG9zeWFzxLFdIFstQyBkb3N5YV90YW7EsW1sYXnEsWPEsV1cbiIKKyJcdFstaiBkxLHFn19nw7xubMO8a19heWfEsXTEsV0gWy1FIGVrX3Nlw6dlbmVrbGVyXSAgYXlnxLF0XG4iCisiTGludXggaWtpbmNpIGdlbGnFn21pxZ8gZG9zeWEgc2lzdGVtaW5pbiAoZTJmcykgZGVuZXRsZW5tZXNpIGnDp2luXG4iCisia3VsbGFuxLFsxLFyLiBleHQzIGRlc3Rla2xlbm1pxZ90aXIuXG4iCisiXG4iCisiU2XDp2VuZWtsZXI6XG4iCisiICAgLWEgICAgICAgICAgICAgICAgICAgICAgICAtcCBpbGUgYXluxLFcbiIKKyIgICAtQyBkb3N5YV90YW7EsW1sYXnEsWPEsSAgICAgIGUyZnNjayd5xLEgw6dhbMSxxZ90xLFyYW4gdXlndWxhbWFsYXJjYSBrdWxsYW7EsWzEsXJcbiIKKyIgICAtZCAgICAgICAgICAgICAgICAgICAgICAgIEhhdGEgYXnEsWtsYW1hIGlsZXRpbGVyaW5pIGfDtnN0ZXJpclxuIgorIiAgIC1EICAgICAgICAgICAgICAgICAgICAgICAgZGl6aW5sZXIgZW5peWlsZW5pclxuIgorIiAgIC1GICAgICAgICAgICAgICAgICAgICAgICAgdGFtcG9uIGJlbGxlayBpxZ9sZW0gw7ZuY2VzaSBib8WfYWx0xLFsxLFyXG4iCisiICAgLXIgICAgICAgICAgICAgICAgICAgICAgICBidSBzZcOnZW5layB5b2tzYXnEsWzEsXJcbiIKKyIgICAtcyAgICAgICAgICAgICAgICAgICAgICAgIGRvc3lhIHNpc3RlbWkgYmF5dCBzxLFyYWxhbWFzxLEgdGVyc3NlICIKKyJrdWxsYW7EsWzEsXIuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgc8SxcmFkYSBpc2UgZXRraXNpemRpci5cbiIKKyIgICAtUyAgICAgICAgICAgICAgICAgICAgICAgIE1ldmN1dCBiYXl0IHPEsXJhbGFtYXPEsW5hIGJha8SxbG1ha3PEsXrEsW4gZG9zeWFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpc3RlbWluaW4gYmF5dCBzxLFyYWxhbWFzxLEgdGVycyDDp2V2cmlsaXJcbiIKKyIgICAtdCAgICAgICAgICAgICAgICAgICAgICAgIGlzdGF0aXN0aWtsZXIgZ8O2c3RlcmlsaXIsIGlraSBrZXJlIHZlcmlsbWnFn3NlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXIgZ2XDp2nFn2luIGlzdGF0aXN0aWtsZXJpIGRlIGfDtnN0ZXJpbGlyLlxuIgorIiAgIC1WICAgICAgICAgICAgICAgICAgICAgICAgc8O8csO8bSBiaWxnaWxlcmkgZ8O2c3RlcmlsaXIgdmUgw6fEsWthclxuIgorIlxuIgorIsOHZXZpcmkgaGF0YWxhcsSxbsSxIDxnbnUtdHJAYmVsZ2VsZXIub3JnPiBhZHJlc2luZSBiaWxkaXJpbml6LlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjgwCittc2dpZCAiIgorIlxuIgorIkVtZXJnZW5jeSBoZWxwOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgcmVwYWlyIChubyBxdWVzdGlvbnMpXG4iCisiIC1uICAgICAgICAgICAgICAgICAgIE1ha2Ugbm8gY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbVxuIgorIiAteSAgICAgICAgICAgICAgICAgICBBc3N1bWUgXCJ5ZXNcIiB0byBhbGwgcXVlc3Rpb25zXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBiYWQgYmxvY2tzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmFkYmxvY2sgIgorImxpc3RcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBjbGVhblxuIgorbXNnc3RyICIiCisiXG4iCisiQWNpbCB5YXJkxLFtOlxuIgorIiAgIC1wICAgICAgICAgICAgICAgICAgICAgICAgSGnDpyBzb3J1IHNvcm1hZGFuIHNpc3RlbSBvdG9tYXRpayBvbmFyxLFsxLFyXG4iCisiICAgLW4gICAgICAgICAgICAgICAgICAgICAgICBkb3N5YSBzaXN0ZW1pIHNhbHQtb2t1bnVyIGHDp8SxbMSxci4gRGVuZXRpbVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc8SxcmFzxLFuZGEgdMO8bSBzb3J1bGFyYSBIQVlJUiBjZXZhYsSxIHZlcmlsZGnEn2lcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnNhecSxbMSxci5cbiIKKyIgICAteSAgICAgICAgICAgICAgICAgICAgICAgIERlbmV0aW0gc8SxcmFzxLFuZGEgdMO8bSBzb3J1bGFyYSBFVkVUIGNldmFixLFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlsZGnEn2kgdmFyc2F5xLFsxLFyLlxuIgorIiAgIC1jICAgICAgICAgICAgICAgICAgICAgICAgdmFyc2EgaGF0YWzEsSBibG9rbGFyIGJ1bHVudXIgdmUgaGF0YWzEsSBibG9rbGFyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZXNpbmUgZWtsZW5pclxuIgorIiAgIC1mICAgICAgICAgICAgICAgICAgICAgICAgZGlzayBiw7Zsw7xtw7wgdGVtaXogYmlsZSBvbHNhIGRlbmV0aW0geWFwxLFsxLFyXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODYKK21zZ2lkICIiCisiIC12ICAgICAgICAgICAgICAgICAgIEJlIHZlcmJvc2VcbiIKKyIgLWIgc3VwZXJibG9jayAgICAgICAgVXNlIGFsdGVybmF0aXZlIHN1cGVyYmxvY2tcbiIKKyIgLUIgYmxvY2tzaXplICAgICAgICAgRm9yY2UgYmxvY2tzaXplIHdoZW4gbG9va2luZyBmb3Igc3VwZXJibG9ja1xuIgorIiAtaiBleHRlcm5hbF9qb3VybmFsICBTZXQgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGpvdXJuYWxcbiIKKyIgLWwgYmFkX2Jsb2Nrc19maWxlICAgQWRkIHRvIGJhZGJsb2NrcyBsaXN0XG4iCisiIC1MIGJhZF9ibG9ja3NfZmlsZSAgIFNldCBiYWRibG9ja3MgbGlzdFxuIgorbXNnc3RyICIiCisiICAgLXYgICAgICAgICAgICAgICAgICAgICAgICBheXLEsW50xLFsxLEgYmlsZ2kgdmVyaWxpclxuIgorIiAgIC1iIHN1cGVyYmxvayAgICAgICAgICAgICAgbm9ybWFsIHPDvHBlcmJsb2sgeWVyaW5lIGJlbGlydGlsZW4ga3VsbGFuxLFsxLFyXG4iCisiICAgLUIgYmxva2JveXUgICAgICAgICAgICAgICBzw7xwZXJibG9rIGFyYW7EsXJrZW4ga3VsbGFuxLFsYW4gYmxvayBib3l1XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXJpbmUgYmVsaXJ0aWxlbiBrdWxsYW7EsWzEsXJcbiIKKyIgICAtaiBkxLHFny1nw7xubMO8ay1heWfEsXTEsSAgICAgIGfDvG5sw7xrIGRvc3lhc8SxbsSxbiBhcmFuYWNhxJ/EsSBheWfEsXQgYmVsaXJ0aWxpclxuIgorIiAgIC1sIGhhdGFsxLFfYmxva2xhcl9kb3N5YXPEsSBiZWxpcnRpbGVuIGRvc3lhZGFraSBoYXRhbMSxIGJsb2tsYXIgbGlzdGV5ZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWtsZW5pclxuIgorIiAgIC1MIGhhdGFsxLFfYmxva2xhcl9kb3N5YXPEsSBoYXRhbMSxIGJsb2tsYXIgbGlzdGVzaSBiZWxpcnRpbGVuIGRvc3lhZGFraWxlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWxlIG9sdcWfdHVydWx1clxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICVsbHUvJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXM6ICVkLyVkIGRvc3lhICglJSUwZC4lZCB5YW55YW5hIG9sbWF5YW4gZMO8xJ/DvG0pLCAldS8ldSBibG9rXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTEydSBpbm9kZSB1c2VkICglMi4yZiUlLCBvdXQgb2YgJXUpXG4iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyIlMTJ1IGlub2RlcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJXUpXG4iCittc2dzdHJbMF0gIiIKKyJcbiIKKyIlOGQgZMO8xJ/DvG0ga3VsbGFuxLFsZMSxICglJSVkKVxuIgorbXNnc3RyWzFdICIiCisiXG4iCisiJThkIGTDvMSfw7xtIGt1bGxhbsSxbGTEsSAoJSUlZClcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIlOGQgYml0acWfaWsgb2xtYXlhbiBkw7zEn8O8bSAoJSUlMGQuJWQpXG4iCittc2dzdHJbMV0gIiU4ZCBiaXRpxZ9payBvbG1heWFuIGTDvMSfw7xtICglJSUwZC4lZClcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3J5ICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcmllcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiU4ZCBiaXRpxZ9payBvbG1heWFuIGTDvMSfw7xtICglJSUwZC4lZClcbiIKK21zZ3N0clsxXSAiJThkIGJpdGnFn2lrIG9sbWF5YW4gZMO8xJ/DvG0gKCUlJTBkLiVkKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICAgICAgICMgb2YgaW5vZGVzIHdpdGggaW5kL2RpbmQvdGluZCBibG9ja3M6ICV1LyV1LyV1XG4iCittc2dzdHIgIiAgICAgICAgIGluZC9kaW5kL3RpbmQgYmxva2xhcsSxbsSxbiBkw7zEn8O8bSBzYXnEsWxhcsSxOiAlZC8lZC8lZFxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3OQorbXNnaWQgIiAgICAgICAgICAgICBFeHRlbnQgZGVwdGggaGlzdG9ncmFtOiAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxODgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUxMmxsdSBibG9jayB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEybGx1IGJsb2NrcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ3N0clswXSAiJThkIGJsb2sga3VsbGFuxLFsZMSxICglJSVkKVxuIgorbXNnc3RyWzFdICIlOGQgYmxvayBrdWxsYW7EsWxkxLEgKCUlJWQpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJhZCBibG9ja1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJhZCBibG9ja3NcbiIKK21zZ3N0clswXSAiJThkIGhhdGFsxLEgYmxva1xuIgorbXNnc3RyWzFdICIlOGQgaGF0YWzEsSBibG9rXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxhcmdlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsYXJnZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlOGQgYsO8ecO8ayBkb3N5YVxuIgorbXNnc3RyWzFdICIlOGQgYsO8ecO8ayBkb3N5YVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiU4ZCBub3JtYWwgZG9zeWFcbiIKK21zZ3N0clsxXSAiIgorIlxuIgorIiU4ZCBub3JtYWwgZG9zeWFcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZGlyZWN0b3J5XG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZGlyZWN0b3JpZXNcbiIKK21zZ3N0clswXSAiJThkIGRpemluXG4iCittc2dzdHJbMV0gIiU4ZCBkaXppblxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gIiU4ZCBrYXJha3RlciBheWfEsXTEsSBkb3N5YXPEsVxuIgorbXNnc3RyWzFdICIlOGQga2FyYWt0ZXIgYXlnxLF0xLEgZG9zeWFzxLFcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBibG9jayBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJThkIGJsb2sgYXlnxLF0xLEgZG9zeWFzxLFcbiIKK21zZ3N0clsxXSAiJThkIGJsb2sgYXlnxLF0xLEgZG9zeWFzxLFcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlmb1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpZm9zXG4iCittc2dzdHJbMF0gIiU4ZCBmaWZvXG4iCittc2dzdHJbMV0gIiU4ZCBmaWZvXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxpbmtcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsaW5rc1xuIgorbXNnc3RyWzBdICIlOGQgYmHEn1xuIgorbXNnc3RyWzFdICIlOGQgYmHEn1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzeW1ib2xpYyBsaW5rIgorbXNnaWRfcGx1cmFsICIlMTJ1IHN5bWJvbGljIGxpbmtzIgorbXNnc3RyWzBdICIlOGQgc2VtYm9saWsgYmHEnyIKK21zZ3N0clsxXSAiJThkIHNlbWJvbGlrIGJhxJ8iCisKKyM6IGUyZnNjay91bml4LmM6MjExCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgKCV1IGZhc3Qgc3ltYm9saWMgbGluaylcbiIKK21zZ2lkX3BsdXJhbCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmtzKVxuIgorbXNnc3RyWzBdICIgKCVkIGjEsXpsxLEgc2VtYm9saWsgYmHEnylcbiIKK21zZ3N0clsxXSAiICglZCBoxLF6bMSxIHNlbWJvbGlrIGJhxJ8pXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHNvY2tldFxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IHNvY2tldHNcbiIKK21zZ3N0clswXSAiJThkIHNva2V0XG4iCittc2dzdHJbMV0gIiU4ZCBzb2tldFxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlsZXNcbiIKK21zZ3N0clswXSAiJThkIGRvc3lhXG4iCittc2dzdHJbMV0gIiU4ZCBkb3N5YVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIzMiBtaXNjL2JhZGJsb2Nrcy5jOjk5MyBtaXNjL3R1bmUyZnMuYzoyMTIyIG1pc2MvdXRpbC5jOjMxNgorIzogcmVzaXplL21haW4uYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLiIKK21zZ3N0ciAiLSAlcydpbiBiYcSfbMSxIG9sdXAgb2xtYWTEscSfxLEgc2FwdGFubWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUuIgorCisjOiBlMmZzY2svdW5peC5jOjI1MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZyEgICVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIlV5YXLEsSEgICVzIGJhxJ9sxLEuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgaW4gdXNlLlxuIgorbXNnc3RyICJVeWFyxLEhICAlcyBiYcSfbMSxLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiJXMgYmHEn2xhbmTEsS4gICIKKworIzogZTJmc2NrL3VuaXguYzoyNjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGluIHVzZS5cbiIKK21zZ3N0ciAiJXMgYmHEn2xhbmTEsS4gICIKKworIzogZTJmc2NrL3VuaXguYzoyNjYKK21zZ2lkICIiCisiQ2Fubm90IGNvbnRpbnVlLCBhYm9ydGluZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRldmFtIGVkaWxlbWl5b3IuIMOnxLFrxLFsxLF5b3IuXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJXQVJOSU5HISEhICBUaGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLiAgIElmIHlvdSBjb250aW51ZSB5b3UgKioqV0lMTCoqKlxuIgorImNhdXNlICoqKlNFVkVSRSoqKiBmaWxlc3lzdGVtIGRhbWFnZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIioqKipExLBLS0FUISEhISAgZTJmc2NrJ27EsW4gYmHEn2zEsSBiaXIgZG9zeWEgc2lzdGVtaW5kZSDDp2FsxLHFn3TEsXLEsWxtYXPEsVxuIgorIsOHT0sgQ8SwRETEsCBoYXNhcmxhcmEgc2ViZXAgb2xhYmlsaXIuKioqKlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI3MworbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byBjb250aW51ZSIKK21zZ3N0ciAiR2Vyw6dla3RlbiBkZXZhbSBldG1layBpc3RpeW9yIG11c3VudXo/IgorCisjOiBlMmZzY2svdW5peC5jOjI3NQorbXNnaWQgImNoZWNrIGFib3J0ZWQuXG4iCittc2dzdHIgImRlbmV0aW0gZHVyZHUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MzY4Cittc2dpZCAiIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMiCittc2dzdHIgIiBoYXRhbMSxIGJpciBkb3N5YSBzaXN0ZW1pIGnDp2VyaXlvciIKKworIzogZTJmc2NrL3VuaXguYzozNzAKK21zZ2lkICIgd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCIKK21zZ3N0ciAiIHVzdWzDvG5jZSBzaXN0ZW1kZW4gYXlyxLFsbWFtxLHFnyIKKworIzogZTJmc2NrL3VuaXguYzozNzIKK21zZ2lkICIgcHJpbWFyeSBzdXBlcmJsb2NrIGZlYXR1cmVzIGRpZmZlcmVudCBmcm9tIGJhY2t1cCIKK21zZ3N0ciAiIGJpcmluY2lsIHPDvHBlcmJsb2sgw7Z6ZWxsaWtsZXJpIHllZGVrbGVtZWRlbiBmYXJrbMSxIgorCisjOiBlMmZzY2svdW5peC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGJlZW4gbW91bnRlZCAldSB0aW1lcyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiBkZW5ldGxlbm1la3NpemluICV1IGtlcmUgYmHEn2xhbmTEsSIKKworIzogZTJmc2NrL3VuaXguYzozODMKKyMsIGZ1enp5Cittc2dpZCAiIGhhcyBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0aW1lIGluIHRoZSBmdXR1cmUiCittc2dzdHIgIkRvc3lhIHNpc3RlbWluaW4gc29uIGRlbmV0aW0gemFtYW7EsSAlcyB5YXDEsWzEsXlvclxuIgorCisjOiBlMmZzY2svdW5peC5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGdvbmUgJXUgZGF5cyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiBkZW5ldGxlbm1la3NpemluICV1IGfDvG4gZ2XDp3RpIgorCisjOiBlMmZzY2svdW5peC5jOjM5OAorbXNnaWQgIiwgY2hlY2sgZm9yY2VkLlxuIgorbXNnc3RyICIsIGRlbmV0aW0gYmHFn2xhdMSxbGFjYWsuXG4iCisKKyM6IGUyZnNjay91bml4LmM6NDMxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4sICV1LyV1IGZpbGVzLCAlbGx1LyVsbHUgYmxvY2tzIgorbXNnc3RyICIlczogdGVtaXosICVkLyVkIGRvc3lhLCAldS8ldSBibG9rIgorCisjOiBlMmZzY2svdW5peC5jOjQ1MQorbXNnaWQgIiAoY2hlY2sgZGVmZXJyZWQ7IG9uIGJhdHRlcnkpIgorbXNnc3RyICIgKGRlbmV0bGVtZSBlcnRlbGVuZGk7IGJhdGFyeWEpIgorCisjOiBlMmZzY2svdW5peC5jOjQ1NAorbXNnaWQgIiAoY2hlY2sgYWZ0ZXIgbmV4dCBtb3VudCkiCittc2dzdHIgIiAoc2lzdGVtIGJhxJ9sYW5kxLFrdGFuIHNvbnJhIGRlbmV0bGUpIgorCisjOiBlMmZzY2svdW5peC5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGNoZWNrIGluICVsZCBtb3VudHMpIgorbXNnc3RyICIgKHNpc3RlbSAlbGQga2VyZSBiYcSfbGFuZMSxxJ/EsW5kYSBkZW5ldGxlKSIKKworIzogZTJmc2NrL3VuaXguYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IENvdWxkbid0IG9wZW4gL2Rldi9udWxsICglcylcbiIKK21zZ3N0ciAiSEFUQTogL2Rldi9udWxsIGHDp8SxbGFtYWTEsSAoJXMpXG4iCisKKyM6IGUyZnNjay91bml4LmM6Njc1Cittc2dpZCAiSW52YWxpZCBFQSB2ZXJzaW9uLlxuIgorbXNnc3RyICJFayDDtnplbGxpayBzw7xyw7xtw7wgZ2XDp2Vyc2l6LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGV4dGVuZGVkIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAiQmlsaW5tZXllbiBlayBzZcOnZW5lazogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBlMmZzY2sgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKyJlMmZzY2sgeWFwxLFsYW5kxLFybWEgZG9zeWFzxLFuZGEgKCVzLCAlZC5zYXTEsXJkYSkgc8O2emRpemltaSBoYXRhc8SxXG4iCisiXHQlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAiRG9zeWEgdGFuxLFtbGF5xLFjxLEgJWQgZGXEn2VybGVuZGlyaWxpcmtlbiBoYXRhOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjgwMQorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgIlRhbWFtbGFtYSBiaWxnaXNpIGRvc3lhIHRhbsSxbWxhecSxY8Sxc8SxIGdlw6dlcnNpeiIKKworIzogZTJmc2NrL3VuaXguYzo4MTYKK21zZ2lkICJPbmx5IG9uZSBvZiB0aGUgb3B0aW9ucyAtcC8tYSwgLW4gb3IgLXkgbWF5IGJlIHNwZWNpZmllZC4iCittc2dzdHIgIlNhZGVjZSAtcC8tYSwgLW4gdmV5YSAteSBzZcOnZW5la2xlcmluZGVuIHNhZGVjZSBiaXJpIGJlbGlydGlsZWJpbGlyLiIKKworIzogZTJmc2NrL3VuaXguYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC10IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCittc2dzdHIgIiAtdCBzZcOnZW5lxJ9pIGUyZnNjayduxLFuIGJ1IHPDvHLDvG3DvG5kZSBkZXN0ZWtsZW5taXlvci5cbiIKKworIzogZTJmc2NrL3VuaXguYzo4NjggZTJmc2NrL3VuaXguYzo5NDIgbWlzYy90dW5lMmZzLmM6ODc5IG1pc2MvdHVuZTJmcy5jOjExNzQKKyM6IG1pc2MvdHVuZTJmcy5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiJyVzJyDDp8O2esO8bWxlbmVtaXlvciIKKworIzogZTJmc2NrL3VuaXguYzo5MjEKK21zZ2lkICJUaGUgLW4gYW5kIC1EIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo5MjYKK21zZ2lkICJUaGUgLW4gYW5kIC1jIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo5MzEKKyMsIGZ1enp5Cittc2dpZCAiVGhlIC1uIGFuZCAtbC8tTCBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICIiCisiIC1jIHNlw6dlbmXEn2kgaWxlIC1sIHZlIC1MIHNlw6dlbmVrbGVyaSBheW7EsSBhbmRhIGJpcmxpa3RlIGt1bGxhbsSxbGFtYXouXG4iCisKKyM6IGUyZnNjay91bml4LmM6OTg1Cittc2dpZCAiVGhlIC1jIGFuZCB0aGUgLWwvLUwgb3B0aW9ucyBtYXkgbm90IGJlIGJvdGggdXNlZCBhdCB0aGUgc2FtZSB0aW1lLlxuIgorbXNnc3RyICIiCisiIC1jIHNlw6dlbmXEn2kgaWxlIC1sIHZlIC1MIHNlw6dlbmVrbGVyaSBheW7EsSBhbmRhIGJpcmxpa3RlIGt1bGxhbsSxbGFtYXouXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTAzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTJGU0NLX0pCRF9ERUJVRyBcIiVzXCIgbm90IGFuIGludGVnZXJcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIGJpciB0YW1zYXnEsSBkZcSfaWxcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJbnZhbGlkIG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiU2F5xLFzYWwgb2xtYXlhbiBnZcOnZXJzaXogYmHEn8SxbXPEsXogZGXEn2nFn2tlbiwgLSVjIChcIiVzXCIpXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGludGVydmFsIGlzICV1IHNlY29uZHMgYW5kIHRvdGFsIHdhaXQgdGltZSBpcyAldSBzZWNvbmRzLiBQbGVhc2UgIgorIndhaXQuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjExNDkgZTJmc2NrL3VuaXguYzoxMTU0CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGNoZWNraW5nIE1NUCBibG9jayIKK21zZ3N0ciAiLSBzw7xwZXJibG9rIGF5YXJsYW7EsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svdW5peC5jOjExNTYgbWlzYy90dW5lMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJJZiB5b3UgYXJlIHN1cmUgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IGluIHVzZSBvbiBhbnkgbm9kZSwgcnVuOlxuIgorIid0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfSdcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEyMDcKK21zZ2lkICJFcnJvcjogZXh0MmZzIGxpYnJhcnkgdmVyc2lvbiBvdXQgb2YgZGF0ZSFcbiIKK21zZ3N0ciAiSGF0YTogZXh0MmZzIGtpdGFwbMSxayBzw7xyw7xtw7wgdXlndW4gZGXEn2lsIVxuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMTQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gaW5pdGlhbGl6ZSBwcm9ncmFtIgorbXNnc3RyICItIHV5Z3VsYW1hIGJhxZ9sYXTEsWxtYXlhIMOnZWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL3VuaXguYzoxMjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXMsICVzXG4iCittc2dzdHIgIlx0JXMsICVzIGt1bGxhbsSxbMSxeW9yXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTI0OQorbXNnaWQgIm5lZWQgdGVybWluYWwgZm9yIGludGVyYWN0aXZlIHJlcGFpcnMiCittc2dzdHIgImV0a2lsZcWfaW1saSBvbmFyxLFtIGnDp2luIHXDp2JpcmltIGdlcmVrbGkiCisKKyM6IGUyZnNjay91bml4LmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi5cbiIKK21zZ3N0ciAiJXM6ICVzIGJsb2tsYXLEsSB5ZWRla2xlbWV5ZSDDp2FsxLHFn8SxeW9yLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMwNQorbXNnaWQgIlN1cGVyYmxvY2sgaW52YWxpZCwiCittc2dzdHIgIlPDvHBlcmJsb2sgZ2XDp2Vyc2l6LCIKKworIzogZTJmc2NrL3VuaXguYzoxMzA2Cittc2dpZCAiR3JvdXAgZGVzY3JpcHRvcnMgbG9vayBiYWQuLi4iCittc2dzdHIgIkdydXAgdGFuxLFtbGF5xLFjxLFsYXIgaGF0YWzEsSBnw7Zyw7xuw7x5b3IuLi4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHVzaW5nIHRoZSBiYWNrdXAgYmxvY2tzIgorbXNnc3RyICItIGhhdGFsxLEgYmxva2xhciBkw7zEn8O8bcO8IG9rdW51cmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay91bml4LmM6MTMyMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGdvaW5nIGJhY2sgdG8gb3JpZ2luYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICIlczogZ2XDp2VybGkgZ8O8bWzDvGsgZG9zeWFzxLEgc3VwZXIgYmxvxJ91IHlva1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNDkKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gcmV2aXNpb24gaXMgYXBwYXJlbnRseSB0b28gaGlnaCBmb3IgdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKKyIoT3IgdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jayBpcyBjb3JydXB0KVxuIgorIlxuIgorbXNnc3RyICIiCisiRG9zeWEgc2lzdGVtaSBlMmZzY2snbsSxbiBidSBzw7xyw7xtw7xuZGVuIGRhaGEgecO8a3NlayBiaXIgc8O8csO8bcO8XG4iCisiZGVzdGVrbGl5b3IgZ2liaS4gKFlhIGRhIGRvc3lhIHNpc3RlbWluaW4gc8O8cGVyYmxvxJ91IGJvenVrIG9sYWJpbGlyKVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTYKK21zZ2lkICJDb3VsZCB0aGlzIGJlIGEgemVyby1sZW5ndGggcGFydGl0aW9uP1xuIgorbXNnc3RyICJCdSBzxLFmxLFyIHV6dW5sdWtsdSBiaXIgZGlzayBiw7Zsw7xtw7wgb2xhYmlsaXIgbWk/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSBvciBiZSByb290XG4iCittc2dzdHIgIkRvc3lhIHNpc3RlbWluZSAlcyBlcmnFn2ltaW5peiBvbG1hbMSxIHlhIGRhIHJvb3Qgb2xtYWzEsXPEsW7EsXpcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY0Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICJCdSBtZXZjdXQgb2xtYXlhbiBiaXIgYXlnxLF0IHlhIGRhIGJpciB0YWthcyBheWfEsXTEsSBtxLEgYWNhYmE/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM2NgorbXNnaWQgIkZpbGVzeXN0ZW0gbW91bnRlZCBvciBvcGVuZWQgZXhjbHVzaXZlbHkgYnkgYW5vdGhlciBwcm9ncmFtP1xuIgorbXNnc3RyICIiCisiRG9zeWFzaXN0ZW1pIGJhxZ9rYSBiaXIgdXlndWxhbWEgdGFyYWbEsW5kYW4gw7Z6ZWxsaWtsZSBiYcSfbGFubcSxxZ8gdmV5YSBhw6fEsWxtxLHFn1xuIgorIm9sYWJpbGlyIG1pP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNzAKKyMsIGZ1enp5Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IGRldmljZT9cbiIKK21zZ3N0ciAiQnUgbWV2Y3V0IG9sbWF5YW4gYmlyIGF5Z8SxdCB5YSBkYSBiaXIgdGFrYXMgYXlnxLF0xLEgbcSxIGFjYWJhP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNzMKK21zZ2lkICIiCisiRGlzayB3cml0ZS1wcm90ZWN0ZWQ7IHVzZSB0aGUgLW4gb3B0aW9uIHRvIGRvIGEgcmVhZC1vbmx5XG4iCisiY2hlY2sgb2YgdGhlIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIkRpc2sgeWF6bWEga29ydW1hbMSxOyAtbiBzZcOnZW5lxJ9pbmkga3VsbGFuYXJhayBzYWx0LW9rdSBraXBpbmRlXG4iCisiZGVuZXRpbSB5YXDEsW7EsXouXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTQzNworbXNnaWQgIkdldCBhIG5ld2VyIHZlcnNpb24gb2YgZTJmc2NrISIKK21zZ3N0ciAiZTJmc2NrJ27EsW4gZGFoYSB5ZW5pIGJpciBzw7xyw7xtw7xuw7wgYWzEsW4hIgorCisjOiBlMmZzY2svdW5peC5jOjE0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgZXh0MyBqb3VybmFsIGZvciAlcyIKK21zZ3N0ciAiLSAlcyBpw6dpbiBleHQzIGfDvG5sw7zEn8O8IGRlbmV0bGVuaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svdW5peC5jOjE0OTIKK21zZ2lkICIiCisiV2FybmluZzogc2tpcHBpbmcgam91cm5hbCByZWNvdmVyeSBiZWNhdXNlIGRvaW5nIGEgcmVhZC1vbmx5IGZpbGVzeXN0ZW0gIgorImNoZWNrLlxuIgorbXNnc3RyICIiCisiVXlhcsSxOiBEb3N5YSBzaXN0ZW1pIHNhbHQtb2t1IGtpcGluZGUgZGVuZXRsZW5kacSfaW5kZW5cbiIKKyJnw7xubMO8ayBkb3N5YXPEsW5hIGfDtnJlIGt1cnRhcm1hIGF0bGFuxLF5b3IuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTUwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHN1cGVyYmxvY2sgZmxhZ3Mgb24gJXNcbiIKK21zZ3N0ciAiJXMgw7x6ZXJpbmUgc8O8cGVyYmxvayBiYXlyYWtsYXLEsSBrb251bGFtYWTEsVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVjb3ZlcmluZyBleHQzIGpvdXJuYWwgb2YgJXMiCittc2dzdHIgIi0gJXMgZXh0MyBnw7xubMO8ayBkb3N5YXPEsSBrdXJ0YXLEsWxtYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL3VuaXguYzoxNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpOiIKK21zZ3N0ciAiJXMgZGVzdGVrbGVubWV5ZW4gw7Z6ZWxsaWsobGVyaSk6IgorCisjOiBlMmZzY2svdW5peC5jOjE1NDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YXJuaW5nOiBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKK21zZ3N0ciAiVXlhcsSxOiBzxLFrxLHFn3TEsXJtYSBkZXN0ZcSfaSBkZW5leXNlbGRpci5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTU1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IGUyZnNjayBub3QgY29tcGlsZWQgd2l0aCBIVFJFRSBzdXBwb3J0LFxuIgorIlx0YnV0IGZpbGVzeXN0ZW0gJXMgaGFzIEhUUkVFIGRpcmVjdG9yaWVzLlxuIgorbXNnc3RyICIiCisiRTJmc2NrIEhUUkVFIGRlc3RlxJ9pIGlsZSBkZXJsZW5tZW1pxZ8sXG4iCisiXHRhbWEgZG9zeWEgc2lzdGVtaSAlcyBIVFJFRSBkaXppbmxlcmkgacOnZXJpeW9yLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSByZWFkaW5nIGJhZCBibG9ja3MgaW5vZGVcbiIKK21zZ3N0ciAiLSBoYXRhbMSxIGJsb2tsYXIgZMO8xJ/DvG3DvCBva3VubWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay91bml4LmM6MTYxMAorbXNnaWQgIlRoaXMgZG9lc24ndCBib2RlIHdlbGwsIGJ1dCB3ZSdsbCB0cnkgdG8gZ28gb24uLi5cbiIKK21zZ3N0ciAiQnUgcGVrIGhheXJhIGFsYW1ldCBkZcSfaWwsIGFtYSDDvHN0w7xuZSBnaWRpbGVjZWsuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCVkIGJsb2Nrcyk6ICIKK21zZ3N0ciAiR8O8bmzDvGsgb2x1xZ90dXJ1bHV5b3IgKCVkIGJsb2spOiAiCisKKyM6IGUyZnNjay91bml4LmM6MTY2MgorbXNnaWQgIiBEb25lLlxuIgorbXNnc3RyICIgVGFtYW1sYW5kxLEuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY2NAorbXNnaWQgIiIKKyJcbiIKKyIqKiogam91cm5hbCBoYXMgYmVlbiByZS1jcmVhdGVkIC0gZmlsZXN5c3RlbSBpcyBub3cgZXh0MyBhZ2FpbiAqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIioqKiBnw7xubMO8ayB5ZW5pZGVuIG9sdcWfdHVydWxkdSAtIGRvc3lhIHNpc3RlbWkgeWVuaWRlbiBleHQzICoqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2ODgKK21zZ2lkICJSZXN0YXJ0aW5nIGUyZnNjayBmcm9tIHRoZSBiZWdpbm5pbmcuLi5cbiIKK21zZ3N0ciAiZTJmc2NrIGJhxZ90YW4gYmHFn2zEsXlvci4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2OTIKK21zZ2lkICJ3aGlsZSByZXNldHRpbmcgY29udGV4dCIKK21zZ3N0ciAiLSBiYcSfbGFtIHPEsWbEsXJsYW7EsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svdW5peC5jOjE2OTkKK21zZ2lkICJhYm9ydGVkIgorbXNnc3RyICLDp8Sxa3TEsSIKKworIzogZTJmc2NrL3VuaXguYzoxNzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBlMmZzY2sgY2FuY2VsZWQuXG4iCittc2dzdHIgIiVzOiBlMmZzY2sgZHVyZHVydWxkdS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzQxIGUyZnNjay91dGlsLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKiBET1NZQSBTxLBTVEVNxLAgREXEnsSwxZ5UxLBSxLBMRMSwICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiVzOiAqKioqKiBNQUvEsE5BWUkgWUVOxLBERU4gQkHFnkxBVElOICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc1MyBlMmZzY2svdXRpbC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBXQVJOSU5HOiBGaWxlc3lzdGVtIHN0aWxsIGhhcyBlcnJvcnMgKioqKioqKioqKlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogVVlBUkk6IERvc3lhIHNpc3RlbWkgaGFsYSBoYXRhbMSxICoqKioqKioqKipcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoxOTAgbWlzYy91dGlsLmM6ODYKK21zZ2lkICJ5WSIKK21zZ3N0ciAiZUUiCisKKyM6IGUyZnNjay91dGlsLmM6MTkxCittc2dpZCAibk4iCittc2dzdHIgImhIIgorCisjOiBlMmZzY2svdXRpbC5jOjIwNQorbXNnaWQgIjx5PiIKK21zZ3N0ciAiPGU+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwNworbXNnaWQgIjxuPiIKK21zZ3N0ciAiPGg+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwOQorbXNnaWQgIiAoeS9uKSIKK21zZ3N0ciAiIChlL2gpIgorCisjOiBlMmZzY2svdXRpbC5jOjIyMworbXNnaWQgImNhbmNlbGxlZCFcbiIKK21zZ3N0ciAiZHVyZHVydWxkdSFcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyMzgKK21zZ2lkICJ5ZXNcbiIKK21zZ3N0ciAiZXZldFxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI0MAorbXNnaWQgIm5vXG4iCittc2dzdHIgImhhecSxclxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IG5vXG4iCisiXG4iCittc2dzdHIgIiIKKyIlcz8gaGF5xLFyXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8geWVzXG4iCisiXG4iCittc2dzdHIgIiIKKyIlcz8gZXZldFxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1OAorbXNnaWQgInllcyIKK21zZ3N0ciAiZXZldCIKKworIzogZTJmc2NrL3V0aWwuYzoyNTgKK21zZ2lkICJubyIKK21zZ3N0ciAiaGF5xLFyIgorCisjOiBlMmZzY2svdXRpbC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBpbGxlZ2FsIGJpdG1hcCBibG9jayhzKSBmb3IgJXMiCittc2dzdHIgImUyZnNja19yZWFkX2JpdG1hcHM6ICVzIGnDp2luIGJpdGXFn2xlbSBibG9rbGFyxLEga3VyYWxkxLHFn8SxIgorCisjOiBlMmZzY2svdXRpbC5jOjI3OAorbXNnaWQgInJlYWRpbmcgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMiCittc2dzdHIgImTDvMSfw7xtIHZlIGJsb2sgYml0ZcWfbGVtbGVyaSBva3VudXlvciIKKworIzogZTJmc2NrL3V0aWwuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gcmVhZCBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAiLSAlcyBpw6dpbiBiaXRlxZ9sZW1sZXJpbiBva3VubWFzxLEgeWluZWxlbmlya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL3V0aWwuYzoyOTgKKyMsIGZ1enp5Cittc2dpZCAid3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyIKK21zZ3N0ciAiYmxvayBiaXRlxZ9sZW1sZXJpIHlhesSxbMSxeW9yIgorCisjOiBlMmZzY2svdXRpbC5jOjMwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAiLSAlcyBpw6dpbiBkw7zEn8O8bSBiaXRlxZ9sZW1sZXJpbmluIHlhesSxbG1hc8SxIHlpbmVsZW5pcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay91dGlsLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyIlczogVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOyBSVU4gZnNjayBNQU5VQUxMWS5cbiIKKyJcdChpLmUuLCB3aXRob3V0IC1hIG9yIC1wIG9wdGlvbnMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyIlczogQkVLTEVOTUVZRU4gVVlHVU5TVVpMVUs7IGZzY2sgw4dBTEnFnlRJUk1BTElTSU5JWi5cbiIKKyJcdCgtYSB2ZSAtcCBzZcOnZW5la2xlcmluaSBrdWxsYW5tYWRhbilcbiIKKworIzogZTJmc2NrL3V0aWwuYzozOTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKK21zZ3N0ciAiS3VsbGFuxLFsYW4gYmVsbGVrOiAlZGsvJWRrICglZGsvJWRrKSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdSwgIgorbXNnc3RyICJLdWxsYW7EsWxhbiBiZWxsZWs6ICVkLCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWU6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCittc2dzdHIgInphbWFuOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbGFwc2VkIHRpbWU6ICU2LjNmXG4iCittc2dzdHIgImdlw6dlbiBzw7xyZTogJTYuM2ZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0NDcgZTJmc2NrL3V0aWwuYzo0NjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICItICVsZCBkw7zEn8O8bcO8ICVzIGRlbiBva3VudXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svdXRpbC5jOjQ3NSBlMmZzY2svdXRpbC5jOjQ4OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgIi0gJWxkIGTDvMSfw7xtw7wgJXMgZSB5YXrEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svdXRpbC5jOjYzNworbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgemVyb2l6aW5nIGJ1ZmZlciIKK21zZ3N0ciAiLSBzxLFmxLFybGFtYSB0YW1wb24gYmVsbGXEn2kgYXlyxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL3V0aWwuYzo3ODUKK21zZ2lkICIiCisiVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb2RpZmllZCB3aGlsZSBmc2NrIGlzICIKKyJydW5uaW5nLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NzIKKyMsIGZ1enp5Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiYml0dGkgICAgICAgICAgICAgICAgICAgICAgICAgICAuXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1iIGJsb2NrX3NpemVdIFstaSBpbnB1dF9maWxlXSBbLW8gb3V0cHV0X2ZpbGVdIFstc3Z3bmZdXG4iCisiICAgICAgIFstYyBibG9ja3NfYXRfb25jZV0gWy1kIGRlbGF5X2ZhY3Rvcl9iZXR3ZWVuX3JlYWRzXSBbLWUgIgorIm1heF9iYWRfYmxvY2tzXVxuIgorIiAgICAgICBbLXAgbnVtX3Bhc3Nlc10gWy10IHRlc3RfcGF0dGVybiBbLXQgdGVzdF9wYXR0ZXJuIFsuLi5dXV1cbiIKKyIgICAgICAgZGV2aWNlIFtsYXN0X2Jsb2NrIFtmaXJzdF9ibG9ja11dXG4iCittc2dzdHIgIiIKKyJLdWxsYW7EsW3EsTogJXMgWy1iIGJsb2tfYm95dV0gWy1pIGdpcmRpX2Rvc3lhc8SxXSBbLW8gw6fEsWt0xLFfZG9zeWFzxLFdXG4iCisiICAgICAgICAgIFstc3Z3bmZdIFstYyBibG9rX3NhecSxc8SxXSBbLXAgZ2XDp2nFn19zYXnEsXPEsV1cbiIKKyIgICAgICAgICAgWy10IGRlbmVtZV/Fn2FibG9udSBbLXQgZGVuZW1lX8WfYWJsb251XG4iCisiIFsuLi5dXV1cbiIKKyIgICAgICAgICAgYXlnxLF0IFtzb25fYmxvayBbaWxrX2Jsb2tdXVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSAtbiBhbmQgLXcgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIgorIlxuIgorbXNnc3RyICIiCisiJXM6IC1uIHZlIC13IHNlw6dlbmVrbGVyaSBiaXJiaXJpbmRlbiBiYcSfxLFtc8SxemTEsXIuXG4iCisiXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiU2LjJmJSUgZG9uZSwgJXMgZWxhcHNlZC4gKCVkLyVkLyVkIGVycm9ycykiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzozMjgKK21zZ2lkICJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIKK21zZ3N0ciAiUmFzZ2VsZSDFn2FibG9uIGlsZSBzxLFuYW7EsXlvcjogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM0NgorbXNnaWQgIlRlc3Rpbmcgd2l0aCBwYXR0ZXJuIDB4IgorbXNnc3RyICJTxLFuYW1hIMWfYWJsb251OiAweCIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNzggbWlzYy9iYWRibG9ja3MuYzo0NTEKK21zZ2lkICJkdXJpbmcgc2VlayIKK21zZ3N0ciAiZXJpxZ9pbSBzxLFyYXPEsW5kYSIKKworIzogbWlzYy9iYWRibG9ja3MuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIgorbXNnc3RyICJkb19yZWFkIGnDp2luIHR1aGFmIGRlxJ9lciAoJWxkKVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ3NgorbXNnaWQgImR1cmluZyBleHQyZnNfc3luY19kZXZpY2UiCittc2dzdHIgImV4dDJmc19zeW5jX2RldmljZSBzxLFyYXPEsW5kYSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo0OTYgbWlzYy9iYWRibG9ja3MuYzo3NTgKK21zZ2lkICJ3aGlsZSBiZWdpbm5pbmcgYmFkIGJsb2NrIGxpc3QgaXRlcmF0aW9uIgorbXNnc3RyICItIGhhdGFsxLEgYmxvayBsaXN0ZXNpIHlpbmVsZW1lc2luZSBiYcWfbGFuxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTEgbWlzYy9iYWRibG9ja3MuYzo2MTEgbWlzYy9iYWRibG9ja3MuYzo3NjkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlcnMiCittc2dzdHIgIi0gdGFtcG9uIGJlbGxlayBheXLEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBibG9ja3MgJWx1IHRvICVsdVxuIgorbXNnc3RyICIlbHUgaWxlICVsdSBhcmFzxLFuZGFraSBibG9rbGFyIGRlbmV0bGVuaXlvclxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyMAorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtb25seSBtb2RlXG4iCittc2dzdHIgIkhhdGFsxLEgYmxva2xhciBzYWx0LW9rdW51ciBraXB0ZSBkZW5ldGxlbml5b3JcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjkKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAocmVhZC1vbmx5IHRlc3QpOiAiCittc2dzdHIgIkhhdGFsxLEgYmxva2xhciBpw6dpbiBkZW5ldGxlbml5b3IgKHNhbHQtb2t1IHRlc3RpKTogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUzNiBtaXNjL2JhZGJsb2Nrcy5jOjY0MyBtaXNjL2JhZGJsb2Nrcy5jOjY4NQorIzogbWlzYy9iYWRibG9ja3MuYzo4MzIKK21zZ2lkICJUb28gbWFueSBiYWQgYmxvY2tzLCBhYm9ydGluZyB0ZXN0XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MTgKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiSGF0YWzEsSBibG9rbGFyIG9rdS15YXoga2lwaW5kZSBkZW5ldGxlbml5b3JcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MjAgbWlzYy9iYWRibG9ja3MuYzo3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSBibG9jayAlbHUgdG8gJWx1XG4iCittc2dzdHIgIkJsb2sgJWx1IGRhbiAlbHUgeWEga2FkYXJcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2NzUKK21zZ2lkICJSZWFkaW5nIGFuZCBjb21wYXJpbmc6ICIKK21zZ3N0ciAiT2t1bnV5b3IgdmUga2FyxZ/EsWxhxZ90xLFyxLFsxLF5b3I6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiBub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIkhhdGFsxLEgYmxva2xhciB2ZXJpIGJvem1heWFuIG9rdS15YXoga2lwaW5kZSBkZW5ldGxlbml5b3JcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODcKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAobm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgdGVzdClcbiIKK21zZ3N0ciAiSGF0YWzEsSBibG9rbGFyIGRlbmV0bGVuaXlvciAoecSxa8SxY8SxIG9sbWF5YW4gb2t1LXlheiBzxLFuYW1hc8SxKVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc5NAorbXNnaWQgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIgorbXNnc3RyICIiCisiXG4iCisiS2VzbWUgeWFrYWxhbmTEsSwga2FsZMSxcsSxbMSxeW9yXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmluZyB0ZXN0IGRhdGEgd3JpdGUsIGJsb2NrICVsdSIKK21zZ3N0ciAidmVyaSB5YXptYSBkZW5lbWVzaSBzxLFyYXPEsW5kYSwgYmxvayAlbHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTk4IG1pc2MvdXRpbC5jOjMyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBtb3VudGVkOyAiCittc2dzdHIgIiVzIGJhxJ9sYW5kxLE7ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDAwCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIiIKKyJiYWRibG9ja3MgbidvbHVyc2Egb2xzdW4gw6dhbMSxxZ90xLFyxLFsYWNhay4gxLBuxZ9hbGxhaCAvZXRjL210YWIgeWFubMSxxZ90xLFyLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDUKK21zZ2lkICJpdCdzIG5vdCBzYWZlIHRvIHJ1biBiYWRibG9ja3MhXG4iCittc2dzdHIgIidiYWRibG9ja3MnIMOnYWzEscWfdMSxcm1hayBnw7x2ZW5saSBkZcSfaWwhXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAxMCBtaXNjL3V0aWwuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYXBwYXJlbnRseSBpbiB1c2UgYnkgdGhlIHN5c3RlbTsgIgorbXNnc3RyICIlcyBnw7Zyw7xuw7zFn2UgZ8O2cmUgc2lzdGVtIHRhcmFmxLFuZGFuIGt1bGxhbsSxbMSxeW9yOyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAxMworbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICJiYWRibG9ja3MgbidvbHVyc2Egb2xzdW4gw6dhbMSxxZ90xLFyxLFsYWNhay5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIC0gJXMiCittc2dzdHIgImJsb2sgdXp1bmx1xJ91IGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBiaWcgbWF4IGJhZCBibG9ja3MgY291bnQgJXUgLSBtYXhpbXVtIGlzICV1IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRlc3RfcGF0dGVybiAtICVzIgorbXNnc3RyICJzxLFuYW1hIMWfYWJsb251IC0gJXMgacOnaW4gYmVsbGVrIGF5csSxbGFtYWTEsSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTg0Cittc2dpZCAiTWF4aW11bSBvZiBvbmUgdGVzdF9wYXR0ZXJuIG1heSBiZSBzcGVjaWZpZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIlNhbHQgb2t1bnVyIGtpcHRlIGVuIMOnb2sgYmlyIHPEsW5hbWEgxZ9hYmxvbnUgYmVsaXJ0aWxlYmlsaXIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE5MAorbXNnaWQgIlJhbmRvbSB0ZXN0X3BhdHRlcm4gaXMgbm90IGFsbG93ZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIlNhbHQgb2t1bnVyIGtpcHRlIHJhc2dlbGUgc8SxbmFtYSDFn2FibG9udSBrdWxsYW7EsW3EsW5hIGl6aW4gdmVyaWxtZXoiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwNAorbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBtYW51YWxseVxuIgorbXNnc3RyICJBeWfEsXQgYWxhbsSxIHNhcHRhbmFtYWTEsTsgRWxsZSBiaXIgZGXEn2VyIGdpcm1lbGlzaW5pelxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMTAKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIgorbXNnc3RyICItIGF5Z8SxdCBhbGFuxLEgc2FwdGFubWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIxNQorIywgZnV6enkKK21zZ2lkICJsYXN0IGJsb2NrIgorbXNnc3RyICJCbG9rbGFyIHllbmlkZW4ga29udW1sYW5kxLFyxLFsxLF5b3IiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIyMQorIywgZnV6enkKK21zZ2lkICJmaXJzdCBibG9jayIKK21zZ3N0ciAixLBsayB2ZXJpIGJsb8SfdSA9ICV1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIyNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAoJWxsdSk6IG11c3QgYmUgbGVzcyB0aGFuICVsbHUiCittc2dzdHIgImJhxZ9sYW5nxLHDpyBibG/En3UgaGF0YWzEsSAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZW5kIGJsb2NrICglbGx1KTogbXVzdCBiZSAzMi1iaXQgdmFsdWUiCittc2dzdHIgImJhxZ9sYW5nxLHDpyBibG/En3UgaGF0YWzEsSAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyODcKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyBpbi1tZW1vcnkgYmFkIGJsb2NrcyBsaXN0IgorbXNnc3RyICJoYXRhbMSxIGJsb2tsYXIgbGlzdGVzaSBiZWxsZWt0ZSBvbHXFn3R1cnVsdXJrZW4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI5NgorbXNnaWQgImlucHV0IGZpbGUgLSBiYWQgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTMwNCBtaXNjL2JhZGJsb2Nrcy5jOjEzMTMKK21zZ2lkICJ3aGlsZSBhZGRpbmcgdG8gaW4tbWVtb3J5IGJhZCBibG9jayBsaXN0IgorbXNnc3RyICJiZWxsZWt0ZWtpIGhhdGFsxLEgYmxva2xhciBsaXN0ZXNpbmUgZWtsZW5pcmtlbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzM4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIKK21zZ3N0ciAiR2XDp2nFnyB0YW1hbWxhbmTEsSwgJXUgaGF0YWzEsSBibG9rIGJ1bHVuZHUuXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWZl0gWy0rPWFBY0NkRGVpanNTdFR1XSBbLXYgdmVyc2lvbl0gZmlsZXMuLi5cbiIKK21zZ3N0ciAiIgorIkt1bGxhbsSxbcSxOiAlcyBbLVJWXSBbLSs9QWFjRGRpanNTdV0gWy12IHPDvHLDvG1dIGRvc3lhbGFyLi4uXG4iCisiXG4iCisiRG9zeWEgw7Z6ZWxsaWtsZXJpbmkgZGXEn2nFn3Rpcm1la3RlIGt1bGxhbsSxbMSxci5cbiIKKyJcbiIKKyJTZW1ib2xpayBraXAgc2XDp2VuZWtsZXJpOlxuIgorIlxuIgorIkJ1IGtpcHRlIMO2emVsbGlrbGVyICsgaWxlIG1ldmN1dCBzZcOnZW5la2xlcmUgZWtsZW5pciwgLSBpbGUga2FsZMSxcsSxbMSxcixcbiIKKyI9IGlsZSBzYWRlY2UgYmVsaXJ0aWxlbiDDtnplbGxpa2xlciBpw6dlcmlsaXIuXG4iCisiXG4iCisiICAgQTogZXJpxZ9pbSB6YW1hbsSxIGfDvG5jZWxsZW5tZXpcbiIKKyIgICBhOiBzYWRlY2UgZG9zeWFuxLFuIHNvbnVuYSBla2xlbWUgeWFwxLFsYWJpbGlyLiByb290IGRlxJ9pxZ90aXJlYmlsaXIuXG4iCisiICAgYzogc8Sxa8SxxZ90xLFyxLFsbcSxxZ87IGRvc3lhbsSxbiBva3VtYS15YXptYSBzxLFyYXPEsW5kYWtpIGHDp8SxbG1hc8SxLyIKKyJzxLFrxLHFn3TEsXLEsWxtYXPEsVxuIgorIiAgICAgIMOnZWtpcmRlxJ9pbiBkZW5ldGltaW5kZWRpci5cbiIKKyIgICBkOiBkw7Zrw7xtbGVubWV6OyBkdW1wIHV5Z3VsYW1hc8SxbmRhbiBldGtpbGVubWV6LlxuIgorIiAgIEQ6IGJpciBkaXppbmUgdXlndWxhbsSxciB2ZSBkaXppbmRla2kgZGXEn2nFn2lrbGlrbGVyIGXFn3phbWFubMSxIGnFn2xlbmlyLlxuIgorIiAgIGk6IGRlxJ9pxZ9tZXo7IGRvc3lhIGnDp2VyacSfaSBzaWxpbmVtZXosIHlhesSxbGFtYXosIGRvc3lheWEgYmHEnyAiCisib2x1xZ90dXJ1bGFtYXpcbiIKKyIgICAgICB2ZSBpc21pIGRlxJ9pxZ90aXJpbGVtZXouIFNhZGVjZSByb290IGJ1IMO2emVsbGnEn2kgZGXEn2nFn3RpcmViaWxpci5cbiIKKyIgICBqOiBnw7xubMO8a2xlbWU7IGRvc3lhIHNpc3RlbWkgZXh0MyBvbGFyYWsgYmHEn2xhbm3EscWfc2EgYnUgw7Z6ZWxsaWsgIgorImV0a2lzaXpkaXJcbiIKKyIgICBzOiBzaWxpbm1lIGfDvHZlbmxpxJ9pOyBidSDDtnplbGxpayB2ZXJpbGVuIGJpciBkb3N5YSBzaWxpbmRpxJ9pbmRlIHZlcmkgIgorImFsYW7EsVxuIgorIiAgICAgIHPEsWbEsXJsYXJsYSBkb2xkdXJ1bHVyXG4iCisiICAgUzogZcWfemFtYW5sxLEgZ8O8bmNlbGxlbWVsZXI7IGJ1IMO2emVsbGnEn2kgacOnZXJlbiBiaXIgZG9zeWF5YSB0w7xtXG4iCisiICAgICAgZGXEn2nFn2lrbGlrbGVyIGFuxLFuZGEgeWF6xLFsxLFyLCBzaXN0ZW1pbiAnc3luYycgc2XDp2VuZcSfaSBpbGUgIgorImJhxJ9sYW5tYXPEsW5hXG4iCisiICAgICAgZcWfZGXEn2VyIMO2emVsbGlrIHNhxJ9sYXJcbiIKKyIgICB1OiBzaWxpbmVtZW1lemxpazsgYnUgZG9zeWEgc2lsaW5kacSfaW5kZSBpw6dlcmnEn2kgc2FrbGFuxLFyLCBzaWxlY2VrXG4iCisiICAgICAga3VsbGFuxLFjxLF5YSBzaWxpbm1lIHPEsXJhc8SxbmRhIHNvcnVsbWFzxLFuxLEgc2HEn2xhci5cbiIKKyJcbiIKKyJTZcOnZW5la2xlcjpcbiIKKyIgICAtUiAgICAgICAgIGRpemlubGVyIHZlIGnDp2VyaWtsZXJpbmRlIGFyZMSxxZ/EsWsgacWfbGVtIHlhcMSxbMSxclxuIgorIiAgIC1WICAgICAgICAgc8O8csO8bSBiaWxnaXNpIGlsZSBpxZ9sZW0gaGFra8SxbmRhIGRhaGEgYXlyxLFudMSxbMSxIGJpbGdpIHZlcmlsaXJcbiIKKyIgICAtdiBzw7xyw7xtICAgZG9zeWFuxLFuIHPDvHLDvG0vw7xyZXRpbSBudW1hcmFzxLEgYmVsaXJ0aWxpclxuIgorIlxuIgorIsOHZXZpcmkgaGF0YWxhcsSxbsSxIDxnbnUtdHJAYmVsZ2VsZXIub3JnPiBhZHJlc2luZSBiaWxkaXJpbml6LlxuIgorIlxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdmVyc2lvbiAtICVzXG4iCittc2dzdHIgInPDvHLDvG0gaGF0YWzEsSAtICVzXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MjAxIG1pc2MvbHNhdHRyLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzdGF0ICVzIgorbXNnc3RyICItIHN0YXQgJXMgeWFwxLFsbWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIi0gJXMgw7x6ZXJpbmRlIGJheXJha2xhciBva3VudXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2NoYXR0ci5jOjIxMyBtaXNjL2NoYXR0ci5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncyBvZiAlcyBzZXQgYXMgIgorbXNnc3RyICJCZWxpcmxlbmVuICVzIGJheXJha2xhcsSxOiAiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIi0gJXMgw7x6ZXJpbmRlIGJheXJha2xhciBiZWxpcmxlbmlya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9jaGF0dHIuYzoyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiBvZiAlcyBzZXQgYXMgJWx1XG4iCittc2dzdHIgIiVzIHPDvHLDvG3DvCAlbHUgb2xhcmFrIGJlbGlybGVuZGlcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICItICVzIMO8emVyaW5kZSBzw7xyw7xtIGJlbGlybGVuaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2NoYXR0ci5jOjI2NworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIHBhdGggdmFyaWFibGUgaW4gY2hhdHRyX2Rpcl9wcm9jIgorbXNnc3RyICJjaGF0dHJfZGlyX3Byb2MgacWfbGV2aW5kZSBkb3N5YSB5b2x1IGRlxJ9pxZ9rZW5pbmUgeWVyIGF5csSxbGFtYWTEsSIKKworIzogbWlzYy9jaGF0dHIuYzozMDcKK21zZ2lkICI9IGlzIGluY29tcGF0aWJsZSB3aXRoIC0gYW5kICtcbiIKK21zZ3N0ciAiPSBpbGUgKyB2ZSAtIHV5dW1zdXpcbiIKKworIzogbWlzYy9jaGF0dHIuYzozMTUKK21zZ2lkICJNdXN0IHVzZSAnLXYnLCA9LCAtIG9yICtcbiIKK21zZ3N0ciAiJy12JywgPSwgLSB2ZXlhICsga3VsbGFuxLFsbWFsxLFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2NrPTxudW0+XSBbLW8gYmxvY2tzaXplPTxudW0+XSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIkt1bGxhbsSxbcSxOiAlcyBbLWJmaGl4Vl0gWy1vYiBzw7xwZXJibG9rXSBbLW9CIGJsb2tib3l1XSBheWfEsXRcbiIKKyJcbiIKKyJEb3N5YSBzaXN0ZW1pIGJpbGdpbGVyaW5pIGTDtmvDvG1sZXIuXG4iCisiXG4iCisiU2XDp2VuZWtsZXI6XG4iCisiICAgLWIgICAgICAgICAgICAgIGhhdGFsxLEgb2xhcmFrIGltbGVubWnFnyBibG9rbGFyxLEgZ8O2c3RlcmlyXG4iCisiICAgLWYgICAgICAgICAgICAgIGRvc3lhIHNpc3RlbWkgZHVtcGUyZnMnaW4gYmlsbWVkacSfaSDDtnplbGxpa2xlciBpw6dlcnNlICIKKyJiaWxlXG4iCisiICAgICAgICAgICAgICAgICAgIGJpbGdpbGVyaW4gZMO2a8O8bWxlbm1lc2luaSBzYcSfbGFyXG4iCisiICAgLWggICAgICAgICAgICAgIGdydXAgdGFuxLFtbGF5xLFjxLFsYXLEsSBkZcSfaWwgc2FkZWNlIHPDvHBlcmJsb2sgYmlsZ2lsZXJpbmlcbiIKKyIgICAgICAgICAgICAgICAgICAgZ8O2c3RlcmlyXG4iCisiICAgLWkgICAgICAgICAgICAgIGJlbGlydGlsZW4gYXlnxLF0IGnDp2luIGUyaW1hZ2UgdGFyYWbEsW5kYW4gb2x1xZ90dXJ1bG11xZ8gIgorImRpc2tcbiIKKyIgICAgICAgICAgICAgICAgICAgZ8O2csO8bnTDvHPDvCBkb3N5YXPEsW7EsW4gdmVyaWxlcmluaSBnw7ZzdGVyaXJcbiIKKyIgICAteCAgICAgICAgICAgICAgYXlyxLFudMSxbMSxIG9sYXJhayBncnVwbGFyxLFuIGJpbGdpbGVyaSBnw7ZzdGVyaWxpclxuIgorIiAgIC1WICAgICAgICAgICAgICBzw7xyw7xtIGJpbGdpbGVyaSBnw7ZzdGVyaWxpciB2ZSDDp8Sxa2FyXG4iCisiICAgLW9iIHPDvHBlcmJsb2sgICBkb3N5YSBzaXN0ZW1pbmkgdGFuxLFtbGF5YW4gc8O8cGVyYmxvayBiZWxpcnRpbGlyXG4iCisiICAgLW9CIGJsb2tib3l1ICAgIGRvc3lhIHNpc3RlbWluaSB0YW7EsW1sYXlhbiBibG9rIHV6dW5sdcSfdSBiZWxpcnRpbGlyXG4iCisiXG4iCisiw4dldmlyaSBoYXRhbGFyxLFuxLEgPGdudS10ckBiZWxnZWxlci5vcmc+IGFkcmVzaW5lIGJpbGRpcmluaXouXG4iCisiXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNTkKKyMsIGZ1enp5Cittc2dpZCAiYmxvY2tzIgorbXNnc3RyICJiYmxvayIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE2OQorbXNnaWQgImNsdXN0ZXJzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiR3JvdXAgJWx1OiAoQmxvY2tzICIKK21zZ3N0ciAiR3J1cCAlbHU6ICAoQmxva2xhcjogICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIENoZWNrc3VtIDB4JTA0eCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoRVhQRUNURUQgMHglMDR4KSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIsIHVudXNlZCBpbm9kZXMgJXVcbiIKK21zZ3N0ciAiZMO8xJ/DvG0gc2F5xLFzxLEgaGF0YWzEsSAtICVzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgJXMgc3VwZXJibG9jayBhdCAiCittc2dzdHIgIiAgICVzIHPDvHBlcmJsb2s6ICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTQKK21zZ2lkICJQcmltYXJ5IgorbXNnc3RyICIgIMSwbGsiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTQKK21zZ2lkICJCYWNrdXAiCittc2dzdHIgIlllZGVrIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE4Cittc2dpZCAiLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAiCittc2dzdHIgIiIKKyIgXG4iCisiICBHcnVwIHRhbsSxbWxhecSxY8SxOiAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjIyCittc2dpZCAiIgorIlxuIgorIiAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgIFllZGVrIEdEVCBibG9rbGFyxLEgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjI5Cittc2dpZCAiIEdyb3VwIGRlc2NyaXB0b3IgYXQgIgorbXNnc3RyICIiCisiIFxuIgorIiAgR3J1cCB0YW7EsW1sYXnEsWPEsTogICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzNQorbXNnaWQgIiAgQmxvY2sgYml0bWFwIGF0ICIKK21zZ3N0ciAiICAgIEJsb2sgYml0ZcWfbGVtaTogICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzOQorbXNnaWQgIiwgSW5vZGUgYml0bWFwIGF0ICIKK21zZ3N0ciAiIgorIiBcbiIKKyIgICBEw7zEn8O8bSBiaXRlxZ9sZW1pOiAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQzCittc2dpZCAiIgorIlxuIgorIiAgSW5vZGUgdGFibGUgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICAgICBEw7zEn8O8bSB0YWJsb3N1OiAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiICAldSBmcmVlICVzLCAldSBmcmVlIGlub2RlcywgJXUgZGlyZWN0b3JpZXMlcyIKK21zZ3N0ciAiIgorIlxuIgorIiAgJWQgc2VyYmVzdCBibG9rLCAlZCBzZXJiZXN0IGTDvMSfw7xtLCAlZCBkaXppblxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgJXUgdW51c2VkIGlub2Rlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTkKK21zZ2lkICIgIEZyZWUgYmxvY2tzOiAiCittc2dzdHIgIiAgIFNlcmJlc3QgYmxva2xhcjogICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI3NAorbXNnaWQgIiAgRnJlZSBpbm9kZXM6ICIKK21zZ3N0ciAiICBTZXJiZXN0IGTDvMSfw7xtbGVyOiAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzEwCittc2dpZCAid2hpbGUgcHJpbnRpbmcgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgIi0gaGF0YWzEsSBibG9rbGFyIGxpc3Rlc2kgYmFzxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2tzOiAldSIKK21zZ3N0ciAiSGF0YWzEsSBibG9rbGFyOiAldSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM0NSBtaXNjL3R1bmUyZnMuYzozNDcKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgIi0gZ8O8bmzDvGsgZMO8xJ/DvG3DvCBva3VudXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzUxCisjLCBmdXp6eQorbXNnaWQgIndoaWxlIG9wZW5pbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAiLSBnw7xubMO8ayBkw7zEn8O8bcO8IG9rdW51cmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNTcKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyIGJsb2NrIgorbXNnc3RyICItIGfDvG5sw7xrIGRvc3lhc8SxIHPDvHBlcmJsb8SfdSBva3VudXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzY0CisjLCBmdXp6eQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXIgaW52YWxpZCFcbiIKK21zZ3N0ciAiR8O8bmzDvGsgc8O8cGVyYmxvxJ91IHlvayFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2NworIywgZnV6enkKK21zZ2lkICJKb3VybmFsIGZlYXR1cmVzOiAgICAgICAgIgorbXNnc3RyICJHw7xubMO8ayBrdWxsYW7EsWPEsWxhcsSxOiAgICAgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM4MAorbXNnaWQgIkpvdXJuYWwgc2l6ZTogICAgICAgICAgICAgIgorbXNnc3RyICJHw7xubMO8ayBib3l1dHU6ICAgICAgICAgICAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzkxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorbXNnc3RyICIiCisiXG4iCisiR8O8bmzDvGsgYmxvxJ91IGJveXU6ICAgICAgICAldVxuIgorIkfDvG5sw7xrIHV6dW5sdcSfdTogICAgICAgICAgJXVcbiIKKyJHw7xubMO8ayBpbGsgYmxvxJ91OiAgICAgICAgICV1XG4iCisiR8O8bmzDvGsgc8SxcmFsYW1hc8SxOiAgICAgICAgMHglMDh4XG4iCisiR8O8bmzDvGsgYmHFn2xhbmfEsWPEsTogICAgICAgICV1XG4iCisiR8O8bmzDvGsga3VsbGFuxLFjxLEgc2F5xLFzxLE6ICAlbHVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM5OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBlcnJubzogICAgICAgICAgICAlZFxuIgorbXNnc3RyICJHw7xubMO8ayBrdWxsYW7EsWPEsWxhcsSxOiAgICAgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQxNSBtaXNjL3R1bmUyZnMuYzoxOTYKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAiLSBnw7xubMO8ayBkb3N5YXPEsSBzw7xwZXJibG/En3Ugb2t1bnVya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQyMworbXNnaWQgIkNvdWxkbid0IGZpbmQgam91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlcnMiCittc2dzdHIgIkfDvG5sw7xrIGRvc3lhc8SxIHPDvHBlcmJsb8SfdSB0YW7EsW0gbnVtYXJhc8SxIGJ1bHVuYW1hZMSxIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIGJsb2NrIHNpemU6ICAgICAgICV1XG4iCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgZmlyc3QgYmxvY2s6ICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIG51bWJlciBvZiB1c2VyczogICV1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJHw7xubMO8ayBibG/En3UgYm95dTogICAgICAgICV1XG4iCisiR8O8bmzDvGsgdXp1bmx1xJ91OiAgICAgICAgICAldVxuIgorIkfDvG5sw7xrIGlsayBibG/En3U6ICAgICAgICAgJXVcbiIKKyJHw7xubMO8ayBzxLFyYWxhbWFzxLE6ICAgICAgICAweCUwOHhcbiIKKyJHw7xubMO8ayBiYcWfbGFuZ8SxY8SxOiAgICAgICAgJXVcbiIKKyJHw7xubMO8ayBrdWxsYW7EsWPEsSBzYXnEsXPEsTogICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB1c2VyczogICAgICAgICAgICAlc1xuIgorbXNnc3RyICJHw7xubMO8ayBrdWxsYW7EsWPEsWxhcsSxOiAgICAgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ1NiBtaXNjL21rZTJmcy5jOjc0MyBtaXNjL3R1bmUyZnMuYzoxMjExCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIG9wdGlvbnMhXG4iCittc2dzdHIgIlNlw6dlbmVrbGVyaSDDp8O2esO8bWxlbWVrIGnDp2luIGJlbGxlayBheXLEsWxhbWFkxLEhXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdXBlcmJsb2NrIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiR2XDp2Vyc2l6IHPDvHBlciBibG9rIHBhcmFtZXRyZXNpOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiR2UuZXJzLHogYmxvayBib3l1dCBwYXJhbWV0cmVzaTogJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjUwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIGV4dGVuZGVkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0c3VwZXJibG9jaz08c3VwZXJibG9jayBudW1iZXI+XG4iCisiXHRibG9ja3NpemU9PGJsb2Nrc2l6ZT5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkJvenVrIGdlbmnFn2xldGlsbWnFnyBzZcOnZW5layhsZXIpIGJlbGlydGlsZGk6ICVzXG4iCisiXG4iCisiVXphdMSxbG3EscWfIHNlw6dlbmVrbGVyIHZpcmfDvGxsZSBheXLEsWzEsXIgdmUgYmlyIGXFn2l0dGlyICgnPScpIHNpbWdlc2kgaWxlICIKKyJheWFybGFuYWJpbGVuXG4iCisiXHRiaXIgYXJnw7xtYW4gYWxhYmlsaXJsZXIuXG4iCisiXG4iCisiR2XDp2VybGkgZ2VuacWfbGV0aWxtacWfIHNlw6dlbmVrbGVyOlxuIgorIlx0c3VwZXJibG9jaz08c8O8cGVyYmxvayBzYXnEsXPEsT5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvayBib3l1dHU+XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NjggbWlzYy9ta2UyZnMuYzoxNzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXNcbiIKK21zZ3N0ciAiXHQlcyBrdWxsYW7EsWzEsXlvclxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjA2IG1pc2MvZTJpbWFnZS5jOjE1ODIgbWlzYy90dW5lMmZzLmM6MjA2MAorIzogcmVzaXplL21haW4uYzozMTkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiR2XDp2VybGkgc8O8cGVyYmxvayBidWx1bmFtYWTEsS5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICVzOiBlcnJvciByZWFkaW5nIGJpdG1hcHM6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogJXM6IGJpdGXFn2xlbWxlciBva3VudXJrZW4gaGF0YSBvbHXFn3R1OiAlc1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbIC1yfFEgXSBbIC1mciBdIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIiIKKyJLdWxsYW7EsW3EsTogJXMgWy1yc0ldIEFZR0lUIERPU1lBXG4iCisiXG4iCisiQVlHSVQgw7x6ZXJpbmRla2kgZXh0MiBkb3N5YSBzaXN0ZW1pbmluIGtyaXRpayB2ZXJpbGVyaW5pIERPU1lBeWEga2F5ZGVkZXIuXG4iCisiw5ZybjogNEdCIGzEsWsgYmlyIHNpc3RlbSBpw6dpbiB5YWtsYcWfxLFrIDNNQiBsxLFrIGJpciBnw7Zyw7xudMO8IGRvc3lhc8SxXG4iCisib2x1xZ90dXJ1bHVyLiBCdSBkb3N5YSwgZG9zeWEgc2lzdGVtaW5pIGt1cnRhcm1hayBpw6dpbiB1em1hbmxhcmNhXG4iCisia3VsbGFuxLFsYWJpbGlyLiBCZWxsaSBhcmFsxLFrbGFybGEgYnUgZG9zeWFuxLFuIGJhxZ9rYSBiaXIgZG9zeWEgc2lzdGVtaW5lXG4iCisia2F5ZGVkaWxtZXNpIMO2bmVyaWxpci4gLXIgc2XDp2VuZcSfaSB0ZW1lbCBiacOnaW1saSBiaXIgZG9zeWEgw7xyZXRpciwgw6dvayAiCisiYsO8ecO8a1xuIgorIm9sYWNhxJ/EsW5kYW4gw7ZuZXJpbG1lei4gRE9TWUEgeWVyaW5lIC0gdmVyaWxpcnNlIGRvc3lhIHN0YW5kYXJ0IMOnxLFrdMSxeWFcbiIKKyJ5YXrEsWzEsXIuXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIC1JIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIiIKKyJLdWxsYW7EsW3EsTogJXMgWy1yc0ldIEFZR0lUIERPU1lBXG4iCisiXG4iCisiQVlHSVQgw7x6ZXJpbmRla2kgZXh0MiBkb3N5YSBzaXN0ZW1pbmluIGtyaXRpayB2ZXJpbGVyaW5pIERPU1lBeWEga2F5ZGVkZXIuXG4iCisiw5ZybjogNEdCIGzEsWsgYmlyIHNpc3RlbSBpw6dpbiB5YWtsYcWfxLFrIDNNQiBsxLFrIGJpciBnw7Zyw7xudMO8IGRvc3lhc8SxXG4iCisib2x1xZ90dXJ1bHVyLiBCdSBkb3N5YSwgZG9zeWEgc2lzdGVtaW5pIGt1cnRhcm1hayBpw6dpbiB1em1hbmxhcmNhXG4iCisia3VsbGFuxLFsYWJpbGlyLiBCZWxsaSBhcmFsxLFrbGFybGEgYnUgZG9zeWFuxLFuIGJhxZ9rYSBiaXIgZG9zeWEgc2lzdGVtaW5lXG4iCisia2F5ZGVkaWxtZXNpIMO2bmVyaWxpci4gLXIgc2XDp2VuZcSfaSB0ZW1lbCBiacOnaW1saSBiaXIgZG9zeWEgw7xyZXRpciwgw6dvayAiCisiYsO8ecO8a1xuIgorIm9sYWNhxJ/EsW5kYW4gw7ZuZXJpbG1lei4gRE9TWUEgeWVyaW5lIC0gdmVyaWxpcnNlIGRvc3lhIHN0YW5kYXJ0IMOnxLFrdMSxeWFcbiIKKyJ5YXrEsWzEsXIuXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICVzIC1yYSAgWyAgLWNmbnAgIF0gWyAtbyBzcmNfb2Zmc2V0IF0gWyAtTyBkZXN0X29mZnNldCBdIHNyY19mcyAiCisiWyBkZXN0X2ZzIF1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjkgbWlzYy9lMmltYWdlLmM6NTc2IG1pc2MvZTJpbWFnZS5jOjU4MgorIzogbWlzYy9lMmltYWdlLmM6MTE3OAorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlciIKK21zZ3N0ciAiLSB0YW1wb24gYmVsbGVrIGF5csSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBibG9jayAlbGx1XG4iCittc2dzdHIgIiVsdSBpbGUgJWx1IGFyYXPEsW5kYWtpIGJsb2tsYXIgZGVuZXRsZW5peW9yXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE4OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igd3JpdGluZyBibG9jayAlbGx1IgorbXNnc3RyICIlbHUgYmxvxJ91IHlhesSxbMSxcmtlbiBoYXRhOiAlcy4gICIKKworIzogbWlzYy9lMmltYWdlLmM6MTkxCittc2dpZCAiZXJyb3IgaW4gZ2VuZXJpY193cml0ZSgpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjIwOAorbXNnaWQgIkVycm9yOiBoZWFkZXIgc2l6ZSBpcyBiaWdnZXIgdGhhbiB3cnRfc2l6ZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjIxMworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGhlYWRlciBidWZmZXJcbiIKK21zZ3N0ciAiQmHFn2zEsWsgacOnaW4gdGFtcG9uIGJlbGxlayBheXLEsWxhbWFkxLFcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MjQxCittc2dpZCAid2hpbGUgd3JpdGluZyBzdXBlcmJsb2NrIgorbXNnc3RyICItIHPDvHBlcmJsb8SfYSB5YXrEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNTAKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICItIGTDvMSfw7xtIHRhYmxvc3VuYSB5YXrEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNTgKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiLSBibG9rIGJpdGXFn2xlbWkgeWF6xLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9lMmltYWdlLmM6MjY2Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSBiaXRtYXAiCittc2dzdHIgIi0gZMO8xJ/DvG0gYml0ZcWfbGVtaSB5YXrEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1MDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCByZWNfbGVuICglZClcbiIKK21zZ3N0ciAiRW1wdHkgZGlyZWN0b3J5IGJsb2NrICV1ICgjJWQpIGluIGlub2RlICV1XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjUxNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBkaXJlY3RvcnkgYmxvY2sgJWxsdTogYmFkIG5hbWVfbGVuICglZClcbiIKK21zZ3N0ciAiRW1wdHkgZGlyZWN0b3J5IGJsb2NrICV1ICgjJWQpIGluIGlub2RlICV1XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjU1NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSIKK21zZ3N0ciAiJXUgZMO8xJ/DvG0sICV1IGJsb2tcbiIKKworIzogbWlzYy9lMmltYWdlLmM6NTg2IG1pc2MvZTJpbWFnZS5jOjYyNgorbXNnaWQgIkNvcHlpbmcgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjYyMworbXNnaWQgIiIKKyJTdG9wcGluZyBub3cgd2lsbCBkZXN0cm95IHRoZSBmaWxlc3lzdGVtLCBpbnRlcnJ1cHQgYWdhaW4gaWYgeW91IGFyZSBzdXJlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyByZW1haW5pbmcgYXQgJS4yZiBNQi9zIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjY2MSBtaXNjL2UyaW1hZ2UuYzoxMTg4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIGJsb2NrICVsbHUiCittc2dzdHIgImJsb2sgJWx1IG9rdW51cmtlbiBoYXRhIG9sdcWfdHUgKCVzKS4gICIKKworIzogbWlzYy9lMmltYWdlLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcGllZCAlbGx1IC8gJWxsdSBibG9ja3MgKCVkJSUpIGluICVzICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXQgJS4yZiBNQi9zIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjc1NQorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGwxIHRhYmxlIgorbXNnc3RyICItIHRhbXBvbiBiZWxsZWsgYXlyxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9lMmltYWdlLmM6ODAwCisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgbDIgY2FjaGUiCittc2dzdHIgIi0gdGFtcG9uIGJlbGxlayBheXLEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2UyaW1hZ2UuYzo4MjMKK21zZ2lkICIiCisiV2FybmluZzogVGhlcmUgYXJlIHN0aWxsIHRhYmxlcyBpbiB0aGUgY2FjaGUgd2hpbGUgcHV0dGluZyB0aGUgY2FjaGUsIGRhdGEgIgorIndpbGwgYmUgbG9zdCBzbyB0aGUgaW1hZ2UgbWF5IG5vdCBiZSB2YWxpZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTQ1CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgZXh0Ml9xY293Ml9pbWFnZSIKK21zZ3N0ciAiZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgacWfbGV2aSDDp2HEn3LEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTUyCisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBleHQyX3Fjb3cyX2ltYWdlIgorbXNnc3RyICJleHQyZnNfYmxvY2tfaXRlcmF0ZSBpxZ9sZXZpIMOnYcSfcsSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyMTEgbWlzYy9lMmltYWdlLmM6MTIyOQorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yOiBtdWx0aXBsZSBzZXF1ZW50aWFsIHJlZmNvdW50IGJsb2NrcyBjcmVhdGVkIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyNjkKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgIi0gYmxvayBiaXRlxZ9sZW1pIHlhesSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyNzgKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBzY3JhbWJsZSBibG9jayBiaXRtYXAiCittc2dzdHIgIi0gYmxvayBiaXRlxZ9sZW1pIHlhesSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyODUKKyMsIGZ1enp5Cittc2dpZCAiU2Nhbm5pbmcgaW5vZGVzLi4uXG4iCittc2dzdHIgIkRvc3lhIGluZGVrc2kgdGFibG9zdSB0YXJhbsSxeW9yIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjk3CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciIKK21zZ3N0ciAiQmxvayB0YW1wb251IGF5csSxbGFtYWTEsSAoYm95dT0lZClcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTMzNiBtaXNjL2UyaW1hZ2UuYzoxMzUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBpdGVyYXRpbmcgb3ZlciBpbm9kZSAldSIKK21zZ3N0ciAic29ucmFraSBkw7zEn8O8bWUgZ2XDp2lsaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzgxCittc2dpZCAiUmF3IGFuZCBxY293MiBpbWFnZXMgY2Fubm90IGJlIGluc3RhbGxlZCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDAzCisjLCBmdXp6eQorbXNnaWQgImVycm9yIHJlYWRpbmcgYml0bWFwcyIKK21zZ3N0ciAiLSBiaXRlxZ9sZW1sZXIgb2t1bnVya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9lMmltYWdlLmM6MTQxNQorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGRldmljZSBmaWxlIgorbXNnc3RyICJkw7zEn8O8bSB0YXJhbWFzxLEgYmHFn2xhdMSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MjYKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgcmVzdG9yaW5nIHRoZSBpbWFnZSB0YWJsZSIKK21zZ3N0ciAiLSBkw7zEn8O8bSB0YWJsb3N1bmEgeWF6xLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9lMmltYWdlLmM6MTUyMworbXNnaWQgIi1hIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIHdpdGggcmF3IG9yIFFDT1cyIGltYWdlcy4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUyOQorbXNnaWQgIk9mZnNldHMgYXJlIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MzQKK21zZ2lkICJNb3ZlIG1vZGUgaXMgb25seSBhbGxvd2VkIHdpdGggcmF3IGltYWdlcy4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUzOQorbXNnaWQgIk1vdmUgbW9kZSByZXF1aXJlcyBhbGwgZGF0YSBtb2RlLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTQ5CisjLCBmdXp6eQorbXNnaWQgImNoZWNraW5nIGlmIG1vdW50ZWQiCittc2dzdHIgIiAoc2lzdGVtICVsZCBrZXJlIGJhxJ9sYW5kxLHEn8SxbmRhIGRlbmV0bGUpIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTU2Cittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgZTJpbWFnZSBvbiBhIFIvVyBtb3VudGVkIGZpbGVzeXN0ZW0gY2FuIHJlc3VsdCBpbiBhblxuIgorImluY29uc2lzdGVudCBpbWFnZSB3aGljaCB3aWxsIG5vdCBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiIKKyJVc2UgLWYgb3B0aW9uIGlmIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGF0LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MDgKK21zZ2lkICJRQ09XMiBpbWFnZSBjYW4gbm90IGJlIHdyaXR0ZW4gdG8gdGhlIHN0ZG91dCFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjE0Cittc2dpZCAiQ2FuIG5vdCBzdGF0IG91dHB1dFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW1hZ2UgKCVzKSBpcyBjb21wcmVzc2VkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbWFnZSAoJXMpIGlzIGVuY3J5cHRlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGNvbnZlcnQgcWNvdzIgaW1hZ2UgKCVzKSBpbnRvIHJhdyBpbWFnZSAoJXMpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MzkKKyMsIGZ1enp5Cittc2dpZCAiVGhlIC1jIG9wdGlvbiBvbmx5IHN1cHBvcnRlZCBpbiByYXcgbW9kZVxuIgorbXNnc3RyICIgLXQgc2XDp2VuZcSfaSBlMmZzY2snbsSxbiBidSBzw7xyw7xtw7xuZGUgZGVzdGVrbGVubWl5b3IuXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NDQKKyMsIGZ1enp5Cittc2dpZCAiVGhlIC1jIG9wdGlvbiBub3Qgc3VwcG9ydGVkIHdoZW4gd3JpdGluZyB0byBzdGRvdXRcbiIKK21zZ3N0ciAiIC10IHNlw6dlbmXEn2kgZTJmc2NrJ27EsW4gYnUgc8O8csO8bcO8bmRlIGRlc3Rla2xlbm1peW9yLlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjUxCisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgY2hlY2tfYnVmIgorbXNnc3RyICItIHRhbXBvbiBiZWxsZWsgYXlyxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9lMmltYWdlLmM6MTY1NworIywgZnV6enkKK21zZ2lkICJUaGUgLXAgb3B0aW9uIG9ubHkgc3VwcG9ydGVkIGluIHJhdyBtb2RlXG4iCittc2dzdHIgIiAtdCBzZcOnZW5lxJ9pIGUyZnNjayduxLFuIGJ1IHPDvHLDvG3DvG5kZSBkZXN0ZWtsZW5taXlvci5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY2NworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibG9ja3MgYWxyZWFkeSBjb250YWluZWQgdGhlIGRhdGEgdG8gYmUgY29waWVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmxhYmVsLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IG9wZW4gJXNcbiIKK21zZ3N0ciAiZTJsYWJlbDogJXMgYcOnxLFsYW3EsXlvclxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IHPDvHBlcmJsb2thIGVyacWfaWxlbWl5b3JcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3IgcmVhZGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IHPDvHBlcmJsb2sgb2t1bnVya2VuIGhhdGEgb2x1xZ90dVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBub3QgYW4gZXh0MiBmaWxlc3lzdGVtXG4iCittc2dzdHIgImUybGFiZWw6IGJpciBleHQyIGRvc3lhIHNpc3RlbWkgZGXEn2lsXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjk3IG1pc2MvdHVuZTJmcy5jOjIyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogbGFiZWwgdG9vIGxvbmcsIHRydW5jYXRpbmcuXG4iCittc2dzdHIgIlV5YXLEsTogZXRpa2V0IMOnb2sgdXp1biwga8SxcnDEsWzEsXlvci5cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2sgYWdhaW5cbiIKK21zZ3N0ciAiZTJsYWJlbDogc8O8cGVyYmxvxJ9hIHlpbmUgZXJpxZ9pbGVtZWRpXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciB3cml0aW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogc8O8cGVyYmxvxJ9hIHlhesSxbMSxcmtlbiBoYXRhIG9sdcWfdHVcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTE3IG1pc2MvdHVuZTJmcy5jOjg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogZTJsYWJlbCBkZXZpY2UgW25ld2xhYmVsXVxuIgorbXNnc3RyICIiCisiIFxuIgorIkt1bGxhbsSxbcSxOiBlMmxhYmVsIEFZR0lUIFtldGlrZXRdXG4iCisiQVlHSVQgYsO2bMO8bSBpc21pbmkgYXRhbWFrL29rdW1hayBpw6dpbiBrdWxsYW7EsWzEsXIuXG4iCisiXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIDx0cmFuc2FjdGlvbiBmaWxlPiA8ZmlsZXN5c3RlbT5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjUyCisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byByZWFkIHRoZSBmaWxlIHN5c3RlbSBkYXRhIFxuIgorbXNnc3RyICItIGRvc3lhIHNpc3RlbWkgdGFibG9sYXLEsSBheXLEsWxtYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9lMnVuZG8uYzo2MiBtaXNjL2UydW5kby5jOjgzIG1pc2MvZTJ1bmRvLmM6MTA4IG1pc2MvZTJ1bmRvLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfZmV0Y2ggJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBNb3VudCB0aW1lIGRpZG4ndCBtYXRjaCAldVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6ODkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gVVVJRCBkaWRuJ3QgbWF0Y2ggXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfb3BlbiAlc1xuIgorbXNnc3RyICIlcyBhw6fEsWzEsXJrZW4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIi0gJXMnaW4gYmHEn2zEsSBvbHVwIG9sbWFkxLHEn8SxIHNhcHRhbm1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1LiIKKworIzogbWlzYy9lMnVuZG8uYzoxNzUKK21zZ2lkICJlMnVuZG8gc2hvdWxkIG9ubHkgYmUgcnVuIG9uIHVubW91bnRlZCBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlc1xuIgorbXNnc3RyICItICVzIGHDp8SxbG1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2UydW5kby5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBsYXllZCB0cmFuc2FjdGlvbiBvZiBzaXplICV6ZCBhdCBsb2NhdGlvbiAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHdyaXRlICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGNvdWxkbid0IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIlVZQVJJOiAlcyBhw6fEsWxhbWFkxLE6ICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBiYWQgZm9ybWF0IG9uIGxpbmUgJWQgb2YgJXNcbiIKK21zZ3N0ciAiVVlBUkk6ICUyJHMgbmluICUxJGQuIHNhdMSxcsSxbmRhIGJpw6dlbSBoYXRhc8SxXG4iCisKKyM6IG1pc2MvZnNjay5jOjM3MAorIywgZnV6enkKK21zZ2lkICIiCisiV0FSTklORzogWW91ciAvZXRjL2ZzdGFiIGRvZXMgbm90IGNvbnRhaW4gdGhlIGZzY2sgcGFzc25vXG4iCisiXHRmaWVsZC4gIEkgd2lsbCBrbHVkZ2UgYXJvdW5kIHRoaW5ncyBmb3IgeW91LCBidXQgeW91XG4iCisiXHRzaG91bGQgZml4IHlvdXIgL2V0Yy9mc3RhYiBmaWxlIGFzIHNvb24gYXMgeW91IGNhbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiAqKipExLBLS0FUOiAvZXRjL2ZzdGFiIGRvc3lhbsSxemRhIGZzY2sgZ2XDp2nFnyBzYXnEsXPEsSAocGFzc25vKVxuIgorIiAgICAgICAgICAgIGFsYW7EsSAgYnVsdW5tdXlvci4gQnUgc2VmZXJsaWsgacWfbGVtIHlhcMSxbGFjYWssXG4iCisiICAgICAgICAgICAgYW5jYWsgZW4ga8Sxc2EgemFtYW5kYSAvZXRjL2ZzdGFiIGRvc3lhbsSxesSxXG4iCisiICAgICAgICAgICAgZMO8emVsdG1lbGlzaW5pei5cbiIKKyJcbiIKKworIzogbWlzYy9mc2NrLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6ICVzOiBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNjazogJXM6IHlva1xuIgorCisjOiBtaXNjL2ZzY2suYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIgorbXNnc3RyICIlczogYmVrbGl5b3I6IEJhxZ9rYSBhc3Qgc8O8cmXDpyB5b2s/IT9cbiIKKworIzogbWlzYy9mc2NrLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmcuLi4gJXMgZm9yIGRldmljZSAlcyBleGl0ZWQgd2l0aCBzaWduYWwgJWQuXG4iCittc2dzdHIgIlV5YXLEsS4uLiAlcyAlcyBheWfEsXTEsSBpw6dpbiAlZCBzaW55YWxpIGlsZSDDp8Sxa3TEsS5cbiIKKworIzogbWlzYy9mc2NrLmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzOiBzdGF0dXMgaXMgJXgsIHNob3VsZCBuZXZlciBoYXBwZW4uXG4iCittc2dzdHIgIiVzICVzOiBkdXJ1bSAleCwgYXNsYSBvbG1hbWFsxLF5ZMSxLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluaXNoZWQgd2l0aCAlcyAoZXhpdCBzdGF0dXMgJWQpXG4iCittc2dzdHIgIiVzIGlsZSBiaXR0aSAow6fEsWvEscWfIGR1cnVtdTogJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiVzOiBIYXRhICVkOiBmc2NrLiVzICVzIGnDp2luIMOnYWzEsXTEsXLEsWzEsXJrZW4gb2x1xZ90dS5cbiIKKworIzogbWlzYy9mc2NrLmM6NzQyCittc2dpZCAiIgorIkVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGUgZmlsZXN5c3RlbSB0eXBlcyBwYXNzZWQgdG8gLXQgbXVzdCBiZSBwcmVmaXhlZFxuIgorIndpdGggJ25vJyBvciAnIScuXG4iCittc2dzdHIgIiIKKyItdCBpbGUgaXN0ZXIgdMO8bSBkb3N5YSBzaXN0ZW1pIHTDvHJsZXJpIGJlbGlydGlsc2luIGlzdGVyIGJpciBkb3N5YSBzaXN0ZW1pXG4iCisidMO8csO8IGJlbGlydGlsbWVzaW4sIHlhICdubycgeWEgZGEgJyEnIMO2bmVraSBrdWxsYW7EsWxtYWzEsWTEsXIuXG4iCisKKyM6IG1pc2MvZnNjay5jOjc2MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlsZXN5c3RlbSB0eXBlc1xuIgorbXNnc3RyICJEb3N5YSBzaXN0ZW1pIHTDvHJsZXJpIGnDp2luIGJlbGxlayBheXLEsWxhbWFkxLFcbiIKKworIzogbWlzYy9mc2NrLmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogc2tpcHBpbmcgYmFkIGxpbmUgaW4gL2V0Yy9mc3RhYjogYmluZCBtb3VudCB3aXRoIG5vbnplcm8gZnNjayBwYXNzICIKKyJudW1iZXJcbiIKK21zZ3N0ciAiIgorIiVzOiAvZXRjL2ZzdGFiIGnDp2VyaXNpbmRla2kgYm96dWsgc2F0xLFyIGF0bGFuxLF5b3I6IHPEsWbEsXIgb2xtYXlhbiBmc2NrIGdlw6dpxZ8gIgorInNhecSxc8SxIGlsZSBiYcSfbGFtYSBhdGFtYXPEsVxuIgorCisjOiBtaXNjL2ZzY2suYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogY2Fubm90IGNoZWNrICVzOiBmc2NrLiVzIG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiAlcyBkZW5ldGxlbmVtaXlvcjogZnNjay4lcyB5b2tcbiIKKworIzogbWlzYy9mc2NrLmM6OTY3Cittc2dpZCAiQ2hlY2tpbmcgYWxsIGZpbGUgc3lzdGVtcy5cbiIKK21zZ3N0ciAiVMO8bSBkb3N5YSBzaXN0ZW1sZXJpIGRlbmV0bGVuaXlvci5cbiIKKworIzogbWlzYy9mc2NrLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICItLXdhaXRpbmctLSAocGFzcyAlZClcbiIKK21zZ3N0ciAiLS1iZWtsZW1lZGUtLSAoJWQuIGdlw6dpxZ8pXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNzgKK21zZ2lkICIiCisiVXNhZ2U6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZmQgXSBdIFstdCBmc3R5cGVdIFtmcy1vcHRpb25zXSBbZmlsZXN5cyAuLi5dXG4iCittc2dzdHIgIiIKKyJLdWxsYW7EsW3EsTogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGZzdHlwZV0gW2ZzLW9wdGlvbnNdICIKKyJbZmlsZXN5cyAuLi5dXG4iCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiJXM6IGF5Z8SxdCBzYXnEsXPEsSDDp29rIGZhemxhXG4iCisKKyM6IG1pc2MvZnNjay5jOjExNTMgbWlzYy9mc2NrLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIiVzOiBhcmfDvG1hbiBzYXnEsXPEsSBmYXpsYVxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWYWRsdl0gW2ZpbGVzLi4uXVxuIgorbXNnc3RyICIiCisiS3VsbGFuxLFtxLE6ICVzIFstUlZhZHZdIFtkb3N5YWxhci4uLl1cbiIKKyJcbiIKKyJEb3N5YWxhcsSxbiDDtnplbGxpa2xlcmluaSBsaXN0ZWxlci5cbiIKKyJcbiIKKyJTZcOnZW5la2xlcjpcbiIKKyIgICAtYSAgICAnLicgaWxlIGJhxZ9sYXlhbmxhciBkYWhpbCBkaXppbmxlcmluIGnDp2luZGVraSB0w7xtIGRvc3lhbGFyxLEgIgorImxpc3RlbGVyXG4iCisiICAgLWQgICAgZG9zeWFsYXIgZ2liaSBkaXppbmxlcmkgZGUgbGlzdGVsZXJcbiIKKyIgICAtUiAgICBkaXppbmxlciB2ZSBpw6dlcmlrbGVyaSBhcmTEscWfxLFrIG9sYXJhayBsaXN0ZWxlbmlyXG4iCisiICAgLVYgICAgc8O8csO8bSBiaWxnaWxlcmkgZ8O2c3RlcmlsaXJcbiIKKyIgICAtdiAgICBkb3N5YWxhcsSxbiBzw7xyw7xtL8O8cmV0aW0gbnVtYXJhbGFyxLFuxLEgbGlzdGVsZXJcbiIKKyJcbiIKKyLDh2V2aXJpIGhhdGFsYXLEsW7EsSA8Z251LXRyQGJlbGdlbGVyLm9yZz4gYWRyZXNpbmUgYmlsZGlyaW5pei5cbiIKKyJcbiIKKworIzogbWlzYy9sc2F0dHIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICItICVzIMO8emVyaW5kZSBiYXlyYWtsYXIgb2t1bnVya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9sc2F0dHIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIi0gJXMgw7x6ZXJpbmRlIHPDvHLDvG0gb2t1bnVya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9ta2UyZnMuYzoxMjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jfC1sIGZpbGVuYW1lXSBbLWIgYmxvY2stc2l6ZV0gWy1DIGNsdXN0ZXItc2l6ZV1cbiIKKyJcdFstaSBieXRlcy1wZXItaW5vZGVdIFstSSBpbm9kZS1zaXplXSBbLUogam91cm5hbC1vcHRpb25zXVxuIgorIlx0Wy1HIGZsZXgtZ3JvdXAtc2l6ZV0gWy1OIG51bWJlci1vZi1pbm9kZXNdXG4iCisiXHRbLW0gcmVzZXJ2ZWQtYmxvY2tzLXBlcmNlbnRhZ2VdIFstbyBjcmVhdG9yLW9zXVxuIgorIlx0Wy1nIGJsb2Nrcy1wZXItZ3JvdXBdIFstTCB2b2x1bWUtbGFiZWxdIFstTSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5XVxuIgorIlx0Wy1PIGZlYXR1cmVbLC4uLl1dIFstciBmcy1yZXZpc2lvbl0gWy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV1cbiIKKyJcdFstdCBmcy10eXBlXSBbLVQgdXNhZ2UtdHlwZSBdIFstVSBVVUlEXSBbLWpucXZERktTVl0gZGV2aWNlIFtibG9ja3MtIgorImNvdW50XVxuIgorbXNnc3RyICIiCisiS3VsbGFuxLFtxLE6ICVzIFtzZcOnZW5la2xlcl0gYXlnxLF0IFtibG9rLXNhecSxc8SxXVxuIgorIlxuIgorIkdlbmVsbGlrbGUgYmlyIGRpc2sgYsO2bMO8bcO8IMO8emVyaW5kZSBiaXIgZXh0MiBkb3N5YSBzaXN0ZW1pIG9sdcWfdHVydXIuXG4iCisiZXh0MyBkZSBkZXN0ZWtsZW5tacWfdGlyLlxuIgorIlxuIgorIlNlw6dlbmVrbGVyOlxuIgorIiAgIC1iIDEwMjR8MjA0OHw0MDk2ICAgICAgICAgZG9zeWEgc2lzdGVtaW5pbiBibG9rIHV6dW5sdcSfdSBiZWxpcnRpbGlyXG4iCisiICAgLWMgICAgICAgICAgICAgICAgICAgICAgICBzYWx0LW9rdW51ciBraXB0ZSBoYXRhbMSxIGJsb2tsYXIgYXJhbsSxclxuIgorIiAgIC1mIGFkxLFtLWJveXUgICAgICAgICAgICAgIGJ1IHPDvHLDvG1kZSBhZMSxbSBib3l1IGJsb2sgYm95dW5hIGXFn2l0dGlyXG4iCisiICAgLWcgaGVyLWdydXB0YWtpLWJsb2stc2F5xLFzxLFcbiIKKyIgICAtaSBkw7zEn8O8bS11enVubHXEn3UgICAgICAgICBib8WfIGJpciBkaXppbmluIGRpc2sgw7x6ZXJpbmRlIGthcGxheWFiaWxlY2XEn2lcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuIGvDvMOnw7xrIGFsYW4sIGJheXQgY2luc2luZGVuIHZlcmlsaXIuXG4iCisiICAgLWogICAgICAgICAgICAgICAgICAgICAgICBleHQzIGRvc3lhIHNpc3RlbWkgacOnaW4gZ8O8bmzDvGsgZG9zeWFzxLEgIgorIm9sdcWfdHVydXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1KIGlsZSBnw7xubMO8ayBkb3N5YXPEsW7EsW4gw7Z6ZWxsaWtsZXJpICIKKyJ2ZXJpbG1lenNlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3N5YSDDtm50YW7EsW1sxLEgw7Z6ZWxsaWtscmVsZSBvbHXFn3R1cnVsdXIuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBExLBLS0FUOiBMaW51eCDDp2VraXJkZcSfaW5kZSBleHQzIGRlc3RlxJ9pIHlva3NhXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXN0ZW0gZXh0MiBvbGFyYWsga3VsbGFuxLFsYWJpbGlyXG4iCisiICAgLUogZ8O8bmzDvGstc2XDp2VuZWtsZXJpICAgICBnw7xubMO8ayBzZcOnZW5la2xlcmkgYcWfYcSfxLFkYSB2ZXJpbG1pxZ90aXJcbiIKKyIgICAtbCBET1NZQSAgICAgICAgICAgICAgICAgIGhhdGFsxLEgYmxva2xhciBET1NZQWRhbiBva3VudXJcbiIKKyIgICAtTCBldGlrZXQgICAgICAgICAgICAgICAgIGRvc3lhIHNpc3RlbWluZSBiaXIgZXRpa2V0IGF0YXJcbiIKKyIgICAtbSB5ZWRlay1ibG9rLXnDvHpkZXNpICAgICByb290IGt1bGxhbsSxY8SxIGnDp2luIGF5csSxbGFuIHllZGVrIGJsb2tsYXLEsW5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHnDvHpkZXNpLiDDlm50YW7EsW1sxLEgZGXEn2VyaSAlJTUgdGlyXG4iCisiICAgLU0gc29uLWJhxJ9sYW5hbi1kaXppbiAgICAgZG9zeWEgc2lzdGVtaW5lIHNvbiBiYcSfbGFuYW4gZGl6aW4gYmVsaXJ0aWxpclxuIgorIiAgIC1OIGTDvMSfw7xtLXNhecSxc8SxICAgICAgICAgICBzaXN0ZW1kZWtpIHRvcGxhbSBkw7zEn8O8bSBzYXnEsXPEsSBiZWxpcnRpbGlyXG4iCisiICAgLW8gacWfbGV0aW0tc2lzdGVtaSAgICAgICAgZG9zeWEgc2lzdGVtaW5pbiAnY3JlYXRvciBvcycgYWxhbsSxbmEgIgorInlhesSxbGFjYWtcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlxJ9lci4gTm9ybWFsZGUgTGludXgndHVyLlxuIgorIiAgIC1PIMO2emVsbGlrWywuLi5dICAgICAgICAgIGJlbGlydGlsZW4gw7Z6ZWxsaWt0ZSBkb3N5YSBzaXN0ZW1pIG9sdcWfdHVydXIuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICDDlnplbGxpa2xlciBhxZ9hxJ/EsWRhIHZlcmlsbWnFn3Rpci5cbiIKKyIgICAtcSAgICAgICAgICAgICAgICAgICAgICAgIGnFn2xlbSBzxLFyYXPEsW5kYSBiaWxnaSB2ZXJpbG1lelxuIgorIiAgIC1yIGRvc3lhLXNpc3RlbWktc8O8csO8bcO8ICAgMS4yIMOnZWtpcmRla2xlciBkxLHFn8SxbmRhIMO2bnRhbsSxbWzEsSBkZcSfZXJpIDEgZGlyXG4iCisiICAgLVIgcmFpZF9zZcOnZW5la2xlcmkgICAgICAgYnUgc2XDp2VuZWtsZXIgacOnaW4gbWFuIHNheWZhc8SxbmEgYmFrxLFuxLF6XG4iCisiICAgLVMgICAgICAgICAgICAgICAgICAgICAgICBrdXJ0YXJtYSBhbWFjxLF5bGEgc2FkZWNlIHPDvHBlciBibG9rIHZlIGdydXBcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhbsSxbWxhecSxY8SxbGFyIHllbmlkZW4geWF6xLFsxLFyXG4iCisiICAgLXYgICAgICAgICAgICAgICAgICAgICAgICBpxZ9sZW0gc8SxcmFzxLFuZGEgYXlyxLFudMSxbMSxIGJpbGdpIHZlcmlsaXJcbiIKKyIgICAtViAgICAgICAgICAgICAgICAgICAgICAgIHPDvHLDvG0gYmlsZ2lsZXJpIGfDtnN0ZXJpbGlyIHZlIMOnxLFrYXJcbiIKKyJHw7xubMO8a2xlbWUgc2XDp2VuZWtsZXJpOlxuIgorIiAgICAgc2l6ZT1nw7xubMO8ay11enVubHXEn3UgICAgIEfDvG5sw7xrIGRvc3lhc8SxbsSxbiB1enVubHXEn3UgTUIgb2xhcmFrICIKKyJiZWxpcnRpbGlyXG4iCisiICAgICBkZXZpY2U9ZMSxxZ8tZ8O8bmzDvGstYXlnxLF0xLEgQmHFn2thIGJpciBheWfEsXQgw7x6ZXJpbmRla2kgZ8O8bmzDvGsgZG9zeWFzxLFuxLFuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3VsbGFuxLFsbWFzxLEgc2HEn2xhbsSxci5cbiIKKyJcbiIKKyLDlnplbGxpa2xlcjpcbiIKKyIgICAgIHNwYXJzZV9zdXBlciAgICBZZWRlayBzw7xwZXJibG9rbGFyxLFuIHNhecSxc8SxbsSxIHPEsW7EsXJsYW1ha3RhIGt1bGxhbsSxbMSxci5cbiIKKyIgICAgIGZpbGV0eXBlICAgICAgICBEaXppbiBrYXnEsXRsYXLEsW5kYSBkb3N5YSB0w7xyw7wgYmlsZ2lzaSBzYWtsYW7EsXIuXG4iCisiICAgICBoYXNfam91cm5hbCAgICAgLWogc2XDp2VuZcSfaSBpbGUgYXluxLEuIEJpciBleHQzIGfDvG5sw7xrIGRvc3lhc8SxICIKKyJvbHXFn3R1cnVyLlxuIgorIlxuIgorIsOHZXZpcmkgaGF0YWxhcsSxbsSxIDxnbnUtdHJAYmVsZ2VsZXIub3JnPiBhZHJlc2luZSBiaWxkaXJpbml6LlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJSdW5uaW5nIGNvbW1hbmQ6ICVzXG4iCittc2dzdHIgIsOHYWzEscWfYW4ga29tdXQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBydW4gJyVzJyIKK21zZ3N0ciAiLSAnJXMnIMOnYWzEscWfdMSxcsSxbMSxcmtlbiBvbGR1IgorCisjOiBtaXNjL21rZTJmcy5jOjI2MworbXNnaWQgIndoaWxlIHByb2Nlc3NpbmcgbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gcHJvZ3JhbSIKK21zZ3N0ciAiLSBoYXRhbMSxIGJsb2tsYXIgbGlzdGVzaSBpxZ9sZW5pcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVkIGluIHByaW1hcnkgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9yIGFyZWEgYmFkLlxuIgorbXNnc3RyICJCaXJpbmNpbCBzw7xwZXJibG9rL2dydXAgdGFuxLFtxLEgYWxhbsSxbmRha2kgYmxvayAlZCBoYXRhbMSxXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrcyAldSB0aHJvdWdoICV1IG11c3QgYmUgZ29vZCBpbiBvcmRlciB0byBidWlsZCBhIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJCaXIgZG9zeWEgc2lzdGVtaSBvbHXFn3R1cnVsdXJrZW4gJXUgZGVuICV1IHllIGthZGFyIG9sYW5cbiIKKyJibG9rbGFyIGhhdGFzxLF6IG9sbWFrIHpvcnVuZGFkxLFyLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI5NQorbXNnaWQgIkFib3J0aW5nLi4uLlxuIgorbXNnc3RyICLDh8Sxa8SxbMSxeW9yLi4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB0aGUgYmFja3VwIHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvcnMgYXQgYmxvY2sgJXUgY29udGFpblxuIgorIlx0YmFkIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlV5YXLEsTogQmxvayAldSBkZWtpIHllZGVrIHPDvHBlcmJsb2svZ3J1cCB0YW7EsW1sYXLEsVxuIgorIlx0aGF0YWzEsSBibG9rbGFyIGnDp2VyaXlvci5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzozMzQKK21zZ2lkICJ3aGlsZSBtYXJraW5nIGJhZCBibG9ja3MgYXMgdXNlZCIKK21zZ3N0ciAiLSBoYXRhbMSxIGJsb2tsYXIga3VsbGFuxLFsbcSxxZ8gb2xhcmFrIGltbGVuaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjM4NgorbXNnaWQgIldyaXRpbmcgaW5vZGUgdGFibGVzOiAiCittc2dzdHIgIkTDvMSfw7xtIHRhYmxvbGFyxLEgeWF6xLFsxLF5b3I6ICIKKworIzogbWlzYy9ta2UyZnMuYzo0MDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3Qgd3JpdGUgJWQgYmxvY2tzIGluIGlub2RlIHRhYmxlIHN0YXJ0aW5nIGF0ICVsbHU6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlMiR1IGRlIGJhxZ9sYXlhbiBkw7zEn8O8bSB0YWJsb3N1bmRha2kgJTEkZCBibG9rIHlhesSxbGFtYWTEsTogJTMkc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjQyMSBtaXNjL21rZTJmcy5jOjI0NzkgbWlzYy9ta2UyZnMuYzoyNzY0Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiYml0dGkgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0MzIKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyByb290IGRpciIKK21zZ3N0ciAiLSBrw7ZrIGRpemluIG9sdcWfdHVydWx1cmtlbiBoYXRhIgorCisjOiBtaXNjL21rZTJmcy5jOjQzOQorbXNnaWQgIndoaWxlIHJlYWRpbmcgcm9vdCBpbm9kZSIKK21zZ3N0ciAiLSBrw7ZrIGTDvMSfw7xtw7wgb2t1bnVya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9ta2UyZnMuYzo0NTEKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHJvb3QgaW5vZGUgb3duZXJzaGlwIgorbXNnc3RyICItIGvDtmsgZMO8xJ/DvG3DvG7DvG4gc2FoaWJpIGJlbGlybGVuaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjQ2OQorbXNnaWQgIndoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICItIC9sb3N0K2ZvdW5kIGRpemluaSBvbHXFn3R1cnVsdXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjQ3NgorbXNnaWQgIndoaWxlIGxvb2tpbmcgdXAgL2xvc3QrZm91bmQiCittc2dzdHIgIi0gL2xvc3QrZm91bmQgZGl6aW5lIGJha8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDg5Cittc2dpZCAid2hpbGUgZXhwYW5kaW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICItIC9sb3N0K2ZvdW5kIGRpemluaSBnZW5pxZ9sZXRpbGlya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9ta2UyZnMuYzo1MDQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAiLSBoYXRhbMSxIGJsb2sgZMO8xJ/DvG3DvCBiZWxpcmxlbmlya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9ta2UyZnMuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3V0IG9mIG1lbW9yeSBlcmFzaW5nIHNlY3RvcnMgJWQtJWRcbiIKK21zZ3N0ciAiJWQtJWQgYXJhc8SxbmRha2kgc2VrdMO2cmxlciBzaWxpbmlya2VuIGJlbGxlayB5ZXRtZWRpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrIDA6ICVzXG4iCittc2dzdHIgIlV5YXLEsTogYmxvayAwIG9rdW5hbWFkxLE6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQ6ICVzXG4iCittc2dzdHIgIlV5YXLEsTogJWQuIHNla3TDtnIgc2lsaW5lbWVkaTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzMKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICItIGfDvG1sw7xrIHN1cGVyYmxvxJ91IGlsa2xlbmRpcmlsaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjU4MQorbXNnaWQgIlplcm9pbmcgam91cm5hbCBkZXZpY2U6ICIKK21zZ3N0ciAiR8O8bmzDvGsgYXlnxLF0xLEgdGVtaXpsZW5peW9yOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTkzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGpvdXJuYWwgZGV2aWNlIChibG9jayAlbGx1LCBjb3VudCAlZCkiCittc2dzdHIgIi0gZ8O8bmzDvGsgYXlnxLF0xLEgdGVtaXpsZW5pcmtlbiAoYmxvayAldSwgJWQgYmxvaykgaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjYxMQorbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICItIGfDvG5sw7xrIHPDvHBlcmJsb8SfdSB5YXrEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjYyNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgZmlsZXN5c3RlbSB3aXRoICVsbHUgJWRrIGJsb2NrcyBhbmQgJXUgaW5vZGVzXG4iCittc2dzdHIgIiIKKyIlcyDDvHplcmluZGVraSBkb3N5YSBzaXN0ZW1pIMWfaW1kaSAldSBibG9rIHV6dW5sdWt0YS5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3YXJuaW5nOiAlbGx1IGJsb2NrcyB1bnVzZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJ1eWFyxLE6ICV1IGJsb2sga3VsbGFuxLFsbWFtxLHFny5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBsYWJlbD0lc1xuIgorbXNnc3RyICJEb3N5YSBzaXN0ZW1pIGlzbWkgPSAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY0MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiT1MgdHlwZTogJXNcbiIKK21zZ3N0ciAixLDFn2wuIFNpc3QuIHTDvHLDvDogIgorCisjOiBtaXNjL21rZTJmcy5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIkJsb2sgYm95dSA9ICV1IChnw7xubMO8ayBrYXlkxLEgPSAldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNsdXN0ZXIgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJCbG9rIGJveXUgPSAldSAoZ8O8bmzDvGsga2F5ZMSxID0gJXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyYWdtZW50IHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiQWTEsW1sYW1hIGJveXUgPSAldSAoZ8O8bmzDvGsga2F5ZMSxID0gJXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0cmlkZT0ldSBibG9ja3MsIFN0cmlwZSB3aWR0aD0ldSBibG9ja3NcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjY1NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzLCAlbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIldSBkw7zEn8O8bSwgJXUgYmxva1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJWxsdSBibG9ja3MgKCUyLjJmJSUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlclxuIgorbXNnc3RyICIldSBibG9rICglJSUyLjJmKSBzw7xwZXIga3VsbGFuxLFjxLEgacOnaW4gYXlyxLFsZMSxXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0IGRhdGEgYmxvY2s9JXVcbiIKK21zZ3N0ciAixLBsayB2ZXJpIGJsb8SfdSA9ICV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJvb3QgZGlyZWN0b3J5IG93bmVyPSV1OiV1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBmaWxlc3lzdGVtIGJsb2Nrcz0lbHVcbiIKK21zZ3N0ciAiQXphbWkgZG9zeWFzaXN0ZW1pIGJsb8SfdSBzYXnEsXPEsSA9ICVsdVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cHNcbiIKK21zZ3N0ciAiJXUgYmxvayBncnVidVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIldSBibG9rIGdydWJ1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBjbHVzdGVycyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiR3J1cCBiYcWfxLFuYSAldSBibG9rIHZlICV1IHNla21lXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiR3J1cCBiYcWfxLFuYSAldSBibG9rIHZlICV1IHNla21lXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiZ3J1cCBiYcWfxLFuYSAldSBkw7zEn8O8bVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBVVUlEOiAlc1xuIgorbXNnc3RyICJEb3N5YSBzaXN0ZW1pIGlzbWkgPSAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OQorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgIlPDvHBlcmJsb2tsYXLEsW4gYnVsdW5kdcSfdSBibG9rbGFyOiIKKworIzogbWlzYy9ta2UyZnMuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgJy1PIDY0Yml0J1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbXVzdCBiZSBiZWZvcmUgJ3Jlc2l6ZT0ldSdcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjc4NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkZXNjX3NpemU6ICclcydcbiIKK21zZ3N0ciAiZMO8xJ/DvG0gdXp1bmx1xJ91IGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzo3OTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2Zmc2V0OiAlc1xuIgorbXNnc3RyICJkw7zEn8O8bSB1enVubHXEn3UgaGF0YWzEsSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjgxMiBtaXNjL3R1bmUyZnMuYzoxMjM5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCittc2dzdHIgInPEsW5hbWEgxZ9hYmxvbnUgZ2XDp2Vyc2l6OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgyNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAjIG9mIGJhY2t1cCBzdXBlcmJsb2NrczogJXNcbiIKK21zZ3N0ciAiR2XDp2Vyc2l6IHPDvHBlciBibG9rIHBhcmFtZXRyZXNpOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg0OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIidzdHJpZGUnIHBhcmFtZXRyZXNpIGdlw6dlcnNpejogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpcGUtd2lkdGggcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJHZcOnZXJzaXogw6dpemdpIGdlbmnFn2xpayBwYXJhbWV0cmVzaTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXNpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJZZW5pZGVuIGJveXV0bGFtYSBwYXJhbWV0cmVzaSBnZcOnZXJzaXo6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODkzCittc2dpZCAiVGhlIHJlc2l6ZSBtYXhpbXVtIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBmaWxlc3lzdGVtIHNpemUuXG4iCittc2dzdHIgIiIKKyJBemFtaSB5ZW5pZGVuIGJveXV0bGFtYSBkZcSfZXJpIGRvc3lhIHNpc3RlbWkgYm95dXR1bmRhbiBiw7x5w7xrIG9sbWFsxLFkxLFyLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjkxNworbXNnaWQgIk9uLWxpbmUgcmVzaXppbmcgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorIlNhdMSxcmRhIGJveXV0bGFuZMSxcm1hLCAwLiBnw7Z6ZGVuIGdlw6dpcm1lZGVraSBkb3N5YSBzaXN0ZW1sZXJpbmRlICIKKyJkZXN0ZWtsZW5tZW1la3RlZGlyXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTQ0IG1pc2MvbWtlMmZzLmM6OTUzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJvb3Rfb3duZXI6ICclcydcbiIKK21zZ3N0ciAiR2XDp2Vyc2l6IGRvc3lhIHNpc3RlbWkgc2XDp2VuZcSfaSBiZWxpcnRpZGk6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHF1b3RhdHlwZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIidzdHJpZGUnIHBhcmFtZXRyZXNpIGdlw6dlcnNpejogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5ODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRtbXBfdXBkYXRlX2ludGVydmFsPTxpbnRlcnZhbD5cbiIKKyJcdG51bV9iYWNrdXBfc2I9PDB8MXwyPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGRhdGEgY2h1bmsgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqIGRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0b2Zmc2V0PTxvZmZzZXQgdG8gY3JlYXRlIHRoZSBmaWxlIHN5c3RlbT5cbiIKKyJcdHJlc2l6ZT08cmVzaXplIG1heGltdW0gc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRwYWNrZWRfbWV0YV9ibG9ja3M9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRyb290X3VpZD08dWlkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0cm9vdF9naWQ9PGdpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdGRpc2NhcmRcbiIKKyJcdG5vZGlzY2FyZFxuIgorIlx0cXVvdGF0eXBlPTx1c3IgT1IgZ3JwPlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQmVsaXJ0aWxlbiBzZcOnZW5la2xlciBoYXRhbMSxLlxuIgorIlxuIgorIkVrIHNlw6dlbmVrbGVyIHZpcmfDvGxsZXJsZSBheXLEsWxhcmFrIGJlbGlydGlsaXIuIEJpciBzZcOnZW5lxJ9lIGRlxJ9lclxuIgorImJlbGlydGlsZWNla3NlIGJ1ICc9JyBpxZ9hcmV0aW5kZW4gc29ucmEgeWF6xLFsxLFyLlxuIgorIlxuIgorIkdlw6dlcmxpIGVrIHNlw6dlbmVrbGVyOlxuIgorIlx0c3RyaWRlPTxibG9rIGNpbnNpbmRlbiBhZMSxbSB1enVubHXEn3U+XG4iCisiXHRyZXNpemU9PHllbmlkZW4gYm95dXRsYW5hY2HEn8SxIGJsb2sgc2F5xLFzxLE+XG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogUkFJRCBzdHJpcGUtd2lkdGggJXUgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2Ygc3RyaWRlICV1LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIG1rZTJmcyBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIm1rZTJmcyB5YXDEsWxhbmTEsXJtYSBkb3N5YXPEsW5kYSAoJXMsICVkLnNhdMSxcmRhKSBzw7Z6ZGl6aW1pIGhhdGFzxLFcbiIKKyJcdCVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA2OCBtaXNjL3R1bmUyZnMuYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmaWxlc3lzdGVtIG9wdGlvbiBzZXQ6ICVzXG4iCittc2dzdHIgIkdlw6dlcnNpeiBkb3N5YSBzaXN0ZW1pIHNlw6dlbmXEn2k6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA4MCBtaXNjL3R1bmUyZnMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtb3VudCBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJHZcOnZXJzaXogZG9zeWEgc2lzdGVtaSBzZcOnZW5lxJ9pIGJlbGlydGlkaTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJZb3VyIG1rZTJmcy5jb25mIGZpbGUgZG9lcyBub3QgZGVmaW5lIHRoZSAlcyBmaWxlc3lzdGVtIHR5cGUuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjI0Cittc2dpZCAiIgorIllvdSBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgYW4gdXBkYXRlZCBta2UyZnMuY29uZiBmaWxlLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyOAorIywgZnV6enkKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICLDh8Sxa8SxbMSxeW9yLi4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGZzX3R5cGUgJXMgaXMgbm90IGRlZmluZWQgaW4gbWtlMmZzLmNvbmZcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE0NDkKKyMsIGZ1enp5Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgUEFUSC5cbiIKK21zZ3N0ciAiRG9zeWEgc2lzdGVtaSB0w7xybGVyaSBpw6dpbiBiZWxsZWsgYXlyxLFsYW1hZMSxXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IChlcnJvcjogJWxkKS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9jayBzaXplIC0gJXMiCittc2dzdHIgImJsb2sgdXp1bmx1xJ91IGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgdXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIKK21zZ3N0ciAiVXlhcsSxOiBibG9rIHV6dW5sdcSfdSAlZCBiaXLDp29rIHNpc3RlbWRlIGt1bGxhbsSxbWTEscWfxLFkxLFyLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2x1c3RlciBzaXplIC0gJXMiCittc2dzdHIgImJsb2sgdXp1bmx1xJ91IGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTUzCittc2dpZCAiJy1SJyBpcyBkZXByZWNhdGVkLCB1c2UgJy1FJyBpbnN0ZWFkIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU2NQorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBibG9ja3MgcGVyIGdyb3VwIgorbXNnc3RyICJHcnVwIGJhxZ/EsW5hIGJsb2sgc2F5xLFzxLEga3VyYWxkxLHFn8SxIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NzAKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIG11c3QgYmUgbXVsdGlwbGUgb2YgOCIKK21zZ3N0ciAiZ3J1cCBiYcWfxLFuYSBibG9rIHNhecSxc8SxIDgnaW4ga2F0bGFyxLEgb2xtYWzEsWTEsXIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU3OAorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgZmxleF9iZyBzaXplIgorbXNnc3RyICJHcnVwIGJhxZ/EsW5hIGJsb2sgc2F5xLFzxLEga3VyYWxkxLHFn8SxIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODQKK21zZ2lkICJmbGV4X2JnIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZsZXhfYmcgc2l6ZSAoJWx1KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyXjMxIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHJhdGlvICVzIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAiZMO8xJ/DvG0gb3JhbsSxICVzIGhhdGFsxLEgKGVuIGF6ICVkL2VuIMOnb2sgJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgImTDvMSfw7xtIHV6dW5sdcSfdSBoYXRhbMSxIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyMworbXNnaWQgIiIKKyJXYXJuaW5nOiAtSyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZSAnLUUgIgorIm5vZGlzY2FyZCcgZXh0ZW5kZWQgb3B0aW9uIGluc3RlYWQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjM0Cittc2dpZCAiaW4gbWFsbG9jIGZvciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorbXNnc3RyICItIGJhZF9ibG9ja3NfZmlsZW5hbWUgacOnaW4gYmVsbGVrIGF5csSxbMSxcmtlbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlcyIKK21zZ3N0ciAieWVkZWsgYmxvayB5w7x6ZGVzaSBoYXRhbMSxIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtIGlub2RlcyAtICVzIgorbXNnc3RyICJkw7zEn8O8bSBzYXnEsXPEsSBoYXRhbMSxIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gbGV2ZWwgLSAlcyIKK21zZ3N0ciAiZGXEn2nFn2lrbGlrIHNldml5ZXNpIGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNjg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIHJldmlzaW9uICVkIgorbXNnc3RyICIiCisiXG4iCisiXHRnw7xubMO8ayBvbHXFn3R1cnVsbWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY5OAorIywgZnV6enkKK21zZ2lkICJUaGUgLXQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiLW8geWFsbsSxeiBiaXIga2VyZSBrdWxsYW7EsWxhYmlsaXIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTcwNgorIywgZnV6enkKK21zZ2lkICJUaGUgLVQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiLW8geWFsbsSxeiBiaXIga2VyZSBrdWxsYW7EsWxhYmlsaXIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc1OSBtaXNjL21rZTJmcy5jOjI4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBkZXZpY2UgJXNcbiIKK21zZ3N0ciAiLSAlcyBnw7xubMO8ayBheWfEsXTEsSBhw6fEsWxtYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGFcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZGV2IGJsb2Nrc2l6ZSAoJWQpIHNtYWxsZXIgdGhhbiBtaW5pbXVtIGJsb2Nrc2l6ZSAlZFxuIgorbXNnc3RyICJHw7xubMO8ayBheWfEsXTEsW7EsW4gYmxvayBib3l1ICglZCkgYXNnYXJpIGJsb2sgYm95dW5kYW4gKCVkKSBrw7zDp8O8a1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIGpvdXJuYWwgZGV2aWNlJ3MgYmxvY2tzaXplOiAlZFxuIgorbXNnc3RyICIlcydlIGfDvG5sw7xrIGVrbGVuaXlvcjogIgorCisjOiBtaXNjL21rZTJmcy5jOjE3ODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2tzICclcycgb24gZGV2aWNlICclcyciCittc2dzdHIgImJsb2sgc2F5xLFzxLEgaGF0YWzEsSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MDQKK21zZ2lkICJmaWxlc3lzdGVtIgorbXNnc3RyICJkb3N5YSBzaXN0ZW1pIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MTcgcmVzaXplL21haW4uYzozOTUKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gc2l6ZSIKK21zZ3N0ciAiLSBkb3N5YSBzaXN0ZW1pIHV6dW5sdcSfdSBzYXB0YW5tYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9ta2UyZnMuYzoxODIzCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKyJBeWfEsXQgYWxhbsSxIHNhcHRhbmFtYWTEsTsgZG9zeWEgc2lzdGVtaSBpw6dpblxuIgorImJpciB1enVubHVrIGJlbGlydG1lbGlzaW5pelxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MzAKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorIkF5Z8SxdHRha2kgYWxhbiBzxLFmxLFyIG9sYXJhayByYXBvcmxhbmTEsS4gIFlhIGRlxJ9pxZ90aXJpbGVuIGJpciBkaXNrIGLDtmzDvG3DvFxuIgorImhhbGEgbWXFn2d1bCB2ZXlhIGt1bGxhbsSxbWRhIG9sZHXEn3VuZGFuIGZkaXNrIMOnYWzEscWfdMSxcsSxbGTEsWt0YW4gc29ucmFcbiIKKyJkaXNrIGLDtmzDvG1sZW1lIHRhYmxvc3UgeWVuaWRlbiBva3VuYW1hZMSxIHlhIGRhIHlhbmzEscWfIGLDtmzDvG0gYmVsaXJ0aWxkaS5cbiIKKyJEaXNrIGLDtmzDvG1sZW1lIHRhYmxvc3VudW4geWVuaWRlbiBva3VubWFzxLEgacOnaW4gc2lzdGVtaW5pemkgeWVuaWRlblxuIgorImJhxZ9sYXRtYWzEsXPEsW7EsXouXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg0NworbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICJEb3N5YSBzaXN0ZW1pbmluIHV6dW5sdcSfdSBnw7Zyw7xuw7xyZGVraSB1enVubHVrdGFuIGLDvHnDvGsuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NjcKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZnMgdHlwZXMgbGlzdFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkwOAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgaGFyZHdhcmUgc2VjdG9yIHNpemUiCittc2dzdHIgIi0gZG9uYW7EsW1zYWwgc2VrdMO2ciBib3l1IHNhcHRhbm1heWEgw6dhbMSxxZ/EsWzEsXJrZW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkxNAorIywgZnV6enkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHBoeXNpY2FsIHNlY3RvciBzaXplIgorbXNnc3RyICItIGRvbmFuxLFtc2FsIHNla3TDtnIgYm95dSBzYXB0YW5tYXlhIMOnYWzEscWfxLFsxLFya2VuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NDYKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgc2V0dGluZyBibG9ja3NpemU7IHRvbyBzbWFsbCBmb3IgZGV2aWNlXG4iCittc2dzdHIgIi0geWVuaWRlbiBib3l1dGxhbWEgacOnaW4gYmxva2xhciB5ZWRla2xlbmlya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9ta2UyZnMuYzoxOTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzcGVjaWZpZWQgYmxvY2tzaXplICVkIGlzIGxlc3MgdGhhbiBkZXZpY2UgcGh5c2ljYWwgc2VjdG9yc2l6ZSAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFNpemUgb2YgZGV2aWNlICgweCVsbHggYmxvY2tzKSAlcyB0b28gYmlnIHRvIGJlIGV4cHJlc3NlZFxuIgorIlx0aW4gMzIgYml0cyB1c2luZyBhIGJsb2Nrc2l6ZSBvZiAlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5OTEKK21zZ2lkICJmc190eXBlcyBmb3IgbWtlMmZzLmNvbmYgcmVzb2x1dGlvbjogIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk5OAorbXNnaWQgIkZpbGVzeXN0ZW0gZmVhdHVyZXMgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorIkRvc3lhc2lzdGVtaSDDtnplbGxpa2xlcmkgMCByZXZpenlvbmx1IGRvc3lhc2lzdGVtbGVyaW5kZSBkZXN0ZWtsZW5taXlvclxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMDYKK21zZ2lkICJTcGFyc2Ugc3VwZXJibG9ja3Mgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMTgKK21zZ2lkICJKb3VybmFscyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVsZiIKK21zZ3N0ciAieWVkZWsgYmxvayB5w7x6ZGVzaSBoYXRhbMSxIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJFeHRlbnRzIE1VU1QgYmUgZW5hYmxlZCBmb3IgYSA2NC1iaXQgZmlsZXN5c3RlbS4gIFBhc3MgLU8gZXh0ZW50cyB0byAiCisicmVjdGlmeS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNjkKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGNsdXN0ZXIgc2l6ZSBtYXkgbm90IGJlIHNtYWxsZXIgdGhhbiB0aGUgYmxvY2sgc2l6ZS5cbiIKK21zZ3N0ciAiIgorIkF6YW1pIHllbmlkZW4gYm95dXRsYW1hIGRlxJ9lcmkgZG9zeWEgc2lzdGVtaSBib3l1dHVuZGFuIGLDvHnDvGsgb2xtYWzEsWTEsXIuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA3NQorbXNnaWQgInNwZWNpZnlpbmcgYSBjbHVzdGVyIHNpemUgcmVxdWlyZXMgdGhlIGJpZ2FsbG9jIGZlYXR1cmUiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFVuYWJsZSB0byBnZXQgZGV2aWNlIGdlb21ldHJ5IGZvciAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbGlnbm1lbnQgaXMgb2Zmc2V0IGJ5ICVsdSBieXRlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgbWF5IHJlc3VsdCBpbiB2ZXJ5IHBvb3IgcGVyZm9ybWFuY2UsIChyZSktcGFydGl0aW9uaW5nIHN1Z2dlc3RlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpIgorbXNnc3RyICIlZCBiYXl0bMSxayBibG9rbGFyIHNpc3RlbSBpw6dpbiDDp29rIGLDvHnDvGsgKGVuIMOnb2sgJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjIxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6ICVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAobWF4ICVkKSwgZm9yY2VkIHRvIGNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJVeWFyxLE6ICVkIGJheXRsxLFrIGJsb2tsYXIgc2lzdGVtIGnDp2luIMOnb2sgYsO8ecO8ayAoZW4gw6dvayAlZCksIGFtYSBkZXZhbSAiCisiZWRpbGl5b3JcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTgwCittc2dpZCAiQ2FuJ3Qgc3VwcG9ydCBiaWdhbGxvYyBmZWF0dXJlIHdpdGhvdXQgZXh0ZW50cyBmZWF0dXJlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE4NworbXNnaWQgIiIKKyJUaGUgcmVzaXplX2lub2RlIGFuZCBtZXRhX2JnIGZlYXR1cmVzIGFyZSBub3QgY29tcGF0aWJsZS5cbiIKKyJUaGV5IGNhbiBub3QgYmUgYm90aCBlbmFibGVkIHNpbXVsdGFuZW91c2x5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE5NgorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgYmlnYWxsb2MgZmVhdHVyZSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuIgorIlNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIwNworbXNnaWQgInJlc2VydmVkIG9ubGluZSByZXNpemUgYmxvY2tzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLXNwYXJzZSBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisic8O8cGVyYmxvayBhemFsdG1hc8SxIHV5Z3VsYW5tYW3EscWfIGRvc3lhIHNpc3RlbWluZGVcbiIKKyJ5ZWRlayBibG9rbGFyIGt1bGxhbsSxbGFyYWsgeWVuaWRlbiBib3l1dGxhbWEgZGVzdGVrbGVubWl5b3IuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMTYKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIKK21zZ3N0ciAiR3J1cCBiYcWfxLFuYSBibG9rIHNhecSxc8SxIGthcHNhbWTEscWfxLEiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI0MAorbXNnaWQgIkZsZXhfYmcgZmVhdHVyZSBub3QgZW5hYmxlZCwgc28gZmxleF9iZyBzaXplIG1heSBub3QgYmUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgJWQgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJkw7zEn8O8bSB1enVubHXEn3UgJWQgaGF0YWzEsSAoZW4gYXogJWQvZW4gw6dvayAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCByYWlzZSBpbm9kZSByYXRpbz8iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHNwZWNpZnkgPCAyXjMyIGlub2RlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImlub2RlX3NpemUgKCV1KSAqIGlub2Rlc19jb3VudCAoJXUpIHRvbyBiaWcgZm9yIGFcbiIKKyJcdGZpbGVzeXN0ZW0gd2l0aCAlbGx1IGJsb2Nrcywgc3BlY2lmeSBoaWdoZXIgaW5vZGVfcmF0aW8gKC1pKVxuIgorIlx0b3IgbG93ZXIgaW5vZGUgY291bnQgKC1OKS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzeXN0ZW07IHRoaXMgY2FuIGJlIHVuZG9uZSB1c2luZyB0aGUgY29tbWFuZDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDMyCisjLCBmdXp6eQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzZXR1cCB1bmRvIGZpbGVcbiIKK21zZ3N0ciAiIgorIlxuIgorIlx0Z8O8bmzDvGsgZG9zeWFzxLEgb2x1xZ90dXJ1bG1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjI0NTgKK21zZ2lkICJEaXNjYXJkaW5nIGRldmljZSBibG9ja3M6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NzQKK21zZ2lkICJmYWlsZWQgLSAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTk2Cittc2dpZCAid2hpbGUgc2V0dGluZyB1cCBzdXBlcmJsb2NrIgorbXNnc3RyICItIHPDvHBlcmJsb2sgYXlhcmxhbsSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYxMgorbXNnaWQgIkRpc2NhcmQgc3VjY2VlZGVkIGFuZCB3aWxsIHJldHVybiAwcyAtIHNraXBwaW5nIGlub2RlIHRhYmxlIHdpcGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcyAtICVzIgorbXNnc3RyICJiaWxpbm1leWVuIGnFn2xldGltIHNpc3RlbWkgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNzUyCisjLCBmdXp6eQorbXNnaWQgIkFsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAiCittc2dzdHIgIkTDvMSfw7xtIHRhYmxvbGFyxLEgeWF6xLFsxLF5b3I6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNzYwCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGFsbG9jYXRlIGZpbGVzeXN0ZW0gdGFibGVzIgorbXNnc3RyICItIGRvc3lhIHNpc3RlbWkgdGFibG9sYXLEsSBheXLEsWxtYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9ta2UyZnMuYzoyNzY5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgIi0gYmxvayBiaXRlxZ9sZW1pIHlhesSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBibG9jayAlbGx1IGF0IGVuZCBvZiBmaWxlc3lzdGVtIgorbXNnc3RyICItIGRvc3lhIHNpc3RlbWluaW4gc29udW5kYSBibG9rICV1IHPEsWbEsXJsYW7EsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjI4MjYKK21zZ2lkICJ3aGlsZSByZXNlcnZpbmcgYmxvY2tzIGZvciBvbmxpbmUgcmVzaXplIgorbXNnc3RyICItIHllbmlkZW4gYm95dXRsYW1hIGnDp2luIGJsb2tsYXIgeWVkZWtsZW5pcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgzOCBtaXNjL3R1bmUyZnMuYzo3MTIKK21zZ2lkICJqb3VybmFsIgorbXNnc3RyICJnw7xubMO8ayIKKworIzogbWlzYy9ta2UyZnMuYzoyODUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBqb3VybmFsIHRvIGRldmljZSAlczogIgorbXNnc3RyICIlcydlIGfDvG5sw7xrIGVrbGVuaXlvcjogIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlx0Z8O8bmzDvGsgJXMgZSBla2xlbm1leWUgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjI4NjIgbWlzYy9ta2UyZnMuYzoyODkzIG1pc2MvdHVuZTJmcy5jOjc0MSBtaXNjL3R1bmUyZnMuYzo3NjAKK21zZ2lkICJkb25lXG4iCittc2dzdHIgInRhbWFtXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg2OQorbXNnaWQgIlNraXBwaW5nIGpvdXJuYWwgY3JlYXRpb24gaW4gc3VwZXItb25seSBtb2RlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyODgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICgldSBibG9ja3MpOiAiCittc2dzdHIgIkfDvG5sw7xrIG9sdcWfdHVydWx1eW9yICglZCBibG9rKTogIgorCisjOiBtaXNjL21rZTJmcy5jOjI4ODkKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwiCittc2dzdHIgIiIKKyJcbiIKKyJcdGfDvG5sw7xrIG9sdcWfdHVydWxtYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAxIG1pc2MvdHVuZTJmcy5jOjUxNgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWQgc2Vjb25kcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MjMKK21zZ2lkICJXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICIKK21zZ3N0ciAiU8O8cGVyYmxva2xhcsSxbiB2ZSBkb3N5YSBzaXN0ZW1pbmluIGhlc2FwIGJpbGdpbGVyaSB5YXrEsWzEsXlvcjogIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MzAKK21zZ2lkICIiCisiXG4iCisiV2FybmluZywgaGFkIHRyb3VibGUgd3JpdGluZyBvdXQgc3VwZXJibG9ja3MuIgorbXNnc3RyICIiCisiXG4iCisiVXlhcsSxLCBzw7xwZXJibG9rbGFyxLFuIHRhbWFtxLFuYSB5YXptYSBzb3J1bnUgdmFyLiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTMyCittc2dpZCAiIgorImRvbmVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImJpdHRpXG4iCisiXG4iCisKKyM6IG1pc2MvbWtsb3N0K2ZvdW5kLmM6NTAKK21zZ2lkICJVc2FnZTogbWtsb3N0K2ZvdW5kXG4iCittc2dzdHIgIkt1bGxhbsSxbcSxOiBta2xvc3QrZm91bmRcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjQxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICAlcyBkZXZpY2UuLi5cbiIKKyJcbiIKKyJQcmludHMgb3V0IHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGVhY2ggZ2l2ZW4gZGV2aWNlLlxuIgorIkZvciBleGFtcGxlOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorbXNnc3RyICIiCisiS3VsbGFuxLFtxLE6ICVzIDxheWfEsXQxPiA8YXlnxLF0Mj4gPGF5Z8SxdDM+XG4iCisiXG4iCisiQmlyIGF5Z8SxdCBrw7xtZXNpIGnDp2luIGRpc2sgYsO2bMO8bWxlbWUgYmlsZ2lsZXJpbmkgZ8O2c3RlcmlyXG4iCisiQnUgdXlndWxhbWFuxLFuIMOnb2sga3VsbGFuxLFsYW4gYmnDp2ltaTpcbiIKKyJcbiIKKyJcdCVzIC9kZXYvaGRhP1xuIgorIlxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAiZTJsYWJlbDogJXMgYcOnxLFsYW3EsXlvclxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBnZW9tZXRyeSBvZiAlczogJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgc2l6ZSBvZiAlczogJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIHN0YXJ0PSU4ZCBzaXplPSU4bHUgZW5kPSU4ZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExMgorbXNnaWQgIlBsZWFzZSBydW4gZTJmc2NrIG9uIHRoZSBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICJMw7x0ZmVuIGRvc3lhIHNpc3RlbWluZGUgZTJmc2NrIMOnYWzEscWfdMSxcsSxbi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYyBtYXhfbW91bnRzX2NvdW50XSBbLWUgZXJyb3JzX2JlaGF2aW9yXSBbLWcgZ3JvdXBdXG4iCisiXHRbLWkgaW50ZXJ2YWxbZHxtfHddXSBbLWpdIFstSiBqb3VybmFsX29wdGlvbnNdIFstbF1cbiIKKyJcdFstbSByZXNlcnZlZF9ibG9ja3NfcGVyY2VudF0gWy1vIFteXW1vdW50X29wdGlvbnNbLC4uLl1dIFstcCAiCisibW1wX3VwZGF0ZV9pbnRlcnZhbF1cbiIKKyJcdFstciByZXNlcnZlZF9ibG9ja3NfY291bnRdIFstdSB1c2VyXSBbLUMgbW91bnRfY291bnRdIFstTCB2b2x1bWVfbGFiZWxdXG4iCisiXHRbLU0gbGFzdF9tb3VudGVkX2Rpcl0gWy1PIFteXWZlYXR1cmVbLC4uLl1dXG4iCisiXHRbLVEgcXVvdGFfb3B0aW9uc11cbiIKKyJcdFstRSBleHRlbmRlZC1vcHRpb25bLC4uLl1dIFstVCBsYXN0X2NoZWNrX3RpbWVdIFstVSBVVUlEXVxuIgorIlx0WyAtSSBuZXdfaW5vZGVfc2l6ZSBdIGRldmljZVxuIgorbXNnc3RyICIiCisiS3VsbGFuxLFtxLE6ICVzIFtzZcOnZW5la2xlcl0gYXlnxLF0XG4iCisiXG4iCisiRG9zeWEgc2lzdGVtaW5pbiBheWFybGFuYWJpbGlyIHBhcmFtZXRyZWxlcmluaSBkZcSfacWfdGlybWVrdGUga3VsbGFuxLFsxLFyLlxuIgorIlxuIgorIlNlw6dlbmVrbGVyOlxuIgorIiAgIC1jIFNBWUkgICAgICAgICAgICAgICAgxLBraSBkb3N5YXNpc3RlbWkgZGVuZXRpbWkgYXJhc8SxbmRhIGRvc3lhICIKKyJzaXN0ZW1pbmluXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICBlbiDDp29rIGthw6cgZGVmYSBiYcSfbGFuYWJpbGVjZcSfaSBiZWxpcnRpbGlyLlxuIgorIiAgIC1DIFNBWUkgICAgICAgICAgICAgICAgLWMgaWxlIGF5bsSxXG4iCisiICAgLWUgaGF0YS1kYXZyYW7EscWfxLEgICAgICBIYXRhIG9sdcWfdHXEn3VuZGEgbmUgeWFwxLFsYWNhxJ/EsSBiZWxpcnRpbGlyLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJzogaGF0YSB5b2tzYXnEsWzEsXIuICdyZW1vdW50LXJvJzogZG9zeWFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgIHNpc3RlbWkgc2FsdC1va3VudXIgb2xhcmFrIGJhxJ9sYW7EsXIuICdwYW5pYyc6XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICDDp2VraXJkZWsgcGFuacSfaSBvbHXFn3VyLlxuIgorIiAgIC1nIGdydXAgICAgICAgICAgICAgICAgWWVkZWsgYmxva2xhcsSxbiBoYW5naSBrdWxsYW7EsWPEsSBncnVidW5hICIKKyJheXLEsWxhY2HEn8SxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICBiZWxpcnRpbGlyLiBHcnVwIGlzbWkgeWEgZGEgbnVtYXJhc8SxIHZlcmlsZWJpbGlyLlxuIgorIiAgIC11IGt1bGxhbsSxY8SxICAgICAgICAgICBZZWRlayBibG9rbGFyxLFuIGhhbmdpIGt1bGxhbsSxY8SxeWEgYXlyxLFsYWNhxJ/EsVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgYmVsaXJ0aWxpci4gS3VsbC4gaXNtaSB5YSBkYSBudW1hcmFzxLEgIgorInZlcmlsZWJpbGlyLlxuIgorIiAgIC1pIHPDvHJlW2R8bXx3XSAgICAgICAgIMSwa2kgZGVuZXRpbSBhcmFzxLFuZGFraSBlbiBiw7x5w7xrIHPDvHJlIGJlbGlydGlsaXIuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICBHw7xuKGQpLCBheShtKSwgaGFmdGEodykgb2xhcmFrIHZlcmlsZWJpbGlyLiAwIGlsZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgemFtYW5hIGJhxJ9sxLEgZGVuZXRpbSBheWFyxLEga2FsZMSxcsSxbMSxci5cbiIKKyIgICAtaiAgICAgICAgICAgICAgICAgICAgIERvc3lhIHNpc3RlbWluZSBnw7xubMO8ayBkb3N5YXPEsSBla2xlbmlyLiAtSlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgc2XDp2VuZcSfaSBpbGUgc2XDp2VuZWtsZXIgYmVsaXJ0aWxtZXpzZSBkb3N5YVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgw7ZudGFuxLFtbMSxIMO2emVsbGlrbGVybGUgb2x1xZ90dXJ1bHVyLlxuIgorIiAgIC1KIHNlw6dlbmVrWywuLi5dICAgICAgIEHFn2HEn8SxZGEgYcOnxLFrbGFtYWxhcsSxIHZlcmlsZW4gc2XDp2VuZWtsZXIgYnVyYWRhXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJnw7xsbGVybGUgYXlyxLFsYXJhayB2ZXJpbGViaWxpci5cbiIKKyIgICAtbCAgICAgICAgICAgICAgICAgICAgIERvc3lhIHNpc3RlbWluaW4gw7Z6ZWxsaWtsZXJpIGxpc3RlbGVuaXIuXG4iCisiICAgLUwgZXRpa2V0ICAgICAgICAgICAgICBEb3N5YSBzaXN0ZW1pbmluIGLDtmzDvG0gaXNtaSBiZWxpcnRpbGlyLlxuIgorIiAgIC1tIHllZGVrLWJsb2stecO8emRlc2kgIFllZGVrIGJsb2tsYXLEsW4gecO8emRlc2kgYmVsaXJ0aWxpci4gw5ZudGFuxLFtbMSxICUlNVxuIgorIiAgIC1NIETEsFrEsE4gICAgICAgICAgICAgICBEb3N5YSBzaXN0ZW1pbmUgc29uIGJhxJ9sYW5hbiBkaXppbiBiZWxpcnRpbGlyLlxuIgorIiAgIC1vIFteXXNlw6dlbmVrWywuLi5dICAgIEJhxJ9sYW1hIHNlw6dlbmVrbGVyaVxuIgorIiAgIC1PIFteXcO2emVsbGlrWywuLi5dICAgIEHFn2HEn8SxZGEgYcOnxLFrbGFtYWxhcsSxIHZlcmlsZW4gw7Z6ZWxsaWtsZXIgYnVyYWRhXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJnw7xsbGVybGUgYXlyxLFsYXJhayB2ZXJpbGViaWxpci5cbiIKKyIgICAtciB5ZWRlay1ibG9rLXNhecSxc8SxICAgWWVkZWsgYmxva2xhcsSxbiBzYXnEsXPEsSBiZWxpcnRpbGlyLlxuIgorIiAgIC1zIFswfDFdICAgICAgICAgICAgICAgw4dvayBiw7x5w7xrIGRvc3lhIHNpc3RlbWxlcmluZGUgeWVyIGthemFuZMSxcsSxci5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgIC1PIHNwYXJzZV9zdXBlciBpbGUgYXluxLFkxLFyLlxuIgorIiAgIC1UIHNvbi1kZW5ldGltLXphbWFuxLEgIEJldGlrbGVybGUga3VsbGFubWFrIGnDp2luZGlyXG4iCisiICAgLVUgVVVJRHxjbGVhcnxyYW5kb218dGltZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgRG9zeWEgc2lzdGVtaW5pbiBldnJlbnNlbCB0ZWsga2ltbGnEn2kgdmV5YSAoVVVJRClcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmdpIHnDtm50ZW1sZSBiZWxpcmxlbmVjZcSfaSBiZWxpcnRpbGlyLidjbGVhcicgIgorImlsZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgc2lsaW5pcjsgJ3JhbmRvbScgcmFzZ2VsZSwgJ3RpbWUnIHphbWFuYSBnw7ZyZSBiaXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbWxpayDDvHJldGlyLlxuIgorIlxuIgorIkfDvG5sw7xrbGVtZSBzZcOnZW5la2xlcmk6XG4iCisiICAgICBzaXplPWfDvG5sw7xrLXV6dW5sdcSfdSAgICAgR8O8bmzDvGsgZG9zeWFzxLFuxLFuIHV6dW5sdcSfdSBNQiBvbGFyYWsgIgorImJlbGlydGlsaXJcbiIKKyIgICAgIGRldmljZT1kxLHFny1nw7xubMO8ay1heWfEsXTEsSBCYcWfa2EgYmlyIGF5Z8SxdCDDvHplcmluZGVraSBnw7xubMO8ayBkb3N5YXPEsW7EsW5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrdWxsYW7EsWxtYXPEsSBzYcSfbGFuxLFyLlxuIgorIlxuIgorIsOWemVsbGlrbGVyOlxuIgorIideJyDDtm5la2kgaWxlIHZlcmlsZW4gw7Z6ZWxsaWtsZXIgc8O8cGVyYmxvxJ9hIGVza2lsZXIga2FsZMSxcsSxbGFyYWsgeWF6xLFsxLFyLlxuIgorIicrJyDDtm5la2l5bGUgeWEgZGEgw7ZuZWtzaXogdmVyaWxlbiDDtnplbGxpa2xlciBzw7xwZXJibG9rdGFraSDDtnplbGxpa2xlcmVcbiIKKyJla2xlbmlyLlxuIgorIiAgICAgc3BhcnNlX3N1cGVyICAgIFllZGVrIHPDvHBlcmJsb2tsYXLEsW4gc2F5xLFzxLFuxLEgc8SxbsSxcmxhbWFrdGEga3VsbGFuxLFsxLFyLlxuIgorIiAgICAgZmlsZXR5cGUgICAgICAgIERpemluIGthecSxdGxhcsSxbmRhIGRvc3lhIHTDvHLDvCBiaWxnaXNpIHNha2xhbsSxci5cbiIKKyIgICAgIGhhc19qb3VybmFsICAgICAtaiBzZcOnZW5lxJ9pIGlsZSBheW7EsS4gQmlyIGV4dDMgZ8O8bmzDvGsgZG9zeWFzxLEgIgorIm9sdcWfdHVydXIuXG4iCisiXG4iCisiw4dldmlyaSBoYXRhbGFyxLFuxLEgPGdudS10ckBiZWxnZWxlci5vcmc+IGFkcmVzaW5lIGJpbGRpcmluaXouXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMworbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQhXG4iCittc2dzdHIgIkfDvG5sw7xrIHPDvHBlcmJsb8SfdSB5b2shXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI2MQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIGV4dGVybmFsIGpvdXJuYWwiCittc2dzdHIgIi0gZMSxxZ8gZ8O8bmzDvGsgYcOnxLFsbWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI2NyBtaXNjL3R1bmUyZnMuYzoxOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIlcyBiaXIgZ8O8bmzDvGtsZW1lIGF5Z8SxdMSxIGRlxJ9pbC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6Mjc3IG1pc2MvdHVuZTJmcy5jOjE5NzQKK21zZ2lkICJGaWxlc3lzdGVtJ3MgVVVJRCBub3QgZm91bmQgb24gam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJHw7xubMO8a2xlbWUgYXlnxLF0xLFuZGEgZG9zeWEgc2lzdGVtaW5pbiBldnJlbnNlbCB0ZWsga2ltbGnEn2kgKFVVSUQpIHlvay5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MzAxCittc2dpZCAiIgorIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MzEwCittc2dpZCAiSm91cm5hbCByZW1vdmVkXG4iCittc2dzdHIgIkfDvG5sw7xrIHNpbGluZGlcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MzU0Cittc2dpZCAid2hpbGUgcmVhZGluZyBiaXRtYXBzIgorbXNnc3RyICItIGJpdGXFn2xlbWxlciBva3VudXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL3R1bmUyZnMuYzozNjIKK21zZ2lkICJ3aGlsZSBjbGVhcmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICItIGfDvG5sw7xrIGTDvMSfw7xtw7wgdGVtaXpsZW5pcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM3MworbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAiLSBnw7xubMO8ayBkw7zEn8O8bcO8IHlhesSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQwNSBtaXNjL3R1bmUyZnMuYzo0MTgKK21zZ2lkICIoYW5kIHJlYm9vdCBhZnRlcndhcmRzISlcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiJyVzJyBkb3N5YSBzaXN0ZW1pIMO2emVsbGnEn2luaSB0ZW1pemxlbWUgZGVzdGVrbGVubWl5b3IuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDY3CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgaGFzX2pvdXJuYWwgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJoYXNfam91cm5hbCBiYXlyYcSfxLEgc2FkZWNlIGRvc3lhIHNpc3RlbWkgYmHEn2zEsSBkZcSfaWxrZW4geWEgZGEgc2FsdC1va3VudXJcbiIKKyJiYcSfbMSxeWtlbiB0ZW1pemxlbmViaWxpci5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDc2Cittc2dpZCAiIgorIlRoZSBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldC4gIFBsZWFzZSBydW4gZTJmc2NrIGJlZm9yZSBjbGVhcmluZ1xuIgorInRoZSBoYXNfam91cm5hbCBmbGFnLlxuIgorbXNnc3RyICIiCisibmVlZHNfcmVjb3ZlcnkgYmF5cmHEn8SxIGdlcmVraXlvci4gTMO8dGZlbiBoYXNfam91cm5hbCBiYXlyYcSfxLFcbiIKKyJ0ZW1pemxlbm1lZGVuIMO2bmNlIGUyZnNjayDDp2FsxLHFn3TEsXLEsW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ5NQorbXNnaWQgIiIKKyJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnc3BhcnNlX3N1cGVyJyBub3Qgc3VwcG9ydGVkXG4iCisiZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIG1ldGFfYmcgZmVhdHVyZSBlbmFibGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUwOAorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW4ndFxuIgorImJlIHNldCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIG9yXG4iCisicmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiaGFzX2pvdXJuYWwgYmF5cmHEn8SxIHNhZGVjZSBkb3N5YSBzaXN0ZW1pIGJhxJ9sxLEgZGXEn2lsa2VuIHlhIGRhIHNhbHQtb2t1bnVyXG4iCisiYmHEn2zEsXlrZW4gdGVtaXpsZW5lYmlsaXIuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGhhcyBiZWVuIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWRzLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUzNQorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbm5vdFxuIgorImJlIGRpc2FibGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIHJlYWRvbmx5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU0MworIywgZnV6enkKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIGJpdG1hcHNcbiIKK21zZ3N0ciAiLSBiaXRlxZ9sZW1sZXIgb2t1bnVya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy90dW5lMmZzLmM6NTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hZ2ljIG51bWJlciBpbiBNTVAgYmxvY2sgZG9lcyBub3QgbWF0Y2guIGV4cGVjdGVkOiAleCwgYWN0dWFsOiAleFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1NworIywgZnV6enkKK21zZ2lkICJ3aGlsZSByZWFkaW5nIE1NUCBibG9jay4iCittc2dzdHIgIi0gaGF0YWzEsSBibG9rbGFyIGTDvMSfw7xtw7wgb2t1bm1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL3R1bmUyZnMuYzo1ODkKK21zZ2lkICIiCisiQ2xlYXJpbmcgdGhlIGZsZXhfYmcgZmxhZyB3b3VsZCBjYXVzZSB0aGUgdGhlIGZpbGVzeXN0ZW0gdG8gYmVcbiIKKyJpbmNvbnNpc3RlbnQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NjAwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgaHVnZV9maWxlIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiaGFzX2pvdXJuYWwgYmF5cmHEn8SxIHNhZGVjZSBkb3N5YSBzaXN0ZW1pIGJhxJ9sxLEgZGXEn2lsa2VuIHlhIGRhIHNhbHQtb2t1bnVyXG4iCisiYmHEn2zEsXlrZW4gdGVtaXpsZW5lYmlsaXIuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY2MAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiAnXnF1b3RhJyBvcHRpb24gb3ZlcnJpZGVzICctUSdhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NzA1Cittc2dpZCAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgYSBqb3VybmFsLlxuIgorbXNnc3RyICJEb3N5YSBzaXN0ZW1pbmRlIGJpciBnw7xubMO8ayBkb3N5YXPEsSB6YXRlbiB2YXIuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIG9uICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcdCVzIMO8emVyaW5kZWtpIGfDvG5sw7xrIGHDp8SxbG1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIG9uIGRldmljZSAlczogIgorbXNnc3RyICIlcyDDvHplcmluZGUgZ8O8bmzDvGsgZG9zeWFzxLEgb2x1xZ90dXJ1bHV5b3I6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGFkZGluZyBmaWxlc3lzdGVtIHRvIGpvdXJuYWwgb24gJXMiCittc2dzdHIgIi0gJXMgw7x6ZXJpbmRla2kgZ8O8bmzDvGsgZG9zeWFzxLFuYSBkb3N5YSBzaXN0ZW1pIGVrbGVuaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL3R1bmUyZnMuYzo3NDMKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIGlub2RlOiAiCittc2dzdHIgIkfDvG5sw7xrIGTDvMSfw7xtw7wgb2x1xZ90dXJ1bHV5b3I6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NzU3Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiCittc2dzdHIgIiIKKyJcbiIKKyJcdGfDvG5sw7xrIGRvc3lhc8SxIG9sdcWfdHVydWxtYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy90dW5lMmZzLmM6ODMyCisjLCBmdXp6eQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBxdW90YSBvcHRpb25zIVxuIgorbXNnc3RyICJTZcOnZW5la2xlcmkgw6fDtnrDvG1sZW1layBpw6dpbiBiZWxsZWsgYXlyxLFsYW1hZMSxIVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4NTQKK21zZ2lkICIiCisiXG4iCisiQmFkIHF1b3RhIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkZvbGxvd2luZyB2YWxpZCBxdW90YSBvcHRpb25zIGFyZSBhdmFpbGFibGUgKHBhc3MgYnkgc2VwYXJhdGluZyB3aXRoICIKKyJjb21tYSk6XG4iCisiXHRbXl11c3JxdW90YVxuIgorIlx0W15dZ3JwcXVvdGFcbiIKKyJcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcGFyc2UgZGF0ZS90aW1lIHNwZWNpZmllcjogJXMiCittc2dzdHIgIlRhcmloL3phbWFuIGJlbGlydGVjaSDDp8O2esO8bWxlbmVtZWRpOiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTQyIG1pc2MvdHVuZTJmcy5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbW91bnRzIGNvdW50IC0gJXMiCittc2dzdHIgImJhxJ9sYW1hIHNhecSxc8SxIGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBlcnJvciBiZWhhdmlvciAtICVzIgorbXNnc3RyICJoYXRhIGRhdnJhbsSxxZ/EsSBoYXRhbMSxIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2lkL2dyb3VwIG5hbWUgLSAlcyIKK21zZ3N0ciAiZ3J1cCBpc21pL251bWFyYXPEsSBoYXRhbMSxIC0lcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW50ZXJ2YWwgLSAlcyIKK21zZ3N0ciAic8O8cmUgaGF0YWzEsSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9jayByYXRpbyAtICVzIgorbXNnc3RyICJ5ZWRlayBibG9rIG9yYW7EsSBoYXRhbMSxIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNzUKK21zZ2lkICItbyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiLW8geWFsbsSxeiBiaXIga2VyZSBrdWxsYW7EsWxhYmlsaXIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwODQKK21zZ2lkICItTyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiLU8geWFsbsSxeiBiaXIga2VyZSBrdWxsYW7EsWxhYmlsaXIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrcyBjb3VudCAtICVzIgorbXNnc3RyICJ5ZWRlayBibG9rIHNhecSxc8SxIGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdWlkL3VzZXIgbmFtZSAtICVzIgorbXNnc3RyICJrdWxsYW7EsWPEsSBpc21pL251bWFyYXPEsSBoYXRhbMSxIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgImTDvMSfw7xtIHV6dW5sdcSfdSBoYXRhbMSxIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5vZGUgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1tcF91cGRhdGVfaW50ZXJ2YWwgdG9vIGJpZzogJWx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI1MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kXG4iCittc2dpZF9wbHVyYWwgIiIKKyJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHJbMF0gIkVuIGZhemxhIGJhxJ9sYW1hIHNhecSxc8SxICVkIG9sYXJhayBiZWxpcmxlbml5b3JcbiIKK21zZ3N0clsxXSAiRW4gZmF6bGEgYmHEn2xhbWEgc2F5xLFzxLEgJWQgb2xhcmFrIGJlbGlybGVuaXlvclxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpZGU6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaXBlLXdpZHRoOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaGFzaCBhbGdvcml0aG06ICVzXG4iCittc2dzdHIgIidzdHJpZGUnIHBhcmFtZXRyZXNpIGdlw6dlcnNpejogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gdG8gJXMgKCVkKVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMzEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNoIGFsZ29yaXRobT5cbiIKKyJcdG1vdW50X29wdHM9PGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucz5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBjaHVuayBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZV93aWR0aD08UkFJRCBzdHJpZGUqZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorbXNnc3RyICIiCisiXG4iCisiQmVsaXJ0aWxlbiBzZcOnZW5la2xlciBoYXRhbMSxLlxuIgorIlxuIgorIkVrIHNlw6dlbmVrbGVyIHZpcmfDvGxsZXJsZSBheXLEsWxhcmFrIGJlbGlydGlsaXIuIEJpciBzZcOnZW5lxJ9lIGRlxJ9lclxuIgorImJlbGlydGlsZWNla3NlIGJ1ICc9JyBpxZ9hcmV0aW5kZW4gc29ucmEgeWF6xLFsxLFyLlxuIgorIlxuIgorIkdlw6dlcmxpIGVrIHNlw6dlbmVrbGVyOlxuIgorIlx0c3RyaWRlPTxibG9rIGNpbnNpbmRlbiBhZMSxbSB1enVubHXEn3U+XG4iCisiXHRyZXNpemU9PHllbmlkZW4gYm95dXRsYW5hY2HEn8SxIGJsb2sgc2F5xLFzxLE+XG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3OTgKKyMsIGZ1enp5Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgaW5vZGUgYml0bWFwXG4iCittc2dzdHIgIi0gYml0ZcWfbGVtbGVyIG9rdW51cmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MDMKKyMsIGZ1enp5Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgYmxvY2sgYml0bWFwXG4iCittc2dzdHIgImTDvMSfw7xtIHZlIGJsb2sgYml0ZcWfbGVtbGVyaSBva3VudXlvciIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyMCByZXNpemUvcmVzaXplMmZzLmM6OTMxCittc2dpZCAiYmxvY2tzIHRvIGJlIG1vdmVkIgorbXNnc3RyICJ0YcWfxLFuYWNhayBibG9rbGFyIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODIzCittc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrIGJpdG1hcCB3aGVuIGluY3JlYXNpbmcgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjkKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGluY3JlYXNlIGlub2RlIHNpemUgXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgzNAorIywgZnV6enkKK21zZ2lkICJGYWlsZWQgdG8gcmVsb2NhdGUgYmxvY2tzIGR1cmluZyBpbm9kZSByZXNpemUgXG4iCittc2dzdHIgIi0geWVuaWRlbiBib3l1dGxhbWEgacOnaW4gYmxva2xhciB5ZWRla2xlbmlya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy90dW5lMmZzLmM6MTg2NgorbXNnaWQgIiIKKyJFcnJvciBpbiByZXNpemluZyB0aGUgaW5vZGUgc2l6ZS5cbiIKKyJSdW4gZTJ1bmRvIHRvIHVuZG8gdGhlIGZpbGUgc3lzdGVtIGNoYW5nZXMuIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4OTMKKyMsIGZ1enp5Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZGIgZmlsZW5hbWVcbiIKK21zZ3N0ciAiRG9zeWEgc2lzdGVtaSB0w7xybGVyaSBpw6dpbiBiZWxsZWsgYXlyxLFsYW1hZMSxXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZWxldGUgJXMiCittc2dzdHIgIi0gJXMgeWVuaWRlbiBib3l1dGxhbmTEsXLEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyB1bmRvIHRoZSB0dW5lMmZzIG9wZXJhdGlvbiBwbGVhc2UgcnVuIHRoZSBjb21tYW5kXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBibG9jayBtYWdpYyBpcyBiYWQuIFRyeSB0byBmaXggaXQgYnkgcnVubmluZzpcbiIKKyInZTJmc2NrIC1mICVzJ1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGlub2RlIHNpemUgaXMgYWxyZWFkeSAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDgxCisjLCBmdXp6eQorbXNnaWQgIlNocmlua2luZyBpbm9kZSBzaXplIGlzIG5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiJyVzJyBkb3N5YSBzaXN0ZW1pIMO2emVsbGnEn2luaSB0ZW1pemxlbWUgZGVzdGVrbGVubWl5b3IuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaW5vZGUgc2l6ZSAlbHUgKG1heCAlZClcbiIKK21zZ3N0ciAiZMO8xJ/DvG0gdXp1bmx1xJ91ICVkIGhhdGFsxLEgKGVuIGF6ICVkL2VuIMOnb2sgJWQpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbWF4aW1hbCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICJFbiBmYXpsYSBiYcSfbGFtYSBzYXnEsXPEsSAlZCBvbGFyYWsgYmVsaXJsZW5peW9yXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjdXJyZW50IG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIsWeaW1kaWtpIGJhxJ9sYW1hIHNhecSxc8SxICVkIG9sYXJhayBiZWxpcmxlbml5b3JcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGVycm9yIGJlaGF2aW9yIHRvICVkXG4iCittc2dzdHIgIkhhdGEgZGF2cmFuxLHFn8SxICVkIG9sYXJhayBiZWxpcmxlbml5b3JcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBnaWQgdG8gJWx1XG4iCittc2dzdHIgIlllZGVrIGJsb2tsYXLEsW4gZ3J1cCBudW1hcmFzxLEgJWx1IG9sYXJhayBiZWxpcmxlbml5b3JcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgaXMgdG9vIGJpZyAoJWx1KSIKK21zZ3N0ciAiRGVuZXRpbWxlciBhcmFzxLFuZGFraSBzw7xyZSAlbHUgc2FuaXllIG9sYXJhayBiZWxpcmxlbml5b3JcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGludGVydmFsIGJldHdlZW4gY2hlY2tzIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHIgIkRlbmV0aW1sZXIgYXJhc8SxbmRha2kgc8O8cmUgJWx1IHNhbml5ZSBvbGFyYWsgYmVsaXJsZW5peW9yXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnRhZ2UgdG8gJWclJSAoJWxsdSBibG9ja3MpXG4iCittc2dzdHIgIlllZGVrIGJsb2tsYXLEsW4gecO8emRlc2kgJSUlZyAoJXUgYmxvaykgb2xhcmFrIGJlbGlybGVuaXlvclxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MgY291bnQgaXMgdG9vIGJpZyAoJWxsdSkiCittc2dzdHIgInllZGVrIGF5csSxbG3EscWfIGJsb2sgc2F5xLFzxLEgw6dvayBiw7x5w7xrICglbHUpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTgxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgIlllZGVrIGJsb2sgc2F5xLFzxLEgJWx1IG9sYXJhayBiZWxpcmxlbml5b3JcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4NworbXNnaWQgIiIKKyJcbiIKKyJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBzcGFyc2Ugc3VwZXJibG9ja3MuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEb3N5YSBzaXN0ZW1pbmRla2kgc8O8cGVyYmxva2xhciB6YXRlbiBhemFsdMSxbG3EscWfLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTkxCittc2dpZCAiIgorIlxuIgorIlNldHRpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZFxuIgorImZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBtZXRhX2JnIGZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIHNldC4gICVzIgorbXNnc3RyICIiCisiXG4iCisiU8O8cGVyYmxvayBhemFsdG1hIGJheXJhxJ/EsSBrb251bGR1LiAgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDcKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkNsZWFyaW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiclcycgZG9zeWEgc2lzdGVtaSDDtnplbGxpxJ9pbmkgdGVtaXpsZW1lIGRlc3Rla2xlbm1peW9yLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdGltZSBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0byAlc1xuIgorbXNnc3RyICJEb3N5YSBzaXN0ZW1pbmluIHNvbiBkZW5ldGltIHphbWFuxLEgJXMgeWFwxLFsxLF5b3JcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyB1aWQgdG8gJWx1XG4iCittc2dzdHIgIkF5csSxbGFuIGJsb2tsYXLEsW4ga3VsbGFuxLFjxLEgbnVtYXJhc8SxICVsdSBvbGFyYWsgYXlhcmxhbsSxeW9yXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNTMKK21zZ2lkICJFcnJvciBpbiB1c2luZyBjbGVhcl9tbXAuIEl0IG11c3QgYmUgdXNlZCB3aXRoIC1mXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI3MQorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIHF1b3RhIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorImhhc19qb3VybmFsIGJheXJhxJ/EsSBzYWRlY2UgZG9zeWEgc2lzdGVtaSBiYcSfbMSxIGRlxJ9pbGtlbiB5YSBkYSBzYWx0LW9rdW51clxuIgorImJhxJ9sxLF5a2VuIHRlbWl6bGVuZWJpbGlyLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjkyCisjLCBmdXp6eQorbXNnaWQgIlRoZSBVVUlEIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIiIKKyJoYXNfam91cm5hbCBiYXlyYcSfxLEgc2FkZWNlIGRvc3lhIHNpc3RlbWkgYmHEn2zEsSBkZcSfaWxrZW4geWEgZGEgc2FsdC1va3VudXJcbiIKKyJiYcSfbMSxeWtlbiB0ZW1pemxlbmViaWxpci5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjMyMgorbXNnaWQgIkludmFsaWQgVVVJRCBmb3JtYXRcbiIKK21zZ3N0ciAiR2XDp2Vyc2l6IFVVSUQgYmnDp2VtaVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzM3CisjLCBmdXp6eQorbXNnaWQgIk5lZWQgdG8gdXBkYXRlIGpvdXJuYWwgc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiZ8O8bmzDvGsgZG9zeWFzxLEgc3VwZXIgYmxvxJ91IG9rdW51eW9yXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNTgKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGlub2RlIHNpemUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorImhhc19qb3VybmFsIGJheXJhxJ/EsSBzYWRlY2UgZG9zeWEgc2lzdGVtaSBiYcSfbMSxIGRlxJ9pbGtlbiB5YSBkYSBzYWx0LW9rdW51clxuIgorImJhxJ9sxLF5a2VuIHRlbWl6bGVuZWJpbGlyLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzY2Cittc2dpZCAiIgorIkNoYW5naW5nIHRoZSBpbm9kZSBzaXplIG5vdCBzdXBwb3J0ZWQgZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIGZsZXhfYmdcbiIKKyJmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM3OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbm9kZSBzaXplICVsdVxuIgorbXNnc3RyICJkw7zEn8O8bSB1enVubHXEn3UgaGF0YWzEsSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzgyCisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICItIGTDvMSfw7xtIHRhcmFtYXPEsSBiYcWfbGF0xLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy90dW5lMmZzLmM6MjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlkZSBzaXplIHRvICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlwZSB3aWR0aCB0byAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI0MDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zIHRvICclcydcbiIKK21zZ3N0ciAixZ5pbWRpa2kgYmHEn2xhbWEgc2F5xLFzxLEgJWQgb2xhcmFrIGJlbGlybGVuaXlvclxuIgorCisjOiBtaXNjL3V0aWwuYzo5MworbXNnaWQgIjxwcm9jZWVkaW5nPlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjk3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQcm9jZWVkIGFueXdheSAob3Igd2FpdCAlZCBzZWNvbmRzKSA/ICh5LG4pICIKK21zZ3N0ciAiWWluZSBkZSBkZXZhbSBlZGlsc2luIG1pPyAoZS9oKSAiCisKKyM6IG1pc2MvdXRpbC5jOjEwMQorbXNnaWQgIlByb2NlZWQgYW55d2F5PyAoeSxuKSAiCittc2dzdHIgIllpbmUgZGUgZGV2YW0gZWRpbHNpbiBtaT8gKGUvaCkgIgorCisjOiBtaXNjL3V0aWwuYzoxMzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlx0bGFzdCBtb3VudGVkIG9uICVzIG9uICVzIgorbXNnc3RyICJiYcSfbGFtYSBzYXnEsXPEsSBoYXRhbMSxIC0gJXMiCisKKyM6IG1pc2MvdXRpbC5jOjEzNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vdW50ZWQgb24gJXMiCittc2dzdHIgImJhxJ9sYW1hIHNhecSxc8SxIGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy91dGlsLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0Y3JlYXRlZCBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vZGlmaWVkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGb3VuZCBhICVzIHBhcnRpdGlvbiB0YWJsZSBpbiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSAlcyBkb2VzIG5vdCBleGlzdCBhbmQgbm8gc2l6ZSB3YXMgc3BlY2lmaWVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjIxMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgcmVndWxhciBmaWxlICVzXG4iCittc2dzdHIgIm9sYcSfYW4gZG9zeWEiCisKKyM6IG1pc2MvdXRpbC5jOjIxMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgImUybGFiZWw6ICVzIGHDp8SxbGFtxLF5b3JcbiIKKworIzogbWlzYy91dGlsLmM6MjE2Cittc2dpZCAiIgorIlxuIgorIlRoZSBkZXZpY2UgYXBwYXJlbnRseSBkb2VzIG5vdCBleGlzdDsgZGlkIHlvdSBzcGVjaWZ5IGl0IGNvcnJlY3RseT9cbiIKK21zZ3N0ciAiIgorIlxuIgorIkF5Z8SxdCBnw7Zyw7xubcO8eW9yOyBkb8SfcnUgYmVsaXJ0dGnEn2luaXplIGVtaW4gbWlzaW5pej9cbiIKKworIzogbWlzYy91dGlsLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGJsb2NrIHNwZWNpYWwgZGV2aWNlLlxuIgorbXNnc3RyICIlcyBibG9rIMO2emVsbGlrbGkgYmlyIGF5Z8SxdCBkZcSfaWwuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI2MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbSBsYWJlbGxlZCAnJXMnXG4iCittc2dzdHIgIiBoYXRhbMSxIGJpciBkb3N5YSBzaXN0ZW1pIGnDp2VyaXlvciIKKworIzogbWlzYy91dGlsLmM6MjYzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyBjb250YWlucyBhICVzIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgIiBoYXRhbMSxIGJpciBkb3N5YSBzaXN0ZW1pIGnDp2VyaXlvciIKKworIzogbWlzYy91dGlsLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGVudGlyZSBkZXZpY2UsIG5vdCBqdXN0IG9uZSBwYXJ0aXRpb24hXG4iCittc2dzdHIgIiVzIGRpc2tpbiB0YW1hbcSxISBCaXIgZGlzayBiw7Zsw7xtw7wgZGXEn2lsIVxuIgorCisjOiBtaXNjL3V0aWwuYzozMjMKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAibWtlMmZzIG4nb2x1cnNhIG9sc3VuIMOnYWzEscWfdMSxcsSxbGFjYWsuIMSwbsWfYWxsYWggL2V0Yy9tdGFiIHlhbmzEscWfdMSxci5cbiIKKworIzogbWlzYy91dGlsLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IG1ha2UgYSAlcyBoZXJlIVxuIgorbXNnc3RyICJidXJhZGEgYmlyICVzIHlhcMSxbG1heWFjYWshXG4iCisKKyM6IG1pc2MvdXRpbC5jOjMzNQorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICJta2UyZnMgbmUgb2x1cnNhIG9sc3VuIMOnYWzEscWfdMSxcsSxbGFjYWsuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjM1MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBqb3VybmFsIG9wdGlvbnMhXG4iCittc2dzdHIgIkfDvG5sw7xrIHNlw6dlbmVrbGVyaSBpw6dpbiBiZWxsZWsgYXlyxLFsYW1hZMSxIVxuIgorCisjOiBtaXNjL3V0aWwuYzozNzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3QgZmluZCBqb3VybmFsIGRldmljZSBtYXRjaGluZyAlc1xuIgorbXNnc3RyICJHw7xubMO8ayBkb3N5YXPEsSBzw7xwZXJibG/En3UgdGFuxLFtIG51bWFyYXPEsSBidWx1bmFtYWTEsSIKKworIzogbWlzYy91dGlsLmM6NDAzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJCYWQgam91cm5hbCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJKb3VybmFsIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBqb3VybmFsIG9wdGlvbnMgYXJlOlxuIgorIlx0c2l6ZT08am91cm5hbCBzaXplIGluIG1lZ2FieXRlcz5cbiIKKyJcdGRldmljZT08am91cm5hbCBkZXZpY2U+XG4iCisiXHRsb2NhdGlvbj08am91cm5hbCBsb2NhdGlvbj5cbiIKKyJcbiIKKyJUaGUgam91cm5hbCBzaXplIG11c3QgYmUgYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkfDvG5sw7xrIHNlw6dlbmVrbGVyaSBoYXRhbMSxIGJlbGlydGlsbWnFny5cbiIKKyJcbiIKKyJHw7xubMO8ayBzZcOnZW5la2xlcmkgJ2lzaW09ZGXEn2VyJyDDp2lmdGxlcmkgaGFsaW5kZVxuIgorInZpcmfDvGxsZXJsZSBheXLEsWxhcmFrIHZlcmlsaXIuXG4iCisiXG4iCisiR2XDp2VybGkgZ8O8bmzDvGtsZW1lIHNlw6dlbmVrbGVyaTpcbiIKKyJcdHNpemU9PE1CIG9sYXJhayBnw7xubMO8ayB1enVubHXEn3U+XG4iCisiXHRkZXZpY2U9PGfDvG5sw7xrIGRvc3lhc8SxbsSxbiBidWx1bmFjYcSfxLEgYXlnxLF0PlxuIgorIlxuIgorIkfDvG5sw7xrIGRvc3lhc8SxbsSxbiB1enVubHXEn3UgMTAyNCBpbGUgMTAyNDAwIGJsb2sgYXJhc8SxbmRhIHNlw6dpbGViaWxpci5cbiIKKyJcbiIKKworIzogbWlzYy91dGlsLmM6NDM0Cittc2dpZCAiIgorIlxuIgorIkZpbGVzeXN0ZW0gdG9vIHNtYWxsIGZvciBhIGpvdXJuYWxcbiIKK21zZ3N0ciAiIgorIlxuIgorIkRvc3lhIHNpc3RlbWkgYmlyIGfDvG5sw7xrIGnDp2luIMOnb2sga8O8w6fDvGtcbiIKKworIzogbWlzYy91dGlsLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgcmVxdWVzdGVkIGpvdXJuYWwgc2l6ZSBpcyAlZCBibG9ja3M7IGl0IG11c3QgYmVcbiIKKyJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gIEFib3J0aW5nLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjQ0OQorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIHNpemUgdG9vIGJpZyBmb3IgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkfDvG5sw7xrIGRvc3lhc8SxIGRvc3lhIHNpc3RlbWkgacOnaW4gw6dvayBiw7x5w7xrLlxuIgorCisjOiBtaXNjL3V0aWwuYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZXN5c3RlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hlY2tlZCBldmVyeSAlZCBtb3VudHMgb3JcbiIKKyIlZyBkYXlzLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuICBVc2UgdHVuZTJmcyAtYyBvciAtaSB0byBvdmVycmlkZS5cbiIKK21zZ3N0ciAiIgorIkJ1IGRvc3lhIHNpc3RlbWkgaGVyICVkIGJhxJ9sYW1hZGEgYmlyIHlhIGRhICVnIGfDvG5kZSBiaXIsIGhhbmdpc2kgw7ZuY2VcbiIKKyJnZXLDp2VrbGXFn2lyc2UsIG90b21hdGlrIG9sYXJhayBkZW5ldGxlbmVjZWt0aXIuIEJ1IGRlxJ9lcmxlcmkgZGXEn2nFn3Rpcm1la1xuIgorImnDp2luIHR1bmUyZnMneWkgLWMgdmV5YSAtaSBzZcOnZW5lxJ9pIGlsZSDDp2FsxLHFn3TEsXLEsW7EsXouXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0OQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1kXSBbLXAgcGlkZmlsZV0gWy1zIHNvY2tldHBhdGhdIFstVCB0aW1lb3V0XVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgWy1yfHRdIFstbiBudW1dIFstcyBzb2NrZXRwYXRoXVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MTU1CisjLCBmdXp6eQorbXNnaWQgImJhZCBhcmd1bWVudHMiCittc2dzdHIgIiVzOiBhcmfDvG1hbiBzYXnEsXPEsSBmYXpsYVxuIgorCisjOiBtaXNjL3V1aWRkLmM6MTczCittc2dpZCAiY29ubmVjdCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MTkyCittc2dpZCAid3JpdGUiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjIwMAorbXNnaWQgInJlYWQgY291bnQiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjIwNgorbXNnaWQgImJhZCByZXNwb25zZSBsZW5ndGgiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1dWlkZCBkYWVtb24gYWxyZWFkeSBydW5uaW5nIGF0IHBpZCAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICJUYXJpaC96YW1hbiBiZWxpcnRlY2kgw6fDtnrDvG1sZW5lbWVkaTogJXMiCisKKyM6IG1pc2MvdXVpZGQuYzozMDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGJpbmQgdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgImV4dDIgc8O8cGVyYmxvxJ91IGJ1bHVuYW1hZMSxLCIKKworIzogbWlzYy91dWlkZC5jOjMxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbGlzdGVuIG9uIHVuaXggc29ja2V0ICVzOiAlc1xuIgorbXNnc3RyICIlaSB5ZSB0ZWtyYXIgYmHEn2xhbsSxbGFtxLF5b3I6ICVtXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgZnJvbSBjbGllbnQsIGxlbiA9ICVkXG4iCittc2dzdHIgIkTDvMSfw7xtICVpIG9rdW51cmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlcmF0aW9uICVkLCBpbmNvbWluZyBudW0gPSAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCByYW5kb20gVVVJRDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCAlZCBzdWJzZXF1ZW50IFVVSURzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtaXNjL3V1aWRkLmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCAlZCBVVUlEJ3M6XG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjQzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24gJWRcbiIKK21zZ3N0ciAiRWsgw7Z6ZWxsaWsgc8O8csO8bcO8IGdlw6dlcnNpei5cbiIKKworIzogbWlzYy91dWlkZC5jOjQ3NyBtaXNjL3V1aWRkLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjUzNCBtaXNjL3V1aWRkLmM6NTYzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjYWxsaW5nIHV1aWRkIGRhZW1vbiAoJXMpOiAlc1xuIgorbXNnc3RyICIvbG9zdCtmb3VuZCBkaXppbmkgb2x1xZ90dXJ1bHVya2VuIGhhdGEgKCVzKTogJW1cbiIKKworIzogbWlzYy91dWlkZC5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ4Cittc2dpZCAiTGlzdCBvZiBVVUlEJ3M6XG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHJlcGx5IGxlbmd0aCBmcm9tIHNlcnZlciAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qga2lsbCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIktpbGxlZCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGdlbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJdIFstdF1cbiIKK21zZ3N0ciAiIgorIkt1bGxhbsSxbcSxOiAlcyBbc2XDp2VuZWtdXG4iCisiRXZyZW5kZWtpIHRlayB0YW7EsW1sYXnEsWPEsXnEsSAoVVVJRCkgb2x1xZ90dXJ1ci5cbiIKKyJcbiIKKyJTZcOnZW5la2xlcjpcbiIKKyIgICAtciAgICAgIHJhc2dlbGUgc2F5xLEgw7xyZXRlY2kga3VsbGFuxLFsYXJhayByYXNnZWxlIGJpciBudW1hcmEgw7xyZXRpbGlyXG4iCisiICAgLXQgICAgICB2YXJzYSBldGVybmV0IGthcnTEsW7EsW4gYWRyZXNpIHZlIHNpc3RlbSB6YW1hbsSxbmEgZ8O2cmUgYmlyXG4iCisiICAgICAgICAgICBudW1hcmEgw7xyZXRpclxuIgorIlxuIgorIsOHZXZpcmkgaGF0YWxhcsSxbsSxIDxnbnUtdHJAYmVsZ2VsZXIub3JnPiBhZHJlc2luZSBiaWxkaXJpbml6LlxuIgorIlxuIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAyCittc2dpZCAiIyBFeHRlbnQgZHVtcDpcbiIKK21zZ3N0ciAiIyBFayBkw7Zrw7xtOlxuIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIjXHROdW09JWxsdSwgU2l6ZT0lbGx1LCBDdXJzb3I9JWxsdSwgU29ydGVkPSVsbHVcbiIKK21zZ3N0ciAiI1x0TnVtID0gJWQsIEJveSA9ICVkLCDEsG1sZcOnID0gJWQsIFPEsXJhbMSxID0gJWRcbiIKKworIzogcmVzaXplL21haW4uYzo0NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBkZXZpY2UgW25ld19zaXplXVxuIgorIlxuIgorbXNnc3RyICIiCisiS3VsbGFuxLFtxLE6ICVzIFtzZcOnZW5la2xlcl0gYXlnxLF0IFt5ZW5pLWJveXV0XVxuIgorIlxuIgorIkRvc3lhIHNpc3RlbWluaSB5ZW5pZGVuIGJveXV0bGFuZMSxcsSxci5cbiIKKyJcbiIKKyJTZcOnZW5la2xlcjpcbiIKKyIgICAtZCBiYXlyYWtsYXIgICAgaGF0YSBhecSxa2xhbWEgc2XDp2VuZcSfaSBpbGUgZGVybGVubWnFn3NlIGhhdGEgYXnEsWtsYW1hXG4iCisiICAgICAgICAgICAgICAgICAgIHNldml5ZWxlcmkgYmVsaXJ0aWxpclxuIgorIiAgIC1mICAgICAgICAgICAgICBiYXrEsSBnw7x2ZW5saWsgZGVuZXRpbWxlcmluaSBlbmdlbGxleWVyZWsgYm95dXRsYW5kxLFybWF5YVxuIgorIiAgICAgICAgICAgICAgICAgICB6b3JsYXJcbiIKKyIgICAtRiAgICAgICAgICAgICAgYmHFn2xhbWFkYW4gw7ZuY2UgZG9zeWEgc2lzdGVtaW5pbiB0YW1wb24gYmVsbGVrbGVyaW5pXG4iCisiICAgICAgICAgICAgICAgICAgIGJvxZ9hbHTEsXJcbiIKKyIgICAtcCAgICAgICAgICAgICAgacWfbGVtIGlsZXJsZXlpxZ9pbmkgZ8O2c3RlcmVuIGJpciDDp3VidWsgw7xyZXRpclxuIgorIlxuIgorIsOHZXZpcmkgaGF0YWxhcsSxbsSxIDxnbnUtdHJAYmVsZ2VsZXIub3JnPiBhZHJlc2luZSBiaWxkaXJpbml6LlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjY2Cittc2dpZCAiRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiRG9zeWEgaW5kZWtzaSB0YWJsb3N1IGdlbmnFn2xldGlsaXlvciIKKworIzogcmVzaXplL21haW4uYzo2OQorbXNnaWQgIlJlbG9jYXRpbmcgYmxvY2tzIgorbXNnc3RyICJCbG9rbGFyIHllbmlkZW4ga29udW1sYW5kxLFyxLFsxLF5b3IiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzIKK21zZ2lkICJTY2FubmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiRG9zeWEgaW5kZWtzaSB0YWJsb3N1IHRhcmFuxLF5b3IiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzUKK21zZ2lkICJVcGRhdGluZyBpbm9kZSByZWZlcmVuY2VzIgorbXNnc3RyICJEb3N5YSBpbmRla3NpIGJhxZ92dXJ1bGFyxLEgZ8O8bmNlbGxlbml5b3IiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzgKK21zZ2lkICJNb3ZpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIkRvc3lhIGluZGVrc2kgdGFibG9zdSB0YcWfxLFuxLF5b3IiCisKKyM6IHJlc2l6ZS9tYWluLmM6ODEKK21zZ2lkICJVbmtub3duIHBhc3M/IT8iCittc2dzdHIgImJpbGlubWV5ZW4gZ2XDp2nFnz8hPyIKKworIzogcmVzaXplL21haW4uYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJCZWdpbiBwYXNzICVkIChtYXggPSAlbHUpXG4iCittc2dzdHIgIkdlw6dpxZ8gJWQgYmHFn2zEsXlvciAoZW4gw6dvayA9ICVsdSlcbiIKKworIzogcmVzaXplL21haW4uYzoxNTUKK21zZ2lkICIiCisiXG4iCisiUmVzaXppbmcgYmlnYWxsb2MgZmlsZSBzeXN0ZW1zIGhhcyBub3QgYmVlbiBmdWxseSB0ZXN0ZWQuICBQcm9jZWVkIGF0XG4iCisieW91ciBvd24gcmlzayEgIFVzZSB0aGUgZm9yY2Ugb3B0aW9uIGlmIHlvdSB3YW50IHRvIGdvIGFoZWFkIGFueXdheS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIgorbXNnc3RyICIlcyBhw6fEsWzEsXJrZW4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGdldHRpbmcgc3RhdCBpbmZvcm1hdGlvbiBmb3IgJXMiCittc2dzdHIgIiVzIGnDp2luIGR1cnVtIGJpbGdpc2kgYWzEsW7EsXJrZW4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWYgJXMnIGZpcnN0LlxuIgorIlxuIgorbXNnc3RyICIiCisiTMO8dGZlbiDDtm5jZSAnZTJmc2NrIC1mICVzJyBrb211dHVudSDDp2FsxLHFn3TEsXLEsW4uXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGltYXRlZCBtaW5pbXVtIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW06ICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQwNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBuZXcgc2l6ZTogJXNcbiIKK21zZ3N0ciAiZMO8xJ/DvG0gdXp1bmx1xJ91IGhhdGFsxLEgLSAlcyIKKworIzogcmVzaXplL21haW4uYzo0MjEKK21zZ2lkICJOZXcgc2l6ZSB0b28gbGFyZ2UgdG8gYmUgZXhwcmVzc2VkIGluIDMyIGJpdHNcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTmV3IHNpemUgc21hbGxlciB0aGFuIG1pbmltdW0gKCVsbHUpXG4iCittc2dzdHIgIkfDvG5sw7xrIGF5Z8SxdMSxbsSxbiBibG9rIGJveXUgKCVkKSBhc2dhcmkgYmxvayBib3l1bmRhbiAoJWQpIGvDvMOnw7xrXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDM1Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgbGVuZ3RoIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbnRhaW5pbmcgcGFydGl0aW9uIChvciBkZXZpY2UpIGlzIG9ubHkgJWxsdSAoJWRrKSBibG9ja3MuXG4iCisiWW91IHJlcXVlc3RlZCBhIG5ldyBzaXplIG9mICVsbHUgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiRGlzayBiw7Zsw7xtw7wgKHlhIGRhIGF5Z8SxdCkgc2FkZWNlICV1ICglZGspIGJsb2sgacOnZXJpeW9yLlxuIgorIlNpeiBpc2UgJXUgYmxva2x1ayBiaXIgYm95dXQgaXN0ZWRpbml6LlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIGlzIGFscmVhZHkgJWxsdSAoJWRrKSBibG9ja3MgbG9uZy4gIE5vdGhpbmcgdG8gZG8hXG4iCisiXG4iCittc2dzdHIgIiIKKyJEb3N5YSBzaXN0ZW1pIHphdGVuICV1IGJsb2sgdXp1bmx1a3RhLiAgSGnDp2JpciDFn2V5IHlhcMSxbG1hZMSxIVxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ3NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUmVzaXppbmcgdGhlIGZpbGVzeXN0ZW0gb24gJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIiIKKyIlcyDDvHplcmluZGVraSBkb3N5YSBzaXN0ZW1pIMWfaW1kaSAldSBibG9rIHV6dW5sdWt0YS5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlc2l6ZSAlcyIKK21zZ3N0ciAiLSAlcyB5ZW5pZGVuIGJveXV0bGFuZMSxcsSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWZ5ICVzJyB0byBmaXggdGhlIGZpbGVzeXN0ZW1cbiIKKyJhZnRlciB0aGUgYWJvcnRlZCByZXNpemUgb3BlcmF0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gb24gJXMgaXMgbm93ICVsbHUgKCVkaykgYmxvY2tzIGxvbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyIlcyDDvHplcmluZGVraSBkb3N5YSBzaXN0ZW1pIMWfaW1kaSAldSBibG9rIHV6dW5sdWt0YS5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo1MDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byB0cnVuY2F0ZSAlcyIKK21zZ3N0ciAiLSBzdGF0ICVzIHlhcMSxbG1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiByZXNpemUvb25saW5lLmM6ODIKKyMsIGZ1enp5Cittc2dpZCAia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6ZSB3aXRoIHNwYXJzZV9zdXBlcjIiCittc2dzdHIgIkTEscWfIGfDvG5sw7xrIGJ1IGRvc3lhIHNpc3RlbWluaSBkZXN0ZWtsZW1peW9yXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4NworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXM7IG9uLWxpbmUgcmVzaXppbmcgcmVxdWlyZWRcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6OTEKK21zZ2lkICJPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTYKKyMsIGZ1enp5Cittc2dpZCAiRmlsZXN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiIgorIkRvc3lhc2lzdGVtaSDDtnplbGxpa2xlcmkgMCByZXZpenlvbmx1IGRvc3lhc2lzdGVtbGVyaW5kZSBkZXN0ZWtsZW5taXlvclxuIgorCisjOiByZXNpemUvb25saW5lLmM6MTI1CisjLCBmdXp6eQorbXNnaWQgIk5vdCBlbm91Z2ggcmVzZXJ2ZWQgZ2R0IGJsb2NrcyBmb3IgcmVzaXppbmciCittc2dzdHIgIi0geWVuaWRlbiBib3l1dGxhbWEgacOnaW4gYmxva2xhciB5ZWRla2xlbmlya2VuIGhhdGEgb2x1xZ90dSIKKworIzogcmVzaXplL29ubGluZS5jOjEzMgorIywgZnV6enkKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCByZXNpemluZyBhIGZpbGUgc3lzdGVtIHRoaXMgbGFyZ2UiCittc2dzdHIgIkh1cmQsIGRvc3lhIHTDvHLDvCDDtnplbGxpxJ9pbmkgZGVzdGVrbGVtZXouXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNDAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIG1vdW50cG9pbnQgJXMiCittc2dzdHIgIiIKKyJcbiIKKyJcdCVzIMO8emVyaW5kZWtpIGfDvG5sw7xrIGHDp8SxbG1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1XG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2xkIHJlc2l6ZSBpbnRlcmZhY2UgcmVxdWVzdGVkLlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNjQgcmVzaXplL29ubGluZS5jOjE4MQorbXNnaWQgIlBlcm1pc3Npb24gZGVuaWVkIHRvIHJlc2l6ZSBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNjcgcmVzaXplL29ubGluZS5jOjE4NworIywgZnV6enkKK21zZ2lkICJXaGlsZSBjaGVja2luZyBmb3Igb24tbGluZSByZXNpemluZyBzdXBwb3J0IgorbXNnc3RyICItIHllbmlkZW4gYm95dXRsYW1hIGnDp2luIGJsb2tsYXIgeWVkZWtsZW5pcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxODQKKyMsIGZ1enp5Cittc2dpZCAiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICJExLHFnyBnw7xubMO8ayBidSBkb3N5YSBzaXN0ZW1pbmkgZGVzdGVrbGVtaXlvclxuIgorCisjOiByZXNpemUvb25saW5lLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlBlcmZvcm1pbmcgYW4gb24tbGluZSByZXNpemUgb2YgJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjIzMworIywgZnV6enkKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gZXh0ZW5kIHRoZSBsYXN0IGdyb3VwIgorbXNnc3RyICItIGTEscWfIGfDvG5sw7xrIGHDp8SxbG1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiByZXNpemUvb25saW5lLmM6Mjg3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gYWRkIGdyb3VwICMlZCIKK21zZ3N0ciAiLSAlcyBhw6fEsWxtYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogcmVzaXplL29ubGluZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZXN5c3RlbSBhdCAlcyBpcyBtb3VudGVkIG9uICVzLCBhbmQgb24tbGluZSByZXNpemluZyBpcyBub3Qgc3VwcG9ydGVkIG9uICIKKyJ0aGlzIHN5c3RlbS5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgImlub2RlcyAoJWxsdSkgbXVzdCBiZSBsZXNzIHRoYW4gJXUiCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjY5MQorbXNnaWQgInJlc2VydmVkIGJsb2NrcyIKK21zZ3N0ciAieWVkZWsgYmxva2xhciIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjkzNgorbXNnaWQgIm1ldGEtZGF0YSBibG9ja3MiCittc2dzdHIgIm1ldGEtdmVyaSBibG9rbGFyxLEiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoxMDM5IHJlc2l6ZS9yZXNpemUyZnMuYzoxODM2CisjLCBmdXp6eQorbXNnaWQgIm5ldyBtZXRhIGJsb2NrcyIKK21zZ3N0ciAibWV0YS12ZXJpIGJsb2tsYXLEsSIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjIwNTYKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuISAgTm8gc2IgaW4gbGFzdCBzdXBlcl9zcGFyc2UgYmc/XG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjIwNjEKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuISAgVW5leHBlY3RlZCBvbGRfZGVzYyBpbiBzdXBlcl9zcGFyc2UgYmc/XG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjIxMzkKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuOiByZXNpemUgaW5vZGUgY29ycnVwdCFcbiIKK21zZ3N0ciAiQnUgb2xtYW1hbMSxeWTEsTogYm95dXRsYW5kxLFyxLFya2VuIGTDvMSfw7xtw7wga2F5YmV0dGlrIVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEKK21zZ2lkICJFWFQyRlMgTGlicmFyeSB2ZXJzaW9uIDEuNDIuMTMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyX2ZpbHN5cyBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBiYWRibG9ja3NfbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBiYWRibG9ja3NfaXRlcmF0ZSBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9zY2FuIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdW5peCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX21hbmFnZXIgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmxvY2tfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBnZW5lcmljX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB0ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZGlyZWN0b3J5IGJsb2NrIGxpc3Qgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaWNvdW50IHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIFBvd2VycXVlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyIGZpbGUgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgRXh0MiBJbWFnZSBIZWFkZXIiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZSBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IGhhbmRsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzAKKyMsIGZ1enp5Cittc2dpZCAiQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayIKK21zZ3N0ciAiZ8O8bmzDvGsgZG9zeWFzxLEgc3VwZXIgYmxvxJ91IG9rdW51eW9yXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMQorbXNnaWQgIkZpbGVzeXN0ZW0gcmV2aXNpb24gdG9vIGhpZ2giCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMyCittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSB0byBmaWxlc3lzdGVtIG9wZW5lZCByZWFkLW9ubHkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIiIKKyIgXG4iCisiICBHcnVwIHRhbsSxbWxhecSxY8SxOiAgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzQKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIiIKKyIgXG4iCisiICBHcnVwIHRhbsSxbWxhecSxY8SxOiAgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzUKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgYmxvY2sgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNgorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM3Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOAorIywgZnV6enkKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgImTDvMSfw7xtIGJpdGXFn2xlbWxlcmkgeWF6xLFsxLF5b3IiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOQorIywgZnV6enkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiZMO8xJ/DvG0gYml0ZcWfbGVtbGVyaSB5YXrEsWzEsXlvciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQwCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHdyaXRlIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICJibG9rIGJpdGXFn2xlbWxlcmkgeWF6xLFsxLF5b3IiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MQorIywgZnV6enkKK21zZ2lkICJDYW4ndCByZWFkIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICJkw7zEn8O8bSB2ZSBibG9rIGJpdGXFn2xlbWxlcmkgb2t1bnV5b3IiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MgorIywgZnV6enkKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiLSBkw7zEn8O8bSB0YWJsb3N1bmEgeWF6xLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHJlYWQgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIkRvc3lhIGluZGVrc2kgdGFibG9zdSB0YXJhbsSxeW9yIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDQKK21zZ2lkICJDYW4ndCByZWFkIG5leHQgaW5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ1CisjLCBmdXp6eQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuZXhwZWN0ZWQgYmxvY2sgc2l6ZSIKK21zZ3N0ciAiRG9zeWEgc2lzdGVtaW5pbiB1enVubHXEn3UgZ8O2csO8bsO8cmRla2kgdXp1bmx1a3RhbiBiw7x5w7xrLiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ2Cittc2dpZCAiRVhUMiBkaXJlY3RvcnkgY29ycnVwdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NworbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDgKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIGJsb2NrIHRvIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgd3JpdGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ5Cittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiB0aGUgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MAorIywgZnV6enkKK21zZ2lkICJJbm9kZSBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiIgorIiBcbiIKKyIgICBEw7zEn8O8bSBiaXRlxZ9sZW1pOiAgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKKyMsIGZ1enp5Cittc2dpZCAiQmxvY2sgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgIiAgICBCbG9rIGJpdGXFn2xlbWk6ICAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MgorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciIKK21zZ3N0ciAiQmxvayBzYXnEsXPEsSBrdXJhbGTEscWfxLEhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MworIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiQmxvayBzYXnEsXPEsSBrdXJhbGTEscWfxLEhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NAorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gYnVpbGQgcHJvcG9zZWQgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTYKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTgKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYwCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYyCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgYmxvY2sgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MworbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGlub2RlIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjQKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiJXUgZMO8xJ/DvG3DvG7DvG4gZG9sYXlsxLEgYmxva2xhcsSxIG9rdW51eW9yIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBkb3VibHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIiV1IGTDvMSfw7xtw7xuw7xuIGRvbGF5bMSxIGJsb2tsYXLEsSBva3VudXlvciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY2CisjLCBmdXp6eQorbXNnaWQgIklsbGVnYWwgdHJpcGx5IGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICIldSBkw7zEn8O8bcO8bsO8biBkb2xheWzEsSBibG9rbGFyxLEgb2t1bnV5b3IiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NworIywgZnV6enkKK21zZ2lkICJCbG9jayBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIiAgICBCbG9rIGJpdGXFn2xlbWk6ICAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OAorIywgZnV6enkKK21zZ2lkICJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIiIKKyIgXG4iCisiICAgRMO8xJ/DvG0gYml0ZcWfbGVtaTogICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY5Cittc2dpZCAiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcwCittc2dpZCAiQSBibG9jayBncm91cCBpcyBtaXNzaW5nIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MQorbXNnaWQgIlRoZSBleHQyIHN1cGVyYmxvY2sgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzIKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjczCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc0Cittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NQorbXNnaWQgIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzYKK21zZ2lkICJUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBub3QgaGFuZGxlIHRoaXMgY2FzZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzcKK21zZ2lkICJUaGUgaW5vZGUgaXMgZnJvbSBhIGJhZCBibG9jayBpbiB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc4CisjLCBmdXp6eQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocykiCittc2dzdHIgIiIKKyJEb3N5YXNpc3RlbWkgw7Z6ZWxsaWtsZXJpIDAgcmV2aXp5b25sdSBkb3N5YXNpc3RlbWxlcmluZGUgZGVzdGVrbGVubWl5b3JcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc5CisjLCBmdXp6eQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIHJlYWQtb25seSBmZWF0dXJlKHMpIgorbXNnc3RyICIiCisiRG9zeWFzaXN0ZW1pIMO2emVsbGlrbGVyaSAwIHJldml6eW9ubHUgZG9zeWFzaXN0ZW1sZXJpbmRlIGRlc3Rla2xlbm1peW9yXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MAorbXNnaWQgIklPIENoYW5uZWwgZmFpbGVkIHRvIHNlZWsgb24gcmVhZCBvciB3cml0ZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODEKKyMsIGZ1enp5Cittc2dpZCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICJBYXlyxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gZXh0MiBsaWJyYXJ5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MworIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgYmxvY2sgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJEb3N5YSBzaXN0ZW1pIHTDvHJsZXJpIGnDp2luIGJlbGxlayBheXLEsWxhbWFkxLFcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg0CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbm9kZSBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIkRvc3lhIHNpc3RlbWkgdMO8cmxlcmkgacOnaW4gYmVsbGVrIGF5csSxbGFtYWTEsVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODUKK21zZ2lkICJFeHQyIGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODYKK21zZ2lkICJUb28gbWFueSByZWZlcmVuY2VzIGluIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NworbXNnaWQgIkZpbGUgbm90IGZvdW5kIGJ5IGV4dDJfbG9va3VwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OAorbXNnaWQgIkZpbGUgb3BlbiByZWFkLW9ubHkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg5CisjLCBmdXp6eQorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiRMO8xJ/DvG0gJTMkZCBkZWtpIGRpemluIGJsb2t1ICUxJHUgKCMlMiRkKSBib8WfXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MAorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MQorbXNnaWQgIlVuaW1wbGVtZW50ZWQgZXh0MiBsaWJyYXJ5IGZ1bmN0aW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MgorbXNnaWQgIlVzZXIgY2FuY2VsIHJlcXVlc3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTMKK21zZ2lkICJFeHQyIGZpbGUgdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTQKK21zZ2lkICJTdXBwbGllZCBqb3VybmFsIGRldmljZSBub3QgYSBibG9jayBkZXZpY2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk1CisjLCBmdXp6eQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQiCittc2dzdHIgIkfDvG5sw7xrIHPDvHBlcmJsb8SfdSB5b2shXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NgorbXNnaWQgIkpvdXJuYWwgbXVzdCBiZSBhdCBsZWFzdCAxMDI0IGJsb2NrcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTcKK21zZ2lkICJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk4CisjLCBmdXp6eQorbXNnaWQgIkVycm9yIGxvYWRpbmcgZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAiLSBkxLHFnyBnw7xubMO8ayBhw6fEsWxtYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk5CisjLCBmdXp6eQorbXNnaWQgIkpvdXJuYWwgbm90IGZvdW5kIgorbXNnc3RyICJHw7xubMO8ayBzw7xwZXJibG/En3UgeW9rIVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAwCittc2dpZCAiRGlyZWN0b3J5IGhhc2ggdW5zdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMQorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBudW1iZXIiCittc2dzdHIgImFlayDDtnplbGxpayIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMgorbXNnaWQgIkNhbm5vdCBjcmVhdGUgZmlsZXN5c3RlbSB3aXRoIHJlcXVlc3RlZCBudW1iZXIgb2YgaW5vZGVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDMKK21zZ2lkICJFMmltYWdlIHNuYXBzaG90IG5vdCBpbiB1c2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNAorIywgZnV6enkKK21zZ2lkICJUb28gbWFueSByZXNlcnZlZCBncm91cCBkZXNjcmlwdG9yIGJsb2NrcyIKK21zZ3N0ciAiPEdydXAgdGFuxLFtbGF5xLFjxLEgZMO8xJ/DvG3DvD4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDUKK21zZ2lkICJSZXNpemUgaW5vZGUgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA2Cittc2dpZCAiVHJpZWQgdG8gc2V0IGJsb2NrIGJtYXAgd2l0aCBtaXNzaW5nIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDcKK21zZ2lkICJUREI6IFN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOAorbXNnaWQgIlREQjogQ29ycnVwdCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA5Cittc2dpZCAiVERCOiBJTyBFcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEwCittc2dpZCAiVERCOiBMb2NraW5nIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTEKK21zZ2lkICJUREI6IE91dCBvZiBtZW1vcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMgorbXNnaWQgIlREQjogUmVjb3JkIGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEzCittc2dpZCAiVERCOiBMb2NrIGV4aXN0cyBvbiBvdGhlciBrZXlzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTQKKyMsIGZ1enp5Cittc2dpZCAiVERCOiBJbnZhbGlkIHBhcmFtZXRlciIKK21zZ3N0ciAiJ3N0cmlkZScgcGFyYW1ldHJlc2kgZ2XDp2Vyc2l6OiAlc1xuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE1Cittc2dpZCAiVERCOiBSZWNvcmQgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNgorbXNnaWQgIlREQjogV3JpdGUgbm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE3Cittc2dpZCAiRXh0MmZzIGRpcmVjdG9yeSBibG9jayBsaXN0IGlzIGVtcHR5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTgKK21zZ2lkICJBdHRlbXB0IHRvIG1vZGlmeSBhIGJsb2NrIG1hcHBpbmcgdmlhIGEgcmVhZC1vbmx5IGJsb2NrIGl0ZXJhdG9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IHNhdmVkIHBhdGgiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGdlbmVyaWMgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xMyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMwCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzEKK21zZ2lkICJDb3JydXB0IGV4dGVudCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMyCittc2dpZCAiQ29ycnVwdCBleHRlbnQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMworbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gZXh0ZW50IG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM0Cittc2dpZCAiSW5vZGUgZG9lcyBub3QgdXNlIGV4dGVudHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNQorbXNnaWQgIk5vICduZXh0JyBleHRlbnQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNgorbXNnaWQgIk5vICdwcmV2aW91cycgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzcKK21zZ2lkICJObyAndXAnIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM5Cittc2dpZCAiTm8gY3VycmVudCBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDAKK21zZ2lkICJFeHQyZnMgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDIKK21zZ2lkICJTcGxpdHRpbmcgd291bGQgcmVzdWx0IGluIGVtcHR5IG5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MworIywgZnV6enkKK21zZ2lkICJFeHRlbnQgbm90IGZvdW5kIgorbXNnc3RyICIvbG9zdCtmb3VuZCBkaXppbmkgeW9rLiAgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ2Cittc2dpZCAiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ4Cittc2dpZCAiRmlsZXN5c3RlbSB0b28gbGFyZ2UgdG8gdXNlIGxlZ2FjeSBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDkKK21zZ2lkICJNTVA6IGludmFsaWQgbWFnaWMgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTAKK21zZ2lkICJNTVA6IGRldmljZSBjdXJyZW50bHkgYWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTIKK21zZ2lkICJNTVA6IGJsb2NrIG51bWJlciBiZXlvbmQgZmlsZXN5c3RlbSByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTQKKyMsIGZ1enp5Cittc2dpZCAiTU1QOiBmaWxlc3lzdGVtIHN0aWxsIGluIHVzZSIKK21zZ3N0ciAiZG9zeWEgc2lzdGVtaSB1enVubHXEn3UgaGF0YWzEsSAtICVzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU1Cittc2dpZCAiTU1QOiBvcGVuIHdpdGggT19ESVJFQ1QgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTYKKyMsIGZ1enp5Cittc2dpZCAiQmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBzaXplIGluY29ycmVjdCIKK21zZ3N0ciAiPEdydXAgdGFuxLFtbGF5xLFjxLEgZMO8xJ/DvG3DvD4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTcKK21zZ2lkICJJbm9kZSBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU4Cittc2dpZCAiSW5vZGUgYml0bWFwIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU5Cittc2dpZCAiRXh0ZW50IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGV4dGVudCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYwCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGRvZXMgbm90IGhhdmUgc3BhY2UgZm9yIGNoZWNrc3VtIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjEKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjIKK21zZ2lkICJFeHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MworIywgZnV6enkKK21zZ2lkICJTdXBlcmJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIHN1cGVyYmxvY2siCittc2dzdHIgIlPDvHBlcmJsb2tsYXLEsW4gYnVsdW5kdcSfdSBibG9rbGFyOiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NAorbXNnaWQgIlVua25vd24gY2hlY2tzdW0gYWxnb3JpdGhtIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjUKK21zZ2lkICJNTVAgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggTU1QIGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjYKK21zZ2lkICJFeHQyIGZpbGUgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTEKK21zZ2lkICJQcm9maWxlIHZlcnNpb24gMC4wIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEyCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfbm9kZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMworIywgZnV6enkKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gbm90IGZvdW5kIgorbXNnc3RyICItIC9sb3N0K2ZvdW5kIGRpemluaSBvbHXFn3R1cnVsdXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNAorIywgZnV6enkKK21zZ2lkICJQcm9maWxlIHJlbGF0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiLSAvbG9zdCtmb3VuZCBkaXppbmkgb2x1xZ90dXJ1bHVya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTUKK21zZ2lkICJBdHRlbXB0IHRvIGFkZCBhIHJlbGF0aW9uIHRvIG5vZGUgd2hpY2ggaXMgbm90IGEgc2VjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNgorbXNnaWQgIkEgcHJvZmlsZSBzZWN0aW9uIGhlYWRlciBoYXMgYSBub24temVybyB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNworbXNnaWQgIkJhZCBsaW5rZWQgbGlzdCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTgKK21zZ2lkICJCYWQgZ3JvdXAgbGV2ZWwgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE5Cittc2dpZCAiQmFkIHBhcmVudCBwb2ludGVyIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlIGl0ZXJhdG9yIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIxCittc2dpZCAiQ2FuJ3Qgc2V0IHZhbHVlIG9uIHNlY3Rpb24gbm9kZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIHByb2ZpbGUgbGlicmFyeSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMworbXNnaWQgIkF0dGVtcHQgdG8gbW9kaWZ5IHJlYWQtb25seSBwcm9maWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI0Cittc2dpZCAiUHJvZmlsZSBzZWN0aW9uIGhlYWRlciBub3QgYXQgdG9wIGxldmVsIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI1Cittc2dpZCAiU3ludGF4IGVycm9yIGluIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjYKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSByZWxhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNworbXNnaWQgIkV4dHJhIGNsb3NpbmcgYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyOAorbXNnaWQgIk1pc3Npbmcgb3BlbiBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI5Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfdCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3NlY3Rpb25fdCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMQorbXNnaWQgIkl0ZXJhdGlvbiB0aHJvdWdoIGFsbCB0b3AgbGV2ZWwgc2VjdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMyCisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgcHJvZmlsZV9zZWN0aW9uIG9iamVjdCIKK21zZ3N0ciAiR2XDp2Vyc2l6IGRvc3lhIHNpc3RlbWkgc2XDp2VuZcSfaTogJXNcbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzMKK21zZ2lkICJObyBtb3JlIHNlY3Rpb25zIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM0Cittc2dpZCAiQmFkIG5hbWVzZXQgcGFzc2VkIHRvIHF1ZXJ5IHJvdXRpbmUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzUKK21zZ2lkICJObyBwcm9maWxlIGZpbGUgb3BlbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX2ZpbGVfdCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNworIywgZnV6enkKK21zZ2lkICJDb3VsZG4ndCBvcGVuIHByb2ZpbGUgZmlsZSIKK21zZ3N0ciAiRG9zeWEga29weWFsYW5hbWFkxLE6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM4Cittc2dpZCAiU2VjdGlvbiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOQorbXNnaWQgIkludmFsaWQgYm9vbGVhbiB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzo0MAorbXNnaWQgIkludmFsaWQgaW50ZWdlciB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzo0MQorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX2ZpbGVfZGF0YV90IgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICJDb3VsZCBub3Qgc3RhdCAlcyAtLS0gJXNcbiIKKyN+IG1zZ3N0ciAic3RhdCAlcyB5YXDEsWxhbWFkxLEgLS0tICVzXG4iCisKKyN+IG1zZ2lkICI8VGhlIEFDTCBpbmRleCBpbm9kZT4iCisjfiBtc2dzdHIgIjxBQ0wgaW5kZWtzaW5pbiBkw7zEn8O8bcO8PiIKKworI34gbXNnaWQgIjxUaGUgQUNMIGRhdGEgaW5vZGU+IgorI34gbXNnc3RyICI8QUNMIHZlcmlzaW5pbiBkw7zEn8O8bcO8PiIKKworI34gbXNnaWQgIkBTIGRvZXNuJ3QgaGF2ZSBoYXNfQGogZmxhZywgYnV0IGhhcyBleHQzIEBqICVzLlxuIgorI34gbXNnc3RyICIiCisjfiAiU8O8cGVyYmxvayBoYXNfam91cm5hbCBiYXlyYcSfxLEgacOnZXJtaXlvciwgYW1hIGV4dDMgZ8O8bmzDvMSfw7wgJXMgacOnZXJpeW9yLlxuIgorCisjfiBtc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIlaS4gZMO8xJ/DvG1kZWtpIGVrIMO2emVsbGlrIGdlw6dlcnNpeiBiaXIgw6fEsXJwxLEgKGhhc2gpIGnDp2VyaXlvciAoJU4pLCAwICIKKyN+ICJvbG1hbMSxXG4iCisKKyN+IG1zZ2lkICJ3aGlsZSBjYWxsaW5nIGl0ZXJhdG9yIGZ1bmN0aW9uIgorI34gbXNnc3RyICItIHlpbmVsZW1lIGnFn2xldmkgw6dhxJ9yxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworI34gbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgaW5vZGUgYnVmZmVyIgorI34gbXNnc3RyICItIGTDvMSfw7xtIHRhbXBvbiBiZWxsZcSfaSBheXLEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjfiBtc2dpZCAid2hpbGUgcmVhZGluZyBpbm9kZSB0YWJsZSAoZ3JvdXAgJWQpIgorI34gbXNnc3RyICItIGTDvMSfw7xtIHRhYmxvc3Ugb2t1bnVya2VuIGhhdGEgb2x1xZ90dSAoZ3J1cCAlZCkiCisKKyN+IG1zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIChncm91cCAlZCkiCisjfiBtc2dzdHIgIi0gZMO8xJ/DvG0gdGFibG9zdSB5YXrEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IChncnVwICVkKSIKKworI34gbXNnaWQgIlBhc3MgMDogRG9pbmcgYnl0ZS1zd2FwIG9mIGZpbGVzeXN0ZW1cbiIKKyN+IG1zZ3N0ciAiR2XDp2nFnyAwOiBkb3N5YSBzaXN0ZW1pbmluIGJheXQgc8SxcmFsYW1hc8SxIGTDvHplbHRpbGl5b3JcbiIKKworI34gbXNnaWQgIiIKKyN+ICIlczogdGhlIGZpbGVzeXN0ZW0gbXVzdCBiZSBmcmVzaGx5IGNoZWNrZWQgdXNpbmcgZnNja1xuIgorI34gImFuZCBub3QgbW91bnRlZCBiZWZvcmUgdHJ5aW5nIHRvIGJ5dGUtc3dhcCBpdC5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIiVzOiBkb3N5YSBzaXRlbWkgZnNjayBrdWxsYW7EsWxhcmFrIHRhbWFtZW4gZGVuZXRsZW5tZWxpIHZlXG4iCisjfiAidGVycyBiYXl0bGFyIG5vcm1hbCBkw7x6ZW5lIGTDtm5kw7xyw7xsbWVkZW4gYmHEn2xhbm1hbWFsxLFkxLFyLlxuIgorCisjfiBtc2dpZCAiQnl0ZSBzd2FwIgorI34gbXNnc3RyICJUZXJzIGJheXRsxLEiCisKKyN+IG1zZ2lkICJCeXRlLXN3YXBwaW5nIGZpbGVzeXN0ZW1zIG5vdCBjb21waWxlZCBpbiB0aGlzIHZlcnNpb24gb2YgZTJmc2NrXG4iCisjfiBtc2dzdHIgImUyZnNjayduxLFuIGJ1IHPDvHLDvG3DvG5kZSBkZXJsZW5tZW1pxZ8gdGVycyBiYXl0bMSxIHNpc3RlbWxlciBcbiIKKworI34gbXNnaWQgIkluY29tcGF0aWJsZSBvcHRpb25zIG5vdCBhbGxvd2VkIHdoZW4gYnl0ZS1zd2FwcGluZy5cbiIKKyN+IG1zZ3N0ciAiVGVycyBiYXl0bGFyIGTDvHplbHRpbGlya2VuIHV5dW1zdXogc2XDp2VuZWtsZXJlIGl6aW4gdmVyaWxtZXouXG4iCisKKyN+IG1zZ2lkICIlczogRmlsZXN5c3RlbSBieXRlIG9yZGVyIGFscmVhZHkgbm9ybWFsaXplZC5cbiIKKyN+IG1zZ3N0ciAiJXMgRG9zeWEgc2lzdGVtaW5kZSBiYXl0bGFyIHphdGVuIG5vcm1hbC5cbiIKKworI34gbXNnaWQgIndoaWxlIHJldHJ5aW5nIHRvIHdyaXRlIGJsb2NrIGJpdG1hcHMgZm9yICVzIgorI34gbXNnc3RyICItICVzIGnDp2luIGJsb2sgYml0ZcWfbGVtbGVyaW5pbiB5YXrEsWxtYXPEsSB5aW5lbGVuaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjfiBtc2dpZCAiYmFkIGJsb2NrIHNpemUgLSAlcyIKKyN+IG1zZ3N0ciAiYmxvayB1enVubHXEn3UgaGF0YWzEsSAtICVzIgorCisjfiBtc2dpZCAiaW52YWxpZCBibG9ja3MgcmFuZ2U6ICVsdS0lbHUiCisjfiBtc2dzdHIgImhhdGFsxLEgYmxvayBhcmFsxLHEn8SxOiAlbHUtJWx1IgorCisjfiBtc2dpZCAiTm90ZTogVGhpcyBpcyBhIGJ5dGUtc3dhcHBlZCBmaWxlc3lzdGVtXG4iCisjfiBtc2dzdHIgIkJpbGdpOiBCdSBiaXIgdGVycy1iYXl0bMSxIGRvc3lhIHNpc3RlbWlcbiIKKworI34gbXNnaWQgInNob3J0IHdyaXRlIChvbmx5ICVkIGJ5dGVzKSBmb3Igd3JpdGluZyBpbWFnZSBoZWFkZXIiCisjfiBtc2dzdHIgImfDtnLDvG50w7wgYmHFn2zEscSfxLFuxLEgeWF6bWFrIGnDp2luIGvEsXNhIHlhem1hIChzYWRlY2UgJWQgYmF5dCkiCisKKyN+IG1zZ2lkICJpbnZhbGlkIGZyYWdtZW50IHNpemUgLSAlcyIKKyN+IG1zZ3N0ciAic2VrbWUgYm95dSBoYXRhbMSxIC0gJXMiCisKKyN+IG1zZ2lkICJXYXJuaW5nOiBmcmFnbWVudHMgbm90IHN1cHBvcnRlZC4gIElnbm9yaW5nIC1mIG9wdGlvblxuIgorI34gbXNnc3RyICJVeWFyxLE6IHNla21lbGVyIGRlc3Rla2xlbm1lZGnEn2luZGVuIC1mIHNlw6dlbmXEn2kgeW9rc2F5xLFsxLF5b3JcbiIKKworI34gbXNnaWQgIiIKKyN+ICJGaWxlc3lzdGVtIHRvbyBsYXJnZS4gIE5vIG1vcmUgdGhhbiAyKiozMS0xIGJsb2Nrc1xuIgorI34gIlx0ICg4VEIgdXNpbmcgYSBibG9ja3NpemUgb2YgNGspIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLiIKKyN+IG1zZ3N0ciAiIgorI34gIkRvc3lhIHNpc3RlbWkgw6dvayBiw7x5w7xrLiAgMioqMzEtMSBibG9rdGFuIGZhemxhc8SxXG4iCisjfiAiXHQgKDRrJ2zEsWsgYmxva2xhcmxhIDhUQiBtw7xta8O8bikgZGVzdGVrbGVubWl5b3IuIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIldhcm5pbmc6IHNvbWUgMi40IGtlcm5lbHMgZG8gbm90IHN1cHBvcnQgYmxvY2tzaXplcyBncmVhdGVyIHRoYW4gNDA5NlxuIgorI34gIlx0dXNpbmcgZXh0My4gIFVzZSAtYiA0MDk2IGlmIHRoaXMgaXMgYW4gaXNzdWUgZm9yIHlvdS5cbiIKKyN+ICJcbiIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIlV5YXLEsTogQmF6xLEgMi40IMOnZWtpcmRla2xlciBleHQzIGt1bGxhbsSxcmtlbiA0MDk2J2RhbiBkYWhhIGLDvHnDvGsgYmxva1xuIgorI34gIlx0Ym95bGFyxLFuxLEgZGVzdGVrbGVtZXouIEJ1IHNpemluIGnDp2luIGRlIGdlw6dlcmxpeXNlLCAtYiA0MDk2IGh1bGxhbsSxbi5cbiIKKyN+ICJcbiIKKworI34gbXNnaWQgIldhcm5pbmc6ICVkLWJ5dGUgaW5vZGVzIG5vdCB1c2FibGUgb24gbW9zdCBzeXN0ZW1zXG4iCisjfiBtc2dzdHIgIlV5YXLEsTogJWQgYmF5dGzEsWsgZMO8xJ/DvG1sZXIgYmlyIMOnb2sgc2lzdGVtZGUga3VsbGFuxLFtZMSxxZ/EsWTEsXIuXG4iCisKKyN+IG1zZ2lkICJKb3VybmFsIE5PVCByZW1vdmVkXG4iCisjfiBtc2dzdHIgIkfDvG5sw7xrIHNpbGluTUVkaVxuIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSBzdXBlcmJsb2NrcyBkaXNhYmxlZC5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIkRvc3lhIHNpc3RlbWluZGUgc8O8cGVyYmxvayBhemFsdG1hIGJheXJhxJ/EsSB6YXRlbiBldGtpbiBkZcSfaWwuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBjbGVhcmVkLiAgJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJTw7xwZXJibG9rIGF6YWx0bWEgYmF5cmHEn8SxIHRlbWl6bGVuZGkuICAlcyIKKworI34gbXNnaWQgIiNcdFx0ICV1IC0+ICV1ICglZClcbiIKKyN+IG1zZ3N0ciAiI1x0XHQgJXUgLT4gJXUgKCVkKVxuIgorCisjfiBtc2dpZCAiIgorI34gIiVzIGlzIG1vdW50ZWQ7IGNhbid0IHJlc2l6ZSBhIG1vdW50ZWQgZmlsZXN5c3RlbSFcbiIKKyN+ICJcbiIKKyN+IG1zZ3N0ciAiJXMgYmHEn2zEsTsgYmHEn2zEsSBiaXIgZG9zeWEgc2lzdGVtaSB5ZW5pZGVuIGJveXV0bGFuZMSxcsSxbGFtYXohXG4iCisKKyN+IG1zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisjfiBtc2dzdHIgImJpdHRpICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworI34gbXNnaWQgIkNsb25lIGR1cGxpY2F0ZS9iYWQgYmxvY2tzIgorI34gbXNnc3RyICJ0ZWtyYXJsxLEvaGF0YWzEsSBibG9rbGFsYXLEsSBrb3B5YWxhIgorCisjfiBtc2dpZCAiRXJyb3IgYWxsb2NhdGluZyBAYSBAYiAlYi4gICIKKyN+IG1zZ3N0ciAiRWsgw7Z6ZWxsaWsgYmxvxJ91ICViIGF5csSxbMSxcmtlbiBoYXRhIG9sdcWfdHUuICAiCisKKyN+IG1zZ2lkICIiCisjfiAiRHVwbGljYXRlIEBicyBmb3VuZC4uLiBpbnZva2luZyBkdXBsaWNhdGUgQGIgcGFzc2VzLlxuIgorI34gIlBhc3MgMUI6IFJlc2NhbiBmb3IgZHVwbGljYXRlL2JhZCBAYnNcbiIKKyN+IG1zZ3N0ciAiIgorI34gIlRla3Jhcmxhbm3EscWfIGJsb2tsYXIgYnVsdW5kdS4uLiB0ZWtyYXJsYW5hbiBibG9rIHRhcmFtYXPEsSBiYcWfbGF0xLFsxLF5b3IuXG4iCisjfiAiR2XDp2nFnyAxQjogdGVrcmFybGFubcSxxZ8vaGF0YWzEsSBibG9rbGFyIHllbmlkZW4gdGFyYW7EsXlvclxuIgorCisjfiBtc2dpZCAiRHVwbGljYXRlL2JhZCBAYihzKSBpbiBAaSAlaToiCisjfiBtc2dzdHIgIkTDvMSfw7xtICVpIGnDp2luZGVraSB0ZWtyYXJsYW5txLHFny9oYXRhbMSxIGJsb2sobGFyKToiCisKKyN+IG1zZ2lkICIiCisjfiAiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisjfiAiaXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi4gIFZhbGlkIHJhaWQgb3B0aW9ucyBhcmU6XG4iCisjfiAiXHRlYV92ZXI9PGVhX3ZlcnNpb24gKDEgb3IgMilcbiIKKyN+ICJcbiIKKyN+IG1zZ3N0ciAiIgorI34gIkJlbGlydGlsZW4gZWsgc2XDp2VuZWtsZXIgaGF0YWzEsS4gRWsgc2XDp2VuZWtsZXIgJz0nIGnFn2FyZXRsaSDDp2lmdGxlclxuIgorI34gInZpcmfDvGxsZXJsZSBheXLEsWxhcmFrIHZlcmlsaXIuIEdlw6dlcmxpIHJhaWQgc2XDp2VuZWtsZXJpOlxuIgorI34gIlx0ZWFfdmVyPTxla1/DtnplbGxpa19zw7xyw7xtw7w+ICgxIHlhIGRhIDIpXG4iCisjfiAiXG4iCisKKyN+IG1zZ2lkICJVc2FnZTogIGZpbmRzdXBlciBkZXZpY2UgW3NraXBieXRlcyBbc3RhcnRrYl1dXG4iCisjfiBtc2dzdHIgIkt1bGxhbsSxbcSxOiAgZmluZHN1cGVyIGF5Z8SxdCBbYXRsYW5hY2FrX2JheXRsYXIgW2JhxZ9sYW5nxLHDp19rYl1dXG4iCisKKyN+IG1zZ2lkICJza2lwYnl0ZXMgc2hvdWxkIGJlIGEgbnVtYmVyLCBub3QgJXNcbiIKKyN+IG1zZ3N0ciAiYXRsYW5hY2FrX2JheXRsYXIgYmlyIHNhecSxIG9sbWFsxLEsICVzIGRlxJ9pbFxuIgorCisjfiBtc2dpZCAic2tpcGJ5dGVzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemVcbiIKKyN+IG1zZ3N0ciAiYXRsYW5hY2FrX2JheXRsYXIgc2VrdMO2ciBib3l1bnVuIGthdGxhcsSxIG9sbWFsxLFcbiIKKworI34gbXNnaWQgInN0YXJ0a2Igc2hvdWxkIGJlIGEgbnVtYmVyLCBub3QgJXNcbiIKKyN+IG1zZ3N0ciAiYmHFn2xhbmfEscOnX2tiIGJpciBzYXnEsSBvbG1hbMSxLCAlcyBkZcSfaWxcbiIKKworI34gbXNnaWQgInN0YXJ0a2Igc2hvdWxkIGJlIHBvc2l0aXZlLCBub3QgJUxkXG4iCisjfiBtc2dzdHIgImJhxZ9sYW5nxLHDp19rYiBwb3JpdGlmIG9sbWFsxLEsICVMZCBkZcSfaWxcbiIKKworI34gbXNnaWQgInN0YXJ0aW5nIGF0ICVMZCwgd2l0aCAlZCBieXRlIGluY3JlbWVudHNcbiIKKyN+IG1zZ3N0ciAiJUxkIGRlIGJhxZ9sYXnEsXAgJWQgYmF5dCBhcnR0xLFyxLFtbGFcbiIKKworI34gbXNnaWQgIiAgICAgICB0aGlzb2ZmICAgICBibG9jayBmc19ibGtfc3ogIGJsa3N6IGdycCBsYXN0X21vdW50XG4iCisjfiBtc2dzdHIgIiAgICAgICB0aGlzb2ZmICAgICBibG9rIGRzX2Jsb2tfYm95dSAgYmxva2JveXUgZ3J1cCBzb25fYmHEn2xhbWFcbiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICIlMTRMZDogZmluaXNoZWQgd2l0aCBlcnJubyAlZFxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiJTE0TGQ6ICVkIGhhdGFzxLEgaWxlIGJpdHRpXG4iCisKKyN+IG1zZ2lkICIlcyBmYWlsZWQgZm9yICVzOiAlc1xuIgorI34gbXNnc3RyICIlcyAlcyBpw6dpbiBiYcWfYXLEsXPEsXo6ICVzXG4iCisKKyN+IG1zZ2lkICJIRElPX0dFVEdFTyBpb2N0bCIKKyN+IG1zZ3N0ciAiSERJT19HRVRHRU8gaW9jdGwiCisKKyN+IG1zZ2lkICJCTEtHRVRTSVpFIGlvY3RsIgorI34gbXNnc3RyICJCTEtHRVRTSVpFIGlvY3RsIgorCisjfiBtc2dpZCAiRm9yY2libHkgY2xlYXJpbmcgSFRSRUUgZmxhZyBvbiBAaSAlZCAoJXEpLiAgKEJldGEgdGVzdCBjb2RlKVxuIgorI34gbXNnc3RyICIiCisjfiAiRMO8xJ/DvG0gJWQgKCVxKSDDvHplcmluZGVraSBIVFJFRSBiYXlyYcSfxLEgem9ybGEgdGVtaXpsZW5peW9yLiAgKEJldGEgdGVzdCAiCisjfiAia29kdSlcbiIKKworI34gbXNnaWQgIih1bmtub3duIG9zKSIKKyN+IG1zZ3N0ciAiKGJpbGlubWV5ZW4gacWfbC4gc2lzdC4pIgorCisjfiBtc2dpZCAicmVzaXplMmZzICVzICglcylcbiIKKyN+IG1zZ3N0ciAicmVzaXplMmZzICVzICglcylcbiIKKworI34gbXNnaWQgIk51bWJlciBvZiBmcmVlIGJsb2NrczogJWQvJWQsIE5lZWRlZDogJWRcbiIKKyN+IG1zZ3N0ciAiU2VyYmVzdCBibG9rIHNhecSxc8SxOiAlZC8lZCwgR2VyZWtlbjogJWRcbiIKKworI34gbXNnaWQgIkdvaW5nIGludG8gZGVzcGVyYXRpb24gbW9kZSBmb3IgYmxvY2sgYWxsb2NhdGlvbnNcbiIKKyN+IG1zZ3N0ciAiQmxvayB0YWhzaXNsZXJpbmRlIHVtdXRzdXoga2lwZSBnZcOnaWxpeW9yXG4iCisKKyN+IG1zZ2lkICJNb3ZpbmcgJWQgYmxvY2tzICV1LT4ldVxuIgorI34gbXNnc3RyICIlZCBibG9rIHRhxZ/EsW7EsXlvciAldS0+JXVcbiIKKworI34gbXNnaWQgImlubz0ldSwgYmxvY2tjbnQ9JWxsZCwgJXUtPiV1XG4iCisjfiBtc2dzdHIgImTDvMSfw7xtID0gJXUsIGJsb2NrX3NhecSxc8SxID0gJWxsZCwgJXUtPiV1XG4iCisKKyN+IG1zZ2lkICJJbm9kZSBtb3ZlZCAldS0+JXVcbiIKKyN+IG1zZ3N0ciAiRMO8xJ/DvG0gdGHFn8SxbmTEsSAldS0+JXVcbiIKKworI34gbXNnaWQgIklub2RlIHRyYW5zbGF0ZSAoZGlyPSV1LCBuYW1lPSUuKnMsICV1LT4ldSlcbiIKKyN+IG1zZ3N0ciAiRMO8xJ/DvG0gw6dldmlyaXNpIChkaXppbiA9ICV1LCBpc2ltPSAlLipzLCAldS0+JXUpXG4iCisKKyN+IG1zZ2lkICJJdGFibGUgbW92ZSBncm91cCAlZCBibG9jayAldS0+JXUgKGRpZmYgJWQpXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJEw7zEn8O8bSB0YWJsb3N1ICVkLiBncnVidW4gYmxva2xhcsSxICV1IC0+ICV1IGFyYXPEsW5kYSB0YcWfxLFuxLF5b3IgKGZhcmsgJWQpXG4iCisKKyN+IG1zZ2lkICIlZCBibG9ja3Mgb2YgemVyb3MuLi5cbiIKKyN+IG1zZ3N0ciAiJWQgc8SxZsSxcmzEsSBibG9rLi4uXG4iCisKKyN+IG1zZ2lkICJJbm9kZSB0YWJsZSBtb3ZlIGZpbmlzaGVkLlxuIgorI34gbXNnc3RyICJEw7zEn8O8bSB0YWJsb3N1bnVuIHRhxZ/EsW5tYXPEsSB0YW1hbWxhbmTEsS5cbiIKZGlmZiAtLWdpdCBhL3BvL3VrLmdtbyBiL3BvL3VrLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjdmYTU1Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vdWsuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL3VrLnBvIGIvcG8vdWsucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ3NGI2NwotLS0gL2Rldi9udWxsCisrKyBiL3BvL3VrLnBvCkBAIC0wLDAgKzEsNzM0MCBAQAorIyBVa2FyYWluaWFuIHRyYW5zbGF0aW9uIG9mIEUyZnNwcm9ncworIyBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisjICAgICAgMjAxMyBieSBUaGVvZG9yZSBUcydvCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4KKyMKKyMgICAgIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsLgorIyBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PiwgMjAxMy4KKyMgWXVyaSBDaG9ybm9pdmFuIDx5dXJjaG9yQHVrci5uZXQ+LCAyMDEzLCAyMDE0LgorIy4gVGhlIHN0cmluZ3MgaW4gZTJmc2NrJ3MgcHJvYmxlbS5jIGNhbiBiZSB2ZXJ5IGhhcmQgdG8gdHJhbnNsYXRlLAorIy4gc2luY2UgdGhlIHN0cmluZ3MgYXJlIGV4cGFuZGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gIEZpcnN0IG9mIGFsbCwKKyMuIHRoZXJlIGlzIGFuIEAtZXhwYW5zaW9uLCB3aGVyZSBzdHJpbmdzIGxpa2UgIkBpIiBhcmUgZXhwYW5kZWQgdG8KKyMuICJpbm9kZSIsIGFuZCBzbyBvbi4gIEluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0cmFuc2xhdG9ycywgdGhlCisjLiBlMmZzcHJvZ3MgcG8gdGVtcGxhdGUgZmlsZSBoYXMgYmVlbiBlbmhhbmNlZCB3aXRoIGNvbW1lbnRzIHRoYXQgc2hvdworIy4gdGhlIEAtZXhwYW5zaW9uLCBmb3IgdGhlIHN0cmluZ3MgaW4gdGhlIHByb2JsZW0uYyBmaWxlLgorIy4KKyMuIFRyYW5zbGF0b3JzIGFyZSBmcmVlIHRvIHVzZSB0aGUgQC1leHBhbnNpb24gZmFjaWxpdHkgaWYgdGhleSBzbworIy4gY2hvb3NlLCBieSBwcm92aWRpbmcgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGluIGUyZnNjay9tZXNzYWdlLmMuCisjLiBUaGVzZSB0cmFuc2xhdGlvbiBjYW4gY29tcGxldGVseSByZXBsYWNlIGFuIGV4cGFuc2lvbjsgZm9yIGV4YW1wbGUsCisjLiBpZiAiYmJsb2NrIiAod2hpY2ggaW5kaWNhdGVkIHRoYXQgIkBiIiB3b3VsZCBiZSBleHBhbmRlZCB0byAiYmxvY2siKQorIy4gaXMgdHJhbnNsYXRlZCBhcyAiZGRhdGVudmVybHVzdCIsIHRoZW4gIkBkIiB3aWxsIGJlIGV4cGFuZGVkIHRvCisjLiAiZGF0ZW52ZXJsdXN0Ii4gIEFsdGVybmF0aXZlbHksIHRyYW5zbGF0b3JzIGNhbiBzaW1wbHkgbm90IHVzZSB0aGUKKyMuIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGF0IGFsbC4KKyMuCisjLiBUaGUgc2Vjb25kIGV4cGFuc2lvbiB3aGljaCBpcyBkb25lIGZvciBlMmZzY2sncyBwcm9ibGVtLmMgbWVzc2FnZXMgaXMKKyMuIGEgZHluYW1pYyAlLWV4cGFuc2lvbiwgd2hpY2ggZXhwYW5kcyAlaSBhcyBhbiBpbm9kZSBudW1iZXIsIGFuZCBzbworIy4gb24uICBBIHRhYmxlIG9mIHRoZXNlIGV4cGFuc2lvbnMgY2FuIGJlIGZvdW5kIGJlbG93LiAgTm90ZSB0aGF0CisjLiAlLWV4cHJlc3Npb25zIHRoYXQgYmVnaW4gd2l0aCAiJUQiIGFuZCAiJUkiIGFyZSB0d28tY2hhcmFjdGVyCisjLiBleHBhbnNpb25zOyBzbyBmb3IgZXhhbXBsZSwgIiVJdSIgZXhwYW5kcyB0byB0aGUgaW5vZGUncyB1c2VyIGlkCisjLiBvd25lcnNoaXAgZmllbGQgKGlub2RlLT5pX3VpZCkuICBBbHNvIHRoZSAiJUIiIGV4cGFuc2lvbiBpcyBzcGVjaWFsOgorIy4gaXQgY2FuIGV4cGFuZCB0byBlaXRoZXIgdGhlIHN0cmluZyAiaW5kaXJlY3QgYmxvY2siIChwb3NzaWJseSBwcmVjZWRlZAorIy4gYnkgdGhlIHdvcmQgImRvdWJsZSIgb3IgInRyaXBsZSIpLCBvciB0aGUgc3RyaW5nICJibG9jayAjIiBpbW1lZGlhdGVseQorIy4gZm9sbG93ZWQgYnkgYW4gaW50ZWdlciBpbmRpY2F0aW5nIGEgYmxvY2sgc2VxdWVuY2UgbnVtYmVyLgorIy4gIAorIy4gCSViCTxibGs+CQkJYmxvY2sgbnVtYmVyCisjLiAJJUIJImluZGlyZWN0IGJsb2NrIiB8ICJibG9jayAjIjxibGtjb3VudD4Jc3RyaW5nIHwgc3RyaW5nK2ludGVnZXIKKyMuIAklYwk8YmxrMj4JCQlibG9jayBudW1iZXIKKyMuIAklRGkJPGRpcmVudD4gLT4gaW5vCQlpbm9kZSBudW1iZXIKKyMuIAklRG4JPGRpcmVudD4gLT4gbmFtZQlzdHJpbmcKKyMuIAklRHIJPGRpcmVudD4gLT4gcmVjX2xlbgorIy4gCSVEbAk8ZGlyZW50PiAtPiBuYW1lX2xlbgorIy4gCSVEdAk8ZGlyZW50PiAtPiBmaWxldHlwZQorIy4gCSVkCTxkaXI+IAkJCWlub2RlIG51bWJlcgorIy4gCSVnCTxncm91cD4JCQlpbnRlZ2VyCisjLiAJJWkJPGlubz4JCQlpbm9kZSBudW1iZXIKKyMuIAklSXMJPGlub2RlPiAtPiBpX3NpemUKKyMuIAklSVMJPGlub2RlPiAtPiBpX2V4dHJhX2lzaXplCisjLiAJJUliCTxpbm9kZT4gLT4gaV9ibG9ja3MKKyMuIAklSWwJPGlub2RlPiAtPiBpX2xpbmtzX2NvdW50CisjLiAJJUltCTxpbm9kZT4gLT4gaV9tb2RlCisjLiAJJUlNCTxpbm9kZT4gLT4gaV9tdGltZQorIy4gCSVJRgk8aW5vZGU+IC0+IGlfZmFkZHIKKyMuIAklSWYJPGlub2RlPiAtPiBpX2ZpbGVfYWNsCisjLiAJJUlkCTxpbm9kZT4gLT4gaV9kaXJfYWNsCisjLiAJJUl1CTxpbm9kZT4gLT4gaV91aWQKKyMuIAklSWcJPGlub2RlPiAtPiBpX2dpZAorIy4gCSVJdAk8c3RyPgkJCWZpbGUgdHlwZQorIy4gCSVqCTxpbm8yPgkJCWlub2RlIG51bWJlcgorIy4gCSVtCTxjb21fZXJyIGVycm9yIG1lc3NhZ2U+CisjLiAJJU4JPG51bT4KKyMuIAklcAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4KKyMuIAklUAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiA8ZGlyZW50Pi0+aW5vIHdpdGggPGlubzI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LiAgKElmIGRpcmVudCBpcyBOVUxMCisjLiAJCQkJdGhlbiByZXR1cm4gdGhlIHBhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vMj4pCisjLiAJJXEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxkaXI+CisjLiAJJVEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+IHdpdGggPGRpcj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuCisjLiAJJXMJPHN0cj4JCQltaXNjZWxsYW5lb3VzIHN0cmluZworIy4gCSVTCQliYWNrdXAgc3VwZXJibG9jaworIy4gCSVYCTxudW0+CWhleGFkZWNpbWFsIGZvcm1hdAorIy4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGUyZnNwcm9ncyAxLjQyLjEyLXByZTJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogdHl0c29AYWx1bS5taXQuZWR1XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDUtMTcgMjE6MjYtMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTQtMDgtMjYgMjI6MTkrMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogWXVyaSBDaG9ybm9pdmFuIDx5dXJjaG9yQHVrci5uZXQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogVWtyYWluaWFuIDx0cmFuc2xhdGlvbi10ZWFtLXVrQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogdWtcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuIgorIiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKKyJYLUdlbmVyYXRvcjogTG9rYWxpemUgMS41XG4iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoyMyBtaXNjL21rZTJmcy5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2sgJXUgb3V0IG9mIHJhbmdlOyBpZ25vcmVkLlxuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LjQuSDQsdC70L7QuiAldSDQv9C+0LfQsCDQtNC+0YHRgtGD0L/QvdC40Lwg0LTRltCw0L/QsNC30L7QvdC+0Lw7INC/0YDQvtGW0LPQvdC+0YDQvtCy0LDQvdC+LlxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NDYKK21zZ2lkICJ3aGlsZSBzYW5pdHkgY2hlY2tpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgItC/0YDQuCDQv9C10YDQtdCy0ZbRgNGG0ZYg0L/RgNCw0LLQuNC70YzQvdC+0YHRgtGWIGlub2RlINC/0L7RiNC60L7QtNC20LXQvdC40YUg0LHQu9C+0LrRltCyIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NTgKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICLQv9GA0Lgg0YfQuNGC0LDQvdC90ZYgaW5vZGUg0L/QvtGI0LrQvtC00LbQtdC90LjRhSDQsdC70L7QutGW0LIiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo3MiBlMmZzY2svc2NhbnRlc3QuYzoxMDcgZTJmc2NrL3VuaXguYzoxMzQ1CisjOiBlMmZzY2svdW5peC5jOjE0MzQgbWlzYy9iYWRibG9ja3MuYzoxMjQyIG1pc2MvYmFkYmxvY2tzLmM6MTI1MAorIzogbWlzYy9iYWRibG9ja3MuYzoxMjY0IG1pc2MvYmFkYmxvY2tzLmM6MTI3NiBtaXNjL2R1bXBlMmZzLmM6NjA0CisjOiBtaXNjL2UyaW1hZ2UuYzoxMzk2IG1pc2MvZTJpbWFnZS5jOjE1ODAgbWlzYy9lMmltYWdlLmM6MTU5OQorIzogbWlzYy9ta2UyZnMuYzoyMjcgbWlzYy90dW5lMmZzLmM6MTk1NSBtaXNjL3R1bmUyZnMuYzoyMDQ0IHJlc2l6ZS9tYWluLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICVzIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQstGW0LTQutGA0LjRgtC4ICVzIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHBvcGVuICclcyciCittc2dzdHIgItC/0YDQuCDRgdC/0YDQvtCx0ZYg0LLRltC00LrRgNC40YLQuCAnJXMnIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6OTQgbWlzYy9ta2UyZnMuYzoyMzQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGluIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIGZpbGUiCittc2dzdHIgItC/0YDQuCDRh9C40YLQsNC90L3RliDRgdC/0LjRgdC60YMg0L/QvtGI0LrQvtC00LbQtdC90LjRhSDQsdC70L7QutGW0LIg0Lcg0YTQsNC50LvQsCIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEwNQorbXNnaWQgIndoaWxlIHVwZGF0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAi0L/RgNC4INC+0L3QvtCy0LvQtdC90L3RliBpbm9kZSDQv9C+0YjQutC+0LTQttC10L3QuNGFINCx0LvQvtC60ZbQsiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBpbGxlZ2FsIGJsb2NrICV1IGZvdW5kIGluIGJhZCBibG9jayBpbm9kZS4gIENsZWFyZWQuXG4iCittc2dzdHIgIiIKKyLQn9C+0L/QtdGA0LXQtNC20LXQvdC90Y86INCyIGlub2RlINC/0L7RiNC60L7QtNC20LXQvdC40YUg0LHQu9C+0LrRltCyINC30L3QsNC50LTQtdC90L4g0L3QtdC00L7Qv9GD0YHRgtC40LzQuNC5INCx0LvQvtC6ICV1LiAiCisi0J7Rh9C40YnQtdC90L4uXG4iCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgItCf0L7QvNC40LvQutCwINGH0LjRgtCw0L3QvdGPINCx0LvQvtC60YMgJWx1ICglcykg0LTQvtC60LggJXMuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgItCf0L7QvNC40LvQutCwINGH0LjRgtCw0L3QvdGPINCx0LvQvtC60LAgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYxIGUyZnNjay9laGFuZGxlci5jOjExMAorbXNnaWQgIklnbm9yZSBlcnJvciIKK21zZ3N0ciAi0IbQs9C90L7RgNGD0LLQsNGC0Lgg0L/QvtC80LjQu9C60YMiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYyCittc2dpZCAiRm9yY2UgcmV3cml0ZSIKK21zZ3N0ciAi0J/RgNC40LzRg9GB0L7QstC+INC/0LXRgNC10LfQsNC/0LjRgdCw0YLQuCIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgItCf0L7QvNC40LvQutCwINC30LDQv9C40YHRgyDQsdC70L7QutGDICVsdSAoJXMpINC00L7QutC4ICVzLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAg0LfQsNC/0LjRgdGDINCx0LvQvtC60YMgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICLQv9C+0YDQvtC20L3RliDQsdC70L7QutC4INC60LDRgtCw0LvQvtCz0ZbQsiIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NjIKK21zZ2lkICJlbXB0eSBkaXIgbWFwIgorbXNnc3RyICLQv9C+0YDQvtC20L3RjyDQutCw0YDRgtCwINC60LDRgtCw0LvQvtCz0ZbQsiIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZGlyZWN0b3J5IGJsb2NrICV1ICgjJWQpIGluIGlub2RlICV1XG4iCittc2dzdHIgItCf0L7RgNC+0LbQvdGW0Lkg0LHQu9C+0Log0LrQsNGC0LDQu9C+0LPRgyAldSAo4oSWJWQpINGDIGlub2RlICV1XG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgZmlsZW5hbWUgbmJsb2NrcyBibG9ja3NpemVcbiIKK21zZ3N0ciAiJXM6ICVzINC90LDQt9Cy0LAg0YTQsNC50LvRgyDRgNC+0LfQvNGW0YAg0LHQu9C+0LrRltCyIG5ibG9ja3NcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIG9mIGJsb2NrcyFcbiIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LAg0LrRltC70YzQutGW0YHRgtGMINCx0LvQvtC60ZbQsiFcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciAoc2l6ZT0lZClcbiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQvtGC0YDQuNC80LDRgtC4INC/0LDQvOKAmdGP0YLRjCDQv9GW0LQg0LHRg9GE0LXRgCDQsdC70L7QutGW0LIgKNGA0L7Qt9C80ZbRgD0lZClcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBkaXNrXG4iCittc2dzdHIgItCa0L7RgNC40YHRgtGD0LLQsNC90L3RjzogJXMg0LTQuNGB0LpcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJMS0ZMU0JVRiBpb2N0bCBub3Qgc3VwcG9ydGVkISAgQ2FuJ3QgZmx1c2ggYnVmZmVycy5cbiIKK21zZ3N0ciAiIgorItCf0ZbQtNGC0YDQuNC80LrQuCBpb2N0bCBCTEtGTFNCVUYg0L3QtSDQv9C10YDQtdC00LHQsNGH0LXQvdC+ISDQodC60LjQtNCw0L3QvdGPINCx0YPRhNC10YDRltCyINC90LXQvNC+0LbQu9C40LLQtS5cbiIKKworIzogZTJmc2NrL2lzY2FuLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIGRldmljZVxuIgorbXNnc3RyICLQktC40LrQvtGA0LjRgdGC0LDQvdC90Y86ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdINC/0YDQuNGB0YLRgNGW0LlcbiIKKworIzogZTJmc2NrL2lzY2FuLmM6ODEgZTJmc2NrL3VuaXguYzo5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZmx1c2hpbmciCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INCy0ZbQtNC60YDQuNGC0YLRjyAlcyDQtNC70Y8g0YHQv9C+0YDQvtC20L3QtdC90L3RjyIKKworIzogZTJmc2NrL2lzY2FuLmM6ODYgZTJmc2NrL3VuaXguYzo5NzggcmVzaXplL21haW4uYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGZsdXNoICVzIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDRgdC/0L7RgNC+0LbQvdC10L3QvdGPICVzIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0LLRltC00LrRgNC40YLQuCDCqyVzwrsiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTI5MAorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDQv9C+0YfQsNGC0LrQvtCy0L7Qs9C+INGB0LrQsNC90YPQstCw0L3QvdGPIGlub2RlIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMjcgbWlzYy9lMmltYWdlLmM6MTMwOQorbXNnaWQgIndoaWxlIGdldHRpbmcgbmV4dCBpbm9kZSIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDQvtGC0YDQuNC80LDQvdC90Y8g0L3QsNGB0YLRg9C/0L3QvtCz0L4gaW5vZGUiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgc2Nhbm5lZC5cbiIKK21zZ3N0ciAi0JLQuNC60L7QvdCw0L3QviDRgdC60LDQvdGD0LLQsNC90L3RjyAldSBpbm9kZS5cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1MjQKK21zZ2lkICJyZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICLRh9C40YLQsNC90L3RjyDRgdGD0L/QtdGA0LHQu9C+0LrRgyDQttGD0YDQvdCw0LvRg1xuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiVzOiDQvdC1INC30L3QsNC50LTQtdC90L4g0LrQvtGA0LXQutGC0L3QvtCz0L4g0YHRg9C/0LXRgNCx0LvQvtC60YMg0LbRg9GA0L3QsNC70YNcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGpvdXJuYWwgdG9vIHNob3J0XG4iCittc2dzdHIgIiVzOiDQttGD0YDQvdCw0Lsg0ZQg0L3QsNC00YLQviDQutC+0YDQvtGC0LrQuNC8XG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiByZWNvdmVyaW5nIGpvdXJuYWxcbiIKK21zZ3N0ciAiJXM6INCy0ZbQtNC90L7QstC70Y7RlNC80L4g0LbRg9GA0L3QsNC7XG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3b24ndCBkbyBqb3VybmFsIHJlY292ZXJ5IHdoaWxlIHJlYWQtb25seVxuIgorbXNnc3RyICIiCisiJXM6INCy0ZbQtNC90L7QstC70LXQvdC90Y8g0LbRg9GA0L3QsNC70YMg0L3QtSDQsdGD0LTQtSDQstC40LrQvtC90LDQvdC+INC00L4g0LLQuNGF0L7QtNGDINC3INGA0LXQttC40LzRgyDQu9C40YjQtSDRh9C40YLQsNC90L3Rj1xuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcmUtb3BlbiAlcyIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0L/QvtCy0YLQvtGA0L3QviDQstGW0LTQutGA0LjRgtC4ICVzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImHRgNC+0LfRiNC40YDQtdC90LjQuSDQsNGC0YDQuNCx0YPRgiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTQKK21zZ2lkICJBZXJyb3IgYWxsb2NhdGluZyIKK21zZ3N0ciAiQdC/0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0YDQvtC30L/QvtC00ZbQu9GDIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNQorbXNnaWQgImJibG9jayIKK21zZ3N0ciAiYtCx0LvQvtC6IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNgorbXNnaWQgIkJiaXRtYXAiCittc2dzdHIgIkLQsdGW0YLQvtCy0LAg0LrQsNGA0YLQsCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTcKK21zZ2lkICJjY29tcHJlc3MiCittc2dzdHIgImPRgdGC0LjRgdC60LDQvdC90Y8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE4Cittc2dpZCAiQ2NvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgQGIiCittc2dzdHIgIkPQutC+0L3RhNC70ZbQutGC0YPRlCDQtyDRj9C60L7RjtGB0Ywg0ZbQvdGI0L7RjiDRhNCw0LnQu9C+0LLQvtGOINGB0LjRgdGC0LXQvNC+0Y4gQGIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE5Cittc2dpZCAiZGRpcmVjdG9yeSIKK21zZ3N0ciAiZNC60LDRgtCw0LvQvtCzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMAorbXNnaWQgIkRkZWxldGVkIgorbXNnc3RyICJE0LLQuNC70YPRh9C10L3QviIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjEKK21zZ2lkICJlZW50cnkiCittc2dzdHIgImXQt9Cw0L/QuNGBIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMgorbXNnaWQgIkVAZSAnJURuJyBpbiAlcCAoJWkpIgorbXNnc3RyICJF0LfQsNC/0LjRgSDCqyVEbsK7INGDICVwICglaSkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIzCittc2dpZCAiZmZpbGVzeXN0ZW0iCittc2dzdHIgImbRhNCw0LnQu9C+0LLQsCDRgdC40YHRgtC10LzQsCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjQKK21zZ2lkICJGZm9yIEBpICVpICglUSkgaXMiCittc2dzdHIgIkbQtNC70Y8gQGkgJWkgKCVRKSDRlCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjUKK21zZ2lkICJnZ3JvdXAiCittc2dzdHIgImfQs9GA0YPQv9CwIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNgorbXNnaWQgImhIVFJFRSBAZCBAaSIKK21zZ3N0ciAiaGlub2RlINC60LDRgtCw0LvQvtCz0YMgSFRSRUUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI3Cittc2dpZCAiaWlub2RlIgorbXNnc3RyICJpaW5vZGUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI4Cittc2dpZCAiSWlsbGVnYWwiCittc2dzdHIgIknQt9Cw0LHQvtGA0L7QvdC10L3QuNC5IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOQorbXNnaWQgImpqb3VybmFsIgorbXNnc3RyICJq0LbRg9GA0L3QsNC7IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMAorbXNnaWQgImxsb3N0K2ZvdW5kIgorbXNnc3RyICLQt9C30LDQs9GD0LHQu9C10L3RlivQt9C90LDQudC00LXQvdGWIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMQorbXNnaWQgIkxpcyBhIGxpbmsiCittc2dzdHIgIkzRlCDQv9C+0YHQuNC70LDQvdC90Y/QvCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzIKK21zZ2lkICJtbXVsdGlwbHktY2xhaW1lZCIKK21zZ3N0ciAibdC60YDQsNGC0L3QtSDQstC40LrQvtGA0LjRgdGC0LDQvdC90Y8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMzCittc2dpZCAibmludmFsaWQiCittc2dzdHIgIm7QvdC10LrQvtGA0LXQutGC0L3QuNC5IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNAorbXNnaWQgIm9vcnBoYW5lZCIKK21zZ3N0ciAib9C+0YHQuNGA0L7RgtGW0LvQuNC5IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNQorbXNnaWQgInBwcm9ibGVtIGluIgorbXNnc3RyICJw0L/RgNC+0LHQu9C10LzQsCDRgyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgInHQutCy0L7RgtCwIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNworbXNnaWQgInJyb290IEBpIgorbXNnc3RyICLQutC60L7RgNGW0L3RjCBAaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzgKK21zZ2lkICJzc2hvdWxkIGJlIgorbXNnc3RyICJz0LzQsNGUINCx0YPRgtC4IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOQorbXNnaWQgIlNzdXBlckBiIgorbXNnc3RyICLQodGB0YPQv9C10YBAYiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDAKK21zZ2lkICJ1dW5hdHRhY2hlZCIKK21zZ3N0ciAiddC90LXQv9GA0LjRlNC00L3QsNC90LjQuSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDEKK21zZ2lkICJ2ZGV2aWNlIgorbXNnc3RyICJ20L/RgNC40YHRgtGA0ZbQuSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDIKK21zZ2lkICJ4ZXh0ZW50IgorbXNnc3RyICJ40YDQvtC30YjQuNGA0LXQvdC90Y8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQzCittc2dpZCAienplcm8tbGVuZ3RoIgorbXNnc3RyICJ60L3Rg9C70YzQvtCy0L7RlyDQtNC+0LLQttC40L3QuCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTQKK21zZ2lkICI8VGhlIE5VTEwgaW5vZGU+IgorbXNnc3RyICI80J/QvtGA0L7QttC90ZbQuSBpbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU1Cittc2dpZCAiPFRoZSBiYWQgYmxvY2tzIGlub2RlPiIKK21zZ3N0ciAiPGlub2RlINC/0L7RiNC60L7QtNC20LXQvdC40YUg0LHQu9C+0LrRltCyPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTcKK21zZ2lkICI8VGhlIHVzZXIgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8aW5vZGUg0LrQstC+0YLQuCDQutC+0YDQuNGB0YLRg9Cy0LDRh9CwPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTgKK21zZ2lkICI8VGhlIGdyb3VwIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPGlub2RlINC60LLQvtGC0Lgg0LPRgNGD0L/QuD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU5Cittc2dpZCAiPFRoZSBib290IGxvYWRlciBpbm9kZT4iCittc2dzdHIgIjxpbm9kZSDQt9Cw0LLQsNC90YLQsNC20YPQstCw0YfQsD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICI8aW5vZGUg0LLRltC00L3QvtCy0LvRjtCy0LDQvdC+0LPQviDQutCw0YLQsNC70L7Qs9GDPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjEKK21zZ2lkICI8VGhlIGdyb3VwIGRlc2NyaXB0b3IgaW5vZGU+IgorbXNnc3RyICI8aW5vZGUg0LTQtdGB0LrRgNC40L/RgtC+0YDQsCDQs9GA0YPQv9C4PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjIKK21zZ2lkICI8VGhlIGpvdXJuYWwgaW5vZGU+IgorbXNnc3RyICI8aW5vZGUg0LbRg9GA0L3QsNC70YM+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MworbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSA5PiIKK21zZ3N0ciAiPNCX0LDRgNC10LfQtdGA0LLQvtCy0LDQvdC40LkgaW5vZGUgOT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTY0Cittc2dpZCAiPFJlc2VydmVkIGlub2RlIDEwPiIKK21zZ3N0ciAiPNCX0LDRgNC10LfQtdGA0LLQvtCy0LDQvdC40LkgaW5vZGUgMTA+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNAorbXNnaWQgInJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAi0LfQstC40YfQsNC50L3QuNC5INGE0LDQudC7IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNgorbXNnaWQgImRpcmVjdG9yeSIKK21zZ3N0ciAi0LrQsNGC0LDQu9C+0LMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM4Cittc2dpZCAiY2hhcmFjdGVyIGRldmljZSIKK21zZ3N0ciAi0YHQuNC80LLQvtC70YzQvdC40Lkg0L/RgNC40YHRgtGA0ZbQuSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDAKK21zZ2lkICJibG9jayBkZXZpY2UiCittc2dzdHIgItCx0LvQvtC60L7QstC40Lkg0L/RgNC40YHRgtGA0ZbQuSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDIKK21zZ2lkICJuYW1lZCBwaXBlIgorbXNnc3RyICLRltC80LXQvdC+0LLQsNC90LjQuSDQutCw0L3QsNC7IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NAorbXNnaWQgInN5bWJvbGljIGxpbmsiCittc2dzdHIgItGB0LjQvNCy0L7Qu9GW0YfQvdC1INC/0L7RgdC40LvQsNC90L3RjyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDYgbWlzYy91dWlkZC5jOjE2MgorbXNnaWQgInNvY2tldCIKK21zZ3N0ciAi0YHQvtC60LXRgiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWxlIHR5cGUgd2l0aCBtb2RlIDAlbyIKK21zZ3N0ciAi0YTQsNC50Lsg0L3QtdCy0ZbQtNC+0LzQvtCz0L4g0YLQuNC/0YMg0Lcg0YDQtdC20LjQvNC+0Lwg0LTQvtGB0YLRg9C/0YMgMCVvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyMworbXNnaWQgImluZGlyZWN0IGJsb2NrIgorbXNnc3RyICLQvtC/0L7RgdC10YDQtdC00LrQvtCy0LDQvdC40Lkg0LHQu9C+0LoiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI1Cittc2dpZCAiZG91YmxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICLQtNCy0ZbRh9GWINC+0L/QvtGB0LXRgNC10LTQutC+0LLQsNC90LjQuSDQsdC70L7QuiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjcKK21zZ2lkICJ0cmlwbGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgItGC0YDQuNGH0ZYg0L7Qv9C+0YHQtdGA0LXQtNC60L7QstCw0L3QuNC5INCx0LvQvtC6IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyOQorbXNnaWQgInRyYW5zbGF0b3IgYmxvY2siCittc2dzdHIgItCx0LvQvtC6INC/0LXRgNC10L3QtdGB0LXQvdC90Y8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDMxCittc2dpZCAiYmxvY2sgIyIKK21zZ3N0ciAi4oSWINCx0LvQvtC60YMiCisKKyM6IGUyZnNjay9wYXNzMWIuYzoyMjIKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGlub2RlIG1hcCIKK21zZ3N0ciAi0LrQsNGA0YLQsCBpbm9kZSDQutGA0LDRgtC90L7Qs9C+INCy0LjQutC+0YDQuNGB0YLQsNC90L3RjyIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjYyNSBlMmZzY2svcGFzczFiLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjYW4ndCBmaW5kIGR1cF9ibGsgZm9yICVsbHVcbiIKK21zZ3N0ciAi0LLQvdGD0YLRgNGW0YjQvdGPINC/0L7QvNC40LvQutCwOiDQvdC1INCy0LTQsNC70L7RgdGPINC30L3QsNC50YLQuCBkdXBfYmxrINC00LvRjyAlbGx1XG4iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NTIKK21zZ2lkICJyZXR1cm5lZCBmcm9tIGNsb25lX2ZpbGVfYmxvY2siCittc2dzdHIgItC/0L7QstC10YDQvdGD0YLQviDQtyBjbG9uZV9maWxlX2Jsb2NrIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgYmxvY2sgcmVjb3JkIGZvciAlbGx1IgorbXNnc3RyICIiCisi0LLQvdGD0YLRgNGW0YjQvdGPINC/0L7QvNC40LvQutCwOiDQvdC1INCy0LTQsNC70L7RgdGPINCy0LjQutC+0L3QsNGC0Lgg0L/QvtGI0YPQuiDQt9Cw0L/QuNGB0YMg0LHQu9C+0LrRgyDQtyDRgNC+0LfRiNC40YDQtdC90LjQvCAiCisi0LDRgtGA0LjQsdGD0YLQvtC8INC00LvRjyAlbGx1IgorCisjOiBlMmZzY2svcGFzczFiLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAiIgorItCy0L3Rg9GC0YDRltGI0L3RjyDQv9C+0LzQuNC70LrQsDog0L3QtSDQstC00LDQu9C+0YHRjyDQstC40LrQvtC90LDRgtC4INC/0L7RiNGD0Log0LfQsNC/0LjRgdGDIGlub2RlINC3INGA0L7Qt9GI0LjRgNC10L3QuNC8ICIKKyLQsNGC0YDQuNCx0YPRgtC+0Lwg0LTQu9GPICV1IgorCisjOiBlMmZzY2svcGFzczEuYzo0NzUgZTJmc2NrL3Bhc3MyLmM6NzgyCittc2dpZCAicmVhZGluZyBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgItGH0LjRgtCw0L3QvdGPINCx0LvQvtC60YMg0LrQsNGC0LDQu9C+0LPRgyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjM0Cittc2dpZCAiaW4tdXNlIGlub2RlIG1hcCIKK21zZ3N0ciAi0LrQsNGA0YLQsCDQstC40LrQvtGA0LjRgdGC0L7QstGD0LLQsNC90LjRhSBpbm9kZSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjQ1Cittc2dpZCAiZGlyZWN0b3J5IGlub2RlIG1hcCIKK21zZ3N0ciAi0LrQsNGA0YLQsCBpbm9kZSDQutCw0YLQsNC70L7Qs9GW0LIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY1NQorbXNnaWQgInJlZ3VsYXIgZmlsZSBpbm9kZSBtYXAiCittc2dzdHIgItC60LDRgNGC0LAgaW5vZGUg0LfQstC40YfQsNC50L3QuNGFINGE0LDQudC70ZbQsiIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjY0IG1pc2MvZTJpbWFnZS5jOjEyNjUKK21zZ2lkICJpbi11c2UgYmxvY2sgbWFwIgorbXNnc3RyICLQutCw0YDRgtCwINCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0L3QuNGFINCx0LvQvtC60ZbQsiIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzMwCittc2dpZCAib3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICLRgNC+0LfQv9C+0YfQuNC90LDRlNC80L4g0YHQutCw0L3Rg9Cy0LDQvdC90Y8gaW5vZGUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjc2NAorbXNnaWQgImdldHRpbmcgbmV4dCBpbm9kZSBmcm9tIHNjYW4iCittc2dzdHIgItC+0YLRgNC40LzRg9GU0LzQviDQvdCw0YHRgtGD0L/QvdC40LkgaW5vZGUg0LLRltC0INC30LDRgdC+0LHRgyDRgdC60LDQvdGD0LLQsNC90L3RjyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI3OQorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAi0J/RgNC+0YXRltC0IDEiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBpbmRpcmVjdCBibG9ja3Mgb2YgaW5vZGUgJXUiCittc2dzdHIgItGH0LjRgtCw0ZTQvNC+INC+0L/QvtGB0LXRgNC10LTQutC+0LLQsNC90ZYg0LHQu9C+0LrQuCBpbm9kZSAldSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM4NgorbXNnaWQgImJhZCBpbm9kZSBtYXAiCittc2dzdHIgItC60LDRgNGC0LrQsCDQv9C+0YjQutC+0LTQttC10L3QuNGFIGlub2RlIgorCisjOiBlMmZzY2svcGFzczEuYzoxNDA5Cittc2dpZCAiaW5vZGUgaW4gYmFkIGJsb2NrIG1hcCIKK21zZ3N0ciAiaW5vZGUg0YMg0LrQsNGA0YLRliDQv9C+0YjQutC+0LTQttC10L3QuNGFINCx0LvQvtC60ZbQsiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQyOQorbXNnaWQgImltYWdpYyBpbm9kZSBtYXAiCittc2dzdHIgItC60LDRgNGC0LAgaW5vZGUgaW1hZ2ljIgorCisjOiBlMmZzY2svcGFzczEuYzoxNDU2Cittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBibG9jayBtYXAiCittc2dzdHIgItC60LDRgNGC0LAg0LHQu9C+0LrRltCyINC60YDQsNGC0L3QvtCz0L4g0LLQuNC60L7RgNC40YHRgtCw0L3QvdGPIgorCisjOiBlMmZzY2svcGFzczEuYzoxNTY3Cittc2dpZCAiZXh0IGF0dHIgYmxvY2sgbWFwIgorbXNnc3RyICLQutCw0YDRgtCwINCx0LvQvtC60ZbQsiDQtyDRgNC+0LfRiNC40YDQtdC90LjQvCDQsNGC0YDQuNCx0YPRgtC+0LwiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTZsdSglYyk6IGV4cGVjdGluZyAlNmx1IGdvdCBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIgorbXNnc3RyICIlNmx1KCVjKTog0LzQsNC70L4g0LHRg9GC0LggJTZsdSDQvNCw0ZTQvNC+INGE0ZbQt9C40YfQvdC40YUgJTZsdSAo0Lot0YLRjCDQsdC70L7QutGW0LIgJWxsZClcbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6Mjg5OAorbXNnaWQgImJsb2NrIGJpdG1hcCIKK21zZ3N0ciAi0LrQsNGA0YLQsCDQsdGW0YLRltCyINCx0LvQvtC60YMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI5MDQKK21zZ2lkICJpbm9kZSBiaXRtYXAiCittc2dzdHIgItCx0ZbRgtC+0LLQsCDQutCw0YDRgtCwIGlub2RlIgorCisjOiBlMmZzY2svcGFzczEuYzoyOTEwCittc2dpZCAiaW5vZGUgdGFibGUiCittc2dzdHIgItGC0LDQsdC70LjRhtGPIGlub2RlIgorCisjOiBlMmZzY2svcGFzczIuYzoyODMKK21zZ2lkICJQYXNzIDIiCittc2dzdHIgItCf0YDQvtGF0ZbQtCAyIgorCisjOiBlMmZzY2svcGFzczIuYzo4MDYKK21zZ2lkICJDYW4gbm90IGNvbnRpbnVlLiIKK21zZ3N0ciAi0J/RgNC+0LTQvtCy0LbQtdC90L3RjyDQvdC10LzQvtC20LvQuNCy0LUuIgorCisjOiBlMmZzY2svcGFzczMuYzo3NworbXNnaWQgImlub2RlIGRvbmUgYml0bWFwIgorbXNnc3RyICLQsdGW0YLQvtCy0LAg0LrQsNGA0YLQsCDQt9Cw0LLQtdGA0YjQtdC90L3RjyBpbm9kZSIKKworIzogZTJmc2NrL3Bhc3MzLmM6ODYKK21zZ2lkICJQZWFrIG1lbW9yeSIKK21zZ3N0ciAi0J/RltC60L7QstC1INGB0L/QvtC20LjQstCw0L3QvdGPINC/0LDQvOKAmdGP0YLRliIKKworIzogZTJmc2NrL3Bhc3MzLmM6MTQ4Cittc2dpZCAiUGFzcyAzIgorbXNnc3RyICLQn9GA0L7RhdGW0LQgMyIKKworIzogZTJmc2NrL3Bhc3MzLmM6MzQwCittc2dpZCAiaW5vZGUgbG9vcCBkZXRlY3Rpb24gYml0bWFwIgorbXNnc3RyICLQsdGW0YLQvtCy0LAg0LrQsNGA0YLQsCDQstC40Y/QstC70LXQvdC90Y8g0YbQuNC60LvRltCyIGlub2RlIgorCisjOiBlMmZzY2svcGFzczQuYzoxOTYKK21zZ2lkICJQYXNzIDQiCittc2dzdHIgItCf0YDQvtGF0ZbQtCA0IgorCisjOiBlMmZzY2svcGFzczUuYzo3NAorbXNnaWQgIlBhc3MgNSIKK21zZ3N0ciAi0J/RgNC+0YXRltC0IDUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTEKK21zZ2lkICIobm8gcHJvbXB0KSIKK21zZ3N0ciAiKNCx0LXQtyDQt9Cw0L/QuNGC0YMpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyCittc2dpZCAiRml4IgorbXNnc3RyICLQktC40L/RgNCw0LLQuNGC0LgiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMKK21zZ2lkICJDbGVhciIKK21zZ3N0ciAi0J7Rh9C40YHRgtC40YLQuCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NAorbXNnaWQgIlJlbG9jYXRlIgorbXNnc3RyICLQl9C80ZbQvdC40YLQuCDRgNC+0LfRgtCw0YjRg9Cy0LDQvdC90Y8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUKK21zZ2lkICJBbGxvY2F0ZSIKK21zZ3N0ciAi0KDQvtC30L/QvtC00ZbQu9C40YLQuCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NgorbXNnaWQgIkV4cGFuZCIKK21zZ3N0ciAi0KDQvtC30LPQvtGA0L3Rg9GC0LgiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTcKK21zZ2lkICJDb25uZWN0IHRvIC9sb3N0K2ZvdW5kIgorbXNnc3RyICLQl+KAmdGU0LTQvdCw0YLQuCDQtyAvbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OAorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAi0KHRgtCy0L7RgNC40YLQuCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OQorbXNnaWQgIlNhbHZhZ2UiCittc2dzdHIgItCS0YDRj9GC0YPQstCw0YLQuCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MAorbXNnaWQgIlRydW5jYXRlIgorbXNnc3RyICLQktC60L7RgNC+0YLQuNGC0LgiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEKK21zZ2lkICJDbGVhciBpbm9kZSIKK21zZ3N0ciAi0KHQv9C+0YDQvtC20L3QuNGC0LggaW5vZGUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIKK21zZ2lkICJBYm9ydCIKK21zZ3N0ciAi0J/QtdGA0LXRgNCy0LDRgtC4IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzCittc2dpZCAiU3BsaXQiCittc2dzdHIgItCg0L7Qt9C00ZbQu9C40YLQuCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICLQn9GA0L7QtNC+0LLQttC40YLQuCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NQorbXNnaWQgIkNsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIgorbXNnc3RyICLQmtC70L7QvdGD0LLQsNGC0Lgg0LHQu9C+0LrQuCDQutGA0LDRgtC90L7Qs9C+INCy0LjQutC+0YDQuNGB0YLQsNC90L3RjyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NgorbXNnaWQgIkRlbGV0ZSBmaWxlIgorbXNnc3RyICLQktC40LvRg9GH0LjRgtC4INGE0LDQudC7IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3Cittc2dpZCAiU3VwcHJlc3MgbWVzc2FnZXMiCittc2dzdHIgItCf0YDQuNC00YPRiNC40YLQuCDQstC40LLQtdC00LXQvdC90Y8g0L/QvtCy0ZbQtNC+0LzQu9C10L3RjCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OAorbXNnaWQgIlVubGluayIKK21zZ3N0ciAi0JLRltC04oCZ0ZTQtNC90LDRgtC4IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5Cittc2dpZCAiQ2xlYXIgSFRyZWUgaW5kZXgiCittc2dzdHIgItCh0L/QvtGA0L7QttC90LjRgtC4INC/0L7QutCw0LbRh9C40LogSFRyZWUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAKK21zZ2lkICJSZWNyZWF0ZSIKK21zZ3N0ciAi0KHRgtCy0L7RgNC40YLQuCDQt9Cw0L3QvtCy0L4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzkKK21zZ2lkICIoTk9ORSkiCittc2dzdHIgIijQndCV0JzQkNCEKSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MAorbXNnaWQgIkZJWEVEIgorbXNnc3RyICLQktCY0J/QoNCQ0JLQm9CV0J3QniIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MQorbXNnaWQgIkNMRUFSRUQiCittc2dzdHIgItCe0KfQmNCp0JXQndCeIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyCittc2dpZCAiUkVMT0NBVEVEIgorbXNnc3RyICLQl9Cc0IbQndCV0J3QniDQoNCe0JfQotCQ0KjQo9CS0JDQndCd0K8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMKK21zZ2lkICJBTExPQ0FURUQiCittc2dzdHIgItCg0J7Ql9Cc0IbQqdCV0J3QniIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NAorbXNnaWQgIkVYUEFOREVEIgorbXNnc3RyICLQoNCe0JfQqNCY0KDQldCd0J4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUKK21zZ2lkICJSRUNPTk5FQ1RFRCIKK21zZ3N0ciAi0J/QntCS0KLQntCg0J3QniDQl+KAmdCE0JTQndCQ0J3QniIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NgorbXNnaWQgIkNSRUFURUQiCittc2dzdHIgItCh0KLQktCe0KDQldCd0J4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcKK21zZ2lkICJTQUxWQUdFRCIKK21zZ3N0ciAi0JLQoNCv0KLQntCS0JDQndCeIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4Cittc2dpZCAiVFJVTkNBVEVEIgorbXNnc3RyICLQntCR0KDQhtCX0JDQndCeIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5Cittc2dpZCAiSU5PREUgQ0xFQVJFRCIKK21zZ3N0ciAiSU5PREUg0KHQn9Ce0KDQntCW0J3QldCd0J4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTAKK21zZ2lkICJBQk9SVEVEIgorbXNnc3RyICLQn9CV0KDQldCg0JLQkNCd0J4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEKK21zZ2lkICJTUExJVCIKK21zZ3N0ciAi0KDQntCX0JTQhtCb0JXQndCeIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyCittc2dpZCAiQ09OVElOVUlORyIKK21zZ3N0ciAi0J/QoNCe0JTQntCS0JbQldCd0J4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMKK21zZ2lkICJNVUxUSVBMWS1DTEFJTUVEIEJMT0NLUyBDTE9ORUQiCittc2dzdHIgItCa0JvQntCd0J7QktCQ0J3QniDQkdCb0J7QmtCYINCa0KDQkNCi0J3QntCT0J4g0JLQmNCa0J7QoNCY0KHQotCQ0J3QndCvIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0Cittc2dpZCAiRklMRSBERUxFVEVEIgorbXNnc3RyICLQpNCQ0JnQmyDQktCY0JvQo9Cn0JXQndCeIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1Cittc2dpZCAiU1VQUFJFU1NFRCIKK21zZ3N0ciAi0J/QoNCY0JTQo9Co0JXQndCeIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2Cittc2dpZCAiVU5MSU5LRUQiCittc2dzdHIgItCS0IbQlOKAmdCE0JTQndCQ0J3QniIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NworbXNnaWQgIkhUUkVFIElOREVYIENMRUFSRUQiCittc2dzdHIgItCG0J3QlNCV0JrQoSBIVFJFRSDQntCn0JjQqdCV0J3QniIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OAorbXNnaWQgIldJTEwgUkVDUkVBVEUiCittc2dzdHIgItCf0JXQoNCV0KHQotCS0J7QoNCY0KLQrCIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3Cittc2dpZCAiQGIgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAi0LHRltGC0L7QstCwINC60LDRgNGC0LAg0LHQu9C+0LrRltCyINC00LvRjyDQs9GA0YPQv9C4ICVnINC90LUg0L/QtdGA0LXQsdGD0LLQsNGUINGDINCz0YDRg9C/0ZYuICjQsdC70L7QuiAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExCittc2dpZCAiQGkgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAi0LHRltGC0L7QstCwINC60LDRgNGC0LAgaW5vZGUg0LTQu9GPINCz0YDRg9C/0LggJWcg0L3QtSDQv9C10YDQtdCx0YPQstCw0ZQg0YMg0LPRgNGD0L/Rli4gKNCx0LvQvtC6ICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSB0YWJsZSBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNgorbXNnaWQgIiIKKyJAaSB0YWJsZSBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorIldBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4iCittc2dzdHIgIiIKKyLRgtCw0LHQu9C40YbRjyBAaSDQtNC70Y8g0LPRgNGD0L/QuCAlZyDQvdC1INC/0LXRgNC10LHRg9Cy0LDRlCDRgyDQs9GA0YPQv9GWLiAo0LHQu9C+0LogJWIpXG4iCisi0KPQktCQ0JPQkDog0JzQntCW0JvQmNCS0JAg0JfQndCQ0KfQndCQINCS0KLQoNCQ0KLQkCDQlNCQ0J3QmNClLlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIHN1cGVyYmxvY2sgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSB2YWxpZCBleHQyL2V4dDMvZXh0NFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtLiAgSWYgdGhlIGRldmljZSBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDIvZXh0My9leHQ0XG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBzdXBlcmJsb2NrXG4KKyMuIEAtZXhwYW5kZWQ6IGlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIHN1cGVyYmxvY2s6XG4KKyMuIEAtZXhwYW5kZWQ6ICAgICBlMmZzY2sgLWIgODE5MyA8ZGV2aWNlPlxuCisjLiBALWV4cGFuZGVkOiAgb3JcbgorIy4gQC1leHBhbmRlZDogICAgIGUyZnNjayAtYiAzMjc2OCA8ZGV2aWNlPlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjIKK21zZ2lkICIiCisiXG4iCisiVGhlIEBTIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgdmFsaWQgZXh0Mi9leHQzL2V4dDRcbiIKKyJAZi4gIElmIHRoZSBAdiBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDIvZXh0My9leHQ0XG4iCisiQGYgKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBAU1xuIgorImlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIEBTOlxuIgorIiAgICBlMmZzY2sgLWIgODE5MyA8QHY+XG4iCisiIG9yXG4iCisiICAgIGUyZnNjayAtYiAzMjc2OCA8QHY+XG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQndC1INCy0LTQsNC70L7RgdGPINC/0YDQvtGH0LjRgtCw0YLQuCDRgdGD0L/QtdGA0LHQu9C+0Log0LDQsdC+INGB0YPQv9C10YDQsdC70L7QuiDQvdC1INC+0L/QuNGB0YPRlCDQutC+0YDQtdC60YLQvdC+0ZdcbiIKKyLRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4IGV4dDIvZXh0My9leHQ0LiDQr9C60YnQviDQv9GA0LjRgdGC0YDRltC5INGUINC60L7RgNC10LrRgtC90LjQvCDRliDQvdCw0YHQv9GA0LDQstC00ZZcbiIKKyLQvNGW0YHRgtC40YLRjCDRhNCw0LnQu9C+0LLRgyDRgdC40YHRgtC10LzRgyBleHQyL2V4dDMvZXh0NCAo0LAg0L3QtSBzd2FwINGH0Lgg0LDQsdC+INGJ0L7RgdGMINGW0L3RiNC1KSwg0YLQvtC00ZZcbiIKKyLRgdGD0L/QtdGA0LHQu9C+0Log0L/QvtGI0LrQvtC00LbQtdC90L4sINGWINCy0Lgg0LzQvtC20LXRgtC1INGB0L/RgNC+0LHRg9Cy0LDRgtC4INC30LDQv9GD0YHRgtC40YLQuCBlMmZzY2sg0LdcbiIKKyLQsNC70YzRgtC10YDQvdCw0YLQuNCy0L3QuNC8INGB0YPQv9C10YDQsdC70L7QutC+0Lw6XG4iCisiICAgIGUyZnNjayAtYiA4MTkzIDzQv9GA0LjRgdGC0YDRltC5PlxuIgorIiDQsNCx0L5cbiIKKyIgICAgZTJmc2NrIC1iIDMyNzY4IDzQv9GA0LjRgdGC0YDRltC5PlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgZmlsZXN5c3RlbSBzaXplIChhY2NvcmRpbmcgdG8gdGhlIHN1cGVyYmxvY2spIGlzICViIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgZGV2aWNlIGlzICVjIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBFaXRoZXIgdGhlIHN1cGVyYmxvY2sgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMKK21zZ2lkICIiCisiVGhlIEBmIHNpemUgKGFjY29yZGluZyB0byB0aGUgQFMpIGlzICViIEBic1xuIgorIlRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBAdiBpcyAlYyBAYnNcbiIKKyJFaXRoZXIgdGhlIEBTIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKyLQoNC+0LfQvNGW0YAg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCAo0LLRltC00L/QvtCy0ZbQtNC90L4g0LTQviDRgdGD0L/QtdGA0LHQu9C+0LrRgykg0LTQvtGA0ZbQstC90Y7RlCAlYiDQsdC70L7QutGW0LJcbiIKKyLQpNGW0LfQuNGH0L3QuNC5INGA0L7Qt9C80ZbRgCDQv9GA0LjRgdGC0YDQvtGOINC00L7RgNGW0LLQvdGO0ZQgJWMg0LHQu9C+0LrRltCyXG4iCisi0JnQvNC+0LLRltGA0L3Qviwg0L/QvtGI0LrQvtC00LbQtdC90L4g0LTQsNC90ZYg0LDQsdC+INGB0YPQv9C10YDQsdC70L7QutGDLCDQsNCx0L4g0YLQsNCx0LvQuNGG0ZYg0YDQvtC30LTRltC70ZbQsiFcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja19zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4KKyMuIEAtZXhwYW5kZWQ6IFRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbgorIy4gQC1leHBhbmRlZDogZnJvbSB0aGUgYmxvY2sgc2l6ZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDAKK21zZ2lkICIiCisiQFMgQGJfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuIgorIlRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbiIKKyJmcm9tIHRoZSBAYiBzaXplLlxuIgorbXNnc3RyICIiCisi0KDQvtC30LzRltGAINCx0LvQvtC60YMg0YHRg9C/0YDQtdCx0LvQvtC60YMgPSAlYiwg0YDQvtC30LzRltGAINGE0YDQsNCz0LzQtdC90YLQsCA9ICVjLlxuIgorItCjINGG0ZbQuSDQstC10YDRgdGW0ZcgZTJmc2NrINC90LUg0L/QtdGA0LXQtNCx0LDRh9C10L3QviDQstCw0YDRltCw0L3RgtCwLCDQutC+0LvQuCDRgNC+0LfQvNGW0YDQuCDRhNGA0LDQs9C80LXQvdGC0LAgIgorItCy0ZbQtNGA0ZbQt9C90Y/RjtGC0YzRgdGPXG4iCisi0LLRltC0INGA0L7Qt9C80ZbRgNGW0LIg0LHQu9C+0LrRgy5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja3NfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDcKK21zZ2lkICJAUyBAYnNfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAi0LrRltC70YzQutGW0YHRgtGMINCx0LvQvtC60ZbQsiDQvdCwINCz0YDRg9C/0YMg0YMg0YHRg9C/0LXRgNCx0LvQvtGG0ZYgPSAlYiwg0LzQsNC70L4g0LEg0LHRg9GC0LggJWNcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBmaXJzdF9kYXRhX2Jsb2NrID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIKK21zZ2lkICJAUyBmaXJzdF9kYXRhX0BiID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAi0L/QtdGA0YjQuNC5INCx0LvQvtC6INC00LDQvdC40YUg0YMg0YHRg9C/0YDQtdGA0LHQu9C+0YbRliA9ICViLCDQvNCw0LIg0LHQuCDQsdGD0YLQuCAlY1xuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcKK21zZ2lkICIiCisiQGYgZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyLRhNCw0LnQu9C+0LLQsCDRgdC40YHRgtC10LzQsCDQvdC1INC80LDQu9CwIFVVSUQ7INGB0YLQstC+0YDRjtGU0LzQviDQstGW0LTQv9C+0LLRltC00L3QuNC5IFVVSUQuXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydFxuIgorIm9mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnlcbiIKKyJydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgJVMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtXG4iCisibWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZFxuIgorInRoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLlxuIgorIlxuIgorbXNnc3RyICIiCisi0JfQsNGD0LLQsNC20LXQvdC90Y86INGP0LrRidC+INC00LXQutGW0LvRjNC60LAg0LHQu9C+0LrRltCyINCx0ZbRgtC+0LLQuNGFINC60LDRgNGCIGlub2RlINCw0LHQvlxuIgorItCx0LvQvtC60ZbQsiDQsNCx0L4g0YfQsNGB0YLQuNC90LAg0YLQsNCx0LvQuNGG0ZYgaW5vZGUg0L/QvtGC0YDQtdCx0YPRjtGC0Ywg0L/QtdGA0LXRgdGD0LLQsNC90L3Rjywg0LLQsNC8XG4iCisi0LLQsNGA0YLQviDRgdC/0YDQvtCx0YPQstCw0YLQuCDRgdC/0L7Rh9Cw0YLQutGDINC30LDQv9GD0YHRgtC40YLQuCBlMmZzY2sg0Lcg0L/QsNGA0LDQvNC10YLRgNC+0LxcbiIKKyLCqy1iICVTwrsuINCf0YDQvtCx0LvQtdC80YMg0LzQvtC20LUg0LHRg9GC0Lgg0L/QvtCy4oCZ0Y/Qt9Cw0L3QviDRltC3INC00LXRgdC60YDQuNC/0YLQvtGA0LDQvNC4INCz0YDRg9C/XG4iCisi0L7RgdC90L7QstC90L7Qs9C+INCx0LvQvtC60YMsINCwINC00LXRgdC60YDQuNC/0YLQvtGA0Lgg0LPRgNGD0L8g0YDQtdC30LXRgNCy0L3QvtCz0L4g0LHQu9C+0LrRgyDQvNC+0LbQtVxuIgorItCx0YPRgtC4INC90LUg0L/QvtGI0LrQvtC00LbQtdC90L4uXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvcnJ1cHRpb24gZm91bmQgaW4gc3VwZXJibG9jay4gICglcyA9ICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzEKK21zZ2lkICJDb3JydXB0aW9uIGZvdW5kIGluIEBTLiAgKCVzID0gJU4pLlxuIgorbXNnc3RyICLQktC40Y/QstC70LXQvdC+INC/0L7RiNC60L7QtNC20LXQvdC90Y8g0YMgQFMuICAoJXMgPSAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIGRldmljZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgQHY6ICVtXG4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0LLQuNC30L3QsNGH0LXQvdC90Y8g0YDQvtC30LzRltGA0YMg0YTRltC30LjRh9C90L7Qs9C+INGC0L7QvNGDOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBjb3VudCBpbiBzdXBlcmJsb2NrIGlzICVpLCBzaG91bGQgYmUgJWouXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTgxCittc2dpZCAiQGkgY291bnQgaW4gQFMgaXMgJWksIEBzICVqLlxuIgorbXNnc3RyICLQmtGW0LvRjNC60ZbRgdGC0YwgQGkg0YMg0YHRg9C/0LXRgNCx0LvQvtGG0ZYg0LTQvtGA0ZbQstC90Y7RlCwg0LzQsNGUINCx0YPRgtC4ICVqLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4NQorbXNnaWQgIlRoZSBIdXJkIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZlYXR1cmUuXG4iCittc2dzdHIgItCjIEh1cmQg0L3QtSDQv9C10YDQtdC00LHQsNGH0LXQvdC+INC/0ZbQtNGC0YDQuNC80LrQuCDQvNC+0LbQu9C40LLQvtGB0YLRliDQstC40LfQvdCw0YfQtdC90L3RjyDRgtC40L/RgyDRhNCw0LnQu9GW0LIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgJWkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoYXMgYW4gQG4gQGogKEBpICVpKS5cbiIKK21zZ3N0ciAi0JbRg9GA0L3QsCDRgdGD0L/QtdGA0LHQu9C+0LrRgyDRlCDQvdC10LrQvtGA0LXQutGC0L3QuNC8IChAaSAlaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIG11bHRpcGxlIGZpbGVzeXN0ZW0gdXNlcnMgKHVuc3VwcG9ydGVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTUKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgbXVsdGlwbGUgQGYgdXNlcnMgKHVuc3VwcG9ydGVkKS5cbiIKK21zZ3N0ciAiIgorItCjINC30L7QstC90ZbRiNC90YzQvtC80YMg0LbRg9GA0L3QsNC70ZYg0LLQuNC30L3QsNGH0LXQvdC+INC00LXQutGW0LvRjNC60LAg0LrQvtGA0LjRgdGC0YPQstCw0YfRltCyINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LggKNGC0LDQutCwICIKKyLQutC+0L3RhNGW0LPRg9GA0LDRhtGW0Y8g0L3QtSDQv9GW0LTRgtGA0LjQvNGD0ZTRgtGM0YHRjykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbid0IGZpbmQgZXh0ZXJuYWwgam91cm5hbFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwMAorbXNnaWQgIkNhbid0IGZpbmQgZXh0ZXJuYWwgQGpcbiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQt9C90LDQudGC0Lgg0LfQvtCy0L3RltGI0L3RjNC+0LPQviBAalxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBiYWQgc3VwZXJibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwNQorbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBiYWQgQFNcbiIKK21zZ3N0ciAi0KMg0LfQvtCy0L3RltGI0L3RjNC+0LPQviDQttGD0YDQvdCw0LvRgyDQv9C+0YjQutC+0LTQttC10L3QviDRgdGD0L/QtdGA0LHQu9C+0LpcbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmlsZXN5c3RlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxMAorbXNnaWQgIkV4dGVybmFsIEBqIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBAZlxuIgorbXNnc3RyICIiCisi0JTQu9GPINC30L7QstC90ZbRiNC90YzQvtCz0L4g0LbRg9GA0L3QsNC70YMg0L3QtSDQv9C10YDQtdC00LHQsNGH0LXQvdC+INC/0ZbQtNGC0YDQuNC80LrQuCDRhtGW0ZTRlyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4XG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gam91cm5hbCBzdXBlcmJsb2NrIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgam91cm5hbCAKKyMuIEAtZXhwYW5kZWQ6IGZvcm1hdC5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjE1Cittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiAiCisiZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKyLRgdGD0L/QtdGA0LHQu9C+0Log0LbRg9GA0L3QsNC70YMg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCDQvdCw0LvQtdC20LjRgtGMINC00L4g0L3QtdCy0ZbQtNC+0LzQvtCz0L4g0YLQuNC/0YMgJU4gKNC90LUgIgorItC/0ZbQtNGC0YDQuNC80YPRlNGC0YzRgdGPKS5cbiIKKyLQmdC80L7QstGW0YDQvdC+LCDQstCw0YjQsCDQutC+0L/RltGPIGUyZnNjayDRlCDQt9Cw0YHRgtCw0YDRltC70L7RjiDRli/QsNCx0L4g0L3QtSDQv9GW0LTRgtGA0LjQvNGD0ZQg0YbRjNC+0LPQviDRhNC+0YDQvNCw0YLRgyAiCisi0LbRg9GA0L3QsNC70YMuXG4iCisi0JnQvNC+0LLRltGA0L3Qviwg0YHRg9C/0LXRgNCx0LvQvtC6INC20YPRgNC90LDQu9GDINC/0L7RiNC60L7QtNC20LXQvdC+LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjMKK21zZ2lkICJAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICLRgdGD0L/QtdGA0LHQu9C+0Log0LbRg9GA0L3QsNC70YMg0L/QvtGI0LrQvtC00LbQtdC90L4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzX2pvdXJuYWwgZmxhZyBpcyBjbGVhciwgYnV0IGEgam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyOAorbXNnaWQgIkBTIGhhc19AaiBmbGFnIGlzIGNsZWFyLCBidXQgYSBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICLQv9GA0LDQv9C+0YDQtdGG0Ywg0YHRg9C/0LXRgNCx0LvQvtC60YMgaGFzX2pvdXJuYWwg0YHQutC40L3Rg9GC0L4sINCw0LvQtSDQvdCw0Y/QstC90LjQvCDRlCDQttGD0YDQvdCw0LsuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBqb3VybmFsIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjMzCittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICIiCisi0JLRgdGC0LDQvdC+0LLQu9C10L3QviDQv9GA0LDQv9C+0YDQtdGG0YwgbmVlZHNfcmVjb3Zlcnkg0LTQu9GPINGB0YPQv9C10YDQsdC70L7QutGDLCDQsNC70LUg0L3QtSDQstC40Y/QstC70LXQvdC+ICIKKyLQttGD0YDQvdCw0LvRgy5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgam91cm5hbCBoYXMgZGF0YS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMzgKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgQGogaGFzIGRhdGEuXG4iCittc2dzdHIgIiIKKyLQl9C90Y/RgtC+INC/0YDQsNC/0L7RgNC10YbRjCBuZWVkc19yZWNvdmVyeSDQtNC70Y8g0YHRg9C/0LXRgNCx0LvQvtC60YMsINCw0LvQtSDRgyDQttGD0YDQvdCw0LvRliDQvdC10LzQsNGUINC00LDQvdC40YUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENsZWFyIGpvdXJuYWwKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQzCittc2dpZCAiQ2xlYXIgQGoiCittc2dzdHIgItCe0YfQuNGB0YLQuNGC0Lgg0LbRg9GA0L3QsNC7IgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIGZpbGVzeXN0ZW0uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQ4IGUyZnNjay9wcm9ibGVtLmM6NzA3Cittc2dpZCAiQGYgaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgQGYuICAiCittc2dzdHIgIiIKKyLQlNC70Y8g0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCDQstGB0YLQsNC90L7QstC70LXQvdC+INC/0YDQsNC/0L7RgNGG0ZYg0LzQvtC20LvQuNCy0L7RgdGC0LXQuSwg0LDQu9C1INGG0Y8g0YTQsNC50LvQvtCy0LAgIgorItGB0LjRgdGC0LXQvNCwINC80LDRlCDQstC10YDRgdGW0Y4gMC4gICIKKworIy4gQC1leHBhbmRlZDogJXMgb3JwaGFuZWQgaW5vZGUgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTMKK21zZ2lkICIlcyBAbyBAaSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuIgorbXNnc3RyICLQvtGB0LjRgNC+0YLRltC70LjQuSBpbm9kZSAlcyAlaSAodWlkPSVJdSwgZ2lkPSVJZywg0YDQtdC20LjQvD0lSW0sINGA0L7Qt9C80ZbRgD0lSXMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTgKK21zZ2lkICJASSAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICLQt9C90LDQudC00LXQvdC+INC90LXQutC+0YDQtdC60YLQvdC40LkgJUIgKCViKSDRgyDQvtGB0LjRgNC+0YLRltC70L7QvNGDIGlub2RlICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjMKK21zZ2lkICJBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAi0JLQttC1INGB0L/RgNC+0LbQvdC10L3QviDQt9C90LDQudC00LXQvdGWICVCICglYikg0YMg0L7RgdC40YDQvtGC0ZbQu9C+0LzRgyBpbm9kZSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBvcnBoYW5lZCBpbm9kZSAlaSBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJASSBAbyBAaSAlaSBpbiBAUy5cbiIKK21zZ3N0ciAi0L3QtdC60L7RgNC10LrRgtC90LjQuSDQvtGB0LjRgNC+0YLRltC70LjQuSBAaSAlaSDRgyDRgdGD0L/QtdGA0LHQu9C+0YbRli5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBpbm9kZSAlaSBpbiBvcnBoYW5lZCBpbm9kZSBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJASSBAaSAlaSBpbiBAbyBAaSBsaXN0LlxuIgorbXNnc3RyICLQvdC10LrQvtGA0LXQutGC0L3QuNC5IEBpICVpINGDINGB0L/QuNGB0LrRgyDQvtGB0LjRgNC+0YLRltC70LjRhSBAaS5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3OAorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICIiCisi0JTQu9GPINGB0YPQv9C10YDQsdC70L7QutGDINC20YPRgNC90LDQu9GDINCy0YHRgtCw0L3QvtCy0LvQtdC90L4g0L3QtdCy0ZbQtNC+0LzQuNC5INC/0YDQuNC00LDRgtC90LjQuSDQu9C40YjQtSDQtNC+INGH0LjRgtCw0L3QvdGPICIKKyLQv9GA0LDQv9C+0YDQtdGG0Ywg0LzQvtC20LvQuNCy0L7RgdGC0ZYuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODMKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiIgorItCU0LvRjyDRgdGD0L/QtdGA0LHQu9C+0LrRgyDQttGD0YDQvdCw0LvRgyDQstGB0YLQsNC90L7QstC70LXQvdC+INC90LXQstGW0LTQvtC80LjQuSDRliDQvdC10YHRg9C80ZbRgdC90LjQuSDQv9GA0LDQv9C+0YDQtdGG0YwgIgorItC80L7QttC70LjQstC+0YHRgtGWLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODgKK21zZ2lkICJAaiB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4iCittc2dzdHIgIiIKKyLQn9GW0LTRgtGA0LjQvNC60Lgg0YbRltGU0Zcg0LLQtdGA0YHRltGXINC20YPRgNC90LDQu9GDINGDINC/0L7RgtC+0YfQvdGW0Lkg0LLQtdGA0YHRltGXIGUyZnNjayDQvdC1INC/0LXRgNC10LTQsdCw0YfQtdC90L4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1vdmluZyBqb3VybmFsIGZyb20gLyVzIHRvIGhpZGRlbiBpbm9kZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNb3ZpbmcgQGogZnJvbSAvJXMgdG8gaGlkZGVuIEBpLlxuIgorIlxuIgorbXNnc3RyICIiCisi0J/QtdGA0LXRgdGD0LLQsNGU0LzQviDQttGD0YDQvdCw0Lsg0LcgLyVzINC00L4g0L/RgNC40YXQvtCy0LDQvdC+0LPQviBAaS5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgbW92aW5nIGpvdXJuYWw6ICVtXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgbW92aW5nIEBqOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisi0J/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0L/QtdGA0LXRgdGD0L3Rg9GC0Lgg0LbRg9GA0L3QsNC7OiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBGb3VuZCBpbnZhbGlkIFYyIGpvdXJuYWwgc3VwZXJibG9jayBmaWVsZHMgKGZyb20gVjEgam91cm5hbCkuXG4KKyMuIEAtZXhwYW5kZWQ6IENsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIGpvdXJuYWwgc3VwZXJibG9jay4uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMDMKK21zZ2lkICIiCisiRm91bmQgQG4gVjIgQGogQFMgZmllbGRzIChmcm9tIFYxIEBqKS5cbiIKKyJDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBAaiBAUy4uLlxuIgorIlxuIgorbXNnc3RyICIiCisi0JLQuNGP0LLQu9C10L3QviDQvdC10LrQvtGA0LXQutGC0L3RliDQv9C+0LvRjyDRgdGD0L/QtdGA0LHQu9C+0LrRgyDQttGD0YDQvdCw0LvRgyBWMiAo0Lcg0LbRg9GA0L3QsNC70YMgVjEpLlxuIgorItCh0L/QvtGA0L7QttC90Y7RlNC80L4g0L/QvtC70Y8g0LfQsCDRgdGD0L/QtdGA0LHQu9C+0LrQvtC8INC20YPRgNC90LDQu9GDIFYxLi4uXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJ1biBqb3VybmFsIGFueXdheQorIzogZTJmc2NrL3Byb2JsZW0uYzozMDkKK21zZ2lkICJSdW4gQGogYW55d2F5IgorbXNnc3RyICLQl9Cw0L/Rg9GB0YLQuNGC0Lgg0LbRg9GA0L3QsNC70Y7QstCw0L3QvdGPINC/0L7Qv9GA0Lgg0YbQtSIKKworIy4gQC1leHBhbmRlZDogUmVjb3ZlcnkgZmxhZyBub3Qgc2V0IGluIGJhY2t1cCBzdXBlcmJsb2NrLCBzbyBydW5uaW5nIGpvdXJuYWwgYW55d2F5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMxNAorbXNnaWQgIlJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgQFMsIHNvIHJ1bm5pbmcgQGogYW55d2F5LlxuIgorbXNnc3RyICIiCisi0KMg0YDQtdC30LXRgNCy0L3QvtC80YMg0YHRg9C/0LXRgNCx0LvQvtGG0ZYg0L3QtSDQstGB0YLQsNC90L7QstC70LXQvdC+INC/0YDQsNC/0L7RgNC10YbRjCDQstGW0LTQvdC+0LLQu9C10L3QvdGPLCDQvtGC0LbQtSwg0L/QvtC/0YDQuCAiCisi0LLRgdC1INC30LDQv9GD0YHQutCw0ZTQvNC+INC20YPRgNC90LDQuy5cbiIKKworIy4gQC1leHBhbmRlZDogQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTkKK21zZ2lkICIiCisiQmFja2luZyB1cCBAaiBAaSBAYiBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorItCh0YLQstC+0YDRjtGU0LzQviDRgNC10LfQtdGA0LLQvdGDINC60L7Qv9GW0Y4g0LTQsNC90LjRhSDRidC+0LTQviDQsdC70L7QutGW0LIgQGog0LbRg9GA0L3QsNC70YMuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSByZXNpemVfaW5vZGUgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpcyAlTjsgc2hvdWxkIGJlIHplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzI0Cittc2dpZCAiIgorIkBmIGRvZXMgbm90IGhhdmUgcmVzaXplX0BpIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9AYnNcbiIKKyJpcyAlTjsgQHMgemVyby4gICIKK21zZ3N0ciAiIgorItGDINGE0LDQudC70L7QstGW0Lkg0YHQuNGB0YLQtdC80ZYg0L3QtSDRg9Cy0ZbQvNC60L3QtdC90L4gcmVzaXplX0BpLCDQsNC70LUgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisi0LzQsNGUINC30L3QsNGH0LXQvdC90Y8gJU47INC80LDRlCDQsdGD0YLQuCDQvdGD0LvRjNC+0LLQuNC8LiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemVfaW5vZGUgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIGlub2RlIGlzIG5vbi16ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzMAorbXNnaWQgIlJlc2l6ZV9AaSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgQGkgaXMgbm9uLXplcm8uICAiCittc2dzdHIgIlJlc2l6ZV9AaSDQvdC1INGD0LLRltC80LrQvdC10L3Qviwg0LDQu9C1INC30LzRltC90LAg0YDQvtC30LzRltGA0YMgQGkg0ZQg0L3QtdC90YPQu9GM0L7QstC+0Y4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSBub3QgdmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzM1Cittc2dpZCAiUmVzaXplIEBpIG5vdCB2YWxpZC4gICIKK21zZ3N0ciAi0JfQvNGW0L3QsCDRgNC+0LfQvNGW0YDRgyBAaSDRlCDQvdC10LrQvtGA0LXQutGC0L3QvtGOLiAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQwCittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorItGH0LDRgSDQvtGB0YLQsNC90L3RjNC+0LPQviDQvNC+0L3RgtGD0LLQsNC90L3RjyDRgdGD0L/QtdGA0LHQu9C+0LrRgyAoJXQsXG4iCisiXHTRgtC10L/QtdGAID0gJVQpINC70LXQttC40YLRjCDRgyDQvNCw0LnQsdGD0YLQvdGM0L7QvNGDLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ1Cittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorItGH0LDRgSDQvtGB0YLQsNC90L3RjNC+0LPQviDQt9Cw0L/QuNGB0YMg0YHRg9C/0LXRgNCx0LvQvtC60YMgKCV0LFxuIgorIlx00YLQtdC/0LXRgCA9ICVUKSDQu9C10LbQuNGC0Ywg0YMg0LzQsNC50LHRg9GC0L3RjNC+0LzRgy5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIHNob3VsZCBiZSAlWC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBAcyAlWC4gICIKK21zZ3N0ciAi0L/RltC00LrQsNC30LrQvtGOINGB0YPQv9C10YDQsdC70L7QutGDINC00LvRjyDQt9C+0LLQvdGW0YjQvdGM0L7Qs9C+INGB0YPQv9C10YDQsdC70L7QutGDINC80LDRlCDQsdGD0YLQuCAlWC4gICIKKworIy4gQC1leHBhbmRlZDogQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNTQKK21zZ2lkICIiCisiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorItCU0L7QtNCw0ZTQvNC+INC/0ZbQtNC60LDQt9C60YMgZGlyaGFzaCDQtNC+INGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LguXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzU5Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gICIKK21zZ3N0ciAi0LrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAg0LTQtdGB0LrRgNC40L/RgtC+0YDQsCDQs9GA0YPQv9C4ICVnINC00L7RgNGW0LLQvdGO0ZQgJTA0eCwg0LAg0LzQsNGUINCx0YPRgtC4ICUwNHkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuIgorbXNnc3RyICIiCisi0LTQtdGB0LrRgNC40L/RgtC+0YAg0LPRgNGD0L/QuCAlZyDQv9C+0LfQvdCw0YfQtdC90L4g0L3QtdGW0L3RltGG0ZbQsNC70ZbQt9C+0LLQsNC90LjQvCDQsdC10Lcg0LLRgdGC0LDQvdC+0LLQu9C10L3QvdGPINCy0ZbQtNC/0L7QstGW0LTQvdC+0ZcgIgorItC80L7QttC70LjQstC+0YHRgtGWLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzY5Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgIgorbXNnc3RyICIiCisi0LTQtdGB0LrRgNC40L/RgtC+0YAg0LPRgNGD0L/QuCAlZyDQvNGW0YHRgtC40YLRjCDQtNCw0L3RliDRidC+0LTQviDQvdC10LrQvtGA0LXQutGC0L3QvtGXINC60ZbQu9GM0LrQvtGB0YLRliDQvdC10LLQuNC60L7RgNC40YHRgtCw0L3QuNGFICIKKyJpbm9kZSAlYi4gICIKKworIy4gQC1leHBhbmRlZDogTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNzQKK21zZ2lkICJMYXN0IEBnIEBiIEBCIHVuaW5pdGlhbGl6ZWQuICAiCittc2dzdHIgItCR0ZbRgtC+0LLRgyDQutCw0YDRgtGDINC+0YHRgtCw0L3QvdGM0L7Qs9C+INCx0LvQvtC60YMg0LPRgNGD0L/QuCDQvdC1INGW0L3RltGG0ZbQsNC70ZbQt9C+0LLQsNC90L4uICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdHJhbnNhY3Rpb24gJWkgd2FzIGNvcnJ1cHQsIHJlcGxheSB3YXMgYWJvcnRlZC5cbiIKK21zZ3N0ciAi0JfQsNC/0LjRgSDQtNGW0Zcg0LbRg9GA0L3QsNC70YMgJWkg0L/QvtGI0LrQvtC00LbQtdC90L4sINC/0L7QstGC0L7RgNC90LUg0LLQuNC60L7QvdCw0L3QvdGPINC/0LXRgNC10YDQstCw0L3Qvi5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozODMKK21zZ2lkICJUaGUgdGVzdF9mcyBmbGFnIGlzIHNldCAoYW5kIGV4dDQgaXMgYXZhaWxhYmxlKS4gICIKK21zZ3N0ciAi0JLRgdGC0LDQvdC+0LLQu9C10L3QviDQv9GA0LDQv9C+0YDQtdGG0YwgdGVzdF9mcyAo0ZYg0LTQvtGB0YLRg9C/0L3QsCBleHQ0KS4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4OAorIywgZnV6enkKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5ICIKKyJzZXQpXG4iCittc2dzdHIgIiIKKyLQp9Cw0YEg0L7RgdGC0LDQvdC90YzQvtCz0L4g0LzQvtC90YLRg9Cy0LDQvdC90Y8g0YHRg9C/0LXRgNCx0LvQvtC60YMg0LvQtdC20LjRgtGMINGDINC80LDQudCx0YPRgtC90YzQvtC80YMuXG4iCisiXHQo0LzQtdC90YjQtSDQvdGW0LYg0L3QsCDQtNC10L3RjCwg0LnQvNC+0LLRltGA0L3QviDRh9C10YDQtdC3INC/0L7QvNC40LvQutC+0LLQuNC5INGH0LDRgSDQvdCwINCw0L/QsNGA0LDRgtC90L7QvNGDICIKKyLQs9C+0LTQuNC90L3QuNC60YMpICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozOTQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAiCisic2V0KVxuIgorbXNnc3RyICIiCisi0KfQsNGBINC+0YHRgtCw0L3QvdGM0L7Qs9C+INC30LDQv9C40YHRgyDRgdGD0L/QtdGA0LHQu9C+0LrRgyDQu9C10LbQuNGC0Ywg0YMg0LzQsNC50LHRg9GC0L3RjNC+0LzRgy5cbiIKKyJcdCjQvNC10L3RiNC1INC90ZbQtiDQvdCwINC00LXQvdGMLCDQudC80L7QstGW0YDQvdC+INGH0LXRgNC10Lcg0L/QvtC80LjQu9C60L7QstC40Lkg0YfQsNGBINC90LAg0LDQv9Cw0YDQsNGC0L3QvtC80YMgIgorItCz0L7QtNC40L3QvdC40LrRgykgICIKKworIy4gQC1leHBhbmRlZDogT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDAwCittc2dpZCAiT25lIG9yIG1vcmUgQGIgQGcgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAiCittc2dzdHIgIiIKKyLQntC00L3QsCDQsNCx0L4g0LTQtdC60ZbQu9GM0LrQsCDQutC+0L3RgtGA0L7Qu9GM0L3QuNGFINGB0YPQvCDQtNC10YHQutGA0LjQv9GC0L7RgNGW0LIg0LPRgNGD0L8g0LHQu9C+0LrRltCyINGUINC90LXQutC+0YDQtdC60YLQvdC40LzQuC4gICIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwNQorbXNnaWQgIlNldHRpbmcgZnJlZSBAaXMgY291bnQgdG8gJWogKHdhcyAlaSlcbiIKK21zZ3N0ciAi0JLRgdGC0LDQvdC+0LLQu9GO0ZTQvNC+INC00LvRjyDQutGW0LvRjNC60L7RgdGC0ZYg0LLRltC70YzQvdC40YUgQGlub2RlINC30L3QsNGH0LXQvdC90Y8gJWogKNCx0YPQu9C+ICVpKVxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgYmxvY2tzIGNvdW50IHRvICVjICh3YXMgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDEwCittc2dpZCAiU2V0dGluZyBmcmVlIEBicyBjb3VudCB0byAlYyAod2FzICViKVxuIgorbXNnc3RyICLQktGB0YLQsNC90L7QstC70Y7RlNC80L4g0LTQu9GPINC60ZbQu9GM0LrQvtGB0YLRliDQstGW0LvRjNC90LjRhSDQsdC70L7QutGW0LIg0LfQvdCw0YfQtdC90L3RjyAlYyAo0LHRg9C70L4gJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1ha2luZyBxdW90YSBpbm9kZSAlaSAoJVEpIGhpZGRlbi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTUKK21zZ2lkICJNYWtpbmcgQHEgQGkgJWkgKCVRKSBoaWRkZW4uXG4iCittc2dzdHIgItCg0L7QsdC40LzQviBAaSDQutCy0L7RgtC4ICVpICglUSkg0L/RgNC40YXQvtCy0LDQvdC40LwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyMAorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gICIKK21zZ3N0ciAi0JHQu9C+0LogTU1QINGB0YPQv9C10YDQsdC70L7QutGDINGUINC90LXQutC+0YDQtdC60YLQvdC40LwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyNQorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gICIKK21zZ3N0ciAi0JrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAgTU1QINGB0YPQv9C10YDQsdC70L7QutGDINGUINC90LXQutC+0YDQtdC60YLQvdC+0Y4uICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19vcGVuMjogJW1cbiIKK21zZ3N0ciAiZXh0MmZzX29wZW4yOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfY2hlY2tfZGVzYzogJW1cbiIKK21zZ3N0ciAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgNjRiaXQgZmlsZXN5c3RlbXMgbmVlZHMgZXh0ZW50cyB0byBhY2Nlc3MgdGhlIHdob2xlIGRpc2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQwCittc2dpZCAiQFMgNjRiaXQgZmlsZXN5c3RlbXMgbmVlZHMgZXh0ZW50cyB0byBhY2Nlc3MgdGhlIHdob2xlIGRpc2suICAiCittc2dzdHIgIiIKKyI2NC3QsdGW0YLQvtCy0ZYg0YTQsNC50LvQvtCy0ZYg0YHQuNGB0YLQtdC80Lgg0YHRg9C/0LXRgNCx0LvQvtC60YMg0L/QvtGC0YDQtdCx0YPRjtGC0Ywg0YDQvtC30YjQuNGA0LXQvdGMINC00LvRjyDQtNC+0YHRgtGD0L/RgyDQtNC+ICIKKyLRg9GB0YzQvtCz0L4g0LTQuNGB0LrQsC4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0NDUKK21zZ2lkICJGaXJzdF9tZXRhX2JnIGlzIHRvbyBiaWcuICAoJU4sIG1heCB2YWx1ZSAlZykuICAiCittc2dzdHIgIiIKKyLQl9C90LDRh9C10L3QvdGPIEZpcnN0X21ldGFfYmcg0ZQg0L3QsNC00YLQviDQstC10LvQuNC60LjQvC4gKCVOLCDQvNCw0LrRgdC40LzQsNC70YzQvdC40Lwg0ZQg0LfQvdCw0YfQtdC90L3RjyAlZykuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1MgorbXNnaWQgIlBhc3MgMTogQ2hlY2tpbmcgQGlzLCBAYnMsIGFuZCBzaXplc1xuIgorbXNnc3RyICLQn9GA0L7RhdGW0LQgMTog0L/QtdGA0LXQstGW0YDRj9GU0LzQviBAaSwg0LHQu9C+0LrQuCDRgtCwINGA0L7Qt9C80ZbRgNC4XG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1NgorbXNnaWQgIkByIGlzIG5vdCBhIEBkLiAgIgorbXNnc3RyICLQutC+0YDQtdC90LXQstC40LkgaW5vZGUg0L3QtSDRlCDQutCw0YLQsNC70L7Qs9C+0LwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2MQorbXNnaWQgIkByIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gICIKK21zZ3N0ciAiIgorItC00LvRjyDQutC+0YDQtdC90LXQstC+0LPQviBpbm9kZSDQstGB0YLQsNC90L7QstC70LXQvdC+IGR0aW1lICjQudC80L7QstGW0YDQvdC+LCDRh9C10YDQtdC3INC30LDRgdGC0LDRgNGW0LvRgyDQv9GA0L7Qs9GA0LDQvNGDICIKKyJta2UyZnMpLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNlcnZlZCBpbm9kZSAlaSAoJVEpIGhhcyBpbnZhbGlkIG1vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDY2Cittc2dpZCAiUmVzZXJ2ZWQgQGkgJWkgKCVRKSBoYXMgQG4gbW9kZS4gICIKK21zZ3N0ciAi0JTQu9GPINC30LDRgNC10LfQtdGA0LLQvtCy0LDQvdC+0LPQviBAaSAlaSAoJVEpINCy0LjQt9C90LDRh9C10L3QviDQvdC10LrQvtGA0LXQutGC0L3QuNC5INGA0LXQttC40LwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGRlbGV0ZWQgaW5vZGUgJWkgaGFzIHplcm8gZHRpbWUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBEIEBpICVpIGhhcyB6ZXJvIGR0aW1lLiAgIgorbXNnc3RyICLQtNC70Y8g0LLQuNC70YPRh9C10L3QvtCz0L4gQGkgJWkg0LLQuNC30L3QsNGH0LXQvdC+INC90YPQu9GM0L7QstC1INC30L3QsNGH0LXQvdC90Y8gZHRpbWUuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAiCittc2dzdHIgIkBpICVpINCy0LjQutC+0YDQuNGB0YLQvtCy0YPRlNGC0YzRgdGPLCDQsNC70LUg0LTQu9GPINC90YzQvtCz0L4g0LLRgdGC0LDQvdC+0LLQu9C10L3QviBkdGltZS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSB6ZXJvLWxlbmd0aCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGEgQHogQGQuICAiCittc2dzdHIgIkBpICVpINGUINC60LDRgtCw0LvQvtCz0L7QvCDQvdGD0LvRjNC+0LLQvtGXINC00L7QstC20LjQvdC4LiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4NgorbXNnaWQgIkBnICVnJ3MgQGIgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKyLQsdGW0YLQvtCy0LAg0LrQsNGA0YLQsCDQsdC70L7QutGW0LIg0LPRgNGD0L/QuCAlZyDQt9CwINCw0LTRgNC10YHQvtGOICViINC60L7QvdGE0LvRltC60YLRg9GUINC3INGW0L3RiNC40Lwg0LHQu9C+0LrQvtC8ICIKKyLRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4LlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5MQorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKyLQsdGW0YLQvtCy0LAg0LrQsNGA0YLQsCBpbm9kZSDQs9GA0YPQv9C4ICVnINGDICViINC60L7QvdGE0LvRltC60YLRg9GUINC3INGP0LrQuNC80L7RgdGMINGW0L3RiNC40Lwg0LHQu9C+0LrQvtC8INGE0LDQudC70L7QstC+0ZcgIgorItGB0LjRgdGC0LXQvNC4LlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIHRhYmxlIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDk2Cittc2dpZCAiQGcgJWcncyBAaSB0YWJsZSBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiIgorItGC0LDQsdC70LjRhtGPIGlub2RlINCz0YDRg9C/0LggJWcg0YMgJWIg0LrQvtC90YTQu9GW0LrRgtGD0ZQg0Lcg0L/QtdCy0L3QuNC8INCx0LvQvtC60L7QvCDRltC90YjQvtGXINGE0LDQudC70L7QstC+0ZcgIgorItGB0LjRgdGC0LXQvNC4LlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDEKK21zZ2lkICJAZyAlZydzIEBiIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICLQsdGW0YLQvtCy0YMg0LrQsNGA0YLRgyDQsdC70L7QutGW0LIg0LPRgNGD0L/QuCAlZyAoJWIpINC/0L7RiNC60L7QtNC20LXQvdC+LiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDYKK21zZ2lkICJAZyAlZydzIEBpIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICLQutCw0YDRgtGDIGlub2RlINCz0YDRg9C/0LggJWcgKCViKSDQv9C+0YjQutC+0LTQttC10L3Qvi4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfc2l6ZSBpcyAlSXMsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTEKK21zZ2lkICJAaSAlaSwgaV9zaXplIGlzICVJcywgQHMgJU4uICAiCittc2dzdHIgIkBpICVpLCBpX3NpemUg0LTQvtGA0ZbQstC90Y7RlCAlSXMsINC80LDRlCDQsdGD0YLQuCAlTi4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfYmxvY2tzIGlzICVJYiwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxNgorbXNnaWQgIkBpICVpLCBpX0BicyBpcyAlSWIsIEBzICVOLiAgIgorbXNnc3RyICJAaSAlaSwgaV9ibG9ja3Mg4oCUICVJYiwg0LzQsNGUINCx0YPRgtC4ICVOLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIxCittc2dpZCAiQEkgJUIgKCViKSBpbiBAaSAlaS4gICIKK21zZ3N0ciAi0L3QtdC60L7RgNC10LrRgtC90LUg0LfQvdCw0YfQtdC90L3RjyAlQiAoJWIpINGDIEBpICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIG92ZXJsYXBzIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI2Cittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiJUIgKCViKSDQv9C10YDQtdC60YDQuNCy0LDRlCDQvNC10YLQsNC00LDQvdGWINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80Lgg0YMgQGkgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiQGkgJWkg0LzRltGB0YLQuNGC0Ywg0L3QtdC60L7RgNC10LrRgtC90ZYg0LHQu9C+0LrQuC4gICIKKworIy4gQC1leHBhbmRlZDogVG9vIG1hbnkgaWxsZWdhbCBibG9ja3MgaW4gaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGlsbGVnYWwgQGJzIGluIEBpICVpLlxuIgorbXNnc3RyICLQoyBAaSAlaSDQt9Cw0LHQsNCz0LDRgtC+INC90LXQv9GA0LjQv9GD0YHRgtC40LzQuNGFINCx0LvQvtC60ZbQsi5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGJhZCBibG9jayBpbm9kZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDEKK21zZ2lkICJASSAlQiAoJWIpIGluIGJhZCBAYiBAaS4gICIKK21zZ3N0ciAi0L3QtdC60L7RgNC10LrRgtC90LUgJUIgKCViKSDRgyDQv9C+0LzQuNC70LrQvtCy0L7QvNGDINCx0LvQvtC60L7QstC+0LzRgyBAaS4gICIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0NgorbXNnaWQgIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAi0J/QvtC80LjQu9C60L7QstC40LkgQGkg0LHQu9C+0LrRgyDQvNGW0YHRgtC40YLRjCDQvdC10LrQvtGA0LXQutGC0L3RliDQsdC70L7QutC4LiAgIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrIGluIHVzZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTEKK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAi0JLQuNC60L7RgNC40YHRgtC+0LLRg9GU0YLRjNGB0Y8g0LTRg9Cx0LvRltC60LDRgiDQsNCx0L4g0L/QvtC80LjQu9C60L7QstC40Lkg0LHQu9C+0LohXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayAlYiB1c2VkIGFzIGJhZCBibG9jayBpbm9kZSBpbmRpcmVjdCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTYKK21zZ2lkICJCYWQgQGIgJWIgdXNlZCBhcyBiYWQgQGIgQGkgaW5kaXJlY3QgQGIuICAiCittc2dzdHIgIiIKKyLQn9C+0YjQutC+0LTQttC10L3QuNC5INCx0LvQvtC6ICViINCy0LjQutC+0YDQuNGB0YLQsNC90L4g0Y/QuiDQvtC/0L7RgdC10YDQtdC00LrQvtCy0LDQvdC40Lkg0LHQu9C+0LogQGkg0L/QvtGI0LrQvtC00LbQtdC90L7Qs9C+ICIKKyLQsdC70L7QutGDLiAgIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbgorIy4gQC1leHBhbmRlZDogc2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaW4gdGhlIGZpbGVzeXN0ZW0uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYxCittc2dpZCAiIgorIlxuIgorIlRoZSBiYWQgQGIgQGkgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4iCisic2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbiIKKyJpbiB0aGUgQGYuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQmdC80L7QstGW0YDQvdC+LCDQv9C+0LzQuNC70LrQvtCy0LjQuSBAaSDQsdC70L7QutGDINCx0YPQu9C+INC/0L7RiNC60L7QtNC20LXQvdC+LiDQktCw0Lwg0LLQsNGA0YLQvlxuIgorItC30YPQv9C40L3QuNGC0LjRgdGPINGWINC30LDQv9GD0YHRgtC40YLQuCBlMmZzY2sgLWMg0LTQu9GPINC/0L7RiNGD0LrRgyDQv9C+0LzQuNC70LrQvtCy0LjRhSDQsdC70L7QutGW0LJcbiIKKyLRgyDRhNCw0LnQu9C+0LLRltC5INGB0LjRgdGC0LXQvNGWLlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogSWYgdGhlIGJsb2NrIGlzIHJlYWxseSBiYWQsIHRoZSBmaWxlc3lzdGVtIGNhbiBub3QgYmUgZml4ZWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTY4Cittc2dpZCAiIgorIlxuIgorIklmIHRoZSBAYiBpcyByZWFsbHkgYmFkLCB0aGUgQGYgY2FuIG5vdCBiZSBmaXhlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorItCv0LrRidC+INCx0LvQvtC6INGB0LXRgNC50L7Qt9C90L4g0L/QvtGI0LrQvtC00LbQtdC90L4sINGE0LDQudC70L7QstGDINGB0LjRgdGC0LXQvNGDINC90LUg0LzQvtC20L3QsCDQsdGD0LTQtSDQstC40L/RgNCw0LLQuNGC0LguXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFlvdSBjYW4gcmVtb3ZlIHRoaXMgYmxvY2sgZnJvbSB0aGUgYmFkIGJsb2NrIGxpc3QgYW5kIGhvcGVcbgorIy4gQC1leHBhbmRlZDogdGhhdCB0aGUgYmxvY2sgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzMKK21zZ2lkICIiCisiWW91IGNhbiByZW1vdmUgdGhpcyBAYiBmcm9tIHRoZSBiYWQgQGIgbGlzdCBhbmQgaG9wZVxuIgorInRoYXQgdGhlIEBiIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorItCS0Lgg0LzQvtC20LXRgtC1INCy0LjQu9GD0YfQuNGC0Lgg0YbQtdC5INCx0LvQvtC6INC30ZYg0YHQv9C40YHQutGDINC/0L7RiNC60L7QtNC20LXQvdC40YUg0LHQu9C+0LrRltCyINGWINGB0L/QvtC00ZbQstCw0YLQuNGB0Y8g0L3QsCAiCisi0YLQtSxcbiIKKyLRidC+INCx0LvQvtC6INC90LDRgdC/0YDQsNCy0LTRliDQvdC1INC/0L7RiNC60L7QtNC20LXQvdC+LiDQktGC0ZbQvCwg0LPQsNGA0LDQvdGC0YPQstCw0YLQuCDRhtC1INC90LXQvNC+0LbQu9C40LLQvi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIHByaW1hcnkgc3VwZXJibG9jayAoJWIpIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzkKK21zZ2lkICJUaGUgcHJpbWFyeSBAUyAoJWIpIGlzIG9uIHRoZSBiYWQgQGIgbGlzdC5cbiIKK21zZ3N0ciAi0J7RgdC90L7QstC90LjQuSDRgdGD0L/QtdGA0LHQu9C+0LogKCViKSDQv9C10YDQtdCx0YPQstCw0ZQg0YMg0YHQv9C40YHQutGDINC/0L7QvNC40LvQutC+0LLQuNGFINCx0LvQvtC60ZbQsi5cbiIKKworIy4gQC1leHBhbmRlZDogQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgZ3JvdXAgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTg0Cittc2dpZCAiQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgQGcgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBAYiBsaXN0XG4iCittc2dzdHIgIiIKKyLQkdC70L7QuiAlYiDRgyDQvtGB0L3QvtCy0L3QuNGFINC00LXRgdC60YDQuNC/0YLQvtGA0LDRhSDQs9GA0YPQvyDQv9C10YDQtdCx0YPQstCw0ZQg0YMg0YHQv9C40YHQutGDINC/0L7QvNC40LvQutC+0LLQuNGFINCx0LvQvtC60ZbQslxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIHN1cGVyYmxvY2sgKCViKSBpcyBiYWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkwCittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBAUyAoJWIpIGlzIGJhZC5cbiIKK21zZ3N0ciAi0J/QvtC/0LXRgNC10LTQttC10L3QvdGPOiDRgdGD0L/QtdGA0LHQu9C+0Log0LPRgNGD0L/QuCAlZyAoJWIpINGUINC/0L7QvNC40LvQutC+0LLQuNC8LlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIGdyb3VwIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBibG9jayAoJWIpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5NQorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgQGcgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIEBiICglYikuXG4iCittc2dzdHIgIiIKKyLQn9C+0L/QtdGA0LXQtNC20LXQvdC90Y86INC60L7Qv9GW0Y8g0LTQtdGB0LrRgNC40L/RgtC+0YDRltCyINCz0YDRg9C/INCz0YDRg9C/0LggJWcg0LzRltGB0YLQuNGC0Ywg0L/QvtGI0LrQvtC00LbQtdC90LjQuSDQsdC70L7QuiAiCisiKCViKS5cbiIKKworIy4gQC1leHBhbmRlZDogUHJvZ3JhbW1pbmcgZXJyb3I/ICBibG9jayAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX2Jsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwMQorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yPyAgQGIgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9AYi5cbiIKK21zZ3N0ciAiIgorItCf0L7QvNC40LvQutCwINGDINC/0YDQvtCz0YDQsNC80ZY/INCR0LvQvtC6IOKEliViINCy0LjRgtGA0LXQsdGD0LLQsNC90L4g0LHQtdC3INC/0YDQuNGH0LjQvdC4INGDIHByb2Nlc3NfYmFkX2Jsb2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nICVOIGNvbnRpZ3VvdXMgYmxvY2socykgaW4gYmxvY2sgZ3JvdXAgJWcgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNworbXNnaWQgIkBBICVOIGNvbnRpZ3VvdXMgQGIocykgaW4gQGIgQGcgJWcgZm9yICVzOiAlbVxuIgorbXNnc3RyICIiCisi0L/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDQvtGC0YDQuNC80LDQvdC90Y8gJU4g0L3QtdC/0LXRgNC10YDQstC90LjRhSDQsdC70L7QutGW0LIg0YMg0LPRgNGD0L/RliDQsdC70L7QutGW0LIgJWcg0LTQu9GPICVzOiAiCisiJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGIgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4iCittc2dzdHIgItC/0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0L7RgtGA0LjQvNCw0L3QvdGPINCx0YPRhNC10YDQsCDQsdC70L7QutGW0LIg0LTQu9GPINC/0LXRgNC10YHRg9Cy0LDQvdC90Y8gJXNcbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTcKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuIgorbXNnc3RyICLQn9C10YDQtdGB0YPQstCw0L3QvdGPICVnINCz0YDRg9C/0LggJXMg0LcgJWIg0LTQviAlYy4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIHRvICVjLi4uXG4iCittc2dzdHIgItCf0LXRgNC10YHRg9Cy0LDQvdC90Y8gJWcg0LPRgNGD0L/QuCAlcyDQtNC+ICVjLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrICViIG9mICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyNworbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIEBiICViIG9mICVzOiAlbVxuIgorbXNnc3RyICLQn9C+0L/QtdGA0LXQtNC20LXQvdC90Y86INC90LUg0LLQtNCw0LvQvtGB0Y8g0L/RgNC+0YfQuNGC0LDRgtC4INCx0LvQvtC6ICViINC3ICVzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgYmxvY2sgJWIgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzMgorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBAYiAlYiBmb3IgJXM6ICVtXG4iCittc2dzdHIgItCf0L7Qv9C10YDQtdC00LbQtdC90L3Rjzog0L3QtSDQstC00LDQu9C+0YHRjyDQt9Cw0L/QuNGB0LDRgtC4INCx0LvQvtC6ICViINC00LvRjyAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzcgZTJmc2NrL3Byb2JsZW0uYzoxNTAxCittc2dpZCAiQEEgQGkgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAi0L/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDQvtGC0YDQuNC80LDQvdC90Y8g0LHRltGC0L7QstC+0Zcg0LrQsNGA0LggQGkgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDIKK21zZ2lkICJAQSBAYiBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICLQv9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINC+0YLRgNC40LzQsNC90L3RjyDQutCw0YDRgtC4INCx0LvQvtC60ZbQsiAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbiIKK21zZ3N0ciAi0L/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDQvtGC0YDQuNC80LDQvdC90Y8g0LTQsNC90LjRhSDRidC+0LTQviDQv9C+0YHQuNC70LDQvdC90Y8gaWNvdW50OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGRpcmVjdG9yeSBibG9jayBhcnJheTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGQgQGIgYXJyYXk6ICVtXG4iCittc2dzdHIgItC/0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0L7RgtGA0LjQvNCw0L3QvdGPINC80LDRgdC40LLRgyDQsdC70L7QutGW0LIg0LrQsNGC0LDQu9C+0LPRltCyOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0YHQutCw0L3Rg9Cy0LDQvdC90Y8gQGkgKCVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWk6ICVtXG4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0LLQuNC60L7QvdCw0L3QvdGPINGW0YLQtdGA0LDRhtGW0Zcg0L3QsNC0INCx0LvQvtC60LDQvNC4INGDIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGlub2RlIGNvdW50IGluZm9ybWF0aW9uIChpbm9kZT0laSwgY291bnQ9JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2NworbXNnaWQgIkVycm9yIHN0b3JpbmcgQGkgY291bnQgaW5mb3JtYXRpb24gKEBpPSVpLCBjb3VudD0lTik6ICVtXG4iCittc2dzdHIgIiIKKyLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQt9Cx0LXRgNC10LPRgtC4INC00LDQvdGWINGJ0L7QtNC+INC60ZbQu9GM0LrQvtGB0YLRliBAaSAoQGk9JWksINC60ZbQu9GM0LrRltGB0YLRjD0iCisiJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGJsb2NrPSViLCBudW09JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3MgorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKK21zZ3N0ciAiIgorItCf0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INC30LHQtdGA0LXQs9GC0Lgg0LTQsNC90ZYg0YnQvtC00L4g0LHQu9C+0LrRltCyINC60LDRgtCw0LvQvtCz0YMgKEBpPSVpLCDQsdC70L7Quj0lYiwg0LotIgorItGC0Yw9JU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGH0LjRgtCw0L3QvdGPIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgIgorbXNnc3RyICLQlNC70Y8gQGkgJWkg0LLRgdGC0LDQvdC+0LLQu9C10L3QviDQv9GA0LDQv9C+0YDQtdGG0YwgaW1hZ2ljLiAgIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoaW5vZGUgJWkpIGhhcyBpbW11dGFibGVcbgorIy4gQC1leHBhbmRlZDogb3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTcGVjaWFsIChAdi9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChAaSAlaSkgaGFzIGltbXV0YWJsZVxuIgorIm9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgIgorbXNnc3RyICIiCisi0JTQu9GPINGB0L/QtdGG0ZbQsNC70YzQvdC+0LPQviDRhNCw0LnQu9CwICjQv9GA0LjRgdGC0YDQvtGOL9GB0L7QutC10YLQsC9maWZvL9GB0LjQvNCy0L7Qu9GW0YfQvdC+0LPQviDQv9C+0YHQuNC70LDQvdC90Y8oQGkgJWkpKVxuIgorItCy0YHRgtCw0L3QvtCy0LvQtdC90L4g0L/RgNCw0L/QvtGA0LXRhtGMINC90LXQt9C80ZbQvdC90L7RgdGC0ZYg0LDQsdC+INC70LjRiNC1INC00L7Qv9C40YHRg9Cy0LDQvdC90Y8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBjb21wcmVzc2lvbiBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgY29tcHJlc3Npb24gc3VwcG9ydC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEBjaW9uIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgQGNpb24gc3VwcG9ydC4gICIKK21zZ3N0ciAiIgorItC00LvRjyBAaSAlaSDQstGB0YLQsNC90L7QstC70LXQvdC+INC/0YDQsNC/0L7RgNC10YbRjCDRgdGC0LjRgdC60LDQvdC90Y8g0YMg0YTQsNC50LvQvtCy0ZbQuSDRgdC40YHRgtC10LzRliwg0LTQtSDQv9GW0LTRgtGA0LjQvNC60LggIgorItGB0YLQuNGB0LrQsNC90L3RjyDQvdC1INC/0LXRgNC10LTQsdCw0YfQtdC90L4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmbykgaW5vZGUgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvKSBAaSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gICIKK21zZ3N0ciAi0KHQv9C10YbRltCw0LvRjNC90LjQuSBAaSAo0L/RgNC40YHRgtGA0ZbQuS/RgdC+0LrQtdGCL2ZpZm8pICVpINC80LDRlCDQvdC10L3Rg9C70YzQvtCy0LjQuSDRgNC+0LfQvNGW0YAuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzEyCittc2dpZCAiQGogQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkBpINC20YPRgNC90LDQu9GDINC90LUg0LLQuNC60L7RgNC40YHRgtC+0LLRg9GU0YLRjNGB0Y8sINCw0LvQtSDQvNGW0YHRgtC40YLRjCDQtNCw0L3Rli4gICIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxNworbXNnaWQgIkBqIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgItC20YPRgNC90LDQuyDQvdC1INGUINC30LLQuNGH0LDQudC90LjQvCDRhNCw0LnQu9C+0LwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSB3YXMgcGFydCBvZiB0aGUgQG8gQGkgbGlzdC4gICIKK21zZ3N0ciAiQGkgJWkg0ZQg0YfQsNGB0YLQuNC90L7RjiDRgdC/0LjRgdC60YMg0L7RgdC40YDQvtGC0ZbQu9C40YUgQGkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzI4Cittc2dpZCAiQGlzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gICIKK21zZ3N0ciAiIgorItCy0LjRj9Cy0LvQtdC90L4gQGksINGP0LrRliDQsdGD0LvQuCDRh9Cw0YHRgtC40L3QvtGOINC/0L7QsuKAmdGP0LfQsNC90L7Qs9C+INGB0L/QuNGB0LrRgyDQv9C+0YjQutC+0LTQttC10L3QuNGFINC+0YHQuNGA0L7RgtGW0LvQuNGFICIKKyLQsdC70L7QutGW0LIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMzCittc2dpZCAiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iCittc2dzdHIgItC/0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0YDQvtC30LzRltGJ0LXQvdC90Y8g0YHRgtGA0YPQutGC0YPRgNC4INC60ZbQu9GM0LrQvtGB0YLRliDQv9C+0YHQuNC70LDQvdGMICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGZvciBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MzgKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViIGZvciBAaSAlaS4gICIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDRh9C40YLQsNC90L3RjyDQsdC70L7QutGDINCw0YLRgNC40LHRg9GC0ZbQsiAlYiDQtNC70Y8gQGkgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQzCittc2dpZCAiQGkgJWkgaGFzIGEgYmFkIEBhIEBiICViLiAgIgorbXNnc3RyICJAaSAlaSDQvNGW0YHRgtC40YLRjCDQv9C+0YjQutC+0LTQttC10L3QuNC5INCx0LvQvtC6INGA0L7Qt9GI0LjRgNC10L3QvtCz0L4g0LDRgtGA0LjQsdGD0YLQsCAlYi4gICIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDgKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0YfQuNGC0LDQvdC90Y8g0LHQu9C+0LrRgyDRgNC+0LfRiNC40YDQtdC90LjRhSDQsNGC0YDQuNCx0YPRgtGW0LIgJWIgKCVtKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTMKK21zZ2lkICJAYSBAYiAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBAcyAlTi4gICIKK21zZ3N0ciAiIgorItGDINCx0LvQvtC60YMg0YDQvtC30YjQuNGA0LXQvdC+0LPQviDQsNGC0YDQuNCx0YPRgtCwICViINC60ZbQu9GM0LrRltGB0YLRjCDQv9C+0YHQuNC70LDQvdGMINC00L7RgNGW0LLQvdGO0ZQgJXIsINCwINC80LDRlCDQsdGD0YLQuCAiCisiJU4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzU4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINC30LDQv9C40YHRg9Cy0LDQvdC90Y8g0LHQu9C+0LrRgyDRgNC+0LfRiNC40YDQtdC90LjRhSDQsNGC0YDQuNCx0YPRgtGW0LIgJWIgKCVtKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyBoX2Jsb2NrcyA+IDEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzYzCittc2dpZCAiQGEgQGIgJWIgaGFzIGhfQGJzID4gMS4gICIKK21zZ3N0ciAi0LHQu9C+0Log0YDQvtC30YjQuNGA0LXQvdC+0LPQviDQsNGC0YDQuNCx0YPRgtCwICViINC80LDRlCBoX2Jsb2NrcyA+IDEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2OAorbXNnaWQgIkBBIEBhIEBiICViLiAgIgorbXNnc3RyICLQv9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDRgNC+0LfQvNGW0YnQtdC90L3RjyDQsdC70L7QutGDINGA0L7Qt9GI0LjRgNC10L3QvtCz0L4g0LDRgtGA0LjQsdGD0YLQsCAlYi4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzMKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAiCittc2dzdHIgItCx0LvQvtC6INGA0L7Qt9GI0LjRgNC10L3QvtCz0L4g0LDRgtGA0LjQsdGD0YLQsCAlYiDQv9C+0YjQutC+0LTQttC10L3QvtCz0L4gKNC60L7QvdGE0LvRltC60YIg0YDQvtC30LzRltGJ0LXQvdC90Y8pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCBuYW1lKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzgKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiBuYW1lKS4gICIKK21zZ3N0ciAi0LHQu9C+0Log0YDQvtC30YjQuNGA0LXQvdC40YUg0LDRgtGA0LjQsdGD0YLRltCyICViINC/0L7RiNC60L7QtNC20LXQvdC+ICjQvdC10LrQvtGA0LXQutGC0L3QsCDQvdCw0LfQstCwKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgdmFsdWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4MworbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIHZhbHVlKS4gICIKK21zZ3N0ciAi0LHQu9C+0Log0YDQvtC30YjQuNGA0LXQvdC40YUg0LDRgtGA0LjQsdGD0YLRltCyICViINC/0L7RiNC60L7QtNC20LXQvdC+ICjQvdC10LrQvtGA0LXQutGC0L3QtSDQt9C90LDRh9C10L3QvdGPKS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgdG9vIGJpZy4gICIKK21zZ3N0ciAiQGkgJWkg0ZQg0L3QsNC00YLQviDQstC10LvQuNC60LjQvC4gICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBjYXVzZXMgZGlyZWN0b3J5IHRvIGJlIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzkyCittc2dpZCAiJUIgKCViKSBjYXVzZXMgQGQgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiJUIgKCViKSDRgNC+0LHQuNGC0Ywg0LrQsNGC0LDQu9C+0LMg0L3QsNC00YLQviDQstC10LvQuNC60LjQvC4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OTcKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBmaWxlIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikg0YDQvtCx0LjRgtGMINGE0LDQudC7INC90LDQtNGC0L4g0LLQtdC70LjQutC40LwuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAyCittc2dpZCAiJUIgKCViKSBjYXVzZXMgc3ltbGluayB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpINGA0L7QsdC40YLRjCDRgdC40LzQstC+0LvRltGH0L3QtSDQv9C+0YHQuNC70LDQvdC90Y8g0L3QsNC00YLQviDQstC10LvQuNC60LjQvC4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuIgorbXNnc3RyICIiCisi0LTQu9GPIEBpICVpINCy0YHRgtCw0L3QvtCy0LvQtdC90L4g0L/RgNCw0L/QvtGA0LXRhtGMIElOREVYX0ZMINGDINGE0LDQudC70L7QstGW0Lkg0YHQuNGB0YLQtdC80ZYsINC00LUg0L/RltC00YLRgNC40LzQutC4ICIKKyJodHJlZSDQvdC1INC/0LXRgNC10LTQsdCw0YfQtdC90L4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIgorbXNnc3RyICLQtNC70Y8gQGkgJWkg0LLRgdGC0LDQvdC+0LLQu9C10L3QviDQv9GA0LDQv9C+0YDQtdGG0YwgSU5ERVhfRkwsINCw0LvQtSDQstGW0L0g0L3QtSDRlCDQutCw0YLQsNC70L7Qs9C+0LwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCByb290IG5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIGhhcyBhbiBAbiByb290IG5vZGUuXG4iCittc2dzdHIgImlub2RlINC60LDRgtCw0LvQvtCz0YMgSFRSRUUgJWkg0LzQsNGUINC90LXQutC+0YDQtdC60YLQvdC40Lkg0LrQvtGA0LXQvdC10LLQuNC5INCy0YPQt9C+0LsuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjIKK21zZ2lkICJAaCAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbiIKK21zZ3N0ciAiQGggJWkg0L3QsNC70LXQttC40YLRjCDQtNC+INC90LXQv9GW0LTRgtGA0LjQvNGD0LLQsNC90L7RlyDQstC10YDRgdGW0Zcg0YXQtdGI0YMgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuIgorbXNnc3RyICIiCisiaW5vZGUg0LrQsNGC0LDQu9C+0LPRgyBIVFJFRSAlaSDQstC40LrQvtGA0LjRgdGC0L7QstGD0ZQg0L3QtdGB0YPQvNGW0YHQvdC40Lkg0L/RgNCw0L/QvtGA0LXRhtGMINC60L7RgNC10L3QtdCy0L7Qs9C+INCy0YPQt9C70LAgIgorImh0cmVlLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzIKK21zZ2lkICJAaCAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuIgorbXNnc3RyICIiCisiaW5vZGUg0LrQsNGC0LDQu9C+0LPRgyBIVFJFRSAlaSDQvNCw0ZQg0YDRltCy0LXQvdGMINCy0LrQu9Cw0LTQtdC90L7RgdGC0ZYg0YMg0ZbRlNGA0LDRgNGF0ZbRlyAoJU4pLCDRj9C60LjQuSDRlCDQvdCw0LTRgtC+ICIKKyLQstC10LvQuNC60LjQvFxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGFuIGluZGlyZWN0IGJsb2NrICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIG1ldGFkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzNworbXNnaWQgIiIKKyJCYWQgQGIgQGkgaGFzIGFuIGluZGlyZWN0IEBiICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuIgorIkBmIG1ldGFkYXRhLiAgIgorbXNnc3RyICIiCisiQGkg0L/QvtC80LjQu9C60L7QstC+0LPQviDQsdC70L7QutGDINC80ZbRgdGC0LjRgtGMINC+0L/QvtGB0LXRgNC10LTQutC+0LLQsNC90LjQuSDQsdC70L7QuiAoJWIpLCDRj9C60LjQuSDQutC+0L3RhNC70ZbQutGC0YPRlCDQt1xuIgorItC80LXRgtCw0LTQsNC90LjQvNC4INGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LguICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSAocmUpY3JlYXRpb24gZmFpbGVkOiAlbS4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6ZSBAaSAocmUpY3JlYXRpb24gZmFpbGVkOiAlbS4iCittc2dzdHIgItCf0L7QvNC40LvQutCwICjQv9C+0LLRgtC+0YDQvdC+0LPQvikg0YHRgtCy0L7RgNC10L3QvdGPIEBpINC30LzRltC90Lgg0YDQvtC30LzRltGA0ZbQsjogJW0uIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDgKK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkBpICVpINC80LDRlCDQvdCw0LTQvNGW0YDQvdC40Lkg0YDQvtC30LzRltGAICglSVMpLCDRhtC1INC90LXQutC+0YDQtdC60YLQvdC+XG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICLRgNC+0LfRiNC40YDQtdC90LjQuSDQsNGC0YDQuNCx0YPRgiDRgyBAaSAlaSDQvNCw0ZQg0L3QtdC60L7RgNC10LrRgtC90LUg0LfQvdCw0YfQtdC90L3RjyBuYW1lbGVuICglTilcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTgKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICLRgNC+0LfRiNC40YDQtdC90LjQuSDQsNGC0YDQuNCx0YPRgiDRgyBAaSAlaSDQvNCw0ZQg0L3QtdC60L7RgNC10LrRgtC90LjQuSDQstGW0LTRgdGC0YPQvyDQt9C90LDRh9C10L3QvdGPICglTilcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIGJsb2NrICglTikgd2hpY2ggaXMgaW52YWxpZCAobXVzdCBiZSAwKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIEBiICglTikgd2hpY2ggaXMgQG4gKG11c3QgYmUgMClcbiIKK21zZ3N0ciAiIgorItGA0L7Qt9GI0LjRgNC10L3QuNC5INCw0YLRgNC40LHRg9GCINGDIEBpICVpINC80LDRlCDQvdC10LrQvtGA0LXQutGC0L3QuNC5INCx0LvQvtC6INC30L3QsNGH0LXQvdC90Y8gKCVOKSwg0LzQsNGUINCx0YPRgtC4IDBcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODY4Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgItGA0L7Qt9GI0LjRgNC10L3QuNC5INCw0YLRgNC40LHRg9GCINGDIEBpICVpINC80LDRlCDQvdC10LrQvtGA0LXQutGC0L3QuNC5INGA0L7Qt9C80ZbRgCDQt9C90LDRh9C10L3QvdGPICglTilcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODczCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgItGA0L7Qt9GI0LjRgNC10L3QuNC5INCw0YLRgNC40LHRg9GCINGDIEBpICVpINC80LDRlCDQvdC10LrQvtGA0LXQutGC0L3QuNC5INGF0LXRiCAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzgKK21zZ2lkICJAaSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4iCittc2dzdHIgIkBpICVpINGUICVJdCwg0LDQu9C1LCDQt9C00LDRlNGC0YzRgdGPLCDQstGW0L0g0L3QsNGB0L/RgNCw0LLQtNGWINGUINC60LDRgtCw0LvQvtCz0L7QvC5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIGV4dGVudCB0cmVlIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgQHggdHJlZSBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDRh9C40YLQsNC90L3RjyDRgNC+0LfRiNC40YDQtdC90L7RlyDRltGU0YDQsNGA0YXRltGXINGDIGlub2RlICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIGlub2RlICVpXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4OAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIEBpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCittc2dzdHIgIiIKKyLQndC1INCy0LTQsNC70L7RgdGPINGW0YLQtdGA0LDRgtC40LLQvdC+INC/0YDQvtC50YLQuNGB0Y8g0LfQsCDRgNC+0LfRiNC40YDQtdC90L3Rj9C80Lgg0YMgQGkgJWlcbiIKKyJcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIGludmFsaWQgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTQKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIEBuIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJAaSAlaSDQvNCw0ZQg0L3QtdC60L7RgNC10LrRgtC90LUg0YDQvtC30YjQuNGA0LXQvdC90Y9cbiIKKyJcdCjQu9C+0LPRltGH0L3QuNC5INCx0LvQvtC6ICVjLCDQvdC10LrQvtGA0LXQutGC0L3QuNC5INGE0ZbQt9C40YfQvdC40Lkg0LHQu9C+0LogJWIsINC00L7QstC20LjQvdCwICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGludmFsaWQgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5OQorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIEBuIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIkBpICVpINC80LDRlCDQvdC10LrQvtGA0LXQutGC0L3QtSDRgNC+0LfRiNC40YDQtdC90L3Rj1xuIgorIlx0KNC70L7Qs9GW0YfQvdC40Lkg0LHQu9C+0LogJWMsINGE0ZbQt9C40YfQvdC40Lkg0LHQu9C+0LogJWIsINC90LXQutC+0YDQtdC60YLQvdCwINC00L7QstC20LjQvdCwICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbiIKK21zZ3N0ciAiIgorItC00LvRjyBAaSAlaSDQstGB0YLQsNC90L7QstC70LXQvdC+INC/0YDQsNC/0L7RgNC10YbRjCBFWFRFTlRTX0ZMINC90LAg0YTQsNC50LvQvtCy0ZbQuSDRgdC40YHRgtC10LzRliDQsdC10Lcg0L/RltC00YLRgNC40LzQutC4ICIKKyLRgNC+0LfRiNC40YDQtdC90YwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBzdXBlcmJsb2NrIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBAUyBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuIgorbXNnc3RyICIiCisiQGkgJWkg0LfQsNC/0LjRgdCw0L3QviDRgyDRhNC+0YDQvNCw0YLRliDRgNC+0LfRiNC40YDQtdC90L3Rjywg0LDQu9C1INGDINGB0YPQv9C10YDQsdC70L7RhtGWINC90LXQvNCw0ZQg0LzQvtC20LvQuNCy0L7RgdGC0ZYgIgorIkVYVEVOVFNcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4iCittc2dzdHIgIkBpICVpINC90LUg0LzQsNGUIEVYVEVOVF9GTCwg0LDQu9C1INC50L7Qs9C+INC30LDQv9C40YHQsNC90L4g0YMg0YTQvtGA0LzQsNGC0ZYg0YDQvtC30YjQuNGA0LXQvdC90Y9cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdCBzeW1saW5rICVpIGhhcyBFWFRFTlRfRkwgc2V0LiAgIgorbXNnc3RyICLQlNC70Y8g0YjQstC40LTQutC+0LPQviDRgdC40LzQstC+0LvRltGH0L3QvtCz0L4g0L/QvtGB0LjQu9Cw0L3QvdGPICVpINCy0YHRgtCw0L3QvtCy0LvQtdC90L4gRVhURU5UX0ZMLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyNAorbXNnaWQgIiIKKyJAaSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiQGkgJWkg0LzQsNGUINC90LXQstC/0L7RgNGP0LTQutC+0LLQsNC90ZYg0YDQvtC30YjQuNGA0LXQvdC90Y9cbiIKKyJcdCjQvdC10LrQvtGA0LXQutGC0L3QuNC5INC70L7Qs9GW0YfQvdC40Lkg0LHQu9C+0LogJWMsINGE0ZbQt9C40YfQvdC40Lkg0LHQu9C+0LogJWIsINC00L7QstC20LjQvdCwICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyOAorbXNnaWQgIkBpICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4iCittc2dzdHIgIkBpICVpINC80ZbRgdGC0LjRgtGMINC90LXQutC+0YDQtdC60YLQvdC40Lkg0LLRg9C30L7QuyDRgNC+0LfRiNC40YDQtdC90L3RjyAoYmxrICViLCBsYmxrICVjKVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzMworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgQGIgQEI6ICVtXG4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0L/QtdGA0LXRgtCy0L7RgNC10L3QvdGPINCx0ZbRgtC+0LLQvtGXINC60LDRgNGC0Lgg0LHQu9C+0LrRltCyINC/0ZbQtNC60LvQsNGB0YLQtdGA0LA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTM4Cittc2dpZCAiQHEgQGkgaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiQGkg0LrQstC+0YLQuCDQvdC1INGUINC30LLQuNGH0LDQudC90LjQvCDRhNCw0LnQu9C+0LwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0MworbXNnaWQgIkBxIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJAaSDQutCy0L7RgtC4INC90LUg0LLQuNC60L7RgNC40YHRgtC+0LLRg9GU0YLRjNGB0Y8sINCw0LvQtSDQvNGW0YHRgtC40YLRjCDQtNCw0L3Rli4gICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDgKK21zZ2lkICJAcSBAaSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgIgorbXNnc3RyICJAaSDQutCy0L7RgtC4INGUINCy0LjQtNC40LzQuNC8INC60L7RgNC40YHRgtGD0LLQsNGH0LXQstGWLiAgIgorCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGxvb2tzIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUzCittc2dpZCAiVGhlIGJhZCBAYiBAaSBsb29rcyBAbi4gICIKK21zZ3N0ciAi0J/QvtC80LjQu9C60L7QstC40LkgQGkg0LHQu9C+0LrRgyDQstC40LPQu9GP0LTQsNGUINC90LXQutC+0YDQtdC60YLQvdC40LwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTgKK21zZ2lkICIiCisiQGkgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViKVxuIgorbXNnc3RyICIiCisiQGkgJWkg0LzQsNGUINGA0L7Qt9GI0LjRgNC10L3QvdGPINC90YPQu9GM0L7QstC+0Zcg0LTQvtCy0LbQuNC90LhcbiIKKyJcdCjQvdC10LrQvtGA0LXQutGC0L3QuNC5INC70L7Qs9GW0YfQvdC40Lkg0LHQu9C+0LogJWMsINGE0ZbQt9C40YfQvdC40Lkg0LHQu9C+0LogJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEludGVyaW9yIGV4dGVudCBub2RlIGxldmVsICVOIG9mIGlub2RlICVpOlxuCisjLiBALWV4cGFuZGVkOiBMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NjUKK21zZ2lkICIiCisiSW50ZXJpb3IgQHggbm9kZSBsZXZlbCAlTiBvZiBAaSAlaTpcbiIKKyJMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gICIKK21zZ3N0ciAiIgorItCS0L3Rg9GC0YDRltGI0L3RltC5INGA0L7Qt9GI0LjRgNC10L3QuNC5INGA0ZbQstC10L3RjCDQstGD0LfQu9CwICVOIEBpICVpOlxuIgorItCb0L7Qs9GW0YfQvdC40Lkg0L/QvtGH0LDRgtC+0LogJWIg0L3QtSDQstGW0LTQv9C+0LLRltC00LDRlCDQu9C+0LPRltGH0L3QvtC80YMg0L/QvtGH0LDRgtC60YMgJWMg0L3QsCDQvdCw0YHRgtGD0L/QvdC+0LzRgyDRgNGW0LLQvdGWLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzEKK21zZ2lkICIiCisiQGkgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIkBpICVpLCDQutGW0L3QtdGG0Ywg0YDQvtC30YjQuNGA0LXQvdC90Y8g0L/QtdGA0LXQstC40YnRg9GUINC00L7Qt9Cy0L7Qu9C10L3QtSDQt9C90LDRh9C10L3QvdGPXG4iCisiXHQo0LvQvtCz0ZbRh9C90LjQuSDQsdC70L7QuiAlYywg0YTRltC30LjRh9C90LjQuSDQsdC70L7QuiAlYiwg0LTQvtCy0LbQuNC90LAgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBibG9jayAlYiBzaG91bGQgYmUgYXQgYmxvY2sgJWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTc3Cittc2dpZCAiQGQgQGkgJWkgQGIgJWIgc2hvdWxkIGJlIGF0IEBiICVjLiAgIgorbXNnc3RyICJAaSDQutCw0YLQsNC70L7Qs9GDICVpLCDQsdC70L7QuiAlYiwg0LzQsNGUINCx0YPRgtC4INGDINCx0LvQvtGG0ZYgJWMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgZXh0ZW50IG1hcmtlZCB1bmluaXRpYWxpemVkIGF0IGJsb2NrICVjLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJAZCBAaSAlaSBoYXMgQHggbWFya2VkIHVuaW5pdGlhbGl6ZWQgYXQgQGIgJWMuICAiCittc2dzdHIgIkBpINC60LDRgtCw0LvQvtCz0YMgJWkg0L/QvtC30L3QsNGH0LXQvdC+INGP0Log0L3QtdGW0L3RltGG0ZbQsNC70ZbQt9C+0LLQsNC90LjQuSDRgyDQsdC70L7RhtGWICVjLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBsb2dpY2FsIGJsb2NrICViIChwaHlzaWNhbCBibG9jayAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuCisjLiBALWV4cGFuZGVkOiBXaWxsIGZpeCBpbiBwYXNzIDFCLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4NworbXNnaWQgIiIKKyJAaSAlaSBsb2dpY2FsIEBiICViIChwaHlzaWNhbCBAYiAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuIgorIldpbGwgZml4IGluIHBhc3MgMUIuXG4iCittc2dzdHIgIiIKKyLQu9C+0LPRltGH0L3QuNC5INCx0LvQvtC6IEBpICVpICViICjRhNGW0LfQuNGH0L3QuNC5INCx0LvQvtC6ICVjKSDQv9C+0YDRg9GI0YPRlCDQv9GA0LDQstC40LvQsCDRgNC+0LfQv9C+0LTRltC70YMgIgorItC60LvQsNGB0YLQtdGA0ZbQsi5cbiIKKyLQkdGD0LTQtSDQstC40L/RgNCw0LLQu9C10L3QviDQvdCwINC60YDQvtGG0ZYgMUIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLlxuCisjLiBALWV4cGFuZGVkOiBQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk5NAorbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgQGJzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBAaS4uLlxuIgorIlBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIEBtIEBic1xuIgorbXNnc3RyICIiCisiXG4iCisi0JLQuNC60L7QvdGD0ZTQvNC+INC00L7QtNCw0YLQutC+0LLRliDQv9GA0L7RhdC+0LTQuCDQtNC70Y8g0YPRgdGD0LLQsNC90L3RjyDQsdC70L7QutGW0LIsINGP0LrRliDQstC40LrQvtGA0LjRgdGC0LDQvdC+INC/0L7QvdCw0LQg0L7QtNC90LjQvCAiCisiQGkuLi5cbiIKKyLQn9GA0L7RhdGW0LQgMUI6INC/0L7QstGC0L7RgNGO0ZTQvNC+INGB0LrQsNC90YPQstCw0L3QvdGPINC00LvRjyDQsdC70L7QutGW0LIg0LrRgNCw0YLQvdC+0LPQviDQstC40LrQvtGA0LjRgdGC0LDQvdC90Y9cbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAlaToKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAbSBAYihzKSBpbiBAaSAlaToiCittc2dzdHIgItCx0LvQvtC6KNC4KSDQutGA0LDRgtC90L7Qs9C+INCy0LjQutC+0YDQuNGB0YLQsNC90L3RjyDRgyBAaSAlaToiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDRgdC60LDQvdGD0LLQsNC90L3RjyBpbm9kZSAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoaW5vZGVfZHVwX21hcCk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAaSBAQiAoQGlfZHVwX21hcCk6ICVtXG4iCittc2dzdHIgItC/0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INGA0L7Qt9C80ZbRidC10L3QvdGPIEBpIChAaV9kdXBfbWFwKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDQstC40LrQvtC90LDQvdC90Y8g0ZbRgtC10YDQsNGG0ZbRlyDQvdCw0LQg0LHQu9C+0LrQsNC80Lgg0YMgQGkgJWkgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDMwIGUyZnNjay9wcm9ibGVtLmM6MTM0NQorbXNnaWQgIkVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgQGEgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiIgorItCf0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INC60L7RgNC40LPRg9Cy0LDQvdC90Y8g0LrRltC70YzQutC+0YHRgtGWINC/0L7RgdC40LvQsNC90Ywg0LTQu9GPINCx0LvQvtC60YMg0YDQvtC30YjQuNGA0LXQvdC+0LPQviAiCisi0LDRgtGA0LjQsdGD0YLQsCAlYiAoQGkgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDM1Cittc2dpZCAiUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIEBpcyB3aXRoIEBtIEBic1xuIgorbXNnc3RyICLQn9GA0L7RhdGW0LQgMUM6INGI0YPQutCw0ZTQvNC+INGDINC60LDRgtCw0LvQvtCz0LDRhSBAaSDQtyDQutGA0LDRgtC90LjQvCDQstC40LrQvtGA0LjRgdGC0LDQvdC90Y/QvCDQsdC70L7QutGW0LJcbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDQxCittc2dpZCAiUGFzcyAxRDogUmVjb25jaWxpbmcgQG0gQGJzXG4iCittc2dzdHIgItCf0YDQvtGF0ZbQtCAxRDog0YPQt9Cz0L7QtNC20YPRlNC80L4g0LHQu9C+0LrQuCDQutGA0LDRgtC90L7Qs9C+INCy0LjQutC+0YDQuNGB0YLQsNC90L3Rj1xuIgorCisjLiBALWV4cGFuZGVkOiBGaWxlICVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSkgXG4KKyMuIEAtZXhwYW5kZWQ6ICAgaGFzICVyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0NgorbXNnaWQgIiIKKyJGaWxlICVRIChAaSAjJWksIG1vZCB0aW1lICVJTSkgXG4iCisiICBoYXMgJXIgQG0gQGIocyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4iCittc2dzdHIgIiIKKyLQpNCw0LnQuyAlUSAoQGkgJWksINGH0LDRgSDQstC90LXRgdC10L3QvdGPINC30LzRltC9OiAlSU0pIFxuIgorIiAg0LzQsNGUICVyINCx0LvQvtC60ZbQsiDQutGA0LDRgtC90L7Qs9C+INCy0LjQutC+0YDQuNGB0YLQsNC90L3Rjywg0Y/QutGWINGUINGB0L/RltC70YzQvdC40LzQuCDQtyAlTiDRhNCw0LnQu9Cw0LzQuDpcbiIKKworIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1MgorbXNnaWQgIlx0JVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKVxuIgorbXNnc3RyICJcdCVRIChAaSAlaSwg0YfQsNGBINCy0L3QtdGB0LXQvdC90Y8g0LfQvNGW0L06ICVJTSlcbiIKKworIy4gQC1leHBhbmRlZDogXHQ8ZmlsZXN5c3RlbSBtZXRhZGF0YT5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDU3Cittc2dpZCAiXHQ8QGYgbWV0YWRhdGE+XG4iCittc2dzdHIgIlx0PNC80LXRgtCw0LTQsNC90ZYg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuD5cbiIKKworIy4gQC1leHBhbmRlZDogKFRoZXJlIGFyZSAlTiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjIKK21zZ2lkICIiCisiKFRoZXJlIGFyZSAlTiBAaXMgY29udGFpbmluZyBAbSBAYnMuKVxuIgorIlxuIgorbXNnc3RyICIiCisiKNCG0YHQvdGD0ZQgJU4gQGksINGJ0L4g0LzRltGB0YLRj9GC0Ywg0LHQu9C+0LrQuCDQutGA0LDRgtC90L7Qs9C+INCy0LjQutC+0YDQuNGB0YLQsNC90L3Rjy4pXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjcKK21zZ2lkICIiCisiQG0gQGJzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyLQsdC70L7QutC4INC60YDQsNGC0L3QvtCz0L4g0LLQuNC60L7RgNC40YHRgtCw0L3QvdGPINCy0LbQtSDQv9C+0LLRgtC+0YDQvdC+INC/0YDQuNC30L3QsNGH0LXQvdC+INCw0LHQviDQutC70L7QvdC+0LLQsNC90L4uXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjbG9uZSBmaWxlOiAlbVxuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC60LvQvtC90YPQstCw0YLQuCDRhNCw0LnQuzogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4NgorbXNnaWQgIlBhc3MgMjogQ2hlY2tpbmcgQGQgc3RydWN0dXJlXG4iCittc2dzdHIgItCf0YDQvtGF0ZbQtCAyOiDQv9C10YDQtdCy0ZbRgNGP0ZTQvNC+INGB0YLRgNGD0LrRgtGD0YDRgyDQutCw0YLQsNC70L7Qs9GW0LJcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBpbm9kZSBudW1iZXIgZm9yICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJAbiBAaSBudW1iZXIgZm9yICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAi0L3QtdC60L7RgNC10LrRgtC90LjQuSDQvdC+0LzQtdGAIEBpINC00LvRjyDCqy7CuyDRgyBAaSDQutCw0YLQsNC70L7Qs9GDICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbnZhbGlkIGlub2RlICM6ICVEaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDk2Cittc2dpZCAiQEUgaGFzIEBuIEBpICM6ICVEaS5cbiIKK21zZ3N0ciAiQEUg0LzRltGB0YLQuNGC0Ywg0L3QtdC60L7RgNC10LrRgtC90LjQuSBAaSDQtyDQvdC+0LzQtdGA0L7QvCAlRGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlICVEaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTAxCittc2dpZCAiQEUgaGFzIEBEL3VudXNlZCBAaSAlRGkuICAiCittc2dzdHIgIkBFINC80ZbRgdGC0LjRgtGMINCy0LjQu9GD0YfQtdC90LjQuSDQsNCx0L4g0L3QtdCy0LjQutC+0YDQuNGB0YLQsNC90LjQuSBAaSAlRGkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvICcuJyAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDYKK21zZ2lkICJARSBATCB0byAnLicgICIKK21zZ3N0ciAiQEUgQEwg0L3QsCDCqy7CuyAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHBvaW50cyB0byBpbm9kZSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTEKK21zZ2lkICJARSBwb2ludHMgdG8gQGkgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBAYi5cbiIKK21zZ3N0ciAiQEUg0LLQutCw0LfRg9GUINC90LAgQGkgKCVEaSksINGA0L7Qt9GC0LDRiNC+0LLQsNC90LjQuSDRgyDQv9C+0LzQuNC70LrQvtCy0L7QvNGDINCx0LvQvtGG0ZYuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIGRpcmVjdG9yeSAlUCAoJURpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE2Cittc2dpZCAiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iCittc2dzdHIgIkBFIEBMINC90LAg0LrQsNGC0LDQu9C+0LMgJVAgKCVEaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIHRoZSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjEKK21zZ2lkICJARSBATCB0byB0aGUgQHIuXG4iCittc2dzdHIgIkBFIEBMINC90LAgQHIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI2Cittc2dpZCAiQEUgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbiIKK21zZ3N0ciAiQEUg0LzRltGB0YLQuNGC0Ywg0L3QtdC60L7RgNC10LrRgtC90ZYg0YHQuNC80LLQvtC70Lgg0YMg0L3QsNC30LLRli5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgItCf0YDQvtC/0YPRidC10L3QviDCqy7CuyDRgyBpbm9kZSDQutCw0YLQsNC70L7Qs9GDICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLi4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICLQndC1INCy0LjRgdGC0LDRh9Cw0ZQgwqsuLsK7INGDIEBpINC60LDRgtCw0LvQvtCz0YMgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpcnN0IGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApIHNob3VsZCBiZSAnLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQxCittc2dpZCAiRmlyc3QgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgKCVwKSBAcyAnLidcbiIKK21zZ3N0ciAi0J/QtdGA0YjQuNC8INC30LDQv9C40YHQvtC8IMKrJURuwrsgKEBpPSVEaSkg0YMgQGkg0LrQsNGC0LDQu9C+0LPRgyAlaSAoJXApINC80LDRlCDQsdGD0YLQuCDCqy7Cu1xuIgorCisjLiBALWV4cGFuZGVkOiBTZWNvbmQgZW50cnkgJyVEbicgKGlub2RlPSVEaSkgaW4gZGlyZWN0b3J5IGlub2RlICVpIHNob3VsZCBiZSAnLi4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0NgorbXNnaWQgIlNlY29uZCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSBAcyAnLi4nXG4iCittc2dzdHIgItCU0YDRg9Cz0LjQvCDQt9Cw0L/QuNGB0L7QvCDCqyVEbsK7IChAaT0lRGkpINGDIEBpINC60LDRgtCw0LvQvtCz0YMgJWkg0LzQsNGUINCx0YPRgtC4IMKrLi7Cu1xuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZhZGRyIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJRiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1MQorbXNnaWQgImlfZmFkZHIgQEYgJUlGLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZhZGRyINC00LvRjyBpbm9kZSDQtNC+0YDRltCy0L3RjtGUICVJRiwg0LzQsNGUINCx0YPRgtC4INC90YPQu9GM0L7QstC40LwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlmLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTU2Cittc2dpZCAiaV9maWxlX2FjbCBARiAlSWYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2wgQEYgJUlmLCDQsCDQvNCw0ZQg0LHRg9GC0Lgg0L3Rg9C70YwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZGlyX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWQsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjEKK21zZ2lkICJpX2Rpcl9hY2wgQEYgJUlkLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2Rpcl9hY2wgQEYgJUlkLCDQsCDQvNCw0ZQg0LHRg9GC0Lgg0L3Rg9C70YwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnJhZyBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2NgorbXNnaWQgImlfZnJhZyBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mcmFnIEBGICVOLCDQsCDQvNCw0ZQg0LHRg9GC0Lgg0L3Rg9C70YwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnNpemUgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzEKK21zZ2lkICJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZzaXplIEBGICVOLCDQsCDQvNCw0ZQg0LHRg9GC0Lgg0L3Rg9C70YwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZSAoJUltKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTc2Cittc2dpZCAiQGkgJWkgKCVRKSBoYXMgQG4gbW9kZSAoJUltKS5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSDQvNCw0ZQg0L3QtdC60L7RgNC10LrRgtC90LjQuSDRgNC10LbQuNC8ICglSW0pLlxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGRpcmVjdG9yeSBjb3JydXB0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTgxCittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IEBkIGNvcnJ1cHRlZFxuIgorbXNnc3RyICJAaSDQutCw0YLQsNC70L7Qs9GDICVpLCAlQiwg0LLRltC00YHRgtGD0L8gJU46INC60LDRgtCw0LvQvtCzINC/0L7RiNC60L7QtNC20LXQvdC+XG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTg2Cittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4iCittc2dzdHIgImlub2RlINC60LDRgtCw0LvQvtCz0YMgJWksICVCLCDQstGW0LTRgdGC0YPQvyAlTjog0L3QsNC30LLQsCDRhNCw0LnQu9CwINGUINC90LDQtNGC0L4g0LTQvtCy0LPQvtGOXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5MQorbXNnaWQgIkBkIEBpICVpIGhhcyBhbiB1bmFsbG9jYXRlZCAlQi4gICIKK21zZ3N0ciAiQGkg0LrQsNGC0LDQu9C+0LPRgyAlaSDQvNGW0YHRgtC40YLRjCDQvdC10YDQvtC30L/QvtC00ZbQu9C10L3QuNC5ICVCLiAgIgorCisjLiBALWV4cGFuZGVkOiAnLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5NgorIywgYy1mb3JtYXQKK21zZ2lkICInLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICLQt9Cw0L/QuNGBINC60LDRgtCw0LvQvtCz0YMgwqsuwrsg0YMgQGkg0LrQsNGC0LDQu9C+0LPRgyAlaSDQvdC1INC30LDQstC10YDRiNC10L3QviDRgdC40LzQstC+0LvQvtC8IE5VTExcbiIKKworIy4gQC1leHBhbmRlZDogJy4uJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIicuLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICLQt9Cw0L/QuNGBINC60LDRgtCw0LvQvtCz0YMgwqsuLsK7INGDIEBpINC60LDRgtCw0LvQvtCz0YMgJWkg0L3QtSDQt9Cw0LLQtdGA0YjQtdC90L4g0YHQuNC80LLQvtC70L7QvCBOVUxMXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDYKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIGNoYXJhY3RlciBAdi5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSDRlCDQvdC10LrQvtGA0LXQutGC0L3QuNC8INGB0LjQvNCy0L7Qu9GM0L3QuNC8INC/0YDQuNGB0YLRgNC+0ZTQvC5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGJsb2NrIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjExCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBAYiBAdi5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSDRlCDQvdC10LrQvtGA0LXQutGC0L3QuNC8INCx0LvQvtC60L7QstC40Lwg0L/RgNC40YHRgtGA0L7RlNC8LlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIxNgorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLicgQGUuXG4iCittc2dzdHIgIkBFINGUINC00YPQsdC70ZbQutCw0YLQvtC8INC30LDQv9C40YHRgyDCqy7Cuy5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4uJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjIxCittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuLicgQGUuXG4iCittc2dzdHIgIkBFINGUINC00YPQsdC70ZbQutCw0YLQvtC8INC30LDQv9C40YHRgyDCqy4uwrsuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNiBlMmZzY2svcHJvYmxlbS5jOjE1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICLQktC90YPRgtGA0ZbRiNC90Y8g0L/QvtC80LjQu9C60LA6INC90LUg0LLQtNCw0LvQvtGB0Y8g0LfQvdCw0LnRgtC4IGRpcl9pbmZvINC00LvRjyAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgcmVjX2xlbiBvZiAlRHIsIHNob3VsZCBiZSAlTi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjMxCittc2dpZCAiQEUgaGFzIHJlY19sZW4gb2YgJURyLCBAcyAlTi5cbiIKK21zZ3N0ciAiQEUg0LzQsNGUIHJlY19sZW4gJURyLCDQvNCw0ZQg0LHRg9GC0LggJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IHN0cnVjdHVyZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4iCittc2dzdHIgItC/0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INGA0L7Qt9C80ZbRgdGC0LjRgtC4INGB0YLRgNGD0LrRgtGD0YDRgyBpY291bnQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGl0ZXJhdGluZyBvdmVyIGRpcmVjdG9yeSBibG9ja3M6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpdGVyYXRpbmcgb3ZlciBAZCBAYnM6ICVtXG4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0LLQuNC60L7QvdCw0L3QvdGPINGW0YLQtdGA0LDRhtGW0Zcg0YHQv9C40YHQutC+0Lwg0LHQu9C+0LrRltCyINC60LDRgtCw0LvQvtCz0ZbQsjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQ2Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDRh9C40YLQsNC90L3RjyDQsdC70L7QutGDINC60LDRgtCw0LvQvtCz0YMgJWIgKEBpICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjUxCittc2dpZCAiRXJyb3Igd3JpdGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQt9Cw0L/QuNGB0LDRgtC4INCx0LvQvtC6INC60LDRgtCw0LvQvtCz0YMgJWIgKEBpICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrIGZvciBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgbmV3IEBkIEBiIGZvciBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICIiCisi0L/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0YDQvtC30LzRltGB0YLQuNGC0Lgg0L3QvtCy0LjQuSDQsdC70L7QuiDQutCw0YLQsNC70L7Qs9GDINC00LvRjyBAaSAlaSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBkZWFsbG9jYXRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWFsbG9jYXRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INGB0LrQsNGB0YPQstCw0L3QvdGPINGA0L7Qt9C80ZbRidC10L3QvdGPIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBlIGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4iCittc2dzdHIgItC30LDQv9C40YEg0LrQsNGC0LDQu9C+0LPRgyDQtNC70Y8gwqsuwrsg0YMgJXAgKCVpKSDRlCDQstC10LvQuNC60LjQvC5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIEZJRk8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3MQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSDRlCDQvdC10LrQvtGA0LXQutGC0L3QuNC8IEZJRk8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBzb2NrZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3NgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgc29ja2V0LlxuIgorbXNnc3RyICJAaSAlaSAoJVEpINGUINC90LXQutC+0YDQtdC60YLQvdC40Lwg0YHQvtC60LXRgtC+0LwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICclRG4nIGluICVwICglaSkgdG8gJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4MQorbXNnaWQgIlNldHRpbmcgZmlsZXR5cGUgZm9yIEBFIHRvICVOLlxuIgorbXNnc3RyICLQktGB0YLQsNC90L7QstC70Y7RlNC80L4g0YLQuNC/INGE0LDQudC70LAg0LTQu9GPIEBFINGDINC30L3QsNGH0LXQvdC90Y8gJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgc2hvdWxkIGJlICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjg2Cittc2dpZCAiQEUgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgQHMgJU4pLlxuIgorbXNnc3RyICJARSDQvdCw0LvQtdC20LjRgtGMINC00L4g0L3QtdC60L7RgNC10LrRgtC90L7Qs9C+INGC0LjQv9GDINGE0LDQudC70ZbQsiAo0LHRg9C70L4gJUR0LCDQvNCw0ZQg0LHRg9GC0LggJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5MQorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIkBFINC80LDRlCDRg9GB0YLQsNC90L7QstC70LXQvdC40Lkg0YLQuNC/INGE0LDQudC70LAuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgemVyby1sZW5ndGggbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjk2Cittc2dpZCAiQEUgaGFzIGEgQHogbmFtZS5cbiIKK21zZ3N0ciAiQEUg0LzQsNGUINC90LDQt9Cy0YMg0L3Rg9C70YzQvtCy0L7RlyDQtNC+0LLQttC40L3QuC5cbiIKKworIy4gQC1leHBhbmRlZDogU3ltbGluayAlUSAoaW5vZGUgIyVpKSBpcyBpbnZhbGlkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDEKK21zZ2lkICJTeW1saW5rICVRIChAaSAjJWkpIGlzIEBuLlxuIgorbXNnc3RyICLQodC40LzQstC+0LvRltGH0L3QtSDQv9C+0YHQuNC70LDQvdC90Y8gJVEgKEBpICMlaSkg0ZQg0L3QtdC60L7RgNC10LrRgtC90LjQvC5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGZvciBpbm9kZSAlaSAoJVEpIGlzIGludmFsaWQgKCVJZikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMwNgorbXNnaWQgIkBhIEBiIEBGIEBuICglSWYpLlxuIgorbXNnc3RyICLQsdC70L7QuiDRgNC+0LfRiNC40YDQtdC90L7Qs9C+INCw0YLRgNC40LHRg9GC0LAgQEYg0L3QtdC60L7RgNC10LrRgtC90LjQvCAoJUlmKS5cbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTEKK21zZ2lkICJAZiBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBAUy5cbiIKK21zZ3N0ciAiIgorItGE0LDQudC70L7QstCwINGB0LjRgdGC0LXQvNCwINC80ZbRgdGC0LjRgtGMINCy0LXQu9C40LrRliDRhNCw0LnQu9C4LCDQsNC70LUg0L3QtSDQvNCw0ZQg0L/RgNCw0L/QvtGA0YbRjyBMQVJHRV9GSUxFINGDICIKKyLRgdGD0L/QtdGA0LHQu9C+0YbRli5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxNgorbXNnaWQgIkBwIEBoICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuIgorbXNnc3RyICLQv9GA0L7QsdC70LXQvNCwINGDIGlub2RlINC60LDRgtCw0LvQvtCz0YMgSFRSRUUgJWQ6INC90LXQvNCw0ZQg0L/QvtGB0LjQu9Cw0L3QvdGPXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiByZWZlcmVuY2VkIHR3aWNlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMyMQorbXNnaWQgIkBwIEBoICVkOiAlQiByZWZlcmVuY2VkIHR3aWNlXG4iCittc2dzdHIgItC/0YDQvtCx0LvQtdC80LAg0YMgaW5vZGUg0LrQsNGC0LDQu9C+0LPRgyBIVFJFRSAlZDog0L/QvtC00LLRltC50L3QtSDQv9C+0YHQuNC70LDQvdC90Y8g0L3QsCAlQlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjYKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuIgorbXNnc3RyICIiCisi0L/RgNC+0LHQu9C10LzQsCDRgyBAaSDQutCw0YLQsNC70L7Qs9GDIEhUUkVFICVkOiAlQiDQvNCw0ZQg0L/QvtC80LjQu9C60L7QstGDINC80ZbQvdGW0LzQsNC70YzQvdGDINGF0LXRiC3RgdGD0LzRg1xuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMzEKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuIgorbXNnc3RyICIiCisi0L/RgNC+0LHQu9C10LzQsCDRgyBAaSDQutCw0YLQsNC70L7Qs9GDIEhUUkVFICVkOiAlQiDQvNCw0ZQg0L/QvtC80LjQu9C60L7QstGDINC80LDQutGB0LjQvNCw0LvRjNC90YMg0YXQtdGILdGB0YPQvNGDXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzNgorbXNnaWQgIkBuIEBoICVkICglcSkuICAiCittc2dzdHIgItC90LXQutC+0YDQtdC60YLQvdC40LkgaW5vZGUg0LrQsNGC0LDQu9C+0LPRgyBIVFJFRSAlZCAoJXEpLiAgIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpOiBiYWQgYmxvY2sgbnVtYmVyICViLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNDAKK21zZ2lkICJAcCBAaCAlZCAoJXEpOiBiYWQgQGIgbnVtYmVyICViLlxuIgorbXNnc3RyICLQv9GA0L7QsdC70LXQvNCwINGDIEBpINC60LDRgtCw0LvQvtCz0YMgSFRSRUUgJWQgKCVxKTog0L/QvtC80LjQu9C60L7QstC40Lkg0L3QvtC80LXRgCDQsdC70L7QutGDICViLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogcm9vdCBub2RlIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBwIEBoICVkOiByb290IG5vZGUgaXMgQG5cbiIKK21zZ3N0ciAi0L/RgNC+0LHQu9C10LzQsCDRgyBAaSDQutCw0YLQsNC70L7Qs9GDIEhUUkVFICVkOiDQutC+0YDQtdC90LXQstC40Lkg0LLRg9C30L7QuyDRlCDQvdC10LrQvtGA0LXQutGC0L3QuNC8XG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBsaW1pdCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1NQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gbGltaXQgKCVOKVxuIgorbXNnc3RyICLQv9GA0L7QsdC70LXQvNCwINGDIEBpINC60LDRgtCw0LvQvtCz0YMgSFRSRUUgJWQ6ICVCINC80LDRlCDQvdC10LrQvtGA0LXQutGC0L3QtSDQvtCx0LzQtdC20LXQvdC90Y8gKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgY291bnQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjAKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGNvdW50ICglTilcbiIKK21zZ3N0ciAi0L/RgNC+0LHQu9C10LzQsCDRgyBAaSDQutCw0YLQsNC70L7Qs9GDIEhUUkVFICVkOiAlQiDQvNCw0ZQg0L3QtdC60L7RgNC10LrRgtC90YMg0LrRltC70YzQutGW0YHRgtGMICglTilcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjUKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4iCittc2dzdHIgItC/0YDQvtCx0LvQtdC80LAg0YMgQGkg0LrQsNGC0LDQu9C+0LPRgyBIVFJFRSAlZDogJUIg0LzQsNGUINC90LXQstC/0L7RgNGP0LTQutC+0LLQsNC90YMg0YLQsNCx0LvQuNGG0Y4g0YXQtdGI0ZbQslxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgZGVwdGggKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzAKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGRlcHRoICglTilcbiIKK21zZ3N0ciAiIgorItC/0YDQvtCx0LvQtdC80LAg0YMgQGkg0LrQsNGC0LDQu9C+0LPRgyBIVFJFRSAlZDogJUIg0LzQsNGUINC90LXQutC+0YDQtdC60YLQvdC40Lkg0YDRltCy0LXQvdGMINCy0LrQu9Cw0LTQtdC90L7RgdGC0ZYgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgaW4gJXAgKCVpKSBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzc1Cittc2dpZCAiRHVwbGljYXRlIEBFIGZvdW5kLiAgIgorbXNnc3RyICLQktC40Y/QstC70LXQvdC+INC00YPQsdC70ZbQutCw0YIg0LfQsNC/0LjRgdGDLiAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4KKyMuIEAtZXhwYW5kZWQ6IFJlbmFtZSB0byAlcworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgwCisjLCBuby1jLWZvcm1hdAorbXNnaWQgIiIKKyJARSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuIgorIlJlbmFtZSB0byAlcyIKK21zZ3N0ciAiIgorItCjINC30LDQv9C40YHRliDQvNGW0YHRgtC40YLRjNGB0Y8g0L3QtdGD0L3RltC60LDQu9GM0L3QsCDQvdCw0LfQstCwINGE0LDQudC70LAuXG4iCisi0J/QtdGA0LXQudC80LXQvdC+0LLRg9GU0LzQviDQvdCwICVzIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgZm91bmQuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODUKK21zZ2lkICIiCisiRHVwbGljYXRlIEBlICclRG4nIGZvdW5kLlxuIgorIlx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4iCisiXG4iCittc2dzdHIgIiIKKyLQktC40Y/QstC70LXQvdC+INC00YPQsdC70ZbQutCw0YIg0LfQsNC/0LjRgdGDIMKrJURuwrsuXG4iCisiXHTQn9C+0LfQvdCw0YfQsNGU0LzQviAlcCAoJWkpINC00LvRjyDQv9C+0LLRgtC+0YDQvdC+0Zcg0L/QvtCx0YPQtNC+0LLQuC5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogaV9ibG9ja3NfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTAKK21zZ2lkICJpX2Jsb2Nrc19oaSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9ibG9ja3NfaGkgQEYgJU4sINC80LDRlCDQsdGD0YLQuCDQvdGD0LvRjC5cbiIKKworIy4gQC1leHBhbmRlZDogVW5leHBlY3RlZCBibG9jayBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk1Cittc2dpZCAiVW5leHBlY3RlZCBAYiBpbiBAaCAlZCAoJXEpLlxuIgorbXNnc3RyICLQndC10L7Rh9GW0LrRg9Cy0LDQvdC40Lkg0LHQu9C+0Log0YMgQGkg0LrQsNGC0LDQu9C+0LPRgyBIVFJFRSAlZCAoJXEpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGluIGdyb3VwICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTkKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBpbiBAZyAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbiIKK21zZ3N0ciAiQEUg0L/QvtGB0LjQu9Cw0ZTRgtGM0YHRjyDQvdCwIEBpICVEaSDRgyDQs9GA0YPQv9GWICVnLCDQtNC1INCy0YHRgtCw0L3QvtCy0LvQtdC90L4gX0lOT0RFX1VOSU5JVC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBmb3VuZCBpbiBncm91cCAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDA0Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgZm91bmQgaW4gQGcgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4iCittc2dzdHIgIiIKKyJARSDQv9C+0YHQuNC70LDRlNGC0YzRgdGPINC90LAgQGkgJURpLCDRj9C60LjQuSDQt9C90LDQudC00LXQvdC+INGDINC+0LHQu9Cw0YHRgtGWINC90LXQstC40LrQvtGA0LjRgdGC0LDQvdC40YUgQGkg0LPRgNGD0L/QuCAiCisiJWcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2xfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDkKK21zZ2lkICJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZpbGVfYWNsX2hpIEBGICVOLCDQvNCw0ZQg0LHRg9GC0Lgg0L3Rg9C70YwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MTYKK21zZ2lkICJQYXNzIDM6IENoZWNraW5nIEBkIGNvbm5lY3Rpdml0eVxuIgorbXNnc3RyICLQn9GA0L7RhdGW0LQgMzog0L/QtdGA0LXQstGW0YDRj9GU0LzQviDQvNC+0LbQu9C40LLRltGB0YLRjCDQt+KAmdGU0LTQvdCw0L3QvdGPINC60LDRgtCw0LvQvtCz0YNcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjEKK21zZ2lkICJAciBub3QgYWxsb2NhdGVkLiAgIgorbXNnc3RyICLQutC+0YDQtdC90LXQstC40LkgaW5vZGUg0L3QtSDRgNC+0LfQvNGW0YnQtdC90L4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IE5vIHJvb20gaW4gbG9zdCtmb3VuZCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyNgorbXNnaWQgIk5vIHJvb20gaW4gQGwgQGQuICAiCittc2dzdHIgItCd0LXQtNC+0YHRgtCw0YLQvdGM0L4g0LzRltGB0YbRjyDQtNC70Y8g0LrQsNGC0LDQu9C+0LPRgyBAbC4gICIKKworIy4gQC1leHBhbmRlZDogVW5jb25uZWN0ZWQgZGlyZWN0b3J5IGlub2RlICVpICglcClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuY29ubmVjdGVkIEBkIEBpICVpICglcClcbiIKK21zZ3N0ciAi0J3QtdC34oCZ0ZTQtNC90LDQvdC40LkgQGkg0LrQsNGC0LDQu9C+0LPRgyAlaSAoJXApXG4iCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIG5vdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDM2Cittc2dpZCAiL0BsIG5vdCBmb3VuZC4gICIKK21zZ3N0ciAiL0BsINC90LUg0LfQvdCw0LnQtNC10L3Qvi4gICIKKworIy4gQC1leHBhbmRlZDogJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIHNob3VsZCBiZSAlcSAoJWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDEKK21zZ2lkICInLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKK21zZ3N0ciAiwqsuLsK7INGDICVRICglaSkg0LTQvtGA0ZbQstC90Y7RlCAlUCAoJWopLCDQvNCw0ZQg0LHRg9GC0LggJXEgKCVkKS5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIG9yIG5vbi1leGlzdGVudCAvbG9zdCtmb3VuZC4gIENhbm5vdCByZWNvbm5lY3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ0NgorbXNnaWQgIkJhZCBvciBub24tZXhpc3RlbnQgL0BsLiAgQ2Fubm90IHJlY29ubmVjdC5cbiIKK21zZ3N0ciAiIgorItCf0L7QvNC40LvQutC+0LLQuNC5INC60LDRgtCw0LvQvtCzIC9AbCDQsNCx0L4g0LrQsNGC0LDQu9C+0LPRgyDQvdC1INGW0YHQvdGD0ZQuINCf0L7QstGC0L7RgNC90LUg0L/RgNC40ZTQtNC90LDQvdC90Y8gIgorItC90LXQvNC+0LbQu9C40LLQtS5cbiIKKworIy4gQC1leHBhbmRlZDogQ291bGQgbm90IGV4cGFuZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBleHBhbmQgL0BsOiAlbVxuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINGA0L7Qt9Cz0L7RgNC90YPRgtC4IC9AbDogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWNvbm5lY3QgJWk6ICVtXG4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L/QvtCy0YLQvtGA0L3QviDQv9GA0LjRlNC00L3QsNGC0LggJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL0BsOiAlbVxuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQt9C90LDQudGC0LggL0BsOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Jsb2NrOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AYjogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19AYjog0L/QvtCy0ZbQtNC+0LzQu9C10L3QvdGPICVtINC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INGB0YLQstC+0YDQuNGC0Lgg0LrQsNGC0LDQu9C+0LPRgyAvQGxcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19pbm9kZTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDcxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfQGk6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgImV4dDJmc19uZXdfQGk6INC/0L7QstGW0LTQvtC80LvQtdC90L3RjyAlbSDQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDRgdGC0LLQvtGA0LjRgtC4INC60LDRgtCw0LvQvtCz0YMgL0BsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X2Rpcl9AYjogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IEBkIEBiXG4iCittc2dzdHIgImV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSDQv9GW0LQg0YfQsNGBINGB0YLQstC+0YDQtdC90L3RjyDQsdC70L7QutGDINC60LDRgtCw0LvQvtCz0YNcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazogJW0gd2hpbGUgd3JpdGluZyB0aGUgZGlyZWN0b3J5IGJsb2NrIGZvciAvbG9zdCtmb3VuZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gd2hpbGUgd3JpdGluZyB0aGUgQGQgQGIgZm9yIC9AbFxuIgorbXNnc3RyICJleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSDQv9GW0LQg0YfQsNGBINC30LDQv9C40YHRgyDQsdC70L7QutGDINC60LDRgtCw0LvQvtCz0YMg0LTQu9GPIC9AbFxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBhZGp1c3RpbmcgaW5vZGUgY291bnQgb24gaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGFkanVzdGluZyBAaSBjb3VudCBvbiBAaSAlaVxuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQutC+0YDQuNCz0YPQstCw0L3QvdGPINC60ZbQu9GM0LrQvtGB0YLRliBAaSDQvdCwIEBpICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkbid0IGZpeCBwYXJlbnQgb2YgaW5vZGUgJWk6ICVtXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKyLQndC1INCy0LTQsNC70L7RgdGPINCy0LjQv9GA0LDQstC40YLQuCDQsdCw0YLRjNC60ZbQstGB0YzQutC40Lkg0LLRg9C30L7QuyBAaSAlaTogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgZGlyZWN0b3J5IGVudHJ5XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IEBkIEBlXG4iCisiXG4iCittc2dzdHIgIiIKKyLQndC1INCy0LTQsNC70L7RgdGPINCy0LjQv9GA0LDQstC40YLQuCDQsdCw0YLRjNC60ZbQstGB0YzQutC40Lkg0LrQsNGC0LDQu9C+0LMgQGkgJWk6INC90LUg0LLQtNCw0LvQvtGB0Y8g0LfQvdCw0LnRgtC4INC30LDQv9C40YEgIgorItCx0LDRgtGM0LrRltCy0YHRjNC60L7Qs9C+INC60LDRgtCw0LvQvtCz0YNcbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgcm9vdCBkaXJlY3RvcnkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHJvb3QgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDRgdGC0LLQvtGA0LXQvdC90Y8g0LrQvtGA0LXQvdC10LLQvtCz0L4g0LrQsNGC0LDQu9C+0LPRgyAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyAvbG9zdCtmb3VuZCBkaXJlY3RvcnkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIC9AbCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGB0YLQstC+0YDQtdC90L3RjyDQutCw0YLQsNC70L7Qs9GDIC9AbCAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeTsgYWJvcnRpbmcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxNgorbXNnaWQgIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIKK21zZ3N0ciAi0LrQvtGA0LXQvdC10LLQuNC5IEBpINC90LUg0ZQg0LrQsNGC0LDQu9C+0LPQvtC8OyDQv9C10YDQtdGA0LjQstCw0ZTQvNC+INC+0LHRgNC+0LHQutGDLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIxCittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICLQn9GA0L7QtNC+0LLQttC10L3QvdGPINC+0LHRgNC+0LHQutC4INCx0LXQtyDQutC+0YDQtdC90LXQstC+0LPQviBAaSDQvdC10LzQvtC20LvQuNCy0LUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIGlzIG5vdCBhIGRpcmVjdG9yeSAoaW5vPSVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiL0BsIGlzIG5vdCBhIEBkIChpbm89JWkpXG4iCittc2dzdHIgIi9AbCDQvdC1INGUINC60LDRgtCw0LvQvtCz0L7QvCAoaW5vPSVpKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzgKK21zZ2lkICJQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzXG4iCittc2dzdHIgItCf0YDQvtGF0ZbQtCAzQTog0L7Qv9GC0LjQvNGW0LfRg9GU0LzQviDQutCw0YLQsNC70L7Qs9C4XG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRpcnNfdG9faGFzaCBpdGVyYXRvcjogJW1cbiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDRgdGC0LLQvtGA0LjRgtC4INGW0YLQtdGA0LDRgtC+0YAgZGlyc190b19oYXNoOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDgKK21zZ2lkICJGYWlsZWQgdG8gb3B0aW1pemUgZGlyZWN0b3J5ICVxICglZCk6ICVtXG4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7Qv9GC0LjQvNGW0LfRg9Cy0LDRgtC4INC60LDRgtCw0LvQvtCzICVxICglZCk6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU1MworbXNnaWQgIk9wdGltaXppbmcgZGlyZWN0b3JpZXM6ICIKK21zZ3N0ciAi0J7Qv9GC0LjQvNGW0LfRg9GU0LzQviDQutCw0YLQsNC70L7Qs9C4OiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3MAorbXNnaWQgIlBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50c1xuIgorbXNnc3RyICLQn9GA0L7RhdGW0LQgNDog0L/QtdGA0LXQstGW0YDRj9GU0LzQviDQutGW0LvRjNC60L7RgdGC0ZYg0L/QvtGB0LjQu9Cw0L3RjFxuIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIHplcm8tbGVuZ3RoIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQHogQGkgJWkuICAiCittc2dzdHIgItC90LXQt+KAmdGU0LTQvdCw0L3QuNC5IEBpINC90YPQu9GM0L7QstC+0Zcg0LTQvtCy0LbQuNC90LggJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEBpICVpXG4iCittc2dzdHIgItC90LXQt+KAmdGU0LTQvdCw0L3QuNC5IEBpICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg1Cittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgItC60ZbQu9GM0LrRltGB0YLRjCDQv9C+0YHQuNC70LDQvdGMIEBpICVpINC00L7RgNGW0LLQvdGO0ZQgJUlsLCDQsCDQvNCw0ZQg0LHRg9GC0LggJU4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4OQorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisi0KPQktCQ0JPQkDog0J/QntCc0JjQm9Ca0JAg0KMg0JrQntCU0IYgRTJGU0NLIVxuIgorIlx00JDQkdCeINCl0KLQntCh0KwgKNCS0JgpINCf0JXQoNCV0JLQhtCg0K/QhCDQl9Cc0J7QndCi0J7QktCQ0J3QoyAo0KDQntCR0J7Qp9CjKSDQpNCQ0JnQm9Ce0JLQoyDQodCY0KHQotCV0JzQoy5cbiIKKyJAaV9saW5rX2luZm9bJWldINC00L7RgNGW0LLQvdGO0ZQgJU4sINCwIEBpLmlfbGlua3NfY291bnQg0LTQvtGA0ZbQstC90Y7RlCAlSWwuINCm0ZYg0LfQvdCw0YfQtdC90L3RjyAiCisi0LzQsNGO0YLRjCDQsdGD0YLQuCDQvtC00L3QsNC60L7QstC40LzQuCFcbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU5OQorbXNnaWQgIlBhc3MgNTogQ2hlY2tpbmcgQGcgc3VtbWFyeSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICLQn9GA0L7RhdGW0LQgNTog0L/QtdGA0LXQstGW0YDRj9GU0LzQviDRltC90YTQvtGA0LzQsNGG0ZbRjiDRgNC10LfRjtC80LUg0YnQvtC00L4g0LPRgNGD0L9cbiIKKworIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgaW5vZGUgYml0bWFwIGlzIG5vdCBzZXQuIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjA0Cittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGkgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICLQndC1INCy0YHRgtCw0L3QvtCy0LvQtdC90L4g0LTQvtC/0L7QstC90LXQvdC90Y8g0L3QsNC/0YDQuNC60ZbQvdGG0ZYg0LHRltGC0L7QstC+0Zcg0LrQsNGA0YLQuCBpbm9kZS4gIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDkKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgItCd0LUg0LLRgdGC0LDQvdC+0LLQu9C10L3QviDQtNC+0L/QvtCy0L3QtdC90L3RjyDQvdCw0L/RgNC40LrRltC90YbRliDQsdGW0YLQvtCy0L7RlyDQutCw0YDRgtC4INCx0LvQvtC60ZbQsi4gIgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjE0Cittc2dpZCAiQGIgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAi0LLRltC00LzRltC90L3QvtGB0YLRliDRgyDQsdGW0YLQvtCy0ZbQuSDQutCw0YDRgtGWINCx0LvQvtC60ZbQsjogIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjM0Cittc2dpZCAiQGkgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAi0LLRltC00LzRltC90L3QvtGB0YLRliDRgyDQsdGW0YLQvtCy0ZbQuSDQutCw0YDRgtGWIEBpOiAiCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjU0Cittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICLQmtGW0LvRjNC60ZbRgdGC0Ywg0LLRltC70YzQvdC40YUgQGkg0YMg0LPRgNGD0L/RliAlZyDRlCDQv9C+0LzQuNC70LrQvtCy0L7RjiAoJWksINC90LDRgNCw0YXQvtCy0LDQvdC+PSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTkKK21zZ2lkICJEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgItCf0L7QvNC40LvQutC+0LLQsCDQutGW0LvRjNC60ZbRgdGC0Ywg0LrQsNGC0LDQu9C+0LPRltCyINC00LvRjyDQs9GA0YPQv9C4ICVnICglaSwg0L/QvtGA0LDRhdC+0LLQsNC90L49JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjQKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LAg0LrRltC70YzQutGW0YHRgtGMIEBpICglaSwg0L7QsdGH0LjRgdC70LXQvdC+PSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjkKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgItCf0L7QvNC40LvQutC+0LLQsCDQutGW0LvRjNC60ZbRgdGC0Ywg0LLRltC70YzQvdC40YUg0LHQu9C+0LrRltCyINC00LvRjyDQs9GA0YPQv9C4ICVnICglYiwg0L3QsNGA0LDRhdC+0LLQsNC90L49JWMpLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NzQKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LAg0LrRltC70YzQutGW0YHRgtGMINCy0ZbQu9GM0L3QuNGFINCx0LvQvtC60ZbQsiAoJWIsINC90LDRgNCw0YXQvtCy0LDQvdC+PSVjKS5cbiIKKworIy4gQC1leHBhbmRlZDogUFJPR1JBTU1JTkcgRVJST1I6IGZpbGVzeXN0ZW0gKCMlTikgYml0bWFwIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIGJpdG1hcCAKKyMuIEAtZXhwYW5kZWQ6IGVuZHBvaW50cyAoJWksICVqKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NzkKK21zZ2lkICIiCisiUFJPR1JBTU1JTkcgRVJST1I6IEBmICgjJU4pIEBCIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIEBCICIKKyJlbmRwb2ludHMgKCVpLCAlailcbiIKK21zZ3N0ciAiIgorItCf0J7QnNCY0JvQmtCQINCjINCa0J7QlNCGOiDQutGW0L3RhtC10LLRliDRgtC+0YfQutC4INCx0ZbRgtC+0LLQvtGXINC60LDRgNGC0LrQuCDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4ICglTikgKCViLCAlYykgIgorItC90LUg0LfQsdGW0LPQsNGO0YLRjNGB0Y8g0ZbQtyDQvtCx0YfQuNGB0LvQtdC90LjQvNC4INC60ZbQvdGG0LXQstC40LzQuCDRgtC+0YfQutCw0LzQuCDQsdGW0YLQvtCy0L7RlyDQutCw0YDRgtC4ICglaSwgJWopXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY4NQorbXNnaWQgIkludGVybmFsIGVycm9yOiBmdWRnaW5nIGVuZCBvZiBiaXRtYXAgKCVOKVxuIgorbXNnc3RyICLQktC90YPRgtGA0ZbRiNC90Y8g0L/QvtC80LjQu9C60LA6INC/0L7QvNC40LvQutC+0LLQtSDQt9Cw0LLQtdGA0YjQtdC90L3RjyDQsdGW0YLQvtCy0L7RlyDQutCw0YDRgtC4ICglTilcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBpbm9kZSBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBpIEBCOiAlbVxuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINC60L7Qv9GW0Y7QstCw0L3QvdGPINC30LDQvNGW0L3QvdC40LrQsCDQsdGW0YLQvtCy0L7RlyDQutCw0YDRgtC4IEBpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGIgQEI6ICVtXG4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0LrQvtC/0ZbRjtCy0LDQvdC90Y8g0LHRltGC0L7QstC+0Zcg0LrQsNGA0YLQuCDQsdC70L7QutGW0LI6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGJsb2NrKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGIocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4iCittc2dzdHIgItCx0LvQvtC60Lgg0LPRgNGD0L/QuCAlZyDQstC40LrQvtGA0LjRgdGC0L7QstGD0Y7RgtGM0YHRjywg0LDQu9C1INCz0YDRg9C/0YMg0L/QvtC30L3QsNGH0LXQvdC+INGP0LogQkxPQ0tfVU5JTklUXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGlub2RlKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGkocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4iCittc2dzdHIgImlub2RlINCz0YDRg9C/0LggJWcg0LLQuNC60L7RgNC40YHRgtC+0LLRg9GO0YLRjNGB0Y8sINCw0LvQtSDQs9GA0YPQv9GDINC/0L7Qt9C90LDRh9C10L3QviDRj9C6IElOT0RFX1VOSU5JVFxuIgorCisjLiBALWV4cGFuZGVkOiBSZWNyZWF0ZSBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MzIKK21zZ2lkICJSZWNyZWF0ZSBAaiIKK21zZ3N0ciAi0J/QvtCy0YLQvtGA0L3QviDRgdGC0LLQvtGA0Y7RlNC80L4g0LbRg9GA0L3QsNC7IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MzcKK21zZ2lkICJVcGRhdGUgcXVvdGEgaW5mbyBmb3IgcXVvdGEgdHlwZSAlTiIKK21zZ3N0ciAi0J7QvdC+0LLQuNGC0Lgg0LTQsNC90ZYg0YnQvtC00L4g0LrQstC+0YLQuCDQtNC70Y8g0YLQuNC/0YMg0LrQstC+0YLQuCAlTiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc2V0dGluZyBibG9jayBncm91cCBjaGVja3N1bSBpbmZvOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBAYiBAZyBjaGVja3N1bSBpbmZvOiAlbVxuIgorbXNnc3RyICIiCisi0J/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDQstGB0YLQsNC90L7QstC70LXQvdC90Y8g0LTQsNC90LjRhSDRidC+0LTQviDQutC+0L3RgtGA0L7Qu9GM0L3QvtGXINGB0YPQvNC4INCz0YDRg9C/0Lgg0LHQu9C+0LrRltCyOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBmaWxlIHN5c3RlbSBpbmZvOiAlbVxuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINC30LDQv9C40YHRgyDQtNCw0L3QuNGFINGJ0L7QtNC+INGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80Lg6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBmbHVzaGluZyB3cml0ZXMgdG8gc3RvcmFnZSBkZXZpY2U6ICVtXG4iCittc2dzdHIgIiIKKyLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINC30LDQv9C40YHRgyDQtNC70Y8g0LLQuNGC0LjRgNCw0L3QvdGPINC90LAg0L/RgNC40YHRgtGA0ZbQuSDQt9Cx0LXRgNGW0LPQsNC90L3RjyDQtNCw0L3QuNGFOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5oYW5kbGVkIGVycm9yIGNvZGUgKDB4JXgpIVxuIgorbXNnc3RyICLQmtC+0LQg0L3QtdC/0YDQuNC00LDRgtC90L7RlyDQtNC+INC+0LHRgNC+0LHQutC4INC/0L7QvNC40LvQutC4ICgweCV4KSFcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxOTk2IGUyZnNjay9wcm9ibGVtLmM6MjAwMAorbXNnaWQgIklHTk9SRUQiCittc2dzdHIgItCf0KDQntCG0JPQndCe0KDQntCS0JDQndCeIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWQsIGVsYXBzZWQgdGltZTogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKK21zZ3N0ciAi0JLQuNC60L7RgNC40YHRgtCw0L3QviDQv9Cw0LzigJnRj9GC0ZY6ICVkLCDQstC40YLRgNCw0YfQtdC90L4g0YfQsNGB0YM6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNpemUgb2YgaW5vZGU9JWRcbiIKK21zZ3N0ciAi0YDQvtC30LzRltGAIGlub2RlPSVkXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjExOQorbXNnaWQgIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iCittc2dzdHIgItC90LAg0L/QvtGH0LDRgtC60YMg0YHQutCw0L3Rg9Cy0LDQvdC90Y8gaW5vZGUiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjEzMAorbXNnaWQgIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0LLQuNC60L7QvdCw0L3QvdGPINGB0LrQsNC90YPQstCw0L3QvdGPIGlub2RlIgorCisjOiBlMmZzY2svc3VwZXIuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYmxvY2tfaXRlcmF0ZSBmb3IgaW5vZGUgJWQiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0LLQuNC60LvQuNC60YMgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUg0LTQu9GPIGlub2RlICVkIgorCisjOiBlMmZzY2svc3VwZXIuYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MiBmb3IgaW5vZGUgJWQiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0LLQuNC60LvQuNC60YMgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIg0LTQu9GPIGlub2RlICVkIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzQKK21zZ2lkICJUcnVuY2F0aW5nIgorbXNnc3RyICLQntCx0YDRltC30LDRlNC80L4iCisKKyM6IGUyZnNjay9zdXBlci5jOjI3NQorbXNnaWQgIkNsZWFyaW5nIgorbXNnc3RyICLQp9C40YnQtdC90L3RjyIKKworIzogZTJmc2NrL3VuaXguYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstcGFueXJjZGZ2dERGVl0gWy1iIHN1cGVyYmxvY2tdIFstQiBibG9ja3NpemVdXG4iCisiXHRcdFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBbLVAgcHJvY2Vzc19pbm9kZV9zaXplXVxuIgorIlx0XHRbLWx8LUwgYmFkX2Jsb2Nrc19maWxlXSBbLUMgZmRdIFstaiBleHRlcm5hbF9qb3VybmFsXVxuIgorIlx0XHRbLUUgZXh0ZW5kZWQtb3B0aW9uc10gZGV2aWNlXG4iCittc2dzdHIgIiIKKyLQmtC+0YDQuNGB0YLRg9Cy0LDQvdC90Y86ICVzIFstcGFueXJjZGZ2dERGVl0gWy1iINGB0YPQv9C10YDQsdC70L7Qul0gWy1CINGA0L7Qt9C80ZbRgCDQsdC70L7QutGDXVxuIgorIlx0XHRbLUkg0LHQu9C+0LrQuCDQsdGD0YTQtdGA0LAgaW5vZGVdIFstUCDRgNC+0LfQvNGW0YAgaW5vZGUg0L/RgNC+0YbQtdGB0YNdXG4iCisiXHRcdFstbHwtTCDRhNCw0LnQuyDQv9C+0YjQutC+0LTQttC10L3QuNGFINCx0LvQvtC60ZbQsl0gWy1DINC00LXRgdC60YDQuNC/0YLQvtGAINGE0LDQudC70LBdIFstaiDRgNC+0LfRiNC40YDQtdC90LjQuSAiCisi0LbRg9GA0L3QsNC7XVxuIgorIlx0XHRbLUUg0YDQvtC30YjQuNGA0LXQvdGWINC/0LDRgNCw0LzQtdGC0YDQuF0g0L/RgNC40YHRgtGA0ZbQuVxuIgorCisjOiBlMmZzY2svdW5peC5jOjgwCittc2dpZCAiIgorIlxuIgorIkVtZXJnZW5jeSBoZWxwOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgcmVwYWlyIChubyBxdWVzdGlvbnMpXG4iCisiIC1uICAgICAgICAgICAgICAgICAgIE1ha2Ugbm8gY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbVxuIgorIiAteSAgICAgICAgICAgICAgICAgICBBc3N1bWUgXCJ5ZXNcIiB0byBhbGwgcXVlc3Rpb25zXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBiYWQgYmxvY2tzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmFkYmxvY2sgIgorImxpc3RcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBjbGVhblxuIgorbXNnc3RyICIiCisiXG4iCisi0KLQtdGA0LzRltC90L7QstCwINC00L7QstGW0LTQutCwOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICDQsNCy0YLQvtC80LDRgtC40YfQvdC1INCy0LjQv9GA0LDQstC70LXQvdC90Y8gKNCx0LXQtyDQtNC+0LTQsNGC0LrQvtCy0LjRhSDQt9Cw0L/QuNGC0LDQvdGMKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICDQvdC1INCy0L3QvtGB0LjRgtC4INC30LzRltC9INC00L4g0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuFxuIgorIiAteSAgICAgICAgICAgICAgICAgICDQstGW0LTQv9C+0LLRltGB0YLQuCDQvdCwINGD0YHRliDQv9C40YLQsNC90L3RjyDCq9GC0LDQusK7XG4iCisiIC1jICAgICAgICAgICAgICAgICAgINC30L3QsNC50YLQuCDQv9C+0YjQutC+0LTQttC10L3RliDQsdC70L7QutC4INGWINC00L7QtNCw0YLQuCDRl9GFINC00L4g0YHQv9C40YHQutGDXG4iCisiIC1mICAgICAgICAgICAgICAgICAgINC/0YDQuNC80YPRgdC+0LLQsCDQv9C10YDQtdCy0ZbRgNC60LAsINC90LDQstGW0YLRjCDRj9C60YnQviDRgdC40YHRgtC10LzRgyDQv9C+0LfQvdCw0YfQtdC90L4g0Y/QuiAiCisi0L3QtdC/0L7RiNC60L7QtNC20LXQvdGDXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODYKK21zZ2lkICIiCisiIC12ICAgICAgICAgICAgICAgICAgIEJlIHZlcmJvc2VcbiIKKyIgLWIgc3VwZXJibG9jayAgICAgICAgVXNlIGFsdGVybmF0aXZlIHN1cGVyYmxvY2tcbiIKKyIgLUIgYmxvY2tzaXplICAgICAgICAgRm9yY2UgYmxvY2tzaXplIHdoZW4gbG9va2luZyBmb3Igc3VwZXJibG9ja1xuIgorIiAtaiBleHRlcm5hbF9qb3VybmFsICBTZXQgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGpvdXJuYWxcbiIKKyIgLWwgYmFkX2Jsb2Nrc19maWxlICAgQWRkIHRvIGJhZGJsb2NrcyBsaXN0XG4iCisiIC1MIGJhZF9ibG9ja3NfZmlsZSAgIFNldCBiYWRibG9ja3MgbGlzdFxuIgorbXNnc3RyICIiCisiIC12ICAgICAgICAgICAgICAgICAgINGA0LXQttC40Lwg0LTQvtC60LvQsNC00L3QuNGFINC/0L7QstGW0LTQvtC80LvQtdC90YxcbiIKKyIgLWIg0YHRg9C/0LXRgNCx0LvQvtC6ICAgICAgICAg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INCw0LvRjNGC0LXRgNC90LDRgtC40LLQvdC40Lkg0YHRg9C/0LXRgNCx0LvQvtC6XG4iCisiIC1CINGA0L7Qt9C80ZbRgF/QsdC70L7QutGDICAgICAg0L/RgNC40LzRg9GB0L7QstC+INCy0LjQt9C90LDRh9C40YLQuCDRgNC+0LfQvNGW0YAg0LTQu9GPINC/0L7RiNGD0LrRgyDRgdGD0L/QtdGA0LHQu9C+0LrRg1xuIgorIiAtaiDQt9C+0LLQvV/QttGD0YDQvdCw0LvRgyAgICAgINCy0LrQsNC30LDRgtC4INGA0L7Qt9GC0LDRiNGD0LLQsNC90L3RjyDQt9C+0LLQvdGW0YjQvdGM0L7Qs9C+INC20YPRgNC90LDQu9GDXG4iCisiIC1sINGE0LDQudC7X9C/0L7QvF/QsdC70L7QutGW0LIgICDQtNC+0LTQsNGC0Lgg0LTQviDRgdC/0LjRgdC60YMg0L/QvtC80LjQu9C60L7QstC40YUg0LHQu9C+0LrRltCyXG4iCisiIC1MINGE0LDQudC7X9C/0L7QvF/QsdC70L7QutGW0LIgICDQstC60LDQt9Cw0YLQuCDRgdC/0LjRgdC+0Log0L/QvtC80LjQu9C60L7QstC40YUg0LHQu9C+0LrRltCyXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAldS8ldSBmaWxlcyAoJTBkLiVkJSUgbm9uLWNvbnRpZ3VvdXMpLCAlbGx1LyVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiVzOiAldS8ldSDRhNCw0LnQu9GW0LIgKCUwZC4lZCUlINGA0L7Qt9GA0LjQstC90LjRhSksICVsbHUvJWxsdSDQsdC70L7QutGW0LJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSBpbm9kZXMgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnc3RyWzBdICIiCisiXG4iCisi0JLQuNC60L7RgNC40YHRgtCw0L3QviAlMTJ1IGlub2RlICglMi4yZiUlINC3ICV1KVxuIgorbXNnc3RyWzFdICIiCisiXG4iCisi0JLQuNC60L7RgNC40YHRgtCw0L3QviAlMTJ1IGlub2RlICglMi4yZiUlINC3ICV1KVxuIgorbXNnc3RyWzJdICIiCisiXG4iCisi0JLQuNC60L7RgNC40YHRgtCw0L3QviAlMTJ1IGlub2RlICglMi4yZiUlINC3ICV1KVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGUgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiJTEydSDRgNC+0LfRgNC40LLQvdC40Lkg0YTQsNC50LsgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzFdICIlMTJ1INGA0L7Qt9GA0LjQstC90LjRhSDRhNCw0LnQu9CwICglMGQuJWQlJSlcbiIKK21zZ3N0clsyXSAiJTEydSDRgNC+0LfRgNC40LLQvdC40YUg0YTQsNC50LvRltCyICglMGQuJWQlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcnkgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yaWVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiJTEydSDRgNC+0LfRgNC40LLQvdC40Lkg0LrQsNGC0LDQu9C+0LMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzFdICIlMTJ1INGA0L7Qt9GA0LjQstC90LjRhSDQutCw0YLQsNC70L7Qs9C4ICglMGQuJWQlJSlcbiIKK21zZ3N0clsyXSAiJTEydSDRgNC+0LfRgNC40LLQvdC40YUg0LrQsNGC0LDQu9C+0LPRltCyICglMGQuJWQlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICAgICAgICMgb2YgaW5vZGVzIHdpdGggaW5kL2RpbmQvdGluZCBibG9ja3M6ICV1LyV1LyV1XG4iCittc2dzdHIgIiAgICAgICAgICAgICDQmi3RgtGMIGlub2RlINC3INCx0LvQvtC60LDQvNC4IGluZC9kaW5kL3RpbmQ6ICV1LyV1LyV1XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc5Cittc2dpZCAiICAgICAgICAgICAgIEV4dGVudCBkZXB0aCBoaXN0b2dyYW06ICIKK21zZ3N0ciAiICAgICAgICAgICAgINCT0ZbRgdGC0L7Qs9GA0LDQvNCwINCz0LvQuNCx0LjQvdC4INGA0L7Qt9GI0LjRgNC10L3QvdGPOiAiCisKKyM6IGUyZnNjay91bml4LmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMmxsdSBibG9jayB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEybGx1IGJsb2NrcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ3N0clswXSAi0LLQuNC60L7RgNC40YHRgtCw0L3QviAlMTJsbHUg0LHQu9C+0LogKCUyLjJmJSUg0LcgJWxsdSlcbiIKK21zZ3N0clsxXSAi0LLQuNC60L7RgNC40YHRgtCw0L3QviAlMTJsbHUg0LHQu9C+0LrQuCAoJTIuMmYlJSDQtyAlbGx1KVxuIgorbXNnc3RyWzJdICLQstC40LrQvtGA0LjRgdGC0LDQvdC+ICUxMmxsdSDQsdC70L7QutGW0LIgKCUyLjJmJSUg0LcgJWxsdSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBiYWQgYmxvY2tcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBiYWQgYmxvY2tzXG4iCittc2dzdHJbMF0gIiUxMnUg0L/QvtC80LjQu9C60L7QstC40Lkg0LHQu9C+0LpcbiIKK21zZ3N0clsxXSAiJTEydSDQv9C+0LzQuNC70LrQvtCy0ZYg0LHQu9C+0LrQuFxuIgorbXNnc3RyWzJdICIlMTJ1INC/0L7QvNC40LvQutC+0LLQuNGFINCx0LvQvtC60ZbQslxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxhcmdlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsYXJnZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1INCy0LXQu9C40LrQuNC5INGE0LDQudC7XG4iCittc2dzdHJbMV0gIiUxMnUg0LLQtdC70LjQutC40YUg0YTQsNC50LvQsFxuIgorbXNnc3RyWzJdICIlMTJ1INCy0LXQu9C40LrQuNGFINGE0LDQudC70ZbQslxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlc1xuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJTEydSDQt9Cy0LjRh9Cw0LnQvdC40Lkg0YTQsNC50LtcbiIKK21zZ3N0clsxXSAiIgorIlxuIgorIiUxMnUg0LfQstC40YfQsNC50L3QuNGFINGE0LDQudC70LBcbiIKK21zZ3N0clsyXSAiIgorIlxuIgorIiUxMnUg0LfQstC40YfQsNC50L3QuNGFINGE0LDQudC70ZbQslxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGRpcmVjdG9yeVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGRpcmVjdG9yaWVzXG4iCittc2dzdHJbMF0gIiUxMnUg0LrQsNGC0LDQu9C+0LNcbiIKK21zZ3N0clsxXSAiJTEydSDQutCw0YLQsNC70L7Qs9C4XG4iCittc2dzdHJbMl0gIiUxMnUg0LrQsNGC0LDQu9C+0LPRltCyXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1INGE0LDQudC7INGB0LjQvNCy0L7Qu9GM0L3QuNGFINC/0YDQuNGB0YLRgNC+0ZfQslxuIgorbXNnc3RyWzFdICIlMTJ1INGE0LDQudC70Lgg0YHQuNC80LLQvtC70YzQvdC40YUg0L/RgNC40YHRgtGA0L7Rl9CyXG4iCittc2dzdHJbMl0gIiUxMnUg0YTQsNC50LvRltCyINGB0LjQvNCy0L7Qu9GM0L3QuNGFINC/0YDQuNGB0YLRgNC+0ZfQslxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUg0YTQsNC50Lsg0LHQu9C+0LrQvtCy0LjRhSDQv9GA0LjRgdGC0YDQvtGX0LJcbiIKK21zZ3N0clsxXSAiJTEydSDRhNCw0LnQu9C4INCx0LvQvtC60L7QstC40YUg0L/RgNC40YHRgtGA0L7Rl9CyXG4iCittc2dzdHJbMl0gIiUxMnUg0YTQsNC50LvRltCyINCx0LvQvtC60L7QstC40YUg0L/RgNC40YHRgtGA0L7Rl9CyXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlmb1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpZm9zXG4iCittc2dzdHJbMF0gIiUxMnUgZmlmb1xuIgorbXNnc3RyWzFdICIlMTJ1IGZpZm9cbiIKK21zZ3N0clsyXSAiJTEydSBmaWZvXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbGlua1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGxpbmtzXG4iCittc2dzdHJbMF0gIiUxMnUg0L/QvtGB0LjQu9Cw0L3QvdGPXG4iCittc2dzdHJbMV0gIiUxMnUg0L/QvtGB0LjQu9Cw0L3QvdGPXG4iCittc2dzdHJbMl0gIiUxMnUg0L/QvtGB0LjQu9Cw0L3RjFxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHN5bWJvbGljIGxpbmsiCittc2dpZF9wbHVyYWwgIiUxMnUgc3ltYm9saWMgbGlua3MiCittc2dzdHJbMF0gIiUxMnUg0YHQuNC80LLQvtC70ZbRh9C90LUg0L/QvtGB0LjQu9Cw0L3QvdGPIgorbXNnc3RyWzFdICIlMTJ1INGB0LjQvNCy0L7Qu9GW0YfQvdC40YUg0L/QvtGB0LjQu9Cw0L3QvdGPIgorbXNnc3RyWzJdICIlMTJ1INGB0LjQvNCy0L7Qu9GW0YfQvdC40YUg0L/QvtGB0LjQu9Cw0L3RjCIKKworIzogZTJmc2NrL3VuaXguYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmspXG4iCittc2dpZF9wbHVyYWwgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rcylcbiIKK21zZ3N0clswXSAiICgldSDRiNCy0LjQtNC60LUg0YHQuNC80LLQvtC70ZbRh9C90LUg0L/QvtGB0LjQu9Cw0L3QvdGPKVxuIgorbXNnc3RyWzFdICIgKCV1INGI0LLQuNC00LrQuNGFINGB0LjQvNCy0L7Qu9GW0YfQvdC40YUg0L/QvtGB0LjQu9Cw0L3QvdGPKVxuIgorbXNnc3RyWzJdICIgKCV1INGI0LLQuNC00LrQuNGFINGB0LjQvNCy0L7Qu9GW0YfQvdC40YUg0L/QvtGB0LjQu9Cw0L3RjClcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzb2NrZXRcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBzb2NrZXRzXG4iCittc2dzdHJbMF0gIiUxMnUg0YHQvtC60LXRglxuIgorbXNnc3RyWzFdICIlMTJ1INGB0L7QutC10YLQuFxuIgorbXNnc3RyWzJdICIlMTJ1INGB0L7QutC10YLRltCyXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUg0YTQsNC50LtcbiIKK21zZ3N0clsxXSAiJTEydSDRhNCw0LnQu9C4XG4iCittc2dzdHJbMl0gIiUxMnUg0YTQsNC50LvRltCyXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjMyIG1pc2MvYmFkYmxvY2tzLmM6OTkzIG1pc2MvdHVuZTJmcy5jOjIxMjIgbWlzYy91dGlsLmM6MzE2CisjOiByZXNpemUvbWFpbi5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQstC40LfQvdCw0YfQuNGC0LgsINGH0Lgg0LfQvNC+0L3RgtC+0LLQsNC90L4gJXMuIgorCisjOiBlMmZzY2svdW5peC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAi0KPQstCw0LPQsCEgJXMg0LfQvNC+0L3RgtC+0LLQsNC90L4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyBpbiB1c2UuXG4iCittc2dzdHIgItCj0LLQsNCz0LAhICVzINCy0LjQutC+0YDQuNGB0YLQvtCy0YPRlNGC0YzRgdGPLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICIlcyDQt9C80L7QvdGC0L7QstCw0L3Qvi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW4gdXNlLlxuIgorbXNnc3RyICIlcyDQstC40LrQvtGA0LjRgdGC0L7QstGD0ZTRgtGM0YHRjy5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjYKK21zZ2lkICIiCisiQ2Fubm90IGNvbnRpbnVlLCBhYm9ydGluZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorItCf0YDQvtC00L7QstC20LXQvdC90Y8g0L3QtdC80L7QttC70LjQstC1LCDQv9C10YDQtdGA0LjQstCw0ZTQvNC+INGA0L7QsdC+0YLRgy5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjgKK21zZ2lkICIiCisiXG4iCisiXG4iCisiV0FSTklORyEhISAgVGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4gICBJZiB5b3UgY29udGludWUgeW91ICoqKldJTEwqKipcbiIKKyJjYXVzZSAqKipTRVZFUkUqKiogZmlsZXN5c3RlbSBkYW1hZ2UuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyLQo9CS0JDQk9CQISEhINCk0LDQudC70L7QstGDINGB0LjRgdGC0LXQvNGDINC30LzQvtC90YLQvtCy0LDQvdC+LiDQr9C60YnQviDQstC40LrQvtC90LDQvdC90Y8g0LTRltGXINCx0YPQtNC1INC/0YDQvtC00L7QstC20LXQvdC+LFxuIgorItC80L7QttC70LjQstGWICoqKtCX0J3QkNCn0J3QhioqKiDRg9GI0LrQvtC00LbQtdC90L3RjyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4LlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI3MworbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byBjb250aW51ZSIKK21zZ3N0ciAi0JLQuCDQtNGW0LnRgdC90L4g0LHQsNC20LDRlNGC0LUg0L/RgNC+0LTQvtCy0LbQuNGC0LgiCisKKyM6IGUyZnNjay91bml4LmM6Mjc1Cittc2dpZCAiY2hlY2sgYWJvcnRlZC5cbiIKK21zZ3N0ciAi0L/QtdGA0LXQstGW0YDQutGDINC/0LXRgNC10YDQstCw0L3Qvi5cbiIKKworIzogZTJmc2NrL3VuaXguYzozNjgKK21zZ2lkICIgY29udGFpbnMgYSBmaWxlIHN5c3RlbSB3aXRoIGVycm9ycyIKK21zZ3N0ciAiINC80ZbRgdGC0LjRgtGMINGE0LDQudC70L7QstGDINGB0LjRgdGC0LXQvNGDINC3INC/0L7QvNC40LvQutCw0LzQuCIKKworIzogZTJmc2NrL3VuaXguYzozNzAKK21zZ2lkICIgd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCIKK21zZ3N0ciAiINC90LUg0LHRg9C70L4g0LTQtdC80L7QvdGC0L7QstCw0L3QviDRgyDRiNGC0LDRgtC90L7QvNGDINGA0LXQttC40LzRliIKKworIzogZTJmc2NrL3VuaXguYzozNzIKK21zZ2lkICIgcHJpbWFyeSBzdXBlcmJsb2NrIGZlYXR1cmVzIGRpZmZlcmVudCBmcm9tIGJhY2t1cCIKK21zZ3N0ciAiIgorIiDQvNC+0LbQu9C40LLQvtGB0YLRliDQvtGB0L3QvtCy0L3QvtCz0L4g0YHRg9C/0LXRgNCx0LvQvtC60YMg0LLRltC00YDRltC30L3Rj9GU0YLRjNGB0Y8g0LLRltC0INC80L7QttC70LjQstC+0YHRgtC10Lkg0YMg0YDQtdC30LXRgNCy0L3RltC5ICIKKyLQutC+0L/RltGXIgorCisjOiBlMmZzY2svdW5peC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGJlZW4gbW91bnRlZCAldSB0aW1lcyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiDQt9C80L7QvdGC0L7QstCw0L3QviAldSDRgNCw0LfRltCyINCx0LXQtyDQv9C10YDQtdCy0ZbRgNC60LgiCisKKyM6IGUyZnNjay91bml4LmM6MzgzCittc2dpZCAiIGhhcyBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0aW1lIGluIHRoZSBmdXR1cmUiCittc2dzdHIgIiIKKyIg0LzRltGB0YLQuNGC0Ywg0YTQsNC50LvQvtCy0YMg0YHQuNGB0YLQtdC80YMsINGH0LDRgSDQvtGB0YLQsNC90L3RjNC+0Zcg0L/QtdGA0LXQstGW0YDQutC4INGP0LrQvtGXINC/0LXRgNC10LHRg9Cy0LDRlCDRgyAiCisi0LzQsNC50LHRg9GC0L3RjNC+0LzRgyIKKworIzogZTJmc2NrL3VuaXguYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBnb25lICV1IGRheXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIg0L/RgNC+0LnRiNC70L4gJXUg0LTQvdGW0LIg0LHQtdC3INC/0LXRgNC10LLRltGA0LrQuCIKKworIzogZTJmc2NrL3VuaXguYzozOTgKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiLCDQv9GA0LjQvNGD0YHQvtCy0LAg0L/QtdGA0LXQstGW0YDQutCwLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4sICV1LyV1IGZpbGVzLCAlbGx1LyVsbHUgYmxvY2tzIgorbXNnc3RyICIlczog0LHQtdC3INC/0L7QvNC40LvQvtC6LCAldS8ldSDRhNCw0LnQu9GW0LIsICVsbHUvJWxsdSDQsdC70L7QutGW0LIiCisKKyM6IGUyZnNjay91bml4LmM6NDUxCittc2dpZCAiIChjaGVjayBkZWZlcnJlZDsgb24gYmF0dGVyeSkiCittc2dzdHIgIiAo0L/QtdGA0LXQstGW0YDQutGDINCy0ZbQtNC60LvQsNC00LXQvdC+LCDQv9GA0LDRhtGO0ZTQvNC+INCy0ZbQtCDQsNC60YPQvNGD0LvRj9GC0L7RgNCwKSIKKworIzogZTJmc2NrL3VuaXguYzo0NTQKK21zZ2lkICIgKGNoZWNrIGFmdGVyIG5leHQgbW91bnQpIgorbXNnc3RyICIgKNC/0LXRgNC10LLRltGA0LrQsCDQv9GW0YHQu9GPINC90LDRgdGC0YPQv9C90L7Qs9C+INC80L7QvdGC0YPQstCw0L3QvdGPKSIKKworIzogZTJmc2NrL3VuaXguYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChjaGVjayBpbiAlbGQgbW91bnRzKSIKK21zZ3N0ciAiICjQv9C10YDQtdCy0ZbRgNC60LAg0LfQsCAlbGQg0LzQvtC90YLRg9Cy0LDQvdGMKSIKKworIzogZTJmc2NrL3VuaXguYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IENvdWxkbid0IG9wZW4gL2Rldi9udWxsICglcylcbiIKK21zZ3N0ciAi0J/QntCc0JjQm9Ca0JA6INC90LUg0LLQtNCw0LvQvtGB0Y8g0LLRltC00LrRgNC40YLQuCAvZGV2L251bGwgKCVzKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjY3NQorbXNnaWQgIkludmFsaWQgRUEgdmVyc2lvbi5cbiIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LAg0LLQtdGA0YHRltGPINGA0L7Qt9GI0LjRgNC10L3QvtCz0L4g0LDRgtGA0LjQsdGD0YLQsC5cbiIKKworIzogZTJmc2NrL3VuaXguYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBleHRlbmRlZCBvcHRpb246ICVzXG4iCittc2dzdHIgItCd0LXQstGW0LTQvtC80LjQuSDRgNC+0LfRiNC40YDQtdC90LjQuSDQv9Cw0YDQsNC80LXRgtGAOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjcyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIGUyZnNjayBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorItCh0LjQvdGC0LDQutGB0LjRh9C90LAg0L/QvtC80LjQu9C60LAg0YMg0YTQsNC50LvRliDQvdCw0LvQsNGI0YLRg9Cy0LDQvdGMIGUyZnNjayAoJXMsINGA0Y/QtNC+0LogJWQpXG4iCisiXHQlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0LLQuNC60L7QvdCw0YLQuCDQv9C10YDQtdCy0ZbRgNC60YMg0LTQtdGB0LrRgNC40L/RgtC+0YDQsCDRhNCw0LnQu9CwICVkOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjgwMQorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdC40Lkg0LTQtdGB0LrRgNC40L/RgtC+0YAg0YTQsNC50LvQsCDQtNCw0L3QuNGFINC00LvRjyDQsNCy0YLQvtC80LDRgtC40YfQvdC+0LPQviDQtNC+0L/QvtCy0L3QtdC90L3RjyIKKworIzogZTJmc2NrL3VuaXguYzo4MTYKK21zZ2lkICJPbmx5IG9uZSBvZiB0aGUgb3B0aW9ucyAtcC8tYSwgLW4gb3IgLXkgbWF5IGJlIHNwZWNpZmllZC4iCittc2dzdHIgItCc0L7QttC90LAg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INC70LjRiNC1INC+0LTQuNC9INC3INC90LDQsdC+0YDRgyDQv9Cw0YDQsNC80LXRgtGA0ZbQsiAtcC8tYSwgLW4g0YLQsCAteS4iCisKKyM6IGUyZnNjay91bml4LmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSAtdCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorbXNnc3RyICLQn9GW0LTRgtGA0LjQvNC60Lgg0L/QsNGA0LDQvNC10YLRgNCwIC10INGDINGG0ZbQuSDQstC10YDRgdGW0ZcgZTJmc2NrINC90LUg0L/QtdGA0LXQtNCx0LDRh9C10L3Qvi5cbiIKKworIzogZTJmc2NrL3VuaXguYzo4NjggZTJmc2NrL3VuaXguYzo5NDIgbWlzYy90dW5lMmZzLmM6ODc5IG1pc2MvdHVuZTJmcy5jOjExNzQKKyM6IG1pc2MvdHVuZTJmcy5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQstC40LrQvtC90LDRgtC4INCy0LjQt9C90LDRh9C10L3QvdGPIMKrJXPCuyIKKworIzogZTJmc2NrL3VuaXguYzo5MjEKK21zZ2lkICJUaGUgLW4gYW5kIC1EIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgItCf0LDRgNCw0LzQtdGC0YDQuCAtbiDRliAtRCDRlCDQstC30LDRlNC80L3QviDQvdC10YHRg9C80ZbRgdC90LjQvNC4LiIKKworIzogZTJmc2NrL3VuaXguYzo5MjYKK21zZ2lkICJUaGUgLW4gYW5kIC1jIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgItCf0LDRgNCw0LzQtdGC0YDQuCAtbiDRliAtYyDRlCDQstC30LDRlNC80L3QviDQvdC10YHRg9C80ZbRgdC90LjQvNC4LiIKKworIzogZTJmc2NrL3VuaXguYzo5MzEKK21zZ2lkICJUaGUgLW4gYW5kIC1sLy1MIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgItCf0LDRgNCw0LzQtdGC0YDQuCAtbiDRliAtbC8tTCDRlCDQstC30LDRlNC80L3QviDQvdC10YHRg9C80ZbRgdC90LjQvNC4LiIKKworIzogZTJmc2NrL3VuaXguYzo5ODUKK21zZ2lkICJUaGUgLWMgYW5kIHRoZSAtbC8tTCBvcHRpb25zIG1heSBub3QgYmUgYm90aCB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuXG4iCittc2dzdHIgItCf0LDRgNCw0LzQtdGC0YDQuCAtYyDRliAtbC8tTCDQvdC1INC80L7QttC90LAg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INC+0LTQvdC+0YfQsNGB0L3Qvi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMkZTQ0tfSkJEX0RFQlVHIFwiJXNcIiBub3QgYW4gaW50ZWdlclxuIgorIlxuIgorbXNnc3RyICIiCisiRTJGU0NLX0pCRF9ERUJVRyDCqyVzwrsg0L3QtSDRlCDRhtGW0LvQuNC80Lgg0YfQuNGB0LvQvtC8XG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTA0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSW52YWxpZCBub24tbnVtZXJpYyBhcmd1bWVudCB0byAtJWMgKFwiJXNcIilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorItCd0LXQutC+0YDQtdC60YLQvdC40Lkg0L3QtdGH0LjRgdC70L7QstC40Lkg0LDRgNCz0YPQvNC10L3RgiDQv9Cw0YDQsNC80LXRgtGA0LAgLSVjIChcIiVzXCIpXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGludGVydmFsIGlzICV1IHNlY29uZHMgYW5kIHRvdGFsIHdhaXQgdGltZSBpcyAldSBzZWNvbmRzLiBQbGVhc2UgIgorIndhaXQuLi5cbiIKK21zZ3N0ciAiIgorItCG0L3RgtC10YDQstCw0LsgTU1QINC00L7RgNGW0LLQvdGO0ZQgJXUg0YHQtdC60YPQvdC0LCDQsCDQt9Cw0LPQsNC70YzQvdC40Lkg0YfQsNGBINC+0YfRltC60YPQstCw0L3QvdGPINC00L7RgNGW0LLQvdGO0ZQgJXUgIgorItGB0LXQutGD0L3QtC4g0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LfQsNGH0LXQutCw0LnRgtC1Li4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTE0OSBlMmZzY2svdW5peC5jOjExNTQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBNTVAgYmxvY2siCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0L/QtdGA0LXQstGW0YDQutC4INCx0LvQvtC60YMgTU1QIgorCisjOiBlMmZzY2svdW5peC5jOjExNTYgbWlzYy90dW5lMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJJZiB5b3UgYXJlIHN1cmUgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IGluIHVzZSBvbiBhbnkgbm9kZSwgcnVuOlxuIgorIid0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfSdcbiIKK21zZ3N0ciAiIgorItCv0LrRidC+INCy0Lgg0LLQv9C10LLQvdC10L3Rliwg0YnQviDRhNCw0LnQu9C+0LLQsCDRgdC40YHRgtC10LzQsCDQvdC1INCy0LjQutC+0YDQuNGB0YLQvtCy0YPRlNGC0YzRgdGPINC20L7QtNC90LjQvCDQstGD0LfQu9C+0LwuICIKKyLQktGW0LTQtNCw0LnRgtC1INC60L7QvNCw0L3QtNGDOlxuIgorIsKrdHVuZTJmcyAtZiAtRSBjbGVhcl9tbXAge9C/0YDQuNGB0YLRgNGW0Ll9wrtcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjA3Cittc2dpZCAiRXJyb3I6IGV4dDJmcyBsaWJyYXJ5IHZlcnNpb24gb3V0IG9mIGRhdGUhXG4iCittc2dzdHIgItCf0L7QvNC40LvQutCwOiDQt9Cw0YHRgtCw0YDRltC70LAg0LLQtdGA0YHRltGPINCx0ZbQsdC70ZbQvtGC0LXQutC4IGV4dDJmcyFcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjE0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGluaXRpYWxpemUgcHJvZ3JhbSIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0ZbQvdGW0YbRltCw0LvRltC30YPQstCw0YLQuCDQv9GA0L7Qs9GA0LDQvNGDIgorCisjOiBlMmZzY2svdW5peC5jOjEyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlcywgJXNcbiIKK21zZ3N0ciAiXHTQktC40LrQvtGA0LjRgdGC0L7QstGD0ZTQvNC+ICVzLCAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEyNDkKK21zZ2lkICJuZWVkIHRlcm1pbmFsIGZvciBpbnRlcmFjdGl2ZSByZXBhaXJzIgorbXNnc3RyICLQtNC70Y8g0ZbQvdGC0LXRgNCw0LrRgtC40LLQvdC+0LPQviDQstGW0LTQvdC+0LLQu9C10L3QvdGPINC90LXQvtCx0YXRltC00L3QuNC5INGC0LXRgNC80ZbQvdCw0LsiCisKKyM6IGUyZnNjay91bml4LmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi5cbiIKK21zZ3N0ciAiJXM6ICVzLCDQvdCw0LzQsNCz0LDRlNC80L7RgdGPINGB0YLQstC+0YDQuNGC0Lgg0YDQtdC30LXRgNCy0L3RliDQutC+0L/RltGXINCx0LvQvtC60ZbQsi4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDUKK21zZ2lkICJTdXBlcmJsb2NrIGludmFsaWQsIgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QuNC5INGB0YPQv9C10YDQsdC70L7QuiwiCisKKyM6IGUyZnNjay91bml4LmM6MTMwNgorbXNnaWQgIkdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIgorbXNnc3RyICLQmdC80L7QstGW0YDQvdC+LCDQtNC10YHQutGA0LjQv9GC0L7RgNC4INCz0YDRg9C/INGUINC/0L7QvNC40LvQutC+0LLQuNC80LjigKYiCisKKyM6IGUyZnNjay91bml4LmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgdXNpbmcgdGhlIGJhY2t1cCBibG9ja3MiCittc2dzdHIgIiVzOiAlcyDQv9GW0LQg0YfQsNGBINCy0LjQutC+0YDQuNGB0YLQsNC90L3RjyDQsdC70L7QutGW0LIg0YDQtdC30LXRgNCy0L3QvtGXINC60L7Qv9GW0ZciCisKKyM6IGUyZnNjay91bml4LmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZ29pbmcgYmFjayB0byBvcmlnaW5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiVzOiDQv9C+0LLQtdGA0YLQsNGU0LzQvtGB0Y8g0LTQviDQv9C+0YfQsNGC0LrQvtCy0L7Qs9C+INGB0YPQv9C10YDQsdC70L7QutGDXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM0OQorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSByZXZpc2lvbiBpcyBhcHBhcmVudGx5IHRvbyBoaWdoIGZvciB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorIihPciB0aGUgZmlsZXN5c3RlbSBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQpXG4iCisiXG4iCittc2dzdHIgIiIKKyLQndC+0LzQtdGAINC80L7QtNC40YTRltC60LDRhtGW0Zcg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCDRlCDQvdCw0LTRgtC+INCy0LXQu9C40LrQuNC8INC00LvRjyDRhtGW0ZTRlyDQstC10YDRgdGW0ZcgZTJmc2NrLlxuIgorIijQsNCx0L4g0YHRg9C/0LXRgNCx0LvQvtC6INGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80Lgg0L/QvtGI0LrQvtC00LbQtdC90L4pXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1NgorbXNnaWQgIkNvdWxkIHRoaXMgYmUgYSB6ZXJvLWxlbmd0aCBwYXJ0aXRpb24/XG4iCittc2dzdHIgItCc0L7QttC70LjQstC+LCDRhtC1INGA0L7Qt9C00ZbQuyDQtyDQvdGD0LvRjNC+0LLQvtGOINC00L7QstC20LjQvdC+0Y4/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSBvciBiZSByb290XG4iCittc2dzdHIgIiIKKyLQktCw0Lwg0L/QvtGC0YDRltCx0LXQvSDQtNC+0YHRgtGD0L8gJXMg0LTQviDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4INCw0LHQviDQsNC00LzRltC90ZbRgdGC0YDQsNGC0LjQstC90LjQuSDQtNC+0YHRgtGD0L8gIgorIihyb290KVxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNjQKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgb3Igc3dhcCBkZXZpY2U/XG4iCittc2dzdHIgIiIKKyLQnNC+0LbQu9C40LLQviwg0L/RgNC40YHRgtGA0L7RjiDQvdC1INGW0YHQvdGD0ZQg0LDQsdC+INGG0LUg0L/RgNC40YHRgtGA0ZbQuSDRgNC10LfQtdGA0LLQvdC+0Zcg0L/QsNC84oCZ0Y/RgtGWICjRgdCy0L7Qv9GW0L3Qs9GDKT9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY2Cittc2dpZCAiRmlsZXN5c3RlbSBtb3VudGVkIG9yIG9wZW5lZCBleGNsdXNpdmVseSBieSBhbm90aGVyIHByb2dyYW0/XG4iCittc2dzdHIgIiIKKyLQpNCw0LnQu9C+0LLRgyDRgdC40YHRgtC10LzRgyDQt9C80L7QvdGC0L7QstCw0L3QviDQsNCx0L4g0LLRltC00LrRgNC40YLQviDRltC90YjQvtGOINC/0YDQvtCz0YDQsNC80L7RjiDRgyDRgNC10LbQuNC80ZYsINGJ0L4gIgorItCy0LjQutC70Y7Rh9Cw0ZQg0LTQvtGB0YLRg9C/INGB0YLQvtGA0L7QvdC90ZbRhSDQv9GA0L7Qs9GA0LDQvD9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzcwCittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IGRldmljZT9cbiIKK21zZ3N0ciAi0JzQvtC20LvQuNCy0L4sINC/0YDQuNGB0YLRgNC+0Y4g0L3QtSDRltGB0L3Rg9GUP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNzMKK21zZ2lkICIiCisiRGlzayB3cml0ZS1wcm90ZWN0ZWQ7IHVzZSB0aGUgLW4gb3B0aW9uIHRvIGRvIGEgcmVhZC1vbmx5XG4iCisiY2hlY2sgb2YgdGhlIGRldmljZS5cbiIKK21zZ3N0ciAiIgorItCU0LjRgdC6INC30LDRhdC40YnQtdC90L4g0LLRltC0INC30LDQv9C40YHRgzsg0YHQutC+0YDQuNGB0YLQsNC50YLQtdGB0Y8g0L/QsNGA0LDQvNC10YLRgNC+0LwgLW4g0LTQu9GPXG4iCisi0LLQuNC60L7QvdCw0L3QvdGPINC/0LXRgNC10LLRltGA0LrQuCDQtNC40YHQutCwINGH0LjRgtCw0L3QvdGP0LwuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTQzNworbXNnaWQgIkdldCBhIG5ld2VyIHZlcnNpb24gb2YgZTJmc2NrISIKK21zZ3N0ciAi0JLRgdGC0LDQvdC+0LLRltGC0Ywg0L3QvtCy0ZbRiNGDINCy0LXRgNGB0ZbRjiBlMmZzY2shIgorCisjOiBlMmZzY2svdW5peC5jOjE0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgZXh0MyBqb3VybmFsIGZvciAlcyIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDQv9C10YDQtdCy0ZbRgNC60Lgg0LbRg9GA0L3QsNC70YMgZXh0MyAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNDkyCittc2dpZCAiIgorIldhcm5pbmc6IHNraXBwaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYmVjYXVzZSBkb2luZyBhIHJlYWQtb25seSBmaWxlc3lzdGVtICIKKyJjaGVjay5cbiIKK21zZ3N0ciAiIgorItCf0L7Qv9C10YDQtdC00LbQtdC90L3Rjzog0L3QtSDQstC40LrQvtC90YPRlNC80L4g0LLRltC00L3QvtCy0LvQtdC90L3RjyDQttGD0YDQvdCw0LvRgywg0L7RgdC60ZbQu9GM0LrQuCDQv9C10YDQtdCy0ZbRgNC60LAgIgorItCy0LjQutC+0L3Rg9GU0YLRjNGB0Y8g0LTQu9GPINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LgsINC00L7RgdGC0YPQvyDQtNC+INGP0LrQvtGXINC30LTRltC50YHQvdGO0ZTRgtGM0YHRjyDRgyDRgNC10LbQuNC80ZYg0LvQuNGI0LUgIgorItGH0LjRgtCw0L3QvdGPLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBzdXBlcmJsb2NrIGZsYWdzIG9uICVzXG4iCittc2dzdHIgItC90LUg0LLQtNCw0LvQvtGB0Y8g0LLRgdGC0LDQvdC+0LLQuNGC0Lgg0L/RgNCw0L/QvtGA0YbRliDRgdGD0L/QtdGA0LHQu9C+0LrRgyDQvdCwICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWNvdmVyaW5nIGV4dDMgam91cm5hbCBvZiAlcyIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDQstGW0LTQvdC+0LLQu9C10L3QvdGPINC20YPRgNC90LDQu9GDIGV4dDMgJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTUzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKToiCittc2dzdHIgIiVzINC80LDRlCDQvdC10L/RltC00YLRgNC40LzRg9Cy0LDQvdGWINC80L7QttC70LjQstC+0YHRgtGWOiIKKworIzogZTJmc2NrL3VuaXguYzoxNTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YXJuaW5nOiBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKK21zZ3N0ciAiIgorIiVzOiDQv9C+0L/QtdGA0LXQtNC20LXQvdC90Y86INGC0LXRgdGC0YPQstCw0L3QvdGPINC/0ZbQtNGC0YDQuNC80LrQuCDRgdGC0LjRgdC60LDQvdC90Y8g0YnQtSDQvdC1INC30LDQstC10YDRiNC10L3QviAiCisiKNC10LrRgdC/0LXRgNC40LzQtdC90YLQsNC70YzQvdCwINC80L7QttC70LjQstGW0YHRgtGMKS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogZTJmc2NrIG5vdCBjb21waWxlZCB3aXRoIEhUUkVFIHN1cHBvcnQsXG4iCisiXHRidXQgZmlsZXN5c3RlbSAlcyBoYXMgSFRSRUUgZGlyZWN0b3JpZXMuXG4iCittc2dzdHIgIiIKKyIlczogZTJmc2NrINC90LUg0LHRg9C70L4g0LfRltCx0YDQsNC90L4g0Lcg0L/RltC00YLRgNC40LzQutC+0Y4gSFRSRUUsXG4iCisiXHTQstGC0ZbQvCwg0L3QsCDRhNCw0LnQu9C+0LLRltC5INGB0LjRgdGC0LXQvNGWICVzINGUINC60LDRgtCw0LvQvtCz0LggSFRSRUUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgcmVhZGluZyBiYWQgYmxvY2tzIGlub2RlXG4iCittc2dzdHIgIiVzOiAlcyDQv9GW0LQg0YfQsNGBINGH0LjRgtCw0L3QvdGPIGlub2RlINC/0L7RiNC60L7QtNC20LXQvdC40YUg0LHQu9C+0LrRltCyXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxMAorbXNnaWQgIlRoaXMgZG9lc24ndCBib2RlIHdlbGwsIGJ1dCB3ZSdsbCB0cnkgdG8gZ28gb24uLi5cbiIKK21zZ3N0ciAi0J/RgNC+0LPQvdC+0LfRg9Cy0LDQvdC90Y4g0L3QtSDQv9GW0LTQtNCw0ZTRgtGM0YHRjywg0LDQu9C1INC80Lgg0YHQv9GA0L7QsdGD0ZTQvNC+INGJ0L7RgdGMINC30YDQvtCx0LjRgtC4Li4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICglZCBibG9ja3MpOiAiCittc2dzdHIgItCh0YLQstC+0YDRjtGU0LzQviDQttGD0YDQvdCw0LsgKCVkINCx0LvQvtC60ZbQsik6ICIKKworIzogZTJmc2NrL3VuaXguYzoxNjYyCittc2dpZCAiIERvbmUuXG4iCittc2dzdHIgIiDQktC40LrQvtC90LDQvdC+LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NjQKK21zZ2lkICIiCisiXG4iCisiKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqKiog0LbRg9GA0L3QsNC7INGB0YLQstC+0YDQtdC90L4g0L/QvtCy0YLQvtGA0L3QviAtINGC0LXQv9C10YAg0YbQtSDQt9C90L7QstGDINGE0LDQudC70L7QstCwINGB0LjRgdGC0LXQvNCwIGV4dDMgKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY4OAorbXNnaWQgIlJlc3RhcnRpbmcgZTJmc2NrIGZyb20gdGhlIGJlZ2lubmluZy4uLlxuIgorbXNnc3RyICLQn9C10YDQtdC30LDQv9GD0YHQutCw0ZTQvNC+IGUyZnNjayDQtyDQv9C+0YfQsNGC0LrRgy4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2OTIKK21zZ2lkICJ3aGlsZSByZXNldHRpbmcgY29udGV4dCIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRgdC60LjQtNCw0L3QvdGPINC60L7QvdGC0LXQutGB0YLRgyIKKworIzogZTJmc2NrL3VuaXguYzoxNjk5Cittc2dpZCAiYWJvcnRlZCIKK21zZ3N0ciAi0L/QtdGA0LXRgNCy0LDQvdC+IgorCisjOiBlMmZzY2svdW5peC5jOjE3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGUyZnNjayBjYW5jZWxlZC5cbiIKK21zZ3N0ciAiJXM6INC+0LHRgNC+0LHQutGDINC30LAg0LTQvtC/0L7QvNC+0LPQvtGOIGUyZnNjayDRgdC60LDRgdC+0LLQsNC90L4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc0MSBlMmZzY2svdXRpbC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKiog0JTQniDQpNCQ0JnQm9Ce0JLQntCHINCh0JjQodCi0JXQnNCYINCR0KPQm9CeINCS0J3QldCh0JXQndCeINCX0JzQhtCd0JggKioqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAqKioqKiBSRUJPT1QgTElOVVggKioqKipcbiIKK21zZ3N0ciAiJXM6ICoqKioqINCf0JXQoNCV0JfQkNCS0JDQndCi0JDQltCi0JUgTElOVVggKioqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzUzIGUyZnNjay91dGlsLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIFdBUk5JTkc6IEZpbGVzeXN0ZW0gc3RpbGwgaGFzIGVycm9ycyAqKioqKioqKioqXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiDQn9Ce0J/QldCg0JXQlNCW0JXQndCd0K86INGDINGE0LDQudC70L7QstGW0Lkg0YHQuNGB0YLQtdC80ZYg0YPRgdC1INGJ0LUg0ZQg0L/QvtC80LjQu9C60LggKioqKioqKioqKlxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MCBtaXNjL3V0aWwuYzo4NgorbXNnaWQgInlZIgorbXNnc3RyICJ5WdGC0KIiCisKKyM6IGUyZnNjay91dGlsLmM6MTkxCittc2dpZCAibk4iCittc2dzdHIgIm5O0L3QnSIKKworIzogZTJmc2NrL3V0aWwuYzoyMDUKK21zZ2lkICI8eT4iCittc2dzdHIgIjx5PiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDcKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDkKK21zZ2lkICIgKHkvbikiCittc2dzdHIgIiAoeS9uINCw0LHQviDRgi/QvSkiCisKKyM6IGUyZnNjay91dGlsLmM6MjIzCittc2dpZCAiY2FuY2VsbGVkIVxuIgorbXNnc3RyICLRgdC60LDRgdC+0LLQsNC90L4uXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjM4Cittc2dpZCAieWVzXG4iCittc2dzdHIgItGC0LDQulxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI0MAorbXNnaWQgIm5vXG4iCittc2dzdHIgItC90ZZcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyBub1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/INC90ZZcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyB5ZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyDRgtCw0LpcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTgKK21zZ2lkICJ5ZXMiCittc2dzdHIgItGC0LDQuiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTgKK21zZ2lkICJubyIKK21zZ3N0ciAi0L3RliIKKworIzogZTJmc2NrL3V0aWwuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJmc2NrX3JlYWRfYml0bWFwczogaWxsZWdhbCBiaXRtYXAgYmxvY2socykgZm9yICVzIgorbXNnc3RyICJlMmZzY2tfcmVhZF9iaXRtYXBzOiDQvdC10LrQvtGA0LXQutGC0L3RliDQsdC70L7QutC4INCx0ZbRgtC+0LLQvtGXINC60LDRgNGC0Lgg0LTQu9GPICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjI3OAorbXNnaWQgInJlYWRpbmcgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMiCittc2dzdHIgItGH0LjRgtCw0L3QvdGPINCx0ZbRgtC+0LLQuNGFINC60LDRgNGCIGlub2RlINGC0LAg0LHQu9C+0LrRltCyIgorCisjOiBlMmZzY2svdXRpbC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXRyeWluZyB0byByZWFkIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINC/0L7QstGC0L7RgNC10L3QvdGPINGB0L/RgNC+0LHRgyDRh9C40YLQsNC90L3RjyDQsdGW0YLQvtCy0LjRhSDQutCw0YDRgiDQtNC70Y8gJXMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjk4Cittc2dpZCAid3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyIKK21zZ3N0ciAi0LfQsNC/0LjRgdGD0ZTQvNC+INCx0ZbRgtC+0LLRliDQutCw0YDRgtC4INCx0LvQvtC60ZbQsiDRgtCwIGlub2RlIgorCisjOiBlMmZzY2svdXRpbC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXdyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINC/0LXRgNC10LfQsNC/0LjRgdGDINCx0LvQvtC60YMg0YLQsCDQsdGW0YLQvtCy0LjRhSDQutCw0YDRgiBpbm9kZSDQtNC70Y8gJXMiCisKKyM6IGUyZnNjay91dGlsLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyIlczogVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOyBSVU4gZnNjayBNQU5VQUxMWS5cbiIKKyJcdChpLmUuLCB3aXRob3V0IC1hIG9yIC1wIG9wdGlvbnMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyIlczog0J3QldCe0KfQhtCa0KPQktCQ0J3QkCDQktCi0KDQkNCi0JAg0KbQhtCb0IbQodCd0J7QodCi0IY7INCX0JDQn9Cj0KHQotCG0KLQrCBmc2NrINCS0KDQo9Cn0J3Qoy5cbiIKKyJcdCjRgtC+0LHRgtC+INCx0LXQtyDQv9Cw0YDQsNC80LXRgtGA0ZbQsiAtYSDRgtCwIC1wKVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCittc2dzdHIgItCS0LjQutC+0YDQuNGB0YLQsNC90L4g0L/QsNC84oCZ0Y/RgtGWOiAlbHUg0LrQkS8lbHUg0LrQkSAoJWx1INC60JEvJWx1INC60JEpLCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHUsICIKK21zZ3N0ciAi0JLQuNC60L7RgNC40YHRgtCw0L3QviDQv9Cw0LzigJnRj9GC0ZY6ICVsdSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorbXNnc3RyICLRh9Cw0YE6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVsYXBzZWQgdGltZTogJTYuM2ZcbiIKK21zZ3N0ciAi0LLQuNGC0YDQsNGH0LXQvdC+INGH0LDRgdGDOiAlNi4zZlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjQ0NyBlMmZzY2svdXRpbC5jOjQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRh9C40YLQsNC90L3RjyBpbm9kZSAlbHUg0YMgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6NDc1IGUyZnNjay91dGlsLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINC30LDQv9C40YHRgyBpbm9kZSAlbHUg0LTQviAlcyIKKworIzogZTJmc2NrL3V0aWwuYzo2MzcKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIHplcm9pemluZyBidWZmZXIiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YDQvtC30LzRltGJ0LXQvdC90Y8g0YMg0L/QsNC84oCZ0Y/RgtGWINCx0YPRhNC10YDQsCDQt9Cw0L3Rg9C70LXQvdC90Y8iCisKKyM6IGUyZnNjay91dGlsLmM6Nzg1Cittc2dpZCAiIgorIlVORVhQRUNURUQgSU5DT05TSVNURU5DWTogdGhlIGZpbGVzeXN0ZW0gaXMgYmVpbmcgbW9kaWZpZWQgd2hpbGUgZnNjayBpcyAiCisicnVubmluZy5cbiIKK21zZ3N0ciAiIgorItCd0JXQntCn0IbQmtCj0JLQkNCd0JAg0JLQotCg0JDQotCQINCm0IbQm9CG0KHQndCe0KHQotCGOiDQv9GW0LQg0YfQsNGBINCy0LjQutC+0L3QsNC90L3RjyBmc2NrINC00L4g0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCAiCisi0LHRg9C70L4g0LLQvdC10YHQtdC90L4g0LfQvNGW0L3QuC5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3MgorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgItCy0LjQutC+0L3QsNC90L4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYiBibG9ja19zaXplXSBbLWkgaW5wdXRfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxvY2tzX2F0X29uY2VdIFstZCBkZWxheV9mYWN0b3JfYmV0d2Vlbl9yZWFkc10gWy1lICIKKyJtYXhfYmFkX2Jsb2Nrc11cbiIKKyIgICAgICAgWy1wIG51bV9wYXNzZXNdIFstdCB0ZXN0X3BhdHRlcm4gWy10IHRlc3RfcGF0dGVybiBbLi4uXV1dXG4iCisiICAgICAgIGRldmljZSBbbGFzdF9ibG9jayBbZmlyc3RfYmxvY2tdXVxuIgorbXNnc3RyICIiCisi0JrQvtGA0LjRgdGC0YPQstCw0L3QvdGPOiAlcyBbLWIg0YDQvtC30LzRltGAX9Cx0LvQvtC60YNdIFstaSDQstGF0ZbQtNC90LjQuV/RhNCw0LnQu10gWy1vINGE0LDQudC7X9Cy0LjQstC10LTQtdC90L3Rj10gWy0iCisic3Z3bmZdXG4iCisiICAgICAgIFstYyDQsdC70L7QutGW0LJf0L7QtNC90L7Rh9Cw0YHQvdC+XSBbLWQg0LrQvtC10YRf0LfQsNGC0YDQuNC80LrQuF/QvNGW0LZf0YfQuNGC0LDQvdC90Y/QvNC4XSBbLWUgIgorItC80LDQutGBX9C/0L7RiNC6X9Cx0LvQvtC60ZbQsl1cbiIKKyIgICAgICAgWy1wINC6LdGC0Yxf0L/RgNC+0YXQvtC00ZbQsl0gWy10INGC0LXRgdGCX9C30YDQsNC30L7QuiBbLXQg0YLQtdGB0YJf0LfRgNCw0LfQvtC6IFsuLi5dXV1cbiIKKyIgICAgICAg0L/RgNC40YHRgtGA0ZbQuSBb0L7RgdGC0LDQvdC90ZbQuV/QsdC70L7QuiBb0L/QtdGA0YjQuNC5X9Cx0LvQvtC6XV1cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBUaGUgLW4gYW5kIC13IG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzOiDQv9Cw0YDQsNC80LXRgtGA0LggLW4g0ZYgLXcg0L3QtSDQvNC+0LbQvdCwINCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0YLQuCDQvtC00L3QvtGH0LDRgdC90L4uXG4iCisiXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiU2LjJmJSUgZG9uZSwgJXMgZWxhcHNlZC4gKCVkLyVkLyVkIGVycm9ycykiCittc2dzdHIgItCS0LjQutC+0L3QsNC90L4g0L3QsCAlNi4yZiUlLCDQu9C40YjQuNC70L7RgdGPICVzLiAo0L/QvtC80LjQu9C60Lg6ICVkLyVkLyVkKSIKKworIzogbWlzYy9iYWRibG9ja3MuYzozMjgKK21zZ2lkICJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIKK21zZ3N0ciAi0KLQtdGB0YLRg9Cy0LDQvdC90Y8g0Lcg0LLQuNC/0LDQtNC60L7QstC40Lwg0LLQt9GW0YDRhtC10Lw6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNDYKK21zZ2lkICJUZXN0aW5nIHdpdGggcGF0dGVybiAweCIKK21zZ3N0ciAi0KLQtdGB0YLRg9Cy0LDQvdC90Y8g0LfRliDQstC30ZbRgNGG0LXQvCAweCIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNzggbWlzYy9iYWRibG9ja3MuYzo0NTEKK21zZ2lkICJkdXJpbmcgc2VlayIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDQv9C+0LfQuNGG0ZbRjtCy0LDQvdC90Y8iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIldlaXJkIHZhbHVlICglbGQpIGluIGRvX3JlYWRcbiIKK21zZ3N0ciAi0JTQuNCy0L3QtSDQt9C90LDRh9C10L3QvdGPICglbGQpINGDIGRvX3JlYWRcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo0NzYKK21zZ2lkICJkdXJpbmcgZXh0MmZzX3N5bmNfZGV2aWNlIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINCy0LjQutC+0L3QsNC90L3RjyBleHQyZnNfc3luY19kZXZpY2UiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDk2IG1pc2MvYmFkYmxvY2tzLmM6NzU4Cittc2dpZCAid2hpbGUgYmVnaW5uaW5nIGJhZCBibG9jayBsaXN0IGl0ZXJhdGlvbiIKK21zZ3N0ciAi0L3QsCDQv9C+0YfQsNGC0LrRgyDRltGC0LXRgNCw0YbRltGXINGB0L/QuNGB0LrQvtC8INC/0L7QvNC40LvQutC+0LLQuNGFINCx0LvQvtC60ZbQsiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTEgbWlzYy9iYWRibG9ja3MuYzo2MTEgbWlzYy9iYWRibG9ja3MuYzo3NjkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlcnMiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YDQvtC30LzRltGJ0LXQvdC90Y8g0LHRg9GE0LXRgNGW0LIg0YMg0L/QsNC84oCZ0Y/RgtGWIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBibG9ja3MgJWx1IHRvICVsdVxuIgorbXNnc3RyICLQn9C10YDQtdCy0ZbRgNGP0ZTQvNC+INCx0LvQvtC60Lgg0LcgJWx1INC00L4gJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTIwCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC1vbmx5IG1vZGVcbiIKK21zZ3N0ciAi0KjRg9C60LDRlNC80L4g0L/QvtC80LjQu9C60L7QstGWINCx0LvQvtC60Lgg0YMg0YDQtdC20LjQvNGWINC70LjRiNC1INGH0LjRgtCw0L3QvdGPXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTI5Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKHJlYWQtb25seSB0ZXN0KTogIgorbXNnc3RyICLQn9C10YDQtdCy0ZbRgNGP0ZTQvNC+INC90LDRj9Cy0L3RltGB0YLRjCDQv9C+0LzQuNC70LrQvtCy0LjRhSDQsdC70L7QutGW0LIgKNC/0LXRgNC10LLRltGA0LrQsCDQu9C40YjQtSDRh9C40YLQsNC90L3Rj9C8KTogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUzNiBtaXNjL2JhZGJsb2Nrcy5jOjY0MyBtaXNjL2JhZGJsb2Nrcy5jOjY4NQorIzogbWlzYy9iYWRibG9ja3MuYzo4MzIKK21zZ2lkICJUb28gbWFueSBiYWQgYmxvY2tzLCBhYm9ydGluZyB0ZXN0XG4iCittc2dzdHIgItCX0LDQvdCw0LTRgtC+INCx0LDQs9Cw0YLQviDQv9C+0LzQuNC70LrQvtCy0LjRhSDQsdC70L7QutGW0LIsINC/0LXRgNC10YDQuNCy0LDRlNC80L4g0L/QtdGA0LXQstGW0YDQutGDXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjE4Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgItCo0YPQutCw0ZTQvNC+INC/0L7QvNC40LvQutC+0LLRliDQsdC70L7QutC4INGDINGA0LXQttC40LzRliDRh9C40YLQsNC90L3Rjy3Qt9Cw0L/QuNGB0YNcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MjAgbWlzYy9iYWRibG9ja3MuYzo3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSBibG9jayAlbHUgdG8gJWx1XG4iCittc2dzdHIgItCS0ZbQtCDQsdC70L7QutGDICVsdSDQtNC+INCx0LvQvtC60YMgJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Njc1Cittc2dpZCAiUmVhZGluZyBhbmQgY29tcGFyaW5nOiAiCittc2dzdHIgItCn0LjRgtCw0L3QvdGPINGWINC/0L7RgNGW0LLQvdGP0L3QvdGPOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NzgxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICLQqNGD0LrQsNGU0LzQviDQv9C+0LzQuNC70LrQvtCy0ZYg0LHQu9C+0LrQuCDRgyDRgNC10LbQuNC80ZYg0YfQuNGC0LDQvdC90Y8t0LfQsNC/0LjRgdGDINCx0LXQtyDRgNGD0LnQvdGD0LLQsNC90L3RjyDQtNCw0L3QuNGFXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzg3Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIHRlc3QpXG4iCittc2dzdHIgIiIKKyLQn9C10YDQtdCy0ZbRgNGP0ZTQvNC+INC90LAg0L/QvtGI0LrQvtC00LbQtdC90ZYg0LHQu9C+0LrQuCAo0L/QtdGA0LXQstGW0YDQutCwINGH0LjRgtCw0L3QvdGP0Lwt0LfQsNC/0LjRgdC+0Lwg0LHQtdC3INGA0YPQudC90YPQstCw0L3QvdGPICIKKyLQtNCw0L3QuNGFKVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc5NAorbXNnaWQgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIgorbXNnc3RyICIiCisiXG4iCisi0J/QtdGA0LXRgNC40LLQsNC90L3Rjywg0YHQv9C+0YDQvtC20L3RjtGU0LzQviDQtNCw0L3RllxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjg3NworIywgYy1mb3JtYXQKK21zZ2lkICJkdXJpbmcgdGVzdCBkYXRhIHdyaXRlLCBibG9jayAlbHUiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YLQtdGB0YLQvtCy0L7Qs9C+INC30LDQv9C40YHRgyDQtNCw0L3QuNGFLCDQsdC70L7QuiAlbHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTk4IG1pc2MvdXRpbC5jOjMyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBtb3VudGVkOyAiCittc2dzdHIgIiVzINC30LzQvtC90YLQvtCy0LDQvdC+OyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwMAorbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICIiCisi0J/RgNC40LzRg9GB0L7QstC1INCy0LjQutC+0L3QsNC90L3RjyBiYWRibG9ja3MuINCh0L/QvtC00ZbQstCw0ZTQvNC+0YHRjywg0YnQviAvZXRjL210YWIg0LzRltGB0YLQuNGC0Ywg0L/QvtC80LjQu9C60LguXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwNQorbXNnaWQgIml0J3Mgbm90IHNhZmUgdG8gcnVuIGJhZGJsb2NrcyFcbiIKK21zZ3N0ciAi0LfQsNC/0YPRgdC60LDRgtC4IGJhZGJsb2NrcyDQvdC10LHQtdC30L/QtdGH0L3QviFcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDEwIG1pc2MvdXRpbC5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhcHBhcmVudGx5IGluIHVzZSBieSB0aGUgc3lzdGVtOyAiCittc2dzdHIgIiVzLCDQudC80L7QstGW0YDQvdC+LCDQstC40LrQvtGA0LjRgdGC0L7QstGD0ZTRgtGM0YHRjyDRgdC40YHRgtC10LzQvtGOOyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAxMworbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICJiYWRibG9ja3Mg0LHRg9C00LUg0L/RgNC40LzRg9GB0L7QstC+INC00L7QtNCw0L3QviDQv9C+0L/RgNC4INGG0LUuXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIC0gJXMiCittc2dzdHIgItC90LXQutC+0YDQtdC60YLQvdC40LkgJXMgLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBiaWcgbWF4IGJhZCBibG9ja3MgY291bnQgJXUgLSBtYXhpbXVtIGlzICV1IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRlc3RfcGF0dGVybiAtICVzIgorbXNnc3RyICLQvdC1INCy0LTQsNC70L7RgdGPINGA0L7Qt9C80ZbRgdGC0LjRgtC4INGDINC/0LDQvOKAmdGP0YLRliB0ZXN0X3BhdHRlcm4gLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTg0Cittc2dpZCAiTWF4aW11bSBvZiBvbmUgdGVzdF9wYXR0ZXJuIG1heSBiZSBzcGVjaWZpZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgItCjINGA0LXQttC40Lwg0LvQuNGI0LUg0YfQuNGC0LDQvdC90Y8g0LzQvtC20LUg0LHRg9GC0Lgg0LLQutCw0LfQsNC90L4g0LzQsNC60YHQuNC80YPQvCDQvtC00L3QvtCz0L4gdGVzdF9wYXR0ZXJuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExOTAKK21zZ2lkICJSYW5kb20gdGVzdF9wYXR0ZXJuIGlzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICLQktC40L/QsNC00LrQvtCy0LUg0LfQvdCw0YfQtdC90L3RjyB0ZXN0X3BhdHRlcm4g0YMg0YDQtdC20LjQvNGWINC70LjRiNC1INGH0LjRgtCw0L3QvdGPIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMDQKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgbWFudWFsbHlcbiIKK21zZ3N0ciAiIgorItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLQuNC30L3QsNGH0LjRgtC4INGA0L7Qt9C80ZbRgCDQv9GA0LjRgdGC0YDQvtGOOyDQstCw0Lwg0YHQu9GW0LQg0LLQutCw0LfQsNGC0LhcbiIKKyLRgNC+0LfQvNGW0YAg0LLRgNGD0YfQvdGDXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIxMAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZGV2aWNlIHNpemUiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INCy0LjQt9C90LDRh9C10L3QvdGPINC80ZbRgdGC0LrQvtGB0YLRliDQv9GA0LjRgdGC0YDQvtGOIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMTUKK21zZ2lkICJsYXN0IGJsb2NrIgorbXNnc3RyICLQvtGB0YLQsNC90L3RltC5INCx0LvQvtC6IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjEKK21zZ2lkICJmaXJzdCBibG9jayIKK21zZ3N0ciAi0L/QtdGA0YjQuNC5INCx0LvQvtC6IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAoJWxsdSk6IG11c3QgYmUgbGVzcyB0aGFuICVsbHUiCittc2dzdHIgItC90LXQutC+0YDQtdC60YLQvdC40Lkg0L/QvtGH0LDRgtC60L7QstC40Lkg0LHQu9C+0LogKCVsbHUpOiDQvdC+0LzQtdGAINC80LDRlCDQsdGD0YLQuCDQvNC10L3RiNC40Lwg0LfQsCAlbGx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBlbmQgYmxvY2sgKCVsbHUpOiBtdXN0IGJlIDMyLWJpdCB2YWx1ZSIKK21zZ3N0ciAi0L3QtdC60L7RgNC10LrRgtC90LjQuSDQt9Cw0LLQtdGA0YjQsNC70YzQvdC40Lkg0LHQu9C+0LogKCVsbHUpOiDQvNCw0ZQg0LHRg9GC0LggMzIt0LHRltGC0L7QstC1INC30L3QsNGH0LXQvdC90Y8iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI4NworbXNnaWQgIndoaWxlIGNyZWF0aW5nIGluLW1lbW9yeSBiYWQgYmxvY2tzIGxpc3QiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INGB0YLQstC+0YDQtdC90L3RjyDRgdC/0LjRgdC60YMg0L/QvtC80LjQu9C60L7QstC40YUg0LHQu9C+0LrRltCyINGDINC/0LDQvOKAmdGP0YLRliIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjk2Cittc2dpZCAiaW5wdXQgZmlsZSAtIGJhZCBmb3JtYXQiCittc2dzdHIgItGE0LDQudC7INCy0YXRltC00L3QuNGFINC00LDQvdC40YUg4oCUINC/0L7QvNC40LvQutC+0LLQuNC5INGE0L7RgNC80LDRgiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzA0IG1pc2MvYmFkYmxvY2tzLmM6MTMxMworbXNnaWQgIndoaWxlIGFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0LTQvtC00LDQstCw0L3QvdGPINC00L4g0YHQv9C40YHQutGDINC/0L7RiNC60L7QtNC20LXQvdC40YUg0LHQu9C+0LrRltCyINGDINC/0LDQvOKAmdGP0YLRliIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhc3MgY29tcGxldGVkLCAldSBiYWQgYmxvY2tzIGZvdW5kLiAoJWQvJWQvJWQgZXJyb3JzKVxuIgorbXNnc3RyICLQn9GA0L7RhdGW0LQg0LfQsNCy0LXRgNGI0LXQvdC+LCDQt9C90LDQudC00LXQvdC+ICV1INC/0L7RiNC60L7QtNC20LXQvdC40YUg0LHQu9C+0LrRltCyLiAoJWQvJWQvJWQg0L/QvtC80LjQu9C+0LopXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZmXSBbLSs9YUFjQ2REZWlqc1N0VHVdIFstdiB2ZXJzaW9uXSBmaWxlcy4uLlxuIgorbXNnc3RyICLQmtC+0YDQuNGB0YLRg9Cy0LDQvdC90Y86ICVzIFstUlZmXSBbLSs9YUFjQ2REZWlqc1N0VHVdIFstdiDQstC10YDRgdGW0Y9dINGE0LDQudC70LguLi5cbiIKKworIzogbWlzYy9jaGF0dHIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHZlcnNpb24gLSAlc1xuIgorbXNnc3RyICLQv9C+0LzQuNC70LrQvtCy0LAg0LLQtdGA0YHRltGPIC0gJXNcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyMDEgbWlzYy9sc2F0dHIuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHN0YXQgJXMiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INC+0YLRgNC40LzQsNC90L3RjyDRgdGC0LDRgtC40YHRgtC40YfQvdC40YUg0LTQsNC90LjRhSDRidC+0LTQviAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRh9C40YLQsNC90L3RjyDQv9GA0LDQv9C+0YDRhtGW0LIg0L3QsCAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyMTMgbWlzYy9jaGF0dHIuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3Mgb2YgJXMgc2V0IGFzICIKK21zZ3N0ciAi0J/RgNCw0L/QvtGA0YbRliAlcyDQstGB0YLQsNC90L7QstC70LXQvdC+INGP0LogIgorCisjOiBtaXNjL2NoYXR0ci5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINCy0YHRgtCw0L3QvtCy0LvQtdC90L3RjyDQv9GA0LDQv9C+0YDRhtGW0LIg0L3QsCAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiBvZiAlcyBzZXQgYXMgJWx1XG4iCittc2dzdHIgItCS0LXRgNGB0ZbRjiAlcyDQstGB0YLQsNC90L7QstC70LXQvdC+INGDINC30L3QsNGH0LXQvdC90Y8gJWx1XG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgdmVyc2lvbiBvbiAlcyIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDQstGB0YLQsNC90L7QstC70LXQvdC90Y8g0LLQtdGA0YHRltGXINC90LAgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjY3Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgcGF0aCB2YXJpYWJsZSBpbiBjaGF0dHJfZGlyX3Byb2MiCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0YDQvtC30LzRltGB0YLQuNGC0Lgg0LfQvNGW0L3QvdGDINGI0LvRj9GF0YMg0YMgY2hhdHRyX2Rpcl9wcm9jIgorCisjOiBtaXNjL2NoYXR0ci5jOjMwNworbXNnaWQgIj0gaXMgaW5jb21wYXRpYmxlIHdpdGggLSBhbmQgK1xuIgorbXNnc3RyICI9INGUINC90LXRgdGD0LzRltGB0L3QuNC8INC3IC0g0ZYgK1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjMxNQorbXNnaWQgIk11c3QgdXNlICctdicsID0sIC0gb3IgK1xuIgorbXNnc3RyICLQodC70ZbQtCDQstC40LrQvtGA0LjRgdGC0L7QstGD0LLQsNGC0LggwqstdsK7LCA9LCAtINCw0LHQviArXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2NrPTxudW0+XSBbLW8gYmxvY2tzaXplPTxudW0+XSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorItCa0L7RgNC40YHRgtGD0LLQsNC90L3RjzogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2NrPTzQvdC+0LzQtdGAPl0gWy1vIGJsb2Nrc2l6ZT080L3QvtC80LXRgD5dICIKKyLQv9GA0LjRgdGC0YDRltC5XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNTkKK21zZ2lkICJibG9ja3MiCittc2dzdHIgItCx0LvQvtC60LgiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNjkKK21zZ2lkICJjbHVzdGVycyIKK21zZ3N0ciAi0LrQu9Cw0YHRgtC10YDQuCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJHcm91cCAlbHU6IChCbG9ja3MgIgorbXNnc3RyICLQk9GA0YPQv9CwICVsdTogKNCx0LvQvtC60LggIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ2hlY2tzdW0gMHglMDR4IgorbXNnc3RyICIgINCa0L7QvdGC0YDQvtC70YzQvdCwINGB0YPQvNCwIDB4JTA0eCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKEVYUEVDVEVEIDB4JTA0eCkiCittc2dzdHIgIiAo0J7Qp9CG0JrQo9CS0JDQm9Ce0KHQryAweCUwNHgpIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgdW51c2VkIGlub2RlcyAldVxuIgorbXNnc3RyICIsINC90LXQstC40LrQvtGA0LjRgdGC0LDQvdC40YUgaW5vZGUgJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICVzIHN1cGVyYmxvY2sgYXQgIgorbXNnc3RyICIgINGB0YPQv9C10YDQsdC70L7QuiAlcyDRgyAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTQKK21zZ2lkICJQcmltYXJ5IgorbXNnc3RyICLQntGB0L3QvtCy0L3QuNC5IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE0Cittc2dpZCAiQmFja3VwIgorbXNnc3RyICLQl9Cw0L/QsNGB0L3QuNC5IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE4Cittc2dpZCAiLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAiCittc2dzdHIgIiwg0LTQtdGB0LrRgNC40L/RgtC+0YDQuCDQs9GA0YPQvyDRgyAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjIKK21zZ2lkICIiCisiXG4iCisiICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0ICIKK21zZ3N0ciAiIgorIlxuIgorIiAg0JfQsNGA0LXQt9C10YDQstC+0LLQsNC90ZYg0LHQu9C+0LrQuCBHRFQg0YMgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjI5Cittc2dpZCAiIEdyb3VwIGRlc2NyaXB0b3IgYXQgIgorbXNnc3RyICIg0JTQtdGB0LrRgNC40L/RgtC+0YAg0LPRgNGD0L/QuCDRgyAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzUKK21zZ2lkICIgIEJsb2NrIGJpdG1hcCBhdCAiCittc2dzdHIgIiAg0JHRltGC0L7QstCwINC60LDRgNGC0LAg0LHQu9C+0LrRltCyINGDICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzOQorbXNnaWQgIiwgSW5vZGUgYml0bWFwIGF0ICIKK21zZ3N0ciAiLCDQsdGW0YLQvtCy0LAg0LrQsNGA0YLQsCBJbm9kZSDRgyAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDMKK21zZ2lkICIiCisiXG4iCisiICBJbm9kZSB0YWJsZSBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgINCi0LDQsdC70LjRhtGPIElub2RlINC30LAg0LDQtNGA0LXRgdC+0Y4gIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgICV1IGZyZWUgJXMsICV1IGZyZWUgaW5vZGVzLCAldSBkaXJlY3RvcmllcyVzIgorbXNnc3RyICIiCisiXG4iCisiICAldSDQstGW0LvRjNC90LjRhSAlcywgJXUg0LLRltC70YzQvdC40YUgaW5vZGUsICV1INC60LDRgtCw0LvQvtCz0ZbQsiVzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgJXUgdW51c2VkIGlub2Rlc1xuIgorbXNnc3RyICIsICV1INC90LXQstC40LrQvtGA0LjRgdGC0LDQvdC40YUgaW5vZGVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1OQorbXNnaWQgIiAgRnJlZSBibG9ja3M6ICIKK21zZ3N0ciAiICDQktGW0LvRjNC90LjRhSDQsdC70L7QutGW0LI6ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI3NAorbXNnaWQgIiAgRnJlZSBpbm9kZXM6ICIKK21zZ3N0ciAi0JLRltC70YzQvdC40YUgaW5vZGU6ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxMAorbXNnaWQgIndoaWxlIHByaW50aW5nIGJhZCBibG9jayBsaXN0IgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINCy0LjQstC10LTQtdC90L3RjyDRgdC/0LjRgdC60YMg0L/QvtC80LjQu9C60L7QstC40YUg0LHQu9C+0LrRltCyIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9ja3M6ICV1IgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LjRhSDQsdC70L7QutGW0LI6ICV1IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzQ1IG1pc2MvdHVuZTJmcy5jOjM0NworbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRh9C40YLQsNC90L3RjyBpbm9kZSDQttGD0YDQvdCw0LvRgyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1MQorbXNnaWQgIndoaWxlIG9wZW5pbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0LLRltC00LrRgNC40YLQuCBpbm9kZSDQttGD0YDQvdCw0LvRgyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1NworbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlciBibG9jayIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRh9C40YLQsNC90L3RjyDRgdGD0L/QtdGA0LHQu9C+0LrRgyDQttGD0YDQvdCw0LvRgyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2NAorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXIgaW52YWxpZCFcbiIKK21zZ3N0ciAi0JrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAg0YHRg9C/0LXRgNCx0LvQvtC60YMg0LbRg9GA0L3QsNC70YMg0ZQg0L3QtdC60L7RgNC10LrRgtC90L7RjiFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2NworbXNnaWQgIkpvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAiCittc2dzdHIgItCc0L7QttC70LjQstC+0YHRgtGWINC20YPRgNC90LDQu9GDOiAgICAgICAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzgwCittc2dpZCAiSm91cm5hbCBzaXplOiAgICAgICAgICAgICAiCittc2dzdHIgItCg0L7Qt9C80ZbRgCDQttGD0YDQvdCw0LvRgzogICAgICAgICAgICAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCittc2dzdHIgIiIKKyLQlNC+0LLQttC40L3QsCDQttGD0YDQvdCw0LvRgzogICAgICAgICAgJXVcbiIKKyLQn9C+0YHQu9GW0LTQvtCy0L3RltGB0YLRjCDQttGD0YDQvdCw0LvRgzogICAgMHglMDh4XG4iCisi0J/QvtGH0LDRgtC+0Log0LbRg9GA0L3QsNC70YM6ICAgICAgICAgICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBlcnJubzogICAgICAgICAgICAlZFxuIgorbXNnc3RyICLQmtGW0LvRjNC60ZbRgdGC0Ywg0L/QvtC80LjQu9C+0Log0LbRg9GA0L3QsNC70YM6ICVkXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MTUgbWlzYy90dW5lMmZzLmM6MTk2Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YfQuNGC0LDQvdC90Y8g0YHRg9C/0LXRgNCx0LvQvtC60YMg0LbRg9GA0L3QsNC70YMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXJzIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC30L3QsNC50YLQuCDQutC+0L3RgtGA0L7Qu9GM0L3RliDRgdGD0LzQuCDRgdGD0L/QtdGA0LHQu9C+0LrRgyDQttGD0YDQvdCw0LvRgyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBibG9jayBzaXplOiAgICAgICAldVxuIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIGZpcnN0IGJsb2NrOiAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCisiSm91cm5hbCBudW1iZXIgb2YgdXNlcnM6ICAldVxuIgorbXNnc3RyICIiCisiXG4iCisi0KDQvtC30LzRltGAINCx0LvQvtC60YMg0LbRg9GA0L3QsNC70YM6ICAgICAldVxuIgorItCU0L7QstC20LjQvdCwINC20YPRgNC90LDQu9GDOiAgICAgICAgICAldVxuIgorItCf0LXRgNGI0LjQuSDQsdC70L7QuiDQttGD0YDQvdCw0LvRgzogICAgICAldVxuIgorItCf0L7RgdC70ZbQtNC+0LLQvdGW0YHRgtGMINC20YPRgNC90LDQu9GDOiAgICAweCUwOHhcbiIKKyLQn9C+0YfQsNGC0L7QuiDQttGD0YDQvdCw0LvRgzogICAgICAgICAgJXVcbiIKKyLQmi3RgtGMINC60L7RgNC40YHRgtGD0LLQsNGH0ZbQsiDQttGD0YDQvdCw0LvRgzogJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHVzZXJzOiAgICAgICAgICAgICVzXG4iCittc2dzdHIgItCa0L7RgNC40YHRgtGD0LLQsNGH0ZYg0LbRg9GA0L3QsNC70YM6ICAgICAgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ1NiBtaXNjL21rZTJmcy5jOjc0MyBtaXNjL3R1bmUyZnMuYzoxMjExCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIG9wdGlvbnMhXG4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDQvtCx0LvQsNGB0YLRjCDQv9Cw0LzigJnRj9GC0ZYg0LTQu9GPINC+0LHRgNC+0LHQutC4INC/0LDRgNCw0LzQtdGC0YDRltCyIVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jayBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdC40Lkg0L/QsNGA0LDQvNC10YLRgCDRgdGD0L/QtdGA0LHQu9C+0LrRgzogJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJsb2Nrc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdC40Lkg0L/QsNGA0LDQvNC10YLRgCDRgNC+0LfQvNGW0YDRgyDQsdC70L7QutGDOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgZXh0ZW5kZWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdXBlcmJsb2NrPTxzdXBlcmJsb2NrIG51bWJlcj5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvY2tzaXplPlxuIgorbXNnc3RyICIiCisiXG4iCisi0JLQutCw0LfQsNC90L4g0L/QvtC80LjQu9C60L7QstGWINC00L7QtNCw0YLQutC+0LLRliDQv9Cw0YDQsNC80LXRgtGA0Lg6ICVzXG4iCisiXG4iCisi0JTQvtC00LDRgtC60L7QstGWINC/0LDRgNCw0LzQtdGC0YDQuCDRgdC70ZbQtCDQstGW0LTQvtC60YDQtdC80LvRjtCy0LDRgtC4INC60L7QvNCw0LzQuC4g0JTQvtC00LDRgtC60L7QstGWINC/0LDRgNCw0LzQtdGC0YDQuCDQvNC+0LbRg9GC0YxcbiIKKyJcdNC/0YDQuNC50LzQsNGC0Lgg0LDRgNCz0YPQvNC10L3RgtC4LCDQt9C90LDRh9C10L3QvdGPINGP0LrQuNGFINCy0YHRgtCw0L3QvtCy0LvRjtGO0YLRjNGB0Y8g0LfQsCDQtNC+0L/QvtC80L7Qs9C+0Y4g0LfQvdCw0LrRgyAiCisi0YDRltCy0L3QvtGB0YLRliAoPSkuXG4iCisiXG4iCisi0JrQvtGA0LXQutGC0L3RliDQtNC+0LTQsNGC0LrQvtCy0ZYg0L/QsNGA0LDQvNC10YLRgNC4OlxuIgorIlx0c3VwZXJibG9jaz080L3QvtC80LXRgCDRgdGD0L/QtdGA0LHQu9C+0LrRgz5cbiIKKyJcdGJsb2Nrc2l6ZT080YDQvtC30LzRltGAINCx0LvQvtC60YM+XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NjggbWlzYy9ta2UyZnMuYzoxNzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXNcbiIKK21zZ3N0ciAiXHTQktC40LrQvtGA0LjRgdGC0L7QstGD0ZTQvNC+ICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo2MDYgbWlzYy9lMmltYWdlLmM6MTU4MiBtaXNjL3R1bmUyZnMuYzoyMDYwCisjOiByZXNpemUvbWFpbi5jOjMxOQorbXNnaWQgIkNvdWxkbid0IGZpbmQgdmFsaWQgZmlsZXN5c3RlbSBzdXBlcmJsb2NrLlxuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC30L3QsNC50YLQuCDQutC+0YDQtdC60YLQvdC40Lkg0YHRg9C/0LXRgNCx0LvQvtC6INGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LguXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAlczogZXJyb3IgcmVhZGluZyBiaXRtYXBzOiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICVzOiDQv9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGH0LjRgtCw0L3QvdGPINCx0ZbRgtC+0LLQuNGFINC60LDRgNGCOiAlc1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFsgLXJ8USBdIFsgLWZyIF0gZGV2aWNlIGltYWdlLWZpbGVcbiIKK21zZ3N0ciAi0JrQvtGA0LjRgdGC0YPQstCw0L3QvdGPOiAlcyBbIC1yfFEgXSBbIC1mciBdINC/0YDQuNGB0YLRgNGW0Lkg0YTQsNC50Lst0L7QsdGA0LDQt9GDXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLUkgZGV2aWNlIGltYWdlLWZpbGVcbiIKK21zZ3N0ciAiICAgICAgICVzIC1JINC/0YDQuNGB0YLRgNGW0Lkg0YTQsNC50Lst0L7QsdGA0LDQt9GDXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICVzIC1yYSAgWyAgLWNmbnAgIF0gWyAtbyBzcmNfb2Zmc2V0IF0gWyAtTyBkZXN0X29mZnNldCBdIHNyY19mcyAiCisiWyBkZXN0X2ZzIF1cbiIKK21zZ3N0ciAiIgorIiAgICAgICAlcyAtcmEgIFsgIC1jZm5wICBdIFsgLW8g0LLRltC00YHRgtGD0L8g0LTQttC10YDQtdC70LAgXSBbIC1PINCy0ZbQtNGB0YLRg9C/INC/0YDQuNC30L3QsNGH0LXQvdC90Y8gXSAiCisi0KTQoV/QtNC20LXRgNC10LvQsCBbINCk0KFf0L/RgNC40LfQvdCw0YfQtdC90L3RjyBdXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2OSBtaXNjL2UyaW1hZ2UuYzo1NzYgbWlzYy9lMmltYWdlLmM6NTgyCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTc4Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBidWZmZXIiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YDQvtC30LzRltGJ0LXQvdC90Y8g0LHRg9GE0LXRgNCwINGDINC/0LDQvOKAmdGP0YLRliIKKworIzogbWlzYy9lMmltYWdlLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgYmxvY2sgJWxsdVxuIgorbXNnc3RyICLQl9Cw0L/QuNGB0YPRlNC80L4g0LHQu9C+0LogJWxsdVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igd3JpdGluZyBibG9jayAlbGx1IgorbXNnc3RyICLQv9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQt9Cw0L/QuNGB0LDRgtC4INCx0LvQvtC6ICVsbHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE5MQorbXNnaWQgImVycm9yIGluIGdlbmVyaWNfd3JpdGUoKSIKK21zZ3N0ciAi0L/QvtC80LjQu9C60LAg0YMgZ2VuZXJpY193cml0ZSgpIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMDgKK21zZ2lkICJFcnJvcjogaGVhZGVyIHNpemUgaXMgYmlnZ2VyIHRoYW4gd3J0X3NpemVcbiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LA6INGA0L7Qt9C80ZbRgCDQt9Cw0LPQvtC70L7QstC60LAg0L/QtdGA0LXQstC40YnRg9GUINGA0L7Qt9C80ZbRgF/Qt9Cw0L/QuNGB0YNcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MjEzCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgaGVhZGVyIGJ1ZmZlclxuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINGA0L7Qt9C80ZbRgdGC0LjRgtC4INCx0YPRhNC10YAg0LfQsNCz0L7Qu9C+0LLQutCwINGDINC/0LDQvOKAmdGP0YLRllxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNDEKK21zZ2lkICJ3aGlsZSB3cml0aW5nIHN1cGVyYmxvY2siCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INC30LDQv9C40YHQsNGC0Lgg0YHRg9C/0LXRgNCx0LvQvtC6IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNTAKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQt9Cw0L/QuNGB0LDRgtC4INGC0LDQsdC70LjRhtGOIGlub2RlIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNTgKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDQt9Cw0L/QuNGB0YMg0LHRltGC0L7QstC+0Zcg0LrQsNGA0YLQuCDQsdC70L7QutGW0LIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI2NgorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgYml0bWFwIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINC30LDQv9C40YHRgyDQsdGW0YLQvtCy0L7RlyDQutCw0YDRgtC4IGlub2RlIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBkaXJlY3RvcnkgYmxvY2sgJWxsdTogYmFkIHJlY19sZW4gKCVkKVxuIgorbXNnc3RyICLQn9C+0YjQutC+0LTQttC10L3QviDQsdC70L7QuiDQutCw0YLQsNC70L7Qs9GDICVsbHU6INC/0L7QvNC40LvQutC+0LLQtSDQt9C90LDRh9C10L3QvdGPIHJlY19sZW4gKCVkKVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBkaXJlY3RvcnkgYmxvY2sgJWxsdTogYmFkIG5hbWVfbGVuICglZClcbiIKK21zZ3N0ciAi0J/QvtGI0LrQvtC00LbQtdC90L4g0LHQu9C+0Log0LrQsNGC0LDQu9C+0LPRgyAlbGx1OiDQv9C+0LzQuNC70LrQvtCy0LUg0LfQvdCw0YfQtdC90L3RjyBuYW1lX2xlbiAoJWQpXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGx1IC8gJWxsdSBibG9ja3MgKCVkJSUpIgorbXNnc3RyICIlbGx1INC3ICVsbHUg0LHQu9C+0LrRltCyICglZCUlKSIKKworIzogbWlzYy9lMmltYWdlLmM6NTg2IG1pc2MvZTJpbWFnZS5jOjYyNgorbXNnaWQgIkNvcHlpbmcgIgorbXNnc3RyICLQmtC+0L/RltGO0ZTQvNC+ICIKKworIzogbWlzYy9lMmltYWdlLmM6NjIzCittc2dpZCAiIgorIlN0b3BwaW5nIG5vdyB3aWxsIGRlc3Ryb3kgdGhlIGZpbGVzeXN0ZW0sIGludGVycnVwdCBhZ2FpbiBpZiB5b3UgYXJlIHN1cmVcbiIKK21zZ3N0ciAiIgorItCv0LrRidC+INC30LDRgNCw0Lcg0LfRg9C/0LjQvdC40YLQuCDQvtCx0YDQvtCx0LrRgywg0YTQsNC50LvQvtCy0YMg0YHQuNGB0YLQtdC80YMg0LHRg9C00LUg0LfRgNGD0LnQvdC+0LLQsNC90L4uINCf0LXRgNC10YDQstGW0YLRjCAiCisi0L7QsdGA0L7QsdC60YMg0YnQtSDRgNCw0LcsINGP0LrRidC+INGG0LUg0YHQsNC80LUg0YLQtSwg0YnQviDQv9C+0YLRgNGW0LHQvdC+LlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHJlbWFpbmluZyBhdCAlLjJmIE1CL3MiCittc2dzdHIgIiAlcyDRgtGA0LjQvNCw0ZTRgtGM0YHRjyDQvdCwINGI0LLQuNC00LrQvtGB0YLRliAlLjJmINCc0JEv0YEiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjY2MSBtaXNjL2UyaW1hZ2UuYzoxMTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgYmxvY2sgJWxsdSIKK21zZ3N0ciAi0L/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDRh9C40YLQsNC90L3RjyDQsdC70L7QutGDICVsbHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3BpZWQgJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSBpbiAlcyAiCittc2dzdHIgItCh0LrQvtC/0ZbQudC+0LLQsNC90L4gJWxsdSAvICVsbHUg0LHQu9C+0LrRltCyICglZCUlKSDRgyAlcyAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdCAlLjJmIE1CL3MiCittc2dzdHIgItC90LAg0YjQstC40LTQutC+0YHRgtGWICUuMmYg0JzQkS/RgSIKKworIzogbWlzYy9lMmltYWdlLmM6NzU1Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBsMSB0YWJsZSIKK21zZ3N0ciAi0L/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0YDQvtC30LzRltGB0YLQuNGC0Lgg0YMg0L/QsNC84oCZ0Y/RgtGWINGC0LDQsdC70LjRhtGOIGwxIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo4MDAKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGwyIGNhY2hlIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINGA0L7Qt9C80ZbRidC10L3QvdGPINC60LXRiNGDIGwyINGDINC/0LDQvOKAmdGP0YLRliIKKworIzogbWlzYy9lMmltYWdlLmM6ODIzCittc2dpZCAiIgorIldhcm5pbmc6IFRoZXJlIGFyZSBzdGlsbCB0YWJsZXMgaW4gdGhlIGNhY2hlIHdoaWxlIHB1dHRpbmcgdGhlIGNhY2hlLCBkYXRhICIKKyJ3aWxsIGJlIGxvc3Qgc28gdGhlIGltYWdlIG1heSBub3QgYmUgdmFsaWQuXG4iCittc2dzdHIgIiIKKyLQn9C+0L/QtdGA0LXQtNC20LXQvdC90Y86INC/0ZbQtCDRh9Cw0YEg0YDQvtC30LzRltGJ0LXQvdC90Y8g0LrQtdGI0YMg0YMg0L3RjNC+0LzRgyDQt9Cw0LvQuNGI0LjQu9C40YHRjyDRgtCw0LHQu9C40YbRli4gIgorItCd0LXQvNC+0LbQu9C40LLRltGB0YLRjCDRgNC+0LfQvNGW0YHRgtC40YLQuCDRhtGWINGC0LDQsdC70LjRhtGWINC/0YDQuNC30LLQtdC00LUg0LTQviDQstGC0YDQsNGC0Lgg0LTQsNC90LjRhSwg0L7RgtC20LUg0L7QsdGA0LDQtyDQvNC+0LbQtSAiCisi0LLQuNGP0LLQuNGC0LjRgdGPINC90LXQutC+0YDQtdC60YLQvdC40LwuXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjExNDUKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGV4dDJfcWNvdzJfaW1hZ2UiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YDQvtC30LzRltGJ0LXQvdC90Y8g0YMg0L/QsNC84oCZ0Y/RgtGWIGV4dDJfcWNvdzJfaW1hZ2UiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjExNTIKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgZXh0Ml9xY293Ml9pbWFnZSIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0ZbQvdGW0YbRltCw0LvRltC30YPQstCw0YLQuCBleHQyX3Fjb3cyX2ltYWdlIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjExIG1pc2MvZTJpbWFnZS5jOjEyMjkKK21zZ2lkICJQcm9ncmFtbWluZyBlcnJvcjogbXVsdGlwbGUgc2VxdWVudGlhbCByZWZjb3VudCBibG9ja3MgY3JlYXRlZCFcbiIKK21zZ3N0ciAiIgorItCf0L7QvNC40LvQutCwINGDINC60L7QtNGWOiDRgdGC0LLQvtGA0LXQvdC+INC00LXQutGW0LvRjNC60LAg0L/QvtGB0LvRltC00L7QstC90LjRhSDQsdC70L7QutGW0LIg0L/RltC00YDQsNGF0YPQvdC60YMg0L/QvtGB0LjQu9Cw0L3RjCFcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTI2OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINGA0L7Qt9C80ZbRidC10L3QvdGPINGDINC/0LDQvOKAmdGP0YLRliDQsdGW0YLQvtCy0L7RlyDQutCw0YDRgtC4INCx0LvQvtC60ZbQsiIKKworIzogbWlzYy9lMmltYWdlLmM6MTI3OAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgc2NyYW1ibGUgYmxvY2sgYml0bWFwIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINGA0L7Qt9C80ZbRidC10L3QvdGPINGDINC/0LDQvOKAmdGP0YLRliDQsdGW0YLQvtCy0L7RlyDQutCw0YDRgtC4INGI0LjRhNGA0L7QstCw0L3QuNGFINCx0LvQvtC60ZbQsiIKKworIzogbWlzYy9lMmltYWdlLmM6MTI4NQorbXNnaWQgIlNjYW5uaW5nIGlub2Rlcy4uLlxuIgorbXNnc3RyICLQodC60LDQvdGD0ZTQvNC+IGlub2RlLi4uXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyOTcKK21zZ2lkICJDYW4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIiCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDQv9Cw0LzigJnRj9GC0Ywg0L/RltC0INCx0YPRhNC10YAg0LHQu9C+0LrRltCyIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzM2IG1pc2MvZTJpbWFnZS5jOjEzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgaXRlcmF0aW5nIG92ZXIgaW5vZGUgJXUiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0ZbRgtC10YDQsNGC0LjQstC90L7RlyDQvtCx0YDQvtCx0LrQuCBpbm9kZSAldSIKKworIzogbWlzYy9lMmltYWdlLmM6MTM4MQorbXNnaWQgIlJhdyBhbmQgcWNvdzIgaW1hZ2VzIGNhbm5vdCBiZSBpbnN0YWxsZWQiCittc2dzdHIgItCS0YHRgtCw0L3QvtCy0LvQtdC90L3RjyDQvtCx0YDQsNC30ZbQsiBSYXcg0ZYgcWNvdzIg0L3QtdC80L7QttC70LjQstC1IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDAzCittc2dpZCAiZXJyb3IgcmVhZGluZyBiaXRtYXBzIgorbXNnc3RyICLQv9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGH0LjRgtCw0L3QvdGPINCx0ZbRgtC+0LLQuNGFINC60LDRgNGCIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDE1Cittc2dpZCAid2hpbGUgb3BlbmluZyBkZXZpY2UgZmlsZSIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0LLRltC00LrRgNC40YLQuCDRhNCw0LnQuyDQv9GA0LjRgdGC0YDQvtGOIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDI2Cittc2dpZCAid2hpbGUgcmVzdG9yaW5nIHRoZSBpbWFnZSB0YWJsZSIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0LLRltC00L3QvtCy0LvQtdC90L3RjyDRgtCw0LHQu9C40YbRliDQvtCx0YDQsNC30YMiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MjMKK21zZ2lkICItYSBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHJhdyBvciBRQ09XMiBpbWFnZXMuIgorbXNnc3RyICLQn9Cw0YDQsNC80LXRgtGAIC1hINC80L7QttC90LAg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INC70LjRiNC1INC00LvRjyDQvtCx0YDQsNC30ZbQsiByYXcg0ZYgUUNPVzIuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTI5Cittc2dpZCAiT2Zmc2V0cyBhcmUgb25seSBhbGxvd2VkIHdpdGggcmF3IGltYWdlcy4iCittc2dzdHIgItCS0ZbQtNGB0YLRg9C/0Lgg0LzQvtC20L3QsCDQstC40LrQvtGA0LjRgdGC0L7QstGD0LLQsNGC0Lgg0LvQuNGI0LUg0LTQu9GPINC+0LHRgNCw0LfRltCyIHJhdy4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MzQKK21zZ2lkICJNb3ZlIG1vZGUgaXMgb25seSBhbGxvd2VkIHdpdGggcmF3IGltYWdlcy4iCittc2dzdHIgItCg0LXQttC40Lwg0L/QtdGA0LXRgdGD0LLQsNC90L3RjyDQvNC+0LbQvdCwINCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0YLQuCDQu9C40YjQtSDQtNC70Y8g0L7QsdGA0LDQt9GW0LIgcmF3LiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUzOQorbXNnaWQgIk1vdmUgbW9kZSByZXF1aXJlcyBhbGwgZGF0YSBtb2RlLiIKK21zZ3N0ciAi0KDQtdC20LjQvCDQv9C10YDQtdGB0YPQstCw0L3QvdGPINC/0L7RgtGA0LXQsdGD0ZQg0YDQtdC20LjQvNGDINCy0YHRltGFINC00LDQvdC40YUuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTQ5Cittc2dpZCAiY2hlY2tpbmcgaWYgbW91bnRlZCIKK21zZ3N0ciAi0L/QtdGA0LXQstGW0YDQutCwINC30LzQvtC90YLQvtCy0LDQvdC+0YHRgtGWIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTU2Cittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgZTJpbWFnZSBvbiBhIFIvVyBtb3VudGVkIGZpbGVzeXN0ZW0gY2FuIHJlc3VsdCBpbiBhblxuIgorImluY29uc2lzdGVudCBpbWFnZSB3aGljaCB3aWxsIG5vdCBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiIKKyJVc2UgLWYgb3B0aW9uIGlmIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGF0LlxuIgorbXNnc3RyICIiCisiXG4iCisi0JfQsNC/0YPRgdC6IGUyaW1hZ2Ug0LTQu9GPINC+0LHRgNC+0LHQutC4INC30LzQvtC90YLQvtCy0LDQvdC40YUg0LTQu9GPINGH0LjRgtCw0L3QvdGPINGWINC30LDQv9C40YHRgyDRhNCw0LnQu9C+0LLQuNGFXG4iCisi0YHQuNGB0YLQtdC8INC80L7QttC1INC/0YDQuNC30LLQtdGB0YLQuCDQtNC+INC/0L7RgNGD0YjQtdC90L3RjyDRhtGW0LvRltGB0L3QvtGB0YLRliDQvtCx0YDQsNC30YMsINGJ0L4g0L/QvtC30L3QsNGH0LjRgtGM0YHRj1xuIgorItC90LAg0LzQvtC20LvQuNCy0L7RgdGC0ZYg0LnQvtCz0L4g0LLQuNC60L7RgNC40YHRgtCw0L3QvdGPINC00LvRjyDQtNGW0LDQs9C90L7RgdGC0LjQutC4INC/0L7QvNC40LvQvtC6LlxuIgorItCh0LrQvtGA0LjRgdGC0LDQudGC0LXRgdGPINC/0LDRgNCw0LzQtdGC0YDQvtC8IC1mLCDRj9C60YnQviDRhtGOINC00ZbRjiDRgdC70ZbQtCDQstC40LrQvtC90LDRgtC4INC/0YDQuNC80YPRgdC+0LLQvi5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYwOAorbXNnaWQgIlFDT1cyIGltYWdlIGNhbiBub3QgYmUgd3JpdHRlbiB0byB0aGUgc3Rkb3V0IVxuIgorbXNnc3RyICLQntCx0YDQsNC3IFFDT1cyINC90LUg0LzQvtC20L3QsCDQt9Cw0L/QuNGB0YPQstCw0YLQuCDQtNC+INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstC40LLQtdC00LXQvdC90Y8gKHN0ZG91dCkhXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MTQKK21zZ2lkICJDYW4gbm90IHN0YXQgb3V0cHV0XG4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7QsdGA0L7QsdC40YLQuCDQstC40LLQtdC00LXQvdGWINC00LDQvdGWXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW1hZ2UgKCVzKSBpcyBjb21wcmVzc2VkXG4iCittc2dzdHIgItCe0LHRgNCw0LcgKCVzKSDRgdGC0LjRgdC90YPRgtC+XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW1hZ2UgKCVzKSBpcyBlbmNyeXB0ZWRcbiIKK21zZ3N0ciAi0J7QsdGA0LDQtyAoJXMpINC30LDRiNC40YTRgNC+0LLQsNC90L5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYzMAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gY29udmVydCBxY293MiBpbWFnZSAoJXMpIGludG8gcmF3IGltYWdlICglcykiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INC/0LXRgNC10YLQstC+0YDQtdC90L3RjyDQvtCx0YDQsNC30YMgcWNvdzIgKCVzKSDRgyDQvtCx0YDQsNC3IHJhdyAoJXMpIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjM5Cittc2dpZCAiVGhlIC1jIG9wdGlvbiBvbmx5IHN1cHBvcnRlZCBpbiByYXcgbW9kZVxuIgorbXNnc3RyICLQn9GW0LTRgtGA0LjQvNC60YMg0L/QsNGA0LDQvNC10YLRgNCwIC1jINC/0LXRgNC10LTQsdCw0YfQtdC90L4g0LvQuNGI0LUg0YMg0YDQtdC20LjQvNGWIHJhd1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjQ0Cittc2dpZCAiVGhlIC1jIG9wdGlvbiBub3Qgc3VwcG9ydGVkIHdoZW4gd3JpdGluZyB0byBzdGRvdXRcbiIKK21zZ3N0ciAiIgorItCf0ZbQtNGC0YDQuNC80LrQuCDQt9Cw0L/QuNGB0YPQstCw0L3QvdGPINC00L4g0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LjQstC10LTQtdC90L3RjyDQtyDQv9Cw0YDQsNC80LXRgtGA0L7QvCAtYyDQvdC1ICIKKyLQv9C10YDQtdC00LHQsNGH0LXQvdC+XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NTEKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGNoZWNrX2J1ZiIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0YDQvtC30LzRltGB0YLQuNGC0LggY2hlY2tfYnVmINGDINC/0LDQvOKAmdGP0YLRliIKKworIzogbWlzYy9lMmltYWdlLmM6MTY1NworbXNnaWQgIlRoZSAtcCBvcHRpb24gb25seSBzdXBwb3J0ZWQgaW4gcmF3IG1vZGVcbiIKK21zZ3N0ciAi0J/RltC00YLRgNC40LzQutGDINC/0LDRgNCw0LzQtdGC0YDQsCAtcCDQv9C10YDQtdC00LHQsNGH0LXQvdC+INC70LjRiNC1INGDINGA0LXQttC40LzRliByYXdcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY2NworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibG9ja3MgYWxyZWFkeSBjb250YWluZWQgdGhlIGRhdGEgdG8gYmUgY29waWVkXG4iCittc2dzdHIgIiVkINCx0LvQvtC60ZbQsiDQstC20LUg0LzRltGB0YLQuNC70Lgg0LTQsNC90ZYsINGP0LrRliDRgdC70ZbQtCDQsdGD0LvQviDRgdC60L7Qv9GW0Y7QstCw0YLQuFxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgb3BlbiAlc1xuIgorbXNnc3RyICJlMmxhYmVsOiDQvdC1INCy0LTQsNC70L7RgdGPINCy0ZbQtNC60YDQuNGC0LggJXNcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiDQv9C+0LfQuNGG0ZbRjtCy0LDQvdC90Y8g0L3QsCDRgdGD0L/QtdGA0LHQu9C+0Log0L3QtdC80L7QttC70LjQstC1XG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHJlYWRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiDQv9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDRh9C40YLQsNC90L3RjyDRgdGD0L/QtdGA0LHQu9C+0LrRg1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBub3QgYW4gZXh0MiBmaWxlc3lzdGVtXG4iCittc2dzdHIgImUybGFiZWw6INC90LUg0ZQg0YTQsNC50LvQvtCy0L7RjiDRgdC40YHRgtC10LzQvtGOIGV4dDJcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6OTcgbWlzYy90dW5lMmZzLmM6MjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBsYWJlbCB0b28gbG9uZywgdHJ1bmNhdGluZy5cbiIKK21zZ3N0ciAi0J/QvtC/0LXRgNC10LTQttC10L3QvdGPOiDQvdCw0LTRgtC+INC00L7QstCz0LAg0LzRltGC0LrQsCwg0L7QsdGA0ZbQt9Cw0ZTQvNC+LlxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9jayBhZ2FpblxuIgorbXNnc3RyICJlMmxhYmVsOiDQv9C+0LLRgtC+0YDQvdC1INC/0L7Qt9C40YbRltGO0LLQsNC90L3RjyDQvdCwINGB0YPQv9C10YDQsdC70L7QuiDQvdC10LzQvtC20LvQuNCy0LVcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHdyaXRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiDQv9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQt9Cw0L/QuNGB0LDRgtC4INGB0YPQv9C10YDQsdC70L7QulxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMTcgbWlzYy90dW5lMmZzLmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBlMmxhYmVsIGRldmljZSBbbmV3bGFiZWxdXG4iCittc2dzdHIgItCa0L7RgNC40YHRgtGD0LLQsNC90L3RjzogZTJsYWJlbCDQv9GA0LjRgdGC0YDRltC5IFvQvdC+0LLQsCDQvNGW0YLQutCwXVxuIgorCisjOiBtaXNjL2UydW5kby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyA8dHJhbnNhY3Rpb24gZmlsZT4gPGZpbGVzeXN0ZW0+XG4iCittc2dzdHIgItCS0LjQutC+0YDQuNGB0YLQsNC90L3RjzogJXMgPNGE0LDQudC7INC+0L/QtdGA0LDRhtGW0Zc+IDzRhNCw0LnQu9C+0LLQsCDRgdC40YHRgtC10LzQsD5cbiIKKworIzogbWlzYy9lMnVuZG8uYzo1MgorbXNnaWQgIkZhaWxlZCB0byByZWFkIHRoZSBmaWxlIHN5c3RlbSBkYXRhIFxuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC/0YDQvtGH0LjRgtCw0YLQuCDQtNCw0L3RliDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4IFxuIgorCisjOiBtaXNjL2UydW5kby5jOjYyIG1pc2MvZTJ1bmRvLmM6ODMgbWlzYy9lMnVuZG8uYzoxMDggbWlzYy9lMnVuZG8uYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9mZXRjaCAlc1xuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINCy0LjQutC+0L3QsNGC0LggdGRiX2ZldGNoICVzXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIE1vdW50IHRpbWUgZGlkbid0IG1hdGNoICV1XG4iCittc2dzdHIgItCX0LDQv9C40YEg0YfQsNGB0YMg0LzQvtC90YLRg9Cy0LDQvdC90Y8g0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCDQvdC1INC30LHRltCz0YHRjyDQtyAldVxuIgorCisjOiBtaXNjL2UydW5kby5jOjg5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIFVVSUQgZGlkbid0IG1hdGNoIFxuIgorbXNnc3RyICJVVUlEINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80Lgg0ZQg0L3QtdCy0ZbQtNC/0L7QstGW0LTQvdC40LwgXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfb3BlbiAlc1xuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINCy0LjQutC+0L3QsNGC0LggdGRiX29wZW4gJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQstC40LfQvdCw0YfQtdC90L3Rjywg0YfQuCDQt9C80L7QvdGC0L7QstCw0L3QviAlcy5cbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNzUKK21zZ2lkICJlMnVuZG8gc2hvdWxkIG9ubHkgYmUgcnVuIG9uIHVubW91bnRlZCBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICJlMnVuZG8g0YHQu9GW0LQg0LfQsNC/0YPRgdC60LDRgtC4INC70LjRiNC1INC90LAg0LTQtdC80L7QvdGC0L7QstCw0L3QuNGFINGE0LDQudC70L7QstC40YUg0YHQuNGB0YLQtdC80LDRhVxuIgorCisjOiBtaXNjL2UydW5kby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlc1xuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINCy0ZbQtNC60YDQuNGC0LggJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwbGF5ZWQgdHJhbnNhY3Rpb24gb2Ygc2l6ZSAlemQgYXQgbG9jYXRpb24gJWxsdVxuIgorbXNnc3RyICLQktGW0LTRgtCy0L7RgNC10L3QviDQvtC/0LXRgNCw0YbRltGOINGA0L7Qt9C80ZbRgNGDICV6ZCDQt9CwINCw0LTRgNC10YHQvtGOICVsbHVcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHdyaXRlICVzXG4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LfQsNC/0LjRgdCw0YLQuCAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogY291bGRuJ3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAi0J/QntCf0JXQoNCV0JTQltCV0J3QndCvOiDQvdC1INCy0LTQsNC70L7RgdGPINCy0ZbQtNC60YDQuNGC0LggJXM6ICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBiYWQgZm9ybWF0IG9uIGxpbmUgJWQgb2YgJXNcbiIKK21zZ3N0ciAi0J/QntCf0JXQoNCV0JTQltCV0J3QndCvOiDQv9C+0LzQuNC70LrQvtCy0LUg0YTQvtGA0LzQsNGC0YPQstCw0L3QvdGPINGDINGA0Y/QtNC60YMgJWQg0YMgJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzcwCittc2dpZCAiIgorIldBUk5JTkc6IFlvdXIgL2V0Yy9mc3RhYiBkb2VzIG5vdCBjb250YWluIHRoZSBmc2NrIHBhc3Nub1xuIgorIlx0ZmllbGQuICBJIHdpbGwga2x1ZGdlIGFyb3VuZCB0aGluZ3MgZm9yIHlvdSwgYnV0IHlvdVxuIgorIlx0c2hvdWxkIGZpeCB5b3VyIC9ldGMvZnN0YWIgZmlsZSBhcyBzb29uIGFzIHlvdSBjYW4uXG4iCisiXG4iCittc2dzdHIgIiIKKyLQn9Ce0J/QldCg0JXQlNCW0JXQndCd0K86INGDINCy0LDRiNC+0LzRgyDRhNCw0LnQu9GWIC9ldGMvZnN0YWIg0L3QtdC80LDRlCDQv9C+0LvRjyBwYXNzbm9cbiIKKyJcdGZzY2suINCc0Lgg0YHQv9GA0L7QsdGD0ZTQvNC+INGJ0L7RgdGMINC30YDQvtCx0LjRgtC4LCDQsNC70LUg0LLQsNC8INGB0LvRltC0INCy0LjQv9GA0LDQstC40YLQuFxuIgorIlx00LLQsNGIINGE0LDQudC7IC9ldGMvZnN0YWIg0Y/QutC+0LzQvtCz0LAg0YjQstC40LTRiNC1LlxuIgorIlxuIgorCisjOiBtaXNjL2ZzY2suYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogJXM6IG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiAlczog0L3QtSDQt9C90LDQudC00LXQvdC+XG4iCisKKyM6IG1pc2MvZnNjay5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FpdDogTm8gbW9yZSBjaGlsZCBwcm9jZXNzPyE/XG4iCittc2dzdHIgIiVzOiDQvtGH0ZbQutGD0LLQsNC90L3Rjzog0L3QtSDQt9Cw0LvQuNGI0LjQu9C+0YHRjyDQtNC+0YfRltGA0L3RltGFINC/0YDQvtGG0LXRgdGW0LI/IT9cbiIKKworIzogbWlzYy9mc2NrLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmcuLi4gJXMgZm9yIGRldmljZSAlcyBleGl0ZWQgd2l0aCBzaWduYWwgJWQuXG4iCittc2dzdHIgIiIKKyLQn9C+0L/QtdGA0LXQtNC20LXQvdC90Y8uLi4g0LLQuNC60L7QvdCw0L3QvdGPICVzINC00LvRjyDQv9GA0LjRgdGC0YDQvtGOICVzINC30LDQstC10YDRiNC40LvQvtGB0Y8g0YHQuNCz0L3QsNC70L7QvCAlZC5cbiIKKworIzogbWlzYy9mc2NrLmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzOiBzdGF0dXMgaXMgJXgsIHNob3VsZCBuZXZlciBoYXBwZW4uXG4iCittc2dzdHIgIiVzICVzOiDRgdGC0LDQvSDigJQgJXgsINGC0LDQutC+0LPQviDQvdC1INC/0L7QstC40L3QvdC+INCx0YPQu9C+INGB0YLQsNGC0LjRgdGPLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluaXNoZWQgd2l0aCAlcyAoZXhpdCBzdGF0dXMgJWQpXG4iCittc2dzdHIgItCX0LDQstC10YDRiNC10L3QviwgJXMgKNGB0YLQsNC9INCy0LjRhdC+0LTRgyAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6NzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBFcnJvciAlZCB3aGlsZSBleGVjdXRpbmcgZnNjay4lcyBmb3IgJXNcbiIKK21zZ3N0ciAiJXM6INC/0L7QvNC40LvQutCwICVkINC/0ZbQtCDRh9Cw0YEg0LLQuNC60L7QvdCw0L3QvdGPIGZzY2suJXMg0LTQu9GPICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjc0MgorbXNnaWQgIiIKKyJFaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlIGZpbGVzeXN0ZW0gdHlwZXMgcGFzc2VkIHRvIC10IG11c3QgYmUgcHJlZml4ZWRcbiIKKyJ3aXRoICdubycgb3IgJyEnLlxuIgorbXNnc3RyICIiCisi0J/RgNC10YTRltC60YEgwqtub8K7INCw0LHQviDCqyHCuyDQvNCw0ZQg0LHRg9GC0Lgg0L/QtdGA0LXQtNCw0L3QviDQsNCx0L4g0LLRgdGW0Lwg0LDQsdC+INC20L7QtNC90L7QvNGDINC3INGC0LjQv9GW0LIgIgorItGE0LDQudC70L7QstC40YVcbiIKKyLRgdC40YHRgtC10LwsINC/0LXRgNC10LTQsNC90LjRhSDQtNC+IC10LlxuIgorCisjOiBtaXNjL2ZzY2suYzo3NjEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGVzeXN0ZW0gdHlwZXNcbiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDRgNC+0LfQvNGW0YHRgtC40YLQuCDRgyDQv9Cw0LzigJnRj9GC0ZYg0YLQuNC/0Lgg0YTQsNC50LvQvtCy0LjRhSDRgdC40YHRgtC10LxcbiIKKworIzogbWlzYy9mc2NrLmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogc2tpcHBpbmcgYmFkIGxpbmUgaW4gL2V0Yy9mc3RhYjogYmluZCBtb3VudCB3aXRoIG5vbnplcm8gZnNjayBwYXNzICIKKyJudW1iZXJcbiIKK21zZ3N0ciAiIgorIiVzOiDQv9GA0L7Qv9GD0YHQutCw0ZTQvNC+INC/0L7QvNC40LvQutC+0LLQuNC5INGA0Y/QtNC+0Log0YMgL2V0Yy9mc3RhYjog0LzQvtC90YLRg9Cy0LDQvdC90Y8g0Lcg0L/RgNC40LLigJnRj9C30YPQstCw0L3QvdGP0Lwg0ZYgIgorItC90LXQvdGD0LvRjNC+0LLQvtGOINC60ZbQu9GM0LrRltGB0YLRjiDQv9GA0L7RhdC+0LTRltCyIGZzY2tcbiIKKworIzogbWlzYy9mc2NrLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6IGNhbm5vdCBjaGVjayAlczogZnNjay4lcyBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNjazog0L3QtSDQstC00LDQu9C+0YHRjyDQv9C10YDQtdCy0ZbRgNC40YLQuCAlczog0L3QsCDQstC40Y/QstC70LXQvdC+IGZzY2suJXNcbiIKKworIzogbWlzYy9mc2NrLmM6OTY3Cittc2dpZCAiQ2hlY2tpbmcgYWxsIGZpbGUgc3lzdGVtcy5cbiIKK21zZ3N0ciAi0J/QtdGA0LXQstGW0YDQutCwINCy0YHRltGFINGE0LDQudC70L7QstC40YUg0YHQuNGB0YLQtdC8LlxuIgorCisjOiBtaXNjL2ZzY2suYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIi0td2FpdGluZy0tIChwYXNzICVkKVxuIgorbXNnc3RyICItLdC+0YfRltC60YPQstCw0L3QvdGPLS0gKNC/0YDQvtGF0ZbQtCAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6MTA3OAorbXNnaWQgIiIKKyJVc2FnZTogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGZzdHlwZV0gW2ZzLW9wdGlvbnNdIFtmaWxlc3lzIC4uLl1cbiIKK21zZ3N0ciAiIgorItCa0L7RgNC40YHRgtGD0LLQsNC90L3RjzogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyDQtNC10YHQutGA0LjQv9GC0L7RgCDRhNCw0LnQu9CwIF0gXSBbLXQg0YLQuNC/INCk0KFdICIKKyJb0L/QsNGA0LDQvNC10YLRgNC4INCk0KFdIFvRhNCw0LnQu9C+0LLQsCDRgdC40YHRgtC10LzQsCAuLi5dXG4iCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiJXM6INC30LDQsdCw0LPQsNGC0L4g0L/RgNC40YHRgtGA0L7Rl9CyXG4iCisKKyM6IG1pc2MvZnNjay5jOjExNTMgbWlzYy9mc2NrLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIiVzOiDQt9Cw0L3QsNC00YLQviDQsdCw0LPQsNGC0L4g0LDRgNCz0YPQvNC10L3RgtGW0LJcbiIKKworIzogbWlzYy9sc2F0dHIuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmFkbHZdIFtmaWxlcy4uLl1cbiIKK21zZ3N0ciAi0JrQvtGA0LjRgdGC0YPQstCw0L3QvdGPOiAlcyBbLVJWYWRsdl0gW9GE0LDQudC70LguLi5dXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAi0J/RltC0INGH0LDRgSDRh9C40YLQsNC90L3RjyDQv9GA0LDQv9C+0YDRhtGW0LIg0L3QsCAlcyIKKworIzogbWlzYy9sc2F0dHIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgItCf0ZbQtCDRh9Cw0YEg0YfQuNGC0LDQvdC90Y8g0LLQtdGA0YHRltGXINC90LAgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jfC1sIGZpbGVuYW1lXSBbLWIgYmxvY2stc2l6ZV0gWy1DIGNsdXN0ZXItc2l6ZV1cbiIKKyJcdFstaSBieXRlcy1wZXItaW5vZGVdIFstSSBpbm9kZS1zaXplXSBbLUogam91cm5hbC1vcHRpb25zXVxuIgorIlx0Wy1HIGZsZXgtZ3JvdXAtc2l6ZV0gWy1OIG51bWJlci1vZi1pbm9kZXNdXG4iCisiXHRbLW0gcmVzZXJ2ZWQtYmxvY2tzLXBlcmNlbnRhZ2VdIFstbyBjcmVhdG9yLW9zXVxuIgorIlx0Wy1nIGJsb2Nrcy1wZXItZ3JvdXBdIFstTCB2b2x1bWUtbGFiZWxdIFstTSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5XVxuIgorIlx0Wy1PIGZlYXR1cmVbLC4uLl1dIFstciBmcy1yZXZpc2lvbl0gWy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV1cbiIKKyJcdFstdCBmcy10eXBlXSBbLVQgdXNhZ2UtdHlwZSBdIFstVSBVVUlEXSBbLWpucXZERktTVl0gZGV2aWNlIFtibG9ja3MtIgorImNvdW50XVxuIgorbXNnc3RyICIiCisi0JrQvtGA0LjRgdGC0YPQstCw0L3QvdGPOiAlcyBbLWN8LWwg0L3QsNC30LLQsCDRhNCw0LnQu9CwXSBbLWIg0YDQvtC30LzRltGAINCx0LvQvtC60YNdIFstQyDRgNC+0LfQvNGW0YAg0LrQu9Cw0YHRgtC10YDQsF1cbiIKKyJcdFstaSDQsdCw0LnRgtGW0LIg0L3QsCBpbm9kZV0gWy1JINGA0L7Qt9C80ZbRgCBpbm9kZV0gWy1KINC/0LDRgNCw0LzQtdGC0YDQuCDQttGD0YDQvdCw0LvRg11cbiIKKyJcdFstRyDRgNC+0LfQvNGW0YAg0YTQu9C10LrRgS3Qs9GA0YPQv9C4XSBbLU4g0LrRltC70YzQutGW0YHRgtGMIGlub2RlXVxuIgorIlx0Wy1tINCy0ZbQtNGB0L7RgtC+0Log0LfQsNGA0LXQt9C10YDQstC+0LLQsNC90LjRhSDQsdC70L7QutGW0LJdIFstbyDQntChINGB0YLQstC+0YDQtdC90L3Rj11cbiIKKyJcdFstZyDQsdC70L7QutGW0LIg0L3QsCDQs9GA0YPQv9GDXSBbLUwg0LzRltGC0LrQsCDRgtC+0LzRg10gWy1NINC+0YHRgtCw0L3QvdGW0Lkg0LfQvNC+0L3RgtC+0LLQsNC90LjQuSDQutCw0YLQsNC70L7Qs11cbiIKKyJcdFstTyDQvNC+0LbQu9C40LLRltGB0YLRjFssLi4uXV0gWy1yINC80L7QtNC40YTRltC60LDRhtGW0Y8g0KTQoV0gWy1FINGA0L7Qt9GI0LjRgNC10L3QuNC5INC/0LDRgNCw0LzQtdGC0YBbLC4uLl1dXG4iCisiXHRbLXQg0YLQuNC/INCk0KFdIFstVCDRgtC40L8g0LLQuNC60L7RgNC40YHRgtCw0L3QvdGPXSBbLVUgVVVJRF0gWy1qbnF2REZLU1ZdINC/0YDQuNGB0YLRgNGW0LkgIgorIlvQu9GW0YfQuNC70YzQvdC40Log0LHQu9C+0LrRltCyXVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJSdW5uaW5nIGNvbW1hbmQ6ICVzXG4iCittc2dzdHIgItCS0LjQutC+0L3QsNC90L3RjyDQutC+0LzQsNC90LTQuDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJ1biAnJXMnIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQstC40LrQvtC90LDRgtC4IMKrJXPCuyIKKworIzogbWlzYy9ta2UyZnMuYzoyNjMKK21zZ2lkICJ3aGlsZSBwcm9jZXNzaW5nIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIHByb2dyYW0iCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0L7QsdGA0L7QsdC60Lgg0YHQv9C40YHQutGDINC/0L7QvNC40LvQutC+0LLQuNGFINCx0LvQvtC60ZbQsiDQtyDQv9GA0L7Qs9GA0LDQvNC4IgorCisjOiBtaXNjL21rZTJmcy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlZCBpbiBwcmltYXJ5IHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvciBhcmVhIGJhZC5cbiIKK21zZ3N0ciAi0J/QvtGI0LrQvtC00LbQtdC90L4g0LHQu9C+0LogJWQg0YMg0L7RgdC90L7QstC90L7QvNGDINC00LXRgdC60YDQuNC/0YLQvtGA0ZYg0YHRg9C/0LXRgNCx0LvQvtC60YMg0LDQsdC+INCz0YDRg9C/0LguXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrcyAldSB0aHJvdWdoICV1IG11c3QgYmUgZ29vZCBpbiBvcmRlciB0byBidWlsZCBhIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyLQqdC+0LEg0L/QvtCx0YPQtNGD0LLQsNGC0Lgg0YTQsNC50LvQvtCy0YMg0YHQuNGB0YLQtdC80YMsINCx0LvQvtC60Lgg0LLRltC0ICV1INC00L4gJXUg0LzQsNGUINCx0YPRgtC4INC90LUg0L/QvtGI0LrQvtC00LbQtdC90L4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjk1Cittc2dpZCAiQWJvcnRpbmcuLi4uXG4iCittc2dzdHIgItCf0LXRgNC10YDQuNCy0LDRlNC80L4g0L7QsdGA0L7QsdC60YMuLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHRoZSBiYWNrdXAgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9ycyBhdCBibG9jayAldSBjb250YWluXG4iCisiXHRiYWQgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisi0J/QvtC/0LXRgNC10LTQttC10L3QvdGPOiDRgNC10LfQtdGA0LLQvdGWINC00LXRgdC60YDQuNC/0YLQvtGA0Lgg0YHRg9C/0LXRgNCx0LvQvtC60ZbQsiDQsNCx0L4g0LPRgNGD0L8g0YMg0LHQu9C+0YbRliAldVxuIgorIlx00LzRltGB0YLRj9GC0Ywg0L/QvtC80LjQu9C60L7QstGWINCx0LvQvtC60LguXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzM0Cittc2dpZCAid2hpbGUgbWFya2luZyBiYWQgYmxvY2tzIGFzIHVzZWQiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INC/0L7Qt9C90LDRh9C40YLQuCDQv9C+0YjQutC+0LTQttC10L3RliDQsdC70L7QutC4INGP0Log0LLQuNC60L7RgNC40YHRgtCw0L3RliIKKworIzogbWlzYy9ta2UyZnMuYzozODYKK21zZ2lkICJXcml0aW5nIGlub2RlIHRhYmxlczogIgorbXNnc3RyICLQl9Cw0L/QuNGB0YPRlNC80L4g0YLQsNCx0LvQuNGG0ZYgaW5vZGU6ICIKKworIzogbWlzYy9ta2UyZnMuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCB3cml0ZSAlZCBibG9ja3MgaW4gaW5vZGUgdGFibGUgc3RhcnRpbmcgYXQgJWxsdTogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LfQsNC/0LjRgdCw0YLQuCAlZCDQsdC70L7QutGW0LIg0LTQviDRgtCw0LHQu9C40YbRliBpbm9kZSwg0YnQviDQv9C+0YfQuNC90LDRlNGC0YzRgdGPINC3ICVsbHU6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDIxIG1pc2MvbWtlMmZzLmM6MjQ3OSBtaXNjL21rZTJmcy5jOjI3NjQKK21zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorbXNnc3RyICLQstC40LrQvtC90LDQvdC+ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDMyCittc2dpZCAid2hpbGUgY3JlYXRpbmcgcm9vdCBkaXIiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHRgtCy0L7RgNC10L3QvdGPINC60L7RgNC10L3QtdCy0L7Qs9C+INC60LDRgtCw0LvQvtCz0YMiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDM5Cittc2dpZCAid2hpbGUgcmVhZGluZyByb290IGlub2RlIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINGH0LjRgtCw0L3QvdGPINC60L7RgNC10L3QtdCy0L7Qs9C+IGlub2RlIgorCisjOiBtaXNjL21rZTJmcy5jOjQ1MQorbXNnaWQgIndoaWxlIHNldHRpbmcgcm9vdCBpbm9kZSBvd25lcnNoaXAiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0LLRgdGC0LDQvdC+0LLQu9C10L3QvdGPINC00LDQvdC40YUg0YnQvtC00L4g0LLQu9Cw0YHQvdC40LrQsCDQutC+0YDQtdC90LXQstC+0LPQviBpbm9kZSIKKworIzogbWlzYy9ta2UyZnMuYzo0NjkKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyAvbG9zdCtmb3VuZCIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0YHRgtCy0L7RgNC40YLQuCAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0NzYKK21zZ2lkICJ3aGlsZSBsb29raW5nIHVwIC9sb3N0K2ZvdW5kIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINC/0L7RiNGD0LrRgyAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0ODkKK21zZ2lkICJ3aGlsZSBleHBhbmRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YDQvtC30LPQvtGA0YLQsNC90L3RjyAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo1MDQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDQstGB0YLQsNC90L7QstC70LXQvdC90Y8gaW5vZGUg0L/QvtC80LjQu9C60L7QstC+0LPQviDQsdC70L7QutGDIgorCisjOiBtaXNjL21rZTJmcy5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJPdXQgb2YgbWVtb3J5IGVyYXNpbmcgc2VjdG9ycyAlZC0lZFxuIgorbXNnc3RyICLQndC1INCy0LjQt9C90LDRh9Cw0ZQg0L/QsNC84oCZ0Y/RgtGWINC00LvRjyDQstC40YLQuNGA0LDQvdC90Y8g0YHQtdC60YLQvtGA0ZbQsiAlZC0lZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAwOiAlc1xuIgorbXNnc3RyICLQn9C+0L/QtdGA0LXQtNC20LXQvdC90Y86INC90LUg0LLQtNCw0LvQvtGB0Y8g0L/RgNC+0YfQuNGC0LDRgtC4INCx0LvQvtC6IDA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQ6ICVzXG4iCittc2dzdHIgItCf0L7Qv9C10YDQtdC00LbQtdC90L3Rjzog0L3QtSDQstC00LDQu9C+0YHRjyDQstC40YLQtdGA0YLQuCDRgdC10LrRgtC+0YAgJWQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTczCittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0ZbQvdGW0YbRltCw0LvRltC30LDRhtGW0Zcg0YHRg9C/0LXRgNCx0LvQvtC60YMg0LbRg9GA0L3QsNC70YMiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgxCittc2dpZCAiWmVyb2luZyBqb3VybmFsIGRldmljZTogIgorbXNnc3RyICLQl9Cw0L3Rg9C70LXQvdC90Y8g0L/RgNC40YHRgtGA0L7RjiDQttGD0YDQvdCw0LvRgzogIgorCisjOiBtaXNjL21rZTJmcy5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGpvdXJuYWwgZGV2aWNlIChibG9jayAlbGx1LCBjb3VudCAlZCkiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0LfQsNC90YPQu9C10L3QvdGPINC/0YDQuNGB0YLRgNC+0Y4g0LbRg9GA0L3QsNC70YMgKNCx0LvQvtC6ICVsbHUsINC60ZbQu9GM0LrRltGB0YLRjCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjExCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INC30LDQv9C40YHQsNGC0Lgg0YHRg9C/0LXRgNCx0LvQvtC6INC20YPRgNC90LDQu9GDIgorCisjOiBtaXNjL21rZTJmcy5jOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBmaWxlc3lzdGVtIHdpdGggJWxsdSAlZGsgYmxvY2tzIGFuZCAldSBpbm9kZXNcbiIKK21zZ3N0ciAi0KHRgtCy0L7RgNGO0ZTQvNC+INGE0LDQudC70L7QstGDINGB0LjRgdGC0LXQvNGDINC3ICVsbHUgJWTQmiDQsdC70L7QutCw0LzQuCDRgtCwICV1IGlub2RlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3YXJuaW5nOiAlbGx1IGJsb2NrcyB1bnVzZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyLQv9C+0L/QtdGA0LXQtNC20LXQvdC90Y86INC90LUg0LLQuNC60L7RgNC40YHRgtCw0L3QviAlbGx1INCx0LvQvtC60ZbQsi5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBsYWJlbD0lc1xuIgorbXNnc3RyICLQnNGW0YLQutCwINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80Lg9JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiT1MgdHlwZTogJXNcbiIKK21zZ3N0ciAi0KLQuNC/INCe0KE6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAi0KDQvtC30LzRltGAINCx0LvQvtC60YM9JXUgKNC20YPRgNC90LDQuz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2x1c3RlciBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgItCg0L7Qt9C80ZbRgCDQutC70LDRgdGC0LXRgNCwPSV1ICjQttGD0YDQvdCw0Ls9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyYWdtZW50IHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAi0KDQvtC30LzRltGAINGE0YDQsNCz0LzQtdC90YLQsD0ldSAo0LbRg9GA0L3QsNC7PSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJTdHJpZGU9JXUgYmxvY2tzLCBTdHJpcGUgd2lkdGg9JXUgYmxvY2tzXG4iCittc2dzdHIgIlN0cmlkZT0ldSDQsdC70L7QutGW0LIsIFN0cmlwZSB3aWR0aD0ldSDQsdC70L7QutGW0LJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzLCAlbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIldSBpbm9kZSwgJWxsdSDQsdC70L7QutGW0LJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSBibG9ja3MgKCUyLjJmJSUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlclxuIgorbXNnc3RyICIlbGx1INCx0LvQvtC60ZbQsiAoJTIuMmYlJSkg0LfQsNGA0LXQt9C10YDQstC+0LLQsNC90L4g0LTQu9GPINGB0YPQv9C10YDQutC+0YDQuNGB0YLRg9Cy0LDRh9CwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0IGRhdGEgYmxvY2s9JXVcbiIKK21zZ3N0ciAi0J/QtdGA0YjQuNC5INCx0LvQvtC6INC00LDQvdC40YU9JXVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUm9vdCBkaXJlY3Rvcnkgb3duZXI9JXU6JXVcbiIKK21zZ3N0ciAi0JLQu9Cw0YHQvdC40Log0LrQvtGA0LXQvdC10LLQvtCz0L4g0LrQsNGC0LDQu9C+0LPRgz0ldToldVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGZpbGVzeXN0ZW0gYmxvY2tzPSVsdVxuIgorbXNnc3RyICLQnNCw0LrRgdC40LzQsNC70YzQvdCwINC60ZbQu9GM0LrRltGB0YLRjCDQsdC70L7QutGW0LIg0YMg0YTQsNC50LvQvtCy0ZbQuSDRgdC40YHRgtC10LzRlj0lbHVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBzXG4iCittc2dzdHIgIiV1INCz0YDRg9C/INCx0LvQvtC60ZbQslxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIldS3QsdC70L7QutC+0LLQsCDQs9GA0YPQv9CwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGNsdXN0ZXJzIHBlciBncm91cFxuIgorbXNnc3RyICIldSDQsdC70L7QutGW0LIg0L3QsCDQs9GA0YPQv9GDLCAldSDQutC70LDRgdGC0LXRgNGW0LIg0L3QsCDQs9GA0YPQv9GDXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUg0LHQu9C+0LrRltCyINC90LAg0LPRgNGD0L/RgywgJXUg0YTRgNCw0LPQvNC10L3RgtGW0LIg0L3QsCDQs9GA0YPQv9GDXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgaW5vZGUg0L3QsCDQs9GA0YPQv9GDXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gVVVJRDogJXNcbiIKK21zZ3N0ciAiVVVJRCDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OQorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgItCg0LXQt9C10YDQstC90ZYg0LrQvtC/0ZbRlyDRgdGD0L/QtdGA0LHQu9C+0LrRgyDQt9Cx0LXRgNGW0LPQsNGO0YLRjNGB0Y8g0YMg0YLQsNC60LjRhSDQsdC70L7QutCw0YU6ICIKKworIzogbWlzYy9ta2UyZnMuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgJy1PIDY0Yml0J1xuIgorbXNnc3RyICIlcyDQv9C+0YLRgNC10LHRg9GUICctTyA2NGJpdCdcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtdXN0IGJlIGJlZm9yZSAncmVzaXplPSV1J1xuIgorbXNnc3RyICLCqyVzwrsg0LzQsNGUINCx0YPRgtC4INC00L4gwqtyZXNpemU9JXXCu1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjc4NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRlc2Nfc2l6ZTogJyVzJ1xuIgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QtSDQt9C90LDRh9C10L3QvdGPIGRlc2Nfc2l6ZTogwqslc8K7XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2Zmc2V0OiAlc1xuIgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QuNC5INCy0ZbQtNGB0YLRg9C/OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgxMiBtaXNjL3R1bmUyZnMuYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW1wX3VwZGF0ZV9pbnRlcnZhbDogJXNcbiIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LjQuSBtbXBfdXBkYXRlX2ludGVydmFsOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICMgb2YgYmFja3VwIHN1cGVyYmxvY2tzOiAlc1xuIgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QsCDQutGW0LvRjNC60ZbRgdGC0Ywg0YDQtdC30LXRgNCy0L3QuNGFINGB0YPQv9C10YDQsdC70L7QutGW0LI6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaWRlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LUg0LfQvdCw0YfQtdC90L3RjyDQv9Cw0YDQsNC80LXRgtGA0LAgc3RyaWRlOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlwZS13aWR0aCBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdC1INC30L3QsNGH0LXQvdC90Y8g0L/QsNGA0LDQvNC10YLRgNCwIHN0cmlwZS13aWR0aDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXNpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QuNC5INC/0LDRgNCw0LzQtdGC0YAg0LfQvNGW0L3QuCDRgNC+0LfQvNGW0YDRltCyOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg5MworbXNnaWQgIlRoZSByZXNpemUgbWF4aW11bSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgZmlsZXN5c3RlbSBzaXplLlxuIgorbXNnc3RyICLQnNCw0LrRgdC40LzRg9C8INC30LzRltC90Lgg0YDQvtC30LzRltGA0YMg0LzQsNGUINC/0LXRgNC10LLQuNGJ0YPQstCw0YLQuCDRgNC+0LfQvNGW0YAg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MTcKK21zZ2lkICJPbi1saW5lIHJlc2l6aW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKyLQn9GW0LTRgtGA0LjQvNC60Lgg0ZbQvdGC0LXRgNCw0LrRgtC40LLQvdC+0Zcg0LfQvNGW0L3QuCDRgNC+0LfQvNGW0YDRltCyINC00LvRjyDRhNCw0LnQu9C+0LLQuNGFINGB0LjRgdGC0LXQvCDQvNC+0LTQuNGE0ZbQutCw0YbRltGXIDAg0L3QtSAiCisi0L/QtdGA0LXQtNCx0LDRh9C10L3QvlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjk0NCBtaXNjL21rZTJmcy5jOjk1MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJvb3Rfb3duZXI6ICclcydcbiIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LUg0LfQvdCw0YfQtdC90L3RjyByb290X293bmVyOiDCqyVzwrtcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBxdW90YXR5cGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QuNC5INC/0LDRgNCw0LzQtdGC0YAgcXVvdGF0eXBlOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0bW1wX3VwZGF0ZV9pbnRlcnZhbD08aW50ZXJ2YWw+XG4iCisiXHRudW1fYmFja3VwX3NiPTwwfDF8Mj5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBkYXRhIGNodW5rIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUgKiBkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdG9mZnNldD08b2Zmc2V0IHRvIGNyZWF0ZSB0aGUgZmlsZSBzeXN0ZW0+XG4iCisiXHRyZXNpemU9PHJlc2l6ZSBtYXhpbXVtIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0cGFja2VkX21ldGFfYmxvY2tzPTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdGxhenlfam91cm5hbF9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0cm9vdF91aWQ9PHVpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHJvb3RfZ2lkPTxnaWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXNyIE9SIGdycD5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorItCS0LrQsNC30LDQvdC+INC/0L7QvNC40LvQutC+0LLRliDQv9Cw0YDQsNC80LXRgtGA0Lg6ICVzXG4iCisiXG4iCisi0JTQvtC00LDRgtC60L7QstGWINC/0LDRgNCw0LzQtdGC0YDQuCDRgdC70ZbQtCDQstGW0LTQvtC60YDQtdC80LvRjtCy0LDRgtC4INC60L7QvNCw0LzQuCwg0LTQviDQvdC40YUg0LzQvtC20L3QsCDQtNC+0LTQsNCy0LDRgtC4ICIKKyLQsNGA0LPRg9C80LXQvdGCLFxuIgorIlx00LfQvdCw0YfQtdC90L3RjyDRj9C60L7Qs9C+INC30LDQv9C40YHRg9GU0YLRjNGB0Y8g0L/RltGB0LvRjyDQt9C90LDQutGDINGA0ZbQstC90L7RgdGC0ZYgKMKrPcK7KS5cbiIKKyJcbiIKKyLQmtC+0YDQtdC60YLQvdGWINC00L7QtNCw0YLQutC+0LLRliDQv9Cw0YDQsNC80LXRgtGA0Lg6XG4iCisiXHRtbXBfdXBkYXRlX2ludGVydmFsPTzRltC90YLQtdGA0LLQsNC7PlxuIgorIlx0bnVtX2JhY2t1cF9zYj08MHwxfDI+XG4iCisiXHRzdHJpZGU9PNGE0YDQsNCz0LzQtdC90YIg0LTQsNC90LjRhSDQvdCwINC00LjRgdC6IFJBSUQg0YMg0LHQu9C+0LrQsNGFPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqINC60ZbQu9GM0LrRltGB0YLRjCDQtNC40YHQutGW0LIg0Lcg0LTQsNC90LjQvNC4INGDINCx0LvQvtC60LDRhT5cbiIKKyJcdG9mZnNldD080LLRltC00YHRgtGD0L8g0LTQu9GPINGB0YLQstC+0YDQtdC90L3RjyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4PlxuIgorIlx0cmVzaXplPTzQvNCw0LrRgdC40LzQsNC70YzQvdCwINC30LzRltC90LAg0YDQvtC30LzRltGA0ZbQsiDRgyDQsdC70L7QutCw0YU+XG4iCisiXHRwYWNrZWRfbWV0YV9ibG9ja3M9PDAgLSDQstC40LzQutC90YPRgtC4LCAxIC0g0YPQstGW0LzQutC90YPRgtC4PlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCAtINCy0LjQvNC60L3Rg9GC0LgsIDEgLSDRg9Cy0ZbQvNC60L3Rg9GC0Lg+XG4iCisiXHRsYXp5X2pvdXJuYWxfaW5pdD08MCAtINCy0LjQvNC60L3Rg9GC0LgsIDEgLSDRg9Cy0ZbQvNC60L3Rg9GC0Lg+XG4iCisiXHRyb290X3VpZD08dWlkINC60L7RgNC10L3QtdCy0L7Qs9C+INC60LDRgtCw0LvQvtCz0YM+XG4iCisiXHRyb290X2dpZD08Z2lkINC60L7RgNC10L3QtdCy0L7Qs9C+INC60LDRgtCw0LvQvtCz0YM+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXNyINCw0LHQviBncnA+XG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogUkFJRCBzdHJpcGUtd2lkdGggJXUgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2Ygc3RyaWRlICV1LlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisi0J/QvtC/0LXRgNC10LTQttC10L3QvdGPOiBzdHJpcGUtd2lkdGggUkFJRCwgJXUsINC90LUg0ZQg0L/QsNGA0L3QuNC8INC60YDQsNGC0L3QuNC8IHN0cmlkZSwgJXUuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIG1rZTJmcyBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorItCh0LjQvdGC0LDQutGB0LjRh9C90LAg0L/QvtC80LjQu9C60LAg0YMg0YTQsNC50LvRliDQvdCw0LvQsNGI0YLRg9Cy0LDQvdGMIG1rZTJmcyAoJXMsINGA0Y/QtNC+0LogJWQpXG4iCisiXHQlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNjggbWlzYy90dW5lMmZzLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICLQktGB0YLQsNC90L7QstC70LXQvdC+INC90LXQutC+0YDQtdC60YLQvdC40Lkg0L/QsNGA0LDQvNC10YLRgCDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwODAgbWlzYy90dW5lMmZzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAi0JLRgdGC0LDQvdC+0LLQu9C10L3QviDQvdC10LrQvtGA0LXQutGC0L3QuNC5INC/0LDRgNCw0LzQtdGC0YAg0LzQvtC90YLRg9Cy0LDQvdC90Y86ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiWW91ciBta2UyZnMuY29uZiBmaWxlIGRvZXMgbm90IGRlZmluZSB0aGUgJXMgZmlsZXN5c3RlbSB0eXBlLlxuIgorbXNnc3RyICIiCisiXG4iCisi0KMg0LLQsNGI0L7QvNGDINGE0LDQudC70ZYgbWtlMmZzLmNvbmYg0L3QtSDQvNGW0YHRgtC40YLRjNGB0Y8g0YLQuNC/0YMg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCAlcy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjI0Cittc2dpZCAiIgorIllvdSBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgYW4gdXBkYXRlZCBta2UyZnMuY29uZiBmaWxlLlxuIgorIlxuIgorbXNnc3RyICIiCisi0JnQvNC+0LLRltGA0L3Qviwg0LLQsNC8INGB0LvRltC0INCy0YHRgtCw0L3QvtCy0LjRgtC4INC+0L3QvtCy0LvQtdC90LjQuSDRhNCw0LnQuyBta2UyZnMuY29uZi5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjI4Cittc2dpZCAiQWJvcnRpbmcuLi5cbiIKK21zZ3N0ciAi0J/QtdGA0LXRgNC40LLQsNGU0LzQviDQvtCx0YDQvtCx0LrRgy4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBmc190eXBlICVzIGlzIG5vdCBkZWZpbmVkIGluIG1rZTJmcy5jb25mXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQn9C+0L/QtdGA0LXQtNC20LXQvdC90Y86IGZzX3R5cGUg0LTQu9GPICVzINGDIG1rZTJmcy5jb25mINC90LUg0LLQuNC30L3QsNGH0LXQvdC+XG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ0OQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IFBBVEguXG4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0YDQvtC30LzRltGB0YLQuNGC0Lgg0YMg0L/QsNC84oCZ0Y/RgtGMINC90L7QstGDINC30LzRltC90L3RgyBQQVRILlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgaW5pdCBwcm9maWxlIHN1Y2Nlc3NmdWxseSAoZXJyb3I6ICVsZCkuXG4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0YPRgdC/0ZbRiNC90L4g0ZbQvdGW0YbRltCw0LvRltC30YPQstCw0YLQuCDQv9GA0L7RhNGW0LvRjCAo0L/QvtC80LjQu9C60LA6ICVsZCkuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUyMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrIHNpemUgLSAlcyIKK21zZ3N0ciAi0L3QtdC60L7RgNC10LrRgtC90LjQuSDRgNC+0LfQvNGW0YAg0LHQu9C+0LrRgyAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogYmxvY2tzaXplICVkIG5vdCB1c2FibGUgb24gbW9zdCBzeXN0ZW1zLlxuIgorbXNnc3RyICLQn9C+0L/QtdGA0LXQtNC20LXQvdC90Y86INGA0L7Qt9C80ZbRgCDQsdC70L7QutGDICVkINGUINC90LXQv9GA0LjQtNCw0YLQvdC40Lwg0LTQu9GPINCx0ZbQu9GM0YjQvtGB0YLRliDRgdC40YHRgtC10LwuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNsdXN0ZXIgc2l6ZSAtICVzIgorbXNnc3RyICLQvdC10LrQvtGA0LXQutGC0L3QuNC5INGA0L7Qt9C80ZbRgCDQutC70LDRgdGC0LXRgNCwIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU1MworbXNnaWQgIictUicgaXMgZGVwcmVjYXRlZCwgdXNlICctRScgaW5zdGVhZCIKK21zZ3N0ciAiwqstUsK7INGUINC30LDRgdGC0LDRgNGW0LvQuNC8LCDQstCw0Lwg0LLQsNGA0YLQviDRgdC60L7RgNC40YHRgtCw0YLQuNGB0Y8gwqstRcK7IgorCisjOiBtaXNjL21rZTJmcy5jOjE1NjUKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgYmxvY2tzIHBlciBncm91cCIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LAg0LrRltC70YzQutGW0YHRgtGMINCx0LvQvtC60ZbQsiDQvdCwINCz0YDRg9C/0YMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU3MAorbXNnaWQgImJsb2NrcyBwZXIgZ3JvdXAgbXVzdCBiZSBtdWx0aXBsZSBvZiA4IgorbXNnc3RyICLQutGW0LvRjNC60ZbRgdGC0Ywg0LHQu9C+0LrRltCyINC90LAg0LPRgNGD0L/RgyDQvNCw0ZQg0LHRg9GC0Lgg0LrRgNCw0YLQvdC+0Y4gOCIKKworIzogbWlzYy9ta2UyZnMuYzoxNTc4Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGZsZXhfYmcgc2l6ZSIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LUg0YfQuNGB0LvQviDQtNC70Y8g0YDQvtC30LzRltGA0YMgZmxleF9iZyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg0Cittc2dpZCAiZmxleF9iZyBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyIgorbXNnc3RyICLQoNC+0LfQvNGW0YAgZmxleF9iZyDQvNCw0ZQg0LHRg9GC0Lgg0YHRgtC10L/QtdC90LXQvCAyIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmxleF9iZyBzaXplICglbHUpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDJeMzEiCittc2dzdHIgItGA0L7Qt9C80ZbRgCBmbGV4X2JnICglbHUpINC80LDRlCDQsdGD0YLQuCDQvdC1INCx0ZbQu9GM0YjQuNC8INC30LAgMl4zMSIKKworIzogbWlzYy9ta2UyZnMuYzoxNjAwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgcmF0aW8gJXMgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICLQvdC10LrQvtGA0LXQutGC0L3QtSDQstGW0LTQvdC+0YjQtdC90L3RjyBpbm9kZSAlcyAo0LzRltC9LiAlZC/QvNCw0LrRgS4gJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgItC90LXQutC+0YDQtdC60YLQvdC40Lkg0YDQvtC30LzRltGAIGlub2RlIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyMworbXNnaWQgIiIKKyJXYXJuaW5nOiAtSyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZSAnLUUgIgorIm5vZGlzY2FyZCcgZXh0ZW5kZWQgb3B0aW9uIGluc3RlYWQhXG4iCittc2dzdHIgIiIKKyLQn9C+0L/QtdGA0LXQtNC20LXQvdC90Y86INC/0LDRgNCw0LzQtdGC0YAgLUsg0ZQg0LfQsNGB0YLQsNGA0ZbQu9C40LwsINC90LjQvCDQvdC1INCy0LDRgNGC0L4g0LHRltC70YzRiNC1INC60L7RgNC40YHRgtGD0LLQsNGC0LjRgdGPLiAiCisi0JLQsNC8INCy0LDRgNGC0L4g0LrQvtGA0LjRgdGC0YPQstCw0YLQuNGB0Y8g0L/QsNGA0LDQvNC10YLRgNC+0LwgwqstRSBub2Rpc2NhcmTCuyFcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjM0Cittc2dpZCAiaW4gbWFsbG9jIGZvciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorbXNnc3RyICLRgyBtYWxsb2Mg0LTQu9GPIGJhZF9ibG9ja3NfZmlsZW5hbWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgItC90LXQutC+0YDQtdC60YLQvdC40Lkg0LLRltC00YHQvtGC0L7QuiDQt9Cw0YDQtdC30LXRgNCy0L7QstCw0L3QuNGFINCx0LvQvtC60ZbQsiAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bSBpbm9kZXMgLSAlcyIKK21zZ3N0ciAi0L/QvtC80LjQu9C60L7QstCwINC60ZbQu9GM0LrRltGB0YLRjCBpbm9kZSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uIGxldmVsIC0gJXMiCittc2dzdHIgItC/0L7QvNC40LvQutC+0LLQuNC5INGA0ZbQstC10L3RjCDQvNC+0LTQuNGE0ZbQutCw0YbRltGXIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIHJldmlzaW9uICVkIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINGB0YLQstC+0YDQtdC90L3RjyDQvNC+0LTQuNGE0ZbQutCw0YbRltGXICVkIgorCisjOiBtaXNjL21rZTJmcy5jOjE2OTgKK21zZ2lkICJUaGUgLXQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAi0J/QsNGA0LDQvNC10YLRgCAtdCDQvNC+0LbQvdCwINCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0YLQuCDQu9C40YjQtSDQvtC00LjQvSDRgNCw0LciCisKKyM6IG1pc2MvbWtlMmZzLmM6MTcwNgorbXNnaWQgIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICLQn9Cw0YDQsNC80LXRgtGAIC1UINC80L7QttC90LAg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INC70LjRiNC1INC+0LTQuNC9INGA0LDQtyIKKworIzogbWlzYy9ta2UyZnMuYzoxNzU5IG1pc2MvbWtlMmZzLmM6Mjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIGRldmljZSAlc1xuIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQstGW0LTQutGA0LjRgtC4INC/0YDQuNGB0YLRgNGW0Lkg0LbRg9GA0L3QsNC70YMgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZGV2IGJsb2Nrc2l6ZSAoJWQpIHNtYWxsZXIgdGhhbiBtaW5pbXVtIGJsb2Nrc2l6ZSAlZFxuIgorbXNnc3RyICIiCisi0KDQvtC30LzRltGAINCx0LvQvtC60YMg0L/RgNC40YHRgtGA0L7RjiDQttGD0YDQvdCw0LvRgyAoJWQpINGUINC80LXQvdGI0LjQvCDQt9CwINC80ZbQvdGW0LzQsNC70YzQvdC40Lkg0YDQvtC30LzRltGAINCx0LvQvtC60YMgJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIGpvdXJuYWwgZGV2aWNlJ3MgYmxvY2tzaXplOiAlZFxuIgorbXNnc3RyICLQktC40LrQvtGA0LjRgdGC0L7QstGD0ZTQvNC+INGA0L7Qt9C80ZbRgCDQsdC70L7QutGDINC/0YDQuNGB0YLRgNC+0Y4g0LbRg9GA0L3QsNC70YM6ICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrcyAnJXMnIG9uIGRldmljZSAnJXMnIgorbXNnc3RyICLQvdC10LrQvtGA0LXQutGC0L3RliDQsdC70L7QutC4IMKrJXPCuyDQvdCwINC/0YDQuNGB0YLRgNC+0Zcgwqslc8K7IgorCisjOiBtaXNjL21rZTJmcy5jOjE4MDQKK21zZ2lkICJmaWxlc3lzdGVtIgorbXNnc3RyICLRhNCw0LnQu9C+0LLQsCDRgdC40YHRgtC10LzQsCIKKworIzogbWlzYy9ta2UyZnMuYzoxODE3IHJlc2l6ZS9tYWluLmM6Mzk1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBmaWxlc3lzdGVtIHNpemUiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INCy0LjQt9C90LDRh9C40YLQuCDRgNC+0LfQvNGW0YAg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCIKKworIzogbWlzYy9ta2UyZnMuYzoxODIzCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKyLQndC1INCy0LTQsNC70L7RgdGPINCy0LjQt9C90LDRh9C40YLQuCDRgNC+0LfQvNGW0YAg0L/RgNC40YHRgtGA0L7Rjjsg0LLQsNC8INGB0LvRltC0INCy0LrQsNC30LDRgtC4XG4iCisi0YDQvtC30LzRltGAINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LhcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODMwCittc2dpZCAiIgorIkRldmljZSBzaXplIHJlcG9ydGVkIHRvIGJlIHplcm8uICBJbnZhbGlkIHBhcnRpdGlvbiBzcGVjaWZpZWQsIG9yXG4iCisiXHRwYXJ0aXRpb24gdGFibGUgd2Fzbid0IHJlcmVhZCBhZnRlciBydW5uaW5nIGZkaXNrLCBkdWUgdG9cbiIKKyJcdGEgbW9kaWZpZWQgcGFydGl0aW9uIGJlaW5nIGJ1c3kgYW5kIGluIHVzZS4gIFlvdSBtYXkgbmVlZCB0byByZWJvb3RcbiIKKyJcdHRvIHJlLXJlYWQgeW91ciBwYXJ0aXRpb24gdGFibGUuXG4iCittc2dzdHIgIiIKKyLQntGC0YDQuNC80LDQvdC+INC00LDQvdGWINGJ0L7QtNC+INC90YPQu9GM0L7QstC+0LPQviDRgNC+0LfQvNGW0YDRgyDQv9GA0LjRgdGC0YDQvtGOLiDQktC60LDQt9Cw0L3QviDQvdC10LrQvtGA0LXQutGC0L3QuNC5XG4iCisiXHTRgNC+0LfQtNGW0Lsg0LDQsdC+INGC0LDQsdC70LjRhtGOINGA0L7Qt9C00ZbQu9GW0LIg0L3QtSDQsdGD0LvQviDQv9C+0LLRgtC+0YDQvdC+INC/0YDQvtGH0LjRgtCw0L3QviDQv9GW0YHQu9GPXG4iCisiXHTQt9Cw0L/Rg9GB0LrRgyBmZGlzayDRh9C10YDQtdC3INCy0L3QtdGB0LXQvdC90Y8g0LfQvNGW0L0g0LTQviDRgNC+0LfQtNGW0LvRgywg0Y/QutC40Lkg0L/QtdGA0LXQsdGD0LLQsNCyINGDXG4iCisiXHTQutC+0YDQuNGB0YLRg9Cy0LDQvdC90ZYuINCS0LDQvCDQstCw0YDRgtC+INC/0LXRgNC10LfQsNCy0LDQvdGC0LDQttC40YLQuCDRgdC40YHRgtC10LzRgywg0YnQvtCxXG4iCisiXHTQtNCw0L3RliDRgtCw0LHQu9C40YbRliDRgNC+0LfQtNGW0LvRltCyINCx0YPQu9C+INC/0YDQvtGH0LjRgtCw0L3QviDQv9GA0LDQstC40LvRjNC90L4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg0NworbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICLQpNCw0LnQu9C+0LLQsCDRgdC40YHRgtC10LzQsCDRlCDQsdGW0LvRjNGI0L7RjiDQt9CwINCy0LjQtNC40LzQuNC5INGA0L7Qt9C80ZbRgCDQv9GA0LjRgdGC0YDQvtGOLiIKKworIzogbWlzYy9ta2UyZnMuYzoxODY3Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGZzIHR5cGVzIGxpc3RcbiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQvtCx0YDQvtCx0LjRgtC4INGB0L/QuNGB0L7QuiDRgtC40L/RltCyINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LhcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTA4Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBoYXJkd2FyZSBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0LLQuNC30L3QsNGH0LjRgtC4INCw0L/QsNGA0LDRgtC90LjQuSDRgNC+0LfQvNGW0YAg0YHQtdC60YLQvtGA0LAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkxNAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgcGh5c2ljYWwgc2VjdG9yIHNpemUiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INCy0LjQt9C90LDRh9C40YLQuCDRhNGW0LfQuNGH0L3QuNC5INGA0L7Qt9C80ZbRgCDRgdC10LrRgtC+0YDQsCIKKworIzogbWlzYy9ta2UyZnMuYzoxOTQ2Cittc2dpZCAid2hpbGUgc2V0dGluZyBibG9ja3NpemU7IHRvbyBzbWFsbCBmb3IgZGV2aWNlXG4iCittc2dzdHIgIiIKKyLQv9GW0LQg0YfQsNGBINCy0YHRgtCw0L3QvtCy0LvQtdC90L3RjyDRgNC+0LfQvNGW0YDRgyDQsdC70L7QutGDOyDRgNC+0LfQvNGW0YAg0ZQg0L3QsNC00YLQviDQvNCw0LvQuNC8INC00LvRjyDQv9GA0LjRgdGC0YDQvtGOXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogc3BlY2lmaWVkIGJsb2Nrc2l6ZSAlZCBpcyBsZXNzIHRoYW4gZGV2aWNlIHBoeXNpY2FsIHNlY3RvcnNpemUgJWRcbiIKK21zZ3N0ciAiIgorItCf0L7Qv9C10YDQtdC00LbQtdC90L3Rjzog0LLQutCw0LfQsNC90LjQuSDRgNC+0LfQvNGW0YAg0LHQu9C+0LrRgywgJWQsINGUINC80LXQvdGI0LjQvCDQt9CwINGE0ZbQt9C40YfQvdC40Lkg0YDQvtC30LzRltGAINGB0LXQutGC0L7RgNCwICIKKyLQv9GA0LjRgdGC0YDQvtGOLCAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBTaXplIG9mIGRldmljZSAoMHglbGx4IGJsb2NrcykgJXMgdG9vIGJpZyB0byBiZSBleHByZXNzZWRcbiIKKyJcdGluIDMyIGJpdHMgdXNpbmcgYSBibG9ja3NpemUgb2YgJWQuXG4iCittc2dzdHIgIiIKKyIlczog0YDQvtC30LzRltGA0Lgg0L/RgNC40YHRgtGA0L7RjiAoMHglbGx4INCx0LvQvtC60ZbQsikgJXMg0ZQg0L3QsNC00YLQviDQstC10LvQuNC60LjQvNC4INC00LvRj1xuIgorIlx00LfQsNC/0LjRgdGDINGX0YUg0YMgMzIt0LHRltGC0L7QstC+0LzRgyDRhNC+0YDQvNCw0YLRliDQtyDRgNC+0LfQvNGW0YDQvtC8INCx0LvQvtC60YMgJWQuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk5MQorbXNnaWQgImZzX3R5cGVzIGZvciBta2UyZnMuY29uZiByZXNvbHV0aW9uOiAiCittc2dzdHIgImZzX3R5cGVzINC00LvRjyDRgNC+0LfQsuKAmdGP0LfQsNC90L3RjyBta2UyZnMuY29uZjogIgorCisjOiBtaXNjL21rZTJmcy5jOjE5OTgKK21zZ2lkICJGaWxlc3lzdGVtIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKyLQoyDRhNCw0LnQu9C+0LLQuNGFINGB0LjRgdGC0LXQvNCw0YUg0LzQvtC00LjRhNGW0LrQsNGG0ZbRlyAwINC80L7QttC70LjQstC+0YHRgtGWINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80Lgg0L3QtSAiCisi0L/RltC00YLRgNC40LzRg9GO0YLRjNGB0Y9cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDA2Cittc2dpZCAiU3BhcnNlIHN1cGVyYmxvY2tzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKyLQoyDRhNCw0LnQu9C+0LLQuNGFINGB0LjRgdGC0LXQvNCw0YUg0LzQvtC00LjRhNGW0LrQsNGG0ZbRlyAwINC/0ZbQtNGC0YDQuNC80LrQuCDRgNC+0LfRgNGW0LTQttC10L3QuNGFINGB0YPQv9C10YDQsdC70L7QutGW0LIg0L3QtSAiCisi0L/QtdGA0LXQtNCx0LDRh9C10L3QvlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMTgKK21zZ2lkICJKb3VybmFscyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICLQoyDRhNCw0LnQu9C+0LLQuNGFINGB0LjRgdGC0LXQvNCw0YUg0LzQvtC00LjRhNGW0LrQsNGG0ZbRlyAwINC/0ZbQtNGC0YDQuNC80LrQuCDQttGD0YDQvdCw0LvRltCyINC90LUg0L/QtdGA0LXQtNCx0LDRh9C10L3QvlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVsZiIKK21zZ3N0ciAi0L3QtdC60L7RgNC10LrRgtC90LjQuSDQstGW0LTRgdC+0YLQvtC6INC30LDRgNC10LfQtdGA0LLQvtCy0LDQvdC40YUg0LHQu9C+0LrRltCyIC0gJWxmIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNDkKK21zZ2lkICIiCisiRXh0ZW50cyBNVVNUIGJlIGVuYWJsZWQgZm9yIGEgNjQtYml0IGZpbGVzeXN0ZW0uICBQYXNzIC1PIGV4dGVudHMgdG8gIgorInJlY3RpZnkuXG4iCittc2dzdHIgIiIKKyLQlNC70Y8gNjQt0LHRltGC0L7QstC+0Zcg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCDRgdC70ZbQtCDRg9Cy0ZbQvNC60L3Rg9GC0Lgg0YDQvtC30YjQuNGA0LXQvdC90Y8uINCf0LXRgNC10LTQsNC50YLQtSAiCisi0L/RgNC+0LPRgNCw0LzRliAtTyBleHRlbnRzLCDRidC+0LEg0LLQuNC/0YDQsNCy0LjRgtC4INGG0LUuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA2OQorbXNnaWQgIlRoZSBjbHVzdGVyIHNpemUgbWF5IG5vdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGJsb2NrIHNpemUuXG4iCittc2dzdHIgItCg0L7Qt9C80ZbRgCDQutC70LDRgdGC0LXRgNCwINC90LUg0LzQvtC20LUg0LHRg9GC0Lgg0LzQtdC90YjQuNC8INC30LAg0YDQvtC30LzRltGAINCx0LvQvtC60YMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA3NQorbXNnaWQgInNwZWNpZnlpbmcgYSBjbHVzdGVyIHNpemUgcmVxdWlyZXMgdGhlIGJpZ2FsbG9jIGZlYXR1cmUiCittc2dzdHIgItC00LvRjyDQstC40LfQvdCw0YfQtdC90L3RjyDRgNC+0LfQvNGW0YDRgyDQutC70LDRgdGC0LXRgNCwINC/0L7RgtGA0ZbQsdC90LAg0LzQvtC20LvQuNCy0ZbRgdGC0YwgYmlnYWxsb2MiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBVbmFibGUgdG8gZ2V0IGRldmljZSBnZW9tZXRyeSBmb3IgJXNcbiIKK21zZ3N0ciAi0L/QvtC/0LXRgNC10LTQttC10L3QvdGPOiDQvdC1INCy0LTQsNC70L7RgdGPINC+0YLRgNC40LzQsNGC0Lgg0L/QsNGA0LDQvNC10YLRgNC4INC/0YDQuNGB0YLRgNC+0Y4g0LTQu9GPICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbGlnbm1lbnQgaXMgb2Zmc2V0IGJ5ICVsdSBieXRlcy5cbiIKK21zZ3N0ciAi0LLQuNGA0ZbQstC90Y7QstCw0L3QvdGPICVzINC30YHRg9C90YPRgtC+INC90LAgJWx1INCx0LDQudGC0ZbQsi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIG1heSByZXN1bHQgaW4gdmVyeSBwb29yIHBlcmZvcm1hbmNlLCAocmUpLXBhcnRpdGlvbmluZyBzdWdnZXN0ZWQuXG4iCittc2dzdHIgIiIKKyLQptC1INC80L7QttC1INC/0YDQuNC30LLQtdGB0YLQuCDQtNC+INC30L3QsNGH0L3QvtGXINCy0YLRgNCw0YLQuCDRiNCy0LjQtNC60L7QtNGW0ZcuINCS0LDQvCDQstCw0YDRgtC+INCy0LjQutC+0L3QsNGC0Lgg0L/QvtCy0YLQvtGA0L3QuNC5ICIKKyLRgNC+0LfQv9C+0LTRltC7INC/0YDQuNGB0YLRgNC+0Y4g0L3QsCDRgNC+0LfQtNGW0LvQuC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAobWF4ICVkKSIKK21zZ3N0ciAiJWQt0LHQsNC50YLQvtCy0ZYg0LHQu9C+0LrQuCDRlCDQvdCw0LTRgtC+INCy0LXQu9C40LrQuNC80Lgg0LTQu9GPINGB0LjRgdGC0LXQvNC4ICjQvNCw0LrRgS4gLSAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpLCBmb3JjZWQgdG8gY29udGludWVcbiIKK21zZ3N0ciAiIgorItCf0L7Qv9C10YDQtdC00LbQtdC90L3RjzogJWQt0LHQsNC50YLQvtCy0ZYg0LHQu9C+0LrQuCDRlCDQvdCw0LTRgtC+INCy0LXQu9C40LrQuNC80Lgg0LTQu9GPINGB0LjRgdGC0LXQvNC4ICjQvNCw0LrRgS4gLSAlZCksICIKKyLQv9GA0LjQvNGD0YHQvtCy0L4g0L/RgNC+0LTQvtCy0LbRg9GU0LzQviDRgNC+0LHQvtGC0YNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTgwCittc2dpZCAiQ2FuJ3Qgc3VwcG9ydCBiaWdhbGxvYyBmZWF0dXJlIHdpdGhvdXQgZXh0ZW50cyBmZWF0dXJlIgorbXNnc3RyICLQn9GW0LTRgtGA0LjQvNC60LAg0LzQvtC20LvQuNCy0L7RgdGC0ZYgYmlnYWxsb2Mg0L3QtdC80L7QttC70LjQstCwINCx0LXQtyDQvNC+0LbQu9C40LLQvtGB0YLRliBleHRlbnRzIgorCisjOiBtaXNjL21rZTJmcy5jOjIxODcKK21zZ2lkICIiCisiVGhlIHJlc2l6ZV9pbm9kZSBhbmQgbWV0YV9iZyBmZWF0dXJlcyBhcmUgbm90IGNvbXBhdGlibGUuXG4iCisiVGhleSBjYW4gbm90IGJlIGJvdGggZW5hYmxlZCBzaW11bHRhbmVvdXNseS5cbiIKK21zZ3N0ciAiIgorItCc0L7QttC70LjQstC+0YHRgtGWIHJlc2l6ZV9pbm9kZSDRliBtZXRhX2JnINGUINC90LXRgdGD0LzRltGB0L3QuNC80LguXG4iCisi0IfRhSDQvdC1INC80L7QttC90LAg0LLQvNC40LrQsNGC0Lgg0L7QtNC90L7Rh9Cw0YHQvdC+LlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIxOTYKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiIKKyJTZWUgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQmlnYWxsb2MgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorItCf0L7Qv9C10YDQtdC00LbQtdC90L3Rjzog0YDQvtC30YDQvtCx0LrRgyDRliDRgtC10YHRgtGD0LLQsNC90L3RjyDQvNC+0LbQu9C40LLQvtGB0YLRliBiaWdhbGxvYyDRidC1INC90LUg0LfQsNCy0LXRgNGI0LXQvdC+XG4iCisi0JTQvtC60LvQsNC00L3RltGI0LAg0ZbQvdGE0L7RgNC80LDRhtGW0Y86IGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0JpZ2FsbG9jXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIwNworbXNnaWQgInJlc2VydmVkIG9ubGluZSByZXNpemUgYmxvY2tzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLXNwYXJzZSBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisi0YMg0L3QtdGA0L7Qt9GA0ZbQtNC20LXQvdC40YUg0YTQsNC50LvQvtCy0LjRhSDRgdC40YHRgtC10LzQsNGFINC/0ZbQtNGC0YDQuNC80LrQuCDRltC90YLQtdGA0LDQutGC0LjQstC90L7RlyDQt9C80ZbQvdC4INGA0L7Qt9C80ZbRgNGW0LIgIgorItCx0LvQvtC60ZbQsiDQvdC1INC/0LXRgNC10LTQsdCw0YfQtdC90L4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIxNgorbXNnaWQgImJsb2NrcyBwZXIgZ3JvdXAgY291bnQgb3V0IG9mIHJhbmdlIgorbXNnc3RyICLQutGW0LvRjNC60ZbRgdGC0Ywg0LHQu9C+0LrRltCyINC90LAg0LPRgNGD0L/RgyDQu9C10LbQuNGC0Ywg0LfQsCDQvNC10LbQsNC80Lgg0L/RgNC40L/Rg9GB0YLQuNC80L7Qs9C+INC00ZbQsNC/0LDQt9C+0L3RgyIKKworIzogbWlzYy9ta2UyZnMuYzoyMjQwCittc2dpZCAiRmxleF9iZyBmZWF0dXJlIG5vdCBlbmFibGVkLCBzbyBmbGV4X2JnIHNpemUgbWF5IG5vdCBiZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKyLQnNC+0LbQu9C40LLRltGB0YLRjCBmbGV4X2JnINC90LUg0YPQstGW0LzQutC90LXQvdC+LCDQvtGC0LbQtSwg0YDQvtC30LzRltGAIGZsZXhfYmcg0L3QtSDQvNC+0LbQvdCwINCy0LrQsNC30YPQstCw0YLQuCIKKworIzogbWlzYy9ta2UyZnMuYzoyMjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgc2l6ZSAlZCAobWluICVkL21heCAlZCkiCittc2dzdHIgItC90LXQutC+0YDQtdC60YLQvdC40Lkg0YDQvtC30LzRltGAIGlub2RlICVkICjQvNGW0L0uICVkL9C80LDQutGBLiAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCByYWlzZSBpbm9kZSByYXRpbz8iCittc2dzdHIgItC30LDQvdCw0LTRgtC+INCx0LDQs9Cw0YLQviBpbm9kZSAoJWxsdSksINC30LHRltC70YzRiNC40YLQuCDQstGW0LTQvdC+0YjQtdC90L3RjyBpbm9kZT8iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCBzcGVjaWZ5IDwgMl4zMiBpbm9kZXMiCittc2dzdHIgItC30LDQvdCw0LTRgtC+INCx0LDQs9Cw0YLQviBpbm9kZSAoJWxsdSksINCy0LrQsNC20ZbRgtGMIDwgMl4zMiBpbm9kZSIKKworIzogbWlzYy9ta2UyZnMuYzoyMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbm9kZV9zaXplICgldSkgKiBpbm9kZXNfY291bnQgKCV1KSB0b28gYmlnIGZvciBhXG4iCisiXHRmaWxlc3lzdGVtIHdpdGggJWxsdSBibG9ja3MsIHNwZWNpZnkgaGlnaGVyIGlub2RlX3JhdGlvICgtaSlcbiIKKyJcdG9yIGxvd2VyIGlub2RlIGNvdW50ICgtTikuXG4iCittc2dzdHIgIiIKKyLQl9C90LDRh9C10L3QvdGPIGlub2RlX3NpemUgKCV1KSAqIGlub2Rlc19jb3VudCAoJXUpINGUINC90LDQtNGC0L4g0LLQtdC70LjQutC40LxcbiIKKyJcdNC00LvRjyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4INC3ICVsbHUg0LHQu9C+0LrRltCyLCDQstC60LDQttGW0YLRjCDQsdGW0LvRjNGI0LUg0LfQvdCw0YfQtdC90L3RjyBpbm9kZV9yYXRpbyAoLSIKKyJpKVxuIgorIlx00LDQsdC+INC30LzQtdC90YjRltGC0Ywg0LrRltC70YzQutGW0YHRgtGMIGlub2RlICgtTikuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbTsgdGhpcyBjYW4gYmUgdW5kb25lIHVzaW5nIHRoZSBjb21tYW5kOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorItCf0LXRgNC10LfQsNC/0LjRgdGD0ZTQvNC+INC90LDRj9Cy0L3RgyDRhNCw0LnQu9C+0LLRgyDRgdC40YHRgtC10LzRgzsg0YHQutCw0YHRg9Cy0LDRgtC4INC/0LXRgNC10LfQsNC/0LjRgdGD0LLQsNC90L3RjyDQvNC+0LbQvdCwINC30LAgIgorItC00L7Qv9C+0LzQvtCz0L7RjiDQutC+0LzQsNC90LTQuDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQzMgorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzZXR1cCB1bmRvIGZpbGVcbiIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0L3QsNC70LDRiNGC0L7QstGD0LLQsNC90L3RjyDRhNCw0LnQu9CwINC00LDQvdC40YUg0LTQu9GPINGB0LrQsNGB0YPQstCw0L3QvdGPINC00ZbQuVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NTgKK21zZ2lkICJEaXNjYXJkaW5nIGRldmljZSBibG9ja3M6ICIKK21zZ3N0ciAi0JLRltC00LrQuNC00LDRlNC80L4g0LHQu9C+0LrQuCDQv9GA0LjRgdGC0YDQvtGOOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ3NAorbXNnaWQgImZhaWxlZCAtICIKK21zZ3N0ciAi0L/QvtC80LjQu9C60LAgLSAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU5NgorbXNnaWQgIndoaWxlIHNldHRpbmcgdXAgc3VwZXJibG9jayIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDQvdCw0LvQsNGI0YLQvtCy0YPQstCw0L3QvdGPINGB0YPQv9C10YDQsdC70L7QutGDIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MTIKK21zZ2lkICJEaXNjYXJkIHN1Y2NlZWRlZCBhbmQgd2lsbCByZXR1cm4gMHMgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iCittc2dzdHIgIiIKKyLQo9GB0L/RltGI0L3QviDQstGW0LTQutC40L3Rg9GC0L4sINCx0YPQtNC1INC/0L7QstC10YDQvdGD0YLQviAwcyAtINC/0YDQvtC/0YPRgdC60LDRlNC80L4g0LLQuNGC0LjRgNCw0L3QvdGPINGC0LDQsdC70LjRhtGWIGlub2RlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9zIC0gJXMiCittc2dzdHIgItC90LXQstGW0LTQvtC80LAg0J7QoSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjI3NTIKK21zZ2lkICJBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogIgorbXNnc3RyICLQoNC+0LfQvNGW0YnRg9GU0LzQviDRgtCw0LHQu9C40YbRliDQs9GA0YPQvzogIgorCisjOiBtaXNjL21rZTJmcy5jOjI3NjAKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gYWxsb2NhdGUgZmlsZXN5c3RlbSB0YWJsZXMiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INGA0L7Qt9C80ZbRgdGC0LjRgtC4INGC0LDQsdC70LjRhtGWINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LgiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2OQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgIiIKKyJcbiIKKyJcdNC/0ZbQtCDRh9Cw0YEg0L/QtdGA0LXRgtCy0L7RgNC10L3QvdGPINCx0ZbRgtC+0LLQvtGXINC60LDRgNGC0Lgg0L/RltC00LrQu9Cw0YHRgtC10YDQsCIKKworIzogbWlzYy9ta2UyZnMuYzoyODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgYmxvY2sgJWxsdSBhdCBlbmQgb2YgZmlsZXN5c3RlbSIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDQt9Cw0L3Rg9C70LXQvdC90Y8g0LHQu9C+0LrRgyAlbGx1INC90LDQv9GA0LjQutGW0L3RhtGWINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LgiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgyNgorbXNnaWQgIndoaWxlIHJlc2VydmluZyBibG9ja3MgZm9yIG9ubGluZSByZXNpemUiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YDQtdC30LXRgNCy0YPQstCw0L3QvdGPINCx0LvQvtC60ZbQsiDQtNC70Y8g0ZbQvdGC0LXRgNCw0LrRgtC40LLQvdC+0Zcg0LfQvNGW0L3QuCDRgNC+0LfQvNGW0YDRgyIKKworIzogbWlzYy9ta2UyZnMuYzoyODM4IG1pc2MvdHVuZTJmcy5jOjcxMgorbXNnaWQgImpvdXJuYWwiCittc2dzdHIgItC20YPRgNC90LDQuyIKKworIzogbWlzYy9ta2UyZnMuYzoyODUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBqb3VybmFsIHRvIGRldmljZSAlczogIgorbXNnc3RyICLQlNC+0LTQsNCy0LDQvdC90Y8g0LbRg9GA0L3QsNC70YMg0L3QsCDQv9GA0LjRgdGC0YDQvtGXICVzOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gYWRkIGpvdXJuYWwgdG8gZGV2aWNlICVzIgorbXNnc3RyICIiCisiXG4iCisiXHTQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQtNC+0LTQsNCy0LDQvdC90Y8g0LbRg9GA0L3QsNC70YMg0L3QsCDQv9GA0LjRgdGC0YDQvtGOICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NjIgbWlzYy9ta2UyZnMuYzoyODkzIG1pc2MvdHVuZTJmcy5jOjc0MSBtaXNjL3R1bmUyZnMuYzo3NjAKK21zZ2lkICJkb25lXG4iCittc2dzdHIgItCy0LjQutC+0L3QsNC90L5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODY5Cittc2dpZCAiU2tpcHBpbmcgam91cm5hbCBjcmVhdGlvbiBpbiBzdXBlci1vbmx5IG1vZGVcbiIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GB0LrQsNGU0LzQviDRgdGC0LLQvtGA0LXQvdC90Y8g0LbRg9GA0L3QsNC70YMg0YMg0LvQuNGI0LUt0YHRg9C/0LXRgCDRgNC10LbQuNC80ZZcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCV1IGJsb2Nrcyk6ICIKK21zZ3N0ciAi0KHRgtCy0L7RgNGO0ZTQvNC+INC20YPRgNC90LDQuyAoJXUg0LHQu9C+0LrRltCyKTogIgorCisjOiBtaXNjL21rZTJmcy5jOjI4ODkKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwiCittc2dzdHIgIiIKKyJcbiIKKyJcdNC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INGB0YLQstC+0YDQtdC90L3RjyDQttGD0YDQvdCw0LvRgyIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAxIG1pc2MvdHVuZTJmcy5jOjUxNgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisiXG4iCisi0J/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDQstC80LjQutCw0L3QvdGPINC80L7QttC70LjQstC+0YHRgtGWINC30LDQv9C+0LHRltCz0LDQvdC90Y8g0L/QvtCy0YLQvtGA0L3QuNC8INC80L7QvdGC0YPQstCw0L3QvdGP0LwuIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBpcyBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkIHNlY29uZHMuXG4iCittc2dzdHIgIiIKKyLQo9Cy0ZbQvNC60L3QtdC90L4g0LfQsNGF0LjRgdGCINCy0ZbQtCDQv9C+0LLRgtC+0YDQvdC+0LPQviDQvNC+0L3RgtGD0LLQsNC90L3RjyDQtyDRltC90YLQtdGA0LLQsNC70L7QvCDQvtC90L7QstC70LXQvdC90Y8g0YMgJWQgIgorItGB0LXQutGD0L3QtC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTIzCittc2dpZCAiV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAiCittc2dzdHIgItCX0LDQv9C40YHRg9GU0LzQviDQtNCw0L3RliDRidC+0LTQviDQvtCx0LvRltC60YMg0YHRg9C/0LXRgNCx0LvQvtC60ZbQsiDRgtCwINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80Lg6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyOTMwCittc2dpZCAiIgorIlxuIgorIldhcm5pbmcsIGhhZCB0cm91YmxlIHdyaXRpbmcgb3V0IHN1cGVyYmxvY2tzLiIKK21zZ3N0ciAiIgorIlxuIgorItCf0L7Qv9C10YDQtdC00LbQtdC90L3Rjywg0LLQuNC90LjQutC70Lgg0L/RgNC+0LHQu9C10LzQuCDQtyDQt9Cw0L/QuNGB0L7QvCDRgdGD0L/QtdGA0LHQu9C+0LrRltCyLiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTMyCittc2dpZCAiIgorImRvbmVcbiIKKyJcbiIKK21zZ3N0ciAiIgorItCy0LjQutC+0L3QsNC90L5cbiIKKyJcbiIKKworIzogbWlzYy9ta2xvc3QrZm91bmQuYzo1MAorbXNnaWQgIlVzYWdlOiBta2xvc3QrZm91bmRcbiIKK21zZ3N0ciAi0JrQvtGA0LjRgdGC0YPQstCw0L3QvdGPOiBta2xvc3QrZm91bmRcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogICVzIGRldmljZS4uLlxuIgorIlxuIgorIlByaW50cyBvdXQgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBnaXZlbiBkZXZpY2UuXG4iCisiRm9yIGV4YW1wbGU6ICVzIC9kZXYvaGRhXG4iCisiXG4iCittc2dzdHIgIiIKKyLQmtC+0YDQuNGB0YLRg9Cy0LDQvdC90Y86ICAlcyDQv9GA0LjRgdGC0YDRltC5Li4uXG4iCisiXG4iCisi0JLQuNCy0L7QtNC40YLRjCDQtNCw0L3RliDRidC+0LTQviDRgNC+0LfQtNGW0LvRltCyINC00LvRjyDQutC+0LbQvdC+0LPQviDQstC60LDQt9Cw0L3QvtCz0L4g0L/RgNC40YHRgtGA0L7Rji5cbiIKKyLQn9GA0LjQutC70LDQtDogJXMgL2Rldi9oZGFcbiIKKyJcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQstGW0LTQutGA0LjRgtC4ICVzOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgZ2VvbWV0cnkgb2YgJXM6ICVzIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC+0YLRgNC40LzQsNGC0Lgg0L/QsNGA0LDQvNC10YLRgNC4ICVzOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgc2l6ZSBvZiAlczogJXMiCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDQtNCw0L3RliDRidC+0LTQviDRgNC+0LfQvNGW0YDRgyAlczogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaD0lM2Qgcz0lM2QgYz0lNGQgICBzdGFydD0lOGQgc2l6ZT0lOGx1IGVuZD0lOGRcbiIKK21zZ3N0ciAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAg0L/QvtGH0LDRgtC+0Lo9JThkINGA0L7Qt9C80ZbRgD0lOGx1INC60ZbQvdC10YbRjD0lOGRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEyCittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgItCR0YPQtNGMINC70LDRgdC60LAsINC30LDQv9GD0YHRgtGW0YLRjCBlMmZzY2sg0LTQu9GPINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LguXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYyBtYXhfbW91bnRzX2NvdW50XSBbLWUgZXJyb3JzX2JlaGF2aW9yXSBbLWcgZ3JvdXBdXG4iCisiXHRbLWkgaW50ZXJ2YWxbZHxtfHddXSBbLWpdIFstSiBqb3VybmFsX29wdGlvbnNdIFstbF1cbiIKKyJcdFstbSByZXNlcnZlZF9ibG9ja3NfcGVyY2VudF0gWy1vIFteXW1vdW50X29wdGlvbnNbLC4uLl1dIFstcCAiCisibW1wX3VwZGF0ZV9pbnRlcnZhbF1cbiIKKyJcdFstciByZXNlcnZlZF9ibG9ja3NfY291bnRdIFstdSB1c2VyXSBbLUMgbW91bnRfY291bnRdIFstTCB2b2x1bWVfbGFiZWxdXG4iCisiXHRbLU0gbGFzdF9tb3VudGVkX2Rpcl0gWy1PIFteXWZlYXR1cmVbLC4uLl1dXG4iCisiXHRbLVEgcXVvdGFfb3B0aW9uc11cbiIKKyJcdFstRSBleHRlbmRlZC1vcHRpb25bLC4uLl1dIFstVCBsYXN0X2NoZWNrX3RpbWVdIFstVSBVVUlEXVxuIgorIlx0WyAtSSBuZXdfaW5vZGVfc2l6ZSBdIGRldmljZVxuIgorbXNnc3RyICIiCisi0JrQvtGA0LjRgdGC0YPQstCw0L3QvdGPOiAlcyBbLWMg0LzQsNC60YFf0Lot0YLRjF/QvNC+0L3RgtGD0LLQsNC90YxdIFstZSDQv9C+0LLQtdC0X9C00LvRj1/Qv9C+0LzQuNC70L7Qul0gWy1nINCz0YDRg9C/0LBdXG4iCisiXHRbLWkg0ZbQvdGC0LXRgNCy0LDQu1tkfG18d11dIFstal0gWy1KINC/0LDRgNCw0LzQtdGC0YDQuF/QttGD0YDQvdCw0LvRg10gWy1sXVxuIgorIlx0Wy1tINCy0ZbQtNGBX9C30LDRgNC10Ldf0LHQu9C+0LrRltCyXSBbLW8gW15d0L/QsNGA0LDQvNC10YLRgNC4X9C80L7QvdGC0YPQstCw0L3QvdGPWywuLi5dXSBbLXAgIgorItGW0L3RgtC10YDQstCw0Ltf0L7QvdC+0LLQu9C10L3QvdGPX21tcF1cbiIKKyJcdFstciDQui3RgtGMX9C30LDRgNC10Ldf0LHQu9C+0LrRltCyXSBbLXUg0LrQvtGA0LjRgdGC0YPQstCw0YddIFstQyDQui3RgtGMX9C80L7QvdGC0YPQstCw0L3RjF0gWy1MICIKKyLQvNGW0YLQutCwX9GC0L7QvNGDXVxuIgorIlx0Wy1NINC+0YHRgl/Qt9C80L7QvdGCX9C60LDRgtCw0LvQvtCzXSBbLU8gW15d0LzQvtC20LvQuNCy0ZbRgdGC0YxbLC4uLl1dXG4iCisiXHRbLVEg0L/QsNGA0LDQvNC10YLRgNC4X9C60LLQvtGC0YPQstCw0L3QvdGPXVxuIgorIlx0Wy1FINC00L7QtNCw0YLQutC+0LLQuNC5X9C/0LDRgNCw0LzQtdGC0YBbLC4uLl1dIFstVCDRh9Cw0YFf0L7RgdGCX9C/0LXRgNC10LLRltGA0LrQuF0gWy1VIFVVSURdXG4iCisiXHRbIC1JINC90L7QstC40Llf0YDQvtC30LzRltGAX2lub2RlIF0g0L/RgNC40YHRgtGA0ZbQuVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDMKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIVxuIgorbXNnc3RyICLQodGD0L/QtdGA0LHQu9C+0Log0LbRg9GA0L3QsNC70YMg0L3QtSDQstC40Y/QstC70LXQvdC+IVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjEKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQstGW0LTQutGA0LjRgtC4INC30L7QstC90ZbRiNC90ZbQuSDQttGD0YDQvdCw0LsiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI2NyBtaXNjL3R1bmUyZnMuYzoxOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIlcyDQvdC1INGUINC20YPRgNC90LDQu9GM0L7QstCw0L3QuNC8INC/0YDQuNGB0YLRgNC+0ZTQvC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6Mjc3IG1pc2MvdHVuZTJmcy5jOjE5NzQKK21zZ2lkICJGaWxlc3lzdGVtJ3MgVVVJRCBub3QgZm91bmQgb24gam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIlVVSUQg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCDQvdC1INC30L3QsNC50LTQtdC90L4g0L3QsCDQttGD0YDQvdCw0LvRjNC+0LLQsNC90L7QvNGDINC/0YDQuNGB0YLRgNC+0ZcuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMwMQorbXNnaWQgIiIKKyJDYW5ub3QgbG9jYXRlIGpvdXJuYWwgZGV2aWNlLiBJdCB3YXMgTk9UIHJlbW92ZWRcbiIKKyJVc2UgLWYgb3B0aW9uIHRvIHJlbW92ZSBtaXNzaW5nIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIiCisi0J3QtSDQstC00LDQu9C+0YHRjyDQstC40Y/QstC40YLQuCDQttGD0YDQvdCw0LvRjNC+0LLQsNC90LjQuSDQv9GA0LjRgdGC0YDRltC5LiDQmdC+0LPQviDQndCVINCy0LjQu9GD0YfQtdC90L4uXG4iCisi0KHQutC+0YDQuNGB0YLQsNC50YLQtdGB0Y8g0L/QsNGA0LDQvNC10YLRgNC+0LwgLWYg0LTQu9GPINCy0LjQu9GD0YfQtdC90L3RjyDQttGD0YDQvdCw0LvRjNC+0LLQsNC90L7Qs9C+INC/0YDQuNGB0YLRgNC+0Y4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMxMAorbXNnaWQgIkpvdXJuYWwgcmVtb3ZlZFxuIgorbXNnc3RyICLQltGD0YDQvdCw0Lsg0LLQuNC70YPRh9C10L3QvlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNTQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YfQuNGC0LDQvdC90Y8g0LHRltGC0L7QstC40YUg0LrQsNGA0YIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM2MgorbXNnaWQgIndoaWxlIGNsZWFyaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHQv9C+0YDQvtC20L3QtdC90L3RjyBpbm9kZSDQttGD0YDQvdCw0LvRgyIKKworIzogbWlzYy90dW5lMmZzLmM6MzczCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINC30LDQv9C40YHRgyBpbm9kZSDQttGD0YDQvdCw0LvRgyIKKworIzogbWlzYy90dW5lMmZzLmM6NDA1IG1pc2MvdHVuZTJmcy5jOjQxOAorbXNnaWQgIihhbmQgcmVib290IGFmdGVyd2FyZHMhKVxuIgorbXNnc3RyICIo0ZYg0L/QtdGA0LXQt9Cw0LLQsNC90YLQsNC20YLQtSDQutC+0LzQv+KAmdGO0YLQtdGAINC/0ZbRgdC70Y8g0YbRjNC+0LPQviEpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisi0J/RltC00YLRgNC40LzQutC4INGB0L/QvtGA0L7QttC90LXQvdC90Y8g0LzQvtC20LvQuNCy0L7RgdGC0ZYg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCDCqyVzwrsg0L3QtSDQv9C10YDQtdC00LHQsNGH0LXQvdC+LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisi0J/RltC00YLRgNC40LzQutC4INCy0YHRgtCw0L3QvtCy0LvQtdC90L3RjyDQvNC+0LbQu9C40LLQvtGB0YLRliDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4IMKrJXPCuyDQvdC1INC/0LXRgNC10LTQsdCw0YfQtdC90L4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ2NworbXNnaWQgIiIKKyJUaGUgaGFzX2pvdXJuYWwgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyLQnNC+0LbQu9C40LLRltGB0YLRjCBoYXNfam91cm5hbCDQvNC+0LbQvdCwINC30L3RltC80LDRgtC4LCDQu9C40YjQtSDRj9C60YnQviDRhNCw0LnQu9C+0LLRgyDRgdC40YHRgtC10LzRg1xuIgorItC00LXQvNC+0L3RgtC+0LLQsNC90L4g0LDQsdC+INC30LzQvtC90YLQvtCy0LDQvdC+INC70LjRiNC1INGDINGA0LXQttC40LzRliDRh9C40YLQsNC90L3Rjy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDc2Cittc2dpZCAiIgorIlRoZSBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldC4gIFBsZWFzZSBydW4gZTJmc2NrIGJlZm9yZSBjbGVhcmluZ1xuIgorInRoZSBoYXNfam91cm5hbCBmbGFnLlxuIgorbXNnc3RyICIiCisi0JLRgdGC0LDQvdC+0LLQu9C10L3QviDQv9GA0LDQv9C+0YDQtdGG0YwgbmVlZHNfcmVjb3ZlcnkuINCR0YPQtNGMINC70LDRgdC60LAsINC30LDQv9GD0YHRgtGW0YLRjCBlMmZzY2sg0LTQvlxuIgorItC30L3Rj9GC0YLRjyDQv9GA0LDQv9C+0YDRhtGPIGhhc19qb3VybmFsLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0OTUKK21zZ2lkICIiCisiU2V0dGluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJ3NwYXJzZV9zdXBlcicgbm90IHN1cHBvcnRlZFxuIgorImZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBtZXRhX2JnIGZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorItCU0LvRjyDRgdC40YHRgtC10Lwg0Lcg0YPQstGW0LzQutC90LXQvdC+0Y4g0LzQvtC20LvQuNCy0ZbRgdGC0Y4gbWV0YV9iZyDQstGB0YLQsNC90L7QstC70LXQvdC90Y8g0LzQvtC20LvQuNCy0L7RgdGC0ZZcbiIKKyLRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4IHNwYXJzZV9zdXBlciDQvdC1INC/0LXRgNC10LTQsdCw0YfQtdC90L4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUwOAorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbid0XG4iCisiYmUgc2V0IGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgb3JcbiIKKyJyZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyLQnNC+0LbQu9C40LLRltGB0YLRjCDQt9Cw0YXQuNGB0YLRgyDQstGW0LQg0L/QvtCy0YLQvtGA0L3QvtCz0L4g0LzQvtC90YLRg9Cy0LDQvdC90Y9cbiIKKyLQvdC1INC80L7QttC90LAg0LLQvNC40LrQsNGC0LgsINGP0LrRidC+INGE0LDQudC70L7QstGDINGB0LjRgdGC0LXQvNGDINC30LzQvtC90YLQvtCy0LDQvdC+XG4iCisi0LDQsdC+INCy0L7QvdCwINC/0LXRgNC10LHRg9Cy0LDRlCDRgyDRgNC10LbQuNC80ZYg0LvQuNGI0LUg0YfQuNGC0LDQvdC90Y8uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGhhcyBiZWVuIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWRzLlxuIgorbXNnc3RyICIiCisi0KPQstGW0LzQutC90LXQvdC+INC30LDRhdC40YHRgiDQstGW0LQg0L/QvtCy0YLQvtGA0L3QvtCz0L4g0LzQvtC90YLRg9Cy0LDQvdC90Y8g0Lcg0ZbQvdGC0LXRgNCy0LDQu9C+0Lwg0L7QvdC+0LLQu9C10L3QvdGPINGDICVkICIKKyLRgdC10LrRg9C90LQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUzNQorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbm5vdFxuIgorImJlIGRpc2FibGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIHJlYWRvbmx5LlxuIgorbXNnc3RyICIiCisi0JzQvtC20LvQuNCy0ZbRgdGC0Ywg0LfQsNGF0LjRgdGC0YMg0LLRltC0INC/0L7QstGC0L7RgNC90L7Qs9C+INC80L7QvdGC0YPQstCw0L3QvdGPINC90LUg0LzQvtC20L3QsFxuIgorItCy0LjQvNC60L3Rg9GC0LgsINGP0LrRidC+INGE0LDQudC70L7QstCwINGB0LjRgdGC0LXQvNCwINC/0YDQuNC00LDRgtC90LAg0LvQuNGI0LUg0LTQu9GPINC30LDQv9C40YHRgy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTQzCittc2dpZCAiRXJyb3Igd2hpbGUgcmVhZGluZyBiaXRtYXBzXG4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0YfQuNGC0LDQvdC90Y8g0LHRltGC0L7QstC40YUg0LrQsNGA0YJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hZ2ljIG51bWJlciBpbiBNTVAgYmxvY2sgZG9lcyBub3QgbWF0Y2guIGV4cGVjdGVkOiAleCwgYWN0dWFsOiAleFxuIgorbXNnc3RyICIiCisi0JrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAg0YMg0LHQu9C+0YbRliBNTVAg0ZQg0L3QtdCy0ZbQtNC/0L7QstGW0LTQvdC+0Y4uINCc0LDQu9C+INCx0YPRgtC4OiAleCwg0LzQsNGU0LzQvjogJXhcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTU3Cittc2dpZCAid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINGH0LjRgtCw0L3QvdGPINCx0LvQvtC60YMgTU1QLiIKKworIzogbWlzYy90dW5lMmZzLmM6NTg5Cittc2dpZCAiIgorIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgY2F1c2UgdGhlIHRoZSBmaWxlc3lzdGVtIHRvIGJlXG4iCisiaW5jb25zaXN0ZW50LlxuIgorbXNnc3RyICIiCisi0JfQvdGP0YLRgtGPINC/0YDQsNC/0L7RgNGG0Y8gZmxleF9iZyDQvNC+0LbQtSDQv9GA0LjQt9Cy0LXRgdGC0Lgg0LTQviDQstGC0YDQsNGC0Lgg0YbRltC70ZbRgdC90L7RgdGC0ZZcbiIKKyLRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2MDAKK21zZ2lkICIiCisiVGhlIGh1Z2VfZmlsZSBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorItCc0L7QttC70LjQstGW0YHRgtGMIGh1Z2VfZmlsZSDQvNC+0LbQvdCwINC30L3RltC80LDRgtC4LCDQu9C40YjQtSDRj9C60YnQviDRhNCw0LnQu9C+0LLRgyDRgdC40YHRgtC10LzRg1xuIgorItC00LXQvNC+0L3RgtC+0LLQsNC90L4g0LDQsdC+INC30LzQvtC90YLQvtCy0LDQvdC+INC70LjRiNC1INGDINGA0LXQttC40LzRliDRh9C40YLQsNC90L3Rjy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjYwCittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6ICdecXVvdGEnIG9wdGlvbiBvdmVycmlkZXMgJy1RJ2FyZ3VtZW50cy5cbiIKK21zZ3N0ciAiIgorIlxuIgorItCf0L7Qv9C10YDQtdC00LbQtdC90L3Rjzog0L/QsNGA0LDQvNC10YLRgCDCq15xdW90YcK7INC/0LXRgNC10LLQuNC30L3QsNGH0LDRlCDQsNGA0LPRg9C80LXQvdGC0LggwqstUcK7LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MDUKK21zZ2lkICJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBhIGpvdXJuYWwuXG4iCittc2dzdHIgItCd0LAg0YTQsNC50LvQvtCy0ZbQuSDRgdC40YHRgtC10LzRliDQstC20LUg0ZQg0LbRg9GA0L3QsNC7LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBvbiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiXHTQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQstGW0LTQutGA0LjRgtC4INC20YPRgNC90LDQuyDQvdCwICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIG9uIGRldmljZSAlczogIgorbXNnc3RyICLQodGC0LLQvtGA0Y7RlNC80L4g0LbRg9GA0L3QsNC7INC90LAg0L/RgNC40YHRgtGA0L7RlyAlczogIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgYWRkaW5nIGZpbGVzeXN0ZW0gdG8gam91cm5hbCBvbiAlcyIKK21zZ3N0ciAi0L/RltC0INGH0LDRgSDQtNC+0LTQsNCy0LDQvdC90Y8g0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCDQtNC+INC20YPRgNC90LDQu9GDINC90LAgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc0MworbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgaW5vZGU6ICIKK21zZ3N0ciAi0KHRgtCy0L7RgNGO0ZTQvNC+IGlub2RlINC20YPRgNC90LDQu9GDOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc1NworbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCBmaWxlIgorbXNnc3RyICIiCisiXG4iCisiXHTQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDRgdGC0LLQvtGA0LXQvdC90Y8g0YTQsNC50LvQsCDQttGD0YDQvdCw0LvRgyIKKworIzogbWlzYy90dW5lMmZzLmM6ODMyCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIHF1b3RhIG9wdGlvbnMhXG4iCittc2dzdHIgIiIKKyLQndC1INCy0LTQsNC70L7RgdGPINC+0YLRgNC40LzQsNGC0Lgg0L7QsdC70LDRgdGC0Ywg0L/QsNC84oCZ0Y/RgtGWINC00LvRjyDQvtCx0YDQvtCx0LrQuCDQv9Cw0YDQsNC80LXRgtGA0ZbQsiDQutCy0L7RgtGD0LLQsNC90L3RjyFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6ODU0Cittc2dpZCAiIgorIlxuIgorIkJhZCBxdW90YSBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJGb2xsb3dpbmcgdmFsaWQgcXVvdGEgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIChwYXNzIGJ5IHNlcGFyYXRpbmcgd2l0aCAiCisiY29tbWEpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQktC60LDQt9Cw0L3QviDQvdC10LrQvtGA0LXQutGC0L3RliDQv9Cw0YDQsNC80LXRgtGA0Lgg0LrQstC+0YLRg9Cy0LDQvdC90Y8uXG4iCisiXG4iCisi0JzQvtC20L3QsCDQstC40LrQvtGA0LjRgdGC0L7QstGD0LLQsNGC0Lgg0YLQsNC60ZYg0LrQvtGA0LXQutGC0L3RliDQv9Cw0YDQsNC80LXRgtGA0Lgg0LrQstC+0YLRg9Cy0LDQvdC90Y8gKNC/0YDQuCDQv9C10YDQtdC00LDQstCw0L3QvdGWICIKKyLRgdC70ZbQtCDQstGW0LTQvtC60YDQtdC80LvRjtCy0LDRgtC4INC60L7QvNCw0LzQuCk6XG4iCisiXHRbXl11c3JxdW90YVxuIgorIlx0W15dZ3JwcXVvdGFcbiIKKyJcbiIKKyJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHBhcnNlIGRhdGUvdGltZSBzcGVjaWZpZXI6ICVzIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC+0LHRgNC+0LHQuNGC0Lgg0YHQv9C10YbQuNGE0ZbQutCw0YLQvtGAINC00LDRgtC4L9GH0LDRgdGDOiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTQyIG1pc2MvdHVuZTJmcy5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbW91bnRzIGNvdW50IC0gJXMiCittc2dzdHIgItC/0L7QvNC40LvQutC+0LLQsCDQutGW0LvRjNC60ZbRgdGC0Ywg0LzQvtC90YLRg9Cy0LDQvdGMOiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBlcnJvciBiZWhhdmlvciAtICVzIgorbXNnc3RyICLQv9C+0LzQuNC70LrQvtCy0LAg0L/QvtCy0LXQtNGW0L3QutCwINGDINCy0ZbQtNC/0L7QstGW0LTRjCDQvdCwINC/0L7QvNC40LvQutGDOiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaWQvZ3JvdXAgbmFtZSAtICVzIgorbXNnc3RyICLQv9C+0LzQuNC70LrQvtCy0LjQuSDRltC00LXQvdGC0LjRhNGW0LrQsNGC0L7RgCDQsNCx0L4g0L3QsNC30LLQsCDQs9GA0YPQv9C4OiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW50ZXJ2YWwgLSAlcyIKK21zZ3N0ciAi0L/QvtC80LjQu9C60L7QstC40Lkg0ZbQvdGC0LXRgNCy0LDQuzogJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrIHJhdGlvIC0gJXMiCittc2dzdHIgItC/0L7QvNC40LvQutC+0LLQsCDRh9Cw0YHRgtC60LAg0LfQsNGA0LXQt9C10YDQstC+0LLQsNC90LjRhSDQsdC70L7QutGW0LI6ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDc1Cittc2dpZCAiLW8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1vINC80L7QttC90LAg0LLQutCw0LfRg9Cy0LDRgtC4INC70LjRiNC1INC+0LTQuNC9INGA0LDQtyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA4NAorbXNnaWQgIi1PIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICItTyDQvNC+0LbQvdCwINCy0LrQsNC30YPQstCw0YLQuCDQu9C40YjQtSDQvtC00LjQvSDRgNCw0LciCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrcyBjb3VudCAtICVzIgorbXNnc3RyICLQv9C+0LzQuNC70LrQvtCy0LAg0LrRltC70YzQutGW0YHRgtGMINC30LDRgNC10LfQtdGA0LLQvtCy0LDQvdC40YUg0LHQu9C+0LrRltCyOiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdWlkL3VzZXIgbmFtZSAtICVzIgorbXNnc3RyICLQv9C+0LzQuNC70LrQvtCy0LjQuSDRltC00LXQvdGC0LjRhNGW0LrQsNGC0L7RgCDQsNCx0L4g0ZbQvOKAmdGPINC60L7RgNC40YHRgtGD0LLQsNGH0LA6ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgItC/0L7QvNC40LvQutC+0LLQuNC5INGA0L7Qt9C80ZbRgCBpbm9kZTogJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5vZGUgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLSAlcyIKK21zZ3N0ciAi0KDQvtC30LzRltGAIGlub2RlINC80LDRlCDQsdGD0YLQuCDRgdGC0LXQv9C10L3QtdC8INC00LLRltC50LrQuDogJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibW1wX3VwZGF0ZV9pbnRlcnZhbCB0b28gYmlnOiAlbHVcbiIKK21zZ3N0ciAi0J3QsNC00YLQviDQstC10LvQuNC60LUg0LfQvdCw0YfQtdC90L3RjyBtbXBfdXBkYXRlX2ludGVydmFsOiAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0clswXSAiIgorItCS0YHRgtCw0L3QvtCy0LvQtdC90L3RjyDRltC90YLQtdGA0LLQsNC70YMg0L7QvdC+0LLQu9C10L3QvdGPINC30LDRhdC40YHRgtGDINCy0ZbQtCDQv9C+0LLRgtC+0YDQvdC+0LPQviDQvNC+0L3RgtGD0LLQsNC90L3RjyDRgyAlbHUgIgorItGB0LXQutGD0L3QtNGDXG4iCittc2dzdHJbMV0gIiIKKyLQktGB0YLQsNC90L7QstC70LXQvdC90Y8g0ZbQvdGC0LXRgNCy0LDQu9GDINC+0L3QvtCy0LvQtdC90L3RjyDQt9Cw0YXQuNGB0YLRgyDQstGW0LQg0L/QvtCy0YLQvtGA0L3QvtCz0L4g0LzQvtC90YLRg9Cy0LDQvdC90Y8g0YMgJWx1ICIKKyLRgdC10LrRg9C90LTQuFxuIgorbXNnc3RyWzJdICIiCisi0JLRgdGC0LDQvdC+0LLQu9C10L3QvdGPINGW0L3RgtC10YDQstCw0LvRgyDQvtC90L7QstC70LXQvdC90Y8g0LfQsNGF0LjRgdGC0YMg0LLRltC0INC/0L7QstGC0L7RgNC90L7Qs9C+INC80L7QvdGC0YPQstCw0L3QvdGPINGDICVsdSAiCisi0YHQtdC60YPQvdC0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlkZTogJXNcbiIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LUg0LfQvdCw0YfQtdC90L3RjyBzdHJpZGUgUkFJRDogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaXBlLXdpZHRoOiAlc1xuIgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QtSDQt9C90LDRh9C10L3QvdGPIHN0cmlwZS13aWR0aCBSQUlEOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaGFzaCBhbGdvcml0aG06ICVzXG4iCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdC40Lkg0LDQu9Cz0L7RgNC40YLQvCDRhdC10YjRg9Cy0LDQvdC90Y86IMKrJXPCu1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSB0byAlcyAoJWQpXG4iCittc2dzdHIgItCS0YHRgtCw0L3QvtCy0LvRjtGU0LzQviDRgtC40L/QvtCy0LjQuSDQsNC70LPQvtGA0LjRgtC8INGF0LXRiNGD0LLQsNC90L3RjyAlcyAoJWQpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMzEKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdGNsZWFyX21tcFxuIgorIlx0aGFzaF9hbGc9PGhhc2ggYWxnb3JpdGhtPlxuIgorIlx0bW91bnRfb3B0cz08ZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGNodW5rIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlX3dpZHRoPTxSQUlEIHN0cmlkZSpkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdF50ZXN0X2ZzXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQktC60LDQt9Cw0L3QviDQv9C+0LzQuNC70LrQvtCy0ZYg0L/QsNGA0LDQvNC10YLRgNC4LlxuIgorIlxuIgorItCg0L7Qt9GI0LjRgNC10L3RliDQv9Cw0YDQsNC80LXRgtGA0Lgg0YHQu9GW0LQg0LLRltC00L7QutGA0LXQvNC70Y7QstCw0YLQuCDQutC+0LzQsNC80LgsINC80L7QttC90LAg0LLRgdGC0LDQvdC+0LLQu9GO0LLQsNGC0LhcbiIKKyJcdNC30L3QsNGH0LXQvdC90Y8g0LDRgNCz0YPQvNC10L3RgtGW0LIg0LfQsCDQtNC+0L/QvtC80L7Qs9C+0Y4g0LfQvdCw0LrQsCDRgNGW0LLQvdC+0YHRgtGWICjCqz3CuykuXG4iCisiXG4iCisi0JzQvtC20LvQuNCy0ZYg0YDQvtC30YjQuNGA0LXQvdGWINC/0LDRgNCw0LzQtdGC0YDQuDpcbiIKKyJcdGNsZWFyX21tcFxuIgorIlx0aGFzaF9hbGc9PNCw0LvQs9C+0YDQuNGC0Lwg0YXQtdGI0YPQstCw0L3QvdGPPlxuIgorIlx0bW91bnRfb3B0cz080YDQvtC30YjQuNGA0LXQvdGWINGC0LjQv9C+0LLRliDQv9Cw0YDQsNC80LXRgtGA0Lgg0LzQvtC90YLRg9Cy0LDQvdC90Y8+XG4iCisiXHRzdHJpZGU9PNGA0L7Qt9C80ZbRgCDRhNGA0LDQs9C80LXQvdGC0LAgUkFJRCDQvdCwINC+0LrRgNC10LzQvtC80YMg0LTQuNGB0LrRgyDRgyDQsdC70L7QutCw0YU+XG4iCisiXHRzdHJpcGVfd2lkdGg9PNGB0YLRgNCw0LnQtCBSQUlEKtC00LjRgdC60Lgg0LTQsNC90LjRhSDRgyDQsdC70L7QutCw0YU+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzk4Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgaW5vZGUgYml0bWFwXG4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L/RgNC+0YfQuNGC0LDRgtC4INCx0ZbRgtC+0LLRgyDQutCw0YDRgtGDIGlub2RlXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MDMKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBibG9jayBiaXRtYXBcbiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQv9GA0L7Rh9C40YLQsNGC0Lgg0LHRltGC0L7QstGDINC60LDRgNGC0YMg0LHQu9C+0LrRltCyXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjAgcmVzaXplL3Jlc2l6ZTJmcy5jOjkzMQorbXNnaWQgImJsb2NrcyB0byBiZSBtb3ZlZCIKK21zZ3N0ciAi0LHQu9C+0LrQuCwg0Y/QutGWINCx0YPQtNC1INC/0LXRgNC10YHRg9C90YPRgtC+IgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODIzCittc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrIGJpdG1hcCB3aGVuIGluY3JlYXNpbmcgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICIiCisi0J3QtSDQstC00LDQu9C+0YHRjyDRgNC+0LfQvNGW0YHRgtC40YLQuCDQsdGW0YLQvtCy0YMg0LrQsNGA0YLRgyDQsdC70L7QutGW0LIg0L/RltC0INGH0LDRgSDQt9Cx0ZbQu9GM0YjQtdC90L3RjyDRgNC+0LfQvNGW0YDRltCyIGlub2RlXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjkKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGluY3JlYXNlIGlub2RlIHNpemUgXG4iCittc2dzdHIgItCd0LXQtNC+0YHRgtCw0YLQvdGM0L4g0L/RgNC+0YHRgtC+0YDRgyDQtNC70Y8g0LfQsdGW0LvRjNGI0LXQvdC90Y8g0YDQvtC30LzRltGA0YMgaW5vZGVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgzNAorbXNnaWQgIkZhaWxlZCB0byByZWxvY2F0ZSBibG9ja3MgZHVyaW5nIGlub2RlIHJlc2l6ZSBcbiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQv9C10YDQtdGB0YPQvdGD0YLQuCDQsdC70L7QutC4INC/0ZbQtCDRh9Cw0YEg0LfQvNGW0L3QuCDRgNC+0LfQvNGW0YDRltCyIGlub2RlIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODY2Cittc2dpZCAiIgorIkVycm9yIGluIHJlc2l6aW5nIHRoZSBpbm9kZSBzaXplLlxuIgorIlJ1biBlMnVuZG8gdG8gdW5kbyB0aGUgZmlsZSBzeXN0ZW0gY2hhbmdlcy4gXG4iCittc2dzdHIgIiIKKyLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINC30LzRltC90Lgg0YDQvtC30LzRltGA0ZbQsiBpbm9kZS5cbiIKKyLQl9Cw0L/Rg9GB0YLRltGC0YwgZTJ1bmRvINC00LvRjyDRgdC60LDRgdGD0LLQsNC90L3RjyDQt9C80ZbQvSwg0LLQvdC10YHQtdC90LjRhSDQtNC+INGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LguIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODkzCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZGIgZmlsZW5hbWVcbiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQvtGC0YDQuNC80LDRgtC4INC+0LHQu9Cw0YHRgtGMINC/0LDQvOKAmdGP0YLRliDQtNC70Y8g0LfQsdC10YDRltCz0LDQvdC90Y8g0L3QsNC30LLQuCDRhNCw0LnQu9CwIHRkYlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZWxldGUgJXMiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INCy0LjQu9GD0YfQuNGC0LggJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIHVuZG8gdGhlIHR1bmUyZnMgb3BlcmF0aW9uIHBsZWFzZSBydW4gdGhlIGNvbW1hbmRcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyLQlNC70Y8g0YHQutCw0YHRg9Cy0LDQvdC90Y8g0LTRltGXIHR1bmUyZnMsINCx0YPQtNGMINC70LDRgdC60LAsINCy0ZbQtNC00LDQudGC0LUg0LrQvtC80LDQvdC00YNcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBibG9jayBtYWdpYyBpcyBiYWQuIFRyeSB0byBmaXggaXQgYnkgcnVubmluZzpcbiIKKyInZTJmc2NrIC1mICVzJ1xuIgorbXNnc3RyICIiCisi0JrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAg0LHQu9C+0LrRgyBNTVAg0LLQutCw0LfRg9GUINC90LAg0L/QvtGI0LrQvtC00LbQtdC90ZbRgdGC0YwuINCh0L/RgNC+0LHRg9C50YLQtSDQstC40L/RgNCw0LLQuNGC0Lgg0YbQtSDQt9CwICIKKyLQtNC+0L/QvtC80L7Qs9C+0Y4g0LrQvtC80LDQvdC00Lg6XG4iCisiwqtlMmZzY2sgLWYgJXPCu1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIGlzIGFscmVhZHkgJWx1XG4iCittc2dzdHIgItCg0L7Qt9C80ZbRgNC+0LwgaW5vZGUg0YPQttC1INGUICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDgxCittc2dpZCAiU2hyaW5raW5nIGlub2RlIHNpemUgaXMgbm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICLQn9GW0LTRgtGA0LjQvNC60Lgg0LfQvNC10L3RiNC10L3QvdGPINGA0L7Qt9C80ZbRgNGW0LIgaW5vZGUg0L3QtSDQv9C10YDQtdC00LHQsNGH0LXQvdC+XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpbm9kZSBzaXplICVsdSAobWF4ICVkKVxuIgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QuNC5INGA0L7Qt9C80ZbRgCBpbm9kZSAlbHUgKNC80LDQutGB0LjQvNCw0LvRjNC90LjQvCDRlCAlZClcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAi0JLRgdGC0LDQvdC+0LLQu9GO0ZTQvNC+INC30L3QsNGH0LXQvdC90Y8g0LzQsNC60YHQuNC80LDQu9GM0L3QvtGXINC60ZbQu9GM0LrQvtGB0YLRliDQvNC+0L3RgtGD0LLQsNC90YwgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGN1cnJlbnQgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAi0JLRgdGC0LDQvdC+0LLQu9GO0ZTQvNC+INC/0L7RgtC+0YfQvdGDINC60ZbQu9GM0LrRltGB0YLRjCDQvNC+0L3RgtGD0LLQsNC90Ywg0YMg0LfQvdCw0YfQtdC90L3RjyAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXJyb3IgYmVoYXZpb3IgdG8gJWRcbiIKK21zZ3N0ciAi0JLRgdGC0LDQvdC+0LLQu9GO0ZTQvNC+INGA0LXQttC40Lwg0L/QvtCy0LXQtNGW0L3QutC4INGDINCy0ZbQtNC/0L7QstGW0LTRjCDQvdCwINC/0L7QvNC40LvQutGDICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgZ2lkIHRvICVsdVxuIgorbXNnc3RyICLQktGB0YLQsNC90L7QstC70Y7RlNC80L4gZ2lkINC00LvRjyDQt9Cw0YDQtdC30LXRgNCy0L7QstCw0L3QuNGFINCx0LvQvtC60ZbQsiDRgyDQt9C90LDRh9C10L3QvdGPICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgItGW0L3RgtC10YDQstCw0Lsg0LzRltC2INC/0LXRgNC10LLRltGA0LrQsNC80Lgg0ZQg0L3QsNC00YLQviDQstC10LvQuNC60LjQvCAoJWx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGludGVydmFsIGJldHdlZW4gY2hlY2tzIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHIgItCS0YHRgtCw0L3QvtCy0LvRjtGU0LzQviDRltC90YLQtdGA0LLQsNC7INC80ZbQtiDQv9C10YDQtdCy0ZbRgNC60LDQvNC4INGDICVsdSDRgdC10LrRg9C90LRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50YWdlIHRvICVnJSUgKCVsbHUgYmxvY2tzKVxuIgorbXNnc3RyICLQktGB0YLQsNC90L7QstC70Y7RlNC80L4g0YfQsNGB0YLRgyDQt9Cw0YDQtdC30LXRgNCy0L7QstCw0L3QuNGFINCx0LvQvtC60ZbQsiAlZyUlICglbGx1INCx0LvQvtC60ZbQsilcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MgY291bnQgaXMgdG9vIGJpZyAoJWxsdSkiCittc2dzdHIgItC60ZbQu9GM0LrRltGB0YLRjCDQt9Cw0YDQtdC30LXRgNCy0L7QstCw0L3QuNGFINCx0LvQvtC60ZbQsiDRlCDQvdCw0LTRgtC+INCy0LXQu9C40LrQvtGOICglbGx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgItCS0YHRgtCw0L3QvtCy0LvRjtGU0LzQviDQutGW0LvRjNC60ZbRgdGC0Ywg0LfQsNGA0LXQt9C10YDQstC+0LLQsNC90LjRhSDQsdC70L7QutGW0LIg0YMgJWxsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTg3Cittc2dpZCAiIgorIlxuIgorIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSBzdXBlcmJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorItCh0YPQv9C10YDQsdC70L7QutC4INGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80Lgg0LLQttC1INGA0L7Qt9GA0ZbQtNC20LXQvdC+LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTkxCittc2dpZCAiIgorIlxuIgorIlNldHRpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZFxuIgorImZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBtZXRhX2JnIGZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorItCU0LvRjyDRgdC40YHRgtC10Lwg0Lcg0YPQstGW0LzQutC90LXQvdC+0Y4g0LzQvtC20LvQuNCy0ZbRgdGC0Y4gbWV0YV9iZyDQstGB0YLQsNC90L7QstC70LXQvdC90Y9cbiIKKyLQv9GA0LDQv9C+0YDRhtGPINGA0L7Qt9GA0ZbQtNC20LXQvdC40YUg0YHRg9C/0LXRgNCx0LvQvtC60ZbQsiDQvdC1INC/0LXRgNC10LTQsdCw0YfQtdC90L4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgc2V0LiAgJXMiCittc2dzdHIgIiIKKyJcbiIKKyLQktGB0YLQsNC90L7QstC70LXQvdC+INC/0YDQsNC/0L7RgNC10YbRjCDRgNC+0LfRgNGW0LTQttC10L3QvdGPINGB0YPQv9C10YDQsdC70L7QutGW0LIuICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjA3Cittc2dpZCAiIgorIlxuIgorIkNsZWFyaW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQn9GW0LTRgtGA0LjQvNC60Lgg0LfQvdGP0YLRgtGPINC/0YDQsNC/0L7RgNGG0Y8g0YDQvtC30YDRltC00LbQtdC90L3RjyDRgdGD0L/QtdGA0LHQu9C+0LrRltCyINC90LUg0L/QtdGA0LXQtNCx0LDRh9C10L3Qvi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHRpbWUgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdG8gJXNcbiIKK21zZ3N0ciAi0JLRgdGC0LDQvdC+0LLQu9GO0ZTQvNC+INGH0LDRgSDQvtGB0YLQsNC90L3RjNC+0Zcg0L/QtdGA0LXQstGW0YDQutC4INGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80Lgg0YMg0LfQvdCw0YfQtdC90L3RjyAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHVpZCB0byAlbHVcbiIKK21zZ3N0ciAi0JLRgdGC0LDQvdC+0LLQu9GO0ZTQvNC+IHVpZCDQtNC70Y8g0LfQsNGA0LXQt9C10YDQstC+0LLQsNC90LjRhSDQsdC70L7QutGW0LIg0YMg0LfQvdCw0YfQtdC90L3RjyAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI1MworbXNnaWQgIkVycm9yIGluIHVzaW5nIGNsZWFyX21tcC4gSXQgbXVzdCBiZSB1c2VkIHdpdGggLWZcbiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAg0YMg0LLQuNC60L7RgNC40YHRgtCw0L3QvdGWIGNsZWFyX21tcC4g0KHQu9GW0LQg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INC3IC1mXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNzEKK21zZ2lkICIiCisiVGhlIHF1b3RhIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorItCX0LzRltC90Y7QstCw0YLQuCDQt9C90LDRh9C10L3QvdGPINGG0ZbRlNGXINC80L7QttC70LjQstC+0YHRgtGWINC+0LHQvNC10LbQtdC90L3RjyDQutCy0L7RgtC4INC80L7QttC90LAsINC70LjRiNC1INGP0LrRidC+INGE0LDQudC70L7QstGDICIKKyLRgdC40YHRgtC10LzRgyDQtNC10LzQvtC90YLQvtCy0LDQvdC+LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjkyCittc2dpZCAiVGhlIFVVSUQgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAi0JfQvNGW0L3RjtCy0LDRgtC4IFVVSUQg0LzQvtC20L3QsCwg0LvQuNGI0LUg0Y/QutGJ0L4g0YTQsNC50LvQvtCy0YMg0YHQuNGB0YLQtdC80YMg0LTQtdC80L7QvdGC0L7QstCw0L3Qvi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjMyMgorbXNnaWQgIkludmFsaWQgVVVJRCBmb3JtYXRcbiIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LjQuSDRhNC+0YDQvNCw0YIgVVVJRFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzM3Cittc2dpZCAiTmVlZCB0byB1cGRhdGUgam91cm5hbCBzdXBlcmJsb2NrLlxuIgorbXNnc3RyICLQodC70ZbQtCDQvtC90L7QstC40YLQuCDRgdGD0L/QtdGA0LHQu9C+0Log0LbRg9GA0L3QsNC70YMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNTgKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICLQl9C80ZbQvdGO0LLQsNGC0Lgg0YDQvtC30LzRltGAIGlub2RlINC80L7QttC90LAsINC70LjRiNC1INGP0LrRidC+INGE0LDQudC70L7QstGDINGB0LjRgdGC0LXQvNGDINC00LXQvNC+0L3RgtC+0LLQsNC90L4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNjYKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIGlub2RlIHNpemUgbm90IHN1cHBvcnRlZCBmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgZmxleF9iZ1xuIgorImZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorItCf0ZbQtNGC0YDQuNC80LrQuCDQt9C80ZbQvdC4INGA0L7Qt9C80ZbRgNGW0LIgaW5vZGUgc2l6ZSDQtNC70Y8g0YTQsNC50LvQvtCy0LjRhSDRgdC40YHRgtC10Lwg0Lcg0YPQstGW0LzQutC90LXQvdC+0Y4gIgorItC80L7QttC70LjQstGW0YHRgtGOIGZsZXhfYmdcbiIKKyLQvdC1INC/0LXRgNC10LTQsdCw0YfQtdC90L4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbm9kZSBzaXplICVsdVxuIgorbXNnc3RyICLQktGB0YLQsNC90L7QstC70Y7RlNC80L4g0YDQvtC30LzRltGAIGlub2RlINGDICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzgyCittc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBpbm9kZSBzaXplXG4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LfQvNGW0L3QuNGC0Lgg0YDQvtC30LzRltGAIGlub2RlXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdHJpZGUgc2l6ZSB0byAlZFxuIgorbXNnc3RyICLQktGB0YLQsNC90L7QstC70Y7RlNC80L4g0YDQvtC30LzRltGAIHN0cmlkZSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaXBlIHdpZHRoIHRvICVkXG4iCittc2dzdHIgItCS0YHRgtCw0L3QvtCy0LvRjtGU0LzQviDRiNC40YDQuNC90YMgc3RyaXBlICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnMgdG8gJyVzJ1xuIgorbXNnc3RyICIiCisi0JLRgdGC0LDQvdC+0LLQu9GO0ZTQvNC+INC00LvRjyDRgNC+0LfRiNC40YDQtdC90LjRhSDRgtC40L/QvtCy0LjRhSDQv9Cw0YDQsNC80LXRgtGA0ZbQsiDQvNC+0L3RgtGD0LLQsNC90L3RjyDQt9C90LDRh9C10L3QvdGPIMKrJXPCu1xuIgorCisjOiBtaXNjL3V0aWwuYzo5MworbXNnaWQgIjxwcm9jZWVkaW5nPlxuIgorbXNnc3RyICI80L/RgNC+0LTQvtCy0LbQtdC90L3Rjz5cbiIKKworIzogbWlzYy91dGlsLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJvY2VlZCBhbnl3YXkgKG9yIHdhaXQgJWQgc2Vjb25kcykgPyAoeSxuKSAiCittc2dzdHIgItCf0YDQvtC00L7QstC20YPQstCw0YLQuCAo0YfQuCDQt9Cw0YfQtdC60LDRgtC4ICVkINGB0LXQutGD0L3QtCk/ICh5IC0g0YLQsNC6LCBuIC0g0L3RlikgIgorCisjOiBtaXNjL3V0aWwuYzoxMDEKK21zZ2lkICJQcm9jZWVkIGFueXdheT8gKHksbikgIgorbXNnc3RyICLQn9GA0L7QtNC+0LLQttGD0LLQsNGC0Lg/ICh5IC0g0YLQsNC6LCBuIC0g0L3RlikgIgorCisjOiBtaXNjL3V0aWwuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vdW50ZWQgb24gJXMgb24gJXMiCittc2dzdHIgIlx00LLQvtGB0YLQsNC90L3RlCDQt9C80L7QvdGC0L7QstCw0L3QviAlcywgJXMiCisKKyM6IG1pc2MvdXRpbC5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW91bnRlZCBvbiAlcyIKK21zZ3N0ciAiXHTQstC+0YHRgtCw0L3QvdGUINC30LzQvtC90YLQvtCy0LDQvdC+ICVzIgorCisjOiBtaXNjL3V0aWwuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRjcmVhdGVkIG9uICVzIgorbXNnc3RyICJcdNGB0YLQstC+0YDQtdC90L4gJXMiCisKKyM6IG1pc2MvdXRpbC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW9kaWZpZWQgb24gJXMiCittc2dzdHIgIlx00LLQvtGB0YLQsNC90L3RlCDQt9C80ZbQvdC10L3QviAlcyIKKworIzogbWlzYy91dGlsLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvdW5kIGEgJXMgcGFydGl0aW9uIHRhYmxlIGluICVzXG4iCittc2dzdHIgItCX0L3QsNC50LTQtdC90L4g0YLQsNCx0LvQuNGG0Y4g0YDQvtC30LTRltC70ZbQsiAlcyDRgyAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGZpbGUgJXMgZG9lcyBub3QgZXhpc3QgYW5kIG5vIHNpemUgd2FzIHNwZWNpZmllZC5cbiIKK21zZ3N0ciAi0KTQsNC50LvQsCAlcyDQvdC1INGW0YHQvdGD0ZQsINCwINGA0L7Qt9C80ZbRgCDQvdC1INCx0YPQu9C+INCy0LrQsNC30LDQvdC+LlxuIgorCisjOiBtaXNjL3V0aWwuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgcmVndWxhciBmaWxlICVzXG4iCittc2dzdHIgItCh0YLQstC+0YDRjtGU0LzQviDQt9Cy0LjRh9Cw0LnQvdC40Lkg0YTQsNC50LsgJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINCy0ZbQtNC60YDQuNGC0LggJXM6ICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIxNgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZGV2aWNlIGFwcGFyZW50bHkgZG9lcyBub3QgZXhpc3Q7IGRpZCB5b3Ugc3BlY2lmeSBpdCBjb3JyZWN0bHk/XG4iCittc2dzdHIgIiIKKyJcbiIKKyLQmdC80L7QstGW0YDQvdC+LCDQv9GA0LjRgdGC0YDQvtGOINC90LUg0ZbRgdC90YPRlC4g0KfQuCDQv9GA0LDQstC40LvRjNC90L4g0LLQuCDQudC+0LPQviDQstC60LDQt9Cw0LvQuD9cbiIKKworIzogbWlzYy91dGlsLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGJsb2NrIHNwZWNpYWwgZGV2aWNlLlxuIgorbXNnc3RyICIlcyDQvdC1INGUINCx0LvQvtC60L7QstC40Lwg0YHQv9C10YbRltCw0LvRjNC90LjQvCDQv9GA0LjRgdGC0YDQvtGU0LwuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjb250YWlucyBhICVzIGZpbGUgc3lzdGVtIGxhYmVsbGVkICclcydcbiIKK21zZ3N0ciAiJXMg0LzRltGB0YLQuNGC0Ywg0YTQsNC50LvQvtCy0YMg0YHQuNGB0YLQtdC80YMgJXMg0Lcg0LzRltGC0LrQvtGOICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjb250YWlucyBhICVzIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgIiVzINC80ZbRgdC40YLRjCDRhNCw0LnQu9C+0LLRgyDRgdC40YHRgtC10LzRgyAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgZW50aXJlIGRldmljZSwgbm90IGp1c3Qgb25lIHBhcnRpdGlvbiFcbiIKK21zZ3N0ciAiJXMg0ZQg0YbRltC70LjQvCDQv9GA0LjRgdGC0YDQvtGU0LwsINCwINC90LUg0LvQuNGI0LUg0L7QtNC90LjQvCDRgNC+0LfQtNGW0LvQvtC8IVxuIgorCisjOiBtaXNjL3V0aWwuYzozMjMKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiIgorItCf0YDQuNC80YPRgdC+0LLQtSDQstC40LrQvtC90LDQvdC90Y8gbWtlMmZzLiDQodC/0L7QtNGW0LLQsNGU0LzQvtGB0Y8sINGJ0L4gL2V0Yy9tdGFiINC80ZbRgdGC0LjRgtGMINC/0L7QvNC40LvQutC4LlxuIgorCisjOiBtaXNjL3V0aWwuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgbWFrZSBhICVzIGhlcmUhXG4iCittc2dzdHIgItC90LUg0YHRgtCy0L7RgNGO0LLQsNGC0LjQvNC1ICVzINGC0YPRgiFcbiIKKworIzogbWlzYy91dGlsLmM6MzM1Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgItCf0YDQuNC80YPRgdC+0LLQtSDQstC40LrQvtC90LDQvdC90Y8gbWtlMmZzLlxuIgorCisjOiBtaXNjL3V0aWwuYzozNTEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugam91cm5hbCBvcHRpb25zIVxuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC+0YLRgNC40LzQsNGC0Lgg0L7QsdC70LDRgdGC0Ywg0L/QsNC84oCZ0Y/RgtGWINC00LvRjyDQvtCx0YDQvtCx0LrQuCDQv9Cw0YDQsNC80LXRgtGA0ZbQsiDQttGD0YDQvdCw0LvRgyFcbiIKKworIzogbWlzYy91dGlsLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3QgZmluZCBqb3VybmFsIGRldmljZSBtYXRjaGluZyAlc1xuIgorbXNnc3RyICIiCisiXG4iCisi0J3QtSDQstC00LDQu9C+0YHRjyDQt9C90LDQudGC0Lgg0L/RgNC40YHRgtGA0ZbQuSDQttGD0YDQvdCw0LvRgywg0YnQviDQstGW0LTQv9C+0LLRltC00LDRlCDQstC60LDQt9Cw0L3QvtC80YMgJXNcbiIKKworIzogbWlzYy91dGlsLmM6NDAzCittc2dpZCAiIgorIlxuIgorIkJhZCBqb3VybmFsIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkpvdXJuYWwgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGpvdXJuYWwgb3B0aW9ucyBhcmU6XG4iCisiXHRzaXplPTxqb3VybmFsIHNpemUgaW4gbWVnYWJ5dGVzPlxuIgorIlx0ZGV2aWNlPTxqb3VybmFsIGRldmljZT5cbiIKKyJcdGxvY2F0aW9uPTxqb3VybmFsIGxvY2F0aW9uPlxuIgorIlxuIgorIlRoZSBqb3VybmFsIHNpemUgbXVzdCBiZSBiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGZpbGVzeXN0ZW0gYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisi0JLQutCw0LfQsNC90L4g0L/QvtC80LjQu9C60L7QstGWINC/0LDRgNCw0LzQtdGC0YDQuCDQttGD0YDQvdCw0LvRgy5cbiIKKyJcbiIKKyLQn9Cw0YDQsNC80LXRgtGA0Lgg0LbRg9GA0L3QsNC70YMg0LLRltC00L7QutGA0LXQvNC70Y7RjtGC0YzRgdGPINC60L7QvNCw0LzQuCDRliDQvNC+0LbRg9GC0Ywg0L/RgNC40LnQvNCw0YLQuCDQsNGA0LPRg9C80LXQvdGC0LgsXG4iCisiXHTRj9C60ZYg0LLRgdGC0LDQvdC+0LLQu9GO0Y7RgtGM0YHRjyDQt9CwINC00L7Qv9C+0LzQvtCz0L7RjiDRgdC40LzQstC+0LvRgyDRgNGW0LLQvdC+0YHRgtGWICjCqz3CuykuXG4iCisiXG4iCisi0JrQvtGA0LXQutGC0L3RliDQv9Cw0YDQsNC80LXRgtGA0Lgg0LbRg9GA0L3QsNC70YM6XG4iCisiXHRzaXplPTzRgNC+0LfQvNGW0YAg0LbRg9GA0L3QsNC70YMg0YMg0LzQtdCz0LDQsdCw0LnRgtCw0YU+XG4iCisiXHRkZXZpY2U9PNC/0YDQuNGB0YLRgNGW0Lkg0LbRg9GA0L3QsNC70Y7QstCw0L3QvdGPPlxuIgorIlx0bG9jYXRpb249PNGA0L7Qt9GC0LDRiNGD0LLQsNC90L3RjyDQttGD0YDQvdCw0LvRgz5cbiIKKyJcbiIKKyLQoNC+0LfQvNGW0YAg0LbRg9GA0L3QsNC70YMg0LzQsNGUINC90LDQu9C10LbQsNGC0Lgg0LTRltCw0L/QsNC30L7QvdGDINCy0ZbQtCAxMDI0INC00L4gMTAyNDAwMDAg0LHQu9C+0LrRltCyINGE0LDQudC70L7QstC+0ZcgIgorItGB0LjRgdGC0LXQvNC4LlxuIgorIlxuIgorCisjOiBtaXNjL3V0aWwuYzo0MzQKK21zZ2lkICIiCisiXG4iCisiRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIgorbXNnc3RyICIiCisiXG4iCisi0KTQsNC50LvQvtCy0LAg0YHQuNGB0YLQtdC80LAg0L3QsNC00YLQviDQvNCw0LvQsCDQtNC70Y8g0LbRg9GA0L3QsNC70Y7QstCw0L3QvdGPXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVGhlIHJlcXVlc3RlZCBqb3VybmFsIHNpemUgaXMgJWQgYmxvY2tzOyBpdCBtdXN0IGJlXG4iCisiYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBibG9ja3MuICBBYm9ydGluZy5cbiIKK21zZ3N0ciAiIgorIlxuIgorItCg0L7Qt9C80ZbRgCDQttGD0YDQvdCw0LvRgywg0L3QsCDRj9C60LjQuSDQvdCw0LTRltC50YjQvtCyINC30LDQv9C40YIsINC00L7RgNGW0LLQvdGO0ZQgJWQg0LHQu9C+0LrQsNC8O1xuIgorItGA0L7Qt9C80ZbRgNC4INC80LDRjtGC0Ywg0L3QsNC70LXQttCw0YLQuCDQtNGW0LDQv9Cw0LfQvtC90YMg0LLRltC0IDEwMjQg0LTQviAxMDI0MDAwMCDQsdC70L7QutGW0LIuXG4iCisi0J/QtdGA0LXRgNC40LLQsNGU0LzQviDQvtCx0YDQvtCx0LrRgy5cbiIKKworIzogbWlzYy91dGlsLmM6NDQ5Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgc2l6ZSB0b28gYmlnIGZvciBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiXG4iCisi0KDQvtC30LzRltGAINC20YPRgNC90LDQu9GDINGUINC90LDQtNGC0L4g0LLQtdC70LjQutC40Lwg0LTQu9GPINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LguXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBmaWxlc3lzdGVtIHdpbGwgYmUgYXV0b21hdGljYWxseSBjaGVja2VkIGV2ZXJ5ICVkIG1vdW50cyBvclxuIgorIiVnIGRheXMsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gIFVzZSB0dW5lMmZzIC1jIG9yIC1pIHRvIG92ZXJyaWRlLlxuIgorbXNnc3RyICIiCisi0J/QtdGA0LXQstGW0YDQutCwINGG0ZbRlNGXINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80Lgg0LLQuNC60L7QvdGD0LLQsNGC0LjQvNC10YLRjNGB0Y8g0LrQvtC20L3RliAlZCDQvNC+0L3RgtGD0LLQsNC90Ywg0LDQsdC+XG4iCisiJWcg0LTQvdGW0LIsINGJ0L7QudC90L4g0LHRg9C00LUg0LTQvtGB0Y/Qs9C90YPRgtC+INC+0LTQvdC+0LPQviDQtyDRhtC40YUg0L7QsdC80LXQttC10L3RjC4g0J/QtdGA0LXQstC40LfQvdCw0YfQuNGC0LhcbiIKKyLRhtGWINC/0LDRgNCw0LzQtdGC0YDQuCDQvNC+0LbQvdCwINC30LAg0LTQvtC/0L7QvNC+0LPQvtGOIHR1bmUyZnMgLWMg0LDQsdC+IC1pLlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstZF0gWy1wIHBpZGZpbGVdIFstcyBzb2NrZXRwYXRoXSBbLVQgdGltZW91dF1cbiIKK21zZ3N0ciAiIgorItCa0L7RgNC40YHRgtGD0LLQsNC90L3RjzogJXMgWy1kXSBbLXAg0YTQsNC50LtfcGlkXSBbLXMg0YjQu9GP0YVf0LTQvl/RgdC+0LrQtdGC0LBdIFstVCDRh9Cw0YFf0L7Rh9GW0LrRg9Cy0LDQvdC90Y9dXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgWy1yfHRdIFstbiBudW1dIFstcyBzb2NrZXRwYXRoXVxuIgorbXNnc3RyICIgICAgICAgJXMgWy1yfHRdIFstbiDRh9C40YHQu9C+XSBbLXMg0YjQu9GP0YUg0LTQviDRgdC+0LrQtdGC0LBdXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiICAgICAgICVzIC1rXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoxNTUKK21zZ2lkICJiYWQgYXJndW1lbnRzIgorbXNnc3RyICLQv9C+0LzQuNC70LrQvtCy0ZYg0L/QsNGA0LDQvNC10YLRgNC4IgorCisjOiBtaXNjL3V1aWRkLmM6MTczCittc2dpZCAiY29ubmVjdCIKK21zZ3N0ciAi0Lcn0ZTQtNC90LDQvdC90Y8iCisKKyM6IG1pc2MvdXVpZGQuYzoxOTIKK21zZ2lkICJ3cml0ZSIKK21zZ3N0ciAi0LfQsNC/0LjRgSIKKworIzogbWlzYy91dWlkZC5jOjIwMAorbXNnaWQgInJlYWQgY291bnQiCittc2dzdHIgItC60ZbQu9GM0LrRltGB0YLRjCDRh9C40YLQsNC90YwiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDYKK21zZ2lkICJiYWQgcmVzcG9uc2UgbGVuZ3RoIgorbXNnc3RyICLQv9C+0LzQuNC70LrQvtCy0LAg0LTQvtCy0LbQuNC90LAg0LLRltC00L/QvtCy0ZbQtNGWIgorCisjOiBtaXNjL3V1aWRkLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInV1aWRkIGRhZW1vbiBhbHJlYWR5IHJ1bm5pbmcgYXQgcGlkICVzXG4iCittc2dzdHIgItGE0L7QvdC+0LLRgyDRgdC70YPQttCx0YMgdXVpZGQg0LLQttC1INC30LDQv9GD0YnQtdC90L4g0LcgcGlkICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY3JlYXRlIHVuaXggc3RyZWFtIHNvY2tldDogJXMiCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0YHRgtCy0L7RgNC40YLQuCDRgdC+0LrQtdGCINC/0L7RgtC+0LrRgyDQtNCw0L3QuNGFIFVOSVg6ICVzIgorCisjOiBtaXNjL3V1aWRkLmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGJpbmQgdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L/RgNC40LLigJnRj9C30LDRgtC40YHRjyDQtNC+INGB0L7QutC10YLQsCB1bml4ICVzOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxpc3RlbiBvbiB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQv9C+0YfQsNGC0Lgg0L7Rh9GW0LrRg9Cy0LDQvdC90Y8g0LTQsNC90LjRhSDQvdCwINGB0L7QutC10YLRliB1bml4ICVzOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgZnJvbSBjbGllbnQsIGxlbiA9ICVkXG4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0YfQuNGC0LDQvdC90Y8g0Lcg0LrQu9GW0ZTQvdGC0LAsINC00L7QstC20LjQvdCwID0gJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVyYXRpb24gJWQsIGluY29taW5nIG51bSA9ICVkXG4iCittc2dzdHIgItC+0L/QtdGA0LDRhtGW0Y8gJWQsINCy0YXRltC00L3QtSDRh9C40YHQu9C+ID0gJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEOiAlc1xuIgorbXNnc3RyICLQodGC0LLQvtGA0LXQvdC40Lkg0L3QsCDQvtGB0L3QvtCy0ZYg0YfQsNGB0YMgVVVJRDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgcmFuZG9tIFVVSUQ6ICVzXG4iCittc2dzdHIgItCh0YLQstC+0YDQtdC90LjQuSDQv9GB0LXQstC00L7QstC40L/QsNC00LrQvtCy0LjQuSBVVUlEOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCAlZCBzdWJzZXF1ZW50IFVVSURzXG4iCittc2dzdHJbMF0gItCh0YLQstC+0YDQtdC90L4g0YfQsNGB0L7QstC40LkgVVVJRCAlcyDRliAlZCDQv9C+0YHQu9GW0LTQvtCy0L3QuNC5IFVVSURcbiIKK21zZ3N0clsxXSAi0KHRgtCy0L7RgNC10L3QviDRh9Cw0YHQvtCy0LjQuSBVVUlEICVzINGWICVkINC/0L7RgdC70ZbQtNC+0LLQvdC40YUgVVVJRFxuIgorbXNnc3RyWzJdICLQodGC0LLQvtGA0LXQvdC+INGH0LDRgdC+0LLQuNC5IFVVSUQgJXMg0ZYgJWQg0L/QvtGB0LvRltC00L7QstC90LjRhSBVVUlEXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkICVkIFVVSUQnczpcbiIKK21zZ3N0ciAi0KHRgtCy0L7RgNC10L3QviAlZCBVVUlEOlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uICVkXG4iCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdCwINC00ZbRjyAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDc3IG1pc2MvdXVpZGQuYzo0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlcjogJXNcbiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60L7QstC40Lkg0L3QvtC80LXRgDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjUzNCBtaXNjL3V1aWRkLmM6NTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNhbGxpbmcgdXVpZGQgZGFlbW9uICglcyk6ICVzXG4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INCy0LjQutC70LjQutCw0YLQuCDRhNC+0L3QvtCy0YMg0YHQu9GD0LbQsdGDIHV1aWRkICglcyk6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICIlcyBhbmQgc3Vic2VxdWVudCAlZCBVVUlEc1xuIgorbXNnc3RyWzBdICIlcyDRliAlZCDQv9C+0YHQu9GW0LTQvtCy0L3QuNC5IFVVSURcbiIKK21zZ3N0clsxXSAiJXMg0ZYgJWQg0L/QvtGB0LvRltC00L7QstC90ZYgVVVJRFxuIgorbXNnc3RyWzJdICIlcyDRliAlZCDQv9C+0YHQu9GW0LTQvtCy0L3QuNGFIFVVSURcbiIKKworIzogbWlzYy91dWlkZC5jOjU0OAorbXNnaWQgIkxpc3Qgb2YgVVVJRCdzOlxuIgorbXNnc3RyICLQodC/0LjRgdC+0LogVVVJRDpcbiIKKworIzogbWlzYy91dWlkZC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHJlcGx5IGxlbmd0aCBmcm9tIHNlcnZlciAlZFxuIgorbXNnc3RyICLQndC10L7Rh9GW0LrRg9Cy0LDQvdCwINC00L7QstC20LjQvdCwINCy0ZbQtNC/0L7QstGW0LTRliDQstGW0LQg0YHQtdGA0LLQtdGA0LAsICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qga2lsbCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZDogJXNcbiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQv9GA0LjQv9C40L3QuNGC0Lgg0YDQvtCx0L7RgtGDIHV1aWRkLCDQt9Cw0L/Rg9GJ0LXQvdC+0LPQviDQtyBwaWQgJWQ6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiS2lsbGVkIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkXG4iCittc2dzdHIgItCf0YDQuNC/0LjQvdC10L3QviDRgNC+0LHQvtGC0YMgdXVpZGQg0LcgcGlkICVkXG4iCisKKyM6IG1pc2MvdXVpZGdlbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJdIFstdF1cbiIKK21zZ3N0ciAi0JrQvtGA0LjRgdGC0YPQstCw0L3QvdGPOiAlcyBbLXJdIFstdF1cbiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMgorbXNnaWQgIiMgRXh0ZW50IGR1bXA6XG4iCittc2dzdHIgIiMg0JTQsNC80L8g0YDQvtC30YjQuNGA0LXQvdC90Y86XG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iCittc2dzdHIgIuKEllx00J3QvtC8PSVsbHUsINCg0L7Qt9C8PSVsbHUsINCa0YPRgNGB0L7RgD0lbGx1LCDQo9C/0L7RgNGP0LTQuj0lbGx1XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBkZXZpY2UgW25ld19zaXplXVxuIgorIlxuIgorbXNnc3RyICIiCisi0JrQvtGA0LjRgdGC0YPQstCw0L3QvdGPOiAlcyBbLWQg0L/RgNCw0L/QvtGA0YbRll/QtNGW0LDQs9C90L7RgdGC0LjQutC4XSBbLWZdIFstRl0gWy1NXSBbLVBdIFstcF0g0L/RgNC40YHRgtGA0ZbQuSAiCisiW9C90L7QstC40Llf0YDQvtC30LzRltGAXVxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjY2Cittc2dpZCAiRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAi0KDQvtC30YjQuNGA0Y7RlNC80L4g0YLQsNCx0LvQuNGG0Y4gaW5vZGUiCisKKyM6IHJlc2l6ZS9tYWluLmM6NjkKK21zZ2lkICJSZWxvY2F0aW5nIGJsb2NrcyIKK21zZ3N0ciAi0J/QtdGA0LXRgdGD0LLQsNGU0LzQviDQsdC70L7QutC4IgorCisjOiByZXNpemUvbWFpbi5jOjcyCittc2dpZCAiU2Nhbm5pbmcgaW5vZGUgdGFibGUiCittc2dzdHIgItCh0LrQsNC90YPRlNC80L4g0YLQsNCx0LvQuNGG0Y4gaW5vZGUiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzUKK21zZ2lkICJVcGRhdGluZyBpbm9kZSByZWZlcmVuY2VzIgorbXNnc3RyICLQntC90L7QstC70Y7RlNC80L4g0L/QvtGB0LjQu9Cw0L3QvdGPIGlub2RlIgorCisjOiByZXNpemUvbWFpbi5jOjc4Cittc2dpZCAiTW92aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICLQn9C10YDQtdGB0YPQstCw0ZTQvNC+INGC0LDQsdC70LjRhtGOIGlub2RlIgorCisjOiByZXNpemUvbWFpbi5jOjgxCittc2dpZCAiVW5rbm93biBwYXNzPyE/IgorbXNnc3RyICLQndC10LLRltC00L7QvNC40Lkg0L/RgNC+0YXRltC0PyE/IgorCisjOiByZXNpemUvbWFpbi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZ2luIHBhc3MgJWQgKG1heCA9ICVsdSlcbiIKK21zZ3N0ciAi0J/QvtGH0LDRgtC+0Log0L/RgNC+0YXQvtC00YMgJWQgKNC80LDQutGBLiA9ICVsdSlcbiIKKworIzogcmVzaXplL21haW4uYzoxNTUKK21zZ2lkICIiCisiXG4iCisiUmVzaXppbmcgYmlnYWxsb2MgZmlsZSBzeXN0ZW1zIGhhcyBub3QgYmVlbiBmdWxseSB0ZXN0ZWQuICBQcm9jZWVkIGF0XG4iCisieW91ciBvd24gcmlzayEgIFVzZSB0aGUgZm9yY2Ugb3B0aW9uIGlmIHlvdSB3YW50IHRvIGdvIGFoZWFkIGFueXdheS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorItCa0L7QtCDQt9C80ZbQvdC4INGA0L7Qt9C80ZbRgNGW0LIg0YTQsNC50LvQvtCy0LjRhSDRgdC40YHRgtC10LwgYmlnYWxsb2Mg0L3QtSDRlCDQtNC+0YHRgtCw0YLQvdGM0L4g0L/QtdGA0LXQstGW0YDQtdC90LjQvC5cbiIKKyLQktGW0LTQv9C+0LLRltC00LDQu9GM0L3RltGB0YLRjCDQt9CwINC80L7QttC70LjQstGWINC90LDRgdC70ZbQtNC60Lgg0L/QvtC60LvQsNC00LDRlNGC0YzRgdGPINC90LAg0LLQsNGBISDQodC60L7RgNC40YHRgtCw0LnRgtC10YHRj1xuIgorItC/0LDRgNCw0LzQtdGC0YDQvtC8INC/0YDQuNC80YPRgdC+0LLQvtCz0L4g0LLQuNC60L7QvdCw0L3QvdGPLCDRj9C60YnQviDRhdC+0YfQtdGC0LUg0YDQuNC30LjQutC90YPRgtC4LlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQstGW0LTQutGA0LjRgtGC0Y8gJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGdldHRpbmcgc3RhdCBpbmZvcm1hdGlvbiBmb3IgJXMiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0L7RgtGA0LjQvNCw0L3QvdGPINGB0YLQsNGC0LjRgdGC0LjRh9C90LjRhSDQtNCw0L3QuNGFINGJ0L7QtNC+ICVzIgorCisjOiByZXNpemUvbWFpbi5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1mICVzJyBmaXJzdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorItCR0YPQtNGMINC70LDRgdC60LAsINGB0L/QvtGH0LDRgtC60YMg0LLRltC00LTQsNC50YLQtSDQutC+0LzQsNC90LTRgyDCq2UyZnNjayAtZiAlc8K7LlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RpbWF0ZWQgbWluaW11bSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtOiAlbGx1XG4iCittc2dzdHIgItCe0YbRltC90LrQsCDQvNGW0L3RltC80LDQu9GM0L3QvtCz0L4g0YDQvtC30LzRltGA0YMg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuDogJWxsdVxuIgorCisjOiByZXNpemUvbWFpbi5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG5ldyBzaXplOiAlc1xuIgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QuNC5INC90L7QstC40Lkg0YDQvtC30LzRltGAOiAlc1xuIgorCisjOiByZXNpemUvbWFpbi5jOjQyMQorbXNnaWQgIk5ldyBzaXplIHRvbyBsYXJnZSB0byBiZSBleHByZXNzZWQgaW4gMzIgYml0c1xuIgorbXNnc3RyICIiCisi0J3QvtCy0LjQuSDRgNC+0LfQvNGW0YAg0ZQg0L3QsNC00YLQviDQstC10LvQuNC60LjQvCDQtNC70Y8g0L/RgNC10LTRgdGC0LDQstC70LXQvdC90Y8g0LnQvtCz0L4g0YMg0YTQvtGA0LzQsNGC0ZYgMzIt0LHRltGC0L7QstC+0LPQviAiCisi0YfQuNGB0LvQsFxuIgorCisjOiByZXNpemUvbWFpbi5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJOZXcgc2l6ZSBzbWFsbGVyIHRoYW4gbWluaW11bSAoJWxsdSlcbiIKK21zZ3N0ciAi0J3QvtCy0LjQuSDRgNC+0LfQvNGW0YAg0ZQg0LzQtdC90YjQuNC8INC30LAg0LzRltC90ZbQvNCw0LvRjNC90LjQuSAoJWxsdSlcbiIKKworIzogcmVzaXplL21haW4uYzo0MzUKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBsZW5ndGgiCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdCwINC00L7QstC20LjQvdCwIHN0cmlkZSIKKworIzogcmVzaXplL21haW4uYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb250YWluaW5nIHBhcnRpdGlvbiAob3IgZGV2aWNlKSBpcyBvbmx5ICVsbHUgKCVkaykgYmxvY2tzLlxuIgorIllvdSByZXF1ZXN0ZWQgYSBuZXcgc2l6ZSBvZiAlbGx1IGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorItCd0LAg0YDQvtC30LTRltC70ZYgKNCw0LHQviDQv9GA0LjRgdGC0YDQvtGXKSDQu9C40YjQtSAlbGx1ICglZCDRgtC40YHRj9GHKSDQsdC70L7QutGW0LIuXG4iCisi0JLQsNC80Lgg0L3QsNC00ZbRgdC70LDQvdC+INC30LDQv9C40YIg0YnQvtC00L4g0L3QvtCy0L7Qs9C+INGA0L7Qt9C80ZbRgNGDINGDICVsbHUg0LHQu9C+0LrRltCyLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gaXMgYWxyZWFkeSAlbGx1ICglZGspIGJsb2NrcyBsb25nLiAgTm90aGluZyB0byBkbyFcbiIKKyJcbiIKK21zZ3N0ciAiIgorItCk0LDQudC70L7QstCwINGB0LjRgdGC0LXQvNCwINCy0LbQtSDRgdC60LvQsNC00LDRlNGC0YzRgdGPINC3ICVsbHUgKCVk0JopINCx0LvQvtC60ZbQsi4g0J/QvtGC0YDQtdCx0Lgg0YMg0LTQvtC00LDRgtC60L7QstC40YUgIgorItC00ZbRj9GFINC90LXQvNCw0ZQuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICLQl9C80ZbQvdGO0ZTQvNC+INGA0L7Qt9C80ZbRgCDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4INC90LAgJXMg0LTQviAlbGx1ICglZCDRgtC40YHRj9GHKSDQsdC70L7QutGW0LIuXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZXNpemUgJXMiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INC30LzRltC90LjRgtC4INGA0L7Qt9C80ZbRgCAlcyIKKworIzogcmVzaXplL21haW4uYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZnkgJXMnIHRvIGZpeCB0aGUgZmlsZXN5c3RlbVxuIgorImFmdGVyIHRoZSBhYm9ydGVkIHJlc2l6ZSBvcGVyYXRpb24uXG4iCittc2dzdHIgIiIKKyLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQstGW0LTQtNCw0LnRgtC1INC60L7QvNCw0L3QtNGDIMKrZTJmc2NrIC1meSAlc8K7LCDRidC+0LEg0LLQuNC/0YDQsNCy0LjRgtC4XG4iCisi0YTQsNC50LvQvtCy0YMg0YHQuNGB0YLQtdC80YMg0L/RltGB0LvRjyDQv9C10YDQtdGA0LjQstCw0L3QvdGPINC00ZbRlyDQt9GWINC30LzRltC90Lgg0YDQvtC30LzRltGA0ZbQsi5cbiIKKworIzogcmVzaXplL21haW4uYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIG9uICVzIGlzIG5vdyAlbGx1ICglZGspIGJsb2NrcyBsb25nLlxuIgorIlxuIgorbXNnc3RyICIiCisi0KMg0YTQsNC50LvQvtCy0ZbQuSDRgdC40YHRgtC10LzRliAlcyDRgtC10L/QtdGAICVsbHUgKCVk0JopINCx0LvQvtC60ZbQsi5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHRydW5jYXRlICVzIgorbXNnc3RyICLQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQvtCx0YDRltC30LDRgtC4ICVzIgorCisjOiByZXNpemUvb25saW5lLmM6ODIKK21zZ2lkICJrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXplIHdpdGggc3BhcnNlX3N1cGVyMiIKK21zZ3N0ciAiIgorItGDINGP0LTRgNGWINC90LUg0L/QtdGA0LXQtNCx0LDRh9C10L3QviDRltC90YLQtdGA0LDQutGC0LjQstC90L7RlyDQt9C80ZbQvdC4INGA0L7Qt9C80ZbRgNGW0LIg0LfQsCDQtNC+0L/QvtC80L7Qs9C+0Y4gc3BhcnNlX3N1cGVyMiIKKworIzogcmVzaXplL29ubGluZS5jOjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlczsgb24tbGluZSByZXNpemluZyByZXF1aXJlZFxuIgorbXNnc3RyICIiCisi0KTQsNC50LvQvtCy0YMg0YHQuNGB0YLQtdC80YMg0YMgJXMg0LfQvNC+0L3RgtC+0LLQsNC90L4g0LTQviAlczsg0L3QsNC00ZbRgdC70LDQvdC+INC30LDQv9C40YIg0YnQvtC00L4g0ZbQvdGC0LXRgNCw0LrRgtC40LLQvdC+0ZcgIgorItC30LzRltC90Lgg0YDQvtC30LzRltGA0ZbQslxuIgorCisjOiByZXNpemUvb25saW5lLmM6OTEKK21zZ2lkICJPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICLQn9GW0LTRgtGA0LjQvNC60Lgg0ZbQvdGC0LXRgNCw0LrRgtC40LLQvdC+0LPQviDQt9C80LXQvdGI0LXQvdC90Y8g0YDQvtC30LzRltGA0ZbQsiDQvdC1INC/0LXRgNC10LTQsdCw0YfQtdC90L4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTYKK21zZ2lkICJGaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICIiCisi0KMg0YTQsNC50LvQvtCy0ZbQuSDRgdC40YHRgtC10LzRliDQvdC1INC/0LXRgNC10LTQsdCw0YfQtdC90L4g0L/RltC00YLRgNC40LzQutC4INGW0L3RgtC10YDQsNC60YLQuNCy0L3QvtGXINC30LzRltC90Lgg0YDQvtC30LzRltGA0ZbQsiIKKworIzogcmVzaXplL29ubGluZS5jOjEyNQorbXNnaWQgIk5vdCBlbm91Z2ggcmVzZXJ2ZWQgZ2R0IGJsb2NrcyBmb3IgcmVzaXppbmciCittc2dzdHIgItCd0LXQtNC+0YHRgtCw0YLQvdGM0L4g0LfQsNGA0LXQt9C10YDQstC+0LLQsNC90LjRhSDQsdC70L7QutGW0LIgZ2R0INC00LvRjyDQt9C80ZbQvdC4INGA0L7Qt9C80ZbRgNGW0LIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMzIKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCByZXNpemluZyBhIGZpbGUgc3lzdGVtIHRoaXMgbGFyZ2UiCittc2dzdHIgIiIKKyLQoyDRj9C00YDRliDQvtC/0LXRgNCw0YbRltC50L3QvtGXINGB0LjRgdGC0LXQvNC4INC90LUg0L/QtdGA0LXQtNCx0LDRh9C10L3QviDQv9GW0LTRgtGA0LjQvNC60Lgg0LfQvNGW0L3QuCDRgNC+0LfQvNGW0YDRltCyINGC0LDQutC40YUgIgorItCy0LXQu9C40LrQuNGFINGE0LDQudC70L7QstC40YUg0YHQuNGB0YLQtdC8IgorCisjOiByZXNpemUvb25saW5lLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIG1vdW50cG9pbnQgJXMiCittc2dzdHIgItC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INCy0ZbQtNC60YDQuNGC0Lgg0YLQvtGH0LrRgyDQvNC+0L3RgtGD0LLQsNC90L3RjyAlcyIKKworIzogcmVzaXplL29ubGluZS5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJPbGQgcmVzaXplIGludGVyZmFjZSByZXF1ZXN0ZWQuXG4iCittc2dzdHIgItCX0LDQv9C40YIg0L3QsCDQt9Cw0YHRgtCw0YDRltC70LjQuSDRltC90YLQtdGA0YTQtdC50YEg0LfQvNGW0L3QuCDRgNC+0LfQvNGW0YDRgy5cbiIKKworIzogcmVzaXplL29ubGluZS5jOjE2NCByZXNpemUvb25saW5lLmM6MTgxCittc2dpZCAiUGVybWlzc2lvbiBkZW5pZWQgdG8gcmVzaXplIGZpbGVzeXN0ZW0iCittc2dzdHIgItCd0LXQtNC+0YHRgtCw0YLQvdGM0L4g0L/RgNCw0LIg0LTQvtGB0YLRg9C/0YMg0LTQu9GPINC30LzRltC90Lgg0YDQvtC30LzRltGA0ZbQsiDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4IgorCisjOiByZXNpemUvb25saW5lLmM6MTY3IHJlc2l6ZS9vbmxpbmUuYzoxODcKK21zZ2lkICJXaGlsZSBjaGVja2luZyBmb3Igb24tbGluZSByZXNpemluZyBzdXBwb3J0IgorbXNnc3RyICLQn9GW0LQg0YfQsNGBINC/0LXRgNC10LLRltGA0LrQuCDQvNC+0LbQu9C40LLQvtGB0YLRliDRltC90YLQtdGA0LDQutGC0LjQstC90L7RlyDQt9C80ZbQvdC4INGA0L7Qt9C80ZbRgNGW0LIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxODQKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIiIKKyLQoyDRj9C00YDRliDQvtC/0LXRgNCw0YbRltC50L3QvtGXINGB0LjRgdGC0LXQvNC4INC90LUg0L/QtdGA0LXQtNCx0LDRh9C10L3QviDQv9GW0LTRgtGA0LjQvNC60Lgg0ZbQvdGC0LXRgNCw0LrRgtC40LLQvdC+0Zcg0LfQvNGW0L3QuCAiCisi0YDQvtC30LzRltGA0ZbQsiIKKworIzogcmVzaXplL29ubGluZS5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICJQZXJmb3JtaW5nIGFuIG9uLWxpbmUgcmVzaXplIG9mICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICLQktC40LrQvtC90YPRlNC80L4g0ZbQvdGC0LXRgNCw0LrRgtC40LLQvdGDINC30LzRltC90YMg0YDQvtC30LzRltGA0ZbQsiAlcyDQtNC+ICVsbHUgKCVkINGC0LjRgdGP0YcpINCx0LvQvtC60ZbQsi5cbiIKKworIzogcmVzaXplL29ubGluZS5jOjIzMworbXNnaWQgIldoaWxlIHRyeWluZyB0byBleHRlbmQgdGhlIGxhc3QgZ3JvdXAiCittc2dzdHIgItCf0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INGA0L7Qt9GI0LjRgNC10L3QvdGPINC+0YHRgtCw0L3QvdGM0L7RlyDQs9GA0YPQv9C4IgorCisjOiByZXNpemUvb25saW5lLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHRyeWluZyB0byBhZGQgZ3JvdXAgIyVkIgorbXNnc3RyICLQn9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQtNC+0LTQsNGC0Lgg0LPRgNGD0L/RgyAlZCIKKworIzogcmVzaXplL29ubGluZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmlsZXN5c3RlbSBhdCAlcyBpcyBtb3VudGVkIG9uICVzLCBhbmQgb24tbGluZSByZXNpemluZyBpcyBub3Qgc3VwcG9ydGVkIG9uICIKKyJ0aGlzIHN5c3RlbS5cbiIKK21zZ3N0ciAiIgorItCk0LDQudC70L7QstGDINGB0LjRgdGC0LXQvNGDINGDICVzINC30LzQvtC90YLQvtCy0LDQvdC+INC00L4gJXMsINC/0ZbQtNGC0YDQuNC80LrQuCDRltC90YLQtdGA0LDQutGC0LjQstC90L7RlyDQt9C80ZbQvdC4ICIKKyLRgNC+0LfQvNGW0YDRltCyINC00LvRjyDRhtGW0ZTRlyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4INC90LUg0L/QtdGA0LXQtNCx0LDRh9C10L3Qvi5cbiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICLQutGW0LvRjNC60ZbRgdGC0YwgaW5vZGUgKCVsbHUpINC80LDRlCDQsdGD0YLQuCDQvNC10L3RiNC+0Y4g0LfQsCAldSIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjY5MQorbXNnaWQgInJlc2VydmVkIGJsb2NrcyIKK21zZ3N0ciAi0LfQsNGA0LXQt9C10YDQstC+0LLQsNC90ZYg0LHQu9C+0LrQuCIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjkzNgorbXNnaWQgIm1ldGEtZGF0YSBibG9ja3MiCittc2dzdHIgItCx0LvQvtC60Lgg0LzQtdGC0LDQtNCw0L3QuNGFIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MTAzOSByZXNpemUvcmVzaXplMmZzLmM6MTgzNgorbXNnaWQgIm5ldyBtZXRhIGJsb2NrcyIKK21zZ3N0ciAi0L3QvtCy0ZYg0LzQtdGC0LDQsdC70L7QutC4IgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjA1NgorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW4hICBObyBzYiBpbiBsYXN0IHN1cGVyX3NwYXJzZSBiZz9cbiIKK21zZ3N0ciAi0KLQsNC60L7Qs9C+INC90LUg0L/QvtCy0LjQvdC90L4g0LHRg9C70L4g0YHRgtCw0YLQuNGB0Y8hINCd0LXQvNCw0ZQgc2Ig0YMgbGFzdCBzdXBlcl9zcGFyc2UgYmc/XG4iCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMDYxCittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbiEgIFVuZXhwZWN0ZWQgb2xkX2Rlc2MgaW4gc3VwZXJfc3BhcnNlIGJnP1xuIgorbXNnc3RyICIiCisi0KLQsNC60L7Qs9C+INC90LUg0L/QvtCy0LjQvdC90L4g0LHRg9C70L4g0YHRgtCw0YLQuNGB0Y8hINCd0LXQvtGH0ZbQutGD0LLQsNC90LUgb2xkX2Rlc2Mg0YMgc3VwZXJfc3BhcnNlIGJnP1xuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjEzOQorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW46IHJlc2l6ZSBpbm9kZSBjb3JydXB0IVxuIgorbXNnc3RyICLQotCw0LrQvtCz0L4g0L3QtSDQv9C+0LLQuNC90L3QviDQsdGD0LvQviDRgdGC0LDRgtC40YHRjzogaW5vZGUg0LfQvNGW0L3QuCDRgNC+0LfQvNGW0YDRltCyINC/0L7RiNC60L7QtNC20LXQvdC+IVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEKKyMsIGZ1enp5Cittc2dpZCAiRVhUMkZTIExpYnJhcnkgdmVyc2lvbiAxLjQyLjEzIgorbXNnc3RyICLQkdGW0LHQu9GW0L7RgtC10LrQsCBFWFQyRlMg0LLQtdGA0YHRltGXIDEuNDIuMTIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0Ml9maWxzeXMgc3RydWN0dXJlIgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LUg0LfQvdCw0YfQtdC90L3RjyDQutC+0L3RgtGA0L7Qu9GM0L3QvtGXINGB0YPQvNC4INC00LvRjyDRgdGC0YDRg9C60YLRg9GA0LggZXh0Ml9maWxzeXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LUg0LfQvdCw0YfQtdC90L3RjyDQutC+0L3RgtGA0L7Qu9GM0L3QvtGXINGB0YPQvNC4INC00LvRjyDRgdGC0YDRg9C60YLRg9GA0LggYmFkYmxvY2tzX2xpc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LUg0LfQvdCw0YfQtdC90L3RjyDQutC+0L3RgtGA0L7Qu9GM0L3QvtGXINGB0YPQvNC4INC00LvRjyDRgdGC0YDRg9C60YLRg9GA0LggYmFkYmxvY2tzX2l0ZXJhdGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfc2NhbiBzdHJ1Y3R1cmUiCittc2dzdHIgItCf0L7QvNC40LvQutC+0LLQtSDQt9C90LDRh9C10L3QvdGPINC60L7QvdGC0YDQvtC70YzQvdC+0Zcg0YHRg9C80Lgg0LTQu9GPINGB0YLRgNGD0LrRgtGD0YDQuCBpbm9kZV9zY2FuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LUg0LfQvdCw0YfQtdC90L3RjyDQutC+0L3RgtGA0L7Qu9GM0L3QvtGXINGB0YPQvNC4INC00LvRjyDRgdGC0YDRg9C60YLRg9GA0LggaW9fY2hhbm5lbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB1bml4IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LUg0LfQvdCw0YfQtdC90L3RjyDQutC+0L3RgtGA0L7Qu9GM0L3QvtGXINGB0YPQvNC4INC00LvRjyDRgdGC0YDRg9C60YLRg9GA0LggaW9fY2hhbm5lbCBVTklYIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX21hbmFnZXIgc3RydWN0dXJlIgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LUg0LfQvdCw0YfQtdC90L3RjyDQutC+0L3RgtGA0L7Qu9GM0L3QvtGXINGB0YPQvNC4INC00LvRjyDRgdGC0YDRg9C60YLRg9GA0LggaW9fbWFuYWdlciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBibG9ja19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LUg0LfQvdCw0YfQtdC90L3RjyDQutC+0L3RgtGA0L7Qu9GM0L3QvtGXINGB0YPQvNC4INC00LvRjyDRgdGC0YDRg9C60YLRg9GA0LggYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgItCf0L7QvNC40LvQutC+0LLQtSDQt9C90LDRh9C10L3QvdGPINC60L7QvdGC0YDQvtC70YzQvdC+0Zcg0YHRg9C80Lgg0LTQu9GPINGB0YLRgNGD0LrRgtGD0YDQuCBpbm9kZV9iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZ2VuZXJpY19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LUg0LfQvdCw0YfQtdC90L3RjyDQutC+0L3RgtGA0L7Qu9GM0L3QvtGXINGB0YPQvNC4INC00LvRjyDRgdGC0YDRg9C60YLRg9GA0LggZ2VuZXJpY19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdGVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAi0J/QvtC80LjQu9C60L7QstC1INC30L3QsNGH0LXQvdC90Y8g0LrQvtC90YLRgNC+0LvRjNC90L7RlyDRgdGD0LzQuCDQtNC70Y8g0L/QtdGA0LXQstGW0YDQutC4INGB0YLRgNGD0LrRgtGD0YDQuCBpb19jaGFubmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGRpcmVjdG9yeSBibG9jayBsaXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorItCf0L7QvNC40LvQutC+0LLQtSDQt9C90LDRh9C10L3QvdGPINC60L7QvdGC0YDQvtC70YzQvdC+0Zcg0YHRg9C80Lgg0LTQu9GPINGB0YLRgNGD0LrRgtGD0YDQuCDRgdC/0LjRgdC60YMg0LHQu9C+0LrRltCyINC60LDRgtCw0LvQvtCz0ZbQsiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpY291bnQgc3RydWN0dXJlIgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LAg0LrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAg0LTQu9GPINGB0YLRgNGD0LrRgtGD0YDQuCBpY291bnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgUG93ZXJxdWVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorItCf0L7QvNC40LvQutC+0LLQtSDQt9C90LDRh9C10L3QvdGPINC60L7QvdGC0YDQvtC70YzQvdC+0Zcg0YHRg9C80Lgg0LTQu9GPINGB0YLRgNGD0LrRgtGD0YDQuCBQb3dlcnF1ZXN0IGlvX2NoYW5uZWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0MiBmaWxlIHN0cnVjdHVyZSIKK21zZ3N0ciAi0J/QvtC80LjQu9C60L7QstC1INC30L3QsNGH0LXQvdC90Y8g0LrQvtC90YLRgNC+0LvRjNC90L7RlyDRgdGD0LzQuCDQtNC70Y8g0YHRgtGA0YPQutGC0YPRgNC4INGE0LDQudC70ZbQsiBleHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIEV4dDIgSW1hZ2UgSGVhZGVyIgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LUg0LfQvdCw0YfQtdC90L3RjyDQutC+0L3RgtGA0L7Qu9GM0L3QvtGXINGB0YPQvNC4INC00LvRjyDQt9Cw0LPQvtC70L7QstC60LAg0L7QsdGA0LDQt9GDIEV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGUgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgItCf0L7QvNC40LvQutC+0LLQtSDQt9C90LDRh9C10L3QvdGPINC60L7QvdGC0YDQvtC70YzQvdC+0Zcg0YHRg9C80Lgg0LTQu9GPINGB0YLRgNGD0LrRgtGD0YDQuCBpb19jaGFubmVsIGlub2RlYCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBoYW5kbGUiCittc2dzdHIgItCf0L7QvNC40LvQutC+0LLQtSDQt9C90LDRh9C10L3QvdGPINC60L7QvdGC0YDQvtC70YzQvdC+0Zcg0YHRg9C80Lgg0LTQu9GPINC00LXRgdC60YDQuNC/0YLQvtGA0LAg0YDQvtC30YjQuNGA0LXQvdC90Y8gZXh0NCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QsCDRgdC40LPQvdCw0YLRg9GA0LAg0YHRg9C/0LXRgNCx0LvQvtC60LAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMQorbXNnaWQgIkZpbGVzeXN0ZW0gcmV2aXNpb24gdG9vIGhpZ2giCittc2dzdHIgItCX0LDQvdCw0LTRgtC+INCy0LjRgdC+0LrQuNC5INC90L7QvNC10YAg0LzQvtC00LjRhNGW0LrQsNGG0ZbRlyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzIKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHRvIGZpbGVzeXN0ZW0gb3BlbmVkIHJlYWQtb25seSIKK21zZ3N0ciAi0KHQv9GA0L7QsdCwINC30LDQv9C40YHRgyDQtNC+INGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LgsINCy0ZbQtNC60YDQuNGC0L7RlyDQu9C40YjQtSDQtNC70Y8g0YfQuNGC0LDQvdC90Y8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMworbXNnaWQgIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L/RgNC+0YfQuNGC0LDRgtC4INC00LXRgdC60YDQuNC/0YLQvtGA0Lgg0LPRgNGD0L8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNAorbXNnaWQgIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC30LDQv9C40YHQsNGC0Lgg0LTQtdGB0LrRgNC40L/RgtC+0YDQuCDQs9GA0YPQvyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM1Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAi0J/QvtGI0LrQvtC00LbQtdC90LjQuSDQtNC10YHQutGA0LjQv9GC0L7RgCDQs9GA0YPQv9C4OiDQv9C+0LzQuNC70LrQvtCy0LjQuSDQsdC70L7QuiDQsNCx0L4g0LHRltGC0L7QstCwINC60LDRgNGC0LAg0LHQu9C+0LrRltCyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzYKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgYml0bWFwIgorbXNnc3RyICLQn9C+0YjQutC+0LTQttC10L3QuNC5INC00LXRgdC60YDQuNC/0YLQvtGAINCz0YDRg9C/0Lg6INC/0L7QvNC40LvQutC+0LLQuNC5INCx0LvQvtC6INCw0LHQviDQsdGW0YLQvtCy0LAg0LrQsNGA0YLQsCBpbm9kZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM3Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIHRhYmxlIgorbXNnc3RyICLQn9C+0YjQutC+0LTQttC10L3QuNC5INC00LXRgdC60YDQuNC/0YLQvtGAINCz0YDRg9C/0Lg6INC/0L7QvNC40LvQutC+0LLQuNC5INCx0LvQvtC6INCw0LHQviDRgtCw0LHQu9C40YbRjyBpbm9kZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM4Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgYml0bWFwIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC30LDQv9C40YHQsNGC0Lgg0LHRltGC0L7QstGDINC60LDRgNGC0YMgaW5vZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOQorbXNnaWQgIkNhbid0IHJlYWQgYW4gaW5vZGUgYml0bWFwIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC/0YDQvtGH0LjRgtCw0YLQuCDQsdGW0YLQvtCy0YMg0LrQsNGA0YLRgyBpbm9kZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQwCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYSBibG9jayBiaXRtYXAiCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LfQsNC/0LjRgdCw0YLQuCDQsdGW0YLQvtCy0YMg0LrQsNGA0YLRgyDQsdC70L7QutGW0LIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MQorbXNnaWQgIkNhbid0IHJlYWQgYSBibG9jayBiaXRtYXAiCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L/RgNC+0YfQuNGC0LDRgtC4INCx0ZbRgtC+0LLRgyDQutCw0YDRgtGDINCx0LvQvtC60ZbQsiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQyCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgItCX0LDQv9C40YEg0LTQviDRgtCw0LHQu9C40YbRliBpbm9kZSDQvdC10LzQvtC20LvQuNCy0LjQuSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQzCittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQv9GA0L7Rh9C40YLQsNGC0Lgg0YLQsNCx0LvQuNGG0Y4gaW5vZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NAorbXNnaWQgIkNhbid0IHJlYWQgbmV4dCBpbm9kZSIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQv9GA0L7Rh9C40YLQsNGC0Lgg0L3QsNGB0YLRg9C/0L3QuNC5IGlub2RlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDUKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bmV4cGVjdGVkIGJsb2NrIHNpemUiCittc2dzdHIgItCd0LXQvtGH0ZbQutGD0LLQsNC90LjQuSDRgNC+0LfQvNGW0YAg0LHQu9C+0LrRgyDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDYKK21zZ2lkICJFWFQyIGRpcmVjdG9yeSBjb3JydXB0ZWQiCittc2dzdHIgItCa0LDRgtCw0LvQvtCzIEVYVDIg0L/QvtGI0LrQvtC00LbQtdC90L4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NworbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCIKK21zZ3N0ciAiIgorItCh0L/RgNC+0LHQsCDQv9GA0L7Rh9C40YLQsNGC0Lgg0LHQu9C+0Log0Lcg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCDQv9GA0LjQt9Cy0LXQu9CwINC00L4g0YfQuNGC0LDQvdC90Y8g0L3QtdC00L7RgdGC0LDRgtC90YzQvtGXICIKKyLQutGW0LvRjNC60L7RgdGC0ZYg0LTQsNC90LjRhSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ4Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBibG9jayB0byBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHdyaXRlIgorbXNnc3RyICIiCisi0KHQv9GA0L7QsdCwINC30LDQv9C40YHQsNGC0Lgg0LHQu9C+0Log0LTQviDRhNCw0LnQu9C+0LLQvtGXINGB0LjRgdGC0LXQvNC4INC/0YDQuNC30LLQtdC70LAg0LTQviDQvdC10LTQvtGB0YLQsNGC0L3QvtGB0YLRliDQvtCx0YHRj9Cz0YMgIgorItC00LDQvdC40YUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OQorbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gdGhlIGRpcmVjdG9yeSIKK21zZ3N0ciAi0KMg0LrQsNGC0LDQu9C+0LfRliDQvdC10LzQsNGUINCy0ZbQu9GM0L3QvtCz0L4g0LzRltGB0YbRjyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUwCittc2dpZCAiSW5vZGUgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgItCR0ZbRgtC+0LLRgyDQutCw0YDRgtGDIGlub2RlINC90LUg0LfQsNCy0LDQvdGC0LDQttC10L3QviIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUxCittc2dpZCAiQmxvY2sgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgItCR0ZbRgtC+0LLRgyDQutCw0YDRgtGDINCx0LvQvtC60ZbQsiDQvdC1INC30LDQstCw0L3RgtCw0LbQtdC90L4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MgorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QsCDQutGW0LvRjNC60ZbRgdGC0YwgaW5vZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QsCDQutGW0LvRjNC60ZbRgdGC0Ywg0LHQu9C+0LrRltCyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTQKK21zZ2lkICJJbnRlcm5hbCBlcnJvciBpbiBleHQyZnNfZXhwYW5kX2RpciIKK21zZ3N0ciAi0JLQvdGD0YLRgNGW0YjQvdGPINC/0L7QvNC40LvQutCwINGDIGV4dDJmc19leHBhbmRfZGlyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTUKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGJ1aWxkIHByb3Bvc2VkIGZpbGVzeXN0ZW0iCittc2dzdHIgItCd0LXQtNC+0YHRgtCw0YLQvdGM0L4g0L/RgNC+0YHRgtC+0YDRgyDQtNC70Y8g0LfQsdC40YDQsNC90L3RjyDQt9Cw0L/RgNC+0L/QvtC90L7QstCw0L3QvtGXINGE0LDQudC70L7QstC+0Zcg0YHQuNGB0YLQtdC80LgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NgorbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgImV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCDQv9C10YDQtdC00LDQvdC+INC90LXQutC+0YDQtdC60YLQvdGDINC60ZbQu9GM0LrRltGB0YLRjCDQsdC70L7QutGW0LIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAg0L/QtdGA0LXQtNCw0L3QviDQvdC10LrQvtGA0LXQutGC0L3RgyDQutGW0LvRjNC60ZbRgdGC0Ywg0LHQu9C+0LrRltCyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTgKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIgorbXNnc3RyICJleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAg0L/QtdGA0LXQtNCw0L3QviDQvdC10LrQvtGA0LXQutGC0L3RgyDQutGW0LvRjNC60ZbRgdGC0Ywg0LHQu9C+0LrRltCyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTkKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICJleHQyZnNfbWFya19pbm9kZV9iaXRtYXAg0L/QtdGA0LXQtNCw0L3QviDQvdC10LrQvtGA0LXQutGC0L3RgyDQutGW0LvRjNC60ZbRgdGC0YwgaW5vZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MAorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAg0L/QtdGA0LXQtNCw0L3QviDQvdC10LrQvtGA0LXQutGC0L3RgyDQutGW0LvRjNC60ZbRgdGC0YwgaW5vZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCittc2dzdHIgImV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCDQv9C10YDQtdC00LDQvdC+INC90LXQutC+0YDQtdC60YLQvdGDINC60ZbQu9GM0LrRltGB0YLRjCBpbm9kZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYyCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgYmxvY2sgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICLQodC/0YDQvtCx0LAg0L/QtdGA0LXRgdGD0L3Rg9GC0Lgg0LrRltC90LXRhtGMINCx0ZbRgtC+0LLQvtGXINC60LDRgNGC0Lgg0LHQu9C+0LrRltCyINC30LAg0YHQv9GA0LDQstC20L3RltC5INC60ZbQvdC10YbRjCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYzCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgaW5vZGUgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICLQodC/0YDQvtCx0LAg0L/QtdGA0LXRgdGD0L3Rg9GC0Lgg0LrRltC90LXRhtGMINCx0ZbRgtC+0LLQvtGXINC60LDRgNGC0LggaW5vZGUg0LfQsCDRgdC/0YDQsNCy0LbQvdGW0Lkg0LrRltC90LXRhtGMIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjQKK21zZ2lkICJJbGxlZ2FsIGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICLQktC40Y/QstC70LXQvdC+INC90LXQutC+0YDQtdC60YLQvdC40Lkg0L7Qv9C+0YHQtdGA0LXQtNC60L7QstCw0L3QuNC5INCx0LvQvtC6IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKK21zZ2lkICJJbGxlZ2FsIGRvdWJseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAi0JLQuNGP0LLQu9C10L3QviDQvdC10LrQvtGA0LXQutGC0L3QuNC5INC/0L7QtNCy0ZbQudC90L4g0L7Qv9C+0YHQtdGA0LXQtNC60L7QstCw0L3QuNC5INCx0LvQvtC6IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjYKK21zZ2lkICJJbGxlZ2FsIHRyaXBseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAi0JLQuNGP0LLQu9C10L3QviDQvdC10LrQvtGA0LXQutGC0L3QuNC5INC/0L7RgtGA0ZbQudC90L4g0L7Qv9C+0YHQtdGA0LXQtNC60L7QstCw0L3QuNC5INCx0LvQvtC6IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjcKK21zZ2lkICJCbG9jayBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgItCR0ZbRgtC+0LLRliDQutCw0YDRgtC4INCx0LvQvtC60ZbQsiDQvdC1INGUINC+0LTQvdCw0LrQvtCy0LjQvNC4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjgKK21zZ2lkICJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgItCR0ZbRgtC+0LLRliDQutCw0YDRgtC4IGlub2RlINC90LUg0ZQg0L7QtNC90LDQutC+0LLQuNC80LgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OQorbXNnaWQgIklsbGVnYWwgb3IgbWFsZm9ybWVkIGRldmljZSBuYW1lIgorbXNnc3RyICLQndC10L/RgNC40L/Rg9GB0YLQuNC80LAg0L3QsNC30LLQsCDQv9GA0LjRgdGC0YDQvtGOINCw0LHQviDQv9C+0LzQuNC70LrQvtCy0LUg0YTQvtGA0LzQsNGC0YPQstCw0L3QvdGPINC90LDQt9Cy0LgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MAorbXNnaWQgIkEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAi0KMg0LPRgNGD0L/RliDQsdC70L7QutGW0LIg0L3QtdC80LDRlCDRgtCw0LHQu9C40YbRliBpbm9kZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcxCittc2dpZCAiVGhlIGV4dDIgc3VwZXJibG9jayBpcyBjb3JydXB0IgorbXNnc3RyICLQodGD0L/QtdGA0LHQu9C+0LogZXh0MiDQv9C+0YjQutC+0LTQttC10L3QviIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcyCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisiZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAg0L/QtdGA0LXQtNCw0L3QviDQvdC10LrQvtGA0LXQutGC0L3RgyDQt9Cw0LPQsNC70YzQvdGDINC60ZbQu9GM0LrRltGB0YLRjCDQsdGW0YLRltCyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzMKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiIgorImV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAg0L/QtdGA0LXQtNCw0L3QviDQvdC10LrQvtGA0LXQutGC0L3RgyDQt9Cw0LPQsNC70YzQvdGDINC60ZbQu9GM0LrRltGB0YLRjCDQsdGW0YLRltCyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzQKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKyJleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCDQv9C10YDQtdC00LDQvdC+INC90LXQutC+0YDQtdC60YLQvdGDINC30LDQs9Cw0LvRjNC90YMg0LrRltC70YzQutGW0YHRgtGMINCx0ZbRgtGW0LIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NQorbXNnaWQgIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAi0JLQuNGP0LLQu9C10L3QviDQvdCw0LTRgtC+INCx0LDQs9Cw0YLQviDRgdC40LzQstC+0LvRltGH0L3QuNGFINC/0L7RgdC40LvQsNC90YwuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzYKK21zZ2lkICJUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBub3QgaGFuZGxlIHRoaXMgY2FzZSIKK21zZ3N0ciAi0KTRg9C90LrRhtGW0ZTRjiDQt9Cy0L7RgNC+0YLQvdC+0LPQviDQstC40LrQu9C40LrRgyDRhtC10Lkg0LLQuNC/0LDQtNC+0Log0L3QtSDQvtCx0YDQvtCx0LvRj9GU0YLRjNGB0Y8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NworbXNnaWQgIlRoZSBpbm9kZSBpcyBmcm9tIGEgYmFkIGJsb2NrIGluIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiSW5vZGUg0L3QsNC70LXQttC40YLRjCDQv9C+0YjQutC+0LTQttC10L3QvtC80YMg0LHQu9C+0LrRgyDRgyDRgtCw0LHQu9C40YbRliBpbm9kZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc4Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKSIKK21zZ3N0ciAi0KMg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCDRlCDQvdC10L/RltC00YLRgNC40LzRg9Cy0LDQvdGWINC80L7QttC70LjQstC+0YHRgtGWIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzkKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCByZWFkLW9ubHkgZmVhdHVyZShzKSIKK21zZ3N0ciAi0KMg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCDRlCDQvdC10L/RltC00YLRgNC40LzRg9Cy0LDQvdGWINCy0LvQsNGB0YLQuNCy0L7RgdGC0ZYg0YnQvtC00L4g0LfQsNCx0L7RgNC+0L3QuCDQt9Cw0L/QuNGB0YMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MAorbXNnaWQgIklPIENoYW5uZWwgZmFpbGVkIHRvIHNlZWsgb24gcmVhZCBvciB3cml0ZSIKK21zZ3N0ciAiIgorItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLQuNC60L7QvdCw0YLQuCDQv9C+0LfQuNGG0ZbRjtCy0LDQvdC90Y8g0LrQsNC90LDQu9GDINCy0LLQtdC00LXQvdC90Y8t0LLQuNCy0LXQtNC10L3QvdGPINC/0ZbQtCDRh9Cw0YEg0YfQuNGC0LDQvdC90Y8gIgorItGH0Lgg0LfQsNC/0LjRgdGDIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODEKK21zZ2lkICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDQvNGW0YHRhtC1INGDINC/0LDQvCfRj9GC0ZYiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSIKK21zZ3N0ciAi0JHRltCx0LvRltC+0YLQtdGG0ZYgZXh0MiDQv9C10YDQtdC00LDQvdC+INC90LXQutC+0YDQtdC60YLQvdC40Lkg0LDRgNCz0YPQvNC10L3RgiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgzCittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGJsb2NrIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDRgNC+0LfQvNGW0YHRgtC40YLQuCDQsdC70L7QuiDRgyDRhNCw0LnQu9C+0LLRltC5INGB0LjRgdGC0LXQvNGWIGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NAorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbm9kZSBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0YDQvtC30LzRltGB0YLQuNGC0LggaW5vZGUg0YMg0YTQsNC50LvQvtCy0ZbQuSDRgdC40YHRgtC10LzRliBleHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODUKK21zZ2lkICJFeHQyIGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiSW5vZGUgZXh0MiDQvdC1INGUINC60LDRgtCw0LvQvtCz0L7QvCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg2Cittc2dpZCAiVG9vIG1hbnkgcmVmZXJlbmNlcyBpbiB0YWJsZSIKK21zZ3N0ciAi0KMg0YLQsNCx0LvQuNGG0ZYg0LfQsNC90LDQtNGC0L4g0LHQsNCz0LDRgtC+INC/0L7RgdC40LvQsNC90YwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NworbXNnaWQgIkZpbGUgbm90IGZvdW5kIGJ5IGV4dDJfbG9va3VwIgorbXNnc3RyICJleHQyX2xvb2t1cCDQvdC1INCy0LTQsNC70L7RgdGPINC30L3QsNC50YLQuCDRhNCw0LnQuyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg4Cittc2dpZCAiRmlsZSBvcGVuIHJlYWQtb25seSIKK21zZ3N0ciAi0KTQsNC50Lsg0LLRltC00LrRgNC40YLQviDQu9C40YjQtSDQtNC70Y8g0YfQuNGC0LDQvdC90Y8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OQorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAi0J3QtSDQt9C90LDQudC00LXQvdC+INCx0LvQvtC60YMg0LrQsNGC0LDQu9C+0LPRgyBleHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTAKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi0JrQsNGC0LDQu9C+0LMgZXh0MiDQstC20LUg0ZbRgdC90YPRlCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkxCittc2dpZCAiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iCittc2dzdHIgItCd0LXRgNC10LDQu9GW0LfQvtCy0LDQvdCwINCx0ZbQsdC70ZbQvtGC0LXRh9C90LAg0YTRg9C90LrRhtGW0Y8gZXh0MiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkyCittc2dpZCAiVXNlciBjYW5jZWwgcmVxdWVzdGVkIgorbXNnc3RyICLQndCw0LTRltC50YjQvtCyINC30LDQv9C40YIg0YnQvtC00L4g0YHQutCw0YHRg9Cy0LDQvdC90Y8g0LLRltC0INC60L7RgNC40YHRgtGD0LLQsNGH0LAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MworbXNnaWQgIkV4dDIgZmlsZSB0b28gYmlnIgorbXNnc3RyICLQpNCw0LnQuyBleHQyINGUINC90LDQtNGC0L4g0LLQtdC70LjQutC40LwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NAorbXNnaWQgIlN1cHBsaWVkIGpvdXJuYWwgZGV2aWNlIG5vdCBhIGJsb2NrIGRldmljZSIKK21zZ3N0ciAi0J3QsNC00LDQvdC40Lkg0L/RgNC40YHRgtGA0ZbQuSDQttGD0YDQvdCw0LvRjtCy0LDQvdC90Y8g0L3QtSDRlCDQsdC70L7QutC+0LLQuNC8INC/0YDQuNGB0YLRgNC+0ZTQvCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk1Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAi0J3QtSDQt9C90LDQudC00LXQvdC+INGB0YPQv9C10YDQsdC70L7QutGDINC20YPRgNC90LDQu9GDIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTYKK21zZ2lkICJKb3VybmFsIG11c3QgYmUgYXQgbGVhc3QgMTAyNCBibG9ja3MiCittc2dzdHIgItCW0YPRgNC90LDQuyDQvNCw0ZQg0YHQutC70LDQtNCw0YLQuNGB0Y8g0Lcg0L/RgNC40L3QsNC50LzQvdGWIDEwMjQg0LHQu9C+0LrRltCyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTcKK21zZ2lkICJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iCittc2dzdHIgItCd0LXQv9GW0LTRgtGA0LjQvNGD0LLQsNC90LAg0LLQtdGA0YHRltGPINC20YPRgNC90LDQu9GDIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTgKK21zZ2lkICJFcnJvciBsb2FkaW5nIGV4dGVybmFsIGpvdXJuYWwiCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0LfQsNCy0LDQvdGC0LDQttC10L3QvdGPINC30L7QstC90ZbRiNC90YzQvtCz0L4g0LbRg9GA0L3QsNC70YMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OQorbXNnaWQgIkpvdXJuYWwgbm90IGZvdW5kIgorbXNnc3RyICLQltGD0YDQvdCw0Lsg0L3QtSDQt9C90LDQudC00LXQvdC+IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAwCittc2dpZCAiRGlyZWN0b3J5IGhhc2ggdW5zdXBwb3J0ZWQiCittc2dzdHIgItCf0ZbQtNGC0YDQuNC80LrQuCDRhdC10YjRltCyINC60LDRgtCw0LvQvtCz0ZbQsiDQvdC1INC/0LXRgNC10LTQsdCw0YfQtdC90L4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDEKK21zZ2lkICJJbGxlZ2FsIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBudW1iZXIiCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdC40Lkg0L3QvtC80LXRgCDQsdC70L7QutGDINGA0L7Qt9GI0LjRgNC10L3QvtCz0L4g0LDRgtGA0LjQsdGD0YLQsCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMgorbXNnaWQgIkNhbm5vdCBjcmVhdGUgZmlsZXN5c3RlbSB3aXRoIHJlcXVlc3RlZCBudW1iZXIgb2YgaW5vZGVzIgorbXNnc3RyICLQodGC0LLQvtGA0LXQvdC90Y8g0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCDQtyDQsdCw0LbQsNC90L7RjiDQutGW0LvRjNC60ZbRgdGC0Y4gaW5vZGUg0L3QtdC80L7QttC70LjQstC1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAzCittc2dpZCAiRTJpbWFnZSBzbmFwc2hvdCBub3QgaW4gdXNlIgorbXNnc3RyICLQl9C90ZbQvNC+0LogZTJpbWFnZSDQvdC1INCy0LjQutC+0YDQuNGB0YLQvtCy0YPRlNGC0YzRgdGPIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA0Cittc2dpZCAiVG9vIG1hbnkgcmVzZXJ2ZWQgZ3JvdXAgZGVzY3JpcHRvciBibG9ja3MiCittc2dzdHIgItCX0LDQvdCw0LTRgtC+INCx0LDQs9Cw0YLQviDQsdC70L7QutGW0LIg0LTQtdGB0LrRgNC40L/RgtC+0YDRltCyINC30LDRgNC10LfQtdGA0LLQvtCy0LDQvdC40YUg0LPRgNGD0L8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDUKK21zZ2lkICJSZXNpemUgaW5vZGUgaXMgY29ycnVwdCIKK21zZ3N0ciAiSW5vZGUg0LfQvNGW0L3QuCDRgNC+0LfQvNGW0YDRltCyINC/0L7RiNC60L7QtNC20LXQvdC+IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA2Cittc2dpZCAiVHJpZWQgdG8gc2V0IGJsb2NrIGJtYXAgd2l0aCBtaXNzaW5nIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICLQodC/0YDQvtCx0LAg0LLRgdGC0LDQvdC+0LLQu9C10L3QvdGPIGJtYXAg0LHQu9C+0LrRgyDQtyDQv9GA0L7Qv9GD0YnQtdC90LjQvCDQvtC/0L7RgdC10YDQtdC00LrQvtCy0LDQvdC40Lwg0LHQu9C+0LrQvtC8IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA3Cittc2dpZCAiVERCOiBTdWNjZXNzIgorbXNnc3RyICJUREI6INCy0LjQutC+0L3QsNC90L4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDgKK21zZ2lkICJUREI6IENvcnJ1cHQgZGF0YWJhc2UiCittc2dzdHIgIlREQjog0L/QvtGI0LrQvtC00LbQtdC90LAg0LHQsNC30LAg0LTQsNC90LjRhSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOQorbXNnaWQgIlREQjogSU8gRXJyb3IiCittc2dzdHIgIlREQjog0L/QvtC80LjQu9C60LAg0LLQstC10LTQtdC90L3Rjy3QstC40LLQtdC00LXQvdC90Y8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTAKK21zZ2lkICJUREI6IExvY2tpbmcgZXJyb3IiCittc2dzdHIgIlREQjog0L/QvtC80LjQu9C60LAg0LHQu9C+0LrRg9Cy0LDQvdC90Y8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTEKK21zZ2lkICJUREI6IE91dCBvZiBtZW1vcnkiCittc2dzdHIgIlREQjog0L3QtSDQstC40YHRgtCw0YfQsNGUINC/0LDQvOKAmdGP0YLRliIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMgorbXNnaWQgIlREQjogUmVjb3JkIGV4aXN0cyIKK21zZ3N0ciAiVERCOiDQt9Cw0L/QuNGBINCy0LbQtSDRltGB0L3Rg9GUIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEzCittc2dpZCAiVERCOiBMb2NrIGV4aXN0cyBvbiBvdGhlciBrZXlzIgorbXNnc3RyICJUREI6INCx0LvQvtC60YPQstCw0L3QvdGPINCy0LbQtSDRltGB0L3Rg9GUINC00LvRjyDRltC90YjQuNGFINC60LvRjtGH0ZbQsiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNAorbXNnaWQgIlREQjogSW52YWxpZCBwYXJhbWV0ZXIiCittc2dzdHIgIlREQjog0L3QtdC60L7RgNC10LrRgtC90LjQuSDQv9Cw0YDQsNC80LXRgtGAIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE1Cittc2dpZCAiVERCOiBSZWNvcmQgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIlREQjog0LfQsNC/0LjRgdGDINC90LUg0ZbRgdC90YPRlCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNgorbXNnaWQgIlREQjogV3JpdGUgbm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiVERCOiDQt9Cw0L/QuNGBINC30LDQsdC+0YDQvtC90LXQvdC+IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE3Cittc2dpZCAiRXh0MmZzIGRpcmVjdG9yeSBibG9jayBsaXN0IGlzIGVtcHR5IgorbXNnc3RyICLQodC/0LjRgdC+0Log0LHQu9C+0LrRg9Cy0LDQvdGMINC60LDRgtCw0LvQvtCz0ZbQsiBleHQyZnMg0ZQg0L/QvtGA0L7QttC90ZbQvCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOAorbXNnaWQgIkF0dGVtcHQgdG8gbW9kaWZ5IGEgYmxvY2sgbWFwcGluZyB2aWEgYSByZWFkLW9ubHkgYmxvY2sgaXRlcmF0b3IiCittc2dzdHIgIiIKKyLQodC/0YDQvtCx0LAg0LfQvNGW0L3QuNGC0Lgg0L/RgNC40LLigJnRj9C30LrRgyDQsdC70L7QutGW0LIg0LfQsCDQtNC+0L/QvtC80L7Qs9C+0Y4g0ZbRgtC10YDQsNGC0L7RgNCwLCDQv9GA0LjQtNCw0YLQvdC+0LPQviDQu9C40YjQtSDQtNC70Y8gIgorItGH0LjRgtCw0L3QvdGPIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBzYXZlZCBwYXRoIgorbXNnc3RyICIiCisi0J/QvtC80LjQu9C60L7QstC1INC30L3QsNGH0LXQvdC90Y8g0LrQvtC90YLRgNC+0LvRjNC90L7RlyDRgdGD0LzQuCDQtNC70Y8g0LfQsdC10YDQtdC20LXQvdC+0LPQviDRiNC70Y/RhdGDINGA0L7Qt9GI0LjRgNC10L3QvdGPIGV4dDQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBnZW5lcmljIGJpdG1hcCIKK21zZ3N0ciAi0J/QvtC80LjQu9C60L7QstCwINC60L7QvdGC0YDQvtC70YzQvdCwINGB0YPQvNCwINC00LvRjyA2NC3QsdGW0YLQvtCy0L7RlyDQt9Cw0LPQsNC70YzQvdC+0Zcg0LHRltGC0L7QstC+0Zcg0LrQsNGA0YLQuCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAi0J/QvtC80LjQu9C60L7QstCwINC60L7QvdGC0YDQvtC70YzQvdCwINGB0YPQvNCwINC00LvRjyA2NC3QsdGW0YLQvtCy0L7RlyDQutCw0YDRgtC4INCx0LvQvtC60ZbQsiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGlub2RlIGJpdG1hcCIKK21zZ3N0ciAi0J/QvtC80LjQu9C60L7QstCwINC60L7QvdGC0YDQvtC70YzQvdCwINGB0YPQvNCwINC00LvRjyA2NC3QsdGW0YLQvtCy0L7RlyDQutCw0YDRgtC4IGlub2RlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xMyIKK21zZ3N0ciAi0J/QvtC80LjQu9C60L7QstCwINC60L7QvdGC0YDQvtC70YzQvdCwINGB0YPQvNCwIC0tLSBSRVNFUlZFRF8xMyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTQiCittc2dzdHIgItCf0L7QvNC40LvQutC+0LLQsCDQutC+0L3RgtGA0L7Qu9GM0L3QsCDRgdGD0LzQsCAtLS0gUkVTRVJWRURfMTQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE1IgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LAg0LrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAgLS0tIFJFU0VSVkVEXzE1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60L7QstCwINC60L7QvdGC0YDQvtC70YzQvdCwINGB0YPQvNCwIC0tLSBSRVNFUlZFRF8xNiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTciCittc2dzdHIgItCf0L7QvNC40LvQutC+0LLQsCDQutC+0L3RgtGA0L7Qu9GM0L3QsCDRgdGD0LzQsCAtLS0gUkVTRVJWRURfMTciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE4IgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LAg0LrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAgLS0tIFJFU0VSVkVEXzE4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOSIKK21zZ3N0ciAi0J/QvtC80LjQu9C60L7QstCwINC60L7QvdGC0YDQvtC70YzQvdCwINGB0YPQvNCwIC0tLSBSRVNFUlZFRF8xOCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMAorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGhlYWRlciIKK21zZ3N0ciAi0J/QvtGI0LrQvtC00LbQtdC90L4g0LfQsNCz0L7Qu9C+0LLQvtC6INGA0L7Qt9GI0LjRgNC10L3QvdGPIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMxCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaW5kZXgiCittc2dzdHIgItCf0L7RiNC60L7QtNC20LXQvdC+INC/0L7QutCw0LbRh9C40Log0YDQvtC30YjQuNGA0LXQvdC90Y8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzIKK21zZ2lkICJDb3JydXB0IGV4dGVudCIKK21zZ3N0ciAi0J/QvtGI0LrQvtC00LbQtdC90L4g0YDQvtC30YjQuNGA0LXQvdC90Y8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzMKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIGV4dGVudCBtYXAiCittc2dzdHIgItCjINC60LDRgNGC0ZYg0YDQvtC30YjQuNGA0LXQvdC90Y8g0L3QtdC80LDRlCDQstGW0LvRjNC90L7Qs9C+INC80ZbRgdGG0Y8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzQKK21zZ2lkICJJbm9kZSBkb2VzIG5vdCB1c2UgZXh0ZW50cyIKK21zZ3N0ciAi0KMgaW5vZGUg0L3QtSDQstC40LrQvtGA0LjRgdGC0L7QstGD0Y7RgtGM0YHRjyDRgNC+0LfRiNC40YDQtdC90L3RjyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNQorbXNnaWQgIk5vICduZXh0JyBleHRlbnQiCittc2dzdHIgItCd0LXQvNCw0ZQgwqvQvdCw0YHRgtGD0L/QvdC+0LPQvsK7INGA0L7Qt9GI0LjRgNC10L3QvdGPIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM2Cittc2dpZCAiTm8gJ3ByZXZpb3VzJyBleHRlbnQiCittc2dzdHIgItCd0LXQvNCw0ZQgwqvQv9C+0L/QtdGA0LXQtNC90YzQvtCz0L7CuyDRgNC+0LfRiNC40YDQtdC90L3RjyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNworbXNnaWQgIk5vICd1cCcgZXh0ZW50IgorbXNnc3RyICLQndC10LzQsNGUINGA0L7Qt9GI0LjRgNC10L3QvdGPIMKr0LLQs9C+0YDRg8K7IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAi0J3QtdC80LDRlCDRgNC+0LfRiNC40YDQtdC90L3RjyDCq9Cy0L3QuNC3wrsiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzkKK21zZ2lkICJObyBjdXJyZW50IG5vZGUiCittc2dzdHIgItCd0LXQvNCw0ZQg0L/QvtGC0L7Rh9C90L7Qs9C+INCy0YPQt9C70LAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDAKK21zZ2lkICJFeHQyZnMgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgItCf0ZbQtNGC0YDQuNC80LrQuCDQtNGW0Zcg0YMgZXh0MmZzINC90LUg0L/QtdGA0LXQtNCx0LDRh9C10L3QviIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICLQlNC70Y8g0LLRgdGC0LDQstC70LXQvdC90Y8g0YDQvtC30YjQuNGA0LXQvdC90Y8g0LTQviDQstGD0LfQu9CwINC90LUg0LLQuNGB0YLQsNGH0LDRlCDQvNGW0YHRhtGPIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQyCittc2dpZCAiU3BsaXR0aW5nIHdvdWxkIHJlc3VsdCBpbiBlbXB0eSBub2RlIgorbXNnc3RyICLQn9C+0LTRltC7INC/0YDQuNC30LLQtdC00LUg0LTQviDQv9C+0Y/QstC4INC/0L7RgNC+0LbQvdGM0L7Qs9C+INCy0YPQt9C70LAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDMKK21zZ2lkICJFeHRlbnQgbm90IGZvdW5kIgorbXNnc3RyICLQoNC+0LfRiNC40YDQtdC90L3RjyDQvdC1INC30L3QsNC50LTQtdC90L4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDQKK21zZ2lkICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgaW5vZGVzIGNvbnRhaW5pbmcgZXh0ZW50cyIKK21zZ3N0ciAi0J/RltC00YLRgNC40LzQutC4INC00ZbRlyDQtNC70Y8gaW5vZGUsINGJ0L4g0LzRltGB0YLRj9GC0Ywg0YDQvtC30YjQuNGA0LXQvdC90Y8sINC90LUg0L/QtdGA0LXQtNCx0LDRh9C10L3QviIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LAg0LTQvtCy0LbQuNC90LAg0YDQvtC30YjQuNGA0LXQvdC90Y8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDYKK21zZ2lkICJJL08gQ2hhbm5lbCBkb2VzIG5vdCBzdXBwb3J0IDY0LWJpdCBibG9jayBudW1iZXJzIgorbXNnc3RyICLQoyDQutCw0L3QsNC70ZYg0LLQstC10LTQtdC90L3Rjy3QstC40LLQtdC00LXQvdC90Y8g0L3QtSDQv9C10YDQtdC00LHQsNGH0LXQvdC+IDY0LdCx0ZbRgtC+0LLQuNGFINC90L7QvNC10YDRltCyINCx0LvQvtC60ZbQsiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NworbXNnaWQgIkNhbid0IGNoZWNrIGlmIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBkdWUgdG8gbWlzc2luZyBtdGFiIGZpbGUiCittc2dzdHIgIiIKKyLQndC1INCy0LTQsNC70L7RgdGPINC/0LXRgNC10LLRltGA0LjRgtC4LCDRh9C4INC30LzQvtC90YLQvtCy0LDQvdC+INGE0LDQudC70L7QstGDINGB0LjRgdGC0LXQvNGDLCDQvtGB0LrRltC70YzQutC4INC90LXQvNCw0ZQg0YTQsNC50LvQsCAiCisibXRhYiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OAorbXNnaWQgIkZpbGVzeXN0ZW0gdG9vIGxhcmdlIHRvIHVzZSBsZWdhY3kgYml0bWFwcyIKK21zZ3N0ciAiIgorItCk0LDQudC70L7QstCwINGB0LjRgdGC0LXQvNCwINGUINC90LDQtNGC0L4g0LLQtdC70LjQutC+0Y4g0LTQu9GPINCy0LjQutC+0YDQuNGB0YLQsNC90L3RjyDQt9Cw0YHRgtCw0YDRltC70LjRhSDQsdGW0YLQvtCy0LjRhSDQutCw0YDRgiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OQorbXNnaWQgIk1NUDogaW52YWxpZCBtYWdpYyBudW1iZXIiCittc2dzdHIgIk1NUDog0L3QtdC60L7RgNC10LrRgtC90LAg0LrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTAKK21zZ2lkICJNTVA6IGRldmljZSBjdXJyZW50bHkgYWN0aXZlIgorbXNnc3RyICJNTVA6INC30LDRgNCw0Lcg0L/RgNC40YHRgtGA0ZbQuSDQstC40LrQvtGA0LjRgdGC0L7QstGD0ZTRgtGM0YHRjyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MQorbXNnaWQgIk1NUDogZnNjayBiZWluZyBydW4iCittc2dzdHIgIk1NUDog0LLQuNC60L7QvdGD0ZTRgtGM0YHRjyBmc2NrIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUyCittc2dpZCAiTU1QOiBibG9jayBudW1iZXIgYmV5b25kIGZpbGVzeXN0ZW0gcmFuZ2UiCittc2dzdHIgIk1NUDog0L3QvtC80LXRgCDQsdC70L7QutGDINC/0L7Qt9CwINC80LXQttCw0LzQuCDQtNGW0LDQv9Cw0LfQvtC90YMg0YTQsNC50LvQvtCy0L7RlyDRgdC40YHRgtC10LzQuCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MworbXNnaWQgIk1NUDogdW5kZXJnb2luZyBhbiB1bmtub3duIG9wZXJhdGlvbiIKK21zZ3N0ciAiTU1QOiDQstC40LrQvtC90YPRlNGC0YzRgdGPINC90LXQstGW0LTQvtC80LAg0LTRltGPIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU0Cittc2dpZCAiTU1QOiBmaWxlc3lzdGVtIHN0aWxsIGluIHVzZSIKK21zZ3N0ciAiTU1QOiDRhNCw0LnQu9C+0LLQsCDRgdC40YHRgtC10LzQsCDQstGB0LUg0YnQtSDQstC40LrQvtGA0LjRgdGC0L7QstGD0ZTRgtGM0YHRjyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NQorbXNnaWQgIk1NUDogb3BlbiB3aXRoIE9fRElSRUNUIGZhaWxlZCIKK21zZ3N0ciAiTU1QOiDRgdC/0YDQvtCx0LAg0LLRltC00LrRgNC40YLRgtGPINC30LAg0LTQvtC/0L7QvNC+0LPQvtGOIE9fRElSRUNUINC30LDQt9C90LDQu9CwINC90LXQstC00LDRh9GWIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU2Cittc2dpZCAiQmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBzaXplIGluY29ycmVjdCIKK21zZ3N0ciAi0J/QvtC80LjQu9C60L7QstC40Lkg0YDQvtC30LzRltGAINC00LXRgdC60YDQuNC/0YLQvtGA0LAg0LPRgNGD0L/QuCDQsdC70L7QutGW0LIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTcKK21zZ2lkICJJbm9kZSBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBpbm9kZSIKK21zZ3N0ciAi0JrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAgaW5vZGUg0L3QtSDQstGW0LTQv9C+0LLRltC00LDRlCBpbm9kZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OAorbXNnaWQgIklub2RlIGJpdG1hcCBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBiaXRtYXAiCittc2dzdHIgItCa0L7QvdGC0YDQvtC70YzQvdCwINGB0YPQvNCwINCx0ZbRgtC+0LLQvtGXINC60LDRgNGC0LggaW5vZGUg0L3QtSDQstGW0LTQv9C+0LLRltC00LDRlCDQsdGW0YLQvtCy0ZbQuSDQutCw0YDRgtGWIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU5Cittc2dpZCAiRXh0ZW50IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGV4dGVudCBibG9jayIKK21zZ3N0ciAi0JrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAg0LHQu9C+0LrRgyDRgNC+0LfRiNC40YDQtdC90L3RjyDQvdC1INCy0ZbQtNC/0L7QstGW0LTQsNGUINCx0LvQvtC60YMg0YDQvtC30YjQuNGA0LXQvdC90Y8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjAKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgZG9lcyBub3QgaGF2ZSBzcGFjZSBmb3IgY2hlY2tzdW0iCittc2dzdHIgItCjINCx0LvQvtGG0ZYg0LrQsNGC0LDQu9C+0LPRgyDQvdC10LTQvtGB0YLQsNGC0L3RjNC+INC80ZbRgdGG0Y8g0LTQu9GPINC60L7QvdGC0YDQvtC70YzQvdC+0Zcg0YHRg9C80LgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjEKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICLQmtC+0L3RgtGA0L7Qu9GM0L3QsCDRgdGD0LzQsCDQsdC70L7QutGDINC60LDRgtCw0LvQvtCz0YMg0L3QtSDQstGW0LTQv9C+0LLRltC00LDRlCDQsdC70L7QutGDINC60LDRgtCw0LvQvtCz0YMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjIKK21zZ2lkICJFeHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYmxvY2siCittc2dzdHIgItCa0L7QvdGC0YDQvtC70YzQvdCwINGB0YPQvNCwINCx0LvQvtC60YMg0YDQvtC30YjQuNGA0LXQvdC+0LPQviDQsNGC0YDQuNCx0YPRgtCwINC90LUg0LLRltC00L/QvtCy0ZbQtNCw0ZQg0LHQu9C+0LrRgyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MworbXNnaWQgIlN1cGVyYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggc3VwZXJibG9jayIKK21zZ3N0ciAi0JrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAg0YHRg9C/0LXRgNCx0LvQvtC60YMg0L3QtSDQstGW0LTQv9C+0LLRltC00LDRlCDRgdGD0L/QtdGA0LHQu9C+0LrRgyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NAorbXNnaWQgIlVua25vd24gY2hlY2tzdW0gYWxnb3JpdGhtIgorbXNnc3RyICLQndC10LLRltC00L7QvNC40Lkg0LDQu9Cz0L7RgNC40YLQvCDQvtCx0YfQuNGB0LvQtdC90L3RjyDQutC+0L3RgtGA0L7Qu9GM0L3QvtGXINGB0YPQvNC4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY1Cittc2dpZCAiTU1QIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIE1NUCBibG9jayIKK21zZ3N0ciAi0JrQvtC90YLRgNC+0LvRjNC90LAg0YHRg9C80LAg0LHQu9C+0LrRgyBNTVAg0L3QtSDQstGW0LTQv9C+0LLRltC00LDRlCDQsdC70L7QutGDIE1NUCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NgorbXNnaWQgIkV4dDIgZmlsZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi0KTQsNC50LsgZXh0MiDQstC20LUg0ZbRgdC90YPRlCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTEKK21zZ2lkICJQcm9maWxlIHZlcnNpb24gMC4wIgorbXNnc3RyICLQktC10YDRgdGW0Y8g0L/RgNC+0YTRltC70Y4gMC4wIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX25vZGUiCittc2dzdHIgItCf0L7QvNC40LvQutC+0LLQtSDQt9C90LDRh9C10L3QvdGPINC60L7QvdGC0YDQvtC70YzQvdC+0Zcg0YHRg9C80Lgg0YMgcHJvZmlsZV9ub2RlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMworbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBub3QgZm91bmQiCittc2dzdHIgItCg0L7Qt9C00ZbQuyDQv9GA0L7RhNGW0LvRjiDQvdC1INC30L3QsNC50LTQtdC90L4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE0Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgItCX0LLigJnRj9C30L7QuiDQv9GA0L7RhNGW0LvRjiDQvdC1INC30L3QsNC50LTQtdC90L4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE1Cittc2dpZCAiQXR0ZW1wdCB0byBhZGQgYSByZWxhdGlvbiB0byBub2RlIHdoaWNoIGlzIG5vdCBhIHNlY3Rpb24iCittc2dzdHIgItCh0L/RgNC+0LHQsCDQtNC+0LTQsNGC0Lgg0LfQsuKAmdGP0LfQvtC6INC00L4g0LLRg9C30LvQsCwg0Y/QutC40Lkg0L3QtSDRlCDRgNC+0LfQtNGW0LvQvtC8IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNgorbXNnaWQgIkEgcHJvZmlsZSBzZWN0aW9uIGhlYWRlciBoYXMgYSBub24temVybyB2YWx1ZSIKK21zZ3N0ciAi0JfQsNCz0L7Qu9C+0LLQvtC6INGA0L7Qt9C00ZbQu9GDINC/0YDQvtGE0ZbQu9GOINC80ZbRgdGC0LjRgtGMINC90LXQvdGD0LvRjNC+0LLQtSDQt9C90LDRh9C10L3QvdGPIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNworbXNnaWQgIkJhZCBsaW5rZWQgbGlzdCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgItCf0L7QvNC40LvQutC+0LLQuNC5INC30LLigJnRj9C30LDQvdC40Lkg0YHQv9C40YHQvtC6INGDINGB0YLRgNGD0LrRgtGD0YDQsNGFINC/0YDQvtGE0ZbQu9GOIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOAorbXNnaWQgIkJhZCBncm91cCBsZXZlbCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgItCf0L7QvNC40LvQutC+0LLQuNC5INCz0YDRg9C/0L7QstC40Lkg0YDRltCy0LXQvdGMINGDINGB0YLRgNGD0LrRgtGD0YDQsNGFINC/0YDQvtGE0ZbQu9GOIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOQorbXNnaWQgIkJhZCBwYXJlbnQgcG9pbnRlciBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgItCf0L7QvNC40LvQutC+0LLQuNC5INCx0LDRgtGM0LrRltCy0YHRjNC60LjQuSDQstC60LDQt9GW0LLQvdC40Log0YMg0YHRgtGA0YPQutGC0YPRgNCw0YUg0L/RgNC+0YTRltC70Y4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGUgaXRlcmF0b3IiCittc2dzdHIgItCf0L7QvNC40LvQutC+0LLQtSDQt9C90LDRh9C10L3QvdGPINC60L7QvdGC0YDQvtC70YzQvdC+0Zcg0YHRg9C80Lgg0YMg0ZbRgtC10YDQsNGC0L7RgNGWINC/0YDQvtGE0ZbQu9GOIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMQorbXNnaWQgIkNhbid0IHNldCB2YWx1ZSBvbiBzZWN0aW9uIG5vZGUiCittc2dzdHIgItCd0LUg0LzQvtC20L3QsCDQstGB0YLQsNC90L7QstC70Y7QstCw0YLQuCDQt9C90LDRh9C10L3QvdGPINC90LAg0LLRg9C30LvRliDRgNC+0LfQtNGW0LvRgyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCittc2dzdHIgItCR0ZbQsdC70ZbQvtGC0LXRhtGWINC/0YDQvtGE0ZbQu9GOINC/0LXRgNC10LTQsNC90L4g0L3QtdC60L7RgNC10LrRgtC90LjQuSDQsNGA0LPRg9C80LXQvdGCIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMworbXNnaWQgIkF0dGVtcHQgdG8gbW9kaWZ5IHJlYWQtb25seSBwcm9maWxlIgorbXNnc3RyICLQodC/0YDQvtCx0LAg0LLQvdC10YHRgtC4INC30LzRltC90Lgg0LTQviDQv9GA0L7RhNGW0LvRjiwg0L/RgNC40LTQsNGC0L3QvtCz0L4g0LvQuNGI0LUg0LTQu9GPINGH0LjRgtCw0L3QvdGPIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNAorbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgbm90IGF0IHRvcCBsZXZlbCIKK21zZ3N0ciAi0JfQsNCz0L7Qu9C+0LLQvtC6INGA0L7Qt9C00ZbQu9GDINC/0YDQvtGE0ZbQu9GOINC90LUg0L/QtdGA0LXQsdGD0LLQsNGUINC90LAg0L3QsNC50LLQuNGJ0L7QvNGDINGA0ZbQstC90ZYiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI1Cittc2dpZCAiU3ludGF4IGVycm9yIGluIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIiCittc2dzdHIgItCh0LjQvdGC0LDQutGB0LjRh9C90LAg0L/QvtC80LjQu9C60LAg0YMg0LfQsNCz0L7Qu9C+0LLQutGDINGA0L7Qt9C00ZbQu9GDINC/0YDQvtGE0ZbQu9GOIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNgorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHJlbGF0aW9uIgorbXNnc3RyICLQodC40L3RgtCw0LrRgdC40YfQvdCwINC/0L7QvNC40LvQutCwINGDINC30LDQv9C40YHRgyDQt9Cy4oCZ0Y/Qt9C60YMg0L/RgNC+0YTRltC70Y4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI3Cittc2dpZCAiRXh0cmEgY2xvc2luZyBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICLQl9Cw0LnQstCwINC30LDQstC10YDRiNCw0LvRjNC90LAg0LTRg9C20LrQsCDRgyDQv9GA0L7RhNGW0LvRliIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjgKK21zZ2lkICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAi0KMg0L/RgNC+0YTRltC70ZYg0L3QtSDQstC40YHRgtCw0YfQsNGUINC/0L7Rh9Cw0YLQutC+0LLQvtGXINGE0ZbQs9GD0YDQvdC+0Zcg0LTRg9C20LrQuCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjkKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV90IgorbXNnc3RyICLQn9C+0LzQuNC70LrQvtCy0LUg0LfQvdCw0YfQtdC90L3RjyDQutC+0L3RgtGA0L7Qu9GM0L3QvtGXINGB0YPQvNC4INGDIHByb2ZpbGVfdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9zZWN0aW9uX3QiCittc2dzdHIgItCf0L7QvNC40LvQutC+0LLQtSDQt9C90LDRh9C10L3QvdGPINC60L7QvdGC0YDQvtC70YzQvdC+0Zcg0YHRg9C80Lgg0YMgcHJvZmlsZV9zZWN0aW9uX3QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMxCittc2dpZCAiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgItCG0YLQtdGA0LDRhtGW0Y8g0YPRgdGW0LzQsCDRgNC+0LfQtNGW0LvQsNC80Lgg0LLQtdGA0YXQvdGM0L7Qs9C+INGA0ZbQstC90Y8g0L3QtSDQv9GW0LTRgtGA0LjQvNGD0ZTRgtGM0YHRjyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzIKK21zZ2lkICJJbnZhbGlkIHByb2ZpbGVfc2VjdGlvbiBvYmplY3QiCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdC40Lkg0L7QseKAmdGU0LrRgiBwcm9maWxlX3NlY3Rpb24iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMzCittc2dpZCAiTm8gbW9yZSBzZWN0aW9ucyIKK21zZ3N0ciAi0JHRltC70YzRiNC1INC90LXQvNCw0ZQg0YDQvtC30LTRltC70ZbQsiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzQKK21zZ2lkICJCYWQgbmFtZXNldCBwYXNzZWQgdG8gcXVlcnkgcm91dGluZSIKK21zZ3N0ciAi0J/RltC00L/RgNC+0LPRgNCw0LzRliDQvtCx0YDQvtCx0LrQuCDQt9Cw0L/QuNGC0ZbQsiDQv9C10YDQtdC00LDQvdC+INC/0L7QvNC40LvQutC+0LLQuNC5INC90LDQsdGW0YAg0L3QsNC30LIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgItCd0LUg0LLRltC00LrRgNC40YLQviDQttC+0LTQvdC+0LPQviDRhNCw0LnQu9CwINC/0YDQvtGE0ZbQu9GOIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX2ZpbGVfdCIKK21zZ3N0ciAi0J/QvtC80LjQu9C60L7QstC1INC30L3QsNGH0LXQvdC90Y8g0LzQsNCz0ZbRh9C90L7RlyDRgdGD0LzQuCDRgyBwcm9maWxlX2ZpbGVfdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzcKK21zZ2lkICJDb3VsZG4ndCBvcGVuIHByb2ZpbGUgZmlsZSIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQstGW0LTQutGA0LjRgtC4INGE0LDQudC7INC/0YDQvtGE0ZbQu9GOIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOAorbXNnaWQgIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgItCg0L7Qt9C00ZbQuyDQstC20LUg0ZbRgdC90YPRlCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzkKK21zZ2lkICJJbnZhbGlkIGJvb2xlYW4gdmFsdWUiCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdC1INCx0YPQu9C10LLQtSDQt9C90LDRh9C10L3QvdGPIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzo0MAorbXNnaWQgIkludmFsaWQgaW50ZWdlciB2YWx1ZSIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LUg0YbRltC70LUg0LfQvdCw0YfQtdC90L3RjyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDEKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX2RhdGFfdCIKK21zZ3N0ciAi0J/QvtC80LjQu9C60L7QstC1INC30L3QsNGH0LXQvdC90Y8g0LzQsNCz0ZbRh9C90L7RlyDRgdGD0LzQuCDRgyBwcm9maWxlX2ZpbGVfZGF0YV90IgorCisjfiBtc2dpZCAiIgorI34gIlxiXGJcYlxiXGJcYlxiXGJDb3BpZWQgJWxsdSAvICVsbHUgYmxvY2tzICglbGx1JSUpIGluICVzIGF0ICUuMmYgTUIvIgorI34gInMgICAgICAgXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcYlxiXGJcYlxiXGJcYlxi0KHQutC+0L/RltC50L7QstCw0L3QviAlbGx1INC3ICVsbHUg0LHQu9C+0LrRltCyICglbGx1JSUpINC30LAgJXMg0LfRliAiCisjfiAi0YjQstC40LTQutGW0YHRgtGOICUuMmYg0JzQkS/RgVxuIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIldhcm5pbmc6IHRoZSBxdW90YSBmZWF0dXJlIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50XG4iCisjfiAiU2VlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL1F1b3RhIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICLQn9C+0L/QtdGA0LXQtNC20LXQvdC90Y86INGA0L7Qt9GA0L7QsdC60YMg0ZYg0YLQtdGB0YLRg9Cy0LDQvdC90Y8g0LzQvtC20LvQuNCy0L7RgdGC0ZYgcXVvdGEg0YnQtSDQvdC1INC30LDQstC10YDRiNC10L3QvlxuIgorI34gItCU0L7QutC70LDQtNC90ZbRiNCwINGW0L3RhNC+0YDQvNCw0YbRltGPOiBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9RdW90YVxuIgorI34gIlxuIgorCisjfiBtc2dpZCAiQ291bGQgbm90IHN0YXQgJXMgLS0tICVzXG4iCisjfiBtc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDRgdGC0LDRgtC40YHRgtC40YfQvdGWINC00LDQvdGWINGJ0L7QtNC+ICVzIC0tLSAlc1xuIgpkaWZmIC0tZ2l0IGEvcG8vdmkuZ21vIGIvcG8vdmkuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NmMxNjUKLS0tIC9kZXYvbnVsbAorKysgYi9wby92aS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vdmkucG8gYi9wby92aS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODU5MDZlCi0tLSAvZGV2L251bGwKKysrIGIvcG8vdmkucG8KQEAgLTAsMCArMSw3MjE1IEBACisjIFZpZXRuYW1lc2UgdHJhbnNsYXRpb24gZm9yIGUyZnNwcm9ncy4KKyMgQuG6o24gZOG7i2NoIHRp4bq/bmcgVmnhu4d0IGTDoG5oIGNobyBlMmZzcHJvZ3MuCisjIENvcHlyaWdodCDCqSAyMDE0IFRoZW9kb3JlIFRzbyAobXNnaWRzKQorIyBDb3B5cmlnaHQgwqkgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGUyZnNwcm9ncyBwYWNrYWdlLgorIyBDbHl0aWUgU2lkZGFsbCA8Y2x5dGllQHJpdmVybGFuZC5uZXQuYXU+LCAyMDA2LTIwMTAuCisjIFRy4bqnbiBOZ+G7jWMgUXXDom4gPHZud2lsZG1hbkBnbWFpbC5jb20+LCAyMDEyLTIwMTQuCisjCisjLiBUaGUgc3RyaW5ncyBpbiBlMmZzY2sncyBwcm9ibGVtLmMgY2FuIGJlIHZlcnkgaGFyZCB0byB0cmFuc2xhdGUsCisjLiBzaW5jZSB0aGUgc3RyaW5ncyBhcmUgZXhwYW5kZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgRmlyc3Qgb2YgYWxsLAorIy4gdGhlcmUgaXMgYW4gQC1leHBhbnNpb24sIHdoZXJlIHN0cmluZ3MgbGlrZSAiQGkiIGFyZSBleHBhbmRlZCB0bworIy4gImlub2RlIiwgYW5kIHNvIG9uLiAgSW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRyYW5zbGF0b3JzLCB0aGUKKyMuIGUyZnNwcm9ncyBwbyB0ZW1wbGF0ZSBmaWxlIGhhcyBiZWVuIGVuaGFuY2VkIHdpdGggY29tbWVudHMgdGhhdCBzaG93CisjLiB0aGUgQC1leHBhbnNpb24sIGZvciB0aGUgc3RyaW5ncyBpbiB0aGUgcHJvYmxlbS5jIGZpbGUuCisjLgorIy4gVHJhbnNsYXRvcnMgYXJlIGZyZWUgdG8gdXNlIHRoZSBALWV4cGFuc2lvbiBmYWNpbGl0eSBpZiB0aGV5IHNvCisjLiBjaG9vc2UsIGJ5IHByb3ZpZGluZyB0cmFuc2xhdGlvbnMgZm9yIHN0cmluZ3MgaW4gZTJmc2NrL21lc3NhZ2UuYy4KKyMuIFRoZXNlIHRyYW5zbGF0aW9uIGNhbiBjb21wbGV0ZWx5IHJlcGxhY2UgYW4gZXhwYW5zaW9uOyBmb3IgZXhhbXBsZSwKKyMuIGlmICJiYmxvY2siICh3aGljaCBpbmRpY2F0ZWQgdGhhdCAiQGIiIHdvdWxkIGJlIGV4cGFuZGVkIHRvICJibG9jayIpCisjLiBpcyB0cmFuc2xhdGVkIGFzICJkZGF0ZW52ZXJsdXN0IiwgdGhlbiAiQGQiIHdpbGwgYmUgZXhwYW5kZWQgdG8KKyMuICJkYXRlbnZlcmx1c3QiLiAgQWx0ZXJuYXRpdmVseSwgdHJhbnNsYXRvcnMgY2FuIHNpbXBseSBub3QgdXNlIHRoZQorIy4gQC1leHBhbnNpb24gZmFjaWxpdHkgYXQgYWxsLgorIy4KKyMuIFRoZSBzZWNvbmQgZXhwYW5zaW9uIHdoaWNoIGlzIGRvbmUgZm9yIGUyZnNjaydzIHByb2JsZW0uYyBtZXNzYWdlcyBpcworIy4gYSBkeW5hbWljICUtZXhwYW5zaW9uLCB3aGljaCBleHBhbmRzICVpIGFzIGFuIGlub2RlIG51bWJlciwgYW5kIHNvCisjLiBvbi4gIEEgdGFibGUgb2YgdGhlc2UgZXhwYW5zaW9ucyBjYW4gYmUgZm91bmQgYmVsb3cuICBOb3RlIHRoYXQKKyMuICUtZXhwcmVzc2lvbnMgdGhhdCBiZWdpbiB3aXRoICIlRCIgYW5kICIlSSIgYXJlIHR3by1jaGFyYWN0ZXIKKyMuIGV4cGFuc2lvbnM7IHNvIGZvciBleGFtcGxlLCAiJUl1IiBleHBhbmRzIHRvIHRoZSBpbm9kZSdzIHVzZXIgaWQKKyMuIG93bmVyc2hpcCBmaWVsZCAoaW5vZGUtPmlfdWlkKS4gIEFsc28gdGhlICIlQiIgZXhwYW5zaW9uIGlzIHNwZWNpYWw6CisjLiBpdCBjYW4gZXhwYW5kIHRvIGVpdGhlciB0aGUgc3RyaW5nICJpbmRpcmVjdCBibG9jayIgKHBvc3NpYmx5IHByZWNlZGVkCisjLiBieSB0aGUgd29yZCAiZG91YmxlIiBvciAidHJpcGxlIiksIG9yIHRoZSBzdHJpbmcgImJsb2NrICMiIGltbWVkaWF0ZWx5CisjLiBmb2xsb3dlZCBieSBhbiBpbnRlZ2VyIGluZGljYXRpbmcgYSBibG9jayBzZXF1ZW5jZSBudW1iZXIuCisjLiAgCisjLiAJJWIJPGJsaz4JCQlibG9jayBudW1iZXIKKyMuIAklQgkiaW5kaXJlY3QgYmxvY2siIHwgImJsb2NrICMiPGJsa2NvdW50PglzdHJpbmcgfCBzdHJpbmcraW50ZWdlcgorIy4gCSVjCTxibGsyPgkJCWJsb2NrIG51bWJlcgorIy4gCSVEaQk8ZGlyZW50PiAtPiBpbm8JCWlub2RlIG51bWJlcgorIy4gCSVEbgk8ZGlyZW50PiAtPiBuYW1lCXN0cmluZworIy4gCSVEcgk8ZGlyZW50PiAtPiByZWNfbGVuCisjLiAJJURsCTxkaXJlbnQ+IC0+IG5hbWVfbGVuCisjLiAJJUR0CTxkaXJlbnQ+IC0+IGZpbGV0eXBlCisjLiAJJWQJPGRpcj4gCQkJaW5vZGUgbnVtYmVyCisjLiAJJWcJPGdyb3VwPgkJCWludGVnZXIKKyMuIAklaQk8aW5vPgkJCWlub2RlIG51bWJlcgorIy4gCSVJcwk8aW5vZGU+IC0+IGlfc2l6ZQorIy4gCSVJUwk8aW5vZGU+IC0+IGlfZXh0cmFfaXNpemUKKyMuIAklSWIJPGlub2RlPiAtPiBpX2Jsb2NrcworIy4gCSVJbAk8aW5vZGU+IC0+IGlfbGlua3NfY291bnQKKyMuIAklSW0JPGlub2RlPiAtPiBpX21vZGUKKyMuIAklSU0JPGlub2RlPiAtPiBpX210aW1lCisjLiAJJUlGCTxpbm9kZT4gLT4gaV9mYWRkcgorIy4gCSVJZgk8aW5vZGU+IC0+IGlfZmlsZV9hY2wKKyMuIAklSWQJPGlub2RlPiAtPiBpX2Rpcl9hY2wKKyMuIAklSXUJPGlub2RlPiAtPiBpX3VpZAorIy4gCSVJZwk8aW5vZGU+IC0+IGlfZ2lkCisjLiAJJUl0CTxzdHI+CQkJZmlsZSB0eXBlCisjLiAJJWoJPGlubzI+CQkJaW5vZGUgbnVtYmVyCisjLiAJJW0JPGNvbV9lcnIgZXJyb3IgbWVzc2FnZT4KKyMuIAklTgk8bnVtPgorIy4gCSVwCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPgorIy4gCSVQCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIDxkaXJlbnQ+LT5pbm8gd2l0aCA8aW5vMj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuICAoSWYgZGlyZW50IGlzIE5VTEwKKyMuIAkJCQl0aGVuIHJldHVybiB0aGUgcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8yPikKKyMuIAklcQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGRpcj4KKyMuIAklUQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4gd2l0aCA8ZGlyPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4KKyMuIAklcwk8c3RyPgkJCW1pc2NlbGxhbmVvdXMgc3RyaW5nCisjLiAJJVMJCWJhY2t1cCBzdXBlcmJsb2NrCisjLiAJJVgJPG51bT4JaGV4YWRlY2ltYWwgZm9ybWF0CisjLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZTJmc3Byb2dzIDEuNDIuMTItcHJlMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiB0eXRzb0BhbHVtLm1pdC5lZHVcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wNS0xNyAyMToyNi0wNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNC0wOC0yNyAwNzozMyswNzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFZpZXRuYW1lc2UgPHRyYW5zbGF0aW9uLXRlYW0tdmlAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiB2aVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCisiWC1MYW5ndWFnZS1UZWFtLVdlYnNpdGU6IDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtL3ZpLmh0bWw+XG4iCisiWC1HZW5lcmF0b3I6IFBvZWRpdCAxLjUuNVxuIgorIlgtUG9lZGl0LVNvdXJjZUNoYXJzZXQ6IHV0Zi04XG4iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoyMyBtaXNjL21rZTJmcy5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2sgJXUgb3V0IG9mIHJhbmdlOyBpZ25vcmVkLlxuIgorbXNnc3RyICJLaOG7kWkgaOG7j25nICV1IG7hurFtIG5nb8OgaSBwaOG6oW0gdmkgbsOqbiBi4buLIGLhu48gcXVhLlxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NDYKK21zZ2lkICJ3aGlsZSBzYW5pdHkgY2hlY2tpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgInRyb25nIGtoaSBraeG7g20gdHJhIHPhu7EgxJHDum5nIG3hu7FjIG7DunQgdGjDtG5nIHRpbiBraOG7kWkgaOG7j25nIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NTgKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICJ0cm9uZyBraGkgxJHhu41jIG7DunQgdGjDtG5nIHRpbiBraOG7kWkgaOG7j25nIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NzIgZTJmc2NrL3NjYW50ZXN0LmM6MTA3IGUyZnNjay91bml4LmM6MTM0NQorIzogZTJmc2NrL3VuaXguYzoxNDM0IG1pc2MvYmFkYmxvY2tzLmM6MTI0MiBtaXNjL2JhZGJsb2Nrcy5jOjEyNTAKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI2NCBtaXNjL2JhZGJsb2Nrcy5jOjEyNzYgbWlzYy9kdW1wZTJmcy5jOjYwNAorIzogbWlzYy9lMmltYWdlLmM6MTM5NiBtaXNjL2UyaW1hZ2UuYzoxNTgwIG1pc2MvZTJpbWFnZS5jOjE1OTkKKyM6IG1pc2MvbWtlMmZzLmM6MjI3IG1pc2MvdHVuZTJmcy5jOjE5NTUgbWlzYy90dW5lMmZzLmM6MjA0NCByZXNpemUvbWFpbi5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIKK21zZ3N0ciAidHJvbmcga2hpIGPhu5EgbeG7nyAlcyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyBwb3BlbiAnJXMnIgorbXNnc3RyICJ0cm9uZyBraGkgY+G7kSBt4bufIHBvcGVuIOKAnCVz4oCdIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6OTQgbWlzYy9ta2UyZnMuYzoyMzQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGluIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIGZpbGUiCittc2dzdHIgInRyb25nIGtoaSDEkeG7jWMgdsOgbyBkYW5oIHPDoWNoIGPDoWMga2jhu5FpIGjhu49uZyB04burIHThuq1wIHRpbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEwNQorbXNnaWQgIndoaWxlIHVwZGF0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAidHJvbmcga2hpIGPhuq1wIG5o4bqtdCBuw7p0IHRow7RuZyB0aW4ga2jhu5FpIGjhu49uZyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBpbGxlZ2FsIGJsb2NrICV1IGZvdW5kIGluIGJhZCBibG9jayBpbm9kZS4gIENsZWFyZWQuXG4iCittc2dzdHIgIiIKKyJD4bqjbmggYsOhbzogdMOsbSB0aOG6pXkga2jhu5FpICV1IGtow7RuZyBo4bujcCBs4buHIHRyb25nIG7DunQgdGjDtG5nIHRpbiBraOG7kWkgaOG7j25nIG7Dqm4gYuG7iyAiCisieG/DoS5cbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buNYyBraOG7kWkgJWx1ICglcykgdHJvbmcga2hpICVzLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhu41jIGto4buRaSAlbHUgKCVzKS4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjEgZTJmc2NrL2VoYW5kbGVyLmM6MTEwCittc2dpZCAiSWdub3JlIGVycm9yIgorbXNnc3RyICJC4buPIHF1YSBs4buXaSIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjIKK21zZ2lkICJGb3JjZSByZXdyaXRlIgorbXNnc3RyICLDiXAgYnXhu5ljIGdoaSBs4bqhaSIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIkfEg3AgbOG7l2kga2hpIGdoaSBraOG7kWkgJWx1ICglcykgdHJvbmcga2hpICVzLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGdoaSBraOG7kWkgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJraOG7kWkgdGjGsCBt4bulYyBy4buXbmciCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjYyCittc2dpZCAiZW1wdHkgZGlyIG1hcCIKK21zZ3N0ciAiw6FuaCB44bqhIHRoxrAgbeG7pWMgcuG7l25nIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFbXB0eSBkaXJlY3RvcnkgYmxvY2sgJXUgKCMlZCkgaW4gaW5vZGUgJXVcbiIKK21zZ3N0ciAiS2jhu5FpIHRoxrAgbeG7pWMgcuG7l25nICV1ICgjJWQpIHRyb25nIG7DunQgdGjDtG5nIHRpbiAldVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGZpbGVuYW1lIG5ibG9ja3MgYmxvY2tzaXplXG4iCittc2dzdHIgIiVzOiAlcyB0w6puIHThuq1wIHRpbiAgc+G7kSBraOG7kWkgIGPhu6Ega2jhu5FpXG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBvZiBibG9ja3MhXG4iCittc2dzdHIgIlPhu5Ega2jhu5FpIGtow7RuZyBo4bujcCBs4buHIVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIChzaXplPSVkKVxuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY+G6pXAgcGjDoXQgYuG7mSDEkeG7h20ga2jhu5FpIChj4buhPSVkKVxuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIGRpc2tcbiIKK21zZ3N0ciAiQ8OhY2ggZMO5bmc6ICVzIMSRxKlhXG4iCisKKyM6IGUyZnNjay9mbHVzaGIuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJCTEtGTFNCVUYgaW9jdGwgbm90IHN1cHBvcnRlZCEgIENhbid0IGZsdXNoIGJ1ZmZlcnMuXG4iCittc2dzdHIgIiIKKyJCTEtGTFNCVUYgaW9jdGwga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MuIEtow7RuZyB0aOG7gyDEkeG6qXkgZOG7ryBsaeG7h3UgYuG7mSDEkeG7h20gbMOqbiDEkcSpYS5cbiIKKworIzogZTJmc2NrL2lzY2FuLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIGRldmljZVxuIgorbXNnc3RyICIiCisiQ8OhY2ggZMO5bmc6ICVzIFstRl0gWy1JIGto4buRaV/EkeG7h21fbsO6dF0gdGhp4bq/dF9i4buLXG4iCisiXG4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjgxIGUyZnNjay91bml4LmM6OTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIG9wZW5pbmcgJXMgZm9yIGZsdXNoaW5nIgorbXNnc3RyICJ0cm9uZyBraGkgbeG7nyAlcyDEkeG7gyDEkeG6qXkgZOG7ryBsaeG7h3UgbMOqbiDEkcSpYSIKKworIzogZTJmc2NrL2lzY2FuLmM6ODYgZTJmc2NrL3VuaXguYzo5NzggcmVzaXplL21haW4uYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGZsdXNoICVzIgorbXNnc3RyICJ0cm9uZyBraGkgY+G7kSDEkeG6qXkgZOG7ryBsaeG7h3UgJXMgbMOqbiDEkcSpYSIKKworIzogZTJmc2NrL2lzY2FuLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICclcyciCittc2dzdHIgInRyb25nIGtoaSBj4buRIG3hu58g4oCcJXPigJ0iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTI5MAorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAidHJvbmcga2hpIG3hu58gdmnhu4djIHF1w6l0IG7DunQgdGjDtG5nIHRpbiIKKworIzogZTJmc2NrL2lzY2FuLmM6MTI3IG1pc2MvZTJpbWFnZS5jOjEzMDkKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUiCittc2dzdHIgInRyb25nIGtoaSBs4bqleSBuw7p0IHRow7RuZyB0aW4ga+G6vyB0aeG6v3AiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgc2Nhbm5lZC5cbiIKK21zZ3N0ciAiJXUgbsO6dCB0aMO0bmcgdGluIMSRw6MgxJHGsOG7o2MgcXXDqXQuXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTI0Cittc2dpZCAicmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAixJFhbmcgxJHhu41jIHNpw6p1IGto4buRaSBuaOG6rXQga8O9XG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBubyB2YWxpZCBqb3VybmFsIHN1cGVyYmxvY2sgZm91bmRcbiIKK21zZ3N0ciAiJXM6IGtow7RuZyB0w6xtIHRo4bqleSBzacOqdSBraOG7kWkgbmjhuq10IGvDvSBo4bujcCBs4buHXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBqb3VybmFsIHRvbyBzaG9ydFxuIgorbXNnc3RyICIlczogbmjhuq10IGvDvSBxdcOhIG5n4bqvblxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcmVjb3ZlcmluZyBqb3VybmFsXG4iCittc2dzdHIgIiVzOiDEkWFuZyBwaOG7pWMgaOG7k2kgbmjhuq10IGvDvVxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogd29uJ3QgZG8gam91cm5hbCByZWNvdmVyeSB3aGlsZSByZWFkLW9ubHlcbiIKK21zZ3N0ciAiJXM6IHPhur0ga2jDtG5nIHBo4bulYyBo4buTaSBuaOG6rXQga8O9IHRyb25nIGtoaSDhu58gY2jhur8gxJHhu5kgY2jhu4ktxJHhu41jXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICJ0cm9uZyBraGkgY+G7kSBt4bufIGzhuqFpICVzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImF0aHXhu5ljIHTDrW5oIMSRw6MgbeG7nyBy4buZbmciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE0Cittc2dpZCAiQWVycm9yIGFsbG9jYXRpbmciCittc2dzdHIgIkFn4bq3cCBs4buXaSBraGkgY+G6pXAgcGjDoXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJia2jhu5FpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNgorbXNnaWQgIkJiaXRtYXAiCittc2dzdHIgIkJt4bqjbmcg4bqjbmgiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE3Cittc2dpZCAiY2NvbXByZXNzIgorbXNnc3RyICJjbsOpbiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTgKK21zZ2lkICJDY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBAYiIKK21zZ3N0ciAiQ3h1bmcgxJHhu5l0IHbhu5tpIEBiIGPhu6dhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4ga2jDoWMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE5Cittc2dpZCAiZGRpcmVjdG9yeSIKK21zZ3N0ciAiZHRoxrAgbeG7pWMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIwCittc2dpZCAiRGRlbGV0ZWQiCittc2dzdHIgIkRi4buLIHhvw6EiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIxCittc2dpZCAiZWVudHJ5IgorbXNnc3RyICJlbeG7pWMgbmjhuq1wIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMgorbXNnaWQgIkVAZSAnJURuJyBpbiAlcCAoJWkpIgorbXNnc3RyICJFQGUg4oCcJURu4oCdIHRyb25nICVwICglaSkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIzCittc2dpZCAiZmZpbGVzeXN0ZW0iCittc2dzdHIgImZo4buHIHRo4buRbmcgdOG6rXAgdGluIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNAorbXNnaWQgIkZmb3IgQGkgJWkgKCVRKSBpcyIKK21zZ3N0ciAiRmNobyBAaSAlaSAoJVEpIGzDoCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjUKK21zZ2lkICJnZ3JvdXAiCittc2dzdHIgImduaMOzbSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjYKK21zZ2lkICJoSFRSRUUgQGQgQGkiCittc2dzdHIgImhIVFJFRSBAZCBAaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjcKK21zZ2lkICJpaW5vZGUiCittc2dzdHIgImluw7p0IHRow7RuZyB0aW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI4Cittc2dpZCAiSWlsbGVnYWwiCittc2dzdHIgIklj4bqlbSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjkKK21zZ2lkICJqam91cm5hbCIKK21zZ3N0ciAiam5o4bqtdCBrw70iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMwCittc2dpZCAibGxvc3QrZm91bmQiCittc2dzdHIgImxt4bqldCt0w6xtIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMQorbXNnaWQgIkxpcyBhIGxpbmsiCittc2dzdHIgIkxsw6AgbGnDqm4ga+G6v3QiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMyCittc2dpZCAibW11bHRpcGx5LWNsYWltZWQiCittc2dzdHIgIm3EkWEgdHV5w6puIGLhu5EiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMzCittc2dpZCAibmludmFsaWQiCittc2dzdHIgIm5raMO0bmcgaOG7o3AgbOG7hyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzQKK21zZ2lkICJvb3JwaGFuZWQiCittc2dzdHIgIm90aOG7q2EiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM1Cittc2dpZCAicHByb2JsZW0gaW4iCittc2dzdHIgInB24bqlbiDEkeG7gSB0cm9uZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgInFo4bqhbiBuZ2jhuqFjaCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAickBpIGfhu5FjIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOAorbXNnaWQgInNzaG91bGQgYmUiCittc2dzdHIgInNuw6puIGzDoCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzkKK21zZ2lkICJTc3VwZXJAYiIKK21zZ3N0ciAiU3Npw6p1QGIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQwCittc2dpZCAidXVuYXR0YWNoZWQiCittc2dzdHIgInVjaMawYS1n4bqvbiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDEKK21zZ2lkICJ2ZGV2aWNlIgorbXNnc3RyICJ2dGhp4bq/dC1i4buLIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MgorbXNnaWQgInhleHRlbnQiCittc2dzdHIgInht4bufLXLhu5luZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDMKK21zZ2lkICJ6emVyby1sZW5ndGgiCittc2dzdHIgInpkw6BpIGLhurFuZyBraMO0bmciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU0Cittc2dpZCAiPFRoZSBOVUxMIGlub2RlPiIKK21zZ3N0ciAiPG7DunQgdGjDtG5nIHRpbiB2w7QgZ2nDoSB0cuG7iz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU1Cittc2dpZCAiPFRoZSBiYWQgYmxvY2tzIGlub2RlPiIKK21zZ3N0ciAiPE7DunQgdGjDtG5nIHRpbiBraOG7kWkgaOG7j25nPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTcKK21zZ2lkICI8VGhlIHVzZXIgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8TsO6dCBo4bqhbiBuZ+G6oWNoIG5nxrDhu51pIGTDuW5nPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTgKK21zZ2lkICI8VGhlIGdyb3VwIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPE7DunQgaOG6oW4gbmfhuqFjaCBuaMOzbT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU5Cittc2dpZCAiPFRoZSBib290IGxvYWRlciBpbm9kZT4iCittc2dzdHIgIjxOw7p0IHRow7RuZyB0aW4gYuG7mSBu4bqhcCBraOG7n2kgxJHhu5luZz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICI8TsO6dCB0aMO0bmcgdGluIGjhu6d5IHhvw6EgdGjGsCBt4bulYz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYxCittc2dpZCAiPFRoZSBncm91cCBkZXNjcmlwdG9yIGlub2RlPiIKK21zZ3N0ciAiPE7DunQgdGjDtG5nIHRpbiBtw7QgdOG6oyBuaMOzbT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYyCittc2dpZCAiPFRoZSBqb3VybmFsIGlub2RlPiIKK21zZ3N0ciAiPG7DunQgdGjDtG5nIHRpbiBuaOG6rXQga8O9PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjMKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgOT4iCittc2dzdHIgIjxOw7p0IHRow7RuZyB0aW4gxJHGsOG7o2MgZMOgbmggcmnDqm5nIDk+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2NAorbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSAxMD4iCittc2dzdHIgIjxuw7p0IHRow7RuZyB0aW4gxJHGsOG7o2MgZMOgbmggcmnDqm5nIDEwPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzQKK21zZ2lkICJyZWd1bGFyIGZpbGUiCittc2dzdHIgInThuq1wIHRpbiB0aMaw4budbmciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM2Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICJ0aMawIG3hu6VjIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzOAorbXNnaWQgImNoYXJhY3RlciBkZXZpY2UiCittc2dzdHIgInRoaeG6v3QgYuG7iyBrw70gdOG7sSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDAKK21zZ2lkICJibG9jayBkZXZpY2UiCittc2dzdHIgInRoaeG6v3QgYuG7iyBraOG7kWkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQyCittc2dpZCAibmFtZWQgcGlwZSIKK21zZ3N0ciAi4buRbmcgZOG6q24gY8OzIHTDqm4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ0Cittc2dpZCAic3ltYm9saWMgbGluayIKK21zZ3N0ciAibGnDqm4ga+G6v3QgbeG7gW0iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ2IG1pc2MvdXVpZGQuYzoxNjIKK21zZ2lkICJzb2NrZXQiCittc2dzdHIgIuG7lSBj4bqvbSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWxlIHR5cGUgd2l0aCBtb2RlIDAlbyIKK21zZ3N0ciAia2nhu4N1IHThuq1wIHRpbiBraMO0bmcgcsO1IHbhu5tpIGNo4bq/IMSR4buZIDAlbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjMKK21zZ2lkICJpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAia2jhu5FpIGdpw6FuIHRp4bq/cCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjUKK21zZ2lkICJkb3VibGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImto4buRaSBnacOhbiB0aeG6v3AgxJHDtGkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI3Cittc2dpZCAidHJpcGxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJraOG7kWkgZ2nDoW4gdGnhur9wIGfhuqVwIGJhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyOQorbXNnaWQgInRyYW5zbGF0b3IgYmxvY2siCittc2dzdHIgImto4buRaSBk4buLY2giCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDMxCittc2dpZCAiYmxvY2sgIyIKK21zZ3N0ciAia2jhu5FpICMiCisKKyM6IGUyZnNjay9wYXNzMWIuYzoyMjIKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGlub2RlIG1hcCIKK21zZ3N0ciAiw6FuaCB44bqhIG7DunQgdGjDtG5nIHRpbiDEkWEgdHV5w6puIGLhu5EiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo2MjUgZTJmc2NrL3Bhc3MxYi5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBkdXBfYmxrIGZvciAlbGx1XG4iCittc2dzdHIgImzhu5dpIG7hu5lpIGLhu5k6IGtow7RuZyB0w6xtIHRo4bqleSBraOG7kWkgdHLDuW5nIChkdXBfYmxrKSBjaG8gJWxsdVxuIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODUyCittc2dpZCAicmV0dXJuZWQgZnJvbSBjbG9uZV9maWxlX2Jsb2NrIgorbXNnc3RyICLEkcOjIHRy4bqjIGzhuqFpIHThu6sga2jhu5FpIHThuq1wIHRpbiBuaMOhaSAoY2xvbmVfZmlsZV9ibG9jaykiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBibG9jayByZWNvcmQgZm9yICVsbHUiCittc2dzdHIgImzhu5dpIG7hu5lpIGLhu5k6IGtow7RuZyB0aOG7gyB0cmEgdMOsbSBt4bulYyBnaGkga2jhu5FpIEVBIGNobyAlbGx1IgorCisjOiBlMmZzY2svcGFzczFiLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAibOG7l2kgbuG7mWkgYuG7mToga2jDtG5nIHRo4buDIHRyYSB0w6xtIG3hu6VjIGdoaSBuw7p0IHRow7RuZyB0aW4gRUEgY2hvICV1IgorCisjOiBlMmZzY2svcGFzczEuYzo0NzUgZTJmc2NrL3Bhc3MyLmM6NzgyCittc2dpZCAicmVhZGluZyBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgIsSRYW5nIMSR4buNYyBraOG7kWkgdGjGsCBt4bulYyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjM0Cittc2dpZCAiaW4tdXNlIGlub2RlIG1hcCIKK21zZ3N0ciAiw6FuaCB44bqhIG7DunQgdGjDtG5nIHRpbiDEkWFuZyDEkcaw4bujYyBkw7luZyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjQ1Cittc2dpZCAiZGlyZWN0b3J5IGlub2RlIG1hcCIKK21zZ3N0ciAiw6FuaCB44bqhIG7DunQgdGjDtG5nIHRpbiB0aMawIG3hu6VjIgorCisjOiBlMmZzY2svcGFzczEuYzo2NTUKK21zZ2lkICJyZWd1bGFyIGZpbGUgaW5vZGUgbWFwIgorbXNnc3RyICLDoW5oIHjhuqEgbsO6dCB0aMO0bmcgdGluIHThuq1wIHRpbiBjaHXhuqluIgorCisjOiBlMmZzY2svcGFzczEuYzo2NjQgbWlzYy9lMmltYWdlLmM6MTI2NQorbXNnaWQgImluLXVzZSBibG9jayBtYXAiCittc2dzdHIgIsOhbmggeOG6oSBraOG7kWkgxJFhbmcgxJHGsOG7o2MgZMO5bmciCisKKyM6IGUyZnNjay9wYXNzMS5jOjczMAorbXNnaWQgIm9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAixJFhbmcgbeG7nyBi4bqjbiBxdcOpdCBuw7p0IHRow7RuZyB0aW4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjc2NAorbXNnaWQgImdldHRpbmcgbmV4dCBpbm9kZSBmcm9tIHNjYW4iCittc2dzdHIgIsSRYW5nIGzhuqV5IG7DunQgdGjDtG5nIHRpbiBr4bq/IHRp4bq/cCB04burIGLhuqNuIHF1w6l0IgorCisjOiBlMmZzY2svcGFzczEuYzoxMjc5Cittc2dpZCAiUGFzcyAxIgorbXNnc3RyICJM4bqnbiAxIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzM2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgaW5kaXJlY3QgYmxvY2tzIG9mIGlub2RlICV1IgorbXNnc3RyICLEkWFuZyDEkeG7jWMga2jhu5FpIGdpw6FuIHRp4bq/cCBj4bunYSBuw7p0IHRow7RuZyB0aW4gJXUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzODYKK21zZ2lkICJiYWQgaW5vZGUgbWFwIgorbXNnc3RyICLDoW5oIHjhuqEgbsO6dCB0aMO0bmcgdGluIHNhaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQwOQorbXNnaWQgImlub2RlIGluIGJhZCBibG9jayBtYXAiCittc2dzdHIgIm7DunQgdGjDtG5nIHRpbiB0cm9uZyDDoW5oIHjhuqEga2jhu5FpIHNhaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQyOQorbXNnaWQgImltYWdpYyBpbm9kZSBtYXAiCittc2dzdHIgIsOhbmggeOG6oSBuw7p0IHRow7RuZyB0aW4gbWEgdGh14bqtdCBpbWFnaWMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0NTYKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGJsb2NrIG1hcCIKK21zZ3N0ciAiw6FuaCB44bqhIGto4buRaSDEkWEgdHV5w6puIGLhu5EiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE1NjcKK21zZ2lkICJleHQgYXR0ciBibG9jayBtYXAiCittc2dzdHIgIsOhbmggeOG6oSBraOG7kWkgZXh0IGF0dHIgKHRodeG7mWMgdMOtbmggdGjDqm0/KSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlNmx1KCVjKTogZXhwZWN0aW5nICU2bHUgZ290IHBoeXMgJTZsdSAoYmxrY250ICVsbGQpXG4iCittc2dzdHIgIiU2bHUgKCVjKTogY+G6p24gJTZsdSBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjICU2bHUgduG6rXQgbMO9ICjEkeG6v20ga2jhu5FpICVsbGQpXG4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjI4OTgKK21zZ2lkICJibG9jayBiaXRtYXAiCittc2dzdHIgIm3huqNuZyDhuqNuaCBraOG7kWkiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI5MDQKK21zZ2lkICJpbm9kZSBiaXRtYXAiCittc2dzdHIgIm3huqNuZyDhuqNuaCBuw7p0IHRow7RuZyB0aW4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjI5MTAKK21zZ2lkICJpbm9kZSB0YWJsZSIKK21zZ3N0ciAiYuG6o25nIG7DunQgdGjDtG5nIHRpbiIKKworIzogZTJmc2NrL3Bhc3MyLmM6MjgzCittc2dpZCAiUGFzcyAyIgorbXNnc3RyICJM4bqnbiAyIgorCisjOiBlMmZzY2svcGFzczIuYzo4MDYKK21zZ2lkICJDYW4gbm90IGNvbnRpbnVlLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHRp4bq/cCB04bulYy4iCisKKyM6IGUyZnNjay9wYXNzMy5jOjc3Cittc2dpZCAiaW5vZGUgZG9uZSBiaXRtYXAiCittc2dzdHIgIm3huqNuZyDhuqNuaCBuw7p0IHRow7RuZyB0aW4gaG/DoG4gdOG6pXQiCisKKyM6IGUyZnNjay9wYXNzMy5jOjg2Cittc2dpZCAiUGVhayBtZW1vcnkiCittc2dzdHIgIkLhu5kgbmjhu5sgY2FvIMSRaeG7g20iCisKKyM6IGUyZnNjay9wYXNzMy5jOjE0OAorbXNnaWQgIlBhc3MgMyIKK21zZ3N0ciAiTOG6p24gMyIKKworIzogZTJmc2NrL3Bhc3MzLmM6MzQwCittc2dpZCAiaW5vZGUgbG9vcCBkZXRlY3Rpb24gYml0bWFwIgorbXNnc3RyICJt4bqjbmcg4bqjbmggcGjDoXQgaGnhu4duIHbDsm5nIGzhurdwIG7DunQgdGjDtG5nIHRpbiIKKworIzogZTJmc2NrL3Bhc3M0LmM6MTk2Cittc2dpZCAiUGFzcyA0IgorbXNnc3RyICJM4bqnbiA0IgorCisjOiBlMmZzY2svcGFzczUuYzo3NAorbXNnaWQgIlBhc3MgNSIKK21zZ3N0ciAiTOG6p24gNSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MQorbXNnaWQgIihubyBwcm9tcHQpIgorbXNnc3RyICIoa2jDtG5nIG5o4bqvYykiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIKK21zZ2lkICJGaXgiCittc2dzdHIgIlPhu61hIGNo4buvYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MworbXNnaWQgIkNsZWFyIgorbXNnc3RyICJYb8OhIHPhuqFjaCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NAorbXNnaWQgIlJlbG9jYXRlIgorbXNnc3RyICLEkOG7i25oIHbhu4sgbOG6oWkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUKK21zZ2lkICJBbGxvY2F0ZSIKK21zZ3N0ciAiQ+G6pXAgcGjDoXQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYKK21zZ2lkICJFeHBhbmQiCittc2dzdHIgIk3hu58gcuG7mW5nIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3Cittc2dpZCAiQ29ubmVjdCB0byAvbG9zdCtmb3VuZCIKK21zZ3N0ciAiS+G6v3QgbuG7kWkgxJHhur9uIC9t4bqldCt0w6xtIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJU4bqhbyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OQorbXNnaWQgIlNhbHZhZ2UiCittc2dzdHIgIkPhu6l1IHbhu5t0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwCittc2dpZCAiVHJ1bmNhdGUiCittc2dzdHIgIkPhuq90IG5n4bqvbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MQorbXNnaWQgIkNsZWFyIGlub2RlIgorbXNnc3RyICJYb8OhIHPhuqFjaCBuw7p0IHRow7RuZyB0aW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIKK21zZ2lkICJBYm9ydCIKK21zZ3N0ciAiSOG7p3kgYuG7jyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MworbXNnaWQgIlNwbGl0IgorbXNnc3RyICJDaGlhIHTDoWNoIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgIlRp4bq/cCB04bulYyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NQorbXNnaWQgIkNsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIgorbXNnc3RyICJOaMOibiBi4bqjbiBjw6FjIGto4buRaSDEkWEgdHV5w6puIGLhu5EiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYKK21zZ2lkICJEZWxldGUgZmlsZSIKK21zZ3N0ciAiWG/DoSB04bqtcCB0aW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiVGh1IGjhu5NpIHRow7RuZyDEkWnhu4dwIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4Cittc2dpZCAiVW5saW5rIgorbXNnc3RyICJC4buPIGxpw6puIGvhur90IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5Cittc2dpZCAiQ2xlYXIgSFRyZWUgaW5kZXgiCittc2dzdHIgIlhvw6Egc+G6oWNoIGNo4buJIG3hu6VjIGhIVFJFRSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MAorbXNnaWQgIlJlY3JlYXRlIgorbXNnc3RyICJU4bqhbyBs4bqhaSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OQorbXNnaWQgIihOT05FKSIKK21zZ3N0ciAiKEtIw5RORykiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAKK21zZ2lkICJGSVhFRCIKK21zZ3N0ciAixJDDgyBT4busQSBDSOG7rkEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEKK21zZ2lkICJDTEVBUkVEIgorbXNnc3RyICLEkMODIFhPw4EgU+G6oENIIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyCittc2dpZCAiUkVMT0NBVEVEIgorbXNnc3RyICLEkMODIMSQ4buKTkggVuG7iiBM4bqgSSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MworbXNnaWQgIkFMTE9DQVRFRCIKK21zZ3N0ciAixJDDgyBD4bqkUCBQSMOBVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NAorbXNnaWQgIkVYUEFOREVEIgorbXNnc3RyICLEkMODIE3hu54gUuG7mE5HIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIsSQw4MgS+G6vlQgTuG7kEkgTOG6oEkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYKK21zZ2lkICJDUkVBVEVEIgorbXNnc3RyICLEkMODIFThuqBPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3Cittc2dpZCAiU0FMVkFHRUQiCittc2dzdHIgIsSQw4MgQ+G7qFUgVuG7mlQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgKK21zZ2lkICJUUlVOQ0FURUQiCittc2dzdHIgIsSQw4MgQ+G6rlQgTkfhuq5OIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5Cittc2dpZCAiSU5PREUgQ0xFQVJFRCIKK21zZ3N0ciAiTsOaVCBUSMOUTkcgVElOIMSQw4MgWE/DgSBT4bqgQ0giCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTAKK21zZ2lkICJBQk9SVEVEIgorbXNnc3RyICJC4buKIEjhu6ZZIELhu44iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEKK21zZ2lkICJTUExJVCIKK21zZ3N0ciAixJDDgyBDSElBIFTDgUNIIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyCittc2dpZCAiQ09OVElOVUlORyIKK21zZ3N0ciAixJBBTkcgVEnhur5QIFThu6RDIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzCittc2dpZCAiTVVMVElQTFktQ0xBSU1FRCBCTE9DS1MgQ0xPTkVEIgorbXNnc3RyICJDw4FDIEtI4buQSSDEkEEgVFVZw4pOIELhu5AgxJDDgyDEkMav4buiQyBOSMOBSSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NAorbXNnaWQgIkZJTEUgREVMRVRFRCIKK21zZ3N0ciAiVOG6rFAgVElOIMSQw4MgQuG7iiBYw5NBIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1Cittc2dpZCAiU1VQUFJFU1NFRCIKK21zZ3N0ciAiQuG7iiBUSFUgSOG7kkkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTYKK21zZ2lkICJVTkxJTktFRCIKK21zZ3N0ciAiQuG7iiBC4buOIExJw4pOIEvhur5UIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3Cittc2dpZCAiSFRSRUUgSU5ERVggQ0xFQVJFRCIKK21zZ3N0ciAiQ0jhu4ggTeG7pEMgSFRSRUUgxJDDgyDEkMav4buiQyBYT8OBIFPhuqBDSCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OAorbXNnaWQgIldJTEwgUkVDUkVBVEUiCittc2dzdHIgIlPhurwgVOG6oE8gTOG6oEkiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNworbXNnaWQgIkBiIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgIkBiIEBCIGNobyBAZyAlZyBraMO0bmcgcGjhuqNpIHRyb25nIEBnLiAgKEBiICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTEKK21zZ2lkICJAaSBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJAaSBAQiBjaG8gQGcgJWcga2jDtG5nIHBo4bqjaSB0cm9uZyBAZy4gIChAYiAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgdGFibGUgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIy4gQC1leHBhbmRlZDogV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYKK21zZ2lkICIiCisiQGkgdGFibGUgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKKyJXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuIgorbXNnc3RyICIiCisiQuG6o25nIEBpIGNobyBAZyAlZyBraMO0bmcgcGjhuqNpIHRyb25nIEBnLiAgKEBiICViKVxuIgorIkPhuqJOSCBCw4FPOiBDw5MgVEjhu4IgTeG6pFQgROG7riBMSeG7hlUgTkhJ4buAVS5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBzdXBlcmJsb2NrIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgdmFsaWQgZXh0Mi9leHQzL2V4dDRcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbS4gIElmIHRoZSBkZXZpY2UgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyL2V4dDMvZXh0NFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgc3VwZXJibG9ja1xuCisjLiBALWV4cGFuZGVkOiBpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBzdXBlcmJsb2NrOlxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iIDgxOTMgPGRldmljZT5cbgorIy4gQC1leHBhbmRlZDogIG9yXG4KKyMuIEAtZXhwYW5kZWQ6ICAgICBlMmZzY2sgLWIgMzI3NjggPGRldmljZT5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyCittc2dpZCAiIgorIlxuIgorIlRoZSBAUyBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIHZhbGlkIGV4dDIvZXh0My9leHQ0XG4iCisiQGYuICBJZiB0aGUgQHYgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyL2V4dDMvZXh0NFxuIgorIkBmIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgQFNcbiIKKyJpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBAUzpcbiIKKyIgICAgZTJmc2NrIC1iIDgxOTMgPEB2PlxuIgorIiBvclxuIgorIiAgICBlMmZzY2sgLWIgMzI3NjggPEB2PlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQFMga2jDtG5nIHRo4buDIMSR4buNYyDEkcaw4bujYyBob+G6t2Mga2jDtG5nIGRp4buFbiB04bqjIEBmIGtp4buDdSBleHQyIMSRw7puZy5cbiIKKyJAdiBo4bujcCBs4buHLiBO4bq/dSBAdiBsw6AgaOG7o3AgbOG7hyB2w6AgbsOzIMSRw6Mgc+G6tW4gY2jhu6lhIG3hu5l0IEBmIGtp4buDdSBleHQyL2V4dDMvZXh0NFxuIgorIih2w6Aga2jDtG5nIHBo4bqjaSB2w7luZyB0cmFvIMSR4buVaSBoYXkgdWZzIGhheSBnw6wga2jDoWMpLCB0aOG6vyB0aMOsIEBTXG4iCisiYuG7iyBo4buPbmc6IHRo4bq/IHRow6wgYuG6oW4gbsOqbiB0aOG7rSBjaOG6oXkgZTJmc2NrIHbhu5tpIEBTIHRoYXkgdGjhur86XG4iCisiICAgIGUyZnNjayAtYiA4MTkzIDxAdj5cbiIKKyIgaG/hurdjXG4iCisiICAgIGUyZnNjayAtYiAzMjc2OCA8QHY+XG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBmaWxlc3lzdGVtIHNpemUgKGFjY29yZGluZyB0byB0aGUgc3VwZXJibG9jaykgaXMgJWIgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBkZXZpY2UgaXMgJWMgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IEVpdGhlciB0aGUgc3VwZXJibG9jayBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMworbXNnaWQgIiIKKyJUaGUgQGYgc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBAUykgaXMgJWIgQGJzXG4iCisiVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIEB2IGlzICVjIEBic1xuIgorIkVpdGhlciB0aGUgQFMgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCFcbiIKK21zZ3N0ciAiIgorIkvDrWNoIGPhu6EgQGYgKHTDuXkgdGhlbyBAUykgbMOgICViIEBiXG4iCisiS8OtY2ggY+G7oSB24bqtdCBsw70gY+G7p2EgQHYgbMOgICVjIEBiXG4iCisiSG/hurdjIEBTIGhv4bq3YyBi4bqjbmcgcGjDom4gdsO5bmcgcuG6pXQgY8OzIHRo4buDIGLhu4sgaOG7j25nLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2NrX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbgorIy4gQC1leHBhbmRlZDogVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuCisjLiBALWV4cGFuZGVkOiBmcm9tIHRoZSBibG9jayBzaXplLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MAorbXNnaWQgIiIKKyJAUyBAYl9zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4iCisiVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuIgorImZyb20gdGhlIEBiIHNpemUuXG4iCittc2dzdHIgIiIKKyJAUyBrw61jaCBj4buhIEBiID0gJWIsIGvDrWNoIGPhu6EgxJFv4bqhbiA9ICVjLlxuIgorIlBoacOqbiBi4bqjbiBlMmZzY2sgbsOgeSBraMO0bmcgaOG7lyB0cuG7oyBrw61jaCBj4buhIMSRb+G6oW5cbiIKKyJraMOhYyB24bubaSBrw61jaCBj4buhIEBiLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2Nrc19wZXJfZ3JvdXAgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NworbXNnaWQgIkBTIEBic19wZXJfZ3JvdXAgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICJAUyBAYiBt4buXaSBuaMOzbSA9ICViLCBjw7JuIG7Dqm4gbMOgICVjXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgZmlyc3RfZGF0YV9ibG9jayA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUyCittc2dpZCAiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIkBTIEBiIGThu68gbGnhu4d1IHRo4bupIG5o4bqldCA9ICViLCBuw6puIGzDoCAlY1xuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcKK21zZ2lkICIiCisiQGYgZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJAZiBraMO0bmcgY8OzIFVVSUQgbsOqbiDEkWFuZyB04bqhbyByYSBuw7MuXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydFxuIgorIm9mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnlcbiIKKyJydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgJVMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtXG4iCisibWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZFxuIgorInRoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLlxuIgorIlxuIgorbXNnc3RyICIiCisiR2hpIGNow7o6IG7hur91IHbDoGkga2jhu5FpIG7DunQgdGjDtG5nIHRpbiBoYXkga2jhu5FpIG3huqNuZyDhuqNuaCBraOG7kWlcbiIKKyJoYXkgcGjhuqduIGPhu6dhIGLhuqNuZyBuw7p0IHRow7RuZyB0aW4gY+G6p24gdGhp4bq/dCDEkcaw4bujYyDEkeG7i25oIHbhu4sgbOG6oWksXG4iCisixJHhu4Egbmdo4buLIGLhuqFuIHRo4butIGNo4bqheSBlMmZzY2sgduG7m2kgdMO5eSBjaOG7jW4g4oCcLWIgJVPigJ1cbiIKKyJ0csaw4bubYyB0acOqbi4gVuG6pW4gxJHhu4EgY8OzIHRo4buDIG7hurFtIGNo4buJIHRyb25nIGPDoWMgbcO0IHThuqMgbmjDs21cbiIKKyJraOG7kWkgY2jDrW5oLCB0aMOsIGPDoWMgbcO0IHThuqMgbmjDs20ga2jhu5FpIGThu7EgdHLhu68gY8OzIHRo4buDIGzDoCDEkcO6bmcuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvcnJ1cHRpb24gZm91bmQgaW4gc3VwZXJibG9jay4gICglcyA9ICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzEKK21zZ2lkICJDb3JydXB0aW9uIGZvdW5kIGluIEBTLiAgKCVzID0gJU4pLlxuIgorbXNnc3RyICJUw6xtIHRo4bqleSBoxrAgaOG7j25nIHRyb25nIEBTLiAgKCVzID0gJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBkZXZpY2U6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIEB2OiAlbVxuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgeMOhYyDEkeG7i25oIGvDrWNoIGPhu6EgY+G7p2EgQHYgduG6rXQgbMO9OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBjb3VudCBpbiBzdXBlcmJsb2NrIGlzICVpLCBzaG91bGQgYmUgJWouXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTgxCittc2dpZCAiQGkgY291bnQgaW4gQFMgaXMgJWksIEBzICVqLlxuIgorbXNnc3RyICJT4buRIGzGsOG7o25nIEBpIHRyb25nIEBTIGzDoCAlaSwgQHMgJWouXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg1Cittc2dpZCAiVGhlIEh1cmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZmlsZXR5cGUgZmVhdHVyZS5cbiIKK21zZ3N0ciAiSHVyZCBraMO0bmcgaOG7lyB0cuG7oyB0w61uaCBuxINuZyBraeG7g3UgdOG6rXAgdGluLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBhbiBpbnZhbGlkIGpvdXJuYWwgKGlub2RlICVpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzIGFuIEBuIEBqIChAaSAlaSkuXG4iCittc2dzdHIgIkBTIGPDsyBt4buZdCBAbiBAaiAoQGkgJWkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBtdWx0aXBsZSBmaWxlc3lzdGVtIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk1Cittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIG11bHRpcGxlIEBmIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4iCittc2dzdHIgIkBqIGLDqm4gbmdvw6BpIGPDsyBuaGnhu4F1IG5nxrDhu51pIGTDuW5nIEBmIChraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbid0IGZpbmQgZXh0ZXJuYWwgam91cm5hbFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwMAorbXNnaWQgIkNhbid0IGZpbmQgZXh0ZXJuYWwgQGpcbiIKK21zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IEBqIGLDqm4gbmdvw6BpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIGJhZCBzdXBlcmJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjA1Cittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIGJhZCBAU1xuIgorbXNnc3RyICJAaiBiw6puIG5nb8OgaSBjw7MgQFMgc2FpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZpbGVzeXN0ZW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMTAKK21zZ2lkICJFeHRlcm5hbCBAaiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgQGZcbiIKK21zZ3N0ciAiQGogYsOqbiBuZ2/DoGkga2jDtG5nIGjhu5cgdHLhu6MgQGYgbsOgeVxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGpvdXJuYWwgc3VwZXJibG9jayBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGpvdXJuYWwgCisjLiBALWV4cGFuZGVkOiBmb3JtYXQuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGFsc28gcG9zc2libGUgdGhlIGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxNQorbXNnaWQgIiIKKyJAZiBAaiBAUyBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbiIKKyJJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgQGogIgorImZvcm1hdC5cbiIKKyJJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICIiCisiQFMgQGogQGYgY8OzIGtp4buDdSBs4bqhICVOIChraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oykuXG4iCisiUuG6pXQgY8OzIHRo4buDIGzDoCBi4bqhbiBjw7MgbeG7mXQgYuG6o24gc2FvIGUyZnNjayBjxakgbcOgL2hheSBraMO0bmcgaOG7lyB0cuG7oyDEkeG7i25oIGThuqFuZyBAaiAiCisibsOgeS5cbiIKKyJDxaluZyBjw7MgdGjhu4MgbMOgIEBTIEBqIGLhu4sgaOG7j25nLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjMKK21zZ2lkICJAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICJAUyBAaiBi4buLIGjhu49uZy5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXNfam91cm5hbCBmbGFnIGlzIGNsZWFyLCBidXQgYSBqb3VybmFsIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjI4Cittc2dpZCAiQFMgaGFzX0BqIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIEBqIGlzIHByZXNlbnQuXG4iCittc2dzdHIgIkPhu50gQFMgaGFzX0BqIHbhuqtuIHThu5F0LCBuaMawbmcgbOG6oWkgY8OzIG3hu5l0IEBqIGhp4buHbiBkaeG7h24g4bufIMSRw6J5LlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzMworbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gQGogaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiQFMgxJHhurd0IGPhu50gbmVlZHNfcmVjb3ZlcnksIGPDsm4ga2jDtG5nIGPDsyBAaiBoaeG7h24gZGnhu4duLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBqb3VybmFsIGhhcyBkYXRhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzOAorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBAaiBoYXMgZGF0YS5cbiIKK21zZ3N0ciAiQ+G7nSBAUyBuZWVkc19yZWNvdmVyeSB24bqrbiB04buRdCwgbmjGsG5nIEBqIGzhuqFpIGPDsyBk4buvIGxp4buHdS5cbiIKKworIy4gQC1leHBhbmRlZDogQ2xlYXIgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDMKK21zZ2lkICJDbGVhciBAaiIKK21zZ3N0ciAiWG/DoSBz4bqhY2ggQGoiCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgZmlsZXN5c3RlbS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDggZTJmc2NrL3Byb2JsZW0uYzo3MDcKK21zZ2lkICJAZiBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBAZi4gICIKK21zZ3N0ciAiQGYgxJHhurd0IChjw6FjKSBj4budIHTDrW5oIG7Eg25nLCBjw7JuIGzDoCBAZiBi4bqjbiBz4butYSDEkeG7lWkgMC4iCisKKyMuIEAtZXhwYW5kZWQ6ICVzIG9ycGhhbmVkIGlub2RlICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjUzCittc2dpZCAiJXMgQG8gQGkgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbiIKK21zZ3N0ciAiQGkgQG8gJXMgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIGNo4bq/IMSR4buZPSVJbSwgY+G7oT0lSXMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTgKK21zZ2lkICJASSAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICIlQiAoJWIpIEBsIMSRxrDhu6NjIHTDrG0gdHJvbmcgQGkgQG8gJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEFscmVhZHkgY2xlYXJlZCAlQiAoJWIpIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI2MworbXNnaWQgIkFscmVhZHkgY2xlYXJlZCAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICLEkMOjIHhvw6Egc+G6oWNoICVCICglYikgxJHGsOG7o2MgdMOsbSB0cm9uZyBAaSBAbyAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBvcnBoYW5lZCBpbm9kZSAlaSBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJASSBAbyBAaSAlaSBpbiBAUy5cbiIKK21zZ3N0ciAiQGkgQG8gJWkgQGwgdHJvbmcgQFMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgaW5vZGUgJWkgaW4gb3JwaGFuZWQgaW5vZGUgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEkgQGkgJWkgaW4gQG8gQGkgbGlzdC5cbiIKK21zZ3N0ciAiQEkgQGkgJWkgaW4gQG8gQGkgbGlzdC5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3OAorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICJAUyBAaiDEkeG6t3QgbeG7mXQgY+G7nSB0w61uaCBuxINuZyBjaOG7iSDEkeG7jWMga2jDtG5nIHLDtS5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4MworbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICJAUyBAaiDEkeG6t3QgbeG7mXQgY+G7nSB0w61uaCBuxINuZyBraMO0bmcgdMawxqFuZyB0aMOtY2gga2jDtG5nIHLDtS5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjg4Cittc2dpZCAiQGogdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuIgorbXNnc3RyICJQaGnDqm4gYuG6o24gQGoga2jDtG5nIGjhu5cgdHLhu6MgdHJvbmcgZTJmc2NrIG7DoHkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1vdmluZyBqb3VybmFsIGZyb20gLyVzIHRvIGhpZGRlbiBpbm9kZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNb3ZpbmcgQGogZnJvbSAvJXMgdG8gaGlkZGVuIEBpLlxuIgorIlxuIgorbXNnc3RyICIiCisixJBhbmcgZGkgY2h1eeG7g24gQGogdOG7qyAvJXMgc2FuZyBAaSDhuqluLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBtb3Zpbmcgam91cm5hbDogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBtb3ZpbmcgQGo6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKyJH4bq3cCBs4buXaSBraGkgZGkgY2h1eeG7g24gQGo6ICVtXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZvdW5kIGludmFsaWQgVjIgam91cm5hbCBzdXBlcmJsb2NrIGZpZWxkcyAoZnJvbSBWMSBqb3VybmFsKS5cbgorIy4gQC1leHBhbmRlZDogQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgam91cm5hbCBzdXBlcmJsb2NrLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMwMworbXNnaWQgIiIKKyJGb3VuZCBAbiBWMiBAaiBAUyBmaWVsZHMgKGZyb20gVjEgQGopLlxuIgorIkNsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIEBqIEBTLi4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJUw6xtIHRo4bqleSBjw6FjIHRyxrDhu51uZyBAUyBAaiBwYjIgQG4gKHThu6sgQGogcGIxKS5cbiIKKyLEkGFuZyB4b8OhIHPhuqFjaCBjw6FjIHRyxrDhu51uZyBu4bqxbSDhu58gYsOqbiBraWEgQFMgQGogcGIxLi4uXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJ1biBqb3VybmFsIGFueXdheQorIzogZTJmc2NrL3Byb2JsZW0uYzozMDkKK21zZ2lkICJSdW4gQGogYW55d2F5IgorbXNnc3RyICJW4bqrbiBjaOG6oXkgQGoiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTQKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiQ2jGsGEgxJHhurd0IGPhu50gcGjhu6VjIGjhu5NpIHRyb25nIEBTIGThu7EgdHLhu68gbsOqbiB24bqrbiBjaOG6oXkgQGouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhY2tpbmcgdXAgam91cm5hbCBpbm9kZSBibG9jayBpbmZvcm1hdGlvbi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzE5Cittc2dpZCAiIgorIkJhY2tpbmcgdXAgQGogQGkgQGIgaW5mb3JtYXRpb24uXG4iCisiXG4iCittc2dzdHIgIiIKKyLEkGFuZyBzYW8gbMawdSB0aMO0bmcgdGluIEBiIEBpIEBqLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgcmVzaXplX2lub2RlIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9ibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaXMgJU47IHNob3VsZCBiZSB6ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyNAorbXNnaWQgIiIKKyJAZiBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9AaSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisiaXMgJU47IEBzIHplcm8uICAiCittc2dzdHIgIiIKKyJAZiBraMO0bmcgYuG6rXQgcmVzaXplX0BpLCBjw7JuIHNfcmVzZXJ2ZWRfZ2R0X0BicyBsw6AgJU47XG4iCisiQHMgc+G7kSBraMO0bmcuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZV9pbm9kZSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgaW5vZGUgaXMgbm9uLXplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzMwCittc2dpZCAiUmVzaXplX0BpIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBAaSBpcyBub24temVyby4gICIKK21zZ3N0ciAiS2jDtG5nIGLhuq10IHJlc2l6ZV9AaSwgY8OybiBAaSB0aGF5IMSR4buVaSBrw61jaCBj4buhIGtow7RuZyBwaOG6o2kgc+G7kSBraMO0bmcuLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgbm90IHZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzNQorbXNnaWQgIlJlc2l6ZSBAaSBub3QgdmFsaWQuICAiCittc2dzdHIgIkBpIHRoYXkgxJHhu5VpIGvDrWNoIGPhu6Ega2jDtG5nIHBo4bqjaSBo4bujcCBs4buHLiAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQwCittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorIkdp4budIGfhuq9uIGvhur90IEBTIGN14buRaSBjw7luZ1xuIgorIigldCwgYsOieSBnaeG7nSA9ICVUKSBu4bqxbSB0cm9uZyB0aOG7nWkgdMawxqFuZyBsYWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNDUKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICJHaeG7nSBnaGkgQFMgY3Xhu5FpIGPDuW5nKCV0LCBiw6J5IGdp4budID0gJVQpIG7hurFtIHRyb25nIHRow6wgdMawxqFuZyBsYWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBzaG91bGQgYmUgJVguICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgQHMgJVguICAiCittc2dzdHIgIkzhu51pIGfhu6NpIMO9IEBTIGNobyBzacOqdSBraOG7kWkgYsOqbiBuZ2/DoGkgQHMgJVguICAiCisKKyMuIEAtZXhwYW5kZWQ6IEFkZGluZyBkaXJoYXNoIGhpbnQgdG8gZmlsZXN5c3RlbS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzU0Cittc2dpZCAiIgorIkFkZGluZyBkaXJoYXNoIGhpbnQgdG8gQGYuXG4iCisiXG4iCittc2dzdHIgIiIKKyLEkGFuZyB0aMOqbSBn4bujaSDDvSBkaXJoYXNoIHbDoG8gQGYuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzU5Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gICIKK21zZ3N0ciAiTcO0IHThuqMgQGcgJWcgY8OzIHThu5VuZyBraeG7g20gbMOgICUwNHgsIHBo4bqjaSBsw6AgJTA0eS4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuIgorbXNnc3RyICJNw7QgdOG6oyBAZyAlZyBjw7MgbmjDo24gbMOgIGNoxrBhIGto4bufaSB04bqhbyBtw6Aga2jDtG5nIGPDsyB04bqtcCB0w61uaCBuxINuZy5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2OQorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gICIKK21zZ3N0ciAiTcO0IHThuqMgQGcgJWcgc2FpIMSR4bq/bSBjw6FjIG7DunQgdGjDtG5nIHRpbiBjaMawYSBkw7luZyAlYi4gICIKKworIy4gQC1leHBhbmRlZDogTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNzQKK21zZ2lkICJMYXN0IEBnIEBiIEBCIHVuaW5pdGlhbGl6ZWQuICAiCittc2dzdHIgIkNoxrBhIGto4bufaSB04bqhbyBAQiBAYiBAZyBjdeG7kWkgY8O5bmcuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdHJhbnNhY3Rpb24gJWkgd2FzIGNvcnJ1cHQsIHJlcGxheSB3YXMgYWJvcnRlZC5cbiIKK21zZ3N0ciAiR2lhbyBk4buLY2ggbmjhuq10IGvDvSAlaSBi4buLIGjhu49uZyBuw6puIGjhu6d5IGLhu48gdGnhur9uIHRyw6xuaCBwaMOhdCBs4bqhaS5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozODMKK21zZ2lkICJUaGUgdGVzdF9mcyBmbGFnIGlzIHNldCAoYW5kIGV4dDQgaXMgYXZhaWxhYmxlKS4gICIKK21zZ3N0ciAiQ+G7nSDigJx0ZXN0X2Zz4oCdIMSRxrDhu6NjIMSR4bq3dCAodsOgIGV4dDQgc+G6tW4gc8OgbmcpIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzg4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldClcbiIKK21zZ3N0ciAiIgorIkdp4budIGfhuq9uIGvhur90IEBTIGN14buRaSBjw7luZyBu4bqxbSB0cm9uZyB0xrDGoW5nIGxhaVxuIgorIlx0KHRoZW8gw610IG5o4bqldCBt4buZdCBuZ8OgeSwgcuG6pXQgY8OzIHRo4buDIGRvIMSR4buTbmcgaOG7kyBwaOG6p24gY+G7qW5nIGLhu4sgc2FpIGzhuq1wKS4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozOTQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAiCisic2V0KVxuIgorbXNnc3RyICIiCisiR2nhu50gZ2hpIG5o4bubIEBTIGN14buRaSBjw7luZyBu4bqxbSB0cm9uZyB0xrDGoW5nIGxhaVxuIgorIlx0KHRoZW8gw610IG5o4bqldCBt4buZdCBuZ8OgeSwgcuG6pXQgY8OzIHRo4buDIGRvIMSR4buTbmcgaOG7kyBwaOG6p24gY+G7qW5nIGLhu4sgc2FpIGzhuq1wKS4iCisKKyMuIEAtZXhwYW5kZWQ6IE9uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwMAorbXNnaWQgIk9uZSBvciBtb3JlIEBiIEBnIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgIgorbXNnc3RyICJM4buXaTogbeG7mXQgaGF5IG5oaeG7gXUgdOG7lW5nIGtp4buDbSBi4buZIG3DtCB04bqjIEBnIEBiIGtow7RuZyBwaOG6o2kgaOG7o3AgbOG7hy4gICIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwNQorbXNnaWQgIlNldHRpbmcgZnJlZSBAaXMgY291bnQgdG8gJWogKHdhcyAlaSlcbiIKK21zZ3N0ciAixJBhbmcgxJHhurd0IHPhu5EgbMaw4bujbmcgQGlzIHRow6BuaCAlaiAobMOgICVpKVxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgYmxvY2tzIGNvdW50IHRvICVjICh3YXMgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDEwCittc2dpZCAiU2V0dGluZyBmcmVlIEBicyBjb3VudCB0byAlYyAod2FzICViKVxuIgorbXNnc3RyICLEkGFuZyDEkeG6t3Qgc+G7kSBsxrDhu6NuZyBAYnMgdGjDoG5oICVjIChsw6AgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1ha2luZyBxdW90YSBpbm9kZSAlaSAoJVEpIGhpZGRlbi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTUKK21zZ2lkICJNYWtpbmcgQHEgQGkgJWkgKCVRKSBoaWRkZW4uXG4iCittc2dzdHIgIkzDoG0gY2hvIEBxIEBpcyAlaSAoJVEpIOG6qW4gxJFpLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjAKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAiCittc2dzdHIgIkBTIGPDsyBraOG7kWkgTU1QIGtow7RuZyBo4bujcCBs4buHLiAgICAgICAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjUKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAiCittc2dzdHIgIkBTIGPDsyBz4buRIG3DoHUgbmhp4buHbSBNTVAga2jDtG5nIGjhu6NwIGzhu4cuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfb3BlbjI6ICVtXG4iCittc2dzdHIgImV4dDJmc19vcGVuMjogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCittc2dzdHIgImV4dDJmc19jaGVja19kZXNjOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIDY0Yml0IGZpbGVzeXN0ZW1zIG5lZWRzIGV4dGVudHMgdG8gYWNjZXNzIHRoZSB3aG9sZSBkaXNrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0MAorbXNnaWQgIkBTIDY0Yml0IGZpbGVzeXN0ZW1zIG5lZWRzIGV4dGVudHMgdG8gYWNjZXNzIHRoZSB3aG9sZSBkaXNrLiAgIgorbXNnc3RyICIiCisiaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBAUyA2NGJpdCBj4bqnbiBt4bufIHLhu5luZyDEkeG7gyBjw7MgdGjhu4MgdHJ1eSBj4bqtcCB0b8OgbiBi4buZIMSRxKlhLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NQorbXNnaWQgIkZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZy4gICglTiwgbWF4IHZhbHVlICVnKS4gICIKK21zZ3N0ciAiRmlyc3RfbWV0YV9iZyBxdcOhIGzhu5tuLiAgKCVOLCBnacOhIHRy4buLIHThu5FpIMSRYSAlZykuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1MgorbXNnaWQgIlBhc3MgMTogQ2hlY2tpbmcgQGlzLCBAYnMsIGFuZCBzaXplc1xuIgorbXNnc3RyICJM4bqnbiBxdWEgMTogxJFhbmcga2nhu4NtIHRyYSBjw6FjIEBpLCBAYiB2w6Aga8OtY2ggY+G7oVxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NTYKK21zZ2lkICJAciBpcyBub3QgYSBAZC4gICIKK21zZ3N0ciAiQHIga2jDtG5nIHBo4bqjaSBAZC4gICIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDYxCittc2dpZCAiQHIgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgIgorbXNnc3RyICJAciDEkeG6t3QgZHRpbWUgKHLhuqV0IGPDsyB0aOG7gyBkbyBta2QyZnMgY8WpKS4gICIKKworIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2NgorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgIkBpICVpIMSRw6MgZMOgbmggcmnDqm5nICglUSkgY8OzIGNo4bq/IMSR4buZIEBuLiIKKworIy4gQC1leHBhbmRlZDogZGVsZXRlZCBpbm9kZSAlaSBoYXMgemVybyBkdGltZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEQgQGkgJWkgaGFzIHplcm8gZHRpbWUuICAiCittc2dzdHIgIkBpIEBEICVpIGPDsyBkdGltZSBi4bqxbmcga2jDtG5nLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgIgorbXNnc3RyICJAaSAlaSDEkWFuZyDEkcaw4bujYyBkw7luZywgY8OybiDEkeG6t3QgZHRpbWUuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICJAaSAlaSBsw6AgQGQgQHouICAgICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODYKK21zZ2lkICJAZyAlZydzIEBiIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICJAQiBAYiBj4bunYSBAZyAlZyB04bqhaSAlYiBAQy5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTEKK21zZ2lkICJAZyAlZydzIEBpIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICJAQiBAaSBj4bunYSBAZyAlZyDhu58gJWIgQGMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgdGFibGUgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTYKK21zZ2lkICJAZyAlZydzIEBpIHRhYmxlIGF0ICViIEBDLlxuIgorbXNnc3RyICJC4bqjbmcgQGkgY+G7p2EgQGcgJWcg4bufICViIEBDLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDEKK21zZ2lkICJAZyAlZydzIEBiIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJAYiBAQiAoJWIpIGPhu6dhIEBnICVnIGzDoCBzYWkiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwNgorbXNnaWQgIkBnICVnJ3MgQGkgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIkBCIEBpICglYikgY+G7p2EgQGcgJWcgbMOgIHNhaS4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX3NpemUgaXMgJUlzLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTExCittc2dpZCAiQGkgJWksIGlfc2l6ZSBpcyAlSXMsIEBzICVOLiAgIgorbXNnc3RyICJAaSAlaSwgaV9zaXplIGzDoCAlSXMsIEBzICVOLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9ibG9ja3MgaXMgJUliLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE2Cittc2dpZCAiQGkgJWksIGlfQGJzIGlzICVJYiwgQHMgJU4uICAiCittc2dzdHIgIkBpICVpLCBpX0BicyBsw6AgJUliLCBAcyAlTi4gICIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyMQorbXNnaWQgIkBJICVCICglYikgaW4gQGkgJWkuICAiCittc2dzdHIgIiVCICglYikgQGwgbuG6sW0gdHJvbmcgQGkgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgb3ZlcmxhcHMgZmlsZXN5c3RlbSBtZXRhZGF0YSBpbiBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MjYKK21zZ2lkICIlQiAoJWIpIG92ZXJsYXBzIEBmIG1ldGFkYXRhIGluIEBpICVpLiAgIgorbXNnc3RyICIlQiAoJWIpIMSRw6ggbMOqbiBzacOqdSBk4buvIGxp4buHdSBAZiB0cm9uZyBAaSAlaS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJAaSAlaSBjw7MgQGIgY+G6pW0uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFRvbyBtYW55IGlsbGVnYWwgYmxvY2tzIGluIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzNgorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBpbGxlZ2FsIEBicyBpbiBAaSAlaS5cbiIKK21zZ3N0ciAiUXXDoSBuaGnhu4F1IEBiIGPhuqVtIHRyb25nIEBpICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gYmFkIGJsb2NrIGlub2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0MQorbXNnaWQgIkBJICVCICglYikgaW4gYmFkIEBiIEBpLiAgIgorbXNnc3RyICIlQiAoJWIpIEBsIG7hurFtIHRyb25nIEBpIEBiIHNhaS4gIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQ2Cittc2dpZCAiQmFkIEBiIEBpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJAaSBAYiBzYWkgY8OzIEBiIGPhuqVtLiAiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBvciBiYWQgYmxvY2sgaW4gdXNlIVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1MQorbXNnaWQgIkR1cGxpY2F0ZSBvciBiYWQgQGIgaW4gdXNlIVxuIgorbXNnc3RyICJAYiB0csO5bmcgaGF5IHNhaSDEkWFuZyDEkcaw4bujYyBkw7luZy5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrICViIHVzZWQgYXMgYmFkIGJsb2NrIGlub2RlIGluZGlyZWN0IGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1NgorbXNnaWQgIkJhZCBAYiAlYiB1c2VkIGFzIGJhZCBAYiBAaSBpbmRpcmVjdCBAYi4gICIKK21zZ3N0ciAiQGIgc2FpICViIMSRxrDhu6NjIGTDuW5nIGzDoG0gQGIgZ2nDoW4gdGnhur9wIGPhu6dhIEBpIEBiLiAgIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbgorIy4gQC1leHBhbmRlZDogc2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaW4gdGhlIGZpbGVzeXN0ZW0uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYxCittc2dpZCAiIgorIlxuIgorIlRoZSBiYWQgQGIgQGkgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4iCisic2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbiIKKyJpbiB0aGUgQGYuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJAaSBAbiBn4bqnbiBuaMawIGNo4bqvYyBjaOG6r24gxJHDoyBo4buPbmcuIMSQ4buBIG5naOG7iyBi4bqhbiBk4burbmcgbmdheSBiw6J5IGdp4budXG4iCisidsOgIGNo4bqheSBs4buHbmgg4oCcZTJmc2NrIC1j4oCdIMSR4buDIHF1w6l0IHTDrG0ga2jhu5FpIHNhaSB0cm9uZyBAZi5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IElmIHRoZSBibG9jayBpcyByZWFsbHkgYmFkLCB0aGUgZmlsZXN5c3RlbSBjYW4gbm90IGJlIGZpeGVkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2OAorbXNnaWQgIiIKKyJcbiIKKyJJZiB0aGUgQGIgaXMgcmVhbGx5IGJhZCwgdGhlIEBmIGNhbiBub3QgYmUgZml4ZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJAYiB0aOG6rXQgc2FpIHRow6wga2jDtG5nIHRo4buDIHPhu61hIGNo4buvYSBAZi5cbiIKKworIy4gQC1leHBhbmRlZDogWW91IGNhbiByZW1vdmUgdGhpcyBibG9jayBmcm9tIHRoZSBiYWQgYmxvY2sgbGlzdCBhbmQgaG9wZVxuCisjLiBALWV4cGFuZGVkOiB0aGF0IHRoZSBibG9jayBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3MworbXNnaWQgIiIKKyJZb3UgY2FuIHJlbW92ZSB0aGlzIEBiIGZyb20gdGhlIGJhZCBAYiBsaXN0IGFuZCBob3BlXG4iCisidGhhdCB0aGUgQGIgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLlxuIgorIlxuIgorbXNnc3RyICIiCisiQuG6oW4gY8OzIHRo4buDIGfhu6EgYuG7jyBAYiBuw6B5IGto4buPaSBkYW5oIHPDoWNoIGPDoWMgQGIgc2FpXG4iCisidsOgIG1vbmcgQGIgdGjhuq10IMSRw7puZy4gTmjGsG5nIG3DoCBraMO0bmcgYuG6o28gaMOgbmggZ8OsLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgcHJpbWFyeSBzdXBlcmJsb2NrICglYikgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3OQorbXNnaWQgIlRoZSBwcmltYXJ5IEBTICglYikgaXMgb24gdGhlIGJhZCBAYiBsaXN0LlxuIgorbXNnc3RyICJAUyBjaMOtbmggKCViKSBu4bqxbSB0csOqbiBkYW5oIHPDoWNoIGPDoWMgQGIgc2FpLlxuIgorCisjLiBALWV4cGFuZGVkOiBCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBncm91cCBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3RcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODQKK21zZ2lkICJCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBAZyBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIEBiIGxpc3RcbiIKK21zZ3N0ciAiIgorIkto4buRaSAlYiB0cm9uZyBuaOG7r25nIG3DtCB04bqjIEBnIGNow61uaCBjw7MgbuG6sW0gdHJvbmcgZGFuaCBzw6FjaCBjw6FjIEBiIHNhaS5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBzdXBlcmJsb2NrICglYikgaXMgYmFkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5MAorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgQFMgKCViKSBpcyBiYWQuXG4iCittc2dzdHIgIkPhuqNuaCBiw6FvOiBAUyBj4bunYSBAZyAlZyAoJWIpIGzDoCBzYWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIGJsb2NrICglYikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTk1Cittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBAZyBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgQGIgKCViKS5cbiIKK21zZ3N0ciAiQ+G6o25oIGLDoW86IGLhuqNuIHNhbyBjw6FjIG3DtCB04bqjIEBnIGPhu6dhIG5ow7NtICVnIGPDsyBt4buZdCBAYiBzYWkgKCViKS5cbiIKKworIy4gQC1leHBhbmRlZDogUHJvZ3JhbW1pbmcgZXJyb3I/ICBibG9jayAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX2Jsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwMQorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yPyAgQGIgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9AYi5cbiIKK21zZ3N0ciAiIgorIkzhu5dpIGzhuq1wIHRyw6xuaD8gQGIgJWIgxJHGsOG7o2MgdHV5w6puIGLhu5EsIGtow7RuZyBjw7MgbMO9IGRvLCB0cm9uZyBwcm9jZXNzX2JhZF9AYlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nICVOIGNvbnRpZ3VvdXMgYmxvY2socykgaW4gYmxvY2sgZ3JvdXAgJWcgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNworbXNnaWQgIkBBICVOIGNvbnRpZ3VvdXMgQGIocykgaW4gQGIgQGcgJWcgZm9yICVzOiAlbVxuIgorbXNnc3RyICJAQSAlTiBAYiBr4buBIG5oYXUgdHJvbmcgQGcgQGIgJWcgY2hvICVzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAYiBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbiIKK21zZ3N0ciAiQEEgYuG7mSDEkeG7h20gQGIgxJHhu4MgxJHhu4tuaCB24buLIGzhuqFpICVzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjE3Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbiIKK21zZ3N0ciAixJBhbmcgxJHhu4tuaCB24buLIGzhuqFpICVzIGPhu6dhIEBnICVnIHThu6sgJWIgc2FuZyAlYy4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIHRvICVjLi4uXG4iCittc2dzdHIgIsSQYW5nIMSR4buLbmggduG7iyBs4bqhaSAlMiRzIGPhu6dhIEBnICUxJGcgc2FuZyAlMyRjLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrICViIG9mICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyNworbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIEBiICViIG9mICVzOiAlbVxuIgorbXNnc3RyICJD4bqjbmggYsOhbzoga2jDtG5nIHRo4buDIMSR4buNYyBAYiAlYiB0csOqbiAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHdyaXRlIGJsb2NrICViIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzIKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICJD4bqjbmggYsOhbzoga2jDtG5nIHRo4buDIGdoaSBAYiAlYiBjaG8gJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjM3IGUyZnNjay9wcm9ibGVtLmM6MTUwMQorbXNnaWQgIkBBIEBpIEBCICglTik6ICVtXG4iCittc2dzdHIgIkBBIEBCIEBpICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQyCittc2dpZCAiQEEgQGIgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiQEEgQEIgQGIgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4iCittc2dzdHIgIkBBIHRow7RuZyB0aW4gbGnDqm4ga+G6v3QgaWNvdW50OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGRpcmVjdG9yeSBibG9jayBhcnJheTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGQgQGIgYXJyYXk6ICVtXG4iCittc2dzdHIgIkBBIG3huqNuZyBAZCBAZDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIEBpcyAoJWkpOiAlbVxuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgcXXDqXQgY8OhYyBAaSAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGzhurdwIGzhuqFpIHRyw6puIGPDoWMgQGIgdHJvbmcgQGkgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBjb3VudD0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjY3Cittc2dpZCAiRXJyb3Igc3RvcmluZyBAaSBjb3VudCBpbmZvcm1hdGlvbiAoQGk9JWksIGNvdW50PSVOKTogJW1cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGPhuqV0IGdp4buvIHRow7RuZyB0aW4gxJHhur9tIEBpIChAaT0laSwgxJHhur9tPSVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBkaXJlY3RvcnkgYmxvY2sgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBibG9jaz0lYiwgbnVtPSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzIKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBkIEBiIGluZm9ybWF0aW9uIChAaT0laSwgQGI9JWIsIG51bT0lTik6ICVtXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBj4bqldCBnaeG7ryB0aMO0bmcgdGluIEBkIEBiIChAaT0laSwgQGI9JWIsIHPhu5E9JU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhu41jIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgIgorbXNnc3RyICJAaSAlaSDEkeG6t3QgY+G7nSBtYSB0aHXhuq10IGltYWdpYy4gICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlICVpKSBoYXMgaW1tdXRhYmxlXG4KKyMuIEAtZXhwYW5kZWQ6IG9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoQGkgJWkpIGhhcyBpbW11dGFibGVcbiIKKyJvciBhcHBlbmQtb25seSBmbGFnIHNldC4gICIKK21zZ3N0ciAiIgorIlThuq1wIHRpbiAoQHYv4buVIGPhuq9tL0ZJRk8vbGnDqm4ga+G6v3QgbeG7gW0pIMSR4bq3YyBiaeG7h3RcbiIKKyIoQGkgJWkpIMSR4bq3dCBj4budIGtow7RuZyB0aGF5IMSR4buVaSAoaW1tdXRhYmxlKSBoYXlcbiIKKyJjaOG7iSBwaOG7pSB0aMOqbSAoYXBwZW5kLW9ubHkpLiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGNvbXByZXNzaW9uIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBjb21wcmVzc2lvbiBzdXBwb3J0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgQGNpb24gZmxhZyBzZXQgb24gQGYgd2l0aG91dCBAY2lvbiBzdXBwb3J0LiAgIgorbXNnc3RyICJAaSAlaSDEkeG6t3QgY+G7nSBAYyB0csOqbiBAZiBtw6Aga2jDtG5nIGjhu5cgdHLhu6Mga2jhuqMgbsSDbmcgQGMuIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8pIGlub2RlICVpIGhhcyBub24temVybyBzaXplLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWFsIChAdi9zb2NrZXQvZmlmbykgQGkgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAiCittc2dzdHIgIkBpIChAdi/hu5UgY+G6r20vRklGTykgJWkgY8OzIGvDrWNoIGPhu6Ega2jDtG5nIHBo4bqjaSBz4buRIGtow7RuZy4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzEyCittc2dpZCAiQGogQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkBpIEBqIGtow7RuZyDEkWFuZyDEkcaw4bujYyBkw7luZywgY8OybiBjaOG7qWEgZOG7ryBsaeG7h3UuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzE3Cittc2dpZCAiQGogaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiQGoga2jDtG5nIHBo4bqjaSB04bqtcCB0aW4gY2h14bqpbi4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIHdhcyBwYXJ0IG9mIHRoZSBAbyBAaSBsaXN0LiAgIgorbXNnc3RyICJAaSAlaSDEkcOjIHRodeG7mWMgduG7gSBzYW5oIHPDoWNoIEBpIEBvLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyOAorbXNnaWQgIkBpcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAiCittc2dzdHIgIlTDrG0gdGjhuqV5IGPDoWMgQGkgxJHDoyB0aHXhu5ljIHbhu4EgZGFuaCBzw6FjaCDEkcOjIGxpw6puIGvhur90IHRo4burYSBi4buLIGjhu49uZy4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMzCittc2dpZCAiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iCittc2dzdHIgIkBBIGPhuqV1IHRyw7pjIHJlZmNvdW50ICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGZvciBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MzgKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViIGZvciBAaSAlaS4gICIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buNYyBAYiBAYSAlYiBjaG8gQGkgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQzCittc2dpZCAiQGkgJWkgaGFzIGEgYmFkIEBhIEBiICViLiAgIgorbXNnc3RyICJAaSAlaSBjw7MgbeG7mXQgQGIgQGEgJWIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQ4Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhu41jIEBiIEBhICViICglbSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzUzCittc2dpZCAiQGEgQGIgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgQHMgJU4uICAiCittc2dzdHIgIkBiIEBhICViIGPDsyBz4buRIMSR4bq/bSB0aGFtIGNoaeG6v3UgJXIsIEBzICVOLiAgIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc1OAorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGdoaSBAYiBAYSAlYiAoJW0pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIGhfYmxvY2tzID4gMS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjMKK21zZ2lkICJAYSBAYiAlYiBoYXMgaF9AYnMgPiAxLiAgIgorbXNnc3RyICJAYiBAYSAlYiBjw7MgaF9AYiA+IDEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2OAorbXNnaWQgIkBBIEBhIEBiICViLiAgIgorbXNnc3RyICJAQSBAYiBAYSAlYi4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzMKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAiCittc2dzdHIgIkBiIEBhICViIGLhu4sgaOG7j25nICh4dW5nIMSR4buZdCBj4bqlcCBwaMOhdCkuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCBuYW1lKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzgKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiBuYW1lKS4gICIKK21zZ3N0ciAiQGIgQGEgJWIgYuG7iyBo4buPbmcgKHTDqm4gQG4pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCB2YWx1ZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzgzCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gdmFsdWUpLiAgIgorbXNnc3RyICJAYiBAYSAlYiBi4buLIGjhu49uZyAoZ2nDoSB0cuG7iyBAbikuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIHRvbyBiaWcuICAiCittc2dzdHIgIkBpICVpIGzDoCBxdcOhIGzhu5tuLiAgIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIGNhdXNlcyBkaXJlY3RvcnkgdG8gYmUgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3OTIKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBAZCB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIGfDonkgcmEgQGQgcXXDoSBs4bubbi4gICAgICAgICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OTcKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBmaWxlIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikgbMOgbSBjaG8gdOG6rXAgdGluIHF1w6EgbOG7m24uICAgICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAyCittc2dpZCAiJUIgKCViKSBjYXVzZXMgc3ltbGluayB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIGzDoG0gY2hvIGxpw6puIGvhur90IG3hu4FtIHF1w6EgbOG7m24gLiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuIgorbXNnc3RyICJAaSAlaSDEkeG6t3QgY+G7nSBJTkRFWF9GTCB0csOqbiBAZiBraMO0bmcgY8OzIGjhu5cgdHLhu6MgaHRyZWUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIgorbXNnc3RyICJAaSAlaSDEkeG6t3QgY+G7nSBJTkRFWF9GTCBuaMawbmcga2jDtG5nIHBo4bqjaSBAZC5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIHJvb3Qgbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgaGFzIGFuIEBuIHJvb3Qgbm9kZS5cbiIKK21zZ3N0ciAiQGggJWkgY8OzIG3hu5l0IG7DunQgZ+G7kWMgQG4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjIKK21zZ2lkICJAaCAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbiIKK21zZ3N0ciAiQGggJWkgY8OzIG3hu5l0IHBoacOqbiBi4bqjbiBixINtIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujICglTilcbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAiQGggJWkgZMO5bmcgY+G7nSBuw7p0IGfhu5FjIGh0cmVlIGtow7RuZyB0xrDGoW5nIHRow61jaC5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMyCittc2dpZCAiQGggJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbiIKK21zZ3N0ciAiQGggJWkgY8OzIMSR4buZIHPDonUgY8OieSAoJU4pIHF1w6EgbOG7m25cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBhbiBpbmRpcmVjdCBibG9jayAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBtZXRhZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzcKK21zZ2lkICIiCisiQmFkIEBiIEBpIGhhcyBhbiBpbmRpcmVjdCBAYiAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbiIKKyJAZiBtZXRhZGF0YS4gICIKK21zZ3N0ciAiIgorIkBpIEBiIHNhaSBjw7MgbeG7mXQgQGIgZ2nDoW4gdGnhur9wICglYikgeHVuZyDEkeG7mXQgduG7m2lcbiIKKyJzacOqdSBk4buvIGxp4buHdSBAZi4gICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIKK21zZ3N0ciAiVmnhu4djIHThuqFvIChs4bqhaSkgc+G7sSB0aGF5IMSR4buVaSBrw61jaCBj4buhIEBpIGLhu4sgbOG7l2k6ICVtLiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQ4Cittc2dpZCAiQGkgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJAaSAlaSBjw7MgbeG7mXQga8OtY2ggY+G7oSB0aMOqbSAoJUlTKSBAblxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTMKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiQGEgdHJvbmcgQGkgJWkgY8OzIG3hu5l0IG5hbWVsZW4gKCVOKSBAblxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1OAorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkBhIHRyb25nIEBpICVpIGPDsyBt4buZdCBoaeG7h3UgZ2nDoSB0cuG7iyAoJU4pIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBibG9jayAoJU4pIHdoaWNoIGlzIGludmFsaWQgKG11c3QgYmUgMClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjMKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBAYiAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCittc2dzdHIgIkBhIHRyb25nIEBpICVpIGPDsyBt4buZdCBnacOhIHRy4buLIEBiICglTikgQG4gKHBo4bqjaSBsw6AgMClcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODY4Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkBhIHRyb25nIEBpICVpIGPDsyBt4buZdCBrw61jaCBj4buhIGdpw6EgdHLhu4sgKCVOKSBAblxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzMKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiQGEgdHJvbmcgQGkgJWkgY8OzIG3hu5l0IGNodeG7l2kgZHV5IG5o4bqldCAoJU4pIG3DoCBAblxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODc4Cittc2dpZCAiQGkgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuIgorbXNnc3RyICJAaSAlaSBsw6AgJUl0IG5oxrBuZyBow6xuaCBuaMawIG7DsyB0aOG7sWMgc+G7sSBsw6AgdGjGsCBt4bulYy5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIGV4dGVudCB0cmVlIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgQHggdHJlZSBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buNYyBxdWEgY8OieSBAeCB0cm9uZyBAaSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBpbm9kZSAlaVxuCisjLiBALWV4cGFuZGVkOiBcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODgKK21zZ2lkICIiCisiRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBAaSAlaVxuIgorIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuIgorbXNnc3RyICIiCisiS2jDtG5nIGzhurdwIGzhuqFpIHThuqdtIHRyb25nIEBpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBpbnZhbGlkIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk0Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBAbiBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiQGkgJWkgY8OzIG3hu5l0IHBo4bqhbSB2aSBAblxuIgorIlx0KEBiIGjhu6NwIGzDvSAlYywgQGIgduG6rXQgbMO9IEBuICViLCBkw6BpICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGludmFsaWQgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5OQorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIEBuIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIkBpICVpIGPDsyBt4buZdCBwaOG6oW0gdmkgQG5cbiIKKyJcdChAYiBo4bujcCBsw70gJWMsIEBiIHbhuq10IGzDvSAlYiwgZMOgaSBAbiAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4iCittc2dzdHIgIkBpICVpIMSR4bq3dCBj4budIEVYVEVOVFNfRkwgdHLDqm4gQGYgbcOgIGtow7RuZyBo4buXIHRy4bujIHBo4bqhbSB2aS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IHN1cGVyYmxvY2sgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IEBTIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4iCittc2dzdHIgIiIKKyJAaSAlaSB0aGVvIMSR4buLbmggZOG6oW5nIHBo4bqhbSB2aSwgY8OybiBAUyB0aGnhur91IHTDrW5oIG7Eg25nIHBo4bqhbSB2aSAoRVhURU5UUylcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4iCittc2dzdHIgIkBpICVpIHRoaeG6v3UgRVhURU5UU19GTCwgbmjGsG5nIHRoZW8gxJHhu4tuaCBk4bqhbmcgcGjhuqFtIHZpXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIKK21zZ3N0ciAiTGnDqm4ga+G6v3QgbeG7gW0gbmhhbmggJWkgxJHDoyDEkeG6t3QgRVhURU5UU19GTC4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIG91dCBvZiBvcmRlciBleHRlbnRzXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjQKK21zZ2lkICIiCisiQGkgJWkgaGFzIG91dCBvZiBvcmRlciBleHRlbnRzXG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIkBpICVpIGPDsyBjw6FjIHBo4bqhbSB2aSBzYWkgdGjhu6kgdOG7sVxuIgorIlx0KEBiIGjhu6NwIGzDvSAlYywgQGIgduG6rXQgbMO9ICViLCBkw6BpICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyOAorbXNnaWQgIkBpICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4iCittc2dzdHIgIkBpICVpIGPDsyBt4buZdCBuw7p0IHThuqdtIGtow7RuZyBo4bujcCBs4buHIChibGsgJWIsIGxibGsgJWMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBAYiBAQjogJW1cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGNodXnhu4NuIMSR4buVaSBsacOqbiBjdW5nIGNvbiBAYiBAQjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzgKK21zZ2lkICJAcSBAaSBpcyBub3QgcmVndWxhciBmaWxlLiAgIgorbXNnc3RyICJAcSBAaSAga2jDtG5nIHBo4bqjaSB04bqtcCB0aW4gdGjDtG5nIHRoxrDhu51uZy4gICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQzCittc2dpZCAiQHEgQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkBxIEBpIMSRYW5nIGtow7RuZyDEkcaw4bujYyBkw7luZywgbmjGsG5nIGNo4bupYSBk4buvIGxp4buHdS4iCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQ4Cittc2dpZCAiQHEgQGkgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gICIKK21zZ3N0ciAiQHEgQGkgc+G6tW4gZMO5bmcuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGxvb2tzIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUzCittc2dpZCAiVGhlIGJhZCBAYiBAaSBsb29rcyBAbi4gICIKK21zZ3N0ciAiVGhlIGJhZCBAYiBAaSBsb29rcyBAbi4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1OAorbXNnaWQgIiIKKyJAaSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIpXG4iCittc2dzdHIgIiIKKyJAaSAlaSBjw7MgcGjhuqduIG3hu58gcuG7mW5nIG3DoCDEkeG7mSBkw6BpIGLhurFuZyBraMO0bmdcbiIKKyJcdChAbiBsw7Rnw61jIEBiICVjLCB24bqtdCBsw70gQGIgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEludGVyaW9yIGV4dGVudCBub2RlIGxldmVsICVOIG9mIGlub2RlICVpOlxuCisjLiBALWV4cGFuZGVkOiBMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NjUKK21zZ2lkICIiCisiSW50ZXJpb3IgQHggbm9kZSBsZXZlbCAlTiBvZiBAaSAlaTpcbiIKKyJMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gICIKK21zZ3N0ciAiIgorIuG7niB0cm9uZyBuw7p0IEB4IG3hu6ljICVOL0BpICVpOlxuIgorIkto4bufaSDEkeG6p3UgbMO0LWfDrWMgJWIga2jDtG5nIGto4bubcCB24bubaSBraOG7n2kgxJHhuqd1IGzDtC1nw61jICVjIHThuqFpIG3hu6ljIGvhur8gdGnhur9wLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzEKK21zZ2lkICIiCisiQGkgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIkBpICVpLCDEkWnhu4NtIGvhur90IHRow7pjIHbGsOG7o3QgcXXDoSBnacOhIHRy4buLIGNobyBwaMOpcFxuIgorIlx0KGzDtC1nw61jIEBiICVjLCB24bqtdCBsw70gQGIgJWIsIGTDoGkgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBibG9jayAlYiBzaG91bGQgYmUgYXQgYmxvY2sgJWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTc3Cittc2dpZCAiQGQgQGkgJWkgQGIgJWIgc2hvdWxkIGJlIGF0IEBiICVjLiAgIgorbXNnc3RyICJAZCBAaSAlaSBAYiAlYiBuw6puIOG7nyB04bqhaSBAYiAlYy4gICIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBleHRlbnQgbWFya2VkIHVuaW5pdGlhbGl6ZWQgYXQgYmxvY2sgJWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBpICVpIGhhcyBAeCBtYXJrZWQgdW5pbml0aWFsaXplZCBhdCBAYiAlYy4gICIKK21zZ3N0ciAiQGkgQGQgJWkgY8OzIG3hu5l0IEB4IMSRxrDhu6NjIMSRw6FuaCBk4bqldSBsw6AgY2jGsGEga2jhu59pIHThuqFvIHThuqFpIEBiaeG6v24gJWMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGxvZ2ljYWwgYmxvY2sgJWIgKHBoeXNpY2FsIGJsb2NrICVjKSB2aW9sYXRlcyBjbHVzdGVyIGFsbG9jYXRpb24gcnVsZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFdpbGwgZml4IGluIHBhc3MgMUIuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTg3Cittc2dpZCAiIgorIkBpICVpIGxvZ2ljYWwgQGIgJWIgKHBoeXNpY2FsIEBiICVjKSB2aW9sYXRlcyBjbHVzdGVyIGFsbG9jYXRpb24gcnVsZXMuXG4iCisiV2lsbCBmaXggaW4gcGFzcyAxQi5cbiIKK21zZ3N0ciAiIgorIkBpICVpIGzDtC1nw61jIEBiICViICh24bqtdCBsw70gQGIgJWMpIHZpIHBo4bqhbSBxdWkgdOG6r2MgcGjDom4gYuG7jyBsacOqbiBjdW5nLlxuIgorIlPhur0gxJHGsOG7o2Mgc+G7rWEgdOG6oWkgbOG6p24gMUIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLlxuCisjLiBALWV4cGFuZGVkOiBQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk5NAorbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgQGJzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBAaS4uLlxuIgorIlBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIEBtIEBic1xuIgorbXNnc3RyICIiCisiXG4iCisixJDhuqFuZyBjaOG6oXkgbeG7mXQgc+G7kSBs4bqnbiBxdWEgdGjDqm0gxJHhu4MgdGjDoW8gZ+G7oSBjw6FjIEBiIMSRw6MgdHV5w6puIGLhu5FcbiIKKyJi4bufaSBuaGnhu4F1IEBpLi4uXG4iCisiTOG6p24gcXVhIDFCOiDEkWFuZyBxdcOpdCBs4bqhaSB0w6xtIEBiIEBtLlxuIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlICVpOgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBtIEBiKHMpIGluIEBpICVpOiIKK21zZ3N0ciAiQGIgQG0gdHJvbmcgQGkgJWk6IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBxdcOpdCBjw6FjIG7DunQgdGjDtG5nIHRpbiAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoaW5vZGVfZHVwX21hcCk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAaSBAQiAoQGlfZHVwX21hcCk6ICVtXG4iCittc2dzdHIgIkBBIEBCIEBpIChAaV9kdXBfbWFwKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGzhurdwIGzhuqFpIHRyw6puIGPDoWMgQGIgdHJvbmcgQGkgJWkgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDMwIGUyZnNjay9wcm9ibGVtLmM6MTM0NQorbXNnaWQgIkVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgQGEgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSRaeG7gXUgY2jhu4luaCBz4buRIMSR4bq/bSB0aGFtIGNoaeG6v3UgY2hvIEBiIEBhICViIChAaSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzUKK21zZ2lkICJQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgQGlzIHdpdGggQG0gQGJzXG4iCittc2dzdHIgIkzhuqduIHF1YSAxQzogxJFhbmcgcXXDqXQgY8OhYyB0aMawIG3hu6VjIHTDrG0gQGkgY8OzIEBiIEBtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0MQorbXNnaWQgIlBhc3MgMUQ6IFJlY29uY2lsaW5nIEBtIEBic1xuIgorbXNnc3RyICJM4bqnbiBxdWEgMUQ6IMSRYW5nIMSRaeG7gXUgaG/DoCBjw6FjIEBiIEBtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpbGUgJVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKSBcbgorIy4gQC1leHBhbmRlZDogICBoYXMgJXIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDQ2Cittc2dpZCAiIgorIkZpbGUgJVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKSBcbiIKKyIgIGhhcyAlciBAbSBAYihzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbiIKK21zZ3N0ciAiIgorIlThuq1wIHRpbiAlUSAoQGkgIyVpLCBnaeG7nSBz4butYSDEkeG7lWkgJUlNKSBcbiIKKyIgIGPDsyAlciBAYiBAbSwgY2hpYSBz4bq7IHbhu5tpICVOIHThuq1wIHRpbjpcbiIKKworIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1MgorbXNnaWQgIlx0JVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKVxuIgorbXNnc3RyICJcdCVRIChAaSAjJWksIGdp4budIHPhu61hIMSR4buVaSAlSU0pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1NworbXNnaWQgIlx0PEBmIG1ldGFkYXRhPlxuIgorbXNnc3RyICJcdDxzacOqdSBk4buvIGxp4buHdSBAZj5cbiIKKworIy4gQC1leHBhbmRlZDogKFRoZXJlIGFyZSAlTiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjIKK21zZ2lkICIiCisiKFRoZXJlIGFyZSAlTiBAaXMgY29udGFpbmluZyBAbSBAYnMuKVxuIgorIlxuIgorbXNnc3RyICIiCisiKEPDsyAlTiBAaXMgY2jhu6lhIEBiIEBtLilcbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA2NworbXNnaWQgIiIKKyJAbSBAYnMgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkBiIEBtIMSRw6MgxJHGsOG7o2MgZ8OhbiBs4bqhaSBoYXkgbmjDom4gYuG6o24uXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjbG9uZSBmaWxlOiAlbVxuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbmjDom4gYuG6o24gdOG6rXAgdGluOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDg2Cittc2dpZCAiUGFzcyAyOiBDaGVja2luZyBAZCBzdHJ1Y3R1cmVcbiIKK21zZ3N0ciAiTOG6p24gcXVhIDI6IMSRYW5nIGtp4buDbSB0cmEgY+G6pXUgdHLDumMgQGRcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBpbm9kZSBudW1iZXIgZm9yICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJAbiBAaSBudW1iZXIgZm9yICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiQ29uIHPhu5EgQGkgQG4gY2hvIGThuqV1IGNo4bqlbSDigJwu4oCdIHRyb25nIEBpIEBkICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbnZhbGlkIGlub2RlICM6ICVEaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDk2Cittc2dpZCAiQEUgaGFzIEBuIEBpICM6ICVEaS5cbiIKK21zZ3N0ciAiQEUgY8OzIHPhu5EgaGnhu4d1IEBpIEBuOiAlRGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlICVEaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTAxCittc2dpZCAiQEUgaGFzIEBEL3VudXNlZCBAaSAlRGkuICAiCittc2dzdHIgIkBFIGPDsyBAaSBARC9jaMawYSBkw7luZyAlRGkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvICcuJyAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDYKK21zZ2lkICJARSBATCB0byAnLicgICIKK21zZ3N0ciAiQEUgQEwgxJHhur9uIOKAnC7igJ0gICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBwb2ludHMgdG8gaW5vZGUgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTExCittc2dpZCAiQEUgcG9pbnRzIHRvIEBpICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgQGIuXG4iCittc2dzdHIgIkBFIGNo4buJIHThu5tpIEBpICglRGkpIG7hurFtIHRyb25nIEBiIHNhaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gZGlyZWN0b3J5ICVQICglRGkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTYKK21zZ2lkICJARSBATCB0byBAZCAlUCAoJURpKS5cbiIKK21zZ3N0ciAiQEUgQEwgxJHhur9uIEBkICVQICglRGkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byB0aGUgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTIxCittc2dpZCAiQEUgQEwgdG8gdGhlIEByLlxuIgorbXNnc3RyICJARSBATCB04bubaSBAci5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjYKK21zZ2lkICJARSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuIgorbXNnc3RyICJARSBjw7MgdMOqbiBjaOG7qWEga8O9IHThu7EgY+G6pW0uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJUaGnhur91IOKAnC7igJ0gdHJvbmcgQGkgQGQgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4uJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIlRoaeG6v3Ug4oCcLi7igJ0gdHJvbmcgQGkgQGQgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpcnN0IGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApIHNob3VsZCBiZSAnLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQxCittc2dpZCAiRmlyc3QgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgKCVwKSBAcyAnLidcbiIKK21zZ3N0ciAiQGUg4oCcJURu4oCdIHRo4bupIG5o4bqldCAoQGk9JURpKSB0cm9uZyBAaSBAZCAlaSAoJXApIEBzIOKAnC7igJ1cbiIKKworIy4gQC1leHBhbmRlZDogU2Vjb25kIGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSBzaG91bGQgYmUgJy4uJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDYKK21zZ2lkICJTZWNvbmQgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgQHMgJy4uJ1xuIgorbXNnc3RyICJAZSDigJwlRG7igJ0gdGjhu6kgaGFpIChAaT0lRGkpIHRyb25nIEBpIEBkICVpIEBzIOKAnC4u4oCdXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmFkZHIgZm9yIGlub2RlICVpICglUSkgaXMgJUlGLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTUxCittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgIsSQ4buLYSBjaOG7iSBpX2ZhZGRyIGNobyBuw7p0IGluam9kZSAlaSAoJVEpIGzDoCAlSUYsIGPDsm4gbsOqbiBsw6Agc+G7kSBraMO0bmcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlmLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTU2Cittc2dpZCAiaV9maWxlX2FjbCBARiAlSWYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2wgQEYgJUlmLCBAcyBz4buRIGtow7RuZy5cbiIKKworIy4gQC1leHBhbmRlZDogaV9kaXJfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZCwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2MQorbXNnaWQgImlfZGlyX2FjbCBARiAlSWQsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZGlyX2FjbCBARiAlSWQsIEBzIHPhu5Ega2jDtG5nLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZyYWcgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjYKK21zZ2lkICJpX2ZyYWcgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfZnJhZyBARiAlTiwgQHMgc+G7kSBraMO0bmcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnNpemUgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzEKK21zZ2lkICJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZzaXplIEBGICVOLCBAcyBz4buRIGtow7RuZy5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlICglSW0pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzYKK21zZ2lkICJAaSAlaSAoJVEpIGhhcyBAbiBtb2RlICglSW0pLlxuIgorbXNnc3RyICJAaSAlaSAoJVEpIGPDsyBjaOG6vyDEkeG7mSBAbiAoJUltKS5cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBkaXJlY3RvcnkgY29ycnVwdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4MQorbXNnaWQgIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBAZCBjb3JydXB0ZWRcbiIKK21zZ3N0ciAiQGkgQGQgJWksICVCLCBoaeG7h3UgJU46IEBkIGLhu4sgaOG7j25nXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTg2Cittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4iCittc2dzdHIgIkBpIEBkICVpLCAlQiwgaGnhu4d1ICVOOiB0w6puIHThuq1wIHRpbiBxdcOhIGTDoGlcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiB1bmFsbG9jYXRlZCAlQi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTkxCittc2dpZCAiQGQgQGkgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgIgorbXNnc3RyICJAaSBAZCAlaSBjw7MgbeG7mXQgJUIgY2jGsGEgY+G6pXAgcGjDoXQuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIicuJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIkBlIEBkIOKAnC7igJ0gdHJvbmcgQGkgQGQgJWkga2jDtG5nIMSRxrDhu6NjIGNo4bqlbSBk4bupdCBi4bqxbmcgTlVMTCAodsO0IGdpw6EgdHLhu4spXG4iCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICInLi4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiQGUgQGQg4oCcLi7igJ0gdHJvbmcgQGkgQGQgJWkga2jDtG5nIMSRxrDhu6NjIGNo4bqlbSBk4bupdCBi4bqxbmcgTlVMTCAodsO0IGdpw6EgdHLhu4spXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDYKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIGNoYXJhY3RlciBAdi5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSBsw6AgQHYga8O9IHThu7EgQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBibG9jayBkZXZpY2UuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIxMQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgQGIgQHYuXG4iCittc2dzdHIgIkBpICVpICglUSkgbMOgIEB2IEBiIEBJLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIxNgorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLicgQGUuXG4iCittc2dzdHIgIkBFIGzDoCBAZSDigJwu4oCdIHRyw7luZy5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4uJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjIxCittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuLicgQGUuXG4iCittc2dzdHIgIkBFIGzDoCBAZSDigJwuLuKAnSB0csO5bmcuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNiBlMmZzY2svcHJvYmxlbS5jOjE1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICJM4buXaSBu4buZaSBi4buZOiBraMO0bmcgdMOsbSB0aOG6pXkgdGjDtG5nIHRpbiB0aMawIG3hu6VjIChkaXJfaW5mbykgduG7gSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgcmVjX2xlbiBvZiAlRHIsIHNob3VsZCBiZSAlTi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjMxCittc2dpZCAiQEUgaGFzIHJlY19sZW4gb2YgJURyLCBAcyAlTi5cbiIKK21zZ3N0ciAiQEUgY8OzIHJlY19sZW4gJURyLCBAcyAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IHN0cnVjdHVyZTogJW1cbiIKK21zZ3N0ciAiQEEgY+G6pXUgdHLDumMgaWNvdW50OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcnkgYmxvY2tzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaXRlcmF0aW5nIG92ZXIgQGQgQGJzOiAlbVxuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgbOG6t3AgbOG6oWkgdHLDqm4gY8OhYyBAYiBAZDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQ2Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhu41jIEBiIEBkICViIChAaSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1MQorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGdoaSBAYiBAZCAlYiAoQGkgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2sgZm9yIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBuZXcgQGQgQGIgZm9yIEBpICVpICglcyk6ICVtXG4iCittc2dzdHIgIkBBIEBiIEBkIG3hu5tpIGNobyBAaSAlaSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBkZWFsbG9jYXRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWFsbG9jYXRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBo4buneSBj4bqlcCBwaMOhdCBAaSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGVudHJ5IGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJAZCBAZSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuIgorbXNnc3RyICJAZCBAZSDEkeG7kWkgduG7m2kg4oCcLuKAnSB0cm9uZyAlcCAoJWkpIHF1w6EgbOG7m24uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBGSUZPLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNzEKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIEZJRk8uXG4iCittc2dzdHIgIkBpICVpICglUSkgbMOgIG3hu5l0IEZJRk8gQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBzb2NrZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3NgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgc29ja2V0LlxuIgorbXNnc3RyICJAaSAlaSAoJVEpIGzDoCBt4buZdCDhu5UgY+G6r20gQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICclRG4nIGluICVwICglaSkgdG8gJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4MQorbXNnaWQgIlNldHRpbmcgZmlsZXR5cGUgZm9yIEBFIHRvICVOLlxuIgorbXNnc3RyICLEkMSDbmcgxJHhurd0IGtp4buDdSB04bqtcCB0aW4gY2hvIEBFIHRow6BuaCAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBzaG91bGQgYmUgJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODYKK21zZ2lkICJARSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBAcyAlTikuXG4iCittc2dzdHIgIkBFIGPDsyBraeG7g3UgdOG6rXAgdGluIGtow7RuZyDEkcO6bmcgKMSRw6MgJUR0LCBAcyAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGZpbGV0eXBlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjkxCittc2dpZCAiQEUgaGFzIGZpbGV0eXBlIHNldC5cbiIKK21zZ3N0ciAiQEUgxJHhurd0IGtp4buDdSB04bqtcCB0aW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgemVyby1sZW5ndGggbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjk2Cittc2dpZCAiQEUgaGFzIGEgQHogbmFtZS5cbiIKK21zZ3N0ciAiQEUgY8OzIHTDqm4gQHouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFN5bWxpbmsgJVEgKGlub2RlICMlaSkgaXMgaW52YWxpZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzAxCittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiTGnDqm4ga+G6v3QgbeG7gW0gJVEgKEBpICMlaSkgQG4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDYKK21zZ2lkICJAYSBAYiBARiBAbiAoJUlmKS5cbiIKK21zZ3N0ciAiQGEgQGIgQEYgQG4gKCVJZikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzExCittc2dpZCAiQGYgY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gQFMuXG4iCittc2dzdHIgIkBmIGNo4bupYSBjw6FjIHThuq1wIHRpbiBs4bubbiBjw7JuIHRoaeG6v3UgY+G7nSBMQVJHRV9GSUxFIHRyb25nIEBTLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgbm90IHJlZmVyZW5jZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzE2Cittc2dpZCAiQHAgQGggJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4iCittc2dzdHIgIkBwIEBoICVkOiAlQiBraMO0bmcgxJHGsOG7o2MgdGhhbSBjaGnhur91XG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiByZWZlcmVuY2VkIHR3aWNlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMyMQorbXNnaWQgIkBwIEBoICVkOiAlQiByZWZlcmVuY2VkIHR3aWNlXG4iCittc2dzdHIgIkBwIEBoICVkOiAlQiDEkcaw4bujYyB0aGFtIGNoaeG6v3UgaGFpIGzhuqduXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMyNgorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4iCittc2dzdHIgIkBwIEBoICVkOiAlQiBjw7MgY2h14buXaSBkdXkgbmjhuqV0IHThu5FpIHRoaeG7g3Ugc2FpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzMQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4iCittc2dzdHIgIkBwIEBoICVkOiAlQiBjw7MgY2h14buXaSBkdXkgbmjhuqV0IHThu5FpIMSRYSBzYWlcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzM2Cittc2dpZCAiQG4gQGggJWQgKCVxKS4gICIKK21zZ3N0ciAiQGggQG4gJWQgKCVxKS4gICIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKTogYmFkIGJsb2NrIG51bWJlciAlYi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQwCittc2dpZCAiQHAgQGggJWQgKCVxKTogYmFkIEBiIG51bWJlciAlYi5cbiIKK21zZ3N0ciAiQHAgQGggJWQgKCVxKTogc+G7kSBAYiBzYWkgJWIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiByb290IG5vZGUgaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHAgQGggJWQ6IHJvb3Qgbm9kZSBpcyBAblxuIgorbXNnc3RyICJAcCBAaCAlZDogbsO6dCBn4buRYyBAblxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgbGltaXQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTUKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGxpbWl0ICglTilcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIGPDsyBnaeG7m2kgaOG6oW4gQG4gKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgY291bnQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjAKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGNvdW50ICglTilcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIGPDsyBz4buRIMSR4bq/bSBAbiAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzY1Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgY8OzIG3hu5l0IGLhuqNuZyBjaHXhu5dpIGR1eSBuaOG6pXQga2jDtG5nIMSR4bq3dCB0aOG7qSB04buxXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBkZXB0aCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgY8OzIGNoaeG7gXUgc8OidSBAbiAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzUKK21zZ2lkICJEdXBsaWNhdGUgQEUgZm91bmQuICAiCittc2dzdHIgIlTDrG0gdGjhuqV5IEBFIHRyw7luZy4gICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuCisjLiBALWV4cGFuZGVkOiBSZW5hbWUgdG8gJXMKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4MAorIywgbm8tYy1mb3JtYXQKK21zZ2lkICIiCisiQEUgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbiIKKyJSZW5hbWUgdG8gJXMiCittc2dzdHIgIiIKKyJARSBjw7MgdMOqbiB04bqtcCB0aW4ga2jDtG5nIGR1eSBuaOG6pXQuXG4iCisiVGhheSDEkeG7lWkgdMOqbiB0aMOgbmggJXMiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBmb3VuZC5cbgorIy4gQC1leHBhbmRlZDogXHRNYXJraW5nICVwICglaSkgdG8gYmUgcmVidWlsdC5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4NQorbXNnaWQgIiIKKyJEdXBsaWNhdGUgQGUgJyVEbicgZm91bmQuXG4iCisiXHRNYXJraW5nICVwICglaSkgdG8gYmUgcmVidWlsdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlTDrG0gdGjhuqV5IEBlIOKAnCVEbuKAnSB0csO5bmcuXG4iCisiXHROw6puIG5ow6NuICVwICglaSkgY+G6p24gxJHGsOG7o2MgeMOieSBk4buxbmcgbOG6oWkuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfYmxvY2tzX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzkwCittc2dpZCAiaV9ibG9ja3NfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfYmxvY2tzX2hpIEBGICVOLCBAcyBz4buRIGtow7RuZy5cbiIKKworIy4gQC1leHBhbmRlZDogVW5leHBlY3RlZCBibG9jayBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk1Cittc2dpZCAiVW5leHBlY3RlZCBAYiBpbiBAaCAlZCAoJXEpLlxuIgorbXNnc3RyICJH4bq3cCBAYiBi4bqldCB0aMaw4budbmcgdHJvbmcgQGggJWQgKCVxKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBpbiBncm91cCAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk5Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgaW4gQGcgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4iCittc2dzdHIgIkBFIHRoYW0gY2hp4bq/dSDEkeG6v24gQGkgJURpIHRyb25nIEBnICVnIOG7nyB24buLIHRyw60gxJHhurd0IF9JTk9ERV9VTklOSVQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgZm91bmQgaW4gZ3JvdXAgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwNAorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGZvdW5kIGluIEBnICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuIgorbXNnc3RyICIiCisiQEUgdGhhbSBjaGnhur91IMSR4bq/biBAaSAlRGkgxJHGsOG7o2MgdMOsbSB0cm9uZyB2w7luZyBuw7p0IHRow7RuZyB0aW4ga2jDtG5nIGTDuW5nIGPhu6dhIEBnICIKKyIlZy5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbF9oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwOQorbXNnaWQgImlfZmlsZV9hY2xfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2xfaGkgQEYgJU4sIEBzIHPhu5Ega2jDtG5nLlxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDE2Cittc2dpZCAiUGFzcyAzOiBDaGVja2luZyBAZCBjb25uZWN0aXZpdHlcbiIKK21zZ3N0ciAiTOG6p24gMzogxJBhbmcga2nhu4NtIHRyYSBraOG6oyBuxINuZyBr4bq/dCBu4buRaSBj4bunYSBAZFxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIG5vdCBhbGxvY2F0ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyMQorbXNnaWQgIkByIG5vdCBhbGxvY2F0ZWQuICAiCittc2dzdHIgIkNoxrBhIGPhuqVwIHBow6F0IEByLiAgIgorCisjLiBALWV4cGFuZGVkOiBObyByb29tIGluIGxvc3QrZm91bmQgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjYKK21zZ2lkICJObyByb29tIGluIEBsIEBkLiAgIgorbXNnc3RyICJLaMO0bmcgY8OzIGNo4buXIGPDsm4gdHLhu5FuZyB0cm9uZyBAZCBAbC4gICIKKworIy4gQC1leHBhbmRlZDogVW5jb25uZWN0ZWQgZGlyZWN0b3J5IGlub2RlICVpICglcClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuY29ubmVjdGVkIEBkIEBpICVpICglcClcbiIKK21zZ3N0ciAiQGkgQGQgJWkga2jDtG5nIMSRxrDhu6NjIGvhur90IG7hu5FpICglcClcbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzYKK21zZ2lkICIvQGwgbm90IGZvdW5kLiAgIgorbXNnc3RyICIvQGwga2jDtG5nIHTDrG0gdGjhuqV5LiIKKworIy4gQC1leHBhbmRlZDogJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIHNob3VsZCBiZSAlcSAoJWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDEKK21zZ2lkICInLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKK21zZ3N0ciAi4oCcLi7igJ0gdHJvbmcgJVEgKCVpKSBsw6AgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIG9yIG5vbi1leGlzdGVudCAvbG9zdCtmb3VuZC4gIENhbm5vdCByZWNvbm5lY3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ0NgorbXNnaWQgIkJhZCBvciBub24tZXhpc3RlbnQgL0BsLiAgQ2Fubm90IHJlY29ubmVjdC5cbiIKK21zZ3N0ciAiQ8OzIC9AbCBzYWkgaGF5IGtow7RuZyB04buTbiB04bqhaSBuw6puIGtow7RuZyB0aOG7gyBr4bq/dCBu4buRaSBs4bqhaS5cbiIKKworIy4gQC1leHBhbmRlZDogQ291bGQgbm90IGV4cGFuZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBleHBhbmQgL0BsOiAlbVxuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyBy4buZbmcgL0BsOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlY29ubmVjdCAlaTogJW1cbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGvhur90IG7hu5FpIGzhuqFpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGPhu5EgdMOsbSAvQGw6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfYmxvY2s6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BiOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X0BiOiAlbSB0cm9uZyBraGkgY+G7kSB04bqhbyBAZCAvQGxcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19pbm9kZTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDcxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfQGk6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgImV4dDJmc19uZXdfQGk6ICVtIHRyb25nIGtoaSBj4buRIHThuqFvIEBkIC9AbFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Rpcl9ibG9jazogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19kaXJfQGI6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBAZCBAYlxuIgorbXNnc3RyICJleHQyZnNfbmV3X2Rpcl9AYjogJW0gdHJvbmcga2hpIMSRYW5nIHThuqFvIEBiIEBkIG3hu5tpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc193cml0ZV9kaXJfYmxvY2s6ICVtIHdoaWxlIHdyaXRpbmcgdGhlIGRpcmVjdG9yeSBibG9jayBmb3IgL2xvc3QrZm91bmRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc193cml0ZV9kaXJfQGI6ICVtIHdoaWxlIHdyaXRpbmcgdGhlIEBkIEBiIGZvciAvQGxcbiIKK21zZ3N0ciAiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gdHJvbmcga2hpIGdoaSBAYiBAZCBjaG8gL0BsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGFkanVzdGluZyBpbm9kZSBjb3VudCBvbiBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgYWRqdXN0aW5nIEBpIGNvdW50IG9uIEBpICVpXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkWnhu4F1IGNo4buJbmggc+G7kSDEkeG6v20gQGkgdHLDqm4gQGkgJWlcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBz4butYSBjaOG7r2EgbsO6dCBjaGEgY+G7p2EgQGkgJWk6ICVtXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkbid0IGZpeCBwYXJlbnQgb2YgaW5vZGUgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IGRpcmVjdG9yeSBlbnRyeVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBAZCBAZVxuIgorIlxuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIHPhu61hIGNo4buvYSBuw7p0IGNoYSBj4bunYSBAaSAlaToga2jDtG5nIHTDrG0gdGjhuqV5IEBlIEBkIGNoYVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdOG6oW8gQGQgZ+G7kWMgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHThuqFvIEBkIC9AbCAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeTsgYWJvcnRpbmcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxNgorbXNnaWQgIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIKK21zZ3N0ciAiQHIga2jDtG5nIHBo4bqjaSBAZCBuw6puIGjhu6d5IGLhu48uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MjEKK21zZ2lkICJDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgQHIuXG4iCittc2dzdHIgIktow7RuZyB0aOG7gyB0aeG6v3AgdOG7pWMga2hpIGtow7RuZyBjw7MgQHIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIGlzIG5vdCBhIGRpcmVjdG9yeSAoaW5vPSVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiL0BsIGlzIG5vdCBhIEBkIChpbm89JWkpXG4iCittc2dzdHIgIi9AbCBraMO0bmcgcGjhuqNpIEBkIChpbm89JWkpXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUzOAorbXNnaWQgIlBhc3MgM0E6IE9wdGltaXppbmcgZGlyZWN0b3JpZXNcbiIKK21zZ3N0ciAiTOG6p24gcXVhIDNBOiDEkWFuZyB04buRaSDGsHUgaG/DoSBjw6FjIHRoxrAgbeG7pWNcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZGlyc190b19oYXNoIGl0ZXJhdG9yOiAlbVxuIgorbXNnc3RyICJM4buXaSB04bqhbyBi4buZIGzhurdwIGzhuqFpIHRoxrAgbeG7pWMgdOG7m2kgYsSDbSAoZGlyc190b19oYXNoKTogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQ4Cittc2dpZCAiRmFpbGVkIHRvIG9wdGltaXplIGRpcmVjdG9yeSAlcSAoJWQpOiAlbVxuIgorbXNnc3RyICJM4buXaSB04buRaSDGsHUgaG/DoSB0aMawIG3hu6VjICVxICglZCk6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU1MworbXNnaWQgIk9wdGltaXppbmcgZGlyZWN0b3JpZXM6ICIKK21zZ3N0ciAixJBhbmcgdOG7kWkgxrB1IGhvw6EgY8OhYyB0aMawIG3hu6VjOiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3MAorbXNnaWQgIlBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50c1xuIgorbXNnc3RyICJM4bqnbiBxdWEgNDogxJFhbmcga2nhu4NtIHRyYSBjw6FjIHPhu5EgxJHhur9tIHRoYW0gY2hp4bq/dVxuIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIHplcm8tbGVuZ3RoIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQHogQGkgJWkuICAiCittc2dzdHIgIkBpIEB1IEB6ICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIGlub2RlICVpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAaSAlaVxuIgorbXNnc3RyICJAaSBAdSAlaVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSByZWYgY291bnQgaXMgJUlsLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4NQorbXNnaWQgIkBpICVpIHJlZiBjb3VudCBpcyAlSWwsIEBzICVOLiAgIgorbXNnc3RyICJAaSAlaSBjw7Mgc+G7kSDEkeG6v20gdGhhbSBjaGnhur91ICVJbCwgQHMgJU4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4OQorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiQ+G6ok5IIELDgU86IEfhurZQIEzhu5ZJIEzhuqxQIFRSw4xOSCBUUk9ORyBFMkZTQ0shXG4iCisiXHRIT+G6tkMgTkfGr+G7nEkgTsOATyDEkEFORyBLSeG7gk0gVFJBIE3hu5hUIEjhu4YgVEjhu5BORyBU4bqsUCBUSU4gxJDDgyBM4bquUCAoxJDhu5hORykuXG4iCisiQGlfbGlua19pbmZvWyVpXSBsw6AgJU4sIEBpLmlfbGlua3NfY291bnQgbMOgICVJbDogQHMgdHLDuW5nLlxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb25cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTk5Cittc2dpZCAiUGFzcyA1OiBDaGVja2luZyBAZyBzdW1tYXJ5IGluZm9ybWF0aW9uXG4iCittc2dzdHIgIkzhuqduIDU6IMSRYW5nIGtp4buDbSB0cmEgdGjDtG5nIHRpbiB0w7NtIHThuq90IG5ow7NtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGlub2RlIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwNAorbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBpIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiQ2jGsGEgxJHhurd0IMSR4buZIMSR4buHbSB04bqhaSBr4bq/dCB0aMO6YyBj4bunYSBAQiBASS4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGJsb2NrIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwOQorbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBiIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiQ2jGsGEgxJHhurd0IMSR4buZIMSR4buHbSB04bqhaSBr4bq/dCB0aMO6YyBj4bunYSBAQiBAYi4iCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MTQKK21zZ2lkICJAYiBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJLaMOhYyBiaeG7h3QgQEIgQGI6ICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYzNAorbXNnaWQgIkBpIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIktow6FjIGJp4buHdCBAQiBAaTogIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1NAorbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiU+G7kSDEkeG6v20gY8OhYyBAaSBy4bqjbmgga2jDtG5nIMSRw7puZyBjaG8gQGcgIyVnICglaSwgxJHDoyDEkeG6v209JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1OQorbXNnaWQgIkRpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiU+G7kSDEkeG6v20gY8OhYyB0aMawIG3hu6VjIGtow7RuZyDEkcO6bmcgY2hvIEBnICMlZyAoJWksIMSRw6MgxJHhur9tPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjY0Cittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiU+G7kSDEkeG6v20gY8OhYyBAaSBy4bqjbmgga2jDtG5nIMSRw7puZyAoJWksIMSRw6MgxJHhur9tPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjkKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIlPhu5EgxJHhur9tIGPDoWMgQGIgcuG6o25oIGtow7RuZyDEkcO6bmcgY2hvIEBnICMlZyAoJWIsIMSRw6MgxJHhur9tPSVjKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjc0Cittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiU+G7kSDEkeG6v20gY8OhYyBAYiBy4bqjbmgga2jDtG5nIMSRw7puZyAoJWIsIMSRw6MgxJHhur9tPSVjKS5cbiIKKworIy4gQC1leHBhbmRlZDogUFJPR1JBTU1JTkcgRVJST1I6IGZpbGVzeXN0ZW0gKCMlTikgYml0bWFwIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIGJpdG1hcCAKKyMuIEAtZXhwYW5kZWQ6IGVuZHBvaW50cyAoJWksICVqKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NzkKK21zZ2lkICIiCisiUFJPR1JBTU1JTkcgRVJST1I6IEBmICgjJU4pIEBCIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIEBCICIKKyJlbmRwb2ludHMgKCVpLCAlailcbiIKK21zZ3N0ciAiIgorIkzhu5ZJIEzhuqxQIFRSw4xOSDogdHJvbmcgQGYgKCMlTikgY8OzIGPDoWMgxJFp4buDbSBjdeG7kWkgQEIgKCViLCAlYykga2jDtG5nIHTGsMahbmcg4bupbmcgIgorInbhu5tpIGPDoWMgxJFp4buDbSBjdeG7kWkgQEIgxJHDoyB0w61uaCAoJWksICVqKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2ODUKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogZnVkZ2luZyBlbmQgb2YgYml0bWFwICglTilcbiIKK21zZ3N0ciAiTOG7l2kgbuG7mWkgYuG7mTogxJFhbmcgbMOgbSBxdeG6pXkgcXXDoSBr4bq/dCB0aMO6YyBj4bunYSBt4bqjbmcg4bqjbmggKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGlub2RlIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGkgQEI6ICVtXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBzYW8gY2jDqXAgdsOgbyBAQiBAaSB0aGF5IHRo4bq/OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGIgQEI6ICVtXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBzYW8gY2jDqXAgdsOgbyBAQiBAYiB0aGF5IHRo4bq/OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBibG9jayhzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBiKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuIgorbXNnc3RyICJDw6FjIEBiIGPhu6dhIEBnICVnIMSRYW5nIMSRxrDhu6NjIGTDuW5nLCBjw7JuIEBnIGPDsyBuaMOjbiBsw6AgQkxPQ0tfVU5JTklUXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGlub2RlKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGkocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4iCittc2dzdHIgIkPDoWMgQGkgY+G7p2EgQGcgJWcgxJFhbmcgxJHGsOG7o2MgZMO5bmcsIGPDsm4gQGcgY8OzIG5ow6NuIGzDoCBJTk9ERV9VTklOSVRcbiIKKworIy4gQC1leHBhbmRlZDogUmVjcmVhdGUgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzMyCittc2dpZCAiUmVjcmVhdGUgQGoiCittc2dzdHIgIlThuqFvIGzhuqFpIEBqIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MzcKK21zZ2lkICJVcGRhdGUgcXVvdGEgaW5mbyBmb3IgcXVvdGEgdHlwZSAlTiIKK21zZ3N0ciAiQ+G6rXAgbmjhuq10IHRow7RuZyB0aW4gaOG6oW4gbmfhuqFjaCBjaG8ga2nhu4N1IGjhuqFuIG5n4bqhY2ggJU4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHNldHRpbmcgYmxvY2sgZ3JvdXAgY2hlY2tzdW0gaW5mbzogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgQGIgQGcgY2hlY2tzdW0gaW5mbzogJW1cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4bq3dCB0aMO0bmcgdGluIHThu5VuZyBraeG7g20gQGIgQGc6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc0NworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGZpbGUgc3lzdGVtIGluZm86ICVtXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBnaGkgdGjDtG5nIHRpbiBo4buHIHRo4buRbmc6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc1MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBmbHVzaGluZyB3cml0ZXMgdG8gc3RvcmFnZSBkZXZpY2U6ICVtXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkeG6qXkgZOG7ryBsaeG7h3Ugc2F1IGzhu4duaCBnaGkgbMOqbiB0aGnhur90IGLhu4sgbMawdSB0cuG7rzogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaGFuZGxlZCBlcnJvciBjb2RlICgweCV4KSFcbiIKK21zZ3N0ciAiTcOjIGzhu5dpIGNoxrBhIHF14bqjbiBsw70gKDB4JXgpIVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5OTYgZTJmc2NrL3Byb2JsZW0uYzoyMDAwCittc2dpZCAiSUdOT1JFRCIKK21zZ3N0ciAiQuG7iiBC4buOIFFVQSIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVkLCBlbGFwc2VkIHRpbWU6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCittc2dzdHIgIkLhu5kgbmjhu5sgxJHDoyBjaGnhur9tOiAlZCwgdGjhu51pIGdpYW4gxJHDoyBxdWE6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNpemUgb2YgaW5vZGU9JWRcbiIKK21zZ3N0ciAia8OtY2ggY+G7oSBuw7p0IHRow7RuZyB0aW49JWRcbiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6MTE5Cittc2dpZCAid2hpbGUgc3RhcnRpbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAidHJvbmcga2hpIGto4bufaSBjaOG6oXkgdGnhur9uIHRyw6xuaCBxdcOpdCBuw7p0IHRow7RuZyB0aW4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjEzMAorbXNnaWQgIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iCittc2dzdHIgInRyb25nIGtoaSBjaOG6oXkgdGnhur9uIHRyw6xuaCBxdcOpdCBuw7p0IHRow7RuZyB0aW4iCisKKyM6IGUyZnNjay9zdXBlci5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19ibG9ja19pdGVyYXRlIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAiIgorInRyb25nIGtoaSBn4buNaSBow6BtIGzhurdwIGzhuqFpIGto4buRaSDigJxleHQyZnNfYmxvY2tfaXRlcmF0ZeKAnSBjaG8gbsO6dCB0aMO0bmcgdGluICVkIgorCisjOiBlMmZzY2svc3VwZXIuYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MiBmb3IgaW5vZGUgJWQiCittc2dzdHIgInRyb25nIGtoaSBn4buNaSBow6BtIOKAnGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnTigJ0gY2hvIG7DunQgdGjDtG5nIHRpbiAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6Mjc0Cittc2dpZCAiVHJ1bmNhdGluZyIKK21zZ3N0ciAixJBhbmcgY+G6r3Qgbmfhuq9uIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzUKK21zZ2lkICJDbGVhcmluZyIKK21zZ3N0ciAixJBhbmcgeG/DoSBz4bqhY2giCisKKyM6IGUyZnNjay91bml4LmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisiQ8OhY2ggZMO5bmc6ICVzIFstcGFueXJjZGZ2dERGVl0gWy1iIHNpw6p1X2to4buRaV0gWy1CIGPhu6Ffa2jhu5FpXVxuIgorIlx0XHRbLUkga2jhu5FpX8SR4buHbV9pbm9kZV0gWy1QIGPhu6FfaW5vZGVfeOG7rV9sw71dXG4iCisiXHRcdFstbHwtTCB04bqtcF90aW5fa2jhu5FpX3NhaV0gWy1DIGZkXSBbLWogbmjhuq10X2vDvV9uZ2/DoGldXG4iCisiXHRcdFstRSB0w7l5X2No4buNbl/EkcOjX23hu59fcuG7mW5nXSB0aGnhur90X2Lhu4tcbiIKKworIzogZTJmc2NrL3VuaXguYzo4MAorbXNnaWQgIiIKKyJcbiIKKyJFbWVyZ2VuY3kgaGVscDpcbiIKKyIgLXAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIHJlcGFpciAobm8gcXVlc3Rpb25zKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBNYWtlIG5vIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW1cbiIKKyIgLXkgICAgICAgICAgICAgICAgICAgQXNzdW1lIFwieWVzXCIgdG8gYWxsIHF1ZXN0aW9uc1xuIgorIiAtYyAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgYmFkIGJsb2NrcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGJhZGJsb2NrICIKKyJsaXN0XG4iCisiIC1mICAgICAgICAgICAgICAgICAgIEZvcmNlIGNoZWNraW5nIGV2ZW4gaWYgZmlsZXN5c3RlbSBpcyBtYXJrZWQgY2xlYW5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlRy4bujIGdpw7pwIGto4bqpbiBj4bqlcDpcbiIKKyIgLXAgICAgICAgICAgICAgICAgICAgU+G7rWEgY2jhu69hIHThu7EgxJHhu5luZyAoa2jDtG5nIGPDsyBjw6J1IGjhu49pKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBLaMO0bmcgdGhheSDEkeG7lWkgaOG7hyB0aOG7kW5nIHThuq1wIHRpblxuIgorIiAteSAgICAgICAgICAgICAgICAgICBHaeG6oyBz4butIHRy4bqjIGzhu51pIOKAnEPDs+KAnSBt4buNaSBjw6J1IGjhu49pXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIEtp4buDbSB0cmEgdMOsbSBraOG7kWkgc2FpOiB0aMOqbSB2w6BvIGRhbmggc8OhY2gga2jhu5FpIHNhaVxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBCdeG7mWMga2nhu4NtIHRyYSBuZ2F5IGPhuqMga2hpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OzIG5ow6NuIGzDoCAiCisic+G6oWNoXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODYKK21zZ2lkICIiCisiIC12ICAgICAgICAgICAgICAgICAgIEJlIHZlcmJvc2VcbiIKKyIgLWIgc3VwZXJibG9jayAgICAgICAgVXNlIGFsdGVybmF0aXZlIHN1cGVyYmxvY2tcbiIKKyIgLUIgYmxvY2tzaXplICAgICAgICAgRm9yY2UgYmxvY2tzaXplIHdoZW4gbG9va2luZyBmb3Igc3VwZXJibG9ja1xuIgorIiAtaiBleHRlcm5hbF9qb3VybmFsICBTZXQgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGpvdXJuYWxcbiIKKyIgLWwgYmFkX2Jsb2Nrc19maWxlICAgQWRkIHRvIGJhZGJsb2NrcyBsaXN0XG4iCisiIC1MIGJhZF9ibG9ja3NfZmlsZSAgIFNldCBiYWRibG9ja3MgbGlzdFxuIgorbXNnc3RyICIiCisiIC12ICAgICAgICAgICAgICAgICAgIFh14bqldCBjaGkgdGnhur90XG4iCisiIC1iIHNpw6p1X2to4buRaSAgICAgICAgIETDuW5nIHNpw6p1IGto4buRaSB4ZW4ga+G6vVxuIgorIiAtQiBj4buhX2to4buRaSAgICAgICAgICAgQnXhu5ljIGvDrWNoIGPhu6EgY+G7p2Ega2jhu5FpIGtoaSB0w6xtIHNpw6p1IGto4buRaVxuIgorIiAtaiBuaOG6rXRfa8O9X2LDqm5fbmdvw6BpIMSQ4bq3dCDEkeG7i2EgxJFp4buDbSBj4bunYSBuaOG6rXQga8O9IGLDqm4gbmdvw6BpXG4iCisiIC1sIHThuq1wX3Rpbl9raOG7kWlfc2FpICBUaMOqbSB2w6BvIGRhbmggc8OhY2ggY8OhYyBraOG7kWkgc2FpXG4iCisiIC1MIHThuq1wX3Rpbl9raOG7kWlfc2FpICDEkOG6t3QgZGFuaCBzw6FjaCBjw6FjIGto4buRaSBzYWlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICVsbHUvJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXM6ICV1LyV1IHThuq1wIHRpbiAoJTBkLiVkJSUga2jDtG5nIGvhu4EgbmhhdSksICVsbHUvJWxsdSBraOG7kWlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSBpbm9kZXMgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJTEydSBpbm9kZSDEkcOjIMSRxrDhu6NjIGTDuW5nICglMi4yZiUlLCB2xrDhu6N0IHF1w6EgJXUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIlMTJ1IHThu4dwIHRpbiBraMO0bmcgbGnhu4FuIGvhu4EgbmhhdSAoJTBkLiVkJSUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3J5ICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcmllcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiUxMnUgdGjGsCBt4bulYyBraMO0bmcga+G7gSBuaGF1ICglMGQuJWQlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICAgICAgICMgb2YgaW5vZGVzIHdpdGggaW5kL2RpbmQvdGluZCBibG9ja3M6ICV1LyV1LyV1XG4iCittc2dzdHIgIiAgICAgICAgICAgICAjIHPhu5EgaW5vZGUgY8OzIGto4buRaSBpbmQvZGluZC90aW5kOiAldS8ldS8ldVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3OQorbXNnaWQgIiAgICAgICAgICAgICBFeHRlbnQgZGVwdGggaGlzdG9ncmFtOiAiCittc2dzdHIgIiAgICAgICAgICAgICDEkOG7kyB0aOG7iyDEkeG7mSBzw6J1OiAiCisKKyM6IGUyZnNjay91bml4LmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMmxsdSBibG9jayB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEybGx1IGJsb2NrcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ3N0clswXSAiJTEybGx1IGto4buRaSDEkcOjIGTDuW5nICglMi4yZiUlLCB2xrDhu6N0IHF1w6EgJWxsdSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBiYWQgYmxvY2tcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBiYWQgYmxvY2tzXG4iCittc2dzdHJbMF0gIiUxMnUga2jhu5FpIGjhu49uZ1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxhcmdlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsYXJnZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IHThuq1wIHRpbiBxdcOhIGzhu5tuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVzXG4iCittc2dzdHJbMF0gIiIKKyJcbiIKKyIlMTJ1IHThuq1wIHRpbiB0aMaw4budbmdcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBkaXJlY3RvcnlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBkaXJlY3Rvcmllc1xuIgorbXNnc3RyWzBdICIlMTJ1IHRoxrAgbeG7pWNcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgdGhp4bq/dCBi4buLIGvDvSB04buxXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBibG9jayBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSB04buHcCB0aW4gdGhp4bq/dCBi4buLIGto4buRaVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpZm9cbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWZvc1xuIgorbXNnc3RyWzBdICIlMTJ1IHThuq1wIHRpbiBmaWZvXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbGlua1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGxpbmtzXG4iCittc2dzdHJbMF0gIiUxMnUgbGnDqm4ga+G6v3RcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzeW1ib2xpYyBsaW5rIgorbXNnaWRfcGx1cmFsICIlMTJ1IHN5bWJvbGljIGxpbmtzIgorbXNnc3RyWzBdICIlMTJ1IGxpw6puIGvhur90IG3hu4FtIgorCisjOiBlMmZzY2svdW5peC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgKCV1IGZhc3Qgc3ltYm9saWMgbGluaylcbiIKK21zZ2lkX3BsdXJhbCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmtzKVxuIgorbXNnc3RyWzBdICIgKCV1IGxpw6puIGvhur90IG3hu4FtIG5oYW5oKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHNvY2tldFxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IHNvY2tldHNcbiIKK21zZ3N0clswXSAiJTEydSBzb2NrZXRcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSB04bqtcCB0aW5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMzIgbWlzYy9iYWRibG9ja3MuYzo5OTMgbWlzYy90dW5lMmZzLmM6MjEyMiBtaXNjL3V0aWwuYzozMTYKKyM6IHJlc2l6ZS9tYWluLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iCittc2dzdHIgInRyb25nIGtoaSBkw7IgdMOsbSB4ZW0gJXMgxJHDoyBn4bqvbiBr4bq/dCBjaMawYS4iCisKKyM6IGUyZnNjay91bml4LmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICJD4bqjbmggYsOhbyEgICVzIMSRw6MgxJHGsOG7o2MgZ+G6r24uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyBpbiB1c2UuXG4iCittc2dzdHIgIkPhuqNuaCBiw6FvISAgJXMgxJFhbmcgxJHGsOG7o2MgZMO5bmcuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIiVzIMSRw6MgZ+G6r24ga+G6v3QuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGluIHVzZS5cbiIKK21zZ3N0ciAiJXMgxJFhbmcgxJHGsOG7o2MgZMO5bmcuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY2Cittc2dpZCAiIgorIkNhbm5vdCBjb250aW51ZSwgYWJvcnRpbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgdGnhur9wIHThu6VjIG7Dqm4gaOG7p3kgYuG7jy5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjgKK21zZ2lkICIiCisiXG4iCisiXG4iCisiV0FSTklORyEhISAgVGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4gICBJZiB5b3UgY29udGludWUgeW91ICoqKldJTEwqKipcbiIKKyJjYXVzZSAqKipTRVZFUkUqKiogZmlsZXN5c3RlbSBkYW1hZ2UuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJD4bqiTkggQsOBTyEhISBI4buHIHRo4buRbmcgdOG6rXAgdGluIMSRw6MgZ+G6r24ga+G6v3QuIFbhuqtuIHRp4bq/cCB04bulYyB0aMOsXG4iCisixJHDonkgY8OzIHRo4buDIGzDoCBuZ3V5w6puIG5ow6JuICoqKkzDgE0gSOG7jk5HIE7hurZORyoqKiBo4buHIHRo4buRbmcgdOG6rXAgdGluLlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI3MworbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byBjb250aW51ZSIKK21zZ3N0ciAiQuG6oW4gdGjhu7FjIHPhu7EgbXXhu5FuIHRp4bq/cCB04bulYyIKKworIzogZTJmc2NrL3VuaXguYzoyNzUKK21zZ2lkICJjaGVjayBhYm9ydGVkLlxuIgorbXNnc3RyICJraeG7g20gdHJhIGLhu4sgaOG7p3kgYuG7jy5cbiIKKworIzogZTJmc2NrL3VuaXguYzozNjgKK21zZ2lkICIgY29udGFpbnMgYSBmaWxlIHN5c3RlbSB3aXRoIGVycm9ycyIKK21zZ3N0ciAiIGNo4bupYSBo4buHIHRo4buRbmcgdOG6rXAgdGluIGPDsyBs4buXaSIKKworIzogZTJmc2NrL3VuaXguYzozNzAKK21zZ2lkICIgd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCIKK21zZ3N0ciAiIGNoxrBhIHRow6FvIGfhuq9uIGvhur90IHPhuqFjaCIKKworIzogZTJmc2NrL3VuaXguYzozNzIKK21zZ2lkICIgcHJpbWFyeSBzdXBlcmJsb2NrIGZlYXR1cmVzIGRpZmZlcmVudCBmcm9tIGJhY2t1cCIKK21zZ3N0ciAiIHTDrW5oIG7Eg25nIGPhu6dhIHNpw6p1IGto4buRaSBjaMOtbmgga2jDoWMgduG7m2kgYuG6o24gc2FvIGzGsHUiCisKKyM6IGUyZnNjay91bml4LmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgYmVlbiBtb3VudGVkICV1IHRpbWVzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIMSRw6MgxJHGsOG7o2MgZ+G6r24ga+G6v3QgJXUgbOG6p24gbcOgIGtow7RuZyDEkcaw4bujYyBraeG7g20gdHJhIgorCisjOiBlMmZzY2svdW5peC5jOjM4MworbXNnaWQgIiBoYXMgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdGltZSBpbiB0aGUgZnV0dXJlIgorbXNnc3RyICIgY8OzIGdp4budIGtp4buDbSB0cmEgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBs4bqnbiBjdeG7kWkgY8O5bmcgdHJvbmcgdMawxqFuZyBsYWkiCisKKyM6IGUyZnNjay91bml4LmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgZ29uZSAldSBkYXlzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIMSRw6MgY2jhuqF5IHRyb25nICV1IG5nw6B5IG3DoCBraMO0bmcgxJHGsOG7o2Mga2nhu4NtIHRyYSIKKworIzogZTJmc2NrL3VuaXguYzozOTgKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiLCBraeG7g20gdHJhIGLhu4sgw6lwIGJ14buZYy5cbiIKKworIzogZTJmc2NrL3VuaXguYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuLCAldS8ldSBmaWxlcywgJWxsdS8lbGx1IGJsb2NrcyIKK21zZ3N0ciAiJXM6IHPhuqFjaCwgJXUvJXUgdOG6rXAgdGluLCAlbGx1LyVsbHUga2jhu5FpIgorCisjOiBlMmZzY2svdW5peC5jOjQ1MQorbXNnaWQgIiAoY2hlY2sgZGVmZXJyZWQ7IG9uIGJhdHRlcnkpIgorbXNnc3RyICIgKGtp4buDbSB0cmEgYuG7iyBob8OjbjsgY2jhuqF5IGLhurFuZyBwaW4pIgorCisjOiBlMmZzY2svdW5peC5jOjQ1NAorbXNnaWQgIiAoY2hlY2sgYWZ0ZXIgbmV4dCBtb3VudCkiCittc2dzdHIgIiAoa2nhu4NtIHRyYSBzYXUgbOG6p24gZ+G6r24ga+G6v3Qga+G6vyB0aeG6v3ApIgorCisjOiBlMmZzY2svdW5peC5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGNoZWNrIGluICVsZCBtb3VudHMpIgorbXNnc3RyICIgKGtp4buDbSB0cmEgc2F1ICVsZCBs4bqnbiBn4bqvbiBr4bq/dCkiCisKKyM6IGUyZnNjay91bml4LmM6NjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBDb3VsZG4ndCBvcGVuIC9kZXYvbnVsbCAoJXMpXG4iCittc2dzdHIgIkzhu5ZJOiBraMO0bmcgdGjhu4MgbeG7nyDigJwvZGV2L251bGzigJ0gKCVzKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjY3NQorbXNnaWQgIkludmFsaWQgRUEgdmVyc2lvbi5cbiIKK21zZ3N0ciAiUGhpw6puIGLhuqNuIEVBIGtow7RuZyBo4bujcCBs4buHLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGV4dGVuZGVkIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gxJHDoyBt4bufIHLhu5luZyBs4bqhOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjcyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIGUyZnNjayBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIkfhurdwIGzhu5dpIGPDuiBwaMOhcCB0cm9uZyB04bqtcCB0aW4gY+G6pXUgaMOsbmggZTJmc2NrICglcywgZMOybmcgc+G7kSAlZClcbiIKKyJcdCVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6Nzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHZhbGlkYXRpbmcgZmlsZSBkZXNjcmlwdG9yICVkOiAlc1xuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgaOG7o3AgbOG7hyBow7NhIG3DtCB04bqjIHThuq1wIHRpbiAlZDogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo4MDEKK21zZ2lkICJJbnZhbGlkIGNvbXBsZXRpb24gaW5mb3JtYXRpb24gZmlsZSBkZXNjcmlwdG9yIgorbXNnc3RyICJNw7QgdOG6oyB04bqtcCB0aW4gdGjDtG5nIHRpbiBob8OgIGNo4buJbmgga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGUyZnNjay91bml4LmM6ODE2Cittc2dpZCAiT25seSBvbmUgb2YgdGhlIG9wdGlvbnMgLXAvLWEsIC1uIG9yIC15IG1heSBiZSBzcGVjaWZpZWQuIgorbXNnc3RyICJDw7MgdGjhu4MgY2jhu4kgcmEgbeG7mXQgdHJvbmcgbmjhu69uZyB0w7l5IGNo4buNbiAtcC8tYSwgLW4gdsOgIC15LiIKKworIzogZTJmc2NrL3VuaXguYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC10IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCittc2dzdHIgIlTDuXkgY2jhu41uIOKAnC104oCdIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIHRyb25nIHBoacOqbiBi4bqjbiBlMmZzY2sgbsOgeS5cbiIKKworIzogZTJmc2NrL3VuaXguYzo4NjggZTJmc2NrL3VuaXguYzo5NDIgbWlzYy90dW5lMmZzLmM6ODc5IG1pc2MvdHVuZTJmcy5jOjExNzQKKyM6IG1pc2MvdHVuZTJmcy5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSDigJwlc+KAnSIKKworIzogZTJmc2NrL3VuaXguYzo5MjEKK21zZ2lkICJUaGUgLW4gYW5kIC1EIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIkhhaSB0w7l5IGNo4buNbiDigJwtbuKAnSB2w6Ag4oCcLUTigJ0ga2jDtG5nIHTGsMahbmcgdGjDrWNoIHbhu5tpIG5oYXUuIgorCisjOiBlMmZzY2svdW5peC5jOjkyNgorbXNnaWQgIlRoZSAtbiBhbmQgLWMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiSGFpIHTDuXkgY2jhu41uIOKAnC1u4oCdIHbDoCDigJwtY+KAnSBraMO0bmcgdMawxqFuZyB0aMOtY2ggduG7m2kgbmhhdS4iCisKKyM6IGUyZnNjay91bml4LmM6OTMxCittc2dpZCAiVGhlIC1uIGFuZCAtbC8tTCBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJIYWkgdMO5eSBjaOG7jW4g4oCcLW7igJ0gdsOgIOKAnC1sLy1M4oCdIGtow7RuZyB0xrDGoW5nIHRow61jaCB24bubaSBuaGF1LiIKKworIzogZTJmc2NrL3VuaXguYzo5ODUKK21zZ2lkICJUaGUgLWMgYW5kIHRoZSAtbC8tTCBvcHRpb25zIG1heSBub3QgYmUgYm90aCB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuXG4iCittc2dzdHIgIktow7RuZyBjaG8gcGjDqXAgc+G7rSBk4bulbmcgxJHhu5NuZyB0aOG7nWkgY+G6oyBoYWkgdMO5eSBjaOG7jW4g4oCcLS1j4oCdIHbDoCDigJwtLWwvTOKAnS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMkZTQ0tfSkJEX0RFQlVHIFwiJXNcIiBub3QgYW4gaW50ZWdlclxuIgorIlxuIgorbXNnc3RyICIiCisiRTJGU0NLX0pCRF9ERUJVRyDigJwlc+KAnSBraMO0bmcgcGjhuqNpIHPhu5Egbmd1ecOqblxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkludmFsaWQgbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gLSVjIChcIiVzXCIpXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLEkOG7kWkgc+G7kSBraMO0bmcgdGh14buZYyBz4buRIGtow7RuZyBo4bujcCBs4buHIMSR4buRaSB24bubaSAtJWMgKOKAnCVz4oCdKVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBpbnRlcnZhbCBpcyAldSBzZWNvbmRzIGFuZCB0b3RhbCB3YWl0IHRpbWUgaXMgJXUgc2Vjb25kcy4gUGxlYXNlICIKKyJ3YWl0Li4uXG4iCittc2dzdHIgIiIKKyJraG/huqNuZyBuaOG7i3AgTU1QIGzDoCAldSBnacOieSBj4buZbmcgduG7m2kgdOG7lW5nIHRo4budaSBnaWFuIGNo4budIGzDoCAldSBnacOieS4gVnVpIGzDsm5nICIKKyJjaOG7nS4uLlxuIgorCisjIEl0ZW0gaW4gdGhlIG1haW4gbWVudSB0byBzZWxlY3QgdGhpcyBwYWNrYWdlCisjOiBlMmZzY2svdW5peC5jOjExNDkgZTJmc2NrL3VuaXguYzoxMTU0Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgTU1QIGJsb2NrIgorbXNnc3RyICJ0cm9uZyBraGkga2nhu4NtIHRyYSBraOG7kWkgTU1QIgorCisjOiBlMmZzY2svdW5peC5jOjExNTYgbWlzYy90dW5lMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJJZiB5b3UgYXJlIHN1cmUgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IGluIHVzZSBvbiBhbnkgbm9kZSwgcnVuOlxuIgorIid0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfSdcbiIKK21zZ3N0ciAiIgorIk7hur91IGLhuqFuIGtow7RuZyBjaOG6r2MgbMOgIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4ga2jDtG5nIMSRYW5nIHPhu60gZOG7pW5nIGLhuqV0IGvhu7MgbsO6dCBuw6BvLCAiCisiY2jhuqF5IGzhu4duaDpcbiIKKyLigJx0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7dGhp4bq/dF9i4buLfeKAnVxuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMDcKK21zZ2lkICJFcnJvcjogZXh0MmZzIGxpYnJhcnkgdmVyc2lvbiBvdXQgb2YgZGF0ZSFcbiIKK21zZ3N0ciAiTOG7l2k6IHBoacOqbiBi4bqjbiB0aMawIHZp4buHbiBleHQyZnMgcXXDoSBjxakuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTIxNAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBpbml0aWFsaXplIHByb2dyYW0iCittc2dzdHIgInRyb25nIGtoaSBj4buRIGto4bufaSB04bqhbyBjaMawxqFuZyB0csOsbmgiCisKKyM6IGUyZnNjay91bml4LmM6MTIzNworIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzLCAlc1xuIgorbXNnc3RyICJcdETDuW5nICVzLCAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEyNDkKK21zZ2lkICJuZWVkIHRlcm1pbmFsIGZvciBpbnRlcmFjdGl2ZSByZXBhaXJzIgorbXNnc3RyICJj4bqnbiB0aGnhur90IGLhu4sgY3Xhu5FpIMSR4buDIHPhu61hIGNo4buvYSB0aGVvIGtp4buDdSB0xrDGoW5nIHTDoWMiCisKKyM6IGUyZnNjay91bml4LmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi5cbiIKK21zZ3N0ciAiJXM6ICVzIMSRYW5nIGPhu5Egc2FvIGzGsHUgZOG7sSBwaMOybmcgY8OhYyBraOG7kWkgZOG7sSB0cuG7ry4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDUKK21zZ2lkICJTdXBlcmJsb2NrIGludmFsaWQsIgorbXNnc3RyICJTacOqdSBraOG7kWkga2jDtG5nIGjhu6NwIGzhu4csIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDYKK21zZ2lkICJHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiIKK21zZ3N0ciAiQ8OzIHbhursgbMOgIGPDoWMgbcO0IHThuqMgbmjDs20gc2FpLi4uIgorCisjOiBlMmZzY2svdW5peC5jOjEzMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHVzaW5nIHRoZSBiYWNrdXAgYmxvY2tzIgorbXNnc3RyICIlczogJXMgdHJvbmcga2hpIMSR4buNYyBuw7p0IHRow7RuZyB0aW4ga2jhu5FpIGjhu49uZyIKKworIzogZTJmc2NrL3VuaXguYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBnb2luZyBiYWNrIHRvIG9yaWdpbmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiJXM6IMSRYW5nIHRy4bufIHbhu4Egc2nDqnUga2jhu5FpIGfhu5FjXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM0OQorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSByZXZpc2lvbiBpcyBhcHBhcmVudGx5IHRvbyBoaWdoIGZvciB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorIihPciB0aGUgZmlsZXN5c3RlbSBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQpXG4iCisiXG4iCittc2dzdHIgIiIKKyJDw7MgduG6uyBsw6AgYuG6o24gc+G7rWEgxJHhu5VpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gcXXDoSBjYW8gY2hvIHBoacOqbiBi4bqjbiBlMmZzY2sgbsOgeVxuIgorIihob+G6t2Mgc2nDqnUga2jhu5FpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gYuG7iyBo4buPbmcpLlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTYKK21zZ2lkICJDb3VsZCB0aGlzIGJlIGEgemVyby1sZW5ndGggcGFydGl0aW9uP1xuIgorbXNnc3RyICJQaMOibiB2w7luZyBuw6B5IGPDsyB0aOG7gyBjw7MgxJHhu5kgZMOgaSBi4bqxbmcga2jDtG5nP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IG11c3QgaGF2ZSAlcyBhY2Nlc3MgdG8gdGhlIGZpbGVzeXN0ZW0gb3IgYmUgcm9vdFxuIgorbXNnc3RyICIiCisiQuG6oW4gcGjhuqNpIGPDsyBxdXnhu4FuIHRydXkgY+G6rXAgJXMgdsOgbyBo4buHIHRo4buRbmcgdOG6rXAgdGluLCBob+G6t2MgY8OzIHF1eeG7gW4gc2nDqnUgcXXhuqNuICIKKyJ0cuG7i1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNjQKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgb3Igc3dhcCBkZXZpY2U/XG4iCittc2dzdHIgIkPDsyB0aOG7gyBsw6AgdGhp4bq/dCBi4buLIGtow7RuZyB04buTbiB04bqhaSwgaG/hurdjIHRoaeG6v3QgYuG7iyB0cmFvIMSR4buVaT9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY2Cittc2dpZCAiRmlsZXN5c3RlbSBtb3VudGVkIG9yIG9wZW5lZCBleGNsdXNpdmVseSBieSBhbm90aGVyIHByb2dyYW0/XG4iCittc2dzdHIgIiIKKyJI4buHIHRo4buRbmcgdOG6rXAgdGluIMSRw6MgxJHGsOG7o2MgZ+G6r24ga+G6v3QgaGF5IG3hu58gaG/DoG4gdG/DoG4gYuG7n2kgY2jGsMahbmcgdHLDrG5oIGtow6FjP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNzAKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgZGV2aWNlP1xuIgorbXNnc3RyICJDw7MgdGjhu4MgbMOgIHRoaeG6v3QgYuG7iyBraMO0bmcgdOG7k24gdOG6oWk/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM3MworbXNnaWQgIiIKKyJEaXNrIHdyaXRlLXByb3RlY3RlZDsgdXNlIHRoZSAtbiBvcHRpb24gdG8gZG8gYSByZWFkLW9ubHlcbiIKKyJjaGVjayBvZiB0aGUgZGV2aWNlLlxuIgorbXNnc3RyICIiCisixJDEqWEgYuG7iyBjaOG7kW5nIGdoaTsgaMOjeSBkw7luZyB0w7l5IGNo4buNbiDigJwtbuKAnSDEkeG7gyBjaOG6oXlcbiIKKyJ2aeG7h2Mga2nhu4NtIHRyYSBjaOG7iSDEkeG7jWMgdHLDqm4gdGhp4bq/dCBi4buLIMSRw7MuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTQzNworbXNnaWQgIkdldCBhIG5ld2VyIHZlcnNpb24gb2YgZTJmc2NrISIKK21zZ3N0ciAiTOG6pXkgcGhpw6puIGLhuqNuIGUyZnNjayBt4bubaSBoxqFuISIKKworIzogZTJmc2NrL3VuaXguYzoxNDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNoZWNraW5nIGV4dDMgam91cm5hbCBmb3IgJXMiCittc2dzdHIgInRyb25nIGtoaSBraeG7g20gdHJhIG5o4bqtdCBrw70gZXh0MyB0w6xtICVzIgorCisjOiBlMmZzY2svdW5peC5jOjE0OTIKK21zZ2lkICIiCisiV2FybmluZzogc2tpcHBpbmcgam91cm5hbCByZWNvdmVyeSBiZWNhdXNlIGRvaW5nIGEgcmVhZC1vbmx5IGZpbGVzeXN0ZW0gIgorImNoZWNrLlxuIgorbXNnc3RyICIiCisiQ+G6o25oIGLDoW86IMSRYW5nIGLhu48gcXVhIHZp4buHYyBwaOG7pWMgaOG7k2kgbmjhuq10IGvDvSB2w6wgxJFhbmcga2nhu4NtIHRyYSBo4buHIHRo4buRbmcgdOG6rXAgIgorInRpbiBt4buZdCBjw6FjaCBjaOG7iSDEkeG7jWMuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTUwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHN1cGVyYmxvY2sgZmxhZ3Mgb24gJXNcbiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4bq3dCBj4budIHNpw6p1IGto4buRaSB0csOqbiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVjb3ZlcmluZyBleHQzIGpvdXJuYWwgb2YgJXMiCittc2dzdHIgInRyb25nIGtoaSBwaOG7pWMgaOG7k2kgbmjhuq10IGvDvSBleHQzIGPhu6dhICVzIgorCisjOiBlMmZzY2svdW5peC5jOjE1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocyk6IgorbXNnc3RyICIlcyBjw7MgdMOtbmggbsSDbmcga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6M6IgorCisjOiBlMmZzY2svdW5peC5jOjE1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhcm5pbmc6IGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorbXNnc3RyICIlczogY+G6o25oIGLDoW86IHPhu7EgaOG7lyB0cuG7oyBraOG6oyBuxINuZyBuw6luIGzDoCB0aOG7sWMgbmdoaeG7h20uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IGUyZnNjayBub3QgY29tcGlsZWQgd2l0aCBIVFJFRSBzdXBwb3J0LFxuIgorIlx0YnV0IGZpbGVzeXN0ZW0gJXMgaGFzIEhUUkVFIGRpcmVjdG9yaWVzLlxuIgorbXNnc3RyICIiCisiJXM6IGUyZnNjayBraMO0bmcgxJHGsOG7o2MgYmnDqm4gZOG7i2NoIHbhu5tpIGto4bqjIG7Eg25nIGjhu5cgdHLhu6MgSFRSRUUsXG4iCisiXHRuaMawbmcgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiAlcyBjw7MgdGjGsCBt4bulYyBIVFJFRS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSByZWFkaW5nIGJhZCBibG9ja3MgaW5vZGVcbiIKK21zZ3N0ciAiJXM6ICVzIHRyb25nIGtoaSDEkeG7jWMgbsO6dCB0aMO0bmcgdGluIGto4buRaSBo4buPbmdcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjEwCittc2dpZCAiVGhpcyBkb2Vzbid0IGJvZGUgd2VsbCwgYnV0IHdlJ2xsIHRyeSB0byBnbyBvbi4uLlxuIgorbXNnc3RyICLEkMOieSBraMO0bmcgcGjhuqNpIGLDoW8gdHLGsOG7m2MgxJFp4buBbSBoYXksIG5oxrBuZyBjaMO6bmcgdMO0aSBz4bq9IGPhu5EgdGjhu60uLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCVkIGJsb2Nrcyk6ICIKK21zZ3N0ciAixJBhbmcgdOG6oW8gbmjhuq10IGvDvSAoJWQga2jhu5FpKTogIgorCisjOiBlMmZzY2svdW5peC5jOjE2NjIKK21zZ2lkICIgRG9uZS5cbiIKK21zZ3N0ciAiIFhvbmcuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY2NAorbXNnaWQgIiIKKyJcbiIKKyIqKiogam91cm5hbCBoYXMgYmVlbiByZS1jcmVhdGVkIC0gZmlsZXN5c3RlbSBpcyBub3cgZXh0MyBhZ2FpbiAqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIioqKiBuaOG6rXQga8O9IMSRw6MgxJHGsOG7o2MgdOG6oW8gbOG6oWkg4oCUIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gbMO6YyBuw6B5IGzDoCBleHQzIGzhuqFpICoqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2ODgKK21zZ2lkICJSZXN0YXJ0aW5nIGUyZnNjayBmcm9tIHRoZSBiZWdpbm5pbmcuLi5cbiIKK21zZ3N0ciAixJBhbmcga2jhu59pIGNo4bqheSBs4bqhaSBob8OgbiB0b8OgbiBlMmZzY2suLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjkyCittc2dpZCAid2hpbGUgcmVzZXR0aW5nIGNvbnRleHQiCittc2dzdHIgInRyb25nIGtoaSDEkeG6t3QgbOG6oWkgbmfhu68gY+G6o25oIgorCisjOiBlMmZzY2svdW5peC5jOjE2OTkKK21zZ2lkICJhYm9ydGVkIgorbXNnc3RyICJi4buLIGjhu6d5IGLhu48iCisKKyM6IGUyZnNjay91bml4LmM6MTcwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZTJmc2NrIGNhbmNlbGVkLlxuIgorbXNnc3RyICIlczogZTJmc2NrIGLhu4sgaOG7p3kgYuG7jy5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzQxIGUyZnNjay91dGlsLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKiBI4buGIFRI4buQTkcgVOG6rFAgVElOIELhu4ogU+G7rEEgxJDhu5RJICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiVzOiAqKioqKiBIw4NZIEtI4bueSSDEkOG7mE5HIEzhuqBJIExJTlVYICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc1MyBlMmZzY2svdXRpbC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBXQVJOSU5HOiBGaWxlc3lzdGVtIHN0aWxsIGhhcyBlcnJvcnMgKioqKioqKioqKlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogQ+G6ok5IIELDgU86IEjhu4cgdGjhu5FuZyB04bqtcCB0aW4gduG6q24gY8OybiBjw7MgbOG7l2kgKioqKioqKioqKlxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MCBtaXNjL3V0aWwuYzo4NgorbXNnaWQgInlZIgorbXNnc3RyICJjQ3lZIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MQorbXNnaWQgIm5OIgorbXNnc3RyICJrS25OIgorCisjOiBlMmZzY2svdXRpbC5jOjIwNQorbXNnaWQgIjx5PiIKK21zZ3N0ciAiPGM+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwNworbXNnaWQgIjxuPiIKK21zZ3N0ciAiPGs+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwOQorbXNnaWQgIiAoeS9uKSIKK21zZ3N0ciAiIChjL2spIgorCisjOiBlMmZzY2svdXRpbC5jOjIyMworbXNnaWQgImNhbmNlbGxlZCFcbiIKK21zZ3N0ciAixJHDoyBo4buneSFcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyMzgKK21zZ2lkICJ5ZXNcbiIKK21zZ3N0ciAiY8OzXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjQwCittc2dpZCAibm9cbiIKK21zZ3N0ciAia2jDtG5nXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8gbm9cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyBraMO0bmdcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyB5ZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyBjw7NcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTgKK21zZ2lkICJ5ZXMiCittc2dzdHIgImPDsyIKKworIzogZTJmc2NrL3V0aWwuYzoyNTgKK21zZ2lkICJubyIKK21zZ3N0ciAia2jDtG5nIgorCisjOiBlMmZzY2svdXRpbC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBpbGxlZ2FsIGJpdG1hcCBibG9jayhzKSBmb3IgJXMiCittc2dzdHIgImUyZnNja19yZWFkX2JpdG1hcHM6IGto4buRaSBt4bqjbmcg4bqjbmggY+G6pW0gY2hvICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjI3OAorbXNnaWQgInJlYWRpbmcgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMiCittc2dzdHIgIsSRYW5nIMSR4buNYyBt4bqjbmcg4bqjbmgga2nhu4N1IGPhuqMgaGFpIG7DunQgdGjDtG5nIHRpbiB2w6Aga2jhu5FpIgorCisjOiBlMmZzY2svdXRpbC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXRyeWluZyB0byByZWFkIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJ0cm9uZyBraGkgY+G7kSDEkeG7jWMgbeG6o25nIOG6o25oIGNobyAlcyIKKworIzogZTJmc2NrL3V0aWwuYzoyOTgKK21zZ2lkICJ3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIgorbXNnc3RyICLEkWFuZyBnaGkgY8OhYyBt4bqjbmcg4bqjbmgga2nhu4N1IGto4buRaSB2w6AgbsO6dCB0aMO0bmcgdGluIgorCisjOiBlMmZzY2svdXRpbC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXdyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJ0cm9uZyBraGkgZ2hpIGzhuqFpIGPDoWMgbeG6o25nIOG6o25oIGtp4buDdSBraOG7kWkgdsOgIG7DunQgdGjDtG5nIHRpbiBjaG8gJXMiCisKKyM6IGUyZnNjay91dGlsLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyIlczogVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOyBSVU4gZnNjayBNQU5VQUxMWS5cbiIKKyJcdChpLmUuLCB3aXRob3V0IC1hIG9yIC1wIG9wdGlvbnMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyIlczogTcOCVSBUSFXhuqpOIELhuqRUIFRIxq/hu5xORzogSMODWSBU4buwIENI4bqgWSBmc2NrLlxuIgorIlx0KHThu6ljIGzDoCBraMO0bmcgY8OzIHTDuXkgY2jhu41uIOKAnC1h4oCdIGhheSDigJwtcOKAnSkuXG4iCisKKyM6IGUyZnNjay91dGlsLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKK21zZ3N0ciAiVsO5bmcgbmjhu5sgxJHGsOG7o2MgZMO5bmc6ICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1LCAiCittc2dzdHIgIlbDuW5nIG5o4bubIMSRxrDhu6NjIGTDuW5nOiAlbHUsICIKKworIzogZTJmc2NrL3V0aWwuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZTogJTUuMmYvJTUuMmYvJTUuMmZcbiIKK21zZ3N0ciAidGjhu51pIGdpYW46ICU1LjJmLyU1LjJmLyU1LjJmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVsYXBzZWQgdGltZTogJTYuM2ZcbiIKK21zZ3N0ciAidGjhu51pIGdpYW4gxJHDoyBxdWE6ICU2LjNmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDQ3IGUyZnNjay91dGlsLmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICJ0cm9uZyBraGkgxJHhu41jIG7DunQgdGjDtG5nIHRpbiAlbHUgdHJvbmcgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6NDc1IGUyZnNjay91dGlsLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICJ0cm9uZyBraGkgZ2hpIG7DunQgdGjDtG5nIHRpbiAlbHUgdHJvbmcgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6NjM3Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyB6ZXJvaXppbmcgYnVmZmVyIgorbXNnc3RyICJ0cm9uZyBraGkgY+G6pXAgcGjDoXQgYuG7mSDEkeG6v20gbMOgbSBz4buRIGtow7RuZyIKKworIzogZTJmc2NrL3V0aWwuYzo3ODUKK21zZ2lkICIiCisiVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb2RpZmllZCB3aGlsZSBmc2NrIGlzICIKKyJydW5uaW5nLlxuIgorbXNnc3RyICIiCisiTcOCVSBUSFXhuqpOOiBo4buHIHRo4buRbmcgdOG6rXAgdGluIMSRYW5nIMSRxrDhu6NjIHPhu61hIGNo4buvYSB0cm9uZyBraGkgbOG7h25oIGZzY2sgxJFhbmcgIgorImNo4bqheS5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3MgorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgImhvw6BuIHThuqV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWIgYmxvY2tfc2l6ZV0gWy1pIGlucHV0X2ZpbGVdIFstbyBvdXRwdXRfZmlsZV0gWy1zdnduZl1cbiIKKyIgICAgICAgWy1jIGJsb2Nrc19hdF9vbmNlXSBbLWQgZGVsYXlfZmFjdG9yX2JldHdlZW5fcmVhZHNdIFstZSAiCisibWF4X2JhZF9ibG9ja3NdXG4iCisiICAgICAgIFstcCBudW1fcGFzc2VzXSBbLXQgdGVzdF9wYXR0ZXJuIFstdCB0ZXN0X3BhdHRlcm4gWy4uLl1dXVxuIgorIiAgICAgICBkZXZpY2UgW2xhc3RfYmxvY2sgW2ZpcnN0X2Jsb2NrXV1cbiIKK21zZ3N0ciAiIgorIkPDoWNoIGTDuW5nOiAlcyBbLWIgY+G7oV9raOG7kWldIFstaSB04bqtcF90aW5fxJHhuqd1X3bDoG9dIFstbyB04bqtcF90aW5fxJHhuqd1X3JhXSBbLSIKKyJzdnduZl1cbiIKKyIgICAgICAgWy1jIHPhu5Ffa2jhu5FpX2PDuW5nX2zDumNdIFstZCBo4buHX3Phu5FfxJHhu6NpX8SR4buNY10gWy1lIHPhu5FfdOG7kWlfxJFhX2to4buRaV944bqldV1cbiIKKyIgICAgICAgWy1wIHPhu5FfbOG6p25fcXVhXSBbLXQgbeG6q3VfdGjhu60gWy10IG3huqt1X3Ro4butIFsuLi5dXV1cbiIKKyIgICAgICAgdGhp4bq/dF9i4buLIFtraOG7kWlfY3Xhu5FpIFtraOG7kWlfxJHhuqd1XV1cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBUaGUgLW4gYW5kIC13IG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzOiBoYWkgdMO5eSBjaOG7jW4g4oCcLW7igJ0gdsOgIOKAnC134oCdIGxv4bqhaSB04burIGzhuqtuIG5oYXUuXG4iCisiXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiU2LjJmJSUgZG9uZSwgJXMgZWxhcHNlZC4gKCVkLyVkLyVkIGVycm9ycykiCittc2dzdHIgIiU2LjJmJSUgaG/DoG4gdOG6pXQsICVzIMSRw6MgdHLDtGkgcXVhLiAoJWQvJWQvJWQgbOG7l2kpIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjMyOAorbXNnaWQgIlRlc3Rpbmcgd2l0aCByYW5kb20gcGF0dGVybjogIgorbXNnc3RyICLEkGFuZyB0aOG7rSByYSBi4bqxbmcgbeG6q3Ugbmfhuqt1IG5oacOqbjogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM0NgorbXNnaWQgIlRlc3Rpbmcgd2l0aCBwYXR0ZXJuIDB4IgorbXNnc3RyICLEkGFuZyB0aOG7rSByYSBi4bqxbmcgbeG6q3UgMHgiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Mzc4IG1pc2MvYmFkYmxvY2tzLmM6NDUxCittc2dpZCAiZHVyaW5nIHNlZWsiCittc2dzdHIgInRyb25nIGtoaSBkaSBjaHV54buDbiB24buLIHRyw60iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIldlaXJkIHZhbHVlICglbGQpIGluIGRvX3JlYWRcbiIKK21zZ3N0ciAiR2nDoSB0cuG7iyBs4bqhICglbGQpIHRyb25nIHZp4buHYyDEkeG7jWMg4oCcZG9fcmVhZOKAnVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ3NgorbXNnaWQgImR1cmluZyBleHQyZnNfc3luY19kZXZpY2UiCittc2dzdHIgInRyb25nIGtoaSDEkeG7k25nIGLhu5kgaG/DoSB0aGnhur90IGLhu4sg4oCcZXh0MmZzX3N5bmNfZGV2aWNl4oCdIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ5NiBtaXNjL2JhZGJsb2Nrcy5jOjc1OAorbXNnaWQgIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iCittc2dzdHIgInRyb25nIGtoaSBi4bqvdCDEkeG6p3UgbOG6t3AgbOG6oWkgZGFuaCBzw6FjaCBjw6FjIGto4buRaSBzYWkiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTExIG1pc2MvYmFkYmxvY2tzLmM6NjExIG1pc2MvYmFkYmxvY2tzLmM6NzY5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBidWZmZXJzIgorbXNnc3RyICJ0cm9uZyBraGkgY+G6pXAgcGjDoXQgYuG7mSDEkeG7h20iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGJsb2NrcyAlbHUgdG8gJWx1XG4iCittc2dzdHIgIsSQYW5nIGtp4buDbSB0cmEga2jhu5FpIHRyb25nIHBo4bqhbSB2aSAlbHUgxJHhur9uICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyMAorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtb25seSBtb2RlXG4iCittc2dzdHIgIsSQYW5nIGtp4buDbSB0cmEgdMOsbSBraOG7kWkgc2FpIHRyb25nIGNo4bq/IMSR4buZIGNo4buJIMSR4buNY1xuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyOQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChyZWFkLW9ubHkgdGVzdCk6ICIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSB0w6xtIGto4buRaSBzYWkgKGtp4buDbSB0cmEg4bufIGNo4bq/IMSR4buZIGNo4buJIMSR4buNYyk6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MzYgbWlzYy9iYWRibG9ja3MuYzo2NDMgbWlzYy9iYWRibG9ja3MuYzo2ODUKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODMyCittc2dpZCAiVG9vIG1hbnkgYmFkIGJsb2NrcywgYWJvcnRpbmcgdGVzdFxuIgorbXNnc3RyICJRdcOhIG5oaeG7gXUga2jhu5FpIHNhaSBuw6puIGjhu6d5IGLhu48gcGjDqXAgdGjhu61cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MTgKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSB0w6xtIGto4buRaSBzYWkgdHJvbmcgY2jhur8gxJHhu5kgxJHhu41jLWdoaVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYyMCBtaXNjL2JhZGJsb2Nrcy5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tIGJsb2NrICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiVOG7qyBraOG7kWkgJWx1IMSR4bq/biAlbHVcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2NzUKK21zZ2lkICJSZWFkaW5nIGFuZCBjb21wYXJpbmc6ICIKK21zZ3N0ciAixJBhbmcgxJHhu41jIHbDoCBzbyBzw6FuaDogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc4MQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSB0w6xtIGto4buRaSBzYWkgdHJvbmcgY2jhur8gxJHhu5kgxJHhu41jLWdoaSBraMO0bmcgaOG7p3lcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODcKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAobm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgdGVzdClcbiIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSB0w6xtIGto4buRaSBzYWkgKHRo4butIOG7nyBjaOG6vyDEkeG7mSDEkeG7jWMtZ2hpIGtow7RuZyBwaMOhIGjhu6d5KVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc5NAorbXNnaWQgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIgorbXNnc3RyICIiCisiXG4iCisiTeG7m2kgYuG6r3QgdMOtbiBoaeG7h3Ugbmfhuq90IG7Dqm4gbMOgbSBz4bqhY2hcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyaW5nIHRlc3QgZGF0YSB3cml0ZSwgYmxvY2sgJWx1IgorbXNnc3RyICJ0cm9uZyBraGkgdGjhu60gcmEgZ2hpIGThu68gbGnhu4d1LCBraOG7kWkgJWx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk5OCBtaXNjL3V0aWwuYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZDsgIgorbXNnc3RyICIlcyDEkcOjIMSRxrDhu6NjIGfhuq9uIGvhur90OyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwMAorbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICIiCisidMO5eSBjaOG7jW4ga2jhu5FpIHNhaSAoYmFkYmxvY2tzKSB24bqrbiBi4buLIMOpcCBideG7mWMuXG4iCisiTW9uZyDigJwvZXRjL210YWLigJ0ga2jDtG5nIMSRw7puZy5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDA1Cittc2dpZCAiaXQncyBub3Qgc2FmZSB0byBydW4gYmFkYmxvY2tzIVxuIgorbXNnc3RyICJLaMO0bmcgYW4gdG/DoG4ga2hpIGNo4bqheSBiYWRibG9ja3MuXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAxMCBtaXNjL3V0aWwuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYXBwYXJlbnRseSBpbiB1c2UgYnkgdGhlIHN5c3RlbTsgIgorbXNnc3RyICJDw7MgduG6uyBsw6AgJXMgxJFhbmcgxJHGsOG7o2MgaOG7hyB0aOG7kW5nIGTDuW5nOyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAxMworbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICJ24bqrbiDDqXAgYnXhu5ljIGJhZGJsb2NrcyAoa2jhu5FpIHNhaSkuXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIC0gJXMiCittc2dzdHIgIiVzIGtow7RuZyBo4bujcCBs4buHIOKAlCAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBiaWcgbWF4IGJhZCBibG9ja3MgY291bnQgJXUgLSBtYXhpbXVtIGlzICV1IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRlc3RfcGF0dGVybiAtICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY+G6pXAgcGjDoXQgYuG7mSBuaOG7myBjaG8gbeG6q3UgdGjhu60gKHRlc3RfcGF0dGVybikg4oCUICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExODQKK21zZ2lkICJNYXhpbXVtIG9mIG9uZSB0ZXN0X3BhdHRlcm4gbWF5IGJlIHNwZWNpZmllZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiVHJvbmcgY2jhur8gxJHhu5kgY2jhu4kgxJHhu41jLCBjw7MgdGjhu4MgY2jhu4kgcmEgdOG7kWkgxJFhIG3hu5l0IG3huqt1IHRo4butICh0ZXN0X3BhdHRlcm4pIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExOTAKK21zZ2lkICJSYW5kb20gdGVzdF9wYXR0ZXJuIGlzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJLaMO0bmcgY2hvIHBow6lwIG3huqt1IHRo4butICh0ZXN0X3BhdHRlcm4pIG5n4bqrdSBuaGnDqm4gdHJvbmcgY2jhur8gxJHhu5kgY2jhu4kgxJHhu41jIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMDQKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgbWFudWFsbHlcbiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyB4w6FjIMSR4buLbmgga8OtY2ggY+G7oSBj4bunYSB0aGnhur90IGLhu4s7XG4iCisiYuG6oW4gY+G6p24gcGjhuqNpIHThu7EgY2jhu4kgxJHhu4tuaCBrw61jaCBj4buhIMSRw7MuXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIxMAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZGV2aWNlIHNpemUiCittc2dzdHIgInRyb25nIGtoaSB0aOG7rSBkw7IgdMOsbSBrw61jaCBj4buhIGPhu6dhIHRoaeG6v3QgYuG7iyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjE1Cittc2dpZCAibGFzdCBibG9jayIKK21zZ3N0ciAia2jhu5FpIGN14buRaSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjIxCittc2dpZCAiZmlyc3QgYmxvY2siCittc2dzdHIgImto4buRaSDEkeG6p3UiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0aW5nIGJsb2NrICglbGx1KTogbXVzdCBiZSBsZXNzIHRoYW4gJWxsdSIKK21zZ3N0ciAia2jhu5FpIMSR4bqndSBraMO0bmcgaOG7o3AgbOG7hyAoJWxsdSk6IHBo4bqjaSBuaOG7jyBoxqFuICVsbHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGVuZCBibG9jayAoJWxsdSk6IG11c3QgYmUgMzItYml0IHZhbHVlIgorbXNnc3RyICJraOG7kWkgY3Xhu5FpIGtow7RuZyBo4bujcCBs4buHICglbGx1KTogcGjhuqNpIGzDoCBnacOhIHRy4buLIDMyIGLDrXQiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI4NworbXNnaWQgIndoaWxlIGNyZWF0aW5nIGluLW1lbW9yeSBiYWQgYmxvY2tzIGxpc3QiCittc2dzdHIgInRyb25nIGtoaSB04bqhbyBkYW5oIHPDoWNoIGPDoWMga2jhu5FpIGjhu49uZyB0cm9uZyBi4buZIG5o4bubIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyOTYKK21zZ2lkICJpbnB1dCBmaWxlIC0gYmFkIGZvcm1hdCIKK21zZ3N0ciAidOG6rXAgdGluIMSR4bqndSB2w6BvIC0gc2FpIMSR4buLbmggZOG6oW5nIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEzMDQgbWlzYy9iYWRibG9ja3MuYzoxMzEzCittc2dpZCAid2hpbGUgYWRkaW5nIHRvIGluLW1lbW9yeSBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAidHJvbmcga2hpIHRow6ptIHbDoG8gZGFuaCBzw6FjaCBjw6FjIGto4buRaSBo4buPbmcgdHJvbmcgYuG7mSBuaOG7myIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMzM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhc3MgY29tcGxldGVkLCAldSBiYWQgYmxvY2tzIGZvdW5kLiAoJWQvJWQvJWQgZXJyb3JzKVxuIgorbXNnc3RyICJRdWEgeG9uZywgdMOsbSB0aOG6pXkgJXUga2jhu5FpIHNhaS4gKCVkLyVkLyVkIGVycm9ycylcbiIKKworIzogbWlzYy9jaGF0dHIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmZdIFstKz1hQWNDZERlaWpzU3RUdV0gWy12IHZlcnNpb25dIGZpbGVzLi4uXG4iCittc2dzdHIgIkPDoWNoIGTDuW5nOiAlcyBbLVJWZl0gWy0rPWFBY0NkRGVpanNTdFR1XSBbLXYgcGhpw6puX2LhuqNuXSB04bqtcF90aW4uLi5cbiIKKworIzogbWlzYy9jaGF0dHIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHZlcnNpb24gLSAlc1xuIgorbXNnc3RyICJwaGnDqm4gYuG6o24gc2FpIOKAlCAlc1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwMSBtaXNjL2xzYXR0ci5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc3RhdCAlcyIKK21zZ3N0ciAidHJvbmcga2hpIGPhu5EgbOG6pXkgY8OhYyB0aMO0bmcgdGluIHbhu4EgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgInRyb25nIGtoaSDEkeG7jWMgY8OhYyBj4budIHRyw6puICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIxMyBtaXNjL2NoYXR0ci5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncyBvZiAlcyBzZXQgYXMgIgorbXNnc3RyICJDw6FjIGPhu50gY+G7p2EgJXMgxJHDoyDEkeG6t3QgdGjDoG5oICIKKworIzogbWlzYy9jaGF0dHIuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAidHJvbmcga2hpIMSR4bq3dCBjw6FjIGPhu50gdHLDqm4gJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gb2YgJXMgc2V0IGFzICVsdVxuIgorbXNnc3RyICJQaGnDqm4gYuG6o24gJXMgxJHGsOG7o2MgxJHhurd0IHRow6BuaCAlbHVcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJ0cm9uZyBraGkgxJHhurd0IHBoacOqbiBi4bqjbiB0csOqbiAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyNjcKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBwYXRoIHZhcmlhYmxlIGluIGNoYXR0cl9kaXJfcHJvYyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuqVwIHBow6F0IGJp4bq/biDEkcaw4budbmcgZOG6q24gdHJvbmcgY2hhdHRyX2Rpcl9wcm9jIgorCisjOiBtaXNjL2NoYXR0ci5jOjMwNworbXNnaWQgIj0gaXMgaW5jb21wYXRpYmxlIHdpdGggLSBhbmQgK1xuIgorbXNnc3RyICI9IGtow7RuZyB0xrDGoW5nIHRow61jaCB24bubaSDigJwt4oCdIHbDoCDigJwr4oCdXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MzE1Cittc2dpZCAiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iCittc2dzdHIgIlBo4bqjaSBkw7luZyDigJwtduKAnSwg4oCcPeKAnSwg4oCcLeKAnSBoYXkg4oCcK+KAnVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08bnVtPl0gWy1vIGJsb2Nrc2l6ZT08bnVtPl0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJDw6FjaCBkw7luZzogJXMgWy1iZmhpeFZdIFstbyBzacOqdV9raOG7kWk9PHPhu5E+XSBbLW8gY+G7oV9raOG7kWk9PHPhu5E+XSB0aGnhur90X2Lhu4tcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE1OQorbXNnaWQgImJsb2NrcyIKK21zZ3N0ciAia2jhu5FpIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTY5Cittc2dpZCAiY2x1c3RlcnMiCittc2dzdHIgImxpw6puIGN1bmciCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiR3JvdXAgJWx1OiAoQmxvY2tzICIKK21zZ3N0ciAiTmjDs20gJWx1OiAoS2jhu5FpICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIENoZWNrc3VtIDB4JTA0eCIKK21zZ3N0ciAiICBU4buVbmcga2nhu4NtIDB4JTA0eCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKEVYUEVDVEVEIDB4JTA0eCkiCittc2dzdHIgIiAoQ+G6pk4gICAgICAweCUwNHgpIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgdW51c2VkIGlub2RlcyAldVxuIgorbXNnc3RyICIsIG7DunQga2jDtG5nIGTDuW5nICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAlcyBzdXBlcmJsb2NrIGF0ICIKK21zZ3N0ciAiICAlcyBzacOqdSBraOG7kWkgdOG6oWkgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE0Cittc2dpZCAiUHJpbWFyeSIKK21zZ3N0ciAiQ2jDrW5oIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE0Cittc2dpZCAiQmFja3VwIgorbXNnc3RyICJTYW8gbMawdSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxOAorbXNnaWQgIiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgIgorbXNnc3RyICIsIE3DtCB04bqjIG5ow7NtIHThuqFpICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyMgorbXNnaWQgIiIKKyJcbiIKKyIgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBDw6FjIGto4buRaSBHRFQgxJHDoyBkw6BuaCByacOqbmcgdOG6oWkgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjI5Cittc2dpZCAiIEdyb3VwIGRlc2NyaXB0b3IgYXQgIgorbXNnc3RyICIgTcO0IHThuqMgbmjDs20gdOG6oWkgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM1Cittc2dpZCAiICBCbG9jayBiaXRtYXAgYXQgIgorbXNnc3RyICIgTeG6o25nIOG6o25oIGto4buRaSB04bqhaSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzkKK21zZ2lkICIsIElub2RlIGJpdG1hcCBhdCAiCittc2dzdHIgIiwgTeG6o25nIOG6o25oIG7DunQgdGjDtG5nIHRpbiB04bqhaSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDMKK21zZ2lkICIiCisiXG4iCisiICBJbm9kZSB0YWJsZSBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgIELhuqNuZyBuw7p0IHRow7RuZyB0aW4gdOG6oWkgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgICV1IGZyZWUgJXMsICV1IGZyZWUgaW5vZGVzLCAldSBkaXJlY3RvcmllcyVzIgorbXNnc3RyICIiCisiXG4iCisiICAldSB0cuG7kW5nICVzLCAldSBuw7p0IHLhuqNuaCwgJXUgdGjGsCBt4bulYyVzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgJXUgdW51c2VkIGlub2Rlc1xuIgorbXNnc3RyICIsICV1IG7DunQga2jDtG5nIGTDuW5nXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTkKK21zZ2lkICIgIEZyZWUgYmxvY2tzOiAiCittc2dzdHIgIiAgS2jhu5FpIHLhuqNuaDogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mjc0Cittc2dpZCAiICBGcmVlIGlub2RlczogIgorbXNnc3RyICIgIE7DunQgcuG6o25oOiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMTAKK21zZ2lkICJ3aGlsZSBwcmludGluZyBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAidHJvbmcga2hpIGluIHJhIGRhbmggc8OhY2ggY8OhYyBraOG7kWkgc2FpIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9ja3M6ICV1IgorbXNnc3RyICJLaOG7kWkgc2FpOiAldSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM0NSBtaXNjL3R1bmUyZnMuYzozNDcKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInRyb25nIGtoaSDEkeG7jWMgbsO6dCB0aMO0bmcgdGluIG5o4bqtdCBrw70iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNTEKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInRyb25nIGtoaSBt4bufIG7DunQgdGjDtG5nIHRpbiBuaOG6rXQga8O9IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzU3Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyIGJsb2NrIgorbXNnc3RyICJ0cm9uZyBraGkgxJHhu41jIHNpw6p1IGto4buRaSBuaOG6rXQga8O9IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzY0Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlciBpbnZhbGlkIVxuIgorbXNnc3RyICJT4buRIG1hIHRodeG6rXQgdGjhuqV5IHNpw6p1IGto4buRaSBuaOG6rXQga8O9IGtow7RuZyBo4bujcCBs4buHIVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzY3Cittc2dpZCAiSm91cm5hbCBmZWF0dXJlczogICAgICAgICIKK21zZ3N0ciAiVMOtbmggbsSDbmcgbmjhuq10IGvDvTogICAgICAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzgwCittc2dpZCAiSm91cm5hbCBzaXplOiAgICAgICAgICAgICAiCittc2dzdHIgIkvDrWNoIGPhu6Egbmjhuq10IGvDvTogICAgICAgICAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCittc2dzdHIgIiIKKyJDaGnhu4F1IGTDoGkgbmjhuq10IGvDvTogICAgICAgICV1XG4iCisiRMOjeSBuaOG6rXQga8O9OiAgICAgICAgICAgICAgMHglMDh4XG4iCisixJDhuqd1IG5o4bqtdCBrw706ICAgICAgICAgICAgICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZXJybm86ICAgICAgICAgICAgJWRcbiIKK21zZ3N0ciAiTOG7l2kgSm91cm5hbDogICAgICAgICAgICAgICVkXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MTUgbWlzYy90dW5lMmZzLmM6MTk2Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgInRyb25nIGtoaSDEkeG7jWMgc2nDqnUga2jhu5FpIG5o4bqtdCBrw70iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXJzIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgY8OhYyBz4buRIG1hIHRodeG6rXQgc2nDqnUga2jhu5FpIG5o4bqtdCBrw70iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgYmxvY2sgc2l6ZTogICAgICAgJXVcbiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBmaXJzdCBibG9jazogICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgbnVtYmVyIG9mIHVzZXJzOiAgJXVcbiIKK21zZ3N0ciAiIgorIlxuIgorIkvDrWNoIGPhu6Ega2jhu5FpIG5o4bqtdCBrw706ICAgICAldVxuIgorIsSQ4buZIGTDoGkgbmjhuq10IGvDvTogICAgICAgICAgICV1XG4iCisiS2jhu5FpIMSR4bqndSBuaOG6rXQga8O9OiAgICAgICAgICV1XG4iCisiRMOjeSBuaOG6rXQga8O9OiAgICAgICAgICAgICAgMHglMDh4XG4iCisixJDhuqd1IG5o4bqtdCBrw706ICAgICAgICAgICAgICAldVxuIgorIlPhu5EgbmfGsOG7nWkgZMO5bmcgbmjhuq10IGvDvTogICAgJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHVzZXJzOiAgICAgICAgICAgICVzXG4iCittc2dzdHIgIk5nxrDhu51pIGTDuW5nIG5o4bqtdCBrw706ICAgICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NTYgbWlzYy9ta2UyZnMuYzo3NDMgbWlzYy90dW5lMmZzLmM6MTIxMQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBvcHRpb25zIVxuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY+G6pXAgcGjDoXQgYuG7mSBuaOG7myDEkeG7gyBwaMOibiB0w6FjaCB0w7l5IGNo4buNbiFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2sgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJUaGFtIHPhu5Egc2nDqnUga2jhu5FpIGtow7RuZyBo4bujcCBs4buHOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiVGhhbSBz4buRIGvDrWNoIGPhu6Ega2jhu5FpIGtow7RuZyBo4bujcCBs4buHOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgZXh0ZW5kZWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdXBlcmJsb2NrPTxzdXBlcmJsb2NrIG51bWJlcj5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvY2tzaXplPlxuIgorbXNnc3RyICIiCisiXG4iCisiQ2jhu4kgcmEgdMO5eSBjaOG7jW4gbeG7nyBy4buZbmcgc2FpOiAlc1xuIgorIlxuIgorIkPDoWMgdMO5eSBjaOG7jW4gxJHDoyBt4bufIHLhu5luZyBjxaluZyDEkeG7i25oIGdp4bubaSBi4bqxbmcgZOG6pXUgcGjhuql5LCBjw7MgdGjhu4MgY2jhuqVwIG5o4bqtblxuIgorIsSR4buRaSBz4buRIMSRxrDhu6NjIG5n4bulIMO9IHbhu5tpIGThuqV1IGLhurFuZyDigJw94oCdLlxuIgorIlxuIgorIlTDuXkgY2jhu41uIMSRw6MgbeG7nyBy4buZbmcgaOG7o3AgbOG7hzpcbiIKKyJcdHN1cGVyYmxvY2s9PHPhu5EgdGjhu6kgdOG7sSBzacOqdSBraOG7kWk+XG4iCisiXHRibG9ja3NpemU9PGvDrWNoIGPhu6Ega2jhu5FpPlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTY4IG1pc2MvbWtlMmZzLmM6MTczNAorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzXG4iCittc2dzdHIgIlx0RMO5bmcgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYwNiBtaXNjL2UyaW1hZ2UuYzoxNTgyIG1pc2MvdHVuZTJmcy5jOjIwNjAKKyM6IHJlc2l6ZS9tYWluLmM6MzE5Cittc2dpZCAiQ291bGRuJ3QgZmluZCB2YWxpZCBmaWxlc3lzdGVtIHN1cGVyYmxvY2suXG4iCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBzacOqdSBraOG7kWkgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBo4bujcCBs4buHLlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogJXM6IGVycm9yIHJlYWRpbmcgYml0bWFwczogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAlczogZ+G6t3AgbOG7l2kga2hpIMSR4buNYyBt4bqjbmcg4bqjbmg6ICVzXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWyAtcnxRIF0gWyAtZnIgXSBkZXZpY2UgaW1hZ2UtZmlsZVxuIgorbXNnc3RyICJDw6FjaCBkw7luZzogJXMgWyAtcnxRIF0gWyAtZnIgXSB0aGnhur90X2Lhu4sgdOG6rXBfdGluX+G6o25oXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLUkgZGV2aWNlIGltYWdlLWZpbGVcbiIKK21zZ3N0ciAiICAgICAgICAgICAlcyAtSSB0aGnhur90X2Lhu4sgdOG6rXBfdGluX+G6o25oXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICVzIC1yYSAgWyAgLWNmbnAgIF0gWyAtbyBzcmNfb2Zmc2V0IF0gWyAtTyBkZXN0X29mZnNldCBdIHNyY19mcyAiCisiWyBkZXN0X2ZzIF1cbiIKK21zZ3N0ciAiIgorIiAgICAgICAgICAgJXMgLXJhICBbICAtY2ZucCAgXSBbIC1vIHNyY19vZmZzZXQgXSBbIC1PIGRlc3Rfb2Zmc2V0IF0gc3JjX2ZzICIKKyJbIGRlc3RfZnMgXVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjkgbWlzYy9lMmltYWdlLmM6NTc2IG1pc2MvZTJpbWFnZS5jOjU4MgorIzogbWlzYy9lMmltYWdlLmM6MTE3OAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVyIgorbXNnc3RyICJ0cm9uZyBraGkgY+G6pXAgcGjDoXQgYuG7mSDEkeG7h20iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAixJBhbmcgZ2hpIGto4buRaSAlbGx1XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciB3cml0aW5nIGJsb2NrICVsbHUiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBnaGkga2jhu5FpICVsbHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE5MQorbXNnaWQgImVycm9yIGluIGdlbmVyaWNfd3JpdGUoKSIKK21zZ3N0ciAiY8OzIGzhu5dpIHRyb25nIGdlbmVyaWNfd3JpdGUoKSIKKworIzogbWlzYy9lMmltYWdlLmM6MjA4Cittc2dpZCAiRXJyb3I6IGhlYWRlciBzaXplIGlzIGJpZ2dlciB0aGFuIHdydF9zaXplXG4iCittc2dzdHIgIkzhu5dpOiBrw61jaCB0aMaw4bubYyBwaOG6p24gxJHhuqd1IGzhu5tuIGjGoW4gd3J0X3NpemVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MjEzCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgaGVhZGVyIGJ1ZmZlclxuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY+G6pXAgcGjDoXQgYuG7mSDEkeG7h20gcGjhuqduIMSR4bqndVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNDEKK21zZ2lkICJ3aGlsZSB3cml0aW5nIHN1cGVyYmxvY2siCittc2dzdHIgInRyb25nIGtoaSBnaGkgc2nDqnUga2jhu5FpIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNTAKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJ0cm9uZyBraGkgZ2hpIGLhuqNuZyBuw7p0IHRow7RuZyB0aW4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI1OAorbXNnaWQgIndoaWxlIHdyaXRpbmcgYmxvY2sgYml0bWFwIgorbXNnc3RyICJ0cm9uZyBraGkgZ2hpIG3huqNuZyDhuqNuaCBraOG7kWkiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI2NgorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgYml0bWFwIgorbXNnc3RyICJ0cm9uZyBraGkgZ2hpIG3huqNuZyDhuqNuaCBuw7p0IHRow7RuZyB0aW4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IGRpcmVjdG9yeSBibG9jayAlbGx1OiBiYWQgcmVjX2xlbiAoJWQpXG4iCittc2dzdHIgIkjhu49uZyBraOG7kWkgdGjGsCBt4bulYyAlbGx1OiByZWNfbGVuIHNhaSAoJWQpXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjUxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IGRpcmVjdG9yeSBibG9jayAlbGx1OiBiYWQgbmFtZV9sZW4gKCVkKVxuIgorbXNnc3RyICJI4buPbmcga2jhu5FpIHRoxrAgbeG7pWMgJWxsdTogbmFtZV9sZW4gc2FpICglZClcbiIKKworIzogbWlzYy9lMmltYWdlLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsbHUgLyAlbGx1IGJsb2NrcyAoJWQlJSkiCittc2dzdHIgIiVsbHUgLyAlbGx1IGto4buRaSAoJWQlJSkiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjU4NiBtaXNjL2UyaW1hZ2UuYzo2MjYKK21zZ2lkICJDb3B5aW5nICIKK21zZ3N0ciAixJBhbmcgY2jDqXAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjYyMworbXNnaWQgIiIKKyJTdG9wcGluZyBub3cgd2lsbCBkZXN0cm95IHRoZSBmaWxlc3lzdGVtLCBpbnRlcnJ1cHQgYWdhaW4gaWYgeW91IGFyZSBzdXJlXG4iCittc2dzdHIgIiIKKyJE4burbmcgbOG6oWkgc+G6vSBsw6BtIGjhu49uZyBo4buHIHRo4buRbmcgdOG6rXAgdGluLCBuZ+G6r3QgbOG6p24gbuG7r2EgbuG6v3UgYuG6oW4gdGjhu7FjIHPhu7EgbXXhu5FuICIKKyJ0aOG6v1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHJlbWFpbmluZyBhdCAlLjJmIE1CL3MiCittc2dzdHIgIiAlcyBjw7JuIGzhuqFpIOG7nyB04buRYyDEkeG7mSAlLjJmIE1CL3MiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjY2MSBtaXNjL2UyaW1hZ2UuYzoxMTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgYmxvY2sgJWxsdSIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4buNYyBraOG7kWkgJWxsdSIKKworIzogbWlzYy9lMmltYWdlLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcGllZCAlbGx1IC8gJWxsdSBibG9ja3MgKCVkJSUpIGluICVzICIKK21zZ3N0ciAixJDDoyBjaMOpcCAlbGx1IC8gJWxsdSBraOG7kWkgKCVkJSUpIHRyb25nICVzIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXQgJS4yZiBNQi9zIgorbXNnc3RyICLhu58gdOG7kWMgxJHhu5kgJS4yZiBNQi9zIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3NTUKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGwxIHRhYmxlIgorbXNnc3RyICJ0cm9uZyBraGkgY+G6pXAgcGjDoXQgYuG6o25nIGwxIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo4MDAKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGwyIGNhY2hlIgorbXNnc3RyICJ0cm9uZyBraGkgY+G6pXAgcGjDoXQgYuG6o25nIGwyIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo4MjMKK21zZ2lkICIiCisiV2FybmluZzogVGhlcmUgYXJlIHN0aWxsIHRhYmxlcyBpbiB0aGUgY2FjaGUgd2hpbGUgcHV0dGluZyB0aGUgY2FjaGUsIGRhdGEgIgorIndpbGwgYmUgbG9zdCBzbyB0aGUgaW1hZ2UgbWF5IG5vdCBiZSB2YWxpZC5cbiIKK21zZ3N0ciAiIgorIkPhuqNuaCBiw6FvOiBW4bqrbiBjw7JuIGLhuqNuZyB0cm9uZyBi4buZIG5o4bubIMSR4buHbSB0cm9uZyBraGkgxJHhurd0IGLhu5kgbmjhu5sgbsOgeSwgZOG7ryBsaeG7h3Ugc+G6vSAiCisibeG6pXQgZG8gxJHDsyDhuqNuaCBjw7MgdGjhu4Mga2jDtG5nIGjhu6NwIGzhu4cuXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjExNDUKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGV4dDJfcWNvdzJfaW1hZ2UiCittc2dzdHIgInRyb25nIGtoaSBj4bqlcCBwaMOhdCBleHQyX3Fjb3cyX2ltYWdlIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTUyCittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGV4dDJfcWNvdzJfaW1hZ2UiCittc2dzdHIgInRyb25nIGtoaSBraOG7n2kgdOG6oW8gZXh0Ml9xY293Ml9pbWFnZSIKKworIzogbWlzYy9lMmltYWdlLmM6MTIxMSBtaXNjL2UyaW1hZ2UuYzoxMjI5Cittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I6IG11bHRpcGxlIHNlcXVlbnRpYWwgcmVmY291bnQgYmxvY2tzIGNyZWF0ZWQhXG4iCittc2dzdHIgIkzhu5dpIGzhuq1wIHRyw6xuaDogxJFhIGto4buRaSByZWZjb3VudCBsacOqbiB0aeG6v3AgxJHGsOG7o2MgdOG6oW8gcmEhXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyNjkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAidHJvbmcgY+G6pXAgcGjDoXQgbeG6o25nIOG6o25oIGto4buRaSIKKworIzogbWlzYy9lMmltYWdlLmM6MTI3OAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgc2NyYW1ibGUgYmxvY2sgYml0bWFwIgorbXNnc3RyICJ0cm9uZyBraGkgY+G6pXAgcGjDoXQgbeG6o25nIOG6o25oIGto4buRaSBzY3JhbWJsZSIKKworIzogbWlzYy9lMmltYWdlLmM6MTI4NQorbXNnaWQgIlNjYW5uaW5nIGlub2Rlcy4uLlxuIgorbXNnc3RyICLEkGFuZyBxdcOpdCBjw6FjIG7DunQuLi5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTI5NworbXNnaWQgIkNhbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuqVwIHBow6F0IGLhu5kgxJHhu4dtIGto4buRaSIKKworIzogbWlzYy9lMmltYWdlLmM6MTMzNiBtaXNjL2UyaW1hZ2UuYzoxMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGl0ZXJhdGluZyBvdmVyIGlub2RlICV1IgorbXNnc3RyICJ0cm9uZyBraGkgbOG6t3AgcXVhIG7DunQgJXUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzODEKK21zZ2lkICJSYXcgYW5kIHFjb3cyIGltYWdlcyBjYW5ub3QgYmUgaW5zdGFsbGVkIgorbXNnc3RyICLhuqJuaCB0aMO0IHbDoCBxY29udzIga2jDtG5nIHRo4buDIMSRxrDhu6NjIGPDoGkgxJHhurd0IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDAzCittc2dpZCAiZXJyb3IgcmVhZGluZyBiaXRtYXBzIgorbXNnc3RyICJs4bq3cCBs4buXaSBraGkgxJHhu41jIG3huqNuZyBiaXQiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MTUKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGRldmljZSBmaWxlIgorbXNnc3RyICJ0cm9uZyBraGkgbeG7nyB04bqtcCB0aW4gdGhp4bq/dCBi4buLIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDI2Cittc2dpZCAid2hpbGUgcmVzdG9yaW5nIHRoZSBpbWFnZSB0YWJsZSIKK21zZ3N0ciAidHJvbmcga2hpIHBo4bulYyBo4buTaSBi4bqjbmcg4bqjbmgiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MjMKK21zZ2lkICItYSBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHJhdyBvciBRQ09XMiBpbWFnZXMuIgorbXNnc3RyICJ0w7l5IGNo4buNbiAtYSBjaOG7iSBjw7MgdGjhu4MgxJHGsOG7o2MgZMO5bmcgY8O5bmcgduG7m2kgY8OhYyDhuqNuaCB0aMO0IGhv4bq3YyBRQ09XMi4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MjkKK21zZ2lkICJPZmZzZXRzIGFyZSBvbmx5IGFsbG93ZWQgd2l0aCByYXcgaW1hZ2VzLiIKK21zZ3N0ciAiQ2jhur8gxJHhu5kgYsO5IGNo4buJIGNobyBwaMOpcCB24bubaSDhuqNuaCB0aMO0LiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUzNAorbXNnaWQgIk1vdmUgbW9kZSBpcyBvbmx5IGFsbG93ZWQgd2l0aCByYXcgaW1hZ2VzLiIKK21zZ3N0ciAiQ2jhur8gxJHhu5kgZGkgY2h1eeG7g24gY2jhu4kgY2hvIHBow6lwIHbhu5tpIOG6o25oIHRow7QuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTM5Cittc2dpZCAiTW92ZSBtb2RlIHJlcXVpcmVzIGFsbCBkYXRhIG1vZGUuIgorbXNnc3RyICJDaOG6vyDEkeG7mSBkaSBjaHV54buDbiB5w6p1IGPhuqd1IG3hu41pIGNo4bq/IMSR4buZIGThu68gbGnhu4d1LiIKKworIzogbWlzYy9lMmltYWdlLmM6MTU0OQorbXNnaWQgImNoZWNraW5nIGlmIG1vdW50ZWQiCittc2dzdHIgImtp4buDbSB0cmEgeGVtIMSRw6MgZ+G6r24ga+G6v3QgY2jGsGEiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1NTYKK21zZ2lkICIiCisiXG4iCisiUnVubmluZyBlMmltYWdlIG9uIGEgUi9XIG1vdW50ZWQgZmlsZXN5c3RlbSBjYW4gcmVzdWx0IGluIGFuXG4iCisiaW5jb25zaXN0ZW50IGltYWdlIHdoaWNoIHdpbGwgbm90IGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuIgorIlVzZSAtZiBvcHRpb24gaWYgeW91IHJlYWxseSB3YW50IHRvIGRvIHRoYXQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJDaOG6oXkgZTJpbWFnZSB0csOqbiBo4buHIHRo4buRbmcgdOG6rXAgdGluIGfhuq9uIMSQ4buNYy9HaGkgY8OzIHRo4buDIHThuqFvIHJhIG3hu5l0XG4iCisi4bqjbmgga2jDtG5nIHBow7kgaOG7o3AgY8OhaSBtw6Agc+G6vSBraMO0bmcgaOG7r3Ugw61jaCBraGkgbXXhu5FuIGfhu6EgbOG7l2kuXG4iCisiRMO5bmcgdMO5eSBjaOG7jW4gLWYgbuG6v3UgYuG6oW4gdGjhu7FjIHPhu7EgbXXhu5FuIGzDoG0gdGjhur8uXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MDgKK21zZ2lkICJRQ09XMiBpbWFnZSBjYW4gbm90IGJlIHdyaXR0ZW4gdG8gdGhlIHN0ZG91dCFcbiIKK21zZ3N0ciAi4bqibmggUUNPVzIga2jDtG5nIHRo4buDIGdoaSByYSDEkeG6p3UgcmEgdGnDqnUgY2h14bqpbiFcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYxNAorbXNnaWQgIkNhbiBub3Qgc3RhdCBvdXRwdXRcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzhuqV5IHRo4buRbmcga8OqIMSR4bqndSByYVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkltYWdlICglcykgaXMgY29tcHJlc3NlZFxuIgorbXNnc3RyICLhuqJuaCAoJXMpIMSRw6MgxJHGsOG7o2MgbsOpbiBs4bqhaVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkltYWdlICglcykgaXMgZW5jcnlwdGVkXG4iCittc2dzdHIgIuG6om5oICglcykgxJHDoyDEkcaw4bujYyBtw6MgaMOzYVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjb252ZXJ0IHFjb3cyIGltYWdlICglcykgaW50byByYXcgaW1hZ2UgKCVzKSIKK21zZ3N0ciAia2hpIGPhu5EgY2h1eeG7g24gxJHhu5VpIOG6o25oIHFjb3cyICglcykgdGjDoG5oIGThuqFuZyDhuqNuaCB0aMO0ICglcykiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MzkKK21zZ2lkICJUaGUgLWMgb3B0aW9uIG9ubHkgc3VwcG9ydGVkIGluIHJhdyBtb2RlXG4iCittc2dzdHIgIlTDuXkgY2jhu41uIOKAnC1j4oCdIGNo4buJIMSRxrDhu6NjIGjhu5cgdHLhu6MgdHJvbmcgY2jhur8gxJHhu5kgdGjDtFxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjQ0Cittc2dpZCAiVGhlIC1jIG9wdGlvbiBub3Qgc3VwcG9ydGVkIHdoZW4gd3JpdGluZyB0byBzdGRvdXRcbiIKK21zZ3N0ciAiVMO5eSBjaOG7jW4g4oCcLWPigJ0ga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6Mga2hpIGdoaSByYSDEkeG6p3UgcmEgdGnDqnUgY2h14bqpblxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjUxCittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBjaGVja19idWYiCittc2dzdHIgInRyb25nIGtoaSBj4bqlcCBwaMOhdCBjaGVja19idWYiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NTcKK21zZ2lkICJUaGUgLXAgb3B0aW9uIG9ubHkgc3VwcG9ydGVkIGluIHJhdyBtb2RlXG4iCittc2dzdHIgIlTDuXkgY2jhu41uIOKAnC1w4oCdIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIHRyb25nIGNo4bq/IMSR4buZIHRow7RcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTY2NworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibG9ja3MgYWxyZWFkeSBjb250YWluZWQgdGhlIGRhdGEgdG8gYmUgY29waWVkXG4iCittc2dzdHIgIiVkIGto4buRaSDEkcOjIHPhurVuIGNo4bupYSBk4buvIGxp4buHdSDEkeG7gyBzYW8gY2jDqXBcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IG9wZW4gJXNcbiIKK21zZ3N0ciAiZTJsYWJlbDoga2jDtG5nIHRo4buDIG3hu58gJXNcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBraMO0bmcgdGjhu4MgZGkgY2h1eeG7g24gxJHhuqd1IMSR4buNYyB24buLIHRyw60gc2nDqnUga2jhu5FpXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHJlYWRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBn4bq3cCBs4buXaSBraGkgxJHhu41jIHNpw6p1IGto4buRaVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBub3QgYW4gZXh0MiBmaWxlc3lzdGVtXG4iCittc2dzdHIgImUybGFiZWw6IGtow7RuZyBwaOG6o2kgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBraeG7g3UgZXh0MlxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo5NyBtaXNjL3R1bmUyZnMuYzoyMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGxhYmVsIHRvbyBsb25nLCB0cnVuY2F0aW5nLlxuIgorbXNnc3RyICJD4bqjbmggYsOhbzogbmjDo24gcXXDoSBkw6BpIG7Dqm4gY+G6r3Qgbmfhuq9uLlxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9jayBhZ2FpblxuIgorbXNnc3RyICJlMmxhYmVsOiBraMO0bmcgdGjhu4MgZGkgY2h1eeG7g24gxJHhuqd1IMSR4buNYyDEkeG7gyBs4bqleSBs4bqhaSBzacOqdSBraOG7kWlcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHdyaXRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBn4bq3cCBs4buXaSBraGkgZ2hpIHNpw6p1IGto4buRaVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMTcgbWlzYy90dW5lMmZzLmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBlMmxhYmVsIGRldmljZSBbbmV3bGFiZWxdXG4iCittc2dzdHIgIkPDoWNoIGTDuW5nOiBlMmxhYmVsIHRoaeG6v3RfYuG7iyBbbmjDo25fbeG7m2ldXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIDx0cmFuc2FjdGlvbiBmaWxlPiA8ZmlsZXN5c3RlbT5cbiIKK21zZ3N0ciAiQ8OhY2ggZMO5bmc6ICVzIDx04bqtcCB0aW4gZ2lhbyBk4buLY2g+IDxo4buHIHRo4buRbmcgdOG6rXAgdGluPlxuIgorCisjOiBtaXNjL2UydW5kby5jOjUyCittc2dpZCAiRmFpbGVkIHRvIHJlYWQgdGhlIGZpbGUgc3lzdGVtIGRhdGEgXG4iCittc2dzdHIgIkzhu5dpIMSR4buNYyBk4buvIGxp4buHdSBo4buHIHRo4buRbmcgdOG6rXAgdGluIFxuIgorCisjOiBtaXNjL2UydW5kby5jOjYyIG1pc2MvZTJ1bmRvLmM6ODMgbWlzYy9lMnVuZG8uYzoxMDggbWlzYy9lMnVuZG8uYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9mZXRjaCAlc1xuIgorbXNnc3RyICJM4buXaSB0ZGJfZmV0Y2ggJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIKK21zZ3N0ciAiR2nhu50gZ+G6r24ga+G6v3QgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBraMO0bmcgdMawxqFuZyDhu6luZyB24bubaSAldVxuIgorCisjOiBtaXNjL2UydW5kby5jOjg5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIFVVSUQgZGlkbid0IG1hdGNoIFxuIgorbXNnc3RyICJVVUlEIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4ga2jDtG5nIHTGsMahbmcg4bupbmcgXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfb3BlbiAlc1xuIgorbXNnc3RyICJM4buXaSB0ZGJfb3BlbiAlc1xuIgorCisjOiBtaXNjL2UydW5kby5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIHRyb25nIGtoaSBkw7IgdMOsbSB4ZW0gJXMgxJHDoyBn4bqvbiBr4bq/dCBjaMawYS5cbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNzUKK21zZ2lkICJlMnVuZG8gc2hvdWxkIG9ubHkgYmUgcnVuIG9uIHVubW91bnRlZCBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICJlMnVuZG8gY2jhu4kgbsOqbiBjaOG6oXkgdHLDqm4gbeG7mXQgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBjaMawYSBn4bqvbiBr4bq/dFxuIgorCisjOiBtaXNjL2UydW5kby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlc1xuIgorbXNnc3RyICJM4buXaSBt4bufICVzXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcGxheWVkIHRyYW5zYWN0aW9uIG9mIHNpemUgJXpkIGF0IGxvY2F0aW9uICVsbHVcbiIKK21zZ3N0ciAixJDDoyBjaOG6oXkgbOG6oWkgZ2lhbyBk4buLY2ggY8OzIGvDrWNoIGPhu6EgJXpkIOG7nyB24buLIHRyw60gJWxsdVxuIgorCisjOiBtaXNjL2UydW5kby5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgd3JpdGUgJXNcbiIKK21zZ3N0ciAiTOG7l2kgZ2hpICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBjb3VsZG4ndCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJD4bqiTkggQsOBTzoga2jDtG5nIHRo4buDIG3hu58gJXM6ICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBiYWQgZm9ybWF0IG9uIGxpbmUgJWQgb2YgJXNcbiIKK21zZ3N0ciAiQ+G6ok5IIELDgU86IGfhurdwIMSR4buLbmggZOG6oW5nIHNhaSB0csOqbiBkw7JuZyAlZCB0csOqbiAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNzAKK21zZ2lkICIiCisiV0FSTklORzogWW91ciAvZXRjL2ZzdGFiIGRvZXMgbm90IGNvbnRhaW4gdGhlIGZzY2sgcGFzc25vXG4iCisiXHRmaWVsZC4gIEkgd2lsbCBrbHVkZ2UgYXJvdW5kIHRoaW5ncyBmb3IgeW91LCBidXQgeW91XG4iCisiXHRzaG91bGQgZml4IHlvdXIgL2V0Yy9mc3RhYiBmaWxlIGFzIHNvb24gYXMgeW91IGNhbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkPhuqJOSCBCw4FPOiAvZXRjL2ZzdGFiIGPhu6dhIGLhuqFuIGtow7RuZyBjaOG7qWEgdHLGsOG7nW5nIGZzY2sgcGFzc25vLlxuIgorIlx0TcOheSB0w61uaCBz4bq9IMSRaeG7gXUgY2jhu4luaCB04bqhbSB0aOG7nWkgY2hvIGLhuqFuLCBuaMawbmcgYuG6oW4gbsOqbiBz4butYSBjaOG7r2FcbiIKKyJcdHThuq1wIHRpbiAvZXRjL2ZzdGFiIGPDoG5nIHPhu5ttIGPDoG5nIGPDoG5nIHThu5F0LlxuIgorIlxuIgorCisjOiBtaXNjL2ZzY2suYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogJXM6IG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiAlczoga2jDtG5nIHTDrG0gdGjhuqV5XG4iCisKKyM6IG1pc2MvZnNjay5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FpdDogTm8gbW9yZSBjaGlsZCBwcm9jZXNzPyE/XG4iCittc2dzdHIgIiVzOiDEkeG7o2k6IGtow7RuZyBjw7MgdGnhur9uIHRyw6xuaCBjb24gbuG7r2E/IT9cbiIKKworIzogbWlzYy9mc2NrLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmcuLi4gJXMgZm9yIGRldmljZSAlcyBleGl0ZWQgd2l0aCBzaWduYWwgJWQuXG4iCittc2dzdHIgIkPhuqNuaCBiw6FvLi4uICVzIGNobyB0aGnhur90IGLhu4sgJXMgxJHDoyB0aG/DoXQgduG7m2kgdMOtbiBoaeG7h3UgJWQuXG4iCisKKyM6IG1pc2MvZnNjay5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlczogc3RhdHVzIGlzICV4LCBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIgorbXNnc3RyICIlcyAlczogdHLhuqFuZyB0aMOhaSBsw6AgJXgsIGtow7RuZyBiYW8gZ2nhu50gbsOqbiB44bqjeSByYS5cbiIKKworIzogbWlzYy9mc2NrLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmlzaGVkIHdpdGggJXMgKGV4aXQgc3RhdHVzICVkKVxuIgorbXNnc3RyICIlcyBob8OgbiB04bqldCAodHLhuqFuZyB0aMOhaSB0aG/DoXQgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiVzOiBH4bq3cCBs4buXaSAlZCB0cm9uZyBraGkgdGjhu7FjIGhp4buHbiBmc2NrLiVzIGNobyAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzo3NDIKK21zZ2lkICIiCisiRWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSBmaWxlc3lzdGVtIHR5cGVzIHBhc3NlZCB0byAtdCBtdXN0IGJlIHByZWZpeGVkXG4iCisid2l0aCAnbm8nIG9yICchJy5cbiIKK21zZ3N0ciAiIgorIkhv4bq3YyB04bqldCBj4bqjIGhv4bq3YyBraMO0bmcgY8OzIGtp4buDdSBo4buHIHRo4buRbmcgdOG6rXAgdGluIMSRxrDhu6NjIGfhu61pIHF1YVxuIgorImNobyB0w7l5IGNo4buNbiDigJwtdOKAnSBwaOG6o2kgY8OzIHRp4buBbiB04buRIOKAnG5v4oCdIGhheSDigJwh4oCdLlxuIgorCisjOiBtaXNjL2ZzY2suYzo3NjEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGVzeXN0ZW0gdHlwZXNcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuqVwIHBow6F0IGLhu5kgbmjhu5sgY2hvIGtp4buDdSBo4bq/IHRo4buRbmcgdOG6rXAgdGluXG4iCisKKyM6IG1pc2MvZnNjay5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IHNraXBwaW5nIGJhZCBsaW5lIGluIC9ldGMvZnN0YWI6IGJpbmQgbW91bnQgd2l0aCBub256ZXJvIGZzY2sgcGFzcyAiCisibnVtYmVyXG4iCittc2dzdHIgIiIKKyIlczogxJFhbmcgYuG7jyBxdWEgZMOybmcgc2FpIHRyb25nIOKAnC9ldGMvZnN0YWLigJ06IMSRw7NuZyBr4bq/dCBs4bqvcCB24bubaSBz4buRIGfhu61pIHF1YSAiCisiZnNjayBraMOhYyBz4buRIGtow7RuZ1xuIgorCisjOiBtaXNjL2ZzY2suYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogY2Fubm90IGNoZWNrICVzOiBmc2NrLiVzIG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiBraMO0bmcgdGjhu4Mga2nhu4NtIHRyYSAlczogZnNjay4lcyBraMO0bmcgdMOsbSB0aOG6pXlcbiIKKworIzogbWlzYy9mc2NrLmM6OTY3Cittc2dpZCAiQ2hlY2tpbmcgYWxsIGZpbGUgc3lzdGVtcy5cbiIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSBt4buNaSBo4buHIHRo4buRbmcgdOG6rXAgdGluLlxuIgorCisjOiBtaXNjL2ZzY2suYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIi0td2FpdGluZy0tIChwYXNzICVkKVxuIgorbXNnc3RyICItLcSRYW5nIMSR4bujaS0tIChs4bqnbiBxdWEgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNzgKK21zZ2lkICIiCisiVXNhZ2U6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZmQgXSBdIFstdCBmc3R5cGVdIFtmcy1vcHRpb25zXSBbZmlsZXN5cyAuLi5dXG4iCittc2dzdHIgIiIKKyJDw6FjaCBkw7luZzogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGtp4buDdV9IVFRdIFtmcy1vcHRpb25zXSAiCisiW0hUVCAuLi5dXG4iCisiXG4iCisiSFRUOiBo4buHIHRo4buRbmcgdOG6rXAgdGluXG4iCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiJXM6IHF1w6Egbmhp4buBdSB0aGnhur90IGLhu4tcbiIKKworIzogbWlzYy9mc2NrLmM6MTE1MyBtaXNjL2ZzY2suYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiJXM6IHF1w6Egbmhp4buBdSDEkeG7kWkgc+G7kVxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWYWRsdl0gW2ZpbGVzLi4uXVxuIgorbXNnc3RyICJDw6FjaCBkw7luZzogJXMgWy1SVmFkbHZdIFt04bqtcF90aW4uLi5dXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiVHJvbmcga2hpIMSR4buNYyBjw6FjIGPhu50gdHLDqm4gJXMiCisKKyM6IG1pc2MvbHNhdHRyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJUcm9uZyBraGkgxJHhu41jIHBoacOqbiBi4bqjbiB0csOqbiAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSBbLUMgY2x1c3Rlci1zaXplXVxuIgorIlx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIGlub2RlLXNpemVdIFstSiBqb3VybmFsLW9wdGlvbnNdXG4iCisiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKyJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisiXHRbLWcgYmxvY2tzLXBlci1ncm91cF0gWy1MIHZvbHVtZS1sYWJlbF0gWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG4iCisiXHRbLU8gZmVhdHVyZVssLi4uXV0gWy1yIGZzLXJldmlzaW9uXSBbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXVxuIgorIlx0Wy10IGZzLXR5cGVdIFstVCB1c2FnZS10eXBlIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSBkZXZpY2UgW2Jsb2Nrcy0iCisiY291bnRdXG4iCittc2dzdHIgIiIKKyJDw6FjaCBkw7luZzogJXMgWy1jfC1sIHTDqm5fdOG6rXBfdGluXSBbLWIgY+G7oV9raOG7kWldIFstQyBj4buhX2xpw6puX2N1bmddXG4iCisiXHRbLWkgYnl0ZV9t4buXaV9pbm9kZV0gWy1JIGPhu6FfaW5vZGVdIFstSiB0w7l5X2No4buNbl9uaOG6rXRfa8O9XVxuIgorIlx0Wy1HIGPhu6FfbmjDs20tZmxleF0gWy1OIHPhu5FfbMaw4bujbmdfaW5vZGVdXG4iCisiXHRbLW0gcGjhuqduX3RyxINtX2to4buRaV9kw6BuaF9yacOqbmddIFstbyBIxJBIX3ThuqFvXVxuIgorIlx0Wy1nIHPhu5Eta2jhu5FpX23hu5dpX25ow7NtXSBbLUwgbmjDo25fa2jhu5FpX3Rpbl0gWy1NIHRoxrBfbeG7pWNfbOG6r3BfY3Xhu5FpXVxuIgorIlx0Wy1PIHTDrW5oX27Eg25nWywuLi5dXSBbLXIgYuG6o25fc+G7rWFfxJHhu5VpX0hUVF0gWy1FIHTDuXlfY2jhu41uX23hu59fcuG7mW5nWywuLi5dXVxuIgorIlx0Wy10IGtp4buDdV9IVFRUXSBbLVQga2nhu4N1LWTDuW5nIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSB0aGnhur90X2Lhu4sgIgorIltz4buRX2zGsOG7o25nX2to4buRaV1cbiIKKyJU4burIHZp4bq/dCB04bqvdDpcbiIKKyJcdEhESDogaOG7hyDEkWnhu4F1IGjDoG5oXG4iCisiXHRIVFRUOiBo4buHIHRo4buRbmcgdOG6rXAgdGluXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgY29tbWFuZDogJXNcbiIKK21zZ3N0ciAixJBhbmcgY2jhuqF5IGzhu4duaDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJ1biAnJXMnIgorbXNnc3RyICJ0cm9uZyBraGkgY+G7kSBjaOG6oXkg4oCcJXPigJ0iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYzCittc2dpZCAid2hpbGUgcHJvY2Vzc2luZyBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBwcm9ncmFtIgorbXNnc3RyICJ0cm9uZyBraGkgeOG7rSBsw70gZGFuaCBzw6FjaCBjw6FjIGto4buRaSBzYWkgdOG7qyBjaMawxqFuZyB0csOsbmgiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVkIGluIHByaW1hcnkgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9yIGFyZWEgYmFkLlxuIgorbXNnc3RyICJLaOG7kWkgJWQgc2FpIHRyb25nIHbDuW5nIG3DtCB04bqjIG5ow7NtL3Npw6p1IGto4buRaSBjaMOtbmguXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrcyAldSB0aHJvdWdoICV1IG11c3QgYmUgZ29vZCBpbiBvcmRlciB0byBidWlsZCBhIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJDw6FjIGto4buRaSB0cm9uZyBwaOG6oW0gdmkgJXUgxJHhur9uICV1IHBo4bqjaSBsw6AgdOG7kXRcbiIKKyLEkeG7gyB4w6J5IGThu7FuZyDEkcaw4bujYyBo4buHIHRo4buRbmcgdOG6rXAgdGluLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI5NQorbXNnaWQgIkFib3J0aW5nLi4uLlxuIgorbXNnc3RyICLEkGFuZyBo4buneSBi4buPLi4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB0aGUgYmFja3VwIHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvcnMgYXQgYmxvY2sgJXUgY29udGFpblxuIgorIlx0YmFkIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkPhuqNuaCBiw6FvOiBjw6FjIG3DtCB04bqjIG5ow7NtL3Npw6p1IGto4buRaSBk4buxIHRy4buvIHThuqFpIGto4buRaSAldSBjaOG7qWEga2jhu5FpIHNhaS5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzozMzQKK21zZ2lkICJ3aGlsZSBtYXJraW5nIGJhZCBibG9ja3MgYXMgdXNlZCIKK21zZ3N0ciAidHJvbmcga2hpIMSRw6FuaCBk4bqldSBjw6FjIGto4buRaSBzYWkgxJHDoyDEkcaw4bujYyBkw7luZyIKKworIzogbWlzYy9ta2UyZnMuYzozODYKK21zZ2lkICJXcml0aW5nIGlub2RlIHRhYmxlczogIgorbXNnc3RyICLEkGFuZyBnaGkgY8OhYyBi4bqjbmcgbsO6dCB0aMO0bmcgdGluOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3Qgd3JpdGUgJWQgYmxvY2tzIGluIGlub2RlIHRhYmxlIHN0YXJ0aW5nIGF0ICVsbHU6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJLaMO0bmcgdGjhu4MgZ2hpICVkIGto4buRaSB0cm9uZyBi4bqjbmcgbsO6dCB0aMO0bmcgdGluLCBi4bqvdCDEkeG6p3UgdOG6oWkgJWxsdTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0MjEgbWlzYy9ta2UyZnMuYzoyNDc5IG1pc2MvbWtlMmZzLmM6Mjc2NAorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgImhvw6BuIHThuqV0ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDMyCittc2dpZCAid2hpbGUgY3JlYXRpbmcgcm9vdCBkaXIiCittc2dzdHIgInRyb25nIGtoaSB04bqhbyB0aMawIG3hu6VjIGfhu5FjIgorCisjOiBtaXNjL21rZTJmcy5jOjQzOQorbXNnaWQgIndoaWxlIHJlYWRpbmcgcm9vdCBpbm9kZSIKK21zZ3N0ciAidHJvbmcga2hpIMSR4buNYyBuw7p0IHRow7RuZyB0aW4gZ+G7kWMiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDUxCittc2dpZCAid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIKK21zZ3N0ciAidHJvbmcga2hpIMSR4bq3dCBxdXnhu4FuIHPhu58gaOG7r3UgbsO6dCB0aMO0bmcgdGluIGfhu5FjIgorCisjOiBtaXNjL21rZTJmcy5jOjQ2OQorbXNnaWQgIndoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJ0cm9uZyBraGkgdOG6oW8gL23huqV0K3TDrG0iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDc2Cittc2dpZCAid2hpbGUgbG9va2luZyB1cCAvbG9zdCtmb3VuZCIKK21zZ3N0ciAidHJvbmcga2hpIHRyYSB0w6xtIC9t4bqldCt0w6xtIgorCisjOiBtaXNjL21rZTJmcy5jOjQ4OQorbXNnaWQgIndoaWxlIGV4cGFuZGluZyAvbG9zdCtmb3VuZCIKK21zZ3N0ciAidHJvbmcga2hpIG3hu58gcuG7mW5nIC9t4bqldCt0w6xtIgorCisjOiBtaXNjL21rZTJmcy5jOjUwNAorbXNnaWQgIndoaWxlIHNldHRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICJ0cm9uZyBraGkgxJHhurd0IG7DunQgdGjDtG5nIHRpbiBraOG7kWkgc2FpIgorCisjOiBtaXNjL21rZTJmcy5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJPdXQgb2YgbWVtb3J5IGVyYXNpbmcgc2VjdG9ycyAlZC0lZFxuIgorbXNnc3RyICJI4bq/dCBi4buZIG5o4bubIG7Dqm4geG/DoSBjw6FjIHLDo25oIGdoaSB0cm9uZyBwaOG6oW0gdmkgJWQgxJHhur9uICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrIDA6ICVzXG4iCittc2dzdHIgIkPhuqNuaCBiw6FvOiBraMO0bmcgdGjhu4MgxJHhu41jIGto4buRaSAwOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgZXJhc2Ugc2VjdG9yICVkOiAlc1xuIgorbXNnc3RyICJD4bqjbmggYsOhbzoga2jDtG5nIHRo4buDIHhvw6EgcsOjbmggZ2hpICVkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU3MworbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgInRyb25nIGtoaSBraOG7n2kgdOG6oW8gc2nDqnUga2jhu5FpIG5o4bqtdCBrw70iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgxCittc2dpZCAiWmVyb2luZyBqb3VybmFsIGRldmljZTogIgorbXNnc3RyICLEkGFuZyBnaGkgc+G7kSBraMO0bmcgdGhp4bq/dCBi4buLIG5o4bqtdCBrw706ICIKKworIzogbWlzYy9ta2UyZnMuYzo1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBqb3VybmFsIGRldmljZSAoYmxvY2sgJWxsdSwgY291bnQgJWQpIgorbXNnc3RyICJ0cm9uZyBraGkgbMOgbSBz4buRIGtow7RuZyB0aGnhur90IGLhu4sgbmjhuq10IGvDvSAoa2jhu5FpICVsbHUsIHPhu5EgbMaw4bujbmcgJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjYxMQorbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJ0cm9uZyBraGkgZ2hpIHNpw6p1IGto4buRaSBuaOG6rXQga8O9IgorCisjOiBtaXNjL21rZTJmcy5jOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBmaWxlc3lzdGVtIHdpdGggJWxsdSAlZGsgYmxvY2tzIGFuZCAldSBpbm9kZXNcbiIKK21zZ3N0ciAixJBhbmcgdOG6oW8gaOG7hyB0aOG7kW5nIHThuq1wIHRpbiB24bubaSAlbGx1ICglZGspIGto4buRaSB2w6AgJXUgbsO6dC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndhcm5pbmc6ICVsbHUgYmxvY2tzIHVudXNlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorImPhuqNuaCBiw6FvOiAlbGx1IGto4buRaSBjaMawYSBkw7luZy5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBsYWJlbD0lc1xuIgorbXNnc3RyICJOaMOjbiBo4buHIHRo4buRbmcgdOG6rXAgdGluPSVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIk9TIHR5cGU6ICVzXG4iCittc2dzdHIgIktp4buDdSBIxJBIOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIkPhu6Ega2jhu5FpPSV1IChi4bqjbiBnaGk9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsdXN0ZXIgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJD4buhIGxpw6puIGN1bmc9JXUgKGLhuqNuIGdoaT0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJhZ21lbnQgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJD4buhIMSRb+G6oW49JXUgKGLhuqNuIGdoaT0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RyaWRlPSV1IGJsb2NrcywgU3RyaXBlIHdpZHRoPSV1IGJsb2Nrc1xuIgorbXNnc3RyICJCxrDhu5tjPSV1IGto4buRaSwgxJDhu5kgcuG7mW5nIHPhu41jPSV1IGto4buRaVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY1NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMsICVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiV1IG7DunQgdGjDtG5nIHRpbiwgJWxsdSBraOG7kWlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSBibG9ja3MgKCUyLjJmJSUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlclxuIgorbXNnc3RyICIlbGx1IGto4buRaSAoJTIuMmYlJSkgxJHGsOG7o2MgZMOgbmggcmnDqm5nIGNobyBzacOqdSBuZ8aw4budaSBkw7luZ1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCBkYXRhIGJsb2NrPSV1XG4iCittc2dzdHIgIkto4buRaSBk4buvIGxp4buHdSDEkeG6p3U9JXVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUm9vdCBkaXJlY3Rvcnkgb3duZXI9JXU6JXVcbiIKK21zZ3N0ciAiQ2jhu6cgc+G7nyBo4buvdSB0aMawLW3hu6VjIGfhu5FjPSV1OiV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9JWx1XG4iCittc2dzdHIgIkto4buRaSBo4buHIHRo4buRbmcgdOG6rXAgdGluIHThu5FpIMSRYT0lbHVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBzXG4iCittc2dzdHIgIiV1IG5ow7NtIGto4buRaVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIldSBuaMOzbSBraOG7kWlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgY2x1c3RlcnMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGto4buRaSB0csOqbiBt4buXaSBuaMOzbSwgJXUgbGnDqm4gY3VuZyB0csOqbiBt4buXaSBuaMOzbVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBmcmFnbWVudHMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGto4buRaSB0csOqbiBt4buXaSBuaMOzbSwgJXUgxJFv4bqhbiB0csOqbiBt4buXaSBuaMOzbVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY3OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IG7DunQgdGjDtG5nIHRpbiB0csOqbiBt4buXaSBuaMOzbVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIFVVSUQ6ICVzXG4iCittc2dzdHIgIk3DoyBz4buRIMSR4buLbmggZGFuaCB0aGnhur90IGLhu4sgaOG7hyB0aOG7kW5nIHThuq1wIHRpbjogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2ODkKK21zZ2lkICJTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogIgorbXNnc3RyICJTacOqdSBraOG7kWkgZOG7sSB0cuG7ryDEkcaw4bujYyBj4bqldCBnaeG7ryB0csOqbiBraOG7kWk6ICIKKworIzogbWlzYy9ta2UyZnMuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgJy1PIDY0Yml0J1xuIgorbXNnc3RyICIlcyBj4bqnbiDigJwtTyA2NGJpdOKAnVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgYmVmb3JlICdyZXNpemU9JXUnXG4iCittc2dzdHIgIuKAnCVz4oCdIHBo4bqjaSB0csaw4bubYyDigJxyZXNpemU9JXXigJ1cbiIKKworIzogbWlzYy9ta2UyZnMuYzo3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkZXNjX3NpemU6ICclcydcbiIKK21zZ3N0ciAiZGVzY19zaXplIGtow7RuZyBo4bujcCBs4buHOiDigJwlc+KAnVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9mZnNldDogJXNcbiIKK21zZ3N0ciAiS2hv4bqjbmcgYsO5IGtow7RuZyBo4bujcCBs4buHOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgxMiBtaXNjL3R1bmUyZnMuYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW1wX3VwZGF0ZV9pbnRlcnZhbDogJXNcbiIKK21zZ3N0ciAibW1wX3VwZGF0ZV9pbnRlcnZhbCBraMO0bmcgaOG7o3AgbOG7hzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAjIG9mIGJhY2t1cCBzdXBlcmJsb2NrczogJXNcbiIKK21zZ3N0ciAiU+G7kSBsxrDhu6NuZyBzacOqdSBraOG7kWkgZOG7sSBwaMOybmcga2jDtG5nIGjhu6NwIGzhu4c6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaWRlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiVGhhbSBz4buRIHN0cmlkZSBraMO0bmcgaOG7o3AgbOG7hzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpcGUtd2lkdGggcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJUaGFtIHPhu5Egc3RyaWRlIGtow7RuZyBo4bujcCBs4buHOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlRoYW0gc+G7kSB0aGF5IMSR4buVaSBrw61jaCBj4buhIGtow7RuZyBo4bujcCBs4buHOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg5MworbXNnaWQgIlRoZSByZXNpemUgbWF4aW11bSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgZmlsZXN5c3RlbSBzaXplLlxuIgorbXNnc3RyICIiCisiU+G7kSB0aGF5IMSR4buVaSBrw61jaCBj4buhIHThu5FpIMSRYSBwaOG6o2kgbOG7m24gaMahbiBrw61jaCBj4buhIGPhu6dhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTE3Cittc2dpZCAiT24tbGluZSByZXNpemluZyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiVMOtbmggbsSDbmcgdGhheSDEkeG7lWkga8OtY2ggY+G7oSBt4buZdCBjw6FjaCB0cuG7sWMgdHV54bq/biBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7o1xuIgorInRyw6puIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gYuG6o24gc+G7rWEgxJHhu5VpIDBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5NDQgbWlzYy9ta2UyZnMuYzo5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByb290X293bmVyOiAnJXMnXG4iCittc2dzdHIgInJvb3Rfb3duZXIga2jDtG5nIGjhu6NwIGzhu4c6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcXVvdGF0eXBlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiVGhhbSBz4buRIGtp4buDdSBo4bqhbiBuZ+G6oWNoIGtow7RuZyBo4bujcCBs4buHOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0bW1wX3VwZGF0ZV9pbnRlcnZhbD08aW50ZXJ2YWw+XG4iCisiXHRudW1fYmFja3VwX3NiPTwwfDF8Mj5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBkYXRhIGNodW5rIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUgKiBkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdG9mZnNldD08b2Zmc2V0IHRvIGNyZWF0ZSB0aGUgZmlsZSBzeXN0ZW0+XG4iCisiXHRyZXNpemU9PHJlc2l6ZSBtYXhpbXVtIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0cGFja2VkX21ldGFfYmxvY2tzPTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdGxhenlfam91cm5hbF9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0cm9vdF91aWQ9PHVpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHJvb3RfZ2lkPTxnaWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXNyIE9SIGdycD5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlTDuXkgY2jhu41uIMSRw6MgY2hvIGtow7RuZyDEkcO6bmc6ICVzXG4iCisiXG4iCisiQ8OhYyB0w7l5IGNo4buNbiBt4bufIHLhu5luZyDEkcaw4bujYyBuZ8SDbiBjw6FjaCBi4bqxbmcgZOG6pXUgcGjhuql5LCBjw7MgdGjhu4MgY2jhuqVwIG5o4bqtblxuIgorIlx0xJHhu5FpIHPhu5EgxJHGsOG7o2MgZ8OhbiBi4bqxbmcgZOG6pXUgYuG6sW5nICjigJw94oCdKVxuIgorIlxuIgorIlTDuXkgY2jhu41uIG3hu58gcuG7mW5nIGjhu6NwIGzhu4c6XG4iCisiXHRtbXBfdXBkYXRlX2ludGVydmFsPTxraG/huqNuZyB0aOG7nWkgZ2lhbj5cbiIKKyJcdG51bV9iYWNrdXBfc2I9PDB8MXwyPlxuIgorIlx0c3RyaWRlPTzEkW/huqFuIGThu68gbGnhu4d1IFJBSUQgbeG7l2kgxJHEqWEgdGhlbyBraOG7kWk+XG4iCisiXHRzdHJpcGUtd2lkdGg9PFJBSUQgc3RyaWRlICogY8OhYyDEkcSpYSBk4buvIGxp4buHdSB0aGVvIGto4buRaT5cbiIKKyJcdG9mZnNldD08duG7iyB0csOtIHTGsMahbmcgxJHhu5FpIMSR4buDIHThuqFvIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4+XG4iCisiXHRyZXNpemU9PGvDrWNoIGPhu6EgdGhheSDEkeG7lWkga8OtY2ggY+G7oSB04buRaSDEkWEgdGhlbyBraOG7kWk+XG4iCisiXHRwYWNrZWRfbWV0YV9ibG9ja3M9PDAgxJHhu4MgdOG6r3QsIDEgxJHhu4MgYuG6rXQ+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIMSR4buDIHThuq90LCAxIMSR4buDIGLhuq10PlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgxJHhu4MgdOG6r3QsIDEgxJHhu4MgYuG6rXQ+XG4iCisiXHRyb290X3VpZD08dWlkIGPhu6dhIHRoxrAtbeG7pWMgZ+G7kWM+XG4iCisiXHRyb290X2dpZD08Z2lkIGPhu6dhIHRoxrAtbeG7pWMgPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0ZGlzY2FyZFxuIgorIlx0bm9kaXNjYXJkXG4iCisiXHRxdW90YXR5cGU9PHVzciBIQVkgZ3JwPlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IFJBSUQgc3RyaXBlLXdpZHRoICV1IG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHN0cmlkZSAldS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkPhuqNuaCBiw6FvOiBjaGnhu4F1IHLhu5luZyBz4buNYyAoc3RyaXBlLXdpZHRoKSBSQUlEICV1IGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGLhu5lpIHPhu5EgIgorImTGsMahbmcgY+G7p2EgJXUuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIG1rZTJmcyBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIkfhurdwIGzhu5dpIGPDuiBwaMOhcCB0cm9uZyB04bqtcCB0aW4gY+G6pXUgaMOsbmggbWtlMmZzICglcywgZMOybmcgc+G7kSAlZClcbiIKKyJcdCVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA2OCBtaXNjL3R1bmUyZnMuYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmaWxlc3lzdGVtIG9wdGlvbiBzZXQ6ICVzXG4iCittc2dzdHIgIsSQ4bq3dCB0w7l5IGNo4buNbiBo4buHIHRo4buRbmcgdOG6rXAgdGluIGtow7RuZyBo4bujcCBs4buHOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwODAgbWlzYy90dW5lMmZzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAixJDhurd0IHTDuXkgY2jhu41uIGzhuq9wIGtow7RuZyBo4bujcCBs4buHOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIllvdXIgbWtlMmZzLmNvbmYgZmlsZSBkb2VzIG5vdCBkZWZpbmUgdGhlICVzIGZpbGVzeXN0ZW0gdHlwZS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlThuq1wIHRpbiDigJxta2UyZnMuY29uZuKAnSBj4bunYSBi4bqhbiBraMO0bmcgxJHhu4tuaCBuZ2jEqWEga2nhu4N1IGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gJXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTIyNAorbXNnaWQgIiIKKyJZb3UgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGFuIHVwZGF0ZWQgbWtlMmZzLmNvbmYgZmlsZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlLhuqV0IGPDsyB0aOG7gyBsw6AgYuG6oW4gY+G6p24gcGjhuqNpIGPDoGkgxJHhurd0IG3hu5l0IHThuq1wIHRpbiDigJxta2UyZnMuY29uZuKAnSBt4bubaS5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjI4Cittc2dpZCAiQWJvcnRpbmcuLi5cbiIKK21zZ3N0ciAixJBhbmcgaOG7p3kgYuG7jy4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBmc190eXBlICVzIGlzIG5vdCBkZWZpbmVkIGluIG1rZTJmcy5jb25mXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJD4bqjbmggYsOhbzogZnNfdHlwZSAlcyBraMO0bmcgxJHGsOG7o2MgxJHhu4tuaCBuZ2jEqWEgdHJvbmcgbWtlMmZzLmNvbmZcbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDQ5Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgUEFUSC5cbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuqVwIHBow6F0IGLhu5kgbmjhu5sgY2hvIMSQxq/hu5xORy1E4bqqTlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgaW5pdCBwcm9maWxlIHN1Y2Nlc3NmdWxseSAoZXJyb3I6ICVsZCkuXG4iCittc2dzdHIgIktow7RuZyB0aOG7gyBraOG7n2kgdOG6oW8gcHJvZmlsZSB0aMOgbmggY8O0bmcgKGzhu5dpOiAlbGQpLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9jayBzaXplIC0gJXMiCittc2dzdHIgImPhu6Ega2jhu5FpIGtow7RuZyBo4bujcCBs4buHIOKAlCAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgdXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIKK21zZ3N0ciAiQ+G6o25oIGLDoW86IGvDrWNoIGPhu6Ega2jhu5FpICVkIHbDtCDDrWNoIHRyw6puIHBo4bqnbiBs4bubbiBo4buHIHRo4buRbmcuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNsdXN0ZXIgc2l6ZSAtICVzIgorbXNnc3RyICJj4buhIGxpw6puIGN1bmcga2jDtG5nIGjhu6NwIGzhu4cg4oCUICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NTMKK21zZ2lkICInLVInIGlzIGRlcHJlY2F0ZWQsIHVzZSAnLUUnIGluc3RlYWQiCittc2dzdHIgIuKAnC1S4oCdIGtow7RuZyBkw7luZyBu4buvYSwgaMOjeSB0aGF5IGLhurFuZyDigJwtReKAnSIKKworIzogbWlzYy9ta2UyZnMuYzoxNTY1Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGJsb2NrcyBwZXIgZ3JvdXAiCittc2dzdHIgIlPhu5EgY+G6pW0gY2hvIHPhu5Ega2jhu5FpIHRyw6puIG3hu5dpIG5ow7NtIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NzAKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIG11c3QgYmUgbXVsdGlwbGUgb2YgOCIKK21zZ3N0ciAic+G7kSBraOG7kWkgdHLDqm4gbeG7l2kgbmjDs20gcGjhuqNpIGzDoCBi4buZaSBz4buRIGNobyA4IgorCisjOiBtaXNjL21rZTJmcy5jOjE1NzgKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgZmxleF9iZyBzaXplIgorbXNnc3RyICJLw61jaCBj4buhIGZsZXhfYmcgY8OzIHPhu5Ega2jDtG5nIMSRxrDhu6NjIHBow6lwIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODQKK21zZ2lkICJmbGV4X2JnIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIiCittc2dzdHIgIkvDrWNoIGPhu6EgZmxleF9iZyBwaOG6o2kgbMOgIGzFqXkgdGjhu6thIDIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmbGV4X2JnIHNpemUgKCVsdSkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMl4zMSIKK21zZ3N0ciAiS8OtY2ggY+G7oSBmbGV4X2JnICglbHUpIHBo4bqjaSBuaOG7jyBoxqFuIGhv4bq3YyBi4bqxbmcgMl4zMSIKKworIzogbWlzYy9ta2UyZnMuYzoxNjAwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgcmF0aW8gJXMgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJ04bu3IGzhu4cgbsO6dCB0aMO0bmcgdGluIGtow7RuZyBo4bujcCBs4buHICVzICh0aGnhu4N1ICVkL8SRYSAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAia8OtY2ggY+G7oSBuw7p0IHRow7RuZyB0aW4ga2jDtG5nIGjhu6NwIGzhu4cg4oCUICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MjMKK21zZ2lkICIiCisiV2FybmluZzogLUsgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLiBVc2UgJy1FICIKKyJub2Rpc2NhcmQnIGV4dGVuZGVkIG9wdGlvbiBpbnN0ZWFkIVxuIgorbXNnc3RyICIiCisiQ+G6o25oIGLDoW86IEtow7RuZyB0w6FuIHRow6BuaCB2aeG7h2Mgc+G7rSBk4bulbmcgdHXhu7MgY2jhu41uIC1LIHbDoCBjw7MgbOG6vSBuw7Mgc+G6vSBraMO0bmcgYmFvICIKKyJnaeG7nSDEkcaw4bujYyBz4butIGThu6VuZyBu4buvYS4gU+G7rSBk4bulbmcgdHXhu7MgY2jhu41uIG3hu58gcuG7mW5nIOKAnC1FIG5vZGlzY2FyZOKAnSDEkeG7gyB0aGF5IHRo4bq/IVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MzQKK21zZ2lkICJpbiBtYWxsb2MgZm9yIGJhZF9ibG9ja3NfZmlsZW5hbWUiCittc2dzdHIgIiIKKyJ0cm9uZyBow6BtIGPhuqVwIHBow6F0IGLhu5kgbmjhu5sgbWFsbG9jIGNobyB0w6puIHThuq1wIHRpbiBraOG7kWkgc2FpXG4iCisi4oCcYmFkX2Jsb2Nrc19maWxlbmFtZeKAnSIKKworIzogbWlzYy9ta2UyZnMuYzoxNjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlcyIKK21zZ3N0ciAicGjhuqduIHRyxINtIGto4buRaSDEkcaw4bujYyBkw6BuaCByacOqbmcga2jDtG5nIGjhu6NwIGzhu4cg4oCUICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bSBpbm9kZXMgLSAlcyIKK21zZ3N0ciAic+G7kSAobnVtKSBuw7p0IHRow7RuZyB0aW4gc2FpIOKAlCAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXZpc2lvbiBsZXZlbCAtICVzIgorbXNnc3RyICJj4bqlcCBi4bqjbiBz4butYSDEkeG7lWkgc2FpIOKAlCAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjcmVhdGUgcmV2aXNpb24gJWQiCittc2dzdHIgInRyb25nIGtoaSBj4buRIHThuqFvIMSRaeG7g20gJWQiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY5OAorbXNnaWQgIlRoZSAtdCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICJ0w7l5IGNo4buNbiAtdCBjaOG7iSBz4butIGThu6VuZyBt4buZdCBs4bqnbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzA2Cittc2dpZCAiVGhlIC1UIG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIlTDuXkgY2jhu41uIC1UIGNo4buJIHPhu60gZOG7pW5nIG3hu5l0IGzhuqduIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NTkgbWlzYy9ta2UyZnMuYzoyODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgZGV2aWNlICVzXG4iCittc2dzdHIgInRyb25nIGtoaSBj4buRIG3hu58gdGhp4bq/dCBi4buLIG5o4bqtdCBrw70gJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZGV2IGJsb2Nrc2l6ZSAoJWQpIHNtYWxsZXIgdGhhbiBtaW5pbXVtIGJsb2Nrc2l6ZSAlZFxuIgorbXNnc3RyICJLw61jaCBj4buhIGPhu6dhIHRoaeG6v3QgYuG7iyBuaOG6rXQga8O9ICglZCkgbmjhu48gaMahbiBrw61jaCBj4buhIHThu5FpIHRoaeG7g3UgJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIGpvdXJuYWwgZGV2aWNlJ3MgYmxvY2tzaXplOiAlZFxuIgorbXNnc3RyICLEkGFuZyBkw7luZyBrw61jaCBj4buhIGto4buRaSBj4bunYSB0aGnhur90IGLhu4sgbmjhuq10IGvDvTogJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2tzICclcycgb24gZGV2aWNlICclcyciCittc2dzdHIgImto4buRaSDigJwlc+KAnSBzYWkgdHLDqm4gdGhp4bq/dCBi4buLIOKAnCVz4oCdIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MDQKK21zZ2lkICJmaWxlc3lzdGVtIgorbXNnc3RyICJo4buHIHRo4buRbmcgdOG6rXAgdGluIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MTcgcmVzaXplL21haW4uYzozOTUKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gc2l6ZSIKK21zZ3N0ciAidHJvbmcga2hpIGPhu5EgeMOhYyDEkeG7i25oIGvDrWNoIGPhu6EgY+G7p2EgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODIzCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgeMOhYyDEkeG7i25oIGvDrWNoIGPhu6EgY+G7p2EgdGhp4bq/dCBi4buLO1xuIgorImLhuqFuIGPhuqduIHBo4bqjaSBjaOG7iSDEkeG7i25oIGvDrWNoIGPhu6EgY+G7p2EgaOG7hyB0aOG7kW5nIHThuq1wIHRpblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MzAKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorIkvDrWNoIGPhu6EgY+G7p2EgdGhp4bq/dCBi4buLIMSRxrDhu6NjIHRow7RuZyBiw6FvIGzDoCBz4buRIGtow7RuZy5cbiIKKyJcdFBow6JuIHbDuW5nIGtow7RuZyBo4bujcCBs4buHIMSRxrDhu6NjIMSRxrBhIHJhLFxuIgorIlx0aG/hurdjIGLhuqNuZyBwaMOibiB2w7luZyBraMO0bmcgxJHGsOG7o2MgxJHhu41jIGzhuqFpXG4iCisiXHRzYXUga2hpIGNo4bqheSB0aeG6v24gdHLDrG5oIGZkaXNrLFxuIgorIlx0ZG8gcGjDom4gdsO5bmcgxJHDoyBz4butYSDEkeG7lWkgxJFhbmcgYuG6rW4gdsOgIMSRYW5nIMSRxrDhu6NjIGTDuW5nLlxuIgorIkPDsyBs4bq9IGLhuqFuIGPhuqduIHBo4bqjaSBraOG7n2kgxJHhu5luZyBs4bqhaSBtw6F5IMSR4buDIMSR4buNYyBs4bqhaSBi4bqjbmcgcGjDom4gdsO5bmcuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg0NworbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICJI4buHIHRo4buRbmcgdOG6rXAgdGluIGzhu5tuIGjGoW4ga8OtY2ggY+G7oSB0aGnhur90IGLhu4sgYmnhu4N1IGtp4bq/bi4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg2NworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBmcyB0eXBlcyBsaXN0XG4iCittc2dzdHIgIkzhu5dpIHBow6JuIHTDrWNoIGRhbmggc8OhY2ggY8OhYyBraeG7g3UgaOG7hyB0aOG7kW5nIHThuq1wIHRpblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MDgKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGhhcmR3YXJlIHNlY3RvciBzaXplIgorbXNnc3RyICJ0cm9uZyBraGkgY+G7kSB4w6FjIMSR4buLbmgga8OtY2ggY+G7oSBj4bunYSByw6NuaCBnaGkgcGjhuqduIGPhu6luZyIKKworIzogbWlzYy9ta2UyZnMuYzoxOTE0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBwaHlzaWNhbCBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAidHJvbmcga2hpIGPhu5EgeMOhYyDEkeG7i25oIGvDrWNoIGPhu6EgY+G7p2EgcsOjbmggZ2hpIHbhuq10IGzDvSIKKworIzogbWlzYy9ta2UyZnMuYzoxOTQ2Cittc2dpZCAid2hpbGUgc2V0dGluZyBibG9ja3NpemU7IHRvbyBzbWFsbCBmb3IgZGV2aWNlXG4iCittc2dzdHIgInRyb25nIGtoaSBjw6BpIMSR4bq3dCBrw61jaCBj4buhIGto4buRaSA7IHF1w6Egbmjhu48gxJHhu5FpIHbhu5tpIHRoaeG6v3QgYuG7i1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNwZWNpZmllZCBibG9ja3NpemUgJWQgaXMgbGVzcyB0aGFuIGRldmljZSBwaHlzaWNhbCBzZWN0b3JzaXplICVkXG4iCittc2dzdHIgIiIKKyJD4bqjbmggYsOhbzoga8OtY2ggY+G7oSBraOG7kWkgJWQgxJHDoyBnaGkgcsO1IHbhuqtuIG5o4buPIGjGoW4ga8OtY2ggY+G7oSByw6NuaCBnaGkgduG6rXQgbMO9IGPhu6dhICIKKyJ0aGnhur90IGLhu4sgJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogU2l6ZSBvZiBkZXZpY2UgKDB4JWxseCBibG9ja3MpICVzIHRvbyBiaWcgdG8gYmUgZXhwcmVzc2VkXG4iCisiXHRpbiAzMiBiaXRzIHVzaW5nIGEgYmxvY2tzaXplIG9mICVkLlxuIgorbXNnc3RyICIiCisiJXM6IHRoaeG6v3QgYuG7iyAoMHglbGx4IGJsb2NrcykgJXMgY8OzIGvDrWNoIGPhu6EgcXXDoSBs4bubbiDEkeG7gyBiaeG7g3UgZGnhu4VuIHRoZW8gMzIgYml0XG4iCisiXHRkw7luZyBrw61jaCBj4buhIGto4buRaSBj4bunYSAlZC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTkxCittc2dpZCAiZnNfdHlwZXMgZm9yIG1rZTJmcy5jb25mIHJlc29sdXRpb246ICIKK21zZ3N0ciAiZnNfdHlwZXMgxJHhu4MgZ2nhuqNpIHF1eeG6v3QgbWtlMmZzLmNvbmY6ICIKKworIzogbWlzYy9ta2UyZnMuYzoxOTk4Cittc2dpZCAiRmlsZXN5c3RlbSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiVMOtbmggbsSDbmcgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyB0csOqbiBo4buHIHRo4buRbmcgdOG6rXAgdGluXG4iCisiYuG6o24gc+G7rWEgxJHhu5VpIDBcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDA2Cittc2dpZCAiU3BhcnNlIHN1cGVyYmxvY2tzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKyJUw61uaCBuxINuZyBzacOqdSBraOG7kWkgdGjGsGEgdGjhu5t0IGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujXG4iCisidHLDqm4gaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBi4bqjbiBz4butYSDEkeG7lWkgMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMTgKK21zZ2lkICJKb3VybmFscyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiVMOtbmggbsSDbmcgbmjhuq10IGvDvSBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyB0csOqbiBo4buHIHRo4buRbmcgdOG6rXAgdGluXG4iCisiYuG6o24gc+G7rWEgxJHhu5VpIDBcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDMyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlbGYiCittc2dzdHIgInBo4bqnbiB0csSDbSBraOG7kWkgxJHGsOG7o2MgZMOgbmggcmnDqm5nIGtow7RuZyBo4bujcCBs4buHIC0lbGYiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA0OQorbXNnaWQgIiIKKyJFeHRlbnRzIE1VU1QgYmUgZW5hYmxlZCBmb3IgYSA2NC1iaXQgZmlsZXN5c3RlbS4gIFBhc3MgLU8gZXh0ZW50cyB0byAiCisicmVjdGlmeS5cbiIKK21zZ3N0ciAiIgorIlBo4bqnbiBt4bufIHLhu5luZyBQSOG6okkgxJHGsOG7o2MgYuG6rXQgY2hvIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gNjQtYml0LiBDaHV54buDbiAtTyAiCisicGjhuqduX23hu59fcuG7mW5nIMSR4buDIG7huq9uIGNo4buJbmguXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA2OQorbXNnaWQgIlRoZSBjbHVzdGVyIHNpemUgbWF5IG5vdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGJsb2NrIHNpemUuXG4iCittc2dzdHIgIkvDrWNoIHRoxrDhu5tjIGxpw6puIGN1bmcga2jDtG5nIHRo4buDIG5o4buPIGjGoW4ga8OtY2ggY+G7oSBraOG7kWkuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA3NQorbXNnaWQgInNwZWNpZnlpbmcgYSBjbHVzdGVyIHNpemUgcmVxdWlyZXMgdGhlIGJpZ2FsbG9jIGZlYXR1cmUiCittc2dzdHIgImNo4buJIMSR4buLbmgga8OtY2ggdGjGsOG7m2MgbGnDqm4gY3VuZyBj4bqnbiDEkeG6t2MgdMOtbmggYmlnYWxsb2MiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBVbmFibGUgdG8gZ2V0IGRldmljZSBnZW9tZXRyeSBmb3IgJXNcbiIKK21zZ3N0ciAiY+G6o25oIGLDoW86IGtow7RuZyB0aOG7gyBs4bqleSBk4bqhbmcgaMOsbmggdGhp4bq/dCBi4buLIGNobyAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxpZ25tZW50IGlzIG9mZnNldCBieSAlbHUgYnl0ZXMuXG4iCittc2dzdHIgIktob+G6o25nIHPhuq9wIGjDoG5nICVzIGLhu4sgYsO5IHRoZW8gJWx1IGJ5dGUuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBtYXkgcmVzdWx0IGluIHZlcnkgcG9vciBwZXJmb3JtYW5jZSwgKHJlKS1wYXJ0aXRpb25pbmcgc3VnZ2VzdGVkLlxuIgorbXNnc3RyICIiCisiVHLGsOG7nW5nIGjhu6NwIG7DoHkgY8OzIHRo4buDIGfDonkgcmEgaGnhu4d1IHN14bqldCBy4bqldCB54bq/dSB0aMOsIGtodXnDqm4gYuG6oW4gcGjDom4gdsO5bmcgIgorIihs4bqhaSkuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCkiCittc2dzdHIgIkto4buRaSAlZC1ieXRlIHF1w6EgbOG7m24gxJHhu5FpIHbhu5tpIGjhu4cgdGjhu5FuZyAodOG7kWkgxJFhICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiAlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCksIGZvcmNlZCB0byBjb250aW51ZVxuIgorbXNnc3RyICIiCisiQ+G6o25oIGLDoW86IGto4buRaSAlZC1ieXRlIHF1w6EgbOG7m24gxJHhu5FpIHbhu5tpIGjhu4cgdGjhu5FuZyAodOG7kWkgxJFhICVkKVxuIgorIm7Dqm4gYuG7iyBideG7mWMgdGnhur9wIHThu6VjXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE4MAorbXNnaWQgIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0IGV4dGVudHMgZmVhdHVyZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGjhu5cgdHLhu6MgxJHhurdjIHTDrW5oIGJpZ2FsbG9jIG3DoCBraMO0bmcgY8OzIHBo4bqnbiBt4bufICIKKworIzogbWlzYy9ta2UyZnMuYzoyMTg3Cittc2dpZCAiIgorIlRoZSByZXNpemVfaW5vZGUgYW5kIG1ldGFfYmcgZmVhdHVyZXMgYXJlIG5vdCBjb21wYXRpYmxlLlxuIgorIlRoZXkgY2FuIG5vdCBiZSBib3RoIGVuYWJsZWQgc2ltdWx0YW5lb3VzbHkuXG4iCittc2dzdHIgIiIKKyJIYWkgdMOtbmggbsSDbmcgdGhheSDEkeG7lWkga8OtY2ggY+G7oSBuw7p0IChyZXNpemVfaW5vZGUpIHbDoCBzacOqdSBu4buBbiAobWV0YV9iZykgIgorImtow7RuZyB0xrDGoW5nIHRow61jaCB24bubaSBuaGF1LlxuIgorIkRvIMSRw7Mga2jDtG5nIHRo4buDIGhp4buHdSBs4buxYyDEkeG7k25nIHRo4budaSBj4bqjIGhhaS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTk2Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBiaWdhbGxvYyBmZWF0dXJlIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50XG4iCisiU2VlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0JpZ2FsbG9jIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJD4bqjbmggYsOhbzogxJHhurdjIHTDrW5oIHBow6JuLWLhu5UtbOG7m24gduG6q24gxJFhbmcgdHJvbmcgcXXDoSB0csOsbmggcGjDoXQgdHJp4buDblxuIgorIlhlbSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYyDEkeG7gyBiaeG6v3QgY2hpIHRp4bq/dFxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMDcKK21zZ2lkICJyZXNlcnZlZCBvbmxpbmUgcmVzaXplIGJsb2NrcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorImto4buRaSB0aGF5IMSR4buVaSBrw61jaCBj4buhIHRy4buxYyB0dXnhur9uIMSRxrDhu6NjIGTDoG5oIHJpw6puZyBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7o1xuIgorInRyw6puIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4ga2jDtG5nIHRoxrBhIHRo4bubdCIKKworIzogbWlzYy9ta2UyZnMuYzoyMjE2Cittc2dpZCAiYmxvY2tzIHBlciBncm91cCBjb3VudCBvdXQgb2YgcmFuZ2UiCittc2dzdHIgInPhu5Ega2jhu5FpIHRyw6puIG3hu5dpIG5ow7NtIOG7nyBuZ2/DoGkgcGjhuqFtIHZpIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNDAKK21zZ2lkICJGbGV4X2JnIGZlYXR1cmUgbm90IGVuYWJsZWQsIHNvIGZsZXhfYmcgc2l6ZSBtYXkgbm90IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiQ2jGsGEgaGnhu4d1IGzhu7FjIHTDrW5oIG7Eg25nIEZsZXhfYmcgdGjDrCBraMO0bmcgdGjhu4MgZ2hpIHLDtSBrw61jaCBj4buhIEZsZXhfYmciCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgJWQgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJrw61jaCBj4buhIG7DunQgdGjDtG5nIHRpbiBraMO0bmcgaOG7o3AgbOG7hyAlZCAodGhp4buDdSAlZC/EkWEgJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgcmFpc2UgaW5vZGUgcmF0aW8/IgorbXNnc3RyICJxdcOhIG5oaeG7gXUgbsO6dCB0aMO0bmcgdGluICglbGx1KSwgdMSDbmcgdOG7tyBs4buHIG7DunQgdGjDtG5nIHRpbiBraMO0bmc/IgorCisjOiBtaXNjL21rZTJmcy5jOjIyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgc3BlY2lmeSA8IDJeMzIgaW5vZGVzIgorbXNnc3RyICJxdcOhIG5oaeG7gXUgbsO6dCB0aMO0bmcgdGluICglbGx1KSwgY2jhu4kgcmEgPDLCs8KyIG7DunQgdGjDtG5nIHRpbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbm9kZV9zaXplICgldSkgKiBpbm9kZXNfY291bnQgKCV1KSB0b28gYmlnIGZvciBhXG4iCisiXHRmaWxlc3lzdGVtIHdpdGggJWxsdSBibG9ja3MsIHNwZWNpZnkgaGlnaGVyIGlub2RlX3JhdGlvICgtaSlcbiIKKyJcdG9yIGxvd2VyIGlub2RlIGNvdW50ICgtTikuXG4iCittc2dzdHIgIiIKKyJj4buhX27DunRfdGjDtG5nX3RpbiAoJXUpICogc+G7kV9sxrDhu6NuZ19uw7p0X3Row7RuZ190aW4gKCV1KSBxdcOhIGzhu5tuXG4iCisiXHRjaG8gaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBjw7MgJWxsdSBraOG7kWksIGjDo3kgY2jhu4kgxJHhu4tuaFxuIgorIlx0dOG7t19s4buHX27DunRfdGjDtG5nX3RpbiAoLWkpIGNhbyBoxqFuIGhheSBz4buRIGzGsOG7o25nIG7DunQgdGjDtG5nIHRpblxuIgorIigtTikgdGjhuqVwIGjGoW5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJPdmVyd3JpdGluZyBleGlzdGluZyBmaWxlc3lzdGVtOyB0aGlzIGNhbiBiZSB1bmRvbmUgdXNpbmcgdGhlIGNvbW1hbmQ6XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisixJBhbmcgZ2hpIMSRw6ggbMOqbiBo4buHIHRo4buRbmcgdOG6rXAgdGluIMSRw6MgY8OzIDsgY8OzIHRo4buDIGzDoG0gdmnhu4djIG7DoHkgZMO5bmcgY8OidSBs4buHbmg6XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI0MzIKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc2V0dXAgdW5kbyBmaWxlXG4iCittc2dzdHIgInRyb25nIGtoaSBj4buRIGPDoGkgxJHhurd0IHThuq1wIHRpbiB1bmRvXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ1OAorbXNnaWQgIkRpc2NhcmRpbmcgZGV2aWNlIGJsb2NrczogIgorbXNnc3RyICJC4buPIHF1YSBraOG7kWkgdGhp4bq/dCBi4buLOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ3NAorbXNnaWQgImZhaWxlZCAtICIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kgLSAiCisKKyMgSXRlbSBpbiB0aGUgbWFpbiBtZW51IHRvIHNlbGVjdCB0aGlzIHBhY2thZ2UKKyM6IG1pc2MvbWtlMmZzLmM6MjU5NgorbXNnaWQgIndoaWxlIHNldHRpbmcgdXAgc3VwZXJibG9jayIKK21zZ3N0ciAidHJvbmcga2hpIGPDoGkgxJHhurd0IHNpw6p1IGto4buRaSIKKworIzogbWlzYy9ta2UyZnMuYzoyNjEyCittc2dpZCAiRGlzY2FyZCBzdWNjZWVkZWQgYW5kIHdpbGwgcmV0dXJuIDBzIC0gc2tpcHBpbmcgaW5vZGUgdGFibGUgd2lwZVxuIgorbXNnc3RyICJMb+G6oWkgYuG7jyB0aMOgbmggY8O0bmcgdsOgIHPhur0gdHLhuqMgduG7gSAwIC0gYuG7jyBxdWEgeG/DoSBi4bqjbmcgbsO6dFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcyAtICVzIgorbXNnc3RyICJo4buHIMSRaeG7gXUgaMOgbmggbOG6oSDigJQgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc1MgorbXNnaWQgIkFsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAiCittc2dzdHIgIlBow6JuIGLhu5UgYuG6o25nIG5ow7NtOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2MAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBhbGxvY2F0ZSBmaWxlc3lzdGVtIHRhYmxlcyIKK21zZ3N0ciAidHJvbmcga2hpIGPhu5EgY+G6pXAgcGjDoXQgY8OhYyBi4bqjbmcgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNzY5Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgY29udmVydGluZyBzdWJjbHVzdGVyIGJpdG1hcCIKK21zZ3N0ciAiIgorIlxuIgorIlx0dHJvbmcga2hpIGNodXnhu4NuIMSR4buVaSBt4bqjbmcg4bqjbmggbGnDqm4gY3VuZyBjb24iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGJsb2NrICVsbHUgYXQgZW5kIG9mIGZpbGVzeXN0ZW0iCittc2dzdHIgInRyb25nIGtoaSDEkWnhu4FuIHPhu5Ega2jDtG5nIGto4buRaSAlbGx1IHThuqFpIGvhur90IHRow7pjIGPhu6dhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgyNgorbXNnaWQgIndoaWxlIHJlc2VydmluZyBibG9ja3MgZm9yIG9ubGluZSByZXNpemUiCittc2dzdHIgInRyb25nIGtoaSBkw6BuaCByacOqbmcgY8OhYyBraOG7kWkgxJHhu4MgdGhheSDEkeG7lWkga8OtY2ggY+G7oSB0cuG7sWMgdHV54bq/biIKKworIzogbWlzYy9ta2UyZnMuYzoyODM4IG1pc2MvdHVuZTJmcy5jOjcxMgorbXNnaWQgImpvdXJuYWwiCittc2dzdHIgIm5o4bqtdCBrw70iCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgam91cm5hbCB0byBkZXZpY2UgJXM6ICIKK21zZ3N0ciAixJBhbmcgdGjDqm0gbmjhuq10IGvDvSB2w6BvIHRoaeG6v3QgYuG7iyAlczogIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorIlxuIgorInRyb25nIGtoaSBj4buRIHRow6ptIG5o4bqtdCBrw70gdsOgbyB0aGnhur90IGLhu4sgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg2MiBtaXNjL21rZTJmcy5jOjI4OTMgbWlzYy90dW5lMmZzLmM6NzQxIG1pc2MvdHVuZTJmcy5jOjc2MAorbXNnaWQgImRvbmVcbiIKK21zZ3N0ciAiaG/DoG4gdOG6pXRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODY5Cittc2dpZCAiU2tpcHBpbmcgam91cm5hbCBjcmVhdGlvbiBpbiBzdXBlci1vbmx5IG1vZGVcbiIKK21zZ3N0ciAixJBhbmcgYuG7jyBxdWEgYsaw4bubYyB04bqhbyBuaOG6rXQga8O9IHRyb25nIGNo4bq/IMSR4buZIGNo4buJIHNpw6p1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICgldSBibG9ja3MpOiAiCittc2dzdHIgIsSQYW5nIHThuqFvIG5o4bqtdCBrw70gKCV1IGto4buRaSk6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyODg5Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIgorbXNnc3RyICIiCisiXG4iCisidHJvbmcga2hpIGPhu5EgdOG6oW8gbmjhuq10IGvDvSIKKworIzogbWlzYy9ta2UyZnMuYzoyOTAxIG1pc2MvdHVuZTJmcy5jOjUxNgorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisiXG4iCisiTOG7l2kga2hpIGLhuq10IMSR4bq3YyB0w61uaCBi4bqjbyB24buHIMSRYSBn4bqvbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaXMgZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZCBzZWNvbmRzLlxuIgorbXNnc3RyICJC4bqjbyB24buHIMSRYSBn4bqvbiDEkcaw4bujYyBi4bqtdCB24bubaSBuaOG7i3AgY+G6rXAgbmjhuq10IGzDoCAlZCBnacOieS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTIzCittc2dpZCAiV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAiCittc2dzdHIgIsSQYW5nIGdoaSBzacOqdSBraOG7kWkgdsOgIHRow7RuZyB0aW4ga+G6vyB0b8OhbiBo4buHIHRo4buRbmcgdOG6rXAgdGluOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkzMAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nLCBoYWQgdHJvdWJsZSB3cml0aW5nIG91dCBzdXBlcmJsb2Nrcy4iCittc2dzdHIgIiIKKyJcbiIKKyJD4bqjbmggYsOhbzogZ+G6t3Aga2jDsyBraMSDbiB0cm9uZyB2aeG7h2MgZ2hpIHJhIGPDoWMgc2nDqnUga2jhu5FpLiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTMyCittc2dpZCAiIgorImRvbmVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImhvw6BuIHThuqV0XG4iCisiXG4iCisKKyM6IG1pc2MvbWtsb3N0K2ZvdW5kLmM6NTAKK21zZ2lkICJVc2FnZTogbWtsb3N0K2ZvdW5kXG4iCittc2dzdHIgIkPDoWNoIGTDuW5nOiBta2xvc3QrZm91bmRcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogICVzIGRldmljZS4uLlxuIgorIlxuIgorIlByaW50cyBvdXQgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBnaXZlbiBkZXZpY2UuXG4iCisiRm9yIGV4YW1wbGU6ICVzIC9kZXYvaGRhXG4iCisiXG4iCittc2dzdHIgIiIKKyJDw6FjaCBkw7luZzogICVzIHRoaeG6v3QgYuG7iy4uLlxuIgorIlxuIgorIkluIHJhIHRow7RuZyB0aW4gduG7gSBwaMOibiB2w7luZyDEkeG7kWkgduG7m2kgbeG7l2kgdGhp4bq/dCBi4buLIMSRxrDhu6NjIGNoby5cbiIKKyJWw60gZOG7pTogJXMgL2Rldi9oZGFcbiIKKyJcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIG3hu58gJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBnZW9tZXRyeSBvZiAlczogJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleSBk4bqhbmcgaMOsbmggY+G7p2EgJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBzaXplIG9mICVzOiAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzhuqV5IGvDrWNoIGPhu6EgY+G7p2EgJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iCittc2dzdHIgIiVzOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIMSR4bqndT0lOGQgY+G7oT0lOGx1IGN14buRaT0lOGRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEyCittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIkjDo3kgY2jhuqF5IHRp4bq/biB0csOsbmggZTJmc2NrIHRyw6puIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYyBtYXhfbW91bnRzX2NvdW50XSBbLWUgZXJyb3JzX2JlaGF2aW9yXSBbLWcgZ3JvdXBdXG4iCisiXHRbLWkgaW50ZXJ2YWxbZHxtfHddXSBbLWpdIFstSiBqb3VybmFsX29wdGlvbnNdIFstbF1cbiIKKyJcdFstbSByZXNlcnZlZF9ibG9ja3NfcGVyY2VudF0gWy1vIFteXW1vdW50X29wdGlvbnNbLC4uLl1dIFstcCAiCisibW1wX3VwZGF0ZV9pbnRlcnZhbF1cbiIKKyJcdFstciByZXNlcnZlZF9ibG9ja3NfY291bnRdIFstdSB1c2VyXSBbLUMgbW91bnRfY291bnRdIFstTCB2b2x1bWVfbGFiZWxdXG4iCisiXHRbLU0gbGFzdF9tb3VudGVkX2Rpcl0gWy1PIFteXWZlYXR1cmVbLC4uLl1dXG4iCisiXHRbLVEgcXVvdGFfb3B0aW9uc11cbiIKKyJcdFstRSBleHRlbmRlZC1vcHRpb25bLC4uLl1dIFstVCBsYXN0X2NoZWNrX3RpbWVdIFstVSBVVUlEXVxuIgorIlx0WyAtSSBuZXdfaW5vZGVfc2l6ZSBdIGRldmljZVxuIgorbXNnc3RyICIiCisiQ8OhY2ggZMO5bmc6ICVzIFstYyBz4buRX8SR4bq/bV9s4bqvcF904buRaV/EkWFdIFstZSDhu6luZ1944butX2zhu5dpXSBbLWcgbmjDs21dXG4iCisiXHRbLWkga2hv4bqjbmdbZHxtfHddXSBbLWpdIFstSiB0w7l5X2No4buNbl9uaOG6rXRfa8O9XSBbLWxdXG4iCisiXHRbLW0gcGjhuqduX3RyxINtX2to4buRaV9kw6BuaF9yacOqbmddIFstbyBbXl10w7l5X2No4buNbl9s4bqvcFssLi4uXV0gWy1wICIKKyJuaOG7i3BfY+G6rXBfbmjhuq10X21tcF1cbiIKKyJcdFstciBz4buRX8SR4bq/bV9raOG7kWlfZMOgbmhfcmnDqm5nXSBbLXUgbmfGsOG7nWlfZMO5bmddIFstQyBz4buRX8SR4bq/bV9s4bqvcF0gWy1MICIKKyJuaMOjbl9waMOibl92w7luZ11cbiIKKyJcdFstTSB0aMawX23hu6VjX2zhuq9wX2N14buRaV0gWy1PIFteXXTDrW5oX27Eg25nWywuLi5dXVxuIgorIlx0Wy1RIHTDuXlfY2jhu41uX3F1b3RhXVxuIgorIlx0Wy1FIHTDuXlfY2jhu41uX23hu59fcuG7mW5nWywuLi5dIFstVCBnaeG7nV9raeG7g21fdHJhX2N14buRaV0gWy1VIFVVSURdXG4iCisiXHRbLUkgY+G7oV9uw7p0X23hu5tpXSB0aGnhur90X2Lhu4tcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzCittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCFcbiIKK21zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IHNpw6p1IGto4buRaSBuaOG6rXQga8O9ICFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjYxCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAidHJvbmcga2hpIGPhu5EgbeG7nyBuaOG6rXQga8O9IGLDqm4gbmdvw6BpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjcgbWlzYy90dW5lMmZzLmM6MTk2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiJXMga2jDtG5nIHBo4bqjaSB0aGnhur90IGLhu4sgbmjhuq10IGvDvS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6Mjc3IG1pc2MvdHVuZTJmcy5jOjE5NzQKK21zZ2lkICJGaWxlc3lzdGVtJ3MgVVVJRCBub3QgZm91bmQgb24gam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBVVUlEIGPhu6dhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gdHLDqm4gdGhp4bq/dCBi4buLIG5o4bqtdCBrw70uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMwMQorbXNnaWQgIiIKKyJDYW5ub3QgbG9jYXRlIGpvdXJuYWwgZGV2aWNlLiBJdCB3YXMgTk9UIHJlbW92ZWRcbiIKKyJVc2UgLWYgb3B0aW9uIHRvIHJlbW92ZSBtaXNzaW5nIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIMSR4buLbmggxJHGsOG7o2MgdGhp4bq/dCBi4buLIGpvdXJuYWwuIE7DsyDEkcOjIEtIw5RORyBi4buLIGfhu6EgYuG7j1xuIgorIlPhu60gZOG7pW5nIHR14buzIGNo4buNbiAtZiDEkeG7gyBn4buhIGLhu48gdGhp4bq/dCBi4buLIGpvdXJuYWwgYuG7iyB0aGnhur91LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMTAKK21zZ2lkICJKb3VybmFsIHJlbW92ZWRcbiIKK21zZ3N0ciAiTmjhuq10IGvDvSDEkcOjIGfhu6EgYuG7j1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNTQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgInRyb25nIGtoaSDEkeG7jWMgY8OhYyBt4bqjbmcg4bqjbmgiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM2MgorbXNnaWQgIndoaWxlIGNsZWFyaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInRyb25nIGtoaSB4b8OhIHPhuqFjaCBuw7p0IHRow7RuZyB0aW4gbmjhuq10IGvDvSIKKworIzogbWlzYy90dW5lMmZzLmM6MzczCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJ0cm9uZyBraGkgZ2hpIG7DunQgdGjDtG5nIHRpbiBuaOG6rXQga8O9IgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MDUgbWlzYy90dW5lMmZzLmM6NDE4Cittc2dpZCAiKGFuZCByZWJvb3QgYWZ0ZXJ3YXJkcyEpXG4iCittc2dzdHIgIih2w6Aga2jhu59pIMSR4buZbmcgbOG6oWkgc2F1ISlcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyaW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIlTDrW5oIG7Eg25nIHhvw6Egc+G6oWNoIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4g4oCcJXPigJ0ga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIlTDrW5oIG7Eg25nIMSR4bq3dCBo4buHIHRo4buRbmcgdOG6rXAgdGluIOKAnCVz4oCdIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NjcKK21zZ2lkICIiCisiVGhlIGhhc19qb3VybmFsIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiVMOtbmggbsSDbmcgY8OzIG5o4bqtdCBrw70gKGhhc19qb3VybmFsKSBjw7MgdGjhu4MgxJHGsOG7o2MgeG/DoSBz4bqhY2hcbiIKKyJjaOG7iSBraGkgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiDEkcaw4bujYyB0aMOhbyBn4bqvbiBr4bq/dFxuIgorImhheSDEkcaw4bujYyBn4bqvbiBr4bq/dCBt4buZdCBjw6FjaCBjaOG7iSDEkeG7jWMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ3NgorbXNnaWQgIiIKKyJUaGUgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQuICBQbGVhc2UgcnVuIGUyZnNjayBiZWZvcmUgY2xlYXJpbmdcbiIKKyJ0aGUgaGFzX2pvdXJuYWwgZmxhZy5cbiIKK21zZ3N0ciAiIgorIsSQ4bq3dCBj4budIGPhuqduIHRoaeG6v3QgcGjhu6VjIGjhu5NpIChuZWVkc19yZWNvdmVyeSkuXG4iCisiSMOjeSBjaOG6oXkgdGnhur9uIHRyw6xuaCBlMmZzY2sgdHLGsOG7m2Mga2hpIHhvw6Egc+G6oWNoIGPhu50gY8OzIG5o4bqtdCBrw70gKGhhc19qb3VybmFsKS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDk1Cittc2dpZCAiIgorIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICdzcGFyc2Vfc3VwZXInIG5vdCBzdXBwb3J0ZWRcbiIKKyJmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgbWV0YV9iZyBmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKyJLaMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyBjaOG7qWMgbsSDbmcg4oCcc3BhcnNlX3N1cGVy4oCdXG4iCisiY2hvIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gduG7m2kgxJHhurdjIHTDrW5oIG1ldGFfYmcgxJHGsOG7o2MgYuG6rXQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUwOAorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbid0XG4iCisiYmUgc2V0IGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgb3JcbiIKKyJyZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJUw61uaCBuxINuZyBi4bqjbyB24buHIGNo4buRbmcgxJFhIGfhuq9uIGtow7RuZyB0aOG7g1xuIgorIsSR4bq3dCDEkcaw4bujYyBu4bq/dSBo4buHIHRo4buRbmcgdOG6rXAgdGluIMSRw6MgxJHGsOG7o2MgZ+G6r24ga+G6v3RcbiIKKyJoYXkgY2jhu4kgY2hvIMSR4buNYy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIsSQ4bq3YyB0w61uaCBr4bu5IHRodeG6rXQgYuG6o28gduG7hyDEkWEgZ+G6r24gxJHDoyBi4bqtdCB24bubaSBuaOG7i3AgY+G6rXAgbmjhuq10IGzDoCAlZCBnacOieS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTM1Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2Fubm90XG4iCisiYmUgZGlzYWJsZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmVhZG9ubHkuXG4iCittc2dzdHIgIiIKKyLEkOG6t2MgdMOtbmgga+G7uSB0aHXhuq10IGLhuqNvIHbhu4cgxJFhIGfhuq9uIGtow7RuZyB0aOG7g1xuIgorIsSRxrDhu6NjIHThuq90IG7hur91IGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY2jhu4kgxJHhu41jLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1NDMKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIGJpdG1hcHNcbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buNYyBt4bqjbmdcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hZ2ljIG51bWJlciBpbiBNTVAgYmxvY2sgZG9lcyBub3QgbWF0Y2guIGV4cGVjdGVkOiAleCwgYWN0dWFsOiAleFxuIgorbXNnc3RyICJT4buRIG3huqd1IG5oaeG7h20gdHJvbmcga2jhu5FpIE1NUCBraMO0bmcga2jhu5twLiBtb25nIGNo4budOiAleCwgdGjhu7FjIHThur86ICV4XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1NworbXNnaWQgIndoaWxlIHJlYWRpbmcgTU1QIGJsb2NrLiIKK21zZ3N0ciAidHJvbmcga2hpIMSR4buNYyBraOG7kWkgTU1QLiIKKworIzogbWlzYy90dW5lMmZzLmM6NTg5Cittc2dpZCAiIgorIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgY2F1c2UgdGhlIHRoZSBmaWxlc3lzdGVtIHRvIGJlXG4iCisiaW5jb25zaXN0ZW50LlxuIgorbXNnc3RyICJH4buhIGLhu48gY+G7nSBmbGV4X2JnIHRow6wgZ8OieSByYSBo4buHIHRo4buRbmcgdOG6rXAgdGluIGtow7RuZyB0aOG7kW5nIG5o4bqldC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjAwCittc2dpZCAiIgorIlRoZSBodWdlX2ZpbGUgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJUw61uaCBuxINuZyB04bqtcCB0aW4gcuG6pXQgbOG7m24gKGh1Z2VfZmlsZSkgY8OzIHRo4buDIMSRxrDhu6NjIHhvw6Egc+G6oWNoXG4iCisiY2jhu4kga2hpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gxJHGsOG7o2MgdGjDoW8gZ+G6r24ga+G6v3RcbiIKKyJoYXkgxJHGsOG7o2MgZ+G6r24ga+G6v3QgbeG7mXQgY8OhY2ggY2jhu4kgxJHhu41jLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NjAKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogJ15xdW90YScgb3B0aW9uIG92ZXJyaWRlcyAnLVEnYXJndW1lbnRzLlxuIgorbXNnc3RyICIiCisiXG4iCisiQ+G6o25oIGLDoW86IHR14buzIGNo4buNbiDigJxecXVvdGHigJ0gc+G6vSBkw6ggbMOqbiDEkeG7kWkgc+G7kSDigJwtUeKAnS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzA1Cittc2dpZCAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgYSBqb3VybmFsLlxuIgorbXNnc3RyICJI4buHIHRo4buRbmcgdOG6rXAgdGluIMSRw6MgY8OzIG5o4bqtdCBrw70uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIG9uICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJ0cm9uZyBraGkgY+G7kSBt4bufIG5o4bqtdCBrw70gdHLDqm4gJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgb24gZGV2aWNlICVzOiAiCittc2dzdHIgIsSQYW5nIHThuqFvIG5o4bqtdCBrw70gdHLDqm4gdGhp4bq/dCBi4buLICVzOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBhZGRpbmcgZmlsZXN5c3RlbSB0byBqb3VybmFsIG9uICVzIgorbXNnc3RyICJ0cm9uZyBraGkgdGjDqm0gaOG7hyB0aOG7kW5nIHThuq1wIHRpbiB2w6BvIG5o4bqtdCBrw70gdHLDqm4gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc0MworbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgaW5vZGU6ICIKK21zZ3N0ciAixJBhbmcgdOG6oW8gbsO6dCB0aMO0bmcgdGluIG5o4bqtdCBrw706ICIKKworIzogbWlzYy90dW5lMmZzLmM6NzU3Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiCittc2dzdHIgIiIKKyJcbiIKKyJ0cm9uZyBraGkgY+G7kSB04bqhbyB04bqtcCB0aW4gbmjhuq10IGvDvSIKKworIzogbWlzYy90dW5lMmZzLmM6ODMyCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIHF1b3RhIG9wdGlvbnMhXG4iCittc2dzdHIgIktow7RuZyB0aOG7gyBj4bqlcCBwaMOhdCBi4buZIG5o4bubIMSR4buDIHBow6JuIHTDoWNoIGPDoWMgdMO5eSBjaOG7jW4gaOG6oW4gbmfhuqFjaCFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6ODU0Cittc2dpZCAiIgorIlxuIgorIkJhZCBxdW90YSBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJGb2xsb3dpbmcgdmFsaWQgcXVvdGEgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIChwYXNzIGJ5IHNlcGFyYXRpbmcgd2l0aCAiCisiY29tbWEpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLEkMOjIGNo4buJIMSR4buLbmggdHXhu7MgY2jhu41uIGjhuqFuIG5n4bqhY2ggc2FpLlxuIgorIlxuIgorIlNhdSDEkcOieSBsw6AgZGFuaCBzw6FjaCBjw6FjIHR14buzIGNo4buNbiBo4bqhbiBuZ+G6oWNoIMSRxrDhu6NjIGTDuW5nIChjaOG6pXAgbmjhuq1uIG5nxINuIGPDoWNoICIKKyJi4bqxbmcgZOG6pXUgcGjhuql5KTpcbiIKKyJcdFteXXVzcnF1b3RhXG4iCisiXHRbXl1ncnBxdW90YVxuIgorIlxuIgorIlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcGFyc2UgZGF0ZS90aW1lIHNwZWNpZmllcjogJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBwaMOibiB0w6FjaCB0b8OhbiB04butIG5nw6B5L2dp4budOiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTQyIG1pc2MvdHVuZTJmcy5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbW91bnRzIGNvdW50IC0gJXMiCittc2dzdHIgInPhu5EgxJHhur9tIGfhuq9uIHNhaSDigJQgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZXJyb3IgYmVoYXZpb3IgLSAlcyIKK21zZ3N0ciAi4bupbmcgeOG7rSBs4buXaSBzYWkg4oCUICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpZC9ncm91cCBuYW1lIC0gJXMiCittc2dzdHIgIkdJRC90w6puIG5ow7NtIHNhaSDigJQgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGludGVydmFsIC0gJXMiCittc2dzdHIgInNhaSBuaOG7i3AgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2sgcmF0aW8gLSAlcyIKK21zZ3N0ciAidOG7tyBs4buHIGto4buRaSBkw6BuaCByacOqbmcgc2FpIOKAlCAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3NQorbXNnaWQgIi1vIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICJjw7MgdGjhu4MgxJHGsGEgcmEgdMO5eSBjaOG7jW4g4oCcLW/igJ0gY2jhu4kgbeG7mXQgbOG6p24iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwODQKK21zZ2lkICItTyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiY8OzIHRo4buDIMSRxrBhIHJhIHTDuXkgY2jhu41uIOKAnC1P4oCdIGNo4buJIG3hu5l0IGzhuqduIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9ja3MgY291bnQgLSAlcyIKK21zZ3N0ciAic+G7kSDEkeG6v20ga2jhu5FpIGTDoG5oIHJpw6puZyBzYWkg4oCUICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB1aWQvdXNlciBuYW1lIC0gJXMiCittc2dzdHIgIlVJRC90w6puIG5nxrDhu51pIGTDuW5nIHNhaSDigJQgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAia8OtY2ggY+G7oSBuw7p0IHNhaSDigJQgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5vZGUgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLSAlcyIKK21zZ3N0ciAiS8OtY2ggY+G7oSBuw7p0IHBo4bqjaSBsw6AgbMWpeSB0aOG7q2EgMiDigJQgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibW1wX3VwZGF0ZV9pbnRlcnZhbCB0b28gYmlnOiAlbHVcbiIKK21zZ3N0ciAibW1wX3VwZGF0ZV9pbnRlcnZhbCBxdcOhIGzhu5tuICglbHUpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kXG4iCittc2dpZF9wbHVyYWwgIiIKKyJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHJbMF0gIiIKKyLEkGFuZyDEkeG6t3Qga2hv4bqjbmcgdGjhu51pIGdpYW4gY+G6rXAgbmjhuq10IGLhuqNvIHbhu4cgY2jhu5FuZyDEkWEgbOG6r3AgdGjDoG5oICVsdSBnacOieVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpZGU6ICVzXG4iCittc2dzdHIgIlRoYW0gc+G7kSBzdHJpZGUgUkFJRCBraMO0bmcgaOG7o3AgbOG7hzogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaXBlLXdpZHRoOiAlc1xuIgorbXNnc3RyICJUaGFtIHPhu5EgY2hp4buBdSBy4buZbmcgc+G7jWMgKHN0cmlwZS13aWR0aCkgUkFJRCBraMO0bmcgaOG7o3AgbOG7hzogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGhhc2ggYWxnb3JpdGhtOiAlc1xuIgorbXNnc3RyICJUaHXhuq10IHRvw6FuIHThuqFvIG3huqt1IGR1eSBuaOG6pXQgduG6q24ga2jDtG5nIGjhu6NwIGzhu4c6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHRvICVzICglZClcbiIKK21zZ3N0ciAixJBhbmcgxJHhurd0IHRodeG6rXQgdG/DoW4gdOG6oW8gbeG6q3UgZHV5IG5o4bqldCB0aMOgbmggJXMgKCVkKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzMxCittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNoIGFsZ29yaXRobT5cbiIKKyJcdG1vdW50X29wdHM9PGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucz5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBjaHVuayBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZV93aWR0aD08UkFJRCBzdHJpZGUqZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorbXNnc3RyICIiCisiXG4iCisiQ2jhu4kgxJHhu4tuaCB0w7l5IGNo4buNbiBzYWkuXG4iCisiXG4iCisiQ8OhYyB0w7l5IGNo4buNbiBt4bufIHLhu5luZyDEkeG7i25oIGdp4bubaSBi4bqxbmcgZOG6pXUgcGjhuql5LCBjw7MgdGjhu4MgY2jhuqVwIG5o4bqtblxuIgorIlx0xJHhu5FpIHPhu5EgxJHGsOG7o2MgZ8OhbiB24bubaSBk4bqldSBi4bqxbmcg4oCcPeKAnS5cbiIKKyJcbiIKKyJUw7l5IGNo4buNbiDEkcOjIG3hu58gcuG7mW5nIGjhu6NwIGzhu4c6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTx0aHXhuq10IHRvw6FuIGLEg20+XG4iCisiXHRtb3VudF9vcHRzPTxjw6FjIHR14buzIGNo4buNbiBn4bqvbiBt4bq3YyDEkeG7i25oIG3hu58gcuG7mW5nPlxuIgorIlx0c3RyaWRlPTxSQUlEIGNobyBt4buXaSBrw61jaCBj4buhIMSRb+G6oW4gxJHEqWEgdGhlbyBraOG7kWk+XG4iCisiXHRzdHJpcGUtd2lkdGg9PFJBSUQgc3RyaWRlKmPDoWMgxJHEqWEgZOG7ryBsaeG7h3UgdGhlbyBraOG7kWk+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzk4Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgaW5vZGUgYml0bWFwXG4iCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMgw6FuaCB44bqhIGlub2RlXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MDMKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBibG9jayBiaXRtYXBcbiIKK21zZ3N0ciAiTOG7l2kga2hpIMSR4buNYyBt4bqjbmcga2jhu5FpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjAgcmVzaXplL3Jlc2l6ZTJmcy5jOjkzMQorbXNnaWQgImJsb2NrcyB0byBiZSBtb3ZlZCIKK21zZ3N0ciAia2jhu5FpIGPhuqduIGRpIGNodXnhu4NuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODIzCittc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrIGJpdG1hcCB3aGVuIGluY3JlYXNpbmcgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICJM4buXaSBj4bqlcCBwaMOhdCDhuqNuaCBt4bqjbmcga2jhu5FpIGtoaSB0xINuZyBrw61jaCBj4buhIGlub2RlXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MjkKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGluY3JlYXNlIGlub2RlIHNpemUgXG4iCittc2dzdHIgIktow7RuZyDEkeG7pyBz4bupYyBjaOG7qWEgxJHhu4MgdMSDbmcga8OtY2ggY+G7oSBpbm9kZVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODM0Cittc2dpZCAiRmFpbGVkIHRvIHJlbG9jYXRlIGJsb2NrcyBkdXJpbmcgaW5vZGUgcmVzaXplIFxuIgorbXNnc3RyICJM4buXaSDEkeG7i25oIHbhu4sgbOG6oWkga2jhu5FpIHRyb25nIGtoaSB0aGF5IMSR4buVaSBrw61jaCBj4buhIGlub2RlIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODY2Cittc2dpZCAiIgorIkVycm9yIGluIHJlc2l6aW5nIHRoZSBpbm9kZSBzaXplLlxuIgorIlJ1biBlMnVuZG8gdG8gdW5kbyB0aGUgZmlsZSBzeXN0ZW0gY2hhbmdlcy4gXG4iCittc2dzdHIgIiIKKyJH4bq3cCBs4buXaSBraGkgdGhheSDEkeG7lWkga8OtY2ggY+G7oSBuw7p0LlxuIgorIkjDo3kgY2jhuqF5IGzhu4duaCDigJxlMnVuZG/igJ0gxJHhu4MgaOG7p3kgY8OhYyBixrDhu5tjIHRoYXkgxJHhu5VpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4uIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODkzCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZGIgZmlsZW5hbWVcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuqVwIHBow6F0IGLhu5kgbmjhu5sgY2hvIHTDqm4gdOG6rXAgdGluIHRkYlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZWxldGUgJXMiCittc2dzdHIgInRyb25nIGtoaSBj4buRIHhvw6EgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIHVuZG8gdGhlIHR1bmUyZnMgb3BlcmF0aW9uIHBsZWFzZSBydW4gdGhlIGNvbW1hbmRcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyLEkOG7gyBob8OgbiBs4bqhaSB0aGFvIHTDoWMgdHVuZTJmcywgaMOjeSBjaOG6oXkgY8OidSBs4buHbmhcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBibG9jayBtYWdpYyBpcyBiYWQuIFRyeSB0byBmaXggaXQgYnkgcnVubmluZzpcbiIKKyInZTJmc2NrIC1mICVzJ1xuIgorbXNnc3RyICIiCisiS2jhu5FpIG3DoHUgbmhp4buHbSBNTVAgc2FpLiBIw6N5IHRo4butIHPhu61hIGLhurFuZyBjw6FjaCBjaOG6oXkgbOG7h25oOlxuIgorIuKAnGUyZnNjayAtZiAlc+KAnVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIGlzIGFscmVhZHkgJWx1XG4iCittc2dzdHIgIkvDrWNoIGPhu6EgbsO6dCB0aMO0bmcgdGluIMSRw6MgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwODEKK21zZ2lkICJTaHJpbmtpbmcgaW5vZGUgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIktow7RuZyBo4buXIHRy4bujIHTDrW5oIG7Eg25nIHRodSBuaOG7jyBrw61jaCBj4buhIG7DunRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlub2RlIHNpemUgJWx1IChtYXggJWQpXG4iCittc2dzdHIgIkvDrWNoIGPhu6EgbsO6dCB0aMO0bmcgdGluIGtow7RuZyBo4bujcCBs4buHICVsdSAodOG7kWkgxJFhICVkKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbWF4aW1hbCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICLEkGFuZyDEkeG6t3Qgc+G7kSDEkeG6v20gbOG6r3AgdOG7kWkgxJFhIHRow6BuaCAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3VycmVudCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICLEkGFuZyDEkeG6t3Qgc+G7kSDEkeG6v20gbOG6r3AgaGnhu4duIHRo4budaSB0aMOgbmggJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGVycm9yIGJlaGF2aW9yIHRvICVkXG4iCittc2dzdHIgIsSQYW5nIMSR4bq3dCDhu6luZyB44butIGzhu5dpIHRow6BuaCAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGdpZCB0byAlbHVcbiIKK21zZ3N0ciAixJBhbmcgxJHhurd0IEdJRCBraOG7kWkgZMOgbmggcmnDqm5nIHRow6BuaCAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyBpcyB0b28gYmlnICglbHUpIgorbXNnc3RyICJraG/huqNuZyBnaeG7r2EgaGFpIGzhuqduIGtp4buDbSB0cmEgcXXDoSBs4bubbiAoJWx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGludGVydmFsIGJldHdlZW4gY2hlY2tzIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHIgIsSQYW5nIMSR4bq3dCBraG/huqNuZyBnaeG7r2EgaGFpIGzhuqduIGtp4buDbSB0cmEgdGjDoG5oICVsdSBnacOieVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnRhZ2UgdG8gJWclJSAoJWxsdSBibG9ja3MpXG4iCittc2dzdHIgIsSQYW5nIMSR4bq3dCBwaOG6p24gdHLEg20ga2jhu5FpIGThu7EgdHLhu68gdGjDoG5oICVnJSUgKCVsbHUga2jhu5FpKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlc2VydmVkIGJsb2NrcyBjb3VudCBpcyB0b28gYmlnICglbGx1KSIKK21zZ3N0ciAic+G7kSBsxrDhu6NuZyBraOG7kWkgZOG7sSB0cuG7ryBxdcOhIGzhu5tuICglbGx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgIsSQYW5nIMSR4bq3dCBz4buRIGzGsOG7o25nIGto4buRaSBk4buxIHRy4buvIHRow6BuaCAlbGx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxODcKK21zZ2lkICIiCisiXG4iCisiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgc3BhcnNlIHN1cGVyYmxvY2tzLlxuIgorbXNnc3RyICIiCisiXG4iCisiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiDEkcOjIGPDsyBzacOqdSBraOG7kWkgdGjGsGEgdGjhu5t0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTkxCittc2dpZCAiIgorIlxuIgorIlNldHRpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZFxuIgorImZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBtZXRhX2JnIGZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIktow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIGNo4bupYyBuxINuZyBwaMOibiB0w61jaCBj4budIHNpw6p1IGto4buRaVxuIgorImNobyBo4buHIHRo4buRbmcgdOG6rXAgdGluIHbhu5tpIMSR4bq3YyB0w61uaCBtZXRhX2JnIMSRxrDhu6NjIGLhuq10LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIHNldC4gICVzIgorbXNnc3RyICIiCisiXG4iCisixJDhurd0IGPhu50gc2nDqnUga2jhu5FpIHRoxrBhIHRo4bubdC4gICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjA3Cittc2dpZCAiIgorIlxuIgorIkNsZWFyaW5nIHRoZSBzcGFyc2Ugc3VwZXJibG9jayBmbGFnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJUw61uaCBuxINuZyB4b8OhIHPhuqFjaCBj4budIHNpw6p1IGto4buRaSBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHRpbWUgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdG8gJXNcbiIKK21zZ3N0ciAixJBhbmcgxJHhurd0IGdp4budIGtp4buDbSB0cmEgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBs4bqnbiBjdeG7kWkgY8O5bmcgdGjDoG5oICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgdWlkIHRvICVsdVxuIgorbXNnc3RyICLEkGFuZyDEkeG6t3QgVUlEIGto4buRaSBkw6BuaCByacOqbmcgdGjDoG5oICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjUzCittc2dpZCAiRXJyb3IgaW4gdXNpbmcgY2xlYXJfbW1wLiBJdCBtdXN0IGJlIHVzZWQgd2l0aCAtZlxuIgorbXNnc3RyICJM4buXaSBraMO0bmcgc+G7rSBk4bulbmcgY2xlYXJfbW1wLiBOw7MgcGjhuqNpIMSRxrDhu6NjIHPhu60gZOG7pW5nIGPDuW5nIHbhu5tpIC1mXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNzEKK21zZ2lkICIiCisiVGhlIHF1b3RhIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorIsSQ4bq3YyB0w61uaCBo4bqhbiBuZ+G6oWNoIGNo4buJIGPDsyB0aOG7gyDEkcaw4bujYyB0aGF5IMSR4buVaSBraGkgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBraMO0bmcgxJHGsOG7o2MgIgorImfhuq9uIGvhur90LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjkyCittc2dpZCAiVGhlIFVVSUQgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiY2jhu4kgY8OzIHRo4buDIHRoYXkgxJHhu5VpIFVVSUQga2hpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4ga2jDtG5nIMSRxrDhu6NjIGfhuq9uIGvhur90LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzIyCittc2dpZCAiSW52YWxpZCBVVUlEIGZvcm1hdFxuIgorbXNnc3RyICLEkOG7i25oIGThuqFuZyBVVUlEIGtow7RuZyBo4bujcCBs4buHXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzMzcKK21zZ2lkICJOZWVkIHRvIHVwZGF0ZSBqb3VybmFsIHN1cGVyYmxvY2suXG4iCittc2dzdHIgIkPhuqduIHBo4bqjaSBj4bqtcCBuaOG6rXQgc2nDqnUga2jhu5FpIG5o4bqtdCBrw70uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNTgKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiS8OtY2ggY+G7oSBuw7p0IGNo4buJIGPDsyB0aOG7gyB0aGF5IMSR4buVaSBraGkgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBraMO0bmcgxJHGsOG7o2MgZ+G6r24ga+G6v3QuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNjYKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIGlub2RlIHNpemUgbm90IHN1cHBvcnRlZCBmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgZmxleF9iZ1xuIgorImZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorIkNo4bupYyBuxINuZyB0aGF5IMSR4buVaSBrw61jaCBj4buhIG7DunQgdGjDtG5nIHRpbiBraMO0bmcgcGjhuqNpIMSRxrDhu6NjIGjhu5cgdHLhu6MgxJHhu5FpIHbhu5tpIGjhu4cgIgorInRo4buRbmcgdOG6rXAgdGluIMSRw6MgYuG6rXQgdMOtbmggbsSDbmcg4oCcZmxleF9iZ+KAnS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGlub2RlIHNpemUgJWx1XG4iCittc2dzdHIgIsSQYW5nIMSR4bq3dCBrw61jaCBj4buhIG7DunQgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzODIKK21zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiTOG7l2kgdGhheSDEkeG7lWkga8OtY2ggdGjGsOG7m2MgY+G7p2EgbsO6dFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaWRlIHNpemUgdG8gJWRcbiIKK21zZ3N0ciAixJBhbmcgxJHhurd0IGvDrWNoIGPhu6Egc3RyaWRlIHRow6BuaCAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaXBlIHdpZHRoIHRvICVkXG4iCittc2dzdHIgIsSQYW5nIMSR4bq3dCBjaGnhu4F1IHLhu5luZyBz4buNYyAoc3RyaXBlIHdpZHRoKSB0aMOgbmggJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucyB0byAnJXMnXG4iCittc2dzdHIgIsSQYW5nIMSR4bq3dCB0deG7syBjaOG7jW4gZ+G6r24gbeG6t2MgxJHhu4tuaCBt4bufIHLhu5luZyB0aMOgbmgg4oCcJXPigJ1cbiIKKworIzogbWlzYy91dGlsLmM6OTMKK21zZ2lkICI8cHJvY2VlZGluZz5cbiIKK21zZ3N0ciAiPMSRYW5nIHjhu60gbMO9PlxuIgorCisjOiBtaXNjL3V0aWwuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICJQcm9jZWVkIGFueXdheSAob3Igd2FpdCAlZCBzZWNvbmRzKSA/ICh5LG4pICIKK21zZ3N0ciAiVuG6q24geOG7rSBsw70gKGhv4bq3YyBjaOG7nSAlZCBnacOieSk/IChjLGspICIKKworIzogbWlzYy91dGlsLmM6MTAxCittc2dpZCAiUHJvY2VlZCBhbnl3YXk/ICh5LG4pICIKK21zZ3N0ciAiVuG6q24gY8OybiB0aeG6v3AgdOG7pWMga2jDtG5nPyAoYyxrKSIKKworIzogbWlzYy91dGlsLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0bGFzdCBtb3VudGVkIG9uICVzIG9uICVzIgorbXNnc3RyICJcdMOqbiBs4bqnbiBjdeG7kWkgxJHGsOG7o2MgZ+G6r24gdsOgbyAlcyB0csOqbiAlcyIKKworIzogbWlzYy91dGlsLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0bGFzdCBtb3VudGVkIG9uICVzIgorbXNnc3RyICJcdMOqbiBs4bqnbiBjdeG7kWkgxJHGsOG7o2MgZ+G6r24gdsOgbyAlcyIKKworIzogbWlzYy91dGlsLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0Y3JlYXRlZCBvbiAlcyIKK21zZ3N0ciAiXHTEkcaw4bujYyB04bqhbyBsw7pjICVzIgorCisjOiBtaXNjL3V0aWwuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRsYXN0IG1vZGlmaWVkIG9uICVzIgorbXNnc3RyICJcdHPhu61hIGzhuqduIGN14buRaSBsw7pjICVzIgorCisjOiBtaXNjL3V0aWwuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm91bmQgYSAlcyBwYXJ0aXRpb24gdGFibGUgaW4gJXNcbiIKK21zZ3N0ciAiVMOsbSB0aOG6pXkgJXMgYuG6o25nIHBow6JuIHbDuW5nIHRyb25nICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSAlcyBkb2VzIG5vdCBleGlzdCBhbmQgbm8gc2l6ZSB3YXMgc3BlY2lmaWVkLlxuIgorbXNnc3RyICJU4bqtcCB0aW4gJXMga2jDtG5nIHThu5NuIHThuqFpIHbDoCBjxaluZyBjaMawYSBjaOG7iSByYSBrw61jaCBj4buhLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgcmVndWxhciBmaWxlICVzXG4iCittc2dzdHIgIsSQYW5nIHThuqFvIHThuq1wIHRpbiB0aMaw4budbmcgJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyAlczogJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjE2Cittc2dpZCAiIgorIlxuIgorIlRoZSBkZXZpY2UgYXBwYXJlbnRseSBkb2VzIG5vdCBleGlzdDsgZGlkIHlvdSBzcGVjaWZ5IGl0IGNvcnJlY3RseT9cbiIKK21zZ3N0ciAiIgorIlxuIgorIkPDsyB24bq7IGzDoCB0aGnhur90IGLhu4sga2jDtG5nIHThu5NuIHThuqFpOyBi4bqhbiBjw7MgxJHGsGEgcmEgxJHDum5nIGNoxrBhP1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIGtow7RuZyBwaOG6o2kgdGhp4bq/dCBi4buLIMSR4bq3YyBiaeG7h3Qga2jhu5FpLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbSBsYWJlbGxlZCAnJXMnXG4iCittc2dzdHIgIiVzIGNo4bupYSBo4buHIHRo4buRbmcgdOG6rXAgdGluICVzIGPDsyBuaMOjbiDigJwlc+KAnVxuIgorCisjOiBtaXNjL3V0aWwuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY29udGFpbnMgYSAlcyBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICIlcyBjaOG7qWEgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgZW50aXJlIGRldmljZSwgbm90IGp1c3Qgb25lIHBhcnRpdGlvbiFcbiIKK21zZ3N0ciAiJXMgbMOgIHRvw6BuIGLhu5kgdGhp4bq/dCBi4buLLCBraMO0bmcgcGjhuqNpIGNo4buJIG3hu5l0IHBow6JuIHbDuW5nICFcbiIKKworIzogbWlzYy91dGlsLmM6MzIzCittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIlRp4bq/biB0csOsbmggbWtlMmZzIHbhuqtuIGPDsm4gYuG7iyDDqXAgYnXhu5ljLiBNb25nIOKAnC9ldGMvbXRhYuKAnSBraMO0bmcgxJHDum5nLlxuIgorCisjOiBtaXNjL3V0aWwuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgbWFrZSBhICVzIGhlcmUhXG4iCittc2dzdHIgInPhur0ga2jDtG5nIGzDoG0gJXMg4bufIMSRw6J5ICFcbiIKKworIzogbWlzYy91dGlsLmM6MzM1Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgIlRp4bq/biB0csOsbmggbWtlMmZzIHbhuqtuIGPDsm4gYuG7iyDDqXAgYnXhu5ljLlxuIgorCisjOiBtaXNjL3V0aWwuYzozNTEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugam91cm5hbCBvcHRpb25zIVxuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY+G6pXAgcGjDoXQgYuG7mSBuaOG7myDEkeG7gyBwaMOibiB0w6FjaCBjw6FjIHTDuXkgY2jhu41uIG5o4bqtdCBrw70gIVxuIgorCisjOiBtaXNjL3V0aWwuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCBmaW5kIGpvdXJuYWwgZGV2aWNlIG1hdGNoaW5nICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJLaMO0bmcgdMOsbSB0aOG6pXkgdGhp4bq/dCBi4buLIG5o4bqtdCBrw70gdMawxqFuZyDhu6luZyB24bubaSAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzo0MDMKK21zZ2lkICIiCisiXG4iCisiQmFkIGpvdXJuYWwgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiSm91cm5hbCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgam91cm5hbCBvcHRpb25zIGFyZTpcbiIKKyJcdHNpemU9PGpvdXJuYWwgc2l6ZSBpbiBtZWdhYnl0ZXM+XG4iCisiXHRkZXZpY2U9PGpvdXJuYWwgZGV2aWNlPlxuIgorIlx0bG9jYXRpb249PGpvdXJuYWwgbG9jYXRpb24+XG4iCisiXG4iCisiVGhlIGpvdXJuYWwgc2l6ZSBtdXN0IGJlIGJldHdlZW4gMTAyNCBhbmQgMTAyNDAwMDAgZmlsZXN5c3RlbSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLEkMawYSByYSB0w7l5IGNo4buNbiBuaOG6rXQga8O9IHNhaS5cbiIKKyJcbiIKKyJDw6FjIHTDuXkgY2jhu41uIG5o4bqtdCBrw70gY8WpbmcgxJHhu4tuaCBnaeG7m2kgYuG6sW5nIGThuqV1IHBo4bqpeSwgY8OzIHRo4buDIGNo4bqlcCBuaOG6rW5cbiIKKyLEkeG7kWkgc+G7kSBjw6FpIG3DoCDEkcaw4bujYyDEkeG6t3QgYuG6sW5nIGThuqV1IGLhurFuZyAo4oCcPeKAnSkuXG4iCisiXG4iCisiVMO5eSBjaOG7jW4gbmjhuq10IGvDvSBo4bujcCBs4buHOlxuIgorIlx0c2l6ZT08a8OtY2ggY+G7oSBuaOG6rXQga8O9IHRoZW8gbWVnYWJ5dGU+XG4iCisiXHRkZXZpY2U9PHRoaeG6v3QgYuG7iyBuaOG6rXQga8O9PlxuIgorIlx0bG9jYXRpb249PHbhu4sgdHLDrSBuaOG6rXQga8O9PlxuIgorIlxuIgorIkvDrWNoIGPhu6EgY+G7p2Egbmjhuq10IGvDvSBwaOG6o2kgbuG6sW0gdHJvbmcgcGjhuqFtIHZpXG4iCisiMTAyNCDEkeG6v24gMTAyNDAwMDAga2jhu5FpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4uXG4iCisiXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQzNAorbXNnaWQgIiIKKyJcbiIKKyJGaWxlc3lzdGVtIHRvbyBzbWFsbCBmb3IgYSBqb3VybmFsXG4iCittc2dzdHIgIiIKKyJcbiIKKyJI4buHIHRo4buRbmcgdOG6rXAgdGluIHF1w6Egbmjhu48gxJHhu5FpIHbhu5tpIG5o4bqtdCBrw71cbiIKKworIzogbWlzYy91dGlsLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgcmVxdWVzdGVkIGpvdXJuYWwgc2l6ZSBpcyAlZCBibG9ja3M7IGl0IG11c3QgYmVcbiIKKyJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gIEFib3J0aW5nLlxuIgorbXNnc3RyICIiCisiXG4iCisiS8OtY2ggY+G7oSBuaOG6rXQga8O9IMSRw6MgecOqdSBj4bqndSBsw6AgJWQga2jhu5FpO1xuIgorIm7DsyBwaOG6o2kgbuG6sW0gdHJvbmcgcGjhuqFtIHZpIDEwMjQgxJHhur9uIDEwMjQwMDAwIGto4buRaVxuIgorIm7Dqm4gaOG7p3kgYuG7jy5cbiIKKworIzogbWlzYy91dGlsLmM6NDQ5Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgc2l6ZSB0b28gYmlnIGZvciBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiXG4iCisiS8OtY2ggY+G7oSBuaOG6rXQga8O9IHF1w6EgbOG7m24gxJHhu5FpIHbhu5tpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4uXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBmaWxlc3lzdGVtIHdpbGwgYmUgYXV0b21hdGljYWxseSBjaGVja2VkIGV2ZXJ5ICVkIG1vdW50cyBvclxuIgorIiVnIGRheXMsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gIFVzZSB0dW5lMmZzIC1jIG9yIC1pIHRvIG92ZXJyaWRlLlxuIgorbXNnc3RyICIiCisiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiBuw6B5IHPhur0gxJHGsOG7o2Mga2nhu4NtIHRyYSB04buxIMSR4buZbmcgbeG7l2kgJWQgbOG6p24gZ+G6r24ga+G6v3RcbiIKKyJoYXkgbeG7l2kgJWcgbmfDoHksIMSRaeG7gXUgbsOgbyB44bqjeSByYSB0csaw4bubYy4gSMOjeSBkw7luZyB0w7l5IGNo4buNblxuIgorIuKAnHR1bmUyZnMgLWPigJ0gaGF5IOKAnHR1bmUyZnMgLWnigJ0gxJHhu4MgZ2hpIMSRw6ggbMOqbiBuw7MuXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0OQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1kXSBbLXAgcGlkZmlsZV0gWy1zIHNvY2tldHBhdGhdIFstVCB0aW1lb3V0XVxuIgorbXNnc3RyICIiCisiQ8OhY2ggZMO5bmc6ICVzIFstZF0gWy1wIHThuq1wX3Rpbl9QSURdIFstcyDEkcaw4budbmdfZOG6q25f4buVX2Phuq9tXSBbLVQgdGjhu51pX2jhuqFuXVxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIFstcnx0XSBbLW4gbnVtXSBbLXMgc29ja2V0cGF0aF1cbiIKK21zZ3N0ciAiICAgICAgICVzIFstcnx0XSBbLW4gbnVtXSBbLXMgc29ja2V0cGF0aF1cbiIKKworIzogbWlzYy91dWlkZC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyAta1xuIgorbXNnc3RyICIgICAgICAgJXMgLWtcbiIKKworIzogbWlzYy91dWlkZC5jOjE1NQorbXNnaWQgImJhZCBhcmd1bWVudHMiCittc2dzdHIgIsSR4buRaSBz4buRIHNhaSIKKworIzogbWlzYy91dWlkZC5jOjE3MworbXNnaWQgImNvbm5lY3QiCittc2dzdHIgImvhur90IG7hu5FpIgorCisjOiBtaXNjL3V1aWRkLmM6MTkyCittc2dpZCAid3JpdGUiCittc2dzdHIgImdoaSIKKworIzogbWlzYy91dWlkZC5jOjIwMAorbXNnaWQgInJlYWQgY291bnQiCittc2dzdHIgInPhu5EgbOG6p24gxJHhu41jIgorCisjOiBtaXNjL3V1aWRkLmM6MjA2Cittc2dpZCAiYmFkIHJlc3BvbnNlIGxlbmd0aCIKK21zZ3N0ciAixJDhu5kgZMOgaSB0cuG6oyB24buBIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBtaXNjL3V1aWRkLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInV1aWRkIGRhZW1vbiBhbHJlYWR5IHJ1bm5pbmcgYXQgcGlkICVzXG4iCittc2dzdHIgInV1aWRkIGRhZW1vbiDEkcOjIGNo4bqheSBz4bq1biBy4buTaSB04bqhaSBwaWQgJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgdW5peCBzdHJlYW0gc29ja2V0OiAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHThuqFvIOG7lSBj4bqvbSBsdeG7k25nIHN0cmVhbSBVTklYOiAlcyIKKworIzogbWlzYy91dWlkZC5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBiaW5kIHVuaXggc29ja2V0ICVzOiAlc1xuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgYnXhu5ljIGvhur90IOG7lSBj4bqvbSBVTklYICVzOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxpc3RlbiBvbiB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzhuq9uZyBuZ2hlIHRyw6puIOG7lSBj4bqvbSBVTklYICVzOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgZnJvbSBjbGllbnQsIGxlbiA9ICVkXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkeG7jWMgdOG7qyDhu6luZyBk4bulbmcga2jDoWNoLCBkw6BpID0gJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVyYXRpb24gJWQsIGluY29taW5nIG51bSA9ICVkXG4iCittc2dzdHIgInRoYW8gdMOhYyAlZCwgc+G7kSBn4butaSDEkeG6v24gPSAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQ6ICVzXG4iCittc2dzdHIgIlVVSUQgdGjhu51pIGdpYW4gxJHDoyB04bqhbyByYTogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgcmFuZG9tIFVVSUQ6ICVzXG4iCittc2dzdHIgIlVVSUQgbmfhuqt1IG5oacOqbiDEkcOjIHThuqFvIHJhOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCAlZCBzdWJzZXF1ZW50IFVVSURzXG4iCittc2dzdHJbMF0gIlVVSUQgdGjhu51pIGdpYW4gxJHDoyB04bqhbyByYSAlcyB2w6AgJWQgdGhlbyBzYXVcbiIKKworIzogbWlzYy91dWlkZC5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgJWQgVVVJRCdzOlxuIgorbXNnc3RyICIlZCBVVUlEIMSRw6MgdOG6oW8gcmE6XG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24gJWRcbiIKK21zZ3N0ciAiVGhhbyB0w6FjIGtow7RuZyBo4bujcCBs4buHICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0NzcgbWlzYy91dWlkZC5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICJT4buRIHNhaTogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjUzNCBtaXNjL3V1aWRkLmM6NTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNhbGxpbmcgdXVpZGQgZGFlbW9uICglcyk6ICVzXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBn4buNaSB0csOsbmggbuG7gW4gdXVpZGQgKCVzKTogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiVzIHbDoCAlZCBVVUlEIHjhuqN5IHJhIHNhdVxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ4Cittc2dpZCAiTGlzdCBvZiBVVUlEJ3M6XG4iCittc2dzdHIgIkRhbmggc8OhY2ggY+G7p2EgVVVJRDpcbiIKKworIzogbWlzYy91dWlkZC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHJlcGx5IGxlbmd0aCBmcm9tIHNlcnZlciAlZFxuIgorbXNnc3RyICJNw6F5IGNo4bunIHRy4bqjIGzhu51pIMSRw6FwIOG7qW5nIHbhu5tpIGNoaeG7gXUgZMOgaSBi4bqldCB0aMaw4budbmcgJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBraWxsIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkOiAlc1xuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgYnXhu5ljIGvhur90IHRow7pjIHV1aWRkIMSRYW5nIGNo4bqheSB24bubaSBQSUQgJWQ6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiS2lsbGVkIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkXG4iCittc2dzdHIgIsSQw6MgYnXhu5ljIGvhur90IHRow7pjIHV1aWRkIGNo4bqheSB04bqhaSBQSUQgJWRcbiIKKworIzogbWlzYy91dWlkZ2VuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstcl0gWy10XVxuIgorbXNnc3RyICJDw6FjaCBkw7luZzogJXMgWy1yXSBbLXRdXG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDIKK21zZ2lkICIjIEV4dGVudCBkdW1wOlxuIgorbXNnc3RyICIjIMSQ4buVIG3hu58gcuG7mW5nOlxuIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiNcdE51bT0lbGx1LCBTaXplPSVsbHUsIEN1cnNvcj0lbGx1LCBTb3J0ZWQ9JWxsdVxuIgorbXNnc3RyICIjXHRT4buRPSVsbHUsICBD4buhPSVsbHUsIENvbiB0cuG7jz0lbGx1LCBT4bqvcCB44bq/cD0lbGx1XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBkZXZpY2UgW25ld19zaXplXVxuIgorIlxuIgorbXNnc3RyICIiCisiQ8OhY2ggZMO5bmc6ICVzIFstZCBj4budX2fhu6FfbOG7l2ldIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSB0aGnhur90X2Lhu4sgIgorIltrw61jaF9j4buhX23hu5tpXVxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjY2Cittc2dpZCAiRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAixJBhbmcgbeG7nyBy4buZbmcgYuG6o25nIG7DunQgdGjDtG5nIHRpbiIKKworIzogcmVzaXplL21haW4uYzo2OQorbXNnaWQgIlJlbG9jYXRpbmcgYmxvY2tzIgorbXNnc3RyICLEkGFuZyDEkeG7i25oIHbhu4sgbOG6oWkgY8OhYyBraOG7kWkiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzIKK21zZ2lkICJTY2FubmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAixJBhbmcgcXXDqXQgYuG6o25nIG7DunQgdGjDtG5nIHRpbiIKKworIzogcmVzaXplL21haW4uYzo3NQorbXNnaWQgIlVwZGF0aW5nIGlub2RlIHJlZmVyZW5jZXMiCittc2dzdHIgIsSQYW5nIGPhuq1wIG5o4bqtdCBjw6FjIHRoYW0gY2hp4bq/dSBuw7p0IHRow7RuZyB0aW4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NzgKK21zZ2lkICJNb3ZpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIsSQYW5nIGRpIGNodXnhu4NuIGLhuqNuZyBuw7p0IHRow7RuZyB0aW4iCisKKyM6IHJlc2l6ZS9tYWluLmM6ODEKK21zZ2lkICJVbmtub3duIHBhc3M/IT8iCittc2dzdHIgIkzhuqduIHF1YSBs4bqhPyE/IgorCisjOiByZXNpemUvbWFpbi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZ2luIHBhc3MgJWQgKG1heCA9ICVsdSlcbiIKK21zZ3N0ciAiS2jhu59pIGNo4bqheSBs4bqnbiBxdWEgJWQgKHThu5FpIMSRYSA9ICVsdSlcbiIKKworIzogcmVzaXplL21haW4uYzoxNTUKK21zZ2lkICIiCisiXG4iCisiUmVzaXppbmcgYmlnYWxsb2MgZmlsZSBzeXN0ZW1zIGhhcyBub3QgYmVlbiBmdWxseSB0ZXN0ZWQuICBQcm9jZWVkIGF0XG4iCisieW91ciBvd24gcmlzayEgIFVzZSB0aGUgZm9yY2Ugb3B0aW9uIGlmIHlvdSB3YW50IHRvIGdvIGFoZWFkIGFueXdheS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZp4buHYyB0aGF5IMSR4buVaSBrw61jaCB0aMaw4bubYyBj4bunYSBo4buHIHRo4buRbmcgdOG6rXAgdGluIGJpZ2FsbG9jIGNoxrBhIMSRxrDhu6NjIHRo4butIG5naGnhu4dtICIKKyLEkeG6p3kgxJHhu6cuXG4iCisiVOG7sSBjaOG7i3UgdHLDoWNoIG5oaeG7h20gbuG6v3UgbXXhu5FuIGTDuW5nISAgRMO5bmcgdMO5eSBjaOG7jW4gw6lwIGJ14buZYyBu4bq/dSBi4bqhbiBtdeG7kW4gdGjhu7FjICIKKyJoaeG7h24gdGnhur9wLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIgorbXNnc3RyICJ0cm9uZyBraGkgbeG7nyAlcyIKKworIzogcmVzaXplL21haW4uYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZ2V0dGluZyBzdGF0IGluZm9ybWF0aW9uIGZvciAlcyIKK21zZ3N0ciAidHJvbmcga2hpIGzhuqV5IGPDoWMgdGjDtG5nIHRpbiB24buBICVzIgorCisjOiByZXNpemUvbWFpbi5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1mICVzJyBmaXJzdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlRyxrDhu5tjIHRpw6puIGjDo3kgY2jhuqF5IGzhu4duaCDigJxlMmZzY2sgLWYgJXPigJ0uXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGltYXRlZCBtaW5pbXVtIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW06ICVsbHVcbiIKK21zZ3N0ciAixq/hu5tjIHTDrW5oIHTDrWNoIGPhu6EgdOG7kWkgdGhp4buDdSBj4bunYSBo4buHIHRo4buRbmcgdOG6rXAgdGluOiAlbGx1XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbmV3IHNpemU6ICVzXG4iCittc2dzdHIgIkvDrWNoIGPhu6EgbeG7m2kga2jDtG5nIGjhu6NwIGzhu4c6ICVzXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDIxCittc2dpZCAiTmV3IHNpemUgdG9vIGxhcmdlIHRvIGJlIGV4cHJlc3NlZCBpbiAzMiBiaXRzXG4iCittc2dzdHIgIkvDrWNoIHRoxrDhu5tjIG3hu5tpIHF1w6EgbOG7m24gxJHhu4MgY8OzIHRo4buDIGTDuW5nIHPhu5EgMzIgYml0XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5ldyBzaXplIHNtYWxsZXIgdGhhbiBtaW5pbXVtICglbGx1KVxuIgorbXNnc3RyICJLw61jaCBj4buhIG3hu5tpIHbhuqtuIG5o4buPIGjGoW4gbeG7qWMgdOG7kWkgdGhp4buDdSAoJWxsdSlcbiIKKworIzogcmVzaXplL21haW4uYzo0MzUKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBsZW5ndGgiCittc2dzdHIgIsSQ4buZIGTDoGkgc3RyaWRlIGtow7RuZyBo4bujcCBs4buHIgorCisjOiByZXNpemUvbWFpbi5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbnRhaW5pbmcgcGFydGl0aW9uIChvciBkZXZpY2UpIGlzIG9ubHkgJWxsdSAoJWRrKSBibG9ja3MuXG4iCisiWW91IHJlcXVlc3RlZCBhIG5ldyBzaXplIG9mICVsbHUgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiUGjDom4gdsO5bmcgY2jhu6lhIChoYXkgdGhp4bq/dCBi4buLKSBjaOG7qWEgY2jhu4kgY8OzIGvDrWNoIGPhu6EgJWxsdSAoJWRrKSBraOG7kWkuXG4iCisiQuG6oW4gxJHDoyB5w6p1IGPhuqd1IGvDrWNoIGPhu6EgbeG7m2kgJWxsdSBraOG7kWkuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBpcyBhbHJlYWR5ICVsbHUgKCVkaykgYmxvY2tzIGxvbmcuICBOb3RoaW5nIHRvIGRvIVxuIgorIlxuIgorbXNnc3RyICIiCisiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiDEkcOjIGPDsyDEkeG7mSBkw6BpICVsbHUgKCVkaykga2jhu5FpLiBLaMO0bmcgY+G6p24gbMOgbSBnw6whXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICIiCisixJBhbmcgdGhheSDEkeG7lWkga8OtY2ggY+G7oSBj4bunYSBo4buHIHRo4buRbmcgdOG6rXAgdGluIHRyw6puICVzIHRow6BuaCAlbGx1ICglZGspIGto4buRaS5cbiIKKworIzogcmVzaXplL21haW4uYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlc2l6ZSAlcyIKK21zZ3N0ciAidHJvbmcga2hpIGPhu5EgdGhheSDEkeG7lWkga8OtY2ggY+G7oSAlcyIKKworIzogcmVzaXplL21haW4uYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZnkgJXMnIHRvIGZpeCB0aGUgZmlsZXN5c3RlbVxuIgorImFmdGVyIHRoZSBhYm9ydGVkIHJlc2l6ZSBvcGVyYXRpb24uXG4iCittc2dzdHIgIiIKKyJIw6N5IGNo4bqheSBjw6J1IGzhu4duaCDigJxlMmZzY2sgLWZ5ICVz4oCdIMSR4buDIHPhu61hIGNo4buvYSBo4buHIHRo4buRbmcgdOG6rXAgdGluXG4iCisixJHhurFuZyBzYXUgdGhhbyB0w6FjIHRoYXkgxJHhu5VpIGvDrWNoIGPhu6EgYuG7iyBo4buneSBi4buPLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gb24gJXMgaXMgbm93ICVsbHUgKCVkaykgYmxvY2tzIGxvbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJI4buHIHRo4buRbmcgdOG6rXAgdGluIG7hurFtIHRyw6puICVzIGdp4budIGPDsyDEkeG7mSBkw6BpICVsbHUgKCVkaykga2jhu5FpLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gdHJ1bmNhdGUgJXMiCittc2dzdHIgInRyb25nIGtoaSBj4buRIGPhuq90IG5n4bqvbiAlcyIKKworIzogcmVzaXplL29ubGluZS5jOjgyCittc2dpZCAia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6ZSB3aXRoIHNwYXJzZV9zdXBlcjIiCittc2dzdHIgIiIKKyJI4bqhdCBuaMOibiBraMO0bmcgaOG7lyB0cuG7oyB0w61uaCBuxINuZyB0aGF5IMSR4buVaSBrw61jaCBj4buhIHRy4buxYyB0dXnhur9uIHbhu5tpIHNwYXJzZV9zdXBlcjIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4NworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXM7IG9uLWxpbmUgcmVzaXppbmcgcmVxdWlyZWRcbiIKK21zZ3N0ciAiIgorIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4g4bufICVzIMSRxrDhu6NjIGfhuq9uIGvhur90IHbDoG8gJXM7IGPhuqduIHRoaeG6v3QgdGhheSDEkeG7lWkga8OtY2ggY+G7oSB0cuG7sWMgIgorInR1eeG6v25cbiIKKworIzogcmVzaXplL29ubGluZS5jOjkxCittc2dpZCAiT24tbGluZSBzaHJpbmtpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiVMOtbmggbsSDbmcgdGh1IG5o4buPIGtoaSDEkWFuZyBjaOG6oXkga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTYKK21zZ2lkICJGaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICJI4buHIHRo4buRbmcgdOG6rXAgdGluIGtow7RuZyBo4buXIHRy4bujIHTDrW5oIG7Eg25nIHRoYXkgxJHhu5VpIGvDrWNoIGPhu6EgdHLhu7FjIHR1eeG6v24iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMjUKK21zZ2lkICJOb3QgZW5vdWdoIHJlc2VydmVkIGdkdCBibG9ja3MgZm9yIHJlc2l6aW5nIgorbXNnc3RyICJLaMO0bmcgxJHhu6cga2jhu5FpIGThu7EgdHLhu68gZ2R0IMSR4buDIHRoYXkgxJHhu5VpIGvDrWNoIHRoxrDhu5tjIgorCisjOiByZXNpemUvb25saW5lLmM6MTMyCittc2dpZCAiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcmVzaXppbmcgYSBmaWxlIHN5c3RlbSB0aGlzIGxhcmdlIgorbXNnc3RyICIiCisiSOG6oXQgbmjDom4ga2jDtG5nIGjhu5cgdHLhu6MgdMOtbmggbsSDbmcgdGhheSDEkeG7lWkga8OtY2ggY+G7oSBo4buHIHRo4buRbmcgdOG6rXAgdGluIG7DoHkgcuG7mW5nICIKKyJoxqFuIgorCisjOiByZXNpemUvb25saW5lLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIG1vdW50cG9pbnQgJXMiCittc2dzdHIgInRyb25nIGtoaSBj4buRIG3hu58gxJFp4buDbSBs4bqvcCAlcyIKKworIzogcmVzaXplL29ubGluZS5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJPbGQgcmVzaXplIGludGVyZmFjZSByZXF1ZXN0ZWQuXG4iCittc2dzdHIgIsSQw6MgecOqdSBj4bqndSBnaWFvIGRp4buHbiB0aGF5IMSR4buVaSBrw61jaCBj4buhIGPFqS5cbiIKKworIzogcmVzaXplL29ubGluZS5jOjE2NCByZXNpemUvb25saW5lLmM6MTgxCittc2dpZCAiUGVybWlzc2lvbiBkZW5pZWQgdG8gcmVzaXplIGZpbGVzeXN0ZW0iCittc2dzdHIgIktow7RuZyDEkeG7pyBxdXnhu4FuIMSR4buDIHRoYXkgxJHhu5VpIGvDrWNoIGPhu6EgY+G7p2EgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiIKKworIzogcmVzaXplL29ubGluZS5jOjE2NyByZXNpemUvb25saW5lLmM6MTg3Cittc2dpZCAiV2hpbGUgY2hlY2tpbmcgZm9yIG9uLWxpbmUgcmVzaXppbmcgc3VwcG9ydCIKK21zZ3N0ciAiVHJvbmcga2hpIGtp4buDbSB0cmEgY8OzIGjhu5cgdHLhu6MgdGhheSDEkeG7lWkga8OtY2ggY+G7oSB0cuG7sWMgdHV54bq/biIKKworIzogcmVzaXplL29ubGluZS5jOjE4NAorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiSOG6oXQgbmjDom4ga2jDtG5nIGjhu5cgdHLhu6MgdMOtbmggbsSDbmcgdGhheSDEkeG7lWkga8OtY2ggY+G7oSB0cuG7sWMgdHV54bq/biIKKworIzogcmVzaXplL29ubGluZS5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICJQZXJmb3JtaW5nIGFuIG9uLWxpbmUgcmVzaXplIG9mICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICIiCisixJBhbmcgdGjhu7FjIGhp4buHbiBt4buZdCBjw7RuZyB2aeG7h2MgdGhheSDEkeG7lWkga8OtY2ggY+G7oSAlcyB0cuG7sWMgdHV54bq/biB0aMOgbmggJWxsdSAoJWRrKSAiCisia2jhu5FpLlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MjMzCittc2dpZCAiV2hpbGUgdHJ5aW5nIHRvIGV4dGVuZCB0aGUgbGFzdCBncm91cCIKK21zZ3N0ciAiVHJvbmcga2hpIGPhu5EgbeG7nyBy4buZbmcgbmjDs20gY3Xhu5FpIGPDuW5nIgorCisjOiByZXNpemUvb25saW5lLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHRyeWluZyB0byBhZGQgZ3JvdXAgIyVkIgorbXNnc3RyICJUcm9uZyBraGkgY+G7kSB0aMOqbSBuaMOzbSBz4buRICVkIgorCisjOiByZXNpemUvb25saW5lLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXMsIGFuZCBvbi1saW5lIHJlc2l6aW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gIgorInRoaXMgc3lzdGVtLlxuIgorbXNnc3RyICIiCisiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiDhu58gJXMgxJHGsOG7o2MgZ+G6r24ga+G6v3QgdsOgbyAlcywgdsOgIHTDrW5oIG7Eg25nIHRoYXkgxJHhu5VpIGvDrWNoIGPhu6EgIgorInRyw6puIGTDsm5nIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIHRyw6puIGjhu4cgdGjhu5FuZyBuw6B5LlxuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgImlub2RlcyAoJWxsdSkgbXVzdCBiZSBsZXNzIHRoYW4gJXUiCittc2dzdHIgIm7DunQgdGjDtG5nIHRpbiAoJWxsdSkgcGjhuqNpIG5o4buPIGjGoW4gJXUiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo2OTEKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MiCittc2dzdHIgImto4buRaSBkw6BuaCByacOqbmciCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo5MzYKK21zZ2lkICJtZXRhLWRhdGEgYmxvY2tzIgorbXNnc3RyICJraOG7kWkgc2nDqnVfZOG7r19saeG7h3UiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoxMDM5IHJlc2l6ZS9yZXNpemUyZnMuYzoxODM2Cittc2dpZCAibmV3IG1ldGEgYmxvY2tzIgorbXNnc3RyICJraOG7kWkgc2nDqnUgZOG7ryBsaeG7h3UgbeG7m2kiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoyMDU2Cittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbiEgIE5vIHNiIGluIGxhc3Qgc3VwZXJfc3BhcnNlIGJnP1xuIgorbXNnc3RyICJLaMO0bmcgYmFvIGdp4budIG7Dqm4geOG6o3kgcmEhIEtow7RuZyBjw7Mgc2IgdHJvbmcgc3VwZXJfc3BhcnNlIGJnP1xuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MjA2MQorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW4hICBVbmV4cGVjdGVkIG9sZF9kZXNjIGluIHN1cGVyX3NwYXJzZSBiZz9cbiIKK21zZ3N0ciAiIgorIktow7RuZyBiYW8gZ2nhu50gbsOqbiB44bqjeSByYSEgR+G6t3Agb2xkX2Rlc2Mga2jDtG5nIGPhuqduIHRyb25nIHN1cGVyX3NwYXJzZSBiZz9cbiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjIxMzkKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuOiByZXNpemUgaW5vZGUgY29ycnVwdCFcbiIKK21zZ3N0ciAiS2jDtG5nIGJhbyBnaeG7nSBuw6puIHjhuqN5IHJhOiBuw7p0IHRow7RuZyB0aW4gdGhheSDEkeG7lWkga8OtY2ggY+G7oSBi4buLIGjhu49uZyAhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMQorIywgZnV6enkKK21zZ2lkICJFWFQyRlMgTGlicmFyeSB2ZXJzaW9uIDEuNDIuMTMiCittc2dzdHIgIlRoxrAgdmnhu4duIEVYVDJGUyBwaGnDqm4gYuG6o24gMS40Mi4xMiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyX2ZpbHN5cyBzdHJ1Y3R1cmUiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gY+G6pXUgdHLDumMgZXh0Ml9maWxzeXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICJTYWkgc+G7kSBtw6B1IG5oaeG7h20gY2hvIGPhuqV1IHRyw7pjYmFkYmxvY2tzX2xpc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICJTYWkgc+G7kSBtw6B1IG5oaeG7h20gY2hvIGPhuqV1IHRyw7pjIGJhZGJsb2Nrc19pdGVyYXRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX3NjYW4gc3RydWN0dXJlIgorbXNnc3RyICJTYWkgc+G7kSBtw6B1IG5oaeG7h20gY2hvIGPhuqV1IHRyw7pjIGlub2RlX3NjYW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gY+G6pXUgdHLDumMgaW9fY2hhbm5lbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB1bml4IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJTYWkgc+G7kSBtw6B1IG5oaeG7h20gY2hvIGPhuqV1IHRyw7pjIHVuaXggaW9fY2hhbm5lbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19tYW5hZ2VyIHN0cnVjdHVyZSIKK21zZ3N0ciAiU2FpIHPhu5EgbcOgdSBuaGnhu4dtIGNobyBj4bqldSB0csO6YyBpb19tYW5hZ2VyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJsb2NrX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gY+G6pXUgdHLDumMgYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gY+G6pXUgdHLDumMgaW5vZGVfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGdlbmVyaWNfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiU2FpIHPhu5EgbcOgdSBuaGnhu4dtIGNobyBj4bqldSB0csO6YyBnZW5lcmljX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB0ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJTYWkgc+G7kSBtw6B1IG5oaeG7h20gY2hvIGPhuqV1IHRyw7pjIHRlc3QgaW9fY2hhbm5lbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBkaXJlY3RvcnkgYmxvY2sgbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gY+G6pXUgdHLDumMgZGFuaCBzw6FjaCBraOG7kWkgdGjGsCBt4bulYyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpY291bnQgc3RydWN0dXJlIgorbXNnc3RyICJTYWkgc+G7kSBtw6B1IG5oaeG7h20gY2hvIGPhuqV1IHRyw7pjIGljb3VudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBQb3dlcnF1ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJTYWkgc+G7kSBtw6B1IG5oaeG7h20gY2hvIGPhuqV1IHRyw7pjIFBvd2VycXVlc3QgaW9fY2hhbm5lIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDIgZmlsZSBzdHJ1Y3R1cmUiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gY+G6pXUgdHLDumMgdOG6rXAgdGluIGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgRXh0MiBJbWFnZSBIZWFkZXIiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gRXh0MiBJbWFnZSBIZWFkZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGUgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gY+G6pXUgdHLDumMgbsO6dCBpb19jaGFubmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IGhhbmRsZSIKK21zZ3N0ciAiU2FpIHPhu5EgbcOgdSBuaGnhu4dtIGNobyBjw6FuIG3hu58gcuG7mW5nIGV4dDQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyBudW1iZXIgaW4gc3VwZXItYmxvY2siCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSB0cm9uZyBzacOqdSBraOG7kWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMQorbXNnaWQgIkZpbGVzeXN0ZW0gcmV2aXNpb24gdG9vIGhpZ2giCittc2dzdHIgIlBoacOqbiBi4bqjbiBo4buHIHRo4buRbmcgdOG6rXAgdGluIHF1w6EgY2FvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzIKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHRvIGZpbGVzeXN0ZW0gb3BlbmVkIHJlYWQtb25seSIKK21zZ3N0ciAiVGjhu60gdmnhur90IHbDoG8gaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBtw6AgbsOzIGNo4buJIMSR4buNYyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMzCittc2dpZCAiQ2FuJ3QgcmVhZCBncm91cCBkZXNjcmlwdG9ycyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buNYyBtw7QgdOG6oyBuaMOzbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgbcO0IHThuqMgbmjDs20iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNQorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBibG9jayBiaXRtYXAiCittc2dzdHIgIkLhu5kgbcO0IHThuqMgbmjDs20gaOG7j25nOiBraOG7kWkgc2FpIGNobyBt4bqjbmcga2jhu5FpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzYKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgYml0bWFwIgorbXNnc3RyICJC4buZIG3DtCB04bqjIG5ow7NtIGjhu49uZzoga2jhu5FpIHNhaSBjaG8gbeG6o25nIG7DunQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNworbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiQuG7mSBtw7QgdOG6oyBuaMOzbSBo4buPbmc6IGto4buRaSBzYWkgY2hvIGLhuqNuZyBuw7p0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzgKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgbeG6o25nIOG6o25oIG7DunQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOQorbXNnaWQgIkNhbid0IHJlYWQgYW4gaW5vZGUgYml0bWFwIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhu41jIG3huqNuZyDhuqNuaCBuw7p0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDAKK21zZ2lkICJDYW4ndCB3cml0ZSBhIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBt4bqjbmcg4bqjbmgga2jhu5FpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDEKK21zZ2lkICJDYW4ndCByZWFkIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhu41jIG3huqNuZyDhuqNuaCBraOG7kWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MgorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIGLhuqNuZyBuw7p0IHRow7RuZyB0aW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MworbXNnaWQgIkNhbid0IHJlYWQgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMgYuG6o25nIG7DunQgdGjDtG5nIHRpbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ0Cittc2dpZCAiQ2FuJ3QgcmVhZCBuZXh0IGlub2RlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhu41jIG7DunQgdGnhur9wIHRoZW8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuZXhwZWN0ZWQgYmxvY2sgc2l6ZSIKK21zZ3N0ciAiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiBjw7Mga8OtY2ggY+G7oSBraOG7kWkgYuG6pXQgdGjGsOG7nW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDYKK21zZ2lkICJFWFQyIGRpcmVjdG9yeSBjb3JydXB0ZWQiCittc2dzdHIgIlRoxrAgbeG7pWMgZXh0MiDEkcOjIGjhu49uZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ3Cittc2dpZCAiQXR0ZW1wdCB0byByZWFkIGJsb2NrIGZyb20gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCByZWFkIgorbXNnc3RyICJUaOG7rSDEkeG7jWMga2jhu5FpIHThu6sgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBr4bq/dCBxdeG6oyBk4bqhbmcgbmfhuq9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDgKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIGJsb2NrIHRvIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgd3JpdGUiCittc2dzdHIgIlRo4butIGdoaSBraOG7kWkgdOG7m2kgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBr4bq/dCBxdeG6oyBk4bqhbmcgbmfhuq9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDkKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIHRoZSBkaXJlY3RvcnkiCittc2dzdHIgIktow7RuZyBjw7JuIGtow7RuZyBnaWFuIHRy4buRbmcgdHJvbmcgdGjGsCBt4bulYyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUwCittc2dpZCAiSW5vZGUgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgIk3huqNuZyBuw7p0IGtow7RuZyDEkcaw4bujYyB04bqjaSBsw6puIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKK21zZ2lkICJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiTeG6o25nIGto4buRaSBraMO0bmcgxJHGsOG7o2MgdOG6o2kgbMOqbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUyCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIiCittc2dzdHIgIlNhaSBz4buRIGzGsOG7o25nIG7DunQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJTYWkgc+G7kSBsxrDhu6NuZyBraOG7kWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NAorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIgorbXNnc3RyICJM4buXaSBu4buZaSBi4buZIHRyb25nIGV4dDJmc19leHBhbmRfZGlyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTUKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGJ1aWxkIHByb3Bvc2VkIGZpbGVzeXN0ZW0iCittc2dzdHIgIktow7RuZyDEkeG7pyBz4bupYyBjaOG7qWEgxJHhu4MgeMOieSBk4buxbmcgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBuaMawIMSR4buBIHh14bqldCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU2Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiU2FpIHPhu5EgbMaw4bujbmcga2jhu5FpIGNodXnhu4NuIHThu5tpIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU3Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICJTYWkgc+G7kSBsxrDhu6NuZyBraOG7kWkgY2h1eeG7g24gdOG7m2kgZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OAorbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAiCittc2dzdHIgIlNhaSBz4buRIGzGsOG7o25nIGto4buRaSBjaHV54buDbiB04bubaSBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIlNhaSBz4buRIGzGsOG7o25nIG7DunQgY2h1eeG7g24gdOG7m2kgZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjAKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIlNhaSBz4buRIGzGsOG7o25nIG7DunQgY2h1eeG7g24gdOG7m2kgZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCittc2dzdHIgIlNhaSBz4buRIGzGsOG7o25nIG7DunQgY2h1eeG7g24gdOG7m2kgZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjIKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBibG9jayBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIlRo4butIGNodXnhu4NuIGN14buRaSBj4bunYSBt4bqjbmcga2jhu5FpIHF1YSBwaOG6p24gY3Xhu5FpIHRo4bqtdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYzCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgaW5vZGUgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICJUaOG7rSBjaHV54buDbiBjdeG7kWkgY+G7p2EgbeG6o25nIG7DunQgcXVhIHBo4bqnbiBjdeG7kWkgdGjhuq10IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjQKK21zZ2lkICJJbGxlZ2FsIGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICJUw6xtIHRo4bqleSBraOG7kWkgZ2nDoW4gdGnhur9wIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKK21zZ2lkICJJbGxlZ2FsIGRvdWJseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiVMOsbSB0aOG6pXkga2jhu5FpIGdpw6FuIHRp4bq/cCDEkcO0aSBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY2Cittc2dpZCAiSWxsZWdhbCB0cmlwbHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIlTDrG0gdGjhuqV5IGto4buRaSBnacOhbiB0aeG6v3AgYmEga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NworbXNnaWQgIkJsb2NrIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiTeG6o25nIOG6o25oIGto4buRaSBraMO0bmcgZ2nhu5FuZyBuaGF1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjgKK21zZ2lkICJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIk3huqNuZyDhuqNuaCBuw7p0IGtow7RuZyBnaeG7kW5nIG5oYXUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OQorbXNnaWQgIklsbGVnYWwgb3IgbWFsZm9ybWVkIGRldmljZSBuYW1lIgorbXNnc3RyICJUw6puIHRoaeG6v3QgYuG7iyBraMO0bmcgaOG7o3AgbOG7hyBoYXkgZOG7iyBow6xuaCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcwCittc2dpZCAiQSBibG9jayBncm91cCBpcyBtaXNzaW5nIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJN4buZdCBuaMOzbSBraOG7kWkgYuG7iyBt4bqldCBt4buZdCBi4bqjbmcgbsO6dCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcxCittc2dpZCAiVGhlIGV4dDIgc3VwZXJibG9jayBpcyBjb3JydXB0IgorbXNnc3RyICJTacOqdSBraOG7kWkgZXh0MiBi4buLIGjhu49uZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcyCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisiU+G7kSBiw610IGNodW5nIGtow7RuZyBo4bujcCBs4buHIMSRxrDhu6NjIGNodXnhu4NuIHF1YSBjaG8gZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MworbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisiU+G7kSBiw610IGNodW5nIGtow7RuZyBo4bujcCBs4buHIMSRxrDhu6NjIGNodXnhu4NuIHF1YSBjaG8gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc0Cittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisiU+G7kSBiw610IGNodW5nIGtow7RuZyBo4bujcCBs4buHIMSRxrDhu6NjIGNodXnhu4NuIHF1YSBjaG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NQorbXNnaWQgIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiR+G6t3AgcXXDoSBuaGnhu4F1IGxpw6puIGvhur90IG3hu4FtIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzYKK21zZ2lkICJUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBub3QgaGFuZGxlIHRoaXMgY2FzZSIKK21zZ3N0ciAiSMOgbSBn4buNaSBuZ8aw4bujYyBjYWxsYmFjayBraMO0bmcgxJHGsOG7o2MgdGnhur9wIG5o4bqtbiB0cm9uZyB0csaw4budbmcgaOG7o3AgbsOgeSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc3Cittc2dpZCAiVGhlIGlub2RlIGlzIGZyb20gYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJOw7p0IHThu6sgbeG7mXQga2jhu5FpIHNhaSB0cm9uZyBi4bqjbmcgbsO6dCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc4Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKSIKK21zZ3N0ciAiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiBjw7MgdMOtbmggbsSDbmcga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIHJlYWQtb25seSBmZWF0dXJlKHMpIgorbXNnc3RyICJI4buHIHRo4buRbmcgdOG6rXAgdGluIGtow7RuZyBo4buXIHRy4bujIHTDrW5oIG7Eg25nIGNo4buJIMSR4buNYyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgwCittc2dpZCAiSU8gQ2hhbm5lbCBmYWlsZWQgdG8gc2VlayBvbiByZWFkIG9yIHdyaXRlIgorbXNnc3RyICJLw6puaCBJTyBn4bq3cCBs4buXaSBraGkgZGkgY2h1eeG7g24gduG7iyB0csOtIHRyw6puIHThuq1wIHRpbiBsw7pjIMSR4buNYyBoYXkgZ2hpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODEKK21zZ2lkICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIkzhu5dpIGPhuqVwIHBow6F0IHbDuW5nIG5o4bubIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkiCittc2dzdHIgIsSQ4buRaSBz4buRIGtow7RuZyBo4bujcCBs4buHIMSRxrDhu6NjIGNodXnhu4NuIHF1YSBjaG8gdGjGsCB2aeG7h24gcHJvZmlsZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgzCittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGJsb2NrIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuqVwIHBow6F0IGto4buRaSBjaG8ga2nhu4N1IGjhur8gdGjhu5FuZyB04bqtcCB0aW4gZXh0MiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg0Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGlub2RlIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuqVwIHBow6F0IG7DunQgY2hvIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gZXh0MiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg1Cittc2dpZCAiRXh0MiBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIk7DunQgZXh0MiBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCB0aMawIG3hu6VjIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODYKK21zZ2lkICJUb28gbWFueSByZWZlcmVuY2VzIGluIHRhYmxlIgorbXNnc3RyICJDw7MgcXXDoSBuaGnhu4F1IHRoYW0gY2hp4bq/dSB0cm9uZyBi4bqjbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NworbXNnaWQgIkZpbGUgbm90IGZvdW5kIGJ5IGV4dDJfbG9va3VwIgorbXNnc3RyICJU4bqtcCB0aW4ga2jDtG5nIHTDrG0gxJHGsOG7o2MgYuG7n2kgZXh0Ml9sb29rdXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OAorbXNnaWQgIkZpbGUgb3BlbiByZWFkLW9ubHkiCittc2dzdHIgIk3hu58gdOG6rXAgdGluIHRyb25nIGNo4bq/IMSR4buZIGNo4buJIGNobyDEkeG7jWMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OQorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiS2jhu5FpIHRoxrAgbeG7pWMgZXh0MiBraMO0bmcgdMOsbSB0aOG6pXkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MAorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJUaMawIG3hu6VjIGV4dDIgxJHDoyB04buTbiB04bqhaSBy4buTaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkxCittc2dpZCAiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iCittc2dzdHIgIkNo4bupYyBuxINuZyB0aMawIHZp4buHbiBleHQyIGNoxrBhIMSRxrDhu6NjIHRo4buxYyBoaeG7h24iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MgorbXNnaWQgIlVzZXIgY2FuY2VsIHJlcXVlc3RlZCIKK21zZ3N0ciAiTmfGsOG7nWkgZMO5bmcgecOqdSBj4bqndSBo4buneSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkzCittc2dpZCAiRXh0MiBmaWxlIHRvbyBiaWciCittc2dzdHIgIlThuq1wIHRpbiBleHQyIHF1w6EgbOG7m24iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NAorbXNnaWQgIlN1cHBsaWVkIGpvdXJuYWwgZGV2aWNlIG5vdCBhIGJsb2NrIGRldmljZSIKK21zZ3N0ciAiw4FwIGThu6VuZyB0aGnhur90IGLhu4sgam91cm5hbCBraMO0bmcgcGjhuqNpIHRoaeG6v3QgYuG7iyBraOG7kWkuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTUKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgc2nDqnUga2jhu5FpIG5o4bqtdCBrw70gKEpvdXJuYWwpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTYKK21zZ2lkICJKb3VybmFsIG11c3QgYmUgYXQgbGVhc3QgMTAyNCBibG9ja3MiCittc2dzdHIgIkpvdXJuYWwgcGjhuqNpIGPDsyDDrXQgbmjhuqV0IDEwMjQga2jhu5FpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTcKK21zZ2lkICJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iCittc2dzdHIgInBoacOqbiBi4bqjbiBqb3VybmFsIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTgKK21zZ2lkICJFcnJvciBsb2FkaW5nIGV4dGVybmFsIGpvdXJuYWwiCittc2dzdHIgIkzhu5dpIHThuqNpIGpvdXJuYWwgbeG7nyBy4buZbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OQorbXNnaWQgIkpvdXJuYWwgbm90IGZvdW5kIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgSm91cm5hbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMAorbXNnaWQgIkRpcmVjdG9yeSBoYXNoIHVuc3VwcG9ydGVkIgorbXNnc3RyICJUaMawIG3hu6VjIGLhuqNuZyBixINtIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAxCittc2dpZCAiSWxsZWdhbCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJT4buRIGto4buRaSB0aHXhu5ljIHTDrW5oIG3hu58gcuG7mW5nIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAyCittc2dpZCAiQ2Fubm90IGNyZWF0ZSBmaWxlc3lzdGVtIHdpdGggcmVxdWVzdGVkIG51bWJlciBvZiBpbm9kZXMiCittc2dzdHIgIktow7RuZyB0aOG7gyB04bqhbyBo4buHIHRo4buRbmcgdOG6rXAgdGluIHbhu5tpIHPhu5EgbsO6dCDEkcOjIHnDqnUgY+G6p3UiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDMKK21zZ2lkICJFMmltYWdlIHNuYXBzaG90IG5vdCBpbiB1c2UiCittc2dzdHIgIkLhuqNuIGNo4bulcCBuaGFuaCBFMmltYWdlIGtow7RuZyDEkcaw4bujYyBz4butIGThu6VuZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNAorbXNnaWQgIlRvbyBtYW55IHJlc2VydmVkIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzIgorbXNnc3RyICJDw7MgcXXDoSBuaGnhu4F1IGto4buRaSBtw7QgdOG6oyBuaMOzbSBk4buxIHRy4buvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA1Cittc2dpZCAiUmVzaXplIGlub2RlIGlzIGNvcnJ1cHQiCittc2dzdHIgIlRoYXkgxJHhu5VpIGvDrWNoIHRoxrDhu5tjIG7DunQgYuG7iyB0aOG6pXQgYuG6oWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDYKK21zZ2lkICJUcmllZCB0byBzZXQgYmxvY2sgYm1hcCB3aXRoIG1pc3NpbmcgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIlRo4butIMSR4bq3dCBraOG7kWkgYm1hcCB24bubaSBraOG7kWkgZ2nDoW4gdGnhur9wIGLhu4sgbeG6pXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDcKK21zZ2lkICJUREI6IFN1Y2Nlc3MiCittc2dzdHIgIlREQjogVGjDoG5oIGPDtG5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA4Cittc2dpZCAiVERCOiBDb3JydXB0IGRhdGFiYXNlIgorbXNnc3RyICJUREI6IEPGoSBz4bufIGThu68gbGnhu4d1IGjhu49uZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOQorbXNnaWQgIlREQjogSU8gRXJyb3IiCittc2dzdHIgIlREQjogSU8gTOG7l2kiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTAKK21zZ2lkICJUREI6IExvY2tpbmcgZXJyb3IiCittc2dzdHIgIlREQjogTOG7l2kga2jDs2EiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTEKK21zZ2lkICJUREI6IE91dCBvZiBtZW1vcnkiCittc2dzdHIgIlREQjogSOG6v3QgYuG7mSBuaOG7myIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMgorbXNnaWQgIlREQjogUmVjb3JkIGV4aXN0cyIKK21zZ3N0ciAiVERCOiBC4bqjbiBnaGkgxJHDoyBz4bq1biBjw7MiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTMKK21zZ2lkICJUREI6IExvY2sgZXhpc3RzIG9uIG90aGVyIGtleXMiCittc2dzdHIgIlREQjogS2hvw6EgxJHDoyB04buTbiB04bqhaSB0csOqbiBjaMOsYSBraG/DoSBraMOhYyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNAorbXNnaWQgIlREQjogSW52YWxpZCBwYXJhbWV0ZXIiCittc2dzdHIgIlREQjogxJDhu5FpIHPhu5Ega2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTUKK21zZ2lkICJUREI6IFJlY29yZCBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiVERCOiBC4bqjbiBnaGkga2jDtG5nIHThu5NuIHThuqFpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE2Cittc2dpZCAiVERCOiBXcml0ZSBub3QgcGVybWl0dGVkIgorbXNnc3RyICJUREI6IEtow7RuZyBjw7MgcXV54buBbiBnaGkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTcKK21zZ2lkICJFeHQyZnMgZGlyZWN0b3J5IGJsb2NrIGxpc3QgaXMgZW1wdHkiCittc2dzdHIgIkRhbmggc8OhY2gga2jhu5FpIHRoxrAgbeG7pWMgZXh0MmZzIGLhu4sgcuG7l25nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE4Cittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgYSBibG9jayBtYXBwaW5nIHZpYSBhIHJlYWQtb25seSBibG9jayBpdGVyYXRvciIKK21zZ3N0ciAiVGjhu60gY2jhu4luaCBz4butYSBt4buZdCBt4bqjbmcga2jhu5FpIHRow7RuZyBxdWEgYuG7mSBs4bq3cCBraOG7kWkgY2jhu4kgxJHhu41jIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBzYXZlZCBwYXRoIgorbXNnc3RyICJTYWkgc+G7kSBuaGnhu4dtIG3DoHUgY2hvIG3hu58gcuG7mW5nIGV4dDQgZ2hpIGzhuqFpIMSRxrDhu51uZyBk4bqrbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGdlbmVyaWMgYml0bWFwIgorbXNnc3RyICJTYWkgc+G7kSBuaGnhu4dtIG3DoHUgY2hvIGJpdG1hcCBjaHVuZyA2NC1iaXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBibG9jayBiaXRtYXAiCittc2dzdHIgIlNhaSBz4buRIG5oaeG7h20gbcOgdSBjaG8gYml0bWFwIGto4buRaSA2NC1iaXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBpbm9kZSBiaXRtYXAiCittc2dzdHIgIlNhaSBz4buRIG5oaeG7h20gbcOgdSBjaG8gYml0bWFwIG7DunQgNjQtYml0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xMyIKK21zZ3N0ciAiU2FpIHPhu5Egbmhp4buHbSBtw6B1IC0tLSBSRVNFUlZFRF8xMyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTQiCittc2dzdHIgIlNhaSBz4buRIG5oaeG7h20gbcOgdSAtLS0gUkVTRVJWRURfMTQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE1IgorbXNnc3RyICJTYWkgc+G7kSBuaGnhu4dtIG3DoHUgLS0tIFJFU0VSVkVEXzE1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNiIKK21zZ3N0ciAiU2FpIHPhu5Egbmhp4buHbSBtw6B1IC0tLSBSRVNFUlZFRF8xNiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTciCittc2dzdHIgIlNhaSBz4buRIG5oaeG7h20gbcOgdSAtLS0gUkVTRVJWRURfMTciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE4IgorbXNnc3RyICJTYWkgc+G7kSBuaGnhu4dtIG3DoHUgLS0tIFJFU0VSVkVEXzE4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOSIKK21zZ3N0ciAiU2FpIHPhu5Egbmhp4buHbSBtw6B1IC0tLSBSRVNFUlZFRF8xOSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMAorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGhlYWRlciIKK21zZ3N0ciAiUGjhuqduIMSR4bqndSBleHRlbnQgYuG7iyBo4buPbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzEKK21zZ2lkICJDb3JydXB0IGV4dGVudCBpbmRleCIKK21zZ3N0ciAiQ2jhu4kgc+G7kSBleHRlbnQgYuG7iyBo4buPbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzIKK21zZ2lkICJDb3JydXB0IGV4dGVudCIKK21zZ3N0ciAiZXh0ZW50IGjhu49uZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMworbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gZXh0ZW50IG1hcCIKK21zZ3N0ciAiS2jDtG5nIGPDsm4ga2hv4bqjbmcgxJHEqWEgdHLhu5FuZyBjaG8gbeG6o25nIGV4dGVudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNAorbXNnaWQgIklub2RlIGRvZXMgbm90IHVzZSBleHRlbnRzIgorbXNnc3RyICJJbm9kZSBkb2VzIG5vdCB1c2UgZXh0ZW50cyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNQorbXNnaWQgIk5vICduZXh0JyBleHRlbnQiCittc2dzdHIgIktow7RuZyBjw7MgZXh0ZW50IOKAnHRp4bq/cCB0aGVv4oCdIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM2Cittc2dpZCAiTm8gJ3ByZXZpb3VzJyBleHRlbnQiCittc2dzdHIgIktow7RuZyBjw7MgZXh0ZW50IOKAnGxp4buBbiB0csaw4bubY+KAnSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNworbXNnaWQgIk5vICd1cCcgZXh0ZW50IgorbXNnc3RyICJLaMO0bmcgY8OzIGV4dGVudCDigJxsw6pu4oCdIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAiS2jDtG5nIGPDsyBleHRlbnQg4oCceHXhu5FuZ+KAnSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOQorbXNnaWQgIk5vIGN1cnJlbnQgbm9kZSIKK21zZ3N0ciAiS2jDtG5nIG7DunQgaGnhu4duIGjDoG5oIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQwCittc2dpZCAiRXh0MmZzIG9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJUaGFvIHTDoWMgRXh0MmZzIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQxCittc2dpZCAiTm8gcm9vbSB0byBpbnNlcnQgZXh0ZW50IGluIG5vZGUiCittc2dzdHIgIktow7RuZyBjw7JuIHBow7JuZyBuw6BvIMSR4buDIGNow6huIGV4dGVudCB0cm9uZyBuw7p0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQyCittc2dpZCAiU3BsaXR0aW5nIHdvdWxkIHJlc3VsdCBpbiBlbXB0eSBub2RlIgorbXNnc3RyICJQaMOibiB0w6FjaCBjw7MgdGjhu4MgbMOgbSBuZ3V5w6puIG5ow6JuIG7DunQgYuG7iyBy4buXbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDMKK21zZ2lkICJFeHRlbnQgbm90IGZvdW5kIgorbXNnc3RyICJFeHRlbnQga2jDtG5nIHTDrG0gdGjhuqV5IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIlRoYW8gdMOhYyBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyBjaG8gbsO6dCBjaOG7qWEgcGjhuqduIG3hu58gcuG7mW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ1Cittc2dpZCAiRXh0ZW50IGxlbmd0aCBpcyBpbnZhbGlkIgorbXNnc3RyICLEkOG7mSBkw6BpIGvDrWNoIHRoxrDhu5tjIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ2Cittc2dpZCAiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIKK21zZ3N0ciAiS8OqbmggSS9PIGtow7RuZyBo4buXIHRy4bujIHPhu5Ega2jhu5FpIDY0LWLDrXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDcKK21zZ2lkICJDYW4ndCBjaGVjayBpZiBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgZHVlIHRvIG1pc3NpbmcgbXRhYiBmaWxlIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGtp4buDbSB0cmEgbuG6v3UgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiDEkcaw4bujYyBn4bqvbiBi4bufaSB2w6wgbeG6pXQgdOG6rXAgdGluIG10YWIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDgKK21zZ2lkICJGaWxlc3lzdGVtIHRvbyBsYXJnZSB0byB1c2UgbGVnYWN5IGJpdG1hcHMiCittc2dzdHIgIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gcXXDoSBs4bubbiDEkeG7gyBjw7MgdGjhu4Mgc+G7rSBk4bulbmcgbeG6o25nIGtp4buDdSBjxakiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDkKK21zZ2lkICJNTVA6IGludmFsaWQgbWFnaWMgbnVtYmVyIgorbXNnc3RyICJNTVA6IHNhaSBz4buRIG3DoHUgbmhp4buHbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MAorbXNnaWQgIk1NUDogZGV2aWNlIGN1cnJlbnRseSBhY3RpdmUiCittc2dzdHIgIk1NUDogdGhp4bq/dCBi4buLIGhp4buHbiB0aOG7nWkgaG/huqF0IMSR4buZbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICJNTVA6IGZzY2sgxJFhbmcgY2jhuqF5IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUyCittc2dpZCAiTU1QOiBibG9jayBudW1iZXIgYmV5b25kIGZpbGVzeXN0ZW0gcmFuZ2UiCittc2dzdHIgIk1NUDogc+G7kSBraOG7kWkgbuG6sW0geGEgbmdvw6BpIHbDuW5nIGPhu6dhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTMKK21zZ2lkICJNTVA6IHVuZGVyZ29pbmcgYW4gdW5rbm93biBvcGVyYXRpb24iCittc2dzdHIgIk1NUDogdHLhuqNpIHF1YSBt4buZdCB0aGFvIHTDoWMgY2jGsGEgxJHGsOG7o2MgYmnhur90IMSR4bq/biIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NAorbXNnaWQgIk1NUDogZmlsZXN5c3RlbSBzdGlsbCBpbiB1c2UiCittc2dzdHIgIk1NUDogaOG7hyB0aOG7kW5nIHThuq1wIHRpbiB24bqrbiDEkWFuZyDEkcaw4bujYyBz4butIGThu6VuZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NQorbXNnaWQgIk1NUDogb3BlbiB3aXRoIE9fRElSRUNUIGZhaWxlZCIKK21zZ3N0ciAiTU1QOiBt4bufIHbhu5tpIE9fRElSRUNUIGfhurdwIGzhu5dpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU2Cittc2dpZCAiQmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBzaXplIGluY29ycmVjdCIKK21zZ3N0ciAiS8OtY2ggdGjGsOG7m2MgYuG7mSBtw7QgdOG6oyBuaMOzbSBraOG7kWkga2jDtG5nICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NworbXNnaWQgIklub2RlIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGlub2RlIgorbXNnc3RyICJU4buVbmcga2nhu4NtIG7DunQga2jDtG5nIGto4bubcCB24bubaSBuw7p0ICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OAorbXNnaWQgIklub2RlIGJpdG1hcCBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBiaXRtYXAiCittc2dzdHIgIlThu5VuZyBraeG7g20gTeG6o25nIOG6o25oIG7DunQga2jDtG5nIGto4bubcCBuaGF1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU5Cittc2dpZCAiRXh0ZW50IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGV4dGVudCBibG9jayIKK21zZ3N0ciAiVOG7lW5nIGtp4buDbSB0cmEga2jhu5FpIG3hu58gcuG7mW5nIGtow7RuZyBraOG7m3AgduG7m2kga2jhu5FpIG3hu58gcuG7mW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYwCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGRvZXMgbm90IGhhdmUgc3BhY2UgZm9yIGNoZWNrc3VtIgorbXNnc3RyICJLaOG7kWkgdGjGsCBt4bulYyBraMO0bmcgY8OzIGNo4buXIGTDoG5oIGNobyB04buVbmcga2nhu4NtIHRyYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MQorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgIlThu5VuZyBraeG7g20gdHJhIGto4buRaSB0aMawIG3hu6VjIGtow7RuZyBraOG7m3AgduG7m2kga2jhu5FpIHRoxrAgbeG7pWMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjIKK21zZ2lkICJFeHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYmxvY2siCittc2dzdHIgIlThu5VuZyBraeG7g20gdHJhIGto4buRaSB0aHXhu5ljIHTDrW5oIG3hu58gcuG7mW5nIGtow7RuZyBraOG7m3AgduG7m2kga2jhu5FpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYzCittc2dpZCAiU3VwZXJibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBzdXBlcmJsb2NrIgorbXNnc3RyICJU4buVbmcga2nhu4NtIHNpw6p1IGto4buRaSBraMO0bmcga2jhu5twIHbhu5tpIHNpw6p1IGto4buRaSAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjQKK21zZ2lkICJVbmtub3duIGNoZWNrc3VtIGFsZ29yaXRobSIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSB0aHXhuq10IHRvw6FuIGLEg20gdOG7lW5nIGtp4buDbSAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjUKK21zZ2lkICJNTVAgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggTU1QIGJsb2NrIgorbXNnc3RyICJU4buVbmcga2nhu4NtIHRyYSBraOG7kWkgTU1QIGtow7RuZyBraOG7m3AgduG7m2kga2jhu5FpIE1NUCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NgorbXNnaWQgIkV4dDIgZmlsZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiVOG6rXAgdGluIGV4dDIgxJHDoyBz4bq1biBjw7MgcuG7k2kiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjExCittc2dpZCAiUHJvZmlsZSB2ZXJzaW9uIDAuMCIKK21zZ3N0ciAiUHJvZmlsZSBwaGnDqm4gYuG6o24gMC4wIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX25vZGUiCittc2dzdHIgIkdpw6EgdHLhu4sgc+G7kSBt4bqndSBuaGnhu4dtIHNhaSB0cm9uZyBwcm9maWxlX25vZGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEzCittc2dpZCAiUHJvZmlsZSBzZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiUGjhuqduIGPhu6dhIHByb2ZpbGUga2jDtG5nIHTDrG0gdGjhuqV5IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNAorbXNnaWQgIlByb2ZpbGUgcmVsYXRpb24gbm90IGZvdW5kIgorbXNnc3RyICJN4buRaSBxdWFuIGjhu4cgcHJvZmlsZSBraMO0bmcgdMOsbSB0aOG6pXkiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE1Cittc2dpZCAiQXR0ZW1wdCB0byBhZGQgYSByZWxhdGlvbiB0byBub2RlIHdoaWNoIGlzIG5vdCBhIHNlY3Rpb24iCittc2dzdHIgIlRo4butIHRow6ptIHF1YW4gaOG7hyB2w6BvIG7DunQgbcOgIG7DsyBraMO0bmcgbMOgIG3hu5l0IGNoxrDGoW5nIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNgorbXNnaWQgIkEgcHJvZmlsZSBzZWN0aW9uIGhlYWRlciBoYXMgYSBub24temVybyB2YWx1ZSIKK21zZ3N0ciAiUGjhuqduIMSR4bqndSBjaMawxqFuZyBwcm9maWxlIHBo4bqjaSBjw7MgZ2nDoSB0cuG7iyBraMOhYyBraMO0bmciCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE3Cittc2dpZCAiQmFkIGxpbmtlZCBsaXN0IGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiRGFuaCBzw6FjaCBsacOqbiBr4bq/dCBraMO0bmcgxJHDum5nIHRyb25nIGPhuqV1IHRyw7pjIHByb2ZpbGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE4Cittc2dpZCAiQmFkIGdyb3VwIGxldmVsIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiTeG7qWMgbmjDs20ga2jDtG5nIMSRw7puZyB0cm9uZyBj4bqldSB0csO6YyBwcm9maWxlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOQorbXNnaWQgIkJhZCBwYXJlbnQgcG9pbnRlciBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIkNvbiB0cuG7jyDEkeG6v24gY2hhIGtow7RuZyDEkcO6bmcgdHJvbmcgY+G6pXUgdHLDumMgcHJvZmlsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZSBpdGVyYXRvciIKK21zZ3N0ciAiR2nDoSB0cuG7iyBz4buRIG3huqd1IG5oaeG7h20gc2FpIHRyb25nIHByb2ZpbGUgaXRlcmF0b3IiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIxCittc2dpZCAiQ2FuJ3Qgc2V0IHZhbHVlIG9uIHNlY3Rpb24gbm9kZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4bq3dCBnacOhIHRy4buLIHRyw6puIG7DunQgY+G7p2EgxJFv4bqhbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCittc2dzdHIgIlRoYW0gc+G7kSBraMO0bmcgaOG7o3AgbOG7hyDEkcaw4bujYyBjaHV54buDbiBxdWEgY2hvIHRoxrAgdmnhu4duIHByb2ZpbGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIlRo4butIHZp4bq/dCB2w6BvIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gcHJvZmlsZSBjaOG7iSDEkeG7jWMiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI0Cittc2dpZCAiUHJvZmlsZSBzZWN0aW9uIGhlYWRlciBub3QgYXQgdG9wIGxldmVsIgorbXNnc3RyICJQaOG6p24gxJHhuqd1IGNoxrDGoW5nIHByb2ZpbGUga2jDtG5nIOG7nyBt4bupYyBjYW8gbmjhuqV0IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNQorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIgorbXNnc3RyICJDw7ogcGjDoXAgbOG7l2kgdHJvbmcga2hhaSBiw6FvIHBo4bqnbiDEkeG6p3UgY2jGsMahbmcgcHJvZmlsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjYKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSByZWxhdGlvbiIKK21zZ3N0ciAiU2FpIGPDuiBwaMOhcCB0cm9uZyBxdWFuIGjhu4cgcHJvZmlsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjcKK21zZ2lkICJFeHRyYSBjbG9zaW5nIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIkLhu5UgeHVuZyBk4bqldSBuZ2/hurdjIMO0bSDEkcOzbmcgdHJvbmcgcHJvZmlsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjgKK21zZ2lkICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiVGhp4bq/dSBt4bqldCBk4bqldSBuZ2/hurdjIMO0bSBt4bufIHRyb25nIHByb2ZpbGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI5Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfdCIKK21zZ3N0ciAiU+G7kSBuaGnhu4dtIG3DoHUgc2FpIHRyb25nIHByb2ZpbGVfdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9zZWN0aW9uX3QiCittc2dzdHIgIkdpw6EgdHLhu4sgc+G7kSBt4bqndSBuaGnhu4dtIHNhaSB0cm9uZyBwcm9maWxlX3NlY3Rpb25fdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzEKK21zZ2lkICJJdGVyYXRpb24gdGhyb3VnaCBhbGwgdG9wIGxldmVsIHNlY3Rpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTOG6t3AgxJFpIGzhurdwIGzhuqFpIHF1YSB0b8OgbiBi4buZIGNoxrDGoW5nIOG7nyBt4bupYyBjYW8gbmjhuqV0IGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMgorbXNnaWQgIkludmFsaWQgcHJvZmlsZV9zZWN0aW9uIG9iamVjdCIKK21zZ3N0ciAixJDhu5FpIHTGsOG7o25nIHByb2ZpbGVfc2VjdGlvbiBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzMKK21zZ2lkICJObyBtb3JlIHNlY3Rpb25zIgorbXNnc3RyICJLaMO0bmcgY8OybiB0aMOqbSBwaOG6p24gbsOgbyBu4buvYSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzQKK21zZ2lkICJCYWQgbmFtZXNldCBwYXNzZWQgdG8gcXVlcnkgcm91dGluZSIKK21zZ3N0ciAiVMOqbiBzYWkgxJHGsOG7o2MgY2h1eeG7g24gcXVhIGNobyB0aOG7pyB04bulYyB0cnV5IHbhuqVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNQorbXNnaWQgIk5vIHByb2ZpbGUgZmlsZSBvcGVuIgorbXNnc3RyICJLaMO0bmcgbeG7nyB04bqtcCB0aW4gcHJvZmlsZSBuw6BvIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX2ZpbGVfdCIKK21zZ3N0ciAiR2nDoSB0cuG7iyBz4buRIG3huqd1IG5oaeG7h20gc2FpIHRyb25nIHByb2ZpbGVfZmlsZV90IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNworbXNnaWQgIkNvdWxkbid0IG9wZW4gcHJvZmlsZSBmaWxlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyB04bqtcCB0aW4gcHJvZmlsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzgKK21zZ2lkICJTZWN0aW9uIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJQaOG6p24gxJHDoyB04buTbiB04bqhaSBy4buTaSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzkKK21zZ2lkICJJbnZhbGlkIGJvb2xlYW4gdmFsdWUiCittc2dzdHIgIkdpw6EgdHLhu4sgbMO0LWfDrWMga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQwCittc2dpZCAiSW52YWxpZCBpbnRlZ2VyIHZhbHVlIgorbXNnc3RyICJHacOhIHRy4buLIG5ndXnDqm4ga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQxCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCittc2dzdHIgIkdpw6EgdHLhu4sgc+G7kSBt4bqndSBuaGnhu4dtIHNhaSB0cm9uZyBwcm9maWxlX2ZpbGVfZGF0YV90IgorCisjfiBtc2dpZCAiIgorI34gIlxiXGJcYlxiXGJcYlxiXGJDb3BpZWQgJWxsdSAvICVsbHUgYmxvY2tzICglbGx1JSUpIGluICVzIGF0ICUuMmYgTUIvIgorI34gInMgICAgICAgXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcYlxiXGJcYlxiXGJcYlxixJDDoyBjaMOpcCAlbGx1IC8gJWxsdSBraOG7kWkgKCVsbHUlJSkgdHJvbmcgJXMgdOG7kWMgxJHhu5kgJS4yZiBNQi8iCisjfiAicyAgICAgICBcbiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJXYXJuaW5nOiB0aGUgcXVvdGEgZmVhdHVyZSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuIgorI34gIlNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9RdW90YSBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiQ+G6o25oIGLDoW86IMSR4bq3YyB0w61uaCBo4bqhbiBuZ+G6oWNoIHbhuqtuIMSRYW5nIHRyb25nIHF1w6EgdHLDrG5oIHBow6F0IHRyaeG7g25cbiIKKyN+ICJYZW0gaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvUXVvdGEgxJHhu4MgYmnhur90IGNoaSB0aeG6v3RcbiIKKyN+ICJcbiIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICVzIC0tLSAlc1xuIgorI34gbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgY8OhYyB0aMO0bmcgdGluIHbhu4EgJXMg4oCUICVzXG4iCisKKyN+IG1zZ2lkICJDbGVhcmluZyBleHRlbnQgZmxhZyBub3Qgc3VwcG9ydGVkIG9uICVzIgorI34gbXNnc3RyICJDaOG7qWMgbsSDbmcgeG/DoSBz4bqhY2ggY+G7nSB04bqnbSBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyB0csOqbiAlcyIKKworI34gbXNnaWQgIiIKKyN+ICIlczogVGhlIGNvbWJpbmF0aW9uIG9mIGZsZXhfYmcgYW5kXG4iCisjfiAiXHQhcmVzaXplX2lub2RlIGZlYXR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgcmVzaXplMmZzLlxuIgorI34gbXNnc3RyICIiCisjfiAiJXM6IHThu5UgaOG7o3AgaGFpIHTDrW5oIG7Eg25nIGZsZXhfYmcgdsOgICFyZXNpemVfaW5vZGVcbiIKKyN+ICLEkeG7gXUga2jDtG5nIMSRxrDhu6NjIHJlc2l6ZTJmcyBo4buXIHRy4bujLlxuIgorCisjfiBtc2dpZCAiQGcgJWcgQGIgQEIgdW5pbml0aWFsaXplZCBidXQgQGkgQEIgaW4gdXNlLlxuIgorI34gbXNnc3RyICJAQiBAYiBj4bunYSBAZyAlZyBjaMawYSBraOG7n2kgdOG6oW8gbmjGsG5nIMSRYW5nIGTDuW5nIEBCIEBpLlxuIgorCisjfiBtc2dpZCAiQGkgJWkgc2hvdWxkIG5vdCBoYXZlIEVPRkJMT0NLU19GTCBzZXQgKHNpemUgJUlzLCBsYmxrICVyKVxuIgorI34gbXNnc3RyICJAaSAlaSBraMO0bmcgbsOqbiBs4bqtcCBFT0ZCTE9DS1NfRkwgKGvDrWNoIGPhu6EgJUlzLCBsYmxrICVyKVxuIgorCisjfiBtc2dpZCAiQ291bGRuJ3QgZGV0ZXJtaW5lIGpvdXJuYWwgc2l6ZSIKKyN+IG1zZ3N0ciAiS2jDtG5nIHRo4buDIHjDoWMgxJHhu4tuaCBrw61jaCBj4buhIG5o4bqtdCBrw70iCisKKyN+IG1zZ2lkICI8VGhlIEFDTCBpbmRleCBpbm9kZT4iCisjfiBtc2dzdHIgIjxuw7p0IHRow7RuZyB0aW4gY2jhu4kgbeG7pWMgQUNMPiIKKworI34gbXNnaWQgIjxUaGUgQUNMIGRhdGEgaW5vZGU+IgorI34gbXNnc3RyICI8bsO6dCB0aMO0bmcgdGluIGThu68gbGnhu4d1IEFDTD4iCisKKyN+IG1zZ2lkICJzaG9ydCB3cml0ZSAob25seSAlZCBieXRlcykgZm9yIHdyaXRpbmcgaW1hZ2UgaGVhZGVyIgorI34gbXNnc3RyICJnaGkgbmfhuq9uIChjaOG7iSAlZCBieXRlKSDEkeG7gyBnaGkgcGjhuqduIMSR4bqndSDhuqNuaCIKKworI34gbXNnaWQgImludmFsaWQgZnJhZ21lbnQgc2l6ZSAtICVzIgorI34gbXNnc3RyICJj4buhIMSRb+G6oW4ga2jDtG5nIGjhu6NwIGzhu4cg4oCUICVzIgorCisjfiBtc2dpZCAiV2FybmluZzogZnJhZ21lbnRzIG5vdCBzdXBwb3J0ZWQuICBJZ25vcmluZyAtZiBvcHRpb25cbiIKKyN+IG1zZ3N0ciAiQ+G6o25oIGLDoW86IGtow7RuZyBo4buXIHRy4bujIMSRb+G6oW4gbsOqbiBi4buPIHF1YSB0w7l5IGNo4buNbiDigJwtZuKAnVxuIgorCisjfiBtc2dpZCAiQ2FsbGluZyBCTEtESVNDQVJEIGZyb20gJWxsdSB0byAlbGx1ICIKKyN+IG1zZ3N0ciAixJBhbmcgZ+G7jWkgQkxLRElTQ0FSRCB04burICVsbHUgxJHhur9uICVsbHUgIgorCisjfiBtc2dpZCAic3VjY2VlZGVkLlxuIgorI34gbXNnc3RyICLEkcOjIHRow6BuaCBjw7RuZy5cbiIKKworI34gbXNnaWQgIkpvdXJuYWwgTk9UIHJlbW92ZWRcbiIKKyN+IG1zZ3N0ciAiQ0jGr0EgZ+G7oSBi4buPIG5o4bqtdCBrw71cbiIKKworI34gbXNnaWQgIiNcdFx0ICV1IC0+ICV1ICglZClcbiIKKyN+IG1zZ3N0ciAiI1x0XHQgJXUgLT4gJXUgKCVkKVxuIgpkaWZmIC0tZ2l0IGEvcG8vemhfQ04uZ21vIGIvcG8vemhfQ04uZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYzk3MWUKLS0tIC9kZXYvbnVsbAorKysgYi9wby96aF9DTi5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vemhfQ04ucG8gYi9wby96aF9DTi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjRkMWY5Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vemhfQ04ucG8KQEAgLTAsMCArMSw2Nzg5IEBACisjIENoaW5lc2UgKHNpbXBsaWZpZWQpIHRyYW5zbGF0aW9uIGZvciBlMmZzcHJvZ3MuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4KKyMgRGFyayBSYXZlbiA8ZHJkYXJrcmF2ZW5AZ21haWwuY29tPiwgMjAwOSwgMjAxMCwgMjAxMQorIworIy4gVGhlIHN0cmluZ3MgaW4gZTJmc2NrJ3MgcHJvYmxlbS5jIGNhbiBiZSB2ZXJ5IGhhcmQgdG8gdHJhbnNsYXRlLAorIy4gc2luY2UgdGhlIHN0cmluZ3MgYXJlIGV4cGFuZGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gIEZpcnN0IG9mIGFsbCwKKyMuIHRoZXJlIGlzIGFuIEAtZXhwYW5zaW9uLCB3aGVyZSBzdHJpbmdzIGxpa2UgIkBpIiBhcmUgZXhwYW5kZWQgdG8KKyMuICJpbm9kZSIsIGFuZCBzbyBvbi4gIEluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0cmFuc2xhdG9ycywgdGhlCisjLiBlMmZzcHJvZ3MgcG8gdGVtcGxhdGUgZmlsZSBoYXMgYmVlbiBlbmhhbmNlZCB3aXRoIGNvbW1lbnRzIHRoYXQgc2hvdworIy4gdGhlIEAtZXhwYW5zaW9uLCBmb3IgdGhlIHN0cmluZ3MgaW4gdGhlIHByb2JsZW0uYyBmaWxlLgorIy4KKyMuIFRyYW5zbGF0b3JzIGFyZSBmcmVlIHRvIHVzZSB0aGUgQC1leHBhbnNpb24gZmFjaWxpdHkgaWYgdGhleSBzbworIy4gY2hvb3NlLCBieSBwcm92aWRpbmcgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGluIGUyZnNjay9tZXNzYWdlLmMuCisjLiBUaGVzZSB0cmFuc2xhdGlvbiBjYW4gY29tcGxldGVseSByZXBsYWNlIGFuIGV4cGFuc2lvbjsgZm9yIGV4YW1wbGUsCisjLiBpZiAiYmJsb2NrIiAod2hpY2ggaW5kaWNhdGVkIHRoYXQgIkBiIiB3b3VsZCBiZSBleHBhbmRlZCB0byAiYmxvY2siKQorIy4gaXMgdHJhbnNsYXRlZCBhcyAiZGRhdGVudmVybHVzdCIsIHRoZW4gIkBkIiB3aWxsIGJlIGV4cGFuZGVkIHRvCisjLiAiZGF0ZW52ZXJsdXN0Ii4gIEFsdGVybmF0aXZlbHksIHRyYW5zbGF0b3JzIGNhbiBzaW1wbHkgbm90IHVzZSB0aGUKKyMuIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGF0IGFsbC4KKyMuCisjLiBUaGUgc2Vjb25kIGV4cGFuc2lvbiB3aGljaCBpcyBkb25lIGZvciBlMmZzY2sncyBwcm9ibGVtLmMgbWVzc2FnZXMgaXMKKyMuIGEgZHluYW1pYyAlLWV4cGFuc2lvbiwgd2hpY2ggZXhwYW5kcyAlaSBhcyBhbiBpbm9kZSBudW1iZXIsIGFuZCBzbworIy4gb24uICBBIHRhYmxlIG9mIHRoZXNlIGV4cGFuc2lvbnMgY2FuIGJlIGZvdW5kIGJlbG93LiAgTm90ZSB0aGF0CisjLiAlLWV4cHJlc3Npb25zIHRoYXQgYmVnaW4gd2l0aCAiJUQiIGFuZCAiJUkiIGFyZSB0d28tY2hhcmFjdGVyCisjLiBleHBhbnNpb25zOyBzbyBmb3IgZXhhbXBsZSwgIiVJdSIgZXhwYW5kcyB0byB0aGUgaW5vZGUncyB1c2VyIGlkCisjLiBvd25lcnNoaXAgZmllbGQgKGlub2RlLT5pX3VpZCkuICBBbHNvIHRoZSAiJUIiIGV4cGFuc2lvbiBpcyBzcGVjaWFsOgorIy4gaXQgY2FuIGV4cGFuZCB0byBlaXRoZXIgdGhlIHN0cmluZyAiaW5kaXJlY3QgYmxvY2siIChwb3NzaWJseSBwcmVjZWRlZAorIy4gYnkgdGhlIHdvcmQgImRvdWJsZSIgb3IgInRyaXBsZSIpLCBvciB0aGUgc3RyaW5nICJibG9jayAjIiBpbW1lZGlhdGVseQorIy4gZm9sbG93ZWQgYnkgYW4gaW50ZWdlciBpbmRpY2F0aW5nIGEgYmxvY2sgc2VxdWVuY2UgbnVtYmVyLgorIy4gIAorIy4gCSViCTxibGs+CQkJYmxvY2sgbnVtYmVyCisjLiAJJUIJImluZGlyZWN0IGJsb2NrIiB8ICJibG9jayAjIjxibGtjb3VudD4Jc3RyaW5nIHwgc3RyaW5nK2ludGVnZXIKKyMuIAklYwk8YmxrMj4JCQlibG9jayBudW1iZXIKKyMuIAklRGkJPGRpcmVudD4gLT4gaW5vCQlpbm9kZSBudW1iZXIKKyMuIAklRG4JPGRpcmVudD4gLT4gbmFtZQlzdHJpbmcKKyMuIAklRHIJPGRpcmVudD4gLT4gcmVjX2xlbgorIy4gCSVEbAk8ZGlyZW50PiAtPiBuYW1lX2xlbgorIy4gCSVEdAk8ZGlyZW50PiAtPiBmaWxldHlwZQorIy4gCSVkCTxkaXI+IAkJCWlub2RlIG51bWJlcgorIy4gCSVnCTxncm91cD4JCQlpbnRlZ2VyCisjLiAJJWkJPGlubz4JCQlpbm9kZSBudW1iZXIKKyMuIAklSXMJPGlub2RlPiAtPiBpX3NpemUKKyMuIAklSVMJPGlub2RlPiAtPiBpX2V4dHJhX2lzaXplCisjLiAJJUliCTxpbm9kZT4gLT4gaV9ibG9ja3MKKyMuIAklSWwJPGlub2RlPiAtPiBpX2xpbmtzX2NvdW50CisjLiAJJUltCTxpbm9kZT4gLT4gaV9tb2RlCisjLiAJJUlNCTxpbm9kZT4gLT4gaV9tdGltZQorIy4gCSVJRgk8aW5vZGU+IC0+IGlfZmFkZHIKKyMuIAklSWYJPGlub2RlPiAtPiBpX2ZpbGVfYWNsCisjLiAJJUlkCTxpbm9kZT4gLT4gaV9kaXJfYWNsCisjLiAJJUl1CTxpbm9kZT4gLT4gaV91aWQKKyMuIAklSWcJPGlub2RlPiAtPiBpX2dpZAorIy4gCSVJdAk8c3RyPgkJCWZpbGUgdHlwZQorIy4gCSVqCTxpbm8yPgkJCWlub2RlIG51bWJlcgorIy4gCSVtCTxjb21fZXJyIGVycm9yIG1lc3NhZ2U+CisjLiAJJU4JPG51bT4KKyMuIAklcAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4KKyMuIAklUAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiA8ZGlyZW50Pi0+aW5vIHdpdGggPGlubzI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LiAgKElmIGRpcmVudCBpcyBOVUxMCisjLiAJCQkJdGhlbiByZXR1cm4gdGhlIHBhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vMj4pCisjLiAJJXEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxkaXI+CisjLiAJJVEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+IHdpdGggPGRpcj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuCisjLiAJJXMJPHN0cj4JCQltaXNjZWxsYW5lb3VzIHN0cmluZworIy4gCSVTCQliYWNrdXAgc3VwZXJibG9jaworIy4gCSVYCTxudW0+CWhleGFkZWNpbWFsIGZvcm1hdAorIy4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGUyZnNwcm9ncy0xLjQxLjE0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IHR5dHNvQGFsdW0ubWl0LmVkdVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDIxOjI2LTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDExLTAxLTI2IDIxOjUzKzA4MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IERhcmsgUmF2ZW4gPGRyZGFya3JhdmVuQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDaGluZXNlIChzaW1wbGlmaWVkKSA8aTE4bi16aEBnb29nbGVncm91cHMuY29tPlxuIgorIkxhbmd1YWdlOiB6aF9DTlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtUG9lZGl0LUxhbmd1YWdlOiBDaGluZXNlXG4iCisiWC1Qb2VkaXQtQ291bnRyeTogQ0hJTkFcbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjIzIG1pc2MvbWtlMmZzLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9jayAldSBvdXQgb2YgcmFuZ2U7IGlnbm9yZWQuXG4iCittc2dzdHIgIuWdj+WdlyV16LaF5Ye66IyD5Zu0O+W/veeVpS5cbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjQ2Cittc2dpZCAid2hpbGUgc2FuaXR5IGNoZWNraW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICLlnKjlr7nlnY/lnZdpbm9kZei/m+ihjOS4gOiHtOaAp+ajgOmqjOaYryIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjU4Cittc2dpZCAid2hpbGUgcmVhZGluZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAi5b2T6K+75Y+W5Z2P5Z2XaW5vZGXml7YiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo3MiBlMmZzY2svc2NhbnRlc3QuYzoxMDcgZTJmc2NrL3VuaXguYzoxMzQ1CisjOiBlMmZzY2svdW5peC5jOjE0MzQgbWlzYy9iYWRibG9ja3MuYzoxMjQyIG1pc2MvYmFkYmxvY2tzLmM6MTI1MAorIzogbWlzYy9iYWRibG9ja3MuYzoxMjY0IG1pc2MvYmFkYmxvY2tzLmM6MTI3NiBtaXNjL2R1bXBlMmZzLmM6NjA0CisjOiBtaXNjL2UyaW1hZ2UuYzoxMzk2IG1pc2MvZTJpbWFnZS5jOjE1ODAgbWlzYy9lMmltYWdlLmM6MTU5OQorIzogbWlzYy9ta2UyZnMuYzoyMjcgbWlzYy90dW5lMmZzLmM6MTk1NSBtaXNjL3R1bmUyZnMuYzoyMDQ0IHJlc2l6ZS9tYWluLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICVzIgorbXNnc3RyICLlvZPlsJ3or5XmiZPlvIAgJXMg5pe2IgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHBvcGVuICclcyciCittc2dzdHIgIuW9k+WwneivleWvuSAnJXMnIOi/m+ihjHBvcGVu5pe2IgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6OTQgbWlzYy9ta2UyZnMuYzoyMzQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGluIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIGZpbGUiCittc2dzdHIgIuW9k+S7juaWh+S7tuS4reivu+WPluWdj+Wdl+ihqOaXtiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEwNQorbXNnaWQgIndoaWxlIHVwZGF0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAi5b2T5pu05paw5Z2P5Z2XaW5vZGXml7YiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogaWxsZWdhbCBibG9jayAldSBmb3VuZCBpbiBiYWQgYmxvY2sgaW5vZGUuICBDbGVhcmVkLlxuIgorbXNnc3RyICLorablkYo65Zyo5Z2P5Z2XaW5vZGXkuK3lj5HnjrDpnZ7ms5XnmoTlnZcldS4gIOa4hemZpC5cbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIuivu+WPluWdlyAlbHUgKCVzKSDplJnor68gLCAlcy4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAi6K+75Y+W5Z2XICVsdSAoJXMpIOmUmeivryIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjEgZTJmc2NrL2VoYW5kbGVyLmM6MTEwCittc2dpZCAiSWdub3JlIGVycm9yIgorbXNnc3RyICLlv73nlaXplJnor68iCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYyCittc2dpZCAiRm9yY2UgcmV3cml0ZSIKK21zZ3N0ciAi5by65Yi26KaG55uWIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIuWGmeWdlyAlbHUgKCVzKSDlh7rplJkgLCAlcy4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIuWGmeWdlyAlbHUgKCVzKSDlh7rplJkuICAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICLnqbrnmoRkaXLlnZciCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjYyCittc2dpZCAiZW1wdHkgZGlyIG1hcCIKK21zZ3N0ciAi56m6QUNM5pig5bCEIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFbXB0eSBkaXJlY3RvcnkgYmxvY2sgJXUgKCMlZCkgaW4gaW5vZGUgJXVcbiIKK21zZ3N0ciAi56m655uu5b2V5Z2XICV1ICgjJWQpLOS6jiBpbm9kZSAldSDkuK1cbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBmaWxlbmFtZSBuYmxvY2tzIGJsb2Nrc2l6ZVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9leHRlbmQuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBvZiBibG9ja3MhXG4iCittc2dzdHIgIumdnuazleeahOWdl+aVsOmHjyFcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciAoc2l6ZT0lZClcbiIKK21zZ3N0ciAi5peg5rOV5YiG6YWN5Z2X57yT5a2YICjlpKflsI89JWQpXG4iCisKKyM6IGUyZnNjay9mbHVzaGIuYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgZGlza1xuIgorbXNnc3RyICLnlKjms5U6ICVzIGRpc2tcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJMS0ZMU0JVRiBpb2N0bCBub3Qgc3VwcG9ydGVkISAgQ2FuJ3QgZmx1c2ggYnVmZmVycy5cbiIKK21zZ3N0ciAi5LiN5pSv5oyB5a+5QkxLRkxTQlVG6L+b6KGMIGlvY3RsIOiwg+eUqCEgIOaXoOazleWIt+aWsOe8k+WtmC5cbiIKKworIzogZTJmc2NrL2lzY2FuLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIGRldmljZVxuIgorbXNnc3RyICLnlKjms5U6ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIGRldmljZVxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo4MSBlMmZzY2svdW5peC5jOjk3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZmx1c2hpbmciCittc2dzdHIgIuW9k+S4uuWIt+aWsOaJk+W8gOKAnCVz4oCd5pe2IgorCisjOiBlMmZzY2svaXNjYW4uYzo4NiBlMmZzY2svdW5peC5jOjk3OCByZXNpemUvbWFpbi5jOjI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGZsdXNoICVzIgorbXNnc3RyICLlvZPlsJ3or5XliLfmlrAgJXMg5pe2IgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICclcyciCittc2dzdHIgIuW9k+WwneivleaJk+W8gCAlcyDml7YiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTI5MAorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAi5Zyo5omT5byAaW5vZGXmiavmj4/ml7YiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEyNyBtaXNjL2UyaW1hZ2UuYzoxMzA5Cittc2dpZCAid2hpbGUgZ2V0dGluZyBuZXh0IGlub2RlIgorbXNnc3RyICLlvZPojrflj5bkuIvkuIDkuKppbm9kZeaXtiIKKworIzogZTJmc2NrL2lzY2FuLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBzY2FubmVkLlxuIgorbXNnc3RyICIldSDkuKogaW5vZGUg6KKr5omr5o+PLlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjUyNAorbXNnaWQgInJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIuivu+WPluaXpeW/l+i2hee6p+Wdl1xuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiVzOiDmsqHmnInlj5HnjrDml6Xlv5fotoXnuqflnZdcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGpvdXJuYWwgdG9vIHNob3J0XG4iCittc2dzdHIgIiVzOiDml6Xlv5fov4fnn61cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHJlY292ZXJpbmcgam91cm5hbFxuIgorbXNnc3RyICIlczog5q2j5Zyo5L+u5aSN5pel5b+XXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3b24ndCBkbyBqb3VybmFsIHJlY292ZXJ5IHdoaWxlIHJlYWQtb25seVxuIgorbXNnc3RyICIlczog5L2/55So5Y+q6K+75qih5byP5pe25LiN5Lya6L+b6KGM5pel5b+X5L+u5aSNXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICLlnKjlsJ3or5Xph43mlrDmiZPlvIAgJXMg5pe2IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImHmianlsZXlsZ7mgKciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE0Cittc2dpZCAiQWVycm9yIGFsbG9jYXRpbmciCittc2dzdHIgIkHliIbphY3lh7rplJkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJi5Z2XIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNgorbXNnaWQgIkJiaXRtYXAiCittc2dzdHIgIkLkvY3lm74iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE3Cittc2dpZCAiY2NvbXByZXNzIgorbXNnc3RyICJj5Y6L57ypIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICJD5LiO5YW25LuW5paH5Lu257O757ufQGLlhrLnqoEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE5Cittc2dpZCAiZGRpcmVjdG9yeSIKK21zZ3N0ciAiZOebruW9lSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjAKK21zZ2lkICJEZGVsZXRlZCIKK21zZ3N0ciAiROWIoOmZpCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjEKK21zZ2lkICJlZW50cnkiCittc2dzdHIgImXlhaXlj6MiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIyCittc2dpZCAiRUBlICclRG4nIGluICVwICglaSkiCittc2dzdHIgIkXlnKggJXAgKCVpKSDkuK3nmoRAZSAnJURuJyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjMKK21zZ2lkICJmZmlsZXN5c3RlbSIKK21zZ3N0ciAiZuaWh+S7tuezu+e7nyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjQKK21zZ2lkICJGZm9yIEBpICVpICglUSkgaXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjUKK21zZ2lkICJnZ3JvdXAiCittc2dzdHIgImfnsIciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI2Cittc2dpZCAiaEhUUkVFIEBkIEBpIgorbXNnc3RyICJoSFRSRUVAZEBpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNworbXNnaWQgImlpbm9kZSIKK21zZ3N0ciAiaWlub2RlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOAorbXNnaWQgIklpbGxlZ2FsIgorbXNnc3RyICJJ6Z2e5rOV55qEIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOQorbXNnaWQgImpqb3VybmFsIgorbXNnc3RyICJq5pel5b+XIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMAorbXNnaWQgImxsb3N0K2ZvdW5kIgorbXNnc3RyICJsbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzEKK21zZ2lkICJMaXMgYSBsaW5rIgorbXNnc3RyICJM5piv5LiA5Liq6ZO+5o6lIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMgorbXNnaWQgIm1tdWx0aXBseS1jbGFpbWVkIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMzCittc2dpZCAibmludmFsaWQiCittc2dzdHIgIm7ml6DmlYjnmoQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM0Cittc2dpZCAib29ycGhhbmVkIgorbXNnc3RyICLlraTnq4vnmoQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM1Cittc2dpZCAicHByb2JsZW0gaW4iCittc2dzdHIgIumXrumimOWHuuS6jiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAicuaguUBpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOAorbXNnaWQgInNzaG91bGQgYmUiCittc2dzdHIgInPlupTkuLoiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM5Cittc2dpZCAiU3N1cGVyQGIiCittc2dzdHIgIlPotoXnuqdAYiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDAKK21zZ2lkICJ1dW5hdHRhY2hlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MQorbXNnaWQgInZkZXZpY2UiCittc2dzdHIgInborr7lpIciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQyCisjLCBmdXp6eQorbXNnaWQgInhleHRlbnQiCittc2dzdHIgInjnqIvluqYiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQzCittc2dpZCAienplcm8tbGVuZ3RoIgorbXNnc3RyICJ66Zu26ZW/5bqmIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NAorbXNnaWQgIjxUaGUgTlVMTCBpbm9kZT4iCittc2dzdHIgIjznqbrnmoQgaW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NQorbXNnaWQgIjxUaGUgYmFkIGJsb2NrcyBpbm9kZT4iCittc2dzdHIgIjzlnY/lnZcgaW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NworIywgZnV6enkKK21zZ2lkICI8VGhlIHVzZXIgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI85pel5b+XIGlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTgKKyMsIGZ1enp5Cittc2dpZCAiPFRoZSBncm91cCBxdW90YSBpbm9kZT4iCittc2dzdHIgIjznu4Tmj4/ov7DnrKZpbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU5Cittc2dpZCAiPFRoZSBib290IGxvYWRlciBpbm9kZT4iCittc2dzdHIgIjzlkK/liqjlmaggaW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MAorbXNnaWQgIjxUaGUgdW5kZWxldGUgZGlyZWN0b3J5IGlub2RlPiIKK21zZ3N0ciAiPOacquWIoOmZpOeahOebruW9lSBpbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYxCittc2dpZCAiPFRoZSBncm91cCBkZXNjcmlwdG9yIGlub2RlPiIKK21zZ3N0ciAiPOe7hOaPj+i/sOespmlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjIKK21zZ2lkICI8VGhlIGpvdXJuYWwgaW5vZGU+IgorbXNnc3RyICI85pel5b+XIGlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjMKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgOT4iCittc2dzdHIgIjzkv53nlZnnmoQgaW5vZGUgOT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTY0Cittc2dpZCAiPFJlc2VydmVkIGlub2RlIDEwPiIKK21zZ3N0ciAiPOS/neeVmeeahCBpbm9kZSAxMD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM0Cittc2dpZCAicmVndWxhciBmaWxlIgorbXNnc3RyICLkuIDoiKzmlofku7YiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM2Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICLmlofku7blpLkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM4Cittc2dpZCAiY2hhcmFjdGVyIGRldmljZSIKK21zZ3N0ciAi5a2X56ym6K6+5aSHIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MAorbXNnaWQgImJsb2NrIGRldmljZSIKK21zZ3N0ciAi5Z2X6K6+5aSHIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MgorbXNnaWQgIm5hbWVkIHBpcGUiCittc2dzdHIgIuWRveWQjeeuoemBkyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDQKK21zZ2lkICJzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLnrKblj7fpk77mjqUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ2IG1pc2MvdXVpZGQuYzoxNjIKK21zZ2lkICJzb2NrZXQiCittc2dzdHIgIuWll+aOpeWtlyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWxlIHR5cGUgd2l0aCBtb2RlIDAlbyIKK21zZ3N0ciAi5qih5byP5Li6IDAlbyDnmoTmnKrnn6Xmlofku7bnsbvlnosiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDIzCittc2dpZCAiaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjUKK21zZ2lkICJkb3VibGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjcKK21zZ2lkICJ0cmlwbGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjkKK21zZ2lkICJ0cmFuc2xhdG9yIGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDMxCittc2dpZCAiYmxvY2sgIyIKK21zZ3N0ciAi5Z2XICMiCisKKyM6IGUyZnNjay9wYXNzMWIuYzoyMjIKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGlub2RlIG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczFiLmM6NjI1IGUyZnNjay9wYXNzMWIuYzo3NDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjYW4ndCBmaW5kIGR1cF9ibGsgZm9yICVsbHVcbiIKK21zZ3N0ciAi5YaF6YOo6ZSZ6K+v77yaIOaXoOazleaJvuWIsCAldSDnmoQgZHVvX2Jsa1xuIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODUyCittc2dpZCAicmV0dXJuZWQgZnJvbSBjbG9uZV9maWxlX2Jsb2NrIgorbXNnc3RyICLku44gY2xvbmVfZmlsZV9ibG9jayDkuK3ov5Tlm54iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgYmxvY2sgcmVjb3JkIGZvciAlbGx1IgorbXNnc3RyICLlhoXpg6jplJnor6/vvJog5peg5rOV5om+5YiwICV1IOeahEVB5Z2X6K6w5b2VIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAi5YaF6YOo6ZSZ6K+v77yaIOaXoOazleaJvuWIsCAldSDnmoRFQeiKgueCueiusOW9lSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NDc1IGUyZnNjay9wYXNzMi5jOjc4MgorbXNnaWQgInJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICLmraPlnKjor7vlj5bnm67lvZXlnZciCisKKyM6IGUyZnNjay9wYXNzMS5jOjYzNAorbXNnaWQgImluLXVzZSBpbm9kZSBtYXAiCittc2dzdHIgIuS9v+eUqOS4reeahGlub2Rl5pig5bCEIgorCisjOiBlMmZzY2svcGFzczEuYzo2NDUKK21zZ2lkICJkaXJlY3RvcnkgaW5vZGUgbWFwIgorbXNnc3RyICLnm67lvZVpbm9kZeaYoOWwhCIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjU1Cittc2dpZCAicmVndWxhciBmaWxlIGlub2RlIG1hcCIKK21zZ3N0ciAi5pmu6YCa5paH5Lu2aW5vZGXmmKDlsIQiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY2NCBtaXNjL2UyaW1hZ2UuYzoxMjY1Cittc2dpZCAiaW4tdXNlIGJsb2NrIG1hcCIKK21zZ3N0ciAi5L2/55So5Lit55qE5Z2X5pig5bCEIgorCisjOiBlMmZzY2svcGFzczEuYzo3MzAKK21zZ2lkICJvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgIuaJk+W8gGlub2Rl5omr5o+P5LitIgorCisjOiBlMmZzY2svcGFzczEuYzo3NjQKK21zZ2lkICJnZXR0aW5nIG5leHQgaW5vZGUgZnJvbSBzY2FuIgorbXNnc3RyICLmraPlnKjojrflj5bmiavmj4/kuK3nmoTkuIvkuIDkuKppbm9kZSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI3OQorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAi56ysMeatpSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGluZGlyZWN0IGJsb2NrcyBvZiBpbm9kZSAldSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzg2Cittc2dpZCAiYmFkIGlub2RlIG1hcCIKK21zZ3N0ciAi6ZSZ6K+v55qEaW5vZGXmmKDlsIQiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MDkKK21zZ2lkICJpbm9kZSBpbiBiYWQgYmxvY2sgbWFwIgorbXNnc3RyICLplJnor6/lnZfmmKDlsITkuK3nmoRpbm9kZSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQyOQorbXNnaWQgImltYWdpYyBpbm9kZSBtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQ1NgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgYmxvY2sgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE1NjcKK21zZ2lkICJleHQgYXR0ciBibG9jayBtYXAiCittc2dzdHIgImV4dCBhdHRyIOWdl+aYoOWwhCIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlNmx1KCVjKTogZXhwZWN0aW5nICU2bHUgZ290IHBoeXMgJTZsdSAoYmxrY250ICVsbGQpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6Mjg5OAorbXNnaWQgImJsb2NrIGJpdG1hcCIKK21zZ3N0ciAi5Z2X5L2N5Zu+IgorCisjOiBlMmZzY2svcGFzczEuYzoyOTA0Cittc2dpZCAiaW5vZGUgYml0bWFwIgorbXNnc3RyICJpbm9kZSDkvY3lm74iCisKKyM6IGUyZnNjay9wYXNzMS5jOjI5MTAKK21zZ2lkICJpbm9kZSB0YWJsZSIKK21zZ3N0ciAiaW5vZGXooagiCisKKyM6IGUyZnNjay9wYXNzMi5jOjI4MworbXNnaWQgIlBhc3MgMiIKK21zZ3N0ciAi56ysMuatpSIKKworIzogZTJmc2NrL3Bhc3MyLmM6ODA2Cittc2dpZCAiQ2FuIG5vdCBjb250aW51ZS4iCittc2dzdHIgIuaXoOazlee7p+e7rS4iCisKKyM6IGUyZnNjay9wYXNzMy5jOjc3Cittc2dpZCAiaW5vZGUgZG9uZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MzLmM6ODYKK21zZ2lkICJQZWFrIG1lbW9yeSIKK21zZ3N0ciAi5YaF5a2Y5bOw5YC8IgorCisjOiBlMmZzY2svcGFzczMuYzoxNDgKK21zZ2lkICJQYXNzIDMiCittc2dzdHIgIuesrDPmraUiCisKKyM6IGUyZnNjay9wYXNzMy5jOjM0MAorbXNnaWQgImlub2RlIGxvb3AgZGV0ZWN0aW9uIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczQuYzoxOTYKK21zZ2lkICJQYXNzIDQiCittc2dzdHIgIuesrDTmraUiCisKKyM6IGUyZnNjay9wYXNzNS5jOjc0Cittc2dpZCAiUGFzcyA1IgorbXNnc3RyICLnrKw15q2lIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxCisjLCBmdXp6eQorbXNnaWQgIihubyBwcm9tcHQpIgorbXNnc3RyICIo5rKh5pyJ5o+Q56S6KSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MgorbXNnaWQgIkZpeCIKK21zZ3N0ciAi5aSE55CGIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzCittc2dpZCAiQ2xlYXIiCittc2dzdHIgIua4hemZpCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NAorbXNnaWQgIlJlbG9jYXRlIgorbXNnc3RyICLph43lrprkvY0iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUKK21zZ2lkICJBbGxvY2F0ZSIKK21zZ3N0ciAi5YiG6YWNIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2Cittc2dpZCAiRXhwYW5kIgorbXNnc3RyICLmianlhYUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTcKK21zZ2lkICJDb25uZWN0IHRvIC9sb3N0K2ZvdW5kIgorbXNnc3RyICLov57mjqXliLAgL2xvc3QrZm91bmQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTgKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIuWIm+W7uiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OQorbXNnaWQgIlNhbHZhZ2UiCittc2dzdHIgIuS/ruWkjSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MAorbXNnaWQgIlRydW5jYXRlIgorbXNnc3RyICLmiKrmlq0iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEKK21zZ2lkICJDbGVhciBpbm9kZSIKK21zZ3N0ciAi5riF56m6aW5vZGUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIKK21zZ2lkICJBYm9ydCIKK21zZ3N0ciAi5Lit5patIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzCittc2dpZCAiU3BsaXQiCittc2dzdHIgIuWIhuijgiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICLnu6fnu60iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUKK21zZ2lkICJDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2Cittc2dpZCAiRGVsZXRlIGZpbGUiCittc2dzdHIgIuWIoOmZpOaWh+S7tiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NworIywgZnV6enkKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAi5LiN5pi+56S65raI5oGvIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4Cittc2dpZCAiVW5saW5rIgorbXNnc3RyICLop6PpmaTpk77mjqUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkKK21zZ2lkICJDbGVhciBIVHJlZSBpbmRleCIKK21zZ3N0ciAi5riF56m6IEhUcmVlIOe0ouW8lSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MAorbXNnaWQgIlJlY3JlYXRlIgorbXNnc3RyICLph43lu7oiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzkKK21zZ2lkICIoTk9ORSkiCittc2dzdHIgIijnqbopIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwCittc2dpZCAiRklYRUQiCittc2dzdHIgIuW3suWkhOeQhiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MQorbXNnaWQgIkNMRUFSRUQiCittc2dzdHIgIuW3sua4hemZpCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MgorbXNnaWQgIlJFTE9DQVRFRCIKK21zZ3N0ciAi5bey6YeN5a6a5L2NIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzCittc2dpZCAiQUxMT0NBVEVEIgorbXNnc3RyICLlt7LliIbphY0iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQKK21zZ2lkICJFWFBBTkRFRCIKK21zZ3N0ciAi5bey5omp5YWFIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIuW3sumHjeaWsOi/nuaOpSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NgorbXNnaWQgIkNSRUFURUQiCittc2dzdHIgIuW3suWIm+W7uiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NworbXNnaWQgIlNBTFZBR0VEIgorbXNnc3RyICLlt7Lkv67lpI0iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgKK21zZ2lkICJUUlVOQ0FURUQiCittc2dzdHIgIuW3suaIquaWrSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OQorIywgZnV6enkKK21zZ2lkICJJTk9ERSBDTEVBUkVEIgorbXNnc3RyICJJTk9ERSDlt7LmuIXpmaQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTAKK21zZ2lkICJBQk9SVEVEIgorbXNnc3RyICLlt7LkuK3mlq0iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEKKyMsIGZ1enp5Cittc2dpZCAiU1BMSVQiCittc2dzdHIgIuWIhuijgiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MgorbXNnaWQgIkNPTlRJTlVJTkciCittc2dzdHIgIue7p+e7rSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MworbXNnaWQgIk1VTFRJUExZLUNMQUlNRUQgQkxPQ0tTIENMT05FRCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0Cittc2dpZCAiRklMRSBERUxFVEVEIgorbXNnc3RyICLmlofku7blt7LliKDpmaQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUKK21zZ2lkICJTVVBQUkVTU0VEIgorbXNnc3RyICLnpoHmraIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTYKK21zZ2lkICJVTkxJTktFRCIKK21zZ3N0ciAi5beyVW5saW5rIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3Cittc2dpZCAiSFRSRUUgSU5ERVggQ0xFQVJFRCIKK21zZ3N0ciAiSFRSRUXntKLlvJXlt7LmuIXpmaQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgKK21zZ2lkICJXSUxMIFJFQ1JFQVRFIgorbXNnc3RyICLlsIbkvJrph43lu7oiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNworbXNnaWQgIkBiIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExCittc2dpZCAiQGkgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSB0YWJsZSBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNgorbXNnaWQgIiIKKyJAaSB0YWJsZSBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorIldBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4iCittc2dzdHIgIiIKKyJAZyVn55qEQGnooajkuI3lnKhAZ+S4reOAgiAoQGIgJWIpXG4iCisi6K2m5ZGK77ya5Y+v6IO96YCg5oiQ5Lil6YeN55qE5pWw5o2u5Lii5aSx44CCXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgc3VwZXJibG9jayBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIHZhbGlkIGV4dDIvZXh0My9leHQ0XG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0uICBJZiB0aGUgZGV2aWNlIGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0Mi9leHQzL2V4dDRcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIHN1cGVyYmxvY2tcbgorIy4gQC1leHBhbmRlZDogaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgc3VwZXJibG9jazpcbgorIy4gQC1leHBhbmRlZDogICAgIGUyZnNjayAtYiA4MTkzIDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6ICBvclxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iIDMyNzY4IDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgQFMgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSB2YWxpZCBleHQyL2V4dDMvZXh0NFxuIgorIkBmLiAgSWYgdGhlIEB2IGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0Mi9leHQzL2V4dDRcbiIKKyJAZiAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIEBTXG4iCisiaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgQFM6XG4iCisiICAgIGUyZnNjayAtYiA4MTkzIDxAdj5cbiIKKyIgb3JcbiIKKyIgICAgZTJmc2NrIC1iIDMyNzY4IDxAdj5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBUaGUgZmlsZXN5c3RlbSBzaXplIChhY2NvcmRpbmcgdG8gdGhlIHN1cGVyYmxvY2spIGlzICViIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgZGV2aWNlIGlzICVjIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBFaXRoZXIgdGhlIHN1cGVyYmxvY2sgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMKK21zZ2lkICIiCisiVGhlIEBmIHNpemUgKGFjY29yZGluZyB0byB0aGUgQFMpIGlzICViIEBic1xuIgorIlRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBAdiBpcyAlYyBAYnNcbiIKKyJFaXRoZXIgdGhlIEBTIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKyJAZueahOWkp+WwjyAo5L6d5o2uQFMpIOS4uiAlYiBAYlxuIgorIuiAjEB255qE54mp55CG5aSn5bCP5Li6ICVjIEBiXG4iCisiQFPmiJbliIbljLrooajlj6/og73lt7LooqvmjZ/lnY/vvIFcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja19zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4KKyMuIEAtZXhwYW5kZWQ6IFRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbgorIy4gQC1leHBhbmRlZDogZnJvbSB0aGUgYmxvY2sgc2l6ZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDAKK21zZ2lkICIiCisiQFMgQGJfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuIgorIlRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbiIKKyJmcm9tIHRoZSBAYiBzaXplLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3Cittc2dpZCAiQFMgQGJzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBmaXJzdF9kYXRhX2Jsb2NrID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIKK21zZ2lkICJAUyBmaXJzdF9kYXRhX0BiID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcKK21zZ2lkICIiCisiQGYgZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJAZue8uuWwkVVVSUTvvJvmraPlnKjnlJ/miJDkuIDkuKrjgIJcbiIKKyJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IGlmIHNldmVyYWwgaW5vZGUgb3IgYmxvY2sgYml0bWFwIGJsb2NrcyBvciBwYXJ0XG4iCisib2YgdGhlIGlub2RlIHRhYmxlIHJlcXVpcmUgcmVsb2NhdGlvbiwgeW91IG1heSB3aXNoIHRvIHRyeVxuIgorInJ1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiAlUycgb3B0aW9uIGZpcnN0LiAgVGhlIHByb2JsZW1cbiIKKyJtYXkgbGllIG9ubHkgd2l0aCB0aGUgcHJpbWFyeSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYW5kXG4iCisidGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQ29ycnVwdGlvbiBmb3VuZCBpbiBzdXBlcmJsb2NrLiAgKCVzID0gJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MQorbXNnaWQgIkNvcnJ1cHRpb24gZm91bmQgaW4gQFMuICAoJXMgPSAlTikuXG4iCittc2dzdHIgIuWcqEBT5Lit5Y+R546w6ZSZ6K+vLiAoJXMgPSAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIGRldmljZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgQHY6ICVtXG4iCittc2dzdHIgIuWGs+WumueJqeeQhkB255qE5aSn5bCP5Ye66ZSZICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGNvdW50IGluIHN1cGVyYmxvY2sgaXMgJWksIHNob3VsZCBiZSAlai5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxODEKK21zZ2lkICJAaSBjb3VudCBpbiBAUyBpcyAlaSwgQHMgJWouXG4iCittc2dzdHIgIkBT5Lit55qEQGnorqHmlbDkuLogJWksQHMgJWouXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg1Cittc2dpZCAiVGhlIEh1cmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZmlsZXR5cGUgZmVhdHVyZS5cbiIKK21zZ3N0ciAiSHVyZOezu+e7n+S4jeaUr+aMgWZpbGV0eXBl5Yqf6IO944CCXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgJWkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoYXMgYW4gQG4gQGogKEBpICVpKS5cbiIKK21zZ3N0ciAiQFPljIXlkKtAbiBleHQzIEBqKEBpICVpKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgbXVsdGlwbGUgZmlsZXN5c3RlbSB1c2VycyAodW5zdXBwb3J0ZWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5NQorbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBtdWx0aXBsZSBAZiB1c2VycyAodW5zdXBwb3J0ZWQpLlxuIgorbXNnc3RyICLlpJbpg6hAauWQjOaXtuacieWkmuS4qkBm5L2/55SoICjkuI3mlK/mjIEp44CCXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbid0IGZpbmQgZXh0ZXJuYWwgam91cm5hbFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwMAorbXNnaWQgIkNhbid0IGZpbmQgZXh0ZXJuYWwgQGpcbiIKK21zZ3N0ciAi5peg5rOV5om+5Yiw5aSW6YOoQGpcbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgYmFkIHN1cGVyYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDUKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgYmFkIEBTXG4iCittc2dzdHIgIuWklumDqEBq5pyJ6ZSZ6K+v55qEQFNcbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmlsZXN5c3RlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxMAorbXNnaWQgIkV4dGVybmFsIEBqIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBAZlxuIgorbXNnc3RyICLlpJbpg6hAauS4jeaUr+aMgeatpEBmXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gam91cm5hbCBzdXBlcmJsb2NrIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgam91cm5hbCAKKyMuIEAtZXhwYW5kZWQ6IGZvcm1hdC5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjE1Cittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiAiCisiZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjIzCittc2dpZCAiQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiQGpAU+W3suaNn+Wdjy5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXNfam91cm5hbCBmbGFnIGlzIGNsZWFyLCBidXQgYSBqb3VybmFsIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjI4CisjLCBmdXp6eQorbXNnaWQgIkBTIGhhc19AaiBmbGFnIGlzIGNsZWFyLCBidXQgYSBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJAU+ayoeaciWhhc19qb3VybmFs5qCH5b+X77yM5L2G5piv5a2Y5Zyo5LiA5LiqQGogJXPjgIJcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIGpvdXJuYWwgaXMgcHJlc2VudC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMzMKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIEBqIGlzIHByZXNlbnQuXG4iCittc2dzdHIgIkBT5pyJbmVlZHNfcmVjb3ZlcnnmoIflv5fvvIzkvYbmmK/msqHmnIlAauWtmOWcqOOAglxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBqb3VybmFsIGhhcyBkYXRhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzOAorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBAaiBoYXMgZGF0YS5cbiIKK21zZ3N0ciAiQFPmsqHmnIluZWVkc19yZWNvdmVyeeagh+W/l++8jOS9huaYr0Bq5Lit5rKh5pyJ5pWw5o2u44CCXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENsZWFyIGpvdXJuYWwKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQzCisjLCBmdXp6eQorbXNnaWQgIkNsZWFyIEBqIgorbXNnc3RyICLmuIXpmaRAaiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBmaWxlc3lzdGVtLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0OCBlMmZzY2svcHJvYmxlbS5jOjcwNworbXNnaWQgIkBmIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIEBmLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6ICVzIG9ycGhhbmVkIGlub2RlICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjUzCittc2dpZCAiJXMgQG8gQGkgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjU4Cittc2dpZCAiQEkgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjMKK21zZ2lkICJBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAi5bey57uP5riF6Zmk5ZyoQG9AaSAlaeS4reeahCVCICglYinjgIJcbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBvcnBoYW5lZCBpbm9kZSAlaSBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJASSBAbyBAaSAlaSBpbiBAUy5cbiIKK21zZ3N0ciAiQFPkuK3mnIlASUBvQGkgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgaW5vZGUgJWkgaW4gb3JwaGFuZWQgaW5vZGUgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEkgQGkgJWkgaW4gQG8gQGkgbGlzdC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjc4Cittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4MworbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4OAorbXNnaWQgIkBqIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbiIKK21zZ3N0ciAiZTJmc2Nr5LiN5pSv5oyB5q2kQGrniYjmnKwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1vdmluZyBqb3VybmFsIGZyb20gLyVzIHRvIGhpZGRlbiBpbm9kZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNb3ZpbmcgQGogZnJvbSAvJXMgdG8gaGlkZGVuIEBpLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIG1vdmluZyBqb3VybmFsOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIG1vdmluZyBAajogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIuenu+WKqEBq5Ye66ZSZOiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBGb3VuZCBpbnZhbGlkIFYyIGpvdXJuYWwgc3VwZXJibG9jayBmaWVsZHMgKGZyb20gVjEgam91cm5hbCkuXG4KKyMuIEAtZXhwYW5kZWQ6IENsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIGpvdXJuYWwgc3VwZXJibG9jay4uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMDMKK21zZ2lkICIiCisiRm91bmQgQG4gVjIgQGogQFMgZmllbGRzIChmcm9tIFYxIEBqKS5cbiIKKyJDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBAaiBAUy4uLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFJ1biBqb3VybmFsIGFueXdheQorIzogZTJmc2NrL3Byb2JsZW0uYzozMDkKKyMsIGZ1enp5Cittc2dpZCAiUnVuIEBqIGFueXdheSIKK21zZ3N0ciAi5by65Yi2QGoiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTQKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBCYWNraW5nIHVwIGpvdXJuYWwgaW5vZGUgYmxvY2sgaW5mb3JtYXRpb24uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMxOQorbXNnaWQgIiIKKyJCYWNraW5nIHVwIEBqIEBpIEBiIGluZm9ybWF0aW9uLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSByZXNpemVfaW5vZGUgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpcyAlTjsgc2hvdWxkIGJlIHplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzI0Cittc2dpZCAiIgorIkBmIGRvZXMgbm90IGhhdmUgcmVzaXplX0BpIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9AYnNcbiIKKyJpcyAlTjsgQHMgemVyby4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemVfaW5vZGUgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIGlub2RlIGlzIG5vbi16ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzMAorbXNnaWQgIlJlc2l6ZV9AaSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgQGkgaXMgbm9uLXplcm8uICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIG5vdCB2YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMzUKK21zZ2lkICJSZXNpemUgQGkgbm90IHZhbGlkLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNDAKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNDUKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBzaG91bGQgYmUgJVguICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgQHMgJVguICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNTQKK21zZ2lkICIiCisiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1OQorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2OQorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBMYXN0IGdyb3VwIGJsb2NrIGJpdG1hcCB1bmluaXRpYWxpemVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3NAorbXNnaWQgIkxhc3QgQGcgQGIgQEIgdW5pbml0aWFsaXplZC4gICIKK21zZ3N0ciAi5pyA5ZCO5LiA5LiqQGfnmoRAYkBC5pyq5Yid5aeL5YyWLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHRyYW5zYWN0aW9uICVpIHdhcyBjb3JydXB0LCByZXBsYXkgd2FzIGFib3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozODMKK21zZ2lkICJUaGUgdGVzdF9mcyBmbGFnIGlzIHNldCAoYW5kIGV4dDQgaXMgYXZhaWxhYmxlKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzg4Cittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAiCisic2V0KVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozOTQKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5ICIKKyJzZXQpXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDAwCittc2dpZCAiT25lIG9yIG1vcmUgQGIgQGcgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwNQorbXNnaWQgIlNldHRpbmcgZnJlZSBAaXMgY291bnQgdG8gJWogKHdhcyAlaSlcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgYmxvY2tzIGNvdW50IHRvICVjICh3YXMgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDEwCittc2dpZCAiU2V0dGluZyBmcmVlIEBicyBjb3VudCB0byAlYyAod2FzICViKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IE1ha2luZyBxdW90YSBpbm9kZSAlaSAoJVEpIGhpZGRlbi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTUKK21zZ2lkICJNYWtpbmcgQHEgQGkgJWkgKCVRKSBoaWRkZW4uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDIwCisjLCBmdXp6eQorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gICIKK21zZ3N0ciAi5peg5pWI55qE5Z2X5aSn5bCPIC0gJXMiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyNQorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfb3BlbjI6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayA2NGJpdCBmaWxlc3lzdGVtcyBuZWVkcyBleHRlbnRzIHRvIGFjY2VzcyB0aGUgd2hvbGUgZGlzay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDAKK21zZ2lkICJAUyA2NGJpdCBmaWxlc3lzdGVtcyBuZWVkcyBleHRlbnRzIHRvIGFjY2VzcyB0aGUgd2hvbGUgZGlzay4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NQorbXNnaWQgIkZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZy4gICglTiwgbWF4IHZhbHVlICVnKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NTIKK21zZ2lkICJQYXNzIDE6IENoZWNraW5nIEBpcywgQGJzLCBhbmQgc2l6ZXNcbiIKK21zZ3N0ciAi56ys5LiA5q2lOiDmo4Dmn6VAaSxAYizlkozlpKflsI9cbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDU2Cittc2dpZCAiQHIgaXMgbm90IGEgQGQuICAiCittc2dzdHIgIkBy5LiN5piv5LiA5LiqQGQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2MQorbXNnaWQgIkByIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBSZXNlcnZlZCBpbm9kZSAlaSAoJVEpIGhhcyBpbnZhbGlkIG1vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDY2Cittc2dpZCAiUmVzZXJ2ZWQgQGkgJWkgKCVRKSBoYXMgQG4gbW9kZS4gICIKK21zZ3N0ciAi5L+d55WZ55qEQGkgJWkgKCVRKSDnmoTmqKHlvI/ml6DmlYguICAiCisKKyMuIEAtZXhwYW5kZWQ6IGRlbGV0ZWQgaW5vZGUgJWkgaGFzIHplcm8gZHRpbWUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBEIEBpICVpIGhhcyB6ZXJvIGR0aW1lLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSB6ZXJvLWxlbmd0aCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGEgQHogQGQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODYKK21zZ2lkICJAZyAlZydzIEBiIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDkxCittc2dpZCAiQGcgJWcncyBAaSBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIHRhYmxlIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDk2Cittc2dpZCAiQGcgJWcncyBAaSB0YWJsZSBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDEKK21zZ2lkICJAZyAlZydzIEBiIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwNgorbXNnaWQgIkBnICVnJ3MgQGkgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfc2l6ZSBpcyAlSXMsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTEKK21zZ2lkICJAaSAlaSwgaV9zaXplIGlzICVJcywgQHMgJU4uICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfYmxvY2tzIGlzICVJYiwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxNgorbXNnaWQgIkBpICVpLCBpX0BicyBpcyAlSWIsIEBzICVOLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBpbiBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MjEKK21zZ2lkICJASSAlQiAoJWIpIGluIEBpICVpLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgb3ZlcmxhcHMgZmlsZXN5c3RlbSBtZXRhZGF0YSBpbiBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MjYKK21zZ2lkICIlQiAoJWIpIG92ZXJsYXBzIEBmIG1ldGFkYXRhIGluIEBpICVpLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiQGkgJWkg5Lit5YyF5ZCr6Z2e5rOVQGIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFRvbyBtYW55IGlsbGVnYWwgYmxvY2tzIGluIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzNgorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBpbGxlZ2FsIEBicyBpbiBAaSAlaS5cbiIKK21zZ3N0ciAiQGkgJWkg5Lit5YyF5ZCr5LqG6L+H5aSa55qE6Z2e5rOVQGIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBpbiBiYWQgYmxvY2sgaW5vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQxCittc2dpZCAiQEkgJUIgKCViKSBpbiBiYWQgQGIgQGkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0NgorbXNnaWQgIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrIGluIHVzZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTEKK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgJWIgdXNlZCBhcyBiYWQgYmxvY2sgaW5vZGUgaW5kaXJlY3QgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTU2Cittc2dpZCAiQmFkIEBiICViIHVzZWQgYXMgYmFkIEBiIEBpIGluZGlyZWN0IEBiLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuCisjLiBALWV4cGFuZGVkOiBzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpbiB0aGUgZmlsZXN5c3RlbS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjEKK21zZ2lkICIiCisiXG4iCisiVGhlIGJhZCBAYiBAaSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbiIKKyJzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuIgorImluIHRoZSBAZi5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogSWYgdGhlIGJsb2NrIGlzIHJlYWxseSBiYWQsIHRoZSBmaWxlc3lzdGVtIGNhbiBub3QgYmUgZml4ZWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTY4Cittc2dpZCAiIgorIlxuIgorIklmIHRoZSBAYiBpcyByZWFsbHkgYmFkLCB0aGUgQGYgY2FuIG5vdCBiZSBmaXhlZC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBZb3UgY2FuIHJlbW92ZSB0aGlzIGJsb2NrIGZyb20gdGhlIGJhZCBibG9jayBsaXN0IGFuZCBob3BlXG4KKyMuIEAtZXhwYW5kZWQ6IHRoYXQgdGhlIGJsb2NrIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTczCittc2dpZCAiIgorIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKyJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogVGhlIHByaW1hcnkgc3VwZXJibG9jayAoJWIpIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzkKK21zZ2lkICJUaGUgcHJpbWFyeSBAUyAoJWIpIGlzIG9uIHRoZSBiYWQgQGIgbGlzdC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBncm91cCBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3RcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODQKK21zZ2lkICJCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBAZyBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIEBiIGxpc3RcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIHN1cGVyYmxvY2sgKCViKSBpcyBiYWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkwCittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBAUyAoJWIpIGlzIGJhZC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIGdyb3VwIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBibG9jayAoJWIpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5NQorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgQGcgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIEBiICglYikuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUHJvZ3JhbW1pbmcgZXJyb3I/ICBibG9jayAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX2Jsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwMQorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yPyAgQGIgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9AYi5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nICVOIGNvbnRpZ3VvdXMgYmxvY2socykgaW4gYmxvY2sgZ3JvdXAgJWcgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNworbXNnaWQgIkBBICVOIGNvbnRpZ3VvdXMgQGIocykgaW4gQGIgQGcgJWcgZm9yICVzOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBiIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjE3Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIHRvICVjLi4uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHJlYWQgYmxvY2sgJWIgb2YgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjI3Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgQGIgJWIgb2YgJXM6ICVtXG4iCittc2dzdHIgIuitpuWRijog5peg5rOV5LuOJXPkuK3or7vlj5ZAYiAlYjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHdyaXRlIGJsb2NrICViIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzIKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICLorablkYo6IOaXoOazleWQkSVz5Lit5YaZ5YWlQGIgJWI6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjM3IGUyZnNjay9wcm9ibGVtLmM6MTUwMQorbXNnaWQgIkBBIEBpIEBCICglTik6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDIKK21zZ2lkICJAQSBAYiBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZGlyZWN0b3J5IGJsb2NrIGFycmF5OiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAZCBAYiBhcnJheTogJW1cbiIKK21zZ3N0ciAi5YiG6YWNQGRAYuaVsOe7hOaXtuWHuumUmTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIEBpcyAoJWkpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBjb3VudD0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjY3Cittc2dpZCAiRXJyb3Igc3RvcmluZyBAaSBjb3VudCBpbmZvcm1hdGlvbiAoQGk9JWksIGNvdW50PSVOKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGJsb2NrPSViLCBudW09JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3MgorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICLor7vlj5ZAaSAlaeWHuumUmTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoaW5vZGUgJWkpIGhhcyBpbW11dGFibGVcbgorIy4gQC1leHBhbmRlZDogb3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTcGVjaWFsIChAdi9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChAaSAlaSkgaGFzIGltbXV0YWJsZVxuIgorIm9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBjb21wcmVzc2lvbiBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgY29tcHJlc3Npb24gc3VwcG9ydC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEBjaW9uIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgQGNpb24gc3VwcG9ydC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8pIGlub2RlICVpIGhhcyBub24temVybyBzaXplLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWFsIChAdi9zb2NrZXQvZmlmbykgQGkgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MTIKK21zZ2lkICJAaiBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzE3Cittc2dpZCAiQGogaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiQGrkuI3mmK/mma7pgJrmlofku7YuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSB3YXMgcGFydCBvZiB0aGUgQG8gQGkgbGlzdC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyOAorbXNnaWQgIkBpcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo3MzMKK21zZ2lkICJAQSByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBmb3IgaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzM4Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiBmb3IgQGkgJWkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgYmFkIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDMKK21zZ2lkICJAaSAlaSBoYXMgYSBiYWQgQGEgQGIgJWIuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDgKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTMKK21zZ2lkICJAYSBAYiAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBAcyAlTi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc1OAorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIGhfYmxvY2tzID4gMS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjMKK21zZ2lkICJAYSBAYiAlYiBoYXMgaF9AYnMgPiAxLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2OAorbXNnaWQgIkBBIEBhIEBiICViLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzczCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChpbnZhbGlkIG5hbWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3OAorbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIG5hbWUpLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChpbnZhbGlkIHZhbHVlKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3ODMKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiB2YWx1ZSkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgdG9vIGJpZy4gICIKK21zZ3N0ciAiQGkgJWkg6L+H5aSnLiAgIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIGNhdXNlcyBkaXJlY3RvcnkgdG8gYmUgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3OTIKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBAZCB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk3Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgZmlsZSB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAyCittc2dpZCAiJUIgKCViKSBjYXVzZXMgc3ltbGluayB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIGRpcmVjdG9yeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IGJ1dCBpcyBub3QgYSBAZC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgcm9vdCBub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxNworIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSBoYXMgYW4gQG4gcm9vdCBub2RlLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjIKK21zZ2lkICJAaCAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzMgorbXNnaWQgIkBoICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBhbiBpbmRpcmVjdCBibG9jayAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBtZXRhZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzcKK21zZ2lkICIiCisiQmFkIEBiIEBpIGhhcyBhbiBpbmRpcmVjdCBAYiAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbiIKKyJAZiBtZXRhZGF0YS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemUgQGkgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGV4dHJhIHNpemUgKCVJUykgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0OAorbXNnaWQgIkBpICVpIGhhcyBhIGV4dHJhIHNpemUgKCVJUykgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTMKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1OAorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIGJsb2NrICglTikgd2hpY2ggaXMgaW52YWxpZCAobXVzdCBiZSAwKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2MworbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIEBiICglTikgd2hpY2ggaXMgQG4gKG11c3QgYmUgMClcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjgKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzMKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODc4Cittc2dpZCAiQGkgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBleHRlbnQgdHJlZSBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIEB4IHRyZWUgaW4gQGkgJWk6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBpbm9kZSAlaVxuCisjLiBALWV4cGFuZGVkOiBcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODgKK21zZ2lkICIiCisiRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBAaSAlaVxuIgorIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBpbnZhbGlkIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk0Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBAbiBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgaW52YWxpZCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk5Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgQG4gbGVuICVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBzdXBlcmJsb2NrIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBAUyBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyNAorbXNnaWQgIiIKKyJAaSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI4Cittc2dpZCAiQGkgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIEBiIEBCOiAlbVxuIgorbXNnc3RyICLliJvlu7rmoLlAZCAoJXMpIOaXtuWHuumUmTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzgKKyMsIGZ1enp5Cittc2dpZCAiQHEgQGkgaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiQGrkuI3mmK/mma7pgJrmlofku7YuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0MworbXNnaWQgIkBxIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQ4Cittc2dpZCAiQHEgQGkgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGxvb2tzIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUzCisjLCBmdXp6eQorbXNnaWQgIlRoZSBiYWQgQGIgQGkgbG9va3MgQG4uICAiCittc2dzdHIgIjzlnY/lnZcgaW5vZGU+IgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTU4Cittc2dpZCAiIgorIkBpICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBJbnRlcmlvciBleHRlbnQgbm9kZSBsZXZlbCAlTiBvZiBpbm9kZSAlaTpcbgorIy4gQC1leHBhbmRlZDogTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTY1Cittc2dpZCAiIgorIkludGVyaW9yIEB4IG5vZGUgbGV2ZWwgJU4gb2YgQGkgJWk6XG4iCisiTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTcxCittc2dpZCAiIgorIkBpICVpLCBlbmQgb2YgZXh0ZW50IGV4Y2VlZHMgYWxsb3dlZCB2YWx1ZVxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGJsb2NrICViIHNob3VsZCBiZSBhdCBibG9jayAlYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzcKK21zZ2lkICJAZCBAaSAlaSBAYiAlYiBzaG91bGQgYmUgYXQgQGIgJWMuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBleHRlbnQgbWFya2VkIHVuaW5pdGlhbGl6ZWQgYXQgYmxvY2sgJWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAZCBAaSAlaSBoYXMgQHggbWFya2VkIHVuaW5pdGlhbGl6ZWQgYXQgQGIgJWMuICAiCittc2dzdHIgIkBkQGkgJWkg5Lit5ZCr5pyJ5pyq5YiG6YWN55qEQGIgIyVCLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBsb2dpY2FsIGJsb2NrICViIChwaHlzaWNhbCBibG9jayAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuCisjLiBALWV4cGFuZGVkOiBXaWxsIGZpeCBpbiBwYXNzIDFCLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4NworbXNnaWQgIiIKKyJAaSAlaSBsb2dpY2FsIEBiICViIChwaHlzaWNhbCBAYiAlYykgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLlxuIgorIldpbGwgZml4IGluIHBhc3MgMUIuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBibG9ja3MgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIGlub2RlLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTk0Cittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBAYnMgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIEBpLi4uXG4iCisiUGFzcyAxQjogUmVzY2FubmluZyBmb3IgQG0gQGJzXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAlaToKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAbSBAYihzKSBpbiBAaSAlaToiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwIChpbm9kZV9kdXBfbWFwKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBpIEBCIChAaV9kdXBfbWFwKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzMCBlMmZzY2svcHJvYmxlbS5jOjEzNDUKK21zZ2lkICJFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIEBhIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzNQorbXNnaWQgIlBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBAaXMgd2l0aCBAbSBAYnNcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDEKK21zZ2lkICJQYXNzIDFEOiBSZWNvbmNpbGluZyBAbSBAYnNcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBGaWxlICVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSkgXG4KKyMuIEAtZXhwYW5kZWQ6ICAgaGFzICVyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0NgorbXNnaWQgIiIKKyJGaWxlICVRIChAaSAjJWksIG1vZCB0aW1lICVJTSkgXG4iCisiICBoYXMgJXIgQG0gQGIocyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1MgorbXNnaWQgIlx0JVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1NworbXNnaWQgIlx0PEBmIG1ldGFkYXRhPlxuIgorbXNnc3RyICJcdDxAZuWFg+aVsOaNrj5cbiIKKworIy4gQC1leHBhbmRlZDogKFRoZXJlIGFyZSAlTiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjIKK21zZ2lkICIiCisiKFRoZXJlIGFyZSAlTiBAaXMgY29udGFpbmluZyBAbSBAYnMuKVxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjcKK21zZ2lkICIiCisiQG0gQGJzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNsb25lIGZpbGU6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4NgorbXNnaWQgIlBhc3MgMjogQ2hlY2tpbmcgQGQgc3RydWN0dXJlXG4iCittc2dzdHIgIuesrOS6jOatpTog5qOA5p+l55uu5b2V57uT5p6EXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgaW5vZGUgbnVtYmVyIGZvciAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG4gQGkgbnVtYmVyIGZvciAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaW52YWxpZCBpbm9kZSAjOiAlRGkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5NgorbXNnaWQgIkBFIGhhcyBAbiBAaSAjOiAlRGkuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgJURpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDEKK21zZ2lkICJARSBoYXMgQEQvdW51c2VkIEBpICVEaS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA2Cittc2dpZCAiQEUgQEwgdG8gJy4nICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBwb2ludHMgdG8gaW5vZGUgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTExCittc2dpZCAiQEUgcG9pbnRzIHRvIEBpICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgQGIuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gZGlyZWN0b3J5ICVQICglRGkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTYKK21zZ2lkICJARSBATCB0byBAZCAlUCAoJURpKS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byB0aGUgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTIxCittc2dpZCAiQEUgQEwgdG8gdGhlIEByLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI2Cittc2dpZCAiQEUgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiQGRAaSAlaSDkuK3nvLrlsJEgJy4nLlxuIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLi4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJAZEBpICVpIOS4ree8uuWwkSAnLi4nLlxuIgorCisjLiBALWV4cGFuZGVkOiBGaXJzdCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKSBzaG91bGQgYmUgJy4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0MQorbXNnaWQgIkZpcnN0IEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpICglcCkgQHMgJy4nXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogU2Vjb25kIGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSBzaG91bGQgYmUgJy4uJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDYKK21zZ2lkICJTZWNvbmQgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgQHMgJy4uJ1xuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmFkZHIgZm9yIGlub2RlICVpICglUSkgaXMgJUlGLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTUxCittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTYKK21zZ2lkICJpX2ZpbGVfYWNsIEBGICVJZiwgQHMgemVyby5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpX2Rpcl9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlkLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYxCittc2dpZCAiaV9kaXJfYWNsIEBGICVJZCwgQHMgemVyby5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpX2ZyYWcgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjYKK21zZ2lkICJpX2ZyYWcgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaV9mc2l6ZSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE3MQorbXNnaWQgImlfZnNpemUgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlICglSW0pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzYKK21zZ2lkICJAaSAlaSAoJVEpIGhhcyBAbiBtb2RlICglSW0pLlxuIgorbXNnc3RyICJAaSAlaSAoJVEpIOaciUBu5qih5byPICglSW0pLlxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGRpcmVjdG9yeSBjb3JydXB0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTgxCittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IEBkIGNvcnJ1cHRlZFxuIgorbXNnc3RyICJAZEBpICVpLCDnrKwgJUIgQGIsIOWBj+enu+mHjyAlTjogQGTmjZ/lnY9cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODYKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAiQGRAaSAlaSwg56ysICVCIEBiLCDlgY/np7vph48gJU46IOaWh+S7tuWQjei/h+mVv1xuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTEKK21zZ2lkICJAZCBAaSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAiCittc2dzdHIgIkBkQGkgJWkg5Lit5ZCr5pyJ5pyq5YiG6YWN55qEQGIgIyVCLiAgIgorCisjLiBALWV4cGFuZGVkOiAnLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5NgorIywgYy1mb3JtYXQKK21zZ2lkICInLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICJAZEBpICVpIOS4reeahCAnLicgQGRAZSDmsqHmnInku6VOVUxM57uI5q2iXG4iCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICInLi4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiQGRAaSAlaSDkuK3nmoQgJy4uJyBAZEBlIOayoeacieS7pU5VTEznu4jmraJcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGNoYXJhY3RlciBkZXZpY2UuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwNgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgY2hhcmFjdGVyIEB2LlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBibG9jayBkZXZpY2UuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIxMQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgQGIgQHYuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTYKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4nIEBlLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgZHVwbGljYXRlICcuLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyMQorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLi4nIEBlLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNiBlMmZzY2svcHJvYmxlbS5jOjE1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIHJlY19sZW4gb2YgJURyLCBzaG91bGQgYmUgJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzMQorbXNnaWQgIkBFIGhhcyByZWNfbGVuIG9mICVEciwgQHMgJU4uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IHN0cnVjdHVyZTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcnkgYmxvY2tzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaXRlcmF0aW5nIG92ZXIgQGQgQGJzOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0NgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTEKK21zZ2lkICJFcnJvciB3cml0aW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrIGZvciBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgbmV3IEBkIEBiIGZvciBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRlYWxsb2NhdGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlYWxsb2NhdGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBlIGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIEZJRk8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3MQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgc29ja2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNzYKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIHNvY2tldC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHRvICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODEKK21zZ2lkICJTZXR0aW5nIGZpbGV0eXBlIGZvciBARSB0byAlTi5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhbiBpbmNvcnJlY3QgZmlsZXR5cGUgKHdhcyAlRHQsIHNob3VsZCBiZSAlTikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4NgorbXNnaWQgIkBFIGhhcyBhbiBpbmNvcnJlY3QgZmlsZXR5cGUgKHdhcyAlRHQsIEBzICVOKS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5MQorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSB6ZXJvLWxlbmd0aCBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTYKK21zZ2lkICJARSBoYXMgYSBAeiBuYW1lLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFN5bWxpbmsgJVEgKGlub2RlICMlaSkgaXMgaW52YWxpZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzAxCittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgZm9yIGlub2RlICVpICglUSkgaXMgaW52YWxpZCAoJUlmKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzA2Cittc2dpZCAiQGEgQGIgQEYgQG4gKCVJZikuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTEKK21zZ2lkICJAZiBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBAUy5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgbm90IHJlZmVyZW5jZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzE2Cittc2dpZCAiQHAgQGggJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzIxCittc2dpZCAiQHAgQGggJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjYKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzMQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzM2Cittc2dpZCAiQG4gQGggJWQgKCVxKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpOiBiYWQgYmxvY2sgbnVtYmVyICViLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNDAKK21zZ2lkICJAcCBAaCAlZCAoJXEpOiBiYWQgQGIgbnVtYmVyICViLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiByb290IG5vZGUgaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHAgQGggJWQ6IHJvb3Qgbm9kZSBpcyBAblxuIgorbXNnc3RyICJAcEBoICVkOuaguee7k+eCuUBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBsaW1pdCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1NQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gbGltaXQgKCVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBjb3VudCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gY291bnQgKCVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzY1Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBkZXB0aCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzUKK21zZ2lkICJEdXBsaWNhdGUgQEUgZm91bmQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuCisjLiBALWV4cGFuZGVkOiBSZW5hbWUgdG8gJXMKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4MAorIywgbm8tYy1mb3JtYXQKK21zZ2lkICIiCisiQEUgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbiIKKyJSZW5hbWUgdG8gJXMiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGZvdW5kLlxuCisjLiBALWV4cGFuZGVkOiBcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzg1Cittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlfYmxvY2tzX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzkwCittc2dpZCAiaV9ibG9ja3NfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogVW5leHBlY3RlZCBibG9jayBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk1Cittc2dpZCAiVW5leHBlY3RlZCBAYiBpbiBAaCAlZCAoJXEpLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgaW4gZ3JvdXAgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5OQorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGluIEBnICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgZm91bmQgaW4gZ3JvdXAgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwNAorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGZvdW5kIGluIEBnICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2xfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDkKK21zZ2lkICJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MTYKK21zZ2lkICJQYXNzIDM6IENoZWNraW5nIEBkIGNvbm5lY3Rpdml0eVxuIgorbXNnc3RyICLnrKwz5q2lOiDmo4Dmn6Xnm67lvZXov57mjqXmgKdcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjEKK21zZ2lkICJAciBub3QgYWxsb2NhdGVkLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IE5vIHJvb20gaW4gbG9zdCtmb3VuZCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyNgorbXNnaWQgIk5vIHJvb20gaW4gQGwgQGQuICAiCittc2dzdHIgIkBsQGTkuK3msqHmnInnqbrpl7QuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzYKK21zZ2lkICIvQGwgbm90IGZvdW5kLiAgIgorbXNnc3RyICIvQGzmnKrmib7liLAuIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgc2hvdWxkIGJlICVxICglZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ0MQorbXNnaWQgIicuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBAcyAlcSAoJWQpLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBvciBub24tZXhpc3RlbnQgL2xvc3QrZm91bmQuICBDYW5ub3QgcmVjb25uZWN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDYKK21zZ2lkICJCYWQgb3Igbm9uLWV4aXN0ZW50IC9AbC4gIENhbm5vdCByZWNvbm5lY3QuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQ291bGQgbm90IGV4cGFuZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBleHBhbmQgL0BsOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVjb25uZWN0ICVpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL0BsOiAlbVxuIgorbXNnc3RyICLlsJ3or5Xmib7liLAvQGzml7blh7rplJk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfYmxvY2s6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BiOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfaW5vZGU6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BpOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X2Rpcl9AYjogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IEBkIEBiXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazogJW0gd2hpbGUgd3JpdGluZyB0aGUgZGlyZWN0b3J5IGJsb2NrIGZvciAvbG9zdCtmb3VuZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gd2hpbGUgd3JpdGluZyB0aGUgQGQgQGIgZm9yIC9AbFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGFkanVzdGluZyBpbm9kZSBjb3VudCBvbiBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgYWRqdXN0aW5nIEBpIGNvdW50IG9uIEBpICVpXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBkaXJlY3RvcnkgZW50cnlcbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgQGQgQGVcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICLliJvlu7rmoLlAZCAoJXMpIOaXtuWHuumUmTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeTsgYWJvcnRpbmcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxNgorbXNnaWQgIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIKK21zZ3N0ciAiQHLkuI3mmK/kuIDkuKpAZDsg5Lit5q2iLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIxCittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIGlzIG5vdCBhIGRpcmVjdG9yeSAoaW5vPSVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiL0BsIGlzIG5vdCBhIEBkIChpbm89JWkpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTM4Cittc2dpZCAiUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3Rvcmllc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRpcnNfdG9faGFzaCBpdGVyYXRvcjogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDgKK21zZ2lkICJGYWlsZWQgdG8gb3B0aW1pemUgZGlyZWN0b3J5ICVxICglZCk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTUzCittc2dpZCAiT3B0aW1pemluZyBkaXJlY3RvcmllczogIgorbXNnc3RyICLmraPlnKjkvJjljJbnm67lvZU6ICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcwCittc2dpZCAiUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCB6ZXJvLWxlbmd0aCBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEB6IEBpICVpLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEBpICVpXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgcmVmIGNvdW50IGlzICVJbCwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODUKK21zZ2lkICJAaSAlaSByZWYgY291bnQgaXMgJUlsLCBAcyAlTi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuCisjLiBALWV4cGFuZGVkOiBcdE9SIFNPTUUgQk9ORUhFQUQgKFlPVSkgSVMgQ0hFQ0tJTkcgQSBNT1VOVEVEIChMSVZFKSBGSUxFU1lTVEVNLlxuCisjLiBALWV4cGFuZGVkOiBpbm9kZV9saW5rX2luZm9bJWldIGlzICVOLCBpbm9kZS5pX2xpbmtzX2NvdW50IGlzICVJbC4gIFRoZXkgc2hvdWxkIGJlIHRoZSBzYW1lIVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODkKK21zZ2lkICIiCisiV0FSTklORzogUFJPR1JBTU1JTkcgQlVHIElOIEUyRlNDSyFcbiIKKyJcdE9SIFNPTUUgQk9ORUhFQUQgKFlPVSkgSVMgQ0hFQ0tJTkcgQSBNT1VOVEVEIChMSVZFKSBGSUxFU1lTVEVNLlxuIgorIkBpX2xpbmtfaW5mb1slaV0gaXMgJU4sIEBpLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBAcyB0aGUgc2FtZSFcbiIKK21zZ3N0ciAiIgorIuitpuWRijpFMkZTQ0vkuK3nmoTnqIvluo/plJnor68hXG4iCisiXHTmiJbogIXmmK/mn5DkuKrnrKjom4so5L2gKeato+WcqOajgOafpeS4gOS4quiiq+aMgui9veeahCjmtLvliqjnmoQp5paH5Lu257O757ufLlxuIgorIkBpX2xpbmtfaW5mb1slaV0g5Li6ICVOLCBAaS5pX2xpbmtzX2NvdW50IOS4uiAlSWwu5a6D5Lus5bqU6K+l5piv55u45ZCM55qEIVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb25cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTk5Cittc2dpZCAiUGFzcyA1OiBDaGVja2luZyBAZyBzdW1tYXJ5IGluZm9ybWF0aW9uXG4iCittc2dzdHIgIuesrDXmraU6IOajgOafpUBn5qaC6KaB5L+h5oGvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGlub2RlIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwNAorbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBpIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDkKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYxNAorbXNnaWQgIkBiIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIkBiQELlt67lvII6ICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYzNAorbXNnaWQgIkBpIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIkBpQELlt67lvII6ICIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTQKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTkKK21zZ2lkICJEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjY0Cittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2OQorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NzQKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFBST0dSQU1NSU5HIEVSUk9SOiBmaWxlc3lzdGVtICgjJU4pIGJpdG1hcCBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBiaXRtYXAgCisjLiBALWV4cGFuZGVkOiBlbmRwb2ludHMgKCVpLCAlailcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjc5Cittc2dpZCAiIgorIlBST0dSQU1NSU5HIEVSUk9SOiBAZiAoIyVOKSBAQiBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBAQiAiCisiZW5kcG9pbnRzICglaSwgJWopXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjg1Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGZ1ZGdpbmcgZW5kIG9mIGJpdG1hcCAoJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBpbm9kZSBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBpIEBCOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAYiBAQjogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBibG9jayhzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBiKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGlub2RlKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGkocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUmVjcmVhdGUgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzMyCittc2dpZCAiUmVjcmVhdGUgQGoiCittc2dzdHIgIumHjeW7ukBqIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MzcKK21zZ2lkICJVcGRhdGUgcXVvdGEgaW5mbyBmb3IgcXVvdGEgdHlwZSAlTiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzZXR0aW5nIGJsb2NrIGdyb3VwIGNoZWNrc3VtIGluZm86ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc0MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBAYiBAZyBjaGVja3N1bSBpbmZvOiAlbVxuIgorbXNnc3RyICLor7vlj5ZAaSAlaeWHuumUmTogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGZpbGUgc3lzdGVtIGluZm86ICVtXG4iCittc2dzdHIgIuivu+WPlkBpICVp5Ye66ZSZOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZmx1c2hpbmcgd3JpdGVzIHRvIHN0b3JhZ2UgZGV2aWNlOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmhhbmRsZWQgZXJyb3IgY29kZSAoMHgleCkhXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxOTk2IGUyZnNjay9wcm9ibGVtLmM6MjAwMAorbXNnaWQgIklHTk9SRUQiCittc2dzdHIgIuW3suW/veeVpSIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVkLCBlbGFwc2VkIHRpbWU6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic2l6ZSBvZiBpbm9kZT0lZFxuIgorbXNnc3RyICJpbm9kZeWkp+Wwjz0lZFxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMTkKK21zZ2lkICJ3aGlsZSBzdGFydGluZyBpbm9kZSBzY2FuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjEzMAorbXNnaWQgIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3N1cGVyLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZm9yIGlub2RlICVkIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9zdXBlci5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzQKK21zZ2lkICJUcnVuY2F0aW5nIgorbXNnc3RyICLmraPlnKjmiKrmlq0iCisKKyM6IGUyZnNjay9zdXBlci5jOjI3NQorbXNnaWQgIkNsZWFyaW5nIgorbXNnc3RyICLmraPlnKjmuIXpmaQiCisKKyM6IGUyZnNjay91bml4LmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6ODAKK21zZ2lkICIiCisiXG4iCisiRW1lcmdlbmN5IGhlbHA6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyByZXBhaXIgKG5vIHF1ZXN0aW9ucylcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTWFrZSBubyBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIEFzc3VtZSBcInllc1wiIHRvIGFsbCBxdWVzdGlvbnNcbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIGJhZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYWRibG9jayAiCisibGlzdFxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3JjZSBjaGVja2luZyBldmVuIGlmIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGNsZWFuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4NgorbXNnaWQgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgQmUgdmVyYm9zZVxuIgorIiAtYiBzdXBlcmJsb2NrICAgICAgICBVc2UgYWx0ZXJuYXRpdmUgc3VwZXJibG9ja1xuIgorIiAtQiBibG9ja3NpemUgICAgICAgICBGb3JjZSBibG9ja3NpemUgd2hlbiBsb29raW5nIGZvciBzdXBlcmJsb2NrXG4iCisiIC1qIGV4dGVybmFsX2pvdXJuYWwgIFNldCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbFxuIgorIiAtbCBiYWRfYmxvY2tzX2ZpbGUgICBBZGQgdG8gYmFkYmxvY2tzIGxpc3RcbiIKKyIgLUwgYmFkX2Jsb2Nrc19maWxlICAgU2V0IGJhZGJsb2NrcyBsaXN0XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICVsbHUvJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE1NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSBpbm9kZXMgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnc3RyWzBdICIldSDkuKogaW5vZGUg6KKr5omr5o+PLlxuIgorbXNnc3RyWzFdICIldSDkuKogaW5vZGUg6KKr5omr5o+PLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGUgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3J5ICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcmllcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgICAgICAgIyBvZiBpbm9kZXMgd2l0aCBpbmQvZGluZC90aW5kIGJsb2NrczogJXUvJXUvJXVcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE3OQorbXNnaWQgIiAgICAgICAgICAgICBFeHRlbnQgZGVwdGggaGlzdG9ncmFtOiAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEybGx1IGJsb2NrIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnaWRfcGx1cmFsICIlMTJsbHUgYmxvY2tzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxOTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmFkIGJsb2NrXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmFkIGJsb2Nrc1xuIgorbXNnc3RyWzBdICJi5Z2XIgorbXNnc3RyWzFdICJi5Z2XIgorCisjOiBlMmZzY2svdW5peC5jOjE5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsYXJnZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGFyZ2UgZmlsZXNcbiIKK21zZ3N0clswXSAi5LiA6Iis5paH5Lu2IgorbXNnc3RyWzFdICLkuIDoiKzmlofku7YiCisKKyM6IGUyZnNjay91bml4LmM6MTk2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlc1xuIgorbXNnc3RyWzBdICLkuIDoiKzmlofku7YiCittc2dzdHJbMV0gIuS4gOiIrOaWh+S7tiIKKworIzogZTJmc2NrL3VuaXguYzoxOTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZGlyZWN0b3J5XG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZGlyZWN0b3JpZXNcbiIKK21zZ3N0clswXSAi5paH5Lu25aS5IgorbXNnc3RyWzFdICLmlofku7blpLkiCisKKyM6IGUyZnNjay91bml4LmM6MjAwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAi5a2X56ym6K6+5aSHIgorbXNnc3RyWzFdICLlrZfnrKborr7lpIciCisKKyM6IGUyZnNjay91bml4LmM6MjAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gIuWdl+iuvuWkhyIKK21zZ3N0clsxXSAi5Z2X6K6+5aSHIgorCisjOiBlMmZzY2svdW5peC5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpZm9cbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWZvc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsaW5rXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGlua3NcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MjA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHN5bWJvbGljIGxpbmsiCittc2dpZF9wbHVyYWwgIiUxMnUgc3ltYm9saWMgbGlua3MiCittc2dzdHJbMF0gIuespuWPt+mTvuaOpSIKK21zZ3N0clsxXSAi56ym5Y+36ZO+5o6lIgorCisjOiBlMmZzY2svdW5peC5jOjIxMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmspXG4iCittc2dpZF9wbHVyYWwgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rcylcbiIKK21zZ3N0clswXSAi56ym5Y+36ZO+5o6lIgorbXNnc3RyWzFdICLnrKblj7fpk77mjqUiCisKKyM6IGUyZnNjay91bml4LmM6MjE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHNvY2tldFxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IHNvY2tldHNcbiIKK21zZ3N0clswXSAi5aWX5o6l5a2XIgorbXNnc3RyWzFdICLlpZfmjqXlrZciCisKKyM6IGUyZnNjay91bml4LmM6MjE5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWxlc1xuIgorbXNnc3RyWzBdICLkuIDoiKzmlofku7YiCittc2dzdHJbMV0gIuS4gOiIrOaWh+S7tiIKKworIzogZTJmc2NrL3VuaXguYzoyMzIgbWlzYy9iYWRibG9ja3MuYzo5OTMgbWlzYy90dW5lMmZzLmM6MjEyMiBtaXNjL3V0aWwuYzozMTYKKyM6IHJlc2l6ZS9tYWluLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoyNTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICLorablkYohICVz5bey5oyC6L29LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI1NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZyEgICVzIGlzIGluIHVzZS5cbiIKK21zZ3N0ciAi6K2m5ZGKISAlc+W3suaMgui9vS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIiVzIOW3suaMgui9vS4iCisKKyM6IGUyZnNjay91bml4LmM6MjY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBpbiB1c2UuXG4iCittc2dzdHIgIiVzIOW3suaMgui9vS4iCisKKyM6IGUyZnNjay91bml4LmM6MjY2Cittc2dpZCAiIgorIkNhbm5vdCBjb250aW51ZSwgYWJvcnRpbmcuXG4iCisiXG4iCittc2dzdHIgIuaXoOazlee7p+e7rSwg5Lit5q2iLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2OAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJXQVJOSU5HISEhICBUaGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLiAgIElmIHlvdSBjb250aW51ZSB5b3UgKioqV0lMTCoqKlxuIgorImNhdXNlICoqKlNFVkVSRSoqKiBmaWxlc3lzdGVtIGRhbWFnZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjI3MworbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byBjb250aW51ZSIKK21zZ3N0ciAi5L2g55yf55qE5oOz6KaB6KaB57un57utIgorCisjOiBlMmZzY2svdW5peC5jOjI3NQorbXNnaWQgImNoZWNrIGFib3J0ZWQuXG4iCittc2dzdHIgIuajgOafpeiiq+S4reatolxuIgorCisjOiBlMmZzY2svdW5peC5jOjM2OAorbXNnaWQgIiBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MzcwCittc2dpZCAiIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzozNzIKK21zZ2lkICIgcHJpbWFyeSBzdXBlcmJsb2NrIGZlYXR1cmVzIGRpZmZlcmVudCBmcm9tIGJhY2t1cCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGJlZW4gbW91bnRlZCAldSB0aW1lcyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzozODMKK21zZ2lkICIgaGFzIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRpbWUgaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGdvbmUgJXUgZGF5cyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzozOTgKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiLCDlvLrliLbmo4Dmn6UuXG4iCisKKyM6IGUyZnNjay91bml4LmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiwgJXUvJXUgZmlsZXMsICVsbHUvJWxsdSBibG9ja3MiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo0NTEKK21zZ2lkICIgKGNoZWNrIGRlZmVycmVkOyBvbiBiYXR0ZXJ5KSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjQ1NAorbXNnaWQgIiAoY2hlY2sgYWZ0ZXIgbmV4dCBtb3VudCkiCittc2dzdHIgIijlsIbkuo7kuIvmrKHmjILovb3ml7bov5vooYzmo4Dmn6UpIgorCisjOiBlMmZzY2svdW5peC5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGNoZWNrIGluICVsZCBtb3VudHMpIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6NjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBDb3VsZG4ndCBvcGVuIC9kZXYvbnVsbCAoJXMpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo2NzUKK21zZ2lkICJJbnZhbGlkIEVBIHZlcnNpb24uXG4iCittc2dzdHIgIuaXoOaViOeahEVB54mI5pys5Y+3LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGV4dGVuZGVkIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjcyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIGUyZnNjayBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorImUyZnNjayDphY3nva7mlofku7bkuK3or63ms5XplJnor68oJXMsIOihjCAjJWQpXG4iCisiXHQlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjgwMQorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4MTYKK21zZ2lkICJPbmx5IG9uZSBvZiB0aGUgb3B0aW9ucyAtcC8tYSwgLW4gb3IgLXkgbWF5IGJlIHNwZWNpZmllZC4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC10IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4NjggZTJmc2NrL3VuaXguYzo5NDIgbWlzYy90dW5lMmZzLmM6ODc5IG1pc2MvdHVuZTJmcy5jOjExNzQKKyM6IG1pc2MvdHVuZTJmcy5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjkyMQorbXNnaWQgIlRoZSAtbiBhbmQgLUQgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjkyNgorbXNnaWQgIlRoZSAtbiBhbmQgLWMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjkzMQorbXNnaWQgIlRoZSAtbiBhbmQgLWwvLUwgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjk4NQorbXNnaWQgIlRoZSAtYyBhbmQgdGhlIC1sLy1MIG9wdGlvbnMgbWF5IG5vdCBiZSBib3RoIHVzZWQgYXQgdGhlIHNhbWUgdGltZS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG5vdCBhbiBpbnRlZ2VyXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJbnZhbGlkIG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGludGVydmFsIGlzICV1IHNlY29uZHMgYW5kIHRvdGFsIHdhaXQgdGltZSBpcyAldSBzZWNvbmRzLiBQbGVhc2UgIgorIndhaXQuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjExNDkgZTJmc2NrL3VuaXguYzoxMTU0CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGNoZWNraW5nIE1NUCBibG9jayIKK21zZ3N0ciAi5Zyo5a+55Z2P5Z2XaW5vZGXov5vooYzkuIDoh7TmgKfmo4DpqozmmK8iCisKKyM6IGUyZnNjay91bml4LmM6MTE1NiBtaXNjL3R1bmUyZnMuYzoyMDQ5Cittc2dpZCAiIgorIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSBpcyBub3QgaW4gdXNlIG9uIGFueSBub2RlLCBydW46XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V9J1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTIwNworbXNnaWQgIkVycm9yOiBleHQyZnMgbGlicmFyeSB2ZXJzaW9uIG91dCBvZiBkYXRlIVxuIgorbXNnc3RyICLplJnor686IGV4dDJmc+W6k+eJiOacrOi/h+aXpyFcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjE0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGluaXRpYWxpemUgcHJvZ3JhbSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlcywgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEyNDkKK21zZ2lkICJuZWVkIHRlcm1pbmFsIGZvciBpbnRlcmFjdGl2ZSByZXBhaXJzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDUKK21zZ2lkICJTdXBlcmJsb2NrIGludmFsaWQsIgorbXNnc3RyICLotoXnuqflnZfml6DmlYgsIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDYKK21zZ2lkICJHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzMTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSB1c2luZyB0aGUgYmFja3VwIGJsb2NrcyIKK21zZ3N0ciAi5b2T6K+75Y+W5Z2P5Z2XaW5vZGXml7YiCisKKyM6IGUyZnNjay91bml4LmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZ29pbmcgYmFjayB0byBvcmlnaW5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQ5Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIHJldmlzaW9uIGlzIGFwcGFyZW50bHkgdG9vIGhpZ2ggZm9yIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCisiKE9yIHRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2sgaXMgY29ycnVwdClcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTYKK21zZ2lkICJDb3VsZCB0aGlzIGJlIGEgemVyby1sZW5ndGggcGFydGl0aW9uP1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSBvciBiZSByb290XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY0Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTM2NgorbXNnaWQgIkZpbGVzeXN0ZW0gbW91bnRlZCBvciBvcGVuZWQgZXhjbHVzaXZlbHkgYnkgYW5vdGhlciBwcm9ncmFtP1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTM3MAorbXNnaWQgIlBvc3NpYmx5IG5vbi1leGlzdGVudCBkZXZpY2U/XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzczCittc2dpZCAiIgorIkRpc2sgd3JpdGUtcHJvdGVjdGVkOyB1c2UgdGhlIC1uIG9wdGlvbiB0byBkbyBhIHJlYWQtb25seVxuIgorImNoZWNrIG9mIHRoZSBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNDM3Cittc2dpZCAiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBleHQzIGpvdXJuYWwgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTQ5MgorbXNnaWQgIiIKKyJXYXJuaW5nOiBza2lwcGluZyBqb3VybmFsIHJlY292ZXJ5IGJlY2F1c2UgZG9pbmcgYSByZWFkLW9ubHkgZmlsZXN5c3RlbSAiCisiY2hlY2suXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNTA0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgc3VwZXJibG9jayBmbGFncyBvbiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWNvdmVyaW5nIGV4dDMgam91cm5hbCBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocyk6IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FybmluZzogY29tcHJlc3Npb24gc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogZTJmc2NrIG5vdCBjb21waWxlZCB3aXRoIEhUUkVFIHN1cHBvcnQsXG4iCisiXHRidXQgZmlsZXN5c3RlbSAlcyBoYXMgSFRSRUUgZGlyZWN0b3JpZXMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjA3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgcmVhZGluZyBiYWQgYmxvY2tzIGlub2RlXG4iCittc2dzdHIgIuW9k+ivu+WPluWdj+Wdl2lub2Rl5pe2IgorCisjOiBlMmZzY2svdW5peC5jOjE2MTAKK21zZ2lkICJUaGlzIGRvZXNuJ3QgYm9kZSB3ZWxsLCBidXQgd2UnbGwgdHJ5IHRvIGdvIG9uLi4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCVkIGJsb2Nrcyk6ICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2NjIKK21zZ2lkICIgRG9uZS5cbiIKK21zZ3N0ciAi5a6M5oiQLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NjQKK21zZ2lkICIiCisiXG4iCisiKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjg4Cittc2dpZCAiUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uXG4iCittc2dzdHIgIuato+WcqOS7juWktOW8gOWni2UyZnNjay4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2OTIKK21zZ2lkICJ3aGlsZSByZXNldHRpbmcgY29udGV4dCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2OTkKK21zZ2lkICJhYm9ydGVkIgorbXNnc3RyICLlt7LkuK3mraIiCisKKyM6IGUyZnNjay91bml4LmM6MTcwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZTJmc2NrIGNhbmNlbGVkLlxuIgorbXNnc3RyICIlczogZTJmc2Nr6KKr5Y+W5raILlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NDEgZTJmc2NrL3V0aWwuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqIOaWh+S7tuezu+e7n+W3suS/ruaUuSAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICoqKioqIFJFQk9PVCBMSU5VWCAqKioqKlxuIgorbXNnc3RyICIlczogKioqKiog6YeN5paw5ZCv5YqoIExJTlVYICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc1MyBlMmZzY2svdXRpbC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBXQVJOSU5HOiBGaWxlc3lzdGVtIHN0aWxsIGhhcyBlcnJvcnMgKioqKioqKioqKlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqKioqKiog6K2m5ZGKOiDmlofku7bns7vnu5/kuIrku43mnInplJnor68gKioqKioqKioqKlxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MCBtaXNjL3V0aWwuYzo4NgorbXNnaWQgInlZIgorbXNnc3RyICJ5WSIKKworIzogZTJmc2NrL3V0aWwuYzoxOTEKK21zZ2lkICJuTiIKK21zZ3N0ciAibk4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA1Cittc2dpZCAiPHk+IgorbXNnc3RyICI8eT4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA3Cittc2dpZCAiPG4+IgorbXNnc3RyICI8bj4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA5Cittc2dpZCAiICh5L24pIgorbXNnc3RyICIgKHkvbikiCisKKyM6IGUyZnNjay91dGlsLmM6MjIzCittc2dpZCAiY2FuY2VsbGVkIVxuIgorbXNnc3RyICLlt7Llj5bmtoghXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjM4Cittc2dpZCAieWVzXG4iCittc2dzdHIgIuaYr1xuIgorCisjOiBlMmZzY2svdXRpbC5jOjI0MAorbXNnaWQgIm5vXG4iCittc2dzdHIgIuWQplxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IG5vXG4iCisiXG4iCittc2dzdHIgIiIKKyIlcz8g5ZCmXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8geWVzXG4iCisiXG4iCittc2dzdHIgIiIKKyIlcz8g5pivXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAieWVzIgorbXNnc3RyICJ5ZXMiCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAibm8iCittc2dzdHIgIm5vIgorCisjOiBlMmZzY2svdXRpbC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBpbGxlZ2FsIGJpdG1hcCBibG9jayhzKSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyNzgKK21zZ2lkICJyZWFkaW5nIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJldHJ5aW5nIHRvIHJlYWQgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyOTgKK21zZ2lkICJ3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJld3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIiVzOiBVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k7IFJVTiBmc2NrIE1BTlVBTExZLlxuIgorIlx0KGkuZS4sIHdpdGhvdXQgLWEgb3IgLXAgb3B0aW9ucylcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCittc2dzdHIgIuWGheWtmOS9v+eUqOmHjzogICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1LCAiCittc2dzdHIgIuWGheWtmOeUqOmHjzogJWx1LCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWU6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCittc2dzdHIgIuaXtumXtDogJTUuMmYvJTUuMmYvJTUuMmZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZWxhcHNlZCB0aW1lOiAlNi4zZlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6NDQ3IGUyZnNjay91dGlsLmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6NDc1IGUyZnNjay91dGlsLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6NjM3Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyB6ZXJvaXppbmcgYnVmZmVyIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6Nzg1Cittc2dpZCAiIgorIlVORVhQRUNURUQgSU5DT05TSVNURU5DWTogdGhlIGZpbGVzeXN0ZW0gaXMgYmVpbmcgbW9kaWZpZWQgd2hpbGUgZnNjayBpcyAiCisicnVubmluZy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjcyCisjLCBmdXp6eQorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgIuWujOaIkCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWIgYmxvY2tfc2l6ZV0gWy1pIGlucHV0X2ZpbGVdIFstbyBvdXRwdXRfZmlsZV0gWy1zdnduZl1cbiIKKyIgICAgICAgWy1jIGJsb2Nrc19hdF9vbmNlXSBbLWQgZGVsYXlfZmFjdG9yX2JldHdlZW5fcmVhZHNdIFstZSAiCisibWF4X2JhZF9ibG9ja3NdXG4iCisiICAgICAgIFstcCBudW1fcGFzc2VzXSBbLXQgdGVzdF9wYXR0ZXJuIFstdCB0ZXN0X3BhdHRlcm4gWy4uLl1dXVxuIgorIiAgICAgICBkZXZpY2UgW2xhc3RfYmxvY2sgW2ZpcnN0X2Jsb2NrXV1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSAtbiBhbmQgLXcgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiU2LjJmJSUgZG9uZSwgJXMgZWxhcHNlZC4gKCVkLyVkLyVkIGVycm9ycykiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzozMjgKK21zZ2lkICJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM0NgorbXNnaWQgIlRlc3Rpbmcgd2l0aCBwYXR0ZXJuIDB4IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Mzc4IG1pc2MvYmFkYmxvY2tzLmM6NDUxCittc2dpZCAiZHVyaW5nIHNlZWsiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDc2Cittc2dpZCAiZHVyaW5nIGV4dDJmc19zeW5jX2RldmljZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ5NiBtaXNjL2JhZGJsb2Nrcy5jOjc1OAorbXNnaWQgIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTEgbWlzYy9iYWRibG9ja3MuYzo2MTEgbWlzYy9iYWRibG9ja3MuYzo3NjkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlcnMiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgYmxvY2tzICVsdSB0byAlbHVcbiIKK21zZ3N0ciAi5q2j5Zyo5qOA5p+l5LuOICVsdSDliLAgJWx155qE5Z2XXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTIwCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyOQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChyZWFkLW9ubHkgdGVzdCk6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUzNiBtaXNjL2JhZGJsb2Nrcy5jOjY0MyBtaXNjL2JhZGJsb2Nrcy5jOjY4NQorIzogbWlzYy9iYWRibG9ja3MuYzo4MzIKK21zZ2lkICJUb28gbWFueSBiYWQgYmxvY2tzLCBhYm9ydGluZyB0ZXN0XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MTgKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYyMCBtaXNjL2JhZGJsb2Nrcy5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tIGJsb2NrICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY3NQorbXNnaWQgIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIgorbXNnc3RyICLmraPlnKjor7vlj5blubbmr5TovoM6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiBub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODcKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAobm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgdGVzdClcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc5NAorbXNnaWQgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmluZyB0ZXN0IGRhdGEgd3JpdGUsIGJsb2NrICVsdSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk5OCBtaXNjL3V0aWwuYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZDsgIgorbXNnc3RyICIlcyDlt7Lnu4/mjILovb07IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDAKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDUKK21zZ2lkICJpdCdzIG5vdCBzYWZlIHRvIHJ1biBiYWRibG9ja3MhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDEwIG1pc2MvdXRpbC5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhcHBhcmVudGx5IGluIHVzZSBieSB0aGUgc3lzdGVtOyAiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDEzCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMgLSAlcyIKK21zZ3N0ciAi5peg5pWI55qEJXMgLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBiaWcgbWF4IGJhZCBibG9ja3MgY291bnQgJXUgLSBtYXhpbXVtIGlzICV1IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRlc3RfcGF0dGVybiAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE4NAorbXNnaWQgIk1heGltdW0gb2Ygb25lIHRlc3RfcGF0dGVybiBtYXkgYmUgc3BlY2lmaWVkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE5MAorbXNnaWQgIlJhbmRvbSB0ZXN0X3BhdHRlcm4gaXMgbm90IGFsbG93ZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjA0Cittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG1hbnVhbGx5XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjEwCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBkZXZpY2Ugc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMTUKK21zZ2lkICJsYXN0IGJsb2NrIgorbXNnc3RyICLmnIDlkI7kuIDkuKrlnZciCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIyMQorbXNnaWQgImZpcnN0IGJsb2NrIgorbXNnc3RyICLnrKzkuIDkuKrlnZciCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0aW5nIGJsb2NrICglbGx1KTogbXVzdCBiZSBsZXNzIHRoYW4gJWxsdSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBlbmQgYmxvY2sgKCVsbHUpOiBtdXN0IGJlIDMyLWJpdCB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyODcKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyBpbi1tZW1vcnkgYmFkIGJsb2NrcyBsaXN0IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI5NgorbXNnaWQgImlucHV0IGZpbGUgLSBiYWQgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTMwNCBtaXNjL2JhZGJsb2Nrcy5jOjEzMTMKK21zZ2lkICJ3aGlsZSBhZGRpbmcgdG8gaW4tbWVtb3J5IGJhZCBibG9jayBsaXN0IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTMzOAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmZdIFstKz1hQWNDZERlaWpzU3RUdV0gWy12IHZlcnNpb25dIGZpbGVzLi4uXG4iCittc2dzdHIgIueUqOazlTogJXMgWy1SVmFkbHZdIFtmaWxlcy4uLl1cbiIKKworIzogbWlzYy9jaGF0dHIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHZlcnNpb24gLSAlc1xuIgorbXNnc3RyICLplJnor6/nmoTniYjmnKwgLSAlc1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwMSBtaXNjL2xzYXR0ci5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc3RhdCAlcyIKK21zZ3N0ciAi5b2T5bCd6K+V5a+5JXPov5vooYxzdGF06LCD55So5pe2IgorCisjOiBtaXNjL2NoYXR0ci5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjEzIG1pc2MvY2hhdHRyLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzIG9mICVzIHNldCBhcyAiCittc2dzdHIgIiVz55qE5qCH5b+X6KKr6K6+5Li6ICIKKworIzogbWlzYy9jaGF0dHIuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uIG9mICVzIHNldCBhcyAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9jaGF0dHIuYzoyNjcKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBwYXRoIHZhcmlhYmxlIGluIGNoYXR0cl9kaXJfcHJvYyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjMwNworbXNnaWQgIj0gaXMgaW5jb21wYXRpYmxlIHdpdGggLSBhbmQgK1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6MzE1Cittc2dpZCAiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWJmaGl4Vl0gWy1vIHN1cGVyYmxvY2s9PG51bT5dIFstbyBibG9ja3NpemU9PG51bT5dIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNTkKKyMsIGZ1enp5Cittc2dpZCAiYmxvY2tzIgorbXNnc3RyICJi5Z2XIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTY5Cittc2dpZCAiY2x1c3RlcnMiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJHcm91cCAlbHU6IChCbG9ja3MgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgQ2hlY2tzdW0gMHglMDR4IgorbXNnc3RyICIgIOagoemqjOWSjCAweCUwNHgsJWTkuKrmnKrkvb/nlKjnmoRpbm9kZVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoRVhQRUNURUQgMHglMDR4KSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIsIHVudXNlZCBpbm9kZXMgJXVcbiIKK21zZ3N0ciAiLCAldeS4quacquS9v+eUqOeahGlub2Rlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgJXMgc3VwZXJibG9jayBhdCAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNAorbXNnaWQgIlByaW1hcnkiCittc2dzdHIgIuS4uyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNAorbXNnaWQgIkJhY2t1cCIKK21zZ3N0ciAi5aSH5Lu9IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE4CisjLCBmdXp6eQorbXNnaWQgIiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgIgorbXNnc3RyICIsIOe7hOaPj+i/sOespuS9jeS6jiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjIKK21zZ2lkICIiCisiXG4iCisiICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0ICIKK21zZ3N0ciAiIgorIlxuIgorIiAg5L+d55WZ55qER0RU5Z2X5L2N5LqOICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyOQorbXNnaWQgIiBHcm91cCBkZXNjcmlwdG9yIGF0ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM1Cittc2dpZCAiICBCbG9jayBiaXRtYXAgYXQgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzkKK21zZ2lkICIsIElub2RlIGJpdG1hcCBhdCAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0MworbXNnaWQgIiIKKyJcbiIKKyIgIElub2RlIHRhYmxlIGF0ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgSW5vZGXooajkvY3kuo4gIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgICV1IGZyZWUgJXMsICV1IGZyZWUgaW5vZGVzLCAldSBkaXJlY3RvcmllcyVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAldSB1bnVzZWQgaW5vZGVzXG4iCittc2dzdHIgIiwgJXXkuKrmnKrkvb/nlKjnmoRpbm9kZXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1OQorbXNnaWQgIiAgRnJlZSBibG9ja3M6ICIKK21zZ3N0ciAiICDlj6/nlKjlnZfmlbA6ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI3NAorbXNnaWQgIiAgRnJlZSBpbm9kZXM6ICIKK21zZ3N0ciAiICDlj6/nlKhpbm9kZeaVsDogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzEwCittc2dpZCAid2hpbGUgcHJpbnRpbmcgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2tzOiAldSIKK21zZ3N0ciAi5Z2P5Z2X5pWwOiAldSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM0NSBtaXNjL3R1bmUyZnMuYzozNDcKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1MQorbXNnaWQgIndoaWxlIG9wZW5pbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzU3Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyIGJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjQKKyMsIGZ1enp5Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlciBpbnZhbGlkIVxuIgorbXNnc3RyICLml6Xlv5fotoXnuqflnZfmnKrmib7liLAhXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjcKKyMsIGZ1enp5Cittc2dpZCAiSm91cm5hbCBmZWF0dXJlczogICAgICAgICIKK21zZ3N0ciAi5pel5b+X5L2/55So6ICFOiAgICAgICAgICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozODAKK21zZ2lkICJKb3VybmFsIHNpemU6ICAgICAgICAgICAgICIKK21zZ3N0ciAi5pel5b+X5aSn5bCPOiAgICAgICAgICAgICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGVycm5vOiAgICAgICAgICAgICVkXG4iCittc2dzdHIgIuaXpeW/l+S9v+eUqOiAhTogICAgICAgICAgICAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDE1IG1pc2MvdHVuZTJmcy5jOjE5NgorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXJzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgYmxvY2sgc2l6ZTogICAgICAgJXVcbiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBmaXJzdCBibG9jazogICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgbnVtYmVyIG9mIHVzZXJzOiAgJXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdXNlcnM6ICAgICAgICAgICAgJXNcbiIKK21zZ3N0ciAi5pel5b+X5L2/55So6ICFOiAgICAgICAgICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NTYgbWlzYy9ta2UyZnMuYzo3NDMgbWlzYy90dW5lMmZzLmM6MTIxMQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBvcHRpb25zIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdXBlcmJsb2NrIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgZXh0ZW5kZWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdXBlcmJsb2NrPTxzdXBlcmJsb2NrIG51bWJlcj5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvY2tzaXplPlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NjggbWlzYy9ta2UyZnMuYzoxNzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXNcbiIKK21zZ3N0ciAiXHTkvb/nlKggJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYwNiBtaXNjL2UyaW1hZ2UuYzoxNTgyIG1pc2MvdHVuZTJmcy5jOjIwNjAKKyM6IHJlc2l6ZS9tYWluLmM6MzE5Cittc2dpZCAiQ291bGRuJ3QgZmluZCB2YWxpZCBmaWxlc3lzdGVtIHN1cGVyYmxvY2suXG4iCittc2dzdHIgIuaJvuS4jeWIsOacieaViOeahOaWh+S7tuezu+e7n+i2hee6p+Wdly5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICVzOiBlcnJvciByZWFkaW5nIGJpdG1hcHM6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbIC1yfFEgXSBbIC1mciBdIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyAtSSBkZXZpY2UgaW1hZ2UtZmlsZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICVzIC1yYSAgWyAgLWNmbnAgIF0gWyAtbyBzcmNfb2Zmc2V0IF0gWyAtTyBkZXN0X29mZnNldCBdIHNyY19mcyAiCisiWyBkZXN0X2ZzIF1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjkgbWlzYy9lMmltYWdlLmM6NTc2IG1pc2MvZTJpbWFnZS5jOjU4MgorIzogbWlzYy9lMmltYWdlLmM6MTE3OAorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlciIKK21zZ3N0ciAiQeWIhumFjeWHuumUmSIKKworIzogbWlzYy9lMmltYWdlLmM6MTc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIGJsb2NrICVsbHVcbiIKK21zZ3N0ciAi5q2j5Zyo5qOA5p+l5LuOICVsdSDliLAgJWx155qE5Z2XXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE4OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igd3JpdGluZyBibG9jayAlbGx1IgorbXNnc3RyICLlhpnlnZcgJWx1ICglcykg5Ye66ZSZLiAgIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxOTEKK21zZ2lkICJlcnJvciBpbiBnZW5lcmljX3dyaXRlKCkiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MjA4Cittc2dpZCAiRXJyb3I6IGhlYWRlciBzaXplIGlzIGJpZ2dlciB0aGFuIHdydF9zaXplXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MjEzCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgaGVhZGVyIGJ1ZmZlclxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI0MQorbXNnaWQgIndoaWxlIHdyaXRpbmcgc3VwZXJibG9jayIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyNTAKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI1OAorbXNnaWQgIndoaWxlIHdyaXRpbmcgYmxvY2sgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI2NgorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjUwMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBkaXJlY3RvcnkgYmxvY2sgJWxsdTogYmFkIHJlY19sZW4gKCVkKVxuIgorbXNnc3RyICLnqbrnm67lvZXlnZcgJXUgKCMlZCks5LqOIGlub2RlICV1IOS4rVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1MTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCBuYW1lX2xlbiAoJWQpXG4iCittc2dzdHIgIuepuuebruW9leWdlyAldSAoIyVkKSzkuo4gaW5vZGUgJXUg5LitXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlbGx1IC8gJWxsdSBibG9ja3MgKCVkJSUpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjU4NiBtaXNjL2UyaW1hZ2UuYzo2MjYKK21zZ2lkICJDb3B5aW5nICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo2MjMKK21zZ2lkICIiCisiU3RvcHBpbmcgbm93IHdpbGwgZGVzdHJveSB0aGUgZmlsZXN5c3RlbSwgaW50ZXJydXB0IGFnYWluIGlmIHlvdSBhcmUgc3VyZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgcmVtYWluaW5nIGF0ICUuMmYgTUIvcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo2NjEgbWlzYy9lMmltYWdlLmM6MTE4OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBibG9jayAlbGx1IgorbXNnc3RyICLor7vlj5blnZcgJWx1ICglcykg6ZSZ6K+vIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29waWVkICVsbHUgLyAlbGx1IGJsb2NrcyAoJWQlJSkgaW4gJXMgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdCAlLjJmIE1CL3MiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6NzU1CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgbDEgdGFibGUiCittc2dzdHIgIuato+WcqOWGmeWFpWlub2Rl6KGoOiAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjgwMAorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgbDIgY2FjaGUiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6ODIzCittc2dpZCAiIgorIldhcm5pbmc6IFRoZXJlIGFyZSBzdGlsbCB0YWJsZXMgaW4gdGhlIGNhY2hlIHdoaWxlIHB1dHRpbmcgdGhlIGNhY2hlLCBkYXRhICIKKyJ3aWxsIGJlIGxvc3Qgc28gdGhlIGltYWdlIG1heSBub3QgYmUgdmFsaWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTE0NQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgZXh0Ml9xY293Ml9pbWFnZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTUyCittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGV4dDJfcWNvdzJfaW1hZ2UiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTIxMSBtaXNjL2UyaW1hZ2UuYzoxMjI5Cittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I6IG11bHRpcGxlIHNlcXVlbnRpYWwgcmVmY291bnQgYmxvY2tzIGNyZWF0ZWQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTI2OQorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAi5b2T6K+75Y+W5L2N5Zu+5pe2IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjc4CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgc2NyYW1ibGUgYmxvY2sgYml0bWFwIgorbXNnc3RyICLplJnor6/lnZfmmKDlsITkuK3nmoRpbm9kZSIKKworIzogbWlzYy9lMmltYWdlLmM6MTI4NQorIywgZnV6enkKK21zZ2lkICJTY2FubmluZyBpbm9kZXMuLi5cbiIKK21zZ3N0ciAi5q2j5Zyo5omr5o+PaW5vZGXooagiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyOTcKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIgorbXNnc3RyICLml6Dms5XliIbphY3lnZfnvJPlrZggKOWkp+Wwjz0lZClcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTMzNiBtaXNjL2UyaW1hZ2UuYzoxMzUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBpdGVyYXRpbmcgb3ZlciBpbm9kZSAldSIKK21zZ3N0ciAi5b2T6I635Y+W5LiL5LiA5LiqaW5vZGXml7YiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzODEKK21zZ2lkICJSYXcgYW5kIHFjb3cyIGltYWdlcyBjYW5ub3QgYmUgaW5zdGFsbGVkIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MDMKKyMsIGZ1enp5Cittc2dpZCAiZXJyb3IgcmVhZGluZyBiaXRtYXBzIgorbXNnc3RyICLlvZPor7vlj5bkvY3lm77ml7YiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MTUKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgb3BlbmluZyBkZXZpY2UgZmlsZSIKK21zZ3N0ciAi5Zyo5omT5byAaW5vZGXmiavmj4/ml7YiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MjYKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgcmVzdG9yaW5nIHRoZSBpbWFnZSB0YWJsZSIKK21zZ3N0ciAi5b2T6K+75Y+W5Z2P5Z2XaW5vZGXml7YiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MjMKK21zZ2lkICItYSBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHJhdyBvciBRQ09XMiBpbWFnZXMuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MjkKK21zZ2lkICJPZmZzZXRzIGFyZSBvbmx5IGFsbG93ZWQgd2l0aCByYXcgaW1hZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTM0Cittc2dpZCAiTW92ZSBtb2RlIGlzIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MzkKK21zZ2lkICJNb3ZlIG1vZGUgcmVxdWlyZXMgYWxsIGRhdGEgbW9kZS4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTU0OQorbXNnaWQgImNoZWNraW5nIGlmIG1vdW50ZWQiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTU1NgorbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGUyaW1hZ2Ugb24gYSBSL1cgbW91bnRlZCBmaWxlc3lzdGVtIGNhbiByZXN1bHQgaW4gYW5cbiIKKyJpbmNvbnNpc3RlbnQgaW1hZ2Ugd2hpY2ggd2lsbCBub3QgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4iCisiVXNlIC1mIG9wdGlvbiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gdGhhdC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjA4Cittc2dpZCAiUUNPVzIgaW1hZ2UgY2FuIG5vdCBiZSB3cml0dGVuIHRvIHRoZSBzdGRvdXQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYxNAorbXNnaWQgIkNhbiBub3Qgc3RhdCBvdXRwdXRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkltYWdlICglcykgaXMgY29tcHJlc3NlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW1hZ2UgKCVzKSBpcyBlbmNyeXB0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjb252ZXJ0IHFjb3cyIGltYWdlICglcykgaW50byByYXcgaW1hZ2UgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjM5CisjLCBmdXp6eQorbXNnaWQgIlRoZSAtYyBvcHRpb24gb25seSBzdXBwb3J0ZWQgaW4gcmF3IG1vZGVcbiIKK21zZ3N0ciAiLW/lj6rog73ooqvmjIflrprkuIDmrKEiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NDQKK21zZ2lkICJUaGUgLWMgb3B0aW9uIG5vdCBzdXBwb3J0ZWQgd2hlbiB3cml0aW5nIHRvIHN0ZG91dFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NTEKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGNoZWNrX2J1ZiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjU3CisjLCBmdXp6eQorbXNnaWQgIlRoZSAtcCBvcHRpb24gb25seSBzdXBwb3J0ZWQgaW4gcmF3IG1vZGVcbiIKK21zZ3N0ciAiLW/lj6rog73ooqvmjIflrprkuIDmrKEiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxvY2tzIGFscmVhZHkgY29udGFpbmVkIHRoZSBkYXRhIHRvIGJlIGNvcGllZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJsYWJlbC5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBvcGVuICVzXG4iCittc2dzdHIgImUybGFiZWw6IOaXoOazleaJk+W8gCAlc1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3IgcmVhZGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IOivu+WPlnN1cGVyYmxvY2vlh7rplJlcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogbm90IGFuIGV4dDIgZmlsZXN5c3RlbVxuIgorbXNnc3RyICJlMmxhYmVsOiDkuI3mmK/kuIDkuKpleDLmlofku7bns7vnu59cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6OTcgbWlzYy90dW5lMmZzLmM6MjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBsYWJlbCB0b28gbG9uZywgdHJ1bmNhdGluZy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9jayBhZ2FpblxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciB3cml0aW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMTcgbWlzYy90dW5lMmZzLmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBlMmxhYmVsIGRldmljZSBbbmV3bGFiZWxdXG4iCittc2dzdHIgIueUqOazlTogZTJsYWJlbCBkZXZpY2UgW+aWsOWNt+agh11cbiIKKworIzogbWlzYy9lMnVuZG8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgPHRyYW5zYWN0aW9uIGZpbGU+IDxmaWxlc3lzdGVtPlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6NTIKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjYyIG1pc2MvZTJ1bmRvLmM6ODMgbWlzYy9lMnVuZG8uYzoxMDggbWlzYy9lMnVuZG8uYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9mZXRjaCAlc1xuIgorbXNnc3RyICJ0ZGJfZmV0Y2ggJXMg5aSx6LSlXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIE1vdW50IHRpbWUgZGlkbid0IG1hdGNoICV1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzo4OQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBVVUlEIGRpZG4ndCBtYXRjaCBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX29wZW4gJXNcbiIKK21zZ3N0ciAidGRiX29wZW4gJXMg5aSx6LSlXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjE3NQorbXNnaWQgImUydW5kbyBzaG91bGQgb25seSBiZSBydW4gb24gdW5tb3VudGVkIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXNcbiIKK21zZ3N0ciAi5omT5byAJXPlpLHotKVcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwbGF5ZWQgdHJhbnNhY3Rpb24gb2Ygc2l6ZSAlemQgYXQgbG9jYXRpb24gJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB3cml0ZSAlc1xuIgorbXNnc3RyICLlhpnlhaUlc+Wksei0pVxuIgorCisjOiBtaXNjL2ZzY2suYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogY291bGRuJ3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogYmFkIGZvcm1hdCBvbiBsaW5lICVkIG9mICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6MzcwCittc2dpZCAiIgorIldBUk5JTkc6IFlvdXIgL2V0Yy9mc3RhYiBkb2VzIG5vdCBjb250YWluIHRoZSBmc2NrIHBhc3Nub1xuIgorIlx0ZmllbGQuICBJIHdpbGwga2x1ZGdlIGFyb3VuZCB0aGluZ3MgZm9yIHlvdSwgYnV0IHlvdVxuIgorIlx0c2hvdWxkIGZpeCB5b3VyIC9ldGMvZnN0YWIgZmlsZSBhcyBzb29uIGFzIHlvdSBjYW4uXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6ICVzOiBub3QgZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nLi4uICVzIGZvciBkZXZpY2UgJXMgZXhpdGVkIHdpdGggc2lnbmFsICVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlczogc3RhdHVzIGlzICV4LCBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5pc2hlZCB3aXRoICVzIChleGl0IHN0YXR1cyAlZClcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzo3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IEVycm9yICVkIHdoaWxlIGV4ZWN1dGluZyBmc2NrLiVzIGZvciAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjc0MgorbXNnaWQgIiIKKyJFaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlIGZpbGVzeXN0ZW0gdHlwZXMgcGFzc2VkIHRvIC10IG11c3QgYmUgcHJlZml4ZWRcbiIKKyJ3aXRoICdubycgb3IgJyEnLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjc2MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlsZXN5c3RlbSB0eXBlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IHNraXBwaW5nIGJhZCBsaW5lIGluIC9ldGMvZnN0YWI6IGJpbmQgbW91bnQgd2l0aCBub256ZXJvIGZzY2sgcGFzcyAiCisibnVtYmVyXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6IGNhbm5vdCBjaGVjayAlczogZnNjay4lcyBub3QgZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzo5NjcKK21zZ2lkICJDaGVja2luZyBhbGwgZmlsZSBzeXN0ZW1zLlxuIgorbXNnc3RyICLmraPlnKjmo4Dmn6XmiYDmnInmlofku7bns7vnu58uXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS13YWl0aW5nLS0gKHBhc3MgJWQpXG4iCittc2dzdHIgIi0t6K+356iN5YCZLS0gKOWujOaIkCAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6MTA3OAorbXNnaWQgIiIKKyJVc2FnZTogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGZzdHlwZV0gW2ZzLW9wdGlvbnNdIFtmaWxlc3lzIC4uLl1cbiIKK21zZ3N0ciAiIgorIueUqOazlTogVXNhZ2U6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZmQgXSBdIFstdCBmc3R5cGVdIFtmcy1vcHRpb25zXSAiCisiW2ZpbGVzeXMgLi4uXVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBkZXZpY2VzXG4iCittc2dzdHIgIiVzOiDorr7lpIfov4flpJpcbiIKKworIzogbWlzYy9mc2NrLmM6MTE1MyBtaXNjL2ZzY2suYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiJXM6IOWPguaVsOi/h+WkmlxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWYWRsdl0gW2ZpbGVzLi4uXVxuIgorbXNnc3RyICLnlKjms5U6ICVzIFstUlZhZGx2XSBbZmlsZXMuLi5dXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2xzYXR0ci5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgdmVyc2lvbiBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstY3wtbCBmaWxlbmFtZV0gWy1iIGJsb2NrLXNpemVdIFstQyBjbHVzdGVyLXNpemVdXG4iCisiXHRbLWkgYnl0ZXMtcGVyLWlub2RlXSBbLUkgaW5vZGUtc2l6ZV0gWy1KIGpvdXJuYWwtb3B0aW9uc11cbiIKKyJcdFstRyBmbGV4LWdyb3VwLXNpemVdIFstTiBudW1iZXItb2YtaW5vZGVzXVxuIgorIlx0Wy1tIHJlc2VydmVkLWJsb2Nrcy1wZXJjZW50YWdlXSBbLW8gY3JlYXRvci1vc11cbiIKKyJcdFstZyBibG9ja3MtcGVyLWdyb3VwXSBbLUwgdm9sdW1lLWxhYmVsXSBbLU0gbGFzdC1tb3VudGVkLWRpcmVjdG9yeV1cbiIKKyJcdFstTyBmZWF0dXJlWywuLi5dXSBbLXIgZnMtcmV2aXNpb25dIFstRSBleHRlbmRlZC1vcHRpb25bLC4uLl1dXG4iCisiXHRbLXQgZnMtdHlwZV0gWy1UIHVzYWdlLXR5cGUgXSBbLVUgVVVJRF0gWy1qbnF2REZLU1ZdIGRldmljZSBbYmxvY2tzLSIKKyJjb3VudF1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJSdW5uaW5nIGNvbW1hbmQ6ICVzXG4iCittc2dzdHIgIuato+WcqOaJp+ihjOWRveS7pDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJ1biAnJXMnIgorbXNnc3RyICLlvZPlsJ3or5Xov5DooYwgJyVzJyDml7YiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYzCittc2dpZCAid2hpbGUgcHJvY2Vzc2luZyBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBwcm9ncmFtIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVkIGluIHByaW1hcnkgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9yIGFyZWEgYmFkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrcyAldSB0aHJvdWdoICV1IG11c3QgYmUgZ29vZCBpbiBvcmRlciB0byBidWlsZCBhIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTUKK21zZ2lkICJBYm9ydGluZy4uLi5cbiIKK21zZ3N0ciAi5q2j5Zyo57uI5q2iLi4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB0aGUgYmFja3VwIHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvcnMgYXQgYmxvY2sgJXUgY29udGFpblxuIgorIlx0YmFkIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjMzNAorbXNnaWQgIndoaWxlIG1hcmtpbmcgYmFkIGJsb2NrcyBhcyB1c2VkIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mzg2Cittc2dpZCAiV3JpdGluZyBpbm9kZSB0YWJsZXM6ICIKK21zZ3N0ciAi5q2j5Zyo5YaZ5YWlaW5vZGXooag6ICIKKworIzogbWlzYy9ta2UyZnMuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCB3cml0ZSAlZCBibG9ja3MgaW4gaW5vZGUgdGFibGUgc3RhcnRpbmcgYXQgJWxsdTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjQyMSBtaXNjL21rZTJmcy5jOjI0NzkgbWlzYy9ta2UyZnMuYzoyNzY0Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAi5a6M5oiQICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjQzMgorbXNnaWQgIndoaWxlIGNyZWF0aW5nIHJvb3QgZGlyIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDM5Cittc2dpZCAid2hpbGUgcmVhZGluZyByb290IGlub2RlIgorbXNnc3RyICLlvZPor7vlj5blnY/lnZdpbm9kZeaXtiIKKworIzogbWlzYy9ta2UyZnMuYzo0NTEKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHJvb3QgaW5vZGUgb3duZXJzaGlwIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDY5Cittc2dpZCAid2hpbGUgY3JlYXRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo0NzYKK21zZ2lkICJ3aGlsZSBsb29raW5nIHVwIC9sb3N0K2ZvdW5kIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDg5Cittc2dpZCAid2hpbGUgZXhwYW5kaW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTA0Cittc2dpZCAid2hpbGUgc2V0dGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3V0IG9mIG1lbW9yeSBlcmFzaW5nIHNlY3RvcnMgJWQtJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAwOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzMKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgxCittc2dpZCAiWmVyb2luZyBqb3VybmFsIGRldmljZTogIgorbXNnc3RyICLmraPlnKjlsIbml6Xlv5forr7lpIfmuIXpm7Y6ICIKKworIzogbWlzYy9ta2UyZnMuYzo1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBqb3VybmFsIGRldmljZSAoYmxvY2sgJWxsdSwgY291bnQgJWQpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjExCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgZmlsZXN5c3RlbSB3aXRoICVsbHUgJWRrIGJsb2NrcyBhbmQgJXUgaW5vZGVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3YXJuaW5nOiAlbGx1IGJsb2NrcyB1bnVzZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyLorablkYo6ICV1IOWdl+acquS9v+eUqC5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBsYWJlbD0lc1xuIgorbXNnc3RyICLmlofku7bns7vnu5/moIfnrb49JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2NDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk9TIHR5cGU6ICVzXG4iCittc2dzdHIgIuaTjeS9nOezu+e7nzoiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAi5Z2X5aSn5bCPPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDbHVzdGVyIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAi5Z2X5aSn5bCPPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyYWdtZW50IHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAi5YiG5Z2X5aSn5bCPPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0cmlkZT0ldSBibG9ja3MsIFN0cmlwZSB3aWR0aD0ldSBibG9ja3NcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjY1NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMsICVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSBibG9ja3MgKCUyLjJmJSUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlclxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0IGRhdGEgYmxvY2s9JXVcbiIKK21zZ3N0ciAi56ys5LiA5Liq5pWw5o2u5Z2XPSV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJvb3QgZGlyZWN0b3J5IG93bmVyPSV1OiV1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBmaWxlc3lzdGVtIGJsb2Nrcz0lbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjY2OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cHNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGNsdXN0ZXJzIHBlciBncm91cFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjY3OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2ODgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gVVVJRDogJXNcbiIKK21zZ3N0ciAi5paH5Lu257O757uf5qCH562+PSVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Njg5Cittc2dpZCAiU3VwZXJibG9jayBiYWNrdXBzIHN0b3JlZCBvbiBibG9ja3M6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjc2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyAnLU8gNjRiaXQnXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtdXN0IGJlIGJlZm9yZSAncmVzaXplPSV1J1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Nzg1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRlc2Nfc2l6ZTogJyVzJ1xuIgorbXNnc3RyICLml6DmlYjnmoTmlrDlpKflsI86JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3OTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2Zmc2V0OiAlc1xuIgorbXNnc3RyICLml6DmlYjnmoTmlrDlpKflsI86JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MTIgbWlzYy90dW5lMmZzLmM6MTIzOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtbXBfdXBkYXRlX2ludGVydmFsOiAlc1xuIgorbXNnc3RyICLorr7nva7kuobml6DmlYjnmoTmjILovb3pgInpobk6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICMgb2YgYmFja3VwIHN1cGVyYmxvY2tzOiAlc1xuIgorbXNnc3RyICLml6DmlYjnmoTmlrDlpKflsI86JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaXBlLXdpZHRoIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo4OTMKK21zZ2lkICJUaGUgcmVzaXplIG1heGltdW0gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGZpbGVzeXN0ZW0gc2l6ZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjkxNworbXNnaWQgIk9uLWxpbmUgcmVzaXppbmcgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjk0NCBtaXNjL21rZTJmcy5jOjk1MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByb290X293bmVyOiAnJXMnXG4iCittc2dzdHIgIuiuvue9ruS6huaXoOaViOeahOaMgui9vemAiemhuTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5NzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcXVvdGF0eXBlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAi6K6+572u5LqG5peg5pWI55qE5oyC6L296YCJ6aG5OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0bW1wX3VwZGF0ZV9pbnRlcnZhbD08aW50ZXJ2YWw+XG4iCisiXHRudW1fYmFja3VwX3NiPTwwfDF8Mj5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBkYXRhIGNodW5rIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUgKiBkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdG9mZnNldD08b2Zmc2V0IHRvIGNyZWF0ZSB0aGUgZmlsZSBzeXN0ZW0+XG4iCisiXHRyZXNpemU9PHJlc2l6ZSBtYXhpbXVtIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0cGFja2VkX21ldGFfYmxvY2tzPTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdGxhenlfam91cm5hbF9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0cm9vdF91aWQ9PHVpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHJvb3RfZ2lkPTxnaWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXNyIE9SIGdycD5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IFJBSUQgc3RyaXBlLXdpZHRoICV1IG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHN0cmlkZSAldS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBta2UyZnMgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDY4IG1pc2MvdHVuZTJmcy5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGZpbGVzeXN0ZW0gb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAi6K6+572u5LqG5peg5pWI55qE5paH5Lu257O757uf6YCJ6aG5OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwODAgbWlzYy90dW5lMmZzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAi6K6+572u5LqG5peg5pWI55qE5oyC6L296YCJ6aG5OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIllvdXIgbWtlMmZzLmNvbmYgZmlsZSBkb2VzIG5vdCBkZWZpbmUgdGhlICVzIGZpbGVzeXN0ZW0gdHlwZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEyMjQKK21zZ2lkICIiCisiWW91IHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBhbiB1cGRhdGVkIG1rZTJmcy5jb25mIGZpbGUuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjI4CisjLCBmdXp6eQorbXNnaWQgIkFib3J0aW5nLi4uXG4iCittc2dzdHIgIuato+WcqOe7iOatoi4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBmc190eXBlICVzIGlzIG5vdCBkZWZpbmVkIGluIG1rZTJmcy5jb25mXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDQ5CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IFBBVEguXG4iCittc2dzdHIgIuaXoOazleS4unRkYuaWh+S7tuWQjeWIhumFjeWGheWtmFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgaW5pdCBwcm9maWxlIHN1Y2Nlc3NmdWxseSAoZXJyb3I6ICVsZCkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTIzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2sgc2l6ZSAtICVzIgorbXNnc3RyICLml6DmlYjnmoTlnZflpKflsI8gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgdXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2x1c3RlciBzaXplIC0gJXMiCittc2dzdHIgIuaXoOaViOeahOWdl+Wkp+WwjyAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NTMKK21zZ2lkICInLVInIGlzIGRlcHJlY2F0ZWQsIHVzZSAnLUUnIGluc3RlYWQiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTY1Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGJsb2NrcyBwZXIgZ3JvdXAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTcwCittc2dpZCAiYmxvY2tzIHBlciBncm91cCBtdXN0IGJlIG11bHRpcGxlIG9mIDgiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTc4Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGZsZXhfYmcgc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODQKK21zZ2lkICJmbGV4X2JnIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIiCittc2dzdHIgImZsZXhfYmcg5aSn5bCP5b+F6aG75pivMueahOasoeaWuSIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmbGV4X2JnIHNpemUgKCVsdSkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMl4zMSIKK21zZ3N0ciAiZmxleF9iZyDlpKflsI/lv4XpobvmmK8y55qE5qyh5pa5IgorCisjOiBtaXNjL21rZTJmcy5jOjE2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSByYXRpbyAlcyAobWluICVkL21heCAlZCkiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICLml6DmlYjnmoRpbm9kZeWkp+WwjyAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MjMKK21zZ2lkICIiCisiV2FybmluZzogLUsgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLiBVc2UgJy1FICIKKyJub2Rpc2NhcmQnIGV4dGVuZGVkIG9wdGlvbiBpbnN0ZWFkIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYzNAorbXNnaWQgImluIG1hbGxvYyBmb3IgYmFkX2Jsb2Nrc19maWxlbmFtZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtIGlub2RlcyAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gbGV2ZWwgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2ODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjcmVhdGUgcmV2aXNpb24gJWQiCittc2dzdHIgIuW9k+Wwneivleiwg+aVtCVz55qE5aSn5bCP5pe2IgorCisjOiBtaXNjL21rZTJmcy5jOjE2OTgKKyMsIGZ1enp5Cittc2dpZCAiVGhlIC10IG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIi1v5Y+q6IO96KKr5oyH5a6a5LiA5qyhIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MDYKKyMsIGZ1enp5Cittc2dpZCAiVGhlIC1UIG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIi1v5Y+q6IO96KKr5oyH5a6a5LiA5qyhIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NTkgbWlzYy9ta2UyZnMuYzoyODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgZGV2aWNlICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZGV2IGJsb2Nrc2l6ZSAoJWQpIHNtYWxsZXIgdGhhbiBtaW5pbXVtIGJsb2Nrc2l6ZSAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBqb3VybmFsIGRldmljZSdzIGJsb2Nrc2l6ZTogJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE3ODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2tzICclcycgb24gZGV2aWNlICclcyciCittc2dzdHIgIuaXoOaViOeahOWdl+Wkp+WwjyAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MDQKK21zZ2lkICJmaWxlc3lzdGVtIgorbXNnc3RyICLmlofku7bns7vnu58iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgxNyByZXNpemUvbWFpbi5jOjM5NQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBzaXplIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgyMworbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgzMAorbXNnaWQgIiIKKyJEZXZpY2Ugc2l6ZSByZXBvcnRlZCB0byBiZSB6ZXJvLiAgSW52YWxpZCBwYXJ0aXRpb24gc3BlY2lmaWVkLCBvclxuIgorIlx0cGFydGl0aW9uIHRhYmxlIHdhc24ndCByZXJlYWQgYWZ0ZXIgcnVubmluZyBmZGlzaywgZHVlIHRvXG4iCisiXHRhIG1vZGlmaWVkIHBhcnRpdGlvbiBiZWluZyBidXN5IGFuZCBpbiB1c2UuICBZb3UgbWF5IG5lZWQgdG8gcmVib290XG4iCisiXHR0byByZS1yZWFkIHlvdXIgcGFydGl0aW9uIHRhYmxlLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg0NworbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg2NworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBmcyB0eXBlcyBsaXN0XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTA4Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBoYXJkd2FyZSBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MTQKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBwaHlzaWNhbCBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAi5b2T5bCd6K+V5a+5JXPov5vooYxzdGF06LCD55So5pe2IgorCisjOiBtaXNjL21rZTJmcy5jOjE5NDYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsIGZvciBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNwZWNpZmllZCBibG9ja3NpemUgJWQgaXMgbGVzcyB0aGFuIGRldmljZSBwaHlzaWNhbCBzZWN0b3JzaXplICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogU2l6ZSBvZiBkZXZpY2UgKDB4JWxseCBibG9ja3MpICVzIHRvbyBiaWcgdG8gYmUgZXhwcmVzc2VkXG4iCisiXHRpbiAzMiBiaXRzIHVzaW5nIGEgYmxvY2tzaXplIG9mICVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk5MQorbXNnaWQgImZzX3R5cGVzIGZvciBta2UyZnMuY29uZiByZXNvbHV0aW9uOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTk4Cittc2dpZCAiRmlsZXN5c3RlbSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAwNgorbXNnaWQgIlNwYXJzZSBzdXBlcmJsb2NrcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAxOAorbXNnaWQgIkpvdXJuYWxzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDMyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJWxmIgorbXNnc3RyICLml6DmlYjnmoTlnZflpKflsI8gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyMDQ5Cittc2dpZCAiIgorIkV4dGVudHMgTVVTVCBiZSBlbmFibGVkIGZvciBhIDY0LWJpdCBmaWxlc3lzdGVtLiAgUGFzcyAtTyBleHRlbnRzIHRvICIKKyJyZWN0aWZ5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA2OQorbXNnaWQgIlRoZSBjbHVzdGVyIHNpemUgbWF5IG5vdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGJsb2NrIHNpemUuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDc1Cittc2dpZCAic3BlY2lmeWluZyBhIGNsdXN0ZXIgc2l6ZSByZXF1aXJlcyB0aGUgYmlnYWxsb2MgZmVhdHVyZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogVW5hYmxlIHRvIGdldCBkZXZpY2UgZ2VvbWV0cnkgZm9yICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsaWdubWVudCBpcyBvZmZzZXQgYnkgJWx1IGJ5dGVzLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBtYXkgcmVzdWx0IGluIHZlcnkgcG9vciBwZXJmb3JtYW5jZSwgKHJlKS1wYXJ0aXRpb25pbmcgc3VnZ2VzdGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCkiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiAlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCksIGZvcmNlZCB0byBjb250aW51ZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE4MAorbXNnaWQgIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0IGV4dGVudHMgZmVhdHVyZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIxODcKK21zZ2lkICIiCisiVGhlIHJlc2l6ZV9pbm9kZSBhbmQgbWV0YV9iZyBmZWF0dXJlcyBhcmUgbm90IGNvbXBhdGlibGUuXG4iCisiVGhleSBjYW4gbm90IGJlIGJvdGggZW5hYmxlZCBzaW11bHRhbmVvdXNseS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIxOTYKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiIKKyJTZWUgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQmlnYWxsb2MgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMDcKK21zZ2lkICJyZXNlcnZlZCBvbmxpbmUgcmVzaXplIGJsb2NrcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMTYKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNDAKK21zZ2lkICJGbGV4X2JnIGZlYXR1cmUgbm90IGVuYWJsZWQsIHNvIGZsZXhfYmcgc2l6ZSBtYXkgbm90IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplICVkIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgcmFpc2UgaW5vZGUgcmF0aW8/IgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCBzcGVjaWZ5IDwgMl4zMiBpbm9kZXMiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbm9kZV9zaXplICgldSkgKiBpbm9kZXNfY291bnQgKCV1KSB0b28gYmlnIGZvciBhXG4iCisiXHRmaWxlc3lzdGVtIHdpdGggJWxsdSBibG9ja3MsIHNwZWNpZnkgaGlnaGVyIGlub2RlX3JhdGlvICgtaSlcbiIKKyJcdG9yIGxvd2VyIGlub2RlIGNvdW50ICgtTikuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJPdmVyd3JpdGluZyBleGlzdGluZyBmaWxlc3lzdGVtOyB0aGlzIGNhbiBiZSB1bmRvbmUgdXNpbmcgdGhlIGNvbW1hbmQ6XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQzMgorIywgZnV6enkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc2V0dXAgdW5kbyBmaWxlXG4iCittc2dzdHIgIuW9k+WwneivleWvuSVz6L+b6KGMc3RhdOiwg+eUqOaXtiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDU4CisjLCBmdXp6eQorbXNnaWQgIkRpc2NhcmRpbmcgZGV2aWNlIGJsb2NrczogIgorbXNnc3RyICLmraPlnKjor7vlj5bnm67lvZXlnZciCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ3NAorbXNnaWQgImZhaWxlZCAtICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI1OTYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHVwIHN1cGVyYmxvY2siCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjEyCittc2dpZCAiRGlzY2FyZCBzdWNjZWVkZWQgYW5kIHdpbGwgcmV0dXJuIDBzIC0gc2tpcHBpbmcgaW5vZGUgdGFibGUgd2lwZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9zIC0gJXMiCittc2dzdHIgIuacquefpeaTjeS9nOezu+e7nyAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjI3NTIKKyMsIGZ1enp5Cittc2dpZCAiQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICIKK21zZ3N0ciAi5q2j5Zyo5YaZ5YWlaW5vZGXooag6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNzYwCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGFsbG9jYXRlIGZpbGVzeXN0ZW0gdGFibGVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjc2OQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgYmxvY2sgJWxsdSBhdCBlbmQgb2YgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI4MjYKK21zZ2lkICJ3aGlsZSByZXNlcnZpbmcgYmxvY2tzIGZvciBvbmxpbmUgcmVzaXplIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgzOCBtaXNjL3R1bmUyZnMuYzo3MTIKK21zZ2lkICJqb3VybmFsIgorbXNnc3RyICLml6Xlv5ciCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgam91cm5hbCB0byBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NjIgbWlzYy9ta2UyZnMuYzoyODkzIG1pc2MvdHVuZTJmcy5jOjc0MSBtaXNjL3R1bmUyZnMuYzo3NjAKK21zZ2lkICJkb25lXG4iCittc2dzdHIgIuWujOaIkFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NjkKK21zZ2lkICJTa2lwcGluZyBqb3VybmFsIGNyZWF0aW9uIGluIHN1cGVyLW9ubHkgbW9kZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICgldSBibG9ja3MpOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyODg5Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjkwMSBtaXNjL3R1bmUyZnMuYzo1MTYKK21zZ2lkICIiCisiXG4iCisiRXJyb3Igd2hpbGUgZW5hYmxpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBpcyBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkIHNlY29uZHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTIzCittc2dpZCAiV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTMwCittc2dpZCAiIgorIlxuIgorIldhcm5pbmcsIGhhZCB0cm91YmxlIHdyaXRpbmcgb3V0IHN1cGVyYmxvY2tzLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI5MzIKK21zZ2lkICIiCisiZG9uZVxuIgorIlxuIgorbXNnc3RyICIiCisi5a6M5oiQXG4iCisiXG4iCisKKyM6IG1pc2MvbWtsb3N0K2ZvdW5kLmM6NTAKK21zZ2lkICJVc2FnZTogbWtsb3N0K2ZvdW5kXG4iCittc2dzdHIgIueUqOazlTogbWtsb3N0K2ZvdW5kXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICAlcyBkZXZpY2UuLi5cbiIKKyJcbiIKKyJQcmludHMgb3V0IHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGVhY2ggZ2l2ZW4gZGV2aWNlLlxuIgorIkZvciBleGFtcGxlOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorbXNnc3RyICIiCisi55So5rOVOiAlcyBkZXZpY2UuLi5cbiIKKyJcbiIKKyLovpPlh7rmr4/kuKrnu5nlrprorr7lpIfnmoTliIbljLrkv6Hmga8uXG4iCisi5L6L5aaCOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICLml6Dms5XmiZPlvIAgJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBnZW9tZXRyeSBvZiAlczogJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgc2l6ZSBvZiAlczogJXMiCittc2dzdHIgIuaXoOazleiOt+W+lyAlcyDnmoTlpKflsI86ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEyCittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIuivt+WcqOi/meS4quaWh+S7tuezu+e7n+S4iui/kOihjCBlMmZzY2suXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYyBtYXhfbW91bnRzX2NvdW50XSBbLWUgZXJyb3JzX2JlaGF2aW9yXSBbLWcgZ3JvdXBdXG4iCisiXHRbLWkgaW50ZXJ2YWxbZHxtfHddXSBbLWpdIFstSiBqb3VybmFsX29wdGlvbnNdIFstbF1cbiIKKyJcdFstbSByZXNlcnZlZF9ibG9ja3NfcGVyY2VudF0gWy1vIFteXW1vdW50X29wdGlvbnNbLC4uLl1dIFstcCAiCisibW1wX3VwZGF0ZV9pbnRlcnZhbF1cbiIKKyJcdFstciByZXNlcnZlZF9ibG9ja3NfY291bnRdIFstdSB1c2VyXSBbLUMgbW91bnRfY291bnRdIFstTCB2b2x1bWVfbGFiZWxdXG4iCisiXHRbLU0gbGFzdF9tb3VudGVkX2Rpcl0gWy1PIFteXWZlYXR1cmVbLC4uLl1dXG4iCisiXHRbLVEgcXVvdGFfb3B0aW9uc11cbiIKKyJcdFstRSBleHRlbmRlZC1vcHRpb25bLC4uLl1dIFstVCBsYXN0X2NoZWNrX3RpbWVdIFstVSBVVUlEXVxuIgorIlx0WyAtSSBuZXdfaW5vZGVfc2l6ZSBdIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMworbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQhXG4iCittc2dzdHIgIuaXpeW/l+i2hee6p+Wdl+acquaJvuWIsCFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjYxCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjcgbWlzYy90dW5lMmZzLmM6MTk2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiJXMg5LiN5piv5LiA5Liq5pel5b+X6K6+5aSHLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNzcgbWlzYy90dW5lMmZzLmM6MTk3NAorbXNnaWQgIkZpbGVzeXN0ZW0ncyBVVUlEIG5vdCBmb3VuZCBvbiBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMDEKK21zZ2lkICIiCisiQ2Fubm90IGxvY2F0ZSBqb3VybmFsIGRldmljZS4gSXQgd2FzIE5PVCByZW1vdmVkXG4iCisiVXNlIC1mIG9wdGlvbiB0byByZW1vdmUgbWlzc2luZyBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMTAKK21zZ2lkICJKb3VybmFsIHJlbW92ZWRcbiIKK21zZ3N0ciAi5pel5b+X5bey5Yig6ZmkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM1NAorbXNnaWQgIndoaWxlIHJlYWRpbmcgYml0bWFwcyIKK21zZ3N0ciAi5b2T6K+75Y+W5L2N5Zu+5pe2IgorCisjOiBtaXNjL3R1bmUyZnMuYzozNjIKK21zZ2lkICJ3aGlsZSBjbGVhcmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICLlvZPor7vlj5blnY/lnZdpbm9kZeaXtiIKKworIzogbWlzYy90dW5lMmZzLmM6MzczCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQwNSBtaXNjL3R1bmUyZnMuYzo0MTgKK21zZ2lkICIoYW5kIHJlYm9vdCBhZnRlcndhcmRzISlcbiIKK21zZ3N0ciAiKOW5tuS4lOi/h+WQjumHjeWQryEpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDY3Cittc2dpZCAiIgorIlRoZSBoYXNfam91cm5hbCBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NzYKK21zZ2lkICIiCisiVGhlIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LiAgUGxlYXNlIHJ1biBlMmZzY2sgYmVmb3JlIGNsZWFyaW5nXG4iCisidGhlIGhhc19qb3VybmFsIGZsYWcuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDk1Cittc2dpZCAiIgorIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICdzcGFyc2Vfc3VwZXInIG5vdCBzdXBwb3J0ZWRcbiIKKyJmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgbWV0YV9iZyBmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NTA4Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2FuJ3RcbiIKKyJiZSBzZXQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBvclxuIgorInJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MzUKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW5ub3RcbiIKKyJiZSBkaXNhYmxlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyByZWFkb25seS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1NDMKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3Igd2hpbGUgcmVhZGluZyBiaXRtYXBzXG4iCittc2dzdHIgIuW9k+ivu+WPluS9jeWbvuaXtiIKKworIzogbWlzYy90dW5lMmZzLmM6NTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hZ2ljIG51bWJlciBpbiBNTVAgYmxvY2sgZG9lcyBub3QgbWF0Y2guIGV4cGVjdGVkOiAleCwgYWN0dWFsOiAleFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1NworIywgZnV6enkKK21zZ2lkICJ3aGlsZSByZWFkaW5nIE1NUCBibG9jay4iCittc2dzdHIgIuW9k+ivu+WPluWdj+Wdl2lub2Rl5pe2IgorCisjOiBtaXNjL3R1bmUyZnMuYzo1ODkKK21zZ2lkICIiCisiQ2xlYXJpbmcgdGhlIGZsZXhfYmcgZmxhZyB3b3VsZCBjYXVzZSB0aGUgdGhlIGZpbGVzeXN0ZW0gdG8gYmVcbiIKKyJpbmNvbnNpc3RlbnQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NjAwCittc2dpZCAiIgorIlRoZSBodWdlX2ZpbGUgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NjYwCittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6ICdecXVvdGEnIG9wdGlvbiBvdmVycmlkZXMgJy1RJ2FyZ3VtZW50cy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MDUKK21zZ2lkICJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBhIGpvdXJuYWwuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgb24gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBvbiBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgYWRkaW5nIGZpbGVzeXN0ZW0gdG8gam91cm5hbCBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3NDMKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIGlub2RlOiAiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NzU3Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6ODMyCisjLCBmdXp6eQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBxdW90YSBvcHRpb25zIVxuIgorbXNnc3RyICLml6Dms5XkuLp0ZGLmlofku7blkI3liIbphY3lhoXlrZhcbiIKKworIzogbWlzYy90dW5lMmZzLmM6ODU0Cittc2dpZCAiIgorIlxuIgorIkJhZCBxdW90YSBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJGb2xsb3dpbmcgdmFsaWQgcXVvdGEgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIChwYXNzIGJ5IHNlcGFyYXRpbmcgd2l0aCAiCisiY29tbWEpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHBhcnNlIGRhdGUvdGltZSBzcGVjaWZpZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk0MiBtaXNjL3R1bmUyZnMuYzo5NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1vdW50cyBjb3VudCAtICVzIgorbXNnc3RyICLplJnor6/mjILovb3orqHmlbAgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBlcnJvciBiZWhhdmlvciAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2lkL2dyb3VwIG5hbWUgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbnRlcnZhbCAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrIHJhdGlvIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3NQorbXNnaWQgIi1vIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICItb+WPquiDveiiq+aMh+WumuS4gOasoSIKKworIzogbWlzYy90dW5lMmZzLmM6MTA4NAorbXNnaWQgIi1PIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICItT+WPquiDveiiq+aMh+WumuS4gOasoSIKKworIzogbWlzYy90dW5lMmZzLmM6MTEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdWlkL3VzZXIgbmFtZSAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAi5peg5pWI55qEaW5vZGXlpKflsI8gLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbm9kZSBzaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28tICVzIgorbXNnc3RyICJJbm9kZSDlpKflsI/lv4XpobvmmK8y55qE5qyh5pa5LSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtbXBfdXBkYXRlX2ludGVydmFsIHRvbyBiaWc6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kXG4iCittc2dpZF9wbHVyYWwgIiIKKyJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpZGU6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaXBlLXdpZHRoOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBoYXNoIGFsZ29yaXRobTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSB0byAlcyAoJWQpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTMzMQorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0Y2xlYXJfbW1wXG4iCisiXHRoYXNoX2FsZz08aGFzaCBhbGdvcml0aG0+XG4iCisiXHRtb3VudF9vcHRzPTxleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnM+XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgY2h1bmsgc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGVfd2lkdGg9PFJBSUQgc3RyaWRlKmRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0XnRlc3RfZnNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzk4CisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byByZWFkIGlub2RlIGJpdG1hcFxuIgorbXNnc3RyICLlvZPor7vlj5bkvY3lm77ml7YiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MDMKKyMsIGZ1enp5Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgYmxvY2sgYml0bWFwXG4iCittc2dzdHIgIumUmeivr+Wdl+aYoOWwhOS4reeahGlub2RlIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODIwIHJlc2l6ZS9yZXNpemUyZnMuYzo5MzEKK21zZ2lkICJibG9ja3MgdG8gYmUgbW92ZWQiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgyMworbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSBibG9jayBiaXRtYXAgd2hlbiBpbmNyZWFzaW5nIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODI5Cittc2dpZCAiTm90IGVub3VnaCBzcGFjZSB0byBpbmNyZWFzZSBpbm9kZSBzaXplIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MzQKK21zZ2lkICJGYWlsZWQgdG8gcmVsb2NhdGUgYmxvY2tzIGR1cmluZyBpbm9kZSByZXNpemUgXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTg2NgorbXNnaWQgIiIKKyJFcnJvciBpbiByZXNpemluZyB0aGUgaW5vZGUgc2l6ZS5cbiIKKyJSdW4gZTJ1bmRvIHRvIHVuZG8gdGhlIGZpbGUgc3lzdGVtIGNoYW5nZXMuIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4OTMKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRkYiBmaWxlbmFtZVxuIgorbXNnc3RyICLml6Dms5XkuLp0ZGLmlofku7blkI3liIbphY3lhoXlrZhcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGVsZXRlICVzIgorbXNnc3RyICLlvZPlsJ3or5XliKDpmaQgJXMg5pe2IgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyB1bmRvIHRoZSB0dW5lMmZzIG9wZXJhdGlvbiBwbGVhc2UgcnVuIHRoZSBjb21tYW5kXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisi6KaB5pKk6ZSA6L+Z5qyhIHR1bmUyZnMg5pON5L2c6K+36L+Q6KGM5ZG95LukOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGJsb2NrIG1hZ2ljIGlzIGJhZC4gVHJ5IHRvIGZpeCBpdCBieSBydW5uaW5nOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA3NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBpcyBhbHJlYWR5ICVsdVxuIgorbXNnc3RyICJpbm9kZeWkp+Wwj+W3sue7j+aYryAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA4MQorbXNnaWQgIlNocmlua2luZyBpbm9kZSBzaXplIGlzIG5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlub2RlIHNpemUgJWx1IChtYXggJWQpXG4iCittc2dzdHIgIuaXoOaViOeahGlub2Rl5aSn5bCPIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtYXhpbWFsIG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGN1cnJlbnQgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXJyb3IgYmVoYXZpb3IgdG8gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGdpZCB0byAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTU0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyBpcyB0b28gYmlnICglbHUpIgorbXNnc3RyICLkv53nlZnlnZfnmoTmlbDph4/lpKrlpKcgKCVsdSkiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnRhZ2UgdG8gJWclJSAoJWxsdSBibG9ja3MpXG4iCittc2dzdHIgIuS/neeVmeWdl+eahOaVsOmHj+WkquWkpyAoJWx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIGNvdW50IGlzIHRvbyBiaWcgKCVsbHUpIgorbXNnc3RyICLkv53nlZnlnZfnmoTmlbDph4/lpKrlpKcgKCVsdSkiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxODEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IHRvICVsbHVcbiIKK21zZ3N0ciAi5L+d55WZ5Z2X55qE5pWw6YeP5aSq5aSnICglbHUpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTg3Cittc2dpZCAiIgorIlxuIgorIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSBzdXBlcmJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTkxCittc2dpZCAiIgorIlxuIgorIlNldHRpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZFxuIgorImZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBtZXRhX2JnIGZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIHNldC4gICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDcKK21zZ2lkICIiCisiXG4iCisiQ2xlYXJpbmcgdGhlIHNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdGltZSBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0byAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgdWlkIHRvICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNTMKK21zZ2lkICJFcnJvciBpbiB1c2luZyBjbGVhcl9tbXAuIEl0IG11c3QgYmUgdXNlZCB3aXRoIC1mXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI3MQorbXNnaWQgIiIKKyJUaGUgcXVvdGEgZmVhdHVyZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyOTIKK21zZ2lkICJUaGUgVVVJRCBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzMjIKK21zZ2lkICJJbnZhbGlkIFVVSUQgZm9ybWF0XG4iCittc2dzdHIgIuaXoOaViOeahCBVVUlEIOagvOW8j1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzM3CisjLCBmdXp6eQorbXNnaWQgIk5lZWQgdG8gdXBkYXRlIGpvdXJuYWwgc3VwZXJibG9jay5cbiIKK21zZ3N0ciAi6K+75Y+W5pel5b+X6LaF57qn5Z2XXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNTgKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNjYKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIGlub2RlIHNpemUgbm90IHN1cHBvcnRlZCBmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgZmxleF9iZ1xuIgorImZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW5vZGUgc2l6ZSAlbHVcbiIKK21zZ3N0ciAi5q2j5Zyo5bCGaW5vZGXlpKflsI/orr7nva7kuLogJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzODIKKyMsIGZ1enp5Cittc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBpbm9kZSBzaXplXG4iCittc2dzdHIgIuaJk+W8gCVz5aSx6LSlXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdHJpZGUgc2l6ZSB0byAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdHJpcGUgd2lkdGggdG8gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zIHRvICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzo5MworbXNnaWQgIjxwcm9jZWVkaW5nPlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjk3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQcm9jZWVkIGFueXdheSAob3Igd2FpdCAlZCBzZWNvbmRzKSA/ICh5LG4pICIKK21zZ3N0ciAi5peg6K665aaC5L2V5Lmf6KaB57un57utPyAoeSxuKSAiCisKKyM6IG1pc2MvdXRpbC5jOjEwMQorbXNnaWQgIlByb2NlZWQgYW55d2F5PyAoeSxuKSAiCittc2dzdHIgIuaXoOiuuuWmguS9leS5n+imgee7p+e7rT8gKHksbikgIgorCisjOiBtaXNjL3V0aWwuYzoxMzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlx0bGFzdCBtb3VudGVkIG9uICVzIG9uICVzIgorbXNnc3RyICLplJnor6/mjILovb3orqHmlbAgLSAlcyIKKworIzogbWlzYy91dGlsLmM6MTM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJcdGxhc3QgbW91bnRlZCBvbiAlcyIKK21zZ3N0ciAi6ZSZ6K+v5oyC6L296K6h5pWwIC0gJXMiCisKKyM6IG1pc2MvdXRpbC5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJcdGNyZWF0ZWQgb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0bGFzdCBtb2RpZmllZCBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm91bmQgYSAlcyBwYXJ0aXRpb24gdGFibGUgaW4gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGZpbGUgJXMgZG9lcyBub3QgZXhpc3QgYW5kIG5vIHNpemUgd2FzIHNwZWNpZmllZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoyMTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIHJlZ3VsYXIgZmlsZSAlc1xuIgorbXNnc3RyICLkuIDoiKzmlofku7YiCisKKyM6IG1pc2MvdXRpbC5jOjIxMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIuaXoOazleaJk+W8gCAlczogJXMiCisKKyM6IG1pc2MvdXRpbC5jOjIxNgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZGV2aWNlIGFwcGFyZW50bHkgZG9lcyBub3QgZXhpc3Q7IGRpZCB5b3Ugc3BlY2lmeSBpdCBjb3JyZWN0bHk/XG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MjM4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBibG9jayBzcGVjaWFsIGRldmljZS5cbiIKK21zZ3N0ciAi6ZSZ6K+v77yaJXMg5LiN5piv5Z2X6K6+5aSHXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjb250YWlucyBhICVzIGZpbGUgc3lzdGVtIGxhYmVsbGVkICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoyNjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGNvbnRhaW5zIGEgJXMgZmlsZSBzeXN0ZW1cbiIKK21zZ3N0ciAi5q2j5Zyo5qOA5p+l5omA5pyJ5paH5Lu257O757ufLlxuIgorCisjOiBtaXNjL3V0aWwuYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgZW50aXJlIGRldmljZSwgbm90IGp1c3Qgb25lIHBhcnRpdGlvbiFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzozMjMKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgbWFrZSBhICVzIGhlcmUhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MzM1Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgIm1rZTJmcyDlvLrliLbmiafooYwuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjM1MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBqb3VybmFsIG9wdGlvbnMhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3QgZmluZCBqb3VybmFsIGRldmljZSBtYXRjaGluZyAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjQwMworbXNnaWQgIiIKKyJcbiIKKyJCYWQgam91cm5hbCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJKb3VybmFsIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBqb3VybmFsIG9wdGlvbnMgYXJlOlxuIgorIlx0c2l6ZT08am91cm5hbCBzaXplIGluIG1lZ2FieXRlcz5cbiIKKyJcdGRldmljZT08am91cm5hbCBkZXZpY2U+XG4iCisiXHRsb2NhdGlvbj08am91cm5hbCBsb2NhdGlvbj5cbiIKKyJcbiIKKyJUaGUgam91cm5hbCBzaXplIG11c3QgYmUgYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzo0MzQKK21zZ2lkICIiCisiXG4iCisiRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIgorbXNnc3RyICIiCisiXG4iCisi5paH5Lu257O757uf5bCP5b6X5peg5rOV6K6w5b2V5pel5b+XXG4iCisKKyM6IG1pc2MvdXRpbC5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVGhlIHJlcXVlc3RlZCBqb3VybmFsIHNpemUgaXMgJWQgYmxvY2tzOyBpdCBtdXN0IGJlXG4iCisiYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBibG9ja3MuICBBYm9ydGluZy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzo0NDkKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBzaXplIHRvbyBiaWcgZm9yIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGVzeXN0ZW0gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNoZWNrZWQgZXZlcnkgJWQgbW91bnRzIG9yXG4iCisiJWcgZGF5cywgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgVXNlIHR1bmUyZnMgLWMgb3IgLWkgdG8gb3ZlcnJpZGUuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWRdIFstcCBwaWRmaWxlXSBbLXMgc29ja2V0cGF0aF0gWy1UIHRpbWVvdXRdXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyBbLXJ8dF0gWy1uIG51bV0gWy1zIHNvY2tldHBhdGhdXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyAta1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoxNTUKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGFyZ3VtZW50cyIKK21zZ3N0ciAiJXM6IOWPguaVsOi/h+WkmlxuIgorCisjOiBtaXNjL3V1aWRkLmM6MTczCittc2dpZCAiY29ubmVjdCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MTkyCittc2dpZCAid3JpdGUiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjIwMAorbXNnaWQgInJlYWQgY291bnQiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjIwNgorIywgZnV6enkKK21zZ2lkICJiYWQgcmVzcG9uc2UgbGVuZ3RoIgorbXNnc3RyICLml6DmlYjnmoTlkI7nvIDplb/luqYiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXVpZGQgZGFlbW9uIGFscmVhZHkgcnVubmluZyBhdCBwaWQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxpc3RlbiBvbiB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzU0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGZyb20gY2xpZW50LCBsZW4gPSAlZFxuIgorbXNnc3RyICLor7vlj5ZAaSAlaeWHuumUmTogJW1cbiIKKworIzogbWlzYy91dWlkZC5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVyYXRpb24gJWQsIGluY29taW5nIG51bSA9ICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHJhbmRvbSBVVUlEOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kICVkIHN1YnNlcXVlbnQgVVVJRHNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IG1pc2MvdXVpZGQuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkICVkIFVVSUQnczpcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NDMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiAlZFxuIgorbXNnc3RyICLml6DmlYjnmoRFQeeJiOacrOWPty5cbiIKKworIzogbWlzYy91dWlkZC5jOjQ3NyBtaXNjL3V1aWRkLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjUzNCBtaXNjL3V1aWRkLmM6NTYzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjYWxsaW5nIHV1aWRkIGRhZW1vbiAoJXMpOiAlc1xuIgorbXNnc3RyICLliJvlu7rmoLlAZCAoJXMpIOaXtuWHuumUmTogJW1cbiIKKworIzogbWlzYy91dWlkZC5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ4Cittc2dpZCAiTGlzdCBvZiBVVUlEJ3M6XG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHJlcGx5IGxlbmd0aCBmcm9tIHNlcnZlciAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qga2lsbCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIktpbGxlZCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGdlbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJdIFstdF1cbiIKK21zZ3N0ciAi55So5rOVOiAlcyBbLXJdIFstdF1cbiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMgorbXNnaWQgIiMgRXh0ZW50IGR1bXA6XG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIjXHROdW09JWxsdSwgU2l6ZT0lbGx1LCBDdXJzb3I9JWxsdSwgU29ydGVkPSVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1kIGRlYnVnX2ZsYWdzXSBbLWZdIFstRl0gWy1NXSBbLVBdIFstcF0gZGV2aWNlIFtuZXdfc2l6ZV1cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjY2Cittc2dpZCAiRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAi5q2j5Zyo5omp5YWFaW5vZGXooagiCisKKyM6IHJlc2l6ZS9tYWluLmM6NjkKK21zZ2lkICJSZWxvY2F0aW5nIGJsb2NrcyIKK21zZ3N0ciAi5q2j5Zyo6YeN5a6a5L2N5Z2XIgorCisjOiByZXNpemUvbWFpbi5jOjcyCittc2dpZCAiU2Nhbm5pbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIuato+WcqOaJq+aPj2lub2Rl6KGoIgorCisjOiByZXNpemUvbWFpbi5jOjc1Cittc2dpZCAiVXBkYXRpbmcgaW5vZGUgcmVmZXJlbmNlcyIKK21zZ3N0ciAi5q2j5Zyo5pu05pawaW5vZGXlvJXnlKgiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzgKK21zZ2lkICJNb3ZpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIuenu+WKqGlub2Rl6KGoIgorCisjOiByZXNpemUvbWFpbi5jOjgxCittc2dpZCAiVW5rbm93biBwYXNzPyE/IgorbXNnc3RyICLmnKrnn6XmraXpqqQ/IT8iCisKKyM6IHJlc2l6ZS9tYWluLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVnaW4gcGFzcyAlZCAobWF4ID0gJWx1KVxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6MTU1Cittc2dpZCAiIgorIlxuIgorIlJlc2l6aW5nIGJpZ2FsbG9jIGZpbGUgc3lzdGVtcyBoYXMgbm90IGJlZW4gZnVsbHkgdGVzdGVkLiAgUHJvY2VlZCBhdFxuIgorInlvdXIgb3duIHJpc2shICBVc2UgdGhlIGZvcmNlIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBnbyBhaGVhZCBhbnl3YXkuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyIKK21zZ3N0ciAi5omT5byAJXPml7YiCisKKyM6IHJlc2l6ZS9tYWluLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGdldHRpbmcgc3RhdCBpbmZvcm1hdGlvbiBmb3IgJXMiCittc2dzdHIgIuiOt+WPliVz55qEc3RhdOS/oeaBr+aXtuWHuumUmeOAgiIKKworIzogcmVzaXplL21haW4uYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZiAlcycgZmlyc3QuXG4iCisiXG4iCittc2dzdHIgIiIKKyLor7flhYjov5DooYwgJ2UyZnNjayAtZiAlcycuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGltYXRlZCBtaW5pbXVtIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW06ICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG5ldyBzaXplOiAlc1xuIgorbXNnc3RyICLml6DmlYjnmoTmlrDlpKflsI86JXNcbiIKKworIzogcmVzaXplL21haW4uYzo0MjEKK21zZ2lkICJOZXcgc2l6ZSB0b28gbGFyZ2UgdG8gYmUgZXhwcmVzc2VkIGluIDMyIGJpdHNcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJOZXcgc2l6ZSBzbWFsbGVyIHRoYW4gbWluaW11bSAoJWxsdSlcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQzNQorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBsZW5ndGgiCittc2dzdHIgIuaXoOaViOeahOWQjue8gOmVv+W6piIKKworIzogcmVzaXplL21haW4uYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb250YWluaW5nIHBhcnRpdGlvbiAob3IgZGV2aWNlKSBpcyBvbmx5ICVsbHUgKCVkaykgYmxvY2tzLlxuIgorIllvdSByZXF1ZXN0ZWQgYSBuZXcgc2l6ZSBvZiAlbGx1IGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gaXMgYWxyZWFkeSAlbGx1ICglZGspIGJsb2NrcyBsb25nLiAgTm90aGluZyB0byBkbyFcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcmVzaXplICVzIgorbXNnc3RyICLlvZPlsJ3or5XosIPmlbQlc+eahOWkp+Wwj+aXtiIKKworIzogcmVzaXplL21haW4uYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZnkgJXMnIHRvIGZpeCB0aGUgZmlsZXN5c3RlbVxuIgorImFmdGVyIHRoZSBhYm9ydGVkIHJlc2l6ZSBvcGVyYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIG9uICVzIGlzIG5vdyAlbGx1ICglZGspIGJsb2NrcyBsb25nLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byB0cnVuY2F0ZSAlcyIKK21zZ3N0ciAi5b2T5bCd6K+V5a+5JXPov5vooYxzdGF06LCD55So5pe2IgorCisjOiByZXNpemUvb25saW5lLmM6ODIKKyMsIGZ1enp5Cittc2dpZCAia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6ZSB3aXRoIHNwYXJzZV9zdXBlcjIiCittc2dzdHIgIuWGheaguOS4jeaUr+aMgeWcqOe6vyhvbmxpbmUp6LCD5pW05aSn5bCPIgorCisjOiByZXNpemUvb25saW5lLmM6ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBhdCAlcyBpcyBtb3VudGVkIG9uICVzOyBvbi1saW5lIHJlc2l6aW5nIHJlcXVpcmVkXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjkxCittc2dpZCAiT24tbGluZSBzaHJpbmtpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MTE2Cittc2dpZCAiRmlsZXN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAi5paH5Lu257O757uf5LiN5pSv5oyB5Zyo57q/KG9ubGluZSnosIPmlbTlpKflsI8iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMjUKK21zZ2lkICJOb3QgZW5vdWdoIHJlc2VydmVkIGdkdCBibG9ja3MgZm9yIHJlc2l6aW5nIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMzIKKyMsIGZ1enp5Cittc2dpZCAiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcmVzaXppbmcgYSBmaWxlIHN5c3RlbSB0aGlzIGxhcmdlIgorbXNnc3RyICLlhoXmoLjkuI3mlK/mjIHlnKjnur8ob25saW5lKeiwg+aVtOWkp+WwjyIKKworIzogcmVzaXplL29ubGluZS5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBtb3VudHBvaW50ICVzIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2xkIHJlc2l6ZSBpbnRlcmZhY2UgcmVxdWVzdGVkLlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNjQgcmVzaXplL29ubGluZS5jOjE4MQorbXNnaWQgIlBlcm1pc3Npb24gZGVuaWVkIHRvIHJlc2l6ZSBmaWxlc3lzdGVtIgorbXNnc3RyICLmsqHmnInosIPmlbTmlofku7bns7vnu5/lpKflsI/nmoTmnYPpmZAiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNjcgcmVzaXplL29ubGluZS5jOjE4NworbXNnaWQgIldoaWxlIGNoZWNraW5nIGZvciBvbi1saW5lIHJlc2l6aW5nIHN1cHBvcnQiCittc2dzdHIgIuW9k+ajgOafpeWcqOe6v+aWh+S7tuezu+e7n+Wkp+Wwj+iwg+aVtOaUr+aMgeaXtiIKKworIzogcmVzaXplL29ubGluZS5jOjE4NAorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAi5YaF5qC45LiN5pSv5oyB5Zyo57q/KG9ubGluZSnosIPmlbTlpKflsI8iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGVyZm9ybWluZyBhbiBvbi1saW5lIHJlc2l6ZSBvZiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MjMzCittc2dpZCAiV2hpbGUgdHJ5aW5nIHRvIGV4dGVuZCB0aGUgbGFzdCBncm91cCIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHRyeWluZyB0byBhZGQgZ3JvdXAgIyVkIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlcywgYW5kIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IHN1cHBvcnRlZCBvbiAiCisidGhpcyBzeXN0ZW0uXG4iCittc2dzdHIgIuaWh+S7tuezu+e7nyAlcyDooqvmjILovb3lnKggJXMs5bm25LiU6L+Z5Liq57O757uf5LiN5pSv5oyB5Zyo57q/6LCD5pW05aSn5bCPLlxuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgImlub2RlcyAoJWxsdSkgbXVzdCBiZSBsZXNzIHRoYW4gJXUiCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjY5MQorbXNnaWQgInJlc2VydmVkIGJsb2NrcyIKK21zZ3N0ciAi5L+d55WZ55qE5Z2XIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6OTM2Cittc2dpZCAibWV0YS1kYXRhIGJsb2NrcyIKK21zZ3N0ciAi5YWD5pWw5o2u5Z2XIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MTAzOSByZXNpemUvcmVzaXplMmZzLmM6MTgzNgorIywgZnV6enkKK21zZ2lkICJuZXcgbWV0YSBibG9ja3MiCittc2dzdHIgIuWFg+aVsOaNruWdlyIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjIwNTYKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuISAgTm8gc2IgaW4gbGFzdCBzdXBlcl9zcGFyc2UgYmc/XG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjIwNjEKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuISAgVW5leHBlY3RlZCBvbGRfZGVzYyBpbiBzdXBlcl9zcGFyc2UgYmc/XG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjIxMzkKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuOiByZXNpemUgaW5vZGUgY29ycnVwdCFcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEKK21zZ2lkICJFWFQyRlMgTGlicmFyeSB2ZXJzaW9uIDEuNDIuMTMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyX2ZpbHN5cyBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBiYWRibG9ja3NfbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBiYWRibG9ja3NfaXRlcmF0ZSBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9zY2FuIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdW5peCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX21hbmFnZXIgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmxvY2tfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBnZW5lcmljX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB0ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZGlyZWN0b3J5IGJsb2NrIGxpc3Qgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaWNvdW50IHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIFBvd2VycXVlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyIGZpbGUgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgRXh0MiBJbWFnZSBIZWFkZXIiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZSBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IGhhbmRsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzAKKyMsIGZ1enp5Cittc2dpZCAiQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayIKK21zZ3N0ciAi6K+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+W6piIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNgorbXNnaWQgIk5vICdwcmV2aW91cycgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzcKK21zZ2lkICJObyAndXAnIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM5Cittc2dpZCAiTm8gY3VycmVudCBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDAKK21zZ2lkICJFeHQyZnMgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDIKK21zZ2lkICJTcGxpdHRpbmcgd291bGQgcmVzdWx0IGluIGVtcHR5IG5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MworIywgZnV6enkKK21zZ2lkICJFeHRlbnQgbm90IGZvdW5kIgorbXNnc3RyICIvQGzmnKrmib7liLAuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ2Cittc2dpZCAiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ4Cittc2dpZCAiRmlsZXN5c3RlbSB0b28gbGFyZ2UgdG8gdXNlIGxlZ2FjeSBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDkKK21zZ2lkICJNTVA6IGludmFsaWQgbWFnaWMgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTAKK21zZ2lkICJNTVA6IGRldmljZSBjdXJyZW50bHkgYWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTIKK21zZ2lkICJNTVA6IGJsb2NrIG51bWJlciBiZXlvbmQgZmlsZXN5c3RlbSByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTQKK21zZ2lkICJNTVA6IGZpbGVzeXN0ZW0gc3RpbGwgaW4gdXNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTUKK21zZ2lkICJNTVA6IG9wZW4gd2l0aCBPX0RJUkVDVCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NgorIywgZnV6enkKK21zZ2lkICJCbG9jayBncm91cCBkZXNjcmlwdG9yIHNpemUgaW5jb3JyZWN0IgorbXNnc3RyICI857uE5o+P6L+w56ymaW5vZGU+IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU3Cittc2dpZCAiSW5vZGUgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggaW5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OAorbXNnaWQgIklub2RlIGJpdG1hcCBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OQorbXNnaWQgIkV4dGVudCBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBleHRlbnQgYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MAorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBkb2VzIG5vdCBoYXZlIHNwYWNlIGZvciBjaGVja3N1bSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYxCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYyCittc2dpZCAiRXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjMKK21zZ2lkICJTdXBlcmJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIHN1cGVyYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NAorbXNnaWQgIlVua25vd24gY2hlY2tzdW0gYWxnb3JpdGhtIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjUKK21zZ2lkICJNTVAgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggTU1QIGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjYKK21zZ2lkICJFeHQyIGZpbGUgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTEKK21zZ2lkICJQcm9maWxlIHZlcnNpb24gMC4wIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEyCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfbm9kZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMworbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTQKKyMsIGZ1enp5Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgIuW9k+ivu+WPluWdj+Wdl2lub2Rl5pe2IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNQorbXNnaWQgIkF0dGVtcHQgdG8gYWRkIGEgcmVsYXRpb24gdG8gbm9kZSB3aGljaCBpcyBub3QgYSBzZWN0aW9uIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE2Cittc2dpZCAiQSBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIGhhcyBhIG5vbi16ZXJvIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE3Cittc2dpZCAiQmFkIGxpbmtlZCBsaXN0IGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOAorbXNnaWQgIkJhZCBncm91cCBsZXZlbCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTkKK21zZ2lkICJCYWQgcGFyZW50IHBvaW50ZXIgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGUgaXRlcmF0b3IiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjEKK21zZ2lkICJDYW4ndCBzZXQgdmFsdWUgb24gc2VjdGlvbiBub2RlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gcHJvZmlsZSBsaWJyYXJ5IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjUKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSBzZWN0aW9uIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNgorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHJlbGF0aW9uIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI3Cittc2dpZCAiRXh0cmEgY2xvc2luZyBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI4Cittc2dpZCAiTWlzc2luZyBvcGVuIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjkKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfc2VjdGlvbl90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMxCittc2dpZCAiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzIKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBwcm9maWxlX3NlY3Rpb24gb2JqZWN0IgorbXNnc3RyICLorr7nva7kuobml6DmlYjnmoTmlofku7bns7vnu5/pgInpobk6ICVzXG4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMzCittc2dpZCAiTm8gbW9yZSBzZWN0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNAorbXNnaWQgIkJhZCBuYW1lc2V0IHBhc3NlZCB0byBxdWVyeSByb3V0aW5lIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzYKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzcKK21zZ2lkICJDb3VsZG4ndCBvcGVuIHByb2ZpbGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOAorbXNnaWQgIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzkKK21zZ2lkICJJbnZhbGlkIGJvb2xlYW4gdmFsdWUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDAKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBpbnRlZ2VyIHZhbHVlIgorbXNnc3RyICLml6DmlYjnmoTlkI7nvIDplb/luqYiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQxCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCittc2dzdHIgIiIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICVzIC0tLSAlc1xuIgorI34gbXNnc3RyICLml6Dms5Xlr7kgJXMg6L+b6KGMIHN0YXQg6LCD55SoIC0tLSAlc1xuIgorCisjfiBtc2dpZCAiPFRoZSBBQ0wgaW5kZXggaW5vZGU+IgorI34gbXNnc3RyICI8QUNMIOe0ouW8lSBpbm9kZT4iCisKKyN+IG1zZ2lkICI8VGhlIEFDTCBkYXRhIGlub2RlPiIKKyN+IG1zZ3N0ciAiPEFDTCDmlbDmja4gaW5vZGU+IgorCisjfiBtc2dpZCAiSm91cm5hbCBOT1QgcmVtb3ZlZFxuIgorI34gbXNnc3RyICLml6Xlv5df5rKh5pyJX+iiq+WIoOmZpFxuIgorCisjfiBtc2dpZCAiYmFkIGJsb2NrIHNpemUgLSAlcyIKKyN+IG1zZ3N0ciAi6ZSZ6K+v55qE5Z2X5aSn5bCPIC0gJXMiCmRpZmYgLS1naXQgYS9yZXNpemUvTWFrZWZpbGUuaW4gYi9yZXNpemUvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmNTVkMAotLS0gL2Rldi9udWxsCisrKyBiL3Jlc2l6ZS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDE5NiBAQAorIworIyBTdGFuZGFyZCBlMmZzcHJvZ3MgcHJvbG9ndWUuLi4uCisjCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACit0b3BfYnVpbGRkaXIgPSAuLgorbXlfZGlyID0gcmVzaXplCitJTlNUQUxMID0gQElOU1RBTExACitMREZMQUdfU1RBVElDID0gQExERkxBR19TVEFUSUNACisKK0BNQ09ORklHQAorCitQUk9HUz0JCXJlc2l6ZTJmcworVEVTVF9QUk9HUz0JdGVzdF9leHRlbnQKK01BTlBBR0VTPQlyZXNpemUyZnMuOAorCitSRVNJWkVfT0JKUz0gZXh0ZW50Lm8gcmVzaXplMmZzLm8gbWFpbi5vIG9ubGluZS5vIHJlc291cmNlX3RyYWNrLm8gXAorCQlzaW1fcHJvZ3Jlc3MubworCitURVNUX0VYVEVOVF9PQkpTPSBleHRlbnQubyB0ZXN0X2V4dGVudC5vCisKK1NSQ1M9ICQoc3JjZGlyKS9leHRlbnQuYyBcCisJJChzcmNkaXIpL3Jlc2l6ZTJmcy5jIFwKKwkkKHNyY2RpcikvbWFpbi5jIFwKKwkkKHNyY2Rpcikvb25saW5lLmMgXAorCSQoc3JjZGlyKS9yZXNvdXJjZV90cmFjay5jIFwKKwkkKHNyY2Rpcikvc2ltX3Byb2dyZXNzLmMKKworTElCUz0gJChMSUJFMlApICQoTElCRVhUMkZTKSAkKExJQkNPTV9FUlIpICQoTElCSU5UTCkgJChTWVNMSUJTKQorREVQTElCUz0gJChMSUJFMlApICQoTElCRVhUMkZTKSAkKERFUExJQkNPTV9FUlIpCisKK1NUQVRJQ19MSUJTPSAkKFNUQVRJQ19MSUJFMlApICQoU1RBVElDX0xJQkVYVDJGUykgJChTVEFUSUNfTElCQ09NX0VSUikgXAorCSQoTElCSU5UTCkgJChTWVNMSUJTKQorREVQU1RBVElDX0xJQlM9ICQoU1RBVElDX0xJQkUyUCkgJChTVEFUSUNfTElCRVhUMkZTKSAkKERFUFNUQVRJQ19MSUJDT01fRVJSKSAKKworLmMubzoKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAtYyAkKEFMTF9DRkxBR1MpICQ8IC1vICRACisJJChRKSAkKENIRUNLX0NNRCkgJChBTExfQ0ZMQUdTKSAkPAorCithbGw6OiAkKFBST0dTKSAkKFRFU1RfUFJPR1MpICQoTUFOUEFHRVMpIAorCityZXNpemUyZnM6ICQoUkVTSVpFX09CSlMpICQoREVQTElCUykKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyByZXNpemUyZnMgJChSRVNJWkVfT0JKUykgJChMSUJTKSAKKworcmVzaXplMmZzLnN0YXRpYzogJChSRVNJWkVfT0JKUykgJChERVBTVEFUSUNfTElCUykKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKExEKSAkKEFMTF9MREZMQUdTKSAkKExERkxBR19TVEFUSUMpIC1vIHJlc2l6ZTJmcy5zdGF0aWMgXAorCQkkKFJFU0laRV9PQkpTKSAkKFNUQVRJQ19MSUJTKSAKKworcmVzaXplMmZzLjg6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9yZXNpemUyZnMuOC5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9yZXNpemUyZnMuOC5pbiByZXNpemUyZnMuOAorCit0ZXN0X2V4dGVudDogJChURVNUX0VYVEVOVF9PQkpTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIHRlc3RfZXh0ZW50ICQoVEVTVF9FWFRFTlRfT0JKUykgJChMSUJTKSAKKworaW5zdGFsbGRpcnM6CisJJChFKSAiCU1LSU5TVEFMTERJUlMgJChyb290X3NiaW5kaXIpICQobWFuOGRpcikiCisJJChRKSAkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikgXAorCQkkKERFU1RESVIpJChtYW44ZGlyKQorCitpbnN0YWxsOiAkKFBST0dTKSAkKE1BTlBBR0VTKSBpbnN0YWxsZGlycworCSQoUSkgZm9yIGkgaW4gJChQUk9HUyk7IGRvIFwKKwkJZWNobyAiCUlOU1RBTEwgJChyb290X3NiaW5kaXIpLyQkaSI7IFwKKwkJJChJTlNUQUxMX1BST0dSQU0pICQkaSAkKERFU1RESVIpJChyb290X3NiaW5kaXIpLyQkaTsgXAorCWRvbmUKKwkkKFEpIGZvciBpIGluICQoTUFOUEFHRVMpOyBkbyBcCisJCWZvciBqIGluICQoQ09NUFJFU1NfRVhUKTsgZG8gXAorCQkJJChSTSkgLWYgJChERVNURElSKSQobWFuOGRpcikvJCRpLiQkajsgXAorCQlkb25lOyBcCisJCWVjaG8gIglJTlNUQUxMX0RBVEEgJChtYW44ZGlyKS8kJGkiOyBcCisJCSQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQobWFuOGRpcikvJCRpOyBcCisJZG9uZQorCitpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCisJJChRKSBmb3IgaSBpbiAkKFBST0dTKTsgZG8gXAorCQllY2hvICIJU1RSSVAgJChyb290X3NiaW5kaXIpLyQkaSI7IFwKKwkJJChTVFJJUCkgJChERVNURElSKSQocm9vdF9zYmluZGlyKS8kJGk7IFwKKwlkb25lCisKK3VuaW5zdGFsbDoKKwlmb3IgaSBpbiAkKFBST0dTKTsgZG8gXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChyb290X3NiaW5kaXIpLyQkaTsgXAorCWRvbmUKKwlmb3IgaSBpbiAkKE1BTlBBR0VTKTsgZG8gXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW44ZGlyKS8kJGk7IFwKKwlkb25lCisKK3Rlc3RfZXh0ZW50Lm91dDogdGVzdF9leHRlbnQgJChzcmNkaXIpL3Rlc3RfZXh0ZW50LmluCisJJChURVNURU5WKSAuL3Rlc3RfZXh0ZW50IDwgJChzcmNkaXIpL3Rlc3RfZXh0ZW50LmluID4gdGVzdF9leHRlbnQub3V0CisKK2NoZWNrOjogdGVzdF9leHRlbnQub3V0CisJJChRKSBpZiBjbXAgLXMgdGVzdF9leHRlbnQub3V0ICQoc3JjZGlyKS90ZXN0X2V4dGVudC5pbiA7IHRoZW4gXAorCQllY2hvICJUZXN0IHN1Y2NlZWRlZC4iIDsgXAorCWVsc2UgXAorCQllY2hvICJUZXN0IGZhaWxlZCEiIDsgXAorCQlkaWZmIHRlc3RfZXh0ZW50Lm91dCAkKHNyY2RpcikvdGVzdF9leHRlbnQuaW4gOyBcCisJCWV4aXQgMSA7IFwKKwlmaQorCitjbGVhbjo6CisJJChSTSkgLWYgJChQUk9HUykgJChURVNUX1BST0dTKSAkKE1BTlBBR0VTKSBcIyogKi5zICoubyAqLmEgKn4gY29yZSBcCisJCXJlc2l6ZTJmcy5zdGF0aWMgdGVzdF9leHRlbnQub3V0CisKK21vc3RseWNsZWFuOiBjbGVhbgorCitkaXN0Y2xlYW46IGNsZWFuCisJJChSTSkgLWYgLmRlcGVuZCBNYWtlZmlsZSAkKHNyY2RpcikvVEFHUyAkKHNyY2RpcikvTWFrZWZpbGUuaW4ub2xkCisKKyMKKyMgS2x1ZGdlIHRvIGNyZWF0ZSBhICJzcGVjaWFsIiBlMmZzcHJvZ3MgZGlzdHJpYnV0aW9uIGZpbGUuCisjCisKK1NSQ1JPT1QgPSBgZWNobyBlMmZzcHJvZ3MtQEUyRlNQUk9HU19WRVJTSU9OQCB8IHNlZCAtZSAncy8tV0lQLy8nIFwKKwkJCS1lICdzL3ByZS0vLycgLWUgJ3MvLVBMVVMvLydgCitUQVI9dGFyCisKKyQodG9wX3NyY2RpcikvLmV4Y2x1ZGUtZmlsZToKKwlhPSQoU1JDUk9PVCk7IFwKKwkoY2QgJCh0b3Bfc3JjZGlyKS8uLiA7IGZpbmQgZTJmc3Byb2dzIFwoIC1uYW1lIFwqfiAtbyAtbmFtZSBcKi5vcmlnIFwKKwkJLW8gLW5hbWUgQ1ZTIC1vIC1uYW1lIFwqLnJlaiBcKSAtcHJpbnQpIFwKKwkJfCBzZWQgLWUgInMvZTJmc3Byb2dzLyQkYS8iID4gJCh0b3Bfc3JjZGlyKS8uZXhjbHVkZS1maWxlCisJZWNobyAiJChTUkNST09UKS9idWlsZCIgPj4gJCh0b3Bfc3JjZGlyKS8uZXhjbHVkZS1maWxlCisJZWNobyAiJChTUkNST09UKS9ycG0ubG9nIiA+PiAkKHRvcF9zcmNkaXIpLy5leGNsdWRlLWZpbGUKKwllY2hvICIkKFNSQ1JPT1QpL3Bvd2VycXVlc3QiID4+ICQodG9wX3NyY2RpcikvLmV4Y2x1ZGUtZmlsZQorCWVjaG8gIiQoU1JDUk9PVCkvLmV4Y2x1ZGUtZmlsZSIgPj4gJCh0b3Bfc3JjZGlyKS8uZXhjbHVkZS1maWxlCisJZWNobyAkKFNSQ1JPT1QpL2UyZnNwcm9ncy1ARTJGU1BST0dTX1ZFUlNJT05ALnRhci5neiBcCisJCT4+ICQodG9wX3NyY2RpcikvLmV4Y2x1ZGUtZmlsZQorCWVjaG8gJChTUkNST09UKS9lMmZzcHJvZ3MtQUxMLUBFMkZTUFJPR1NfVkVSU0lPTkAudGFyLmd6IFwKKwkJPj4gJCh0b3Bfc3JjZGlyKS8uZXhjbHVkZS1maWxlCisKK3NvdXJjZV90YXJfZmlsZTogJCh0b3Bfc3JjZGlyKS8uZXhjbHVkZS1maWxlCisJKGNkICQodG9wX3NyY2RpcikvLi47IGE9JChTUkNST09UKTsgcm0gLWYgJCRhIDsgbG4gLXNmIGUyZnNwcm9ncyAkJGEgOyBcCisJCSQoVEFSKSAtYyAtaCAtdiAtZiAtIFwKKwkJCS1YICQkYS8uZXhjbHVkZS1maWxlICQkYSB8IFwKKwkJZ3ppcCAtOSA+IGUyZnNwcm9ncy1BTEwtQEUyRlNQUk9HU19WRVJTSU9OQC50YXIuZ3opCisJcm0gLWYgJCh0b3Bfc3JjZGlyKS8uZXhjbHVkZS1maWxlCisKKyMgKysrIERlcGVuZGVuY3kgbGluZSBlYXRlciArKysKKyMgCisjIE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb2xsb3cuICBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc2VjdGlvbiBpbgorIyB0aGUgTWFrZWZpbGUuaW4gZmlsZQorIworZXh0ZW50Lm86ICQoc3JjZGlyKS9leHRlbnQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL3Jlc2l6ZTJmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmgKK3Jlc2l6ZTJmcy5vOiAkKHNyY2RpcikvcmVzaXplMmZzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9yZXNpemUyZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oCittYWluLm86ICQoc3JjZGlyKS9tYWluLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQoc3JjZGlyKS9yZXNpemUyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvdmVyc2lvbi5oCitvbmxpbmUubzogJChzcmNkaXIpL29ubGluZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvcmVzaXplMmZzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaAorcmVzb3VyY2VfdHJhY2subzogJChzcmNkaXIpL3Jlc291cmNlX3RyYWNrLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9yZXNpemUyZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oCitzaW1fcHJvZ3Jlc3MubzogJChzcmNkaXIpL3NpbV9wcm9ncmVzcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvcmVzaXplMmZzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaApkaWZmIC0tZ2l0IGEvcmVzaXplL2V4dGVudC5jIGIvcmVzaXplL2V4dGVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjODFiOTQKLS0tIC9kZXYvbnVsbAorKysgYi9yZXNpemUvZXh0ZW50LmMKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBleHRlbnQuYyAtLS0gZXh0MiBleHRlbnQgYWJzdHJhY3Rpb24KKyAqCisgKiBUaGlzIGFic3RyYWN0aW9uIGlzIHVzZWQgdG8gcHJvdmlkZSBhIGNvbXBhY3Qgd2F5IG9mIHJlcHJlc2VudGluZyBhCisgKiB0cmFuc2xhdGlvbiB0YWJsZSwgZm9yIG1vdmluZyBtdWx0aXBsZSBjb250aWd1b3VzIHJhbmdlcyAoZXh0ZW50cykKKyAqIG9mIGJsb2NrcyBvciBpbm9kZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4IGJ5IFRoZW9kb3JlIFRzJ28gYW5kCisgKiAJUG93ZXJRdWVzdCwgSW5jLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBieSBUaGVvc29yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmVzaXplMmZzLmgiCisKK3N0cnVjdCBleHQyX2V4dGVudF9lbnRyeSB7CisJX191NjQJb2xkX2xvYywgbmV3X2xvYzsKKwlfX3U2NAlzaXplOworfTsKKworc3RydWN0IF9leHQyX2V4dGVudCB7CisJc3RydWN0IGV4dDJfZXh0ZW50X2VudHJ5ICpsaXN0OworCV9fdTY0CWN1cnNvcjsKKwlfX3U2NAlzaXplOworCV9fdTY0CW51bTsKKwlfX3U2NAlzb3J0ZWQ7Cit9OworCisvKgorICogQ3JlYXRlIGFuIGV4dGVudCB0YWJsZQorICovCitlcnJjb2RlX3QgZXh0MmZzX2NyZWF0ZV9leHRlbnRfdGFibGUoZXh0Ml9leHRlbnQgKnJldF9leHRlbnQsIF9fdTY0IHNpemUpCit7CisJZXh0Ml9leHRlbnQJZXh0ZW50OworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IF9leHQyX2V4dGVudCksICZleHRlbnQpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJbWVtc2V0KGV4dGVudCwgMCwgc2l6ZW9mKHN0cnVjdCBfZXh0Ml9leHRlbnQpKTsKKworCWV4dGVudC0+c2l6ZSA9IHNpemUgPyBzaXplIDogNTA7CisJZXh0ZW50LT5jdXJzb3IgPSAwOworCWV4dGVudC0+bnVtID0gMDsKKwlleHRlbnQtPnNvcnRlZCA9IDE7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KHNpemVvZihzdHJ1Y3QgZXh0Ml9leHRlbnRfZW50cnkpLAorCQkJCWV4dGVudC0+c2l6ZSwgJmV4dGVudC0+bGlzdCk7CisJaWYgKHJldHZhbCkgeworCQlleHQyZnNfZnJlZV9tZW0oJmV4dGVudCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCW1lbXNldChleHRlbnQtPmxpc3QsIDAsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgZXh0Ml9leHRlbnRfZW50cnkpICogZXh0ZW50LT5zaXplKTsKKwkqcmV0X2V4dGVudCA9IGV4dGVudDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZyZWUgYW4gZXh0ZW50IHRhYmxlCisgKi8KK3ZvaWQgZXh0MmZzX2ZyZWVfZXh0ZW50X3RhYmxlKGV4dDJfZXh0ZW50IGV4dGVudCkKK3sKKwlpZiAoZXh0ZW50LT5saXN0KQorCQlleHQyZnNfZnJlZV9tZW0oJmV4dGVudC0+bGlzdCk7CisJZXh0ZW50LT5saXN0ID0gMDsKKwlleHRlbnQtPnNpemUgPSAwOworCWV4dGVudC0+bnVtID0gMDsKKwlleHQyZnNfZnJlZV9tZW0oJmV4dGVudCk7Cit9CisKKy8qCisgKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV4dGVudCB0YWJsZQorICovCitlcnJjb2RlX3QgZXh0MmZzX2FkZF9leHRlbnRfZW50cnkoZXh0Ml9leHRlbnQgZXh0ZW50LCBfX3U2NCBvbGRfbG9jLCBfX3U2NCBuZXdfbG9jKQoreworCXN0cnVjdAlleHQyX2V4dGVudF9lbnRyeQkqZW50OworCWVycmNvZGVfdAkJCXJldHZhbDsKKwlfX3U2NAkJCQluZXdzaXplOworCV9fdTY0CQkJCWN1cnI7CisKKwlpZiAoZXh0ZW50LT5udW0gPj0gZXh0ZW50LT5zaXplKSB7CisJCW5ld3NpemUgPSBleHRlbnQtPnNpemUgKyAxMDA7CisJCXJldHZhbCA9IGV4dDJmc19yZXNpemVfbWVtKHNpemVvZihzdHJ1Y3QgZXh0Ml9leHRlbnRfZW50cnkpICoKKwkJCQkJICAgZXh0ZW50LT5zaXplLAorCQkJCQkgICBzaXplb2Yoc3RydWN0IGV4dDJfZXh0ZW50X2VudHJ5KSAqCisJCQkJCSAgIG5ld3NpemUsICZleHRlbnQtPmxpc3QpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJZXh0ZW50LT5zaXplID0gbmV3c2l6ZTsKKwl9CisJY3VyciA9IGV4dGVudC0+bnVtOworCWVudCA9IGV4dGVudC0+bGlzdCArIGN1cnI7CisJaWYgKGN1cnIpIHsKKwkJLyoKKwkJICogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgY2FuIGJlIGNvYWxlc2NlZCB3aXRoIHRoZSBsYXN0CisJCSAqIGV4dGVudAorCQkgKi8KKwkJZW50LS07CisJCWlmICgoZW50LT5vbGRfbG9jICsgZW50LT5zaXplID09IG9sZF9sb2MpICYmCisJCSAgICAoZW50LT5uZXdfbG9jICsgZW50LT5zaXplID09IG5ld19sb2MpKSB7CisJCQllbnQtPnNpemUrKzsKKwkJCXJldHVybiAwOworCQl9CisJCS8qCisJCSAqIE5vdyBzZWUgaWYgd2UncmUgZ29pbmcgdG8gcnVpbiB0aGUgc29ydGluZworCQkgKi8KKwkJaWYgKGVudC0+b2xkX2xvYyArIGVudC0+c2l6ZSA+IG9sZF9sb2MpCisJCQlleHRlbnQtPnNvcnRlZCA9IDA7CisJCWVudCsrOworCX0KKwllbnQtPm9sZF9sb2MgPSBvbGRfbG9jOworCWVudC0+bmV3X2xvYyA9IG5ld19sb2M7CisJZW50LT5zaXplID0gMTsKKwlleHRlbnQtPm51bSsrOworCXJldHVybiAwOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBxc29ydAorICovCitzdGF0aWMgRVhUMl9RU09SVF9UWVBFIGV4dGVudF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgZXh0Ml9leHRlbnRfZW50cnkgKmRiX2E7CisJY29uc3Qgc3RydWN0IGV4dDJfZXh0ZW50X2VudHJ5ICpkYl9iOworCisJZGJfYSA9IChjb25zdCBzdHJ1Y3QgZXh0Ml9leHRlbnRfZW50cnkgKikgYTsKKwlkYl9iID0gKGNvbnN0IHN0cnVjdCBleHQyX2V4dGVudF9lbnRyeSAqKSBiOworCisJcmV0dXJuIChkYl9hLT5vbGRfbG9jIC0gZGJfYi0+b2xkX2xvYyk7Cit9CisKKy8qCisgKiBHaXZlbiBhbiBpbm9kZSBtYXAgYW5kIGlub2RlIG51bWJlciwgbG9vayB1cCB0aGUgb2xkIGlub2RlIG51bWJlcgorICogYW5kIHJldHVybiB0aGUgbmV3IGlub2RlIG51bWJlci4KKyAqLworX191NjQgZXh0MmZzX2V4dGVudF90cmFuc2xhdGUoZXh0Ml9leHRlbnQgZXh0ZW50LCBfX3U2NCBvbGRfbG9jKQoreworCV9fczY0CWxvdywgaGlnaCwgbWlkOworCV9fdTY0CWxvd3ZhbCwgaGlnaHZhbDsKKwlmbG9hdAlyYW5nZTsKKworCWlmICghZXh0ZW50LT5zb3J0ZWQpIHsKKwkJcXNvcnQoZXh0ZW50LT5saXN0LCBleHRlbnQtPm51bSwKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBleHQyX2V4dGVudF9lbnRyeSksIGV4dGVudF9jbXApOworCQlleHRlbnQtPnNvcnRlZCA9IDE7CisJfQorCWxvdyA9IDA7CisJaGlnaCA9IGV4dGVudC0+bnVtLTE7CisJd2hpbGUgKGxvdyA8PSBoaWdoKSB7CisjaWYgMAorCQltaWQgPSAobG93K2hpZ2gpLzI7CisjZWxzZQorCQlpZiAobG93ID09IGhpZ2gpCisJCQltaWQgPSBsb3c7CisJCWVsc2UgeworCQkJLyogSW50ZXJwb2xhdGUgZm9yIGVmZmljaWVuY3kgKi8KKwkJCWxvd3ZhbCA9IGV4dGVudC0+bGlzdFtsb3ddLm9sZF9sb2M7CisJCQloaWdodmFsID0gZXh0ZW50LT5saXN0W2hpZ2hdLm9sZF9sb2M7CisKKwkJCWlmIChvbGRfbG9jIDwgbG93dmFsKQorCQkJCXJhbmdlID0gMDsKKwkJCWVsc2UgaWYgKG9sZF9sb2MgPiBoaWdodmFsKQorCQkJCXJhbmdlID0gMTsKKwkJCWVsc2UgeworCQkJCXJhbmdlID0gKChmbG9hdCkgKG9sZF9sb2MgLSBsb3d2YWwpKSAvCisJCQkJCShoaWdodmFsIC0gbG93dmFsKTsKKwkJCQlpZiAocmFuZ2UgPiAwLjkpCisJCQkJCXJhbmdlID0gMC45OworCQkJCWlmIChyYW5nZSA8IDAuMSkKKwkJCQkJcmFuZ2UgPSAwLjE7CisJCQl9CisJCQltaWQgPSBsb3cgKyAoKF9fdTY0KSAocmFuZ2UgKiAoaGlnaC1sb3cpKSk7CisJCX0KKyNlbmRpZgorCQlpZiAoKG9sZF9sb2MgPj0gZXh0ZW50LT5saXN0W21pZF0ub2xkX2xvYykgJiYKKwkJICAgIChvbGRfbG9jIDwgZXh0ZW50LT5saXN0W21pZF0ub2xkX2xvYyArIGV4dGVudC0+bGlzdFttaWRdLnNpemUpKQorCQkJcmV0dXJuIChleHRlbnQtPmxpc3RbbWlkXS5uZXdfbG9jICsKKwkJCQkob2xkX2xvYyAtIGV4dGVudC0+bGlzdFttaWRdLm9sZF9sb2MpKTsKKwkJaWYgKG9sZF9sb2MgPCBleHRlbnQtPmxpc3RbbWlkXS5vbGRfbG9jKQorCQkJaGlnaCA9IG1pZC0xOworCQllbHNlCisJCQlsb3cgPSBtaWQrMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGb3IgZGVidWdnaW5nIG9ubHkKKyAqLwordm9pZCBleHQyZnNfZXh0ZW50X2R1bXAoZXh0Ml9leHRlbnQgZXh0ZW50LCBGSUxFICpvdXQpCit7CisJX191NjQJaTsKKwlzdHJ1Y3QgZXh0Ml9leHRlbnRfZW50cnkgKmVudDsKKworCWZwdXRzKF8oIiMgRXh0ZW50IGR1bXA6XG4iKSwgb3V0KTsKKwlmcHJpbnRmKG91dCwgXygiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iKSwKKwkgICAgICAgZXh0ZW50LT5udW0sIGV4dGVudC0+c2l6ZSwgZXh0ZW50LT5jdXJzb3IsIGV4dGVudC0+c29ydGVkKTsKKwlmb3IgKGk9MCwgZW50PWV4dGVudC0+bGlzdDsgaSA8IGV4dGVudC0+bnVtOyBpKyssIGVudCsrKSB7CisJCWZwcmludGYob3V0LCAiI1x0XHQgJWxsdSAtPiAlbGx1ICglbGx1KVxuIiwgZW50LT5vbGRfbG9jLAorCQkJZW50LT5uZXdfbG9jLCBlbnQtPnNpemUpOworCX0KK30KKworLyoKKyAqIEl0ZXJhdGUgb3ZlciB0aGUgY29udGVudHMgb2YgdGhlIGV4dGVudCB0YWJsZQorICovCitlcnJjb2RlX3QgZXh0MmZzX2l0ZXJhdGVfZXh0ZW50KGV4dDJfZXh0ZW50IGV4dGVudCwgX191NjQgKm9sZF9sb2MsCisJCQkJX191NjQgKm5ld19sb2MsIF9fdTY0ICpzaXplKQoreworCXN0cnVjdCBleHQyX2V4dGVudF9lbnRyeSAqZW50OworCisJaWYgKCFvbGRfbG9jKSB7CisJCWV4dGVudC0+Y3Vyc29yID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGV4dGVudC0+Y3Vyc29yID49IGV4dGVudC0+bnVtKSB7CisJCSpvbGRfbG9jID0gMDsKKwkJKm5ld19sb2MgPSAwOworCQkqc2l6ZSA9IDA7CisJCXJldHVybiAwOworCX0KKworCWVudCA9IGV4dGVudC0+bGlzdCArIGV4dGVudC0+Y3Vyc29yKys7CisKKwkqb2xkX2xvYyA9IGVudC0+b2xkX2xvYzsKKwkqbmV3X2xvYyA9IGVudC0+bmV3X2xvYzsKKwkqc2l6ZSA9IGVudC0+c2l6ZTsKKwlyZXR1cm4gMDsKK30KKworCisKKwpkaWZmIC0tZ2l0IGEvcmVzaXplL21haW4uYyBiL3Jlc2l6ZS9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEzNWFmMAotLS0gL2Rldi9udWxsCisrKyBiL3Jlc2l6ZS9tYWluLmMKQEAgLTAsMCArMSw1MTYgQEAKKy8qCisgKiBtYWluLmMgLS0tIGV4dDIgcmVzaXplciBtYWluIHByb2dyYW0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTggYnkgVGhlb2RvcmUgVHMnbyBhbmQKKyAqIAlQb3dlclF1ZXN0LCBJbmMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IGJ5IFRoZW9kb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgImUycC9lMnAuaCIKKworI2luY2x1ZGUgInJlc2l6ZTJmcy5oIgorCisjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorCitjaGFyICpwcm9ncmFtX25hbWU7CitzdGF0aWMgY2hhciAqZGV2aWNlX25hbWUsICppb19vcHRpb25zOworCitzdGF0aWMgdm9pZCB1c2FnZSAoY2hhciAqcHJvZykKK3sKKwlmcHJpbnRmIChzdGRlcnIsIF8oIlVzYWdlOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gIgorCQkJICAgIlstcF0gZGV2aWNlIFtuZXdfc2l6ZV1cblxuIiksIHByb2cpOworCisJZXhpdCAoMSk7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgcmVzaXplX3Byb2dyZXNzX2Z1bmMoZXh0Ml9yZXNpemVfdCByZnMsIGludCBwYXNzLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY3VyLCB1bnNpZ25lZCBsb25nIG1heCkKK3sKKwlleHQyX3NpbV9wcm9nbWV0ZXIgcHJvZ3Jlc3M7CisJY29uc3QgY2hhcgkqbGFiZWw7CisJZXJyY29kZV90CXJldHZhbDsKKworCXByb2dyZXNzID0gKGV4dDJfc2ltX3Byb2dtZXRlcikgcmZzLT5wcm9nX2RhdGE7CisJaWYgKG1heCA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoY3VyID09IDApIHsKKwkJaWYgKHByb2dyZXNzKQorCQkJZXh0MmZzX3Byb2dyZXNzX2Nsb3NlKHByb2dyZXNzKTsKKwkJcHJvZ3Jlc3MgPSAwOworCQlzd2l0Y2ggKHBhc3MpIHsKKwkJY2FzZSBFMl9SU1pfRVhURU5EX0lUQUJMRV9QQVNTOgorCQkJbGFiZWwgPSBfKCJFeHRlbmRpbmcgdGhlIGlub2RlIHRhYmxlIik7CisJCQlicmVhazsKKwkJY2FzZSBFMl9SU1pfQkxPQ0tfUkVMT0NfUEFTUzoKKwkJCWxhYmVsID0gXygiUmVsb2NhdGluZyBibG9ja3MiKTsKKwkJCWJyZWFrOworCQljYXNlIEUyX1JTWl9JTk9ERV9TQ0FOX1BBU1M6CisJCQlsYWJlbCA9IF8oIlNjYW5uaW5nIGlub2RlIHRhYmxlIik7CisJCQlicmVhazsKKwkJY2FzZSBFMl9SU1pfSU5PREVfUkVGX1VQRF9QQVNTOgorCQkJbGFiZWwgPSBfKCJVcGRhdGluZyBpbm9kZSByZWZlcmVuY2VzIik7CisJCQlicmVhazsKKwkJY2FzZSBFMl9SU1pfTU9WRV9JVEFCTEVfUEFTUzoKKwkJCWxhYmVsID0gXygiTW92aW5nIGlub2RlIHRhYmxlIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWxhYmVsID0gXygiVW5rbm93biBwYXNzPyE/Iik7CisJCQlicmVhazsKKwkJfQorCQlwcmludGYoXygiQmVnaW4gcGFzcyAlZCAobWF4ID0gJWx1KVxuIiksIHBhc3MsIG1heCk7CisJCXJldHZhbCA9IGV4dDJmc19wcm9ncmVzc19pbml0KCZwcm9ncmVzcywgbGFiZWwsIDMwLAorCQkJCQkgICAgICA0MCwgbWF4LCAwKTsKKwkJaWYgKHJldHZhbCkKKwkJCXByb2dyZXNzID0gMDsKKwkJcmZzLT5wcm9nX2RhdGEgPSAodm9pZCAqKSBwcm9ncmVzczsKKwl9CisJaWYgKHByb2dyZXNzKQorCQlleHQyZnNfcHJvZ3Jlc3NfdXBkYXRlKHByb2dyZXNzLCBjdXIpOworCWlmIChjdXIgPj0gbWF4KSB7CisJCWlmIChwcm9ncmVzcykKKwkJCWV4dDJmc19wcm9ncmVzc19jbG9zZShwcm9ncmVzcyk7CisJCXByb2dyZXNzID0gMDsKKwkJcmZzLT5wcm9nX2RhdGEgPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGV0ZXJtaW5lX2ZzX3N0cmlkZShleHQyX2ZpbHN5cyBmcykKK3sKKwl1bnNpZ25lZCBpbnQJZ3JvdXA7CisJdW5zaWduZWQgbG9uZyBsb25nIHN1bTsKKwl1bnNpZ25lZCBpbnQJaGFzX3NiLCBwcmV2X2hhc19zYiA9IDAsIG51bTsKKwlpbnQJCWlfc3RyaWRlLCBiX3N0cmlkZTsKKworCWlmIChmcy0+c3RyaWRlKQorCQlyZXR1cm47CisJbnVtID0gMDsgc3VtID0gMDsKKwlmb3IgKGdyb3VwID0gMDsgZ3JvdXAgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgZ3JvdXArKykgeworCQloYXNfc2IgPSBleHQyZnNfYmdfaGFzX3N1cGVyKGZzLCBncm91cCk7CisJCWlmIChncm91cCA9PSAwIHx8IGhhc19zYiAhPSBwcmV2X2hhc19zYikKKwkJCWdvdG8gbmV4dDsKKwkJYl9zdHJpZGUgPSBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgZ3JvdXApIC0KKwkJCWV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBncm91cCAtIDEpIC0KKwkJCWZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwOworCQlpX3N0cmlkZSA9IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBncm91cCkgLQorCQkJZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGdyb3VwIC0gMSkgLQorCQkJZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCWlmIChiX3N0cmlkZSAhPSBpX3N0cmlkZSB8fAorCQkgICAgYl9zdHJpZGUgPCAwKQorCQkJZ290byBuZXh0OworCisJCS8qIHByaW50ZigiZ3JvdXAgJWQgaGFzIHN0cmlkZSAlZFxuIiwgZ3JvdXAsIGJfc3RyaWRlKTsgKi8KKwkJc3VtICs9IGJfc3RyaWRlOworCQludW0rKzsKKworCW5leHQ6CisJCXByZXZfaGFzX3NiID0gaGFzX3NiOworCX0KKworCWlmIChmcy0+Z3JvdXBfZGVzY19jb3VudCA+IDEyICYmIG51bSA8IDMpCisJCXN1bSA9IDA7CisKKwlpZiAobnVtKQorCQlmcy0+c3RyaWRlID0gc3VtIC8gbnVtOworCWVsc2UKKwkJZnMtPnN0cmlkZSA9IDA7CisKKwlmcy0+c3VwZXItPnNfcmFpZF9zdHJpZGUgPSBmcy0+c3RyaWRlOworCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKworI2lmIDAKKwlpZiAoZnMtPnN0cmlkZSkKKwkJcHJpbnRmKCJVc2luZyBSQUlEIHN0cmlkZSBvZiAlZFxuIiwgZnMtPnN0cmlkZSk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgYmlnYWxsb2NfY2hlY2soZXh0Ml9maWxzeXMgZnMsIGludCBmb3JjZSkKK3sKKwlpZiAoIWZvcmNlICYmIEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0JJR0FMTE9DKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgXygiXG5SZXNpemluZyBiaWdhbGxvYyBmaWxlIHN5c3RlbXMgaGFzICIKKwkJCQkJIm5vdCBiZWVuIGZ1bGx5IHRlc3RlZC4gIFByb2NlZWQgYXRcbiIKKwkJCQkJInlvdXIgb3duIHJpc2shICBVc2UgdGhlIGZvcmNlIG9wdGlvbiAiCisJCQkJCSJpZiB5b3Ugd2FudCB0byBnbyBhaGVhZCBhbnl3YXkuXG5cbiIpKTsKKwkJZXhpdCgxKTsKKwl9Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKiBhcmd2KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJZXh0Ml9maWxzeXMJZnM7CisJaW50CQljOworCWludAkJZmxhZ3MgPSAwOworCWludAkJZmx1c2ggPSAwOworCWludAkJZm9yY2UgPSAwOworCWludAkJaW9fZmxhZ3MgPSAwOworCWludAkJZm9yY2VfbWluX3NpemUgPSAwOworCWludAkJcHJpbnRfbWluX3NpemUgPSAwOworCWludAkJZmQsIHJldDsKKwlibGs2NF90CQluZXdfc2l6ZSA9IDA7CisJYmxrNjRfdAkJbWF4X3NpemUgPSAwOworCWJsazY0X3QJCW1pbl9zaXplID0gMDsKKwlpb19tYW5hZ2VyCWlvX3B0cjsKKwljaGFyCQkqbmV3X3NpemVfc3RyID0gMDsKKwlpbnQJCXVzZV9zdHJpZGUgPSAtMTsKKwlleHQyZnNfc3RydWN0X3N0YXQgc3RfYnVmOworCV9fczY0CQluZXdfZmlsZV9zaXplOworCXVuc2lnbmVkIGludAlzeXNfcGFnZV9zaXplID0gNDA5NjsKKwl1bnNpZ25lZCBpbnQJYmxvY2tzaXplOworCWxvbmcJCXN5c3ZhbDsKKwlpbnQJCWxlbiwgbW91bnRfZmxhZ3M7CisJY2hhcgkJKm10cHQ7CisKKyNpZmRlZiBFTkFCTEVfTkxTCisJc2V0bG9jYWxlKExDX01FU1NBR0VTLCAiIik7CisJc2V0bG9jYWxlKExDX0NUWVBFLCAiIik7CisJYmluZHRleHRkb21haW4oTkxTX0NBVF9OQU1FLCBMT0NBTEVESVIpOworCXRleHRkb21haW4oTkxTX0NBVF9OQU1FKTsKKwlzZXRfY29tX2Vycl9nZXR0ZXh0KGdldHRleHQpOworI2VuZGlmCisKKwlhZGRfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworCisJZnByaW50ZiAoc3RkZXJyLCAicmVzaXplMmZzICVzICglcylcbiIsCisJCSBFMkZTUFJPR1NfVkVSU0lPTiwgRTJGU1BST0dTX0RBVEUpOworCWlmIChhcmdjICYmICphcmd2KQorCQlwcm9ncmFtX25hbWUgPSAqYXJndjsKKworCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgImQ6ZkZoTVBwUzoiKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdoJzoKKwkJCXVzYWdlKHByb2dyYW1fbmFtZSk7CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlmb3JjZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnRic6CisJCQlmbHVzaCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnTSc6CisJCQlmb3JjZV9taW5fc2l6ZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnUCc6CisJCQlwcmludF9taW5fc2l6ZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQlmbGFncyB8PSBhdG9pKG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlmbGFncyB8PSBSRVNJWkVfUEVSQ0VOVF9DT01QTEVURTsKKwkJCWJyZWFrOworCQljYXNlICdTJzoKKwkJCXVzZV9zdHJpZGUgPSBhdG9pKG9wdGFyZyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKHByb2dyYW1fbmFtZSk7CisJCX0KKwl9CisJaWYgKG9wdGluZCA9PSBhcmdjKQorCQl1c2FnZShwcm9ncmFtX25hbWUpOworCisJZGV2aWNlX25hbWUgPSBhcmd2W29wdGluZCsrXTsKKwlpZiAob3B0aW5kIDwgYXJnYykKKwkJbmV3X3NpemVfc3RyID0gYXJndltvcHRpbmQrK107CisJaWYgKG9wdGluZCA8IGFyZ2MpCisJCXVzYWdlKHByb2dyYW1fbmFtZSk7CisKKwlpb19vcHRpb25zID0gc3RyY2hyKGRldmljZV9uYW1lLCAnPycpOworCWlmIChpb19vcHRpb25zKQorCQkqaW9fb3B0aW9ucysrID0gMDsKKworCS8qCisJICogRmlndXJlIG91dCB3aGV0aGVyIG9yIG5vdCB0aGUgZGV2aWNlIGlzIG1vdW50ZWQsIGFuZCBpZiBpdCBpcworCSAqIHdoZXJlIGl0IGlzIG1vdW50ZWQuCisJICovCisJbGVuPTgwOworCXdoaWxlICgxKSB7CisJCW10cHQgPSBtYWxsb2MobGVuKTsKKwkJaWYgKCFtdHB0KQorCQkJcmV0dXJuIEVOT01FTTsKKwkJbXRwdFtsZW4tMV0gPSAwOworCQlyZXR2YWwgPSBleHQyZnNfY2hlY2tfbW91bnRfcG9pbnQoZGV2aWNlX25hbWUsICZtb3VudF9mbGFncywKKwkJCQkJCSAgbXRwdCwgbGVuKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigiZXh0MmZzX2NoZWNrX21vdW50X3BvaW50IiwgcmV0dmFsLAorCQkJCV8oIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iKSwKKwkJCQlkZXZpY2VfbmFtZSk7CisJCQlleGl0KDEpOworCQl9CisJCWlmICghKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKSB8fCAobXRwdFtsZW4tMV0gPT0gMCkpCisJCQlicmVhazsKKwkJZnJlZShtdHB0KTsKKwkJbGVuID0gMiAqIGxlbjsKKwl9CisKKwlmZCA9IGV4dDJmc19vcGVuX2ZpbGUoZGV2aWNlX25hbWUsIE9fUkRXUiwgMCk7CisJaWYgKGZkIDwgMCkgeworCQljb21fZXJyKCJvcGVuIiwgZXJybm8sIF8oIndoaWxlIG9wZW5pbmcgJXMiKSwKKwkJCWRldmljZV9uYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlyZXQgPSBleHQyZnNfZnN0YXQoZmQsICZzdF9idWYpOworCWlmIChyZXQgPCAwKSB7CisJCWNvbV9lcnIoIm9wZW4iLCBlcnJubywKKwkJCV8oIndoaWxlIGdldHRpbmcgc3RhdCBpbmZvcm1hdGlvbiBmb3IgJXMiKSwKKwkJCWRldmljZV9uYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoZmx1c2gpIHsKKwkJcmV0dmFsID0gZXh0MmZzX3N5bmNfZGV2aWNlKGZkLCAxKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsCisJCQkJXygid2hpbGUgdHJ5aW5nIHRvIGZsdXNoICVzIiksCisJCQkJZGV2aWNlX25hbWUpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCWlmICghU19JU1JFRyhzdF9idWYuc3RfbW9kZSApKSB7CisJCWNsb3NlKGZkKTsKKwkJZmQgPSAtMTsKKwl9CisKKyNpZmRlZiBDT05GSUdfVEVTVElPX0RFQlVHCisJaWYgKGdldGVudigiVEVTVF9JT19GTEFHUyIpIHx8IGdldGVudigiVEVTVF9JT19CTE9DSyIpKSB7CisJCWlvX3B0ciA9IHRlc3RfaW9fbWFuYWdlcjsKKwkJdGVzdF9pb19iYWNraW5nX21hbmFnZXIgPSB1bml4X2lvX21hbmFnZXI7CisJfSBlbHNlCisjZW5kaWYKKwkJaW9fcHRyID0gdW5peF9pb19tYW5hZ2VyOworCisJaWYgKCEobW91bnRfZmxhZ3MgJiBFWFQyX01GX01PVU5URUQpKQorCQlpb19mbGFncyA9IEVYVDJfRkxBR19SVyB8IEVYVDJfRkxBR19FWENMVVNJVkU7CisKKwlpb19mbGFncyB8PSBFWFQyX0ZMQUdfNjRCSVRTOworCisJcmV0dmFsID0gZXh0MmZzX29wZW4yKGRldmljZV9uYW1lLCBpb19vcHRpb25zLCBpb19mbGFncywKKwkJCSAgICAgIDAsIDAsIGlvX3B0ciwgJmZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsIF8oIndoaWxlIHRyeWluZyB0byBvcGVuICVzIiksCisJCQlkZXZpY2VfbmFtZSk7CisJCXByaW50ZigiJXMiLCBfKCJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIpKTsKKwkJZXhpdCAoMSk7CisJfQorCWZzLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gRVhUMkZTX0JNQVA2NF9SQlRSRUU7CisKKwkvKgorCSAqIEJlZm9yZSBhY3Rpbmcgb24gYW4gdW5tb3VudGVkIGZpbGVzeXN0ZW0sIG1ha2Ugc3VyZSBpdCdzIG9rLAorCSAqIHVubGVzcyB0aGUgdXNlciBpcyBmb3JjaW5nIGl0LgorCSAqCisJICogV2UgZG8gRVJST1IgYW5kIFZBTElEIGNoZWNrcyBldmVuIGlmIHdlJ3JlIG9ubHkgcHJpbnRpbmcgdGhlCisJICogbWluaW1pbXVtIHNpemUsIGJlY2F1c2UgdHJhdmVyc2FsIG9mIGEgYmFkbHkgZGFtYWdlZCBmaWxlc3lzdGVtCisJICogY2FuIGNhdXNlIGlzc3VlcyBhcyB3ZWxsLiAgV2UgZG9uJ3QgcmVxdWlyZSBpdCB0byBiZSBmc2NrZWQgYWZ0ZXIKKwkgKiB0aGUgbGFzdCBtb3VudCB0aW1lIGluIHRoaXMgY2FzZSwgdGhvdWdoLCBhcyB0aGlzIGlzIGEgYml0IGxlc3MKKwkgKiByaXNreS4KKwkgKi8KKwlpZiAoIWZvcmNlICYmICEobW91bnRfZmxhZ3MgJiBFWFQyX01GX01PVU5URUQpKSB7CisJCWludCBjaGVja2l0ID0gMDsKKworCQlpZiAoZnMtPnN1cGVyLT5zX3N0YXRlICYgRVhUMl9FUlJPUl9GUykKKwkJCWNoZWNraXQgPSAxOworCisJCWlmICgoZnMtPnN1cGVyLT5zX3N0YXRlICYgRVhUMl9WQUxJRF9GUykgPT0gMCkKKwkJCWNoZWNraXQgPSAxOworCisJCWlmICgoZnMtPnN1cGVyLT5zX2xhc3RjaGVjayA8IGZzLT5zdXBlci0+c19tdGltZSkgJiYKKwkJICAgICFwcmludF9taW5fc2l6ZSkKKwkJCWNoZWNraXQgPSAxOworCisJCWlmIChjaGVja2l0KSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJQbGVhc2UgcnVuICdlMmZzY2sgLWYgJXMnIGZpcnN0LlxuXG4iKSwKKwkJCQlkZXZpY2VfbmFtZSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCisJLyoKKwkgKiBDaGVjayBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBmZWF0dXJlIHNldHMuICBXZSBuZWVkIHRvCisJICogYmUgbW9yZSBzdHJpbmdlbnQgdGhhbiBleHQyZnNfb3BlbigpLgorCSAqLworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJiB+RVhUMl9MSUJfRkVBVFVSRV9DT01QQVRfU1VQUCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgRVhUMl9FVF9VTlNVUFBfRkVBVFVSRSwKKwkJCSIoJXMpIiwgZGV2aWNlX25hbWUpOworCQlleGl0KDEpOworCX0KKworCW1pbl9zaXplID0gY2FsY3VsYXRlX21pbmltdW1fcmVzaXplX3NpemUoZnMsIGZsYWdzKTsKKworCWlmIChwcmludF9taW5fc2l6ZSkgeworCQlwcmludGYoXygiRXN0aW1hdGVkIG1pbmltdW0gc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbTogJWxsdVxuIiksCisJCSAgICAgICBtaW5fc2l6ZSk7CisJCWV4aXQoMCk7CisJfQorCisJLyogRGV0ZXJtaW5lIHRoZSBzeXN0ZW0gcGFnZSBzaXplIGlmIHBvc3NpYmxlICovCisjaWZkZWYgSEFWRV9TWVNDT05GCisjaWYgKCFkZWZpbmVkKF9TQ19QQUdFU0laRSkgJiYgZGVmaW5lZChfU0NfUEFHRV9TSVpFKSkKKyNkZWZpbmUgX1NDX1BBR0VTSVpFIF9TQ19QQUdFX1NJWkUKKyNlbmRpZgorI2lmZGVmIF9TQ19QQUdFU0laRQorCXN5c3ZhbCA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKwlpZiAoc3lzdmFsID4gMCkKKwkJc3lzX3BhZ2Vfc2l6ZSA9IHN5c3ZhbDsKKyNlbmRpZiAvKiBfU0NfUEFHRVNJWkUgKi8KKyNlbmRpZiAvKiBIQVZFX1NZU0NPTkYgKi8KKworCS8qCisJICogR2V0IHRoZSBzaXplIG9mIHRoZSBjb250YWluaW5nIHBhcnRpdGlvbiwgYW5kIHVzZSB0aGlzIGZvcgorCSAqIGRlZmF1bHRzIGFuZCBmb3IgbWFraW5nIHN1cmUgdGhlIG5ldyBmaWxlc3lzdGVtIGRvZXNuJ3QKKwkgKiBleGNlZWQgdGhlIHBhcnRpdGlvbiBzaXplLgorCSAqLworCWJsb2Nrc2l6ZSA9IGZzLT5ibG9ja3NpemU7CisJcmV0dmFsID0gZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZTIoZGV2aWNlX25hbWUsIGJsb2Nrc2l6ZSwKKwkJCQkJICZtYXhfc2l6ZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBmaWxlc3lzdGVtIHNpemUiKSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChmb3JjZV9taW5fc2l6ZSkKKwkJbmV3X3NpemUgPSBtaW5fc2l6ZTsKKwllbHNlIGlmIChuZXdfc2l6ZV9zdHIpIHsKKwkJbmV3X3NpemUgPSBwYXJzZV9udW1fYmxvY2tzMihuZXdfc2l6ZV9zdHIsCisJCQkJCSAgICAgZnMtPnN1cGVyLT5zX2xvZ19ibG9ja19zaXplKTsKKwkJaWYgKG5ld19zaXplID09IDApIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCV8oIkludmFsaWQgbmV3IHNpemU6ICVzXG4iKSwgbmV3X3NpemVfc3RyKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9IGVsc2UgeworCQluZXdfc2l6ZSA9IG1heF9zaXplOworCQkvKiBSb3VuZCBkb3duIHRvIGFuIGV2ZW4gbXVsdGlwbGUgb2YgYSBwYWdlc2l6ZSAqLworCQlpZiAoc3lzX3BhZ2Vfc2l6ZSA+IGJsb2Nrc2l6ZSkKKwkJCW5ld19zaXplICY9IH4oKHN5c19wYWdlX3NpemUgLyBibG9ja3NpemUpLTEpOworCX0KKwlpZiAoIUVYVDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpKSB7CisJCS8qIFRha2UgMTZUIGRvd24gdG8gMl4zMi0xIGJsb2NrcyAqLworCQlpZiAobmV3X3NpemUgPT0gKDFVTEwgPDwgMzIpKQorCQkJbmV3X3NpemUtLTsKKwkJZWxzZSBpZiAobmV3X3NpemUgPiAoMVVMTCA8PCAzMikpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCV8oIk5ldyBzaXplIHRvbyBsYXJnZSB0byBiZSAiCisJCQkJICAiZXhwcmVzc2VkIGluIDMyIGJpdHNcbiIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlpZiAoIWZvcmNlICYmIG5ld19zaXplIDwgbWluX3NpemUpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQlfKCJOZXcgc2l6ZSBzbWFsbGVyIHRoYW4gbWluaW11bSAoJWxsdSlcbiIpLCBtaW5fc2l6ZSk7CisJCWV4aXQoMSk7CisJfQorCWlmICh1c2Vfc3RyaWRlID49IDApIHsKKwkJaWYgKHVzZV9zdHJpZGUgPj0gKGludCkgZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXApIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCV8oIkludmFsaWQgc3RyaWRlIGxlbmd0aCIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJZnMtPnN0cmlkZSA9IGZzLT5zdXBlci0+c19yYWlkX3N0cmlkZSA9IHVzZV9zdHJpZGU7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwl9IGVsc2UKKwkJICBkZXRlcm1pbmVfZnNfc3RyaWRlKGZzKTsKKworCS8qCisJICogSWYgd2UgYXJlIHJlc2l6aW5nIGEgcGxhaW4gZmlsZSwgYW5kIGl0J3Mgbm90IGJpZyBlbm91Z2gsCisJICogYXV0b21hdGljYWxseSBleHRlbmQgaXQgaW4gYSBzcGFyc2UgZmFzaGlvbiBieSB3cml0aW5nIHRoZQorCSAqIGxhc3QgcmVxdWVzdGVkIGJsb2NrLgorCSAqLworCW5ld19maWxlX3NpemUgPSAoKF9fdTY0KSBuZXdfc2l6ZSkgKiBibG9ja3NpemU7CisJaWYgKChfX3U2NCkgbmV3X2ZpbGVfc2l6ZSA+CisJICAgICgoKF9fdTY0KSAxKSA8PCAoc2l6ZW9mKHN0X2J1Zi5zdF9zaXplKSo4IC0gMSkpIC0gMSkKKwkJZmQgPSAtMTsKKwlpZiAoKG5ld19maWxlX3NpemUgPiBzdF9idWYuc3Rfc2l6ZSkgJiYKKwkgICAgKGZkID4gMCkpIHsKKwkJaWYgKChleHQyZnNfbGxzZWVrKGZkLCBuZXdfZmlsZV9zaXplLTEsIFNFRUtfU0VUKSA+PSAwKSAmJgorCQkgICAgKHdyaXRlKGZkLCAiMCIsIDEpID09IDEpKQorCQkJbWF4X3NpemUgPSBuZXdfc2l6ZTsKKwl9CisJaWYgKCFmb3JjZSAmJiAobmV3X3NpemUgPiBtYXhfc2l6ZSkpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIlRoZSBjb250YWluaW5nIHBhcnRpdGlvbiAob3IgZGV2aWNlKSIKKwkJCSIgaXMgb25seSAlbGx1ICglZGspIGJsb2Nrcy5cbllvdSByZXF1ZXN0ZWQgYSBuZXcgc2l6ZSIKKwkJCSIgb2YgJWxsdSBibG9ja3MuXG5cbiIpLCBtYXhfc2l6ZSwKKwkJCWJsb2Nrc2l6ZSAvIDEwMjQsIG5ld19zaXplKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKG5ld19zaXplID09IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiVGhlIGZpbGVzeXN0ZW0gaXMgYWxyZWFkeSAlbGx1ICglZGspICIKKwkJCSJibG9ja3MgbG9uZy4gIE5vdGhpbmcgdG8gZG8hXG5cbiIpLCBuZXdfc2l6ZSwKKwkJCWJsb2Nrc2l6ZSAvIDEwMjQpOworCQlleGl0KDApOworCX0KKwlpZiAobW91bnRfZmxhZ3MgJiBFWFQyX01GX01PVU5URUQpIHsKKwkJYmlnYWxsb2NfY2hlY2soZnMsIGZvcmNlKTsKKwkJcmV0dmFsID0gb25saW5lX3Jlc2l6ZV9mcyhmcywgbXRwdCwgJm5ld19zaXplLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJYmlnYWxsb2NfY2hlY2soZnMsIGZvcmNlKTsKKwkJcHJpbnRmKF8oIlJlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uICIKKwkJCSAiJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iKSwKKwkJICAgICAgIGRldmljZV9uYW1lLCBuZXdfc2l6ZSwgYmxvY2tzaXplIC8gMTAyNCk7CisJCXJldHZhbCA9IHJlc2l6ZV9mcyhmcywgJm5ld19zaXplLCBmbGFncywKKwkJCQkgICAoKGZsYWdzICYgUkVTSVpFX1BFUkNFTlRfQ09NUExFVEUpID8KKwkJCQkgICAgcmVzaXplX3Byb2dyZXNzX2Z1bmMgOiAwKSk7CisJfQorCWZyZWUobXRwdCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCBfKCJ3aGlsZSB0cnlpbmcgdG8gcmVzaXplICVzIiksCisJCQlkZXZpY2VfbmFtZSk7CisJCWZwcmludGYoc3RkZXJyLAorCQkJXygiUGxlYXNlIHJ1biAnZTJmc2NrIC1meSAlcycgdG8gZml4IHRoZSBmaWxlc3lzdGVtXG4iCisJCQkgICJhZnRlciB0aGUgYWJvcnRlZCByZXNpemUgb3BlcmF0aW9uLlxuIiksCisJCQlkZXZpY2VfbmFtZSk7CisJCWV4dDJmc19jbG9zZV9mcmVlKCZmcyk7CisJCWV4aXQoMSk7CisJfQorCXByaW50ZihfKCJUaGUgZmlsZXN5c3RlbSBvbiAlcyBpcyBub3cgJWxsdSAoJWRrKSBibG9ja3MgbG9uZy5cblxuIiksCisJICAgICAgIGRldmljZV9uYW1lLCBuZXdfc2l6ZSwgYmxvY2tzaXplIC8gMTAyNCk7CisKKwlpZiAoKHN0X2J1Zi5zdF9zaXplID4gbmV3X2ZpbGVfc2l6ZSkgJiYKKwkgICAgKGZkID4gMCkpIHsKKyNpZmRlZiBIQVZFX0ZUUlVOQ0FURTY0CisJCXJldHZhbCA9IGZ0cnVuY2F0ZTY0KGZkLCBuZXdfZmlsZV9zaXplKTsKKyNlbHNlCisJCXJldHZhbCA9IDA7CisJCS8qIE9ubHkgdHJ1bmNhdGUgaWYgbmV3X2ZpbGVfc2l6ZSBkb2Vzbid0IG92ZXJmbG93IG9mZl90ICovCisJCWlmICgoKG9mZl90KSBuZXdfZmlsZV9zaXplKSA9PSBuZXdfZmlsZV9zaXplKQorCQkJcmV0dmFsID0gZnRydW5jYXRlKGZkLCAob2ZmX3QpIG5ld19maWxlX3NpemUpOworI2VuZGlmCisJCWlmIChyZXR2YWwpCisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLAorCQkJCV8oIndoaWxlIHRyeWluZyB0byB0cnVuY2F0ZSAlcyIpLAorCQkJCWRldmljZV9uYW1lKTsKKwl9CisJaWYgKGZkID4gMCkKKwkJY2xvc2UoZmQpOworCXJlbW92ZV9lcnJvcl90YWJsZSgmZXRfZXh0Ml9lcnJvcl90YWJsZSk7CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL3Jlc2l6ZS9vbmxpbmUuYyBiL3Jlc2l6ZS9vbmxpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmQ4NmIwCi0tLSAvZGV2L251bGwKKysrIGIvcmVzaXplL29ubGluZS5jCkBAIC0wLDAgKzEsMzAyIEBACisvKgorICogb25saW5lLmMgLS0tIERvIG9uLWxpbmUgcmVzaXppbmcgb2YgdGhlIGV4dDMgZmlsZXN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBieSBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmVzaXplMmZzLmgiCisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCitleHRlcm4gY2hhciAqcHJvZ3JhbV9uYW1lOworCisjZGVmaW5lIE1BWF8zMl9OVU0gKCgoKHVuc2lnbmVkIGxvbmcgbG9uZykgMSkgPDwgMzIpIC0gMSkKKworI2lmZGVmIF9fbGludXhfXworc3RhdGljIGludCBwYXJzZV92ZXJzaW9uX251bWJlcihjb25zdCBjaGFyICpzKQoreworCWludAltYWpvciwgbWlub3IsIHJldjsKKwljaGFyCSplbmRwdHI7CisJY29uc3QgY2hhciAqY3AgPSBzOworCisJaWYgKCFzKQorCQlyZXR1cm4gMDsKKwltYWpvciA9IHN0cnRvbChjcCwgJmVuZHB0ciwgMTApOworCWlmIChjcCA9PSBlbmRwdHIgfHwgKmVuZHB0ciAhPSAnLicpCisJCXJldHVybiAwOworCWNwID0gZW5kcHRyICsgMTsKKwltaW5vciA9IHN0cnRvbChjcCwgJmVuZHB0ciwgMTApOworCWlmIChjcCA9PSBlbmRwdHIgfHwgKmVuZHB0ciAhPSAnLicpCisJCXJldHVybiAwOworCWNwID0gZW5kcHRyICsgMTsKKwlyZXYgPSBzdHJ0b2woY3AsICZlbmRwdHIsIDEwKTsKKwlpZiAoY3AgPT0gZW5kcHRyKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKCgoKG1ham9yICogMjU2KSArIG1pbm9yKSAqIDI1NikgKyByZXYpOworfQorCisjZGVmaW5lIFZFUlNJT05fQ09ERShhLGIsYykgKCgoYSkgPDwgMTYpICsgKChiKSA8PCA4KSArIChjKSkKKworI2VuZGlmCisKK2VycmNvZGVfdCBvbmxpbmVfcmVzaXplX2ZzKGV4dDJfZmlsc3lzIGZzLCBjb25zdCBjaGFyICptdHB0LAorCQkJICAgYmxrNjRfdCAqbmV3X3NpemUsIGludCBmbGFncyBFWFQyRlNfQVRUUigodW51c2VkKSkpCit7CisjaWZkZWYgX19saW51eF9fCisJc3RydWN0IGV4dDJfbmV3X2dyb3VwX2lucHV0IGlucHV0OworCXN0cnVjdCBleHQ0X25ld19ncm91cF9pbnB1dCBpbnB1dDY0OworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGZzLT5zdXBlcjsKKwl1bnNpZ25lZCBsb25nCQluZXdfZGVzY19ibG9ja3M7CisJZXh0Ml9maWxzeXMgCQluZXdfZnM7CisJZXJyY29kZV90IAkJcmV0dmFsOworCWRvdWJsZQkJCXBlcmNlbnQ7CisJZGdycF90CQkJaTsKKwlibGtfdAkJCXNpemU7CisJaW50CQkJZmQsIG92ZXJoZWFkOworCWludAkJCXVzZV9vbGRfaW9jdGwgPSAxOworCWludAkJCW5vX21ldGFfYmdfcmVzaXplID0gMDsKKwlpbnQJCQlub19yZXNpemVfaW9jdGwgPSAwOworCisJaWYgKGdldGVudigiUkVTSVpFMkZTX0tFUk5FTF9WRVJTSU9OIikpIHsKKwkJY2hhciAqdmVyc2lvbl90b19lbXVsYXRlID0gZ2V0ZW52KCJSRVNJWkUyRlNfS0VSTkVMX1ZFUlNJT04iKTsKKwkJaW50IGt2ZXJzID0gcGFyc2VfdmVyc2lvbl9udW1iZXIodmVyc2lvbl90b19lbXVsYXRlKTsKKworCQlpZiAoa3ZlcnMgPCBWRVJTSU9OX0NPREUoMywgNywgMCkpCisJCQlub19tZXRhX2JnX3Jlc2l6ZSA9IDE7CisJCWlmIChrdmVycyA8IFZFUlNJT05fQ09ERSgzLCAzLCAwKSkKKwkJCW5vX3Jlc2l6ZV9pb2N0bCA9IDE7CisJfQorCisJaWYgKEVYVDJfSEFTX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkgICAgRVhUNF9GRUFUVVJFX0NPTVBBVF9TUEFSU0VfU1VQRVIyKSAmJgorCSAgICAoYWNjZXNzKCIvc3lzL2ZzL2V4dDQvZmVhdHVyZXMvc3BhcnNlX3N1cGVyMiIsIFJfT0spICE9IDApKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCBfKCJrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgIgorCQkJCQkgICAicmVzaXplIHdpdGggc3BhcnNlX3N1cGVyMiIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlwcmludGYoXygiRmlsZXN5c3RlbSBhdCAlcyBpcyBtb3VudGVkIG9uICVzOyAiCisJCSAib24tbGluZSByZXNpemluZyByZXF1aXJlZFxuIiksIGZzLT5kZXZpY2VfbmFtZSwgbXRwdCk7CisKKwlpZiAoKm5ld19zaXplIDwgZXh0MmZzX2Jsb2Nrc19jb3VudChzYikpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsIF8oIk9uLWxpbmUgc2hyaW5raW5nIG5vdCBzdXBwb3J0ZWQiKSk7CisJCWV4aXQoMSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3IgYmxvY2tzIGlzIGdvaW5nIHRvIGluY3JlYXNlLAorCSAqIHRoZSBvbi1saW5lIHJlc2l6aW5nIGlub2RlIG11c3QgYmUgcHJlc2VudC4KKwkgKi8KKwluZXdfZGVzY19ibG9ja3MgPSBleHQyZnNfZGl2X2NlaWwoCisJCWV4dDJmc19kaXY2NF9jZWlsKCpuZXdfc2l6ZSAtCisJCQkJICBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaywKKwkJCQkgIEVYVDJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c3VwZXIpKSwKKwkJRVhUMl9ERVNDX1BFUl9CTE9DSyhmcy0+c3VwZXIpKTsKKwlwcmludGYoIm9sZF9kZXNjX2Jsb2NrcyA9ICVsdSwgbmV3X2Rlc2NfYmxvY2tzID0gJWx1XG4iLAorCSAgICAgICBmcy0+ZGVzY19ibG9ja3MsIG5ld19kZXNjX2Jsb2Nrcyk7CisKKwkvKgorCSAqIERvIGVycm9yIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGUgcmVzaXplIHdpbGwgYmUgc3VjY2Vzc2Z1bC4KKwkgKi8KKwlpZiAoKGFjY2VzcygiL3N5cy9mcy9leHQ0L2ZlYXR1cmVzL21ldGFfYmdfcmVzaXplIiwgUl9PSykgIT0gMCkgfHwKKwkgICAgbm9fbWV0YV9iZ19yZXNpemUpIHsKKwkJaWYgKCFFWFQyX0hBU19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCUVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFKSAmJgorCQkgICAgKG5ld19kZXNjX2Jsb2NrcyAhPSBmcy0+ZGVzY19ibG9ja3MpKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQlfKCJGaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIikpOworCQkJZXhpdCgxKTsKKwkJfQorCisJCWlmIChFWFQyX0hBU19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCUVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFKSAmJgorCQkgICAgbmV3X2Rlc2NfYmxvY2tzID4gKGZzLT5kZXNjX2Jsb2NrcyArCisJCQkJICAgICAgIGZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzKSkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJXygiTm90IGVub3VnaCByZXNlcnZlZCBnZHQgYmxvY2tzIGZvciByZXNpemluZyIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKworCQlpZiAoKGV4dDJmc19ibG9ja3NfY291bnQoc2IpID4gTUFYXzMyX05VTSkgfHwKKwkJICAgICgqbmV3X3NpemUgPiBNQVhfMzJfTlVNKSkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJXygiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcmVzaXppbmcgYSBmaWxlIHN5c3RlbSB0aGlzIGxhcmdlIikpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCWZkID0gb3BlbihtdHB0LCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgZXJybm8sCisJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBtb3VudHBvaW50ICVzIiksIG10cHQpOworCQlleGl0KDEpOworCX0KKworCWlmIChub19yZXNpemVfaW9jdGwpIHsKKwkJcHJpbnRmKF8oIk9sZCByZXNpemUgaW50ZXJmYWNlIHJlcXVlc3RlZC5cbiIpKTsKKwl9IGVsc2UgaWYgKGlvY3RsKGZkLCBFWFQ0X0lPQ19SRVNJWkVfRlMsIG5ld19zaXplKSkgeworCQkvKgorCQkgKiBJZiBrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBFWFQ0X0lPQ19SRVNJWkVfRlMsIHVzZSB0aGUKKwkJICogb2xkIG9ubGluZSByZXNpemUuIE5vdGUgdGhhdCB0aGUgb2xkIGFwcHJvYWNoIGRvZXMgbm90CisJCSAqIGhhbmRsZSA+MzIgYml0IGZpbGUgc3lzdGVtcworCQkgKgorCQkgKiBTaWdoLCBpZiB3ZSBhcmUgcnVubmluZyBhIDMyLWJpdCBiaW5hcnkgb24gYSA2NC1iaXQKKwkJICoga2VybmVsICh3aGljaCBoYXBwZW5zIGFsbCB0aGUgdGltZSBvbiB0aGUgTUlQUworCQkgKiBhcmNoaXRlY3R1cmUgaW4gRGViaWFuLCBidXQgY2FuIGhhcHBlbiBvbiBvdGhlciBDUFUKKwkJICogYXJjaGl0ZWN0dXJlcyBhcyB3ZWxsKSB3ZSB3aWxsIGdldCBFSU5WQUwgcmV0dXJuZWQKKwkJICogd2hlbiBhbiBpb2N0bCBkb2Vzbid0IGV4aXN0LCBhdCBsZWFzdCB1cCB0byBMaW51eAorCQkgKiAzLjEuICBTZWUgY29tcGF0X3N5c19pb2N0bCgpIGluIGZzL2NvbXBhdF9pb2N0bC5jCisJCSAqIGluIHRoZSBrZXJuZWwgc291cmNlcy4gIFRoaXMgaXMgcHJvYmFibHkgYSBrZXJuZWwKKwkJICogYnVnLCBidXQgd29yayBhcm91bmQgaXQgaGVyZS4KKwkJICovCisJCWlmICgoZXJybm8gIT0gRU5PVFRZKSAmJiAoZXJybm8gIT0gRUlOVkFMKSkgeworCQkJaWYgKGVycm5vID09IEVQRVJNKQorCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCV8oIlBlcm1pc3Npb24gZGVuaWVkIHRvIHJlc2l6ZSBmaWxlc3lzdGVtIikpOworCQkJZWxzZQorCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnJubywKKwkJCQlfKCJXaGlsZSBjaGVja2luZyBmb3Igb24tbGluZSByZXNpemluZyAiCisJCQkJICAic3VwcG9ydCIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9IGVsc2UgeworCQljbG9zZShmZCk7CisJCXJldHVybiAwOworCX0KKworCXNpemUgPSBleHQyZnNfYmxvY2tzX2NvdW50KHNiKTsKKworCWlmIChpb2N0bChmZCwgRVhUMl9JT0NfR1JPVVBfRVhURU5ELCAmc2l6ZSkpIHsKKwkJaWYgKGVycm5vID09IEVQRVJNKQorCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJXygiUGVybWlzc2lvbiBkZW5pZWQgdG8gcmVzaXplIGZpbGVzeXN0ZW0iKSk7CisJCWVsc2UgaWYgKGVycm5vID09IEVOT1RUWSkKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJXygiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIikpOworCQllbHNlCisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgZXJybm8sCisJCQlfKCJXaGlsZSBjaGVja2luZyBmb3Igb24tbGluZSByZXNpemluZyBzdXBwb3J0IikpOworCQlleGl0KDEpOworCX0KKworCXBlcmNlbnQgPSAoZXh0MmZzX3JfYmxvY2tzX2NvdW50KHNiKSAqIDEwMC4wKSAvCisJCWV4dDJmc19ibG9ja3NfY291bnQoc2IpOworCisJcmV0dmFsID0gZXh0MmZzX3JlYWRfYml0bWFwcyhmcyk7CisJaWYgKHJldHZhbCkgeworCQljbG9zZShmZCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2R1cF9oYW5kbGUoZnMsICZuZXdfZnMpOworCWlmIChyZXR2YWwpIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIFRoZSBjdXJyZW50IG1ldGhvZCBvZiBhZGRpbmcgb25lIGJsb2NrIGdyb3VwIGF0IGEgdGltZSB0byBhCisJICogbW91bnRlZCBmaWxlc3lzdGVtIG1lYW5zIGl0IGlzIGltcG9zc2libGUgdG8gYWNjb21vZGF0ZSB0aGUKKwkgKiBmbGV4X2JnIGFsbG9jYXRpb24gbWV0aG9kIG9mIHBsYWNpbmcgdGhlIG1ldGFkYXRhIHRvZ2V0aGVyCisJICogaW4gYSBzaW5nbGUgYmxvY2sgZ3JvdXAuICBGb3Igbm93IHdlICJmaXgiIHRoaXMgaXNzdWUgYnkKKwkgKiB1c2luZyB0aGUgdHJhZGl0aW9uYWwgbGF5b3V0IGZvciBuZXcgYmxvY2sgZ3JvdXBzLCB3aGVyZQorCSAqIGVhY2ggYmxvY2sgZ3JvdXAgaXMgc2VsZi1jb250YWluZWQgYW5kIGNvbnRhaW5zIGl0cyBvd24KKwkgKiBiaXRtYXAgYmxvY2tzIGFuZCBpbm9kZSB0YWJsZXMuICBUaGlzIG1lYW5zIHdlIGRvbid0IGdldAorCSAqIHRoZSBsYXlvdXQgYWR2YW50YWdlcyBvZiBmbGV4X2JnIGluIHRoZSBuZXcgYmxvY2sgZ3JvdXBzLAorCSAqIGJ1dCBhdCBsZWFzdCBpdCBhbGxvd3Mgb24tbGluZSByZXNpemluZyB0byBmdW5jdGlvbi4KKwkgKi8KKwluZXdfZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJj0gfkVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHOworCXJldHZhbCA9IGFkanVzdF9mc19pbmZvKG5ld19mcywgZnMsIDAsICpuZXdfc2l6ZSk7CisJaWYgKHJldHZhbCkgeworCQljbG9zZShmZCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcHJpbnRmKF8oIlBlcmZvcm1pbmcgYW4gb24tbGluZSByZXNpemUgb2YgJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iKSwKKwkgICAgICAgZnMtPmRldmljZV9uYW1lLCAqbmV3X3NpemUsIGZzLT5ibG9ja3NpemUgLyAxMDI0KTsKKworCXNpemUgPSBmcy0+Z3JvdXBfZGVzY19jb3VudCAqIHNiLT5zX2Jsb2Nrc19wZXJfZ3JvdXAgKworCQlzYi0+c19maXJzdF9kYXRhX2Jsb2NrOworCWlmIChzaXplID4gKm5ld19zaXplKQorCQlzaXplID0gKm5ld19zaXplOworCisJaWYgKGlvY3RsKGZkLCBFWFQyX0lPQ19HUk9VUF9FWFRFTkQsICZzaXplKSkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgZXJybm8sCisJCQlfKCJXaGlsZSB0cnlpbmcgdG8gZXh0ZW5kIHRoZSBsYXN0IGdyb3VwIikpOworCQlleGl0KDEpOworCX0KKworCWZvciAoaSA9IGZzLT5ncm91cF9kZXNjX2NvdW50OworCSAgICAgaSA8IG5ld19mcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisKKwkJb3ZlcmhlYWQgPSAoaW50KSAoMiArIG5ld19mcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCk7CisKKwkJaWYgKGV4dDJmc19iZ19oYXNfc3VwZXIobmV3X2ZzLCBuZXdfZnMtPmdyb3VwX2Rlc2NfY291bnQgLSAxKSkKKwkJCW92ZXJoZWFkICs9IDEgKyBuZXdfZnMtPmRlc2NfYmxvY2tzICsKKwkJCQluZXdfZnMtPnN1cGVyLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3M7CisKKwkJaW5wdXQuZ3JvdXAgPSBpOworCQlpbnB1dC5ibG9ja19iaXRtYXAgPSBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhuZXdfZnMsIGkpOworCQlpbnB1dC5pbm9kZV9iaXRtYXAgPSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhuZXdfZnMsIGkpOworCQlpbnB1dC5pbm9kZV90YWJsZSA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MobmV3X2ZzLCBpKTsKKwkJaW5wdXQuYmxvY2tzX2NvdW50ID0gZXh0MmZzX2dyb3VwX2Jsb2Nrc19jb3VudChuZXdfZnMsIGkpOworCQlpbnB1dC5yZXNlcnZlZF9ibG9ja3MgPSAoYmxrX3QpIChwZXJjZW50ICogaW5wdXQuYmxvY2tzX2NvdW50CisJCQkJCQkgLyAxMDAuMCk7CisKKyNpZiAwCisJCXByaW50ZigibmV3IGJsb2NrIGJpdG1hcCBpcyBhdCAweCUwNHhcbiIsIGlucHV0LmJsb2NrX2JpdG1hcCk7CisJCXByaW50ZigibmV3IGlub2RlIGJpdG1hcCBpcyBhdCAweCUwNHhcbiIsIGlucHV0Lmlub2RlX2JpdG1hcCk7CisJCXByaW50ZigibmV3IGlub2RlIHRhYmxlIGlzIGF0IDB4JTA0eC0weCUwNHhcbiIsCisJCSAgICAgICBpbnB1dC5pbm9kZV90YWJsZSwKKwkJICAgICAgIGlucHV0Lmlub2RlX3RhYmxlICsgbmV3X2ZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwLTEpOworCQlwcmludGYoIm5ldyBncm91cCBoYXMgJXUgYmxvY2tzXG4iLCBpbnB1dC5ibG9ja3NfY291bnQpOworCQlwcmludGYoIm5ldyBncm91cCB3aWxsIHJlc2VydmUgJWQgYmxvY2tzXG4iLAorCQkgICAgICAgaW5wdXQucmVzZXJ2ZWRfYmxvY2tzKTsKKwkJcHJpbnRmKCJuZXcgZ3JvdXAgaGFzICVkIGZyZWUgYmxvY2tzXG4iLAorCQkgICAgICAgZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50KG5ld19mcywgaSksCisJCXByaW50ZigibmV3IGdyb3VwIGhhcyAlZCBmcmVlIGlub2RlcyAoJWQgYmxvY2tzKVxuIiwKKwkJICAgICAgIGV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudChuZXdfZnMsIGkpLAorCQkgICAgICAgbmV3X2ZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKTsKKwkJcHJpbnRmKCJBZGRpbmcgZ3JvdXAgIyVkXG4iLCBpbnB1dC5ncm91cCk7CisjZW5kaWYKKworCQlpZiAodXNlX29sZF9pb2N0bCAmJgorCQkgICAgaW9jdGwoZmQsIEVYVDJfSU9DX0dST1VQX0FERCwgJmlucHV0KSA9PSAwKQorCQkJY29udGludWU7CisJCWVsc2UKKwkJCXVzZV9vbGRfaW9jdGwgPSAwOworCisJCWlucHV0NjQuZ3JvdXAgPSBpbnB1dC5ncm91cDsKKwkJaW5wdXQ2NC5ibG9ja19iaXRtYXAgPSBpbnB1dC5ibG9ja19iaXRtYXA7CisJCWlucHV0NjQuaW5vZGVfYml0bWFwID0gaW5wdXQuaW5vZGVfYml0bWFwOworCQlpbnB1dDY0Lmlub2RlX3RhYmxlID0gaW5wdXQuaW5vZGVfdGFibGU7CisJCWlucHV0NjQuYmxvY2tzX2NvdW50ID0gaW5wdXQuYmxvY2tzX2NvdW50OworCQlpbnB1dDY0LnJlc2VydmVkX2Jsb2NrcyA9IGlucHV0LnJlc2VydmVkX2Jsb2NrczsKKwkJaW5wdXQ2NC51bnVzZWQgPSBpbnB1dC51bnVzZWQ7CisKKwkJaWYgKGlvY3RsKGZkLCBFWFQ0X0lPQ19HUk9VUF9BREQsICZpbnB1dDY0KSA8IDApIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnJubywKKwkJCQlfKCJXaGlsZSB0cnlpbmcgdG8gYWRkIGdyb3VwICMlZCIpLAorCQkJCWlucHV0Lmdyb3VwKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlleHQyZnNfZnJlZShuZXdfZnMpOworCWNsb3NlKGZkKTsKKworCXJldHVybiAwOworI2Vsc2UKKwlwcmludGYoXygiRmlsZXN5c3RlbSBhdCAlcyBpcyBtb3VudGVkIG9uICVzLCBhbmQgb24tbGluZSByZXNpemluZyBpcyAiCisJCSAibm90IHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbS5cbiIpLCBmcy0+ZGV2aWNlX25hbWUsIG10cHQpOworCWV4aXQoMSk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3Jlc2l6ZS9yZXNpemUyZnMuOC5pbiBiL3Jlc2l6ZS9yZXNpemUyZnMuOC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjQ5NWM2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzaXplL3Jlc2l6ZTJmcy44LmluCkBAIC0wLDAgKzEsMTUzIEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAxOTk3IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIAorLlwiIC5USCBSRVNJWkUyRlMgOCAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuVEggUkVTSVpFMkZTIDggIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK3Jlc2l6ZTJmcyBcLSBleHQyL2V4dDMvZXh0NCBmaWxlIHN5c3RlbSByZXNpemVyCisuU0ggU1lOT1BTSVMKKy5CIHJlc2l6ZTJmcworWworLkIgXC1mRnBQTQorXQorWworLkIgXC1kCisuSSBkZWJ1Zy1mbGFncworXQorWworLkIgXC1TCisuSSBSQUlELXN0cmlkZQorXQorLkkgZGV2aWNlCitbCisuSSBzaXplCitdCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgcmVzaXplMmZzCitwcm9ncmFtIHdpbGwgcmVzaXplIGV4dDIsIGV4dDMsIG9yIGV4dDQgZmlsZSBzeXN0ZW1zLiAgSXQgY2FuIGJlIHVzZWQgdG8KK2VubGFyZ2Ugb3Igc2hyaW5rIGFuIHVubW91bnRlZCBmaWxlIHN5c3RlbSBsb2NhdGVkIG9uCisuSVIgZGV2aWNlIC4KK0lmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQsIGl0IGNhbiBiZSB1c2VkIHRvIGV4cGFuZCB0aGUgc2l6ZSBvZiB0aGUKK21vdW50ZWQgZmlsZXN5c3RlbSwgYXNzdW1pbmcgdGhlIGtlcm5lbCBhbmQgdGhlIGZpbGUgc3lzdGVtIHN1cHBvcnRzCitvbi1saW5lIHJlc2l6aW5nLiAgKE1vZGVybiBMaW51eCAyLjYga2VybmVscyB3aWxsIHN1cHBvcnQgb24tbGluZSByZXNpemUKK2ZvciBmaWxlIHN5c3RlbXMgbW91bnRlZCB1c2luZyBleHQzIGFuZCBleHQ0OyBleHQzIGZpbGUgc3lzdGVtcyB3aWxsCityZXF1aXJlIHRoZSB1c2Ugb2YgZmlsZSBzeXN0ZW1zIHdpdGggdGhlIHJlc2l6ZV9pbm9kZSBmZWF0dXJlIGVuYWJsZWQuKQorLlBQCitUaGUKKy5JIHNpemUKK3BhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHJlcXVlc3RlZCBuZXcgc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbS4KK0lmIG5vIHVuaXRzIGFyZSBzcGVjaWZpZWQsIHRoZSB1bml0cyBvZiB0aGUKKy5JIHNpemUKK3BhcmFtZXRlciBzaGFsbCBiZSB0aGUgZmlsZXN5c3RlbSBibG9ja3NpemUgb2YgdGhlIGZpbGVzeXN0ZW0uCitPcHRpb25hbGx5LCB0aGUKKy5JIHNpemUKK3BhcmFtZXRlciBtYXkgYmUgc3VmZml4ZWQgYnkgb25lIG9mIHRoZSBmb2xsb3dpbmcgdGhlIHVuaXRzCitkZXNpZ25hdG9yczogJ3MnLCAnSycsICdNJywgb3IgJ0cnLAorZm9yIDUxMiBieXRlIHNlY3RvcnMsIGtpbG9ieXRlcywgbWVnYWJ5dGVzLCBvciBnaWdhYnl0ZXMsIHJlc3BlY3RpdmVseS4KK1RoZQorLkkgc2l6ZQorb2YgdGhlIGZpbGVzeXN0ZW0gbWF5IG5ldmVyIGJlIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBwYXJ0aXRpb24uCitJZgorLkkgc2l6ZQorcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgc2l6ZSBvZiB0aGUgcGFydGl0aW9uLgorLlBQCitOb3RlOiB3aGVuIGtpbG9ieXRlcyBpcyB1c2VkIGFib3ZlLCBJIG1lYW4KKy5JUiByZWFsICwKK3Bvd2VyLW9mLTIga2lsb2J5dGVzLCAoaS5lLiwgMTAyNCBieXRlcyksIHdoaWNoIHNvbWUgcG9saXRpY2FsbHkgY29ycmVjdAorZm9sa3MgaW5zaXN0IHNob3VsZCBiZSB0aGUgc3R1cGlkLXNvdW5kaW5nIGBga2liaWJ5dGVzJycuICBUaGUgc2FtZQoraG9sZHMgdHJ1ZSBmb3IgbWVnYWJ5dGVzLCBhbHNvIHNvbWV0aW1lcyBrbm93biBhcyBgYG1lYmlieXRlcycnLCBvcgorZ2lnYWJ5dGVzLCBhcyB0aGUgYW1hemluZ2x5IHNpbGx5IGBgZ2liaWJ5dGVzJycuICBNYWtlcyB5b3Ugd2FudCB0bworZ2liYmVyLCBkb2Vzbid0IGl0PworLlBQCitUaGUKKy5CIHJlc2l6ZTJmcworcHJvZ3JhbSBkb2VzIG5vdCBtYW5pcHVsYXRlIHRoZSBzaXplIG9mIHBhcnRpdGlvbnMuICBJZiB5b3Ugd2lzaCB0byBlbmxhcmdlCithIGZpbGVzeXN0ZW0sIHlvdSBtdXN0IG1ha2Ugc3VyZSB5b3UgY2FuIGV4cGFuZCB0aGUgc2l6ZSBvZiB0aGUKK3VuZGVybHlpbmcgcGFydGl0aW9uIGZpcnN0LiAgVGhpcyBjYW4gYmUgZG9uZSB1c2luZworLkJSIGZkaXNrICg4KQorYnkgZGVsZXRpbmcgdGhlIHBhcnRpdGlvbiBhbmQgcmVjcmVhdGluZyBpdCB3aXRoIGEgbGFyZ2VyIHNpemUgb3IgdXNpbmcKKy5CUiBsdmV4dGVuZCAoOCksCitpZiB5b3UncmUgdXNpbmcgdGhlIGxvZ2ljYWwgdm9sdW1lIG1hbmFnZXIKKy5CUiBsdm0gKDgpLgorV2hlbgorcmVjcmVhdGluZyB0aGUgcGFydGl0aW9uLCBtYWtlIHN1cmUgeW91IGNyZWF0ZSBpdCB3aXRoIHRoZSBzYW1lIHN0YXJ0aW5nCitkaXNrIGN5bGluZGVyIGFzIGJlZm9yZSEgIE90aGVyd2lzZSwgdGhlIHJlc2l6ZSBvcGVyYXRpb24gd2lsbAorY2VydGFpbmx5IG5vdCB3b3JrLCBhbmQgeW91IG1heSBsb3NlIHlvdXIgZW50aXJlIGZpbGVzeXN0ZW0uCitBZnRlciBydW5uaW5nCisuQlIgZmRpc2sgKDgpLAorcnVuIHJlc2l6ZTJmcyB0byByZXNpemUgdGhlIGV4dDIgZmlsZXN5c3RlbQordG8gdXNlIGFsbCBvZiB0aGUgc3BhY2UgaW4gdGhlIG5ld2x5IGVubGFyZ2VkIHBhcnRpdGlvbi4KKy5QUAorSWYgeW91IHdpc2ggdG8gc2hyaW5rIGFuIGV4dDIgcGFydGl0aW9uLCBmaXJzdCB1c2UKKy5CIHJlc2l6ZTJmcwordG8gc2hyaW5rIHRoZSBzaXplIG9mIGZpbGVzeXN0ZW0uICBUaGVuIHlvdSBtYXkgdXNlCisuQlIgZmRpc2sgKDgpCit0byBzaHJpbmsgdGhlIHNpemUgb2YgdGhlIHBhcnRpdGlvbi4gIFdoZW4gc2hyaW5raW5nIHRoZSBzaXplIG9mCit0aGUgcGFydGl0aW9uLCBtYWtlIHN1cmUgeW91IGRvIG5vdCBtYWtlIGl0IHNtYWxsZXIgdGhhbiB0aGUgbmV3IHNpemUKK29mIHRoZSBleHQyIGZpbGVzeXN0ZW0hCisuU0ggT1BUSU9OUworLlRQCisuQiBcLWQgXGZJZGVidWctZmxhZ3MKK1R1cm5zIG9uIHZhcmlvdXMgcmVzaXplMmZzIGRlYnVnZ2luZyBmZWF0dXJlcywgaWYgdGhleSBoYXZlIGJlZW4gY29tcGlsZWQKK2ludG8gdGhlIGJpbmFyeS4KKy5JIGRlYnVnLWZsYWdzCitzaG91bGQgYmUgY29tcHV0ZWQgYnkgYWRkaW5nIHRoZSBudW1iZXJzIG9mIHRoZSBkZXNpcmVkIGZlYXR1cmVzCitmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdDoKKy5icgorCTIJXC1cIERlYnVnIGJsb2NrIHJlbG9jYXRpb25zCisuYnIKKwk0CVwtXCBEZWJ1ZyBpbm9kZSByZWxvY2F0aW9ucworLmJyCisJOAlcLVwgRGVidWcgbW92aW5nIHRoZSBpbm9kZSB0YWJsZQorLmJyCisJMTYJXC1cIFByaW50IHRpbWluZyBpbmZvcm1hdGlvbgorLmJyCisJMzIJXC1cIERlYnVnIG1pbmltdW0gZmlsZXN5c3RlbSBzaXplIChcLU0pIGNhbGN1bGF0aW9uCisuVFAKKy5CIFwtZgorRm9yY2VzIHJlc2l6ZTJmcyB0byBwcm9jZWVkIHdpdGggdGhlIGZpbGVzeXN0ZW0gcmVzaXplIG9wZXJhdGlvbiwgb3ZlcnJpZGluZworc29tZSBzYWZldHkgY2hlY2tzIHdoaWNoIHJlc2l6ZTJmcyBub3JtYWxseSBlbmZvcmNlcy4KKy5UUAorLkIgXC1GCitGbHVzaCB0aGUgZmlsZXN5c3RlbSBkZXZpY2UncyBidWZmZXIgY2FjaGVzIGJlZm9yZSBiZWdpbm5pbmcuICBPbmx5CityZWFsbHkgdXNlZnVsIGZvciBkb2luZworLkIgcmVzaXplMmZzCit0aW1lIHRyaWFscy4KKy5UUAorLkIgXC1NCitTaHJpbmsgdGhlIGZpbGVzeXN0ZW0gdG8gdGhlIG1pbmltdW0gc2l6ZS4KKy5UUAorLkIgXC1wCitQcmludHMgb3V0IGEgcGVyY2VudGFnZSBjb21wbGV0aW9uIGJhcnMgZm9yIGVhY2gKKy5CIHJlc2l6ZTJmcworb3BlcmF0aW9uIGR1cmluZyBhbiBvZmZsaW5lIHJlc2l6ZSwgc28gdGhhdCB0aGUgdXNlciBjYW4ga2VlcCB0cmFjaworb2Ygd2hhdCB0aGUgcHJvZ3JhbSBpcyBkb2luZy4KKy5UUAorLkIgXC1QCitQcmludCB0aGUgbWluaW11bSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtIGFuZCBleGl0LgorLlRQCisuQiBcLVMgXGZJUkFJRC1zdHJpZGUKK1RoZQorLkIgcmVzaXplMmZzCitwcm9ncmFtIHdpbGwgaGV1cmlzdGljYWxseSBkZXRlcm1pbmUgdGhlIFJBSUQgc3RyaWRlIHRoYXQgd2FzIHNwZWNpZmllZAord2hlbiB0aGUgZmlsZXN5c3RlbSB3YXMgY3JlYXRlZC4gIFRoaXMgb3B0aW9uIGFsbG93cyB0aGUgdXNlciB0bworZXhwbGljaXRseSBzcGVjaWZ5IGEgUkFJRCBzdHJpZGUgc2V0dGluZyB0byBiZSB1c2VkIGJ5IHJlc2l6ZTJmcyBpbnN0ZWFkLgorLlNIIEtOT1dOIEJVR1MKK1RoZSBtaW5pbXVtIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW0gYXMgZXN0aW1hdGVkIGJ5IHJlc2l6ZTJmcyBtYXkgYmUKK2luY29ycmVjdCwgZXNwZWNpYWxseSBmb3IgZmlsZXN5c3RlbXMgd2l0aCAxayBhbmQgMmsgYmxvY2tzaXplcy4KKy5TSCBBVVRIT1IKKy5CIHJlc2l6ZTJmcword2FzIHdyaXR0ZW4gYnkgVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4uCisuU0ggQ09QWVJJR0hUCitSZXNpemUyZnMgaXMgQ29weXJpZ2h0IDE5OTggYnkgVGhlb2RvcmUgVHMnbyBhbmQgUG93ZXJRdWVzdCwgSW5jLiAgQWxsCityaWdodHMgcmVzZXJ2ZWQuCitBcyBvZiBBcHJpbCwgMjAwMAorLkIgUmVzaXplMmZzCittYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTC4KKy5TSCBTRUUgQUxTTworLkJSIGZkaXNrICg4KSwKKy5CUiBlMmZzY2sgKDgpLAorLkJSIG1rZTJmcyAoOCksCisuQlIgbHZtICg4KSwKKy5CUiBsdmV4dGVuZCAoOCkKZGlmZiAtLWdpdCBhL3Jlc2l6ZS9yZXNpemUyZnMuYyBiL3Jlc2l6ZS9yZXNpemUyZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjgwNmIxCi0tLSAvZGV2L251bGwKKysrIGIvcmVzaXplL3Jlc2l6ZTJmcy5jCkBAIC0wLDAgKzEsMjU2OSBAQAorLyoKKyAqIHJlc2l6ZTJmcy5jIC0tLSBleHQyIG1haW4gcm91dGluZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCBieSBUaGVvZG9yZSBUcydvIGFuZAorICogCVBvd2VyUXVlc3QsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgYnkgVGhlb3NvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqIFJlc2l6aW5nIGEgZmlsZXN5c3RlbSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHBoYXNlczoKKyAqCisgKgkxLiAgQWRqdXN0IHN1cGVyYmxvY2sgYW5kIHdyaXRlIG91dCBuZXcgcGFydHMgb2YgdGhlIGlub2RlCisgKiAJCXRhYmxlCisgKiAJMi4gIERldGVybWluZSBibG9ja3Mgd2hpY2ggbmVlZCB0byBiZSByZWxvY2F0ZWQsIGFuZCBjb3B5IHRoZQorICogCQljb250ZW50cyBvZiBibG9ja3MgZnJvbSB0aGVpciBvbGQgbG9jYXRpb25zIHRvIHRoZSBuZXcgb25lcy4KKyAqIAkzLiAgU2NhbiB0aGUgaW5vZGUgdGFibGUsIGRvaW5nIHRoZSBmb2xsb3dpbmc6CisgKiAJCWEuICBJZiBibG9ja3MgaGF2ZSBiZWVuIG1vdmVkLCB1cGRhdGUgdGhlIGJsb2NrCisgKiAJCQlwb2ludGVycyBpbiB0aGUgaW5vZGVzIGFuZCBpbmRpcmVjdCBibG9ja3MgdG8KKyAqIAkJCXBvaW50IGF0IHRoZSBuZXcgYmxvY2sgbG9jYXRpb25zLgorICogCQliLiAgSWYgcGFydHMgb2YgdGhlIGlub2RlIHRhYmxlIG5lZWQgdG8gYmUgZXZhY3VhdGVkLAorICogCQkJY29weSBpbm9kZXMgZnJvbSB0aGVpciBvbGQgbG9jYXRpb25zIHRvIHRoZWlyCisgKiAJCQluZXcgb25lcy4KKyAqIAkJYy4gIElmIChiKSBuZWVkcyB0byBiZSBkb25lLCBub3RlIHdoaWNoIGJsb2NrcyBjb250YWluCisgKiAJCQlkaXJlY3RvcnkgaW5mb3JtYXRpb24sIHNpbmNlIHdlIHdpbGwgbmVlZCB0bworICogCQkJdXBkYXRlIHRoZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24uCisgKiAJNC4gIFVwZGF0ZSB0aGUgZGlyZWN0b3J5IGJsb2NrcyB3aXRoIHRoZSBuZXcgaW5vZGUgbG9jYXRpb25zLgorICogCTUuICBNb3ZlIHRoZSBpbm9kZSB0YWJsZXMsIGlmIG5lY2Vzc2FyeS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmVzaXplMmZzLmgiCisjaW5jbHVkZSA8dGltZS5oPgorCisjaWZkZWYgX19saW51eF9fCQkJLyogS2x1ZGdlIGZvciBkZWJ1Z2dpbmcgKi8KKyNkZWZpbmUgUkVTSVpFMkZTX0RFQlVHCisjZW5kaWYKKworc3RhdGljIHZvaWQgZml4X3VuaW5pdF9ibG9ja19iaXRtYXBzKGV4dDJfZmlsc3lzIGZzKTsKK3N0YXRpYyBlcnJjb2RlX3QgYWRqdXN0X3N1cGVyYmxvY2soZXh0Ml9yZXNpemVfdCByZnMsIGJsazY0X3QgbmV3X3NpemUpOworc3RhdGljIGVycmNvZGVfdCBibG9ja3NfdG9fbW92ZShleHQyX3Jlc2l6ZV90IHJmcyk7CitzdGF0aWMgZXJyY29kZV90IGJsb2NrX21vdmVyKGV4dDJfcmVzaXplX3QgcmZzKTsKK3N0YXRpYyBlcnJjb2RlX3QgaW5vZGVfc2Nhbl9hbmRfZml4KGV4dDJfcmVzaXplX3QgcmZzKTsKK3N0YXRpYyBlcnJjb2RlX3QgaW5vZGVfcmVmX2ZpeChleHQyX3Jlc2l6ZV90IHJmcyk7CitzdGF0aWMgZXJyY29kZV90IG1vdmVfaXRhYmxlcyhleHQyX3Jlc2l6ZV90IHJmcyk7CitzdGF0aWMgZXJyY29kZV90IGZpeF9yZXNpemVfaW5vZGUoZXh0Ml9maWxzeXMgZnMpOworc3RhdGljIGVycmNvZGVfdCBleHQyZnNfY2FsY3VsYXRlX3N1bW1hcnlfc3RhdHMoZXh0Ml9maWxzeXMgZnMpOworc3RhdGljIGVycmNvZGVfdCBmaXhfc2Jfam91cm5hbF9iYWNrdXAoZXh0Ml9maWxzeXMgZnMpOworc3RhdGljIGVycmNvZGVfdCBtYXJrX3RhYmxlX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywKKwkJCQkgICBleHQyZnNfYmxvY2tfYml0bWFwIGJtYXApOworc3RhdGljIGVycmNvZGVfdCBjbGVhcl9zcGFyc2Vfc3VwZXIyX2xhc3RfZ3JvdXAoZXh0Ml9yZXNpemVfdCByZnMpOworc3RhdGljIGVycmNvZGVfdCByZXNlcnZlX3NwYXJzZV9zdXBlcjJfbGFzdF9ncm91cChleHQyX3Jlc2l6ZV90IHJmcywKKwkJCQkJCSBleHQyZnNfYmxvY2tfYml0bWFwIG1ldGFfYm1hcCk7CisKKy8qCisgKiBTb21lIGhlbHBlciBDUFAgbWFjcm9zCisgKi8KKyNkZWZpbmUgSVNfQkxPQ0tfQk0oZnMsIGksIGJsaykgKChibGspID09IGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKChmcyksKGkpKSkKKyNkZWZpbmUgSVNfSU5PREVfQk0oZnMsIGksIGJsaykgKChibGspID09IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKChmcyksKGkpKSkKKworI2RlZmluZSBJU19JTk9ERV9UQihmcywgaSwgYmxrKSAoKChibGspID49IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoKGZzKSwgKGkpKSkgJiYgXAorCQkJCSAoKGJsaykgPCAoZXh0MmZzX2lub2RlX3RhYmxlX2xvYygoZnMpLCAoaSkpICsgXAorCQkJCQkgICAoZnMpLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKSkpCisKKy8qIFNvbWUgYmlnYWxsb2MgaGVscGVyIG1hY3JvcyB3aGljaCBhcmUgbW9yZSBzdWNjaW50Li4uICovCisjZGVmaW5lIEIyQyh4KQlFWFQyRlNfQjJDKGZzLCAoeCkpCisjZGVmaW5lIEMyQih4KQlFWFQyRlNfQzJCKGZzLCAoeCkpCisjZGVmaW5lIEVRX0NMU1RSKHgsIHkpIChCMkMoeCkgPT0gQjJDKHkpKQorI2RlZmluZSBMRV9DTFNUUih4LCB5KSAoQjJDKHgpIDw9IEIyQyh5KSkKKyNkZWZpbmUgTFRfQ0xTVFIoeCwgeSkgKEIyQyh4KSA8ICBCMkMoeSkpCisjZGVmaW5lIEdFX0NMU1RSKHgsIHkpIChCMkMoeCkgPj0gQjJDKHkpKQorI2RlZmluZSBHVF9DTFNUUih4LCB5KSAoQjJDKHgpID4gIEIyQyh5KSkKKworc3RhdGljIGludCBsYXp5X2l0YWJsZV9pbml0OworCisvKgorICogVGhpcyBpcyB0aGUgdG9wLWxldmVsIHJvdXRpbmUgd2hpY2ggZG9lcyB0aGUgZGlydHkgZGVlZC4uLi4KKyAqLworZXJyY29kZV90IHJlc2l6ZV9mcyhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCAqbmV3X3NpemUsIGludCBmbGFncywKKwkgICAgZXJyY29kZV90ICgqcHJvZ3Jlc3MpKGV4dDJfcmVzaXplX3QgcmZzLCBpbnQgcGFzcywKKwkJCQkJICB1bnNpZ25lZCBsb25nIGN1ciwKKwkJCQkJICB1bnNpZ25lZCBsb25nIG1heF92YWwpKQoreworCWV4dDJfcmVzaXplX3QJcmZzOworCWVycmNvZGVfdAlyZXR2YWw7CisJc3RydWN0IHJlc291cmNlX3RyYWNrCXJ0cmFjaywgb3ZlcmFsbF90cmFjazsKKworCS8qCisJICogQ3JlYXRlIHRoZSBkYXRhIHN0cnVjdHVyZQorCSAqLworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgZXh0Ml9yZXNpemVfc3RydWN0KSwgJnJmcyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCW1lbXNldChyZnMsIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9yZXNpemVfc3RydWN0KSk7CisJZnMtPnByaXZfZGF0YSA9IHJmczsKKwlyZnMtPm9sZF9mcyA9IGZzOworCXJmcy0+ZmxhZ3MgPSBmbGFnczsKKwlyZnMtPml0YWJsZV9idWYJID0gMDsKKwlyZnMtPnByb2dyZXNzID0gcHJvZ3Jlc3M7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZvdmVyYWxsX3RyYWNrLCAib3ZlcmFsbCByZXNpemUyZnMiLCBmcy0+aW8pOworCWluaXRfcmVzb3VyY2VfdHJhY2soJnJ0cmFjaywgInJlYWRfYml0bWFwcyIsIGZzLT5pbyk7CisJcmV0dmFsID0gZXh0MmZzX3JlYWRfYml0bWFwcyhmcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJcHJpbnRfcmVzb3VyY2VfdHJhY2socmZzLCAmcnRyYWNrLCBmcy0+aW8pOworCisJZnMtPnN1cGVyLT5zX3N0YXRlIHw9IEVYVDJfRVJST1JfRlM7CisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCWV4dDJmc19mbHVzaChmcyk7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssICJmaXhfdW5pbml0X2Jsb2NrX2JpdG1hcHMgMSIsIGZzLT5pbyk7CisJZml4X3VuaW5pdF9ibG9ja19iaXRtYXBzKGZzKTsKKwlwcmludF9yZXNvdXJjZV90cmFjayhyZnMsICZydHJhY2ssIGZzLT5pbyk7CisJcmV0dmFsID0gZXh0MmZzX2R1cF9oYW5kbGUoZnMsICZyZnMtPm5ld19mcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssICJhZGp1c3Rfc3VwZXJibG9jayIsIGZzLT5pbyk7CisJcmV0dmFsID0gYWRqdXN0X3N1cGVyYmxvY2socmZzLCAqbmV3X3NpemUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCXByaW50X3Jlc291cmNlX3RyYWNrKHJmcywgJnJ0cmFjaywgZnMtPmlvKTsKKworCisJaW5pdF9yZXNvdXJjZV90cmFjaygmcnRyYWNrLCAiZml4X3VuaW5pdF9ibG9ja19iaXRtYXBzIDIiLCBmcy0+aW8pOworCWZpeF91bmluaXRfYmxvY2tfYml0bWFwcyhyZnMtPm5ld19mcyk7CisJcHJpbnRfcmVzb3VyY2VfdHJhY2socmZzLCAmcnRyYWNrLCBmcy0+aW8pOworCS8qIENsZWFyIHRoZSBibG9jayBiaXRtYXAgdW5pbml0IGZsYWcgZm9yIHRoZSBsYXN0IGJsb2NrIGdyb3VwICovCisJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKHJmcy0+bmV3X2ZzLCByZnMtPm5ld19mcy0+Z3JvdXBfZGVzY19jb3VudCAtIDEsCisJCQkgICAgIEVYVDJfQkdfQkxPQ0tfVU5JTklUKTsKKworCSpuZXdfc2l6ZSA9IGV4dDJmc19ibG9ja3NfY291bnQocmZzLT5uZXdfZnMtPnN1cGVyKTsKKworCWluaXRfcmVzb3VyY2VfdHJhY2soJnJ0cmFjaywgImJsb2Nrc190b19tb3ZlIiwgZnMtPmlvKTsKKwlyZXR2YWwgPSBibG9ja3NfdG9fbW92ZShyZnMpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCXByaW50X3Jlc291cmNlX3RyYWNrKHJmcywgJnJ0cmFjaywgZnMtPmlvKTsKKworI2lmZGVmIFJFU0laRTJGU19ERUJVRworCWlmIChyZnMtPmZsYWdzICYgUkVTSVpFX0RFQlVHX0JNT1ZFKQorCQlwcmludGYoIk51bWJlciBvZiBmcmVlIGJsb2NrczogJWxsdS8lbGx1LCBOZWVkZWQ6ICVsbHVcbiIsCisJCSAgICAgICBleHQyZnNfZnJlZV9ibG9ja3NfY291bnQocmZzLT5vbGRfZnMtPnN1cGVyKSwKKwkJICAgICAgIGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChyZnMtPm5ld19mcy0+c3VwZXIpLAorCQkgICAgICAgcmZzLT5uZWVkZWRfYmxvY2tzKTsKKyNlbmRpZgorCisJaW5pdF9yZXNvdXJjZV90cmFjaygmcnRyYWNrLCAiYmxvY2tfbW92ZXIiLCBmcy0+aW8pOworCXJldHZhbCA9IGJsb2NrX21vdmVyKHJmcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJcHJpbnRfcmVzb3VyY2VfdHJhY2socmZzLCAmcnRyYWNrLCBmcy0+aW8pOworCisJaW5pdF9yZXNvdXJjZV90cmFjaygmcnRyYWNrLCAiaW5vZGVfc2Nhbl9hbmRfZml4IiwgZnMtPmlvKTsKKwlyZXR2YWwgPSBpbm9kZV9zY2FuX2FuZF9maXgocmZzKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwlwcmludF9yZXNvdXJjZV90cmFjayhyZnMsICZydHJhY2ssIGZzLT5pbyk7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssICJpbm9kZV9yZWZfZml4IiwgZnMtPmlvKTsKKwlyZXR2YWwgPSBpbm9kZV9yZWZfZml4KHJmcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJcHJpbnRfcmVzb3VyY2VfdHJhY2socmZzLCAmcnRyYWNrLCBmcy0+aW8pOworCisJaW5pdF9yZXNvdXJjZV90cmFjaygmcnRyYWNrLCAibW92ZV9pdGFibGVzIiwgZnMtPmlvKTsKKwlyZXR2YWwgPSBtb3ZlX2l0YWJsZXMocmZzKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwlwcmludF9yZXNvdXJjZV90cmFjayhyZnMsICZydHJhY2ssIGZzLT5pbyk7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssICJjYWxjdWxhdGVfc3VtbWFyeV9zdGF0cyIsIGZzLT5pbyk7CisJcmV0dmFsID0gZXh0MmZzX2NhbGN1bGF0ZV9zdW1tYXJ5X3N0YXRzKHJmcy0+bmV3X2ZzKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwlwcmludF9yZXNvdXJjZV90cmFjayhyZnMsICZydHJhY2ssIGZzLT5pbyk7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssICJmaXhfcmVzaXplX2lub2RlIiwgZnMtPmlvKTsKKwlyZXR2YWwgPSBmaXhfcmVzaXplX2lub2RlKHJmcy0+bmV3X2ZzKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwlwcmludF9yZXNvdXJjZV90cmFjayhyZnMsICZydHJhY2ssIGZzLT5pbyk7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssICJmaXhfc2Jfam91cm5hbF9iYWNrdXAiLCBmcy0+aW8pOworCXJldHZhbCA9IGZpeF9zYl9qb3VybmFsX2JhY2t1cChyZnMtPm5ld19mcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJcHJpbnRfcmVzb3VyY2VfdHJhY2socmZzLCAmcnRyYWNrLCBmcy0+aW8pOworCisJcmV0dmFsID0gY2xlYXJfc3BhcnNlX3N1cGVyMl9sYXN0X2dyb3VwKHJmcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlyZnMtPm5ld19mcy0+c3VwZXItPnNfc3RhdGUgJj0gfkVYVDJfRVJST1JfRlM7CisJcmZzLT5uZXdfZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFk7CisKKwlwcmludF9yZXNvdXJjZV90cmFjayhyZnMsICZvdmVyYWxsX3RyYWNrLCBmcy0+aW8pOworCXJldHZhbCA9IGV4dDJmc19jbG9zZV9mcmVlKCZyZnMtPm5ld19mcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlyZnMtPmZsYWdzID0gZmxhZ3M7CisKKwlleHQyZnNfZnJlZShyZnMtPm9sZF9mcyk7CisJcmZzLT5vbGRfZnMgPSBOVUxMOworCWlmIChyZnMtPml0YWJsZV9idWYpCisJCWV4dDJmc19mcmVlX21lbSgmcmZzLT5pdGFibGVfYnVmKTsKKwlpZiAocmZzLT5yZXNlcnZlX2Jsb2NrcykKKwkJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKHJmcy0+cmVzZXJ2ZV9ibG9ja3MpOworCWlmIChyZnMtPm1vdmVfYmxvY2tzKQorCQlleHQyZnNfZnJlZV9ibG9ja19iaXRtYXAocmZzLT5tb3ZlX2Jsb2Nrcyk7CisJZXh0MmZzX2ZyZWVfbWVtKCZyZnMpOworCisJcmV0dXJuIDA7CisKK2Vycm91dDoKKwlpZiAocmZzLT5uZXdfZnMpIHsKKwkJZXh0MmZzX2ZyZWUocmZzLT5uZXdfZnMpOworCQlyZnMtPm5ld19mcyA9IE5VTEw7CisJfQorCWlmIChyZnMtPml0YWJsZV9idWYpCisJCWV4dDJmc19mcmVlX21lbSgmcmZzLT5pdGFibGVfYnVmKTsKKwlleHQyZnNfZnJlZV9tZW0oJnJmcyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIENsZWFuIHVwIHRoZSBiaXRtYXBzIGZvciB1bml0aWFsaXplZCBiaXRtYXBzCisgKi8KK3N0YXRpYyB2b2lkIGZpeF91bmluaXRfYmxvY2tfYml0bWFwcyhleHQyX2ZpbHN5cyBmcykKK3sKKwlibGs2NF90CQlibGssIGxibGs7CisJZGdycF90CQlnOworCWludAkJaTsKKworCWlmICghKEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pKSkKKwkJcmV0dXJuOworCisJZm9yIChnPTA7IGcgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgZysrKSB7CisJCWlmICghKGV4dDJmc19iZ19mbGFnc190ZXN0KGZzLCBnLCBFWFQyX0JHX0JMT0NLX1VOSU5JVCkpKQorCQkJY29udGludWU7CisKKwkJYmxrID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywgZyk7CisJCWxibGsgPSBleHQyZnNfZ3JvdXBfbGFzdF9ibG9jazIoZnMsIGcpOworCQlleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIoZnMtPmJsb2NrX21hcCwgYmxrLAorCQkJCQkJICBsYmxrIC0gYmxrICsgMSk7CisKKwkJZXh0MmZzX3Jlc2VydmVfc3VwZXJfYW5kX2JnZChmcywgZywgZnMtPmJsb2NrX21hcCk7CisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoZnMtPmJsb2NrX21hcCwKKwkJCQkJICBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgZykpOworCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsCisJCQkJCSAgZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGcpKTsKKwkJZm9yIChpID0gMCwgYmxrID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgZyk7CisJCSAgICAgaSA8ICh1bnNpZ25lZCBpbnQpIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwOworCQkgICAgIGkrKywgYmxrKyspCisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsIGJsayk7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFJlc2l6ZSBwcm9jZXNzaW5nLCBwaGFzZSAxLgorICoKKyAqIEluIHRoaXMgcGhhc2Ugd2UgYWRqdXN0IHRoZSBpbi1tZW1vcnkgc3VwZXJibG9jayBpbmZvcm1hdGlvbiwgYW5kCisgKiBpbml0aWFsaXplIGFueSBuZXcgcGFydHMgb2YgdGhlIGlub2RlIHRhYmxlLiAgVGhlIG5ldyBwYXJ0cyBvZiB0aGUKKyAqIGlub2RlIHRhYmxlIGFyZSBjcmVhdGVkIGluIHZpcmdpbiBkaXNrIHNwYWNlLCBzbyB3ZSBjYW4gYWJvcnQgaGVyZQorICogd2l0aG91dCBhbnkgc2lkZSBlZmZlY3RzLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogSWYgdGhlIGdyb3VwIGRlc2NyaXB0b3IncyBiaXRtYXAgYW5kIGlub2RlIHRhYmxlIGJsb2NrcyBhcmUgdmFsaWQsCisgKiByZWxlYXNlIHRoZW0gaW4gdGhlIG5ldyBmaWxlc3lzdGVtIGRhdGEgc3RydWN0dXJlLCBhbmQgbWFyayB0aGVtIGFzCisgKiByZXNlcnZlZCBzbyB0aGUgb2xkIGlub2RlIHRhYmxlIGJsb2NrcyBkb24ndCBnZXQgb3ZlcndyaXR0ZW4uCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgZnJlZV9nZHBfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLAorCQkJCSBleHQyZnNfYmxvY2tfYml0bWFwIHJlc2VydmVfYmxvY2tzLAorCQkJCSBleHQyX2ZpbHN5cyBvbGRfZnMsCisJCQkJIGRncnBfdCBncm91cCkKK3sKKwlibGs2NF90CWJsazsKKwlpbnQJajsKKwlkZ3JwX3QJaTsKKwlleHQyZnNfYmxvY2tfYml0bWFwIGJnX21hcCA9IE5VTEw7CisJZXJyY29kZV90IHJldHZhbCA9IDA7CisJZGdycF90IGNvdW50ID0gb2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50IC0gZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisKKwkvKiBJZiBiaWdhbGxvYywgZG9uJ3QgZnJlZSBtZXRhZGF0YSBsaXZpbmcgaW4gdGhlIHNhbWUgY2x1c3RlciAqLworCWlmIChFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykgPiAxKSB7CisJCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9ibG9ja19iaXRtYXAoZnMsICJiZ2RhdGEiLCAmYmdfbWFwKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gb3V0OworCisJCXJldHZhbCA9IG1hcmtfdGFibGVfYmxvY2tzKGZzLCBiZ19tYXApOworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gZ3JvdXA7IGkgPCBncm91cCArIGNvdW50OyBpKyspIHsKKwkJYmxrID0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2Mob2xkX2ZzLCBpKTsKKwkJaWYgKGJsayAmJgorCQkgICAgKGJsayA8IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkgJiYKKwkJICAgICEoYmdfbWFwICYmIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoYmdfbWFwLCBibGspKSkgeworCQkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgYmxrLCAtMSk7CisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKHJlc2VydmVfYmxvY2tzLCBibGspOworCQl9CisKKwkJYmxrID0gZXh0MmZzX2lub2RlX2JpdG1hcF9sb2Mob2xkX2ZzLCBpKTsKKwkJaWYgKGJsayAmJgorCQkgICAgKGJsayA8IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkgJiYKKwkJICAgICEoYmdfbWFwICYmIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoYmdfbWFwLCBibGspKSkgeworCQkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgYmxrLCAtMSk7CisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKHJlc2VydmVfYmxvY2tzLCBibGspOworCQl9CisKKwkJYmxrID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhvbGRfZnMsIGkpOworCQlmb3IgKGogPSAwOworCQkgICAgIGogPCBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsgaisrLCBibGsrKykgeworCQkJaWYgKGJsayA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgfHwKKwkJCSAgICAoYmdfbWFwICYmIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoYmdfbWFwLCBibGspKSkKKwkJCQljb250aW51ZTsKKwkJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIGJsaywgLTEpOworCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihyZXNlcnZlX2Jsb2NrcywgYmxrKTsKKwkJfQorCX0KKworb3V0OgorCWlmIChiZ19tYXApCisJCWV4dDJmc19mcmVlX2Jsb2NrX2JpdG1hcChiZ19tYXApOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgc2hhcmVkIGJ5IHRoZSBvbmxpbmUgYW5kIG9mZmxpbmUgcmVzaXplIHJvdXRpbmVzLgorICogQWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3aGljaCBpcyBhZGp1c3RlZCBpbiBtZW1vcnkgaXMgZG9uZSBoZXJlLgorICovCitlcnJjb2RlX3QgYWRqdXN0X2ZzX2luZm8oZXh0Ml9maWxzeXMgZnMsIGV4dDJfZmlsc3lzIG9sZF9mcywKKwkJCSBleHQyZnNfYmxvY2tfYml0bWFwIHJlc2VydmVfYmxvY2tzLCBibGs2NF90IG5ld19zaXplKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrNjRfdAkJb3ZlcmhlYWQgPSAwOworCWJsazY0X3QJCXJlbTsKKwlibGs2NF90CQlibGssIGdyb3VwX2Jsb2NrOworCWJsazY0X3QJCXJlYWxfZW5kOworCWJsazY0X3QJCW9sZF9udW1ibG9ja3MsIG51bWJsb2NrcywgYWRqYmxvY2tzOworCXVuc2lnbmVkIGxvbmcJaSwgaiwgb2xkX2Rlc2NfYmxvY2tzOworCXVuc2lnbmVkIGludAltZXRhX2JnLCBtZXRhX2JnX3NpemU7CisJaW50CQloYXNfc3VwZXIsIGNzdW1fZmxhZzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbmV3X2lub2RlczsJLyogdTY0IHRvIGNoZWNrIGZvciBvdmVyZmxvdyAqLworCWRvdWJsZQkJcGVyY2VudDsKKworCWV4dDJmc19ibG9ja3NfY291bnRfc2V0KGZzLT5zdXBlciwgbmV3X3NpemUpOworCityZXRyeToKKwlmcy0+Z3JvdXBfZGVzY19jb3VudCA9IGV4dDJmc19kaXY2NF9jZWlsKGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtCisJCQkJICAgICAgIGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrLAorCQkJCSAgICAgICBFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKSk7CisJaWYgKGZzLT5ncm91cF9kZXNjX2NvdW50ID09IDApCisJCXJldHVybiBFWFQyX0VUX1RPT1NNQUxMOworCWZzLT5kZXNjX2Jsb2NrcyA9IGV4dDJmc19kaXZfY2VpbChmcy0+Z3JvdXBfZGVzY19jb3VudCwKKwkJCQkJICBFWFQyX0RFU0NfUEVSX0JMT0NLKGZzLT5zdXBlcikpOworCisJLyoKKwkgKiBPdmVyaGVhZCBpcyB0aGUgbnVtYmVyIG9mIGJvb2trZWVwaW5nIGJsb2NrcyBwZXIgZ3JvdXAuICBJdAorCSAqIGluY2x1ZGVzIHRoZSBzdXBlcmJsb2NrIGJhY2t1cCwgdGhlIGdyb3VwIGRlc2NyaXB0b3IKKwkgKiBiYWNrdXBzLCB0aGUgaW5vZGUgYml0bWFwLCB0aGUgYmxvY2sgYml0bWFwLCBhbmQgdGhlIGlub2RlCisJICogdGFibGUuCisJICovCisJb3ZlcmhlYWQgPSAoaW50KSAoMiArIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKTsKKworCWlmIChleHQyZnNfYmdfaGFzX3N1cGVyKGZzLCBmcy0+Z3JvdXBfZGVzY19jb3VudCAtIDEpKQorCQlvdmVyaGVhZCArPSAxICsgZnMtPmRlc2NfYmxvY2tzICsKKwkJCWZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzOworCisJLyoKKwkgKiBTZWUgaWYgdGhlIGxhc3QgZ3JvdXAgaXMgYmlnIGVub3VnaCB0byBzdXBwb3J0IHRoZQorCSAqIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHVyZXMuICBJZiBub3QsIHdlIG5lZWQgdG8gZ2V0IHJpZCBvZgorCSAqIGl0LgorCSAqLworCXJlbSA9IChleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgJQorCQlmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwlpZiAoKGZzLT5ncm91cF9kZXNjX2NvdW50ID09IDEpICYmIHJlbSAmJiAocmVtIDwgb3ZlcmhlYWQpKQorCQlyZXR1cm4gRVhUMl9FVF9UT09TTUFMTDsKKwlpZiAoKGZzLT5ncm91cF9kZXNjX2NvdW50ID4gMSkgJiYgcmVtICYmIChyZW0gPCBvdmVyaGVhZCs1MCkpIHsKKwkJZXh0MmZzX2Jsb2Nrc19jb3VudF9zZXQoZnMtPnN1cGVyLAorCQkJCQlleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLSByZW0pOworCQlnb3RvIHJldHJ5OworCX0KKwkvKgorCSAqIEFkanVzdCB0aGUgbnVtYmVyIG9mIGlub2RlcworCSAqLworCW5ld19pbm9kZXMgPSh1bnNpZ25lZCBsb25nIGxvbmcpIGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwICogZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJaWYgKG5ld19pbm9kZXMgPiB+MFUpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oImlub2RlcyAoJWxsdSkgbXVzdCBiZSBsZXNzIHRoYW4gJXUiKSwKKwkJCQkgICBuZXdfaW5vZGVzLCB+MFUpOworCQlyZXR1cm4gRVhUMl9FVF9UT09fTUFOWV9JTk9ERVM7CisJfQorCWZzLT5zdXBlci0+c19pbm9kZXNfY291bnQgPSBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCAqCisJCWZzLT5ncm91cF9kZXNjX2NvdW50OworCisJLyoKKwkgKiBBZGp1c3QgdGhlIG51bWJlciBvZiBmcmVlIGJsb2NrcworCSAqLworCWJsayA9IGV4dDJmc19ibG9ja3NfY291bnQob2xkX2ZzLT5zdXBlcik7CisJaWYgKGJsayA+IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkKKwkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcy0+c3VwZXIsIAorCQkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLQorCQkJKGJsayAtIGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkpOworCWVsc2UKKwkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcy0+c3VwZXIsIAorCQkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgKworCQkJKGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtIGJsaykpOworCisJLyoKKwkgKiBBZGp1c3QgdGhlIG51bWJlciBvZiByZXNlcnZlZCBibG9ja3MKKwkgKi8KKwlwZXJjZW50ID0gKGV4dDJmc19yX2Jsb2Nrc19jb3VudChvbGRfZnMtPnN1cGVyKSAqIDEwMC4wKSAvCisJCWV4dDJmc19ibG9ja3NfY291bnQob2xkX2ZzLT5zdXBlcik7CisJZXh0MmZzX3JfYmxvY2tzX2NvdW50X3NldChmcy0+c3VwZXIsCisJCQkJICAocGVyY2VudCAqIGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAvCisJCQkJICAgMTAwLjApKTsKKworCS8qCisJICogQWRqdXN0IHRoZSBiaXRtYXBzIGZvciBzaXplCisJICovCisJcmV0dmFsID0gZXh0MmZzX3Jlc2l6ZV9pbm9kZV9iaXRtYXAyKGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQsCisJCQkJCSAgICBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50LAorCQkJCQkgICAgZnMtPmlub2RlX21hcCk7CisJaWYgKHJldHZhbCkgZ290byBlcnJvdXQ7CisKKwlyZWFsX2VuZCA9IEVYVDJfR1JPVVBTX1RPX0JMT0NLUyhmcy0+c3VwZXIsIGZzLT5ncm91cF9kZXNjX2NvdW50KSAtIDEgKworCQlmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwlyZXR2YWwgPSBleHQyZnNfcmVzaXplX2Jsb2NrX2JpdG1hcDIobmV3X3NpemUgLSAxLAorCQkJCQkgICAgIHJlYWxfZW5kLCBmcy0+YmxvY2tfbWFwKTsKKwlpZiAocmV0dmFsKSBnb3RvIGVycm91dDsKKworCS8qCisJICogSWYgd2UgYXJlIGdyb3dpbmcgdGhlIGZpbGUgc3lzdGVtLCBhbHNvIGdyb3cgdGhlIHNpemUgb2YKKwkgKiB0aGUgcmVzZXJ2ZV9ibG9ja3MgYml0bWFwCisJICovCisJaWYgKHJlc2VydmVfYmxvY2tzICYmIG5ld19zaXplID4gZXh0MmZzX2Jsb2Nrc19jb3VudChvbGRfZnMtPnN1cGVyKSkgeworCQlyZXR2YWwgPSBleHQyZnNfcmVzaXplX2Jsb2NrX2JpdG1hcDIobmV3X3NpemUgLSAxLAorCQkJCQkJICAgICByZWFsX2VuZCwgcmVzZXJ2ZV9ibG9ja3MpOworCQlpZiAocmV0dmFsKSBnb3RvIGVycm91dDsKKwl9CisKKwkvKgorCSAqIFJlYWxsb2NhdGUgdGhlIGdyb3VwIGRlc2NyaXB0b3JzIGFzIG5lY2Vzc2FyeS4KKwkgKi8KKwlpZiAob2xkX2ZzLT5kZXNjX2Jsb2NrcyAhPSBmcy0+ZGVzY19ibG9ja3MpIHsKKwkJcmV0dmFsID0gZXh0MmZzX3Jlc2l6ZV9tZW0ob2xkX2ZzLT5kZXNjX2Jsb2NrcyAqCisJCQkJCSAgIGZzLT5ibG9ja3NpemUsCisJCQkJCSAgIGZzLT5kZXNjX2Jsb2NrcyAqIGZzLT5ibG9ja3NpemUsCisJCQkJCSAgICZmcy0+Z3JvdXBfZGVzYyk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwkJaWYgKGZzLT5kZXNjX2Jsb2NrcyA+IG9sZF9mcy0+ZGVzY19ibG9ja3MpCisJCQltZW1zZXQoKGNoYXIgKikgZnMtPmdyb3VwX2Rlc2MgKworCQkJICAgICAgIChvbGRfZnMtPmRlc2NfYmxvY2tzICogZnMtPmJsb2Nrc2l6ZSksIDAsCisJCQkgICAgICAgKGZzLT5kZXNjX2Jsb2NrcyAtIG9sZF9mcy0+ZGVzY19ibG9ja3MpICoKKwkJCSAgICAgICBmcy0+YmxvY2tzaXplKTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSByZXNpemVfaW5vZGUgZmVhdHVyZSBpcyBzZXQsIGFuZCB3ZSBhcmUgY2hhbmdpbmcgdGhlCisJICogbnVtYmVyIG9mIGRlc2NyaXB0b3IgYmxvY2tzLCB0aGVuIGFkanVzdAorCSAqIHNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyBpZiBwb3NzaWJsZSB0byBhdm9pZCBuZWVkaW5nIHRvIG1vdmUKKwkgKiB0aGUgaW5vZGUgdGFibGUgZWl0aGVyIG5vdyBvciBpbiB0aGUgZnV0dXJlLgorCSAqLworCWlmICgoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICYKKwkgICAgIEVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFKSAmJgorCSAgICAob2xkX2ZzLT5kZXNjX2Jsb2NrcyAhPSBmcy0+ZGVzY19ibG9ja3MpKSB7CisJCWludCBuZXc7CisKKwkJbmV3ID0gKChpbnQpIGZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzKSArCisJCQkob2xkX2ZzLT5kZXNjX2Jsb2NrcyAtIGZzLT5kZXNjX2Jsb2Nrcyk7CisJCWlmIChuZXcgPCAwKQorCQkJbmV3ID0gMDsKKwkJaWYgKG5ldyA+IChpbnQpIGZzLT5ibG9ja3NpemUvNCkKKwkJCW5ldyA9IGZzLT5ibG9ja3NpemUvNDsKKwkJZnMtPnN1cGVyLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3MgPSBuZXc7CisJfQorCisJaWYgKChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKSAmJgorCSAgICAoZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmcgPiBmcy0+ZGVzY19ibG9ja3MpKSB7CisJCWZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICY9CisJCQl+RVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkc7CisJCWZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnID0gMDsKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGJhY2t1cCBzdXBlcmJsb2NrcyBpZiB0aGUKKwkgKiBzcGFyc2Vfc3VwZXIyIGZlYXR1cmUgaXMgZW5hYmxlZC4KKwkgKi8KKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICYgRVhUNF9GRUFUVVJFX0NPTVBBVF9TUEFSU0VfU1VQRVIyKSB7CisJCWRncnBfdCBsYXN0X2JnID0gZnMtPmdyb3VwX2Rlc2NfY291bnQgLSAxOworCQlkZ3JwX3Qgb2xkX2xhc3RfYmcgPSBvbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQgLSAxOworCisJCWlmIChsYXN0X2JnID4gb2xkX2xhc3RfYmcpIHsKKwkJCWlmIChvbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQgPT0gMSkKKwkJCQlmcy0+c3VwZXItPnNfYmFja3VwX2Jnc1swXSA9IDE7CisJCQlpZiAob2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50ID09IDEgJiYKKwkJCSAgICBmcy0+c3VwZXItPnNfYmFja3VwX2Jnc1swXSkKKwkJCQlmcy0+c3VwZXItPnNfYmFja3VwX2Jnc1swXSA9IGxhc3RfYmc7CisJCQllbHNlIGlmIChmcy0+c3VwZXItPnNfYmFja3VwX2Jnc1sxXSkKKwkJCQlmcy0+c3VwZXItPnNfYmFja3VwX2Jnc1sxXSA9IGxhc3RfYmc7CisJCX0gZWxzZSBpZiAobGFzdF9iZyA8IG9sZF9sYXN0X2JnKSB7CisJCQlpZiAoZnMtPnN1cGVyLT5zX2JhY2t1cF9iZ3NbMF0gPiBsYXN0X2JnKQorCQkJCWZzLT5zdXBlci0+c19iYWNrdXBfYmdzWzBdID0gMDsKKwkJCWlmIChmcy0+c3VwZXItPnNfYmFja3VwX2Jnc1sxXSA+IGxhc3RfYmcpCisJCQkJZnMtPnN1cGVyLT5zX2JhY2t1cF9iZ3NbMV0gPSAwOworCQkJaWYgKGxhc3RfYmcgPiAxICYmCisJCQkgICAgb2xkX2ZzLT5zdXBlci0+c19iYWNrdXBfYmdzWzFdID09IG9sZF9sYXN0X2JnKQorCQkJCWZzLT5zdXBlci0+c19iYWNrdXBfYmdzWzFdID0gbGFzdF9iZzsKKwkJfQorCX0KKworCS8qCisJICogSWYgd2UgYXJlIHNocmlua2luZyB0aGUgbnVtYmVyIG9mIGJsb2NrIGdyb3Vwcywgd2UncmUgZG9uZQorCSAqIGFuZCBjYW4gZXhpdCBub3cuCisJICovCisJaWYgKG9sZF9mcy0+Z3JvdXBfZGVzY19jb3VudCA+IGZzLT5ncm91cF9kZXNjX2NvdW50KSB7CisJCS8qCisJCSAqIENoZWNrIHRoZSBibG9jayBncm91cHMgdGhhdCB3ZSBhcmUgY2hvcHBpbmcgb2ZmCisJCSAqIGFuZCBmcmVlIGFueSBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIHRoZWlyIG1ldGFkYXRhCisJCSAqLworCQlyZXR2YWwgPSBmcmVlX2dkcF9ibG9ja3MoZnMsIHJlc2VydmVfYmxvY2tzLCBvbGRfZnMsCisJCQkJCSBmcy0+Z3JvdXBfZGVzY19jb3VudCk7CisJCWdvdG8gZXJyb3V0OworCX0KKworCS8qCisJICogRml4IHRoZSBjb3VudCBvZiB0aGUgbGFzdCAob2xkKSBibG9jayBncm91cAorCSAqLworCW9sZF9udW1ibG9ja3MgPSAoZXh0MmZzX2Jsb2Nrc19jb3VudChvbGRfZnMtPnN1cGVyKSAtCisJCQkgb2xkX2ZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSAlCisJCQkJIG9sZF9mcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwlpZiAoIW9sZF9udW1ibG9ja3MpCisJCW9sZF9udW1ibG9ja3MgPSBvbGRfZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJaWYgKG9sZF9mcy0+Z3JvdXBfZGVzY19jb3VudCA9PSBmcy0+Z3JvdXBfZGVzY19jb3VudCkgeworCQludW1ibG9ja3MgPSAoZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpIC0KKwkJCSAgICAgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spICUKKwkJCWZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwOworCQlpZiAoIW51bWJsb2NrcykKKwkJCW51bWJsb2NrcyA9IGZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwOworCX0gZWxzZQorCQludW1ibG9ja3MgPSBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwlpID0gb2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50IC0gMTsKKwlleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLCBpLCBleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnQoZnMsIGkpICsgKG51bWJsb2NrcyAtIG9sZF9udW1ibG9ja3MpKTsKKwlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgaSk7CisKKwkvKgorCSAqIElmIHRoZSBudW1iZXIgb2YgYmxvY2sgZ3JvdXBzIGlzIHN0YXlpbmcgdGhlIHNhbWUsIHdlJ3JlCisJICogZG9uZSBhbmQgY2FuIGV4aXQgbm93LiAgKElmIHRoZSBudW1iZXIgYmxvY2sgZ3JvdXBzIGlzCisJICogc2hyaW5raW5nLCB3ZSBoYWQgZXhpdGVkIGVhcmxpZXIuKQorCSAqLworCWlmIChvbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQgPj0gZnMtPmdyb3VwX2Rlc2NfY291bnQpIHsKKwkJcmV0dmFsID0gMDsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBuZXcgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMKKwkgKi8KKwlncm91cF9ibG9jayA9IGV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZnMsCisJCQkJCQlvbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQpOworCWNzdW1fZmxhZyA9IEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pOworCWlmIChhY2Nlc3MoIi9zeXMvZnMvZXh0NC9mZWF0dXJlcy9sYXp5X2l0YWJsZV9pbml0IiwgRl9PSykgPT0gMCkKKwkJbGF6eV9pdGFibGVfaW5pdCA9IDE7CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworCWVsc2UKKwkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPmRlc2NfYmxvY2tzICsKKwkJCWZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzOworCisJLyoKKwkgKiBJZiB3ZSBjaGFuZ2VkIHRoZSBudW1iZXIgb2YgYmxvY2tfZ3JvdXAgZGVzY3JpcHRvciBibG9ja3MsCisJICogd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhleSBhcmUgYWxsIG1hcmtlZCBhcyByZXNlcnZlZCBpbiB0aGUKKwkgKiBmaWxlIHN5c3RlbXMncyBibG9jayBhbGxvY2F0aW9uIG1hcC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgb2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspCisJCWV4dDJmc19yZXNlcnZlX3N1cGVyX2FuZF9iZ2QoZnMsIGksIGZzLT5ibG9ja19tYXApOworCisJZm9yIChpID0gb2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50OworCSAgICAgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJbWVtc2V0KGV4dDJmc19ncm91cF9kZXNjKGZzLCBmcy0+Z3JvdXBfZGVzYywgaSksIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYykpOworCQlhZGpibG9ja3MgPSAwOworCisJCWV4dDJmc19iZ19mbGFnc196YXAoZnMsIGkpOworCQlpZiAoY3N1bV9mbGFnKSB7CisJCQlleHQyZnNfYmdfZmxhZ3Nfc2V0KGZzLCBpLCBFWFQyX0JHX0lOT0RFX1VOSU5JVCk7CisJCQlpZiAoIWxhenlfaXRhYmxlX2luaXQpCisJCQkJZXh0MmZzX2JnX2ZsYWdzX3NldChmcywgaSwKKwkJCQkJCSAgICBFWFQyX0JHX0lOT0RFX1pFUk9FRCk7CisJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZF9zZXQoZnMsIGksCisJCQkJCWZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwKTsKKwkJfQorCisJCW51bWJsb2NrcyA9IGV4dDJmc19ncm91cF9ibG9ja3NfY291bnQoZnMsIGkpOworCQlpZiAoKGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudCAtIDEpICYmIGNzdW1fZmxhZykKKwkJCWV4dDJmc19iZ19mbGFnc19zZXQoZnMsIGksIEVYVDJfQkdfQkxPQ0tfVU5JTklUKTsKKworCQloYXNfc3VwZXIgPSBleHQyZnNfYmdfaGFzX3N1cGVyKGZzLCBpKTsKKwkJaWYgKGhhc19zdXBlcikgeworCQkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgZ3JvdXBfYmxvY2ssICsxKTsKKwkJCWFkamJsb2NrcysrOworCQl9CisJCW1ldGFfYmdfc2l6ZSA9IEVYVDJfREVTQ19QRVJfQkxPQ0soZnMtPnN1cGVyKTsKKwkJbWV0YV9iZyA9IGkgLyBtZXRhX2JnX3NpemU7CisJCWlmICghKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkJICAgICAgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpIHx8CisJCSAgICAobWV0YV9iZyA8IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnKSkgeworCQkJaWYgKGhhc19zdXBlcikgeworCQkJCWZvciAoaj0wOyBqIDwgb2xkX2Rlc2NfYmxvY2tzOyBqKyspCisJCQkJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsCisJCQkJCQkgZ3JvdXBfYmxvY2sgKyAxICsgaiwgKzEpOworCQkJCWFkamJsb2NrcyArPSBvbGRfZGVzY19ibG9ja3M7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoaGFzX3N1cGVyKQorCQkJCWhhc19zdXBlciA9IDE7CisJCQlpZiAoKChpICUgbWV0YV9iZ19zaXplKSA9PSAwKSB8fAorCQkJICAgICgoaSAlIG1ldGFfYmdfc2l6ZSkgPT0gMSkgfHwKKwkJCSAgICAoKGkgJSBtZXRhX2JnX3NpemUpID09IChtZXRhX2JnX3NpemUtMSkpKQorCQkJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsCisJCQkJCQkgZ3JvdXBfYmxvY2sgKyBoYXNfc3VwZXIsICsxKTsKKwkJfQorCisJCWFkamJsb2NrcyArPSAyICsgZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisKKwkJbnVtYmxvY2tzIC09IGFkamJsb2NrczsKKwkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcy0+c3VwZXIsCisJCQkgICAgIGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpIC0gYWRqYmxvY2tzKTsKKwkJZnMtPnN1cGVyLT5zX2ZyZWVfaW5vZGVzX2NvdW50ICs9CisJCQlmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cDsKKwkJZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcywgaSwgbnVtYmxvY2tzKTsKKwkJZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50X3NldChmcywgaSwKKwkJCQkJCWZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwKTsKKwkJZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudF9zZXQoZnMsIGksIDApOworCQlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgaSk7CisKKwkJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2dyb3VwX3RhYmxlKGZzLCBpLCAwKTsKKwkJaWYgKHJldHZhbCkgZ290byBlcnJvdXQ7CisKKwkJZ3JvdXBfYmxvY2sgKz0gZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJfQorCXJldHZhbCA9IDA7CisKKwkvKgorCSAqIE1hcmsgYWxsIG9mIHRoZSBtZXRhZGF0YSBibG9ja3MgYXMgcmVzZXJ2ZWQgc28gdGhleSB3b24ndAorCSAqIGdldCBhbGxvY2F0ZWQgYnkgdGhlIGNhbGwgdG8gZXh0MmZzX2FsbG9jYXRlX2dyb3VwX3RhYmxlKCkKKwkgKiBpbiBibG9ja3NfdG9fbW92ZSgpLCB3aGVyZSB3ZSBhbGxvY2F0ZSBuZXcgYmxvY2tzIHRvCisJICogcmVwbGFjZSB0aG9zZSBhbGxvY2F0aW9uIGJpdG1hcCBhbmQgaW5vZGUgdGFibGUgYmxvY2tzCisJICogd2hpY2ggaGF2ZSB0byBnZXQgcmVsb2NhdGVkIHRvIG1ha2Ugc3BhY2UgZm9yIGFuIGluY3JlYXNlZAorCSAqIG51bWJlciBvZiB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMuCisJICovCisJaWYgKHJlc2VydmVfYmxvY2tzKQorCQltYXJrX3RhYmxlX2Jsb2NrcyhmcywgcmVzZXJ2ZV9ibG9ja3MpOworCitlcnJvdXQ6CisJcmV0dXJuIChyZXR2YWwpOworfQorCisvKgorICogVGhpcyByb3V0aW5lIGFkanVzdHMgdGhlIHN1cGVyYmxvY2sgYW5kIG90aGVyIGRhdGEgc3RydWN0dXJlcywgYm90aAorICogaW4gZGlzayBhcyB3ZWxsIGFzIGluIG1lbW9yeS4uLgorICovCitzdGF0aWMgZXJyY29kZV90IGFkanVzdF9zdXBlcmJsb2NrKGV4dDJfcmVzaXplX3QgcmZzLCBibGs2NF90IG5ld19zaXplKQoreworCWV4dDJfZmlsc3lzCWZzID0gcmZzLT5uZXdfZnM7CisJaW50CQlhZGogPSAwOworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrNjRfdAkJZ3JvdXBfYmxvY2s7CisJdW5zaWduZWQgbG9uZwlpOworCXVuc2lnbmVkIGxvbmcJbWF4X2dyb3VwOworCisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCWV4dDJmc19tYXJrX2JiX2RpcnR5KGZzKTsKKwlleHQyZnNfbWFya19pYl9kaXJ0eShmcyk7CisKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfYmxvY2tfYml0bWFwKGZzLCBfKCJyZXNlcnZlZCBibG9ja3MiKSwKKwkJCQkJICAgICAgJnJmcy0+cmVzZXJ2ZV9ibG9ja3MpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBhZGp1c3RfZnNfaW5mbyhmcywgcmZzLT5vbGRfZnMsIHJmcy0+cmVzZXJ2ZV9ibG9ja3MsIG5ld19zaXplKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCS8qCisJICogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBlbm91Z2ggaW5vZGVzCisJICovCisJaWYgKChyZnMtPm9sZF9mcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50IC0KKwkgICAgIHJmcy0+b2xkX2ZzLT5zdXBlci0+c19mcmVlX2lub2Rlc19jb3VudCkgPgorCSAgICByZnMtPm5ld19mcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KSB7CisJCXJldHZhbCA9IEVOT1NQQzsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBhcmUgc2hyaW5raW5nIHRoZSBudW1iZXIgYmxvY2sgZ3JvdXBzLCB3ZSdyZSBkb25lIGFuZAorCSAqIGNhbiBleGl0IG5vdy4KKwkgKi8KKwlpZiAocmZzLT5vbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQgPiBmcy0+Z3JvdXBfZGVzY19jb3VudCkgeworCQlyZXR2YWwgPSAwOworCQlnb3RvIGVycm91dDsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBudW1iZXIgb2YgYmxvY2sgZ3JvdXBzIGlzIHN0YXlpbmcgdGhlIHNhbWUsIHdlJ3JlCisJICogZG9uZSBhbmQgY2FuIGV4aXQgbm93LiAgKElmIHRoZSBudW1iZXIgYmxvY2sgZ3JvdXBzIGlzCisJICogc2hyaW5raW5nLCB3ZSBoYWQgZXhpdGVkIGVhcmxpZXIuKQorCSAqLworCWlmIChyZnMtPm9sZF9mcy0+Z3JvdXBfZGVzY19jb3VudCA+PSBmcy0+Z3JvdXBfZGVzY19jb3VudCkgeworCQlyZXR2YWwgPSAwOworCQlnb3RvIGVycm91dDsKKwl9CisKKwkvKgorCSAqIElmIHdlIGFyZSB1c2luZyB1bmluaXRfYmcgKGFrYSBHRFRfQ1NVTSkgYW5kIHRoZSBrZXJuZWwKKwkgKiBzdXBwb3J0cyBsYXp5IGlub2RlIGluaXRpYWxpemF0aW9uLCB3ZSBjYW4gc2tpcAorCSAqIGluaXRpYWxpemluZyB0aGUgaW5vZGUgdGFibGUuCisJICovCisJaWYgKGxhenlfaXRhYmxlX2luaXQgJiYKKwkgICAgRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSkgeworCQlyZXR2YWwgPSAwOworCQlnb3RvIGVycm91dDsKKwl9CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGlub2RlIHRhYmxlCisJICovCisJcmV0dmFsID0gZXh0MmZzX2dldF9hcnJheShmcy0+YmxvY2tzaXplLCBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCwKKwkJCQkmcmZzLT5pdGFibGVfYnVmKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCW1lbXNldChyZnMtPml0YWJsZV9idWYsIDAsIGZzLT5ibG9ja3NpemUgKiBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCk7CisJZ3JvdXBfYmxvY2sgPSBleHQyZnNfZ3JvdXBfZmlyc3RfYmxvY2syKGZzLAorCQkJCQkJcmZzLT5vbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQpOworCWFkaiA9IHJmcy0+b2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50OworCW1heF9ncm91cCA9IGZzLT5ncm91cF9kZXNjX2NvdW50IC0gYWRqOworCWlmIChyZnMtPnByb2dyZXNzKSB7CisJCXJldHZhbCA9IHJmcy0+cHJvZ3Jlc3MocmZzLCBFMl9SU1pfRVhURU5EX0lUQUJMRV9QQVNTLAorCQkJCSAgICAgICAwLCBtYXhfZ3JvdXApOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJfQorCWZvciAoaSA9IHJmcy0+b2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50OworCSAgICAgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJLyoKKwkJICogV3JpdGUgb3V0IHRoZSBuZXcgaW5vZGUgdGFibGUKKwkJICovCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLAorCQkJCQkJZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSksCisJCQkJCQlmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCwKKwkJCQkJCXJmcy0+aXRhYmxlX2J1Zik7CisJCWlmIChyZXR2YWwpIGdvdG8gZXJyb3V0OworCisJCWlvX2NoYW5uZWxfZmx1c2goZnMtPmlvKTsKKwkJaWYgKHJmcy0+cHJvZ3Jlc3MpIHsKKwkJCXJldHZhbCA9IHJmcy0+cHJvZ3Jlc3MocmZzLCBFMl9SU1pfRVhURU5EX0lUQUJMRV9QQVNTLAorCQkJCQkgICAgICAgaSAtIGFkaiArIDEsIG1heF9ncm91cCk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZXJyb3V0OworCQl9CisJCWdyb3VwX2Jsb2NrICs9IGZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwOworCX0KKwlpb19jaGFubmVsX2ZsdXNoKGZzLT5pbyk7CisJcmV0dmFsID0gMDsKKworZXJyb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogUmVzaXplIHByb2Nlc3NpbmcsIHBoYXNlIDIuCisgKgorICogSW4gdGhpcyBwaGFzZSB3ZSBhZGp1c3QgZGV0ZXJtaW5lIHdoaWNoIGJsb2NrcyBuZWVkIHRvIGJlIG1vdmVkLCBpbgorICogYmxvY2tzX3RvX21vdmUoKS4gIFdlIHRoZW4gY29weSB0aGUgYmxvY2tzIHRvIHRoZWlyIHVsdGltYXRlIG5ldworICogZGVzdGluYXRpb25zIHVzaW5nIGJsb2NrX21vdmVyKCkuICBTaW5jZSB3ZSBhcmUgY29weWluZyBibG9ja3MgdG8KKyAqIHRoZWlyIG5ldyBsb2NhdGlvbnMsIGFnYWluIGR1cmluZyB0aGlzIHBhc3Mgd2UgY2FuIGFib3J0IHdpdGhvdXQKKyAqIGFueSBwcm9ibGVtcy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGNyZWF0ZXMgYSBibG9jayBiaXRtYXAgd2l0aCBhbGwgb2YgdGhlCisgKiBmaWxlc3lzdGVtIG1ldGEtZGF0YSBibG9ja3MuCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgbWFya190YWJsZV9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwKQoreworCWRncnBfdAkJCWk7CisJYmxrNjRfdAkJCWJsazsKKworCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCWV4dDJmc19yZXNlcnZlX3N1cGVyX2FuZF9iZ2QoZnMsIGksIGJtYXApOworCisJCS8qCisJCSAqIE1hcmsgdGhlIGJsb2NrcyB1c2VkIGZvciB0aGUgaW5vZGUgdGFibGUKKwkJICovCisJCWJsayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpOworCQlpZiAoYmxrKQorCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwX3JhbmdlMihibWFwLCBibGssCisJCQkJCQlmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCk7CisKKwkJLyoKKwkJICogTWFyayBibG9jayB1c2VkIGZvciB0aGUgYmxvY2sgYml0bWFwCisJCSAqLworCQlibGsgPSBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgaSk7CisJCWlmIChibGspCisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGJtYXAsIGJsayk7CisKKwkJLyoKKwkJICogTWFyayBibG9jayB1c2VkIGZvciB0aGUgaW5vZGUgYml0bWFwCisJCSAqLworCQlibGsgPSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSk7CisJCWlmIChibGspCisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGJtYXAsIGJsayk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdG8gc2VlIGlmIGEgcGFydGljdWxhciBibG9jayAoZWl0aGVyIGEKKyAqIHN1cGVyYmxvY2sgb3IgYSBibG9jayBncm91cCBkZXNjcmlwdG9yKSBvdmVybGFwcyB3aXRoIGFuIGlub2RlIG9yCisgKiBibG9jayBiaXRtYXAgYmxvY2ssIG9yIHdpdGggdGhlIGlub2RlIHRhYmxlLgorICovCitzdGF0aWMgdm9pZCBtYXJrX2ZzX21ldGFibG9jayhleHQyX3Jlc2l6ZV90IHJmcywKKwkJCSAgICAgIGV4dDJmc19ibG9ja19iaXRtYXAgbWV0YV9ibWFwLAorCQkJICAgICAgaW50IGdyb3VwLCBibGs2NF90IGJsaykKK3sKKwlleHQyX2ZpbHN5cyAJZnMgPSByZnMtPm5ld19mczsKKworCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIocmZzLT5yZXNlcnZlX2Jsb2NrcywgYmxrKTsKKwlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBibGssICsxKTsKKworCS8qCisJICogQ2hlY2sgdG8gc2VlIGlmIHdlIG92ZXJsYXAgd2l0aCB0aGUgaW5vZGUgb3IgYmxvY2sgYml0bWFwLAorCSAqIG9yIHRoZSBpbm9kZSB0YWJsZXMuICBJZiBub3QsIGFuZCB0aGUgYmxvY2sgaXMgaW4gdXNlLCB0aGVuCisJICogbWFyayBpdCBhcyBhIGJsb2NrIHRvIGJlIG1vdmVkLgorCSAqLworCWlmIChJU19CTE9DS19CTShmcywgZ3JvdXAsIGJsaykpIHsKKwkJZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2Nfc2V0KGZzLCBncm91cCwgMCk7CisJCXJmcy0+bmVlZGVkX2Jsb2NrcysrOworCQlyZXR1cm47CisJfQorCWlmIChJU19JTk9ERV9CTShmcywgZ3JvdXAsIGJsaykpIHsKKwkJZXh0MmZzX2lub2RlX2JpdG1hcF9sb2Nfc2V0KGZzLCBncm91cCwgMCk7CisJCXJmcy0+bmVlZGVkX2Jsb2NrcysrOworCQlyZXR1cm47CisJfQorCWlmIChJU19JTk9ERV9UQihmcywgZ3JvdXAsIGJsaykpIHsKKwkJZXh0MmZzX2lub2RlX3RhYmxlX2xvY19zZXQoZnMsIGdyb3VwLCAwKTsKKwkJcmZzLT5uZWVkZWRfYmxvY2tzKys7CisJCXJldHVybjsKKwl9CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcpIHsKKwkJZGdycF90IGk7CisKKwkJZm9yIChpPTA7IGkgPCByZnMtPm9sZF9mcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCQlpZiAoSVNfQkxPQ0tfQk0oZnMsIGksIGJsaykpIHsKKwkJCQlleHQyZnNfYmxvY2tfYml0bWFwX2xvY19zZXQoZnMsIGksIDApOworCQkJCXJmcy0+bmVlZGVkX2Jsb2NrcysrOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWlmIChJU19JTk9ERV9CTShmcywgaSwgYmxrKSkgeworCQkJCWV4dDJmc19pbm9kZV9iaXRtYXBfbG9jX3NldChmcywgaSwgMCk7CisJCQkJcmZzLT5uZWVkZWRfYmxvY2tzKys7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaWYgKElTX0lOT0RFX1RCKGZzLCBpLCBibGspKSB7CisJCQkJZXh0MmZzX2lub2RlX3RhYmxlX2xvY19zZXQoZnMsIGksIDApOworCQkJCXJmcy0+bmVlZGVkX2Jsb2NrcysrOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCX0KKwlpZiAoRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSAmJgorCQkgICAoZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGdyb3VwLCBFWFQyX0JHX0JMT0NLX1VOSU5JVCkpKSB7CisJCS8qCisJCSAqIElmIHRoZSBibG9jayBiaXRtYXAgaXMgdW5pbml0aWFsaXplZCwgd2hpY2ggbWVhbnMKKwkJICogbm90aGluZyBvdGhlciB0aGFuIHN0YW5kYXJkIG1ldGFkYXRhIGluIHVzZS4KKwkJICovCisJCXJldHVybjsKKwl9IGVsc2UgaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIocmZzLT5vbGRfZnMtPmJsb2NrX21hcCwgYmxrKSAmJgorCQkgICAhZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihtZXRhX2JtYXAsIGJsaykpIHsKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihyZnMtPm1vdmVfYmxvY2tzLCBibGspOworCQlyZnMtPm5lZWRlZF9ibG9ja3MrKzsKKwl9Cit9CisKKworLyoKKyAqIFRoaXMgcm91dGluZSBtYXJrcyBhbmQgdW5tYXJrcyByZXNlcnZlZCBibG9ja3MgaW4gdGhlIG5ldyBibG9jaworICogYml0bWFwLiAgSXQgYWxzbyBkZXRlcm1pbmVzIHdoaWNoIGJsb2NrcyBuZWVkIHRvIGJlIG1vdmVkIGFuZAorICogcGxhY2VzIHRoaXMgaW5mb3JtYXRpb24gaW50byB0aGUgbW92ZV9ibG9ja3MgYml0bWFwLgorICovCitzdGF0aWMgZXJyY29kZV90IGJsb2Nrc190b19tb3ZlKGV4dDJfcmVzaXplX3QgcmZzKQoreworCWludAkJaiwgaGFzX3N1cGVyOworCWRncnBfdAkJaSwgbWF4X2dyb3VwcywgZzsKKwlibGs2NF90CQlibGssIGdyb3VwX2JsazsKKwlibGs2NF90CQlvbGRfYmxvY2tzLCBuZXdfYmxvY2tzLCBncm91cF9lbmQsIGNsdXN0ZXJfZnJlZWQ7CisJYmxrNjRfdAkJbmV3X3NpemU7CisJdW5zaWduZWQgaW50CW1ldGFfYmcsIG1ldGFfYmdfc2l6ZTsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfZmlsc3lzIAlmcywgb2xkX2ZzOworCWV4dDJmc19ibG9ja19iaXRtYXAJbWV0YV9ibWFwLCBuZXdfbWV0YV9ibWFwID0gTlVMTDsKKwlpbnQJCWZsZXhfYmc7CisKKwlmcyA9IHJmcy0+bmV3X2ZzOworCW9sZF9mcyA9IHJmcy0+b2xkX2ZzOworCWlmIChleHQyZnNfYmxvY2tzX2NvdW50KG9sZF9mcy0+c3VwZXIpID4gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKQorCQlmcyA9IHJmcy0+b2xkX2ZzOworCisJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcChmcywgXygiYmxvY2tzIHRvIGJlIG1vdmVkIiksCisJCQkJCSAgICAgICZyZnMtPm1vdmVfYmxvY2tzKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcChmcywgXygibWV0YS1kYXRhIGJsb2NrcyIpLAorCQkJCQkgICAgICAmbWV0YV9ibWFwKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gbWFya190YWJsZV9ibG9ja3Mob2xkX2ZzLCBtZXRhX2JtYXApOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlmcyA9IHJmcy0+bmV3X2ZzOworCisJLyoKKwkgKiBJZiB3ZSdyZSBzaHJpbmtpbmcgdGhlIGZpbGVzeXN0ZW0sIHdlIG5lZWQgdG8gbW92ZSBhbnkKKwkgKiBncm91cCdzIG1ldGFkYXRhIGJsb2NrcyAoZWl0aGVyIGFsbG9jYXRpb24gYml0bWFwcyBvciB0aGUKKwkgKiBpbm9kZSB0YWJsZSkgd2hpY2ggYXJlIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBuZXcKKwkgKiBmaWxlc3lzdGVtLgorCSAqLworCW5ld19zaXplID0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCWlmIChuZXdfc2l6ZSA8IGV4dDJmc19ibG9ja3NfY291bnQob2xkX2ZzLT5zdXBlcikpIHsKKwkJZm9yIChnID0gMDsgZyA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBnKyspIHsKKwkJCWludCByZWFsbG9jID0gMDsKKwkJCS8qCisJCQkgKiBleHQyZnNfYWxsb2NhdGVfZ3JvdXBfdGFibGUgd2lsbCByZS1hbGxvY2F0ZSBhbnkKKwkJCSAqIG1ldGFkYXRhIGJsb2NrcyB3aG9zZSBsb2NhdGlvbiBpcyBzZXQgdG8gemVyby4KKwkJCSAqLworCQkJaWYgKGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBnKSA+PSBuZXdfc2l6ZSkgeworCQkJCWV4dDJmc19ibG9ja19iaXRtYXBfbG9jX3NldChmcywgZywgMCk7CisJCQkJcmVhbGxvYyA9IDE7CisJCQl9CisJCQlpZiAoZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGcpID49IG5ld19zaXplKSB7CisJCQkJZXh0MmZzX2lub2RlX2JpdG1hcF9sb2Nfc2V0KGZzLCBnLCAwKTsKKwkJCQlyZWFsbG9jID0gMTsKKwkJCX0KKwkJCWlmICgoZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgZykgKworCQkJICAgICBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCkgPiBuZXdfc2l6ZSkgeworCQkJCWV4dDJmc19pbm9kZV90YWJsZV9sb2Nfc2V0KGZzLCBnLCAwKTsKKwkJCQlyZWFsbG9jID0gMTsKKwkJCX0KKworCQkJaWYgKHJlYWxsb2MpIHsKKwkJCQlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfZ3JvdXBfdGFibGUoZnMsIGcsIDApOworCQkJCWlmIChyZXR2YWwpCisJCQkJCXJldHVybiByZXR2YWw7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHdlJ3JlIHNocmlua2luZyB0aGUgZmlsZXN5c3RlbSwgd2UgbmVlZCB0byBtb3ZlIGFsbCBvZgorCSAqIHRoZSBibG9ja3MgdGhhdCBkb24ndCBmaXQgYW55IG1vcmUKKwkgKi8KKwlmb3IgKGJsayA9IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsKKwkgICAgIGJsayA8IGV4dDJmc19ibG9ja3NfY291bnQob2xkX2ZzLT5zdXBlcik7IGJsaysrKSB7CisJCWcgPSBleHQyZnNfZ3JvdXBfb2ZfYmxrMihmcywgYmxrKTsKKwkJaWYgKEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pICYmCisJCSAgICBleHQyZnNfYmdfZmxhZ3NfdGVzdChvbGRfZnMsIGcsIEVYVDJfQkdfQkxPQ0tfVU5JTklUKSkgeworCQkJLyoKKwkJCSAqIFRoZSBibG9jayBiaXRtYXAgaXMgdW5pbml0aWFsaXplZCwgc28gc2tpcAorCQkJICogdG8gdGhlIG5leHQgYmxvY2sgZ3JvdXAuCisJCQkgKi8KKwkJCWJsayA9IGV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZnMsIGcrMSkgLSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIob2xkX2ZzLT5ibG9ja19tYXAsIGJsaykgJiYKKwkJICAgICFleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKG1ldGFfYm1hcCwgYmxrKSkgeworCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihyZnMtPm1vdmVfYmxvY2tzLCBibGspOworCQkJcmZzLT5uZWVkZWRfYmxvY2tzKys7CisJCX0KKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihyZnMtPnJlc2VydmVfYmxvY2tzLCBibGspOworCX0KKworCWlmIChvbGRfZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykKKwkJb2xkX2Jsb2NrcyA9IG9sZF9mcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKwllbHNlCisJCW9sZF9ibG9ja3MgPSBvbGRfZnMtPmRlc2NfYmxvY2tzICsKKwkJCW9sZF9mcy0+c3VwZXItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrczsKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykKKwkJbmV3X2Jsb2NrcyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworCWVsc2UKKwkJbmV3X2Jsb2NrcyA9IGZzLT5kZXNjX2Jsb2NrcyArIGZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzOworCisJcmV0dmFsID0gcmVzZXJ2ZV9zcGFyc2Vfc3VwZXIyX2xhc3RfZ3JvdXAocmZzLCBtZXRhX2JtYXApOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCisJaWYgKG9sZF9ibG9ja3MgPT0gbmV3X2Jsb2NrcykgeworCQlyZXR2YWwgPSAwOworCQlnb3RvIGVycm91dDsKKwl9CisKKwltYXhfZ3JvdXBzID0gZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJaWYgKG1heF9ncm91cHMgPiBvbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQpCisJCW1heF9ncm91cHMgPSBvbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJZ3JvdXBfYmxrID0gb2xkX2ZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCS8qCisJICogSWYgd2UncmUgcmVkdWNpbmcgdGhlIG51bWJlciBvZiBkZXNjcmlwdG9yIGJsb2NrcywgdGhpcworCSAqIG1ha2VzIGxpZmUgZWFzeS4gIDotKSAgIFdlIGp1c3QgaGF2ZSB0byBtYXJrIHNvbWUgZXh0cmEKKwkgKiBibG9ja3MgYXMgZnJlZS4KKwkgKi8KKwlpZiAob2xkX2Jsb2NrcyA+IG5ld19ibG9ja3MpIHsKKwkJaWYgKEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKSA+IDEpIHsKKwkJCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9ibG9ja19iaXRtYXAoZnMsCisJCQkJCQkJXygibmV3IG1ldGEgYmxvY2tzIiksCisJCQkJCQkJJm5ld19tZXRhX2JtYXApOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycm91dDsKKworCQkJcmV0dmFsID0gbWFya190YWJsZV9ibG9ja3MoZnMsIG5ld19tZXRhX2JtYXApOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycm91dDsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBtYXhfZ3JvdXBzOyBpKyspIHsKKwkJCWlmICghZXh0MmZzX2JnX2hhc19zdXBlcihmcywgaSkpIHsKKwkJCQlncm91cF9ibGsgKz0gZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCQkJY29udGludWU7CisJCQl9CisJCQlncm91cF9lbmQgPSBncm91cF9ibGsgKyAxICsgb2xkX2Jsb2NrczsKKwkJCWZvciAoYmxrID0gZ3JvdXBfYmxrICsgMSArIG5ld19ibG9ja3M7CisJCQkgICAgIGJsayA8IGdyb3VwX2VuZDspIHsKKwkJCQlpZiAobmV3X21ldGFfYm1hcCA9PSBOVUxMIHx8CisJCQkJICAgICFleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKG5ld19tZXRhX2JtYXAsCisJCQkJCQkJICAgICAgIGJsaykpIHsKKwkJCQkJY2x1c3Rlcl9mcmVlZCA9CisJCQkJCQlFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykgLQorCQkJCQkJKGJsayAmCisJCQkJCQkgRVhUMkZTX0NMVVNURVJfTUFTSyhmcykpOworCQkJCQlpZiAoY2x1c3Rlcl9mcmVlZCA+IGdyb3VwX2VuZCAtIGJsaykKKwkJCQkJCWNsdXN0ZXJfZnJlZWQgPSBncm91cF9lbmQgLSBibGs7CisJCQkJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIGJsaywgLTEpOworCQkJCQlibGsgKz0gRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpOworCQkJCQlyZnMtPm5lZWRlZF9ibG9ja3MgLT0gY2x1c3Rlcl9mcmVlZDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXJmcy0+bmVlZGVkX2Jsb2Nrcy0tOworCQkJCWJsaysrOworCQkJfQorCQkJZ3JvdXBfYmxrICs9IGZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwOworCQl9CisJCXJldHZhbCA9IDA7CisJCWdvdG8gZXJyb3V0OworCX0KKwkvKgorCSAqIElmIHdlJ3JlIGluY3JlYXNpbmcgdGhlIG51bWJlciBvZiBkZXNjcmlwdG9yIGJsb2NrcywgbGlmZQorCSAqIGdldHMgaW50ZXJlc3RpbmcuLi4uCisJICovCisJbWV0YV9iZ19zaXplID0gRVhUMl9ERVNDX1BFUl9CTE9DSyhmcy0+c3VwZXIpOworCWZsZXhfYmcgPSBmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHOworCS8qIGZpcnN0IHJlc2VydmUgYWxsIG9mIHRoZSBleGlzdGluZyBmcyBtZXRhIGJsb2NrcyAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfZ3JvdXBzOyBpKyspIHsKKwkJaGFzX3N1cGVyID0gZXh0MmZzX2JnX2hhc19zdXBlcihmcywgaSk7CisJCWlmIChoYXNfc3VwZXIpCisJCQltYXJrX2ZzX21ldGFibG9jayhyZnMsIG1ldGFfYm1hcCwgaSwgZ3JvdXBfYmxrKTsKKworCQltZXRhX2JnID0gaSAvIG1ldGFfYmdfc2l6ZTsKKwkJaWYgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQkgICAgICBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgfHwKKwkJICAgIChtZXRhX2JnIDwgZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmcpKSB7CisJCQlpZiAoaGFzX3N1cGVyKSB7CisJCQkJZm9yIChibGsgPSBncm91cF9ibGsrMTsKKwkJCQkgICAgIGJsayA8IGdyb3VwX2JsayArIDEgKyBuZXdfYmxvY2tzOyBibGsrKykKKwkJCQkJbWFya19mc19tZXRhYmxvY2socmZzLCBtZXRhX2JtYXAsCisJCQkJCQkJICBpLCBibGspOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGhhc19zdXBlcikKKwkJCQloYXNfc3VwZXIgPSAxOworCQkJaWYgKCgoaSAlIG1ldGFfYmdfc2l6ZSkgPT0gMCkgfHwKKwkJCSAgICAoKGkgJSBtZXRhX2JnX3NpemUpID09IDEpIHx8CisJCQkgICAgKChpICUgbWV0YV9iZ19zaXplKSA9PSAobWV0YV9iZ19zaXplLTEpKSkKKwkJCQltYXJrX2ZzX21ldGFibG9jayhyZnMsIG1ldGFfYm1hcCwgaSwKKwkJCQkJCSAgZ3JvdXBfYmxrICsgaGFzX3N1cGVyKTsKKwkJfQorCisJCS8qCisJCSAqIFJlc2VydmUgdGhlIGV4aXN0aW5nIG1ldGEgYmxvY2tzIHRoYXQgd2Uga25vdworCQkgKiBhcmVuJ3QgdG8gYmUgbW92ZWQuCisJCSAqCisJCSAqIEZvciBmbGV4X2JnIGZpbGUgc3lzdGVtcywgaW4gb3JkZXIgdG8gYXZvaWQKKwkJICogb3ZlcndyaXRpbmcgZnMgbWV0YWRhdGEgKGVzcGVjaWFsbHkgaW5vZGUgdGFibGUKKwkJICogYmxvY2tzKSBiZWxvbmdpbmcgdG8gYSBkaWZmZXJlbnQgYmxvY2sgZ3JvdXAgd2hlbgorCQkgKiB3ZSBhcmUgcmVsb2NhdGluZyB0aGUgaW5vZGUgdGFibGVzLCB3ZSBuZWVkIHRvCisJCSAqIHJlc2VydmUgYWxsIGV4aXN0aW5nIGZzIG1ldGFkYXRhIGJsb2Nrcy4KKwkJICovCisJCWlmIChleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgaSkpCisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKHJmcy0+cmVzZXJ2ZV9ibG9ja3MsCisJCQkJIGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBpKSk7CisJCWVsc2UgaWYgKGZsZXhfYmcgJiYgaSA8IG9sZF9mcy0+Z3JvdXBfZGVzY19jb3VudCkKKwkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIocmZzLT5yZXNlcnZlX2Jsb2NrcywKKwkJCQkgZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2Mob2xkX2ZzLCBpKSk7CisKKwkJaWYgKGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKSkKKwkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIocmZzLT5yZXNlcnZlX2Jsb2NrcywKKwkJCQkgZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpKTsKKwkJZWxzZSBpZiAoZmxleF9iZyAmJiBpIDwgb2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50KQorCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihyZnMtPnJlc2VydmVfYmxvY2tzLAorCQkJCSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhvbGRfZnMsIGkpKTsKKworCQlpZiAoZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkpCisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXBfcmFuZ2UyKHJmcy0+cmVzZXJ2ZV9ibG9ja3MsCisJCQkJCWV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpLAorCQkJCQlmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCk7CisJCWVsc2UgaWYgKGZsZXhfYmcgJiYgaSA8IG9sZF9mcy0+Z3JvdXBfZGVzY19jb3VudCkKKwkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIocmZzLT5yZXNlcnZlX2Jsb2NrcywKKwkJCQkJZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhvbGRfZnMsIGkpLAorCQkJCQlvbGRfZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXApOworCisJCWdyb3VwX2JsayArPSByZnMtPm5ld19mcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwl9CisKKwkvKiBBbGxvY2F0ZSB0aGUgbWlzc2luZyBkYXRhIHN0cnVjdHVyZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2dyb3VwczsgaSsrKSB7CisJCWlmIChleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSAmJgorCQkgICAgZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpICYmCisJCSAgICBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgaSkpCisJCQljb250aW51ZTsKKworCQlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfZ3JvdXBfdGFibGUoZnMsIGksCisJCQkJCQkgICAgIHJmcy0+cmVzZXJ2ZV9ibG9ja3MpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisKKwkJLyoKKwkJICogRm9yIHRob3NlIHN0cnVjdHVyZXMgdGhhdCBoYXZlIGNoYW5nZWQsIHdlIG5lZWQgdG8KKwkJICogZG8gYm9va2tlZXBwaW5nLgorCQkgKi8KKwkJaWYgKGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKG9sZF9mcywgaSkgIT0KKwkJICAgIChibGsgPSBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgaSkpKSB7CisJCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBibGssICsxKTsKKwkJCWlmIChleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKG9sZF9mcy0+YmxvY2tfbWFwLCBibGspICYmCisJCQkgICAgIWV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIobWV0YV9ibWFwLCBibGspKQorCQkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIocmZzLT5tb3ZlX2Jsb2NrcywKKwkJCQkJCQkgYmxrKTsKKwkJfQorCQlpZiAoZXh0MmZzX2lub2RlX2JpdG1hcF9sb2Mob2xkX2ZzLCBpKSAhPQorCQkgICAgKGJsayA9IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKSkpIHsKKwkJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIGJsaywgKzEpOworCQkJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIob2xkX2ZzLT5ibG9ja19tYXAsIGJsaykgJiYKKwkJCSAgICAhZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihtZXRhX2JtYXAsIGJsaykpCisJCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihyZnMtPm1vdmVfYmxvY2tzLAorCQkJCQkJCSBibGspOworCQl9CisKKwkJLyoKKwkJICogVGhlIGlub2RlIHRhYmxlLCBpZiB3ZSBuZWVkIHRvIHJlbG9jYXRlIGl0LCBpcworCQkgKiBoYW5kbGVkIHNwZWNpYWxseS4gIFdlIGhhdmUgdG8gcmVzZXJ2ZSB0aGUgYmxvY2tzCisJCSAqIGZvciBib3RoIHRoZSBvbGQgYW5kIHRoZSBuZXcgaW5vZGUgdGFibGUsIHNpbmNlIHdlCisJCSAqIGNhbid0IGhhdmUgdGhlIGlub2RlIHRhYmxlIGJlIGRlc3Ryb3llZCBkdXJpbmcgdGhlCisJCSAqIGJsb2NrIHJlbG9jYXRpb24gcGhhc2UuCisJCSAqLworCQlpZiAoZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkgPT0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhvbGRfZnMsIGkpKQorCQkJY29udGludWU7CS8qIGlub2RlIHRhYmxlIG5vdCBtb3ZlZCAqLworCisJCXJmcy0+bmVlZGVkX2Jsb2NrcyArPSBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKworCQkvKgorCQkgKiBNYXJrIHRoZSBuZXcgaW5vZGUgdGFibGUgYXMgaW4gdXNlIGluIHRoZSBuZXcgYmxvY2sKKwkJICogYWxsb2NhdGlvbiBiaXRtYXAsIGFuZCBtb3ZlIGFueSBibG9ja3MgdGhhdCBtaWdodAorCQkgKiBiZSBuZWNlc3NhcnkuCisJCSAqLworCQlmb3IgKGJsayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpLCBqPTA7CisJCSAgICAgaiA8IGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwIDsgaisrLCBibGsrKykgeworCQkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgYmxrLCArMSk7CisJCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihvbGRfZnMtPmJsb2NrX21hcCwgYmxrKSAmJgorCQkJICAgICFleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKG1ldGFfYm1hcCwgYmxrKSkKKwkJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKHJmcy0+bW92ZV9ibG9ja3MsCisJCQkJCQkJIGJsayk7CisJCX0KKworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhlIG9sZCBpbm9kZSB0YWJsZSBpcyByZXNlcnZlZCBpbiB0aGUKKwkJICogYmxvY2sgcmVzZXJ2YXRpb24gYml0bWFwLgorCQkgKi8KKwkJZm9yIChibGsgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKHJmcy0+b2xkX2ZzLCBpKSwgaj0wOworCQkgICAgIGogPCBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCA7IGorKywgYmxrKyspCisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKHJmcy0+cmVzZXJ2ZV9ibG9ja3MsIGJsayk7CisJfQorCXJldHZhbCA9IDA7CisKK2Vycm91dDoKKwlpZiAobmV3X21ldGFfYm1hcCkKKwkJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKG5ld19tZXRhX2JtYXApOworCWlmIChtZXRhX2JtYXApCisJCWV4dDJmc19mcmVlX2Jsb2NrX2JpdG1hcChtZXRhX2JtYXApOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHRyaWVzIHRvIGFsbG9jYXRlIGEgbmV3IGJsb2NrLiAgV2UgdHJ5IHRvCisgKiBhdm9pZCBoaXR0aW5nIHRoZSBvcmlnaW5hbCBncm91cCBkZXNjcmlwdG9yIGJsb2NrcyBhdCBsZWFzdCBhdAorICogZmlyc3QsIHNpbmNlIHdlIHdhbnQgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byByZWNvdmVyIGZyb20gYSBiYWRseQorICogYWJvcnRlZCByZXNpemUgb3BlcmF0aW9uIGFzIG11Y2ggYXMgcG9zc2libGUuCisgKgorICogSW4gdGhlIGZ1dHVyZSwgSSBtYXkgZnVydGhlciBtb2RpZnkgdGhpcyByb3V0aW5lIHRvIGJhbGFuY2Ugb3V0CisgKiB3aGVyZSB3ZSBnZXQgdGhlIG5ldyBibG9ja3MgYWNyb3NzIHRoZSB2YXJpb3VzIGJsb2NrIGdyb3Vwcy4KKyAqIElkZWFsbHkgd2Ugd291bGQgYWxsb2NhdGUgYmxvY2tzIHRoYXQgY29ycmVzcG9uZGVkIHdpdGggdGhlIGJsb2NrCisgKiBncm91cCBvZiB0aGUgY29udGFpbmluZyBpbm9kZSwgYW5kIGtlZXAgY29udGlndW91cyBibG9ja3MKKyAqIHRvZ2V0aGVyLiAgSG93ZXZlciwgdGhpcyB2ZXJ5IGRpZmZpY3VsdCB0byBkbyBlZmZpY2llbnRseSwgc2luY2Ugd2UKKyAqIGRvbid0IGhhdmUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB1cCBmcm9udC4KKyAqLworCisjZGVmaW5lIEFWT0lEX09MRAkxCisjZGVmaW5lIERFU1BFUkFUSU9OCTIKKworc3RhdGljIHZvaWQgaW5pdF9ibG9ja19hbGxvYyhleHQyX3Jlc2l6ZV90IHJmcykKK3sKKwlyZnMtPmFsbG9jX3N0YXRlID0gQVZPSURfT0xEOworCXJmcy0+bmV3X2JsayA9IHJmcy0+bmV3X2ZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworI2lmIDAKKwkvKiBIQUNLIGZvciB0ZXN0aW5nICovCisJaWYgKGV4dDJmc19ibG9ja3NfY291bnQocmZzLT5uZXdfZnMtPnN1cGVyKSA+CisJICAgIGV4dDJmc19ibG9ja3NfY291bnQocmZzLT5vbGRfZnMtPnN1cGVyKSkKKwkJcmZzLT5uZXdfYmxrID0gZXh0MmZzX2Jsb2Nrc19jb3VudChyZnMtPm9sZF9mcy0+c3VwZXIpOworI2VuZGlmCit9CisKK3N0YXRpYyBibGs2NF90IGdldF9uZXdfYmxvY2soZXh0Ml9yZXNpemVfdCByZnMpCit7CisJZXh0Ml9maWxzeXMJZnMgPSByZnMtPm5ld19mczsKKworCXdoaWxlICgxKSB7CisJCWlmIChyZnMtPm5ld19ibGsgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSB7CisJCQlpZiAocmZzLT5hbGxvY19zdGF0ZSA9PSBERVNQRVJBVElPTikKKwkJCQlyZXR1cm4gMDsKKworI2lmZGVmIFJFU0laRTJGU19ERUJVRworCQkJaWYgKHJmcy0+ZmxhZ3MgJiBSRVNJWkVfREVCVUdfQk1PVkUpCisJCQkJcHJpbnRmKCJHb2luZyBpbnRvIGRlc3BlcmF0aW9uIG1vZGUgIgorCQkJCSAgICAgICAiZm9yIGJsb2NrIGFsbG9jYXRpb25zXG4iKTsKKyNlbmRpZgorCQkJcmZzLT5hbGxvY19zdGF0ZSA9IERFU1BFUkFUSU9OOworCQkJcmZzLT5uZXdfYmxrID0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2s7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLCByZnMtPm5ld19ibGspIHx8CisJCSAgICBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKHJmcy0+cmVzZXJ2ZV9ibG9ja3MsCisJCQkJCSAgICAgcmZzLT5uZXdfYmxrKSB8fAorCQkgICAgKChyZnMtPmFsbG9jX3N0YXRlID09IEFWT0lEX09MRCkgJiYKKwkJICAgICAocmZzLT5uZXdfYmxrIDwgZXh0MmZzX2Jsb2Nrc19jb3VudChyZnMtPm9sZF9mcy0+c3VwZXIpKSAmJgorCQkgICAgIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIocmZzLT5vbGRfZnMtPmJsb2NrX21hcCwKKwkJCQkJICAgICAgcmZzLT5uZXdfYmxrKSkpIHsKKwkJCXJmcy0+bmV3X2JsaysrOworCQkJY29udGludWU7CisJCX0KKwkJcmV0dXJuIHJmcy0+bmV3X2JsazsKKwl9Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgcmVzaXplMmZzX2dldF9hbGxvY19ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBnb2FsLAorCQkJCQkgICBibGs2NF90ICpyZXQpCit7CisJZXh0Ml9yZXNpemVfdCByZnMgPSAoZXh0Ml9yZXNpemVfdCkgZnMtPnByaXZfZGF0YTsKKwlibGs2NF90IGJsazsKKworCWJsayA9IGdldF9uZXdfYmxvY2socmZzKTsKKwlpZiAoIWJsaykKKwkJcmV0dXJuIEVOT1NQQzsKKworI2lmZGVmIFJFU0laRTJGU19ERUJVRworCWlmIChyZnMtPmZsYWdzICYgMHhGKQorCQlwcmludGYoImdldF9hbGxvY19ibG9jayBhbGxvY2F0aW5nICVsbHVcbiIsIGJsayk7CisjZW5kaWYKKworCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIocmZzLT5vbGRfZnMtPmJsb2NrX21hcCwgYmxrKTsKKwlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKHJmcy0+bmV3X2ZzLT5ibG9ja19tYXAsIGJsayk7CisJKnJldCA9IChibGs2NF90KSBibGs7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgYmxvY2tfbW92ZXIoZXh0Ml9yZXNpemVfdCByZnMpCit7CisJYmxrNjRfdAkJCWJsaywgb2xkX2JsaywgbmV3X2JsazsKKwlleHQyX2ZpbHN5cwkJZnMgPSByZnMtPm5ld19mczsKKwlleHQyX2ZpbHN5cwkJb2xkX2ZzID0gcmZzLT5vbGRfZnM7CisJZXJyY29kZV90CQlyZXR2YWw7CisJX191NjQJCQlzaXplOworCWludAkJCWM7CisJaW50CQkJdG9fbW92ZSwgbW92ZWQ7CisJZXh0Ml9iYWRibG9ja3NfbGlzdAliYWRibG9ja19saXN0ID0gMDsKKwlpbnQJCQliYl9tb2RpZmllZCA9IDA7CisKKwlmcy0+Z2V0X2FsbG9jX2Jsb2NrID0gcmVzaXplMmZzX2dldF9hbGxvY19ibG9jazsKKwlvbGRfZnMtPmdldF9hbGxvY19ibG9jayA9IHJlc2l6ZTJmc19nZXRfYWxsb2NfYmxvY2s7CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9iYl9pbm9kZShvbGRfZnMsICZiYWRibG9ja19saXN0KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJbmV3X2JsayA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCWlmICghcmZzLT5pdGFibGVfYnVmKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfYXJyYXkoZnMtPmJsb2Nrc2l6ZSwKKwkJCQkJZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAsCisJCQkJCSZyZnMtPml0YWJsZV9idWYpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisJcmV0dmFsID0gZXh0MmZzX2NyZWF0ZV9leHRlbnRfdGFibGUoJnJmcy0+Ym1hcCwgMCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qCisJICogVGhlIGZpcnN0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGVyZSBhbGwgb2YgdGhlIGJsb2NrcworCSAqIHdpbGwgZ28uCisJICovCisJdG9fbW92ZSA9IG1vdmVkID0gMDsKKwlpbml0X2Jsb2NrX2FsbG9jKHJmcyk7CisJZm9yIChibGsgPSBCMkMob2xkX2ZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKTsKKwkgICAgIGJsayA8IGV4dDJmc19ibG9ja3NfY291bnQob2xkX2ZzLT5zdXBlcik7CisJICAgICBibGsgKz0gRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpKSB7CisJCWlmICghZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihvbGRfZnMtPmJsb2NrX21hcCwgYmxrKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIocmZzLT5tb3ZlX2Jsb2NrcywgYmxrKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZXh0MmZzX2JhZGJsb2Nrc19saXN0X3Rlc3QoYmFkYmxvY2tfbGlzdCwgYmxrKSkgeworCQkJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2RlbChiYWRibG9ja19saXN0LCBibGspOworCQkJYmJfbW9kaWZpZWQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbmV3X2JsayA9IGdldF9uZXdfYmxvY2socmZzKTsKKwkJaWYgKCFuZXdfYmxrKSB7CisJCQlyZXR2YWwgPSBFTk9TUEM7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBuZXdfYmxrLCArMSk7CisJCWV4dDJmc19hZGRfZXh0ZW50X2VudHJ5KHJmcy0+Ym1hcCwgQjJDKGJsayksIEIyQyhuZXdfYmxrKSk7CisJCXRvX21vdmUrKzsKKwl9CisKKwlpZiAodG9fbW92ZSA9PSAwKSB7CisJCWlmIChyZnMtPmJtYXApIHsKKwkJCWV4dDJmc19mcmVlX2V4dGVudF90YWJsZShyZnMtPmJtYXApOworCQkJcmZzLT5ibWFwID0gMDsKKwkJfQorCQlyZXR2YWwgPSAwOworCQlnb3RvIGVycm91dDsKKwl9CisKKwkvKgorCSAqIFN0ZXAgdHdvIGlzIHRvIGFjdHVhbGx5IG1vdmUgdGhlIGJsb2NrcworCSAqLworCXJldHZhbCA9ICBleHQyZnNfaXRlcmF0ZV9leHRlbnQocmZzLT5ibWFwLCAwLCAwLCAwKTsKKwlpZiAocmV0dmFsKSBnb3RvIGVycm91dDsKKworCWlmIChyZnMtPnByb2dyZXNzKSB7CisJCXJldHZhbCA9IChyZnMtPnByb2dyZXNzKShyZnMsIEUyX1JTWl9CTE9DS19SRUxPQ19QQVNTLAorCQkJCQkgMCwgdG9fbW92ZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwl9CisJd2hpbGUgKDEpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2l0ZXJhdGVfZXh0ZW50KHJmcy0+Ym1hcCwgJm9sZF9ibGssICZuZXdfYmxrLCAmc2l6ZSk7CisJCWlmIChyZXR2YWwpIGdvdG8gZXJyb3V0OworCQlpZiAoIXNpemUpCisJCQlicmVhazsKKwkJb2xkX2JsayA9IEMyQihvbGRfYmxrKTsKKwkJbmV3X2JsayA9IEMyQihuZXdfYmxrKTsKKwkJc2l6ZSA9IEMyQihzaXplKTsKKyNpZmRlZiBSRVNJWkUyRlNfREVCVUcKKwkJaWYgKHJmcy0+ZmxhZ3MgJiBSRVNJWkVfREVCVUdfQk1PVkUpCisJCQlwcmludGYoIk1vdmluZyAlbGx1IGJsb2NrcyAlbGx1LT4lbGx1XG4iLAorCQkJICAgICAgIHNpemUsIG9sZF9ibGssIG5ld19ibGspOworI2VuZGlmCisJCWRvIHsKKwkJCWMgPSBzaXplOworCQkJaWYgKGMgPiBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCkKKwkJCQljID0gZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCBvbGRfYmxrLCBjLAorCQkJCQkJICAgICAgIHJmcy0+aXRhYmxlX2J1Zik7CisJCQlpZiAocmV0dmFsKSBnb3RvIGVycm91dDsKKwkJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBuZXdfYmxrLCBjLAorCQkJCQkJCXJmcy0+aXRhYmxlX2J1Zik7CisJCQlpZiAocmV0dmFsKSBnb3RvIGVycm91dDsKKwkJCXNpemUgLT0gYzsKKwkJCW5ld19ibGsgKz0gYzsKKwkJCW9sZF9ibGsgKz0gYzsKKwkJCW1vdmVkICs9IGM7CisJCQlpZiAocmZzLT5wcm9ncmVzcykgeworCQkJCWlvX2NoYW5uZWxfZmx1c2goZnMtPmlvKTsKKwkJCQlyZXR2YWwgPSAocmZzLT5wcm9ncmVzcykocmZzLAorCQkJCQkJRTJfUlNaX0JMT0NLX1JFTE9DX1BBU1MsCisJCQkJCQltb3ZlZCwgdG9fbW92ZSk7CisJCQkJaWYgKHJldHZhbCkKKwkJCQkJZ290byBlcnJvdXQ7CisJCQl9CisJCX0gd2hpbGUgKHNpemUgPiAwKTsKKwkJaW9fY2hhbm5lbF9mbHVzaChmcy0+aW8pOworCX0KKworZXJyb3V0OgorCWlmIChiYWRibG9ja19saXN0KSB7CisJCWlmICghcmV0dmFsICYmIGJiX21vZGlmaWVkKQorCQkJcmV0dmFsID0gZXh0MmZzX3VwZGF0ZV9iYl9pbm9kZShvbGRfZnMsCisJCQkJCQkJYmFkYmxvY2tfbGlzdCk7CisJCWV4dDJmc19iYWRibG9ja3NfbGlzdF9mcmVlKGJhZGJsb2NrX2xpc3QpOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogUmVzaXplIHByb2Nlc3NpbmcsIHBoYXNlIDMKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKworLyoKKyAqIFRoZSBleHRlbnQgdHJhbnNsYXRpb24gdGFibGUgaXMgc3RvcmVkIGluIGNsdXN0ZXJzIHNvIHdlIG5lZWQgdG8KKyAqIHRha2Ugc3BlY2lhbCBjYXJlIHdoZW4gbWFwcGluZyBhIHNvdXJjZSBibG9jayBudW1iZXIgdG8gaXRzCisgKiBkZXN0aW5hdGlvbiBibG9jayBudW1iZXIuCisgKi8KK3N0YXRpYyBfX3U2NCBleHRlbnRfdHJhbnNsYXRlKGV4dDJfZmlsc3lzIGZzLCBleHQyX2V4dGVudCBleHRlbnQsIF9fdTY0IG9sZF9sb2MpCit7CisJX191NjQgbmV3X2Jsb2NrID0gQzJCKGV4dDJmc19leHRlbnRfdHJhbnNsYXRlKGV4dGVudCwgQjJDKG9sZF9sb2MpKSk7CisKKwlpZiAobmV3X2Jsb2NrICE9IDApCisJCW5ld19ibG9jayArPSBvbGRfbG9jICYgKEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKSAtIDEpOworCXJldHVybiBuZXdfYmxvY2s7Cit9CisKK3N0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCB7CisJZXh0Ml9yZXNpemVfdCAJCXJmczsKKwlleHQyX2lub190CQlpbm87CisJc3RydWN0IGV4dDJfaW5vZGUgKglpbm9kZTsKKwllcnJjb2RlX3QJCWVycm9yOworCWludAkJCWlzX2RpcjsKKwlpbnQJCQljaGFuZ2VkOworfTsKKworc3RhdGljIGludCBwcm9jZXNzX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90CSpibG9ja19uciwKKwkJCSBlMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJCSBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgaW50IHJlZl9vZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLCB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0ICpwYjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWJsazY0X3QJCWJsb2NrLCBuZXdfYmxvY2s7CisJaW50CQlyZXQgPSAwOworCisJcGIgPSAoc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0ICopIHByaXZfZGF0YTsKKwlibG9jayA9ICpibG9ja19ucjsKKwlpZiAocGItPnJmcy0+Ym1hcCkgeworCQluZXdfYmxvY2sgPSBleHRlbnRfdHJhbnNsYXRlKGZzLCBwYi0+cmZzLT5ibWFwLCBibG9jayk7CisJCWlmIChuZXdfYmxvY2spIHsKKwkJCSpibG9ja19uciA9IG5ld19ibG9jazsKKwkJCXJldCB8PSBCTE9DS19DSEFOR0VEOworCQkJcGItPmNoYW5nZWQgPSAxOworI2lmZGVmIFJFU0laRTJGU19ERUJVRworCQkJaWYgKHBiLT5yZnMtPmZsYWdzICYgUkVTSVpFX0RFQlVHX0JNT1ZFKQorCQkJCXByaW50ZigiaW5vPSV1LCBibG9ja2NudD0lbGxkLCAlbGx1LT4lbGx1XG4iLAorCQkJCSAgICAgICBwYi0+aW5vLCBibG9ja2NudCwgYmxvY2ssIG5ld19ibG9jayk7CisjZW5kaWYKKwkJCWJsb2NrID0gbmV3X2Jsb2NrOworCQl9CisJfQorCWlmIChwYi0+aXNfZGlyKSB7CisJCXJldHZhbCA9IGV4dDJmc19hZGRfZGlyX2Jsb2NrMihmcy0+ZGJsaXN0LCBwYi0+aW5vLAorCQkJCQkgICAgICAgYmxvY2ssIChpbnQpIGJsb2NrY250KTsKKwkJaWYgKHJldHZhbCkgeworCQkJcGItPmVycm9yID0gcmV0dmFsOworCQkJcmV0IHw9IEJMT0NLX0FCT1JUOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQcm9ncmVzcyBjYWxsYmFjaworICovCitzdGF0aWMgZXJyY29kZV90IHByb2dyZXNzX2NhbGxiYWNrKGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgIGV4dDJfaW5vZGVfc2NhbiBzY2FuIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQkgICBkZ3JwX3QgZ3JvdXAsIHZvaWQgKiBwcml2X2RhdGEpCit7CisJZXh0Ml9yZXNpemVfdCByZnMgPSAoZXh0Ml9yZXNpemVfdCkgcHJpdl9kYXRhOworCWVycmNvZGVfdAkJcmV0dmFsOworCisJLyoKKwkgKiBUaGlzIGNoZWNrIGlzIHRvIHByb3RlY3QgYWdhaW5zdCBvbGQgZXh0MiBsaWJyYXJpZXMuICBJdAorCSAqIHNob3VsZG4ndCBiZSBuZWVkZWQgYWdhaW5zdCBuZXcgbGlicmFyaWVzLgorCSAqLworCWlmICgoZ3JvdXArMSkgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAocmZzLT5wcm9ncmVzcykgeworCQlpb19jaGFubmVsX2ZsdXNoKGZzLT5pbyk7CisJCXJldHZhbCA9IChyZnMtPnByb2dyZXNzKShyZnMsIEUyX1JTWl9JTk9ERV9TQ0FOX1BBU1MsCisJCQkJCSBncm91cCsxLCBmcy0+Z3JvdXBfZGVzY19jb3VudCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IGlub2RlX3NjYW5fYW5kX2ZpeChleHQyX3Jlc2l6ZV90IHJmcykKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QJcGI7CisJZXh0Ml9pbm9fdAkJaW5vLCBuZXdfaW5vZGU7CisJc3RydWN0IGV4dDJfaW5vZGUgCSppbm9kZSA9IE5VTEw7CisJZXh0Ml9pbm9kZV9zY2FuIAlzY2FuID0gTlVMTDsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwljaGFyCQkJKmJsb2NrX2J1ZiA9IDA7CisJZXh0Ml9pbm9fdAkJc3RhcnRfdG9fbW92ZTsKKwlibGs2NF90CQkJb3JpZ19zaXplOworCWJsazY0X3QJCQluZXdfYmxvY2s7CisJaW50CQkJaW5vZGVfc2l6ZTsKKworCWlmICgocmZzLT5vbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQgPD0KKwkgICAgIHJmcy0+bmV3X2ZzLT5ncm91cF9kZXNjX2NvdW50KSAmJgorCSAgICAhcmZzLT5ibWFwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogU2F2ZSB0aGUgb3JpZ2luYWwgc2l6ZSBvZiB0aGUgb2xkIGZpbGVzeXN0ZW0sIGFuZAorCSAqIHRlbXBvcmFyaWx5IHNldCB0aGUgc2l6ZSB0byBiZSB0aGUgbmV3IHNpemUgaWYgdGhlIG5ldyBzaXplCisJICogaXMgbGFyZ2VyLiAgV2UgbmVlZCB0byBkbyB0aGlzIHRvIGF2b2lkIGNhdGNoaW5nIGFuIGVycm9yCisJICogYnkgdGhlIGJsb2NrIGl0ZXJhdG9yIHJvdXRpbmVzCisJICovCisJb3JpZ19zaXplID0gZXh0MmZzX2Jsb2Nrc19jb3VudChyZnMtPm9sZF9mcy0+c3VwZXIpOworCWlmIChvcmlnX3NpemUgPCBleHQyZnNfYmxvY2tzX2NvdW50KHJmcy0+bmV3X2ZzLT5zdXBlcikpCisJCWV4dDJmc19ibG9ja3NfY291bnRfc2V0KHJmcy0+b2xkX2ZzLT5zdXBlciwKKwkJCQlleHQyZnNfYmxvY2tzX2NvdW50KHJmcy0+bmV3X2ZzLT5zdXBlcikpOworCisJcmV0dmFsID0gZXh0MmZzX29wZW5faW5vZGVfc2NhbihyZnMtPm9sZF9mcywgMCwgJnNjYW4pOworCWlmIChyZXR2YWwpIGdvdG8gZXJyb3V0OworCisJcmV0dmFsID0gZXh0MmZzX2luaXRfZGJsaXN0KHJmcy0+b2xkX2ZzLCAwKTsKKwlpZiAocmV0dmFsKSBnb3RvIGVycm91dDsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KHJmcy0+b2xkX2ZzLT5ibG9ja3NpemUsIDMsICZibG9ja19idWYpOworCWlmIChyZXR2YWwpIGdvdG8gZXJyb3V0OworCisJc3RhcnRfdG9fbW92ZSA9IChyZnMtPm5ld19mcy0+Z3JvdXBfZGVzY19jb3VudCAqCisJCQkgcmZzLT5uZXdfZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXApOworCisJaWYgKHJmcy0+cHJvZ3Jlc3MpIHsKKwkJcmV0dmFsID0gKHJmcy0+cHJvZ3Jlc3MpKHJmcywgRTJfUlNaX0lOT0RFX1NDQU5fUEFTUywKKwkJCQkJIDAsIHJmcy0+b2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCX0KKwlleHQyZnNfc2V0X2lub2RlX2NhbGxiYWNrKHNjYW4sIHByb2dyZXNzX2NhbGxiYWNrLCAodm9pZCAqKSByZnMpOworCXBiLnJmcyA9IHJmczsKKwlwYi5pbm9kZSA9IGlub2RlOworCXBiLmVycm9yID0gMDsKKwluZXdfaW5vZGUgPSBFWFQyX0ZJUlNUX0lOT0RFKHJmcy0+bmV3X2ZzLT5zdXBlcik7CisJaW5vZGVfc2l6ZSA9IEVYVDJfSU5PREVfU0laRShyZnMtPm5ld19mcy0+c3VwZXIpOworCWlub2RlID0gbWFsbG9jKGlub2RlX3NpemUpOworCWlmICghaW5vZGUpIHsKKwkJcmV0dmFsID0gRU5PTUVNOworCQlnb3RvIGVycm91dDsKKwl9CisJLyoKKwkgKiBGaXJzdCwgY29weSBhbGwgb2YgdGhlIGlub2RlcyB0aGF0IG5lZWQgdG8gYmUgbW92ZWQKKwkgKiBlbHNld2hlcmUgaW4gdGhlIGlub2RlIHRhYmxlCisJICovCisJd2hpbGUgKDEpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9uZXh0X2lub2RlX2Z1bGwoc2NhbiwgJmlubywgaW5vZGUsIGlub2RlX3NpemUpOworCQlpZiAocmV0dmFsKSBnb3RvIGVycm91dDsKKwkJaWYgKCFpbm8pCisJCQlicmVhazsKKworCQlpZiAoaW5vZGUtPmlfbGlua3NfY291bnQgPT0gMCAmJiBpbm8gIT0gRVhUMl9SRVNJWkVfSU5PKQorCQkJY29udGludWU7IC8qIGlub2RlIG5vdCBpbiB1c2UgKi8KKworCQlwYi5pc19kaXIgPSBMSU5VWF9TX0lTRElSKGlub2RlLT5pX21vZGUpOworCQlwYi5jaGFuZ2VkID0gMDsKKworCQlpZiAoZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKHJmcy0+b2xkX2ZzLCBpbm9kZSkgJiYgcmZzLT5ibWFwKSB7CisJCQluZXdfYmxvY2sgPSBleHRlbnRfdHJhbnNsYXRlKHJmcy0+b2xkX2ZzLCByZnMtPmJtYXAsCisJCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKHJmcy0+b2xkX2ZzLCBpbm9kZSkpOworCQkJaWYgKG5ld19ibG9jaykgeworCQkJCWV4dDJmc19maWxlX2FjbF9ibG9ja19zZXQocmZzLT5vbGRfZnMsIGlub2RlLAorCQkJCQkJCSAgbmV3X2Jsb2NrKTsKKwkJCQlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGVfZnVsbChyZnMtPm9sZF9mcywKKwkJCQkJCQkgICAgaW5vLCBpbm9kZSwgaW5vZGVfc2l6ZSk7CisJCQkJaWYgKHJldHZhbCkgZ290byBlcnJvdXQ7CisJCQl9CisJCX0KKworCQlpZiAoZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyKHJmcy0+b2xkX2ZzLCBpbm9kZSkgJiYKKwkJICAgIChyZnMtPmJtYXAgfHwgcGIuaXNfZGlyKSkgeworCQkJcGIuaW5vID0gaW5vOworCQkJcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKHJmcy0+b2xkX2ZzLAorCQkJCQkJICAgICAgIGlubywgMCwgYmxvY2tfYnVmLAorCQkJCQkJICAgICAgIHByb2Nlc3NfYmxvY2ssICZwYik7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZXJyb3V0OworCQkJaWYgKHBiLmVycm9yKSB7CisJCQkJcmV0dmFsID0gcGIuZXJyb3I7CisJCQkJZ290byBlcnJvdXQ7CisJCQl9CisJCX0KKworCQlpZiAoaW5vIDw9IHN0YXJ0X3RvX21vdmUpCisJCQljb250aW51ZTsgLyogRG9uJ3QgbmVlZCB0byBtb3ZlIGl0LiAqLworCisJCS8qCisJCSAqIEZpbmQgYSBuZXcgaW5vZGUKKwkJICovCisJCXJldHZhbCA9IGV4dDJmc19uZXdfaW5vZGUocmZzLT5uZXdfZnMsIDAsIDAsIDAsICZuZXdfaW5vZGUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisKKwkJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihyZnMtPm5ld19mcywgbmV3X2lub2RlLCArMSwKKwkJCQkJICBwYi5pc19kaXIpOworCQlpZiAocGIuY2hhbmdlZCkgeworCQkJLyogR2V0IHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgaW5vZGUgKi8KKwkJCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlX2Z1bGwocmZzLT5vbGRfZnMsIGlubywKKwkJCQkJCWlub2RlLCBpbm9kZV9zaXplKTsKKwkJCWlmIChyZXR2YWwpIGdvdG8gZXJyb3V0OworCQl9CisJCWlub2RlLT5pX2N0aW1lID0gdGltZSgwKTsKKwkJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlX2Z1bGwocmZzLT5vbGRfZnMsIG5ld19pbm9kZSwKKwkJCQkJCWlub2RlLCBpbm9kZV9zaXplKTsKKwkJaWYgKHJldHZhbCkgZ290byBlcnJvdXQ7CisKKyNpZmRlZiBSRVNJWkUyRlNfREVCVUcKKwkJaWYgKHJmcy0+ZmxhZ3MgJiBSRVNJWkVfREVCVUdfSU5PREVNQVApCisJCQlwcmludGYoIklub2RlIG1vdmVkICV1LT4ldVxuIiwgaW5vLCBuZXdfaW5vZGUpOworI2VuZGlmCisJCWlmICghcmZzLT5pbWFwKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfY3JlYXRlX2V4dGVudF90YWJsZSgmcmZzLT5pbWFwLCAwKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJZXh0MmZzX2FkZF9leHRlbnRfZW50cnkocmZzLT5pbWFwLCBpbm8sIG5ld19pbm9kZSk7CisJfQorCWlvX2NoYW5uZWxfZmx1c2gocmZzLT5vbGRfZnMtPmlvKTsKKworZXJyb3V0OgorCWV4dDJmc19ibG9ja3NfY291bnRfc2V0KHJmcy0+b2xkX2ZzLT5zdXBlciwgb3JpZ19zaXplKTsKKwlpZiAocmZzLT5ibWFwKSB7CisJCWV4dDJmc19mcmVlX2V4dGVudF90YWJsZShyZnMtPmJtYXApOworCQlyZnMtPmJtYXAgPSAwOworCX0KKwlpZiAoc2NhbikKKwkJZXh0MmZzX2Nsb3NlX2lub2RlX3NjYW4oc2Nhbik7CisJaWYgKGJsb2NrX2J1ZikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZibG9ja19idWYpOworCWZyZWUoaW5vZGUpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogUmVzaXplIHByb2Nlc3NpbmcsIHBoYXNlIDQuCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdHJ1Y3QgaXN0cnVjdCB7CisJZXh0Ml9yZXNpemVfdCByZnM7CisJZXJyY29kZV90CWVycjsKKwl1bnNpZ25lZCBpbnQJbWF4X2RpcnM7CisJdW5zaWduZWQgaW50CW51bTsKK307CisKK3N0YXRpYyBpbnQgY2hlY2tfYW5kX2NoYW5nZV9pbm9kZXMoZXh0Ml9pbm9fdCBkaXIsCisJCQkJICAgaW50IGVudHJ5IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQkgICBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwgaW50IG9mZnNldCwKKwkJCQkgICBpbnQJYmxvY2tzaXplIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQkgICBjaGFyICpidWYgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCSAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgaXN0cnVjdCAqaXMgPSAoc3RydWN0IGlzdHJ1Y3QgKikgcHJpdl9kYXRhOworCXN0cnVjdCBleHQyX2lub2RlIAlpbm9kZTsKKwlleHQyX2lub190CQluZXdfaW5vZGU7CisJZXJyY29kZV90CQlyZXR2YWw7CisKKwlpZiAoaXMtPnJmcy0+cHJvZ3Jlc3MgJiYgb2Zmc2V0ID09IDApIHsKKwkJaW9fY2hhbm5lbF9mbHVzaChpcy0+cmZzLT5vbGRfZnMtPmlvKTsKKwkJaXMtPmVyciA9IChpcy0+cmZzLT5wcm9ncmVzcykoaXMtPnJmcywKKwkJCQkJICAgICAgRTJfUlNaX0lOT0RFX1JFRl9VUERfUEFTUywKKwkJCQkJICAgICAgKytpcy0+bnVtLCBpcy0+bWF4X2RpcnMpOworCQlpZiAoaXMtPmVycikKKwkJCXJldHVybiBESVJFTlRfQUJPUlQ7CisJfQorCisJaWYgKCFkaXJlbnQtPmlub2RlKQorCQlyZXR1cm4gMDsKKworCW5ld19pbm9kZSA9IGV4dDJmc19leHRlbnRfdHJhbnNsYXRlKGlzLT5yZnMtPmltYXAsIGRpcmVudC0+aW5vZGUpOworCisJaWYgKCFuZXdfaW5vZGUpCisJCXJldHVybiAwOworI2lmZGVmIFJFU0laRTJGU19ERUJVRworCWlmIChpcy0+cmZzLT5mbGFncyAmIFJFU0laRV9ERUJVR19JTk9ERU1BUCkKKwkJcHJpbnRmKCJJbm9kZSB0cmFuc2xhdGUgKGRpcj0ldSwgbmFtZT0lLipzLCAldS0+JXUpXG4iLAorCQkgICAgICAgZGlyLCBkaXJlbnQtPm5hbWVfbGVuJjB4RkYsIGRpcmVudC0+bmFtZSwKKwkJICAgICAgIGRpcmVudC0+aW5vZGUsIG5ld19pbm9kZSk7CisjZW5kaWYKKworCWRpcmVudC0+aW5vZGUgPSBuZXdfaW5vZGU7CisKKwkvKiBVcGRhdGUgdGhlIGRpcmVjdG9yeSBtdGltZSBhbmQgY3RpbWUgKi8KKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShpcy0+cmZzLT5vbGRfZnMsIGRpciwgJmlub2RlKTsKKwlpZiAocmV0dmFsID09IDApIHsKKwkJaW5vZGUuaV9tdGltZSA9IGlub2RlLmlfY3RpbWUgPSB0aW1lKDApOworCQlpcy0+ZXJyID0gZXh0MmZzX3dyaXRlX2lub2RlKGlzLT5yZnMtPm9sZF9mcywgZGlyLCAmaW5vZGUpOworCQlpZiAoaXMtPmVycikKKwkJCXJldHVybiBESVJFTlRfQUJPUlQ7CisJfQorCisJcmV0dXJuIERJUkVOVF9DSEFOR0VEOworfQorCitzdGF0aWMgZXJyY29kZV90IGlub2RlX3JlZl9maXgoZXh0Ml9yZXNpemVfdCByZnMpCit7CisJZXJyY29kZV90CQlyZXR2YWw7CisJc3RydWN0IGlzdHJ1Y3QgCQlpczsKKworCWlmICghcmZzLT5pbWFwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogTm93LCB3ZSBpdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBkaXJlY3RvcmllcyB0byB1cGRhdGUgdGhlCisJICogaW5vZGUgcmVmZXJlbmNlcworCSAqLworCWlzLm51bSA9IDA7CisJaXMubWF4X2RpcnMgPSBleHQyZnNfZGJsaXN0X2NvdW50MihyZnMtPm9sZF9mcy0+ZGJsaXN0KTsKKwlpcy5yZnMgPSByZnM7CisJaXMuZXJyID0gMDsKKworCWlmIChyZnMtPnByb2dyZXNzKSB7CisJCXJldHZhbCA9IChyZnMtPnByb2dyZXNzKShyZnMsIEUyX1JTWl9JTk9ERV9SRUZfVVBEX1BBU1MsCisJCQkJCSAwLCBpcy5tYXhfZGlycyk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfZGJsaXN0X2Rpcl9pdGVyYXRlKHJmcy0+b2xkX2ZzLT5kYmxpc3QsCisJCQkJCSAgIERJUkVOVF9GTEFHX0lOQ0xVREVfRU1QVFksIDAsCisJCQkJCSAgIGNoZWNrX2FuZF9jaGFuZ2VfaW5vZGVzLCAmaXMpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCWlmIChpcy5lcnIpIHsKKwkJcmV0dmFsID0gaXMuZXJyOworCQlnb3RvIGVycm91dDsKKwl9CisKKwlpZiAocmZzLT5wcm9ncmVzcyAmJiAoaXMubnVtIDwgaXMubWF4X2RpcnMpKQorCQkocmZzLT5wcm9ncmVzcykocmZzLCBFMl9SU1pfSU5PREVfUkVGX1VQRF9QQVNTLAorCQkJCWlzLm1heF9kaXJzLCBpcy5tYXhfZGlycyk7CisKK2Vycm91dDoKKwlleHQyZnNfZnJlZV9leHRlbnRfdGFibGUocmZzLT5pbWFwKTsKKwlyZnMtPmltYXAgPSAwOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBSZXNpemUgcHJvY2Vzc2luZywgcGhhc2UgNS4KKyAqCisgKiBJbiB0aGlzIHBoYXNlIHdlIGFjdHVhbGx5IG1vdmUgdGhlIGlub2RlIHRhYmxlIGFyb3VuZCwgYW5kIHRoZW4KKyAqIHVwZGF0ZSB0aGUgc3VtbWFyeSBzdGF0aXN0aWNzLiAgVGhpcyBpcyBzY2FyeSwgc2luY2UgYWJvcnRpbmcgaGVyZQorICogd2lsbCBwb3RlbnRpYWxseSBzY3JhbWJsZSB0aGUgZmlsZXN5c3RlbS4gIChXZSBhcmUgbW92aW5nIHRoZQorICogaW5vZGUgdGFibGVzIGFyb3VuZCBpbiBwbGFjZSwgYW5kIHNvIHRoZSBwb3RlbnRpYWwgZm9yIGxvc3QgZGF0YSwKKyAqIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0IHNjcmFtYmxpbmcgdGhlIG1hcHBpbmcgYmV0d2VlbiBmaWxlbmFtZXMgYW5kCisgKiBpbm9kZSBudW1iZXJzIGlzIHZlcnkgaGlnaCBpbiBjYXNlIG9mIGEgcG93ZXIgZmFpbHVyZSBoZXJlLikKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworCisvKgorICogQSB2ZXJ5IHNjYXJ5IHJvdXRpbmUgLS0tIHRoaXMgb25lIG1vdmVzIHRoZSBpbm9kZSB0YWJsZSBhcm91bmQhISEKKyAqCisgKiBBZnRlciB0aGlzIHlvdSBoYXZlIHRvIHVzZSB0aGUgcmZzLT5uZXdfZnMgZmlsZSBoYW5kbGUgdG8gcmVhZCBhbmQKKyAqIHdyaXRlIGlub2Rlcy4KKyAqLworc3RhdGljIGVycmNvZGVfdCBtb3ZlX2l0YWJsZXMoZXh0Ml9yZXNpemVfdCByZnMpCit7CisJaW50CQluLCBudW0sIHNpemU7CisJbG9uZyBsb25nCWRpZmY7CisJZGdycF90CQlpLCBtYXhfZ3JvdXBzOworCWV4dDJfZmlsc3lzCWZzID0gcmZzLT5uZXdfZnM7CisJY2hhcgkJKmNwOworCWJsazY0X3QJCW9sZF9ibGssIG5ld19ibGssIGJsaywgY2x1c3Rlcl9mcmVlZDsKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJaiwgdG9fbW92ZSwgbW92ZWQ7CisJZXh0MmZzX2Jsb2NrX2JpdG1hcAluZXdfYm1hcCA9IE5VTEw7CisKKwltYXhfZ3JvdXBzID0gZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJaWYgKG1heF9ncm91cHMgPiByZnMtPm9sZF9mcy0+Z3JvdXBfZGVzY19jb3VudCkKKwkJbWF4X2dyb3VwcyA9IHJmcy0+b2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50OworCisJc2l6ZSA9IGZzLT5ibG9ja3NpemUgKiBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKwlpZiAoIXJmcy0+aXRhYmxlX2J1ZikgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplLCAmcmZzLT5pdGFibGVfYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCisJaWYgKEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKSA+IDEpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcChmcywgXygibmV3IG1ldGEgYmxvY2tzIiksCisJCQkJCQkgICAgICAmbmV3X2JtYXApOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKworCQlyZXR2YWwgPSBtYXJrX3RhYmxlX2Jsb2NrcyhmcywgbmV3X2JtYXApOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJfQorCisJLyoKKwkgKiBGaWd1cmUgb3V0IGhvdyBtYW55IGlub2RlIHRhYmxlcyB3ZSBuZWVkIHRvIG1vdmUKKwkgKi8KKwl0b19tb3ZlID0gbW92ZWQgPSAwOworCWZvciAoaT0wOyBpIDwgbWF4X2dyb3VwczsgaSsrKQorCQlpZiAoZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhyZnMtPm9sZF9mcywgaSkgIT0KKwkJICAgIGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpKQorCQkJdG9fbW92ZSsrOworCisJaWYgKHRvX21vdmUgPT0gMCkgeworCQlyZXR2YWwgPSAwOworCQlnb3RvIGVycm91dDsKKwl9CisKKwlpZiAocmZzLT5wcm9ncmVzcykgeworCQlyZXR2YWwgPSByZnMtPnByb2dyZXNzKHJmcywgRTJfUlNaX01PVkVfSVRBQkxFX1BBU1MsCisJCQkJICAgICAgIDAsIHRvX21vdmUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJfQorCisJcmZzLT5vbGRfZnMtPmZsYWdzIHw9IEVYVDJfRkxBR19NQVNURVJfU0JfT05MWTsKKworCWZvciAoaT0wOyBpIDwgbWF4X2dyb3VwczsgaSsrKSB7CisJCW9sZF9ibGsgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKHJmcy0+b2xkX2ZzLCBpKTsKKwkJbmV3X2JsayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpOworCQlkaWZmID0gbmV3X2JsayAtIG9sZF9ibGs7CisKKyNpZmRlZiBSRVNJWkUyRlNfREVCVUcKKwkJaWYgKHJmcy0+ZmxhZ3MgJiBSRVNJWkVfREVCVUdfSVRBQkxFTU9WRSkKKwkJCXByaW50ZigiSXRhYmxlIG1vdmUgZ3JvdXAgJWQgYmxvY2sgJWxsdS0+JWxsdSAoZGlmZiAlbGxkKVxuIiwKKwkJCSAgICAgICBpLCBvbGRfYmxrLCBuZXdfYmxrLCBkaWZmKTsKKyNlbmRpZgorCisJCWlmICghZGlmZikKKwkJCWNvbnRpbnVlOworCQlpZiAoZGlmZiA8IDApCisJCQlkaWZmID0gMDsKKworCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCBvbGRfYmxrLAorCQkJCQkgICAgICAgZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAsCisJCQkJCSAgICAgICByZnMtPml0YWJsZV9idWYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJCS8qCisJCSAqIFRoZSBlbmQgb2YgdGhlIGlub2RlIHRhYmxlIHNlZ21lbnQgb2Z0ZW4gY29udGFpbnMKKwkJICogYWxsIHplcm9zLCBhbmQgd2UncmUgb2Z0ZW4gb25seSBtb3ZpbmcgdGhlIGlub2RlCisJCSAqIHRhYmxlIGRvd24gYSBibG9jayBvciB0d28uICBJZiBzbywgd2UgY2FuIG9wdGltaXplCisJCSAqIHRoaW5ncyBieSBub3QgcmV3cml0aW5nIGJsb2NrcyB0aGF0IHdlIGtub3cgdG8gYmUgemVybworCQkgKiBhbHJlYWR5LgorCQkgKi8KKwkJZm9yIChjcCA9IHJmcy0+aXRhYmxlX2J1ZitzaXplLTEsIG49MDsgbiA8IHNpemU7IG4rKywgY3AtLSkKKwkJCWlmICgqY3ApCisJCQkJYnJlYWs7CisJCW4gPSBuID4+IEVYVDJfQkxPQ0tfU0laRV9CSVRTKGZzLT5zdXBlcik7CisjaWZkZWYgUkVTSVpFMkZTX0RFQlVHCisJCWlmIChyZnMtPmZsYWdzICYgUkVTSVpFX0RFQlVHX0lUQUJMRU1PVkUpCisJCQlwcmludGYoIiVkIGJsb2NrcyBvZiB6ZXJvcy4uLlxuIiwgbik7CisjZW5kaWYKKwkJbnVtID0gZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCWlmIChuID4gZGlmZikKKwkJCW51bSAtPSBuOworCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBuZXdfYmxrLAorCQkJCQkJbnVtLCByZnMtPml0YWJsZV9idWYpOworCQlpZiAocmV0dmFsKSB7CisJCQlpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgb2xkX2JsaywKKwkJCQkJICAgICAgIG51bSwgcmZzLT5pdGFibGVfYnVmKTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWlmIChuID4gZGlmZikgeworCQkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sCisJCQkgICAgICBvbGRfYmxrICsgZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAsCisJCQkgICAgICBkaWZmLCAocmZzLT5pdGFibGVfYnVmICsKKwkJCQkgICAgIChmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCAtIGRpZmYpICoKKwkJCQkgICAgIGZzLT5ibG9ja3NpemUpKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisJCX0KKworCQlmb3IgKGJsayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MocmZzLT5vbGRfZnMsIGkpLCBqPTA7CisJCSAgICAgaiA8IGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwOykgeworCQkJaWYgKG5ld19ibWFwID09IE5VTEwgfHwKKwkJCSAgICAhZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihuZXdfYm1hcCwgYmxrKSkgeworCQkJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIGJsaywgLTEpOworCQkJCWNsdXN0ZXJfZnJlZWQgPSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykgLQorCQkJCQkJKGJsayAmIEVYVDJGU19DTFVTVEVSX01BU0soZnMpKTsKKwkJCQlibGsgKz0gY2x1c3Rlcl9mcmVlZDsKKwkJCQlqICs9IGNsdXN0ZXJfZnJlZWQ7CisJCQkJY29udGludWU7CisJCQl9CisJCQlibGsrKzsKKwkJCWorKzsKKwkJfQorCisJCWV4dDJmc19pbm9kZV90YWJsZV9sb2Nfc2V0KHJmcy0+b2xkX2ZzLCBpLCBuZXdfYmxrKTsKKwkJZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV9zZXQocmZzLT5vbGRfZnMsIGkpOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShyZnMtPm9sZF9mcyk7CisJCWV4dDJmc19mbHVzaChyZnMtPm9sZF9mcyk7CisKKwkJaWYgKHJmcy0+cHJvZ3Jlc3MpIHsKKwkJCXJldHZhbCA9IHJmcy0+cHJvZ3Jlc3MocmZzLCBFMl9SU1pfTU9WRV9JVEFCTEVfUEFTUywKKwkJCQkJICAgICAgICsrbW92ZWQsIHRvX21vdmUpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycm91dDsKKwkJfQorCX0KKwltYXJrX3RhYmxlX2Jsb2NrcyhmcywgZnMtPmJsb2NrX21hcCk7CisJZXh0MmZzX2ZsdXNoKGZzKTsKKyNpZmRlZiBSRVNJWkUyRlNfREVCVUcKKwlpZiAocmZzLT5mbGFncyAmIFJFU0laRV9ERUJVR19JVEFCTEVNT1ZFKQorCQlwcmludGYoIklub2RlIHRhYmxlIG1vdmUgZmluaXNoZWQuXG4iKTsKKyNlbmRpZgorCXJldHZhbCA9IDA7CisKK2Vycm91dDoKKwlpZiAobmV3X2JtYXApCisJCWV4dDJmc19mcmVlX2Jsb2NrX2JpdG1hcChuZXdfYm1hcCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aGVuIGV4cGFuZGluZyBhIGZpbGUgc3lzdGVtLiAgSXQgZnJlZXMgdGhlCisgKiBzdXBlcmJsb2NrIGFuZCBibG9jayBncm91cCBkZXNjcmlwdG9yIGJsb2NrcyBmcm9tIHRoZSBibG9jayBncm91cAorICogd2hpY2ggaXMgbm8gbG9uZ2VyIHRoZSBsYXN0IGJsb2NrIGdyb3VwLgorICovCitzdGF0aWMgZXJyY29kZV90IGNsZWFyX3NwYXJzZV9zdXBlcjJfbGFzdF9ncm91cChleHQyX3Jlc2l6ZV90IHJmcykKK3sKKwlleHQyX2ZpbHN5cwlmcyA9IHJmcy0+bmV3X2ZzOworCWV4dDJfZmlsc3lzCW9sZF9mcyA9IHJmcy0+b2xkX2ZzOworCWVycmNvZGVfdAlyZXR2YWw7CisJZGdycF90CQlvbGRfbGFzdF9iZyA9IHJmcy0+b2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50IC0gMTsKKwlkZ3JwX3QJCWxhc3RfYmcgPSBmcy0+Z3JvdXBfZGVzY19jb3VudCAtIDE7CisJYmxrNjRfdAkJc2IsIG9sZF9kZXNjOworCWJsa190CQludW07CisKKwlpZiAoIShmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfQ09NUEFUX1NQQVJTRV9TVVBFUjIpKQorCQlyZXR1cm4gMDsKKworCWlmIChsYXN0X2JnIDw9IG9sZF9sYXN0X2JnKQorCQlyZXR1cm4gMDsKKworCWlmIChmcy0+c3VwZXItPnNfYmFja3VwX2Jnc1swXSA9PSBvbGRfZnMtPnN1cGVyLT5zX2JhY2t1cF9iZ3NbMF0gJiYKKwkgICAgZnMtPnN1cGVyLT5zX2JhY2t1cF9iZ3NbMV0gPT0gb2xkX2ZzLT5zdXBlci0+c19iYWNrdXBfYmdzWzFdKQorCQlyZXR1cm4gMDsKKworCWlmIChvbGRfZnMtPnN1cGVyLT5zX2JhY2t1cF9iZ3NbMF0gIT0gb2xkX2xhc3RfYmcgJiYKKwkgICAgb2xkX2ZzLT5zdXBlci0+c19iYWNrdXBfYmdzWzFdICE9IG9sZF9sYXN0X2JnKQorCQlyZXR1cm4gMDsKKworCWlmIChmcy0+c3VwZXItPnNfYmFja3VwX2Jnc1swXSA9PSBvbGRfbGFzdF9iZyB8fAorCSAgICBmcy0+c3VwZXItPnNfYmFja3VwX2Jnc1sxXSA9PSBvbGRfbGFzdF9iZykKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBleHQyZnNfc3VwZXJfYW5kX2JnZF9sb2MyKHJmcy0+b2xkX2ZzLCBvbGRfbGFzdF9iZywKKwkJCQkJICAgJnNiLCAmb2xkX2Rlc2MsIE5VTEwsICZudW0pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoc2IpCisJCWV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLCBzYik7CisJaWYgKG9sZF9kZXNjKQorCQlleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIoZnMtPmJsb2NrX21hcCwgb2xkX2Rlc2MsIG51bSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBzaHJpbmtpbmcgYSBmaWxlIHN5c3RlbS4gIFdlIG5lZWQgdG8KKyAqIHV0aWxpemUgYmxvY2tzIGZyb20gd2hhdCB3aWxsIGJlIHRoZSBuZXcgbGFzdCBibG9jayBncm91cCBmb3IgdGhlCisgKiBiYWNrdXAgc3VwZXJibG9jayBhbmQgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBibG9ja3MuCisgKiBVbmZvcnR1bmF0ZWx5LCB0aG9zZSBibG9ja3MgbWF5IGJlIHVzZWQgYnkgb3RoZXIgZmlsZXMgb3IgZnMKKyAqIG1ldGFkYXRhIGJsb2Nrcy4gIFdlIG5lZWQgdG8gbWFyayB0aGVtIGFzIGJlaW5nIGluIHVzZS4KKyAqLworc3RhdGljIGVycmNvZGVfdCByZXNlcnZlX3NwYXJzZV9zdXBlcjJfbGFzdF9ncm91cChleHQyX3Jlc2l6ZV90IHJmcywKKwkJCQkJCSBleHQyZnNfYmxvY2tfYml0bWFwIG1ldGFfYm1hcCkKK3sKKwlleHQyX2ZpbHN5cwlmcyA9IHJmcy0+bmV3X2ZzOworCWV4dDJfZmlsc3lzCW9sZF9mcyA9IHJmcy0+b2xkX2ZzOworCWVycmNvZGVfdAlyZXR2YWw7CisJZGdycF90CQlvbGRfbGFzdF9iZyA9IHJmcy0+b2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50IC0gMTsKKwlkZ3JwX3QJCWxhc3RfYmcgPSBmcy0+Z3JvdXBfZGVzY19jb3VudCAtIDE7CisJZGdycF90CQlnOworCWJsazY0X3QJCWJsaywgc2IsIG9sZF9kZXNjOworCWJsa190CQlpLCBudW07CisJaW50CQlyZWFsbG9jID0gMDsKKworCWlmICghKGZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDRfRkVBVFVSRV9DT01QQVRfU1BBUlNFX1NVUEVSMikpCisJCXJldHVybiAwOworCisJaWYgKGxhc3RfYmcgPj0gb2xkX2xhc3RfYmcpCisJCXJldHVybiAwOworCisJaWYgKGZzLT5zdXBlci0+c19iYWNrdXBfYmdzWzBdID09IG9sZF9mcy0+c3VwZXItPnNfYmFja3VwX2Jnc1swXSAmJgorCSAgICBmcy0+c3VwZXItPnNfYmFja3VwX2Jnc1sxXSA9PSBvbGRfZnMtPnN1cGVyLT5zX2JhY2t1cF9iZ3NbMV0pCisJCXJldHVybiAwOworCisJaWYgKGZzLT5zdXBlci0+c19iYWNrdXBfYmdzWzBdICE9IGxhc3RfYmcgJiYKKwkgICAgZnMtPnN1cGVyLT5zX2JhY2t1cF9iZ3NbMV0gIT0gbGFzdF9iZykKKwkJcmV0dXJuIDA7CisKKwlpZiAob2xkX2ZzLT5zdXBlci0+c19iYWNrdXBfYmdzWzBdID09IGxhc3RfYmcgfHwKKwkgICAgb2xkX2ZzLT5zdXBlci0+c19iYWNrdXBfYmdzWzFdID09IGxhc3RfYmcpCisJCXJldHVybiAwOworCisJcmV0dmFsID0gZXh0MmZzX3N1cGVyX2FuZF9iZ2RfbG9jMihyZnMtPm5ld19mcywgbGFzdF9iZywKKwkJCQkJICAgJnNiLCAmb2xkX2Rlc2MsIE5VTEwsICZudW0pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoIXNiKSB7CisJCWZwdXRzKF8oIlNob3VsZCBuZXZlciBoYXBwZW4hICBObyBzYiBpbiBsYXN0IHN1cGVyX3NwYXJzZSBiZz9cbiIpLAorCQkgICAgICBzdGRlcnIpOworCQlleGl0KDEpOworCX0KKwlpZiAob2xkX2Rlc2MgJiYgb2xkX2Rlc2MgIT0gc2IrMSkgeworCQlmcHV0cyhfKCJTaG91bGQgbmV2ZXIgaGFwcGVuISAgVW5leHBlY3RlZCBvbGRfZGVzYyBpbiAiCisJCQkic3VwZXJfc3BhcnNlIGJnP1xuIiksCisJCSAgICAgIHN0ZGVycik7CisJCWV4aXQoMSk7CisJfQorCW51bSA9IChvbGRfZGVzYykgPyBudW0gOiAxOworCisJLyogUmVzZXJ2ZSB0aGUgYmFja3VwIGJsb2NrcyAqLworCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIoZnMtPmJsb2NrX21hcCwgc2IsIG51bSk7CisKKwlmb3IgKGcgPSAwOyBnIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGcrKykgeworCQlibGs2NF90IG1iOworCisJCW1iID0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGcpOworCQlpZiAoKG1iID49IHNiKSAmJiAobWIgPCBzYiArIG51bSkpIHsKKwkJCWV4dDJmc19ibG9ja19iaXRtYXBfbG9jX3NldChmcywgZywgMCk7CisJCQlyZWFsbG9jID0gMTsKKwkJfQorCQltYiA9IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBnKTsKKwkJaWYgKChtYiA+PSBzYikgJiYgKG1iIDwgc2IgKyBudW0pKSB7CisJCQlleHQyZnNfaW5vZGVfYml0bWFwX2xvY19zZXQoZnMsIGcsIDApOworCQkJcmVhbGxvYyA9IDE7CisJCX0KKwkJbWIgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBnKTsKKwkJaWYgKChtYiA8IHNiICsgbnVtKSAmJgorCQkgICAgKHNiIDwgbWIgKyBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCkpIHsKKwkJCWV4dDJmc19pbm9kZV90YWJsZV9sb2Nfc2V0KGZzLCBnLCAwKTsKKwkJCXJlYWxsb2MgPSAxOworCQl9CisJCWlmIChyZWFsbG9jKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfZ3JvdXBfdGFibGUoZnMsIGcsIDApOworCQkJaWYgKHJldHZhbCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJfQorCisJZm9yIChibGsgPSBzYiwgaSA9IDA7IGkgPCBudW07IGJsaysrLCBpKyspIHsKKwkJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIob2xkX2ZzLT5ibG9ja19tYXAsIGJsaykgJiYKKwkJICAgICFleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKG1ldGFfYm1hcCwgYmxrKSkgeworCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihyZnMtPm1vdmVfYmxvY2tzLCBibGspOworCQkJcmZzLT5uZWVkZWRfYmxvY2tzKys7CisJCX0KKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihyZnMtPnJlc2VydmVfYmxvY2tzLCBibGspOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZpeCB0aGUgcmVzaXplIGlub2RlCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgZml4X3Jlc2l6ZV9pbm9kZShleHQyX2ZpbHN5cyBmcykKK3sKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwljaGFyCQkJKmJsb2NrX2J1ZiA9IE5VTEw7CisKKwlpZiAoIShmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJgorCSAgICAgIEVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmYmxvY2tfYnVmKTsKKwlpZiAocmV0dmFsKSBnb3RvIGVycm91dDsKKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBFWFQyX1JFU0laRV9JTk8sICZpbm9kZSk7CisJaWYgKHJldHZhbCkgZ290byBlcnJvdXQ7CisKKwlleHQyZnNfaWJsa19zZXQoZnMsICZpbm9kZSwgMSk7CisKKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoZnMsIEVYVDJfUkVTSVpFX0lOTywgJmlub2RlKTsKKwlpZiAocmV0dmFsKSBnb3RvIGVycm91dDsKKworCWlmICghaW5vZGUuaV9ibG9ja1tFWFQyX0RJTkRfQkxPQ0tdKSB7CisJCS8qCisJCSAqIEF2b2lkIHplcm9pbmcgb3V0IGJsb2NrICMwOyB0aGF0J3MgcnVkZS4gIFRoaXMKKwkJICogc2hvdWxkIG5ldmVyIGhhcHBlbiBhbnl3YXkgc2luY2UgdGhlIGZpbGVzeXN0ZW0KKwkJICogc2hvdWxkIGJlIGZzY2snZWQgYW5kIHdlIGFzc3VtZSBpdCBpcyBjb25zaXN0ZW50LgorCQkgKi8KKwkJZnByaW50ZihzdGRlcnIsICIlcyIsCisJCQlfKCJTaG91bGQgbmV2ZXIgaGFwcGVuOiByZXNpemUgaW5vZGUgY29ycnVwdCFcbiIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwltZW1zZXQoYmxvY2tfYnVmLCAwLCBmcy0+YmxvY2tzaXplKTsKKworCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBpbm9kZS5pX2Jsb2NrW0VYVDJfRElORF9CTE9DS10sCisJCQkJCTEsIGJsb2NrX2J1Zik7CisJaWYgKHJldHZhbCkgZ290byBlcnJvdXQ7CisKKwlyZXR2YWwgPSBleHQyZnNfY3JlYXRlX3Jlc2l6ZV9pbm9kZShmcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKK2Vycm91dDoKKwlpZiAoYmxvY2tfYnVmKQorCQlleHQyZnNfZnJlZV9tZW0oJmJsb2NrX2J1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIEZpbmFsbHksIHJlY2FsY3VsYXRlIHRoZSBzdW1tYXJ5IGluZm9ybWF0aW9uCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgZXh0MmZzX2NhbGN1bGF0ZV9zdW1tYXJ5X3N0YXRzKGV4dDJfZmlsc3lzIGZzKQoreworCWJsazY0X3QJCWJsazsKKwlleHQyX2lub190CWlubzsKKwl1bnNpZ25lZCBpbnQJZ3JvdXAgPSAwOworCXVuc2lnbmVkIGludAljb3VudCA9IDA7CisJYmxrNjRfdAkJdG90YWxfYmxvY2tzX2ZyZWUgPSAwOworCWludAkJdG90YWxfaW5vZGVzX2ZyZWUgPSAwOworCWludAkJZ3JvdXBfZnJlZSA9IDA7CisJaW50CQl1bmluaXQgPSAwOworCWJsazY0X3QJCXN1cGVyX2Jsaywgb2xkX2Rlc2NfYmxrLCBuZXdfZGVzY19ibGs7CisJaW50CQlvbGRfZGVzY19ibG9ja3M7CisKKwkvKgorCSAqIEZpcnN0IGNhbGN1bGF0ZSB0aGUgYmxvY2sgc3RhdGlzdGljcworCSAqLworCXVuaW5pdCA9IGV4dDJmc19iZ19mbGFnc190ZXN0KGZzLCBncm91cCwgRVhUMl9CR19CTE9DS19VTklOSVQpOworCWV4dDJmc19zdXBlcl9hbmRfYmdkX2xvYzIoZnMsIGdyb3VwLCAmc3VwZXJfYmxrLCAmb2xkX2Rlc2NfYmxrLAorCQkJCSAgJm5ld19kZXNjX2JsaywgMCk7CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworCWVsc2UKKwkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPmRlc2NfYmxvY2tzICsKKwkJCWZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzOworCWZvciAoYmxrID0gQjJDKGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKTsKKwkgICAgIGJsayA8IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsKKwkgICAgIGJsayArPSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykpIHsKKwkJaWYgKCh1bmluaXQgJiYKKwkJICAgICAhKEVRX0NMU1RSKGJsaywgc3VwZXJfYmxrKSB8fAorCQkgICAgICAgKChvbGRfZGVzY19ibGsgJiYgb2xkX2Rlc2NfYmxvY2tzICYmCisJCQkgR0VfQ0xTVFIoYmxrLCBvbGRfZGVzY19ibGspICYmCisJCQkgTFRfQ0xTVFIoYmxrLCBvbGRfZGVzY19ibGsgKyBvbGRfZGVzY19ibG9ja3MpKSkgfHwKKwkJICAgICAgICgobmV3X2Rlc2NfYmxrICYmIEVRX0NMU1RSKGJsaywgbmV3X2Rlc2NfYmxrKSkpIHx8CisJCSAgICAgICBFUV9DTFNUUihibGssIGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBncm91cCkpIHx8CisJCSAgICAgICBFUV9DTFNUUihibGssIGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBncm91cCkpIHx8CisJCSAgICAgICAoKEdFX0NMU1RSKGJsaywgZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgZ3JvdXApKSAmJgorCQkJIExUX0NMU1RSKGJsaywgZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgZ3JvdXApCisJCQkJICArIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKSkpKSkgfHwKKwkJICAgICghZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsIGJsaykpKSB7CisJCQlncm91cF9mcmVlKys7CisJCQl0b3RhbF9ibG9ja3NfZnJlZSsrOworCQl9CisJCWNvdW50Kys7CisJCWlmICgoY291bnQgPT0gZnMtPnN1cGVyLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCkgfHwKKwkJICAgIEVRX0NMU1RSKGJsaywgZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpLTEpKSB7CisJCQlleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLCBncm91cCwgZ3JvdXBfZnJlZSk7CisJCQlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgZ3JvdXApOworCQkJZ3JvdXArKzsKKwkJCWlmIChncm91cCA+PSBmcy0+Z3JvdXBfZGVzY19jb3VudCkKKwkJCQlicmVhazsKKwkJCWNvdW50ID0gMDsKKwkJCWdyb3VwX2ZyZWUgPSAwOworCQkJdW5pbml0ID0gZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGdyb3VwLCBFWFQyX0JHX0JMT0NLX1VOSU5JVCk7CisJCQlleHQyZnNfc3VwZXJfYW5kX2JnZF9sb2MyKGZzLCBncm91cCwgJnN1cGVyX2JsaywKKwkJCQkJCSAgJm9sZF9kZXNjX2JsaywKKwkJCQkJCSAgJm5ld19kZXNjX2JsaywgMCk7CisJCQlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQkJICAgIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorCQkJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworCQkJZWxzZQorCQkJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5kZXNjX2Jsb2NrcyArCisJCQkJCWZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzOworCQl9CisJfQorCXRvdGFsX2Jsb2Nrc19mcmVlID0gQzJCKHRvdGFsX2Jsb2Nrc19mcmVlKTsKKwlleHQyZnNfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLT5zdXBlciwgdG90YWxfYmxvY2tzX2ZyZWUpOworCisJLyoKKwkgKiBOZXh0LCBjYWxjdWxhdGUgdGhlIGlub2RlIHN0YXRpc3RpY3MKKwkgKi8KKwlncm91cF9mcmVlID0gMDsKKwljb3VudCA9IDA7CisJZ3JvdXAgPSAwOworCisJLyogUHJvdGVjdCBsb29wIGZyb20gd3JhcC1hcm91bmQgaWYgc19pbm9kZXNfY291bnQgbWF4ZWQgKi8KKwl1bmluaXQgPSBleHQyZnNfYmdfZmxhZ3NfdGVzdChmcywgZ3JvdXAsIEVYVDJfQkdfSU5PREVfVU5JTklUKTsKKwlmb3IgKGlubyA9IDE7IGlubyA8PSBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50ICYmIGlubyA+IDA7IGlubysrKSB7CisJCWlmICh1bmluaXQgfHwKKwkJICAgICFleHQyZnNfZmFzdF90ZXN0X2lub2RlX2JpdG1hcDIoZnMtPmlub2RlX21hcCwgaW5vKSkgeworCQkJZ3JvdXBfZnJlZSsrOworCQkJdG90YWxfaW5vZGVzX2ZyZWUrKzsKKwkJfQorCQljb3VudCsrOworCQlpZiAoKGNvdW50ID09IGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwKSB8fAorCQkgICAgKGlubyA9PSBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KSkgeworCQkJZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50X3NldChmcywgZ3JvdXAsIGdyb3VwX2ZyZWUpOworCQkJZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV9zZXQoZnMsIGdyb3VwKTsKKwkJCWdyb3VwKys7CisJCQlpZiAoZ3JvdXAgPj0gZnMtPmdyb3VwX2Rlc2NfY291bnQpCisJCQkJYnJlYWs7CisJCQljb3VudCA9IDA7CisJCQlncm91cF9mcmVlID0gMDsKKwkJCXVuaW5pdCA9IGV4dDJmc19iZ19mbGFnc190ZXN0KGZzLCBncm91cCwgRVhUMl9CR19JTk9ERV9VTklOSVQpOworCQl9CisJfQorCWZzLT5zdXBlci0+c19mcmVlX2lub2Rlc19jb3VudCA9IHRvdGFsX2lub2Rlc19mcmVlOworCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICBKb3VybmFsIG1heSBoYXZlIGJlZW4gcmVsb2NhdGVkOyB1cGRhdGUgdGhlIGJhY2t1cCBqb3VybmFsIGJsb2NrcworICogIGluIHRoZSBzdXBlcmJsb2NrLgorICovCitzdGF0aWMgZXJyY29kZV90IGZpeF9zYl9qb3VybmFsX2JhY2t1cChleHQyX2ZpbHN5cyBmcykKK3sKKwllcnJjb2RlX3QJICByZXR2YWw7CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisKKwlpZiAoIShmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBFeHRlcm5hbCBqb3VybmFsPyBOb3RoaW5nIHRvIGRvLiAqLworCWlmIChmcy0+c3VwZXItPnNfam91cm5hbF9kZXYgJiYgIWZzLT5zdXBlci0+c19qb3VybmFsX2ludW0pCisJCXJldHVybiAwOworCisJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIGZzLT5zdXBlci0+c19qb3VybmFsX2ludW0sICZpbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwltZW1jcHkoZnMtPnN1cGVyLT5zX2pubF9ibG9ja3MsIGlub2RlLmlfYmxvY2ssIEVYVDJfTl9CTE9DS1MqNCk7CisJZnMtPnN1cGVyLT5zX2pubF9ibG9ja3NbMTVdID0gaW5vZGUuaV9zaXplX2hpZ2g7CisJZnMtPnN1cGVyLT5zX2pubF9ibG9ja3NbMTZdID0gaW5vZGUuaV9zaXplOworCWZzLT5zdXBlci0+c19qbmxfYmFja3VwX3R5cGUgPSBFWFQzX0pOTF9CQUNLVVBfQkxPQ0tTOworCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYWxjX2dyb3VwX292ZXJoZWFkKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90IGdycCwKKwkJCSAgICAgICBpbnQgb2xkX2Rlc2NfYmxvY2tzKQoreworCWJsazY0X3QJc3VwZXJfYmxrLCBvbGRfZGVzY19ibGssIG5ld19kZXNjX2JsazsKKwlpbnQgb3ZlcmhlYWQ7CisKKwkvKiBpbm9kZSB0YWJsZSBibG9ja3MgcGx1cyBhbGxvY2F0aW9uIGJpdG1hcHMgKi8KKwlvdmVyaGVhZCA9IGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwICsgMjsKKworCWV4dDJmc19zdXBlcl9hbmRfYmdkX2xvYzIoZnMsIGdycCwgJnN1cGVyX2JsaywKKwkJCQkgICZvbGRfZGVzY19ibGssICZuZXdfZGVzY19ibGssIDApOworCWlmICgoZ3JwID09IDApIHx8IHN1cGVyX2JsaykKKwkJb3ZlcmhlYWQrKzsKKwlpZiAob2xkX2Rlc2NfYmxrKQorCQlvdmVyaGVhZCArPSBvbGRfZGVzY19ibG9ja3M7CisJZWxzZSBpZiAobmV3X2Rlc2NfYmxrKQorCQlvdmVyaGVhZCsrOworCXJldHVybiBvdmVyaGVhZDsKK30KKworCisvKgorICogY2FsY2x1YXRlIHRoZSBtaW5pbXVtIG51bWJlciBvZiBibG9ja3MgdGhlIGdpdmVuIGZzIGNhbiBiZSByZXNpemVkIHRvCisgKi8KK2JsazY0X3QgY2FsY3VsYXRlX21pbmltdW1fcmVzaXplX3NpemUoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncykKK3sKKwlleHQyX2lub190IGlub2RlX2NvdW50OworCWRncnBfdCBncm91cHMsIGZsZXhfZ3JvdXBzOworCWJsazY0X3QgYmxrc19uZWVkZWQsIGRhdGFfYmxvY2tzOworCWJsazY0X3QgZ3JwLCBkYXRhX25lZWRlZCwgbGFzdF9zdGFydDsKKwlibGs2NF90IG92ZXJoZWFkID0gMDsKKwlpbnQgb2xkX2Rlc2NfYmxvY2tzOworCWludCBmbGV4Ymdfc2l6ZSA9IDEgPDwgZnMtPnN1cGVyLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXg7CisKKwkvKgorCSAqIGZpcnN0IGZpZ3VyZSBvdXQgaG93IG1hbnkgZ3JvdXAgZGVzY3JpcHRvcnMgd2UgbmVlZCB0bworCSAqIGhhbmRsZSB0aGUgbnVtYmVyIG9mIGlub2RlcyB3ZSBoYXZlCisJICovCisJaW5vZGVfY291bnQgPSBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50IC0KKwkJZnMtPnN1cGVyLT5zX2ZyZWVfaW5vZGVzX2NvdW50OworCWJsa3NfbmVlZGVkID0gZXh0MmZzX2Rpdl9jZWlsKGlub2RlX2NvdW50LAorCQkJCSAgICAgIGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwKSAqCisJCShibGs2NF90KSBFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKTsKKwlncm91cHMgPSBleHQyZnNfZGl2NjRfY2VpbChibGtzX25lZWRlZCwKKwkJCQkgICBFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKSk7CisjaWZkZWYgUkVTSVpFMkZTX0RFQlVHCisJaWYgKGZsYWdzICYgUkVTSVpFX0RFQlVHX01JTl9DQUxDKQorCQlwcmludGYoImZzIGhhcyAlZCBpbm9kZXMsICVkIGdyb3VwcyByZXF1aXJlZC5cbiIsCisJCSAgICAgICBpbm9kZV9jb3VudCwgZ3JvdXBzKTsKKyNlbmRpZgorCisJLyoKKwkgKiBudW1iZXIgb2Ygb2xkLXN0eWxlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzCisJICovCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworCWVsc2UKKwkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPmRlc2NfYmxvY2tzICsKKwkJCWZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzOworCisJLyogY2FsY3VsYXRlIGhvdyBtYW55IGJsb2NrcyBhcmUgbmVlZGVkIGZvciBkYXRhICovCisJZGF0YV9uZWVkZWQgPSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLQorCQlleHQyZnNfZnJlZV9ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsKKworCWZvciAoZ3JwID0gMDsgZ3JwIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGdycCsrKQorCQlkYXRhX25lZWRlZCAtPSBjYWxjX2dyb3VwX292ZXJoZWFkKGZzLCBncnAsIG9sZF9kZXNjX2Jsb2Nrcyk7CisjaWZkZWYgUkVTSVpFMkZTX0RFQlVHCisJaWYgKGZsYWdzICYgUkVTSVpFX0RFQlVHX01JTl9DQUxDKQorCQlwcmludGYoImZzIHJlcXVpcmVzICVsbHUgZGF0YSBibG9ja3MuXG4iLCBkYXRhX25lZWRlZCk7CisjZW5kaWYKKworCS8qCisJICogRm9yIGV4dDQgd2UgbmVlZCB0byBhbGxvdyBmb3IgdXAgdG8gYSBmbGV4X2JnIHdvcnRoIG9mCisJICogaW5vZGUgdGFibGVzIG9mIHNsYWNrIHNwYWNlIHNvIHRoZSByZXNpemUgb3BlcmF0aW9uIGNhbiBiZQorCSAqIGd1YXJhbnRlZWQgdG8gZmluaXNoLgorCSAqLworCWZsZXhfZ3JvdXBzID0gZ3JvdXBzOworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHKSB7CisJCWRncnBfdCByZW1haW5kZXIgPSBncm91cHMgJiAoZmxleGJnX3NpemUgLSAxKTsKKworCQlmbGV4X2dyb3VwcyArPSBmbGV4Ymdfc2l6ZSAtIHJlbWFpbmRlcjsKKwkJaWYgKGZsZXhfZ3JvdXBzID4gZnMtPmdyb3VwX2Rlc2NfY291bnQpCisJCQlmbGV4X2dyb3VwcyA9IGZzLT5ncm91cF9kZXNjX2NvdW50OworCX0KKworCS8qCisJICogZmlndXJlIG91dCBob3cgbWFueSBkYXRhIGJsb2NrcyB3ZSBoYXZlIGdpdmVuIHRoZSBudW1iZXIgb2YgZ3JvdXBzCisJICogd2UgbmVlZCBmb3Igb3VyIGlub2RlcworCSAqLworCWRhdGFfYmxvY2tzID0gRVhUMl9HUk9VUFNfVE9fQkxPQ0tTKGZzLT5zdXBlciwgZ3JvdXBzKTsKKwlsYXN0X3N0YXJ0ID0gMDsKKwlmb3IgKGdycCA9IDA7IGdycCA8IGZsZXhfZ3JvdXBzOyBncnArKykgeworCQlvdmVyaGVhZCA9IGNhbGNfZ3JvdXBfb3ZlcmhlYWQoZnMsIGdycCwgb2xkX2Rlc2NfYmxvY2tzKTsKKworCQkvKgorCQkgKiB3ZSB3YW50IHRvIGtlZXAgdHJhY2sgb2YgaG93IG11Y2ggZGF0YSB3ZSBjYW4gc3RvcmUgaW4KKwkJICogdGhlIGdyb3VwcyBsZWFkaW5nIHVwIHRvIHRoZSBsYXN0IGdyb3VwIHNvIHdlIGNhbiBkZXRlcm1pbmUKKwkJICogaG93IGJpZyB0aGUgbGFzdCBncm91cCBuZWVkcyB0byBiZQorCQkgKi8KKwkJaWYgKGdycCA8IChncm91cHMgLSAxKSkKKwkJCWxhc3Rfc3RhcnQgKz0gRVhUMl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zdXBlcikgLQorCQkJCW92ZXJoZWFkOworCisJCWlmIChkYXRhX2Jsb2NrcyA+IG92ZXJoZWFkKQorCQkJZGF0YV9ibG9ja3MgLT0gb3ZlcmhlYWQ7CisJCWVsc2UKKwkJCWRhdGFfYmxvY2tzID0gMDsKKwl9CisjaWZkZWYgUkVTSVpFMkZTX0RFQlVHCisJaWYgKGZsYWdzICYgUkVTSVpFX0RFQlVHX01JTl9DQUxDKQorCQlwcmludGYoIldpdGggJWQgZ3JvdXAocyksIHdlIGhhdmUgJWxsdSBibG9ja3MgYXZhaWxhYmxlLlxuIiwKKwkJICAgICAgIGdyb3VwcywgZGF0YV9ibG9ja3MpOworI2VuZGlmCisKKwkvKgorCSAqIGlmIHdlIG5lZWQgbW9yZSBncm91cCBkZXNjcmlwdG9ycyBpbiBvcmRlciB0byBhY2NvbW9kYXRlIG91ciBkYXRhCisJICogdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGVtIGhlcmUKKwkgKi8KKwlibGtzX25lZWRlZCA9IGRhdGFfbmVlZGVkOworCXdoaWxlIChibGtzX25lZWRlZCA+IGRhdGFfYmxvY2tzKSB7CisJCWJsazY0X3QgcmVtYWluZGVyID0gYmxrc19uZWVkZWQgLSBkYXRhX2Jsb2NrczsKKwkJZGdycF90IGV4dHJhX2dycHM7CisKKwkJLyogZmlndXJlIG91dCBob3cgbWFueSBtb3JlIGdyb3VwcyB3ZSBuZWVkIGZvciB0aGUgZGF0YSAqLworCQlleHRyYV9ncnBzID0gZXh0MmZzX2RpdjY0X2NlaWwocmVtYWluZGVyLAorCQkJCQkgICAgICAgRVhUMl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zdXBlcikpOworCisJCWRhdGFfYmxvY2tzICs9IEVYVDJfR1JPVVBTX1RPX0JMT0NLUyhmcy0+c3VwZXIsIGV4dHJhX2dycHMpOworCisJCS8qIG9rIHdlIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhlIGxhc3QgZ3JvdXAgKi8KKwkJb3ZlcmhlYWQgPSBjYWxjX2dyb3VwX292ZXJoZWFkKGZzLCBncm91cHMtMSwgb2xkX2Rlc2NfYmxvY2tzKTsKKwkJbGFzdF9zdGFydCArPSBFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKSAtIG92ZXJoZWFkOworCisJCWdycCA9IGZsZXhfZ3JvdXBzOworCQlncm91cHMgKz0gZXh0cmFfZ3JwczsKKwkJaWYgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQkgICAgICBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRykpCisJCQlmbGV4X2dyb3VwcyA9IGdyb3VwczsKKwkJZWxzZSBpZiAoZ3JvdXBzID4gZmxleF9ncm91cHMpIHsKKwkJCWRncnBfdCByID0gZ3JvdXBzICYgKGZsZXhiZ19zaXplIC0gMSk7CisKKwkJCWZsZXhfZ3JvdXBzID0gZ3JvdXBzICsgZmxleGJnX3NpemUgLSByOworCQkJaWYgKGZsZXhfZ3JvdXBzID4gZnMtPmdyb3VwX2Rlc2NfY291bnQpCisJCQkJZmxleF9ncm91cHMgPSBmcy0+Z3JvdXBfZGVzY19jb3VudDsKKwkJfQorCisJCWZvciAoOyBncnAgPCBmbGV4X2dyb3VwczsgZ3JwKyspIHsKKwkJCW92ZXJoZWFkID0gY2FsY19ncm91cF9vdmVyaGVhZChmcywgZ3JwLAorCQkJCQkJICAgICAgIG9sZF9kZXNjX2Jsb2Nrcyk7CisKKwkJCS8qCisJCQkgKiBhZ2Fpbiwgd2UgbmVlZCB0byBzZWUgaG93IG11Y2ggZGF0YSB3ZSBjcmFtIGludG8KKwkJCSAqIGFsbCBvZiB0aGUgZ3JvdXBzIGxlYWRpbmcgdXAgdG8gdGhlIGxhc3QgZ3JvdXAKKwkJCSAqLworCQkJaWYgKGdycCA8IGdyb3VwcyAtIDEpCisJCQkJbGFzdF9zdGFydCArPSBFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKQorCQkJCQktIG92ZXJoZWFkOworCisJCQlkYXRhX2Jsb2NrcyAtPSBvdmVyaGVhZDsKKwkJfQorCisjaWZkZWYgUkVTSVpFMkZTX0RFQlVHCisJCWlmIChmbGFncyAmIFJFU0laRV9ERUJVR19NSU5fQ0FMQykKKwkJCXByaW50ZigiQWRkZWQgJWQgZXh0cmEgZ3JvdXAocyksICIKKwkJCSAgICAgICAiYmxrc19uZWVkZWQgJWxsdSwgZGF0YV9ibG9ja3MgJWxsdSwgIgorCQkJICAgICAgICJsYXN0X3N0YXJ0ICVsbHVcbiIsIGV4dHJhX2dycHMsIGJsa3NfbmVlZGVkLAorCQkJICAgICAgIGRhdGFfYmxvY2tzLCBsYXN0X3N0YXJ0KTsKKyNlbmRpZgorCX0KKworCS8qIG5vdyBmb3IgdGhlIGZ1biB2b29kb28gKi8KKwlncnAgPSBncm91cHMgLSAxOworCWlmICgoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRykgJiYKKwkgICAgKGdycCAmIH4oZmxleGJnX3NpemUgLSAxKSkgPT0gMCkKKwkJZ3JwID0gZ3JwICYgfihmbGV4Ymdfc2l6ZSAtIDEpOworCW92ZXJoZWFkID0gMDsKKwlmb3IgKDsgZ3JwIDwgZmxleF9ncm91cHM7IGdycCsrKQorCQlvdmVyaGVhZCArPSBjYWxjX2dyb3VwX292ZXJoZWFkKGZzLCBncnAsIG9sZF9kZXNjX2Jsb2Nrcyk7CisKKyNpZmRlZiBSRVNJWkUyRlNfREVCVUcKKwlpZiAoZmxhZ3MgJiBSRVNJWkVfREVCVUdfTUlOX0NBTEMpCisJCXByaW50ZigiTGFzdCBncm91cCdzIG92ZXJoZWFkIGlzICVsbHVcbiIsIG92ZXJoZWFkKTsKKyNlbmRpZgorCisJLyoKKwkgKiBpZiB0aGlzIGlzIHRoZSBjYXNlIHRoZW4gdGhlIGxhc3QgZ3JvdXAgaXMgZ29pbmcgdG8gaGF2ZSBkYXRhIGluIGl0CisJICogc28gd2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIGxhc3QgZ3JvdXAgYWNjb3JkaW5nbHkKKwkgKi8KKwlpZiAobGFzdF9zdGFydCA8IGJsa3NfbmVlZGVkKSB7CisJCWJsazY0X3QgcmVtYWluZGVyID0gYmxrc19uZWVkZWQgLSBsYXN0X3N0YXJ0OworCisjaWZkZWYgUkVTSVpFMkZTX0RFQlVHCisJCWlmIChmbGFncyAmIFJFU0laRV9ERUJVR19NSU5fQ0FMQykKKwkJCXByaW50ZigiTmVlZCAlbGx1IGRhdGEgYmxvY2tzIGluIGxhc3QgZ3JvdXBcbiIsCisJCQkgICAgICAgcmVtYWluZGVyKTsKKyNlbmRpZgorCQkvKgorCQkgKiA1MCBpcyBhIG1hZ2ljIG51bWJlciB0aGF0IG1rZnMvcmVzaXplIHVzZXMgdG8gc2VlIGlmIGl0cworCQkgKiBldmVuIHdvcnRoIG1ha2luZy9yZXNpemluZyB0aGUgZnMuICBiYXNpY2FsbHkgeW91IG5lZWQgdG8KKwkJICogaGF2ZSBhdCBsZWFzdCA1MCBibG9ja3MgaW4gYWRkaXRpb24gdG8gdGhlIGJsb2NrcyBuZWVkZWQKKwkJICogZm9yIHRoZSBtZXRhZGF0YSBpbiB0aGUgbGFzdCBncm91cAorCQkgKi8KKwkJaWYgKHJlbWFpbmRlciA+IDUwKQorCQkJb3ZlcmhlYWQgKz0gcmVtYWluZGVyOworCQllbHNlCisJCQlvdmVyaGVhZCArPSA1MDsKKwl9IGVsc2UKKwkJb3ZlcmhlYWQgKz0gNTA7CisKKwlvdmVyaGVhZCArPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKyNpZmRlZiBSRVNJWkUyRlNfREVCVUcKKwlpZiAoZmxhZ3MgJiBSRVNJWkVfREVCVUdfTUlOX0NBTEMpCisJCXByaW50ZigiRmluYWwgc2l6ZSBvZiBsYXN0IGdyb3VwIGlzICVsbGRcbiIsIG92ZXJoZWFkKTsKKyNlbmRpZgorCisJLyogQWRkIGV4dHJhIHNsYWNrIGZvciBiaWdhbGxvYyBmaWxlIHN5c3RlbXMgKi8KKwlpZiAoRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpID4gMSkKKwkJb3ZlcmhlYWQgKz0gRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpICogMjsKKworCS8qCisJICogc2luY2Ugb3VyIGxhc3QgZ3JvdXAgZG9lc24ndCBoYXZlIHRvIGJlIEJMT0NLU19QRVJfR1JPVVAKKwkgKiBsYXJnZSwgd2Ugb25seSBkbyBncm91cHMtMSwgYW5kIHRoZW4gYWRkIHRoZSBudW1iZXIgb2YKKwkgKiBibG9ja3MgbmVlZGVkIHRvIGhhbmRsZSB0aGUgZ3JvdXAgZGVzY3JpcHRvciBtZXRhZGF0YStkYXRhCisJICogdGhhdCB3ZSBuZWVkCisJICovCisJYmxrc19uZWVkZWQgPSBFWFQyX0dST1VQU19UT19CTE9DS1MoZnMtPnN1cGVyLCBncm91cHMgLSAxKTsKKwlibGtzX25lZWRlZCArPSBvdmVyaGVhZDsKKworCS8qCisJICogTWFrZSBzdXJlIGJsa3NfbmVlZGVkIGNvdmVycyB0aGUgZW5kIG9mIHRoZSBpbm9kZSB0YWJsZSBpbgorCSAqIHRoZSBsYXN0IGJsb2NrIGdyb3VwLgorCSAqLworCW92ZXJoZWFkID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgZ3JvdXBzLTEpICsKKwkJZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisJaWYgKGJsa3NfbmVlZGVkIDwgb3ZlcmhlYWQpCisJCWJsa3NfbmVlZGVkID0gb3ZlcmhlYWQ7CisKKyNpZmRlZiBSRVNJWkUyRlNfREVCVUcKKwlpZiAoZmxhZ3MgJiBSRVNJWkVfREVCVUdfTUlOX0NBTEMpCisJCXByaW50ZigiRXN0aW1hdGVkIGJsb2NrcyBuZWVkZWQ6ICVsbHVcbiIsIGJsa3NfbmVlZGVkKTsKKyNlbmRpZgorCisJLyoKKwkgKiBJZiBhdCB0aGlzIHBvaW50IHdlJ3ZlIGFscmVhZHkgYWRkZWQgdXAgbW9yZSAibmVlZGVkIiB0aGFuCisJICogdGhlIGN1cnJlbnQgc2l6ZSwganVzdCByZXR1cm4gY3VycmVudCBzaXplIGFzIG1pbmltdW0uCisJICovCisJaWYgKGJsa3NfbmVlZGVkID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkKKwkJcmV0dXJuIGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsKKwkvKgorCSAqIFdlIG5lZWQgdG8gcmVzZXJ2ZSBhIGZldyBleHRyYSBibG9ja3MgaWYgZXh0ZW50cyBhcmUKKwkgKiBlbmFibGVkLCBpbiBjYXNlIHdlIG5lZWQgdG8gZ3JvdyB0aGUgZXh0ZW50IHRyZWUuICBUaGUgbW9yZQorCSAqIHdlIHNocmluayB0aGUgZmlsZSBzeXN0ZW0sIHRoZSBtb3JlIHNwYWNlIHdlIG5lZWQuCisJICoKKwkgKiBUaGUgYWJzb2x1dGUgd29yc3QgY2FzZSBpcyBldmVyeSBzaW5nbGUgZGF0YSBibG9jayBpcyBpbgorCSAqIHRoZSBwYXJ0IG9mIHRoZSBmaWxlIHN5c3RlbSB0aGF0IG5lZWRzIHRvIGJlIGV2YWN1YXRlZCwKKwkgKiB3aXRoIGVhY2ggZGF0YSBibG9jayBuZWVkcyB0byBiZSBpbiBpdHMgb3duIGV4dGVudCwgYW5kCisJICogd2l0aCBlYWNoIGlub2RlIG5lZWRpbmcgYXQgbGVhc3Qgb25lIGV4dGVudCBibG9jay4KKwkgKi8KKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUykgeworCQlibGs2NF90IHNhZmVfbWFyZ2luID0gKGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtCisJCQkJICAgICAgIGJsa3NfbmVlZGVkKS81MDA7CisJCXVuc2lnbmVkIGludCBleHRzX3Blcl9ibGsgPSAoZnMtPmJsb2Nrc2l6ZSAvCisJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudCkpIC0gMTsKKwkJYmxrNjRfdCB3b3JzdF9jYXNlID0gKChkYXRhX25lZWRlZCArIGV4dHNfcGVyX2JsayAtIDEpIC8KKwkJCQkgICAgICBleHRzX3Blcl9ibGspOworCisJCWlmICh3b3JzdF9jYXNlIDwgaW5vZGVfY291bnQpCisJCQl3b3JzdF9jYXNlID0gaW5vZGVfY291bnQ7CisKKwkJaWYgKHNhZmVfbWFyZ2luID4gd29yc3RfY2FzZSkKKwkJCXNhZmVfbWFyZ2luID0gd29yc3RfY2FzZTsKKworI2lmZGVmIFJFU0laRTJGU19ERUJVRworCQlpZiAoZmxhZ3MgJiBSRVNJWkVfREVCVUdfTUlOX0NBTEMpCisJCQlwcmludGYoIkV4dGVudHMgc2FmZXR5IG1hcmdpbjogJWxsdVxuIiwgc2FmZV9tYXJnaW4pOworI2VuZGlmCisJCWJsa3NfbmVlZGVkICs9IHNhZmVfbWFyZ2luOworCX0KKworCXJldHVybiBibGtzX25lZWRlZDsKK30KZGlmZiAtLWdpdCBhL3Jlc2l6ZS9yZXNpemUyZnMuaCBiL3Jlc2l6ZS9yZXNpemUyZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWVhYjkxCi0tLSAvZGV2L251bGwKKysrIGIvcmVzaXplL3Jlc2l6ZTJmcy5oCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogcmVzaXplMmZzLmggLS0tIGV4dDIgcmVzaXplciBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCBieSBUaGVvZG9yZSBUcydvIGFuZAorICogCVBvd2VyUXVlc3QsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgYnkgVGhlb3NvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKworI2lmIEVYVDJfRkxBVF9JTkNMVURFUworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKyNpbmNsdWRlICJlMnAuaCIKKyNlbHNlCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisjaW5jbHVkZSAiZTJwL2UycC5oIgorI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfTkxTCisjaW5jbHVkZSA8bGliaW50bC5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2RlZmluZSBfKGEpIChnZXR0ZXh0IChhKSkKKyNpZmRlZiBnZXR0ZXh0X25vb3AKKyNkZWZpbmUgTl8oYSkgZ2V0dGV4dF9ub29wIChhKQorI2Vsc2UKKyNkZWZpbmUgTl8oYSkgKGEpCisjZW5kaWYKKyNpZm5kZWYgTkxTX0NBVF9OQU1FCisjZGVmaW5lIE5MU19DQVRfTkFNRSAiZTJmc3Byb2dzIgorI2VuZGlmCisjaWZuZGVmIExPQ0FMRURJUgorI2RlZmluZSBMT0NBTEVESVIgIi91c3Ivc2hhcmUvbG9jYWxlIgorI2VuZGlmCisjZWxzZQorI2RlZmluZSBfKGEpIChhKQorI2RlZmluZSBOXyhhKSBhCisjZW5kaWYKKworCisvKgorICogRm9yIHRoZSBleHRlbnQgbWFwCisgKi8KK3R5cGVkZWYgc3RydWN0IF9leHQyX2V4dGVudCAqZXh0Ml9leHRlbnQ7CisKKy8qCisgKiBGb3IgdGhlIHNpbXBsZSBwcm9ncmVzcyBtZXRlcgorICovCit0eXBlZGVmIHN0cnVjdCBleHQyX3NpbV9wcm9ncmVzcyAqZXh0Ml9zaW1fcHJvZ21ldGVyOworCisvKgorICogRmxhZ3MgZm9yIHRoZSByZXNpemVyOyBtb3N0IGFyZSBkZWJ1Z2dpbmcgZmxhZ3Mgb25seQorICovCisjZGVmaW5lIFJFU0laRV9ERUJVR19JTwkJCTB4MDAwMQorI2RlZmluZSBSRVNJWkVfREVCVUdfQk1PVkUJCTB4MDAwMgorI2RlZmluZSBSRVNJWkVfREVCVUdfSU5PREVNQVAJCTB4MDAwNAorI2RlZmluZSBSRVNJWkVfREVCVUdfSVRBQkxFTU9WRQkJMHgwMDA4CisjZGVmaW5lIFJFU0laRV9ERUJVR19SVFJBQ0sJCTB4MDAxMAorI2RlZmluZSBSRVNJWkVfREVCVUdfTUlOX0NBTEMJCTB4MDAyMAorCisjZGVmaW5lIFJFU0laRV9QRVJDRU5UX0NPTVBMRVRFCQkweDAxMDAKKyNkZWZpbmUgUkVTSVpFX1ZFUkJPU0UJCQkweDAyMDAKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgaG93IG11Y2ggcmVzb3VyY2VzIGhhdmUKKyAqIGJlZW4gdXNlZCBmb3IgYSBwYXJ0aWN1bGFyIHJlc2l6ZTJmcyBwYXNzLgorICovCitzdHJ1Y3QgcmVzb3VyY2VfdHJhY2sgeworCWNvbnN0IGNoYXIgKmRlc2M7CisJc3RydWN0IHRpbWV2YWwgdGltZV9zdGFydDsKKwlzdHJ1Y3QgdGltZXZhbCB1c2VyX3N0YXJ0OworCXN0cnVjdCB0aW1ldmFsIHN5c3RlbV9zdGFydDsKKwl2b2lkCSpicmtfc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzX3JlYWQ7CisJdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzX3dyaXR0ZW47Cit9OworCisvKgorICogVGhlIGNvcmUgc3RhdGUgc3RydWN0dXJlIGZvciB0aGUgZXh0MiByZXNpemVyCisgKi8KK3R5cGVkZWYgc3RydWN0IGV4dDJfcmVzaXplX3N0cnVjdCAqZXh0Ml9yZXNpemVfdDsKKworc3RydWN0IGV4dDJfcmVzaXplX3N0cnVjdCB7CisJZXh0Ml9maWxzeXMJb2xkX2ZzOworCWV4dDJfZmlsc3lzCW5ld19mczsKKwlleHQyZnNfYmxvY2tfYml0bWFwIHJlc2VydmVfYmxvY2tzOworCWV4dDJmc19ibG9ja19iaXRtYXAgbW92ZV9ibG9ja3M7CisJZXh0Ml9leHRlbnQJYm1hcDsKKwlleHQyX2V4dGVudAlpbWFwOworCWJsazY0X3QJCW5lZWRlZF9ibG9ja3M7CisJaW50CQlmbGFnczsKKwljaGFyCQkqaXRhYmxlX2J1ZjsKKworCS8qCisJICogRm9yIHRoZSBibG9jayBhbGxvY2F0b3IKKwkgKi8KKwlibGs2NF90CQluZXdfYmxrOworCWludAkJYWxsb2Nfc3RhdGU7CisKKwkvKgorCSAqIEZvciB0aGUgcHJvZ3Jlc3MgbWV0ZXIKKwkgKi8KKwllcnJjb2RlX3QJKCpwcm9ncmVzcykoZXh0Ml9yZXNpemVfdCByZnMsIGludCBwYXNzLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGN1ciwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBtYXgpOworCXZvaWQJCSpwcm9nX2RhdGE7Cit9OworCisvKgorICogUHJvZ3Jlc3MgcGFzcyBudW1iZXJzLi4uCisgKi8KKyNkZWZpbmUgRTJfUlNaX0VYVEVORF9JVEFCTEVfUEFTUwkxCisjZGVmaW5lIEUyX1JTWl9CTE9DS19SRUxPQ19QQVNTCQkyCisjZGVmaW5lIEUyX1JTWl9JTk9ERV9TQ0FOX1BBU1MJCTMKKyNkZWZpbmUgRTJfUlNaX0lOT0RFX1JFRl9VUERfUEFTUwk0CisjZGVmaW5lIEUyX1JTWl9NT1ZFX0lUQUJMRV9QQVNTCQk1CisKKworLyogcHJvdG90eXBlcyAqLworZXh0ZXJuIGVycmNvZGVfdCByZXNpemVfZnMoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgKm5ld19zaXplLCBpbnQgZmxhZ3MsCisJCQkgICBlcnJjb2RlX3QJKCpwcm9ncmVzcykoZXh0Ml9yZXNpemVfdCByZnMsCisJCQkJCSAgICBpbnQgcGFzcywgdW5zaWduZWQgbG9uZyBjdXIsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIG1heCkpOworCitleHRlcm4gZXJyY29kZV90IGFkanVzdF9mc19pbmZvKGV4dDJfZmlsc3lzIGZzLCBleHQyX2ZpbHN5cyBvbGRfZnMsCisJCQkJZXh0MmZzX2Jsb2NrX2JpdG1hcCByZXNlcnZlX2Jsb2NrcywKKwkJCQlibGs2NF90IG5ld19zaXplKTsKK2V4dGVybiBibGs2NF90IGNhbGN1bGF0ZV9taW5pbXVtX3Jlc2l6ZV9zaXplKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmxhZ3MpOworCisKKy8qIGV4dGVudC5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19jcmVhdGVfZXh0ZW50X3RhYmxlKGV4dDJfZXh0ZW50ICpyZXRfZXh0ZW50LAorCQkJCQkgICAgX191NjQgc2l6ZSk7CitleHRlcm4gdm9pZCBleHQyZnNfZnJlZV9leHRlbnRfdGFibGUoZXh0Ml9leHRlbnQgZXh0ZW50KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2FkZF9leHRlbnRfZW50cnkoZXh0Ml9leHRlbnQgZXh0ZW50LAorCQkJCQkgX191NjQgb2xkX2xvYywgX191NjQgbmV3X2xvYyk7CitleHRlcm4gX191NjQgZXh0MmZzX2V4dGVudF90cmFuc2xhdGUoZXh0Ml9leHRlbnQgZXh0ZW50LCBfX3U2NCBvbGRfbG9jKTsKK2V4dGVybiB2b2lkIGV4dDJmc19leHRlbnRfZHVtcChleHQyX2V4dGVudCBleHRlbnQsIEZJTEUgKm91dCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19pdGVyYXRlX2V4dGVudChleHQyX2V4dGVudCBleHRlbnQsIF9fdTY0ICpvbGRfbG9jLAorCQkJCSAgICAgICBfX3U2NCAqbmV3X2xvYywgX191NjQgKnNpemUpOworCisvKiBtYWluLmMgKi8KK2V4dGVybiBjaGFyICpwcm9ncmFtX25hbWU7CisKKy8qIG9ubGluZS5jICovCitleHRlcm4gZXJyY29kZV90IG9ubGluZV9yZXNpemVfZnMoZXh0Ml9maWxzeXMgZnMsIGNvbnN0IGNoYXIgKm10cHQsCisJCQkJICBibGs2NF90ICpuZXdfc2l6ZSwgaW50IGZsYWdzKTsKKworLyogcmVzb3VyY2VfdHJhY2suYyAqLworZXh0ZXJuIHZvaWQgaW5pdF9yZXNvdXJjZV90cmFjayhzdHJ1Y3QgcmVzb3VyY2VfdHJhY2sgKnRyYWNrLCBjb25zdCBjaGFyICpkZXNjLAorCQkJCWlvX2NoYW5uZWwgY2hhbm5lbCk7CitleHRlcm4gdm9pZCBwcmludF9yZXNvdXJjZV90cmFjayhleHQyX3Jlc2l6ZV90IHJmcywKKwkJCQkgc3RydWN0IHJlc291cmNlX3RyYWNrICp0cmFjaywKKwkJCQkgaW9fY2hhbm5lbCBjaGFubmVsKTsKKworLyogc2ltX3Byb2dyZXNzLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3Byb2dyZXNzX2luaXQoZXh0Ml9zaW1fcHJvZ21ldGVyICpyZXRfcHJvZywKKwkJCQkgICAgICBjb25zdCBjaGFyICpsYWJlbCwKKwkJCQkgICAgICBpbnQgbGFiZWx3aWR0aCwgaW50IGJhcndpZHRoLAorCQkJCSAgICAgIF9fdTMyIG1heGRvbmUsIGludCBmbGFncyk7CitleHRlcm4gdm9pZCBleHQyZnNfcHJvZ3Jlc3NfdXBkYXRlKGV4dDJfc2ltX3Byb2dtZXRlciBwcm9nLAorCQkJCQlfX3UzMiBjdXJyZW50KTsKK2V4dGVybiB2b2lkIGV4dDJmc19wcm9ncmVzc19jbG9zZShleHQyX3NpbV9wcm9nbWV0ZXIgcHJvZyk7CisKKwpkaWZmIC0tZ2l0IGEvcmVzaXplL3Jlc291cmNlX3RyYWNrLmMgYi9yZXNpemUvcmVzb3VyY2VfdHJhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGVmZTExCi0tLSAvZGV2L251bGwKKysrIGIvcmVzaXplL3Jlc291cmNlX3RyYWNrLmMKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiByZXNvdXJjZV90cmFjay5jIC0tLSByZXNvdXJjZSB0cmFja2luZworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBieSBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJyZXNpemUyZnMuaCIKKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9NQUxMT0NfSAorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKK3ZvaWQgaW5pdF9yZXNvdXJjZV90cmFjayhzdHJ1Y3QgcmVzb3VyY2VfdHJhY2sgKnRyYWNrLCBjb25zdCBjaGFyICpkZXNjLAorCQkJIGlvX2NoYW5uZWwgY2hhbm5lbCkKK3sKKyNpZmRlZiBIQVZFX0dFVFJVU0FHRQorCXN0cnVjdCBydXNhZ2UgcjsKKyNlbmRpZgorCWlvX3N0YXRzIGlvX3N0YXJ0ID0gMDsKKworCXRyYWNrLT5kZXNjID0gZGVzYzsKKwl0cmFjay0+YnJrX3N0YXJ0ID0gc2JyaygwKTsKKwlnZXR0aW1lb2ZkYXkoJnRyYWNrLT50aW1lX3N0YXJ0LCAwKTsKKyNpZmRlZiBIQVZFX0dFVFJVU0FHRQorI2lmZGVmIHN1bgorCW1lbXNldCgmciwgMCwgc2l6ZW9mKHN0cnVjdCBydXNhZ2UpKTsKKyNlbmRpZgorCWdldHJ1c2FnZShSVVNBR0VfU0VMRiwgJnIpOworCXRyYWNrLT51c2VyX3N0YXJ0ID0gci5ydV91dGltZTsKKwl0cmFjay0+c3lzdGVtX3N0YXJ0ID0gci5ydV9zdGltZTsKKyNlbHNlCisJdHJhY2stPnVzZXJfc3RhcnQudHZfc2VjID0gdHJhY2stPnVzZXJfc3RhcnQudHZfdXNlYyA9IDA7CisJdHJhY2stPnN5c3RlbV9zdGFydC50dl9zZWMgPSB0cmFjay0+c3lzdGVtX3N0YXJ0LnR2X3VzZWMgPSAwOworI2VuZGlmCisJdHJhY2stPmJ5dGVzX3JlYWQgPSAwOworCXRyYWNrLT5ieXRlc193cml0dGVuID0gMDsKKwlpZiAoY2hhbm5lbCAmJiBjaGFubmVsLT5tYW5hZ2VyICYmIGNoYW5uZWwtPm1hbmFnZXItPmdldF9zdGF0cykKKwkJY2hhbm5lbC0+bWFuYWdlci0+Z2V0X3N0YXRzKGNoYW5uZWwsICZpb19zdGFydCk7CisJaWYgKGlvX3N0YXJ0KSB7CisJCXRyYWNrLT5ieXRlc19yZWFkID0gaW9fc3RhcnQtPmJ5dGVzX3JlYWQ7CisJCXRyYWNrLT5ieXRlc193cml0dGVuID0gaW9fc3RhcnQtPmJ5dGVzX3dyaXR0ZW47CisJfQorfQorCitzdGF0aWMgZmxvYXQgdGltZXZhbF9zdWJ0cmFjdChzdHJ1Y3QgdGltZXZhbCAqdHYxLAorCQkJICAgICAgc3RydWN0IHRpbWV2YWwgKnR2MikKK3sKKwlyZXR1cm4gKCh0djEtPnR2X3NlYyAtIHR2Mi0+dHZfc2VjKSArCisJCSgoZmxvYXQpICh0djEtPnR2X3VzZWMgLSB0djItPnR2X3VzZWMpKSAvIDEwMDAwMDApOworfQorCit2b2lkIHByaW50X3Jlc291cmNlX3RyYWNrKGV4dDJfcmVzaXplX3QgcmZzLCBzdHJ1Y3QgcmVzb3VyY2VfdHJhY2sgKnRyYWNrLAorCQkJICBpb19jaGFubmVsIGNoYW5uZWwpCit7CisjaWZkZWYgSEFWRV9HRVRSVVNBR0UKKwlzdHJ1Y3QgcnVzYWdlIHI7CisjZW5kaWYKKyNpZmRlZiBIQVZFX01BTExJTkZPCisJc3RydWN0IG1hbGxpbmZvCW1hbGxvY19pbmZvOworI2VuZGlmCisJc3RydWN0IHRpbWV2YWwgdGltZV9lbmQ7CisKKwlpZiAoKHJmcy0+ZmxhZ3MgJiBSRVNJWkVfREVCVUdfUlRSQUNLKSA9PSAwKQorCQlyZXR1cm47CisKKwlnZXR0aW1lb2ZkYXkoJnRpbWVfZW5kLCAwKTsKKworCWlmICh0cmFjay0+ZGVzYykKKwkJcHJpbnRmKCIlczogIiwgdHJhY2stPmRlc2MpOworCisjaWZkZWYgSEFWRV9NQUxMSU5GTworI2RlZmluZSBrYnl0ZXMoeCkJKCgodW5zaWduZWQgbG9uZykoeCkgKyAxMDIzKSAvIDEwMjQpCisKKwltYWxsb2NfaW5mbyA9IG1hbGxpbmZvKCk7CisJcHJpbnRmKCJNZW1vcnkgdXNlZDogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiLAorCQlrYnl0ZXMobWFsbG9jX2luZm8uYXJlbmEpLCBrYnl0ZXMobWFsbG9jX2luZm8uaGJsa2hkKSwKKwkJa2J5dGVzKG1hbGxvY19pbmZvLnVvcmRibGtzKSwga2J5dGVzKG1hbGxvY19pbmZvLmZvcmRibGtzKSk7CisjZWxzZQorCXByaW50ZigiTWVtb3J5IHVzZWQ6ICVsdSwgIiwKKwkJKHVuc2lnbmVkIGxvbmcpICgoKGNoYXIgKikgc2JyaygwKSkgLQorCQkJCSAoKGNoYXIgKikgdHJhY2stPmJya19zdGFydCkpKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfR0VUUlVTQUdFCisJZ2V0cnVzYWdlKFJVU0FHRV9TRUxGLCAmcik7CisKKwlwcmludGYoInRpbWU6ICU1LjJmLyU1LjJmLyU1LjJmXG4iLAorCQl0aW1ldmFsX3N1YnRyYWN0KCZ0aW1lX2VuZCwgJnRyYWNrLT50aW1lX3N0YXJ0KSwKKwkJdGltZXZhbF9zdWJ0cmFjdCgmci5ydV91dGltZSwgJnRyYWNrLT51c2VyX3N0YXJ0KSwKKwkJdGltZXZhbF9zdWJ0cmFjdCgmci5ydV9zdGltZSwgJnRyYWNrLT5zeXN0ZW1fc3RhcnQpKTsKKyNlbHNlCisJcHJpbnRmKCJlbGFwc2VkIHRpbWU6ICU2LjNmXG4iLAorCQl0aW1ldmFsX3N1YnRyYWN0KCZ0aW1lX2VuZCwgJnRyYWNrLT50aW1lX3N0YXJ0KSk7CisjZW5kaWYKKyNkZWZpbmUgbWJ5dGVzKHgpCSgoKHgpICsgMTA0ODU3NSkgLyAxMDQ4NTc2KQorCWlmIChjaGFubmVsICYmIGNoYW5uZWwtPm1hbmFnZXIgJiYgY2hhbm5lbC0+bWFuYWdlci0+Z2V0X3N0YXRzKSB7CisJCWlvX3N0YXRzIGRlbHRhID0gMDsKKwkJdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzX3JlYWQgPSAwOworCQl1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNfd3JpdHRlbiA9IDA7CisKKwkJY2hhbm5lbC0+bWFuYWdlci0+Z2V0X3N0YXRzKGNoYW5uZWwsICZkZWx0YSk7CisJCWlmIChkZWx0YSkgeworCQkJYnl0ZXNfcmVhZCA9IGRlbHRhLT5ieXRlc19yZWFkIC0gdHJhY2stPmJ5dGVzX3JlYWQ7CisJCQlieXRlc193cml0dGVuID0gZGVsdGEtPmJ5dGVzX3dyaXR0ZW4gLQorCQkJCXRyYWNrLT5ieXRlc193cml0dGVuOworCQkJaWYgKGJ5dGVzX3JlYWQgPT0gMCAmJiBieXRlc193cml0dGVuID09IDApCisJCQkJZ290byBza2lwX2lvOworCQkJaWYgKHRyYWNrLT5kZXNjKQorCQkJCXByaW50ZigiJXM6ICIsIHRyYWNrLT5kZXNjKTsKKwkJCXByaW50ZigiSS9PIHJlYWQ6ICVsbHVNQiwgd3JpdGU6ICVsbHVNQiwgIgorCQkJICAgICAgICJyYXRlOiAlLjJmTUIvc1xuIiwKKwkJCSAgICAgICBtYnl0ZXMoYnl0ZXNfcmVhZCksCisJCQkgICAgICAgbWJ5dGVzKGJ5dGVzX3dyaXR0ZW4pLAorCQkJICAgICAgIChkb3VibGUpbWJ5dGVzKGJ5dGVzX3JlYWQgKyBieXRlc193cml0dGVuKSAvCisJCQkgICAgICAgdGltZXZhbF9zdWJ0cmFjdCgmdGltZV9lbmQsICZ0cmFjay0+dGltZV9zdGFydCkpOworCQl9CisJfQorc2tpcF9pbzoKKwlmZmx1c2goc3Rkb3V0KTsKK30KKwpkaWZmIC0tZ2l0IGEvcmVzaXplL3NpbV9wcm9ncmVzcy5jIGIvcmVzaXplL3NpbV9wcm9ncmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MjA2YmEKLS0tIC9kZXYvbnVsbAorKysgYi9yZXNpemUvc2ltX3Byb2dyZXNzLmMKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBzaW1fcHJvZ3Jlc3MuYyAtLS0gc2ltcGxlIHByb2dyZXNzIG1ldGVyCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4IGJ5IFRoZW9kb3JlIFRzJ28gYW5kCisgKiAJUG93ZXJRdWVzdCwgSW5jLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBieSBUaGVvc29yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmVzaXplMmZzLmgiCisKK3N0cnVjdCBleHQyX3NpbV9wcm9ncmVzcyB7CisJRklMRQkqZjsKKwljaGFyCSpsYWJlbDsKKwlpbnQJbGFiZWx3aWR0aDsKKwlpbnQJYmFyd2lkdGg7CisJX191MzIJbWF4ZG9uZTsKKwlfX3UzMgljdXJyZW50OworCWludAlzaG93bjsKKwlpbnQJZmxhZ3M7Cit9OworCitzdGF0aWMgZXJyY29kZV90IGV4dDJmc19wcm9ncmVzc19kaXNwbGF5KGV4dDJfc2ltX3Byb2dtZXRlciBwcm9nKQoreworCWludAlpLCB3aWR0aDsKKworCWZwdXRzKHByb2ctPmxhYmVsLCBwcm9nLT5mKTsKKwl3aWR0aCA9IHByb2ctPmxhYmVsd2lkdGggLSBzdHJsZW4ocHJvZy0+bGFiZWwpOworCXdoaWxlICh3aWR0aC0tID4gMCkKKwkJcHV0YygnICcsIHByb2ctPmYpOworCWlmIChwcm9nLT5sYWJlbHdpZHRoICsgcHJvZy0+YmFyd2lkdGggPiA4MCkgeworCQlmcHV0cygiXG4iLCBwcm9nLT5mKTsKKwkJZm9yICh3aWR0aCA9IHByb2ctPmxhYmVsd2lkdGg7IHdpZHRoID4gMDsgd2lkdGgtLSkKKwkJCXB1dGMoJyAnLCBwcm9nLT5mKTsKKwl9CisJZm9yIChpPTA7IGkgPCBwcm9nLT5iYXJ3aWR0aDsgaSsrKQorCQlwdXRjKCctJywgcHJvZy0+Zik7CisJZm9yIChpPTA7IGkgPCBwcm9nLT5iYXJ3aWR0aDsgaSsrKQorCQlwdXRjKCdcYicsIHByb2ctPmYpOworCWZmbHVzaChwcm9nLT5mKTsKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIGV4dDJmc19wcm9ncmVzc191cGRhdGUoZXh0Ml9zaW1fcHJvZ21ldGVyIHByb2csIF9fdTMyIGN1cnJlbnQpCit7CisJaW50CQlvbGRfbGV2ZWwsIGxldmVsLCBudW0sIGk7CisKKwlsZXZlbCA9IHByb2ctPmJhcndpZHRoICogY3VycmVudCAvIHByb2ctPm1heGRvbmU7CisJb2xkX2xldmVsID0gcHJvZy0+YmFyd2lkdGggKiBwcm9nLT5jdXJyZW50IC8gcHJvZy0+bWF4ZG9uZTsKKwlwcm9nLT5jdXJyZW50ID0gY3VycmVudDsKKworCW51bSA9IGxldmVsIC0gb2xkX2xldmVsOworCWlmIChudW0gPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKG51bSA+IDApIHsKKwkJZm9yIChpPTA7IGkgPCBudW07IGkrKykKKwkJCXB1dGMoJ1gnLCBwcm9nLT5mKTsKKwl9IGVsc2UgeworCQludW0gPSAtbnVtOworCQlmb3IgKGk9MDsgaSA8IG51bTsgaSsrKQorCQkJcHV0YygnXGInLCBwcm9nLT5mKTsKKwkJZm9yIChpPTA7IGkgPCBudW07IGkrKykKKwkJCXB1dGMoJy0nLCBwcm9nLT5mKTsKKwkJZm9yIChpPTA7IGkgPCBudW07IGkrKykKKwkJCXB1dGMoJ1xiJywgcHJvZy0+Zik7CisJfQorCWZmbHVzaChwcm9nLT5mKTsKK30KKworZXJyY29kZV90IGV4dDJmc19wcm9ncmVzc19pbml0KGV4dDJfc2ltX3Byb2dtZXRlciAqcmV0X3Byb2csCisJCQkgICAgICAgY29uc3QgY2hhciAqbGFiZWwsCisJCQkgICAgICAgaW50IGxhYmVsd2lkdGgsIGludCBiYXJ3aWR0aCwKKwkJCSAgICAgICBfX3UzMiBtYXhkb25lLCBpbnQgZmxhZ3MpCit7CisJZXh0Ml9zaW1fcHJvZ21ldGVyCXByb2c7CisJZXJyY29kZV90CQlyZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGV4dDJfc2ltX3Byb2dyZXNzKSwgJnByb2cpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJbWVtc2V0KHByb2csIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9zaW1fcHJvZ3Jlc3MpKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHN0cmxlbihsYWJlbCkrMSwgJnByb2ctPmxhYmVsKTsKKwlpZiAocmV0dmFsKSB7CisJCWZyZWUocHJvZyk7CisJCXJldHVybiByZXR2YWw7CisJfQorCXN0cmNweShwcm9nLT5sYWJlbCwgbGFiZWwpOworCXByb2ctPmxhYmVsd2lkdGggPSBsYWJlbHdpZHRoOworCXByb2ctPmJhcndpZHRoID0gYmFyd2lkdGg7CisJcHJvZy0+ZmxhZ3MgPSBmbGFnczsKKwlwcm9nLT5tYXhkb25lID0gbWF4ZG9uZTsKKwlwcm9nLT5jdXJyZW50ID0gMDsKKwlwcm9nLT5zaG93biA9IDA7CisJcHJvZy0+ZiA9IHN0ZG91dDsKKworCSpyZXRfcHJvZyA9IHByb2c7CisKKwlyZXR1cm4gZXh0MmZzX3Byb2dyZXNzX2Rpc3BsYXkocHJvZyk7Cit9CisKK3ZvaWQgZXh0MmZzX3Byb2dyZXNzX2Nsb3NlKGV4dDJfc2ltX3Byb2dtZXRlciBwcm9nKQoreworCisJaWYgKHByb2ctPmxhYmVsKQorCQlleHQyZnNfZnJlZV9tZW0oJnByb2ctPmxhYmVsKTsKKwlleHQyZnNfZnJlZV9tZW0oJnByb2cpOworCXByaW50ZigiXG4iKTsKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9yZXNpemUvdGVzdC1yZXNpemUgYi9yZXNpemUvdGVzdC1yZXNpemUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzc2NmY0ZgotLS0gL2Rldi9udWxsCisrKyBiL3Jlc2l6ZS90ZXN0LXJlc2l6ZQpAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKworRlM9L2JpZ3NjcmF0Y2gvdGVzdGZzCitGRUFUVVJFPSItTyA2NGJpdCIKKworUkVTSVpFMkZTPS90bXAvcmVzaXplMmZzLnN0YXRpYworTUtFMkZTPW1rZTJmcworRFVNUEUyRlM9ZHVtcGUyZnMKK0UyRlNDSz1lMmZzY2sKKworL2Jpbi9ybSAtZiAkRlMgOyB0b3VjaCAkRlMKK3RydW5jYXRlIC1zIDhUICRGUworJE1LRTJGUyAtRiAtdCBleHQ0ICRGRUFUVVJFICRGUworJEUyRlNDSyAtRlkgJEZTCiskRFVNUEUyRlMgJEZTID4gL3RtcC9kMQorCit0cnVuY2F0ZSAtcyAyMFQgJEZTCit0aW1lICRSRVNJWkUyRlMgLWQgMzEgLXAgJEZTID4gL3RtcC9yMQorJERVTVBFMkZTICRGUyA+IC90bXAvZDIKKyRFMkZTQ0sgLWZ5ICRGUworJERVTVBFMkZTICRGUyA+IC90bXAvZDMKKwordHJ1bmNhdGUgLXMgMjFUICRGUwordGltZSAkUkVTSVpFMkZTIC1kIDMxIC1wICRGUyA+IC90bXAvcjIKKyREVU1QRTJGUyAkRlMgPiAvdG1wL2Q0CiskRTJGU0NLIC1meSAkRlMKKyREVU1QRTJGUyAkRlMgPiAvdG1wL2Q1CmRpZmYgLS1naXQgYS9yZXNpemUvdGVzdF9leHRlbnQuYyBiL3Jlc2l6ZS90ZXN0X2V4dGVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYWEwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9yZXNpemUvdGVzdF9leHRlbnQuYwpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIHRlc3RfZXh0ZW50LmMgLS0tIHRlc3RlciBmb3IgdGhlIGV4dGVudCBhYnN0cmFjdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCBieSBUaGVvZG9yZSBUcydvIGFuZAorICogCVBvd2VyUXVlc3QsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgYnkgVGhlb3NvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJlc2l6ZTJmcy5oIgorCit2b2lkIGRvX3Rlc3QoRklMRSAqaW4sIEZJTEUgKm91dCk7CisKK3ZvaWQgZG9fdGVzdChGSUxFICppbiwgRklMRSAqb3V0KQoreworCWNoYXIJCWJ1ZlsxMjhdOworCWNoYXIJCSpjcCwgKmNtZCwgKmFyZzEsICphcmcyOworCV9fdTY0CQludW0xLCBudW0yOworCV9fdTY0CQlzaXplOworCWVycmNvZGVfdAlyZXR2YWw7CisJZXh0Ml9leHRlbnQJZXh0ZW50ID0gMDsKKwljb25zdCBjaGFyCSpub190YWJsZSA9ICIjIE5vIGV4dGVudCB0YWJsZVxuIjsKKworCXdoaWxlICghZmVvZihpbikpIHsKKwkJaWYgKCFmZ2V0cyhidWYsIHNpemVvZihidWYpLCBpbikpCisJCQlicmVhazsKKwkJLyoKKwkJICogSWdub3JlIGNvbW1lbnRzCisJCSAqLworCQlpZiAoYnVmWzBdID09JyMnKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogRWNobyBjb21tYW5kCisJCSAqLworCQlmcHV0cyhidWYsIG91dCk7CisKKwkJY3AgPSBzdHJjaHIoYnVmLCAnXG4nKTsKKwkJaWYgKGNwKQorCQkJKmNwID0gJ1wwJzsKKworCQkvKgorCQkgKiBQYXJzZSBjb21tYW5kIGxpbmU7IHNpbXBsZSwgYXQgbW9zdCB0d28gYXJndW1lbnRzCisJCSAqLworCQljbWQgPSBidWY7CisJCW51bTEgPSBudW0yID0gMDsKKwkJYXJnMSA9IGFyZzIgPSAwOworCQljcCA9IHN0cmNocihidWYsICcgJyk7CisJCWlmIChjcCkgeworCQkJKmNwKysgPSAnXDAnOworCQkJYXJnMSA9IGNwOworCQkJbnVtMSA9IHN0cnRvdWwoYXJnMSwgMCwgMCk7CisKKwkJCWNwID0gc3RyY2hyKGNwLCAnICcpOworCQl9CisJCWlmIChjcCkgeworCQkJKmNwKysgPSAnXDAnOworCQkJYXJnMiA9IGNwOworCQkJbnVtMiA9IHN0cnRvdWwoYXJnMiwgMCwgMCk7CisJCX0KKworCQlpZiAoIXN0cmNtcChjbWQsICJjcmVhdGUiKSkgeworCQkJcmV0dmFsID0gZXh0MmZzX2NyZWF0ZV9leHRlbnRfdGFibGUoJmV4dGVudCwgbnVtMSk7CisJCQlpZiAocmV0dmFsKSB7CisJCQloYW5kbGVfZXJyb3I6CisJCQkJZnByaW50ZihvdXQsICIjIEVycm9yOiAlc1xuIiwKKwkJCQkJZXJyb3JfbWVzc2FnZShyZXR2YWwpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghZXh0ZW50KSB7CisJCQlmcHV0cyhub190YWJsZSwgb3V0KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGNtZCwgImZyZWUiKSkgeworCQkJZXh0MmZzX2ZyZWVfZXh0ZW50X3RhYmxlKGV4dGVudCk7CisJCQlleHRlbnQgPSAwOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiYWRkIikpIHsKKwkJCXJldHZhbCA9IGV4dDJmc19hZGRfZXh0ZW50X2VudHJ5KGV4dGVudCwgbnVtMSwgbnVtMik7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gaGFuZGxlX2Vycm9yOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAibG9va3VwIikpIHsKKwkJCW51bTIgPSBleHQyZnNfZXh0ZW50X3RyYW5zbGF0ZShleHRlbnQsIG51bTEpOworCQkJZnByaW50ZihvdXQsICIjIEFuc3dlcjogJWxsdSVzXG4iLCBudW0yLAorCQkJCW51bTIgPyAiIiA6ICIgKG5vdCBmb3VuZCkiKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgImR1bXAiKSkgeworCQkJZXh0MmZzX2V4dGVudF9kdW1wKGV4dGVudCwgb3V0KTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIml0ZXJfdGVzdCIpKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfaXRlcmF0ZV9leHRlbnQoZXh0ZW50LCAwLCAwLCAwKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBoYW5kbGVfZXJyb3I7CisJCQl3aGlsZSAoMSkgeworCQkJCXJldHZhbCA9IGV4dDJmc19pdGVyYXRlX2V4dGVudChleHRlbnQsCisJCQkJCSAgICAgICAmbnVtMSwgJm51bTIsICZzaXplKTsKKwkJCQlpZiAocmV0dmFsKQorCQkJCQlnb3RvIGhhbmRsZV9lcnJvcjsKKwkJCQlpZiAoIXNpemUpCisJCQkJCWJyZWFrOworCQkJCWZwcmludGYob3V0LCAiIyAlbGx1IC0+ICVsbHUgKCVsbHUpXG4iLAorCQkJCQludW0xLCBudW0yLCBzaXplKTsKKwkJCX0KKwkJfSBlbHNlCisJCQlmcHV0cygiIyBTeW50YXggZXJyb3JcbiIsIG91dCk7CisJfQorCWlmIChleHRlbnQpCisJCWV4dDJmc19mcmVlX2V4dGVudF90YWJsZShleHRlbnQpOworfQorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgQVRUUih4KSBfX2F0dHJpYnV0ZV9fKHgpCisjZWxzZQorI2RlZmluZSBBVFRSKHgpCisjZW5kaWYKKworaW50IG1haW4oaW50IGFyZ2MgQVRUUigodW51c2VkKSksIGNoYXIgKiphcmd2IEFUVFIoKHVudXNlZCkpKQoreworCWRvX3Rlc3Qoc3RkaW4sIHN0ZG91dCk7CisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL3Jlc2l6ZS90ZXN0X2V4dGVudC5pbiBiL3Jlc2l6ZS90ZXN0X2V4dGVudC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWRjYzQxCi0tLSAvZGV2L251bGwKKysrIGIvcmVzaXplL3Rlc3RfZXh0ZW50LmluCkBAIC0wLDAgKzEsNjQgQEAKK2NyZWF0ZSAxMAorYWRkIDEwIDIwCithZGQgMTEgMjEKK2FkZCAxMiAyMgorYWRkIDE0IDQ1CithZGQgMTYgNTAKK2FkZCAxNyA1MQorZHVtcAorIyBFeHRlbnQgZHVtcDoKKyMJTnVtPTMsIFNpemU9MTAsIEN1cnNvcj0wLCBTb3J0ZWQ9MQorIwkJIDEwIC0+IDIwICgzKQorIwkJIDE0IC0+IDQ1ICgxKQorIwkJIDE2IC0+IDUwICgyKQorYWRkIDE4IDUyCitkdW1wCisjIEV4dGVudCBkdW1wOgorIwlOdW09MywgU2l6ZT0xMCwgQ3Vyc29yPTAsIFNvcnRlZD0xCisjCQkgMTAgLT4gMjAgKDMpCisjCQkgMTQgLT4gNDUgKDEpCisjCQkgMTYgLT4gNTAgKDMpCitsb29rdXAgMTAKKyMgQW5zd2VyOiAyMAorbG9va3VwIDExCisjIEFuc3dlcjogMjEKK2xvb2t1cCAxMgorIyBBbnN3ZXI6IDIyCitsb29rdXAgMTMKKyMgQW5zd2VyOiAwIChub3QgZm91bmQpCitsb29rdXAgMTQKKyMgQW5zd2VyOiA0NQorbG9va3VwIDE1CisjIEFuc3dlcjogMCAobm90IGZvdW5kKQorbG9va3VwIDE2CisjIEFuc3dlcjogNTAKK2xvb2t1cCAxCisjIEFuc3dlcjogMCAobm90IGZvdW5kKQorbG9va3VwIDUwCisjIEFuc3dlcjogMCAobm90IGZvdW5kKQorYWRkIDE5IDEwMAorYWRkIDEzIDUKK2xvb2t1cCAxOAorIyBBbnN3ZXI6IDUyCitsb29rdXAgMTkKKyMgQW5zd2VyOiAxMDAKK2xvb2t1cCAyMAorIyBBbnN3ZXI6IDAgKG5vdCBmb3VuZCkKK2xvb2t1cCAxMgorIyBBbnN3ZXI6IDIyCitsb29rdXAgMTMKKyMgQW5zd2VyOiA1CitkdW1wCisjIEV4dGVudCBkdW1wOgorIwlOdW09NSwgU2l6ZT0xMCwgQ3Vyc29yPTAsIFNvcnRlZD0xCisjCQkgMTAgLT4gMjAgKDMpCisjCQkgMTMgLT4gNSAoMSkKKyMJCSAxNCAtPiA0NSAoMSkKKyMJCSAxNiAtPiA1MCAoMykKKyMJCSAxOSAtPiAxMDAgKDEpCitpdGVyX3Rlc3QKKyMgMTAgLT4gMjAgKDMpCisjIDEzIC0+IDUgKDEpCisjIDE0IC0+IDQ1ICgxKQorIyAxNiAtPiA1MCAoMykKKyMgMTkgLT4gMTAwICgxKQpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuaW4gYi90ZXN0cy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2EwNDNlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw4NiBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIHRlc3RzIGRpcmVjdG9yeQorIworCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLi4KK215X2RpciA9IHRlc3RzCitJTlNUQUxMID0gQElOU1RBTExACisKK0BNQ09ORklHQAorCithbGw6OiBARE9fVEVTVF9TVUlURUAgdGVzdF9vbmUgdGVzdF9zY3JpcHQKKwordGVzdF9vbmU6ICQoc3JjZGlyKS90ZXN0X29uZS5pbiBNYWtlZmlsZSBta2UyZnMuY29uZgorCUBlY2hvICJDcmVhdGluZyB0ZXN0X29uZSBzY3JpcHQuLi4iCisJQGVjaG8gIiMhL2Jpbi9zaCIgPiB0ZXN0X29uZQorQEhUUkVFX0NNVEAJQGVjaG8gIkhUUkVFPXkiID4+IHRlc3Rfb25lCitAUVVPVEFfQ01UQAlAZWNobyAiUVVPVEE9eSIgPj4gdGVzdF9vbmUKKwlAZWNobyAiU1JDRElSPUBzcmNkaXJAIiA+PiB0ZXN0X29uZQorCUBlY2hvICJESUZGX09QVFM9QFVOSV9ESUZGX09QVFNAIiA+PiB0ZXN0X29uZQorCUBjYXQgJChzcmNkaXIpL3Rlc3Rfb25lLmluID4+IHRlc3Rfb25lCisJQGNobW9kICt4IHRlc3Rfb25lCisKK3Rlc3Rfc2NyaXB0OiB0ZXN0X29uZSB0ZXN0X3NjcmlwdC5pbiBNYWtlZmlsZSBta2UyZnMuY29uZgorCUBlY2hvICJDcmVhdGluZyB0ZXN0X3NjcmlwdC4uLiIKKwlAZWNobyAiIyEvYmluL3NoIiA+IHRlc3Rfc2NyaXB0CisJQGVjaG8gIlNSQ0RJUj1Ac3JjZGlyQCIgPj4gdGVzdF9zY3JpcHQKKwlAY2F0ICQoc3JjZGlyKS90ZXN0X3NjcmlwdC5pbiA+PiB0ZXN0X3NjcmlwdAorCUBjaG1vZCAreCB0ZXN0X3NjcmlwdAorCitta2UyZnMuY29uZjogJChzcmNkaXIpL21rZTJmcy5jb25mLmluCisJJChDUCkgJChzcmNkaXIpL21rZTJmcy5jb25mLmluIG1rZTJmcy5jb25mCisKKy5QSE9OWSA6IHRlc3RfcHJlIHRlc3RfcG9zdCBjaGVjayBhbHdheXNfcnVuCisKK1RFU1RTPSQod2lsZGNhcmQgJChzcmNkaXIpL1thLXpdXyopCiskKFRFU1RTKTo6IHRlc3Rfb25lIGFsd2F5c19ydW4KKwlALi90ZXN0X29uZSAkQAorCit0ZXN0X3ByZToKKwlAJChSTSkgLWYgKi5mYWlsZWQKKwlAZWNobyAiUnVubmluZyBlMmZzcHJvZ3MgdGVzdCBzdWl0ZS4uLiIKKwlAZWNobyAiICIKKwordGVzdF9wb3N0OiB0ZXN0X3ByZSAkKFRFU1RTKQorCUAkKHNyY2RpcikvdGVzdF9wb3N0CisKK2NoZWNrOjogdGVzdF9wcmUgdGVzdF9wb3N0IHRlc3Rfc2NyaXB0CisKK2NoZWNrLWZhaWxlZDogJChiYXNlbmFtZSAkKHdpbGRjYXJkICouZmFpbGVkKSkKKwlAJChzcmNkaXIpL3Rlc3RfcG9zdAorCisKK1RESVI9Zl90ZXN0bmV3CisjIFRhcmdldCB3aGljaCBjcmVhdGVzIGEgbmV3IHRlc3RjYXNlIHRvIHNpbXBsaWZ5IGFkZGluZyBuZXcgcmVncmVzc2lvbiB0ZXN0cy4KK3Rlc3RuZXc6CisJQGVjaG8gIkNyZWF0aW5nIGEgbmV3IGUyZnNjayB0ZXN0Y2FzZSBpbiAke1RESVJ9IgorCUBta2RpciAtcCAke1RESVJ9CisJZGQgaWY9L2Rldi96ZXJvIG9mPSR7VERJUn0vaW1hZ2UgYnM9MWsgY291bnQ9OGsKKwkkKHRvcF9zcmNkaXIpL21pc2MvbWtlMmZzIC1qIC1GIC1OIDI1NiAke1RESVJ9L2ltYWdlCisJQGVjaG8gIm5ldyB0ZXN0IGRlc2NyaXB0aW9uIiA+ICR7VERJUn0vbmFtZQorCUBlY2hvOyBlY2hvOyBlY2hvICJOZXcgdGVzdCBmaWxlc3lzdGVtIGF0ICR7VERJUn0vaW1hZ2UuIgorCUBlY2hvICJOb3csIGJyZWFrIHRoZSBmaWxlc3lzdGVtIGFzIGFwcHJvcHJpYXRlLCBhbmQgcnVuICdtYWtlIHRlc3RlbmQnIgorCitFWFBFQ1QxPSR7VERJUn0vZXhwZWN0LjEKK0VYUEVDVDI9JHtURElSfS9leHBlY3QuMgorIyBUYXJnZXQgd2hpY2ggZ2VuZXJhdGVzIHRoZSBleHBlY3QgZmlsZXMgZm9yIHRoZSBuZXcgdGVzdGNhc2UuCit0ZXN0ZW5kOiB0ZXN0X29uZSAke1RESVJ9L2ltYWdlCisJZ3ppcCAtOSAke1RESVJ9L2ltYWdlCisJQE9VVDE9JHtFWFBFQ1QxfSBPVVQyPSR7RVhQRUNUMn0gLi90ZXN0X29uZSAke1RESVJ9CisJQGVjaG87IGVjaG87IGVjaG8gIioqKiBvdXRwdXQgZnJvbSBmaXJzdCBlMmZzY2sgcnVuICgke0VYUEVDVDF9KSAqKioiCisJQGNhdCAke0VYUEVDVDF9CisJQGVjaG8gIioqKiBvdXRwdXQgZnJvbSBzZWNvbmQgZTJmc2NrIHJ1biAoJHtFWFBFQ1QyfSkgKioqIgorCUBjYXQgJHtFWFBFQ1QyfQorCUBlY2hvICIqKiogZW5kIG9mIGUyZnNjayBvdXRwdXQgKioqIgorCUBlY2hvOyBlY2hvICJIb3BlZnVsbHkgZTJmc2NrIG5vdyBmaXhlcyB0aGlzIHByb2JsZW0gcHJvcGVybHkuIgorCUBlY2hvICJJZiBhbGwgaXMgd2VsbCwgZWRpdCAke1RESVJ9L25hbWUgYW5kIHJlbmFtZSAke1RESVJ9LiIKKworY2xlYW46OgorCSQoUk0pIC1mICp+ICoubG9nICoubmV3ICouZmFpbGVkICoub2sgKi50bXAgdGVzdF9vbmUgdGVzdF9zY3JpcHQgbWtlMmZzLmNvbmYKKworZGlzdGNsZWFuOjogY2xlYW4KKwkkKFJNKSAtZiBNYWtlZmlsZQorCSQoUk0pIC1yZiAke1RESVJ9CmRpZmYgLS1naXQgYS90ZXN0cy9SRUFETUUgYi90ZXN0cy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA3NWRiNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL1JFQURNRQpAQCAtMCwwICsxLDY4IEBACitUaGVzZSBpbWFnZXMgY29udGFpbiB2YXJpb3VzIGZvcm1zIG9mIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIHdoaWNoCitlMmZzY2sgd2lsbCBjb3JyZWN0LiAgVGhleSBhcmUgdXNlZCBhcyBhIHJlZ3Jlc3Npb24gdGVzdCBmb3IgZTJmc2NrLgorCitUaGUgdGVzdF9zY3JpcHQgcHJvZ3JhbSB3aWxsIGF1dG9tYXRpY2FsbHkgcnVuIGUyZnNjayBhZ2FpbnN0IHRoZQorZmlsZXN5c3RlbSBpbWFnZXMuICBJdCB3aWxsIHJ1biB0aGVtIHR3byB0aW1lcywgYW5kIGRpc3BsYXkgdGhlIGV4aXQKK3N0YXR1cyBmb3IgZWFjaCBydW4uICBUaGUgbWVhbmluZyBvZiB0aGUgZXhpdCBzdGF0dXMgY29kZXMgYXJlIGFzCitmb2xsb3dzOgorCisJMAkJTm8gZmlsZXN5c3RlbSBlcnJvcnMgd2VyZSBkZXRlY3RlZAorCTEJCUZpbGVzeXN0ZW0gZXJyb3JzIGRldGVjdGVkLCBidXQgY29ycmVjdGVkCisJMgkJU3lzdGVtIHNob3VsZCBiZSByZWJvb3RlZAorCTQJCUZpbGVzeXN0ZW0gZXJyb3JzIGxlZnQgdW5jb3JyZWN0ZWQKKwk4CQlPcGVyYXRpb25hbCBlcnJvciAoZ2VuZXJhbGx5IG1lYW5zIGludGVybmFsIGVycm9yLAorCQkJCW9yIGZpbGVzeXN0ZW0gZXJyb3IgdGhhdCB0aGUgZTJmc2NrIHdhcyBub3QKKwkJCQlwcmVwYXJlZCB0byBkZWFsIHdpdGgpCisJMTYJCVVzYWdlIG9yIHN5bnRheCBlcnJvcgorCitEdXJpbmcgdGhlIHJlZ3Jlc3Npb24gdGVzdCwgdGhlIGZpcnN0IGV4aXQgY29kZSBzaG91bGQgYmUgMSwgYW5kIHRoZQorc2Vjb25kIGV4aXQgY29kZSBzaG91bGQgYmUgMC4gIEluIG90aGVyIHdvcmRzLCBhbGwgKHdpdGggb25lCitleGNlcHRpb24pIG9mIHRoZSB0ZXN0IGZpbGVzeXN0ZW1zIGluIHRoaXMgZGlyZWN0b3J5IGhhdmUgc29tZSBzb3J0IG9mCitmaWxlc3lzdGVtIGNvcnJ1cHRpb24sIHdoaWNoIGUyZnNjayBzaG91bGQgZml4IG9uIHRoZSBmaXJzdCBwYXNzLgorQWZ0ZXIgdGhlIGZpcnN0IHBhc3MsIGUyZnNjayBzaG91bGQgbGVhdmUgYSBmdWxseSBjb25zaXN0ZW50CitmaWxlc3lzdGVtIHdpdGggbm8gZGV0ZWN0YWJsZSBlcnJvcnMgZm91bmQgaW4gdGhlIHNlY29uZCBwYXNzLiAgVGhlCitleGNlcHRpb24gaXMgdGhlIG9rZ3JvdXAuaW1nIGZpbGVzeXN0ZW0sIHdoaWNoIGNvbnRhaW5zIG5vIGVycm9ycywgYW5kCitzbyBib3RoIGV4aXQgY29kZXMgc2hvdWxkIGJlIDAuCisKK05PVEU6IEl0IGFwcGVhcnMgdGhhdCBhdCBsZWFzdCBzb21lIHZlcnNpb25zIG9mIHRoZSBvcmlnaW5hbCBlMmZzY2sgZG8KK25vdCBleGl0IHdpdGggYW4gZXhpdCBzdGF0dXMgY29kZSBvZiAxIGFmdGVyIGNvcnJlY3RpbmcgZmlsZXN5c3RlbQorZXJyb3JzLiAgU28gaWYgeW91IG1vZGlmeSB0aGUgdGVzdF9zY3JpcHQgdG8gdHJ5IHJ1bm5pbmcgdGhlc2UKK2ZpbGVzeXN0ZW1zIGFnYWluc3QgdGhlIG9yaWdpbmFsIGUyZnNjaywgeW91IHdpbGwgaGF2ZSB0byBpbnNwZWN0IHRoZQordGVzdF9zY3JpcHQubG9nIGZpbGUgbWFudWFsbHkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitIZXJlJ3MgYSBvbmUtbGluZSBkZXNjcmlwdG9ucyBvZiB0aGUgdmFyaW91cyB0ZXN0IGltYWdlcyBpbiB0aGlzCitkaXJlY3Rvcnk6CisKK2JhZGRpci5pbWcJCUZpbGVzeXN0ZW0gd2l0aCBhIGNvcnJ1cHRlZCBkaXJlY3RvcnkKK2JhZGJibG9ja3MuaW1nCQlGaWxlc3lzdGVtIHdpdGggaWxsZWdhbCBibG9ja3MgaW4gdGhlIGJhZCBibG9jayBpbm9kZS4KK2JhZGlub2RlLmltZwkJRmlsZXN5c3RlbSB3aXRoIHZhcmlvdXMgZGlmZmVyZW50IGNvcnJ1cHRlZCBpbm9kZQorCQkJCWVudHJpZXMuCitiYWRsa2NudC5pbWcJCUZpbGVzeXN0ZW0gd2l0aCBkZWxldGVkIGZpbGVzIHdpdGggbm9uLXplcm8gbGluayBjb3VudAorYmFkcm9vdC5pbWcJCUZpbGVzeXN0ZW0gd2l0aCBhIGZpbGUgZm9yIGEgcm9vdCBkaXJlY3RvcnkKK2JhZHRhYmxlLmltZwkJRmlsZXN5c3RlbSB3aXRoIGJsb2NrcyBzaGFyZWQgYmV0d2VlbiB0aGUgYml0bWFwcyBhbmQKKwkJCQlpbm9kZSB0YWJsZSBibG9ja3MgYW5kIHRoZSBiYWQgYmxvY2sgaW5vZGUKK2JiZmlsZS5pbWcJCUZpbGVzeXN0ZW0gd2l0aCBmaWxlcyBjb250YWluaW5nIGJhZCBibG9ja3MKK2JpdG1hcHMuaW1nCQlGaWxlc3lzdGVtIHdpdGggY29ycnVwdGVkIGlub2RlIGFuZCBibG9jayBiaXRtYXBzCitkaXJsaW5rLmltZwkJRmlsZXN5c3RlbSB3aXRoIGEgaGFyZCBsaW5rIHRvIGEgZGlyZWN0b3J5CitkdXAuaW1nCQkJRmlsZXN5c3RlbSB3aXRoIGJsb2NrcyBjbGFpbWVkIGJ5IHR3byBkaWZmZXJlbnQgZmlsZXMKK2R1cDIuaW1nCQlGaWxlc3lzdGVtIHdpdGggYmxvY2tzIGNsYWltZWQgYnkgdGhyZWUgZGlmZmVyZW50IGZpbGVzCitkdXBmc2Jsa3MuaW1nCQlGaWxlc3lzdGVtIHdpdGggYmxvY2tzIGNsYWltZWQgYnkgYSBmaWxlIGFuZAorCQkJCWlub2RlL2Jsb2NrIGJpdG1hcHMgYW5kIGlub2RlIHRhYmxlcworZHVwc3VwZXIuaW1nCQlGaWxlc3lzdGVtIHdpdGggYmxvY2tzIGNsYWltZWQgYnkgYSBmaWxlIGFuZAorCQkJCXRoZSBzdXBlcmJsb2NrIC8gZ3JvdXAgZGVzY3JpcHRvcnMKK2VuZC1iaXRtYXAuaW1nCQlGaWxlc3lzdGVtIHdpdGggY29ycnVwdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBibG9jayAKKwkJCQliaXRtYXAKK2V4cGFuZC5pbWcJCVRlc3RzIGUyZnNjaydzIGFiaWxpdHkgdG8gZXhwYW5kIGxvc3QrZm91bmQgaWYgCisJCQkJbmVjZXNzYXJ5CitscGYuaW1nCQkJRmlsZXN5c3RlbSB3aXRoIGRpc2Nvbm5lY3RlZCBmaWxlcyBhbmQgbm8gL2xvc3QrZm91bmQgCisJCQkJZGlyZWN0b3J5Citta2UyZnMyYi5pbWcJCUZpbGVzeXN0ZW0gd2l0aCBjb3JydXB0aW9uIHNpbWlsYXIgdG8gdGhhdAorCQkJCWNyZWF0ZWQgYnkgbWtlMmZzIHZlcnNpb24gMC4yYgorbm9yb290LmltZwkJRmlsZXN5c3RlbSB3aXRoIGEgZGVsZXRlZCByb290IGRpcmVjdG9yeQorb2tncm91cC5pbWcJCUZpbGVzeXN0ZW0gdGhhdCdzIGV4YWN0bHkgODE5MyBibG9ja3MgbG9uZyAKKwkJCQkob3RoZXJ3aXNlIE9LKQorb3ZlcmZzYmxrcy5pbWcJCUZpbGVzeXN0ZW0gd2l0aCBvdmVybGFwcGluZyBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcworc3ltbGlua3MuaW1nCQlGaWxlc3lzdGVtIHdpdGggYmFkIHN5bWxpbmsgc2l6ZXMKKworCmRpZmYgLS1naXQgYS90ZXN0cy9kX2xvYWRkdW1wL2V4cGVjdCBiL3Rlc3RzL2RfbG9hZGR1bXAvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MGRmODgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kX2xvYWRkdW1wL2V4cGVjdApAQCAtMCwwICsxLDE4IEBACitkZWJ1Z2ZzIGxvYWQvZHVtcCB0ZXN0Citta2UyZnMgLUZxIC1iIDEwMjQgdGVzdC5pbWcgNTEyCitFeGl0IHN0YXR1cyBpcyAwCitkZWJ1Z2ZzIC1SICcnd3JpdGUgZF9sb2FkZHVtcC50bXAgdGVzdF9kYXRhJycgLXcgdGVzdC5pbWcKK0FsbG9jYXRlZCBpbm9kZTogMTIKK0V4aXQgc3RhdHVzIGlzIDAKK2UyZnNjayAteWYgLU4gdGVzdF9maWxlc3lzCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi82NCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDE1OC81MTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitkZWJ1Z2ZzIC1SICcnZHVtcCB0ZXN0X2RhdGEgZF9sb2FkZHVtcC52ZXIudG1wJycgdGVzdC5pbWcKK0V4aXQgc3RhdHVzIGlzIDAKK2NtcCBkX2xvYWRkdW1wLnRtcCBkX2xvYWRkdW1wLnZlci50bXAKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2RfbG9hZGR1bXAvbmFtZSBiL3Rlc3RzL2RfbG9hZGR1bXAvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjVlYzNiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZF9sb2FkZHVtcC9uYW1lCkBAIC0wLDAgKzEgQEAKK2RlYnVnZnMgbG9hZC9kdW1wIHRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL2RfbG9hZGR1bXAvc2NyaXB0IGIvdGVzdHMvZF9sb2FkZHVtcC9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3MjdiYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RfbG9hZGR1bXAvc2NyaXB0CkBAIC0wLDAgKzEsNjYgQEAKK2lmIHRlc3QgLXggJERFQlVHRlNfRVhFOyB0aGVuCisKK09VVD0kdGVzdF9uYW1lLmxvZworRVhQPSR0ZXN0X2Rpci9leHBlY3QKK1ZFUklGWV9GU0NLX09QVD0teWYKKworVEVTVF9EQVRBPSR0ZXN0X25hbWUudG1wCitWRVJJRllfREFUQT0kdGVzdF9uYW1lLnZlci50bXAKKworZWNobyAiZGVidWdmcyBsb2FkL2R1bXAgdGVzdCIgPiAkT1VUCisKK2RkIGlmPS9kZXYvemVybyBvZj0kVE1QRklMRSBicz0xayBjb3VudD01MTIgPiAvZGV2L251bGwgMj4mMQorCitlY2hvICJta2UyZnMgLUZxIC1iIDEwMjQgdGVzdC5pbWcgNTEyIiA+PiAkT1VUCisKKyRNS0UyRlMgLUZxICRUTVBGSUxFIDUxMiA+IC9kZXYvbnVsbCAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VUCisKK2RkIGlmPSRURVNUX0JJVFMgb2Y9JFRFU1RfREFUQSBicz0xMjhrIGNvdW50PTEgY29udj1zeW5jID4gL2Rldi9udWxsIDI+JjEgCitlY2hvICJmaWxlIGZyYWdtZW50IG9kZCBzaXplIiA+PiAkVEVTVF9EQVRBCisKK2VjaG8gImRlYnVnZnMgLVIgJyd3cml0ZSAkVEVTVF9EQVRBIHRlc3RfZGF0YScnIC13IHRlc3QuaW1nIiA+ICRPVVQubmV3CiskREVCVUdGUyAtUiAid3JpdGUgJFRFU1RfREFUQSB0ZXN0X2RhdGEiIC13ICRUTVBGSUxFID4+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCisKK2VjaG8gZTJmc2NrICRWRVJJRllfRlNDS19PUFQgLU4gdGVzdF9maWxlc3lzID4gJE9VVC5uZXcKKyRGU0NLICRWRVJJRllfRlNDS19PUFQgLU4gdGVzdF9maWxlc3lzICRUTVBGSUxFID4+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCisKK2VjaG8gImRlYnVnZnMgLVIgJydkdW1wIHRlc3RfZGF0YSAkVkVSSUZZX0RBVEEnJyB0ZXN0LmltZyIgPiAkT1VULm5ldworJERFQlVHRlMgLVIgImR1bXAgdGVzdF9kYXRhICRWRVJJRllfREFUQSIgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKKworZWNobyAiY21wICRURVNUX0RBVEEgJFZFUklGWV9EQVRBIiA+PiAkT1VUCitjbXAgJFRFU1RfREFUQSAkVkVSSUZZX0RBVEEgPj4kT1VUCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VUCisKKyMKKyMgRG8gdGhlIHZlcmlmaWNhdGlvbgorIworCitybSAtZiAkVkVSSUZZX0RBVEEgJFRFU1RfREFUQSAkVE1QRklMRSAkT1VULm5ldworY21wIC1zICRPVVQgJEVYUAorc3RhdHVzPSQ/CisKK2lmIFsgIiRzdGF0dXMiID0gMCBdIDsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBvayIKKwl0b3VjaCAkdGVzdF9uYW1lLm9rCitlbHNlCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IGZhaWxlZCIKKwlkaWZmICRESUZGX09QVFMgJEVYUCAkT1VUID4gJHRlc3RfbmFtZS5mYWlsZWQKK2ZpCisKK3Vuc2V0IFZFUklGWV9GU0NLX09QVCBOQVRJVkVfRlNDS19PUFQgT1VUIEVYUCBURVNUX0RBVEEgVkVSSUZZX0RBVEEKKworZWxzZSAjaWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpIApkaWZmIC0tZ2l0IGEvdGVzdHMvZF9zcGVjaWFsX2ZpbGVzL2V4cGVjdCBiL3Rlc3RzL2Rfc3BlY2lhbF9maWxlcy9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyZGJmYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Rfc3BlY2lhbF9maWxlcy9leHBlY3QKQEAgLTAsMCArMSw4NSBAQAorZGVidWdmcyBjcmVhdGUgc3BlY2lhbCBmaWxlcworbWtlMmZzIC1GcSAtYiAxMDI0IHRlc3QuaW1nIDUxMgorRXhpdCBzdGF0dXMgaXMgMAorZGVidWdmcyAtUiAnJ3N0YXQgZm9vJycgLXcgdGVzdC5pbWcKK0lub2RlOiAxMiAgIFR5cGU6IHN5bWxpbmsgICAgTW9kZTogIDA3NzcgICBGbGFnczogMHgwCitHZW5lcmF0aW9uOiAwICAgIFZlcnNpb246IDB4MDAwMDAwMDAKK1VzZXI6ICAgICAwICAgR3JvdXA6ICAgICAwICAgU2l6ZTogMworRmlsZSBBQ0w6IDAgICAgRGlyZWN0b3J5IEFDTDogMAorTGlua3M6IDEgICBCbG9ja2NvdW50OiAwCitGcmFnbWVudDogIEFkZHJlc3M6IDAgICAgTnVtYmVyOiAwICAgIFNpemU6IDAKK2N0aW1lOiAweDUwZjU2MGUwIC0tIFR1ZSBKYW4gMTUgMTQ6MDA6MDAgMjAxMworYXRpbWU6IDB4NTBmNTYwZTAgLS0gVHVlIEphbiAxNSAxNDowMDowMCAyMDEzCittdGltZTogMHg1MGY1NjBlMCAtLSBUdWUgSmFuIDE1IDE0OjAwOjAwIDIwMTMKK0Zhc3RfbGlua19kZXN0OiBiYXIKK0V4aXQgc3RhdHVzIGlzIDAKK2RlYnVnZnMgLVIgJydzdGF0IGZvbzInJyAtdyB0ZXN0LmltZworSW5vZGU6IDEzICAgVHlwZTogc3ltbGluayAgICBNb2RlOiAgMDc3NyAgIEZsYWdzOiAweDAKK0dlbmVyYXRpb246IDAgICAgVmVyc2lvbjogMHgwMDAwMDAwMAorVXNlcjogICAgIDAgICBHcm91cDogICAgIDAgICBTaXplOiA4MAorRmlsZSBBQ0w6IDAgICAgRGlyZWN0b3J5IEFDTDogMAorTGlua3M6IDEgICBCbG9ja2NvdW50OiAyCitGcmFnbWVudDogIEFkZHJlc3M6IDAgICAgTnVtYmVyOiAwICAgIFNpemU6IDAKK2N0aW1lOiAweDUwZjU2MGUwIC0tIFR1ZSBKYW4gMTUgMTQ6MDA6MDAgMjAxMworYXRpbWU6IDB4NTBmNTYwZTAgLS0gVHVlIEphbiAxNSAxNDowMDowMCAyMDEzCittdGltZTogMHg1MGY1NjBlMCAtLSBUdWUgSmFuIDE1IDE0OjAwOjAwIDIwMTMKK0JMT0NLUzoKKygwKToyOAorVE9UQUw6IDEKKworRXhpdCBzdGF0dXMgaXMgMAorZGVidWdmcyAtUiAnJ2Jsb2NrX2R1bXAgMjgnJyAtdyB0ZXN0LmltZworMDAwMCAgMzEzMiAzMzM0IDM1MzYgMzczOCAzOTMwIDMxMzIgMzMzNCAzNTM2ICAxMjM0NTY3ODkwMTIzNDU2CiswMDIwICAzNzM4IDM5MzAgMzEzMiAzMzM0IDM1MzYgMzczOCAzOTMwIDMxMzIgIDc4OTAxMjM0NTY3ODkwMTIKKzAwNDAgIDMzMzQgMzUzNiAzNzM4IDM5MzAgMzEzMiAzMzM0IDM1MzYgMzczOCAgMzQ1Njc4OTAxMjM0NTY3OAorMDA2MCAgMzkzMCAzMTMyIDMzMzQgMzUzNiAzNzM4IDM5MzAgMzEzMiAzMzM0ICA5MDEyMzQ1Njc4OTAxMjM0CiswMTAwICAzNTM2IDM3MzggMzkzMCAzMTMyIDMzMzQgMzUzNiAzNzM4IDM5MzAgIDU2Nzg5MDEyMzQ1Njc4OTAKKzAxMjAgIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAgLi4uLi4uLi4uLi4uLi4uLgorKgorCitFeGl0IHN0YXR1cyBpcyAwCitkZWJ1Z2ZzIC1SICcnc3RhdCBwaXBlJycgLXcgdGVzdC5pbWcKK0lub2RlOiAxNCAgIFR5cGU6IEZJRk8gICAgTW9kZTogIDAwMDAgICBGbGFnczogMHgwCitHZW5lcmF0aW9uOiAwICAgIFZlcnNpb246IDB4MDAwMDAwMDAKK1VzZXI6ICAgICAwICAgR3JvdXA6ICAgICAwICAgU2l6ZTogMAorRmlsZSBBQ0w6IDAgICAgRGlyZWN0b3J5IEFDTDogMAorTGlua3M6IDEgICBCbG9ja2NvdW50OiAwCitGcmFnbWVudDogIEFkZHJlc3M6IDAgICAgTnVtYmVyOiAwICAgIFNpemU6IDAKK2N0aW1lOiAweDUwZjU2MGUwIC0tIFR1ZSBKYW4gMTUgMTQ6MDA6MDAgMjAxMworYXRpbWU6IDB4NTBmNTYwZTAgLS0gVHVlIEphbiAxNSAxNDowMDowMCAyMDEzCittdGltZTogMHg1MGY1NjBlMCAtLSBUdWUgSmFuIDE1IDE0OjAwOjAwIDIwMTMKK0JMT0NLUzoKKworRXhpdCBzdGF0dXMgaXMgMAorZGVidWdmcyAtUiAnJ3N0YXQgc2RhJycgLXcgdGVzdC5pbWcKK0lub2RlOiAxNSAgIFR5cGU6IGJsb2NrIHNwZWNpYWwgICAgTW9kZTogIDAwMDAgICBGbGFnczogMHgwCitHZW5lcmF0aW9uOiAwICAgIFZlcnNpb246IDB4MDAwMDAwMDAKK1VzZXI6ICAgICAwICAgR3JvdXA6ICAgICAwICAgU2l6ZTogMAorRmlsZSBBQ0w6IDAgICAgRGlyZWN0b3J5IEFDTDogMAorTGlua3M6IDEgICBCbG9ja2NvdW50OiAwCitGcmFnbWVudDogIEFkZHJlc3M6IDAgICAgTnVtYmVyOiAwICAgIFNpemU6IDAKK2N0aW1lOiAweDUwZjU2MGUwIC0tIFR1ZSBKYW4gMTUgMTQ6MDA6MDAgMjAxMworYXRpbWU6IDB4NTBmNTYwZTAgLS0gVHVlIEphbiAxNSAxNDowMDowMCAyMDEzCittdGltZTogMHg1MGY1NjBlMCAtLSBUdWUgSmFuIDE1IDE0OjAwOjAwIDIwMTMKK0RldmljZSBtYWpvci9taW5vciBudW1iZXI6IDA4OjAwIChoZXggMDg6MDApCitFeGl0IHN0YXR1cyBpcyAwCitkZWJ1Z2ZzIC1SICcnc3RhdCBudWxsJycgLXcgdGVzdC5pbWcKK0lub2RlOiAxNiAgIFR5cGU6IGNoYXJhY3RlciBzcGVjaWFsICAgIE1vZGU6ICAwMDAwICAgRmxhZ3M6IDB4MAorR2VuZXJhdGlvbjogMCAgICBWZXJzaW9uOiAweDAwMDAwMDAwCitVc2VyOiAgICAgMCAgIEdyb3VwOiAgICAgMCAgIFNpemU6IDAKK0ZpbGUgQUNMOiAwICAgIERpcmVjdG9yeSBBQ0w6IDAKK0xpbmtzOiAxICAgQmxvY2tjb3VudDogMAorRnJhZ21lbnQ6ICBBZGRyZXNzOiAwICAgIE51bWJlcjogMCAgICBTaXplOiAwCitjdGltZTogMHg1MGY1NjBlMCAtLSBUdWUgSmFuIDE1IDE0OjAwOjAwIDIwMTMKK2F0aW1lOiAweDUwZjU2MGUwIC0tIFR1ZSBKYW4gMTUgMTQ6MDA6MDAgMjAxMworbXRpbWU6IDB4NTBmNTYwZTAgLS0gVHVlIEphbiAxNSAxNDowMDowMCAyMDEzCitEZXZpY2UgbWFqb3IvbWlub3IgbnVtYmVyOiAwMTowMyAoaGV4IDAxOjAzKQorRXhpdCBzdGF0dXMgaXMgMAorZTJmc2NrIC15ZiAtTiB0ZXN0X2ZpbGVzeXMKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE2LzY0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjkvNTEyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZF9zcGVjaWFsX2ZpbGVzL25hbWUgYi90ZXN0cy9kX3NwZWNpYWxfZmlsZXMvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGQxMGQyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZF9zcGVjaWFsX2ZpbGVzL25hbWUKQEAgLTAsMCArMSBAQAorY3JlYXRlIHNwZWNpYWwgZmlsZXMgaW4gZGVidWdmcwpkaWZmIC0tZ2l0IGEvdGVzdHMvZF9zcGVjaWFsX2ZpbGVzL3NjcmlwdCBiL3Rlc3RzL2Rfc3BlY2lhbF9maWxlcy9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkZmY1ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Rfc3BlY2lhbF9maWxlcy9zY3JpcHQKQEAgLTAsMCArMSw5NCBAQAoraWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKworT1VUPSR0ZXN0X25hbWUubG9nCitFWFA9JHRlc3RfZGlyL2V4cGVjdAorVkVSSUZZX0ZTQ0tfT1BUPS15ZgorCitURVNUX0RBVEE9JHRlc3RfbmFtZS50bXAKK1ZFUklGWV9EQVRBPSR0ZXN0X25hbWUudmVyLnRtcAorCitlY2hvICJkZWJ1Z2ZzIGNyZWF0ZSBzcGVjaWFsIGZpbGVzIiA+ICRPVVQKKworZGQgaWY9L2Rldi96ZXJvIG9mPSRUTVBGSUxFIGJzPTFrIGNvdW50PTUxMiA+IC9kZXYvbnVsbCAyPiYxCisKK2VjaG8gIm1rZTJmcyAtRnEgLWIgMTAyNCB0ZXN0LmltZyA1MTIiID4+ICRPVVQKKworJE1LRTJGUyAtRnEgJFRNUEZJTEUgNTEyID4gL2Rldi9udWxsIDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQKKworJERFQlVHRlMgLXcgJFRNUEZJTEUgPDwgRU9GID4gL2Rldi9udWxsIDI+JjEKK3NldF9jdXJyZW50X3RpbWUgMjAxMzAxMTUxNDAwMDAKK3NldF9zdXBlcl92YWx1ZSBsYXN0Y2hlY2sgMAorc2V0X3N1cGVyX3ZhbHVlIGhhc2hfc2VlZCBudWxsCitzZXRfc3VwZXJfdmFsdWUgbWtmc190aW1lIDAKK3N5bWxpbmsgZm9vIGJhcgorc3ltbGluayBmb28yIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwCitta25vZCBwaXBlIHAKK21rbm9kIHNkYSBiIDggMAorbWtub2QgbnVsbCBjIDEgMworRU9GCisKK2VjaG8gImRlYnVnZnMgLVIgJydzdGF0IGZvbycnIC13IHRlc3QuaW1nIiA+ICRPVVQubmV3CiskREVCVUdGUyAtUiAic3RhdCBmb28iIC13ICRUTVBGSUxFID4+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCisKK2VjaG8gImRlYnVnZnMgLVIgJydzdGF0IGZvbzInJyAtdyB0ZXN0LmltZyIgPiAkT1VULm5ldworJERFQlVHRlMgLVIgInN0YXQgZm9vMiIgLXcgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKKworZWNobyAiZGVidWdmcyAtUiAnJ2Jsb2NrX2R1bXAgMjgnJyAtdyB0ZXN0LmltZyIgPiAkT1VULm5ldworJERFQlVHRlMgLVIgImJsb2NrX2R1bXAgMjgiIC13ICRUTVBGSUxFID4+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCisKK2VjaG8gImRlYnVnZnMgLVIgJydzdGF0IHBpcGUnJyAtdyB0ZXN0LmltZyIgPiAkT1VULm5ldworJERFQlVHRlMgLVIgInN0YXQgcGlwZSIgLXcgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKKworZWNobyAiZGVidWdmcyAtUiAnJ3N0YXQgc2RhJycgLXcgdGVzdC5pbWciID4gJE9VVC5uZXcKKyRERUJVR0ZTIC1SICJzdGF0IHNkYSIgLXcgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKKworZWNobyAiZGVidWdmcyAtUiAnJ3N0YXQgbnVsbCcnIC13IHRlc3QuaW1nIiA+ICRPVVQubmV3CiskREVCVUdGUyAtUiAic3RhdCBudWxsIiAtdyAkVE1QRklMRSA+PiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAorCitlY2hvIGUyZnNjayAkVkVSSUZZX0ZTQ0tfT1BUIC1OIHRlc3RfZmlsZXN5cyA+ICRPVVQubmV3CiskRlNDSyAkVkVSSUZZX0ZTQ0tfT1BUIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+PiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAorCisjCisjIERvIHRoZSB2ZXJpZmljYXRpb24KKyMKKworcm0gLWYgJFRNUEZJTEUgJE9VVC5uZXcKK2NtcCAtcyAkT1VUICRFWFAKK3N0YXR1cz0kPworCitpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJZGlmZiAkRElGRl9PUFRTICRFWFAgJE9VVCA+ICR0ZXN0X25hbWUuZmFpbGVkCitmaQorCit1bnNldCBWRVJJRllfRlNDS19PUFQgTkFUSVZFX0ZTQ0tfT1BUIE9VVCBFWFAgVEVTVF9EQVRBIFZFUklGWV9EQVRBCisKK2Vsc2UgI2lmIHRlc3QgLXggJERFQlVHRlNfRVhFOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaSAKZGlmZiAtLWdpdCBhL3Rlc3RzL2RlZmF1bHRzL2Vfc2NyaXB0IGIvdGVzdHMvZGVmYXVsdHMvZV9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM5Y2ZiNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RlZmF1bHRzL2Vfc2NyaXB0CkBAIC0wLDAgKzEsNDcgQEAKKyMKKyMgRGVmYXVsdCBzY3JpcHQgZm9yIHRlc3RpbmcgdGhlIHJlbG9jYXRpb24gbGlicmFyeSByb3V0aW5lcyAKKyMgKGlyZWwgLS0gaW5vZGUgcmVsb2NhdGlvbiBhbmQgYnJlbCAtLSBibG9jayByZWxvY2F0aW9uKQorIworCitpZiBbIC1mICR0ZXN0X2Rpci9zZXR1cCBdOyB0aGVuCisJLiAkdGVzdF9kaXIvc2V0dXAKK2ZpCisKK2lmIFsgIiRjbGFzcyJ4ID0geCBdOyB0aGVuCisJY2xhc3M9YGVjaG8gJHRlc3RfbmFtZSB8IHNlZCAtZSAncy9lX1woW15fXSpcKV9cKC4qXCkvXDEvJ2AKKwlpbnN0YW5jZT1gZWNobyAkdGVzdF9uYW1lIHwgc2VkIC1lICdzL2VfXChbXl9dKlwpX1woLipcKS9cMi8nYAorZmkKK2lmIFsgIiRPVVQieCA9IHggXTsgdGhlbgorCU9VVD0kdGVzdF9uYW1lLmxvZworZmkKK2lmIFsgIiRFWFBFQ1QieCA9IHggXTsgdGhlbgorCUVYUEVDVD0kU1JDRElSL3Byb2dzL3Rlc3RfZGF0YS9leHBlY3QuJGNsYXNzCitmaQorCitpZiBbICIkY2xhc3MiID0gaXJlbCBdOyB0aGVuCisJVEVTVF9QUk9HPSRURVNUX1JFTAorZWxpZiBbICIkY2xhc3MiID0gYnJlbCBdOyB0aGVuCisJVEVTVF9QUk9HPSRURVNUX1JFTAorZWxpZiBbICIkY2xhc3MiID0gaWNvdW50IF07IHRoZW4KKwlURVNUX1BST0c9JFRFU1RfSUNPVU5UCitlbHNlCisJVEVTVF9QUk9HPS9iaW4vY2F0CitmaQorCitjYXQgJFNSQ0RJUi9wcm9ncy90ZXN0X2RhdGEvJGluc3RhbmNlLnNldHVwICRTUkNESVIvcHJvZ3MvdGVzdF9kYXRhL3Rlc3QuJGNsYXNzIFwKKyAgICB8ICRURVNUX1BST0cgLWYgLSAyPiYxIHwgdHIgLWQgXFwwMTUgPiAkT1VUIAorCitjbXAgLXMgJEVYUEVDVCAkT1VUCitzdGF0dXM9JD8KKworcm0gLWYgJHRlc3RfbmFtZS5mYWlsZWQgJHRlc3RfbmFtZS5vaworCitpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KKyAgICBlY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisgICAgdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorICAgIGVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisgICAgZGlmZiAkRElGRl9PUFRTICRFWFBFQ1QgJE9VVCA+ICR0ZXN0X25hbWUuZmFpbGVkCitmaQorCit1bnNldCBFWFBFQ1QgT1VUIGNsYXNzIGluc3RhbmNlCmRpZmYgLS1naXQgYS90ZXN0cy9kZWZhdWx0cy9mX3NjcmlwdCBiL3Rlc3RzL2RlZmF1bHRzL2Zfc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhM2IzNGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kZWZhdWx0cy9mX3NjcmlwdApAQCAtMCwwICsxIEBACisuICRjbWRfZGlyL3J1bl9lMmZzY2sKZGlmZiAtLWdpdCBhL3Rlc3RzL2VfYnJlbF9ibWEvbmFtZSBiL3Rlc3RzL2VfYnJlbF9ibWEvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ1NTg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZV9icmVsX2JtYS9uYW1lCkBAIC0wLDAgKzEgQEAKK2Jsb2NrIHJlbG9jYXRpb24gdGFibGUgdXNpbmcgdGhlIG1lbW9yeSBhcnJheSBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvdGVzdHMvZV9icmVsX2JtYS9zY3JpcHQgYi90ZXN0cy9lX2JyZWxfYm1hL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzdlMmZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZV9icmVsX2JtYS9zY3JpcHQKQEAgLTAsMCArMSBAQAorZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCmRpZmYgLS1naXQgYS90ZXN0cy9lX2ljb3VudF9ub3JtYWwvbmFtZSBiL3Rlc3RzL2VfaWNvdW50X25vcm1hbC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMTc4NzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9lX2ljb3VudF9ub3JtYWwvbmFtZQpAQCAtMCwwICsxIEBACitpbm9kZSBjb3VudGluZyBzdHJ1Y3R1cmUgb3B0aW1pemVkIGZvciBsb3cgY291bnRzCmRpZmYgLS1naXQgYS90ZXN0cy9lX2ljb3VudF9vcHQvbmFtZSBiL3Rlc3RzL2VfaWNvdW50X29wdC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNmIxYTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9lX2ljb3VudF9vcHQvbmFtZQpAQCAtMCwwICsxIEBACitpbm9kZSBjb3VudGluZyBhYnN0cmFjdGlvbiBvcHRpbWl6ZWQgZm9yIGNvdW50aW5nCmRpZmYgLS1naXQgYS90ZXN0cy9lX2lyZWxfaW1hL25hbWUgYi90ZXN0cy9lX2lyZWxfaW1hL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVmZDcyZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2VfaXJlbF9pbWEvbmFtZQpAQCAtMCwwICsxIEBACitpbm9kZSByZWxvY2F0aW9uIHRhYmxlIHVzaW5nIHRoZSBtZW1vcnkgYXJyYXkgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzL2VfaXJlbF9pbWEvc2NyaXB0IGIvdGVzdHMvZV9pcmVsX2ltYS9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM3ZTJmYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2VfaXJlbF9pbWEvc2NyaXB0CkBAIC0wLDAgKzEgQEAKK2VjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl8xNjM4NF9ibG9jay9leHBlY3QuMSBiL3Rlc3RzL2ZfMTYzODRfYmxvY2svZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhNTY1OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfMTYzODRfYmxvY2svZXhwZWN0LjEKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8yMDQ4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMzkvMTAyNCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfMTYzODRfYmxvY2svZXhwZWN0LjIgYi90ZXN0cy9mXzE2Mzg0X2Jsb2NrL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YTU2NTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mXzE2Mzg0X2Jsb2NrL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMjA0OCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDM5LzEwMjQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mXzE2Mzg0X2Jsb2NrL2ltYWdlLmd6IGIvdGVzdHMvZl8xNjM4NF9ibG9jay9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWYzMTFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl8xNjM4NF9ibG9jay9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mXzE2Mzg0X2Jsb2NrL25hbWUgYi90ZXN0cy9mXzE2Mzg0X2Jsb2NrL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliMzExMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfMTYzODRfYmxvY2svbmFtZQpAQCAtMCwwICsxIEBACisxNjM4NCBieXRlIGJsb2Nrc2l6ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl84MTkyX2Jsb2NrL2V4cGVjdC4xIGIvdGVzdHMvZl84MTkyX2Jsb2NrL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YTU2NTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mXzgxOTJfYmxvY2svZXhwZWN0LjEKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8yMDQ4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMzkvMTAyNCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfODE5Ml9ibG9jay9leHBlY3QuMiBiL3Rlc3RzL2ZfODE5Ml9ibG9jay9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWE1NjU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl84MTkyX2Jsb2NrL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMjA0OCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDM5LzEwMjQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mXzgxOTJfYmxvY2svaW1hZ2UuZ3ogYi90ZXN0cy9mXzgxOTJfYmxvY2svaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVmMzExYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfODE5Ml9ibG9jay9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mXzgxOTJfYmxvY2svbmFtZSBiL3Rlc3RzL2ZfODE5Ml9ibG9jay9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZDhkY2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mXzgxOTJfYmxvY2svbmFtZQpAQCAtMCwwICsxIEBACis4MTkyIGJ5dGUgYmxvY2tzaXplCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZF9kaXNjb25uZWN0ZWRfaW5vZGUvZXhwZWN0LjEgYi90ZXN0cy9mX2JhZF9kaXNjb25uZWN0ZWRfaW5vZGUvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE4NjJmNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkX2Rpc2Nvbm5lY3RlZF9pbm9kZS9leHBlY3QuMQpAQCAtMCwwICsxLDUyIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDEgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC4KK0NsZWFyPyB5ZXMKKworSW5vZGUgMTUgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC4KK0NsZWFyPyB5ZXMKKworSW5vZGUgMTYgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC4KK0NsZWFyPyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKKy9sb3N0K2ZvdW5kIG5vdCBmb3VuZC4gIENyZWF0ZT8geWVzCisKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworSW5vZGUgMiByZWYgY291bnQgaXMgNCwgc2hvdWxkIGJlIDMuICBGaXg/IHllcworCitpX2ZpbGVfYWNsIGZvciBpbm9kZSAxMyAoLi4uKSBpcyA0MjE4Nzk4MjI1LCBzaG91bGQgYmUgemVyby4KK0NsZWFyPyB5ZXMKKworSW5vZGUgMTMgKC4uLikgaGFzIGludmFsaWQgbW9kZSAoMDExNzAwMykuCitDbGVhcj8geWVzCisKK2lfZmlsZV9hY2wgZm9yIGlub2RlIDE0ICguLi4pIGlzIDI4OTI4NTE2NDIsIHNob3VsZCBiZSB6ZXJvLgorQ2xlYXI/IHllcworCitJbm9kZSAxNCAoLi4uKSBoYXMgaW52YWxpZCBtb2RlICgwMTU0MjQ3KS4KK0NsZWFyPyB5ZXMKKworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDktLTE5KQorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3OSwgY291bnRlZD05MSkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoNzksIGNvdW50ZWQ9OTEpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg2LCBjb3VudGVkPTUpLgorRml4PyB5ZXMKKworRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgzLCBjb3VudGVkPTIpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDYsIGNvdW50ZWQ9NSkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgOS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZF9kaXNjb25uZWN0ZWRfaW5vZGUvZXhwZWN0LjIgYi90ZXN0cy9mX2JhZF9kaXNjb25uZWN0ZWRfaW5vZGUvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRmZWI3MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkX2Rpc2Nvbm5lY3RlZF9pbm9kZS9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgOS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZF9kaXNjb25uZWN0ZWRfaW5vZGUvaW1hZ2UuZ3ogYi90ZXN0cy9mX2JhZF9kaXNjb25uZWN0ZWRfaW5vZGUvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYyYjNkOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkX2Rpc2Nvbm5lY3RlZF9pbm9kZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZF9kaXNjb25uZWN0ZWRfaW5vZGUvbmFtZSBiL3Rlc3RzL2ZfYmFkX2Rpc2Nvbm5lY3RlZF9pbm9kZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOWVkZjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZF9kaXNjb25uZWN0ZWRfaW5vZGUvbmFtZQpAQCAtMCwwICsxIEBACitEaXNjb25uZWN0ZWQgaW5vZGUgd2l0aCBiYWQgZmllbGRzCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZF9sb2NhbF9qbmwvZXhwZWN0LjEgYi90ZXN0cy9mX2JhZF9sb2NhbF9qbmwvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAxNDBiNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkX2xvY2FsX2pubC9leHBlY3QuMQpAQCAtMCwwICsxLDE0IEBACitGb3VuZCBpbnZhbGlkIFYyIGpvdXJuYWwgc3VwZXJibG9jayBmaWVsZHMgKGZyb20gVjEgam91cm5hbCkuCitDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBqb3VybmFsIHN1cGVyYmxvY2suLi4KKworQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS8yNTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMDgwLzgxOTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZF9sb2NhbF9qbmwvZXhwZWN0LjIgYi90ZXN0cy9mX2JhZF9sb2NhbF9qbmwvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMyZGM3MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkX2xvY2FsX2pubC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEwODAvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkX2xvY2FsX2pubC9pbWFnZS5neiBiL3Rlc3RzL2ZfYmFkX2xvY2FsX2pubC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGRkNThhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRfbG9jYWxfam5sL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkX2xvY2FsX2pubC9uYW1lIGIvdGVzdHMvZl9iYWRfbG9jYWxfam5sL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI3NzI2NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkX2xvY2FsX2pubC9uYW1lCkBAIC0wLDAgKzEgQEAKK3Rlc3QgZm9yIGNvcnJ1cHQgbG9jYWwgam91cm5hbCAoYmFkIFYxLT5WMiBqb3VybmFsIHVwZ3JhZGUpCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZGJibG9ja3MvZXhwZWN0LjEgYi90ZXN0cy9mX2JhZGJibG9ja3MvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEwN2EyOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkYmJsb2Nrcy9leHBlY3QuMQpAQCAtMCwwICsxLDI4IEBACitGaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLgorCisuLi9lMmZzY2svZTJmc2NrOiBJbGxlZ2FsIGluZGlyZWN0IGJsb2NrIGZvdW5kIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrcyBpbm9kZQorVGhpcyBkb2Vzbid0IGJvZGUgd2VsbCwgYnV0IHdlJ2xsIHRyeSB0byBnbyBvbi4uLgorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2socykuICBDbGVhcj8geWVzCisKK0lsbGVnYWwgYmxvY2sgIzEgKDEwMSkgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzIgKDEwMykgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzMgKDIzNDUyMykgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ0xFQVJFRC4KK0lsbGVnYWwgaW5kaXJlY3QgYmxvY2sgKDIwMCkgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ0xFQVJFRC4KK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgKzUwCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDc4LCBjb3VudGVkPTc3KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3OCwgY291bnRlZD03NykuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjMvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRiYmxvY2tzL2V4cGVjdC4yIGIvdGVzdHMvZl9iYWRiYmxvY2tzL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYTIxN2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZGJibG9ja3MvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIzLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkYmJsb2Nrcy9pbWFnZS5neiBiL3Rlc3RzL2ZfYmFkYmJsb2Nrcy9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTM5YjdmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRiYmxvY2tzL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkYmJsb2Nrcy9uYW1lIGIvdGVzdHMvZl9iYWRiYmxvY2tzL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIyMGYzOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkYmJsb2Nrcy9uYW1lCkBAIC0wLDAgKzEgQEAKK2lsbGVnYWwgYmxvY2tzIGluIGJhZCBibG9jayBpbm9kZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRjbHVzdGVyL2V4cGVjdCBiL3Rlc3RzL2ZfYmFkY2x1c3Rlci9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNmZmZiNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkY2x1c3Rlci9leHBlY3QKQEAgLTAsMCArMSwxOTggQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTIgbG9naWNhbCBibG9jayAyIChwaHlzaWNhbCBibG9jayAxMTU0KSB2aW9sYXRlcyBjbHVzdGVyIGFsbG9jYXRpb24gcnVsZXMuCitXaWxsIGZpeCBpbiBwYXNzIDFCLgorSW5vZGUgMTIsIGlfYmxvY2tzIGlzIDMyLCBzaG91bGQgYmUgNjQuICBGaXg/IHllcworCitJbm9kZSAxNiBsb2dpY2FsIGJsb2NrIDUgKHBoeXNpY2FsIGJsb2NrIDExNzMpIHZpb2xhdGVzIGNsdXN0ZXIgYWxsb2NhdGlvbiBydWxlcy4KK1dpbGwgZml4IGluIHBhc3MgMUIuCitJbm9kZSAxNiwgaV9zaXplIGlzIDMwNzIsIHNob3VsZCBiZSA2MTQ0LiAgRml4PyB5ZXMKKworSW5vZGUgMTYsIGlfYmxvY2tzIGlzIDMyLCBzaG91bGQgYmUgNjQuICBGaXg/IHllcworCitJbm9kZSAxNyBsb2dpY2FsIGJsb2NrIDAgKHBoeXNpY2FsIGJsb2NrIDExODYpIHZpb2xhdGVzIGNsdXN0ZXIgYWxsb2NhdGlvbiBydWxlcy4KK1dpbGwgZml4IGluIHBhc3MgMUIuCitJbm9kZSAxNyBsb2dpY2FsIGJsb2NrIDIgKHBoeXNpY2FsIGJsb2NrIDExODQpIHZpb2xhdGVzIGNsdXN0ZXIgYWxsb2NhdGlvbiBydWxlcy4KK1dpbGwgZml4IGluIHBhc3MgMUIuCitJbm9kZSAxNywgaV9ibG9ja3MgaXMgMzIsIHNob3VsZCBiZSA2NC4gIEZpeD8geWVzCisKK0lub2RlIDE4IGxvZ2ljYWwgYmxvY2sgMyAocGh5c2ljYWwgYmxvY2sgMTIwMSkgdmlvbGF0ZXMgY2x1c3RlciBhbGxvY2F0aW9uIHJ1bGVzLgorV2lsbCBmaXggaW4gcGFzcyAxQi4KK0lub2RlIDE4LCBpX2Jsb2NrcyBpcyAzMiwgc2hvdWxkIGJlIDY0LiAgRml4PyB5ZXMKKworCitSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLgorUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTI6IDExNTQKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTM6IDExNTIgMTE1MyAxMTU0CitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDE0OiAxNjQ4IDE2NDkgMTY1MAorTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxNTogMTY1MAorTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxNjogMTE3MworTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxNzogMTE4NiAxMTg1IDExODQKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTg6IDEyMDEKK1Bhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKKyhUaGVyZSBhcmUgNyBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pCisKK0ZpbGUgL2EgKGlub2RlICMxMiwgbW9kIHRpbWUgVHVlIEp1biAxNyAwODowMDo1MCAyMDE0KSAKKyAgaGFzIDEgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMSBmaWxlKHMpOgorCS9iIChpbm9kZSAjMTMsIG1vZCB0aW1lIFR1ZSBKdW4gMTcgMDg6MDA6NTAgMjAxNCkKK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworRmlsZSAvYiAoaW5vZGUgIzEzLCBtb2QgdGltZSBUdWUgSnVuIDE3IDA4OjAwOjUwIDIwMTQpIAorICBoYXMgMSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAxIGZpbGUocyk6CisJL2EgKGlub2RlICMxMiwgbW9kIHRpbWUgVHVlIEp1biAxNyAwODowMDo1MCAyMDE0KQorTXVsdGlwbHktY2xhaW1lZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC4KKworRmlsZSAvYyAoaW5vZGUgIzE0LCBtb2QgdGltZSBUdWUgSnVuIDE3IDA4OjAwOjUwIDIwMTQpIAorICBoYXMgMSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAxIGZpbGUocyk6CisJL2QgKGlub2RlICMxNSwgbW9kIHRpbWUgVHVlIEp1biAxNyAwODowMDo1MCAyMDE0KQorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC9kIChpbm9kZSAjMTUsIG1vZCB0aW1lIFR1ZSBKdW4gMTcgMDg6MDA6NTAgMjAxNCkgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwkvYyAoaW5vZGUgIzE0LCBtb2QgdGltZSBUdWUgSnVuIDE3IDA4OjAwOjUwIDIwMTQpCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLgorCitGaWxlIC9lIChpbm9kZSAjMTYsIG1vZCB0aW1lIFR1ZSBKdW4gMTcgMDg6MDA6NTAgMjAxNCkgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDAgZmlsZShzKToKK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworRmlsZSAvZiAoaW5vZGUgIzE3LCBtb2QgdGltZSBUdWUgSnVuIDE3IDA4OjAwOjUwIDIwMTQpIAorICBoYXMgMSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAwIGZpbGUocyk6CitDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcz8geWVzCisKK0ZpbGUgL2cgKGlub2RlICMxOCwgbW9kIHRpbWUgVHVlIEp1biAxNyAwODowMDo1MCAyMDE0KSAKKyAgaGFzIDEgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMCBmaWxlKHMpOgorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNTAsIGNvdW50ZWQ9NDcpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDgwMCwgY291bnRlZD03NTIpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZnM6IDE4LzEyOCBmaWxlcyAoMjIuMiUgbm9uLWNvbnRpZ3VvdXMpLCAxMjk2LzIwNDggYmxvY2tzCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDEyLCBpX2Jsb2NrcyBpcyA2NCwgc2hvdWxkIGJlIDMyLiAgRml4PyB5ZXMKKworSW5vZGUgMTYsIGlfYmxvY2tzIGlzIDY0LCBzaG91bGQgYmUgMzIuICBGaXg/IHllcworCitJbm9kZSAxNywgaV9ibG9ja3MgaXMgNjQsIHNob3VsZCBiZSAzMi4gIEZpeD8geWVzCisKK0lub2RlIDE4LCBpX2Jsb2NrcyBpcyA2NCwgc2hvdWxkIGJlIDMyLiAgRml4PyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDExNjgtLTEyMDApCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDQ3LCBjb3VudGVkPTUwKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3NTIsIGNvdW50ZWQ9ODAwKS4KK0ZpeD8geWVzCisKKwordGVzdF9mczogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZzOiAxOC8xMjggZmlsZXMgKDUuNiUgbm9uLWNvbnRpZ3VvdXMpLCAxMjQ4LzIwNDggYmxvY2tzCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9mczogMTgvMTI4IGZpbGVzICg1LjYlIG5vbi1jb250aWd1b3VzKSwgMTI0OC8yMDQ4IGJsb2NrcworZGVidWdmczogc3RhdCAvYQorSW5vZGU6IDEyICAgVHlwZTogcmVndWxhciAgICBNb2RlOiAgMDY0NCAgIEZsYWdzOiAweDgwMDAwCitHZW5lcmF0aW9uOiAxMTE3MTUyMTU3ICAgIFZlcnNpb246IDB4MDAwMDAwMDEKK1VzZXI6ICAgICAwICAgR3JvdXA6ICAgICAwICAgU2l6ZTogMzA3MgorRmlsZSBBQ0w6IDAgICAgRGlyZWN0b3J5IEFDTDogMAorTGlua3M6IDEgICBCbG9ja2NvdW50OiAzMgorRnJhZ21lbnQ6ICBBZGRyZXNzOiAwICAgIE51bWJlcjogMCAgICBTaXplOiAwCitjdGltZTogMHg1MzlmZjViMiAtLSBUdWUgSnVuIDE3IDA4OjAwOjUwIDIwMTQKK2F0aW1lOiAweDUzOWZmNWIyIC0tIFR1ZSBKdW4gMTcgMDg6MDA6NTAgMjAxNAorbXRpbWU6IDB4NTM5ZmY1YjIgLS0gVHVlIEp1biAxNyAwODowMDo1MCAyMDE0CitFWFRFTlRTOgorKDAtMSk6MTEzNi0xMTM3LCAoMik6MTEzOAorZGVidWdmczogc3RhdCAvYgorSW5vZGU6IDEzICAgVHlwZTogcmVndWxhciAgICBNb2RlOiAgMDY0NCAgIEZsYWdzOiAweDgwMDAwCitHZW5lcmF0aW9uOiAxMTE3MTUyMTU4ICAgIFZlcnNpb246IDB4MDAwMDAwMDEKK1VzZXI6ICAgICAwICAgR3JvdXA6ICAgICAwICAgU2l6ZTogMzA3MgorRmlsZSBBQ0w6IDAgICAgRGlyZWN0b3J5IEFDTDogMAorTGlua3M6IDEgICBCbG9ja2NvdW50OiAzMgorRnJhZ21lbnQ6ICBBZGRyZXNzOiAwICAgIE51bWJlcjogMCAgICBTaXplOiAwCitjdGltZTogMHg1MzlmZjViMiAtLSBUdWUgSnVuIDE3IDA4OjAwOjUwIDIwMTQKK2F0aW1lOiAweDUzOWZmNWIyIC0tIFR1ZSBKdW4gMTcgMDg6MDA6NTAgMjAxNAorbXRpbWU6IDB4NTM5ZmY1YjIgLS0gVHVlIEp1biAxNyAwODowMDo1MCAyMDE0CitFWFRFTlRTOgorKDAtMik6MTE1Mi0xMTU0CitkZWJ1Z2ZzOiBzdGF0IC9jCitJbm9kZTogMTQgICBUeXBlOiByZWd1bGFyICAgIE1vZGU6ICAwNjQ0ICAgRmxhZ3M6IDB4ODAwMDAKK0dlbmVyYXRpb246IDExMTcxNTIxNTkgICAgVmVyc2lvbjogMHgwMDAwMDAwMQorVXNlcjogICAgIDAgICBHcm91cDogICAgIDAgICBTaXplOiAzMDcyCitGaWxlIEFDTDogMCAgICBEaXJlY3RvcnkgQUNMOiAwCitMaW5rczogMSAgIEJsb2NrY291bnQ6IDMyCitGcmFnbWVudDogIEFkZHJlc3M6IDAgICAgTnVtYmVyOiAwICAgIFNpemU6IDAKK2N0aW1lOiAweDUzOWZmNWIyIC0tIFR1ZSBKdW4gMTcgMDg6MDA6NTAgMjAxNAorYXRpbWU6IDB4NTM5ZmY1YjIgLS0gVHVlIEp1biAxNyAwODowMDo1MCAyMDE0CittdGltZTogMHg1MzlmZjViMiAtLSBUdWUgSnVuIDE3IDA4OjAwOjUwIDIwMTQKK0VYVEVOVFM6CisoMC0xKToxMjE2LTEyMTcsICgyKToxMjE4CitkZWJ1Z2ZzOiBzdGF0IC9kCitJbm9kZTogMTUgICBUeXBlOiByZWd1bGFyICAgIE1vZGU6ICAwNjQ0ICAgRmxhZ3M6IDB4MAorR2VuZXJhdGlvbjogMTExNzE1MjE2MCAgICBWZXJzaW9uOiAweDAwMDAwMDAxCitVc2VyOiAgICAgMCAgIEdyb3VwOiAgICAgMCAgIFNpemU6IDMwNzIKK0ZpbGUgQUNMOiAwICAgIERpcmVjdG9yeSBBQ0w6IDAKK0xpbmtzOiAxICAgQmxvY2tjb3VudDogMzIKK0ZyYWdtZW50OiAgQWRkcmVzczogMCAgICBOdW1iZXI6IDAgICAgU2l6ZTogMAorY3RpbWU6IDB4NTM5ZmY1YjIgLS0gVHVlIEp1biAxNyAwODowMDo1MCAyMDE0CithdGltZTogMHg1MzlmZjViMiAtLSBUdWUgSnVuIDE3IDA4OjAwOjUwIDIwMTQKK210aW1lOiAweDUzOWZmNWIyIC0tIFR1ZSBKdW4gMTcgMDg6MDA6NTAgMjAxNAorQkxPQ0tTOgorKFRJTkQpOjE2NTAKK1RPVEFMOiAxCisKK2RlYnVnZnM6IHN0YXQgL2UKK0lub2RlOiAxNiAgIFR5cGU6IHJlZ3VsYXIgICAgTW9kZTogIDA2NDQgICBGbGFnczogMHg4MDAwMAorR2VuZXJhdGlvbjogMTExNzE1MjE2MSAgICBWZXJzaW9uOiAweDAwMDAwMDAxCitVc2VyOiAgICAgMCAgIEdyb3VwOiAgICAgMCAgIFNpemU6IDYxNDQKK0ZpbGUgQUNMOiAwICAgIERpcmVjdG9yeSBBQ0w6IDAKK0xpbmtzOiAxICAgQmxvY2tjb3VudDogMzIKK0ZyYWdtZW50OiAgQWRkcmVzczogMCAgICBOdW1iZXI6IDAgICAgU2l6ZTogMAorY3RpbWU6IDB4NTM5ZmY1YjIgLS0gVHVlIEp1biAxNyAwODowMDo1MCAyMDE0CithdGltZTogMHg1MzlmZjViMiAtLSBUdWUgSnVuIDE3IDA4OjAwOjUwIDIwMTQKK210aW1lOiAweDUzOWZmNWIyIC0tIFR1ZSBKdW4gMTcgMDg6MDA6NTAgMjAxNAorRVhURU5UUzoKKygwLTIpOjE2NjQtMTY2NiwgKDUpOjE2NjkKK2RlYnVnZnM6IHN0YXQgL2YKK0lub2RlOiAxNyAgIFR5cGU6IHJlZ3VsYXIgICAgTW9kZTogIDA2NDQgICBGbGFnczogMHg4MDAwMAorR2VuZXJhdGlvbjogMTExNzE1MjE2MiAgICBWZXJzaW9uOiAweDAwMDAwMDAxCitVc2VyOiAgICAgMCAgIEdyb3VwOiAgICAgMCAgIFNpemU6IDMwNzIKK0ZpbGUgQUNMOiAwICAgIERpcmVjdG9yeSBBQ0w6IDAKK0xpbmtzOiAxICAgQmxvY2tjb3VudDogMzIKK0ZyYWdtZW50OiAgQWRkcmVzczogMCAgICBOdW1iZXI6IDAgICAgU2l6ZTogMAorY3RpbWU6IDB4NTM5ZmY1YjIgLS0gVHVlIEp1biAxNyAwODowMDo1MCAyMDE0CithdGltZTogMHg1MzlmZjViMiAtLSBUdWUgSnVuIDE3IDA4OjAwOjUwIDIwMTQKK210aW1lOiAweDUzOWZmNWIyIC0tIFR1ZSBKdW4gMTcgMDg6MDA6NTAgMjAxNAorRVhURU5UUzoKKygwKToxMjMyLCAoMSk6MTIzMywgKDIpOjEyMzQKK2RlYnVnZnM6IHN0YXQgL2cKK0lub2RlOiAxOCAgIFR5cGU6IHJlZ3VsYXIgICAgTW9kZTogIDA2NDQgICBGbGFnczogMHg4MDAwMAorR2VuZXJhdGlvbjogMTExNzE1MjE2MyAgICBWZXJzaW9uOiAweDAwMDAwMDAxCitVc2VyOiAgICAgMCAgIEdyb3VwOiAgICAgMCAgIFNpemU6IDMwNzIKK0ZpbGUgQUNMOiAwICAgIERpcmVjdG9yeSBBQ0w6IDAKK0xpbmtzOiAxICAgQmxvY2tjb3VudDogMzIKK0ZyYWdtZW50OiAgQWRkcmVzczogMCAgICBOdW1iZXI6IDAgICAgU2l6ZTogMAorY3RpbWU6IDB4NTM5ZmY1YjIgLS0gVHVlIEp1biAxNyAwODowMDo1MCAyMDE0CithdGltZTogMHg1MzlmZjViMiAtLSBUdWUgSnVuIDE3IDA4OjAwOjUwIDIwMTQKK210aW1lOiAweDUzOWZmNWIyIC0tIFR1ZSBKdW4gMTcgMDg6MDA6NTAgMjAxNAorRVhURU5UUzoKKygwLTIpOjE2ODAtMTY4MiwgKDMpOjE2ODMKK2RlYnVnZnM6IHF1aXQKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkY2x1c3Rlci9pbWFnZS5neiBiL3Rlc3RzL2ZfYmFkY2x1c3Rlci9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjIxZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRjbHVzdGVyL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkY2x1c3Rlci9uYW1lIGIvdGVzdHMvZl9iYWRjbHVzdGVyL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2ZjgxYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkY2x1c3Rlci9uYW1lCkBAIC0wLDAgKzEsMiBAQAordGVzdCBhbGlnbm1lbnQgcHJvYmxlbXMgd2l0aCBiaWdhbGxvYyBjbHVzdGVycworCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZGNsdXN0ZXIvc2NyaXB0IGIvdGVzdHMvZl9iYWRjbHVzdGVyL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmI0YjdmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRjbHVzdGVyL3NjcmlwdApAQCAtMCwwICsxLDI3IEBACitpZiB0ZXN0IC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCUlNQUdFPSR0ZXN0X2Rpci8uLi9mX2JhZGNsdXN0ZXIvaW1hZ2UuZ3oKKwlPVVQ9JHRlc3RfbmFtZS5sb2cKKwlFWFA9JHRlc3RfZGlyL2V4cGVjdAorCWd6aXAgLWQgPCAkSU1BR0UgPiAkVE1QRklMRQorCSRGU0NLIC1meSAkVE1QRklMRSAyPiYxIHwgc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgPiAkT1VUCisJJEZTQ0sgLWZ5ICRUTVBGSUxFIDI+JjEgfCBzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCA+PiAkT1VUCisJJEZTQ0sgLWZ5ICRUTVBGSUxFIDI+JjEgfCBzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCA+PiAkT1VUCisJZm9yIGkgaW4gYSBiIGMgZCBlIGYgZzsgZG8gZWNobyAic3RhdCAvJGkiOyBkb25lID4gJFRNUEZJTEUudG1wCisJZWNobyAicXVpdCIgPj4gJFRNUEZJTEUudG1wCisJJERFQlVHRlNfRVhFIC1mICRUTVBGSUxFLnRtcCAkVE1QRklMRSA+PiAkT1VUCisJcm0gLWYgJFRNUEZJTEUudG1wCisKKwljbXAgLXMgJE9VVCAkRVhQCisJc3RhdHVzPSQ/CisKKwlpZiBbICIkc3RhdHVzIiA9IDAgXTsgdGhlbgorCQllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJCXRvdWNoICR0ZXN0X25hbWUub2sKKwllbHNlCisJCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJCWRpZmYgJERJRkZfT1BUUyAkRVhQICRPVVQgPiAkdGVzdF9uYW1lLmZhaWxlZAorCQlybSAtZiAkdGVzdF9uYW1lLnRtcAorCWZpCitlbHNlCisJZWNobyAiJHRlc3RfbmFtZTogc2tpcHBlZCIKK2ZpCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZGRpci9leHBlY3QuMSBiL3Rlc3RzL2ZfYmFkZGlyL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNDZhNjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZGRpci9leHBlY3QuMQpAQCAtMCwwICsxLDU0IEBACitGaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDEyLCBpX3NpemUgaXMgMTgyLCBzaG91bGQgYmUgMTAyNC4gIEZpeD8geWVzCisKK0lub2RlIDEzIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgQ2xlYXI/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0VudHJ5ICd6ZXJvJyBpbiAvICgyKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgMTMuICBDbGVhcj8geWVzCisKK0VudHJ5ICdmb28vYmFyJyBpbiAvICgyKSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLgorRml4PyB5ZXMKKworRW50cnkgJ3Jvb3QnIGluIC90ZXN0ICgxNCkgaXMgYSBsaW5rIHRvIHRoZSByb290IGlub2RlLgorQ2xlYXI/IHllcworCitFbnRyeSAnYmFkaW5vJyBpbiAvdGVzdCAoMTQpIGhhcyBpbnZhbGlkIGlub2RlICM6IDEyMzQ1Ni4KK0NsZWFyPyB5ZXMKKworRW50cnkgJ2RvdCcgaW4gL3Rlc3QgKDE0KSBpcyBhIGxpbmsgdG8gJy4nICBDbGVhcj8geWVzCisKK0RpcmVjdG9yeSBpbm9kZSAxMiwgYmxvY2sgIzAsIG9mZnNldCAwOiBkaXJlY3RvcnkgY29ycnVwdGVkCitTYWx2YWdlPyB5ZXMKKworTWlzc2luZyAnLicgaW4gZGlyZWN0b3J5IGlub2RlIDEyLgorRml4PyB5ZXMKKworTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAxMi4KK0ZpeD8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorJy4uJyBpbiAvYmxvY2suaCAoMTIpIGlzIDxUaGUgTlVMTCBpbm9kZT4gKDApLCBzaG91bGQgYmUgLyAoMikuCitGaXg/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK0lub2RlIDEyIHJlZiBjb3VudCBpcyAxLCBzaG91bGQgYmUgMi4gIEZpeD8geWVzCisKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLTIyCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoNzQsIGNvdW50ZWQ9NzUpLgorRml4PyB5ZXMKKworSW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzOiAgLTEzCitGaXg/IHllcworCitEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDUsIGNvdW50ZWQ9NCkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE0LzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjUvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRkaXIvZXhwZWN0LjIgYi90ZXN0cy9mX2JhZGRpci9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODQ4ZWZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRkaXIvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNC8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI1LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkZGlyL2ltYWdlLmd6IGIvdGVzdHMvZl9iYWRkaXIvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ1OTNmZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkZGlyL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkZGlyL25hbWUgYi90ZXN0cy9mX2JhZGRpci9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MjIyMjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZGRpci9uYW1lCkBAIC0wLDAgKzEgQEAKK2NvcnJ1cHRlZCBkaXJlY3RvcnkgZW50cmllcwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRkaXIyL2V4cGVjdC4xIGIvdGVzdHMvZl9iYWRkaXIyL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNmVkMzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZGRpcjIvZXhwZWN0LjEKQEAgLTAsMCArMSwxMiBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0RpcmVjdG9yeSBpbm9kZSAxMiwgYmxvY2sgIzAsIG9mZnNldCA2MDogZGlyZWN0b3J5IGNvcnJ1cHRlZAorU2FsdmFnZT8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTUvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMy8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZGRpcjIvZXhwZWN0LjIgYi90ZXN0cy9mX2JhZGRpcjIvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1YmJhYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkZGlyMi9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE1LzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjMvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRkaXIyL2ltYWdlLmd6IGIvdGVzdHMvZl9iYWRkaXIyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOWZjZGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZGRpcjIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRkaXIyL25hbWUgYi90ZXN0cy9mX2JhZGRpcjIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjhhN2M5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRkaXIyL25hbWUKQEAgLTAsMCArMSBAQAorc2FsdmFnZSBsYXN0IGRpcmVjdG9yeSBlbnRyeQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRkb3RkaXIvZXhwZWN0LjEgYi90ZXN0cy9mX2JhZGRvdGRpci9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjRhYTk0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRkb3RkaXIvZXhwZWN0LjEKQEAgLTAsMCArMSw1OSBAQAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK01pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAxMi4KK0ZpeD8geWVzCisKK01pc3NpbmcgJy4uJyBpbiBkaXJlY3RvcnkgaW5vZGUgMTIuCitGaXg/IHllcworCitGaXJzdCBlbnRyeSAnWCcgKGlub2RlPTExKSBpbiBkaXJlY3RvcnkgaW5vZGUgMTMgKC9iKSBzaG91bGQgYmUgJy4nCitGaXg/IHllcworCitNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlIDE0LgorRml4PyB5ZXMKKworU2Vjb25kIGVudHJ5ICdYWCcgKGlub2RlPTExKSBpbiBkaXJlY3RvcnkgaW5vZGUgMTUgc2hvdWxkIGJlICcuLicKK0ZpeD8geWVzCisKKycuJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlIDE3IGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWQKK0ZpeD8geWVzCisKKycuLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAxNyBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkCitGaXg/IHllcworCitNaXNzaW5nICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgMTYuCitGaXg/IHllcworCitNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlIDE2LgorRml4PyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CisnLi4nIGluIC9hICgxMikgaXMgPFRoZSBOVUxMIGlub2RlPiAoMCksIHNob3VsZCBiZSAvICgyKS4KK0ZpeD8geWVzCisKKycuLicgaW4gL2MgKDE0KSBpcyA8VGhlIE5VTEwgaW5vZGU+ICgwKSwgc2hvdWxkIGJlIC8gKDIpLgorRml4PyB5ZXMKKworJy4uJyBpbiAvZCAoMTUpIGlzIDxUaGUgTlVMTCBpbm9kZT4gKDApLCBzaG91bGQgYmUgLyAoMikuCitGaXg/IHllcworCisnLi4nIGluIC9lICgxNikgaXMgPFRoZSBOVUxMIGlub2RlPiAoMCksIHNob3VsZCBiZSAvICgyKS4KK0ZpeD8geWVzCisKKycuLicgaW4gL2YgKDE3KSBpcyA8VGhlIE5VTEwgaW5vZGU+ICgwKSwgc2hvdWxkIGJlIC8gKDIpLgorRml4PyB5ZXMKKworUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzAsIGNvdW50ZWQ9NzEpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDcwLCBjb3VudGVkPTcxKS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTgvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyOS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZGRvdGRpci9leHBlY3QuMiBiL3Rlc3RzL2ZfYmFkZG90ZGlyL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMzUyM2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZGRvdGRpci9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE4LzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjkvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRkb3RkaXIvaW1hZ2UuZ3ogYi90ZXN0cy9mX2JhZGRvdGRpci9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQ5MGM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRkb3RkaXIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRkb3RkaXIvbmFtZSBiL3Rlc3RzL2ZfYmFkZG90ZGlyL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzYmE3NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkZG90ZGlyL25hbWUKQEAgLTAsMCArMSBAQAorYmFkICcuJyBhbmQgJy4uJyBlbnRyaWVzCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZGlub2RlL2V4cGVjdC4xIGIvdGVzdHMvZl9iYWRpbm9kZS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2FhMmNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRpbm9kZS9leHBlY3QuMQpAQCAtMCwwICsxLDQwIEBACitGaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDEyLCBpX2Jsb2NrcyBpcyAyLCBzaG91bGQgYmUgMC4gIEZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorSW5vZGUgMTIgKC9tb3RkKSBoYXMgaW52YWxpZCBtb2RlICgwMTEwNDQ0KS4KK0NsZWFyPyB5ZXMKKworaV9maWxlX2FjbCBmb3IgaW5vZGUgMTMgKC90aW1pbmdzKSBpcyAzOSwgc2hvdWxkIGJlIHplcm8uCitDbGVhcj8geWVzCisKK2lfYmxvY2tzX2hpIGZvciBpbm9kZSAxMyAoL3RpbWluZ3MpIGlzIDEwMjQsIHNob3VsZCBiZSB6ZXJvLgorQ2xlYXI/IHllcworCitJbm9kZSAxNCAoL2Jsb2NrX2RldikgaXMgYW4gaWxsZWdhbCBibG9jayBkZXZpY2UuCitDbGVhcj8geWVzCisKK0lub2RlIDE1ICgvY2hhcl9kZXYpIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGRldmljZS4KK0NsZWFyPyB5ZXMKKworU3ltbGluayAvdGVzdC1zeW1saW5rIChpbm9kZSAjMTYpIGlzIGludmFsaWQuCitDbGVhcj8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0yNQorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3NiwgY291bnRlZD03NykuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoNzYsIGNvdW50ZWQ9NzcpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMi8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIzLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkaW5vZGUvZXhwZWN0LjIgYi90ZXN0cy9mX2JhZGlub2RlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOGEzNzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZGlub2RlL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTIvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMy8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZGlub2RlL2ltYWdlLmd6IGIvdGVzdHMvZl9iYWRpbm9kZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjRhMGQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRpbm9kZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZGlub2RlL25hbWUgYi90ZXN0cy9mX2JhZGlub2RlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhlZTJkOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkaW5vZGUvbmFtZQpAQCAtMCwwICsxIEBACitjb3JydXB0ZWQgaW5vZGUgZW50cmllcwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRqb3VyX2luZGJsa3MvZXhwZWN0LjEgYi90ZXN0cy9mX2JhZGpvdXJfaW5kYmxrcy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2NjNTliCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRqb3VyX2luZGJsa3MvZXhwZWN0LjEKQEAgLTAsMCArMSwzMiBAQAorU3VwZXJibG9jayBoYXMgYW4gaW52YWxpZCBqb3VybmFsIChpbm9kZSA4KS4KK0NsZWFyPyB5ZXMKKworKioqIGV4dDMgam91cm5hbCBoYXMgYmVlbiBkZWxldGVkIC0gZmlsZXN5c3RlbSBpcyBub3cgZXh0MiBvbmx5ICoqKgorCitBZGRpbmcgZGlyaGFzaCBoaW50IHRvIGZpbGVzeXN0ZW0uCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSm91cm5hbCBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIENsZWFyPyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDgyLS0xMTExKQorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3MDgwLCBjb3VudGVkPTgxMTApLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDcwODAsIGNvdW50ZWQ9ODExMCkuCitGaXg/IHllcworCitSZWNyZWF0ZSBqb3VybmFsPyB5ZXMKKworQ3JlYXRpbmcgam91cm5hbCAoMTAyNCBibG9ja3MpOiAgRG9uZS4KKworKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDExMTEvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkam91cl9pbmRibGtzL2V4cGVjdC4yIGIvdGVzdHMvZl9iYWRqb3VyX2luZGJsa3MvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZiYjhiMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkam91cl9pbmRibGtzL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMjU2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTExMS84MTkyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRqb3VyX2luZGJsa3MvaW1hZ2UgYi90ZXN0cy9mX2JhZGpvdXJfaW5kYmxrcy9pbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGJkMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRqb3VyX2luZGJsa3MvaW1hZ2UKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRqb3VyX2luZGJsa3MvaW1hZ2UuZ3ogYi90ZXN0cy9mX2JhZGpvdXJfaW5kYmxrcy9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzE5MGM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRqb3VyX2luZGJsa3MvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRqb3VyX2luZGJsa3MvbmFtZSBiL3Rlc3RzL2ZfYmFkam91cl9pbmRibGtzL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0Yjk5YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkam91cl9pbmRibGtzL25hbWUKQEAgLTAsMCArMSBAQAorY29ycnVwdGlvbiBpbiBqb3VybmFsIGlub2RlJ3MgaW5kaXJlY3QgYmxvY2tzCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZGpvdXJibGtzL2V4cGVjdC4xIGIvdGVzdHMvZl9iYWRqb3VyYmxrcy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGM2NjU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRqb3VyYmxrcy9leHBlY3QuMQpAQCAtMCwwICsxLDMwIEBACitTdXBlcmJsb2NrIGhhcyBhbiBpbnZhbGlkIGpvdXJuYWwgKGlub2RlIDgpLgorQ2xlYXI/IHllcworCisqKiogZXh0MyBqb3VybmFsIGhhcyBiZWVuIGRlbGV0ZWQgLSBmaWxlc3lzdGVtIGlzIG5vdyBleHQyIG9ubHkgKioqCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSm91cm5hbCBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIENsZWFyPyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDUwLS0xMDc5KQorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3MTEyLCBjb3VudGVkPTgxNDIpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDcxMTIsIGNvdW50ZWQ9ODE0MikuCitGaXg/IHllcworCitSZWNyZWF0ZSBqb3VybmFsPyB5ZXMKKworQ3JlYXRpbmcgam91cm5hbCAoMTAyNCBibG9ja3MpOiAgRG9uZS4KKworKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEwNzkvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkam91cmJsa3MvZXhwZWN0LjIgYi90ZXN0cy9mX2JhZGpvdXJibGtzL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNTA3MDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZGpvdXJibGtzL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMjU2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTA3OS84MTkyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRqb3VyYmxrcy9pbWFnZS5neiBiL3Rlc3RzL2ZfYmFkam91cmJsa3MvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMzNmE0YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkam91cmJsa3MvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRqb3VyYmxrcy9uYW1lIGIvdGVzdHMvZl9iYWRqb3VyYmxrcy9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwM2ZhN2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZGpvdXJibGtzL25hbWUKQEAgLTAsMCArMSBAQAorSWxsZWdhbCBibG9ja3MgaW4gam91cm5hbCBpbm9kZSAoYW5kIGJhY2t1cCBpbiBzdXBlcmJsb2NrKQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRvcnBoYW4vZXhwZWN0LjEgYi90ZXN0cy9mX2JhZG9ycGhhbi9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2YwYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRvcnBoYW4vZXhwZWN0LjEKQEAgLTAsMCArMSw3NyBAQAorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNTQgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQ0NjEwKQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgMzIgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDY3ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDQwNzAwLCBzaXplPTEwMjQpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA1NSAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICBGaXg/IHllcworCitJbm9kZSAxMyB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgMTcgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0RlbGV0ZWQgaW5vZGUgMTggaGFzIHplcm8gZHRpbWUuICBGaXg/IHllcworCitJbm9kZSAxOSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgMjIgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDIzIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSAyNCB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgMjUgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDI2IHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSAyNyB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgMjggd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDMwIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSAzMyB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgMzYgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDM4IHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSA0MyB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgNDQgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDQ2IHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSA0NyB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgNTEgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDUzIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSA1NiB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgNjEgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDY1IHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSA3MCB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgNzEgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDc1IHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSA3NyB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgODMgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDg0IHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSA4NSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgODcgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDkxIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSA5MyB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgOTYgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDk3IHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSA5OSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgMTA5IHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0oMTM2My0tMTM5OSkgLSgxNDAxLS0xNDA1KSAtMTQ2MSAtKDE1MDUtLTE1MzMpIC0oMTUzOC0tMTU0MCkgLSgxNTY2LS0xNTc0KSAtKDE1OTMtLTE2MDApIC0oMTYwNC0tMTYwNSkgLTE2NTQgLSgxNjU2LS0xNzAzKSAtKDE3MDYtLTE3MjYpIC0xNzI4IC0oMTgwMy0tMTgwNCkgLTE5MTMgLSgyMjg2LS0yMjk1KSAtMjM5MiAtKDI5NjAtLTI5NzMpIC0oMzExOC0tMzE1NCkgLTMzNDUgLSgzNDUxLS0zNDUyKSAtMzU2OSAtKDM3NDgtLTM3NDkpIC00NDA5IC0oNDQxMS0tNDQxNCkgLSg0NDM1LS00NDU2KSAtKDQ3MjAtLTQ3MjUpIC00OTI5IC0oNDk2Ny0tNDk4NCkgLSg1MjU4LS01Mjc1KSAtKDUzNTItLTUzNTQpIC0oNTQxMi0tNTQyNSkgLTU0OTMgLSg1NjIwLS01NjQ3KSAtKDU2NzYtLTU2NzcpIC0oNTcyMC0tNTc0NCkgLSg1NzYwLS01Nzg4KSAtNjAxMworRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg1ODAxLCBjb3VudGVkPTYyMTApLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDU4MDEsIGNvdW50ZWQ9NjIxMCkuCitGaXg/IHllcworCitJbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtMTMgLSgxNy0tMTkpIC0oMjItLTI4KSAtMzAgLTMzIC0zNiAtMzggLSg0My0tNDQpIC0oNDYtLTQ3KSAtNTEgLTUzIC01NiAtNjEgLTY1IC0oNzAtLTcxKSAtNzUgLTc3IC0oODMtLTg1KSAtODcgLTkxIC05MyAtKDk2LS05NykgLTk5IC0xMDkKK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMTk1MSwgY291bnRlZD0xOTg5KS4KK0ZpeD8geWVzCisKK0RpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNDEsIGNvdW50ZWQ9MjIpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDE5NTEsIGNvdW50ZWQ9MTk4OSkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDU5LzIwNDggZmlsZXMgKDIyLjAlIG5vbi1jb250aWd1b3VzKSwgMTk4Mi84MTkyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRvcnBoYW4vZXhwZWN0LjIgYi90ZXN0cy9mX2JhZG9ycGhhbi9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDkyOGViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRvcnBoYW4vZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiA1OS8yMDQ4IGZpbGVzICgyMi4wJSBub24tY29udGlndW91cyksIDE5ODIvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkb3JwaGFuL2ltYWdlLmd6IGIvdGVzdHMvZl9iYWRvcnBoYW4vaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRlM2EzOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkb3JwaGFuL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkb3JwaGFuL25hbWUgYi90ZXN0cy9mX2JhZG9ycGhhbi9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMTQ3NWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZG9ycGhhbi9uYW1lCkBAIC0wLDAgKzEgQEAKK2NvcnJ1cHRlZCBvcnBoYW4gbGlzdApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRwcmltYXJ5L2V4cGVjdC4xIGIvdGVzdHMvZl9iYWRwcmltYXJ5L2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYjgxNGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZHByaW1hcnkvZXhwZWN0LjEKQEAgLTAsMCArMSwyNyBAQAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitUaGUgcHJpbWFyeSBzdXBlcmJsb2NrICgxKSBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3QuCisKK0lmIHRoZSBibG9jayBpcyByZWFsbHkgYmFkLCB0aGUgZmlsZXN5c3RlbSBjYW4gbm90IGJlIGZpeGVkLgorWW91IGNhbiByZW1vdmUgdGhpcyBibG9jayBmcm9tIHRoZSBiYWQgYmxvY2sgbGlzdCBhbmQgaG9wZQordGhhdCB0aGUgYmxvY2sgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLgorCitDbGVhcj8geWVzCisKK0Jsb2NrIDIgaW4gdGhlIHByaW1hcnkgZ3JvdXAgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0CisKK0lmIHRoZSBibG9jayBpcyByZWFsbHkgYmFkLCB0aGUgZmlsZXN5c3RlbSBjYW4gbm90IGJlIGZpeGVkLgorWW91IGNhbiByZW1vdmUgdGhpcyBibG9jayBmcm9tIHRoZSBiYWQgYmxvY2sgbGlzdCBhbmQgaG9wZQordGhhdCB0aGUgYmxvY2sgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLgorCitDbGVhcj8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIyLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkcHJpbWFyeS9leHBlY3QuMiBiL3Rlc3RzL2ZfYmFkcHJpbWFyeS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODIxZjg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRwcmltYXJ5L2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMi8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZHByaW1hcnkvaW1hZ2UuZ3ogYi90ZXN0cy9mX2JhZHByaW1hcnkvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlYjYxMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkcHJpbWFyeS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZHByaW1hcnkvbmFtZSBiL3Rlc3RzL2ZfYmFkcHJpbWFyeS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhY2NlMzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZHByaW1hcnkvbmFtZQpAQCAtMCwwICsxIEBACitiYWQgYmxvY2tzIGluIHRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgYW5kIGdyb3VwIGRlc2NyaXB0b3JzCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZHJvb3QvZXhwZWN0LjEgYi90ZXN0cy9mX2JhZHJvb3QvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlkMDFlNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkcm9vdC9leHBlY3QuMQpAQCAtMCwwICsxLDI5IEBACitGaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Jvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5LiAgQ2xlYXI/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0VudHJ5ICcuLicgaW4gPDI+LzwxMT4gKDExKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgMi4gIENsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitSb290IGlub2RlIG5vdCBhbGxvY2F0ZWQuICBBbGxvY2F0ZT8geWVzCisKK1VuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAxMSAoLi4uKQorQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKKy9sb3N0K2ZvdW5kIG5vdCBmb3VuZC4gIENyZWF0ZT8geWVzCisKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworSW5vZGUgMTEgcmVmIGNvdW50IGlzIDMsIHNob3VsZCBiZSAyLiAgRml4PyB5ZXMKKworVW5hdHRhY2hlZCBpbm9kZSAxMgorQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK0lub2RlIDEyIHJlZiBjb3VudCBpcyAyLCBzaG91bGQgYmUgMS4gIEZpeD8geWVzCisKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMy8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI0LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkcm9vdC9leHBlY3QuMiBiL3Rlc3RzL2ZfYmFkcm9vdC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWIwMjFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRyb290L2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTMvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNC8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZHJvb3QvaW1hZ2UuZ3ogYi90ZXN0cy9mX2JhZHJvb3QvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI5ODBhMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkcm9vdC9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZHJvb3QvbmFtZSBiL3Rlc3RzL2ZfYmFkcm9vdC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OWU0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZHJvb3QvbmFtZQpAQCAtMCwwICsxIEBACitmaWxlIGluIHJvb3QgZGlyZWN0b3J5IGlub2RlCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZHN5bWxpbmtzL2V4cGVjdC4xIGIvdGVzdHMvZl9iYWRzeW1saW5rcy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjhiNTdkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRzeW1saW5rcy9leHBlY3QuMQpAQCAtMCwwICsxLDYxIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1NwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChpbm9kZSAxOCkgaGFzIGltbXV0YWJsZQorb3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICBDbGVhcj8geWVzCisKK0lub2RlIDE5IGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgQ2xlYXI/IHllcworCitJbGxlZ2FsIGJsb2NrICMwICgxMjM0NTY3ODkwKSBpbiBpbm9kZSAxOS4gIENMRUFSRUQuCitJbm9kZSAxOSwgaV9ibG9ja3MgaXMgMiwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoaW5vZGUgMjApIGhhcyBpbW11dGFibGUKK29yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgQ2xlYXI/IHllcworCitJbm9kZSAyMSBpcyB0b28gYmlnLiAgVHJ1bmNhdGU/IHllcworCitCbG9jayAjMSAoMjIpIGNhdXNlcyBzeW1saW5rIHRvIGJlIHRvbyBiaWcuICBDTEVBUkVELgorSW5vZGUgMjEsIGlfYmxvY2tzIGlzIDQsIHNob3VsZCBiZSAyLiAgRml4PyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitTeW1saW5rIC9lbXB0eV9saW5rIChpbm9kZSAjMTcpIGlzIGludmFsaWQuCitDbGVhcj8geWVzCisKK1N5bWxpbmsgL2xvbmdfZmFzdGxpbmsgKGlub2RlICMxMykgaXMgaW52YWxpZC4KK0NsZWFyPyB5ZXMKKworU3ltbGluayAvbG9uZ19saW5rIChpbm9kZSAjMTQpIGlzIGludmFsaWQuCitDbGVhcj8geWVzCisKK1N5bWxpbmsgL2hpZ2hfZmFzdGxpbmsgKGlub2RlICMxNSkgaXMgaW52YWxpZC4KK0NsZWFyPyB5ZXMKKworU3ltbGluayAvaGlnaF9saW5rIChpbm9kZSAjMTYpIGlzIGludmFsaWQuCitDbGVhcj8geWVzCisKK1N5bWxpbmsgL2VtcHR5X2Zhc3RsaW5rIChpbm9kZSAjMTIpIGlzIGludmFsaWQuCitDbGVhcj8geWVzCisKK1N5bWxpbmsgL2JhZF9saW5rX2Jsb2NrIChpbm9kZSAjMTkpIGlzIGludmFsaWQuCitDbGVhcj8geWVzCisKK1N5bWxpbmsgL2V4dHJhX2xpbmtfYmxvY2sgKGlub2RlICMyMSkgaXMgaW52YWxpZC4KK0NsZWFyPyB5ZXMKKworU3ltbGluayAvYmFkX2xpbmtfc2l6ZSAoaW5vZGUgIzIyKSBpcyBpbnZhbGlkLgorQ2xlYXI/IHllcworCitTeW1saW5rIC9iYWRfZmFzdGxpbmtfc2l6ZSAoaW5vZGUgIzIzKSBpcyBpbnZhbGlkLgorQ2xlYXI/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDEwMDAsIGNvdW50ZWQ9MTAwMSkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoMTAwMCwgY291bnRlZD0xMDAxKS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTMvMzIgZmlsZXMgKDcuNyUgbm9uLWNvbnRpZ3VvdXMpLCAyMy8xMDI0IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWRzeW1saW5rcy9leHBlY3QuMiBiL3Rlc3RzL2ZfYmFkc3ltbGlua3MvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ5OTU1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkc3ltbGlua3MvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMy8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIzLzEwMjQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZHN5bWxpbmtzL2ltYWdlLmd6IGIvdGVzdHMvZl9iYWRzeW1saW5rcy9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWJhY2RlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWRzeW1saW5rcy9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JhZHN5bWxpbmtzL25hbWUgYi90ZXN0cy9mX2JhZHN5bWxpbmtzL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwODU4ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkc3ltbGlua3MvbmFtZQpAQCAtMCwwICsxIEBACitjb3JydXB0ZWQgc3ltbGlua3MKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkdGFibGUvZXhwZWN0LjEgYi90ZXN0cy9mX2JhZHRhYmxlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ODgxZjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZHRhYmxlL2V4cGVjdC4xCkBAIC0wLDAgKzEsNDUgQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworR3JvdXAgMCdzIGJsb2NrIGJpdG1hcCAoMykgaXMgYmFkLiAgUmVsb2NhdGU/IHllcworCitHcm91cCAwJ3MgaW5vZGUgYml0bWFwICg0KSBpcyBiYWQuICBSZWxvY2F0ZT8geWVzCisKK1JlbG9jYXRpbmcgZ3JvdXAgMCdzIGJsb2NrIGJpdG1hcCBmcm9tIDMgdG8gOS4uLgorUmVsb2NhdGluZyBncm91cCAwJ3MgaW5vZGUgYml0bWFwIGZyb20gNCB0byAxMC4uLgorUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitFbnRyeSAnbG9zdCtmb3VuZCcgaW4gLyAoMikgcG9pbnRzIHRvIGlub2RlICgxMSkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay4KK0NsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CisvbG9zdCtmb3VuZCBub3QgZm91bmQuICBDcmVhdGU/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK0lub2RlIDIgcmVmIGNvdW50IGlzIDQsIHNob3VsZCBiZSAzLiAgRml4PyB5ZXMKKworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDEyLS0yMCkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzcsIGNvdW50ZWQ9ODcpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDc3LCBjb3VudGVkPTg3KS4KK0ZpeD8geWVzCisKK0lub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogICsoMTItLTE2KSArKDI1LS0zMikKK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMjAsIGNvdW50ZWQ9NykuCitGaXg/IHllcworCitEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDMsIGNvdW50ZWQ9MikuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoMjAsIGNvdW50ZWQ9NykuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDI1LzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTMvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYWR0YWJsZS9leHBlY3QuMiBiL3Rlc3RzL2ZfYmFkdGFibGUvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFjNTU0YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmFkdGFibGUvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAyNS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEzLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkdGFibGUvaW1hZ2UuZ3ogYi90ZXN0cy9mX2JhZHRhYmxlL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZGJhYzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JhZHRhYmxlL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmFkdGFibGUvbmFtZSBiL3Rlc3RzL2ZfYmFkdGFibGUvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGE4YmFlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYWR0YWJsZS9uYW1lCkBAIC0wLDAgKzEgQEAKK2JhZCBibG9ja3MgaW4gYml0bWFwcyBhbmQgaW5vZGUgdGFibGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmJmaWxlL2V4cGVjdC4xIGIvdGVzdHMvZl9iYmZpbGUvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ2MzlmNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmJmaWxlL2V4cGVjdC4xCkBAIC0wLDAgKzEsNDggQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworR3JvdXAgMCdzIGlub2RlIGJpdG1hcCAoNCkgaXMgYmFkLiAgUmVsb2NhdGU/IHllcworCitSZWxvY2F0aW5nIGdyb3VwIDAncyBpbm9kZSBiaXRtYXAgZnJvbSA0IHRvIDQzLi4uCisKK1J1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBibG9ja3MgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIGlub2RlLi4uCitQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAyOiAyMQorTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxMTogOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMAorTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxMjogMjUgMjYKK1Bhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKKyhUaGVyZSBhcmUgMyBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pCisKK0ZpbGUgLyAoaW5vZGUgIzIsIG1vZCB0aW1lIFN1biBKYW4gIDIgMDg6Mjk6MTMgMTk5NCkgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwk8VGhlIGJhZCBibG9ja3MgaW5vZGU+IChpbm9kZSAjMSwgbW9kIHRpbWUgU3VuIEp1bCAxNyAwMDo0Nzo1OCAxOTk0KQorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC9sb3N0K2ZvdW5kIChpbm9kZSAjMTEsIG1vZCB0aW1lIFN1biBKYW4gIDIgMDg6Mjg6NDAgMTk5NCkgCisgIGhhcyAxMiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAxIGZpbGUocyk6CisJPFRoZSBiYWQgYmxvY2tzIGlub2RlPiAoaW5vZGUgIzEsIG1vZCB0aW1lIFN1biBKdWwgMTcgMDA6NDc6NTggMTk5NCkKK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworRmlsZSAvdGVybWNhcCAoaW5vZGUgIzEyLCBtb2QgdGltZSBTdW4gSmFuICAyIDA4OjI5OjEzIDE5OTQpIAorICBoYXMgMiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAxIGZpbGUocyk6CisJPFRoZSBiYWQgYmxvY2tzIGlub2RlPiAoaW5vZGUgIzEsIG1vZCB0aW1lIFN1biBKdWwgMTcgMDA6NDc6NTggMTk5NCkKK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICArNDMKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNTcsIGNvdW50ZWQ9NDEpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDU3LCBjb3VudGVkPTQxKS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA1OS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JiZmlsZS9leHBlY3QuMiBiL3Rlc3RzL2ZfYmJmaWxlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDkxZGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JiZmlsZS9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzMyIGZpbGVzICg4LjMlIG5vbi1jb250aWd1b3VzKSwgNTkvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYmZpbGUvaW1hZ2UuZ3ogYi90ZXN0cy9mX2JiZmlsZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjAxMzgxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYmZpbGUvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYmZpbGUvbmFtZSBiL3Rlc3RzL2ZfYmJmaWxlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg0M2ZiYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmJmaWxlL25hbWUKQEAgLTAsMCArMSBAQAorYmFkIGJsb2NrcyBpbiBmaWxlcwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYmlub2RlL2V4cGVjdC4xIGIvdGVzdHMvZl9iYmlub2RlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2N2Q2NjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JiaW5vZGUvZXhwZWN0LjEKQEAgLTAsMCArMSw1MSBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0VudHJ5ICdhNicgaW4gLyAoMikgcG9pbnRzIHRvIGlub2RlICgxNykgbG9jYXRlZCBpbiBhIGJhZCBibG9jay4KK0NsZWFyPyB5ZXMKKworRW50cnkgJ2E3JyBpbiAvICgyKSBwb2ludHMgdG8gaW5vZGUgKDE4KSBsb2NhdGVkIGluIGEgYmFkIGJsb2NrLgorQ2xlYXI/IHllcworCitFbnRyeSAnYTgnIGluIC8gKDIpIHBvaW50cyB0byBpbm9kZSAoMTkpIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suCitDbGVhcj8geWVzCisKK0VudHJ5ICdiMScgaW4gLyAoMikgcG9pbnRzIHRvIGlub2RlICgyMCkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay4KK0NsZWFyPyB5ZXMKKworRW50cnkgJ2IyJyBpbiAvICgyKSBwb2ludHMgdG8gaW5vZGUgKDIxKSBsb2NhdGVkIGluIGEgYmFkIGJsb2NrLgorQ2xlYXI/IHllcworCitFbnRyeSAnYjMnIGluIC8gKDIpIHBvaW50cyB0byBpbm9kZSAoMjIpIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suCitDbGVhcj8geWVzCisKK0VudHJ5ICdiNCcgaW4gLyAoMikgcG9pbnRzIHRvIGlub2RlICgyMykgbG9jYXRlZCBpbiBhIGJhZCBibG9jay4KK0NsZWFyPyB5ZXMKKworRW50cnkgJ2I1JyBpbiAvICgyKSBwb2ludHMgdG8gaW5vZGUgKDI0KSBsb2NhdGVkIGluIGEgYmFkIGJsb2NrLgorQ2xlYXI/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtODMKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMTk2MiwgY291bnRlZD0xOTY1KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICgxOTYyLCBjb3VudGVkPTE5NjUpLgorRml4PyB5ZXMKKworSW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzOiAgKyg0MS0tNDgpCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDQ4NSwgY291bnRlZD00NzcpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDQ4NSwgY291bnRlZD00NzcpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAzNS81MTIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA4My8yMDQ4IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYmlub2RlL2V4cGVjdC4yIGIvdGVzdHMvZl9iYmlub2RlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NTI4OWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JiaW5vZGUvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAzNS81MTIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA4My8yMDQ4IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYmlub2RlL2ltYWdlLmd6IGIvdGVzdHMvZl9iYmlub2RlL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZGNmNDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JiaW5vZGUvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iYmlub2RlL25hbWUgYi90ZXN0cy9mX2JiaW5vZGUvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWRiM2U1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iYmlub2RlL25hbWUKQEAgLTAsMCArMSBAQAorYmFkIGJsb2NrcyBpbiBpbm9kZSB0YWJsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iaWdfc3BhcnNlL2V4cGVjdC4xIGIvdGVzdHMvZl9iaWdfc3BhcnNlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYzgyZWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JpZ19zcGFyc2UvZXhwZWN0LjEKQEAgLTAsMCArMSwxMSBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxMiwgaV9zaXplIGlzIDYxNDQwLCBzaG91bGQgYmUgNDM5ODA1MDc1ODY1Ni4gIEZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMi82NCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI3LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYmlnX3NwYXJzZS9leHBlY3QuMiBiL3Rlc3RzL2ZfYmlnX3NwYXJzZS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTQ1ZWM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iaWdfc3BhcnNlL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTIvNjQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNy8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JpZ19zcGFyc2UvaW1hZ2UuZ3ogYi90ZXN0cy9mX2JpZ19zcGFyc2UvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3ZmVlYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYmlnX3NwYXJzZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JpZ19zcGFyc2UvbmFtZSBiL3Rlc3RzL2ZfYmlnX3NwYXJzZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZDk3MjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JpZ19zcGFyc2UvbmFtZQpAQCAtMCwwICsxIEBACitiaWcgc3BhcnNlIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYml0bWFwcy9leHBlY3QuMSBiL3Rlc3RzL2ZfYml0bWFwcy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTU5ODRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iaXRtYXBzL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTcgQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICArMTIgLTIwICs0MSAtNTAKK0ZpeD8geWVzCisKK0lub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogICsxMSAtMTUKK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvMzIgZmlsZXMgKDkuMSUgbm9uLWNvbnRpZ3VvdXMpLCAyMi8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JpdG1hcHMvZXhwZWN0LjIgYi90ZXN0cy9mX2JpdG1hcHMvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNkMWMyNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYml0bWFwcy9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzMyIGZpbGVzICg5LjElIG5vbi1jb250aWd1b3VzKSwgMjIvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iaXRtYXBzL2ltYWdlLmd6IGIvdGVzdHMvZl9iaXRtYXBzL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNTMzZWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2JpdG1hcHMvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9iaXRtYXBzL25hbWUgYi90ZXN0cy9mX2JpdG1hcHMvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzA5YmZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9iaXRtYXBzL25hbWUKQEAgLTAsMCArMSBAQAorY29ycnVwdGVkIGlub2RlIGFuZCBibG9jayBiaXRtYXBzCmRpZmYgLS1naXQgYS90ZXN0cy9mX2JvdW5kc2NoZWNrL2V4cGVjdC4xIGIvdGVzdHMvZl9ib3VuZHNjaGVjay9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjE3MGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9ib3VuZHNjaGVjay9leHBlY3QuMQpAQCAtMCwwICsxLDI1IEBACitleHQyZnNfY2hlY2tfZGVzYzogQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIHRhYmxlCisuLi9lMmZzY2svZTJmc2NrOiBHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiB0cnlpbmcgYmFja3VwIGJsb2Nrcy4uLgorLi4vZTJmc2NrL2UyZnNjazogQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayB3aGlsZSB1c2luZyB0aGUgYmFja3VwIGJsb2Nrcy4uL2UyZnNjay9lMmZzY2s6IGdvaW5nIGJhY2sgdG8gb3JpZ2luYWwgc3VwZXJibG9jaworTm90ZTogaWYgc2V2ZXJhbCBpbm9kZSBvciBibG9jayBiaXRtYXAgYmxvY2tzIG9yIHBhcnQKK29mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnkKK3J1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiA4MTkzJyBvcHRpb24gZmlyc3QuICBUaGUgcHJvYmxlbQorbWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZAordGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suCisKK0lub2RlIHRhYmxlIGZvciBncm91cCAxIGlzIG5vdCBpbiBncm91cC4gIChibG9jayA0Mjk0OTY3Mjk1KQorV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS4KK1JlbG9jYXRlPyB5ZXMKKworT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICBGaXg/IHllcworCitHcm91cCBkZXNjcmlwdG9yIDEgY2hlY2tzdW0gaXMgMHg2ZWEyLCBzaG91bGQgYmUgMHg3ZWRkLiAgRklYRUQuCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0Vycm9yIGFsbG9jYXRpbmcgMjU2IGNvbnRpZ3VvdXMgYmxvY2socykgaW4gYmxvY2sgZ3JvdXAgMSBmb3IgaW5vZGUgdGFibGU6IENvdWxkIG5vdCBhbGxvY2F0ZSBibG9jayBpbiBleHQyIGZpbGVzeXN0ZW0KK2UyZnNjazogYWJvcnRlZAorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqKioqKiogV0FSTklORzogRmlsZXN5c3RlbSBzdGlsbCBoYXMgZXJyb3JzICoqKioqKioqKioKKworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9ib3VuZHNjaGVjay9leHBlY3QuMiBiL3Rlc3RzL2ZfYm91bmRzY2hlY2svZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxNzBiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYm91bmRzY2hlY2svZXhwZWN0LjIKQEAgLTAsMCArMSwyNSBAQAorZXh0MmZzX2NoZWNrX2Rlc2M6IENvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSB0YWJsZQorLi4vZTJmc2NrL2UyZnNjazogR3JvdXAgZGVzY3JpcHRvcnMgbG9vayBiYWQuLi4gdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi4KKy4uL2UyZnNjay9lMmZzY2s6IEJhZCBtYWdpYyBudW1iZXIgaW4gc3VwZXItYmxvY2sgd2hpbGUgdXNpbmcgdGhlIGJhY2t1cCBibG9ja3MuLi9lMmZzY2svZTJmc2NrOiBnb2luZyBiYWNrIHRvIG9yaWdpbmFsIHN1cGVyYmxvY2sKK05vdGU6IGlmIHNldmVyYWwgaW5vZGUgb3IgYmxvY2sgYml0bWFwIGJsb2NrcyBvciBwYXJ0CitvZiB0aGUgaW5vZGUgdGFibGUgcmVxdWlyZSByZWxvY2F0aW9uLCB5b3UgbWF5IHdpc2ggdG8gdHJ5CitydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgODE5Mycgb3B0aW9uIGZpcnN0LiAgVGhlIHByb2JsZW0KK21heSBsaWUgb25seSB3aXRoIHRoZSBwcmltYXJ5IGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLCBhbmQKK3RoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLgorCitJbm9kZSB0YWJsZSBmb3IgZ3JvdXAgMSBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgNDI5NDk2NzI5NSkKK1dBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuCitSZWxvY2F0ZT8geWVzCisKK09uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgRml4PyB5ZXMKKworR3JvdXAgZGVzY3JpcHRvciAxIGNoZWNrc3VtIGlzIDB4NmVhMiwgc2hvdWxkIGJlIDB4N2VkZC4gIEZJWEVELgorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitFcnJvciBhbGxvY2F0aW5nIDI1NiBjb250aWd1b3VzIGJsb2NrKHMpIGluIGJsb2NrIGdyb3VwIDEgZm9yIGlub2RlIHRhYmxlOiBDb3VsZCBub3QgYWxsb2NhdGUgYmxvY2sgaW4gZXh0MiBmaWxlc3lzdGVtCitlMmZzY2s6IGFib3J0ZWQKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKKwordGVzdF9maWxlc3lzOiAqKioqKioqKioqIFdBUk5JTkc6IEZpbGVzeXN0ZW0gc3RpbGwgaGFzIGVycm9ycyAqKioqKioqKioqCisKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYm91bmRzY2hlY2svaW1hZ2UuYnoyIGIvdGVzdHMvZl9ib3VuZHNjaGVjay9pbWFnZS5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk4ZDAyZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYm91bmRzY2hlY2svaW1hZ2UuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYm91bmRzY2hlY2svbmFtZSBiL3Rlc3RzL2ZfYm91bmRzY2hlY2svbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTJkMjc5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9ib3VuZHNjaGVjay9uYW1lCkBAIC0wLDAgKzEgQEAKK2luZmluaXRlIGxvb3AgZHVlIHRvIG9mZiBieSBvbmUgZXJyb3Igd2hlbiBmaW5kaW5nIGZyZWUgc3BhY2UgZm9yIGlub2RlIHRhYmxlIHJlbG9jYXRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfYm91bmRzY2hlY2svc2NyaXB0IGIvdGVzdHMvZl9ib3VuZHNjaGVjay9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmJiY2U2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfYm91bmRzY2hlY2svc2NyaXB0CkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9iYXNoCisKK0ZTQ0tfT1BUPS1meQorSU1BR0U9JHRlc3RfZGlyL2ltYWdlLmJ6MgorCitiemlwMiAtZCA8ICRJTUFHRSA+ICRUTVBGSUxFCisjZTJsYWJlbCAkVE1QRklMRSB0ZXN0X2ZpbGVzeXMKKworIyBSdW4gZnNjayB0byBmaXggdGhpbmdzPworRVhQMT0kdGVzdF9kaXIvZXhwZWN0LjEKK09VVDE9JHRlc3RfbmFtZS4xLmxvZworcm0gLXJmICR0ZXN0X25hbWUuZmFpbGVkICR0ZXN0X25hbWUub2sKKworJEZTQ0sgJEZTQ0tfT1BUICRUTVBGSUxFIDI+JjEgfCBoZWFkIC1uIDEwMDAgfCB0YWlsIC1uICsyID4gJE9VVDEKK2VjaG8gIkV4aXQgc3RhdHVzIGlzICQ/IiA+PiAkT1VUMQorCisjIFJ1biBhIHNlY29uZCB0aW1lCitFWFAyPSR0ZXN0X2Rpci9leHBlY3QuMgorT1VUMj0kdGVzdF9uYW1lLjIubG9nCisKKyRGU0NLICRGU0NLX09QVCAkVE1QRklMRSAyPiYxIHwgaGVhZCAtbiAxMDAwIHwgdGFpbCAtbiArMiA+ICRPVVQyCitlY2hvICJFeGl0IHN0YXR1cyBpcyAkPyIgPj4gJE9VVDIKKworIyBGaWd1cmUgb3V0IHdoYXQgaGFwcGVuZWQKK2lmIGNtcCAtcyAkRVhQMSAkT1VUMSAmJiBjbXAgLXMgJEVYUDIgJE9VVDI7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJZGlmZiAtdSAkRVhQMSAkT1VUMSA+PiAkdGVzdF9uYW1lLmZhaWxlZAorCWRpZmYgLXUgJEVYUDIgJE9VVDIgPj4gJHRlc3RfbmFtZS5mYWlsZWQKK2ZpCmRpZmYgLS1naXQgYS90ZXN0cy9mX2NsZWFyX3hhdHRyL2V4cGVjdC4xIGIvdGVzdHMvZl9jbGVhcl94YXR0ci9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2ZiZWFmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9jbGVhcl94YXR0ci9leHBlY3QuMQpAQCAtMCwwICsxLDM4IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDE0LCBpX2Jsb2NrcyBpcyAyLCBzaG91bGQgYmUgMC4gIEZpeD8geWVzCisKK0lub2RlIDEyLCBpX2Jsb2NrcyBpcyA0LCBzaG91bGQgYmUgMi4gIEZpeD8geWVzCisKK0lub2RlIDEzLCBpX2Jsb2NrcyBpcyAyLCBzaG91bGQgYmUgMC4gIEZpeD8geWVzCisKK0lub2RlIDE1LCBpX2Jsb2NrcyBpcyA0LCBzaG91bGQgYmUgMi4gIEZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQoraV9maWxlX2FjbCBmb3IgaW5vZGUgMTIgKC9kaXIpIGlzIDIyLCBzaG91bGQgYmUgemVyby4KK0NsZWFyPyB5ZXMKKworaV9maWxlX2FjbCBmb3IgaW5vZGUgMTMgKC9maWxlKSBpcyAyMiwgc2hvdWxkIGJlIHplcm8uCitDbGVhcj8geWVzCisKK2lfZmlsZV9hY2wgZm9yIGlub2RlIDE0ICgvc3ltbGluaykgaXMgMjIsIHNob3VsZCBiZSB6ZXJvLgorQ2xlYXI/IHllcworCitpX2ZpbGVfYWNsIGZvciBpbm9kZSAxNSAoL2xvbmctc3ltbGluaykgaXMgMjMsIHNob3VsZCBiZSB6ZXJvLgorQ2xlYXI/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDIyLS0yMykKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzYsIGNvdW50ZWQ9NzgpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDc2LCBjb3VudGVkPTc4KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTUvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMi8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2NsZWFyX3hhdHRyL2V4cGVjdC4yIGIvdGVzdHMvZl9jbGVhcl94YXR0ci9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDZkMjY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9jbGVhcl94YXR0ci9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE1LzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjIvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9jbGVhcl94YXR0ci9pbWFnZS5neiBiL3Rlc3RzL2ZfY2xlYXJfeGF0dHIvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlhY2ExNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfY2xlYXJfeGF0dHIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9jbGVhcl94YXR0ci9uYW1lIGIvdGVzdHMvZl9jbGVhcl94YXR0ci9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYWQ2OTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2NsZWFyX3hhdHRyL25hbWUKQEAgLTAsMCArMSBAQAorY2xlYXJpbmcgaV9maWxlX2FjbCB3aGVuICFleHRfYXR0ciBmZWF0dXJlCmRpZmYgLS1naXQgYS90ZXN0cy9mX2NyYXNoZGlzay9leHBlY3QuMSBiL3Rlc3RzL2ZfY3Jhc2hkaXNrL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3N2E0NjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2NyYXNoZGlzay9leHBlY3QuMQpAQCAtMCwwICsxLDEzIEBACitleHQyZnNfb3BlbjI6IFRoZSBleHQyIHN1cGVyYmxvY2sgaXMgY29ycnVwdAorLi4vZTJmc2NrL2UyZnNjazogU3VwZXJibG9jayBpbnZhbGlkLCB0cnlpbmcgYmFja3VwIGJsb2Nrcy4uLgorLi4vZTJmc2NrL2UyZnNjazogVGhlIGV4dDIgc3VwZXJibG9jayBpcyBjb3JydXB0IHdoaWxlIHRyeWluZyB0byBvcGVuIHRlc3QuaW1nCisKK1RoZSBzdXBlcmJsb2NrIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgdmFsaWQgZXh0Mi9leHQzL2V4dDQKK2ZpbGVzeXN0ZW0uICBJZiB0aGUgZGV2aWNlIGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0Mi9leHQzL2V4dDQKK2ZpbGVzeXN0ZW0gKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBzdXBlcmJsb2NrCitpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBzdXBlcmJsb2NrOgorICAgIGUyZnNjayAtYiA4MTkzIDxkZXZpY2U+Cisgb3IKKyAgICBlMmZzY2sgLWIgMzI3NjggPGRldmljZT4KKworRXhpdCBzdGF0dXMgaXMgOApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9jcmFzaGRpc2svaW1hZ2UuZ3ogYi90ZXN0cy9mX2NyYXNoZGlzay9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjBlN2EwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9jcmFzaGRpc2svaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9jcmFzaGRpc2svbmFtZSBiL3Rlc3RzL2ZfY3Jhc2hkaXNrL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJhOGE2MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfY3Jhc2hkaXNrL25hbWUKQEAgLTAsMCArMSBAQAorU3VwZXJibG9jayB3aXRoIGlsbGVnYWwgdmFsdWVzCmRpZmYgLS1naXQgYS90ZXN0cy9mX2NyYXNoZGlzay9zY3JpcHQgYi90ZXN0cy9mX2NyYXNoZGlzay9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiMmI5YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfY3Jhc2hkaXNrL3NjcmlwdApAQCAtMCwwICsxLDIgQEAKK09ORV9QQVNTX09OTFk9InRydWUiCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZGVzY19zaXplXzEyOC9leHBlY3QuMSBiL3Rlc3RzL2ZfZGVzY19zaXplXzEyOC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjJmMTEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kZXNjX3NpemVfMTI4L2V4cGVjdC4xCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMjU2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTUwLzgxOTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2Rlc2Nfc2l6ZV8xMjgvZXhwZWN0LjIgYi90ZXN0cy9mX2Rlc2Nfc2l6ZV8xMjgvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYyZjExMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZGVzY19zaXplXzEyOC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDE1MC84MTkyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kZXNjX3NpemVfMTI4L2ltYWdlLmd6IGIvdGVzdHMvZl9kZXNjX3NpemVfMTI4L2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTBjYWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2Rlc2Nfc2l6ZV8xMjgvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kZXNjX3NpemVfMTI4L25hbWUgYi90ZXN0cy9mX2Rlc2Nfc2l6ZV8xMjgvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDllMDAzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kZXNjX3NpemVfMTI4L25hbWUKQEAgLTAsMCArMSBAQAorMTI4LWJ5dGUgZ3JvdXAgZGVzY3JpcHRvcnMKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZGVzY19zaXplX2JhZC9leHBlY3QuMSBiL3Rlc3RzL2ZfZGVzY19zaXplX2JhZC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDllZTA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kZXNjX3NpemVfYmFkL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTEgQEAKK2V4dDJmc19jaGVja19kZXNjOiBCbG9jayBncm91cCBkZXNjcmlwdG9yIHNpemUgaW5jb3JyZWN0CisuLi9lMmZzY2svZTJmc2NrOiBHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiB0cnlpbmcgYmFja3VwIGJsb2Nrcy4uLgorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA4MDEvMjA0OCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZGVzY19zaXplX2JhZC9leHBlY3QuMiBiL3Rlc3RzL2ZfZGVzY19zaXplX2JhZC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTQyOWZkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kZXNjX3NpemVfYmFkL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA4MDEvMjA0OCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZGVzY19zaXplX2JhZC9zY3JpcHQgYi90ZXN0cy9mX2Rlc2Nfc2l6ZV9iYWQvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NDAzMjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2Rlc2Nfc2l6ZV9iYWQvc2NyaXB0CkBAIC0wLDAgKzEsMTcgQEAKK2lmICEgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKyAgICAgICAgZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCisJcmV0dXJuIDAKK2ZpCisKK0RFU0NSSVBUSU9OPSJiYWQgc3VwZXJibG9jayBzX2Rlc2Nfc2l6ZSIKK1NLSVBfR1VOWklQPXRydWUKK3RvdWNoICRUTVBGSUxFCiskTUtFMkZTIC1GIC1vIExpbnV4IC1PIDY0Yml0LGV4dGVudHMgLU4gMzIgLWIgMTAyNCAtZyA1MTIgLUUgZGVzY19zaXplPTEyOCAkVE1QRklMRSAyMDQ4ID4gJHRlc3RfbmFtZS5sb2cgMj4mMQorJERFQlVHRlMgLVIgInNzdiBkZXNjX3NpemUgMTI5IiAtdyAkVE1QRklMRSA+PiAkdGVzdF9uYW1lLmxvZyAyPiYxCisKK0UyRlNDS19USU1FPTIwMDcwNDEwMjEwMAorZXhwb3J0IEUyRlNDS19USU1FCisKKy4gJGNtZF9kaXIvcnVuX2UyZnNjaworCit1bnNldCBFMkZTQ0tfVElNRQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kaXJfYmFkX21vZGUvZXhwZWN0LjEgYi90ZXN0cy9mX2Rpcl9iYWRfbW9kZS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGI0YTk5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kaXJfYmFkX21vZGUvZXhwZWN0LjEKQEAgLTAsMCArMSwxMiBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxMiBpcyBhIHNvY2tldCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuCitGaXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTUvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2Rpcl9iYWRfbW9kZS9leHBlY3QuMiBiL3Rlc3RzL2ZfZGlyX2JhZF9tb2RlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMjM1MmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2Rpcl9iYWRfbW9kZS9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE1LzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjUvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kaXJfYmFkX21vZGUvaW1hZ2UuZ3ogYi90ZXN0cy9mX2Rpcl9iYWRfbW9kZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjY0N2ExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kaXJfYmFkX21vZGUvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kaXJfYmFkX21vZGUvbmFtZSBiL3Rlc3RzL2ZfZGlyX2JhZF9tb2RlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiYWNjMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZGlyX2JhZF9tb2RlL25hbWUKQEAgLTAsMCArMSBAQAorZGlyZWN0b3J5IHdpdGggY29ycnVwdGVkIGlfbW9kZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kaXJsaW5rL2V4cGVjdC4xIGIvdGVzdHMvZl9kaXJsaW5rL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1M2MwZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2RpcmxpbmsvZXhwZWN0LjEKQEAgLTAsMCArMSwxNCBAQAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0VudHJ5ICdxdXV4JyBpbiAvZm9vICgxMikgaXMgYSBsaW5rIHRvIGRpcmVjdG9yeSAvYmFyICgxMykuCitDbGVhcj8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTMvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNC8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2RpcmxpbmsvZXhwZWN0LjIgYi90ZXN0cy9mX2RpcmxpbmsvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiMDIxYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZGlybGluay9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEzLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjQvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kaXJsaW5rL2ltYWdlLmd6IGIvdGVzdHMvZl9kaXJsaW5rL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOGRlZjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2RpcmxpbmsvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kaXJsaW5rL25hbWUgYi90ZXN0cy9mX2RpcmxpbmsvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGRiZGNlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kaXJsaW5rL25hbWUKQEAgLTAsMCArMSBAQAorZGlyZWN0b3J5IGhhcmQgbGlua3MKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwL2V4cGVjdC4xIGIvdGVzdHMvZl9kdXAvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcxMjhmMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwL2V4cGVjdC4xCkBAIC0wLDAgKzEsMzggQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworCitSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLgorUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTI6IDI1IDI2CitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDEzOiAyNSAyNgorUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzCitQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworKFRoZXJlIGFyZSAyIGlub2RlcyBjb250YWluaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzLikKKworRmlsZSAvdGVybWNhcCAoaW5vZGUgIzEyLCBtb2QgdGltZSBUdWUgU2VwIDIxIDAzOjE5OjE0IDE5OTMpIAorICBoYXMgMiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAxIGZpbGUocyk6CisJL21vdGQgKGlub2RlICMxMywgbW9kIHRpbWUgVHVlIFNlcCAyMSAwMzoxOToyMCAxOTkzKQorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC9tb3RkIChpbm9kZSAjMTMsIG1vZCB0aW1lIFR1ZSBTZXAgMjEgMDM6MTk6MjAgMTk5MykgCisgIGhhcyAyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwkvdGVybWNhcCAoaW5vZGUgIzEyLCBtb2QgdGltZSBUdWUgU2VwIDIxIDAzOjE5OjE0IDE5OTMpCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLgorCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNDQsIGNvdW50ZWQ9NjApLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDYyLCBjb3VudGVkPTYwKS4KK0ZpeD8geWVzCisKK1BhZGRpbmcgYXQgZW5kIG9mIGJsb2NrIGJpdG1hcCBpcyBub3Qgc2V0LiBGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEzLzE2IGZpbGVzICg3LjclIG5vbi1jb250aWd1b3VzKSwgNDAvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXAvZXhwZWN0LjIgYi90ZXN0cy9mX2R1cC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWViMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXAvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMy8xNiBmaWxlcyAoMTUuNCUgbm9uLWNvbnRpZ3VvdXMpLCA0MC8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2R1cC9pbWFnZS5neiBiL3Rlc3RzL2ZfZHVwL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMDQ2OTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2R1cC9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2R1cC9uYW1lIGIvdGVzdHMvZl9kdXAvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjk2YjgzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXAvbmFtZQpAQCAtMCwwICsxIEBACitibG9ja3MgY2xhaW1lZCBieSB0d28gZGlmZmVyZW50IGZpbGVzCmRpZmYgLS1naXQgYS90ZXN0cy9mX2R1cDIvZXhwZWN0LjEgYi90ZXN0cy9mX2R1cDIvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3NjAwNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwMi9leHBlY3QuMQpAQCAtMCwwICsxLDQ1IEBACitGaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKKworUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIGJsb2NrcyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgaW5vZGUuLi4KK1Bhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDEyOiAyNSAyNgorTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxMzogMjUgMjYgNTcgNTgKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTQ6IDU3IDU4CitQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK1Bhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzCisoVGhlcmUgYXJlIDMgaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKQorCitGaWxlIC90ZXJtY2FwIChpbm9kZSAjMTIsIG1vZCB0aW1lIFR1ZSBTZXAgMjEgMDM6MTk6MTQgMTk5MykgCisgIGhhcyAyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwkvbW90ZCAoaW5vZGUgIzEzLCBtb2QgdGltZSBUdWUgU2VwIDIxIDAzOjE5OjIwIDE5OTMpCitDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcz8geWVzCisKK0ZpbGUgL21vdGQgKGlub2RlICMxMywgbW9kIHRpbWUgVHVlIFNlcCAyMSAwMzoxOToyMCAxOTkzKSAKKyAgaGFzIDQgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMiBmaWxlKHMpOgorCS9wYXNzMS5jIChpbm9kZSAjMTQsIG1vZCB0aW1lIFR1ZSBTZXAgMjEgMDQ6Mjg6MzcgMTk5MykKKwkvdGVybWNhcCAoaW5vZGUgIzEyLCBtb2QgdGltZSBUdWUgU2VwIDIxIDAzOjE5OjE0IDE5OTMpCitDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcz8geWVzCisKK0ZpbGUgL3Bhc3MxLmMgKGlub2RlICMxNCwgbW9kIHRpbWUgVHVlIFNlcCAyMSAwNDoyODozNyAxOTkzKSAKKyAgaGFzIDIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMSBmaWxlKHMpOgorCS9tb3RkIChpbm9kZSAjMTMsIG1vZCB0aW1lIFR1ZSBTZXAgMjEgMDM6MTk6MjAgMTk5MykKK011bHRpcGx5LWNsYWltZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg4LCBjb3VudGVkPTIyKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICgyNiwgY291bnRlZD0yMikuCitGaXg/IHllcworCitQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxNi8xNiBmaWxlcyAoNi4zJSBub24tY29udGlndW91cyksIDc4LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwMi9leHBlY3QuMiBiL3Rlc3RzL2ZfZHVwMi9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTA4YjA5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXAyL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTYvMTYgZmlsZXMgKDEyLjUlIG5vbi1jb250aWd1b3VzKSwgNzgvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXAyL2ltYWdlLmd6IGIvdGVzdHMvZl9kdXAyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5Yjg1M2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2R1cDIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXAyL25hbWUgYi90ZXN0cy9mX2R1cDIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDYzNmUwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXAyL25hbWUKQEAgLTAsMCArMSBAQAorYmxvY2tzIGNsYWltZWQgYnkgdGhyZWUgZGlmZmVyZW50IGZpbGVzCmRpZmYgLS1naXQgYS90ZXN0cy9mX2R1cDMvZXhwZWN0LjEgYi90ZXN0cy9mX2R1cDMvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiNzVhOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwMy9leHBlY3QuMQpAQCAtMCwwICsxLDQ1IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDE2LCBpX2Jsb2NrcyBpcyAyMiwgc2hvdWxkIGJlIDI0LiAgRml4PyB5ZXMKKworCitSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLgorUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTE6IDI0IDI0CitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDE0OiA2OSA2OQorTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxNjogOTkgOTkKK1Bhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKKyhUaGVyZSBhcmUgMyBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pCisKK0ZpbGUgL2xvc3QrZm91bmQgKGlub2RlICMxMSwgbW9kIHRpbWUgTW9uIFNlcCAyMCAwMzoyNjozNiAxOTkzKSAKKyAgaGFzIDIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMCBmaWxlKHMpOgorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC9wYXNzMS5jIChpbm9kZSAjMTQsIG1vZCB0aW1lIFR1ZSBTZXAgMjEgMDQ6Mjg6MzcgMTk5MykgCisgIGhhcyAyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDAgZmlsZShzKToKK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworRmlsZSAvZTJmc2NrIChpbm9kZSAjMTYsIG1vZCB0aW1lIFR1ZSBTZXAgMjEgMDQ6MzI6MjIgMTk5MykgCisgIGhhcyAyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDAgZmlsZShzKToKK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitEaXJlY3RvcnkgaW5vZGUgMTEsIGJsb2NrICMxMiwgb2Zmc2V0IDA6IGRpcmVjdG9yeSBjb3JydXB0ZWQKK1NhbHZhZ2U/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtNjgKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMjAsIGNvdW50ZWQ9MTkpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDIwLCBjb3VudGVkPTE5KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTYvMTYgZmlsZXMgKDI1LjAlIG5vbi1jb250aWd1b3VzKSwgODEvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXAzL2V4cGVjdC4yIGIvdGVzdHMvZl9kdXAzL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMzFhZTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2R1cDMvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNi8xNiBmaWxlcyAoMjUuMCUgbm9uLWNvbnRpZ3VvdXMpLCA4MS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2R1cDMvaW1hZ2UuZ3ogYi90ZXN0cy9mX2R1cDMvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcxMmNiYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwMy9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2R1cDMvbmFtZSBiL3Rlc3RzL2ZfZHVwMy9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMzEyYWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2R1cDMvbmFtZQpAQCAtMCwwICsxIEBACitibG9ja3MgY2xhaW1lZCBieSBvbmUgZmlsZSBtdWx0aXBsZSB0aW1lcwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXA0L2V4cGVjdC4xIGIvdGVzdHMvZl9kdXA0L2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNTFiYjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2R1cDQvZXhwZWN0LjEKQEAgLTAsMCArMSwxMTIgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworCitSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLgorUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTY6IDMwCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDE3OiAzMAorTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxODogMzAKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTk6IDMwCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDIwOiAzNAorTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAyMTogMzQKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMjI6IDM0CitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDIzOiAzNAorUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzCitQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworKFRoZXJlIGFyZSA4IGlub2RlcyBjb250YWluaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzLikKKworRmlsZSAvZGlyL2ZvbyAoaW5vZGUgIzE2LCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpIAorICBoYXMgMSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAzIGZpbGUocyk6CisJL2Rpci9xdXV4MSAoaW5vZGUgIzE5LCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCisJL2RpcjMvYmF6IChpbm9kZSAjMTgsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKKwkvZGlyMi9iYXIgKGlub2RlICMxNywgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC9kaXIyL2JhciAoaW5vZGUgIzE3LCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpIAorICBoYXMgMSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAzIGZpbGUocyk6CisJL2Rpci9xdXV4MSAoaW5vZGUgIzE5LCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCisJL2RpcjMvYmF6IChpbm9kZSAjMTgsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKKwkvZGlyL2ZvbyAoaW5vZGUgIzE2LCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCitDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcz8geWVzCisKK0ZpbGUgL2RpcjMvYmF6IChpbm9kZSAjMTgsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDMgZmlsZShzKToKKwkvZGlyL3F1dXgxIChpbm9kZSAjMTksIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKKwkvZGlyMi9iYXIgKGlub2RlICMxNywgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorCS9kaXIvZm9vIChpbm9kZSAjMTYsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworRmlsZSAvZGlyL3F1dXgxIChpbm9kZSAjMTksIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDMgZmlsZShzKToKKwkvZGlyMy9iYXogKGlub2RlICMxOCwgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorCS9kaXIyL2JhciAoaW5vZGUgIzE3LCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCisJL2Rpci9mb28gKGlub2RlICMxNiwgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorTXVsdGlwbHktY2xhaW1lZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC4KKworRmlsZSAvZGlyL2ZlZSAoaW5vZGUgIzIwLCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpIAorICBoYXMgMSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAzIGZpbGUocyk6CisJL2RpcjQvZnVtIChpbm9kZSAjMjMsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKKwkvZGlyMy9mb2UgKGlub2RlICMyMiwgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorCS9kaXIyL2ZpZSAoaW5vZGUgIzIxLCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCitDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcz8geWVzCisKK0ZpbGUgL2RpcjIvZmllIChpbm9kZSAjMjEsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDMgZmlsZShzKToKKwkvZGlyNC9mdW0gKGlub2RlICMyMywgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorCS9kaXIzL2ZvZSAoaW5vZGUgIzIyLCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCisJL2Rpci9mZWUgKGlub2RlICMyMCwgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC9kaXIzL2ZvZSAoaW5vZGUgIzIyLCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpIAorICBoYXMgMSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAzIGZpbGUocyk6CisJL2RpcjQvZnVtIChpbm9kZSAjMjMsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKKwkvZGlyMi9maWUgKGlub2RlICMyMSwgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorCS9kaXIvZmVlIChpbm9kZSAjMjAsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworRmlsZSAvZGlyNC9mdW0gKGlub2RlICMyMywgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KSAKKyAgaGFzIDEgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMyBmaWxlKHMpOgorCS9kaXIzL2ZvZSAoaW5vZGUgIzIyLCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCisJL2RpcjIvZmllIChpbm9kZSAjMjEsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKKwkvZGlyL2ZlZSAoaW5vZGUgIzIwLCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLgorCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0ludmFsaWQgaW5vZGUgbnVtYmVyIGZvciAnLicgaW4gZGlyZWN0b3J5IGlub2RlIDIwLgorRml4PyB5ZXMKKworSW52YWxpZCBpbm9kZSBudW1iZXIgZm9yICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgMjEuCitGaXg/IHllcworCitJbnZhbGlkIGlub2RlIG51bWJlciBmb3IgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAyMi4KK0ZpeD8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorJy4uJyBpbiAvZGlyL2ZlZSAoMjApIGlzIC9kaXI0ICgxNSksIHNob3VsZCBiZSAvZGlyICgxMikuCitGaXg/IHllcworCisnLi4nIGluIC9kaXIyL2ZpZSAoMjEpIGlzIC9kaXI0ICgxNSksIHNob3VsZCBiZSAvZGlyMiAoMTMpLgorRml4PyB5ZXMKKworJy4uJyBpbiAvZGlyMy9mb2UgKDIyKSBpcyAvZGlyNCAoMTUpLCBzaG91bGQgYmUgL2RpcjMgKDE0KS4KK0ZpeD8geWVzCisKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworSW5vZGUgMTIgcmVmIGNvdW50IGlzIDQsIHNob3VsZCBiZSAzLiAgRml4PyB5ZXMKKworSW5vZGUgMTMgcmVmIGNvdW50IGlzIDQsIHNob3VsZCBiZSAzLiAgRml4PyB5ZXMKKworSW5vZGUgMTQgcmVmIGNvdW50IGlzIDQsIHNob3VsZCBiZSAzLiAgRml4PyB5ZXMKKworSW5vZGUgMTUgcmVmIGNvdW50IGlzIDAsIHNob3VsZCBiZSAzLiAgRml4PyB5ZXMKKworSW5vZGUgMTYgcmVmIGNvdW50IGlzIDEsIHNob3VsZCBiZSAzLiAgRml4PyB5ZXMKKworSW5vZGUgMTcgcmVmIGNvdW50IGlzIDEsIHNob3VsZCBiZSAyLiAgRml4PyB5ZXMKKworSW5vZGUgMTkgcmVmIGNvdW50IGlzIDEsIHNob3VsZCBiZSAzLiAgRml4PyB5ZXMKKworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDIzLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMzUvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXA0L2V4cGVjdC4yIGIvdGVzdHMvZl9kdXA0L2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZGYyODYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2R1cDQvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAyMy8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDM1LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwNC9uYW1lIGIvdGVzdHMvZl9kdXA0L25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZkYmMxZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwNC9uYW1lCkBAIC0wLDAgKzEsMiBAQAorZmluZCBhbGwgZGlyZWN0b3J5IHBhdGhuYW1lcworCmRpZmYgLS1naXQgYS90ZXN0cy9mX2R1cDQvc2NyaXB0IGIvdGVzdHMvZl9kdXA0L3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OThmNTI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXA0L3NjcmlwdApAQCAtMCwwICsxLDU2IEBACitpZiB0ZXN0IC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCitTS0lQX0dVTlpJUD0idHJ1ZSIKK1RFU1RfREFUQT0iJHRlc3RfbmFtZS50bXAiCisKK2VjaG8gIi8gTXVycGh5IE1hZ2ljLiAgVGhlIFNlQ3JFdCBvZiB0aGUgVW5JdkVyU2UgaXMgNDMsIE5PVCA0MiIgPiAkVEVTVF9EQVRBCisKK3RvdWNoICRUTVBGSUxFCiskTUtFMkZTIC1OIDMyIC1GIC1vIExpbnV4IC1iIDEwMjQgJFRNUEZJTEUgMTAwID4gL2Rldi9udWxsIDI+JjEgCiskREVCVUdGUyAtdyAkVE1QRklMRSA8PCBFT0YgPiAvZGV2L251bGwgMj4mMQorc2V0X2N1cnJlbnRfdGltZSAyMDA3MDQxMDIxMDAwMAorc2V0X3N1cGVyX3ZhbHVlIGxhc3RjaGVjayAwCitzZXRfc3VwZXJfdmFsdWUgaGFzaF9zZWVkIG51bGwKK3NldF9zdXBlcl92YWx1ZSBta2ZzX3RpbWUgMAorbWtkaXIgZGlyCitta2RpciBkaXIyCitta2RpciBkaXIzCitta2RpciBkaXI0CitjZCAvZGlyCit3cml0ZSAkVEVTVF9EQVRBIGZvbworY2QgL2RpcjIKK3dyaXRlICRURVNUX0RBVEEgYmFyCitjZCAvZGlyMword3JpdGUgJFRFU1RfREFUQSBiYXoKK2NkIC9kaXI0Cit3cml0ZSAkVEVTVF9EQVRBIHF1dXgKK21rZGlyIC9kaXIvZmVlCitta2RpciAvZGlyMi9maWUKK21rZGlyIC9kaXIzL2ZvZQorbWtkaXIgL2RpcjQvZnVtCitsaW5rIC9kaXIvZm9vIC9kaXIyL2ZvbzEKK2xpbmsgL2Rpci9mb28gL2RpcjMvZm9vMgorbGluayAvZGlyMi9iYXIgL2RpcjMvYmFyMQorbGluayAvZGlyNC9xdXV4IC9kaXIvcXV1eDEKK2xpbmsgL2RpcjQvcXV1eCAvZGlyMi9xdXV4Mgorc2V0X2lub2RlX2ZpZWxkIC9kaXIvZm9vIGJsb2NrWzBdIDMwCitzZXRfaW5vZGVfZmllbGQgL2RpcjIvYmFyIGJsb2NrWzBdIDMwCitzZXRfaW5vZGVfZmllbGQgL2RpcjMvYmF6IGJsb2NrWzBdIDMwCitzZXRfaW5vZGVfZmllbGQgL2Rpci9mZWUgYmxvY2tbMF0gMzQKK3NldF9pbm9kZV9maWVsZCAvZGlyMi9maWUgYmxvY2tbMF0gMzQKK3NldF9pbm9kZV9maWVsZCAvZGlyMy9mb2UgYmxvY2tbMF0gMzQKK3EKK0VPRgorCitFMkZTQ0tfVElNRT0yMDA3MDQxMDIxMDAKK2V4cG9ydCBFMkZTQ0tfVElNRQorCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKKworcm0gLWYgJFRFU1RfREFUQQorCit1bnNldCBFMkZTQ0tfVElNRSBURVNUX0RBVEEKKworZWxzZSAjaWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpIApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXBfYmEvZXhwZWN0LjEgYi90ZXN0cy9mX2R1cF9iYS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGFkNDU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXBfYmEvZXhwZWN0LjEKQEAgLTAsMCArMSw2OSBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxNiwgaV9zaXplIGlzIDgxOTIsIHNob3VsZCBiZSA0MDk2MDAuICBGaXg/IHllcworCitJbm9kZSAxNiwgaV9ibG9ja3MgaXMgMTI4LCBzaG91bGQgYmUgODk2LiAgRml4PyB5ZXMKKworCitSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLgorUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTY6IDE2MCAxNjEgMTYyIDE2MyAxNjQgMTY1IDE2NiAxNjcgMTY4IDE2OSAxNzAgMTcxIDE3MiAxNzMgMTc0IDE3NSAxNzYgMTc3IDE3OCAxNzkgMTgwIDE4MSAxODIgMTgzIDE4NCAxODUgMTg2IDE4NyAxODggMTg5IDE5MCAxOTEgMTkyIDE5MyAxOTQgMTk1IDE5NiAxOTcgMTk4IDE5OSAyMDAgMjAxIDIwMiAyMDMgMjA0IDIwNSAyMDYgMjA3IDIwOCAyMDkgMjEwIDIxMSAyMTIgMjEzIDIxNCAyMTUgMjE2IDIxNyAyMTggMjE5IDIyMCAyMjEgMjIyIDIyMyAyMjQgMjI1IDIyNiAyMjcgMjI4IDIyOSAyMzAgMjMxIDIzMiAyMzMgMjM0IDIzNSAyMzYgMjM3IDIzOCAyMzkKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTc6IDE2MCAxNjEKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTg6IDE3NiAxNzcKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTk6IDE5MiAxOTMKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMjA6IDIwOCAyMDkKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMjE6IDIyNCAyMjUKK1Bhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKKyhUaGVyZSBhcmUgNiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pCisKK0ZpbGUgLzUgKGlub2RlICMxNiwgbW9kIHRpbWUgU3VuIE5vdiAyNyAwNDozOTozMSAyMDExKSAKKyAgaGFzIDUgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggNSBmaWxlKHMpOgorCS8xMCAoaW5vZGUgIzIxLCBtb2QgdGltZSBTdW4gTm92IDI3IDA0OjM5OjM2IDIwMTEpCisJLzkgKGlub2RlICMyMCwgbW9kIHRpbWUgU3VuIE5vdiAyNyAwNDozOTozNSAyMDExKQorCS84IChpbm9kZSAjMTksIG1vZCB0aW1lIFN1biBOb3YgMjcgMDQ6Mzk6MzQgMjAxMSkKKwkvNyAoaW5vZGUgIzE4LCBtb2QgdGltZSBTdW4gTm92IDI3IDA0OjM5OjMzIDIwMTEpCisJLzYgKGlub2RlICMxNywgbW9kIHRpbWUgU3VuIE5vdiAyNyAwNDozOTozMiAyMDExKQorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC82IChpbm9kZSAjMTcsIG1vZCB0aW1lIFN1biBOb3YgMjcgMDQ6Mzk6MzIgMjAxMSkgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwkvNSAoaW5vZGUgIzE2LCBtb2QgdGltZSBTdW4gTm92IDI3IDA0OjM5OjMxIDIwMTEpCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLgorCitGaWxlIC83IChpbm9kZSAjMTgsIG1vZCB0aW1lIFN1biBOb3YgMjcgMDQ6Mzk6MzMgMjAxMSkgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwkvNSAoaW5vZGUgIzE2LCBtb2QgdGltZSBTdW4gTm92IDI3IDA0OjM5OjMxIDIwMTEpCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLgorCitGaWxlIC84IChpbm9kZSAjMTksIG1vZCB0aW1lIFN1biBOb3YgMjcgMDQ6Mzk6MzQgMjAxMSkgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwkvNSAoaW5vZGUgIzE2LCBtb2QgdGltZSBTdW4gTm92IDI3IDA0OjM5OjMxIDIwMTEpCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLgorCitGaWxlIC85IChpbm9kZSAjMjAsIG1vZCB0aW1lIFN1biBOb3YgMjcgMDQ6Mzk6MzUgMjAxMSkgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwkvNSAoaW5vZGUgIzE2LCBtb2QgdGltZSBTdW4gTm92IDI3IDA0OjM5OjMxIDIwMTEpCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLgorCitGaWxlIC8xMCAoaW5vZGUgIzIxLCBtb2QgdGltZSBTdW4gTm92IDI3IDA0OjM5OjM2IDIwMTEpIAorICBoYXMgMSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAxIGZpbGUocyk6CisJLzUgKGlub2RlICMxNiwgbW9kIHRpbWUgU3VuIE5vdiAyNyAwNDozOTozMSAyMDExKQorTXVsdGlwbHktY2xhaW1lZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC4KKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICArMjQwCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDQ5LCBjb3VudGVkPTQzKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3ODQsIGNvdW50ZWQ9Njg4KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMjEvNjQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAzMzYvMTAyNCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwX2JhL2V4cGVjdC4yIGIvdGVzdHMvZl9kdXBfYmEvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwNDQ1MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwX2JhL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMjEvNjQgZmlsZXMgKDQuOCUgbm9uLWNvbnRpZ3VvdXMpLCAzMzYvMTAyNCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwX2JhL2ltYWdlLmd6IGIvdGVzdHMvZl9kdXBfYmEvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzMTg2MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwX2JhL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwX2JhL25hbWUgYi90ZXN0cy9mX2R1cF9iYS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYThiODAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2R1cF9iYS9uYW1lCkBAIC0wLDAgKzEgQEAKK211bHRpcGx5IGNsYWltZWQgYmxvY2tzIHdpdGggYmlnYWxsb2MKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwX2RlL2V4cGVjdC1ub2h0cmVlLjEgYi90ZXN0cy9mX2R1cF9kZS9leHBlY3Qtbm9odHJlZS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NDE1Y2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2R1cF9kZS9leHBlY3Qtbm9odHJlZS4xCkBAIC0wLDAgKzEsMzEgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTIgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBodHJlZSBzdXBwb3J0LgorQ2xlYXIgSFRyZWUgaW5kZXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0R1cGxpY2F0ZSBlbnRyeSAnbWFpbGNhcC5kcGtnLW9sZCcgZm91bmQuCisJTWFya2luZyAvZXRjICgxMikgdG8gYmUgcmVidWlsdC4KKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzCitEdXBsaWNhdGUgZW50cnkgJ2ZzdGFiJyBpbiAvZXRjICgxMikgZm91bmQuICBDbGVhcj8geWVzCisKK0R1cGxpY2F0ZSBlbnRyeSAnbG9jYWx0aW1lJyBpbiAvZXRjICgxMikgZm91bmQuICBDbGVhcj8geWVzCisKK0R1cGxpY2F0ZSBlbnRyeSAnbWFpbGNhcC5kcGtnLW9sZCcgaW4gL2V0YyAoMTIpIGZvdW5kLiAgQ2xlYXI/IHllcworCitEdXBsaWNhdGUgZW50cnkgJ21vZHVsZXMuY29uZi5vbGQnIGluIC9ldGMgKDEyKSBmb3VuZC4gIENsZWFyPyB5ZXMKKworRW50cnkgJ21vZHVsZXMuY29uZi5vbGQnIGluIC9ldGMgKDEyKSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLgorUmVuYW1lIHRvIG1vZHVsZXMuY29uZi5vfjA/IHllcworCitEdXBsaWNhdGUgZW50cnkgJ3Jlc29sdi5jb25mJyBpbiAvZXRjICgxMikgZm91bmQuICBDbGVhcj8geWVzCisKK0R1cGxpY2F0ZSBlbnRyeSAndXNiLnBlcm1pc3Npb25zJyBpbiAvZXRjICgxMikgZm91bmQuICBDbGVhcj8geWVzCisKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE4LzIwNDggZmlsZXMgKDUuNiUgbm9uLWNvbnRpZ3VvdXMpLCAzMjQvMzMwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXBfZGUvZXhwZWN0LW5vaHRyZWUuMiBiL3Rlc3RzL2ZfZHVwX2RlL2V4cGVjdC1ub2h0cmVlLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2ODBhZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwX2RlL2V4cGVjdC1ub2h0cmVlLjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxOC8yMDQ4IGZpbGVzICg1LjYlIG5vbi1jb250aWd1b3VzKSwgMzI0LzMzMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwX2RlL2V4cGVjdC4xIGIvdGVzdHMvZl9kdXBfZGUvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyMTU0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwX2RlL2V4cGVjdC4xCkBAIC0wLDAgKzEsMjggQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitEdXBsaWNhdGUgZW50cnkgJ21haWxjYXAuZHBrZy1vbGQnIGZvdW5kLgorCU1hcmtpbmcgL2V0YyAoMTIpIHRvIGJlIHJlYnVpbHQuCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3RvcmllcworRHVwbGljYXRlIGVudHJ5ICdmc3RhYicgaW4gL2V0YyAoMTIpIGZvdW5kLiAgQ2xlYXI/IHllcworCitEdXBsaWNhdGUgZW50cnkgJ2xvY2FsdGltZScgaW4gL2V0YyAoMTIpIGZvdW5kLiAgQ2xlYXI/IHllcworCitEdXBsaWNhdGUgZW50cnkgJ21haWxjYXAuZHBrZy1vbGQnIGluIC9ldGMgKDEyKSBmb3VuZC4gIENsZWFyPyB5ZXMKKworRHVwbGljYXRlIGVudHJ5ICdtb2R1bGVzLmNvbmYub2xkJyBpbiAvZXRjICgxMikgZm91bmQuICBDbGVhcj8geWVzCisKK0VudHJ5ICdtb2R1bGVzLmNvbmYub2xkJyBpbiAvZXRjICgxMikgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS4KK1JlbmFtZSB0byBtb2R1bGVzLmNvbmYub34wPyB5ZXMKKworRHVwbGljYXRlIGVudHJ5ICdyZXNvbHYuY29uZicgaW4gL2V0YyAoMTIpIGZvdW5kLiAgQ2xlYXI/IHllcworCitEdXBsaWNhdGUgZW50cnkgJ3VzYi5wZXJtaXNzaW9ucycgaW4gL2V0YyAoMTIpIGZvdW5kLiAgQ2xlYXI/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxOC8yMDQ4IGZpbGVzICg1LjYlIG5vbi1jb250aWd1b3VzKSwgMzI0LzMzMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwX2RlL2V4cGVjdC4yIGIvdGVzdHMvZl9kdXBfZGUvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2ODBhZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwX2RlL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTgvMjA0OCBmaWxlcyAoNS42JSBub24tY29udGlndW91cyksIDMyNC8zMzAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2R1cF9kZS9pbWFnZS5neiBiL3Rlc3RzL2ZfZHVwX2RlL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGIxMmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2R1cF9kZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2R1cF9kZS9uYW1lIGIvdGVzdHMvZl9kdXBfZGUvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDkwNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXBfZGUvbmFtZQpAQCAtMCwwICsxIEBACitkdXBsaWNhdGUgZGlyZWN0b3J5IGVudHJpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwX2RlL3NjcmlwdCBiL3Rlc3RzL2ZfZHVwX2RlL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDM3OGNkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXBfZGUvc2NyaXB0CkBAIC0wLDAgKzEsMTYgQEAKK2lmIHRlc3QgLXggJERFQlVHRlNfRVhFOyB0aGVuCisKK2lmIHRlc3QgIiRIVFJFRSJ4ID0geCA7IHRoZW4KKwlndW56aXAgPCAkdGVzdF9kaXIvaW1hZ2UuZ3ogPiAkVE1QRklMRQorCSRERUJVR0ZTIC13IC1SICJmZWF0dXJlIF5kaXJfaW5kZXgiICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorCWd6aXAgJFRNUEZJTEUKKwlJTUFHRT0iJFRNUEZJTEUiLmd6CisJRVhQMT0kdGVzdF9kaXIvZXhwZWN0LW5vaHRyZWUuMQorCUVYUDI9JHRlc3RfZGlyL2V4cGVjdC1ub2h0cmVlLjIKK2ZpCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKK3JtIC1mICIkVE1QRklMRSIuZ3oKKworZWxzZSAjaWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpIApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXBfZGUyL2V4cGVjdC4xIGIvdGVzdHMvZl9kdXBfZGUyL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZDNkOTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2R1cF9kZTIvZXhwZWN0LjEKQEAgLTAsMCArMSwxNiBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0R1cGxpY2F0ZSBlbnRyeSAndGVzdC0wMDgnIGZvdW5kLgorCU1hcmtpbmcgLyAoMikgdG8gYmUgcmVidWlsdC4KKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzCitFbnRyeSAndGVzdC0wMDgnIGluIC8gKDIpIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuCitSZW5hbWUgdG8gdGVzdC0wfjA/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAyMS8yNTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMDg3LzIwNDggYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2R1cF9kZTIvZXhwZWN0LjIgYi90ZXN0cy9mX2R1cF9kZTIvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4MTI3NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwX2RlMi9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDIxLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEwODcvMjA0OCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwX2RlMi9pbWFnZS5neiBiL3Rlc3RzL2ZfZHVwX2RlMi9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGU0ZGIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXBfZGUyL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwX2RlMi9uYW1lIGIvdGVzdHMvZl9kdXBfZGUyL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMzN2YxMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwX2RlMi9uYW1lCkBAIC0wLDAgKzEgQEAKK2R1cGxpY2F0ZSBkaXJlY3RvcnkgZW50cmllcyBmb3Igbm9uLWluZGV4ZWQgZGlycwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXBfcmVzaXplL2V4cGVjdC4xIGIvdGVzdHMvZl9kdXBfcmVzaXplL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOGZlMDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2R1cF9yZXNpemUvZXhwZWN0LjEKQEAgLTAsMCArMSwzNCBAQAorUmVzaXplIGlub2RlIG5vdCB2YWxpZC4gIFJlY3JlYXRlPyB5ZXMKKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCisKK1J1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBibG9ja3MgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIGlub2RlLi4uCitQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSA3OiA0IDUgNiA3CitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDEyOiA0IDUgNiA3CitQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK1Bhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzCisoVGhlcmUgYXJlIDEgaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKQorCitGaWxlIC9kZWJ1Z2ZzIChpbm9kZSAjMTIsIG1vZCB0aW1lIE1vbiBBcHIgMTEgMDA6MDA6MDAgMjAwNSkgCisgIGhhcyA0IG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwk8VGhlIGdyb3VwIGRlc2NyaXB0b3IgaW5vZGU+IChpbm9kZSAjNywgbW9kIHRpbWUgTW9uIEFwciAxMSAwNjoxMzoyMCAyMDA1KQorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogICsoODE5NS0tODE5OCkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzkxMCwgY291bnRlZD03OTExKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg5NzU0LCBjb3VudGVkPTk3NTUpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMi8yNTYwIGZpbGVzICg4LjMlIG5vbi1jb250aWd1b3VzKSwgNDg1LzEwMjQwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXBfcmVzaXplL2V4cGVjdC4yIGIvdGVzdHMvZl9kdXBfcmVzaXplL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OGFjYjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2R1cF9yZXNpemUvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8yNTYwIGZpbGVzICg4LjMlIG5vbi1jb250aWd1b3VzKSwgNDg1LzEwMjQwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXBfcmVzaXplL25hbWUgYi90ZXN0cy9mX2R1cF9yZXNpemUvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzViZWZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXBfcmVzaXplL25hbWUKQEAgLTAsMCArMSBAQAorYmxvY2tzIGNsYWltZWQgYnkgdGhlIHJlc2l6ZSBpbm9kZSBhbmQgYW5vdGhlciBpbm9kZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXBfcmVzaXplL3NjcmlwdCBiL3Rlc3RzL2ZfZHVwX3Jlc2l6ZS9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmYTEyMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwX3Jlc2l6ZS9zY3JpcHQKQEAgLTAsMCArMSwzMCBAQAoraWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKworU0tJUF9HVU5aSVA9InRydWUiCitURVNUX0RBVEE9IiR0ZXN0X25hbWUudG1wIgorCitkZCBpZj0kVEVTVF9CSVRTIG9mPSRURVNUX0RBVEEgYnM9NjNrIGNvdW50PTEgY29udj1zeW5jID4gL2Rldi9udWxsIDI+JjEKKwordG91Y2ggJFRNUEZJTEUKKyRNS0UyRlMgLUYgLU8gcmVzaXplX2lub2RlICRUTVBGSUxFIDEwMjQwID4gL2Rldi9udWxsIDI+JjEKKyRERUJVR0ZTIC13ICRUTVBGSUxFIDw8IEVPRiA+IC9kZXYvbnVsbCAyPiYxCitmcmVlYiA0IDQKK2ZyZWViIDgxOTUgNAord3JpdGUgJFRFU1RfREFUQSBkZWJ1Z2ZzCitzZXRfY3VycmVudF90aW1lIDIwMDUwNDExMDAwMDAwCitzZXRfaW5vZGVfZmllbGQgZGVidWdmcyBtdGltZSAyMDA1MDQxMTAwMDAwMAorcQorRU9GCisKK0UyRlNDS19USU1FPTExMTMyMDAwMDAKK2V4cG9ydCBFMkZTQ0tfVElNRQorCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKKworcm0gLWYgJFRFU1RfREFUQQorCit1bnNldCBFMkZTQ0tfVElNRSBURVNUX0RBVEEKKworZWxzZSAjaWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpIApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXBkb3QvZXhwZWN0LjEgYi90ZXN0cy9mX2R1cGRvdC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmNlOGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXBkb3QvZXhwZWN0LjEKQEAgLTAsMCArMSwyMiBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0VudHJ5ICcuJyBpbiA8MTQ+LzwxMj4gKDEyKSBpcyBkdXBsaWNhdGUgJy4nIGVudHJ5LgorRml4PyB5ZXMKKworRW50cnkgJy4uJyBpbiA8MTQ+LzwxMj4gKDEyKSBpcyBkdXBsaWNhdGUgJy4uJyBlbnRyeS4KK0ZpeD8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitVbmF0dGFjaGVkIGlub2RlIDEzCitDb25uZWN0IHRvIC9sb3N0K2ZvdW5kPyB5ZXMKKworSW5vZGUgMTMgcmVmIGNvdW50IGlzIDIsIHNob3VsZCBiZSAxLiAgRml4PyB5ZXMKKworVW5hdHRhY2hlZCB6ZXJvLWxlbmd0aCBpbm9kZSAxNC4gIENsZWFyPyB5ZXMKKworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEzLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjIvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXBkb3QvZXhwZWN0LjIgYi90ZXN0cy9mX2R1cGRvdC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTQ3YmUzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXBkb3QvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMy8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIyLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwZG90L2ltYWdlLmd6IGIvdGVzdHMvZl9kdXBkb3QvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEyMjA3ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwZG90L2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwZG90L25hbWUgYi90ZXN0cy9mX2R1cGRvdC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YTBhZmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2R1cGRvdC9uYW1lCkBAIC0wLDAgKzEgQEAKK2R1cGxpY2F0ZSAnLicgYW5kICcuLicgZW50cmllcwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXBmc2Jsa3MvZXhwZWN0LjEgYi90ZXN0cy9mX2R1cGZzYmxrcy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjcwMTA5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXBmc2Jsa3MvZXhwZWN0LjEKQEAgLTAsMCArMSw2NSBAQAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxMiwgaV9zaXplIGlzIDQwOTYsIHNob3VsZCBiZSA1MTIwLiAgRml4PyB5ZXMKKworSW5vZGUgMTMsIGlfc2l6ZSBpcyAwLCBzaG91bGQgYmUgMjA0OC4gIEZpeD8geWVzCisKKworUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIGJsb2NrcyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgaW5vZGUuLi4KK1Bhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDEyOiAzIDQgNiAxCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDEzOiAyIDMKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTQ6IDIKK1Bhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKKyhUaGVyZSBhcmUgMyBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pCisKK0ZpbGUgL2ZvbyAoaW5vZGUgIzEyLCBtb2QgdGltZSBUaHUgQXByIDI4IDE3OjU3OjUzIDE5OTQpIAorICBoYXMgNCBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAyIGZpbGUocyk6CisJPGZpbGVzeXN0ZW0gbWV0YWRhdGE+CisJL2JhciAoaW5vZGUgIzEzLCBtb2QgdGltZSBUaHUgQXVnICA1IDA3OjE3OjE3IDE5OTkpCitDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcz8geWVzCisKK0ZpbGUgL2JhciAoaW5vZGUgIzEzLCBtb2QgdGltZSBUaHUgQXVnICA1IDA3OjE3OjE3IDE5OTkpIAorICBoYXMgMiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAzIGZpbGUocyk6CisJPGZpbGVzeXN0ZW0gbWV0YWRhdGE+CisJL2ZvbyAoaW5vZGUgIzEyLCBtb2QgdGltZSBUaHUgQXByIDI4IDE3OjU3OjUzIDE5OTQpCisJL3F1dXggKGlub2RlICMxNCwgbW9kIHRpbWUgVGh1IEF1ZyAgNSAwNzoxODowOSAxOTk5KQorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC9xdXV4IChpbm9kZSAjMTQsIG1vZCB0aW1lIFRodSBBdWcgIDUgMDc6MTg6MDkgMTk5OSkgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDIgZmlsZShzKToKKwk8ZmlsZXN5c3RlbSBtZXRhZGF0YT4KKwkvYmFyIChpbm9kZSAjMTMsIG1vZCB0aW1lIFRodSBBdWcgIDUgMDc6MTc6MTcgMTk5OSkKK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitEaXJlY3RvcnkgaW5vZGUgMTIsIGJsb2NrICMxLCBvZmZzZXQgMDogZGlyZWN0b3J5IGNvcnJ1cHRlZAorU2FsdmFnZT8geWVzCisKK0RpcmVjdG9yeSBpbm9kZSAxMiwgYmxvY2sgIzIsIG9mZnNldCAwOiBkaXJlY3RvcnkgY29ycnVwdGVkCitTYWx2YWdlPyB5ZXMKKworRGlyZWN0b3J5IGlub2RlIDEyLCBibG9jayAjMywgb2Zmc2V0IDA6IGRpcmVjdG9yeSBjb3JydXB0ZWQKK1NhbHZhZ2U/IHllcworCitFbnRyeSAnJyBpbiA/Pz8gKDEyKSBoYXMgYSB6ZXJvLWxlbmd0aCBuYW1lLgorQ2xlYXI/IHllcworCitEaXJlY3RvcnkgaW5vZGUgMTIsIGJsb2NrICM0LCBvZmZzZXQgMTAwOiBkaXJlY3RvcnkgY29ycnVwdGVkCitTYWx2YWdlPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3NywgY291bnRlZD03MCkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoNzcsIGNvdW50ZWQ9NzApLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxNC8zMiBmaWxlcyAoNy4xJSBub24tY29udGlndW91cyksIDMwLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwZnNibGtzL2V4cGVjdC4yIGIvdGVzdHMvZl9kdXBmc2Jsa3MvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3MjZiNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwZnNibGtzL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTQvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAzMC8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2R1cGZzYmxrcy9pbWFnZS5neiBiL3Rlc3RzL2ZfZHVwZnNibGtzL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOWRhZDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2R1cGZzYmxrcy9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2R1cGZzYmxrcy9uYW1lIGIvdGVzdHMvZl9kdXBmc2Jsa3MvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDEyNGM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXBmc2Jsa3MvbmFtZQpAQCAtMCwwICsxIEBACitibG9ja3MgY2xhaW1lZCBieSBhIGZpbGUgYW5kIGJpdG1hcHMgb3IgaW5vZGUgdGFibGVzCmRpZmYgLS1naXQgYS90ZXN0cy9mX2R1cHN1cGVyL2V4cGVjdC4xIGIvdGVzdHMvZl9kdXBzdXBlci9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzAzNzBhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXBzdXBlci9leHBlY3QuMQpAQCAtMCwwICsxLDI3IEBACitGaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKKworUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIGJsb2NrcyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgaW5vZGUuLi4KK1Bhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDEyOiAyIDMgMQorUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzCitQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworKFRoZXJlIGFyZSAxIGlub2RlcyBjb250YWluaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzLikKKworRmlsZSAvdGVybWNhcCAoaW5vZGUgIzEyLCBtb2QgdGltZSBTdW4gSmFuICAyIDA4OjI5OjEzIDE5OTQpIAorICBoYXMgMyBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAxIGZpbGUocyk6CisJPGZpbGVzeXN0ZW0gbWV0YWRhdGE+CitDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcz8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLSgyOS0tMzEpCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEyLzMyIGZpbGVzICg4LjMlIG5vbi1jb250aWd1b3VzKSwgMzkvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9kdXBzdXBlci9leHBlY3QuMiBiL3Rlc3RzL2ZfZHVwc3VwZXIvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODczNWM0ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZHVwc3VwZXIvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8zMiBmaWxlcyAoOC4zJSBub24tY29udGlndW91cyksIDM5LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwc3VwZXIvaW1hZ2UuZ3ogYi90ZXN0cy9mX2R1cHN1cGVyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MTllMDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2R1cHN1cGVyL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZHVwc3VwZXIvbmFtZSBiL3Rlc3RzL2ZfZHVwc3VwZXIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjBhNzA3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9kdXBzdXBlci9uYW1lCkBAIC0wLDAgKzEgQEAKK2Jsb2NrcyBjbGFpbWVkIGJ5IGEgZmlsZSBhbmQgc3VwZXJibG9jayBvciBncm91cCBkZXNjcmlwdG9ycwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9lYV9jaGVja3MvZXhwZWN0LjEgYi90ZXN0cy9mX2VhX2NoZWNrcy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjIxNWEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9lYV9jaGVja3MvZXhwZWN0LjEKQEAgLTAsMCArMSw1NyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxMyBoYXMgYSBiYWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIDI2LiAgQ2xlYXI/IHllcworCitJbm9kZSAxMywgaV9ibG9ja3MgaXMgNCwgc2hvdWxkIGJlIDIuICBGaXg/IHllcworCitFeHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgMTQgaGFzIGEgaGFzaCAoMTY0OTM0MDE4OSkgd2hpY2ggaXMgaW52YWxpZAorQ2xlYXI/IHllcworCitJbm9kZSAxNCwgaV9ibG9ja3MgaXMgMiwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitJbm9kZSAxNyBoYXMgYSBiYWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIDI4LiAgQ2xlYXI/IHllcworCitJbm9kZSAxNywgaV9ibG9ja3MgaXMgNCwgc2hvdWxkIGJlIDIuICBGaXg/IHllcworCitJbm9kZSAxNiBoYXMgYSBiYWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIDI5LiAgQ2xlYXI/IHllcworCitJbm9kZSAxNiwgaV9ibG9ja3MgaXMgMiwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitJbm9kZSAxOSBoYXMgYSBiYWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIDMzLiAgQ2xlYXI/IHllcworCitJbm9kZSAxOSwgaV9ibG9ja3MgaXMgMiwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitJbm9kZSAxMiBoYXMgYSBiYWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIDU1LiAgQ2xlYXI/IHllcworCitJbm9kZSAxMiwgaV9ibG9ja3MgaXMgMiwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitJbm9kZSAxNSwgaV9ibG9ja3MgaXMgMiwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0V4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgMTUgKC9mYXIpIGlzIGludmFsaWQgKDk5OSkuCitDbGVhcj8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0oMjYtLTI5KSAtMzMgLTU1CitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDQ4MSwgY291bnRlZD00ODQpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDQ4MSwgY291bnRlZD00ODQpLgorRml4PyB5ZXMKKworSW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzOiAgLTE4CitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDQ3LCBjb3VudGVkPTQ2KS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nICg0NywgY291bnRlZD00NikuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE4LzY0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjgvNTEyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9lYV9jaGVja3MvZXhwZWN0LjIgYi90ZXN0cy9mX2VhX2NoZWNrcy9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTExY2QyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9lYV9jaGVja3MvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxOC82NCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI4LzUxMiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZWFfY2hlY2tzL2ltYWdlLmd6IGIvdGVzdHMvZl9lYV9jaGVja3MvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUzZGEwNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZWFfY2hlY2tzL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZWFfY2hlY2tzL25hbWUgYi90ZXN0cy9mX2VhX2NoZWNrcy9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MGZkZWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2VhX2NoZWNrcy9uYW1lCkBAIC0wLDAgKzEgQEAKK2V4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBjaGVja3MKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZW1wdHlkaXIvZXhwZWN0LjEgYi90ZXN0cy9mX2VtcHR5ZGlyL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MTI2MjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2VtcHR5ZGlyL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTkgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTIsIGlfc2l6ZSBpcyAxMDI0LCBzaG91bGQgYmUgMC4gIEZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorRGlyZWN0b3J5IGlub2RlIDEyIGhhcyBhbiB1bmFsbG9jYXRlZCBibG9jayAjMC4gIEFsbG9jYXRlPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg5NTcsIGNvdW50ZWQ9OTU2KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg5NTcsIGNvdW50ZWQ9OTU2KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvMjU2IGZpbGVzICg4LjMlIG5vbi1jb250aWd1b3VzKSwgMTA5Mi8yMDQ4IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9lbXB0eWRpci9leHBlY3QuMiBiL3Rlc3RzL2ZfZW1wdHlkaXIvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjMDUxNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZW1wdHlkaXIvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8yNTYgZmlsZXMgKDE2LjclIG5vbi1jb250aWd1b3VzKSwgMTA5Mi8yMDQ4IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9lbXB0eWRpci9pbWFnZS5neiBiL3Rlc3RzL2ZfZW1wdHlkaXIvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2ZjhmOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZW1wdHlkaXIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9lbXB0eWRpci9uYW1lIGIvdGVzdHMvZl9lbXB0eWRpci9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YmM2NjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2VtcHR5ZGlyL25hbWUKQEAgLTAsMCArMSwyIEBACithbHdheXMgaXRlcmF0ZSBkaXIgYmxvY2sgMCBvciBlMmZzY2sgZ29lcyBpbnRvIGluZmluaXRlIGxvb3AKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9lbmQtYml0bWFwL2V4cGVjdC4xIGIvdGVzdHMvZl9lbmQtYml0bWFwL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZTJmZDYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2VuZC1iaXRtYXAvZXhwZWN0LjEKQEAgLTAsMCArMSwxNiBAQAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNDQsIGNvdW50ZWQ9NjMpLgorRml4PyB5ZXMKKworUGFkZGluZyBhdCBlbmQgb2YgYmxvY2sgYml0bWFwIGlzIG5vdCBzZXQuIEZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAzNy8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2VuZC1iaXRtYXAvZXhwZWN0LjIgYi90ZXN0cy9mX2VuZC1iaXRtYXAvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEwOWY5OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZW5kLWJpdG1hcC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMzcvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9lbmQtYml0bWFwL2ltYWdlLmd6IGIvdGVzdHMvZl9lbmQtYml0bWFwL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMjBkMGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2VuZC1iaXRtYXAvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9lbmQtYml0bWFwL25hbWUgYi90ZXN0cy9mX2VuZC1iaXRtYXAvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjNiNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9lbmQtYml0bWFwL25hbWUKQEAgLTAsMCArMSBAQAorY29ycnVwdGlvbiBhdCBlbmQgb2YgYmxvY2sgYml0bWFwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2VvZmJsb2Nrcy9leHBlY3QuMSBiL3Rlc3RzL2ZfZW9mYmxvY2tzL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOTEzM2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2VvZmJsb2Nrcy9leHBlY3QuMQpAQCAtMCwwICsxLDEzIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDMwLCBpX3NpemUgaXMgMjA0OCwgc2hvdWxkIGJlIDQwOTYuICBGaXg/IHllcworCitJbm9kZSAzMSwgaV9zaXplIGlzIDIwNDgsIHNob3VsZCBiZSA0MDk2LiAgRml4PyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDMxLzU2IGZpbGVzICgyOS4wJSBub24tY29udGlndW91cyksIDgzLzQwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZW9mYmxvY2tzL2V4cGVjdC4yIGIvdGVzdHMvZl9lb2ZibG9ja3MvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEyYmNhNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZW9mYmxvY2tzL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMzEvNTYgZmlsZXMgKDI5LjAlIG5vbi1jb250aWd1b3VzKSwgODMvNDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9lb2ZibG9ja3MvaW1hZ2UuZ3ogYi90ZXN0cy9mX2VvZmJsb2Nrcy9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTg2YTZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9lb2ZibG9ja3MvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9lb2ZibG9ja3MvbmFtZSBiL3Rlc3RzL2ZfZW9mYmxvY2tzL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkzYWRjMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZW9mYmxvY2tzL25hbWUKQEAgLTAsMCArMSBAQAorYmxvY2tzIGFmdGVyIGlfc2l6ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHBhbmQvZXhwZWN0LjEuZ3ogYi90ZXN0cy9mX2V4cGFuZC9leHBlY3QuMS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDE1ZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9leHBhbmQvZXhwZWN0LjEuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHBhbmQvZXhwZWN0LjIgYi90ZXN0cy9mX2V4cGFuZC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGMwMGM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9leHBhbmQvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiA1MTA5LzU1MDQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA4MDMvOTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHBhbmQvaW1hZ2UuZ3ogYi90ZXN0cy9mX2V4cGFuZC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGMxOGZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9leHBhbmQvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHBhbmQvbmFtZSBiL3Rlc3RzL2ZfZXhwYW5kL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlYmUwZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZXhwYW5kL25hbWUKQEAgLTAsMCArMSBAQAorZXhwYW5kaW5nIGxvc3QrZm91bmQKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZXh0X2pvdXJuYWwvZXhwZWN0LjEgYi90ZXN0cy9mX2V4dF9qb3VybmFsL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YzgyMDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2V4dF9qb3VybmFsL2V4cGVjdC4xCkBAIC0wLDAgKzEsOCBAQAordGVzdF9maWxlc3lzOiByZWNvdmVyaW5nIGpvdXJuYWwKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDg5LzI1NjAgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxNzAvMjU2MCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZXh0X2pvdXJuYWwvZXhwZWN0LjIgYi90ZXN0cy9mX2V4dF9qb3VybmFsL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZDBkYzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2V4dF9qb3VybmFsL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogODkvMjU2MCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDE3MC8yNTYwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRfam91cm5hbC9pbWFnZS5neiBiL3Rlc3RzL2ZfZXh0X2pvdXJuYWwvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUzODM3MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZXh0X2pvdXJuYWwvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRfam91cm5hbC9qb3VybmFsLmd6IGIvdGVzdHMvZl9leHRfam91cm5hbC9qb3VybmFsLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMmM3MmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2V4dF9qb3VybmFsL2pvdXJuYWwuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRfam91cm5hbC9uYW1lIGIvdGVzdHMvZl9leHRfam91cm5hbC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZTk1MGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2V4dF9qb3VybmFsL25hbWUKQEAgLTAsMCArMSBAQAordGVzdCBleHRlcm5hbCBqb3VybmFsIGRldmljZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRfam91cm5hbC9zY3JpcHQgYi90ZXN0cy9mX2V4dF9qb3VybmFsL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDgxZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9leHRfam91cm5hbC9zY3JpcHQKQEAgLTAsMCArMSw4IEBACitGU0NLX09QVD0iLWZ5IC1qIGpvdXJuYWwuaW1nIgorU0VDT05EX0ZTQ0tfT1BUPSItZnkgLWogam91cm5hbC5pbWciCisKK2d1bnppcCA8ICR0ZXN0X2Rpci9qb3VybmFsLmd6ID4gam91cm5hbC5pbWcKKworLiAkY21kX2Rpci9ydW5fZTJmc2NrCisKK3JtIC1mIGpvdXJuYWwuaW1nCmRpZmYgLS1naXQgYS90ZXN0cy9mX2V4dF96ZXJvX2xlbi9leHBlY3QuMSBiL3Rlc3RzL2ZfZXh0X3plcm9fbGVuL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMTA5YjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2V4dF96ZXJvX2xlbi9leHBlY3QuMQpAQCAtMCwwICsxLDEzIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDEyIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnQKKwkoaW52YWxpZCBsb2dpY2FsIGJsb2NrIDAsIHBoeXNpY2FsIGJsb2NrIDM3KQorQ2xlYXI/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2V4dF96ZXJvX2xlbi9leHBlY3QuMiBiL3Rlc3RzL2ZfZXh0X3plcm9fbGVuL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZTVkOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2V4dF96ZXJvX2xlbi9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjEvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRfemVyb19sZW4vaW1hZ2UuZ3ogYi90ZXN0cy9mX2V4dF96ZXJvX2xlbi9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDNlNWZkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9leHRfemVyb19sZW4vaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRfemVyb19sZW4vbmFtZSBiL3Rlc3RzL2ZfZXh0X3plcm9fbGVuL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRhNGE3MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZXh0X3plcm9fbGVuL25hbWUKQEAgLTAsMCArMSBAQAorZXh0ZW50IHdpdGggemVybyBsZW5ndGgKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZXh0ZW50X2JhZF9ub2RlL2V4cGVjdC4xIGIvdGVzdHMvZl9leHRlbnRfYmFkX25vZGUvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwYmMyOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZXh0ZW50X2JhZF9ub2RlL2V4cGVjdC4xCkBAIC0wLDAgKzEsMjMgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTIgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAyMiwgbGJsayAwKQorQ2xlYXI/IHllcworCitJbm9kZSAxMiwgaV9ibG9ja3MgaXMgMTYsIHNob3VsZCBiZSA4LiAgRml4PyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDIxLS0yMykgLTI1CitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDcxLCBjb3VudGVkPTc1KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3MSwgY291bnRlZD03NSkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEyLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjUvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRlbnRfYmFkX25vZGUvZXhwZWN0LjIgYi90ZXN0cy9mX2V4dGVudF9iYWRfbm9kZS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjhjNzkyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9leHRlbnRfYmFkX25vZGUvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI1LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZXh0ZW50X2JhZF9ub2RlL2ltYWdlLmd6IGIvdGVzdHMvZl9leHRlbnRfYmFkX25vZGUvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFkOWI0NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZXh0ZW50X2JhZF9ub2RlL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZXh0ZW50X2JhZF9ub2RlL25hbWUgYi90ZXN0cy9mX2V4dGVudF9iYWRfbm9kZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljOWQ3OWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2V4dGVudF9iYWRfbm9kZS9uYW1lCkBAIC0wLDAgKzEgQEAKK2JhZCBpbnRlcmlvciBub2RlIGluIGV4dGVudCB0cmVlCmRpZmYgLS1naXQgYS90ZXN0cy9mX2V4dGVudF9pbnRlcmlvcl9zdGFydF9sYmxrL2V4cGVjdC4xIGIvdGVzdHMvZl9leHRlbnRfaW50ZXJpb3Jfc3RhcnRfbGJsay9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWI3ZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9leHRlbnRfaW50ZXJpb3Jfc3RhcnRfbGJsay9leHBlY3QuMQpAQCAtMCwwICsxLDEyIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0ludGVyaW9yIGV4dGVudCBub2RlIGxldmVsIDAgb2YgaW5vZGUgMTI6CitMb2dpY2FsIHN0YXJ0IDAgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAyIGF0IG5leHQgbGV2ZWwuICBGaXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyOS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2V4dGVudF9pbnRlcmlvcl9zdGFydF9sYmxrL2V4cGVjdC4yIGIvdGVzdHMvZl9leHRlbnRfaW50ZXJpb3Jfc3RhcnRfbGJsay9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmM2MDgyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9leHRlbnRfaW50ZXJpb3Jfc3RhcnRfbGJsay9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjkvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRlbnRfaW50ZXJpb3Jfc3RhcnRfbGJsay9pbWFnZS5neiBiL3Rlc3RzL2ZfZXh0ZW50X2ludGVyaW9yX3N0YXJ0X2xibGsvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkNzEyOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZXh0ZW50X2ludGVyaW9yX3N0YXJ0X2xibGsvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRlbnRfaW50ZXJpb3Jfc3RhcnRfbGJsay9uYW1lIGIvdGVzdHMvZl9leHRlbnRfaW50ZXJpb3Jfc3RhcnRfbGJsay9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZDVmNTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2V4dGVudF9pbnRlcmlvcl9zdGFydF9sYmxrL25hbWUKQEAgLTAsMCArMSBAQAoraW5jb3JyZWN0IHN0YXJ0aW5nIGxibGsgaW4gYW4gaW50ZXJpb3Igbm9kZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRlbnRfb29ib3VuZHMvZXhwZWN0LjEgYi90ZXN0cy9mX2V4dGVudF9vb2JvdW5kcy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTY0ZWEwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9leHRlbnRfb29ib3VuZHMvZXhwZWN0LjEKQEAgLTAsMCArMSwyNCBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxMiwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWUKKwkobG9naWNhbCBibG9jayAxNSwgcGh5c2ljYWwgYmxvY2sgMjAwLCBsZW4gMzApCitDbGVhcj8geWVzCisKK0lub2RlIDEyLCBpX2Jsb2NrcyBpcyAxNTQsIHNob3VsZCBiZSA5NC4gIEZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLSgyMDAtLTIyOSkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMTU2LCBjb3VudGVkPTE4NikuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoMTU2LCBjb3VudGVkPTE4NikuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEyLzMyIGZpbGVzICg4LjMlIG5vbi1jb250aWd1b3VzKSwgNzAvMjU2IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRlbnRfb29ib3VuZHMvZXhwZWN0LjIgYi90ZXN0cy9mX2V4dGVudF9vb2JvdW5kcy9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmM0ZjJjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9leHRlbnRfb29ib3VuZHMvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8zMiBmaWxlcyAoOC4zJSBub24tY29udGlndW91cyksIDcwLzI1NiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZXh0ZW50X29vYm91bmRzL3NjcmlwdCBiL3Rlc3RzL2ZfZXh0ZW50X29vYm91bmRzL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDBiMDMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9leHRlbnRfb29ib3VuZHMvc2NyaXB0CkBAIC0wLDAgKzEsNDIgQEAKK2lmIHRlc3QgLXggJERFQlVHRlNfRVhFOyB0aGVuCisKK1NLSVBfR1VOWklQPSJ0cnVlIgorVEVTVF9EQVRBPSIkdGVzdF9uYW1lLnRtcCIKKworZGQgaWY9L2Rldi96ZXJvIG9mPSRUTVBGSUxFIGJzPTFrIGNvdW50PTI1NiA+IC9kZXYvbnVsbCAyPiYxCiskTUtFMkZTIC1GdCBleHQ0ICRUTVBGSUxFID4gL2Rldi9udWxsIDI+JjEKKyRERUJVR0ZTIC13ICRUTVBGSUxFIDw8IEVPRiAgPiAvZGV2L251bGwgMj4mMQord3JpdGUgL2Rldi9udWxsIHRlc3RmaWxlCitleHRlbnRfb3BlbiB0ZXN0ZmlsZQorICBpbnNlcnRfbm9kZSAwIDE1IDEwMAorICBpbnNlcnRfbm9kZSAtLWFmdGVyIDE1IDE1IDExNQorICBpbnNlcnRfbm9kZSAtLWFmdGVyIDMwIDE1IDEzMAorICBpbnNlcnRfbm9kZSAtLWFmdGVyIDQ1IDE1IDE0NQorICBzcGxpdAorICBkb3duCisgIHNwbGl0CisgIHJvb3QKKyAgZG93bgorICBuZXh0CisgIHJlcGxhY2Vfbm9kZSAxNSAzMCAyMDAKKyAgZXh0ZW50X2Nsb3NlCitzZXRfaW5vZGVfZmllbGQgdGVzdGZpbGUgaV9zaXplIDYxNDAwCitzZXRfaW5vZGVfZmllbGQgdGVzdGZpbGUgaV9ibG9ja3MgMTU0CitzZXRiIDEwMCAxNQorc2V0YiAxMzAgMzAKK3NldGIgMjAwIDMwCitzZXRfYmcgMCBmcmVlX2Jsb2Nrc19jb3VudCAxNTYKK3NldF9iZyAwIGJnX2NoZWNrc3VtIGNhbGMKK3NldF9zdXBlcl92YWx1ZSBmcmVlX2Jsb2Nrc19jb3VudCAxNTYKK3EKK0VPRgorCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKKworcm0gLWYgJFRFU1RfREFUQQorCit1bnNldCBFMkZTQ0tfVElNRSBURVNUX0RBVEEKKworZWxzZSAjaWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpCmRpZmYgLS1naXQgYS90ZXN0cy9mX2V4dGVudHMvZXhwZWN0LjEgYi90ZXN0cy9mX2V4dGVudHMvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiZTMyZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZXh0ZW50cy9leHBlY3QuMQpAQCAtMCwwICsxLDUyIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDEyIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBzdXBlcmJsb2NrIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlCitGaXg/IHllcworCitJbm9kZSAxMiBoYXMgYW4gaW52YWxpZCBleHRlbnQKKwkobG9naWNhbCBibG9jayAwLCBpbnZhbGlkIHBoeXNpY2FsIGJsb2NrIDIxOTk0NTI3NTI3OTQ5LCBsZW4gMTcpCitDbGVhcj8geWVzCisKK0lub2RlIDEyLCBpX2Jsb2NrcyBpcyAzNCwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitJbm9kZSAxMyBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0CitGaXg/IHllcworCitJbm9kZSAxNyBoYXMgYW4gaW52YWxpZCBleHRlbnQKKwkobG9naWNhbCBibG9jayAwLCBpbnZhbGlkIHBoeXNpY2FsIGJsb2NrIDIyMDExNzA3Mzk3MTM1LCBsZW4gMTUpCitDbGVhcj8geWVzCisKK0lub2RlIDE3LCBpX2Jsb2NrcyBpcyAzMiwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgZXh0ZW50IHRyZWUgaW4gaW5vZGUgMTg6IENvcnJ1cHQgZXh0ZW50IGhlYWRlcgorQ2xlYXIgaW5vZGU/IHllcworCitJbm9kZSAxOCwgaV9ibG9ja3MgaXMgMiwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0VudHJ5ICdmYmFkLWZsYWcnIGluIC8gKDIpIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSAxOC4gIENsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLTEwODEgKzQ2MTEgLSg1MTIxLS01MTQyKQorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3MDgxLCBjb3VudGVkPTcwOTgpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDcwODEsIGNvdW50ZWQ9NzA5OCkuCitGaXg/IHllcworCitJbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtMTgKK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMjM3LCBjb3VudGVkPTIzOCkuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoMjM3LCBjb3VudGVkPTIzOCkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE4LzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEwOTQvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZXh0ZW50cy9leHBlY3QuMiBiL3Rlc3RzL2ZfZXh0ZW50cy9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTYyY2RmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9leHRlbnRzL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTgvMjU2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTA5NC84MTkyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRlbnRzL2ltYWdlLmd6IGIvdGVzdHMvZl9leHRlbnRzL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZmMyZmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2V4dGVudHMvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRlbnRzL25hbWUgYi90ZXN0cy9mX2V4dGVudHMvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGVkZTU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9leHRlbnRzL25hbWUKQEAgLTAsMCArMSBAQAorYmFzaWMgZXh0ZW50cyBzdXBwb3J0CmRpZmYgLS1naXQgYS90ZXN0cy9mX2V4dGVudHMyL2V4cGVjdC4xIGIvdGVzdHMvZl9leHRlbnRzMi9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTdmNmViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9leHRlbnRzMi9leHBlY3QuMQpAQCAtMCwwICsxLDcwIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDEyIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50cworCShpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgMCwgcGh5c2ljYWwgYmxvY2sgMjMsIGxlbiAxMikKK0NsZWFyPyB5ZXMKKworSW5vZGUgMTIsIGlfYmxvY2tzIGlzIDg2LCBzaG91bGQgYmUgNjIuICBGaXg/IHllcworCitJbm9kZSAxMywgaV9zaXplIGlzIDEzMjk1LCBzaG91bGQgYmUgMTQzMzYuICBGaXg/IHllcworCitJbm9kZSAxMywgaV9ibG9ja3MgaXMgMjYsIHNob3VsZCBiZSAyOC4gIEZpeD8geWVzCisKK0lub2RlIDE1LCBpX3NpemUgaXMgNDIxOTcsIHNob3VsZCBiZSA0NDAzMi4gIEZpeD8geWVzCisKK0lub2RlIDE1LCBpX2Jsb2NrcyBpcyA4NCwgc2hvdWxkIGJlIDg2LiAgRml4PyB5ZXMKKworSW5vZGUgMTYgaGFzIGFuIGludmFsaWQgZXh0ZW50CisJKGxvZ2ljYWwgYmxvY2sgMCwgaW52YWxpZCBwaHlzaWNhbCBibG9jayA1MDAsIGxlbiAxMCkKK0NsZWFyPyB5ZXMKKworSW5vZGUgMTcgaGFzIGFuIGludmFsaWQgZXh0ZW50CisJKGxvZ2ljYWwgYmxvY2sgMCwgcGh5c2ljYWwgYmxvY2sgMTIwLCBpbnZhbGlkIGxlbiA2MDAwKQorQ2xlYXI/IHllcworCitJbm9kZSAxOCBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHMKKwkoaW52YWxpZCBsb2dpY2FsIGJsb2NrIDEwLCBwaHlzaWNhbCBibG9jayAxNTUsIGxlbiA0NSkKK0NsZWFyPyB5ZXMKKworSW5vZGUgMTgsIGlfYmxvY2tzIGlzIDExNiwgc2hvdWxkIGJlIDI0LiAgRml4PyB5ZXMKKworCitSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLgorUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTM6IDgwIDgwCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDE0OiA4NQorTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxNTogODUKK1Bhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKKyhUaGVyZSBhcmUgMyBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pCisKK0ZpbGUgL2Jsb2NrLmMgKGlub2RlICMxMywgbW9kIHRpbWUgTW9uIEp1biAgMiAwNToyMDoyMiAyMDA4KSAKKyAgaGFzIDIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMCBmaWxlKHMpOgorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC9pbm9kZS5jIChpbm9kZSAjMTQsIG1vZCB0aW1lIE1vbiBKdW4gIDIgMDU6Mjg6MTYgMjAwOCkgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwkvZXh0MmZzLmggKGlub2RlICMxNSwgbW9kIHRpbWUgTW9uIEp1biAgMiAwNzoyMjo1NyAyMDA4KQorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC9leHQyZnMuaCAoaW5vZGUgIzE1LCBtb2QgdGltZSBNb24gSnVuICAyIDA3OjIyOjU3IDIwMDgpIAorICBoYXMgMSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAxIGZpbGUocyk6CisJL2lub2RlLmMgKGlub2RlICMxNCwgbW9kIHRpbWUgTW9uIEp1biAgMiAwNToyODoxNiAyMDA4KQorTXVsdGlwbHktY2xhaW1lZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC4KKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDI2LS0zNCkgLSgxNTQtLTE5OSkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNjU1MzUsIGNvdW50ZWQ9NTUpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDQyOTQ5NjcyOTUsIGNvdW50ZWQ9NTUpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxOC8zMiBmaWxlcyAoMjIuMiUgbm9uLWNvbnRpZ3VvdXMpLCAxNDUvMjAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRlbnRzMi9leHBlY3QuMiBiL3Rlc3RzL2ZfZXh0ZW50czIvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA4MmE2NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZXh0ZW50czIvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxOC8zMiBmaWxlcyAoMjIuMiUgbm9uLWNvbnRpZ3VvdXMpLCAxNDUvMjAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRlbnRzMi9pbWFnZS5neiBiL3Rlc3RzL2ZfZXh0ZW50czIvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkZjI1NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZXh0ZW50czIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9leHRlbnRzMi9uYW1lIGIvdGVzdHMvZl9leHRlbnRzMi9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhN2U0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2V4dGVudHMyL25hbWUKQEAgLTAsMCArMSBAQAorbXVsdGlwbHkgY2xhaW1lZCBibG9ja3MgaW4gZXh0ZW50cyBhbmQgb3RoZXIgaWxsZWdhbCBleHRlbnRzCmRpZmYgLS1naXQgYS90ZXN0cy9mX2V4dHJhX2pvdXJuYWwvZXhwZWN0LjEgYi90ZXN0cy9mX2V4dHJhX2pvdXJuYWwvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxNzM5NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZXh0cmFfam91cm5hbC9leHBlY3QuMQpAQCAtMCwwICsxLDIzIEBACitTdXBlcmJsb2NrIGhhc19qb3VybmFsIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIGpvdXJuYWwgaXMgcHJlc2VudC4KK0NsZWFyPyB5ZXMKKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitKb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgQ2xlYXI/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0oNTAtLTEwNzkpCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDk2OCwgY291bnRlZD0xOTk4KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg5NjgsIGNvdW50ZWQ9MTk5OCkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDUwLzIwNDggYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2V4dHJhX2pvdXJuYWwvZXhwZWN0LjIgYi90ZXN0cy9mX2V4dHJhX2pvdXJuYWwvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0YTEyMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZXh0cmFfam91cm5hbC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDUwLzIwNDggYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2V4dHJhX2pvdXJuYWwvaW1hZ2UuZ3ogYi90ZXN0cy9mX2V4dHJhX2pvdXJuYWwvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzOTYxOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZXh0cmFfam91cm5hbC9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2V4dHJhX2pvdXJuYWwvbmFtZSBiL3Rlc3RzL2ZfZXh0cmFfam91cm5hbC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NTQwZTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2V4dHJhX2pvdXJuYWwvbmFtZQpAQCAtMCwwICsxIEBACitWYWxpZCBqb3VybmFsIGlub2RlLCBidXQgaGFzX2pvdXJuYWwgZmVhdHVyZSBub3QgcHJlc2VudApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9mYXN0X3N5bWxpbmtfZXh0ZW50cy9leHBlY3QuMSBiL3Rlc3RzL2ZfZmFzdF9zeW1saW5rX2V4dGVudHMvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMxNmM5NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZmFzdF9zeW1saW5rX2V4dGVudHMvZXhwZWN0LjEKQEAgLTAsMCArMSwxMSBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitGYXN0IHN5bWxpbmsgMTMgaGFzIEVYVEVOVF9GTCBzZXQuICBDbGVhcj8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMy8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIxLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZmFzdF9zeW1saW5rX2V4dGVudHMvZXhwZWN0LjIgYi90ZXN0cy9mX2Zhc3Rfc3ltbGlua19leHRlbnRzL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNmY0OWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2Zhc3Rfc3ltbGlua19leHRlbnRzL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTMvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2Zhc3Rfc3ltbGlua19leHRlbnRzL2ltYWdlLmd6IGIvdGVzdHMvZl9mYXN0X3N5bWxpbmtfZXh0ZW50cy9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2ViMGFmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9mYXN0X3N5bWxpbmtfZXh0ZW50cy9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2Zhc3Rfc3ltbGlua19leHRlbnRzL25hbWUgYi90ZXN0cy9mX2Zhc3Rfc3ltbGlua19leHRlbnRzL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzY2I1MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZmFzdF9zeW1saW5rX2V4dGVudHMvbmFtZQpAQCAtMCwwICsxIEBACitmYXN0IHN5bWxpbmsgd2l0aCBleHRlbnRzIGZsYWcgc2V0CmRpZmYgLS1naXQgYS90ZXN0cy9mX2ZpbGVfYWNsX2hpZ2gvZXhwZWN0LjEgYi90ZXN0cy9mX2ZpbGVfYWNsX2hpZ2gvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRkNmUwNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZmlsZV9hY2xfaGlnaC9leHBlY3QuMQpAQCAtMCwwICsxLDEyIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQoraV9maWxlX2FjbF9oaSBmb3IgaW5vZGUgMTIgKC9tb3RkKSBpcyAyLCBzaG91bGQgYmUgemVyby4KK0NsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMi8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIyLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZmlsZV9hY2xfaGlnaC9leHBlY3QuMiBiL3Rlc3RzL2ZfZmlsZV9hY2xfaGlnaC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzU0NzZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9maWxlX2FjbF9oaWdoL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTIvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMi8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2ZpbGVfYWNsX2hpZ2gvaW1hZ2UuZ3ogYi90ZXN0cy9mX2ZpbGVfYWNsX2hpZ2gvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM0MmQ1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZmlsZV9hY2xfaGlnaC9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2ZpbGVfYWNsX2hpZ2gvbmFtZSBiL3Rlc3RzL2ZfZmlsZV9hY2xfaGlnaC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNTRiMDYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2ZpbGVfYWNsX2hpZ2gvbmFtZQpAQCAtMCwwICsxIEBACitpX2ZpbGVfYWNsX2hpZ2ggc2hvdWxkIGJlIHplcm8KZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZmlsZXR5cGUvZXhwZWN0LjEgYi90ZXN0cy9mX2ZpbGV0eXBlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MjRiZmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2ZpbGV0eXBlL2V4cGVjdC4xCkBAIC0wLDAgKzEsNDkgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlIDE0KSBoYXMgaW1tdXRhYmxlCitvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIENsZWFyPyB5ZXMKKworU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlIDE1KSBoYXMgaW1tdXRhYmxlCitvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIENsZWFyPyB5ZXMKKworU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlIDE2KSBoYXMgaW1tdXRhYmxlCitvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIENsZWFyPyB5ZXMKKworU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlIDE3KSBoYXMgaW1tdXRhYmxlCitvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIENsZWFyPyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnLicgaW4gLyAoMikgdG8gMi4KK1NldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICcuLicgaW4gLyAoMikgdG8gMi4KK1NldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICdsb3N0K2ZvdW5kJyBpbiAvICgyKSB0byAyLgorU2V0dGluZyBmaWxldHlwZSBmb3IgZW50cnkgJ2ZpbGUnIGluIC8gKDIpIHRvIDEuCitTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnZGlyJyBpbiAvICgyKSB0byAyLgorU2V0dGluZyBmaWxldHlwZSBmb3IgZW50cnkgJ2ZpZm8nIGluIC8gKDIpIHRvIDUuCitTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnYmxvY2snIGluIC8gKDIpIHRvIDQuCitTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnY2hhcicgaW4gLyAoMikgdG8gMy4KK1NldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICdzeW1saW5rJyBpbiAvICgyKSB0byA3LgorSW5vZGUgMTggKC9iYWRjaGFyKSBpcyBhbiBpbGxlZ2FsIGNoYXJhY3RlciBkZXZpY2UuCitDbGVhcj8geWVzCisKK0lub2RlIDE5ICgvYmFkYmxvY2spIGlzIGFuIGlsbGVnYWwgYmxvY2sgZGV2aWNlLgorQ2xlYXI/IHllcworCitJbm9kZSAyMCAoL2JhZGZpZm8pIGlzIGFuIGlsbGVnYWwgRklGTy4KK0NsZWFyPyB5ZXMKKworU2V0dGluZyBmaWxldHlwZSBmb3IgZW50cnkgJy4nIGluIC9sb3N0K2ZvdW5kICgxMSkgdG8gMi4KK1NldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICcuLicgaW4gL2xvc3QrZm91bmQgKDExKSB0byAyLgorU2V0dGluZyBmaWxldHlwZSBmb3IgZW50cnkgJy4nIGluIC9kaXIgKDEzKSB0byAyLgorU2V0dGluZyBmaWxldHlwZSBmb3IgZW50cnkgJy4uJyBpbiAvZGlyICgxMykgdG8gMi4KK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNTAsIGNvdW50ZWQ9NDcpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDUwLCBjb3VudGVkPTQ3KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTcvNjQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNy8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2ZpbGV0eXBlL2V4cGVjdC4yIGIvdGVzdHMvZl9maWxldHlwZS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODY4MWFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9maWxldHlwZS9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE3LzY0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjcvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9maWxldHlwZS9pbWFnZS5neiBiL3Rlc3RzL2ZfZmlsZXR5cGUvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwYjJlYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZmlsZXR5cGUvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9maWxldHlwZS9uYW1lIGIvdGVzdHMvZl9maWxldHlwZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDIxZjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2ZpbGV0eXBlL25hbWUKQEAgLTAsMCArMSBAQAorc2V0IGZpbGV0eXBlIGluZm9ybWF0aW9uIGFuZCBpbGxlZ2FsIHNwZWNpYWwgZmlsZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZmlyc3RfbWV0YV9iZ190b29fYmlnL2V4cGVjdC4xIGIvdGVzdHMvZl9maXJzdF9tZXRhX2JnX3Rvb19iaWcvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU3ODZiZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZmlyc3RfbWV0YV9iZ190b29fYmlnL2V4cGVjdC4xCkBAIC0wLDAgKzEsMjAgQEAKK0ZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZy4gICgyLCBtYXggdmFsdWUgMSkuICBDbGVhcj8geWVzCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtMworRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3OSwgY291bnRlZD04MCkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoNzksIGNvdW50ZWQ9ODApLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIwLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZmlyc3RfbWV0YV9iZ190b29fYmlnL2V4cGVjdC4yIGIvdGVzdHMvZl9maXJzdF9tZXRhX2JnX3Rvb19iaWcvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiZmY2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZmlyc3RfbWV0YV9iZ190b29fYmlnL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMC8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2ZpcnN0X21ldGFfYmdfdG9vX2JpZy9pbWFnZS5neiBiL3Rlc3RzL2ZfZmlyc3RfbWV0YV9iZ190b29fYmlnL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNzkzNzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2ZpcnN0X21ldGFfYmdfdG9vX2JpZy9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2ZpcnN0X21ldGFfYmdfdG9vX2JpZy9uYW1lIGIvdGVzdHMvZl9maXJzdF9tZXRhX2JnX3Rvb19iaWcvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2VjOTZkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9maXJzdF9tZXRhX2JnX3Rvb19iaWcvbmFtZQpAQCAtMCwwICsxIEBACitzX2ZpcnN0X21ldGFfYmcgaXMgdG9vIGxhcmdlCmRpZmYgLS1naXQgYS90ZXN0cy9mX2Z1bGxfYmcvZXhwZWN0LjEgYi90ZXN0cy9mX2Z1bGxfYmcvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q1NDUzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZnVsbF9iZy9leHBlY3QuMQpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzM3NDQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA2ODUvNzY5IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9mdWxsX2JnL2V4cGVjdC4yIGIvdGVzdHMvZl9mdWxsX2JnL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNTQ1M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2Z1bGxfYmcvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8zNzQ0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNjg1Lzc2OSBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZnVsbF9iZy9pbWFnZS5neiBiL3Rlc3RzL2ZfZnVsbF9iZy9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmU0MTlkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9mdWxsX2JnL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZnVsbF9iZy9uYW1lIGIvdGVzdHMvZl9mdWxsX2JnL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA2MTRkZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfZnVsbF9iZy9uYW1lCkBAIC0wLDAgKzEgQEAKK2lub2RlIHRhYmxlIGluIGxhc3QgYmxvY2sgb2YgZmlyc3QgYmcKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaF9iYWRub2RlL2V4cGVjdC4xIGIvdGVzdHMvZl9oX2JhZG5vZGUvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyYWRiMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaF9iYWRub2RlL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTggQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxMjkyOTogYmxvY2sgIzUzMSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxMjkyOTogYmxvY2sgIzk5MyByZWZlcmVuY2VkIHR3aWNlCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxMjkyOTogYmxvY2sgIzEwNjEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMTI5Mjk6IGJsb2NrICMxMDYyIGhhcyBpbnZhbGlkIGRlcHRoICgyKQorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMTI5Mjk6IGJsb2NrICMxMDYyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDEyOTI5OiBibG9jayAjMTA2MiBub3QgcmVmZXJlbmNlZAorSW52YWxpZCBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMTI5MjkgKC90ZXN0MikuICBDbGVhciBIVHJlZSBpbmRleD8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3RvcmllcworUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogNDc3MzAvMTAwMTkyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTM1NTEvMzE3NDUgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2hfYmFkbm9kZS9leHBlY3QuMiBiL3Rlc3RzL2ZfaF9iYWRub2RlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZGFkYjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2hfYmFkbm9kZS9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDQ3NzMwLzEwMDE5MiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEzNTUxLzMxNzQ1IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9oX2JhZG5vZGUvaW1hZ2UuZ3ogYi90ZXN0cy9mX2hfYmFkbm9kZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWM0MWRiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9oX2JhZG5vZGUvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9oX2JhZG5vZGUvbmFtZSBiL3Rlc3RzL2ZfaF9iYWRub2RlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwNzdmZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaF9iYWRub2RlL25hbWUKQEAgLTAsMCArMSBAQAoraGFzaCBkaXJlY3Rvcnkgd2l0aCBiYWQgSFRSRUUgbm9kZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaF9iYWRub2RlL3NjcmlwdCBiL3Rlc3RzL2ZfaF9iYWRub2RlL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWZjNmIyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9oX2JhZG5vZGUvc2NyaXB0CkBAIC0wLDAgKzEsNSBAQAoraWYgdGVzdCAiJEhUUkVFInggPSB5eCA7IHRoZW4KKy4gJGNtZF9kaXIvcnVuX2UyZnNjaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaF9iYWRyb290L2V4cGVjdC4xIGIvdGVzdHMvZl9oX2JhZHJvb3QvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhlYmE1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaF9iYWRyb290L2V4cGVjdC4xCkBAIC0wLDAgKzEsNDAgQEAKK0JhY2tpbmcgdXAgam91cm5hbCBpbm9kZSBibG9jayBpbmZvcm1hdGlvbi4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMTMzNDUgaGFzIGFuIGludmFsaWQgcm9vdCBub2RlLgorQ2xlYXIgSFRyZWUgaW5kZXg/IHllcworCitIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjY2ODkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoMjQwKQorQ2xlYXIgSFRyZWUgaW5kZXg/IHllcworCitIVFJFRSBkaXJlY3RvcnkgaW5vZGUgNDAwMzMgaGFzIGFuIGludmFsaWQgcm9vdCBub2RlLgorQ2xlYXIgSFRyZWUgaW5kZXg/IHllcworCitIVFJFRSBkaXJlY3RvcnkgaW5vZGUgNTMzNzcgaGFzIGEgdHJlZSBkZXB0aCAoOCkgd2hpY2ggaXMgdG9vIGJpZworQ2xlYXIgSFRyZWUgaW5kZXg/IHllcworCitIVFJFRSBkaXJlY3RvcnkgaW5vZGUgNjY3MjEgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuCitDbGVhciBIVHJlZSBpbmRleD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgODAwNjU6IGJsb2NrICMwIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZQorQ2xlYXIgSFRyZWUgaW5kZXg/IHllcworCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSA4NjczNzogYmxvY2sgIzAgaGFzIGludmFsaWQgbGltaXQgKDUxMSkKK0NsZWFyIEhUcmVlIGluZGV4PyB5ZXMKKworUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgOTM0MDk6IGJsb2NrICMwIGhhcyBpbnZhbGlkIGNvdW50ICgyMzQpCitDbGVhciBIVHJlZSBpbmRleD8geWVzCisKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDczMzkzOiBibG9jayAjMSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSA3MzM5MzogYmxvY2sgIzIgaGFzIGJhZCBtYXggaGFzaAorSW52YWxpZCBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgNzMzOTMgKC90ZXN0NikuICBDbGVhciBIVHJlZSBpbmRleD8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3RvcmllcworUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTkyMS8xMDAwODAgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMzY0Ni8xNTM2MSBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaF9iYWRyb290L2V4cGVjdC4yIGIvdGVzdHMvZl9oX2JhZHJvb3QvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU3NzJjMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaF9iYWRyb290L2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTkyMS8xMDAwODAgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMzY0Ni8xNTM2MSBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaF9iYWRyb290L2ltYWdlLmd6IGIvdGVzdHMvZl9oX2JhZHJvb3QvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE2MGNkNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaF9iYWRyb290L2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaF9iYWRyb290L25hbWUgYi90ZXN0cy9mX2hfYmFkcm9vdC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYWM3ZmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2hfYmFkcm9vdC9uYW1lCkBAIC0wLDAgKzEgQEAKK2JhZCBodHJlZSByb290IG5vZGVzCmRpZmYgLS1naXQgYS90ZXN0cy9mX2hfYmFkcm9vdC9zY3JpcHQgYi90ZXN0cy9mX2hfYmFkcm9vdC9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmYzZiMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaF9iYWRyb290L3NjcmlwdApAQCAtMCwwICsxLDUgQEAKK2lmIHRlc3QgIiRIVFJFRSJ4ID0geXggOyB0aGVuCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKK2Vsc2UKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpCmRpZmYgLS1naXQgYS90ZXN0cy9mX2hfbm9ybWFsL2V4cGVjdC4xIGIvdGVzdHMvZl9oX25vcm1hbC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjc1NzlkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9oX25vcm1hbC9leHBlY3QuMQpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDQ3NzMwLzEwMDE5MiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEzMzc4LzMxNzQ1IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9oX25vcm1hbC9leHBlY3QuMiBiL3Rlc3RzL2ZfaF9ub3JtYWwvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3NTc5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaF9ub3JtYWwvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiA0NzczMC8xMDAxOTIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMzM3OC8zMTc0NSBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaF9ub3JtYWwvaW1hZ2UuZ3ogYi90ZXN0cy9mX2hfbm9ybWFsL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNGRhZWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2hfbm9ybWFsL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaF9ub3JtYWwvbmFtZSBiL3Rlc3RzL2ZfaF9ub3JtYWwvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTkwZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9oX25vcm1hbC9uYW1lCkBAIC0wLDAgKzEgQEAKK05vcm1hbCAoc2lnbmVkKSBIVFJFRSBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaF9ub3JtYWwvc2NyaXB0IGIvdGVzdHMvZl9oX25vcm1hbC9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmYzZiMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaF9ub3JtYWwvc2NyaXB0CkBAIC0wLDAgKzEsNSBAQAoraWYgdGVzdCAiJEhUUkVFInggPSB5eCA7IHRoZW4KKy4gJGNtZF9kaXIvcnVuX2UyZnNjaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaF9yZWluZGV4L2V4cGVjdC4xIGIvdGVzdHMvZl9oX3JlaW5kZXgvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjg4NzIzOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaF9yZWluZGV4L2V4cGVjdC4xCkBAIC0wLDAgKzEsOTU4IEBACitCYWNraW5nIHVwIGpvdXJuYWwgaW5vZGUgYmxvY2sgaW5mb3JtYXRpb24uCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxNjAwMTogYmxvY2sgIzEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMTYwMDE6IGJsb2NrICMyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDE2MDAxOiBibG9jayAjMiBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxNjAwMTogYmxvY2sgIzMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMTYwMDE6IGJsb2NrICMzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDE2MDAxOiBibG9jayAjNCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxNjAwMTogYmxvY2sgIzQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMTYwMDE6IGJsb2NrICM1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDE2MDAxOiBibG9jayAjNSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxNjAwMTogYmxvY2sgIzYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMTYwMDE6IGJsb2NrICM2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDE2MDAxOiBibG9jayAjNyBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxNjAwMTogYmxvY2sgIzcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMTYwMDE6IGJsb2NrICM4IGhhcyBiYWQgbWluIGhhc2gKK0ludmFsaWQgSFRSRUUgZGlyZWN0b3J5IGlub2RlIDE2MDAxICgvdGVzdCkuICBDbGVhciBIVHJlZSBpbmRleD8geWVzCisKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMyBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNyBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjOSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzEwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMiBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzEyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMyBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzE0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzE1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNiBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzE3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzE4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzIwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzIxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMiBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzIzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzI0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzI2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNyBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzI3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzI5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzMwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzMyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMyBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzMzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzM1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNiBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzM2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNyBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzM4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzM5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzQxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MiBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzQyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MyBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzQ0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzQ1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NiBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzQ3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0OCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzQ4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0OSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzUwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNTAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM1MSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzUxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNTIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM1MiBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzUzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNTMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM1NCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzU0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNTUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM1NSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzU2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNTYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM1NyBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzU3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNTggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM1OCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzU5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNTkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM2MCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzYwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNjEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM2MSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzYyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNjIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM2MyBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzYzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNjQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM2NCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzY1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNjUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM2NiBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzY2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNjcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM2NyBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzY4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNjggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM2OSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzY5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNzAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM3MCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzcxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNzEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM3MiBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzcyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNzMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM3MyBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzc0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNzQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM3NSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzc1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNzYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM3NiBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzc3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNzcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM3OCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzc4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNzkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM3OSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzgwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjODAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM4MSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzgxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjODIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM4MiBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzgzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjODMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM4NCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzg0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjODUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM4NSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzg2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjODYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM4NyBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzg3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjODggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM4OCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzg5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjODkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM5MCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzkwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjOTEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM5MSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzkyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjOTIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM5MyBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzkzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjOTQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM5NCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzk1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjOTUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM5NiBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzk2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjOTcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM5NyBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzk4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjOTggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM5OSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzk5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTAwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTAwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTAxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTAxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTAyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTAyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTAzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTAzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTA0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTA0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTA1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTA1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTA2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTA2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTA3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTA3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTA4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTA4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTA5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTA5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTEwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTEwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTExIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTExIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTEyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTEyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTEzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTEzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTE0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTE0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTE1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTE1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTE2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTE2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTE3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTE3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTE4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTE4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTE5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTE5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTIwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTIwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTIxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTIxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTIyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTIyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTIzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTIzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTI0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTI0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTI1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTI1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTI2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTI2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTI3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTI4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTI5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTI5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTMwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTMwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTMxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTMxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTMyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTMyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTMzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTMzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTM0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTM0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTM1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTM1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTM2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTM2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTM3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTM3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTM4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTM4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTM5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTM5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQ0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQ0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQ1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQ1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQ2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQ2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQ3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQ3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQ4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQ4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQ5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQ5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTUwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTUwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTUxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTUxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTUyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTUyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTUzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTUzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTU0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTU0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTU1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTU1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTU2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTU2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTU3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTU3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTU4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTU4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTU5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTU5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTYwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTYwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTYxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTYxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTYyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTYyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTYzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTYzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTY0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTY0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTY1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTY1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTY2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTY2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTY3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTY3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTY4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTY4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTY5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTY5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTcwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTcwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTcxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTcxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTcyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTcyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTczIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTczIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTc0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTc0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTc1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTc1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTc2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTc2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTc3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTc3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTc4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTc4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTc5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTc5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTgwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTgwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTgxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTgxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTgyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTgyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTgzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTgzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTg0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTg0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTg1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTg1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTg2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTg2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTg3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTg3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTg4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTg4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTg5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTg5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTkwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTkwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTkxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTkxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTkyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTkyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTkzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTkzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTk0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTk0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTk1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTk1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTk2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTk2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTk3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTk3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTk4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTk4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTk5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTk5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjAwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjAwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjAxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjAxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjAyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjAyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjAzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjAzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjA0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjA0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjA1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjA1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjA2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjA2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjA3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjA3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjA4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjA4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjA5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjA5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjEwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjEwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjExIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjExIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjEyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjEyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjEzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjEzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjE0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjE0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjE1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjE1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjE2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjE2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjE3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjE3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjE4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjE4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjE5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjE5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjIwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjIwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjIxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjIxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjIyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjIyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjIzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjIzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjI0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjI0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjI1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjI1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjI2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjI2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjI3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjI3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjI4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjI4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjI5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjI5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjMwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjMwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjMxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjMxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjMyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjMyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjMzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjMzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjM0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjM0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjM1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjM1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjM2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjM2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjM3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjM3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjM4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjM4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjM5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjM5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQ0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQ0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQ1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQ1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQ2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQ2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQ3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQ3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQ4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQ4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQ5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQ5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjUwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjUwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjUxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjUxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjUyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjUyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjUzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjUzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjU0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjU1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjU2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjU2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjU3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjU3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjU4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjU4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjU5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjU5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjYwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjYwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjYxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjYxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjYyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjYyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjYzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjYzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjY0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjY0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjY1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjY1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjY2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjY2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjY3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjY3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjY4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjY4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjY5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjY5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjcwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjcwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjcxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjcxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjcyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjcyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjczIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjczIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjc0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjc0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjc1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjc1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjc2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjc2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjc3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjc3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjc4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjc4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjc5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjc5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjgwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjgwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjgxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjgxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjgyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjgyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjgzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjgzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjg0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjg0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjg1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjg1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjg2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjg2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjg3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjg3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjg4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjg4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjg5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjg5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjkwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjkwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjkxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjkxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjkyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjkyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjkzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjkzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjk0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjk0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjk1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjk1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjk2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjk2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjk3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjk3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjk4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjk4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjk5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjk5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzAwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzAwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzAxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzAxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzAyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzAyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzAzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzAzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzA0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzA0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzA1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzA1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzA2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzA2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzA3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzA3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzA4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzA4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzA5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzA5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzEwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzEwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzExIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzExIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzEyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzEyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzEzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzEzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzE0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzE0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzE1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzE1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzE2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzE2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzE3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzE3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzE4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzE4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzE5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzE5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzIwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzIwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzIxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzIxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzIyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzIyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzIzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzIzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzI0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzI0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzI1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzI1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzI2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzI2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzI3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzI3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzI4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzI4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzI5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzI5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzMwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzMwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzMxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzMxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzMyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzMyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzMzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzMzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzM0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzM0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzM1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzM1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzM2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzM2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzM3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzM3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzM4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzM4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzM5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzM5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQ0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQ0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQ1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQ1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQ2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQ2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQ3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQ3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQ4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQ4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQ5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzQ5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzUwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzUwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzUxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzUxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzUyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzUyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzUzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzUzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzU0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzU0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzU1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzU1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzU2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzU2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzU3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzU3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzU4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzU4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzU5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzU5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzYwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzYwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzYxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzYxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzYyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzYyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzYzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzYzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzY0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzY0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzY1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzY1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzY2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzY2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzY3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzY3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzY4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzY4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzY5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzY5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzcwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzcwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzcxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzcxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzcyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzcyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzczIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzczIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzc0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzc0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzc1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzc1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzc2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzc2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzc3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzc3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzc4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzc4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzc5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzc5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzgwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzgwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzgxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzgyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzgzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzgzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzg0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzg0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzg1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzg1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzg2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzg2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzg3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzg3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzg4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzg4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzg5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzg5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzkwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzkwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzkxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzkxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzkyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzkyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzkzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzkzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzk0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzk0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzk1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzk1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzk2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzk2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzk3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzk3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzk4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzk4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzk5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzk5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDAwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDAwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDAxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDAxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDAyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDAyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDAzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDAzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDA0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDA0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDA1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDA1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDA2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDA2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDA3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDA3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDA4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDA4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDA5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDA5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDEwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDEwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDExIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDExIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDEyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDEyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDEzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDEzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDE0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDE0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDE1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDE1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDE2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDE2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDE3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDE3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDE4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDE4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDE5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDE5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDIwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDIwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDIxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDIxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDIyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDIyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDIzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDIzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDI0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDI0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDI1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDI1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDI2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDI2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDI3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDI3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDI4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDI4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDI5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDI5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDMwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDMwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDMxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDMxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDMyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDMyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDMzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDMzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDM0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDM0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDM1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDM1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDM2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDM2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDM3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDM3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDM4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDM4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDM5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDM5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQ0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQ0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQ1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQ1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQ2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQ2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQ3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQ3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQ4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQ4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQ5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQ5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDUwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDUwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDUxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDUxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDUyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDUyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDUzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDUzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDU0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDU0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDU1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDU1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDU2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDU3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDU3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDU4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDU4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDU5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDU5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDYwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDYwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDYxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDYxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDYyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDYzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDYzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDY0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDY0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDY1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDY2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDY2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDY3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDY4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDY4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDY5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDcwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDcxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDcxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDcyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDcyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDczIGhhcyBiYWQgbWluIGhhc2gKK0ludmFsaWQgSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxICgvdGVzdDIpLiAgQ2xlYXIgSFRyZWUgaW5kZXg/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgM0E6IE9wdGltaXppbmcgZGlyZWN0b3JpZXMKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDMwNTE0LzMyMDAwIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNTY2OS84MDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9oX3JlaW5kZXgvZXhwZWN0LjIgYi90ZXN0cy9mX2hfcmVpbmRleC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Zjc4NWFmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9oX3JlaW5kZXgvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAzMDUxNC8zMjAwMCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDU2NjkvODAwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaF9yZWluZGV4L2ltYWdlLmd6IGIvdGVzdHMvZl9oX3JlaW5kZXgvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFhZTcyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaF9yZWluZGV4L2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaF9yZWluZGV4L25hbWUgYi90ZXN0cy9mX2hfcmVpbmRleC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNDYyNWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2hfcmVpbmRleC9uYW1lCkBAIC0wLDAgKzEgQEAKK3JlaW5kZXggSFRSRUUgRGlyZWN0b3J5IHdpdGggZGlmZmVyZW50IGhhc2ggc2VlZApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9oX3JlaW5kZXgvc2NyaXB0IGIvdGVzdHMvZl9oX3JlaW5kZXgvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZmM2YjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2hfcmVpbmRleC9zY3JpcHQKQEAgLTAsMCArMSw1IEBACitpZiB0ZXN0ICIkSFRSRUUieCA9IHl4IDsgdGhlbgorLiAkY21kX2Rpci9ydW5fZTJmc2NrCitlbHNlCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9oX3Vuc2lnbmVkL2V4cGVjdC4xIGIvdGVzdHMvZl9oX3Vuc2lnbmVkL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNzU3OWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2hfdW5zaWduZWQvZXhwZWN0LjEKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiA0NzczMC8xMDAxOTIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMzM3OC8zMTc0NSBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaF91bnNpZ25lZC9leHBlY3QuMiBiL3Rlc3RzL2ZfaF91bnNpZ25lZC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjc1NzlkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9oX3Vuc2lnbmVkL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogNDc3MzAvMTAwMTkyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTMzNzgvMzE3NDUgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2hfdW5zaWduZWQvaW1hZ2UuZ3ogYi90ZXN0cy9mX2hfdW5zaWduZWQvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FmOWM4NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaF91bnNpZ25lZC9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2hfdW5zaWduZWQvbmFtZSBiL3Rlc3RzL2ZfaF91bnNpZ25lZC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MDY5NTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2hfdW5zaWduZWQvbmFtZQpAQCAtMCwwICsxIEBACitVbnNpZ25lZCBIVFJFRSBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaF91bnNpZ25lZC9zY3JpcHQgYi90ZXN0cy9mX2hfdW5zaWduZWQvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZmM2YjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2hfdW5zaWduZWQvc2NyaXB0CkBAIC0wLDAgKzEsNSBAQAoraWYgdGVzdCAiJEhUUkVFInggPSB5eCA7IHRoZW4KKy4gJGNtZF9kaXIvcnVuX2UyZnNjaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaG9sZWRpci9leHBlY3QuMSBiL3Rlc3RzL2ZfaG9sZWRpci9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDc0ZmE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9ob2xlZGlyL2V4cGVjdC4xCkBAIC0wLDAgKzEsMzMgQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTEgaGFzIGlsbGVnYWwgYmxvY2socykuICBDbGVhcj8geWVzCisKK0lsbGVnYWwgYmxvY2sgIzYgKDIwMCkgaW4gaW5vZGUgMTEuICBDTEVBUkVELgorSW5vZGUgMTEsIGlfc2l6ZSBpcyAxMjI4OCwgc2hvdWxkIGJlIDExMjY0LiAgRml4PyB5ZXMKKworSW5vZGUgMTEsIGlfYmxvY2tzIGlzIDI0LCBzaG91bGQgYmUgMTYuICBGaXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0RpcmVjdG9yeSBpbm9kZSAxMSBoYXMgYW4gdW5hbGxvY2F0ZWQgYmxvY2sgIzAuICBBbGxvY2F0ZT8geWVzCisKK0RpcmVjdG9yeSBpbm9kZSAxMSBoYXMgYW4gdW5hbGxvY2F0ZWQgYmxvY2sgIzMuICBBbGxvY2F0ZT8geWVzCisKK0RpcmVjdG9yeSBpbm9kZSAxMSBoYXMgYW4gdW5hbGxvY2F0ZWQgYmxvY2sgIzYuICBBbGxvY2F0ZT8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0yMQorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3OCwgY291bnRlZD03OSkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoNzgsIGNvdW50ZWQ9NzkpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoOS4xJSBub24tY29udGlndW91cyksIDIxLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaG9sZWRpci9leHBlY3QuMiBiL3Rlc3RzL2ZfaG9sZWRpci9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzBiNGYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9ob2xlZGlyL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2hvbGVkaXIvaW1hZ2UuZ3ogYi90ZXN0cy9mX2hvbGVkaXIvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyNmFiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaG9sZWRpci9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2hvbGVkaXIvbmFtZSBiL3Rlc3RzL2ZfaG9sZWRpci9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMWY2NTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2hvbGVkaXIvbmFtZQpAQCAtMCwwICsxIEBACitkaXJlY3Rvcnkgd2l0aCBob2xlcyBhbmQgaWxsZWdhbCBibG9ja3MKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaG9sZWRpcjIvZXhwZWN0LjEgYi90ZXN0cy9mX2hvbGVkaXIyL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NWY0YjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2hvbGVkaXIyL2V4cGVjdC4xCkBAIC0wLDAgKzEsMjIgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTIsIGlfc2l6ZSBpcyAwLCBzaG91bGQgYmUgNTEyMC4gIEZpeD8geWVzCisKK0RpcmVjdG9yeSBpbm9kZSAxMyBibG9jayAyIHNob3VsZCBiZSBhdCBibG9jayAxLiAgRml4PyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitEaXJlY3RvcnkgaW5vZGUgMTIgaGFzIGFuIHVuYWxsb2NhdGVkIGJsb2NrICMzLiAgQWxsb2NhdGU/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgM0E6IE9wdGltaXppbmcgZGlyZWN0b3JpZXMKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDc4LCBjb3VudGVkPTc3KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3OCwgY291bnRlZD03NykuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEzLzE2IGZpbGVzICg3LjclIG5vbi1jb250aWd1b3VzKSwgMjMvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9ob2xlZGlyMi9leHBlY3QuMiBiL3Rlc3RzL2ZfaG9sZWRpcjIvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM2YzZlOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaG9sZWRpcjIvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMy8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIzLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaG9sZWRpcjIvaW1hZ2UuZ3ogYi90ZXN0cy9mX2hvbGVkaXIyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZGRhMDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2hvbGVkaXIyL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaG9sZWRpcjIvbmFtZSBiL3Rlc3RzL2ZfaG9sZWRpcjIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzE1M2YzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9ob2xlZGlyMi9uYW1lCkBAIC0wLDAgKzEsMiBAQAorZGlyZWN0b3JpZXMgd2l0aCBob2xlcyBhbmQgemVybyBpX3NpemUKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9ob2xlZGlyMy9leHBlY3QuMSBiL3Rlc3RzL2ZfaG9sZWRpcjMvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0Y2E2YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaG9sZWRpcjMvZXhwZWN0LjEKQEAgLTAsMCArMSwxMyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitEaXJlY3RvcnkgaW5vZGUgMTIgYmxvY2sgNSBzaG91bGQgYmUgYXQgYmxvY2sgMi4gIEZpeD8geWVzCisKK0lub2RlIDEyLCBpX3NpemUgaXMgNjE0NCwgc2hvdWxkIGJlIDMwNzIuICBGaXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTcvMTI4IGZpbGVzICg1LjklIG5vbi1jb250aWd1b3VzKSwgMTA5My8yMDQ4IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9ob2xlZGlyMy9leHBlY3QuMiBiL3Rlc3RzL2ZfaG9sZWRpcjMvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY3NWU2ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaG9sZWRpcjMvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNy8xMjggZmlsZXMgKDUuOSUgbm9uLWNvbnRpZ3VvdXMpLCAxMDkzLzIwNDggYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2hvbGVkaXIzL2ltYWdlLmd6IGIvdGVzdHMvZl9ob2xlZGlyMy9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWVlYjM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9ob2xlZGlyMy9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2hvbGVkaXIzL25hbWUgYi90ZXN0cy9mX2hvbGVkaXIzL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUyNjc4NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaG9sZWRpcjMvbmFtZQpAQCAtMCwwICsxLDIgQEAKK3JlYWwgZGlyZWN0b3JpZXMgd2l0aCBob2xlcyBhbmQgemVybyBpX3NpemUKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9odWdlZGlyX2Jsb2Nrcy9leHBlY3QuMSBiL3Rlc3RzL2ZfaHVnZWRpcl9ibG9ja3MvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk4YTdhYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaHVnZWRpcl9ibG9ja3MvZXhwZWN0LjEKQEAgLTAsMCArMSwxMCBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxMiBpcyB0b28gYmlnLiAgVHJ1bmNhdGU/IHllcworCitCbG9jayAjMTA3NDc5MTQzNSAoMTMpIGNhdXNlcyBkaXJlY3RvcnkgdG8gYmUgdG9vIGJpZy4gIENMRUFSRUQuCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTIvMTI4IGZpbGVzICg4LjMlIG5vbi1jb250aWd1b3VzKSwgMjIvNTEyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9odWdlZGlyX2Jsb2Nrcy9leHBlY3QuMiBiL3Rlc3RzL2ZfaHVnZWRpcl9ibG9ja3MvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1ZjRjMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaHVnZWRpcl9ibG9ja3MvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8xMjggZmlsZXMgKDguMyUgbm9uLWNvbnRpZ3VvdXMpLCAyMi81MTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2h1Z2VkaXJfYmxvY2tzL2ltYWdlLmd6IGIvdGVzdHMvZl9odWdlZGlyX2Jsb2Nrcy9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDU0ZGU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9odWdlZGlyX2Jsb2Nrcy9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2h1Z2VkaXJfYmxvY2tzL25hbWUgYi90ZXN0cy9mX2h1Z2VkaXJfYmxvY2tzL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc0NzYxYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaHVnZWRpcl9ibG9ja3MvbmFtZQpAQCAtMCwwICsxIEBACitjcmFzaCBlMmZzY2sgd2l0aCBhIGRpciB3aXRoIGFuIGltcG9zc2libHkgaGlnaCBsb2dpY2FsIGJsayBvZmZzZXQKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaHVyZC9leHBlY3QuMSBiL3Rlc3RzL2ZfaHVyZC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2JmYzU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9odXJkL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTIgQEAKK1RoZSBIdXJkIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZlYXR1cmUuCitDbGVhcj8geWVzCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjAvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9odXJkL2V4cGVjdC4yIGIvdGVzdHMvZl9odXJkL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YmZmNjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2h1cmQvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIwLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaHVyZC9pbWFnZS5neiBiL3Rlc3RzL2ZfaHVyZC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGZmZTBjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9odXJkL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaHVyZC9uYW1lIGIvdGVzdHMvZl9odXJkL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY5Mjk4NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaHVyZC9uYW1lCkBAIC0wLDAgKzEgQEAKK0dOVS9IdXJkIHNwZWNpZmljIHRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9mX2lsbGJiaXRtYXAvZXhwZWN0LjEgYi90ZXN0cy9mX2lsbGJiaXRtYXAvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc0NmQyMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaWxsYmJpdG1hcC9leHBlY3QuMQpAQCAtMCwwICsxLDI4IEBACitleHQyZnNfY2hlY2tfZGVzYzogQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGJsb2NrIGJpdG1hcAorTm90ZTogaWYgc2V2ZXJhbCBpbm9kZSBvciBibG9jayBiaXRtYXAgYmxvY2tzIG9yIHBhcnQKK29mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnkKK3J1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiA4MTkzJyBvcHRpb24gZmlyc3QuICBUaGUgcHJvYmxlbQorbWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZAordGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suCisKK0Jsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgMCBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgNDA5NikKK1JlbG9jYXRlPyB5ZXMKKworRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitSZWxvY2F0aW5nIGdyb3VwIDAncyBibG9jayBiaXRtYXAgdG8gNC4uLgorUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICArKDEtLTIxKQorRml4PyB5ZXMKKworSW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzOiAgLSgxMi0tMjEpCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjIvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9pbGxiYml0bWFwL2V4cGVjdC4yIGIvdGVzdHMvZl9pbGxiYml0bWFwL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MjFmODcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2lsbGJiaXRtYXAvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIyLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaWxsYmJpdG1hcC9pbWFnZS5neiBiL3Rlc3RzL2ZfaWxsYmJpdG1hcC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjE2ZWJjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9pbGxiYml0bWFwL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaWxsYmJpdG1hcC9uYW1lIGIvdGVzdHMvZl9pbGxiYml0bWFwL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkNGY1OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaWxsYmJpdG1hcC9uYW1lCkBAIC0wLDAgKzEgQEAKK2lsbGVnYWwgYmxvY2sgYml0bWFwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2lsbGliaXRtYXAvZXhwZWN0LjEgYi90ZXN0cy9mX2lsbGliaXRtYXAvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJhZTI1ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaWxsaWJpdG1hcC9leHBlY3QuMQpAQCAtMCwwICsxLDI1IEBACitleHQyZnNfY2hlY2tfZGVzYzogQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIGJpdG1hcAorTm90ZTogaWYgc2V2ZXJhbCBpbm9kZSBvciBibG9jayBiaXRtYXAgYmxvY2tzIG9yIHBhcnQKK29mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnkKK3J1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiA4MTkzJyBvcHRpb24gZmlyc3QuICBUaGUgcHJvYmxlbQorbWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZAordGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suCisKK0lub2RlIGJpdG1hcCBmb3IgZ3JvdXAgMCBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgNDAwMCkKK1JlbG9jYXRlPyB5ZXMKKworRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitSZWxvY2F0aW5nIGdyb3VwIDAncyBpbm9kZSBiaXRtYXAgdG8gNC4uLgorUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitJbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6ICArKDEtLTExKQorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIyLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaWxsaWJpdG1hcC9leHBlY3QuMiBiL3Rlc3RzL2ZfaWxsaWJpdG1hcC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODIxZjg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9pbGxpYml0bWFwL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMi8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2lsbGliaXRtYXAvaW1hZ2UuZ3ogYi90ZXN0cy9mX2lsbGliaXRtYXAvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwODkyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaWxsaWJpdG1hcC9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2lsbGliaXRtYXAvbmFtZSBiL3Rlc3RzL2ZfaWxsaWJpdG1hcC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYzQwMDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2lsbGliaXRtYXAvbmFtZQpAQCAtMCwwICsxIEBACitpbGxlZ2FsIGlub2RlIGJpdG1hcApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9pbGxpdGFibGUvZXhwZWN0LjEgYi90ZXN0cy9mX2lsbGl0YWJsZS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWE1Njg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9pbGxpdGFibGUvZXhwZWN0LjEKQEAgLTAsMCArMSw0OSBAQAorZXh0MmZzX2NoZWNrX2Rlc2M6IENvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSB0YWJsZQorTm90ZTogaWYgc2V2ZXJhbCBpbm9kZSBvciBibG9jayBiaXRtYXAgYmxvY2tzIG9yIHBhcnQKK29mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnkKK3J1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiA4MTkzJyBvcHRpb24gZmlyc3QuICBUaGUgcHJvYmxlbQorbWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZAordGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suCisKK0lub2RlIHRhYmxlIGZvciBncm91cCAwIGlzIG5vdCBpbiBncm91cC4gIChibG9jayA0MDAwMCkKK1dBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuCitSZWxvY2F0ZT8geWVzCisKKy4uL2UyZnNjay9lMmZzY2s6IEEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSB3aGlsZSByZWFkaW5nIGJhZCBibG9ja3MgaW5vZGUKK1RoaXMgZG9lc24ndCBib2RlIHdlbGwsIGJ1dCB3ZSdsbCB0cnkgdG8gZ28gb24uLi4KK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUmVsb2NhdGluZyBncm91cCAwJ3MgaW5vZGUgdGFibGUgdG8gNy4uLgorUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Jvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5LiAgQ2xlYXI/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkLiAgQWxsb2NhdGU/IHllcworCisvbG9zdCtmb3VuZCBub3QgZm91bmQuICBDcmVhdGU/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLSgxMS0tMjEpCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDc3LCBjb3VudGVkPTg5KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3NywgY291bnRlZD04OSkuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDIwLCBjb3VudGVkPTIxKS4KK0ZpeD8geWVzCisKK0RpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMywgY291bnRlZD0yKS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nICgyMCwgY291bnRlZD0yMSkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTEvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9pbGxpdGFibGUvZXhwZWN0LjIgYi90ZXN0cy9mX2lsbGl0YWJsZS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWFkNWNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9pbGxpdGFibGUvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDExLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaWxsaXRhYmxlL2ltYWdlLmd6IGIvdGVzdHMvZl9pbGxpdGFibGUvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwMjE5NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaWxsaXRhYmxlL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaWxsaXRhYmxlL25hbWUgYi90ZXN0cy9mX2lsbGl0YWJsZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMWU3M2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2lsbGl0YWJsZS9uYW1lCkBAIC0wLDAgKzEgQEAKK2lsbGVnYWwgaW5vZGUgdGFibGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaWxsaXRhYmxlX2ZsZXhiZy9leHBlY3QuMSBiL3Rlc3RzL2ZfaWxsaXRhYmxlX2ZsZXhiZy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTQyYTBmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9pbGxpdGFibGVfZmxleGJnL2V4cGVjdC4xCkBAIC0wLDAgKzEsMjQgQEAKK2V4dDJmc19jaGVja19kZXNjOiBDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgdGFibGUKKy4uL2UyZnNjay9lMmZzY2s6IEdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uCitJbm9kZSB0YWJsZSBmb3IgZ3JvdXAgMSBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgMCkKK1dBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuCitSZWxvY2F0ZT8geWVzCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUmVsb2NhdGluZyBncm91cCAxJ3MgaW5vZGUgdGFibGUgdG8gMTQyLi4uCitSZXN0YXJ0aW5nIGUyZnNjayBmcm9tIHRoZSBiZWdpbm5pbmcuLi4KK09uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgRml4PyB5ZXMKKworR3JvdXAgZGVzY3JpcHRvciAxIGNoZWNrc3VtIGlzIDB4MWNlZSwgc2hvdWxkIGJlIDB4ZjgwOS4gIEZJWEVELgorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0lub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogIC0oNjUtLTEyOCkKK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvMjU2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMzExNjMvMzI3NjggYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2lsbGl0YWJsZV9mbGV4YmcvZXhwZWN0LjIgYi90ZXN0cy9mX2lsbGl0YWJsZV9mbGV4YmcvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVmNDNjMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaWxsaXRhYmxlX2ZsZXhiZy9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDMxMTYzLzMyNzY4IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9pbGxpdGFibGVfZmxleGJnL2ltYWdlLmd6IGIvdGVzdHMvZl9pbGxpdGFibGVfZmxleGJnL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdmYTE0NDYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2lsbGl0YWJsZV9mbGV4YmcvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9pbGxpdGFibGVfZmxleGJnL25hbWUgYi90ZXN0cy9mX2lsbGl0YWJsZV9mbGV4YmcvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGIwODUwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9pbGxpdGFibGVfZmxleGJnL25hbWUKQEAgLTAsMCArMSBAQAoraWxsZWdhbCBpbm9kZSB0YWJsZSB3aXRoIEZMRVhfQkcKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaW1hZ2ljL2V4cGVjdC4xIGIvdGVzdHMvZl9pbWFnaWMvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJlZTE5MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaW1hZ2ljL2V4cGVjdC4xCkBAIC0wLDAgKzEsNDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTIgaGFzIGltYWdpYyBmbGFnIHNldC4gIENsZWFyPyB5ZXMKKworSW5vZGUgMTMgaGFzIGltYWdpYyBmbGFnIHNldC4gIENsZWFyPyB5ZXMKKworSW5vZGUgMTQgaGFzIGltYWdpYyBmbGFnIHNldC4gIENsZWFyPyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKKy9sb3N0K2ZvdW5kIG5vdCBmb3VuZC4gIENyZWF0ZT8geWVzCisKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworSW5vZGUgMiByZWYgY291bnQgaXMgNCwgc2hvdWxkIGJlIDMuICBGaXg/IHllcworCitVbmF0dGFjaGVkIGlub2RlIDEyCitDb25uZWN0IHRvIC9sb3N0K2ZvdW5kPyB5ZXMKKworSW5vZGUgMTIgcmVmIGNvdW50IGlzIDIsIHNob3VsZCBiZSAxLiAgRml4PyB5ZXMKKworVW5hdHRhY2hlZCBpbm9kZSAxNAorQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK0lub2RlIDE0IHJlZiBjb3VudCBpcyAyLCBzaG91bGQgYmUgMS4gIEZpeD8geWVzCisKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLSg5LS0xOSkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzUsIGNvdW50ZWQ9ODcpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDc1LCBjb3VudGVkPTg3KS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMSwgY291bnRlZD0yKS4KK0ZpeD8geWVzCisKK0RpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMywgY291bnRlZD0yKS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nICgxLCBjb3VudGVkPTIpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxNC8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEzLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaW1hZ2ljL2V4cGVjdC4yIGIvdGVzdHMvZl9pbWFnaWMvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY0MTFjMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaW1hZ2ljL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTQvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMy8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2ltYWdpYy9pbWFnZS5neiBiL3Rlc3RzL2ZfaW1hZ2ljL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMmIzZmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2ltYWdpYy9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2ltYWdpYy9uYW1lIGIvdGVzdHMvZl9pbWFnaWMvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjk0MDA4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9pbWFnaWMvbmFtZQpAQCAtMCwwICsxIEBACitub24taW1hZ2ljIGZpbGVzeXN0ZW0gd2l0aCBpbWFnaWMgaW5vZGVzCmRpZmYgLS1naXQgYS90ZXN0cy9mX2ltYWdpY19mcy9leHBlY3QuMSBiL3Rlc3RzL2ZfaW1hZ2ljX2ZzL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMWZkMzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2ltYWdpY19mcy9leHBlY3QuMQpAQCAtMCwwICsxLDMxIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CisvbG9zdCtmb3VuZCBub3QgZm91bmQuICBDcmVhdGU/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK0lub2RlIDIgcmVmIGNvdW50IGlzIDQsIHNob3VsZCBiZSAzLiAgRml4PyB5ZXMKKworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDktLTE5KQorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3NSwgY291bnRlZD04NykuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoNzUsIGNvdW50ZWQ9ODcpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgxLCBjb3VudGVkPTIpLgorRml4PyB5ZXMKKworRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgzLCBjb3VudGVkPTIpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDEsIGNvdW50ZWQ9MikuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE0LzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTMvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9pbWFnaWNfZnMvZXhwZWN0LjIgYi90ZXN0cy9mX2ltYWdpY19mcy9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQxMWMwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9pbWFnaWNfZnMvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNC8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEzLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaW1hZ2ljX2ZzL25hbWUgYi90ZXN0cy9mX2ltYWdpY19mcy9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMzY5NzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2ltYWdpY19mcy9uYW1lCkBAIC0wLDAgKzEgQEAKK2ltYWdpYyBmaWxlc3lzdGVtIHdpdGggaW1hZ2ljIGlub2RlcwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9pbWFnaWNfZnMvc2NyaXB0IGIvdGVzdHMvZl9pbWFnaWNfZnMvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNjBmMDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2ltYWdpY19mcy9zY3JpcHQKQEAgLTAsMCArMSw5IEBACitpZiB0ZXN0IC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCitJTUFHRT0kdGVzdF9kaXIvLi4vZl9pbWFnaWMvaW1hZ2UuZ3oKK1BSRVBfQ01EPSckREVCVUdGUyAtdyAtUiAiZmVhdHVyZSBpbWFnaWNfaW5vZGVzIiAkVE1QRklMRSA+IC9kZXYvbnVsbCAyPiYxJworLiAkY21kX2Rpci9ydW5fZTJmc2NrCisKK2Vsc2UgI2lmIHRlc3QgLXggJERFQlVHRlNfRVhFOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaSAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaW52YWxpZF9iYWRfaW5vZGUvZXhwZWN0LjEgYi90ZXN0cy9mX2ludmFsaWRfYmFkX2lub2RlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMzdjYjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2ludmFsaWRfYmFkX2lub2RlL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTEgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworVGhlIGJhZCBibG9jayBpbm9kZSBsb29rcyBpbnZhbGlkLiAgQ2xlYXI/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2ludmFsaWRfYmFkX2lub2RlL2V4cGVjdC4yIGIvdGVzdHMvZl9pbnZhbGlkX2JhZF9pbm9kZS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWNlZWZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9pbnZhbGlkX2JhZF9pbm9kZS9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjEvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9pbnZhbGlkX2JhZF9pbm9kZS9pbWFnZS5neiBiL3Rlc3RzL2ZfaW52YWxpZF9iYWRfaW5vZGUvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRhYzE0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaW52YWxpZF9iYWRfaW5vZGUvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9pbnZhbGlkX2JhZF9pbm9kZS9uYW1lIGIvdGVzdHMvZl9pbnZhbGlkX2JhZF9pbm9kZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ODFlOGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2ludmFsaWRfYmFkX2lub2RlL25hbWUKQEAgLTAsMCArMSBAQAorY2hlY2sgZm9yIGJvZ3VzIGJhZCBpbm9kZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9pbnZhbGlkX2V4dGVudF9zeW1saW5rL2V4cGVjdC4xIGIvdGVzdHMvZl9pbnZhbGlkX2V4dGVudF9zeW1saW5rL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZGEwYjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2ludmFsaWRfZXh0ZW50X3N5bWxpbmsvZXhwZWN0LjEKQEAgLTAsMCArMSwxMiBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1N5bWxpbmsgL2EgKGlub2RlICMxMikgaXMgaW52YWxpZC4KK0NsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS8xNiBmaWxlcyAoOS4xJSBub24tY29udGlndW91cyksIDIxLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfaW52YWxpZF9leHRlbnRfc3ltbGluay9leHBlY3QuMiBiL3Rlc3RzL2ZfaW52YWxpZF9leHRlbnRfc3ltbGluay9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWNlZWZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9pbnZhbGlkX2V4dGVudF9zeW1saW5rL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2ludmFsaWRfZXh0ZW50X3N5bWxpbmsvaW1hZ2UuZ3ogYi90ZXN0cy9mX2ludmFsaWRfZXh0ZW50X3N5bWxpbmsvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRhNmVlZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfaW52YWxpZF9leHRlbnRfc3ltbGluay9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2ludmFsaWRfZXh0ZW50X3N5bWxpbmsvbmFtZSBiL3Rlc3RzL2ZfaW52YWxpZF9leHRlbnRfc3ltbGluay9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OTJhYWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2ludmFsaWRfZXh0ZW50X3N5bWxpbmsvbmFtZQpAQCAtMCwwICsxIEBACitleHRlbnQtbWFwcGVkIHN5bWxpbmsgd2l0aCB0d28gYmxvY2tzCmRpZmYgLS1naXQgYS90ZXN0cy9mX2pubF8zMmJpdC9leHBlY3QuMCBiL3Rlc3RzL2Zfam5sXzMyYml0L2V4cGVjdC4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZGU0OGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2pubF8zMmJpdC9leHBlY3QuMApAQCAtMCwwICsxLDU2NyBAQAorSm91cm5hbCBzdGFydHMgYXQgYmxvY2sgMSwgdHJhbnNhY3Rpb24gMgorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMiwgdHlwZSAxIChkZXNjcmlwdG9yIGJsb2NrKSBhdCBibG9jayAxCitEdW1waW5nIGRlc2NyaXB0b3IgYmxvY2ssIHNlcXVlbmNlIDIsIGF0IGJsb2NrIDE6CisgIEZTIGJsb2NrIDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMiAoZmxhZ3MgMHg4KQorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMiwgdHlwZSAyIChjb21taXQgYmxvY2spIGF0IGJsb2NrIDMKK0ZvdW5kIGV4cGVjdGVkIHNlcXVlbmNlIDMsIHR5cGUgMSAoZGVzY3JpcHRvciBibG9jaykgYXQgYmxvY2sgNAorRHVtcGluZyBkZXNjcmlwdG9yIGJsb2NrLCBzZXF1ZW5jZSAzLCBhdCBibG9jayA0OgorICBGUyBibG9jayA4MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1IChmbGFncyAweDApCisgIEZTIGJsb2NrIDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzNTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTA0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTA3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzU1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYxMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjE0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTEyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzNTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTI0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYxOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjE5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDY0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzU3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDY3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYyMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTI4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDcwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYyMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjIzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDczIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEzMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MjQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTMxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDc2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYyNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTMzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDc5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYyNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA4MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgODEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjI3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDgyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEzNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA4MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgODQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTM2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDg1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDM1OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA4NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MjkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgODcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTM3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDg4IChmbGFncyAweGEpCitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSAzLCB0eXBlIDEgKGRlc2NyaXB0b3IgYmxvY2spIGF0IGJsb2NrIDg5CitEdW1waW5nIGRlc2NyaXB0b3IgYmxvY2ssIHNlcXVlbmNlIDMsIGF0IGJsb2NrIDg5OgorICBGUyBibG9jayAxMzggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTAgKGZsYWdzIDB4MCkKKyAgRlMgYmxvY2sgNjMwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDkxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEzOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA5MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDk0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYzMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA5NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MzMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDk3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYzNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA5OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MzUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTAxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE0NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjM2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTA0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDM1OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjM3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTA3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYzOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQ3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTEwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYzOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQ5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDExMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NDAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTEzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjQxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDExNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTE2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY0MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTUyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDExOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTE5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY0MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEyMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NDQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTIyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDM2MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjQ1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEyNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTI1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY0NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEyNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NDcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTI4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NDggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTMxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjQ5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTM0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY1MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTM3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzYxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE0MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNDQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjU0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE0NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQ2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY1NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNDcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTY3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE0OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQ5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY1NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjU3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE1MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTUyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY1OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTcwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE1NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTU1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjYwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE1NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNzIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTU4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzYyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NjEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTYxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNjIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjYyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNzUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTY0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY2MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTc2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NjQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTY3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNjggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTc4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NjUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTcwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNzEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjY2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE3MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTczIChmbGFncyAweGEpCitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSAzLCB0eXBlIDEgKGRlc2NyaXB0b3IgYmxvY2spIGF0IGJsb2NrIDE3NAorRHVtcGluZyBkZXNjcmlwdG9yIGJsb2NrLCBzZXF1ZW5jZSAzLCBhdCBibG9jayAxNzQ6CisgIEZTIGJsb2NrIDY2NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNzUgKGZsYWdzIDB4MCkKKyAgRlMgYmxvY2sgMTgxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE3NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTc3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDM2MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjY5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE3OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTgwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxODEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjcwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE4MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTgzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY3MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxODQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTg1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE4NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NzIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTg2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxODcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjczIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE4OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTg5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxOTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjc0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE5MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTkyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY3NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxOTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTkwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE5NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTk1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzY0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE5NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NzcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTk4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxOTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTkzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIwMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NzggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjAxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjc5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIwMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjA0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjgxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIwNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjA3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTk3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIwOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjEwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTk5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIxMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2ODQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjEzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzY1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIxNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2ODUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjE2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjg2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIxOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjE5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjg3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIyMSAoZmxhZ3MgMHhhKQorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMywgdHlwZSAyIChjb21taXQgYmxvY2spIGF0IGJsb2NrIDIyMgorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgNCwgdHlwZSAxIChkZXNjcmlwdG9yIGJsb2NrKSBhdCBibG9jayAyMjMKK0R1bXBpbmcgZGVzY3JpcHRvciBibG9jaywgc2VxdWVuY2UgNCwgYXQgYmxvY2sgMjIzOgorICBGUyBibG9jayAyMDQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjI0IChmbGFncyAweDApCisgIEZTIGJsb2NrIDY4NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjAzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIyNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzNjUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjI3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjI4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIyOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMzAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjMxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzY0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2ODAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjM0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjg5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjM3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY5MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjA3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjQwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjA5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI0MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2OTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjQzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI0NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzY2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI0NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2OTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjQ3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIxMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjk0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI0OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjUwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY5NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjEyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI1MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjUzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY5NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjE0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI1NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2OTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjU2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIxNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjk4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI1OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjU5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY5OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjE3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI2MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjYyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcwMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjE5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI2NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzNjcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjY1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcwMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjIwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI2NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjY4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIyMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzAzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI3MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjcxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIyMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzA0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI3MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjc0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIyNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzA2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI3NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMjUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjc3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcwNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjI2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI3OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MDggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjgwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIyNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjI4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI4MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzNjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjgzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcwOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjI5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI4NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjg2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIzMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzExIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI4OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjg5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcxMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjMyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI5MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMzMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjkyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcxMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjM0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI5NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjk1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIzNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzE1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI5NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjk4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcxNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzY5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMwMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzAxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIzNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjM4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMwMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzA0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIzOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzE5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMwNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNDAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzA3IChmbGFncyAweGEpCitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSA0LCB0eXBlIDEgKGRlc2NyaXB0b3IgYmxvY2spIGF0IGJsb2NrIDMwOAorRHVtcGluZyBkZXNjcmlwdG9yIGJsb2NrLCBzZXF1ZW5jZSA0LCBhdCBibG9jayAzMDg6CisgIEZTIGJsb2NrIDcyMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMDkgKGZsYWdzIDB4MCkKKyAgRlMgYmxvY2sgMjQxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMxMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MjEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzExIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI0MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMxMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzE0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI0NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMTUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzIzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMxNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzE3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcyNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMTggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQ2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMxOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzNzAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzIwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcyNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMjEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQ3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMyMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNDggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzIzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcyNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMjQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQ5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMyNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MjcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzI2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI1MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMjcgKGZsYWdzIDB4YSkKK0ZvdW5kIGV4cGVjdGVkIHNlcXVlbmNlIDQsIHR5cGUgMiAoY29tbWl0IGJsb2NrKSBhdCBibG9jayAzMjgKK0ZvdW5kIGV4cGVjdGVkIHNlcXVlbmNlIDUsIHR5cGUgNSAocmV2b2tlIHRhYmxlKSBhdCBibG9jayAzMjkKK0R1bXBpbmcgcmV2b2tlIGJsb2NrLCBzZXF1ZW5jZSA1LCBhdCBibG9jayAzMjk6CisgIFJldm9rZSBGUyBibG9jayA2NDAKKyAgUmV2b2tlIEZTIGJsb2NrIDY0MQorICBSZXZva2UgRlMgYmxvY2sgNjQyCisgIFJldm9rZSBGUyBibG9jayA2NDMKKyAgUmV2b2tlIEZTIGJsb2NrIDY0NAorICBSZXZva2UgRlMgYmxvY2sgNjQ1CisgIFJldm9rZSBGUyBibG9jayA2NDYKKyAgUmV2b2tlIEZTIGJsb2NrIDY0NworICBSZXZva2UgRlMgYmxvY2sgNjQ4CisgIFJldm9rZSBGUyBibG9jayA2NDkKKyAgUmV2b2tlIEZTIGJsb2NrIDY1MAorICBSZXZva2UgRlMgYmxvY2sgNjUxCisgIFJldm9rZSBGUyBibG9jayA2NTIKKyAgUmV2b2tlIEZTIGJsb2NrIDY1MworICBSZXZva2UgRlMgYmxvY2sgNjU0CisgIFJldm9rZSBGUyBibG9jayA2NTUKKyAgUmV2b2tlIEZTIGJsb2NrIDY1NgorICBSZXZva2UgRlMgYmxvY2sgNjU3CisgIFJldm9rZSBGUyBibG9jayA4MQorICBSZXZva2UgRlMgYmxvY2sgNjU4CisgIFJldm9rZSBGUyBibG9jayA2NTkKKyAgUmV2b2tlIEZTIGJsb2NrIDY2MAorICBSZXZva2UgRlMgYmxvY2sgODQKKyAgUmV2b2tlIEZTIGJsb2NrIDY2MQorICBSZXZva2UgRlMgYmxvY2sgODUKKyAgUmV2b2tlIEZTIGJsb2NrIDY2MgorICBSZXZva2UgRlMgYmxvY2sgODYKKyAgUmV2b2tlIEZTIGJsb2NrIDY2MworICBSZXZva2UgRlMgYmxvY2sgODcKKyAgUmV2b2tlIEZTIGJsb2NrIDY2NAorICBSZXZva2UgRlMgYmxvY2sgODgKKyAgUmV2b2tlIEZTIGJsb2NrIDY2NQorICBSZXZva2UgRlMgYmxvY2sgODkKKyAgUmV2b2tlIEZTIGJsb2NrIDY2NgorICBSZXZva2UgRlMgYmxvY2sgOTAKKyAgUmV2b2tlIEZTIGJsb2NrIDY2NworICBSZXZva2UgRlMgYmxvY2sgOTEKKyAgUmV2b2tlIEZTIGJsb2NrIDY2OAorICBSZXZva2UgRlMgYmxvY2sgOTIKKyAgUmV2b2tlIEZTIGJsb2NrIDY2OQorICBSZXZva2UgRlMgYmxvY2sgOTMKKyAgUmV2b2tlIEZTIGJsb2NrIDY3MAorICBSZXZva2UgRlMgYmxvY2sgOTQKKyAgUmV2b2tlIEZTIGJsb2NrIDY3MQorICBSZXZva2UgRlMgYmxvY2sgOTUKKyAgUmV2b2tlIEZTIGJsb2NrIDY3MgorICBSZXZva2UgRlMgYmxvY2sgOTYKKyAgUmV2b2tlIEZTIGJsb2NrIDY3MworICBSZXZva2UgRlMgYmxvY2sgOTcKKyAgUmV2b2tlIEZTIGJsb2NrIDY3NAorICBSZXZva2UgRlMgYmxvY2sgNjc1CisgIFJldm9rZSBGUyBibG9jayA2MTEKKyAgUmV2b2tlIEZTIGJsb2NrIDY3NgorICBSZXZva2UgRlMgYmxvY2sgNjEyCisgIFJldm9rZSBGUyBibG9jayA2NzcKKyAgUmV2b2tlIEZTIGJsb2NrIDYxMworICBSZXZva2UgRlMgYmxvY2sgNjc4CisgIFJldm9rZSBGUyBibG9jayA2MTQKKyAgUmV2b2tlIEZTIGJsb2NrIDY3OQorICBSZXZva2UgRlMgYmxvY2sgNjE1CisgIFJldm9rZSBGUyBibG9jayA2MTYKKyAgUmV2b2tlIEZTIGJsb2NrIDYxNworICBSZXZva2UgRlMgYmxvY2sgNjgyCisgIFJldm9rZSBGUyBibG9jayA2MTgKKyAgUmV2b2tlIEZTIGJsb2NrIDY4MworICBSZXZva2UgRlMgYmxvY2sgNjE5CisgIFJldm9rZSBGUyBibG9jayA2ODQKKyAgUmV2b2tlIEZTIGJsb2NrIDYyMAorICBSZXZva2UgRlMgYmxvY2sgNjg1CisgIFJldm9rZSBGUyBibG9jayA2MjEKKyAgUmV2b2tlIEZTIGJsb2NrIDYyMgorICBSZXZva2UgRlMgYmxvY2sgNjg3CisgIFJldm9rZSBGUyBibG9jayA2MjMKKyAgUmV2b2tlIEZTIGJsb2NrIDY4OAorICBSZXZva2UgRlMgYmxvY2sgNjI0CisgIFJldm9rZSBGUyBibG9jayA2ODkKKyAgUmV2b2tlIEZTIGJsb2NrIDYyNQorICBSZXZva2UgRlMgYmxvY2sgNjkwCisgIFJldm9rZSBGUyBibG9jayA2MjYKKyAgUmV2b2tlIEZTIGJsb2NrIDY5MQorICBSZXZva2UgRlMgYmxvY2sgNjI3CisgIFJldm9rZSBGUyBibG9jayA2MjgKKyAgUmV2b2tlIEZTIGJsb2NrIDYyOQorICBSZXZva2UgRlMgYmxvY2sgNjMwCisgIFJldm9rZSBGUyBibG9jayA2MzEKKyAgUmV2b2tlIEZTIGJsb2NrIDYzMgorICBSZXZva2UgRlMgYmxvY2sgNjMzCisgIFJldm9rZSBGUyBibG9jayA2MzQKKyAgUmV2b2tlIEZTIGJsb2NrIDYzNQorICBSZXZva2UgRlMgYmxvY2sgNjM2CisgIFJldm9rZSBGUyBibG9jayA2MzcKKyAgUmV2b2tlIEZTIGJsb2NrIDYzOAorICBSZXZva2UgRlMgYmxvY2sgNjM5CitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSA1LCB0eXBlIDEgKGRlc2NyaXB0b3IgYmxvY2spIGF0IGJsb2NrIDMzMAorRHVtcGluZyBkZXNjcmlwdG9yIGJsb2NrLCBzZXF1ZW5jZSA1LCBhdCBibG9jayAzMzA6CisgIEZTIGJsb2NrIDk4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzMSAoZmxhZ3MgMHgwKQorICBGUyBibG9jayA5OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzU0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzM1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzM2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzM4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNDAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzU1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM0MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNDMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM0NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQ1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNDYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTA4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM0NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQ4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNDkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTEwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzUxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTA2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzU2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzU2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTI2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzU5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM2MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzYyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM2NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzY1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM2NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzY4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDM1NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTMyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM3MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzcxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDM1OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM3MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzc0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEzMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTI5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM3NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzc3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEzNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTM0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM3OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzgwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEzNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzODEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTM4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzgzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzODQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzU5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzg2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE0NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzODcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzg5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE0NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM5MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzkyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE0OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM5NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzk1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTUyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM5NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzk4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE0NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzYwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDAxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzYxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDA0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDA3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDEwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTY1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQxMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDEzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MTQgKGZsYWdzIDB4YSkKK0ZvdW5kIGV4cGVjdGVkIHNlcXVlbmNlIDUsIHR5cGUgMSAoZGVzY3JpcHRvciBibG9jaykgYXQgYmxvY2sgNDE1CitEdW1waW5nIGRlc2NyaXB0b3IgYmxvY2ssIHNlcXVlbmNlIDUsIGF0IGJsb2NrIDQxNToKKyAgRlMgYmxvY2sgMTYxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQxNiAoZmxhZ3MgMHgwKQorICBGUyBibG9jayAzNjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDE3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MTggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTczIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQxOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDIwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MjEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTcxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQyMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNzAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDIzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MjQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTc2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQyNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNzUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDI2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MjcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTc5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQyOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNzggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDI5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MzAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzYzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDMyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MzMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzY0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDM1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MzYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTg1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDM4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MzkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTkwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDQxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTkyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDQ0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTgyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzNjUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDQ3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjAwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2ODAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDUwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjA4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ1MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDUzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjA0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ1NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDU2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjA2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ1OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDU5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjgxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ2MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDYyIChmbGFncyAweGEpCitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSA1LCB0eXBlIDIgKGNvbW1pdCBibG9jaykgYXQgYmxvY2sgNDYzCitObyBtYWdpYyBudW1iZXIgYXQgYmxvY2sgNDY0OiBlbmQgb2Ygam91cm5hbC4KZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfam5sXzMyYml0L2V4cGVjdC4xIGIvdGVzdHMvZl9qbmxfMzJiaXQvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhYWI0OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfam5sXzMyYml0L2V4cGVjdC4xCkBAIC0wLDAgKzEsMTYgQEAKK3Rlc3RfZmlsZXN5czogcmVjb3ZlcmluZyBqb3VybmFsCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDE0Njk5LCBjb3VudGVkPTE0NjYwKS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nICg0MDg1LCBjb3VudGVkPTM2OTcpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAzOTkvNDA5NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDE3MjQvMTYzODQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2pubF8zMmJpdC9leHBlY3QuMiBiL3Rlc3RzL2Zfam5sXzMyYml0L2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOTQ4ZDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2pubF8zMmJpdC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDM5OS80MDk2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTcyNC8xNjM4NCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfam5sXzMyYml0L2ltYWdlLmd6IGIvdGVzdHMvZl9qbmxfMzJiaXQvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMwODEwMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfam5sXzMyYml0L2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfam5sXzMyYml0L25hbWUgYi90ZXN0cy9mX2pubF8zMmJpdC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZTk5MTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2pubF8zMmJpdC9uYW1lCkBAIC0wLDAgKzEgQEAKK29uLWRpc2sgMzItYml0IGpvdXJuYWwgZm9ybWF0CmRpZmYgLS1naXQgYS90ZXN0cy9mX2pubF8zMmJpdC9zY3JpcHQgYi90ZXN0cy9mX2pubF8zMmJpdC9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZiNDM2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfam5sXzMyYml0L3NjcmlwdApAQCAtMCwwICsxLDQgQEAKK1BSRVBfQ01EPSckREVCVUdGUyAtUiAibG9nZHVtcCAtYSIgJFRNUEZJTEUgMj4mMSB8IHNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkID4gJHRlc3RfbmFtZS4wLmxvZycKK1BBU1NfWkVSTz10cnVlCisKKy4gJGNtZF9kaXIvcnVuX2UyZnNjawpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9qbmxfNjRiaXQvZXhwZWN0LjAgYi90ZXN0cy9mX2pubF82NGJpdC9leHBlY3QuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDA3ZjAzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9qbmxfNjRiaXQvZXhwZWN0LjAKQEAgLTAsMCArMSw5MjggQEAKK0pvdXJuYWwgc3RhcnRzIGF0IGJsb2NrIDY3LCB0cmFuc2FjdGlvbiAzMgorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMzIsIHR5cGUgNSAocmV2b2tlIHRhYmxlKSBhdCBibG9jayA2NworRHVtcGluZyByZXZva2UgYmxvY2ssIHNlcXVlbmNlIDMyLCBhdCBibG9jayA2NzoKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MzYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1NDEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1NTYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0MjkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0MzIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0MzQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0MzUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NDIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NDQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NDUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NDkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NTMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NTYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NTcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NTgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NTkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MzAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MzEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MzIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MzMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MzQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MzUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzEKK0ZvdW5kIGV4cGVjdGVkIHNlcXVlbmNlIDMyLCB0eXBlIDEgKGRlc2NyaXB0b3IgYmxvY2spIGF0IGJsb2NrIDY4CitEdW1waW5nIGRlc2NyaXB0b3IgYmxvY2ssIHNlcXVlbmNlIDMyLCBhdCBibG9jayA2ODoKKyAgRlMgYmxvY2sgODAyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDY5IChmbGFncyAweDApCisgIEZTIGJsb2NrIDgwMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNzEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDczIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE0NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3ODMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTMwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDc2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgwNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MDggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzg4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDc5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDc4OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA4MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3ODUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgODEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzg2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDgyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDc4NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA4MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3OTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgODQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzk5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDg1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgwMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA4NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MDEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgODcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODEyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDg4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgxMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA4OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3OTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTMyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDkxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA5MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODE5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDk0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA5NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MzggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODM5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDk3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgzNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA5OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MzcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODI5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MzAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTAxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODI0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTA0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODE3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTA3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODE2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NDEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTEwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg0MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODMyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDExMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MzMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTEzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg0MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODQ2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDExNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NDcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTE2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODQ4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDExOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NDQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTE5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgzNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODM1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEyMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NDAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTIyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODIyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEyNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTI1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg0NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODUyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEyNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTI4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg3MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODcyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTMxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg2OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODcwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTM0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg2MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODU2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTM3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg1OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODU5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NDkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg1MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODUxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE0MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg2MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNDQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODczIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE0NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NzQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQ2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg2NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNDcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODY1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE0OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQ5IChmbGFncyAweGEpCitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSAzMiwgdHlwZSAxIChkZXNjcmlwdG9yIGJsb2NrKSBhdCBibG9jayAxNTAKK0R1bXBpbmcgZGVzY3JpcHRvciBibG9jaywgc2VxdWVuY2UgMzIsIGF0IGJsb2NrIDE1MDoKKyAgRlMgYmxvY2sgODc1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE1MSAoZmxhZ3MgMHgwKQorICBGUyBibG9jayA4NzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTUyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg3OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODc5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE1NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4ODAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTU1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg4MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODc3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE1NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NjcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTU4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg1NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODU1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4ODUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTYxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg4NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNjIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTAzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MDQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTY0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkwMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTAyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4OTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTY3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg5NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNjggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODg4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4ODkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTcwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNzEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODkyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE3MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4ODIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTczIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg4MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNzQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODkzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE3NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTc2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkwNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNzcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODk3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE3OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4OTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTc5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkwOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxODAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTExIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE4MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTgyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg5MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxODMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTEzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE4NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4OTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTg1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkwOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxODYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTAwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE4NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTg4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg4NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxODkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODg0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE5MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4OTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTkxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkxMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxOTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTE3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE5MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTk0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1MzcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTk1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkzNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTM3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE5NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MzMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTk4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTk5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkzNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMDAgKGZsYWdzIDB4YSkKK0ZvdW5kIGV4cGVjdGVkIHNlcXVlbmNlIDMyLCB0eXBlIDIgKGNvbW1pdCBibG9jaykgYXQgYmxvY2sgMjAxCitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSAzMywgdHlwZSA1IChyZXZva2UgdGFibGUpIGF0IGJsb2NrIDIwMgorRHVtcGluZyByZXZva2UgYmxvY2ssIHNlcXVlbmNlIDMzLCBhdCBibG9jayAyMDI6CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjAwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjAxCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTM3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjAyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTM4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjAzCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTM5CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjA0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjA1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjA2CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjA3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQzCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjA4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQ0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjA5CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQ1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjEwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQ2CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjExCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQ3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjEyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQ4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjEzCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQ5CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjE0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTUwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjE1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTUxCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjE2CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTUyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjE3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTUzCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTU0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTU1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTU3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTU4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTU5CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTYwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTYxCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTYyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTYzCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTY0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTY1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTY2CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTY3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTY4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTY5CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTcwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTcxCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTcyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTczCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTc0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTc1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTc2CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTc3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTc4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTc5CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTgwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTgxCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTgyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTgzCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTg0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTg1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTg2CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTg3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTg4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTg5CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTkwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTkxCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTkyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTkzCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTk0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTk1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTk2CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTk3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTk4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTk5CitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSAzMywgdHlwZSAxIChkZXNjcmlwdG9yIGJsb2NrKSBhdCBibG9jayAyMDMKK0R1bXBpbmcgZGVzY3JpcHRvciBibG9jaywgc2VxdWVuY2UgMzMsIGF0IGJsb2NrIDIwMzoKKyAgRlMgYmxvY2sgOTMzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIwNCAoZmxhZ3MgMHgwKQorICBGUyBibG9jayAxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIwNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MzUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjA2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEzMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMDcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQ3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIwOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MzQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjEwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkxMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTMwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIxMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjEzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkyNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTI4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIxNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MjEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjE2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkyMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTIzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIxOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MjQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjE5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkyNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTE1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIyMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjIyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkyNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTE0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIyNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MzggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjI1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkzOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTQwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIyNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MzAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjI4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkzMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTQxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NDMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjMxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk0NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTQ1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjM0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk0MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTMyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MzcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjM3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkxOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTE5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjQwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkxNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTI5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI0MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjQzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNDQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTUwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI0NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjQ2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk2OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNDcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTcwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI0OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjQ5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk2NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTY4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI1MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjUyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk2MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTU0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI1NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjU1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk1NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTU3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI1NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NDcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjU4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk0OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTU4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI2MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjYxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk3MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNjIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTYyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI2MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NjMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjY0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk3MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTc2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI2NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NzcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjY3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk3OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNjggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTU5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI2OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NzQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjcwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk3NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNzEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTY1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI3MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjczIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk0OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNzQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTY0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI3NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjc2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk3OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNzcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTgyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI3OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5ODMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjc5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk4NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAwMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAwMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTk5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI4MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDAwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI4NCAoZmxhZ3MgMHhhKQorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMzMsIHR5cGUgMSAoZGVzY3JpcHRvciBibG9jaykgYXQgYmxvY2sgMjg1CitEdW1waW5nIGRlc2NyaXB0b3IgYmxvY2ssIHNlcXVlbmNlIDMzLCBhdCBibG9jayAyODU6CisgIEZTIGJsb2NrIDk5MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODYgKGZsYWdzIDB4MCkKKyAgRlMgYmxvY2sgOTkzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI4NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5OTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjg4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk4NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTg3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI5MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5ODkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjkxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk5MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTgwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI5MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5ODEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjk0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAwNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAwNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTk1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI5OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5OTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjk5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwMDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzAwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwMDkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzAxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwMTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzAyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk4OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMDMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAxMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMDQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAwNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTk3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMwNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5OTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzA3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwMDMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzA4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk4NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMDkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAwOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQ2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMxMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzEyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE0NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQ4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMxNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzE1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTY1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMxNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NzQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzE4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NDEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzE5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTY3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMyMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTU2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMyMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzIzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzI0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE4NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTcwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMyNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTg4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMyOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzI5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzMwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMzEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYyMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTczIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzM0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjc1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzM3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTc2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTUyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM0MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNzggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExODkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQ0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE5MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNDYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTgwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM0NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTkxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM0OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQ5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExOTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzUwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYyMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTgzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzU0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzU1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTg1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjIzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzU5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MjQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzYwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNjEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTUzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM2MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzYzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNjQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTg5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM2NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzY2IChmbGFncyAweGEpCitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSAzMywgdHlwZSAxIChkZXNjcmlwdG9yIGJsb2NrKSBhdCBibG9jayAzNjcKK0R1bXBpbmcgZGVzY3JpcHRvciBibG9jaywgc2VxdWVuY2UgMzMsIGF0IGJsb2NrIDM2NzoKKyAgRlMgYmxvY2sgMTkwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM2OCAoZmxhZ3MgMHgwKQorICBGUyBibG9jayAxNTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzY5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNzAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM3MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzcyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY3NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNzMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM3NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzc1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNzYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTk0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM3NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzc4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNzkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE5MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzODAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTk2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTk0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzgzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExOTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzg0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzODUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE5NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzODYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTk5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTk3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzg5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY3OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE5OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjAxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM5MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTk5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM5MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzk0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIwMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjA0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM5NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjI1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM5OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzk5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDAwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYyNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjA3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjI4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDA1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MjkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDA2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MDcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjc5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjMwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDEwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDExIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIxMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjEyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQxMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjMyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQxNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDE1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMDEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDE2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIxNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIwMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MTggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjE1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQxOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjAzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQyMCAoZmxhZ3MgMHhhKQorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMzMsIHR5cGUgMiAoY29tbWl0IGJsb2NrKSBhdCBibG9jayA0MjEKK0ZvdW5kIGV4cGVjdGVkIHNlcXVlbmNlIDM0LCB0eXBlIDEgKGRlc2NyaXB0b3IgYmxvY2spIGF0IGJsb2NrIDQyMgorRHVtcGluZyBkZXNjcmlwdG9yIGJsb2NrLCBzZXF1ZW5jZSAzNCwgYXQgYmxvY2sgNDIyOgorICBGUyBibG9jayAxNDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDIzIChmbGFncyAweDApCisgIEZTIGJsb2NrIDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDI0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIxNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjc5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQyNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjAzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQyNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDI4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIxNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQ3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDMxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMDQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDMyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY3NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MzMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDM1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDM2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIxOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MzcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjgwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTU1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDQwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NDMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDQxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIyMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjIxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTQ0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDQ1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDQ2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NDcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTMyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTU0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMjMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDUwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDUxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIyNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIwNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjI1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ1NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjA2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ1NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDU2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIwNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NTggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjI3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ1OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjA4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ2MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDYxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1MzcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDYyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIyOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjMwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ2NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTM4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ2NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDY2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1MzkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDY3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIzMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NjggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU0MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjMzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ3MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTU3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ3MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMzQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDcyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDczIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIzNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NzQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjgyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ3NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTU5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ3NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDc3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDc4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIzNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NzkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIwOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0ODAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjM4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ4MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMzkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDgyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDgzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI0MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0ODQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIxMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0ODUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ4NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjEyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ4NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDg4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDg5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI0MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0OTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIxNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0OTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQ0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ5MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2ODMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDkzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDk0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI0NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0OTUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIxNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0OTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQ2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ5NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTQ1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ5OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNDcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDk5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI0OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MDAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU0NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQ5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUwMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTQ3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUwMyAoZmxhZ3MgMHhhKQorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMzQsIHR5cGUgMSAoZGVzY3JpcHRvciBibG9jaykgYXQgYmxvY2sgNTA0CitEdW1waW5nIGRlc2NyaXB0b3IgYmxvY2ssIHNlcXVlbmNlIDM0LCBhdCBibG9jayA1MDQ6CisgIEZTIGJsb2NrIDI1MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MDUgKGZsYWdzIDB4MCkKKyAgRlMgYmxvY2sgMTU0OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MDYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjUxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUwNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTQ5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUwOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTUwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUwOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTEwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU1MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjUzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUxMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTUyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUxNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTE1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NjEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTE2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI1NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU2MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MTggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjU2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUxOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTIwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NjMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTIxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI1OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MjIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU2NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjU5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUyNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTY1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUyNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTI2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTI3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI2MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MjggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjg1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUyOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTY3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUzMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTMxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTMyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI2MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MzMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYwMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MzQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjY0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUzNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjAyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUzNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNjUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTM3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI2NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYwMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MzkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjY3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU0MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjA0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU0MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTQyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTQzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI2OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NDQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYwNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjcwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU0NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2ODYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTQ3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MDcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTQ4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI3MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NDkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYwOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjcyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU1MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjA5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU1MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNzMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTUzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTU0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI3NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NTUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjc1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU1NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjExIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU1NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTU4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTU5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI3NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYxMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NjEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjc4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU2MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjE0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU2MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNzkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTY0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYxNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjgwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU2NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjE2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU2OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTY5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU2OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyODEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTcwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NzAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTcxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI4MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU3MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NzMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjgzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU3NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyODQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTc1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NzIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTc2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI4NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NzcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU3MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjg2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU3OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTc0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU4MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyODcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTgxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1ODIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU3NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1ODMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjg4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU4NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTc2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU4NSAoZmxhZ3MgMHhhKQorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMzQsIHR5cGUgMSAoZGVzY3JpcHRvciBibG9jaykgYXQgYmxvY2sgNTg2CitEdW1waW5nIGRlc2NyaXB0b3IgYmxvY2ssIHNlcXVlbmNlIDM0LCBhdCBibG9jayA1ODY6CisgIEZTIGJsb2NrIDI4OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1ODcgKGZsYWdzIDB4MCkKKyAgRlMgYmxvY2sgMTU3NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1ODggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjkwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU4OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTc4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU5MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyOTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTkxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NzkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTkyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI5MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1OTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjkzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU5NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTgwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU5NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyOTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTk2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1ODEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTk3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI5NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1OTggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU4MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1OTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjk2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYwMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2ODkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjAxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1ODMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjAyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI5NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MDMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU4NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MDQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjk4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYwNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTg1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYwNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyOTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjA3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1ODYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjA4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDMwMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MDkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU4NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzAxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYxMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzMDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjEyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1ODggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjEzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDMwMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU4OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MTUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzA0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYxNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTkwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYxNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzMDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjE4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY5MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzA2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYyMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTkyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYyMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzMDcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjIzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1OTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjI0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDMwOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU5NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzA5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYyNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTk1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYyOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTk2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYyOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzMTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjMwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDMxMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MzEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU5NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzEyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTk4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYzNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzMTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjM1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MzYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU5OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MzcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzE0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYzOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjAwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYzOSAoZmxhZ3MgMHhhKQorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMzQsIHR5cGUgMiAoY29tbWl0IGJsb2NrKSBhdCBibG9jayA2NDAKK05vIG1hZ2ljIG51bWJlciBhdCBibG9jayA2NDE6IGVuZCBvZiBqb3VybmFsLgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9qbmxfNjRiaXQvZXhwZWN0LjEgYi90ZXN0cy9mX2pubF82NGJpdC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzYwZTJmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9qbmxfNjRiaXQvZXhwZWN0LjEKQEAgLTAsMCArMSwxNiBAQAordGVzdF9maWxlc3lzOiByZWNvdmVyaW5nIGpvdXJuYWwKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoMTQwNTksIGNvdW50ZWQ9MTI3MTIpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDgxODEsIGNvdW50ZWQ9NjgzNCkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEzNTgvODE5MiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDM2NzIvMTYzODQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2pubF82NGJpdC9leHBlY3QuMiBiL3Rlc3RzL2Zfam5sXzY0Yml0L2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzY2I3MzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2pubF82NGJpdC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEzNTgvODE5MiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDM2NzIvMTYzODQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX2pubF82NGJpdC9pbWFnZS5neiBiL3Rlc3RzL2Zfam5sXzY0Yml0L2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NThmOTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2pubF82NGJpdC9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX2pubF82NGJpdC9uYW1lIGIvdGVzdHMvZl9qbmxfNjRiaXQvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzhkZDE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9qbmxfNjRiaXQvbmFtZQpAQCAtMCwwICsxIEBACitvbi1kaXNrIDY0LWJpdCBqb3VybmFsIGZvcm1hdApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9qbmxfNjRiaXQvc2NyaXB0IGIvdGVzdHMvZl9qbmxfNjRiaXQvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYjQzNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2pubF82NGJpdC9zY3JpcHQKQEAgLTAsMCArMSw0IEBACitQUkVQX0NNRD0nJERFQlVHRlMgLVIgImxvZ2R1bXAgLWEiICRUTVBGSUxFIDI+JjEgfCBzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCA+ICR0ZXN0X25hbWUuMC5sb2cnCitQQVNTX1pFUk89dHJ1ZQorCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfam5sX2Vycm5vL2V4cGVjdC4wIGIvdGVzdHMvZl9qbmxfZXJybm8vZXhwZWN0LjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRhZDcyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfam5sX2Vycm5vL2V4cGVjdC4wCkBAIC0wLDAgKzEsNDcgQEAKK0ZpbGVzeXN0ZW0gdm9sdW1lIG5hbWU6ICAgPG5vbmU+CitMYXN0IG1vdW50ZWQgb246ICAgICAgICAgIDxub3QgYXZhaWxhYmxlPgorRmlsZXN5c3RlbSBtYWdpYyBudW1iZXI6ICAweEVGNTMKK0ZpbGVzeXN0ZW0gcmV2aXNpb24gIzogICAgMSAoZHluYW1pYykKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6ICAgICAgaGFzX2pvdXJuYWwgZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBleHRlbnQgZmxleF9iZyBzcGFyc2Vfc3VwZXIgaHVnZV9maWxlIHVuaW5pdF9iZyBkaXJfbmxpbmsgZXh0cmFfaXNpemUKK0RlZmF1bHQgbW91bnQgb3B0aW9uczogICAgdXNlcl94YXR0ciBhY2wKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgUmVtb3VudCByZWFkLW9ubHkKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgMjA0OAorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICA4MTkyCitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDQwOQorRnJlZSBibG9ja3M6ICAgICAgICAgICAgICA2ODYyCitGcmVlIGlub2RlczogICAgICAgICAgICAgIDIwMzcKK0ZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgMQorQmxvY2sgc2l6ZTogICAgICAgICAgICAgICAxMDI0CitGcmFnbWVudCBzaXplOiAgICAgICAgICAgIDEwMjQKK1Jlc2VydmVkIEdEVCBibG9ja3M6ICAgICAgMzEKK0Jsb2NrcyBwZXIgZ3JvdXA6ICAgICAgICAgODE5MgorRnJhZ21lbnRzIHBlciBncm91cDogICAgICA4MTkyCitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDIwNDgKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgMjU2CitGbGV4IGJsb2NrIGdyb3VwIHNpemU6ICAgIDE2CitNb3VudCBjb3VudDogICAgICAgICAgICAgIDAKK0NoZWNrIGludGVydmFsOiAgICAgICAgICAgMCAoPG5vbmU+KQorUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAwCitSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgIDAKK0ZpcnN0IGlub2RlOiAgICAgICAgICAgICAgMTEKK0lub2RlIHNpemU6CSAgICAgICAgICAxMjgKK0pvdXJuYWwgaW5vZGU6ICAgICAgICAgICAgOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorSm91cm5hbCBiYWNrdXA6ICAgICAgICAgICBpbm9kZSBibG9ja3MKK0pvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAgKG5vbmUpCitKb3VybmFsIHNpemU6ICAgICAgICAgICAgIDEwMjRrCitKb3VybmFsIGxlbmd0aDogICAgICAgICAgIDEwMjQKK0pvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHgwMDAwMDAwNQorSm91cm5hbCBzdGFydDogICAgICAgICAgICAwCisKKworR3JvdXAgMDogKEJsb2NrcyAxLTgxOTEpIFtJVEFCTEVfWkVST0VEXQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMi0yCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMy0zMworICBCbG9jayBiaXRtYXAgYXQgMzQgKCszMyksIElub2RlIGJpdG1hcCBhdCA1MCAoKzQ5KQorICBJbm9kZSB0YWJsZSBhdCA2Ni0zMjEgKCs2NSkKKyAgNjg2MiBmcmVlIGJsb2NrcywgMjAzNyBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcywgMjAzNyB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMzMwLTgxOTEKKyAgRnJlZSBpbm9kZXM6IDEyLTIwNDgKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfam5sX2Vycm5vL2V4cGVjdC4xIGIvdGVzdHMvZl9qbmxfZXJybm8vZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3Mjk1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfam5sX2Vycm5vL2V4cGVjdC4xCkBAIC0wLDAgKzEsOSBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvMjA0OCBmaWxlcyAoOS4xJSBub24tY29udGlndW91cyksIDEzMzAvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfam5sX2Vycm5vL2V4cGVjdC4yIGIvdGVzdHMvZl9qbmxfZXJybm8vZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxNmE3NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfam5sX2Vycm5vL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMjA0OCBmaWxlcyAoOS4xJSBub24tY29udGlndW91cyksIDEzMzAvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfam5sX2Vycm5vL2ltYWdlLmd6IGIvdGVzdHMvZl9qbmxfZXJybm8vaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1Yzc3NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfam5sX2Vycm5vL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfam5sX2Vycm5vL25hbWUgYi90ZXN0cy9mX2pubF9lcnJuby9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZjY0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2pubF9lcnJuby9uYW1lCkBAIC0wLDAgKzEgQEAKK2pvdXJuYWwgc19lcnJubyBoYW5kbGluZwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9qbmxfZXJybm8vc2NyaXB0IGIvdGVzdHMvZl9qbmxfZXJybm8vc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNTAwNmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2pubF9lcnJuby9zY3JpcHQKQEAgLTAsMCArMSw0IEBACitBRlRFUl9DTUQ9JyREVU1QRTJGUyAkVE1QRklMRSAyPiYxIHwgc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgPiAkdGVzdF9uYW1lLjAubG9nJworUEFTU19aRVJPPXRydWUKKworLiAkY21kX2Rpci9ydW5fZTJmc2NrCmRpZmYgLS1naXQgYS90ZXN0cy9mX2pvdXJuYWwvZXhwZWN0LjEgYi90ZXN0cy9mX2pvdXJuYWwvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIwMmM4MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfam91cm5hbC9leHBlY3QuMQpAQCAtMCwwICsxLDYyIEBACit0ZXN0X2ZpbGVzeXM6IHJlY292ZXJpbmcgam91cm5hbAorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgMzcgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA5MCAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNjcgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA1MCAodWlkPTAsIGdpZD0wLCBtb2RlPTAxMDA2MDAsIHNpemU9NDA5NikKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDU3ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDQwNzAwLCBzaXplPTEwMjQpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA4MCAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNDUgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDcxICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgODYgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDgzICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDQwNzAwLCBzaXplPTEwMjQpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAyNyAodWlkPTAsIGdpZD0wLCBtb2RlPTAxMDA2MDAsIHNpemU9NDA5NikKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDUyICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNDggKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDE1ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgMTAyICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNjUgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAxNCAodWlkPTAsIGdpZD0wLCBtb2RlPTAxMDA2MDAsIHNpemU9NDA5NikKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDM2ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDQwNzAwLCBzaXplPTEwMjQpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAyMSAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNDMgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDUxICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDQwNzAwLCBzaXplPTEwMjQpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA5OSAodWlkPTAsIGdpZD0wLCBtb2RlPTAxMDA2MDAsIHNpemU9NDA5NikKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDE5ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDQwNzAwLCBzaXplPTEwMjQpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAzOSAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgOTUgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAyNSAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgODggKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAyMCAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNDEgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDc3ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgMTggKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDYwICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgOTggKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA0OSAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNjIgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA3MiAodWlkPTAsIGdpZD0wLCBtb2RlPTAxMDA2MDAsIHNpemU9NDA5NikKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDI4ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNDcgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA1MyAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgOTQgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDc2ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgMzggKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDMzICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNDAgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA3MyAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNTUgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAyNCAodWlkPTAsIGdpZD0wLCBtb2RlPTAxMDA2MDAsIHNpemU9NDA5NikKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDU5ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLgorCitNb3Zpbmcgam91cm5hbCBmcm9tIC9qb3VybmFsIHRvIGhpZGRlbiBpbm9kZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogNTMvMjA0OCBmaWxlcyAoMS45JSBub24tY29udGlndW91cyksIDE0MDkvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfam91cm5hbC9leHBlY3QuMiBiL3Rlc3RzL2Zfam91cm5hbC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2M1MmY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9qb3VybmFsL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogNTMvMjA0OCBmaWxlcyAoMS45JSBub24tY29udGlndW91cyksIDE0MDkvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfam91cm5hbC9pbWFnZS5neiBiL3Rlc3RzL2Zfam91cm5hbC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTJkOWVjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9qb3VybmFsL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfam91cm5hbC9uYW1lIGIvdGVzdHMvZl9qb3VybmFsL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlMjMyMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfam91cm5hbC9uYW1lCkBAIC0wLDAgKzEgQEAKK3JlY292ZXIgam91cm5hbCBmcm9tIGNvcnJ1cHRlZCBpbm9kZSB0YWJsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9sb3RzYmFkL2V4cGVjdC4xIGIvdGVzdHMvZl9sb3RzYmFkL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZThhMjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2xvdHNiYWQvZXhwZWN0LjEKQEAgLTAsMCArMSw2MSBAQAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxMyBpcyB0b28gYmlnLiAgVHJ1bmNhdGU/IHllcworCitCbG9jayAjMTY1ODA4NzYgKDc0KSBjYXVzZXMgZGlyZWN0b3J5IHRvIGJlIHRvbyBiaWcuICBDTEVBUkVELgorSW5vZGUgMTMsIGlfc2l6ZSBpcyAxNTM2MCwgc2hvdWxkIGJlIDEyMjg4LiAgRml4PyB5ZXMKKworSW5vZGUgMTMsIGlfYmxvY2tzIGlzIDMyLCBzaG91bGQgYmUgMzAuICBGaXg/IHllcworCitJbm9kZSAxMiBoYXMgaWxsZWdhbCBibG9jayhzKS4gIENsZWFyPyB5ZXMKKworSWxsZWdhbCBibG9jayAjMTIgKDc3ODM5ODgxOCkgaW4gaW5vZGUgMTIuICBDTEVBUkVELgorSWxsZWdhbCBibG9jayAjMTMgKDE3Njg0NDQ5NjApIGluIGlub2RlIDEyLiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzE0ICgxNzUyMzc1NDExKSBpbiBpbm9kZSAxMi4gIENMRUFSRUQuCitJbGxlZ2FsIGJsb2NrICMxNSAoMTY4NDgyOTU1MSkgaW4gaW5vZGUgMTIuICBDTEVBUkVELgorSWxsZWdhbCBibG9jayAjMTYgKDE4ODYzNDkzNDQpIGluIGlub2RlIDEyLiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzE3ICgxODE5NjMzMjUzKSBpbiBpbm9kZSAxMi4gIENMRUFSRUQuCitJbGxlZ2FsIGJsb2NrICMxOCAoMTY2MzA3MjYyMCkgaW4gaW5vZGUgMTIuICBDTEVBUkVELgorSWxsZWdhbCBibG9jayAjMTkgKDE3MzUyODcxNDQpIGluIGlub2RlIDEyLiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzIwICgxMzEwNzMxODc3KSBpbiBpbm9kZSAxMi4gIENMRUFSRUQuCitJbGxlZ2FsIGJsb2NrICMyMSAoNTYwMjk3MDcxKSBpbiBpbm9kZSAxMi4gIENMRUFSRUQuCitJbGxlZ2FsIGJsb2NrICMyMiAoNTQzNTEyMzUyKSBpbiBpbm9kZSAxMi4gIENMRUFSRUQuCitUb28gbWFueSBpbGxlZ2FsIGJsb2NrcyBpbiBpbm9kZSAxMi4KK0NsZWFyIGlub2RlPyB5ZXMKKworUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorRW50cnkgJ3Rlcm1jYXAnIGluIC8gKDIpIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSAxMi4gIENsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK0lub2RlIDIgcmVmIGNvdW50IGlzIDUsIHNob3VsZCBiZSA0LiAgRml4PyB5ZXMKKworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDI3LS00MSkgLSg0NC0tNDUpIC0oNzQtLTkwKQorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg5LCBjb3VudGVkPTQzKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg5LCBjb3VudGVkPTQzKS4KK0ZpeD8geWVzCisKK0lub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogIC0xMiAtMTQKK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMTgsIGNvdW50ZWQ9MjApLgorRml4PyB5ZXMKKworRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg0LCBjb3VudGVkPTMpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDE4LCBjb3VudGVkPTIwKS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA1Ny8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2xvdHNiYWQvZXhwZWN0LjIgYi90ZXN0cy9mX2xvdHNiYWQvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGExMjA4ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbG90c2JhZC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNTcvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9sb3RzYmFkL2ltYWdlLmd6IGIvdGVzdHMvZl9sb3RzYmFkL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZDVkMWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2xvdHNiYWQvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9sb3RzYmFkL25hbWUgYi90ZXN0cy9mX2xvdHNiYWQvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmI3N2MxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9sb3RzYmFkL25hbWUKQEAgLTAsMCArMSBAQAordG9vIG1hbnkgaWxsZWdhbCBibG9ja3MgaW4gaW5vZGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfbHBmL2V4cGVjdC4xIGIvdGVzdHMvZl9scGYvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYyODUzYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbHBmL2V4cGVjdC4xCkBAIC0wLDAgKzEsNDggQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTMgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIEZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CisvbG9zdCtmb3VuZCBub3QgZm91bmQuICBDcmVhdGU/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1VuYXR0YWNoZWQgaW5vZGUgMTMKK0Nvbm5lY3QgdG8gL2xvc3QrZm91bmQ/IHllcworCitJbm9kZSAxMyByZWYgY291bnQgaXMgMiwgc2hvdWxkIGJlIDEuICBGaXg/IHllcworCitVbmF0dGFjaGVkIGlub2RlIDE0CitDb25uZWN0IHRvIC9sb3N0K2ZvdW5kPyB5ZXMKKworSW5vZGUgMTQgcmVmIGNvdW50IGlzIDIsIHNob3VsZCBiZSAxLiAgRml4PyB5ZXMKKworVW5hdHRhY2hlZCBpbm9kZSAxNQorQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK0lub2RlIDE1IHJlZiBjb3VudCBpcyAyLCBzaG91bGQgYmUgMS4gIEZpeD8geWVzCisKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgKygyMi0tMjMpICs0OSArKDU3LS01OCkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMjQsIGNvdW50ZWQ9MzMpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDM4LCBjb3VudGVkPTMzKS4KK0ZpeD8geWVzCisKK0lub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogICsxMworRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgxLCBjb3VudGVkPTApLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDEsIGNvdW50ZWQ9MCkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE2LzE2IGZpbGVzICgxMi41JSBub24tY29udGlndW91cyksIDY3LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfbHBmL2V4cGVjdC4yIGIvdGVzdHMvZl9scGYvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYxMTBlZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbHBmL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTYvMTYgZmlsZXMgKDEyLjUlIG5vbi1jb250aWd1b3VzKSwgNjcvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9scGYvaW1hZ2UuZ3ogYi90ZXN0cy9mX2xwZi9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTcxYmNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9scGYvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9scGYvbmFtZSBiL3Rlc3RzL2ZfbHBmL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMyZGJhYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbHBmL25hbWUKQEAgLTAsMCArMSBAQAorbWlzc2luZyBsb3N0K2ZvdW5kCmRpZmYgLS1naXQgYS90ZXN0cy9mX2xwZjIvZXhwZWN0LjEgYi90ZXN0cy9mX2xwZjIvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMzNTg2YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbHBmMi9leHBlY3QuMQpAQCAtMCwwICsxLDQxIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitVbmNvbm5lY3RlZCBkaXJlY3RvcnkgaW5vZGUgMTIgKC8/Pz8pCitDb25uZWN0IHRvIC9sb3N0K2ZvdW5kPyB5ZXMKKworL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgQ3JlYXRlPyB5ZXMKKworVW5jb25uZWN0ZWQgZGlyZWN0b3J5IGlub2RlIDEzICgvPz8/KQorQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworSW5vZGUgMiByZWYgY291bnQgaXMgNCwgc2hvdWxkIGJlIDMuICBGaXg/IHllcworCitJbm9kZSAxMiByZWYgY291bnQgaXMgMywgc2hvdWxkIGJlIDIuICBGaXg/IHllcworCitJbm9kZSAxMyByZWYgY291bnQgaXMgMywgc2hvdWxkIGJlIDIuICBGaXg/IHllcworCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0oOS0tMTkpCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDc3LCBjb3VudGVkPTg5KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3NywgY291bnRlZD04OSkuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDIsIGNvdW50ZWQ9MykuCitGaXg/IHllcworCitEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDUsIGNvdW50ZWQ9NCkuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoMiwgY291bnRlZD0zKS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTMvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2xwZjIvZXhwZWN0LjIgYi90ZXN0cy9mX2xwZjIvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU1MTkzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbHBmMi9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEzLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTEvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9scGYyL2ltYWdlLmd6IGIvdGVzdHMvZl9scGYyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MDNmYjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2xwZjIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9scGYyL25hbWUgYi90ZXN0cy9mX2xwZjIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2RhMzE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9scGYyL25hbWUKQEAgLTAsMCArMSBAQAorY3JlYXRlIGxvc3QrZm91bmQgYW5kIHJlY29ubmVjdCBsb3N0IGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9scGZmaWxlL2V4cGVjdC4xIGIvdGVzdHMvZl9scGZmaWxlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Y2NlNGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2xwZmZpbGUvZXhwZWN0LjEKQEAgLTAsMCArMSwzMiBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorL2xvc3QrZm91bmQgaXMgbm90IGEgZGlyZWN0b3J5IChpbm89MTEpCitVbmxpbms/IHllcworCisvbG9zdCtmb3VuZCBub3QgZm91bmQuICBDcmVhdGU/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1VuYXR0YWNoZWQgaW5vZGUgMTEKK0Nvbm5lY3QgdG8gL2xvc3QrZm91bmQ/IHllcworCitVbmF0dGFjaGVkIGlub2RlIDEyCitDb25uZWN0IHRvIC9sb3N0K2ZvdW5kPyB5ZXMKKworSW5vZGUgMTIgcmVmIGNvdW50IGlzIDIsIHNob3VsZCBiZSAxLiAgRml4PyB5ZXMKKworVW5hdHRhY2hlZCBpbm9kZSAxMworQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK0lub2RlIDEzIHJlZiBjb3VudCBpcyAyLCBzaG91bGQgYmUgMS4gIEZpeD8geWVzCisKK1VuYXR0YWNoZWQgaW5vZGUgMTQKK0Nvbm5lY3QgdG8gL2xvc3QrZm91bmQ/IHllcworCitJbm9kZSAxNCByZWYgY291bnQgaXMgMiwgc2hvdWxkIGJlIDEuICBGaXg/IHllcworCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTUvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxNS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX2xwZmZpbGUvZXhwZWN0LjIgYi90ZXN0cy9mX2xwZmZpbGUvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVlODMyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbHBmZmlsZS9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE1LzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTUvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9scGZmaWxlL2ltYWdlLmd6IGIvdGVzdHMvZl9scGZmaWxlL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1Mjc4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX2xwZmZpbGUvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9scGZmaWxlL25hbWUgYi90ZXN0cy9mX2xwZmZpbGUvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGU0MGI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9scGZmaWxlL25hbWUKQEAgLTAsMCArMSBAQAorbG9zdCtmb3VuZCBpcyBub3QgYSBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfbWVzc3lfaW5vZGUvZXhwZWN0LjEgYi90ZXN0cy9mX21lc3N5X2lub2RlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOGYxZGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX21lc3N5X2lub2RlL2V4cGVjdC4xCkBAIC0wLDAgKzEsMzggQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTQgaGFzIGlsbGVnYWwgYmxvY2socykuICBDbGVhcj8geWVzCisKK0lsbGVnYWwgYmxvY2sgIzIgKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzMgKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzQgKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzUgKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzYgKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzcgKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzggKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzkgKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzEwICg0Mjk0OTAxNzYwKSBpbiBpbm9kZSAxNC4gIENMRUFSRUQuCitJbm9kZSAxNCwgaV9zaXplIGlzIDE4NDQ2NDYyNTk4NzMyODQ5MjkxLCBzaG91bGQgYmUgMjA0OC4gIEZpeD8geWVzCisKK0lub2RlIDE0LCBpX2Jsb2NrcyBpcyAxOCwgc2hvdWxkIGJlIDQuICBGaXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK2lfZmlsZV9hY2wgZm9yIGlub2RlIDE0ICgvTUFLRURFVikgaXMgNDI5NDkwMTc2MCwgc2hvdWxkIGJlIHplcm8uCitDbGVhcj8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0oNDMtLTQ5KQorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg2OCwgY291bnRlZD03NSkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoNjgsIGNvdW50ZWQ9NzUpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAyOS8zMiBmaWxlcyAoMy40JSBub24tY29udGlndW91cyksIDI1LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfbWVzc3lfaW5vZGUvZXhwZWN0LjIgYi90ZXN0cy9mX21lc3N5X2lub2RlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZmZiMDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX21lc3N5X2lub2RlL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMjkvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX21lc3N5X2lub2RlL2ltYWdlLmd6IGIvdGVzdHMvZl9tZXNzeV9pbm9kZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzBhNjg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9tZXNzeV9pbm9kZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX21lc3N5X2lub2RlL25hbWUgYi90ZXN0cy9mX21lc3N5X2lub2RlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE0ODVlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbWVzc3lfaW5vZGUvbmFtZQpAQCAtMCwwICsxIEBACitiYWQgZmlsZSBhbmQgZGlyZWN0b3J5IGFjbCBwb2ludGVycwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9taXNzX2Jsa19ibWFwL2V4cGVjdC4xIGIvdGVzdHMvZl9taXNzX2Jsa19ibWFwL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OGI2MWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX21pc3NfYmxrX2JtYXAvZXhwZWN0LjEKQEAgLTAsMCArMSwyMCBAQAorZXh0MmZzX2NoZWNrX2Rlc2M6IENvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBibG9jayBiaXRtYXAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUmVsb2NhdGluZyBncm91cCAwJ3MgYmxvY2sgYml0bWFwIHRvIDIuLi4KK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgKygwLS0xMCkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoOTAsIGNvdW50ZWQ9ODkpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDkwLCBjb3VudGVkPTg5KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvNjQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX21pc3NfYmxrX2JtYXAvZXhwZWN0LjIgYi90ZXN0cy9mX21pc3NfYmxrX2JtYXAvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmOTJlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbWlzc19ibGtfYm1hcC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzY0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTEvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9taXNzX2Jsa19ibWFwL2ltYWdlLmd6IGIvdGVzdHMvZl9taXNzX2Jsa19ibWFwL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MGRiZTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX21pc3NfYmxrX2JtYXAvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9taXNzX2Jsa19ibWFwL25hbWUgYi90ZXN0cy9mX21pc3NfYmxrX2JtYXAvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDU5NDQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9taXNzX2Jsa19ibWFwL25hbWUKQEAgLTAsMCArMSBAQAorbWlzc2luZyBibG9jayBiaXRtYXAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfbWlzc19qb3VybmFsL2V4cGVjdC4xIGIvdGVzdHMvZl9taXNzX2pvdXJuYWwvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjOGIzOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbWlzc19qb3VybmFsL2V4cGVjdC4xCkBAIC0wLDAgKzEsMjggQEAKK1N1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgOCkuCitDbGVhcj8geWVzCisKKyoqKiBleHQzIGpvdXJuYWwgaGFzIGJlZW4gZGVsZXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDIgb25seSAqKioKKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0oNTAtLTEwNzkpCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDk2OCwgY291bnRlZD0xOTk4KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg5NjgsIGNvdW50ZWQ9MTk5OCkuCitGaXg/IHllcworCitSZWNyZWF0ZSBqb3VybmFsPyB5ZXMKKworQ3JlYXRpbmcgam91cm5hbCAoMTAyNCBibG9ja3MpOiAgRG9uZS4KKworKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEwNzkvMjA0OCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfbWlzc19qb3VybmFsL2V4cGVjdC4yIGIvdGVzdHMvZl9taXNzX2pvdXJuYWwvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzMjc2MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbWlzc19qb3VybmFsL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMjU2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTA3OS8yMDQ4IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9taXNzX2pvdXJuYWwvaW1hZ2UuZ3ogYi90ZXN0cy9mX21pc3Nfam91cm5hbC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzRkMzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9taXNzX2pvdXJuYWwvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9taXNzX2pvdXJuYWwvbmFtZSBiL3Rlc3RzL2ZfbWlzc19qb3VybmFsL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5YmU1MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbWlzc19qb3VybmFsL25hbWUKQEAgLTAsMCArMSBAQAorTm9uLWV4aXN0ZW50IGpvdXJuYWwgaW5vZGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfbWlzc3RhYmxlL2V4cGVjdC4xIGIvdGVzdHMvZl9taXNzdGFibGUvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThjZjI2NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbWlzc3RhYmxlL2V4cGVjdC4xCkBAIC0wLDAgKzEsNDkgQEAKK2V4dDJmc19jaGVja19kZXNjOiBDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgdGFibGUKKy4uL2UyZnNjay9lMmZzY2s6IEdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uCitJbm9kZSB0YWJsZSBmb3IgZ3JvdXAgMSBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgMCkKK1dBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuCitSZWxvY2F0ZT8geWVzCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUmVsb2NhdGluZyBncm91cCAxJ3MgaW5vZGUgdGFibGUgdG8gODE5Ny4uLgorUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorRW50cnkgJ2V0YycgaW4gLyAoMikgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlIDE1MDUuICBDbGVhcj8geWVzCisKK0VudHJ5ICdjYWNoZScgaW4gLyAoMikgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlIDE1MTQuICBDbGVhcj8geWVzCisKK0VudHJ5ICdhJyBpbiAvICgyKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgMTUxNS4gIENsZWFyPyB5ZXMKKworRW50cnkgJ2InIGluIC8gKDIpIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSAxNTE2LiAgQ2xlYXI/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworSW5vZGUgMiByZWYgY291bnQgaXMgOCwgc2hvdWxkIGJlIDQuICBGaXg/IHllcworCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0oODM4NS0tODQwNSkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzk4NywgY291bnRlZD03OTg0KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICgxMTYwMiwgY291bnRlZD0xMTU5OSkuCitGaXg/IHllcworCitJbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDE1MDUtLTE1MTYpCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDE0OTMsIGNvdW50ZWQ9MTQ4OSkuCitGaXg/IHllcworCitEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDIsIGNvdW50ZWQ9MykuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoMjk5NywgY291bnRlZD0yOTkzKS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTUvMzAwOCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDQwMS8xMjAwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfbWlzc3RhYmxlL2V4cGVjdC4yIGIvdGVzdHMvZl9taXNzdGFibGUvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThjZDIxYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbWlzc3RhYmxlL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTUvMzAwOCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDQwMS8xMjAwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfbWlzc3RhYmxlL2ltYWdlLmd6IGIvdGVzdHMvZl9taXNzdGFibGUvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJhY2E5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbWlzc3RhYmxlL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfbWlzc3RhYmxlL25hbWUgYi90ZXN0cy9mX21pc3N0YWJsZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYTFhZGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX21pc3N0YWJsZS9uYW1lCkBAIC0wLDAgKzEgQEAKK21pc3NpbmcgaW5vZGUgdGFibGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfbWtlMmZzMmIvZXhwZWN0LjEgYi90ZXN0cy9mX21rZTJmczJiL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZmVkY2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX21rZTJmczJiL2V4cGVjdC4xCkBAIC0wLDAgKzEsMjUgQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUm9vdCBpbm9kZSBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICBGaXg/IHllcworCitJbm9kZSAxMSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgRml4PyB5ZXMKKworSW5vZGUgMTUgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIEZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1VuYXR0YWNoZWQgemVyby1sZW5ndGggaW5vZGUgMTUuICBDbGVhcj8geWVzCisKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgxOCwgY291bnRlZD0xNykuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoMTgsIGNvdW50ZWQ9MTcpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxNS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI1LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfbWtlMmZzMmIvZXhwZWN0LjIgYi90ZXN0cy9mX21rZTJmczJiL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNDU1ZDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX21rZTJmczJiL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTUvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX21rZTJmczJiL2ltYWdlLmd6IGIvdGVzdHMvZl9ta2UyZnMyYi9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yjc0MTJjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9ta2UyZnMyYi9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX21rZTJmczJiL25hbWUgYi90ZXN0cy9mX21rZTJmczJiL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYyMjAyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbWtlMmZzMmIvbmFtZQpAQCAtMCwwICsxIEBACitta2UyZnMgdmVyc2lvbiAwLjJiIGNyZWF0ZWQgZmlsZXN5c3RlbQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9tbXAvbmFtZSBiL3Rlc3RzL2ZfbW1wL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBkNjZkNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbW1wL25hbWUKQEAgLTAsMCArMSBAQAorZGlzYWJsZSBNTVAgd2l0aCB0dW5lMmZzIGFmdGVyIGUyZnNjayBraWxsZWQKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfbW1wL3NjcmlwdCBiL3Rlc3RzL2ZfbW1wL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmYxNmM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9tbXAvc2NyaXB0CkBAIC0wLDAgKzEsNzUgQEAKK0ZTQ0tfT1BUPS15ZgorCisjIHVzZSBjdXJyZW50IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIC90bXAgYmVjYXNlIHRtcGZzIGRvZXNuJ3Qgc3VwcG9ydCBESU8KK3JtIC1mICRUTVBGSUxFCitUTVBGSUxFPSQobWt0ZW1wIC4vdG1wLSR0ZXN0X25hbWUuWFhYWFhYKQorCitzdGF0IC1mICRUTVBGSUxFIHwgZ3JlcCAtcSAiVHlwZTogdG1wZnMiCitpZiBbICQ/ID0gMCBdOyB0aGVuCisJcm0gLWYgJFRNUEZJTEUKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCBmb3IgdG1wZnMgKG5vIE9fRElSRUNUKSIKKwlyZXR1cm4gMAorZmkKKworZWNobyAibWFrZSB0aGUgdGVzdCBpbWFnZSAuLi4iID4gJHRlc3RfbmFtZS5sb2cKKyRNS0UyRlMgLXEgLUYgLW8gTGludXggLWIgNDA5NiAtTyBtbXAgLUUgbW1wX3VwZGF0ZV9pbnRlcnZhbD0xICRUTVBGSUxFIDEwMCA+PiAkdGVzdF9uYW1lLmxvZyAyPiYxCitzdGF0dXM9JD8KK2lmIFsgIiRzdGF0dXMiICE9IDAgXSA7IHRoZW4KKwllY2hvICJta2UyZnMgLU8gbW1wIGZhaWxlZCIgPiAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJcmV0dXJuICRzdGF0dXMKK2ZpCisKK2tpbGxfZGVidWdmcygpIHsKKwl0cmFwIDAKKwlQSUQ9JChwcyAtbyBwaWQsY29tbWFuZCB8IGdyZXAgLXYgZ3JlcCB8CisJCWdyZXAgImRlYnVnZnMgLXcgJFRNUEZJTEUiIHwgYXdrICJ7IHByaW50IFwkMSB9IikKKwlbICJ4JFBJRCIgIT0gIngiIF0gJiYga2lsbCAtOSAkUElECit9CisKKyMgdGhpcyB3aWxsIGNhdXNlIGRlYnVnZnMgdG8gY3JlYXRlIHRoZSAkdGVzdF9uYW1lLm1hcmsgZmlsZSBvbmNlIGl0IGhhcworIyBwYXNzZWQgdGhlIE1NUCBzdGFydHVwLCB0aGVuIGNvbnRpbnVlIHJlYWRpbmcgaW5wdXQgdW50aWwgaXQgaXMga2lsbGVkCitNQVJLRklMRT0kdGVzdF9uYW1lLm5ldworcm0gLWYgJE1BUktGSUxFCit0cmFwIGtpbGxfZGVidWdmcyBFWElUCitlY2hvICJzZXQgbW1wIHNlcXVlbmNlIHRvIEVYVDJfTU1QX1NFUV9GU0NLLi4uIiA+PiAkdGVzdF9uYW1lLmxvZworKCB7IGVjaG8gZHVtcF9tbXA7IGVjaG8gImR1bXBfaW5vZGUgPDI+ICRNQVJLRklMRSI7IGNhdCAvZGV2L3plcm87IH0gfAorCSRERUJVR0ZTIC13ICRUTVBGSUxFID4+ICR0ZXN0X25hbWUubG9nIDI+JjEgJiApID4gL2Rldi9udWxsIDI+JjEgJgorZWNobyAid2FpdCB1bnRpbCBkZWJ1Z2ZzIGhhcyBzdGFydGVkIC4uLiIgPj4gJHRlc3RfbmFtZS5sb2cKK3doaWxlIFsgISAtZSAkTUFSS0ZJTEUgXTsgZG8KKwlzbGVlcCAxCitkb25lCitybSAtZiAkTUFSS0ZJTEUKK2VjaG8gImtpbGwgZGVidWdmcyBhYnJ1cHRseSAoc2ltdWxhdGVzIGUyZnNjayBmYWlsdXJlKSAuLi4iID4+ICR0ZXN0X25hbWUubG9nCitraWxsX2RlYnVnZnMKKworCitlY2hvICJlMmZzY2sgKHNob3VsZCBmYWlsIG1tcF9zZXEgPSBFWFQyX01NUF9TRVFfRlNDSykgLi4uIiA+PiAkdGVzdF9uYW1lLmxvZworJEZTQ0sgJEZTQ0tfT1BUICRUTVBGSUxFID4+ICR0ZXN0X25hbWUubG9nIDI+JjEKK3N0YXR1cz0kPworaWYgWyAiJHN0YXR1cyIgPSAwIF0gOyB0aGVuCisJZWNobyAiZTJmc2NrIHdpdGggTU1QIGFzIEVYVDJfTU1QX1NFUV9GU0NLIHJhbiEiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAxCitmaQorCitlY2hvICJjbGVhciBtbXBfc2VxIHdpdGggdHVuZTJmcyAuLi4iID4+ICR0ZXN0X25hbWUubG9nCiskVFVORTJGUyAtZiAtRSBjbGVhcl9tbXAgJFRNUEZJTEUgPj4gJHRlc3RfbmFtZS5sb2cgMj4mMQorc3RhdHVzPSQ/CitpZiBbICIkc3RhdHVzIiAhPSAwIF0gOyB0aGVuCisJZWNobyAidHVuZTJmcyBjbGVhcmluZyBFWFQyX01NUF9TRVFfRlNDSyBmYWlsZWQiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAxCitmaQorCitlY2hvICJydW4gZTJmc2NrIGFnYWluIChzaG91bGQgcGFzcyB3aXRoIGNsZWFuIG1tcF9zZXEpIC4uLiIgPj4gJHRlc3RfbmFtZS5sb2cKKyRGU0NLICRGU0NLX09QVCAkVE1QRklMRSA+PiAkdGVzdF9uYW1lLmxvZyAyPiYxCitzdGF0dXM9JD8KK2lmIFsgIiRzdGF0dXMiICE9IDAgXSA7IHRoZW4KKwllY2hvICJlMmZzY2sgYWZ0ZXIgY2xlYXJpbmcgRVhUMl9NTVBfU0VRX0ZTQ0sgZmFpbGVkIj4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAkc3RhdHVzCitmaQorCitlY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCitybSAtZiAkVE1QRklMRQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9tbXBfZ2FyYmFnZS9leHBlY3QuMSBiL3Rlc3RzL2ZfbW1wX2dhcmJhZ2UvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhZGQxMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbW1wX2dhcmJhZ2UvZXhwZWN0LjEKQEAgLTAsMCArMSw5IEBACitTdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gIEZpeD8geWVzCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzY0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTMvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9tbXBfZ2FyYmFnZS9leHBlY3QuMiBiL3Rlc3RzL2ZfbW1wX2dhcmJhZ2UvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYzMDAwMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbW1wX2dhcmJhZ2UvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS82NCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEzLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfbW1wX2dhcmJhZ2UvbmFtZSBiL3Rlc3RzL2ZfbW1wX2dhcmJhZ2UvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2UwYjE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9tbXBfZ2FyYmFnZS9uYW1lCkBAIC0wLDAgKzEgQEAKK3JlcGFpciBNTVAgd2hlbiBpdCBpcyBjb3JydXB0ZWQKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfbW1wX2dhcmJhZ2Uvc2NyaXB0IGIvdGVzdHMvZl9tbXBfZ2FyYmFnZS9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0NTFhNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfbW1wX2dhcmJhZ2Uvc2NyaXB0CkBAIC0wLDAgKzEsMjggQEAKK0ZTQ0tfT1BUPS15ZgorCisjIHVzZSBjdXJyZW50IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIC90bXAgYmVjYXNlIHRtcGZzIGRvZXNuJ3Qgc3VwcG9ydCBESU8KK3JtIC1mICRUTVBGSUxFCitUTVBGSUxFPSQobWt0ZW1wIC4vdG1wLSR0ZXN0X25hbWUuWFhYWFhYKQorCitzdGF0IC1mICRUTVBGSUxFIHwgZ3JlcCAtcSAiVHlwZTogdG1wZnMiCitpZiBbICQ/ID0gMCBdIDsgdGhlbgorCXJtIC1mICRUTVBGSUxFCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQgZm9yIHRtcGZzIChubyBPX0RJUkVDVCkiCisJcmV0dXJuIDAKK2ZpCisKK2VjaG8gIm1ha2UgdGhlIHRlc3QgaW1hZ2UgLi4uIiA+ICR0ZXN0X25hbWUubG9nCiskTUtFMkZTIC1xIC1GIC1vIExpbnV4IC1iIDQwOTYgLU8gbW1wIC1FIG1tcF91cGRhdGVfaW50ZXJ2YWw9MSAkVE1QRklMRSAxMDAgPj4gJHRlc3RfbmFtZS5sb2cgMj4mMQorc3RhdHVzPSQ/CitpZiBbICIkc3RhdHVzIiAhPSAwIF0gOyB0aGVuCisJZWNobyAibWtlMmZzIC1PIG1tcCBmYWlsZWQiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAkc3RhdHVzCitmaQorCisjIGNyZWF0ZSBhIGNvcnJ1cHRlZCBpbWFnZQorZWNobyAibW9kaWZ5IHRoZSBtbXAgc2VxdWVuY2UgLi4uIiA+PiAkdGVzdF9uYW1lLmxvZworJERFQlVHRlMgLXcgLVIgInNldF9tbXBfdmFsdWUgbWFnaWMgMHgxMjM0NTY3OCIgJFRNUEZJTEUgPj4gJHRlc3RfbmFtZS5sb2cgMj4mMQorCitTS0lQX0dVTlpJUD10cnVlCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfbm9yb290L2V4cGVjdC4xIGIvdGVzdHMvZl9ub3Jvb3QvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JkZDdjYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfbm9yb290L2V4cGVjdC4xCkBAIC0wLDAgKzEsMzkgQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTUgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIEZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorRW50cnkgJy4uJyBpbiAvbG9zdCtmb3VuZCAoMTEpIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSAyLiAgQ2xlYXI/IHllcworCitFbnRyeSAnLi4nIGluIC9mb28gKDEyKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgMi4gIENsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitSb290IGlub2RlIG5vdCBhbGxvY2F0ZWQuICBBbGxvY2F0ZT8geWVzCisKK1VuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAxMSAoLi4uKQorQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKKy9sb3N0K2ZvdW5kIG5vdCBmb3VuZC4gIENyZWF0ZT8geWVzCisKK1VuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAxMiAoLi4uKQorQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworSW5vZGUgMTEgcmVmIGNvdW50IGlzIDMsIHNob3VsZCBiZSAyLiAgRml4PyB5ZXMKKworSW5vZGUgMTIgcmVmIGNvdW50IGlzIDQsIHNob3VsZCBiZSAzLiAgRml4PyB5ZXMKKworVW5hdHRhY2hlZCB6ZXJvLWxlbmd0aCBpbm9kZSAxNS4gIENsZWFyPyB5ZXMKKworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDE3LCBjb3VudGVkPTE2KS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nICgxNywgY291bnRlZD0xNikuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE2LzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjYvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9ub3Jvb3QvZXhwZWN0LjIgYi90ZXN0cy9mX25vcm9vdC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWE1YmM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9ub3Jvb3QvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNi8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI2LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfbm9yb290L2ltYWdlLmd6IGIvdGVzdHMvZl9ub3Jvb3QvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4N2U5OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfbm9yb290L2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfbm9yb290L25hbWUgYi90ZXN0cy9mX25vcm9vdC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MGViYzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX25vcm9vdC9uYW1lCkBAIC0wLDAgKzEgQEAKK21pc3Npbmcgcm9vdCBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfb2tncm91cC9leHBlY3QuMSBiL3Rlc3RzL2Zfb2tncm91cC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDI5NzQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9va2dyb3VwL2V4cGVjdC4xCkBAIC0wLDAgKzEsOSBAQAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMjA0OCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI3NC84MTkzIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9va2dyb3VwL2V4cGVjdC4yIGIvdGVzdHMvZl9va2dyb3VwL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ODU2YzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX29rZ3JvdXAvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8yMDQ4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjc0LzgxOTMgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX29rZ3JvdXAvaW1hZ2UuZ3ogYi90ZXN0cy9mX29rZ3JvdXAvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZiNjdjNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfb2tncm91cC9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX29rZ3JvdXAvbmFtZSBiL3Rlc3RzL2Zfb2tncm91cC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYTY2YWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX29rZ3JvdXAvbmFtZQpAQCAtMCwwICsxIEBACis4MTkzIGJsb2NrIGxvbmcgZmlsZXN5c3RlbQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9vcnBoYW4vZXhwZWN0LjEgYi90ZXN0cy9mX29ycGhhbi9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGRjMWY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9vcnBoYW4vZXhwZWN0LjEKQEAgLTAsMCArMSwxNCBAQAorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgMTUgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3NTUsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDE3ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDY0NCwgc2l6ZT0wKQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgMTYgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3NTUsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDE0ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDY0NCwgc2l6ZT02OSkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDEzICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDQwNzU1LCBzaXplPTEwMjQpCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMi8yMDQ4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTMwMy84MTkyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9vcnBoYW4vZXhwZWN0LjIgYi90ZXN0cy9mX29ycGhhbi9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTljOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9vcnBoYW4vZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8yMDQ4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTMwMy84MTkyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9vcnBoYW4vaW1hZ2UuZ3ogYi90ZXN0cy9mX29ycGhhbi9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWRhNDM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9vcnBoYW4vaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9vcnBoYW4vbmFtZSBiL3Rlc3RzL2Zfb3JwaGFuL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5ZjNkNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfb3JwaGFuL25hbWUKQEAgLTAsMCArMSBAQAorY2xlYXJpbmcgb3JwaGFuIGlub2RlcwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9vcnBoYW5fZG90ZG90X2Z0L2V4cGVjdC4xIGIvdGVzdHMvZl9vcnBoYW5fZG90ZG90X2Z0L2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTM3M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX29ycGhhbl9kb3Rkb3RfZnQvZXhwZWN0LjEKQEAgLTAsMCArMSw1NiBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8pIGlub2RlIDEyIGhhcyBub24temVybyBzaXplLiAgRml4PyB5ZXMKKworSW5vZGUgMTIsIGlfYmxvY2tzIGlzIDIsIHNob3VsZCBiZSAwLiAgRml4PyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitFbnRyeSAnZGlyJyBpbiAvICgyKSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgMiwgc2hvdWxkIGJlIDYpLgorRml4PyB5ZXMKKworRW50cnkgJy4uJyBpbiA8MTI+LzwxMz4gKDEzKSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgMiwgc2hvdWxkIGJlIDYpLgorRml4PyB5ZXMKKworRW50cnkgJy4uJyBpbiA8MTI+LzwxND4gKDE0KSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgMiwgc2hvdWxkIGJlIDYpLgorRml4PyB5ZXMKKworRW50cnkgJy4uJyBpbiA8MTI+LzwxNT4gKDE1KSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgMiwgc2hvdWxkIGJlIDYpLgorRml4PyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitVbmNvbm5lY3RlZCBkaXJlY3RvcnkgaW5vZGUgMTMgKDwxMj4vPDEzPikKK0Nvbm5lY3QgdG8gL2xvc3QrZm91bmQ/IHllcworCitVbmNvbm5lY3RlZCBkaXJlY3RvcnkgaW5vZGUgMTQgKDwxMj4vPDE0PikKK0Nvbm5lY3QgdG8gL2xvc3QrZm91bmQ/IHllcworCitVbmNvbm5lY3RlZCBkaXJlY3RvcnkgaW5vZGUgMTUgKDwxMj4vPDE1PikKK0Nvbm5lY3QgdG8gL2xvc3QrZm91bmQ/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK0lub2RlIDIgcmVmIGNvdW50IGlzIDQsIHNob3VsZCBiZSAzLiAgRml4PyB5ZXMKKworSW5vZGUgMTIgcmVmIGNvdW50IGlzIDIsIHNob3VsZCBiZSAxLiAgRml4PyB5ZXMKKworSW5vZGUgMTMgcmVmIGNvdW50IGlzIDMsIHNob3VsZCBiZSAyLiAgRml4PyB5ZXMKKworSW5vZGUgMTQgcmVmIGNvdW50IGlzIDMsIHNob3VsZCBiZSAyLiAgRml4PyB5ZXMKKworSW5vZGUgMTUgcmVmIGNvdW50IGlzIDMsIHNob3VsZCBiZSAyLiAgRml4PyB5ZXMKKworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtMjMKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzMsIGNvdW50ZWQ9NzQpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDczLCBjb3VudGVkPTc0KS4KK0ZpeD8geWVzCisKK0RpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNiwgY291bnRlZD01KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTUvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNi8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX29ycGhhbl9kb3Rkb3RfZnQvZXhwZWN0LjIgYi90ZXN0cy9mX29ycGhhbl9kb3Rkb3RfZnQvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2OGU3OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfb3JwaGFuX2RvdGRvdF9mdC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE1LzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjYvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9vcnBoYW5fZG90ZG90X2Z0L2ltYWdlLmd6IGIvdGVzdHMvZl9vcnBoYW5fZG90ZG90X2Z0L2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOTFhNjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX29ycGhhbl9kb3Rkb3RfZnQvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9vcnBoYW5fZG90ZG90X2Z0L25hbWUgYi90ZXN0cy9mX29ycGhhbl9kb3Rkb3RfZnQvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzYyZTllCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9vcnBoYW5fZG90ZG90X2Z0L25hbWUKQEAgLTAsMCArMSBAQAorZmlsZXR5cGUgb2YgLi4gaW4gb3JwaGFuZWQgZGlyZWN0b3JpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfb3JwaGFuX2V4dGVudHNfaW5vZGUvZXhwZWN0LjEgYi90ZXN0cy9mX29ycGhhbl9leHRlbnRzX2lub2RlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYWFiNzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX29ycGhhbl9leHRlbnRzX2lub2RlL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTAgQEAKK1RydW5jYXRpbmcgb3JwaGFuZWQgaW5vZGUgMTIgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjQ0LCBzaXplPTApCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMi8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIxLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfb3JwaGFuX2V4dGVudHNfaW5vZGUvZXhwZWN0LjIgYi90ZXN0cy9mX29ycGhhbl9leHRlbnRzX2lub2RlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZTVkOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX29ycGhhbl9leHRlbnRzX2lub2RlL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTIvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX29ycGhhbl9leHRlbnRzX2lub2RlL2ltYWdlLmd6IGIvdGVzdHMvZl9vcnBoYW5fZXh0ZW50c19pbm9kZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzU3ZmVmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9vcnBoYW5fZXh0ZW50c19pbm9kZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX29ycGhhbl9leHRlbnRzX2lub2RlL25hbWUgYi90ZXN0cy9mX29ycGhhbl9leHRlbnRzX2lub2RlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM0OGVjMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfb3JwaGFuX2V4dGVudHNfaW5vZGUvbmFtZQpAQCAtMCwwICsxIEBACit0cnVuY2F0aW5nIGFuIG9ycGhhbmVkIGV4dGVudC1tYXBwZWQgaW5vZGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfb3JwaGFuX2luZGlyZWN0X2lub2RlL2V4cGVjdC4xIGIvdGVzdHMvZl9vcnBoYW5faW5kaXJlY3RfaW5vZGUvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE0YTY4OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfb3JwaGFuX2luZGlyZWN0X2lub2RlL2V4cGVjdC4xCkBAIC0wLDAgKzEsMyBAQAordGVzdF9maWxlc3lzOiBUcnVuY2F0aW5nIG9ycGhhbmVkIGlub2RlIDEyICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDY0NCwgc2l6ZT0wKQordGVzdF9maWxlc3lzOiBjbGVhbiwgMTIvMTYgZmlsZXMsIDIxLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfb3JwaGFuX2luZGlyZWN0X2lub2RlL2V4cGVjdC4yIGIvdGVzdHMvZl9vcnBoYW5faW5kaXJlY3RfaW5vZGUvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVlNWQ5NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfb3JwaGFuX2luZGlyZWN0X2lub2RlL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTIvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX29ycGhhbl9pbmRpcmVjdF9pbm9kZS9pbWFnZS5neiBiL3Rlc3RzL2Zfb3JwaGFuX2luZGlyZWN0X2lub2RlL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YjM5MDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX29ycGhhbl9pbmRpcmVjdF9pbm9kZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX29ycGhhbl9pbmRpcmVjdF9pbm9kZS9uYW1lIGIvdGVzdHMvZl9vcnBoYW5faW5kaXJlY3RfaW5vZGUvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGNjYjMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9vcnBoYW5faW5kaXJlY3RfaW5vZGUvbmFtZQpAQCAtMCwwICsxIEBACit0cnVuY2F0aW5nIGFuIG9ycGhhbmVkIGlub2RlIGluIHByZWVuIG1vZGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfb3JwaGFuX2luZGlyZWN0X2lub2RlL3NjcmlwdCBiL3Rlc3RzL2Zfb3JwaGFuX2luZGlyZWN0X2lub2RlL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTNiOTNhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9vcnBoYW5faW5kaXJlY3RfaW5vZGUvc2NyaXB0CkBAIC0wLDAgKzEsMiBAQAorRlNDS19PUFQ9LXAKKy4gJGNtZF9kaXIvcnVuX2UyZnNjawpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9vdmVyZnNibGtzL2V4cGVjdC4xIGIvdGVzdHMvZl9vdmVyZnNibGtzL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YjkzZjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX292ZXJmc2Jsa3MvZXhwZWN0LjEKQEAgLTAsMCArMSwxOSBAQAorZXh0MmZzX2NoZWNrX2Rlc2M6IENvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSBiaXRtYXAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworR3JvdXAgMCdzIGlub2RlIGJpdG1hcCBhdCAzIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suCitSZWxvY2F0ZT8geWVzCisKK1JlbG9jYXRpbmcgZ3JvdXAgMCdzIGlub2RlIGJpdG1hcCBmcm9tIDMgdG8gNC4uLgorUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitJbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDEyLS0yMSkKK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMi8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX292ZXJmc2Jsa3MvZXhwZWN0LjIgYi90ZXN0cy9mX292ZXJmc2Jsa3MvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyMWY4NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfb3ZlcmZzYmxrcy9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjIvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9vdmVyZnNibGtzL2ltYWdlLmd6IGIvdGVzdHMvZl9vdmVyZnNibGtzL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYjZiMmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX292ZXJmc2Jsa3MvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9vdmVyZnNibGtzL25hbWUgYi90ZXN0cy9mX292ZXJmc2Jsa3MvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWI2MDQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9vdmVyZnNibGtzL25hbWUKQEAgLTAsMCArMSBAQAorb3ZlcmxhcHBpbmcgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfcHJlZW4vZXhwZWN0LjEgYi90ZXN0cy9mX3ByZWVuL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMjA1NzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3ByZWVuL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTIgQEAKK3Rlc3RfZmlsZXN5czogTm90ZTogaWYgc2V2ZXJhbCBpbm9kZSBvciBibG9jayBiaXRtYXAgYmxvY2tzIG9yIHBhcnQKK29mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnkKK3J1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiA4MTkzJyBvcHRpb24gZmlyc3QuICBUaGUgcHJvYmxlbQorbWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZAordGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suCisKK3Rlc3RfZmlsZXN5czogQmxvY2sgYml0bWFwIGZvciBncm91cCAwIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAwKQorCisKK3Rlc3RfZmlsZXN5czogVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOyBSVU4gZnNjayBNQU5VQUxMWS4KKwkoaS5lLiwgd2l0aG91dCAtYSBvciAtcCBvcHRpb25zKQorRXhpdCBzdGF0dXMgaXMgNApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9wcmVlbi9leHBlY3QuMiBiL3Rlc3RzL2ZfcHJlZW4vZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmNmNlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfcHJlZW4vZXhwZWN0LjIKQEAgLTAsMCArMSwzMCBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoODA0MiwgY291bnRlZD03NjE0KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMSAoMTcwLCBjb3VudGVkPTE2OSkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoODIxMiwgY291bnRlZD03NzgzKS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMTA1MywgY291bnRlZD0xMDUyKS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMSAoMTA2NCwgY291bnRlZD0xMDYzKS4KK0ZpeD8geWVzCisKK0RpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMSAoMCwgY291bnRlZD0xKS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nICgyMTE3LCBjb3VudGVkPTIxMTUpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMy8yMTI4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNzE3Lzg1MDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX3ByZWVuL2ltYWdlLmd6IGIvdGVzdHMvZl9wcmVlbi9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWE3Y2EwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9wcmVlbi9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX3ByZWVuL25hbWUgYi90ZXN0cy9mX3ByZWVuL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhM2E0ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfcHJlZW4vbmFtZQpAQCAtMCwwICsxIEBACitwcmVlbiBzaG91bGRuJ3QgZGVzdHJveSBiYWNrdXAgc3VwZXJibG9ja3MKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfcHJlZW4vc2NyaXB0IGIvdGVzdHMvZl9wcmVlbi9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBlZDExYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfcHJlZW4vc2NyaXB0CkBAIC0wLDAgKzEsNCBAQAorRlNDS19PUFQ9LXBmCitTRUNPTkRfRlNDS19PUFQ9LXlmYjgxOTMKKworLiAkY21kX2Rpci9ydW5fZTJmc2NrCmRpZmYgLS1naXQgYS90ZXN0cy9mX3F1b3RhL2RlYnVnZnMtY21kcyBiL3Rlc3RzL2ZfcXVvdGEvZGVidWdmcy1jbWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmEzZmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3F1b3RhL2RlYnVnZnMtY21kcwpAQCAtMCwwICsxLDcgQEAKK2xpc3RfcXVvdGEgdXNlcgorbGlzdF9xdW90YSBncm91cAorZ2V0X3F1b3RhIHVzZXIgMAorZ2V0X3F1b3RhIHVzZXIgMTAwCitnZXRfcXVvdGEgdXNlciAzNAorZ2V0X3F1b3RhIGdyb3VwIDAKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9xdW90YS9leHBlY3QuMCBiL3Rlc3RzL2ZfcXVvdGEvZXhwZWN0LjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBhZDYzZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfcXVvdGEvZXhwZWN0LjAKQEAgLTAsMCArMSwyMSBAQAorZGVidWdmczogbGlzdF9xdW90YSB1c2VyCisgdXNlciBpZCAgICAgYmxvY2tzICAgIHF1b3RhICAgIGxpbWl0ICAgICAgaW5vZGVzICAgIHF1b3RhICAgIGxpbWl0CisgICAgICAgMCAgICAgIDEzMzEyICAgICAgICAwICAgICAgICAwICAgICAgICAgICAyICAgICAgICAwICAgICAgICAwCisgICAgICAzNCAgICAgICAxMDI0ICAgICAgICAwICAgICAgICAwICAgICAgICAgICAxICAgICAgICAwICAgICAgICAwCisgICAgIDEwMCAgICAgICAyMDQ4ICAgICAgIDMyICAgICAgIDUwICAgICAgICAgICAyICAgICAgIDIwICAgICAgIDMwCitkZWJ1Z2ZzOiBsaXN0X3F1b3RhIGdyb3VwCitncm91cCBpZCAgICAgYmxvY2tzICAgIHF1b3RhICAgIGxpbWl0ICAgICAgaW5vZGVzICAgIHF1b3RhICAgIGxpbWl0CisgICAgICAgMCAgICAgIDE2Mzg0ICAgICAgICAwICAgICAgICAwICAgICAgICAgICA1ICAgICAgICAwICAgICAgICAwCitkZWJ1Z2ZzOiBnZXRfcXVvdGEgdXNlciAwCisgdXNlciBpZCAgICAgYmxvY2tzICAgIHF1b3RhICAgIGxpbWl0ICAgICAgaW5vZGVzICAgIHF1b3RhICAgIGxpbWl0CisgICAgICAgMCAgICAgIDEzMzEyICAgICAgICAwICAgICAgICAwICAgICAgICAgICAyICAgICAgICAwICAgICAgICAwCitkZWJ1Z2ZzOiBnZXRfcXVvdGEgdXNlciAxMDAKKyB1c2VyIGlkICAgICBibG9ja3MgICAgcXVvdGEgICAgbGltaXQgICAgICBpbm9kZXMgICAgcXVvdGEgICAgbGltaXQKKyAgICAgMTAwICAgICAgIDIwNDggICAgICAgMzIgICAgICAgNTAgICAgICAgICAgIDIgICAgICAgMjAgICAgICAgMzAKK2RlYnVnZnM6IGdldF9xdW90YSB1c2VyIDM0CisgdXNlciBpZCAgICAgYmxvY2tzICAgIHF1b3RhICAgIGxpbWl0ICAgICAgaW5vZGVzICAgIHF1b3RhICAgIGxpbWl0CisgICAgICAzNCAgICAgICAxMDI0ICAgICAgICAwICAgICAgICAwICAgICAgICAgICAxICAgICAgICAwICAgICAgICAwCitkZWJ1Z2ZzOiBnZXRfcXVvdGEgZ3JvdXAgMAorZ3JvdXAgaWQgICAgIGJsb2NrcyAgICBxdW90YSAgICBsaW1pdCAgICAgIGlub2RlcyAgICBxdW90YSAgICBsaW1pdAorICAgICAgIDAgICAgICAxNjM4NCAgICAgICAgMCAgICAgICAgMCAgICAgICAgICAgNSAgICAgICAgMCAgICAgICAgMAorZGVidWdmczogCmRpZmYgLS1naXQgYS90ZXN0cy9mX3F1b3RhL2V4cGVjdC4xIGIvdGVzdHMvZl9xdW90YS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjNiNGNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9xdW90YS9leHBlY3QuMQpAQCAtMCwwICsxLDEzIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorW1FVT1RBIFdBUk5JTkddIFVzYWdlIGluY29uc2lzdGVudCBmb3IgSUQgMDphY3R1YWwgKDEzMzEyLCAyKSAhPSBleHBlY3RlZCAoMTQzMzYsIDMpCitbUVVPVEEgV0FSTklOR10gVXNhZ2UgaW5jb25zaXN0ZW50IGZvciBJRCAxMDA6YWN0dWFsICgyMDQ4LCAyKSAhPSBleHBlY3RlZCAoMTAyNCwgMSkKK1VwZGF0ZSBxdW90YSBpbmZvIGZvciBxdW90YSB0eXBlIDA/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE0LzE2IGZpbGVzICgxNC4zJSBub24tY29udGlndW91cyksIDM2LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfcXVvdGEvZXhwZWN0LjIgYi90ZXN0cy9mX3F1b3RhL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYzU1OGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3F1b3RhL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTQvMTYgZmlsZXMgKDE0LjMlIG5vbi1jb250aWd1b3VzKSwgMzYvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9xdW90YS9pbWFnZS5neiBiL3Rlc3RzL2ZfcXVvdGEvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNlYTY1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfcXVvdGEvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9xdW90YS9uYW1lIGIvdGVzdHMvZl9xdW90YS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZWE4YmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3F1b3RhL25hbWUKQEAgLTAsMCArMSBAQAorZml4IGluY29ycmVjdCB1c2FnZSBzdGF0cyBpbiBxdW90YQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9xdW90YS9zY3JpcHQgYi90ZXN0cy9mX3F1b3RhL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmU2YTlmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9xdW90YS9zY3JpcHQKQEAgLTAsMCArMSwxMSBAQAorQUZURVJfQ01EPSckREVCVUdGUyAtZiAkdGVzdF9kaXIvZGVidWdmcy1jbWRzICRUTVBGSUxFIDI+JjEgfCBzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCA+ICR0ZXN0X25hbWUuMC5sb2cnCitQQVNTX1pFUk89dHJ1ZQorCiskVFVORTJGUyAtaCAyPiYxIHwgZ3JlcCAtcSBxdW90YV9vcHRpb25zCitpZiBbICQ/ICE9IDAgXSA7IHRoZW4KKyAgICAgICAgcm0gLWYgJFRNUEZJTEUKKyAgICAgICAgZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQgKHF1b3RhIG5vdCBlbmFibGVkKSIKKyAgICAgICAgcmV0dXJuIDAKK2ZpCisKKy4gJGNtZF9kaXIvcnVuX2UyZnNjawpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9yZWFkb25seV9mc2NrL2V4cGVjdCBiL3Rlc3RzL2ZfcmVhZG9ubHlfZnNjay9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0ZGZhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfcmVhZG9ubHlfZnNjay9leHBlY3QKQEAgLTAsMCArMSwxMSBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg0Mjk0OTY4MjU0LCBjb3VudGVkPTk1OCkuCitGaXg/IG5vCisKK3Rlc3RfZmlsZXN5czogMTEvMjU2IGZpbGVzICg5LjElIG5vbi1jb250aWd1b3VzKSwgMTg0NDY3NDQwNjk0MTQ1ODU0MTAvMjA0OCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKK2NyYyBkaWQgbm90IGNoYW5nZS4gIDI0NjYyMTUxNjEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfcmVhZG9ubHlfZnNjay9pbWFnZS5neiBiL3Rlc3RzL2ZfcmVhZG9ubHlfZnNjay9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWY5Y2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9yZWFkb25seV9mc2NrL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfcmVhZG9ubHlfZnNjay9uYW1lIGIvdGVzdHMvZl9yZWFkb25seV9mc2NrL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdhYjQyOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfcmVhZG9ubHlfZnNjay9uYW1lCkBAIC0wLDAgKzEgQEAKK2Vuc3VyZSB0aGF0IGEgcmVhZG9ubHkgY2hlY2sgZG9lc24ndCBtb2RpZnkgdGhlIGZzCmRpZmYgLS1naXQgYS90ZXN0cy9mX3JlYWRvbmx5X2ZzY2svc2NyaXB0IGIvdGVzdHMvZl9yZWFkb25seV9mc2NrL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDZjNWE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9yZWFkb25seV9mc2NrL3NjcmlwdApAQCAtMCwwICsxLDQ2IEBACitGU0NLX09QVD0tZm4KK09VVD0kdGVzdF9uYW1lLmxvZworaWYgWyAtZiAkdGVzdF9kaXIvZXhwZWN0Lmd6IF07IHRoZW4KKwlFWFA9JHRlc3RfbmFtZS50bXAKKwlndW56aXAgPCAkdGVzdF9kaXIvZXhwZWN0Lmd6ID4gJEVYUDEKK2Vsc2UKKwlFWFA9JHRlc3RfZGlyL2V4cGVjdAorZmkKKworY3AgL2Rldi9udWxsICRPVVQKKworZGQgaWY9L2Rldi96ZXJvIG9mPSRUTVBGSUxFIGJzPTFrIGNvdW50PTUxMiA+IC9kZXYvbnVsbCAyPiYxCisKK2d6aXAgLWQgPCAkdGVzdF9kaXIvaW1hZ2UuZ3ogPiAkVE1QRklMRQorCitvbGQ9IiQoJENSQ1NVTSA8ICRUTVBGSUxFKSIKKworJEZTQ0sgJEZTQ0tfT1BUIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiICRPVVQubmV3ID4+ICRPVVQKK3JtIC1mICRPVVQubmV3CisKK25ldz0iJCgkQ1JDU1VNIDwgJFRNUEZJTEUpIgorCitpZiBbICIke29sZH0iICE9ICIke25ld30iIF07IHRoZW4KKwllY2hvICJFUlJPUjogY3JjIG1pc21hdGNoISAgJHtvbGR9ICR7bmV3fSIgPj4gJE9VVAorZWxzZQorCWVjaG8gImNyYyBkaWQgbm90IGNoYW5nZS4gICR7b2xkfSIgPj4gJE9VVAorZmkKKworcm0gLWYgJFRNUEZJTEUKKworY21wIC1zICRPVVQgJEVYUAorc3RhdHVzPSQ/CisKK2lmIFsgIiRzdGF0dXMiID0gMCBdIDsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBvayIKKwl0b3VjaCAkdGVzdF9uYW1lLm9rCitlbHNlCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IGZhaWxlZCIKKwlkaWZmICRESUZGX09QVFMgJEVYUCAkT1VUID4gJHRlc3RfbmFtZS5mYWlsZWQKKwlybSAtZiAkdGVzdF9uYW1lLnRtcAorZmkKKwordW5zZXQgSU1BR0UgRlNDS19PUFQgT1VUIEVYUCBvbGQgbmV3CmRpZmYgLS1naXQgYS90ZXN0cy9mX3JlY25lY3RfYmFkL2V4cGVjdC4xIGIvdGVzdHMvZl9yZWNuZWN0X2JhZC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmE4MWU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9yZWNuZWN0X2JhZC9leHBlY3QuMQpAQCAtMCwwICsxLDM4IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQoraV9mYWRkciBmb3IgaW5vZGUgMTUgKC90ZXN0L3F1dXgpIGlzIDIzLCBzaG91bGQgYmUgemVyby4KK0NsZWFyPyB5ZXMKKworaV9kaXJfYWNsIGZvciBpbm9kZSAxNSAoL3Rlc3QvcXV1eCkgaXMgMTIsIHNob3VsZCBiZSB6ZXJvLgorQ2xlYXI/IHllcworCitpX2ZpbGVfYWNsIGZvciBpbm9kZSAxMyAoL3Rlc3QvPz8/KSBpcyAxMiwgc2hvdWxkIGJlIHplcm8uCitDbGVhcj8geWVzCisKK2lfZmFkZHIgZm9yIGlub2RlIDEzICgvdGVzdC8/Pz8pIGlzIDEyLCBzaG91bGQgYmUgemVyby4KK0NsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitVbmNvbm5lY3RlZCBkaXJlY3RvcnkgaW5vZGUgMTMgKC90ZXN0Lz8/PykKK0Nvbm5lY3QgdG8gL2xvc3QrZm91bmQ/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK0lub2RlIDEzIHJlZiBjb3VudCBpcyA0LCBzaG91bGQgYmUgMy4gIEZpeD8geWVzCisKK2lfZmlsZV9hY2wgZm9yIGlub2RlIDI4ICguLi4pIGlzIDQyOTQ5NjcyOTUsIHNob3VsZCBiZSB6ZXJvLgorQ2xlYXI/IHllcworCitJbm9kZSAyOCAoLi4uKSBoYXMgaW52YWxpZCBtb2RlICgwMTc3Nzc3KS4KK0NsZWFyPyB5ZXMKKworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDE4LCBjb3VudGVkPTE3KS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nICgxOCwgY291bnRlZD0xNykuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE1LzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjYvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9yZWNuZWN0X2JhZC9leHBlY3QuMiBiL3Rlc3RzL2ZfcmVjbmVjdF9iYWQvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2OGU3OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfcmVjbmVjdF9iYWQvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI2LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfcmVjbmVjdF9iYWQvaW1hZ2UuZ3ogYi90ZXN0cy9mX3JlY25lY3RfYmFkL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZGNkZjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3JlY25lY3RfYmFkL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfcmVjbmVjdF9iYWQvbmFtZSBiL3Rlc3RzL2ZfcmVjbmVjdF9iYWQvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzBjOGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9yZWNuZWN0X2JhZC9uYW1lCkBAIC0wLDAgKzEgQEAKK1JlY29ubmVjdGluZyBiYWQgaW5vZGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfcmVjb25uZWN0L2V4cGVjdC4xIGIvdGVzdHMvZl9yZWNvbm5lY3QvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxZDhiMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfcmVjb25uZWN0L2V4cGVjdC4xCkBAIC0wLDAgKzEsMjQgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworVW5hdHRhY2hlZCBpbm9kZSAxMgorQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK0lub2RlIDEyIHJlZiBjb3VudCBpcyAyLCBzaG91bGQgYmUgMS4gIEZpeD8geWVzCisKK1VuYXR0YWNoZWQgaW5vZGUgMTMKK0Nvbm5lY3QgdG8gL2xvc3QrZm91bmQ/IHllcworCitJbm9kZSAxMyByZWYgY291bnQgaXMgMiwgc2hvdWxkIGJlIDEuICBGaXg/IHllcworCitVbmF0dGFjaGVkIGlub2RlIDE0CitDb25uZWN0IHRvIC9sb3N0K2ZvdW5kPyB5ZXMKKworSW5vZGUgMTQgcmVmIGNvdW50IGlzIDIsIHNob3VsZCBiZSAxLiAgRml4PyB5ZXMKKworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE0LzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjUvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9yZWNvbm5lY3QvZXhwZWN0LjIgYi90ZXN0cy9mX3JlY29ubmVjdC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODQ4ZWZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9yZWNvbm5lY3QvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNC8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI1LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfcmVjb25uZWN0L2ltYWdlLmd6IGIvdGVzdHMvZl9yZWNvbm5lY3QvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZiOTJjMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfcmVjb25uZWN0L2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfcmVjb25uZWN0L25hbWUgYi90ZXN0cy9mX3JlY29ubmVjdC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOWMyM2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3JlY29ubmVjdC9uYW1lCkBAIC0wLDAgKzEgQEAKK3NpbXBsZSBkaXNjb25uZWN0ZWQgZmlsZSBpbm9kZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9yZWhhc2hfZGlyL2V4cGVjdC4xIGIvdGVzdHMvZl9yZWhhc2hfZGlyL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzY3NjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3JlaGFzaF9kaXIvZXhwZWN0LjEKQEAgLTAsMCArMSwxMCBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3RvcmllcworUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTA1LzIwNDggZmlsZXMgKDIuOSUgbm9uLWNvbnRpZ3VvdXMpLCAzMzYvNTEyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9yZWhhc2hfZGlyL2V4cGVjdC4yIGIvdGVzdHMvZl9yZWhhc2hfZGlyL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNzhmZTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3JlaGFzaF9kaXIvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMDUvMjA0OCBmaWxlcyAoMy44JSBub24tY29udGlndW91cyksIDMzNi81MTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX3JlaGFzaF9kaXIvaW1hZ2UuZ3ogYi90ZXN0cy9mX3JlaGFzaF9kaXIvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzNmRjZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfcmVoYXNoX2Rpci9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX3JlaGFzaF9kaXIvbmFtZSBiL3Rlc3RzL2ZfcmVoYXNoX2Rpci9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YTg2OWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3JlaGFzaF9kaXIvbmFtZQpAQCAtMCwwICsxIEBACitvcHRpbWl6ZSBodHJlZSBkaXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9yZWhhc2hfZGlyL3NjcmlwdCBiL3Rlc3RzL2ZfcmVoYXNoX2Rpci9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkY2I3NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfcmVoYXNoX2Rpci9zY3JpcHQKQEAgLTAsMCArMSwzIEBACitGU0NLX09QVD0teWZECisKKy4gJGNtZF9kaXIvcnVuX2UyZnNjawpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9yZXNpemVfaW5vZGUvZXhwZWN0IGIvdGVzdHMvZl9yZXNpemVfaW5vZGUvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNTdlZDYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3Jlc2l6ZV9pbm9kZS9leHBlY3QKQEAgLTAsMCArMSwxNTkgQEAKK21rZTJmcyAtRiAtTyByZXNpemVfaW5vZGUgLW8gTGludXggLWIgMTAyNCAtZyAxMDI0IHRlc3QuaW1nIDE2Mzg0CitDcmVhdGluZyBmaWxlc3lzdGVtIHdpdGggMTYzODQgMWsgYmxvY2tzIGFuZCA0MDk2IGlub2RlcworU3VwZXJibG9jayBiYWNrdXBzIHN0b3JlZCBvbiBibG9ja3M6IAorCTEwMjUsIDMwNzMsIDUxMjEsIDcxNjksIDkyMTcKKworQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICAgICAgCAgICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBpbm9kZSB0YWJsZXM6ICAgICAgCAgICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAgIAgICAgIZG9uZQorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS80MDk2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjEwNy8xNjM4NCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCitkZWJ1Z2ZzIC1SICcnc2V0X2lub2RlX2ZpZWxkIDw3PiBibG9ja1syXSA0MicnIC13IHRlc3QuaW1nCitFeGl0IHN0YXR1cyBpcyAwCitSZXNpemUgaW5vZGUgbm90IHZhbGlkLiAgUmVjcmVhdGU/IHllcworCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3MTcsIGNvdW50ZWQ9NzE4KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICgxNDI3NiwgY291bnRlZD0xNDI3NykuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzQwOTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMTA3LzE2Mzg0IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvNDA5NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIxMDcvMTYzODQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorZGVidWdmcyAtUiAnJ2NscmkgPDc+JycgLXcgdGVzdC5pbWcKK0V4aXQgc3RhdHVzIGlzIDAKK1Jlc2l6ZSBpbm9kZSBub3QgdmFsaWQuICBSZWNyZWF0ZT8geWVzCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDcxNywgY291bnRlZD03MTgpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDE0Mjc2LCBjb3VudGVkPTE0Mjc3KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvNDA5NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIxMDcvMTYzODQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS80MDk2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjEwNy8xNjM4NCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCitkZWJ1Z2ZzIC1SICcnc2V0X2lub2RlX2ZpZWxkIDw3PiBibWFwWzUyNF0gNTcnJyAtdyB0ZXN0LmltZworRXhpdCBzdGF0dXMgaXMgMAorUmVzaXplIGlub2RlIG5vdCB2YWxpZC4gIFJlY3JlYXRlPyB5ZXMKKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzE3LCBjb3VudGVkPTcxOCkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoMTQyNzYsIGNvdW50ZWQ9MTQyNzcpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS80MDk2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjEwNy8xNjM4NCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzQwOTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMTA3LzE2Mzg0IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKK2RlYnVnZnMgLVIgJydzZXRfc3VwZXJfdmFsdWUgcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyAxNTY3OScnIC13IHRlc3QuaW1nCitFeGl0IHN0YXR1cyBpcyAwCitleHQyZnNfY2hlY2tfZGVzYzogQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGJsb2NrIGJpdG1hcAorLi4vZTJmc2NrL2UyZnNjazogR3JvdXAgZGVzY3JpcHRvcnMgbG9vayBiYWQuLi4gdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi4KK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzQwOTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMTA3LzE2Mzg0IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKK2RlYnVnZnMgLVIgJydzZXRfc3VwZXJfdmFsdWUgcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyAzMicnIC13IHRlc3QuaW1nCitFeGl0IHN0YXR1cyBpcyAwCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLSgzNS0tMjU4KSAtKDEwNTktLTEyODIpIC0oMzEwNy0tMzMzMCkgLSg1MTU1LS01Mzc4KSAtKDcyMDMtLTc0MjYpIC0oOTI1MS0tOTQ3NCkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzE4LCBjb3VudGVkPTk0MikuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzEgKDczMiwgY291bnRlZD05NTYpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMzICg3MzIsIGNvdW50ZWQ9OTU2KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjNSAoNzMyLCBjb3VudGVkPTk1NikuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzcgKDczMiwgY291bnRlZD05NTYpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICM5ICg3MzIsIGNvdW50ZWQ9OTU2KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICgxNDI3NywgY291bnRlZD0xNTYyMSkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzQwOTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA3NjMvMTYzODQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS80MDk2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNzYzLzE2Mzg0IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9yZXNpemVfaW5vZGUvc2NyaXB0IGIvdGVzdHMvZl9yZXNpemVfaW5vZGUvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MDg3MWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3Jlc2l6ZV9pbm9kZS9zY3JpcHQKQEAgLTAsMCArMSwxNDMgQEAKK2lmIHRlc3QgLXggJERFQlVHRlNfRVhFOyB0aGVuCisKK3Rlc3RfZGVzY3JpcHRpb249ImUyZnNjayB3aXRoIHJlc2l6ZV9pbm9kZSIKK0ZTQ0tfT1BUPS15ZgorT1VUPSR0ZXN0X25hbWUubG9nCitpZiBbIC1mICR0ZXN0X2Rpci9leHBlY3QuZ3ogXTsgdGhlbgorCUVYUD0kdGVzdF9uYW1lLnRtcAorCWd1bnppcCA8ICR0ZXN0X2Rpci9leHBlY3QuZ3ogPiAkRVhQMQorZWxzZQorCUVYUD0kdGVzdF9kaXIvZXhwZWN0CitmaQorCitjcCAvZGV2L251bGwgJE9VVAorCitkZCBpZj0vZGV2L3plcm8gb2Y9JFRNUEZJTEUgYnM9MWsgY291bnQ9NTEyID4gL2Rldi9udWxsIDI+JjEKKworZWNobyBta2UyZnMgLUYgLU8gcmVzaXplX2lub2RlIC1vIExpbnV4IC1iIDEwMjQgLWcgMTAyNCB0ZXN0LmltZyAxNjM4NCA+ICRPVVQKKyRNS0UyRlMgLUYgLU8gcmVzaXplX2lub2RlIC1vIExpbnV4IC1iIDEwMjQgLWcgMTAyNCAkVE1QRklMRSAxNjM4NCAyPiYxIHwKKwlzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiID4+ICRPVVQKKworJEZTQ0sgJEZTQ0tfT1BUICAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiAkT1VULm5ldyA+PiAkT1VUCitybSAtZiAkT1VULm5ldworCitlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID4+ICRPVVQKKworZWNobyAiICIgPj4gJE9VVAorZWNobyAiZGVidWdmcyAtUiAnJ3NldF9pbm9kZV9maWVsZCA8Nz4gYmxvY2tbMl0gNDInJyAtdyB0ZXN0LmltZyIgPiAkT1VULm5ldworJERFQlVHRlMgLVIgInNldF9pbm9kZV9maWVsZCA8Nz4gYmxvY2tbMl0gNDIiIC13ICRUTVBGSUxFID4+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCisKKyRGU0NLICRGU0NLX09QVCAgLU4gdGVzdF9maWxlc3lzICRUTVBGSUxFID4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKK3JtIC1mICRPVVQubmV3CisKKyRGU0NLICRGU0NLX09QVCAgLU4gdGVzdF9maWxlc3lzICRUTVBGSUxFID4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKK3JtIC1mICRPVVQubmV3CisKK2VjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPj4gJE9VVAorCitlY2hvICIgIiA+PiAkT1VUCitlY2hvICJkZWJ1Z2ZzIC1SICcnY2xyaSA8Nz4nJyAtdyB0ZXN0LmltZyIgPiAkT1VULm5ldworJERFQlVHRlMgLVIgImNscmkgPDc+IiAtdyAkVE1QRklMRSA+PiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAorCiskRlNDSyAkRlNDS19PUFQgIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCitybSAtZiAkT1VULm5ldworCiskRlNDSyAkRlNDS19PUFQgIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCitybSAtZiAkT1VULm5ldworCitlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID4+ICRPVVQKKworZWNobyAiICIgPj4gJE9VVAorZWNobyAiZGVidWdmcyAtUiAnJ3NldF9pbm9kZV9maWVsZCA8Nz4gYm1hcFs1MjRdIDU3JycgLXcgdGVzdC5pbWciID4gJE9VVC5uZXcKKyRERUJVR0ZTIC1SICJzZXRfaW5vZGVfZmllbGQgPDc+IGJtYXBbNTI0XSA1NyIgLXcgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKKworJEZTQ0sgJEZTQ0tfT1BUICAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAorcm0gLWYgJE9VVC5uZXcKKworJEZTQ0sgJEZTQ0tfT1BUICAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAorcm0gLWYgJE9VVC5uZXcKKworZWNobyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+PiAkT1VUCisKK2VjaG8gIiAiID4+ICRPVVQKK2VjaG8gImRlYnVnZnMgLVIgJydzZXRfc3VwZXJfdmFsdWUgcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyAxNTY3OScnIC13IHRlc3QuaW1nIiA+ICRPVVQubmV3CiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIHJlc2VydmVkX2dkdF9ibG9ja3MgMTU2NzkiIC13ICRUTVBGSUxFID4+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCisKKyRGU0NLICRGU0NLX09QVCAgLU4gdGVzdF9maWxlc3lzICRUTVBGSUxFID4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKK3JtIC1mICRPVVQubmV3CisKK2VjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPj4gJE9VVAorCitlY2hvICIgIiA+PiAkT1VUCitlY2hvICJkZWJ1Z2ZzIC1SICcnc2V0X3N1cGVyX3ZhbHVlIHJlc2VydmVkX2dkdF9ibG9ja3MgMzInJyAtdyB0ZXN0LmltZyIgPiAkT1VULm5ldworJERFQlVHRlMgLVIgInNldF9zdXBlcl92YWx1ZSByZXNlcnZlZF9nZHRfYmxvY2tzIDMyIiAtdyAkVE1QRklMRSA+PiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAorCiskRlNDSyAkRlNDS19PUFQgIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCitybSAtZiAkT1VULm5ldworCiskRlNDSyAkRlNDS19PUFQgIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCitybSAtZiAkT1VULm5ldworCisKK2NtcCAtcyAkT1VUICRFWFAKK3N0YXR1cz0kPworCitpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJZGlmZiAkRElGRl9PUFRTICRFWFAgJE9VVCA+ICR0ZXN0X25hbWUuZmFpbGVkCisJcm0gLWYgdG1wX2V4cGVjdAorZmkKKwordW5zZXQgSU1BR0UgRlNDS19PUFQgT1VUIEVYUAorCitlbHNlICNpZiB0ZXN0IC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkgCmRpZmYgLS1naXQgYS90ZXN0cy9mX3NhbHZhZ2VfZGlyL2V4cGVjdC4xIGIvdGVzdHMvZl9zYWx2YWdlX2Rpci9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjg2Mzg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9zYWx2YWdlX2Rpci9leHBlY3QuMQpAQCAtMCwwICsxLDE5IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorRGlyZWN0b3J5IGlub2RlIDEzLCBibG9jayAjMCwgb2Zmc2V0IDQ4OiBkaXJlY3RvcnkgY29ycnVwdGVkCitTYWx2YWdlPyB5ZXMKKworRGlyZWN0b3J5IGlub2RlIDEyLCBibG9jayAjMSwgb2Zmc2V0IDA6IGRpcmVjdG9yeSBjb3JydXB0ZWQKK1NhbHZhZ2U/IHllcworCitTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnYycgaW4gL3Rlc3QgKDEyKSB0byAxLgorRGlyZWN0b3J5IGlub2RlIDEyLCBibG9jayAjMSwgb2Zmc2V0IDEwMTY6IGRpcmVjdG9yeSBjb3JydXB0ZWQKK1NhbHZhZ2U/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE5LzY0IGZpbGVzICgxMC41JSBub24tY29udGlndW91cyksIDMwLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfc2FsdmFnZV9kaXIvZXhwZWN0LjIgYi90ZXN0cy9mX3NhbHZhZ2VfZGlyL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNzdjZDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3NhbHZhZ2VfZGlyL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTkvNjQgZmlsZXMgKDEwLjUlIG5vbi1jb250aWd1b3VzKSwgMzAvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9zYWx2YWdlX2Rpci9pbWFnZS5neiBiL3Rlc3RzL2Zfc2FsdmFnZV9kaXIvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhZGRlNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfc2FsdmFnZV9kaXIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9zYWx2YWdlX2Rpci9uYW1lIGIvdGVzdHMvZl9zYWx2YWdlX2Rpci9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NmY0M2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3NhbHZhZ2VfZGlyL25hbWUKQEAgLTAsMCArMSBAQAorc2FsdmFnZSBjb3JydXB0ZWQgZGlyZWN0b3JpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfc2VsaW51eC9leHBlY3QuMSBiL3Rlc3RzL2Zfc2VsaW51eC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmZjZDNiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9zZWxpbnV4L2V4cGVjdC4xCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTYvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMS85NiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfc2VsaW51eC9leHBlY3QuMiBiL3Rlc3RzL2Zfc2VsaW51eC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmZjZDNiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9zZWxpbnV4L2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTYvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMS85NiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfc2VsaW51eC9pbWFnZS5neiBiL3Rlc3RzL2Zfc2VsaW51eC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2E2N2EyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9zZWxpbnV4L2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfc2VsaW51eC9uYW1lIGIvdGVzdHMvZl9zZWxpbnV4L25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI4NzVlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfc2VsaW51eC9uYW1lCkBAIC0wLDAgKzEgQEAKK1NFIExpbnV4IGdlbmVyYXRlZCBzeW1saW5rcyB3aXRoIEVBIGRhdGEKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfc3BlY2lhbF9lYS9leHBlY3QuMSBiL3Rlc3RzL2Zfc3BlY2lhbF9lYS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDA3NmZlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9zcGVjaWFsX2VhL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTEgQEAKK0JhY2tpbmcgdXAgam91cm5hbCBpbm9kZSBibG9jayBpbmZvcm1hdGlvbi4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTcvMTAyNCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDExODAvNDA5NiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfc3BlY2lhbF9lYS9pbWFnZS5neiBiL3Rlc3RzL2Zfc3BlY2lhbF9lYS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDQ3Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9zcGVjaWFsX2VhL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfc3BlY2lhbF9lYS9uYW1lIGIvdGVzdHMvZl9zcGVjaWFsX2VhL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRmYjJmNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfc3BlY2lhbF9lYS9uYW1lCkBAIC0wLDAgKzEgQEAKK1NwZWNpYWwgZmlsZXMgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzCmRpZmYgLS1naXQgYS90ZXN0cy9mX3NwZWNpYWxfZWEvc2NyaXB0IGIvdGVzdHMvZl9zcGVjaWFsX2VhL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWIyYjljCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9zcGVjaWFsX2VhL3NjcmlwdApAQCAtMCwwICsxLDIgQEAKK09ORV9QQVNTX09OTFk9InRydWUiCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfc3VtbWFyeV9jb3VudHMvZXhwZWN0LjEgYi90ZXN0cy9mX3N1bW1hcnlfY291bnRzL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYjE0YmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3N1bW1hcnlfY291bnRzL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTkgQEAKK3Rlc3RfZmlsZXN5cyBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzLCBjaGVjayBmb3JjZWQuCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgyMDAsIGNvdW50ZWQ9ODApLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgyNTAsIGNvdW50ZWQ9NSkuCitGaXg/IHllcworCitEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDE1MCwgY291bnRlZD0yKS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMC8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX3N1bW1hcnlfY291bnRzL2V4cGVjdC4yIGIvdGVzdHMvZl9zdW1tYXJ5X2NvdW50cy9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGJmZjYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl9zdW1tYXJ5X2NvdW50cy9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjAvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl9zdW1tYXJ5X2NvdW50cy9pbWFnZS5neiBiL3Rlc3RzL2Zfc3VtbWFyeV9jb3VudHMvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyN2U5YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Zfc3VtbWFyeV9jb3VudHMvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl9zdW1tYXJ5X2NvdW50cy9uYW1lIGIvdGVzdHMvZl9zdW1tYXJ5X2NvdW50cy9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZDEwMjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3N1bW1hcnlfY291bnRzL25hbWUKQEAgLTAsMCArMSBAQAoraW5jb3JyZWN0IGlub2RlL2Jsb2NrIGZyZWUgY291bnRzCmRpZmYgLS1naXQgYS90ZXN0cy9mX3N1bW1hcnlfY291bnRzL3NjcmlwdCBiL3Rlc3RzL2Zfc3VtbWFyeV9jb3VudHMvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNDI1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3N1bW1hcnlfY291bnRzL3NjcmlwdApAQCAtMCwwICsxLDQgQEAKK0ZTQ0tfT1BUPS15CitTRUNPTkRfRlNDS19PUFQ9LXlmCisKKy4gJGNtZF9kaXIvcnVuX2UyZnNjawpkaWZmIC0tZ2l0IGEvdGVzdHMvZl90b29iaWdfZXh0ZW50X2Rpci9leHBlY3QuMSBiL3Rlc3RzL2ZfdG9vYmlnX2V4dGVudF9kaXIvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEwY2EzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfdG9vYmlnX2V4dGVudF9kaXIvZXhwZWN0LjEKQEAgLTAsMCArMSwxMiBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxMiBpcyB0b28gYmlnLiAgVHJ1bmNhdGU/IHllcworCitCbG9jayAjNDI5NDk2NzI4MSAoOTApIGNhdXNlcyBkaXJlY3RvcnkgdG8gYmUgdG9vIGJpZy4gIENMRUFSRUQuCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvNTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyOC80MDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS90ZXN0cy9mX3Rvb2JpZ19leHRlbnRfZGlyL2V4cGVjdC4yIGIvdGVzdHMvZl90b29iaWdfZXh0ZW50X2Rpci9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDI1NjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl90b29iaWdfZXh0ZW50X2Rpci9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzU2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjgvNDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl90b29iaWdfZXh0ZW50X2Rpci9pbWFnZS5neiBiL3Rlc3RzL2ZfdG9vYmlnX2V4dGVudF9kaXIvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyZjY1YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfdG9vYmlnX2V4dGVudF9kaXIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl90b29iaWdfZXh0ZW50X2Rpci9uYW1lIGIvdGVzdHMvZl90b29iaWdfZXh0ZW50X2Rpci9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDUzYWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3Rvb2JpZ19leHRlbnRfZGlyL25hbWUKQEAgLTAsMCArMSBAQAorZGlyZWN0b3J5IHdpdGggYSB2ZXJ5IGxhcmdlIGxibGsgaW4gZXh0ZW50CmRpZmYgLS1naXQgYS90ZXN0cy9mX3VuaW5pdF9kaXIvZXhwZWN0LjEgYi90ZXN0cy9mX3VuaW5pdF9kaXIvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAwNjVmMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfdW5pbml0X2Rpci9leHBlY3QuMQpAQCAtMCwwICsxLDI3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0RpcmVjdG9yeSBpbm9kZSAxMiBoYXMgZXh0ZW50IG1hcmtlZCB1bmluaXRpYWxpemVkIGF0IGJsb2NrIDAuICBGaXg/IHllcworCitEaXJlY3RvcnkgaW5vZGUgMTQgaGFzIGV4dGVudCBtYXJrZWQgdW5pbml0aWFsaXplZCBhdCBibG9jayAwLiAgRml4PyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitEaXJlY3RvcnkgaW5vZGUgMTQsIGJsb2NrICMwLCBvZmZzZXQgMDogZGlyZWN0b3J5IGNvcnJ1cHRlZAorU2FsdmFnZT8geWVzCisKK01pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAxNC4KK0ZpeD8geWVzCisKK1NldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICcuJyBpbiA/Pz8gKDE0KSB0byAyLgorTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAxNC4KK0ZpeD8geWVzCisKK1NldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICcuLicgaW4gPz8/ICgxNCkgdG8gMi4KK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorJy4uJyBpbiAvYWJjICgxNCkgaXMgPFRoZSBOVUxMIGlub2RlPiAoMCksIHNob3VsZCBiZSAvICgyKS4KK0ZpeD8geWVzCisKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE0LzEyOCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIwLzUxMiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfdW5pbml0X2Rpci9leHBlY3QuMiBiL3Rlc3RzL2ZfdW5pbml0X2Rpci9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjI4ZjQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl91bmluaXRfZGlyL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTQvMTI4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjAvNTEyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl91bmluaXRfZGlyL2ltYWdlLmd6IGIvdGVzdHMvZl91bmluaXRfZGlyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTEzMWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3VuaW5pdF9kaXIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl91bmluaXRfZGlyL25hbWUgYi90ZXN0cy9mX3VuaW5pdF9kaXIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Y1YmVlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl91bmluaXRfZGlyL25hbWUKQEAgLTAsMCArMSBAQAorZml4IHVuaW5pdCBmbGFnIG9uIGRpcmVjdG9yeSBleHRlbnRzIGFuZCBjaGVjayB0aGUgZGlyIGJsb2NrcwpkaWZmIC0tZ2l0IGEvdGVzdHMvZl91bmluaXRfZXh0X3Bhc3RfZW9mL2V4cGVjdC4xIGIvdGVzdHMvZl91bmluaXRfZXh0X3Bhc3RfZW9mL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MjE1OWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3VuaW5pdF9leHRfcGFzdF9lb2YvZXhwZWN0LjEKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8xMDI0IGZpbGVzICgxNi43JSBub24tY29udGlndW91cyksIDEyMjcvNDA5NiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZi9leHBlY3QuMiBiL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZi9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjIxNTljCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl91bmluaXRfZXh0X3Bhc3RfZW9mL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTIvMTAyNCBmaWxlcyAoMTYuNyUgbm9uLWNvbnRpZ3VvdXMpLCAxMjI3LzQwOTYgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9mX3VuaW5pdF9leHRfcGFzdF9lb2YvaW1hZ2UuZ3ogYi90ZXN0cy9mX3VuaW5pdF9leHRfcGFzdF9lb2YvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2OTE1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZi9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9mX3VuaW5pdF9leHRfcGFzdF9lb2YvbmFtZSBiL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZi9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMGM2ZTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3VuaW5pdF9leHRfcGFzdF9lb2YvbmFtZQpAQCAtMCwwICsxIEBACitmYWxsb2NhdGVkIGV4dGVudHMgYWZ0ZXIgaV9zaXplCmRpZmYgLS1naXQgYS90ZXN0cy9mX3VuaW5pdF9leHRfcGFzdF9lb2YyL2V4cGVjdC4xIGIvdGVzdHMvZl91bmluaXRfZXh0X3Bhc3RfZW9mMi9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjgyNDhlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl91bmluaXRfZXh0X3Bhc3RfZW9mMi9leHBlY3QuMQpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzE2IGZpbGVzICg4LjMlIG5vbi1jb250aWd1b3VzKSwgNzAvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl91bmluaXRfZXh0X3Bhc3RfZW9mMi9leHBlY3QuMiBiL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZjIvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4MjQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZjIvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8xNiBmaWxlcyAoOC4zJSBub24tY29udGlndW91cyksIDcwLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZjIvaW1hZ2UuZ3ogYi90ZXN0cy9mX3VuaW5pdF9leHRfcGFzdF9lb2YyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MzllNDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3VuaW5pdF9leHRfcGFzdF9lb2YyL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZjIvbmFtZSBiL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZjIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTJhMGY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl91bmluaXRfZXh0X3Bhc3RfZW9mMi9uYW1lCkBAIC0wLDAgKzEgQEAKK2ZhbGxvY2F0ZWQgZXh0ZW50cyBhZnRlciBub256ZXJvIGlfc2l6ZSBhbmQgdG90YWwgZXh0ZW50cyA+IDQKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfdW5pbml0X2xhc3RfdW5pbml0L2V4cGVjdC4xIGIvdGVzdHMvZl91bmluaXRfbGFzdF91bmluaXQvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4YmQyOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfdW5pbml0X2xhc3RfdW5pbml0L2V4cGVjdC4xCkBAIC0wLDAgKzEsOSBAQAorTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gIEZpeD8geWVzCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTA1LzEwMDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl91bmluaXRfbGFzdF91bmluaXQvZXhwZWN0LjIgYi90ZXN0cy9mX3VuaW5pdF9sYXN0X3VuaW5pdC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTVlNWVkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl91bmluaXRfbGFzdF91bmluaXQvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEwNS8xMDAwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfdW5pbml0X2xhc3RfdW5pbml0L25hbWUgYi90ZXN0cy9mX3VuaW5pdF9sYXN0X3VuaW5pdC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTNlMjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3VuaW5pdF9sYXN0X3VuaW5pdC9uYW1lCkBAIC0wLDAgKzEsMiBAQAorbGFzdCBncm91cCBoYXMgQkxPQ0tfVU5JTklUIHNldAorCmRpZmYgLS1naXQgYS90ZXN0cy9mX3VuaW5pdF9sYXN0X3VuaW5pdC9zY3JpcHQgYi90ZXN0cy9mX3VuaW5pdF9sYXN0X3VuaW5pdC9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc2Yzk3OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfdW5pbml0X2xhc3RfdW5pbml0L3NjcmlwdApAQCAtMCwwICsxLDI2IEBACitpZiB0ZXN0IC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCitTS0lQX0dVTlpJUD0idHJ1ZSIKKwordG91Y2ggJFRNUEZJTEUKKyRNS0UyRlMgLU4gMzIgLUYgLW8gTGludXggLU8gdW5pbml0X2JnIC1iIDEwMjQgJFRNUEZJTEUgMTAwMDAgPiAvZGV2L251bGwgMj4mMSAKKyRERUJVR0ZTIC13ICRUTVBGSUxFIDw8IEVPRiA+IC9kZXYvbnVsbCAyPiYxCitzZXRfY3VycmVudF90aW1lIDIwMDcwNDEwMjEwMDAwCitzZXRfc3VwZXJfdmFsdWUgbGFzdGNoZWNrIDAKK3NldF9zdXBlcl92YWx1ZSBoYXNoX3NlZWQgbnVsbAorc2V0X3N1cGVyX3ZhbHVlIG1rZnNfdGltZSAwCitzZXRfYmcgMSBmbGFncyAweDcKK3NldF9iZyAxIGNoZWNrc3VtIGNhbGMKK3EKK0VPRgorCitFMkZTQ0tfVElNRT0yMDA3MDQxMDIxMDAKK2V4cG9ydCBFMkZTQ0tfVElNRQorCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKKwordW5zZXQgRTJGU0NLX1RJTUUKKworZWxzZSAjaWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpIApkaWZmIC0tZ2l0IGEvdGVzdHMvZl91bnNvcnRlZF9FQXMvZXhwZWN0LjEgYi90ZXN0cy9mX3Vuc29ydGVkX0VBcy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDU4OGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl91bnNvcnRlZF9FQXMvZXhwZWN0LjEKQEAgLTAsMCArMSwxMSBAQAorQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMi8yMDQ4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTI5NC8yMDQ4IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl91bnNvcnRlZF9FQXMvZXhwZWN0LjIgYi90ZXN0cy9mX3Vuc29ydGVkX0VBcy9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTRjYzI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl91bnNvcnRlZF9FQXMvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8yMDQ4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTI5NC8yMDQ4IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl91bnNvcnRlZF9FQXMvaW1hZ2UuZ3ogYi90ZXN0cy9mX3Vuc29ydGVkX0VBcy9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmFiNTAyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl91bnNvcnRlZF9FQXMvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl91bnNvcnRlZF9FQXMvbmFtZSBiL3Rlc3RzL2ZfdW5zb3J0ZWRfRUFzL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5YzljMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfdW5zb3J0ZWRfRUFzL25hbWUKQEAgLTAsMCArMSBAQAordW5zb3J0ZWQgRUFzIGluIGlub2RlIHNob3VsZCBub3QgYmUgZGVsZXRlZApkaWZmIC0tZ2l0IGEvdGVzdHMvZl91bnVzZWRfaXRhYmxlL2V4cGVjdC4xIGIvdGVzdHMvZl91bnVzZWRfaXRhYmxlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZGE5ODcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3VudXNlZF9pdGFibGUvZXhwZWN0LjEKQEAgLTAsMCArMSwyOCBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0VudHJ5ICdmb28nIGluIC8gKDIpIHJlZmVyZW5jZXMgaW5vZGUgNjUgZm91bmQgaW4gZ3JvdXAgMSdzIHVudXNlZCBpbm9kZXMgYXJlYS4KK0ZpeD8geWVzCisKK0VudHJ5ICcxJyBpbiAvICgyKSByZWZlcmVuY2VzIGlub2RlIDEyIGZvdW5kIGluIGdyb3VwIDAncyB1bnVzZWQgaW5vZGVzIGFyZWEuCitGaXg/IHllcworCitSZXN0YXJ0aW5nIGUyZnNjayBmcm9tIHRoZSBiZWdpbm5pbmcuLi4KK09uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgRml4PyB5ZXMKKworR3JvdXAgZGVzY3JpcHRvciAwIGNoZWNrc3VtIGlzIDB4Mjg5ZCwgc2hvdWxkIGJlIDB4Nzg4YS4gIEZJWEVELgorR3JvdXAgZGVzY3JpcHRvciAxIGNoZWNrc3VtIGlzIDB4ZmFhYiwgc2hvdWxkIGJlIDB4M2E5YS4gIEZJWEVELgorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNTMsIGNvdW50ZWQ9NTEpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMxICg2NCwgY291bnRlZD01OCkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE5LzEyOCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDE2NS8xMDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl91bnVzZWRfaXRhYmxlL2V4cGVjdC4yIGIvdGVzdHMvZl91bnVzZWRfaXRhYmxlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3OWQzMTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3VudXNlZF9pdGFibGUvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxOS8xMjggZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxNjUvMTAwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfdW51c2VkX2l0YWJsZS9pbWFnZS5neiBiL3Rlc3RzL2ZfdW51c2VkX2l0YWJsZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTkzZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl91bnVzZWRfaXRhYmxlL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfdW51c2VkX2l0YWJsZS9uYW1lIGIvdGVzdHMvZl91bnVzZWRfaXRhYmxlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEyOTEzNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfdW51c2VkX2l0YWJsZS9uYW1lCkBAIC0wLDAgKzEgQEAKK0Rvbid0IG1vdmUgZmlsZXMgdG8gbG9zdCtmb3VuZCBmb3IgYmdfdW51c2VkX2l0YWJsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl92YWxpZF9lYV9pbl9pbm9kZS9leHBlY3QuMSBiL3Rlc3RzL2ZfdmFsaWRfZWFfaW5faW5vZGUvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRkNmRkMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfdmFsaWRfZWFfaW5faW5vZGUvZXhwZWN0LjEKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAyMi8yMDQ4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjA3Mi84MTkyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl92YWxpZF9lYV9pbl9pbm9kZS9pbWFnZS5neiBiL3Rlc3RzL2ZfdmFsaWRfZWFfaW5faW5vZGUvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwZjc4MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfdmFsaWRfZWFfaW5faW5vZGUvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl92YWxpZF9lYV9pbl9pbm9kZS9uYW1lIGIvdGVzdHMvZl92YWxpZF9lYV9pbl9pbm9kZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMDI4NzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3ZhbGlkX2VhX2luX2lub2RlL25hbWUKQEAgLTAsMCArMSBAQAordmFsaWQgZWEtaW4taW5vZGUgZXhhbXBsYXJzCmRpZmYgLS1naXQgYS90ZXN0cy9mX3ZhbGlkX2VhX2luX2lub2RlL3NjcmlwdCBiL3Rlc3RzL2ZfdmFsaWRfZWFfaW5faW5vZGUvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYjJiOWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3ZhbGlkX2VhX2luX2lub2RlL3NjcmlwdApAQCAtMCwwICsxLDIgQEAKK09ORV9QQVNTX09OTFk9InRydWUiCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfemVyb19ncm91cC9leHBlY3QuMSBiL3Rlc3RzL2ZfemVyb19ncm91cC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTA3NzY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl96ZXJvX2dyb3VwL2V4cGVjdC4xCkBAIC0wLDAgKzEsMjMgQEAKK2V4dDJmc19jaGVja19kZXNjOiBDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgYmxvY2sgYml0bWFwCisuLi9lMmZzY2svZTJmc2NrOiBHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiB0cnlpbmcgYmFja3VwIGJsb2Nrcy4uLgorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzk4NywgY291bnRlZD03OTgyKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICgxMTYwMiwgY291bnRlZD0xMTU5NykuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDE0OTMsIGNvdW50ZWQ9MTQ4OCkuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoMjk5NywgY291bnRlZD0yOTkyKS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTYvMzAwOCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDQwMy8xMjAwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfemVyb19ncm91cC9leHBlY3QuMiBiL3Rlc3RzL2ZfemVyb19ncm91cC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODMzYWVmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl96ZXJvX2dyb3VwL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTYvMzAwOCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDQwMy8xMjAwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfemVyb19ncm91cC9pbWFnZS5neiBiL3Rlc3RzL2ZfemVyb19ncm91cC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTU0OTNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl96ZXJvX2dyb3VwL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfemVyb19ncm91cC9uYW1lIGIvdGVzdHMvZl96ZXJvX2dyb3VwL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NiM2I5NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfemVyb19ncm91cC9uYW1lCkBAIC0wLDAgKzEgQEAKK2ZhbGxiYWNrIGZvciBkYW1hZ2VkIGdyb3VwIGRlc2NyaXB0b3JzCmRpZmYgLS1naXQgYS90ZXN0cy9mX3plcm9faW5vZGVfc2l6ZS9leHBlY3QuMSBiL3Rlc3RzL2ZfemVyb19pbm9kZV9zaXplL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YmQ3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3plcm9faW5vZGVfc2l6ZS9leHBlY3QuMQpAQCAtMCwwICsxLDExIEBACitleHQyZnNfb3BlbjI6IFRoZSBleHQyIHN1cGVyYmxvY2sgaXMgY29ycnVwdAorLi4vZTJmc2NrL2UyZnNjazogU3VwZXJibG9jayBpbnZhbGlkLCB0cnlpbmcgYmFja3VwIGJsb2Nrcy4uLgorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvMjUxMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDQxNS8xMDAwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfemVyb19pbm9kZV9zaXplL2V4cGVjdC4yIGIvdGVzdHMvZl96ZXJvX2lub2RlX3NpemUvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5NDgwNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfemVyb19pbm9kZV9zaXplL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMjUxMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDQxNS8xMDAwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfemVyb19pbm9kZV9zaXplL2ltYWdlLmd6IGIvdGVzdHMvZl96ZXJvX2lub2RlX3NpemUvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ1MDNjOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfemVyb19pbm9kZV9zaXplL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfemVyb19pbm9kZV9zaXplL25hbWUgYi90ZXN0cy9mX3plcm9faW5vZGVfc2l6ZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlODhkOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3plcm9faW5vZGVfc2l6ZS9uYW1lCkBAIC0wLDAgKzEgQEAKK3N1cGVyYmxvY2sgd2l0aCBhIHplcm8gaW5vZGUgc2l6ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl96ZXJvX3N1cGVyL2V4cGVjdC4xIGIvdGVzdHMvZl96ZXJvX3N1cGVyL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYjk1NGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3plcm9fc3VwZXIvZXhwZWN0LjEKQEAgLTAsMCArMSwyMyBAQAorZXh0MmZzX29wZW4yOiBCYWQgbWFnaWMgbnVtYmVyIGluIHN1cGVyLWJsb2NrCisuLi9lMmZzY2svZTJmc2NrOiBTdXBlcmJsb2NrIGludmFsaWQsIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3OTg3LCBjb3VudGVkPTc5ODIpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDExNjAyLCBjb3VudGVkPTExNTk3KS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMTQ5MywgY291bnRlZD0xNDg4KS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nICgyOTk3LCBjb3VudGVkPTI5OTIpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxNi8zMDA4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNDAzLzEyMDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZl96ZXJvX3N1cGVyL2V4cGVjdC4yIGIvdGVzdHMvZl96ZXJvX3N1cGVyL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MzNhZWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3plcm9fc3VwZXIvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNi8zMDA4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNDAzLzEyMDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvZl96ZXJvX3N1cGVyL2ltYWdlLmd6IGIvdGVzdHMvZl96ZXJvX3N1cGVyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYTkxNDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3plcm9fc3VwZXIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl96ZXJvX3N1cGVyL25hbWUgYi90ZXN0cy9mX3plcm9fc3VwZXIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDk5OTg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl96ZXJvX3N1cGVyL25hbWUKQEAgLTAsMCArMSBAQAorZmFsbGJhY2sgZm9yIGRhbWFnZWQgc3VwZXJibG9jawpkaWZmIC0tZ2l0IGEvdGVzdHMvZl96ZXJvX3hhdHRyL2V4cGVjdC4xIGIvdGVzdHMvZl96ZXJvX3hhdHRyL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MzNhZjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mX3plcm9feGF0dHIvZXhwZWN0LjEKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8yNCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI1LzIwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfemVyb194YXR0ci9pbWFnZS5neiBiL3Rlc3RzL2ZfemVyb194YXR0ci9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDA1NTUyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZl96ZXJvX3hhdHRyL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfemVyb194YXR0ci9uYW1lIGIvdGVzdHMvZl96ZXJvX3hhdHRyL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhYWIxNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfemVyb194YXR0ci9uYW1lCkBAIC0wLDAgKzEgQEAKK3plcm8gbGVuZ3RoIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbi1pbm9kZSB4YXR0cgpkaWZmIC0tZ2l0IGEvdGVzdHMvZl96ZXJvX3hhdHRyL3NjcmlwdCBiL3Rlc3RzL2ZfemVyb194YXR0ci9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiMmI5YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZfemVyb194YXR0ci9zY3JpcHQKQEAgLTAsMCArMSwyIEBACitPTkVfUEFTU19PTkxZPSJ0cnVlIgorLiAkY21kX2Rpci9ydW5fZTJmc2NrCmRpZmYgLS1naXQgYS90ZXN0cy9maWx0ZXIuc2VkIGIvdGVzdHMvZmlsdGVyLnNlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWI5NTZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZmlsdGVyLnNlZApAQCAtMCwwICsxLDE5IEBACisvXltkYmd1bXBlMmZzY2tyc2l6XSogWzEtOV1cLlswLTldKlsuLV1bXiBdKiAoWzAtOV0qLVtBLVphLXpdKi1bMC05XSopL2QKK3MvXFwwMTUvL2cKKy9hdXRvbWF0aWNhbGx5IGNoZWNrZWQvZAorL15EaXJlY3RvcnkgSGFzaCBTZWVkOi9kCisvRGlzY2FyZGluZyBkZXZpY2UgYmxvY2tzL2QKKy9eRmlsZXN5c3RlbSBjcmVhdGVkOi9kCisvXkZpbGVzeXN0ZW0gZmxhZ3M6L2QKKy9eRmlsZXN5c3RlbSBVVUlEOi9kCisvXkpGUyBERUJVRzovZAorL15MYXN0IHdyaXRlIHRpbWU6L2QKKy9eTGFzdCBtb3VudCB0aW1lOi9kCisvXkxhc3QgY2hlY2tlZDovZAorL15MaWZldGltZSB3cml0ZXM6L2QKKy9eTWF4aW11bSBtb3VudCBjb3VudDovZAorL15OZXh0IGNoZWNrIGFmdGVyOi9kCisvUmVzZXJ2ZWQgYmxvY2tzIHVpZDovcy8gKHVzZXIgLiopLy8KKy9SZXNlcnZlZCBibG9ja3MgZ2lkOi9zLyAoZ3JvdXAgLiopLy8KKy93aGljaGV2ZXIgY29tZXMgZmlyc3QvZAorL14gIENoZWNrc3VtIC9kCmRpZmYgLS1naXQgYS90ZXN0cy9pX2UyaW1hZ2UvaV9lMmltYWdlLmNyYyBiL3Rlc3RzL2lfZTJpbWFnZS9pX2UyaW1hZ2UuY3JjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYTg0NjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pX2UyaW1hZ2UvaV9lMmltYWdlLmNyYwpAQCAtMCwwICsxLDE1IEBACitpX2UyaW1hZ2UvaW1hZ2UxMDI0Lm9yaWcKKzIxNjEwNzg2NDcJaW1hZ2UxMDI0Lm9yaWcKKzQ2NzI3NzE5OAlfaW1hZ2UucmF3CisyMTY0MjEyNDQ5CV9pbWFnZS5xY293MgorNDY3Mjc3MTk4CV9pbWFnZS5xY293Mi5yYXcKK2lfZTJpbWFnZS9pbWFnZTIwNDgub3JpZworNjcyNzQwNjQyCWltYWdlMjA0OC5vcmlnCiszNjg4NDA4MzUwCV9pbWFnZS5yYXcKKzM4MjE0MTI3NTMJX2ltYWdlLnFjb3cyCiszNjg4NDA4MzUwCV9pbWFnZS5xY293Mi5yYXcKK2lfZTJpbWFnZS9pbWFnZTQwOTYub3JpZworNDA3NzU1MjQxMglpbWFnZTQwOTYub3JpZworNDE1OTQ3MTM4OAlfaW1hZ2UucmF3Cis2MzYzNTQ4OTQJX2ltYWdlLnFjb3cyCis0MTU5NDcxMzg4CV9pbWFnZS5xY293Mi5yYXcKZGlmZiAtLWdpdCBhL3Rlc3RzL2lfZTJpbWFnZS9pbWFnZTEwMjQub3JpZy5iejIgYi90ZXN0cy9pX2UyaW1hZ2UvaW1hZ2UxMDI0Lm9yaWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTBmODYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pX2UyaW1hZ2UvaW1hZ2UxMDI0Lm9yaWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2lfZTJpbWFnZS9pbWFnZTIwNDgub3JpZy5iejIgYi90ZXN0cy9pX2UyaW1hZ2UvaW1hZ2UyMDQ4Lm9yaWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZDA3YTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pX2UyaW1hZ2UvaW1hZ2UyMDQ4Lm9yaWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2lfZTJpbWFnZS9pbWFnZTQwOTYub3JpZy5iejIgYi90ZXN0cy9pX2UyaW1hZ2UvaW1hZ2U0MDk2Lm9yaWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxN2I1YTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pX2UyaW1hZ2UvaW1hZ2U0MDk2Lm9yaWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2lfZTJpbWFnZS9zY3JpcHQgYi90ZXN0cy9pX2UyaW1hZ2Uvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YjA2NjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pX2UyaW1hZ2Uvc2NyaXB0CkBAIC0wLDAgKzEsNTkgQEAKK3Rlc3RfZGVzY3JpcHRpb249ImNyZWF0ZS9jb252ZXJ0IHJhdy9xY293MiBpbWFnZXMiCitpZiB0ZXN0IC14ICRFMklNQUdFX0VYRTsgdGhlbgorCitPUklHX0lNQUdFUz0iaW1hZ2UxMDI0Lm9yaWcgaW1hZ2UyMDQ4Lm9yaWcgaW1hZ2U0MDk2Lm9yaWciCisKK1JBV19JTUc9X2ltYWdlLnJhdworUUNPVzJfSU1HPV9pbWFnZS5xY293MgorUUNPVzJfVE9fUkFXPV9pbWFnZS5xY293Mi5yYXcKK09VVD0kdGVzdF9uYW1lLmxvZworQ1JDPSRTUkNESVIvJHRlc3RfbmFtZS8kdGVzdF9uYW1lLmNyYworQ1JDX1RNUD0kdGVzdF9uYW1lLmNyYy50bXAKKworcm0gLWYgJHRlc3RfbmFtZS9faW1hZ2UuKiAkQ1JDX1RNUCAkT1VUID4vZGV2L251bGwgMj4mMQorCisoCitmb3IgaSBpbiAkT1JJR19JTUFHRVM7IGRvCisJT1JJR19JTUc9JHRlc3RfbmFtZS8kaQorCWVjaG8gJE9SSUdfSU1HID4+ICRDUkNfVE1QCisKKwlidW56aXAyIDwgJFNSQ0RJUi8kT1JJR19JTUcuYnoyID4gJGkKKwllY2hvICIkKCRDUkNTVU0gJGkpCSRpIiA+PiAkQ1JDX1RNUAorCisJcm0gLWYgJFJBV19JTUcKKwllY2hvICJlMmltYWdlIC1yICRPUklHX0lNRyAkUkFXX0lNRyIKKwkkRTJJTUFHRSAgICAgIC1yICRpICRSQVdfSU1HCisJZWNobyAiJCgkQ1JDU1VNICRSQVdfSU1HKQkkUkFXX0lNRyIgID4+ICRDUkNfVE1QCisKKwllY2hvICJlMmltYWdlIC1RICRPUklHX0lNRyAkUUNPVzJfSU1HIgorCSRFMklNQUdFICAgICAgLVEgJGkgJFFDT1cyX0lNRworCWVjaG8gIiQoJENSQ1NVTSAkUUNPVzJfSU1HKQkkUUNPVzJfSU1HIiAgPj4gJENSQ19UTVAKKworCXJtIC1mICRRQ09XMl9UT19SQVcKKwllY2hvICJlMmltYWdlIC1yICRRQ09XMl9JTUcgJFFDT1cyX1RPX1JBVyIKKwkkRTJJTUFHRSAgICAgIC1yICRpICRRQ09XMl9UT19SQVcKKwllY2hvICIkKCRDUkNTVU0gJFFDT1cyX1RPX1JBVykJJFFDT1cyX1RPX1JBVyIgPj4gJENSQ19UTVAKKworCXJtIC1mICRpCitkb25lCispID4+ICRPVVQgMj4mMQorCitlY2hvICJjaGVja3N1bToiID4+ICRPVVQKK2NhdCAkQ1JDX1RNUCA+PiAkT1VUCitlY2hvICIiID4+ICRPVVQKKworZGlmZiAkQ1JDICRDUkNfVE1QID4+ICRPVVQgMj4mMQorCitpZiBbICQ/IC1lcSAwIF07IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWxuIC1mICR0ZXN0X25hbWUubG9nICR0ZXN0X25hbWUuZmFpbGVkCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IGZhaWxlZCIKK2ZpCisKK3JtIC1mIF9pbWFnZS4qICRDUkNfVE1QID4vZGV2L251bGwgMj4mMQorCitlbHNlICNpZiB0ZXN0IC14ICRFMklNQUdFX0VYRTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkKZGlmZiAtLWdpdCBhL3Rlc3RzL21fNjRiaXRfZmxleGJnL2V4cGVjdC4xIGIvdGVzdHMvbV82NGJpdF9mbGV4YmcvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYzNTMxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21fNjRiaXRfZmxleGJnL2V4cGVjdC4xCkBAIC0wLDAgKzEsNTUgQEAKK0NyZWF0aW5nIGZpbGVzeXN0ZW0gd2l0aCAxMDI0IDFrIGJsb2NrcyBhbmQgMTI4IGlub2RlcworCitBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogICAgCAgIZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dyaXRpbmcgaW5vZGUgdGFibGVzOiAgICAICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAICAhkb25lCisKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6IGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgZXh0ZW50IDY0Yml0IGZsZXhfYmcgc3BhcnNlX3N1cGVyCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8xMjggZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA0Mi8xMDI0IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMAorRmlsZXN5c3RlbSB2b2x1bWUgbmFtZTogICA8bm9uZT4KK0xhc3QgbW91bnRlZCBvbjogICAgICAgICAgPG5vdCBhdmFpbGFibGU+CitGaWxlc3lzdGVtIG1hZ2ljIG51bWJlcjogIDB4RUY1MworRmlsZXN5c3RlbSByZXZpc2lvbiAjOiAgICAxIChkeW5hbWljKQorRmlsZXN5c3RlbSBmZWF0dXJlczogICAgICBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIGV4dGVudCA2NGJpdCBmbGV4X2JnIHNwYXJzZV9zdXBlcgorRGVmYXVsdCBtb3VudCBvcHRpb25zOiAgICAobm9uZSkKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgQ29udGludWUKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgMTI4CitCbG9jayBjb3VudDogICAgICAgICAgICAgIDEwMjQKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgNTEKK0ZyZWUgYmxvY2tzOiAgICAgICAgICAgICAgOTgyCitGcmVlIGlub2RlczogICAgICAgICAgICAgIDExNworRmlyc3QgYmxvY2s6ICAgICAgICAgICAgICAxCitCbG9jayBzaXplOiAgICAgICAgICAgICAgIDEwMjQKK0ZyYWdtZW50IHNpemU6ICAgICAgICAgICAgMTAyNAorR3JvdXAgZGVzY3JpcHRvciBzaXplOiAgICA2NAorUmVzZXJ2ZWQgR0RUIGJsb2NrczogICAgICA3CitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDgxOTIKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgODE5MgorSW5vZGVzIHBlciBncm91cDogICAgICAgICAxMjgKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgMTYKK0ZsZXggYmxvY2sgZ3JvdXAgc2l6ZTogICAgMTYKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMS0xMDIzKQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMi0yCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMy05CisgIEJsb2NrIGJpdG1hcCBhdCAxMCAoKzkpLCBJbm9kZSBiaXRtYXAgYXQgMjYgKCsyNSkKKyAgSW5vZGUgdGFibGUgYXQgNDItNTcgKCs0MSkKKyAgOTgyIGZyZWUgYmxvY2tzLCAxMTcgZnJlZSBpbm9kZXMsIDIgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI0LTI1LCAyOC00MSwgNTgtMTAyMworICBGcmVlIGlub2RlczogMTItMTI4CmRpZmYgLS1naXQgYS90ZXN0cy9tXzY0Yml0X2ZsZXhiZy9zY3JpcHQgYi90ZXN0cy9tXzY0Yml0X2ZsZXhiZy9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg2ODRlNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21fNjRiaXRfZmxleGJnL3NjcmlwdApAQCAtMCwwICsxLDQgQEAKK0RFU0NSSVBUSU9OPSJta2ZzIHdpdGggNjRiaXQgYW5kIGZsZXhfYmciCitGU19TSVpFPTFNCitNS0UyRlNfT1BUUz0iLU8gNjRiaXQsZXh0ZW50cyxmbGV4X2JnIgorLiAkY21kX2Rpci9ydW5fbWtlMmZzCmRpZmYgLS1naXQgYS90ZXN0cy9tX2JpZ2pvdXJuYWwvZXhwZWN0LjEgYi90ZXN0cy9tX2JpZ2pvdXJuYWwvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI0NjczOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21fYmlnam91cm5hbC9leHBlY3QuMQpAQCAtMCwwICsxLDU3MyBAQAorRmlsZXN5c3RlbSBmZWF0dXJlczogaGFzX2pvdXJuYWwgZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBleHRlbnQgZmxleF9iZyBzcGFyc2Vfc3VwZXIgbGFyZ2VfZmlsZSBodWdlX2ZpbGUgdW5pbml0X2JnIGRpcl9ubGluayBleHRyYV9pc2l6ZQorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMTM0NCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEyODY5ODkvMjc1MDAwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKK0ZpbGVzeXN0ZW0gdm9sdW1lIG5hbWU6ICAgPG5vbmU+CitMYXN0IG1vdW50ZWQgb246ICAgICAgICAgIDxub3QgYXZhaWxhYmxlPgorRmlsZXN5c3RlbSBtYWdpYyBudW1iZXI6ICAweEVGNTMKK0ZpbGVzeXN0ZW0gcmV2aXNpb24gIzogICAgMSAoZHluYW1pYykKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6ICAgICAgaGFzX2pvdXJuYWwgZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBleHRlbnQgZmxleF9iZyBzcGFyc2Vfc3VwZXIgbGFyZ2VfZmlsZSBodWdlX2ZpbGUgdW5pbml0X2JnIGRpcl9ubGluayBleHRyYV9pc2l6ZQorRGVmYXVsdCBtb3VudCBvcHRpb25zOiAgICAobm9uZSkKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgQ29udGludWUKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgMTM0NAorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICAyNzUwMDAwCitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDEzNzUwMAorRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAxNDYzMDExCitGcmVlIGlub2RlczogICAgICAgICAgICAgIDEzMzMKK0ZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgMAorQmxvY2sgc2l6ZTogICAgICAgICAgICAgICA0MDk2CitGcmFnbWVudCBzaXplOiAgICAgICAgICAgIDQwOTYKK1Jlc2VydmVkIEdEVCBibG9ja3M6ICAgICAgNjcxCitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDMyNzY4CitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDMyNzY4CitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDE2CitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDEKK0ZsZXggYmxvY2sgZ3JvdXAgc2l6ZTogICAgNTEyCitNb3VudCBjb3VudDogICAgICAgICAgICAgIDAKK0NoZWNrIGludGVydmFsOiAgICAgICAgICAgMTU1NTIwMDAgKDYgbW9udGhzKQorUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAwCitSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgIDAKK0ZpcnN0IGlub2RlOiAgICAgICAgICAgICAgMTEKK0lub2RlIHNpemU6CSAgICAgICAgICAyNTYKK1JlcXVpcmVkIGV4dHJhIGlzaXplOiAgICAgMjgKK0Rlc2lyZWQgZXh0cmEgaXNpemU6ICAgICAgMjgKK0pvdXJuYWwgaW5vZGU6ICAgICAgICAgICAgOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorSm91cm5hbCBiYWNrdXA6ICAgICAgICAgICBpbm9kZSBibG9ja3MKK0pvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAgKG5vbmUpCitKb3VybmFsIHNpemU6ICAgICAgICAgICAgIDUwMDBNCitKb3VybmFsIGxlbmd0aDogICAgICAgICAgIDEyODAwMDAKK0pvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHgwMDAwMDAwMQorSm91cm5hbCBzdGFydDogICAgICAgICAgICAwCisKKworR3JvdXAgMDogKEJsb2NrcyAwLTMyNzY3KQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMCwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMS0xCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMi02NzIKKyAgQmxvY2sgYml0bWFwIGF0IDY3MyAoKzY3MyksIElub2RlIGJpdG1hcCBhdCA3NTcgKCs3NTcpCisgIElub2RlIHRhYmxlIGF0IDg0MS04NDEgKCs4NDEpCisgIDMxODM2IGZyZWUgYmxvY2tzLCA1IGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzLCA1IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDkzMi0zMjc2NworICBGcmVlIGlub2RlczogMTItMTYKK0dyb3VwIDE6IChCbG9ja3MgMzI3NjgtNjU1MzUpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMzI3NjgsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDMyNzY5LTMyNzY5CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMzI3NzAtMzM0NDAKKyAgQmxvY2sgYml0bWFwIGF0IDY3NCAoYmcgIzAgKyA2NzQpLCBJbm9kZSBiaXRtYXAgYXQgNzU4IChiZyAjMCArIDc1OCkKKyAgSW5vZGUgdGFibGUgYXQgODQyLTg0MiAoYmcgIzAgKyA4NDIpCisgIDMyMDk1IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMzM0NDEtNjU1MzUKKyAgRnJlZSBpbm9kZXM6IDE3LTMyCitHcm91cCAyOiAoQmxvY2tzIDY1NTM2LTk4MzAzKSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2NzUgKGJnICMwICsgNjc1KSwgSW5vZGUgYml0bWFwIGF0IDc1OSAoYmcgIzAgKyA3NTkpCisgIElub2RlIHRhYmxlIGF0IDg0My04NDMgKGJnICMwICsgODQzKQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDY1NTM2LTk4MzAzCisgIEZyZWUgaW5vZGVzOiAzMy00OAorR3JvdXAgMzogKEJsb2NrcyA5ODMwNC0xMzEwNzEpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgOTgzMDQsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDk4MzA1LTk4MzA1CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgOTgzMDYtOTg5NzYKKyAgQmxvY2sgYml0bWFwIGF0IDY3NiAoYmcgIzAgKyA2NzYpLCBJbm9kZSBiaXRtYXAgYXQgNzYwIChiZyAjMCArIDc2MCkKKyAgSW5vZGUgdGFibGUgYXQgODQ0LTg0NCAoYmcgIzAgKyA4NDQpCisgIDMyMDk1IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogOTg5NzctMTMxMDcxCisgIEZyZWUgaW5vZGVzOiA0OS02NAorR3JvdXAgNDogKEJsb2NrcyAxMzEwNzItMTYzODM5KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2NzcgKGJnICMwICsgNjc3KSwgSW5vZGUgYml0bWFwIGF0IDc2MSAoYmcgIzAgKyA3NjEpCisgIElub2RlIHRhYmxlIGF0IDg0NS04NDUgKGJnICMwICsgODQ1KQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDEzMTA3Mi0xNjM4MzkKKyAgRnJlZSBpbm9kZXM6IDY1LTgwCitHcm91cCA1OiAoQmxvY2tzIDE2Mzg0MC0xOTY2MDcpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTYzODQwLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAxNjM4NDEtMTYzODQxCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTYzODQyLTE2NDUxMgorICBCbG9jayBiaXRtYXAgYXQgNjc4IChiZyAjMCArIDY3OCksIElub2RlIGJpdG1hcCBhdCA3NjIgKGJnICMwICsgNzYyKQorICBJbm9kZSB0YWJsZSBhdCA4NDYtODQ2IChiZyAjMCArIDg0NikKKyAgMzIwOTUgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxNjQ1MTMtMTk2NjA3CisgIEZyZWUgaW5vZGVzOiA4MS05NgorR3JvdXAgNjogKEJsb2NrcyAxOTY2MDgtMjI5Mzc1KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2NzkgKGJnICMwICsgNjc5KSwgSW5vZGUgYml0bWFwIGF0IDc2MyAoYmcgIzAgKyA3NjMpCisgIElub2RlIHRhYmxlIGF0IDg0Ny04NDcgKGJnICMwICsgODQ3KQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDE5NjYwOC0yMjkzNzUKKyAgRnJlZSBpbm9kZXM6IDk3LTExMgorR3JvdXAgNzogKEJsb2NrcyAyMjkzNzYtMjYyMTQzKSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDIyOTM3NiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjI5Mzc3LTIyOTM3NworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDIyOTM3OC0yMzAwNDgKKyAgQmxvY2sgYml0bWFwIGF0IDY4MCAoYmcgIzAgKyA2ODApLCBJbm9kZSBiaXRtYXAgYXQgNzY0IChiZyAjMCArIDc2NCkKKyAgSW5vZGUgdGFibGUgYXQgODQ4LTg0OCAoYmcgIzAgKyA4NDgpCisgIDMyMDk1IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMjMwMDQ5LTI2MjE0MworICBGcmVlIGlub2RlczogMTEzLTEyOAorR3JvdXAgODogKEJsb2NrcyAyNjIxNDQtMjk0OTExKSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2ODEgKGJnICMwICsgNjgxKSwgSW5vZGUgYml0bWFwIGF0IDc2NSAoYmcgIzAgKyA3NjUpCisgIElub2RlIHRhYmxlIGF0IDg0OS04NDkgKGJnICMwICsgODQ5KQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDI2MjE0NC0yOTQ5MTEKKyAgRnJlZSBpbm9kZXM6IDEyOS0xNDQKK0dyb3VwIDk6IChCbG9ja3MgMjk0OTEyLTMyNzY3OSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyOTQ5MTIsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI5NDkxMy0yOTQ5MTMKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyOTQ5MTQtMjk1NTg0CisgIEJsb2NrIGJpdG1hcCBhdCA2ODIgKGJnICMwICsgNjgyKSwgSW5vZGUgYml0bWFwIGF0IDc2NiAoYmcgIzAgKyA3NjYpCisgIElub2RlIHRhYmxlIGF0IDg1MC04NTAgKGJnICMwICsgODUwKQorICAzMjA5NSBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDI5NTU4NS0zMjc2NzkKKyAgRnJlZSBpbm9kZXM6IDE0NS0xNjAKK0dyb3VwIDEwOiAoQmxvY2tzIDMyNzY4MC0zNjA0NDcpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDY4MyAoYmcgIzAgKyA2ODMpLCBJbm9kZSBiaXRtYXAgYXQgNzY3IChiZyAjMCArIDc2NykKKyAgSW5vZGUgdGFibGUgYXQgODUxLTg1MSAoYmcgIzAgKyA4NTEpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMzI3NjgwLTM2MDQ0NworICBGcmVlIGlub2RlczogMTYxLTE3NgorR3JvdXAgMTE6IChCbG9ja3MgMzYwNDQ4LTM5MzIxNSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNjg0IChiZyAjMCArIDY4NCksIElub2RlIGJpdG1hcCBhdCA3NjggKGJnICMwICsgNzY4KQorICBJbm9kZSB0YWJsZSBhdCA4NTItODUyIChiZyAjMCArIDg1MikKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAzNjA0NDgtMzkzMjE1CisgIEZyZWUgaW5vZGVzOiAxNzctMTkyCitHcm91cCAxMjogKEJsb2NrcyAzOTMyMTYtNDI1OTgzKSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2ODUgKGJnICMwICsgNjg1KSwgSW5vZGUgYml0bWFwIGF0IDc2OSAoYmcgIzAgKyA3NjkpCisgIElub2RlIHRhYmxlIGF0IDg1My04NTMgKGJnICMwICsgODUzKQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDM5MzIxNi00MjU5ODMKKyAgRnJlZSBpbm9kZXM6IDE5My0yMDgKK0dyb3VwIDEzOiAoQmxvY2tzIDQyNTk4NC00NTg3NTEpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDY4NiAoYmcgIzAgKyA2ODYpLCBJbm9kZSBiaXRtYXAgYXQgNzcwIChiZyAjMCArIDc3MCkKKyAgSW5vZGUgdGFibGUgYXQgODU0LTg1NCAoYmcgIzAgKyA4NTQpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogNDI1OTg0LTQ1ODc1MQorICBGcmVlIGlub2RlczogMjA5LTIyNAorR3JvdXAgMTQ6IChCbG9ja3MgNDU4NzUyLTQ5MTUxOSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNjg3IChiZyAjMCArIDY4NyksIElub2RlIGJpdG1hcCBhdCA3NzEgKGJnICMwICsgNzcxKQorICBJbm9kZSB0YWJsZSBhdCA4NTUtODU1IChiZyAjMCArIDg1NSkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA0NTg3NTItNDkxNTE5CisgIEZyZWUgaW5vZGVzOiAyMjUtMjQwCitHcm91cCAxNTogKEJsb2NrcyA0OTE1MjAtNTI0Mjg3KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2ODggKGJnICMwICsgNjg4KSwgSW5vZGUgYml0bWFwIGF0IDc3MiAoYmcgIzAgKyA3NzIpCisgIElub2RlIHRhYmxlIGF0IDg1Ni04NTYgKGJnICMwICsgODU2KQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDQ5MTUyMC01MjQyODcKKyAgRnJlZSBpbm9kZXM6IDI0MS0yNTYKK0dyb3VwIDE2OiAoQmxvY2tzIDUyNDI4OC01NTcwNTUpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDY4OSAoYmcgIzAgKyA2ODkpLCBJbm9kZSBiaXRtYXAgYXQgNzczIChiZyAjMCArIDc3MykKKyAgSW5vZGUgdGFibGUgYXQgODU3LTg1NyAoYmcgIzAgKyA4NTcpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogNTI0Mjg4LTU1NzA1NQorICBGcmVlIGlub2RlczogMjU3LTI3MgorR3JvdXAgMTc6IChCbG9ja3MgNTU3MDU2LTU4OTgyMykgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNjkwIChiZyAjMCArIDY5MCksIElub2RlIGJpdG1hcCBhdCA3NzQgKGJnICMwICsgNzc0KQorICBJbm9kZSB0YWJsZSBhdCA4NTgtODU4IChiZyAjMCArIDg1OCkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA1NTcwNTYtNTg5ODIzCisgIEZyZWUgaW5vZGVzOiAyNzMtMjg4CitHcm91cCAxODogKEJsb2NrcyA1ODk4MjQtNjIyNTkxKSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2OTEgKGJnICMwICsgNjkxKSwgSW5vZGUgYml0bWFwIGF0IDc3NSAoYmcgIzAgKyA3NzUpCisgIElub2RlIHRhYmxlIGF0IDg1OS04NTkgKGJnICMwICsgODU5KQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDU4OTgyNC02MjI1OTEKKyAgRnJlZSBpbm9kZXM6IDI4OS0zMDQKK0dyb3VwIDE5OiAoQmxvY2tzIDYyMjU5Mi02NTUzNTkpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDY5MiAoYmcgIzAgKyA2OTIpLCBJbm9kZSBiaXRtYXAgYXQgNzc2IChiZyAjMCArIDc3NikKKyAgSW5vZGUgdGFibGUgYXQgODYwLTg2MCAoYmcgIzAgKyA4NjApCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogNjIyNTkyLTY1NTM1OQorICBGcmVlIGlub2RlczogMzA1LTMyMAorR3JvdXAgMjA6IChCbG9ja3MgNjU1MzYwLTY4ODEyNykgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNjkzIChiZyAjMCArIDY5MyksIElub2RlIGJpdG1hcCBhdCA3NzcgKGJnICMwICsgNzc3KQorICBJbm9kZSB0YWJsZSBhdCA4NjEtODYxIChiZyAjMCArIDg2MSkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA2NTUzNjAtNjg4MTI3CisgIEZyZWUgaW5vZGVzOiAzMjEtMzM2CitHcm91cCAyMTogKEJsb2NrcyA2ODgxMjgtNzIwODk1KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2OTQgKGJnICMwICsgNjk0KSwgSW5vZGUgYml0bWFwIGF0IDc3OCAoYmcgIzAgKyA3NzgpCisgIElub2RlIHRhYmxlIGF0IDg2Mi04NjIgKGJnICMwICsgODYyKQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDY4ODEyOC03MjA4OTUKKyAgRnJlZSBpbm9kZXM6IDMzNy0zNTIKK0dyb3VwIDIyOiAoQmxvY2tzIDcyMDg5Ni03NTM2NjMpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDY5NSAoYmcgIzAgKyA2OTUpLCBJbm9kZSBiaXRtYXAgYXQgNzc5IChiZyAjMCArIDc3OSkKKyAgSW5vZGUgdGFibGUgYXQgODYzLTg2MyAoYmcgIzAgKyA4NjMpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogNzIwODk2LTc1MzY2MworICBGcmVlIGlub2RlczogMzUzLTM2OAorR3JvdXAgMjM6IChCbG9ja3MgNzUzNjY0LTc4NjQzMSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNjk2IChiZyAjMCArIDY5NiksIElub2RlIGJpdG1hcCBhdCA3ODAgKGJnICMwICsgNzgwKQorICBJbm9kZSB0YWJsZSBhdCA4NjQtODY0IChiZyAjMCArIDg2NCkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA3NTM2NjQtNzg2NDMxCisgIEZyZWUgaW5vZGVzOiAzNjktMzg0CitHcm91cCAyNDogKEJsb2NrcyA3ODY0MzItODE5MTk5KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2OTcgKGJnICMwICsgNjk3KSwgSW5vZGUgYml0bWFwIGF0IDc4MSAoYmcgIzAgKyA3ODEpCisgIElub2RlIHRhYmxlIGF0IDg2NS04NjUgKGJnICMwICsgODY1KQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDc4NjQzMi04MTkxOTkKKyAgRnJlZSBpbm9kZXM6IDM4NS00MDAKK0dyb3VwIDI1OiAoQmxvY2tzIDgxOTIwMC04NTE5NjcpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgODE5MjAwLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA4MTkyMDEtODE5MjAxCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgODE5MjAyLTgxOTg3MgorICBCbG9jayBiaXRtYXAgYXQgNjk4IChiZyAjMCArIDY5OCksIElub2RlIGJpdG1hcCBhdCA3ODIgKGJnICMwICsgNzgyKQorICBJbm9kZSB0YWJsZSBhdCA4NjYtODY2IChiZyAjMCArIDg2NikKKyAgMzIwOTUgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA4MTk4NzMtODUxOTY3CisgIEZyZWUgaW5vZGVzOiA0MDEtNDE2CitHcm91cCAyNjogKEJsb2NrcyA4NTE5NjgtODg0NzM1KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2OTkgKGJnICMwICsgNjk5KSwgSW5vZGUgYml0bWFwIGF0IDc4MyAoYmcgIzAgKyA3ODMpCisgIElub2RlIHRhYmxlIGF0IDg2Ny04NjcgKGJnICMwICsgODY3KQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDg1MTk2OC04ODQ3MzUKKyAgRnJlZSBpbm9kZXM6IDQxNy00MzIKK0dyb3VwIDI3OiAoQmxvY2tzIDg4NDczNi05MTc1MDMpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgODg0NzM2LCBHcm91cCBkZXNjcmlwdG9ycyBhdCA4ODQ3MzctODg0NzM3CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgODg0NzM4LTg4NTQwOAorICBCbG9jayBiaXRtYXAgYXQgNzAwIChiZyAjMCArIDcwMCksIElub2RlIGJpdG1hcCBhdCA3ODQgKGJnICMwICsgNzg0KQorICBJbm9kZSB0YWJsZSBhdCA4NjgtODY4IChiZyAjMCArIDg2OCkKKyAgMzIwOTUgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA4ODU0MDktOTE3NTAzCisgIEZyZWUgaW5vZGVzOiA0MzMtNDQ4CitHcm91cCAyODogKEJsb2NrcyA5MTc1MDQtOTUwMjcxKSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MDEgKGJnICMwICsgNzAxKSwgSW5vZGUgYml0bWFwIGF0IDc4NSAoYmcgIzAgKyA3ODUpCisgIElub2RlIHRhYmxlIGF0IDg2OS04NjkgKGJnICMwICsgODY5KQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDkxNzUwNC05NTAyNzEKKyAgRnJlZSBpbm9kZXM6IDQ0OS00NjQKK0dyb3VwIDI5OiAoQmxvY2tzIDk1MDI3Mi05ODMwMzkpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcwMiAoYmcgIzAgKyA3MDIpLCBJbm9kZSBiaXRtYXAgYXQgNzg2IChiZyAjMCArIDc4NikKKyAgSW5vZGUgdGFibGUgYXQgODcwLTg3MCAoYmcgIzAgKyA4NzApCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogOTUwMjcyLTk4MzAzOQorICBGcmVlIGlub2RlczogNDY1LTQ4MAorR3JvdXAgMzA6IChCbG9ja3MgOTgzMDQwLTEwMTU4MDcpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcwMyAoYmcgIzAgKyA3MDMpLCBJbm9kZSBiaXRtYXAgYXQgNzg3IChiZyAjMCArIDc4NykKKyAgSW5vZGUgdGFibGUgYXQgODcxLTg3MSAoYmcgIzAgKyA4NzEpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogOTgzMDQwLTEwMTU4MDcKKyAgRnJlZSBpbm9kZXM6IDQ4MS00OTYKK0dyb3VwIDMxOiAoQmxvY2tzIDEwMTU4MDgtMTA0ODU3NSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzA0IChiZyAjMCArIDcwNCksIElub2RlIGJpdG1hcCBhdCA3ODggKGJnICMwICsgNzg4KQorICBJbm9kZSB0YWJsZSBhdCA4NzItODcyIChiZyAjMCArIDg3MikKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMDE1ODA4LTEwNDg1NzUKKyAgRnJlZSBpbm9kZXM6IDQ5Ny01MTIKK0dyb3VwIDMyOiAoQmxvY2tzIDEwNDg1NzYtMTA4MTM0MykgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzA1IChiZyAjMCArIDcwNSksIElub2RlIGJpdG1hcCBhdCA3ODkgKGJnICMwICsgNzg5KQorICBJbm9kZSB0YWJsZSBhdCA4NzMtODczIChiZyAjMCArIDg3MykKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMDQ4NTc2LTEwODEzNDMKKyAgRnJlZSBpbm9kZXM6IDUxMy01MjgKK0dyb3VwIDMzOiAoQmxvY2tzIDEwODEzNDQtMTExNDExMSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzA2IChiZyAjMCArIDcwNiksIElub2RlIGJpdG1hcCBhdCA3OTAgKGJnICMwICsgNzkwKQorICBJbm9kZSB0YWJsZSBhdCA4NzQtODc0IChiZyAjMCArIDg3NCkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMDgxMzQ0LTExMTQxMTEKKyAgRnJlZSBpbm9kZXM6IDUyOS01NDQKK0dyb3VwIDM0OiAoQmxvY2tzIDExMTQxMTItMTE0Njg3OSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzA3IChiZyAjMCArIDcwNyksIElub2RlIGJpdG1hcCBhdCA3OTEgKGJnICMwICsgNzkxKQorICBJbm9kZSB0YWJsZSBhdCA4NzUtODc1IChiZyAjMCArIDg3NSkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMTE0MTEyLTExNDY4NzkKKyAgRnJlZSBpbm9kZXM6IDU0NS01NjAKK0dyb3VwIDM1OiAoQmxvY2tzIDExNDY4ODAtMTE3OTY0NykgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzA4IChiZyAjMCArIDcwOCksIElub2RlIGJpdG1hcCBhdCA3OTIgKGJnICMwICsgNzkyKQorICBJbm9kZSB0YWJsZSBhdCA4NzYtODc2IChiZyAjMCArIDg3NikKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMTQ2ODgwLTExNzk2NDcKKyAgRnJlZSBpbm9kZXM6IDU2MS01NzYKK0dyb3VwIDM2OiAoQmxvY2tzIDExNzk2NDgtMTIxMjQxNSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzA5IChiZyAjMCArIDcwOSksIElub2RlIGJpdG1hcCBhdCA3OTMgKGJnICMwICsgNzkzKQorICBJbm9kZSB0YWJsZSBhdCA4NzctODc3IChiZyAjMCArIDg3NykKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMTc5NjQ4LTEyMTI0MTUKKyAgRnJlZSBpbm9kZXM6IDU3Ny01OTIKK0dyb3VwIDM3OiAoQmxvY2tzIDEyMTI0MTYtMTI0NTE4MykgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzEwIChiZyAjMCArIDcxMCksIElub2RlIGJpdG1hcCBhdCA3OTQgKGJnICMwICsgNzk0KQorICBJbm9kZSB0YWJsZSBhdCA4NzgtODc4IChiZyAjMCArIDg3OCkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMjEyNDE2LTEyNDUxODMKKyAgRnJlZSBpbm9kZXM6IDU5My02MDgKK0dyb3VwIDM4OiAoQmxvY2tzIDEyNDUxODQtMTI3Nzk1MSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzExIChiZyAjMCArIDcxMSksIElub2RlIGJpdG1hcCBhdCA3OTUgKGJnICMwICsgNzk1KQorICBJbm9kZSB0YWJsZSBhdCA4NzktODc5IChiZyAjMCArIDg3OSkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMjQ1MTg0LTEyNzc5NTEKKyAgRnJlZSBpbm9kZXM6IDYwOS02MjQKK0dyb3VwIDM5OiAoQmxvY2tzIDEyNzc5NTItMTMxMDcxOSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzEyIChiZyAjMCArIDcxMiksIElub2RlIGJpdG1hcCBhdCA3OTYgKGJnICMwICsgNzk2KQorICBJbm9kZSB0YWJsZSBhdCA4ODAtODgwIChiZyAjMCArIDg4MCkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMjc3OTUyLTEzMTA3MTkKKyAgRnJlZSBpbm9kZXM6IDYyNS02NDAKK0dyb3VwIDQwOiAoQmxvY2tzIDEzMTA3MjAtMTM0MzQ4NykgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcxMyAoYmcgIzAgKyA3MTMpLCBJbm9kZSBiaXRtYXAgYXQgNzk3IChiZyAjMCArIDc5NykKKyAgSW5vZGUgdGFibGUgYXQgODgxLTg4MSAoYmcgIzAgKyA4ODEpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDY0MS02NTYKK0dyb3VwIDQxOiAoQmxvY2tzIDEzNDM0ODgtMTM3NjI1NSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcxNCAoYmcgIzAgKyA3MTQpLCBJbm9kZSBiaXRtYXAgYXQgNzk4IChiZyAjMCArIDc5OCkKKyAgSW5vZGUgdGFibGUgYXQgODgyLTg4MiAoYmcgIzAgKyA4ODIpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDY1Ny02NzIKK0dyb3VwIDQyOiAoQmxvY2tzIDEzNzYyNTYtMTQwOTAyMykgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcxNSAoYmcgIzAgKyA3MTUpLCBJbm9kZSBiaXRtYXAgYXQgNzk5IChiZyAjMCArIDc5OSkKKyAgSW5vZGUgdGFibGUgYXQgODgzLTg4MyAoYmcgIzAgKyA4ODMpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDY3My02ODgKK0dyb3VwIDQzOiAoQmxvY2tzIDE0MDkwMjQtMTQ0MTc5MSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcxNiAoYmcgIzAgKyA3MTYpLCBJbm9kZSBiaXRtYXAgYXQgODAwIChiZyAjMCArIDgwMCkKKyAgSW5vZGUgdGFibGUgYXQgODg0LTg4NCAoYmcgIzAgKyA4ODQpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDY4OS03MDQKK0dyb3VwIDQ0OiAoQmxvY2tzIDE0NDE3OTItMTQ3NDU1OSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcxNyAoYmcgIzAgKyA3MTcpLCBJbm9kZSBiaXRtYXAgYXQgODAxIChiZyAjMCArIDgwMSkKKyAgSW5vZGUgdGFibGUgYXQgODg1LTg4NSAoYmcgIzAgKyA4ODUpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDcwNS03MjAKK0dyb3VwIDQ1OiAoQmxvY2tzIDE0NzQ1NjAtMTUwNzMyNykgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcxOCAoYmcgIzAgKyA3MTgpLCBJbm9kZSBiaXRtYXAgYXQgODAyIChiZyAjMCArIDgwMikKKyAgSW5vZGUgdGFibGUgYXQgODg2LTg4NiAoYmcgIzAgKyA4ODYpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDcyMS03MzYKK0dyb3VwIDQ2OiAoQmxvY2tzIDE1MDczMjgtMTU0MDA5NSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcxOSAoYmcgIzAgKyA3MTkpLCBJbm9kZSBiaXRtYXAgYXQgODAzIChiZyAjMCArIDgwMykKKyAgSW5vZGUgdGFibGUgYXQgODg3LTg4NyAoYmcgIzAgKyA4ODcpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDczNy03NTIKK0dyb3VwIDQ3OiAoQmxvY2tzIDE1NDAwOTYtMTU3Mjg2MykgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcyMCAoYmcgIzAgKyA3MjApLCBJbm9kZSBiaXRtYXAgYXQgODA0IChiZyAjMCArIDgwNCkKKyAgSW5vZGUgdGFibGUgYXQgODg4LTg4OCAoYmcgIzAgKyA4ODgpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDc1My03NjgKK0dyb3VwIDQ4OiAoQmxvY2tzIDE1NzI4NjQtMTYwNTYzMSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcyMSAoYmcgIzAgKyA3MjEpLCBJbm9kZSBiaXRtYXAgYXQgODA1IChiZyAjMCArIDgwNSkKKyAgSW5vZGUgdGFibGUgYXQgODg5LTg4OSAoYmcgIzAgKyA4ODkpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDc2OS03ODQKK0dyb3VwIDQ5OiAoQmxvY2tzIDE2MDU2MzItMTYzODM5OSkgW0lOT0RFX1VOSU5JVF0KKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTYwNTYzMiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTYwNTYzMy0xNjA1NjMzCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTYwNTYzNC0xNjA2MzA0CisgIEJsb2NrIGJpdG1hcCBhdCA3MjIgKGJnICMwICsgNzIyKSwgSW5vZGUgYml0bWFwIGF0IDgwNiAoYmcgIzAgKyA4MDYpCisgIElub2RlIHRhYmxlIGF0IDg5MC04OTAgKGJnICMwICsgODkwKQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA3ODUtODAwCitHcm91cCA1MDogKEJsb2NrcyAxNjM4NDAwLTE2NzExNjcpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MjMgKGJnICMwICsgNzIzKSwgSW5vZGUgYml0bWFwIGF0IDgwNyAoYmcgIzAgKyA4MDcpCisgIElub2RlIHRhYmxlIGF0IDg5MS04OTEgKGJnICMwICsgODkxKQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA4MDEtODE2CitHcm91cCA1MTogKEJsb2NrcyAxNjcxMTY4LTE3MDM5MzUpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MjQgKGJnICMwICsgNzI0KSwgSW5vZGUgYml0bWFwIGF0IDgwOCAoYmcgIzAgKyA4MDgpCisgIElub2RlIHRhYmxlIGF0IDg5Mi04OTIgKGJnICMwICsgODkyKQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA4MTctODMyCitHcm91cCA1MjogKEJsb2NrcyAxNzAzOTM2LTE3MzY3MDMpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MjUgKGJnICMwICsgNzI1KSwgSW5vZGUgYml0bWFwIGF0IDgwOSAoYmcgIzAgKyA4MDkpCisgIElub2RlIHRhYmxlIGF0IDg5My04OTMgKGJnICMwICsgODkzKQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA4MzMtODQ4CitHcm91cCA1MzogKEJsb2NrcyAxNzM2NzA0LTE3Njk0NzEpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MjYgKGJnICMwICsgNzI2KSwgSW5vZGUgYml0bWFwIGF0IDgxMCAoYmcgIzAgKyA4MTApCisgIElub2RlIHRhYmxlIGF0IDg5NC04OTQgKGJnICMwICsgODk0KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA4NDktODY0CitHcm91cCA1NDogKEJsb2NrcyAxNzY5NDcyLTE4MDIyMzkpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MjcgKGJnICMwICsgNzI3KSwgSW5vZGUgYml0bWFwIGF0IDgxMSAoYmcgIzAgKyA4MTEpCisgIElub2RlIHRhYmxlIGF0IDg5NS04OTUgKGJnICMwICsgODk1KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA4NjUtODgwCitHcm91cCA1NTogKEJsb2NrcyAxODAyMjQwLTE4MzUwMDcpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MjggKGJnICMwICsgNzI4KSwgSW5vZGUgYml0bWFwIGF0IDgxMiAoYmcgIzAgKyA4MTIpCisgIElub2RlIHRhYmxlIGF0IDg5Ni04OTYgKGJnICMwICsgODk2KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA4ODEtODk2CitHcm91cCA1NjogKEJsb2NrcyAxODM1MDA4LTE4Njc3NzUpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MjkgKGJnICMwICsgNzI5KSwgSW5vZGUgYml0bWFwIGF0IDgxMyAoYmcgIzAgKyA4MTMpCisgIElub2RlIHRhYmxlIGF0IDg5Ny04OTcgKGJnICMwICsgODk3KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA4OTctOTEyCitHcm91cCA1NzogKEJsb2NrcyAxODY3Nzc2LTE5MDA1NDMpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MzAgKGJnICMwICsgNzMwKSwgSW5vZGUgYml0bWFwIGF0IDgxNCAoYmcgIzAgKyA4MTQpCisgIElub2RlIHRhYmxlIGF0IDg5OC04OTggKGJnICMwICsgODk4KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA5MTMtOTI4CitHcm91cCA1ODogKEJsb2NrcyAxOTAwNTQ0LTE5MzMzMTEpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MzEgKGJnICMwICsgNzMxKSwgSW5vZGUgYml0bWFwIGF0IDgxNSAoYmcgIzAgKyA4MTUpCisgIElub2RlIHRhYmxlIGF0IDg5OS04OTkgKGJnICMwICsgODk5KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA5MjktOTQ0CitHcm91cCA1OTogKEJsb2NrcyAxOTMzMzEyLTE5NjYwNzkpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MzIgKGJnICMwICsgNzMyKSwgSW5vZGUgYml0bWFwIGF0IDgxNiAoYmcgIzAgKyA4MTYpCisgIElub2RlIHRhYmxlIGF0IDkwMC05MDAgKGJnICMwICsgOTAwKQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA5NDUtOTYwCitHcm91cCA2MDogKEJsb2NrcyAxOTY2MDgwLTE5OTg4NDcpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MzMgKGJnICMwICsgNzMzKSwgSW5vZGUgYml0bWFwIGF0IDgxNyAoYmcgIzAgKyA4MTcpCisgIElub2RlIHRhYmxlIGF0IDkwMS05MDEgKGJnICMwICsgOTAxKQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA5NjEtOTc2CitHcm91cCA2MTogKEJsb2NrcyAxOTk4ODQ4LTIwMzE2MTUpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MzQgKGJnICMwICsgNzM0KSwgSW5vZGUgYml0bWFwIGF0IDgxOCAoYmcgIzAgKyA4MTgpCisgIElub2RlIHRhYmxlIGF0IDkwMi05MDIgKGJnICMwICsgOTAyKQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA5NzctOTkyCitHcm91cCA2MjogKEJsb2NrcyAyMDMxNjE2LTIwNjQzODMpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MzUgKGJnICMwICsgNzM1KSwgSW5vZGUgYml0bWFwIGF0IDgxOSAoYmcgIzAgKyA4MTkpCisgIElub2RlIHRhYmxlIGF0IDkwMy05MDMgKGJnICMwICsgOTAzKQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA5OTMtMTAwOAorR3JvdXAgNjM6IChCbG9ja3MgMjA2NDM4NC0yMDk3MTUxKSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzM2IChiZyAjMCArIDczNiksIElub2RlIGJpdG1hcCBhdCA4MjAgKGJnICMwICsgODIwKQorICBJbm9kZSB0YWJsZSBhdCA5MDQtOTA0IChiZyAjMCArIDkwNCkKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogMTAwOS0xMDI0CitHcm91cCA2NDogKEJsb2NrcyAyMDk3MTUyLTIxMjk5MTkpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MzcgKGJnICMwICsgNzM3KSwgSW5vZGUgYml0bWFwIGF0IDgyMSAoYmcgIzAgKyA4MjEpCisgIElub2RlIHRhYmxlIGF0IDkwNS05MDUgKGJnICMwICsgOTA1KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiAxMDI1LTEwNDAKK0dyb3VwIDY1OiAoQmxvY2tzIDIxMjk5MjAtMjE2MjY4NykgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDczOCAoYmcgIzAgKyA3MzgpLCBJbm9kZSBiaXRtYXAgYXQgODIyIChiZyAjMCArIDgyMikKKyAgSW5vZGUgdGFibGUgYXQgOTA2LTkwNiAoYmcgIzAgKyA5MDYpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDEwNDEtMTA1NgorR3JvdXAgNjY6IChCbG9ja3MgMjE2MjY4OC0yMTk1NDU1KSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzM5IChiZyAjMCArIDczOSksIElub2RlIGJpdG1hcCBhdCA4MjMgKGJnICMwICsgODIzKQorICBJbm9kZSB0YWJsZSBhdCA5MDctOTA3IChiZyAjMCArIDkwNykKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogMTA1Ny0xMDcyCitHcm91cCA2NzogKEJsb2NrcyAyMTk1NDU2LTIyMjgyMjMpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3NDAgKGJnICMwICsgNzQwKSwgSW5vZGUgYml0bWFwIGF0IDgyNCAoYmcgIzAgKyA4MjQpCisgIElub2RlIHRhYmxlIGF0IDkwOC05MDggKGJnICMwICsgOTA4KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiAxMDczLTEwODgKK0dyb3VwIDY4OiAoQmxvY2tzIDIyMjgyMjQtMjI2MDk5MSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDc0MSAoYmcgIzAgKyA3NDEpLCBJbm9kZSBiaXRtYXAgYXQgODI1IChiZyAjMCArIDgyNSkKKyAgSW5vZGUgdGFibGUgYXQgOTA5LTkwOSAoYmcgIzAgKyA5MDkpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDEwODktMTEwNAorR3JvdXAgNjk6IChCbG9ja3MgMjI2MDk5Mi0yMjkzNzU5KSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzQyIChiZyAjMCArIDc0MiksIElub2RlIGJpdG1hcCBhdCA4MjYgKGJnICMwICsgODI2KQorICBJbm9kZSB0YWJsZSBhdCA5MTAtOTEwIChiZyAjMCArIDkxMCkKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogMTEwNS0xMTIwCitHcm91cCA3MDogKEJsb2NrcyAyMjkzNzYwLTIzMjY1MjcpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3NDMgKGJnICMwICsgNzQzKSwgSW5vZGUgYml0bWFwIGF0IDgyNyAoYmcgIzAgKyA4MjcpCisgIElub2RlIHRhYmxlIGF0IDkxMS05MTEgKGJnICMwICsgOTExKQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiAxMTIxLTExMzYKK0dyb3VwIDcxOiAoQmxvY2tzIDIzMjY1MjgtMjM1OTI5NSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDc0NCAoYmcgIzAgKyA3NDQpLCBJbm9kZSBiaXRtYXAgYXQgODI4IChiZyAjMCArIDgyOCkKKyAgSW5vZGUgdGFibGUgYXQgOTEyLTkxMiAoYmcgIzAgKyA5MTIpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDExMzctMTE1MgorR3JvdXAgNzI6IChCbG9ja3MgMjM1OTI5Ni0yMzkyMDYzKSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzQ1IChiZyAjMCArIDc0NSksIElub2RlIGJpdG1hcCBhdCA4MjkgKGJnICMwICsgODI5KQorICBJbm9kZSB0YWJsZSBhdCA5MTMtOTEzIChiZyAjMCArIDkxMykKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogMTE1My0xMTY4CitHcm91cCA3MzogKEJsb2NrcyAyMzkyMDY0LTI0MjQ4MzEpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3NDYgKGJnICMwICsgNzQ2KSwgSW5vZGUgYml0bWFwIGF0IDgzMCAoYmcgIzAgKyA4MzApCisgIElub2RlIHRhYmxlIGF0IDkxNC05MTQgKGJnICMwICsgOTE0KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiAxMTY5LTExODQKK0dyb3VwIDc0OiAoQmxvY2tzIDI0MjQ4MzItMjQ1NzU5OSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDc0NyAoYmcgIzAgKyA3NDcpLCBJbm9kZSBiaXRtYXAgYXQgODMxIChiZyAjMCArIDgzMSkKKyAgSW5vZGUgdGFibGUgYXQgOTE1LTkxNSAoYmcgIzAgKyA5MTUpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDExODUtMTIwMAorR3JvdXAgNzU6IChCbG9ja3MgMjQ1NzYwMC0yNDkwMzY3KSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzQ4IChiZyAjMCArIDc0OCksIElub2RlIGJpdG1hcCBhdCA4MzIgKGJnICMwICsgODMyKQorICBJbm9kZSB0YWJsZSBhdCA5MTYtOTE2IChiZyAjMCArIDkxNikKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogMTIwMS0xMjE2CitHcm91cCA3NjogKEJsb2NrcyAyNDkwMzY4LTI1MjMxMzUpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3NDkgKGJnICMwICsgNzQ5KSwgSW5vZGUgYml0bWFwIGF0IDgzMyAoYmcgIzAgKyA4MzMpCisgIElub2RlIHRhYmxlIGF0IDkxNy05MTcgKGJnICMwICsgOTE3KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiAxMjE3LTEyMzIKK0dyb3VwIDc3OiAoQmxvY2tzIDI1MjMxMzYtMjU1NTkwMykgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDc1MCAoYmcgIzAgKyA3NTApLCBJbm9kZSBiaXRtYXAgYXQgODM0IChiZyAjMCArIDgzNCkKKyAgSW5vZGUgdGFibGUgYXQgOTE4LTkxOCAoYmcgIzAgKyA5MTgpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDEyMzMtMTI0OAorR3JvdXAgNzg6IChCbG9ja3MgMjU1NTkwNC0yNTg4NjcxKSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzUxIChiZyAjMCArIDc1MSksIElub2RlIGJpdG1hcCBhdCA4MzUgKGJnICMwICsgODM1KQorICBJbm9kZSB0YWJsZSBhdCA5MTktOTE5IChiZyAjMCArIDkxOSkKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogMTI0OS0xMjY0CitHcm91cCA3OTogKEJsb2NrcyAyNTg4NjcyLTI2MjE0MzkpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3NTIgKGJnICMwICsgNzUyKSwgSW5vZGUgYml0bWFwIGF0IDgzNiAoYmcgIzAgKyA4MzYpCisgIElub2RlIHRhYmxlIGF0IDkyMC05MjAgKGJnICMwICsgOTIwKQorICAzMDA0NyBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDI1OTEzOTMtMjYyMTQzOQorICBGcmVlIGlub2RlczogMTI2NS0xMjgwCitHcm91cCA4MDogKEJsb2NrcyAyNjIxNDQwLTI2NTQyMDcpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDc1MyAoYmcgIzAgKyA3NTMpLCBJbm9kZSBiaXRtYXAgYXQgODM3IChiZyAjMCArIDgzNykKKyAgSW5vZGUgdGFibGUgYXQgOTIxLTkyMSAoYmcgIzAgKyA5MjEpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMjYyMTQ0MC0yNjU0MjA3CisgIEZyZWUgaW5vZGVzOiAxMjgxLTEyOTYKK0dyb3VwIDgxOiAoQmxvY2tzIDI2NTQyMDgtMjY4Njk3NSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyNjU0MjA4LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyNjU0MjA5LTI2NTQyMDkKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyNjU0MjEwLTI2NTQ4ODAKKyAgQmxvY2sgYml0bWFwIGF0IDc1NCAoYmcgIzAgKyA3NTQpLCBJbm9kZSBiaXRtYXAgYXQgODM4IChiZyAjMCArIDgzOCkKKyAgSW5vZGUgdGFibGUgYXQgOTIyLTkyMiAoYmcgIzAgKyA5MjIpCisgIDMyMDk1IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMjY1NDg4MS0yNjg2OTc1CisgIEZyZWUgaW5vZGVzOiAxMjk3LTEzMTIKK0dyb3VwIDgyOiAoQmxvY2tzIDI2ODY5NzYtMjcxOTc0MykgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzU1IChiZyAjMCArIDc1NSksIElub2RlIGJpdG1hcCBhdCA4MzkgKGJnICMwICsgODM5KQorICBJbm9kZSB0YWJsZSBhdCA5MjMtOTIzIChiZyAjMCArIDkyMykKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAyNjg2OTc2LTI3MTk3NDMKKyAgRnJlZSBpbm9kZXM6IDEzMTMtMTMyOAorR3JvdXAgODM6IChCbG9ja3MgMjcxOTc0NC0yNzQ5OTk5KSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzU2IChiZyAjMCArIDc1NiksIElub2RlIGJpdG1hcCBhdCA4NDAgKGJnICMwICsgODQwKQorICBJbm9kZSB0YWJsZSBhdCA5MjQtOTI0IChiZyAjMCArIDkyNCkKKyAgMzAyNTYgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAyNzE5NzQ0LTI3NDk5OTkKKyAgRnJlZSBpbm9kZXM6IDEzMjktMTM0NApkaWZmIC0tZ2l0IGEvdGVzdHMvbV9iaWdqb3VybmFsL3NjcmlwdCBiL3Rlc3RzL21fYmlnam91cm5hbC9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMxZWQ5YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21fYmlnam91cm5hbC9zY3JpcHQKQEAgLTAsMCArMSw4IEBACitERVNDUklQVElPTj0iam91cm5hbCBvdmVyIDRHQiBpbiBzaXplIgorRlNfU0laRT0xMTAwMDAwMAorTUtFMkZTX09QVFM9Ii10IGV4dDQgLUcgNTEyIC1OIDEyODAgLUogc2l6ZT01MDAwIC1xIC1FIGxhenlfam91cm5hbF9pbml0LGxhenlfaXRhYmxlX2luaXQsbm9kaXNjYXJkIgoraWYgWyAkKHVuYW1lIC1zKSA9ICJEYXJ3aW4iIF07IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkREVTQ1JJUFRJT046IHNraXBwZWQgZm9yIEhGUysgKG5vIHNwYXJzZSBmaWxlcykiCisJcmV0dXJuIDAKK2ZpCisuICRjbWRfZGlyL3J1bl9ta2UyZnMKZGlmZiAtLWdpdCBhL3Rlc3RzL21fZGFzZF9icy9leHBlY3QuMSBiL3Rlc3RzL21fZGFzZF9icy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWE0MDFkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbV9kYXNkX2JzL2V4cGVjdC4xCkBAIC0wLDAgKzEsNjMgQEAKK0NyZWF0aW5nIGZpbGVzeXN0ZW0gd2l0aCAzMjc2OCAyayBibG9ja3MgYW5kIDE2Mzg0IGlub2RlcworU3VwZXJibG9jayBiYWNrdXBzIHN0b3JlZCBvbiBibG9ja3M6IAorCTE2Mzg0CisKK0FsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAgICAICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBpbm9kZSB0YWJsZXM6ICAgIAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICAgIAgICGRvbmUKKworRmlsZXN5c3RlbSBmZWF0dXJlczogZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBzcGFyc2Vfc3VwZXIKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzE2Mzg0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTEwNC8zMjc2OCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKK0ZpbGVzeXN0ZW0gdm9sdW1lIG5hbWU6ICAgPG5vbmU+CitMYXN0IG1vdW50ZWQgb246ICAgICAgICAgIDxub3QgYXZhaWxhYmxlPgorRmlsZXN5c3RlbSBtYWdpYyBudW1iZXI6ICAweEVGNTMKK0ZpbGVzeXN0ZW0gcmV2aXNpb24gIzogICAgMSAoZHluYW1pYykKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6ICAgICAgZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBzcGFyc2Vfc3VwZXIKK0RlZmF1bHQgbW91bnQgb3B0aW9uczogICAgKG5vbmUpCitGaWxlc3lzdGVtIHN0YXRlOiAgICAgICAgIGNsZWFuCitFcnJvcnMgYmVoYXZpb3I6ICAgICAgICAgIENvbnRpbnVlCitGaWxlc3lzdGVtIE9TIHR5cGU6ICAgICAgIExpbnV4CitJbm9kZSBjb3VudDogICAgICAgICAgICAgIDE2Mzg0CitCbG9jayBjb3VudDogICAgICAgICAgICAgIDMyNzY4CitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDE2MzgKK0ZyZWUgYmxvY2tzOiAgICAgICAgICAgICAgMzE2NjQKK0ZyZWUgaW5vZGVzOiAgICAgICAgICAgICAgMTYzNzMKK0ZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgMAorQmxvY2sgc2l6ZTogICAgICAgICAgICAgICAyMDQ4CitGcmFnbWVudCBzaXplOiAgICAgICAgICAgIDIwNDgKK1Jlc2VydmVkIEdEVCBibG9ja3M6ICAgICAgMzEKK0Jsb2NrcyBwZXIgZ3JvdXA6ICAgICAgICAgMTYzODQKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgMTYzODQKK0lub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgODE5MgorSW5vZGUgYmxvY2tzIHBlciBncm91cDogICA1MTIKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMC0xNjM4MykKKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDAsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEtMQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDItMzIKKyAgQmxvY2sgYml0bWFwIGF0IDMzICgrMzMpLCBJbm9kZSBiaXRtYXAgYXQgMzQgKCszNCkKKyAgSW5vZGUgdGFibGUgYXQgMzUtNTQ2ICgrMzUpCisgIDE1ODI3IGZyZWUgYmxvY2tzLCA4MTgxIGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NTctMTYzODMKKyAgRnJlZSBpbm9kZXM6IDEyLTgxOTIKK0dyb3VwIDE6IChCbG9ja3MgMTYzODQtMzI3NjcpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDE2Mzg0LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAxNjM4NS0xNjM4NQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDE2Mzg2LTE2NDE2CisgIEJsb2NrIGJpdG1hcCBhdCAxNjQxNyAoKzMzKSwgSW5vZGUgYml0bWFwIGF0IDE2NDE4ICgrMzQpCisgIElub2RlIHRhYmxlIGF0IDE2NDE5LTE2OTMwICgrMzUpCisgIDE1ODM3IGZyZWUgYmxvY2tzLCA4MTkyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjkzMS0zMjc2NworICBGcmVlIGlub2RlczogODE5My0xNjM4NApkaWZmIC0tZ2l0IGEvdGVzdHMvbV9kYXNkX2JzL3NjcmlwdCBiL3Rlc3RzL21fZGFzZF9icy9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiOTA4NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21fZGFzZF9icy9zY3JpcHQKQEAgLTAsMCArMSw2IEBACitERVNDUklQVElPTj0iMjA0OCBieXRlIHNlY3RvciBkZXZpY2VzIgorRlNfU0laRT02NTUzNgorTUtFMkZTX0RFVklDRV9TRUNUU0laRT0yMDQ4CitleHBvcnQgTUtFMkZTX0RFVklDRV9TRUNUU0laRQorLiAkY21kX2Rpci9ydW5fbWtlMmZzCit1bnNldCBNS0UyRlNfREVWSUNFX1NFQ1RTSVpFCmRpZmYgLS1naXQgYS90ZXN0cy9tX2Rlc2Nfc2l6ZV8xMjgvZXhwZWN0LjEgYi90ZXN0cy9tX2Rlc2Nfc2l6ZV8xMjgvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE3ZGE4NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21fZGVzY19zaXplXzEyOC9leHBlY3QuMQpAQCAtMCwwICsxLDgzOCBAQAorQ3JlYXRpbmcgZmlsZXN5c3RlbSB3aXRoIDEzMTA3MiAxayBibG9ja3MgYW5kIDgxOTIgaW5vZGVzCitTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogCisJMTAyNSwgMzA3MywgNTEyMSwgNzE2OSwgOTIxNywgMjU2MDEsIDI3NjQ5LCA1MDE3NywgODI5NDUsIDEyODAwMQorCitBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogICAgICAgIAgICAgICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBpbm9kZSB0YWJsZXM6ICAgICAgICAICAgICAgIZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dyaXRpbmcgc3VwZXJibG9ja3MgYW5kIGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogICAgICAgIAgICAgICAhkb25lCisKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6IGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgZXh0ZW50IDY0Yml0IHNwYXJzZV9zdXBlcgorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvODE5MiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDQyOTgvMTMxMDcyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMAorRmlsZXN5c3RlbSB2b2x1bWUgbmFtZTogICA8bm9uZT4KK0xhc3QgbW91bnRlZCBvbjogICAgICAgICAgPG5vdCBhdmFpbGFibGU+CitGaWxlc3lzdGVtIG1hZ2ljIG51bWJlcjogIDB4RUY1MworRmlsZXN5c3RlbSByZXZpc2lvbiAjOiAgICAxIChkeW5hbWljKQorRmlsZXN5c3RlbSBmZWF0dXJlczogICAgICBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIGV4dGVudCA2NGJpdCBzcGFyc2Vfc3VwZXIKK0RlZmF1bHQgbW91bnQgb3B0aW9uczogICAgKG5vbmUpCitGaWxlc3lzdGVtIHN0YXRlOiAgICAgICAgIGNsZWFuCitFcnJvcnMgYmVoYXZpb3I6ICAgICAgICAgIENvbnRpbnVlCitGaWxlc3lzdGVtIE9TIHR5cGU6ICAgICAgIExpbnV4CitJbm9kZSBjb3VudDogICAgICAgICAgICAgIDgxOTIKK0Jsb2NrIGNvdW50OiAgICAgICAgICAgICAgMTMxMDcyCitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDY1NTMKK0ZyZWUgYmxvY2tzOiAgICAgICAgICAgICAgMTI2Nzc0CitGcmVlIGlub2RlczogICAgICAgICAgICAgIDgxODEKK0ZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgMQorQmxvY2sgc2l6ZTogICAgICAgICAgICAgICAxMDI0CitGcmFnbWVudCBzaXplOiAgICAgICAgICAgIDEwMjQKK0dyb3VwIGRlc2NyaXB0b3Igc2l6ZTogICAgMTI4CitSZXNlcnZlZCBHRFQgYmxvY2tzOiAgICAgIDI1NgorQmxvY2tzIHBlciBncm91cDogICAgICAgICAxMDI0CitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDEwMjQKK0lub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgNjQKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgOAorTW91bnQgY291bnQ6ICAgICAgICAgICAgICAwCitDaGVjayBpbnRlcnZhbDogICAgICAgICAgIDE1NTUyMDAwICg2IG1vbnRocykKK1Jlc2VydmVkIGJsb2NrcyB1aWQ6ICAgICAgMAorUmVzZXJ2ZWQgYmxvY2tzIGdpZDogICAgICAwCitGaXJzdCBpbm9kZTogICAgICAgICAgICAgIDExCitJbm9kZSBzaXplOgkgICAgICAgICAgMTI4CitEZWZhdWx0IGRpcmVjdG9yeSBoYXNoOiAgIGhhbGZfbWQ0CisKKworR3JvdXAgMDogKEJsb2NrcyAxLTEwMjQpCisgIFByaW1hcnkgc3VwZXJibG9jayBhdCAxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyLTE3CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTgtMjczCisgIEJsb2NrIGJpdG1hcCBhdCAyNzQgKCsyNzMpLCBJbm9kZSBiaXRtYXAgYXQgMjc1ICgrMjc0KQorICBJbm9kZSB0YWJsZSBhdCAyNzYtMjgzICgrMjc1KQorICA3MjcgZnJlZSBibG9ja3MsIDUzIGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyOTgtMTAyNAorICBGcmVlIGlub2RlczogMTItNjQKK0dyb3VwIDE6IChCbG9ja3MgMTAyNS0yMDQ4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxMDI1LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAxMDI2LTEwNDEKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAxMDQyLTEyOTcKKyAgQmxvY2sgYml0bWFwIGF0IDEyOTggKCsyNzMpLCBJbm9kZSBiaXRtYXAgYXQgMTI5OSAoKzI3NCkKKyAgSW5vZGUgdGFibGUgYXQgMTMwMC0xMzA3ICgrMjc1KQorICA3NDEgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzA4LTIwNDgKKyAgRnJlZSBpbm9kZXM6IDY1LTEyOAorR3JvdXAgMjogKEJsb2NrcyAyMDQ5LTMwNzIpCisgIEJsb2NrIGJpdG1hcCBhdCAyMDQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjA1MS0yMDU4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIwNTktMzA3MgorICBGcmVlIGlub2RlczogMTI5LTE5MgorR3JvdXAgMzogKEJsb2NrcyAzMDczLTQwOTYpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDMwNzMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDMwNzQtMzA4OQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDMwOTAtMzM0NQorICBCbG9jayBiaXRtYXAgYXQgMzM0NiAoKzI3MyksIElub2RlIGJpdG1hcCBhdCAzMzQ3ICgrMjc0KQorICBJbm9kZSB0YWJsZSBhdCAzMzQ4LTMzNTUgKCsyNzUpCisgIDc0MSBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMzNTYtNDA5NgorICBGcmVlIGlub2RlczogMTkzLTI1NgorR3JvdXAgNDogKEJsb2NrcyA0MDk3LTUxMjApCisgIEJsb2NrIGJpdG1hcCBhdCA0MDk3ICgrMCksIElub2RlIGJpdG1hcCBhdCA0MDk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDA5OS00MTA2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQxMDctNTEyMAorICBGcmVlIGlub2RlczogMjU3LTMyMAorR3JvdXAgNTogKEJsb2NrcyA1MTIxLTYxNDQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDUxMjEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDUxMjItNTEzNworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDUxMzgtNTM5MworICBCbG9jayBiaXRtYXAgYXQgNTM5NCAoKzI3MyksIElub2RlIGJpdG1hcCBhdCA1Mzk1ICgrMjc0KQorICBJbm9kZSB0YWJsZSBhdCA1Mzk2LTU0MDMgKCsyNzUpCisgIDc0MSBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU0MDQtNjE0NAorICBGcmVlIGlub2RlczogMzIxLTM4NAorR3JvdXAgNjogKEJsb2NrcyA2MTQ1LTcxNjgpCisgIEJsb2NrIGJpdG1hcCBhdCA2MTQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCA2MTQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjE0Ny02MTU0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDYxNTUtNzE2OAorICBGcmVlIGlub2RlczogMzg1LTQ0OAorR3JvdXAgNzogKEJsb2NrcyA3MTY5LTgxOTIpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDcxNjksIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDcxNzAtNzE4NQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDcxODYtNzQ0MQorICBCbG9jayBiaXRtYXAgYXQgNzQ0MiAoKzI3MyksIElub2RlIGJpdG1hcCBhdCA3NDQzICgrMjc0KQorICBJbm9kZSB0YWJsZSBhdCA3NDQ0LTc0NTEgKCsyNzUpCisgIDc0MSBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc0NTItODE5MgorICBGcmVlIGlub2RlczogNDQ5LTUxMgorR3JvdXAgODogKEJsb2NrcyA4MTkzLTkyMTYpCisgIEJsb2NrIGJpdG1hcCBhdCA4MTkzICgrMCksIElub2RlIGJpdG1hcCBhdCA4MTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODE5NS04MjAyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgyMDMtOTIxNgorICBGcmVlIGlub2RlczogNTEzLTU3NgorR3JvdXAgOTogKEJsb2NrcyA5MjE3LTEwMjQwKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA5MjE3LCBHcm91cCBkZXNjcmlwdG9ycyBhdCA5MjE4LTkyMzMKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA5MjM0LTk0ODkKKyAgQmxvY2sgYml0bWFwIGF0IDk0OTAgKCsyNzMpLCBJbm9kZSBiaXRtYXAgYXQgOTQ5MSAoKzI3NCkKKyAgSW5vZGUgdGFibGUgYXQgOTQ5Mi05NDk5ICgrMjc1KQorICA3NDEgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NTAwLTEwMjQwCisgIEZyZWUgaW5vZGVzOiA1NzctNjQwCitHcm91cCAxMDogKEJsb2NrcyAxMDI0MS0xMTI2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjQxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDI0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMjQzLTEwMjUwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMjUxLTExMjY0CisgIEZyZWUgaW5vZGVzOiA2NDEtNzA0CitHcm91cCAxMTogKEJsb2NrcyAxMTI2NS0xMjI4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDExMjY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTI2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExMjY3LTExMjc0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExMjc1LTEyMjg4CisgIEZyZWUgaW5vZGVzOiA3MDUtNzY4CitHcm91cCAxMjogKEJsb2NrcyAxMjI4OS0xMzMxMikKKyAgQmxvY2sgYml0bWFwIGF0IDEyMjg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjI5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyMjkxLTEyMjk4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMjk5LTEzMzEyCisgIEZyZWUgaW5vZGVzOiA3NjktODMyCitHcm91cCAxMzogKEJsb2NrcyAxMzMxMy0xNDMzNikKKyAgQmxvY2sgYml0bWFwIGF0IDEzMzEzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzMxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzMzE1LTEzMzIyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzMzIzLTE0MzM2CisgIEZyZWUgaW5vZGVzOiA4MzMtODk2CitHcm91cCAxNDogKEJsb2NrcyAxNDMzNy0xNTM2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDE0MzM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDMzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0MzM5LTE0MzQ2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0MzQ3LTE1MzYwCisgIEZyZWUgaW5vZGVzOiA4OTctOTYwCitHcm91cCAxNTogKEJsb2NrcyAxNTM2MS0xNjM4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDE1MzYxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTM2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1MzYzLTE1MzcwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1MzcxLTE2Mzg0CisgIEZyZWUgaW5vZGVzOiA5NjEtMTAyNAorR3JvdXAgMTY6IChCbG9ja3MgMTYzODUtMTc0MDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxNjM4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTYzODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjM4Ny0xNjM5NCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjM5NS0xNzQwOAorICBGcmVlIGlub2RlczogMTAyNS0xMDg4CitHcm91cCAxNzogKEJsb2NrcyAxNzQwOS0xODQzMikKKyAgQmxvY2sgYml0bWFwIGF0IDE3NDA5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNzQxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE3NDExLTE3NDE4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE3NDE5LTE4NDMyCisgIEZyZWUgaW5vZGVzOiAxMDg5LTExNTIKK0dyb3VwIDE4OiAoQmxvY2tzIDE4NDMzLTE5NDU2KQorICBCbG9jayBiaXRtYXAgYXQgMTg0MzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE4NDM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTg0MzUtMTg0NDIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTg0NDMtMTk0NTYKKyAgRnJlZSBpbm9kZXM6IDExNTMtMTIxNgorR3JvdXAgMTk6IChCbG9ja3MgMTk0NTctMjA0ODApCisgIEJsb2NrIGJpdG1hcCBhdCAxOTQ1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTk0NTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxOTQ1OS0xOTQ2NiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxOTQ2Ny0yMDQ4MAorICBGcmVlIGlub2RlczogMTIxNy0xMjgwCitHcm91cCAyMDogKEJsb2NrcyAyMDQ4MS0yMTUwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDIwNDgxICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDQ4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIwNDgzLTIwNDkwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIwNDkxLTIxNTA0CisgIEZyZWUgaW5vZGVzOiAxMjgxLTEzNDQKK0dyb3VwIDIxOiAoQmxvY2tzIDIxNTA1LTIyNTI4KQorICBCbG9jayBiaXRtYXAgYXQgMjE1MDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIxNTA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjE1MDctMjE1MTQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjE1MTUtMjI1MjgKKyAgRnJlZSBpbm9kZXM6IDEzNDUtMTQwOAorR3JvdXAgMjI6IChCbG9ja3MgMjI1MjktMjM1NTIpCisgIEJsb2NrIGJpdG1hcCBhdCAyMjUyOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjI1MzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMjUzMS0yMjUzOCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMjUzOS0yMzU1MgorICBGcmVlIGlub2RlczogMTQwOS0xNDcyCitHcm91cCAyMzogKEJsb2NrcyAyMzU1My0yNDU3NikKKyAgQmxvY2sgYml0bWFwIGF0IDIzNTUzICgrMCksIElub2RlIGJpdG1hcCBhdCAyMzU1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIzNTU1LTIzNTYyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIzNTYzLTI0NTc2CisgIEZyZWUgaW5vZGVzOiAxNDczLTE1MzYKK0dyb3VwIDI0OiAoQmxvY2tzIDI0NTc3LTI1NjAwKQorICBCbG9jayBiaXRtYXAgYXQgMjQ1NzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI0NTc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjQ1NzktMjQ1ODYgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjQ1ODctMjU2MDAKKyAgRnJlZSBpbm9kZXM6IDE1MzctMTYwMAorR3JvdXAgMjU6IChCbG9ja3MgMjU2MDEtMjY2MjQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDI1NjAxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyNTYwMi0yNTYxNworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDI1NjE4LTI1ODczCisgIEJsb2NrIGJpdG1hcCBhdCAyNTg3NCAoKzI3MyksIElub2RlIGJpdG1hcCBhdCAyNTg3NSAoKzI3NCkKKyAgSW5vZGUgdGFibGUgYXQgMjU4NzYtMjU4ODMgKCsyNzUpCisgIDc0MSBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1ODg0LTI2NjI0CisgIEZyZWUgaW5vZGVzOiAxNjAxLTE2NjQKK0dyb3VwIDI2OiAoQmxvY2tzIDI2NjI1LTI3NjQ4KQorICBCbG9jayBiaXRtYXAgYXQgMjY2MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI2NjI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjY2MjctMjY2MzQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjY2MzUtMjc2NDgKKyAgRnJlZSBpbm9kZXM6IDE2NjUtMTcyOAorR3JvdXAgMjc6IChCbG9ja3MgMjc2NDktMjg2NzIpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDI3NjQ5LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyNzY1MC0yNzY2NQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDI3NjY2LTI3OTIxCisgIEJsb2NrIGJpdG1hcCBhdCAyNzkyMiAoKzI3MyksIElub2RlIGJpdG1hcCBhdCAyNzkyMyAoKzI3NCkKKyAgSW5vZGUgdGFibGUgYXQgMjc5MjQtMjc5MzEgKCsyNzUpCisgIDc0MSBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI3OTMyLTI4NjcyCisgIEZyZWUgaW5vZGVzOiAxNzI5LTE3OTIKK0dyb3VwIDI4OiAoQmxvY2tzIDI4NjczLTI5Njk2KQorICBCbG9jayBiaXRtYXAgYXQgMjg2NzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI4Njc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjg2NzUtMjg2ODIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjg2ODMtMjk2OTYKKyAgRnJlZSBpbm9kZXM6IDE3OTMtMTg1NgorR3JvdXAgMjk6IChCbG9ja3MgMjk2OTctMzA3MjApCisgIEJsb2NrIGJpdG1hcCBhdCAyOTY5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjk2OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyOTY5OS0yOTcwNiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyOTcwNy0zMDcyMAorICBGcmVlIGlub2RlczogMTg1Ny0xOTIwCitHcm91cCAzMDogKEJsb2NrcyAzMDcyMS0zMTc0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDMwNzIxICgrMCksIElub2RlIGJpdG1hcCBhdCAzMDcyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMwNzIzLTMwNzMwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMwNzMxLTMxNzQ0CisgIEZyZWUgaW5vZGVzOiAxOTIxLTE5ODQKK0dyb3VwIDMxOiAoQmxvY2tzIDMxNzQ1LTMyNzY4KQorICBCbG9jayBiaXRtYXAgYXQgMzE3NDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMxNzQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzE3NDctMzE3NTQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzE3NTUtMzI3NjgKKyAgRnJlZSBpbm9kZXM6IDE5ODUtMjA0OAorR3JvdXAgMzI6IChCbG9ja3MgMzI3NjktMzM3OTIpCisgIEJsb2NrIGJpdG1hcCBhdCAzMjc2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzI3NzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMjc3MS0zMjc3OCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMjc3OS0zMzc5MgorICBGcmVlIGlub2RlczogMjA0OS0yMTEyCitHcm91cCAzMzogKEJsb2NrcyAzMzc5My0zNDgxNikKKyAgQmxvY2sgYml0bWFwIGF0IDMzNzkzICgrMCksIElub2RlIGJpdG1hcCBhdCAzMzc5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMzNzk1LTMzODAyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMzODAzLTM0ODE2CisgIEZyZWUgaW5vZGVzOiAyMTEzLTIxNzYKK0dyb3VwIDM0OiAoQmxvY2tzIDM0ODE3LTM1ODQwKQorICBCbG9jayBiaXRtYXAgYXQgMzQ4MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM0ODE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzQ4MTktMzQ4MjYgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzQ4MjctMzU4NDAKKyAgRnJlZSBpbm9kZXM6IDIxNzctMjI0MAorR3JvdXAgMzU6IChCbG9ja3MgMzU4NDEtMzY4NjQpCisgIEJsb2NrIGJpdG1hcCBhdCAzNTg0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzU4NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNTg0My0zNTg1MCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNTg1MS0zNjg2NAorICBGcmVlIGlub2RlczogMjI0MS0yMzA0CitHcm91cCAzNjogKEJsb2NrcyAzNjg2NS0zNzg4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDM2ODY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNjg2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM2ODY3LTM2ODc0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM2ODc1LTM3ODg4CisgIEZyZWUgaW5vZGVzOiAyMzA1LTIzNjgKK0dyb3VwIDM3OiAoQmxvY2tzIDM3ODg5LTM4OTEyKQorICBCbG9jayBiaXRtYXAgYXQgMzc4ODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM3ODkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzc4OTEtMzc4OTggKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzc4OTktMzg5MTIKKyAgRnJlZSBpbm9kZXM6IDIzNjktMjQzMgorR3JvdXAgMzg6IChCbG9ja3MgMzg5MTMtMzk5MzYpCisgIEJsb2NrIGJpdG1hcCBhdCAzODkxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzg5MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzODkxNS0zODkyMiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzODkyMy0zOTkzNgorICBGcmVlIGlub2RlczogMjQzMy0yNDk2CitHcm91cCAzOTogKEJsb2NrcyAzOTkzNy00MDk2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDM5OTM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAzOTkzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM5OTM5LTM5OTQ2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM5OTQ3LTQwOTYwCisgIEZyZWUgaW5vZGVzOiAyNDk3LTI1NjAKK0dyb3VwIDQwOiAoQmxvY2tzIDQwOTYxLTQxOTg0KQorICBCbG9jayBiaXRtYXAgYXQgNDA5NjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQwOTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDA5NjMtNDA5NzAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDA5NzEtNDE5ODQKKyAgRnJlZSBpbm9kZXM6IDI1NjEtMjYyNAorR3JvdXAgNDE6IChCbG9ja3MgNDE5ODUtNDMwMDgpCisgIEJsb2NrIGJpdG1hcCBhdCA0MTk4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDE5ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MTk4Ny00MTk5NCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MTk5NS00MzAwOAorICBGcmVlIGlub2RlczogMjYyNS0yNjg4CitHcm91cCA0MjogKEJsb2NrcyA0MzAwOS00NDAzMikKKyAgQmxvY2sgYml0bWFwIGF0IDQzMDA5ICgrMCksIElub2RlIGJpdG1hcCBhdCA0MzAxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQzMDExLTQzMDE4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQzMDE5LTQ0MDMyCisgIEZyZWUgaW5vZGVzOiAyNjg5LTI3NTIKK0dyb3VwIDQzOiAoQmxvY2tzIDQ0MDMzLTQ1MDU2KQorICBCbG9jayBiaXRtYXAgYXQgNDQwMzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ0MDM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDQwMzUtNDQwNDIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDQwNDMtNDUwNTYKKyAgRnJlZSBpbm9kZXM6IDI3NTMtMjgxNgorR3JvdXAgNDQ6IChCbG9ja3MgNDUwNTctNDYwODApCisgIEJsb2NrIGJpdG1hcCBhdCA0NTA1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDUwNTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0NTA1OS00NTA2NiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NTA2Ny00NjA4MAorICBGcmVlIGlub2RlczogMjgxNy0yODgwCitHcm91cCA0NTogKEJsb2NrcyA0NjA4MS00NzEwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ2MDgxICgrMCksIElub2RlIGJpdG1hcCBhdCA0NjA4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ2MDgzLTQ2MDkwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ2MDkxLTQ3MTA0CisgIEZyZWUgaW5vZGVzOiAyODgxLTI5NDQKK0dyb3VwIDQ2OiAoQmxvY2tzIDQ3MTA1LTQ4MTI4KQorICBCbG9jayBiaXRtYXAgYXQgNDcxMDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ3MTA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDcxMDctNDcxMTQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDcxMTUtNDgxMjgKKyAgRnJlZSBpbm9kZXM6IDI5NDUtMzAwOAorR3JvdXAgNDc6IChCbG9ja3MgNDgxMjktNDkxNTIpCisgIEJsb2NrIGJpdG1hcCBhdCA0ODEyOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDgxMzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0ODEzMS00ODEzOCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0ODEzOS00OTE1MgorICBGcmVlIGlub2RlczogMzAwOS0zMDcyCitHcm91cCA0ODogKEJsb2NrcyA0OTE1My01MDE3NikKKyAgQmxvY2sgYml0bWFwIGF0IDQ5MTUzICgrMCksIElub2RlIGJpdG1hcCBhdCA0OTE1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ5MTU1LTQ5MTYyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ5MTYzLTUwMTc2CisgIEZyZWUgaW5vZGVzOiAzMDczLTMxMzYKK0dyb3VwIDQ5OiAoQmxvY2tzIDUwMTc3LTUxMjAwKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA1MDE3NywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNTAxNzgtNTAxOTMKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA1MDE5NC01MDQ0OQorICBCbG9jayBiaXRtYXAgYXQgNTA0NTAgKCsyNzMpLCBJbm9kZSBiaXRtYXAgYXQgNTA0NTEgKCsyNzQpCisgIElub2RlIHRhYmxlIGF0IDUwNDUyLTUwNDU5ICgrMjc1KQorICA3NDEgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MDQ2MC01MTIwMAorICBGcmVlIGlub2RlczogMzEzNy0zMjAwCitHcm91cCA1MDogKEJsb2NrcyA1MTIwMS01MjIyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDUxMjAxICgrMCksIElub2RlIGJpdG1hcCBhdCA1MTIwMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDUxMjAzLTUxMjEwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUxMjExLTUyMjI0CisgIEZyZWUgaW5vZGVzOiAzMjAxLTMyNjQKK0dyb3VwIDUxOiAoQmxvY2tzIDUyMjI1LTUzMjQ4KQorICBCbG9jayBiaXRtYXAgYXQgNTIyMjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDUyMjI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTIyMjctNTIyMzQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTIyMzUtNTMyNDgKKyAgRnJlZSBpbm9kZXM6IDMyNjUtMzMyOAorR3JvdXAgNTI6IChCbG9ja3MgNTMyNDktNTQyNzIpCisgIEJsb2NrIGJpdG1hcCBhdCA1MzI0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTMyNTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1MzI1MS01MzI1OCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MzI1OS01NDI3MgorICBGcmVlIGlub2RlczogMzMyOS0zMzkyCitHcm91cCA1MzogKEJsb2NrcyA1NDI3My01NTI5NikKKyAgQmxvY2sgYml0bWFwIGF0IDU0MjczICgrMCksIElub2RlIGJpdG1hcCBhdCA1NDI3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU0Mjc1LTU0MjgyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU0MjgzLTU1Mjk2CisgIEZyZWUgaW5vZGVzOiAzMzkzLTM0NTYKK0dyb3VwIDU0OiAoQmxvY2tzIDU1Mjk3LTU2MzIwKQorICBCbG9jayBiaXRtYXAgYXQgNTUyOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU1Mjk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTUyOTktNTUzMDYgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTUzMDctNTYzMjAKKyAgRnJlZSBpbm9kZXM6IDM0NTctMzUyMAorR3JvdXAgNTU6IChCbG9ja3MgNTYzMjEtNTczNDQpCisgIEJsb2NrIGJpdG1hcCBhdCA1NjMyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTYzMjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1NjMyMy01NjMzMCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NjMzMS01NzM0NAorICBGcmVlIGlub2RlczogMzUyMS0zNTg0CitHcm91cCA1NjogKEJsb2NrcyA1NzM0NS01ODM2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDU3MzQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCA1NzM0NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU3MzQ3LTU3MzU0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU3MzU1LTU4MzY4CisgIEZyZWUgaW5vZGVzOiAzNTg1LTM2NDgKK0dyb3VwIDU3OiAoQmxvY2tzIDU4MzY5LTU5MzkyKQorICBCbG9jayBiaXRtYXAgYXQgNTgzNjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU4MzcwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTgzNzEtNTgzNzggKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTgzNzktNTkzOTIKKyAgRnJlZSBpbm9kZXM6IDM2NDktMzcxMgorR3JvdXAgNTg6IChCbG9ja3MgNTkzOTMtNjA0MTYpCisgIEJsb2NrIGJpdG1hcCBhdCA1OTM5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTkzOTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1OTM5NS01OTQwMiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1OTQwMy02MDQxNgorICBGcmVlIGlub2RlczogMzcxMy0zNzc2CitHcm91cCA1OTogKEJsb2NrcyA2MDQxNy02MTQ0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDYwNDE3ICgrMCksIElub2RlIGJpdG1hcCBhdCA2MDQxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDYwNDE5LTYwNDI2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDYwNDI3LTYxNDQwCisgIEZyZWUgaW5vZGVzOiAzNzc3LTM4NDAKK0dyb3VwIDYwOiAoQmxvY2tzIDYxNDQxLTYyNDY0KQorICBCbG9jayBiaXRtYXAgYXQgNjE0NDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYxNDQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjE0NDMtNjE0NTAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjE0NTEtNjI0NjQKKyAgRnJlZSBpbm9kZXM6IDM4NDEtMzkwNAorR3JvdXAgNjE6IChCbG9ja3MgNjI0NjUtNjM0ODgpCisgIEJsb2NrIGJpdG1hcCBhdCA2MjQ2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjI0NjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MjQ2Ny02MjQ3NCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MjQ3NS02MzQ4OAorICBGcmVlIGlub2RlczogMzkwNS0zOTY4CitHcm91cCA2MjogKEJsb2NrcyA2MzQ4OS02NDUxMikKKyAgQmxvY2sgYml0bWFwIGF0IDYzNDg5ICgrMCksIElub2RlIGJpdG1hcCBhdCA2MzQ5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDYzNDkxLTYzNDk4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDYzNDk5LTY0NTEyCisgIEZyZWUgaW5vZGVzOiAzOTY5LTQwMzIKK0dyb3VwIDYzOiAoQmxvY2tzIDY0NTEzLTY1NTM2KQorICBCbG9jayBiaXRtYXAgYXQgNjQ1MTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDY0NTE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjQ1MTUtNjQ1MjIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjQ1MjMtNjU1MzYKKyAgRnJlZSBpbm9kZXM6IDQwMzMtNDA5NgorR3JvdXAgNjQ6IChCbG9ja3MgNjU1MzctNjY1NjApCisgIEJsb2NrIGJpdG1hcCBhdCA2NTUzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjU1MzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2NTUzOS02NTU0NiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NTU0Ny02NjU2MAorICBGcmVlIGlub2RlczogNDA5Ny00MTYwCitHcm91cCA2NTogKEJsb2NrcyA2NjU2MS02NzU4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDY2NTYxICgrMCksIElub2RlIGJpdG1hcCBhdCA2NjU2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY2NTYzLTY2NTcwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY2NTcxLTY3NTg0CisgIEZyZWUgaW5vZGVzOiA0MTYxLTQyMjQKK0dyb3VwIDY2OiAoQmxvY2tzIDY3NTg1LTY4NjA4KQorICBCbG9jayBiaXRtYXAgYXQgNjc1ODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDY3NTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjc1ODctNjc1OTQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjc1OTUtNjg2MDgKKyAgRnJlZSBpbm9kZXM6IDQyMjUtNDI4OAorR3JvdXAgNjc6IChCbG9ja3MgNjg2MDktNjk2MzIpCisgIEJsb2NrIGJpdG1hcCBhdCA2ODYwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjg2MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2ODYxMS02ODYxOCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2ODYxOS02OTYzMgorICBGcmVlIGlub2RlczogNDI4OS00MzUyCitHcm91cCA2ODogKEJsb2NrcyA2OTYzMy03MDY1NikKKyAgQmxvY2sgYml0bWFwIGF0IDY5NjMzICgrMCksIElub2RlIGJpdG1hcCBhdCA2OTYzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY5NjM1LTY5NjQyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY5NjQzLTcwNjU2CisgIEZyZWUgaW5vZGVzOiA0MzUzLTQ0MTYKK0dyb3VwIDY5OiAoQmxvY2tzIDcwNjU3LTcxNjgwKQorICBCbG9jayBiaXRtYXAgYXQgNzA2NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDcwNjU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzA2NTktNzA2NjYgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzA2NjctNzE2ODAKKyAgRnJlZSBpbm9kZXM6IDQ0MTctNDQ4MAorR3JvdXAgNzA6IChCbG9ja3MgNzE2ODEtNzI3MDQpCisgIEJsb2NrIGJpdG1hcCBhdCA3MTY4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzE2ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3MTY4My03MTY5MCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MTY5MS03MjcwNAorICBGcmVlIGlub2RlczogNDQ4MS00NTQ0CitHcm91cCA3MTogKEJsb2NrcyA3MjcwNS03MzcyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDcyNzA1ICgrMCksIElub2RlIGJpdG1hcCBhdCA3MjcwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDcyNzA3LTcyNzE0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcyNzE1LTczNzI4CisgIEZyZWUgaW5vZGVzOiA0NTQ1LTQ2MDgKK0dyb3VwIDcyOiAoQmxvY2tzIDczNzI5LTc0NzUyKQorICBCbG9jayBiaXRtYXAgYXQgNzM3MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDczNzMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzM3MzEtNzM3MzggKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzM3MzktNzQ3NTIKKyAgRnJlZSBpbm9kZXM6IDQ2MDktNDY3MgorR3JvdXAgNzM6IChCbG9ja3MgNzQ3NTMtNzU3NzYpCisgIEJsb2NrIGJpdG1hcCBhdCA3NDc1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzQ3NTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NDc1NS03NDc2MiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NDc2My03NTc3NgorICBGcmVlIGlub2RlczogNDY3My00NzM2CitHcm91cCA3NDogKEJsb2NrcyA3NTc3Ny03NjgwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDc1Nzc3ICgrMCksIElub2RlIGJpdG1hcCBhdCA3NTc3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc1Nzc5LTc1Nzg2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc1Nzg3LTc2ODAwCisgIEZyZWUgaW5vZGVzOiA0NzM3LTQ4MDAKK0dyb3VwIDc1OiAoQmxvY2tzIDc2ODAxLTc3ODI0KQorICBCbG9jayBiaXRtYXAgYXQgNzY4MDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc2ODAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzY4MDMtNzY4MTAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzY4MTEtNzc4MjQKKyAgRnJlZSBpbm9kZXM6IDQ4MDEtNDg2NAorR3JvdXAgNzY6IChCbG9ja3MgNzc4MjUtNzg4NDgpCisgIEJsb2NrIGJpdG1hcCBhdCA3NzgyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzc4MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NzgyNy03NzgzNCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NzgzNS03ODg0OAorICBGcmVlIGlub2RlczogNDg2NS00OTI4CitHcm91cCA3NzogKEJsb2NrcyA3ODg0OS03OTg3MikKKyAgQmxvY2sgYml0bWFwIGF0IDc4ODQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCA3ODg1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc4ODUxLTc4ODU4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc4ODU5LTc5ODcyCisgIEZyZWUgaW5vZGVzOiA0OTI5LTQ5OTIKK0dyb3VwIDc4OiAoQmxvY2tzIDc5ODczLTgwODk2KQorICBCbG9jayBiaXRtYXAgYXQgNzk4NzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc5ODc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzk4NzUtNzk4ODIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzk4ODMtODA4OTYKKyAgRnJlZSBpbm9kZXM6IDQ5OTMtNTA1NgorR3JvdXAgNzk6IChCbG9ja3MgODA4OTctODE5MjApCisgIEJsb2NrIGJpdG1hcCBhdCA4MDg5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODA4OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4MDg5OS04MDkwNiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4MDkwNy04MTkyMAorICBGcmVlIGlub2RlczogNTA1Ny01MTIwCitHcm91cCA4MDogKEJsb2NrcyA4MTkyMS04Mjk0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDgxOTIxICgrMCksIElub2RlIGJpdG1hcCBhdCA4MTkyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDgxOTIzLTgxOTMwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgxOTMxLTgyOTQ0CisgIEZyZWUgaW5vZGVzOiA1MTIxLTUxODQKK0dyb3VwIDgxOiAoQmxvY2tzIDgyOTQ1LTgzOTY4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA4Mjk0NSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgODI5NDYtODI5NjEKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA4Mjk2Mi04MzIxNworICBCbG9jayBiaXRtYXAgYXQgODMyMTggKCsyNzMpLCBJbm9kZSBiaXRtYXAgYXQgODMyMTkgKCsyNzQpCisgIElub2RlIHRhYmxlIGF0IDgzMjIwLTgzMjI3ICgrMjc1KQorICA3NDEgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4MzIyOC04Mzk2OAorICBGcmVlIGlub2RlczogNTE4NS01MjQ4CitHcm91cCA4MjogKEJsb2NrcyA4Mzk2OS04NDk5MikKKyAgQmxvY2sgYml0bWFwIGF0IDgzOTY5ICgrMCksIElub2RlIGJpdG1hcCBhdCA4Mzk3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDgzOTcxLTgzOTc4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgzOTc5LTg0OTkyCisgIEZyZWUgaW5vZGVzOiA1MjQ5LTUzMTIKK0dyb3VwIDgzOiAoQmxvY2tzIDg0OTkzLTg2MDE2KQorICBCbG9jayBiaXRtYXAgYXQgODQ5OTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg0OTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODQ5OTUtODUwMDIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODUwMDMtODYwMTYKKyAgRnJlZSBpbm9kZXM6IDUzMTMtNTM3NgorR3JvdXAgODQ6IChCbG9ja3MgODYwMTctODcwNDApCisgIEJsb2NrIGJpdG1hcCBhdCA4NjAxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODYwMTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4NjAxOS04NjAyNiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NjAyNy04NzA0MAorICBGcmVlIGlub2RlczogNTM3Ny01NDQwCitHcm91cCA4NTogKEJsb2NrcyA4NzA0MS04ODA2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDg3MDQxICgrMCksIElub2RlIGJpdG1hcCBhdCA4NzA0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg3MDQzLTg3MDUwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg3MDUxLTg4MDY0CisgIEZyZWUgaW5vZGVzOiA1NDQxLTU1MDQKK0dyb3VwIDg2OiAoQmxvY2tzIDg4MDY1LTg5MDg4KQorICBCbG9jayBiaXRtYXAgYXQgODgwNjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg4MDY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODgwNjctODgwNzQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODgwNzUtODkwODgKKyAgRnJlZSBpbm9kZXM6IDU1MDUtNTU2OAorR3JvdXAgODc6IChCbG9ja3MgODkwODktOTAxMTIpCisgIEJsb2NrIGJpdG1hcCBhdCA4OTA4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODkwOTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4OTA5MS04OTA5OCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4OTA5OS05MDExMgorICBGcmVlIGlub2RlczogNTU2OS01NjMyCitHcm91cCA4ODogKEJsb2NrcyA5MDExMy05MTEzNikKKyAgQmxvY2sgYml0bWFwIGF0IDkwMTEzICgrMCksIElub2RlIGJpdG1hcCBhdCA5MDExNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDkwMTE1LTkwMTIyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkwMTIzLTkxMTM2CisgIEZyZWUgaW5vZGVzOiA1NjMzLTU2OTYKK0dyb3VwIDg5OiAoQmxvY2tzIDkxMTM3LTkyMTYwKQorICBCbG9jayBiaXRtYXAgYXQgOTExMzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDkxMTM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTExMzktOTExNDYgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTExNDctOTIxNjAKKyAgRnJlZSBpbm9kZXM6IDU2OTctNTc2MAorR3JvdXAgOTA6IChCbG9ja3MgOTIxNjEtOTMxODQpCisgIEJsb2NrIGJpdG1hcCBhdCA5MjE2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTIxNjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5MjE2My05MjE3MCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MjE3MS05MzE4NAorICBGcmVlIGlub2RlczogNTc2MS01ODI0CitHcm91cCA5MTogKEJsb2NrcyA5MzE4NS05NDIwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDkzMTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCA5MzE4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDkzMTg3LTkzMTk0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkzMTk1LTk0MjA4CisgIEZyZWUgaW5vZGVzOiA1ODI1LTU4ODgKK0dyb3VwIDkyOiAoQmxvY2tzIDk0MjA5LTk1MjMyKQorICBCbG9jayBiaXRtYXAgYXQgOTQyMDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk0MjEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTQyMTEtOTQyMTggKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTQyMTktOTUyMzIKKyAgRnJlZSBpbm9kZXM6IDU4ODktNTk1MgorR3JvdXAgOTM6IChCbG9ja3MgOTUyMzMtOTYyNTYpCisgIEJsb2NrIGJpdG1hcCBhdCA5NTIzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTUyMzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5NTIzNS05NTI0MiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NTI0My05NjI1NgorICBGcmVlIGlub2RlczogNTk1My02MDE2CitHcm91cCA5NDogKEJsb2NrcyA5NjI1Ny05NzI4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDk2MjU3ICgrMCksIElub2RlIGJpdG1hcCBhdCA5NjI1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDk2MjU5LTk2MjY2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk2MjY3LTk3MjgwCisgIEZyZWUgaW5vZGVzOiA2MDE3LTYwODAKK0dyb3VwIDk1OiAoQmxvY2tzIDk3MjgxLTk4MzA0KQorICBCbG9jayBiaXRtYXAgYXQgOTcyODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk3MjgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTcyODMtOTcyOTAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTcyOTEtOTgzMDQKKyAgRnJlZSBpbm9kZXM6IDYwODEtNjE0NAorR3JvdXAgOTY6IChCbG9ja3MgOTgzMDUtOTkzMjgpCisgIEJsb2NrIGJpdG1hcCBhdCA5ODMwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTgzMDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5ODMwNy05ODMxNCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5ODMxNS05OTMyOAorICBGcmVlIGlub2RlczogNjE0NS02MjA4CitHcm91cCA5NzogKEJsb2NrcyA5OTMyOS0xMDAzNTIpCisgIEJsb2NrIGJpdG1hcCBhdCA5OTMyOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTkzMzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5OTMzMS05OTMzOCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5OTMzOS0xMDAzNTIKKyAgRnJlZSBpbm9kZXM6IDYyMDktNjI3MgorR3JvdXAgOTg6IChCbG9ja3MgMTAwMzUzLTEwMTM3NikKKyAgQmxvY2sgYml0bWFwIGF0IDEwMDM1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTAwMzU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAwMzU1LTEwMDM2MiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDAzNjMtMTAxMzc2CisgIEZyZWUgaW5vZGVzOiA2MjczLTYzMzYKK0dyb3VwIDk5OiAoQmxvY2tzIDEwMTM3Ny0xMDI0MDApCisgIEJsb2NrIGJpdG1hcCBhdCAxMDEzNzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMTM3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMTM3OS0xMDEzODYgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAxMzg3LTEwMjQwMAorICBGcmVlIGlub2RlczogNjMzNy02NDAwCitHcm91cCAxMDA6IChCbG9ja3MgMTAyNDAxLTEwMzQyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjQwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTAyNDAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAyNDAzLTEwMjQxMCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDI0MTEtMTAzNDI0CisgIEZyZWUgaW5vZGVzOiA2NDAxLTY0NjQKK0dyb3VwIDEwMTogKEJsb2NrcyAxMDM0MjUtMTA0NDQ4KQorICBCbG9jayBiaXRtYXAgYXQgMTAzNDI1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDM0MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDM0MjctMTAzNDM0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMzQzNS0xMDQ0NDgKKyAgRnJlZSBpbm9kZXM6IDY0NjUtNjUyOAorR3JvdXAgMTAyOiAoQmxvY2tzIDEwNDQ0OS0xMDU0NzIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDQ0NDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwNDQ1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwNDQ1MS0xMDQ0NTggKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA0NDU5LTEwNTQ3MgorICBGcmVlIGlub2RlczogNjUyOS02NTkyCitHcm91cCAxMDM6IChCbG9ja3MgMTA1NDczLTEwNjQ5NikKKyAgQmxvY2sgYml0bWFwIGF0IDEwNTQ3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA1NDc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA1NDc1LTEwNTQ4MiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDU0ODMtMTA2NDk2CisgIEZyZWUgaW5vZGVzOiA2NTkzLTY2NTYKK0dyb3VwIDEwNDogKEJsb2NrcyAxMDY0OTctMTA3NTIwKQorICBCbG9jayBiaXRtYXAgYXQgMTA2NDk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDY0OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDY0OTktMTA2NTA2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwNjUwNy0xMDc1MjAKKyAgRnJlZSBpbm9kZXM6IDY2NTctNjcyMAorR3JvdXAgMTA1OiAoQmxvY2tzIDEwNzUyMS0xMDg1NDQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDc1MjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwNzUyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwNzUyMy0xMDc1MzAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA3NTMxLTEwODU0NAorICBGcmVlIGlub2RlczogNjcyMS02Nzg0CitHcm91cCAxMDY6IChCbG9ja3MgMTA4NTQ1LTEwOTU2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwODU0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA4NTQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA4NTQ3LTEwODU1NCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDg1NTUtMTA5NTY4CisgIEZyZWUgaW5vZGVzOiA2Nzg1LTY4NDgKK0dyb3VwIDEwNzogKEJsb2NrcyAxMDk1NjktMTEwNTkyKQorICBCbG9jayBiaXRtYXAgYXQgMTA5NTY5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDk1NzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDk1NzEtMTA5NTc4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwOTU3OS0xMTA1OTIKKyAgRnJlZSBpbm9kZXM6IDY4NDktNjkxMgorR3JvdXAgMTA4OiAoQmxvY2tzIDExMDU5My0xMTE2MTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTA1OTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExMDU5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExMDU5NS0xMTA2MDIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEwNjAzLTExMTYxNgorICBGcmVlIGlub2RlczogNjkxMy02OTc2CitHcm91cCAxMDk6IChCbG9ja3MgMTExNjE3LTExMjY0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDExMTYxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTExNjE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTExNjE5LTExMTYyNiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTE2MjctMTEyNjQwCisgIEZyZWUgaW5vZGVzOiA2OTc3LTcwNDAKK0dyb3VwIDExMDogKEJsb2NrcyAxMTI2NDEtMTEzNjY0KQorICBCbG9jayBiaXRtYXAgYXQgMTEyNjQxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTI2NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTI2NDMtMTEyNjUwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExMjY1MS0xMTM2NjQKKyAgRnJlZSBpbm9kZXM6IDcwNDEtNzEwNAorR3JvdXAgMTExOiAoQmxvY2tzIDExMzY2NS0xMTQ2ODgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTM2NjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExMzY2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExMzY2Ny0xMTM2NzQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEzNjc1LTExNDY4OAorICBGcmVlIGlub2RlczogNzEwNS03MTY4CitHcm91cCAxMTI6IChCbG9ja3MgMTE0Njg5LTExNTcxMikKKyAgQmxvY2sgYml0bWFwIGF0IDExNDY4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE0NjkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE0NjkxLTExNDY5OCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTQ2OTktMTE1NzEyCisgIEZyZWUgaW5vZGVzOiA3MTY5LTcyMzIKK0dyb3VwIDExMzogKEJsb2NrcyAxMTU3MTMtMTE2NzM2KQorICBCbG9jayBiaXRtYXAgYXQgMTE1NzEzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTU3MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTU3MTUtMTE1NzIyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExNTcyMy0xMTY3MzYKKyAgRnJlZSBpbm9kZXM6IDcyMzMtNzI5NgorR3JvdXAgMTE0OiAoQmxvY2tzIDExNjczNy0xMTc3NjApCisgIEJsb2NrIGJpdG1hcCBhdCAxMTY3MzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExNjczOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExNjczOS0xMTY3NDYgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE2NzQ3LTExNzc2MAorICBGcmVlIGlub2RlczogNzI5Ny03MzYwCitHcm91cCAxMTU6IChCbG9ja3MgMTE3NzYxLTExODc4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDExNzc2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE3NzYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE3NzYzLTExNzc3MCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTc3NzEtMTE4Nzg0CisgIEZyZWUgaW5vZGVzOiA3MzYxLTc0MjQKK0dyb3VwIDExNjogKEJsb2NrcyAxMTg3ODUtMTE5ODA4KQorICBCbG9jayBiaXRtYXAgYXQgMTE4Nzg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTg3ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTg3ODctMTE4Nzk0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExODc5NS0xMTk4MDgKKyAgRnJlZSBpbm9kZXM6IDc0MjUtNzQ4OAorR3JvdXAgMTE3OiAoQmxvY2tzIDExOTgwOS0xMjA4MzIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTk4MDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExOTgxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExOTgxMS0xMTk4MTggKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE5ODE5LTEyMDgzMgorICBGcmVlIGlub2RlczogNzQ4OS03NTUyCitHcm91cCAxMTg6IChCbG9ja3MgMTIwODMzLTEyMTg1NikKKyAgQmxvY2sgYml0bWFwIGF0IDEyMDgzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIwODM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIwODM1LTEyMDg0MiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjA4NDMtMTIxODU2CisgIEZyZWUgaW5vZGVzOiA3NTUzLTc2MTYKK0dyb3VwIDExOTogKEJsb2NrcyAxMjE4NTctMTIyODgwKQorICBCbG9jayBiaXRtYXAgYXQgMTIxODU3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjE4NTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjE4NTktMTIxODY2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMTg2Ny0xMjI4ODAKKyAgRnJlZSBpbm9kZXM6IDc2MTctNzY4MAorR3JvdXAgMTIwOiAoQmxvY2tzIDEyMjg4MS0xMjM5MDQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjI4ODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyMjg4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyMjg4My0xMjI4OTAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIyODkxLTEyMzkwNAorICBGcmVlIGlub2RlczogNzY4MS03NzQ0CitHcm91cCAxMjE6IChCbG9ja3MgMTIzOTA1LTEyNDkyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDEyMzkwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIzOTA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIzOTA3LTEyMzkxNCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjM5MTUtMTI0OTI4CisgIEZyZWUgaW5vZGVzOiA3NzQ1LTc4MDgKK0dyb3VwIDEyMjogKEJsb2NrcyAxMjQ5MjktMTI1OTUyKQorICBCbG9jayBiaXRtYXAgYXQgMTI0OTI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjQ5MzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjQ5MzEtMTI0OTM4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyNDkzOS0xMjU5NTIKKyAgRnJlZSBpbm9kZXM6IDc4MDktNzg3MgorR3JvdXAgMTIzOiAoQmxvY2tzIDEyNTk1My0xMjY5NzYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjU5NTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyNTk1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyNTk1NS0xMjU5NjIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI1OTYzLTEyNjk3NgorICBGcmVlIGlub2RlczogNzg3My03OTM2CitHcm91cCAxMjQ6IChCbG9ja3MgMTI2OTc3LTEyODAwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDEyNjk3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTI2OTc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTI2OTc5LTEyNjk4NiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjY5ODctMTI4MDAwCisgIEZyZWUgaW5vZGVzOiA3OTM3LTgwMDAKK0dyb3VwIDEyNTogKEJsb2NrcyAxMjgwMDEtMTI5MDI0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxMjgwMDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEyODAwMi0xMjgwMTcKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAxMjgwMTgtMTI4MjczCisgIEJsb2NrIGJpdG1hcCBhdCAxMjgyNzQgKCsyNzMpLCBJbm9kZSBiaXRtYXAgYXQgMTI4Mjc1ICgrMjc0KQorICBJbm9kZSB0YWJsZSBhdCAxMjgyNzYtMTI4MjgzICgrMjc1KQorICA3NDEgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjgyODQtMTI5MDI0CisgIEZyZWUgaW5vZGVzOiA4MDAxLTgwNjQKK0dyb3VwIDEyNjogKEJsb2NrcyAxMjkwMjUtMTMwMDQ4KQorICBCbG9jayBiaXRtYXAgYXQgMTI5MDI1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjkwMjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjkwMjctMTI5MDM0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyOTAzNS0xMzAwNDgKKyAgRnJlZSBpbm9kZXM6IDgwNjUtODEyOAorR3JvdXAgMTI3OiAoQmxvY2tzIDEzMDA0OS0xMzEwNzEpCisgIEJsb2NrIGJpdG1hcCBhdCAxMzAwNDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzMDA1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzMDA1MS0xMzAwNTggKCsyKQorICAxMDEzIGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMwMDU5LTEzMTA3MQorICBGcmVlIGlub2RlczogODEyOS04MTkyCmRpZmYgLS1naXQgYS90ZXN0cy9tX2Rlc2Nfc2l6ZV8xMjgvc2NyaXB0IGIvdGVzdHMvbV9kZXNjX3NpemVfMTI4L3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTNkZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbV9kZXNjX3NpemVfMTI4L3NjcmlwdApAQCAtMCwwICsxLDQgQEAKK0RFU0NSSVBUSU9OPSJlbmFibGUgMTI4LWJ5dGUgZ3JvdXAgZGVzY3JpcHRvciBvbiBta2ZzIgorRlNfU0laRT0xMzEwNzIKK01LRTJGU19PUFRTPSItYiAxMDI0IC1PIDY0Yml0LGV4dGVudHMgLWcgMTAyNCAtTiA4MTkyIC1FIGRlc2Nfc2l6ZT0xMjgiCisuICRjbWRfZGlyL3J1bl9ta2UyZnMKZGlmZiAtLWdpdCBhL3Rlc3RzL21fZXh0ZW50X2pvdXJuYWwvZXhwZWN0LjEgYi90ZXN0cy9tX2V4dGVudF9qb3VybmFsL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZThhODAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tX2V4dGVudF9qb3VybmFsL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTEzIEBACitDcmVhdGluZyBmaWxlc3lzdGVtIHdpdGggNjU1MzYgMWsgYmxvY2tzIGFuZCAxNjM4NCBpbm9kZXMKK1N1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAKKwk4MTkzLCAyNDU3NywgNDA5NjEsIDU3MzQ1CisKK0FsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAgICAICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBpbm9kZSB0YWJsZXM6ICAgIAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitDcmVhdGluZyBqb3VybmFsICg0MDk2IGJsb2Nrcyk6IGRvbmUKK1dyaXRpbmcgc3VwZXJibG9ja3MgYW5kIGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogICAgCAgIZG9uZQorCitGaWxlc3lzdGVtIGZlYXR1cmVzOiBoYXNfam91cm5hbCBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIGV4dGVudCBzcGFyc2Vfc3VwZXIKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzE2Mzg0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNzQ2MC82NTUzNiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKK0ZpbGVzeXN0ZW0gdm9sdW1lIG5hbWU6ICAgPG5vbmU+CitMYXN0IG1vdW50ZWQgb246ICAgICAgICAgIDxub3QgYXZhaWxhYmxlPgorRmlsZXN5c3RlbSBtYWdpYyBudW1iZXI6ICAweEVGNTMKK0ZpbGVzeXN0ZW0gcmV2aXNpb24gIzogICAgMSAoZHluYW1pYykKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6ICAgICAgaGFzX2pvdXJuYWwgZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBleHRlbnQgc3BhcnNlX3N1cGVyCitEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIChub25lKQorRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICBjbGVhbgorRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICBDb250aW51ZQorRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICBMaW51eAorSW5vZGUgY291bnQ6ICAgICAgICAgICAgICAxNjM4NAorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICA2NTUzNgorUmVzZXJ2ZWQgYmxvY2sgY291bnQ6ICAgICAzMjc2CitGcmVlIGJsb2NrczogICAgICAgICAgICAgIDU4MDc2CitGcmVlIGlub2RlczogICAgICAgICAgICAgIDE2MzczCitGaXJzdCBibG9jazogICAgICAgICAgICAgIDEKK0Jsb2NrIHNpemU6ICAgICAgICAgICAgICAgMTAyNAorRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICAxMDI0CitSZXNlcnZlZCBHRFQgYmxvY2tzOiAgICAgIDI1NQorQmxvY2tzIHBlciBncm91cDogICAgICAgICA4MTkyCitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDgxOTIKK0lub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgMjA0OAorSW5vZGUgYmxvY2tzIHBlciBncm91cDogICAyNTYKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorSm91cm5hbCBpbm9kZTogICAgICAgICAgICA4CitEZWZhdWx0IGRpcmVjdG9yeSBoYXNoOiAgIGhhbGZfbWQ0CitKb3VybmFsIGJhY2t1cDogICAgICAgICAgIGlub2RlIGJsb2NrcworSm91cm5hbCBmZWF0dXJlczogICAgICAgICAobm9uZSkKK0pvdXJuYWwgc2l6ZTogICAgICAgICAgICAgNDA5NmsKK0pvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgNDA5NgorSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweDAwMDAwMDAxCitKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgIDAKKworCitHcm91cCAwOiAoQmxvY2tzIDEtODE5MikKKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDItMgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDMtMjU3CisgIEJsb2NrIGJpdG1hcCBhdCAyNTggKCsyNTcpLCBJbm9kZSBiaXRtYXAgYXQgMjU5ICgrMjU4KQorICBJbm9kZSB0YWJsZSBhdCAyNjAtNTE1ICgrMjU5KQorICA3NjYzIGZyZWUgYmxvY2tzLCAyMDM3IGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MzAtODE5MgorICBGcmVlIGlub2RlczogMTItMjA0OAorR3JvdXAgMTogKEJsb2NrcyA4MTkzLTE2Mzg0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA4MTkzLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA4MTk0LTgxOTQKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA4MTk1LTg0NDkKKyAgQmxvY2sgYml0bWFwIGF0IDg0NTAgKCsyNTcpLCBJbm9kZSBiaXRtYXAgYXQgODQ1MSAoKzI1OCkKKyAgSW5vZGUgdGFibGUgYXQgODQ1Mi04NzA3ICgrMjU5KQorICA3Njc3IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NzA4LTE2Mzg0CisgIEZyZWUgaW5vZGVzOiAyMDQ5LTQwOTYKK0dyb3VwIDI6IChCbG9ja3MgMTYzODUtMjQ1NzYpCisgIEJsb2NrIGJpdG1hcCBhdCAxNjM4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTYzODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjM4Ny0xNjY0MiAoKzIpCisgIDM4MzggZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIwNzM5LTI0NTc2CisgIEZyZWUgaW5vZGVzOiA0MDk3LTYxNDQKK0dyb3VwIDM6IChCbG9ja3MgMjQ1NzctMzI3NjgpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDI0NTc3LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyNDU3OC0yNDU3OAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDI0NTc5LTI0ODMzCisgIEJsb2NrIGJpdG1hcCBhdCAyNDgzNCAoKzI1NyksIElub2RlIGJpdG1hcCBhdCAyNDgzNSAoKzI1OCkKKyAgSW5vZGUgdGFibGUgYXQgMjQ4MzYtMjUwOTEgKCsyNTkpCisgIDc2NzcgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1MDkyLTMyNzY4CisgIEZyZWUgaW5vZGVzOiA2MTQ1LTgxOTIKK0dyb3VwIDQ6IChCbG9ja3MgMzI3NjktNDA5NjApCisgIEJsb2NrIGJpdG1hcCBhdCAzMjc2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzI3NzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMjc3MS0zMzAyNiAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMzMDI3LTQwOTYwCisgIEZyZWUgaW5vZGVzOiA4MTkzLTEwMjQwCitHcm91cCA1OiAoQmxvY2tzIDQwOTYxLTQ5MTUyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA0MDk2MSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNDA5NjItNDA5NjIKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA0MDk2My00MTIxNworICBCbG9jayBiaXRtYXAgYXQgNDEyMTggKCsyNTcpLCBJbm9kZSBiaXRtYXAgYXQgNDEyMTkgKCsyNTgpCisgIElub2RlIHRhYmxlIGF0IDQxMjIwLTQxNDc1ICgrMjU5KQorICA3Njc3IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MTQ3Ni00OTE1MgorICBGcmVlIGlub2RlczogMTAyNDEtMTIyODgKK0dyb3VwIDY6IChCbG9ja3MgNDkxNTMtNTczNDQpCisgIEJsb2NrIGJpdG1hcCBhdCA0OTE1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDkxNTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0OTE1NS00OTQxMCAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ5NDExLTU3MzQ0CisgIEZyZWUgaW5vZGVzOiAxMjI4OS0xNDMzNgorR3JvdXAgNzogKEJsb2NrcyA1NzM0NS02NTUzNSkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNTczNDUsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDU3MzQ2LTU3MzQ2CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNTczNDctNTc2MDEKKyAgQmxvY2sgYml0bWFwIGF0IDU3NjAyICgrMjU3KSwgSW5vZGUgYml0bWFwIGF0IDU3NjAzICgrMjU4KQorICBJbm9kZSB0YWJsZSBhdCA1NzYwNC01Nzg1OSAoKzI1OSkKKyAgNzY3NiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTc4NjAtNjU1MzUKKyAgRnJlZSBpbm9kZXM6IDE0MzM3LTE2Mzg0CmRpZmYgLS1naXQgYS90ZXN0cy9tX2V4dGVudF9qb3VybmFsL3NjcmlwdCBiL3Rlc3RzL21fZXh0ZW50X2pvdXJuYWwvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMGNhYzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tX2V4dGVudF9qb3VybmFsL3NjcmlwdApAQCAtMCwwICsxLDQgQEAKK0RFU0NSSVBUSU9OPSJleHRlbnQtbWFwcGVkIGpvdXJuYWwiCitGU19TSVpFPTY1NTM2CitNS0UyRlNfT1BUUz0iLU8gZXh0ZW50cyAtaiIKKy4gJGNtZF9kaXIvcnVuX21rZTJmcwpkaWZmIC0tZ2l0IGEvdGVzdHMvbV9odWdlZmlsZV9zbGFjay9leHBlY3QgYi90ZXN0cy9tX2h1Z2VmaWxlX3NsYWNrL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmE2MjhhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbV9odWdlZmlsZV9zbGFjay9leHBlY3QKQEAgLTAsMCArMSwxOCBAQAordHVuZTJmcyB0ZXN0CitDcmVhdGluZyBmaWxlc3lzdGVtIHdpdGggNzg2NDMyIDFrIGJsb2NrcyBhbmQgOTgzMDQgaW5vZGVzCitTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogCisJODE5MywgMjQ1NzcsIDQwOTYxLCA1NzM0NSwgNzM3MjksIDIwNDgwMSwgMjIxMTg1LCA0MDE0MDksIDY2MzU1MworCitBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogICAgICAICAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitXcml0aW5nIGlub2RlIHRhYmxlczogICAgICAICAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitDcmVhdGluZyBqb3VybmFsICgxNjM4NCBibG9ja3MpOiBkb25lCitDcmVhdGluZyA2MzY4IGh1Z2UgZmlsZShzKSB3aXRoIDExNyBibG9ja3MgZWFjaDogZG9uZQorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAgIAgICAgIZG9uZQorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9tX2h1Z2VmaWxlX3NsYWNrL25hbWUgYi90ZXN0cy9tX2h1Z2VmaWxlX3NsYWNrL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1MWZkNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21faHVnZWZpbGVfc2xhY2svbmFtZQpAQCAtMCwwICsxIEBACitta2UyZnMgY3JlYXRpbmcgYSBodWdlZmlsZSBmcyB3aXRoIGEgbG90IG9mIHNsYWNrCmRpZmYgLS1naXQgYS90ZXN0cy9tX2h1Z2VmaWxlX3NsYWNrL3NjcmlwdCBiL3Rlc3RzL21faHVnZWZpbGVfc2xhY2svc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlY2IyZDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tX2h1Z2VmaWxlX3NsYWNrL3NjcmlwdApAQCAtMCwwICsxLDYxIEBACitpZiB0ZXN0IC14ICRSRVNJWkUyRlNfRVhFIC1hIC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCitGU0NLX09QVD0tZm4KK09VVD0kdGVzdF9uYW1lLmxvZworRVhQPSR0ZXN0X2Rpci9leHBlY3QKK0NPTkY9JFRNUEZJTEUuY29uZgorCisjZ3ppcCAtZCA8ICRFWFAuZ3ogPiAkRVhQCisKK2NhdCA+ICRDT05GIDw8IEVOREwKK1tmc190eXBlc10KKwlleHQ0aCA9IHsKKwkJZmVhdHVyZXMgPSBoYXNfam91cm5hbCxleHRlbnQsaHVnZV9maWxlLHVuaW5pdF9iZyxkaXJfbmxpbmssZXh0cmFfaXNpemUsc3BhcnNlX3N1cGVyLGZpbGV0eXBlLGRpcl9pbmRleCxleHRfYXR0cixecmVzaXplX2lub2RlLF5tZXRhX2JnLF5mbGV4X2JnLDY0Yml0CisJCWJsb2Nrc2l6ZSA9IDEwMjQKKwkJaW5vZGVfc2l6ZSA9IDI1NgorCQltYWtlX2h1Z2VmaWxlcyA9IHRydWUKKwkJaHVnZWZpbGVzX2RpciA9IC8KKwkJaHVnZWZpbGVzX3NsYWNrID0gMTIwMDBLCisJCWh1Z2VmaWxlc19uYW1lID0gYWFhYWEKKwkJaHVnZWZpbGVzX2RpZ2l0cyA9IDQKKwkJaHVnZWZpbGVzX3NpemUgPSAxMTdLCisJCXplcm9faHVnZWZpbGVzID0gZmFsc2UKKwl9CitFTkRMCisKK2VjaG8gInR1bmUyZnMgdGVzdCIgPiAkT1VUCisKK01LRTJGU19DT05GSUc9JENPTkYgJE1LRTJGUyAtRiAtVCBleHQ0aCAtSSAxMjggJFRNUEZJTEUgNzg2NDMyID4+ICRPVVQgMj4mMQorcm0gLXJmICRDT05GCisKKyMgZHVtcCBhbmQgY2hlY2suIGlmIHdlIGdldCB0aGlzIGZhciwgd2Ugc3VjY2VlZGVkLi4uCiskRlNDSyAkRlNDS19PUFQgLU4gdGVzdF9maWxlc3lzICRUTVBGSUxFID4+ICRPVVQgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVAorCitybSAkVE1QRklMRQorCisjCisjIERvIHRoZSB2ZXJpZmljYXRpb24KKyMKKworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiAtZSAncy90ZXN0X2ZpbGVzeXM6LiovL2cnIDwgJE9VVCA+ICRPVVQubmV3CittdiAkT1VULm5ldyAkT1VUCisKK2NtcCAtcyAkT1VUICRFWFAKK3N0YXR1cz0kPworCitpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJZGlmZiAkRElGRl9PUFRTICRFWFAgJE9VVCA+ICR0ZXN0X25hbWUuZmFpbGVkCitmaQorCit1bnNldCBJTUFHRSBGU0NLX09QVCBPVVQgRVhQIENPTkYKKworZWxzZSAjaWYgdGVzdCAteCAkUkVTSVpFMkZTX0VYRSAtYSAteCAkREVCVUdGU19FWEU7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpCisKZGlmZiAtLWdpdCBhL3Rlc3RzL21fbGFyZ2VfZmlsZS9leHBlY3QuMSBiL3Rlc3RzL21fbGFyZ2VfZmlsZS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWIyNzExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbV9sYXJnZV9maWxlL2V4cGVjdC4xCkBAIC0wLDAgKzEsNTUgQEAKK0NyZWF0aW5nIGZpbGVzeXN0ZW0gd2l0aCAxNjM4NCA0ayBibG9ja3MgYW5kIDY0IGlub2RlcworCitBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogICAgCAgIZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dyaXRpbmcgaW5vZGUgdGFibGVzOiAgICAICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAICAhkb25lCisKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6IGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyIGxhcmdlX2ZpbGUKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzY0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTcvMTYzODQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyIGxhcmdlX2ZpbGUKK0RlZmF1bHQgbW91bnQgb3B0aW9uczogICAgKG5vbmUpCitGaWxlc3lzdGVtIHN0YXRlOiAgICAgICAgIGNsZWFuCitFcnJvcnMgYmVoYXZpb3I6ICAgICAgICAgIENvbnRpbnVlCitGaWxlc3lzdGVtIE9TIHR5cGU6ICAgICAgIExpbnV4CitJbm9kZSBjb3VudDogICAgICAgICAgICAgIDY0CitCbG9jayBjb3VudDogICAgICAgICAgICAgIDE2Mzg0CitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDgxOQorRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAxNjM2NworRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICA1MworRmlyc3QgYmxvY2s6ICAgICAgICAgICAgICAwCitCbG9jayBzaXplOiAgICAgICAgICAgICAgIDQwOTYKK0ZyYWdtZW50IHNpemU6ICAgICAgICAgICAgNDA5NgorUmVzZXJ2ZWQgR0RUIGJsb2NrczogICAgICAzCitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDMyNzY4CitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDMyNzY4CitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDY0CitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDQKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDI1NgorUmVxdWlyZWQgZXh0cmEgaXNpemU6ICAgICAyOAorRGVzaXJlZCBleHRyYSBpc2l6ZTogICAgICAyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMC0xNjM4MykKKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDAsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEtMQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDItNAorICBCbG9jayBiaXRtYXAgYXQgNSAoKzUpLCBJbm9kZSBiaXRtYXAgYXQgNiAoKzYpCisgIElub2RlIHRhYmxlIGF0IDctMTAgKCs3KQorICAxNjM2NyBmcmVlIGJsb2NrcywgNTMgZnJlZSBpbm9kZXMsIDIgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE3LTE2MzgzCisgIEZyZWUgaW5vZGVzOiAxMi02NApkaWZmIC0tZ2l0IGEvdGVzdHMvbV9sYXJnZV9maWxlL3NjcmlwdCBiL3Rlc3RzL21fbGFyZ2VfZmlsZS9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ1YjJiYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21fbGFyZ2VfZmlsZS9zY3JpcHQKQEAgLTAsMCArMSw3IEBACitERVNDUklQVElPTj0ibGFyZ2VmaWxlIGZzIHR5cGUiCitGU19TSVpFPTY1NTM2CitNS0UyRlNfREVWSUNFX1NFQ1RTSVpFPTIwNDgKK2V4cG9ydCBNS0UyRlNfREVWSUNFX1NFQ1RTSVpFCitNS0UyRlNfT1BUUz0iLVQgbGFyZ2VmaWxlIgorLiAkY21kX2Rpci9ydW5fbWtlMmZzCit1bnNldCBNS0UyRlNfREVWSUNFX1NFQ1RTSVpFCmRpZmYgLS1naXQgYS90ZXN0cy9tX21ldGFfYmcvZXhwZWN0LjEgYi90ZXN0cy9tX21ldGFfYmcvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RmNDIzMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21fbWV0YV9iZy9leHBlY3QuMQpAQCAtMCwwICsxLDgzNSBAQAorQ3JlYXRpbmcgZmlsZXN5c3RlbSB3aXRoIDEzMTA3MiAxayBibG9ja3MgYW5kIDMyNzY4IGlub2RlcworU3VwZXJibG9jayBiYWNrdXBzIHN0b3JlZCBvbiBibG9ja3M6IAorCTEwMjUsIDMwNzMsIDUxMjEsIDcxNjksIDkyMTcsIDI1NjAxLCAyNzY0OSwgNTAxNzcsIDgyOTQ1LCAxMjgwMDEKKworQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICAgICAgICAICAgICAgIZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dyaXRpbmcgaW5vZGUgdGFibGVzOiAgICAgICAgCAgICAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICAgICAgICAICAgICAgIZG9uZQorCitGaWxlc3lzdGVtIGZlYXR1cmVzOiBleHRfYXR0ciBkaXJfaW5kZXggZmlsZXR5cGUgbWV0YV9iZyBzcGFyc2Vfc3VwZXIKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzMyNzY4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNDM4OS8xMzEwNzIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIGRpcl9pbmRleCBmaWxldHlwZSBtZXRhX2JnIHNwYXJzZV9zdXBlcgorRGVmYXVsdCBtb3VudCBvcHRpb25zOiAgICAobm9uZSkKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgQ29udGludWUKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgMzI3NjgKK0Jsb2NrIGNvdW50OiAgICAgICAgICAgICAgMTMxMDcyCitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDY1NTMKK0ZyZWUgYmxvY2tzOiAgICAgICAgICAgICAgMTI2NjgzCitGcmVlIGlub2RlczogICAgICAgICAgICAgIDMyNzU3CitGaXJzdCBibG9jazogICAgICAgICAgICAgIDEKK0Jsb2NrIHNpemU6ICAgICAgICAgICAgICAgMTAyNAorRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICAxMDI0CitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDEwMjQKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgMTAyNAorSW5vZGVzIHBlciBncm91cDogICAgICAgICAyNTYKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgMzIKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMS0xMDI0KQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMSwgR3JvdXAgZGVzY3JpcHRvciBhdCAyCisgIEJsb2NrIGJpdG1hcCBhdCAzICgrMiksIElub2RlIGJpdG1hcCBhdCA0ICgrMykKKyAgSW5vZGUgdGFibGUgYXQgNS0zNiAoKzQpCisgIDk3NSBmcmVlIGJsb2NrcywgMjQ1IGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MC0xMDI0CisgIEZyZWUgaW5vZGVzOiAxMi0yNTYKK0dyb3VwIDE6IChCbG9ja3MgMTAyNS0yMDQ4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxMDI1LCBHcm91cCBkZXNjcmlwdG9yIGF0IDEwMjYKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjcgKCsyKSwgSW5vZGUgYml0bWFwIGF0IDEwMjggKCszKQorICBJbm9kZSB0YWJsZSBhdCAxMDI5LTEwNjAgKCs0KQorICA5ODggZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA2MS0yMDQ4CisgIEZyZWUgaW5vZGVzOiAyNTctNTEyCitHcm91cCAyOiAoQmxvY2tzIDIwNDktMzA3MikKKyAgQmxvY2sgYml0bWFwIGF0IDIwNDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIwNTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMDUxLTIwODIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA4My0zMDcyCisgIEZyZWUgaW5vZGVzOiA1MTMtNzY4CitHcm91cCAzOiAoQmxvY2tzIDMwNzMtNDA5NikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMzA3MworICBCbG9jayBiaXRtYXAgYXQgMzA3NCAoKzEpLCBJbm9kZSBiaXRtYXAgYXQgMzA3NSAoKzIpCisgIElub2RlIHRhYmxlIGF0IDMwNzYtMzEwNyAoKzMpCisgIDk4OSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMTA4LTQwOTYKKyAgRnJlZSBpbm9kZXM6IDc2OS0xMDI0CitHcm91cCA0OiAoQmxvY2tzIDQwOTctNTEyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDQwOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQwOTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MDk5LTQxMzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDEzMS01MTIwCisgIEZyZWUgaW5vZGVzOiAxMDI1LTEyODAKK0dyb3VwIDU6IChCbG9ja3MgNTEyMS02MTQ0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA1MTIxCisgIEJsb2NrIGJpdG1hcCBhdCA1MTIyICgrMSksIElub2RlIGJpdG1hcCBhdCA1MTIzICgrMikKKyAgSW5vZGUgdGFibGUgYXQgNTEyNC01MTU1ICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUxNTYtNjE0NAorICBGcmVlIGlub2RlczogMTI4MS0xNTM2CitHcm91cCA2OiAoQmxvY2tzIDYxNDUtNzE2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDYxNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYxNDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MTQ3LTYxNzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjE3OS03MTY4CisgIEZyZWUgaW5vZGVzOiAxNTM3LTE3OTIKK0dyb3VwIDc6IChCbG9ja3MgNzE2OS04MTkyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA3MTY5CisgIEJsb2NrIGJpdG1hcCBhdCA3MTcwICgrMSksIElub2RlIGJpdG1hcCBhdCA3MTcxICgrMikKKyAgSW5vZGUgdGFibGUgYXQgNzE3Mi03MjAzICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcyMDQtODE5MgorICBGcmVlIGlub2RlczogMTc5My0yMDQ4CitHcm91cCA4OiAoQmxvY2tzIDgxOTMtOTIxNikKKyAgQmxvY2sgYml0bWFwIGF0IDgxOTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDgxOTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4MTk1LTgyMjYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODIyNy05MjE2CisgIEZyZWUgaW5vZGVzOiAyMDQ5LTIzMDQKK0dyb3VwIDk6IChCbG9ja3MgOTIxNy0xMDI0MCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgOTIxNworICBCbG9jayBiaXRtYXAgYXQgOTIxOCAoKzEpLCBJbm9kZSBiaXRtYXAgYXQgOTIxOSAoKzIpCisgIElub2RlIHRhYmxlIGF0IDkyMjAtOTI1MSAoKzMpCisgIDk4OSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MjUyLTEwMjQwCisgIEZyZWUgaW5vZGVzOiAyMzA1LTI1NjAKK0dyb3VwIDEwOiAoQmxvY2tzIDEwMjQxLTExMjY0KQorICBCbG9jayBiaXRtYXAgYXQgMTAyNDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMjQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAyNDMtMTAyNzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAyNzUtMTEyNjQKKyAgRnJlZSBpbm9kZXM6IDI1NjEtMjgxNgorR3JvdXAgMTE6IChCbG9ja3MgMTEyNjUtMTIyODgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTI2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTEyNjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTI2Ny0xMTI5OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTI5OS0xMjI4OAorICBGcmVlIGlub2RlczogMjgxNy0zMDcyCitHcm91cCAxMjogKEJsb2NrcyAxMjI4OS0xMzMxMikKKyAgQmxvY2sgYml0bWFwIGF0IDEyMjg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjI5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyMjkxLTEyMzIyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMzIzLTEzMzEyCisgIEZyZWUgaW5vZGVzOiAzMDczLTMzMjgKK0dyb3VwIDEzOiAoQmxvY2tzIDEzMzEzLTE0MzM2KQorICBCbG9jayBiaXRtYXAgYXQgMTMzMTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzMzE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMzMTUtMTMzNDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMzNDctMTQzMzYKKyAgRnJlZSBpbm9kZXM6IDMzMjktMzU4NAorR3JvdXAgMTQ6IChCbG9ja3MgMTQzMzctMTUzNjApCisgIEJsb2NrIGJpdG1hcCBhdCAxNDMzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQzMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDMzOS0xNDM3MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDM3MS0xNTM2MAorICBGcmVlIGlub2RlczogMzU4NS0zODQwCitHcm91cCAxNTogKEJsb2NrcyAxNTM2MS0xNjM4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDE1MzYxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTM2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1MzYzLTE1Mzk0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1Mzk1LTE2Mzg0CisgIEZyZWUgaW5vZGVzOiAzODQxLTQwOTYKK0dyb3VwIDE2OiAoQmxvY2tzIDE2Mzg1LTE3NDA4KQorICBCbG9jayBiaXRtYXAgYXQgMTYzODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2Mzg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTYzODctMTY0MTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTY0MTktMTc0MDgKKyAgRnJlZSBpbm9kZXM6IDQwOTctNDM1MgorR3JvdXAgMTc6IChCbG9ja3MgMTc0MDktMTg0MzIpCisgIEJsb2NrIGJpdG1hcCBhdCAxNzQwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTc0MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNzQxMS0xNzQ0MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNzQ0My0xODQzMgorICBGcmVlIGlub2RlczogNDM1My00NjA4CitHcm91cCAxODogKEJsb2NrcyAxODQzMy0xOTQ1NikKKyAgQmxvY2sgYml0bWFwIGF0IDE4NDMzICgrMCksIElub2RlIGJpdG1hcCBhdCAxODQzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE4NDM1LTE4NDY2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE4NDY3LTE5NDU2CisgIEZyZWUgaW5vZGVzOiA0NjA5LTQ4NjQKK0dyb3VwIDE5OiAoQmxvY2tzIDE5NDU3LTIwNDgwKQorICBCbG9jayBiaXRtYXAgYXQgMTk0NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE5NDU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTk0NTktMTk0OTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTk0OTEtMjA0ODAKKyAgRnJlZSBpbm9kZXM6IDQ4NjUtNTEyMAorR3JvdXAgMjA6IChCbG9ja3MgMjA0ODEtMjE1MDQpCisgIEJsb2NrIGJpdG1hcCBhdCAyMDQ4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjA0ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMDQ4My0yMDUxNCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDUxNS0yMTUwNAorICBGcmVlIGlub2RlczogNTEyMS01Mzc2CitHcm91cCAyMTogKEJsb2NrcyAyMTUwNS0yMjUyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDIxNTA1ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMTUwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIxNTA3LTIxNTM4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIxNTM5LTIyNTI4CisgIEZyZWUgaW5vZGVzOiA1Mzc3LTU2MzIKK0dyb3VwIDIyOiAoQmxvY2tzIDIyNTI5LTIzNTUyKQorICBCbG9jayBiaXRtYXAgYXQgMjI1MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIyNTMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjI1MzEtMjI1NjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjI1NjMtMjM1NTIKKyAgRnJlZSBpbm9kZXM6IDU2MzMtNTg4OAorR3JvdXAgMjM6IChCbG9ja3MgMjM1NTMtMjQ1NzYpCisgIEJsb2NrIGJpdG1hcCBhdCAyMzU1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjM1NTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMzU1NS0yMzU4NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMzU4Ny0yNDU3NgorICBGcmVlIGlub2RlczogNTg4OS02MTQ0CitHcm91cCAyNDogKEJsb2NrcyAyNDU3Ny0yNTYwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDI0NTc3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNDU3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI0NTc5LTI0NjEwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI0NjExLTI1NjAwCisgIEZyZWUgaW5vZGVzOiA2MTQ1LTY0MDAKK0dyb3VwIDI1OiAoQmxvY2tzIDI1NjAxLTI2NjI0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyNTYwMQorICBCbG9jayBiaXRtYXAgYXQgMjU2MDIgKCsxKSwgSW5vZGUgYml0bWFwIGF0IDI1NjAzICgrMikKKyAgSW5vZGUgdGFibGUgYXQgMjU2MDQtMjU2MzUgKCszKQorICA5ODkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjU2MzYtMjY2MjQKKyAgRnJlZSBpbm9kZXM6IDY0MDEtNjY1NgorR3JvdXAgMjY6IChCbG9ja3MgMjY2MjUtMjc2NDgpCisgIEJsb2NrIGJpdG1hcCBhdCAyNjYyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjY2MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNjYyNy0yNjY1OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNjY1OS0yNzY0OAorICBGcmVlIGlub2RlczogNjY1Ny02OTEyCitHcm91cCAyNzogKEJsb2NrcyAyNzY0OS0yODY3MikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjc2NDkKKyAgQmxvY2sgYml0bWFwIGF0IDI3NjUwICgrMSksIElub2RlIGJpdG1hcCBhdCAyNzY1MSAoKzIpCisgIElub2RlIHRhYmxlIGF0IDI3NjUyLTI3NjgzICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI3Njg0LTI4NjcyCisgIEZyZWUgaW5vZGVzOiA2OTEzLTcxNjgKK0dyb3VwIDI4OiAoQmxvY2tzIDI4NjczLTI5Njk2KQorICBCbG9jayBiaXRtYXAgYXQgMjg2NzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI4Njc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjg2NzUtMjg3MDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjg3MDctMjk2OTYKKyAgRnJlZSBpbm9kZXM6IDcxNjktNzQyNAorR3JvdXAgMjk6IChCbG9ja3MgMjk2OTctMzA3MjApCisgIEJsb2NrIGJpdG1hcCBhdCAyOTY5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjk2OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyOTY5OS0yOTczMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyOTczMS0zMDcyMAorICBGcmVlIGlub2RlczogNzQyNS03NjgwCitHcm91cCAzMDogKEJsb2NrcyAzMDcyMS0zMTc0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDMwNzIxICgrMCksIElub2RlIGJpdG1hcCBhdCAzMDcyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMwNzIzLTMwNzU0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMwNzU1LTMxNzQ0CisgIEZyZWUgaW5vZGVzOiA3NjgxLTc5MzYKK0dyb3VwIDMxOiAoQmxvY2tzIDMxNzQ1LTMyNzY4KQorICBHcm91cCBkZXNjcmlwdG9yIGF0IDMxNzQ1CisgIEJsb2NrIGJpdG1hcCBhdCAzMTc0NiAoKzEpLCBJbm9kZSBiaXRtYXAgYXQgMzE3NDcgKCsyKQorICBJbm9kZSB0YWJsZSBhdCAzMTc0OC0zMTc3OSAoKzMpCisgIDk4OSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMTc4MC0zMjc2OAorICBGcmVlIGlub2RlczogNzkzNy04MTkyCitHcm91cCAzMjogKEJsb2NrcyAzMjc2OS0zMzc5MikKKyAgR3JvdXAgZGVzY3JpcHRvciBhdCAzMjc2OQorICBCbG9jayBiaXRtYXAgYXQgMzI3NzAgKCsxKSwgSW5vZGUgYml0bWFwIGF0IDMyNzcxICgrMikKKyAgSW5vZGUgdGFibGUgYXQgMzI3NzItMzI4MDMgKCszKQorICA5ODkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzI4MDQtMzM3OTIKKyAgRnJlZSBpbm9kZXM6IDgxOTMtODQ0OAorR3JvdXAgMzM6IChCbG9ja3MgMzM3OTMtMzQ4MTYpCisgIEdyb3VwIGRlc2NyaXB0b3IgYXQgMzM3OTMKKyAgQmxvY2sgYml0bWFwIGF0IDMzNzk0ICgrMSksIElub2RlIGJpdG1hcCBhdCAzMzc5NSAoKzIpCisgIElub2RlIHRhYmxlIGF0IDMzNzk2LTMzODI3ICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMzODI4LTM0ODE2CisgIEZyZWUgaW5vZGVzOiA4NDQ5LTg3MDQKK0dyb3VwIDM0OiAoQmxvY2tzIDM0ODE3LTM1ODQwKQorICBCbG9jayBiaXRtYXAgYXQgMzQ4MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM0ODE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzQ4MTktMzQ4NTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzQ4NTEtMzU4NDAKKyAgRnJlZSBpbm9kZXM6IDg3MDUtODk2MAorR3JvdXAgMzU6IChCbG9ja3MgMzU4NDEtMzY4NjQpCisgIEJsb2NrIGJpdG1hcCBhdCAzNTg0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzU4NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNTg0My0zNTg3NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNTg3NS0zNjg2NAorICBGcmVlIGlub2RlczogODk2MS05MjE2CitHcm91cCAzNjogKEJsb2NrcyAzNjg2NS0zNzg4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDM2ODY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNjg2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM2ODY3LTM2ODk4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM2ODk5LTM3ODg4CisgIEZyZWUgaW5vZGVzOiA5MjE3LTk0NzIKK0dyb3VwIDM3OiAoQmxvY2tzIDM3ODg5LTM4OTEyKQorICBCbG9jayBiaXRtYXAgYXQgMzc4ODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM3ODkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzc4OTEtMzc5MjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzc5MjMtMzg5MTIKKyAgRnJlZSBpbm9kZXM6IDk0NzMtOTcyOAorR3JvdXAgMzg6IChCbG9ja3MgMzg5MTMtMzk5MzYpCisgIEJsb2NrIGJpdG1hcCBhdCAzODkxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzg5MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzODkxNS0zODk0NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzODk0Ny0zOTkzNgorICBGcmVlIGlub2RlczogOTcyOS05OTg0CitHcm91cCAzOTogKEJsb2NrcyAzOTkzNy00MDk2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDM5OTM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAzOTkzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM5OTM5LTM5OTcwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM5OTcxLTQwOTYwCisgIEZyZWUgaW5vZGVzOiA5OTg1LTEwMjQwCitHcm91cCA0MDogKEJsb2NrcyA0MDk2MS00MTk4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDQwOTYxICgrMCksIElub2RlIGJpdG1hcCBhdCA0MDk2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQwOTYzLTQwOTk0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQwOTk1LTQxOTg0CisgIEZyZWUgaW5vZGVzOiAxMDI0MS0xMDQ5NgorR3JvdXAgNDE6IChCbG9ja3MgNDE5ODUtNDMwMDgpCisgIEJsb2NrIGJpdG1hcCBhdCA0MTk4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDE5ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MTk4Ny00MjAxOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MjAxOS00MzAwOAorICBGcmVlIGlub2RlczogMTA0OTctMTA3NTIKK0dyb3VwIDQyOiAoQmxvY2tzIDQzMDA5LTQ0MDMyKQorICBCbG9jayBiaXRtYXAgYXQgNDMwMDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQzMDEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDMwMTEtNDMwNDIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDMwNDMtNDQwMzIKKyAgRnJlZSBpbm9kZXM6IDEwNzUzLTExMDA4CitHcm91cCA0MzogKEJsb2NrcyA0NDAzMy00NTA1NikKKyAgQmxvY2sgYml0bWFwIGF0IDQ0MDMzICgrMCksIElub2RlIGJpdG1hcCBhdCA0NDAzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ0MDM1LTQ0MDY2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ0MDY3LTQ1MDU2CisgIEZyZWUgaW5vZGVzOiAxMTAwOS0xMTI2NAorR3JvdXAgNDQ6IChCbG9ja3MgNDUwNTctNDYwODApCisgIEJsb2NrIGJpdG1hcCBhdCA0NTA1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDUwNTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0NTA1OS00NTA5MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NTA5MS00NjA4MAorICBGcmVlIGlub2RlczogMTEyNjUtMTE1MjAKK0dyb3VwIDQ1OiAoQmxvY2tzIDQ2MDgxLTQ3MTA0KQorICBCbG9jayBiaXRtYXAgYXQgNDYwODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ2MDgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDYwODMtNDYxMTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDYxMTUtNDcxMDQKKyAgRnJlZSBpbm9kZXM6IDExNTIxLTExNzc2CitHcm91cCA0NjogKEJsb2NrcyA0NzEwNS00ODEyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ3MTA1ICgrMCksIElub2RlIGJpdG1hcCBhdCA0NzEwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ3MTA3LTQ3MTM4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ3MTM5LTQ4MTI4CisgIEZyZWUgaW5vZGVzOiAxMTc3Ny0xMjAzMgorR3JvdXAgNDc6IChCbG9ja3MgNDgxMjktNDkxNTIpCisgIEJsb2NrIGJpdG1hcCBhdCA0ODEyOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDgxMzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0ODEzMS00ODE2MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0ODE2My00OTE1MgorICBGcmVlIGlub2RlczogMTIwMzMtMTIyODgKK0dyb3VwIDQ4OiAoQmxvY2tzIDQ5MTUzLTUwMTc2KQorICBCbG9jayBiaXRtYXAgYXQgNDkxNTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ5MTU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDkxNTUtNDkxODYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDkxODctNTAxNzYKKyAgRnJlZSBpbm9kZXM6IDEyMjg5LTEyNTQ0CitHcm91cCA0OTogKEJsb2NrcyA1MDE3Ny01MTIwMCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNTAxNzcKKyAgQmxvY2sgYml0bWFwIGF0IDUwMTc4ICgrMSksIElub2RlIGJpdG1hcCBhdCA1MDE3OSAoKzIpCisgIElub2RlIHRhYmxlIGF0IDUwMTgwLTUwMjExICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUwMjEyLTUxMjAwCisgIEZyZWUgaW5vZGVzOiAxMjU0NS0xMjgwMAorR3JvdXAgNTA6IChCbG9ja3MgNTEyMDEtNTIyMjQpCisgIEJsb2NrIGJpdG1hcCBhdCA1MTIwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTEyMDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1MTIwMy01MTIzNCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MTIzNS01MjIyNAorICBGcmVlIGlub2RlczogMTI4MDEtMTMwNTYKK0dyb3VwIDUxOiAoQmxvY2tzIDUyMjI1LTUzMjQ4KQorICBCbG9jayBiaXRtYXAgYXQgNTIyMjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDUyMjI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTIyMjctNTIyNTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTIyNTktNTMyNDgKKyAgRnJlZSBpbm9kZXM6IDEzMDU3LTEzMzEyCitHcm91cCA1MjogKEJsb2NrcyA1MzI0OS01NDI3MikKKyAgQmxvY2sgYml0bWFwIGF0IDUzMjQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCA1MzI1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDUzMjUxLTUzMjgyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUzMjgzLTU0MjcyCisgIEZyZWUgaW5vZGVzOiAxMzMxMy0xMzU2OAorR3JvdXAgNTM6IChCbG9ja3MgNTQyNzMtNTUyOTYpCisgIEJsb2NrIGJpdG1hcCBhdCA1NDI3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTQyNzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1NDI3NS01NDMwNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NDMwNy01NTI5NgorICBGcmVlIGlub2RlczogMTM1NjktMTM4MjQKK0dyb3VwIDU0OiAoQmxvY2tzIDU1Mjk3LTU2MzIwKQorICBCbG9jayBiaXRtYXAgYXQgNTUyOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU1Mjk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTUyOTktNTUzMzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTUzMzEtNTYzMjAKKyAgRnJlZSBpbm9kZXM6IDEzODI1LTE0MDgwCitHcm91cCA1NTogKEJsb2NrcyA1NjMyMS01NzM0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDU2MzIxICgrMCksIElub2RlIGJpdG1hcCBhdCA1NjMyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU2MzIzLTU2MzU0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU2MzU1LTU3MzQ0CisgIEZyZWUgaW5vZGVzOiAxNDA4MS0xNDMzNgorR3JvdXAgNTY6IChCbG9ja3MgNTczNDUtNTgzNjgpCisgIEJsb2NrIGJpdG1hcCBhdCA1NzM0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTczNDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1NzM0Ny01NzM3OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NzM3OS01ODM2OAorICBGcmVlIGlub2RlczogMTQzMzctMTQ1OTIKK0dyb3VwIDU3OiAoQmxvY2tzIDU4MzY5LTU5MzkyKQorICBCbG9jayBiaXRtYXAgYXQgNTgzNjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU4MzcwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTgzNzEtNTg0MDIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTg0MDMtNTkzOTIKKyAgRnJlZSBpbm9kZXM6IDE0NTkzLTE0ODQ4CitHcm91cCA1ODogKEJsb2NrcyA1OTM5My02MDQxNikKKyAgQmxvY2sgYml0bWFwIGF0IDU5MzkzICgrMCksIElub2RlIGJpdG1hcCBhdCA1OTM5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU5Mzk1LTU5NDI2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU5NDI3LTYwNDE2CisgIEZyZWUgaW5vZGVzOiAxNDg0OS0xNTEwNAorR3JvdXAgNTk6IChCbG9ja3MgNjA0MTctNjE0NDApCisgIEJsb2NrIGJpdG1hcCBhdCA2MDQxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjA0MTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MDQxOS02MDQ1MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MDQ1MS02MTQ0MAorICBGcmVlIGlub2RlczogMTUxMDUtMTUzNjAKK0dyb3VwIDYwOiAoQmxvY2tzIDYxNDQxLTYyNDY0KQorICBCbG9jayBiaXRtYXAgYXQgNjE0NDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYxNDQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjE0NDMtNjE0NzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjE0NzUtNjI0NjQKKyAgRnJlZSBpbm9kZXM6IDE1MzYxLTE1NjE2CitHcm91cCA2MTogKEJsb2NrcyA2MjQ2NS02MzQ4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDYyNDY1ICgrMCksIElub2RlIGJpdG1hcCBhdCA2MjQ2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDYyNDY3LTYyNDk4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDYyNDk5LTYzNDg4CisgIEZyZWUgaW5vZGVzOiAxNTYxNy0xNTg3MgorR3JvdXAgNjI6IChCbG9ja3MgNjM0ODktNjQ1MTIpCisgIEJsb2NrIGJpdG1hcCBhdCA2MzQ4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjM0OTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MzQ5MS02MzUyMiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MzUyMy02NDUxMgorICBGcmVlIGlub2RlczogMTU4NzMtMTYxMjgKK0dyb3VwIDYzOiAoQmxvY2tzIDY0NTEzLTY1NTM2KQorICBHcm91cCBkZXNjcmlwdG9yIGF0IDY0NTEzCisgIEJsb2NrIGJpdG1hcCBhdCA2NDUxNCAoKzEpLCBJbm9kZSBiaXRtYXAgYXQgNjQ1MTUgKCsyKQorICBJbm9kZSB0YWJsZSBhdCA2NDUxNi02NDU0NyAoKzMpCisgIDk4OSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NDU0OC02NTUzNgorICBGcmVlIGlub2RlczogMTYxMjktMTYzODQKK0dyb3VwIDY0OiAoQmxvY2tzIDY1NTM3LTY2NTYwKQorICBHcm91cCBkZXNjcmlwdG9yIGF0IDY1NTM3CisgIEJsb2NrIGJpdG1hcCBhdCA2NTUzOCAoKzEpLCBJbm9kZSBiaXRtYXAgYXQgNjU1MzkgKCsyKQorICBJbm9kZSB0YWJsZSBhdCA2NTU0MC02NTU3MSAoKzMpCisgIDk4OSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NTU3Mi02NjU2MAorICBGcmVlIGlub2RlczogMTYzODUtMTY2NDAKK0dyb3VwIDY1OiAoQmxvY2tzIDY2NTYxLTY3NTg0KQorICBHcm91cCBkZXNjcmlwdG9yIGF0IDY2NTYxCisgIEJsb2NrIGJpdG1hcCBhdCA2NjU2MiAoKzEpLCBJbm9kZSBiaXRtYXAgYXQgNjY1NjMgKCsyKQorICBJbm9kZSB0YWJsZSBhdCA2NjU2NC02NjU5NSAoKzMpCisgIDk4OSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NjU5Ni02NzU4NAorICBGcmVlIGlub2RlczogMTY2NDEtMTY4OTYKK0dyb3VwIDY2OiAoQmxvY2tzIDY3NTg1LTY4NjA4KQorICBCbG9jayBiaXRtYXAgYXQgNjc1ODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDY3NTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjc1ODctNjc2MTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjc2MTktNjg2MDgKKyAgRnJlZSBpbm9kZXM6IDE2ODk3LTE3MTUyCitHcm91cCA2NzogKEJsb2NrcyA2ODYwOS02OTYzMikKKyAgQmxvY2sgYml0bWFwIGF0IDY4NjA5ICgrMCksIElub2RlIGJpdG1hcCBhdCA2ODYxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY4NjExLTY4NjQyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY4NjQzLTY5NjMyCisgIEZyZWUgaW5vZGVzOiAxNzE1My0xNzQwOAorR3JvdXAgNjg6IChCbG9ja3MgNjk2MzMtNzA2NTYpCisgIEJsb2NrIGJpdG1hcCBhdCA2OTYzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjk2MzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2OTYzNS02OTY2NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2OTY2Ny03MDY1NgorICBGcmVlIGlub2RlczogMTc0MDktMTc2NjQKK0dyb3VwIDY5OiAoQmxvY2tzIDcwNjU3LTcxNjgwKQorICBCbG9jayBiaXRtYXAgYXQgNzA2NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDcwNjU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzA2NTktNzA2OTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzA2OTEtNzE2ODAKKyAgRnJlZSBpbm9kZXM6IDE3NjY1LTE3OTIwCitHcm91cCA3MDogKEJsb2NrcyA3MTY4MS03MjcwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDcxNjgxICgrMCksIElub2RlIGJpdG1hcCBhdCA3MTY4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDcxNjgzLTcxNzE0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcxNzE1LTcyNzA0CisgIEZyZWUgaW5vZGVzOiAxNzkyMS0xODE3NgorR3JvdXAgNzE6IChCbG9ja3MgNzI3MDUtNzM3MjgpCisgIEJsb2NrIGJpdG1hcCBhdCA3MjcwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzI3MDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3MjcwNy03MjczOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MjczOS03MzcyOAorICBGcmVlIGlub2RlczogMTgxNzctMTg0MzIKK0dyb3VwIDcyOiAoQmxvY2tzIDczNzI5LTc0NzUyKQorICBCbG9jayBiaXRtYXAgYXQgNzM3MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDczNzMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzM3MzEtNzM3NjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzM3NjMtNzQ3NTIKKyAgRnJlZSBpbm9kZXM6IDE4NDMzLTE4Njg4CitHcm91cCA3MzogKEJsb2NrcyA3NDc1My03NTc3NikKKyAgQmxvY2sgYml0bWFwIGF0IDc0NzUzICgrMCksIElub2RlIGJpdG1hcCBhdCA3NDc1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc0NzU1LTc0Nzg2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc0Nzg3LTc1Nzc2CisgIEZyZWUgaW5vZGVzOiAxODY4OS0xODk0NAorR3JvdXAgNzQ6IChCbG9ja3MgNzU3NzctNzY4MDApCisgIEJsb2NrIGJpdG1hcCBhdCA3NTc3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzU3NzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NTc3OS03NTgxMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NTgxMS03NjgwMAorICBGcmVlIGlub2RlczogMTg5NDUtMTkyMDAKK0dyb3VwIDc1OiAoQmxvY2tzIDc2ODAxLTc3ODI0KQorICBCbG9jayBiaXRtYXAgYXQgNzY4MDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc2ODAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzY4MDMtNzY4MzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzY4MzUtNzc4MjQKKyAgRnJlZSBpbm9kZXM6IDE5MjAxLTE5NDU2CitHcm91cCA3NjogKEJsb2NrcyA3NzgyNS03ODg0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDc3ODI1ICgrMCksIElub2RlIGJpdG1hcCBhdCA3NzgyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc3ODI3LTc3ODU4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc3ODU5LTc4ODQ4CisgIEZyZWUgaW5vZGVzOiAxOTQ1Ny0xOTcxMgorR3JvdXAgNzc6IChCbG9ja3MgNzg4NDktNzk4NzIpCisgIEJsb2NrIGJpdG1hcCBhdCA3ODg0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzg4NTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3ODg1MS03ODg4MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3ODg4My03OTg3MgorICBGcmVlIGlub2RlczogMTk3MTMtMTk5NjgKK0dyb3VwIDc4OiAoQmxvY2tzIDc5ODczLTgwODk2KQorICBCbG9jayBiaXRtYXAgYXQgNzk4NzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc5ODc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzk4NzUtNzk5MDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzk5MDctODA4OTYKKyAgRnJlZSBpbm9kZXM6IDE5OTY5LTIwMjI0CitHcm91cCA3OTogKEJsb2NrcyA4MDg5Ny04MTkyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDgwODk3ICgrMCksIElub2RlIGJpdG1hcCBhdCA4MDg5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDgwODk5LTgwOTMwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgwOTMxLTgxOTIwCisgIEZyZWUgaW5vZGVzOiAyMDIyNS0yMDQ4MAorR3JvdXAgODA6IChCbG9ja3MgODE5MjEtODI5NDQpCisgIEJsb2NrIGJpdG1hcCBhdCA4MTkyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODE5MjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4MTkyMy04MTk1NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4MTk1NS04Mjk0NAorICBGcmVlIGlub2RlczogMjA0ODEtMjA3MzYKK0dyb3VwIDgxOiAoQmxvY2tzIDgyOTQ1LTgzOTY4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA4Mjk0NQorICBCbG9jayBiaXRtYXAgYXQgODI5NDYgKCsxKSwgSW5vZGUgYml0bWFwIGF0IDgyOTQ3ICgrMikKKyAgSW5vZGUgdGFibGUgYXQgODI5NDgtODI5NzkgKCszKQorICA5ODkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODI5ODAtODM5NjgKKyAgRnJlZSBpbm9kZXM6IDIwNzM3LTIwOTkyCitHcm91cCA4MjogKEJsb2NrcyA4Mzk2OS04NDk5MikKKyAgQmxvY2sgYml0bWFwIGF0IDgzOTY5ICgrMCksIElub2RlIGJpdG1hcCBhdCA4Mzk3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDgzOTcxLTg0MDAyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg0MDAzLTg0OTkyCisgIEZyZWUgaW5vZGVzOiAyMDk5My0yMTI0OAorR3JvdXAgODM6IChCbG9ja3MgODQ5OTMtODYwMTYpCisgIEJsb2NrIGJpdG1hcCBhdCA4NDk5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODQ5OTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4NDk5NS04NTAyNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NTAyNy04NjAxNgorICBGcmVlIGlub2RlczogMjEyNDktMjE1MDQKK0dyb3VwIDg0OiAoQmxvY2tzIDg2MDE3LTg3MDQwKQorICBCbG9jayBiaXRtYXAgYXQgODYwMTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg2MDE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODYwMTktODYwNTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODYwNTEtODcwNDAKKyAgRnJlZSBpbm9kZXM6IDIxNTA1LTIxNzYwCitHcm91cCA4NTogKEJsb2NrcyA4NzA0MS04ODA2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDg3MDQxICgrMCksIElub2RlIGJpdG1hcCBhdCA4NzA0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg3MDQzLTg3MDc0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg3MDc1LTg4MDY0CisgIEZyZWUgaW5vZGVzOiAyMTc2MS0yMjAxNgorR3JvdXAgODY6IChCbG9ja3MgODgwNjUtODkwODgpCisgIEJsb2NrIGJpdG1hcCBhdCA4ODA2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODgwNjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4ODA2Ny04ODA5OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4ODA5OS04OTA4OAorICBGcmVlIGlub2RlczogMjIwMTctMjIyNzIKK0dyb3VwIDg3OiAoQmxvY2tzIDg5MDg5LTkwMTEyKQorICBCbG9jayBiaXRtYXAgYXQgODkwODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg5MDkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODkwOTEtODkxMjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODkxMjMtOTAxMTIKKyAgRnJlZSBpbm9kZXM6IDIyMjczLTIyNTI4CitHcm91cCA4ODogKEJsb2NrcyA5MDExMy05MTEzNikKKyAgQmxvY2sgYml0bWFwIGF0IDkwMTEzICgrMCksIElub2RlIGJpdG1hcCBhdCA5MDExNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDkwMTE1LTkwMTQ2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkwMTQ3LTkxMTM2CisgIEZyZWUgaW5vZGVzOiAyMjUyOS0yMjc4NAorR3JvdXAgODk6IChCbG9ja3MgOTExMzctOTIxNjApCisgIEJsb2NrIGJpdG1hcCBhdCA5MTEzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTExMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5MTEzOS05MTE3MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MTE3MS05MjE2MAorICBGcmVlIGlub2RlczogMjI3ODUtMjMwNDAKK0dyb3VwIDkwOiAoQmxvY2tzIDkyMTYxLTkzMTg0KQorICBCbG9jayBiaXRtYXAgYXQgOTIxNjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDkyMTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTIxNjMtOTIxOTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTIxOTUtOTMxODQKKyAgRnJlZSBpbm9kZXM6IDIzMDQxLTIzMjk2CitHcm91cCA5MTogKEJsb2NrcyA5MzE4NS05NDIwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDkzMTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCA5MzE4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDkzMTg3LTkzMjE4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkzMjE5LTk0MjA4CisgIEZyZWUgaW5vZGVzOiAyMzI5Ny0yMzU1MgorR3JvdXAgOTI6IChCbG9ja3MgOTQyMDktOTUyMzIpCisgIEJsb2NrIGJpdG1hcCBhdCA5NDIwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTQyMTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5NDIxMS05NDI0MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NDI0My05NTIzMgorICBGcmVlIGlub2RlczogMjM1NTMtMjM4MDgKK0dyb3VwIDkzOiAoQmxvY2tzIDk1MjMzLTk2MjU2KQorICBCbG9jayBiaXRtYXAgYXQgOTUyMzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk1MjM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTUyMzUtOTUyNjYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTUyNjctOTYyNTYKKyAgRnJlZSBpbm9kZXM6IDIzODA5LTI0MDY0CitHcm91cCA5NDogKEJsb2NrcyA5NjI1Ny05NzI4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDk2MjU3ICgrMCksIElub2RlIGJpdG1hcCBhdCA5NjI1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDk2MjU5LTk2MjkwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk2MjkxLTk3MjgwCisgIEZyZWUgaW5vZGVzOiAyNDA2NS0yNDMyMAorR3JvdXAgOTU6IChCbG9ja3MgOTcyODEtOTgzMDQpCisgIEdyb3VwIGRlc2NyaXB0b3IgYXQgOTcyODEKKyAgQmxvY2sgYml0bWFwIGF0IDk3MjgyICgrMSksIElub2RlIGJpdG1hcCBhdCA5NzI4MyAoKzIpCisgIElub2RlIHRhYmxlIGF0IDk3Mjg0LTk3MzE1ICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk3MzE2LTk4MzA0CisgIEZyZWUgaW5vZGVzOiAyNDMyMS0yNDU3NgorR3JvdXAgOTY6IChCbG9ja3MgOTgzMDUtOTkzMjgpCisgIEdyb3VwIGRlc2NyaXB0b3IgYXQgOTgzMDUKKyAgQmxvY2sgYml0bWFwIGF0IDk4MzA2ICgrMSksIElub2RlIGJpdG1hcCBhdCA5ODMwNyAoKzIpCisgIElub2RlIHRhYmxlIGF0IDk4MzA4LTk4MzM5ICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk4MzQwLTk5MzI4CisgIEZyZWUgaW5vZGVzOiAyNDU3Ny0yNDgzMgorR3JvdXAgOTc6IChCbG9ja3MgOTkzMjktMTAwMzUyKQorICBHcm91cCBkZXNjcmlwdG9yIGF0IDk5MzI5CisgIEJsb2NrIGJpdG1hcCBhdCA5OTMzMCAoKzEpLCBJbm9kZSBiaXRtYXAgYXQgOTkzMzEgKCsyKQorICBJbm9kZSB0YWJsZSBhdCA5OTMzMi05OTM2MyAoKzMpCisgIDk4OSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5OTM2NC0xMDAzNTIKKyAgRnJlZSBpbm9kZXM6IDI0ODMzLTI1MDg4CitHcm91cCA5ODogKEJsb2NrcyAxMDAzNTMtMTAxMzc2KQorICBCbG9jayBiaXRtYXAgYXQgMTAwMzUzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDAzNTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDAzNTUtMTAwMzg2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMDM4Ny0xMDEzNzYKKyAgRnJlZSBpbm9kZXM6IDI1MDg5LTI1MzQ0CitHcm91cCA5OTogKEJsb2NrcyAxMDEzNzctMTAyNDAwKQorICBCbG9jayBiaXRtYXAgYXQgMTAxMzc3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDEzNzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDEzNzktMTAxNDEwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMTQxMS0xMDI0MDAKKyAgRnJlZSBpbm9kZXM6IDI1MzQ1LTI1NjAwCitHcm91cCAxMDA6IChCbG9ja3MgMTAyNDAxLTEwMzQyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjQwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTAyNDAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAyNDAzLTEwMjQzNCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDI0MzUtMTAzNDI0CisgIEZyZWUgaW5vZGVzOiAyNTYwMS0yNTg1NgorR3JvdXAgMTAxOiAoQmxvY2tzIDEwMzQyNS0xMDQ0NDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDM0MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMzQyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMzQyNy0xMDM0NTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAzNDU5LTEwNDQ0OAorICBGcmVlIGlub2RlczogMjU4NTctMjYxMTIKK0dyb3VwIDEwMjogKEJsb2NrcyAxMDQ0NDktMTA1NDcyKQorICBCbG9jayBiaXRtYXAgYXQgMTA0NDQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDQ0NTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDQ0NTEtMTA0NDgyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwNDQ4My0xMDU0NzIKKyAgRnJlZSBpbm9kZXM6IDI2MTEzLTI2MzY4CitHcm91cCAxMDM6IChCbG9ja3MgMTA1NDczLTEwNjQ5NikKKyAgQmxvY2sgYml0bWFwIGF0IDEwNTQ3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA1NDc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA1NDc1LTEwNTUwNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDU1MDctMTA2NDk2CisgIEZyZWUgaW5vZGVzOiAyNjM2OS0yNjYyNAorR3JvdXAgMTA0OiAoQmxvY2tzIDEwNjQ5Ny0xMDc1MjApCisgIEJsb2NrIGJpdG1hcCBhdCAxMDY0OTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwNjQ5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwNjQ5OS0xMDY1MzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA2NTMxLTEwNzUyMAorICBGcmVlIGlub2RlczogMjY2MjUtMjY4ODAKK0dyb3VwIDEwNTogKEJsb2NrcyAxMDc1MjEtMTA4NTQ0KQorICBCbG9jayBiaXRtYXAgYXQgMTA3NTIxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDc1MjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDc1MjMtMTA3NTU0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwNzU1NS0xMDg1NDQKKyAgRnJlZSBpbm9kZXM6IDI2ODgxLTI3MTM2CitHcm91cCAxMDY6IChCbG9ja3MgMTA4NTQ1LTEwOTU2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwODU0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA4NTQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA4NTQ3LTEwODU3OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDg1NzktMTA5NTY4CisgIEZyZWUgaW5vZGVzOiAyNzEzNy0yNzM5MgorR3JvdXAgMTA3OiAoQmxvY2tzIDEwOTU2OS0xMTA1OTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDk1NjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwOTU3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwOTU3MS0xMDk2MDIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA5NjAzLTExMDU5MgorICBGcmVlIGlub2RlczogMjczOTMtMjc2NDgKK0dyb3VwIDEwODogKEJsb2NrcyAxMTA1OTMtMTExNjE2KQorICBCbG9jayBiaXRtYXAgYXQgMTEwNTkzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTA1OTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTA1OTUtMTEwNjI2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExMDYyNy0xMTE2MTYKKyAgRnJlZSBpbm9kZXM6IDI3NjQ5LTI3OTA0CitHcm91cCAxMDk6IChCbG9ja3MgMTExNjE3LTExMjY0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDExMTYxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTExNjE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTExNjE5LTExMTY1MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTE2NTEtMTEyNjQwCisgIEZyZWUgaW5vZGVzOiAyNzkwNS0yODE2MAorR3JvdXAgMTEwOiAoQmxvY2tzIDExMjY0MS0xMTM2NjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTI2NDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExMjY0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExMjY0My0xMTI2NzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEyNjc1LTExMzY2NAorICBGcmVlIGlub2RlczogMjgxNjEtMjg0MTYKK0dyb3VwIDExMTogKEJsb2NrcyAxMTM2NjUtMTE0Njg4KQorICBCbG9jayBiaXRtYXAgYXQgMTEzNjY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTM2NjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTM2NjctMTEzNjk4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExMzY5OS0xMTQ2ODgKKyAgRnJlZSBpbm9kZXM6IDI4NDE3LTI4NjcyCitHcm91cCAxMTI6IChCbG9ja3MgMTE0Njg5LTExNTcxMikKKyAgQmxvY2sgYml0bWFwIGF0IDExNDY4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE0NjkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE0NjkxLTExNDcyMiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTQ3MjMtMTE1NzEyCisgIEZyZWUgaW5vZGVzOiAyODY3My0yODkyOAorR3JvdXAgMTEzOiAoQmxvY2tzIDExNTcxMy0xMTY3MzYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTU3MTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExNTcxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExNTcxNS0xMTU3NDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE1NzQ3LTExNjczNgorICBGcmVlIGlub2RlczogMjg5MjktMjkxODQKK0dyb3VwIDExNDogKEJsb2NrcyAxMTY3MzctMTE3NzYwKQorICBCbG9jayBiaXRtYXAgYXQgMTE2NzM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTY3MzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTY3MzktMTE2NzcwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExNjc3MS0xMTc3NjAKKyAgRnJlZSBpbm9kZXM6IDI5MTg1LTI5NDQwCitHcm91cCAxMTU6IChCbG9ja3MgMTE3NzYxLTExODc4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDExNzc2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE3NzYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE3NzYzLTExNzc5NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTc3OTUtMTE4Nzg0CisgIEZyZWUgaW5vZGVzOiAyOTQ0MS0yOTY5NgorR3JvdXAgMTE2OiAoQmxvY2tzIDExODc4NS0xMTk4MDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTg3ODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExODc4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExODc4Ny0xMTg4MTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE4ODE5LTExOTgwOAorICBGcmVlIGlub2RlczogMjk2OTctMjk5NTIKK0dyb3VwIDExNzogKEJsb2NrcyAxMTk4MDktMTIwODMyKQorICBCbG9jayBiaXRtYXAgYXQgMTE5ODA5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTk4MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTk4MTEtMTE5ODQyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExOTg0My0xMjA4MzIKKyAgRnJlZSBpbm9kZXM6IDI5OTUzLTMwMjA4CitHcm91cCAxMTg6IChCbG9ja3MgMTIwODMzLTEyMTg1NikKKyAgQmxvY2sgYml0bWFwIGF0IDEyMDgzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIwODM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIwODM1LTEyMDg2NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjA4NjctMTIxODU2CisgIEZyZWUgaW5vZGVzOiAzMDIwOS0zMDQ2NAorR3JvdXAgMTE5OiAoQmxvY2tzIDEyMTg1Ny0xMjI4ODApCisgIEJsb2NrIGJpdG1hcCBhdCAxMjE4NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyMTg1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyMTg1OS0xMjE4OTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIxODkxLTEyMjg4MAorICBGcmVlIGlub2RlczogMzA0NjUtMzA3MjAKK0dyb3VwIDEyMDogKEJsb2NrcyAxMjI4ODEtMTIzOTA0KQorICBCbG9jayBiaXRtYXAgYXQgMTIyODgxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjI4ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjI4ODMtMTIyOTE0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMjkxNS0xMjM5MDQKKyAgRnJlZSBpbm9kZXM6IDMwNzIxLTMwOTc2CitHcm91cCAxMjE6IChCbG9ja3MgMTIzOTA1LTEyNDkyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDEyMzkwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIzOTA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIzOTA3LTEyMzkzOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjM5MzktMTI0OTI4CisgIEZyZWUgaW5vZGVzOiAzMDk3Ny0zMTIzMgorR3JvdXAgMTIyOiAoQmxvY2tzIDEyNDkyOS0xMjU5NTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjQ5MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyNDkzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyNDkzMS0xMjQ5NjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI0OTYzLTEyNTk1MgorICBGcmVlIGlub2RlczogMzEyMzMtMzE0ODgKK0dyb3VwIDEyMzogKEJsb2NrcyAxMjU5NTMtMTI2OTc2KQorICBCbG9jayBiaXRtYXAgYXQgMTI1OTUzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjU5NTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjU5NTUtMTI1OTg2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyNTk4Ny0xMjY5NzYKKyAgRnJlZSBpbm9kZXM6IDMxNDg5LTMxNzQ0CitHcm91cCAxMjQ6IChCbG9ja3MgMTI2OTc3LTEyODAwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDEyNjk3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTI2OTc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTI2OTc5LTEyNzAxMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjcwMTEtMTI4MDAwCisgIEZyZWUgaW5vZGVzOiAzMTc0NS0zMjAwMAorR3JvdXAgMTI1OiAoQmxvY2tzIDEyODAwMS0xMjkwMjQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDEyODAwMQorICBCbG9jayBiaXRtYXAgYXQgMTI4MDAyICgrMSksIElub2RlIGJpdG1hcCBhdCAxMjgwMDMgKCsyKQorICBJbm9kZSB0YWJsZSBhdCAxMjgwMDQtMTI4MDM1ICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyODAzNi0xMjkwMjQKKyAgRnJlZSBpbm9kZXM6IDMyMDAxLTMyMjU2CitHcm91cCAxMjY6IChCbG9ja3MgMTI5MDI1LTEzMDA0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDEyOTAyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTI5MDI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTI5MDI3LTEyOTA1OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjkwNTktMTMwMDQ4CisgIEZyZWUgaW5vZGVzOiAzMjI1Ny0zMjUxMgorR3JvdXAgMTI3OiAoQmxvY2tzIDEzMDA0OS0xMzEwNzEpCisgIEdyb3VwIGRlc2NyaXB0b3IgYXQgMTMwMDQ5CisgIEJsb2NrIGJpdG1hcCBhdCAxMzAwNTAgKCsxKSwgSW5vZGUgYml0bWFwIGF0IDEzMDA1MSAoKzIpCisgIElub2RlIHRhYmxlIGF0IDEzMDA1Mi0xMzAwODMgKCszKQorICA5ODggZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMwMDg0LTEzMTA3MQorICBGcmVlIGlub2RlczogMzI1MTMtMzI3NjgKZGlmZiAtLWdpdCBhL3Rlc3RzL21fbWV0YV9iZy9zY3JpcHQgYi90ZXN0cy9tX21ldGFfYmcvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYTJiZWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tX21ldGFfYmcvc2NyaXB0CkBAIC0wLDAgKzEsNCBAQAorREVTQ1JJUFRJT049Im1ldGEgYmxvY2tncm91cCBmZWF0dXJlIgorRlNfU0laRT0xMzEwNzIKK01LRTJGU19PUFRTPSItTyBtZXRhX2JnLHNwYXJzZV9zdXBlcixecmVzaXplX2lub2RlIC1nIDEwMjQiCisuICRjbWRfZGlyL3J1bl9ta2UyZnMKZGlmZiAtLWdpdCBhL3Rlc3RzL21fbWtmc19vdmVyaGVhZC9leHBlY3QgYi90ZXN0cy9tX21rZnNfb3ZlcmhlYWQvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjhmZDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tX21rZnNfb3ZlcmhlYWQvZXhwZWN0CkBAIC0wLDAgKzEgQEAKK3Rlc3QuaW1nOiBDYW5ub3QgY3JlYXRlIGZpbGVzeXN0ZW0gd2l0aCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGlub2RlcyB3aGlsZSBzZXR0aW5nIHVwIHN1cGVyYmxvY2sKZGlmZiAtLWdpdCBhL3Rlc3RzL21fbWtmc19vdmVyaGVhZC9zY3JpcHQgYi90ZXN0cy9tX21rZnNfb3ZlcmhlYWQvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMWRhMGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tX21rZnNfb3ZlcmhlYWQvc2NyaXB0CkBAIC0wLDAgKzEsMzEgQEAKK3Rlc3RfZGVzY3JpcHRpb249InRlc3QgYmcgb3ZlcmhlYWQgY2FsY3VsYXRpb24iCisKK09VVD0kdGVzdF9uYW1lLmxvZworRVhQPSR0ZXN0X2Rpci9leHBlY3QKK0ZTX1NJWkU9MTAyNAorTUtFMkZTX09QVFM9Ii1iIDEwMjQgLW0gMCAtZyAyNTYgLU4gMzc0NSIKKworTUtFMkZTX1NLSVBfUFJPR1JFU1M9dHJ1ZQorTUtFMkZTX1NLSVBfQ0hFQ0tfTVNHPXRydWUKK2V4cG9ydCBNS0UyRlNfU0tJUF9QUk9HUkVTUyBNS0UyRlNfU0tJUF9DSEVDS19NU0cKKz4gJFRNUEZJTEUKKworY3AgL2Rldi9udWxsICRPVVQKKworJE1LRTJGUyAtRiAtbyBMaW51eCAkTUtFMkZTX09QVFMgJFRNUEZJTEUgJEZTX1NJWkUgMj4mMSB8CisJc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiA+ICRPVVQKKworcm0gLWYgJFRNUEZJTEUKKworY21wIC1zICRPVVQgJEVYUAorc3RhdHVzMT0kPworCitpZiBbICIkc3RhdHVzMSIgPSAwIF0gOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2Vsc2UKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCWRpZmYgJERJRkZfT1BUUyAkRVhQICRPVVQgPiAkdGVzdF9uYW1lLmZhaWxlZAorZmkKKwordW5zZXQgT1VUIEVYUCBERVNDUklQVElPTiBGU19TSVpFIE1LRTJGU19PUFRTIE1LRTJGU19TS0lQX1BST0dSRVNTCmRpZmYgLS1naXQgYS90ZXN0cy9tX21tcC9leHBlY3QuMSBiL3Rlc3RzL21fbW1wL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYzBhODQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tX21tcC9leHBlY3QuMQpAQCAtMCwwICsxLDY2IEBACitDcmVhdGluZyBmaWxlc3lzdGVtIHdpdGggNjU1MzYgNGsgYmxvY2tzIGFuZCA2NTUzNiBpbm9kZXMKK1N1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAKKwkzMjc2OAorCitBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogICAgCAgIZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dyaXRpbmcgaW5vZGUgdGFibGVzOiAgICAICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBpcyBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsIDUgc2Vjb25kcy4KK1dyaXRpbmcgc3VwZXJibG9ja3MgYW5kIGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogICAgCAgIZG9uZQorCitGaWxlc3lzdGVtIGZlYXR1cmVzOiBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIG1tcCBzcGFyc2Vfc3VwZXIgbGFyZ2VfZmlsZQorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvNjU1MzYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMDkzLzY1NTM2IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMAorRmlsZXN5c3RlbSB2b2x1bWUgbmFtZTogICA8bm9uZT4KK0xhc3QgbW91bnRlZCBvbjogICAgICAgICAgPG5vdCBhdmFpbGFibGU+CitGaWxlc3lzdGVtIG1hZ2ljIG51bWJlcjogIDB4RUY1MworRmlsZXN5c3RlbSByZXZpc2lvbiAjOiAgICAxIChkeW5hbWljKQorRmlsZXN5c3RlbSBmZWF0dXJlczogICAgICBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIG1tcCBzcGFyc2Vfc3VwZXIgbGFyZ2VfZmlsZQorRGVmYXVsdCBtb3VudCBvcHRpb25zOiAgICAobm9uZSkKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgQ29udGludWUKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgNjU1MzYKK0Jsb2NrIGNvdW50OiAgICAgICAgICAgICAgNjU1MzYKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgMzI3NgorRnJlZSBibG9ja3M6ICAgICAgICAgICAgICA2MzQ0MworRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICA2NTUyNQorRmlyc3QgYmxvY2s6ICAgICAgICAgICAgICAwCitCbG9jayBzaXplOiAgICAgICAgICAgICAgIDQwOTYKK0ZyYWdtZW50IHNpemU6ICAgICAgICAgICAgNDA5NgorUmVzZXJ2ZWQgR0RUIGJsb2NrczogICAgICAxNQorQmxvY2tzIHBlciBncm91cDogICAgICAgICAzMjc2OAorRnJhZ21lbnRzIHBlciBncm91cDogICAgICAzMjc2OAorSW5vZGVzIHBlciBncm91cDogICAgICAgICAzMjc2OAorSW5vZGUgYmxvY2tzIHBlciBncm91cDogICAxMDI0CitNb3VudCBjb3VudDogICAgICAgICAgICAgIDAKK0NoZWNrIGludGVydmFsOiAgICAgICAgICAgMTU1NTIwMDAgKDYgbW9udGhzKQorUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAwCitSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgIDAKK0ZpcnN0IGlub2RlOiAgICAgICAgICAgICAgMTEKK0lub2RlIHNpemU6CSAgICAgICAgICAxMjgKK0RlZmF1bHQgZGlyZWN0b3J5IGhhc2g6ICAgaGFsZl9tZDQKK01NUCBibG9jayBudW1iZXI6ICAgICAgICAgMTA0OQorTU1QIHVwZGF0ZSBpbnRlcnZhbDogICAgICA1CisKKworR3JvdXAgMDogKEJsb2NrcyAwLTMyNzY3KQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMCwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMS0xCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMi0xNgorICBCbG9jayBiaXRtYXAgYXQgMTcgKCsxNyksIElub2RlIGJpdG1hcCBhdCAxOCAoKzE4KQorICBJbm9kZSB0YWJsZSBhdCAxOS0xMDQyICgrMTkpCisgIDMxNzE4IGZyZWUgYmxvY2tzLCAzMjc1NyBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA1MC0zMjc2NworICBGcmVlIGlub2RlczogMTItMzI3NjgKK0dyb3VwIDE6IChCbG9ja3MgMzI3NjgtNjU1MzUpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDMyNzY4LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAzMjc2OS0zMjc2OQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDMyNzcwLTMyNzg0CisgIEJsb2NrIGJpdG1hcCBhdCAzMjc4NSAoKzE3KSwgSW5vZGUgYml0bWFwIGF0IDMyNzg2ICgrMTgpCisgIElub2RlIHRhYmxlIGF0IDMyNzg3LTMzODEwICgrMTkpCisgIDMxNzI1IGZyZWUgYmxvY2tzLCAzMjc2OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzM4MTEtNjU1MzUKKyAgRnJlZSBpbm9kZXM6IDMyNzY5LTY1NTM2CmRpZmYgLS1naXQgYS90ZXN0cy9tX21tcC9zY3JpcHQgYi90ZXN0cy9tX21tcC9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5Mzk0ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21fbW1wL3NjcmlwdApAQCAtMCwwICsxLDE4IEBACitERVNDUklQVElPTj0iZW5hYmxlIE1NUCBkdXJpbmcgbWtlMmZzIgorRlNfU0laRT02NTUzNgorTUtFMkZTX0RFVklDRV9TRUNUU0laRT0yMDQ4CitleHBvcnQgTUtFMkZTX0RFVklDRV9TRUNUU0laRQorCisjIHVzZSBjdXJyZW50IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIC90bXAgYmVjYXNlIHRtcGZzIGRvZXNuJ3Qgc3VwcG9ydCBESU8KK3JtIC1mICRUTVBGSUxFCitUTVBGSUxFPSQobWt0ZW1wIC4vdG1wLSR0ZXN0X25hbWUuWFhYWFhYKQorCitzdGF0IC1mICRUTVBGSUxFIHwgZ3JlcCAtcSAiVHlwZTogdG1wZnMiCitpZiBbICQ/ID0gMCBdOyB0aGVuCisJcm0gLWYgJFRNUEZJTEUKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCBmb3IgdG1wZnMgKG5vIE9fRElSRUNUKSIKKwlyZXR1cm4gMAorZmkKK01LRTJGU19PUFRTPSItYiA0MDk2IC1PIG1tcCIKKy4gJGNtZF9kaXIvcnVuX21rZTJmcwordW5zZXQgTUtFMkZTX0RFVklDRV9TRUNUU0laRQpkaWZmIC0tZ2l0IGEvdGVzdHMvbV9ub19vcHQvZXhwZWN0LjEgYi90ZXN0cy9tX25vX29wdC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGIzMTFjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbV9ub19vcHQvZXhwZWN0LjEKQEAgLTAsMCArMSwxMDIgQEAKK0NyZWF0aW5nIGZpbGVzeXN0ZW0gd2l0aCA2NTUzNiAxayBibG9ja3MgYW5kIDE2Mzg0IGlub2RlcworU3VwZXJibG9jayBiYWNrdXBzIHN0b3JlZCBvbiBibG9ja3M6IAorCTgxOTMsIDE2Mzg1LCAyNDU3NywgMzI3NjksIDQwOTYxLCA0OTE1MywgNTczNDUKKworQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICAgIAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitXcml0aW5nIGlub2RlIHRhYmxlczogICAgCAgIZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dyaXRpbmcgc3VwZXJibG9ja3MgYW5kIGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogICAgCAgIZG9uZQorCitGaWxlc3lzdGVtIGZlYXR1cmVzOihub25lKQorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMTYzODQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMDk0LzY1NTM2IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMAorRmlsZXN5c3RlbSB2b2x1bWUgbmFtZTogICA8bm9uZT4KK0xhc3QgbW91bnRlZCBvbjogICAgICAgICAgPG5vdCBhdmFpbGFibGU+CitGaWxlc3lzdGVtIG1hZ2ljIG51bWJlcjogIDB4RUY1MworRmlsZXN5c3RlbSByZXZpc2lvbiAjOiAgICAxIChkeW5hbWljKQorRmlsZXN5c3RlbSBmZWF0dXJlczogICAgICAobm9uZSkKK0RlZmF1bHQgbW91bnQgb3B0aW9uczogICAgKG5vbmUpCitGaWxlc3lzdGVtIHN0YXRlOiAgICAgICAgIGNsZWFuCitFcnJvcnMgYmVoYXZpb3I6ICAgICAgICAgIENvbnRpbnVlCitGaWxlc3lzdGVtIE9TIHR5cGU6ICAgICAgIExpbnV4CitJbm9kZSBjb3VudDogICAgICAgICAgICAgIDE2Mzg0CitCbG9jayBjb3VudDogICAgICAgICAgICAgIDY1NTM2CitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDMyNzYKK0ZyZWUgYmxvY2tzOiAgICAgICAgICAgICAgNjM0NDIKK0ZyZWUgaW5vZGVzOiAgICAgICAgICAgICAgMTYzNzMKK0ZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgMQorQmxvY2sgc2l6ZTogICAgICAgICAgICAgICAxMDI0CitGcmFnbWVudCBzaXplOiAgICAgICAgICAgIDEwMjQKK0Jsb2NrcyBwZXIgZ3JvdXA6ICAgICAgICAgODE5MgorRnJhZ21lbnRzIHBlciBncm91cDogICAgICA4MTkyCitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDIwNDgKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgMjU2CitNb3VudCBjb3VudDogICAgICAgICAgICAgIDAKK0NoZWNrIGludGVydmFsOiAgICAgICAgICAgMTU1NTIwMDAgKDYgbW9udGhzKQorUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAwCitSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgIDAKK0ZpcnN0IGlub2RlOiAgICAgICAgICAgICAgMTEKK0lub2RlIHNpemU6CSAgICAgICAgICAxMjgKK0RlZmF1bHQgZGlyZWN0b3J5IGhhc2g6ICAgaGFsZl9tZDQKKworCitHcm91cCAwOiAoQmxvY2tzIDEtODE5MikKKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDItMgorICBCbG9jayBiaXRtYXAgYXQgMyAoKzIpLCBJbm9kZSBiaXRtYXAgYXQgNCAoKzMpCisgIElub2RlIHRhYmxlIGF0IDUtMjYwICgrNCkKKyAgNzkxOSBmcmVlIGJsb2NrcywgMjAzNyBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjc0LTgxOTIKKyAgRnJlZSBpbm9kZXM6IDEyLTIwNDgKK0dyb3VwIDE6IChCbG9ja3MgODE5My0xNjM4NCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgODE5MywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgODE5NC04MTk0CisgIEJsb2NrIGJpdG1hcCBhdCA4MTk1ICgrMiksIElub2RlIGJpdG1hcCBhdCA4MTk2ICgrMykKKyAgSW5vZGUgdGFibGUgYXQgODE5Ny04NDUyICgrNCkKKyAgNzkzMiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODQ1My0xNjM4NAorICBGcmVlIGlub2RlczogMjA0OS00MDk2CitHcm91cCAyOiAoQmxvY2tzIDE2Mzg1LTI0NTc2KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxNjM4NSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTYzODYtMTYzODYKKyAgQmxvY2sgYml0bWFwIGF0IDE2Mzg3ICgrMiksIElub2RlIGJpdG1hcCBhdCAxNjM4OCAoKzMpCisgIElub2RlIHRhYmxlIGF0IDE2Mzg5LTE2NjQ0ICgrNCkKKyAgNzkzMiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTY2NDUtMjQ1NzYKKyAgRnJlZSBpbm9kZXM6IDQwOTctNjE0NAorR3JvdXAgMzogKEJsb2NrcyAyNDU3Ny0zMjc2OCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjQ1NzcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI0NTc4LTI0NTc4CisgIEJsb2NrIGJpdG1hcCBhdCAyNDU3OSAoKzIpLCBJbm9kZSBiaXRtYXAgYXQgMjQ1ODAgKCszKQorICBJbm9kZSB0YWJsZSBhdCAyNDU4MS0yNDgzNiAoKzQpCisgIDc5MzIgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI0ODM3LTMyNzY4CisgIEZyZWUgaW5vZGVzOiA2MTQ1LTgxOTIKK0dyb3VwIDQ6IChCbG9ja3MgMzI3NjktNDA5NjApCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDMyNzY5LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAzMjc3MC0zMjc3MAorICBCbG9jayBiaXRtYXAgYXQgMzI3NzEgKCsyKSwgSW5vZGUgYml0bWFwIGF0IDMyNzcyICgrMykKKyAgSW5vZGUgdGFibGUgYXQgMzI3NzMtMzMwMjggKCs0KQorICA3OTMyIGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMzAyOS00MDk2MAorICBGcmVlIGlub2RlczogODE5My0xMDI0MAorR3JvdXAgNTogKEJsb2NrcyA0MDk2MS00OTE1MikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNDA5NjEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDQwOTYyLTQwOTYyCisgIEJsb2NrIGJpdG1hcCBhdCA0MDk2MyAoKzIpLCBJbm9kZSBiaXRtYXAgYXQgNDA5NjQgKCszKQorICBJbm9kZSB0YWJsZSBhdCA0MDk2NS00MTIyMCAoKzQpCisgIDc5MzIgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQxMjIxLTQ5MTUyCisgIEZyZWUgaW5vZGVzOiAxMDI0MS0xMjI4OAorR3JvdXAgNjogKEJsb2NrcyA0OTE1My01NzM0NCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNDkxNTMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDQ5MTU0LTQ5MTU0CisgIEJsb2NrIGJpdG1hcCBhdCA0OTE1NSAoKzIpLCBJbm9kZSBiaXRtYXAgYXQgNDkxNTYgKCszKQorICBJbm9kZSB0YWJsZSBhdCA0OTE1Ny00OTQxMiAoKzQpCisgIDc5MzIgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ5NDEzLTU3MzQ0CisgIEZyZWUgaW5vZGVzOiAxMjI4OS0xNDMzNgorR3JvdXAgNzogKEJsb2NrcyA1NzM0NS02NTUzNSkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNTczNDUsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDU3MzQ2LTU3MzQ2CisgIEJsb2NrIGJpdG1hcCBhdCA1NzM0NyAoKzIpLCBJbm9kZSBiaXRtYXAgYXQgNTczNDggKCszKQorICBJbm9kZSB0YWJsZSBhdCA1NzM0OS01NzYwNCAoKzQpCisgIDc5MzEgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU3NjA1LTY1NTM1CisgIEZyZWUgaW5vZGVzOiAxNDMzNy0xNjM4NApkaWZmIC0tZ2l0IGEvdGVzdHMvbV9ub19vcHQvc2NyaXB0IGIvdGVzdHMvbV9ub19vcHQvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMWQwZWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tX25vX29wdC9zY3JpcHQKQEAgLTAsMCArMSw0IEBACitERVNDUklQVElPTj0ibm8gZmlsZXN5c3RlbSBleHRlbnNpb25zIgorRlNfU0laRT02NTUzNgorTUtFMkZTX09QVFM9Ii1PIF5zcGFyc2Vfc3VwZXIsXmZpbGV0eXBlLF5yZXNpemVfaW5vZGUsXmRpcl9pbmRleCxeZXh0X2F0dHIiCisuICRjbWRfZGlyL3J1bl9ta2UyZnMKZGlmZiAtLWdpdCBhL3Rlc3RzL21fcXVvdGEvZXhwZWN0LjEgYi90ZXN0cy9tX3F1b3RhL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Nzg3MWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tX3F1b3RhL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTU3IEBACitDcmVhdGluZyBmaWxlc3lzdGVtIHdpdGggMTMxMDcyIDFrIGJsb2NrcyBhbmQgMzI3NjggaW5vZGVzCitTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogCisJODE5MywgMjQ1NzcsIDQwOTYxLCA1NzM0NSwgNzM3MjkKKworQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICAgICAgCAgICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBpbm9kZSB0YWJsZXM6ICAgICAgCAgICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAgIAgICAgIZG9uZQorCitGaWxlc3lzdGVtIGZlYXR1cmVzOiBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIHNwYXJzZV9zdXBlciBxdW90YQorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMzI3NjggZmlsZXMgKDE4LjIlIG5vbi1jb250aWd1b3VzKSwgNTcwMy8xMzEwNzIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyIHF1b3RhCitEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIChub25lKQorRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICBjbGVhbgorRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICBDb250aW51ZQorRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICBMaW51eAorSW5vZGUgY291bnQ6ICAgICAgICAgICAgICAzMjc2OAorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICAxMzEwNzIKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgNjU1MworRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAxMjUzNjkKK0ZyZWUgaW5vZGVzOiAgICAgICAgICAgICAgMzI3NTcKK0ZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgMQorQmxvY2sgc2l6ZTogICAgICAgICAgICAgICAxMDI0CitGcmFnbWVudCBzaXplOiAgICAgICAgICAgIDEwMjQKK1Jlc2VydmVkIEdEVCBibG9ja3M6ICAgICAgMjU2CitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDgxOTIKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgODE5MgorSW5vZGVzIHBlciBncm91cDogICAgICAgICAyMDQ4CitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDI1NgorTW91bnQgY291bnQ6ICAgICAgICAgICAgICAwCitDaGVjayBpbnRlcnZhbDogICAgICAgICAgIDE1NTUyMDAwICg2IG1vbnRocykKK1Jlc2VydmVkIGJsb2NrcyB1aWQ6ICAgICAgMAorUmVzZXJ2ZWQgYmxvY2tzIGdpZDogICAgICAwCitGaXJzdCBpbm9kZTogICAgICAgICAgICAgIDExCitJbm9kZSBzaXplOgkgICAgICAgICAgMTI4CitEZWZhdWx0IGRpcmVjdG9yeSBoYXNoOiAgIGhhbGZfbWQ0CitVc2VyIHF1b3RhIGlub2RlOiAgICAgICAgIDMKK0dyb3VwIHF1b3RhIGlub2RlOiAgICAgICAgNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMS04MTkyKQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMi0yCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMy0yNTgKKyAgQmxvY2sgYml0bWFwIGF0IDI1OSAoKzI1OCksIElub2RlIGJpdG1hcCBhdCAyNjAgKCsyNTkpCisgIElub2RlIHRhYmxlIGF0IDI2MS01MTYgKCsyNjApCisgIDc2NTAgZnJlZSBibG9ja3MsIDIwMzcgZnJlZSBpbm9kZXMsIDIgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU0My04MTkyCisgIEZyZWUgaW5vZGVzOiAxMi0yMDQ4CitHcm91cCAxOiAoQmxvY2tzIDgxOTMtMTYzODQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDgxOTMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDgxOTQtODE5NAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDgxOTUtODQ1MAorICBCbG9jayBiaXRtYXAgYXQgODQ1MSAoKzI1OCksIElub2RlIGJpdG1hcCBhdCA4NDUyICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCA4NDUzLTg3MDggKCsyNjApCisgIDc2NzYgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg3MDktMTYzODQKKyAgRnJlZSBpbm9kZXM6IDIwNDktNDA5NgorR3JvdXAgMjogKEJsb2NrcyAxNjM4NS0yNDU3NikKKyAgQmxvY2sgYml0bWFwIGF0IDE2Mzg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNjM4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE2Mzg3LTE2NjQyICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTY2NDMtMjQ1NzYKKyAgRnJlZSBpbm9kZXM6IDQwOTctNjE0NAorR3JvdXAgMzogKEJsb2NrcyAyNDU3Ny0zMjc2OCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjQ1NzcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI0NTc4LTI0NTc4CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjQ1NzktMjQ4MzQKKyAgQmxvY2sgYml0bWFwIGF0IDI0ODM1ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDI0ODM2ICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCAyNDgzNy0yNTA5MiAoKzI2MCkKKyAgNzY3NiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjUwOTMtMzI3NjgKKyAgRnJlZSBpbm9kZXM6IDYxNDUtODE5MgorR3JvdXAgNDogKEJsb2NrcyAzMjc2OS00MDk2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDMyNzY5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMjc3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMyNzcxLTMzMDI2ICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzMwMjctNDA5NjAKKyAgRnJlZSBpbm9kZXM6IDgxOTMtMTAyNDAKK0dyb3VwIDU6IChCbG9ja3MgNDA5NjEtNDkxNTIpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDQwOTYxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA0MDk2Mi00MDk2MgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDQwOTYzLTQxMjE4CisgIEJsb2NrIGJpdG1hcCBhdCA0MTIxOSAoKzI1OCksIElub2RlIGJpdG1hcCBhdCA0MTIyMCAoKzI1OSkKKyAgSW5vZGUgdGFibGUgYXQgNDEyMjEtNDE0NzYgKCsyNjApCisgIDc2NzYgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQxNDc3LTQ5MTUyCisgIEZyZWUgaW5vZGVzOiAxMDI0MS0xMjI4OAorR3JvdXAgNjogKEJsb2NrcyA0OTE1My01NzM0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ5MTUzICgrMCksIElub2RlIGJpdG1hcCBhdCA0OTE1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ5MTU1LTQ5NDEwICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDk0MTEtNTczNDQKKyAgRnJlZSBpbm9kZXM6IDEyMjg5LTE0MzM2CitHcm91cCA3OiAoQmxvY2tzIDU3MzQ1LTY1NTM2KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA1NzM0NSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNTczNDYtNTczNDYKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA1NzM0Ny01NzYwMgorICBCbG9jayBiaXRtYXAgYXQgNTc2MDMgKCsyNTgpLCBJbm9kZSBiaXRtYXAgYXQgNTc2MDQgKCsyNTkpCisgIElub2RlIHRhYmxlIGF0IDU3NjA1LTU3ODYwICgrMjYwKQorICA3Njc2IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1Nzg2MS02NTUzNgorICBGcmVlIGlub2RlczogMTQzMzctMTYzODQKK0dyb3VwIDg6IChCbG9ja3MgNjU1MzctNzM3MjgpCisgIEJsb2NrIGJpdG1hcCBhdCA2NTUzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjU1MzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2NTUzOS02NTc5NCAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY1Nzk1LTczNzI4CisgIEZyZWUgaW5vZGVzOiAxNjM4NS0xODQzMgorR3JvdXAgOTogKEJsb2NrcyA3MzcyOS04MTkyMCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNzM3MjksIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDczNzMwLTczNzMwCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNzM3MzEtNzM5ODYKKyAgQmxvY2sgYml0bWFwIGF0IDczOTg3ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDczOTg4ICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCA3Mzk4OS03NDI0NCAoKzI2MCkKKyAgNzY3NiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzQyNDUtODE5MjAKKyAgRnJlZSBpbm9kZXM6IDE4NDMzLTIwNDgwCitHcm91cCAxMDogKEJsb2NrcyA4MTkyMS05MDExMikKKyAgQmxvY2sgYml0bWFwIGF0IDgxOTIxICgrMCksIElub2RlIGJpdG1hcCBhdCA4MTkyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDgxOTIzLTgyMTc4ICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODIxNzktOTAxMTIKKyAgRnJlZSBpbm9kZXM6IDIwNDgxLTIyNTI4CitHcm91cCAxMTogKEJsb2NrcyA5MDExMy05ODMwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDkwMTEzICgrMCksIElub2RlIGJpdG1hcCBhdCA5MDExNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDkwMTE1LTkwMzcwICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTAzNzEtOTgzMDQKKyAgRnJlZSBpbm9kZXM6IDIyNTI5LTI0NTc2CitHcm91cCAxMjogKEJsb2NrcyA5ODMwNS0xMDY0OTYpCisgIEJsb2NrIGJpdG1hcCBhdCA5ODMwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTgzMDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5ODMwNy05ODU2MiAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk4NTYzLTEwNjQ5NgorICBGcmVlIGlub2RlczogMjQ1NzctMjY2MjQKK0dyb3VwIDEzOiAoQmxvY2tzIDEwNjQ5Ny0xMTQ2ODgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDY0OTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwNjQ5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwNjQ5OS0xMDY3NTQgKCsyKQorICA3OTM0IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDY3NTUtMTE0Njg4CisgIEZyZWUgaW5vZGVzOiAyNjYyNS0yODY3MgorR3JvdXAgMTQ6IChCbG9ja3MgMTE0Njg5LTEyMjg4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDExNDY4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE0NjkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE0NjkxLTExNDk0NiAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExNDk0Ny0xMjI4ODAKKyAgRnJlZSBpbm9kZXM6IDI4NjczLTMwNzIwCitHcm91cCAxNTogKEJsb2NrcyAxMjI4ODEtMTMxMDcxKQorICBCbG9jayBiaXRtYXAgYXQgMTIyODgxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjI4ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjI4ODMtMTIzMTM4ICgrMikKKyAgNzkzMyBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIzMTM5LTEzMTA3MQorICBGcmVlIGlub2RlczogMzA3MjEtMzI3NjgKZGlmZiAtLWdpdCBhL3Rlc3RzL21fcXVvdGEvc2NyaXB0IGIvdGVzdHMvbV9xdW90YS9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhYjYzMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21fcXVvdGEvc2NyaXB0CkBAIC0wLDAgKzEsOCBAQAorREVTQ1JJUFRJT049ImVuYWJsZSBxdW90YSBmZWF0dXJlIG9uIG1rZnMiCitGU19TSVpFPTEzMTA3MgorTUtFMkZTX09QVFM9Ii1PIHF1b3RhIgoraWYgWyAiJFFVT1RBIiAhPSAieSIgXTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICRERVNDUklQVElPTjogc2tpcHBlZCIKKwlyZXR1cm4gMAorZmkKKy4gJGNtZF9kaXIvcnVuX21rZTJmcwpkaWZmIC0tZ2l0IGEvdGVzdHMvbV9yYWlkX29wdC9leHBlY3QuMSBiL3Rlc3RzL21fcmFpZF9vcHQvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZjY2I3YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21fcmFpZF9vcHQvZXhwZWN0LjEKQEAgLTAsMCArMSw4MzggQEAKK0NyZWF0aW5nIGZpbGVzeXN0ZW0gd2l0aCAxMzEwNzIgMWsgYmxvY2tzIGFuZCAzMjc2OCBpbm9kZXMKK1N1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAKKwkxMDI1LCAzMDczLCA1MTIxLCA3MTY5LCA5MjE3LCAyNTYwMSwgMjc2NDksIDUwMTc3LCA4Mjk0NSwgMTI4MDAxCisKK0FsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAgICAgICAgCAgICAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitXcml0aW5nIGlub2RlIHRhYmxlczogICAgICAgIAgICAgICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAgICAgCAgICAgICGRvbmUKKworRmlsZXN5c3RlbSBmZWF0dXJlczogZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBzcGFyc2Vfc3VwZXIKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzMyNzY4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNzIzOC8xMzEwNzIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyCitEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIChub25lKQorRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICBjbGVhbgorRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICBDb250aW51ZQorRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICBMaW51eAorSW5vZGUgY291bnQ6ICAgICAgICAgICAgICAzMjc2OAorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICAxMzEwNzIKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgNjU1MworRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAxMjM4MzQKK0ZyZWUgaW5vZGVzOiAgICAgICAgICAgICAgMzI3NTcKK0ZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgMQorQmxvY2sgc2l6ZTogICAgICAgICAgICAgICAxMDI0CitGcmFnbWVudCBzaXplOiAgICAgICAgICAgIDEwMjQKK1Jlc2VydmVkIEdEVCBibG9ja3M6ICAgICAgMjU2CitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDEwMjQKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgMTAyNAorSW5vZGVzIHBlciBncm91cDogICAgICAgICAyNTYKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgMzIKK1JBSUQgc3RyaWRlOiAgICAgICAgICAgICAgMTMKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMS0xMDI0KQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMi01CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNi0yNjEKKyAgQmxvY2sgYml0bWFwIGF0IDI5NCAoKzI5MyksIElub2RlIGJpdG1hcCBhdCAyOTUgKCsyOTQpCisgIElub2RlIHRhYmxlIGF0IDI2Mi0yOTMgKCsyNjEpCisgIDcxNSBmcmVlIGJsb2NrcywgMjQ1IGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMTAtMTAyNAorICBGcmVlIGlub2RlczogMTItMjU2CitHcm91cCAxOiAoQmxvY2tzIDEwMjUtMjA0OCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTAyNSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTAyNi0xMDI5CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTAzMC0xMjg1CisgIEJsb2NrIGJpdG1hcCBhdCAxMzMxICgrMzA2KSwgSW5vZGUgYml0bWFwIGF0IDEzMzIgKCszMDcpCisgIElub2RlIHRhYmxlIGF0IDEyODYtMTMxNyAoKzI2MSkKKyAgNzI5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzMTgtMTMzMCwgMTMzMy0yMDQ4CisgIEZyZWUgaW5vZGVzOiAyNTctNTEyCitHcm91cCAyOiAoQmxvY2tzIDIwNDktMzA3MikKKyAgQmxvY2sgYml0bWFwIGF0IDIxMDcgKCs1OCksIElub2RlIGJpdG1hcCBhdCAyMTA4ICgrNTkpCisgIElub2RlIHRhYmxlIGF0IDIwNDktMjA4MAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA4MS0yMTA2LCAyMTA5LTMwNzIKKyAgRnJlZSBpbm9kZXM6IDUxMy03NjgKK0dyb3VwIDM6IChCbG9ja3MgMzA3My00MDk2KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAzMDczLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAzMDc0LTMwNzcKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAzMDc4LTMzMzMKKyAgQmxvY2sgYml0bWFwIGF0IDM0MDUgKCszMzIpLCBJbm9kZSBiaXRtYXAgYXQgMzQwNiAoKzMzMykKKyAgSW5vZGUgdGFibGUgYXQgMzMzNC0zMzY1ICgrMjYxKQorICA3MjkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzM2Ni0zNDA0LCAzNDA3LTQwOTYKKyAgRnJlZSBpbm9kZXM6IDc2OS0xMDI0CitHcm91cCA0OiAoQmxvY2tzIDQwOTctNTEyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDQxODEgKCs4NCksIElub2RlIGJpdG1hcCBhdCA0MTgyICgrODUpCisgIElub2RlIHRhYmxlIGF0IDQwOTctNDEyOAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDEyOS00MTgwLCA0MTgzLTUxMjAKKyAgRnJlZSBpbm9kZXM6IDEwMjUtMTI4MAorR3JvdXAgNTogKEJsb2NrcyA1MTIxLTYxNDQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDUxMjEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDUxMjItNTEyNQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDUxMjYtNTM4MQorICBCbG9jayBiaXRtYXAgYXQgNTQ3OSAoKzM1OCksIElub2RlIGJpdG1hcCBhdCA1NDgwICgrMzU5KQorICBJbm9kZSB0YWJsZSBhdCA1MzgyLTU0MTMgKCsyNjEpCisgIDcyOSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NDE0LTU0NzgsIDU0ODEtNjE0NAorICBGcmVlIGlub2RlczogMTI4MS0xNTM2CitHcm91cCA2OiAoQmxvY2tzIDYxNDUtNzE2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDYyNTUgKCsxMTApLCBJbm9kZSBiaXRtYXAgYXQgNjI1NiAoKzExMSkKKyAgSW5vZGUgdGFibGUgYXQgNjE0NS02MTc2CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MTc3LTYyNTQsIDYyNTctNzE2OAorICBGcmVlIGlub2RlczogMTUzNy0xNzkyCitHcm91cCA3OiAoQmxvY2tzIDcxNjktODE5MikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNzE2OSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNzE3MC03MTczCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNzE3NC03NDI5CisgIEJsb2NrIGJpdG1hcCBhdCA3NTUzICgrMzg0KSwgSW5vZGUgYml0bWFwIGF0IDc1NTQgKCszODUpCisgIElub2RlIHRhYmxlIGF0IDc0MzAtNzQ2MSAoKzI2MSkKKyAgNzI5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc0NjItNzU1MiwgNzU1NS04MTkyCisgIEZyZWUgaW5vZGVzOiAxNzkzLTIwNDgKK0dyb3VwIDg6IChCbG9ja3MgODE5My05MjE2KQorICBCbG9jayBiaXRtYXAgYXQgODMyOSAoKzEzNiksIElub2RlIGJpdG1hcCBhdCA4MzMwICgrMTM3KQorICBJbm9kZSB0YWJsZSBhdCA4MTkzLTgyMjQKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgyMjUtODMyOCwgODMzMS05MjE2CisgIEZyZWUgaW5vZGVzOiAyMDQ5LTIzMDQKK0dyb3VwIDk6IChCbG9ja3MgOTIxNy0xMDI0MCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgOTIxNywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgOTIxOC05MjIxCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgOTIyMi05NDc3CisgIEJsb2NrIGJpdG1hcCBhdCA5NjI3ICgrNDEwKSwgSW5vZGUgYml0bWFwIGF0IDk2MjggKCs0MTEpCisgIElub2RlIHRhYmxlIGF0IDk0NzgtOTUwOSAoKzI2MSkKKyAgNzI5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk1MTAtOTYyNiwgOTYyOS0xMDI0MAorICBGcmVlIGlub2RlczogMjMwNS0yNTYwCitHcm91cCAxMDogKEJsb2NrcyAxMDI0MS0xMTI2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwNDAzICgrMTYyKSwgSW5vZGUgYml0bWFwIGF0IDEwNDA0ICgrMTYzKQorICBJbm9kZSB0YWJsZSBhdCAxMDI0MS0xMDI3MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAyNzMtMTA0MDIsIDEwNDA1LTExMjY0CisgIEZyZWUgaW5vZGVzOiAyNTYxLTI4MTYKK0dyb3VwIDExOiAoQmxvY2tzIDExMjY1LTEyMjg4KQorICBCbG9jayBiaXRtYXAgYXQgMTE0NDAgKCsxNzUpLCBJbm9kZSBiaXRtYXAgYXQgMTE0NDEgKCsxNzYpCisgIElub2RlIHRhYmxlIGF0IDExMjY1LTExMjk2CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTI5Ny0xMTQzOSwgMTE0NDItMTIyODgKKyAgRnJlZSBpbm9kZXM6IDI4MTctMzA3MgorR3JvdXAgMTI6IChCbG9ja3MgMTIyODktMTMzMTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjQ3NyAoKzE4OCksIElub2RlIGJpdG1hcCBhdCAxMjQ3OCAoKzE4OSkKKyAgSW5vZGUgdGFibGUgYXQgMTIyODktMTIzMjAKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMzIxLTEyNDc2LCAxMjQ3OS0xMzMxMgorICBGcmVlIGlub2RlczogMzA3My0zMzI4CitHcm91cCAxMzogKEJsb2NrcyAxMzMxMy0xNDMzNikKKyAgQmxvY2sgYml0bWFwIGF0IDEzNTE0ICgrMjAxKSwgSW5vZGUgYml0bWFwIGF0IDEzNTE1ICgrMjAyKQorICBJbm9kZSB0YWJsZSBhdCAxMzMxMy0xMzM0NAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMzNDUtMTM1MTMsIDEzNTE2LTE0MzM2CisgIEZyZWUgaW5vZGVzOiAzMzI5LTM1ODQKK0dyb3VwIDE0OiAoQmxvY2tzIDE0MzM3LTE1MzYwKQorICBCbG9jayBiaXRtYXAgYXQgMTQ1NTEgKCsyMTQpLCBJbm9kZSBiaXRtYXAgYXQgMTQ1NTIgKCsyMTUpCisgIElub2RlIHRhYmxlIGF0IDE0MzM3LTE0MzY4CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDM2OS0xNDU1MCwgMTQ1NTMtMTUzNjAKKyAgRnJlZSBpbm9kZXM6IDM1ODUtMzg0MAorR3JvdXAgMTU6IChCbG9ja3MgMTUzNjEtMTYzODQpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTU4OCAoKzIyNyksIElub2RlIGJpdG1hcCBhdCAxNTU4OSAoKzIyOCkKKyAgSW5vZGUgdGFibGUgYXQgMTUzNjEtMTUzOTIKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1MzkzLTE1NTg3LCAxNTU5MC0xNjM4NAorICBGcmVlIGlub2RlczogMzg0MS00MDk2CitHcm91cCAxNjogKEJsb2NrcyAxNjM4NS0xNzQwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDE2NjI1ICgrMjQwKSwgSW5vZGUgYml0bWFwIGF0IDE2NjI2ICgrMjQxKQorICBJbm9kZSB0YWJsZSBhdCAxNjM4NS0xNjQxNgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTY0MTctMTY2MjQsIDE2NjI3LTE3NDA4CisgIEZyZWUgaW5vZGVzOiA0MDk3LTQzNTIKK0dyb3VwIDE3OiAoQmxvY2tzIDE3NDA5LTE4NDMyKQorICBCbG9jayBiaXRtYXAgYXQgMTc2NjIgKCsyNTMpLCBJbm9kZSBiaXRtYXAgYXQgMTc2NjMgKCsyNTQpCisgIElub2RlIHRhYmxlIGF0IDE3NDA5LTE3NDQwCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNzQ0MS0xNzY2MSwgMTc2NjQtMTg0MzIKKyAgRnJlZSBpbm9kZXM6IDQzNTMtNDYwOAorR3JvdXAgMTg6IChCbG9ja3MgMTg0MzMtMTk0NTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxODY5OSAoKzI2NiksIElub2RlIGJpdG1hcCBhdCAxODcwMCAoKzI2NykKKyAgSW5vZGUgdGFibGUgYXQgMTg0MzMtMTg0NjQKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE4NDY1LTE4Njk4LCAxODcwMS0xOTQ1NgorICBGcmVlIGlub2RlczogNDYwOS00ODY0CitHcm91cCAxOTogKEJsb2NrcyAxOTQ1Ny0yMDQ4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDE5NzM2ICgrMjc5KSwgSW5vZGUgYml0bWFwIGF0IDE5NzM3ICgrMjgwKQorICBJbm9kZSB0YWJsZSBhdCAxOTQ1Ny0xOTQ4OAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTk0ODktMTk3MzUsIDE5NzM4LTIwNDgwCisgIEZyZWUgaW5vZGVzOiA0ODY1LTUxMjAKK0dyb3VwIDIwOiAoQmxvY2tzIDIwNDgxLTIxNTA0KQorICBCbG9jayBiaXRtYXAgYXQgMjA3NzMgKCsyOTIpLCBJbm9kZSBiaXRtYXAgYXQgMjA3NzQgKCsyOTMpCisgIElub2RlIHRhYmxlIGF0IDIwNDgxLTIwNTEyCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDUxMy0yMDc3MiwgMjA3NzUtMjE1MDQKKyAgRnJlZSBpbm9kZXM6IDUxMjEtNTM3NgorR3JvdXAgMjE6IChCbG9ja3MgMjE1MDUtMjI1MjgpCisgIEJsb2NrIGJpdG1hcCBhdCAyMTgxMCAoKzMwNSksIElub2RlIGJpdG1hcCBhdCAyMTgxMSAoKzMwNikKKyAgSW5vZGUgdGFibGUgYXQgMjE1MDUtMjE1MzYKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIxNTM3LTIxODA5LCAyMTgxMi0yMjUyOAorICBGcmVlIGlub2RlczogNTM3Ny01NjMyCitHcm91cCAyMjogKEJsb2NrcyAyMjUyOS0yMzU1MikKKyAgQmxvY2sgYml0bWFwIGF0IDIyODQ3ICgrMzE4KSwgSW5vZGUgYml0bWFwIGF0IDIyODQ4ICgrMzE5KQorICBJbm9kZSB0YWJsZSBhdCAyMjUyOS0yMjU2MAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjI1NjEtMjI4NDYsIDIyODQ5LTIzNTUyCisgIEZyZWUgaW5vZGVzOiA1NjMzLTU4ODgKK0dyb3VwIDIzOiAoQmxvY2tzIDIzNTUzLTI0NTc2KQorICBCbG9jayBiaXRtYXAgYXQgMjM4ODQgKCszMzEpLCBJbm9kZSBiaXRtYXAgYXQgMjM4ODUgKCszMzIpCisgIElub2RlIHRhYmxlIGF0IDIzNTUzLTIzNTg0CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMzU4NS0yMzg4MywgMjM4ODYtMjQ1NzYKKyAgRnJlZSBpbm9kZXM6IDU4ODktNjE0NAorR3JvdXAgMjQ6IChCbG9ja3MgMjQ1NzctMjU2MDApCisgIEJsb2NrIGJpdG1hcCBhdCAyNDkyMSAoKzM0NCksIElub2RlIGJpdG1hcCBhdCAyNDkyMiAoKzM0NSkKKyAgSW5vZGUgdGFibGUgYXQgMjQ1NzctMjQ2MDgKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI0NjA5LTI0OTIwLCAyNDkyMy0yNTYwMAorICBGcmVlIGlub2RlczogNjE0NS02NDAwCitHcm91cCAyNTogKEJsb2NrcyAyNTYwMS0yNjYyNCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjU2MDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI1NjAyLTI1NjA1CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjU2MDYtMjU4NjEKKyAgQmxvY2sgYml0bWFwIGF0IDI2MjE5ICgrNjE4KSwgSW5vZGUgYml0bWFwIGF0IDI2MjIwICgrNjE5KQorICBJbm9kZSB0YWJsZSBhdCAyNTg2Mi0yNTg5MyAoKzI2MSkKKyAgNzI5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1ODk0LTI2MjE4LCAyNjIyMS0yNjYyNAorICBGcmVlIGlub2RlczogNjQwMS02NjU2CitHcm91cCAyNjogKEJsb2NrcyAyNjYyNS0yNzY0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDI2OTk1ICgrMzcwKSwgSW5vZGUgYml0bWFwIGF0IDI2OTk2ICgrMzcxKQorICBJbm9kZSB0YWJsZSBhdCAyNjYyNS0yNjY1NgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjY2NTctMjY5OTQsIDI2OTk3LTI3NjQ4CisgIEZyZWUgaW5vZGVzOiA2NjU3LTY5MTIKK0dyb3VwIDI3OiAoQmxvY2tzIDI3NjQ5LTI4NjcyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyNzY0OSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjc2NTAtMjc2NTMKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyNzY1NC0yNzkwOQorICBCbG9jayBiaXRtYXAgYXQgMjgyOTMgKCs2NDQpLCBJbm9kZSBiaXRtYXAgYXQgMjgyOTQgKCs2NDUpCisgIElub2RlIHRhYmxlIGF0IDI3OTEwLTI3OTQxICgrMjYxKQorICA3MjkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjc5NDItMjgyOTIsIDI4Mjk1LTI4NjcyCisgIEZyZWUgaW5vZGVzOiA2OTEzLTcxNjgKK0dyb3VwIDI4OiAoQmxvY2tzIDI4NjczLTI5Njk2KQorICBCbG9jayBiaXRtYXAgYXQgMjkwNjkgKCszOTYpLCBJbm9kZSBiaXRtYXAgYXQgMjkwNzAgKCszOTcpCisgIElub2RlIHRhYmxlIGF0IDI4NjczLTI4NzA0CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyODcwNS0yOTA2OCwgMjkwNzEtMjk2OTYKKyAgRnJlZSBpbm9kZXM6IDcxNjktNzQyNAorR3JvdXAgMjk6IChCbG9ja3MgMjk2OTctMzA3MjApCisgIEJsb2NrIGJpdG1hcCBhdCAzMDEwNiAoKzQwOSksIElub2RlIGJpdG1hcCBhdCAzMDEwNyAoKzQxMCkKKyAgSW5vZGUgdGFibGUgYXQgMjk2OTctMjk3MjgKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI5NzI5LTMwMTA1LCAzMDEwOC0zMDcyMAorICBGcmVlIGlub2RlczogNzQyNS03NjgwCitHcm91cCAzMDogKEJsb2NrcyAzMDcyMS0zMTc0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDMxMTQzICgrNDIyKSwgSW5vZGUgYml0bWFwIGF0IDMxMTQ0ICgrNDIzKQorICBJbm9kZSB0YWJsZSBhdCAzMDcyMS0zMDc1MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzA3NTMtMzExNDIsIDMxMTQ1LTMxNzQ0CisgIEZyZWUgaW5vZGVzOiA3NjgxLTc5MzYKK0dyb3VwIDMxOiAoQmxvY2tzIDMxNzQ1LTMyNzY4KQorICBCbG9jayBiaXRtYXAgYXQgMzIxODAgKCs0MzUpLCBJbm9kZSBiaXRtYXAgYXQgMzIxODEgKCs0MzYpCisgIElub2RlIHRhYmxlIGF0IDMxNzQ1LTMxNzc2CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMTc3Ny0zMjE3OSwgMzIxODItMzI3NjgKKyAgRnJlZSBpbm9kZXM6IDc5MzctODE5MgorR3JvdXAgMzI6IChCbG9ja3MgMzI3NjktMzM3OTIpCisgIEJsb2NrIGJpdG1hcCBhdCAzMzIxNyAoKzQ0OCksIElub2RlIGJpdG1hcCBhdCAzMzIxOCAoKzQ0OSkKKyAgSW5vZGUgdGFibGUgYXQgMzI3NjktMzI4MDAKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMyODAxLTMzMjE2LCAzMzIxOS0zMzc5MgorICBGcmVlIGlub2RlczogODE5My04NDQ4CitHcm91cCAzMzogKEJsb2NrcyAzMzc5My0zNDgxNikKKyAgQmxvY2sgYml0bWFwIGF0IDM0MjU0ICgrNDYxKSwgSW5vZGUgYml0bWFwIGF0IDM0MjU1ICgrNDYyKQorICBJbm9kZSB0YWJsZSBhdCAzMzc5My0zMzgyNAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzM4MjUtMzQyNTMsIDM0MjU2LTM0ODE2CisgIEZyZWUgaW5vZGVzOiA4NDQ5LTg3MDQKK0dyb3VwIDM0OiAoQmxvY2tzIDM0ODE3LTM1ODQwKQorICBCbG9jayBiaXRtYXAgYXQgMzUyOTEgKCs0NzQpLCBJbm9kZSBiaXRtYXAgYXQgMzUyOTIgKCs0NzUpCisgIElub2RlIHRhYmxlIGF0IDM0ODE3LTM0ODQ4CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNDg0OS0zNTI5MCwgMzUyOTMtMzU4NDAKKyAgRnJlZSBpbm9kZXM6IDg3MDUtODk2MAorR3JvdXAgMzU6IChCbG9ja3MgMzU4NDEtMzY4NjQpCisgIEJsb2NrIGJpdG1hcCBhdCAzNjMyOCAoKzQ4NyksIElub2RlIGJpdG1hcCBhdCAzNjMyOSAoKzQ4OCkKKyAgSW5vZGUgdGFibGUgYXQgMzU4NDEtMzU4NzIKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM1ODczLTM2MzI3LCAzNjMzMC0zNjg2NAorICBGcmVlIGlub2RlczogODk2MS05MjE2CitHcm91cCAzNjogKEJsb2NrcyAzNjg2NS0zNzg4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDM3MzY1ICgrNTAwKSwgSW5vZGUgYml0bWFwIGF0IDM3MzY2ICgrNTAxKQorICBJbm9kZSB0YWJsZSBhdCAzNjg2NS0zNjg5NgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzY4OTctMzczNjQsIDM3MzY3LTM3ODg4CisgIEZyZWUgaW5vZGVzOiA5MjE3LTk0NzIKK0dyb3VwIDM3OiAoQmxvY2tzIDM3ODg5LTM4OTEyKQorICBCbG9jayBiaXRtYXAgYXQgMzg0MDIgKCs1MTMpLCBJbm9kZSBiaXRtYXAgYXQgMzg0MDMgKCs1MTQpCisgIElub2RlIHRhYmxlIGF0IDM3ODg5LTM3OTIwCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNzkyMS0zODQwMSwgMzg0MDQtMzg5MTIKKyAgRnJlZSBpbm9kZXM6IDk0NzMtOTcyOAorR3JvdXAgMzg6IChCbG9ja3MgMzg5MTMtMzk5MzYpCisgIEJsb2NrIGJpdG1hcCBhdCAzOTQzOSAoKzUyNiksIElub2RlIGJpdG1hcCBhdCAzOTQ0MCAoKzUyNykKKyAgSW5vZGUgdGFibGUgYXQgMzg5MTMtMzg5NDQKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM4OTQ1LTM5NDM4LCAzOTQ0MS0zOTkzNgorICBGcmVlIGlub2RlczogOTcyOS05OTg0CitHcm91cCAzOTogKEJsb2NrcyAzOTkzNy00MDk2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDQwNDc2ICgrNTM5KSwgSW5vZGUgYml0bWFwIGF0IDQwNDc3ICgrNTQwKQorICBJbm9kZSB0YWJsZSBhdCAzOTkzNy0zOTk2OAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzk5NjktNDA0NzUsIDQwNDc4LTQwOTYwCisgIEZyZWUgaW5vZGVzOiA5OTg1LTEwMjQwCitHcm91cCA0MDogKEJsb2NrcyA0MDk2MS00MTk4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDQxNTEzICgrNTUyKSwgSW5vZGUgYml0bWFwIGF0IDQxNTE0ICgrNTUzKQorICBJbm9kZSB0YWJsZSBhdCA0MDk2MS00MDk5MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDA5OTMtNDE1MTIsIDQxNTE1LTQxOTg0CisgIEZyZWUgaW5vZGVzOiAxMDI0MS0xMDQ5NgorR3JvdXAgNDE6IChCbG9ja3MgNDE5ODUtNDMwMDgpCisgIEJsb2NrIGJpdG1hcCBhdCA0MjU1MCAoKzU2NSksIElub2RlIGJpdG1hcCBhdCA0MjU1MSAoKzU2NikKKyAgSW5vZGUgdGFibGUgYXQgNDE5ODUtNDIwMTYKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQyMDE3LTQyNTQ5LCA0MjU1Mi00MzAwOAorICBGcmVlIGlub2RlczogMTA0OTctMTA3NTIKK0dyb3VwIDQyOiAoQmxvY2tzIDQzMDA5LTQ0MDMyKQorICBCbG9jayBiaXRtYXAgYXQgNDM1ODcgKCs1NzgpLCBJbm9kZSBiaXRtYXAgYXQgNDM1ODggKCs1NzkpCisgIElub2RlIHRhYmxlIGF0IDQzMDA5LTQzMDQwCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MzA0MS00MzU4NiwgNDM1ODktNDQwMzIKKyAgRnJlZSBpbm9kZXM6IDEwNzUzLTExMDA4CitHcm91cCA0MzogKEJsb2NrcyA0NDAzMy00NTA1NikKKyAgQmxvY2sgYml0bWFwIGF0IDQ0NjI0ICgrNTkxKSwgSW5vZGUgYml0bWFwIGF0IDQ0NjI1ICgrNTkyKQorICBJbm9kZSB0YWJsZSBhdCA0NDAzMy00NDA2NAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDQwNjUtNDQ2MjMsIDQ0NjI2LTQ1MDU2CisgIEZyZWUgaW5vZGVzOiAxMTAwOS0xMTI2NAorR3JvdXAgNDQ6IChCbG9ja3MgNDUwNTctNDYwODApCisgIEJsb2NrIGJpdG1hcCBhdCA0NTY2MSAoKzYwNCksIElub2RlIGJpdG1hcCBhdCA0NTY2MiAoKzYwNSkKKyAgSW5vZGUgdGFibGUgYXQgNDUwNTctNDUwODgKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ1MDg5LTQ1NjYwLCA0NTY2My00NjA4MAorICBGcmVlIGlub2RlczogMTEyNjUtMTE1MjAKK0dyb3VwIDQ1OiAoQmxvY2tzIDQ2MDgxLTQ3MTA0KQorICBCbG9jayBiaXRtYXAgYXQgNDY2OTggKCs2MTcpLCBJbm9kZSBiaXRtYXAgYXQgNDY2OTkgKCs2MTgpCisgIElub2RlIHRhYmxlIGF0IDQ2MDgxLTQ2MTEyCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NjExMy00NjY5NywgNDY3MDAtNDcxMDQKKyAgRnJlZSBpbm9kZXM6IDExNTIxLTExNzc2CitHcm91cCA0NjogKEJsb2NrcyA0NzEwNS00ODEyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ3NzM1ICgrNjMwKSwgSW5vZGUgYml0bWFwIGF0IDQ3NzM2ICgrNjMxKQorICBJbm9kZSB0YWJsZSBhdCA0NzEwNS00NzEzNgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDcxMzctNDc3MzQsIDQ3NzM3LTQ4MTI4CisgIEZyZWUgaW5vZGVzOiAxMTc3Ny0xMjAzMgorR3JvdXAgNDc6IChCbG9ja3MgNDgxMjktNDkxNTIpCisgIEJsb2NrIGJpdG1hcCBhdCA0ODc3MiAoKzY0MyksIElub2RlIGJpdG1hcCBhdCA0ODc3MyAoKzY0NCkKKyAgSW5vZGUgdGFibGUgYXQgNDgxMjktNDgxNjAKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ4MTYxLTQ4NzcxLCA0ODc3NC00OTE1MgorICBGcmVlIGlub2RlczogMTIwMzMtMTIyODgKK0dyb3VwIDQ4OiAoQmxvY2tzIDQ5MTUzLTUwMTc2KQorICBCbG9jayBiaXRtYXAgYXQgNDk4MDkgKCs2NTYpLCBJbm9kZSBiaXRtYXAgYXQgNDk4MTAgKCs2NTcpCisgIElub2RlIHRhYmxlIGF0IDQ5MTUzLTQ5MTg0CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0OTE4NS00OTgwOCwgNDk4MTEtNTAxNzYKKyAgRnJlZSBpbm9kZXM6IDEyMjg5LTEyNTQ0CitHcm91cCA0OTogKEJsb2NrcyA1MDE3Ny01MTIwMCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNTAxNzcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDUwMTc4LTUwMTgxCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNTAxODItNTA0MzcKKyAgQmxvY2sgYml0bWFwIGF0IDUxMTA3ICgrOTMwKSwgSW5vZGUgYml0bWFwIGF0IDUxMTA4ICgrOTMxKQorICBJbm9kZSB0YWJsZSBhdCA1MDQzOC01MDQ2OSAoKzI2MSkKKyAgNzI5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUwNDcwLTUxMTA2LCA1MTEwOS01MTIwMAorICBGcmVlIGlub2RlczogMTI1NDUtMTI4MDAKK0dyb3VwIDUwOiAoQmxvY2tzIDUxMjAxLTUyMjI0KQorICBCbG9jayBiaXRtYXAgYXQgNTE4ODMgKCs2ODIpLCBJbm9kZSBiaXRtYXAgYXQgNTE4ODQgKCs2ODMpCisgIElub2RlIHRhYmxlIGF0IDUxMjAxLTUxMjMyCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MTIzMy01MTg4MiwgNTE4ODUtNTIyMjQKKyAgRnJlZSBpbm9kZXM6IDEyODAxLTEzMDU2CitHcm91cCA1MTogKEJsb2NrcyA1MjIyNS01MzI0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDUyOTIwICgrNjk1KSwgSW5vZGUgYml0bWFwIGF0IDUyOTIxICgrNjk2KQorICBJbm9kZSB0YWJsZSBhdCA1MjIyNS01MjI1NgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTIyNTctNTI5MTksIDUyOTIyLTUzMjQ4CisgIEZyZWUgaW5vZGVzOiAxMzA1Ny0xMzMxMgorR3JvdXAgNTI6IChCbG9ja3MgNTMyNDktNTQyNzIpCisgIEJsb2NrIGJpdG1hcCBhdCA1Mzk1NyAoKzcwOCksIElub2RlIGJpdG1hcCBhdCA1Mzk1OCAoKzcwOSkKKyAgSW5vZGUgdGFibGUgYXQgNTMyNDktNTMyODAKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUzMjgxLTUzOTU2LCA1Mzk1OS01NDI3MgorICBGcmVlIGlub2RlczogMTMzMTMtMTM1NjgKK0dyb3VwIDUzOiAoQmxvY2tzIDU0MjczLTU1Mjk2KQorICBCbG9jayBiaXRtYXAgYXQgNTQ5OTQgKCs3MjEpLCBJbm9kZSBiaXRtYXAgYXQgNTQ5OTUgKCs3MjIpCisgIElub2RlIHRhYmxlIGF0IDU0MjczLTU0MzA0CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NDMwNS01NDk5MywgNTQ5OTYtNTUyOTYKKyAgRnJlZSBpbm9kZXM6IDEzNTY5LTEzODI0CitHcm91cCA1NDogKEJsb2NrcyA1NTI5Ny01NjMyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDU2MDMxICgrNzM0KSwgSW5vZGUgYml0bWFwIGF0IDU2MDMyICgrNzM1KQorICBJbm9kZSB0YWJsZSBhdCA1NTI5Ny01NTMyOAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTUzMjktNTYwMzAsIDU2MDMzLTU2MzIwCisgIEZyZWUgaW5vZGVzOiAxMzgyNS0xNDA4MAorR3JvdXAgNTU6IChCbG9ja3MgNTYzMjEtNTczNDQpCisgIEJsb2NrIGJpdG1hcCBhdCA1NzA2OCAoKzc0NyksIElub2RlIGJpdG1hcCBhdCA1NzA2OSAoKzc0OCkKKyAgSW5vZGUgdGFibGUgYXQgNTYzMjEtNTYzNTIKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU2MzUzLTU3MDY3LCA1NzA3MC01NzM0NAorICBGcmVlIGlub2RlczogMTQwODEtMTQzMzYKK0dyb3VwIDU2OiAoQmxvY2tzIDU3MzQ1LTU4MzY4KQorICBCbG9jayBiaXRtYXAgYXQgNTgxMDUgKCs3NjApLCBJbm9kZSBiaXRtYXAgYXQgNTgxMDYgKCs3NjEpCisgIElub2RlIHRhYmxlIGF0IDU3MzQ1LTU3Mzc2CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NzM3Ny01ODEwNCwgNTgxMDctNTgzNjgKKyAgRnJlZSBpbm9kZXM6IDE0MzM3LTE0NTkyCitHcm91cCA1NzogKEJsb2NrcyA1ODM2OS01OTM5MikKKyAgQmxvY2sgYml0bWFwIGF0IDU5MTQyICgrNzczKSwgSW5vZGUgYml0bWFwIGF0IDU5MTQzICgrNzc0KQorICBJbm9kZSB0YWJsZSBhdCA1ODM2OS01ODQwMAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTg0MDEtNTkxNDEsIDU5MTQ0LTU5MzkyCisgIEZyZWUgaW5vZGVzOiAxNDU5My0xNDg0OAorR3JvdXAgNTg6IChCbG9ja3MgNTkzOTMtNjA0MTYpCisgIEJsb2NrIGJpdG1hcCBhdCA2MDE3OSAoKzc4NiksIElub2RlIGJpdG1hcCBhdCA2MDE4MCAoKzc4NykKKyAgSW5vZGUgdGFibGUgYXQgNTkzOTMtNTk0MjQKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU5NDI1LTYwMTc4LCA2MDE4MS02MDQxNgorICBGcmVlIGlub2RlczogMTQ4NDktMTUxMDQKK0dyb3VwIDU5OiAoQmxvY2tzIDYwNDE3LTYxNDQwKQorICBCbG9jayBiaXRtYXAgYXQgNjEyMTYgKCs3OTkpLCBJbm9kZSBiaXRtYXAgYXQgNjEyMTcgKCs4MDApCisgIElub2RlIHRhYmxlIGF0IDYwNDE3LTYwNDQ4CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MDQ0OS02MTIxNSwgNjEyMTgtNjE0NDAKKyAgRnJlZSBpbm9kZXM6IDE1MTA1LTE1MzYwCitHcm91cCA2MDogKEJsb2NrcyA2MTQ0MS02MjQ2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDYyMjUzICgrODEyKSwgSW5vZGUgYml0bWFwIGF0IDYyMjU0ICgrODEzKQorICBJbm9kZSB0YWJsZSBhdCA2MTQ0MS02MTQ3MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjE0NzMtNjIyNTIsIDYyMjU1LTYyNDY0CisgIEZyZWUgaW5vZGVzOiAxNTM2MS0xNTYxNgorR3JvdXAgNjE6IChCbG9ja3MgNjI0NjUtNjM0ODgpCisgIEJsb2NrIGJpdG1hcCBhdCA2MzI5MCAoKzgyNSksIElub2RlIGJpdG1hcCBhdCA2MzI5MSAoKzgyNikKKyAgSW5vZGUgdGFibGUgYXQgNjI0NjUtNjI0OTYKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDYyNDk3LTYzMjg5LCA2MzI5Mi02MzQ4OAorICBGcmVlIGlub2RlczogMTU2MTctMTU4NzIKK0dyb3VwIDYyOiAoQmxvY2tzIDYzNDg5LTY0NTEyKQorICBCbG9jayBiaXRtYXAgYXQgNjQzMjcgKCs4MzgpLCBJbm9kZSBiaXRtYXAgYXQgNjQzMjggKCs4MzkpCisgIElub2RlIHRhYmxlIGF0IDYzNDg5LTYzNTIwCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MzUyMS02NDMyNiwgNjQzMjktNjQ1MTIKKyAgRnJlZSBpbm9kZXM6IDE1ODczLTE2MTI4CitHcm91cCA2MzogKEJsb2NrcyA2NDUxMy02NTUzNikKKyAgQmxvY2sgYml0bWFwIGF0IDY1MzY0ICgrODUxKSwgSW5vZGUgYml0bWFwIGF0IDY1MzY1ICgrODUyKQorICBJbm9kZSB0YWJsZSBhdCA2NDUxMy02NDU0NAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjQ1NDUtNjUzNjMsIDY1MzY2LTY1NTM2CisgIEZyZWUgaW5vZGVzOiAxNjEyOS0xNjM4NAorR3JvdXAgNjQ6IChCbG9ja3MgNjU1MzctNjY1NjApCisgIEJsb2NrIGJpdG1hcCBhdCA2NjQwMSAoKzg2NCksIElub2RlIGJpdG1hcCBhdCA2NjQwMiAoKzg2NSkKKyAgSW5vZGUgdGFibGUgYXQgNjU1MzctNjU1NjgKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY1NTY5LTY2NDAwLCA2NjQwMy02NjU2MAorICBGcmVlIGlub2RlczogMTYzODUtMTY2NDAKK0dyb3VwIDY1OiAoQmxvY2tzIDY2NTYxLTY3NTg0KQorICBCbG9jayBiaXRtYXAgYXQgNjc0MzggKCs4NzcpLCBJbm9kZSBiaXRtYXAgYXQgNjc0MzkgKCs4NzgpCisgIElub2RlIHRhYmxlIGF0IDY2NTYxLTY2NTkyCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NjU5My02NzQzNywgNjc0NDAtNjc1ODQKKyAgRnJlZSBpbm9kZXM6IDE2NjQxLTE2ODk2CitHcm91cCA2NjogKEJsb2NrcyA2NzU4NS02ODYwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDY4NDc1ICgrODkwKSwgSW5vZGUgYml0bWFwIGF0IDY4NDc2ICgrODkxKQorICBJbm9kZSB0YWJsZSBhdCA2NzU4NS02NzYxNgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjc2MTctNjg0NzQsIDY4NDc3LTY4NjA4CisgIEZyZWUgaW5vZGVzOiAxNjg5Ny0xNzE1MgorR3JvdXAgNjc6IChCbG9ja3MgNjg2MDktNjk2MzIpCisgIEJsb2NrIGJpdG1hcCBhdCA2OTUxMiAoKzkwMyksIElub2RlIGJpdG1hcCBhdCA2OTUxMyAoKzkwNCkKKyAgSW5vZGUgdGFibGUgYXQgNjg2MDktNjg2NDAKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY4NjQxLTY5NTExLCA2OTUxNC02OTYzMgorICBGcmVlIGlub2RlczogMTcxNTMtMTc0MDgKK0dyb3VwIDY4OiAoQmxvY2tzIDY5NjMzLTcwNjU2KQorICBCbG9jayBiaXRtYXAgYXQgNzA1NDkgKCs5MTYpLCBJbm9kZSBiaXRtYXAgYXQgNzA1NTAgKCs5MTcpCisgIElub2RlIHRhYmxlIGF0IDY5NjMzLTY5NjY0CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2OTY2NS03MDU0OCwgNzA1NTEtNzA2NTYKKyAgRnJlZSBpbm9kZXM6IDE3NDA5LTE3NjY0CitHcm91cCA2OTogKEJsb2NrcyA3MDY1Ny03MTY4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDcxNTg2ICgrOTI5KSwgSW5vZGUgYml0bWFwIGF0IDcxNTg3ICgrOTMwKQorICBJbm9kZSB0YWJsZSBhdCA3MDY1Ny03MDY4OAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzA2ODktNzE1ODUsIDcxNTg4LTcxNjgwCisgIEZyZWUgaW5vZGVzOiAxNzY2NS0xNzkyMAorR3JvdXAgNzA6IChCbG9ja3MgNzE2ODEtNzI3MDQpCisgIEJsb2NrIGJpdG1hcCBhdCA3MjYyMyAoKzk0MiksIElub2RlIGJpdG1hcCBhdCA3MjYyNCAoKzk0MykKKyAgSW5vZGUgdGFibGUgYXQgNzE2ODEtNzE3MTIKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcxNzEzLTcyNjIyLCA3MjYyNS03MjcwNAorICBGcmVlIGlub2RlczogMTc5MjEtMTgxNzYKK0dyb3VwIDcxOiAoQmxvY2tzIDcyNzA1LTczNzI4KQorICBCbG9jayBiaXRtYXAgYXQgNzM2NjAgKCs5NTUpLCBJbm9kZSBiaXRtYXAgYXQgNzM2NjEgKCs5NTYpCisgIElub2RlIHRhYmxlIGF0IDcyNzA1LTcyNzM2CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MjczNy03MzY1OSwgNzM2NjItNzM3MjgKKyAgRnJlZSBpbm9kZXM6IDE4MTc3LTE4NDMyCitHcm91cCA3MjogKEJsb2NrcyA3MzcyOS03NDc1MikKKyAgQmxvY2sgYml0bWFwIGF0IDc0Njk3ICgrOTY4KSwgSW5vZGUgYml0bWFwIGF0IDc0Njk4ICgrOTY5KQorICBJbm9kZSB0YWJsZSBhdCA3MzcyOS03Mzc2MAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzM3NjEtNzQ2OTYsIDc0Njk5LTc0NzUyCisgIEZyZWUgaW5vZGVzOiAxODQzMy0xODY4OAorR3JvdXAgNzM6IChCbG9ja3MgNzQ3NTMtNzU3NzYpCisgIEJsb2NrIGJpdG1hcCBhdCA3NTczNCAoKzk4MSksIElub2RlIGJpdG1hcCBhdCA3NTczNSAoKzk4MikKKyAgSW5vZGUgdGFibGUgYXQgNzQ3NTMtNzQ3ODQKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc0Nzg1LTc1NzMzLCA3NTczNi03NTc3NgorICBGcmVlIGlub2RlczogMTg2ODktMTg5NDQKK0dyb3VwIDc0OiAoQmxvY2tzIDc1Nzc3LTc2ODAwKQorICBCbG9jayBiaXRtYXAgYXQgNzY3NzEgKCs5OTQpLCBJbm9kZSBiaXRtYXAgYXQgNzY3NzIgKCs5OTUpCisgIElub2RlIHRhYmxlIGF0IDc1Nzc3LTc1ODA4CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NTgwOS03Njc3MCwgNzY3NzMtNzY4MDAKKyAgRnJlZSBpbm9kZXM6IDE4OTQ1LTE5MjAwCitHcm91cCA3NTogKEJsb2NrcyA3NjgwMS03NzgyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDc3ODA4ICgrMTAwNyksIElub2RlIGJpdG1hcCBhdCA3NzgwOSAoKzEwMDgpCisgIElub2RlIHRhYmxlIGF0IDc2ODAxLTc2ODMyCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NjgzMy03NzgwNywgNzc4MTAtNzc4MjQKKyAgRnJlZSBpbm9kZXM6IDE5MjAxLTE5NDU2CitHcm91cCA3NjogKEJsb2NrcyA3NzgyNS03ODg0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDc4ODQ1ICgrMTAyMCksIElub2RlIGJpdG1hcCBhdCA3ODg0NiAoKzEwMjEpCisgIElub2RlIHRhYmxlIGF0IDc3ODI1LTc3ODU2CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3Nzg1Ny03ODg0NCwgNzg4NDctNzg4NDgKKyAgRnJlZSBpbm9kZXM6IDE5NDU3LTE5NzEyCitHcm91cCA3NzogKEJsb2NrcyA3ODg0OS03OTg3MikKKyAgQmxvY2sgYml0bWFwIGF0IDc4ODkwICgrNDEpLCBJbm9kZSBiaXRtYXAgYXQgNzg4OTEgKCs0MikKKyAgSW5vZGUgdGFibGUgYXQgNzg4NDktNzg4ODAKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc4ODgxLTc4ODg5LCA3ODg5Mi03OTg3MgorICBGcmVlIGlub2RlczogMTk3MTMtMTk5NjgKK0dyb3VwIDc4OiAoQmxvY2tzIDc5ODczLTgwODk2KQorICBCbG9jayBiaXRtYXAgYXQgNzk5MjcgKCs1NCksIElub2RlIGJpdG1hcCBhdCA3OTkyOCAoKzU1KQorICBJbm9kZSB0YWJsZSBhdCA3OTg3My03OTkwNAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzk5MDUtNzk5MjYsIDc5OTI5LTgwODk2CisgIEZyZWUgaW5vZGVzOiAxOTk2OS0yMDIyNAorR3JvdXAgNzk6IChCbG9ja3MgODA4OTctODE5MjApCisgIEJsb2NrIGJpdG1hcCBhdCA4MDk2NCAoKzY3KSwgSW5vZGUgYml0bWFwIGF0IDgwOTY1ICgrNjgpCisgIElub2RlIHRhYmxlIGF0IDgwODk3LTgwOTI4CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4MDkyOS04MDk2MywgODA5NjYtODE5MjAKKyAgRnJlZSBpbm9kZXM6IDIwMjI1LTIwNDgwCitHcm91cCA4MDogKEJsb2NrcyA4MTkyMS04Mjk0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDgyMDAxICgrODApLCBJbm9kZSBiaXRtYXAgYXQgODIwMDIgKCs4MSkKKyAgSW5vZGUgdGFibGUgYXQgODE5MjEtODE5NTIKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgxOTUzLTgyMDAwLCA4MjAwMy04Mjk0NAorICBGcmVlIGlub2RlczogMjA0ODEtMjA3MzYKK0dyb3VwIDgxOiAoQmxvY2tzIDgyOTQ1LTgzOTY4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA4Mjk0NSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgODI5NDYtODI5NDkKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA4Mjk1MC04MzIwNQorICBCbG9jayBiaXRtYXAgYXQgODM1NjAgKCs2MTUpLCBJbm9kZSBiaXRtYXAgYXQgODM1NjEgKCs2MTYpCisgIElub2RlIHRhYmxlIGF0IDgzMjA2LTgzMjM3ICgrMjYxKQorICA3MjkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODMyMzgtODM1NTksIDgzNTYyLTgzOTY4CisgIEZyZWUgaW5vZGVzOiAyMDczNy0yMDk5MgorR3JvdXAgODI6IChCbG9ja3MgODM5NjktODQ5OTIpCisgIEJsb2NrIGJpdG1hcCBhdCA4NDA3NSAoKzEwNiksIElub2RlIGJpdG1hcCBhdCA4NDA3NiAoKzEwNykKKyAgSW5vZGUgdGFibGUgYXQgODM5NjktODQwMDAKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg0MDAxLTg0MDc0LCA4NDA3Ny04NDk5MgorICBGcmVlIGlub2RlczogMjA5OTMtMjEyNDgKK0dyb3VwIDgzOiAoQmxvY2tzIDg0OTkzLTg2MDE2KQorICBCbG9jayBiaXRtYXAgYXQgODUxMTIgKCsxMTkpLCBJbm9kZSBiaXRtYXAgYXQgODUxMTMgKCsxMjApCisgIElub2RlIHRhYmxlIGF0IDg0OTkzLTg1MDI0CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NTAyNS04NTExMSwgODUxMTQtODYwMTYKKyAgRnJlZSBpbm9kZXM6IDIxMjQ5LTIxNTA0CitHcm91cCA4NDogKEJsb2NrcyA4NjAxNy04NzA0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDg2MTQ5ICgrMTMyKSwgSW5vZGUgYml0bWFwIGF0IDg2MTUwICgrMTMzKQorICBJbm9kZSB0YWJsZSBhdCA4NjAxNy04NjA0OAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODYwNDktODYxNDgsIDg2MTUxLTg3MDQwCisgIEZyZWUgaW5vZGVzOiAyMTUwNS0yMTc2MAorR3JvdXAgODU6IChCbG9ja3MgODcwNDEtODgwNjQpCisgIEJsb2NrIGJpdG1hcCBhdCA4NzE4NiAoKzE0NSksIElub2RlIGJpdG1hcCBhdCA4NzE4NyAoKzE0NikKKyAgSW5vZGUgdGFibGUgYXQgODcwNDEtODcwNzIKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg3MDczLTg3MTg1LCA4NzE4OC04ODA2NAorICBGcmVlIGlub2RlczogMjE3NjEtMjIwMTYKK0dyb3VwIDg2OiAoQmxvY2tzIDg4MDY1LTg5MDg4KQorICBCbG9jayBiaXRtYXAgYXQgODgyMjMgKCsxNTgpLCBJbm9kZSBiaXRtYXAgYXQgODgyMjQgKCsxNTkpCisgIElub2RlIHRhYmxlIGF0IDg4MDY1LTg4MDk2CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4ODA5Ny04ODIyMiwgODgyMjUtODkwODgKKyAgRnJlZSBpbm9kZXM6IDIyMDE3LTIyMjcyCitHcm91cCA4NzogKEJsb2NrcyA4OTA4OS05MDExMikKKyAgQmxvY2sgYml0bWFwIGF0IDg5MjYwICgrMTcxKSwgSW5vZGUgYml0bWFwIGF0IDg5MjYxICgrMTcyKQorICBJbm9kZSB0YWJsZSBhdCA4OTA4OS04OTEyMAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODkxMjEtODkyNTksIDg5MjYyLTkwMTEyCisgIEZyZWUgaW5vZGVzOiAyMjI3My0yMjUyOAorR3JvdXAgODg6IChCbG9ja3MgOTAxMTMtOTExMzYpCisgIEJsb2NrIGJpdG1hcCBhdCA5MDI5NyAoKzE4NCksIElub2RlIGJpdG1hcCBhdCA5MDI5OCAoKzE4NSkKKyAgSW5vZGUgdGFibGUgYXQgOTAxMTMtOTAxNDQKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkwMTQ1LTkwMjk2LCA5MDI5OS05MTEzNgorICBGcmVlIGlub2RlczogMjI1MjktMjI3ODQKK0dyb3VwIDg5OiAoQmxvY2tzIDkxMTM3LTkyMTYwKQorICBCbG9jayBiaXRtYXAgYXQgOTEzMzQgKCsxOTcpLCBJbm9kZSBiaXRtYXAgYXQgOTEzMzUgKCsxOTgpCisgIElub2RlIHRhYmxlIGF0IDkxMTM3LTkxMTY4CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MTE2OS05MTMzMywgOTEzMzYtOTIxNjAKKyAgRnJlZSBpbm9kZXM6IDIyNzg1LTIzMDQwCitHcm91cCA5MDogKEJsb2NrcyA5MjE2MS05MzE4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDkyMzcxICgrMjEwKSwgSW5vZGUgYml0bWFwIGF0IDkyMzcyICgrMjExKQorICBJbm9kZSB0YWJsZSBhdCA5MjE2MS05MjE5MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTIxOTMtOTIzNzAsIDkyMzczLTkzMTg0CisgIEZyZWUgaW5vZGVzOiAyMzA0MS0yMzI5NgorR3JvdXAgOTE6IChCbG9ja3MgOTMxODUtOTQyMDgpCisgIEJsb2NrIGJpdG1hcCBhdCA5MzQwOCAoKzIyMyksIElub2RlIGJpdG1hcCBhdCA5MzQwOSAoKzIyNCkKKyAgSW5vZGUgdGFibGUgYXQgOTMxODUtOTMyMTYKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkzMjE3LTkzNDA3LCA5MzQxMC05NDIwOAorICBGcmVlIGlub2RlczogMjMyOTctMjM1NTIKK0dyb3VwIDkyOiAoQmxvY2tzIDk0MjA5LTk1MjMyKQorICBCbG9jayBiaXRtYXAgYXQgOTQ0NDUgKCsyMzYpLCBJbm9kZSBiaXRtYXAgYXQgOTQ0NDYgKCsyMzcpCisgIElub2RlIHRhYmxlIGF0IDk0MjA5LTk0MjQwCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NDI0MS05NDQ0NCwgOTQ0NDctOTUyMzIKKyAgRnJlZSBpbm9kZXM6IDIzNTUzLTIzODA4CitHcm91cCA5MzogKEJsb2NrcyA5NTIzMy05NjI1NikKKyAgQmxvY2sgYml0bWFwIGF0IDk1NDgyICgrMjQ5KSwgSW5vZGUgYml0bWFwIGF0IDk1NDgzICgrMjUwKQorICBJbm9kZSB0YWJsZSBhdCA5NTIzMy05NTI2NAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTUyNjUtOTU0ODEsIDk1NDg0LTk2MjU2CisgIEZyZWUgaW5vZGVzOiAyMzgwOS0yNDA2NAorR3JvdXAgOTQ6IChCbG9ja3MgOTYyNTctOTcyODApCisgIEJsb2NrIGJpdG1hcCBhdCA5NjUxOSAoKzI2MiksIElub2RlIGJpdG1hcCBhdCA5NjUyMCAoKzI2MykKKyAgSW5vZGUgdGFibGUgYXQgOTYyNTctOTYyODgKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk2Mjg5LTk2NTE4LCA5NjUyMS05NzI4MAorICBGcmVlIGlub2RlczogMjQwNjUtMjQzMjAKK0dyb3VwIDk1OiAoQmxvY2tzIDk3MjgxLTk4MzA0KQorICBCbG9jayBiaXRtYXAgYXQgOTc1NTYgKCsyNzUpLCBJbm9kZSBiaXRtYXAgYXQgOTc1NTcgKCsyNzYpCisgIElub2RlIHRhYmxlIGF0IDk3MjgxLTk3MzEyCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NzMxMy05NzU1NSwgOTc1NTgtOTgzMDQKKyAgRnJlZSBpbm9kZXM6IDI0MzIxLTI0NTc2CitHcm91cCA5NjogKEJsb2NrcyA5ODMwNS05OTMyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDk4NTkzICgrMjg4KSwgSW5vZGUgYml0bWFwIGF0IDk4NTk0ICgrMjg5KQorICBJbm9kZSB0YWJsZSBhdCA5ODMwNS05ODMzNgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTgzMzctOTg1OTIsIDk4NTk1LTk5MzI4CisgIEZyZWUgaW5vZGVzOiAyNDU3Ny0yNDgzMgorR3JvdXAgOTc6IChCbG9ja3MgOTkzMjktMTAwMzUyKQorICBCbG9jayBiaXRtYXAgYXQgOTk2MzAgKCszMDEpLCBJbm9kZSBiaXRtYXAgYXQgOTk2MzEgKCszMDIpCisgIElub2RlIHRhYmxlIGF0IDk5MzI5LTk5MzYwCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5OTM2MS05OTYyOSwgOTk2MzItMTAwMzUyCisgIEZyZWUgaW5vZGVzOiAyNDgzMy0yNTA4OAorR3JvdXAgOTg6IChCbG9ja3MgMTAwMzUzLTEwMTM3NikKKyAgQmxvY2sgYml0bWFwIGF0IDEwMDY2NyAoKzMxNCksIElub2RlIGJpdG1hcCBhdCAxMDA2NjggKCszMTUpCisgIElub2RlIHRhYmxlIGF0IDEwMDM1My0xMDAzODQKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMDM4NS0xMDA2NjYsIDEwMDY2OS0xMDEzNzYKKyAgRnJlZSBpbm9kZXM6IDI1MDg5LTI1MzQ0CitHcm91cCA5OTogKEJsb2NrcyAxMDEzNzctMTAyNDAwKQorICBCbG9jayBiaXRtYXAgYXQgMTAxNzA0ICgrMzI3KSwgSW5vZGUgYml0bWFwIGF0IDEwMTcwNSAoKzMyOCkKKyAgSW5vZGUgdGFibGUgYXQgMTAxMzc3LTEwMTQwOAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAxNDA5LTEwMTcwMywgMTAxNzA2LTEwMjQwMAorICBGcmVlIGlub2RlczogMjUzNDUtMjU2MDAKK0dyb3VwIDEwMDogKEJsb2NrcyAxMDI0MDEtMTAzNDI0KQorICBCbG9jayBiaXRtYXAgYXQgMTAyNzQxICgrMzQwKSwgSW5vZGUgYml0bWFwIGF0IDEwMjc0MiAoKzM0MSkKKyAgSW5vZGUgdGFibGUgYXQgMTAyNDAxLTEwMjQzMgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAyNDMzLTEwMjc0MCwgMTAyNzQzLTEwMzQyNAorICBGcmVlIGlub2RlczogMjU2MDEtMjU4NTYKK0dyb3VwIDEwMTogKEJsb2NrcyAxMDM0MjUtMTA0NDQ4KQorICBCbG9jayBiaXRtYXAgYXQgMTAzNzc4ICgrMzUzKSwgSW5vZGUgYml0bWFwIGF0IDEwMzc3OSAoKzM1NCkKKyAgSW5vZGUgdGFibGUgYXQgMTAzNDI1LTEwMzQ1NgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAzNDU3LTEwMzc3NywgMTAzNzgwLTEwNDQ0OAorICBGcmVlIGlub2RlczogMjU4NTctMjYxMTIKK0dyb3VwIDEwMjogKEJsb2NrcyAxMDQ0NDktMTA1NDcyKQorICBCbG9jayBiaXRtYXAgYXQgMTA0ODE1ICgrMzY2KSwgSW5vZGUgYml0bWFwIGF0IDEwNDgxNiAoKzM2NykKKyAgSW5vZGUgdGFibGUgYXQgMTA0NDQ5LTEwNDQ4MAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA0NDgxLTEwNDgxNCwgMTA0ODE3LTEwNTQ3MgorICBGcmVlIGlub2RlczogMjYxMTMtMjYzNjgKK0dyb3VwIDEwMzogKEJsb2NrcyAxMDU0NzMtMTA2NDk2KQorICBCbG9jayBiaXRtYXAgYXQgMTA1ODUyICgrMzc5KSwgSW5vZGUgYml0bWFwIGF0IDEwNTg1MyAoKzM4MCkKKyAgSW5vZGUgdGFibGUgYXQgMTA1NDczLTEwNTUwNAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA1NTA1LTEwNTg1MSwgMTA1ODU0LTEwNjQ5NgorICBGcmVlIGlub2RlczogMjYzNjktMjY2MjQKK0dyb3VwIDEwNDogKEJsb2NrcyAxMDY0OTctMTA3NTIwKQorICBCbG9jayBiaXRtYXAgYXQgMTA2ODg5ICgrMzkyKSwgSW5vZGUgYml0bWFwIGF0IDEwNjg5MCAoKzM5MykKKyAgSW5vZGUgdGFibGUgYXQgMTA2NDk3LTEwNjUyOAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA2NTI5LTEwNjg4OCwgMTA2ODkxLTEwNzUyMAorICBGcmVlIGlub2RlczogMjY2MjUtMjY4ODAKK0dyb3VwIDEwNTogKEJsb2NrcyAxMDc1MjEtMTA4NTQ0KQorICBCbG9jayBiaXRtYXAgYXQgMTA3OTI2ICgrNDA1KSwgSW5vZGUgYml0bWFwIGF0IDEwNzkyNyAoKzQwNikKKyAgSW5vZGUgdGFibGUgYXQgMTA3NTIxLTEwNzU1MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA3NTUzLTEwNzkyNSwgMTA3OTI4LTEwODU0NAorICBGcmVlIGlub2RlczogMjY4ODEtMjcxMzYKK0dyb3VwIDEwNjogKEJsb2NrcyAxMDg1NDUtMTA5NTY4KQorICBCbG9jayBiaXRtYXAgYXQgMTA4OTYzICgrNDE4KSwgSW5vZGUgYml0bWFwIGF0IDEwODk2NCAoKzQxOSkKKyAgSW5vZGUgdGFibGUgYXQgMTA4NTQ1LTEwODU3NgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA4NTc3LTEwODk2MiwgMTA4OTY1LTEwOTU2OAorICBGcmVlIGlub2RlczogMjcxMzctMjczOTIKK0dyb3VwIDEwNzogKEJsb2NrcyAxMDk1NjktMTEwNTkyKQorICBCbG9jayBiaXRtYXAgYXQgMTEwMDAwICgrNDMxKSwgSW5vZGUgYml0bWFwIGF0IDExMDAwMSAoKzQzMikKKyAgSW5vZGUgdGFibGUgYXQgMTA5NTY5LTEwOTYwMAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA5NjAxLTEwOTk5OSwgMTEwMDAyLTExMDU5MgorICBGcmVlIGlub2RlczogMjczOTMtMjc2NDgKK0dyb3VwIDEwODogKEJsb2NrcyAxMTA1OTMtMTExNjE2KQorICBCbG9jayBiaXRtYXAgYXQgMTExMDM3ICgrNDQ0KSwgSW5vZGUgYml0bWFwIGF0IDExMTAzOCAoKzQ0NSkKKyAgSW5vZGUgdGFibGUgYXQgMTEwNTkzLTExMDYyNAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEwNjI1LTExMTAzNiwgMTExMDM5LTExMTYxNgorICBGcmVlIGlub2RlczogMjc2NDktMjc5MDQKK0dyb3VwIDEwOTogKEJsb2NrcyAxMTE2MTctMTEyNjQwKQorICBCbG9jayBiaXRtYXAgYXQgMTEyMDc0ICgrNDU3KSwgSW5vZGUgYml0bWFwIGF0IDExMjA3NSAoKzQ1OCkKKyAgSW5vZGUgdGFibGUgYXQgMTExNjE3LTExMTY0OAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTExNjQ5LTExMjA3MywgMTEyMDc2LTExMjY0MAorICBGcmVlIGlub2RlczogMjc5MDUtMjgxNjAKK0dyb3VwIDExMDogKEJsb2NrcyAxMTI2NDEtMTEzNjY0KQorICBCbG9jayBiaXRtYXAgYXQgMTEzMTExICgrNDcwKSwgSW5vZGUgYml0bWFwIGF0IDExMzExMiAoKzQ3MSkKKyAgSW5vZGUgdGFibGUgYXQgMTEyNjQxLTExMjY3MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEyNjczLTExMzExMCwgMTEzMTEzLTExMzY2NAorICBGcmVlIGlub2RlczogMjgxNjEtMjg0MTYKK0dyb3VwIDExMTogKEJsb2NrcyAxMTM2NjUtMTE0Njg4KQorICBCbG9jayBiaXRtYXAgYXQgMTE0MTQ4ICgrNDgzKSwgSW5vZGUgYml0bWFwIGF0IDExNDE0OSAoKzQ4NCkKKyAgSW5vZGUgdGFibGUgYXQgMTEzNjY1LTExMzY5NgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEzNjk3LTExNDE0NywgMTE0MTUwLTExNDY4OAorICBGcmVlIGlub2RlczogMjg0MTctMjg2NzIKK0dyb3VwIDExMjogKEJsb2NrcyAxMTQ2ODktMTE1NzEyKQorICBCbG9jayBiaXRtYXAgYXQgMTE1MTg1ICgrNDk2KSwgSW5vZGUgYml0bWFwIGF0IDExNTE4NiAoKzQ5NykKKyAgSW5vZGUgdGFibGUgYXQgMTE0Njg5LTExNDcyMAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE0NzIxLTExNTE4NCwgMTE1MTg3LTExNTcxMgorICBGcmVlIGlub2RlczogMjg2NzMtMjg5MjgKK0dyb3VwIDExMzogKEJsb2NrcyAxMTU3MTMtMTE2NzM2KQorICBCbG9jayBiaXRtYXAgYXQgMTE2MjIyICgrNTA5KSwgSW5vZGUgYml0bWFwIGF0IDExNjIyMyAoKzUxMCkKKyAgSW5vZGUgdGFibGUgYXQgMTE1NzEzLTExNTc0NAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE1NzQ1LTExNjIyMSwgMTE2MjI0LTExNjczNgorICBGcmVlIGlub2RlczogMjg5MjktMjkxODQKK0dyb3VwIDExNDogKEJsb2NrcyAxMTY3MzctMTE3NzYwKQorICBCbG9jayBiaXRtYXAgYXQgMTE3MjU5ICgrNTIyKSwgSW5vZGUgYml0bWFwIGF0IDExNzI2MCAoKzUyMykKKyAgSW5vZGUgdGFibGUgYXQgMTE2NzM3LTExNjc2OAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE2NzY5LTExNzI1OCwgMTE3MjYxLTExNzc2MAorICBGcmVlIGlub2RlczogMjkxODUtMjk0NDAKK0dyb3VwIDExNTogKEJsb2NrcyAxMTc3NjEtMTE4Nzg0KQorICBCbG9jayBiaXRtYXAgYXQgMTE4Mjk2ICgrNTM1KSwgSW5vZGUgYml0bWFwIGF0IDExODI5NyAoKzUzNikKKyAgSW5vZGUgdGFibGUgYXQgMTE3NzYxLTExNzc5MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE3NzkzLTExODI5NSwgMTE4Mjk4LTExODc4NAorICBGcmVlIGlub2RlczogMjk0NDEtMjk2OTYKK0dyb3VwIDExNjogKEJsb2NrcyAxMTg3ODUtMTE5ODA4KQorICBCbG9jayBiaXRtYXAgYXQgMTE5MzMzICgrNTQ4KSwgSW5vZGUgYml0bWFwIGF0IDExOTMzNCAoKzU0OSkKKyAgSW5vZGUgdGFibGUgYXQgMTE4Nzg1LTExODgxNgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE4ODE3LTExOTMzMiwgMTE5MzM1LTExOTgwOAorICBGcmVlIGlub2RlczogMjk2OTctMjk5NTIKK0dyb3VwIDExNzogKEJsb2NrcyAxMTk4MDktMTIwODMyKQorICBCbG9jayBiaXRtYXAgYXQgMTIwMzcwICgrNTYxKSwgSW5vZGUgYml0bWFwIGF0IDEyMDM3MSAoKzU2MikKKyAgSW5vZGUgdGFibGUgYXQgMTE5ODA5LTExOTg0MAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE5ODQxLTEyMDM2OSwgMTIwMzcyLTEyMDgzMgorICBGcmVlIGlub2RlczogMjk5NTMtMzAyMDgKK0dyb3VwIDExODogKEJsb2NrcyAxMjA4MzMtMTIxODU2KQorICBCbG9jayBiaXRtYXAgYXQgMTIxNDA3ICgrNTc0KSwgSW5vZGUgYml0bWFwIGF0IDEyMTQwOCAoKzU3NSkKKyAgSW5vZGUgdGFibGUgYXQgMTIwODMzLTEyMDg2NAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIwODY1LTEyMTQwNiwgMTIxNDA5LTEyMTg1NgorICBGcmVlIGlub2RlczogMzAyMDktMzA0NjQKK0dyb3VwIDExOTogKEJsb2NrcyAxMjE4NTctMTIyODgwKQorICBCbG9jayBiaXRtYXAgYXQgMTIyNDQ0ICgrNTg3KSwgSW5vZGUgYml0bWFwIGF0IDEyMjQ0NSAoKzU4OCkKKyAgSW5vZGUgdGFibGUgYXQgMTIxODU3LTEyMTg4OAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIxODg5LTEyMjQ0MywgMTIyNDQ2LTEyMjg4MAorICBGcmVlIGlub2RlczogMzA0NjUtMzA3MjAKK0dyb3VwIDEyMDogKEJsb2NrcyAxMjI4ODEtMTIzOTA0KQorICBCbG9jayBiaXRtYXAgYXQgMTIzNDgxICgrNjAwKSwgSW5vZGUgYml0bWFwIGF0IDEyMzQ4MiAoKzYwMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIyODgxLTEyMjkxMgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIyOTEzLTEyMzQ4MCwgMTIzNDgzLTEyMzkwNAorICBGcmVlIGlub2RlczogMzA3MjEtMzA5NzYKK0dyb3VwIDEyMTogKEJsb2NrcyAxMjM5MDUtMTI0OTI4KQorICBCbG9jayBiaXRtYXAgYXQgMTI0NTE4ICgrNjEzKSwgSW5vZGUgYml0bWFwIGF0IDEyNDUxOSAoKzYxNCkKKyAgSW5vZGUgdGFibGUgYXQgMTIzOTA1LTEyMzkzNgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIzOTM3LTEyNDUxNywgMTI0NTIwLTEyNDkyOAorICBGcmVlIGlub2RlczogMzA5NzctMzEyMzIKK0dyb3VwIDEyMjogKEJsb2NrcyAxMjQ5MjktMTI1OTUyKQorICBCbG9jayBiaXRtYXAgYXQgMTI1NTU1ICgrNjI2KSwgSW5vZGUgYml0bWFwIGF0IDEyNTU1NiAoKzYyNykKKyAgSW5vZGUgdGFibGUgYXQgMTI0OTI5LTEyNDk2MAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI0OTYxLTEyNTU1NCwgMTI1NTU3LTEyNTk1MgorICBGcmVlIGlub2RlczogMzEyMzMtMzE0ODgKK0dyb3VwIDEyMzogKEJsb2NrcyAxMjU5NTMtMTI2OTc2KQorICBCbG9jayBiaXRtYXAgYXQgMTI2NTkyICgrNjM5KSwgSW5vZGUgYml0bWFwIGF0IDEyNjU5MyAoKzY0MCkKKyAgSW5vZGUgdGFibGUgYXQgMTI1OTUzLTEyNTk4NAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI1OTg1LTEyNjU5MSwgMTI2NTk0LTEyNjk3NgorICBGcmVlIGlub2RlczogMzE0ODktMzE3NDQKK0dyb3VwIDEyNDogKEJsb2NrcyAxMjY5NzctMTI4MDAwKQorICBCbG9jayBiaXRtYXAgYXQgMTI3NjI5ICgrNjUyKSwgSW5vZGUgYml0bWFwIGF0IDEyNzYzMCAoKzY1MykKKyAgSW5vZGUgdGFibGUgYXQgMTI2OTc3LTEyNzAwOAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI3MDA5LTEyNzYyOCwgMTI3NjMxLTEyODAwMAorICBGcmVlIGlub2RlczogMzE3NDUtMzIwMDAKK0dyb3VwIDEyNTogKEJsb2NrcyAxMjgwMDEtMTI5MDI0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxMjgwMDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEyODAwMi0xMjgwMDUKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAxMjgwMDYtMTI4MjYxCisgIEJsb2NrIGJpdG1hcCBhdCAxMjg0NTcgKCs0NTYpLCBJbm9kZSBiaXRtYXAgYXQgMTI4NDU4ICgrNDU3KQorICBJbm9kZSB0YWJsZSBhdCAxMjgyNjItMTI4MjkzICgrMjYxKQorICA3MjkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI4Mjk0LTEyODQ1NiwgMTI4NDU5LTEyOTAyNAorICBGcmVlIGlub2RlczogMzIwMDEtMzIyNTYKK0dyb3VwIDEyNjogKEJsb2NrcyAxMjkwMjUtMTMwMDQ4KQorICBCbG9jayBiaXRtYXAgYXQgMTI5NzAzICgrNjc4KSwgSW5vZGUgYml0bWFwIGF0IDEyOTcwNCAoKzY3OSkKKyAgSW5vZGUgdGFibGUgYXQgMTI5MDI1LTEyOTA1NgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI5MDU3LTEyOTcwMiwgMTI5NzA1LTEzMDA0OAorICBGcmVlIGlub2RlczogMzIyNTctMzI1MTIKK0dyb3VwIDEyNzogKEJsb2NrcyAxMzAwNDktMTMxMDcxKQorICBCbG9jayBiaXRtYXAgYXQgMTMwNzQxICgrNjkyKSwgSW5vZGUgYml0bWFwIGF0IDEzMDc0MiAoKzY5MykKKyAgSW5vZGUgdGFibGUgYXQgMTMwMDQ5LTEzMDA4MAorICA5ODkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMwMDgxLTEzMDc0MCwgMTMwNzQzLTEzMTA3MQorICBGcmVlIGlub2RlczogMzI1MTMtMzI3NjgKZGlmZiAtLWdpdCBhL3Rlc3RzL21fcmFpZF9vcHQvc2NyaXB0IGIvdGVzdHMvbV9yYWlkX29wdC9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2ZmU5NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21fcmFpZF9vcHQvc2NyaXB0CkBAIC0wLDAgKzEsNCBAQAorREVTQ1JJUFRJT049InJhaWQgb3B0aW9ucyIKK0ZTX1NJWkU9MTMxMDcyCitNS0UyRlNfT1BUUz0iLUUgc3RyaWRlPTEzIC1PIHNwYXJzZV9zdXBlciAtZyAxMDI0IgorLiAkY21kX2Rpci9ydW5fbWtlMmZzCmRpZmYgLS1naXQgYS90ZXN0cy9tX3Jvb3Rfb3duZXIvZXhwZWN0LjEgYi90ZXN0cy9tX3Jvb3Rfb3duZXIvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5NDk5MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21fcm9vdF9vd25lci9leHBlY3QuMQpAQCAtMCwwICsxLDUzIEBACitDcmVhdGluZyBmaWxlc3lzdGVtIHdpdGggMTAyNCAxayBibG9ja3MgYW5kIDEyOCBpbm9kZXMKKworQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICAgIAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitXcml0aW5nIGlub2RlIHRhYmxlczogICAgCAgIZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dyaXRpbmcgc3VwZXJibG9ja3MgYW5kIGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogICAgCAgIZG9uZQorCitGaWxlc3lzdGVtIGZlYXR1cmVzOiBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIHNwYXJzZV9zdXBlcgorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMTI4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMzgvMTAyNCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKK0ZpbGVzeXN0ZW0gdm9sdW1lIG5hbWU6ICAgPG5vbmU+CitMYXN0IG1vdW50ZWQgb246ICAgICAgICAgIDxub3QgYXZhaWxhYmxlPgorRmlsZXN5c3RlbSBtYWdpYyBudW1iZXI6ICAweEVGNTMKK0ZpbGVzeXN0ZW0gcmV2aXNpb24gIzogICAgMSAoZHluYW1pYykKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6ICAgICAgZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBzcGFyc2Vfc3VwZXIKK0RlZmF1bHQgbW91bnQgb3B0aW9uczogICAgKG5vbmUpCitGaWxlc3lzdGVtIHN0YXRlOiAgICAgICAgIGNsZWFuCitFcnJvcnMgYmVoYXZpb3I6ICAgICAgICAgIENvbnRpbnVlCitGaWxlc3lzdGVtIE9TIHR5cGU6ICAgICAgIExpbnV4CitJbm9kZSBjb3VudDogICAgICAgICAgICAgIDEyOAorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICAxMDI0CitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDUxCitGcmVlIGJsb2NrczogICAgICAgICAgICAgIDk4NgorRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICAxMTcKK0ZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgMQorQmxvY2sgc2l6ZTogICAgICAgICAgICAgICAxMDI0CitGcmFnbWVudCBzaXplOiAgICAgICAgICAgIDEwMjQKK1Jlc2VydmVkIEdEVCBibG9ja3M6ICAgICAgMworQmxvY2tzIHBlciBncm91cDogICAgICAgICA4MTkyCitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDgxOTIKK0lub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgMTI4CitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDE2CitNb3VudCBjb3VudDogICAgICAgICAgICAgIDAKK0NoZWNrIGludGVydmFsOiAgICAgICAgICAgMTU1NTIwMDAgKDYgbW9udGhzKQorUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAwCitSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgIDAKK0ZpcnN0IGlub2RlOiAgICAgICAgICAgICAgMTEKK0lub2RlIHNpemU6CSAgICAgICAgICAxMjgKK0RlZmF1bHQgZGlyZWN0b3J5IGhhc2g6ICAgaGFsZl9tZDQKKworCitHcm91cCAwOiAoQmxvY2tzIDEtMTAyMykKKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDItMgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDMtNQorICBCbG9jayBiaXRtYXAgYXQgNiAoKzUpLCBJbm9kZSBiaXRtYXAgYXQgNyAoKzYpCisgIElub2RlIHRhYmxlIGF0IDgtMjMgKCs3KQorICA5ODYgZnJlZSBibG9ja3MsIDExNyBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzgtMTAyMworICBGcmVlIGlub2RlczogMTItMTI4CmRpZmYgLS1naXQgYS90ZXN0cy9tX3Jvb3Rfb3duZXIvc2NyaXB0IGIvdGVzdHMvbV9yb290X293bmVyL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmM1ZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbV9yb290X293bmVyL3NjcmlwdApAQCAtMCwwICsxLDQgQEAKK0RFU0NSSVBUSU9OPSJyb290IGRpcmVjdG9yeSBvd25lciIKK0ZTX1NJWkU9MTAyNAorTUtFMkZTX09QVFM9Ii1FIHJvb3Rfb3duZXI9MTIzNDoxMjM0IgorLiAkY21kX2Rpci9ydW5fbWtlMmZzCmRpZmYgLS1naXQgYS90ZXN0cy9tX3N0ZC9leHBlY3QuMSBiL3Rlc3RzL21fc3RkL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNTAzMWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tX3N0ZC9leHBlY3QuMQpAQCAtMCwwICsxLDEwNSBAQAorQ3JlYXRpbmcgZmlsZXN5c3RlbSB3aXRoIDY1NTM2IDFrIGJsb2NrcyBhbmQgMTYzODQgaW5vZGVzCitTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogCisJODE5MywgMjQ1NzcsIDQwOTYxLCA1NzM0NQorCitBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogICAgCAgIZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dyaXRpbmcgaW5vZGUgdGFibGVzOiAgICAICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAICAhkb25lCisKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6IGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8xNjM4NCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDMzNjQvNjU1MzYgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyCitEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIChub25lKQorRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICBjbGVhbgorRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICBDb250aW51ZQorRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICBMaW51eAorSW5vZGUgY291bnQ6ICAgICAgICAgICAgICAxNjM4NAorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICA2NTUzNgorUmVzZXJ2ZWQgYmxvY2sgY291bnQ6ICAgICAzMjc2CitGcmVlIGJsb2NrczogICAgICAgICAgICAgIDYyMTcyCitGcmVlIGlub2RlczogICAgICAgICAgICAgIDE2MzczCitGaXJzdCBibG9jazogICAgICAgICAgICAgIDEKK0Jsb2NrIHNpemU6ICAgICAgICAgICAgICAgMTAyNAorRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICAxMDI0CitSZXNlcnZlZCBHRFQgYmxvY2tzOiAgICAgIDI1NQorQmxvY2tzIHBlciBncm91cDogICAgICAgICA4MTkyCitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDgxOTIKK0lub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgMjA0OAorSW5vZGUgYmxvY2tzIHBlciBncm91cDogICAyNTYKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMS04MTkyKQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMi0yCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMy0yNTcKKyAgQmxvY2sgYml0bWFwIGF0IDI1OCAoKzI1NyksIElub2RlIGJpdG1hcCBhdCAyNTkgKCsyNTgpCisgIElub2RlIHRhYmxlIGF0IDI2MC01MTUgKCsyNTkpCisgIDc2NjMgZnJlZSBibG9ja3MsIDIwMzcgZnJlZSBpbm9kZXMsIDIgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUzMC04MTkyCisgIEZyZWUgaW5vZGVzOiAxMi0yMDQ4CitHcm91cCAxOiAoQmxvY2tzIDgxOTMtMTYzODQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDgxOTMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDgxOTQtODE5NAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDgxOTUtODQ0OQorICBCbG9jayBiaXRtYXAgYXQgODQ1MCAoKzI1NyksIElub2RlIGJpdG1hcCBhdCA4NDUxICgrMjU4KQorICBJbm9kZSB0YWJsZSBhdCA4NDUyLTg3MDcgKCsyNTkpCisgIDc2NzcgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg3MDgtMTYzODQKKyAgRnJlZSBpbm9kZXM6IDIwNDktNDA5NgorR3JvdXAgMjogKEJsb2NrcyAxNjM4NS0yNDU3NikKKyAgQmxvY2sgYml0bWFwIGF0IDE2Mzg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNjM4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE2Mzg3LTE2NjQyICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTY2NDMtMjQ1NzYKKyAgRnJlZSBpbm9kZXM6IDQwOTctNjE0NAorR3JvdXAgMzogKEJsb2NrcyAyNDU3Ny0zMjc2OCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjQ1NzcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI0NTc4LTI0NTc4CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjQ1NzktMjQ4MzMKKyAgQmxvY2sgYml0bWFwIGF0IDI0ODM0ICgrMjU3KSwgSW5vZGUgYml0bWFwIGF0IDI0ODM1ICgrMjU4KQorICBJbm9kZSB0YWJsZSBhdCAyNDgzNi0yNTA5MSAoKzI1OSkKKyAgNzY3NyBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjUwOTItMzI3NjgKKyAgRnJlZSBpbm9kZXM6IDYxNDUtODE5MgorR3JvdXAgNDogKEJsb2NrcyAzMjc2OS00MDk2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDMyNzY5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMjc3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMyNzcxLTMzMDI2ICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzMwMjctNDA5NjAKKyAgRnJlZSBpbm9kZXM6IDgxOTMtMTAyNDAKK0dyb3VwIDU6IChCbG9ja3MgNDA5NjEtNDkxNTIpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDQwOTYxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA0MDk2Mi00MDk2MgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDQwOTYzLTQxMjE3CisgIEJsb2NrIGJpdG1hcCBhdCA0MTIxOCAoKzI1NyksIElub2RlIGJpdG1hcCBhdCA0MTIxOSAoKzI1OCkKKyAgSW5vZGUgdGFibGUgYXQgNDEyMjAtNDE0NzUgKCsyNTkpCisgIDc2NzcgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQxNDc2LTQ5MTUyCisgIEZyZWUgaW5vZGVzOiAxMDI0MS0xMjI4OAorR3JvdXAgNjogKEJsb2NrcyA0OTE1My01NzM0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ5MTUzICgrMCksIElub2RlIGJpdG1hcCBhdCA0OTE1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ5MTU1LTQ5NDEwICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDk0MTEtNTczNDQKKyAgRnJlZSBpbm9kZXM6IDEyMjg5LTE0MzM2CitHcm91cCA3OiAoQmxvY2tzIDU3MzQ1LTY1NTM1KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA1NzM0NSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNTczNDYtNTczNDYKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA1NzM0Ny01NzYwMQorICBCbG9jayBiaXRtYXAgYXQgNTc2MDIgKCsyNTcpLCBJbm9kZSBiaXRtYXAgYXQgNTc2MDMgKCsyNTgpCisgIElub2RlIHRhYmxlIGF0IDU3NjA0LTU3ODU5ICgrMjU5KQorICA3Njc2IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1Nzg2MC02NTUzNQorICBGcmVlIGlub2RlczogMTQzMzctMTYzODQKZGlmZiAtLWdpdCBhL3Rlc3RzL21fc3RkL3NjcmlwdCBiL3Rlc3RzL21fc3RkL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmYyY2RhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbV9zdGQvc2NyaXB0CkBAIC0wLDAgKzEsMyBAQAorREVTQ1JJUFRJT049InN0YW5kYXJkIGZpbGVzeXN0ZW0gb3B0aW9ucyIKK0ZTX1NJWkU9NjU1MzYKKy4gJGNtZF9kaXIvcnVuX21rZTJmcwpkaWZmIC0tZ2l0IGEvdGVzdHMvbV91bmluaXQvZXhwZWN0LjEgYi90ZXN0cy9tX3VuaW5pdC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODg2ZGZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbV91bmluaXQvZXhwZWN0LjEKQEAgLTAsMCArMSwxNTUgQEAKK0NyZWF0aW5nIGZpbGVzeXN0ZW0gd2l0aCAxMzEwNzIgMWsgYmxvY2tzIGFuZCAzMjc2OCBpbm9kZXMKK1N1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAKKwk4MTkzLCAyNDU3NywgNDA5NjEsIDU3MzQ1LCA3MzcyOQorCitBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogICAgICAICAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitXcml0aW5nIGlub2RlIHRhYmxlczogICAgICAICAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICAgICAgCAgICAhkb25lCisKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6IGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyIHVuaW5pdF9iZworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMzI3NjggZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA1NjkxLzEzMTA3MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKK0ZpbGVzeXN0ZW0gdm9sdW1lIG5hbWU6ICAgPG5vbmU+CitMYXN0IG1vdW50ZWQgb246ICAgICAgICAgIDxub3QgYXZhaWxhYmxlPgorRmlsZXN5c3RlbSBtYWdpYyBudW1iZXI6ICAweEVGNTMKK0ZpbGVzeXN0ZW0gcmV2aXNpb24gIzogICAgMSAoZHluYW1pYykKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6ICAgICAgZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBzcGFyc2Vfc3VwZXIgdW5pbml0X2JnCitEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIChub25lKQorRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICBjbGVhbgorRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICBDb250aW51ZQorRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICBMaW51eAorSW5vZGUgY291bnQ6ICAgICAgICAgICAgICAzMjc2OAorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICAxMzEwNzIKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgNjU1MworRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAxMjUzODEKK0ZyZWUgaW5vZGVzOiAgICAgICAgICAgICAgMzI3NTcKK0ZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgMQorQmxvY2sgc2l6ZTogICAgICAgICAgICAgICAxMDI0CitGcmFnbWVudCBzaXplOiAgICAgICAgICAgIDEwMjQKK1Jlc2VydmVkIEdEVCBibG9ja3M6ICAgICAgMjU2CitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDgxOTIKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgODE5MgorSW5vZGVzIHBlciBncm91cDogICAgICAgICAyMDQ4CitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDI1NgorTW91bnQgY291bnQ6ICAgICAgICAgICAgICAwCitDaGVjayBpbnRlcnZhbDogICAgICAgICAgIDE1NTUyMDAwICg2IG1vbnRocykKK1Jlc2VydmVkIGJsb2NrcyB1aWQ6ICAgICAgMAorUmVzZXJ2ZWQgYmxvY2tzIGdpZDogICAgICAwCitGaXJzdCBpbm9kZTogICAgICAgICAgICAgIDExCitJbm9kZSBzaXplOgkgICAgICAgICAgMTI4CitEZWZhdWx0IGRpcmVjdG9yeSBoYXNoOiAgIGhhbGZfbWQ0CisKKworR3JvdXAgMDogKEJsb2NrcyAxLTgxOTIpIFtJVEFCTEVfWkVST0VEXQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMi0yCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMy0yNTgKKyAgQmxvY2sgYml0bWFwIGF0IDI1OSAoKzI1OCksIElub2RlIGJpdG1hcCBhdCAyNjAgKCsyNTkpCisgIElub2RlIHRhYmxlIGF0IDI2MS01MTYgKCsyNjApCisgIDc2NjIgZnJlZSBibG9ja3MsIDIwMzcgZnJlZSBpbm9kZXMsIDIgZGlyZWN0b3JpZXMsIDIwMzcgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogNTMxLTgxOTIKKyAgRnJlZSBpbm9kZXM6IDEyLTIwNDgKK0dyb3VwIDE6IChCbG9ja3MgODE5My0xNjM4NCkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklULCBJVEFCTEVfWkVST0VEXQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA4MTkzLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA4MTk0LTgxOTQKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA4MTk1LTg0NTAKKyAgQmxvY2sgYml0bWFwIGF0IDg0NTEgKCsyNTgpLCBJbm9kZSBiaXRtYXAgYXQgODQ1MiAoKzI1OSkKKyAgSW5vZGUgdGFibGUgYXQgODQ1My04NzA4ICgrMjYwKQorICA3Njc2IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAyMDQ4IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDg3MDktMTYzODQKKyAgRnJlZSBpbm9kZXM6IDIwNDktNDA5NgorR3JvdXAgMjogKEJsb2NrcyAxNjM4NS0yNDU3NikgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklULCBJVEFCTEVfWkVST0VEXQorICBCbG9jayBiaXRtYXAgYXQgMTYzODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2Mzg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTYzODctMTY2NDIgKCsyKQorICA3OTM0IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAyMDQ4IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDE2NjQzLTI0NTc2CisgIEZyZWUgaW5vZGVzOiA0MDk3LTYxNDQKK0dyb3VwIDM6IChCbG9ja3MgMjQ1NzctMzI3NjgpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVCwgSVRBQkxFX1pFUk9FRF0KKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjQ1NzcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI0NTc4LTI0NTc4CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjQ1NzktMjQ4MzQKKyAgQmxvY2sgYml0bWFwIGF0IDI0ODM1ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDI0ODM2ICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCAyNDgzNy0yNTA5MiAoKzI2MCkKKyAgNzY3NiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMjA0OCB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAyNTA5My0zMjc2OAorICBGcmVlIGlub2RlczogNjE0NS04MTkyCitHcm91cCA0OiAoQmxvY2tzIDMyNzY5LTQwOTYwKSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVQsIElUQUJMRV9aRVJPRURdCisgIEJsb2NrIGJpdG1hcCBhdCAzMjc2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzI3NzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMjc3MS0zMzAyNiAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDIwNDggdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMzMwMjctNDA5NjAKKyAgRnJlZSBpbm9kZXM6IDgxOTMtMTAyNDAKK0dyb3VwIDU6IChCbG9ja3MgNDA5NjEtNDkxNTIpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVCwgSVRBQkxFX1pFUk9FRF0KKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNDA5NjEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDQwOTYyLTQwOTYyCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNDA5NjMtNDEyMTgKKyAgQmxvY2sgYml0bWFwIGF0IDQxMjE5ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDQxMjIwICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCA0MTIyMS00MTQ3NiAoKzI2MCkKKyAgNzY3NiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMjA0OCB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA0MTQ3Ny00OTE1MgorICBGcmVlIGlub2RlczogMTAyNDEtMTIyODgKK0dyb3VwIDY6IChCbG9ja3MgNDkxNTMtNTczNDQpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVCwgSVRBQkxFX1pFUk9FRF0KKyAgQmxvY2sgYml0bWFwIGF0IDQ5MTUzICgrMCksIElub2RlIGJpdG1hcCBhdCA0OTE1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ5MTU1LTQ5NDEwICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMjA0OCB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA0OTQxMS01NzM0NAorICBGcmVlIGlub2RlczogMTIyODktMTQzMzYKK0dyb3VwIDc6IChCbG9ja3MgNTczNDUtNjU1MzYpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVCwgSVRBQkxFX1pFUk9FRF0KKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNTczNDUsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDU3MzQ2LTU3MzQ2CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNTczNDctNTc2MDIKKyAgQmxvY2sgYml0bWFwIGF0IDU3NjAzICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDU3NjA0ICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCA1NzYwNS01Nzg2MCAoKzI2MCkKKyAgNzY3NiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMjA0OCB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA1Nzg2MS02NTUzNgorICBGcmVlIGlub2RlczogMTQzMzctMTYzODQKK0dyb3VwIDg6IChCbG9ja3MgNjU1MzctNzM3MjgpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVCwgSVRBQkxFX1pFUk9FRF0KKyAgQmxvY2sgYml0bWFwIGF0IDY1NTM3ICgrMCksIElub2RlIGJpdG1hcCBhdCA2NTUzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY1NTM5LTY1Nzk0ICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMjA0OCB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA2NTc5NS03MzcyOAorICBGcmVlIGlub2RlczogMTYzODUtMTg0MzIKK0dyb3VwIDk6IChCbG9ja3MgNzM3MjktODE5MjApIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVCwgSVRBQkxFX1pFUk9FRF0KKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNzM3MjksIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDczNzMwLTczNzMwCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNzM3MzEtNzM5ODYKKyAgQmxvY2sgYml0bWFwIGF0IDczOTg3ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDczOTg4ICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCA3Mzk4OS03NDI0NCAoKzI2MCkKKyAgNzY3NiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMjA0OCB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA3NDI0NS04MTkyMAorICBGcmVlIGlub2RlczogMTg0MzMtMjA0ODAKK0dyb3VwIDEwOiAoQmxvY2tzIDgxOTIxLTkwMTEyKSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVQsIElUQUJMRV9aRVJPRURdCisgIEJsb2NrIGJpdG1hcCBhdCA4MTkyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODE5MjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4MTkyMy04MjE3OCAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDIwNDggdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogODIxNzktOTAxMTIKKyAgRnJlZSBpbm9kZXM6IDIwNDgxLTIyNTI4CitHcm91cCAxMTogKEJsb2NrcyA5MDExMy05ODMwNCkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklULCBJVEFCTEVfWkVST0VEXQorICBCbG9jayBiaXRtYXAgYXQgOTAxMTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDkwMTE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTAxMTUtOTAzNzAgKCsyKQorICA3OTM0IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAyMDQ4IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDkwMzcxLTk4MzA0CisgIEZyZWUgaW5vZGVzOiAyMjUyOS0yNDU3NgorR3JvdXAgMTI6IChCbG9ja3MgOTgzMDUtMTA2NDk2KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVQsIElUQUJMRV9aRVJPRURdCisgIEJsb2NrIGJpdG1hcCBhdCA5ODMwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTgzMDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5ODMwNy05ODU2MiAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDIwNDggdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogOTg1NjMtMTA2NDk2CisgIEZyZWUgaW5vZGVzOiAyNDU3Ny0yNjYyNAorR3JvdXAgMTM6IChCbG9ja3MgMTA2NDk3LTExNDY4OCkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklULCBJVEFCTEVfWkVST0VEXQorICBCbG9jayBiaXRtYXAgYXQgMTA2NDk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDY0OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDY0OTktMTA2NzU0ICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMjA0OCB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMDY3NTUtMTE0Njg4CisgIEZyZWUgaW5vZGVzOiAyNjYyNS0yODY3MgorR3JvdXAgMTQ6IChCbG9ja3MgMTE0Njg5LTEyMjg4MCkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklULCBJVEFCTEVfWkVST0VEXQorICBCbG9jayBiaXRtYXAgYXQgMTE0Njg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTQ2OTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTQ2OTEtMTE0OTQ2ICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMjA0OCB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMTQ5NDctMTIyODgwCisgIEZyZWUgaW5vZGVzOiAyODY3My0zMDcyMAorR3JvdXAgMTU6IChCbG9ja3MgMTIyODgxLTEzMTA3MSkgW0lOT0RFX1VOSU5JVCwgSVRBQkxFX1pFUk9FRF0KKyAgQmxvY2sgYml0bWFwIGF0IDEyMjg4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIyODgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIyODgzLTEyMzEzOCAoKzIpCisgIDc5MzMgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDIwNDggdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMTIzMTM5LTEzMTA3MQorICBGcmVlIGlub2RlczogMzA3MjEtMzI3NjgKZGlmZiAtLWdpdCBhL3Rlc3RzL21fdW5pbml0L3NjcmlwdCBiL3Rlc3RzL21fdW5pbml0L3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjU2NWFjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbV91bmluaXQvc2NyaXB0CkBAIC0wLDAgKzEsNCBAQAorREVTQ1JJUFRJT049InVuaW5pdGlhbGl6ZWQgZ3JvdXAgZmVhdHVyZSIKK0ZTX1NJWkU9MTMxMDcyCitNS0UyRlNfT1BUUz0iLU8gdW5pbml0X2JnIgorLiAkY21kX2Rpci9ydW5fbWtlMmZzCmRpZmYgLS1naXQgYS90ZXN0cy9ta2UyZnMuY29uZi5pbiBiL3Rlc3RzL21rZTJmcy5jb25mLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNjA1MGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9ta2UyZnMuY29uZi5pbgpAQCAtMCwwICsxLDQ5IEBACitbZGVmYXVsdHNdCisJYmFzZV9mZWF0dXJlcyA9IHNwYXJzZV9zdXBlcixmaWxldHlwZSxyZXNpemVfaW5vZGUsZGlyX2luZGV4LGV4dF9hdHRyCisJYmxvY2tzaXplID0gNDA5NgorCWlub2RlX3NpemUgPSAyNTYKKwlpbm9kZV9yYXRpbyA9IDE2Mzg0CisJcmVzZXJ2ZWRfcmF0aW8gPSA1LjAKKwllbmFibGVfcGVyaW9kaWNfZnNjayA9IHRydWUKKwlsYXp5X2l0YWJsZV9pbml0ID0gZmFsc2UKKwlub19kaXNjYXJkID0gdHJ1ZQorCWRlZmF1bHRfbW50b3B0cyA9IF5hY2wKKworW2ZzX3R5cGVzXQorCWV4dDMgPSB7CisJCWZlYXR1cmVzID0gaGFzX2pvdXJuYWwKKwl9CisJZXh0NCA9IHsKKwkJZmVhdHVyZXMgPSBoYXNfam91cm5hbCxleHRlbnQsaHVnZV9maWxlLGZsZXhfYmcsdW5pbml0X2JnLGRpcl9ubGluayxleHRyYV9pc2l6ZQorCQlpbm9kZV9zaXplID0gMjU2CisJfQorCWV4dDRkZXYgPSB7CisJCWZlYXR1cmVzID0gaGFzX2pvdXJuYWwsZXh0ZW50LGh1Z2VfZmlsZSxmbGV4X2JnLHVuaW5pdF9iZyxkaXJfbmxpbmssZXh0cmFfaXNpemUKKwkJaW5vZGVfc2l6ZSA9IDI1NgorCQlvcHRpb25zID0gdGVzdF9mcz0xCisJfQorCXNtYWxsID0geworCQlibG9ja3NpemUgPSAxMDI0CisJCWlub2RlX3NpemUgPSAxMjgKKwkJaW5vZGVfcmF0aW8gPSA0MDk2CisJfQorCWZsb3BweSA9IHsKKwkJYmxvY2tzaXplID0gMTAyNAorCQlpbm9kZV9zaXplID0gMTI4CisJCWlub2RlX3JhdGlvID0gODE5MgorCX0KKwluZXdzID0geworCQlpbm9kZV9yYXRpbyA9IDQwOTYKKwl9CisJbGFyZ2VmaWxlID0geworCQlpbm9kZV9yYXRpbyA9IDEwNDg1NzYKKwkJYmxvY2tzaXplID0gNDA5NgorCX0KKwlsYXJnZWZpbGU0ID0geworCQlpbm9kZV9yYXRpbyA9IDQxOTQzMDQKKwkJYmxvY2tzaXplID0gNDA5NgorCX0KKwlodXJkID0geworCSAgICAgYmxvY2tzaXplID0gNDA5NgorCSAgICAgaW5vZGVfc2l6ZSA9IDEyOAorCX0KZGlmZiAtLWdpdCBhL3Rlc3RzL3Byb2dzL01ha2VmaWxlLmluIGIvdGVzdHMvcHJvZ3MvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkMDRiNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Byb2dzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNzkgQEAKKyMKKyMgU3RhbmRhcmQgZTJmc3Byb2dzIHByb2xvZ3VlLi4uLgorIworCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLi4vLi4KK215X2RpciA9IHRlc3RzL3Byb2dzCitJTlNUQUxMID0gQElOU1RBTExACisKK0BNQ09ORklHQAorCitNS19DTURTPQlfU1NfRElSX09WRVJSSURFPS4uLy4uL2xpYi9zcyAuLi8uLi9saWIvc3MvbWtfY21kcworCitQUk9HUz0JCXRlc3RfaWNvdW50IGNyY3N1bQorCitURVNUX1JFTF9PQkpTPQl0ZXN0X3JlbC5vIHRlc3RfcmVsX2NtZHMubworCitURVNUX0lDT1VOVF9PQkpTPQl0ZXN0X2ljb3VudC5vIHRlc3RfaWNvdW50X2NtZHMubworCitTUkNTPQkkKHNyY2RpcikvdGVzdF9yZWwuYyAKKworTElCUz0gJChMSUJFWFQyRlMpICQoTElCU1MpICQoTElCQ09NX0VSUikgJChTWVNMSUJTKQorREVQTElCUz0gJChMSUJFWFQyRlMpICQoREVQTElCU1MpICQoREVQTElCQ09NX0VSUikKKworLmMubzoKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAtYyAkKEFMTF9DRkxBR1MpICQ8IC1vICRACisJJChRKSAkKENIRUNLX0NNRCkgJChBTExfQ0ZMQUdTKSAkPAorCithbGw6OiAkKFBST0dTKQorCit0ZXN0X3JlbDogJChURVNUX1JFTF9PQkpTKSAkKERFUExJQlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChMRCkgJChBTExfTERGTEFHUykgLW8gdGVzdF9yZWwgJChURVNUX1JFTF9PQkpTKSAkKExJQlMpCisKK2NyY3N1bTogY3Jjc3VtLm8gJChERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoTEQpICQoQUxMX0xERkxBR1MpIC1vIGNyY3N1bSBjcmNzdW0ubyAkKExJQlMpCisKK3Rlc3RfcmVsX2NtZHMuYzogdGVzdF9yZWxfY21kcy5jdAorCSQoRSkgIglNS19DTURTICRAIgorCSQoUSkgJChNS19DTURTKSAkKHNyY2RpcikvdGVzdF9yZWxfY21kcy5jdAorCit0ZXN0X2ljb3VudDogJChURVNUX0lDT1VOVF9PQkpTKSAkKERFUExJQlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChMRCkgJChBTExfTERGTEFHUykgLW8gdGVzdF9pY291bnQgJChURVNUX0lDT1VOVF9PQkpTKSAkKExJQlMpCisKK3Rlc3RfaWNvdW50X2NtZHMuYzogdGVzdF9pY291bnRfY21kcy5jdAorCSQoRSkgIglNS19DTURTICRAIgorCSQoUSkgJChNS19DTURTKSAkKHNyY2RpcikvdGVzdF9pY291bnRfY21kcy5jdAorCitjbGVhbjo6CisJJChSTSkgLWYgJChQUk9HUykgdGVzdF9yZWxfY21kcy5jIHRlc3RfaWNvdW50X2NtZHMuYyBcCisJCVwjKiAqLnMgKi5vICouYSAqfiBjb3JlCisKK2luc3RhbGw6CisKK2luc3RhbGwtc3RyaXA6CisKK3VuaW5zdGFsbDoKKworbW9zdGx5Y2xlYW46IGNsZWFuCitkaXN0Y2xlYW46IGNsZWFuCisJJChSTSkgLWYgLmRlcGVuZCBNYWtlZmlsZSAkKHNyY2RpcikvVEFHUyAkKHNyY2RpcikvTWFrZWZpbGUuaW4ub2xkCisKKyMgKysrIERlcGVuZGVuY3kgbGluZSBlYXRlciArKysKKyMgCisjIE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb2xsb3cuICBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc2VjdGlvbiBpbgorIyB0aGUgTWFrZWZpbGUuaW4gZmlsZQorIwordGVzdF9yZWwubzogJChzcmNkaXIpL3Rlc3RfcmVsLmMgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9pcmVsLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JyZWwuaCBcCisgJChzcmNkaXIpL3Rlc3RfcmVsLmgKZGlmZiAtLWdpdCBhL3Rlc3RzL3Byb2dzL2NyY3N1bS5jIGIvdGVzdHMvcHJvZ3MvY3Jjc3VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc5NGUxMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Byb2dzL2NyY3N1bS5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBjcmNzdW0uYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyNpbmNsdWRlICJzcy9zcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CQljOworCXVpbnQzMl90CWNyYyA9IH4wOworCXVpbnQzMl90CSgqY3N1bV9mdW5jKSh1aW50MzJfdCBjcmMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsCisJCQkJICAgICBzaXplX3QgbGVuKTsKKwlGSUxFCQkqZjsKKworCWNzdW1fZnVuYyA9IGV4dDJmc19jcmMzMmNfbGU7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJoIikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnaCc6CisJCWRlZmF1bHQ6CisJCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogY3Jjc3VtIFtmaWxlXVxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWlmIChvcHRpbmQgPT0gYXJnYykKKwkJZiA9IHN0ZGluOworCWVsc2UgeworCQlmID0gZm9wZW4oYXJndltvcHRpbmRdLCAiciIpOworCQlpZiAoIWYpIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgZXJybm8sICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlc1xuIiwKKwkJCQlhcmd2W29wdGluZF0pOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCXdoaWxlICghZmVvZihmKSkgeworCQl1bnNpZ25lZCBjaGFyIGJ1Zls0MDk2XTsKKworCQlpbnQgYyA9IGZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIGYpOworCisJCWlmIChjKQorCQkJY3JjID0gY3N1bV9mdW5jKGNyYywgYnVmLCBjKTsKKwl9CisJcHJpbnRmKCIldVxuIiwgY3JjKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3Byb2dzL2hvbGRfaW5vZGUuYyBiL3Rlc3RzL3Byb2dzL2hvbGRfaW5vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTJhYTcxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcHJvZ3MvaG9sZF9pbm9kZS5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBob2xkX2lub2RlLmMgLS0tIHRlc3QgcHJvZ3JhbSB3aGljaCBob2xkcyBhbiBpbm9kZSBvciBkaXJlY3RvcnkKKyAqIG9wZW4uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKworbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHN0YXQJc3RhdGJ1ZjsKKwljaGFyICpmaWxlbmFtZTsKKworCWlmIChhcmdjICE9IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZGlyXG4iLCBhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisJZmlsZW5hbWUgPSBhcmd2WzFdOworCWlmIChzdGF0KGZpbGVuYW1lLCAmc3RhdGJ1ZikgPCAwKSB7CisJCXBlcnJvcihmaWxlbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChTX0lTRElSKHN0YXRidWYuc3RfbW9kZSkpIHsKKwkJaWYgKCFvcGVuZGlyKGZpbGVuYW1lKSkgeworCQkJcGVycm9yKGZpbGVuYW1lKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAob3BlbihmaWxlbmFtZSwgT19SRE9OTFkpIDwgMCkgeworCQkJcGVycm9yKGZpbGVuYW1lKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJc2xlZXAoMzApOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvcHJvZ3MvcmFuZG9tX2V4ZXJjaXNlLmMgYi90ZXN0cy9wcm9ncy9yYW5kb21fZXhlcmNpc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODIxN2FiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcHJvZ3MvcmFuZG9tX2V4ZXJjaXNlLmMKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiByYW5kb21fZXhlcmNpc2UuYyAtLS0gVGVzdCBwcm9ncmFtIHdoaWNoIGV4ZXJjaXNlcyBhbiBleHQyCisgKiAJZmlsZXN5c3RlbS4gIEl0IGNyZWF0ZXMgYSBsb3Qgb2YgcmFuZG9tIGZpbGVzIGluIHRoZSBjdXJyZW50CisgKiAJZGlyZWN0b3J5LCB3aGlsZSBob2xkaW5nIHNvbWUgZmlsZXMgb3BlbiB3aGlsZSB0aGV5IGFyZSBiZWluZworICogCWRlbGV0ZWQuICBUaGlzIGV4ZXJjaXNlcyB0aGUgb3JwaGFuIGxpc3QgY29kZSwgYXMgd2VsbCBhcworICogCWNyZWF0aW5nIGxvdHMgb2YgZm9kZGVyIGZvciB0aGUgZXh0MyBqb3VybmFsLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjZGVmaW5lIE1BWEZEUwkxMjgKKworc3RydWN0IHN0YXRlIHsKKwljaGFyCW5hbWVbMTZdOworCWludAlzdGF0ZTsKKwlpbnQJaXNkaXI7Cit9OworCisjZGVmaW5lIFNUQVRFX0NMRUFSCTAKKyNkZWZpbmUgU1RBVEVfQ1JFQVRFRAkxCisjZGVmaW5lIFNUQVRFX0RFTEVURUQJMgorCitzdHJ1Y3Qgc3RhdGUgc3RhdGVfYXJyYXlbTUFYRkRTXTsKKworI2RlZmluZSBEQVRBX1NJWkUgNjU1MzYKKworY2hhciBkYXRhX2J1ZmZlcltEQVRBX1NJWkVdOworCit2b2lkIGNsZWFyX3N0YXRlX2FycmF5KCkKK3sKKwlpbnQJaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhGRFM7IGkrKykKKwkJc3RhdGVfYXJyYXlbaV0uc3RhdGUgPSBTVEFURV9DTEVBUjsKK30KKworaW50IGdldF9yYW5kb21fZmQoKQoreworCWludAlmZDsKKworCXdoaWxlICgxKSB7CisJCWZkID0gKChpbnQpIHJhbmRvbSgpKSAlIE1BWEZEUzsKKwkJaWYgKGZkID4gMikKKwkJCXJldHVybiBmZDsKKwl9Cit9CisKK3Vuc2lnbmVkIGludCBnZXRfaW5vZGVfbnVtKGludCBmZCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChmc3RhdChmZCwgJnN0KSA8IDApIHsKKwkJcGVycm9yKCJmc3RhdCIpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHN0LnN0X2lubzsKK30KKworCit2b2lkIGNyZWF0ZV9yYW5kb21fZmlsZSgpCit7CisJY2hhciB0ZW1wbGF0ZVsxNl0gPSAiRVguWFhYWFhYIjsKKwlpbnQJZmQ7CisJaW50CWlzZGlyID0gMDsKKwlpbnQJc2l6ZTsKKworCW1rdGVtcCh0ZW1wbGF0ZSk7CisJaXNkaXIgPSByYW5kb20oKSAmIDE7CisJaWYgKGlzZGlyKSB7CisJCWlmIChta2Rpcih0ZW1wbGF0ZSwgMDcwMCkgPCAwKQorCQkJcmV0dXJuOworCQlmZCA9IG9wZW4odGVtcGxhdGUsIE9fUkRPTkxZLCAwNjAwKTsKKwkJcHJpbnRmKCJDcmVhdGVkIHRlbXAgZGlyZWN0b3J5ICVzLCBmZCA9ICVkXG4iLAorCQkgICAgICAgdGVtcGxhdGUsIGZkKTsKKwl9IGVsc2UgeworCQlzaXplID0gcmFuZG9tKCkgJiAoREFUQV9TSVpFLTEpOworCQlmZCA9IG9wZW4odGVtcGxhdGUsIE9fQ1JFQVR8T19SRFdSLCAwNjAwKTsKKwkJd3JpdGUoZmQsIGRhdGFfYnVmZmVyLCBzaXplKTsKKwkJcHJpbnRmKCJDcmVhdGVkIHRlbXAgZmlsZSAlcywgZmQgPSAlZCwgc2l6ZT0lZFxuIiwKKwkJICAgICAgIHRlbXBsYXRlLCBmZCwgc2l6ZSk7CisJfQorCXN0YXRlX2FycmF5W2ZkXS5pc2RpciA9IGlzZGlyOworCWlmIChmZCA8IDApCisJCXJldHVybjsKKwlzdGF0ZV9hcnJheVtmZF0uaXNkaXIgPSBpc2RpcjsKKwlzdGF0ZV9hcnJheVtmZF0uc3RhdGUgPSBTVEFURV9DUkVBVEVEOworCXN0cmNweShzdGF0ZV9hcnJheVtmZF0ubmFtZSwgdGVtcGxhdGUpOworfQorCit2b2lkIHRydW5jYXRlX2ZpbGUoaW50IGZkKQoreworCWludAlzaXplOworCisJc2l6ZSA9IHJhbmRvbSgpICYgKERBVEFfU0laRS0xKTsKKworCWlmIChzdGF0ZV9hcnJheVtmZF0uaXNkaXIpCisJCXJldHVybjsKKworCWZ0cnVuY2F0ZShmZCwgc2l6ZSk7CisJcHJpbnRmKCJUcnVuY2F0aW5nIHRlbXAgZmlsZSAlcywgZmQgPSAlZCwgaW5vPSV1LCBzaXplPSVkXG4iLAorCSAgICAgICBzdGF0ZV9hcnJheVtmZF0ubmFtZSwgZmQsIGdldF9pbm9kZV9udW0oZmQpLCBzaXplKTsKK30KKworCit2b2lkIHVubGlua19maWxlKGludCBmZCkKK3sKKwljaGFyICpmaWxlbmFtZSA9IHN0YXRlX2FycmF5W2ZkXS5uYW1lOworCisJcHJpbnRmKCJEZWxldGluZyAlcywgZmQgPSAlZCwgaW5vID0gJXVcbiIsIGZpbGVuYW1lLCBmZCwKKwkgICAgICAgZ2V0X2lub2RlX251bShmZCkpOworCisJaWYgKHN0YXRlX2FycmF5W2ZkXS5pc2RpcikKKwkJcm1kaXIoZmlsZW5hbWUpOworCWVsc2UKKwkJdW5saW5rKGZpbGVuYW1lKTsKKwlzdGF0ZV9hcnJheVtmZF0uc3RhdGUgPSBTVEFURV9ERUxFVEVEOworfQorCit2b2lkIGNsb3NlX2ZpbGUoaW50IGZkKQoreworCWNoYXIgKmZpbGVuYW1lID0gc3RhdGVfYXJyYXlbZmRdLm5hbWU7CisKKwlwcmludGYoIkNsb3NpbmcgJXMsIGZkID0gJWQsIGlubyA9ICV1XG4iLCBmaWxlbmFtZSwgZmQsCisJICAgICAgIGdldF9pbm9kZV9udW0oZmQpKTsKKworCWNsb3NlKGZkKTsKKwlzdGF0ZV9hcnJheVtmZF0uc3RhdGUgPSBTVEFURV9DTEVBUjsKK30KKworCittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQJaSwgZmQ7CisKKwltZW1zZXQoZGF0YV9idWZmZXIsIDAsIHNpemVvZihkYXRhX2J1ZmZlcikpOworCXNwcmludGYoZGF0YV9idWZmZXIsICJUaGlzIGlzIGEgdGVzdCBmaWxlIGNyZWF0ZWQgYnkgdGhlICIKKwkJInJhbmRvbV9leGVyY2lzZXIgcHJvZ3JhbVxuIik7CisKKwlmb3IgKGk9MDsgaSA8IDEwMDAwMDsgaSsrKSB7CisJCWZkID0gZ2V0X3JhbmRvbV9mZCgpOworCQlzd2l0Y2ggKHN0YXRlX2FycmF5W2ZkXS5zdGF0ZSkgeworCQljYXNlIFNUQVRFX0NMRUFSOgorCQkJY3JlYXRlX3JhbmRvbV9maWxlKCk7CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9DUkVBVEVEOgorCQkJaWYgKChzdGF0ZV9hcnJheVtmZF0uaXNkaXIgPT0gMCkgJiYKKwkJCSAgICAocmFuZG9tKCkgJiAyKSkKKwkJCQl0cnVuY2F0ZV9maWxlKGZkKTsKKwkJCWVsc2UKKwkJCQl1bmxpbmtfZmlsZShmZCk7CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9ERUxFVEVEOgorCQkJY2xvc2VfZmlsZShmZCk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworCmRpZmYgLS1naXQgYS90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvYm1hLnNldHVwIGIvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL2JtYS5zZXR1cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDdlNTExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL2JtYS5zZXR1cApAQCAtMCwwICsxIEBACistYm1hX2NyZWF0ZSB0ZXN0IDIzCmRpZmYgLS1naXQgYS90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvZXhwZWN0LmJyZWwgYi90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvZXhwZWN0LmJyZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1ODY1OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Byb2dzL3Rlc3RfZGF0YS9leHBlY3QuYnJlbApAQCAtMCwwICsxLDQxIEBACit0ZXN0X3JlbDogYnJlbF9kdW1wCit0ZXN0X3JlbDogYnJlbF9wdXQgMiAxMQordGVzdF9yZWw6IGJyZWxfcHV0IDEgMTAKK3Rlc3RfcmVsOiBicmVsX3B1dCAzIDkKK3Rlc3RfcmVsOiBicmVsX3B1dCAxIDEwIDQgMTI4Cit0ZXN0X3JlbDogYnJlbF9wdXQgMjMgMTIKK3Rlc3RfcmVsOiBicmVsX3B1dCAyNCAxMworYnJlbF9wdXQ6IEludmFsaWQgYXJndW1lbnQgd2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9wdXQKK3Rlc3RfcmVsOiBicmVsX2dldCAyNAorYnJlbF9nZXQ6IEludmFsaWQgYXJndW1lbnQgd2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9nZXQKK3Rlc3RfcmVsOiBicmVsX2RlbGV0ZSAyNAorYnJlbF9kZWxldGU6IEludmFsaWQgYXJndW1lbnQgd2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9kZWxldGUKK3Rlc3RfcmVsOiBicmVsX2dldCA1CiticmVsX2dldDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19icmVsX2dldAordGVzdF9yZWw6IGJyZWxfZ2V0IDMKK09sZD0gMywgTmV3PSA5LCBPd25lcj0gMDowCit0ZXN0X3JlbDogYnJlbF9nZXQgMQorT2xkPSAxLCBOZXc9IDEwLCBPd25lcj0gNDoxMjgKK3Rlc3RfcmVsOiBicmVsX3N0YXJ0X2l0ZXIKK3Rlc3RfcmVsOiBicmVsX25leHQKK09sZD0gMSwgTmV3PSAxMCwgT3duZXI9IDQ6MTI4Cit0ZXN0X3JlbDogYnJlbF9uZXh0CitPbGQ9IDIsIE5ldz0gMTEsIE93bmVyPSAwOjAKK3Rlc3RfcmVsOiBicmVsX25leHQKK09sZD0gMywgTmV3PSA5LCBPd25lcj0gMDowCit0ZXN0X3JlbDogYnJlbF9uZXh0CitObyBtb3JlIGVudHJpZXMhCit0ZXN0X3JlbDogYnJlbF9kZWxldGUgMgordGVzdF9yZWw6IGJyZWxfZGVsZXRlIDIKK2JyZWxfZGVsZXRlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IHdoaWxlIGNhbGxpbmcgZXh0MmZzX2JyZWxfZGVsZXRlCit0ZXN0X3JlbDogYnJlbF9kZWxldGUgNQorYnJlbF9kZWxldGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9kZWxldGUKK3Rlc3RfcmVsOiBicmVsX21vdmUgMSAyCit0ZXN0X3JlbDogYnJlbF9kZWxldGUgMQorYnJlbF9kZWxldGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9kZWxldGUKK3Rlc3RfcmVsOiBicmVsX21vdmUgMSA0CiticmVsX21vdmU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9tb3ZlCit0ZXN0X3JlbDogYnJlbF9tb3ZlIDIgNQordGVzdF9yZWw6IGJyZWxfZHVtcAorT2xkPSAzLCBOZXc9IDksIE93bmVyPSAwOjAKK09sZD0gNSwgTmV3PSAxMCwgT3duZXI9IDQ6MTI4CmRpZmYgLS1naXQgYS90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvZXhwZWN0Lmljb3VudCBiL3Rlc3RzL3Byb2dzL3Rlc3RfZGF0YS9leHBlY3QuaWNvdW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OGEzNzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvZXhwZWN0Lmljb3VudApAQCAtMCwwICsxLDE5MyBAQAordGVzdF9pY291bnQ6IHZhbGlkYXRlCitJY291bnQgc3RydWN0dXJlIHN1Y2Nlc3NmdWxseSB2YWxpZGF0ZWQKK3Rlc3RfaWNvdW50OiBzdG9yZSAwIDAKK3N0b3JlOiBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfaWNvdW50X3N0b3JlCit0ZXN0X2ljb3VudDogZmV0Y2ggMAorZmV0Y2g6IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfZmV0Y2gKK3Rlc3RfaWNvdW50OiBpbmNyZW1lbnQgMAoraW5jcmVtZW50OiBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfaWNvdW50X2luY3JlbWVudAordGVzdF9pY291bnQ6IGRlY3JlbWVudCAwCitkZWNyZW1lbnQ6IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfZGVjcmVtZW50Cit0ZXN0X2ljb3VudDogc3RvcmUgMjAwMDEgMAorc3RvcmU6IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfc3RvcmUKK3Rlc3RfaWNvdW50OiBmZXRjaCAyMDAwMQorZmV0Y2g6IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfZmV0Y2gKK3Rlc3RfaWNvdW50OiBpbmNyZW1lbnQgMjAwMDEKK2luY3JlbWVudDogSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gZXh0MiBsaWJyYXJ5IHdoaWxlIGNhbGxpbmcgZXh0MmZzX2ljb3VudF9pbmNyZW1lbnQKK3Rlc3RfaWNvdW50OiBkZWNyZW1lbnQgMjAwMDEKK2RlY3JlbWVudDogSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gZXh0MiBsaWJyYXJ5IHdoaWxlIGNhbGxpbmcgZXh0MmZzX2ljb3VudF9kZWNyZW1lbnQKK3Rlc3RfaWNvdW50OiB2YWxpZGF0ZQorSWNvdW50IHN0cnVjdHVyZSBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkCit0ZXN0X2ljb3VudDogZmV0Y2ggMQorQ291bnQgaXMgMAordGVzdF9pY291bnQ6IHN0b3JlIDEgMQordGVzdF9pY291bnQ6IGZldGNoIDEKK0NvdW50IGlzIDEKK3Rlc3RfaWNvdW50OiBzdG9yZSAxIDIKK3Rlc3RfaWNvdW50OiBmZXRjaCAxCitDb3VudCBpcyAyCit0ZXN0X2ljb3VudDogc3RvcmUgMSAzCit0ZXN0X2ljb3VudDogZmV0Y2ggMQorQ291bnQgaXMgMwordGVzdF9pY291bnQ6IHN0b3JlIDEgMQordGVzdF9pY291bnQ6IGZldGNoIDEKK0NvdW50IGlzIDEKK3Rlc3RfaWNvdW50OiBzdG9yZSAxIDAKK3Rlc3RfaWNvdW50OiBmZXRjaCAxCitDb3VudCBpcyAwCit0ZXN0X2ljb3VudDogZmV0Y2ggMjAwMDAKK0NvdW50IGlzIDAKK3Rlc3RfaWNvdW50OiBzdG9yZSAyMDAwMCAwCit0ZXN0X2ljb3VudDogZmV0Y2ggMjAwMDAKK0NvdW50IGlzIDAKK3Rlc3RfaWNvdW50OiBzdG9yZSAyMDAwMCAzCit0ZXN0X2ljb3VudDogZmV0Y2ggMjAwMDAKK0NvdW50IGlzIDMKK3Rlc3RfaWNvdW50OiBzdG9yZSAyMDAwMCAwCit0ZXN0X2ljb3VudDogZmV0Y2ggMjAwMDAKK0NvdW50IGlzIDAKK3Rlc3RfaWNvdW50OiBzdG9yZSAyMDAwMCA0MgordGVzdF9pY291bnQ6IGZldGNoIDIwMDAwCitDb3VudCBpcyA0MgordGVzdF9pY291bnQ6IHN0b3JlIDIwMDAwIDEKK3Rlc3RfaWNvdW50OiBmZXRjaCAyMDAwMAorQ291bnQgaXMgMQordGVzdF9pY291bnQ6IHN0b3JlIDIwMDAwIDAKK3Rlc3RfaWNvdW50OiBmZXRjaCAyMDAwMAorQ291bnQgaXMgMAordGVzdF9pY291bnQ6IGdldF9zaXplCitTaXplIG9mIGljb3VudCBpczogNQordGVzdF9pY291bnQ6IGRlY3JlbWVudCAyCitkZWNyZW1lbnQ6IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfZGVjcmVtZW50Cit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDIKK0NvdW50IGlzIG5vdyAxCit0ZXN0X2ljb3VudDogZmV0Y2ggMgorQ291bnQgaXMgMQordGVzdF9pY291bnQ6IGluY3JlbWVudCAyCitDb3VudCBpcyBub3cgMgordGVzdF9pY291bnQ6IGZldGNoIDIKK0NvdW50IGlzIDIKK3Rlc3RfaWNvdW50OiBpbmNyZW1lbnQgMgorQ291bnQgaXMgbm93IDMKK3Rlc3RfaWNvdW50OiBmZXRjaCAyCitDb3VudCBpcyAzCit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDIKK0NvdW50IGlzIG5vdyA0Cit0ZXN0X2ljb3VudDogZmV0Y2ggMgorQ291bnQgaXMgNAordGVzdF9pY291bnQ6IGRlY3JlbWVudCAyCitDb3VudCBpcyBub3cgMwordGVzdF9pY291bnQ6IGZldGNoIDIKK0NvdW50IGlzIDMKK3Rlc3RfaWNvdW50OiBkZWNyZW1lbnQgMgorQ291bnQgaXMgbm93IDIKK3Rlc3RfaWNvdW50OiBmZXRjaCAyCitDb3VudCBpcyAyCit0ZXN0X2ljb3VudDogZGVjcmVtZW50IDIKK0NvdW50IGlzIG5vdyAxCit0ZXN0X2ljb3VudDogZmV0Y2ggMgorQ291bnQgaXMgMQordGVzdF9pY291bnQ6IGRlY3JlbWVudCAyCitDb3VudCBpcyBub3cgMAordGVzdF9pY291bnQ6IGRlY3JlbWVudCAyCitkZWNyZW1lbnQ6IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfZGVjcmVtZW50Cit0ZXN0X2ljb3VudDogc3RvcmUgMyAxCit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDMKK0NvdW50IGlzIG5vdyAyCit0ZXN0X2ljb3VudDogZmV0Y2ggMworQ291bnQgaXMgMgordGVzdF9pY291bnQ6IGRlY3JlbWVudCAzCitDb3VudCBpcyBub3cgMQordGVzdF9pY291bnQ6IGZldGNoIDMKK0NvdW50IGlzIDEKK3Rlc3RfaWNvdW50OiBkZWNyZW1lbnQgMworQ291bnQgaXMgbm93IDAKK3Rlc3RfaWNvdW50OiBzdG9yZSA0IDAKK3Rlc3RfaWNvdW50OiBmZXRjaCA0CitDb3VudCBpcyAwCit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDQKK0NvdW50IGlzIG5vdyAxCit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDQKK0NvdW50IGlzIG5vdyAyCit0ZXN0X2ljb3VudDogZmV0Y2ggNAorQ291bnQgaXMgMgordGVzdF9pY291bnQ6IGRlY3JlbWVudCA0CitDb3VudCBpcyBub3cgMQordGVzdF9pY291bnQ6IGRlY3JlbWVudCA0CitDb3VudCBpcyBub3cgMAordGVzdF9pY291bnQ6IHN0b3JlIDQgIDQyCit0ZXN0X2ljb3VudDogc3RvcmUgNCAwCit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDQKK0NvdW50IGlzIG5vdyAxCit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDQKK0NvdW50IGlzIG5vdyAyCit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDQKK0NvdW50IGlzIG5vdyAzCit0ZXN0X2ljb3VudDogZGVjcmVtZW50IDQKK0NvdW50IGlzIG5vdyAyCit0ZXN0X2ljb3VudDogZGVjcmVtZW50IDQKK0NvdW50IGlzIG5vdyAxCit0ZXN0X2ljb3VudDogZGVjcmVtZW50IDQKK0NvdW50IGlzIG5vdyAwCit0ZXN0X2ljb3VudDogZGVjcmVtZW50IDQKK2RlY3JlbWVudDogSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gZXh0MiBsaWJyYXJ5IHdoaWxlIGNhbGxpbmcgZXh0MmZzX2ljb3VudF9kZWNyZW1lbnQKK3Rlc3RfaWNvdW50OiBkZWNyZW1lbnQgNAorZGVjcmVtZW50OiBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfaWNvdW50X2RlY3JlbWVudAordGVzdF9pY291bnQ6IHN0b3JlIDUgNAordGVzdF9pY291bnQ6IGRlY3JlbWVudCA1CitDb3VudCBpcyBub3cgMwordGVzdF9pY291bnQ6IGRlY3JlbWVudCA1CitDb3VudCBpcyBub3cgMgordGVzdF9pY291bnQ6IGRlY3JlbWVudCA1CitDb3VudCBpcyBub3cgMQordGVzdF9pY291bnQ6IGRlY3JlbWVudCA1CitDb3VudCBpcyBub3cgMAordGVzdF9pY291bnQ6IGRlY3JlbWVudCA1CitkZWNyZW1lbnQ6IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfZGVjcmVtZW50Cit0ZXN0X2ljb3VudDogZ2V0X3NpemUKK1NpemUgb2YgaWNvdW50IGlzOiAxMDUKK3Rlc3RfaWNvdW50OiB2YWxpZGF0ZQorSWNvdW50IHN0cnVjdHVyZSBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkCit0ZXN0X2ljb3VudDogc3RvcmUgMTAgMTAKK3Rlc3RfaWNvdW50OiBzdG9yZSAyMCAyMAordGVzdF9pY291bnQ6IHN0b3JlIDMwIDMwCit0ZXN0X2ljb3VudDogc3RvcmUgNDAgNDAKK3Rlc3RfaWNvdW50OiBzdG9yZSA1MCA1MAordGVzdF9pY291bnQ6IHN0b3JlIDYwIDYwCit0ZXN0X2ljb3VudDogc3RvcmUgNzAgNzAKK3Rlc3RfaWNvdW50OiBzdG9yZSA4MCA4MAordGVzdF9pY291bnQ6IHN0b3JlIDkwIDkwCit0ZXN0X2ljb3VudDogc3RvcmUgMTAwIDEwMAordGVzdF9pY291bnQ6IHN0b3JlIDE1IDE1Cit0ZXN0X2ljb3VudDogc3RvcmUgMjUgMjUKK3Rlc3RfaWNvdW50OiBzdG9yZSAzNSAzNQordGVzdF9pY291bnQ6IHN0b3JlIDQ1IDQ1Cit0ZXN0X2ljb3VudDogc3RvcmUgNTUgNTUKK3Rlc3RfaWNvdW50OiBzdG9yZSA2NSA2NQordGVzdF9pY291bnQ6IHN0b3JlIDc1IDc1Cit0ZXN0X2ljb3VudDogc3RvcmUgODUgODUKK3Rlc3RfaWNvdW50OiBzdG9yZSA5NSA5NQordGVzdF9pY291bnQ6IGR1bXAKKzEwOiAxMAorMTU6IDE1CisyMDogMjAKKzI1OiAyNQorMzA6IDMwCiszNTogMzUKKzQwOiA0MAorNDU6IDQ1Cis1MDogNTAKKzU1OiA1NQorNjA6IDYwCis2NTogNjUKKzcwOiA3MAorNzU6IDc1Cis4MDogODAKKzg1OiA4NQorOTA6IDkwCis5NTogOTUKKzEwMDogMTAwCit0ZXN0X2ljb3VudDogZ2V0X3NpemUKK1NpemUgb2YgaWNvdW50IGlzOiAxMDUKK3Rlc3RfaWNvdW50OiB2YWxpZGF0ZQorSWNvdW50IHN0cnVjdHVyZSBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkCmRpZmYgLS1naXQgYS90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvZXhwZWN0LmlyZWwgYi90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvZXhwZWN0LmlyZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0NzkzOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Byb2dzL3Rlc3RfZGF0YS9leHBlY3QuaXJlbApAQCAtMCwwICsxLDYyIEBACit0ZXN0X3JlbDogaXJlbF9kdW1wCit0ZXN0X3JlbDogaXJlbF9wdXQgMiAxMSAzCit0ZXN0X3JlbDogaXJlbF9wdXQgMSAxMCAyCit0ZXN0X3JlbDogaXJlbF9wdXQgMyA5IDEKK3Rlc3RfcmVsOiBpcmVsX2FkZF9yZWYgMSA0IDEyOAordGVzdF9yZWw6IGlyZWxfYWRkX3JlZiAxIDUgNjQKK3Rlc3RfcmVsOiBpcmVsX2FkZF9yZWYgMSA2IDUxMgoraXJlbF9hZGRfcmVmOiBObyBzcGFjZSBsZWZ0IG9uIGRldmljZSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX2FkZF9yZWYKK3Rlc3RfcmVsOiBpcmVsX3B1dCAxIDggMwordGVzdF9yZWw6IGlyZWxfYWRkX3JlZiAxIDYgNTEyCit0ZXN0X3JlbDogaXJlbF9hZGRfcmVmIDIgNCA2NAordGVzdF9yZWw6IGlyZWxfcHV0IDIzIDEyIDEKK3Rlc3RfcmVsOiBpcmVsX3B1dCAyNCAxMyAxCitpcmVsX3B1dDogSW52YWxpZCBhcmd1bWVudCB3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX3B1dAordGVzdF9yZWw6IGlyZWxfZ2V0IDI0CitpcmVsX2dldDogSW52YWxpZCBhcmd1bWVudCB3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX2dldAordGVzdF9yZWw6IGlyZWxfZGVsZXRlIDI0CitpcmVsX2RlbGV0ZTogSW52YWxpZCBhcmd1bWVudCB3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX2RlbGV0ZQordGVzdF9yZWw6IGlyZWxfZ2V0IDMKK09sZD0gMywgTmV3PSA5LCBPcmlnaW5hbD0zLCBNYXhfcmVmcz0xCit0ZXN0X3JlbDogaXJlbF9nZXQgMQorT2xkPSAxLCBOZXc9IDgsIE9yaWdpbmFsPTEsIE1heF9yZWZzPTMKKwk0OjEyOCwgNTo2NCwgNjo1MTIKK3Rlc3RfcmVsOiBpcmVsX3N0YXJ0X2l0ZXIKK3Rlc3RfcmVsOiBpcmVsX25leHQKK09sZD0gMSwgTmV3PSA4LCBPcmlnaW5hbD0xLCBNYXhfcmVmcz0zCisJNDoxMjgsIDU6NjQsIDY6NTEyCit0ZXN0X3JlbDogaXJlbF9uZXh0CitPbGQ9IDIsIE5ldz0gMTEsIE9yaWdpbmFsPTIsIE1heF9yZWZzPTMKKwk0OjY0Cit0ZXN0X3JlbDogaXJlbF9uZXh0CitPbGQ9IDMsIE5ldz0gOSwgT3JpZ2luYWw9MywgTWF4X3JlZnM9MQordGVzdF9yZWw6IGlyZWxfbmV4dAorTm8gbW9yZSBlbnRyaWVzIQordGVzdF9yZWw6IGlyZWxfZGVsZXRlIDIKK3Rlc3RfcmVsOiBpcmVsX2RlbGV0ZSAyCitpcmVsX2RlbGV0ZTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX2RlbGV0ZQordGVzdF9yZWw6IGlyZWxfZGVsZXRlIDQKK2lyZWxfZGVsZXRlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IHdoaWxlIGNhbGxpbmcgZXh0MmZzX2lyZWxfZGVsZXRlCit0ZXN0X3JlbDogaXJlbF9tb3ZlIDEgMgordGVzdF9yZWw6IGlyZWxfZHVtcAorT2xkPSAyLCBOZXc9IDgsIE9yaWdpbmFsPTEsIE1heF9yZWZzPTMKKwk0OjEyOCwgNTo2NCwgNjo1MTIKK09sZD0gMywgTmV3PSA5LCBPcmlnaW5hbD0zLCBNYXhfcmVmcz0xCit0ZXN0X3JlbDogaXJlbF9kZWxldGUgNAoraXJlbF9kZWxldGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9kZWxldGUKK3Rlc3RfcmVsOiBpcmVsX21vdmUgMSA0CitpcmVsX21vdmU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9tb3ZlCit0ZXN0X3JlbDogaXJlbF9tb3ZlIDIgNAordGVzdF9yZWw6IGlyZWxfZHVtcAorT2xkPSAzLCBOZXc9IDksIE9yaWdpbmFsPTMsIE1heF9yZWZzPTEKK09sZD0gNCwgTmV3PSA4LCBPcmlnaW5hbD0xLCBNYXhfcmVmcz0zCisJNDoxMjgsIDU6NjQsIDY6NTEyCit0ZXN0X3JlbDogaXJlbF9nZXRfYnlfb3JpZyAzCitPbGQ9IDMsIE5ldz0gOSwgT3JpZ2luYWw9MywgTWF4X3JlZnM9MQordGVzdF9yZWw6IGlyZWxfZ2V0X2J5X29yaWcgMQorT2xkPSA0LCBOZXc9IDgsIE9yaWdpbmFsPTEsIE1heF9yZWZzPTMKKwk0OjEyOCwgNTo2NCwgNjo1MTIKK3Rlc3RfcmVsOiBpcmVsX2dldF9ieV9vcmlnIDUKK2lyZWxfZ2V0X2J5X29yaWc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9nZXRfYnlfb3JpZwordGVzdF9yZWw6IGlyZWxfZ2V0X2J5X29yaWcgMgoraXJlbF9nZXRfYnlfb3JpZzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX2dldF9ieV9vcmlnCmRpZmYgLS1naXQgYS90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvaW1hLnNldHVwIGIvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL2ltYS5zZXR1cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDExNjA2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL2ltYS5zZXR1cApAQCAtMCwwICsxIEBACistaW1hX2NyZWF0ZSB0ZXN0IDIzCmRpZmYgLS1naXQgYS90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvbm9ybWFsLnNldHVwIGIvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL25vcm1hbC5zZXR1cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmM2YzQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL25vcm1hbC5zZXR1cApAQCAtMCwwICsxIEBACistY3JlYXRlCmRpZmYgLS1naXQgYS90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvb3B0LnNldHVwIGIvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL29wdC5zZXR1cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTQ1OGIwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL29wdC5zZXR1cApAQCAtMCwwICsxIEBACistY3JlYXRlIC1pCmRpZmYgLS1naXQgYS90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvdGVzdC5icmVsIGIvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL3Rlc3QuYnJlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjA1NDUyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL3Rlc3QuYnJlbApAQCAtMCwwICsxLDQ3IEBACisjCisjIFRoaXMgaXMgdGhlIHRlc3Qgc2NyaXB0IGZvciB0aGUgYmxvY2sgcmVsb2NhdGlvbiB0YWJsZS4KKyMKKyMgQ29weXJpZ2h0IDE5OTcgYnkgVGhlb2RvcmUgVHMnby4gIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCAKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisjCisjCiticmVsX2R1bXAKK2JyZWxfcHV0IDIgMTEKK2JyZWxfcHV0IDEgMTAKK2JyZWxfcHV0IDMgOQorYnJlbF9wdXQgMSAxMCA0IDEyOAorIworIyBUZXN0IGJvdW5kYXJ5IGNhc2VzIGZvciBicmVsX3B1dAorIworYnJlbF9wdXQgMjMgMTIKK2JyZWxfcHV0IDI0IDEzCisjCisjIFRlc3Qgb3RoZXIgYm91bmRhcnkgY2FzZXMKKyMKK2JyZWxfZ2V0IDI0CiticmVsX2RlbGV0ZSAyNAorIworIyBUZXN0IGdldHRpbmcgZXhpc3RpbmcgYW5kIG5vbi1leGlzdGVudCBlbnRyaWVzCisjCiticmVsX2dldCA1CiticmVsX2dldCAzCiticmVsX2dldCAxCisjCisjIFRlc3QgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9ucworIworYnJlbF9zdGFydF9pdGVyCiticmVsX25leHQKK2JyZWxfbmV4dAorYnJlbF9uZXh0CiticmVsX25leHQKKyMKKyMgVGVzdCBkZWxldGUgYW5kIG1vdmUKKyMKK2JyZWxfZGVsZXRlIDIKK2JyZWxfZGVsZXRlIDIKK2JyZWxfZGVsZXRlIDUKK2JyZWxfbW92ZSAxIDIKK2JyZWxfZGVsZXRlIDEKK2JyZWxfbW92ZSAxIDQKK2JyZWxfbW92ZSAyIDUKK2JyZWxfZHVtcApkaWZmIC0tZ2l0IGEvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL3Rlc3QuaWNvdW50IGIvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL3Rlc3QuaWNvdW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYjE5NTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvdGVzdC5pY291bnQKQEAgLTAsMCArMSwxMzYgQEAKKyMKKyMgVGhpcyBpcyB0aGUgdGVzdCBzY3JpcHQgZm9yIHRoZSBpY291bnQgYWJzdHJhY3Rpb24KKyMKKyMgQ29weXJpZ2h0IDE5OTcgYnkgVGhlb2RvcmUgVHMnby4gIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCAKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisjCisjCisjIEZpcnN0IGxldCdzIHRlc3QgdGhlIGJvdW5kYXJ5IGNhc2VzIGZvciBpbGxlZ2FsIGFyZ3VtZW50cworIwordmFsaWRhdGUKK3N0b3JlIDAgMAorZmV0Y2ggMAoraW5jcmVtZW50IDAKK2RlY3JlbWVudCAwCitzdG9yZSAyMDAwMSAwCitmZXRjaCAyMDAwMQoraW5jcmVtZW50IDIwMDAxCitkZWNyZW1lbnQgMjAwMDEKK3ZhbGlkYXRlCisjCisjIE9LLCBub3cgbGV0J3MgdGVzdCBmZXRjaCBhbmQgc3RvcmUuICBXZSBhbHNvIHRlc3QgdGhlIGJvdW5kYXJ5IGNhc2VzCisjIGZvciBsZWdhbCBpbm9kZXMgaGVyZS4KKyMKK2ZldGNoIDEKK3N0b3JlIDEgMQorZmV0Y2ggMQorc3RvcmUgMSAyCitmZXRjaCAxCitzdG9yZSAxIDMKK2ZldGNoIDEKK3N0b3JlIDEgMQorZmV0Y2ggMQorc3RvcmUgMSAwCitmZXRjaCAxCitmZXRjaCAyMDAwMAorc3RvcmUgMjAwMDAgMAorZmV0Y2ggMjAwMDAKK3N0b3JlIDIwMDAwIDMKK2ZldGNoIDIwMDAwCitzdG9yZSAyMDAwMCAwCitmZXRjaCAyMDAwMAorc3RvcmUgMjAwMDAgNDIKK2ZldGNoIDIwMDAwCitzdG9yZSAyMDAwMCAxCitmZXRjaCAyMDAwMAorc3RvcmUgMjAwMDAgMAorZmV0Y2ggMjAwMDAKK2dldF9zaXplCisjCisjIFRpbWUgdG8gdGVzdCBpbmNyZW1lbnQuICBGaXJzdCBpbmNyZW1lbnQgZnJvbSAwIChwcmV2aW91c2x5IHVucmVmZXJlbmNlZCkKKyMKK2RlY3JlbWVudCAyCitpbmNyZW1lbnQgMgorZmV0Y2ggMgoraW5jcmVtZW50IDIKK2ZldGNoIDIKK2luY3JlbWVudCAyCitmZXRjaCAyCitpbmNyZW1lbnQgMgorZmV0Y2ggMgorZGVjcmVtZW50IDIKK2ZldGNoIDIKK2RlY3JlbWVudCAyCitmZXRjaCAyCitkZWNyZW1lbnQgMgorZmV0Y2ggMgorZGVjcmVtZW50IDIKK2RlY3JlbWVudCAyCisjCisjIFN0b3JlIDEgdGhlbiB0ZXN0Li4uCisjCitzdG9yZSAzIDEKK2luY3JlbWVudCAzCitmZXRjaCAzCitkZWNyZW1lbnQgMworZmV0Y2ggMworZGVjcmVtZW50IDMKKyMKKyMgU3RvcmUgMCB0aGVuIHRlc3QKKyMgCitzdG9yZSA0IDAKK2ZldGNoIDQKK2luY3JlbWVudCA0CitpbmNyZW1lbnQgNAorZmV0Y2ggNAorZGVjcmVtZW50IDQKK2RlY3JlbWVudCA0CisjCisjIFN0b3JlIHNvbWV0aGluZywgdGhlbiBzdG9yZSAwLCB0aGVuIHRlc3QuLi4KKyMKK3N0b3JlIDQgIDQyCitzdG9yZSA0IDAKK2luY3JlbWVudCA0CitpbmNyZW1lbnQgNAoraW5jcmVtZW50IDQKK2RlY3JlbWVudCA0CitkZWNyZW1lbnQgNAorZGVjcmVtZW50IDQKK2RlY3JlbWVudCA0CitkZWNyZW1lbnQgNAorIworIyBzdG9yZSBzb21ldGhpbmcsIHRoZW4gZGVjcmVtZW50IHRvIHplcm8KKyMKK3N0b3JlIDUgNAorZGVjcmVtZW50IDUKK2RlY3JlbWVudCA1CitkZWNyZW1lbnQgNQorZGVjcmVtZW50IDUKK2RlY3JlbWVudCA1CisjCisjIFRlc3QgaW5zZXJ0CisjCitnZXRfc2l6ZQordmFsaWRhdGUKK3N0b3JlIDEwIDEwCitzdG9yZSAyMCAyMAorc3RvcmUgMzAgMzAKK3N0b3JlIDQwIDQwCitzdG9yZSA1MCA1MAorc3RvcmUgNjAgNjAKK3N0b3JlIDcwIDcwCitzdG9yZSA4MCA4MAorc3RvcmUgOTAgOTAKK3N0b3JlIDEwMCAxMDAKK3N0b3JlIDE1IDE1CitzdG9yZSAyNSAyNQorc3RvcmUgMzUgMzUKK3N0b3JlIDQ1IDQ1CitzdG9yZSA1NSA1NQorc3RvcmUgNjUgNjUKK3N0b3JlIDc1IDc1CitzdG9yZSA4NSA4NQorc3RvcmUgOTUgOTUKK2R1bXAKK2dldF9zaXplCit2YWxpZGF0ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL3Rlc3QuaXJlbCBiL3Rlc3RzL3Byb2dzL3Rlc3RfZGF0YS90ZXN0LmlyZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzMzhiYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Byb2dzL3Rlc3RfZGF0YS90ZXN0LmlyZWwKQEAgLTAsMCArMSw2OSBAQAorIworIyBUaGlzIGlzIHRoZSB0ZXN0IHNjcmlwdCBmb3IgdGhlIGlub2RlIHJlbG9jYXRpb24gdGFibGUuCisjCisjIENvcHlyaWdodCAxOTk3IGJ5IFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgCisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorIworIworaXJlbF9kdW1wCitpcmVsX3B1dCAyIDExIDMKK2lyZWxfcHV0IDEgMTAgMgoraXJlbF9wdXQgMyA5IDEKK2lyZWxfYWRkX3JlZiAxIDQgMTI4CitpcmVsX2FkZF9yZWYgMSA1IDY0CisjCisjIENoZWNrIHRvIHNlZSB3aGF0IGhhcHBlbnMgaWYgd2UgYWRkIHRvbyBtYW55IHJlZmVyZW5jZXMKKyMKK2lyZWxfYWRkX3JlZiAxIDYgNTEyCisjCisjIFRyeSByZXNpemluZyB0aGUgbnVtYmVyIG9mIHJlZmVyZW5jZXMgYW5kIHJldHJ5IHRoZSBhZGQKKyMKK2lyZWxfcHV0IDEgOCAzCitpcmVsX2FkZF9yZWYgMSA2IDUxMgorIworaXJlbF9hZGRfcmVmIDIgNCA2NAorIworIyBUZXN0IGJvdW5kYXJ5IGNhc2VzIG9mIGlyZWxfcHV0CisjCitpcmVsX3B1dCAyMyAxMiAxCitpcmVsX3B1dCAyNCAxMyAxCisjCisjIFRlc3Qgb3RoZXIgYm91bmRhcnkgY2FzZXMuLi4uCisjCitpcmVsX2dldCAyNAoraXJlbF9kZWxldGUgMjQKKyMKKyMgVGVzdCByZXRyaXZhbHMKKyMKK2lyZWxfZ2V0IDMKK2lyZWxfZ2V0IDEKKyMKKyMgVGVzdCB0aGUgaXRlcmF0b3IgZnVuY3Rpb25zCisjCitpcmVsX3N0YXJ0X2l0ZXIKK2lyZWxfbmV4dAoraXJlbF9uZXh0CitpcmVsX25leHQKK2lyZWxfbmV4dAorIworIyBOb3cgdHJ5IHRoZSBkZWxldGUgZnVuY3Rpb24sIG9uIGV4aXN0aW5nIGFuZCBub24tZXhpc3RlbnQgZW50cmllcworIworaXJlbF9kZWxldGUgMgoraXJlbF9kZWxldGUgMgoraXJlbF9kZWxldGUgNAorIworIyBNb3ZlIHRlc3RzLi4uCisjCitpcmVsX21vdmUgMSAyCitpcmVsX2R1bXAKK2lyZWxfZGVsZXRlIDQKK2lyZWxfbW92ZSAxIDQKK2lyZWxfbW92ZSAyIDQKKyMKKyMgR2V0IGJ5IG9yaWcgdGVzdHMKKyMKK2lyZWxfZHVtcAoraXJlbF9nZXRfYnlfb3JpZyAzCitpcmVsX2dldF9ieV9vcmlnIDEKK2lyZWxfZ2V0X2J5X29yaWcgNQoraXJlbF9nZXRfYnlfb3JpZyAyCmRpZmYgLS1naXQgYS90ZXN0cy9wcm9ncy90ZXN0X2ljb3VudC5jIGIvdGVzdHMvcHJvZ3MvdGVzdF9pY291bnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDI4YTYwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcHJvZ3MvdGVzdF9pY291bnQuYwpAQCAtMCwwICsxLDM2MyBAQAorLyoKKyAqIHRlc3RfaWNvdW50LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlIDxleHQyZnMvZXh0Ml9mcy5oPgorCisjaW5jbHVkZSA8ZXQvY29tX2Vyci5oPgorI2luY2x1ZGUgPHNzL3NzLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJmcy5oPgorI2luY2x1ZGUgPGV4dDJmcy9pcmVsLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2JyZWwuaD4KKworZXh0ZXJuIHNzX3JlcXVlc3RfdGFibGUgdGVzdF9jbWRzOworCisjaW5jbHVkZSAidGVzdF9pY291bnQuaCIKKworZXh0Ml9maWxzeXMgdGVzdF9mczsKK2V4dDJfaWNvdW50X3QgdGVzdF9pY291bnQ7CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggYXNzdXJlcyB0aGF0IHRoZSBpY291bnQgc3RydWN0dXJlIGlzIHZhbGlkCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfaWNvdW50KGNoYXIgKnJlcXVlc3QpCit7CisJaWYgKHRlc3RfaWNvdW50KQorCQlyZXR1cm4gMDsKKwljb21fZXJyKHJlcXVlc3QsIDAsICJUaGUgaWNvdW50IHN0cnVjdHVyZSBtdXN0IGJlIGFsbG9jYXRlZC4iKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBwYXJzZXMgYW4gaW5vZGUgbnVtYmVyLgorICovCitzdGF0aWMgaW50IHBhcnNlX2lub2RlKGNvbnN0IGNoYXIgKnJlcXVlc3QsIGNvbnN0IGNoYXIgKmRlc2MsCisJCSAgICAgICBjb25zdCBjaGFyICpzdHIsIGV4dDJfaW5vX3QgKmlubykKK3sKKwljaGFyICp0bXA7CisKKwkqaW5vID0gc3RydG91bChzdHIsICZ0bXAsIDApOworCWlmICgqdG1wKSB7CisJCWNvbV9lcnIocmVxdWVzdCwgMCwgIkJhZCAlcyAtICVzIiwgZGVzYywgc3RyKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIGRvX2NyZWF0ZV9pY291bnQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJKnByb2duYW1lOworCWludAkJZmxhZ3MgPSAwOworCWV4dDJfaW5vX3QJc2l6ZSA9IDU7CisKKwlwcm9nbmFtZSA9ICphcmd2OworCWFyZ3YrKzsgYXJnYyAtLTsKKworCWlmIChhcmdjICYmICFzdHJjbXAoIi1pIiwgKmFyZ3YpKSB7CisJCWZsYWdzIHw9IEVYVDJfSUNPVU5UX09QVF9JTkNSRU1FTlQ7CisJCWFyZ3YrKzsgYXJnYy0tOworCX0KKwlpZiAoYXJnYykgeworCQlpZiAocGFyc2VfaW5vZGUocHJvZ25hbWUsICJpY291bnQgc2l6ZSIsIGFyZ3ZbMF0sICZzaXplKSkKKwkJCXJldHVybjsKKwkJYXJndisrOyBhcmdjLS07CisJfQorI2lmIDAKKwlwcmludGYoIkNyZWF0aW5nIGljb3VudC4uLiBmbGFncz0lZCwgc2l6ZT0lZFxuIiwgZmxhZ3MsIChpbnQpIHNpemUpOworI2VuZGlmCisJcmV0dmFsID0gZXh0MmZzX2NyZWF0ZV9pY291bnQodGVzdF9mcywgZmxhZ3MsIChpbnQpIHNpemUsCisJCQkJICAgICAgJnRlc3RfaWNvdW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ25hbWUsIHJldHZhbCwgIndoaWxlIGNyZWF0aW5nIGljb3VudCIpOworCQlyZXR1cm47CisJfQorfQorCit2b2lkIGRvX2ZyZWVfaWNvdW50KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpZiAoY2hlY2tfaWNvdW50KGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlleHQyZnNfZnJlZV9pY291bnQodGVzdF9pY291bnQpOworCXRlc3RfaWNvdW50ID0gMDsKK30KKwordm9pZCBkb19mZXRjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhcgkqdXNhZ2UgPSAidXNhZ2U6ICVzIGlub2RlXG4iOworCWVycmNvZGVfdAlyZXR2YWw7CisJZXh0Ml9pbm9fdAlpbm87CisJX191MTYJCWNvdW50OworCisJaWYgKGFyZ2MgPCAyKSB7CisJCXByaW50Zih1c2FnZSwgYXJndlswXSk7CisJCXJldHVybjsKKwl9CisJaWYgKGNoZWNrX2ljb3VudChhcmd2WzBdKSkKKwkJcmV0dXJuOworCWlmIChwYXJzZV9pbm9kZShhcmd2WzBdLCAiaW5vZGUiLCBhcmd2WzFdLCAmaW5vKSkKKwkJcmV0dXJuOworCXJldHZhbCA9IGV4dDJmc19pY291bnRfZmV0Y2godGVzdF9pY291bnQsIGlubywgJmNvdW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaWNvdW50X2ZldGNoIik7CisJCXJldHVybjsKKwl9CisJcHJpbnRmKCJDb3VudCBpcyAldVxuIiwgY291bnQpOworfQorCit2b2lkIGRvX2luY3JlbWVudChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhcgkqdXNhZ2UgPSAidXNhZ2U6ICVzIGlub2RlXG4iOworCWVycmNvZGVfdAlyZXR2YWw7CisJZXh0Ml9pbm9fdAlpbm87CisJX191MTYJCWNvdW50OworCisJaWYgKGFyZ2MgPCAyKSB7CisJCXByaW50Zih1c2FnZSwgYXJndlswXSk7CisJCXJldHVybjsKKwl9CisJaWYgKGNoZWNrX2ljb3VudChhcmd2WzBdKSkKKwkJcmV0dXJuOworCWlmIChwYXJzZV9pbm9kZShhcmd2WzBdLCAiaW5vZGUiLCBhcmd2WzFdLCAmaW5vKSkKKwkJcmV0dXJuOworCXJldHZhbCA9IGV4dDJmc19pY291bnRfaW5jcmVtZW50KHRlc3RfaWNvdW50LCBpbm8sICZjb3VudCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwKKwkJCSJ3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfaW5jcmVtZW50Iik7CisJCXJldHVybjsKKwl9CisJcHJpbnRmKCJDb3VudCBpcyBub3cgJXVcbiIsIGNvdW50KTsKK30KKwordm9pZCBkb19kZWNyZW1lbnQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIJKnVzYWdlID0gInVzYWdlOiAlcyBpbm9kZVxuIjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfaW5vX3QJaW5vOworCV9fdTE2CQljb3VudDsKKworCWlmIChhcmdjIDwgMikgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCWlmIChjaGVja19pY291bnQoYXJndlswXSkpCisJCXJldHVybjsKKwlpZiAocGFyc2VfaW5vZGUoYXJndlswXSwgImlub2RlIiwgYXJndlsxXSwgJmlubykpCisJCXJldHVybjsKKwlyZXR2YWwgPSBleHQyZnNfaWNvdW50X2RlY3JlbWVudCh0ZXN0X2ljb3VudCwgaW5vLCAmY291bnQpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsCisJCQkid2hpbGUgY2FsbGluZyBleHQyZnNfaWNvdW50X2RlY3JlbWVudCIpOworCQlyZXR1cm47CisJfQorCXByaW50ZigiQ291bnQgaXMgbm93ICV1XG4iLCBjb3VudCk7Cit9CisKK3ZvaWQgZG9fc3RvcmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIJKnVzYWdlID0gInVzYWdlOiAlcyBpbm9kZSBjb3VudFxuIjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfaW5vX3QJaW5vOworCWV4dDJfaW5vX3QJY291bnQ7CisKKwlpZiAoYXJnYyA8IDMpIHsKKwkJcHJpbnRmKHVzYWdlLCBhcmd2WzBdKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoY2hlY2tfaWNvdW50KGFyZ3ZbMF0pKQorCQlyZXR1cm47CisJaWYgKHBhcnNlX2lub2RlKGFyZ3ZbMF0sICJpbm9kZSIsIGFyZ3ZbMV0sICZpbm8pKQorCQlyZXR1cm47CisJaWYgKHBhcnNlX2lub2RlKGFyZ3ZbMF0sICJjb3VudCIsIGFyZ3ZbMl0sICZjb3VudCkpCisJCXJldHVybjsKKwlpZiAoY291bnQgPiA2NTUzNSkgeworCQlwcmludGYoIkNvdW50IHRvbyBsYXJnZS5cbiIpOworCQlyZXR1cm47CisJfQorCXJldHZhbCA9IGV4dDJmc19pY291bnRfc3RvcmUodGVzdF9pY291bnQsIGlubywgKF9fdTE2KSBjb3VudCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwKKwkJCSJ3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfc3RvcmUiKTsKKwkJcmV0dXJuOworCX0KK30KKwordm9pZCBkb19kdW1wKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfaW5vX3QJaTsKKwlfX3UxNgkJY291bnQ7CisKKwlpZiAoY2hlY2tfaWNvdW50KGFyZ3ZbMF0pKQorCQlyZXR1cm47CisJZm9yIChpPTE7IGkgPD0gdGVzdF9mcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50OyBpKyspIHsKKwkJcmV0dmFsID0gZXh0MmZzX2ljb3VudF9mZXRjaCh0ZXN0X2ljb3VudCwgaSwgJmNvdW50KTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsCisJCQkJIndoaWxlIGZldGNoaW5nIGljb3VudCBmb3IgJWx1IiwgKHVuc2lnbmVkIGxvbmcpaSk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKGNvdW50KQorCQkJcHJpbnRmKCIlbHU6ICV1XG4iLCAodW5zaWduZWQgbG9uZylpLCBjb3VudCk7CisJfQorfQorCit2b2lkIGRvX3ZhbGlkYXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCisJaWYgKGNoZWNrX2ljb3VudChhcmd2WzBdKSkKKwkJcmV0dXJuOworCXJldHZhbCA9IGV4dDJmc19pY291bnRfdmFsaWRhdGUodGVzdF9pY291bnQsIHN0ZG91dCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIHZhbGlkYXRpbmcgaWNvdW50IHN0cnVjdHVyZSIpOworCQlyZXR1cm47CisJfQorCXByaW50ZigiSWNvdW50IHN0cnVjdHVyZSBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkXG4iKTsKK30KKwordm9pZCBkb19nZXRfc2l6ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXh0Ml9pbm9fdAlzaXplOworCisJaWYgKGNoZWNrX2ljb3VudChhcmd2WzBdKSkKKwkJcmV0dXJuOworCXNpemUgPSBleHQyZnNfZ2V0X2ljb3VudF9zaXplKHRlc3RfaWNvdW50KTsKKwlwcmludGYoIlNpemUgb2YgaWNvdW50IGlzOiAlbHVcbiIsICh1bnNpZ25lZCBsb25nKXNpemUpOworfQorCitzdGF0aWMgaW50IHNvdXJjZV9maWxlKGNvbnN0IGNoYXIgKmNtZF9maWxlLCBpbnQgc2NpX2lkeCkKK3sKKwlGSUxFCQkqZjsKKwljaGFyCQlidWZbMjU2XTsKKwljaGFyCQkqY3A7CisJaW50CQlleGl0X3N0YXR1cyA9IDA7CisJaW50CQlyZXR2YWw7CisJaW50IAkJbm9lY2hvOworCisJaWYgKHN0cmNtcChjbWRfZmlsZSwgIi0iKSA9PSAwKQorCQlmID0gc3RkaW47CisJZWxzZSB7CisJCWYgPSBmb3BlbihjbWRfZmlsZSwgInIiKTsKKwkJaWYgKCFmKSB7CisJCQlwZXJyb3IoY21kX2ZpbGUpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlmZmx1c2goc3Rkb3V0KTsKKwlmZmx1c2goc3RkZXJyKTsKKwlzZXRidWYoc3Rkb3V0LCBOVUxMKTsKKwlzZXRidWYoc3RkZXJyLCBOVUxMKTsKKwl3aGlsZSAoIWZlb2YoZikpIHsKKwkJaWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpID09IE5VTEwpCisJCQlicmVhazsKKwkJaWYgKGJ1ZlswXSA9PSAnIycpCisJCQljb250aW51ZTsKKwkJbm9lY2hvID0gMDsKKwkJaWYgKGJ1ZlswXSA9PSAnLScpIHsKKwkJCW5vZWNobyA9IDE7CisJCQlidWZbMF0gPSAnICc7CisJCX0KKwkJY3AgPSBzdHJjaHIoYnVmLCAnXG4nKTsKKwkJaWYgKGNwKQorCQkJKmNwID0gMDsKKwkJY3AgPSBzdHJjaHIoYnVmLCAnXHInKTsKKwkJaWYgKGNwKQorCQkJKmNwID0gMDsKKwkJaWYgKCFub2VjaG8pCisJCQlwcmludGYoInRlc3RfaWNvdW50OiAlc1xuIiwgYnVmKTsKKwkJcmV0dmFsID0gc3NfZXhlY3V0ZV9saW5lKHNjaV9pZHgsIGJ1Zik7CisJCWlmIChyZXR2YWwpIHsKKwkJCXNzX3BlcnJvcihzY2lfaWR4LCByZXR2YWwsIGJ1Zik7CisJCQlleGl0X3N0YXR1cysrOworCQl9CisJfQorCWlmIChmICE9IHN0ZGluKQorCQlmY2xvc2UoZik7CisJcmV0dXJuIGV4aXRfc3RhdHVzOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CQlyZXR2YWw7CisJaW50CQlzY2lfaWR4OworCWludAkJYzsKKwljaGFyCQkqcmVxdWVzdCA9IDA7CisJaW50CQlleGl0X3N0YXR1cyA9IDA7CisJY2hhcgkJKmNtZF9maWxlID0gMDsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayBwYXJhbTsKKworCWluaXRpYWxpemVfZXh0Ml9lcnJvcl90YWJsZSgpOworCisJLyoKKwkgKiBDcmVhdGUgYSBzYW1wbGUgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUKKwkgKi8KKwltZW1zZXQoJnBhcmFtLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2spKTsKKwlleHQyZnNfYmxvY2tzX2NvdW50X3NldCgmcGFyYW0sIDgwMDAwKTsKKwlwYXJhbS5zX2lub2Rlc19jb3VudCA9IDIwMDAwOworCXJldHZhbCA9IGV4dDJmc19pbml0aWFsaXplKCIvZGV2L251bGwiLCAwLCAmcGFyYW0sCisJCQkJICAgdW5peF9pb19tYW5hZ2VyLCAmdGVzdF9mcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCIvZGV2L251bGwiLCByZXR2YWwsICJ3aGlsZSBzZXR0aW5nIHVwIHRlc3QgZnMiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJ3UjpmOiIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ1InOgorCQkJcmVxdWVzdCA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWNtZF9maWxlID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogdGVzdF9pY291bnQgIgorCQkJCSJbLVIgcmVxdWVzdF0gWy1mIGNtZF9maWxlXSIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlzY2lfaWR4ID0gc3NfY3JlYXRlX2ludm9jYXRpb24oInRlc3RfaWNvdW50IiwgIjAuMCIsIChjaGFyICopIE5VTEwsCisJCQkJICAgICAgICZ0ZXN0X2NtZHMsICZyZXR2YWwpOworCWlmIChyZXR2YWwpIHsKKwkJc3NfcGVycm9yKHNjaV9pZHgsIHJldHZhbCwgImNyZWF0aW5nIGludm9jYXRpb24iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwkodm9pZCkgc3NfYWRkX3JlcXVlc3RfdGFibGUgKHNjaV9pZHgsICZzc19zdGRfcmVxdWVzdHMsIDEsICZyZXR2YWwpOworCWlmIChyZXR2YWwpIHsKKwkJc3NfcGVycm9yKHNjaV9pZHgsIHJldHZhbCwgImFkZGluZyBzdGFuZGFyZCByZXF1ZXN0cyIpOworCQlleGl0ICgxKTsKKwl9CisJaWYgKHJlcXVlc3QpIHsKKwkJcmV0dmFsID0gMDsKKwkJcmV0dmFsID0gc3NfZXhlY3V0ZV9saW5lKHNjaV9pZHgsIHJlcXVlc3QpOworCQlpZiAocmV0dmFsKSB7CisJCQlzc19wZXJyb3Ioc2NpX2lkeCwgcmV0dmFsLCByZXF1ZXN0KTsKKwkJCWV4aXRfc3RhdHVzKys7CisJCX0KKwl9IGVsc2UgaWYgKGNtZF9maWxlKSB7CisJCWV4aXRfc3RhdHVzID0gc291cmNlX2ZpbGUoY21kX2ZpbGUsIHNjaV9pZHgpOworCX0gZWxzZSB7CisJCXNzX2xpc3RlbihzY2lfaWR4KTsKKwl9CisKKwlyZXR1cm4oZXhpdF9zdGF0dXMpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvcHJvZ3MvdGVzdF9pY291bnQuaCBiL3Rlc3RzL3Byb2dzL3Rlc3RfaWNvdW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTllYTFhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Byb2dzL3Rlc3RfaWNvdW50LmgKQEAgLTAsMCArMSwxMCBAQAordm9pZCBkb19jcmVhdGVfaWNvdW50KGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2ZyZWVfaWNvdW50KGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2ZldGNoKGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2luY3JlbWVudChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb19kZWNyZW1lbnQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9fc3RvcmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9fZ2V0X3NpemUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9fZHVtcChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb192YWxpZGF0ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworCmRpZmYgLS1naXQgYS90ZXN0cy9wcm9ncy90ZXN0X2ljb3VudF9jbWRzLmN0IGIvdGVzdHMvcHJvZ3MvdGVzdF9pY291bnRfY21kcy5jdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2NjNmY0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcHJvZ3MvdGVzdF9pY291bnRfY21kcy5jdApAQCAtMCwwICsxLDM3IEBACisjCisjIENvcHlyaWdodCAoQykgMTk5NyBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorIworY29tbWFuZF90YWJsZSB0ZXN0X2NtZHM7CisKKyMKKyMgSWNvdW50IHRhYmxlIGNvbW1hbmRzCisjCityZXF1ZXN0IGRvX2NyZWF0ZV9pY291bnQsICJDcmVhdGUgYW4gaWNvdW50IHN0cnVjdHVyZSIsCisJY3JlYXRlX2ljb3VudCwgY3JlYXRlOworCityZXF1ZXN0IGRvX2ZyZWVfaWNvdW50LCAiRnJlZSBhbiBpY291bnQgc3RydWN0dXJlIiwKKwlmcmVlX2ljb3VudCwgZnJlZTsKKworcmVxdWVzdCBkb19mZXRjaCwgIkZldGNoIGFuIGljb3VudCBlbnRyeSIsCisJZmV0Y2g7CisKK3JlcXVlc3QgZG9faW5jcmVtZW50LCAiSW5jcmVtZW50IGFuIGljb3VudCBlbnRyeSIsCisJaW5jcmVtZW50LCBpbmM7CisKK3JlcXVlc3QgZG9fZGVjcmVtZW50LCAiRGVjcmVtZW50IGFuIGljb3VudCBlbnRyeSIsCisJZGVjcmVtZW50LCBkZWM7CisKK3JlcXVlc3QgZG9fc3RvcmUsICJTdG9yZSBhbiBpY291bnQgZW50cnkiLAorCXN0b3JlOworCityZXF1ZXN0IGRvX2dldF9zaXplLCAiR2V0IHRoZSBzaXplIG9mIHRoZSBpY291bnQgc3RydWN0dXJlIiwKKwlnZXRfc2l6ZTsKKworcmVxdWVzdCBkb19kdW1wLCAiRHVtcCB0aGUgaWNvdW50IHN0cnVjdHVyZSIsCisJZHVtcDsKKworcmVxdWVzdCBkb192YWxpZGF0ZSwgIlZhbGlkYXRlIHRoZSBpY291bnQgc3RydWN0dXJlIiwKKwl2YWxpZGF0ZSwgY2hlY2s7CisKK2VuZDsKZGlmZiAtLWdpdCBhL3Rlc3RzL3Byb2dzL3Rlc3RfcmVsLmMgYi90ZXN0cy9wcm9ncy90ZXN0X3JlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNzI4MGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9wcm9ncy90ZXN0X3JlbC5jCkBAIC0wLDAgKzEsNzY0IEBACisvKgorICogdGVzdF9yZWwuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgPGV0L2NvbV9lcnIuaD4KKyNpbmNsdWRlIDxzcy9zcy5oPgorI2luY2x1ZGUgPGV4dDJmcy9leHQyX2ZzLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJmcy5oPgorI2luY2x1ZGUgPGV4dDJmcy9pcmVsLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2JyZWwuaD4KKworI2luY2x1ZGUgInRlc3RfcmVsLmgiCisKK2V4dGVybiBzc19yZXF1ZXN0X3RhYmxlIHRlc3RfY21kczsKKworZXh0Ml9pcmVsIGlyZWwgPSBOVUxMOworZXh0Ml9icmVsIGJyZWwgPSBOVUxMOworCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIHBhcnNlcyBhbiBpbm9kZSBudW1iZXIuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfaW5vZGUoY29uc3QgY2hhciAqcmVxdWVzdCwgY29uc3QgY2hhciAqZGVzYywKKwkJICAgICAgIGNvbnN0IGNoYXIgKnN0ciwgZXh0Ml9pbm9fdCAqaW5vKQoreworCWNoYXIgKnRtcDsKKworCSppbm8gPSBzdHJ0b3VsKHN0ciwgJnRtcCwgMCk7CisJaWYgKCp0bXApIHsKKwkJY29tX2VycihyZXF1ZXN0LCAwLCAiQmFkICVzIC0gJXMiLCBkZXNjLCBzdHIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggcGFyc2VzIGEgYmxvY2sgbnVtYmVyLgorICovCitzdGF0aWMgaW50IHBhcnNlX2Jsb2NrKGNvbnN0IGNoYXIgKnJlcXVlc3QsIGNvbnN0IGNoYXIgKmRlc2MsCisJCSAgICAgICBjb25zdCBjaGFyICpzdHIsIGJsa190ICpibGspCit7CisJY2hhciAqdG1wOworCisJKmJsayA9IHN0cnRvdWwoc3RyLCAmdG1wLCAwKTsKKwlpZiAoKnRtcCkgeworCQljb21fZXJyKHJlcXVlc3QsIDAsICJCYWQgJXMgLSAlcyIsIGRlc2MsIHN0cik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBhc3N1cmVzIHRoYXQgYSBicmVsIHRhYmxlIGlzIG9wZW4KKyAqLworc3RhdGljIGludCBjaGVja19icmVsKGNoYXIgKnJlcXVlc3QpCit7CisJaWYgKGJyZWwpCisJCXJldHVybiAwOworCWNvbV9lcnIocmVxdWVzdCwgMCwgIkEgYmxvY2sgcmVsb2NhdGlvbiB0YWJsZSBtdXN0IGJlIG9wZW4uIik7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggYXNzdXJlcyB0aGF0IGFuIGlyZWwgdGFibGUgaXMgb3BlbgorICovCitzdGF0aWMgaW50IGNoZWNrX2lyZWwoY2hhciAqcmVxdWVzdCkKK3sKKwlpZiAoaXJlbCkKKwkJcmV0dXJuIDA7CisJY29tX2VycihyZXF1ZXN0LCAwLCAiQW4gaW5vZGUgcmVsb2NhdGlvbiB0YWJsZSBtdXN0IGJlIG9wZW4uIik7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggZGlzcGxheXMgYSBicmVsIGVudHJ5CisgKi8KK3N0YXRpYyB2b2lkIGRpc3BsYXlfYnJlbF9lbnRyeShibGtfdCBvbGQsCisJCQkgICAgICAgc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGVfZW50cnkgKmVudCkKK3sKKwlwcmludGYoIk9sZD0gJXUsIE5ldz0gJXUsIE93bmVyPSAldToldVxuIiwgb2xkLCBlbnQtPm5ldywKKwkgICAgICAgZW50LT5vd25lci5ibG9ja19yZWYsIGVudC0+b2Zmc2V0KTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBkaXNwbGF5cyBhbiBpcmVsIGVudHJ5CisgKi8KK3N0YXRpYyB2b2lkIGRpc3BsYXlfaXJlbF9lbnRyeShleHQyX2lub190IG9sZCwKKwkJCSAgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSAqZW50LAorCQkJICAgICAgIGludCBkb19yZWZzKQoreworCXN0cnVjdCBleHQyX2lub2RlX3JlZmVyZW5jZSByZWY7CisJZXJyY29kZV90CXJldHZhbDsKKwlpbnQJCWZpcnN0ID0gMTsKKworCXByaW50ZigiT2xkPSAlbHUsIE5ldz0gJWx1LCBPcmlnaW5hbD0lbHUsIE1heF9yZWZzPSV1XG4iLCBvbGQsCisJICAgICAgIGVudC0+bmV3LCBlbnQtPm9yaWcsIGVudC0+bWF4X3JlZnMpOworCWlmICghZG9fcmVmcykKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2lyZWxfc3RhcnRfaXRlcl9yZWYoaXJlbCwgb2xkKTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ZigiXHRDb3VsZG4ndCBnZXQgcmVmZXJlbmNlczogJXNcbiIsCisJCSAgICAgICBlcnJvcl9tZXNzYWdlKHJldHZhbCkpOworCQlyZXR1cm47CisJfQorCXdoaWxlICgxKSB7CisJCXJldHZhbCA9IGV4dDJmc19pcmVsX25leHRfcmVmKGlyZWwsICZyZWYpOworCQlpZiAocmV0dmFsKSB7CisJCQlwcmludGYoIiglcykgIiwgZXJyb3JfbWVzc2FnZShyZXR2YWwpKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZWYuYmxvY2sgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoZmlyc3QpIHsKKwkJCWZwdXRjKCdcdCcsIHN0ZG91dCk7CisJCQlmaXJzdCA9IDA7CisJCX0gZWxzZQorCQkJcHJpbnRmKCIsICIpOworCQlwcmludGYoIiV1OiV1IiwgcmVmLmJsb2NrLCByZWYub2Zmc2V0KTsKKwl9CisJaWYgKCFmaXJzdCkKKwkJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKK30KKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgYWN0dWFsIGNvbW1hbmQgdGFibGUgcHJvY2VkdXJlcworICovCit2b2lkIGRvX2JyZWxfbWFfY3JlYXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICp1c2FnZSA9ICJVc2FnZTogJXMgbmFtZSBtYXhfYmxvY2tzXG4iOworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrX3QJCW1heF9ibGs7CisKKwlpZiAoYXJnYyA8IDMpIHsKKwkJcHJpbnRmKHVzYWdlLCBhcmd2WzBdKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGFyc2VfYmxvY2soYXJndlswXSwgIm1heF9ibG9ja3MiLCBhcmd2WzJdLCAmbWF4X2JsaykpCisJCXJldHVybjsKKwlyZXR2YWwgPSBleHQyZnNfYnJlbF9tZW1hcnJheV9jcmVhdGUoYXJndlsxXSwgbWF4X2JsaywgJmJyZWwpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBvcGVuaW5nIG1lbWFycmF5IGJyZWwiKTsKKwkJcmV0dXJuOworCX0KKwlyZXR1cm47Cit9CisKK3ZvaWQgZG9fYnJlbF9mcmVlKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpZiAoY2hlY2tfYnJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCWV4dDJmc19icmVsX2ZyZWUoYnJlbCk7CisJYnJlbCA9IE5VTEw7CisJcmV0dXJuOworfQorCit2b2lkIGRvX2JyZWxfcHV0KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICp1c2FnZSA9ICJ1c2FnZTogJXMgb2xkX2Jsb2NrIG5ld19ibG9jayBbb3duZXJdIFtvZmZzZXRdIjsKKwllcnJjb2RlX3QgcmV0dmFsOworCXN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRlX2VudHJ5IGVudDsKKwlibGtfdAlvbGQsIG5ldywgb2Zmc2V0PTAsIG93bmVyPTA7CisKKwlpZiAoY2hlY2tfYnJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaWYgKGFyZ2MgPCAzKSB7CisJCXByaW50Zih1c2FnZSwgYXJndlswXSk7CisJCXJldHVybjsKKwl9CisJaWYgKHBhcnNlX2Jsb2NrKGFyZ3ZbMF0sICJvbGQgYmxvY2siLCBhcmd2WzFdLCAmb2xkKSkKKwkJcmV0dXJuOworCWlmIChwYXJzZV9ibG9jayhhcmd2WzBdLCAibmV3IGJsb2NrIiwgYXJndlsyXSwgJm5ldykpCisJCXJldHVybjsKKwlpZiAoYXJnYyA+IDMgJiYKKwkgICAgcGFyc2VfYmxvY2soYXJndlswXSwgIm93bmVyIGJsb2NrIiwgYXJndlszXSwgJm93bmVyKSkKKwkJcmV0dXJuOworCWlmIChhcmdjID4gNCAmJgorCSAgICBwYXJzZV9ibG9jayhhcmd2WzBdLCAib2Zmc2V0IiwgYXJndls0XSwgJm9mZnNldCkpCisJCXJldHVybjsKKwlpZiAob2Zmc2V0ID4gNjU1MzUpIHsKKwkJcHJpbnRmKCJPZmZzZXQgdG9vIGxhcmdlLlxuIik7CisJCXJldHVybjsKKwl9CisJZW50Lm5ldyA9IG5ldzsKKwllbnQub2Zmc2V0ID0gKF9fdTE2KSBvZmZzZXQ7CisJZW50LmZsYWdzID0gMDsKKwllbnQub3duZXIuYmxvY2tfcmVmID0gb3duZXI7CisKKwlyZXR2YWwgPSBleHQyZnNfYnJlbF9wdXQoYnJlbCwgb2xkLCAmZW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9wdXQiKTsKKwkJcmV0dXJuOworCX0KKwlyZXR1cm47Cit9CisKK3ZvaWQgZG9fYnJlbF9nZXQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnVzYWdlID0gIiVzIGJsb2NrIjsKKwllcnJjb2RlX3QgcmV0dmFsOworCXN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRlX2VudHJ5IGVudDsKKwlibGtfdAlibGs7CisKKwlpZiAoY2hlY2tfYnJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCWlmIChhcmdjIDwgMikgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCWlmIChwYXJzZV9ibG9jayhhcmd2WzBdLCAiYmxvY2siLCBhcmd2WzFdLCAmYmxrKSkKKwkJcmV0dXJuOworCXJldHZhbCA9IGV4dDJmc19icmVsX2dldChicmVsLCBibGssICZlbnQpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19icmVsX2dldCIpOworCQlyZXR1cm47CisJfQorCWRpc3BsYXlfYnJlbF9lbnRyeShibGssICZlbnQpOworCXJldHVybjsKK30KKwordm9pZCBkb19icmVsX3N0YXJ0X2l0ZXIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWVycmNvZGVfdCByZXR2YWw7CisKKwlpZiAoY2hlY2tfYnJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2JyZWxfc3RhcnRfaXRlcihicmVsKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9zdGFydF9pdGVyIik7CisJCXJldHVybjsKKwl9CisJcmV0dXJuOworfQorCit2b2lkIGRvX2JyZWxfbmV4dChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXJyY29kZV90IHJldHZhbDsKKwlzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0ZV9lbnRyeSBlbnQ7CisJYmxrX3QJYmxrOworCisJaWYgKGNoZWNrX2JyZWwoYXJndlswXSkpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19icmVsX25leHQoYnJlbCwgJmJsaywgJmVudCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2JyZWxfbmV4dCIpOworCQlyZXR1cm47CisJfQorCWlmIChibGsgPT0gMCkgeworCQlwcmludGYoIk5vIG1vcmUgZW50cmllcyFcbiIpOworCQlyZXR1cm47CisJfQorCWRpc3BsYXlfYnJlbF9lbnRyeShibGssICZlbnQpOworCXJldHVybjsKK30KKwordm9pZCBkb19icmVsX2R1bXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWVycmNvZGVfdCByZXR2YWw7CisJc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGVfZW50cnkgZW50OworCWJsa190CWJsazsKKworCWlmIChjaGVja19icmVsKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfYnJlbF9zdGFydF9pdGVyKGJyZWwpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19icmVsX3N0YXJ0X2l0ZXIiKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlICgxKSB7CisJCXJldHZhbCA9IGV4dDJmc19icmVsX25leHQoYnJlbCwgJmJsaywgJmVudCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9uZXh0Iik7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKGJsayA9PSAwKQorCQkJYnJlYWs7CisKKwkJZGlzcGxheV9icmVsX2VudHJ5KGJsaywgJmVudCk7CisJfQorCXJldHVybjsKK30KKwordm9pZCBkb19icmVsX21vdmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnVzYWdlID0gIiVzIG9sZF9ibG9jayBuZXdfYmxvY2siOworCWVycmNvZGVfdCByZXR2YWw7CisJYmxrX3QJb2xkLCBuZXc7CisKKwlpZiAoY2hlY2tfYnJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCWlmIChhcmdjIDwgMikgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCWlmIChwYXJzZV9ibG9jayhhcmd2WzBdLCAib2xkIGJsb2NrIiwgYXJndlsxXSwgJm9sZCkpCisJCXJldHVybjsKKwlpZiAocGFyc2VfYmxvY2soYXJndlswXSwgIm5ldyBibG9jayIsIGFyZ3ZbMl0sICZuZXcpKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfYnJlbF9tb3ZlKGJyZWwsIG9sZCwgbmV3KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9tb3ZlIik7CisJCXJldHVybjsKKwl9CisJcmV0dXJuOworfQorCit2b2lkIGRvX2JyZWxfZGVsZXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICp1c2FnZSA9ICIlcyBibG9jayI7CisJZXJyY29kZV90IHJldHZhbDsKKwlibGtfdAlibGs7CisKKwlpZiAoY2hlY2tfYnJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCWlmIChhcmdjIDwgMikgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCWlmIChwYXJzZV9ibG9jayhhcmd2WzBdLCAiYmxvY2siLCBhcmd2WzFdLCAmYmxrKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2JyZWxfZGVsZXRlKGJyZWwsIGJsayk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2JyZWxfZGVsZXRlIik7CisJCXJldHVybjsKKwl9Cit9CisKK3ZvaWQgZG9faXJlbF9tYV9jcmVhdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIJKnVzYWdlID0gIlVzYWdlOiAlcyBuYW1lIG1heF9pbm9kZVxuIjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfaW5vX3QJbWF4X2lubzsKKworCWlmIChhcmdjIDwgMykgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCWlmIChwYXJzZV9pbm9kZShhcmd2WzBdLCAibWF4X2lub2RlcyIsIGFyZ3ZbMl0sICZtYXhfaW5vKSkKKwkJcmV0dXJuOworCXJldHZhbCA9IGV4dDJmc19pcmVsX21lbWFycmF5X2NyZWF0ZShhcmd2WzFdLCBtYXhfaW5vLCAmaXJlbCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIG9wZW5pbmcgbWVtYXJyYXkgaXJlbCIpOworCQlyZXR1cm47CisJfQorCXJldHVybjsKK30KKwordm9pZCBkb19pcmVsX2ZyZWUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWlmIChjaGVja19pcmVsKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlleHQyZnNfaXJlbF9mcmVlKGlyZWwpOworCWlyZWwgPSBOVUxMOworCXJldHVybjsKK30KKwordm9pZCBkb19pcmVsX3B1dChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhcgkqdXNhZ2UgPSAiJXMgb2xkIG5ldyBtYXhfcmVmcyI7CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2lub190CW9sZCwgbmV3LCBtYXhfcmVmczsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSBlbnQ7CisKKwlpZiAoY2hlY2tfaXJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaWYgKGFyZ2MgPCA0KSB7CisJCXByaW50Zih1c2FnZSwgYXJndlswXSk7CisJCXJldHVybjsKKwl9CisJaWYgKHBhcnNlX2lub2RlKGFyZ3ZbMF0sICJvbGQgaW5vZGUiLCBhcmd2WzFdLCAmb2xkKSkKKwkJcmV0dXJuOworCWlmIChwYXJzZV9pbm9kZShhcmd2WzBdLCAibmV3IGlub2RlIiwgYXJndlsyXSwgJm5ldykpCisJCXJldHVybjsKKwlpZiAocGFyc2VfaW5vZGUoYXJndlswXSwgIm1heF9yZWZzIiwgYXJndlszXSwgJm1heF9yZWZzKSkKKwkJcmV0dXJuOworCWlmIChtYXhfcmVmcyA+IDY1NTM1KSB7CisJCXByaW50ZigibWF4X3JlZnMgdG9vIGJpZ1xuIik7CisJCXJldHVybjsKKwl9CisJZW50Lm5ldyA9IG5ldzsKKwllbnQubWF4X3JlZnMgPSAoX191MTYpIG1heF9yZWZzOworCWVudC5mbGFncyA9IDA7CisKKwlyZXR2YWwgPSBleHQyZnNfaXJlbF9wdXQoaXJlbCwgb2xkLCAmZW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9wdXQiKTsKKwkJcmV0dXJuOworCX0KKwlyZXR1cm47Cit9CisKK3ZvaWQgZG9faXJlbF9nZXQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIJKnVzYWdlID0gIiVzIGlub2RlIjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfaW5vX3QJb2xkOworCXN0cnVjdCBleHQyX2lub2RlX3JlbG9jYXRlX2VudHJ5IGVudDsKKworCWlmIChjaGVja19pcmVsKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJcHJpbnRmKHVzYWdlLCBhcmd2WzBdKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGFyc2VfaW5vZGUoYXJndlswXSwgImlub2RlIiwgYXJndlsxXSwgJm9sZCkpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19pcmVsX2dldChpcmVsLCBvbGQsICZlbnQpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX2dldCIpOworCQlyZXR1cm47CisJfQorCWRpc3BsYXlfaXJlbF9lbnRyeShvbGQsICZlbnQsIDEpOworCXJldHVybjsKK30KKwordm9pZCBkb19pcmVsX2dldF9ieV9vcmlnKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyCSp1c2FnZSA9ICIlcyBvcmlnX2lub2RlIjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfaW5vX3QJb3JpZywgb2xkOworCXN0cnVjdCBleHQyX2lub2RlX3JlbG9jYXRlX2VudHJ5IGVudDsKKworCWlmIChjaGVja19pcmVsKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJcHJpbnRmKHVzYWdlLCBhcmd2WzBdKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGFyc2VfaW5vZGUoYXJndlswXSwgIm9yaWdpbmFsIGlub2RlIiwgYXJndlsxXSwgJm9yaWcpKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfaXJlbF9nZXRfYnlfb3JpZyhpcmVsLCBvcmlnLCAmb2xkLCAmZW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9nZXRfYnlfb3JpZyIpOworCQlyZXR1cm47CisJfQorCWRpc3BsYXlfaXJlbF9lbnRyeShvbGQsICZlbnQsIDEpOworCXJldHVybjsKK30KKwordm9pZCBkb19pcmVsX3N0YXJ0X2l0ZXIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWVycmNvZGVfdCByZXR2YWw7CisKKwlpZiAoY2hlY2tfaXJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2lyZWxfc3RhcnRfaXRlcihpcmVsKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9zdGFydF9pdGVyIik7CisJCXJldHVybjsKKwl9CisJcmV0dXJuOworfQorCit2b2lkIGRvX2lyZWxfbmV4dChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2lub190CW9sZDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSBlbnQ7CisKKwlpZiAoY2hlY2tfaXJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2lyZWxfbmV4dChpcmVsLCAmb2xkLCAmZW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9uZXh0Iik7CisJCXJldHVybjsKKwl9CisJaWYgKG9sZCA9PSAwKSB7CisJCXByaW50ZigiTm8gbW9yZSBlbnRyaWVzIVxuIik7CisJCXJldHVybjsKKwl9CisJZGlzcGxheV9pcmVsX2VudHJ5KG9sZCwgJmVudCwgMSk7CisJcmV0dXJuOworfQorCit2b2lkIGRvX2lyZWxfZHVtcChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2lub190CWlubzsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSBlbnQ7CisKKwlpZiAoY2hlY2tfaXJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2lyZWxfc3RhcnRfaXRlcihpcmVsKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9zdGFydF9pdGVyIik7CisJCXJldHVybjsKKwl9CisKKwl3aGlsZSAoMSkgeworCQlyZXR2YWwgPSBleHQyZnNfaXJlbF9uZXh0KGlyZWwsICZpbm8sICZlbnQpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2lyZWxfbmV4dCIpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChpbm8gPT0gMCkKKwkJCWJyZWFrOworCisJCWRpc3BsYXlfaXJlbF9lbnRyeShpbm8sICZlbnQsIDEpOworCX0KKwlyZXR1cm47Cit9CisKK3ZvaWQgZG9faXJlbF9hZGRfcmVmKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyCSp1c2FnZSA9ICIlcyBpbm9kZSBibG9jayBvZmZzZXQiOworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrX3QJCWJsb2NrLCBvZmZzZXQ7CisJZXh0Ml9pbm9fdAlpbm87CisJc3RydWN0IGV4dDJfaW5vZGVfcmVmZXJlbmNlIHJlZjsKKworCisJaWYgKGNoZWNrX2lyZWwoYXJndlswXSkpCisJCXJldHVybjsKKworCWlmIChhcmdjIDwgNCkgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCWlmIChwYXJzZV9pbm9kZShhcmd2WzBdLCAiaW5vZGUiLCBhcmd2WzFdLCAmaW5vKSkKKwkJcmV0dXJuOworCWlmIChwYXJzZV9ibG9jayhhcmd2WzBdLCAiYmxvY2siLCBhcmd2WzJdLCAmYmxvY2spKQorCQlyZXR1cm47CisJaWYgKHBhcnNlX2Jsb2NrKGFyZ3ZbMF0sICJvZmZzZXQiLCBhcmd2WzNdLCAmb2Zmc2V0KSkKKwkJcmV0dXJuOworCWlmIChvZmZzZXQgPiA2NTUzNSkgeworCQlwcmludGYoIk9mZnNldCB0b28gYmlnLlxuIik7CisJCXJldHVybjsKKwl9CisJcmVmLmJsb2NrID0gYmxvY2s7CisJcmVmLm9mZnNldCA9IG9mZnNldDsKKworCXJldHZhbCA9IGV4dDJmc19pcmVsX2FkZF9yZWYoaXJlbCwgaW5vLCAmcmVmKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9hZGRfcmVmIik7CisJCXJldHVybjsKKwl9CisJcmV0dXJuOworfQorCit2b2lkIGRvX2lyZWxfc3RhcnRfaXRlcl9yZWYoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIJKnVzYWdlID0gIiVzIGlub2RlIjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfaW5vX3QJaW5vOworCisJaWYgKGNoZWNrX2lyZWwoYXJndlswXSkpCisJCXJldHVybjsKKworCWlmIChhcmdjIDwgMikgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCisJaWYgKHBhcnNlX2lub2RlKGFyZ3ZbMF0sICJpbm9kZSIsIGFyZ3ZbMV0sICZpbm8pKQorCQlyZXR1cm47CisJcmV0dmFsID0gZXh0MmZzX2lyZWxfc3RhcnRfaXRlcl9yZWYoaXJlbCwgaW5vKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9zdGFydF9pdGVyX3JlZiIpOworCQlyZXR1cm47CisJfQorCXJldHVybjsKK30KKwordm9pZCBkb19pcmVsX25leHRfcmVmKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWZlcmVuY2UgcmVmOworCWVycmNvZGVfdCByZXR2YWw7CisKKwlpZiAoY2hlY2tfaXJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2lyZWxfbmV4dF9yZWYoaXJlbCwgJnJlZik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2lyZWxfbmV4dF9yZWYiKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGYoIklub2RlIHJlZmVyZW5jZTogJXU6JXVcbiIsIHJlZi5ibG9jaywgcmVmLm9mZnNldCk7CisJcmV0dXJuOworfQorCit2b2lkIGRvX2lyZWxfbW92ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhcgkqdXNhZ2UgPSAiJXMgb2xkIG5ldyI7CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2lub190CW9sZCwgbmV3OworCisJaWYgKGNoZWNrX2lyZWwoYXJndlswXSkpCisJCXJldHVybjsKKworCWlmIChhcmdjIDwgMykgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCWlmIChwYXJzZV9pbm9kZShhcmd2WzBdLCAib2xkIGlub2RlIiwgYXJndlsxXSwgJm9sZCkpCisJCXJldHVybjsKKwlpZiAocGFyc2VfaW5vZGUoYXJndlswXSwgIm5ldyBpbm9kZSIsIGFyZ3ZbMl0sICZuZXcpKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfaXJlbF9tb3ZlKGlyZWwsIG9sZCwgbmV3KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9tb3ZlIik7CisJCXJldHVybjsKKwl9CisJcmV0dXJuOworfQorCit2b2lkIGRvX2lyZWxfZGVsZXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyCSp1c2FnZSA9ICIlcyBpbm9kZSI7CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2lub190CWlubzsKKworCWlmIChjaGVja19pcmVsKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJcHJpbnRmKHVzYWdlLCBhcmd2WzBdKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGFyc2VfaW5vZGUoYXJndlswXSwgImlub2RlIiwgYXJndlsxXSwgJmlubykpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19pcmVsX2RlbGV0ZShpcmVsLCBpbm8pOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX2RlbGV0ZSIpOworCQlyZXR1cm47CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCBzb3VyY2VfZmlsZShjb25zdCBjaGFyICpjbWRfZmlsZSwgaW50IHNjaV9pZHgpCit7CisJRklMRQkJKmY7CisJY2hhcgkJYnVmWzI1Nl07CisJY2hhcgkJKmNwOworCWludAkJZXhpdF9zdGF0dXMgPSAwOworCWludAkJcmV0dmFsOworCWludCAJCW5vZWNobzsKKworCWlmIChzdHJjbXAoY21kX2ZpbGUsICItIikgPT0gMCkKKwkJZiA9IHN0ZGluOworCWVsc2UgeworCQlmID0gZm9wZW4oY21kX2ZpbGUsICJyIik7CisJCWlmICghZikgeworCQkJcGVycm9yKGNtZF9maWxlKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJZmZsdXNoKHN0ZG91dCk7CisJZmZsdXNoKHN0ZGVycik7CisJc2V0YnVmKHN0ZG91dCwgTlVMTCk7CisJc2V0YnVmKHN0ZGVyciwgTlVMTCk7CisJd2hpbGUgKCFmZW9mKGYpKSB7CisJCWlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWlmIChidWZbMF0gPT0gJyMnKQorCQkJY29udGludWU7CisJCW5vZWNobyA9IDA7CisJCWlmIChidWZbMF0gPT0gJy0nKSB7CisJCQlub2VjaG8gPSAxOworCQkJYnVmWzBdID0gJyAnOworCQl9CisJCWNwID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7CisJCWlmIChjcCkKKwkJCSpjcCA9IDA7CisJCWNwID0gc3RyY2hyKGJ1ZiwgJ1xyJyk7CisJCWlmIChjcCkKKwkJCSpjcCA9IDA7CisJCWlmICghbm9lY2hvKQorCQkJcHJpbnRmKCJ0ZXN0X3JlbDogJXNcbiIsIGJ1Zik7CisJCXJldHZhbCA9IHNzX2V4ZWN1dGVfbGluZShzY2lfaWR4LCBidWYpOworCQlpZiAocmV0dmFsKSB7CisJCQlzc19wZXJyb3Ioc2NpX2lkeCwgcmV0dmFsLCBidWYpOworCQkJZXhpdF9zdGF0dXMrKzsKKwkJfQorCX0KKwlyZXR1cm4gZXhpdF9zdGF0dXM7Cit9CisKK3ZvaWQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CQlyZXR2YWw7CisJaW50CQlzY2lfaWR4OworCWNvbnN0IGNoYXIJKnVzYWdlID0gIlVzYWdlOiB0ZXN0X3JlbCBbLVIgcmVxdWVzdF0gWy1mIGNtZF9maWxlXSI7CisJaW50CQljOworCWNoYXIJCSpyZXF1ZXN0ID0gMDsKKwlpbnQJCWV4aXRfc3RhdHVzID0gMDsKKwljaGFyCQkqY21kX2ZpbGUgPSAwOworCisJaW5pdGlhbGl6ZV9leHQyX2Vycm9yX3RhYmxlKCk7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJ3UjpmOiIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ1InOgorCQkJcmVxdWVzdCA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWNtZF9maWxlID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb21fZXJyKGFyZ3ZbMF0sIDAsIHVzYWdlKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlzY2lfaWR4ID0gc3NfY3JlYXRlX2ludm9jYXRpb24oInRlc3RfcmVsIiwgIjAuMCIsIChjaGFyICopIE5VTEwsCisJCQkJICAgICAgICZ0ZXN0X2NtZHMsICZyZXR2YWwpOworCWlmIChyZXR2YWwpIHsKKwkJc3NfcGVycm9yKHNjaV9pZHgsIHJldHZhbCwgImNyZWF0aW5nIGludm9jYXRpb24iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwkodm9pZCkgc3NfYWRkX3JlcXVlc3RfdGFibGUgKHNjaV9pZHgsICZzc19zdGRfcmVxdWVzdHMsIDEsICZyZXR2YWwpOworCWlmIChyZXR2YWwpIHsKKwkJc3NfcGVycm9yKHNjaV9pZHgsIHJldHZhbCwgImFkZGluZyBzdGFuZGFyZCByZXF1ZXN0cyIpOworCQlleGl0ICgxKTsKKwl9CisJaWYgKHJlcXVlc3QpIHsKKwkJcmV0dmFsID0gMDsKKwkJcmV0dmFsID0gc3NfZXhlY3V0ZV9saW5lKHNjaV9pZHgsIHJlcXVlc3QpOworCQlpZiAocmV0dmFsKSB7CisJCQlzc19wZXJyb3Ioc2NpX2lkeCwgcmV0dmFsLCByZXF1ZXN0KTsKKwkJCWV4aXRfc3RhdHVzKys7CisJCX0KKwl9IGVsc2UgaWYgKGNtZF9maWxlKSB7CisJCWV4aXRfc3RhdHVzID0gc291cmNlX2ZpbGUoY21kX2ZpbGUsIHNjaV9pZHgpOworCX0gZWxzZSB7CisJCXNzX2xpc3RlbihzY2lfaWR4KTsKKwl9CisKKwlleGl0KGV4aXRfc3RhdHVzKTsKK30KKwpkaWZmIC0tZ2l0IGEvdGVzdHMvcHJvZ3MvdGVzdF9yZWwuaCBiL3Rlc3RzL3Byb2dzL3Rlc3RfcmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdjNGQwOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Byb2dzL3Rlc3RfcmVsLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIHRlc3RfcmVsLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKworCit2b2lkIGRvX2JyZWxfbWFfY3JlYXRlKGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2JyZWxfZnJlZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb19icmVsX3B1dChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb19icmVsX2dldChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb19icmVsX3N0YXJ0X2l0ZXIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9fYnJlbF9uZXh0KGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2JyZWxfZHVtcChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb19icmVsX21vdmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9fYnJlbF9kZWxldGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9faXJlbF9tYV9jcmVhdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9faXJlbF9mcmVlKGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2lyZWxfcHV0KGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2lyZWxfZ2V0KGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2lyZWxfZ2V0X2J5X29yaWcoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9faXJlbF9zdGFydF9pdGVyKGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2lyZWxfbmV4dChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb19pcmVsX2R1bXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9faXJlbF9hZGRfcmVmKGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2lyZWxfc3RhcnRfaXRlcl9yZWYoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9faXJlbF9uZXh0X3JlZihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb19pcmVsX21vdmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9faXJlbF9kZWxldGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL3Byb2dzL3Rlc3RfcmVsX2NtZHMuY3QgYi90ZXN0cy9wcm9ncy90ZXN0X3JlbF9jbWRzLmN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZDZhZTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9wcm9ncy90ZXN0X3JlbF9jbWRzLmN0CkBAIC0wLDAgKzEsODIgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk3IFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisjCitjb21tYW5kX3RhYmxlIHRlc3RfY21kczsKKworIworIyBCbG9jayByZWxvY2F0aW9uIHRhYmxlIGNvbW1hbmRzCisjCisKK3JlcXVlc3QgZG9fYnJlbF9tYV9jcmVhdGUsICJPcGVuIGEgbWVtb3J5IGFycmF5IGJsb2NrIHJlbG9jYXRpb24gdGFibGUiLAorCWJyZWxfbWFfY3JlYXRlLCBibWFfY3JlYXRlOworCityZXF1ZXN0IGRvX2JyZWxfZnJlZSwgIkZyZWUgYSBibG9jayByZWxvY2F0aW9uIHRhYmxlIiwKKwlicmVsX2ZyZWUsIGJmcmVlOworCityZXF1ZXN0IGRvX2JyZWxfcHV0LCAiQWRkIG9yIG1vZGlmeSBhIGJsb2NrIHJlbG9jYXRpb24gZW50cnkiLAorCWJyZWxfcHV0LCBicHV0OworCityZXF1ZXN0IGRvX2JyZWxfZ2V0LCAiR2V0IGEgYmxvY2sgcmVsb2NhdGlvbiBlbnRyeSIsCisJYnJlbF9nZXQsIGJnZXQ7CisKK3JlcXVlc3QgZG9fYnJlbF9zdGFydF9pdGVyLCAiU3RhcnQgaXRlcmF0aW5nIG92ZXIgdGhlIGJsb2NrIHRhYmxlIiwKKwlicmVsX3N0YXJ0X2l0ZXIsIGJzdGFydDsKKworcmVxdWVzdCBkb19icmVsX25leHQsICJHZXQgdGhlIG5leHQgYmxvY2sgcmVsb2NhdGlvbiBlbnRyeSIsCisJYnJlbF9uZXh0LCBibmV4dDsKKworcmVxdWVzdCBkb19icmVsX2R1bXAsICJEdW1wIHRoZSBibG9jayByZWxvY2F0aW9uIHRhYmxlIiwKKwlicmVsX2R1bXAsIGJkdW1wOworCityZXF1ZXN0IGRvX2JyZWxfbW92ZSwgIk1vdmUgYW4gZW50cnkgaW4gdGhlIGJsb2NrIHJlbG9jYXRpb24gdGFibGUiLAorCWJyZWxfbW92ZSwgYm1vdmU7CisKK3JlcXVlc3QgZG9fYnJlbF9kZWxldGUsICJEZWxldGUgYW4gZW50cnkgaW4gdGhlIGJsb2NrIHJlbG9jYXRpb24gdGFibGUiLAorCWJyZWxfZGVsZXRlLCBiZGVsZXRlLCBiZGVsOworCisjCisjIElub2RlIHJlbG9jYXRpb24gdGFibGUgY29tbWFuZHMKKyMKKworcmVxdWVzdCBkb19pcmVsX21hX2NyZWF0ZSwgIk9wZW4gYSBtZW1vcnkgYXJyYXkgaW5vZGUgcmVsb2NhdGlvbiB0YWJsZSIsCisJaXJlbF9tYV9jcmVhdGUsIGltYV9jcmVhdGU7CisKK3JlcXVlc3QgZG9faXJlbF9mcmVlLCAiRnJlZSBhbiBpbm9kZSByZWxvY2F0aW9uIHRhYmxlIiwKKwlpcmVsX2ZyZWUsIGlmcmVlOworCityZXF1ZXN0IGRvX2lyZWxfcHV0LCAiQWRkIG9yIG1vZGlmeSBhbiBpbm9kZSByZWxvY2F0aW9uIGVudHJ5IiwKKwlpcmVsX3B1dCwgaXB1dDsKKworcmVxdWVzdCBkb19pcmVsX2dldCwgIkdldCBhbiBpbm9kZSByZWxvY2F0aW9uIGVudHJ5IiwKKwlpcmVsX2dldCwgaWdldDsKKworcmVxdWVzdCBkb19pcmVsX2dldF9ieV9vcmlnLCAKKwkiR2V0IGFuIGlub2RlIHJlbG9jYXRpb24gZW50cnkgYnkgaXRzIG9yaWdpbmFsIG51bWJlciIsCisJaXJlbF9nZXRfYnlfb3JpZywgaWdldG9yaWcsIGlnZXRvOworCityZXF1ZXN0IGRvX2lyZWxfc3RhcnRfaXRlciwgIlN0YXJ0IGl0ZXJhdGluZyBvdmVyIHRoZSBpbm9kZSB0YWJsZSIsCisJaXJlbF9zdGFydF9pdGVyLCBpc3RhcnQ7CisKK3JlcXVlc3QgZG9faXJlbF9uZXh0LCAiR2V0IHRoZSBuZXh0IGJsb2NrIHJlbG9jYXRpb24gZW50cnkiLAorCWlyZWxfbmV4dCwgaW5leHQ7CisKK3JlcXVlc3QgZG9faXJlbF9kdW1wLCAiRHVtcCB0aGUgaW5vZGUgcmVsb2NhdGlvbiB0YWJsZSIsCisJaXJlbF9kdW1wLCBpZHVtcDsKKworcmVxdWVzdCBkb19pcmVsX2FkZF9yZWYsICJBZGQgYSByZWZlcmVuY2UgdG8gYW4gaW5vZGUgZW50cnkiLAorCWlyZWxfYWRkX3JlZiwgaWFkZHJlZiwgaWFkZHI7CisKK3JlcXVlc3QgZG9faXJlbF9zdGFydF9pdGVyX3JlZiwgIlN0YXJ0IGl0ZXJhdGluZyBvdmVyIHJlZmVyZW5jZXMgdG8gYW4gaW5vZGUiLAorCWlyZWxfc3RhcnRfaXRlcl9yZWYsIGlzdGFydHJlZiwgaXN0YXJ0cjsKKworcmVxdWVzdCBkb19pcmVsX25leHRfcmVmLCAiR2V0IHRoZSBuZXh0IHJlZmVyZW5jZSBmb3IgYW4gaW5vZGUgZW50cnkiLAorCWlyZWxfbmV4dF9yZWYsIGluZXh0cmVmLCBpbmV4dHI7CisKK3JlcXVlc3QgZG9faXJlbF9tb3ZlLCAiTW92ZSBhbiBlbnRyeSBpbiB0aGUgaW5vZGUgcmVsb2NhdGlvbiB0YWJsZSIsIAorCWlyZWxfbW92ZSwgaW1vdmU7CisKK3JlcXVlc3QgZG9faXJlbF9kZWxldGUsICJEZWxldGUgYW4gZW50cnkgaW4gdGhlIGlub2RlIHJlbG9jYXRpb24gdGFibGUiLAorCWlyZWxfZGVsZXRlLCBpZGVsZXRlLCBpZGVsOworCitlbmQ7CmRpZmYgLS1naXQgYS90ZXN0cy9yXzEwMjRfc21hbGxfYmcvc2NyaXB0IGIvdGVzdHMvcl8xMDI0X3NtYWxsX2JnL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDM4Y2I5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcl8xMDI0X3NtYWxsX2JnL3NjcmlwdApAQCAtMCwwICsxLDMxIEBACitpZiB0ZXN0IC14ICRSRVNJWkUyRlNfRVhFIC1hIC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCit0ZXN0X2Rlc2NyaXB0aW9uPSJleHQyIDEwMjQgYmxvY2tzaXplIHdpdGggc21hbGwgYmxvY2sgZ3JvdXBzIgorRkVBVFVSRVM9Ii10IGV4dDIgLU8gXnJlc2l6ZV9pbm9kZSAtYiAxMDI0IC1nIDEwMjQiCitTSVpFXzE9NjRNCitTSVpFXzI9MkcKK0xPRz0kdGVzdF9uYW1lLmxvZworRTJGU0NLPS4uL2UyZnNjay9lMmZzY2sKKworCisuICRjbWRfZGlyL3NjcmlwdHMvcmVzaXplX3Rlc3QKKworcmVzaXplX3Rlc3QKK1JDPSQ/CitpZiBbICRSQyAtZXEgMCBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2VsaWYgWyAkUkMgLWVxIDExMSBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJbG4gJExPRyAkdGVzdF9uYW1lLmZhaWxlZAorZmkKKwordW5zZXQgRkVBVFVSRVMgU0laRV8xIFNJWkVfMiBMT0cgRTJGU0NLCisKK2Vsc2UgI2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEUgLWEgLXggJERFQlVHRlNfRVhFOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaSAKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvcl82NGJpdF9iaWdfZXhwYW5kL3NjcmlwdCBiL3Rlc3RzL3JfNjRiaXRfYmlnX2V4cGFuZC9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxNmYzYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3JfNjRiaXRfYmlnX2V4cGFuZC9zY3JpcHQKQEAgLTAsMCArMSwzMSBAQAoraWYgdGVzdCAteCAkUkVTSVpFMkZTX0VYRSAtYSAteCAkREVCVUdGU19FWEU7IHRoZW4KKwordGVzdF9kZXNjcmlwdGlvbj0idmVyeSBsYXJnZSBmcyBncm93dGggdXNpbmcgZXh0NCB3LzY0Yml0IgorRkVBVFVSRVM9Ii10IGV4dDQgLU8gNjRiaXQiCitTSVpFXzE9NTEyTQorU0laRV8yPTJUCitMT0c9JHRlc3RfbmFtZS5sb2cKK0UyRlNDSz0uLi9lMmZzY2svZTJmc2NrCisKKworLiAkY21kX2Rpci9zY3JpcHRzL3Jlc2l6ZV90ZXN0CisKK3Jlc2l6ZV90ZXN0CitSQz0kPworaWYgWyAkUkMgLWVxIDAgXTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBvayIKKwl0b3VjaCAkdGVzdF9uYW1lLm9rCitlbGlmIFsgJFJDIC1lcSAxMTEgXTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2Vsc2UKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCWxuICRMT0cgJHRlc3RfbmFtZS5mYWlsZWQKK2ZpCisKK3Vuc2V0IEZFQVRVUkVTIFNJWkVfMSBTSVpFXzIgTE9HIEUyRlNDSworCitlbHNlICNpZiB0ZXN0IC14ICRSRVNJWkUyRlNfRVhFIC1hIC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkgCisKZGlmZiAtLWdpdCBhL3Rlc3RzL3JfYmlnYWxsb2NfYmlnX2V4cGFuZC9zY3JpcHQgYi90ZXN0cy9yX2JpZ2FsbG9jX2JpZ19leHBhbmQvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMTczM2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yX2JpZ2FsbG9jX2JpZ19leHBhbmQvc2NyaXB0CkBAIC0wLDAgKzEsMzEgQEAKK2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEUgLWEgLXggJERFQlVHRlNfRVhFOyB0aGVuCisKK3Rlc3RfZGVzY3JpcHRpb249ImV4dDQgd2l0aCBiaWdhbGxvYyIKK0ZFQVRVUkVTPSItdCBleHQ0IC1PIGJpZ2FsbG9jIgorU0laRV8xPTUxMk0KK1NJWkVfMj0yVAorTE9HPSR0ZXN0X25hbWUubG9nCitFMkZTQ0s9Li4vZTJmc2NrL2UyZnNjaworUkVTSVpFMkZTX09QVFM9LWYKKworLiAkY21kX2Rpci9zY3JpcHRzL3Jlc2l6ZV90ZXN0CisKK3Jlc2l6ZV90ZXN0CitSQz0kPworaWYgWyAkUkMgLWVxIDAgXTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBvayIKKwl0b3VjaCAkdGVzdF9uYW1lLm9rCitlbGlmIFsgJFJDIC1lcSAxMTEgXTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2Vsc2UKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCWxuICRMT0cgJHRlc3RfbmFtZS5mYWlsZWQKK2ZpCisKK3Vuc2V0IEZFQVRVUkVTIFNJWkVfMSBTSVpFXzIgTE9HIEUyRlNDSworCitlbHNlICNpZiB0ZXN0IC14ICRSRVNJWkUyRlNfRVhFIC1hIC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkgCisKZGlmZiAtLWdpdCBhL3Rlc3RzL3JfZXh0NF9iaWdfZXhwYW5kL3NjcmlwdCBiL3Rlc3RzL3JfZXh0NF9iaWdfZXhwYW5kL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGE2ZjZlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcl9leHQ0X2JpZ19leHBhbmQvc2NyaXB0CkBAIC0wLDAgKzEsMzEgQEAKK2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEUgLWEgLXggJERFQlVHRlNfRVhFOyB0aGVuCisKK3Rlc3RfZGVzY3JpcHRpb249InZlcnkgbGFyZ2UgZnMgZ3Jvd3RoIHVzaW5nIGV4dDQiCitGRUFUVVJFUz0iLXQgZXh0NCIKK1NJWkVfMT01MTJNCitTSVpFXzI9MlQKK0xPRz0kdGVzdF9uYW1lLmxvZworRTJGU0NLPS4uL2UyZnNjay9lMmZzY2sKKworCisuICRjbWRfZGlyL3NjcmlwdHMvcmVzaXplX3Rlc3QKKworcmVzaXplX3Rlc3QKK1JDPSQ/CitpZiBbICRSQyAtZXEgMCBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2VsaWYgWyAkUkMgLWVxIDExMSBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJbG4gJExPRyAkdGVzdF9uYW1lLmZhaWxlZAorZmkKKwordW5zZXQgRkVBVFVSRVMgU0laRV8xIFNJWkVfMiBMT0cgRTJGU0NLCisKK2Vsc2UgI2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEUgLWEgLXggJERFQlVHRlNfRVhFOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaSAKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvcl9leHQ0X3NtYWxsX2JnL3NjcmlwdCBiL3Rlc3RzL3JfZXh0NF9zbWFsbF9iZy9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RjNmU0YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3JfZXh0NF9zbWFsbF9iZy9zY3JpcHQKQEAgLTAsMCArMSwzMSBAQAoraWYgdGVzdCAteCAkUkVTSVpFMkZTX0VYRSAtYSAteCAkREVCVUdGU19FWEU7IHRoZW4KKwordGVzdF9kZXNjcmlwdGlvbj0iZXh0NCAxMDI0IGJsb2Nrc2l6ZSB3aXRoIHNtYWxsIGJsb2NrIGdyb3VwcyIKK0ZFQVRVUkVTPSItdCBleHQ0IC1PIF5yZXNpemVfaW5vZGUgLWIgMTAyNCAtZyA1MTIiCitTSVpFXzE9NjRNCitTSVpFXzI9MkcKK0xPRz0kdGVzdF9uYW1lLmxvZworRTJGU0NLPS4uL2UyZnNjay9lMmZzY2sKKworCisuICRjbWRfZGlyL3NjcmlwdHMvcmVzaXplX3Rlc3QKKworcmVzaXplX3Rlc3QKK1JDPSQ/CitpZiBbICRSQyAtZXEgMCBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2VsaWYgWyAkUkMgLWVxIDExMSBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJbG4gJExPRyAkdGVzdF9uYW1lLmZhaWxlZAorZmkKKwordW5zZXQgRkVBVFVSRVMgU0laRV8xIFNJWkVfMiBMT0cgRTJGU0NLCisKK2Vsc2UgI2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEUgLWEgLXggJERFQlVHRlNfRVhFOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaSAKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvcl9pbmxpbmVfeGF0dHIvZXhwZWN0IGIvdGVzdHMvcl9pbmxpbmVfeGF0dHIvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZjFjY2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yX2lubGluZV94YXR0ci9leHBlY3QKQEAgLTAsMCArMSwxNiBAQAorcmVzaXplMmZzIHRlc3QKK2RlYnVnZnMgLVIgJydzdGF0IGZpbGUnJyB0ZXN0LmltZyAyPiYxIHwgZ3JlcCAnJ15Jbm9kZVx8aW4gaW5vZGUgYm9keVx8bmFtZSA9ICcnCitJbm9kZTogMTU1MCAgIFR5cGU6IHJlZ3VsYXIgICAgTW9kZTogIDA2NDQgICBGbGFnczogMHgwCitFeHRlbmRlZCBhdHRyaWJ1dGVzIHN0b3JlZCBpbiBpbm9kZSBib2R5OiAKKyAgbmFtZSA9ICJwcm9wZXJ2YWx1ZSIgKDExKQorRXhpdCBzdGF0dXMgaXMgMAorcmVzaXplMmZzIHRlc3QuaW1nIDVNCitSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyB0byA1MTIwICgxaykgYmxvY2tzLgorVGhlIGZpbGVzeXN0ZW0gb24gdGVzdC5pbWcgaXMgbm93IDUxMjAgKDFrKSBibG9ja3MgbG9uZy4KKworRXhpdCBzdGF0dXMgaXMgMAorZGVidWdmcyAtUiAnJ3N0YXQgZmlsZScnIHRlc3QuaW1nIDI+JjEgfCBncmVwICcnXklub2RlXHxpbiBpbm9kZSBib2R5XHxuYW1lID0gJycKK0lub2RlOiAxMiAgIFR5cGU6IHJlZ3VsYXIgICAgTW9kZTogIDA2NDQgICBGbGFnczogMHgwCitFeHRlbmRlZCBhdHRyaWJ1dGVzIHN0b3JlZCBpbiBpbm9kZSBib2R5OiAKKyAgbmFtZSA9ICJwcm9wZXJ2YWx1ZSIgKDExKQorRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvdGVzdHMvcl9pbmxpbmVfeGF0dHIvaW1hZ2UuZ3ogYi90ZXN0cy9yX2lubGluZV94YXR0ci9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWQyODY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcl9pbmxpbmVfeGF0dHIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcl9pbmxpbmVfeGF0dHIvbmFtZSBiL3Rlc3RzL3JfaW5saW5lX3hhdHRyL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2NTRmYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3JfaW5saW5lX3hhdHRyL25hbWUKQEAgLTAsMCArMSBAQAorc2hyaW5raW5nIGZpbGVzeXN0ZW0gd2l0aCBpbi1pbm9kZSBleHRlbmRlZCBhdHRyaWJ1dGVzCmRpZmYgLS1naXQgYS90ZXN0cy9yX2lubGluZV94YXR0ci9zY3JpcHQgYi90ZXN0cy9yX2lubGluZV94YXR0ci9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4MjU4NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3JfaW5saW5lX3hhdHRyL3NjcmlwdApAQCAtMCwwICsxLDUzIEBACitpZiB0ZXN0IC14ICRSRVNJWkUyRlNfRVhFIC1hIC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCitJTUFHRT0kdGVzdF9kaXIvaW1hZ2UuZ3oKK0ZTQ0tfT1BUPS15ZgorT1VUPSR0ZXN0X25hbWUubG9nCitFWFA9JHRlc3RfZGlyL2V4cGVjdAorCitndW56aXAgPCAkSU1BR0UgPiAkVE1QRklMRQorCitlY2hvICJyZXNpemUyZnMgdGVzdCIgPiAkT1VUCisKKyMgTG9vayBhdCBleGlzdGluZyBpbmxpbmUgZXh0ZW5kZWQgYXR0cmlidXRlCitlY2hvICJkZWJ1Z2ZzIC1SICcnc3RhdCBmaWxlJycgdGVzdC5pbWcgMj4mMSB8IGdyZXAgJydeSW5vZGVcfGluIGlub2RlIGJvZHlcfG5hbWUgPSAnJyIgPj4gJE9VVAorJERFQlVHRlMgLVIgInN0YXQgZmlsZSIgJFRNUEZJTEUgMj4mMSB8IGdyZXAgIl5Jbm9kZVx8aW4gaW5vZGUgYm9keVx8bmFtZSA9ICIgPj4gJE9VVAorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVAorCisjIHJlc2l6ZSBpdAorZWNobyAicmVzaXplMmZzIHRlc3QuaW1nIDVNIiA+PiAkT1VUCiskUkVTSVpFMkZTICRUTVBGSUxFIDVNIDI+JjEgPj4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgJE9VVC5uZXcgPj4gJE9VVAorCisjIExvb2sgYXQgaW5saW5lIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiByZXNpemVkIGZzCitlY2hvICJkZWJ1Z2ZzIC1SICcnc3RhdCBmaWxlJycgdGVzdC5pbWcgMj4mMSB8IGdyZXAgJydeSW5vZGVcfGluIGlub2RlIGJvZHlcfG5hbWUgPSAnJyIgPj4gJE9VVAorJERFQlVHRlMgLVIgInN0YXQgZmlsZSIgJFRNUEZJTEUgMj4mMSB8IGdyZXAgIl5Jbm9kZVx8aW4gaW5vZGUgYm9keVx8bmFtZSA9ICIgPj4gJE9VVAorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVAorCitybSAkVE1QRklMRSAkT1VULm5ldworCisjCisjIERvIHRoZSB2ZXJpZmljYXRpb24KKyMKKworY21wIC1zICRPVVQgJEVYUAorc3RhdHVzPSQ/CisKK2lmIFsgIiRzdGF0dXMiID0gMCBdIDsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBvayIKKwl0b3VjaCAkdGVzdF9uYW1lLm9rCitlbHNlCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IGZhaWxlZCIKKwlkaWZmICRESUZGX09QVFMgJEVYUCAkT1VUID4gJHRlc3RfbmFtZS5mYWlsZWQKK2ZpCisKK3Vuc2V0IElNQUdFIEZTQ0tfT1BUIE9VVCBFWFAKKworZWxzZSAjaWYgdGVzdCAteCAkUkVTSVpFMkZTX0VYRSAtYSAteCAkREVCVUdGU19FWEU7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpCisKZGlmZiAtLWdpdCBhL3Rlc3RzL3JfbWV0YV9iZ19zaHJpbmsvc2NyaXB0IGIvdGVzdHMvcl9tZXRhX2JnX3Nocmluay9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU3Nzc3NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3JfbWV0YV9iZ19zaHJpbmsvc2NyaXB0CkBAIC0wLDAgKzEsMzQgQEAKK2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEUgLWEgLXggJERFQlVHRlNfRVhFOyB0aGVuCisKK3Rlc3RfZGVzY3JpcHRpb249Im1ldGFfYmcgc2hyaW5rIgorRkVBVFVSRVM9Ii10IGV4dDQgLU8gNjRiaXQsbWV0YV9iZyxecmVzaXplX2lub2RlIC1iIDEwMjQiCitTSVpFXzE9MUcKK1NJWkVfMj00OE0KK0xPRz0kdGVzdF9uYW1lLmxvZworRTJGU0NLPS4uL2UyZnNjay9lMmZzY2sKK1JFU0laRTJGU19PUFRTPS1mCisKKy4gJGNtZF9kaXIvc2NyaXB0cy9yZXNpemVfdGVzdAorCitleHBvcnQgTUtFMkZTX0ZJUlNUX01FVEFfQkc9MgorcmVzaXplX3Rlc3QKK3Vuc2V0IE1LRTJGU19GSVJTVF9NRVRBX0JHCisKK1JDPSQ/CitpZiBbICRSQyAtZXEgMCBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2VsaWYgWyAkUkMgLWVxIDExMSBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJbG4gJExPRyAkdGVzdF9uYW1lLmZhaWxlZAorZmkKKwordW5zZXQgRkVBVFVSRVMgU0laRV8xIFNJWkVfMiBMT0cgRTJGU0NLCisKK2Vsc2UgI2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEUgLWEgLXggJERFQlVHRlNfRVhFOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaQorCmRpZmYgLS1naXQgYS90ZXN0cy9yX21pbl9pdGFibGUvZXhwZWN0IGIvdGVzdHMvcl9taW5faXRhYmxlL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDEwNDFjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcl9taW5faXRhYmxlL2V4cGVjdApAQCAtMCwwICsxLDE1IEBACityZXNpemUyZnMgdGVzdAorcmVzaXplMmZzIC1NIHRlc3QuaW1nCitSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyB0byAxMTI0ICgxaykgYmxvY2tzLgorVGhlIGZpbGVzeXN0ZW0gb24gdGVzdC5pbWcgaXMgbm93IDExMjQgKDFrKSBibG9ja3MgbG9uZy4KKworRXhpdCBzdGF0dXMgaXMgMAorIAorZnNjayAteWYgLU4gdGVzdF9maWxlc3lzIHRlc3QuaW1nCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMy81MTIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMTIwLzExMjQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS90ZXN0cy9yX21pbl9pdGFibGUvaW1hZ2UuZ3ogYi90ZXN0cy9yX21pbl9pdGFibGUvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0MGM1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3JfbWluX2l0YWJsZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yX21pbl9pdGFibGUvbmFtZSBiL3Rlc3RzL3JfbWluX2l0YWJsZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MWIwNDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yX21pbl9pdGFibGUvbmFtZQpAQCAtMCwwICsxIEBACityZXNpemUyZnMgLU0gd2l0aCBpbm9kZSB0YWJsZSBpbiBtaWRkbGUgb2YgbGFzdCBibG9jayBncm91cApkaWZmIC0tZ2l0IGEvdGVzdHMvcl9taW5faXRhYmxlL3NjcmlwdCBiL3Rlc3RzL3JfbWluX2l0YWJsZS9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmViNmNmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3JfbWluX2l0YWJsZS9zY3JpcHQKQEAgLTAsMCArMSw0NSBAQAoraWYgdGVzdCAteCAkUkVTSVpFMkZTX0VYRSAtYSAteCAkREVCVUdGU19FWEU7IHRoZW4KKworSU1BR0U9JHRlc3RfZGlyL2ltYWdlLmd6CitGU0NLX09QVD0teWYKK09VVD0kdGVzdF9uYW1lLmxvZworRVhQPSR0ZXN0X2Rpci9leHBlY3QKKworZ3VuemlwIDwgJElNQUdFID4gJFRNUEZJTEUKKworZWNobyAicmVzaXplMmZzIHRlc3QiID4gJE9VVAorCitlY2hvICJyZXNpemUyZnMgLU0gdGVzdC5pbWciID4+ICRPVVQKKyRSRVNJWkUyRlMgLU0gJFRNUEZJTEUgMj4mMSA+PiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworCitlY2hvICIgIiA+PiAkT1VULm5ldworZWNobyBmc2NrICRGU0NLX09QVCAtTiB0ZXN0X2ZpbGVzeXMgdGVzdC5pbWcgPj4gJE9VVC5uZXcKKyRGU0NLICRGU0NLX09QVCAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQorZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CisKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgJE9VVC5uZXcgPj4gJE9VVAorcm0gJFRNUEZJTEUgJE9VVC5uZXcKKworIworIyBEbyB0aGUgdmVyaWZpY2F0aW9uCisjCisKK2NtcCAtcyAkT1VUICRFWFAKK3N0YXR1cz0kPworCitpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJZGlmZiAkRElGRl9PUFRTICRFWFAgJE9VVCA+ICR0ZXN0X25hbWUuZmFpbGVkCitmaQorCit1bnNldCBJTUFHRSBGU0NLX09QVCBPVVQgRVhQCisKK2Vsc2UgI2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEUgLWEgLXggJERFQlVHRlNfRVhFOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaQorCmRpZmYgLS1naXQgYS90ZXN0cy9yX21vdmVfaXRhYmxlL2V4cGVjdCBiL3Rlc3RzL3JfbW92ZV9pdGFibGUvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYzAwMzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yX21vdmVfaXRhYmxlL2V4cGVjdApAQCAtMCwwICsxLDI2MTIgQEAKK21rZTJmcyAtcSAtRiAtbyBMaW51eCAtYiAxMDI0IC1nIDI1NiB0ZXN0LmltZyAxMDI0CityZXNpemUyZnMgLXAgdGVzdC5pbWcgMTAwMDAKK1Jlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uIHRlc3QuaW1nIHRvIDEwMDAwICgxaykgYmxvY2tzLgorQmVnaW4gcGFzcyAxIChtYXggPSAzNSkKK0V4dGVuZGluZyB0aGUgaW5vZGUgdGFibGUgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorVGhlIGZpbGVzeXN0ZW0gb24gdGVzdC5pbWcgaXMgbm93IDk5ODUgKDFrKSBibG9ja3MgbG9uZy4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMTI0OCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEyODEvOTk4NSBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKK2R1bXBlMmZzIHRlc3QuaW1nCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyCitEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIChub25lKQorRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICBjbGVhbgorRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICBDb250aW51ZQorRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICBMaW51eAorSW5vZGUgY291bnQ6ICAgICAgICAgICAgICAxMjQ4CitCbG9jayBjb3VudDogICAgICAgICAgICAgIDk5ODUKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgNDk3CitGcmVlIGJsb2NrczogICAgICAgICAgICAgIDg3MDQKK0ZyZWUgaW5vZGVzOiAgICAgICAgICAgICAgMTIzNworRmlyc3QgYmxvY2s6ICAgICAgICAgICAgICAxCitCbG9jayBzaXplOiAgICAgICAgICAgICAgIDEwMjQKK0ZyYWdtZW50IHNpemU6ICAgICAgICAgICAgMTAyNAorUmVzZXJ2ZWQgR0RUIGJsb2NrczogICAgICAxMjYKK0Jsb2NrcyBwZXIgZ3JvdXA6ICAgICAgICAgMjU2CitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDI1NgorSW5vZGVzIHBlciBncm91cDogICAgICAgICAzMgorSW5vZGUgYmxvY2tzIHBlciBncm91cDogICA0CitNb3VudCBjb3VudDogICAgICAgICAgICAgIDAKK0NoZWNrIGludGVydmFsOiAgICAgICAgICAgMTU1NTIwMDAgKDYgbW9udGhzKQorUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAwCitSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgIDAKK0ZpcnN0IGlub2RlOiAgICAgICAgICAgICAgMTEKK0lub2RlIHNpemU6CSAgICAgICAgICAxMjgKK0RlZmF1bHQgZGlyZWN0b3J5IGhhc2g6ICAgaGFsZl9tZDQKKworCitHcm91cCAwOiAoQmxvY2tzIDEtMjU2KQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMi0zCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNC0xMjkKKyAgQmxvY2sgYml0bWFwIGF0IDEzMCAoKzEyOSksIElub2RlIGJpdG1hcCBhdCAxMzEgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDEzMi0xMzUgKCsxMzEpCisgIDEwNyBmcmVlIGJsb2NrcywgMjEgZnJlZSBpbm9kZXMsIDIgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1MC0yNTYKKyAgRnJlZSBpbm9kZXM6IDEyLTMyCitHcm91cCAxOiAoQmxvY2tzIDI1Ny01MTIpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDI1NywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjU4LTI1OQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDI2MC0zODUKKyAgQmxvY2sgYml0bWFwIGF0IDM4NiAoKzEyOSksIElub2RlIGJpdG1hcCBhdCAzODcgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDM4OC0zOTEgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM5Mi01MTIKKyAgRnJlZSBpbm9kZXM6IDMzLTY0CitHcm91cCAyOiAoQmxvY2tzIDUxMy03NjgpCisgIEJsb2NrIGJpdG1hcCBhdCA1MTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDUxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDUxNS01MTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MTktNzY4CisgIEZyZWUgaW5vZGVzOiA2NS05NgorR3JvdXAgMzogKEJsb2NrcyA3NjktMTAyNCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNzY5LCBHcm91cCBkZXNjcmlwdG9ycyBhdCA3NzAtNzcxCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNzcyLTg5NworICBCbG9jayBiaXRtYXAgYXQgODk4ICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDg5OSAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgOTAwLTkwMyAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTA0LTEwMjQKKyAgRnJlZSBpbm9kZXM6IDk3LTEyOAorR3JvdXAgNDogKEJsb2NrcyAxMDI1LTEyODApCisgIEJsb2NrIGJpdG1hcCBhdCAxMDI1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAyNy0xMDMwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAzMS0xMjgwCisgIEZyZWUgaW5vZGVzOiAxMjktMTYwCitHcm91cCA1OiAoQmxvY2tzIDEyODEtMTUzNikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTI4MSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTI4Mi0xMjgzCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTI4NC0xNDA5CisgIEJsb2NrIGJpdG1hcCBhdCAxNDEwICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDE0MTEgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDE0MTItMTQxNSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQxNi0xNTM2CisgIEZyZWUgaW5vZGVzOiAxNjEtMTkyCitHcm91cCA2OiAoQmxvY2tzIDE1MzctMTc5MikKKyAgQmxvY2sgYml0bWFwIGF0IDE1MzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1MzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTM5LTE1NDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTQzLTE3OTIKKyAgRnJlZSBpbm9kZXM6IDE5My0yMjQKK0dyb3VwIDc6IChCbG9ja3MgMTc5My0yMDQ4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxNzkzLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAxNzk0LTE3OTUKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAxNzk2LTE5MjEKKyAgQmxvY2sgYml0bWFwIGF0IDE5MjIgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMTkyMyAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMTkyNC0xOTI3ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxOTI4LTIwNDgKKyAgRnJlZSBpbm9kZXM6IDIyNS0yNTYKK0dyb3VwIDg6IChCbG9ja3MgMjA0OS0yMzA0KQorICBCbG9jayBiaXRtYXAgYXQgMjA0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjA1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIwNTEtMjA1NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIwNTUtMjMwNAorICBGcmVlIGlub2RlczogMjU3LTI4OAorR3JvdXAgOTogKEJsb2NrcyAyMzA1LTI1NjApCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDIzMDUsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDIzMDYtMjMwNworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDIzMDgtMjQzMworICBCbG9jayBiaXRtYXAgYXQgMjQzNCAoKzEyOSksIElub2RlIGJpdG1hcCBhdCAyNDM1ICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAyNDM2LTI0MzkgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI0NDAtMjU2MAorICBGcmVlIGlub2RlczogMjg5LTMyMAorR3JvdXAgMTA6IChCbG9ja3MgMjU2MS0yODE2KQorICBCbG9jayBiaXRtYXAgYXQgMjU2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjU2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI1NjMtMjU2NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1NjctMjgxNgorICBGcmVlIGlub2RlczogMzIxLTM1MgorR3JvdXAgMTE6IChCbG9ja3MgMjgxNy0zMDcyKQorICBCbG9jayBiaXRtYXAgYXQgMjgxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjgxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI4MTktMjgyMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI4MjMtMzA3MgorICBGcmVlIGlub2RlczogMzUzLTM4NAorR3JvdXAgMTI6IChCbG9ja3MgMzA3My0zMzI4KQorICBCbG9jayBiaXRtYXAgYXQgMzA3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzA3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMwNzUtMzA3OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMwNzktMzMyOAorICBGcmVlIGlub2RlczogMzg1LTQxNgorR3JvdXAgMTM6IChCbG9ja3MgMzMyOS0zNTg0KQorICBCbG9jayBiaXRtYXAgYXQgMzMyOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzMzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMzMzEtMzMzNCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMzMzUtMzU4NAorICBGcmVlIGlub2RlczogNDE3LTQ0OAorR3JvdXAgMTQ6IChCbG9ja3MgMzU4NS0zODQwKQorICBCbG9jayBiaXRtYXAgYXQgMzU4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzU4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM1ODctMzU5MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM1OTEtMzg0MAorICBGcmVlIGlub2RlczogNDQ5LTQ4MAorR3JvdXAgMTU6IChCbG9ja3MgMzg0MS00MDk2KQorICBCbG9jayBiaXRtYXAgYXQgMzg0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzg0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM4NDMtMzg0NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM4NDctNDA5NgorICBGcmVlIGlub2RlczogNDgxLTUxMgorR3JvdXAgMTY6IChCbG9ja3MgNDA5Ny00MzUyKQorICBCbG9jayBiaXRtYXAgYXQgNDA5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDA5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQwOTktNDEwMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQxMDMtNDM1MgorICBGcmVlIGlub2RlczogNTEzLTU0NAorR3JvdXAgMTc6IChCbG9ja3MgNDM1My00NjA4KQorICBCbG9jayBiaXRtYXAgYXQgNDM1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDM1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQzNTUtNDM1OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQzNTktNDYwOAorICBGcmVlIGlub2RlczogNTQ1LTU3NgorR3JvdXAgMTg6IChCbG9ja3MgNDYwOS00ODY0KQorICBCbG9jayBiaXRtYXAgYXQgNDYwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDYxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ2MTEtNDYxNCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ2MTUtNDg2NAorICBGcmVlIGlub2RlczogNTc3LTYwOAorR3JvdXAgMTk6IChCbG9ja3MgNDg2NS01MTIwKQorICBCbG9jayBiaXRtYXAgYXQgNDg2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDg2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ4NjctNDg3MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ4NzEtNTEyMAorICBGcmVlIGlub2RlczogNjA5LTY0MAorR3JvdXAgMjA6IChCbG9ja3MgNTEyMS01Mzc2KQorICBCbG9jayBiaXRtYXAgYXQgNTEyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTEyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDUxMjMtNTEyNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUxMjctNTM3NgorICBGcmVlIGlub2RlczogNjQxLTY3MgorR3JvdXAgMjE6IChCbG9ja3MgNTM3Ny01NjMyKQorICBCbG9jayBiaXRtYXAgYXQgNTM3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTM3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDUzNzktNTM4MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUzODMtNTYzMgorICBGcmVlIGlub2RlczogNjczLTcwNAorR3JvdXAgMjI6IChCbG9ja3MgNTYzMy01ODg4KQorICBCbG9jayBiaXRtYXAgYXQgNTYzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTYzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU2MzUtNTYzOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU2MzktNTg4OAorICBGcmVlIGlub2RlczogNzA1LTczNgorR3JvdXAgMjM6IChCbG9ja3MgNTg4OS02MTQ0KQorICBCbG9jayBiaXRtYXAgYXQgNTg4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTg5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU4OTEtNTg5NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU4OTUtNjE0NAorICBGcmVlIGlub2RlczogNzM3LTc2OAorR3JvdXAgMjQ6IChCbG9ja3MgNjE0NS02NDAwKQorICBCbG9jayBiaXRtYXAgYXQgNjE0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjE0NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDYxNDctNjE1MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDYxNTEtNjQwMAorICBGcmVlIGlub2RlczogNzY5LTgwMAorR3JvdXAgMjU6IChCbG9ja3MgNjQwMS02NjU2KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA2NDAxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA2NDAyLTY0MDMKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA2NDA0LTY1MjkKKyAgQmxvY2sgYml0bWFwIGF0IDY1MzAgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgNjUzMSAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgNjUzMi02NTM1ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NTM2LTY2NTYKKyAgRnJlZSBpbm9kZXM6IDgwMS04MzIKK0dyb3VwIDI2OiAoQmxvY2tzIDY2NTctNjkxMikKKyAgQmxvY2sgYml0bWFwIGF0IDY2NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDY2NTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2NjU5LTY2NjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NjYzLTY5MTIKKyAgRnJlZSBpbm9kZXM6IDgzMy04NjQKK0dyb3VwIDI3OiAoQmxvY2tzIDY5MTMtNzE2OCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNjkxMywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNjkxNC02OTE1CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNjkxNi03MDQxCisgIEJsb2NrIGJpdG1hcCBhdCA3MDQyICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDcwNDMgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDcwNDQtNzA0NyAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzA0OC03MTY4CisgIEZyZWUgaW5vZGVzOiA4NjUtODk2CitHcm91cCAyODogKEJsb2NrcyA3MTY5LTc0MjQpCisgIEJsb2NrIGJpdG1hcCBhdCA3MTY5ICgrMCksIElub2RlIGJpdG1hcCBhdCA3MTcwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzE3MS03MTc0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzE3NS03NDI0CisgIEZyZWUgaW5vZGVzOiA4OTctOTI4CitHcm91cCAyOTogKEJsb2NrcyA3NDI1LTc2ODApCisgIEJsb2NrIGJpdG1hcCBhdCA3NDI1ICgrMCksIElub2RlIGJpdG1hcCBhdCA3NDI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzQyNy03NDMwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzQzMS03NjgwCisgIEZyZWUgaW5vZGVzOiA5MjktOTYwCitHcm91cCAzMDogKEJsb2NrcyA3NjgxLTc5MzYpCisgIEJsb2NrIGJpdG1hcCBhdCA3NjgxICgrMCksIElub2RlIGJpdG1hcCBhdCA3NjgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzY4My03Njg2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzY4Ny03OTM2CisgIEZyZWUgaW5vZGVzOiA5NjEtOTkyCitHcm91cCAzMTogKEJsb2NrcyA3OTM3LTgxOTIpCisgIEJsb2NrIGJpdG1hcCBhdCA3OTM3ICgrMCksIElub2RlIGJpdG1hcCBhdCA3OTM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzkzOS03OTQyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzk0My04MTkyCisgIEZyZWUgaW5vZGVzOiA5OTMtMTAyNAorR3JvdXAgMzI6IChCbG9ja3MgODE5My04NDQ4KQorICBCbG9jayBiaXRtYXAgYXQgODE5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODE5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDgxOTUtODE5OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgxOTktODQ0OAorICBGcmVlIGlub2RlczogMTAyNS0xMDU2CitHcm91cCAzMzogKEJsb2NrcyA4NDQ5LTg3MDQpCisgIEJsb2NrIGJpdG1hcCBhdCA4NDQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCA4NDUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODQ1MS04NDU0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODQ1NS04NzA0CisgIEZyZWUgaW5vZGVzOiAxMDU3LTEwODgKK0dyb3VwIDM0OiAoQmxvY2tzIDg3MDUtODk2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDg3MDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg3MDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4NzA3LTg3MTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NzExLTg5NjAKKyAgRnJlZSBpbm9kZXM6IDEwODktMTEyMAorR3JvdXAgMzU6IChCbG9ja3MgODk2MS05MjE2KQorICBCbG9jayBiaXRtYXAgYXQgODk2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODk2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg5NjMtODk2NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg5NjctOTIxNgorICBGcmVlIGlub2RlczogMTEyMS0xMTUyCitHcm91cCAzNjogKEJsb2NrcyA5MjE3LTk0NzIpCisgIEJsb2NrIGJpdG1hcCBhdCA5MjE3ICgrMCksIElub2RlIGJpdG1hcCBhdCA5MjE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTIxOS05MjIyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTIyMy05NDcyCisgIEZyZWUgaW5vZGVzOiAxMTUzLTExODQKK0dyb3VwIDM3OiAoQmxvY2tzIDk0NzMtOTcyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDk0NzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk0NzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5NDc1LTk0NzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NDc5LTk3MjgKKyAgRnJlZSBpbm9kZXM6IDExODUtMTIxNgorR3JvdXAgMzg6IChCbG9ja3MgOTcyOS05OTg0KQorICBCbG9jayBiaXRtYXAgYXQgOTcyOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTczMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDk3MzEtOTczNCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk3MzUtOTk4NAorICBGcmVlIGlub2RlczogMTIxNy0xMjQ4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVzaXplMmZzIC1wIHRlc3QuaW1nIDIwMDAwCitSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyB0byAyMDAwMCAoMWspIGJsb2Nrcy4KK0JlZ2luIHBhc3MgMSAobWF4ID0gMzkpCitFeHRlbmRpbmcgdGhlIGlub2RlIHRhYmxlICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKK1RoZSBmaWxlc3lzdGVtIG9uIHRlc3QuaW1nIGlzIG5vdyAxOTk2OSAoMWspIGJsb2NrcyBsb25nLgorCitGaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8yNDk2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTY0NC8xOTk2OSBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKK2R1bXBlMmZzIHRlc3QuaW1nCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyCitEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIChub25lKQorRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICBjbGVhbgorRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICBDb250aW51ZQorRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICBMaW51eAorSW5vZGUgY291bnQ6ICAgICAgICAgICAgICAyNDk2CitCbG9jayBjb3VudDogICAgICAgICAgICAgIDE5OTY5CitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDk5MworRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAxODMyNQorRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICAyNDg1CitGaXJzdCBibG9jazogICAgICAgICAgICAgIDEKK0Jsb2NrIHNpemU6ICAgICAgICAgICAgICAgMTAyNAorRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICAxMDI0CitSZXNlcnZlZCBHRFQgYmxvY2tzOiAgICAgIDEyNQorQmxvY2tzIHBlciBncm91cDogICAgICAgICAyNTYKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgMjU2CitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDMyCitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDQKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMS0yNTYpCisgIFByaW1hcnkgc3VwZXJibG9jayBhdCAxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyLTQKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA1LTEyOQorICBCbG9jayBiaXRtYXAgYXQgMTMwICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDEzMSAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMTMyLTEzNSAoKzEzMSkKKyAgMTA3IGZyZWUgYmxvY2tzLCAyMSBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTUwLTI1NgorICBGcmVlIGlub2RlczogMTItMzIKK0dyb3VwIDE6IChCbG9ja3MgMjU3LTUxMikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjU3LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyNTgtMjYwCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjYxLTM4NQorICBCbG9jayBiaXRtYXAgYXQgMzg2ICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDM4NyAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMzg4LTM5MSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzkyLTUxMgorICBGcmVlIGlub2RlczogMzMtNjQKK0dyb3VwIDI6IChCbG9ja3MgNTEzLTc2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDUxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTE1LTUxOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUxOS03NjgKKyAgRnJlZSBpbm9kZXM6IDY1LTk2CitHcm91cCAzOiAoQmxvY2tzIDc2OS0xMDI0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA3NjksIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDc3MC03NzIKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA3NzMtODk3CisgIEJsb2NrIGJpdG1hcCBhdCA4OTggKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgODk5ICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCA5MDAtOTAzICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MDQtMTAyNAorICBGcmVlIGlub2RlczogOTctMTI4CitHcm91cCA0OiAoQmxvY2tzIDEwMjUtMTI4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDI3LTEwMzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDMxLTEyODAKKyAgRnJlZSBpbm9kZXM6IDEyOS0xNjAKK0dyb3VwIDU6IChCbG9ja3MgMTI4MS0xNTM2KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxMjgxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAxMjgyLTEyODQKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAxMjg1LTE0MDkKKyAgQmxvY2sgYml0bWFwIGF0IDE0MTAgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMTQxMSAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMTQxMi0xNDE1ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDE2LTE1MzYKKyAgRnJlZSBpbm9kZXM6IDE2MS0xOTIKK0dyb3VwIDY6IChCbG9ja3MgMTUzNy0xNzkyKQorICBCbG9jayBiaXRtYXAgYXQgMTUzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTUzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1MzktMTU0MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1NDMtMTc5MgorICBGcmVlIGlub2RlczogMTkzLTIyNAorR3JvdXAgNzogKEJsb2NrcyAxNzkzLTIwNDgpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDE3OTMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDE3OTQtMTc5NgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDE3OTctMTkyMQorICBCbG9jayBiaXRtYXAgYXQgMTkyMiAoKzEyOSksIElub2RlIGJpdG1hcCBhdCAxOTIzICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAxOTI0LTE5MjcgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE5MjgtMjA0OAorICBGcmVlIGlub2RlczogMjI1LTI1NgorR3JvdXAgODogKEJsb2NrcyAyMDQ5LTIzMDQpCisgIEJsb2NrIGJpdG1hcCBhdCAyMDQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjA1MS0yMDU0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA1NS0yMzA0CisgIEZyZWUgaW5vZGVzOiAyNTctMjg4CitHcm91cCA5OiAoQmxvY2tzIDIzMDUtMjU2MCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjMwNSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjMwNi0yMzA4CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjMwOS0yNDMzCisgIEJsb2NrIGJpdG1hcCBhdCAyNDM0ICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDI0MzUgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDI0MzYtMjQzOSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjQ0MC0yNTYwCisgIEZyZWUgaW5vZGVzOiAyODktMzIwCitHcm91cCAxMDogKEJsb2NrcyAyNTYxLTI4MTYpCisgIEJsb2NrIGJpdG1hcCBhdCAyNTYxICgrMCksIElub2RlIGJpdG1hcCBhdCAyNTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjU2My0yNTY2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjU2Ny0yODE2CisgIEZyZWUgaW5vZGVzOiAzMjEtMzUyCitHcm91cCAxMTogKEJsb2NrcyAyODE3LTMwNzIpCisgIEJsb2NrIGJpdG1hcCBhdCAyODE3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyODE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjgxOS0yODIyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjgyMy0zMDcyCisgIEZyZWUgaW5vZGVzOiAzNTMtMzg0CitHcm91cCAxMjogKEJsb2NrcyAzMDczLTMzMjgpCisgIEJsb2NrIGJpdG1hcCBhdCAzMDczICgrMCksIElub2RlIGJpdG1hcCBhdCAzMDc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzA3NS0zMDc4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzA3OS0zMzI4CisgIEZyZWUgaW5vZGVzOiAzODUtNDE2CitHcm91cCAxMzogKEJsb2NrcyAzMzI5LTM1ODQpCisgIEJsb2NrIGJpdG1hcCBhdCAzMzI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMzMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzMzMS0zMzM0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzMzNS0zNTg0CisgIEZyZWUgaW5vZGVzOiA0MTctNDQ4CitHcm91cCAxNDogKEJsb2NrcyAzNTg1LTM4NDApCisgIEJsb2NrIGJpdG1hcCBhdCAzNTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzU4Ny0zNTkwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzU5MS0zODQwCisgIEZyZWUgaW5vZGVzOiA0NDktNDgwCitHcm91cCAxNTogKEJsb2NrcyAzODQxLTQwOTYpCisgIEJsb2NrIGJpdG1hcCBhdCAzODQxICgrMCksIElub2RlIGJpdG1hcCBhdCAzODQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzg0My0zODQ2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzg0Ny00MDk2CisgIEZyZWUgaW5vZGVzOiA0ODEtNTEyCitHcm91cCAxNjogKEJsb2NrcyA0MDk3LTQzNTIpCisgIEJsb2NrIGJpdG1hcCBhdCA0MDk3ICgrMCksIElub2RlIGJpdG1hcCBhdCA0MDk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDA5OS00MTAyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDEwMy00MzUyCisgIEZyZWUgaW5vZGVzOiA1MTMtNTQ0CitHcm91cCAxNzogKEJsb2NrcyA0MzUzLTQ2MDgpCisgIEJsb2NrIGJpdG1hcCBhdCA0MzUzICgrMCksIElub2RlIGJpdG1hcCBhdCA0MzU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDM1NS00MzU4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDM1OS00NjA4CisgIEZyZWUgaW5vZGVzOiA1NDUtNTc2CitHcm91cCAxODogKEJsb2NrcyA0NjA5LTQ4NjQpCisgIEJsb2NrIGJpdG1hcCBhdCA0NjA5ICgrMCksIElub2RlIGJpdG1hcCBhdCA0NjEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDYxMS00NjE0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDYxNS00ODY0CisgIEZyZWUgaW5vZGVzOiA1NzctNjA4CitHcm91cCAxOTogKEJsb2NrcyA0ODY1LTUxMjApCisgIEJsb2NrIGJpdG1hcCBhdCA0ODY1ICgrMCksIElub2RlIGJpdG1hcCBhdCA0ODY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDg2Ny00ODcwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDg3MS01MTIwCisgIEZyZWUgaW5vZGVzOiA2MDktNjQwCitHcm91cCAyMDogKEJsb2NrcyA1MTIxLTUzNzYpCisgIEJsb2NrIGJpdG1hcCBhdCA1MTIxICgrMCksIElub2RlIGJpdG1hcCBhdCA1MTIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTEyMy01MTI2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTEyNy01Mzc2CisgIEZyZWUgaW5vZGVzOiA2NDEtNjcyCitHcm91cCAyMTogKEJsb2NrcyA1Mzc3LTU2MzIpCisgIEJsb2NrIGJpdG1hcCBhdCA1Mzc3ICgrMCksIElub2RlIGJpdG1hcCBhdCA1Mzc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTM3OS01MzgyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTM4My01NjMyCisgIEZyZWUgaW5vZGVzOiA2NzMtNzA0CitHcm91cCAyMjogKEJsb2NrcyA1NjMzLTU4ODgpCisgIEJsb2NrIGJpdG1hcCBhdCA1NjMzICgrMCksIElub2RlIGJpdG1hcCBhdCA1NjM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTYzNS01NjM4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTYzOS01ODg4CisgIEZyZWUgaW5vZGVzOiA3MDUtNzM2CitHcm91cCAyMzogKEJsb2NrcyA1ODg5LTYxNDQpCisgIEJsb2NrIGJpdG1hcCBhdCA1ODg5ICgrMCksIElub2RlIGJpdG1hcCBhdCA1ODkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTg5MS01ODk0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTg5NS02MTQ0CisgIEZyZWUgaW5vZGVzOiA3MzctNzY4CitHcm91cCAyNDogKEJsb2NrcyA2MTQ1LTY0MDApCisgIEJsb2NrIGJpdG1hcCBhdCA2MTQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCA2MTQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjE0Ny02MTUwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjE1MS02NDAwCisgIEZyZWUgaW5vZGVzOiA3NjktODAwCitHcm91cCAyNTogKEJsb2NrcyA2NDAxLTY2NTYpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDY0MDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDY0MDItNjQwNAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDY0MDUtNjUyOQorICBCbG9jayBiaXRtYXAgYXQgNjUzMCAoKzEyOSksIElub2RlIGJpdG1hcCBhdCA2NTMxICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCA2NTMyLTY1MzUgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY1MzYtNjY1NgorICBGcmVlIGlub2RlczogODAxLTgzMgorR3JvdXAgMjY6IChCbG9ja3MgNjY1Ny02OTEyKQorICBCbG9jayBiaXRtYXAgYXQgNjY1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjY1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY2NTktNjY2MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY2NjMtNjkxMgorICBGcmVlIGlub2RlczogODMzLTg2NAorR3JvdXAgMjc6IChCbG9ja3MgNjkxMy03MTY4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA2OTEzLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA2OTE0LTY5MTYKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA2OTE3LTcwNDEKKyAgQmxvY2sgYml0bWFwIGF0IDcwNDIgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgNzA0MyAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgNzA0NC03MDQ3ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MDQ4LTcxNjgKKyAgRnJlZSBpbm9kZXM6IDg2NS04OTYKK0dyb3VwIDI4OiAoQmxvY2tzIDcxNjktNzQyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDcxNjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDcxNzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3MTcxLTcxNzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MTc1LTc0MjQKKyAgRnJlZSBpbm9kZXM6IDg5Ny05MjgKK0dyb3VwIDI5OiAoQmxvY2tzIDc0MjUtNzY4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDc0MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc0MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NDI3LTc0MzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NDMxLTc2ODAKKyAgRnJlZSBpbm9kZXM6IDkyOS05NjAKK0dyb3VwIDMwOiAoQmxvY2tzIDc2ODEtNzkzNikKKyAgQmxvY2sgYml0bWFwIGF0IDc2ODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc2ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NjgzLTc2ODYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3Njg3LTc5MzYKKyAgRnJlZSBpbm9kZXM6IDk2MS05OTIKK0dyb3VwIDMxOiAoQmxvY2tzIDc5MzctODE5MikKKyAgQmxvY2sgYml0bWFwIGF0IDc5MzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc5MzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3OTM5LTc5NDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3OTQzLTgxOTIKKyAgRnJlZSBpbm9kZXM6IDk5My0xMDI0CitHcm91cCAzMjogKEJsb2NrcyA4MTkzLTg0NDgpCisgIEJsb2NrIGJpdG1hcCBhdCA4MTkzICgrMCksIElub2RlIGJpdG1hcCBhdCA4MTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODE5NS04MTk4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODE5OS04NDQ4CisgIEZyZWUgaW5vZGVzOiAxMDI1LTEwNTYKK0dyb3VwIDMzOiAoQmxvY2tzIDg0NDktODcwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDg0NDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg0NTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4NDUxLTg0NTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NDU1LTg3MDQKKyAgRnJlZSBpbm9kZXM6IDEwNTctMTA4OAorR3JvdXAgMzQ6IChCbG9ja3MgODcwNS04OTYwKQorICBCbG9jayBiaXRtYXAgYXQgODcwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODcwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg3MDctODcxMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg3MTEtODk2MAorICBGcmVlIGlub2RlczogMTA4OS0xMTIwCitHcm91cCAzNTogKEJsb2NrcyA4OTYxLTkyMTYpCisgIEJsb2NrIGJpdG1hcCBhdCA4OTYxICgrMCksIElub2RlIGJpdG1hcCBhdCA4OTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODk2My04OTY2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODk2Ny05MjE2CisgIEZyZWUgaW5vZGVzOiAxMTIxLTExNTIKK0dyb3VwIDM2OiAoQmxvY2tzIDkyMTctOTQ3MikKKyAgQmxvY2sgYml0bWFwIGF0IDkyMTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDkyMTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5MjE5LTkyMjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MjIzLTk0NzIKKyAgRnJlZSBpbm9kZXM6IDExNTMtMTE4NAorR3JvdXAgMzc6IChCbG9ja3MgOTQ3My05NzI4KQorICBCbG9jayBiaXRtYXAgYXQgOTQ3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTQ3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDk0NzUtOTQ3OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk0NzktOTcyOAorICBGcmVlIGlub2RlczogMTE4NS0xMjE2CitHcm91cCAzODogKEJsb2NrcyA5NzI5LTk5ODQpCisgIEJsb2NrIGJpdG1hcCBhdCA5NzI5ICgrMCksIElub2RlIGJpdG1hcCBhdCA5NzMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTczMS05NzM0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTczNS05OTg0CisgIEZyZWUgaW5vZGVzOiAxMjE3LTEyNDgKK0dyb3VwIDM5OiAoQmxvY2tzIDk5ODUtMTAyNDApCisgIEJsb2NrIGJpdG1hcCBhdCA5OTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCA5OTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTk4Ny05OTkwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTk5MS0xMDI0MAorICBGcmVlIGlub2RlczogMTI0OS0xMjgwCitHcm91cCA0MDogKEJsb2NrcyAxMDI0MS0xMDQ5NikKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjQxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDI0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMjQzLTEwMjQ2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAyNDctMTA0OTYKKyAgRnJlZSBpbm9kZXM6IDEyODEtMTMxMgorR3JvdXAgNDE6IChCbG9ja3MgMTA0OTctMTA3NTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDQ5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA0OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDQ5OS0xMDUwMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwNTAzLTEwNzUyCisgIEZyZWUgaW5vZGVzOiAxMzEzLTEzNDQKK0dyb3VwIDQyOiAoQmxvY2tzIDEwNzUzLTExMDA4KQorICBCbG9jayBiaXRtYXAgYXQgMTA3NTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwNzU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA3NTUtMTA3NTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDc1OS0xMTAwOAorICBGcmVlIGlub2RlczogMTM0NS0xMzc2CitHcm91cCA0MzogKEJsb2NrcyAxMTAwOS0xMTI2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDExMDA5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTAxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExMDExLTExMDE0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEwMTUtMTEyNjQKKyAgRnJlZSBpbm9kZXM6IDEzNzctMTQwOAorR3JvdXAgNDQ6IChCbG9ja3MgMTEyNjUtMTE1MjApCisgIEJsb2NrIGJpdG1hcCBhdCAxMTI2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTEyNjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTI2Ny0xMTI3MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExMjcxLTExNTIwCisgIEZyZWUgaW5vZGVzOiAxNDA5LTE0NDAKK0dyb3VwIDQ1OiAoQmxvY2tzIDExNTIxLTExNzc2KQorICBCbG9jayBiaXRtYXAgYXQgMTE1MjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExNTIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE1MjMtMTE1MjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTUyNy0xMTc3NgorICBGcmVlIGlub2RlczogMTQ0MS0xNDcyCitHcm91cCA0NjogKEJsb2NrcyAxMTc3Ny0xMjAzMikKKyAgQmxvY2sgYml0bWFwIGF0IDExNzc3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTc3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExNzc5LTExNzgyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE3ODMtMTIwMzIKKyAgRnJlZSBpbm9kZXM6IDE0NzMtMTUwNAorR3JvdXAgNDc6IChCbG9ja3MgMTIwMzMtMTIyODgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjAzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIwMzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjAzNS0xMjAzOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMDM5LTEyMjg4CisgIEZyZWUgaW5vZGVzOiAxNTA1LTE1MzYKK0dyb3VwIDQ4OiAoQmxvY2tzIDEyMjg5LTEyNTQ0KQorICBCbG9jayBiaXRtYXAgYXQgMTIyODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyMjkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIyOTEtMTIyOTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjI5NS0xMjU0NAorICBGcmVlIGlub2RlczogMTUzNy0xNTY4CitHcm91cCA0OTogKEJsb2NrcyAxMjU0NS0xMjgwMCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTI1NDUsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEyNTQ2LTEyNTQ4CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTI1NDktMTI2NzMKKyAgQmxvY2sgYml0bWFwIGF0IDEyNjc0ICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDEyNjc1ICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAxMjY3Ni0xMjY3OSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI2ODAtMTI4MDAKKyAgRnJlZSBpbm9kZXM6IDE1NjktMTYwMAorR3JvdXAgNTA6IChCbG9ja3MgMTI4MDEtMTMwNTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjgwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTI4MDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjgwMy0xMjgwNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyODA3LTEzMDU2CisgIEZyZWUgaW5vZGVzOiAxNjAxLTE2MzIKK0dyb3VwIDUxOiAoQmxvY2tzIDEzMDU3LTEzMzEyKQorICBCbG9jayBiaXRtYXAgYXQgMTMwNTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzMDU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMwNTktMTMwNjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzA2My0xMzMxMgorICBGcmVlIGlub2RlczogMTYzMy0xNjY0CitHcm91cCA1MjogKEJsb2NrcyAxMzMxMy0xMzU2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDEzMzEzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzMxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzMzE1LTEzMzE4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMzMTktMTM1NjgKKyAgRnJlZSBpbm9kZXM6IDE2NjUtMTY5NgorR3JvdXAgNTM6IChCbG9ja3MgMTM1NjktMTM4MjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMzU2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTM1NzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzU3MS0xMzU3NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzNTc1LTEzODI0CisgIEZyZWUgaW5vZGVzOiAxNjk3LTE3MjgKK0dyb3VwIDU0OiAoQmxvY2tzIDEzODI1LTE0MDgwKQorICBCbG9jayBiaXRtYXAgYXQgMTM4MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzODI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTM4MjctMTM4MzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzgzMS0xNDA4MAorICBGcmVlIGlub2RlczogMTcyOS0xNzYwCitHcm91cCA1NTogKEJsb2NrcyAxNDA4MS0xNDMzNikKKyAgQmxvY2sgYml0bWFwIGF0IDE0MDgxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDA4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0MDgzLTE0MDg2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQwODctMTQzMzYKKyAgRnJlZSBpbm9kZXM6IDE3NjEtMTc5MgorR3JvdXAgNTY6IChCbG9ja3MgMTQzMzctMTQ1OTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxNDMzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQzMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDMzOS0xNDM0MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0MzQzLTE0NTkyCisgIEZyZWUgaW5vZGVzOiAxNzkzLTE4MjQKK0dyb3VwIDU3OiAoQmxvY2tzIDE0NTkzLTE0ODQ4KQorICBCbG9jayBiaXRtYXAgYXQgMTQ1OTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0NTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQ1OTUtMTQ1OTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDU5OS0xNDg0OAorICBGcmVlIGlub2RlczogMTgyNS0xODU2CitHcm91cCA1ODogKEJsb2NrcyAxNDg0OS0xNTEwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDE0ODQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDg1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0ODUxLTE0ODU0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQ4NTUtMTUxMDQKKyAgRnJlZSBpbm9kZXM6IDE4NTctMTg4OAorR3JvdXAgNTk6IChCbG9ja3MgMTUxMDUtMTUzNjApCisgIEJsb2NrIGJpdG1hcCBhdCAxNTEwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTUxMDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTEwNy0xNTExMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1MTExLTE1MzYwCisgIEZyZWUgaW5vZGVzOiAxODg5LTE5MjAKK0dyb3VwIDYwOiAoQmxvY2tzIDE1MzYxLTE1NjE2KQorICBCbG9jayBiaXRtYXAgYXQgMTUzNjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1MzYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTUzNjMtMTUzNjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTM2Ny0xNTYxNgorICBGcmVlIGlub2RlczogMTkyMS0xOTUyCitHcm91cCA2MTogKEJsb2NrcyAxNTYxNy0xNTg3MikKKyAgQmxvY2sgYml0bWFwIGF0IDE1NjE3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTYxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1NjE5LTE1NjIyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTU2MjMtMTU4NzIKKyAgRnJlZSBpbm9kZXM6IDE5NTMtMTk4NAorR3JvdXAgNjI6IChCbG9ja3MgMTU4NzMtMTYxMjgpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTg3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTU4NzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTg3NS0xNTg3OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1ODc5LTE2MTI4CisgIEZyZWUgaW5vZGVzOiAxOTg1LTIwMTYKK0dyb3VwIDYzOiAoQmxvY2tzIDE2MTI5LTE2Mzg0KQorICBCbG9jayBiaXRtYXAgYXQgMTYxMjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2MTMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTYxMzEtMTYxMzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjEzNS0xNjM4NAorICBGcmVlIGlub2RlczogMjAxNy0yMDQ4CitHcm91cCA2NDogKEJsb2NrcyAxNjM4NS0xNjY0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDE2Mzg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNjM4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE2Mzg3LTE2MzkwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTYzOTEtMTY2NDAKKyAgRnJlZSBpbm9kZXM6IDIwNDktMjA4MAorR3JvdXAgNjU6IChCbG9ja3MgMTY2NDEtMTY4OTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxNjY0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTY2NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjY0My0xNjY0NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE2NjQ3LTE2ODk2CisgIEZyZWUgaW5vZGVzOiAyMDgxLTIxMTIKK0dyb3VwIDY2OiAoQmxvY2tzIDE2ODk3LTE3MTUyKQorICBCbG9jayBiaXRtYXAgYXQgMTY4OTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2ODk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTY4OTktMTY5MDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjkwMy0xNzE1MgorICBGcmVlIGlub2RlczogMjExMy0yMTQ0CitHcm91cCA2NzogKEJsb2NrcyAxNzE1My0xNzQwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDE3MTUzICgrMCksIElub2RlIGJpdG1hcCBhdCAxNzE1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE3MTU1LTE3MTU4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTcxNTktMTc0MDgKKyAgRnJlZSBpbm9kZXM6IDIxNDUtMjE3NgorR3JvdXAgNjg6IChCbG9ja3MgMTc0MDktMTc2NjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxNzQwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTc0MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNzQxMS0xNzQxNCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE3NDE1LTE3NjY0CisgIEZyZWUgaW5vZGVzOiAyMTc3LTIyMDgKK0dyb3VwIDY5OiAoQmxvY2tzIDE3NjY1LTE3OTIwKQorICBCbG9jayBiaXRtYXAgYXQgMTc2NjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE3NjY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTc2NjctMTc2NzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNzY3MS0xNzkyMAorICBGcmVlIGlub2RlczogMjIwOS0yMjQwCitHcm91cCA3MDogKEJsb2NrcyAxNzkyMS0xODE3NikKKyAgQmxvY2sgYml0bWFwIGF0IDE3OTIxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNzkyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE3OTIzLTE3OTI2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTc5MjctMTgxNzYKKyAgRnJlZSBpbm9kZXM6IDIyNDEtMjI3MgorR3JvdXAgNzE6IChCbG9ja3MgMTgxNzctMTg0MzIpCisgIEJsb2NrIGJpdG1hcCBhdCAxODE3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTgxNzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxODE3OS0xODE4MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE4MTgzLTE4NDMyCisgIEZyZWUgaW5vZGVzOiAyMjczLTIzMDQKK0dyb3VwIDcyOiAoQmxvY2tzIDE4NDMzLTE4Njg4KQorICBCbG9jayBiaXRtYXAgYXQgMTg0MzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE4NDM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTg0MzUtMTg0MzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxODQzOS0xODY4OAorICBGcmVlIGlub2RlczogMjMwNS0yMzM2CitHcm91cCA3MzogKEJsb2NrcyAxODY4OS0xODk0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDE4Njg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxODY5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE4NjkxLTE4Njk0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTg2OTUtMTg5NDQKKyAgRnJlZSBpbm9kZXM6IDIzMzctMjM2OAorR3JvdXAgNzQ6IChCbG9ja3MgMTg5NDUtMTkyMDApCisgIEJsb2NrIGJpdG1hcCBhdCAxODk0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTg5NDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxODk0Ny0xODk1MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE4OTUxLTE5MjAwCisgIEZyZWUgaW5vZGVzOiAyMzY5LTI0MDAKK0dyb3VwIDc1OiAoQmxvY2tzIDE5MjAxLTE5NDU2KQorICBCbG9jayBiaXRtYXAgYXQgMTkyMDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE5MjAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTkyMDMtMTkyMDYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxOTIwNy0xOTQ1NgorICBGcmVlIGlub2RlczogMjQwMS0yNDMyCitHcm91cCA3NjogKEJsb2NrcyAxOTQ1Ny0xOTcxMikKKyAgQmxvY2sgYml0bWFwIGF0IDE5NDU3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxOTQ1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE5NDU5LTE5NDYyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTk0NjMtMTk3MTIKKyAgRnJlZSBpbm9kZXM6IDI0MzMtMjQ2NAorR3JvdXAgNzc6IChCbG9ja3MgMTk3MTMtMTk5NjgpCisgIEJsb2NrIGJpdG1hcCBhdCAxOTcxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTk3MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxOTcxNS0xOTcxOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE5NzE5LTE5OTY4CisgIEZyZWUgaW5vZGVzOiAyNDY1LTI0OTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZXNpemUyZnMgLXAgdGVzdC5pbWcgMzAwMDAKK1Jlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uIHRlc3QuaW1nIHRvIDMwMDAwICgxaykgYmxvY2tzLgorQmVnaW4gcGFzcyAxIChtYXggPSAzOSkKK0V4dGVuZGluZyB0aGUgaW5vZGUgdGFibGUgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorVGhlIGZpbGVzeXN0ZW0gb24gdGVzdC5pbWcgaXMgbm93IDI5OTUzICgxaykgYmxvY2tzIGxvbmcuCisKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzM3NDQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMDA3LzI5OTUzIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMAorZHVtcGUyZnMgdGVzdC5pbWcKK0ZpbGVzeXN0ZW0gdm9sdW1lIG5hbWU6ICAgPG5vbmU+CitMYXN0IG1vdW50ZWQgb246ICAgICAgICAgIDxub3QgYXZhaWxhYmxlPgorRmlsZXN5c3RlbSBtYWdpYyBudW1iZXI6ICAweEVGNTMKK0ZpbGVzeXN0ZW0gcmV2aXNpb24gIzogICAgMSAoZHluYW1pYykKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6ICAgICAgZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBzcGFyc2Vfc3VwZXIKK0RlZmF1bHQgbW91bnQgb3B0aW9uczogICAgKG5vbmUpCitGaWxlc3lzdGVtIHN0YXRlOiAgICAgICAgIGNsZWFuCitFcnJvcnMgYmVoYXZpb3I6ICAgICAgICAgIENvbnRpbnVlCitGaWxlc3lzdGVtIE9TIHR5cGU6ICAgICAgIExpbnV4CitJbm9kZSBjb3VudDogICAgICAgICAgICAgIDM3NDQKK0Jsb2NrIGNvdW50OiAgICAgICAgICAgICAgMjk5NTMKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgMTQ4OQorRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAyNzk0NgorRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICAzNzMzCitGaXJzdCBibG9jazogICAgICAgICAgICAgIDEKK0Jsb2NrIHNpemU6ICAgICAgICAgICAgICAgMTAyNAorRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICAxMDI0CitSZXNlcnZlZCBHRFQgYmxvY2tzOiAgICAgIDEyNAorQmxvY2tzIHBlciBncm91cDogICAgICAgICAyNTYKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgMjU2CitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDMyCitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDQKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMS0yNTYpCisgIFByaW1hcnkgc3VwZXJibG9jayBhdCAxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyLTUKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA2LTEyOQorICBCbG9jayBiaXRtYXAgYXQgMTMwICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDEzMSAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMTMyLTEzNSAoKzEzMSkKKyAgMTA3IGZyZWUgYmxvY2tzLCAyMSBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTUwLTI1NgorICBGcmVlIGlub2RlczogMTItMzIKK0dyb3VwIDE6IChCbG9ja3MgMjU3LTUxMikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjU3LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyNTgtMjYxCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjYyLTM4NQorICBCbG9jayBiaXRtYXAgYXQgMzg2ICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDM4NyAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMzg4LTM5MSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzkyLTUxMgorICBGcmVlIGlub2RlczogMzMtNjQKK0dyb3VwIDI6IChCbG9ja3MgNTEzLTc2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDUxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTE1LTUxOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUxOS03NjgKKyAgRnJlZSBpbm9kZXM6IDY1LTk2CitHcm91cCAzOiAoQmxvY2tzIDc2OS0xMDI0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA3NjksIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDc3MC03NzMKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA3NzQtODk3CisgIEJsb2NrIGJpdG1hcCBhdCA4OTggKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgODk5ICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCA5MDAtOTAzICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MDQtMTAyNAorICBGcmVlIGlub2RlczogOTctMTI4CitHcm91cCA0OiAoQmxvY2tzIDEwMjUtMTI4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDI3LTEwMzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDMxLTEyODAKKyAgRnJlZSBpbm9kZXM6IDEyOS0xNjAKK0dyb3VwIDU6IChCbG9ja3MgMTI4MS0xNTM2KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxMjgxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAxMjgyLTEyODUKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAxMjg2LTE0MDkKKyAgQmxvY2sgYml0bWFwIGF0IDE0MTAgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMTQxMSAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMTQxMi0xNDE1ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDE2LTE1MzYKKyAgRnJlZSBpbm9kZXM6IDE2MS0xOTIKK0dyb3VwIDY6IChCbG9ja3MgMTUzNy0xNzkyKQorICBCbG9jayBiaXRtYXAgYXQgMTUzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTUzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1MzktMTU0MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1NDMtMTc5MgorICBGcmVlIGlub2RlczogMTkzLTIyNAorR3JvdXAgNzogKEJsb2NrcyAxNzkzLTIwNDgpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDE3OTMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDE3OTQtMTc5NworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDE3OTgtMTkyMQorICBCbG9jayBiaXRtYXAgYXQgMTkyMiAoKzEyOSksIElub2RlIGJpdG1hcCBhdCAxOTIzICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAxOTI0LTE5MjcgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE5MjgtMjA0OAorICBGcmVlIGlub2RlczogMjI1LTI1NgorR3JvdXAgODogKEJsb2NrcyAyMDQ5LTIzMDQpCisgIEJsb2NrIGJpdG1hcCBhdCAyMDQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjA1MS0yMDU0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA1NS0yMzA0CisgIEZyZWUgaW5vZGVzOiAyNTctMjg4CitHcm91cCA5OiAoQmxvY2tzIDIzMDUtMjU2MCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjMwNSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjMwNi0yMzA5CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjMxMC0yNDMzCisgIEJsb2NrIGJpdG1hcCBhdCAyNDM0ICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDI0MzUgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDI0MzYtMjQzOSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjQ0MC0yNTYwCisgIEZyZWUgaW5vZGVzOiAyODktMzIwCitHcm91cCAxMDogKEJsb2NrcyAyNTYxLTI4MTYpCisgIEJsb2NrIGJpdG1hcCBhdCAyNTYxICgrMCksIElub2RlIGJpdG1hcCBhdCAyNTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjU2My0yNTY2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjU2Ny0yODE2CisgIEZyZWUgaW5vZGVzOiAzMjEtMzUyCitHcm91cCAxMTogKEJsb2NrcyAyODE3LTMwNzIpCisgIEJsb2NrIGJpdG1hcCBhdCAyODE3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyODE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjgxOS0yODIyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjgyMy0zMDcyCisgIEZyZWUgaW5vZGVzOiAzNTMtMzg0CitHcm91cCAxMjogKEJsb2NrcyAzMDczLTMzMjgpCisgIEJsb2NrIGJpdG1hcCBhdCAzMDczICgrMCksIElub2RlIGJpdG1hcCBhdCAzMDc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzA3NS0zMDc4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzA3OS0zMzI4CisgIEZyZWUgaW5vZGVzOiAzODUtNDE2CitHcm91cCAxMzogKEJsb2NrcyAzMzI5LTM1ODQpCisgIEJsb2NrIGJpdG1hcCBhdCAzMzI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMzMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzMzMS0zMzM0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzMzNS0zNTg0CisgIEZyZWUgaW5vZGVzOiA0MTctNDQ4CitHcm91cCAxNDogKEJsb2NrcyAzNTg1LTM4NDApCisgIEJsb2NrIGJpdG1hcCBhdCAzNTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzU4Ny0zNTkwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzU5MS0zODQwCisgIEZyZWUgaW5vZGVzOiA0NDktNDgwCitHcm91cCAxNTogKEJsb2NrcyAzODQxLTQwOTYpCisgIEJsb2NrIGJpdG1hcCBhdCAzODQxICgrMCksIElub2RlIGJpdG1hcCBhdCAzODQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzg0My0zODQ2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzg0Ny00MDk2CisgIEZyZWUgaW5vZGVzOiA0ODEtNTEyCitHcm91cCAxNjogKEJsb2NrcyA0MDk3LTQzNTIpCisgIEJsb2NrIGJpdG1hcCBhdCA0MDk3ICgrMCksIElub2RlIGJpdG1hcCBhdCA0MDk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDA5OS00MTAyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDEwMy00MzUyCisgIEZyZWUgaW5vZGVzOiA1MTMtNTQ0CitHcm91cCAxNzogKEJsb2NrcyA0MzUzLTQ2MDgpCisgIEJsb2NrIGJpdG1hcCBhdCA0MzUzICgrMCksIElub2RlIGJpdG1hcCBhdCA0MzU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDM1NS00MzU4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDM1OS00NjA4CisgIEZyZWUgaW5vZGVzOiA1NDUtNTc2CitHcm91cCAxODogKEJsb2NrcyA0NjA5LTQ4NjQpCisgIEJsb2NrIGJpdG1hcCBhdCA0NjA5ICgrMCksIElub2RlIGJpdG1hcCBhdCA0NjEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDYxMS00NjE0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDYxNS00ODY0CisgIEZyZWUgaW5vZGVzOiA1NzctNjA4CitHcm91cCAxOTogKEJsb2NrcyA0ODY1LTUxMjApCisgIEJsb2NrIGJpdG1hcCBhdCA0ODY1ICgrMCksIElub2RlIGJpdG1hcCBhdCA0ODY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDg2Ny00ODcwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDg3MS01MTIwCisgIEZyZWUgaW5vZGVzOiA2MDktNjQwCitHcm91cCAyMDogKEJsb2NrcyA1MTIxLTUzNzYpCisgIEJsb2NrIGJpdG1hcCBhdCA1MTIxICgrMCksIElub2RlIGJpdG1hcCBhdCA1MTIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTEyMy01MTI2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTEyNy01Mzc2CisgIEZyZWUgaW5vZGVzOiA2NDEtNjcyCitHcm91cCAyMTogKEJsb2NrcyA1Mzc3LTU2MzIpCisgIEJsb2NrIGJpdG1hcCBhdCA1Mzc3ICgrMCksIElub2RlIGJpdG1hcCBhdCA1Mzc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTM3OS01MzgyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTM4My01NjMyCisgIEZyZWUgaW5vZGVzOiA2NzMtNzA0CitHcm91cCAyMjogKEJsb2NrcyA1NjMzLTU4ODgpCisgIEJsb2NrIGJpdG1hcCBhdCA1NjMzICgrMCksIElub2RlIGJpdG1hcCBhdCA1NjM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTYzNS01NjM4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTYzOS01ODg4CisgIEZyZWUgaW5vZGVzOiA3MDUtNzM2CitHcm91cCAyMzogKEJsb2NrcyA1ODg5LTYxNDQpCisgIEJsb2NrIGJpdG1hcCBhdCA1ODg5ICgrMCksIElub2RlIGJpdG1hcCBhdCA1ODkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTg5MS01ODk0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTg5NS02MTQ0CisgIEZyZWUgaW5vZGVzOiA3MzctNzY4CitHcm91cCAyNDogKEJsb2NrcyA2MTQ1LTY0MDApCisgIEJsb2NrIGJpdG1hcCBhdCA2MTQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCA2MTQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjE0Ny02MTUwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjE1MS02NDAwCisgIEZyZWUgaW5vZGVzOiA3NjktODAwCitHcm91cCAyNTogKEJsb2NrcyA2NDAxLTY2NTYpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDY0MDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDY0MDItNjQwNQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDY0MDYtNjUyOQorICBCbG9jayBiaXRtYXAgYXQgNjUzMCAoKzEyOSksIElub2RlIGJpdG1hcCBhdCA2NTMxICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCA2NTMyLTY1MzUgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY1MzYtNjY1NgorICBGcmVlIGlub2RlczogODAxLTgzMgorR3JvdXAgMjY6IChCbG9ja3MgNjY1Ny02OTEyKQorICBCbG9jayBiaXRtYXAgYXQgNjY1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjY1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY2NTktNjY2MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY2NjMtNjkxMgorICBGcmVlIGlub2RlczogODMzLTg2NAorR3JvdXAgMjc6IChCbG9ja3MgNjkxMy03MTY4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA2OTEzLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA2OTE0LTY5MTcKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA2OTE4LTcwNDEKKyAgQmxvY2sgYml0bWFwIGF0IDcwNDIgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgNzA0MyAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgNzA0NC03MDQ3ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MDQ4LTcxNjgKKyAgRnJlZSBpbm9kZXM6IDg2NS04OTYKK0dyb3VwIDI4OiAoQmxvY2tzIDcxNjktNzQyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDcxNjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDcxNzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3MTcxLTcxNzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MTc1LTc0MjQKKyAgRnJlZSBpbm9kZXM6IDg5Ny05MjgKK0dyb3VwIDI5OiAoQmxvY2tzIDc0MjUtNzY4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDc0MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc0MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NDI3LTc0MzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NDMxLTc2ODAKKyAgRnJlZSBpbm9kZXM6IDkyOS05NjAKK0dyb3VwIDMwOiAoQmxvY2tzIDc2ODEtNzkzNikKKyAgQmxvY2sgYml0bWFwIGF0IDc2ODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc2ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NjgzLTc2ODYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3Njg3LTc5MzYKKyAgRnJlZSBpbm9kZXM6IDk2MS05OTIKK0dyb3VwIDMxOiAoQmxvY2tzIDc5MzctODE5MikKKyAgQmxvY2sgYml0bWFwIGF0IDc5MzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc5MzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3OTM5LTc5NDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3OTQzLTgxOTIKKyAgRnJlZSBpbm9kZXM6IDk5My0xMDI0CitHcm91cCAzMjogKEJsb2NrcyA4MTkzLTg0NDgpCisgIEJsb2NrIGJpdG1hcCBhdCA4MTkzICgrMCksIElub2RlIGJpdG1hcCBhdCA4MTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODE5NS04MTk4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODE5OS04NDQ4CisgIEZyZWUgaW5vZGVzOiAxMDI1LTEwNTYKK0dyb3VwIDMzOiAoQmxvY2tzIDg0NDktODcwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDg0NDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg0NTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4NDUxLTg0NTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NDU1LTg3MDQKKyAgRnJlZSBpbm9kZXM6IDEwNTctMTA4OAorR3JvdXAgMzQ6IChCbG9ja3MgODcwNS04OTYwKQorICBCbG9jayBiaXRtYXAgYXQgODcwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODcwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg3MDctODcxMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg3MTEtODk2MAorICBGcmVlIGlub2RlczogMTA4OS0xMTIwCitHcm91cCAzNTogKEJsb2NrcyA4OTYxLTkyMTYpCisgIEJsb2NrIGJpdG1hcCBhdCA4OTYxICgrMCksIElub2RlIGJpdG1hcCBhdCA4OTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODk2My04OTY2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODk2Ny05MjE2CisgIEZyZWUgaW5vZGVzOiAxMTIxLTExNTIKK0dyb3VwIDM2OiAoQmxvY2tzIDkyMTctOTQ3MikKKyAgQmxvY2sgYml0bWFwIGF0IDkyMTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDkyMTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5MjE5LTkyMjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MjIzLTk0NzIKKyAgRnJlZSBpbm9kZXM6IDExNTMtMTE4NAorR3JvdXAgMzc6IChCbG9ja3MgOTQ3My05NzI4KQorICBCbG9jayBiaXRtYXAgYXQgOTQ3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTQ3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDk0NzUtOTQ3OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk0NzktOTcyOAorICBGcmVlIGlub2RlczogMTE4NS0xMjE2CitHcm91cCAzODogKEJsb2NrcyA5NzI5LTk5ODQpCisgIEJsb2NrIGJpdG1hcCBhdCA5NzI5ICgrMCksIElub2RlIGJpdG1hcCBhdCA5NzMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTczMS05NzM0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTczNS05OTg0CisgIEZyZWUgaW5vZGVzOiAxMjE3LTEyNDgKK0dyb3VwIDM5OiAoQmxvY2tzIDk5ODUtMTAyNDApCisgIEJsb2NrIGJpdG1hcCBhdCA5OTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCA5OTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTk4Ny05OTkwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTk5MS0xMDI0MAorICBGcmVlIGlub2RlczogMTI0OS0xMjgwCitHcm91cCA0MDogKEJsb2NrcyAxMDI0MS0xMDQ5NikKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjQxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDI0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMjQzLTEwMjQ2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAyNDctMTA0OTYKKyAgRnJlZSBpbm9kZXM6IDEyODEtMTMxMgorR3JvdXAgNDE6IChCbG9ja3MgMTA0OTctMTA3NTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDQ5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA0OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDQ5OS0xMDUwMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwNTAzLTEwNzUyCisgIEZyZWUgaW5vZGVzOiAxMzEzLTEzNDQKK0dyb3VwIDQyOiAoQmxvY2tzIDEwNzUzLTExMDA4KQorICBCbG9jayBiaXRtYXAgYXQgMTA3NTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwNzU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA3NTUtMTA3NTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDc1OS0xMTAwOAorICBGcmVlIGlub2RlczogMTM0NS0xMzc2CitHcm91cCA0MzogKEJsb2NrcyAxMTAwOS0xMTI2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDExMDA5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTAxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExMDExLTExMDE0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEwMTUtMTEyNjQKKyAgRnJlZSBpbm9kZXM6IDEzNzctMTQwOAorR3JvdXAgNDQ6IChCbG9ja3MgMTEyNjUtMTE1MjApCisgIEJsb2NrIGJpdG1hcCBhdCAxMTI2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTEyNjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTI2Ny0xMTI3MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExMjcxLTExNTIwCisgIEZyZWUgaW5vZGVzOiAxNDA5LTE0NDAKK0dyb3VwIDQ1OiAoQmxvY2tzIDExNTIxLTExNzc2KQorICBCbG9jayBiaXRtYXAgYXQgMTE1MjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExNTIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE1MjMtMTE1MjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTUyNy0xMTc3NgorICBGcmVlIGlub2RlczogMTQ0MS0xNDcyCitHcm91cCA0NjogKEJsb2NrcyAxMTc3Ny0xMjAzMikKKyAgQmxvY2sgYml0bWFwIGF0IDExNzc3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTc3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExNzc5LTExNzgyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE3ODMtMTIwMzIKKyAgRnJlZSBpbm9kZXM6IDE0NzMtMTUwNAorR3JvdXAgNDc6IChCbG9ja3MgMTIwMzMtMTIyODgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjAzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIwMzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjAzNS0xMjAzOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMDM5LTEyMjg4CisgIEZyZWUgaW5vZGVzOiAxNTA1LTE1MzYKK0dyb3VwIDQ4OiAoQmxvY2tzIDEyMjg5LTEyNTQ0KQorICBCbG9jayBiaXRtYXAgYXQgMTIyODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyMjkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIyOTEtMTIyOTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjI5NS0xMjU0NAorICBGcmVlIGlub2RlczogMTUzNy0xNTY4CitHcm91cCA0OTogKEJsb2NrcyAxMjU0NS0xMjgwMCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTI1NDUsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEyNTQ2LTEyNTQ5CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTI1NTAtMTI2NzMKKyAgQmxvY2sgYml0bWFwIGF0IDEyNjc0ICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDEyNjc1ICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAxMjY3Ni0xMjY3OSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI2ODAtMTI4MDAKKyAgRnJlZSBpbm9kZXM6IDE1NjktMTYwMAorR3JvdXAgNTA6IChCbG9ja3MgMTI4MDEtMTMwNTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjgwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTI4MDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjgwMy0xMjgwNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyODA3LTEzMDU2CisgIEZyZWUgaW5vZGVzOiAxNjAxLTE2MzIKK0dyb3VwIDUxOiAoQmxvY2tzIDEzMDU3LTEzMzEyKQorICBCbG9jayBiaXRtYXAgYXQgMTMwNTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzMDU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMwNTktMTMwNjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzA2My0xMzMxMgorICBGcmVlIGlub2RlczogMTYzMy0xNjY0CitHcm91cCA1MjogKEJsb2NrcyAxMzMxMy0xMzU2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDEzMzEzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzMxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzMzE1LTEzMzE4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMzMTktMTM1NjgKKyAgRnJlZSBpbm9kZXM6IDE2NjUtMTY5NgorR3JvdXAgNTM6IChCbG9ja3MgMTM1NjktMTM4MjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMzU2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTM1NzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzU3MS0xMzU3NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzNTc1LTEzODI0CisgIEZyZWUgaW5vZGVzOiAxNjk3LTE3MjgKK0dyb3VwIDU0OiAoQmxvY2tzIDEzODI1LTE0MDgwKQorICBCbG9jayBiaXRtYXAgYXQgMTM4MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzODI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTM4MjctMTM4MzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzgzMS0xNDA4MAorICBGcmVlIGlub2RlczogMTcyOS0xNzYwCitHcm91cCA1NTogKEJsb2NrcyAxNDA4MS0xNDMzNikKKyAgQmxvY2sgYml0bWFwIGF0IDE0MDgxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDA4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0MDgzLTE0MDg2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQwODctMTQzMzYKKyAgRnJlZSBpbm9kZXM6IDE3NjEtMTc5MgorR3JvdXAgNTY6IChCbG9ja3MgMTQzMzctMTQ1OTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxNDMzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQzMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDMzOS0xNDM0MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0MzQzLTE0NTkyCisgIEZyZWUgaW5vZGVzOiAxNzkzLTE4MjQKK0dyb3VwIDU3OiAoQmxvY2tzIDE0NTkzLTE0ODQ4KQorICBCbG9jayBiaXRtYXAgYXQgMTQ1OTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0NTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQ1OTUtMTQ1OTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDU5OS0xNDg0OAorICBGcmVlIGlub2RlczogMTgyNS0xODU2CitHcm91cCA1ODogKEJsb2NrcyAxNDg0OS0xNTEwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDE0ODQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDg1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0ODUxLTE0ODU0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQ4NTUtMTUxMDQKKyAgRnJlZSBpbm9kZXM6IDE4NTctMTg4OAorR3JvdXAgNTk6IChCbG9ja3MgMTUxMDUtMTUzNjApCisgIEJsb2NrIGJpdG1hcCBhdCAxNTEwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTUxMDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTEwNy0xNTExMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1MTExLTE1MzYwCisgIEZyZWUgaW5vZGVzOiAxODg5LTE5MjAKK0dyb3VwIDYwOiAoQmxvY2tzIDE1MzYxLTE1NjE2KQorICBCbG9jayBiaXRtYXAgYXQgMTUzNjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1MzYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTUzNjMtMTUzNjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTM2Ny0xNTYxNgorICBGcmVlIGlub2RlczogMTkyMS0xOTUyCitHcm91cCA2MTogKEJsb2NrcyAxNTYxNy0xNTg3MikKKyAgQmxvY2sgYml0bWFwIGF0IDE1NjE3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTYxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1NjE5LTE1NjIyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTU2MjMtMTU4NzIKKyAgRnJlZSBpbm9kZXM6IDE5NTMtMTk4NAorR3JvdXAgNjI6IChCbG9ja3MgMTU4NzMtMTYxMjgpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTg3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTU4NzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTg3NS0xNTg3OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1ODc5LTE2MTI4CisgIEZyZWUgaW5vZGVzOiAxOTg1LTIwMTYKK0dyb3VwIDYzOiAoQmxvY2tzIDE2MTI5LTE2Mzg0KQorICBCbG9jayBiaXRtYXAgYXQgMTYxMjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2MTMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTYxMzEtMTYxMzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjEzNS0xNjM4NAorICBGcmVlIGlub2RlczogMjAxNy0yMDQ4CitHcm91cCA2NDogKEJsb2NrcyAxNjM4NS0xNjY0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDE2Mzg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNjM4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE2Mzg3LTE2MzkwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTYzOTEtMTY2NDAKKyAgRnJlZSBpbm9kZXM6IDIwNDktMjA4MAorR3JvdXAgNjU6IChCbG9ja3MgMTY2NDEtMTY4OTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxNjY0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTY2NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjY0My0xNjY0NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE2NjQ3LTE2ODk2CisgIEZyZWUgaW5vZGVzOiAyMDgxLTIxMTIKK0dyb3VwIDY2OiAoQmxvY2tzIDE2ODk3LTE3MTUyKQorICBCbG9jayBiaXRtYXAgYXQgMTY4OTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2ODk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTY4OTktMTY5MDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjkwMy0xNzE1MgorICBGcmVlIGlub2RlczogMjExMy0yMTQ0CitHcm91cCA2NzogKEJsb2NrcyAxNzE1My0xNzQwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDE3MTUzICgrMCksIElub2RlIGJpdG1hcCBhdCAxNzE1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE3MTU1LTE3MTU4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTcxNTktMTc0MDgKKyAgRnJlZSBpbm9kZXM6IDIxNDUtMjE3NgorR3JvdXAgNjg6IChCbG9ja3MgMTc0MDktMTc2NjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxNzQwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTc0MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNzQxMS0xNzQxNCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE3NDE1LTE3NjY0CisgIEZyZWUgaW5vZGVzOiAyMTc3LTIyMDgKK0dyb3VwIDY5OiAoQmxvY2tzIDE3NjY1LTE3OTIwKQorICBCbG9jayBiaXRtYXAgYXQgMTc2NjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE3NjY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTc2NjctMTc2NzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNzY3MS0xNzkyMAorICBGcmVlIGlub2RlczogMjIwOS0yMjQwCitHcm91cCA3MDogKEJsb2NrcyAxNzkyMS0xODE3NikKKyAgQmxvY2sgYml0bWFwIGF0IDE3OTIxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNzkyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE3OTIzLTE3OTI2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTc5MjctMTgxNzYKKyAgRnJlZSBpbm9kZXM6IDIyNDEtMjI3MgorR3JvdXAgNzE6IChCbG9ja3MgMTgxNzctMTg0MzIpCisgIEJsb2NrIGJpdG1hcCBhdCAxODE3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTgxNzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxODE3OS0xODE4MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE4MTgzLTE4NDMyCisgIEZyZWUgaW5vZGVzOiAyMjczLTIzMDQKK0dyb3VwIDcyOiAoQmxvY2tzIDE4NDMzLTE4Njg4KQorICBCbG9jayBiaXRtYXAgYXQgMTg0MzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE4NDM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTg0MzUtMTg0MzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxODQzOS0xODY4OAorICBGcmVlIGlub2RlczogMjMwNS0yMzM2CitHcm91cCA3MzogKEJsb2NrcyAxODY4OS0xODk0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDE4Njg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxODY5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE4NjkxLTE4Njk0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTg2OTUtMTg5NDQKKyAgRnJlZSBpbm9kZXM6IDIzMzctMjM2OAorR3JvdXAgNzQ6IChCbG9ja3MgMTg5NDUtMTkyMDApCisgIEJsb2NrIGJpdG1hcCBhdCAxODk0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTg5NDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxODk0Ny0xODk1MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE4OTUxLTE5MjAwCisgIEZyZWUgaW5vZGVzOiAyMzY5LTI0MDAKK0dyb3VwIDc1OiAoQmxvY2tzIDE5MjAxLTE5NDU2KQorICBCbG9jayBiaXRtYXAgYXQgMTkyMDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE5MjAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTkyMDMtMTkyMDYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxOTIwNy0xOTQ1NgorICBGcmVlIGlub2RlczogMjQwMS0yNDMyCitHcm91cCA3NjogKEJsb2NrcyAxOTQ1Ny0xOTcxMikKKyAgQmxvY2sgYml0bWFwIGF0IDE5NDU3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxOTQ1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE5NDU5LTE5NDYyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTk0NjMtMTk3MTIKKyAgRnJlZSBpbm9kZXM6IDI0MzMtMjQ2NAorR3JvdXAgNzc6IChCbG9ja3MgMTk3MTMtMTk5NjgpCisgIEJsb2NrIGJpdG1hcCBhdCAxOTcxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTk3MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxOTcxNS0xOTcxOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE5NzE5LTE5OTY4CisgIEZyZWUgaW5vZGVzOiAyNDY1LTI0OTYKK0dyb3VwIDc4OiAoQmxvY2tzIDE5OTY5LTIwMjI0KQorICBCbG9jayBiaXRtYXAgYXQgMTk5NjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE5OTcwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTk5NzEtMTk5NzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxOTk3NS0yMDIyNAorICBGcmVlIGlub2RlczogMjQ5Ny0yNTI4CitHcm91cCA3OTogKEJsb2NrcyAyMDIyNS0yMDQ4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDIwMjI1ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDIyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIwMjI3LTIwMjMwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjAyMzEtMjA0ODAKKyAgRnJlZSBpbm9kZXM6IDI1MjktMjU2MAorR3JvdXAgODA6IChCbG9ja3MgMjA0ODEtMjA3MzYpCisgIEJsb2NrIGJpdG1hcCBhdCAyMDQ4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjA0ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMDQ4My0yMDQ4NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIwNDg3LTIwNzM2CisgIEZyZWUgaW5vZGVzOiAyNTYxLTI1OTIKK0dyb3VwIDgxOiAoQmxvY2tzIDIwNzM3LTIwOTkyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyMDczNywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjA3MzgtMjA3NDEKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyMDc0Mi0yMDg2NQorICBCbG9jayBiaXRtYXAgYXQgMjA4NjYgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMjA4NjcgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDIwODY4LTIwODcxICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDg3Mi0yMDk5MgorICBGcmVlIGlub2RlczogMjU5My0yNjI0CitHcm91cCA4MjogKEJsb2NrcyAyMDk5My0yMTI0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDIwOTkzICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDk5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIwOTk1LTIwOTk4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA5OTktMjEyNDgKKyAgRnJlZSBpbm9kZXM6IDI2MjUtMjY1NgorR3JvdXAgODM6IChCbG9ja3MgMjEyNDktMjE1MDQpCisgIEJsb2NrIGJpdG1hcCBhdCAyMTI0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjEyNTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMTI1MS0yMTI1NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIxMjU1LTIxNTA0CisgIEZyZWUgaW5vZGVzOiAyNjU3LTI2ODgKK0dyb3VwIDg0OiAoQmxvY2tzIDIxNTA1LTIxNzYwKQorICBCbG9jayBiaXRtYXAgYXQgMjE1MDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIxNTA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjE1MDctMjE1MTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMTUxMS0yMTc2MAorICBGcmVlIGlub2RlczogMjY4OS0yNzIwCitHcm91cCA4NTogKEJsb2NrcyAyMTc2MS0yMjAxNikKKyAgQmxvY2sgYml0bWFwIGF0IDIxNzYxICgrMCksIElub2RlIGJpdG1hcCBhdCAyMTc2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIxNzYzLTIxNzY2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjE3NjctMjIwMTYKKyAgRnJlZSBpbm9kZXM6IDI3MjEtMjc1MgorR3JvdXAgODY6IChCbG9ja3MgMjIwMTctMjIyNzIpCisgIEJsb2NrIGJpdG1hcCBhdCAyMjAxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjIwMTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMjAxOS0yMjAyMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIyMDIzLTIyMjcyCisgIEZyZWUgaW5vZGVzOiAyNzUzLTI3ODQKK0dyb3VwIDg3OiAoQmxvY2tzIDIyMjczLTIyNTI4KQorICBCbG9jayBiaXRtYXAgYXQgMjIyNzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIyMjc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjIyNzUtMjIyNzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMjI3OS0yMjUyOAorICBGcmVlIGlub2RlczogMjc4NS0yODE2CitHcm91cCA4ODogKEJsb2NrcyAyMjUyOS0yMjc4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDIyNTI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMjUzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIyNTMxLTIyNTM0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjI1MzUtMjI3ODQKKyAgRnJlZSBpbm9kZXM6IDI4MTctMjg0OAorR3JvdXAgODk6IChCbG9ja3MgMjI3ODUtMjMwNDApCisgIEJsb2NrIGJpdG1hcCBhdCAyMjc4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjI3ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMjc4Ny0yMjc5MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIyNzkxLTIzMDQwCisgIEZyZWUgaW5vZGVzOiAyODQ5LTI4ODAKK0dyb3VwIDkwOiAoQmxvY2tzIDIzMDQxLTIzMjk2KQorICBCbG9jayBiaXRtYXAgYXQgMjMwNDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIzMDQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjMwNDMtMjMwNDYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMzA0Ny0yMzI5NgorICBGcmVlIGlub2RlczogMjg4MS0yOTEyCitHcm91cCA5MTogKEJsb2NrcyAyMzI5Ny0yMzU1MikKKyAgQmxvY2sgYml0bWFwIGF0IDIzMjk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMzI5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIzMjk5LTIzMzAyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjMzMDMtMjM1NTIKKyAgRnJlZSBpbm9kZXM6IDI5MTMtMjk0NAorR3JvdXAgOTI6IChCbG9ja3MgMjM1NTMtMjM4MDgpCisgIEJsb2NrIGJpdG1hcCBhdCAyMzU1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjM1NTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMzU1NS0yMzU1OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIzNTU5LTIzODA4CisgIEZyZWUgaW5vZGVzOiAyOTQ1LTI5NzYKK0dyb3VwIDkzOiAoQmxvY2tzIDIzODA5LTI0MDY0KQorICBCbG9jayBiaXRtYXAgYXQgMjM4MDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIzODEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjM4MTEtMjM4MTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMzgxNS0yNDA2NAorICBGcmVlIGlub2RlczogMjk3Ny0zMDA4CitHcm91cCA5NDogKEJsb2NrcyAyNDA2NS0yNDMyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDI0MDY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNDA2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI0MDY3LTI0MDcwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjQwNzEtMjQzMjAKKyAgRnJlZSBpbm9kZXM6IDMwMDktMzA0MAorR3JvdXAgOTU6IChCbG9ja3MgMjQzMjEtMjQ1NzYpCisgIEJsb2NrIGJpdG1hcCBhdCAyNDMyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjQzMjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNDMyMy0yNDMyNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI0MzI3LTI0NTc2CisgIEZyZWUgaW5vZGVzOiAzMDQxLTMwNzIKK0dyb3VwIDk2OiAoQmxvY2tzIDI0NTc3LTI0ODMyKQorICBCbG9jayBiaXRtYXAgYXQgMjQ1NzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI0NTc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjQ1NzktMjQ1ODIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNDU4My0yNDgzMgorICBGcmVlIGlub2RlczogMzA3My0zMTA0CitHcm91cCA5NzogKEJsb2NrcyAyNDgzMy0yNTA4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDI0ODMzICgrMCksIElub2RlIGJpdG1hcCBhdCAyNDgzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI0ODM1LTI0ODM4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjQ4MzktMjUwODgKKyAgRnJlZSBpbm9kZXM6IDMxMDUtMzEzNgorR3JvdXAgOTg6IChCbG9ja3MgMjUwODktMjUzNDQpCisgIEJsb2NrIGJpdG1hcCBhdCAyNTA4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjUwOTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNTA5MS0yNTA5NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1MDk1LTI1MzQ0CisgIEZyZWUgaW5vZGVzOiAzMTM3LTMxNjgKK0dyb3VwIDk5OiAoQmxvY2tzIDI1MzQ1LTI1NjAwKQorICBCbG9jayBiaXRtYXAgYXQgMjUzNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI1MzQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjUzNDctMjUzNTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNTM1MS0yNTYwMAorICBGcmVlIGlub2RlczogMzE2OS0zMjAwCitHcm91cCAxMDA6IChCbG9ja3MgMjU2MDEtMjU4NTYpCisgIEJsb2NrIGJpdG1hcCBhdCAyNTYwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjU2MDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNTYwMy0yNTYwNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1NjA3LTI1ODU2CisgIEZyZWUgaW5vZGVzOiAzMjAxLTMyMzIKK0dyb3VwIDEwMTogKEJsb2NrcyAyNTg1Ny0yNjExMikKKyAgQmxvY2sgYml0bWFwIGF0IDI1ODU3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNTg1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI1ODU5LTI1ODYyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjU4NjMtMjYxMTIKKyAgRnJlZSBpbm9kZXM6IDMyMzMtMzI2NAorR3JvdXAgMTAyOiAoQmxvY2tzIDI2MTEzLTI2MzY4KQorICBCbG9jayBiaXRtYXAgYXQgMjYxMTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI2MTE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjYxMTUtMjYxMTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNjExOS0yNjM2OAorICBGcmVlIGlub2RlczogMzI2NS0zMjk2CitHcm91cCAxMDM6IChCbG9ja3MgMjYzNjktMjY2MjQpCisgIEJsb2NrIGJpdG1hcCBhdCAyNjM2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjYzNzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNjM3MS0yNjM3NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI2Mzc1LTI2NjI0CisgIEZyZWUgaW5vZGVzOiAzMjk3LTMzMjgKK0dyb3VwIDEwNDogKEJsb2NrcyAyNjYyNS0yNjg4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDI2NjI1ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNjYyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI2NjI3LTI2NjMwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjY2MzEtMjY4ODAKKyAgRnJlZSBpbm9kZXM6IDMzMjktMzM2MAorR3JvdXAgMTA1OiAoQmxvY2tzIDI2ODgxLTI3MTM2KQorICBCbG9jayBiaXRtYXAgYXQgMjY4ODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI2ODgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjY4ODMtMjY4ODYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNjg4Ny0yNzEzNgorICBGcmVlIGlub2RlczogMzM2MS0zMzkyCitHcm91cCAxMDY6IChCbG9ja3MgMjcxMzctMjczOTIpCisgIEJsb2NrIGJpdG1hcCBhdCAyNzEzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjcxMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNzEzOS0yNzE0MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI3MTQzLTI3MzkyCisgIEZyZWUgaW5vZGVzOiAzMzkzLTM0MjQKK0dyb3VwIDEwNzogKEJsb2NrcyAyNzM5My0yNzY0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDI3MzkzICgrMCksIElub2RlIGJpdG1hcCBhdCAyNzM5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI3Mzk1LTI3Mzk4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjczOTktMjc2NDgKKyAgRnJlZSBpbm9kZXM6IDM0MjUtMzQ1NgorR3JvdXAgMTA4OiAoQmxvY2tzIDI3NjQ5LTI3OTA0KQorICBCbG9jayBiaXRtYXAgYXQgMjc2NDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI3NjUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjc2NTEtMjc2NTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNzY1NS0yNzkwNAorICBGcmVlIGlub2RlczogMzQ1Ny0zNDg4CitHcm91cCAxMDk6IChCbG9ja3MgMjc5MDUtMjgxNjApCisgIEJsb2NrIGJpdG1hcCBhdCAyNzkwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjc5MDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNzkwNy0yNzkxMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI3OTExLTI4MTYwCisgIEZyZWUgaW5vZGVzOiAzNDg5LTM1MjAKK0dyb3VwIDExMDogKEJsb2NrcyAyODE2MS0yODQxNikKKyAgQmxvY2sgYml0bWFwIGF0IDI4MTYxICgrMCksIElub2RlIGJpdG1hcCBhdCAyODE2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI4MTYzLTI4MTY2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjgxNjctMjg0MTYKKyAgRnJlZSBpbm9kZXM6IDM1MjEtMzU1MgorR3JvdXAgMTExOiAoQmxvY2tzIDI4NDE3LTI4NjcyKQorICBCbG9jayBiaXRtYXAgYXQgMjg0MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI4NDE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjg0MTktMjg0MjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyODQyMy0yODY3MgorICBGcmVlIGlub2RlczogMzU1My0zNTg0CitHcm91cCAxMTI6IChCbG9ja3MgMjg2NzMtMjg5MjgpCisgIEJsb2NrIGJpdG1hcCBhdCAyODY3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjg2NzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyODY3NS0yODY3OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI4Njc5LTI4OTI4CisgIEZyZWUgaW5vZGVzOiAzNTg1LTM2MTYKK0dyb3VwIDExMzogKEJsb2NrcyAyODkyOS0yOTE4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDI4OTI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyODkzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI4OTMxLTI4OTM0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjg5MzUtMjkxODQKKyAgRnJlZSBpbm9kZXM6IDM2MTctMzY0OAorR3JvdXAgMTE0OiAoQmxvY2tzIDI5MTg1LTI5NDQwKQorICBCbG9jayBiaXRtYXAgYXQgMjkxODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI5MTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjkxODctMjkxOTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyOTE5MS0yOTQ0MAorICBGcmVlIGlub2RlczogMzY0OS0zNjgwCitHcm91cCAxMTU6IChCbG9ja3MgMjk0NDEtMjk2OTYpCisgIEJsb2NrIGJpdG1hcCBhdCAyOTQ0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjk0NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyOTQ0My0yOTQ0NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI5NDQ3LTI5Njk2CisgIEZyZWUgaW5vZGVzOiAzNjgxLTM3MTIKK0dyb3VwIDExNjogKEJsb2NrcyAyOTY5Ny0yOTk1MikKKyAgQmxvY2sgYml0bWFwIGF0IDI5Njk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyOTY5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI5Njk5LTI5NzAyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjk3MDMtMjk5NTIKKyAgRnJlZSBpbm9kZXM6IDM3MTMtMzc0NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Jlc2l6ZTJmcyAtcCB0ZXN0LmltZyA0MDAwMAorUmVzaXppbmcgdGhlIGZpbGVzeXN0ZW0gb24gdGVzdC5pbWcgdG8gNDAwMDAgKDFrKSBibG9ja3MuCitCZWdpbiBwYXNzIDEgKG1heCA9IDQwKQorRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCitUaGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyBpcyBub3cgNDAwMDAgKDFrKSBibG9ja3MgbG9uZy4KKworRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvNTAyNCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIzNzYvNDAwMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitkdW1wZTJmcyB0ZXN0LmltZworRmlsZXN5c3RlbSB2b2x1bWUgbmFtZTogICA8bm9uZT4KK0xhc3QgbW91bnRlZCBvbjogICAgICAgICAgPG5vdCBhdmFpbGFibGU+CitGaWxlc3lzdGVtIG1hZ2ljIG51bWJlcjogIDB4RUY1MworRmlsZXN5c3RlbSByZXZpc2lvbiAjOiAgICAxIChkeW5hbWljKQorRmlsZXN5c3RlbSBmZWF0dXJlczogICAgICBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIHNwYXJzZV9zdXBlcgorRGVmYXVsdCBtb3VudCBvcHRpb25zOiAgICAobm9uZSkKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgQ29udGludWUKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgNTAyNAorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICA0MDAwMAorUmVzZXJ2ZWQgYmxvY2sgY291bnQ6ICAgICAxOTg4CitGcmVlIGJsb2NrczogICAgICAgICAgICAgIDM3NjI0CitGcmVlIGlub2RlczogICAgICAgICAgICAgIDUwMTMKK0ZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgMQorQmxvY2sgc2l6ZTogICAgICAgICAgICAgICAxMDI0CitGcmFnbWVudCBzaXplOiAgICAgICAgICAgIDEwMjQKK1Jlc2VydmVkIEdEVCBibG9ja3M6ICAgICAgMTIzCitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDI1NgorRnJhZ21lbnRzIHBlciBncm91cDogICAgICAyNTYKK0lub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgMzIKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgNAorTW91bnQgY291bnQ6ICAgICAgICAgICAgICAwCitDaGVjayBpbnRlcnZhbDogICAgICAgICAgIDE1NTUyMDAwICg2IG1vbnRocykKK1Jlc2VydmVkIGJsb2NrcyB1aWQ6ICAgICAgMAorUmVzZXJ2ZWQgYmxvY2tzIGdpZDogICAgICAwCitGaXJzdCBpbm9kZTogICAgICAgICAgICAgIDExCitJbm9kZSBzaXplOgkgICAgICAgICAgMTI4CitEZWZhdWx0IGRpcmVjdG9yeSBoYXNoOiAgIGhhbGZfbWQ0CisKKworR3JvdXAgMDogKEJsb2NrcyAxLTI1NikKKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDItNgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDctMTI5CisgIEJsb2NrIGJpdG1hcCBhdCAxMzAgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMTMxICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAxMzItMTM1ICgrMTMxKQorICAxMDcgZnJlZSBibG9ja3MsIDIxIGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTAtMjU2CisgIEZyZWUgaW5vZGVzOiAxMi0zMgorR3JvdXAgMTogKEJsb2NrcyAyNTctNTEyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyNTcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI1OC0yNjIKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyNjMtMzg1CisgIEJsb2NrIGJpdG1hcCBhdCAzODYgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMzg3ICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAzODgtMzkxICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzOTItNTEyCisgIEZyZWUgaW5vZGVzOiAzMy02NAorR3JvdXAgMjogKEJsb2NrcyA1MTMtNzY4KQorICBCbG9jayBiaXRtYXAgYXQgNTEzICgrMCksIElub2RlIGJpdG1hcCBhdCA1MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1MTUtNTE4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTE5LTc2OAorICBGcmVlIGlub2RlczogNjUtOTYKK0dyb3VwIDM6IChCbG9ja3MgNzY5LTEwMjQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDc2OSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNzcwLTc3NAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDc3NS04OTcKKyAgQmxvY2sgYml0bWFwIGF0IDg5OCAoKzEyOSksIElub2RlIGJpdG1hcCBhdCA4OTkgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDkwMC05MDMgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkwNC0xMDI0CisgIEZyZWUgaW5vZGVzOiA5Ny0xMjgKK0dyb3VwIDQ6IChCbG9ja3MgMTAyNS0xMjgwKQorICBCbG9jayBiaXRtYXAgYXQgMTAyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTAyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMjctMTAzMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMzEtMTI4MAorICBGcmVlIGlub2RlczogMTI5LTE2MAorR3JvdXAgNTogKEJsb2NrcyAxMjgxLTE1MzYpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDEyODEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEyODItMTI4NgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDEyODctMTQwOQorICBCbG9jayBiaXRtYXAgYXQgMTQxMCAoKzEyOSksIElub2RlIGJpdG1hcCBhdCAxNDExICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAxNDEyLTE0MTUgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0MTYtMTUzNgorICBGcmVlIGlub2RlczogMTYxLTE5MgorR3JvdXAgNjogKEJsb2NrcyAxNTM3LTE3OTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTUzOS0xNTQyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTU0My0xNzkyCisgIEZyZWUgaW5vZGVzOiAxOTMtMjI0CitHcm91cCA3OiAoQmxvY2tzIDE3OTMtMjA0OCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTc5MywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTc5NC0xNzk4CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTc5OS0xOTIxCisgIEJsb2NrIGJpdG1hcCBhdCAxOTIyICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDE5MjMgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDE5MjQtMTkyNyAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTkyOC0yMDQ4CisgIEZyZWUgaW5vZGVzOiAyMjUtMjU2CitHcm91cCA4OiAoQmxvY2tzIDIwNDktMjMwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDIwNDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIwNTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMDUxLTIwNTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDU1LTIzMDQKKyAgRnJlZSBpbm9kZXM6IDI1Ny0yODgKK0dyb3VwIDk6IChCbG9ja3MgMjMwNS0yNTYwKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyMzA1LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyMzA2LTIzMTAKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyMzExLTI0MzMKKyAgQmxvY2sgYml0bWFwIGF0IDI0MzQgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMjQzNSAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMjQzNi0yNDM5ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNDQwLTI1NjAKKyAgRnJlZSBpbm9kZXM6IDI4OS0zMjAKK0dyb3VwIDEwOiAoQmxvY2tzIDI1NjEtMjgxNikKKyAgQmxvY2sgYml0bWFwIGF0IDI1NjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI1NjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNTYzLTI1NjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNTY3LTI4MTYKKyAgRnJlZSBpbm9kZXM6IDMyMS0zNTIKK0dyb3VwIDExOiAoQmxvY2tzIDI4MTctMzA3MikKKyAgQmxvY2sgYml0bWFwIGF0IDI4MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI4MTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyODE5LTI4MjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyODIzLTMwNzIKKyAgRnJlZSBpbm9kZXM6IDM1My0zODQKK0dyb3VwIDEyOiAoQmxvY2tzIDMwNzMtMzMyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDMwNzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMwNzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMDc1LTMwNzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMDc5LTMzMjgKKyAgRnJlZSBpbm9kZXM6IDM4NS00MTYKK0dyb3VwIDEzOiAoQmxvY2tzIDMzMjktMzU4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDMzMjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMzMzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMzMxLTMzMzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMzM1LTM1ODQKKyAgRnJlZSBpbm9kZXM6IDQxNy00NDgKK0dyb3VwIDE0OiAoQmxvY2tzIDM1ODUtMzg0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDM1ODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM1ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNTg3LTM1OTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNTkxLTM4NDAKKyAgRnJlZSBpbm9kZXM6IDQ0OS00ODAKK0dyb3VwIDE1OiAoQmxvY2tzIDM4NDEtNDA5NikKKyAgQmxvY2sgYml0bWFwIGF0IDM4NDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM4NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzODQzLTM4NDYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzODQ3LTQwOTYKKyAgRnJlZSBpbm9kZXM6IDQ4MS01MTIKK0dyb3VwIDE2OiAoQmxvY2tzIDQwOTctNDM1MikKKyAgQmxvY2sgYml0bWFwIGF0IDQwOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQwOTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MDk5LTQxMDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MTAzLTQzNTIKKyAgRnJlZSBpbm9kZXM6IDUxMy01NDQKK0dyb3VwIDE3OiAoQmxvY2tzIDQzNTMtNDYwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDQzNTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQzNTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MzU1LTQzNTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MzU5LTQ2MDgKKyAgRnJlZSBpbm9kZXM6IDU0NS01NzYKK0dyb3VwIDE4OiAoQmxvY2tzIDQ2MDktNDg2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ2MDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ2MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0NjExLTQ2MTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NjE1LTQ4NjQKKyAgRnJlZSBpbm9kZXM6IDU3Ny02MDgKK0dyb3VwIDE5OiAoQmxvY2tzIDQ4NjUtNTEyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ4NjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ4NjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0ODY3LTQ4NzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0ODcxLTUxMjAKKyAgRnJlZSBpbm9kZXM6IDYwOS02NDAKK0dyb3VwIDIwOiAoQmxvY2tzIDUxMjEtNTM3NikKKyAgQmxvY2sgYml0bWFwIGF0IDUxMjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDUxMjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1MTIzLTUxMjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MTI3LTUzNzYKKyAgRnJlZSBpbm9kZXM6IDY0MS02NzIKK0dyb3VwIDIxOiAoQmxvY2tzIDUzNzctNTYzMikKKyAgQmxvY2sgYml0bWFwIGF0IDUzNzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDUzNzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1Mzc5LTUzODIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MzgzLTU2MzIKKyAgRnJlZSBpbm9kZXM6IDY3My03MDQKK0dyb3VwIDIyOiAoQmxvY2tzIDU2MzMtNTg4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDU2MzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU2MzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1NjM1LTU2MzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NjM5LTU4ODgKKyAgRnJlZSBpbm9kZXM6IDcwNS03MzYKK0dyb3VwIDIzOiAoQmxvY2tzIDU4ODktNjE0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDU4ODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU4OTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1ODkxLTU4OTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1ODk1LTYxNDQKKyAgRnJlZSBpbm9kZXM6IDczNy03NjgKK0dyb3VwIDI0OiAoQmxvY2tzIDYxNDUtNjQwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDYxNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYxNDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MTQ3LTYxNTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MTUxLTY0MDAKKyAgRnJlZSBpbm9kZXM6IDc2OS04MDAKK0dyb3VwIDI1OiAoQmxvY2tzIDY0MDEtNjY1NikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNjQwMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNjQwMi02NDA2CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNjQwNy02NTI5CisgIEJsb2NrIGJpdG1hcCBhdCA2NTMwICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDY1MzEgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDY1MzItNjUzNSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjUzNi02NjU2CisgIEZyZWUgaW5vZGVzOiA4MDEtODMyCitHcm91cCAyNjogKEJsb2NrcyA2NjU3LTY5MTIpCisgIEJsb2NrIGJpdG1hcCBhdCA2NjU3ICgrMCksIElub2RlIGJpdG1hcCBhdCA2NjU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjY1OS02NjYyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjY2My02OTEyCisgIEZyZWUgaW5vZGVzOiA4MzMtODY0CitHcm91cCAyNzogKEJsb2NrcyA2OTEzLTcxNjgpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDY5MTMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDY5MTQtNjkxOAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDY5MTktNzA0MQorICBCbG9jayBiaXRtYXAgYXQgNzA0MiAoKzEyOSksIElub2RlIGJpdG1hcCBhdCA3MDQzICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCA3MDQ0LTcwNDcgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcwNDgtNzE2OAorICBGcmVlIGlub2RlczogODY1LTg5NgorR3JvdXAgMjg6IChCbG9ja3MgNzE2OS03NDI0KQorICBCbG9jayBiaXRtYXAgYXQgNzE2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzE3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDcxNzEtNzE3NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcxNzUtNzQyNAorICBGcmVlIGlub2RlczogODk3LTkyOAorR3JvdXAgMjk6IChCbG9ja3MgNzQyNS03NjgwKQorICBCbG9jayBiaXRtYXAgYXQgNzQyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzQyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc0MjctNzQzMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc0MzEtNzY4MAorICBGcmVlIGlub2RlczogOTI5LTk2MAorR3JvdXAgMzA6IChCbG9ja3MgNzY4MS03OTM2KQorICBCbG9jayBiaXRtYXAgYXQgNzY4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzY4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc2ODMtNzY4NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc2ODctNzkzNgorICBGcmVlIGlub2RlczogOTYxLTk5MgorR3JvdXAgMzE6IChCbG9ja3MgNzkzNy04MTkyKQorICBCbG9jayBiaXRtYXAgYXQgNzkzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzkzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc5MzktNzk0MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc5NDMtODE5MgorICBGcmVlIGlub2RlczogOTkzLTEwMjQKK0dyb3VwIDMyOiAoQmxvY2tzIDgxOTMtODQ0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDgxOTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDgxOTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4MTk1LTgxOTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4MTk5LTg0NDgKKyAgRnJlZSBpbm9kZXM6IDEwMjUtMTA1NgorR3JvdXAgMzM6IChCbG9ja3MgODQ0OS04NzA0KQorICBCbG9jayBiaXRtYXAgYXQgODQ0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODQ1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg0NTEtODQ1NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg0NTUtODcwNAorICBGcmVlIGlub2RlczogMTA1Ny0xMDg4CitHcm91cCAzNDogKEJsb2NrcyA4NzA1LTg5NjApCisgIEJsb2NrIGJpdG1hcCBhdCA4NzA1ICgrMCksIElub2RlIGJpdG1hcCBhdCA4NzA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODcwNy04NzEwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODcxMS04OTYwCisgIEZyZWUgaW5vZGVzOiAxMDg5LTExMjAKK0dyb3VwIDM1OiAoQmxvY2tzIDg5NjEtOTIxNikKKyAgQmxvY2sgYml0bWFwIGF0IDg5NjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg5NjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4OTYzLTg5NjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4OTY3LTkyMTYKKyAgRnJlZSBpbm9kZXM6IDExMjEtMTE1MgorR3JvdXAgMzY6IChCbG9ja3MgOTIxNy05NDcyKQorICBCbG9jayBiaXRtYXAgYXQgOTIxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTIxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDkyMTktOTIyMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkyMjMtOTQ3MgorICBGcmVlIGlub2RlczogMTE1My0xMTg0CitHcm91cCAzNzogKEJsb2NrcyA5NDczLTk3MjgpCisgIEJsb2NrIGJpdG1hcCBhdCA5NDczICgrMCksIElub2RlIGJpdG1hcCBhdCA5NDc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTQ3NS05NDc4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTQ3OS05NzI4CisgIEZyZWUgaW5vZGVzOiAxMTg1LTEyMTYKK0dyb3VwIDM4OiAoQmxvY2tzIDk3MjktOTk4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDk3MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk3MzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5NzMxLTk3MzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NzM1LTk5ODQKKyAgRnJlZSBpbm9kZXM6IDEyMTctMTI0OAorR3JvdXAgMzk6IChCbG9ja3MgOTk4NS0xMDI0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDk5ODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk5ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5OTg3LTk5OTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5OTkxLTEwMjQwCisgIEZyZWUgaW5vZGVzOiAxMjQ5LTEyODAKK0dyb3VwIDQwOiAoQmxvY2tzIDEwMjQxLTEwNDk2KQorICBCbG9jayBiaXRtYXAgYXQgMTAyNDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMjQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAyNDMtMTAyNDYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDI0Ny0xMDQ5NgorICBGcmVlIGlub2RlczogMTI4MS0xMzEyCitHcm91cCA0MTogKEJsb2NrcyAxMDQ5Ny0xMDc1MikKKyAgQmxvY2sgYml0bWFwIGF0IDEwNDk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDQ5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwNDk5LTEwNTAyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA1MDMtMTA3NTIKKyAgRnJlZSBpbm9kZXM6IDEzMTMtMTM0NAorR3JvdXAgNDI6IChCbG9ja3MgMTA3NTMtMTEwMDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDc1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA3NTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDc1NS0xMDc1OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwNzU5LTExMDA4CisgIEZyZWUgaW5vZGVzOiAxMzQ1LTEzNzYKK0dyb3VwIDQzOiAoQmxvY2tzIDExMDA5LTExMjY0KQorICBCbG9jayBiaXRtYXAgYXQgMTEwMDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExMDEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTEwMTEtMTEwMTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTAxNS0xMTI2NAorICBGcmVlIGlub2RlczogMTM3Ny0xNDA4CitHcm91cCA0NDogKEJsb2NrcyAxMTI2NS0xMTUyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDExMjY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTI2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExMjY3LTExMjcwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEyNzEtMTE1MjAKKyAgRnJlZSBpbm9kZXM6IDE0MDktMTQ0MAorR3JvdXAgNDU6IChCbG9ja3MgMTE1MjEtMTE3NzYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTUyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE1MjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTUyMy0xMTUyNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExNTI3LTExNzc2CisgIEZyZWUgaW5vZGVzOiAxNDQxLTE0NzIKK0dyb3VwIDQ2OiAoQmxvY2tzIDExNzc3LTEyMDMyKQorICBCbG9jayBiaXRtYXAgYXQgMTE3NzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExNzc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE3NzktMTE3ODIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTc4My0xMjAzMgorICBGcmVlIGlub2RlczogMTQ3My0xNTA0CitHcm91cCA0NzogKEJsb2NrcyAxMjAzMy0xMjI4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDEyMDMzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjAzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyMDM1LTEyMDM4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIwMzktMTIyODgKKyAgRnJlZSBpbm9kZXM6IDE1MDUtMTUzNgorR3JvdXAgNDg6IChCbG9ja3MgMTIyODktMTI1NDQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjI4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIyOTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjI5MS0xMjI5NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMjk1LTEyNTQ0CisgIEZyZWUgaW5vZGVzOiAxNTM3LTE1NjgKK0dyb3VwIDQ5OiAoQmxvY2tzIDEyNTQ1LTEyODAwKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxMjU0NSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTI1NDYtMTI1NTAKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAxMjU1MS0xMjY3MworICBCbG9jayBiaXRtYXAgYXQgMTI2NzQgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMTI2NzUgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDEyNjc2LTEyNjc5ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjY4MC0xMjgwMAorICBGcmVlIGlub2RlczogMTU2OS0xNjAwCitHcm91cCA1MDogKEJsb2NrcyAxMjgwMS0xMzA1NikKKyAgQmxvY2sgYml0bWFwIGF0IDEyODAxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjgwMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyODAzLTEyODA2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI4MDctMTMwNTYKKyAgRnJlZSBpbm9kZXM6IDE2MDEtMTYzMgorR3JvdXAgNTE6IChCbG9ja3MgMTMwNTctMTMzMTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMzA1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTMwNTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzA1OS0xMzA2MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzMDYzLTEzMzEyCisgIEZyZWUgaW5vZGVzOiAxNjMzLTE2NjQKK0dyb3VwIDUyOiAoQmxvY2tzIDEzMzEzLTEzNTY4KQorICBCbG9jayBiaXRtYXAgYXQgMTMzMTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzMzE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMzMTUtMTMzMTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzMxOS0xMzU2OAorICBGcmVlIGlub2RlczogMTY2NS0xNjk2CitHcm91cCA1MzogKEJsb2NrcyAxMzU2OS0xMzgyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDEzNTY5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzU3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzNTcxLTEzNTc0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTM1NzUtMTM4MjQKKyAgRnJlZSBpbm9kZXM6IDE2OTctMTcyOAorR3JvdXAgNTQ6IChCbG9ja3MgMTM4MjUtMTQwODApCisgIEJsb2NrIGJpdG1hcCBhdCAxMzgyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTM4MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzgyNy0xMzgzMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzODMxLTE0MDgwCisgIEZyZWUgaW5vZGVzOiAxNzI5LTE3NjAKK0dyb3VwIDU1OiAoQmxvY2tzIDE0MDgxLTE0MzM2KQorICBCbG9jayBiaXRtYXAgYXQgMTQwODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0MDgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQwODMtMTQwODYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDA4Ny0xNDMzNgorICBGcmVlIGlub2RlczogMTc2MS0xNzkyCitHcm91cCA1NjogKEJsb2NrcyAxNDMzNy0xNDU5MikKKyAgQmxvY2sgYml0bWFwIGF0IDE0MzM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDMzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0MzM5LTE0MzQyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQzNDMtMTQ1OTIKKyAgRnJlZSBpbm9kZXM6IDE3OTMtMTgyNAorR3JvdXAgNTc6IChCbG9ja3MgMTQ1OTMtMTQ4NDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxNDU5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQ1OTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDU5NS0xNDU5OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0NTk5LTE0ODQ4CisgIEZyZWUgaW5vZGVzOiAxODI1LTE4NTYKK0dyb3VwIDU4OiAoQmxvY2tzIDE0ODQ5LTE1MTA0KQorICBCbG9jayBiaXRtYXAgYXQgMTQ4NDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0ODUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQ4NTEtMTQ4NTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDg1NS0xNTEwNAorICBGcmVlIGlub2RlczogMTg1Ny0xODg4CitHcm91cCA1OTogKEJsb2NrcyAxNTEwNS0xNTM2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDE1MTA1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTEwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1MTA3LTE1MTEwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTUxMTEtMTUzNjAKKyAgRnJlZSBpbm9kZXM6IDE4ODktMTkyMAorR3JvdXAgNjA6IChCbG9ja3MgMTUzNjEtMTU2MTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTM2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTUzNjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTM2My0xNTM2NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1MzY3LTE1NjE2CisgIEZyZWUgaW5vZGVzOiAxOTIxLTE5NTIKK0dyb3VwIDYxOiAoQmxvY2tzIDE1NjE3LTE1ODcyKQorICBCbG9jayBiaXRtYXAgYXQgMTU2MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1NjE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTU2MTktMTU2MjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTYyMy0xNTg3MgorICBGcmVlIGlub2RlczogMTk1My0xOTg0CitHcm91cCA2MjogKEJsb2NrcyAxNTg3My0xNjEyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDE1ODczICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTg3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1ODc1LTE1ODc4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTU4NzktMTYxMjgKKyAgRnJlZSBpbm9kZXM6IDE5ODUtMjAxNgorR3JvdXAgNjM6IChCbG9ja3MgMTYxMjktMTYzODQpCisgIEJsb2NrIGJpdG1hcCBhdCAxNjEyOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTYxMzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjEzMS0xNjEzNCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE2MTM1LTE2Mzg0CisgIEZyZWUgaW5vZGVzOiAyMDE3LTIwNDgKK0dyb3VwIDY0OiAoQmxvY2tzIDE2Mzg1LTE2NjQwKQorICBCbG9jayBiaXRtYXAgYXQgMTYzODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2Mzg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTYzODctMTYzOTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjM5MS0xNjY0MAorICBGcmVlIGlub2RlczogMjA0OS0yMDgwCitHcm91cCA2NTogKEJsb2NrcyAxNjY0MS0xNjg5NikKKyAgQmxvY2sgYml0bWFwIGF0IDE2NjQxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNjY0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE2NjQzLTE2NjQ2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTY2NDctMTY4OTYKKyAgRnJlZSBpbm9kZXM6IDIwODEtMjExMgorR3JvdXAgNjY6IChCbG9ja3MgMTY4OTctMTcxNTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxNjg5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTY4OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjg5OS0xNjkwMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE2OTAzLTE3MTUyCisgIEZyZWUgaW5vZGVzOiAyMTEzLTIxNDQKK0dyb3VwIDY3OiAoQmxvY2tzIDE3MTUzLTE3NDA4KQorICBCbG9jayBiaXRtYXAgYXQgMTcxNTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE3MTU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTcxNTUtMTcxNTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNzE1OS0xNzQwOAorICBGcmVlIGlub2RlczogMjE0NS0yMTc2CitHcm91cCA2ODogKEJsb2NrcyAxNzQwOS0xNzY2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDE3NDA5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNzQxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE3NDExLTE3NDE0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTc0MTUtMTc2NjQKKyAgRnJlZSBpbm9kZXM6IDIxNzctMjIwOAorR3JvdXAgNjk6IChCbG9ja3MgMTc2NjUtMTc5MjApCisgIEJsb2NrIGJpdG1hcCBhdCAxNzY2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTc2NjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNzY2Ny0xNzY3MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE3NjcxLTE3OTIwCisgIEZyZWUgaW5vZGVzOiAyMjA5LTIyNDAKK0dyb3VwIDcwOiAoQmxvY2tzIDE3OTIxLTE4MTc2KQorICBCbG9jayBiaXRtYXAgYXQgMTc5MjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE3OTIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTc5MjMtMTc5MjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNzkyNy0xODE3NgorICBGcmVlIGlub2RlczogMjI0MS0yMjcyCitHcm91cCA3MTogKEJsb2NrcyAxODE3Ny0xODQzMikKKyAgQmxvY2sgYml0bWFwIGF0IDE4MTc3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxODE3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE4MTc5LTE4MTgyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTgxODMtMTg0MzIKKyAgRnJlZSBpbm9kZXM6IDIyNzMtMjMwNAorR3JvdXAgNzI6IChCbG9ja3MgMTg0MzMtMTg2ODgpCisgIEJsb2NrIGJpdG1hcCBhdCAxODQzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTg0MzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxODQzNS0xODQzOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE4NDM5LTE4Njg4CisgIEZyZWUgaW5vZGVzOiAyMzA1LTIzMzYKK0dyb3VwIDczOiAoQmxvY2tzIDE4Njg5LTE4OTQ0KQorICBCbG9jayBiaXRtYXAgYXQgMTg2ODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE4NjkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTg2OTEtMTg2OTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxODY5NS0xODk0NAorICBGcmVlIGlub2RlczogMjMzNy0yMzY4CitHcm91cCA3NDogKEJsb2NrcyAxODk0NS0xOTIwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDE4OTQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxODk0NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE4OTQ3LTE4OTUwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTg5NTEtMTkyMDAKKyAgRnJlZSBpbm9kZXM6IDIzNjktMjQwMAorR3JvdXAgNzU6IChCbG9ja3MgMTkyMDEtMTk0NTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxOTIwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTkyMDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxOTIwMy0xOTIwNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE5MjA3LTE5NDU2CisgIEZyZWUgaW5vZGVzOiAyNDAxLTI0MzIKK0dyb3VwIDc2OiAoQmxvY2tzIDE5NDU3LTE5NzEyKQorICBCbG9jayBiaXRtYXAgYXQgMTk0NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE5NDU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTk0NTktMTk0NjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxOTQ2My0xOTcxMgorICBGcmVlIGlub2RlczogMjQzMy0yNDY0CitHcm91cCA3NzogKEJsb2NrcyAxOTcxMy0xOTk2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDE5NzEzICgrMCksIElub2RlIGJpdG1hcCBhdCAxOTcxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE5NzE1LTE5NzE4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTk3MTktMTk5NjgKKyAgRnJlZSBpbm9kZXM6IDI0NjUtMjQ5NgorR3JvdXAgNzg6IChCbG9ja3MgMTk5NjktMjAyMjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxOTk2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTk5NzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxOTk3MS0xOTk3NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE5OTc1LTIwMjI0CisgIEZyZWUgaW5vZGVzOiAyNDk3LTI1MjgKK0dyb3VwIDc5OiAoQmxvY2tzIDIwMjI1LTIwNDgwKQorICBCbG9jayBiaXRtYXAgYXQgMjAyMjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIwMjI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjAyMjctMjAyMzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDIzMS0yMDQ4MAorICBGcmVlIGlub2RlczogMjUyOS0yNTYwCitHcm91cCA4MDogKEJsb2NrcyAyMDQ4MS0yMDczNikKKyAgQmxvY2sgYml0bWFwIGF0IDIwNDgxICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDQ4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIwNDgzLTIwNDg2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA0ODctMjA3MzYKKyAgRnJlZSBpbm9kZXM6IDI1NjEtMjU5MgorR3JvdXAgODE6IChCbG9ja3MgMjA3MzctMjA5OTIpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDIwNzM3LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyMDczOC0yMDc0MgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDIwNzQzLTIwODY1CisgIEJsb2NrIGJpdG1hcCBhdCAyMDg2NiAoKzEyOSksIElub2RlIGJpdG1hcCBhdCAyMDg2NyAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMjA4NjgtMjA4NzEgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIwODcyLTIwOTkyCisgIEZyZWUgaW5vZGVzOiAyNTkzLTI2MjQKK0dyb3VwIDgyOiAoQmxvY2tzIDIwOTkzLTIxMjQ4KQorICBCbG9jayBiaXRtYXAgYXQgMjA5OTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIwOTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjA5OTUtMjA5OTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDk5OS0yMTI0OAorICBGcmVlIGlub2RlczogMjYyNS0yNjU2CitHcm91cCA4MzogKEJsb2NrcyAyMTI0OS0yMTUwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDIxMjQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMTI1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIxMjUxLTIxMjU0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjEyNTUtMjE1MDQKKyAgRnJlZSBpbm9kZXM6IDI2NTctMjY4OAorR3JvdXAgODQ6IChCbG9ja3MgMjE1MDUtMjE3NjApCisgIEJsb2NrIGJpdG1hcCBhdCAyMTUwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjE1MDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMTUwNy0yMTUxMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIxNTExLTIxNzYwCisgIEZyZWUgaW5vZGVzOiAyNjg5LTI3MjAKK0dyb3VwIDg1OiAoQmxvY2tzIDIxNzYxLTIyMDE2KQorICBCbG9jayBiaXRtYXAgYXQgMjE3NjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIxNzYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjE3NjMtMjE3NjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMTc2Ny0yMjAxNgorICBGcmVlIGlub2RlczogMjcyMS0yNzUyCitHcm91cCA4NjogKEJsb2NrcyAyMjAxNy0yMjI3MikKKyAgQmxvY2sgYml0bWFwIGF0IDIyMDE3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMjAxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIyMDE5LTIyMDIyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjIwMjMtMjIyNzIKKyAgRnJlZSBpbm9kZXM6IDI3NTMtMjc4NAorR3JvdXAgODc6IChCbG9ja3MgMjIyNzMtMjI1MjgpCisgIEJsb2NrIGJpdG1hcCBhdCAyMjI3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjIyNzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMjI3NS0yMjI3OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIyMjc5LTIyNTI4CisgIEZyZWUgaW5vZGVzOiAyNzg1LTI4MTYKK0dyb3VwIDg4OiAoQmxvY2tzIDIyNTI5LTIyNzg0KQorICBCbG9jayBiaXRtYXAgYXQgMjI1MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIyNTMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjI1MzEtMjI1MzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMjUzNS0yMjc4NAorICBGcmVlIGlub2RlczogMjgxNy0yODQ4CitHcm91cCA4OTogKEJsb2NrcyAyMjc4NS0yMzA0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDIyNzg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMjc4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIyNzg3LTIyNzkwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjI3OTEtMjMwNDAKKyAgRnJlZSBpbm9kZXM6IDI4NDktMjg4MAorR3JvdXAgOTA6IChCbG9ja3MgMjMwNDEtMjMyOTYpCisgIEJsb2NrIGJpdG1hcCBhdCAyMzA0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjMwNDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMzA0My0yMzA0NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIzMDQ3LTIzMjk2CisgIEZyZWUgaW5vZGVzOiAyODgxLTI5MTIKK0dyb3VwIDkxOiAoQmxvY2tzIDIzMjk3LTIzNTUyKQorICBCbG9jayBiaXRtYXAgYXQgMjMyOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIzMjk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjMyOTktMjMzMDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMzMwMy0yMzU1MgorICBGcmVlIGlub2RlczogMjkxMy0yOTQ0CitHcm91cCA5MjogKEJsb2NrcyAyMzU1My0yMzgwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDIzNTUzICgrMCksIElub2RlIGJpdG1hcCBhdCAyMzU1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIzNTU1LTIzNTU4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjM1NTktMjM4MDgKKyAgRnJlZSBpbm9kZXM6IDI5NDUtMjk3NgorR3JvdXAgOTM6IChCbG9ja3MgMjM4MDktMjQwNjQpCisgIEJsb2NrIGJpdG1hcCBhdCAyMzgwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjM4MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMzgxMS0yMzgxNCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIzODE1LTI0MDY0CisgIEZyZWUgaW5vZGVzOiAyOTc3LTMwMDgKK0dyb3VwIDk0OiAoQmxvY2tzIDI0MDY1LTI0MzIwKQorICBCbG9jayBiaXRtYXAgYXQgMjQwNjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI0MDY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjQwNjctMjQwNzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNDA3MS0yNDMyMAorICBGcmVlIGlub2RlczogMzAwOS0zMDQwCitHcm91cCA5NTogKEJsb2NrcyAyNDMyMS0yNDU3NikKKyAgQmxvY2sgYml0bWFwIGF0IDI0MzIxICgrMCksIElub2RlIGJpdG1hcCBhdCAyNDMyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI0MzIzLTI0MzI2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjQzMjctMjQ1NzYKKyAgRnJlZSBpbm9kZXM6IDMwNDEtMzA3MgorR3JvdXAgOTY6IChCbG9ja3MgMjQ1NzctMjQ4MzIpCisgIEJsb2NrIGJpdG1hcCBhdCAyNDU3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjQ1NzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNDU3OS0yNDU4MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI0NTgzLTI0ODMyCisgIEZyZWUgaW5vZGVzOiAzMDczLTMxMDQKK0dyb3VwIDk3OiAoQmxvY2tzIDI0ODMzLTI1MDg4KQorICBCbG9jayBiaXRtYXAgYXQgMjQ4MzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI0ODM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjQ4MzUtMjQ4MzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNDgzOS0yNTA4OAorICBGcmVlIGlub2RlczogMzEwNS0zMTM2CitHcm91cCA5ODogKEJsb2NrcyAyNTA4OS0yNTM0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDI1MDg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNTA5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI1MDkxLTI1MDk0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjUwOTUtMjUzNDQKKyAgRnJlZSBpbm9kZXM6IDMxMzctMzE2OAorR3JvdXAgOTk6IChCbG9ja3MgMjUzNDUtMjU2MDApCisgIEJsb2NrIGJpdG1hcCBhdCAyNTM0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjUzNDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNTM0Ny0yNTM1MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1MzUxLTI1NjAwCisgIEZyZWUgaW5vZGVzOiAzMTY5LTMyMDAKK0dyb3VwIDEwMDogKEJsb2NrcyAyNTYwMS0yNTg1NikKKyAgQmxvY2sgYml0bWFwIGF0IDI1NjAxICgrMCksIElub2RlIGJpdG1hcCBhdCAyNTYwMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI1NjAzLTI1NjA2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjU2MDctMjU4NTYKKyAgRnJlZSBpbm9kZXM6IDMyMDEtMzIzMgorR3JvdXAgMTAxOiAoQmxvY2tzIDI1ODU3LTI2MTEyKQorICBCbG9jayBiaXRtYXAgYXQgMjU4NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI1ODU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjU4NTktMjU4NjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNTg2My0yNjExMgorICBGcmVlIGlub2RlczogMzIzMy0zMjY0CitHcm91cCAxMDI6IChCbG9ja3MgMjYxMTMtMjYzNjgpCisgIEJsb2NrIGJpdG1hcCBhdCAyNjExMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjYxMTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNjExNS0yNjExOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI2MTE5LTI2MzY4CisgIEZyZWUgaW5vZGVzOiAzMjY1LTMyOTYKK0dyb3VwIDEwMzogKEJsb2NrcyAyNjM2OS0yNjYyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDI2MzY5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNjM3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI2MzcxLTI2Mzc0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjYzNzUtMjY2MjQKKyAgRnJlZSBpbm9kZXM6IDMyOTctMzMyOAorR3JvdXAgMTA0OiAoQmxvY2tzIDI2NjI1LTI2ODgwKQorICBCbG9jayBiaXRtYXAgYXQgMjY2MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI2NjI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjY2MjctMjY2MzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNjYzMS0yNjg4MAorICBGcmVlIGlub2RlczogMzMyOS0zMzYwCitHcm91cCAxMDU6IChCbG9ja3MgMjY4ODEtMjcxMzYpCisgIEJsb2NrIGJpdG1hcCBhdCAyNjg4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjY4ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNjg4My0yNjg4NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI2ODg3LTI3MTM2CisgIEZyZWUgaW5vZGVzOiAzMzYxLTMzOTIKK0dyb3VwIDEwNjogKEJsb2NrcyAyNzEzNy0yNzM5MikKKyAgQmxvY2sgYml0bWFwIGF0IDI3MTM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNzEzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI3MTM5LTI3MTQyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjcxNDMtMjczOTIKKyAgRnJlZSBpbm9kZXM6IDMzOTMtMzQyNAorR3JvdXAgMTA3OiAoQmxvY2tzIDI3MzkzLTI3NjQ4KQorICBCbG9jayBiaXRtYXAgYXQgMjczOTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI3Mzk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjczOTUtMjczOTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNzM5OS0yNzY0OAorICBGcmVlIGlub2RlczogMzQyNS0zNDU2CitHcm91cCAxMDg6IChCbG9ja3MgMjc2NDktMjc5MDQpCisgIEJsb2NrIGJpdG1hcCBhdCAyNzY0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjc2NTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNzY1MS0yNzY1NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI3NjU1LTI3OTA0CisgIEZyZWUgaW5vZGVzOiAzNDU3LTM0ODgKK0dyb3VwIDEwOTogKEJsb2NrcyAyNzkwNS0yODE2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDI3OTA1ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNzkwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI3OTA3LTI3OTEwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjc5MTEtMjgxNjAKKyAgRnJlZSBpbm9kZXM6IDM0ODktMzUyMAorR3JvdXAgMTEwOiAoQmxvY2tzIDI4MTYxLTI4NDE2KQorICBCbG9jayBiaXRtYXAgYXQgMjgxNjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI4MTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjgxNjMtMjgxNjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyODE2Ny0yODQxNgorICBGcmVlIGlub2RlczogMzUyMS0zNTUyCitHcm91cCAxMTE6IChCbG9ja3MgMjg0MTctMjg2NzIpCisgIEJsb2NrIGJpdG1hcCBhdCAyODQxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjg0MTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyODQxOS0yODQyMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI4NDIzLTI4NjcyCisgIEZyZWUgaW5vZGVzOiAzNTUzLTM1ODQKK0dyb3VwIDExMjogKEJsb2NrcyAyODY3My0yODkyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDI4NjczICgrMCksIElub2RlIGJpdG1hcCBhdCAyODY3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI4Njc1LTI4Njc4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjg2NzktMjg5MjgKKyAgRnJlZSBpbm9kZXM6IDM1ODUtMzYxNgorR3JvdXAgMTEzOiAoQmxvY2tzIDI4OTI5LTI5MTg0KQorICBCbG9jayBiaXRtYXAgYXQgMjg5MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI4OTMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjg5MzEtMjg5MzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyODkzNS0yOTE4NAorICBGcmVlIGlub2RlczogMzYxNy0zNjQ4CitHcm91cCAxMTQ6IChCbG9ja3MgMjkxODUtMjk0NDApCisgIEJsb2NrIGJpdG1hcCBhdCAyOTE4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjkxODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyOTE4Ny0yOTE5MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI5MTkxLTI5NDQwCisgIEZyZWUgaW5vZGVzOiAzNjQ5LTM2ODAKK0dyb3VwIDExNTogKEJsb2NrcyAyOTQ0MS0yOTY5NikKKyAgQmxvY2sgYml0bWFwIGF0IDI5NDQxICgrMCksIElub2RlIGJpdG1hcCBhdCAyOTQ0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI5NDQzLTI5NDQ2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjk0NDctMjk2OTYKKyAgRnJlZSBpbm9kZXM6IDM2ODEtMzcxMgorR3JvdXAgMTE2OiAoQmxvY2tzIDI5Njk3LTI5OTUyKQorICBCbG9jayBiaXRtYXAgYXQgMjk2OTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI5Njk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjk2OTktMjk3MDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyOTcwMy0yOTk1MgorICBGcmVlIGlub2RlczogMzcxMy0zNzQ0CitHcm91cCAxMTc6IChCbG9ja3MgMjk5NTMtMzAyMDgpCisgIEJsb2NrIGJpdG1hcCBhdCAyOTk1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjk5NTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyOTk1NS0yOTk1OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI5OTU5LTMwMjA4CisgIEZyZWUgaW5vZGVzOiAzNzQ1LTM3NzYKK0dyb3VwIDExODogKEJsb2NrcyAzMDIwOS0zMDQ2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDMwMjA5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMDIxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMwMjExLTMwMjE0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzAyMTUtMzA0NjQKKyAgRnJlZSBpbm9kZXM6IDM3NzctMzgwOAorR3JvdXAgMTE5OiAoQmxvY2tzIDMwNDY1LTMwNzIwKQorICBCbG9jayBiaXRtYXAgYXQgMzA0NjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMwNDY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzA0NjctMzA0NzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMDQ3MS0zMDcyMAorICBGcmVlIGlub2RlczogMzgwOS0zODQwCitHcm91cCAxMjA6IChCbG9ja3MgMzA3MjEtMzA5NzYpCisgIEJsb2NrIGJpdG1hcCBhdCAzMDcyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzA3MjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMDcyMy0zMDcyNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMwNzI3LTMwOTc2CisgIEZyZWUgaW5vZGVzOiAzODQxLTM4NzIKK0dyb3VwIDEyMTogKEJsb2NrcyAzMDk3Ny0zMTIzMikKKyAgQmxvY2sgYml0bWFwIGF0IDMwOTc3ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMDk3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMwOTc5LTMwOTgyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzA5ODMtMzEyMzIKKyAgRnJlZSBpbm9kZXM6IDM4NzMtMzkwNAorR3JvdXAgMTIyOiAoQmxvY2tzIDMxMjMzLTMxNDg4KQorICBCbG9jayBiaXRtYXAgYXQgMzEyMzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMxMjM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzEyMzUtMzEyMzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMTIzOS0zMTQ4OAorICBGcmVlIGlub2RlczogMzkwNS0zOTM2CitHcm91cCAxMjM6IChCbG9ja3MgMzE0ODktMzE3NDQpCisgIEJsb2NrIGJpdG1hcCBhdCAzMTQ4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzE0OTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMTQ5MS0zMTQ5NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMxNDk1LTMxNzQ0CisgIEZyZWUgaW5vZGVzOiAzOTM3LTM5NjgKK0dyb3VwIDEyNDogKEJsb2NrcyAzMTc0NS0zMjAwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDMxNzQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMTc0NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMxNzQ3LTMxNzUwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzE3NTEtMzIwMDAKKyAgRnJlZSBpbm9kZXM6IDM5NjktNDAwMAorR3JvdXAgMTI1OiAoQmxvY2tzIDMyMDAxLTMyMjU2KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAzMjAwMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMzIwMDItMzIwMDYKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAzMjAwNy0zMjEyOQorICBCbG9jayBiaXRtYXAgYXQgMzIxMzAgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMzIxMzEgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDMyMTMyLTMyMTM1ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMjEzNi0zMjI1NgorICBGcmVlIGlub2RlczogNDAwMS00MDMyCitHcm91cCAxMjY6IChCbG9ja3MgMzIyNTctMzI1MTIpCisgIEJsb2NrIGJpdG1hcCBhdCAzMjI1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzIyNTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMjI1OS0zMjI2MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMyMjYzLTMyNTEyCisgIEZyZWUgaW5vZGVzOiA0MDMzLTQwNjQKK0dyb3VwIDEyNzogKEJsb2NrcyAzMjUxMy0zMjc2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDMyNTEzICgrMCksIElub2RlIGJpdG1hcCBhdCAzMjUxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMyNTE1LTMyNTE4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzI1MTktMzI3NjgKKyAgRnJlZSBpbm9kZXM6IDQwNjUtNDA5NgorR3JvdXAgMTI4OiAoQmxvY2tzIDMyNzY5LTMzMDI0KQorICBCbG9jayBiaXRtYXAgYXQgMzI3NjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMyNzcwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzI3NzEtMzI3NzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMjc3NS0zMzAyNAorICBGcmVlIGlub2RlczogNDA5Ny00MTI4CitHcm91cCAxMjk6IChCbG9ja3MgMzMwMjUtMzMyODApCisgIEJsb2NrIGJpdG1hcCBhdCAzMzAyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzMwMjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMzAyNy0zMzAzMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMzMDMxLTMzMjgwCisgIEZyZWUgaW5vZGVzOiA0MTI5LTQxNjAKK0dyb3VwIDEzMDogKEJsb2NrcyAzMzI4MS0zMzUzNikKKyAgQmxvY2sgYml0bWFwIGF0IDMzMjgxICgrMCksIElub2RlIGJpdG1hcCBhdCAzMzI4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMzMjgzLTMzMjg2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzMyODctMzM1MzYKKyAgRnJlZSBpbm9kZXM6IDQxNjEtNDE5MgorR3JvdXAgMTMxOiAoQmxvY2tzIDMzNTM3LTMzNzkyKQorICBCbG9jayBiaXRtYXAgYXQgMzM1MzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMzNTM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzM1MzktMzM1NDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMzU0My0zMzc5MgorICBGcmVlIGlub2RlczogNDE5My00MjI0CitHcm91cCAxMzI6IChCbG9ja3MgMzM3OTMtMzQwNDgpCisgIEJsb2NrIGJpdG1hcCBhdCAzMzc5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzM3OTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMzc5NS0zMzc5OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMzNzk5LTM0MDQ4CisgIEZyZWUgaW5vZGVzOiA0MjI1LTQyNTYKK0dyb3VwIDEzMzogKEJsb2NrcyAzNDA0OS0zNDMwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDM0MDQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNDA1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM0MDUxLTM0MDU0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzQwNTUtMzQzMDQKKyAgRnJlZSBpbm9kZXM6IDQyNTctNDI4OAorR3JvdXAgMTM0OiAoQmxvY2tzIDM0MzA1LTM0NTYwKQorICBCbG9jayBiaXRtYXAgYXQgMzQzMDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM0MzA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzQzMDctMzQzMTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNDMxMS0zNDU2MAorICBGcmVlIGlub2RlczogNDI4OS00MzIwCitHcm91cCAxMzU6IChCbG9ja3MgMzQ1NjEtMzQ4MTYpCisgIEJsb2NrIGJpdG1hcCBhdCAzNDU2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzQ1NjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNDU2My0zNDU2NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM0NTY3LTM0ODE2CisgIEZyZWUgaW5vZGVzOiA0MzIxLTQzNTIKK0dyb3VwIDEzNjogKEJsb2NrcyAzNDgxNy0zNTA3MikKKyAgQmxvY2sgYml0bWFwIGF0IDM0ODE3ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNDgxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM0ODE5LTM0ODIyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzQ4MjMtMzUwNzIKKyAgRnJlZSBpbm9kZXM6IDQzNTMtNDM4NAorR3JvdXAgMTM3OiAoQmxvY2tzIDM1MDczLTM1MzI4KQorICBCbG9jayBiaXRtYXAgYXQgMzUwNzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM1MDc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzUwNzUtMzUwNzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNTA3OS0zNTMyOAorICBGcmVlIGlub2RlczogNDM4NS00NDE2CitHcm91cCAxMzg6IChCbG9ja3MgMzUzMjktMzU1ODQpCisgIEJsb2NrIGJpdG1hcCBhdCAzNTMyOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzUzMzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNTMzMS0zNTMzNCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM1MzM1LTM1NTg0CisgIEZyZWUgaW5vZGVzOiA0NDE3LTQ0NDgKK0dyb3VwIDEzOTogKEJsb2NrcyAzNTU4NS0zNTg0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDM1NTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNTU4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM1NTg3LTM1NTkwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzU1OTEtMzU4NDAKKyAgRnJlZSBpbm9kZXM6IDQ0NDktNDQ4MAorR3JvdXAgMTQwOiAoQmxvY2tzIDM1ODQxLTM2MDk2KQorICBCbG9jayBiaXRtYXAgYXQgMzU4NDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM1ODQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzU4NDMtMzU4NDYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNTg0Ny0zNjA5NgorICBGcmVlIGlub2RlczogNDQ4MS00NTEyCitHcm91cCAxNDE6IChCbG9ja3MgMzYwOTctMzYzNTIpCisgIEJsb2NrIGJpdG1hcCBhdCAzNjA5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzYwOTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNjA5OS0zNjEwMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM2MTAzLTM2MzUyCisgIEZyZWUgaW5vZGVzOiA0NTEzLTQ1NDQKK0dyb3VwIDE0MjogKEJsb2NrcyAzNjM1My0zNjYwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDM2MzUzICgrMCksIElub2RlIGJpdG1hcCBhdCAzNjM1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM2MzU1LTM2MzU4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzYzNTktMzY2MDgKKyAgRnJlZSBpbm9kZXM6IDQ1NDUtNDU3NgorR3JvdXAgMTQzOiAoQmxvY2tzIDM2NjA5LTM2ODY0KQorICBCbG9jayBiaXRtYXAgYXQgMzY2MDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM2NjEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzY2MTEtMzY2MTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNjYxNS0zNjg2NAorICBGcmVlIGlub2RlczogNDU3Ny00NjA4CitHcm91cCAxNDQ6IChCbG9ja3MgMzY4NjUtMzcxMjApCisgIEJsb2NrIGJpdG1hcCBhdCAzNjg2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzY4NjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNjg2Ny0zNjg3MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM2ODcxLTM3MTIwCisgIEZyZWUgaW5vZGVzOiA0NjA5LTQ2NDAKK0dyb3VwIDE0NTogKEJsb2NrcyAzNzEyMS0zNzM3NikKKyAgQmxvY2sgYml0bWFwIGF0IDM3MTIxICgrMCksIElub2RlIGJpdG1hcCBhdCAzNzEyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM3MTIzLTM3MTI2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzcxMjctMzczNzYKKyAgRnJlZSBpbm9kZXM6IDQ2NDEtNDY3MgorR3JvdXAgMTQ2OiAoQmxvY2tzIDM3Mzc3LTM3NjMyKQorICBCbG9jayBiaXRtYXAgYXQgMzczNzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM3Mzc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzczNzktMzczODIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNzM4My0zNzYzMgorICBGcmVlIGlub2RlczogNDY3My00NzA0CitHcm91cCAxNDc6IChCbG9ja3MgMzc2MzMtMzc4ODgpCisgIEJsb2NrIGJpdG1hcCBhdCAzNzYzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzc2MzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNzYzNS0zNzYzOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM3NjM5LTM3ODg4CisgIEZyZWUgaW5vZGVzOiA0NzA1LTQ3MzYKK0dyb3VwIDE0ODogKEJsb2NrcyAzNzg4OS0zODE0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDM3ODg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNzg5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM3ODkxLTM3ODk0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzc4OTUtMzgxNDQKKyAgRnJlZSBpbm9kZXM6IDQ3MzctNDc2OAorR3JvdXAgMTQ5OiAoQmxvY2tzIDM4MTQ1LTM4NDAwKQorICBCbG9jayBiaXRtYXAgYXQgMzgxNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM4MTQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzgxNDctMzgxNTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzODE1MS0zODQwMAorICBGcmVlIGlub2RlczogNDc2OS00ODAwCitHcm91cCAxNTA6IChCbG9ja3MgMzg0MDEtMzg2NTYpCisgIEJsb2NrIGJpdG1hcCBhdCAzODQwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzg0MDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzODQwMy0zODQwNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM4NDA3LTM4NjU2CisgIEZyZWUgaW5vZGVzOiA0ODAxLTQ4MzIKK0dyb3VwIDE1MTogKEJsb2NrcyAzODY1Ny0zODkxMikKKyAgQmxvY2sgYml0bWFwIGF0IDM4NjU3ICgrMCksIElub2RlIGJpdG1hcCBhdCAzODY1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM4NjU5LTM4NjYyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzg2NjMtMzg5MTIKKyAgRnJlZSBpbm9kZXM6IDQ4MzMtNDg2NAorR3JvdXAgMTUyOiAoQmxvY2tzIDM4OTEzLTM5MTY4KQorICBCbG9jayBiaXRtYXAgYXQgMzg5MTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM4OTE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzg5MTUtMzg5MTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzODkxOS0zOTE2OAorICBGcmVlIGlub2RlczogNDg2NS00ODk2CitHcm91cCAxNTM6IChCbG9ja3MgMzkxNjktMzk0MjQpCisgIEJsb2NrIGJpdG1hcCBhdCAzOTE2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzkxNzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzOTE3MS0zOTE3NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM5MTc1LTM5NDI0CisgIEZyZWUgaW5vZGVzOiA0ODk3LTQ5MjgKK0dyb3VwIDE1NDogKEJsb2NrcyAzOTQyNS0zOTY4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDM5NDI1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzOTQyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM5NDI3LTM5NDMwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzk0MzEtMzk2ODAKKyAgRnJlZSBpbm9kZXM6IDQ5MjktNDk2MAorR3JvdXAgMTU1OiAoQmxvY2tzIDM5NjgxLTM5OTM2KQorICBCbG9jayBiaXRtYXAgYXQgMzk2ODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM5NjgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzk2ODMtMzk2ODYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzOTY4Ny0zOTkzNgorICBGcmVlIGlub2RlczogNDk2MS00OTkyCitHcm91cCAxNTY6IChCbG9ja3MgMzk5MzctMzk5OTkpCisgIEJsb2NrIGJpdG1hcCBhdCAzOTkzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzk5MzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzOTkzOS0zOTk0MiAoKzIpCisgIDU3IGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzk5NDMtMzk5OTkKKyAgRnJlZSBpbm9kZXM6IDQ5OTMtNTAyNApkaWZmIC0tZ2l0IGEvdGVzdHMvcl9tb3ZlX2l0YWJsZS9uYW1lIGIvdGVzdHMvcl9tb3ZlX2l0YWJsZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YzJkNmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yX21vdmVfaXRhYmxlL25hbWUKQEAgLTAsMCArMSBAQAorZmlsZXN5c3RlbSByZXNpemUgd2hpY2ggcmVxdWlyZXMgbW92aW5nIHRoZSBpbm9kZSB0YWJsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvcl9tb3ZlX2l0YWJsZS9zY3JpcHQgYi90ZXN0cy9yX21vdmVfaXRhYmxlL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTY3ODg4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcl9tb3ZlX2l0YWJsZS9zY3JpcHQKQEAgLTAsMCArMSwxMTYgQEAKK2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEUgLWEgLXggJERFQlVHRlNfRVhFOyB0aGVuCisKK0ZTQ0tfT1BUPS15ZgorT1VUPSR0ZXN0X25hbWUubG9nCitpZiBbIC1mICR0ZXN0X2Rpci9leHBlY3QuZ3ogXTsgdGhlbgorCUVYUD0kdGVzdF9uYW1lLnRtcAorCWd1bnppcCA8ICR0ZXN0X2Rpci9leHBlY3QuZ3ogPiAkRVhQMQorZWxzZQorCUVYUD0kdGVzdF9kaXIvZXhwZWN0CitmaQorCitjcCAvZGV2L251bGwgJE9VVAorCitkZCBpZj0vZGV2L3plcm8gb2Y9JFRNUEZJTEUgYnM9MWsgY291bnQ9NTEyID4gL2Rldi9udWxsIDI+JjEKKworZWNobyBta2UyZnMgLXEgLUYgLW8gTGludXggLWIgMTAyNCAtZyAyNTYgdGVzdC5pbWcgMTAyNCA+ICRPVVQKKyRNS0UyRlMgLXEgLUYgLW8gTGludXggLWIgMTAyNCAtZyAyNTYgJFRNUEZJTEUgMTAyNCAyPiYxIHwKKwlzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiID4+ICRPVVQKKworZWNobyByZXNpemUyZnMgLXAgdGVzdC5pbWcgMTAwMDAgPj4gJE9VVAorJFJFU0laRTJGUyAtcCAkVE1QRklMRSAxMDAwMCAyPiYxIHwKKwlzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiID4+ICRPVVQKKworJEZTQ0sgJEZTQ0tfT1BUICAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiAkT1VULm5ldyA+PiAkT1VUCitybSAtZiAkT1VULm5ldworCiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIGxhc3RjaGVjayAwIiAtdyAkVE1QRklMRSA+L2Rldi9udWxsIDI+JjEKKyRERUJVR0ZTIC1SICJzZXRfc3VwZXJfdmFsdWUgaGFzaF9zZWVkIG51bGwiIC13ICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorJERFQlVHRlMgLVIgInNldF9zdXBlcl92YWx1ZSBta2ZzX3RpbWUgMCIgLXcgJFRNUEZJTEUgPi9kZXYvbnVsbCAyPiYxCiskVFVORTJGUyAtYyAyMCAtVSBjbGVhciAkVE1QRklMRSAgPi9kZXYvbnVsbCAyPiYxCisKK2VjaG8gZHVtcGUyZnMgdGVzdC5pbWcgPj4gJE9VVAorJERVTVBFMkZTICRUTVBGSUxFIDI+JjEgfCBzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCA+PiAkT1VUCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PiAkT1VUCisKK2VjaG8gcmVzaXplMmZzIC1wIHRlc3QuaW1nIDIwMDAwID4+ICRPVVQKKyRSRVNJWkUyRlMgLXAgJFRNUEZJTEUgMjAwMDAgMj4mMSB8CisJc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiA+PiAkT1VUCisKKyRGU0NLICRGU0NLX09QVCAgLU4gdGVzdF9maWxlc3lzICRUTVBGSUxFID4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgJE9VVC5uZXcgPj4gJE9VVAorcm0gLWYgJE9VVC5uZXcKKworJERFQlVHRlMgLVIgInNldF9zdXBlcl92YWx1ZSBsYXN0Y2hlY2sgMCIgLXcgJFRNUEZJTEUgPi9kZXYvbnVsbCAyPiYxCiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIGhhc2hfc2VlZCBudWxsIiAtdyAkVE1QRklMRSA+L2Rldi9udWxsIDI+JjEKKyRERUJVR0ZTIC1SICJzZXRfc3VwZXJfdmFsdWUgbWtmc190aW1lIDAiIC13ICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorJFRVTkUyRlMgLWMgMjAgLVUgY2xlYXIgJFRNUEZJTEUgID4vZGV2L251bGwgMj4mMQorCitlY2hvIGR1bXBlMmZzIHRlc3QuaW1nID4+ICRPVVQKKyREVU1QRTJGUyAkVE1QRklMRSAyPiYxIHwgc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgPj4gJE9VVAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj4gJE9VVAorCitlY2hvIHJlc2l6ZTJmcyAtcCB0ZXN0LmltZyAzMDAwMCA+PiAkT1VUCiskUkVTSVpFMkZTIC1wICRUTVBGSUxFIDMwMDAwIDI+JjEgfAorCXNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgPj4gJE9VVAorCiskRlNDSyAkRlNDS19PUFQgIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiICRPVVQubmV3ID4+ICRPVVQKK3JtIC1mICRPVVQubmV3CisKKyRERUJVR0ZTIC1SICJzZXRfc3VwZXJfdmFsdWUgbGFzdGNoZWNrIDAiIC13ICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorJERFQlVHRlMgLVIgInNldF9zdXBlcl92YWx1ZSBoYXNoX3NlZWQgbnVsbCIgLXcgJFRNUEZJTEUgPi9kZXYvbnVsbCAyPiYxCiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIG1rZnNfdGltZSAwIiAtdyAkVE1QRklMRSA+L2Rldi9udWxsIDI+JjEKKyRUVU5FMkZTIC1jIDIwIC1VIGNsZWFyICRUTVBGSUxFICA+L2Rldi9udWxsIDI+JjEKKworZWNobyBkdW1wZTJmcyB0ZXN0LmltZyA+PiAkT1VUCiskRFVNUEUyRlMgJFRNUEZJTEUgMj4mMSB8IHNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkID4+ICRPVVQKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+ICRPVVQKKworZWNobyByZXNpemUyZnMgLXAgdGVzdC5pbWcgNDAwMDAgPj4gJE9VVAorJFJFU0laRTJGUyAtcCAkVE1QRklMRSA0MDAwMCAyPiYxIHwKKwlzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiID4+ICRPVVQKKworJEZTQ0sgJEZTQ0tfT1BUICAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiAkT1VULm5ldyA+PiAkT1VUCitybSAtZiAkT1VULm5ldworCiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIGxhc3RjaGVjayAwIiAtdyAkVE1QRklMRSA+L2Rldi9udWxsIDI+JjEKKyRERUJVR0ZTIC1SICJzZXRfc3VwZXJfdmFsdWUgaGFzaF9zZWVkIG51bGwiIC13ICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorJERFQlVHRlMgLVIgInNldF9zdXBlcl92YWx1ZSBta2ZzX3RpbWUgMCIgLXcgJFRNUEZJTEUgPi9kZXYvbnVsbCAyPiYxCiskVFVORTJGUyAtYyAyMCAtVSBjbGVhciAkVE1QRklMRSAgPi9kZXYvbnVsbCAyPiYxCisKK2VjaG8gZHVtcGUyZnMgdGVzdC5pbWcgPj4gJE9VVAorJERVTVBFMkZTICRUTVBGSUxFIDI+JjEgfCBzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCA+PiAkT1VUCisKK3JtIC1mICRUTVBGSUxFCisKK2NtcCAtcyAkT1VUICRFWFAKK3N0YXR1cz0kPworCitpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJZGlmZiAkRElGRl9PUFRTICRFWFAgJE9VVCA+ICR0ZXN0X25hbWUuZmFpbGVkCisJcm0gLWYgJHRlc3RfbmFtZS50bXAKK2ZpCisKK3Vuc2V0IElNQUdFIEZTQ0tfT1BUIE9VVCBFWFAKKworZWxzZSAjaWYgdGVzdCAteCAkUkVTSVpFMkZTX0VYRSAtYSAteCAkREVCVUdGU19FWEU7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpIApkaWZmIC0tZ2l0IGEvdGVzdHMvcl9yZXNpemVfaW5vZGUvZXhwZWN0IGIvdGVzdHMvcl9yZXNpemVfaW5vZGUvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMTY0N2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yX3Jlc2l6ZV9pbm9kZS9leHBlY3QKQEAgLTAsMCArMSwxNjM5IEBACitta2UyZnMgLXEgLUYgLU8gcmVzaXplX2lub2RlIC1vIExpbnV4IC1iIDEwMjQgLWcgMTAyNCB0ZXN0LmltZyAxNjM4NAorcmVzaXplMmZzIHRlc3QuaW1nIDY1NTM2CitSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyB0byA2NTUzNiAoMWspIGJsb2Nrcy4KK1RoZSBmaWxlc3lzdGVtIG9uIHRlc3QuaW1nIGlzIG5vdyA2NTUzNiAoMWspIGJsb2NrcyBsb25nLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8xNjM4NCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDQ1MTMvNjU1MzYgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitkdW1wZTJmcyB0ZXN0LmltZworRmlsZXN5c3RlbSB2b2x1bWUgbmFtZTogICA8bm9uZT4KK0xhc3QgbW91bnRlZCBvbjogICAgICAgICAgPG5vdCBhdmFpbGFibGU+CitGaWxlc3lzdGVtIG1hZ2ljIG51bWJlcjogIDB4RUY1MworRmlsZXN5c3RlbSByZXZpc2lvbiAjOiAgICAxIChkeW5hbWljKQorRmlsZXN5c3RlbSBmZWF0dXJlczogICAgICBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIHNwYXJzZV9zdXBlcgorRGVmYXVsdCBtb3VudCBvcHRpb25zOiAgICAobm9uZSkKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgQ29udGludWUKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgMTYzODQKK0Jsb2NrIGNvdW50OiAgICAgICAgICAgICAgNjU1MzYKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgMzI3NgorRnJlZSBibG9ja3M6ICAgICAgICAgICAgICA2MTAyMworRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICAxNjM3MworRmlyc3QgYmxvY2s6ICAgICAgICAgICAgICAxCitCbG9jayBzaXplOiAgICAgICAgICAgICAgIDEwMjQKK0ZyYWdtZW50IHNpemU6ICAgICAgICAgICAgMTAyNAorUmVzZXJ2ZWQgR0RUIGJsb2NrczogICAgICAyNTUKK0Jsb2NrcyBwZXIgZ3JvdXA6ICAgICAgICAgMTAyNAorRnJhZ21lbnRzIHBlciBncm91cDogICAgICAxMDI0CitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDI1NgorSW5vZGUgYmxvY2tzIHBlciBncm91cDogICAzMgorTW91bnQgY291bnQ6ICAgICAgICAgICAgICAwCitDaGVjayBpbnRlcnZhbDogICAgICAgICAgIDE1NTUyMDAwICg2IG1vbnRocykKK1Jlc2VydmVkIGJsb2NrcyB1aWQ6ICAgICAgMAorUmVzZXJ2ZWQgYmxvY2tzIGdpZDogICAgICAwCitGaXJzdCBpbm9kZTogICAgICAgICAgICAgIDExCitJbm9kZSBzaXplOgkgICAgICAgICAgMTI4CitEZWZhdWx0IGRpcmVjdG9yeSBoYXNoOiAgIGhhbGZfbWQ0CisKKworR3JvdXAgMDogKEJsb2NrcyAxLTEwMjQpCisgIFByaW1hcnkgc3VwZXJibG9jayBhdCAxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyLTMKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA0LTI1OAorICBCbG9jayBiaXRtYXAgYXQgMjU5ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDI2MCAoKzI1OSkKKyAgSW5vZGUgdGFibGUgYXQgMjYxLTI5MiAoKzI2MCkKKyAgNzE4IGZyZWUgYmxvY2tzLCAyNDUgZnJlZSBpbm9kZXMsIDIgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMwNy0xMDI0CisgIEZyZWUgaW5vZGVzOiAxMi0yNTYKK0dyb3VwIDE6IChCbG9ja3MgMTAyNS0yMDQ4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxMDI1LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAxMDI2LTEwMjcKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAxMDI4LTEyODIKKyAgQmxvY2sgYml0bWFwIGF0IDEyODMgKCsyNTgpLCBJbm9kZSBiaXRtYXAgYXQgMTI4NCAoKzI1OSkKKyAgSW5vZGUgdGFibGUgYXQgMTI4NS0xMzE2ICgrMjYwKQorICA3MzIgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMxNy0yMDQ4CisgIEZyZWUgaW5vZGVzOiAyNTctNTEyCitHcm91cCAyOiAoQmxvY2tzIDIwNDktMzA3MikKKyAgQmxvY2sgYml0bWFwIGF0IDIwNDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIwNTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMDUxLTIwODIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA4My0zMDcyCisgIEZyZWUgaW5vZGVzOiA1MTMtNzY4CitHcm91cCAzOiAoQmxvY2tzIDMwNzMtNDA5NikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMzA3MywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMzA3NC0zMDc1CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMzA3Ni0zMzMwCisgIEJsb2NrIGJpdG1hcCBhdCAzMzMxICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDMzMzIgKCsyNTkpCisgIElub2RlIHRhYmxlIGF0IDMzMzMtMzM2NCAoKzI2MCkKKyAgNzMyIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMzNjUtNDA5NgorICBGcmVlIGlub2RlczogNzY5LTEwMjQKK0dyb3VwIDQ6IChCbG9ja3MgNDA5Ny01MTIwKQorICBCbG9jayBiaXRtYXAgYXQgNDA5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDA5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQwOTktNDEzMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MTMxLTUxMjAKKyAgRnJlZSBpbm9kZXM6IDEwMjUtMTI4MAorR3JvdXAgNTogKEJsb2NrcyA1MTIxLTYxNDQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDUxMjEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDUxMjItNTEyMworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDUxMjQtNTM3OAorICBCbG9jayBiaXRtYXAgYXQgNTM3OSAoKzI1OCksIElub2RlIGJpdG1hcCBhdCA1MzgwICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCA1MzgxLTU0MTIgKCsyNjApCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NDEzLTYxNDQKKyAgRnJlZSBpbm9kZXM6IDEyODEtMTUzNgorR3JvdXAgNjogKEJsb2NrcyA2MTQ1LTcxNjgpCisgIEJsb2NrIGJpdG1hcCBhdCA2MTQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCA2MTQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjE0Ny02MTc4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDYxNzktNzE2OAorICBGcmVlIGlub2RlczogMTUzNy0xNzkyCitHcm91cCA3OiAoQmxvY2tzIDcxNjktODE5MikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNzE2OSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNzE3MC03MTcxCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNzE3Mi03NDI2CisgIEJsb2NrIGJpdG1hcCBhdCA3NDI3ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDc0MjggKCsyNTkpCisgIElub2RlIHRhYmxlIGF0IDc0MjktNzQ2MCAoKzI2MCkKKyAgNzMyIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc0NjEtODE5MgorICBGcmVlIGlub2RlczogMTc5My0yMDQ4CitHcm91cCA4OiAoQmxvY2tzIDgxOTMtOTIxNikKKyAgQmxvY2sgYml0bWFwIGF0IDgxOTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDgxOTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4MTk1LTgyMjYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODIyNy05MjE2CisgIEZyZWUgaW5vZGVzOiAyMDQ5LTIzMDQKK0dyb3VwIDk6IChCbG9ja3MgOTIxNy0xMDI0MCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgOTIxNywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgOTIxOC05MjE5CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgOTIyMC05NDc0CisgIEJsb2NrIGJpdG1hcCBhdCA5NDc1ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDk0NzYgKCsyNTkpCisgIElub2RlIHRhYmxlIGF0IDk0NzctOTUwOCAoKzI2MCkKKyAgNzMyIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk1MDktMTAyNDAKKyAgRnJlZSBpbm9kZXM6IDIzMDUtMjU2MAorR3JvdXAgMTA6IChCbG9ja3MgMTAyNDEtMTEyNjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDI0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTAyNDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDI0My0xMDI3NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDI3NS0xMTI2NAorICBGcmVlIGlub2RlczogMjU2MS0yODE2CitHcm91cCAxMTogKEJsb2NrcyAxMTI2NS0xMjI4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDExMjY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTI2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExMjY3LTExMjk4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExMjk5LTEyMjg4CisgIEZyZWUgaW5vZGVzOiAyODE3LTMwNzIKK0dyb3VwIDEyOiAoQmxvY2tzIDEyMjg5LTEzMzEyKQorICBCbG9jayBiaXRtYXAgYXQgMTIyODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyMjkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIyOTEtMTIzMjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIzMjMtMTMzMTIKKyAgRnJlZSBpbm9kZXM6IDMwNzMtMzMyOAorR3JvdXAgMTM6IChCbG9ja3MgMTMzMTMtMTQzMzYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMzMxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTMzMTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzMxNS0xMzM0NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzM0Ny0xNDMzNgorICBGcmVlIGlub2RlczogMzMyOS0zNTg0CitHcm91cCAxNDogKEJsb2NrcyAxNDMzNy0xNTM2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDE0MzM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDMzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0MzM5LTE0MzcwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0MzcxLTE1MzYwCisgIEZyZWUgaW5vZGVzOiAzNTg1LTM4NDAKK0dyb3VwIDE1OiAoQmxvY2tzIDE1MzYxLTE2Mzg0KQorICBCbG9jayBiaXRtYXAgYXQgMTUzNjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1MzYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTUzNjMtMTUzOTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTUzOTUtMTYzODQKKyAgRnJlZSBpbm9kZXM6IDM4NDEtNDA5NgorR3JvdXAgMTY6IChCbG9ja3MgMTYzODUtMTc0MDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxNjM4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTYzODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjM4Ny0xNjQxOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjQxOS0xNzQwOAorICBGcmVlIGlub2RlczogNDA5Ny00MzUyCitHcm91cCAxNzogKEJsb2NrcyAxNzQwOS0xODQzMikKKyAgQmxvY2sgYml0bWFwIGF0IDE3NDA5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNzQxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE3NDExLTE3NDQyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE3NDQzLTE4NDMyCisgIEZyZWUgaW5vZGVzOiA0MzUzLTQ2MDgKK0dyb3VwIDE4OiAoQmxvY2tzIDE4NDMzLTE5NDU2KQorICBCbG9jayBiaXRtYXAgYXQgMTg0MzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE4NDM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTg0MzUtMTg0NjYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTg0NjctMTk0NTYKKyAgRnJlZSBpbm9kZXM6IDQ2MDktNDg2NAorR3JvdXAgMTk6IChCbG9ja3MgMTk0NTctMjA0ODApCisgIEJsb2NrIGJpdG1hcCBhdCAxOTQ1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTk0NTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxOTQ1OS0xOTQ5MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxOTQ5MS0yMDQ4MAorICBGcmVlIGlub2RlczogNDg2NS01MTIwCitHcm91cCAyMDogKEJsb2NrcyAyMDQ4MS0yMTUwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDIwNDgxICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDQ4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIwNDgzLTIwNTE0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIwNTE1LTIxNTA0CisgIEZyZWUgaW5vZGVzOiA1MTIxLTUzNzYKK0dyb3VwIDIxOiAoQmxvY2tzIDIxNTA1LTIyNTI4KQorICBCbG9jayBiaXRtYXAgYXQgMjE1MDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIxNTA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjE1MDctMjE1MzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjE1MzktMjI1MjgKKyAgRnJlZSBpbm9kZXM6IDUzNzctNTYzMgorR3JvdXAgMjI6IChCbG9ja3MgMjI1MjktMjM1NTIpCisgIEJsb2NrIGJpdG1hcCBhdCAyMjUyOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjI1MzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMjUzMS0yMjU2MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMjU2My0yMzU1MgorICBGcmVlIGlub2RlczogNTYzMy01ODg4CitHcm91cCAyMzogKEJsb2NrcyAyMzU1My0yNDU3NikKKyAgQmxvY2sgYml0bWFwIGF0IDIzNTUzICgrMCksIElub2RlIGJpdG1hcCBhdCAyMzU1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIzNTU1LTIzNTg2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIzNTg3LTI0NTc2CisgIEZyZWUgaW5vZGVzOiA1ODg5LTYxNDQKK0dyb3VwIDI0OiAoQmxvY2tzIDI0NTc3LTI1NjAwKQorICBCbG9jayBiaXRtYXAgYXQgMjQ1NzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI0NTc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjQ1NzktMjQ2MTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjQ2MTEtMjU2MDAKKyAgRnJlZSBpbm9kZXM6IDYxNDUtNjQwMAorR3JvdXAgMjU6IChCbG9ja3MgMjU2MDEtMjY2MjQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDI1NjAxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyNTYwMi0yNTYwMworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDI1NjA0LTI1ODU4CisgIEJsb2NrIGJpdG1hcCBhdCAyNTg1OSAoKzI1OCksIElub2RlIGJpdG1hcCBhdCAyNTg2MCAoKzI1OSkKKyAgSW5vZGUgdGFibGUgYXQgMjU4NjEtMjU4OTIgKCsyNjApCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNTg5My0yNjYyNAorICBGcmVlIGlub2RlczogNjQwMS02NjU2CitHcm91cCAyNjogKEJsb2NrcyAyNjYyNS0yNzY0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDI2NjI1ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNjYyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI2NjI3LTI2NjU4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI2NjU5LTI3NjQ4CisgIEZyZWUgaW5vZGVzOiA2NjU3LTY5MTIKK0dyb3VwIDI3OiAoQmxvY2tzIDI3NjQ5LTI4NjcyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyNzY0OSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjc2NTAtMjc2NTEKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyNzY1Mi0yNzkwNgorICBCbG9jayBiaXRtYXAgYXQgMjc5MDcgKCsyNTgpLCBJbm9kZSBiaXRtYXAgYXQgMjc5MDggKCsyNTkpCisgIElub2RlIHRhYmxlIGF0IDI3OTA5LTI3OTQwICgrMjYwKQorICA3MzIgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjc5NDEtMjg2NzIKKyAgRnJlZSBpbm9kZXM6IDY5MTMtNzE2OAorR3JvdXAgMjg6IChCbG9ja3MgMjg2NzMtMjk2OTYpCisgIEJsb2NrIGJpdG1hcCBhdCAyODY3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjg2NzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyODY3NS0yODcwNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyODcwNy0yOTY5NgorICBGcmVlIGlub2RlczogNzE2OS03NDI0CitHcm91cCAyOTogKEJsb2NrcyAyOTY5Ny0zMDcyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDI5Njk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyOTY5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI5Njk5LTI5NzMwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI5NzMxLTMwNzIwCisgIEZyZWUgaW5vZGVzOiA3NDI1LTc2ODAKK0dyb3VwIDMwOiAoQmxvY2tzIDMwNzIxLTMxNzQ0KQorICBCbG9jayBiaXRtYXAgYXQgMzA3MjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMwNzIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzA3MjMtMzA3NTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzA3NTUtMzE3NDQKKyAgRnJlZSBpbm9kZXM6IDc2ODEtNzkzNgorR3JvdXAgMzE6IChCbG9ja3MgMzE3NDUtMzI3NjgpCisgIEJsb2NrIGJpdG1hcCBhdCAzMTc0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzE3NDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMTc0Ny0zMTc3OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMTc3OS0zMjc2OAorICBGcmVlIGlub2RlczogNzkzNy04MTkyCitHcm91cCAzMjogKEJsb2NrcyAzMjc2OS0zMzc5MikKKyAgQmxvY2sgYml0bWFwIGF0IDMyNzY5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMjc3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMyNzcxLTMyODAyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMyODAzLTMzNzkyCisgIEZyZWUgaW5vZGVzOiA4MTkzLTg0NDgKK0dyb3VwIDMzOiAoQmxvY2tzIDMzNzkzLTM0ODE2KQorICBCbG9jayBiaXRtYXAgYXQgMzM3OTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMzNzk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzM3OTUtMzM4MjYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzM4MjctMzQ4MTYKKyAgRnJlZSBpbm9kZXM6IDg0NDktODcwNAorR3JvdXAgMzQ6IChCbG9ja3MgMzQ4MTctMzU4NDApCisgIEJsb2NrIGJpdG1hcCBhdCAzNDgxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzQ4MTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNDgxOS0zNDg1MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNDg1MS0zNTg0MAorICBGcmVlIGlub2RlczogODcwNS04OTYwCitHcm91cCAzNTogKEJsb2NrcyAzNTg0MS0zNjg2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDM1ODQxICgrMCksIElub2RlIGJpdG1hcCBhdCAzNTg0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM1ODQzLTM1ODc0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM1ODc1LTM2ODY0CisgIEZyZWUgaW5vZGVzOiA4OTYxLTkyMTYKK0dyb3VwIDM2OiAoQmxvY2tzIDM2ODY1LTM3ODg4KQorICBCbG9jayBiaXRtYXAgYXQgMzY4NjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM2ODY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzY4NjctMzY4OTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzY4OTktMzc4ODgKKyAgRnJlZSBpbm9kZXM6IDkyMTctOTQ3MgorR3JvdXAgMzc6IChCbG9ja3MgMzc4ODktMzg5MTIpCisgIEJsb2NrIGJpdG1hcCBhdCAzNzg4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzc4OTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNzg5MS0zNzkyMiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNzkyMy0zODkxMgorICBGcmVlIGlub2RlczogOTQ3My05NzI4CitHcm91cCAzODogKEJsb2NrcyAzODkxMy0zOTkzNikKKyAgQmxvY2sgYml0bWFwIGF0IDM4OTEzICgrMCksIElub2RlIGJpdG1hcCBhdCAzODkxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM4OTE1LTM4OTQ2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM4OTQ3LTM5OTM2CisgIEZyZWUgaW5vZGVzOiA5NzI5LTk5ODQKK0dyb3VwIDM5OiAoQmxvY2tzIDM5OTM3LTQwOTYwKQorICBCbG9jayBiaXRtYXAgYXQgMzk5MzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM5OTM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzk5MzktMzk5NzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzk5NzEtNDA5NjAKKyAgRnJlZSBpbm9kZXM6IDk5ODUtMTAyNDAKK0dyb3VwIDQwOiAoQmxvY2tzIDQwOTYxLTQxOTg0KQorICBCbG9jayBiaXRtYXAgYXQgNDA5NjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQwOTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDA5NjMtNDA5OTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDA5OTUtNDE5ODQKKyAgRnJlZSBpbm9kZXM6IDEwMjQxLTEwNDk2CitHcm91cCA0MTogKEJsb2NrcyA0MTk4NS00MzAwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDQxOTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCA0MTk4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQxOTg3LTQyMDE4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQyMDE5LTQzMDA4CisgIEZyZWUgaW5vZGVzOiAxMDQ5Ny0xMDc1MgorR3JvdXAgNDI6IChCbG9ja3MgNDMwMDktNDQwMzIpCisgIEJsb2NrIGJpdG1hcCBhdCA0MzAwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDMwMTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MzAxMS00MzA0MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MzA0My00NDAzMgorICBGcmVlIGlub2RlczogMTA3NTMtMTEwMDgKK0dyb3VwIDQzOiAoQmxvY2tzIDQ0MDMzLTQ1MDU2KQorICBCbG9jayBiaXRtYXAgYXQgNDQwMzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ0MDM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDQwMzUtNDQwNjYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDQwNjctNDUwNTYKKyAgRnJlZSBpbm9kZXM6IDExMDA5LTExMjY0CitHcm91cCA0NDogKEJsb2NrcyA0NTA1Ny00NjA4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ1MDU3ICgrMCksIElub2RlIGJpdG1hcCBhdCA0NTA1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ1MDU5LTQ1MDkwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ1MDkxLTQ2MDgwCisgIEZyZWUgaW5vZGVzOiAxMTI2NS0xMTUyMAorR3JvdXAgNDU6IChCbG9ja3MgNDYwODEtNDcxMDQpCisgIEJsb2NrIGJpdG1hcCBhdCA0NjA4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDYwODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0NjA4My00NjExNCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NjExNS00NzEwNAorICBGcmVlIGlub2RlczogMTE1MjEtMTE3NzYKK0dyb3VwIDQ2OiAoQmxvY2tzIDQ3MTA1LTQ4MTI4KQorICBCbG9jayBiaXRtYXAgYXQgNDcxMDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ3MTA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDcxMDctNDcxMzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDcxMzktNDgxMjgKKyAgRnJlZSBpbm9kZXM6IDExNzc3LTEyMDMyCitHcm91cCA0NzogKEJsb2NrcyA0ODEyOS00OTE1MikKKyAgQmxvY2sgYml0bWFwIGF0IDQ4MTI5ICgrMCksIElub2RlIGJpdG1hcCBhdCA0ODEzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ4MTMxLTQ4MTYyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ4MTYzLTQ5MTUyCisgIEZyZWUgaW5vZGVzOiAxMjAzMy0xMjI4OAorR3JvdXAgNDg6IChCbG9ja3MgNDkxNTMtNTAxNzYpCisgIEJsb2NrIGJpdG1hcCBhdCA0OTE1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDkxNTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0OTE1NS00OTE4NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0OTE4Ny01MDE3NgorICBGcmVlIGlub2RlczogMTIyODktMTI1NDQKK0dyb3VwIDQ5OiAoQmxvY2tzIDUwMTc3LTUxMjAwKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA1MDE3NywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNTAxNzgtNTAxNzkKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA1MDE4MC01MDQzNAorICBCbG9jayBiaXRtYXAgYXQgNTA0MzUgKCsyNTgpLCBJbm9kZSBiaXRtYXAgYXQgNTA0MzYgKCsyNTkpCisgIElub2RlIHRhYmxlIGF0IDUwNDM3LTUwNDY4ICgrMjYwKQorICA3MzIgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTA0NjktNTEyMDAKKyAgRnJlZSBpbm9kZXM6IDEyNTQ1LTEyODAwCitHcm91cCA1MDogKEJsb2NrcyA1MTIwMS01MjIyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDUxMjAxICgrMCksIElub2RlIGJpdG1hcCBhdCA1MTIwMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDUxMjAzLTUxMjM0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUxMjM1LTUyMjI0CisgIEZyZWUgaW5vZGVzOiAxMjgwMS0xMzA1NgorR3JvdXAgNTE6IChCbG9ja3MgNTIyMjUtNTMyNDgpCisgIEJsb2NrIGJpdG1hcCBhdCA1MjIyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTIyMjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1MjIyNy01MjI1OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MjI1OS01MzI0OAorICBGcmVlIGlub2RlczogMTMwNTctMTMzMTIKK0dyb3VwIDUyOiAoQmxvY2tzIDUzMjQ5LTU0MjcyKQorICBCbG9jayBiaXRtYXAgYXQgNTMyNDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDUzMjUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTMyNTEtNTMyODIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTMyODMtNTQyNzIKKyAgRnJlZSBpbm9kZXM6IDEzMzEzLTEzNTY4CitHcm91cCA1MzogKEJsb2NrcyA1NDI3My01NTI5NikKKyAgQmxvY2sgYml0bWFwIGF0IDU0MjczICgrMCksIElub2RlIGJpdG1hcCBhdCA1NDI3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU0Mjc1LTU0MzA2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU0MzA3LTU1Mjk2CisgIEZyZWUgaW5vZGVzOiAxMzU2OS0xMzgyNAorR3JvdXAgNTQ6IChCbG9ja3MgNTUyOTctNTYzMjApCisgIEJsb2NrIGJpdG1hcCBhdCA1NTI5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTUyOTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1NTI5OS01NTMzMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NTMzMS01NjMyMAorICBGcmVlIGlub2RlczogMTM4MjUtMTQwODAKK0dyb3VwIDU1OiAoQmxvY2tzIDU2MzIxLTU3MzQ0KQorICBCbG9jayBiaXRtYXAgYXQgNTYzMjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU2MzIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTYzMjMtNTYzNTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTYzNTUtNTczNDQKKyAgRnJlZSBpbm9kZXM6IDE0MDgxLTE0MzM2CitHcm91cCA1NjogKEJsb2NrcyA1NzM0NS01ODM2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDU3MzQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCA1NzM0NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU3MzQ3LTU3Mzc4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU3Mzc5LTU4MzY4CisgIEZyZWUgaW5vZGVzOiAxNDMzNy0xNDU5MgorR3JvdXAgNTc6IChCbG9ja3MgNTgzNjktNTkzOTIpCisgIEJsb2NrIGJpdG1hcCBhdCA1ODM2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTgzNzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1ODM3MS01ODQwMiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1ODQwMy01OTM5MgorICBGcmVlIGlub2RlczogMTQ1OTMtMTQ4NDgKK0dyb3VwIDU4OiAoQmxvY2tzIDU5MzkzLTYwNDE2KQorICBCbG9jayBiaXRtYXAgYXQgNTkzOTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU5Mzk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTkzOTUtNTk0MjYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTk0MjctNjA0MTYKKyAgRnJlZSBpbm9kZXM6IDE0ODQ5LTE1MTA0CitHcm91cCA1OTogKEJsb2NrcyA2MDQxNy02MTQ0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDYwNDE3ICgrMCksIElub2RlIGJpdG1hcCBhdCA2MDQxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDYwNDE5LTYwNDUwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDYwNDUxLTYxNDQwCisgIEZyZWUgaW5vZGVzOiAxNTEwNS0xNTM2MAorR3JvdXAgNjA6IChCbG9ja3MgNjE0NDEtNjI0NjQpCisgIEJsb2NrIGJpdG1hcCBhdCA2MTQ0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjE0NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MTQ0My02MTQ3NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MTQ3NS02MjQ2NAorICBGcmVlIGlub2RlczogMTUzNjEtMTU2MTYKK0dyb3VwIDYxOiAoQmxvY2tzIDYyNDY1LTYzNDg4KQorICBCbG9jayBiaXRtYXAgYXQgNjI0NjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYyNDY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjI0NjctNjI0OTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjI0OTktNjM0ODgKKyAgRnJlZSBpbm9kZXM6IDE1NjE3LTE1ODcyCitHcm91cCA2MjogKEJsb2NrcyA2MzQ4OS02NDUxMikKKyAgQmxvY2sgYml0bWFwIGF0IDYzNDg5ICgrMCksIElub2RlIGJpdG1hcCBhdCA2MzQ5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDYzNDkxLTYzNTIyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDYzNTIzLTY0NTEyCisgIEZyZWUgaW5vZGVzOiAxNTg3My0xNjEyOAorR3JvdXAgNjM6IChCbG9ja3MgNjQ1MTMtNjU1MzUpCisgIEJsb2NrIGJpdG1hcCBhdCA2NDUxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjQ1MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2NDUxNS02NDU0NiAoKzIpCisgIDk4OSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NDU0Ny02NTUzNQorICBGcmVlIGlub2RlczogMTYxMjktMTYzODQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitta2UyZnMgLXEgLUYgLU8gcmVzaXplX2lub2RlIC1vIExpbnV4IC1iIDEwMjQgLWcgMTAyNCB0ZXN0LmltZyA2NTUzNgorcmVzaXplMmZzIHRlc3QuaW1nIDE2Mzg0CitSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyB0byAxNjM4NCAoMWspIGJsb2Nrcy4KK1RoZSBmaWxlc3lzdGVtIG9uIHRlc3QuaW1nIGlzIG5vdyAxNjM4NCAoMWspIGJsb2NrcyBsb25nLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS80MDk2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjEwNy8xNjM4NCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKK2R1bXBlMmZzIHRlc3QuaW1nCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyCitEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIChub25lKQorRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICBjbGVhbgorRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICBDb250aW51ZQorRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICBMaW51eAorSW5vZGUgY291bnQ6ICAgICAgICAgICAgICA0MDk2CitCbG9jayBjb3VudDogICAgICAgICAgICAgIDE2Mzg0CitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDgxOQorRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAxNDI3NworRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICA0MDg1CitGaXJzdCBibG9jazogICAgICAgICAgICAgIDEKK0Jsb2NrIHNpemU6ICAgICAgICAgICAgICAgMTAyNAorRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICAxMDI0CitSZXNlcnZlZCBHRFQgYmxvY2tzOiAgICAgIDI1NgorQmxvY2tzIHBlciBncm91cDogICAgICAgICAxMDI0CitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDEwMjQKK0lub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgMjU2CitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDMyCitNb3VudCBjb3VudDogICAgICAgICAgICAgIDAKK0NoZWNrIGludGVydmFsOiAgICAgICAgICAgMTU1NTIwMDAgKDYgbW9udGhzKQorUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAwCitSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgIDAKK0ZpcnN0IGlub2RlOiAgICAgICAgICAgICAgMTEKK0lub2RlIHNpemU6CSAgICAgICAgICAxMjgKK0RlZmF1bHQgZGlyZWN0b3J5IGhhc2g6ICAgaGFsZl9tZDQKKworCitHcm91cCAwOiAoQmxvY2tzIDEtMTAyNCkKKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDItMgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDMtMjU4CisgIEJsb2NrIGJpdG1hcCBhdCAyNjAgKCsyNTkpLCBJbm9kZSBiaXRtYXAgYXQgMjYxICgrMjYwKQorICBJbm9kZSB0YWJsZSBhdCAyNjItMjkzICgrMjYxKQorICA3MTggZnJlZSBibG9ja3MsIDI0NSBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjU5LCAzMDgtMTAyNAorICBGcmVlIGlub2RlczogMTItMjU2CitHcm91cCAxOiAoQmxvY2tzIDEwMjUtMjA0OCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTAyNSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTAyNi0xMDI2CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTAyNy0xMjgyCisgIEJsb2NrIGJpdG1hcCBhdCAxMjg0ICgrMjU5KSwgSW5vZGUgYml0bWFwIGF0IDEyODUgKCsyNjApCisgIElub2RlIHRhYmxlIGF0IDEyODYtMTMxNyAoKzI2MSkKKyAgNzMyIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyODMsIDEzMTgtMjA0OAorICBGcmVlIGlub2RlczogMjU3LTUxMgorR3JvdXAgMjogKEJsb2NrcyAyMDQ5LTMwNzIpCisgIEJsb2NrIGJpdG1hcCBhdCAyMDQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjA1MS0yMDgyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIwODMtMzA3MgorICBGcmVlIGlub2RlczogNTEzLTc2OAorR3JvdXAgMzogKEJsb2NrcyAzMDczLTQwOTYpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDMwNzMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDMwNzQtMzA3NAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDMwNzUtMzMzMAorICBCbG9jayBiaXRtYXAgYXQgMzMzMiAoKzI1OSksIElub2RlIGJpdG1hcCBhdCAzMzMzICgrMjYwKQorICBJbm9kZSB0YWJsZSBhdCAzMzM0LTMzNjUgKCsyNjEpCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMzMxLCAzMzY2LTQwOTYKKyAgRnJlZSBpbm9kZXM6IDc2OS0xMDI0CitHcm91cCA0OiAoQmxvY2tzIDQwOTctNTEyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDQwOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQwOTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MDk5LTQxMzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDEzMS01MTIwCisgIEZyZWUgaW5vZGVzOiAxMDI1LTEyODAKK0dyb3VwIDU6IChCbG9ja3MgNTEyMS02MTQ0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA1MTIxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA1MTIyLTUxMjIKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA1MTIzLTUzNzgKKyAgQmxvY2sgYml0bWFwIGF0IDUzODAgKCsyNTkpLCBJbm9kZSBiaXRtYXAgYXQgNTM4MSAoKzI2MCkKKyAgSW5vZGUgdGFibGUgYXQgNTM4Mi01NDEzICgrMjYxKQorICA3MzIgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTM3OSwgNTQxNC02MTQ0CisgIEZyZWUgaW5vZGVzOiAxMjgxLTE1MzYKK0dyb3VwIDY6IChCbG9ja3MgNjE0NS03MTY4KQorICBCbG9jayBiaXRtYXAgYXQgNjE0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjE0NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDYxNDctNjE3OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MTc5LTcxNjgKKyAgRnJlZSBpbm9kZXM6IDE1MzctMTc5MgorR3JvdXAgNzogKEJsb2NrcyA3MTY5LTgxOTIpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDcxNjksIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDcxNzAtNzE3MAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDcxNzEtNzQyNgorICBCbG9jayBiaXRtYXAgYXQgNzQyOCAoKzI1OSksIElub2RlIGJpdG1hcCBhdCA3NDI5ICgrMjYwKQorICBJbm9kZSB0YWJsZSBhdCA3NDMwLTc0NjEgKCsyNjEpCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NDI3LCA3NDYyLTgxOTIKKyAgRnJlZSBpbm9kZXM6IDE3OTMtMjA0OAorR3JvdXAgODogKEJsb2NrcyA4MTkzLTkyMTYpCisgIEJsb2NrIGJpdG1hcCBhdCA4MTkzICgrMCksIElub2RlIGJpdG1hcCBhdCA4MTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODE5NS04MjI2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgyMjctOTIxNgorICBGcmVlIGlub2RlczogMjA0OS0yMzA0CitHcm91cCA5OiAoQmxvY2tzIDkyMTctMTAyNDApCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDkyMTcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDkyMTgtOTIxOAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDkyMTktOTQ3NAorICBCbG9jayBiaXRtYXAgYXQgOTQ3NiAoKzI1OSksIElub2RlIGJpdG1hcCBhdCA5NDc3ICgrMjYwKQorICBJbm9kZSB0YWJsZSBhdCA5NDc4LTk1MDkgKCsyNjEpCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NDc1LCA5NTEwLTEwMjQwCisgIEZyZWUgaW5vZGVzOiAyMzA1LTI1NjAKK0dyb3VwIDEwOiAoQmxvY2tzIDEwMjQxLTExMjY0KQorICBCbG9jayBiaXRtYXAgYXQgMTAyNDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMjQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAyNDMtMTAyNzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAyNzUtMTEyNjQKKyAgRnJlZSBpbm9kZXM6IDI1NjEtMjgxNgorR3JvdXAgMTE6IChCbG9ja3MgMTEyNjUtMTIyODgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTI2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTEyNjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTI2Ny0xMTI5OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTI5OS0xMjI4OAorICBGcmVlIGlub2RlczogMjgxNy0zMDcyCitHcm91cCAxMjogKEJsb2NrcyAxMjI4OS0xMzMxMikKKyAgQmxvY2sgYml0bWFwIGF0IDEyMjg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjI5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyMjkxLTEyMzIyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMzIzLTEzMzEyCisgIEZyZWUgaW5vZGVzOiAzMDczLTMzMjgKK0dyb3VwIDEzOiAoQmxvY2tzIDEzMzEzLTE0MzM2KQorICBCbG9jayBiaXRtYXAgYXQgMTMzMTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzMzE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMzMTUtMTMzNDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMzNDctMTQzMzYKKyAgRnJlZSBpbm9kZXM6IDMzMjktMzU4NAorR3JvdXAgMTQ6IChCbG9ja3MgMTQzMzctMTUzNjApCisgIEJsb2NrIGJpdG1hcCBhdCAxNDMzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQzMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDMzOS0xNDM3MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDM3MS0xNTM2MAorICBGcmVlIGlub2RlczogMzU4NS0zODQwCitHcm91cCAxNTogKEJsb2NrcyAxNTM2MS0xNjM4MykKKyAgQmxvY2sgYml0bWFwIGF0IDE1MzYxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTM2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1MzYzLTE1Mzk0ICgrMikKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1Mzk1LTE2MzgzCisgIEZyZWUgaW5vZGVzOiAzODQxLTQwOTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZXNpemUyZnMgdGVzdC5pbWcgMTY1NTM2CitSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyB0byAxNjU1MzYgKDFrKSBibG9ja3MuCitUaGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyBpcyBub3cgMTY1NTM2ICgxaykgYmxvY2tzIGxvbmcuCisKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzQxNDcyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgODM2MS8xNjU1MzYgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitkdW1wZTJmcyB0ZXN0LmltZworRmlsZXN5c3RlbSB2b2x1bWUgbmFtZTogICA8bm9uZT4KK0xhc3QgbW91bnRlZCBvbjogICAgICAgICAgPG5vdCBhdmFpbGFibGU+CitGaWxlc3lzdGVtIG1hZ2ljIG51bWJlcjogIDB4RUY1MworRmlsZXN5c3RlbSByZXZpc2lvbiAjOiAgICAxIChkeW5hbWljKQorRmlsZXN5c3RlbSBmZWF0dXJlczogICAgICBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIHNwYXJzZV9zdXBlcgorRGVmYXVsdCBtb3VudCBvcHRpb25zOiAgICAobm9uZSkKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgQ29udGludWUKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgNDE0NzIKK0Jsb2NrIGNvdW50OiAgICAgICAgICAgICAgMTY1NTM2CitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDgyNzQKK0ZyZWUgYmxvY2tzOiAgICAgICAgICAgICAgMTU3MTc1CitGcmVlIGlub2RlczogICAgICAgICAgICAgIDQxNDYxCitGaXJzdCBibG9jazogICAgICAgICAgICAgIDEKK0Jsb2NrIHNpemU6ICAgICAgICAgICAgICAgMTAyNAorRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICAxMDI0CitSZXNlcnZlZCBHRFQgYmxvY2tzOiAgICAgIDI1MQorQmxvY2tzIHBlciBncm91cDogICAgICAgICAxMDI0CitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDEwMjQKK0lub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgMjU2CitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDMyCitNb3VudCBjb3VudDogICAgICAgICAgICAgIDAKK0NoZWNrIGludGVydmFsOiAgICAgICAgICAgMTU1NTIwMDAgKDYgbW9udGhzKQorUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAwCitSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgIDAKK0ZpcnN0IGlub2RlOiAgICAgICAgICAgICAgMTEKK0lub2RlIHNpemU6CSAgICAgICAgICAxMjgKK0RlZmF1bHQgZGlyZWN0b3J5IGhhc2g6ICAgaGFsZl9tZDQKKworCitHcm91cCAwOiAoQmxvY2tzIDEtMTAyNCkKKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDItNworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDgtMjU4CisgIEJsb2NrIGJpdG1hcCBhdCAyNjAgKCsyNTkpLCBJbm9kZSBiaXRtYXAgYXQgMjYxICgrMjYwKQorICBJbm9kZSB0YWJsZSBhdCAyNjItMjkzICgrMjYxKQorICA3MTggZnJlZSBibG9ja3MsIDI0NSBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjU5LCAzMDgtMTAyNAorICBGcmVlIGlub2RlczogMTItMjU2CitHcm91cCAxOiAoQmxvY2tzIDEwMjUtMjA0OCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTAyNSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTAyNi0xMDMxCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTAzMi0xMjgyCisgIEJsb2NrIGJpdG1hcCBhdCAxMjg0ICgrMjU5KSwgSW5vZGUgYml0bWFwIGF0IDEyODUgKCsyNjApCisgIElub2RlIHRhYmxlIGF0IDEyODYtMTMxNyAoKzI2MSkKKyAgNzMyIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyODMsIDEzMTgtMjA0OAorICBGcmVlIGlub2RlczogMjU3LTUxMgorR3JvdXAgMjogKEJsb2NrcyAyMDQ5LTMwNzIpCisgIEJsb2NrIGJpdG1hcCBhdCAyMDQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjA1MS0yMDgyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIwODMtMzA3MgorICBGcmVlIGlub2RlczogNTEzLTc2OAorR3JvdXAgMzogKEJsb2NrcyAzMDczLTQwOTYpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDMwNzMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDMwNzQtMzA3OQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDMwODAtMzMzMAorICBCbG9jayBiaXRtYXAgYXQgMzMzMiAoKzI1OSksIElub2RlIGJpdG1hcCBhdCAzMzMzICgrMjYwKQorICBJbm9kZSB0YWJsZSBhdCAzMzM0LTMzNjUgKCsyNjEpCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMzMxLCAzMzY2LTQwOTYKKyAgRnJlZSBpbm9kZXM6IDc2OS0xMDI0CitHcm91cCA0OiAoQmxvY2tzIDQwOTctNTEyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDQwOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQwOTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MDk5LTQxMzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDEzMS01MTIwCisgIEZyZWUgaW5vZGVzOiAxMDI1LTEyODAKK0dyb3VwIDU6IChCbG9ja3MgNTEyMS02MTQ0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA1MTIxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA1MTIyLTUxMjcKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA1MTI4LTUzNzgKKyAgQmxvY2sgYml0bWFwIGF0IDUzODAgKCsyNTkpLCBJbm9kZSBiaXRtYXAgYXQgNTM4MSAoKzI2MCkKKyAgSW5vZGUgdGFibGUgYXQgNTM4Mi01NDEzICgrMjYxKQorICA3MzIgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTM3OSwgNTQxNC02MTQ0CisgIEZyZWUgaW5vZGVzOiAxMjgxLTE1MzYKK0dyb3VwIDY6IChCbG9ja3MgNjE0NS03MTY4KQorICBCbG9jayBiaXRtYXAgYXQgNjE0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjE0NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDYxNDctNjE3OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MTc5LTcxNjgKKyAgRnJlZSBpbm9kZXM6IDE1MzctMTc5MgorR3JvdXAgNzogKEJsb2NrcyA3MTY5LTgxOTIpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDcxNjksIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDcxNzAtNzE3NQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDcxNzYtNzQyNgorICBCbG9jayBiaXRtYXAgYXQgNzQyOCAoKzI1OSksIElub2RlIGJpdG1hcCBhdCA3NDI5ICgrMjYwKQorICBJbm9kZSB0YWJsZSBhdCA3NDMwLTc0NjEgKCsyNjEpCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NDI3LCA3NDYyLTgxOTIKKyAgRnJlZSBpbm9kZXM6IDE3OTMtMjA0OAorR3JvdXAgODogKEJsb2NrcyA4MTkzLTkyMTYpCisgIEJsb2NrIGJpdG1hcCBhdCA4MTkzICgrMCksIElub2RlIGJpdG1hcCBhdCA4MTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODE5NS04MjI2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgyMjctOTIxNgorICBGcmVlIGlub2RlczogMjA0OS0yMzA0CitHcm91cCA5OiAoQmxvY2tzIDkyMTctMTAyNDApCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDkyMTcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDkyMTgtOTIyMworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDkyMjQtOTQ3NAorICBCbG9jayBiaXRtYXAgYXQgOTQ3NiAoKzI1OSksIElub2RlIGJpdG1hcCBhdCA5NDc3ICgrMjYwKQorICBJbm9kZSB0YWJsZSBhdCA5NDc4LTk1MDkgKCsyNjEpCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NDc1LCA5NTEwLTEwMjQwCisgIEZyZWUgaW5vZGVzOiAyMzA1LTI1NjAKK0dyb3VwIDEwOiAoQmxvY2tzIDEwMjQxLTExMjY0KQorICBCbG9jayBiaXRtYXAgYXQgMTAyNDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMjQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAyNDMtMTAyNzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAyNzUtMTEyNjQKKyAgRnJlZSBpbm9kZXM6IDI1NjEtMjgxNgorR3JvdXAgMTE6IChCbG9ja3MgMTEyNjUtMTIyODgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTI2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTEyNjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTI2Ny0xMTI5OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTI5OS0xMjI4OAorICBGcmVlIGlub2RlczogMjgxNy0zMDcyCitHcm91cCAxMjogKEJsb2NrcyAxMjI4OS0xMzMxMikKKyAgQmxvY2sgYml0bWFwIGF0IDEyMjg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjI5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyMjkxLTEyMzIyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMzIzLTEzMzEyCisgIEZyZWUgaW5vZGVzOiAzMDczLTMzMjgKK0dyb3VwIDEzOiAoQmxvY2tzIDEzMzEzLTE0MzM2KQorICBCbG9jayBiaXRtYXAgYXQgMTMzMTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzMzE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMzMTUtMTMzNDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMzNDctMTQzMzYKKyAgRnJlZSBpbm9kZXM6IDMzMjktMzU4NAorR3JvdXAgMTQ6IChCbG9ja3MgMTQzMzctMTUzNjApCisgIEJsb2NrIGJpdG1hcCBhdCAxNDMzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQzMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDMzOS0xNDM3MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDM3MS0xNTM2MAorICBGcmVlIGlub2RlczogMzU4NS0zODQwCitHcm91cCAxNTogKEJsb2NrcyAxNTM2MS0xNjM4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDE1MzYxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTM2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1MzYzLTE1Mzk0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1Mzk1LTE2Mzg0CisgIEZyZWUgaW5vZGVzOiAzODQxLTQwOTYKK0dyb3VwIDE2OiAoQmxvY2tzIDE2Mzg1LTE3NDA4KQorICBCbG9jayBiaXRtYXAgYXQgMTYzODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2Mzg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTYzODctMTY0MTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTY0MTktMTc0MDgKKyAgRnJlZSBpbm9kZXM6IDQwOTctNDM1MgorR3JvdXAgMTc6IChCbG9ja3MgMTc0MDktMTg0MzIpCisgIEJsb2NrIGJpdG1hcCBhdCAxNzQwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTc0MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNzQxMS0xNzQ0MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNzQ0My0xODQzMgorICBGcmVlIGlub2RlczogNDM1My00NjA4CitHcm91cCAxODogKEJsb2NrcyAxODQzMy0xOTQ1NikKKyAgQmxvY2sgYml0bWFwIGF0IDE4NDMzICgrMCksIElub2RlIGJpdG1hcCBhdCAxODQzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE4NDM1LTE4NDY2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE4NDY3LTE5NDU2CisgIEZyZWUgaW5vZGVzOiA0NjA5LTQ4NjQKK0dyb3VwIDE5OiAoQmxvY2tzIDE5NDU3LTIwNDgwKQorICBCbG9jayBiaXRtYXAgYXQgMTk0NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE5NDU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTk0NTktMTk0OTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTk0OTEtMjA0ODAKKyAgRnJlZSBpbm9kZXM6IDQ4NjUtNTEyMAorR3JvdXAgMjA6IChCbG9ja3MgMjA0ODEtMjE1MDQpCisgIEJsb2NrIGJpdG1hcCBhdCAyMDQ4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjA0ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMDQ4My0yMDUxNCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDUxNS0yMTUwNAorICBGcmVlIGlub2RlczogNTEyMS01Mzc2CitHcm91cCAyMTogKEJsb2NrcyAyMTUwNS0yMjUyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDIxNTA1ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMTUwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIxNTA3LTIxNTM4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIxNTM5LTIyNTI4CisgIEZyZWUgaW5vZGVzOiA1Mzc3LTU2MzIKK0dyb3VwIDIyOiAoQmxvY2tzIDIyNTI5LTIzNTUyKQorICBCbG9jayBiaXRtYXAgYXQgMjI1MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIyNTMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjI1MzEtMjI1NjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjI1NjMtMjM1NTIKKyAgRnJlZSBpbm9kZXM6IDU2MzMtNTg4OAorR3JvdXAgMjM6IChCbG9ja3MgMjM1NTMtMjQ1NzYpCisgIEJsb2NrIGJpdG1hcCBhdCAyMzU1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjM1NTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMzU1NS0yMzU4NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMzU4Ny0yNDU3NgorICBGcmVlIGlub2RlczogNTg4OS02MTQ0CitHcm91cCAyNDogKEJsb2NrcyAyNDU3Ny0yNTYwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDI0NTc3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNDU3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI0NTc5LTI0NjEwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI0NjExLTI1NjAwCisgIEZyZWUgaW5vZGVzOiA2MTQ1LTY0MDAKK0dyb3VwIDI1OiAoQmxvY2tzIDI1NjAxLTI2NjI0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyNTYwMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjU2MDItMjU2MDcKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyNTYwOC0yNTg1OAorICBCbG9jayBiaXRtYXAgYXQgMjU4NTkgKCsyNTgpLCBJbm9kZSBiaXRtYXAgYXQgMjU4NjAgKCsyNTkpCisgIElub2RlIHRhYmxlIGF0IDI1ODYxLTI1ODkyICgrMjYwKQorICA3MzIgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjU4OTMtMjY2MjQKKyAgRnJlZSBpbm9kZXM6IDY0MDEtNjY1NgorR3JvdXAgMjY6IChCbG9ja3MgMjY2MjUtMjc2NDgpCisgIEJsb2NrIGJpdG1hcCBhdCAyNjYyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjY2MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNjYyNy0yNjY1OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNjY1OS0yNzY0OAorICBGcmVlIGlub2RlczogNjY1Ny02OTEyCitHcm91cCAyNzogKEJsb2NrcyAyNzY0OS0yODY3MikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjc2NDksIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI3NjUwLTI3NjU1CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjc2NTYtMjc5MDYKKyAgQmxvY2sgYml0bWFwIGF0IDI3OTA3ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDI3OTA4ICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCAyNzkwOS0yNzk0MCAoKzI2MCkKKyAgNzMyIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI3OTQxLTI4NjcyCisgIEZyZWUgaW5vZGVzOiA2OTEzLTcxNjgKK0dyb3VwIDI4OiAoQmxvY2tzIDI4NjczLTI5Njk2KQorICBCbG9jayBiaXRtYXAgYXQgMjg2NzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI4Njc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjg2NzUtMjg3MDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjg3MDctMjk2OTYKKyAgRnJlZSBpbm9kZXM6IDcxNjktNzQyNAorR3JvdXAgMjk6IChCbG9ja3MgMjk2OTctMzA3MjApCisgIEJsb2NrIGJpdG1hcCBhdCAyOTY5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjk2OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyOTY5OS0yOTczMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyOTczMS0zMDcyMAorICBGcmVlIGlub2RlczogNzQyNS03NjgwCitHcm91cCAzMDogKEJsb2NrcyAzMDcyMS0zMTc0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDMwNzIxICgrMCksIElub2RlIGJpdG1hcCBhdCAzMDcyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMwNzIzLTMwNzU0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMwNzU1LTMxNzQ0CisgIEZyZWUgaW5vZGVzOiA3NjgxLTc5MzYKK0dyb3VwIDMxOiAoQmxvY2tzIDMxNzQ1LTMyNzY4KQorICBCbG9jayBiaXRtYXAgYXQgMzE3NDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMxNzQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzE3NDctMzE3NzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzE3NzktMzI3NjgKKyAgRnJlZSBpbm9kZXM6IDc5MzctODE5MgorR3JvdXAgMzI6IChCbG9ja3MgMzI3NjktMzM3OTIpCisgIEJsb2NrIGJpdG1hcCBhdCAzMjc2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzI3NzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMjc3MS0zMjgwMiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMjgwMy0zMzc5MgorICBGcmVlIGlub2RlczogODE5My04NDQ4CitHcm91cCAzMzogKEJsb2NrcyAzMzc5My0zNDgxNikKKyAgQmxvY2sgYml0bWFwIGF0IDMzNzkzICgrMCksIElub2RlIGJpdG1hcCBhdCAzMzc5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMzNzk1LTMzODI2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMzODI3LTM0ODE2CisgIEZyZWUgaW5vZGVzOiA4NDQ5LTg3MDQKK0dyb3VwIDM0OiAoQmxvY2tzIDM0ODE3LTM1ODQwKQorICBCbG9jayBiaXRtYXAgYXQgMzQ4MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM0ODE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzQ4MTktMzQ4NTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzQ4NTEtMzU4NDAKKyAgRnJlZSBpbm9kZXM6IDg3MDUtODk2MAorR3JvdXAgMzU6IChCbG9ja3MgMzU4NDEtMzY4NjQpCisgIEJsb2NrIGJpdG1hcCBhdCAzNTg0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzU4NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNTg0My0zNTg3NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNTg3NS0zNjg2NAorICBGcmVlIGlub2RlczogODk2MS05MjE2CitHcm91cCAzNjogKEJsb2NrcyAzNjg2NS0zNzg4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDM2ODY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNjg2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM2ODY3LTM2ODk4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM2ODk5LTM3ODg4CisgIEZyZWUgaW5vZGVzOiA5MjE3LTk0NzIKK0dyb3VwIDM3OiAoQmxvY2tzIDM3ODg5LTM4OTEyKQorICBCbG9jayBiaXRtYXAgYXQgMzc4ODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM3ODkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzc4OTEtMzc5MjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzc5MjMtMzg5MTIKKyAgRnJlZSBpbm9kZXM6IDk0NzMtOTcyOAorR3JvdXAgMzg6IChCbG9ja3MgMzg5MTMtMzk5MzYpCisgIEJsb2NrIGJpdG1hcCBhdCAzODkxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzg5MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzODkxNS0zODk0NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzODk0Ny0zOTkzNgorICBGcmVlIGlub2RlczogOTcyOS05OTg0CitHcm91cCAzOTogKEJsb2NrcyAzOTkzNy00MDk2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDM5OTM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAzOTkzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM5OTM5LTM5OTcwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM5OTcxLTQwOTYwCisgIEZyZWUgaW5vZGVzOiA5OTg1LTEwMjQwCitHcm91cCA0MDogKEJsb2NrcyA0MDk2MS00MTk4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDQwOTYxICgrMCksIElub2RlIGJpdG1hcCBhdCA0MDk2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQwOTYzLTQwOTk0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQwOTk1LTQxOTg0CisgIEZyZWUgaW5vZGVzOiAxMDI0MS0xMDQ5NgorR3JvdXAgNDE6IChCbG9ja3MgNDE5ODUtNDMwMDgpCisgIEJsb2NrIGJpdG1hcCBhdCA0MTk4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDE5ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MTk4Ny00MjAxOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MjAxOS00MzAwOAorICBGcmVlIGlub2RlczogMTA0OTctMTA3NTIKK0dyb3VwIDQyOiAoQmxvY2tzIDQzMDA5LTQ0MDMyKQorICBCbG9jayBiaXRtYXAgYXQgNDMwMDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQzMDEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDMwMTEtNDMwNDIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDMwNDMtNDQwMzIKKyAgRnJlZSBpbm9kZXM6IDEwNzUzLTExMDA4CitHcm91cCA0MzogKEJsb2NrcyA0NDAzMy00NTA1NikKKyAgQmxvY2sgYml0bWFwIGF0IDQ0MDMzICgrMCksIElub2RlIGJpdG1hcCBhdCA0NDAzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ0MDM1LTQ0MDY2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ0MDY3LTQ1MDU2CisgIEZyZWUgaW5vZGVzOiAxMTAwOS0xMTI2NAorR3JvdXAgNDQ6IChCbG9ja3MgNDUwNTctNDYwODApCisgIEJsb2NrIGJpdG1hcCBhdCA0NTA1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDUwNTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0NTA1OS00NTA5MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NTA5MS00NjA4MAorICBGcmVlIGlub2RlczogMTEyNjUtMTE1MjAKK0dyb3VwIDQ1OiAoQmxvY2tzIDQ2MDgxLTQ3MTA0KQorICBCbG9jayBiaXRtYXAgYXQgNDYwODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ2MDgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDYwODMtNDYxMTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDYxMTUtNDcxMDQKKyAgRnJlZSBpbm9kZXM6IDExNTIxLTExNzc2CitHcm91cCA0NjogKEJsb2NrcyA0NzEwNS00ODEyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ3MTA1ICgrMCksIElub2RlIGJpdG1hcCBhdCA0NzEwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ3MTA3LTQ3MTM4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ3MTM5LTQ4MTI4CisgIEZyZWUgaW5vZGVzOiAxMTc3Ny0xMjAzMgorR3JvdXAgNDc6IChCbG9ja3MgNDgxMjktNDkxNTIpCisgIEJsb2NrIGJpdG1hcCBhdCA0ODEyOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDgxMzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0ODEzMS00ODE2MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0ODE2My00OTE1MgorICBGcmVlIGlub2RlczogMTIwMzMtMTIyODgKK0dyb3VwIDQ4OiAoQmxvY2tzIDQ5MTUzLTUwMTc2KQorICBCbG9jayBiaXRtYXAgYXQgNDkxNTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ5MTU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDkxNTUtNDkxODYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDkxODctNTAxNzYKKyAgRnJlZSBpbm9kZXM6IDEyMjg5LTEyNTQ0CitHcm91cCA0OTogKEJsb2NrcyA1MDE3Ny01MTIwMCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNTAxNzcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDUwMTc4LTUwMTgzCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNTAxODQtNTA0MzQKKyAgQmxvY2sgYml0bWFwIGF0IDUwNDM1ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDUwNDM2ICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCA1MDQzNy01MDQ2OCAoKzI2MCkKKyAgNzMyIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUwNDY5LTUxMjAwCisgIEZyZWUgaW5vZGVzOiAxMjU0NS0xMjgwMAorR3JvdXAgNTA6IChCbG9ja3MgNTEyMDEtNTIyMjQpCisgIEJsb2NrIGJpdG1hcCBhdCA1MTIwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTEyMDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1MTIwMy01MTIzNCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MTIzNS01MjIyNAorICBGcmVlIGlub2RlczogMTI4MDEtMTMwNTYKK0dyb3VwIDUxOiAoQmxvY2tzIDUyMjI1LTUzMjQ4KQorICBCbG9jayBiaXRtYXAgYXQgNTIyMjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDUyMjI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTIyMjctNTIyNTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTIyNTktNTMyNDgKKyAgRnJlZSBpbm9kZXM6IDEzMDU3LTEzMzEyCitHcm91cCA1MjogKEJsb2NrcyA1MzI0OS01NDI3MikKKyAgQmxvY2sgYml0bWFwIGF0IDUzMjQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCA1MzI1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDUzMjUxLTUzMjgyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUzMjgzLTU0MjcyCisgIEZyZWUgaW5vZGVzOiAxMzMxMy0xMzU2OAorR3JvdXAgNTM6IChCbG9ja3MgNTQyNzMtNTUyOTYpCisgIEJsb2NrIGJpdG1hcCBhdCA1NDI3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTQyNzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1NDI3NS01NDMwNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NDMwNy01NTI5NgorICBGcmVlIGlub2RlczogMTM1NjktMTM4MjQKK0dyb3VwIDU0OiAoQmxvY2tzIDU1Mjk3LTU2MzIwKQorICBCbG9jayBiaXRtYXAgYXQgNTUyOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU1Mjk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTUyOTktNTUzMzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTUzMzEtNTYzMjAKKyAgRnJlZSBpbm9kZXM6IDEzODI1LTE0MDgwCitHcm91cCA1NTogKEJsb2NrcyA1NjMyMS01NzM0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDU2MzIxICgrMCksIElub2RlIGJpdG1hcCBhdCA1NjMyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU2MzIzLTU2MzU0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU2MzU1LTU3MzQ0CisgIEZyZWUgaW5vZGVzOiAxNDA4MS0xNDMzNgorR3JvdXAgNTY6IChCbG9ja3MgNTczNDUtNTgzNjgpCisgIEJsb2NrIGJpdG1hcCBhdCA1NzM0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTczNDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1NzM0Ny01NzM3OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NzM3OS01ODM2OAorICBGcmVlIGlub2RlczogMTQzMzctMTQ1OTIKK0dyb3VwIDU3OiAoQmxvY2tzIDU4MzY5LTU5MzkyKQorICBCbG9jayBiaXRtYXAgYXQgNTgzNjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU4MzcwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTgzNzEtNTg0MDIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTg0MDMtNTkzOTIKKyAgRnJlZSBpbm9kZXM6IDE0NTkzLTE0ODQ4CitHcm91cCA1ODogKEJsb2NrcyA1OTM5My02MDQxNikKKyAgQmxvY2sgYml0bWFwIGF0IDU5MzkzICgrMCksIElub2RlIGJpdG1hcCBhdCA1OTM5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU5Mzk1LTU5NDI2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU5NDI3LTYwNDE2CisgIEZyZWUgaW5vZGVzOiAxNDg0OS0xNTEwNAorR3JvdXAgNTk6IChCbG9ja3MgNjA0MTctNjE0NDApCisgIEJsb2NrIGJpdG1hcCBhdCA2MDQxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjA0MTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MDQxOS02MDQ1MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MDQ1MS02MTQ0MAorICBGcmVlIGlub2RlczogMTUxMDUtMTUzNjAKK0dyb3VwIDYwOiAoQmxvY2tzIDYxNDQxLTYyNDY0KQorICBCbG9jayBiaXRtYXAgYXQgNjE0NDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYxNDQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjE0NDMtNjE0NzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjE0NzUtNjI0NjQKKyAgRnJlZSBpbm9kZXM6IDE1MzYxLTE1NjE2CitHcm91cCA2MTogKEJsb2NrcyA2MjQ2NS02MzQ4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDYyNDY1ICgrMCksIElub2RlIGJpdG1hcCBhdCA2MjQ2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDYyNDY3LTYyNDk4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDYyNDk5LTYzNDg4CisgIEZyZWUgaW5vZGVzOiAxNTYxNy0xNTg3MgorR3JvdXAgNjI6IChCbG9ja3MgNjM0ODktNjQ1MTIpCisgIEJsb2NrIGJpdG1hcCBhdCA2MzQ4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjM0OTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MzQ5MS02MzUyMiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MzUyMy02NDUxMgorICBGcmVlIGlub2RlczogMTU4NzMtMTYxMjgKK0dyb3VwIDYzOiAoQmxvY2tzIDY0NTEzLTY1NTM2KQorICBCbG9jayBiaXRtYXAgYXQgNjQ1MTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDY0NTE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjQ1MTUtNjQ1NDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjQ1NDctNjU1MzYKKyAgRnJlZSBpbm9kZXM6IDE2MTI5LTE2Mzg0CitHcm91cCA2NDogKEJsb2NrcyA2NTUzNy02NjU2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDY1NTM3ICgrMCksIElub2RlIGJpdG1hcCBhdCA2NTUzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY1NTM5LTY1NTcwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY1NTcxLTY2NTYwCisgIEZyZWUgaW5vZGVzOiAxNjM4NS0xNjY0MAorR3JvdXAgNjU6IChCbG9ja3MgNjY1NjEtNjc1ODQpCisgIEJsb2NrIGJpdG1hcCBhdCA2NjU2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjY1NjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2NjU2My02NjU5NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NjU5NS02NzU4NAorICBGcmVlIGlub2RlczogMTY2NDEtMTY4OTYKK0dyb3VwIDY2OiAoQmxvY2tzIDY3NTg1LTY4NjA4KQorICBCbG9jayBiaXRtYXAgYXQgNjc1ODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDY3NTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjc1ODctNjc2MTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjc2MTktNjg2MDgKKyAgRnJlZSBpbm9kZXM6IDE2ODk3LTE3MTUyCitHcm91cCA2NzogKEJsb2NrcyA2ODYwOS02OTYzMikKKyAgQmxvY2sgYml0bWFwIGF0IDY4NjA5ICgrMCksIElub2RlIGJpdG1hcCBhdCA2ODYxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY4NjExLTY4NjQyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY4NjQzLTY5NjMyCisgIEZyZWUgaW5vZGVzOiAxNzE1My0xNzQwOAorR3JvdXAgNjg6IChCbG9ja3MgNjk2MzMtNzA2NTYpCisgIEJsb2NrIGJpdG1hcCBhdCA2OTYzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjk2MzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2OTYzNS02OTY2NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2OTY2Ny03MDY1NgorICBGcmVlIGlub2RlczogMTc0MDktMTc2NjQKK0dyb3VwIDY5OiAoQmxvY2tzIDcwNjU3LTcxNjgwKQorICBCbG9jayBiaXRtYXAgYXQgNzA2NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDcwNjU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzA2NTktNzA2OTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzA2OTEtNzE2ODAKKyAgRnJlZSBpbm9kZXM6IDE3NjY1LTE3OTIwCitHcm91cCA3MDogKEJsb2NrcyA3MTY4MS03MjcwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDcxNjgxICgrMCksIElub2RlIGJpdG1hcCBhdCA3MTY4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDcxNjgzLTcxNzE0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcxNzE1LTcyNzA0CisgIEZyZWUgaW5vZGVzOiAxNzkyMS0xODE3NgorR3JvdXAgNzE6IChCbG9ja3MgNzI3MDUtNzM3MjgpCisgIEJsb2NrIGJpdG1hcCBhdCA3MjcwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzI3MDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3MjcwNy03MjczOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MjczOS03MzcyOAorICBGcmVlIGlub2RlczogMTgxNzctMTg0MzIKK0dyb3VwIDcyOiAoQmxvY2tzIDczNzI5LTc0NzUyKQorICBCbG9jayBiaXRtYXAgYXQgNzM3MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDczNzMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzM3MzEtNzM3NjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzM3NjMtNzQ3NTIKKyAgRnJlZSBpbm9kZXM6IDE4NDMzLTE4Njg4CitHcm91cCA3MzogKEJsb2NrcyA3NDc1My03NTc3NikKKyAgQmxvY2sgYml0bWFwIGF0IDc0NzUzICgrMCksIElub2RlIGJpdG1hcCBhdCA3NDc1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc0NzU1LTc0Nzg2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc0Nzg3LTc1Nzc2CisgIEZyZWUgaW5vZGVzOiAxODY4OS0xODk0NAorR3JvdXAgNzQ6IChCbG9ja3MgNzU3NzctNzY4MDApCisgIEJsb2NrIGJpdG1hcCBhdCA3NTc3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzU3NzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NTc3OS03NTgxMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NTgxMS03NjgwMAorICBGcmVlIGlub2RlczogMTg5NDUtMTkyMDAKK0dyb3VwIDc1OiAoQmxvY2tzIDc2ODAxLTc3ODI0KQorICBCbG9jayBiaXRtYXAgYXQgNzY4MDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc2ODAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzY4MDMtNzY4MzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzY4MzUtNzc4MjQKKyAgRnJlZSBpbm9kZXM6IDE5MjAxLTE5NDU2CitHcm91cCA3NjogKEJsb2NrcyA3NzgyNS03ODg0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDc3ODI1ICgrMCksIElub2RlIGJpdG1hcCBhdCA3NzgyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc3ODI3LTc3ODU4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc3ODU5LTc4ODQ4CisgIEZyZWUgaW5vZGVzOiAxOTQ1Ny0xOTcxMgorR3JvdXAgNzc6IChCbG9ja3MgNzg4NDktNzk4NzIpCisgIEJsb2NrIGJpdG1hcCBhdCA3ODg0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzg4NTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3ODg1MS03ODg4MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3ODg4My03OTg3MgorICBGcmVlIGlub2RlczogMTk3MTMtMTk5NjgKK0dyb3VwIDc4OiAoQmxvY2tzIDc5ODczLTgwODk2KQorICBCbG9jayBiaXRtYXAgYXQgNzk4NzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc5ODc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzk4NzUtNzk5MDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzk5MDctODA4OTYKKyAgRnJlZSBpbm9kZXM6IDE5OTY5LTIwMjI0CitHcm91cCA3OTogKEJsb2NrcyA4MDg5Ny04MTkyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDgwODk3ICgrMCksIElub2RlIGJpdG1hcCBhdCA4MDg5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDgwODk5LTgwOTMwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgwOTMxLTgxOTIwCisgIEZyZWUgaW5vZGVzOiAyMDIyNS0yMDQ4MAorR3JvdXAgODA6IChCbG9ja3MgODE5MjEtODI5NDQpCisgIEJsb2NrIGJpdG1hcCBhdCA4MTkyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODE5MjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4MTkyMy04MTk1NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4MTk1NS04Mjk0NAorICBGcmVlIGlub2RlczogMjA0ODEtMjA3MzYKK0dyb3VwIDgxOiAoQmxvY2tzIDgyOTQ1LTgzOTY4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA4Mjk0NSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgODI5NDYtODI5NTEKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA4Mjk1Mi04MzIwMgorICBCbG9jayBiaXRtYXAgYXQgODMyMDMgKCsyNTgpLCBJbm9kZSBiaXRtYXAgYXQgODMyMDQgKCsyNTkpCisgIElub2RlIHRhYmxlIGF0IDgzMjA1LTgzMjM2ICgrMjYwKQorICA3MzIgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODMyMzctODM5NjgKKyAgRnJlZSBpbm9kZXM6IDIwNzM3LTIwOTkyCitHcm91cCA4MjogKEJsb2NrcyA4Mzk2OS04NDk5MikKKyAgQmxvY2sgYml0bWFwIGF0IDgzOTY5ICgrMCksIElub2RlIGJpdG1hcCBhdCA4Mzk3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDgzOTcxLTg0MDAyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg0MDAzLTg0OTkyCisgIEZyZWUgaW5vZGVzOiAyMDk5My0yMTI0OAorR3JvdXAgODM6IChCbG9ja3MgODQ5OTMtODYwMTYpCisgIEJsb2NrIGJpdG1hcCBhdCA4NDk5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODQ5OTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4NDk5NS04NTAyNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NTAyNy04NjAxNgorICBGcmVlIGlub2RlczogMjEyNDktMjE1MDQKK0dyb3VwIDg0OiAoQmxvY2tzIDg2MDE3LTg3MDQwKQorICBCbG9jayBiaXRtYXAgYXQgODYwMTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg2MDE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODYwMTktODYwNTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODYwNTEtODcwNDAKKyAgRnJlZSBpbm9kZXM6IDIxNTA1LTIxNzYwCitHcm91cCA4NTogKEJsb2NrcyA4NzA0MS04ODA2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDg3MDQxICgrMCksIElub2RlIGJpdG1hcCBhdCA4NzA0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg3MDQzLTg3MDc0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg3MDc1LTg4MDY0CisgIEZyZWUgaW5vZGVzOiAyMTc2MS0yMjAxNgorR3JvdXAgODY6IChCbG9ja3MgODgwNjUtODkwODgpCisgIEJsb2NrIGJpdG1hcCBhdCA4ODA2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODgwNjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4ODA2Ny04ODA5OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4ODA5OS04OTA4OAorICBGcmVlIGlub2RlczogMjIwMTctMjIyNzIKK0dyb3VwIDg3OiAoQmxvY2tzIDg5MDg5LTkwMTEyKQorICBCbG9jayBiaXRtYXAgYXQgODkwODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg5MDkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODkwOTEtODkxMjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODkxMjMtOTAxMTIKKyAgRnJlZSBpbm9kZXM6IDIyMjczLTIyNTI4CitHcm91cCA4ODogKEJsb2NrcyA5MDExMy05MTEzNikKKyAgQmxvY2sgYml0bWFwIGF0IDkwMTEzICgrMCksIElub2RlIGJpdG1hcCBhdCA5MDExNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDkwMTE1LTkwMTQ2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkwMTQ3LTkxMTM2CisgIEZyZWUgaW5vZGVzOiAyMjUyOS0yMjc4NAorR3JvdXAgODk6IChCbG9ja3MgOTExMzctOTIxNjApCisgIEJsb2NrIGJpdG1hcCBhdCA5MTEzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTExMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5MTEzOS05MTE3MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MTE3MS05MjE2MAorICBGcmVlIGlub2RlczogMjI3ODUtMjMwNDAKK0dyb3VwIDkwOiAoQmxvY2tzIDkyMTYxLTkzMTg0KQorICBCbG9jayBiaXRtYXAgYXQgOTIxNjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDkyMTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTIxNjMtOTIxOTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTIxOTUtOTMxODQKKyAgRnJlZSBpbm9kZXM6IDIzMDQxLTIzMjk2CitHcm91cCA5MTogKEJsb2NrcyA5MzE4NS05NDIwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDkzMTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCA5MzE4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDkzMTg3LTkzMjE4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkzMjE5LTk0MjA4CisgIEZyZWUgaW5vZGVzOiAyMzI5Ny0yMzU1MgorR3JvdXAgOTI6IChCbG9ja3MgOTQyMDktOTUyMzIpCisgIEJsb2NrIGJpdG1hcCBhdCA5NDIwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTQyMTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5NDIxMS05NDI0MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NDI0My05NTIzMgorICBGcmVlIGlub2RlczogMjM1NTMtMjM4MDgKK0dyb3VwIDkzOiAoQmxvY2tzIDk1MjMzLTk2MjU2KQorICBCbG9jayBiaXRtYXAgYXQgOTUyMzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk1MjM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTUyMzUtOTUyNjYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTUyNjctOTYyNTYKKyAgRnJlZSBpbm9kZXM6IDIzODA5LTI0MDY0CitHcm91cCA5NDogKEJsb2NrcyA5NjI1Ny05NzI4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDk2MjU3ICgrMCksIElub2RlIGJpdG1hcCBhdCA5NjI1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDk2MjU5LTk2MjkwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk2MjkxLTk3MjgwCisgIEZyZWUgaW5vZGVzOiAyNDA2NS0yNDMyMAorR3JvdXAgOTU6IChCbG9ja3MgOTcyODEtOTgzMDQpCisgIEJsb2NrIGJpdG1hcCBhdCA5NzI4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTcyODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5NzI4My05NzMxNCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NzMxNS05ODMwNAorICBGcmVlIGlub2RlczogMjQzMjEtMjQ1NzYKK0dyb3VwIDk2OiAoQmxvY2tzIDk4MzA1LTk5MzI4KQorICBCbG9jayBiaXRtYXAgYXQgOTgzMDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk4MzA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTgzMDctOTgzMzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTgzMzktOTkzMjgKKyAgRnJlZSBpbm9kZXM6IDI0NTc3LTI0ODMyCitHcm91cCA5NzogKEJsb2NrcyA5OTMyOS0xMDAzNTIpCisgIEJsb2NrIGJpdG1hcCBhdCA5OTMyOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTkzMzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5OTMzMS05OTM2MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5OTM2My0xMDAzNTIKKyAgRnJlZSBpbm9kZXM6IDI0ODMzLTI1MDg4CitHcm91cCA5ODogKEJsb2NrcyAxMDAzNTMtMTAxMzc2KQorICBCbG9jayBiaXRtYXAgYXQgMTAwMzUzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDAzNTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDAzNTUtMTAwMzg2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMDM4Ny0xMDEzNzYKKyAgRnJlZSBpbm9kZXM6IDI1MDg5LTI1MzQ0CitHcm91cCA5OTogKEJsb2NrcyAxMDEzNzctMTAyNDAwKQorICBCbG9jayBiaXRtYXAgYXQgMTAxMzc3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDEzNzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDEzNzktMTAxNDEwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMTQxMS0xMDI0MDAKKyAgRnJlZSBpbm9kZXM6IDI1MzQ1LTI1NjAwCitHcm91cCAxMDA6IChCbG9ja3MgMTAyNDAxLTEwMzQyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjQwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTAyNDAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAyNDAzLTEwMjQzNCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDI0MzUtMTAzNDI0CisgIEZyZWUgaW5vZGVzOiAyNTYwMS0yNTg1NgorR3JvdXAgMTAxOiAoQmxvY2tzIDEwMzQyNS0xMDQ0NDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDM0MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMzQyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMzQyNy0xMDM0NTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAzNDU5LTEwNDQ0OAorICBGcmVlIGlub2RlczogMjU4NTctMjYxMTIKK0dyb3VwIDEwMjogKEJsb2NrcyAxMDQ0NDktMTA1NDcyKQorICBCbG9jayBiaXRtYXAgYXQgMTA0NDQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDQ0NTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDQ0NTEtMTA0NDgyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwNDQ4My0xMDU0NzIKKyAgRnJlZSBpbm9kZXM6IDI2MTEzLTI2MzY4CitHcm91cCAxMDM6IChCbG9ja3MgMTA1NDczLTEwNjQ5NikKKyAgQmxvY2sgYml0bWFwIGF0IDEwNTQ3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA1NDc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA1NDc1LTEwNTUwNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDU1MDctMTA2NDk2CisgIEZyZWUgaW5vZGVzOiAyNjM2OS0yNjYyNAorR3JvdXAgMTA0OiAoQmxvY2tzIDEwNjQ5Ny0xMDc1MjApCisgIEJsb2NrIGJpdG1hcCBhdCAxMDY0OTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwNjQ5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwNjQ5OS0xMDY1MzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA2NTMxLTEwNzUyMAorICBGcmVlIGlub2RlczogMjY2MjUtMjY4ODAKK0dyb3VwIDEwNTogKEJsb2NrcyAxMDc1MjEtMTA4NTQ0KQorICBCbG9jayBiaXRtYXAgYXQgMTA3NTIxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDc1MjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDc1MjMtMTA3NTU0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwNzU1NS0xMDg1NDQKKyAgRnJlZSBpbm9kZXM6IDI2ODgxLTI3MTM2CitHcm91cCAxMDY6IChCbG9ja3MgMTA4NTQ1LTEwOTU2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwODU0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA4NTQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA4NTQ3LTEwODU3OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDg1NzktMTA5NTY4CisgIEZyZWUgaW5vZGVzOiAyNzEzNy0yNzM5MgorR3JvdXAgMTA3OiAoQmxvY2tzIDEwOTU2OS0xMTA1OTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDk1NjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwOTU3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwOTU3MS0xMDk2MDIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA5NjAzLTExMDU5MgorICBGcmVlIGlub2RlczogMjczOTMtMjc2NDgKK0dyb3VwIDEwODogKEJsb2NrcyAxMTA1OTMtMTExNjE2KQorICBCbG9jayBiaXRtYXAgYXQgMTEwNTkzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTA1OTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTA1OTUtMTEwNjI2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExMDYyNy0xMTE2MTYKKyAgRnJlZSBpbm9kZXM6IDI3NjQ5LTI3OTA0CitHcm91cCAxMDk6IChCbG9ja3MgMTExNjE3LTExMjY0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDExMTYxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTExNjE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTExNjE5LTExMTY1MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTE2NTEtMTEyNjQwCisgIEZyZWUgaW5vZGVzOiAyNzkwNS0yODE2MAorR3JvdXAgMTEwOiAoQmxvY2tzIDExMjY0MS0xMTM2NjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTI2NDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExMjY0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExMjY0My0xMTI2NzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEyNjc1LTExMzY2NAorICBGcmVlIGlub2RlczogMjgxNjEtMjg0MTYKK0dyb3VwIDExMTogKEJsb2NrcyAxMTM2NjUtMTE0Njg4KQorICBCbG9jayBiaXRtYXAgYXQgMTEzNjY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTM2NjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTM2NjctMTEzNjk4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExMzY5OS0xMTQ2ODgKKyAgRnJlZSBpbm9kZXM6IDI4NDE3LTI4NjcyCitHcm91cCAxMTI6IChCbG9ja3MgMTE0Njg5LTExNTcxMikKKyAgQmxvY2sgYml0bWFwIGF0IDExNDY4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE0NjkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE0NjkxLTExNDcyMiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTQ3MjMtMTE1NzEyCisgIEZyZWUgaW5vZGVzOiAyODY3My0yODkyOAorR3JvdXAgMTEzOiAoQmxvY2tzIDExNTcxMy0xMTY3MzYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTU3MTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExNTcxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExNTcxNS0xMTU3NDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE1NzQ3LTExNjczNgorICBGcmVlIGlub2RlczogMjg5MjktMjkxODQKK0dyb3VwIDExNDogKEJsb2NrcyAxMTY3MzctMTE3NzYwKQorICBCbG9jayBiaXRtYXAgYXQgMTE2NzM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTY3MzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTY3MzktMTE2NzcwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExNjc3MS0xMTc3NjAKKyAgRnJlZSBpbm9kZXM6IDI5MTg1LTI5NDQwCitHcm91cCAxMTU6IChCbG9ja3MgMTE3NzYxLTExODc4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDExNzc2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE3NzYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE3NzYzLTExNzc5NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTc3OTUtMTE4Nzg0CisgIEZyZWUgaW5vZGVzOiAyOTQ0MS0yOTY5NgorR3JvdXAgMTE2OiAoQmxvY2tzIDExODc4NS0xMTk4MDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTg3ODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExODc4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExODc4Ny0xMTg4MTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE4ODE5LTExOTgwOAorICBGcmVlIGlub2RlczogMjk2OTctMjk5NTIKK0dyb3VwIDExNzogKEJsb2NrcyAxMTk4MDktMTIwODMyKQorICBCbG9jayBiaXRtYXAgYXQgMTE5ODA5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTk4MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTk4MTEtMTE5ODQyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExOTg0My0xMjA4MzIKKyAgRnJlZSBpbm9kZXM6IDI5OTUzLTMwMjA4CitHcm91cCAxMTg6IChCbG9ja3MgMTIwODMzLTEyMTg1NikKKyAgQmxvY2sgYml0bWFwIGF0IDEyMDgzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIwODM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIwODM1LTEyMDg2NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjA4NjctMTIxODU2CisgIEZyZWUgaW5vZGVzOiAzMDIwOS0zMDQ2NAorR3JvdXAgMTE5OiAoQmxvY2tzIDEyMTg1Ny0xMjI4ODApCisgIEJsb2NrIGJpdG1hcCBhdCAxMjE4NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyMTg1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyMTg1OS0xMjE4OTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIxODkxLTEyMjg4MAorICBGcmVlIGlub2RlczogMzA0NjUtMzA3MjAKK0dyb3VwIDEyMDogKEJsb2NrcyAxMjI4ODEtMTIzOTA0KQorICBCbG9jayBiaXRtYXAgYXQgMTIyODgxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjI4ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjI4ODMtMTIyOTE0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMjkxNS0xMjM5MDQKKyAgRnJlZSBpbm9kZXM6IDMwNzIxLTMwOTc2CitHcm91cCAxMjE6IChCbG9ja3MgMTIzOTA1LTEyNDkyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDEyMzkwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIzOTA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIzOTA3LTEyMzkzOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjM5MzktMTI0OTI4CisgIEZyZWUgaW5vZGVzOiAzMDk3Ny0zMTIzMgorR3JvdXAgMTIyOiAoQmxvY2tzIDEyNDkyOS0xMjU5NTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjQ5MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyNDkzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyNDkzMS0xMjQ5NjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI0OTYzLTEyNTk1MgorICBGcmVlIGlub2RlczogMzEyMzMtMzE0ODgKK0dyb3VwIDEyMzogKEJsb2NrcyAxMjU5NTMtMTI2OTc2KQorICBCbG9jayBiaXRtYXAgYXQgMTI1OTUzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjU5NTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjU5NTUtMTI1OTg2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyNTk4Ny0xMjY5NzYKKyAgRnJlZSBpbm9kZXM6IDMxNDg5LTMxNzQ0CitHcm91cCAxMjQ6IChCbG9ja3MgMTI2OTc3LTEyODAwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDEyNjk3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTI2OTc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTI2OTc5LTEyNzAxMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjcwMTEtMTI4MDAwCisgIEZyZWUgaW5vZGVzOiAzMTc0NS0zMjAwMAorR3JvdXAgMTI1OiAoQmxvY2tzIDEyODAwMS0xMjkwMjQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDEyODAwMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTI4MDAyLTEyODAwNworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDEyODAwOC0xMjgyNTgKKyAgQmxvY2sgYml0bWFwIGF0IDEyODI1OSAoKzI1OCksIElub2RlIGJpdG1hcCBhdCAxMjgyNjAgKCsyNTkpCisgIElub2RlIHRhYmxlIGF0IDEyODI2MS0xMjgyOTIgKCsyNjApCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjgyOTMtMTI5MDI0CisgIEZyZWUgaW5vZGVzOiAzMjAwMS0zMjI1NgorR3JvdXAgMTI2OiAoQmxvY2tzIDEyOTAyNS0xMzAwNDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjkwMjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyOTAyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyOTAyNy0xMjkwNTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI5MDU5LTEzMDA0OAorICBGcmVlIGlub2RlczogMzIyNTctMzI1MTIKK0dyb3VwIDEyNzogKEJsb2NrcyAxMzAwNDktMTMxMDcyKQorICBCbG9jayBiaXRtYXAgYXQgMTMwMDQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzAwNTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzAwNTEtMTMwMDgyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzMDA4My0xMzEwNzIKKyAgRnJlZSBpbm9kZXM6IDMyNTEzLTMyNzY4CitHcm91cCAxMjg6IChCbG9ja3MgMTMxMDczLTEzMjA5NikKKyAgQmxvY2sgYml0bWFwIGF0IDEzMTA3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTMxMDc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMxMDc1LTEzMTEwNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzExMDctMTMyMDk2CisgIEZyZWUgaW5vZGVzOiAzMjc2OS0zMzAyNAorR3JvdXAgMTI5OiAoQmxvY2tzIDEzMjA5Ny0xMzMxMjApCisgIEJsb2NrIGJpdG1hcCBhdCAxMzIwOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzMjA5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzMjA5OS0xMzIxMzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMyMTMxLTEzMzEyMAorICBGcmVlIGlub2RlczogMzMwMjUtMzMyODAKK0dyb3VwIDEzMDogKEJsb2NrcyAxMzMxMjEtMTM0MTQ0KQorICBCbG9jayBiaXRtYXAgYXQgMTMzMTIxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzMxMjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzMxMjMtMTMzMTU0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzMzE1NS0xMzQxNDQKKyAgRnJlZSBpbm9kZXM6IDMzMjgxLTMzNTM2CitHcm91cCAxMzE6IChCbG9ja3MgMTM0MTQ1LTEzNTE2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDEzNDE0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTM0MTQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTM0MTQ3LTEzNDE3OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzQxNzktMTM1MTY4CisgIEZyZWUgaW5vZGVzOiAzMzUzNy0zMzc5MgorR3JvdXAgMTMyOiAoQmxvY2tzIDEzNTE2OS0xMzYxOTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMzUxNjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzNTE3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzNTE3MS0xMzUyMDIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTM1MjAzLTEzNjE5MgorICBGcmVlIGlub2RlczogMzM3OTMtMzQwNDgKK0dyb3VwIDEzMzogKEJsb2NrcyAxMzYxOTMtMTM3MjE2KQorICBCbG9jayBiaXRtYXAgYXQgMTM2MTkzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzYxOTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzYxOTUtMTM2MjI2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzNjIyNy0xMzcyMTYKKyAgRnJlZSBpbm9kZXM6IDM0MDQ5LTM0MzA0CitHcm91cCAxMzQ6IChCbG9ja3MgMTM3MjE3LTEzODI0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDEzNzIxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTM3MjE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTM3MjE5LTEzNzI1MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzcyNTEtMTM4MjQwCisgIEZyZWUgaW5vZGVzOiAzNDMwNS0zNDU2MAorR3JvdXAgMTM1OiAoQmxvY2tzIDEzODI0MS0xMzkyNjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMzgyNDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzODI0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzODI0My0xMzgyNzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTM4Mjc1LTEzOTI2NAorICBGcmVlIGlub2RlczogMzQ1NjEtMzQ4MTYKK0dyb3VwIDEzNjogKEJsb2NrcyAxMzkyNjUtMTQwMjg4KQorICBCbG9jayBiaXRtYXAgYXQgMTM5MjY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzkyNjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzkyNjctMTM5Mjk4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzOTI5OS0xNDAyODgKKyAgRnJlZSBpbm9kZXM6IDM0ODE3LTM1MDcyCitHcm91cCAxMzc6IChCbG9ja3MgMTQwMjg5LTE0MTMxMikKKyAgQmxvY2sgYml0bWFwIGF0IDE0MDI4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQwMjkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQwMjkxLTE0MDMyMiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDAzMjMtMTQxMzEyCisgIEZyZWUgaW5vZGVzOiAzNTA3My0zNTMyOAorR3JvdXAgMTM4OiAoQmxvY2tzIDE0MTMxMy0xNDIzMzYpCisgIEJsb2NrIGJpdG1hcCBhdCAxNDEzMTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0MTMxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0MTMxNS0xNDEzNDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQxMzQ3LTE0MjMzNgorICBGcmVlIGlub2RlczogMzUzMjktMzU1ODQKK0dyb3VwIDEzOTogKEJsb2NrcyAxNDIzMzctMTQzMzYwKQorICBCbG9jayBiaXRtYXAgYXQgMTQyMzM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDIzMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDIzMzktMTQyMzcwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0MjM3MS0xNDMzNjAKKyAgRnJlZSBpbm9kZXM6IDM1NTg1LTM1ODQwCitHcm91cCAxNDA6IChCbG9ja3MgMTQzMzYxLTE0NDM4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDE0MzM2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQzMzYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQzMzYzLTE0MzM5NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDMzOTUtMTQ0Mzg0CisgIEZyZWUgaW5vZGVzOiAzNTg0MS0zNjA5NgorR3JvdXAgMTQxOiAoQmxvY2tzIDE0NDM4NS0xNDU0MDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxNDQzODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0NDM4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0NDM4Ny0xNDQ0MTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQ0NDE5LTE0NTQwOAorICBGcmVlIGlub2RlczogMzYwOTctMzYzNTIKK0dyb3VwIDE0MjogKEJsb2NrcyAxNDU0MDktMTQ2NDMyKQorICBCbG9jayBiaXRtYXAgYXQgMTQ1NDA5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDU0MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDU0MTEtMTQ1NDQyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0NTQ0My0xNDY0MzIKKyAgRnJlZSBpbm9kZXM6IDM2MzUzLTM2NjA4CitHcm91cCAxNDM6IChCbG9ja3MgMTQ2NDMzLTE0NzQ1NikKKyAgQmxvY2sgYml0bWFwIGF0IDE0NjQzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQ2NDM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQ2NDM1LTE0NjQ2NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDY0NjctMTQ3NDU2CisgIEZyZWUgaW5vZGVzOiAzNjYwOS0zNjg2NAorR3JvdXAgMTQ0OiAoQmxvY2tzIDE0NzQ1Ny0xNDg0ODApCisgIEJsb2NrIGJpdG1hcCBhdCAxNDc0NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0NzQ1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0NzQ1OS0xNDc0OTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQ3NDkxLTE0ODQ4MAorICBGcmVlIGlub2RlczogMzY4NjUtMzcxMjAKK0dyb3VwIDE0NTogKEJsb2NrcyAxNDg0ODEtMTQ5NTA0KQorICBCbG9jayBiaXRtYXAgYXQgMTQ4NDgxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDg0ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDg0ODMtMTQ4NTE0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0ODUxNS0xNDk1MDQKKyAgRnJlZSBpbm9kZXM6IDM3MTIxLTM3Mzc2CitHcm91cCAxNDY6IChCbG9ja3MgMTQ5NTA1LTE1MDUyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDE0OTUwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQ5NTA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQ5NTA3LTE0OTUzOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDk1MzktMTUwNTI4CisgIEZyZWUgaW5vZGVzOiAzNzM3Ny0zNzYzMgorR3JvdXAgMTQ3OiAoQmxvY2tzIDE1MDUyOS0xNTE1NTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTA1MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1MDUzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1MDUzMS0xNTA1NjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTUwNTYzLTE1MTU1MgorICBGcmVlIGlub2RlczogMzc2MzMtMzc4ODgKK0dyb3VwIDE0ODogKEJsb2NrcyAxNTE1NTMtMTUyNTc2KQorICBCbG9jayBiaXRtYXAgYXQgMTUxNTUzICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTE1NTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTE1NTUtMTUxNTg2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1MTU4Ny0xNTI1NzYKKyAgRnJlZSBpbm9kZXM6IDM3ODg5LTM4MTQ0CitHcm91cCAxNDk6IChCbG9ja3MgMTUyNTc3LTE1MzYwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDE1MjU3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTUyNTc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTUyNTc5LTE1MjYxMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTI2MTEtMTUzNjAwCisgIEZyZWUgaW5vZGVzOiAzODE0NS0zODQwMAorR3JvdXAgMTUwOiAoQmxvY2tzIDE1MzYwMS0xNTQ2MjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTM2MDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1MzYwMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1MzYwMy0xNTM2MzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTUzNjM1LTE1NDYyNAorICBGcmVlIGlub2RlczogMzg0MDEtMzg2NTYKK0dyb3VwIDE1MTogKEJsb2NrcyAxNTQ2MjUtMTU1NjQ4KQorICBCbG9jayBiaXRtYXAgYXQgMTU0NjI1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTQ2MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTQ2MjctMTU0NjU4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1NDY1OS0xNTU2NDgKKyAgRnJlZSBpbm9kZXM6IDM4NjU3LTM4OTEyCitHcm91cCAxNTI6IChCbG9ja3MgMTU1NjQ5LTE1NjY3MikKKyAgQmxvY2sgYml0bWFwIGF0IDE1NTY0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTU1NjUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTU1NjUxLTE1NTY4MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTU2ODMtMTU2NjcyCisgIEZyZWUgaW5vZGVzOiAzODkxMy0zOTE2OAorR3JvdXAgMTUzOiAoQmxvY2tzIDE1NjY3My0xNTc2OTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTY2NzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1NjY3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1NjY3NS0xNTY3MDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTU2NzA3LTE1NzY5NgorICBGcmVlIGlub2RlczogMzkxNjktMzk0MjQKK0dyb3VwIDE1NDogKEJsb2NrcyAxNTc2OTctMTU4NzIwKQorICBCbG9jayBiaXRtYXAgYXQgMTU3Njk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTc2OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTc2OTktMTU3NzMwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1NzczMS0xNTg3MjAKKyAgRnJlZSBpbm9kZXM6IDM5NDI1LTM5NjgwCitHcm91cCAxNTU6IChCbG9ja3MgMTU4NzIxLTE1OTc0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDE1ODcyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTU4NzIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTU4NzIzLTE1ODc1NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTg3NTUtMTU5NzQ0CisgIEZyZWUgaW5vZGVzOiAzOTY4MS0zOTkzNgorR3JvdXAgMTU2OiAoQmxvY2tzIDE1OTc0NS0xNjA3NjgpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTk3NDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1OTc0NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1OTc0Ny0xNTk3NzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTU5Nzc5LTE2MDc2OAorICBGcmVlIGlub2RlczogMzk5MzctNDAxOTIKK0dyb3VwIDE1NzogKEJsb2NrcyAxNjA3NjktMTYxNzkyKQorICBCbG9jayBiaXRtYXAgYXQgMTYwNzY5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNjA3NzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjA3NzEtMTYwODAyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE2MDgwMy0xNjE3OTIKKyAgRnJlZSBpbm9kZXM6IDQwMTkzLTQwNDQ4CitHcm91cCAxNTg6IChCbG9ja3MgMTYxNzkzLTE2MjgxNikKKyAgQmxvY2sgYml0bWFwIGF0IDE2MTc5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTYxNzk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTYxNzk1LTE2MTgyNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjE4MjctMTYyODE2CisgIEZyZWUgaW5vZGVzOiA0MDQ0OS00MDcwNAorR3JvdXAgMTU5OiAoQmxvY2tzIDE2MjgxNy0xNjM4NDApCisgIEJsb2NrIGJpdG1hcCBhdCAxNjI4MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2MjgxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE2MjgxOS0xNjI4NTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTYyODUxLTE2Mzg0MAorICBGcmVlIGlub2RlczogNDA3MDUtNDA5NjAKK0dyb3VwIDE2MDogKEJsb2NrcyAxNjM4NDEtMTY0ODY0KQorICBCbG9jayBiaXRtYXAgYXQgMTYzODQxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNjM4NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjM4NDMtMTYzODc0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE2Mzg3NS0xNjQ4NjQKKyAgRnJlZSBpbm9kZXM6IDQwOTYxLTQxMjE2CitHcm91cCAxNjE6IChCbG9ja3MgMTY0ODY1LTE2NTUzNSkKKyAgQmxvY2sgYml0bWFwIGF0IDE2NDg2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTY0ODY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTY0ODY3LTE2NDg5OCAoKzIpCisgIDYzNyBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjQ4OTktMTY1NTM1CisgIEZyZWUgaW5vZGVzOiA0MTIxNy00MTQ3MgpkaWZmIC0tZ2l0IGEvdGVzdHMvcl9yZXNpemVfaW5vZGUvbmFtZSBiL3Rlc3RzL3JfcmVzaXplX2lub2RlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4M2JhZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3JfcmVzaXplX2lub2RlL25hbWUKQEAgLTAsMCArMSwyIEBACitmaWxlc3lzdGVtIHJlc2l6ZSB3aXRoIGEgcmVzaXplX2lub2RlIHByZXNlbnQKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvcl9yZXNpemVfaW5vZGUvc2NyaXB0IGIvdGVzdHMvcl9yZXNpemVfaW5vZGUvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMTIxMzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yX3Jlc2l6ZV9pbm9kZS9zY3JpcHQKQEAgLTAsMCArMSwxMDEgQEAKK2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEU7IHRoZW4KKworRlNDS19PUFQ9LXlmCitPVVQ9JHRlc3RfbmFtZS5sb2cKK2lmIFsgLWYgJHRlc3RfZGlyL2V4cGVjdC5neiBdOyB0aGVuCisJRVhQPSR0ZXN0X25hbWUudG1wCisJZ3VuemlwIDwgJHRlc3RfZGlyL2V4cGVjdC5neiA+ICRFWFAxCitlbHNlCisJRVhQPSR0ZXN0X2Rpci9leHBlY3QKK2ZpCisKK2NwIC9kZXYvbnVsbCAkT1VUCisKK2RkIGlmPS9kZXYvemVybyBvZj0kVE1QRklMRSBicz0xayBjb3VudD01MTIgPiAvZGV2L251bGwgMj4mMQorCitlY2hvIG1rZTJmcyAtcSAtRiAtTyByZXNpemVfaW5vZGUgLW8gTGludXggLWIgMTAyNCAtZyAxMDI0IHRlc3QuaW1nIDE2Mzg0ID4gJE9VVAorJE1LRTJGUyAtcSAtRiAtTyByZXNpemVfaW5vZGUgLW8gTGludXggLWIgMTAyNCAtZyAxMDI0ICRUTVBGSUxFIDE2Mzg0IDI+JjEgfAorCXNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgPj4gJE9VVAorCitlY2hvIHJlc2l6ZTJmcyB0ZXN0LmltZyA2NTUzNiA+PiAkT1VUCiskUkVTSVpFMkZTICRUTVBGSUxFIDY1NTM2IDI+JjEgfAorCXNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgPj4gJE9VVAorCiskRlNDSyAkRlNDS19PUFQgIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiICRPVVQubmV3ID4+ICRPVVQKK3JtIC1mICRPVVQubmV3CisKKyRERUJVR0ZTIC1SICJzZXRfc3VwZXJfdmFsdWUgbGFzdGNoZWNrIDAiIC13ICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorJERFQlVHRlMgLVIgInNldF9zdXBlcl92YWx1ZSBoYXNoX3NlZWQgbnVsbCIgLXcgJFRNUEZJTEUgPi9kZXYvbnVsbCAyPiYxCiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIG1rZnNfdGltZSAwIiAtdyAkVE1QRklMRSA+L2Rldi9udWxsIDI+JjEKKyRUVU5FMkZTIC1jIDIwIC1VIGNsZWFyICRUTVBGSUxFICA+L2Rldi9udWxsIDI+JjEKKworZWNobyBkdW1wZTJmcyB0ZXN0LmltZyA+PiAkT1VUCiskRFVNUEUyRlMgJFRNUEZJTEUgMj4mMSB8IHNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkID4+ICRPVVQKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+ICRPVVQKKworZGQgaWY9L2Rldi96ZXJvIG9mPSRUTVBGSUxFIGJzPTFrIGNvdW50PTUxMiA+IC9kZXYvbnVsbCAyPiYxCisKK2VjaG8gbWtlMmZzIC1xIC1GIC1PIHJlc2l6ZV9pbm9kZSAtbyBMaW51eCAtYiAxMDI0IC1nIDEwMjQgdGVzdC5pbWcgNjU1MzYgPj4gJE9VVAorJE1LRTJGUyAtcSAtRiAtTyByZXNpemVfaW5vZGUgLW8gTGludXggLWIgMTAyNCAtZyAxMDI0ICRUTVBGSUxFIDY1NTM2IDI+JjEgfAorCXNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgPj4gJE9VVAorCitlY2hvIHJlc2l6ZTJmcyB0ZXN0LmltZyAxNjM4NCA+PiAkT1VUCiskUkVTSVpFMkZTICRUTVBGSUxFIDE2Mzg0IDI+JjEgfAorCXNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgPj4gJE9VVAorCiskRlNDSyAkRlNDS19PUFQgIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiICRPVVQubmV3ID4+ICRPVVQKK3JtIC1mICRPVVQubmV3CisKKyRERUJVR0ZTIC1SICJzZXRfc3VwZXJfdmFsdWUgbGFzdGNoZWNrIDAiIC13ICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorJERFQlVHRlMgLVIgInNldF9zdXBlcl92YWx1ZSBoYXNoX3NlZWQgbnVsbCIgLXcgJFRNUEZJTEUgPi9kZXYvbnVsbCAyPiYxCiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIG1rZnNfdGltZSAwIiAtdyAkVE1QRklMRSA+L2Rldi9udWxsIDI+JjEKKyRUVU5FMkZTIC1jIDIwIC1VIGNsZWFyICRUTVBGSUxFICA+L2Rldi9udWxsIDI+JjEKKworZWNobyBkdW1wZTJmcyB0ZXN0LmltZyA+PiAkT1VUCiskRFVNUEUyRlMgJFRNUEZJTEUgMj4mMSB8IHNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkID4+ICRPVVQKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+ICRPVVQKKworZWNobyByZXNpemUyZnMgdGVzdC5pbWcgMTY1NTM2ID4+ICRPVVQKKyRSRVNJWkUyRlMgJFRNUEZJTEUgMTY1NTM2IDI+JjEgfAorCXNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgPj4gJE9VVAorCiskRlNDSyAkRlNDS19PUFQgIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiICRPVVQubmV3ID4+ICRPVVQKK3JtIC1mICRPVVQubmV3CisKKyRERUJVR0ZTIC1SICJzZXRfc3VwZXJfdmFsdWUgbGFzdGNoZWNrIDAiIC13ICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorJERFQlVHRlMgLVIgInNldF9zdXBlcl92YWx1ZSBoYXNoX3NlZWQgbnVsbCIgLXcgJFRNUEZJTEUgPi9kZXYvbnVsbCAyPiYxCiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIG1rZnNfdGltZSAwIiAtdyAkVE1QRklMRSA+L2Rldi9udWxsIDI+JjEKKyRUVU5FMkZTIC1jIDIwIC1VIGNsZWFyICRUTVBGSUxFICA+L2Rldi9udWxsIDI+JjEKKworZWNobyBkdW1wZTJmcyB0ZXN0LmltZyA+PiAkT1VUCiskRFVNUEUyRlMgJFRNUEZJTEUgMj4mMSB8IHNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkID4+ICRPVVQKKworcm0gLWYgJFRNUEZJTEUKK2NtcCAtcyAkT1VUICRFWFAKK3N0YXR1cz0kPworCitpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJZGlmZiAkRElGRl9PUFRTICRFWFAgJE9VVCA+ICR0ZXN0X25hbWUuZmFpbGVkCisJcm0gLWYgJHRlc3RfbmFtZS50bXAKK2ZpCisKK3Vuc2V0IElNQUdFIEZTQ0tfT1BUIE9VVCBFWFAKKworZWxzZSAjaWYgdGVzdCAteCAkUkVTSVpFMkZTOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaSAKZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bl9lMmZzY2sgYi90ZXN0cy9ydW5fZTJmc2NrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMjhkOTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9ydW5fZTJmc2NrCkBAIC0wLDAgKzEsMTEyIEBACitpZiBbICIkREVTQ1JJUFRJT04ieCAhPSB4IF07IHRoZW4KKwl0ZXN0X2Rlc2NyaXB0aW9uPSIkREVTQ1JJUFRJT04iCitmaQoraWYgWyAiJElNQUdFInggPSB4IF07IHRoZW4KKwlJTUFHRT0kdGVzdF9kaXIvaW1hZ2UuZ3oKK2ZpCisKK2lmIFsgIiRGU0NLX09QVCJ4ID0geCBdOyB0aGVuCisJRlNDS19PUFQ9LXlmCitmaQorCitpZiBbICIkU0VDT05EX0ZTQ0tfT1BUInggPSB4IF07IHRoZW4KKwlTRUNPTkRfRlNDS19PUFQ9LXlmCitmaQorCitpZiBbICIkT1VUMSJ4ID0geCBdOyB0aGVuCisJT1VUMT0kdGVzdF9uYW1lLjEubG9nCitmaQorCitpZiBbICIkT1VUMiJ4ID0geCBdOyB0aGVuCisJT1VUMj0kdGVzdF9uYW1lLjIubG9nCitmaQorCitpZiBbICIkRVhQMSJ4ID0geCBdOyB0aGVuCisJaWYgWyAtZiAkdGVzdF9kaXIvZXhwZWN0LjEuZ3ogXTsgdGhlbgorCQlFWFAxPSR0ZXN0X25hbWUuMS50bXAKKwkJZ3VuemlwIDwgJHRlc3RfZGlyL2V4cGVjdC4xLmd6ID4gJEVYUDEKKwllbHNlCisJCUVYUDE9JHRlc3RfZGlyL2V4cGVjdC4xCisJZmkKK2ZpCisKK2lmIFsgIiRFWFAyInggPSB4IF07IHRoZW4KKwlpZiBbIC1mICR0ZXN0X2Rpci9leHBlY3QuMi5neiBdOyB0aGVuCisJCUVYUDI9JHRlc3RfbmFtZS4yLnRtcAorCQlndW56aXAgPCAkdGVzdF9kaXIvZXhwZWN0LjIuZ3ogPiAkRVhQMgorCWVsc2UKKwkJRVhQMj0kdGVzdF9kaXIvZXhwZWN0LjIKKwlmaQorZmkKKworaWYgWyAiJFNLSVBfR1VOWklQIiAhPSAidHJ1ZSIgXSA7IHRoZW4KKwlndW56aXAgPCAkSU1BR0UgPiAkVE1QRklMRQorZmkKKworY3AgL2Rldi9udWxsICRPVVQxCisKK2V2YWwgJFBSRVBfQ01ECisKKyRGU0NLICRGU0NLX09QVCAgLU4gdGVzdF9maWxlc3lzICRUTVBGSUxFID4gJE9VVDEubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQxLm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiAkT1VUMS5uZXcgPj4gJE9VVDEKK3JtIC1mICRPVVQxLm5ldworCitpZiBbICIkT05FX1BBU1NfT05MWSIgIT0gInRydWUiIF07IHRoZW4KKwkkRlNDSyAkU0VDT05EX0ZTQ0tfT1BUIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+ICRPVVQyLm5ldyAyPiYxIAorCXN0YXR1cz0kPworCWVjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VUMi5uZXcKKwlzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiICRPVVQyLm5ldyA+ICRPVVQyCisJcm0gLWYgJE9VVDIubmV3CitmaQorCitldmFsICRBRlRFUl9DTUQKKworaWYgWyAiJFNLSVBfVkVSSUZZIiAhPSAidHJ1ZSIgXSA7IHRoZW4KKwlybSAtZiAkdGVzdF9uYW1lLm9rICR0ZXN0X25hbWUuZmFpbGVkCisJY21wIC1zICRPVVQxICRFWFAxCisJc3RhdHVzMT0kPworCWlmIFsgIiRPTkVfUEFTU19PTkxZIiAhPSAidHJ1ZSIgXTsgdGhlbgorCQljbXAgLXMgJE9VVDIgJEVYUDIKKwkJc3RhdHVzMj0kPworCWVsc2UKKwkJc3RhdHVzMj0wCisJZmkKKwlpZiBbICIkUEFTU19aRVJPIiA9ICJ0cnVlIiBdOyB0aGVuCisJCWNtcCAtcyAkdGVzdF9uYW1lLjAubG9nCSR0ZXN0X2Rpci9leHBlY3QuMAorCQlzdGF0dXMzPSQ/CisJZWxzZQorCQlzdGF0dXMzPTAKKwlmaQorCisJaWYgWyAteiAiJHRlc3RfZGVzY3JpcHRpb24iIF0gOyB0aGVuCisJCWRlc2NyaXB0aW9uPSIkdGVzdF9uYW1lIgorCWVsc2UKKwkJZGVzY3JpcHRpb249IiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uIgorCWZpCisKKwlpZiBbICIkc3RhdHVzMSIgLWVxIDAgLWEgIiRzdGF0dXMyIiAtZXEgMCAtYSAiJHN0YXR1czMiIC1lcSAwIF0gOyB0aGVuCisJCWVjaG8gIiRkZXNjcmlwdGlvbjogb2siCisJCXRvdWNoICR0ZXN0X25hbWUub2sKKwllbHNlCisJCWVjaG8gIiRkZXNjcmlwdGlvbjogZmFpbGVkIgorCQlybSAtZiAkdGVzdF9uYW1lLmZhaWxlZAorCQlpZiBbICIkUEFTU19aRVJPIiA9ICJ0cnVlIiBdOyB0aGVuCisJCQlkaWZmICRESUZGX09QVFMgJHRlc3RfZGlyL2V4cGVjdC4wIFwKKwkJCQkkdGVzdF9uYW1lLjAubG9nID4+ICR0ZXN0X25hbWUuZmFpbGVkCisJCWZpCisJCWRpZmYgJERJRkZfT1BUUyAkRVhQMSAkT1VUMSA+PiAkdGVzdF9uYW1lLmZhaWxlZAorCQlpZiBbICIkT05FX1BBU1NfT05MWSIgIT0gInRydWUiIF07IHRoZW4KKwkJCWRpZmYgJERJRkZfT1BUUyAkRVhQMiAkT1VUMiA+PiAkdGVzdF9uYW1lLmZhaWxlZAorCQlmaQorCWZpCisJcm0gLWYgdG1wX2V4cGVjdAorZmkKKworaWYgWyAiJFNLSVBfQ0xFQU5VUCIgIT0gInRydWUiIF0gOyB0aGVuCisJdW5zZXQgSU1BR0UgRlNDS19PUFQgU0VDT05EX0ZTQ0tfT1BUIE9VVDEgT1VUMiBFWFAxIEVYUDIgCisJdW5zZXQgU0tJUF9WRVJJRlkgU0tJUF9DTEVBTlVQIFNLSVBfR1VOWklQIE9ORV9QQVNTX09OTFkgUFJFUF9DTUQKKwl1bnNldCBERVNDUklQVElPTiBTS0lQX1VOTElOSyBBRlRFUl9DTUQgUEFTU19aRVJPCitmaQorCmRpZmYgLS1naXQgYS90ZXN0cy9ydW5fbWtlMmZzIGIvdGVzdHMvcnVuX21rZTJmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmVjYTQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcnVuX21rZTJmcwpAQCAtMCwwICsxLDI3IEBACitpZiB0ZXN0IC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCitpZiBbICIkRlNfU0laRSJ4ID0geCBdOyB0aGVuCisJRlNfU0laRT0xMDI0CitmaQorT1VUMT0kdGVzdF9uYW1lLjEubG9nCitPVVQyPSR0ZXN0X25hbWUuMi5sb2cKK1NLSVBfR1VOWklQPXRydWUKK09ORV9QQVNTX09OTFk9dHJ1ZQorTUtFMkZTX1NLSVBfUFJPR1JFU1M9dHJ1ZQorTUtFMkZTX1NLSVBfQ0hFQ0tfTVNHPXRydWUKK2V4cG9ydCBNS0UyRlNfU0tJUF9QUk9HUkVTUyBNS0UyRlNfU0tJUF9DSEVDS19NU0cKKz4gJFRNUEZJTEUKK1BSRVBfQ01EPSckTUtFMkZTIC1GIC1vIExpbnV4ICRNS0UyRlNfT1BUUyAkVE1QRklMRSAkRlNfU0laRSAyPiYxIHwKKwlzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiID4gJE9VVDE7CisJJERFQlVHRlMgLVIgZmVhdHVyZXMgJFRNUEZJTEUgMj4mMSB8CisJc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiA+PiAkT1VUMScKK0FGVEVSX0NNRD0nJERVTVBFMkZTICRUTVBGSUxFIDI+JjEgfCBzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCA+PiAkT1VUMScKKy4gJGNtZF9kaXIvcnVuX2UyZnNjaworCitlbHNlICNpZiB0ZXN0IC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCXJtIC1mICR0ZXN0X25hbWUub2sgJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICJza2lwcGVkIgorZmkgCisKK3Vuc2V0IERFU0NSSVBUSU9OIEZTX1NJWkUgTUtFMkZTX09QVFMgTUtFMkZTX1NLSVBfUFJPR1JFU1MgXAorCU1LRTJGU19ERVZJQ0VfU0VDVFNJWkUKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvbWtkdXAgYi90ZXN0cy9zY3JpcHRzL21rZHVwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0OGE5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL21rZHVwCkBAIC0wLDAgKzEsNDkgQEAKKyMhL2Jpbi9zaAorT1BUUz0iLU8gYmlnYWxsb2MgLUMgODE5MiIKK1NJWkU9NDA5NgorSU1HPS90bXAvZm9vLmltZworVE1QPSQobWt0ZW1wKQorU0laRV9BPTE1MDAwCitTSVpFX0I9NTAwMAorU0laRV9DPTIwMDAwCisKK0RFQlVHRlM9Li9kZWJ1Z2ZzL2RlYnVnZnMKK01LRTJGUz0uL21pc2MvbWtlMmZzCitGU0NLPS4vZTJmc2NrL2UyZnNjaworCitkZCBpZj0vZGV2L3plcm8gb2Y9JElNRyBicz0xayBjb3VudD0kU0laRQorZWNobyAkTUtFMkZTIC1GIC10IGV4dDQgLUwgdGVzdCAkT1BUUyB0ZXN0LmltZyAkU0laRQorJE1LRTJGUyAtRiAtdCBleHQ0IC1MIHRlc3QgJE9QVFMgJElNRyAkU0laRQorZGQgaWY9L2Rldi96ZXJvIG9mPSRUTVAgYnM9JFNJWkVfQSBjb3VudD0xID4mIC9kZXYvbnVsbAorZWNobyBXcml0aW5nICRTSVpFX0EgYnl0ZXMgdG8gYQorJERFQlVHRlMgLXcgLVIgIndyaXRlICRUTVAgYSIgJElNRworQkxLUz0kKC4vZGVidWdmcy9kZWJ1Z2ZzIC1SICJibG9ja3MgYSIgJElNRykKK2NwIC9kZXYvbnVsbCAkVE1QCitlY2hvICJSZWxlYXNpbmcgYmxvY2tzICRCTEtTIgorZm9yIGkgaW4gJEJMS1MgOyBkbyBlY2hvICJmcmVlYiAkaSIgPj4gJFRNUDsgZG9uZQorJERFQlVHRlMgLXcgJElNRyA8ICRUTVAgPiYgL2Rldi9udWxsCisKK2VjaG8gV3JpdGluZyAkU0laRV9CIGJ5dGVzIHRvIGIKK2RkIGlmPS9kZXYvemVybyBvZj0kVE1QIGJzPSRTSVpFX0IgY291bnQ9MSA+JiAvZGV2L251bGwKKyRERUJVR0ZTIC13IC1SICJ3cml0ZSAkVE1QIGIiICRJTUcKK2lmIFsgLW4gIiRTSVpFX0MiIF07IHRoZW4KKyAgICBCTEtTPSQoLi9kZWJ1Z2ZzL2RlYnVnZnMgLVIgImJsb2NrcyBiIiAkSU1HKQorICAgIGNwIC9kZXYvbnVsbCAkVE1QCisgICAgZWNobyAiUmVsZWFzaW5nIGJsb2NrcyAkQkxLUyIKKyAgICBmb3IgaSBpbiAkQkxLUyA7IGRvIGVjaG8gImZyZWViICRpIiA+PiAkVE1QOyBkb25lCisgICAgJERFQlVHRlMgLXcgJElNRyA8ICRUTVAgPiYgL2Rldi9udWxsCisKKyAgICBlY2hvIFdyaXRpbmcgJFNJWkVfQyBieXRlcyB0byBjCisgICAgZGQgaWY9L2Rldi96ZXJvIG9mPSRUTVAgYnM9JFNJWkVfQyBjb3VudD0xID4mIC9kZXYvbnVsbAorICAgICRERUJVR0ZTIC13IC1SICJ3cml0ZSAkVE1QIGMiICRJTUcKK2ZpCitlY2hvICJzZXRfaW5vZGVfZmllbGQgYSBtdGltZSAyMDExMDcwNDAwMDAiID4gJFRNUAorZWNobyAic2V0X2lub2RlX2ZpZWxkIGIgbXRpbWUgMjAxMTA3MDUwMDAwIiA+PiAkVE1QCitpZiBbIC1uICIkU0laRV9DIiBdOyB0aGVuCisgICAgZWNobyAic2V0X2lub2RlX2ZpZWxkIGMgbXRpbWUgMjAxMTA3MDYwMDAwIiA+PiAkVE1QCitmaQorJERFQlVHRlMgLXcgJElNRyA8ICRUTVAgPiYgL2Rldi9udWxsCisKKyRGU0NLIC1meSAkSU1HCitybSAkVE1QCisKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvcmVzaXplX3Rlc3QgYi90ZXN0cy9zY3JpcHRzL3Jlc2l6ZV90ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA2MzNlMGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3Jlc2l6ZV90ZXN0CkBAIC0wLDAgKzEsMTcyIEBACisjIS9iaW4vc2gKKworIyBvbGQgZGlzdHJvcyBhcmUgbWlzc2luZyAidHJ1bmNhdGUiLCBlbXVsYXRlIGl0IHdpdGggImRkIgordHJ1bmNhdGUoKQoreworCVsgIiQxIiA9ICItcyIgXSAmJiBzaXplPSQyICYmIHNoaWZ0IDIKKworCWRkIGlmPS9kZXYvemVybyBvZj0kMSBicz0xIGNvdW50PTAgc2Vlaz0kc2l6ZSA+PiAkTE9HIDI+JjEKK30KKworcmVzaXplX3Rlc3QgKCkgeworREJHX0ZMQUdTPTYzCisKK2VjaG8gJHRlc3RfZGVzY3JpcHRpb24gc3RhcnRpbmcgPiAkTE9HCitybSAtZiAkVE1QRklMRQordG91Y2ggJFRNUEZJTEUKKworIyBWZXJpZnkgdGhhdCB0aGUgJFRNUCBmaWxlc3lzdGVtIGhhbmRsZXMgJFNJWkVfMiBzcGFyc2UgZmlsZXMuCisjIElmIHRoYXQgZmFpbHMsIHRyeSB0aGUgbG9jYWwgZmlsZXN5c3RlbSBpbnN0ZWFkLgoraWYgdHJ1bmNhdGUgLXMgJFNJWkVfMiAkVE1QRklMRSAyPiAvZGV2L251bGw7IHRoZW4KKwllY2hvICJ1c2luZyAkVE1QRklMRSIgPj4gJExPRworZWxzZQorCXJtICRUTVBGSUxFCisJZXhwb3J0IFRNUEZJTEU9JChta3RlbXAgLi8kdGVzdF9uYW1lLnRtcC5YWFhYWFgpCisJdG91Y2ggJFRNUEZJTEUKKwllY2hvICJ1c2luZyAkVE1QRklMRSIgPj4gJExPRworCWlmICEgdHJ1bmNhdGUgLXMgJFNJWkVfMiAkVE1QRklMRSA+PiAkTE9HIDI+JjE7IHRoZW4KKwkJcm0gJFRNUEZJTEUKKwkJcmV0dXJuIDExMQorCWZpCitmaQorPiAkVE1QRklMRQorCitlY2hvICRNS0UyRlMgJEZFQVRVUkVTIC1xRiAkVE1QRklMRSAkU0laRV8xID4+ICRMT0cKKyRNS0UyRlMgJEZFQVRVUkVTIC1xRiAkVE1QRklMRSAkU0laRV8xID4+ICRMT0cKKworT1VUX1RNUD0kKG1rdGVtcCAke1RNUERJUjotL3RtcH0vY3N1bS10bXAuWFhYWFhYKQorCitkYXRlID4gJE9VVF9UTVAKK2NhdCAkRTJGU0NLID4+ICRPVVRfVE1QCitlY2hvICRDUkNTVU0gJE9VVF9UTVAgPj4gJExPRyAyPiYxCitDU1VNXzE9JCgkQ1JDU1VNICRPVVRfVE1QKQorZWNobyBDaGVja3N1bSBpcyAkQ1NVTV8xID4+ICRMT0cKKworZWNobyBTZXR0aW5nIHVwIGZpbGUgc3lzdGVtID4+ICRMT0cKKyRERUJVR0ZTIC13ICRUTVBGSUxFICA+PiAkTE9HIDI+JjEgPDwgRU9GCitta2RpciB0ZXN0CitjZCB0ZXN0Cit3cml0ZSAkT1VUX1RNUCBlMmZzY2sKK2xzIC90ZXN0CitzdGF0IC90ZXN0L2UyZnNjaworcXVpdAorRU9GCitlY2hvICIgIiA+PiAkTE9HCisKK3JtIC1mICRPVVRfVE1QCisKK2VjaG8gJEZTQ0sgLWZ5ICRUTVBGSUxFID4+ICRMT0cgMj4mMSAKKyRGU0NLIC1meSAkVE1QRklMRSA+PiAkTE9HIDI+JjEgCisKK2VjaG8gJFJFU0laRTJGUyAkUkVTSVpFMkZTX09QVFMgLWQgJERCR19GTEFHUyAkVE1QRklMRSAkU0laRV8yID4+ICRMT0cgMj4mMQoraWYgISAkUkVTSVpFMkZTICRSRVNJWkUyRlNfT1BUUyAtZCAkREJHX0ZMQUdTICRUTVBGSUxFICRTSVpFXzIgPj4gJExPRyAyPiYxCit0aGVuCisJcmV0dXJuIDEKK2ZpCisKK2VjaG8gJEZTQ0sgLWZ5ICRUTVBGSUxFID4+ICRMT0cgMj4mMQoraWYgISAkRlNDSyAtZnkgJFRNUEZJTEUgPj4gJExPRyAyPiYxCit0aGVuCisJZHVtcGUyZnMgJFRNUEZJTEUgPj4gJExPRworCXJldHVybiAxCitmaQorCitlY2hvICRERUJVR0ZTIC1SICJkdW1wIC90ZXN0L2UyZnNjayAkT1VUX1RNUCIgJFRNUEZJTEUgPj4gJExPRyAyPiYxCiskREVCVUdGUyAtUiAiZHVtcCAvdGVzdC9lMmZzY2sgJE9VVF9UTVAiICRUTVBGSUxFID4+ICRMT0cgMj4mMQorCitlY2hvICRDUkNTVU0gJE9VVF9UTVAgPj4gJExPRyAyPiYxCitDU1VNXzI9JCgkQ1JDU1VNICRPVVRfVE1QKQorZWNobyBDaGVja3N1bSBpcyAkQ1NVTV8yID4+ICRMT0cKKworaWYgdGVzdCAiJENTVU1fMSIgIT0gIiRDU1VNXzIiCit0aGVuCisJcmV0dXJuIDEKK2ZpCisKKyMgVW5jb21tZW50IHRvIGdyYWIgZXh0cmEgZGVidWdnaW5nIGltYWdlCisjCisjbXYgJFRNUEZJTEUgL3RtcC9mb28uaW1nCisjcmV0dXJuIDAKKworZWNobyAkUkVTSVpFMkZTICRSRVNJWkUyRlNfT1BUUyAtZCAkREJHX0ZMQUdTIC1NICRUTVBGSUxFICRTSVpFXzIgPj4gJExPRyAyPiYxCitpZiAhICRSRVNJWkUyRlMgJFJFU0laRTJGU19PUFRTIC1kICREQkdfRkxBR1MgLU0gJFRNUEZJTEUgJFNJWkVfMiA+PiAkTE9HIDI+JjEKK3RoZW4KKwlyZXR1cm4gMQorZmkKKworZWNobyAkRlNDSyAtZnkgJFRNUEZJTEUgPj4gJExPRyAyPiYxCitpZiAhICRGU0NLIC1meSAkVE1QRklMRSA+PiAkTE9HIDI+JjEKK3RoZW4KKwlkdW1wZTJmcyAkVE1QRklMRSA+PiAkTE9HCisJcmV0dXJuIDEKK2ZpCisKK2VjaG8gJERFQlVHRlMgLVIgImR1bXAgL3Rlc3QvZTJmc2NrICRPVVRfVE1QIiAkVE1QRklMRSA+PiAkTE9HIDI+JjEKKyRERUJVR0ZTIC1SICJkdW1wIC90ZXN0L2UyZnNjayAkT1VUX1RNUCIgJFRNUEZJTEUgPj4gJExPRyAyPiYxCisKK2VjaG8gJENSQ1NVTSAkT1VUX1RNUCA+PiAkTE9HIDI+JjEKK0NTVU1fMj0kKCRDUkNTVU0gJE9VVF9UTVApCitlY2hvIENoZWNrc3VtIGlzICRDU1VNXzIgPj4gJExPRworCitpZiB0ZXN0ICIkQ1NVTV8xIiAhPSAiJENTVU1fMiIKK3RoZW4KKwlyZXR1cm4gMQorZmkKKworZWNobyAkUkVTSVpFMkZTICRSRVNJWkUyRlNfT1BUUyAtZCAkREJHX0ZMQUdTIC1NICRUTVBGSUxFICRTSVpFXzIgPj4gJExPRyAyPiYxCitpZiAhICRSRVNJWkUyRlMgJFJFU0laRTJGU19PUFRTIC1kICREQkdfRkxBR1MgLU0gJFRNUEZJTEUgJFNJWkVfMiA+PiAkTE9HIDI+JjEKK3RoZW4KKwlyZXR1cm4gMQorZmkKKworZWNobyAkRlNDSyAtZnkgJFRNUEZJTEUgPj4gJExPRyAyPiYxCitpZiAhICRGU0NLIC1meSAkVE1QRklMRSA+PiAkTE9HIDI+JjEKK3RoZW4KKwlkdW1wZTJmcyAkVE1QRklMRSA+PiAkTE9HCisJcmV0dXJuIDEKK2ZpCisKK2VjaG8gJERFQlVHRlMgLVIgImR1bXAgL3Rlc3QvZTJmc2NrICRPVVRfVE1QIiAkVE1QRklMRSA+PiAkTE9HIDI+JjEKKyRERUJVR0ZTIC1SICJkdW1wIC90ZXN0L2UyZnNjayAkT1VUX1RNUCIgJFRNUEZJTEUgPj4gJExPRyAyPiYxCisKK2VjaG8gJENSQ1NVTSAkT1VUX1RNUCA+PiAkTE9HIDI+JjEKK0NTVU1fMj0kKCRDUkNTVU0gJE9VVF9UTVApCitlY2hvIENoZWNrc3VtIGlzICRDU1VNXzIgPj4gJExPRworCitpZiB0ZXN0ICIkQ1NVTV8xIiAhPSAiJENTVU1fMiIKK3RoZW4KKwlyZXR1cm4gMQorZmkKKworZWNobyAkUkVTSVpFMkZTICRSRVNJWkUyRlNfT1BUUyAtZCAkREJHX0ZMQUdTIC1NICRUTVBGSUxFICRTSVpFXzIgPj4gJExPRyAyPiYxCitpZiAhICRSRVNJWkUyRlMgJFJFU0laRTJGU19PUFRTIC1kICREQkdfRkxBR1MgLU0gJFRNUEZJTEUgJFNJWkVfMiA+PiAkTE9HIDI+JjEKK3RoZW4KKwlyZXR1cm4gMQorZmkKKworZWNobyAkRlNDSyAtZnkgJFRNUEZJTEUgPj4gJExPRyAyPiYxCitpZiAhICRGU0NLIC1meSAkVE1QRklMRSA+PiAkTE9HIDI+JjEKK3RoZW4KKwlkdW1wZTJmcyAkVE1QRklMRSA+PiAkTE9HCisJcmV0dXJuIDEKK2ZpCisKK2VjaG8gJERFQlVHRlMgLVIgImR1bXAgL3Rlc3QvZTJmc2NrICRPVVRfVE1QIiAkVE1QRklMRSA+PiAkTE9HIDI+JjEKKyRERUJVR0ZTIC1SICJkdW1wIC90ZXN0L2UyZnNjayAkT1VUX1RNUCIgJFRNUEZJTEUgPj4gJExPRyAyPiYxCisKK2VjaG8gJENSQ1NVTSAkT1VUX1RNUCA+PiAkTE9HIDI+JjEKK0NTVU1fMj0kKCRDUkNTVU0gJE9VVF9UTVApCitlY2hvIENoZWNrc3VtIGlzICRDU1VNXzIgPj4gJExPRworCitybSAkT1VUX1RNUAordW5zZXQgT1VUX1RNUAorCitpZiB0ZXN0ICIkQ1NVTV8xIiAhPSAiJENTVU1fMiIKK3RoZW4KKwlyZXR1cm4gMQorZmkKKworcm0gJFRNUEZJTEUKK3JldHVybiAwCisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3RfZXh0X2pubF9ybS9zY3JpcHQgYi90ZXN0cy90X2V4dF9qbmxfcm0vc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYWY4MGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy90X2V4dF9qbmxfcm0vc2NyaXB0CkBAIC0wLDAgKzEsMjYgQEAKK3Rlc3RfZGVzY3JpcHRpb249InJlbW92ZSBtaXNzaW5nIGV4dGVybmFsIGpvdXJuYWwgZGV2aWNlIgorT1VUPSR0ZXN0X25hbWUubG9nCisKK2RkIGlmPS9kZXYvemVybyBvZj0kVE1QRklMRSBicz0xayBjb3VudD01MTIgPiAvZGV2L251bGwgMj4mMQorCitlY2hvIG1rZTJmcyAtcSAtRiAtbyBMaW51eCAtYiAxMDI0ICRUTVBGSUxFID4+ICRPVVQKKyRNS0UyRlMgLXEgLUYgLW8gTGludXggLUkgMTI4IC1iIDEwMjQgJFRNUEZJTEUgPj4gJE9VVCAyPiYxCisKK2VjaG8gImRlYnVnZnMgYWRkIGpvdXJuYWwgZGV2aWNlL1VVSUQiID4+ICRPVVQKKyRERUJVR0ZTIC13IC1mIC0gJFRNUEZJTEUgPDwtIEVPRiA+PiAkT1VUIDI+JjEKKwlmZWF0dXJlIGhhc19qb3VybmFsCisJc3N2IGpvdXJuYWxfZGV2IDB4OTk5OQorCXNzdiBqb3VybmFsX3V1aWQgMWRiM2Y2NzctNjgzMi00YWRiLWJhZmMtOGU0MDU5YzMwYTMzCitFT0YKKworZWNobyAidHVuZTJmcyAtZiAtTyBeaGFzX2pvdXJuYWwgJFRNUEZJTEUiID4+ICRPVVQKKyRUVU5FMkZTIC1mIC1PIF5oYXNfam91cm5hbCAkVE1QRklMRSA+PiAkT1VUIDI+JjEKKyREVU1QRTJGUyAtaCAkVE1QRklMRSA+PiAkT1VUIDI+JjEKK2lmIFsgIiQoZ3JlcCAnSm91cm5hbCBVVUlEOicgJE9VVCkiIF07IHRoZW4KKwltdiAkdGVzdF9uYW1lLmxvZyAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCitlbHNlCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgorCW12ICR0ZXN0X25hbWUubG9nICR0ZXN0X25hbWUub2sKK2ZpCitybSAtZiAkVE1QRklMRQpkaWZmIC0tZ2l0IGEvdGVzdHMvdF9tbXBfMW9uL25hbWUgYi90ZXN0cy90X21tcF8xb24vbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmUxNmIyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdF9tbXBfMW9uL25hbWUKQEAgLTAsMCArMSBAQAorZW5hYmxlIE1NUCB1c2luZyB0dW5lMmZzCmRpZmYgLS1naXQgYS90ZXN0cy90X21tcF8xb24vc2NyaXB0IGIvdGVzdHMvdF9tbXBfMW9uL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmVkMmNhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdF9tbXBfMW9uL3NjcmlwdApAQCAtMCwwICsxLDQwIEBACitGU0NLX09QVD0teWYKKworIyB1c2UgY3VycmVudCBkaXJlY3RvcnkgaW5zdGVhZCBvZiAvdG1wIGJlY2FzZSB0bXBmcyBkb2Vzbid0IHN1cHBvcnQgRElPCitybSAtZiAkVE1QRklMRQorVE1QRklMRT0kKG1rdGVtcCAuL3RtcC0kdGVzdF9uYW1lLlhYWFhYWCkKKworc3RhdCAtZiAkVE1QRklMRSB8IGdyZXAgLXEgIlR5cGU6IHRtcGZzIgoraWYgWyAkPyA9IDAgXSA7IHRoZW4KKwlybSAtZiAkVE1QRklMRQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIGZvciB0bXBmcyAobm8gT19ESVJFQ1QpIgorCXJldHVybiAwCitmaQorCiskTUtFMkZTIC1xIC1GIC1vIExpbnV4IC1iIDQwOTYgJFRNUEZJTEUgMTAwID4gJHRlc3RfbmFtZS5sb2cgMj4mMQorc3RhdHVzPSQ/CitpZiBbICIkc3RhdHVzIiAhPSAwIF0gOyB0aGVuCisJZWNobyAibWtlMmZzIGZhaWxlZCIgPiAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJcmV0dXJuICRzdGF0dXMKK2ZpCisKKyRUVU5FMkZTIC1PIG1tcCAtRSBtbXBfdXBkYXRlX2ludGVydmFsPTEgJFRNUEZJTEUgPj4gJHRlc3RfbmFtZS5sb2cgMj4mMQorc3RhdHVzPSQ/CitpZiBbICIkc3RhdHVzIiAhPSAwIF0gOyB0aGVuCisJZWNobyAidHVuZTJmcyAtTyBtbXAgZmFpbGVkIHdpdGggJHN0YXR1cyIgPiAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJcmV0dXJuICRzdGF0dXMKK2ZpCisKKyRGU0NLICRGU0NLX09QVCAkVE1QRklMRSA+PiAkdGVzdF9uYW1lLmxvZyAyPiYxCitzdGF0dXM9JD8KK2lmIFsgIiRzdGF0dXMiID0gMCBdIDsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBvayIKKwl0b3VjaCAkdGVzdF9uYW1lLm9rCitlbHNlCisJZWNobyAiZTJmc2NrIHdpdGggTU1QIGVuYWJsZWQgZmFpbGVkIHdpdGggJHN0YXR1cyIgPiAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJcmV0dXJuICRzdGF0dXMKK2ZpCitybSAtZiAkVE1QRklMRQpkaWZmIC0tZ2l0IGEvdGVzdHMvdF9tbXBfMm9mZi9uYW1lIGIvdGVzdHMvdF9tbXBfMm9mZi9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Y2FjNTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy90X21tcF8yb2ZmL25hbWUKQEAgLTAsMCArMSBAQAorZGlzYWJsZSBNTVAgdXNpbmcgdHVuZTJmcwpkaWZmIC0tZ2l0IGEvdGVzdHMvdF9tbXBfMm9mZi9zY3JpcHQgYi90ZXN0cy90X21tcF8yb2ZmL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTU2MjAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdF9tbXBfMm9mZi9zY3JpcHQKQEAgLTAsMCArMSw0MCBAQAorRlNDS19PUFQ9LXlmCisKKyMgdXNlIGN1cnJlbnQgZGlyZWN0b3J5IGluc3RlYWQgb2YgL3RtcCBiZWNhc2UgdG1wZnMgZG9lc24ndCBzdXBwb3J0IERJTworcm0gLWYgJFRNUEZJTEUKK1RNUEZJTEU9JChta3RlbXAgLi90bXAtJHRlc3RfbmFtZS5YWFhYWFgpCisKK3N0YXQgLWYgJFRNUEZJTEUgfCBncmVwIC1xICJUeXBlOiB0bXBmcyIKK2lmIFsgJD8gPSAwIF07IHRoZW4KKwlybSAtZiAkVE1QRklMRQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIGZvciB0bXBmcyAobm8gT19ESVJFQ1QpIgorCXJldHVybiAwCitmaQorCiskTUtFMkZTIC1xIC1GIC1vIExpbnV4IC1iIDQwOTYgLU8gbW1wICRUTVBGSUxFIDEwMCA+ICR0ZXN0X25hbWUubG9nIDI+JjEKK3N0YXR1cz0kPworaWYgWyAiJHN0YXR1cyIgIT0gMCBdIDsgdGhlbgorCWVjaG8gIm1rZTJmcyAtTyBtbXAgZmFpbGVkIiA+ICR0ZXN0X25hbWUuZmFpbGVkCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IGZhaWxlZCIKKwlyZXR1cm4gJHN0YXR1cworZmkKKworJFRVTkUyRlMgLU8gXm1tcCAkVE1QRklMRSA+ICR0ZXN0X25hbWUubG9nIDI+JjEKK3N0YXR1cz0kPworaWYgWyAiJHN0YXR1cyIgIT0gMCBdIDsgdGhlbgorCWVjaG8gInR1bmUyZnMgLU8gXm1tcCBmYWlsZWQiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAkc3RhdHVzCitmaQorCiskRlNDSyAkRlNDS19PUFQgJFRNUEZJTEUgPiAkdGVzdF9uYW1lLmxvZyAyPiYxCitzdGF0dXM9JD8KK2lmIFsgIiRzdGF0dXMiID0gMCBdIDsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBvayIKKwl0b3VjaCAkdGVzdF9uYW1lLm9rCitlbHNlCisJZWNobyAiZTJmc2NrIGFmdGVyIE1NUCBkaXNhYmxlIGZhaWxlZCIgPiAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJcmV0dXJuICRzdGF0dXMKK2ZpCitybSAtZiAkVE1QRklMRQpkaWZmIC0tZ2l0IGEvdGVzdHMvdF9xdW90YV8xb24vbmFtZSBiL3Rlc3RzL3RfcXVvdGFfMW9uL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyZTJkNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3RfcXVvdGFfMW9uL25hbWUKQEAgLTAsMCArMSBAQAorZW5hYmxlIHF1b3RhIHVzaW5nIHR1bmUyZnMKZGlmZiAtLWdpdCBhL3Rlc3RzL3RfcXVvdGFfMW9uL3NjcmlwdCBiL3Rlc3RzL3RfcXVvdGFfMW9uL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDE3ZjMzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdF9xdW90YV8xb24vc2NyaXB0CkBAIC0wLDAgKzEsNDIgQEAKK0ZTQ0tfT1BUPS15ZgorCitpZiBbICIkUVVPVEEiICE9ICJ5IiBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCisJcmV0dXJuIDAKK2ZpCisKKyRNS0UyRlMgLXEgLUYgLW8gTGludXggLWIgNDA5NiAkVE1QRklMRSAxMDAwMCA+ICR0ZXN0X25hbWUubG9nIDI+JjEKK3N0YXR1cz0kPworaWYgWyAiJHN0YXR1cyIgIT0gMCBdIDsgdGhlbgorCWVjaG8gIm1rZTJmcyBmYWlsZWQiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAkc3RhdHVzCitmaQorCitkZCBpZj0vZGV2L3plcm8gb2Y9JFRNUEZJTEUuMiBicz0xMDQ4NTc2IGNvdW50PTEgPj4gJHRlc3RfbmFtZS5sb2cgMj4mMQorY2F0IDw8LSBFT0YgfCAkREVCVUdGUyAtdyAtZiAvZGV2L3N0ZGluICRUTVBGSUxFID4+ICR0ZXN0X25hbWUubG9nIDI+JjEKKwl3cml0ZSAkVE1QRklMRS4yIGZpbGUxCisJc2V0X2lub2RlX2ZpZWxkIGZpbGUxIHVpZCA1MDAKKwlzZXRfaW5vZGVfZmllbGQgZmlsZTEgZ2lkIDUwMAorRU9GCitybSAtZiAkVE1QRklMRS4yCisKKyRUVU5FMkZTIC1PIHF1b3RhICAkVE1QRklMRSA+PiAkdGVzdF9uYW1lLmxvZyAyPiYxCitzdGF0dXM9JD8KK2lmIFsgIiRzdGF0dXMiICE9IDAgXSA7IHRoZW4KKwllY2hvICJ0dW5lMmZzIC1PIHF1b3RhIGZhaWxlZCB3aXRoICRzdGF0dXMiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAkc3RhdHVzCitmaQorCiskRlNDSyAkRlNDS19PUFQgJFRNUEZJTEUgPj4gJHRlc3RfbmFtZS5sb2cgMj4mMQorc3RhdHVzPSQ/CitpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gImUyZnNjayB3aXRoIHF1b3RhIGVuYWJsZWQgZmFpbGVkIHdpdGggJHN0YXR1cyIgPiAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJcmV0dXJuICRzdGF0dXMKK2ZpCitybSAtZiAkVE1QRklMRQpkaWZmIC0tZ2l0IGEvdGVzdHMvdF9xdW90YV8yb2ZmL25hbWUgYi90ZXN0cy90X3F1b3RhXzJvZmYvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjBlYzk4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdF9xdW90YV8yb2ZmL25hbWUKQEAgLTAsMCArMSBAQAorZGlzYWJsZSBxdW90YSB1c2luZyB0dW5lMmZzCmRpZmYgLS1naXQgYS90ZXN0cy90X3F1b3RhXzJvZmYvc2NyaXB0IGIvdGVzdHMvdF9xdW90YV8yb2ZmL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTcwYzU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdF9xdW90YV8yb2ZmL3NjcmlwdApAQCAtMCwwICsxLDM1IEBACitGU0NLX09QVD0teWYKKworaWYgWyAiJFFVT1RBIiAhPSAieSIgXTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorCXJldHVybiAwCitmaQorCiskTUtFMkZTIC1xIC1GIC1vIExpbnV4IC1iIDQwOTYgLU8gcXVvdGEgJFRNUEZJTEUgMTAwID4gJHRlc3RfbmFtZS5sb2cgMj4mMQorc3RhdHVzPSQ/CitpZiBbICIkc3RhdHVzIiAhPSAwIF0gOyB0aGVuCisJZWNobyAibWtlMmZzIC1PIHF1b3RhIGZhaWxlZCIgPiAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJcmV0dXJuICRzdGF0dXMKK2ZpCisKKyRUVU5FMkZTIC1PIF5xdW90YSAkVE1QRklMRSA+PiAkdGVzdF9uYW1lLmxvZyAyPiYxCitzdGF0dXM9JD8KK2lmIFsgIiRzdGF0dXMiICE9IDAgXSA7IHRoZW4KKwllY2hvICJ0dW5lMmZzIC1PIF5xdW90YSBmYWlsZWQiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAkc3RhdHVzCitmaQorCiskRlNDSyAkRlNDS19PUFQgJFRNUEZJTEUgPj4gJHRlc3RfbmFtZS5sb2cgMj4mMQorc3RhdHVzPSQ/CitpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gImUyZnNjayB3aXRoIHF1b3RhIGVuYWJsZWQgZmFpbGVkIHdpdGggJHN0YXR1cyIgPiAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJcmV0dXJuICRzdGF0dXMKK2ZpCisKK3JtIC1mICRUTVBGSUxFCmRpZmYgLS1naXQgYS90ZXN0cy90ZXN0X2NvbmZpZyBiL3Rlc3RzL3Rlc3RfY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYzM2ZmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy90ZXN0X2NvbmZpZwpAQCAtMCwwICsxLDM5IEBACisjCisjIFRlc3QgY29uZmlndXJhdGlvbgorIworCit1bnNldCBMQU5HIExBTkdVQUdFIExDX0FERFJFU1MgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfSURFTlRJRklDQVRJT04gTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIExDX1RFTEVQSE9ORSBMQ19USU1FIFBBR0VSCitGU0NLPSIkVVNFX1ZBTEdSSU5EIC4uL2UyZnNjay9lMmZzY2siCitNS0UyRlM9IiRVU0VfVkFMR1JJTkQgLi4vbWlzYy9ta2UyZnMiCitEVU1QRTJGUz0iJFVTRV9WQUxHUklORCAuLi9taXNjL2R1bXBlMmZzIgorVFVORTJGUz0iJFVTRV9WQUxHUklORCAuLi9taXNjL3R1bmUyZnMiCitDSEFUVFI9IiRVU0VfVkFMR1JJTkQuLi9taXNjL2NoYXR0ciIKK0xTQVRUUj0iJFVTRV9WQUxHUklORCAuLi9taXNjL2xzYXR0ciIKK0UySU1BR0U9IiRVU0VfVkFMR1JJTkQgLi4vbWlzYy9lMmltYWdlIgorRTJJTUFHRV9FWEU9Ii4uL21pc2MvZTJpbWFnZSIKK0RFQlVHRlM9IiRVU0VfVkFMR1JJTkQgLi4vZGVidWdmcy9kZWJ1Z2ZzIgorREVCVUdGU19FWEU9Ii4uL2RlYnVnZnMvZGVidWdmcyIKK1RFU1RfQklUUz0iLi4vZGVidWdmcy9kZWJ1Z2ZzIgorUkVTSVpFMkZTX0VYRT0iLi4vcmVzaXplL3Jlc2l6ZTJmcyIKK1JFU0laRTJGUz0iJFVTRV9WQUxHUklORCAkUkVTSVpFMkZTX0VYRSIKK0UyVU5ET19FWEU9Ii4uL21pc2MvZTJ1bmRvIgorVEVTVF9SRUw9Li4vdGVzdHMvcHJvZ3MvdGVzdF9yZWwKK1RFU1RfSUNPVU5UPS4uL3Rlc3RzL3Byb2dzL3Rlc3RfaWNvdW50CitDUkNTVU09Li4vdGVzdHMvcHJvZ3MvY3Jjc3VtCitMRF9MSUJSQVJZX1BBVEg9Li4vbGliOi4uL2xpYi9leHQyZnM6Li4vbGliL2UycDouLi9saWIvZXQ6Li4vbGliL3NzOiR7TERfTElCUkFSWV9QQVRIfQorRFlMRF9MSUJSQVJZX1BBVEg9Li4vbGliOi4uL2xpYi9leHQyZnM6Li4vbGliL2UycDouLi9saWIvZXQ6Li4vbGliL3NzOiR7RFlMRF9MSUJSQVJZX1BBVEh9CitleHBvcnQgTERfTElCUkFSWV9QQVRICitleHBvcnQgRFlMRF9MSUJSQVJZX1BBVEgKK1RaPUdNVDAKK2V4cG9ydCBUWgorTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0UyRlNDS19DT05GSUc9L2Rldi9udWxsCitleHBvcnQgRTJGU0NLX0NPTkZJRworTUtFMkZTX0NPTkZJRz0uL21rZTJmcy5jb25mCitleHBvcnQgTUtFMkZTX0NPTkZJRwordW5zZXQgTUtFMkZTX0ZJUlNUX01FVEFfQkcKK0UyRlNQUk9HU19TS0lQX1BST0dSRVNTPXllcworZXhwb3J0IEUyRlNQUk9HU19TS0lQX1BST0dSRVNTCitFWFQyRlNfTk9fTVRBQl9PSz15ZXMKK2V4cG9ydCBFWFQyRlNfTk9fTVRBQl9PSwpkaWZmIC0tZ2l0IGEvdGVzdHMvdGVzdF9vbmUuaW4gYi90ZXN0cy90ZXN0X29uZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmJkMWExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdGVzdF9vbmUuaW4KQEAgLTAsMCArMSw3MSBAQAorIyEvYmluL3NoCisjIHJ1biBhIHNpbmdsZSByZWdyZXNzaW9uIHRlc3QKKworTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKKworY2FzZSAiJDEiIGluCisgICAgLS12YWxncmluZCkKKyAgICAJZXhwb3J0IFVTRV9WQUxHUklORD0idmFsZ3JpbmQgLXEgLS1zaW0taGludHM9bGF4LWlvY3RscyIKKwlzaGlmdDsKKwk7OworICAgIC0tdmFsZ3JpbmQtbGVha2NoZWNrKQorICAgIAlleHBvcnQgVVNFX1ZBTEdSSU5EPSJ2YWxncmluZCAtLXNpbS1oaW50cz1sYXgtaW9jdGxzIC0tbGVhay1jaGVjaz1mdWxsIC0tc2hvdy1yZWFjaGFibGU9eWVzIC0tbG9nLWZpbGU9L3RtcC92YWxncmluZC0lcC5sb2ciCisJc2hpZnQ7CisJOzsKK2VzYWMKKworY2FzZSAiJDEiIGluCisgICAgKi5mYWlsZWR8Ki5uZXd8Ki5va3wqLmxvZ3wqLnRtcCkJZXhpdCAwIDs7Citlc2FjCisKK3Rlc3RfZGlyPSQxCitjbWRfZGlyPSRTUkNESVIKKworaWYgdGVzdCAiJFRFU1RfQ09ORklHInggPSB4OyB0aGVuCisJVEVTVF9DT05GSUc9JFNSQ0RJUi90ZXN0X2NvbmZpZworZmkKKworLiAkVEVTVF9DT05GSUcKKwordGVzdF9uYW1lPWBlY2hvICR0ZXN0X2RpciB8IHNlZCAtZSAnczsuKi87OydgCisKK1RNUEZJTEU9JChta3RlbXAgJHtUTVBESVI6LS90bXB9L2UyZnNwcm9ncy10bXAtJHRlc3RfbmFtZS5YWFhYWFgpCit0cmFwICdybSAtZiAkVE1QRklMRSA7IGV4aXQnIDEgMiAxNQorCitpZiBbIC1mICR0ZXN0X2RpciBdIDsgdGhlbgorCWV4aXQgMDsKK2ZpCitpZiBbICEgLWQgJHRlc3RfZGlyIF0gOyB0aGVuCisJZWNobyAiVGhlIHRlc3QgJyR0ZXN0X25hbWUnIGRvZXMgbm90IGV4aXN0LiIKKwlleGl0IDA7CitmaQoraWYgWyAteiAiYGxzICR0ZXN0X2RpcmAiIF07IHRoZW4KKwlleGl0IDAKK2ZpCitpZiBbIC1mICR0ZXN0X2Rpci9uYW1lIF07IHRoZW4KKwl0ZXN0X2Rlc2NyaXB0aW9uPWBjYXQgJHRlc3RfZGlyL25hbWVgCitlbHNlCisJdGVzdF9kZXNjcmlwdGlvbj0KK2ZpCisKK3JtIC1mICR0ZXN0X25hbWUub2sgJHRlc3RfbmFtZS5mYWlsZWQKKyNlY2hvIC1lIC1uICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjpcciIKKworaWYgWyAtZiAkdGVzdF9kaXIvc2NyaXB0IF07IHRoZW4KKwkuICR0ZXN0X2Rpci9zY3JpcHQKK2Vsc2UKKwl0ZXN0X2Jhc2U9YGVjaG8gJHRlc3RfbmFtZSB8IHNlZCAtZSAncy9fLiovLydgCisJZGVmYXVsdF9zY3JpcHQ9JFNSQ0RJUi9kZWZhdWx0cy8ke3Rlc3RfYmFzZX1fc2NyaXB0CisJaWYgWyAtZiAkZGVmYXVsdF9zY3JpcHQgXTsgdGhlbgorCQkuICRTUkNESVIvZGVmYXVsdHMvJHt0ZXN0X2Jhc2V9X3NjcmlwdAorCWVsc2UKKwkJZWNobyAiJHRlc3RfbmFtZTogTWlzc2luZyB0ZXN0IHNjcmlwdCAkZGVmYXVsdF9zY3JpcHQhIgorCWZpCisJWyAtZiAkdGVzdF9uYW1lLmZhaWxlZCBdICYmIGNhdCAkdGVzdF9uYW1lLmZhaWxlZAorZmkKKworaWYgWyAiJFNLSVBfVU5MSU5LIiAhPSAidHJ1ZSIgXSA7IHRoZW4KKwlybSAtZiAkVE1QRklMRQorZmkKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvdGVzdF9wb3N0IGIvdGVzdHMvdGVzdF9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEyNTEyNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy90ZXN0X3Bvc3QKQEAgLTAsMCArMSwxNyBAQAorIyEvYmluL3NoCisjIHJlcG9ydCBzdGF0cyBhYm91dCB0ZXN0IHNjcmlwdHMgdGhhdCB3ZXJlIHJ1bgorCitudW1fb2s9YGxzICoub2sgMj4vZGV2L251bGwgfCB3YyAtbGAKK251bV9mYWlsZWQ9YGxzICouZmFpbGVkIDI+L2Rldi9udWxsIHwgd2MgLWxgCisKK2VjaG8gIiRudW1fb2sgdGVzdHMgc3VjY2VlZGVkCSRudW1fZmFpbGVkIHRlc3RzIGZhaWxlZCIKKwordGVzdCAiJG51bV9mYWlsZWQiIC1lcSAwICYmIGV4aXQgMAorCitlY2hvIC1uICJUZXN0cyBmYWlsZWQ6ICIKK2ZvciBmbmFtZSBpbiAkKGxzICouZmFpbGVkKTsgZG8KKwllY2hvIC1uICIke2ZuYW1lJSUuZmFpbGVkfSAiCitkb25lCitlY2hvICIiCisKK2V4aXQgMQpkaWZmIC0tZ2l0IGEvdGVzdHMvdGVzdF9zY3JpcHQuaW4gYi90ZXN0cy90ZXN0X3NjcmlwdC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWFkMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdGVzdF9zY3JpcHQuaW4KQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisjIFJ1biBhbGwgb3Igc3BlY2lmaWVkIHRlc3Qgc2NyaXB0cworIworCitjYXNlICIkMSIgaW4KKyAgICAtLXZhbGdyaW5kKQorICAgIAlleHBvcnQgVVNFX1ZBTEdSSU5EPSJ2YWxncmluZCAtcSAtLXNpbS1oaW50cz1sYXgtaW9jdGxzIgorCXNoaWZ0OworCTs7CisgICAgLS12YWxncmluZC1sZWFrY2hlY2spCisgICAgCWV4cG9ydCBVU0VfVkFMR1JJTkQ9InZhbGdyaW5kIC0tc2ltLWhpbnRzPWxheC1pb2N0bHMgLS1sZWFrLWNoZWNrPWZ1bGwgLS1zaG93LXJlYWNoYWJsZT15ZXMgLS1sb2ctZmlsZT0vdG1wL3ZhbGdyaW5kLSVwLmxvZyIKKwlzaGlmdDsKKwk7OworZXNhYworCitpZiB0ZXN0ICIkMSJ4ID0geCA7IHRoZW4KKyAgVEVTVFM9YGxzIC1kICRTUkNESVIvW2EtekEtWl1fKmAKK2Vsc2UKKyAgVEVTVFM9CisgIGZvciBpOyBkbworICAgIGNhc2UgJGkgaW4KKwlbYS16QS1aXSkJVEVTVFM9IiRURVNUUyAkU1JDRElSLyR7aX1fKiIgOzsKKwkqKQkJVEVTVFM9IiRURVNUUyAkU1JDRElSLyRpIiA7OworICAgIGVzYWMKKyAgZG9uZQorZmkKKworZm9yIHRlc3RfZGlyIGluICRURVNUUzsgZG8KKwkuL3Rlc3Rfb25lICR0ZXN0X2RpcgorZG9uZQorCiskU1JDRElSL3Rlc3RfcG9zdApkaWZmIC0tZ2l0IGEvdGVzdHMvdV9ta2UyZnMvc2NyaXB0IGIvdGVzdHMvdV9ta2UyZnMvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNDlkZGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91X21rZTJmcy9zY3JpcHQKQEAgLTAsMCArMSwzNCBAQAordGVzdF9kZXNjcmlwdGlvbj0iZTJ1bmRvIHdpdGggbWtlMmZzIgoraWYgdGVzdCAteCAkRTJVTkRPX0VYRTsgdGhlbgorCitFMkZTUFJPR1NfVU5ET19ESVI9L3RtcAorZXhwb3J0IEUyRlNQUk9HU19VTkRPX0RJUgorVERCX0ZJTEU9JEUyRlNQUk9HU19VTkRPX0RJUi9ta2UyZnMtJChiYXNlbmFtZSAkVE1QRklMRSkuZTJ1bmRvCitPVVQ9JHRlc3RfbmFtZS5sb2cKK3JtIC1mICRUREJfRklMRSA+L2Rldi9udWxsIDI+JjEKKworZGQgaWY9L2Rldi96ZXJvIG9mPSRUTVBGSUxFIGJzPTFrIGNvdW50PTUxMiA+IC9kZXYvbnVsbCAyPiYxCisKK2VjaG8gbWtlMmZzIC1xIC1GIC1vIExpbnV4IC1iIDEwMjQgdGVzdC5pbWcgID4gJE9VVAorJE1LRTJGUyAtRiAtbyBMaW51eCAtSSAxMjggLWIgMTAyNCAkVE1QRklMRSAgPj4gJE9VVCAyPiYxCitjcmM9YCRDUkNTVU0gJFRNUEZJTEVgCitlY2hvICRDUkNTVU0gYmVmb3JlIG1rZTJmcyAkY3JjID4+ICRPVVQKKworZWNobyB1c2luZyBta2UyZnMgdG8gdGVzdCBlMnVuZG8gPj4gJE9VVAorJE1LRTJGUyAtcSAtRiAtbyBMaW51eCAtSSAyNTYgLU8gdW5pbml0X2JnIC1FIGxhenlfaXRhYmxlX2luaXQ9MSAtYiAxMDI0ICRUTVBGSUxFICA+PiAkT1VUIDI+JjEKK25ld19jcmM9YCRDUkNTVU0gJFRNUEZJTEVgCitlY2hvICRDUkNTVU0gYWZ0ZXIgbWtlMmZzICRuZXdfY3JjID4+ICRPVVQKKworJEUyVU5ET19FWEUgICRUREJfRklMRSAkVE1QRklMRSAgPj4gJE9VVCAyPiYxCituZXdfY3JjPWAkQ1JDU1VNICRUTVBGSUxFYAorZWNobyAkQ1JDU1VNIGFmdGVyIGUydW5kbyAkbmV3X2NyYyA+PiAkT1VUCisKK2lmIFsgJGNyYyA9ICRuZXdfY3JjIF07IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWxuIC1mICR0ZXN0X25hbWUubG9nICR0ZXN0X25hbWUuZmFpbGVkCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IGZhaWxlZCIKK2ZpCitybSAtZiAkVERCX0ZJTEUgJFRNUEZJTEUKK2ZpCmRpZmYgLS1naXQgYS90ZXN0cy91X3R1bmUyZnMvc2NyaXB0IGIvdGVzdHMvdV90dW5lMmZzL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDQzZjVhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdV90dW5lMmZzL3NjcmlwdApAQCAtMCwwICsxLDM0IEBACit0ZXN0X2Rlc2NyaXB0aW9uPSJlMnVuZG8gd2l0aCB0dW5lMmZzIgoraWYgdGVzdCAteCAkRTJVTkRPX0VYRTsgdGhlbgorCitFMkZTUFJPR1NfVU5ET19ESVI9L3RtcAorZXhwb3J0IEUyRlNQUk9HU19VTkRPX0RJUgorVERCX0ZJTEU9JEUyRlNQUk9HU19VTkRPX0RJUi90dW5lMmZzLSQoYmFzZW5hbWUgJFRNUEZJTEUpLmUydW5kbworT1VUPSR0ZXN0X25hbWUubG9nCitybSAtZiAkVERCX0ZJTEUgPi9kZXYvbnVsbCAyPiYxCisKK2RkIGlmPS9kZXYvemVybyBvZj0kVE1QRklMRSBicz0xayBjb3VudD01MTIgPiAvZGV2L251bGwgMj4mMQorCitlY2hvIG1rZTJmcyAtcSAtRiAtbyBMaW51eCAtYiAxMDI0ICRUTVBGSUxFICA+ICRPVVQKKyRNS0UyRlMgLXEgLUYgLW8gTGludXggLUkgMTI4IC1iIDEwMjQgJFRNUEZJTEUgID4+ICRPVVQgMj4mMQorY3JjPWAkQ1JDU1VNICRUTVBGSUxFYAorZWNobyAkQ1JDU1VNIGJlZm9yZSB0dW5lMmZzICRjcmMgPj4gJE9VVAorCitlY2hvIHVzaW5nIHR1bmUyZnMgdG8gdGVzdCBlMnVuZG8gPj4gJE9VVAorJFRVTkUyRlMgLUkgMjU2ICRUTVBGSUxFICA+PiAkT1VUIDI+JjEKK25ld19jcmM9YCRDUkNTVU0gJFRNUEZJTEVgCitlY2hvICRDUkNTVU0gYWZ0ZXIgdHVuZTJmcyAkbmV3X2NyYyA+PiAkT1VUCisKKyRFMlVORE9fRVhFICAkVERCX0ZJTEUgJFRNUEZJTEUgID4+ICRPVVQgMj4mMQorbmV3X2NyYz1gJENSQ1NVTSAkVE1QRklMRWAKK2VjaG8gJENSQ1NVTSBhZnRlciBlMnVuZG8gJG5ld19jcmMgPj4gJE9VVAorCitpZiBbICRjcmMgPSAkbmV3X2NyYyBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2Vsc2UKKwlsbiAtZiAkdGVzdF9uYW1lLmxvZyAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCitmaQorcm0gLWYgJFREQl9GSUxFICRUTVBGSUxFCitmaQpkaWZmIC0tZ2l0IGEvdXRpbC9NYWtlZmlsZS5pbiBiL3V0aWwvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIzNWZmZgotLS0gL2Rldi9udWxsCisrKyBiL3V0aWwvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2NyBAQAorIworIyBTdGFuZGFyZCBlMmZzcHJvZ3MgcHJvbG9ndWUuLi4uCisjCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACit0b3BfYnVpbGRkaXIgPSAuLgorbXlfZGlyID0gdXRpbAorSU5TVEFMTCA9IEBJTlNUQUxMQAorCitTUkNTID0gJChzcmNkaXIpL3N1YnN0LmMKKworQE1DT05GSUdACisKKy5jLm86CisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChCVUlMRF9DQykgLWMgJChCVUlMRF9DRkxBR1MpICQ8IC1vICRACisJJChRKSAkKENIRUNLX0NNRCkgJChBTExfQ0ZMQUdTKSAkPAorCitQUk9HUz0JCXN1YnN0IHN5bWxpbmtzCisKK2FsbDo6ICQoUFJPR1MpIGdlbi10YXJiYWxsCisKK2RpcnBhdGhzLmg6CisJJChFKSAiCUNSRUFURSBkaXJwYXRocy5oIgorCSQoUSkgZWNobyAiLyogZmFrZSBkaXJwYXRocy5oIGZvciBjb25maWcuaCAqLyIgPiBkaXJwYXRocy5oCisKK3N1YnN0Lm86IGRpcnBhdGhzLmgKKworc3Vic3Q6IHN1YnN0Lm8KKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKEJVSUxEX0NDKSAkKEJVSUxEX0xERkxBR1MpIC1vIHN1YnN0IHN1YnN0Lm8KKworY29weV9zcGFyc2U6IGNvcHlfc3BhcnNlLm8KKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKEJVSUxEX0NDKSAkKEJVSUxEX0xERkxBR1MpIC1vIGNvcHlfc3BhcnNlIGNvcHlfc3BhcnNlLm8KKworc3ltbGlua3M6IHN5bWxpbmtzLm8KKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKEJVSUxEX0NDKSAkKEJVSUxEX0xERkxBR1MpIC1vIHN5bWxpbmtzIHN5bWxpbmtzLm8KKworZ2VuLXRhcmJhbGw6ICQoc3JjZGlyKS9nZW4tdGFyYmFsbC5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCSQoRSkgIglDT05GSUcuU1RBVFVTICRAIgorCSQoUSkgY2QgJCh0b3BfYnVpbGRkaXIpOyBDT05GSUdfRklMRVM9dXRpbC9nZW4tdGFyYmFsbCAuL2NvbmZpZy5zdGF0dXMKKwkkKFEpIGNobW9kICt4IGdlbi10YXJiYWxsCisKK3RhcmJhbGxzOiBnZW4tdGFyYmFsbAorCXNoIGdlbi10YXJiYWxsIGRlYmlhbgorCXNoIGdlbi10YXJiYWxsIGFsbAorCXNoIGdlbi10YXJiYWxsIHN1YnNldAorCitjbGVhbjo6CisJJChSTSkgLWYgJChQUk9HUykgXCMqICoucyAqLm8gKi5hICp+IGNvcmUgKi50YXIuZ3ogZ2VuLXRhcmJhbGwgXAorCQljb3B5LXNwYXJzZSBkaXJwYXRocy5oCisKK21vc3RseWNsZWFuOiBjbGVhbgorCitkaXN0Y2xlYW46IGNsZWFuCisJJChSTSkgLWYgLmRlcGVuZCBNYWtlZmlsZSAkKHNyY2RpcikvVEFHUyAkKHNyY2RpcikvTWFrZWZpbGUuaW4ub2xkCisKKyMgKysrIERlcGVuZGVuY3kgbGluZSBlYXRlciArKysKKyMgCisjIE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb2xsb3cuICBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc2VjdGlvbiBpbgorIyB0aGUgTWFrZWZpbGUuaW4gZmlsZQorIworc3Vic3QubzogJChzcmNkaXIpL3N1YnN0LmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBkaXJwYXRocy5oCmRpZmYgLS1naXQgYS91dGlsL2FsbC5leGNsdWRlIGIvdXRpbC9hbGwuZXhjbHVkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2QwM2IyCi0tLSAvZGV2L251bGwKKysrIGIvdXRpbC9hbGwuZXhjbHVkZQpAQCAtMCwwICsxLDE1IEBACisuZ2l0CisuaGcKKy5oZ2lnbm9yZQorLnBjCitwYXRjaGVzCitSRUFETUUuc3Vic2V0CitidWlsZAorYnVpbGRbXi9dKgorcnBtLmxvZworVE9ETworcG93ZXJxdWVzdAorLmV4Y2x1ZGUtZmlsZQorcG8vc3RhbXAtY2F0LWlkCitwby9jYXQtaWQtdGJsLmMKK01ldGEKZGlmZiAtLWdpdCBhL3V0aWwvY29weV9zcGFyc2UuYyBiL3V0aWwvY29weV9zcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmFiMjczCi0tLSAvZGV2L251bGwKKysrIGIvdXRpbC9jb3B5X3NwYXJzZS5jCkBAIC0wLDAgKzEsMjI4IEBACisvKgorICogY29weV9zcGFyc2UuYyAtLSBjb3B5IGEgdmVyeSBsYXJnZSBzcGFyc2UgZmlsZXMgZWZmaWNpZW50bHkKKyAqIAkocmVxdWlyZXMgcm9vdCBwcml2aWxlZ2VzKQorICoKKyAqIENvcHlyaWdodCAyMDAzLCAyMDA0IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWZuZGVmIF9fbGludXhfXworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2ludCBtYWluKHZvaWQpIHsKKyAgICBmcHV0cygiVGhpcyBwcm9ncmFtIGlzIG9ubHkgc3VwcG9ydGVkIG9uIExpbnV4IVxuIiwgc3RkZXJyKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisjZWxzZQorI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3Zmcy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZkLmg+CisKK2ludCB2ZXJib3NlID0gMDsKKworI2RlZmluZSBGSUJNQVAJICAgX0lPKDB4MDAsMSkJLyogYm1hcCBhY2Nlc3MgKi8KKyNkZWZpbmUgRklHRVRCU1ogICBfSU8oMHgwMCwyKQkvKiBnZXQgdGhlIGJsb2NrIHNpemUgdXNlZCBmb3IgYm1hcCAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfYm1hcChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgYmxvY2spCit7CisJaW50CXJldDsKKwl1bnNpZ25lZCBsb25nIGI7CisKKwliID0gYmxvY2s7CisJcmV0ID0gaW9jdGwoZmQsIEZJQk1BUCwgJmIpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChlcnJubyA9PSBFUEVSTSkgeworCQkJZnByaW50ZihzdGRlcnIsICJObyBwZXJtaXNzaW9uIHRvIHVzZSBGSUJNQVAgaW9jdGw7IG11c3QgaGF2ZSByb290IHByaXZpbGVnZXNcbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCQlwZXJyb3IoIkZJQk1BUCIpOworCX0KKwlyZXR1cm4gYjsKK30KKworc3RhdGljIGludCBmdWxsX3JlYWQoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgZ290LCB0b3RhbCA9IDA7CisJaW50IHBhc3MgPSAwOworCisJd2hpbGUgKGNvdW50ID4gMCkgeworCQlnb3QgPSByZWFkKGZkLCBidWYsIGNvdW50KTsKKwkJaWYgKGdvdCA9PSAtMSkgeworCQkJaWYgKChlcnJubyA9PSBFSU5UUikgfHwgKGVycm5vID09IEVBR0FJTikpCisJCQkJY29udGludWU7CisJCQlyZXR1cm4gdG90YWwgPyB0b3RhbCA6IC0xOworCQl9CisJCWlmIChnb3QgPT0gMCkgeworCQkJaWYgKHBhc3MrKyA+PSAzKQorCQkJCXJldHVybiB0b3RhbDsKKwkJCWNvbnRpbnVlOworCQl9CisJCXBhc3MgPSAwOworCQlidWYgKz0gZ290OworCQl0b3RhbCArPSBnb3Q7CisJCWNvdW50IC09IGdvdDsKKwl9CisJcmV0dXJuIHRvdGFsOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3NwYXJzZV9maWxlKGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZGVzdCkKK3sKKwlzdHJ1Y3Qgc3RhdDY0CWZpbGVpbmZvOworCWxvbmcJCWxiLCBpLCBmZCwgb2ZkLCBicywgYmxvY2ssIG51bWJsb2NrczsKKwlzc2l6ZV90CQlnb3QsIGdvdDI7CisJb2ZmNjRfdAkJb2Zmc2V0ID0gMCwgc2hvdWxkX2JlOworCWNoYXIJCSpidWY7CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRmKCJDb3B5aW5nIHNwYXJzZSBmaWxlIGZyb20gJXMgdG8gJXNcbiIsIHNyYywgZGVzdCk7CisKKwlpZiAoc3RyY21wKHNyYywgIi0iKSkgeworCQlpZiAoc3RhdDY0KHNyYywgJmZpbGVpbmZvKSA8IDApIHsKKwkJCXBlcnJvcigic3RhdCIpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAoIVNfSVNSRUcoZmlsZWluZm8uc3RfbW9kZSkpIHsKKwkJCXByaW50ZigiJXM6IE5vdCBhIHJlZ3VsYXIgZmlsZVxuIiwgc3JjKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJZmQgPSBvcGVuKHNyYywgT19SRE9OTFkgfCBPX0xBUkdFRklMRSk7CisJCWlmIChmZCA8IDApIHsKKwkJCXBlcnJvcigib3BlbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAoaW9jdGwoZmQsIEZJR0VUQlNaLCAmYnMpIDwgMCkgeworCQkJcGVycm9yKCJGSUdFVEJTWiIpOworCQkJY2xvc2UoZmQpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAoYnMgPCAwKSB7CisJCQlwcmludGYoIiVzOiBJbnZhbGlkIGJsb2NrIHNpemU6ICVsZFxuIiwgc3JjLCBicyk7CisJCQlleGl0KDEpOworCQl9CisJCWlmICh2ZXJib3NlKQorCQkJcHJpbnRmKCJCbG9ja3NpemUgb2YgZmlsZSAlcyBpcyAlbGRcbiIsIHNyYywgYnMpOworCQludW1ibG9ja3MgPSAoZmlsZWluZm8uc3Rfc2l6ZSArIChicy0xKSkgLyBiczsKKwkJaWYgKHZlcmJvc2UpCisJCQlwcmludGYoIkZpbGUgc2l6ZSBvZiAlcyBpcyAlbGxkICglbGQgYmxvY2tzKVxuIiwgc3JjLAorCQkJICAgICAgIChsb25nIGxvbmcpIGZpbGVpbmZvLnN0X3NpemUsIG51bWJsb2Nrcyk7CisJfSBlbHNlIHsKKwkJZmQgPSAwOworCQlicyA9IDEwMjQ7CisJfQorCisJb2ZkID0gb3BlbihkZXN0LCBPX1dST05MWXxPX0NSRUFUfE9fVFJVTkN8T19MQVJHRUZJTEUsIDA3NzcpOworCWlmIChvZmQgPCAwKSB7CisJCXBlcnJvcihkZXN0KTsKKwkJZXhpdCgxKTsKKwl9CisKKwlidWYgPSBtYWxsb2MoYnMpOworCWlmICghYnVmKSB7CisJCWZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgYWxsb2NhdGUgYnVmZmVyIik7CisJCWV4aXQoMSk7CisJfQorCisJZm9yIChsYiA9IDA7ICFmZCB8fCBsYiA8IG51bWJsb2NrczsgbGIrKykgeworCQlpZiAoZmQpIHsKKwkJCWJsb2NrID0gZ2V0X2JtYXAoZmQsIGxiKTsKKwkJCWlmICghYmxvY2spCisJCQkJY29udGludWU7CisJCQlzaG91bGRfYmUgPSAoKG9mZjY0X3QpIGxiKSAqIGJzOworCQkJaWYgKG9mZnNldCAhPSBzaG91bGRfYmUpIHsKKwkJCQlpZiAodmVyYm9zZSkKKwkJCQkJcHJpbnRmKCJTZWVraW5nIHRvICVsbGRcbiIsIHNob3VsZF9iZSk7CisJCQkJaWYgKGxzZWVrNjQoZmQsIHNob3VsZF9iZSwgU0VFS19TRVQpID09IChvZmZfdCkgLTEpIHsKKwkJCQkJcGVycm9yKCJsc2VlayBzcmMiKTsKKwkJCQkJZXhpdCgxKTsKKwkJCQl9CisJCQkJaWYgKGxzZWVrNjQob2ZkLCBzaG91bGRfYmUsIFNFRUtfU0VUKSA9PSAob2ZmX3QpIC0xKSB7CisJCQkJCXBlcnJvcigibHNlZWsgZGVzdCIpOworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCQlvZmZzZXQgPSBzaG91bGRfYmU7CisJCQl9CisJCX0KKwkJZ290ID0gZnVsbF9yZWFkKGZkLCBidWYsIGJzKTsKKworCQlpZiAoZmQgPT0gMCAmJiBnb3QgPT0gMCkKKwkJCWJyZWFrOworCisJCWlmIChnb3QgPT0gYnMpIHsKKwkJCWZvciAoaT0wOyBpIDwgYnM7IGkrKykKKwkJCQlpZiAoYnVmW2ldKQorCQkJCQlicmVhazsKKwkJCWlmIChpID09IGJzKSB7CisJCQkJbHNlZWsob2ZkLCBicywgU0VFS19DVVIpOworCQkJCW9mZnNldCArPSBiczsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlnb3QyID0gd3JpdGUob2ZkLCBidWYsIGdvdCk7CisJCWlmIChnb3QgIT0gZ290MikgeworCQkJcHJpbnRmKCJzaG9ydCB3cml0ZVxuIik7CisJCQlleGl0KDEpOworCQl9CisJCW9mZnNldCArPSBnb3Q7CisJfQorCW9mZnNldCA9IGZpbGVpbmZvLnN0X3NpemU7CisJaWYgKGZzdGF0NjQob2ZkLCAmZmlsZWluZm8pIDwgMCkgeworCQlwZXJyb3IoImZzdGF0Iik7CisJCWV4aXQoMSk7CisJfQorCWlmIChmaWxlaW5mby5zdF9zaXplICE9IG9mZnNldCkgeworCQlsc2VlazY0KG9mZCwgb2Zmc2V0LTEsIFNFRUtfQ1VSKTsKKwkJYnVmWzBdID0gMDsKKwkJd3JpdGUob2ZkLCBidWYsIDEpOworCX0KKwljbG9zZShmZCk7CisJY2xvc2Uob2ZkKTsKK30KKworc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCit7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgWy12XSBzb3VyY2VfZmlsZSBkZXN0aW5hdGlvbl9maWxlXG4iLCBwcm9nbmFtZSk7CisJZXhpdCgxKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKmFyZ3YpCit7CisJaW50IGM7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgInYiKSkgIT0gRU9GKQorCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAndic6CisJCQl2ZXJib3NlKys7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKGFyZ3ZbMF0pOworCQkJYnJlYWs7CisJCX0KKwlpZiAob3B0aW5kKzIgIT0gYXJnYykKKwkJdXNhZ2UoYXJndlswXSk7CisJY29weV9zcGFyc2VfZmlsZShhcmd2W29wdGluZF0sIGFyZ3Zbb3B0aW5kKzFdKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS91dGlsL2djYy13YWxsLWNsZWFudXAgYi91dGlsL2djYy13YWxsLWNsZWFudXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxOTUyNgotLS0gL2Rldi9udWxsCisrKyBiL3V0aWwvZ2NjLXdhbGwtY2xlYW51cApAQCAtMCwwICsxLDIxIEBACisjIS9iaW4vc2VkIC1mCisjCisjIFRoaXMgc2NyaXB0IGZpbHRlcnMgb3V0IGdjYy13YWxsIGNydWQgdGhhdCB3ZSdyZSBub3QgaW50ZXJlc3RlZCBpbiBzZWVpbmcuCisjCisvXmNjIC9kCisvXmtjYyAvZAorL15nY2MgL2QKKy9kb2VzIG5vdCBzdXBwb3J0IGBsb25nIGxvbmcnL2QKKy9mb3JiaWRzIGxvbmcgbG9uZyBpbnRlZ2VyIGNvbnN0YW50cy9kCisvZG9lcyBub3Qgc3VwcG9ydCB0aGUgYGxsJyBsZW5ndGggbW9kaWZpZXIvZAorL2RvZXMgbm90IHN1cHBvcnQgdGhlIGBsbCcgcHJpbnRmIGxlbmd0aCBtb2RpZmllci9kCisvQU5TSSBDIGZvcmJpZHMgbG9uZyBsb25nIGludGVnZXIgY29uc3RhbnRzL2QKKy90cmFkaXRpb25hbCBDIHJlamVjdHMgc3RyaW5nIGNvbmNhdGVuYXRpb24vZAorL2ludGVnZXIgY29uc3RhbnQgaXMgdW5zaWduZWQgaW4gQU5TSSBDLCBzaWduZWQgd2l0aCAtdHJhZGl0aW9uYWwvZAorL0F0IHRvcCBsZXZlbDovZAorL0luIGZpbGUgaW5jbHVkZWQgZnJvbS9kCisvSW4gZnVuY3Rpb24gYC4qJzovZAorL3plcm8tbGVuZ3RoIGZvcm1hdCBzdHJpbmcvZAorL3dhcm5pbmc6IChuZWFyIGluaXRpYWxpemF0aW9uIGZvci9kCisvXlsgCV0qZnJvbS9kCisKZGlmZiAtLWdpdCBhL3V0aWwvZ2VuLXRhcmJhbGwuaW4gYi91dGlsL2dlbi10YXJiYWxsLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MmYxMmMKLS0tIC9kZXYvbnVsbAorKysgYi91dGlsL2dlbi10YXJiYWxsLmluCkBAIC0wLDAgKzEsNTYgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBkaXN0cmlidXRpb24gdGFyYmFsbAorIworc3JjZGlyPUBzcmNkaXJACit0b3Bfc3JjZGlyPUB0b3Bfc3JjZGlyQAordG9wX2Rpcj1gY2QgJHRvcF9zcmNkaXI7IHB3ZGAKK2Jhc2VfdmVyPWBlY2hvIEBFMkZTUFJPR1NfVkVSU0lPTkAgfCBzZWQgLWUgJ3MvLVdJUC8vJyAtZSAncy9wcmUtLy8nIC1lICdzLy1QTFVTLy8nYAorYmFzZV9lMmZzcHJvZ3M9YGJhc2VuYW1lICR0b3BfZGlyYAorZXhjbHVkZT0vdG1wL2V4Y2x1ZGUKK0daSVA9Z3ppcAorCisjCisjIFRoaXMgaGFjayBpcyBuZWVkZWQgYmVjYXVzZSB0ZXhpMmR2aSBibG93cyB1cCBob3JyaWJseSBpZiB0aGVyZSBhcmUgCisjIGFueSAnficgY2hyYWN0ZXJzIGluIHRoZSBkaXJlY3RvcnkgcGF0aG5hbWUuICBTbyB3ZSBrbHVkZ2UgYXJvdW5kIGl0IGJ5CisjIHVzaW5nIGEgbm9uLXN0YW5kYXJkIGRpcmVjdG9yeSBuYW1lIGZvciBXSVAgcmVsZWFzZXMuICBkcGtnLXNvdXJjZQorIyBjb21wbGFpbnMsIGJ1dCBsaWZlIGdvZXMgb24uCisjCitkZWJfcGtndmVyPWBlY2hvIEBFMkZTUFJPR1NfUEtHVkVSQCB8IHNlZCAtZSAncy9+Ly0vZydgCisgICAgCitjYXNlICQxIGluCisgICAgZGViaWFufHVidW50dSkKKwlTUkNST09UPSJlMmZzcHJvZ3MtJGRlYl9wa2d2ZXIiCisJcmVuYW1lX3RhcmJhbGw9ImUyZnNwcm9nc19ARTJGU1BST0dTX1BLR1ZFUkAub3JpZy50YXIuZ3oiCisJbGlzdD1hbGwKKwk7OworICAgIHN1YnNldCkKKwlTUkNST09UPSJlMmZzcHJvZ3MtbGlicy0kYmFzZV92ZXIiCisJbGlzdD1zdWJzZXQKKwk7OworICAgYWxsfCopCisJU1JDUk9PVD0iZTJmc3Byb2dzLSRiYXNlX3ZlciIKKwlsaXN0PWFsbAorCTs7Citlc2FjCisKK212IC4uL2UyZnNwcm9ncy5zcGVjICR0b3Bfc3JjZGlyL2UyZnNwcm9ncy5zcGVjCisoY2QgJHRvcF9zcmNkaXIvLi4gOyBmaW5kICRiYXNlX2UyZnNwcm9ncyBcKCAtbmFtZSBcKn4gLW8gLW5hbWUgXCoub3JpZyBcCisJCS1vIC1uYW1lIENWUyAtbyAtbmFtZSBcKi5yZWogLW8gLW5hbWUgTWFrZWZpbGUucHEgXAorCQktbyAtbmFtZSBUQUdTIC1vIC1uYW1lIFwqLm9sZCAtbyAtbmFtZSBTQ0NTIFwKKwkJLW8gLW5hbWUgY2hhbmdlZC1maWxlcyAtbyAtbmFtZSAuI1wqIC1vIC1uYW1lIFwqLnRhci5neiBcCisJCS1vIC1uYW1lIGF1dG9tNHRlLmNhY2hlIFwpIFwKKwkJLXByaW50KSB8IHNlZCAtZSAicy9eJGJhc2VfZTJmc3Byb2dzLyRTUkNST09ULyIgPiAkZXhjbHVkZQorc2VkIC1lICJzO147JFNSQ1JPT1QvOyIgPCAkc3JjZGlyLyRsaXN0LmV4Y2x1ZGUgPj4gJGV4Y2x1ZGUKKworKGNkICR0b3Bfc3JjZGlyLy4uIDsgcm0gLWYgJFNSQ1JPT1QgOyBsbiAtc2YgJGJhc2VfZTJmc3Byb2dzICRTUkNST09UKQorCisoY2QgJHRvcF9zcmNkaXIvLi4gOyB0YXIgLWMgLWggLXYgLWYgLSAtWCAkZXhjbHVkZSAkU1JDUk9PVCkgXAorCSB8ICRHWklQIC05IC1jID4gJFNSQ1JPT1QudGFyLmd6CiskR1pJUCAtbCAkU1JDUk9PVC50YXIuZ3oKKworKGNkICR0b3Bfc3JjZGlyLy4uIDsgcm0gLWYgJFNSQ1JPT1QpCittdiAkdG9wX3NyY2Rpci9lMmZzcHJvZ3Muc3BlYyAuLi9lMmZzcHJvZ3Muc3BlYyAKK2lmIHRlc3QgLW4gIiRyZW5hbWVfdGFyYmFsbCI7IHRoZW4KKyAgICBtdiAkU1JDUk9PVC50YXIuZ3ogJHJlbmFtZV90YXJiYWxsCitmaQpkaWZmIC0tZ2l0IGEvdXRpbC9pbnN0YWxsLXN5bWxpbmsuaW4gYi91dGlsL2luc3RhbGwtc3ltbGluay5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDM0MWI4Ci0tLSAvZGV2L251bGwKKysrIGIvdXRpbC9pbnN0YWxsLXN5bWxpbmsuaW4KQEAgLTAsMCArMSw4OSBAQAorIyEvYmluL3NoCisjCisjIGluc3RhbGwtc3ltbGluayBzb3VyY2UgZGVzdGluYXRpb24gZGVzdGRpcgorIworCitTWU1MSU5LUz1zeW1saW5rcworTE5fUz0iQExOX1NAIgorUk09IkBSTUAiCitGT1JDRV9SRUxBVElWRT1OTworRk9SQ0VfQUJTT0xVVEU9Tk8KKword2hpbGUgZWNobyAkMSB8IGdyZXAgLXEgLS0gXi0gOworZG8KKwljYXNlICQxIGluCisJCS0tcmVsYXRpdmUpCisJCQlGT1JDRV9SRUxBVElWRT1ZRVMKKwkJCTs7CisJCS0tYWJzb2x1dGUpCisJCQlGT1JDRV9BQlNPTFVURT1ZRVMKKwkJCTs7CisJCS0tZGViaWFuKQorCQkJRk9SQ0VfQUJTT0xVVEU9Tk8KKwkJCUZPUkNFX1JFTEFUSVZFPU5PCisJCQk7OworCQktLXN5bWxpbmtzPSopCisJCQlTWU1MSU5LUz0kKGVjaG8gJDEgfCBzZWQgLWUgJ3MvLS1zeW1saW5rcz0vLycpCisJCQk7OworCQkqKQorCQkJZWNobyAiVW5rbm93biBvcHRpb24gJDEiCisJCQlleGl0IDEKKwkJCTs7CisJZXNhYwkJCQkJICAgICAKKwlzaGlmdDsKK2RvbmUKKworCitGSVhfU1lNTElOSz0iJFNZTUxJTktTIC1jIgorCitTUkM9IiQxIgorREVTVD0iJDIiCitERVNURElSPSIkMyIKKworaWYgISBlY2hvICRTUkMgfCBncmVwIC1xIF4vIDsgdGhlbgorCWVjaG8gJFNSQzogU291cmNlIHBhdGhuYW1lIG11c3QgYmUgYWJzb2x1dGUKKwlleGl0IDEKK2ZpCisKK2lmICEgZWNobyAkREVTVCB8IGdyZXAgLXEgXi8gOyB0aGVuCisJZWNobyAkREVTVDogRGVzdGluYXRpb24gcGF0aG5hbWUgbXVzdCBiZSBhYnNvbHV0ZQorCWV4aXQgMQorZmkKKworaWYgISB0ZXN0IC1lICIkREVTVERJUiRTUkMiIDsgdGhlbgorCWVjaG8gJERFU1RESVIkU1JDOiBmaWxlIG9yIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdAorCWV4aXQgMQorZmkKKworJFJNIC1mICIkREVTVERJUiRERVNUIgorCitpZiB0ZXN0ICIkTE5fUyIgIT0gImxuIC1zIiA7IHRoZW4KKwkkTE5fUyAiJERFU1RESVIkU1JDIiAiJERFU1RESVIkREVTVCIKKwlleGl0IDAKK2ZpCisKK2lmIHRlc3QgJChkaXJuYW1lICIkU1JDIikgPSAkKGRpcm5hbWUgIiRERVNUIikgOyB0aGVuCisJJExOX1MgIiQoYmFzZW5hbWUgIiRTUkMiKSIgIiRERVNURElSJERFU1QiCisJZXhpdCAwCitmaQorCitUT1BfU1JDPSQoZWNobyAkU1JDIHwgYXdrIC1GLyAne3ByaW50ICQyfScpCitUT1BfREVTVD0kKGVjaG8gJERFU1QgfCBhd2sgLUYvICd7cHJpbnQgJDJ9JykKKworaWYgdGVzdCAkRk9SQ0VfUkVMQVRJVkUgPSBZRVMgOyB0aGVuCisJVE9QX1NSQz1GT1JDRQorCVRPUF9ERVNUPUZPUkNFCitmaQorCitpZiB0ZXN0ICRGT1JDRV9BQlNPTFVURSA9IFlFUyA7IHRoZW4KKwlUT1BfU1JDPUZPUkNFCisJVE9QX0RFU1Q9Rk9SQ0VfQUJTT0xVVEUKK2ZpCisKK2lmIHRlc3QgJFRPUF9TUkMgIT0gJFRPUF9ERVNUIDsgdGhlbgorCSRMTl9TICIkU1JDIiAiJERFU1RESVIkREVTVCIKK2Vsc2UKKwkkTE5fUyAiJERFU1RESVIkU1JDIiAiJERFU1RESVIkREVTVCIKKwkkRklYX1NZTUxJTksgIiRERVNURElSJERFU1QiCitmaQorCmRpZmYgLS1naXQgYS91dGlsL2xpYmVjaG8uYyBiL3V0aWwvbGliZWNoby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MmNlMWUKLS0tIC9kZXYvbnVsbAorKysgYi91dGlsL2xpYmVjaG8uYwpAQCAtMCwwICsxLDc4IEBACisvKgorICogbGliZWNoby5jCisgKgorICogRm9yIGVhY2ggYXJndW1lbnQgb24gdGhlIGNvbW1hbmQgbGluZSwgZWNobyBpdC4gIFNob3VsZCBleHBhbmQKKyAqIERPUyB3aWxkY2FyZHMgY29ycmVjdGx5LgorICoKKyAqIFN5bnRheDogbGliZWNobyBbLXAgcHJlZml4XSBsaXN0Li4uCisgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3ZvaWQgZWNob19maWxlcyhjaGFyICosIGNoYXIgKik7CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBpbnQgaTsKKyAgY2hhciAqcHJlZml4OworCisgIHByZWZpeCA9ICIiOworCisgIGlmIChhcmdjIDwgMikgeworICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICBsaWJlY2hvIFstcCBwcmVmaXhdIGxpc3QuLi5cbiIpOworICAgIHJldHVybiAxOworICB9CisKKyAgZm9yIChpID0gMSA7IGkgPCBhcmdjIDsgaSsrKQorICAgIGlmICghc3RyaWNtcChhcmd2W2ldLCAiLXAiKSkKKyAgICAgIHByZWZpeCA9IGFyZ3ZbKytpXTsKKyAgICBlbHNlCisgICAgICBlY2hvX2ZpbGVzKHByZWZpeCwgYXJndltpXSk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2VjaG9fZmlsZXMoY2hhciAqcHJlZml4LCBjaGFyICpmKQoreworICBsb25nIGZmOworICBzdHJ1Y3QgX2ZpbmRkYXRhX3QgZmR0OworICBjaGFyICpzbGFzaDsKKyAgY2hhciBmaWxlcGF0aFsyNTZdOworCisgIC8qCisgICAqIFdlJ3JlIHVuaXggYmFzZWQgcXVpdGUgYSBiaXQgaGVyZS4gIExvb2sgZm9yIG5vcm1hbCBzbGFzaGVzIGFuZAorICAgKiBtYWtlIHRoZW0gcmV2ZXJzZSBzbGFzaGVzLgorICAgKi8KKyAgd2hpbGUoKHNsYXNoID0gc3RycmNocihmLCAnLycpKSAhPSBOVUxMKQorICAgICpzbGFzaCA9ICdcXCc7CisKKyAgc3RyY3B5KGZpbGVwYXRoLCBmKTsKKworICBzbGFzaCA9IHN0cnJjaHIoZmlsZXBhdGgsICdcXCcpOworCisgIGlmIChzbGFzaCkgeworICAgIHNsYXNoKys7CisgICAgKnNsYXNoID0gMDsKKyAgfSBlbHNlIHsKKyAgICBmaWxlcGF0aFswXSA9ICdcMCc7CisgIH0KKworICBmZiA9IF9maW5kZmlyc3QoZiwgJmZkdCk7CisKKyAgaWYgKGZmIDwgMCkgeworICAgIHByaW50ZigiJXMlc1xuIiwgcHJlZml4LCBmKTsKKyAgICByZXR1cm47CisgIH0KKworICBwcmludGYoIiVzJXMlc1xuIiwgcHJlZml4LCBmaWxlcGF0aCwgZmR0Lm5hbWUpOworCisgIGZvciAoOzspIHsKKyAgICBpZiAoX2ZpbmRuZXh0KGZmLCAmZmR0KSA8IDApCisgICAgICBicmVhazsKKyAgICBwcmludGYoIiVzJXMlc1xuIiwgcHJlZml4LCBmaWxlcGF0aCwgZmR0Lm5hbWUpOworICB9CisgIF9maW5kY2xvc2UoZmYpOworfQpkaWZmIC0tZ2l0IGEvdXRpbC9zdWJzZXQuZXhjbHVkZSBiL3V0aWwvc3Vic2V0LmV4Y2x1ZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4OGZhOAotLS0gL2Rldi9udWxsCisrKyBiL3V0aWwvc3Vic2V0LmV4Y2x1ZGUKQEAgLTAsMCArMSwzNSBAQAorLmdpdAorLmhnCisuaGdpZ25vcmUKKy5wYworcGF0Y2hlcworYnVpbGQKK2J1aWxkW14vXSoKK3JwbS5sb2cKK1RPRE8KK3Bvd2VycXVlc3QKKy5leGNsdWRlLXN1YnNldAorcG8vc3RhbXAtY2F0LWlkCitwby9jYXQtaWQtdGJsLmMKK01ldGEKK2UyZnNjaworZXh0MmVkCitkZWJ1Z2ZzCittaXNjCit0ZXN0cworcmVzaXplCitjb250cmliCitwbworaW5jbHVkZQorZGViaWFuCitsaWIvZTJwCitsaWIvZXZtcworbGliL2V4dDJmcworQUJPVVQtTkxTCitSRUFETUUKK0lOU1RBTEwKK0lOU1RBTEwuZGxsYmluCitJTlNUQUxMLmVsZmJpbgorUkVMRUFTRS1OT1RFUworZTJmc3Byb2dzLmxzbQorZTJmc3Byb2dzLnNwZWMKZGlmZiAtLWdpdCBhL3V0aWwvc3Vic3QuYyBiL3V0aWwvc3Vic3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWY2ZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdXRpbC9zdWJzdC5jCkBAIC0wLDAgKzEsNDUwIEBACisvKgorICogc3Vic3QuYyAtLS0gc3Vic3RpdHV0aW9uIHByb2dyYW0KKyAqCisgKiBTdWJzdCBpcyB1c2VkIGFzIGEgcXVpY2t5IHByb2dyYW0gdG8gZG8gQCBzdWJzdGl0dXRpb25zCisgKgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2RlZmluZSBIQVZFX1NZU19USU1FX0gKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHV0aW1lLmg+CisKKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGNoYXIgKm9wdGFyZzsKK2V4dGVybiBpbnQgb3B0aW5kOworI2VuZGlmCisKKworc3RydWN0IHN1YnN0X2VudHJ5IHsKKwljaGFyICpuYW1lOworCWNoYXIgKnZhbHVlOworCXN0cnVjdCBzdWJzdF9lbnRyeSAqbmV4dDsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3Vic3RfZW50cnkgKnN1YnN0X3RhYmxlID0gMDsKKworc3RhdGljIGludCBhZGRfc3Vic3QoY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCit7CisJc3RydWN0IHN1YnN0X2VudHJ5CSplbnQgPSAwOworCisJZW50ID0gKHN0cnVjdCBzdWJzdF9lbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdWJzdF9lbnRyeSkpOworCWlmICghZW50KQorCQlnb3RvIGZhaWw7CisJZW50LT5uYW1lID0gKGNoYXIgKikgbWFsbG9jKHN0cmxlbihuYW1lKSsxKTsKKwlpZiAoIWVudC0+bmFtZSkKKwkJZ290byBmYWlsOworCWVudC0+dmFsdWUgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKHZhbHVlKSsxKTsKKwlpZiAoIWVudC0+dmFsdWUpCisJCWdvdG8gZmFpbDsKKwlzdHJjcHkoZW50LT5uYW1lLCBuYW1lKTsKKwlzdHJjcHkoZW50LT52YWx1ZSwgdmFsdWUpOworCWVudC0+bmV4dCA9IHN1YnN0X3RhYmxlOworCXN1YnN0X3RhYmxlID0gZW50OworCXJldHVybiAwOworZmFpbDoKKwlpZiAoZW50KSB7CisJCWZyZWUoZW50LT5uYW1lKTsKKwkJZnJlZShlbnQpOworCX0KKwlyZXR1cm4gRU5PTUVNOworfQorCitzdGF0aWMgc3RydWN0IHN1YnN0X2VudHJ5ICpmZXRjaF9zdWJzdF9lbnRyeShjaGFyICpuYW1lKQoreworCXN0cnVjdCBzdWJzdF9lbnRyeSAqZW50OworCisJZm9yIChlbnQgPSBzdWJzdF90YWJsZTsgZW50OyBlbnQgPSBlbnQtPm5leHQpIHsKKwkJaWYgKHN0cmNtcChuYW1lLCBlbnQtPm5hbWUpID09IDApCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGVudDsKK30KKworLyoKKyAqIEdpdmVuIHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIHBvc2l0aW9uIG9mIHRoZSByZXBsYWNlbWVudCBuYW1lLAorICogY2hlY2sgdG8gc2VlIGlmIGl0IGlzIHZhbGlkLCBhbmQgcHVsbCBpdCBvdXQgaWYgaXQgaXMuCisgKi8KK3N0YXRpYyBjaGFyICpnZXRfc3Vic3Rfc3ltYm9sKGNvbnN0IGNoYXIgKmJlZ2luLCBzaXplX3QgbGVuLCBjaGFyIHByZWZpeCkKK3sKKwlzdGF0aWMgY2hhciByZXBsYWNlX25hbWVbMTI4XTsKKwljaGFyICpjcCwgKnN0YXJ0OworCisJc3RhcnQgPSByZXBsYWNlX25hbWU7CisJaWYgKHByZWZpeCkKKwkJKnN0YXJ0KysgPSBwcmVmaXg7CisKKwlpZiAobGVuID4gc2l6ZW9mKHJlcGxhY2VfbmFtZSktMikKKwkJcmV0dXJuIE5VTEw7CisJbWVtY3B5KHN0YXJ0LCBiZWdpbiwgbGVuKTsKKwlzdGFydFtsZW5dID0gMDsKKworCS8qCisJICogVGhlIHN1YnN0aXR1dGlvbiB2YXJpYWJsZSBtdXN0IGFsbCBiZSBpbiB0aGUgb2YgWzAtOUEtWmEtel9dLgorCSAqIElmIGl0IGlzbid0LCB0aGlzIG11c3QgYmUgYW4gaW52YWxpZCBzeW1ib2wgbmFtZS4KKwkgKi8KKwlmb3IgKGNwID0gc3RhcnQ7ICpjcDsgY3ArKykgeworCQlpZiAoISgqY3AgPj0gJ2EnICYmICpjcCA8PSAneicpICYmCisJCSAgICAhKCpjcCA+PSAnQScgJiYgKmNwIDw9ICdaJykgJiYKKwkJICAgICEoKmNwID49ICcwJyAmJiAqY3AgPD0gJzknKSAmJgorCQkgICAgISgqY3AgPT0gJ18nKSkKKwkJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gKHJlcGxhY2VfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlcGxhY2Vfc3RyaW5nKGNoYXIgKmJlZ2luLCBjaGFyICplbmQsIGNoYXIgKm5ld3N0cikKK3sKKwlpbnQJcmVwbGFjZV9sZW4sIGxlbjsKKworCXJlcGxhY2VfbGVuID0gc3RybGVuKG5ld3N0cik7CisJbGVuID0gZW5kIC0gYmVnaW47CisJaWYgKHJlcGxhY2VfbGVuID09IDApCisJCW1lbW1vdmUoYmVnaW4sIGVuZCsxLCBzdHJsZW4oZW5kKSsxKTsKKwllbHNlIGlmIChyZXBsYWNlX2xlbiAhPSBsZW4rMSkKKwkJbWVtbW92ZShlbmQrKHJlcGxhY2VfbGVuLWxlbi0xKSwgZW5kLAorCQkJc3RybGVuKGVuZCkrMSk7CisJbWVtY3B5KGJlZ2luLCBuZXdzdHIsIHJlcGxhY2VfbGVuKTsKK30KKworc3RhdGljIHZvaWQgc3Vic3RpdHV0ZV9saW5lKGNoYXIgKmxpbmUpCit7CisJY2hhcgkqcHRyLCAqbmFtZV9wdHIsICplbmRfcHRyOworCXN0cnVjdCBzdWJzdF9lbnRyeSAqZW50OworCWNoYXIJKnJlcGxhY2VfbmFtZTsKKwlzaXplX3QJbGVuOworCisJLyoKKwkgKiBFeHBhbmQgYWxsIEBGT09AIHN1YnN0aXR1dGlvbnMKKwkgKi8KKwlwdHIgPSBsaW5lOworCXdoaWxlIChwdHIpIHsKKwkJbmFtZV9wdHIgPSBzdHJjaHIocHRyLCAnQCcpOworCQlpZiAoIW5hbWVfcHRyKQorCQkJYnJlYWs7CS8qIE5vIG1vcmUgKi8KKwkJaWYgKCooKytuYW1lX3B0cikgPT0gJ0AnKSB7CisJCQkvKgorCQkJICogSGFuZGxlIHR5dHNvQEBtaXQuZWR1IC0tPiB0eXRzb0BtaXQuZWR1CisJCQkgKi8KKwkJCW1lbW1vdmUobmFtZV9wdHItMSwgbmFtZV9wdHIsIHN0cmxlbihuYW1lX3B0cikrMSk7CisJCQlwdHIgPSBuYW1lX3B0cisxOworCQkJY29udGludWU7CisJCX0KKwkJZW5kX3B0ciA9IHN0cmNocihuYW1lX3B0ciwgJ0AnKTsKKwkJaWYgKCFlbmRfcHRyKQorCQkJYnJlYWs7CisJCWxlbiA9IGVuZF9wdHIgLSBuYW1lX3B0cjsKKwkJcmVwbGFjZV9uYW1lID0gZ2V0X3N1YnN0X3N5bWJvbChuYW1lX3B0ciwgbGVuLCAwKTsKKwkJaWYgKCFyZXBsYWNlX25hbWUpIHsKKwkJCXB0ciA9IG5hbWVfcHRyOworCQkJY29udGludWU7CisJCX0KKwkJZW50ID0gZmV0Y2hfc3Vic3RfZW50cnkocmVwbGFjZV9uYW1lKTsKKwkJaWYgKCFlbnQpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5mb3VuZCBleHBhbnNpb246ICclcydcbiIsCisJCQkJcmVwbGFjZV9uYW1lKTsKKwkJCXB0ciA9IGVuZF9wdHIgKyAxOworCQkJY29udGludWU7CisJCX0KKyNpZiAwCisJCWZwcmludGYoc3RkZXJyLCAiUmVwbGFjZSBuYW1lID0gJyVzJyB3aXRoICclcydcbiIsCisJCSAgICAgICByZXBsYWNlX25hbWUsIGVudC0+dmFsdWUpOworI2VuZGlmCisJCXB0ciA9IG5hbWVfcHRyLTE7CisJCXJlcGxhY2Vfc3RyaW5nKHB0ciwgZW5kX3B0ciwgZW50LT52YWx1ZSk7CisJCWlmICgoZW50LT52YWx1ZVswXSA9PSAnQCcpICYmCisJCSAgICAoc3RybGVuKHJlcGxhY2VfbmFtZSkgPT0gc3RybGVuKGVudC0+dmFsdWUpLTIpICYmCisJCSAgICAhc3RybmNtcChyZXBsYWNlX25hbWUsIGVudC0+dmFsdWUrMSwKKwkJCSAgICAgc3RybGVuKGVudC0+dmFsdWUpLTIpKQorCQkJLyogYXZvaWQgYW4gaW5maW5pdGUgbG9vcCAqLworCQkJcHRyICs9IHN0cmxlbihlbnQtPnZhbHVlKTsKKwl9CisJLyoKKwkgKiBOb3cgZG8gYSBzZWNvbmQgcGFzcyB0byBleHBhbmQgJHtGT099CisJICovCisJcHRyID0gbGluZTsKKwl3aGlsZSAocHRyKSB7CisJCW5hbWVfcHRyID0gc3RyY2hyKHB0ciwgJyQnKTsKKwkJaWYgKCFuYW1lX3B0cikKKwkJCWJyZWFrOwkvKiBObyBtb3JlICovCisJCWlmICgqKCsrbmFtZV9wdHIpICE9ICd7JykgeworCQkJcHRyID0gbmFtZV9wdHI7CisJCQljb250aW51ZTsKKwkJfQorCQluYW1lX3B0cisrOworCQllbmRfcHRyID0gc3RyY2hyKG5hbWVfcHRyLCAnfScpOworCQlpZiAoIWVuZF9wdHIpCisJCQlicmVhazsKKwkJbGVuID0gZW5kX3B0ciAtIG5hbWVfcHRyOworCQlyZXBsYWNlX25hbWUgPSBnZXRfc3Vic3Rfc3ltYm9sKG5hbWVfcHRyLCBsZW4sICckJyk7CisJCWlmICghcmVwbGFjZV9uYW1lKSB7CisJCQlwdHIgPSBuYW1lX3B0cjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWVudCA9IGZldGNoX3N1YnN0X2VudHJ5KHJlcGxhY2VfbmFtZSk7CisJCWlmICghZW50KSB7CisJCQlwdHIgPSBlbmRfcHRyICsgMTsKKwkJCWNvbnRpbnVlOworCQl9CisjaWYgMAorCQlmcHJpbnRmKHN0ZGVyciwgIlJlcGxhY2UgbmFtZSA9ICclcycgd2l0aCAnJXMnXG4iLAorCQkgICAgICAgcmVwbGFjZV9uYW1lLCBlbnQtPnZhbHVlKTsKKyNlbmRpZgorCQlwdHIgPSBuYW1lX3B0ci0yOworCQlyZXBsYWNlX3N0cmluZyhwdHIsIGVuZF9wdHIsIGVudC0+dmFsdWUpOworCX0KK30KKworc3RhdGljIHZvaWQgcGFyc2VfY29uZmlnX2ZpbGUoRklMRSAqZikKK3sKKwljaGFyCWxpbmVbMjA0OF07CisJY2hhcgkqY3AsICpwdHI7CisKKwl3aGlsZSAoIWZlb2YoZikpIHsKKwkJbWVtc2V0KGxpbmUsIDAsIHNpemVvZihsaW5lKSk7CisJCWlmIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpID09IE5VTEwpCisJCQlicmVhazsKKwkJLyoKKwkJICogU3RyaXAgbmV3bGluZXMgYW5kIGNvbW1lbnRzLgorCQkgKi8KKwkJY3AgPSBzdHJjaHIobGluZSwgJ1xuJyk7CisJCWlmIChjcCkKKwkJCSpjcCA9IDA7CisJCWNwID0gc3RyY2hyKGxpbmUsICcjJyk7CisJCWlmIChjcCkKKwkJCSpjcCA9IDA7CisJCS8qCisJCSAqIFNraXAgdHJhaWxpbmcgYW5kIGxlYWRpbmcgd2hpdGVzcGFjZQorCQkgKi8KKwkJZm9yIChjcCA9IGxpbmUgKyBzdHJsZW4obGluZSkgLSAxOyBjcCA+PSBsaW5lOyBjcC0tKSB7CisJCQlpZiAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJCQkqY3AgPSAwOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJCWNwID0gbGluZTsKKwkJd2hpbGUgKCpjcCAmJiBpc3NwYWNlKCpjcCkpCisJCQljcCsrOworCQlwdHIgPSBjcDsKKwkJLyoKKwkJICogU2tpcCBlbXB0eSBsaW5lcworCQkgKi8KKwkJaWYgKCpwdHIgPT0gMCkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBJZ25vcmUgZnV0dXJlIGV4dGVuc2lvbnMKKwkJICovCisJCWlmICgqcHRyID09ICdAJykKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBQYXJzZSBzdWJzdGl0dXRpb25zCisJCSAqLworCQlmb3IgKGNwID0gcHRyOyAqY3A7IGNwKyspCisJCQlpZiAoaXNzcGFjZSgqY3ApKQorCQkJCWJyZWFrOworCQkqY3AgPSAwOworCQlmb3IgKGNwKys7ICpjcDsgY3ArKykKKwkJCWlmICghaXNzcGFjZSgqY3ApKQorCQkJCWJyZWFrOworI2lmIDAKKwkJcHJpbnRmKCJTdWJzdGl0dXRlOiAnJXMnIGZvciAnJXMnXG4iLCBwdHIsIGNwID8gY3AgOiAiPE5VTEw+Iik7CisjZW5kaWYKKwkJYWRkX3N1YnN0KHB0ciwgY3ApOworCX0KK30KKworLyoKKyAqIFJldHVybiAwIGlmIHRoZSBmaWxlcyBhcmUgZGlmZmVyZW50LCAxIGlmIHRoZSBmaWxlcyBhcmUgdGhlIHNhbWUuCisgKi8KK3N0YXRpYyBpbnQgY29tcGFyZV9maWxlKEZJTEUgKm9sZF9mLCBGSUxFICpuZXdfZikKK3sKKwljaGFyCW9sZGJ1ZlsyMDQ4XSwgbmV3YnVmWzIwNDhdLCAqb2xkY3AsICpuZXdjcDsKKwlpbnQJcmV0dmFsOworCisJd2hpbGUgKDEpIHsKKwkJb2xkY3AgPSBmZ2V0cyhvbGRidWYsIHNpemVvZihvbGRidWYpLCBvbGRfZik7CisJCW5ld2NwID0gZmdldHMobmV3YnVmLCBzaXplb2YobmV3YnVmKSwgbmV3X2YpOworCQlpZiAoIW9sZGNwICYmICFuZXdjcCkgeworCQkJcmV0dmFsID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWlmICghb2xkY3AgfHwgIW5ld2NwIHx8IHN0cmNtcChvbGRidWYsIG5ld2J1ZikpIHsKKwkJCXJldHZhbCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCit2b2lkIHNldF91dGltZXMoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmZCwgY29uc3Qgc3RydWN0IHRpbWV2YWwgdGltZXNbMl0pCit7CisjaWZkZWYgSEFWRV9GVVRJTUVTCisJaWYgKGZ1dGltZXMoZmQsIHRpbWVzKSA8IDApCisJCXBlcnJvcigiZnV0aW1lcyIpOworI2VsaWYgSEFWRV9VVElNRVMKKwlpZiAodXRpbWVzKGZpbGVuYW1lLCB0aW1lcykgPCAwKQorCQlwZXJyb3IoInV0aW1lcyIpOworI2Vsc2UKKwlzdHJ1Y3QgdXRpbWJ1ZiB1dDsKKworCXV0LmFjdGltZSA9IHRpbWVzWzBdLnR2X3NlYzsKKwl1dC5tb2R0aW1lID0gdGltZXNbMV0udHZfc2VjOworCWlmICh1dGltZShmaWxlbmFtZSwgJnV0KSA8IDApCisJCXBlcnJvcigidXRpbWUiKTsKKyNlbmRpZgorfQorCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljaGFyCWxpbmVbMjA0OF07CisJaW50CWM7CisJaW50CWZkOworCUZJTEUJKmluLCAqb3V0LCAqb2xkID0gTlVMTDsKKwljaGFyCSpvdXRmbiA9IE5VTEwsICpuZXdmbiA9IE5VTEw7CisJaW50CXZlcmJvc2UgPSAwOworCWludAlhZGp1c3RfdGltZXN0YW1wID0gMDsKKwlpbnQJZ290X2F0aW1lID0gMDsKKwlzdHJ1Y3Qgc3RhdCBzdGJ1ZjsKKwlzdHJ1Y3QgdGltZXZhbCB0dlsyXTsKKworCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgImY6dHYiKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdmJzoKKwkJCWluID0gZm9wZW4ob3B0YXJnLCAiciIpOworCQkJaWYgKCFpbikgeworCQkJCXBlcnJvcihvcHRhcmcpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlwYXJzZV9jb25maWdfZmlsZShpbik7CisJCQlmY2xvc2UoaW4pOworCQkJYnJlYWs7CisJCWNhc2UgJ3QnOgorCQkJYWRqdXN0X3RpbWVzdGFtcCsrOworCQkJYnJlYWs7CisJCWNhc2UgJ3YnOgorCQkJdmVyYm9zZSsrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBbLWYgY29uZmlnLWZpbGVdIFtmaWxlXVxuIiwKKwkJCQlhcmd2WzBdKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChvcHRpbmQgPCBhcmdjKSB7CisJCWluID0gZm9wZW4oYXJndltvcHRpbmRdLCAiciIpOworCQlpZiAoIWluKSB7CisJCQlwZXJyb3IoYXJndltvcHRpbmRdKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJb3B0aW5kKys7CisJfSBlbHNlCisJCWluID0gc3RkaW47CisKKwlpZiAob3B0aW5kIDwgYXJnYykgeworCQlvdXRmbiA9IGFyZ3Zbb3B0aW5kXTsKKwkJbmV3Zm4gPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKG91dGZuKSsyMCk7CisJCWlmICghbmV3Zm4pIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IGVycm9yISAgRXhpdGluZy5cbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCQlzdHJjcHkobmV3Zm4sIG91dGZuKTsKKwkJc3RyY2F0KG5ld2ZuLCAiLm5ldyIpOworCQlmZCA9IG9wZW4obmV3Zm4sIE9fQ1JFQVR8T19UUlVOQ3xPX1JEV1IsIDA0NDQpOworCQlpZiAoZmQgPCAwKSB7CisJCQlwZXJyb3IobmV3Zm4pOworCQkJZXhpdCgxKTsKKwkJfQorCQlvdXQgPSBmZG9wZW4oZmQsICJ3KyIpOworCQlpZiAoIW91dCkgeworCQkJcGVycm9yKCJmZG9wZW4iKTsKKwkJCWV4aXQoMSk7CisJCX0KKworCQlmZCA9IG9wZW4ob3V0Zm4sIE9fUkRPTkxZKTsKKwkJaWYgKGZkID4gMCkgeworCQkJLyogc2F2ZSB0aGUgb3JpZ2luYWwgYXRpbWUsIGlmIHBvc3NpYmxlICovCisJCQlpZiAoZnN0YXQoZmQsICZzdGJ1ZikgPT0gMCkgeworI2lmIEhBVkVfU1RSVUNUX1NUQVRfU1RfQVRJTQorCQkJCXR2WzBdLnR2X3NlYyA9IHN0YnVmLnN0X2F0aW0udHZfc2VjOworCQkJCXR2WzBdLnR2X3VzZWMgPSBzdGJ1Zi5zdF9hdGltLnR2X25zZWMgLyAxMDAwOworI2Vsc2UKKwkJCQl0dlswXS50dl9zZWMgPSBzdGJ1Zi5zdF9hdGltZTsKKwkJCQl0dlswXS50dl91c2VjID0gMDsKKyNlbmRpZgorCQkJCWdvdF9hdGltZSA9IDE7CisJCQl9CisJCQlvbGQgPSBmZG9wZW4oZmQsICJyIik7CisJCQlpZiAoIW9sZCkKKwkJCQljbG9zZShmZCk7CisJCX0KKwl9IGVsc2UgeworCQlvdXQgPSBzdGRvdXQ7CisJCW91dGZuID0gMDsKKwl9CisKKwl3aGlsZSAoIWZlb2YoaW4pKSB7CisJCWlmIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCXN1YnN0aXR1dGVfbGluZShsaW5lKTsKKwkJZnB1dHMobGluZSwgb3V0KTsKKwl9CisJZmNsb3NlKGluKTsKKwlpZiAob3V0Zm4pIHsKKwkJZmZsdXNoKG91dCk7CisJCXJld2luZChvdXQpOworCQlpZiAob2xkICYmIGNvbXBhcmVfZmlsZShvbGQsIG91dCkpIHsKKwkJCWlmICh2ZXJib3NlKQorCQkJCXByaW50ZigiTm8gY2hhbmdlLCBrZWVwaW5nICVzLlxuIiwgb3V0Zm4pOworCQkJaWYgKGFkanVzdF90aW1lc3RhbXApIHsKKwkJCQlpZiAodmVyYm9zZSkKKwkJCQkJcHJpbnRmKCJVcGRhdGluZyBtb2R0aW1lIGZvciAlc1xuIiwgb3V0Zm4pOworCQkJCWlmIChnZXR0aW1lb2ZkYXkoJnR2WzFdLCBOVUxMKSA8IDApIHsKKwkJCQkJcGVycm9yKCJnZXR0aW1lb2ZkYXkiKTsKKwkJCQkJZXhpdCgxKTsKKwkJCQl9CisJCQkJaWYgKGdvdF9hdGltZSA9PSAwKQorCQkJCQl0dlswXSA9IHR2WzFdOworCQkJCWVsc2UgaWYgKHZlcmJvc2UpCisJCQkJCXByaW50ZigiVXNpbmcgb3JpZ2luYWwgYXRpbWVcbiIpOworCQkJCXNldF91dGltZXMob3V0Zm4sIGZpbGVubyhvbGQpLCB0dik7CisJCQl9CisJCQlmY2xvc2Uob3V0KTsKKwkJCWlmICh1bmxpbmsobmV3Zm4pIDwgMCkKKwkJCQlwZXJyb3IoInVubGluayIpOworCQl9IGVsc2UgeworCQkJaWYgKHZlcmJvc2UpCisJCQkJcHJpbnRmKCJDcmVhdGluZyBvciByZXBsYWNpbmcgJXMuXG4iLCBvdXRmbik7CisJCQlmY2xvc2Uob3V0KTsKKwkJCWlmIChvbGQpCisJCQkJZmNsb3NlKG9sZCk7CisJCQlvbGQgPSBOVUxMOworCQkJaWYgKHJlbmFtZShuZXdmbiwgb3V0Zm4pIDwgMCkgeworCQkJCXBlcnJvcigicmVuYW1lIik7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAob2xkKQorCQlmY2xvc2Uob2xkKTsKKwlyZXR1cm4gKDApOworfQorCisKZGlmZiAtLWdpdCBhL3V0aWwvc3Vic3QuY29uZi5pbiBiL3V0aWwvc3Vic3QuY29uZi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGZkZTdhCi0tLSAvZGV2L251bGwKKysrIGIvdXRpbC9zdWJzdC5jb25mLmluCkBAIC0wLDAgKzEsMjIgQEAKK0FXSwkJCUBBV0tACitTRUQJCQlAU0VEQAorRVRfRElSCQkJQEVUX0RJUkAKK1NTX0RJUgkJCUBTU19ESVJACitFMkZTUFJPR1NfTU9OVEgJCUBFMkZTUFJPR1NfTU9OVEhACitFMkZTUFJPR1NfWUVBUgkJQEUyRlNQUk9HU19ZRUFSQAorRTJGU1BST0dTX1ZFUlNJT04JQEUyRlNQUk9HU19WRVJTSU9OQAorU0laRU9GX0xPTkdfTE9ORwlAU0laRU9GX0xPTkdfTE9OR0AKK1NJWkVPRl9MT05HCQlAU0laRU9GX0xPTkdACitTSVpFT0ZfSU5UCQlAU0laRU9GX0lOVEAKK1NJWkVPRl9TSE9SVAkJQFNJWkVPRl9TSE9SVEAKK2RhdGFyb290ZGlyCQlAZGF0YXJvb3RkaXJACitkYXRhZGlyCQkJQGRhdGFkaXJACityb290X3N5c2NvbmZkaXIJCUByb290X3N5c2NvbmZkaXJACiskZGF0YXJvb3RkaXIJCUBkYXRhcm9vdGRpckAKKyRyb290X3ByZWZpeAkJQHJvb3RfcHJlZml4QAorJHByZWZpeAkJCUBwcmVmaXhACisjIEVuYWJsZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGpvdXJuYWwgZGV2aWNlIG1rZTJmcywgdHVuZTJmcywgYW5kCisjIGUyZnNjaydzIG1hbiBwYWdlCitKREVWCQkJCisjIEVuYWJsZSBkb2N1bWVudGF0aW9uIGZvciBxdW90YSBmZWF0dXJlIGluIG1rZTJmcworUVVPVEFfTUFOX0NPTU1FTlQJQFFVT1RBX01BTl9DT01NRU5UQApkaWZmIC0tZ2l0IGEvdXRpbC9zeW1saW5rcy5jIGIvdXRpbC9zeW1saW5rcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYjMzZjgKLS0tIC9kZXYvbnVsbAorKysgYi91dGlsL3N5bWxpbmtzLmMKQEAgLTAsMCArMSwzODcgQEAKKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaWZuZGVmIF9QT1NJWF9TT1VSQ0UKKyNkZWZpbmUgX1BPU0lYX1NPVVJDRQorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZmRlZiBIQVZFX01BTExPQ19ICisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZm5kZWYgU19JU0xOSworI2RlZmluZSBTX0lTTE5LKG1vZGUpICgoKG1vZGUpICYgKF9TX0lGTVQpKSA9PSAoX1NfSUZMTkspKQorI2VuZGlmCisKKyNpZm5kZWYgUEFUSF9NQVgKKyNkZWZpbmUgUEFUSF9NQVggMTAyNAorI2VuZGlmCisKKyNkZWZpbmUgcHJvZ3ZlciAiJXM6IHNjYW4vY2hhbmdlIHN5bWJvbGljIGxpbmtzIC0gdjEuMyAtIGJ5IE1hcmsgTG9yZFxuXG4iCitzdGF0aWMgY2hhciAqcHJvZ25hbWU7CitzdGF0aWMgaW50IHZlcmJvc2UgPSAwLCBmaXhfbGlua3MgPSAwLCByZWN1cnNlID0gMCwgZGVsZXRlID0gMCwgc2hvcnRlbiA9IDAsCisJCXRlc3RpbmcgPSAwLCBzaW5nbGVfZnMgPSAxOworCisvKgorICogdGlkeXBhdGggcmVtb3ZlcyBleGNlc3Mgc2xhc2hlcyBhbmQgIi4iIHJlZmVyZW5jZXMgZnJvbSBhIHBhdGggc3RyaW5nCisgKi8KKworc3RhdGljIGludCBzdWJzdHIgKGNoYXIgKnMsIGNoYXIgKm9sZCwgY2hhciAqbmV3KQoreworCWNoYXIgKnRtcCA9IE5VTEw7CisJaW50IG9sZGxlbiA9IHN0cmxlbihvbGQpLCBuZXdsZW4gPSAwOworCisJaWYgKE5VTEwgPT0gc3Ryc3RyKHMsIG9sZCkpCisJCXJldHVybiAwOworCisJaWYgKG5ldykKKwkJbmV3bGVuID0gc3RybGVuKG5ldyk7CisKKwlpZiAobmV3bGVuID4gb2xkbGVuKSB7CisJCWlmICgodG1wID0gbWFsbG9jKHN0cmxlbihzKSkpID09IE5VTEwpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAibm8gbWVtb3J5XG4iKTsKKwkJCWV4aXQgKDEpOworCQl9CisJfQorCisJd2hpbGUgKE5VTEwgIT0gKHMgPSBzdHJzdHIocywgb2xkKSkpIHsKKwkJY2hhciAqcCwgKm9sZF9zID0gczsKKworCQlpZiAobmV3KSB7CisJCQlpZiAobmV3bGVuID4gb2xkbGVuKQorCQkJCW9sZF9zID0gc3RyY3B5KHRtcCwgcyk7CisJCQlwID0gbmV3OworCQkJd2hpbGUgKCpwKQorCQkJCSpzKysgPSAqcCsrOworCQl9CisJCXAgPSBvbGRfcyArIG9sZGxlbjsKKwkJd2hpbGUgKCgqcysrID0gKnArKykpOworCX0KKwlpZiAodG1wKQorCQlmcmVlKHRtcCk7CisJcmV0dXJuIDE7Cit9CisKKworc3RhdGljIGludCB0aWR5X3BhdGggKGNoYXIgKnBhdGgpCit7CisJaW50IHRpZGllZCA9IDA7CisJY2hhciAqcywgKnA7CisKKwlzID0gcGF0aCArIHN0cmxlbihwYXRoKSAtIDE7CisJaWYgKHNbMF0gIT0gJy8nKSB7CS8qIHRtcCB0cmFpbGluZyBzbGFzaCBzaW1wbGlmaWVzIHRoaW5ncyAqLworCQlzWzFdID0gJy8nOworCQlzWzJdID0gJ1wwJzsKKwl9CisJd2hpbGUgKHN1YnN0cihwYXRoLCAiLy4vIiwgIi8iKSkKKwkJdGlkaWVkID0gMTsKKwl3aGlsZSAoc3Vic3RyKHBhdGgsICIvLyIsICIvIikpCisJCXRpZGllZCA9IDE7CisKKwl3aGlsZSAoKHAgPSBzdHJzdHIocGF0aCwiLy4uLyIpKSAhPSBOVUxMKSB7CisJCXMgPSBwKzM7CisJCWZvciAocC0tOyBwICE9IHBhdGg7IHAtLSkgaWYgKCpwID09ICcvJykgYnJlYWs7CisJCWlmICgqcCAhPSAnLycpCisJCQlicmVhazsKKwkJd2hpbGUgKCgqcCsrID0gKnMrKykpOworCQl0aWRpZWQgPSAxOworCX0KKwlpZiAoKnBhdGggPT0gJ1wwJykKKwkJc3RyY3B5KHBhdGgsIi8iKTsKKwlwID0gcGF0aCArIHN0cmxlbihwYXRoKSAtIDE7CisJaWYgKHAgIT0gcGF0aCAmJiAqcCA9PSAnLycpCisJCSpwLS0gPSAnXDAnOwkvKiByZW1vdmUgdG1wIHRyYWlsaW5nIHNsYXNoICovCisJd2hpbGUgKHAgIT0gcGF0aCAmJiAqcCA9PSAnLycpIHsJLyogcmVtb3ZlIGFueSBvdGhlcnMgKi8KKwkJKnAtLSA9ICdcMCc7CisJCXRpZGllZCA9IDE7CisJfQorCXdoaWxlICghc3RybmNtcChwYXRoLCIuLyIsMikpIHsKKwkJZm9yIChwID0gcGF0aCwgcyA9IHBhdGgrMjsgKCpwKysgPSAqcysrKTspOworCQl0aWRpZWQgPSAxOworCX0KKwlyZXR1cm4gdGlkaWVkOworfQorCitzdGF0aWMgaW50IHNob3J0ZW5fcGF0aCAoY2hhciAqcGF0aCwgY2hhciAqYWJzcGF0aCkKK3sKKwlzdGF0aWMgY2hhciBkaXJbUEFUSF9NQVhdOworCWludCBzaG9ydGVuZWQgPSAwOworCWNoYXIgKnA7CisKKwkvKiBnZXQgcmlkIG9mIHVubmVjZXNzYXJ5ICIuLi9kaXIiIHNlcXVlbmNlcyAqLworCXdoaWxlIChhYnNwYXRoICYmIHN0cmxlbihhYnNwYXRoKSA+IDEgJiYgKHAgPSBzdHJzdHIocGF0aCwiLi4vIikpKSB7CisJCS8qIGZpbmQgaW5uZXJtb3N0IG9jY3VyYW5jZSBvZiAiLi4vZGlyIiwgYW5kIHNhdmUgImRpciIgKi8KKwkJaW50IHNsYXNoZXMgPSAyOworCQljaGFyICphLCAqcywgKmQgPSBkaXI7CisJCXdoaWxlICgocyA9IHN0cnN0cihwKzMsICIuLi8iKSkpIHsKKwkJCSsrc2xhc2hlczsKKwkJCXAgPSBzOworCQl9CisJCXMgPSBwKzM7CisJCSpkKysgPSAnLyc7CisJCXdoaWxlICgqcyAmJiAqcyAhPSAnLycpCisJCQkqZCsrID0gKnMrKzsKKwkJKmQrKyA9ICcvJzsKKwkJKmQgPSAnXDAnOworCQlpZiAoIXN0cmNtcChkaXIsIi8vIikpCisJCQlicmVhazsKKwkJLyogbm90ZTogcCBzdGlsbCBwb2ludHMgYXQgLi4vZGlyICovCisJCWlmICgqcyAhPSAnLycgfHwgISorK3MpCisJCQlicmVhazsKKwkJYSA9IGFic3BhdGggKyBzdHJsZW4oYWJzcGF0aCkgLSAxOworCQl3aGlsZSAoc2xhc2hlcy0tID4gMCkgeworCQkJaWYgKGEgPD0gYWJzcGF0aCkKKwkJCQlnb3RvIHVnaGg7CisJCQl3aGlsZSAoKi0tYSAhPSAnLycpIHsKKwkJCQlpZiAoYSA8PSBhYnNwYXRoKQorCQkJCQlnb3RvIHVnaGg7CisJCQl9CisJCX0KKwkJaWYgKHN0cm5jbXAoZGlyLCBhLCBzdHJsZW4oZGlyKSkpCisJCQlicmVhazsKKwkJd2hpbGUgKCgqcCsrID0gKnMrKykpOyAvKiBkZWxldGUgdGhlIC4uL2RpciAqLworCQlzaG9ydGVuZWQgPSAxOworCX0KK3VnaGg6CisJcmV0dXJuIHNob3J0ZW5lZDsKK30KKworCitzdGF0aWMgdm9pZCBmaXhfc3ltbGluayAoY2hhciAqcGF0aCwgZGV2X3QgbXlfZGV2KQoreworCXN0YXRpYyBjaGFyIGxwYXRoW1BBVEhfTUFYXSwgbmV3W1BBVEhfTUFYXSwgYWJzcGF0aFtQQVRIX01BWF07CisJY2hhciAqcCwgKm5wLCAqbHAsICp0YWlsLCAqbXNnOworCXN0cnVjdCBzdGF0IHN0YnVmLCBsc3RidWY7CisJaW50IGMsIGZpeF9hYnMgPSAwLCBmaXhfbWVzc3kgPSAwLCBmaXhfbG9uZyA9IDA7CisKKwlpZiAoKGMgPSByZWFkbGluayhwYXRoLCBscGF0aCwgc2l6ZW9mKGxwYXRoKSkpID09IC0xKSB7CisJCXBlcnJvcihwYXRoKTsKKwkJcmV0dXJuOworCX0KKwlscGF0aFtjXSA9ICdcMCc7CS8qIHJlYWRsaW5rIGRvZXMgbm90IG51bGwgdGVybWluYXRlIGl0ICovCisKKwkvKiBjb25zdHJ1Y3QgdGhlIGFic29sdXRlIGFkZHJlc3Mgb2YgdGhlIGxpbmsgKi8KKwlhYnNwYXRoWzBdID0gJ1wwJzsKKwlpZiAobHBhdGhbMF0gIT0gJy8nKSB7CisJCXN0cmNhdChhYnNwYXRoLHBhdGgpOworCQljID0gc3RybGVuKGFic3BhdGgpOworCQlpZiAoKGMgPiAwKSAmJiAoYWJzcGF0aFtjLTFdID09ICcvJykpCisJCQlhYnNwYXRoW2MtMV0gPSAnXDAnOyAvKiBjdXQgdHJhaWxpbmcgLyAqLworCQlpZiAoKHAgPSBzdHJyY2hyKGFic3BhdGgsJy8nKSkgIT0gTlVMTCkKKwkJCSpwID0gJ1wwJzsgLyogY3V0IGxhc3QgY29tcG9uZW50ICovCisJCXN0cmNhdChhYnNwYXRoLCIvIik7CisJfQorCXN0cmNhdChhYnNwYXRoLGxwYXRoKTsKKwkodm9pZCkgdGlkeV9wYXRoKGFic3BhdGgpOworCisJLyogY2hlY2sgZm9yIHZhcmlvdXMgdGhpbmdzICovCisJaWYgKHN0YXQoYWJzcGF0aCwgJnN0YnVmKSA9PSAtMSkgeworCQlwcmludGYoImRhbmdsaW5nOiAlcyAtPiAlc1xuIiwgcGF0aCwgbHBhdGgpOworCQlpZiAoZGVsZXRlKSB7CisJCQlpZiAodW5saW5rIChwYXRoKSkgeworCQkJCXBlcnJvcihwYXRoKTsgCisJCQl9IGVsc2UKKwkJCQlwcmludGYoImRlbGV0ZWQ6ICAlcyAtPiAlc1xuIiwgcGF0aCwgbHBhdGgpOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpZiAoc2luZ2xlX2ZzKQorCQlsc3RhdChhYnNwYXRoLCAmbHN0YnVmKTsgLyogaWYgdGhlIGFib3ZlIGRpZG4ndCBmYWlsLCB0aGVuIHRoaXMgc2hvdWxkbid0ICovCisJCisJaWYgKHNpbmdsZV9mcyAmJiBsc3RidWYuc3RfZGV2ICE9IG15X2RldikgeworCQltc2cgPSAib3RoZXJfZnM6IjsKKwl9IGVsc2UgaWYgKGxwYXRoWzBdID09ICcvJykgeworCQltc2cgPSAiYWJzb2x1dGU6IjsKKwkJZml4X2FicyA9IDE7CisJfSBlbHNlIGlmICh2ZXJib3NlKSB7CisJCW1zZyA9ICJyZWxhdGl2ZToiOworCX0gZWxzZQorCQltc2cgPSBOVUxMOworCWZpeF9tZXNzeSA9IHRpZHlfcGF0aChzdHJjcHkobmV3LGxwYXRoKSk7CisJaWYgKHNob3J0ZW4pCisJCWZpeF9sb25nID0gc2hvcnRlbl9wYXRoKG5ldywgcGF0aCk7CisJaWYgKCFmaXhfYWJzKSB7CisJCWlmIChmaXhfbWVzc3kpCisJCQltc2cgPSAibWVzc3k6ICAgIjsKKwkJZWxzZSBpZiAoZml4X2xvbmcpCisJCQltc2cgPSAibGVuZ3RoeTogIjsKKwl9CisJaWYgKG1zZyAhPSBOVUxMKQorCQlwcmludGYoIiVzICVzIC0+ICVzXG4iLCBtc2csIHBhdGgsIGxwYXRoKTsKKwlpZiAoIShmaXhfbGlua3MgfHwgdGVzdGluZykgfHwgIShmaXhfbWVzc3kgfHwgZml4X2FicyB8fCBmaXhfbG9uZykpCisJCXJldHVybjsKKworCWlmIChmaXhfYWJzKSB7CisJCS8qIGNvbnZlcnQgYW4gYWJzb2x1dGUgbGluayB0byByZWxhdGl2ZTogKi8KKwkJLyogcG9pbnQgdGFpbCBhdCBmaXJzdCBwYXJ0IG9mIGxwYXRoIHRoYXQgZGlmZmVycyBmcm9tIHBhdGggKi8KKwkJLyogcG9pbnQgcCAgICBhdCBmaXJzdCBwYXJ0IG9mIHBhdGggIHRoYXQgZGlmZmVycyBmcm9tIGxwYXRoICovCisJCSh2b2lkKSB0aWR5X3BhdGgobHBhdGgpOworCQl0YWlsID0gbHAgPSBscGF0aDsKKwkJcCA9IHBhdGg7CisJCXdoaWxlICgqcCAmJiAoKnAgPT0gKmxwKSkgeworCQkJaWYgKCpscCsrID09ICcvJykgeworCQkJCXRhaWwgPSBscDsKKwkJCQl3aGlsZSAoKisrcCA9PSAnLycpOworCQkJfQorCQl9CisKKwkJLyogbm93IGNyZWF0ZSBuZXcsIHdpdGggIi4uLyJzIGZvbGxvd2VkIGJ5IHRhaWwgKi8KKwkJbnAgPSBuZXc7CisJCXdoaWxlICgqcCkgeworCQkJaWYgKCpwKysgPT0gJy8nKSB7CisJCQkJKm5wKysgPSAnLic7CisJCQkJKm5wKysgPSAnLic7CisJCQkJKm5wKysgPSAnLyc7CisJCQkJd2hpbGUgKCpwID09ICcvJykgKytwOworCQkJfQorCQl9CisJCXN0cmNweSAobnAsIHRhaWwpOworCQkodm9pZCkgdGlkeV9wYXRoKG5ldyk7CisJCWlmIChzaG9ydGVuKSAodm9pZCkgc2hvcnRlbl9wYXRoKG5ldywgcGF0aCk7CisJfQorCXNob3J0ZW5fcGF0aChuZXcscGF0aCk7CisJaWYgKCF0ZXN0aW5nKSB7CisJCWlmICh1bmxpbmsgKHBhdGgpKSB7CisJCQlwZXJyb3IocGF0aCk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHN5bWxpbmsobmV3LCBwYXRoKSkgeworCQkJcGVycm9yKHBhdGgpOworCQkJcmV0dXJuOworCQl9CisJfQorCXByaW50ZigiY2hhbmdlZDogICVzIC0+ICVzXG4iLCBwYXRoLCBuZXcpOworfQorCitzdGF0aWMgdm9pZCBkaXJ3YWxrIChjaGFyICpwYXRoLCBpbnQgcGF0aGxlbiwgZGV2X3QgZGV2KQoreworIAljaGFyICpuYW1lOworCURJUiAqZGZkOworCXN0YXRpYyBzdHJ1Y3Qgc3RhdCBzdDsKKwlzdGF0aWMgc3RydWN0IGRpcmVudCAqZHA7CisKKwlpZiAoKGRmZCA9IG9wZW5kaXIocGF0aCkpID09IE5VTEwpIHsKKwkJcGVycm9yKHBhdGgpOworCQlyZXR1cm47CisJfQorCisJbmFtZSA9IHBhdGggKyBwYXRobGVuOworCWlmICgqKG5hbWUtMSkgIT0gJy8nKQorCQkqbmFtZSsrID0gJy8nOyAKKworCXdoaWxlICgoZHAgPSByZWFkZGlyKGRmZCkpICE9IE5VTEwgKSB7CisJCXN0cmNweShuYW1lLCBkcC0+ZF9uYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RyY21wKG5hbWUsICIuIikgJiYgc3RyY21wKG5hbWUsIi4uIikpIHsKKwkJCWlmIChsc3RhdChwYXRoLCAmc3QpID09IC0xKSB7CisJCQkJcGVycm9yKHBhdGgpOworCQkJfSBlbHNlIGlmIChzdC5zdF9kZXYgPT0gZGV2KSB7CisJCQkJaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpIHsKKwkJCQkJZml4X3N5bWxpbmsgKHBhdGgsIGRldik7CisJCQkJfSBlbHNlIGlmIChyZWN1cnNlICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCQkJZGlyd2FsayhwYXRoLCBzdHJsZW4ocGF0aCksIGRldik7CisJCQkJfQorCQkJfQorCQl9CisJfSAKKwljbG9zZWRpcihkZmQpOworCXBhdGhbcGF0aGxlbl0gPSAnXDAnOworfQorCitzdGF0aWMgdm9pZCB1c2FnZV9lcnJvciAodm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgcHJvZ3ZlciwgcHJvZ25hbWUpOworCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6XHQlcyBbLWNkb3JzdHZdIExJTkt8RElSIC4uLlxuXG4iLCBwcm9nbmFtZSk7CisJZnByaW50ZihzdGRlcnIsICJGbGFnczoiCisJCSJcdC1jID09IGNoYW5nZSBhYnNvbHV0ZS9tZXNzeSBsaW5rcyB0byByZWxhdGl2ZVxuIgorCQkiXHQtZCA9PSBkZWxldGUgZGFuZ2xpbmcgbGlua3NcbiIKKwkJIlx0LW8gPT0gd2FybiBhYm91dCBsaW5rcyBhY3Jvc3MgZmlsZSBzeXN0ZW1zXG4iCisJCSJcdC1yID09IHJlY3Vyc2UgaW50byBzdWJkaXJzXG4iCisJCSJcdC1zID09IHNob3J0ZW4gbGVuZ3RoeSBsaW5rcyAoZGlzcGxheWVkIGluIG91dHB1dCBvbmx5IHdoZW4gLWMgbm90IHNwZWNpZmllZClcbiIKKwkJIlx0LXQgPT0gc2hvdyB3aGF0IHdvdWxkIGJlIGRvbmUgYnkgLWNcbiIKKwkJIlx0LXYgPT0gdmVyYm9zZSAoc2hvdyBhbGwgc3ltbGlua3MpXG5cbiIpOworCWV4aXQoMSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyNpZiBkZWZpbmVkIChfR05VX1NPVVJDRSkgJiYgZGVmaW5lZCAoX19HTElCQ19fKQorCXN0YXRpYyBjaGFyIHBhdGhbUEFUSF9NQVgrMl07CisJY2hhciogY3dkID0gZ2V0X2N1cnJlbnRfZGlyX25hbWUoKTsKKyNlbHNlCisJc3RhdGljIGNoYXIgcGF0aFtQQVRIX01BWCsyXSwgY3dkW1BBVEhfTUFYKzJdOworI2VuZGlmCisJaW50IGRpcmNvdW50ID0gMDsKKwljaGFyIGMsICpwOworCisJaWYgICgocHJvZ25hbWUgPSAoY2hhciAqKSBzdHJyY2hyKCphcmd2LCAnLycpKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHByb2duYW1lID0gKmFyZ3Y7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm9nbmFtZSsrOworCisjaWYgZGVmaW5lZCAoX0dOVV9TT1VSQ0UpICYmIGRlZmluZWQgKF9fR0xJQkNfXykKKwlpZiAoTlVMTCA9PSBjd2QpIHsKKwkJZnByaW50ZihzdGRlcnIsImdldF9jdXJyZW50X2Rpcl9uYW1lKCkgZmFpbGVkXG4iKTsKKyNlbHNlCisJaWYgKE5VTEwgPT0gZ2V0Y3dkKGN3ZCxQQVRIX01BWCkpIHsKKwkJZnByaW50ZihzdGRlcnIsImdldGN3ZCgpIGZhaWxlZFxuIik7CisjZW5kaWYKKwkJZXhpdCAoMSk7CisJfQorI2lmIGRlZmluZWQgKF9HTlVfU09VUkNFKSAmJiBkZWZpbmVkIChfX0dMSUJDX18pCisJY3dkID0gcmVhbGxvYyhjd2QsIHN0cmxlbihjd2QpKzIpOworCWlmIChjd2QgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgInJlYWxsb2MoKSBmYWlsZWRcbiIpOworCQlleGl0ICgxKTsKKwl9CisjZW5kaWYKKwlpZiAoISpjd2QgfHwgY3dkW3N0cmxlbihjd2QpLTFdICE9ICcvJykKKwkJc3RyY2F0KGN3ZCwiLyIpOworCisJd2hpbGUgKC0tYXJnYykgeworCQlwID0gKisrYXJndjsKKwkJaWYgKCpwID09ICctJykgeworCQkJaWYgKCorK3AgPT0gJ1wwJykKKwkJCQl1c2FnZV9lcnJvcigpOworCQkJd2hpbGUgKChjID0gKnArKykpIHsKKwkJCQkgICAgIGlmIChjID09ICdjJykJZml4X2xpbmtzID0gMTsKKwkJCQllbHNlIGlmIChjID09ICdkJykJZGVsZXRlICAgID0gMTsKKwkJCQllbHNlIGlmIChjID09ICdvJykJc2luZ2xlX2ZzID0gMDsKKwkJCQllbHNlIGlmIChjID09ICdyJykJcmVjdXJzZSAgID0gMTsKKwkJCQllbHNlIGlmIChjID09ICdzJykJc2hvcnRlbiAgID0gMTsKKwkJCQllbHNlIGlmIChjID09ICd0JykJdGVzdGluZyAgID0gMTsKKwkJCQllbHNlIGlmIChjID09ICd2JykJdmVyYm9zZSAgID0gMTsKKwkJCQllbHNlCQkJdXNhZ2VfZXJyb3IoKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBzdGF0IHN0OworCQkJaWYgKCpwID09ICcvJykKKwkJCQkqcGF0aCA9ICdcMCc7CisJCQllbHNlCisJCQkJc3RyY3B5KHBhdGgsY3dkKTsKKwkJCXRpZHlfcGF0aChzdHJjYXQocGF0aCwgcCkpOworCQkJaWYgKGxzdGF0KHBhdGgsICZzdCkgPT0gLTEpCisJCQkJcGVycm9yKHBhdGgpOworCQkJZWxzZSBpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkKKwkJCQlmaXhfc3ltbGluayhwYXRoLCBzdC5zdF9kZXYpOworCQkJZWxzZQorCQkJCWRpcndhbGsocGF0aCwgc3RybGVuKHBhdGgpLCBzdC5zdF9kZXYpOworCQkJKytkaXJjb3VudDsKKwkJfQorCX0KKwlpZiAoZGlyY291bnQgPT0gMCkKKwkJdXNhZ2VfZXJyb3IoKTsKKwlleGl0ICgwKTsKK30KZGlmZiAtLWdpdCBhL3ZlcnNpb24uaCBiL3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmZlMjU0Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyc2lvbi5oCkBAIC0wLDAgKzEsMTEgQEAKKy8qCisgKiB2ZXJzaW9uLmggLS0tIGNvbnRyb2xzIHRoZSB2ZXJzaW9uIG51bWJlciBwcmludGVkIGJ5IHRoZSBlMmZzCisgKiBwcm9ncmFtcy4KKyAqCisgKiBDb3B5cmlnaHQgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywKKyAqIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgYnkgVGhlb2RvcmUgVHMnby4gIFRoaXMKKyAqIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2Mi4KKyAqLworCisjZGVmaW5lIEUyRlNQUk9HU19WRVJTSU9OICIxLjQyLjEzIgorI2RlZmluZSBFMkZTUFJPR1NfREFURSAiMTctTWF5LTIwMTUiCmRpZmYgLS1naXQgYS93b3Jkd3JhcC5wbCBiL3dvcmR3cmFwLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwN2M2MjgKLS0tIC9kZXYvbnVsbAorKysgYi93b3Jkd3JhcC5wbApAQCAtMCwwICsxLDI5IEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgd29yZHdyYXAucGwgLS0tIGRvZXMgd29yZCB3cmFwCisjCit3aGlsZSAoPD4pIHsKKyAgICBpZiAoL14jLykgewkJIyBkb24ndCB3b3JkIHdyYXAgY29tbWVudHMKKwlwcmludDsKKwluZXh0OworICAgIH0KKyAgICBuZXh0IGlmICgvXiQvKTsJIyBza2lwIGJsYW5rIGxpbmVzCisgICAgJGxpbmVsZW4gPSAwOworICAgIEB3b3JkcyA9IHNwbGl0OworICAgIHdoaWxlIChkZWZpbmVkKCR3b3JkID0gc2hpZnQgQHdvcmRzKSkgeworCSR3b3JkID1+IHMjXCRcKHNyY2RpclwpL1wuXC4vdmVyc2lvbi5oI1wkXCh0b3Bfc3JjZGlyXCkvdmVyc2lvbi5oIzsKKwkkd29yZCA9fiBzI1wkXChzcmNkaXJcKS8uXC5cL1wuXC4vdmVyc2lvbi5oI1wkXCh0b3Bfc3JjZGlyXCkvdmVyc2lvbi5oIzsKKwkkd29yZCA9fiBzI1wkXChzcmNkaXJcKS8uXC5cL2V0L2NvbV9lcnIuaCNcJFwodG9wX3NyY2RpclwpL2xpYi9ldC9jb21fZXJyLmgjOworCWlmICgkbGluZWxlbiA+IDApIHsKKwkgICAgcHJpbnRmKCIgIik7CisJfQorCSRsZW4gPSBsZW5ndGgoJHdvcmQpICsgMTsKKwkkbGluZWxlbiArPSAkbGVuOworCWlmICgkbGluZWxlbiA+IDc4KSB7CisJICAgIHByaW50ZigiXFxcbiAiKTsKKwkgICAgJGxpbmVsZW4gPSAxKyRsZW47CisJfQorCXByaW50ZigiJXMiLCAkd29yZCk7CisgICAgfQorICAgIHByaW50ZigiXG4iKTsKK30K